[
  {
    "path": ".dockerignore",
    "content": "### Node template\n# 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# Snowpack dependency directory (https://snowpack.dev/)\nweb_modules/\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.parcel-cache\n\n# Next.js build output\n.next\nout\n\n# Nuxt.js build / generate output\n.nuxt\ndist\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# Stores VSCode versions used for testing VSCode extensions\n.vscode-test\n\n# yarn v2\n.yarn/cache\n.yarn/unplugged\n.yarn/build-state.yml\n.yarn/install-state.gz\n.pnp.*\n\n"
  },
  {
    "path": ".env-docker",
    "content": "API_URL=http://api\nDASHBOARD_URL=http://dashboard:8080\nPORT=3000\nPROD=false\n"
  },
  {
    "path": ".gitignore",
    "content": ".*.sw*\n.sass-cache\n.DS_Store\nnode_modules/\n_site/\n/.idea/\n.jekyll-metadata\n.tmp\nlinkchecker.html\n\n* text=auto\n/.env\n/content/_includes/head_includes.prod.html\n/content/_includes/fluid/footer_tags.prod.html\n/content/_includes/fluid/head.prod.html\n/dist/\n/server/pages/_includes/head.prod.html\n/server/pages/_includes/scripts.prod.html\n/.vscode\n/package-lock.json\n/null\n/.stencil\n"
  },
  {
    "path": ".npmrc",
    "content": "package-lock=false"
  },
  {
    "path": ".slugignore",
    "content": "assets/img/\n"
  },
  {
    "path": "CONTRIBUTING.md",
    "content": "The ionic website repo is licensed and managed separately from the ionic repo itself.\n\nBy contributing to the driftyco/ionic-site repo, you agree to have your contributions licensed under the Apache 2.0 license. See the `LICENSE` file for details on this license.\n\n## GUIDELINES\n\nWhen in doubt, keep pull requests small. Just a few related changes and nothing else. Separate different features or changes into different PRs to make it easy to merge.\n\nAlways use two spaces and no tabs for indentation.\n\n## Structure\n\nNote that `content/docs/api`, `content/docs/api`, `content/docs/native`, `content/docs/storage`, and anything in `content/dist` is automatically generated. The v1, v2, Ionic Native, and Ionic Storage docs are generated by dgeni on every commit to their respective source repos, using inline code comments.\n\nThis site's humble beginnings started as a Github Pages site, and much of that core structure remains. Now it is a tiny Node.js/Express app that lives on a Heroku server. The Node.js app for the most part serves static html files that have been generated by Jekyll. Some pages are generated server-side via traditional Express routes with Nunjucks templates (very similar to jekyll). These are contained within the `server` directory.\n\nOn every commit, Heroku runs a clean build and starts a node server at [ionic-site-staging.herokuapp.com](https://ionic-site-staging.herokuapp.com). Periodically the Ionic core team will inspect the site and promote the staging server to [ionicframework.com](https://ionicframework.com).\n\nThis project is in some ways multiple sites in one and has multiple build/compile processes. `gulp watch` will run all of these, and should meet most style and JS processing needs. Some older docs pages are ignored for performance reasons. A `bundle exec jekyll build` should update these.\n\nv1 styles are in `content/scss` and output to `content/css/site.css`. v2 styles are in `assets/scss` and output to `content/css/v2.css`.\n\nv2 images and JS are preprocessed and optimized. Their working directories should be `assets/img` and `assets/js` respectively.\n\nPer Jekyll conventions, any directory starting with an underscore does not get copied to production.\n"
  },
  {
    "path": "Dockerfile",
    "content": "FROM node:16\n\nWORKDIR /usr/src/app\n\nCOPY package.json ./\n\nRUN npm i\n\nCOPY . ./\n\nEXPOSE 3000\n\nCMD npm run start\n"
  },
  {
    "path": "Gulpfile.js",
    "content": "const gulp = require('gulp');\nconst $ = require('gulp-load-plugins')();\nconst browserSync = require('browser-sync');\nconst cachebust = require('gulp-cache-bust');\nconst cleanCSS = require('gulp-clean-css');\nconst concat = require('gulp-concat');\nconst cp = require('child_process');\nconst del = require('del');\nconst es = require('event-stream');\nconst footer = require('gulp-footer');\nconst header = require('gulp-header');\nconst lib = require('./assets/3rd-party-libs.json');\nconst nodemon = require('gulp-nodemon');\nconst path = require('path');\nconst pkg = require('./package.json');\nconst prefix = require('gulp-autoprefixer');\nconst rename = require('gulp-rename');\nconst sass = require('gulp-sass')(require('node-sass'));\nconst uglify = require('gulp-uglify-es').default;\n\nvar closureStart =\n  '/*!\\n' +\n  ' * Ionic \\n' +\n  ' * Copyright 2015-present Drifty Co.\\n' +\n  ' */\\n' +\n  '(function() {\\n';\nvar closureEnd = '\\n})();\\n';\nvar version = pkg.version;\nlet server;\n\nconst bustCache = async () => {\n\n  function cacheBust(path, fileName) {\n    return gulp.src(path + fileName)\n      .pipe(cachebust({\n        basePath: 'dist'\n      }))\n      .pipe(rename({ extname: '.prod.html' }))\n      .pipe(gulp.dest('./' + path));\n  }\n\n  var bustArray = function () {\n    return [\n      cacheBust('server/pages/_includes/', 'head.html'),\n      cacheBust('server/pages/_includes/', 'scripts.html'),\n    ];\n  };\n\n  return es.concat(bustArray());\n}\n\nfunction bustCacheAndReload(done) {\n  bustCache().on('end', function () {\n    done();\n    browserSync.reload();\n    // apply the template change in the background\n    // gulp.start('jekyll-build.incremental');\n  });\n}\n\nfunction restartAndReload(done) {\n  server.emit('restart');\n  if (typeof done === 'function') {\n    done();\n  }\n  browserSync.reload();\n}\n\nfunction justReload(done) {\n  // server.restart(function(err) {\n  // if (!err) {\n  done();\n  browserSync.reload();\n  // }\n  // });\n}\n\nconst stylesOthers = () => {\n  // For best performance, don't add Sass partials to `gulp.src`\n  return gulp.src([\n    'assets/scss/**/*.scss',\n    '!assets/scss/styles.scss'\n  ])\n    .pipe($.sourcemaps.init())\n    .pipe(sass({\n      precision: 10,\n      onError: console.error.bind(console, 'Sass error:'),\n      includePaths: [path.join(__dirname, 'node_modules')]\n    }))\n    .pipe(prefix())\n    .pipe($.sourcemaps.write())\n    .pipe(gulp.dest('dist/css/'))\n    // Concatenate and minify styles\n    .pipe(cleanCSS({ compatibility: 'ie8' }))\n    .pipe(rename({ extname: '.min.css' }))\n    .pipe(gulp.dest('dist/css/'))\n    .pipe($.size({ title: 'styles' }));\n};\n\nconst stylesMain = () => {\n  // For best performance, don't add Sass partials to `gulp.src`\n  return gulp.src(\n    ['assets/scss/styles.scss'].concat(lib.css)\n  ).pipe($.sourcemaps.init())\n    .pipe(sass({\n      precision: 10,\n      onError: console.error.bind(console, 'Sass error:'),\n      includePaths: [path.join(__dirname, 'node_modules')]\n    }))\n    .pipe(prefix())\n    .pipe(concat('styles.css'))\n    .pipe($.sourcemaps.write())\n    .pipe(gulp.dest('dist/css/'))\n    // Concatenate and minify styles\n    .pipe(cleanCSS({ compatibility: 'ie8' }))\n    .pipe(rename({ extname: '.min.css' }))\n    .pipe(gulp.dest('dist/css/'))\n    .pipe($.size({ title: 'styles' }));\n};\n\n// compress and concat JS\nconst js = () => {\n  return gulp.src(lib.js.concat(['assets/js/**/*.js']))\n    .pipe($.sourcemaps.init())\n    .pipe(concat('ionic-site.js', { newLine: ';' }))\n    .pipe(header(closureStart))\n    .pipe(footer(closureEnd))\n    .pipe($.sourcemaps.write())\n    .pipe(gulp.dest('dist/js'))\n    .pipe(uglify())\n    .pipe(rename({ extname: '.min.js' }))\n    .pipe(gulp.dest('dist/js'))\n    .pipe($.size({ title: 'js' }));\n};\n\n\nconst stencil = (done) => {\n  return cp.spawn(path.join('node_modules', '.bin', 'stencil'),\n    ['build', process.env.PROD ? '' : '--dev'],\n    {\n      cwd: process.cwd(),\n      env: {\n        PATH: process.env.PATH\n      },\n      shell: true,\n      stdio: 'inherit'\n    }\n  )\n\n    .on('close', async () => {\n      done();\n\n    }).on('error', function (err) {\n      console.log(err)\n      throw err;\n    });\n};\n\nconst serverStart = (done) => {\n  server = nodemon({\n    script: 'server.js',\n    watch: 'server',\n  }).on('start', () => {\n    if (browserSync.active) {\n      setTimeout(browserSync.reload, 3050);\n    } else {\n      // giving the server 2 seconds to start\n      setTimeout(done, 2000);\n    }\n  })\n    .on('crash', function () {\n      console.error('Application has crashed!\\n')\n      server.emit('restart', 10)  // restart the server in 10 seconds\n    });\n};\n\n\nconst slugPrep = () => {\n  return del(['assets']);\n};\n\nconst build = gulp.series(\n  gulp.parallel(\n    gulp.series(\n      stencil,\n      js\n    ),\n    stylesMain,\n    stylesOthers\n  ),\n  bustCache\n)\n\nconst run = gulp.parallel(\n  build,\n  serverStart\n)\n\nconst watchServer = async () => gulp.watch(['server.js', 'server/**/*'], restartAndReload);\nconst watchStylesMain = async () => gulp.watch(['assets/scss/**/_*.scss', 'assets/scss/components/_*.scss', 'assets/scss/styles.scss'], gulp.series(stylesMain, justReload))\nconst watchStylesOthers = async () => gulp.watch(['assets/scss/**/*.scss', '!assets/scss/styles.scss', '!assets/scss/**/_*.scss'], gulp.series(stylesOthers, justReload))\nconst watchJS = async () => gulp.watch(['assets/js/**/*.js'], gulp.series(js, justReload));\nconst watchStencil = async () => gulp.watch(['assets/stencil/**/*.{ts,tsx,scss}', '!assets/stencil/components.d.ts'], gulp.series(stencil, justReload));\n\nconst watch = gulp.series(\n  run,\n  // serverStart,\n  gulp.parallel(\n    watchServer,\n    watchStylesMain,\n    watchStylesOthers,\n    watchJS,\n    watchStencil\n  ),\n  async () => {\n    return browserSync.init({ 'proxy': 'http://localhost:3000', 'port': 3003 })\n  }\n);\n\n\n// gulp.task('default', ['build']);\n\nmodule.exports = {\n  build,\n  bustCache,\n  js,\n  run,\n  serverStart,\n  slugPrep,\n  stencil,\n  stylesMain,\n  stylesOthers,\n  watch,\n};\n"
  },
  {
    "path": "LICENSE",
    "content": "\n                                 Apache License\n                           Version 2.0, January 2004\n                        http://www.apache.org/licenses/\n\n   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION\n\n   1. Definitions.\n\n      \"License\" shall mean the terms and conditions for use, reproduction,\n      and distribution as defined by Sections 1 through 9 of this document.\n\n      \"Licensor\" shall mean the copyright owner or entity authorized by\n      the copyright owner that is granting the License.\n\n      \"Legal Entity\" shall mean the union of the acting entity and all\n      other entities that control, are controlled by, or are under common\n      control with that entity. For the purposes of this definition,\n      \"control\" means (i) the power, direct or indirect, to cause the\n      direction or management of such entity, whether by contract or\n      otherwise, or (ii) ownership of fifty percent (50%) or more of the\n      outstanding shares, or (iii) beneficial ownership of such entity.\n\n      \"You\" (or \"Your\") shall mean an individual or Legal Entity\n      exercising permissions granted by this License.\n\n      \"Source\" form shall mean the preferred form for making modifications,\n      including but not limited to software source code, documentation\n      source, and configuration files.\n\n      \"Object\" form shall mean any form resulting from mechanical\n      transformation or translation of a Source form, including but\n      not limited to compiled object code, generated documentation,\n      and conversions to other media types.\n\n      \"Work\" shall mean the work of authorship, whether in Source or\n      Object form, made available under the License, as indicated by a\n      copyright notice that is included in or attached to the work\n      (an example is provided in the Appendix below).\n\n      \"Derivative Works\" shall mean any work, whether in Source or Object\n      form, that is based on (or derived from) the Work and for which the\n      editorial revisions, annotations, elaborations, or other modifications\n      represent, as a whole, an original work of authorship. For the purposes\n      of this License, Derivative Works shall not include works that remain\n      separable from, or merely link (or bind by name) to the interfaces of,\n      the Work and Derivative Works thereof.\n\n      \"Contribution\" shall mean any work of authorship, including\n      the original version of the Work and any modifications or additions\n      to that Work or Derivative Works thereof, that is intentionally\n      submitted to Licensor for inclusion in the Work by the copyright owner\n      or by an individual or Legal Entity authorized to submit on behalf of\n      the copyright owner. For the purposes of this definition, \"submitted\"\n      means any form of electronic, verbal, or written communication sent\n      to the Licensor or its representatives, including but not limited to\n      communication on electronic mailing lists, source code control systems,\n      and issue tracking systems that are managed by, or on behalf of, the\n      Licensor for the purpose of discussing and improving the Work, but\n      excluding communication that is conspicuously marked or otherwise\n      designated in writing by the copyright owner as \"Not a Contribution.\"\n\n      \"Contributor\" shall mean Licensor and any individual or Legal Entity\n      on behalf of whom a Contribution has been received by Licensor and\n      subsequently incorporated within the Work.\n\n   2. Grant of Copyright License. Subject to the terms and conditions of\n      this License, each Contributor hereby grants to You a perpetual,\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n      copyright license to reproduce, prepare Derivative Works of,\n      publicly display, publicly perform, sublicense, and distribute the\n      Work and such Derivative Works in Source or Object form.\n\n   3. Grant of Patent License. Subject to the terms and conditions of\n      this License, each Contributor hereby grants to You a perpetual,\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n      (except as stated in this section) patent license to make, have made,\n      use, offer to sell, sell, import, and otherwise transfer the Work,\n      where such license applies only to those patent claims licensable\n      by such Contributor that are necessarily infringed by their\n      Contribution(s) alone or by combination of their Contribution(s)\n      with the Work to which such Contribution(s) was submitted. If You\n      institute patent litigation against any entity (including a\n      cross-claim or counterclaim in a lawsuit) alleging that the Work\n      or a Contribution incorporated within the Work constitutes direct\n      or contributory patent infringement, then any patent licenses\n      granted to You under this License for that Work shall terminate\n      as of the date such litigation is filed.\n\n   4. Redistribution. You may reproduce and distribute copies of the\n      Work or Derivative Works thereof in any medium, with or without\n      modifications, and in Source or Object form, provided that You\n      meet the following conditions:\n\n      (a) You must give any other recipients of the Work or\n          Derivative Works a copy of this License; and\n\n      (b) You must cause any modified files to carry prominent notices\n          stating that You changed the files; and\n\n      (c) You must retain, in the Source form of any Derivative Works\n          that You distribute, all copyright, patent, trademark, and\n          attribution notices from the Source form of the Work,\n          excluding those notices that do not pertain to any part of\n          the Derivative Works; and\n\n      (d) If the Work includes a \"NOTICE\" text file as part of its\n          distribution, then any Derivative Works that You distribute must\n          include a readable copy of the attribution notices contained\n          within such NOTICE file, excluding those notices that do not\n          pertain to any part of the Derivative Works, in at least one\n          of the following places: within a NOTICE text file distributed\n          as part of the Derivative Works; within the Source form or\n          documentation, if provided along with the Derivative Works; or,\n          within a display generated by the Derivative Works, if and\n          wherever such third-party notices normally appear. The contents\n          of the NOTICE file are for informational purposes only and\n          do not modify the License. You may add Your own attribution\n          notices within Derivative Works that You distribute, alongside\n          or as an addendum to the NOTICE text from the Work, provided\n          that such additional attribution notices cannot be construed\n          as modifying the License.\n\n      You may add Your own copyright statement to Your modifications and\n      may provide additional or different license terms and conditions\n      for use, reproduction, or distribution of Your modifications, or\n      for any such Derivative Works as a whole, provided Your use,\n      reproduction, and distribution of the Work otherwise complies with\n      the conditions stated in this License.\n\n   5. Submission of Contributions. Unless You explicitly state otherwise,\n      any Contribution intentionally submitted for inclusion in the Work\n      by You to the Licensor shall be under the terms and conditions of\n      this License, without any additional terms or conditions.\n      Notwithstanding the above, nothing herein shall supersede or modify\n      the terms of any separate license agreement you may have executed\n      with Licensor regarding such Contributions.\n\n   6. Trademarks. This License does not grant permission to use the trade\n      names, trademarks, service marks, or product names of the Licensor,\n      except as required for reasonable and customary use in describing the\n      origin of the Work and reproducing the content of the NOTICE file.\n\n   7. Disclaimer of Warranty. Unless required by applicable law or\n      agreed to in writing, Licensor provides the Work (and each\n      Contributor provides its Contributions) on an \"AS IS\" BASIS,\n      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or\n      implied, including, without limitation, any warranties or conditions\n      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A\n      PARTICULAR PURPOSE. You are solely responsible for determining the\n      appropriateness of using or redistributing the Work and assume any\n      risks associated with Your exercise of permissions under this License.\n\n   8. Limitation of Liability. In no event and under no legal theory,\n      whether in tort (including negligence), contract, or otherwise,\n      unless required by applicable law (such as deliberate and grossly\n      negligent acts) or agreed to in writing, shall any Contributor be\n      liable to You for damages, including any direct, indirect, special,\n      incidental, or consequential damages of any character arising as a\n      result of this License or out of the use or inability to use the\n      Work (including but not limited to damages for loss of goodwill,\n      work stoppage, computer failure or malfunction, or any and all\n      other commercial damages or losses), even if such Contributor\n      has been advised of the possibility of such damages.\n\n   9. Accepting Warranty or Additional Liability. While redistributing\n      the Work or Derivative Works thereof, You may choose to offer,\n      and charge a fee for, acceptance of support, warranty, indemnity,\n      or other liability obligations and/or rights consistent with this\n      License. However, in accepting such obligations, You may act only\n      on Your own behalf and on Your sole responsibility, not on behalf\n      of any other Contributor, and only if You agree to indemnify,\n      defend, and hold each Contributor harmless for any liability\n      incurred by, or claims asserted against, such Contributor by reason\n      of your accepting any such warranty or additional liability.\n\n   END OF TERMS AND CONDITIONS\n\n   Copyright 2016 Drifty Co.\n\n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n\n       http://www.apache.org/licenses/LICENSE-2.0\n\n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n"
  },
  {
    "path": "Procfile",
    "content": "web: node server.js\n"
  },
  {
    "path": "README.md",
    "content": "ionic-site\n==========\n\nRepo for the ionicframework.com site.  To preview local Ionic changes, follow the instructions at the [Ionic repo](https://github.com/ionic-team/ionic#documentation).\n\n## No Docs Here\n\nIonic Docs are in a [separate repo](https://github.com/ionic-team/ionic-docs/). This site is primarily used for general communications and promotion of Ionic framework and related products and services. \n\n## Local Build\n\n1. Run `npm install`\n2. Run `npm start` (after the first run, this is the only step needed)\n\n\n## Third Party Libraries\n\n3rd part libraries should be concatenated into the site bundle by adding them via package.json and specifying what files to include in the `assets/3rd-party-libs.json` file. \n\n\n## Deploy\n\nChanges to master are automatically deployed to  [staging.ionicframework.com/](https://staging.ionicframework.com/). Periodically, the Ionic team will inspect staging and promote it to [ionicframework.com](https://ionicframework.com).\n\n\n## Community\n\n* Follow [@ionicframework on Twitter](https://twitter.com/ionicframework).\n* Subscribe to the [Ionic Newsletter](https://ionicframework.com/subscribe/).\n* Have a question that's not a feature request or bug report? [Discuss on the Ionic Forum](https://forum.ionicframework.com/).\n* Read our [Blog](https://ionicframework.com/blog/).\n* Have a feature request or find a bug? [Submit an issue](https://github.com/ionic-team/ionic/issues).\n* See a problem with our documentation? [Submit an issue](https://github.com/ionic-team/ionic-docs/issues).\n* See a typo or browser bug on a non-docs page? [Submit an issue](https://github.com/ionic-team/ionic-site/issues).\n"
  },
  {
    "path": "app.json",
    "content": "{\n  \"addons\": [\n    \"heroku-redis\"\n  ],\n  \"buildpacks\": [\n    {\n      \"url\": \"heroku/nodejs\"\n    }\n  ],\n  \"description\": \"The marketing/communications parts of the \",\n  \"repository\": \"https://github.com/ionic-team/ionic-site\",\n  \"env\": {\n    \"PIPEDRIVE_TOKEN\": {\n      \"required\": true\n    },\n    \"PORT\": {\n      \"required\": true\n    },\n    \"PRISMIC_PREVIEW\": {\n      \"required\": true\n    },\n    \"PROD\": {\n      \"required\": true\n    },\n    \"SENTRY_DSN\": {\n      \"required\": true\n    },\n    \"SENTRY_ENVIRONMENT\": {\n      \"required\": true\n    }\n  },\n  \"formation\": {\n    \"web\": {\n      \"quantity\": 1\n    }\n  },\n  \"name\": \"ionic-site\",\n  \"scripts\": {\n  },\n  \"stack\": \"heroku-18\"\n}\n"
  },
  {
    "path": "assets/3rd-party-libs.json",
    "content": "{\n  \"css\": [\n\n  ],\n  \"js\": [\n    \"node_modules/jquery/dist/jquery.slim.min.js\",\n    \"node_modules/bootstrap-sass/assets/javascripts/bootstrap.min.js\",\n    \"node_modules/typed.js/dist/typed.umd.js\"\n  ]\n}\n"
  },
  {
    "path": "assets/js/analytics.js",
    "content": "// Google Tag Manager\n(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':\nnew Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],\nj=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=\n'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);\n})(window,document,'script','dataLayer','GTM-TKMGCBC');\n\n\n$(function() {\n  var hsqCount = 0;\n\n  function linker() {\n    // Append Hubspot IDs to dashboard links\n    var hsutk = window.getCookie('hubspotutk');\n    if(hsqCount > 10) {\n      // Hubspot is disabled or down\n      console.log('failing', hsutk)\n      return;\n    } else if (!window._hsq && !hsutk) {\n      hsqCount++;\n      // console.log('no hubspot ID yet')\n      setTimeout(linker, 300);\n      return;\n    }\n\n    var els = Array.prototype.slice.call(document.querySelectorAll('a[href*=\"dashboard.ionicframework.com\"]'));\n    if(!els) {\n      //console.log('no dash links')\n      return;\n    }\n\n    // console.log(els)\n    els.forEach(function(el) {\n      var href = el.getAttribute('href');\n\n      // https://stackoverflow.com/questions/44412241/is-it-possible-to-read-experimentid-and-variationid-in-javascript-with-google-op\n      // var propertyId = \"UA-44023830-1\";\n      // var experimentId = Object.keys(gaData[propertyId].experiments)[0];\n      // var variationId = gaData[propertyId].experiments[experimentId];\n      // console.log(experimentId, variationId)\n\n      if (href.indexOf('?') !== -1) {\n\n        // If a source attribute has been added to URI and an A/B test is running, append test group ID to value of source attribute\n        // var sourceVal = getQuerystringParameter('source', '?' + href.split('?')[1]);\n        // if (sourceVal.length && experimentId.length) {\n        //   href = updateQuerystringParameter(href, 'source', sourceVal + '-' + experimentId + '-' + variationId);\n        // }\n        // console.log(href)\n        href += '&'\n      } else {\n        href += '?'\n      }\n      // Add Hubspot UTK ID as HSID if present\n      if (hsutk) {\n        href += 'hsid=' + encodeURIComponent(hsutk);\n      }\n\n      // pass along any query parameters on the current page on to the dashboard as well\n      href += '&' + (window.location.search.split('?')[1] || '');\n\n      el.setAttribute('href', href );\n    })\n  }\n  linker();\n});\n\nfunction getQuerystringParameter(name, querystring) {\n  name = name.replace(/[\\[]/, '\\\\[').replace(/[\\]]/, '\\\\]');\n  var regex = new RegExp('[\\\\?&]' + name + '=([^&#]*)');\n  var results = regex.exec(querystring);\n  return results === null ? '' : decodeURIComponent(results[1].replace(/\\+/g, ' '));\n};\n\nfunction updateQuerystringParameter(uri, key, value) {\n  var re = new RegExp(\"([?&])\" + key + \"=.*?(&|$)\", \"i\");\n  var separator = uri.indexOf('?') !== -1 ? \"&\" : \"?\";\n  if (uri.match(re)) {\n    return uri.replace(re, '$1' + key + \"=\" + value + '$2');\n  }\n  else {\n    return uri + separator + key + \"=\" + value;\n  }\n}\n\nwindow.hsSnitch = () => {\n  // no hubspot forms on this page, bail\n  if (!document.querySelector('[src=\"//js.hsforms.net/forms/v2.js\"]')) return;\n\n  const selector = '.hs-form';\n  let submitting;\n\n  // has the form already loaded?\n  let hsFound = !!document.querySelector(selector);\n  if (hsFound) return;\n\n  const report = async (type) => {\n    console.error(`Hubspot Error: ${type} blocked`);\n    const response = await fetch('/api/v1/hsblocked', {\n      method: 'POST',\n      mode: 'same-origin',\n      cache: 'no-cache',\n      headers: {\n        'Content-Type': 'application/json'\n      },\n      body: JSON.stringify({\n        browser: navigator.userAgent,\n        url: window.location.href,\n        type\n      })\n    });\n    // give HS 3 seconds to load\n  }\n\n  const timer = setTimeout(() => {\n    // one last check, just to be safe\n    if (hsFound || !!document.querySelector(selector)) return;\n    report('form');\n  }, 3000);\n\n  // listen for the form to load\n  window.addEventListener('message', event => {\n    // console.log(event.data);\n    if(event.data.type !== 'hsFormCallback') return;\n\n    // form found\n    if(event.data.eventName === 'onFormReady') {\n      hsFound = true;\n      clearTimeout(timer);\n      return;\n    }\n\n    // form submitting\n    if(event.data.eventName === 'onFormSubmit') {\n      submitting = setTimeout(() => {\n        report('form-submit');\n      }, 2000);\n      return;\n    }\n\n    // form submission sucessful\n    if(event.data.eventName === 'onFormSubmitted') {\n      clearTimeout(submitting)\n      return;\n    }\n  });\n}\nwindow.hsSnitch();\n\n// shorthand global analytics click event helper\nwindow.c = (cat, lbl, el, val, opts = {}) => {\n  if (typeof val === 'undefined') {\n    val = null;\n  }\n\n  try {\n    window._hsq.push(['trackEvent', {\n      id: lbl\n    }])\n  } catch(e) {\n    console.warn('Hubspot blocked', e);\n  }\n\n  if (window.ga && ga.loaded) {\n    let linkFollowed = false;\n    const followLink = () => {\n      if (!el || linkFollowed) return;\n      linkFollowed = true;\n      if (el.target === '_blank') {\n        const newWindow = window.open(el.href);\n        // if new tab wasn't blocked, we're done\n        if (newWindow) return;\n      }\n      document.location = el.href;\n    }\n\n    ga(opts.trackerName ? `${opts.trackerName}.send` : 'send', {\n      hitType: 'event',\n      eventCategory: cat,\n      eventAction: 'Click',\n      eventLabel: lbl,\n      eventValue: val,\n      hitCallback: followLink\n    });\n    // GA has 1 second to do its thing\n    setTimeout(followLink, 1000);\n  } else {\n    if (!!el) {\n      document.location = el.href;\n    }\n  }\n  // don't follow links until analytics is recieved\n  if (!!el) {\n    return false;\n  }\n};\n"
  },
  {
    "path": "assets/js/highlight.js",
    "content": "(function(factory) {\n\n  // Setup highlight.js for different environments. First is Node.js or\n  // CommonJS.\n  if(typeof exports !== 'undefined') {\n    factory(exports);\n  } else {\n    // Export hljs globally even when using AMD for cases when this script\n    // is loaded with others that may still expect a global hljs.\n    window.hljs = factory({});\n\n    // Finally register the global hljs with AMD.\n    if(typeof define === 'function' && define.amd) {\n      define('hljs', [], function() {\n        return window.hljs;\n      });\n    }\n  }\n\n}(function(hljs) {\n\n  /* Utility functions */\n\n  function escape(value) {\n    return value.replace(/&/gm, '&amp;').replace(/</gm, '&lt;').replace(/>/gm, '&gt;');\n  }\n\n  function tag(node) {\n    return node.nodeName.toLowerCase();\n  }\n\n  function testRe(re, lexeme) {\n    var match = re && re.exec(lexeme);\n    return match && match.index == 0;\n  }\n\n  function isNotHighlighted(language) {\n    return (/^(no-?highlight|plain|text)$/i).test(language);\n  }\n\n  function blockLanguage(block) {\n    var i, match, length,\n        classes = block.className + ' ';\n\n    classes += block.parentNode ? block.parentNode.className : '';\n\n    // language-* takes precedence over non-prefixed class names\n    match = (/\\blang(?:uage)?-([\\w-]+)\\b/i).exec(classes);\n    if (match) {\n      return getLanguage(match[1]) ? match[1] : 'no-highlight';\n    }\n\n    classes = classes.split(/\\s+/);\n    for (i = 0, length = classes.length; i < length; i++) {\n      if (getLanguage(classes[i]) || isNotHighlighted(classes[i])) {\n        return classes[i];\n      }\n    }\n  }\n\n  function inherit(parent, obj) {\n    var result = {}, key;\n    for (key in parent)\n      result[key] = parent[key];\n    if (obj)\n      for (key in obj)\n        result[key] = obj[key];\n    return result;\n  }\n\n  /* Stream merging */\n\n  function nodeStream(node) {\n    var result = [];\n    (function _nodeStream(node, offset) {\n      for (var child = node.firstChild; child; child = child.nextSibling) {\n        if (child.nodeType == 3)\n          offset += child.nodeValue.length;\n        else if (child.nodeType == 1) {\n          result.push({\n            event: 'start',\n            offset: offset,\n            node: child\n          });\n          offset = _nodeStream(child, offset);\n          // Prevent void elements from having an end tag that would actually\n          // double them in the output. There are more void elements in HTML\n          // but we list only those realistically expected in code display.\n          if (!tag(child).match(/br|hr|img|input/)) {\n            result.push({\n              event: 'stop',\n              offset: offset,\n              node: child\n            });\n          }\n        }\n      }\n      return offset;\n    })(node, 0);\n    return result;\n  }\n\n  function mergeStreams(original, highlighted, value) {\n    var processed = 0;\n    var result = '';\n    var nodeStack = [];\n\n    function selectStream() {\n      if (!original.length || !highlighted.length) {\n        return original.length ? original : highlighted;\n      }\n      if (original[0].offset != highlighted[0].offset) {\n        return (original[0].offset < highlighted[0].offset) ? original : highlighted;\n      }\n\n      /*\n      To avoid starting the stream just before it should stop the order is\n      ensured that original always starts first and closes last:\n\n      if (event1 == 'start' && event2 == 'start')\n        return original;\n      if (event1 == 'start' && event2 == 'stop')\n        return highlighted;\n      if (event1 == 'stop' && event2 == 'start')\n        return original;\n      if (event1 == 'stop' && event2 == 'stop')\n        return highlighted;\n\n      ... which is collapsed to:\n      */\n      return highlighted[0].event == 'start' ? original : highlighted;\n    }\n\n    function open(node) {\n      function attr_str(a) {return ' ' + a.nodeName + '=\"' + escape(a.value) + '\"';}\n      result += '<' + tag(node) + Array.prototype.map.call(node.attributes, attr_str).join('') + '>';\n    }\n\n    function close(node) {\n      result += '</' + tag(node) + '>';\n    }\n\n    function render(event) {\n      (event.event == 'start' ? open : close)(event.node);\n    }\n\n    while (original.length || highlighted.length) {\n      var stream = selectStream();\n      result += escape(value.substr(processed, stream[0].offset - processed));\n      processed = stream[0].offset;\n      if (stream == original) {\n        /*\n        On any opening or closing tag of the original markup we first close\n        the entire highlighted node stack, then render the original tag along\n        with all the following original tags at the same offset and then\n        reopen all the tags on the highlighted stack.\n        */\n        nodeStack.reverse().forEach(close);\n        do {\n          render(stream.splice(0, 1)[0]);\n          stream = selectStream();\n        } while (stream == original && stream.length && stream[0].offset == processed);\n        nodeStack.reverse().forEach(open);\n      } else {\n        if (stream[0].event == 'start') {\n          nodeStack.push(stream[0].node);\n        } else {\n          nodeStack.pop();\n        }\n        render(stream.splice(0, 1)[0]);\n      }\n    }\n    return result + escape(value.substr(processed));\n  }\n\n  /* Initialization */\n\n  function compileLanguage(language) {\n\n    function reStr(re) {\n        return (re && re.source) || re;\n    }\n\n    function langRe(value, global) {\n      return new RegExp(\n        reStr(value),\n        'm' + (language.case_insensitive ? 'i' : '') + (global ? 'g' : '')\n      );\n    }\n\n    function compileMode(mode, parent) {\n      if (mode.compiled)\n        return;\n      mode.compiled = true;\n\n      mode.keywords = mode.keywords || mode.beginKeywords;\n      if (mode.keywords) {\n        var compiled_keywords = {};\n\n        var flatten = function(className, str) {\n          if (language.case_insensitive) {\n            str = str.toLowerCase();\n          }\n          str.split(' ').forEach(function(kw) {\n            var pair = kw.split('|');\n            compiled_keywords[pair[0]] = [className, pair[1] ? Number(pair[1]) : 1];\n          });\n        };\n\n        if (typeof mode.keywords == 'string') { // string\n          flatten('keyword', mode.keywords);\n        } else {\n          Object.keys(mode.keywords).forEach(function (className) {\n            flatten(className, mode.keywords[className]);\n          });\n        }\n        mode.keywords = compiled_keywords;\n      }\n      mode.lexemesRe = langRe(mode.lexemes || /\\b\\w+\\b/, true);\n\n      if (parent) {\n        if (mode.beginKeywords) {\n          mode.begin = '\\\\b(' + mode.beginKeywords.split(' ').join('|') + ')\\\\b';\n        }\n        if (!mode.begin)\n          mode.begin = /\\B|\\b/;\n        mode.beginRe = langRe(mode.begin);\n        if (!mode.end && !mode.endsWithParent)\n          mode.end = /\\B|\\b/;\n        if (mode.end)\n          mode.endRe = langRe(mode.end);\n        mode.terminator_end = reStr(mode.end) || '';\n        if (mode.endsWithParent && parent.terminator_end)\n          mode.terminator_end += (mode.end ? '|' : '') + parent.terminator_end;\n      }\n      if (mode.illegal)\n        mode.illegalRe = langRe(mode.illegal);\n      if (mode.relevance === undefined)\n        mode.relevance = 1;\n      if (!mode.contains) {\n        mode.contains = [];\n      }\n      var expanded_contains = [];\n      mode.contains.forEach(function(c) {\n        if (c.variants) {\n          c.variants.forEach(function(v) {expanded_contains.push(inherit(c, v));});\n        } else {\n          expanded_contains.push(c == 'self' ? mode : c);\n        }\n      });\n      mode.contains = expanded_contains;\n      mode.contains.forEach(function(c) {compileMode(c, mode);});\n\n      if (mode.starts) {\n        compileMode(mode.starts, parent);\n      }\n\n      var terminators =\n        mode.contains.map(function(c) {\n          return c.beginKeywords ? '\\\\.?(' + c.begin + ')\\\\.?' : c.begin;\n        })\n        .concat([mode.terminator_end, mode.illegal])\n        .map(reStr)\n        .filter(Boolean);\n      mode.terminators = terminators.length ? langRe(terminators.join('|'), true) : {exec: function(/*s*/) {return null;}};\n    }\n\n    compileMode(language);\n  }\n\n  /*\n  Core highlighting function. Accepts a language name, or an alias, and a\n  string with the code to highlight. Returns an object with the following\n  properties:\n\n  - relevance (int)\n  - value (an HTML string with highlighting markup)\n\n  */\n  function highlight(name, value, ignore_illegals, continuation) {\n\n    function subMode(lexeme, mode) {\n      for (var i = 0; i < mode.contains.length; i++) {\n        if (testRe(mode.contains[i].beginRe, lexeme)) {\n          return mode.contains[i];\n        }\n      }\n    }\n\n    function endOfMode(mode, lexeme) {\n      if (testRe(mode.endRe, lexeme)) {\n        while (mode.endsParent && mode.parent) {\n          mode = mode.parent;\n        }\n        return mode;\n      }\n      if (mode.endsWithParent) {\n        return endOfMode(mode.parent, lexeme);\n      }\n    }\n\n    function isIllegal(lexeme, mode) {\n      return !ignore_illegals && testRe(mode.illegalRe, lexeme);\n    }\n\n    function keywordMatch(mode, match) {\n      var match_str = language.case_insensitive ? match[0].toLowerCase() : match[0];\n      return mode.keywords.hasOwnProperty(match_str) && mode.keywords[match_str];\n    }\n\n    function buildSpan(classname, insideSpan, leaveOpen, noPrefix) {\n      var classPrefix = noPrefix ? '' : options.classPrefix,\n          openSpan    = '<span class=\"' + classPrefix,\n          closeSpan   = leaveOpen ? '' : '</span>';\n\n      openSpan += classname + '\">';\n\n      return openSpan + insideSpan + closeSpan;\n    }\n\n    function processKeywords() {\n      if (!top.keywords)\n        return escape(mode_buffer);\n      var result = '';\n      var last_index = 0;\n      top.lexemesRe.lastIndex = 0;\n      var match = top.lexemesRe.exec(mode_buffer);\n      while (match) {\n        result += escape(mode_buffer.substr(last_index, match.index - last_index));\n        var keyword_match = keywordMatch(top, match);\n        if (keyword_match) {\n          relevance += keyword_match[1];\n          result += buildSpan(keyword_match[0], escape(match[0]));\n        } else {\n          result += escape(match[0]);\n        }\n        last_index = top.lexemesRe.lastIndex;\n        match = top.lexemesRe.exec(mode_buffer);\n      }\n      return result + escape(mode_buffer.substr(last_index));\n    }\n\n    function processSubLanguage() {\n      var explicit = typeof top.subLanguage == 'string';\n      if (explicit && !languages[top.subLanguage]) {\n        return escape(mode_buffer);\n      }\n\n      var result = explicit ?\n                   highlight(top.subLanguage, mode_buffer, true, continuations[top.subLanguage]) :\n                   highlightAuto(mode_buffer, top.subLanguage.length ? top.subLanguage : undefined);\n\n      // Counting embedded language score towards the host language may be disabled\n      // with zeroing the containing mode relevance. Usecase in point is Markdown that\n      // allows XML everywhere and makes every XML snippet to have a much larger Markdown\n      // score.\n      if (top.relevance > 0) {\n        relevance += result.relevance;\n      }\n      if (explicit) {\n        continuations[top.subLanguage] = result.top;\n      }\n      return buildSpan(result.language, result.value, false, true);\n    }\n\n    function processBuffer() {\n      return top.subLanguage !== undefined ? processSubLanguage() : processKeywords();\n    }\n\n    function startNewMode(mode, lexeme) {\n      var markup = mode.className? buildSpan(mode.className, '', true): '';\n      if (mode.returnBegin) {\n        result += markup;\n        mode_buffer = '';\n      } else if (mode.excludeBegin) {\n        result += escape(lexeme) + markup;\n        mode_buffer = '';\n      } else {\n        result += markup;\n        mode_buffer = lexeme;\n      }\n      top = Object.create(mode, {parent: {value: top}});\n    }\n\n    function processLexeme(buffer, lexeme) {\n\n      mode_buffer += buffer;\n      if (lexeme === undefined) {\n        result += processBuffer();\n        return 0;\n      }\n\n      var new_mode = subMode(lexeme, top);\n      if (new_mode) {\n        result += processBuffer();\n        startNewMode(new_mode, lexeme);\n        return new_mode.returnBegin ? 0 : lexeme.length;\n      }\n\n      var end_mode = endOfMode(top, lexeme);\n      if (end_mode) {\n        var origin = top;\n        if (!(origin.returnEnd || origin.excludeEnd)) {\n          mode_buffer += lexeme;\n        }\n        result += processBuffer();\n        do {\n          if (top.className) {\n            result += '</span>';\n          }\n          relevance += top.relevance;\n          top = top.parent;\n        } while (top != end_mode.parent);\n        if (origin.excludeEnd) {\n          result += escape(lexeme);\n        }\n        mode_buffer = '';\n        if (end_mode.starts) {\n          startNewMode(end_mode.starts, '');\n        }\n        return origin.returnEnd ? 0 : lexeme.length;\n      }\n\n      if (isIllegal(lexeme, top))\n        throw new Error('Illegal lexeme \"' + lexeme + '\" for mode \"' + (top.className || '<unnamed>') + '\"');\n\n      /*\n      Parser should not reach this point as all types of lexemes should be caught\n      earlier, but if it does due to some bug make sure it advances at least one\n      character forward to prevent infinite looping.\n      */\n      mode_buffer += lexeme;\n      return lexeme.length || 1;\n    }\n\n    var language = getLanguage(name);\n    if (!language) {\n      throw new Error('Unknown language: \"' + name + '\"');\n    }\n\n    compileLanguage(language);\n    var top = continuation || language;\n    var continuations = {}; // keep continuations for sub-languages\n    var result = '', current;\n    for(current = top; current != language; current = current.parent) {\n      if (current.className) {\n        result = buildSpan(current.className, '', true) + result;\n      }\n    }\n    var mode_buffer = '';\n    var relevance = 0;\n    try {\n      var match, count, index = 0;\n      while (true) {\n        top.terminators.lastIndex = index;\n        match = top.terminators.exec(value);\n        if (!match)\n          break;\n        count = processLexeme(value.substr(index, match.index - index), match[0]);\n        index = match.index + count;\n      }\n      processLexeme(value.substr(index));\n      for(current = top; current.parent; current = current.parent) { // close dangling modes\n        if (current.className) {\n          result += '</span>';\n        }\n      }\n      return {\n        relevance: relevance,\n        value: result,\n        language: name,\n        top: top\n      };\n    } catch (e) {\n      if (e.message.indexOf('Illegal') != -1) {\n        return {\n          relevance: 0,\n          value: escape(value)\n        };\n      } else {\n        throw e;\n      }\n    }\n  }\n\n  /*\n  Highlighting with language detection. Accepts a string with the code to\n  highlight. Returns an object with the following properties:\n\n  - language (detected language)\n  - relevance (int)\n  - value (an HTML string with highlighting markup)\n  - second_best (object with the same structure for second-best heuristically\n    detected language, may be absent)\n\n  */\n  function highlightAuto(text, languageSubset) {\n    languageSubset = languageSubset || options.languages || Object.keys(languages);\n    var result = {\n      relevance: 0,\n      value: escape(text)\n    };\n    var second_best = result;\n    languageSubset.forEach(function(name) {\n      if (!getLanguage(name)) {\n        return;\n      }\n      var current = highlight(name, text, false);\n      current.language = name;\n      if (current.relevance > second_best.relevance) {\n        second_best = current;\n      }\n      if (current.relevance > result.relevance) {\n        second_best = result;\n        result = current;\n      }\n    });\n    if (second_best.language) {\n      result.second_best = second_best;\n    }\n    return result;\n  }\n\n  /*\n  Post-processing of the highlighted markup:\n\n  - replace TABs with something more useful\n  - replace real line-breaks with '<br>' for non-pre containers\n\n  */\n  function fixMarkup(value) {\n    if (options.tabReplace) {\n      value = value.replace(/^((<[^>]+>|\\t)+)/gm, function(match, p1 /*..., offset, s*/) {\n        return p1.replace(/\\t/g, options.tabReplace);\n      });\n    }\n    if (options.useBR) {\n      value = value.replace(/\\n/g, '<br>');\n    }\n    return value;\n  }\n\n  function buildClassName(prevClassName, currentLang, resultLang) {\n    var language = currentLang ? aliases[currentLang] : resultLang,\n        result   = [prevClassName.trim()];\n\n    if (!prevClassName.match(/\\bhljs\\b/)) {\n      result.push('hljs');\n    }\n\n    if (prevClassName.indexOf(language) === -1) {\n      result.push(language);\n    }\n\n    return result.join(' ').trim();\n  }\n\n  /*\n  Applies highlighting to a DOM node containing code. Accepts a DOM node and\n  two optional parameters for fixMarkup.\n  */\n  function highlightBlock(block) {\n    var language = blockLanguage(block);\n    if (isNotHighlighted(language))\n        return;\n\n    var node;\n    if (options.useBR) {\n      node = document.createElementNS('http://www.w3.org/1999/xhtml', 'div');\n      node.innerHTML = block.innerHTML.replace(/\\n/g, '').replace(/<br[ \\/]*>/g, '\\n');\n    } else {\n      node = block;\n    }\n    var text = node.textContent;\n    var result = language ? highlight(language, text, true) : highlightAuto(text);\n\n    var originalStream = nodeStream(node);\n    if (originalStream.length) {\n      var resultNode = document.createElementNS('http://www.w3.org/1999/xhtml', 'div');\n      resultNode.innerHTML = result.value;\n      result.value = mergeStreams(originalStream, nodeStream(resultNode), text);\n    }\n    result.value = fixMarkup(result.value);\n\n    block.innerHTML = result.value;\n    block.className = buildClassName(block.className, language, result.language);\n    block.result = {\n      language: result.language,\n      re: result.relevance\n    };\n    if (result.second_best) {\n      block.second_best = {\n        language: result.second_best.language,\n        re: result.second_best.relevance\n      };\n    }\n  }\n\n  var options = {\n    classPrefix: 'hljs-',\n    tabReplace: null,\n    useBR: false,\n    languages: undefined\n  };\n\n  /*\n  Updates highlight.js global options with values passed in the form of an object\n  */\n  function configure(user_options) {\n    options = inherit(options, user_options);\n  }\n\n  /*\n  Applies highlighting to all <pre><code>..</code></pre> blocks on a page.\n  */\n  function initHighlighting() {\n    if (initHighlighting.called)\n      return;\n    initHighlighting.called = true;\n\n    var blocks = document.querySelectorAll('pre code');\n    Array.prototype.forEach.call(blocks, highlightBlock);\n  }\n\n  /*\n  Attaches highlighting to the page load event.\n  */\n  function initHighlightingOnLoad() {\n    addEventListener('DOMContentLoaded', initHighlighting, false);\n    addEventListener('load', initHighlighting, false);\n  }\n\n  var languages = {};\n  var aliases = {};\n\n  function registerLanguage(name, language) {\n    var lang = languages[name] = language(hljs);\n    if (lang.aliases) {\n      lang.aliases.forEach(function(alias) {aliases[alias] = name;});\n    }\n  }\n\n  function listLanguages() {\n    return Object.keys(languages);\n  }\n\n  function getLanguage(name) {\n    name = (name || '').toLowerCase();\n    return languages[name] || languages[aliases[name]];\n  }\n\n  /* Interface definition */\n\n  hljs.highlight = highlight;\n  hljs.highlightAuto = highlightAuto;\n  hljs.fixMarkup = fixMarkup;\n  hljs.highlightBlock = highlightBlock;\n  hljs.configure = configure;\n  hljs.initHighlighting = initHighlighting;\n  hljs.initHighlightingOnLoad = initHighlightingOnLoad;\n  hljs.registerLanguage = registerLanguage;\n  hljs.listLanguages = listLanguages;\n  hljs.getLanguage = getLanguage;\n  hljs.inherit = inherit;\n\n  // Common regexps\n  hljs.IDENT_RE = '[a-zA-Z]\\\\w*';\n  hljs.UNDERSCORE_IDENT_RE = '[a-zA-Z_]\\\\w*';\n  hljs.NUMBER_RE = '\\\\b\\\\d+(\\\\.\\\\d+)?';\n  hljs.C_NUMBER_RE = '(\\\\b0[xX][a-fA-F0-9]+|(\\\\b\\\\d+(\\\\.\\\\d*)?|\\\\.\\\\d+)([eE][-+]?\\\\d+)?)'; // 0x..., 0..., decimal, float\n  hljs.BINARY_NUMBER_RE = '\\\\b(0b[01]+)'; // 0b...\n  hljs.RE_STARTERS_RE = '!|!=|!==|%|%=|&|&&|&=|\\\\*|\\\\*=|\\\\+|\\\\+=|,|-|-=|/=|/|:|;|<<|<<=|<=|<|===|==|=|>>>=|>>=|>=|>>>|>>|>|\\\\?|\\\\[|\\\\{|\\\\(|\\\\^|\\\\^=|\\\\||\\\\|=|\\\\|\\\\||~';\n\n  // Common modes\n  hljs.BACKSLASH_ESCAPE = {\n    begin: '\\\\\\\\[\\\\s\\\\S]', relevance: 0\n  };\n  hljs.APOS_STRING_MODE = {\n    className: 'string',\n    begin: '\\'', end: '\\'',\n    illegal: '\\\\n',\n    contains: [hljs.BACKSLASH_ESCAPE]\n  };\n  hljs.QUOTE_STRING_MODE = {\n    className: 'string',\n    begin: '\"', end: '\"',\n    illegal: '\\\\n',\n    contains: [hljs.BACKSLASH_ESCAPE]\n  };\n  hljs.PHRASAL_WORDS_MODE = {\n    begin: /\\b(a|an|the|are|I|I'm|isn't|don't|doesn't|won't|but|just|should|pretty|simply|enough|gonna|going|wtf|so|such|will|you|your|like)\\b/\n  };\n  hljs.COMMENT = function (begin, end, inherits) {\n    var mode = hljs.inherit(\n      {\n        className: 'comment',\n        begin: begin, end: end,\n        contains: []\n      },\n      inherits || {}\n    );\n    mode.contains.push(hljs.PHRASAL_WORDS_MODE);\n    mode.contains.push({\n      className: 'doctag',\n      begin: \"(?:TODO|FIXME|NOTE|BUG|XXX):\",\n      relevance: 0\n    });\n    return mode;\n  };\n  hljs.C_LINE_COMMENT_MODE = hljs.COMMENT('//', '$');\n  hljs.C_BLOCK_COMMENT_MODE = hljs.COMMENT('/\\\\*', '\\\\*/');\n  hljs.HASH_COMMENT_MODE = hljs.COMMENT('#', '$');\n  hljs.NUMBER_MODE = {\n    className: 'number',\n    begin: hljs.NUMBER_RE,\n    relevance: 0\n  };\n  hljs.C_NUMBER_MODE = {\n    className: 'number',\n    begin: hljs.C_NUMBER_RE,\n    relevance: 0\n  };\n  hljs.BINARY_NUMBER_MODE = {\n    className: 'number',\n    begin: hljs.BINARY_NUMBER_RE,\n    relevance: 0\n  };\n  hljs.CSS_NUMBER_MODE = {\n    className: 'number',\n    begin: hljs.NUMBER_RE + '(' +\n      '%|em|ex|ch|rem'  +\n      '|vw|vh|vmin|vmax' +\n      '|cm|mm|in|pt|pc|px' +\n      '|deg|grad|rad|turn' +\n      '|s|ms' +\n      '|Hz|kHz' +\n      '|dpi|dpcm|dppx' +\n      ')?',\n    relevance: 0\n  };\n  hljs.REGEXP_MODE = {\n    className: 'regexp',\n    begin: /\\//, end: /\\/[gimuy]*/,\n    illegal: /\\n/,\n    contains: [\n      hljs.BACKSLASH_ESCAPE,\n      {\n        begin: /\\[/, end: /\\]/,\n        relevance: 0,\n        contains: [hljs.BACKSLASH_ESCAPE]\n      }\n    ]\n  };\n  hljs.TITLE_MODE = {\n    className: 'title',\n    begin: hljs.IDENT_RE,\n    relevance: 0\n  };\n  hljs.UNDERSCORE_TITLE_MODE = {\n    className: 'title',\n    begin: hljs.UNDERSCORE_IDENT_RE,\n    relevance: 0\n  };\n\nhljs.registerLanguage('bash', function(hljs) {\n  var VAR = {\n    className: 'variable',\n    variants: [\n      {begin: /\\$[\\w\\d#@][\\w\\d_]*/},\n      {begin: /\\$\\{(.*?)}/}\n    ]\n  };\n  var QUOTE_STRING = {\n    className: 'string',\n    begin: /\"/, end: /\"/,\n    contains: [\n      hljs.BACKSLASH_ESCAPE,\n      VAR,\n      {\n        className: 'variable',\n        begin: /\\$\\(/, end: /\\)/,\n        contains: [hljs.BACKSLASH_ESCAPE]\n      }\n    ]\n  };\n  var APOS_STRING = {\n    className: 'string',\n    begin: /'/, end: /'/\n  };\n\n  return {\n    aliases: ['sh', 'zsh'],\n    lexemes: /-?[a-z\\.]+/,\n    keywords: {\n      keyword:\n        'if then else elif fi for while in do done case esac function',\n      literal:\n        'true false',\n      built_in:\n        // Shell built-ins\n        // http://www.gnu.org/software/bash/manual/html_node/Shell-Builtin-Commands.html\n        'break cd continue eval exec exit export getopts hash pwd readonly return shift test times ' +\n        'trap umask unset ' +\n        // Bash built-ins\n        'alias bind builtin caller command declare echo enable help let local logout mapfile printf ' +\n        'read readarray source type typeset ulimit unalias ' +\n        // Shell modifiers\n        'set shopt ' +\n        // Zsh built-ins\n        'autoload bg bindkey bye cap chdir clone comparguments compcall compctl compdescribe compfiles ' +\n        'compgroups compquote comptags comptry compvalues dirs disable disown echotc echoti emulate ' +\n        'fc fg float functions getcap getln history integer jobs kill limit log noglob popd print ' +\n        'pushd pushln rehash sched setcap setopt stat suspend ttyctl unfunction unhash unlimit ' +\n        'unsetopt vared wait whence where which zcompile zformat zftp zle zmodload zparseopts zprof ' +\n        'zpty zregexparse zsocket zstyle ztcp',\n      operator:\n        '-ne -eq -lt -gt -f -d -e -s -l -a' // relevance booster\n    },\n    contains: [\n      {\n        className: 'shebang',\n        begin: /^#![^\\n]+sh\\s*$/,\n        relevance: 10\n      },\n      {\n        className: 'function',\n        begin: /\\w[\\w\\d_]*\\s*\\(\\s*\\)\\s*\\{/,\n        returnBegin: true,\n        contains: [hljs.inherit(hljs.TITLE_MODE, {begin: /\\w[\\w\\d_]*/})],\n        relevance: 0\n      },\n      hljs.HASH_COMMENT_MODE,\n      hljs.NUMBER_MODE,\n      QUOTE_STRING,\n      APOS_STRING,\n      VAR\n    ]\n  };\n});\n\nhljs.registerLanguage('css', function(hljs) {\n  var IDENT_RE = '[a-zA-Z-][a-zA-Z0-9_-]*';\n  var FUNCTION = {\n    className: 'function',\n    begin: IDENT_RE + '\\\\(',\n    returnBegin: true,\n    excludeEnd: true,\n    end: '\\\\('\n  };\n  var RULE = {\n    className: 'rule',\n    begin: /[A-Z\\_\\.\\-]+\\s*:/, returnBegin: true, end: ';', endsWithParent: true,\n    contains: [\n      {\n        className: 'attribute',\n        begin: /\\S/, end: ':', excludeEnd: true,\n        starts: {\n          className: 'value',\n          endsWithParent: true, excludeEnd: true,\n          contains: [\n            FUNCTION,\n            hljs.CSS_NUMBER_MODE,\n            hljs.QUOTE_STRING_MODE,\n            hljs.APOS_STRING_MODE,\n            hljs.C_BLOCK_COMMENT_MODE,\n            {\n              className: 'hexcolor', begin: '#[0-9A-Fa-f]+'\n            },\n            {\n              className: 'important', begin: '!important'\n            }\n          ]\n        }\n      }\n    ]\n  };\n\n  return {\n    case_insensitive: true,\n    illegal: /[=\\/|'\\$]/,\n    contains: [\n      hljs.C_BLOCK_COMMENT_MODE,\n      {\n        className: 'id', begin: /\\#[A-Za-z0-9_-]+/\n      },\n      {\n        className: 'class', begin: /\\.[A-Za-z0-9_-]+/\n      },\n      {\n        className: 'attr_selector',\n        begin: /\\[/, end: /\\]/,\n        illegal: '$'\n      },\n      {\n        className: 'pseudo',\n        begin: /:(:)?[a-zA-Z0-9\\_\\-\\+\\(\\)\"']+/\n      },\n      {\n        className: 'at_rule',\n        begin: '@(font-face|page)',\n        lexemes: '[a-z-]+',\n        keywords: 'font-face page'\n      },\n      {\n        className: 'at_rule',\n        begin: '@', end: '[{;]', // at_rule eating first \"{\" is a good thing\n                                 // because it doesn’t let it to be parsed as\n                                 // a rule set but instead drops parser into\n                                 // the default mode which is how it should be.\n        contains: [\n          {\n            className: 'keyword',\n            begin: /\\S+/\n          },\n          {\n            begin: /\\s/, endsWithParent: true, excludeEnd: true,\n            relevance: 0,\n            contains: [\n              FUNCTION,\n              hljs.APOS_STRING_MODE, hljs.QUOTE_STRING_MODE,\n              hljs.CSS_NUMBER_MODE\n            ]\n          }\n        ]\n      },\n      {\n        className: 'tag', begin: IDENT_RE,\n        relevance: 0\n      },\n      {\n        className: 'rules',\n        begin: '{', end: '}',\n        illegal: /\\S/,\n        contains: [\n          hljs.C_BLOCK_COMMENT_MODE,\n          RULE,\n        ]\n      }\n    ]\n  };\n});\n\nhljs.registerLanguage('javascript', function(hljs) {\n  return {\n    aliases: ['js'],\n    keywords: {\n      keyword:\n        'in of if for while finally var new function do return void else break catch ' +\n        'instanceof with throw case default try this switch continue typeof delete ' +\n        'let yield const export super debugger as async await',\n      literal:\n        'true false null undefined NaN Infinity',\n      built_in:\n        'eval isFinite isNaN parseFloat parseInt decodeURI decodeURIComponent ' +\n        'encodeURI encodeURIComponent escape unescape Object Function Boolean Error ' +\n        'EvalError InternalError RangeError ReferenceError StopIteration SyntaxError ' +\n        'TypeError URIError Number Math Date String RegExp Array Float32Array ' +\n        'Float64Array Int16Array Int32Array Int8Array Uint16Array Uint32Array ' +\n        'Uint8Array Uint8ClampedArray ArrayBuffer DataView JSON Intl arguments require ' +\n        'module console window document Symbol Set Map WeakSet WeakMap Proxy Reflect ' +\n        'Promise'\n    },\n    contains: [\n      {\n        className: 'pi',\n        relevance: 10,\n        begin: /^\\s*['\"]use (strict|asm)['\"]/\n      },\n      hljs.APOS_STRING_MODE,\n      hljs.QUOTE_STRING_MODE,\n      { // template string\n        className: 'string',\n        begin: '`', end: '`',\n        contains: [\n          hljs.BACKSLASH_ESCAPE,\n          {\n            className: 'subst',\n            begin: '\\\\$\\\\{', end: '\\\\}'\n          }\n        ]\n      },\n      hljs.C_LINE_COMMENT_MODE,\n      hljs.C_BLOCK_COMMENT_MODE,\n      {\n        className: 'number',\n        variants: [\n          { begin: '\\\\b(0[bB][01]+)' },\n          { begin: '\\\\b(0[oO][0-7]+)' },\n          { begin: hljs.C_NUMBER_RE }\n        ],\n        relevance: 0\n      },\n      { // \"value\" container\n        begin: '(' + hljs.RE_STARTERS_RE + '|\\\\b(case|return|throw)\\\\b)\\\\s*',\n        keywords: 'return throw case',\n        contains: [\n          hljs.C_LINE_COMMENT_MODE,\n          hljs.C_BLOCK_COMMENT_MODE,\n          hljs.REGEXP_MODE,\n          { // E4X / JSX\n            begin: /</, end: />\\s*[);\\]]/,\n            relevance: 0,\n            subLanguage: 'xml'\n          }\n        ],\n        relevance: 0\n      },\n      {\n        className: 'function',\n        beginKeywords: 'function', end: /\\{/, excludeEnd: true,\n        contains: [\n          hljs.inherit(hljs.TITLE_MODE, {begin: /[A-Za-z$_][0-9A-Za-z$_]*/}),\n          {\n            className: 'params',\n            begin: /\\(/, end: /\\)/,\n            excludeBegin: true,\n            excludeEnd: true,\n            contains: [\n              hljs.C_LINE_COMMENT_MODE,\n              hljs.C_BLOCK_COMMENT_MODE\n            ]\n          }\n        ],\n        illegal: /\\[|%/\n      },\n      {\n        begin: /\\$[(.]/ // relevance booster for a pattern common to JS libs: `$(something)` and `$.something`\n      },\n      {\n        begin: '\\\\.' + hljs.IDENT_RE, relevance: 0 // hack: prevents detection of keywords after dots\n      },\n      // ECMAScript 6 modules import\n      {\n        beginKeywords: 'import', end: '[;$]',\n        keywords: 'import from as',\n        contains: [\n          hljs.APOS_STRING_MODE,\n          hljs.QUOTE_STRING_MODE\n        ]\n      },\n      { // ES6 class\n        className: 'class',\n        beginKeywords: 'class', end: /[{;=]/, excludeEnd: true,\n        illegal: /[:\"\\[\\]]/,\n        contains: [\n          {beginKeywords: 'extends'},\n          hljs.UNDERSCORE_TITLE_MODE\n        ]\n      }\n    ],\n    illegal: /#/\n  };\n});\n\nhljs.registerLanguage('scss', function(hljs) {\n  var IDENT_RE = '[a-zA-Z-][a-zA-Z0-9_-]*';\n  var VARIABLE = {\n    className: 'variable',\n    begin: '(\\\\$' + IDENT_RE + ')\\\\b'\n  };\n  var FUNCTION = {\n    className: 'function',\n    begin: IDENT_RE + '\\\\(',\n    returnBegin: true,\n    excludeEnd: true,\n    end: '\\\\('\n  };\n  var HEXCOLOR = {\n    className: 'hexcolor', begin: '#[0-9A-Fa-f]+'\n  };\n  var DEF_INTERNALS = {\n    className: 'attribute',\n    begin: '[A-Z\\\\_\\\\.\\\\-]+', end: ':',\n    excludeEnd: true,\n    illegal: '[^\\\\s]',\n    starts: {\n      className: 'value',\n      endsWithParent: true, excludeEnd: true,\n      contains: [\n        FUNCTION,\n        HEXCOLOR,\n        hljs.CSS_NUMBER_MODE,\n        hljs.QUOTE_STRING_MODE,\n        hljs.APOS_STRING_MODE,\n        hljs.C_BLOCK_COMMENT_MODE,\n        {\n          className: 'important', begin: '!important'\n        }\n      ]\n    }\n  };\n  return {\n    case_insensitive: true,\n    illegal: '[=/|\\']',\n    contains: [\n      hljs.C_LINE_COMMENT_MODE,\n      hljs.C_BLOCK_COMMENT_MODE,\n      FUNCTION,\n      {\n        className: 'id', begin: '\\\\#[A-Za-z0-9_-]+',\n        relevance: 0\n      },\n      {\n        className: 'class', begin: '\\\\.[A-Za-z0-9_-]+',\n        relevance: 0\n      },\n      {\n        className: 'attr_selector',\n        begin: '\\\\[', end: '\\\\]',\n        illegal: '$'\n      },\n      {\n        className: 'tag', // begin: IDENT_RE, end: '[,|\\\\s]'\n        begin: '\\\\b(a|abbr|acronym|address|area|article|aside|audio|b|base|big|blockquote|body|br|button|canvas|caption|cite|code|col|colgroup|command|datalist|dd|del|details|dfn|div|dl|dt|em|embed|fieldset|figcaption|figure|footer|form|frame|frameset|(h[1-6])|head|header|hgroup|hr|html|i|iframe|img|input|ins|kbd|keygen|label|legend|li|link|map|mark|meta|meter|nav|noframes|noscript|object|ol|optgroup|option|output|p|param|pre|progress|q|rp|rt|ruby|samp|script|section|select|small|span|strike|strong|style|sub|sup|table|tbody|td|textarea|tfoot|th|thead|time|title|tr|tt|ul|var|video)\\\\b',\n        relevance: 0\n      },\n      {\n        className: 'pseudo',\n        begin: ':(visited|valid|root|right|required|read-write|read-only|out-range|optional|only-of-type|only-child|nth-of-type|nth-last-of-type|nth-last-child|nth-child|not|link|left|last-of-type|last-child|lang|invalid|indeterminate|in-range|hover|focus|first-of-type|first-line|first-letter|first-child|first|enabled|empty|disabled|default|checked|before|after|active)'\n      },\n      {\n        className: 'pseudo',\n        begin: '::(after|before|choices|first-letter|first-line|repeat-index|repeat-item|selection|value)'\n      },\n      VARIABLE,\n      {\n        className: 'attribute',\n        begin: '\\\\b(z-index|word-wrap|word-spacing|word-break|width|widows|white-space|visibility|vertical-align|unicode-bidi|transition-timing-function|transition-property|transition-duration|transition-delay|transition|transform-style|transform-origin|transform|top|text-underline-position|text-transform|text-shadow|text-rendering|text-overflow|text-indent|text-decoration-style|text-decoration-line|text-decoration-color|text-decoration|text-align-last|text-align|tab-size|table-layout|right|resize|quotes|position|pointer-events|perspective-origin|perspective|page-break-inside|page-break-before|page-break-after|padding-top|padding-right|padding-left|padding-bottom|padding|overflow-y|overflow-x|overflow-wrap|overflow|outline-width|outline-style|outline-offset|outline-color|outline|orphans|order|opacity|object-position|object-fit|normal|none|nav-up|nav-right|nav-left|nav-index|nav-down|min-width|min-height|max-width|max-height|mask|marks|margin-top|margin-right|margin-left|margin-bottom|margin|list-style-type|list-style-position|list-style-image|list-style|line-height|letter-spacing|left|justify-content|initial|inherit|ime-mode|image-orientation|image-resolution|image-rendering|icon|hyphens|height|font-weight|font-variant-ligatures|font-variant|font-style|font-stretch|font-size-adjust|font-size|font-language-override|font-kerning|font-feature-settings|font-family|font|float|flex-wrap|flex-shrink|flex-grow|flex-flow|flex-direction|flex-basis|flex|filter|empty-cells|display|direction|cursor|counter-reset|counter-increment|content|column-width|column-span|column-rule-width|column-rule-style|column-rule-color|column-rule|column-gap|column-fill|column-count|columns|color|clip-path|clip|clear|caption-side|break-inside|break-before|break-after|box-sizing|box-shadow|box-decoration-break|bottom|border-width|border-top-width|border-top-style|border-top-right-radius|border-top-left-radius|border-top-color|border-top|border-style|border-spacing|border-right-width|border-right-style|border-right-color|border-right|border-radius|border-left-width|border-left-style|border-left-color|border-left|border-image-width|border-image-source|border-image-slice|border-image-repeat|border-image-outset|border-image|border-color|border-collapse|border-bottom-width|border-bottom-style|border-bottom-right-radius|border-bottom-left-radius|border-bottom-color|border-bottom|border|background-size|background-repeat|background-position|background-origin|background-image|background-color|background-clip|background-attachment|background-blend-mode|background|backface-visibility|auto|animation-timing-function|animation-play-state|animation-name|animation-iteration-count|animation-fill-mode|animation-duration|animation-direction|animation-delay|animation|align-self|align-items|align-content)\\\\b',\n        illegal: '[^\\\\s]'\n      },\n      {\n        className: 'value',\n        begin: '\\\\b(whitespace|wait|w-resize|visible|vertical-text|vertical-ideographic|uppercase|upper-roman|upper-alpha|underline|transparent|top|thin|thick|text|text-top|text-bottom|tb-rl|table-header-group|table-footer-group|sw-resize|super|strict|static|square|solid|small-caps|separate|se-resize|scroll|s-resize|rtl|row-resize|ridge|right|repeat|repeat-y|repeat-x|relative|progress|pointer|overline|outside|outset|oblique|nowrap|not-allowed|normal|none|nw-resize|no-repeat|no-drop|newspaper|ne-resize|n-resize|move|middle|medium|ltr|lr-tb|lowercase|lower-roman|lower-alpha|loose|list-item|line|line-through|line-edge|lighter|left|keep-all|justify|italic|inter-word|inter-ideograph|inside|inset|inline|inline-block|inherit|inactive|ideograph-space|ideograph-parenthesis|ideograph-numeric|ideograph-alpha|horizontal|hidden|help|hand|groove|fixed|ellipsis|e-resize|double|dotted|distribute|distribute-space|distribute-letter|distribute-all-lines|disc|disabled|default|decimal|dashed|crosshair|collapse|col-resize|circle|char|center|capitalize|break-word|break-all|bottom|both|bolder|bold|block|bidi-override|below|baseline|auto|always|all-scroll|absolute|table|table-cell)\\\\b'\n      },\n      {\n        className: 'value',\n        begin: ':', end: ';',\n        contains: [\n          FUNCTION,\n          VARIABLE,\n          HEXCOLOR,\n          hljs.CSS_NUMBER_MODE,\n          hljs.QUOTE_STRING_MODE,\n          hljs.APOS_STRING_MODE,\n          {\n            className: 'important', begin: '!important'\n          }\n        ]\n      },\n      {\n        className: 'at_rule',\n        begin: '@', end: '[{;]',\n        keywords: 'mixin include extend for if else each while charset import debug media page content font-face namespace warn',\n        contains: [\n          FUNCTION,\n          VARIABLE,\n          hljs.QUOTE_STRING_MODE,\n          hljs.APOS_STRING_MODE,\n          HEXCOLOR,\n          hljs.CSS_NUMBER_MODE,\n          {\n            className: 'preprocessor',\n            begin: '\\\\s[A-Za-z0-9_.-]+',\n            relevance: 0\n          }\n        ]\n      }\n    ]\n  };\n});\n\nhljs.registerLanguage('typescript', function(hljs) {\n  var KEYWORDS = {\n    keyword:\n      'in if for while finally var new function|0 do return void else break catch ' +\n      'instanceof with throw case default try this switch continue typeof delete ' +\n      'let yield const class public private get set super ' +\n      'static implements enum export import declare type protected @',\n    literal:\n      'true false null undefined NaN Infinity',\n    built_in:\n      'eval isFinite isNaN parseFloat parseInt decodeURI decodeURIComponent ' +\n      'encodeURI encodeURIComponent escape unescape Object Function Boolean Error ' +\n      'EvalError InternalError RangeError ReferenceError StopIteration SyntaxError ' +\n      'TypeError URIError Number Math Date String RegExp Array Float32Array ' +\n      'Float64Array Int16Array Int32Array Int8Array Uint16Array Uint32Array ' +\n      'Uint8Array Uint8ClampedArray ArrayBuffer DataView JSON Intl arguments require ' +\n      'module console window document any number boolean string void'\n  };\n\n  return {\n    aliases: ['ts'],\n    keywords: KEYWORDS,\n    contains: [\n      {\n        className: 'pi',\n        begin: /^\\s*['\"]use strict['\"]/,\n        relevance: 0\n      },\n      hljs.APOS_STRING_MODE,\n      hljs.QUOTE_STRING_MODE,\n      hljs.C_LINE_COMMENT_MODE,\n      hljs.C_BLOCK_COMMENT_MODE,\n      {\n        className: 'number',\n        variants: [\n          { begin: '\\\\b(0[bB][01]+)' },\n          { begin: '\\\\b(0[oO][0-7]+)' },\n          { begin: hljs.C_NUMBER_RE }\n        ],\n        relevance: 0\n      },\n      { // \"value\" container\n        begin: '(' + hljs.RE_STARTERS_RE + '|\\\\b(case|return|throw)\\\\b)\\\\s*',\n        keywords: 'return throw case',\n        contains: [\n          hljs.C_LINE_COMMENT_MODE,\n          hljs.C_BLOCK_COMMENT_MODE,\n          hljs.REGEXP_MODE\n        ],\n        relevance: 0\n      },\n      {\n        className: 'function',\n        begin: 'function', end: /[\\{;]/, excludeEnd: true,\n        keywords: KEYWORDS,\n        contains: [\n          'self',\n          hljs.inherit(hljs.TITLE_MODE, {begin: /[A-Za-z$_][0-9A-Za-z$_]*/}),\n          {\n            className: 'params',\n            begin: /\\(/, end: /\\)/,\n            excludeBegin: true,\n            excludeEnd: true,\n            keywords: KEYWORDS,\n            contains: [\n              hljs.C_LINE_COMMENT_MODE,\n              hljs.C_BLOCK_COMMENT_MODE\n            ],\n            illegal: /[\"'\\(]/\n          }\n        ],\n        illegal: /\\[|%/,\n        relevance: 0 // () => {} is more typical in TypeScript\n      },\n      {\n        className: 'constructor',\n        beginKeywords: 'constructor', end: /\\{/, excludeEnd: true,\n        relevance: 10\n      },\n      {\n        className: 'module',\n        beginKeywords: 'module', end: /\\{/, excludeEnd: true\n      },\n      {\n        className: 'interface',\n        beginKeywords: 'interface', end: /\\{/, excludeEnd: true,\n        keywords: 'interface extends'\n        },\n        // MH ADDED: ES7 Decorators/Annotations\n      {\n        className: 'keyword',\n        begin: '@', end: /\\(/, excludeEnd: true\n      },\n      {\n        className: 'string',\n        begin: '`', end: /\\`/, excludeEnd: false\n      },\n      {\n        begin: /\\$[(.]/ // relevance booster for a pattern common to JS libs: `$(something)` and `$.something`\n      },\n      {\n        begin: '\\\\.' + hljs.IDENT_RE, relevance: 0 // hack: prevents detection of keywords after dots\n      }\n    ]\n  };\n});\n\nhljs.registerLanguage('xml', function(hljs) {\n  var XML_IDENT_RE = '[A-Za-z0-9\\\\._:-]+';\n  var PHP = {\n    begin: /<\\?(php)?(?!\\w)/, end: /\\?>/,\n    subLanguage: 'php'\n  };\n  var TAG_INTERNALS = {\n    endsWithParent: true,\n    illegal: /</,\n    relevance: 0,\n    contains: [\n      PHP,\n      {\n        className: 'attribute',\n        begin: XML_IDENT_RE,\n        relevance: 0\n      },\n      {\n        begin: '=',\n        relevance: 0,\n        contains: [\n          {\n            className: 'value',\n            contains: [PHP],\n            variants: [\n              {begin: /\"/, end: /\"/},\n              {begin: /'/, end: /'/},\n              {begin: /[^\\s\\/>]+/}\n            ]\n          }\n        ]\n      }\n    ]\n  };\n  return {\n    aliases: ['html', 'xhtml', 'rss', 'atom', 'xsl', 'plist'],\n    case_insensitive: true,\n    contains: [\n      {\n        className: 'doctype',\n        begin: '<!DOCTYPE', end: '>',\n        relevance: 10,\n        contains: [{begin: '\\\\[', end: '\\\\]'}]\n      },\n      hljs.COMMENT(\n        '<!--',\n        '-->',\n        {\n          relevance: 10\n        }\n      ),\n      {\n        className: 'cdata',\n        begin: '<\\\\!\\\\[CDATA\\\\[', end: '\\\\]\\\\]>',\n        relevance: 10\n      },\n      {\n        className: 'tag',\n        /*\n        The lookahead pattern (?=...) ensures that 'begin' only matches\n        '<style' as a single word, followed by a whitespace or an\n        ending braket. The '$' is needed for the lexeme to be recognized\n        by hljs.subMode() that tests lexemes outside the stream.\n        */\n        begin: '<style(?=\\\\s|>|$)', end: '>',\n        keywords: {title: 'style'},\n        contains: [TAG_INTERNALS],\n        starts: {\n          end: '</style>', returnEnd: true,\n          subLanguage: 'css'\n        }\n      },\n      {\n        className: 'tag',\n        // See the comment in the <style tag about the lookahead pattern\n        begin: '<script(?=\\\\s|>|$)', end: '>',\n        keywords: {title: 'script'},\n        contains: [TAG_INTERNALS],\n        starts: {\n          end: '\\<\\/script\\>', returnEnd: true,\n          subLanguage: ['actionscript', 'javascript', 'handlebars']\n        }\n      },\n      PHP,\n      {\n        className: 'pi',\n        begin: /<\\?\\w+/, end: /\\?>/,\n        relevance: 10\n      },\n      {\n        className: 'tag',\n        begin: '</?', end: '/?>',\n        contains: [\n          {\n            className: 'title', begin: /[^ \\/><\\n\\t]+/, relevance: 0\n          },\n          TAG_INTERNALS\n        ]\n      }\n    ]\n  };\n});\n\n  return hljs;\n}));\n"
  },
  {
    "path": "assets/js/utils.js",
    "content": "// shim foreach for ie11\nif ( !Array.prototype.forEach ) {\n  Array.prototype.forEach = function(fn, scope) {\n    for (var i = 0, len = this.length; i < len; ++i) {\n      fn.call(scope || this, this[i], i, this);\n    }\n  }\n}\n\n// sidebar toggle for mobile views\nvar sidebarToggleEl = document.getElementById('sidebar-toggle');\nif (sidebarToggleEl) {\n  sidebarToggleEl.onclick = function() {\n    document.getElementById('side-nav').classList.toggle('shown');\n    this.classList.toggle('active');\n  };\n}\n\n$(document).ready(function() {\n  var detectMouse = function(e){\n    $('.dropdown-toggle').dropdown();\n    // remove event bindings, so it only runs once\n    $(document.body).off('touchstart', detectMouse);\n  }\n  // attach both events to body\n  $(document.body).on('touchstart', detectMouse);\n//   // activate dropdowns\n//   $('.dropdown-toggle').dropdown();\n//\n//   $(\".navbar.transparent .dropdown, .pre-header .dropdown\").hover(\n//     function(){ $(this).addClass('open') },\n//     function(){ $(this).removeClass('open') }\n//   );\n// \t$(\".navbar.transparent .dropdown, .pre-header .dropdown\").click()\n//\n//   // Generic helper class for on-load animations\n//   $('.active-on-load').addClass('active');\n});\n\n(function () {\n  // pre-header announcement animation\n  var announcement = document.querySelector('.pre-header__announcement');\n\n  if (announcement) {\n    var lastClear = localStorage.getItem('last-clear');\n    var timeNow  = (new Date()).getTime();\n\n    if ((timeNow - lastClear) > 1000 * 60 * 60 ) {\n      localStorage.clear();\n      localStorage.setItem('last-clear', timeNow);\n\n      setTimeout(function(){\n        announcement.classList.add('animate-in');\n      }, 2500)\n    } else {\n      announcement.classList.add('in');\n    }\n  }\n\n\n  // mobile nav\n  var mobileNav = document.querySelector('.mobile-nav');\n\n  if (mobileNav) {\n    document.querySelector('#collapse-toggle').addEventListener('click', function(){\n      document.body.classList.add('no-scroll');\n      mobileNav.classList.add('open');\n      mobileNav.classList.remove('closed');\n      mobileNav.style.display = 'block';\n    });\n\n    document.querySelector('.mobile-nav__close').addEventListener('click', function(){\n      document.body.classList.remove('no-scroll');\n      mobileNav.classList.remove('open');\n      mobileNav.classList.add('closed');\n      setTimeout(function() {\n        mobileNav.style.display = 'none';\n      }, 300);\n    });\n  }\n})();\n\nwindow.mobileAndTabletCheck = function() {\n  var check = false;\n  (function(a){if(/(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(a)||/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(a.substr(0,4)))check=true})(navigator.userAgent||navigator.vendor||window.opera);\n  return check;\n};\n\nwindow.getCookie = function(name) {\n  var v = document.cookie.match('(^|;) ?' + name + '=([^;]*)(;|$)');\n  return v ? v[2] : null;\n}\n\nwindow.tocToggle = function(btnEl) {\n  btnEl.parentElement.classList.toggle('collapsed');\n};\n\n$('[data-toggle=\"tooltip\"]').tooltip({container: 'body'});\n\n// since we don't use mixpanel on every page\nif (!window.mixpanel) {\n  window.mixpanel = {\n    track: function() { console.log('Mixpanel not enabled on this page'); }\n  }\n}\n// optional shorthand\nwindow.t = mixpanel.track;\n\nwindow.guid = function() {\n  function s4() {\n    return Math.floor((1 + Math.random()) * 0x10000)\n      .toString(16)\n      .substring(1);\n  }\n  return s4() + s4() + '-' + s4() + '-' + s4() + '-' +\n    s4() + '-' + s4() + s4() + s4();\n}\n\n// add an .active class to elements w/ .activateOnScroll class on when they\n// scroll in to view\nvar activateOnScroll = function() {\n  var elems;\n  var windowHeight;\n  function init() {\n    elems = document.querySelectorAll( window.activateOnScrollSelector ?\n      activateOnScrollSelector : '.activateOnScroll');\n    // avoiding a potential edge bug by activating everything\n    if (window.navigator.userAgent.indexOf(\"Edge\") > -1) {\n      for (var i = 0; i < elems.length; i++) {\n        elems[i].classList.add('active');\n      }\n      return\n    }\n    windowHeight = window.innerHeight ||\n                   document.documentElement.clientHeight ||\n                   document.body.clientHeight;;\n    addEventHandlers();\n    checkPosition();\n  }\n  function addEventHandlers() {\n    window.addEventListener('scroll', checkPosition);\n    window.addEventListener('resize', init);\n  }\n  function checkPosition() {\n    for (var i = 0; i < elems.length; i++) {\n      var elPos = elems[i].getBoundingClientRect();\n      var offset = parseInt(elems[i].dataset.offset || 0, 10);\n      if (\n        (\n          elPos.y - offset < 0 &&  // already past the item\n          elPos.y + (elPos.height / 2) - offset > 0\n        ) || (\n          elPos.y + offset > 0 && // item is yet below\n          elPos.y + (elPos.height / 2) + offset < windowHeight\n        )\n        ) {\n        elems[i].classList.add('active');\n      }\n    }\n  }\n  return {\n    init: init\n  };\n};\nactivateOnScroll().init();\n\n// highlight.js syntax highlighting\nhljs.initHighlightingOnLoad();\n\n// http://paulirish.com/2011/requestanimationframe-for-smart-animating/\n// http://my.opera.com/emoller/blog/2011/12/20/requestanimationframe-for-smart-er-animating\n// requestAnimationFrame polyfill by Erik Möller. fixes from Paul Irish and Tino Zijdel\n// MIT license\n\n(function() {\n  var lastTime = 0;\n  var vendors = ['ms', 'moz', 'webkit', 'o'];\n  for (var x = 0; x < vendors.length && !window.requestAnimationFrame; ++x) {\n    window.requestAnimationFrame = window[vendors[x] + 'RequestAnimationFrame'];\n    window.cancelAnimationFrame = window[vendors[x] + 'CancelAnimationFrame'] ||\n                                  window[vendors[x] + 'CancelRequestAnimationFrame'];\n  }\n\n  if (!window.requestAnimationFrame) {\n    window.requestAnimationFrame = function(callback, element) {\n      var currTime = new Date().getTime();\n      var timeToCall = Math.max(0, 16 - (currTime - lastTime));\n      var id = window.setTimeout(function() {\n        callback(currTime + timeToCall);\n      }, timeToCall);\n      lastTime = currTime + timeToCall;\n      return id;\n    };\n  }\n  if (!window.cancelAnimationFrame) {\n    window.cancelAnimationFrame = function(id) {\n      clearTimeout(id);\n    };\n  }\n}());\n\n// determine if sticky sub-nav is stuck\n// *intersection observer and position:sticky browser support match\nconst subHeader = {\n  el: document.getElementById('sub-header'),\n  stuck: false,\n  queued: false,\n  observer: new IntersectionObserver(function(entries) {\n    if (subHeader.queued) return;\n\n    // no intersection with screen\n  \tif(!subHeader.stuck && entries[0].intersectionRatio === 0) {\n      subHeader.queued = true;\n      requestAnimationFrame(function() {\n        subHeader.el.classList.add('sub-header--stuck');\n        subHeader.stuck = true;\n        subHeader.queued = false;\n      });\n\n  \t// fully intersects with screen\n    } else if(subHeader.stuck && entries[0].intersectionRatio === 1) {\n      subHeader.queued = true;\n      requestAnimationFrame(function() {\n        subHeader.el.classList.remove('sub-header--stuck');\n        subHeader.stuck = false;\n        subHeader.queued = false;\n      })\n    }\n  }, { threshold: [0,1] }),\n  init: function() {\n    if (subHeader.el) {\n      subHeader.observer.observe(document.getElementById('sub-header__trigger'));\n      setTimeout(function() {\n        subHeader.el.classList.add('sub-header_initialized');\n        document.querySelector('.navbar-default').classList.add('navbar--not-fixed');\n      }, 405)\n    }\n  }\n}\nsubHeader.init();\n\n// Smooth Scroll To anchor links with the .anchor class\n$('a.anchor[href*=\"#\"]').click(function(event) {\n  // On-page links\n  if (\n    location.pathname.replace(/^\\//, '') == this.pathname.replace(/^\\//, '')\n    &&\n    location.hostname == this.hostname\n  ) {\n    // Figure out element to scroll to\n    var target = $(this.hash);\n    if (!target.length) {\n      target = $('[name=\"' + this.hash.substring(1) + '\"]');\n    }\n    // Does a scroll target exist?\n    if (target.length) {\n      var offset = event.target.dataset && event.target.dataset.offset\n        ? event.target.dataset.offset : 100\n      scrollToY(target.offset().top - offset, 2000);\n    } else {\n      // otherwise scroll to the top of the page\n      scrollToY(0, 2000);\n    }\n    history.pushState && history.pushState(null, null, this.hash)\n    return false;\n  }\n});\n\n\nwindow.scrollToEl = function(selector, speed) {\n  // if passed a string, query for the element\n  // otherwise assume it's already and element\n  if(typeof selector === 'string') {\n    selector = document.querySelector(selector);\n  }\n  scrollToY(selector.offsetTop, speed)\n}\n\nwindow.scrollToY = function(scrollTargetY, speed, easing) {\n    // scrollTargetY: the target scrollY property of the window\n    // speed: time in pixels per second\n    // easing: easing equation to use\n\n    var scrollY = window.scrollY,\n        scrollTargetY = scrollTargetY || 0,\n        speed = speed || 2000,\n        easing = easing || 'easeOutSine',\n        currentTime = 0;\n    // min time .1, max time .8 seconds\n    var time = Math.max(.1, Math.min(Math.abs(scrollY - scrollTargetY) / speed, .8));\n\n    // easing equations from https://github.com/danro/easing-js/blob/master/easing.js\n    var PI_D2 = Math.PI / 2,\n        easingEquations = {\n            easeOutSine: function (pos) {\n                return Math.sin(pos * (Math.PI / 2));\n            },\n            easeInOutSine: function (pos) {\n                return (-0.5 * (Math.cos(Math.PI * pos) - 1));\n            },\n            easeInOutQuint: function (pos) {\n                if ((pos /= 0.5) < 1) {\n                    return 0.5 * Math.pow(pos, 5);\n                }\n                return 0.5 * (Math.pow((pos - 2), 5) + 2);\n            },\n            easeOutExpo: function(pos) {\n              return (pos===1) ? 1 : -Math.pow(2, -10 * pos) + 1;\n            }\n        };\n\n    // add animation loop\n    function tick() {\n        currentTime += 1 / 60;\n\n        var p = currentTime / time;\n        var t = easingEquations[easing](p);\n\n        if (p < 1) {\n            requestAnimationFrame(tick);\n            window.scrollTo(0, scrollY + ((scrollTargetY - scrollY) * t));\n        } else {\n            window.scrollTo(0, scrollTargetY);\n        }\n    }\n\n    // call it once to get started\n    tick();\n}\n\n\nwindow.stickyNav = {\n  init: function () {\n    this.isShown = false;\n    this.once = false;\n    this.navBar = document.querySelector('.navbar');\n    this.stickyNavBar = document.createElement(\"div\");\n    this.stickyNavBar.classList.add('navbar','navbar-default', 'light', 'navbar-sticky', 'navbar-sticky--hide');\n    if (this.navBar.className.indexOf('enterprise') > -1) {\n      this.stickyNavBar.classList.add('enterprise');\n    }\n    this.stickyNavBar.appendChild(this.navBar.querySelector('.wrapper').cloneNode(true));\n    this.stickyNavBar.style.visibility = 'hidden';\n    document.body.appendChild(this.stickyNavBar);\n    document.body.classList.add('body-sticky-nav');\n    document.addEventListener('scroll', this.handleScroll.bind(this))\n  },\n\n  handleScroll: function () {\n    var self = this;\n    requestAnimationFrame(function(){\n      //header nav height + announcement bar height\n      if (window.scrollY > (70 + 74)) {\n        self.show();\n      } else {\n        self.hide();\n      }\n    });\n  },\n\n  show: function () {\n    if (this.isShown) return;\n    this.isShown = true;\n\n    if (!this.once) {\n      this.stickyNavBar.style.visibility = 'visible';\n      this.once = true;\n    }\n\n    this.stickyNavBar.classList.add('navbar-sticky--show');\n    this.stickyNavBar.classList.remove('navbar-sticky--hide');\n  },\n\n  hide: function () {\n    if (!this.isShown) return;\n    this.isShown = false;\n    this.stickyNavBar.classList.add('navbar-sticky--hide');\n    this.stickyNavBar.classList.remove('navbar-sticky--show');\n  }\n}\n\nwindow.rafContext = function(drawFn) {\n  var requestId;\n  function render() {\n    drawFn();\n    requestId = requestAnimationFrame(render);\n  }\n\n  return {\n    play: function() {\n      if (!requestId) {\n        render();\n      }\n    },\n    stop: function() {\n      if (requestId) {\n        cancelAnimationFrame(requestId);\n        requestId = null;\n      }\n    }\n  }\n}\n\nwindow.initAnimation = function(el, ctx, _options) {\n  var options = _options || {};\n  var breakpoint = (options.breakpoint) ?  options.breakpoint : 767;\n  var once = options.once || false;\n  var hasPlayed = options.playWhenInView ? false : true;\n  var isPlaying = false;\n\n  function firstPlay () {\n    play();\n    hasPlayed = true;\n  }\n\n  function play () {\n    if (isPlaying || window.innerWidth < breakpoint) return;\n    if (typeof ctx === 'function') {\n      ctx();\n    } else {\n      ctx.play();\n    }\n\n    isPlaying = true;\n  }\n\n  function pause () {\n    if (!isPlaying || typeof ctx === 'function') return;\n    ctx.stop();\n    isPlaying = false;\n  }\n\n  function checkScroll() {\n    if (once && hasPlayed) return;\n    var winHeight = window.innerHeight;\n    var bbox = el.getBoundingClientRect();\n    var offset = 0.5;\n\n    if (!hasPlayed && bbox.top < winHeight * offset && bbox.bottom > winHeight * offset ) firstPlay();\n    if (!hasPlayed) return;\n    if (!isPlaying && bbox.top < winHeight && bbox.bottom > 0) play();\n    if (isPlaying && bbox.top > winHeight) pause();\n    if (isPlaying && bbox.bottom < 0) pause();\n    if (!isPlaying && bbox.bottom > 0 && bbox.top < winHeight) play();\n  }\n\n  function checkViewport() {\n    if (window.innerWidth < breakpoint && isPlaying) pause();\n  }\n\n  checkScroll();\n  window.addEventListener('scroll', function() { requestAnimationFrame(checkScroll) });\n  window.addEventListener('resize', function() { requestAnimationFrame(checkViewport) });\n}\n\nwindow.pjx = {\n  isAnimating: false,\n  navLinks: null,\n\n  init: function(urlRoot, delegatorID, hooks) {\n    var self = this;\n    this.urlRoot = urlRoot;\n    this.navLinks = document.querySelectorAll('.pjxNavLink');\n    this.hooks = hooks || {};\n    this.delegator = document.querySelector(delegatorID);\n\n    // If delegator does not exist, bail\n    if (!this.delegator) return;\n\n    this.delegator.addEventListener('click', function(ev){\n      var el = ev.target;\n      while (el && !el.matches('a.pjxLink')) {\n        el = el.parentNode;\n        if (el.matches(delegatorID)) return;\n      }\n      ev.preventDefault();\n      self.handleClick(el);\n    });\n\n    window.onpopstate = this.handlePopState.bind(this);\n  },\n\n  each: function(fn) {\n    for (i = 0; i < this.navLinks.length; i++) {\n      fn(this.navLinks[i], i);\n    }\n  },\n\n  handleClick: function(el) {\n    if (this.isAnimating) return;\n    this.handleTransition(el.href, true)\n  },\n\n  handlePopState: function(ev) {\n    if (this.isAnimating) {\n      ev.preventDefault();\n      return;\n    }\n    var direction = ev.state ? ev.state.direction : 1;\n    this.handleTransition(document.location.href, false);\n  },\n\n  handleTransition: function (url, doPushState) {\n    var self = this;\n    var urlSplit = url.split('/');\n    var slug ='/' + this.urlRoot + (urlSplit[urlSplit.indexOf(this.urlRoot) + 1] ?  '/' + urlSplit.slice(urlSplit.indexOf(this.urlRoot) + 1).join('/') : '');\n\n    this.each(function(el) {\n      el.parentElement.classList.remove('active');\n      if (el.href === url) {\n        el.parentElement.classList.add('active');\n      }\n    });\n    if (self.hooks.willTransition) {\n      self.hooks.willTransition(slug);\n    }\n    this.fetchContent(url , function(content){\n      if (doPushState) self.updateHistory(slug);\n      self.transition(content, slug);\n    });\n  },\n\n  transition: function(content, slug) {\n    this.isAnimating = true;\n\n    var self = this;\n    var parser = new DOMParser();\n    var nextDoc = parser.parseFromString(content, \"text/html\");\n\n    var nextBody = nextDoc.querySelector('.pjxTransitionBody');\n    var currBody = document.querySelector('.pjxTransitionBody' );\n    var currBodyWrapper = currBody.parentElement;\n\n    TweenLite.to(currBody, 0.3, {\n      y: 10,\n      opacity: 0,\n      onComplete: function () {\n        currBodyWrapper.removeChild(currBody);\n        currBodyWrapper.appendChild(nextBody);\n        if (self.hooks.inTransition) {\n          self.hooks.inTransition(slug);\n        }\n        TweenLite.set(nextBody, {\n          opacity: 0,\n          y: -10\n        });\n        TweenLite.to(nextBody, 0.6, {\n          opacity: 1,\n          y: 0,\n          ease: Expo.easeOut,\n          // delay: 0.125,\n          onComplete: function () {\n            self.isAnimating = false;\n            if (self.hooks.didTransition) {\n              self.hooks.didTransition(slug);\n            }\n          }\n        });\n      }\n    });\n  },\n\n  updateHistory: function(slug) {\n    history.pushState({}, '', slug);\n  },\n\n  fetchContent: function(url, callback) {\n    var xmlhttp = new XMLHttpRequest();\n\n    xmlhttp.onreadystatechange = function() {\n      if (xmlhttp.readyState == XMLHttpRequest.DONE) {   // XMLHttpRequest.DONE == 4\n        if (xmlhttp.status == 200) {\n          callback(xmlhttp.responseText);\n        }\n        else if (xmlhttp.status == 400) {\n          alert('There was an error 400');\n        }\n      }\n    };\n\n    xmlhttp.open(\"GET\", url, true);\n    xmlhttp.send();\n  }\n}\n"
  },
  {
    "path": "assets/scss/_animations.scss",
    "content": "@keyframes fadeIn {\n  0% { opacity: 0; }\n  100% { opacity: 1; }\n}\n\n@keyframes crossFadeInOut {\n  0%, 40%, 100% { opacity: 0;}\n  50%, 90% { opacity: 1; }\n}\n\n@keyframes fadeInUpSmall {\n  0% {\n    opacity: 0;\n    transform: scale(.667, .667) translateY(20px);\n  }\n\n  100% {\n    opacity: .5;\n    transform: scale(.667, .667) translateY(0);\n  }\n}\n\n@keyframes fadeInUp {\n  0% {\n    opacity: 0;\n    transform: translateY(20px);\n  }\n\n  50% { opacity: 1; }\n\n  100% {\n    opacity: 1;\n    transform: translateY(0);\n  }\n}\n\n@keyframes fadeInDown {\n  0% {\n    opacity: 0;\n    transform: translateY(-20px);\n  }\n\n  50% { opacity: 1; }\n\n  100% {\n    opacity: 1;\n    transform: translateY(0);\n  }\n}\n\n@keyframes fadeOut {\n  0% { opacity: 1; }\n  100% { opacity: 0; }\n}\n\n@keyframes fadeOutUp {\n  0% {\n    opacity: 1;\n    transform: translateY(0);\n  }\n\n  100% {\n    opacity: 0;\n    transform: translateY(-20px);\n  }\n}\n\n@keyframes pulse {\n  0% { transform: scale3d(1, 1, 1); }\n  20% { transform: scale3d(1.05, 1.05, 1); }\n  100% { transform: scale3d(1, 1, 1); }\n}\n\n@keyframes tiltIn {\n  0% { transform: rotateX(-30deg); }\n  100% { transform: rotateX(0deg); }\n}\n\n@keyframes simpleHoverY {\n  0% {transform: translate3d(0, 0, 0);}\n  50% {transform: translate3d(0, 10px, 0);}\n  100% {transform: translate3d(0, 0);}\n}\n\n@keyframes simpleHoverX {\n  0% {transform: translate3d(0, 0, 0);}\n  50% {transform: translate3d(225px, 0, 0);}\n  100% {transform: translate3d(0, 0);}\n}\n\n@keyframes simpleHoverXSmall {\n  0% {transform: translate3d(0, 0, 0);}\n  50% {transform: translate3d(50px, 0, 0);}\n  100% {transform: translate3d(0, 0);}\n}\n\n@keyframes inertiaTilt {\n  0% {transform: rotate(5deg);}\n  15% {transform: rotate(-1deg);}\n  30% {transform: rotate(1deg);}\n  40% {transform: rotate(0deg);}\n  50% {transform: rotate(-5deg);}\n  65% {transform: rotate(1deg);}\n  80% {transform: rotate(-1deg);}\n  90% {transform: rotate(0deg);}\n  100% {transform: rotate(5deg);}\n}\n\n@keyframes hoverY {\n  0% {transform: translate(0, 0) scale(1);}\n  10% {transform: translate(1px, 2px) scale(1);}\n  20% {transform: translate(0, -3px) scale(1);}\n  30% {transform: translate(-1px, 3px) scale(1);}\n  40% {transform: translate(0, -1px) scale(1);}\n  50% {transform: translate(-1px, 0) scale(1);}\n  60% {transform: translate(0, -3px) scale(1);}\n  70% {transform: translate(1px, 2px) scale(1);}\n  80% {transform: translate(0, -3px) scale(1);}\n  90% {transform: translate(-1px, 1px) scale(1);}\n  100% {transform: translate(0, 0) scale(1);}\n}\n\n@keyframes figureeight {\n  0% {transform: translate3d(0, 0, 0);}\n  2% {transform: translate3d(1px, .5px, 0);}\n  5% {transform: translate3d(2px, 1px, 0);}\n  7% {transform: translate3d(3px, 1.5px, 0);}\n  10% {transform: translate3d(4px, 1.8px, 0);}\n  12% {transform: translate3d(5px, 2px, 0);}\n  15% {transform: translate3d(6px, 1.8px, 0);}\n  17% {transform: translate3d(7px, 1.5px, 0);}\n  20% {transform: translate3d(8px, 1px, 0);}\n  22% {transform: translate3d(8.6px, .5px, 0);}\n  25% {transform: translate3d(9px, 0, 0);}\n  27% {transform: translate3d(8.3px, -.5px, 0);}\n  30% {transform: translate3d(8px, -1px, 0);}\n  32% {transform: translate3d(7px, -1.5px, 0);}\n  35% {transform: translate3d(6px, -1.8px, 0);}\n  37% {transform: translate3d(5px, -2px, 0);}\n  40% {transform: translate3d(4px, -1.8px, 0);}\n  42% {transform: translate3d(3px, -1.5px, 0);}\n  45% {transform: translate3d(2px, -1px, 0);}\n  47% {transform: translate3d(1px, -.5px, 0);}\n  50% {transform: translate3d(0, 0, 0);}\n  52% {transform: translate3d(-1px, .5px, 0);}\n  55% {transform: translate3d(-2px, 1px, 0);}\n  57% {transform: translate3d(-3px, 1.5px, 0);}\n  60% {transform: translate3d(-4px, 1.8px, 0);}\n  62% {transform: translate3d(-5px, 2px, 0);}\n  65% {transform: translate3d(-6px, 1.8px, 0);}\n  67% {transform: translate3d(-7px, 1.5px, 0);}\n  70% {transform: translate3d(-8px, 1px, 0);}\n  72% {transform: translate3d(-8.6px, .5px, 0);}\n  75% {transform: translate3d(-9px, 0, 0);}\n  77% {transform: translate3d(-8.3px, -1px, 0);}\n  80% {transform: translate3d(-8px, -2px, 0);}\n  82% {transform: translate3d(-7px, -1.5px, 0);}\n  85% {transform: translate3d(-6px, -1.8px, 0);}\n  87% {transform: translate3d(-5px, -2px, 0);}\n  90% {transform: translate3d(-4px, -1.8px, 0);}\n  92% {transform: translate3d(-3px, -1.5px, 0);}\n  95% {transform: translate3d(-2px, -1px, 0);}\n  97% {transform: translate3d(-1px, -.5px, 0);}\n  100% {transform: translate3d(0, 0, 0);}\n}\n\n@keyframes dotExpand {\n  0% {\n    transform: scale3d(.1, .1, 1);\n    opacity: 1;\n  }\n\n  100% {\n    transform: scale3d(2, 2, 1);\n    opacity: 0;\n  }\n}\n\n@keyframes glow {\n  0%, 30%, 100% { opacity: 0; }\n  15% { opacity: 1; }\n}\n\n@keyframes spread {\n  0% {transform: scaleX(1); opacity: 1;}\n  50% {transform: scaleX(.8); opacity: .5;}\n  100% {transform: scaleX(1); opacity: 1;}\n}\n\n@keyframes spin {\n  0% {transform: rotate(0deg);}\n  100% {transform: rotate(360deg);}\n}\n\n@keyframes floatingCloud {\n  0% {\n    transform: scale3d(.6,.6,1);\n    opacity: 0;\n  }\n  5% {opacity: .9}\n  10% {opacity: 1}\n  95% {opacity: 1}\n  100% {\n    transform: translate3d(150%, 100%, 0);\n    opacity: 0;\n  }\n}\n\n@keyframes floatingCloud-2 {\n  0% {\n    transform: scale3d(.2,.2,1);\n    opacity: 0;\n  }\n  5% {opacity: .9}\n  20% {opacity: 1}\n  95% {opacity: 1}\n  100% {\n    transform: translate3d(110%, 30%, 0) scale3d(.4,.4,1);\n    opacity: 0;\n  }\n}\n\n@keyframes floatingCloud-3 {\n  0% {\n    transform: translate3d(150%, 70%, 0) scale3d(.8,.8,1);\n    opacity: 0;\n  }\n  5% {opacity: 1}\n  20% {opacity: 1}\n  90% {opacity: .9}\n  100% {\n    transform: scale3d(.4,.4,1);\n    opacity: 0;\n  }\n}\n\n@keyframes floatingCloud-4 {\n  0% {\n    transform: scale3d(1.2,1.2,1);\n    transform: translate3d(110%, 150%, 0);\n    opacity: 0;\n  }\n  5% {opacity: 1}\n  90% {opacity: 1}\n  95% {opacity: .9}\n  100% {\n    transform: scale3d(.8,.8,1);\n    opacity: 0;\n  }\n}\n\n@keyframes rainDrop {\n  0% {\n    transform: translate3d(0, 0, 0);\n    opacity: 0;\n  }\n  5% {opacity: .9}\n  10% {opacity: 1}\n  95% {opacity: 1}\n  100% {\n    transform: translate3d(0, 800%, 0);\n    opacity: 0;\n  }\n}\n\n@keyframes screenPop-1 {\n  0% {\n    opacity: 1;\n    z-index: 0;\n  }\n  89% {  opacity: 1; }\n  95% {\n    transform: scale3d(1,1,1);\n    opacity: 0;\n  }\n  96% {  transform: scale3d(1.1, 1.1, 1); }\n  100% {\n    opacity: 1;\n    transform: scale3d(1,1,1);\n  }\n}\n\n\n@keyframes screenPop-2 {\n  0% { opacity: 0; }\n  30% {\n    transform: scale3d(1,1,1);\n    opacity: 0;\n  }\n  31% {  transform: scale3d(1.1, 1.1, 1); }\n  35% {\n    transform: scale3d(1,1,1);\n    opacity: 1;\n  }\n  69% { opacity: 1; }\n  70% { opacity: 0; }\n  100% { opacity: 0; }\n}\n\n@keyframes screenPop-3 {\n  0% { opacity: 0; }\n  63% {\n    transform: scale3d(1,1,1);\n    opacity: 0;\n  }\n  64% {  transform: scale3d(1.1, 1.1, 1); }\n  68% {\n    transform: scale3d(1,1,1);\n    opacity: 1;\n  }\n  96% { opacity: 1; }\n  100% { opacity: 0; }\n}\n\n@keyframes home-app-group-iphone {\n  0% { transform: rotateY(15deg) translate3d(80px, 0, 0); }\n  100% { transform: rotateY(15deg) translate3d(0, 0, 0); }\n}\n\n@keyframes home-app-group-android {\n  0% { transform: rotateY(15deg) translate3d(-74px, 40px, 0); }\n  100% { transform: rotateY(15deg) translate3d(0, 0, 0); }\n}\n\n@keyframes home-app-iphone {\n  0% { transform: translate3d(30px, -10px, 0); }\n  100% { transform: translate3d(0, 0, 0); }\n}\n\n@keyframes home-app-android {\n  0% { transform: translate3d(10px, -4px, 0); }\n  100% { transform: translate3d(0, 0, 0); }\n}\n\n@keyframes carousel {\n  0% {  transform: translateX(0) }\n  100% {  transform: translateX(-50%) }\n}"
  },
  {
    "path": "assets/scss/_fonts.scss",
    "content": "@import url(\"https://fonts.googleapis.com/css?family=Roboto+Mono\");\n\n$fontsDir: \"/fonts/\";\n$graphikDir: $fontsDir + \"graphik/\";\n$interDir: $fontsDir + \"inter/\";\n$interVariableUrl: $fontsDir + \"inter/Inter-variable-ASCII-subset.woff2\";\n\n@font-face {\n  font-family: \"Ionicons\";\n  src: local(\"Ionicons\"), url($fontsDir + \"ionicons.woff2\") format(\"woff2\"),\n    url($fontsDir + \"ionicons.woff\") format(\"woff\"),\n    url($fontsDir + \"ionicons.ttf\") format(\"ttf\"),\n    url($fontsDir + \"ionicons.eot#iefix\") format(\"eot\"),\n    url($fontsDir + \"ionicons.svg#Ionicons\") format(\"svg\");\n  font-weight: normal;\n  font-style: normal;\n}\n@font-face {\n  font-family: \"Inter\";\n  font-display: swap;\n  font-style: normal;\n  font-weight: 400;\n  unicode-range: U+000-5FF;\n  src: local(\"Inter Regular\"), url($interVariableUrl) format(\"woff2-variations\"),\n    url($interDir + \"Inter-Regular.woff2\") format(\"woff2\"),\n    url($interDir + \"Inter-Regular.woff\") format(\"woff\");\n}\n@font-face {\n  font-family: \"Inter\";\n  font-display: swap;\n  font-style: italic;\n  font-weight: 400;\n  unicode-range: U+000-5FF;\n  src: local(\"Inter Italic\"), url($interVariableUrl) format(\"woff2-variations\"),\n    url($interDir + \"Inter-Italic.woff2\") format(\"woff2\"),\n    url($interDir + \"Inter-Italic.woff\") format(\"woff\");\n}\n\n@font-face {\n  font-family: \"Inter\";\n  font-display: swap;\n  font-style: normal;\n  font-weight: 500;\n  unicode-range: U+000-5FF;\n  src: local(\"Inter Medium\"), url($interVariableUrl) format(\"woff2-variations\"),\n    url($interDir + \"Inter-Medium.woff2\") format(\"woff2\"),\n    url($interDir + \"Inter-Medium.woff\") format(\"woff\");\n}\n@font-face {\n  font-family: \"Inter\";\n  font-display: swap;\n  font-style: italic;\n  font-weight: 500;\n  unicode-range: U+000-5FF;\n  src: local(\"Inter Medium Italic\"),\n    url($interVariableUrl) format(\"woff2-variations\"),\n    url($interDir + \"Inter-MediumItalic.woff2\") format(\"woff2\"),\n    url($interDir + \"Inter-MediumItalic.woff\") format(\"woff\");\n}\n\n@font-face {\n  font-family: \"Inter\";\n  font-display: swap;\n  font-style: normal;\n  font-weight: 600;\n  unicode-range: U+000-5FF;\n  src: local(\"Inter SemiBold\"),\n    url($interVariableUrl) format(\"woff2-variations\"),\n    url($interDir + \"Inter-SemiBold.woff2\") format(\"woff2\"),\n    url($interDir + \"Inter-SemiBold.woff\") format(\"woff\");\n}\n@font-face {\n  font-family: \"Inter\";\n  font-display: swap;\n  font-style: italic;\n  font-weight: 600;\n  unicode-range: U+000-5FF;\n  src: local(\"Inter SemiBoldItalic\"),\n    url($interVariableUrl) format(\"woff2-variations\"),\n    url($interDir + \"Inter-SemiBoldItalic.woff2\") format(\"woff2\"),\n    url($interDir + \"Inter-SemiBoldItalic.woff\") format(\"woff\");\n}\n\n@font-face {\n  font-family: \"Inter\";\n  font-display: swap;\n  font-style: normal;\n  font-weight: 700;\n  unicode-range: U+000-5FF;\n  src: local(\"Inter Bold\"), url($interVariableUrl) format(\"woff2-variations\"),\n    url($interDir + \"Inter-Bold.woff2\") format(\"woff2\"),\n    url($interDir + \"Inter-Bold.woff\") format(\"woff\");\n}\n@font-face {\n  font-family: \"Inter\";\n  font-display: swap;\n  font-style: italic;\n  font-weight: 700;\n  unicode-range: U+000-5FF;\n  src: local(\"Inter BoldItalic\"),\n    url($interVariableUrl) format(\"woff2-variations\"),\n    url($interDir + \"Inter-BoldItalic.woff2\") format(\"woff2\"),\n    url($interDir + \"Inter-BoldItalic.woff\") format(\"woff\");\n}\n\n@font-face {\n  font-family: \"Inter\";\n  font-display: swap;\n  font-style: normal;\n  font-weight: 800;\n  unicode-range: U+000-5FF;\n  src: local(\"Inter ExtraBold\"),\n    url($interVariableUrl) format(\"woff2-variations\"),\n    url($interDir + \"Inter-ExtraBold.woff2\") format(\"woff2\"),\n    url($interDir + \"Inter-ExtraBold.woff\") format(\"woff\");\n}\n@font-face {\n  font-family: \"Inter\";\n  font-display: swap;\n  font-style: italic;\n  font-weight: 800;\n  unicode-range: U+000-5FF;\n  src: local(\"Inter ExtraBoldItalic\"),\n    url($interVariableUrl) format(\"woff2-variations\"),\n    url($interDir + \"Inter-ExtraBoldItalic.woff2\") format(\"woff2\"),\n    url($interDir + \"Inter-ExtraBoldItalic.woff\") format(\"woff\");\n}\n\n@font-face {\n  font-family: \"Inter\";\n  font-display: swap;\n  font-style: normal;\n  font-weight: 900;\n  unicode-range: U+000-5FF;\n  src: local(\"Inter Black\"), url($interVariableUrl) format(\"woff2-variations\"),\n    url($interDir + \"Inter-Black.woff2\") format(\"woff2\"),\n    url($interDir + \"Inter-Black.woff\") format(\"woff\");\n}\n@font-face {\n  font-family: \"Inter\";\n  font-display: swap;\n  font-style: italic;\n  font-weight: 900;\n  unicode-range: U+000-5FF;\n  src: local(\"Inter BlackItalic\"),\n    url($interVariableUrl) format(\"woff2-variations\"),\n    url($interDir + \"Inter-BlackItalic.woff2\") format(\"woff2\"),\n    url($interDir + \"Inter-BlackItalic.woff\") format(\"woff\");\n}\n"
  },
  {
    "path": "assets/scss/_general.scss",
    "content": "body {\n  font-family: $font-family-default;\n  position: relative;\n  overflow-x: hidden;\n  -moz-osx-font-smoothing: grayscale;\n  -webkit-font-smoothing: antialiased;\n  text-rendering: optimizeLegibility;\n  font-feature-settings: 'calt' on;\n\n  @media (max-width: $screen-xs-max) {\n    padding-top: 50px;\n    width: 100%;\n    min-width: 100%;\n    background: #fff;\n  }\n\n  .docs {\n    background: linear-gradient(90deg, $whiteish, $whiteish ($sidenav-width),\n      white ($sidenav-width), white 100%);\n  }\n\n  @media (max-width: $screen-sm-min) {\n    &#page-pricing-table {\n      padding-top: 0px;\n    }\n  }\n\n  &.no-scroll {\n    overflow: hidden;\n  }\n}\n\nmain {\n  overflow: hidden;\n}\n\n#components-index ul.nav > li > a {\n  background-color: #F9FAFB;\n}\n\n.arrow {\n  letter-spacing: 0;\n  white-space: pre;\n}\n\n.improve-docs {\n  position: absolute;\n  right: 3.5em;\n  top: 20px;\n}\n\n.improve-v2-docs {\n  display: block;\n  float: right;\n  margin-top: -7em;\n}\n\n.component-doc-demo {\n  display: block;\n  float: right;\n  margin-top: -3.1em;\n  line-height: 25px;\n\n\n  .component-doc-demo-mobile {\n    margin-right: 6px;\n  }\n}\n\n.component-doc-demo-mobile {\n  cursor: pointer;\n  padding: 3px 12px;\n  border-radius: 4px;\n  font-size: 15px;\n  font-weight: 500;\n  color: white;\n  background-color: $blue;\n  display: none;\n  line-height: inherit;\n}\n\n.docs-container {\n  .side-nav {\n    width: $sidenav-width;\n    // padding-top: 73px;\n  }\n\n  > main {\n    margin-left: $sidenav-width;\n  }\n\n  > aside {\n    width: $platform-preview-width;\n\n    + main {\n      margin-right: $platform-preview-width - 60px;\n      min-height: 777px;\n    }\n  }\n\n  @media (max-width: 1100px) {\n    aside {\n      display: none;\n\n      & + main {\n        margin-right: 0;\n      }\n    }\n\n    .component-doc-demo-mobile {\n      display: inline-block;\n    }\n  }\n\n  @media (max-width: $screen-xs-max) {\n    background-color: #fff;\n\n    main {\n      margin-left: 0;\n      padding: 30px 20px 100px;\n    }\n\n    #side-nav {\n      z-index: 1;\n      top: -4px;\n      transform: translateX(-$sidenav-width);\n      transition: transform .3s ease;\n\n      &.shown {\n        transform: translateX(0);\n        box-shadow: 0 0 15px rgba(0, 0, 0, 0.5);\n        transition: transform .3s ease;\n      }\n    }\n  }\n}\n\n// sticky footer\nhtml {\n  position: relative;\n  height: 100%;\n}\n\nbody {\n  min-height: 100%;\n  margin: 0 0 -130px; // bottom = footer height\n\n  @media (max-width: $screen-xs-max) {\n    // margin-top: 50px;\n  }\n}\n\na {\n  color: $blue;\n  transition: .3s color;\n}\n\n.footer-links {\n  position: absolute;\n  left: $sidenav-width + 40px;\n  bottom: 0;\n  height: 130px;\n  right: 40px;\n  @media (max-width: $screen-xs-max) {\n    left: 40px;\n  }\n}\n\na.footer-link {\n  color: black;\n  font-size: 18px;\n  text-decoration: none;\n  font-weight: 500;\n  position: absolute;\n  padding-top: 10px;\n  right: 40px;\n  text-align: right;\n  transition: color .2s;\n\n  &.prev {\n    right: auto;\n    left: 40px;\n    text-align: left;\n\n    @media (max-width: 500px) {\n      display: none;\n    }\n\n    &::before {\n      content: 'Previous';\n    }\n\n    &::after {\n      right: auto;\n      left: -25px;\n      content: '\\f117';\n    }\n  }\n\n  &:hover {\n    color: $blue;\n  }\n\n  &::before {\n    display: block;\n    content: 'Next';\n    font-size: 13px;\n    color: $grey;\n    font-weight: 400;\n  }\n\n  &::after {\n    content: '\\f119';\n    font-family: Ionicons;\n    display: block;\n    position: absolute;\n    right: -25px;\n    font-size: 32px;\n    font-weight: 600;\n    bottom: -10px;\n  }\n}\n\n.platform-preview {\n  position: absolute;\n  right: 0;\n  text-align: center;\n  right: -20px;\n  z-index: 1;\n  background-color: white;\n\n  &.fixey {\n    position: fixed;\n    top: 0;\n  }\n\n  > a {\n    position: relative;\n    top: -25px;\n    font-size: 15px;\n\n    &, &:hover, &:active, &:focus {\n      text-decoration: none;\n    }\n  }\n}\n\n.platform-preview .platform-toggle, .docs-container .sass-platform-toggle {\n\n  a {\n    cursor: pointer;\n    display: inline-block;\n    padding: 4px 16px;\n    border-radius: 16px;\n    color: $grey;\n    font-size: 14px;\n    font-weight: 500;\n    -webkit-font-smoothing: antialiased;\n    transition: .2s color, .2s background-color;\n\n    &.active,\n    &.active:hover {\n      background-color: $blue;\n      color: white;\n    }\n\n    &:hover {\n      color: $blue;\n      text-decoration: none;\n    }\n  }\n}\n\n.platform-preview  .platform-toggle {\n  padding: 8px 10px 4px;\n}\n\n.docs-container .sass-platform-toggle {\n  padding-top: 0px 10px 4px;\n  margin-bottom: 10px;\n  float: right;\n}\n\n#sass-variable-header {\n  margin-bottom: 0px;\n  padding-bottom: 0px;\n}\n\n#sass-variables {\n  margin-bottom: 0px;\n  position: relative;\n  bottom: 15px;\n\n  .table.param-table {\n    td,\n    th {\n      white-space: nowrap;\n\n      &:last-child, &:nth-last-child(2) {\n        white-space: normal;\n      }\n\n      &:nth-last-child(2) {\n        width: 10%;\n      }\n    }\n  }\n}\n\n@media (max-width: 1300px) and (min-width: $screen-xs) {\n  #sass-variables {\n    bottom: -10px;\n\n    .table.param-table {\n      td,\n      th {\n        white-space: normal;\n\n        &:nth-last-child(2) {\n          width: auto;\n        }\n      }\n    }\n  }\n}\n\n@media (max-width: $screen-xs) {\n  #sass-variables {\n    bottom: -25px;\n\n    .table.param-table {\n      tr,td {\n        white-space: normal;\n      }\n    }\n  }\n}\n\n#demo-device-ios {\n  width: $platform-preview-width;\n  height: 800px;\n  background: center top no-repeat url('/img/devices-sprite.jpg');\n  background-size: $platform-preview-width;\n  margin: 0 auto;\n\n  iframe {\n    margin-top: 85px;\n    width: 320px;\n    height: 568px;\n  }\n}\n\n#demo-device-android {\n  @extend #demo-device-ios;\n\n  background-position: center center;\n\n  iframe {\n    margin-top: 64px;\n    width: 360px;\n    height: 590px;\n  }\n}\n\n#demo-device-windows {\n  @extend #demo-device-ios;\n\n  background-position: center bottom;\n\n  iframe {\n    margin-top: 72px;\n    width: 350px;\n    height: 622px;\n    background: white;\n  }\n}\n\nli.nav-item-hidden {\n  position: absolute;\n  top: -9999px;\n  left: -9999px;\n}\n\nul.docs-content {\n  list-style: none;\n  line-height: 26px;\n  padding-left: 16px;\n\n  li.docs-content-header {\n    font-weight: 400;\n    color: #B9BEC5;\n  }\n\n}\n\nul.docs-example {\n  list-style: none;\n  display: block;\n  margin: 3em 0;\n  padding: 0;\n  border-radius: 4px;\n\n  li {\n    display: inline-block;\n    border: 1px solid #e6e9ee;\n    width: 32%;\n    margin: 0;\n    padding: 8% 0;\n\n    @media screen and (max-width: $screen-xs-max) {\n      display: block;\n      width: 100%;\n      margin-bottom: 1em;\n    }\n\n    &:not(:first-child) {\n      margin-left: 1%;\n    }\n  }\n\n  li img {\n    display: block;\n    margin: 0 auto;\n    width: 55.7%;\n  }\n}\n\n.highlight .err {\n  background-color: #fff;\n}\n\n.param-table {\n  td p {\n    margin: 0;\n    line-height: 22px;\n  }\n\n  td ul {\n    list-style: none;\n    margin-right: -7px;\n    margin-left: -92px;\n    border: 1px solid #e6e9ee;\n    border-left: 0;\n    border-top: 0;\n    padding: 10px 17px;\n    border-bottom-right-radius: 0.5em;\n\n    li {\n      padding: 0;\n      margin: 17px 0;\n    }\n  }\n}\n\n.return-value {\n  b {\n    &::before {\n      font-family: 'Ionicons';\n      -webkit-font-smoothing: antialiased;\n      content: '\\f203';\n      font-size: 16px;\n      font-weight: 800;\n      position: relative;\n      padding-right: 5px;\n      top: 2px;\n    }\n  }\n}\n\n.docs-container {\n  h2, h3 {\n    a:not([role='button']) {\n      color: #26292e !important;\n\n      &:hover {\n        color: #26292e !important;\n      }\n    }\n  }\n}\n\n.hero {\n  position: relative;\n}\n\n.faq-section {\n  margin: 80px auto;\n}\n\n@media (max-width: $screen-sm-max) and (min-width: $screen-sm-min){\n  .hide-sm {\n    display: none !important;\n  }\n}\n\n.native-docs a{\n  margin-top: 0 !important;\n}\n\n[ng\\:cloak], [ng-cloak], [data-ng-cloak], [x-ng-cloak], .ng-cloak, .x-ng-cloak {\n  display: none !important;\n}\n\n#hubspot-messages-iframe-container { z-index: 1 } //so hubspot messages button doesn't cover mpobile nav, modals, etc.\n"
  },
  {
    "path": "assets/scss/_hljs.scss",
    "content": "pre {\n  background-color: white;\n}\n\n.hljs {\n  display: block;\n  padding: 0.5em;\n  background: #ffffff;\n  overflow-x: auto;\n  word-wrap: normal;\n  white-space: pre;\n  color: #314361;\n}\n\n\n// Done\n\n.hljs-comment,\n.hljs-template_comment,\n.hljs-javadoc,\n.hljs-comment * {\n  color: #999988;\n  font-style: italic;\n}\n\n\n// Done\n\n.hljs-keyword,\n.method,\n.hljs-list .hljs-title,\n.clojure .hljs-built_in,\n.nginx .hljs-title,\n.hljs-tag .hljs-title,\n.setting .hljs-value,\n.hljs-winutils,\n.tex .hljs-command,\n.http .hljs-title,\n.hljs-request,\n.hljs-status {\n  color: #4a86ef;\n  font-weight: bold;\n}\n\n.hljs-envvar,\n.tex .hljs-special {\n  color: #660;\n}\n\n\n// Done\n\n.hljs-string,\n.hljs-tag .hljs-value,\n.hljs-cdata,\n.hljs-filter .hljs-argument,\n.hljs-attr_selector,\n.apache .hljs-cbracket,\n.hljs-date,\n.hljs-regexp,\n.coffeescript .hljs-attribute {\n  color: #f2576d;\n}\n\n.hljs-sub .hljs-identifier,\n.hljs-pi,\n.hljs-tag,\n.hljs-tag .hljs-keyword,\n.hljs-decorator,\n.ini .hljs-title,\n.hljs-shebang,\n.hljs-prompt,\n.hljs-hexcolor,\n.hljs-rules .hljs-value,\n.css .hljs-value .hljs-number,\n.hljs-literal,\n.hljs-symbol,\n.ruby .hljs-symbol .hljs-string,\n.hljs-number,\n.css .hljs-function,\n.clojure .hljs-attribute {\n  color: #00b07d;\n}\n\n.hljs-class .hljs-title,\n.haskell .hljs-type,\n.smalltalk .hljs-class,\n.hljs-javadoctag,\n.hljs-yardoctag,\n.hljs-phpdoc,\n.hljs-typename,\n.hljs-tag .hljs-attribute,\n.hljs-doctype,\n.hljs-class .hljs-id,\n.hljs-built_in,\n.setting,\n.hljs-params,\n.hljs-variable,\n.clojure .hljs-title {\n  color: #3dafd4;\n}\n\n.css .hljs-tag,\n.hljs-rules .hljs-property,\n.hljs-pseudo,\n.hljs-subst {\n  color: #000;\n}\n\n.css .hljs-class,\n.css .hljs-id {\n  color: #9B703F;\n}\n\n.hljs-value .hljs-important {\n  color: #ff7700;\n  font-weight: bold;\n}\n\n.hljs-rules .hljs-keyword {\n  color: #C5AF75;\n}\n\n.hljs-annotation,\n.apache .hljs-sqbracket,\n.nginx .hljs-built_in {\n  color: #9B859D;\n}\n\n.hljs-preprocessor,\n.hljs-preprocessor *,\n.hljs-pragma {\n  color: #444;\n}\n\n.tex .hljs-formula {\n  background-color: #EEE;\n  font-style: italic;\n}\n\n.diff .hljs-header,\n.hljs-chunk {\n  color: #808080;\n  font-weight: bold;\n}\n\n.diff .hljs-change {\n  background-color: #BCCFF9;\n}\n\n.hljs-addition {\n  background-color: #BAEEBA;\n}\n\n.hljs-deletion {\n  background-color: #FFC8BD;\n}\n\n.hljs-comment .hljs-yardoctag {\n  font-weight: bold;\n}\n"
  },
  {
    "path": "assets/scss/_mixins.scss",
    "content": "// mixins\n@mixin box {\n  background-color: #fff;\n  border-radius: 6px;\n  box-shadow: 0 8px 32px rgba(0,0,0,0.1),\n              0 2px 8px  rgba(0,0,0,0.1);\n}\n\n@mixin flex-list {\n  display: flex;\n  justify-content: flex-start;\n  flex-wrap: wrap;\n  padding-left: 0;\n\n  li {\n    margin-right: 1em;\n    list-style: none;\n  }\n}\n\n@mixin sprite($items, $height: 64, $selector: '::before') {\n  @each $icon in $items {\n    $i: index($items, $icon);\n\n    &.#{$icon}#{$selector} {\n      background-position: 0 #{($height * ($i - 1) * -1)}px;\n    }\n  }\n}\n\n@mixin hoverSprite(\n  $items, $height: 64, $selector1: '::before', $selector2: '::after'\n) {\n  &#{$selector1}, \n  &#{$selector2} {\n    transition: .2s opacity;\n  }\n\n  &#{$selector2} {\n    opacity: 0;\n  }\n\n  &:hover {\n    &#{$selector1} {\n      // opacity: 0;\n    }\n\n    &#{$selector2} {\n      opacity: 1;\n    }\n  }\n\n  @each $icon in $items {\n    $i: index($items, $icon);\n\n    &.#{$icon}#{$selector1} {\n      background-position: 0 #{($height * ($i - 1) * -2)}px;\n    }\n\n    &.#{$icon}#{$selector2} {\n      background-position: 0 #{($height * ($i - 1) * -2) - $height}px;\n    }\n  }\n}"
  },
  {
    "path": "assets/scss/_theme.scss",
    "content": ":root {\n  --c-white: #ffffff;\n  --c-black: #000000;\n\n  --c-blue-0: #F0F6FF;\n  --c-blue-100: #E3EDFF;\n  --c-blue-200: #CDDFFF;\n  --c-blue-300: #B2CEFF;\n  --c-blue-400: #97BDFF;\n  --c-blue-500: #7CABFF;\n  --c-blue-600: #639CFF;\n  --c-blue-700: #4D8DFF;\n  --c-blue-800: #3880FF;\n\n  --c-grey-100: #F9F9F9;\n  --c-grey-200: #F3F3F3;\n  --c-grey-300: #EBEBEB;\n  --c-grey-400: #E1E1E1;\n  --c-grey-500: #D8D8D8;\n  --c-grey-600: #C5C5C5;\n  --c-grey-700: #AEAEAE;\n  --c-grey-800: #8C8C8C;\n  --c-grey-900: #727272;\n  --c-grey-1000: #555555;\n  --c-grey-1100: #444444;\n  --c-grey-1200: #222222;\n\n  --c-carbon-100: #778391;\n  --c-carbon-200: #616E7E;\n  --c-carbon-300: #4E5B6A;\n  --c-carbon-400: #414D5C;\n  --c-carbon-500: #2F3A48;\n  --c-carbon-600: #27323F;\n  --c-carbon-700: #1A232F;\n  --c-carbon-800: #0E151F;\n  --c-carbon-900: #020814;\n\n  --c-indigo-50: #FBFBFD;\n  --c-indigo-400: #CED6E0;\n\n  --c-purple-0: #F4F4FF;\n  --c-purple-100: #E9EAFF;\n  --c-purple-200: #D0D2FF;\n  --c-purple-300: #B6B9F9;\n  --c-purple-400: #9A99FC;\n  --c-purple-500: #8582FB;\n  --c-purple-600: #786DF9;\n  --c-purple-700: #6E5BFD;\n  --c-purple-800: #6030FF;\n\n  --c-pink-0: #FFF1FB;\n  --c-pink-200: #FFE7F8;\n  --c-pink-400: #FBC4DB;\n  --c-pink-600: #F37BAB;\n  --c-pink-800: #E54385;\n\n  --c-red-0: #FFE3E3;\n  --c-red-200: #FFCDCD;\n  --c-red-400: #F88D8D;\n  --c-red-600: #F45454;\n  --c-red-800: #E13535;\n}"
  },
  {
    "path": "assets/scss/_typography.scss",
    "content": "h1 {\n  font-weight: 800;\n  letter-spacing: -0.04em;\n}\n\nh2,\nh3,\nh4,\nh5,\nh6 {\n  letter-spacing: -0.02em;\n  font-weight: 700;\n}\n\na {\n  transition: color 0.2s;\n\n  &:hover {\n    text-decoration: none;\n  }\n}\n\np {\n  &.lg {\n    font-size: 18px;\n    font-weight: 400;\n    color: $darkish-grey;\n\n    &.strong {\n      font-weight: 500;\n    }\n\n    &.light {\n      color: $darkish-grey;\n    }\n  }\n\n  &.sm {\n    font-size: 13px;\n  }\n\n  &.xs {\n    font-size: 11px;\n  }\n}\n\n.subheading {\n  color: #888;\n  font-size: 15px;\n}\n"
  },
  {
    "path": "assets/scss/_vars.scss",
    "content": "$font-family-inter: \"Inter\", \"Inter UI\", Helvetica, Arial, sans-serif;\n$font-family-system: apple-system, BlinkMacSystemFont, Roboto, Helvetica, Arial,\n  sans-serif;\n\n$font-family-monospace: \"SF Mono\", \"Roboto Mono\", Menlo, monospace;\n$font-family-serif: \"Adobe Caslon\", Georgia, Times, \"Times New Roman\", serif;\n\n$font-family-default: $font-family-inter;\n\n$blue: #4a8bfc;\n$blue-800: #4d8dff;\n$light-blue: #529eff;\n$green: #00ceab;\n$orange: #fcb52c;\n$purple: #7580f4;\n$red: #f8556c;\n$navy: #104784;\n\n$whiteish: #f9fafb;\n$lighter-grey: #ebeef2;\n$light-grey: #e6e9ee;\n$lightish-grey: #a0a5b0;\n$grey: #9da5b3;\n$darkish-grey: #898989;\n$dark-grey: #576070;\n$blackish: #4c555a;\n$blacker: #24282e;\n\n$sidenav-width: 230px;\n$platform-preview-width: 467px;\n\n// bootstrap overrides\n$navbar-default-bg: $blue;\n$navbar-default-border: $blue;\n$navbar-default-brand-color: rgba(white, 0.8);\n$navbar-default-link-color: rgba(white, 0.8);\n$navbar-default-brand-hover-color: #fff;\n$navbar-default-link-hover-color: #fff;\n$navbar-default-link-active-color: #fff;\n$navbar-default-link-active-bg: transparent;\n\n$grid-gutter-width: 30px;\n$screen-lg: 1104px;\n$container-large-desktop: (1024px + $grid-gutter-width);\n\n// $navbar-default-brand-hover-bg;\n// $navbar-default-link-hover-bg;\n// $navbar-default-link-disabled-color;\n// $navbar-default-link-disabled-bg;\n// $navbar-default-toggle-border-color;\n// $navbar-default-toggle-hover-bg;\n// $navbar-default-toggle-icon-bar-bg;\n\n// bootstrap variables and mixins\n@import \"bootstrap-sass/assets/stylesheets/bootstrap/variables\";\n@import \"bootstrap-sass/assets/stylesheets/bootstrap/mixins\";\n"
  },
  {
    "path": "assets/scss/components/_alert.scss",
    "content": ".alert,\n.docs-container main .alert {\n  border-radius: 4px;\n  display: inline-block;\n  padding: 20px 28px;\n  position: relative;\n  width: 100%;\n  font-weight: 400;\n  margin: 0 0 20px;\n  background: rgba(253,200,69,.1);\n  border: 1px solid rgba(253,200,69,.3);\n  color: #353940;\n  font-size: 14px;\n\n  /*\n  &::before {\n    content: '\\f137';\n    font-family: 'Ionicons';\n    position: absolute;\n    left: 25px;\n    font-size: 30px;\n    font-weight: 300;\n    color: rgba(255,255,255,.9);\n  }\n  */\n\n  a,\n  a:not(.btn) {\n    color: rgba(255,255,255, 1);\n    opacity: 1;\n\n    &:hover {\n      color: #fff;\n    }\n  }\n\n  &-success {\n    background-color: rgba($green, 0.1);\n    border-color: rgba($green, 0.3);\n  }\n}\n"
  },
  {
    "path": "assets/scss/components/_banner.scss",
    "content": ".banner {\n  text-align: center;\n\n  &--hero {\n    .container {\n      max-width: 700px;\n    }\n\n    h1 {\n      margin-top: 2em;\n      font-size: 36px;\n      margin-bottom: 1.4em;\n    }\n\n    p {\n      font-size: 16px;\n      line-height: 1.8em;\n    }\n  }\n}\n"
  },
  {
    "path": "assets/scss/components/_bar-chart.scss",
    "content": "bar-chart,\n.survey-layout main svg {\n  width: 100%;\n  display: block;\n  margin-bottom: 48px;\n\n  > svg {\n    width: 100%;\n  }\n\n  .tick {\n    line {\n      opacity: 0;\n    }\n\n    tspan {\n      font-size: 12px;\n      font-weight: 500;\n      -webkit-font-smoothing: subpixel-antialiased;\n    }\n  }\n\n  .c3-text {\n    font-size: 11px;\n    font-weight: 500;\n    -webkit-font-smoothing: subpixel-antialiased;\n  }\n\n  .domain {\n    opacity: 0;\n  } \n\n  .c3-grid line {\n    stroke: #eee;\n    stroke-dasharray: 0;\n  }\n\n  .c3-bar._expanded_ {\n    fill-opacity: 1;\n  }\n}\n\n"
  },
  {
    "path": "assets/scss/components/_bar.scss",
    "content": ".bar {\n  &.navy {\n    background: linear-gradient(to right, #1d2534 0%,#243452 100%);\n\n    h1,\n    h2,\n    h3,\n    h4,\n    h5 {\n      color: white;\n    }\n\n    p {\n      color: #a2b5d6;\n    }\n  }\n\n  h1,\n  h2,\n  h3,\n  h4,\n  h5 {\n    font-weight: 600;\n  }\n\n  p {\n    margin-bottom: 27px;\n  }\n\n  .btn {\n    padding: 20px 21px 15px;\n  }\n\n  .hero {\n    padding: 95px 0 101px;\n  }\n}\n"
  },
  {
    "path": "assets/scss/components/_buttons.scss",
    "content": ".btn,\n.navbar .btn {\n  font-weight: 500;\n  border-radius: 4px;\n  line-height: 1.4em;\n  padding: 14px 33px 14px;\n  margin-right: 10px;\n  transition: all 0.3s ease;\n  font-size: 18px;\n  border: 0px solid rgba(0, 0, 0, 0);\n  color: #fff;\n  box-shadow: 0 1px 3px rgba(0, 0, 0, 0.08), 0 2px 4px rgba(0, 0, 0, 0.12);\n  background: #3880ff;\n  letter-spacing: -0.01em;\n\n  &:last-child {\n    margin-right: 0;\n  }\n\n  &:hover,\n  &:focus {\n    box-shadow: 0 7px 14px rgba(0, 0, 0, 0.12), 0 3px 6px rgba(0, 0, 0, 0.08);\n    background: #4d8dfd;\n    color: #fff;\n    outline: none;\n  }\n\n  &:active,\n  &:active:focus,\n  &:active:hover {\n    box-shadow: inset 0 1px 4px rgba(0, 0, 0, 0.2);\n    background: lighten($blue, 3);\n    outline: none;\n  }\n\n  &.outline {\n    border-color: $blue;\n    background: transparent;\n    color: $blue;\n    border-width: 1px;\n\n    &:hover,\n    &:focus {\n      border-color: lighten($blue, 3);\n      background: rgba($blue, 0.05);\n    }\n\n    &.faded {\n      border: 1px solid rgba(54, 74, 110, 0.5);\n      color: #a1abbc;\n\n      &:hover,\n      &:focus {\n        color: white;\n        border-color: lighten(#a1abbc, 3);\n        background: rgba(#a1abbc, 0.05);\n      }\n    }\n  }\n\n  &.btn-primary,\n  &.light-blue {\n    background: $light-blue;\n\n    &:hover,\n    &:focus,\n    &:active {\n      background: lighten($light-blue, 3);\n    }\n\n    &.outline {\n      border-color: $light-blue;\n      color: $light-blue;\n    }\n  }\n\n  &.red {\n    background: $red;\n\n    &:hover,\n    &:focus,\n    &:active {\n      background: #ff6177;\n    }\n  }\n\n  &.light {\n    background: #eef6fe;\n    color: $blue;\n\n    &:hover,\n    &:focus,\n    &:active {\n      background: darken(#eef6fe, 2);\n    }\n  }\n\n  &.navy {\n    background: #0039a2;\n\n    &:hover,\n    &:focus,\n    &:active {\n      background: darken(#0039a2, 10);\n    }\n  }\n\n  &.green {\n    background: $green;\n\n    &:hover,\n    &:focus,\n    &:active,\n    &:active:focus,\n    &:active:hover {\n      background: lighten($green, 5);\n    }\n  }\n\n  &.white {\n    background: white;\n    // box-shadow: 0 1px 4px rgba(0, 0, 0, .1);\n    color: $blue;\n\n    &:hover,\n    &:focus,\n    &:active {\n      color: $blue;\n      // box-shadow: 0 1px 4px rgba(0, 0, 0, 0.15);\n      color: lighten($blue, 5);\n    }\n\n    &:active,\n    &:active:focus,\n    &:active:hover {\n      background: white;\n      // box-shadow: inset 0 1px 4px rgba(0, 0, 0, .2);\n    }\n\n    &.outline {\n      color: $blue;\n      background: white;\n\n      &:hover,\n      &:focus,\n      &:active {\n        color: darken($blue, 10);\n        background: white;\n      }\n    }\n  }\n\n  &.grey {\n    background: $grey;\n\n    &:hover,\n    &:focus,\n    &:active {\n      background: $grey;\n    }\n\n    &.outline {\n      color: $grey;\n      background: transparent;\n\n      &:hover,\n      &:focus,\n      &:active,\n      &:active:focus,\n      &:active:hover {\n        color: darken($grey, 10);\n        background: transparent;\n      }\n    }\n  }\n\n  &.light-purple {\n    background: rgba(207, 212, 254, 0.35);\n    color: #7283ff;\n    box-shadow: none;\n\n    &:hover,\n    &:focus,\n    &:active {\n      background: rgba(207, 212, 254, 0.35);\n    }\n\n    &.outline {\n      color: rgba(207, 212, 254, 0.35);\n      background: transparent;\n\n      &:hover,\n      &:focus,\n      &:active,\n      &:active:focus,\n      &:active:hover {\n        color: rgba(darken(#cfd4fe, 10), 0.35);\n        background: transparent;\n      }\n    }\n  }\n\n  &.dark {\n    color: white;\n  }\n\n  &.dark-pink {\n    background: #212f45;\n    // box-shadow: 0 1px 4px rgba(0, 0, 0, .1);\n    color: #ff567b;\n\n    &:hover,\n    &:focus,\n    &:active,\n    &:active:focus,\n    &:active:hover {\n      color: #ff567b;\n      background: lighten(#212f45, 5);\n    }\n  }\n\n  &.orange {\n    background-color: #ffa800;\n\n    &:hover {\n      background-color: #feb323;\n    }\n  }\n\n  &.sm {\n    font-weight: 600;\n    border-radius: 6px;\n    letter-spacing: 0;\n    text-transform: none;\n    padding: 12px 19px 10px;\n  }\n\n  &.rounded {\n    border-radius: 2.5em;\n    letter-spacing: 0;\n    text-transform: none;\n    font-weight: 500;\n    font-size: 16px;\n    padding: 19px 25px 18px;\n    line-height: 1em;\n\n    &.sm {\n      padding: 14px 24px 14px;\n      font-size: 14px;\n      font-weight: 600;\n    }\n  }\n\n  &.uppercase {\n    text-transform: uppercase;\n    letter-spacing: 0.06em;\n  }\n\n  &.micro {\n    font-family: $font-family-inter;\n    padding: 4px 8px;\n    font-size: 10px;\n    letter-spacing: 0;\n    font-weight: 700;\n    text-transform: uppercase;\n    background: #fff;\n    border: 1px solid rgba(#3880ff, 0.3);\n    color: #3880ff;\n    box-shadow: none;\n\n    &:hover {\n      border-color: #3880ff;\n    }\n\n    &:active,\n    &:active:focus,\n    &:active:hover {\n      background: #f2f8ff;\n      border-color: lighten(#3880ff, 15%);\n      box-shadow: inset 0 1px 4px rgba(0, 0, 0, 0.1);\n    }\n  }\n}\n"
  },
  {
    "path": "assets/scss/components/_checkmark-list.scss",
    "content": ".checkmark-list {\n  &--large {\n    max-width: 380px;\n\n    li {\n      line-height: 26px;\n      font-size: 16px;\n      letter-spacing: -0.01em;\n      color: #616E7E;\n      display: flex;\n    }\n\n    li + li {\n      margin-top: 20px;\n    }\n\n    i {\n      margin-right: 6px;\n      position: relative;\n      width: 24px;\n      height: 24px;\n      flex: 0 0 24px;\n      display: flex;\n      align-items: center;\n      justify-content: center;\n      border-radius: 100%;\n      background-color: #73849A;;\n      z-index: -1;\n      margin-right: 16px;\n      transform: translateY(2px);\n    }\n\n    ion-icon {\n      font-size: 16px;\n      color: #fff;\n    }\n\n    hgroup {\n      h5 {\n        margin-top: -2px;\n        margin-bottom: 0;\n        line-height: 33px;\n        font-size: 16px;\n        letter-spacing: -0.01em;\n        color: #3C536F;\n        font-weight: 600;\n      }\n      p {\n        line-height: 23px;\n        font-size: 14px;\n        letter-spacing: -0.01em;\n        color: #92A1B3;\n      }\n    }\n  }\n\n  &--small {\n    margin: 0;\n    padding: 0;\n\n    li {\n      line-height: 13px;\n      font-size: 12px;\n      color: #5B708B;\n      display: flex;\n    }\n\n    ion-icon {\n      font-size: 15px;\n      color: #92A1B3;\n      flex: 0 0 15px;\n      margin-right: 6px;\n      transform: translateY(4px);\n    }\n  }\n}\n"
  },
  {
    "path": "assets/scss/components/_cta.scss",
    "content": ".transparent .cta {\n  margin-top: -78px;\n  padding-top: 78px;\n}\n\n.cta {\n  color: white;\n  background: $blue;\n\n  &.gradient {\n    background: linear-gradient(45deg, rgba(52,126,255,1) 0%,\n                                       rgba(41,144,255,1) 50%,\n                                       rgba(34,133,255,1) 50%,\n                                       rgba(30,161,255,1) 100%);\n  }\n\n  &.cta--transparent {\n    background: transparent;\n    color: #020814;\n\n    hgroup p {\n      color: rgba(#27323F, .9);\n    }\n  }\n\n  .center {\n    text-align: center;\n  }\n\n  hgroup {\n    padding-top: 33px;\n    padding-bottom: 94px;\n    max-width: 800px;\n    min-height: 218px;\n\n    h1 {\n      font-size: 28px;\n      margin-bottom: 12px;\n      letter-spacing: -.03em;\n    }\n\n    h4 {\n      font-size: 20px;\n      color: rgba(255, 255, 255, .8);\n      letter-spacing: -.03em;\n      line-height: 1.6em;\n      margin-top: -5px;\n    }\n\n    p {\n      color: rgba(white, .7);\n      font-size: 18px;\n      font-weight: 400;\n    }\n\n    a {\n      color: rgba(white, .9);\n\n      &:hover {\n        color: white;\n        text-decoration: none;\n      }\n    }\n\n    small {\n      a {\n        font-weight: 600;\n      }\n    }\n  }\n\n  .tabs {\n    background: #f6f7fa;\n\n    .container {\n      flex-wrap: wrap;\n      justify-content: center;\n      list-style: none;\n      margin-bottom: 0;\n      text-align: center;\n    }\n\n    li {\n      max-width: 360px;\n      margin-left: 43px;\n      text-align: left;\n      display: inline-block;\n\n      &:first-child {\n        margin-left: 0;\n      }\n\n\n      @media (max-width: 991px) {\n        margin-left: 0;\n        display: block;\n        margin: 0 auto;\n\n        &:first-child {\n          margin-left: auto;\n        }\n      }\n    }\n\n    h3 {\n      font-size: 16px;\n      color: #272a2f;\n      margin-bottom: 5px;\n      margin-top: 0;\n      position: relative;\n    }\n\n    p {\n      font-size: 14px;\n      color: #727a87;\n      position: relative;\n      margin-bottom: 0;\n    }\n\n    a {\n      position: relative;\n      display: block;\n      padding: 32px 0 28px 85px;\n      z-index: 1;\n      cursor: pointer;\n      user-select: none;\n\n      &::before {\n        position: absolute;\n        content: '';\n        top: 0;\n        right: 0;\n        bottom: 0;\n        left: 0;\n        transition: .3s box-shadow, .3s transform, .3s background, .3s border-radius;\n      }\n\n      &:hover,\n      &:active,\n      &:focus {\n        text-decoration: none;\n\n        &::before {\n          background: white;\n          border-radius: 4px;\n          box-shadow: 0 0 4px rgba(0, 0, 0, .05), 0 6px 10px rgba(0, 0, 0, .08);\n          transform: scale(1.1, 1.1);\n        }\n\n        &::after {\n          opacity: 1;\n        }\n      }\n\n      &.active {\n        &::before {\n          background: white;\n          border-radius: 4px;\n          box-shadow: 0 0 4px rgba(0, 0, 0, .05), 0 6px 10px rgba(0, 0, 0, .08);\n          transform: scale(1.2, 1.2);\n        }\n\n        &::after {\n          opacity: 1;\n        }\n      }\n\n      &::after {\n        background: url('/img/getting-started/getting-started-toggle-icons.png') no-repeat 0 0;\n        background-size: 70px;\n        width: 70px;\n        height: 70px;\n        content: '';\n        left: 5px;\n        top: 20px;\n        display: block;\n        position: absolute;\n        opacity: .7;\n        transition: .3s opacity;\n      }\n\n      &.creator::after {\n        background-position: 0 -140px;\n      }\n    }\n  }\n\n  .alert {\n    color: #ffeed6;\n    font-size: 14px;\n    font-weight: 500;\n    border-radius: 0;\n    margin-bottom: 0;\n    text-align: center;\n    padding-top: 10px;\n    padding-bottom: 10px;\n\n    &::before {\n      position: relative;\n      font-size: 20px;\n      line-height: 14px;\n      left: 0;\n      top: 2px;\n      margin-right: 5px;\n      content: \"\\f17e\";\n    }\n\n    a {\n      color: #ffffff;\n      font-weight: 600;\n\n      &:hover {\n        text-decoration: none;\n        color: rgba(white, .8);\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "assets/scss/components/_customer-callout.scss",
    "content": ".customer-callout {\n  background: linear-gradient(180deg, #f9fafb 0%, #ffffff 100%);\n  margin-top: 120px;\n  margin-bottom: 140px;\n  padding-top: 140px;\n\n  @media (max-width: $screen-sm) {\n    margin-top: 80px;\n    margin-bottom: 80px;\n    padding-top: 68px;\n  }\n\n  hgroup {\n    text-align: center;\n\n    h3 {\n      font-size: 34px;\n      line-height: 40px;\n      text-align: center;\n      letter-spacing: -0.02em;\n      color: #1a232f;\n    }\n\n    p {\n      font-size: 20px;\n      line-height: 33px;\n      text-align: center;\n      letter-spacing: -0.02em;\n      color: #5b708b;\n      max-width: 860px;\n      margin-left: auto;\n      margin-right: auto;\n    }\n  }\n\n  &__logos {\n    display: flex;\n    margin: 26px auto 0;\n    padding: 0;\n    justify-content: space-between;\n    max-width: 780px;\n    width: 100%;\n\n    li {\n      background: url(\"/img/customer-logos.jpg\");\n      background-size: 428px 46px;\n      background-repeat: no-repeat;\n      display: block;\n      height: 46px;\n    }\n\n    @media (max-width: $screen-sm) {\n      justify-content: center;\n      flex-wrap: wrap;\n      max-width: 460px;\n\n      li {\n        margin: 20px;\n      }\n    }\n  }\n\n  .mastercard {\n    width: 58px;\n  }\n  .nationwide {\n    background-position: -58px 0;\n    width: 33px;\n  }\n  .uniqlo {\n    background-position: -91px 0;\n    width: 65px;\n  }\n  .ibm {\n    background-position: -156px 0;\n    width: 64px;\n  }\n  .ing {\n    background-position: -222px 0;\n    width: 103px;\n  }\n  .sap {\n    background-position: -326px 0;\n    width: 56px;\n  }\n  .nasa {\n    background-position: -380px 0;\n    width: 50px;\n  }\n}\n"
  },
  {
    "path": "assets/scss/components/_docs_content.scss",
    "content": ".page-pro-docs {\n  .docs-container {\n    main h2 {\n      padding-top: 0.5em;\n    }\n    main p {\n      margin-top: 0.7em;\n      margin-bottom: 0.7em;\n    }\n  }\n\n  .side-nav > ul.nested-menu > li > ul > li > a {\n    margin-top: 15px;\n  }\n}\n\n.docs-container {\n  min-height: 100%;\n\n  .fixed-header {\n    position: fixed;\n    left: 230px;\n    top: 0px;\n    width: 100%;\n    border-bottom: 1px solid $light-grey;\n    background-color: white;\n    padding: 0px 38px;\n    overflow: hidden;\n    transform: translate3d(0, 0, 0);\n\n    > hgroup {\n      height: 74px;\n      line-height: 74px;\n\n      @media (max-width: $screen-xs-max) {\n        height: 46px;\n        line-height: 46px;\n      }\n\n      > * {\n        display: inline-block;\n        margin: 0px;\n        line-height: inherit;\n        vertical-align: top;\n      }\n\n      h3 + h4 {\n        position: relative;\n        height: 100%;\n        margin-left: 31px;\n        opacity: 1;\n        transition: opacity 0.4s;\n\n        &.not-shown {\n          opacity: 0;\n        }\n\n        &:after {\n          content: '';\n          position: absolute;\n          left: -24px;\n          top: calc(50% - 5px);\n          width: 10px;\n          height: 10px;\n          transform: rotate(45deg);\n          border-right: 2px solid;\n          border-top: 2px solid;\n          border-color: #333333;\n        }\n\n        > nobr {\n          position: absolute;\n          transition: transform 0.3s, opacity 0.3s;\n\n          &.top {\n            transform: translateY(-28px);\n            opacity: 0;\n          }\n\n          &.middle, &.top.middle, &.bottom.middle {\n            transform: translateY(2px);\n            opacity: 1;\n          }\n\n          &.bottom {\n            transform: translateY(32px);\n            opacity: 0;\n          }\n\n          &.no-transition {\n            transition-duration: 0s, 0s;\n          }\n        }\n      }\n    }\n  }\n\n\n  @media (max-width: $screen-xs-max) {\n    .fixed-header {\n      left: 0px;\n    }\n  }\n\n  main {\n    padding: 50px 40px 100px;\n\n    h1,\n    h2,\n    h3,\n    h4,\n    h5 {\n      color: $blacker;\n      line-height: 1.4em;\n      margin: 2em 0 1em;\n      font-size: 26px;\n      font-weight: 700;\n      letter-spacing: -0.01em;\n      // position: relative;\n\n      &:first-child {\n        margin-top: 0;\n      }\n\n      a.anchor {\n        &::before {\n          content: '\\f22a';\n          font-family: 'Ionicons';\n          margin-left: -15px;\n          margin-right: 5px;\n          font-size: 14px;\n          color: $light-grey;\n          transition: .3s color;\n        }\n\n        &:hover::before,\n        &:active::before {\n          color: rgba($blue, .6);\n        }\n      }\n    }\n\n    h1 {\n      margin-bottom: 0;\n\n      a.anchor::before {\n        margin-left: -23px;\n      }\n    }\n\n    h2 {\n      padding: 2em 0 0;\n      font-size: 24px;\n\n      &.section-header {\n        border-top: 1px solid #F0F3F7;\n        margin-top: 5.6em;\n      }\n    }\n\n    h3 {\n      margin: 3.2em 0 0;\n      font-size: 18px;\n\n      &.no-para {\n        margin-bottom: 1em;\n      }\n    }\n\n    h4 {\n      font-size: 16px;\n    }\n\n    h5 {\n      font-size: 14px;\n    }\n\n    h6 {\n      font-size: 12px;\n    }\n\n    p {\n      coor: #3a3f47;\n      line-height: 2.1em;\n      margin: 1.2em 0 1.6em;\n      font-weight: 400;\n      font-size: 15px;\n    }\n\n    pre {\n      border: 1px solid $light-grey;\n      background: white;\n      padding: 16px;\n      line-height: 24px;\n    }\n\n    a:not(.btn) {\n      color: $blue;\n      text-decoration: none;\n      transition: .2s color;\n\n      &:hover {\n        color: lighten($blue, 15);\n      }\n    }\n\n    table {\n      width: 100%;\n    }\n\n    td,\n    th {\n      white-space: nowrap;\n\n      &:last-child {\n        white-space: normal;\n        width: 99%;\n      }\n    }\n\n    b,\n    strong {\n      font-weight: 500;\n      color: #26292e;\n    }\n\n    .fixed-width {\n      font-family: Menlo, Monaco, Consolas, \"Courier New\", monospace;\n    }\n\n    .nav {\n      a {\n        padding-top: 5px;\n        padding-bottom: 5px;\n      }\n    }\n\n    blockquote {\n      padding: 0 15px;\n      margin: 40px 0;\n      font-size: 16px;\n      border-left: 4px solid #eeeeee;\n    }\n\n    img.section-header {\n      width: 100%;\n      margin: 50px 0;\n      max-width: 1037px;\n      display: block;\n    }\n\n    .beta {\n      background: $blue;\n      color: white;\n      font-weight: 700;\n      font-size: 10px;\n      padding: 0 2px;\n      border-radius: 3px;\n      position: relative;\n      top: -9px;\n      cursor: pointer;\n    }\n\n    .beta-notice {\n      font-style: italic;\n      font-size: 13px;\n      position: relative;\n      padding-left: 30px;\n\n      &::before {\n        position: absolute;\n        left: 0px;\n        top: 0px;\n        font-family: 'Ionicons';\n        content: '\\f276';\n        color: $blue;\n        font-size: 24px;\n        font-style: normal;\n        margin-right: 3px;\n      }\n    }\n\n    .paid {\n      background: $blue;\n      color: white;\n      font-weight: 700;\n      font-size: 10px;\n      padding: 0 2px;\n      border-radius: 3px;\n      position: relative;\n      top: -9px;\n      cursor: pointer;\n    }\n\n    .paid-notice {\n      font-style: italic;\n      font-size: 13px;\n      position: relative;\n      padding-left: 30px;\n\n      &::before {\n        position: absolute;\n        left: 0px;\n        top: 0px;\n        font-family: 'Ionicons';\n        content: '\\f48d';\n        color: $blue;\n        font-size: 24px;\n        font-style: normal;\n        margin-right: 3px;\n      }\n    }\n\n    .api-title {\n      .beta, .paid {\n        margin-left: 6px;\n      }\n    }\n  }\n\n  img {\n    max-width: 100%;\n  }\n}\n\n\n.page-components .docs-container h3 {\n  @media (max-width: 1100px) {\n    width: calc(100% - 172px);\n    text-overflow: ellipsis;\n    white-space: nowrap;\n    overflow: hidden;\n  }\n}\n"
  },
  {
    "path": "assets/scss/components/_draggable.scss",
    "content": ".draggable {\n  height: 345px;\n  position: relative;\n\n  .code,\n  .app {\n    position: absolute;\n    top: 0;\n    right: 0;\n    bottom: 0;\n    left: 0;\n    background: white;\n    border-radius: 8px;\n  }\n\n  .app {\n    right: 0;\n    position: absolute;\n    overflow: hidden;\n    padding: 9px 0 0 9px;\n    background: white url('/img/home/ios-list-design.png') no-repeat 0 bottom;\n    background-size: 540px;\n  }\n\n  .code {\n    code {\n      padding: 0;\n      position: absolute;\n      top: 0;\n      bottom: 0;\n      right: 0;\n      left: 0;\n      background: transparent;\n      padding-top: 15px;\n    }\n\n    pre {\n      font-family: monospace;\n      background-color: #fff;\n      position: absolute;\n      top: 0;\n      right: 0;\n      left: 0;\n      bottom: 0;\n      overflow: hidden;\n      line-height: 0em;\n      counter-reset: line;\n      white-space: pre-wrap;\n      padding: 0;\n      border: 0;\n      margin: 0;\n\n      &::before {\n        background: #f3f7ff;\n        position: absolute;\n        top: 0;\n        bottom: 0;\n        left: 0;\n        width: 40px;\n        content: '';\n        display: block;\n      }\n\n      span.line {\n        display: block;\n        padding: 12px 0 12px 55px;\n        position: relative;\n\n        &:before {\n          counter-increment: line;\n          content: counter(line);\n          display: block;\n          color: #79a5f1;\n          position: absolute;\n          top: 0;\n          left: 0;\n          bottom: 0;\n          width: 40px;\n          text-align: right;\n          padding-top: 12px;\n          padding-right: 8px;\n        }\n      }\n    }\n  }\n\n  .toggle {\n    width: 4px;\n    top: 0 !important;\n    bottom: 0;\n    right: 0;\n    position: absolute;\n    box-shadow: 0 0 18px rgba(0,0,0,.1),0 0 4px rgba(0,0,0,.06);\n    background: white;\n    z-index: 3;\n    cursor: grab;\n\n    &::after {\n      background: url('/img/home/drag-button.png') no-repeat 0 0;\n      background-size: 64px;\n      width: 64px;\n      height: 64px;\n      display: block;\n      content: '';\n      top: calc(50% - 40px);\n      left: -28px;\n      position: absolute;\n    }\n  }\n}\n"
  },
  {
    "path": "assets/scss/components/_footer.scss",
    "content": ".docs-container + footer {\n  display: none;\n}\n\nfooter {\n  border-top: 1px solid #f3f5f9;\n  padding-top: 70px;\n  padding-bottom: 20px;\n  font-weight: 500;\n\n  .logo svg {\n    fill: #3880ff;\n    width: 78px;\n    height: 26px;\n  }\n\n  nav {\n    display: flex;\n    justify-content: space-between;\n\n    &.container {\n      &::before,\n      &::after {\n        display: none;\n      }\n    }\n\n    .logo,\n    ul {\n      flex: 1;\n    }\n\n    ul {\n      list-style: none;\n      font-weight: 500;\n      padding-left: 0;\n\n      &:first-child {\n        margin-left: 1px;\n      }\n\n      strong {\n        color: #000000;\n        display: block;\n        font-weight: 600;\n        font-size: 16px;\n        padding-bottom: 4px;\n        letter-spacing: -0.01em;\n      }\n\n      a {\n        line-height: 1;\n        font-size: 14px;\n        letter-spacing: -0.01em;\n        color: #73849a;\n        font-weight: 400;\n        padding: 11px 0;\n        display: inline-block;\n        font-family: $font-family-inter;\n\n        &:hover {\n          text-decoration: none;\n          color: $blue;\n        }\n      }\n    }\n  }\n\n  .signup {\n    margin-top: 60px;\n    display: flex;\n\n    &::before,\n    &::after {\n      display: none;\n    }\n\n    hgroup {\n      flex: 0 0 auto;\n    }\n\n    ionic-newsletter-signup {\n      flex: 1;\n      margin-left: 60px;\n    }\n\n    form {\n      display: flex;\n      height: 50px;\n    }\n\n    hgroup {\n      background: url(\"/img/footer/footer-newsletter-icon.png\") no-repeat 1px\n        8px;\n      background-size: 40px;\n      padding-left: 63px;\n      min-height: 50px;\n\n      h3 {\n        font-size: 16px;\n        margin-top: 0;\n        margin-bottom: 3px;\n        padding-top: 11px;\n        font-weight: 600;\n        letter-spacing: -0.02em;\n      }\n\n      p {\n        font-family: $font-family-inter;\n        font-size: 14px;\n        color: #73849a;\n        letter-spacing: -0.016em;\n        font-weight: 400;\n      }\n    }\n  }\n\n  @media (max-width: $screen-sm-max) {\n    padding-top: 46px;\n\n    nav {\n      flex-wrap: wrap;\n      justify-content: flex-start;\n\n      .logo {\n        flex: 0 0 100%;\n        margin-bottom: 40px;\n      }\n    }\n\n    .signup {\n      flex-direction: column;\n\n      hgroup,\n      ionic-newsletter-signup {\n        flex: 0 0 100%;\n      }\n\n      ionic-newsletter-signup {\n        margin-top: 4px;\n      }\n    }\n  }\n\n  @media (max-width: $screen-sm-min) {\n    nav {\n      .logo {\n        display: none;\n      }\n\n      ul {\n        flex: 0 0 33%;\n        margin-bottom: 36px;\n      }\n\n      ul li a {\n        padding: 9px 0;\n      }\n    }\n\n    .signup {\n      margin-top: 0;\n    }\n  }\n\n  @media (max-width: $screen-xs-min) {\n    nav ul {\n      flex: 0 0 50%;\n    }\n\n    .signup ionic-newsletter-signup {\n      margin-left: 0;\n    }\n  }\n\n  .sub-footer {\n    font-size: 12px;\n    color: $grey;\n    border-top: 1px solid #eff1f5;\n    margin-top: 40px;\n    padding-top: 29px;\n    text-align: center;\n    display: flex;\n    justify-content: space-between;\n    flex-wrap: wrap;\n\n    ul {\n      display: flex;\n      flex: 0 0 auto;\n      list-style: none;\n      padding-left: 0;\n    }\n\n    ul:last-child li + li {\n      margin-left: 15px;\n    }\n\n    .license {\n      margin-left: auto;\n      margin-right: -3px;\n      padding-left: 15px;\n      text-align: right;\n\n      @media (max-width: $screen-xs-max) {\n        width: 100%;\n        padding-left: 0;\n      }\n    }\n\n    a {\n      color: #bcc5d5;\n\n      &:hover {\n        color: $grey;\n      }\n    }\n\n    .copyright,\n    .privacy,\n    .tos {\n      margin-right: 8px;\n    }\n\n    .copyright {\n      flex: 0 0 77px;\n    }\n\n    .privacy {\n      height: 1em;\n    }\n\n    a[id^=\"btn-footer\"] {\n      position: relative;\n      height: 16px;\n      width: 16px;\n      display: inline-block;\n      opacity: 0.6;\n      display: flex;\n      align-items: center;\n      justify-content: center;\n\n      svg {\n        fill: #ced6e0;\n      }\n\n      &:hover svg {\n        fill: #b4bbc5;\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "assets/scss/components/_form.scss",
    "content": ".modal form,\n.form-inline {\n  max-width: 420px;\n\n  input,\n  .select-wrapper,\n  textarea {\n    border: 1px solid #e1e5ed;\n    // padding: 15px 5px 15px 18px;\n    font-weight: 500;\n    float: left;\n    border-radius: 4px;\n    transition: border-color .2s;\n    box-shadow: none;\n\n    &::-webkit-input-placeholder {\n      color: $lightish-grey;\n    }\n\n    &:-ms-input-placeholder {\n      color: $lightish-grey;\n    }\n    \n    &:valid {\n      border-color: #B4BBC5;\n    }\n\n    &:hover,\n    &:focus,\n    &:active {\n      outline: none;\n      border-color: $blue;\n      box-shadow: none;\n    }\n  }\n\n  input.invalid,\n  input.ng-touched:not(:focus):not(:valid) {\n    border-color: $red;\n  }\n\n  input:not(.hs-button),\n  .select-wrapper,\n  input.form-control {\n    width: 190px;\n    margin: 0 7px 10px 0;\n    height: 43px;\n\n    &:nth-child(2),\n    &:nth-child(4),\n    &:nth-child(6),\n    &:nth-child(8) {\n      margin-right: 0;\n      width: 190px;\n    }\n\n    &.full-width,\n    &.full-width:nth-child(2),\n    &.full-width:nth-child(4),\n    &.fuill-width:nth-child(6),\n    &.fuill-width:nth-child(8) {\n      width: 100%;\n    }\n  }\n\n  .select-wrapper {\n    position: relative;\n    background: white;\n    // border-color: #B4BBC5;\n\n    .up {\n      width: 0;\n      height: 0;\n      border-left: 5px solid transparent;\n      border-right: 5px solid transparent;\n      border-bottom: 5px solid $grey;\n      display: block;\n      margin-bottom: 3px;\n      position: absolute;\n      right: 10px;\n      top: 13px;\n    }\n\n    .dn {\n      width: 0;\n      height: 0;\n      border-left: 5px solid transparent;\n      border-right: 5px solid transparent;\n      border-top: 5px solid $grey;\n      display: block;\n      position: absolute;\n      right: 10px;\n      top: 20px;\n    }\n\n    select {\n      -webkit-appearance: none;\n      -moz-appearance: none;\n      -ms-appearance: none;\n      position: absolute;\n      left: 0;\n      right: 0;\n      top: 0;\n      bottom: 0;\n      border: 0;\n      padding-top: 10px;\n      outline: none;\n      box-shadow: none;\n      z-index: 1;\n      background: transparent;\n      width: 100%;\n    }\n\n    &.null {\n      border-color: $lighter-grey;\n\n      select {\n        color: $lightish-grey;\n      }\n\n      .up {\n        border-top-color: $lightish-grey !important;\n      }\n\n      .dn {\n        border-bottom-color: $lightish-grey !important;\n      }\n    }\n  }\n\n  textarea {\n    width: 100%;\n    padding: 12px;\n  }\n\n  @media (max-width: 420px)  {\n    input,\n    input:nth-child(2),\n    input:nth-child(6),\n    select:nth-child(4) {\n      width: 100%;\n      margin-right: 0;\n    }\n  }\n\n  button {\n    font-size: 13px;\n    padding: 10px 13px 8px;\n    height: 41px;\n    line-height: 10px;\n    margin-top: 10px;\n    float: right;\n    font-weight: 600;\n    letter-spacing: 0;\n    text-transform: none;\n  }\n\n  .success {\n    color: $green;\n  }\n\n  .error {\n    color: $red;\n  }\n}\n"
  },
  {
    "path": "assets/scss/components/_header.scss",
    "content": ".navbar-default {\n  background: linear-gradient(to right, #347eff, #1ea3ff);\n  font-family: $font-family-inter;\n  margin-bottom: 18px;\n  position: relative;\n  padding-top: 18px;\n  border-radius: 0;\n  margin-bottom: 0;\n  min-height: 64px;\n  z-index: 999;\n  border: 0;\n\n  @media (max-width: $screen-xs-max) {\n    position: fixed;\n    top: 0;\n    width: 100%;\n    padding-top: 1px;\n    min-height: 50px;\n    transition: .3s box-shadow;\n    // 1 less than sub-nav\n    z-index: 98;\n\n    &.navbar--not-fixed {\n      position: absolute;\n    }\n  }\n\n  .navbar-header {\n    // width: 132px;\n    @media (max-width: $screen-sm-max) {\n      width: auto;\n    }\n  }\n\n  .navbar-brand {\n    height: 32px;\n    color: white;\n    padding: 1px 0 0 20px;\n    transition: 0.3s color;\n    position: relative;\n    z-index: 10;\n\n    @media (max-width: $screen-xs-max) {\n      padding-top: 8px;\n      color: #1A232F;\n  \n      &:hover {\n        color: $blue;\n      }\n    }\n\n    img {\n      width: 128px;\n    }\n\n    &:hover {\n      color: rgba(white, .8);\n    }\n  }\n\n  .navbar__divider {\n    border-right: 1px solid #CED6E0;\n    height: 2em;\n    margin: 1px 12px 0;\n    display: inline-block;\n\n    &.navbar__divider--finale ~ li > a {\n      padding-right: 10px;\n      padding-left: 10px;\n    }\n  }\n\n  &.light {\n    .navbar-brand {\n      color: #1A232F;\n  \n      &:hover {\n        color: $blue;\n      }\n    }\n  }\n\n  .navbar-right {\n    padding-right: 20px;\n  }\n\n  &.transparent {\n    background: transparent;\n\n    @media (max-width: $screen-xs-max) {\n      background: #fff;\n      box-shadow: 0px 1px 2px 0px rgba(0, 20, 56, 0.06);\n    }\n  }\n\n  @media (max-width: $screen-xs-max) {\n    .navbar-collapse {\n      box-shadow: 0 4px 4px rgba(0, 0, 0, .1);\n    }\n  }\n\n  .navbar-collapse {\n    text-align: center;\n    max-height: 32px;\n\n    @media (max-width: $screen-xs-max) {\n      max-height: 600px;\n      margin-top: 20px;\n    }\n  }\n\n  .navbar-nav {\n    @media (max-width: $screen-xs-max) {\n      padding-right: 6px;\n      padding-left: 6px;\n    }\n\n    > li {\n      padding-top: 0;\n\n      &:first-child {\n        margin-left: 0px;\n      }\n\n      &.sm-hide {\n        @media (min-width: $screen-sm-min) and (max-width: $screen-sm-max) {\n          display: none;\n        }\n      }\n\n      @media (max-width: $screen-md-max) {\n        &.hide-lt-lg,\n        .hide-lt-lg {\n          display: none;\n        }\n      }\n\n      @media (min-width: $screen-lg-min) {\n        &.hide-gt-md,\n        .hide-gt-md {\n          display: none;\n        }\n      }\n\n      > a {\n        color: white;\n        font-size: 14px;\n        font-weight: 500;\n        margin: 0;\n        padding: 5px 12px;\n        letter-spacing: -.01em;\n        transition: 0.2s color;\n        border-top: none;\n        border-radius: 4px;\n        transition-duration: 0.3s;\n        position: relative;\n        z-index: 10;\n\n        @media (max-width: $screen-md-max) {\n          padding-left: 8px;\n          padding-right: 7px;\n        }\n\n        @media (max-width: $screen-sm-max) {\n          margin-left: 0;\n          margin-right: 0;\n          padding-left: 8px;\n          padding-right: 7px;\n        }\n\n        @media (max-width: $screen-xs-max) {\n          padding: 15px;\n          border: 0;\n        }\n\n        .social path {\n          fill: currentColor;\n        }\n\n        path {\n          transition: 0.3s fill;\n        }\n\n        &:hover {\n          color: rgba(white, .65);\n        }\n      }\n\n      &.open > a {\n        color: rgba(white, .65) !important;\n      }\n\n      &.active > a {\n        color: rgba(white, 0.7);\n      }\n\n      &.active > a:hover {\n        color: rgba(255, 255, 255, 0.65);\n      }\n\n      .light &.open > a {\n        color: #131924 !important;\n      }\n\n      &.header-btn-white {\n        a {\n          background-color: rgba(white, 1);\n          vertical-align: middle;\n          padding: 7.5px 12px 8.5px;\n          border-radius: 8px;\n          color: #3880FF;\n          letter-spacing: -0.03em;\n          line-height: 16px;\n          font-family: $font-family-inter;\n          font-weight: 500;\n          margin-right: 0;\n          margin-left: 16px;\n          transition: 0.3s box-shadow, 0.3s background;\n          top: -2px;\n\n          &:hover {\n            opacity: 1;\n            color: $blue;\n            box-shadow: 0 3px 5px rgba(black, .15);\n            background-color: rgba(white, 1);\n          }\n\n          &:active {\n            box-shadow: inset 0 1px 4px rgba(0,0,0,.2);\n          }\n\n          @media (max-width: $screen-sm-max) {\n            // margin-left: 0px;\n          }\n        }\n\n        &.blue {\n          @media (min-width: $screen-sm-min) {\n            a {\n              color: white;\n              background: $blue;\n\n              &:hover {\n                background-color: rgba($blue, .9);\n              }\n            }\n          }\n        }\n      }\n\n      &.search {\n        margin-right: 12px;\n        position: static;\n\n        @media (min-width: $screen-sm-min) and (max-width: $screen-sm-max) {\n          margin-right: 8px;\n        }\n      }\n    }\n  }\n\n  // mobile width animation & default styles\n  .dropdown {\n    .dropdown-menu {\n      display: block;\n      visibility: 0;\n      opacity: 0;\n      transform: scaleY(0);\n      transform-origin: top;\n      transition: transform 0.3s ease, opacity 0.3s;\n    }\n\n    &.open .dropdown-menu {\n      // &:hover .dropdown-menu {\n      visibility: 1;\n      opacity: 1;\n      transform: scaleY(1);\n    }\n\n    .divider {\n      border-bottom: 1px solid #ebeef2;\n      margin: 6px 0 13px;\n    }\n\n    @media (max-width: $screen-xs-max) {\n      .dropdown-menu {\n        text-align: center;\n      }\n    }\n  }\n\n  // desktop width animation\n  @media (min-width: $screen-sm-min) {\n    .dropdown {\n      &.open .dropdown-menu,\n      &:hover .dropdown-menu {\n        opacity: 1;\n        top: 49px;\n        // z-index: 999;\n        pointer-events: all;\n        transform: translate3d(-50%, 0, 0) scale(1,1) perspective(1px);\n        transition: transform 0.25s cubic-bezier(.17,.67,.52,1), opacity 0.2s linear, top 0.25s step-start;\n        transition-delay: 0.2s;\n\n        &--bar.dropdown-menu {\n          transform: none;\n          transition: \n            transform 0.25s cubic-bezier(.17,.67,.52,1), \n            opacity 0.2s linear, \n            top 0.25s step-start;\n\n          .dropdown-menu__column li {\n            opacity: 1;\n            transform: none;\n          }\n        }\n      }\n\n      .dropdown-menu {\n        display: block;\n        position: absolute;\n        border: 0;\n        border-radius: 8px;\n        top: 49px;\n        padding: 0;\n        right: auto;\n        left: 50%;\n        box-shadow: \n          0px 18px 24px rgba(2, 8, 20, 0.2), \n          0px 8px 8px rgba(2, 8, 20, 0.1);\n        border-top: 1px solid #eee;\n        opacity: 0;\n        top: -2000px;\n        pointer-events: none;\n        transform: translate3d(-50%, -10px, 0) scale(1,1) perspective(1px);\n        z-index: 1;\n        transition-delay: 0s;\n        transform-origin: 50% 0;\n        transition: \n          transform 0.2s cubic-bezier(0.36,0.66,0.04,1), \n          opacity 0.2s linear, top 0.25s step-end;\n        backface-visibility: hidden;\n\n        li,\n        ul {\n          margin: 0;\n          padding-left: 0;\n          list-style-type: none;\n        }\n\n        &__text--l1,\n        &__text--l2,\n        &__text--l3,\n        &__text--l4 {\n          letter-spacing: -0.01em;\n        }\n\n        &__text--l1 {\n          font-weight: 600;\n          font-size: 16px;\n\n          ion-icon {\n            transition: translate 0.2s;\n            transform: translate(0, 3px);\n          }\n\n          &:hover ion-icon {\n            transform: translate(1px, 3px);\n          }\n        }\n\n        &__text--l2 {\n          font-weight: 500;\n          font-size: 11px;\n          line-height: 15px;\n          color: #73849A;\n          letter-spacing: .12em;\n          text-transform: uppercase;\n          padding: 15px 32px 10px;\n        }\n\n        &__text--l3 {\n          font-size: 14px;\n          line-height: 17px;\n          font-weight: 500;\n          position: relative;\n          padding: 11px 20px 12px 60px;\n          min-width: 232px;\n\n          small {\n            display: block;\n            font-size: 12px;\n            line-height: 17px;\n            color: #73849A;\n            margin-top: 1px;\n            font-weight: 400;\n            transition: .2s color;\n          }\n\n          &::before,\n          &::after {\n            background: url('/img/ico-nav.png?3') 0 0 no-repeat;\n            background-size: 20px;\n            height: 20px;\n            width: 20px;\n            content: '';\n            position: absolute;\n            top: 9px;\n            left: 30px;\n\n            @media (-webkit-min-device-pixel-ratio: 2), (min-resolution: 192dpi) { \n              background-image: url('/img/ico-nav@2x.png?3');\n              background-size: 20px;\n            }\n          }\n\n\n          @include hoverSprite(\n            'icon--enterprise'\n            'icon--installation'\n            'icon--ui-components'\n            'icon--native-apis'\n            'icon--deployment' // unused\n            'icon--cli'\n            'icon--hub'\n            'icon--resources'\n            'icon--help-center'\n            'icon--trusted-partners'\n            'icon--forum'\n            'icon--identity-vault' \n            'icon--auth-connect' \n            'icon--secure-storage'\n            'icon--appflow' \n            'icon--react'\n            'icon--angular'\n            'icon--vue'\n            'icon--integrations'\n            'icon--advisory-services'\n          , 20);\n        }\n\n        > li > .dropdown-menu__text--l3 {\n          padding-top: 21px;\n          padding-bottom: 19px;\n\n          &::before,\n          &::after {\n            top: 19px;\n          }\n        }\n\n        a, \n        span.dropdown-menu__text--l2 {\n          display: block;\n          transition: 0.2s color;\n          font-family: $font-family-inter;\n          white-space: nowrap;\n        }\n\n        a {\n          color: #1A232F;\n\n          &:hover {\n            color: #000;\n            background: transparent;\n\n            small {\n              color: #000;\n            }\n\n            path {\n              fill: #000;\n            }\n          }\n\n          &:hover,\n          &:active,\n          &:focus {\n            text-decoration: none;\n          }\n        }\n\n        &::after {\n          position: absolute;\n          top: -20px;\n          content: '';\n          width: 100%;\n          height: 20px;\n        }\n\n        &::before {\n            position: absolute;\n            width: 14px;\n            height: 14px;\n            top: -5px;\n            right: calc(50% - 7px);\n            background: white;\n            transform: rotate(45deg);\n            border-radius: 4px;\n            content: '';\n            display: block;\n        }\n      }\n    }\n  }\n\n  .navbar-toggle,\n  .sidebar-toggle {\n    border: 0;\n    position: relative;\n    background: transparent;\n\n    i {\n      position: absolute;\n      font-size: 27px;\n      top: -3px;\n      color: #fff;\n      transition: color 0.3s, transform 0.3s, opacity 0.3s;\n    }\n\n    &:active,\n    &:focus,\n    &:hover {\n      background: transparent;\n      outline: none;\n\n      i {\n        color: #fff;\n      }\n    }\n\n    .ion-md-close {\n      opacity: 0;\n    }\n\n    &.active {\n      i {\n        transform: rotate(90deg);\n      }\n\n      i:not(.ion-md-close) {\n        opacity: 0;\n      }\n\n      .ion-md-close {\n        transform: rotate(90deg);\n        opacity: 1;\n      }\n    }\n  }\n\n  &.transparent .navbar-toggle,\n  &.transparent .sidebar-toggle {\n    i {\n      color: $blue;\n    }\n\n    &:active,\n    &:focus,\n    &:hover {\n      i {\n        color: $blue;\n      }\n    }\n  }\n\n\n  .sidebar-toggle {\n    float: left;\n    margin: 8px 10px 0;\n    display: none;\n    @media (max-width: $screen-xs-max) {\n      display: block;\n    }\n  }\n\n  ~ .cta {\n    .bar {\n      background: rgba(black, .9);\n      min-height: 64px;\n\n      .container > div,\n      p {\n        color: rgba(white,.7);\n        text-align: center;\n        margin-top: 15px;\n        margin-bottom: 15px;\n        font-weight: 400;\n        font-size: 16px;\n      }\n\n      &.affix-top {\n        position: absolute;\n        z-index: 1;\n      }\n\n      &.affix {\n        top: 0;\n        position: fixed;\n        z-index: 100;\n      }\n\n      &.tabbed {\n        background: #fbfcfd;\n        border-bottom: 1px solid $whiteish;\n        width: 100%;\n\n        &.affix {\n          border-bottom-color: transparent;\n          box-shadow: 0 1px 4px rgba(0, 0, 0, 0.05), 0 1px 0 rgba(0, 0, 0, 0.05);\n\n          ul li a {\n            margin-bottom: -2px;\n          }\n        }\n\n        ul {\n          padding: none;\n          text-align: center;\n\n          li {\n            display: inline-block;\n\n            a {\n              padding: 25px 18px;\n              display: inline-block;\n              line-height: 1em;\n              font-size: 13px;\n              font-weight: 500;\n              margin: 0 15px -1px;\n              color: $dark-grey;\n              border-bottom: 2px solid transparent;\n              transition: color 0.2s, border-color 0.2s;\n              font-weight: 600;\n\n              &:focus {\n                background: transparent;\n              }\n            }\n\n            &.active a {\n              border-color: $blue;\n            }\n\n            &.active a,\n            a:active,\n            a:hover {\n              color: $blue;\n              background: transparent;\n            }\n          }\n          @media (max-width: $screen-xs-max) {\n            display: flex;\n            justify-content: space-between;\n\n            li a {\n              margin-right: 0;\n              margin-left: 0;\n              padding-left: 4px;\n              padding-right: 4px;\n            }\n          }\n        }\n      }\n    }\n  }\n  @media (min-width: $screen-sm-min) {\n    &.light {\n      .navbar-nav > li:not(.header-btn-white) > a,\n      .navbar-nav ionic-search ion-icon {\n        color: #35404E;\n\n        .social path {\n          fill: #B2BECD;\n        }\n\n        .chevron path {\n          fill: #2D4665\n        }\n\n        &:hover {\n          color: $blue;\n\n          .chevron path,\n          .social path {\n            fill: $blue;\n          }\n        }\n      }\n\n      .navbar-nav > li.active > a {\n        color: #c7d0e0;\n      }\n    }\n  }\n\n  &.navbar-sticky {\n    z-index: 999;\n    padding: 16px 0px 0px;\n    box-shadow:\n      0px 2px 6px 0px rgba(0, 0, 0, 0.04),\n      0px 6px 12px rgba(0, 0, 0, 0.02);\n  }\n\n  ionic-search:not(.hydrated) {\n    visibility: hidden;\n    width: 18px;\n    height: 31px;\n    display: block;\n  }\n\n  &.navbar-sticky {\n    position: fixed;\n    top: 0;\n    left: 0;\n    right: 0;\n    opacity: 0;\n    transform: translate3d(0, -100%, 0);\n    box-shadow: 0 2px 6px 0 rgba(0,0,0,0.07);\n    background: #fff;\n  \n    @supports (backdrop-filter: saturate(180%) blur(20px)) {\n      background: rgba(#fff, 0.9);\n      backdrop-filter: saturate(180%) blur(20px);\n    }\n  \n    .navbar-nav > li.header-btn-white a {\n      background-color: #488aff;\n      color: #fff;\n  \n      &:hover {\n        background-color: rgba(74,139,252,.9);\n        color: #fff;\n      }\n    }\n  \n    &--show,\n    &--hide {\n      animation-fill-mode:forwards;\n    }\n  \n    &--hide {\n      animation-duration: 0.1s;\n      animation-name: slideup;\n  \n      @keyframes slideup {\n        0% {\n          opacity: 1;\n          transform: translate3d(0, 0, 0);\n        }\n        100% {\n          opacity: 0;\n          transform: translate3d(0, -100%, 0);\n        }\n      }\n    }\n  \n    &--show {\n      animation-duration: 0.5s;\n      animation-name: slidedown;\n      animation-timing-function: cubic-bezier(0.075, 0.82, 0.165, 1);\n  \n      @keyframes slidedown {\n        0% {\n          opacity: 0;\n          transform: translate3d(0, -100%, 0);\n        }\n        1% {\n          opacity: 1;\n        }\n        100% {\n          opacity: 1;\n          transform: translate3d(0, 0, 0);\n        }\n      }\n    }\n  \n    @media (max-width: $screen-xs-max) {\n      display: none;\n    }\n  }\n}\n\n.docs .navbar-default .navbar-nav {\n  @media (min-width: $screen-md-min) {\n    &.navbar-center {\n      margin-left: 0;\n    }\n  }\n}\n\n// fix for the header component API docs page. it conflicts w/ a bootstrap\n// component\n\nbody.page-header {\n  padding-bottom: 0;\n  margin: 0;\n  border-bottom: 0;\n}\n\n.navbar-dark {\n  background: #11192a;\n}"
  },
  {
    "path": "assets/scss/components/_hero.scss",
    "content": ".hero {\n  padding-top: 128px;\n  padding-bottom: 72px;\n  position: relative;\n\n  &.left {\n    .content {\n      width: 415px;\n      @media (max-width: $screen-md-max)  {\n        width: 400px;\n      }\n      @media (max-width: $screen-xs-max)  {\n        width: 100%;\n      }\n    }\n\n    .graphics {\n      top: 150px;\n      right: 0;\n      position: absolute;\n    }\n  }\n\n  &.right {\n    .content {\n      width: 451px;\n      float: right;\n      @media (max-width: $screen-xs-max)  {\n        width: 100%;\n        float: none;\n      }\n\n      &:after {\n        clear: right;\n      }\n    }\n  }\n\n  .graphics {\n    width: 500px;\n\n    video {\n      position: absolute;\n      left: -2px;\n      top: 10px;\n\n      &::-webkit-media-controls-start-playback-button {\n        display: none !important;\n        -webkit-appearance: none;\n      }\n    }\n\n    @media (max-width: $screen-xs-max)  {\n      width: 100%;\n\n      video {\n        width: 300px;\n        height: 300px;\n        position: relative;\n        margin: 0 auto;\n        display: block;\n      }\n    }\n  }\n\n  p {\n    font-size: 15px;\n    line-height: 28px;\n    letter-spacing: -0.02em;\n    color: $dark-grey;\n\n    & + .btns {\n      margin-top: 37px;\n    }\n  }\n\n  .feature {\n    text-transform: uppercase;\n    display: inline-block;\n    font-weight: 700;\n    font-size: 10px;\n    letter-spacing: 2px;\n    position: relative;\n    padding-bottom: 15px;\n    color: black;\n\n    span {\n      transition: left .3s cubic-bezier(0.155, 1.105, 0.295, 1.12);\n      position: relative;\n      left: 0;\n    }\n\n    &:after {\n      position: absolute;\n      top: 14px;\n      left: 0;\n      right: 0;\n      content: '';\n      border-bottom: 2px solid $blackish;\n      transition: right .3s cubic-bezier(0.155, 1.105, 0.295, 1.12);\n    }\n\n    &:before {\n      content: '';\n      display: inline-block;\n      position: absolute;\n      right: -35px;\n      top: 9px;\n      font-size: 20px;\n      transition: transform .3s cubic-bezier(0.155, 1.105, 0.295, 1.12);\n      width: 11px;\n      height: 11px;\n      border-radius: 2px;\n      border-right: 0.1em solid;\n      border-top: 0.1em solid;\n      transform: scale3d(0,0,1) rotate(45deg) translate3d(-25px, 25px, 0);\n      margin-right: 0.5em;\n    }\n\n    &:hover {\n      span {\n        //transform: translate3d(15px, 0, 0);\n        left: 5px;\n      }\n\n      &:before {\n        transform: scale3d(1,1,1) rotate(45deg) translate3d(0, 0, 0);\n      }\n\n      &:after {\n        right: -25px;\n      }\n    }\n\n    + h2 {\n      margin-top: 25px;\n      margin-bottom: 20px;\n      letter-spacing: -0.01em;\n      color: #272a2f;\n      font-size: 32px;\n      font-weight: 400;\n    }\n  }\n\n  h2 {\n    line-height: 42px;\n  }\n\n  h3 + p {\n    font-size: 17px;\n    line-height: 34px;\n  }\n}\n"
  },
  {
    "path": "assets/scss/components/_hubspot_form.scss",
    "content": ".hbspt-form {\n  max-width: 420px;\n  margin: 0 auto;\n  font-weight: 400;\n\n  .hs-form-required {\n    display: none;\n  }\n\n  form {\n    fieldset.form-columns-2 .input {\n      margin-right: 12px;\n    }\n\n    &.stacked .field {\n      margin-bottom: 4px;\n    }\n  }\n\n  .hs-input,\n  input.hs-input,\n  select.hs-input {\n    border: 1px solid #e1e5ed;\n    // padding: 15px 5px 15px 18px;\n    font-weight: 500;\n    border-radius: 4px;\n    transition: border-color .2s;\n    box-shadow: none;\n    outline: none;\n    height: 30px;\n    padding: 6px 12px;\n    font-size: 14px;\n    line-height: 1.428571429;\n\n    &:placeholder {\n      color: $lightish-grey;\n    }\n\n    &:valid {\n      // border-color: #B4BBC5;\n    }\n\n    &:hover,\n    &:focus,\n    &:active, {\n      outline: none;\n      border-color: $blue;\n      box-shadow: none;\n    }\n\n    &.hs-input.error {\n      border-color: $red;\n    }\n  }\n\n  select.hs-input {\n    height: 44px;\n    width: calc(100% + 6px) !important;\n  }\n\n  textarea.hs-input {\n    padding: 12px;\n    width: calc(100% + 3px) !important;\n    min-height: 192px;\n  }\n\n  .hs_submit input.hs-button {\n    font-size: 13px;\n    padding: 10px 18px 10px;\n    margin-right: -14px;\n    margin-top: -36px;\n    line-height: 23px;\n    float: right;\n    font-weight: 600;\n    letter-spacing: 0;\n    text-transform: none;\n    text-shadow: none;\n    background: $blue;\n    border: 0;\n    outline: 0;\n    transition: all .2s linear;\n    box-shadow: 0 1px 3px rgba(0,0,0,.12);\n\n    &:hover {\n      border: 0;\n      box-shadow: 0 4px 8px rgba(0,0,0,.12);\n      background: #5995fc;\n      color: #fff;\n      outline: 0;\n    }\n\n    &:active,\n    &:active:not(.inactive):not(.link),\n    &:focus:not(.inactive) {\n      border: 0;\n      color: #fff;\n      box-shadow: inset 0 1px 4px rgba(0,0,0,.2);\n      background: #5995fc;\n      outline: 0;\n    }\n  }\n\n  .submitted-message {\n    &:before {\n      content: '';\n      display: block;\n      background-image: url('/img/checkmark-light-green.svg');\n      background-repeat: no-repeat;\n      background-size: 100%;\n      width: 42px;\n      height: 42px;\n      margin-bottom: 12px;\n    }\n\n    font-size: 18px;\n    padding: 34px 0 78px;\n    text-align: center;\n    display: flex;\n    flex-direction: column;\n    align-items: center;\n    font-weight: 400;\n    color: #35af55;\n    max-width: 410px;\n    background-color: white;\n    margin: 0 auto;\n  }\n}\n\n.modal .hbspt-form .hs_submit input.hs-button {\n  padding: 0;\n}\n\n.hubspot-override .hbspt-form {\n  font-family: $font-family-system;\n  // TODO these styles are only used on contributors landing,\n  // need to be applied to all hubspot forms\n\n  &,\n  & fieldset,\n  & iframe {\n    max-width: 100%;\n  }\n\n  // fieldset + fieldset,\n  // form.stacked .hs-form-field + .hs-form-field,\n  // fieldset .hs-form-field + .hs-form-field,\n  // form.stacked .hs-form-field + .hs-dependent-field {\n  //   margin-top: 26px;\n  // }\n   .hs-form-field {\n     margin-top: 16px;\n   }\n\n  label {\n    margin-bottom: 3px;\n  }\n\n  .hs-form-required {\n    display: inline;\n    color: #F45454;\n    margin-left: 4px\n  }\n\n  .hs-richtext {\n    margin-top: 8px;\n  }\n\n  .hs-input,\n  input.hs-input {\n    transition: border 0.3s;\n    font-weight: 500;\n    background-color: #fff;\n    background-image: none;\n    border: 1px solid #ced6e3;\n    line-height: 1.39286;\n    border-radius: 4px;\n    padding: 11px 15px;\n    font-size: 15px;\n    margin-bottom: 0;\n    color: #505863;\n  }\n\n  input.hs-input[type=\"number\"] {\n    float: none;\n  }\n\n  input.hs-input[type=\"text\"],\n  input.hs-input[type=\"email\"],\n  input.hs-input[type=\"tel\"]  {\n    height: auto;\n    width: 100%;\n    float: none;\n\n    &:focus {\n      border-color: #629eff;\n    }\n  }\n\n  input.hs-input[type=\"radio\"],\n  input.hs-input[type=\"checkbox\"] {\n    height: auto;\n    margin-right: 8px;\n  }\n\n  .hs-form-booleancheckbox-display {\n    display: flex;\n  }\n\n  select.hs-input {\n    height: 44px;\n\n\n    appearance: none;\n    background-image:\n      linear-gradient(45deg, transparent 50%, gray 50%),\n      linear-gradient(135deg, gray 50%, transparent 50%);\n    background-position:\n      calc(100% - 20px) 50%,\n      calc(100% - 15px) 50%;\n    background-size:\n      5px 5px,\n      5px 5px,\n      1px 1.5em;\n    background-repeat: no-repeat;\n  }\n\n  form fieldset.form-columns-2 .input {\n    margin: 0;\n  }\n\n  fieldset.form-columns-2 .hs-form-field {\n    padding: 0 10px;\n\n    &:first-child {\n      padding-left: 0;\n    }\n    &:last-child {\n      padding-right: 0;\n    }\n  }\n\n  .inputs-list,\n  .hs-error-msgs {\n    margin: 0;\n    padding: 0;\n    list-style-type: none;\n  }\n\n  .inputs-list.multi-container {\n    overflow: hidden;\n\n    li:nth-last-child(n+6):first-child,\n    li:nth-last-child(n+6):first-child ~ li {\n      width: 50%;\n      float: left;\n      padding-right: 11px;\n    }\n    li:nth-last-child(n+6):first-child ~ li:nth-child(even) {\n      padding-right: 0;\n      padding-left: 11px;\n    }\n  }\n\n  .hs-form-checkbox-display {\n    margin-top: 4px;\n    display: flex;\n  }\n\n  .hs-form-checkbox-display .hs-input[type=\"checkbox\"]{\n    margin-right: 10px;\n  }\n\n  .hs-form-checkbox-display span {\n    font-size: 15px;\n    color: #505863;\n  }\n\n\n  .hs-error-msgs {\n    padding: 5px 0 0;\n    font-size: 11px;\n    color: #F45454;\n  }\n\n  .hs_submit {\n    margin-top: 30px;\n  }\n\n  .hs_submit input.hs-button {\n    transition: all .3s ease;\n    margin: 0;\n    float: none;\n    font-size: 16px;\n    font-weight: 700;\n    padding: 12px 20px;\n    vertical-align: middle;\n    color: white;\n    background: #3880ff;\n    box-shadow: 0 1px 3px rgba(0, 0, 0, 0.08), 0 2px 4px rgba(0, 0, 0, 0.12);\n    border-radius: 4px;\n    line-height: 18px;\n    letter-spacing: -0.01em;\n\n    &:hover {\n      box-shadow: 0 7px 14px rgba(0, 0, 0, 0.12), 0 3px 6px rgba(0, 0, 0, 0.08);\n      background: #4d8dfd;\n      color: #fff;\n      outline: none;\n    }\n  }\n\n  @media (max-width: $screen-sm) {\n    fieldset.form-columns-2 .hs-form-field {\n      width: 100%;\n      float: none;\n      padding: 0;\n\n      & + .hs-form-field {\n        margin-top: 24px;\n      }\n    }\n    .inputs-list.multi-container {\n      li:nth-last-child(n+6):first-child,\n      li:nth-last-child(n+6):first-child ~ li {\n        width: 100%;\n        float: none;\n        padding-right: 0;\n      }\n      li:nth-last-child(n+6):first-child ~ li:nth-child(even) {\n        padding-left: 0;\n      }\n    }\n    .hs_submit input.hs-button {\n      width: 100%;\n    }\n  }\n}\n\n.hubspot-override--large .hbspt-form {\n  label:not(.hs-form-booleancheckbox-display) {\n    text-transform: uppercase;\n    font-size: 12px;\n    letter-spacing: 0.05em;\n    margin-bottom: 6px;\n  }\n\n  .hs-form-booleancheckbox-display {\n    font-size: 15px;\n  }\n\n  .hs-richtext {\n    p span,\n    p a {\n      font-size: 15px;\n    }\n  }\n\n  .hs-input,\n  input.hs-input {\n    padding: 16px 20px 18px;\n    font-size: 18px;\n  }\n\n  select.hs-input {\n    text-indent: 10px;\n    height: 60px;\n  }\n  @-moz-document url-prefix() {\n    select.hs-input {\n       text-indent: 0;\n    }\n  }\n\n  .hs-error-msgs label {\n    font-size: 11px;\n    letter-spacing: 0;\n    text-transform: none;\n  }\n\n  fieldset.form-columns-2 .hs-form-field {\n    padding: 0 20px;\n  }\n\n  .hs_submit {\n    text-align: center;\n    padding-top: 18px;\n  }\n\n  .hs_submit input.hs-button {\n    padding: 22px 27px 24px;\n    border-radius: 6px;\n  }\n\n  @media (max-width: $screen-sm) {\n    fieldset.form-columns-2 .hs-form-field {\n      padding: 0;\n    }\n  }\n}\n\n.hubspot-override--measure {\n  max-width: 748px;\n  margin-left: auto;\n  margin-right: auto;\n}\n"
  },
  {
    "path": "assets/scss/components/_jquery_UI.scss",
    "content": "/*! jQuery UI - v1.12.1 - 2016-11-14\n* http://jqueryui.com\n* Includes: draggable.css, theme.css\n* To view and modify this theme, visit http://jqueryui.com/themeroller/?scope=&folderName=base&cornerRadiusShadow=8px&offsetLeftShadow=0px&offsetTopShadow=0px&thicknessShadow=5px&opacityShadow=30&bgImgOpacityShadow=0&bgTextureShadow=flat&bgColorShadow=666666&opacityOverlay=30&bgImgOpacityOverlay=0&bgTextureOverlay=flat&bgColorOverlay=aaaaaa&iconColorError=cc0000&fcError=5f3f3f&borderColorError=f1a899&bgTextureError=flat&bgColorError=fddfdf&iconColorHighlight=777620&fcHighlight=777620&borderColorHighlight=dad55e&bgTextureHighlight=flat&bgColorHighlight=fffa90&iconColorActive=ffffff&fcActive=ffffff&borderColorActive=003eff&bgTextureActive=flat&bgColorActive=007fff&iconColorHover=555555&fcHover=2b2b2b&borderColorHover=cccccc&bgTextureHover=flat&bgColorHover=ededed&iconColorDefault=777777&fcDefault=454545&borderColorDefault=c5c5c5&bgTextureDefault=flat&bgColorDefault=f6f6f6&iconColorContent=444444&fcContent=333333&borderColorContent=dddddd&bgTextureContent=flat&bgColorContent=ffffff&iconColorHeader=444444&fcHeader=333333&borderColorHeader=dddddd&bgTextureHeader=flat&bgColorHeader=e9e9e9&cornerRadius=3px&fwDefault=normal&fsDefault=1em&ffDefault=Arial%2CHelvetica%2Csans-serif\n* Copyright jQuery Foundation and other contributors; Licensed MIT */\n\n.ui-draggable-handle {\n\t-ms-touch-action: none;\n\ttouch-action: none;\n}\n\n/* Component containers\n----------------------------------*/\n.ui-widget {\n\tfont-family: Arial,Helvetica,sans-serif;\n\tfont-size: 1em;\n}\n.ui-widget .ui-widget {\n\tfont-size: 1em;\n}\n.ui-widget input,\n.ui-widget select,\n.ui-widget textarea,\n.ui-widget button {\n\tfont-family: Arial,Helvetica,sans-serif;\n\tfont-size: 1em;\n}\n.ui-widget.ui-widget-content {\n\tborder: 1px solid #c5c5c5;\n}\n.ui-widget-content {\n\tborder: 1px solid #dddddd;\n\tbackground: #ffffff;\n\tcolor: #333333;\n}\n.ui-widget-content a {\n\tcolor: #333333;\n}\n.ui-widget-header {\n\tborder: 1px solid #dddddd;\n\tbackground: #e9e9e9;\n\tcolor: #333333;\n\tfont-weight: bold;\n}\n.ui-widget-header a {\n\tcolor: #333333;\n}\n\n/* Interaction states\n----------------------------------*/\n.ui-state-default,\n.ui-widget-content .ui-state-default,\n.ui-widget-header .ui-state-default,\n.ui-button,\n\n/* We use html here because we need a greater specificity to make sure disabled\nworks properly when clicked or hovered */\nhtml .ui-button.ui-state-disabled:hover,\nhtml .ui-button.ui-state-disabled:active {\n\tborder: 1px solid #c5c5c5;\n\tbackground: #f6f6f6;\n\tfont-weight: normal;\n\tcolor: #454545;\n}\n.ui-state-default a,\n.ui-state-default a:link,\n.ui-state-default a:visited,\na.ui-button,\na:link.ui-button,\na:visited.ui-button,\n.ui-button {\n\tcolor: #454545;\n\ttext-decoration: none;\n}\n.ui-state-hover,\n.ui-widget-content .ui-state-hover,\n.ui-widget-header .ui-state-hover,\n.ui-state-focus,\n.ui-widget-content .ui-state-focus,\n.ui-widget-header .ui-state-focus,\n.ui-button:hover,\n.ui-button:focus {\n\tborder: 1px solid #cccccc;\n\tbackground: #ededed;\n\tfont-weight: normal;\n\tcolor: #2b2b2b;\n}\n.ui-state-hover a,\n.ui-state-hover a:hover,\n.ui-state-hover a:link,\n.ui-state-hover a:visited,\n.ui-state-focus a,\n.ui-state-focus a:hover,\n.ui-state-focus a:link,\n.ui-state-focus a:visited,\na.ui-button:hover,\na.ui-button:focus {\n\tcolor: #2b2b2b;\n\ttext-decoration: none;\n}\n\n.ui-visual-focus {\n\tbox-shadow: 0 0 3px 1px rgb(94, 158, 214);\n}\n.ui-state-active,\n.ui-widget-content .ui-state-active,\n.ui-widget-header .ui-state-active,\na.ui-button:active,\n.ui-button:active,\n.ui-button.ui-state-active:hover {\n\tborder: 1px solid #003eff;\n\tbackground: #007fff;\n\tfont-weight: normal;\n\tcolor: #ffffff;\n}\n.ui-icon-background,\n.ui-state-active .ui-icon-background {\n\tborder: #003eff;\n\tbackground-color: #ffffff;\n}\n.ui-state-active a,\n.ui-state-active a:link,\n.ui-state-active a:visited {\n\tcolor: #ffffff;\n\ttext-decoration: none;\n}\n\n/* Interaction Cues\n----------------------------------*/\n.ui-state-highlight,\n.ui-widget-content .ui-state-highlight,\n.ui-widget-header .ui-state-highlight {\n\tborder: 1px solid #dad55e;\n\tbackground: #fffa90;\n\tcolor: #777620;\n}\n.ui-state-checked {\n\tborder: 1px solid #dad55e;\n\tbackground: #fffa90;\n}\n.ui-state-highlight a,\n.ui-widget-content .ui-state-highlight a,\n.ui-widget-header .ui-state-highlight a {\n\tcolor: #777620;\n}\n.ui-state-error,\n.ui-widget-content .ui-state-error,\n.ui-widget-header .ui-state-error {\n\tborder: 1px solid #f1a899;\n\tbackground: #fddfdf;\n\tcolor: #5f3f3f;\n}\n.ui-state-error a,\n.ui-widget-content .ui-state-error a,\n.ui-widget-header .ui-state-error a {\n\tcolor: #5f3f3f;\n}\n.ui-state-error-text,\n.ui-widget-content .ui-state-error-text,\n.ui-widget-header .ui-state-error-text {\n\tcolor: #5f3f3f;\n}\n.ui-priority-primary,\n.ui-widget-content .ui-priority-primary,\n.ui-widget-header .ui-priority-primary {\n\tfont-weight: bold;\n}\n.ui-priority-secondary,\n.ui-widget-content .ui-priority-secondary,\n.ui-widget-header .ui-priority-secondary {\n\topacity: .7;\n\tfilter:Alpha(Opacity=70); /* support: IE8 */\n\tfont-weight: normal;\n}\n.ui-state-disabled,\n.ui-widget-content .ui-state-disabled,\n.ui-widget-header .ui-state-disabled {\n\topacity: .35;\n\tfilter:Alpha(Opacity=35); /* support: IE8 */\n\tbackground-image: none;\n}\n.ui-state-disabled .ui-icon {\n\tfilter:Alpha(Opacity=35); /* support: IE8 - See #6059 */\n}\n\n/* Icons\n----------------------------------*/\n\n/* states and images */\n.ui-icon {\n\twidth: 16px;\n\theight: 16px;\n}\n.ui-icon,\n.ui-widget-content .ui-icon {\n\tbackground-image: url(\"images/ui-icons_444444_256x240.png\");\n}\n.ui-widget-header .ui-icon {\n\tbackground-image: url(\"images/ui-icons_444444_256x240.png\");\n}\n.ui-state-hover .ui-icon,\n.ui-state-focus .ui-icon,\n.ui-button:hover .ui-icon,\n.ui-button:focus .ui-icon {\n\tbackground-image: url(\"images/ui-icons_555555_256x240.png\");\n}\n.ui-state-active .ui-icon,\n.ui-button:active .ui-icon {\n\tbackground-image: url(\"images/ui-icons_ffffff_256x240.png\");\n}\n.ui-state-highlight .ui-icon,\n.ui-button .ui-state-highlight.ui-icon {\n\tbackground-image: url(\"images/ui-icons_777620_256x240.png\");\n}\n.ui-state-error .ui-icon,\n.ui-state-error-text .ui-icon {\n\tbackground-image: url(\"images/ui-icons_cc0000_256x240.png\");\n}\n.ui-button .ui-icon {\n\tbackground-image: url(\"images/ui-icons_777777_256x240.png\");\n}\n\n/* positioning */\n.ui-icon-blank { background-position: 16px 16px; }\n.ui-icon-caret-1-n { background-position: 0 0; }\n.ui-icon-caret-1-ne { background-position: -16px 0; }\n.ui-icon-caret-1-e { background-position: -32px 0; }\n.ui-icon-caret-1-se { background-position: -48px 0; }\n.ui-icon-caret-1-s { background-position: -65px 0; }\n.ui-icon-caret-1-sw { background-position: -80px 0; }\n.ui-icon-caret-1-w { background-position: -96px 0; }\n.ui-icon-caret-1-nw { background-position: -112px 0; }\n.ui-icon-caret-2-n-s { background-position: -128px 0; }\n.ui-icon-caret-2-e-w { background-position: -144px 0; }\n.ui-icon-triangle-1-n { background-position: 0 -16px; }\n.ui-icon-triangle-1-ne { background-position: -16px -16px; }\n.ui-icon-triangle-1-e { background-position: -32px -16px; }\n.ui-icon-triangle-1-se { background-position: -48px -16px; }\n.ui-icon-triangle-1-s { background-position: -65px -16px; }\n.ui-icon-triangle-1-sw { background-position: -80px -16px; }\n.ui-icon-triangle-1-w { background-position: -96px -16px; }\n.ui-icon-triangle-1-nw { background-position: -112px -16px; }\n.ui-icon-triangle-2-n-s { background-position: -128px -16px; }\n.ui-icon-triangle-2-e-w { background-position: -144px -16px; }\n.ui-icon-arrow-1-n { background-position: 0 -32px; }\n.ui-icon-arrow-1-ne { background-position: -16px -32px; }\n.ui-icon-arrow-1-e { background-position: -32px -32px; }\n.ui-icon-arrow-1-se { background-position: -48px -32px; }\n.ui-icon-arrow-1-s { background-position: -65px -32px; }\n.ui-icon-arrow-1-sw { background-position: -80px -32px; }\n.ui-icon-arrow-1-w { background-position: -96px -32px; }\n.ui-icon-arrow-1-nw { background-position: -112px -32px; }\n.ui-icon-arrow-2-n-s { background-position: -128px -32px; }\n.ui-icon-arrow-2-ne-sw { background-position: -144px -32px; }\n.ui-icon-arrow-2-e-w { background-position: -160px -32px; }\n.ui-icon-arrow-2-se-nw { background-position: -176px -32px; }\n.ui-icon-arrowstop-1-n { background-position: -192px -32px; }\n.ui-icon-arrowstop-1-e { background-position: -208px -32px; }\n.ui-icon-arrowstop-1-s { background-position: -224px -32px; }\n.ui-icon-arrowstop-1-w { background-position: -240px -32px; }\n.ui-icon-arrowthick-1-n { background-position: 1px -48px; }\n.ui-icon-arrowthick-1-ne { background-position: -16px -48px; }\n.ui-icon-arrowthick-1-e { background-position: -32px -48px; }\n.ui-icon-arrowthick-1-se { background-position: -48px -48px; }\n.ui-icon-arrowthick-1-s { background-position: -64px -48px; }\n.ui-icon-arrowthick-1-sw { background-position: -80px -48px; }\n.ui-icon-arrowthick-1-w { background-position: -96px -48px; }\n.ui-icon-arrowthick-1-nw { background-position: -112px -48px; }\n.ui-icon-arrowthick-2-n-s { background-position: -128px -48px; }\n.ui-icon-arrowthick-2-ne-sw { background-position: -144px -48px; }\n.ui-icon-arrowthick-2-e-w { background-position: -160px -48px; }\n.ui-icon-arrowthick-2-se-nw { background-position: -176px -48px; }\n.ui-icon-arrowthickstop-1-n { background-position: -192px -48px; }\n.ui-icon-arrowthickstop-1-e { background-position: -208px -48px; }\n.ui-icon-arrowthickstop-1-s { background-position: -224px -48px; }\n.ui-icon-arrowthickstop-1-w { background-position: -240px -48px; }\n.ui-icon-arrowreturnthick-1-w { background-position: 0 -64px; }\n.ui-icon-arrowreturnthick-1-n { background-position: -16px -64px; }\n.ui-icon-arrowreturnthick-1-e { background-position: -32px -64px; }\n.ui-icon-arrowreturnthick-1-s { background-position: -48px -64px; }\n.ui-icon-arrowreturn-1-w { background-position: -64px -64px; }\n.ui-icon-arrowreturn-1-n { background-position: -80px -64px; }\n.ui-icon-arrowreturn-1-e { background-position: -96px -64px; }\n.ui-icon-arrowreturn-1-s { background-position: -112px -64px; }\n.ui-icon-arrowrefresh-1-w { background-position: -128px -64px; }\n.ui-icon-arrowrefresh-1-n { background-position: -144px -64px; }\n.ui-icon-arrowrefresh-1-e { background-position: -160px -64px; }\n.ui-icon-arrowrefresh-1-s { background-position: -176px -64px; }\n.ui-icon-arrow-4 { background-position: 0 -80px; }\n.ui-icon-arrow-4-diag { background-position: -16px -80px; }\n.ui-icon-extlink { background-position: -32px -80px; }\n.ui-icon-newwin { background-position: -48px -80px; }\n.ui-icon-refresh { background-position: -64px -80px; }\n.ui-icon-shuffle { background-position: -80px -80px; }\n.ui-icon-transfer-e-w { background-position: -96px -80px; }\n.ui-icon-transferthick-e-w { background-position: -112px -80px; }\n.ui-icon-folder-collapsed { background-position: 0 -96px; }\n.ui-icon-folder-open { background-position: -16px -96px; }\n.ui-icon-document { background-position: -32px -96px; }\n.ui-icon-document-b { background-position: -48px -96px; }\n.ui-icon-note { background-position: -64px -96px; }\n.ui-icon-mail-closed { background-position: -80px -96px; }\n.ui-icon-mail-open { background-position: -96px -96px; }\n.ui-icon-suitcase { background-position: -112px -96px; }\n.ui-icon-comment { background-position: -128px -96px; }\n.ui-icon-person { background-position: -144px -96px; }\n.ui-icon-print { background-position: -160px -96px; }\n.ui-icon-trash { background-position: -176px -96px; }\n.ui-icon-locked { background-position: -192px -96px; }\n.ui-icon-unlocked { background-position: -208px -96px; }\n.ui-icon-bookmark { background-position: -224px -96px; }\n.ui-icon-tag { background-position: -240px -96px; }\n.ui-icon-home { background-position: 0 -112px; }\n.ui-icon-flag { background-position: -16px -112px; }\n.ui-icon-calendar { background-position: -32px -112px; }\n.ui-icon-cart { background-position: -48px -112px; }\n.ui-icon-pencil { background-position: -64px -112px; }\n.ui-icon-clock { background-position: -80px -112px; }\n.ui-icon-disk { background-position: -96px -112px; }\n.ui-icon-calculator { background-position: -112px -112px; }\n.ui-icon-zoomin { background-position: -128px -112px; }\n.ui-icon-zoomout { background-position: -144px -112px; }\n.ui-icon-search { background-position: -160px -112px; }\n.ui-icon-wrench { background-position: -176px -112px; }\n.ui-icon-gear { background-position: -192px -112px; }\n.ui-icon-heart { background-position: -208px -112px; }\n.ui-icon-star { background-position: -224px -112px; }\n.ui-icon-link { background-position: -240px -112px; }\n.ui-icon-cancel { background-position: 0 -128px; }\n.ui-icon-plus { background-position: -16px -128px; }\n.ui-icon-plusthick { background-position: -32px -128px; }\n.ui-icon-minus { background-position: -48px -128px; }\n.ui-icon-minusthick { background-position: -64px -128px; }\n.ui-icon-close { background-position: -80px -128px; }\n.ui-icon-closethick { background-position: -96px -128px; }\n.ui-icon-key { background-position: -112px -128px; }\n.ui-icon-lightbulb { background-position: -128px -128px; }\n.ui-icon-scissors { background-position: -144px -128px; }\n.ui-icon-clipboard { background-position: -160px -128px; }\n.ui-icon-copy { background-position: -176px -128px; }\n.ui-icon-contact { background-position: -192px -128px; }\n.ui-icon-image { background-position: -208px -128px; }\n.ui-icon-video { background-position: -224px -128px; }\n.ui-icon-script { background-position: -240px -128px; }\n.ui-icon-alert { background-position: 0 -144px; }\n.ui-icon-info { background-position: -16px -144px; }\n.ui-icon-notice { background-position: -32px -144px; }\n.ui-icon-help { background-position: -48px -144px; }\n.ui-icon-check { background-position: -64px -144px; }\n.ui-icon-bullet { background-position: -80px -144px; }\n.ui-icon-radio-on { background-position: -96px -144px; }\n.ui-icon-radio-off { background-position: -112px -144px; }\n.ui-icon-pin-w { background-position: -128px -144px; }\n.ui-icon-pin-s { background-position: -144px -144px; }\n.ui-icon-play { background-position: 0 -160px; }\n.ui-icon-pause { background-position: -16px -160px; }\n.ui-icon-seek-next { background-position: -32px -160px; }\n.ui-icon-seek-prev { background-position: -48px -160px; }\n.ui-icon-seek-end { background-position: -64px -160px; }\n.ui-icon-seek-start { background-position: -80px -160px; }\n/* ui-icon-seek-first is deprecated, use ui-icon-seek-start instead */\n.ui-icon-seek-first { background-position: -80px -160px; }\n.ui-icon-stop { background-position: -96px -160px; }\n.ui-icon-eject { background-position: -112px -160px; }\n.ui-icon-volume-off { background-position: -128px -160px; }\n.ui-icon-volume-on { background-position: -144px -160px; }\n.ui-icon-power { background-position: 0 -176px; }\n.ui-icon-signal-diag { background-position: -16px -176px; }\n.ui-icon-signal { background-position: -32px -176px; }\n.ui-icon-battery-0 { background-position: -48px -176px; }\n.ui-icon-battery-1 { background-position: -64px -176px; }\n.ui-icon-battery-2 { background-position: -80px -176px; }\n.ui-icon-battery-3 { background-position: -96px -176px; }\n.ui-icon-circle-plus { background-position: 0 -192px; }\n.ui-icon-circle-minus { background-position: -16px -192px; }\n.ui-icon-circle-close { background-position: -32px -192px; }\n.ui-icon-circle-triangle-e { background-position: -48px -192px; }\n.ui-icon-circle-triangle-s { background-position: -64px -192px; }\n.ui-icon-circle-triangle-w { background-position: -80px -192px; }\n.ui-icon-circle-triangle-n { background-position: -96px -192px; }\n.ui-icon-circle-arrow-e { background-position: -112px -192px; }\n.ui-icon-circle-arrow-s { background-position: -128px -192px; }\n.ui-icon-circle-arrow-w { background-position: -144px -192px; }\n.ui-icon-circle-arrow-n { background-position: -160px -192px; }\n.ui-icon-circle-zoomin { background-position: -176px -192px; }\n.ui-icon-circle-zoomout { background-position: -192px -192px; }\n.ui-icon-circle-check { background-position: -208px -192px; }\n.ui-icon-circlesmall-plus { background-position: 0 -208px; }\n.ui-icon-circlesmall-minus { background-position: -16px -208px; }\n.ui-icon-circlesmall-close { background-position: -32px -208px; }\n.ui-icon-squaresmall-plus { background-position: -48px -208px; }\n.ui-icon-squaresmall-minus { background-position: -64px -208px; }\n.ui-icon-squaresmall-close { background-position: -80px -208px; }\n.ui-icon-grip-dotted-vertical { background-position: 0 -224px; }\n.ui-icon-grip-dotted-horizontal { background-position: -16px -224px; }\n.ui-icon-grip-solid-vertical { background-position: -32px -224px; }\n.ui-icon-grip-solid-horizontal { background-position: -48px -224px; }\n.ui-icon-gripsmall-diagonal-se { background-position: -64px -224px; }\n.ui-icon-grip-diagonal-se { background-position: -80px -224px; }\n\n\n/* Misc visuals\n----------------------------------*/\n\n/* Corner radius */\n.ui-corner-all,\n.ui-corner-top,\n.ui-corner-left,\n.ui-corner-tl {\n\tborder-top-left-radius: 3px;\n}\n.ui-corner-all,\n.ui-corner-top,\n.ui-corner-right,\n.ui-corner-tr {\n\tborder-top-right-radius: 3px;\n}\n.ui-corner-all,\n.ui-corner-bottom,\n.ui-corner-left,\n.ui-corner-bl {\n\tborder-bottom-left-radius: 3px;\n}\n.ui-corner-all,\n.ui-corner-bottom,\n.ui-corner-right,\n.ui-corner-br {\n\tborder-bottom-right-radius: 3px;\n}\n\n/* Overlays */\n.ui-widget-overlay {\n\tbackground: #aaaaaa;\n\topacity: .3;\n\tfilter: Alpha(Opacity=30); /* support: IE8 */\n}\n.ui-widget-shadow {\n\t-webkit-box-shadow: 0px 0px 5px #666666;\n\tbox-shadow: 0px 0px 5px #666666;\n}\n"
  },
  {
    "path": "assets/scss/components/_mobile-nav.scss",
    "content": ".mobile-nav {\n  transition: opacity 0.4s;\n  position: fixed;\n  z-index: 99999;\n  top: 0;\n  right: 0;\n  left: 0;\n  bottom: 0;\n  background: #fff;\n  display: none;\n  overflow: touch;\n\n  &.open {\n    animation-name: revealIn;\n    animation-duration: 0.2s;\n    animation-fill-mode: forwards;\n    animation-timing-function: cubic-bezier(0.19, 1, 0.22, 1);\n  }\n\n  &.closed {\n    animation-name: revealOut;\n    animation-duration: 0.2s;\n    animation-fill-mode: forwards;\n  }\n\n  @keyframes revealIn {\n    from {\n      opacity: 0;\n    }\n    to {\n      opacity: 1;\n    }\n  }\n\n  @keyframes revealOut {\n    from {\n      opacity: 1;\n    }\n    to {\n      opacity: 0;\n    }\n  }\n}\n\n.mobile-nav__wrapper {\n  position: relative;\n  width: 100%;\n  height: 100vh;\n  overflow: auto;\n  -webkit-overflow-scrolling: touch;\n}\n\n.mobile-nav__menu {\n  margin: 0;\n  padding: 0;\n  //deal with ie edge bug always rendering bullets\n  list-style: none;\n  list-style-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mNkYAAAAAYAAjCB0C8AAAAASUVORK5CYII=);\n  list-style-type: none;\n  max-width: 312px;\n  margin-left: auto;\n  margin-right: auto;\n  padding-top: 59px;\n  padding-bottom: 160px;\n\n  h6 {\n    font-size: 22px;\n    line-height: 37px;\n    letter-spacing: -0.02em;\n    color: #020814;\n    margin-bottom: 0;\n\n    + .mobile-nav__menuitem {\n      margin-top: 2px;\n    }\n  }\n\n  .open & {\n    animation-name: navMenuIn;\n    animation-duration: 0.2s;\n    animation-fill-mode: forwards;\n    animation-delay: 0.1s;\n    opacity: 0;\n  }\n\n  .closed & {\n    animation-name: navMenuOut;\n    animation-duration: 0.2s;\n    animation-fill-mode: forwards;\n  }\n\n  @keyframes navMenuIn {\n    from {\n      transform: translateY(-6px);\n      opacity: 0;\n    }\n    to {\n      transform: translateY(0);\n      opacity: 1;\n    }\n  }\n\n  @keyframes navMenuOut {\n    from {\n      transform: translateY(0);\n      opacity: 1;\n    }\n    to {\n      transform: translateY(-6px);\n      opacity: 0;\n    }\n  }\n}\n\n.mobile-nav--enterprise .mobile-nav__menu {\n  height: 100%;\n  flex-direction: column;\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  padding-top: 0;\n  padding-bottom: 0;\n}\n\n.mobile-nav__menuitem {\n  position: relative;\n  font-family: $font-family-inter;\n  font-style: normal;\n  font-weight: normal;\n  font-size: 20px;\n  line-height: 34px;\n  letter-spacing: -0.02em;\n  margin-top: 8px;\n\n  & + h6 {\n    margin-top: 23px;\n  }\n\n  a {\n    width: 100%;\n    color: #414d5c;\n    display: inline-block;\n  }\n}\n\n.mobile-nav__menuitem--small {\n  font-size: 18px;\n  line-height: 1;\n  font-weight: 600;\n  margin-top: 26px;\n\n  .mobile-nav__menuitem + & {\n    margin-top: 56px;\n  }\n\n  a {\n    width: 100%;\n    display: inline-block;\n    color: #5977a8;\n  }\n}\n\n.mobile-nav__social {\n  display: flex;\n  flex-wrap: wrap;\n  justify-content: space-between;\n  margin-top: 28px;\n\n  a {\n    color: #bfc8da;\n    font-size: 28px;\n  }\n}\n\n.mobile-nav__logo {\n  position: absolute;\n  top: 9px;\n  left: 20px;\n  fill: #000;\n  z-index: 2;\n  margin: 0;\n}\n\n.mobile-nav__close {\n  cursor: pointer;\n  position: fixed;\n  top: 15px;\n  right: 15px;\n  opacity: 0.4;\n  transition: opacity 0.3s;\n  z-index: 2;\n\n  &:hover {\n    opacity: 1;\n  }\n\n  svg {\n    width: 14px;\n    height: 14px;\n    fill: #5977a8;\n    margin: 0;\n  }\n}\n\n.mobile-nav__footer {\n  background-color: #f6f8fe;\n  position: fixed;\n  left: 0;\n  bottom: 0;\n  right: 0;\n  padding: 14px;\n  display: flex;\n  justify-content: flex-end;\n\n  a {\n    font-weight: 700;\n  }\n\n  a + .btn {\n    margin-left: 12px;\n  }\n\n  & > div {\n  }\n\n  .btn {\n    font-size: 16px;\n    font-weight: 600;\n    padding: 12px 14px 10px;\n    vertical-align: middle;\n    margin-right: 0;\n    background: #4d8dff;\n    border-radius: 8px;\n  }\n\n  .open & {\n    animation-name: navFooterIn;\n    animation-duration: 0.6s;\n    animation-fill-mode: forwards;\n    animation-delay: 0.1s;\n    animation-timing-function: cubic-bezier(0.19, 1, 0.22, 1);\n    transform: translateY(100%);\n    opacity: 0;\n  }\n\n  .closed & {\n    animation-name: navFooterOut;\n    animation-duration: 0.2s;\n    animation-fill-mode: forwards;\n  }\n\n  @keyframes navFooterIn {\n    from {\n      transform: translateY(100%);\n      opacity: 0;\n    }\n    to {\n      transform: translateY(0);\n      opacity: 1;\n    }\n  }\n\n  @keyframes navFooterOut {\n    from {\n      transform: translateY(0);\n      opacity: 1;\n    }\n    to {\n      transform: translateY(6px);\n      opacity: 0;\n    }\n  }\n}\n\n.mobile-nav--enterprise .mobile-nav__footer {\n  background: #f9f9f9;\n  justify-content: center;\n\n  a {\n    line-height: normal;\n    font-weight: 600;\n    font-size: 11px;\n    letter-spacing: 0.05em;\n    color: #3880ff;\n    text-transform: uppercase;\n  }\n\n  ion-icon {\n    color: rgba(56, 128, 255, 0.7);\n    font-size: 12px;\n    height: 12px;\n    width: 12px;\n    display: inline-block;\n    vertical-align: -2px;\n    opacity: 0;\n    transition: 0.2s transform ease, 0.2s opacity;\n    margin-right: 4px;\n\n    &.hydrated {\n      opacity: 1;\n    }\n  }\n}\n"
  },
  {
    "path": "assets/scss/components/_modal.scss",
    "content": ".modal {\n  .control-label {\n    font-weight: 600;\n  }\n\n  .form-control {\n    font-weight: 500;\n  }\n\n  .close,\n  .go-back {\n    position: absolute;\n    top: -10px;\n    right: -10px;\n    background: white;\n    border: 0;\n    border-radius: 50%;\n    height: 30px;\n    width: 30px;\n    box-shadow: 1px 1px 5px rgba(0,0,0,.5);\n    outline: none;\n\n    &::before {\n      font-family: 'Ionicons';\n      content: '\\f2c0';\n      display: block;\n      color: $dark-grey;\n      font-size: 20px;\n    }\n\n    span {\n      display: none;\n    }\n  }\n\n  .go-back {\n    right: auto;\n    left: -10px;\n\n    &::before {\n      content: '\\f27d';\n    }\n  }\n\n  &.fullscreen {\n    .container {\n      position: relative;\n    }\n\n    .close {\n      right: 36px;\n      top: 27px;\n      box-shadow: none;\n      background: #ebeff5;\n\n      &::before {\n        color: #838fa5;\n      }\n    }\n\n    .modal-dialog {\n      width: 651px;\n      transform: translate(0, -10%);\n      transition: transform .5s cubic-bezier(0,0,0,1);\n    }\n\n    &.in .modal-dialog {\n      transform: translate(0, 0);\n    }\n\n    .modal-content {\n      box-shadow: none;\n      border: 0;\n      background: transparent;\n    }\n  }\n\n  &--form {\n    .modal-dialog {\n      width: 672px;\n      max-width: calc(100% - 24px);\n    }\n  \n    .modal-body {\n      padding: 48px;\n    }\n  \n    hgroup {\n      margin: 0 0 16px;\n      padding: 0;\n      text-align: left;\n    }\n  \n    h2 {\n      font-size: 32px;\n      line-height: 38px;\n    }\n  \n    p {\n      font-size: 16px !important;\n      line-height: 26px !important;\n      letter-spacing: -0.02em !important;\n    }\n  \n    form {\n      max-width: 100%;\n    }\n  \n    .actions {\n      text-align: right;\n  \n      input {\n        width: auto;\n        background: $blue-800;\n        border-radius: 10px;\n        font-size: 15px;\n        line-height: 21px;\n        letter-spacing: 0.08em;\n        text-transform: uppercase;\n        padding: 14px 18px;\n        min-height: auto;\n        height: auto;\n        \n        &::after {\n          background-image: url('data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\" class=\"s-ion-icon\"><path d=\"M294.1 256L167 129c-9.4-9.4-9.4-24.6 0-33.9s24.6-9.3 34 0L345 239c9.1 9.1 9.3 23.7.7 33.1L201.1 417c-4.7 4.7-10.9 7-17 7s-12.3-2.3-17-7c-9.4-9.4-9.4-24.6 0-33.9l127-127.1z\"></path></svg>');\n          background-size: 100%;\n          content: '';\n          height: 20px;\n          width: 20px;\n          display: block;\n          margin-left: 8px;\n          transform: translateY(-1px);\n        }\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "assets/scss/components/_pre-header.scss",
    "content": ".pre-header {\n  font-family: $font-family-inter;\n  background: #F8FAFC;\n    box-shadow: 0 1px 0px 0 rgba(0,20,56,.06);\n    position: relative;\n    z-index: 999;\n    padding: 6px 0 7px;\n    text-align: center;\n    color: #73849A;\n\n  .container {\n    position: relative;\n    font-size: 11px;\n    line-height: 1.8em;\n    font-weight: 400;\n    letter-spacing: -.01em;\n\n    &:before,\n    &:after {\n      display: none;\n    }\n  }\n\n\n  #btn-header-announcement {\n    color: #fff;\n    border-radius: 16px;\n    margin-left: 12px;\n    padding: 6px 8px 5px;\n    font-weight: 600;\n    font-size: 9px;\n    text-transform: uppercase;\n    vertical-align: 0;\n    white-space: nowrap;\n    letter-spacing: 0;\n    transition: .2s background-color, .2s box-shadow;\n    background: linear-gradient(68.35deg, #4CC3FF 0%, #4172FF 100%);\n    box-shadow: 0px 1px 0px rgba(0, 0, 0, 0.06);\n    font-size: 10px;\n    padding: 5px 10px;\n    margin-left: 24px;\n    line-height: 1;\n\n    &:hover {\n      background-color: lighten(#73a5ff, 5);\n      // background-color: lighten(#30427e, 5);\n      box-shadow: 0 1px 2px rgba(black, .1);\n    }\n  }\n  #optimizely {\n    transition: .2s opacity;\n  }\n\n  p {\n    display: inline;\n  }\n\n  strong {\n    font-weight: 600;\n    color: #020814;\n  }\n\n  a{\n    background-color: #73a5ff;\n    color: #fff;\n    border-radius: 16px;\n    margin-left: 12px;\n    padding: 6px 8px 5px;\n    font-weight: 600;\n    font-size: 9px;\n    text-transform: uppercase;\n    vertical-align: 0;\n    white-space: pre;\n    letter-spacing: .02em;\n    transition: .2s background-color, .2s box-shadow;\n\n    &::after {\n      font-family: 'Ionicons';\n      content: '\\f3d1';\n      margin-left: 3px;\n    }\n\n    &:hover {\n      background-color: lighten(#73a5ff, 5);\n      // background-color: lighten(#30427e, 5);\n      box-shadow: 0 1px 2px rgba(black, .1);\n    }\n  }\n\n  @media (max-width: $screen-xs-max) {\n    display: none;\n  }\n\n  &.back {\n    background: #F9F9F9;\n    text-align: left;\n    box-shadow: none;\n    padding: 3px 0;\n\n    a {\n      line-height: normal;\n      font-weight: 600;\n      font-size: 10px;\n      letter-spacing: 0.05em;\n      color: #3880FF;\n      background: none;\n      margin: 0;\n      padding: 10px 0;\n\n      &::after {\n        display: none;\n      }\n\n      ion-icon {\n        color: rgba(56, 128, 255, 0.7);\n        font-size: 12px;\n        height: 12px;\n        width: 12px;\n        display: inline-block;\n        vertical-align: -2px;\n        opacity: 0;\n        transition: .2s transform ease, .2s opacity;\n        margin-right: 4px;\n\n        &.hydrated {\n          opacity: 1;\n        }\n      }\n\n      &:hover {\n        box-shadow: none;\n\n        ion-icon {\n          transform: translateX(-2px);\n        }\n      }\n    }\n  }\n\n  &--ioniconf-2022 {\n    background-color: #000715;\n    background-image: url('/img/announcement-bar/bg-ioniconf-2022.png');\n    background-repeat: no-repeat;\n    background-size: 1800px;\n    background-position: center;\n    color: #DEE3EA;\n    padding: 0 0;\n    overflow: hidden;\n\n    .container > div {\n      align-items: center;\n      display: inline-grid;\n      grid-template-columns: 155px fit-content(100%) fit-content(100%);\n      column-gap: 32px;\n\n      min-height: 74px;\n\n      margin: 0 auto;\n    }\n\n    .container p {\n      font-weight: 500;\n      font-size: 14px;\n      line-height: 1.6;\n\n      color: #fff;\n    }\n\n    #btn-header-announcement {\n      border: none;\n\n      background: none;\n      background-color: #8bfbff;\n      border-radius: 0;\n\n      font-weight: 700;\n      font-size: 12px;\n      line-height: 15px;\n      color: #001a3a;\n\n      padding: 7.5px 12px 9.5px;\n\n      min-height: 32px;\n\n      white-space: nowrap;\n      text-transform: uppercase;\n      letter-spacing: 0.08em;\n\n      transition: background-color 0.2s ease-out;\n    }\n    #btn-header-announcement:hover {\n      background-color: #bbfcff;\n    }\n  }\n}\n"
  },
  {
    "path": "assets/scss/components/_pre_footer.scss",
    "content": "#pre-footer {\n  font-family: $font-family-inter;\n  background: $whiteish;\n  color: #727a87;\n  padding-top: 80px;\n  padding-bottom: 72px;\n\n  ul {\n    list-style: none;\n\n    &::after {\n      content: \"\";\n      clear: both;\n    }\n\n    li {\n      float: left;\n      width: 45%;\n      padding-left: 108px;\n      position: relative;\n\n      &::before {\n        background: url(\"/img/home/icons-lg.png?1\") no-repeat 0 -372px;\n        background-size: 93px;\n        height: 93px;\n        width: 93px;\n        content: \"\";\n        display: block;\n        position: absolute;\n        left: -9px;\n        top: -5px;\n      }\n\n      &::after {\n        border-right: 1px solid #dde1ea;\n        content: \"\";\n        position: absolute;\n        right: -10%;\n        top: 15px;\n        bottom: 15px;\n        display: block;\n      }\n\n      &.explor-docs::before {\n        background-position: 0 -279px;\n      }\n\n      &.forum::before {\n        background-position: 0 -465px;\n      }\n\n      &.blog::before {\n        background-position: 0 -558px;\n      }\n\n      &:last-child {\n        float: right;\n\n        &::after {\n          display: none;\n        }\n      }\n\n      a {\n        font-weight: 600;\n        font-size: 20px;\n        margin-bottom: 5px;\n        letter-spacing: -0.02em;\n\n        &::after {\n          font-family: \"Ionicons\";\n          content: \"\\f287\";\n          font-size: 0.9em;\n          margin-left: 10px;\n          position: relative;\n          display: inline-block;\n          transition: 0.3s transform;\n        }\n\n        &:hover,\n        &:active,\n        &:focus {\n          color: darken($blue, 10);\n          text-decoration: none;\n\n          &::after {\n            transform: translate3d(5px, 0, 0);\n          }\n        }\n      }\n\n      p {\n        font-size: 15px;\n        line-height: 1.6em;\n        color: #727a87;\n        margin-top: 2px;\n        font-weight: 600;\n        letter-spacing: -0.02em;\n      }\n\n      @media (max-width: $screen-xs-max) {\n        float: none;\n        width: 100%;\n\n        &:first-child {\n          margin-bottom: 40px;\n        }\n\n        &::after {\n          display: none;\n        }\n      }\n    }\n  }\n}\n.docs #pre-footer {\n  margin-left: 230px;\n\n  @media (max-width: $screen-xs-max) {\n    margin-left: 0;\n  }\n\n  .container {\n    max-width: 100%;\n  }\n}\n"
  },
  {
    "path": "assets/scss/components/_pro_docs_content.scss",
    "content": "body.docs #snap-bar + #pro-header.navbar {\n  margin-top: 22px;\n}\n\n#pro-header {\n  background: white;\n\n  .container {\n    border-bottom: 1px solid #EEF0F3;\n    padding-bottom: 15px;\n    padding-left: 0;\n    padding-right: 0;\n  }\n\n  a {\n    color: #737B88;\n  }\n}\n\n#pro-docs {\n  h1, h2, h3, h4, h5 {\n    font-weight: 700;\n  }\n\n  td:not(:first-child), th:not(:first-child) {\n    white-space: inherit;\n  }\n\n  .responsive-side-nav.affix + main,\n  .responsive-side-nav.affix-bottom + main {\n    // The nav bar's width minus it's negative left margin\n    margin-left: 300px;\n\n    @media (max-width: $screen-xs-max) {\n      margin-left: 0;\n    }\n  }\n\n  .responsive-side-nav {\n    background: transparent;\n    //margin-left: -26px;\n\n    &.side-nav ul ul a, &.side-nav ul .capitalize a {\n      height: 28px;\n    }\n\n    ul a::after {\n      border: none !important;\n    }\n\n    a {\n      letter-spacing: -0.01em;\n\n      padding: 0px 0;\n\n      &.active {\n        color: #4a8bfc !important;\n        font-weight: 600 !important;\n      }\n\n      &:hover {\n        color: #3b3f44 !important;\n        font-weight: 600 !important;\n      }\n    }\n\n    & > ul.nested-menu > li > ul > li {\n      margin-bottom: 8px;\n    }\n\n    & > ul.nested-menu > li > ul > li > ul {\n      // Margin in from the icon to the label start of the heading link\n      margin-left: 27px;\n\n      & > li > a {\n        font-size: 13px;\n        color: #50565e;\n        font-weight: 500;\n\n      }\n    }\n\n    & > ul.nested-menu > li > ul > li > ul > li > ul {\n      margin-left: 15px;\n    }\n\n    & > ul#pro-nav.nested-menu > li > ul > li > a {\n      &::before {\n        background-image: url('/img/pro/sidebar-icon-sprite.png');\n        background-repeat: no-repeat;\n        background-color: transparent;\n      }\n    }\n\n    & > ul.nested-menu > li > ul > li > a {\n      &::before {\n        width: 16px;\n        height: 16px;\n        background-size: 100%;\n        display: inline-block;\n        vertical-align: middle;\n        margin-right: 10px;\n        margin-top: -2px;\n        content: '';\n      }\n\n      margin-top: 0;\n      text-transform: none;\n      font-size: 14px;\n      font-weight: 600;\n      color: #24282e;\n      letter-spacing: 0px;\n    }\n\n    @media (max-width: $screen-xs-max) {\n      position: static !important;\n\n      margin-left: 20px;\n      & > ul.nested-menu > li > ul > li > a {\n        &::before {\n          display: none;\n        }\n      }\n    }\n  }\n\n  .pro-intro-link::before { background-position: 0px 0px }\n  .pro-view-link::before { background-position: 0px -48px }\n  .pro-deploy-link::before { background-position: 0px -64px }\n  .pro-package-link::before { background-position: 0px -80px }\n  .pro-monitoring-link::before { background-position: 0px -96px }\n  .pro-devapp-link::before { background-position: 0px -128px }\n  .pro-advanced-link::before { background-position: 0px -160px }\n}\n\n#branch-sms-box {\n  padding: 20px;\n  border: 1px solid #eee;\n  border-radius: 3px;\n  margin-bottom: 20px;\n\n  .btn {\n    font-size: 14px;\n    margin-top: 10px;\n  }\n}\n"
  },
  {
    "path": "assets/scss/components/_resource-card.scss",
    "content": ".resource-card-list {\n  display: flex;\n  flex-wrap: wrap;\n  margin-left: -16px;\n  margin-right: -16px;\n}\n\n.resource-card {\n  padding: 16px;\n}\n\n.resource-card-list--third .resource-card {\n  width: 33.33%;\n}\n\n.resource-card-list--quarter .resource-card {\n  width: 25%;\n}\n\n@media (max-width: $screen-md-min) {\n  .resource-card-list {\n    margin-left: -12px;\n    margin-right: -12px;\n  }\n\n  .resource-card {\n    padding: 12px;\n  }\n\n  .resource-card-list--third .resource-card {\n    width: 100%;\n  }\n\n  .resource-card-list--quarter .resource-card {\n    width: 50%;\n  }\n}\n\n@media (max-width: $screen-sm-min) {\n  .resource-card-list {\n    margin-left: -8px;\n    margin-right: -8px;\n  }\n\n  .resource-card {\n    padding: 8px;\n  }\n}\n\n@media (max-width: 500px) {\n  .resource-card-list--quarter {\n    .resource-card {\n      width: 100%;\n    }\n  }\n}\n\n.resource-card__inner {\n  position: relative;\n  height: 100%;\n}\n\n.resource-card {\n  position: relative;\n  transition: transform 0.3s;\n  height: 272px;\n\n  a {\n    transition: box-shadow 0.4s;\n    display: block;\n    width: 100%;\n    height: 100%;\n    position: absolute;\n    top: 0;\n    left: 0;\n    padding: 18px 22px;\n    border-radius: 16px;\n    background-color: rgb(36, 40, 46);\n    box-shadow: 0px 8px 16px 0px rgba(0, 0, 0, 0.1),\n      0px 2px 4px 0px rgba(0, 0, 0, 0.08);\n    display: flex;\n    flex-direction: column;\n    justify-content: space-between;\n    text-decoration: none;\n    background-repeat: no-repeat;\n    background-size: auto 100%;\n    background-position: bottom right;\n\n    .title {\n      color: #fff;\n      font-weight: 700;\n      font-size: 20px;\n      line-height: 1.4em;\n      margin-top: 0;\n      max-width: 350px;\n    }\n\n    .eyebrow {\n      font-size: 10px;\n      text-transform: uppercase;\n      letter-spacing: 0.1em;\n      color: rgba(#fff, 0.5);\n      font-weight: 700;\n      margin-bottom: 6px;\n      display: inline-block;\n    }\n\n    .action {\n      text-transform: uppercase;\n      font-size: 14px;\n      font-weight: bold;\n      letter-spacing: 0.08em;\n      color: #fff;\n    }\n  }\n\n  &:hover {\n    transform: translateY(-1px);\n  }\n\n  &:hover a {\n    box-shadow: 0px 12px 24px 0px rgba(0, 0, 0, 0.1);\n  }\n}\n\n.resource-card--light {\n  a {\n    background-color: #fff;\n\n    .title {\n      color: rgb(36, 40, 46);\n    }\n\n    .eyebrow {\n      color: rgba(#000, 0.5);\n    }\n\n    .action {\n      color: $blue;\n    }\n  }\n}\n\n.resource-card-large {\n  a {\n    .title {\n      font-size: 24px;\n      line-height: 32px;\n    }\n\n    .eyebrow {\n      margin-bottom: 16px;\n    }\n\n    .action::after {\n      transition: transform 0.3s;\n      font-family: \"Ionicons\";\n      content: \"\\f287\";\n      font-size: 16px;\n      margin-left: 6px;\n      display: inline-block;\n    }\n\n    &:hover .action::after {\n      transform: translate3d(3px, 0, 0);\n    }\n  }\n}\n"
  },
  {
    "path": "assets/scss/components/_resource-promo.scss",
    "content": ""
  },
  {
    "path": "assets/scss/components/_responsive_docs.scss",
    "content": ".responsive-docs-container.docs-container {\n  padding-top: 50px;\n\n  .responsive-side-nav {\n    width: 300px;\n    position: static;\n    overflow-y: auto;\n\n    &.affix-top {\n      position: static;\n      top: 182px;\n    }\n\n    &.affix {\n      position: fixed;\n      top: 15px;\n    }\n\n    &.affix-bottom {\n      position: fixed;\n      top: 15px !important;\n    }\n\n    //width: 100%;\n\n    .nested-menu {\n      padding-top: 0;\n      padding-left: 0;\n    }\n  }\n\n  main {\n    margin-left: 0;\n    padding-top: 0;\n\n    color: #353940;\n    font-weight: 400;\n    font-size: 15px;\n    line-height: 26px;\n\n    p {\n      color: #353940;\n      margin: 1.2em 0 1.6em;\n      font-weight: 400;\n      font-size: 15px;\n      line-height: 26px;\n    }\n\n    h1 {\n      color: #24282e;\n      line-height: 1.4em;\n      margin: 2em 0 1em;\n      font-size: 26px;\n      font-weight: 700;\n      letter-spacing: -0.02em;\n\n      &:first-child {\n        margin-top: 0;\n      }\n    }\n\n    h2 {\n      padding-top: 0em;\n    }\n  }\n}\n"
  },
  {
    "path": "assets/scss/components/_side_nav.scss",
    "content": ".side-nav {\n  position: fixed;\n  background: $whiteish;\n  overflow-y: scroll;\n  top: 0;\n  bottom: 0;\n  z-index: 1;\n  overflow-y: -moz-scrollbars-none;\n  -ms-overflow-style: -ms-autohiding-scrollbar;\n  -webkit-overflow-scrolling: touch;\n  -webkit-touch-callout: none;\n  user-select: none;\n  overflow-y: scroll;\n\n  &::-webkit-scrollbar {\n    display: none;\n    width: 0 !important;\n  }\n\n  .back-to-main {\n    a {\n      padding-top: 5px;\n      border: 1px solid #e6e9ee;\n      padding: 10px 12px 13px;\n      margin-right: 20px;\n      margin-top: -15px;\n      border-radius: 4px;\n      margin-bottom: 10px;\n      text-align: center;\n      transition: 0.2s border-color, 0.2s color, 0.2s background,\n        0.2s box-shadow;\n\n      &::before {\n        font-family: \"Ionicons\";\n        -webkit-font-smoothing: antialiased;\n        content: \"\\f3cf\";\n        font-size: 16px;\n        font-weight: 800;\n        position: relative;\n        padding-right: 5px;\n        top: 2px;\n      }\n\n      &:hover {\n        border-color: #dfe3e8;\n        color: $blue;\n        box-shadow: 0 1px 2px rgba(0, 0, 0, 0.06);\n        background: #fdfdfd;\n      }\n\n      &:focus::after {\n        border-right-color: transparent;\n      }\n    }\n  }\n\n  .form-group {\n    position: relative;\n    border-bottom: 1px solid $light-grey;\n    min-height: 54px;\n\n    &.search {\n      padding: 10px 20px 10px;\n      margin-bottom: 0;\n\n      &:hover::before {\n        color: #a4abb5;\n      }\n\n      &::before {\n        font-family: \"Ionicons\";\n        content: \"\\f4a5\";\n        font-size: 16px;\n        font-weight: 800;\n        color: #bdc3cc;\n        position: absolute;\n        top: 16px;\n        left: 34px;\n        transition: 0.2s color;\n      }\n\n      input {\n        border: 1px solid #e6e9ee;\n        border-radius: 20px;\n        padding: 8px 0 6px 35px;\n        font-size: 13px;\n        font-weight: 500;\n        color: #bdc3cc;\n        box-shadow: none;\n        transition: 0.2s border-color, 0.2s box-shadow;\n\n        &:focus,\n        &:hover {\n          box-shadow: 0 1px 2px rgba(0, 0, 0, 0.1);\n          border-color: $blue;\n        }\n      }\n    }\n\n    select {\n      padding: 17px 20px;\n      display: block;\n      width: 100%;\n      background: none;\n      border-radius: 0;\n      border: 0;\n      outline: none;\n      color: $grey;\n      -webkit-appearance: none;\n      -moz-appearance: none;\n      appearance: none;\n      transition: 0.2s border-color, 0.2s color, 0.2s background,\n        0.2s box-shadow;\n\n      &:hover {\n        border-color: $blue;\n        color: $blue;\n        box-shadow: 0 1px 2px rgba(0, 0, 0, 0.1);\n        background: #fdfdfd;\n      }\n    }\n\n    &:hover {\n      transition: 0.2s border-color;\n\n      &::before {\n        color: $blue;\n      }\n    }\n\n    &.api-select::before {\n      font-family: \"Ionicons\";\n      -webkit-font-smoothing: antialiased;\n      content: \"\\f3d0\";\n      font-size: 14px;\n      font-weight: 800;\n      color: #a4abb5;\n      position: absolute;\n      top: 17px;\n      right: 20px;\n      transition: 0.2s color;\n    }\n  }\n\n  > ul.nested-menu {\n    > li > ul > li > a {\n      color: #9da5b3;\n      text-transform: uppercase;\n      font-size: 10px;\n      font-weight: 700;\n      letter-spacing: 2px;\n      text-decoration: none;\n      display: block;\n      padding: 10px 0;\n      position: relative;\n      cursor: pointer;\n    }\n    > li > ul > li > ul {\n      //margin-left: 20px;\n    }\n  }\n\n  > ul > .active > a {\n    color: #4f5358;\n  }\n\n  ul {\n    list-style: none;\n    padding: 18px 0 20px 20px;\n\n    a {\n      color: $grey;\n      text-transform: uppercase;\n      font-size: 10px;\n      font-weight: 700;\n      letter-spacing: 2px;\n      text-decoration: none;\n      display: block;\n      padding: 10px 0;\n      position: relative;\n      cursor: pointer;\n\n      &::after {\n        display: block;\n        position: absolute;\n        right: 0;\n        top: 0;\n        bottom: 0;\n        content: \"\";\n        border-right: 2px solid $blue;\n        transform: scaleY(0.0001);\n        transition: transform 0.08s ease-in-out;\n      }\n    }\n\n    ul,\n    .capitalize {\n      padding: 0;\n      opacity: 1;\n\n      a {\n        color: $blackish;\n        text-transform: none;\n        font-size: 13px;\n        font-weight: 500;\n        letter-spacing: 0;\n        height: 34px;\n        transition: height cubic-bezier(0.36, 0.66, 0.04, 1) 0.3s,\n          padding cubic-bezier(0.36, 0.66, 0.04, 1) 0.3s, color 0.2s;\n\n        &:empty {\n          display: none;\n        }\n      }\n\n      &.ng-hide-add,\n      &.ng-hide-remove {\n        transition: opacity cubic-bezier(0.36, 0.66, 0.04, 1) 0.3s;\n      }\n\n      &.ng-hide {\n        opacity: 0;\n\n        a {\n          padding: 0;\n          height: 0 !important;\n        }\n      }\n    }\n\n    ul .active > a,\n    .capitalize.active > a,\n    a:hover,\n    .active.top-level > a {\n      color: $blue;\n      text-decoration: none;\n      background: none;\n    }\n\n    ul .active > a::after,\n    .capitalize.active > a::after,\n    a:focus::after,\n    .active.top-level > a::after {\n      transform: scaleY(1);\n      outline: none;\n    }\n  }\n\n  .beta {\n    background: $blue;\n    color: white;\n    font-weight: 700;\n    font-size: 10px;\n    padding: 0 2px;\n    border-radius: 3px;\n    position: relative;\n    top: -2px;\n  }\n\n  .paid {\n    background: $blue;\n    color: white;\n    font-weight: 700;\n    font-size: 10px;\n    padding: 0 2px;\n    border-radius: 3px;\n    position: relative;\n    top: -2px;\n  }\n\n  .v4-beta {\n    margin-top: 7px;\n    display: block;\n    margin-bottom: 14px;\n\n    a {\n      display: block;\n      position: relative;\n      color: #596c8c;\n      padding: 15px 15px 15px 39px;\n      margin-right: 20px;\n\n      > strong,\n      > i,\n      > span {\n        position: relative;\n        z-index: 1;\n      }\n\n      &::before {\n        background: white url(\"/img/docs/ionic-side-icon.png\") no-repeat 0 50%;\n        background-size: 28px;\n        border-radius: 6px;\n        position: absolute;\n        content: \"\";\n        top: 0;\n        right: 0;\n        bottom: 0;\n        left: 0;\n        z-index: 1;\n        box-shadow: 0 2px 8px rgba(black, 0.2);\n        transition: 0.3s box-shadow ease-out;\n      }\n\n      &:hover::before {\n        box-shadow: 0 4px 16px rgba(black, 0.16);\n      }\n    }\n\n    strong {\n      display: block;\n      font-size: 14px;\n      color: #0f1622;\n      font-weight: 600;\n      text-transform: none;\n      letter-spacing: 0.01em;\n    }\n\n    span {\n      font-size: 10px;\n      font-weight: 400;\n      text-transform: none;\n      letter-spacing: 0.01em;\n    }\n\n    a > i {\n      position: absolute;\n      right: 5px;\n      font-size: 18px;\n      color: #d2d6dd;\n      top: calc(50% - 10px);\n    }\n  }\n}\n\nbody:not(.ng-scope) {\n  .side-nav ul a {\n    transition: none;\n  }\n}\n"
  },
  {
    "path": "assets/scss/components/_site-search.scss",
    "content": ".site-search {\n  display: flex;\n  align-items: center;\n  margin-right: 16px;\n}\n\n.site-search__trigger {\n  cursor: pointer;\n\n  svg {\n    transition: fill 0.2s;\n    margin: 0;\n    fill: #a8b0be;\n    width: 16px;\n    height: 16px;\n  }\n\n  &:hover svg {\n    fill: #606c82;\n  }\n}\n\n.site-search__input {\n  display: none;\n}\n"
  },
  {
    "path": "assets/scss/components/_snap_bar.scss",
    "content": "#snap-bar {\n  background: linear-gradient(to right, #07090e, #2f4562);\n  color: rgba(255, 255, 255, .5);\n  padding: 13px 10px 9px;\n  font-weight: 500;\n  font-size: 13px;\n  position: relative;\n  z-index: 10;\n  text-align: center;\n  letter-spacing: .004em;\n\n  strong {\n    margin-right: 3px;\n    font-size: 13px;\n    letter-spacing: .004em;\n    font-weight: 600;\n    color: white;\n  }\n\n  .loading {\n    width: 16px;\n    margin-right: 5px;\n    vertical-align: text-bottom;\n  }\n\n  a {\n    margin-left: 15px;\n    background: #0a0f16;\n    color: #6ab0ff;\n    font-weight: 600;\n    padding: 6px 7px 5px 12px;\n    font-size: 10px;\n    letter-spacing: .09em;\n    text-transform: uppercase;\n    border-radius: 10px;\n    text-decoration: none;\n    transition: .2s color;\n\n    &:hover {\n      color: white;\n      text-decoration: none;\n    }\n  }\n\n  i {\n    font-size: 13px;\n    vertical-align: -1px;\n  }\n\n  + .navbar {\n    margin-top: 6px;\n\n    @media (max-width: $screen-xs-max) {\n      // padding-top: 20px;\n      margin-top:0;\n      position: relative;\n      min-height: 48px;\n    }\n  }\n}\nbody.docs #snap-bar {\n  + .navbar {\n    margin-top: 0;\n\n    @media (max-width: $screen-xs-max) {\n      padding-top: 0;\n    }\n  }\n}\nbody.has-snap {\n  margin-top: 0;\n\n  .side-nav.affix-top {\n    position: absolute;\n    top: 38px;\n  }\n\n  @media (max-width: $screen-xs-max) {\n    margin-top: 0;\n  }\n}\n\nbody.docs #snap-bar ~ .docs-container .side-nav {\n  padding-top: 36px;\n}\n\nionic-snap-bar {\n  &:not(.hydrated) {\n    display: none;\n  }\n\n  @media (max-width: $screen-xs-max) {\n    display: none;\n  }\n}"
  },
  {
    "path": "assets/scss/components/_social_share_sidebar.scss",
    "content": "#social-share-sidebar {\n  right: auto;\n  left: 50px;\n  color: #bac2cf;\n  width: 200px;\n  position: fixed;\n  top: 200px;\n  opacity: 0;\n  pointer-events: none;\n  transition: .5s opacity;\n\n  @media (max-width: 1120px) {\n    display: none;\n  }\n\n\n  &.affix {\n    position: fixed;\n    top: 200px;\n    opacity: 1;\n    pointer-events: all;\n  }\n\n  h4 {\n    text-transform: uppercase;\n    letter-spacing: 0.1em;\n    font-size: 10px;\n    font-weight: 700;\n    color: #bac2cf;\n    margin-bottom: 15px;\n    opacity: 0;\n    animation: .5s fadeIn linear 3s;\n    animation-fill-mode: forwards;\n  }\n\n  ul {\n    list-style: none;\n    padding-left: 0;\n  }\n\n  li {\n    opacity: 0;\n    transform: translateY(20px);\n    animation: .5s fadeInUp linear 3.5s;\n    animation-fill-mode: forwards;\n\n    &:nth-child(2) { animation-delay: 3.8s; }\n    &:nth-child(3) { animation-delay: 4.1s; }\n    &:nth-child(4) { animation-delay: 4.3s; }\n  }\n\n  a {\n    position: relative;\n    width: 20px;\n    height: 20px;\n    display: block;\n    cursor: pointer;\n    margin-bottom: 18px;\n    margin-left: 8px;\n\n    &::before,\n    &::after {\n      background: url('/img/survey/blog-share-icons.png') no-repeat 0 0;\n      background-size: 20px;\n      width: 20px;\n      height: 20px;\n      display: block;\n      content: '';\n      transition: 0.2s opacity;\n    }\n\n    &::after {\n      opacity: 0;\n      position: absolute;\n      top: 0;\n      right: 0;\n      bottom: 0;\n      left: 0;\n    }\n\n    &:hover {\n      &::after {\n        opacity: 1;\n      }\n    }\n\n    &.twitter::after { background-position: 0 -20px; }\n    &.facebook::before { background-position: 0 -40px; }\n    &.facebook::after { background-position: 0 -60px; }\n    &.google-plus::before { background-position: 0 -80px; }\n    &.google-plus::after { background-position: 0 -100px; }\n    &.buffer::before { background-position: 0 -120px; }\n    &.buffer::after { background-position: 0 -140px; }\n  }\n}"
  },
  {
    "path": "assets/scss/components/_sticky-bar.scss",
    "content": "#sticky-bar {\n  box-shadow: 0px 1px 0px #E9EDF3, 0px -1px 0px #E9EDF3;\n  background: white;\n  position: sticky;\n  top: 0;\n  z-index: 1;\n\n  ul {\n    display: flex;\n    justify-content: space-between;\n    padding-top: 17px;\n    padding-bottom: 17px;\n    padding-left: 5px;\n    padding-right: 5px;\n    overflow-x: auto;\n\n    &::before,\n    &::after {\n      display: none;\n    }\n  }\n\n  li {\n    list-style: none;\n\n    &.active a:not(.btn) {\n      color: $blue;\n      font-weight: 600;\n      letter-spacing: .076em;\n      text-decoration: none;\n    }\n  }\n\n  a {\n    padding: 10px 10px;\n    font-size: 14px;\n    line-height: 22px;\n    text-align: center;\n    letter-spacing: 0.08em;\n    text-transform: uppercase;\n    display: block;\n    white-space: nowrap;\n    text-decoration: none;\n\n    &:hover,\n    &:active,\n    &:focus {\n      background: transparent;\n      text-decoration: none;\n    }\n\n    &.btn {\n      padding: 11px 14px 8px;\n      margin-right: 3px;\n      border-radius: 10px;\n      color: white;\n      font-weight: 600;\n\n      &:hover,\n      &:active,\n      &:focus {\n        color: white;\n        background: darken($blue, 5);\n      }\n    }\n  }\n\n  .anchor {\n    color: #92A1B3;\n    font-weight: 500;\n\n    &.active,\n    &:hover {\n      color: #4D8DFF;\n    }\n  }\n}\n\nionic-sub-header ~ #sticky-bar,\nionic-sub-header ~ .sticky-wrapper #sticky-bar {\n  top: 56px;\n\n  @media (max-width: $screen-xs-max) {\n    top: 52px;\n\n    backdrop-filter: blur(20px);\n\n    @supports ((-webkit-backdrop-filter: blur(20px)) or (backdrop-filter: blur(20px))) {\n      background: rgba(white, .95);\n    }\n  }\n}"
  },
  {
    "path": "assets/scss/components/_sub_header.scss",
    "content": "/**\n * The Sub Header sits under the main navigation to display context-specific\n * page information, widgets, and links.\n * September 2017\n */\n\n ionic-sub-header {\n   max-height: 55px;\n   overflow: hidden;\n   display: block;\n\n  &.hydrated {\n    max-height: unset;\n    overflow: unset;\n  }\n\n  > * {\n    opacity: 0;\n    transition: .1s opacity;\n  }\n\n  &.ionic-sub-header--initialized > * {\n    opacity: 1;\n  }\n }\n\n// #sub-header {\n//   position: sticky;\n//   top: 0;\n//   z-index: 99;\n//   backdrop-filter: blur(20px);\n//   font-family: $font-family-inter;\n  \n//   // opacity: 0;\n//   // animation: fadeIn .4s ease .5s forwards;\n\n//   &.sub-header_initialized {\n//     transition: \n//       background-color .4s ease,\n//       box-shadow .4s ease;\n\n//       &:not(.sub-header--stuck) {\n//         backdrop-filter: none;\n//       }\n//   }\n\n//   &__trigger {\n//     position: absolute;\n//     left: 0;\n//     width: 100vw;\n//     height: 1px;\n//     pointer-events: none;\n//     opacity: 0;\n\n//     @media (max-width: $screen-xs-max) {\n//       top: 0;\n//     }\n//   }\n\n//   &.sub-header--not-sticky {\n//     position: relative;\n\n//     &.sub-header--stuck { \n//       background: none;\n//       box-shadow: none;\n//       backdrop-filter: none;\n//     }\n//   }\n\n//   &.sub-header--stuck {\n//     background: #020814;\n//     box-shadow: 0 1px 0px rgba(black, .06);\n  \n//     @supports ((-webkit-backdrop-filter: blur(20px)) or (backdrop-filter: blur(20px))) {\n//       background: rgba(#020814, .8);\n//     }\n//   }\n\n//   & > .container {\n//     display: flex;\n//     flex-direction: row;\n//     justify-content: space-between;\n//     align-items: center;\n//     color: white;\n//     font-size: 13px;\n//     font-weight: 500;\n//     min-height: 55px;\n//     // flex-wrap: wrap;\n//     overflow-x: auto;\n//     position: relative;\n//     z-index: 1;\n\n//     &::before {\n//       border-top: 1px solid rgba(white, .06);\n//       display: block;\n//       content: '';\n//       position: absolute;\n//       top: 0;\n//       right: 15px;\n//       left: 15px;\n//       flex: 0 0 100%;\n\n\n//       @media (max-width: $screen-xs-max) {\n//         display: none;\n//       }\n//     }\n\n//     &::after { display: none; }\n//   }\n\n//   ul {\n//     padding: 0;\n//     list-style: none;\n//     margin-bottom: 0;\n//     display: flex;\n//     align-items: center;\n//     font-size: 12px;\n//     line-height: 14px;\n//     letter-spacing: -0.02em;\n//     font-weight: 400;\n//   }\n\n//   li {\n//     display: flex;\n//     align-items: center;\n//   }\n\n//   .sub-header__right li:last-child a:not(.btn) {\n//     padding-right: 0;\n//   }\n\n//   ul:not(.sub-header__right) li:first-child a,\n//   .sub-header__left li:first-child a {\n//     padding-left: 0;\n//   }\n\n//   ul {\n//     font-size: 12px;\n//     line-height: 14px;\n//   }\n\n//   .sub-header__title {\n//     // same as .sub-header__breadcrumbs li:last-child a\n//     &,\n//     a {\n//       font-size: 16px;\n//       font-weight: 600;\n//       line-height: 22px;\n//       letter-spacing: -0.03em;\n\n//       &:hover {\n//         color: white;\n//       }\n//     }\n//   }\n\n//   .sub-header__breadcrumbs li {\n//     &::after {\n//       content: '/';\n//       color: rgba(white, .1);\n//       font-size: 16px;\n//       font-weight: 400;\n//       vertical-align: 0px;\n//     }\n\n//     a {\n//       padding-left: 8px;\n//       padding-right: 8px;\n//       color: rgba(white, .6);\n//     }\n\n//     &:last-child {\n//       a {\n//         font-weight: 600;\n//         color: white;\n//       }\n\n//       &::after {\n//         display: none;\n//       }\n//     }\n//   }\n\n//   span,\n//   a {\n//     color: white;\n//     padding: 16px 12px;\n//     display: inline-block;\n//     text-decoration: none;\n//     white-space: nowrap;\n//     transition: .2s color;\n//   }\n\n//   a {\n//     svg,\n//     path {\n//       transition: .2s fill;\n//       vertical-align: -15%;\n//     }\n      \n\n//     &.current,\n//     &.active,\n//     &:hover {\n//       color: rgba(white, .4);\n//     }\n\n//     &.btn {\n//       padding: 5px 10px 3px;\n//       border-radius: 16px;\n//       color: white;\n//       font-size: 13px;\n//       font-weight: 600;\n//       vertical-align: 0px;\n//       letter-spacing: -.01em;\n//       margin-right: 3px;\n//       margin-left: 9px;\n//       box-shadow: none;\n//       transition: .3s box-shadow, .3s background;\n\n//       &:hover {\n//         box-shadow: 0 3px 5px rgba(0, 0, 0, 0.15);\n//       }\n\n//       &:active {\n//         box-shadow: inset 0 1px 4px rgba(0,0,0,.2);\n//       }\n//     }\n//   }\n// }\n// body.light #sub-header {\n\n//   &.sub-header--stuck {\n//     background: white;\n  \n//     @supports ((-webkit-backdrop-filter: blur(20px)) or (backdrop-filter: blur(20px))) {\n//       background: rgba(white, .9);\n//     }\n//   }\n\n//   .container::before {\n//     border-top-color: rgba(black, .06);\n//   }\n\n//   span,\n//   a {\n//     color: #414D5C;\n//   }\n\n//   .btn,\n//   .btn:hover {\n//     color: white;\n//   }\n\n//   .sub-header__breadcrumbs li {\n//     &:after {\n//       color: rgba(#414D5C, .2);\n//     }\n\n//     &:not(:last-child) a {\n//       color: rgba(#414D5C, .6);\n\n//       &:hover {\n//         color: $blue;\n//       }\n//     }\n//   }\n\n//   .sub-header__breadcrumbs,\n//   .sub-header__title {\n//     &,\n//     a {\n//       color: #1A232F;\n\n//       &:hover {\n//         color: #1A232F;\n//       }\n//     }\n//   }\n\n//   a {\n//     &.current,\n//     &.active {\n//       color: #b1bbca;\n//     }\n\n//     &:hover {\n//       color: $blue;\n\n//       svg,\n//       path {\n//         fill: $blue;\n//       }\n//     }\n//   }\n// }\n"
  },
  {
    "path": "assets/scss/components/_tables.scss",
    "content": ".table {\n  > thead,\n  > thead:first-child,\n  > tbody,\n  > tbody:first-child {\n    > tr,\n    > tr:first-child {\n      > th {\n        padding: 11px 11px 12px;\n        border-bottom: 1px solid #eee;\n        font-weight: 700;\n      }\n\n      > td {\n        padding: 12px;\n        font-weight: 500;\n        border-bottom: 1px solid #eee;\n        color: #555;\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "assets/scss/components/_tabs.scss",
    "content": ".rounded-tabs {\n  background: none;\n  margin: 0 0 0 -20px;\n  padding: 0;\n  display: flex;\n\n  @media (max-width: $screen-xs-max) {\n    margin: 0;\n    justify-content: space-between;\n    max-width: 460px;\n    margin-left: auto;\n    margin-right: auto;\n  }\n}\n\n.rounded-tabs__tab {\n  padding: 0;\n  display: flex;\n  position: relative;\n  max-width: 100%;\n  margin: 0;\n\n  &::before,\n  &::after {\n    content: '';\n    display: block;\n    opacity: 0;\n    width: 56px;\n    height: 64px;\n    flex: 0 0 56px;\n    background-size: 56px 64px;\n    background-repeat: no-repeat;\n  }\n\n  &::before {\n    background-image: url('/img/getting-started/tab-border-left.png');\n  }\n\n  &::after {\n    background-image: url('/img/getting-started/tab-border-right.png');\n  }\n\n  & + .rounded-tabs__tab {\n    margin-left: -54px;\n  }\n\n  @media (max-width: $screen-xs-max) {\n    transition: border 0.3s;\n    border-bottom: 4px solid transparent;\n\n    &::before,\n    &::after {\n      display: none;\n    }\n\n    & + .rounded-tabs__tab {\n      margin-left: 28px;\n    }\n  }\n}\n\n.rounded-tabs__tab-inner {\n  font-size: 16px;\n  font-weight: 600;\n  letter-spacing: -0.02em;\n  display: flex;\n  align-items: center;\n  height: 64px;\n  margin-left: -1px;\n  margin-right: -1px;\n  padding: 0 2px;\n  flex: 0 0 auto;\n  cursor: pointer;\n\n  background: transparent;\n  color: #D5EAFF;\n\n  svg {\n    margin-right: 8px;\n    flex: 0 0 20px;\n  }\n\n  span {\n    flex: 0 0 auto;\n  }\n\n  .front {\n    fill: #E1F0FF;\n  }\n  .middle {\n    fill: #8DC0FF;\n  }\n  .back {\n    fill: #6FADFF;\n  }\n  .front--border {\n    stroke: #4D92FF;\n  }\n  .middle--border {\n    stroke: #4D93FF;\n  }\n\n  &:hover {\n    transition: color 0.2s;\n    color: #fff;\n\n    .front {\n      fill: #fff;\n    }\n  }\n\n  @media (max-width: $screen-xs-max) {\n    flex-direction: column;\n    font-size: 14px;\n    height: auto;\n    padding-bottom: 14px;\n    flex: 1;\n    text-align: center;\n    line-height: 16px;\n\n    svg {\n      margin: 8px 0 10px;\n    }\n  }\n}\n\n.rounded-tabs__tab--active {\n  pointer-events: none;\n\n  @media (min-width: 768px) {\n    &::before,\n    &::after {\n      opacity: 1;\n    }\n\n    .rounded-tabs__tab-inner,\n    .rounded-tabs__tab-inner:hover {\n      background: #fff;\n      color: #161A1F;\n\n      .front {\n        fill: #3880FF;\n      }\n    }\n\n    .front {\n      fill: #3880FF;\n    }\n    .middle {\n      fill: #B1D9FF;\n    }\n    .back {\n      fill: #CFE7FF;\n    }\n\n    .front--border,\n    .middle--border {\n      stroke: #fff;\n    }\n  }\n\n  @media (max-width: $screen-xs-max) {\n    border-bottom: 4px solid rgba(#fff, 0.8);\n\n    .rounded-tabs__tab-inner {\n      color: #fff;\n      .front {\n        fill: #fff;\n      }\n    }\n  }\n}\n\n#page-pricing,\n#page-getting-started {\n  .tab-content {\n    display: none;\n  \n    &--active {\n      display: block;\n    }\n  }\n}\n"
  },
  {
    "path": "assets/scss/components/_tag.scss",
    "content": ".tag,\n.docs-container main .tag {\n  background: $blue;\n  margin-left: 10px;\n  padding: 5px 7px 4px;\n  border-radius: 4px;\n  color: white;\n  font-weight: 700;\n  font-size: 10px;\n  text-transform: uppercase;\n  letter-spacing: .5px;\n\n  &.grey {\n    background: $darkish-grey;\n  }\n}"
  },
  {
    "path": "assets/scss/components/_testimonial-slides.scss",
    "content": ".testimonial-slides {\n  position: relative;\n  transition: height 0.4s;\n\n  @media (max-width: $screen-sm-max) {\n    min-height: 360px;\n  }\n\n  @media (max-width: 560px) {\n    min-height: 400px;\n  }\n\n  .slide {\n    padding: 90px 0 146px;\n    top: 0;\n    left: 0;\n    width: 100%;\n    height: 100%;\n    // background: #666;\n\n    h5 {\n      color: #fff;\n      font-size: 20px;\n      line-height: 32px;\n      letter-spacing: -0.02em;\n      font-weight: 600;\n      margin: 40px 0;\n    }\n\n    .attribution {\n      font-size: 14px;\n      font-weight: 600;\n      letter-spacing: -0.02em;\n\n      b {\n        font-weight: 600;\n        color: #fff;margin-right: 8px;\n      }\n    }\n\n    hgroup {\n      width: 50%;\n      padding-right: 74px;\n    }\n\n    .slide__topbar {\n      display: flex;\n      justify-content: space-between;\n      align-items: center;\n    }\n\n    .slide__cta {\n      transition: background 0.3s;\n      padding: 4px 8px 3px;\n      border-radius: 100px;\n      display: inline-flex;\n      align-items: center;\n      font-weight: 600;\n      font-size: 12px;\n      line-height: 12px;\n      letter-spacing: -0.02em;\n      cursor: pointer;\n\n      b {\n        font-weight: 600;\n        color: #fff;\n        margin-left: 4px;\n      }\n\n      svg {\n        transition: fill 0.2s;\n        display: inline;\n        width: 12px;\n        height: 12px;\n        margin: 0;\n        fill: #fff;\n      }\n\n      svg:first-child {\n        width: 18px;\n        height: 18px;\n        margin-right: 6px;\n      }\n\n      &:hover svg:last-child {\n        transform: translateX(1px);\n      }\n    }\n\n    @media (max-width: $screen-sm-max) {\n      padding: 32px 0 106px;\n\n      .slide__topbar {\n        flex-direction: column-reverse;\n        align-items: flex-start;\n      }\n\n      .slide__cta {\n        margin-bottom: 30px;\n      }\n\n      h5 {\n        margin: 20px 0;\n      }\n\n      hgroup {\n        padding-right: 24px;\n      }\n    }\n\n    @media (max-width: $screen-sm-max) {\n      hgroup {\n        width: 100%;\n      }\n\n      .slide__topbar {\n        flex-direction: row;\n      }\n\n      h5 {\n        margin: 30px 0;\n      }\n    }\n\n    @media (max-width: 560px) {\n      .slide__topbar {\n        flex-direction: column-reverse;\n      }\n    }\n  }\n\n  .slide--airbus {\n    .logo {\n      background: url('/img/testimonials/logo-sprite.png') no-repeat 0 -38px;\n      background-size: 198px 69px;\n      width: 131px;\n      height: 31px;\n    }\n\n    .attribution {\n      color: #939cd5;\n    }\n\n    .slide__cta {\n      background-color: #253699;\n      color: #b5bbe2;\n\n      svg:first-child {\n        fill: #a8aed6;\n      }\n\n      &:hover  {\n        background-color: lighten(#253699, 3%);\n      }\n    }\n\n\n  }\n\n  .slide--marketwatch {\n    .logo {\n      background: url('/img/testimonials/logo-sprite.png') no-repeat 0 0;\n      background-size: 198px 69px;\n      width: 198px;\n      height: 31px;\n    }\n\n    .attribution {\n      color: #868893\n    }\n\n    .slide__cta {\n      background-color: #0a2e36;\n      color: #a8b0be;\n\n      svg:first-child {\n        fill: #9dabaf;\n      }\n\n      &:hover  {\n        background-color: lighten(#0a2e36, 3%);\n      }\n    }\n  }\n\n  .slide-imgs {\n    width: 50%;\n    height: 100%;\n    position: absolute;\n    opacity: 0.5;\n    right: 0;\n    top: 0;\n    overflow: hidden;\n\n    @media (max-width: $screen-sm-max) {\n      display: none !important;\n    }\n  }\n\n  .slide-img {\n    width: 100%;\n    height: 100%;\n    background-size: cover;\n    background-repeat: no-repeat;\n    background-position: center center;\n    position: absolute;\n    top: 0;\n    left: 0;\n\n    &--airbus {\n      background-image: url('/img/testimonials/testimonial-bg-airbus.jpg');\n    }\n    &--marketwatch {\n      background-image: url('/img/testimonials/testimonial-bg-marketwatch.jpg');\n    }\n  }\n\n  .slide-indicator {\n    position: absolute;\n    z-index: 10;\n    bottom: 16px;\n    left: 0;\n    width: 100%;\n    padding: 20px 0;\n    cursor: pointer;\n\n    span {\n      transition: opacity 0.3s;\n      display: inline-flex;\n      justify-content: center;\n      align-items: center;\n      width: 14px;\n      height: 24px;\n      opacity: 0.2;\n\n      &:after {\n        transition: all 0.3s;\n        transform-origin: center center;\n        display: block;\n        content: '';\n        width: 8px;\n        height: 8px;\n        background-color: #fff;\n        border-radius: 8px;\n      }\n\n      &:hover:not(.active):after {\n        transform: scale(1.4);\n      }\n\n      &:hover,\n      &.active {\n        opacity: 1;\n      }\n\n      &.active {\n        pointer-events: none;\n        cursor: default;\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "assets/scss/components/_tippy.scss",
    "content": "tippy {\n  position: relative;\n\n  .tip {\n    position: absolute;\n    transform: scale3d(0, 0, 1);\n    transition: .15s transform linear;\n    background: rgba(black,.8);\n    border-radius: 4px;\n    padding: 15px 20px;\n    color: white;\n    z-index: 1;\n    width: 100%;\n    min-width: 200px;\n\n    &::before {\n      position: absolute;\n      top: -5px;\n      height: 5px;\n      width: 100%;\n      left: 0;\n      content: '';\n    }\n\n    &::after {\n      content: '';\n      position: absolute;\n      width: 0;\n      height: 0;\n      border-style: solid;\n      border-width: 0 5px 5px 5px;\n      border-color: transparent transparent rgba(black, .8);\n      position: absolute;\n      top: -5px;\n      right: 6px;\n    }\n\n    a {\n      cursor: pointer;\n\n      &:hover {\n        color: white;\n      }\n    }\n\n    &.right,\n    &.left {\n      left: 28px;\n      right: auto;\n      width: 257px;\n      top: -76px;\n      background: #3b434f;\n      padding: 14px 20px 6px;\n      font-size: 11px;\n      line-height: 20px;\n      letter-spacing: .07px;\n\n      &::after {\n        width: 12px;\n        height: 12px;\n        border-radius: 0 0 4px 0;\n        transform: rotate(135deg);\n        border: none;\n\t      background: linear-gradient(-45deg, #3b434f 50%, transparent 50%);\n        top: calc(50% + 7px);\n        left: -6px;\n        right: auto;\n      }\n    }\n\n    &.left {\n      left: auto;\n      right: 28px;\n\n      &::after {\n        left: auto;\n        right: -6px\n      }\n    }\n\n    &.bottom {\n      left: -170px;\n    }\n\n    &.top {\n      left: -170px;\n      bottom: 23px;\n\n      &::after {\n        transform: rotate(180deg);\n        top: auto;\n        bottom: -5px;\n        right: 18px;\n      }\n    }\n\n    p {\n      margin-bottom: 8px;\n    }\n  }\n\n  > i {\n    font-size: 67%;\n    font-weight: 700;\n    line-height: 1em;\n    color: #fff;\n    border-radius: 1em;\n    padding: 3px 5px 2px;\n    background: #c2c8d2;\n    position: relative;\n    top: -0.2em;\n    display: inline-block;\n    cursor: pointer;\n  }\n\n  &:hover,\n  &.active {\n    .tip {\n      transition-timing-function: cubic-bezier(0,1.5,.5,1);\n      transition-duration: .3s;\n      transform: scale3d(1, 1, 1);\n    }\n  }\n}\n"
  },
  {
    "path": "assets/scss/components/_toc.scss",
    "content": ".toc {\n  margin-top: 20px;\n  // border-bottom: 1px solid #bbb;\n\n  .toggle {\n    background: none;\n    border: 0;\n    text-transform: uppercase;\n    color: #b1bac8;\n    font-size: 10px;\n    letter-spacing: 2px;\n    font-weight: 700;\n    position: relative;\n    display: inline;\n    width: 100%;\n    text-align: left;\n    padding: 0;\n    outline: none;\n\n    &::after {\n      font-family: Ionicons;\n      content: '\\f3d0';\n      float: right;\n      font-size: 18px;\n      font-weight: 400;\n      transition: .3s transform ease;\n      position: relative;\n      top: -5px;\n    }\n  }\n\n  .expanded {\n    ul {\n      list-style: none;\n      padding-left: 15px;\n\n      li {\n        font-size: 14px;\n        font-weight: 400;\n        line-height: 1.8em;\n        margin-bottom: 0;\n\n        a {\n          color: $blue;\n          display: block;\n          max-height: 25px;\n          overflow: hidden;\n          font-weight: 500;\n          transition: .3s max-height cubic-bezier(0.36, 0.66, 0.04, 1);\n          overflow: hidden;\n          white-space: nowrap;\n          text-overflow: ellipsis;\n        }\n      }\n    }\n\n    > ul {\n      padding-left: 0;\n\n      > li {\n        font-weight: 500;\n        line-height: 2em;\n\n        > a {\n          font-weight: 600;\n        }\n      }\n    }\n  }\n\n  &.collapsed {\n    .toggle::after {\n      transform: rotate3d(0, 0, 1, -90deg);\n    }\n\n    .expanded ul li a {\n      max-height: 0;\n    }\n  }\n}\n"
  },
  {
    "path": "assets/scss/components/_tooltip.scss",
    "content": ".tooltip {\n  width: 300px;\n\n  .tooltip-inner {\n    padding: 10px;\n    background: rgba(black, .85);\n  }\n\n  .tooltip-arrow {\n    opacity: .85;\n  }\n}\n"
  },
  {
    "path": "assets/scss/components/_utils.scss",
    "content": "@media (max-width: $screen-xs-max) {\n  .hide-xs {\n    display: none;\n  }\n  .show-sm,\n  .show-md,\n  .show-lg {\n    display: none;\n  }\n}\n\n@media (min-width: $screen-sm-min) and (max-width: $screen-sm-max) {\n  .hide-sm {\n    display: none;\n  }\n  .show-xs,\n  .show-md,\n  .show-lg {\n    display: none;\n  }\n}\n\n@media (min-width: $screen-md-min) and (max-width: $screen-md-max) {\n  .hide-md {\n    display: none;\n  }\n  .show-xs,\n  .show-sm,\n  .show-lg {\n    display: none;\n  }\n}\n\n@media (min-width: $screen-lg-min ) {\n  .hide-lg {\n    display: none;\n  }\n  .show-xs,\n  .show-sm,\n  .show-md {\n    display: none;\n  }\n}\n"
  },
  {
    "path": "assets/scss/components/home_slides/_ioniconf.scss",
    "content": "$fontFamilyRoboto: 'Roboto Mono', Menlo, monospace;\n$colorTextMain: #E9EDF3;\n$colorButtonMain: linear-gradient(74.26deg, #4CC3FF 0%, #4172FF 100%);\n#ionic-slider {\n  background: #010610 url('/img/homepage/dots-lines.svg') no-repeat 50% 50%;\n  background-size: cover;\n}\n#ionic-slider #slide-ioniconf {\n  clear: both;\n  color: white;\n  display: flex;\n  flex-direction: column;\n  align-items: center;\n  padding: 0;\n  text-align: center;\n  padding-top: 80px;\n  padding-bottom: 79px;\n\n  & > h1 { \n    margin-bottom: 24px;\n    font-size: 64px;\n    line-height: 100%;\n    letter-spacing: -.04em;\n    color: #fff;\n  }\n\n  & > p {\n    margin-bottom: 48px;\n    font-size: 23px;\n    letter-spacing: -.04em;\n    color: #DEE3EA;\n    opacity: .9;\n  }\n\n  #landingTweet {\n    display:inline-flex;\n    align-items: center;\n    border-radius: 100px;\n    background: rgba(98, 178, 255, 0.2);\n    padding: 12px 16px;\n    margin-top: 32px;\n    backdrop-filter: blur(16px);\n  \n    svg {\n      margin-right: 8px;\n    }\n  \n    p {\n      font-size: 16px;\n      color: #FBFBFD;\n      opacity: .9;\n      margin: 0;\n      @media screen and (max-width: $screen-xs-max) {\n        .tweet__extra {\n          display: none;\n        }\n      }\n    }\n\n    a {\n      color:white;\n      position: relative;\n      \n      &:after {\n        content: '';\n        width: calc(100% - 1ch);\n        height: 1px;\n        left: 1ch;\n        top: 100%;\n        position: absolute;\n        background: rgba(255, 255, 255, 0);\n        transition: all .15s ease-out;\n      }\n\n      &:hover, &:active, &:focus {\n        text-decoration: none;\n\n        &:after {\n          background: rgba(255, 255, 255, 1);\n          transition: all .15s ease-in;\n        }\n      }\n    }\n  }\n  \n  #landingStream {\n    position: relative;\n    width: 100%;\n    height: 0;\n    padding-bottom: 56.25%;\n    border: 2px solid rgba(255, 255, 255, 0.2);\n  \n    iframe {\n      position: absolute;\n      top:0;\n      left:0;\n      width: 100%;\n      height: 100%;\n    }  \n  }\n}\n\n.nav #btn-header-sign-up  {\n  background: #202632;\n  color: white;\n\n  &:hover, &:focus {\n    background: lighten(#202632, 5%);\n  }\n}"
  },
  {
    "path": "assets/scss/components/home_slides/_limitless.scss",
    "content": "#slide-limitless {\n  background: #548fff linear-gradient(to right, #4278ff, #67a7ff);\n  background-size: 100%;\n\n  .btn {\n    color: #3880ff;\n  }\n\n  ul {\n    padding: 0;\n    margin-top: 8px;\n    list-style: none;\n  }\n\n  li {\n    display: inline-block;\n    margin-right: 8px;\n\n    &:last-child {\n      margin-right: 0;\n\n      img {\n        height: 23px;\n        vertical-align: -8px;\n      }\n    }\n\n    img {\n      height: 13px;\n      opacity: .6;\n    }\n  }\n\n  .graphics {\n    position: absolute;\n    bottom: 0;\n    width: 100%;\n    left: 0;\n    padding: 0;\n    margin: 0;\n\n    li {\n      position: absolute;\n      opacity: 0;\n      animation: fadeInUp 1s ease forwards;\n\n      &.iphone-x {\n        background: url('/img/homepage/hero-iphone-x.png') 0 0 no-repeat;\n        background-size: 100%;\n        bottom: -63px;\n        left: -191px;\n        width: 400px;\n        height: 306px;\n        animation-delay: .8s;\n      }\n\n      &.iphone-xs-max {\n        background: url('/img/homepage/hero-iphone-xs-max.png') 0 0 no-repeat;\n        background-size: 100%;\n        bottom: -39px;\n        left: 170px;\n        width: 490px;\n        height: 378px;\n        animation-delay: .9s;\n      }\n\n      &.pixel-3 {\n        background: url('/img/homepage/hero-google-pixel3.png') 0 0 no-repeat;\n        background-size: 100%;\n        bottom: -40px;\n        left: 607px;\n        width: 490px;\n        height: 400px;\n        animation-delay: 1s;\n      }\n\n      &.galaxy {\n        background: url('/img/homepage/hero-android-galaxy.png') 0 0 no-repeat;\n        background-size: 100%;\n        bottom: -41px;\n        left: 1063px;\n        width: 450px;\n        height: 356px;\n        animation-delay: 1.1s;\n      }\n\n      &.ipad {\n        background: url('/img/homepage/hero-ipad.png') 0 0 no-repeat;\n        background-size: 100%;\n        bottom: -44px;\n        left: 1484px;\n        width: 610px;\n        height: 524px;\n        animation-delay: 1.2s;\n      }\n\n      &.macbook {\n        background: url('/img/homepage/hero-macbook.png') 0 0 no-repeat;\n        background-size: 100%;\n        bottom: -63px;\n        left: 2061px;\n        width: 1470px;\n        height: 570px;\n        animation-delay: 1.3s;\n      }\n    }\n  }\n}"
  },
  {
    "path": "assets/scss/components/home_slides/_one-any.scss",
    "content": "#slide-one-any {\n  background: white;\n  position: relative;\n  min-height: 840px;\n  border-bottom: none;\n\n  .notification {\n    display: inline-block;\n    background: #F6F8FB;\n    font-size: 11px;\n    line-height: 16px;\n    text-align: center;\n    letter-spacing: 0.1em;\n    padding: 7px 15px 7px;\n\n    strong {\n      color: #1A232F;\n    }\n\n    &::after {\n      content: '>';\n    }\n\n    @media (max-width: $screen-xs-max) {\n      display: none;\n    }\n  }\n\n  hgroup {\n    max-width: 464px;\n    display: block; \n    margin-top: 56px;\n    position: relative;\n    z-index: 1;\n\n    h1 {\n      font-size: 64px;\n      line-height: 64px;\n      color: #020814;\n      letter-spacing: -.04em;\n      margin-bottom: 7px;\n    }\n\n    p {\n      font-size: 22px;\n      line-height: 37px;\n      color: rgba(#5B708B, .9);\n      letter-spacing: -.04em;\n      font-family: $font-family-inter;\n    }\n\n    .btn {\n      background: #4D8DFF;\n      border-radius: 10px;\n      text-transform: uppercase;\n      margin-top: 12px;\n      font-size: 15px;\n      line-height: 21px;\n      padding: 14px 16px 12px;\n      letter-spacing: 0.08em;\n\n      &:hover {\n        background: lighten(#4D8DFF, 5);\n      }\n\n      &:active {\n        background: #4D8DFF;\n      }\n\n      img {\n        margin-left: 2px;\n        vertical-align: 0;\n        margin-right: 2px;\n      }\n    }\n\n    small {\n      font-size: 11px;\n      line-height: 21px;\n      letter-spacing: -0.02em;\n      color: #B2BECD;\n\n      a {\n        position: relative;\n        color: #92a0b3;\n\n        &::after {\n          content: '';\n          position: absolute;\n          left: 0;\n          right: 0;\n          bottom: -2px;\n          border-bottom: 1px solid #dee3ea;\n        }\n\n        &:hover {\n          color: $blue;\n\n          &::after {\n            border-bottom-color: $blue;\n          }\n        }\n      }\n    }\n\n    @media (max-width: $screen-xs-max) {\n      max-width: 100%;\n      text-align: left;\n      margin-top: 64px;\n    }\n  }\n\n  .graphic {\n    position: absolute;\n    right: -20px;\n    top: 80px;\n    height: 667px;\n    width: 682px;\n\n    @media (max-width: $screen-md-max) {\n      top: 120px;\n      right: -64px;\n    }\n\n    @media (max-width: $screen-sm-max) {\n      width: 334px;\n      height: auto;\n      top: 180px;\n    }\n\n    @media (max-width: $screen-xs-max) {\n      display: none;\n    }\n  }\n\n  @media (max-width: $screen-sm-max) {\n    padding-top: 100px;\n    padding-bottom: 100px;\n    min-height: 0;\n  }\n\n  @media (max-width: $screen-xs-max) {\n    padding-top: 100px;\n    padding-bottom: 100px;\n    min-height: 0;\n  }\n}"
  },
  {
    "path": "assets/scss/components/home_slides/_react-1.scss",
    "content": "#slide-ionic-react {\n  clear: both;\n  padding-block-start: 80px !important;\n  padding-block-end: 140px !important;\n  display: flex;\n  align-items: center;\n  justify-content: space-between;\n\n  .activateOnScroll {\n    display: inline-block;\n  }\n\n  .landing__content {\n    flex: 1 1 50%;\n    max-width: 480px;\n\n    .darken {\n      color: #001a3a;\n      font-weight: 500;\n    }\n\n    .underline {\n      display: inline-block;\n      position: relative;\n\n      &:after {\n        content: \"\";\n        width: 100%;\n        height: 4px;\n        left: 0;\n        bottom: -5px;\n        position: absolute;\n      }\n    }\n\n    @keyframes fadeDown {\n      0% {\n        z-index: -1;\n        opacity: 0;\n        transform: translateY(-15px);\n      }\n      33.3% {\n        z-index: -1;\n        opacity: 0;\n        transform: translateY(-15px);\n      }\n      35% {\n        z-index: 1;\n        opacity: 1;\n        transform: translateY(0px);\n      }\n      66.6% {\n        z-index: 1;\n        opacity: 1;\n        transform: translateY(0px);\n      }\n      68.3% {\n        z-index: -1;\n        opacity: 0;\n        transform: translateY(15px);\n      }\n      100% {\n        z-index: -1;\n        opacity: 0;\n        transform: translateY(15px);\n      }\n    }\n\n    .space {\n      white-space: pre;\n    }\n\n    .words {\n      position: relative;\n      display: inline-block;\n    }\n\n    .angular,\n    .react,\n    .vue {\n      left: 0;\n      white-space: pre;\n      position: absolute;\n\n      animation: fadeDown 24s infinite;\n\n      &::after {\n        position: absolute;\n        bottom: -2px;\n      }\n    }\n\n    .react {\n      color: #42ccff;\n      animation-delay: -8s;\n      position: relative;\n      opacity: 1;\n\n      // transition: opacity .2s, transform .2s;\n      // transition-delay: 8s;\n\n      &::after {\n        background: rgba(89, 210, 255, 0.3);\n      }\n    }\n\n    .angular {\n      color: #ef4d4d;\n      animation-delay: 8s;\n      opacity: 0;\n\n      &::after {\n        background: rgba(239, 77, 77, 0.3);\n      }\n    }\n\n    .vue {\n      color: #42b983;\n      opacity: 0;\n\n      &::after {\n        background: rgba(66, 185, 131, 0.3);\n      }\n    }\n\n    a {\n      &:hover,\n      &:focus,\n      &:active {\n        text-decoration: none;\n      }\n    }\n\n    h1 {\n      font-size: 64px;\n      line-height: 100%;\n      color: #020814;\n      margin-block-end: 24px;\n\n      & > span:nth-child(1) {\n        transition-delay: 0.1s;\n      }\n      & > span:nth-child(2) {\n        transition-delay: 0.2s;\n      }\n      & > span:nth-child(3) {\n        transition-delay: 0.3s;\n      }\n\n      .rotate {\n        display: inline-block;\n        position: relative;\n        height: 48px;\n      }\n    }\n\n    p {\n      transition-delay: 0.4s;\n      letter-spacing: -0.02em;\n      color: #445b78;\n      font-size: 20px;\n      line-height: 160%;\n      margin-block-end: 40px;\n    }\n\n    .btn__group {\n      display: flex;\n      flex-wrap: wrap;\n      transition-delay: 0.5s;\n      margin-block-start: -16px;\n      margin-inline-start: -16px;\n\n      > * {\n        margin-block-start: 16px;\n        margin-inline-start: 16px;\n      }\n\n      a:first-of-type {\n        letter-spacing: -0.02em;\n        font-weight: 600;\n        padding: 16px 20px;\n        line-height: 112%;\n        display: flex;\n        align-items: center;\n        justify-content: center;\n        font-size: 16px;\n        box-shadow: none;\n\n        color: #fff;\n        background: #3880ff;\n        border-radius: 100px;\n\n        transition: background-color 0.2s ease-out;\n\n        &:hover,\n        &:focus {\n          color: #fff;\n          background: #5291ff;\n        }\n        &:active {\n          background: #1f71ff;\n        }\n      }\n      a:last-of-type {\n        font-weight: 600;\n        font-size: 14px;\n        line-height: 100%;\n        display: flex;\n        align-items: center;\n        letter-spacing: -0.01em;\n\n        transition: opacity 0.2s ease-out;\n\n        &:hover,\n        &:focus,\n        &:active {\n          color: #3880ff;\n          opacity: 0.7;\n        }\n      }\n    }\n\n    & > a {\n      display: inline-flex;\n      align-items: center;\n      transition-delay: 0.9s;\n\n      ion-icon {\n        margin-inline-start: 4px;\n      }\n    }\n\n    ion-icon {\n      display: inline-block;\n      transition: 0.3s transform ease-out;\n    }\n\n    a:hover ion-icon {\n      transform: translateX(3px);\n    }\n  }\n\n  .landing__img {\n    flex: 1 1 50%;\n    max-width: 524px;\n    min-height: 542px;\n    position: relative;\n\n    img {\n      width: 100%;\n      height: auto;\n      left: 48px;\n      position: absolute;\n      opacity: 0;\n      animation: homeHeroFadeIn 24s infinite;\n\n      &.active {\n        opacity: 1;\n      }\n\n      &.react {\n        animation-delay: -8s;\n      }\n\n      &.angular {\n        animation-delay: 8s;\n      }\n    }\n\n    @keyframes homeHeroFadeIn {\n      0% {\n        z-index: -1;\n        opacity: 0;\n      }\n      32.3% {\n        z-index: -1;\n        opacity: 0;\n      }\n      39% {\n        z-index: 1;\n        opacity: 1;\n      }\n      65.6% {\n        z-index: 1;\n        opacity: 1;\n      }\n      73% {\n        z-index: 1;\n        opacity: 0;\n      }\n      100% {\n        z-index: -1;\n        opacity: 0;\n      }\n    }\n  }\n}\n\n@media (max-width: $screen-xs-max) {\n  #slide-ionic-react {\n    justify-content: flex-start;\n    .landing__img {\n      display: none;\n    }\n  }\n}\n\n@media (max-width: 460px) {\n  #slide-ionic-react .landing__content h1 .rotate {\n    display: block;\n  }\n}\n"
  },
  {
    "path": "assets/scss/components/home_slides/_v5.scss",
    "content": "#ionic-slider #slide-ionic-5 {\n  padding-top: 160px;\n  padding-bottom: 245px;\n\n  h4 {\n    font-size: 24px;\n    line-height: 29px;\n    letter-spacing: -0.03em;\n    color: #5b708b;\n    font-weight: 600;\n    text-transform: none;\n    margin-bottom: 30px;\n\n    svg {\n      height: 28px;\n      width: 28px;\n      vertical-align: -5px;\n      margin-right: 3px;\n    }\n  }\n\n  h1 {\n    font-weight: bold;\n    font-size: 64px;\n    line-height: 70px;\n    letter-spacing: -0.04em;\n    color: #020814;\n    max-width: 490px;\n\n    span {\n      display: block;\n\n      &:nth-child(1) {\n        transition-delay: 0.1s;\n      }\n      &:nth-child(2) {\n        transition-delay: 0.2s;\n      }\n      &:nth-child(3) {\n        transition-delay: 0.3s;\n      }\n    }\n  }\n\n  ul {\n    padding: 4px 0;\n    margin-bottom: 28px;\n  }\n\n  li {\n    background: url(\"/img/homepage/checkmark.svg\") no-repeat left 11px;\n    background-size: 16px;\n    padding-left: 28px;\n    font-size: 24px;\n    line-height: 38px;\n    letter-spacing: -0.02em;\n    color: rgba(#1a232f, 0.9);\n    list-style: none;\n    margin-bottom: 4px;\n\n    &:nth-child(1) {\n      transition-delay: 0.5s;\n    }\n    &:nth-child(2) {\n      transition-delay: 0.6s;\n    }\n    &:nth-child(3) {\n      transition-delay: 0.7s;\n    }\n    &:nth-child(4) {\n      transition-delay: 0.8s;\n    }\n  }\n\n  .btn {\n    font-size: 15px;\n    line-height: 21px;\n    letter-spacing: 0.05em;\n    text-transform: uppercase;\n    padding: 15px 19px 13px;\n    border-radius: 10px;\n    box-shadow: 0px 2px 4px rgba(2, 8, 20, 0.1),\n      0px 1px 2px rgba(2, 8, 20, 0.08);\n\n    img {\n      margin: -1px -3px 0 2px;\n      width: 19px;\n    }\n\n    &-wrapper {\n      transition-delay: 0.9s;\n    }\n  }\n\n  .graphic {\n    position: absolute;\n    right: 100px;\n    top: 180px;\n\n    > * {\n      position: absolute;\n      opacity: 0;\n      animation: fadeInUp 0.8s ease-out 1s forwards;\n\n      &:nth-child(1) {\n        right: -104px;\n        top: -8px;\n      }\n\n      &:nth-child(2) {\n        right: 356px;\n        top: 408px;\n        animation-delay: 1.1s;\n      }\n\n      &:nth-child(3) {\n        right: 176px;\n        top: 88px;\n        animation-delay: 1.2s;\n      }\n\n      &:nth-child(4) {\n        right: 400px;\n        top: 513px;\n        animation-delay: 1.3s;\n      }\n\n      &:nth-child(5) {\n        right: 54px;\n        top: -53px;\n        animation-delay: 1.4s;\n      }\n\n      &:nth-child(6) {\n        right: 80px;\n        top: 264px;\n        animation-delay: 1.5s;\n      }\n\n      &:nth-child(7) {\n        right: -80px;\n        top: 164px;\n        animation-delay: 1.6s;\n      }\n\n      &:nth-child(8) {\n        right: -40px;\n        top: 460px;\n        animation-delay: 1.7s;\n      }\n\n      &:nth-child(9) {\n        right: 304px;\n        top: 94px;\n        animation-delay: 1.8s;\n      }\n\n      &:nth-child(10) {\n        right: -20px;\n        top: 321px;\n        animation-delay: 1.9s;\n      }\n\n      &:nth-child(11) {\n        right: 140px;\n        top: -43px;\n        animation-delay: 2s;\n      }\n\n      &:nth-child(12) {\n        right: -100px;\n        top: 300px;\n        animation-delay: 2.1s;\n      }\n\n      &:nth-child(13) {\n        right: 16px;\n        top: 411px;\n        animation-delay: 2.2s;\n      }\n\n      &:nth-child(14) {\n        right: 112px;\n        top: 486px;\n        animation-delay: 2.3s;\n      }\n\n      &:nth-child(15) {\n        right: 208px;\n        top: 260px;\n        animation-delay: 2.4s;\n      }\n\n      &:nth-child(16) {\n        right: 400px;\n        top: 341px;\n        animation-delay: 2.5s;\n      }\n\n      &:nth-child(17) {\n        right: -80px;\n        top: 424px;\n        animation-delay: 2.6s;\n      }\n\n      &:nth-child(18) {\n        right: 108px;\n        top: 160px;\n        animation-delay: 2.7s;\n      }\n\n      &:nth-child(19) {\n        right: -38px;\n        top: 236px;\n        animation-delay: 2.8s;\n      }\n    }\n\n    @media (max-width: $screen-md-max) {\n      right: 52px;\n    }\n\n    @media (max-width: $screen-sm-max) {\n      right: -160px;\n    }\n  }\n\n  @media (max-width: $screen-xs-max) {\n    padding-bottom: 600px;\n    overflow: hidden;\n\n    .graphic {\n      top: auto;\n      transform: scale(0.75);\n      right: calc(50% - 120px);\n      bottom: 530px;\n    }\n\n    h1 {\n      hyphens: auto;\n      max-width: 100%;\n      word-break: break-word;\n    }\n  }\n}\n"
  },
  {
    "path": "assets/scss/components/home_slides/_v6.scss",
    "content": "#ionic-slider #slide-ionic-6 {\n  margin-block-start: 64px;\n\n  display: grid;\n  align-items: center;\n\n  grid-template-columns: 1fr 1fr;\n\n  column-gap: 64px;\n  row-gap: 32px;\n\n  @media (max-width: $screen-sm-max) {\n    grid-template-columns: 1fr;\n  }\n\n  &::before {\n    display: none;\n  }\n\n  .announcement {\n    font-size: 12px;\n    line-height: 100%;\n    display: inline-flex;\n    flex-wrap: wrap;\n    align-items: center;\n    color: #1B6DFF;\n\n    padding: 6px 10px;\n    \n    background: #E8F5FF;\n    border-radius: 200px;\n\n    margin-block-end: 32px;\n\n    text-decoration: none;\n\n    transition: opacity .2s ease-out, transform .8s cubic-bezier(0.07, 0.89, 0.79, 0.95);\n\n    strong {\n      font-weight: 600;\n      white-space: pre;\n    }\n\n    &:hover, &:focus, &:active {\n      opacity: .8;\n    }\n  }\n\n  h1 {\n    font-weight: 800;\n    font-size: 64px;\n    line-height: 100%;\n    letter-spacing: -0.04em;\n    color: var(--c-carbon-900);\n\n    margin-block-end: 32px;\n\n    .space {\n      white-space: pre;\n    }\n\n    .gradient {\n      display: inline-block;\n\n      transition: opacity .2s ease-out;\n\n      &:hover, &:active, &:focus {\n        opacity: .8;\n      }\n\n      img {\n        margin-block-start: 2px;\n        display: block;\n      }\n    }\n\n    span {\n      display: block;\n\n      &:first-of-type {\n        transition-delay: .1s;\n        display: flex;\n        flex-wrap: wrap;\n        align-items: center;\n      }\n\n      &:nth-of-type(2) {\n        transition-delay: .2s;\n      }\n\n      &:nth-of-type(3) {\n        transition-delay: .3s;\n      }\n    }\n  }\n\n  p {\n    font-size: 20px;\n    line-height: 160%;\n    letter-spacing: -0.02em;\n\n    color: #445B78;\n\n    margin-block-end: 40px;\n\n    max-width: 440px;\n\n    transition-delay: .4s;\n  }\n\n  .landing__img {\n    margin-inline-end: -64px;\n    margin-inline-start: -40px; \n\n    @media (max-width: $screen-sm-max) {\n      display: none;\n    }\n  }\n\n  .btn__group {\n    transition-delay: .5s;\n\n    a {\n      font-weight: 600;\n\n      &:first-of-type {\n        padding: 16px 20px;\n      \n        background: #1B6DFF;\n        border-radius: 100px;\n\n        color: #fff;\n\n        margin-inline-end: 20px;\n\n        transition: background-color .2s ease-out;\n\n        &:hover, &:active, &:focus {\n          background: #337eff;\n        }\n      }\n\n      &:last-of-type {\n\n        transition: opacity .2s ease-out;\n\n        &:hover, &:focus, &:active {\n          color: #4a8bfc;\n          opacity: 0.8;\n        }\n      }\n    }\n  }\n\n  .spacer {\n    @media (max-width: $screen-sm-max) {\n      display: none;\n    }\n  }\n\n  .bottom {\n    margin-inline-end: -20px;\n\n    display: grid;\n    align-items: center;\n    grid-template-columns: 1fr auto;\n    column-gap: 32px;\n\n    @media (max-width: $screen-sm-max) {\n      display: flex;\n      flex-wrap: wrap;\n\n      margin-block-start: 40px;\n    }\n\n    .start {\n      font-weight: bold;\n      font-size: 28px;\n      line-height: 140%;\n      letter-spacing: -0.02em;\n      color: #001A3A;\n    }\n\n    .end {\n      button {\n        display: flex;\n        align-items: center;\n        background: #FFFFFF;\n\n        border: 1px solid #CED6E0;\n        border-radius: 1000px;\n\n        padding: 16px 20px;\n\n        margin-block-end: 12px;\n\n        font-family: Roboto Mono;\n        font-size: 16px;\n        line-height: 112%;\n        letter-spacing: -0.02em;\n        color: #2D4665;\n\n        .icon {\n          display: flex;\n          align-items: center;\n\n          position: relative;\n\n          margin-inline-start: 11.5px;\n\n          &::before {\n            pointer-events: none;\n            content: url(\"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGNsYXNzPSJpb25pY29uIiB2aWV3Qm94PSIwIDAgNTEyIDUxMiI+PHBhdGggZmlsbD0ibm9uZSIgc3Ryb2tlPSJjdXJyZW50Q29sb3IiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgc3Ryb2tlLXdpZHRoPSIzMiIgZD0iTTQxNiAxMjggMTkyIDM4NGwtOTYtOTYiLz48L3N2Zz4=\");\n            background: #fff;\n            display: block;\n\n            position: absolute;\n            z-index: 2;\n\n            top: 0;\n            left: 0;\n            width: 100%;\n            height: 100%;\n            transform: translateY(-100%);\n\n            opacity: 0;\n\n            transition: transform .15s ease-out, opacity .15s ease-out;\n          }\n        }\n\n        &.clicked {\n          .icon {\n\n            &::before {\n              opacity: 1;\n\n              transform: translateY(0);\n            }\n          }\n        }\n\n        svg {\n          pointer-events: none;\n        }\n      }\n\n      .sublinks {\n\n        .divider {\n          color: #B2BECD;\n\n          margin: 0 8px;\n        }\n\n        a {\n          font-weight: 500;\n\n          transition: opacity .2s ease-out;\n\n          &:hover, &:focus, &:active {\n            color: #4a8bfc;\n            opacity: 0.8;\n          }\n        }\n      }\n    }\n  }\n}"
  },
  {
    "path": "assets/scss/components/home_slides/_vue.scss",
    "content": "section#slide-ionic-vue {\n  padding-top: 0px !important;\n  padding-bottom: 230px !important;\n\n  clear: both;\n\n  .arrow {\n    white-space: pre;\n    letter-spacing: 0;\n  }\n\n  .heading-group {\n    max-width: 608px;\n    margin-left: auto;\n    margin-right: auto;\n    text-align: center;\n\n    h1 {\n      // font-size: 80px;\n      font-size: clamp(28px, 13vw, 80px);\n      line-height: 96%;\n      letter-spacing: -0.02em;\n      color: #001A3A;\n  \n      display: flex;\n      flex-direction: column;\n\n      margin-bottom: 30px;\n\n      .highlight {\n        color: #2ABC7A;\n      }\n\n      .underline {\n        &::before {\n          background: #4DBA87;\n          height: 4px;\n          width: 90%;\n          left: 8px;\n          bottom: 4px;\n          opacity: 0.3;\n        }\n      }\n\n      .activateOnScroll {\n        &:nth-of-type(1) {\n        }\n        &:nth-of-type(2) {\n          transition-delay: .1s;\n        }\n        &:nth-of-type(3) {\n          transition-delay: .3s;\n        }\n      }\n    }\n\n    ul {\n      margin: 0 auto 32px auto;\n      padding-left: 0;\n\n      li {\n        list-style-type: none;\n\n        // font-size: 20px;\n        font-size: clamp(14px, 4vw, 20px);\n        line-height: 160%;\n        letter-spacing: -0.02em;\n        color: rgba(45, 70, 101, .9);\n\n        + li {\n          margin-top: 10px;\n        }\n\n        svg {\n          display: inline;\n          margin-right: 12px;\n        }\n      }\n\n      .activateOnScroll {\n        &:nth-of-type(1) {\n          transition-delay: .5s;\n        }\n        &:nth-of-type(2) {\n          transition-delay: .6s;\n        }\n        &:nth-of-type(3) {\n          transition-delay: .8s;\n        }\n      }\n    }\n  }\n  \n  .ctas {\n    display: flex;\n    flex-wrap: wrap;\n    margin-top: -16px;\n    margin-left: -8px;\n    align-items: center;\n    justify-content: center;\n\n    margin-bottom: 12px;\n\n    &.activateOnScroll {\n      transition-delay: 1s;\n    }\n\n    .button {\n      margin-top: 16px;\n      margin-left: 8px;\n      display: inline-block;\n      border-radius: 1000px;\n      font-weight: 600;\n      font-size: 16px;\n      line-height: 112%;\n      letter-spacing: -0.02em;\n      color: #fff;\n      padding: 19px 22px;\n      transition: all .2s ease-out;\n      outline: 1px solid rgba(0,0,0,0);\n      text-decoration: none;\n  \n      &--dark {\n        background: #2ABC7A;\n\n        &:hover {\n          background: #2fd088;\n        }\n        &:active {\n          background: #26a66c;\n        }\n        &:focus {\n          box-shadow: 0 0 0 3px #97e7c3;\n        }\n      }\n  \n      &--light {\n        background: #ECF9F6;\n        color: #2ABC7A;\n\n        &:hover {\n          background: rgba(0, 0, 0, 0);\n        }\n        &:active {\n          background: #def7ec;\n        }\n        &:focus {\n          box-shadow: 0 0 0 3px #59d99f;\n        }\n      }\n    }\n  }\n\n  .icons-image {\n    display: inline-block;\n\n    &.activateOnScroll {\n      transition-delay: 1.1s;\n    }\n  }\n}\n\n\n\n\n\n\n"
  },
  {
    "path": "assets/scss/components/home_slides/index.scss",
    "content": "@import \"../../vars\";\n\n#ionic-slider {\n  // background: #01050c;\n  display: block;\n  min-height: 860px;\n  position: relative;\n\n  // Part of the vue.scss style package\n  .hero-image-vue {\n    position: absolute;\n    top: 0;\n    left: 0;\n    right: 0;\n    bottom: 0;\n    object-fit: cover;\n    object-position: center top;\n    width: 100%;\n    height: 100%;\n    z-index: -1;\n  }\n\n  [slot=\"slide-0\"] {\n    display: block;\n  }\n\n  [slot=\"slide-1\"],\n  [slot=\"slide-2\"] {\n    // display: none;\n  }\n\n  [slot^=\"slide-\"] {\n    padding-top: 100px;\n    position: absolute;\n    top: 0;\n    right: 0;\n    bottom: 0;\n    left: 0;\n    overflow: hidden;\n\n    hgroup {\n      color: white;\n      max-width: 500px;\n      margin-top: 13px;\n      text-align: center;\n      position: relative;\n    }\n\n    h1 {\n      font-size: 64px;\n      line-height: 74px;\n      margin-bottom: 16px;\n      letter-spacing: -0.03em;\n    }\n\n    p {\n      font-size: 24px;\n      line-height: 36px;\n      letter-spacing: -0.03em;\n      color: #e4f1ff;\n    }\n\n    .btn {\n      font-size: 15px;\n      font-weight: 700;\n      margin-top: 18px;\n      padding: 20px 22px;\n      margin-right: -4px;\n      letter-spacing: 0.1em;\n      text-transform: uppercase;\n\n      ion-icon {\n        font-size: 16px;\n        margin-left: -4px;\n        vertical-align: -2px;\n        width: 16px;\n        height: 16px;\n      }\n    }\n\n    .version-text {\n      color: rgba(255, 255, 255, 0.6);\n      font-weight: 500;\n      font-size: 11px;\n\n      a {\n        color: rgba(255, 255, 255, 0.6);\n\n        &:hover {\n          color: rgba(255, 255, 255, 0.8);\n          text-decoration: none;\n        }\n      }\n    }\n  }\n\n  @media (max-width: $screen-sm-max) {\n    min-height: 0;\n  }\n\n  @media (max-width: $screen-xs-max) {\n    padding-bottom: 48px;\n  }\n\n  aside {\n    // position: absolute;\n    // bottom: 64px;\n    // left: 0;\n    // right: 0;\n\n    margin-block-start: 96px;\n    margin-block-end: 40px;\n\n    .container {\n      &::before, &::after {\n        display: none;\n      }\n\n      position: relative;\n      display: flex;\n      flex-wrap: wrap;\n      justify-content: space-between;\n      align-items: center;\n    }\n  }\n\n  .stats {\n    padding: 0;\n    // position: absolute;\n    bottom: 0px;\n    left: 0;\n    list-style: none;\n    display: flex;\n    flex-wrap: wrap;\n    margin-block-end: 0;\n    margin-inline-end: 32px;\n\n    a {\n      font-size: 14px;\n      line-height: 17px;\n      letter-spacing: -0.02em;\n      color: #92a1b3;\n      padding: 0 16px;\n      transition: 0.3s color;\n\n      svg {\n        vertical-align: -3px;\n\n        path {\n          transition: 0.3s fill;\n        }\n      }\n\n      &:hover {\n        color: darken(#92a1b3, 10);\n\n        svg path {\n          fill: darken(#92a1b3, 10);\n        }\n      }\n    }\n\n    @media (max-width: $screen-xs-max) {\n      left: calc(50% - 140px);\n      bottom: 40px;\n    }\n  }\n\n  ionic-newsletter-signup {\n    width: 400px;\n    // position: absolute;\n    bottom: 0px;\n    right: 20px;\n    max-width: calc(100% - 30px);\n\n    @media (max-width: $screen-xs-max) {\n      bottom: -26px;\n      right: auto;\n      left: calc(50% - 200px);\n    }\n\n    @media (max-width: 460px) {\n      left: 15px;\n    }\n  }\n\n  @media (max-width: $screen-sm-max) {\n    // overflow: hidden;\n    width: 100%;\n  }\n}\n"
  },
  {
    "path": "assets/scss/components/promos/_hybrid-vs-native.scss",
    "content": "#promo--hybrid-vs-native {\n  .wrapper {\n    display: flex;\n    border-radius: 32px;\n    overflow: hidden;\n    border: 1px solid #e9edf3;\n\n    background: linear-gradient(180deg, #0d2e55 0%, #001a3a 100%);\n\n    @media screen and (max-width: $screen-xs-max) {\n      flex-direction: column;\n    }\n\n    > * {\n      flex-basis: 50%;\n      min-width: 0;\n    }\n  }\n\n  .image-wrapper {\n    position: relative;\n\n    img {\n      display: block;\n      max-width: 100%;\n      position: absolute;\n      bottom: 0;\n\n      @media screen and (max-width: $screen-xs-max) {\n        position: relative;\n      }\n    }\n  }\n\n  .heading-group {\n    padding: clamp(32px, 5vw, 84px) clamp(32px, 4.5vw, 50px)\n      clamp(32px, 5vw, 85px) clamp(32px, 4.5vw, 50px);\n\n\n    h2 {\n      font-weight: 600;\n      font-size: 24px;\n      line-height: 120%;\n      letter-spacing: -0.03em;\n      color: #cdd6df;\n\n      margin-block-end: clamp(16px, 3vw, 32px);\n\n      span {\n        color: #fff;\n      }\n    }\n\n    a {\n      display: inline-block;\n      background: #3880ff;\n      border-radius: 100px;\n      padding: 8.5px 12px 7.5px;\n      min-height: 32px;\n      vertical-align: middle;\n      text-decoration: none;\n      cursor: pointer;\n\n      font-weight: 600;\n      font-size: 13px;\n      line-height: 112%;\n      letter-spacing: -0.02em;\n      color: #fff;\n\n      transition: background-color 0.2s ease-out;\n\n      &:hover,\n      &:active,\n      &:focus {\n        background: #5291ff;\n      }\n\n      .arrow {\n        letter-spacing: 0;\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "assets/scss/components/promos/_index.scss",
    "content": ".promo {\n  padding-top: 64px;\n  padding-bottom: 64px;\n  background-color: #f3f5f9;\n  position: relative;\n\n  .container {\n    display: flex;\n    justify-content: flex-end;\n    align-items: center;\n\n    &::before,\n    &::after {\n      display: none;\n    }\n  }\n\n  hgroup {\n    width: 50%;\n    padding-left: 42px;\n  }\n\n  h2,\n  p {\n    max-width: 460px;\n  }\n\n  h2 {\n    font-size: 24px;\n    letter-spacing: -0.03em;\n    font-weight: 700;\n    margin-top: 0;\n  }\n\n  p {\n    font-size: 16px;\n    line-height: 24px;\n    color: #788497;\n    margin-top: 16px;\n    margin-bottom: 20px;\n  }\n\n  .btn {\n    font-size: 14px;\n    font-weight: 700;\n    background-color: #2d79ff;\n\n    &:hover {\n      background-color: #4486fb;\n    }\n\n    &.white {\n      background: white;\n\n      &:hover {\n        background: white;\n      }\n    }\n  }\n\n  &--dark {\n    background-color: #112037;\n\n    h2 {\n      color: #fff;\n    }\n    p {\n      color: #a8b0be;\n    }\n  }\n\n  &__illustration {\n    width: 459px;\n    position: absolute;\n    bottom: 0;\n    left: 50%;\n    transform: translateX(-480px);\n    z-index: 3;\n  }\n\n  &.promo-reversed .container {\n    justify-content: flex-start;\n\n    hgroup {\n      flex: 1;\n    }\n  }\n\n  .promo__image {\n    max-width: 100%;\n    margin: 32px 15px;\n  }\n\n  &.promo-btns,\n  &.promo-newsletter {\n    hgroup {\n      flex: 1;\n      padding: 46px 0;\n    }\n\n    .container {\n      padding-top: 37px;\n    }\n\n    h2,\n    p {\n      max-width: 100%;\n    }\n\n    h2 {\n      font-size: 28px;\n      font-weight: 600;\n      margin-bottom: 8px;\n    }\n\n    p {\n      margin-top: 8px;\n      font-size: 20px;\n      letter-spacing: -0.031em;\n\n      &:last-child {\n        margin-bottom: 0;\n      }\n    }\n\n    h1,\n    h2,\n    h3 {\n      color: $blue;\n    }\n\n    .btns {\n      margin-left: 24px;\n    }\n\n    @media (max-width: $screen-xs-max) {\n      padding-bottom: 64px;\n\n      .btns {\n        text-align: center;\n      }\n\n      .btn {\n        margin-bottom: 12px;\n      }\n    }\n  }\n\n  &.promo-newsletter {\n    background: white;\n\n    .container {\n      padding-top: 6px;\n    }\n\n    strong {\n      font-weight: 600;\n    }\n\n    .btns {\n      flex: 0 1 476px;\n\n      @media (max-width: $screen-sm-max) {\n        flex: 0;\n      }\n\n      @media (max-width: $screen-xs-max) {\n        width: 100%;\n        max-width: 476px;\n        margin-left: 0;\n      }\n    }\n  }\n\n  @media (max-width: $screen-sm-max) {\n    &__illustration {\n      transform: translateX(-400px);\n    }\n  }\n\n  @media (max-width: $screen-xs-max) {\n    padding-bottom: 272px;\n\n    &.promo-inline {\n      padding-bottom: 64px;\n    }\n\n    .container {\n      justify-content: center;\n      flex-direction: column;\n    }\n\n    hgroup {\n      width: 100%;\n      padding: 0;\n      text-align: center;\n    }\n\n    h2,\n    p {\n      margin-left: auto;\n      margin-right: auto;\n    }\n\n    &__illustration {\n      width: 380px;\n      transform: translateX(-190px);\n    }\n  }\n\n  &--tri-cta {\n    background: #f6f8fb;\n\n    ul {\n      list-style: none;\n      letter-spacing: -0.01em;\n    }\n\n    li {\n      margin: 24px 48px;\n      position: relative;\n      width: calc(33.3% - 64px);\n\n      &::after {\n        content: \"\";\n        position: absolute;\n        right: 0;\n        right: -48px;\n        top: calc(50% - 48px);\n        height: 96px;\n        border-left: 1px solid #dee3ea;\n      }\n\n      &:first-child {\n        margin-left: 0;\n      }\n\n      &:last-child {\n        margin-right: 0;\n\n        &::after {\n          display: none;\n        }\n      }\n    }\n\n    h4 {\n      font-size: 20px;\n      color: black;\n      font-weight: 600;\n    }\n\n    p {\n      font-family: $font-family-inter;\n      line-height: 29px;\n      font-size: 16px;\n      color: #73849a;\n    }\n\n    @media (max-width: $screen-sm-max) {\n      padding-bottom: 64px;\n\n      li {\n        width: 100%;\n        margin: 0;\n        padding: 48px 16px;\n        text-align: center;\n\n        &::after {\n          display: none;\n        }\n\n        p {\n          margin: 0 0 1em;\n          display: inline-block;\n        }\n\n        .btn {\n          display: block;\n        }\n      }\n    }\n  }\n\n  &#promo--ionic-for-enterprise,\n  &#promo--state-of-app-dev-2020 {\n    padding-top: 56px;\n    padding-bottom: 72px;\n    background: linear-gradient(\n      to right,\n      #f1f8ff 0%,\n      #c8ccfd 49.99%,\n      #f6f6fb 50%,\n      #f6f6fb 100%\n    );\n\n    .promo__illustration {\n      width: 568px;\n      height: 386px;\n      left: calc(50% - 60px);\n      z-index: 0;\n    }\n\n    hgroup {\n      padding-left: 60px;\n      padding-right: 40px;\n    }\n\n    h3 {\n      font-size: 28px;\n      line-height: 34px;\n      letter-spacing: -0.03em;\n      color: #29323e;\n      font-weight: 600;\n      text-transform: none;\n      margin-top: 20px;\n      margin-bottom: 20px;\n\n      em {\n        color: #616e7e;\n        font-style: normal;\n      }\n    }\n\n    .btn {\n      background: rgba(#cfd4fe, 0.35);\n      border-radius: 10px;\n      box-shadow: none;\n      font-size: 15px;\n      padding: 16px 18px 14px;\n      letter-spacing: 0.06em;\n      text-transform: uppercase;\n\n      ion-icon {\n        font-size: 18px;\n        vertical-align: -4px;\n      }\n    }\n\n    @media (max-width: $screen-sm) {\n      background: linear-gradient(to right, #f1f8ff 0%, #c8ccfd 100%);\n      padding-bottom: 280px;\n      overflow: hidden;\n\n      hgroup {\n        padding: 0;\n        text-align: left;\n      }\n\n      h3 {\n        text-align: left;\n      }\n\n      .promo__illustration {\n        bottom: -100px;\n      }\n    }\n  }\n\n  &#promo--state-of-app-dev-2020 {\n    overflow: hidden;\n    background: linear-gradient(\n      to right,\n      #f1f8ff 0%,\n      #c8ccfd 49.99%,\n      #eef5ff 50%,\n      #e8f1ff 100%\n    );\n\n    .promo__illustration {\n      width: 450px;\n      height: 501px;\n      left: calc(50% - 12px);\n      bottom: auto;\n      top: 32px;\n    }\n\n    @media (max-width: $screen-sm) {\n      background: linear-gradient(to right, #f1f8ff 0%, #c8ccfd 100%);\n\n      .promo__illustration {\n        width: 300px;\n        height: 334px;\n        top: auto;\n        bottom: -100px;\n        left: calc(50% + 42px);\n      }\n    }\n  }\n\n  &#promo--enterprise {\n    padding-top: 118px;\n    padding-bottom: 115px;\n    background: none;\n    border-top: 1px solid #eff3f8;\n\n    h2 {\n      font-size: 32px;\n      line-height: 40px;\n      letter-spacing: -0.04em;\n      color: #1a232f;\n    }\n\n    p {\n      margin-top: 5px;\n    }\n\n    .container {\n      padding-top: 0;\n    }\n\n    hgroup {\n      padding: 0;\n    }\n\n    .btns {\n      padding-left: 8px;\n      margin-top: 11px;\n      margin-right: 4px;\n    }\n\n    .btn {\n      padding: 13px 17px 9px;\n      border-radius: 10px;\n      box-shadow: none;\n      font-size: 18px;\n      font-weight: 600;\n      line-height: 25px;\n      letter-spacing: -0.02em;\n    }\n\n    .blue {\n      background: $blue-800;\n    }\n\n    .light-blue {\n      background: #e7f4ff;\n      color: $blue;\n    }\n  }\n\n  &#promo--quad-cta {\n    padding: 0;\n    background: none;\n    border-top: 1px solid #e9edf3;\n    border-bottom: 1px solid #e9edf3;\n\n    ul {\n      padding: 0 15px;\n      margin: 0 auto;\n    }\n\n    li {\n      border-right: 1px solid #e9edf3;\n      padding: 0;\n      margin: 0;\n      text-align: center;\n      width: 25%;\n\n      &:last-child {\n        border-right: none;\n      }\n\n      &::after {\n        display: none;\n      }\n    }\n\n    a {\n      padding: 8px;\n      min-height: 240px;\n      display: flex;\n      flex-direction: column;\n      align-content: center;\n      justify-content: center;\n    }\n\n    h4 {\n      font-family: $font-family-inter;\n      margin-top: 0;\n      margin-bottom: 0;\n      line-height: 25px;\n      letter-spacing: -0.04em;\n      color: #1a232f;\n      font-size: 20px;\n      line-height: 25px;\n      text-transform: none;\n    }\n\n    p {\n      margin-top: 0;\n      margin-bottom: 0;\n      font-size: 14px;\n      line-height: 27px;\n      letter-spacing: -0.01em;\n      color: #73849a;\n    }\n\n    .promo--quad-cta__graphic {\n      width: 80px;\n      height: 80px;\n      display: block;\n      margin: 8px auto 24px;\n      position: relative;\n\n      &::before,\n      &::after {\n        background: url(\"/img/promos/sprite-quad-cta.png?1\");\n        background-size: 100%;\n        content: \"\";\n        position: absolute;\n        top: 0;\n        right: 0;\n        left: 0;\n        bottom: 0;\n        transition: 0.3s opacity,\n          0.3s transform cubic-bezier(0.175, 0.885, 0.32, 1.275);\n      }\n\n      &::after {\n        opacity: 0;\n      }\n\n      &--enterprise {\n        &::before {\n          background-position: 0 0;\n        }\n        &::after {\n          background-position: 0 -80px;\n        }\n      }\n\n      &--docs {\n        &::before {\n          background-position: 0 (80px * 2 * -1);\n        }\n        &::after {\n          background-position: 0 (80px * 3 * -1);\n        }\n      }\n\n      &--github {\n        &::before {\n          background-position: 0 (80px * 4 * -1);\n        }\n        &::after {\n          background-position: 0 (80px * 5 * -1);\n        }\n      }\n\n      &--twitter {\n        &::before {\n          background-position: 0 (80px * 6 * -1);\n        }\n        &::after {\n          background-position: 0 (80px * 7 * -1);\n        }\n      }\n    }\n\n    a:hover .promo--quad-cta__graphic {\n      &::before,\n      &::after {\n        transform: translateY(-5px);\n      }\n\n      &::after {\n        opacity: 1;\n      }\n    }\n\n    @media (max-width: $screen-sm) {\n      ul {\n        flex-direction: row;\n        flex-wrap: wrap;\n      }\n\n      li {\n        flex: 50%;\n        width: 50%;\n        border-right: none;\n      }\n    }\n  }\n\n  &-card {\n    display: flex;\n    align-items: center;\n    justify-content: stretch;\n    max-width: 1136px;\n    padding: 0;\n    margin-top: 32px;\n    background: white;\n    border-radius: 12px;\n    box-shadow: 0px 12px 24px rgba(2, 8, 20, 0.2),\n      0px 4px 8px rgba(2, 8, 20, 0.1);\n\n    &::before,\n    &::after {\n      display: none;\n    }\n\n    svg,\n    .card-banner {\n      flex: 0 0 480px;\n      max-width: 480px;\n    }\n\n    hgroup {\n      padding: 8px 5.66% 8px 7%;\n    }\n\n    h4 {\n      font-size: 18px;\n      font-weight: 600;\n      line-height: 27px;\n      font-style: normal;\n      margin-top: 0;\n      margin-bottom: 40px;\n      letter-spacing: 0.06em;\n      text-transform: uppercase;\n      font-family: $font-family-inter;\n\n      svg {\n        vertical-align: -60%;\n        margin-right: 11px;\n        width: 48px;\n        height: 48px;\n      }\n    }\n\n    h3 {\n      font-size: 32px;\n      color: #020814;\n      font-weight: 600;\n      line-height: 35px;\n      margin-bottom: 3px;\n      letter-spacing: -0.03em;\n    }\n\n    p {\n      font-size: 20px;\n      line-height: 28px;\n      letter-spacing: -0.02em;\n      color: rgba(91, 112, 139, 0.9);\n    }\n\n    .btn {\n      font-size: 15px;\n      font-weight: 700;\n      margin-top: 22px;\n      line-height: 21px;\n      border-radius: 10px;\n      letter-spacing: 0.08em;\n      text-transform: uppercase;\n      padding: 14px 14px 12px 19px;\n      text-align: center;\n      white-space: normal;\n\n      &::after {\n        font-family: \"Ionicons\";\n        content: \"\";\n        font-size: 23px;\n        font-weight: 400;\n        vertical-align: -3px;\n        margin-left: 5px;\n      }\n    }\n\n    @media (max-width: $screen-md-max) {\n      h4 {\n        margin-bottom: 0;\n      }\n\n      .btn {\n        margin-top: 0;\n      }\n    }\n\n    @media (max-width: $screen-sm-max) {\n      flex-direction: column;\n      align-items: center;\n      padding: 32px;\n\n      hgroup {\n        padding: 0;\n\n        h4 svg {\n          display: inline-block;\n        }\n      }\n\n      svg,\n      .card-banner {\n        display: none;\n      }\n\n      .btn {\n        margin-top: 16px;\n      }\n    }\n\n    @media (max-width: $screen-xs-max) {\n      margin: 96px 16px 32px;\n    }\n\n    &--offline-storage {\n      h4 {\n        color: $purple;\n      }\n\n      .btn,\n      .btn:active {\n        background: $purple;\n      }\n    }\n\n    &--auth-connect {\n      h4 {\n        color: $green;\n      }\n\n      .btn,\n      .btn:active {\n        background: $green;\n      }\n    }\n\n    &--identity-vault {\n      h4 {\n        color: $navy;\n      }\n\n      .btn,\n      .btn:active {\n        background: $navy;\n      }\n    }\n  }\n}\n\n#promo--how-to {\n  margin-bottom: 0;\n  position: relative;\n  padding-top: 140px;\n\n  &::before {\n    position: absolute;\n    top: 0;\n    width: 100vw;\n    border-top: 1px solid rgba(#92a1b3, 0.3);\n    content: \"\";\n    display: block;\n  }\n}\n\n@import \"./hybrid-vs-native\";\n@import \"./offline-storage\";\n@import \"./ioniconf\";\n"
  },
  {
    "path": "assets/scss/components/promos/_ioniconf.scss",
    "content": "#page-home #promo--ioniconf,\n#promo--ioniconf {\n  background: #001228 url('/img/ioniconf/ioniconf-promo-bg.png') 50% 50% no-repeat;\n  background-size: cover;\n  padding-top: 49px;\n  padding-bottom: 49px;\n\n  .container {\n    justify-content: center;\n\n    hgroup {\n      padding-right: 6px;\n\n      @media (max-width: $screen-md-max) {\n        padding-right: 0;\n        padding-left: 0;\n      }\n    }\n\n    h3 {\n      color: #F6F8FB;\n      font-weight: 600;\n      font-size: 24px;\n      line-height: 120%;\n      letter-spacing: -0.03em;\n      margin-bottom: 38px;\n    }\n  \n    .btn {\n      padding-left: 12px;\n      padding-right: 12px;\n      padding-top: 10px;\n      padding-bottom: 10px;\n      background: linear-gradient(74.26deg,#4cc3ff 0,#4172ff 100%);\n      color: #fff;\n      height: 39px;\n      border-radius: 8px;\n      border: none;\n      font-weight: 600;\n      font-size: 16px;\n      line-height: 1em;\n      letter-spacing: .08em;\n      white-space: nowrap;\n      text-transform: uppercase;\n      font-family: $font-family-inter;\n    }\n  }\n}"
  },
  {
    "path": "assets/scss/components/promos/_offline-storage.scss",
    "content": "#promo--offline-storage {\n  background: linear-gradient(317.92deg, #7A85FB 16.45%, #EEEFFF 91.77%);\n  padding-top: 41px;\n\n  .promo__illustration {\n    width: 616px;\n    height: 360px;\n    transform: none;\n    left: calc(50% - 590px);\n    z-index: 1;\n\n    @media (max-width: $screen-sm-max) {\n      left: calc(50% - 500px);\n    }\n\n    @media (max-width: $screen-xs-max) {\n      width: 411px;\n      height: 240px;\n      left: calc(50% - 210px);\n    }\n  }\n\n  h3 {\n    color: white;\n    font-size: 28px;\n    line-height: 34px;\n    margin-bottom: 6px;\n    letter-spacing: -0.03em;\n  }\n\n  p {\n    font-size: 16px;\n    line-height: 26px;\n    letter-spacing: -0.01em;\n    color: rgba(white, .8);\n    max-width: 360px;\n    margin-top: 0;\n    margin-bottom: 32px;\n  }\n\n  .btn {\n    font-size: 15px;\n    color: #7681F5;\n    line-height: 21px;\n    border-radius: 10px;\n    letter-spacing: 0.07em;\n    text-transform: uppercase;\n    padding: 15px 13px 12px 17px;\n  }\n}\n\n#promo--ionic-for-enterprise__modal,\n#promo--offline-storage__modal {\n  .modal-dialog {\n    width: 672px;\n    max-width: calc(100% - 24px);\n  }\n\n  .modal-body {\n    padding: 48px;\n  }\n\n  hgroup {\n    margin: 0 0 16px;\n    padding: 0;\n    text-align: left;\n  }\n\n  h2 {\n    font-size: 32px;\n    line-height: 38px;\n  }\n\n  p {\n    font-size: 16px !important;\n    line-height: 26px !important;\n    letter-spacing: -0.02em !important;\n  }\n\n  form {\n    max-width: 100%;\n  }\n\n  .actions {\n    text-align: right;\n\n    input {\n      width: auto;\n      background: $blue-800;\n      border-radius: 10px;\n      font-size: 15px;\n      line-height: 21px;\n      letter-spacing: 0.08em;\n      text-transform: uppercase;\n      padding: 14px 18px;\n      min-height: auto;\n      height: auto;\n      \n      &::after {\n        background-image: url('data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\" class=\"s-ion-icon\"><path d=\"M294.1 256L167 129c-9.4-9.4-9.4-24.6 0-33.9s24.6-9.3 34 0L345 239c9.1 9.1 9.3 23.7.7 33.1L201.1 417c-4.7 4.7-10.9 7-17 7s-12.3-2.3-17-7c-9.4-9.4-9.4-24.6 0-33.9l127-127.1z\"></path></svg>');\n        background-size: 100%;\n        content: '';\n        height: 20px;\n        width: 20px;\n        display: block;\n        margin-left: 8px;\n        transform: translateY(-1px);\n      }\n    }\n  }\n}"
  },
  {
    "path": "assets/scss/creator.scss",
    "content": "$whitish: #f3f5f7;\n$lighter-grey: #e2e7ef;\n$light-grey: #dbe0e9;\n$lightish-grey: #a4abb9;\n$med-grey: #9bacb6;\n$darkish-grey: #747a85;\n$dark-grey: #6e767f;\n$darker-grey: #484f5b;\n$blackish: #1f232c;\n\n$light-blue: #c0e1ff;\n$blue: #4c8fff;\n\n\n//@import url(https://fonts.googleapis.com/css?family=Nunito:300);\n@import url('https://code.ionicframework.com/ionicons/2.0.1/css/ionicons.min.css');\n@import './fonts',\n        'vars';\n\n// Bootstrap\n@import 'bootstrap-sass/assets/stylesheets/bootstrap/variables';\n@import 'bootstrap-sass/assets/stylesheets/bootstrap/mixins';\n@import 'bootstrap-sass/assets/stylesheets/bootstrap/normalize';\n@import 'bootstrap-sass/assets/stylesheets/bootstrap/print';\n@import 'bootstrap-sass/assets/stylesheets/bootstrap/glyphicons';\n@import 'bootstrap-sass/assets/stylesheets/bootstrap/scaffolding';\n@import 'bootstrap-sass/assets/stylesheets/bootstrap/type';\n@import 'bootstrap-sass/assets/stylesheets/bootstrap/code';\n@import 'bootstrap-sass/assets/stylesheets/bootstrap/grid';\n@import 'bootstrap-sass/assets/stylesheets/bootstrap/tables';\n@import 'bootstrap-sass/assets/stylesheets/bootstrap/forms';\n@import 'bootstrap-sass/assets/stylesheets/bootstrap/buttons';\n@import 'bootstrap-sass/assets/stylesheets/bootstrap/component-animations';\n@import 'bootstrap-sass/assets/stylesheets/bootstrap/dropdowns';\n@import 'bootstrap-sass/assets/stylesheets/bootstrap/button-groups';\n@import 'bootstrap-sass/assets/stylesheets/bootstrap/input-groups';\n@import 'bootstrap-sass/assets/stylesheets/bootstrap/navs';\n@import 'bootstrap-sass/assets/stylesheets/bootstrap/navbar';\n@import 'bootstrap-sass/assets/stylesheets/bootstrap/modals';\n@import 'bootstrap-sass/assets/stylesheets/bootstrap/tooltip';\n@import 'bootstrap-sass/assets/stylesheets/bootstrap/utilities';\n@import 'bootstrap-sass/assets/stylesheets/bootstrap/responsive-utilities';\n\n.btn {\n  font-weight: 600;\n  border-radius: 3px;\n  // letter-spacing: 1px;\n  padding: 10px 20px 12px; // match input[type=text].input\n  font-size: 16px;\n\n  &.btn-ionic {\n    background: $blue;\n    color: white;\n    transition: color .2s, background-color .2s;\n    -webkit-font-smoothing: antialiased;\n    font-size: 20px;\n    letter-spacing: 0;\n    padding: 16px 28px;\n\n    &:hover {\n      color: #fff;\n      background: #5B98FF;\n    }\n  }\n\n  &.btn-outline {\n    color: $blue;\n    border-color: $blue;\n    border: $blue 2px solid;\n    transition: color .2s, background-color .2s;\n    -webkit-font-smoothing: antialiased;\n\n    &:hover {\n      color: white;\n      background-color: $blue;\n    }\n  }\n\n  &.fill {\n    &.green,\n    &.blue {\n      border-radius: 4px;\n      color: white;\n      font-size: 14px;\n      font-weight: 500;\n      position: relative;\n      box-shadow: 0 1px 1px rgba(0,0,0,0.1);\n      padding: 12px 20px;\n    }\n\n    &.green {\n      background: #39d46d;\n      padding-left: 35px;\n\n      .icon {\n        font-size: 26px;\n        position: absolute;\n        top: 4px;\n        left: 15px;\n        font-weight: 800;\n      }\n    }\n\n    &.blue {\n      background: #48acf8;\n      padding-left: 45px;\n      margin-left: 5px;\n\n      .icon {\n        font-size: 22px;\n        position: absolute;\n        top: 6px;\n        left: 20px;\n      }\n    }\n  }\n}\n\nheader.container {\n  padding-top: 20px;\n  padding-bottom: 20px;\n  -webkit-font-smoothing: antialiased;\n\n  .creator-logo {\n    width: 120px;\n  }\n\n  nav {\n    float: right;\n\n    @media (max-width: $screen-xs-max)  {\n      float: none;\n    }\n\n    a {\n      color: $darker-grey;\n      display: inline-block;\n      font-weight: 500;\n      transition: .2s color;\n      font-size: 14px;\n      letter-spacing: 0;\n\n      &.active,\n      &:hover {\n        color: $lightish-grey;\n        box-shadow: none;\n      }\n\n      @media (max-width: $screen-xs-max)  {\n        width: 100%;\n        text-align: center;\n      }\n    }\n\n    .btn {\n      padding: 8px 14px;\n      margin-left: 2px;\n\n      &.border {\n        border-left: 1px solid $lighter-grey;\n        border-radius: 0;\n        margin-left: 10px;\n        padding-left: 25px\n      }\n    }\n\n    .blue {\n      color: $blue;\n\n      &:hover,\n      &:active {\n        color: lighten($blue, 5);\n        box-shadow: none;\n      }\n    }\n\n    .signup {\n      background: $blue;\n      color: white;\n      transition: .2s background;\n\n      &:hover {\n        background: darken($blue, 3);\n        color: white;\n      }\n    }\n  }\n}\n\nhgroup {\n  padding-top: 75px;\n  padding-bottom: 75px;\n  text-align: center;\n\n  h1 {\n    font-weight: 600;\n    font-size: 32px;\n    margin-bottom: 0;\n  }\n\n  h2 {\n    font-weight: 600;\n    font-size: 28px;\n    margin-bottom: 15px;\n    color: $blackish;\n\n    strong {\n      font-weight: 700;\n    }\n  }\n\n  h3 {\n    font-size: 25px;\n    font-weight: 600;\n\n    + p {\n      font-weight: 400;\n      font-size: 14px;\n      line-height: 20px;\n    }\n  }\n\n  p {\n    font-weight: 300;\n    font-size: 20px;\n    color: $dark-grey;\n    margin-bottom: 32px;\n  }\n\n  &.preserver {\n    padding-top: 180px;\n    background: #f3f5f7 center 55px no-repeat url('/img/pro/creator/support-buoy.png');\n    background-size: 80px;\n    border-bottom: 2px #e2e7ef solid;\n  }\n\n  &:not(form) .btn {\n    margin-top: 10px;\n  }\n\n  &.grey-top {\n    background: $whitish;\n    padding-bottom: 200px;\n    margin-bottom: -130px;\n    border-bottom: 2px solid $light-grey;\n  }\n}\n\ninput[type=text].input {\n  border: 2px solid $light-grey;\n  border-radius: 3px;\n  padding: 10px 20px;\n  font-size: 16px;\n  transition: .4s border-color;\n\n  &::-webkit-input-placeholder {\n    color: $lightish-grey;\n  }\n\n  &:-ms-input-placeholder {\n    color: $lightish-grey;\n  }\n\n  &:focus {\n    border-color: $blue;\n    outline: none;\n  }\n}\n\n.tail {\n  background: #263d4c;\n  color: $med-grey;\n  padding: 80px 0;\n  margin-top: 90px;\n\n  &.ghost {\n    background: #263d4c center center no-repeat url('/img/pro/creator/bg-creator-ghost.png');\n    background-size: auto 100%;\n  }\n\n  h2 {\n    color: white;\n    font-size: 28px;\n    font-weight: 600;\n  }\n\n  p {\n    font-size: 18px;\n\n    a {\n      position: relative;\n      color: $blue;\n      transition: color .2s;\n\n      &.underscore:after {\n        content: '';\n        min-height: 1px;\n        position: absolute;\n        left: 0;\n        right: 0;\n        bottom: -3px;\n        border-bottom: 2px solid $blue;\n        transition: border-color .2s;\n      }\n\n      &:hover {\n        color: lighten($blue, 15);\n        text-decoration: none;\n\n        &:after {\n          border-color: lighten($blue, 15);\n        }\n      }\n    }\n  }\n}\n\n.start-now {\n  margin-top: 60px;\n\n  form {\n    position: relative;\n    padding-top: 28px;\n\n    .btn {\n      margin-top: -3px;\n      padding: 11px 20px;\n      font-size: 16px;\n    }\n\n    .input {\n      width: 330px;\n      @media (max-width: 500px) {\n        width: 100%;\n      }\n    }\n\n    &:before {\n      background: no-repeat center center url('/img/pro/creator/signup-arrow.png');\n      background-size: 61px;\n      width: 61px;\n      height: 56px;\n      content: '';\n      position: absolute;\n      margin-left: -90px;\n      margin-top: -25px;\n    }\n  }\n\n  @media (max-width: $screen-sm-max) {\n    padding-left: 5px;\n    padding-right: 5px;\n\n    form .btn {\n      display: block;\n      margin: 10px auto 0;\n    }\n  }\n}\n\nfooter {\n  color: $lightish-grey;\n  padding-top: 50px;\n\n  .row {\n    display: flex;\n    flex-flow: row wrap;\n    width: 1000px;\n    margin: 0 auto;\n    @media (max-width: $screen-md-max) {\n      width: auto;\n    }\n    @media (max-width: $screen-sm-max) {\n      display: block;\n\n      .left,\n      .right,\n      .center {\n        width: auto;\n        margin: 0 auto;\n        text-align: center;\n      }\n\n      .center {\n        justify-content: space-around;\n        margin-top: 50px;\n      }\n    }\n  }\n\n\n  .left {\n    width: 190px;\n    flex-grow: 0;\n    flex-shrink: 0;\n    margin-right: 87px;\n    font-size: 14px;\n\n    p {\n      line-height: 20px;\n      color: $lightish-grey;\n      font-weight: 300;\n    }\n\n    .creator-logo {\n      width: 120px;\n      margin-bottom: 22px;\n    }\n\n    @media (max-width: $screen-md-max) {\n      margin-right: 5px;\n    }\n  }\n\n  .right {\n    width: 332px;\n    flex-grow: 0;\n    flex-shrink: 0;\n    margin-left: 60px;\n    @media (max-width: $screen-md-max) {\n      margin-left: 5px;\n    }\n    @media (max-width: $screen-sm-max) {\n      display: none !important;\n    }\n  }\n\n  .twitter {\n    background: no-repeat center center url('/img/twitter-bubble.png');\n    background-size: 332px;\n    width: 332px;\n    height: 109px;\n    padding: 18px 16px 26px 59px;\n    font-size: 14px;\n    color: $blackish;\n\n    p {\n      color: $blackish;\n      line-height: 20px;\n      font-weight: 400;\n    }\n\n    a {\n      color: $blue;\n\n      &:hover {\n        color: darken($blue,15);\n      }\n    }\n  }\n\n  .center {\n    display: flex;\n    flex-flow: row wrap;\n    justify-content: space-between;\n    flex-grow: 2;\n\n    section {\n      display: inline-block;\n    }\n  }\n\n  ul {\n    list-style: none;\n    padding: 0;\n\n    li {\n      font-size: 14px;\n      line-height: 2em;\n    }\n  }\n\n  a {\n    color: #b0b6c4;\n    transition: color .2s;\n\n    &:hover {\n      color: #4f8ef7;\n      text-decoration: none;\n    }\n  }\n\n  h3 {\n    font-weight: 500;\n    font-size: 16px;\n    color: $blackish;\n    line-height: 10.5px;\n  }\n\n  .bottom {\n    text-align: center;\n    margin-top: 44px;\n    padding-top: 44px;\n    padding-bottom: 24px;\n    position: relative;\n\n    .ioni-io-logo {\n      width: 72px;\n      height: 24px;\n      margin-right: 10px;\n      margin-top: -3px;\n    }\n\n    p {\n      margin: 0 auto;\n      color: $light-grey;\n      font-size: 12px;\n    }\n\n    &:before {\n      content: '';\n      width: 98px;\n      height: 1px;\n      border-bottom: 1px solid $lighter-grey;\n      position: absolute;\n      top: 0;\n      left: 0;\n      right: 0;\n      margin: 0 auto;\n    }\n  }\n}\n\n\n#page-creator {\n  color: $blackish;\n  -webkit-font-smoothing: antialiased;\n\n  .hero {\n    background: center bottom no-repeat url('/img/pro/creator/bg-hero-creator.jpg');\n    background-size: cover;\n    min-height: 875px;\n\n    @media (min-width: 1950px)  {\n      background-position: center -160px;\n\n      hgroup.container h3 {\n        max-width: 100%;\n      }\n    }\n\n    @media (min-width: 2250px)  {\n      background-position: center -235px;\n    }\n\n    @media (min-width: 2400px)  {\n      background-position: center -270px;\n    }\n\n    @media (min-width: 2500px)  {\n      background-position: center -290px;\n    }\n\n    @media (min-width: 2550px)  {\n      background-position: center -310px;\n    }\n\n    @media (max-width: $screen-xs-max)  {\n      background-size: $screen-xs-max;\n      min-height: 600px;\n      background-position: center bottom;\n    }\n\n    hgroup {\n      padding-top: 70px;\n      margin-top: 0;\n\n      h1 {\n        font-weight: 600;\n        font-size: 32px;\n        letter-spacing: -0.01em;\n        margin-top: 20px;\n\n        a {\n          color: $blue;\n          transition: color .2s;\n          text-decoration: none;\n\n          &:hover {\n            color: lighten($blue, 10);\n          }\n        }\n      }\n\n      h3 {\n        color: #474d59;\n        font-size: 20px;\n        font-weight: 500;\n        max-width: 500px;\n        margin: 26px auto 44px;\n        -webkit-font-smoothing: antialiased;\n        line-height: 28px;\n\n        strong {\n          font-weight: 600;\n          color: $dark-grey;\n        }\n      }\n    }\n  }\n\n  .used-by {\n    font-size: 16px;\n    color: $lightish-grey;\n    text-align: center;\n    margin-top: 30px;\n    margin-bottom: 60px;\n\n    p {\n      margin-bottom: 20px;\n      font-weight: 400;\n    }\n\n    img {\n      width: 602px;\n      @media (max-width: $screen-xs-max) {\n        width: 100%;\n      }\n    }\n  }\n\n  .how-creator-works {\n    background: white;\n    background: linear-gradient(to right, #4a8efa 0%,#34b3fe 100%);\n    text-align: center;\n\n    hgroup {\n      padding-top: 80px;\n      padding-bottom: 50px;\n    }\n\n    h3,\n    h4,\n    strong {\n      color: white;\n    }\n\n    strong {\n      font-weight: 600;\n    }\n\n    h4 {\n      font-size: 18px;\n      font-weight: 500;\n    }\n\n    p {\n      color: white;\n      font-weight: 400;\n      line-height: 22px;\n      font-size: 14px;\n    }\n\n    hgroup {\n      h3 {\n        font-weight: 500;\n      }\n\n      p {\n        font-size: 18px;\n      }\n    }\n\n    .step {\n      display: inline-block;\n      width: 330px;\n      padding-top: 215px;\n      padding-bottom: 80px;\n      margin-right: 70px;\n      background: no-repeat center top;\n      background-size: 270px;\n      position: relative;\n\n      &:last-child {\n        margin-right: 0;\n\n        &::before {\n          display: none;\n        }\n      }\n\n      &.drag-n-drop {\n        background-image: url('/img/pro/creator/works-dnd.png?1');\n      }\n\n      &.preview {\n        background-image: url('/img/pro/creator/works-preview.png');\n      }\n\n      &.export {\n        background-image: url('/img/pro/creator/works-export.png?1');\n      }\n\n      &:before {\n        background: no-repeat center center url('/img/pro/creator/ico-arrow-works.png');\n        background-size: 19px;\n        width: 19px;\n        height: 43px;\n        content: '';\n        position: absolute;\n        top: 85px;\n        right: -60px;\n      }\n\n      @media (max-width: $screen-md-max) and (min-width: $screen-md-min) {\n        margin-right: 60px;\n        width: 270px;\n\n        &:before {\n          right: -35px;\n        }\n      }\n      @media (max-width: $screen-sm-max) {\n        margin-right: 0;\n        width: 100%;\n\n        &:before {\n          display: 0;\n        }\n      }\n    }\n  }\n\n  .hero-side {\n    .container {\n      height: 498px;\n      padding-top: 140px;\n    }\n\n    &.left .container {\n      padding-left: 695px;\n      background: no-repeat left top;\n      background-size: 682px;\n\n      @media (max-width: $screen-md-max) and (min-width: $screen-md-min) {\n        margin-left: -100px;\n        width: 1100px;\n        padding-left: 670px;\n      }\n\n      @media (max-width: $screen-sm-max) {\n        padding-left: 10px;\n        padding-bottom: 150px;\n        background-position: center bottom;\n        background-size: 227px;\n        text-align: center;\n        height: auto;\n      }\n    }\n\n    &.right {\n      background: #f6f7fa;\n\n      .container {\n        padding-right: 660px;\n        background: no-repeat right top;\n        background-size: 682px;\n\n        @media (max-width: $screen-md-max) and (min-width: $screen-md-min) {\n          margin-right: -50px;\n          width: 1020px;\n          padding-right: 630px;\n        }\n\n        @media (max-width: $screen-sm-max) {\n          padding-right: 10px;\n          padding-bottom: 150px;\n          background-position: center bottom;\n          background-size: 227px;\n          text-align: center;\n          height: auto;\n        }\n      }\n    }\n\n    &.tool .container {\n      background-image: url('/img/pro/creator/features-tool.jpg');\n      @media (max-width: $screen-sm-max) {\n        background-image: none;\n        padding-bottom: 100px;\n      }\n    }\n\n    &.dnd .container {\n      background-image: url('/img/pro/creator/features-dnd.png?1');\n    }\n\n    &.xplatform .container {\n      background-image: url('/img/pro/creator/features-xplatform.jpg');\n    }\n\n    &.teams .container {\n      background-image: url('/img/pro/creator/features-teams.png?1');\n    }\n\n    &.inline-code-editing {\n      background: no-repeat left bottom;\n      background-image: url('/img/pro/creator/features-code.jpg');\n      background-size: 45%;\n\n      @media screen and (min-width: 2000px) {\n        background-size: 896px;\n      }\n\n      @media (max-width: $screen-sm-max) {\n        background-size: 299px;\n      }\n    }\n\n    h2 {\n      font-size: 24px;\n      font-weight: 500;\n      line-height: 1.5em;\n      margin-bottom: 20px;\n      letter-spacing: -0.02em;\n    }\n\n    p {\n      color: #7E8792;\n      font-size: 16px;\n      font-weight: 400;\n      line-height: 1.8em;\n      margin-bottom: 15px;\n\n      em,\n      strong {\n        font-weight: 600;\n      }\n    }\n\n    .platforms {\n      width: 107px;\n    }\n  }\n\n  .hero-center {\n    .top {\n      background: #121b2e no-repeat center bottom url('/img/pro/creator/features-preview-photo.jpg');\n      background-size: 1800px;\n\n      .container {\n        height: 410px;\n        padding-top: 151px;\n\n        h2 {\n          color: white;\n          font-size: 32px;\n          font-weight: 600;\n        }\n\n        p {\n          color: $lightish-grey;\n          font-size: 18px;\n        }\n      }\n    }\n\n    .bottom {\n      background: #222f49 no-repeat center bottom url('/img/pro/creator/features-preview-blur.jpg?1');\n      background-size: 1800px;\n\n      .container {\n        height: 140px;\n        text-align: center;\n        padding-top: 22px;\n\n        p {\n          color: $lightish-grey;\n          font-size: 14px;\n          font-weight: 400;\n        }\n\n        .btn {\n          height: 53px;\n\n          &.app-store {\n            background: no-repeat center center url('/img/pro/creator/app-store-creator-btn.png');\n            background-size: 153px;\n            width: 153px;\n            @media (max-width: $screen-xs-max) {\n              background-size: 102px;\n              width: 102px;\n            }\n          }\n\n          &.google-play {\n            background: no-repeat center center url('/img/pro/creator/google-play-creator-btn.png?1');\n            background-size: 184px;\n            width: 184px;\n            @media (max-width: $screen-xs-max) {\n              background-size: 123px;\n              width: 123px;\n            }\n          }\n        }\n      }\n    }\n\n    strong {\n      font-weight: 500;\n      color: $lighter-grey;\n    }\n  }\n}\n\n.product-comparison {\n  display: flex;\n  justify-content: center;\n  flex-flow: row wrap;\n  -webkit-font-smoothing: antialiased;\n\n  &.billing-toggle {\n    margin-bottom: 5px;\n\n    button {\n      background: none;\n      border: 0;\n      border-bottom: 2px solid $light-grey;\n      color: $lightish-grey;\n      font-size: 14px;\n      padding: 5px 15px;\n      transition: .2s color, .2s border-color;\n      outline: 0;\n      line-height: 21.4px;\n      font-size: 15px;\n      font-weight: 500;\n\n      &.active,\n      &:hover {\n        color: $blue;\n        border-color: $blue;\n      }\n    }\n  }\n\n  .plan {\n    border: 2px solid $lighter-grey;\n    border-radius: 2px;\n    text-align: center;\n    margin: 15px 6px;\n    padding: 30px 10px;\n    width: calc(25% - 13px);\n    max-width: 251px;\n    min-width: 224px;\n    color: $dark-grey;\n    background: white;\n\n    .fade {\n      opacity: 1;\n      position: absolute;\n      transition: .2s ease all;\n      left: 0;\n      right: 0;\n\n      &.ng-hide {\n        opacity: 0;\n        transform: scale(1.5, 1.5);\n      }\n    }\n\n    &.enterprise {\n      margin-top: 20px;\n      width: 640px;\n      max-width: 100%;\n      position: relative;\n\n      &:before,\n      &:after {\n        background: no-repeat center center url('/img/pro/creator/entrprs-str.png');\n        background-size: 26px;\n        width: 26px;\n        height: 24px;\n        content: '';\n        position: absolute;\n        left: -50px;\n      }\n\n      &:after {\n        left: auto;\n        right: -50px;\n      }\n\n      h3 {\n        display: inline;\n        font-size: 18px;\n        font-weight: 700;\n        margin-right: 5px;\n      }\n\n      p {\n        display: inline;\n        font-size: 14px;\n        font-weight: 400;\n        color: $med-grey;\n\n        strong {\n          color: #f66486;\n          font-weight: 500;\n        }\n      }\n\n      a {\n        font-weight: 600;\n      }\n\n    }\n\n    &.free h2 { color: #f6a42e; }\n    &.dev h2 { color: #5c6775; }\n    &.pro h2 { color: #36c971; }\n    &.business h2 { color: #8364f6; }\n\n    hgroup {\n      padding: 0;\n\n      h2,\n      h3,\n      h4,\n      small {\n        color: $blackish;\n        margin: 0;\n      }\n\n      h2 {\n        font-size: 16px;\n        text-transform: uppercase;\n        letter-spacing: 3px;\n        font-weight: 700;\n        margin-bottom: 30px;\n      }\n\n      h3 {\n        font-size: 56px;\n        font-weight: 700;\n        height: 61px;\n        position: relative;\n        width: 100%;\n\n        sup {\n          font-size: 20px;\n          top: -.5em;\n        }\n\n        sub {\n          font-size: 18px;\n          font-weight: 600;\n          bottom: 0;\n        }\n\n        a {\n          font-size: 37px;\n          text-decoration: none;\n\n          &:hover,\n          &:active {\n            color: $blue;\n          }\n        }\n      }\n\n      h4 {\n        font-size: 16px;\n        font-weight: 500;\n        color: $lightish-grey;\n        line-height: 17.6px;\n      }\n    }\n\n    ul {\n      list-style: none;\n      padding: 25px 0 0;\n\n      li {\n        padding: 8px 10px;\n        margin: 0 -10px;\n        font-size: 14px;\n        font-weight: 400;\n\n        strong {\n          font-weight: 400;\n          color: $blackish;\n        }\n\n        &.feature {\n          background: #f6f8fa;\n        }\n      }\n    }\n\n    @media (max-width: $screen-md-max)  {\n      width: 205px;\n    }\n  }\n\n  @media (max-width: $screen-sm-max)  {\n    // .product-comparison\n    max-width: 480px;\n    margin: 0 auto;\n  }\n}\n\n.also-included {\n  h3 {\n    text-align: center;\n    margin: 85px auto;\n    font-weight: 400;\n  }\n\n  strong {\n    font-size: 16px;\n    font-weight: 500;\n    margin-bottom: 14px;\n    display: block;\n  }\n\n  p {\n    font-size: 14px;\n    color: $darkish-grey;\n    line-height: 1.8em;\n    font-weight: 400;\n  }\n\n  ul {\n    padding: 0 72px;\n    display: flex;\n    flex-flow: row wrap;\n    justify-content: space-between;\n  }\n\n  li {\n    width: 295px;\n    list-style: none;\n    padding-left: 28px;\n    position: relative;\n    margin-bottom: 80px;\n\n    &::before {\n      background: top center no-repeat url('/img/pro/creator/included-icons.png');\n      background-size: 20px;\n      position: absolute;\n      content: '';\n      width: 20px;\n      height: 20px;\n      left: 0;\n      top: 0;\n    }\n\n    &.sharing::before {   background-position: center -20px; }\n    &.ionic::before {     background-position: center -40px; }\n    &.templates::before { background-position: center -60px; }\n    &.exporting::before { background-position: center -80px; }\n    &.preview::before {   background-position: center -100px; }\n  }\n\n}\n\n.faq {\n  background: #f6f8fa;\n  padding-bottom: 120px;\n\n  hgroup {\n    padding-top: 100px;\n    padding-bottom: 10px;\n  }\n\n  .cols {\n    display: flex;\n    justify-content: center;\n    -webkit-font-smoothing: antialiased;\n  }\n\n  .col {\n    max-width: 395px;\n    margin: 0 45px;\n\n    dt {\n      font-weight: 500;\n      font-size: 16px;\n      margin: 70px 0 14px;\n      line-height: 20px;\n    }\n\n    dd {\n      color: #808692;\n      font-size: 14px;\n      line-height: 2em;\n\n      strong {\n        font-weight: 500;\n        color: #808692;\n      }\n    }\n  }\n\n  @media (max-width: $screen-xs-max)  {\n    display: block;\n\n    .cols {\n      display: block;\n    }\n\n    .col {\n      max-width: 100%;\n    }\n  }\n}\n\n.brody {\n  background: right bottom no-repeat url('/img/pro/creator/support-brody.jpg');\n  background-size: 60%;\n  min-height: 550px;\n  padding-bottom: 100px;\n  padding-top: 32px;\n\n  + .tail {\n    margin-top: 0;\n  }\n\n  dl {\n    width: 45%;\n\n    dt {\n      padding: 50px 0 10px;\n      font-size: 18px;\n      font-weight: 400;\n    }\n\n    dd {\n      color: $dark-grey;\n      font-size: 14px;\n      line-height: 1.9em;\n      font-weight: 400;\n    }\n  }\n\n  @media (max-width: $screen-xs-max)  {\n    background-position: center bottom;\n    padding-bottom: 250px;\n    background-size: 300px;\n\n    dl {\n      width: 100%;\n    }\n  }\n}\n\n#body-creator-docs,\n#body-creator-docs .container {\n  position: relative;\n}\n\n#body-creator-docs #index {\n  -webkit-font-smoothing: antialiased;\n  position: fixed;\n  max-height: 100%;\n  overflow-y: auto;\n  background: rgba(255,255,255,.8);\n  @media (min-width: $screen-lg-min) {\n    width: 277px;\n  }\n  @media (max-width: $screen-md-max) and (min-width: $screen-md-min) {\n    width: 212px;\n  }\n  @media (max-width: $screen-sm-max) and (min-width: $screen-sm-min) {\n    width: 157px;\n  }\n  @media (max-width: $screen-xs-max)  {\n    width: 100%;\n    position: relative !important;\n  }\n\n  &.bottom {\n    position: absolute;\n    bottom: 0;\n  }\n\n  ul {\n    padding-left: 0;\n    list-style: none;\n\n    a {\n      font-size: 16px;\n      color: $blackish;\n      font-weight: 400;\n      margin: 1.1em 0;\n      display: block;\n      border-right: 2px solid transparent;\n      transition: color .2s, border-color .2s;\n    }\n\n    ul .active > a,\n    a:hover {\n      color: $blue;\n      text-decoration: none;\n      background: none;\n    }\n\n    ul {\n      padding-left: 25px;\n      padding-right: 25px;\n\n      &.animate-show {\n        opacity: 1;\n\n        a {\n          min-height: 20px;\n          max-height: 150px;\n        }\n\n        &.ng-hide-add,\n        &.ng-hide-remove {\n          transition: all linear .2s;\n        }\n\n        &.ng-hide {\n          opacity: 0;\n\n          a {\n            max-height: 0;\n          }\n        }\n      }\n\n      a {\n        font-size: 14px;\n        color: $lightish-grey;\n        font-weight: 400;\n        transition: all linear .2s;\n      }\n\n      .active a {\n        border-color: $blue;\n        overflow-y: hidden;\n      }\n    }\n  }\n}\n\n#docs {\n  h1,\n  h2,\n  h3,\n  h4,\n  h5,\n  h6 {\n    font-weight: 600;\n    margin: 2.2em 0 .8em;\n    line-height: 2em;\n  }\n\n  h2 {\n    font-size: 20px;\n  }\n\n  h3 {\n    font-size: 18px;\n  }\n\n  h4 {\n    font-size: 16px;\n  }\n\n  p {\n    font-size: 14px;\n    color: $darkish-grey;\n    line-height: 2em;\n    font-weight: 400;\n  }\n}\n\n.studio-callout {\n  margin: 100px 0;\n  background-color: #4D5B69;\n  border-radius: 8px;\n  position: relative;\n  display: flex;\n  align-items: flex-start;\n\n  hgroup {\n    flex: 0 0 45%;\n    padding: 0;\n    text-align: left;\n    padding: 80px 0 80px 80px;\n\n    h3 {\n      margin-top: 0;\n      margin-bottom: 22px;\n      font-weight: 500;\n      color: #fff;\n    }\n\n    p {\n      font-size: 18px;\n      line-height: 24px;\n      color: #DDDDDD;\n      margin-bottom: 20px;\n    }\n\n    p strong{\n      font-weight: 600;\n      color: #fff;\n    }\n\n    .btn {\n      padding: 11px 20px;\n      font-size: 16px;\n    }\n  }\n\n  img {\n    position: absolute;\n    top: 0;\n    right: 0;\n    width: 50% !important;\n  }\n\n  @media (max-width: $screen-lg)  {\n    hgroup {\n      padding: 40px 0 40px 40px;\n    }\n  }\n\n  @media (max-width: $screen-sm)  {\n    margin: 120px 0 0;\n    flex-direction: column-reverse;\n    align-items: center;\n\n    img {\n      width: 100% !important;\n      max-width: 475px;\n      position: relative;\n      margin-bottom: -100px;\n      margin-top: -60px;\n      position: relative;\n      z-index: 1;\n    }\n\n    hgroup {\n      position: relative;\n      text-align: center;\n      padding: 40px;\n      z-index: 2;\n    }\n  }\n\n  @media (max-width: $screen-xs)  {\n    hgroup {\n      padding-left: 20px;\n      padding-right: 20px;\n\n      p {\n        font-size: 16px;\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "assets/scss/ionicons-v3/_ionicons-common.scss",
    "content": "@charset \"UTF-8\";\n// Ionicons Common CSS\n// --------------------------\n\n.ionicons,\n.ion-ios-add:before,\n.ion-ios-add-circle:before,\n.ion-ios-add-circle-outline:before,\n.ion-ios-add-outline:before,\n.ion-ios-alarm:before,\n.ion-ios-alarm-outline:before,\n.ion-ios-albums:before,\n.ion-ios-albums-outline:before,\n.ion-ios-alert:before,\n.ion-ios-alert-outline:before,\n.ion-ios-american-football:before,\n.ion-ios-american-football-outline:before,\n.ion-ios-analytics:before,\n.ion-ios-analytics-outline:before,\n.ion-ios-aperture:before,\n.ion-ios-aperture-outline:before,\n.ion-ios-apps:before,\n.ion-ios-apps-outline:before,\n.ion-ios-appstore:before,\n.ion-ios-appstore-outline:before,\n.ion-ios-archive:before,\n.ion-ios-archive-outline:before,\n.ion-ios-arrow-back:before,\n.ion-ios-arrow-back-outline:before,\n.ion-ios-arrow-down:before,\n.ion-ios-arrow-down-outline:before,\n.ion-ios-arrow-dropdown:before,\n.ion-ios-arrow-dropdown-circle:before,\n.ion-ios-arrow-dropdown-circle-outline:before,\n.ion-ios-arrow-dropdown-outline:before,\n.ion-ios-arrow-dropleft:before,\n.ion-ios-arrow-dropleft-circle:before,\n.ion-ios-arrow-dropleft-circle-outline:before,\n.ion-ios-arrow-dropleft-outline:before,\n.ion-ios-arrow-dropright:before,\n.ion-ios-arrow-dropright-circle:before,\n.ion-ios-arrow-dropright-circle-outline:before,\n.ion-ios-arrow-dropright-outline:before,\n.ion-ios-arrow-dropup:before,\n.ion-ios-arrow-dropup-circle:before,\n.ion-ios-arrow-dropup-circle-outline:before,\n.ion-ios-arrow-dropup-outline:before,\n.ion-ios-arrow-forward:before,\n.ion-ios-arrow-forward-outline:before,\n.ion-ios-arrow-round-back:before,\n.ion-ios-arrow-round-back-outline:before,\n.ion-ios-arrow-round-down:before,\n.ion-ios-arrow-round-down-outline:before,\n.ion-ios-arrow-round-forward:before,\n.ion-ios-arrow-round-forward-outline:before,\n.ion-ios-arrow-round-up:before,\n.ion-ios-arrow-round-up-outline:before,\n.ion-ios-arrow-up:before,\n.ion-ios-arrow-up-outline:before,\n.ion-ios-at:before,\n.ion-ios-at-outline:before,\n.ion-ios-attach:before,\n.ion-ios-attach-outline:before,\n.ion-ios-backspace:before,\n.ion-ios-backspace-outline:before,\n.ion-ios-barcode:before,\n.ion-ios-barcode-outline:before,\n.ion-ios-baseball:before,\n.ion-ios-baseball-outline:before,\n.ion-ios-basket:before,\n.ion-ios-basket-outline:before,\n.ion-ios-basketball:before,\n.ion-ios-basketball-outline:before,\n.ion-ios-battery-charging:before,\n.ion-ios-battery-charging-outline:before,\n.ion-ios-battery-dead:before,\n.ion-ios-battery-dead-outline:before,\n.ion-ios-battery-full:before,\n.ion-ios-battery-full-outline:before,\n.ion-ios-beaker:before,\n.ion-ios-beaker-outline:before,\n.ion-ios-beer:before,\n.ion-ios-beer-outline:before,\n.ion-ios-bicycle:before,\n.ion-ios-bicycle-outline:before,\n.ion-ios-bluetooth:before,\n.ion-ios-bluetooth-outline:before,\n.ion-ios-boat:before,\n.ion-ios-boat-outline:before,\n.ion-ios-body:before,\n.ion-ios-body-outline:before,\n.ion-ios-bonfire:before,\n.ion-ios-bonfire-outline:before,\n.ion-ios-book:before,\n.ion-ios-book-outline:before,\n.ion-ios-bookmark:before,\n.ion-ios-bookmark-outline:before,\n.ion-ios-bookmarks:before,\n.ion-ios-bookmarks-outline:before,\n.ion-ios-bowtie:before,\n.ion-ios-bowtie-outline:before,\n.ion-ios-briefcase:before,\n.ion-ios-briefcase-outline:before,\n.ion-ios-browsers:before,\n.ion-ios-browsers-outline:before,\n.ion-ios-brush:before,\n.ion-ios-brush-outline:before,\n.ion-ios-bug:before,\n.ion-ios-bug-outline:before,\n.ion-ios-build:before,\n.ion-ios-build-outline:before,\n.ion-ios-bulb:before,\n.ion-ios-bulb-outline:before,\n.ion-ios-bus:before,\n.ion-ios-bus-outline:before,\n.ion-ios-cafe:before,\n.ion-ios-cafe-outline:before,\n.ion-ios-calculator:before,\n.ion-ios-calculator-outline:before,\n.ion-ios-calendar:before,\n.ion-ios-calendar-outline:before,\n.ion-ios-call:before,\n.ion-ios-call-outline:before,\n.ion-ios-camera:before,\n.ion-ios-camera-outline:before,\n.ion-ios-car:before,\n.ion-ios-car-outline:before,\n.ion-ios-card:before,\n.ion-ios-card-outline:before,\n.ion-ios-cart:before,\n.ion-ios-cart-outline:before,\n.ion-ios-cash:before,\n.ion-ios-cash-outline:before,\n.ion-ios-chatboxes:before,\n.ion-ios-chatboxes-outline:before,\n.ion-ios-chatbubbles:before,\n.ion-ios-chatbubbles-outline:before,\n.ion-ios-checkbox:before,\n.ion-ios-checkbox-outline:before,\n.ion-ios-checkmark:before,\n.ion-ios-checkmark-circle:before,\n.ion-ios-checkmark-circle-outline:before,\n.ion-ios-checkmark-outline:before,\n.ion-ios-clipboard:before,\n.ion-ios-clipboard-outline:before,\n.ion-ios-clock:before,\n.ion-ios-clock-outline:before,\n.ion-ios-close:before,\n.ion-ios-close-circle:before,\n.ion-ios-close-circle-outline:before,\n.ion-ios-close-outline:before,\n.ion-ios-closed-captioning:before,\n.ion-ios-closed-captioning-outline:before,\n.ion-ios-cloud:before,\n.ion-ios-cloud-circle:before,\n.ion-ios-cloud-circle-outline:before,\n.ion-ios-cloud-done:before,\n.ion-ios-cloud-done-outline:before,\n.ion-ios-cloud-download:before,\n.ion-ios-cloud-download-outline:before,\n.ion-ios-cloud-outline:before,\n.ion-ios-cloud-upload:before,\n.ion-ios-cloud-upload-outline:before,\n.ion-ios-cloudy:before,\n.ion-ios-cloudy-night:before,\n.ion-ios-cloudy-night-outline:before,\n.ion-ios-cloudy-outline:before,\n.ion-ios-code:before,\n.ion-ios-code-download:before,\n.ion-ios-code-download-outline:before,\n.ion-ios-code-outline:before,\n.ion-ios-code-working:before,\n.ion-ios-code-working-outline:before,\n.ion-ios-cog:before,\n.ion-ios-cog-outline:before,\n.ion-ios-color-fill:before,\n.ion-ios-color-fill-outline:before,\n.ion-ios-color-filter:before,\n.ion-ios-color-filter-outline:before,\n.ion-ios-color-palette:before,\n.ion-ios-color-palette-outline:before,\n.ion-ios-color-wand:before,\n.ion-ios-color-wand-outline:before,\n.ion-ios-compass:before,\n.ion-ios-compass-outline:before,\n.ion-ios-construct:before,\n.ion-ios-construct-outline:before,\n.ion-ios-contact:before,\n.ion-ios-contact-outline:before,\n.ion-ios-contacts:before,\n.ion-ios-contacts-outline:before,\n.ion-ios-contract:before,\n.ion-ios-contract-outline:before,\n.ion-ios-contrast:before,\n.ion-ios-contrast-outline:before,\n.ion-ios-copy:before,\n.ion-ios-copy-outline:before,\n.ion-ios-create:before,\n.ion-ios-create-outline:before,\n.ion-ios-crop:before,\n.ion-ios-crop-outline:before,\n.ion-ios-cube:before,\n.ion-ios-cube-outline:before,\n.ion-ios-cut:before,\n.ion-ios-cut-outline:before,\n.ion-ios-desktop:before,\n.ion-ios-desktop-outline:before,\n.ion-ios-disc:before,\n.ion-ios-disc-outline:before,\n.ion-ios-document:before,\n.ion-ios-document-outline:before,\n.ion-ios-done-all:before,\n.ion-ios-done-all-outline:before,\n.ion-ios-download:before,\n.ion-ios-download-outline:before,\n.ion-ios-easel:before,\n.ion-ios-easel-outline:before,\n.ion-ios-egg:before,\n.ion-ios-egg-outline:before,\n.ion-ios-exit:before,\n.ion-ios-exit-outline:before,\n.ion-ios-expand:before,\n.ion-ios-expand-outline:before,\n.ion-ios-eye:before,\n.ion-ios-eye-off:before,\n.ion-ios-eye-off-outline:before,\n.ion-ios-eye-outline:before,\n.ion-ios-fastforward:before,\n.ion-ios-fastforward-outline:before,\n.ion-ios-female:before,\n.ion-ios-female-outline:before,\n.ion-ios-filing:before,\n.ion-ios-filing-outline:before,\n.ion-ios-film:before,\n.ion-ios-film-outline:before,\n.ion-ios-finger-print:before,\n.ion-ios-finger-print-outline:before,\n.ion-ios-flag:before,\n.ion-ios-flag-outline:before,\n.ion-ios-flame:before,\n.ion-ios-flame-outline:before,\n.ion-ios-flash:before,\n.ion-ios-flash-outline:before,\n.ion-ios-flask:before,\n.ion-ios-flask-outline:before,\n.ion-ios-flower:before,\n.ion-ios-flower-outline:before,\n.ion-ios-folder:before,\n.ion-ios-folder-open:before,\n.ion-ios-folder-open-outline:before,\n.ion-ios-folder-outline:before,\n.ion-ios-football:before,\n.ion-ios-football-outline:before,\n.ion-ios-funnel:before,\n.ion-ios-funnel-outline:before,\n.ion-ios-game-controller-a:before,\n.ion-ios-game-controller-a-outline:before,\n.ion-ios-game-controller-b:before,\n.ion-ios-game-controller-b-outline:before,\n.ion-ios-git-branch:before,\n.ion-ios-git-branch-outline:before,\n.ion-ios-git-commit:before,\n.ion-ios-git-commit-outline:before,\n.ion-ios-git-compare:before,\n.ion-ios-git-compare-outline:before,\n.ion-ios-git-merge:before,\n.ion-ios-git-merge-outline:before,\n.ion-ios-git-network:before,\n.ion-ios-git-network-outline:before,\n.ion-ios-git-pull-request:before,\n.ion-ios-git-pull-request-outline:before,\n.ion-ios-glasses:before,\n.ion-ios-glasses-outline:before,\n.ion-ios-globe:before,\n.ion-ios-globe-outline:before,\n.ion-ios-grid:before,\n.ion-ios-grid-outline:before,\n.ion-ios-hammer:before,\n.ion-ios-hammer-outline:before,\n.ion-ios-hand:before,\n.ion-ios-hand-outline:before,\n.ion-ios-happy:before,\n.ion-ios-happy-outline:before,\n.ion-ios-headset:before,\n.ion-ios-headset-outline:before,\n.ion-ios-heart:before,\n.ion-ios-heart-outline:before,\n.ion-ios-help:before,\n.ion-ios-help-buoy:before,\n.ion-ios-help-buoy-outline:before,\n.ion-ios-help-circle:before,\n.ion-ios-help-circle-outline:before,\n.ion-ios-help-outline:before,\n.ion-ios-home:before,\n.ion-ios-home-outline:before,\n.ion-ios-ice-cream:before,\n.ion-ios-ice-cream-outline:before,\n.ion-ios-image:before,\n.ion-ios-image-outline:before,\n.ion-ios-images:before,\n.ion-ios-images-outline:before,\n.ion-ios-infinite:before,\n.ion-ios-infinite-outline:before,\n.ion-ios-information:before,\n.ion-ios-information-circle:before,\n.ion-ios-information-circle-outline:before,\n.ion-ios-information-outline:before,\n.ion-ios-ionic:before,\n.ion-ios-ionic-outline:before,\n.ion-ios-ionitron:before,\n.ion-ios-ionitron-outline:before,\n.ion-ios-jet:before,\n.ion-ios-jet-outline:before,\n.ion-ios-key:before,\n.ion-ios-key-outline:before,\n.ion-ios-keypad:before,\n.ion-ios-keypad-outline:before,\n.ion-ios-laptop:before,\n.ion-ios-laptop-outline:before,\n.ion-ios-leaf:before,\n.ion-ios-leaf-outline:before,\n.ion-ios-link:before,\n.ion-ios-link-outline:before,\n.ion-ios-list:before,\n.ion-ios-list-box:before,\n.ion-ios-list-box-outline:before,\n.ion-ios-list-outline:before,\n.ion-ios-locate:before,\n.ion-ios-locate-outline:before,\n.ion-ios-lock:before,\n.ion-ios-lock-outline:before,\n.ion-ios-log-in:before,\n.ion-ios-log-in-outline:before,\n.ion-ios-log-out:before,\n.ion-ios-log-out-outline:before,\n.ion-ios-magnet:before,\n.ion-ios-magnet-outline:before,\n.ion-ios-mail:before,\n.ion-ios-mail-open:before,\n.ion-ios-mail-open-outline:before,\n.ion-ios-mail-outline:before,\n.ion-ios-male:before,\n.ion-ios-male-outline:before,\n.ion-ios-man:before,\n.ion-ios-man-outline:before,\n.ion-ios-map:before,\n.ion-ios-map-outline:before,\n.ion-ios-medal:before,\n.ion-ios-medal-outline:before,\n.ion-ios-medical:before,\n.ion-ios-medical-outline:before,\n.ion-ios-medkit:before,\n.ion-ios-medkit-outline:before,\n.ion-ios-megaphone:before,\n.ion-ios-megaphone-outline:before,\n.ion-ios-menu:before,\n.ion-ios-menu-outline:before,\n.ion-ios-mic:before,\n.ion-ios-mic-off:before,\n.ion-ios-mic-off-outline:before,\n.ion-ios-mic-outline:before,\n.ion-ios-microphone:before,\n.ion-ios-microphone-outline:before,\n.ion-ios-moon:before,\n.ion-ios-moon-outline:before,\n.ion-ios-more:before,\n.ion-ios-more-outline:before,\n.ion-ios-move:before,\n.ion-ios-move-outline:before,\n.ion-ios-musical-note:before,\n.ion-ios-musical-note-outline:before,\n.ion-ios-musical-notes:before,\n.ion-ios-musical-notes-outline:before,\n.ion-ios-navigate:before,\n.ion-ios-navigate-outline:before,\n.ion-ios-no-smoking:before,\n.ion-ios-no-smoking-outline:before,\n.ion-ios-notifications:before,\n.ion-ios-notifications-off:before,\n.ion-ios-notifications-off-outline:before,\n.ion-ios-notifications-outline:before,\n.ion-ios-nuclear:before,\n.ion-ios-nuclear-outline:before,\n.ion-ios-nutrition:before,\n.ion-ios-nutrition-outline:before,\n.ion-ios-open:before,\n.ion-ios-open-outline:before,\n.ion-ios-options:before,\n.ion-ios-options-outline:before,\n.ion-ios-outlet:before,\n.ion-ios-outlet-outline:before,\n.ion-ios-paper:before,\n.ion-ios-paper-outline:before,\n.ion-ios-paper-plane:before,\n.ion-ios-paper-plane-outline:before,\n.ion-ios-partly-sunny:before,\n.ion-ios-partly-sunny-outline:before,\n.ion-ios-pause:before,\n.ion-ios-pause-outline:before,\n.ion-ios-paw:before,\n.ion-ios-paw-outline:before,\n.ion-ios-people:before,\n.ion-ios-people-outline:before,\n.ion-ios-person:before,\n.ion-ios-person-add:before,\n.ion-ios-person-add-outline:before,\n.ion-ios-person-outline:before,\n.ion-ios-phone-landscape:before,\n.ion-ios-phone-landscape-outline:before,\n.ion-ios-phone-portrait:before,\n.ion-ios-phone-portrait-outline:before,\n.ion-ios-photos:before,\n.ion-ios-photos-outline:before,\n.ion-ios-pie:before,\n.ion-ios-pie-outline:before,\n.ion-ios-pin:before,\n.ion-ios-pin-outline:before,\n.ion-ios-pint:before,\n.ion-ios-pint-outline:before,\n.ion-ios-pizza:before,\n.ion-ios-pizza-outline:before,\n.ion-ios-plane:before,\n.ion-ios-plane-outline:before,\n.ion-ios-planet:before,\n.ion-ios-planet-outline:before,\n.ion-ios-play:before,\n.ion-ios-play-outline:before,\n.ion-ios-podium:before,\n.ion-ios-podium-outline:before,\n.ion-ios-power:before,\n.ion-ios-power-outline:before,\n.ion-ios-pricetag:before,\n.ion-ios-pricetag-outline:before,\n.ion-ios-pricetags:before,\n.ion-ios-pricetags-outline:before,\n.ion-ios-print:before,\n.ion-ios-print-outline:before,\n.ion-ios-pulse:before,\n.ion-ios-pulse-outline:before,\n.ion-ios-qr-scanner:before,\n.ion-ios-qr-scanner-outline:before,\n.ion-ios-quote:before,\n.ion-ios-quote-outline:before,\n.ion-ios-radio:before,\n.ion-ios-radio-button-off:before,\n.ion-ios-radio-button-off-outline:before,\n.ion-ios-radio-button-on:before,\n.ion-ios-radio-button-on-outline:before,\n.ion-ios-radio-outline:before,\n.ion-ios-rainy:before,\n.ion-ios-rainy-outline:before,\n.ion-ios-recording:before,\n.ion-ios-recording-outline:before,\n.ion-ios-redo:before,\n.ion-ios-redo-outline:before,\n.ion-ios-refresh:before,\n.ion-ios-refresh-circle:before,\n.ion-ios-refresh-circle-outline:before,\n.ion-ios-refresh-outline:before,\n.ion-ios-remove:before,\n.ion-ios-remove-circle:before,\n.ion-ios-remove-circle-outline:before,\n.ion-ios-remove-outline:before,\n.ion-ios-reorder:before,\n.ion-ios-reorder-outline:before,\n.ion-ios-repeat:before,\n.ion-ios-repeat-outline:before,\n.ion-ios-resize:before,\n.ion-ios-resize-outline:before,\n.ion-ios-restaurant:before,\n.ion-ios-restaurant-outline:before,\n.ion-ios-return-left:before,\n.ion-ios-return-left-outline:before,\n.ion-ios-return-right:before,\n.ion-ios-return-right-outline:before,\n.ion-ios-reverse-camera:before,\n.ion-ios-reverse-camera-outline:before,\n.ion-ios-rewind:before,\n.ion-ios-rewind-outline:before,\n.ion-ios-ribbon:before,\n.ion-ios-ribbon-outline:before,\n.ion-ios-rose:before,\n.ion-ios-rose-outline:before,\n.ion-ios-sad:before,\n.ion-ios-sad-outline:before,\n.ion-ios-school:before,\n.ion-ios-school-outline:before,\n.ion-ios-search:before,\n.ion-ios-search-outline:before,\n.ion-ios-send:before,\n.ion-ios-send-outline:before,\n.ion-ios-settings:before,\n.ion-ios-settings-outline:before,\n.ion-ios-share:before,\n.ion-ios-share-alt:before,\n.ion-ios-share-alt-outline:before,\n.ion-ios-share-outline:before,\n.ion-ios-shirt:before,\n.ion-ios-shirt-outline:before,\n.ion-ios-shuffle:before,\n.ion-ios-shuffle-outline:before,\n.ion-ios-skip-backward:before,\n.ion-ios-skip-backward-outline:before,\n.ion-ios-skip-forward:before,\n.ion-ios-skip-forward-outline:before,\n.ion-ios-snow:before,\n.ion-ios-snow-outline:before,\n.ion-ios-speedometer:before,\n.ion-ios-speedometer-outline:before,\n.ion-ios-square:before,\n.ion-ios-square-outline:before,\n.ion-ios-star:before,\n.ion-ios-star-half:before,\n.ion-ios-star-half-outline:before,\n.ion-ios-star-outline:before,\n.ion-ios-stats:before,\n.ion-ios-stats-outline:before,\n.ion-ios-stopwatch:before,\n.ion-ios-stopwatch-outline:before,\n.ion-ios-subway:before,\n.ion-ios-subway-outline:before,\n.ion-ios-sunny:before,\n.ion-ios-sunny-outline:before,\n.ion-ios-swap:before,\n.ion-ios-swap-outline:before,\n.ion-ios-switch:before,\n.ion-ios-switch-outline:before,\n.ion-ios-sync:before,\n.ion-ios-sync-outline:before,\n.ion-ios-tablet-landscape:before,\n.ion-ios-tablet-landscape-outline:before,\n.ion-ios-tablet-portrait:before,\n.ion-ios-tablet-portrait-outline:before,\n.ion-ios-tennisball:before,\n.ion-ios-tennisball-outline:before,\n.ion-ios-text:before,\n.ion-ios-text-outline:before,\n.ion-ios-thermometer:before,\n.ion-ios-thermometer-outline:before,\n.ion-ios-thumbs-down:before,\n.ion-ios-thumbs-down-outline:before,\n.ion-ios-thumbs-up:before,\n.ion-ios-thumbs-up-outline:before,\n.ion-ios-thunderstorm:before,\n.ion-ios-thunderstorm-outline:before,\n.ion-ios-time:before,\n.ion-ios-time-outline:before,\n.ion-ios-timer:before,\n.ion-ios-timer-outline:before,\n.ion-ios-train:before,\n.ion-ios-train-outline:before,\n.ion-ios-transgender:before,\n.ion-ios-transgender-outline:before,\n.ion-ios-trash:before,\n.ion-ios-trash-outline:before,\n.ion-ios-trending-down:before,\n.ion-ios-trending-down-outline:before,\n.ion-ios-trending-up:before,\n.ion-ios-trending-up-outline:before,\n.ion-ios-trophy:before,\n.ion-ios-trophy-outline:before,\n.ion-ios-umbrella:before,\n.ion-ios-umbrella-outline:before,\n.ion-ios-undo:before,\n.ion-ios-undo-outline:before,\n.ion-ios-unlock:before,\n.ion-ios-unlock-outline:before,\n.ion-ios-videocam:before,\n.ion-ios-videocam-outline:before,\n.ion-ios-volume-down:before,\n.ion-ios-volume-down-outline:before,\n.ion-ios-volume-mute:before,\n.ion-ios-volume-mute-outline:before,\n.ion-ios-volume-off:before,\n.ion-ios-volume-off-outline:before,\n.ion-ios-volume-up:before,\n.ion-ios-volume-up-outline:before,\n.ion-ios-walk:before,\n.ion-ios-walk-outline:before,\n.ion-ios-warning:before,\n.ion-ios-warning-outline:before,\n.ion-ios-watch:before,\n.ion-ios-watch-outline:before,\n.ion-ios-water:before,\n.ion-ios-water-outline:before,\n.ion-ios-wifi:before,\n.ion-ios-wifi-outline:before,\n.ion-ios-wine:before,\n.ion-ios-wine-outline:before,\n.ion-ios-woman:before,\n.ion-ios-woman-outline:before,\n.ion-logo-android:before,\n.ion-logo-angular:before,\n.ion-logo-apple:before,\n.ion-logo-bitcoin:before,\n.ion-logo-buffer:before,\n.ion-logo-chrome:before,\n.ion-logo-codepen:before,\n.ion-logo-css3:before,\n.ion-logo-designernews:before,\n.ion-logo-dribbble:before,\n.ion-logo-dropbox:before,\n.ion-logo-euro:before,\n.ion-logo-facebook:before,\n.ion-logo-foursquare:before,\n.ion-logo-freebsd-devil:before,\n.ion-logo-github:before,\n.ion-logo-google:before,\n.ion-logo-googleplus:before,\n.ion-logo-hackernews:before,\n.ion-logo-html5:before,\n.ion-logo-instagram:before,\n.ion-logo-javascript:before,\n.ion-logo-linkedin:before,\n.ion-logo-markdown:before,\n.ion-logo-nodejs:before,\n.ion-logo-octocat:before,\n.ion-logo-pinterest:before,\n.ion-logo-playstation:before,\n.ion-logo-python:before,\n.ion-logo-reddit:before,\n.ion-logo-rss:before,\n.ion-logo-sass:before,\n.ion-logo-skype:before,\n.ion-logo-snapchat:before,\n.ion-logo-steam:before,\n.ion-logo-tumblr:before,\n.ion-logo-tux:before,\n.ion-logo-twitch:before,\n.ion-logo-twitter:before,\n.ion-logo-usd:before,\n.ion-logo-vimeo:before,\n.ion-logo-whatsapp:before,\n.ion-logo-windows:before,\n.ion-logo-wordpress:before,\n.ion-logo-xbox:before,\n.ion-logo-yahoo:before,\n.ion-logo-yen:before,\n.ion-logo-youtube:before,\n.ion-md-add:before,\n.ion-md-add-circle:before,\n.ion-md-alarm:before,\n.ion-md-albums:before,\n.ion-md-alert:before,\n.ion-md-american-football:before,\n.ion-md-analytics:before,\n.ion-md-aperture:before,\n.ion-md-apps:before,\n.ion-md-appstore:before,\n.ion-md-archive:before,\n.ion-md-arrow-back:before,\n.ion-md-arrow-down:before,\n.ion-md-arrow-dropdown:before,\n.ion-md-arrow-dropdown-circle:before,\n.ion-md-arrow-dropleft:before,\n.ion-md-arrow-dropleft-circle:before,\n.ion-md-arrow-dropright:before,\n.ion-md-arrow-dropright-circle:before,\n.ion-md-arrow-dropup:before,\n.ion-md-arrow-dropup-circle:before,\n.ion-md-arrow-forward:before,\n.ion-md-arrow-round-back:before,\n.ion-md-arrow-round-down:before,\n.ion-md-arrow-round-forward:before,\n.ion-md-arrow-round-up:before,\n.ion-md-arrow-up:before,\n.ion-md-at:before,\n.ion-md-attach:before,\n.ion-md-backspace:before,\n.ion-md-barcode:before,\n.ion-md-baseball:before,\n.ion-md-basket:before,\n.ion-md-basketball:before,\n.ion-md-battery-charging:before,\n.ion-md-battery-dead:before,\n.ion-md-battery-full:before,\n.ion-md-beaker:before,\n.ion-md-beer:before,\n.ion-md-bicycle:before,\n.ion-md-bluetooth:before,\n.ion-md-boat:before,\n.ion-md-body:before,\n.ion-md-bonfire:before,\n.ion-md-book:before,\n.ion-md-bookmark:before,\n.ion-md-bookmarks:before,\n.ion-md-bowtie:before,\n.ion-md-briefcase:before,\n.ion-md-browsers:before,\n.ion-md-brush:before,\n.ion-md-bug:before,\n.ion-md-build:before,\n.ion-md-bulb:before,\n.ion-md-bus:before,\n.ion-md-cafe:before,\n.ion-md-calculator:before,\n.ion-md-calendar:before,\n.ion-md-call:before,\n.ion-md-camera:before,\n.ion-md-car:before,\n.ion-md-card:before,\n.ion-md-cart:before,\n.ion-md-cash:before,\n.ion-md-chatboxes:before,\n.ion-md-chatbubbles:before,\n.ion-md-checkbox:before,\n.ion-md-checkbox-outline:before,\n.ion-md-checkmark:before,\n.ion-md-checkmark-circle:before,\n.ion-md-checkmark-circle-outline:before,\n.ion-md-clipboard:before,\n.ion-md-clock:before,\n.ion-md-close:before,\n.ion-md-close-circle:before,\n.ion-md-closed-captioning:before,\n.ion-md-cloud:before,\n.ion-md-cloud-circle:before,\n.ion-md-cloud-done:before,\n.ion-md-cloud-download:before,\n.ion-md-cloud-outline:before,\n.ion-md-cloud-upload:before,\n.ion-md-cloudy:before,\n.ion-md-cloudy-night:before,\n.ion-md-code:before,\n.ion-md-code-download:before,\n.ion-md-code-working:before,\n.ion-md-cog:before,\n.ion-md-color-fill:before,\n.ion-md-color-filter:before,\n.ion-md-color-palette:before,\n.ion-md-color-wand:before,\n.ion-md-compass:before,\n.ion-md-construct:before,\n.ion-md-contact:before,\n.ion-md-contacts:before,\n.ion-md-contract:before,\n.ion-md-contrast:before,\n.ion-md-copy:before,\n.ion-md-create:before,\n.ion-md-crop:before,\n.ion-md-cube:before,\n.ion-md-cut:before,\n.ion-md-desktop:before,\n.ion-md-disc:before,\n.ion-md-document:before,\n.ion-md-done-all:before,\n.ion-md-download:before,\n.ion-md-easel:before,\n.ion-md-egg:before,\n.ion-md-exit:before,\n.ion-md-expand:before,\n.ion-md-eye:before,\n.ion-md-eye-off:before,\n.ion-md-fastforward:before,\n.ion-md-female:before,\n.ion-md-filing:before,\n.ion-md-film:before,\n.ion-md-finger-print:before,\n.ion-md-flag:before,\n.ion-md-flame:before,\n.ion-md-flash:before,\n.ion-md-flask:before,\n.ion-md-flower:before,\n.ion-md-folder:before,\n.ion-md-folder-open:before,\n.ion-md-football:before,\n.ion-md-funnel:before,\n.ion-md-game-controller-a:before,\n.ion-md-game-controller-b:before,\n.ion-md-git-branch:before,\n.ion-md-git-commit:before,\n.ion-md-git-compare:before,\n.ion-md-git-merge:before,\n.ion-md-git-network:before,\n.ion-md-git-pull-request:before,\n.ion-md-glasses:before,\n.ion-md-globe:before,\n.ion-md-grid:before,\n.ion-md-hammer:before,\n.ion-md-hand:before,\n.ion-md-happy:before,\n.ion-md-headset:before,\n.ion-md-heart:before,\n.ion-md-heart-outline:before,\n.ion-md-help:before,\n.ion-md-help-buoy:before,\n.ion-md-help-circle:before,\n.ion-md-home:before,\n.ion-md-ice-cream:before,\n.ion-md-image:before,\n.ion-md-images:before,\n.ion-md-infinite:before,\n.ion-md-information:before,\n.ion-md-information-circle:before,\n.ion-md-ionic:before,\n.ion-md-ionitron:before,\n.ion-md-jet:before,\n.ion-md-key:before,\n.ion-md-keypad:before,\n.ion-md-laptop:before,\n.ion-md-leaf:before,\n.ion-md-link:before,\n.ion-md-list:before,\n.ion-md-list-box:before,\n.ion-md-locate:before,\n.ion-md-lock:before,\n.ion-md-log-in:before,\n.ion-md-log-out:before,\n.ion-md-magnet:before,\n.ion-md-mail:before,\n.ion-md-mail-open:before,\n.ion-md-male:before,\n.ion-md-man:before,\n.ion-md-map:before,\n.ion-md-medal:before,\n.ion-md-medical:before,\n.ion-md-medkit:before,\n.ion-md-megaphone:before,\n.ion-md-menu:before,\n.ion-md-mic:before,\n.ion-md-mic-off:before,\n.ion-md-microphone:before,\n.ion-md-moon:before,\n.ion-md-more:before,\n.ion-md-move:before,\n.ion-md-musical-note:before,\n.ion-md-musical-notes:before,\n.ion-md-navigate:before,\n.ion-md-no-smoking:before,\n.ion-md-notifications:before,\n.ion-md-notifications-off:before,\n.ion-md-notifications-outline:before,\n.ion-md-nuclear:before,\n.ion-md-nutrition:before,\n.ion-md-open:before,\n.ion-md-options:before,\n.ion-md-outlet:before,\n.ion-md-paper:before,\n.ion-md-paper-plane:before,\n.ion-md-partly-sunny:before,\n.ion-md-pause:before,\n.ion-md-paw:before,\n.ion-md-people:before,\n.ion-md-person:before,\n.ion-md-person-add:before,\n.ion-md-phone-landscape:before,\n.ion-md-phone-portrait:before,\n.ion-md-photos:before,\n.ion-md-pie:before,\n.ion-md-pin:before,\n.ion-md-pint:before,\n.ion-md-pizza:before,\n.ion-md-plane:before,\n.ion-md-planet:before,\n.ion-md-play:before,\n.ion-md-podium:before,\n.ion-md-power:before,\n.ion-md-pricetag:before,\n.ion-md-pricetags:before,\n.ion-md-print:before,\n.ion-md-pulse:before,\n.ion-md-qr-scanner:before,\n.ion-md-quote:before,\n.ion-md-radio:before,\n.ion-md-radio-button-off:before,\n.ion-md-radio-button-on:before,\n.ion-md-rainy:before,\n.ion-md-recording:before,\n.ion-md-redo:before,\n.ion-md-refresh:before,\n.ion-md-refresh-circle:before,\n.ion-md-remove:before,\n.ion-md-remove-circle:before,\n.ion-md-reorder:before,\n.ion-md-repeat:before,\n.ion-md-resize:before,\n.ion-md-restaurant:before,\n.ion-md-return-left:before,\n.ion-md-return-right:before,\n.ion-md-reverse-camera:before,\n.ion-md-rewind:before,\n.ion-md-ribbon:before,\n.ion-md-rose:before,\n.ion-md-sad:before,\n.ion-md-school:before,\n.ion-md-search:before,\n.ion-md-send:before,\n.ion-md-settings:before,\n.ion-md-share:before,\n.ion-md-share-alt:before,\n.ion-md-shirt:before,\n.ion-md-shuffle:before,\n.ion-md-skip-backward:before,\n.ion-md-skip-forward:before,\n.ion-md-snow:before,\n.ion-md-speedometer:before,\n.ion-md-square:before,\n.ion-md-square-outline:before,\n.ion-md-star:before,\n.ion-md-star-half:before,\n.ion-md-star-outline:before,\n.ion-md-stats:before,\n.ion-md-stopwatch:before,\n.ion-md-subway:before,\n.ion-md-sunny:before,\n.ion-md-swap:before,\n.ion-md-switch:before,\n.ion-md-sync:before,\n.ion-md-tablet-landscape:before,\n.ion-md-tablet-portrait:before,\n.ion-md-tennisball:before,\n.ion-md-text:before,\n.ion-md-thermometer:before,\n.ion-md-thumbs-down:before,\n.ion-md-thumbs-up:before,\n.ion-md-thunderstorm:before,\n.ion-md-time:before,\n.ion-md-timer:before,\n.ion-md-train:before,\n.ion-md-transgender:before,\n.ion-md-trash:before,\n.ion-md-trending-down:before,\n.ion-md-trending-up:before,\n.ion-md-trophy:before,\n.ion-md-umbrella:before,\n.ion-md-undo:before,\n.ion-md-unlock:before,\n.ion-md-videocam:before,\n.ion-md-volume-down:before,\n.ion-md-volume-mute:before,\n.ion-md-volume-off:before,\n.ion-md-volume-up:before,\n.ion-md-walk:before,\n.ion-md-warning:before,\n.ion-md-watch:before,\n.ion-md-water:before,\n.ion-md-wifi:before,\n.ion-md-wine:before,\n.ion-md-woman:before\n{\n  @extend .ion;\n}"
  },
  {
    "path": "assets/scss/ionicons-v3/_ionicons-core.scss",
    "content": "@import \"ionicons-variables\";\n/*!\n  Ionicons, v#{$ionicons-version}\n  Created by Ben Sperry for the Ionic Framework, https://ionicons.com/\n  https://twitter.com/benjsperry  https://twitter.com/ionicframework\n  MIT License: https://github.com/driftyco/ionicons\n\n  Android-style icons originally built by Google’s\n  Material Design Icons: https://github.com/google/material-design-icons\n  used under CC BY http://creativecommons.org/licenses/by/4.0/\n  Modified icons to fit ionicon’s grid from original.\n*/\n\n@import \"ionicons-icons\";\n"
  },
  {
    "path": "assets/scss/ionicons-v3/_ionicons-icons.scss",
    "content": "@charset \"UTF-8\";\n// Ionicons Icon Font CSS\n// --------------------------\n\n.ion-ios-add:before { content: \"\\f102\"; }\n.ion-ios-add-circle:before { content: \"\\f101\"; }\n.ion-ios-add-circle-outline:before { content: \"\\f100\"; }\n.ion-ios-add-outline:before { content: \"\\f102\"; }\n.ion-ios-alarm:before { content: \"\\f3c8\"; }\n.ion-ios-alarm-outline:before { content: \"\\f3c7\"; }\n.ion-ios-albums:before { content: \"\\f3ca\"; }\n.ion-ios-albums-outline:before { content: \"\\f3c9\"; }\n.ion-ios-alert:before { content: \"\\f104\"; }\n.ion-ios-alert-outline:before { content: \"\\f103\"; }\n.ion-ios-american-football:before { content: \"\\f106\"; }\n.ion-ios-american-football-outline:before { content: \"\\f105\"; }\n.ion-ios-analytics:before { content: \"\\f3ce\"; }\n.ion-ios-analytics-outline:before { content: \"\\f3cd\"; }\n.ion-ios-aperture:before { content: \"\\f108\"; }\n.ion-ios-aperture-outline:before { content: \"\\f107\"; }\n.ion-ios-apps:before { content: \"\\f10a\"; }\n.ion-ios-apps-outline:before { content: \"\\f109\"; }\n.ion-ios-appstore:before { content: \"\\f10c\"; }\n.ion-ios-appstore-outline:before { content: \"\\f10b\"; }\n.ion-ios-archive:before { content: \"\\f10e\"; }\n.ion-ios-archive-outline:before { content: \"\\f10d\"; }\n.ion-ios-arrow-back:before { content: \"\\f3cf\"; }\n.ion-ios-arrow-back-outline:before { content: \"\\f3cf\"; }\n.ion-ios-arrow-down:before { content: \"\\f3d0\"; }\n.ion-ios-arrow-down-outline:before { content: \"\\f3d0\"; }\n.ion-ios-arrow-dropdown:before { content: \"\\f110\"; }\n.ion-ios-arrow-dropdown-circle:before { content: \"\\f10f\"; }\n.ion-ios-arrow-dropdown-circle-outline:before { content: \"\\f10f\"; }\n.ion-ios-arrow-dropdown-outline:before { content: \"\\f110\"; }\n.ion-ios-arrow-dropleft:before { content: \"\\f112\"; }\n.ion-ios-arrow-dropleft-circle:before { content: \"\\f111\"; }\n.ion-ios-arrow-dropleft-circle-outline:before { content: \"\\f111\"; }\n.ion-ios-arrow-dropleft-outline:before { content: \"\\f112\"; }\n.ion-ios-arrow-dropright:before { content: \"\\f114\"; }\n.ion-ios-arrow-dropright-circle:before { content: \"\\f113\"; }\n.ion-ios-arrow-dropright-circle-outline:before { content: \"\\f113\"; }\n.ion-ios-arrow-dropright-outline:before { content: \"\\f114\"; }\n.ion-ios-arrow-dropup:before { content: \"\\f116\"; }\n.ion-ios-arrow-dropup-circle:before { content: \"\\f115\"; }\n.ion-ios-arrow-dropup-circle-outline:before { content: \"\\f115\"; }\n.ion-ios-arrow-dropup-outline:before { content: \"\\f116\"; }\n.ion-ios-arrow-forward:before { content: \"\\f3d1\"; }\n.ion-ios-arrow-forward-outline:before { content: \"\\f3d1\"; }\n.ion-ios-arrow-round-back:before { content: \"\\f117\"; }\n.ion-ios-arrow-round-back-outline:before { content: \"\\f117\"; }\n.ion-ios-arrow-round-down:before { content: \"\\f118\"; }\n.ion-ios-arrow-round-down-outline:before { content: \"\\f118\"; }\n.ion-ios-arrow-round-forward:before { content: \"\\f119\"; }\n.ion-ios-arrow-round-forward-outline:before { content: \"\\f119\"; }\n.ion-ios-arrow-round-up:before { content: \"\\f11a\"; }\n.ion-ios-arrow-round-up-outline:before { content: \"\\f11a\"; }\n.ion-ios-arrow-up:before { content: \"\\f3d8\"; }\n.ion-ios-arrow-up-outline:before { content: \"\\f3d8\"; }\n.ion-ios-at:before { content: \"\\f3da\"; }\n.ion-ios-at-outline:before { content: \"\\f3d9\"; }\n.ion-ios-attach:before { content: \"\\f11b\"; }\n.ion-ios-attach-outline:before { content: \"\\f11b\"; }\n.ion-ios-backspace:before { content: \"\\f11d\"; }\n.ion-ios-backspace-outline:before { content: \"\\f11c\"; }\n.ion-ios-barcode:before { content: \"\\f3dc\"; }\n.ion-ios-barcode-outline:before { content: \"\\f3db\"; }\n.ion-ios-baseball:before { content: \"\\f3de\"; }\n.ion-ios-baseball-outline:before { content: \"\\f3dd\"; }\n.ion-ios-basket:before { content: \"\\f11f\"; }\n.ion-ios-basket-outline:before { content: \"\\f11e\"; }\n.ion-ios-basketball:before { content: \"\\f3e0\"; }\n.ion-ios-basketball-outline:before { content: \"\\f3df\"; }\n.ion-ios-battery-charging:before { content: \"\\f120\"; }\n.ion-ios-battery-charging-outline:before { content: \"\\f120\"; }\n.ion-ios-battery-dead:before { content: \"\\f121\"; }\n.ion-ios-battery-dead-outline:before { content: \"\\f121\"; }\n.ion-ios-battery-full:before { content: \"\\f122\"; }\n.ion-ios-battery-full-outline:before { content: \"\\f122\"; }\n.ion-ios-beaker:before { content: \"\\f124\"; }\n.ion-ios-beaker-outline:before { content: \"\\f123\"; }\n.ion-ios-beer:before { content: \"\\f126\"; }\n.ion-ios-beer-outline:before { content: \"\\f125\"; }\n.ion-ios-bicycle:before { content: \"\\f127\"; }\n.ion-ios-bicycle-outline:before { content: \"\\f127\"; }\n.ion-ios-bluetooth:before { content: \"\\f128\"; }\n.ion-ios-bluetooth-outline:before { content: \"\\f128\"; }\n.ion-ios-boat:before { content: \"\\f12a\"; }\n.ion-ios-boat-outline:before { content: \"\\f129\"; }\n.ion-ios-body:before { content: \"\\f3e4\"; }\n.ion-ios-body-outline:before { content: \"\\f3e3\"; }\n.ion-ios-bonfire:before { content: \"\\f12c\"; }\n.ion-ios-bonfire-outline:before { content: \"\\f12b\"; }\n.ion-ios-book:before { content: \"\\f3e8\"; }\n.ion-ios-book-outline:before { content: \"\\f3e7\"; }\n.ion-ios-bookmark:before { content: \"\\f12e\"; }\n.ion-ios-bookmark-outline:before { content: \"\\f12d\"; }\n.ion-ios-bookmarks:before { content: \"\\f3ea\"; }\n.ion-ios-bookmarks-outline:before { content: \"\\f3e9\"; }\n.ion-ios-bowtie:before { content: \"\\f130\"; }\n.ion-ios-bowtie-outline:before { content: \"\\f12f\"; }\n.ion-ios-briefcase:before { content: \"\\f3ee\"; }\n.ion-ios-briefcase-outline:before { content: \"\\f3ed\"; }\n.ion-ios-browsers:before { content: \"\\f3f0\"; }\n.ion-ios-browsers-outline:before { content: \"\\f3ef\"; }\n.ion-ios-brush:before { content: \"\\f132\"; }\n.ion-ios-brush-outline:before { content: \"\\f131\"; }\n.ion-ios-bug:before { content: \"\\f134\"; }\n.ion-ios-bug-outline:before { content: \"\\f133\"; }\n.ion-ios-build:before { content: \"\\f136\"; }\n.ion-ios-build-outline:before { content: \"\\f135\"; }\n.ion-ios-bulb:before { content: \"\\f138\"; }\n.ion-ios-bulb-outline:before { content: \"\\f137\"; }\n.ion-ios-bus:before { content: \"\\f13a\"; }\n.ion-ios-bus-outline:before { content: \"\\f139\"; }\n.ion-ios-cafe:before { content: \"\\f13c\"; }\n.ion-ios-cafe-outline:before { content: \"\\f13b\"; }\n.ion-ios-calculator:before { content: \"\\f3f2\"; }\n.ion-ios-calculator-outline:before { content: \"\\f3f1\"; }\n.ion-ios-calendar:before { content: \"\\f3f4\"; }\n.ion-ios-calendar-outline:before { content: \"\\f3f3\"; }\n.ion-ios-call:before { content: \"\\f13e\"; }\n.ion-ios-call-outline:before { content: \"\\f13d\"; }\n.ion-ios-camera:before { content: \"\\f3f6\"; }\n.ion-ios-camera-outline:before { content: \"\\f3f5\"; }\n.ion-ios-car:before { content: \"\\f140\"; }\n.ion-ios-car-outline:before { content: \"\\f13f\"; }\n.ion-ios-card:before { content: \"\\f142\"; }\n.ion-ios-card-outline:before { content: \"\\f141\"; }\n.ion-ios-cart:before { content: \"\\f3f8\"; }\n.ion-ios-cart-outline:before { content: \"\\f3f7\"; }\n.ion-ios-cash:before { content: \"\\f144\"; }\n.ion-ios-cash-outline:before { content: \"\\f143\"; }\n.ion-ios-chatboxes:before { content: \"\\f3fa\"; }\n.ion-ios-chatboxes-outline:before { content: \"\\f3f9\"; }\n.ion-ios-chatbubbles:before { content: \"\\f146\"; }\n.ion-ios-chatbubbles-outline:before { content: \"\\f145\"; }\n.ion-ios-checkbox:before { content: \"\\f148\"; }\n.ion-ios-checkbox-outline:before { content: \"\\f147\"; }\n.ion-ios-checkmark:before { content: \"\\f3ff\"; }\n.ion-ios-checkmark-circle:before { content: \"\\f14a\"; }\n.ion-ios-checkmark-circle-outline:before { content: \"\\f149\"; }\n.ion-ios-checkmark-outline:before { content: \"\\f3ff\"; }\n.ion-ios-clipboard:before { content: \"\\f14c\"; }\n.ion-ios-clipboard-outline:before { content: \"\\f14b\"; }\n.ion-ios-clock:before { content: \"\\f403\"; }\n.ion-ios-clock-outline:before { content: \"\\f402\"; }\n.ion-ios-close:before { content: \"\\f406\"; }\n.ion-ios-close-circle:before { content: \"\\f14e\"; }\n.ion-ios-close-circle-outline:before { content: \"\\f14d\"; }\n.ion-ios-close-outline:before { content: \"\\f406\"; }\n.ion-ios-closed-captioning:before { content: \"\\f150\"; }\n.ion-ios-closed-captioning-outline:before { content: \"\\f14f\"; }\n.ion-ios-cloud:before { content: \"\\f40c\"; }\n.ion-ios-cloud-circle:before { content: \"\\f152\"; }\n.ion-ios-cloud-circle-outline:before { content: \"\\f151\"; }\n.ion-ios-cloud-done:before { content: \"\\f154\"; }\n.ion-ios-cloud-done-outline:before { content: \"\\f153\"; }\n.ion-ios-cloud-download:before { content: \"\\f408\"; }\n.ion-ios-cloud-download-outline:before { content: \"\\f407\"; }\n.ion-ios-cloud-outline:before { content: \"\\f409\"; }\n.ion-ios-cloud-upload:before { content: \"\\f40b\"; }\n.ion-ios-cloud-upload-outline:before { content: \"\\f40a\"; }\n.ion-ios-cloudy:before { content: \"\\f410\"; }\n.ion-ios-cloudy-night:before { content: \"\\f40e\"; }\n.ion-ios-cloudy-night-outline:before { content: \"\\f40d\"; }\n.ion-ios-cloudy-outline:before { content: \"\\f40f\"; }\n.ion-ios-code:before { content: \"\\f157\"; }\n.ion-ios-code-download:before { content: \"\\f155\"; }\n.ion-ios-code-download-outline:before { content: \"\\f155\"; }\n.ion-ios-code-outline:before { content: \"\\f157\"; }\n.ion-ios-code-working:before { content: \"\\f156\"; }\n.ion-ios-code-working-outline:before { content: \"\\f156\"; }\n.ion-ios-cog:before { content: \"\\f412\"; }\n.ion-ios-cog-outline:before { content: \"\\f411\"; }\n.ion-ios-color-fill:before { content: \"\\f159\"; }\n.ion-ios-color-fill-outline:before { content: \"\\f158\"; }\n.ion-ios-color-filter:before { content: \"\\f414\"; }\n.ion-ios-color-filter-outline:before { content: \"\\f413\"; }\n.ion-ios-color-palette:before { content: \"\\f15b\"; }\n.ion-ios-color-palette-outline:before { content: \"\\f15a\"; }\n.ion-ios-color-wand:before { content: \"\\f416\"; }\n.ion-ios-color-wand-outline:before { content: \"\\f415\"; }\n.ion-ios-compass:before { content: \"\\f15d\"; }\n.ion-ios-compass-outline:before { content: \"\\f15c\"; }\n.ion-ios-construct:before { content: \"\\f15f\"; }\n.ion-ios-construct-outline:before { content: \"\\f15e\"; }\n.ion-ios-contact:before { content: \"\\f41a\"; }\n.ion-ios-contact-outline:before { content: \"\\f419\"; }\n.ion-ios-contacts:before { content: \"\\f161\"; }\n.ion-ios-contacts-outline:before { content: \"\\f160\"; }\n.ion-ios-contract:before { content: \"\\f162\"; }\n.ion-ios-contract-outline:before { content: \"\\f162\"; }\n.ion-ios-contrast:before { content: \"\\f163\"; }\n.ion-ios-contrast-outline:before { content: \"\\f163\"; }\n.ion-ios-copy:before { content: \"\\f41c\"; }\n.ion-ios-copy-outline:before { content: \"\\f41b\"; }\n.ion-ios-create:before { content: \"\\f165\"; }\n.ion-ios-create-outline:before { content: \"\\f164\"; }\n.ion-ios-crop:before { content: \"\\f41e\"; }\n.ion-ios-crop-outline:before { content: \"\\f166\"; }\n.ion-ios-cube:before { content: \"\\f168\"; }\n.ion-ios-cube-outline:before { content: \"\\f167\"; }\n.ion-ios-cut:before { content: \"\\f16a\"; }\n.ion-ios-cut-outline:before { content: \"\\f169\"; }\n.ion-ios-desktop:before { content: \"\\f16c\"; }\n.ion-ios-desktop-outline:before { content: \"\\f16b\"; }\n.ion-ios-disc:before { content: \"\\f16e\"; }\n.ion-ios-disc-outline:before { content: \"\\f16d\"; }\n.ion-ios-document:before { content: \"\\f170\"; }\n.ion-ios-document-outline:before { content: \"\\f16f\"; }\n.ion-ios-done-all:before { content: \"\\f171\"; }\n.ion-ios-done-all-outline:before { content: \"\\f171\"; }\n.ion-ios-download:before { content: \"\\f420\"; }\n.ion-ios-download-outline:before { content: \"\\f41f\"; }\n.ion-ios-easel:before { content: \"\\f173\"; }\n.ion-ios-easel-outline:before { content: \"\\f172\"; }\n.ion-ios-egg:before { content: \"\\f175\"; }\n.ion-ios-egg-outline:before { content: \"\\f174\"; }\n.ion-ios-exit:before { content: \"\\f177\"; }\n.ion-ios-exit-outline:before { content: \"\\f176\"; }\n.ion-ios-expand:before { content: \"\\f178\"; }\n.ion-ios-expand-outline:before { content: \"\\f178\"; }\n.ion-ios-eye:before { content: \"\\f425\"; }\n.ion-ios-eye-off:before { content: \"\\f17a\"; }\n.ion-ios-eye-off-outline:before { content: \"\\f179\"; }\n.ion-ios-eye-outline:before { content: \"\\f424\"; }\n.ion-ios-fastforward:before { content: \"\\f427\"; }\n.ion-ios-fastforward-outline:before { content: \"\\f426\"; }\n.ion-ios-female:before { content: \"\\f17b\"; }\n.ion-ios-female-outline:before { content: \"\\f17b\"; }\n.ion-ios-filing:before { content: \"\\f429\"; }\n.ion-ios-filing-outline:before { content: \"\\f428\"; }\n.ion-ios-film:before { content: \"\\f42b\"; }\n.ion-ios-film-outline:before { content: \"\\f42a\"; }\n.ion-ios-finger-print:before { content: \"\\f17c\"; }\n.ion-ios-finger-print-outline:before { content: \"\\f17c\"; }\n.ion-ios-flag:before { content: \"\\f42d\"; }\n.ion-ios-flag-outline:before { content: \"\\f42c\"; }\n.ion-ios-flame:before { content: \"\\f42f\"; }\n.ion-ios-flame-outline:before { content: \"\\f42e\"; }\n.ion-ios-flash:before { content: \"\\f17e\"; }\n.ion-ios-flash-outline:before { content: \"\\f17d\"; }\n.ion-ios-flask:before { content: \"\\f431\"; }\n.ion-ios-flask-outline:before { content: \"\\f430\"; }\n.ion-ios-flower:before { content: \"\\f433\"; }\n.ion-ios-flower-outline:before { content: \"\\f432\"; }\n.ion-ios-folder:before { content: \"\\f435\"; }\n.ion-ios-folder-open:before { content: \"\\f180\"; }\n.ion-ios-folder-open-outline:before { content: \"\\f17f\"; }\n.ion-ios-folder-outline:before { content: \"\\f434\"; }\n.ion-ios-football:before { content: \"\\f437\"; }\n.ion-ios-football-outline:before { content: \"\\f436\"; }\n.ion-ios-funnel:before { content: \"\\f182\"; }\n.ion-ios-funnel-outline:before { content: \"\\f181\"; }\n.ion-ios-game-controller-a:before { content: \"\\f439\"; }\n.ion-ios-game-controller-a-outline:before { content: \"\\f438\"; }\n.ion-ios-game-controller-b:before { content: \"\\f43b\"; }\n.ion-ios-game-controller-b-outline:before { content: \"\\f43a\"; }\n.ion-ios-git-branch:before { content: \"\\f183\"; }\n.ion-ios-git-branch-outline:before { content: \"\\f183\"; }\n.ion-ios-git-commit:before { content: \"\\f184\"; }\n.ion-ios-git-commit-outline:before { content: \"\\f184\"; }\n.ion-ios-git-compare:before { content: \"\\f185\"; }\n.ion-ios-git-compare-outline:before { content: \"\\f185\"; }\n.ion-ios-git-merge:before { content: \"\\f186\"; }\n.ion-ios-git-merge-outline:before { content: \"\\f186\"; }\n.ion-ios-git-network:before { content: \"\\f187\"; }\n.ion-ios-git-network-outline:before { content: \"\\f187\"; }\n.ion-ios-git-pull-request:before { content: \"\\f188\"; }\n.ion-ios-git-pull-request-outline:before { content: \"\\f188\"; }\n.ion-ios-glasses:before { content: \"\\f43f\"; }\n.ion-ios-glasses-outline:before { content: \"\\f43e\"; }\n.ion-ios-globe:before { content: \"\\f18a\"; }\n.ion-ios-globe-outline:before { content: \"\\f189\"; }\n.ion-ios-grid:before { content: \"\\f18c\"; }\n.ion-ios-grid-outline:before { content: \"\\f18b\"; }\n.ion-ios-hammer:before { content: \"\\f18e\"; }\n.ion-ios-hammer-outline:before { content: \"\\f18d\"; }\n.ion-ios-hand:before { content: \"\\f190\"; }\n.ion-ios-hand-outline:before { content: \"\\f18f\"; }\n.ion-ios-happy:before { content: \"\\f192\"; }\n.ion-ios-happy-outline:before { content: \"\\f191\"; }\n.ion-ios-headset:before { content: \"\\f194\"; }\n.ion-ios-headset-outline:before { content: \"\\f193\"; }\n.ion-ios-heart:before { content: \"\\f443\"; }\n.ion-ios-heart-outline:before { content: \"\\f442\"; }\n.ion-ios-help:before { content: \"\\f446\"; }\n.ion-ios-help-buoy:before { content: \"\\f196\"; }\n.ion-ios-help-buoy-outline:before { content: \"\\f195\"; }\n.ion-ios-help-circle:before { content: \"\\f198\"; }\n.ion-ios-help-circle-outline:before { content: \"\\f197\"; }\n.ion-ios-help-outline:before { content: \"\\f446\"; }\n.ion-ios-home:before { content: \"\\f448\"; }\n.ion-ios-home-outline:before { content: \"\\f447\"; }\n.ion-ios-ice-cream:before { content: \"\\f19a\"; }\n.ion-ios-ice-cream-outline:before { content: \"\\f199\"; }\n.ion-ios-image:before { content: \"\\f19c\"; }\n.ion-ios-image-outline:before { content: \"\\f19b\"; }\n.ion-ios-images:before { content: \"\\f19e\"; }\n.ion-ios-images-outline:before { content: \"\\f19d\"; }\n.ion-ios-infinite:before { content: \"\\f44a\"; }\n.ion-ios-infinite-outline:before { content: \"\\f449\"; }\n.ion-ios-information:before { content: \"\\f44d\"; }\n.ion-ios-information-circle:before { content: \"\\f1a0\"; }\n.ion-ios-information-circle-outline:before { content: \"\\f19f\"; }\n.ion-ios-information-outline:before { content: \"\\f44d\"; }\n.ion-ios-ionic:before { content: \"\\f1a1\"; }\n.ion-ios-ionic-outline:before { content: \"\\f44e\"; }\n.ion-ios-ionitron:before { content: \"\\f1a3\"; }\n.ion-ios-ionitron-outline:before { content: \"\\f1a2\"; }\n.ion-ios-jet:before { content: \"\\f1a5\"; }\n.ion-ios-jet-outline:before { content: \"\\f1a4\"; }\n.ion-ios-key:before { content: \"\\f1a7\"; }\n.ion-ios-key-outline:before { content: \"\\f1a6\"; }\n.ion-ios-keypad:before { content: \"\\f450\"; }\n.ion-ios-keypad-outline:before { content: \"\\f44f\"; }\n.ion-ios-laptop:before { content: \"\\f1a8\"; }\n.ion-ios-laptop-outline:before { content: \"\\f1a8\"; }\n.ion-ios-leaf:before { content: \"\\f1aa\"; }\n.ion-ios-leaf-outline:before { content: \"\\f1a9\"; }\n.ion-ios-link:before { content: \"\\f22a\"; }\n.ion-ios-link-outline:before { content: \"\\f1ca\"; }\n.ion-ios-list:before { content: \"\\f454\"; }\n.ion-ios-list-box:before { content: \"\\f1ac\"; }\n.ion-ios-list-box-outline:before { content: \"\\f1ab\"; }\n.ion-ios-list-outline:before { content: \"\\f454\"; }\n.ion-ios-locate:before { content: \"\\f1ae\"; }\n.ion-ios-locate-outline:before { content: \"\\f1ad\"; }\n.ion-ios-lock:before { content: \"\\f1b0\"; }\n.ion-ios-lock-outline:before { content: \"\\f1af\"; }\n.ion-ios-log-in:before { content: \"\\f1b1\"; }\n.ion-ios-log-in-outline:before { content: \"\\f1b1\"; }\n.ion-ios-log-out:before { content: \"\\f1b2\"; }\n.ion-ios-log-out-outline:before { content: \"\\f1b2\"; }\n.ion-ios-magnet:before { content: \"\\f1b4\"; }\n.ion-ios-magnet-outline:before { content: \"\\f1b3\"; }\n.ion-ios-mail:before { content: \"\\f1b8\"; }\n.ion-ios-mail-open:before { content: \"\\f1b6\"; }\n.ion-ios-mail-open-outline:before { content: \"\\f1b5\"; }\n.ion-ios-mail-outline:before { content: \"\\f1b7\"; }\n.ion-ios-male:before { content: \"\\f1b9\"; }\n.ion-ios-male-outline:before { content: \"\\f1b9\"; }\n.ion-ios-man:before { content: \"\\f1bb\"; }\n.ion-ios-man-outline:before { content: \"\\f1ba\"; }\n.ion-ios-map:before { content: \"\\f1bd\"; }\n.ion-ios-map-outline:before { content: \"\\f1bc\"; }\n.ion-ios-medal:before { content: \"\\f1bf\"; }\n.ion-ios-medal-outline:before { content: \"\\f1be\"; }\n.ion-ios-medical:before { content: \"\\f45c\"; }\n.ion-ios-medical-outline:before { content: \"\\f45b\"; }\n.ion-ios-medkit:before { content: \"\\f45e\"; }\n.ion-ios-medkit-outline:before { content: \"\\f45d\"; }\n.ion-ios-megaphone:before { content: \"\\f1c1\"; }\n.ion-ios-megaphone-outline:before { content: \"\\f1c0\"; }\n.ion-ios-menu:before { content: \"\\f1c3\"; }\n.ion-ios-menu-outline:before { content: \"\\f1c2\"; }\n.ion-ios-mic:before { content: \"\\f461\"; }\n.ion-ios-mic-off:before { content: \"\\f45f\"; }\n.ion-ios-mic-off-outline:before { content: \"\\f1c4\"; }\n.ion-ios-mic-outline:before { content: \"\\f460\"; }\n.ion-ios-microphone:before { content: \"\\f1c6\"; }\n.ion-ios-microphone-outline:before { content: \"\\f1c5\"; }\n.ion-ios-moon:before { content: \"\\f468\"; }\n.ion-ios-moon-outline:before { content: \"\\f467\"; }\n.ion-ios-more:before { content: \"\\f1c8\"; }\n.ion-ios-more-outline:before { content: \"\\f1c7\"; }\n.ion-ios-move:before { content: \"\\f1cb\"; }\n.ion-ios-move-outline:before { content: \"\\f1cb\"; }\n.ion-ios-musical-note:before { content: \"\\f46b\"; }\n.ion-ios-musical-note-outline:before { content: \"\\f1cc\"; }\n.ion-ios-musical-notes:before { content: \"\\f46c\"; }\n.ion-ios-musical-notes-outline:before { content: \"\\f1cd\"; }\n.ion-ios-navigate:before { content: \"\\f46e\"; }\n.ion-ios-navigate-outline:before { content: \"\\f46d\"; }\n.ion-ios-no-smoking:before { content: \"\\f1cf\"; }\n.ion-ios-no-smoking-outline:before { content: \"\\f1ce\"; }\n.ion-ios-notifications:before { content: \"\\f1d3\"; }\n.ion-ios-notifications-off:before { content: \"\\f1d1\"; }\n.ion-ios-notifications-off-outline:before { content: \"\\f1d0\"; }\n.ion-ios-notifications-outline:before { content: \"\\f1d2\"; }\n.ion-ios-nuclear:before { content: \"\\f1d5\"; }\n.ion-ios-nuclear-outline:before { content: \"\\f1d4\"; }\n.ion-ios-nutrition:before { content: \"\\f470\"; }\n.ion-ios-nutrition-outline:before { content: \"\\f46f\"; }\n.ion-ios-open:before { content: \"\\f1d7\"; }\n.ion-ios-open-outline:before { content: \"\\f1d6\"; }\n.ion-ios-options:before { content: \"\\f1d9\"; }\n.ion-ios-options-outline:before { content: \"\\f1d8\"; }\n.ion-ios-outlet:before { content: \"\\f1db\"; }\n.ion-ios-outlet-outline:before { content: \"\\f1da\"; }\n.ion-ios-paper:before { content: \"\\f472\"; }\n.ion-ios-paper-outline:before { content: \"\\f471\"; }\n.ion-ios-paper-plane:before { content: \"\\f1dd\"; }\n.ion-ios-paper-plane-outline:before { content: \"\\f1dc\"; }\n.ion-ios-partly-sunny:before { content: \"\\f1df\"; }\n.ion-ios-partly-sunny-outline:before { content: \"\\f1de\"; }\n.ion-ios-pause:before { content: \"\\f478\"; }\n.ion-ios-pause-outline:before { content: \"\\f477\"; }\n.ion-ios-paw:before { content: \"\\f47a\"; }\n.ion-ios-paw-outline:before { content: \"\\f479\"; }\n.ion-ios-people:before { content: \"\\f47c\"; }\n.ion-ios-people-outline:before { content: \"\\f47b\"; }\n.ion-ios-person:before { content: \"\\f47e\"; }\n.ion-ios-person-add:before { content: \"\\f1e1\"; }\n.ion-ios-person-add-outline:before { content: \"\\f1e0\"; }\n.ion-ios-person-outline:before { content: \"\\f47d\"; }\n.ion-ios-phone-landscape:before { content: \"\\f1e2\"; }\n.ion-ios-phone-landscape-outline:before { content: \"\\f1e2\"; }\n.ion-ios-phone-portrait:before { content: \"\\f1e3\"; }\n.ion-ios-phone-portrait-outline:before { content: \"\\f1e3\"; }\n.ion-ios-photos:before { content: \"\\f482\"; }\n.ion-ios-photos-outline:before { content: \"\\f481\"; }\n.ion-ios-pie:before { content: \"\\f484\"; }\n.ion-ios-pie-outline:before { content: \"\\f483\"; }\n.ion-ios-pin:before { content: \"\\f1e5\"; }\n.ion-ios-pin-outline:before { content: \"\\f1e4\"; }\n.ion-ios-pint:before { content: \"\\f486\"; }\n.ion-ios-pint-outline:before { content: \"\\f485\"; }\n.ion-ios-pizza:before { content: \"\\f1e7\"; }\n.ion-ios-pizza-outline:before { content: \"\\f1e6\"; }\n.ion-ios-plane:before { content: \"\\f1e9\"; }\n.ion-ios-plane-outline:before { content: \"\\f1e8\"; }\n.ion-ios-planet:before { content: \"\\f1eb\"; }\n.ion-ios-planet-outline:before { content: \"\\f1ea\"; }\n.ion-ios-play:before { content: \"\\f488\"; }\n.ion-ios-play-outline:before { content: \"\\f487\"; }\n.ion-ios-podium:before { content: \"\\f1ed\"; }\n.ion-ios-podium-outline:before { content: \"\\f1ec\"; }\n.ion-ios-power:before { content: \"\\f1ef\"; }\n.ion-ios-power-outline:before { content: \"\\f1ee\"; }\n.ion-ios-pricetag:before { content: \"\\f48d\"; }\n.ion-ios-pricetag-outline:before { content: \"\\f48c\"; }\n.ion-ios-pricetags:before { content: \"\\f48f\"; }\n.ion-ios-pricetags-outline:before { content: \"\\f48e\"; }\n.ion-ios-print:before { content: \"\\f1f1\"; }\n.ion-ios-print-outline:before { content: \"\\f1f0\"; }\n.ion-ios-pulse:before { content: \"\\f493\"; }\n.ion-ios-pulse-outline:before { content: \"\\f1f2\"; }\n.ion-ios-qr-scanner:before { content: \"\\f1f3\"; }\n.ion-ios-qr-scanner-outline:before { content: \"\\f1f3\"; }\n.ion-ios-quote:before { content: \"\\f1f5\"; }\n.ion-ios-quote-outline:before { content: \"\\f1f4\"; }\n.ion-ios-radio:before { content: \"\\f1f9\"; }\n.ion-ios-radio-button-off:before { content: \"\\f1f6\"; }\n.ion-ios-radio-button-off-outline:before { content: \"\\f1f6\"; }\n.ion-ios-radio-button-on:before { content: \"\\f1f7\"; }\n.ion-ios-radio-button-on-outline:before { content: \"\\f1f7\"; }\n.ion-ios-radio-outline:before { content: \"\\f1f8\"; }\n.ion-ios-rainy:before { content: \"\\f495\"; }\n.ion-ios-rainy-outline:before { content: \"\\f494\"; }\n.ion-ios-recording:before { content: \"\\f497\"; }\n.ion-ios-recording-outline:before { content: \"\\f496\"; }\n.ion-ios-redo:before { content: \"\\f499\"; }\n.ion-ios-redo-outline:before { content: \"\\f498\"; }\n.ion-ios-refresh:before { content: \"\\f49c\"; }\n.ion-ios-refresh-circle:before { content: \"\\f226\"; }\n.ion-ios-refresh-circle-outline:before { content: \"\\f224\"; }\n.ion-ios-refresh-outline:before { content: \"\\f49c\"; }\n.ion-ios-remove:before { content: \"\\f1fc\"; }\n.ion-ios-remove-circle:before { content: \"\\f1fb\"; }\n.ion-ios-remove-circle-outline:before { content: \"\\f1fa\"; }\n.ion-ios-remove-outline:before { content: \"\\f1fc\"; }\n.ion-ios-reorder:before { content: \"\\f1fd\"; }\n.ion-ios-reorder-outline:before { content: \"\\f1fd\"; }\n.ion-ios-repeat:before { content: \"\\f1fe\"; }\n.ion-ios-repeat-outline:before { content: \"\\f1fe\"; }\n.ion-ios-resize:before { content: \"\\f1ff\"; }\n.ion-ios-resize-outline:before { content: \"\\f1ff\"; }\n.ion-ios-restaurant:before { content: \"\\f201\"; }\n.ion-ios-restaurant-outline:before { content: \"\\f200\"; }\n.ion-ios-return-left:before { content: \"\\f202\"; }\n.ion-ios-return-left-outline:before { content: \"\\f202\"; }\n.ion-ios-return-right:before { content: \"\\f203\"; }\n.ion-ios-return-right-outline:before { content: \"\\f203\"; }\n.ion-ios-reverse-camera:before { content: \"\\f49f\"; }\n.ion-ios-reverse-camera-outline:before { content: \"\\f49e\"; }\n.ion-ios-rewind:before { content: \"\\f4a1\"; }\n.ion-ios-rewind-outline:before { content: \"\\f4a0\"; }\n.ion-ios-ribbon:before { content: \"\\f205\"; }\n.ion-ios-ribbon-outline:before { content: \"\\f204\"; }\n.ion-ios-rose:before { content: \"\\f4a3\"; }\n.ion-ios-rose-outline:before { content: \"\\f4a2\"; }\n.ion-ios-sad:before { content: \"\\f207\"; }\n.ion-ios-sad-outline:before { content: \"\\f206\"; }\n.ion-ios-school:before { content: \"\\f209\"; }\n.ion-ios-school-outline:before { content: \"\\f208\"; }\n.ion-ios-search:before { content: \"\\f4a5\"; }\n.ion-ios-search-outline:before { content: \"\\f20a\"; }\n.ion-ios-send:before { content: \"\\f20c\"; }\n.ion-ios-send-outline:before { content: \"\\f20b\"; }\n.ion-ios-settings:before { content: \"\\f4a7\"; }\n.ion-ios-settings-outline:before { content: \"\\f20d\"; }\n.ion-ios-share:before { content: \"\\f211\"; }\n.ion-ios-share-alt:before { content: \"\\f20f\"; }\n.ion-ios-share-alt-outline:before { content: \"\\f20e\"; }\n.ion-ios-share-outline:before { content: \"\\f210\"; }\n.ion-ios-shirt:before { content: \"\\f213\"; }\n.ion-ios-shirt-outline:before { content: \"\\f212\"; }\n.ion-ios-shuffle:before { content: \"\\f4a9\"; }\n.ion-ios-shuffle-outline:before { content: \"\\f4a9\"; }\n.ion-ios-skip-backward:before { content: \"\\f215\"; }\n.ion-ios-skip-backward-outline:before { content: \"\\f214\"; }\n.ion-ios-skip-forward:before { content: \"\\f217\"; }\n.ion-ios-skip-forward-outline:before { content: \"\\f216\"; }\n.ion-ios-snow:before { content: \"\\f218\"; }\n.ion-ios-snow-outline:before { content: \"\\f22c\"; }\n.ion-ios-speedometer:before { content: \"\\f4b0\"; }\n.ion-ios-speedometer-outline:before { content: \"\\f4af\"; }\n.ion-ios-square:before { content: \"\\f21a\"; }\n.ion-ios-square-outline:before { content: \"\\f219\"; }\n.ion-ios-star:before { content: \"\\f4b3\"; }\n.ion-ios-star-half:before { content: \"\\f4b1\"; }\n.ion-ios-star-half-outline:before { content: \"\\f4b1\"; }\n.ion-ios-star-outline:before { content: \"\\f4b2\"; }\n.ion-ios-stats:before { content: \"\\f21c\"; }\n.ion-ios-stats-outline:before { content: \"\\f21b\"; }\n.ion-ios-stopwatch:before { content: \"\\f4b5\"; }\n.ion-ios-stopwatch-outline:before { content: \"\\f4b4\"; }\n.ion-ios-subway:before { content: \"\\f21e\"; }\n.ion-ios-subway-outline:before { content: \"\\f21d\"; }\n.ion-ios-sunny:before { content: \"\\f4b7\"; }\n.ion-ios-sunny-outline:before { content: \"\\f4b6\"; }\n.ion-ios-swap:before { content: \"\\f21f\"; }\n.ion-ios-swap-outline:before { content: \"\\f21f\"; }\n.ion-ios-switch:before { content: \"\\f221\"; }\n.ion-ios-switch-outline:before { content: \"\\f220\"; }\n.ion-ios-sync:before { content: \"\\f222\"; }\n.ion-ios-sync-outline:before { content: \"\\f222\"; }\n.ion-ios-tablet-landscape:before { content: \"\\f223\"; }\n.ion-ios-tablet-landscape-outline:before { content: \"\\f223\"; }\n.ion-ios-tablet-portrait:before { content: \"\\f24e\"; }\n.ion-ios-tablet-portrait-outline:before { content: \"\\f24e\"; }\n.ion-ios-tennisball:before { content: \"\\f4bb\"; }\n.ion-ios-tennisball-outline:before { content: \"\\f4ba\"; }\n.ion-ios-text:before { content: \"\\f250\"; }\n.ion-ios-text-outline:before { content: \"\\f24f\"; }\n.ion-ios-thermometer:before { content: \"\\f252\"; }\n.ion-ios-thermometer-outline:before { content: \"\\f251\"; }\n.ion-ios-thumbs-down:before { content: \"\\f254\"; }\n.ion-ios-thumbs-down-outline:before { content: \"\\f253\"; }\n.ion-ios-thumbs-up:before { content: \"\\f256\"; }\n.ion-ios-thumbs-up-outline:before { content: \"\\f255\"; }\n.ion-ios-thunderstorm:before { content: \"\\f4bd\"; }\n.ion-ios-thunderstorm-outline:before { content: \"\\f4bc\"; }\n.ion-ios-time:before { content: \"\\f4bf\"; }\n.ion-ios-time-outline:before { content: \"\\f4be\"; }\n.ion-ios-timer:before { content: \"\\f4c1\"; }\n.ion-ios-timer-outline:before { content: \"\\f4c0\"; }\n.ion-ios-train:before { content: \"\\f258\"; }\n.ion-ios-train-outline:before { content: \"\\f257\"; }\n.ion-ios-transgender:before { content: \"\\f259\"; }\n.ion-ios-transgender-outline:before { content: \"\\f259\"; }\n.ion-ios-trash:before { content: \"\\f4c5\"; }\n.ion-ios-trash-outline:before { content: \"\\f4c4\"; }\n.ion-ios-trending-down:before { content: \"\\f25a\"; }\n.ion-ios-trending-down-outline:before { content: \"\\f25a\"; }\n.ion-ios-trending-up:before { content: \"\\f25b\"; }\n.ion-ios-trending-up-outline:before { content: \"\\f25b\"; }\n.ion-ios-trophy:before { content: \"\\f25d\"; }\n.ion-ios-trophy-outline:before { content: \"\\f25c\"; }\n.ion-ios-umbrella:before { content: \"\\f25f\"; }\n.ion-ios-umbrella-outline:before { content: \"\\f25e\"; }\n.ion-ios-undo:before { content: \"\\f4c7\"; }\n.ion-ios-undo-outline:before { content: \"\\f4c6\"; }\n.ion-ios-unlock:before { content: \"\\f261\"; }\n.ion-ios-unlock-outline:before { content: \"\\f260\"; }\n.ion-ios-videocam:before { content: \"\\f4cd\"; }\n.ion-ios-videocam-outline:before { content: \"\\f4cc\"; }\n.ion-ios-volume-down:before { content: \"\\f262\"; }\n.ion-ios-volume-down-outline:before { content: \"\\f262\"; }\n.ion-ios-volume-mute:before { content: \"\\f263\"; }\n.ion-ios-volume-mute-outline:before { content: \"\\f263\"; }\n.ion-ios-volume-off:before { content: \"\\f264\"; }\n.ion-ios-volume-off-outline:before { content: \"\\f264\"; }\n.ion-ios-volume-up:before { content: \"\\f265\"; }\n.ion-ios-volume-up-outline:before { content: \"\\f265\"; }\n.ion-ios-walk:before { content: \"\\f266\"; }\n.ion-ios-walk-outline:before { content: \"\\f266\"; }\n.ion-ios-warning:before { content: \"\\f268\"; }\n.ion-ios-warning-outline:before { content: \"\\f267\"; }\n.ion-ios-watch:before { content: \"\\f269\"; }\n.ion-ios-watch-outline:before { content: \"\\f269\"; }\n.ion-ios-water:before { content: \"\\f26b\"; }\n.ion-ios-water-outline:before { content: \"\\f26a\"; }\n.ion-ios-wifi:before { content: \"\\f26d\"; }\n.ion-ios-wifi-outline:before { content: \"\\f26c\"; }\n.ion-ios-wine:before { content: \"\\f26f\"; }\n.ion-ios-wine-outline:before { content: \"\\f26e\"; }\n.ion-ios-woman:before { content: \"\\f271\"; }\n.ion-ios-woman-outline:before { content: \"\\f270\"; }\n.ion-logo-android:before { content: \"\\f225\"; }\n.ion-logo-angular:before { content: \"\\f227\"; }\n.ion-logo-apple:before { content: \"\\f229\"; }\n.ion-logo-bitcoin:before { content: \"\\f22b\"; }\n.ion-logo-buffer:before { content: \"\\f22d\"; }\n.ion-logo-chrome:before { content: \"\\f22f\"; }\n.ion-logo-codepen:before { content: \"\\f230\"; }\n.ion-logo-css3:before { content: \"\\f231\"; }\n.ion-logo-designernews:before { content: \"\\f232\"; }\n.ion-logo-dribbble:before { content: \"\\f233\"; }\n.ion-logo-dropbox:before { content: \"\\f234\"; }\n.ion-logo-euro:before { content: \"\\f235\"; }\n.ion-logo-facebook:before { content: \"\\f236\"; }\n.ion-logo-foursquare:before { content: \"\\f237\"; }\n.ion-logo-freebsd-devil:before { content: \"\\f238\"; }\n.ion-logo-github:before { content: \"\\f239\"; }\n.ion-logo-google:before { content: \"\\f23a\"; }\n.ion-logo-googleplus:before { content: \"\\f23b\"; }\n.ion-logo-hackernews:before { content: \"\\f23c\"; }\n.ion-logo-html5:before { content: \"\\f23d\"; }\n.ion-logo-instagram:before { content: \"\\f23e\"; }\n.ion-logo-javascript:before { content: \"\\f23f\"; }\n.ion-logo-linkedin:before { content: \"\\f240\"; }\n.ion-logo-markdown:before { content: \"\\f241\"; }\n.ion-logo-nodejs:before { content: \"\\f242\"; }\n.ion-logo-octocat:before { content: \"\\f243\"; }\n.ion-logo-pinterest:before { content: \"\\f244\"; }\n.ion-logo-playstation:before { content: \"\\f245\"; }\n.ion-logo-python:before { content: \"\\f246\"; }\n.ion-logo-reddit:before { content: \"\\f247\"; }\n.ion-logo-rss:before { content: \"\\f248\"; }\n.ion-logo-sass:before { content: \"\\f249\"; }\n.ion-logo-skype:before { content: \"\\f24a\"; }\n.ion-logo-snapchat:before { content: \"\\f24b\"; }\n.ion-logo-steam:before { content: \"\\f24c\"; }\n.ion-logo-tumblr:before { content: \"\\f24d\"; }\n.ion-logo-tux:before { content: \"\\f2ae\"; }\n.ion-logo-twitch:before { content: \"\\f2af\"; }\n.ion-logo-twitter:before { content: \"\\f2b0\"; }\n.ion-logo-usd:before { content: \"\\f2b1\"; }\n.ion-logo-vimeo:before { content: \"\\f2c4\"; }\n.ion-logo-whatsapp:before { content: \"\\f2c5\"; }\n.ion-logo-windows:before { content: \"\\f32f\"; }\n.ion-logo-wordpress:before { content: \"\\f330\"; }\n.ion-logo-xbox:before { content: \"\\f34c\"; }\n.ion-logo-yahoo:before { content: \"\\f34d\"; }\n.ion-logo-yen:before { content: \"\\f34e\"; }\n.ion-logo-youtube:before { content: \"\\f34f\"; }\n.ion-md-add:before { content: \"\\f273\"; }\n.ion-md-add-circle:before { content: \"\\f272\"; }\n.ion-md-alarm:before { content: \"\\f274\"; }\n.ion-md-albums:before { content: \"\\f275\"; }\n.ion-md-alert:before { content: \"\\f276\"; }\n.ion-md-american-football:before { content: \"\\f277\"; }\n.ion-md-analytics:before { content: \"\\f278\"; }\n.ion-md-aperture:before { content: \"\\f279\"; }\n.ion-md-apps:before { content: \"\\f27a\"; }\n.ion-md-appstore:before { content: \"\\f27b\"; }\n.ion-md-archive:before { content: \"\\f27c\"; }\n.ion-md-arrow-back:before { content: \"\\f27d\"; }\n.ion-md-arrow-down:before { content: \"\\f27e\"; }\n.ion-md-arrow-dropdown:before { content: \"\\f280\"; }\n.ion-md-arrow-dropdown-circle:before { content: \"\\f27f\"; }\n.ion-md-arrow-dropleft:before { content: \"\\f282\"; }\n.ion-md-arrow-dropleft-circle:before { content: \"\\f281\"; }\n.ion-md-arrow-dropright:before { content: \"\\f284\"; }\n.ion-md-arrow-dropright-circle:before { content: \"\\f283\"; }\n.ion-md-arrow-dropup:before { content: \"\\f286\"; }\n.ion-md-arrow-dropup-circle:before { content: \"\\f285\"; }\n.ion-md-arrow-forward:before { content: \"\\f287\"; }\n.ion-md-arrow-round-back:before { content: \"\\f288\"; }\n.ion-md-arrow-round-down:before { content: \"\\f289\"; }\n.ion-md-arrow-round-forward:before { content: \"\\f28a\"; }\n.ion-md-arrow-round-up:before { content: \"\\f28b\"; }\n.ion-md-arrow-up:before { content: \"\\f28c\"; }\n.ion-md-at:before { content: \"\\f28d\"; }\n.ion-md-attach:before { content: \"\\f28e\"; }\n.ion-md-backspace:before { content: \"\\f28f\"; }\n.ion-md-barcode:before { content: \"\\f290\"; }\n.ion-md-baseball:before { content: \"\\f291\"; }\n.ion-md-basket:before { content: \"\\f292\"; }\n.ion-md-basketball:before { content: \"\\f293\"; }\n.ion-md-battery-charging:before { content: \"\\f294\"; }\n.ion-md-battery-dead:before { content: \"\\f295\"; }\n.ion-md-battery-full:before { content: \"\\f296\"; }\n.ion-md-beaker:before { content: \"\\f297\"; }\n.ion-md-beer:before { content: \"\\f298\"; }\n.ion-md-bicycle:before { content: \"\\f299\"; }\n.ion-md-bluetooth:before { content: \"\\f29a\"; }\n.ion-md-boat:before { content: \"\\f29b\"; }\n.ion-md-body:before { content: \"\\f29c\"; }\n.ion-md-bonfire:before { content: \"\\f29d\"; }\n.ion-md-book:before { content: \"\\f29e\"; }\n.ion-md-bookmark:before { content: \"\\f29f\"; }\n.ion-md-bookmarks:before { content: \"\\f2a0\"; }\n.ion-md-bowtie:before { content: \"\\f2a1\"; }\n.ion-md-briefcase:before { content: \"\\f2a2\"; }\n.ion-md-browsers:before { content: \"\\f2a3\"; }\n.ion-md-brush:before { content: \"\\f2a4\"; }\n.ion-md-bug:before { content: \"\\f2a5\"; }\n.ion-md-build:before { content: \"\\f2a6\"; }\n.ion-md-bulb:before { content: \"\\f2a7\"; }\n.ion-md-bus:before { content: \"\\f2a8\"; }\n.ion-md-cafe:before { content: \"\\f2a9\"; }\n.ion-md-calculator:before { content: \"\\f2aa\"; }\n.ion-md-calendar:before { content: \"\\f2ab\"; }\n.ion-md-call:before { content: \"\\f2ac\"; }\n.ion-md-camera:before { content: \"\\f2ad\"; }\n.ion-md-car:before { content: \"\\f2b2\"; }\n.ion-md-card:before { content: \"\\f2b3\"; }\n.ion-md-cart:before { content: \"\\f2b4\"; }\n.ion-md-cash:before { content: \"\\f2b5\"; }\n.ion-md-chatboxes:before { content: \"\\f2b6\"; }\n.ion-md-chatbubbles:before { content: \"\\f2b7\"; }\n.ion-md-checkbox:before { content: \"\\f2b9\"; }\n.ion-md-checkbox-outline:before { content: \"\\f2b8\"; }\n.ion-md-checkmark:before { content: \"\\f2bc\"; }\n.ion-md-checkmark-circle:before { content: \"\\f2bb\"; }\n.ion-md-checkmark-circle-outline:before { content: \"\\f2ba\"; }\n.ion-md-clipboard:before { content: \"\\f2bd\"; }\n.ion-md-clock:before { content: \"\\f2be\"; }\n.ion-md-close:before { content: \"\\f2c0\"; }\n.ion-md-close-circle:before { content: \"\\f2bf\"; }\n.ion-md-closed-captioning:before { content: \"\\f2c1\"; }\n.ion-md-cloud:before { content: \"\\f2c9\"; }\n.ion-md-cloud-circle:before { content: \"\\f2c2\"; }\n.ion-md-cloud-done:before { content: \"\\f2c3\"; }\n.ion-md-cloud-download:before { content: \"\\f2c6\"; }\n.ion-md-cloud-outline:before { content: \"\\f2c7\"; }\n.ion-md-cloud-upload:before { content: \"\\f2c8\"; }\n.ion-md-cloudy:before { content: \"\\f2cb\"; }\n.ion-md-cloudy-night:before { content: \"\\f2ca\"; }\n.ion-md-code:before { content: \"\\f2ce\"; }\n.ion-md-code-download:before { content: \"\\f2cc\"; }\n.ion-md-code-working:before { content: \"\\f2cd\"; }\n.ion-md-cog:before { content: \"\\f2cf\"; }\n.ion-md-color-fill:before { content: \"\\f2d0\"; }\n.ion-md-color-filter:before { content: \"\\f2d1\"; }\n.ion-md-color-palette:before { content: \"\\f2d2\"; }\n.ion-md-color-wand:before { content: \"\\f2d3\"; }\n.ion-md-compass:before { content: \"\\f2d4\"; }\n.ion-md-construct:before { content: \"\\f2d5\"; }\n.ion-md-contact:before { content: \"\\f2d6\"; }\n.ion-md-contacts:before { content: \"\\f2d7\"; }\n.ion-md-contract:before { content: \"\\f2d8\"; }\n.ion-md-contrast:before { content: \"\\f2d9\"; }\n.ion-md-copy:before { content: \"\\f2da\"; }\n.ion-md-create:before { content: \"\\f2db\"; }\n.ion-md-crop:before { content: \"\\f2dc\"; }\n.ion-md-cube:before { content: \"\\f2dd\"; }\n.ion-md-cut:before { content: \"\\f2de\"; }\n.ion-md-desktop:before { content: \"\\f2df\"; }\n.ion-md-disc:before { content: \"\\f2e0\"; }\n.ion-md-document:before { content: \"\\f2e1\"; }\n.ion-md-done-all:before { content: \"\\f2e2\"; }\n.ion-md-download:before { content: \"\\f2e3\"; }\n.ion-md-easel:before { content: \"\\f2e4\"; }\n.ion-md-egg:before { content: \"\\f2e5\"; }\n.ion-md-exit:before { content: \"\\f2e6\"; }\n.ion-md-expand:before { content: \"\\f2e7\"; }\n.ion-md-eye:before { content: \"\\f2e9\"; }\n.ion-md-eye-off:before { content: \"\\f2e8\"; }\n.ion-md-fastforward:before { content: \"\\f2ea\"; }\n.ion-md-female:before { content: \"\\f2eb\"; }\n.ion-md-filing:before { content: \"\\f2ec\"; }\n.ion-md-film:before { content: \"\\f2ed\"; }\n.ion-md-finger-print:before { content: \"\\f2ee\"; }\n.ion-md-flag:before { content: \"\\f2ef\"; }\n.ion-md-flame:before { content: \"\\f2f0\"; }\n.ion-md-flash:before { content: \"\\f2f1\"; }\n.ion-md-flask:before { content: \"\\f2f2\"; }\n.ion-md-flower:before { content: \"\\f2f3\"; }\n.ion-md-folder:before { content: \"\\f2f5\"; }\n.ion-md-folder-open:before { content: \"\\f2f4\"; }\n.ion-md-football:before { content: \"\\f2f6\"; }\n.ion-md-funnel:before { content: \"\\f2f7\"; }\n.ion-md-game-controller-a:before { content: \"\\f2f8\"; }\n.ion-md-game-controller-b:before { content: \"\\f2f9\"; }\n.ion-md-git-branch:before { content: \"\\f2fa\"; }\n.ion-md-git-commit:before { content: \"\\f2fb\"; }\n.ion-md-git-compare:before { content: \"\\f2fc\"; }\n.ion-md-git-merge:before { content: \"\\f2fd\"; }\n.ion-md-git-network:before { content: \"\\f2fe\"; }\n.ion-md-git-pull-request:before { content: \"\\f2ff\"; }\n.ion-md-glasses:before { content: \"\\f300\"; }\n.ion-md-globe:before { content: \"\\f301\"; }\n.ion-md-grid:before { content: \"\\f302\"; }\n.ion-md-hammer:before { content: \"\\f303\"; }\n.ion-md-hand:before { content: \"\\f304\"; }\n.ion-md-happy:before { content: \"\\f305\"; }\n.ion-md-headset:before { content: \"\\f306\"; }\n.ion-md-heart:before { content: \"\\f308\"; }\n.ion-md-heart-outline:before { content: \"\\f307\"; }\n.ion-md-help:before { content: \"\\f30b\"; }\n.ion-md-help-buoy:before { content: \"\\f309\"; }\n.ion-md-help-circle:before { content: \"\\f30a\"; }\n.ion-md-home:before { content: \"\\f30c\"; }\n.ion-md-ice-cream:before { content: \"\\f30d\"; }\n.ion-md-image:before { content: \"\\f30e\"; }\n.ion-md-images:before { content: \"\\f30f\"; }\n.ion-md-infinite:before { content: \"\\f310\"; }\n.ion-md-information:before { content: \"\\f312\"; }\n.ion-md-information-circle:before { content: \"\\f311\"; }\n.ion-md-ionic:before { content: \"\\f313\"; }\n.ion-md-ionitron:before { content: \"\\f314\"; }\n.ion-md-jet:before { content: \"\\f315\"; }\n.ion-md-key:before { content: \"\\f316\"; }\n.ion-md-keypad:before { content: \"\\f317\"; }\n.ion-md-laptop:before { content: \"\\f318\"; }\n.ion-md-leaf:before { content: \"\\f319\"; }\n.ion-md-link:before { content: \"\\f22e\"; }\n.ion-md-list:before { content: \"\\f31b\"; }\n.ion-md-list-box:before { content: \"\\f31a\"; }\n.ion-md-locate:before { content: \"\\f31c\"; }\n.ion-md-lock:before { content: \"\\f31d\"; }\n.ion-md-log-in:before { content: \"\\f31e\"; }\n.ion-md-log-out:before { content: \"\\f31f\"; }\n.ion-md-magnet:before { content: \"\\f320\"; }\n.ion-md-mail:before { content: \"\\f322\"; }\n.ion-md-mail-open:before { content: \"\\f321\"; }\n.ion-md-male:before { content: \"\\f323\"; }\n.ion-md-man:before { content: \"\\f324\"; }\n.ion-md-map:before { content: \"\\f325\"; }\n.ion-md-medal:before { content: \"\\f326\"; }\n.ion-md-medical:before { content: \"\\f327\"; }\n.ion-md-medkit:before { content: \"\\f328\"; }\n.ion-md-megaphone:before { content: \"\\f329\"; }\n.ion-md-menu:before { content: \"\\f32a\"; }\n.ion-md-mic:before { content: \"\\f32c\"; }\n.ion-md-mic-off:before { content: \"\\f32b\"; }\n.ion-md-microphone:before { content: \"\\f32d\"; }\n.ion-md-moon:before { content: \"\\f32e\"; }\n.ion-md-more:before { content: \"\\f1c9\"; }\n.ion-md-move:before { content: \"\\f331\"; }\n.ion-md-musical-note:before { content: \"\\f332\"; }\n.ion-md-musical-notes:before { content: \"\\f333\"; }\n.ion-md-navigate:before { content: \"\\f334\"; }\n.ion-md-no-smoking:before { content: \"\\f335\"; }\n.ion-md-notifications:before { content: \"\\f338\"; }\n.ion-md-notifications-off:before { content: \"\\f336\"; }\n.ion-md-notifications-outline:before { content: \"\\f337\"; }\n.ion-md-nuclear:before { content: \"\\f339\"; }\n.ion-md-nutrition:before { content: \"\\f33a\"; }\n.ion-md-open:before { content: \"\\f33b\"; }\n.ion-md-options:before { content: \"\\f33c\"; }\n.ion-md-outlet:before { content: \"\\f33d\"; }\n.ion-md-paper:before { content: \"\\f33f\"; }\n.ion-md-paper-plane:before { content: \"\\f33e\"; }\n.ion-md-partly-sunny:before { content: \"\\f340\"; }\n.ion-md-pause:before { content: \"\\f341\"; }\n.ion-md-paw:before { content: \"\\f342\"; }\n.ion-md-people:before { content: \"\\f343\"; }\n.ion-md-person:before { content: \"\\f345\"; }\n.ion-md-person-add:before { content: \"\\f344\"; }\n.ion-md-phone-landscape:before { content: \"\\f346\"; }\n.ion-md-phone-portrait:before { content: \"\\f347\"; }\n.ion-md-photos:before { content: \"\\f348\"; }\n.ion-md-pie:before { content: \"\\f349\"; }\n.ion-md-pin:before { content: \"\\f34a\"; }\n.ion-md-pint:before { content: \"\\f34b\"; }\n.ion-md-pizza:before { content: \"\\f354\"; }\n.ion-md-plane:before { content: \"\\f355\"; }\n.ion-md-planet:before { content: \"\\f356\"; }\n.ion-md-play:before { content: \"\\f357\"; }\n.ion-md-podium:before { content: \"\\f358\"; }\n.ion-md-power:before { content: \"\\f359\"; }\n.ion-md-pricetag:before { content: \"\\f35a\"; }\n.ion-md-pricetags:before { content: \"\\f35b\"; }\n.ion-md-print:before { content: \"\\f35c\"; }\n.ion-md-pulse:before { content: \"\\f35d\"; }\n.ion-md-qr-scanner:before { content: \"\\f35e\"; }\n.ion-md-quote:before { content: \"\\f35f\"; }\n.ion-md-radio:before { content: \"\\f362\"; }\n.ion-md-radio-button-off:before { content: \"\\f360\"; }\n.ion-md-radio-button-on:before { content: \"\\f361\"; }\n.ion-md-rainy:before { content: \"\\f363\"; }\n.ion-md-recording:before { content: \"\\f364\"; }\n.ion-md-redo:before { content: \"\\f365\"; }\n.ion-md-refresh:before { content: \"\\f366\"; }\n.ion-md-refresh-circle:before { content: \"\\f228\"; }\n.ion-md-remove:before { content: \"\\f368\"; }\n.ion-md-remove-circle:before { content: \"\\f367\"; }\n.ion-md-reorder:before { content: \"\\f369\"; }\n.ion-md-repeat:before { content: \"\\f36a\"; }\n.ion-md-resize:before { content: \"\\f36b\"; }\n.ion-md-restaurant:before { content: \"\\f36c\"; }\n.ion-md-return-left:before { content: \"\\f36d\"; }\n.ion-md-return-right:before { content: \"\\f36e\"; }\n.ion-md-reverse-camera:before { content: \"\\f36f\"; }\n.ion-md-rewind:before { content: \"\\f370\"; }\n.ion-md-ribbon:before { content: \"\\f371\"; }\n.ion-md-rose:before { content: \"\\f372\"; }\n.ion-md-sad:before { content: \"\\f373\"; }\n.ion-md-school:before { content: \"\\f374\"; }\n.ion-md-search:before { content: \"\\f375\"; }\n.ion-md-send:before { content: \"\\f376\"; }\n.ion-md-settings:before { content: \"\\f377\"; }\n.ion-md-share:before { content: \"\\f379\"; }\n.ion-md-share-alt:before { content: \"\\f378\"; }\n.ion-md-shirt:before { content: \"\\f37a\"; }\n.ion-md-shuffle:before { content: \"\\f37b\"; }\n.ion-md-skip-backward:before { content: \"\\f37c\"; }\n.ion-md-skip-forward:before { content: \"\\f37d\"; }\n.ion-md-snow:before { content: \"\\f37e\"; }\n.ion-md-speedometer:before { content: \"\\f37f\"; }\n.ion-md-square:before { content: \"\\f381\"; }\n.ion-md-square-outline:before { content: \"\\f380\"; }\n.ion-md-star:before { content: \"\\f384\"; }\n.ion-md-star-half:before { content: \"\\f382\"; }\n.ion-md-star-outline:before { content: \"\\f383\"; }\n.ion-md-stats:before { content: \"\\f385\"; }\n.ion-md-stopwatch:before { content: \"\\f386\"; }\n.ion-md-subway:before { content: \"\\f387\"; }\n.ion-md-sunny:before { content: \"\\f388\"; }\n.ion-md-swap:before { content: \"\\f389\"; }\n.ion-md-switch:before { content: \"\\f38a\"; }\n.ion-md-sync:before { content: \"\\f38b\"; }\n.ion-md-tablet-landscape:before { content: \"\\f38c\"; }\n.ion-md-tablet-portrait:before { content: \"\\f38d\"; }\n.ion-md-tennisball:before { content: \"\\f38e\"; }\n.ion-md-text:before { content: \"\\f38f\"; }\n.ion-md-thermometer:before { content: \"\\f390\"; }\n.ion-md-thumbs-down:before { content: \"\\f391\"; }\n.ion-md-thumbs-up:before { content: \"\\f392\"; }\n.ion-md-thunderstorm:before { content: \"\\f393\"; }\n.ion-md-time:before { content: \"\\f394\"; }\n.ion-md-timer:before { content: \"\\f395\"; }\n.ion-md-train:before { content: \"\\f396\"; }\n.ion-md-transgender:before { content: \"\\f397\"; }\n.ion-md-trash:before { content: \"\\f398\"; }\n.ion-md-trending-down:before { content: \"\\f399\"; }\n.ion-md-trending-up:before { content: \"\\f39a\"; }\n.ion-md-trophy:before { content: \"\\f39b\"; }\n.ion-md-umbrella:before { content: \"\\f39c\"; }\n.ion-md-undo:before { content: \"\\f39d\"; }\n.ion-md-unlock:before { content: \"\\f39e\"; }\n.ion-md-videocam:before { content: \"\\f39f\"; }\n.ion-md-volume-down:before { content: \"\\f3a0\"; }\n.ion-md-volume-mute:before { content: \"\\f3a1\"; }\n.ion-md-volume-off:before { content: \"\\f3a2\"; }\n.ion-md-volume-up:before { content: \"\\f3a3\"; }\n.ion-md-walk:before { content: \"\\f3a4\"; }\n.ion-md-warning:before { content: \"\\f3a5\"; }\n.ion-md-watch:before { content: \"\\f3a6\"; }\n.ion-md-water:before { content: \"\\f3a7\"; }\n.ion-md-wifi:before { content: \"\\f3a8\"; }\n.ion-md-wine:before { content: \"\\f3a9\"; }\n.ion-md-woman:before { content: \"\\f3aa\"; }"
  },
  {
    "path": "assets/scss/ionicons-v3/_ionicons-variables.scss",
    "content": "@charset \"UTF-8\";\n// Ionicons Variables\n// --------------------------\n\n$ionicons-font-path: \"../fonts\" !default;\n$ionicons-font-family: \"Ionicons\" !default;\n$ionicons-version: \"3.0.0-alpha.3\" !default;"
  },
  {
    "path": "assets/scss/ionicons-v3/_ionicons.scss",
    "content": "@import \"ionicons-variables\";\n/*!\n  Ionicons, v#{$ionicons-version}\n  Created by Ben Sperry for the Ionic Framework, https://ionicons.com/\n  https://twitter.com/benjsperry  https://twitter.com/ionicframework\n  MIT License: https://github.com/driftyco/ionicons\n\n  Android-style icons originally built by Google’s\n  Material Design Icons: https://github.com/google/material-design-icons\n  used under CC BY http://creativecommons.org/licenses/by/4.0/\n  Modified icons to fit ionicon’s grid from original.\n*/\n\n// Ionicons\n// --------------------------\n\n@font-face {\n font-family: \"Ionicons\";\n src:url(\"#{$ionicons-font-path}/ionicons.eot?v=#{$ionicons-version}\");\n src:url(\"#{$ionicons-font-path}/ionicons.eot?v=#{$ionicons-version}#iefix\") format(\"embedded-opentype\"),\n  url(\"#{$ionicons-font-path}/ionicons.woff2?v=#{$ionicons-version}\") format(\"woff2\"),\n  url(\"#{$ionicons-font-path}/ionicons.woff?v=#{$ionicons-version}\") format(\"woff\"),\n  url(\"#{$ionicons-font-path}/ionicons.ttf?v=#{$ionicons-version}\") format(\"truetype\"),\n  url(\"#{$ionicons-font-path}/ionicons.svg?v=#{$ionicons-version}#Ionicons\") format(\"svg\");\n font-weight: normal;\n font-style: normal;\n}\n\n.ion {\n  display: inline-block;\n  font-family: \"Ionicons\";\n  speak: none;\n  font-style: normal;\n  font-weight: normal;\n  font-variant: normal;\n  text-transform: none;\n  text-rendering: auto;\n  line-height: 1;\n  -webkit-font-smoothing: antialiased;\n  -moz-osx-font-smoothing: grayscale;\n}\n\n@import \"ionicons-common\";\n@import \"ionicons-icons\";\n"
  },
  {
    "path": "assets/scss/pages/_404.scss",
    "content": ".page-404 .four-oh-four {\n  min-height: calc(100vh - 64px);\n\n  text-align: center;\n\n  display: flex;\n  flex-direction: column;\n  align-items: center;\n\n  justify-content: center;\n\n  padding-block-start: 64px;\n  padding-block-end: 64px;\n\n  h2 {\n    margin-block-end: 32px;\n  }\n\n  img {\n    width: 100%;\n    max-width: 336px;\n\n    margin-block-end: 6rem;\n  }\n\n  p {\n    color: $grey;\n    font-size: 18px;\n\n    margin-block-end: 2rem;\n  }\n\n  a {\n    font-size: 16px;\n    font-weight: 500;\n\n    &::after {\n      font-family: Ionicons;\n      content: '\\f287';\n      display: inline-block;\n      margin-left: 10px;\n      position: relative;\n      top: 2px;\n    }\n  }\n}\n"
  },
  {
    "path": "assets/scss/pages/_coming-soon.scss",
    "content": ".page-coming-soon {\n  background: black;\n  .pre-header {\n    display: none;\n  }\n\n  footer {\n    border-top: none;\n  }\n  .coming-soon {\n    display: flex;\n    padding: 150px 0;\n    flex-direction: column;\n    justify-content: center;\n    align-items: center;\n    text-align: center;\n\n    .hubspot-override {\n      padding: 0 20px 20px;\n      border-radius: 8px;\n      background: #1c1d20;\n      max-width: 630px;\n      .hbspt-form .hs-form-field {\n        margin-top: 0;\n      }\n\n      .hbspt-form .submitted-message {\n        background: none;\n        padding: 20px 0 0;\n      }\n    }\n    // flicker 8s ease infinite,\n    .img-wrapper {\n      overflow: hidden;\n      position: relative;\n      &::before {\n        content: ' ';\n        display: block;\n        position: absolute;\n        top: 0;\n        left: 0;\n        bottom: 0;\n        right: 0;\n        background: linear-gradient(\n            rgba(18, 16, 16, 0) 50%,\n            rgba(0, 0, 0, 0.25) 50%\n          ),\n          linear-gradient(\n            90deg,\n            rgba(255, 0, 0, 0.06),\n            rgba(0, 255, 0, 0.02),\n            rgba(0, 0, 255, 0.06)\n          );\n        z-index: 2;\n        background-size: 100% 2px, 3px 100%;\n        pointer-events: none;\n      }\n      &::after {\n        animation: crtv-flicker 0.15s infinite;\n        content: ' ';\n        display: block;\n        position: absolute;\n        top: 0;\n        left: 0;\n        bottom: 0;\n        right: 0;\n        background: rgba(18, 16, 16, 0.1);\n        opacity: 0;\n        z-index: 2;\n        pointer-events: none;\n      }\n\n      img,svg {\n        width: 320px;\n        animation: textShadow 1.6s infinite;\n      }\n    }\n    h2 {\n      color: $whiteish;\n    }\n    p {\n      color: $whiteish;\n      font-size: 18px;\n    }\n    a {\n      font-size: 16px;\n      font-weight: 500;\n\n      &::after {\n        font-family: Ionicons;\n        content: '\\f287';\n        display: inline-block;\n        margin-left: 10px;\n        position: relative;\n        top: 2px;\n      }\n    }\n  }\n}\n\n@keyframes crtv-flicker {\n  0% {\n    opacity: 0.27861;\n  }\n  5% {\n    opacity: 0.34769;\n  }\n  10% {\n    opacity: 0.23604;\n  }\n  15% {\n    opacity: 0.90626;\n  }\n  20% {\n    opacity: 0.18128;\n  }\n  25% {\n    opacity: 0.83891;\n  }\n  30% {\n    opacity: 0.65583;\n  }\n  35% {\n    opacity: 0.67807;\n  }\n  40% {\n    opacity: 0.26559;\n  }\n  45% {\n    opacity: 0.84693;\n  }\n  50% {\n    opacity: 0.96019;\n  }\n  55% {\n    opacity: 0.08594;\n  }\n  60% {\n    opacity: 0.20313;\n  }\n  65% {\n    opacity: 0.71988;\n  }\n  70% {\n    opacity: 0.53455;\n  }\n  75% {\n    opacity: 0.37288;\n  }\n  80% {\n    opacity: 0.71428;\n  }\n  85% {\n    opacity: 0.70419;\n  }\n  90% {\n    opacity: 0.7003;\n  }\n  95% {\n    opacity: 0.36108;\n  }\n  100% {\n    opacity: 0.24387;\n  }\n}\n@keyframes textShadow {\n  0% {\n    filter: drop-shadow(0.4389924193300864px 0 1px rgba(0, 30, 255, 0.5))\n            drop-shadow(-0.4389924193300864px 0 1px rgba(255, 0, 80, 0.3));\n  }\n  5% {\n    filter: drop-shadow(2.7928974010788217px 0 1px rgba(0, 30, 255, 0.5))\n      drop-shadow(-2.7928974010788217px 0 1px rgba(255, 0, 80, 0.3));\n  }\n  10% {\n    filter: drop-shadow(0.02956275843481219px 0 1px rgba(0, 30, 255, 0.5))\n      drop-shadow(-0.02956275843481219px 0 1px rgba(255, 0, 80, 0.3));\n  }\n  15% {\n    filter: drop-shadow(0.40218538552878136px 0 1px rgba(0, 30, 255, 0.5))\n      drop-shadow(-0.40218538552878136px 0 1px rgba(255, 0, 80, 0.3));\n  }\n  20% {\n    filter: drop-shadow(3.4794037899852017px 0 1px rgba(0, 30, 255, 0.5))\n      drop-shadow(-3.4794037899852017px 0 1px rgba(255, 0, 80, 0.3));\n  }\n  25% {\n    filter: drop-shadow(1.6125630401149584px 0 1px rgba(0, 30, 255, 0.5))\n      drop-shadow(-1.6125630401149584px 0 1px rgba(255, 0, 80, 0.3));\n  }\n  30% {\n    filter: drop-shadow(0.7015590085143956px 0 1px rgba(0, 30, 255, 0.5))\n      drop-shadow(-0.7015590085143956px 0 1px rgba(255, 0, 80, 0.3));\n  }\n  35% {\n    filter: drop-shadow(3.896914047650351px 0 1px rgba(0, 30, 255, 0.5))\n      drop-shadow(-3.896914047650351px 0 1px rgba(255, 0, 80, 0.3));\n  }\n  40% {\n    filter: drop-shadow(3.870905614848819px 0 1px rgba(0, 30, 255, 0.5))\n      drop-shadow(-3.870905614848819px 0 1px rgba(255, 0, 80, 0.3));\n  }\n  45% {\n    filter: drop-shadow(2.231056963361899px 0 1px rgba(0, 30, 255, 0.5))\n      drop-shadow(-2.231056963361899px 0 1px rgba(255, 0, 80, 0.3));\n  }\n  50% {\n    filter: drop-shadow(0.08084290417898504px 0 1px rgba(0, 30, 255, 0.5))\n      drop-shadow(-0.08084290417898504px 0 1px rgba(255, 0, 80, 0.3));\n  }\n  55% {\n    filter: drop-shadow(2.3758461067427543px 0 1px rgba(0, 30, 255, 0.5))\n      drop-shadow(-2.3758461067427543px 0 1px rgba(255, 0, 80, 0.3));\n  }\n  60% {\n    filter: drop-shadow(2.202193051050636px 0 1px rgba(0, 30, 255, 0.5))\n      drop-shadow(-2.202193051050636px 0 1px rgba(255, 0, 80, 0.3));\n  }\n  65% {\n    filter: drop-shadow(2.8638780614874975px 0 1px rgba(0, 30, 255, 0.5))\n       drop-shadow(-2.8638780614874975px 0 1px rgba(255, 0, 80, 0.3));\n  }\n  70% {\n    filter: drop-shadow(0.48874025155497314px 0 1px rgba(0, 30, 255, 0.5))\n       drop-shadow(-0.48874025155497314px 0 1px rgba(255, 0, 80, 0.3));\n  }\n  75% {\n    filter: drop-shadow(1.8948491305757957px 0 1px rgba(0, 30, 255, 0.5))\n      drop-shadow(-1.8948491305757957px 0 1px rgba(255, 0, 80, 0.3));\n  }\n  80% {\n    filter: drop-shadow(0.0833037308038857px 0 1px rgba(0, 30, 255, 0.5))\n      drop-shadow(-0.0833037308038857px 0 1px rgba(255, 0, 80, 0.3));\n  }\n  85% {\n    filter: drop-shadow(0.09769827255241735px 0 1px rgba(0, 30, 255, 0.5))\n      drop-shadow(-0.09769827255241735px 0 1px rgba(255, 0, 80, 0.3));\n  }\n  90% {\n    filter: drop-shadow(3.443339761481782px 0 1px rgba(0, 30, 255, 0.5))\n      drop-shadow(-3.443339761481782px 0 1px rgba(255, 0, 80, 0.3));\n  }\n  95% {\n    filter: drop-shadow(2.1841838852799786px 0 1px rgba(0, 30, 255, 0.5))\n      drop-shadow(-2.1841838852799786px 0 1px rgba(255, 0, 80, 0.3));\n  }\n  100% {\n    filter: drop-shadow(2.6208764473832513px 0 1px rgba(0, 30, 255, 0.5))\n      drop-shadow(-2.6208764473832513px 0 1px rgba(255, 0, 80, 0.3));\n  }\n}\n@keyframes flicker {\n  0%,\n  20%,\n  100%,\n  26%,\n  38%,\n  40%,\n  44%,\n  46%,\n  48%,\n  54% {\n    opacity: 1;\n  }\n  21%,\n  39%,\n  45%,\n  47%,\n  53% {\n    opacity: 0;\n  }\n}\n"
  },
  {
    "path": "assets/scss/pages/_contributors.scss",
    "content": "#page-contributors {\n  main {\n    color: #161a1f;\n    font-weight: 600;\n  }\n\n  .btn {\n    font-size: 16px;\n    font-weight: 700;\n    padding: 12px 20px;\n\n    &--secondary {\n      background-color: #102242;\n    }\n  }\n\n  .cta {\n    background-color: transparent;\n    color: inherit;\n    padding-bottom: 60px;\n    padding-top: 120px;\n    text-align: center;\n\n    @media (max-width: $screen-sm) {\n      padding-top: 180px;\n    }\n  }\n\n  .cta h1 {\n    color: #73abff;\n    font-size: 48px;\n    font-weight: 700;\n    letter-spacing: -0.02em;\n  }\n\n  .cta h1 span {\n    color: #3880ff;\n  }\n\n  .cta .typed-cursor {\n    color: rgba(0, 0, 0, 0);\n    display: inline-block;\n    width: 4px;\n    height: 56px;\n    position: relative;\n    top: -4px;\n    background: #bfd6ff;\n    opacity: 1;\n    animation: typedjsBlink 1s infinite;\n  }\n\n  @keyframes typedjsBlink {\n    0% {\n      opacity: 1;\n    }\n    50% {\n      opacity: 0;\n    }\n    100% {\n      opacity: 1;\n    }\n  }\n\n  .cta p {\n    color: #505863;\n    font-size: 18px;\n    line-height: 30px;\n    letter-spacing: -0.03em;\n    margin: 0.75em auto 1.25em;\n    max-width: 570px;\n  }\n\n  .cta .container {\n    padding-top: 50px;\n    padding-bottom: 50px;\n\n    @media (min-width: $screen-sm) {\n      padding-top: 100px;\n      padding-bottom: 100px;\n    }\n  }\n\n  .section-header {\n    color: #2f3744;\n    font-size: 20px;\n    letter-spacing: -0.02em;\n    margin-bottom: 4em;\n    margin-top: 4em;\n    max-width: 32em;\n  }\n\n  .section-header h2 {\n    color: #24282e;\n    font-size: 1.8em;\n    font-weight: 700;\n    margin-bottom: 0.65em;\n  }\n\n  .oss,\n  .pro {\n    .section-header h2 span {\n      border-bottom: solid 4px #24282e;\n    }\n  }\n\n  .feature {\n    display: flex;\n    font-size: 16px;\n    font-weight: 600;\n    letter-spacing: -0.01em;\n  }\n\n  .feature__icon {\n    background-image: url(\"/img/contributors/contributors-feature-icons.png\");\n    background-position: top;\n    background-repeat: no-repeat;\n    background-size: 100%;\n    display: block;\n    flex: 0 0 48px;\n    height: 48px;\n    margin-right: 2em;\n    width: 48px;\n\n    &.talk {\n      background-position-y: 0;\n    }\n    &.story {\n      background-position-y: -48px * 1;\n    }\n    &.blog {\n      background-position-y: -48px * 2;\n    }\n  }\n\n  .feature__text strong {\n    display: block;\n    font-size: 1.25em;\n    margin-bottom: 0.75em;\n  }\n\n  .feature__text p {\n    color: #788497;\n    line-height: 1.65;\n  }\n\n  .feature-list {\n    list-style: none;\n    margin: 0 0 4em;\n    padding: 0;\n  }\n\n  .feature-list > li {\n    margin-bottom: 2em;\n  }\n\n  @media (min-width: $screen-sm) {\n    .feature-list {\n      display: flex;\n      margin: 0;\n    }\n\n    .feature-list > li {\n      flex: 1;\n      padding-right: 3em;\n      margin-bottom: 4em;\n    }\n\n    .feature {\n      flex-direction: column;\n    }\n\n    .feature__icon {\n      margin-bottom: 1.25em;\n    }\n  }\n\n  .topics {\n    position: relative;\n    min-height: 660px;\n    background-color: #242355;\n    color: #fff;\n    overflow: hidden;\n\n    &:before,\n    &:after {\n      display: block;\n      content: \"\";\n      width: 100%;\n      height: 100px;\n      position: absolute;\n      left: 0;\n      z-index: 2;\n      opacity: 0.4;\n    }\n\n    &:before {\n      top: 0;\n      background-image: linear-gradient(\n        -180deg,\n        rgba(#242355, 1) 0%,\n        rgba(#242355, 0) 100%\n      );\n    }\n    &:after {\n      bottom: 0;\n      background-image: linear-gradient(\n        -180deg,\n        rgba(#242355, 0) 0%,\n        rgba(#242355, 1) 100%\n      );\n    }\n\n    hgroup {\n      max-width: 440px;\n      margin-top: 72px;\n      position: relative;\n      z-index: 3;\n      text-align: center;\n      margin-left: auto;\n      margin-right: auto;\n    }\n\n    h1 {\n      font-size: 36px;\n      color: #ffffff;\n      letter-spacing: -1.2px;\n      line-height: 48px;\n      font-weight: 700;\n    }\n\n    p {\n      font-size: 18px;\n      color: #bfc5e5;\n      letter-spacing: -0.62px;\n      line-height: 30px;\n    }\n\n    &.image-fallback:after {\n      content: \"\";\n      display: block;\n      width: 388px;\n      height: 658px;\n      background-image: url(\"../img/contributors/contributors-topics.png\");\n      background-repeat: no-repeat;\n      background-size: 388px 658px;\n      position: absolute;\n      top: 0;\n      left: 50%;\n      transform: translateX(-50%);\n      opacity: 0.5;\n      z-index: 1;\n    }\n\n    @media (max-width: $screen-sm) {\n      &:before {\n        height: 400px;\n        opacity: 1;\n      }\n      &:after {\n        opacity: 0.3;\n      }\n    }\n    @media (min-width: $screen-sm) {\n      &.image-fallback:after {\n        transform: translateX(10%);\n        opacity: 1;\n      }\n      hgroup {\n        text-align: left;\n        margin-left: 0;\n        margin-right: 0;\n        margin-top: 136px;\n      }\n    }\n  }\n\n  .topics__animation {\n    position: absolute;\n    top: 0;\n    right: 50%;\n    transform: translateX(90%);\n    z-index: 1;\n    overflow: hidden;\n    .text {\n      font-size: 18px;\n      letter-spacing: -0.03em;\n      fill: #fff;\n    }\n\n    @media (max-width: $screen-sm) {\n      opacity: 0.8;\n      transform: translateX(50%);\n    }\n  }\n\n  .quotes {\n    color: #ffffff;\n    display: flex;\n    font-size: 20px;\n    font-weight: 700;\n    letter-spacing: -0.01em;\n\n    @media (max-width: $screen-sm) {\n      flex-direction: column;\n    }\n  }\n\n  .quotes__content {\n    max-width: 490px;\n    position: relative;\n  }\n\n  .quotes__quote {\n    display: flex;\n    flex: 1;\n    padding: 80px;\n    color: #24282e;\n\n    @media (max-width: $screen-xs) {\n      padding: 40px;\n    }\n\n    &:first-child {\n      @media (min-width: $screen-sm) {\n        justify-content: flex-end;\n      }\n    }\n\n    &.morony {\n      background-color: #e9f2ff;\n    }\n\n    &.verganara {\n      background-color: #d0e2fd;\n    }\n  }\n\n  .quotes__avatar {\n    background-image: url(\"/img/contributors/contributors-testimonial-avatars.png\");\n    background-position: center;\n    background-size: 100%;\n    background-repeat: no-repeat;\n    display: block;\n    width: 62px;\n    height: 62px;\n    margin-bottom: 1em;\n    border-radius: 62px;\n    border: 3px solid #fff;\n    box-shadow: 0 2px 4px 0 rgba(0, 0, 0, 0.1);\n\n    &.morony {\n      background-position-y: 0;\n    }\n\n    &.verganara {\n      background-position-y: -56px;\n    }\n  }\n\n  .quotes blockquote {\n    border: none;\n    font-size: inherit;\n    line-height: 1.5;\n    margin: 0;\n    padding: 0;\n  }\n  .quotes a {\n    color: initial;\n    text-underline: none;\n  }\n  .quotes a blockquote > small {\n    color: inherit;\n    font-weight: 600;\n    margin-top: 2em;\n    text-align: right;\n\n    > span {\n      padding-left: 0.5em;\n    }\n\n    &:before {\n      display: none;\n    }\n  }\n\n  .morony a blockquote > small > span {\n    color: #93a8c6;\n  }\n\n  .verganara a blockquote > small > span {\n    color: #5c749b;\n  }\n\n  .apply {\n    padding-top: 100px;\n    padding-bottom: 100px;\n\n    .container {\n      display: flex;\n    }\n\n    @media (max-width: $screen-md) {\n      .container {\n        flex-direction: column;\n      }\n    }\n    @media (max-width: $screen-sm) {\n      padding-top: 50px;\n      padding-bottom: 50px;\n    }\n  }\n\n  .apply__form {\n    flex: 0 0 685px;\n    padding: 46px;\n    background: #ffffff;\n    box-shadow: 0 2px 8px 0 rgba(0, 14, 39, 0.12),\n      0 10px 20px 0 rgba(0, 14, 39, 0.12);\n    border-radius: 15px;\n\n    h2 {\n      margin-top: 0;\n      font-weight: 700;\n      font-size: 36px;\n      letter-spacing: -1.2px;\n      line-height: 48px;\n      color: #161a1f;\n    }\n\n    .hbspt-form {\n      margin: 44px 0 0;\n    }\n\n    @media (max-width: $screen-lg) {\n      flex: 0 0 580px;\n    }\n  }\n\n  .apply__benefits {\n    padding-left: 50px;\n    margin-top: 62px;\n\n    h4 {\n      font-size: 22px;\n      font-weight: 700;\n      letter-spacing: -0.03em;\n      color: #161a1f;\n      margin: 0 0 36px;\n    }\n  }\n\n  .benefit-list {\n    margin: 0;\n    padding: 0;\n    list-style-type: none;\n  }\n\n  .benefit-list__item {\n    padding-left: 42px;\n    margin-top: 28px;\n    background: url(/img/framework/checkmark-icon.png) no-repeat 0 0;\n    background-size: 24px;\n\n    h5 {\n      font-size: 18px;\n      font-weight: 600;\n      color: #161a1f;\n      line-height: 22px;\n      margin: 0 0 5px;\n    }\n\n    p {\n      font-size: 14px;\n      color: #747f92;\n      letter-spacing: -0.25px;\n      line-height: 24px;\n      max-width: 280px;\n    }\n  }\n\n  @media (max-width: $screen-sm) {\n    .apply__form {\n      flex: 0 0 auto;\n      padding: 26px;\n\n      h2 {\n        text-align: center;\n        font-size: 30px;\n        margin: 16px 0;\n      }\n      .hbspt-form {\n        // margin: 24px 0 0;\n      }\n    }\n  }\n\n  @media (max-width: $screen-md) {\n    .apply__benefits {\n      padding-left: 0;\n    }\n    .benefit-list__item p {\n      max-width: none;\n    }\n  }\n}\n"
  },
  {
    "path": "assets/scss/pages/_demo.scss",
    "content": "#page-demo .demo-cta,\n#page-strategy-session .demo-cta {\n\n  @media (max-width: $screen-xs-max) {\n    margin-top: 0;\n  }\n\n  > .container {\n    align-items: center;\n    display: flex;\n    padding-bottom: 104px;\n    padding-top: 53px;\n\n    @media (max-width: $screen-xs-max) {\n      flex-direction: column;\n      padding-top: 23px;\n      text-align: center;\n    }\n  }\n\n  hgroup {\n    max-width: none;\n    padding-bottom: 0;\n    padding-top: 0;\n\n    @media (max-width: $screen-xs-max) {\n      max-width: 480px;\n    }\n  }\n\n  hgroup p {\n    margin-bottom: 0;\n\n    @media (max-width: $screen-xs-max) {\n      font-size: 15px;\n    }\n  }\n\n  h1 {\n    font-weight: 600;\n    margin-bottom: 8px;\n    margin-top: 0;\n\n    @media (min-width: $screen-md-min) {\n      font-size: 32px;\n    }\n  }\n\n  &__icon {\n    display: block;\n    margin-right: 20px;\n    width: 64px;\n\n    @media (max-width: $screen-xs-max) {\n      margin-right: 0;\n      margin-bottom: 2em;\n    }\n  }\n}\n\n#page-demo .demo-form,\n#page-strategy-session .demo-form {\n\n  display: flex;\n  overflow: visible;\n\n  &::before,\n  &::after {\n    display: none;\n  }\n\n  .hbspt-form {\n    @include box;\n    margin-bottom: 50px;\n    margin-top: -40px;\n    // min-width: 630px;\n    padding: 64px 64px 24px;\n\n    form {\n      max-width: 100%;\n      padding: 0;\n\n      h3 {\n        width: 100%;\n      }\n\n      &:before {\n        display: none; // Bootstrap clearfix messes up flex alignment\n      }\n    }\n\n    .hs-form-required {\n      position: absolute;\n      pointer-events: none;\n    }\n\n    button {\n      float: none;\n      margin-top: 0;\n    }\n\n    .hs-input {\n      width: 100%;\n      max-width: 100%;\n      box-sizing: border-box;\n    }\n\n    .form-columns-1 .input {\n      margin-right: 0;\n    }\n  }\n\n  &__aside {\n    // max-width: 33%;\n    padding: 4em;\n    margin-left: auto;\n\n    img {\n      display: block;\n      width: 100%;\n    }\n\n    ul {\n      color: #727a87;\n      font-size: 1.125em;\n      list-style: none;\n      margin: 0;\n      padding: 0;\n\n      > li {\n        margin-bottom: 1.5em;\n        padding-left: 1.5em;\n        position: relative;\n\n        &:before {\n          color: $blue;\n          content: '\\f2ba';\n          font-family: 'Ionicons';\n          left: 0;\n          position: absolute;\n          top: 0;\n        }\n      }\n    }\n\n    > p {\n      color: #707c88;\n      font-size: 0.875em;\n      font-weight: 700;\n      letter-spacing: 0.075em;\n      line-height: 2;\n      margin-bottom: 3em;\n      text-transform: uppercase;\n    }\n\n    @media (max-width: $screen-md-max) {\n      padding-right: 0;\n    }\n\n    @media (max-width: $screen-sm-max) {\n      display: none;\n    }\n  }\n\n  // textarea,\n  // .form-control,\n  // .select-wrapper {\n  //   margin-bottom: 12px;\n  //   margin-right: 0;\n  // }\n\n  // form > .form-control {\n  //   width: 49%;\n\n  //   @media (max-width: 520px) {\n  //     width: 100%;\n  //   }\n  // }\n}"
  },
  {
    "path": "assets/scss/pages/_sales.scss",
    "content": "#page-sales {\n  .hero {\n    padding-top: 60px;\n    padding-bottom: 0;\n    max-width: 760px;\n    margin-left: auto;\n    margin-right: auto;\n    text-align: center;\n\n    h1 {\n      font-size: 36px;\n      font-weight: 700;\n      letter-spacing: -0.03em;\n      margin-bottom: 8px;\n    }\n\n    p {\n      font-size: 20px;\n      font-weight: 500;\n    }\n  }\n\n  .hubspot-override {\n    max-width: 860px;\n    margin-top: 40px;\n    margin-bottom: 120px;\n    margin-left: auto;\n    margin-right: auto;\n\n    @media (max-width: $screen-sm) {\n      margin-bottom: 60px;\n    }\n  }\n}\n"
  },
  {
    "path": "assets/scss/pages/_start.scss",
    "content": "#page-start {\n  .grecaptcha-badge {\n    display: flex;\n    justify-content: flex-end;\n    overflow: hidden;\n    left: 0px !important;\n    right: initial !important;\n    width: 70px !important;\n    margin: 0 auto;\n    box-shadow: 0 0 4px #ddd;\n    transition: linear 100ms width;\n  }\n  .grecaptcha-badge:hover {\n    width: 256px !important;\n  }\n\n  @media screen and (max-width: 480px) {\n    .grecaptcha-badge {\n      z-index: -1;\n      visibility: collapse;\n    }\n  }\n\n  .form {\n    h1 {\n      margin-top: 0;\n    }\n  \n    h2 {\n      margin-top: 10px;\n      margin-bottom: 42px;\n    }\n  \n    .checkbox-label {\n      color: #727A87;\n      font-size: 11px;\n      font-weight: 600;\n      margin-left: 4px;\n    }\n  \n    .btn {\n      display: block;\n      width: 100%;\n    }\n  \n    .text-link {\n      text-decoration: underline;\n      margin-left: 8px;\n    }\n  \n    @media (max-width: $screen-xs-min) {\n      padding: 36px 28px;\n    }\n    @media (max-width: 480px) {\n      padding: 0;\n    }\n  }\n}"
  },
  {
    "path": "assets/scss/pages/_startups.scss",
    "content": "#page-startups {\n  img {\n    height: auto;\n  }\n\n  main {\n    color: #161a1f;\n    font-weight: 600;\n  }\n\n  .btn {\n    font-size: 16px;\n    font-weight: 700;\n    padding: 12px 20px;\n\n    &--secondary {\n      background-color: #102242;\n    }\n  }\n\n  .cta {\n    background-color: transparent;\n    color: inherit;\n    padding-bottom: 60px;\n    padding-top: 120px;\n    text-align: center;\n\n    @media (max-width: $screen-sm) {\n      padding-top: 140px;\n    }\n  }\n\n  .cta h1 {\n    font-size: 48px;\n    font-weight: 700;\n    letter-spacing: -0.02em;\n  }\n\n  .cta p {\n    color: #2f3744;\n    font-size: 18px;\n    margin: 1em auto 1.5em;\n    max-width: 720px;\n  }\n\n  .video {\n    align-items: center;\n    display: flex;\n    justify-content: center;\n    padding: 1em 1em 2em;\n    position: relative;\n    z-index: 1;\n  }\n\n  .video-player {\n    max-width: 900px;\n    width: 100%;\n    position: relative;\n    z-index: 2;\n\n    &:hover {\n      cursor: pointer;\n    }\n\n    &:not(.is-playing):hover .video-player-frame {\n      transform: scale(0.99);\n    }\n\n    &:not(.is-playing):hover .video-player-button {\n      transform: translate(-50%, -50%) scale(1.1);\n    }\n\n    &.is-ready .video-player-button {\n      display: block;\n    }\n\n    &.is-playing .video-player-button {\n      display: none;\n    }\n  }\n\n  .video-player-button {\n    display: none;\n    left: 50%;\n    position: absolute;\n    top: 50%;\n    transform: translate(-50%, -50%) scale(1);\n    transition: transform 400ms cubic-bezier(0.175, 0.885, 0.32, 1.275);\n    width: 120px;\n    z-index: 1;\n  }\n\n  .video-player-frame {\n    background-image: url(\"/img/startups/startups-video-poster.jpg\");\n    background-position: center center;\n    background-repeat: no-repeat;\n    background-size: contain;\n    border-radius: 20px;\n    box-shadow: 0 8px 16px rgba(0, 14, 41, 0.08),\n      0 30px 60px rgba(0, 11, 34, 0.15);\n    height: 0;\n    overflow: hidden;\n    padding-bottom: 56.25%;\n    position: relative;\n    transform: scale(1);\n    transition: transform 400ms cubic-bezier(0.19, 1, 0.22, 1);\n\n    > iframe {\n      height: 100%;\n      left: 0;\n      position: absolute;\n      top: 0;\n      width: 100%;\n    }\n  }\n\n  .video-footer {\n    align-items: center;\n    display: flex;\n    max-width: 900px;\n    margin: 0 auto 60px;\n    padding: 1em;\n    position: relative;\n\n    &:before {\n      background-color: #e8ebf1;\n      content: \"\";\n      height: 50%;\n      left: 50%;\n      position: absolute;\n      top: 25%;\n      width: 1px;\n    }\n\n    @media (max-width: $screen-sm) {\n      flex-direction: column;\n      margin-bottom: 0;\n      text-align: center;\n\n      &:before {\n        display: none;\n      }\n    }\n  }\n\n  .video-footer > * {\n    flex: 1;\n\n    &:first-child {\n      margin-right: 3em;\n    }\n\n    &:last-child {\n      margin-left: 3em;\n    }\n\n    @media (max-width: $screen-sm) {\n      &:first-child,\n      &:last-child {\n        margin-left: 0;\n        margin-right: 0;\n      }\n    }\n  }\n\n  .video-footer > p {\n    font-size: 20px;\n    font-weight: 700;\n    letter-spacing: -0.02em;\n    line-height: 1.5;\n  }\n\n  .video-footer > blockquote {\n    border: none;\n    font-size: 14px;\n    margin: 0;\n    padding: 0;\n\n    @media (max-width: $screen-sm) {\n      margin: 1em 0 0 0;\n    }\n  }\n\n  .video-footer > blockquote small {\n    color: #788497;\n    display: block;\n    margin-top: 1.5em;\n    text-align: right;\n\n    &:before {\n      display: none;\n    }\n\n    > span {\n      margin-left: 0.5em;\n      opacity: 0.5;\n    }\n\n    @media (max-width: $screen-sm) {\n      text-align: center;\n    }\n  }\n\n  .section-header {\n    color: #2f3744;\n    font-size: 20px;\n    letter-spacing: -0.02em;\n    margin-bottom: 4em;\n    margin-top: 4em;\n    max-width: 32em;\n  }\n\n  .section-header h2 {\n    color: #24282e;\n    font-size: 1.8em;\n    font-weight: 700;\n    margin-bottom: 0.65em;\n  }\n\n  .oss,\n  .pro {\n    .section-header h2 span {\n      border-bottom: solid 4px #24282e;\n    }\n  }\n\n  .feature {\n    display: flex;\n    font-size: 16px;\n    font-weight: 600;\n    letter-spacing: -0.01em;\n  }\n\n  .feature__icon {\n    background-image: url(\"/img/startups/startups-feature-icons.png\");\n    background-position: top;\n    background-repeat: no-repeat;\n    background-size: 100%;\n    display: block;\n    flex: 0 0 48px;\n    height: 48px;\n    margin-right: 2em;\n    width: 48px;\n\n    &.dazzle {\n      background-position-y: 0;\n    }\n    &.speed {\n      background-position-y: -48px * 1;\n    }\n    &.takeoff {\n      background-position-y: -48px * 2;\n    }\n    &.platforms {\n      background-position-y: -48px * 3;\n    }\n    &.native {\n      background-position-y: -48px * 4;\n    }\n    &.worldwide {\n      background-position-y: -48px * 5;\n    }\n    &.deploy {\n      background-position-y: -48px * 6;\n    }\n    &.compile {\n      background-position-y: -48px * 7;\n    }\n    &.monitor {\n      background-position-y: -48px * 8;\n    }\n  }\n\n  .feature__text strong {\n    display: block;\n    font-size: 1.25em;\n    margin-bottom: 0.75em;\n  }\n\n  .feature__text p {\n    color: #788497;\n    line-height: 1.65;\n  }\n\n  .feature-list {\n    list-style: none;\n    margin: 0;\n    padding: 0;\n  }\n\n  .feature-list > li:not(:last-child) {\n    margin-bottom: 2em;\n  }\n\n  .app-showcase {\n    align-items: center;\n    display: flex;\n    flex-direction: column;\n  }\n\n  .app-showcase__image {\n    width: 100%;\n  }\n\n  .app-showcase__icon {\n    width: 93px;\n    margin-right: 1em;\n  }\n\n  .app-showcase__footer {\n    align-items: center;\n    display: inline-flex;\n    font-size: 16px;\n    font-weight: 700;\n    letter-spacing: -0.01em;\n    padding: 1em;\n  }\n\n  .app-showcase__footer blockquote {\n    border-left: none;\n    margin-bottom: 0.75em;\n    padding: 0;\n  }\n\n  .app-showcase__footer small {\n    display: block;\n    font-weight: 600;\n    text-align: right;\n\n    > span {\n      opacity: 0.5;\n    }\n  }\n\n  .key-benefits {\n    @media (min-width: $screen-sm) {\n      .feature-list {\n        display: flex;\n      }\n\n      .feature-list > li {\n        flex: 1;\n        padding-right: 3em;\n      }\n\n      .feature {\n        flex-direction: column;\n      }\n\n      .feature__icon {\n        margin-bottom: 1.25em;\n      }\n    }\n  }\n\n  .oss,\n  .pro {\n    padding-bottom: 100px;\n\n    .container {\n      display: flex;\n      align-items: center;\n\n      @media (max-width: $screen-sm) {\n        flex-direction: column;\n      }\n    }\n\n    .app-showcase {\n      margin: auto 10%;\n      max-width: 860px;\n      padding-top: 100px;\n    }\n  }\n\n  .oss .app-showcase {\n    @media (min-width: $screen-sm) {\n      margin-left: 0;\n      margin-right: 80px;\n    }\n  }\n\n  .pro .app-showcase {\n    @media (min-width: $screen-sm) {\n      order: 1;\n      margin-left: 80px;\n      margin-right: 0;\n    }\n  }\n\n  .pro .feature__text strong {\n    display: flex;\n    flex-direction: column;\n\n    @media (min-width: $screen-lg) {\n      align-items: center;\n      flex-direction: row;\n      justify-content: space-between;\n    }\n  }\n\n  .pro .feature__text strong a {\n    font-size: 0.55em;\n    letter-spacing: 0.05em;\n    margin-top: 0.5em;\n    text-transform: uppercase;\n\n    @media (min-width: $screen-lg) {\n      margin-top: 0;\n    }\n  }\n\n  section.resources {\n    padding-bottom: 100px;\n  }\n\n  .resource-card {\n    background-color: #383d3f;\n    border-radius: 16px;\n    box-shadow: 0 8px 16px rgba(0, 0, 0, 0.1), 0 2px 4px rgba(0, 0, 0, 0.08);\n    color: #ffffff;\n    display: flex;\n    flex-direction: column;\n    font-size: 20px;\n    font-weight: 700;\n    min-height: 255px;\n    padding: 26px;\n    transform: translateY(0);\n    transition: box-shadow 250ms ease, transform 200ms ease;\n    width: 234px;\n\n    &:focus {\n      text-decoration: none;\n    }\n\n    &:hover {\n      box-shadow: 0 12px 24px rgba(0, 0, 0, 0.1);\n      transform: translateY(-1px);\n    }\n  }\n\n  .resource-card__eyebrow {\n    color: rgba(255, 255, 255, 0.5);\n    font-size: 0.5em;\n    letter-spacing: 0.15em;\n    text-transform: uppercase;\n  }\n\n  .resource-card__title {\n    letter-spacing: -0.015em;\n    line-height: 1.3;\n    margin: 0.5em 0;\n  }\n\n  .resource-card__cta {\n    font-size: 0.7em;\n    letter-spacing: 0.15em;\n    margin-top: auto;\n    text-transform: uppercase;\n  }\n\n  .resource-card-list {\n    display: flex;\n    flex-wrap: wrap;\n\n    .resource-card {\n      margin: 0 1.5em 1.5em 0;\n\n      &:nth-child(1) {\n        background-color: #ff6644;\n      }\n      &:nth-child(2) {\n        background-color: #033f80;\n      }\n      &:nth-child(3) {\n        background-color: #ffbf69;\n      }\n      &:nth-child(4) {\n        background-color: #846ac2;\n      }\n      &:nth-child(5) {\n        background-color: #0e8efb;\n      }\n      &:nth-child(6) {\n        background-color: #003953;\n      }\n      &:nth-child(7) {\n        background-color: #44bcc0;\n      }\n    }\n\n    @media (max-width: $screen-sm) {\n      justify-content: center;\n\n      .resource-card {\n        margin: 0 0.5em 1em;\n      }\n    }\n  }\n\n  .quotes {\n    color: #ffffff;\n    display: flex;\n    font-size: 20px;\n    font-weight: 700;\n    letter-spacing: -0.01em;\n\n    @media (max-width: $screen-sm) {\n      flex-direction: column;\n    }\n  }\n\n  .quotes__content {\n    max-width: 490px;\n    position: relative;\n  }\n\n  .quotes__quote {\n    display: flex;\n    flex: 1;\n    padding: 80px;\n\n    @media (max-width: $screen-xs) {\n      padding: 40px;\n    }\n\n    &:first-child {\n      @media (min-width: $screen-sm) {\n        justify-content: flex-end;\n      }\n    }\n\n    &.joule {\n      background-color: #ff674d;\n    }\n\n    &.comichaus {\n      background-color: #e8ebf1;\n      color: #24282e;\n    }\n\n    &.pacifica {\n      background-color: #4edab1;\n    }\n\n    &.natural-cycles {\n      background-color: #7545f0;\n    }\n  }\n\n  .quotes__logo {\n    background-image: url(\"/img/startups/startups-quote-logos.png\");\n    background-position: top;\n    background-size: 100%;\n    background-repeat: no-repeat;\n    display: block;\n    height: 40px;\n    margin-bottom: 2em;\n    width: 160px;\n\n    &.joule {\n      background-position-y: 0;\n    }\n\n    &.comichaus {\n      background-position-y: -40px;\n    }\n\n    &.pacifica {\n      background-position-y: -80px;\n    }\n\n    &.natural-cycles {\n      background-position-y: -120px;\n    }\n  }\n\n  .quotes blockquote {\n    border: none;\n    font-size: inherit;\n    line-height: 1.5;\n    margin: 0;\n    padding: 0;\n  }\n\n  .quotes blockquote > small {\n    color: inherit;\n    font-weight: 600;\n    margin-top: 2em;\n    text-align: right;\n\n    > span {\n      opacity: 0.5;\n      padding-left: 0.5em;\n    }\n\n    &:before {\n      display: none;\n    }\n  }\n\n  .get-started {\n    background-image: linear-gradient(90deg, #3880ff, #67c0ff);\n    padding: 80px 0;\n  }\n\n  .get-started .container {\n    align-items: center;\n    display: flex;\n    justify-content: space-between;\n\n    &:after,\n    &:before {\n      display: none;\n    }\n\n    @media (max-width: $screen-lg) {\n      flex-direction: column;\n      text-align: center;\n    }\n  }\n\n  .get-started .btn {\n    margin: 0.35em;\n  }\n\n  .get-started .btn--secondary {\n    background-color: #0078ff;\n  }\n\n  .get-started h2,\n  .get-started p {\n    font-weight: 600;\n    letter-spacing: -0.02em;\n  }\n\n  .get-started h2 {\n    color: #ffffff;\n    font-size: 28px;\n  }\n\n  .get-started p {\n    color: #003e82;\n    font-size: 20px;\n\n    @media (max-width: $screen-lg) {\n      margin-bottom: 1em;\n    }\n  }\n}\n"
  },
  {
    "path": "assets/scss/pages/_what-is-ionic.scss",
    "content": "#page-what-is-ionic {\n  .banner,\n  main {\n    font-family: $font-family-inter;\n  }\n\n  .banner {\n    max-width: 800px;\n    padding-top: 72px;\n    padding-bottom: 150px;\n\n    h1 {\n      padding-top: 80px;\n      font-size: 40px;\n      line-height: 52px;\n      letter-spacing: -0.008em;\n      font-weight: 700;\n      background: url(\"/img/what-is-ionic/ionic-icon.png\") no-repeat 50% 0;\n      background-size: 48px;\n      color: #0f1622;\n    }\n  }\n\n  main {\n    a {\n      text-decoration: none;\n      transition: 0.2s opacity;\n\n      &:hover {\n        color: $blue;\n        opacity: 0.8;\n      }\n    }\n\n    section {\n      padding-top: 200px;\n      padding-bottom: 200px;\n    }\n\n    .container {\n      display: flex;\n      align-items: center;\n      max-width: 980px;\n\n      &::before,\n      &::after {\n        display: none;\n      }\n    }\n\n    .graphic {\n      display: block;\n    }\n\n    .left .graphic {\n      margin-left: 104px;\n    }\n    .right .graphic {\n      margin-right: 104px;\n    }\n\n    .content {\n      flex: 1;\n    }\n\n    .center .container {\n      flex-direction: column;\n      text-align: center;\n      max-width: 680px;\n    }\n\n    h2 {\n      font-size: 35px;\n      line-height: 47px;\n      font-weight: 700;\n      letter-spacing: -0.008em;\n      margin-bottom: 20px;\n      margin-top: 0;\n      color: #0f1622;\n    }\n\n    p {\n      font-size: 20px;\n      line-height: 36px;\n      letter-spacing: -0.02em;\n      margin-bottom: 32px;\n\n      &.sm {\n        font-size: 15px;\n        line-height: 32px;\n        letter-spacing: 0.01em;\n      }\n\n      &:last-child {\n        margin-bottom: 0;\n      }\n    }\n\n    .what {\n      background: linear-gradient(to bottom, #f7f9fc, #fdfefe);\n      padding-bottom: 88px;\n\n      .content {\n        padding-bottom: 134px;\n\n        @media (max-width: $screen-sm-max) {\n          padding-bottom: 20px;\n        }\n      }\n\n      .graphic img {\n        margin-right: -50px;\n        margin-top: -20px;\n      }\n\n      ul {\n        padding: 0;\n        display: flex;\n        margin-top: 43px;\n        margin-bottom: 0;\n      }\n\n      li {\n        list-style: none;\n        background: url(\"/img/what-is-ionic/web-icons.png\") no-repeat 0 0;\n        background-size: 40px;\n        width: 40px;\n        height: 40px;\n        margin-right: 22px;\n\n        &.css {\n          background-position: 0 -40px;\n        }\n        &.js {\n          background-position: 0 -80px;\n        }\n      }\n    }\n\n    .kit {\n      background: linear-gradient(to bottom, #f7f9fb, #fefefe);\n      padding-bottom: 190px;\n\n      .graphic {\n        margin-right: 68px;\n      }\n\n      .content {\n        margin-bottom: 8px;\n      }\n    }\n\n    .teams {\n      background: linear-gradient(to bottom, #f8f9fb, #fefefe);\n      padding-top: 183px;\n      padding-bottom: 176px;\n\n      .graphic {\n        margin-right: -65px;\n        padding-top: 34px;\n        padding-left: 1px;\n      }\n\n      ion-icon {\n        font-size: 0.9em;\n        vertical-align: -7%;\n        margin-left: -2px;\n      }\n    }\n\n    .global {\n      background-image: url(\"/img/what-is-ionic/community-bg.png\"),\n        linear-gradient(to bottom, #f7f9fc, #fefefe);\n      background-size: cover, 100%;\n      background-repeat: no-repeat;\n      background-position: 50% 0;\n      padding-top: 204px;\n      padding-bottom: 198px;\n\n      .content {\n        margin-top: -10px;\n      }\n\n      .graphic {\n        margin-left: -12px;\n        margin-right: 124px;\n\n        @media (max-width: $screen-sm-max) {\n          margin-right: 24px;\n        }\n      }\n\n      ul {\n        padding: 0;\n        margin: 0;\n      }\n\n      li {\n        list-style: none;\n        position: relative;\n        display: block;\n        padding-left: 108px;\n        margin: 57px 0;\n\n        &::before {\n          background: url(\"/img/what-is-ionic/community-icons.png\") no-repeat 0\n            0;\n          background-size: 88px;\n          height: 88px;\n          width: 88px;\n          content: \"\";\n          position: absolute;\n          top: calc(50% - 44px);\n          left: 0;\n        }\n\n        &:first-child {\n          margin-top: 0;\n        }\n\n        &:last-child {\n          margin-bottom: 0;\n        }\n\n        strong {\n          color: #3880ff;\n          font-size: 34px;\n          font-weight: 600;\n          display: block;\n          line-height: 33px;\n        }\n\n        span {\n          color: #68b4ff;\n          font-size: 19px;\n        }\n\n        &:nth-child(2)::before {\n          background-position: 0 -88px;\n        }\n        &:nth-child(3)::before {\n          background-position: 0 -176px;\n        }\n        &:nth-child(4)::before {\n          background-position: 0 -264px;\n        }\n      }\n    }\n\n    .web {\n      background-image: url(\"/img/what-is-ionic/philosophy-bg.png\"),\n        linear-gradient(to bottom, #f7f9fc, #fefefe);\n      background-size: cover, 100%;\n      background-repeat: no-repeat;\n      background-position: 50% 0;\n      padding-bottom: 190px;\n\n      h4 {\n        text-transform: uppercase;\n        font-size: 12px;\n        font-weight: 700;\n        letter-spacing: 0.14em;\n        margin-top: 0;\n        margin-bottom: 24px;\n        color: #0f1622;\n      }\n    }\n\n    @media (max-width: $screen-sm-max) {\n      img {\n        max-width: 320px;\n      }\n\n      .left .graphic {\n        margin-left: 20px;\n      }\n    }\n  }\n\n  @media (max-width: $screen-xs-max) {\n    .banner {\n      padding-bottom: 64px;\n    }\n\n    main {\n      .graphic {\n        margin: 0;\n      }\n\n      section {\n        padding-top: 96px;\n        padding-bottom: 96px;\n\n        .container {\n          flex-direction: column;\n        }\n\n        &.left .container {\n          flex-direction: column-reverse;\n        }\n      }\n\n      .container {\n        align-items: center;\n        justify-content: center;\n        text-align: center;\n      }\n\n      .what {\n        .graphic {\n          margin: 0;\n        }\n\n        ul {\n          justify-content: center;\n        }\n      }\n\n      .kit {\n        padding-bottom: 96px;\n\n        .graphic {\n          margin: 0 0 42px;\n        }\n      }\n\n      .teams {\n        padding-top: 96px;\n        padding-bottom: 96px;\n\n        .graphic {\n          margin: 0;\n        }\n      }\n\n      .global {\n        padding-top: 96px;\n        padding-bottom: 96px;\n\n        .graphic {\n          margin-bottom: 64px;\n        }\n      }\n\n      .web {\n        padding-bottom: 64px;\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "assets/scss/pages/about.scss",
    "content": "@import '../vars';\n@import 'bootstrap-sass/assets/stylesheets/bootstrap/variables';\n\n#page-about {\n  .navbar.transparent {\n    ~ .banner {\n      background: #181830 no-repeat center top url('/img/about-us/about-us-cta-bg.jpg');\n      background-size: cover;\n      padding-top: 95px;\n\n      p {\n        max-width: 655px;\n        margin: 0 auto;\n      }\n    }\n  }\n\n  .about-us {\n\n    .content p {\n      margin: 30px 0;\n\n      &.lg {\n        font-size: 18px;\n        line-height: 32px;\n\n        &.light {\n          font-size: 16px;\n        }\n      }\n    }\n\n    .graphics {\n      background: no-repeat center top url('/img/about-us/story-graphic.png');\n      background-size: 139px;\n      float: right;\n      position: relative;\n      top: 30px;\n      width: 500px;\n\n      .period {\n        width: 190px;\n        position: relative;\n        margin-bottom: 40px;\n        opacity: 0;\n        // transform: scale3d(.1,.1,1);\n        transition: opacity .6s,\n                    transform .3s cubic-bezier(0.155, 1.105, 0.295, 1.12);\n        transition-delay: .4s;\n        &:nth-child(2) { transition-delay: .8s; }\n        &:nth-child(3) { transition-delay: 1s; }\n        &:nth-child(4) { transition-delay: 1.2s; }\n        &:nth-child(5) { transition-delay: 1.4s; }\n        &:nth-child(6) { transition-delay: 1.6s; }\n        &:nth-child(7) { transition-delay: 1.8s; }\n        &:nth-child(8) { transition-delay: 2s; }\n        &.right {\n          left: 325px;\n        }\n\n        &:first-child {\n          margin-top: -5px;\n        }\n\n        h4 {\n          font-size: 14px;\n          font-weight: 600;\n          margin-bottom: 5px;\n        }\n\n        p {\n          font-size: 12px;\n          line-height: 16px;\n          letter-spacing: 0;\n          color: #898989;\n        }\n\n        strong {\n          font-weight: 500;\n          color: #4f545c;\n        }\n      }\n\n      &.active .period {\n        opacity: 1;\n      }\n    }\n\n    @media (max-width: $screen-sm-max)  {\n      .graphics {\n        float: none;\n        margin: 0 auto;\n      }\n\n      .content { width: 100%;}\n    }\n\n    @media (max-width: 525px) {\n      .graphics {\n        transform: scale3d(.6, .6, 1);\n        width: 300px;\n        height: 720px;\n        margin-top: -180px;\n        left: -15px;\n\n        .left {\n          left: -75px;\n        }\n\n        .period.right {\n          left: 215px;\n        }\n      }\n    }\n  }\n\n  section.our {\n    background: linear-gradient(to right, #4a7dff 0%, #4fb3ff 100%);\n    padding: 90px 0 40px;\n\n    .mission {\n      margin-left: 4.999%;\n    }\n\n    .mission,\n    .philosophy {\n      margin-bottom: 50px;\n      width: 45%;\n      @media (max-width: $screen-xs-max)  {\n        width: 100%;\n        margin-left: auto;\n      }\n    }\n\n    h3 {\n      color: white;\n    }\n\n    p {\n      color: rgba(white, .7);\n      line-height: 1.8em;\n      font-size: 16px;\n      strong,\n      a {\n        color: white;\n        font-weight: 500;\n      }\n    }\n  }\n\n  section.our-neck {\n    background: #f8fafe no-repeat center top;\n    background-image: url('/img/about-us/madison-map.jpg'),\n                      linear-gradient(to right, #f8fafe 30%, #cad3e2 70%);\n    background-size: 1680px, 100%;\n\n    .container {\n      padding-top: 64px;\n      height: 470px;\n    }\n\n    h3 {\n      margin-bottom: 20px;\n    }\n\n    p {\n      line-height: 28px;\n      font-size: 16px;\n    }\n  }\n\n  .hero.dark {\n    background: linear-gradient(to right, #31353d 0%, #404753 100%);\n    padding-top: 90px;\n    padding-bottom: 88px;\n\n    h3 {\n      color: white;\n      font-weight: 600;\n    }\n\n    p {\n      color: $blue;\n      font-weight: 500;\n      text-decoration: none;\n\n      a:hover {\n        color: lighten($blue, 15);\n        text-decoration: none;\n      }\n\n      span {\n        font-size: 1.4em;\n        top: 3px;\n        position: relative;\n        right: -5px;\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "assets/scss/pages/angular.scss",
    "content": "@import \"../vars\";\n@import \"bootstrap-sass/assets/stylesheets/bootstrap/variables\";\n\n$angular-red-1: #DD0031;\n$angular-red-2: #C3002F;\n$angular-red-3: #F70037;\n\n$angular-red-button: #FEEAEB;\n$angular-red-hover: #F9DEDE;\n\n:root {\n  font-size: 16px;\n}\n\n@media (max-width: $screen-xs-max) {\n  body {\n    padding-top: 0;\n  }\n}\n\n#page-angular {\n  // #region ------------ GENERAL STYLES ----------------\n\n  img {\n    object-fit: contain;\n    max-width: 100%;\n    height: auto;\n  }\n\n  ul {\n    list-style: none;\n    padding: 0;\n    margin: 0;\n  }\n\n  h1 {\n    color: #001a3a;\n    font-weight: 800;\n    font-size: 64px;\n    line-height: 100%;\n    letter-spacing: -0.05em;\n  }\n\n  h2,\n  h3 {\n    color: #03060b;\n  }\n\n  h2 {\n    font-weight: bold;\n    font-size: 48px;\n    line-height: 112%;\n    letter-spacing: -0.05em;\n\n    margin-block-end: 24px;\n  }\n\n  h3 {\n    font-weight: 500;\n    font-size: 20px;\n    line-height: 112%;\n    letter-spacing: -0.02em;\n  }\n\n  .p2 {\n    color: #2d4665;\n    font-size: 20px;\n    line-height: 160%;\n    letter-spacing: -0.02em;\n\n    margin: 0;\n  }\n\n  .p3 {\n    color: #2d4665;\n    font-size: 16px;\n    line-height: 180%;\n    letter-spacing: -0.02em;\n\n    margin: 0;\n  }\n\n  .highlight {\n    color: $angular-red-1;\n    background: initial;\n  }\n\n  a {\n    text-decoration: none;\n  }\n  //#endregion\n\n  // #region ------------ COMPONENTS --------------------\n  %btn {\n    border-radius: 1000px;\n    display: inline-flex;\n    align-items: center;\n    justify-content: center;\n\n    font-weight: 600;\n    font-size: 1rem;\n    line-height: 112%;\n    letter-spacing: -0.02em;\n\n    padding: 1rem 1.5rem;\n\n    transition: background-color 0.2s ease-out;\n  }\n\n  .primary-btn {\n    @extend %btn;\n    background: $angular-red-1;\n    color: #fff;\n\n    &:hover,\n    &:active,\n    &:focus {\n      background: $angular-red-3;\n    }\n  }\n  .secondary-btn {\n    @extend %btn;\n    background: $angular-red-button;\n    color: $angular-red-1;\n\n    &:hover,\n    &:active,\n    &:focus {\n      background: $angular-red-hover;\n\n    }\n  }\n\n  .components-list {\n    margin-block-start: 2rem;\n\n    svg {\n      display: block;\n    }\n    li {\n      display: flex;\n      align-items: center;\n\n      font-size: 24px;\n      line-height: 100%;\n      letter-spacing: -0.03em;\n      color: #1a232f;\n\n      cursor: pointer;\n\n      transition: color 0.1s ease-out;\n\n      svg {\n        margin-block-end: 2px;\n      }\n\n      rect,\n      path,\n      circle {\n        transition: stroke 0.1s ease-out;\n      }\n\n      .icon {\n        margin-inline-end: 2rem;\n      }\n\n      .title {\n        flex-grow: 1;\n        position: relative;\n        border-block-end: 1px solid #eaedf4;\n\n        .word {\n          display: inline-block;\n          padding-block-start: 1rem;\n          padding-block-end: 1rem;\n        }\n\n        .progress {\n          position: absolute;\n          display: block;\n          width: 100%;\n          height: 2px;\n          opacity: 0;\n          background: $angular-red-1;\n          bottom: -1px;\n          transform-origin: 0 0;\n\n          transition: opacity 0.2s ease-out;\n        }\n      }\n    }\n    li.selected {\n      color: $angular-red-1;\n\n      .progress {\n        opacity: 1;\n      }\n\n      rect,\n      path,\n      circle {\n        stroke: currentColor;\n      }\n    }\n  }\n  // #endregion -----------------------------------------\n\n  // #region ------------ GENERAL -----------------------\n  #sticky-bar {\n    .nav {\n      min-height: 4.75rem;\n\n      li {\n        display: flex;\n        align-items: center;\n\n        &.active .anchor {\n          color: $angular-red-1 !important;\n        }\n        .anchor:hover,\n        .anchor:active,\n        .anchor:focus {\n          color: $angular-red-1 !important;\n        }\n      }\n\n      .try-it {\n        @extend %btn;\n        font-weight: bold;\n        font-size: 14px;\n        line-height: 157.33%;\n        letter-spacing: 0.08em;\n        text-transform: uppercase;\n\n        color: $angular-red-1;\n        background: $angular-red-button;\n\n        padding: 0.5rem 1rem;\n\n        &:hover,\n        &:active,\n        &:focus {\n          background: $angular-red-hover;\n        }\n      }\n    }\n  }\n\n  .header-wrapper {\n    background: linear-gradient(\n      180deg,\n      rgba(251, 252, 253, 0) 0%,\n      #fbfcfd 100%\n    );\n  }\n  header {\n    position: relative;\n    background-color: #fbfcfd;\n    color: white;\n    background-image: url(\"/img/angular/ng-cta-bg.png\");\n    background-repeat: no-repeat;\n    background-size: auto 100%;\n    background-position: center bottom;\n\n    min-height: 672px;\n    display: flex;\n    align-items: center;\n    text-align: center;\n\n    .back-button {\n      @extend %btn;\n      position: absolute;\n      top: 20px;\n      left: 20px;\n\n      font-size: 10px;\n      letter-spacing: 0.08em;\n      text-transform: uppercase;\n\n      padding: 0.5rem 0.75rem;\n      background: #f6f8fc;\n\n      &:hover,\n      &:active,\n      &:focus {\n        color: #4a8bfc;\n      }\n    }\n\n    hgroup {\n      max-width: 650px;\n      margin-block-start: 1rem;\n\n      h1 {\n        margin-block-end: 40px;\n      }\n\n      .logo {\n        margin-block-end: 40px;\n      }\n\n      .cta-row {\n        margin-block-end: 30px;\n      }\n    }\n  }\n\n  #intro {\n    margin-block-start: 12.5rem;\n    margin-block-end: 8rem;\n\n    display: grid;\n    grid-template-columns: 1fr 1fr 1fr;\n    column-gap: 5rem;\n    row-gap: 4rem;\n\n    @media screen and (max-width: $screen-md-max) {\n      column-gap: 2rem;\n    }\n    @media screen and (max-width: $screen-xs-max) {\n      grid-template-columns: initial;\n      grid-template-rows: 1fr 1fr 1fr;\n    }\n\n    article {\n      img {\n        margin-block-end: 32px;\n      }\n\n      h3 {\n        margin-block-end: 20px;\n      }\n    }\n  }\n\n  #components {\n    display: flex;\n    justify-content: space-between;\n\n    padding-block-start: 2rem;\n    margin-inline-start: -2rem;\n    max-width: 100%;\n\n    @media screen and (max-width: $screen-xs-max) {\n      flex-direction: column;\n    }\n\n    > * {\n      flex-basis: 50%;\n      margin-block-start: 4rem;\n      margin-inline-start: 2rem;\n    }\n\n    hgroup {\n      max-width: 480px;\n    }\n\n    vue-components {\n      width: 100%;\n      max-width: 32rem;\n    }\n  }\n\n  #native {\n    margin-block-start: 232px;\n\n    .wrapper {\n      display: flex;\n      justify-content: space-between;\n\n      @media screen and (max-width: $screen-xs-max) {\n        flex-direction: column-reverse;\n        max-width: 100%;\n      }\n\n      margin-block-start: -4rem;\n      margin-inline-start: -4rem;\n\n      > * {\n        flex-basis: 50%;\n        min-width: 0;\n\n        margin-block-start: 4rem;\n        margin-inline-start: 4rem;\n      }\n    }\n\n    react-capacitor {\n      max-width: 32rem;\n\n      @media screen and (min-width: $screen-md) {\n        min-height: 487px;\n      }\n    }\n\n    hgroup {\n      max-width: 30rem;\n    }\n  }\n\n  #samples {\n    margin-block-start: 14rem;\n    margin-block-end: 14rem;\n\n    hgroup {\n      display: flex;\n      flex-wrap: wrap;\n      justify-content: space-between;\n      align-items: flex-end;\n\n      margin-inline-start: -1rem;\n      margin-block-start: -1rem;\n      margin-block-end: 4rem;\n\n      > * {\n        margin-inline-start: 1rem;\n        margin-block-start: 1rem;\n      }\n\n      h2 {\n        max-width: 28rem;\n      }\n\n      p {\n        max-width: 30rem;\n        margin-block-end: 2rem;\n      }\n    }\n\n    .features {\n      display: grid;\n      grid-template-columns: 1fr 1fr 1fr;\n      column-gap: 2rem;\n      row-gap: 4rem;\n\n      @media screen and (max-width: $screen-md-max) {\n        column-gap: 2rem;\n      }\n      @media screen and (max-width: $screen-xs-max) {\n        grid-template-columns: initial;\n        grid-template-rows: 1fr 1fr 1fr;\n        max-width: 22rem;\n      }\n\n      .feature {\n        display: flex;\n        align-items: flex-start;\n        flex-direction: column;\n\n        img {\n          display: block;\n          border-radius: 1rem;\n        }\n\n        h3 {\n          margin: 2rem 0 1rem;\n        }\n\n        p {\n          margin-block-end: 1rem;\n          flex-grow: 1;\n        }\n      }\n\n      .try-it {\n        display: inline-block;\n        font-weight: 600;\n        font-size: 13px;\n        line-height: 120%;\n        display: inline-flex;\n        align-items: center;\n        text-align: center;\n        letter-spacing: -0.02em;\n\n        padding: 0.53125rem 0.75rem;\n        background: $angular-red-button;\n        border-radius: 100px;\n\n        color: $angular-red-3;\n\n        transition: background-color 0.2s ease-out;\n\n        &:hover,\n        &:active,\n        &:focus {\n          background: $angular-red-hover;\n        }\n      }\n    }\n  }\n\n  #enterprise {\n    display: flex;\n    justify-content: space-between;\n    align-items: center;\n\n    margin-inline-start: -2rem;\n    margin-block-start: -2rem;\n\n    @media screen and (max-width: $screen-xs-max) {\n      flex-direction: column;\n      align-items: flex-start;\n    }\n\n    > * {\n      margin-inline-start: 2rem;\n      margin-block-start: 2rem;\n    }\n\n    .graphics {\n      flex-basis: 60%;\n\n      img {\n        display: block;\n        margin-inline-start: -1rem;\n\n        @media screen and (max-width: $screen-xs-max) {\n          margin: 0;\n        }\n      }\n    }\n\n    hgroup {\n      flex-basis: 40%;\n      max-width: 30rem;\n\n      p {\n        margin-block-end: 2rem;\n      }\n    }\n  }\n\n  #why {\n    margin-block-start: 14rem;\n    margin-block-end: 14rem;\n\n    hgroup {\n      text-align: center;\n      max-width: 40rem;\n      margin: 0 auto 4rem;\n    }\n\n    .features {\n      display: grid;\n      grid-template-columns: 1fr 1fr 1fr 1fr;\n      column-gap: 2rem;\n      row-gap: 4rem;\n\n      @media screen and (max-width: $screen-md-max) {\n        grid-template-columns: 1fr 1fr;\n        grid-template-row: 1fr 1fr;\n      }\n      @media screen and (max-width: $screen-xs-max) {\n        grid-template-columns: initial;\n        grid-template-rows: 1fr 1fr 1fr 1fr;\n      }\n\n      .feature {\n        display: grid;\n        align-items: center;\n        grid-template-rows: 3.5rem min-content min-content;\n\n        h3 {\n          margin-block-start: 1.5rem;\n          margin-block-end: 1rem;\n        }\n      }\n    }\n  }\n\n  #accolades {\n    columns: 2;\n    column-gap: 4rem;\n\n    @media screen and (max-width: $screen-xs-max) {\n      columns: 1;\n    }\n\n    h2 {\n      margin-block-end: 1rem;\n    }\n\n    .tweet {\n      background: #f6f8fc;\n      border-radius: 8px;\n      position: relative;\n\n      padding: 2rem;\n      margin-block-start: 4rem;\n\n      -webkit-column-break-inside: avoid;\n      page-break-inside: avoid;\n      break-inside: avoid;\n\n      .tweet-author {\n        display: grid;\n        grid-template-columns: 2.5rem max-content;\n        column-gap: 1rem;\n\n        margin-block-end: 1.25rem;\n\n        &-info {\n          display: flex;\n          flex-direction: column;\n          justify-content: center;\n        }\n\n        h3 {\n          font-weight: 500;\n          font-size: 16px;\n          letter-spacing: -0.02em;\n          color: #020814;\n\n          a {\n            color: inherit;\n          }\n        }\n\n        h5 {\n          font-weight: normal;\n          font-size: 12px;\n          letter-spacing: -0.02em;\n          color: #414d5c;\n          margin: 0.25rem 0 0 0;\n\n          a {\n            color: inherit;\n          }\n        }\n\n        img {\n          border-radius: 1000px;\n        }\n      }\n\n      .tweet-footer {\n        display: flex;\n        justify-content: space-between;\n\n        margin-block-start: 1.5rem;\n\n        font-size: 10px;\n        line-height: 160%;\n        letter-spacing: 0.08em;\n        text-transform: uppercase;\n        color: #616e7e;\n\n        a {\n          color: inherit;\n        }\n      }\n\n      &-twitter-icon {\n        position: absolute;\n        right: 2rem;\n        top: 2rem;\n\n        width: 1rem;\n        height: 1rem;\n\n        background-image: url(\"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTciIGhlaWdodD0iMTMiIHZpZXdCb3g9IjAgMCAxNyAxMyIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZD0iTTE2LjUgMS41NDAzNkMxNS45MDE2IDEuODAxMDQgMTUuMjYyIDEuOTc3MDggMTQuNTg3OSAyLjA1ODMzQzE1LjI3NTcgMS42NTIwOCAxNS44MDUzIDEuMDA4ODUgMTYuMDUyOSAwLjI0Mzc1QzE1LjQwOTggMC42MTk1MzEgMTQuNjk4IDAuODkzNzUgMTMuOTM4IDEuMDM5MzJDMTMuMzI5MyAwLjM5OTQ3OSAxMi40NjI2IDAgMTEuNTA2NiAwQzkuNjY2NzMgMCA4LjE3NzY1IDEuNDY5MjcgOC4xNzc2NSAzLjI4MDQ3QzguMTc3NjUgMy41Mzc3NiA4LjIwNTE2IDMuNzg4MjggOC4yNjM2MyA0LjAyODY1QzUuNDk1MjQgMy44OTMyMyAzLjAzOTgxIDIuNTg2NDYgMS4zOTk0MSAwLjU5OTIxOUMxLjExMzk3IDEuMDgzMzMgMC45NDg5MDMgMS42NDg3IDAuOTQ4OTAzIDIuMjQ3OTJDMC45NDg5MDMgMy4zODU0MiAxLjU0MDQxIDQuMzkwODkgMi40MzQ1NSA0Ljk3OTk1QzEuODg0MzEgNC45NjY0MSAxLjM2ODQ2IDQuODE3NDUgMC45MjEzOTIgNC41NzAzMVY0LjYxMDk0QzAuOTIxMzkyIDYuMjAyMDggMi4wNzAwMSA3LjUyNTc4IDMuNTkzNDggNy44MjcwOEMzLjMxNDkzIDcuOTAxNTYgMy4wMTkxNyA3Ljk0MjE5IDIuNzE2NTQgNy45NDIxOUMyLjUwMzMyIDcuOTQyMTkgMi4yOTM1NSA3LjkyMTg4IDIuMDkwNjUgNy44ODEyNUMyLjUxMzY0IDkuMTg0NjQgMy43NDQ4IDEwLjEzMjYgNS4yMDI5MyAxMC4xNTk2QzQuMDY0NjIgMTEuMDM5OCAyLjYyNzEzIDExLjU2NDYgMS4wNjU4MyAxMS41NjQ2QzAuNzk3NTg4IDExLjU2NDYgMC41MzI3ODYgMTEuNTQ3NyAwLjI3MTQyMyAxMS41MTcyQzEuNzM5ODcgMTIuNDU4MyAzLjQ5MDMxIDEzIDUuMzY4IDEzQzExLjQ5OTcgMTMgMTQuODQ5MyA3Ljk5OTc0IDE0Ljg0OTMgMy42NjMwMkMxNC44NDkzIDMuNTIwODMgMTQuODQ1OCAzLjM3ODY1IDE0LjgzOSAzLjIzOTg0QzE1LjQ4ODkgMi43NzYwNCAxNi4wNTI5IDIuMjAwNTIgMTYuNSAxLjU0MDM2WiIgZmlsbD0iIzRDQTBFQyIvPgo8L3N2Zz4K\");\n        background-repeat: no-repeat;\n      }\n    }\n\n    .tweet-share {\n      display: flex;\n      flex-wrap: wrap;\n      align-items: center;\n      justify-content: space-between;\n\n      h4 {\n        font-weight: 500;\n        font-size: 20px;\n        letter-spacing: -0.02em;\n        color: #020814;\n      }\n\n      a {\n        font-size: 16px;\n        line-height: 180%;\n        letter-spacing: -0.02em;\n\n        color: #009dff;\n      }\n    }\n  }\n\n  #start {\n    margin-block-start: 10rem;\n    margin-block-end: 10rem;\n\n    background-color: $angular-red-2;\n    box-shadow: 0px 16px 32px -2px rgba(0, 0, 0, 0.1),\n      0px 8px 16px -2px rgba(0, 0, 0, 0.06);\n    border-radius: 24px;\n\n    .wrapper {\n      padding: clamp(1rem, 6vw, 4rem);\n    }\n\n    .inside-wrapper {\n      display: flex;\n      flex-wrap: wrap;\n      justify-content: space-between;\n      align-items: center;\n\n      margin-block-start: -2rem;\n      margin-inline-start: -2rem;\n\n      > * {\n        margin-inline-start: 2rem;\n        margin-block-start: 2rem;\n      }\n    }\n\n    hgroup {\n      h2 {\n        max-width: 22.3125rem;\n        color: #fff;\n\n        margin-block-end: 0.5rem;\n      }\n      p {\n        color: #f1fdf5;\n      }\n    }\n\n    .code {\n      max-width: calc(100% - 2rem);\n      width: 27.375rem;\n\n      background: #1C2B3E;\n      border-radius: 16px;\n      padding-inline-start: clamp(1rem, 6vw, 2.375rem);\n      padding-inline-end: clamp(1rem, 4vw, 2.375rem);\n\n      pre,\n      code,\n      span {\n        font-weight: normal;\n        font-size: 20px;\n        line-height: 160%;\n        letter-spacing: -0.06em;\n\n        background: #1C2B3E;\n        border: none;\n        margin: 0;\n        color: #fff;\n      }\n    }\n  }\n  // #endregion -----------------------------------------\n}\n"
  },
  {
    "path": "assets/scss/pages/articles/_why-hybrid.scss",
    "content": "#page-articles-why-hybrid {\n  .signup-form .card {\n    background-image: url('/img/articles/why-hybrid-cover.jpg');\n  }\n}"
  },
  {
    "path": "assets/scss/pages/auth.scss",
    "content": "@import '../vars';\n\n#page-login,\n#page-signup,\n#page-start {\n  display: grid;\n  grid-template-rows: auto 1fr auto;\n  grid-template-columns: 1fr auto;\n  grid-template-areas: \"header sidebar\"\n                       \"main sidebar\"\n                       \"footer sidebar\";\n\n  &.start {\n    grid-template-columns: minmax(min-content, 4fr) 5fr;\n    grid-template-areas: \"siebar header\"\n                         \"sidebar main\"\n                         \"sidebar footer\";\n\n    header {\n      display: none;\n    }\n\n    @media (max-width: $screen-xs-max) {\n\n      grid-template-columns: auto;\n      grid-template-areas: \"header\"\n                           \"sidebar\"\n                           \"main\"\n                           \"footer\";\n    }\n  }\n\n\n  header {\n    grid-area: header;\n    padding: 20px;\n    display: flex;\n    justify-content: space-between;\n    align-items: center;\n    position: fixed;\n    top: 0;\n    width: 100%;\n\n    .header__logo {\n      color: #B2BECD;\n      display: inline-block;\n\n      &, svg {\n        width: 24px;\n        height: 24px;\n      }\n\n      &--appflow {\n        &, svg {\n          width: 114px;\n        }\n      }\n    }\n\n    .header__feedback {\n      color: #676F80;\n      display: none;\n\n      &.is-visible {\n        display: inline-block;\n      }\n    }\n  }\n\n  main {\n    grid-area: main;\n    padding: 22px 0;\n  }\n\n  .sidebar {\n    grid-area: sidebar;\n    background: #F6F8FB;\n    padding: 32px;\n    display: grid;\n    grid-template-rows: 1fr auto;\n    height: 100vh;\n    position: sticky;\n    top: 0;\n\n    &__content {\n      display: flex;\n      flex-direction: column;\n      justify-content: center;\n\n      h2,\n      li,\n      p {\n        font-family: $font-family-inter;\n        letter-spacing: -0.02em;\n      }\n\n      h2,\n      p {\n        font-weight: 500;\n        line-height: 1.12;\n        margin-bottom: 8px;\n      }\n\n      h2 {\n        font-size: 20px;\n        color: #010610;\n      }\n\n      ul {\n        padding: 0;\n      }\n\n      li {\n        font-size: 16px;\n        line-height: 1.6;\n        color: #445B78;\n        margin: 12px 0;\n        list-style-type: none;\n        display: flex;\n\n        ion-icon {\n          margin-right: 8px;\n          flex: 0 0 20px;\n          font-size: 20px;\n          color: #0054E9;\n        }\n      }\n\n      p {\n        font-size: 14px;\n        color: #445B78;\n        margin-top: 32px;\n      }\n    }\n  }\n\n  .container-fluid {\n    display: flex;\n    height: 100%;\n  }\n\n  .auth-form-container {\n    height: 100%;\n    display: grid;\n    grid-template-rows: auto 1fr;\n    align-content: start;\n    justify-items: center;\n    flex: auto;\n    text-align: center;\n    grid-template-areas: \"switcher\"\n                          \"main\";\n\n    & > *:not(ionic-signup-form),\n    ionic-signup-form .form-area > * {\n      width: 100%;\n      max-width: 400px;\n      margin-left: auto;\n      margin-right: auto;\n    }\n\n    ionic-signup-form .form-area > hgroup {\n      max-width: 560px;\n    }\n\n    & > *:not(ionic-switcher) {\n      grid-area: main;\n    }\n\n    ionic-switcher {\n      grid-area: switcher;\n    }\n  }\n\n  hgroup {\n    text-align: center;\n    margin-bottom: 24px;\n  }\n\n  .form-area {\n    display: flex;\n    flex-direction: column;\n    justify-content: center;\n    padding: 48px 0;\n  }\n\n  .notice {\n    padding: 10px 15px;\n    background: var(--c-grey-100);\n    border: 1px solid var(--c-grey-300);\n    border-radius: 8px;\n\n    p:first-child {\n      font-weight: 500;\n    }\n\n    &--fixed {\n      position: fixed;\n      bottom: 14px;\n      right: 14px;\n    }\n\n    &--transparent {\n      background: transparent;\n    }\n  }\n\n  .grecaptcha-badge {\n    left: 0px !important;\n    transition: width 0.3s ease 0s !important;\n    width: 70px !important;\n\n    &:hover {\n      width: 256px !important;\n    }\n  }\n\n  @media (max-width: $screen-sm) {\n    padding-top: 0;\n\n    header {\n      position: absolute;\n    }\n\n    .sidebar {\n      grid-area: footer;\n      position: static;\n      padding: 20px;\n      height: auto;\n      background: transparent;\n\n      &__content {\n        display: none;\n      }\n    }\n\n    .notice {\n      text-align: center;\n\n      &--fixed {\n        position: static;\n      }\n    }\n  }\n}\n\n.start {\n  position: relative;\n  grid-area: sidebar;\n  flex-basis: 45.56%;\n\n  .background {\n    position: absolute;\n    z-index: -1;\n    height: 100%;\n    width: 100%;\n    background: linear-gradient(180deg, #4998FF 0%, rgba(65, 110, 255, 0.2) 100%);;\n    object-fit: cover;\n  }\n\n  .content {\n    display: flex;\n    flex-direction: column;\n    height: 100%;\n    padding-inline-start: 8px;\n    padding-inline-end: 8px;\n\n    .start-spacer {\n      flex-basis: 23.49%;\n    }\n\n    .horizontal-group {\n      display: flex;\n\n      .start-spacer {\n        flex-grow: 1;\n      }\n\n      .end-spacer {\n        flex-basis: 58px;\n      }\n\n      .heading-group {\n        position: relative;\n        font-size: 0;\n\n        .home-icon {\n          margin-block-end: 32px;\n          display: block;\n        }\n\n        .ui-heading {\n          font-size: 48px;\n          color: #fff;\n          margin-bottom: 48px;\n        }\n\n        ul {\n          padding: 0;\n        }\n\n        li {\n          display: flex;\n          align-items: flex-start;\n          font-size: 20px;\n          line-height: 112%;\n          letter-spacing: -0.02em;\n          color: #E3EDFF;\n\n\n          & + li {\n            margin-block-start: 32px;\n          }\n\n          img {\n            border-radius: 1000px;\n            margin-block-start: 2px;\n            width: auto;\n            margin-inline-end: 16px;\n          }\n        }\n      }\n    }\n  }\n\n  @media (max-width: $screen-sm) {\n    .horizontal-group {\n      justify-content: center;\n      align-items: center;\n      padding: 32px 8px 48px;\n\n      .start-spacer {\n        display: none;\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "assets/scss/pages/community.scss",
    "content": "@import '../vars';\n@import '../mixins';\n\n#page-community {\n  img {\n    width: auto;\n    height: auto;\n  }\n\n  .banner,\n  main {\n    font-family: $font-family-inter;\n\n    h1,\n    h2,\n    h3,\n    h4,\n    strong {\n      color: #0f1622;\n    }\n\n    a {\n      text-decoration: none;\n    }\n\n    hgroup p {\n      color: #4a586f;\n    }\n  }\n\n  .banner {\n    background: #fcfdff no-repeat 0 0;\n    background-image: url(\"/img/community/hero-bg.jpg\"),\n      linear-gradient(to bottom, #fafcfd, #f4f5f7);\n    background-size: cover, 100%;\n    padding-top: 226px;\n    margin-top: -110px;\n    will-change: transform;\n\n    hgroup {\n      max-width: 768px;\n      will-change: transform;\n\n      li {\n        @media (max-width: $screen-xs-max) {\n          padding-right: 15px;\n        }\n\n        @media (max-width: $screen-xs-max) {\n          li {\n            margin-bottom: 16px;\n          }\n        }\n      }\n    }\n\n    h1 {\n      font-size: 48px;\n      font-weight: 700;\n      letter-spacing: -0.04em;\n      margin-bottom: 23px;\n    }\n\n    p {\n      font-size: 22px;\n      letter-spacing: -0.03em;\n      line-height: 36px;\n    }\n\n    ul {\n      padding: 33px 0 0;\n      display: flex;\n      list-style: none;\n      align-items: center;\n      justify-content: center;\n      flex-wrap: wrap;\n    }\n\n    li {\n      font-size: 24px;\n\n      &:first-child a {\n        padding-left: 0;\n      }\n\n      a {\n        padding: 0 20px;\n        letter-spacing: -0.024em;\n        transition: all 0.15s ease;\n        color: #0079ff;\n        transition: 0.1s opacity, 0.1s color;\n\n        &:hover {\n          color: lighten(#0079ff, 15);\n\n          ion-icon {\n            color: lighten(#0079ff, 15);\n            transform: translateX(2px);\n          }\n        }\n      }\n\n      ion-icon {\n        font-size: 19px;\n        vertical-align: -10%;\n        display: inline-block;\n        transition: 0.1s transform ease-out;\n      }\n    }\n\n    .features {\n      max-width: 982px;\n      margin-top: 120px;\n      padding-bottom: 27px;\n      display: flex;\n      flex-wrap: wrap;\n      justify-content: space-between;\n      will-change: trasnform;\n\n      &::before,\n      &::after {\n        display: none;\n      }\n\n      li {\n        list-style: none;\n        padding: 0;\n        text-align: left;\n        min-width: 128px;\n        padding-left: 15px;\n        padding-bottom: 32px;\n      }\n\n      strong {\n        display: block;\n        font-size: 37px;\n        letter-spacing: -0.04em;\n        line-height: 40px;\n      }\n\n      span {\n        font-size: 19px;\n        display: block;\n        color: #727c8e;\n      }\n\n      @media (max-width: $screen-xs-max) {\n        margin-top: 0;\n        justify-content: space-around;\n      }\n    }\n\n    h1,\n    p,\n    li {\n      animation: 1s fadeInUp forwards;\n      opacity: 0;\n    }\n\n    h1 {\n      animation-delay: 0.8s;\n    }\n\n    p {\n      animation-delay: 1s;\n    }\n\n    hgroup li {\n      animation-delay: 1.6s;\n\n      &:nth-child(2) {\n        animation-delay: 1.7s;\n      }\n\n      &:nth-child(3) {\n        animation-delay: 1.8s;\n      }\n\n      &:nth-child(4) {\n        animation-delay: 1.9s;\n      }\n    }\n\n    .features li {\n      animation-delay: 2.2s;\n\n      &:nth-child(2) {\n        animation-delay: 2.3s;\n      }\n\n      &:nth-child(3) {\n        animation-delay: 2.4s;\n      }\n\n      &:nth-child(4) {\n        animation-delay: 2.5s;\n      }\n    }\n\n    @media (max-width: $screen-xs-max) {\n      transform: none !important;\n\n      hgroup,\n      .features {\n        transform: none !important;\n      }\n    }\n  }\n\n  main {\n    background: white;\n    position: relative;\n    z-index: 1;\n    overflow: hidden;\n  }\n\n  .meetups {\n    padding-top: 96px;\n\n    .split {\n      display: flex;\n      align-items: center;\n      justify-content: space-between;\n\n      @media (max-width: $screen-md-max) and (min-width: $screen-md-min) {\n        .btns {\n          padding-top: 0;\n          margin-left: 24px;\n        }\n\n        .btn {\n          margin-bottom: 8px;\n        }\n      }\n\n      @media (max-width: $screen-xs-max) {\n        flex-direction: column;\n        text-align: center;\n      }\n    }\n\n    hgroup {\n      max-width: 592px;\n      display: inline-block;\n\n      h2 {\n        font-size: 31px;\n        font-weight: 700;\n        letter-spacing: -0.006em;\n        margin-bottom: 12px;\n      }\n\n      p {\n        font-size: 18px;\n        line-height: 28px;\n        letter-spacing: -0.005em;\n      }\n    }\n\n    .btns {\n      padding-top: 78px;\n\n      :first-child {\n        margin-right: 6px;\n      }\n    }\n\n    .btn {\n      font-size: 16px;\n      padding: 14px 18px 12px;\n      letter-spacing: -0.01em;\n      font-family: $font-family-inter;\n      font-weight: 700;\n      transition: all 0.2s ease;\n    }\n\n    ul {\n      list-style: none;\n      padding: 0;\n      margin: 64px 0 80px;\n      display: flex;\n      position: absolute;\n      left: 0;\n      opacity: 0;\n      will-change: transform;\n      animation: 1s fadeIn forwards 1s;\n    }\n\n    li {\n      margin-right: 80px;\n\n      a {\n        padding: 16px 35px 14px 73px;\n        position: relative;\n        display: block;\n        transition: 0.4s transform ease;\n\n        &::before {\n          position: absolute;\n          top: 0;\n          right: 0;\n          left: 0;\n          bottom: 0;\n          content: \"\";\n          box-shadow: 0 6px 12px rgba(0, 8, 24, 0.08),\n            0 2px 4px rgba(0, 8, 24, 0.04);\n          border-radius: 30px;\n          transition: box-shadow 0.1s ease, transform 0.1s ease;\n        }\n\n        img {\n          position: absolute;\n          left: 11px;\n          top: calc(50% - 24px);\n          height: 48px;\n          width: 48px;\n        }\n\n        &:hover {\n          transform: translateY(-1px);\n\n          &::before {\n            box-shadow: 0 10px 18px rgba(0, 8, 24, 0.1),\n              0 4px 8px rgba(0, 8, 24, 0.08);\n            transform: scale3d(1.01, 1.02, 1);\n          }\n        }\n      }\n\n      strong,\n      span {\n        position: relative;\n        z-index: 1;\n        display: block;\n        white-space: nowrap;\n      }\n\n      strong {\n        font-weight: 600;\n        letter-spacing: -0.01em;\n        font-size: 14px;\n        line-height: 16px;\n        color: #0f1622;\n      }\n\n      span {\n        font-size: 12px;\n        letter-spacing: -0.01em;\n        color: #506176;\n      }\n    }\n  }\n\n  .image-wall {\n    display: flex;\n    flex-wrap: wrap;\n    justify-content: space-between;\n    margin-top: 220px;\n\n    @media (max-width: $screen-md-max) {\n      justify-content: space-around;\n    }\n\n    img {\n      height: 228px;\n      margin-bottom: 14px;\n\n      @media (max-width: $screen-md-max) {\n        justify-content: space-around;\n      }\n    }\n\n    @media (max-width: $screen-xs-max) {\n      margin-left: -5px;\n      margin-right: -5px;\n\n      img {\n        margin-right: 5px;\n        margin-left: 5px;\n        height: 128px;\n      }\n    }\n\n    @media (max-width: 440px) {\n      img {\n        height: 64px;\n      }\n    }\n  }\n\n  .leaders {\n    background: linear-gradient(to bottom, #f7f9fb, white 50%, white);\n    margin-top: -142px;\n    padding-top: 182px;\n\n    hgroup {\n      margin: 84px auto 66px;\n      max-width: 684px;\n      text-align: center;\n\n      h2 {\n        font-weight: 700;\n        font-size: 32px;\n        margin-bottom: 13px;\n        letter-spacing: -0.01em;\n      }\n\n      p {\n        font-size: 18px;\n        letter-spacing: -0.01em;\n        line-height: 28px;\n      }\n    }\n\n    ul {\n      display: flex;\n      flex-wrap: wrap;\n      justify-content: space-between;\n      padding: 15px;\n\n      &::before,\n      &::after {\n        display: none;\n      }\n    }\n\n    li {\n      flex: 0 0 220px;\n      list-style: none;\n      padding: 82px 24px 18px;\n      text-align: center;\n      position: relative;\n      margin-bottom: 55px;\n\n      &::before {\n        content: \"\";\n        position: absolute;\n        top: 0;\n        right: 0;\n        left: 0;\n        bottom: 0;\n        border-radius: 8px;\n        pointer-events: none;\n        box-shadow: 0 4px 8px rgba(0, 8, 24, 0.08),\n                    0px 8px 32px rgba(0, 8, 24, 0.1);\n        transition: 0.2s box-shadow ease-out, 0.2s transform ease-out;\n      }\n\n      img {\n        position: absolute;\n        top: -20px;\n        right: calc(50% - 45px);\n        height: 90px;\n        width: 90px;\n        border-radius: 1000px;\n        box-shadow: 1px 2px 4px rgba(0,0,0,.2);\n      }\n\n      &:hover::before {\n        box-shadow: 0 2px 8px rgba(0, 8, 24, 0.08),\n                    0px 8px 32px rgba(0, 8, 24, 0.1), \n                    0 8px 18px rgba(0, 8, 24, 0.1);\n      }\n    }\n\n    strong {\n      display: block;\n      font-size: 15px;\n      font-weight: 600;\n      letter-spacing: 0.01em;\n    }\n\n    p {\n      font-size: 14px;\n      margin-top: 7px;\n      letter-spacing: -0.02em;\n\n      a {\n        transition: 0.2s color ease-out;\n\n        &:hover {\n          color: darken($blue, 15);\n        }\n      }\n    }\n\n    .twitter {\n      position: absolute;\n      top: 9px;\n      right: 15px;\n      width: 20px;\n      height: 20px;\n      font-size: 20px;\n      color: #d6ddea;\n      transition: 0.2s transform ease-out, 0.2s color ease-out;\n\n      &:hover {\n        color: $blue;\n        transform: scale3d(1.2, 1.2, 1);\n      }\n    }\n\n    @media (max-width: $screen-sm-max) {\n      ul {\n        padding-left: 0;\n        padding-right: 0;\n      }\n\n      li {\n        flex-grow: 1;\n        margin-left: 15px;\n        margin-right: 15px;\n      }\n    }\n  }\n\n  .join {\n    .split {\n      display: flex;\n      padding: 60px 0;\n      align-items: flex-end;\n\n      @media (max-width: $screen-sm-max) {\n        align-items: center;\n      }\n\n      @media (max-width: $screen-xs-max) {\n        flex-direction: column;\n\n        hgroup {\n          flex: 0;\n        }\n\n        aside {\n          width: 100%;\n          margin-top: 24px;\n          margin-left: 0;\n        }\n      }\n    }\n\n    hgroup {\n      flex: 0 508px;\n\n      h2 {\n        font-size: 24px;\n        font-weight: 700;\n        letter-spacing: -0.01em;\n      }\n\n      p {\n        font-size: 16px;\n        margin-top: 17px;\n        line-height: 1.5em;\n        letter-spacing: -0.02em;\n        margin-bottom: 0;\n      }\n    }\n\n    aside {\n      margin-left: auto;\n      width: 460px;\n      padding-bottom: 2px;\n\n      @media (max-width: $screen-sm-max) {\n        margin-left: 20px;\n      }\n\n      h3 {\n        font-size: 16px;\n        font-weight: 600;\n        letter-spacing: -0.01em;\n      }\n\n      ionic-newsletter-signup {\n        margin-top: 11px;\n        display: block;\n      }\n    }\n\n    ul {\n      padding: 0;\n      list-style: none;\n      display: flex;\n      flex-wrap: wrap;\n      margin-top: 27px;\n      justify-content: space-between;\n\n      @media (max-width: $screen-md-max) {\n        justify-content: space-around;\n      }\n    }\n\n    li {\n      margin-bottom: 58px;\n      width: 337px;\n\n      a {\n        padding-left: 82px;\n        display: block;\n        position: relative;\n\n        img {\n          box-shadow: 1px 2px 4px rgba(0,0,0,.1);\n          border-radius: 1000px;\n          height: 70px;\n          width: 70px;\n          position: absolute;\n          top: calc(50% - 33px);\n          left: -2px;\n          cursor: pointer;\n          transition: 0.2s transform ease-out;\n          backface-visibility: hidden;\n          transform: translateX(0);\n        }\n\n        &:hover {\n          strong {\n            color: black;\n          }\n\n          span {\n            color: darken(#6c7e95, 15);\n          }\n\n          img {\n            transform: translateX(2px);\n          }\n        }\n      }\n\n      strong {\n        transition: 0.2s color ease;\n      }\n\n      strong {\n        display: block;\n        font-weight: 600;\n        font-size: 17px;\n        color: #0f1622;\n        margin-bottom: 2px;\n      }\n\n      span {\n        font-size: 13px;\n        letter-spacing: 0.014em;\n        color: #6c7e95;\n      }\n    }\n  }\n\n  .latest {\n    background: linear-gradient(to bottom, #f7f9fc, #fefeff);\n    margin-top: 101px;\n    padding-top: 138px;\n\n    hgroup {\n      margin: 0 auto 72px;\n      max-width: 560px;\n      text-align: center;\n\n      h2 {\n        font-weight: 700;\n        font-size: 32px;\n        letter-spacing: -0.02em;\n      }\n\n      p {\n        margin-top: 12px;\n        font-size: 18px;\n        line-height: 28px;\n        letter-spacing: 0.006em;\n      }\n    }\n\n    .tutorials,\n    .videos {\n      margin-top: 26px;\n      position: relative;\n\n      h3 {\n        font-size: 20px;\n        text-transform: uppercase;\n        letter-spacing: 0.08em;\n        font-weight: 700;\n      }\n\n      .subscribe {\n        position: absolute;\n        color: #3880ff;\n        background: #dfedff;\n        border-radius: 16px;\n        padding: 4px 11px 5px;\n        text-transform: uppercase;\n        font-weight: 500;\n        font-size: 11px;\n        letter-spacing: 0.04em;\n        right: 0;\n        top: -2px;\n\n        ion-icon {\n          margin-right: 1px;\n          font-size: 10px;\n          vertical-align: -5%;\n        }\n      }\n\n      ul {\n        padding: 24px 0px;\n        list-style: none;\n        display: flex;\n        flex-wrap: wrap;\n        justify-content: space-between;\n      }\n\n      li {\n        flex: 0 320px;\n        margin-bottom: 28px;\n\n        @media (max-width: $screen-md-max) {\n          flex: 0 300px;\n        }\n\n        a {\n          display: block;\n          padding: 1px 0 1px 39px;\n          position: relative;\n\n          &::before {\n            background: url(\"/img/community/latest-rss-icons.png\") 0 0 no-repeat;\n            background-size: 28px;\n            height: 28px;\n            width: 28px;\n            content: \"\";\n            position: absolute;\n            top: 0;\n            left: 0;\n            transition: 0.2s transform ease-out;\n          }\n\n          &:hover {\n            strong {\n              color: black;\n            }\n\n            p {\n              color: darken(#51607a, 15);\n            }\n\n            span {\n              color: darken(#8796a9, 15);\n            }\n\n            &::before {\n              transform: translateX(2px);\n            }\n          }\n        }\n\n        strong,\n        p,\n        span {\n          transition: 0.2s color ease;\n        }\n\n        strong {\n          display: block;\n          letter-spacing: -0.018em;\n          font-weight: 600;\n          line-height: 1.75em;\n        }\n\n        p {\n          display: block;\n          color: #51607a;\n          margin-top: 3px;\n          font-size: 13px;\n          line-height: 1.9em;\n          letter-spacing: -0.02em;\n        }\n\n        span {\n          display: block;\n          color: #8796a9;\n          font-size: 12px;\n          margin-top: 12px;\n          letter-spacing: 0.03em;\n        }\n      }\n\n      @media (max-width: $screen-md-max) {\n        ul {\n          margin-left: -15px;\n          margin-right: -15px;\n        }\n\n        li {\n          flex-grow: 1;\n          margin-left: 15px;\n          margin-right: 15px;\n        }\n      }\n    }\n\n    .videos {\n      li a::before {\n        background-position: 0 -28px;\n      }\n    }\n  }\n\n  .education {\n    background: #121b2c url(\"/img/community/community-edu-bg.jpg\") no-repeat;\n    background-position: 50% 0;\n    background-size: 1680px;\n    margin-top: 93px;\n    padding-top: 138px;\n    padding-bottom: 75px;\n\n    h2,\n    h3,\n    h4,\n    p {\n      position: relative;\n      color: white;\n      position: relative;\n      z-index: 1;\n    }\n\n    p,\n    h4 {\n      opacity: 0.8;\n    }\n\n    hgroup {\n      max-width: 580px;\n\n      h2 {\n        font-size: 31px;\n        font-weight: 700;\n      }\n\n      p {\n        font-size: 18px;\n        margin-top: 13px;\n        line-height: 1.6em;\n        letter-spacing: -0.026em;\n      }\n\n      @media (max-width: $screen-sm-max) {\n        text-align: center;\n        margin: 0 auto;\n      }\n    }\n\n    ul {\n      padding: 47px 1px;\n      margin-right: -15px;\n      margin-left: -15px;\n      display: flex;\n      flex-wrap: wrap;\n      list-style: none;\n      justify-content: space-between;\n\n      @media (max-width: $screen-md-max) {\n        justify-content: space-around;\n      }\n    }\n\n    li {\n      flex: 0 240px;\n      height: 230px;\n      margin-bottom: 28px;\n      margin-right: 11px;\n      margin-left: 11px;\n\n      a {\n        padding: 12px 29px;\n        display: block;\n        height: 100%;\n        position: relative;\n\n        &::before {\n          position: absolute;\n          top: 0;\n          right: 0;\n          bottom: 0;\n          left: 0;\n          content: \"\";\n          background: var(--card-bg-color);\n          border-radius: 8px;\n          transition: 0.2s transform ease;\n        }\n\n        &:hover::before {\n          transform: scale3d(1.01, 1.01, 1);\n        }\n      }\n\n      h4 {\n        font-size: 11px;\n        text-transform: uppercase;\n        letter-spacing: 0.15em;\n        margin-bottom: 8px;\n        font-weight: 700;\n      }\n\n      h3 {\n        font-size: 21px;\n        margin-top: 0;\n        font-weight: 700;\n        letter-spacing: -0.01em;\n      }\n\n      p {\n        position: absolute;\n        bottom: 15px;\n        font-size: 12px;\n        left: 28px;\n        right: 28px;\n        letter-spacing: -0.01em;\n        line-height: 1.4em;\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "assets/scss/pages/contact.scss",
    "content": "@import '../vars';\n@import 'bootstrap-sass/assets/stylesheets/bootstrap/variables';\n\n#page-contact {\n  .navbar ~ .banner {\n    background: #6e4a71 no-repeat center top;\n    background-image: url('/img/contact/contact-cta-bg.jpg'),\n                      linear-gradient(to right, #29477d 0%, #a8444e 100%);\n    background-size: cover, 100%;\n    height: 360px;\n  }\n\n  .hero {\n    padding-top: 80px;\n    padding-bottom: 40px;\n\n    p {\n      color: #5d636c;\n      font-size: 18px;\n      line-height: 28px;\n      font-weight: 400;\n    }\n  }\n\n  .topics {\n    display: flex;\n    flex-wrap: wrap;\n    justify-content: space-around;\n\n    a {\n      flex: 0 1 240px;\n      padding: 150px 25px 15px;\n      margin: 0 auto 100px;\n      position: relative;\n      text-align: center;\n      min-height: 265px;\n      min-width: 160px;\n\n      &:before {\n        background: no-repeat top left url('/img/contact/contact-icons.png');\n        background-size: 140px;\n        width: 140px;\n        height: 140px;\n        content: '';\n        position: absolute;\n        top: 38px;\n        left: calc(50% - 75px);\n        transition: transform .4s cubic-bezier(0.155, 1.105, 0.295, 1.12);\n      }\n\n      &:after {\n        position: absolute;\n        top: 0;\n        right: 0;\n        bottom: 0;\n        left: 0;\n        content: '';\n        border: 1px solid #e6ebf2;\n        border-radius: 4px;\n        box-shadow: 0 1px 3px 0 rgba(0, 0, 0, 0.06);\n        transition: all .4s cubic-bezier(0.155, 1.105, 0.295, 1.12);\n      }\n\n      &:hover,\n      &:active {\n        text-decoration: none;\n\n        &:before {\n          transform: translate3d(0, -50px, 0) scale3d(.5, .5, 1);\n        }\n\n        &:after {\n          border-color: #dde3eb;\n          transform: scale(1.05);\n        }\n\n        .detail {\n          opacity: 1;\n          transform: translate3d(0, 0, 0);\n          transition-duration: .2s;\n          transition-timing-function: ease;\n        }\n\n        h3 {\n          transform: translate3d(0, -92px, 0);\n        }\n      }\n\n      h3 {\n        font-size: 18px;\n        position: absolute;\n        font-weight: 600;\n        top: 195px;\n        left: 0;\n        right: 0;\n        color: $blackish;\n        transition: transform .4s cubic-bezier(0.155, 1.105, 0.295, 1.12);\n      }\n\n      .detail {\n        opacity: 0;\n        position: relative;\n        transform: translate3d(0, 35px, 0);\n        transition: opacity .1s linear, transform .1s linear;\n\n        p {\n          line-height: 20px;\n          font-size: 13px;\n          letter-spacing: -0.01em;\n          padding: 0 13px;\n          color: $dark-grey;\n        }\n      }\n\n      &.sales:before {        background-position: left -140px; }\n      &.press:before {        background-position: left -280px; }\n      &.partnerships:before { background-position: left -420px; }\n    }\n  }\n\n  .other {\n    max-width: 875px;\n    padding-bottom: 100px;\n\n    hgroup {\n      width: 49.5%;\n      padding-right: 50px;\n      position: relative;\n      float: left;\n\n      &:last-child {\n        padding-right: 0;\n        padding-left: 50px;\n\n        &:before {\n          content: '';\n          position: absolute;\n          left: 0;\n          top: 15px;\n          bottom: 15px;\n          border-left: 1px solid $whiteish;\n        }\n      }\n\n      h4 {\n        font-size: 16px;\n      }\n\n      p {\n        line-height: 22px;\n        margin-bottom: 3px;\n        color: $dark-grey;\n        font-size: 14px;\n      }\n\n      &:first-child a {\n        margin-right: 18px;\n      }\n\n      .icon {\n        font-size: 20px;\n        position: relative;\n        top: 2px;\n      }\n\n      .twitter { color: #5ea9dc; &:hover { color: lighten(#5ea9dc, 10); }}\n      .facebook { color: #3b5998; &:hover { color: lighten(#3b5998, 15); }}\n      .goolge-plus { color: #e94335; &:hover { color: lighten(#e94335, 15); }}\n      .github { color: #000000; &:hover { color: lighten(#000000, 30); }}\n\n    }\n\n  }\n}\n"
  },
  {
    "path": "assets/scss/pages/developers.scss",
    "content": "@import '../vars';\n@import 'bootstrap-sass/assets/stylesheets/bootstrap/variables';\n\n#page-developers {\n  .cta {\n    background: #111c30 no-repeat center top;\n    background-image: url('/img/developers/cta-bg.png');\n    background-size: cover;\n    margin-bottom: -106px;\n\n    strong {\n      color: white;\n    }\n\n    hgroup {\n      padding-bottom: 140px;\n\n      h1 {\n        padding-left: 70px;\n        position: relative;\n        background: no-repeat left center url('/img/developers/heading-ionic-icon.png');\n        background-size: 61px;\n        display: inline-block;\n        font-size: 33px;\n        font-weight: 700;\n        letter-spacing: 6px;\n        margin-bottom: 25px;\n        padding-top: 10px;\n        text-transform: uppercase;\n      }\n\n      p {\n        font-size: 20px;\n        max-width: 660px;\n        margin: 0 auto;\n      }\n    }\n  }\n\n  section.container {\n    padding-top: 42px;\n    overflow-x: hidden;\n    margin: 0 auto;\n    max-width: 1030px;\n\n    h2 {\n      font-size: 20px;\n      font-weight: 700;\n      min-height: 24px;\n      margin-bottom: 11px;\n      color: $blacker;\n      margin-top: 0;\n    }\n\n    .items {\n      display: flex;\n      flex-wrap: wrap;\n\n      a {\n        flex: 1 1;\n        padding: 182px 25px 48px;\n        margin-bottom: 35px;\n        position: relative;\n        text-align: center;\n        min-height: 238px;\n        min-width: 130px;\n        margin-right: 12px;\n        z-index: 1;\n\n        &:last-child {\n          margin-right: 0;\n        }\n\n        &::before {\n          position: absolute;\n          top: 0;\n          right: 0;\n          bottom: 0;\n          left: 0;\n          content: '';\n          background: white;\n          border-radius: 4px;\n          box-shadow: 0 2px 3px 0 rgba(0, 0, 0, 0.06),\n                      0 0 0 1px rgba(0, 32, 88, 0.06);\n          transition: all .4s cubic-bezier(0.155, 1.105, 0.295, 1.12);\n        }\n\n        &::after {\n          background: no-repeat top left url('/img/developers/ionic-framework-img.png');\n          background-size: 200px;\n          width: 200px;\n          height: 128px;\n          content: '';\n          position: absolute;\n          top: 32px;\n          left: calc(50% - 100px);\n          transition: transform .4s cubic-bezier(0.155, 1.105, 0.295, 1.12);\n        }\n\n        &.platform::after {\n          background-image: url('/img/developers/ionic-services-img.png');\n        }\n\n        &:hover,\n        &:active {\n          text-decoration: none;\n\n          &::before {\n            border-color: #dde3eb;\n            transform: scale(1.03);\n            box-shadow: 0 2px 3px 0 rgba(0, 0, 0, 0.08), 0 0 0 1px rgba(0, 32, 88, 0.1);\n          }\n        }\n\n        hgroup {\n          position: relative;\n          z-index: 5;\n        }\n\n        p {\n          color: #727a87;\n          font-size: 15px;\n          line-height: 22px;\n          max-width: 410px;\n          margin: 0 auto;\n        }\n      }\n    }\n\n    @media (max-width: 525px)  {\n      &.primary .items a,\n      .items a {\n        width: 100%;\n        flex: 1 1 100%;\n        margin-right: 0;\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "assets/scss/pages/enterprise/_index_bak.scss",
    "content": "#page-enterprise {\n  .navbar.transparent ~ .banner {\n    background: #293340 no-repeat center bottom\n      url(\"/img/enterprise/cta-background.jpg\");\n    background-size: cover;\n    padding-top: 300px;\n    padding-bottom: 0;\n    top: -65px;\n    position: relative;\n    display: flex;\n    flex-direction: column;\n    justify-content: space-between;\n    width: 100%;\n\n    hgroup {\n      flex: 0 0 auto;\n      max-width: 780px;\n      position: relative;\n      padding-top: 0;\n      padding-bottom: 0;\n\n      &::before {\n        background: no-repeat 50% 0\n          url(\"/img/enterprise/ionic-enterprise-icon.png\");\n        background-size: 80px;\n        width: 80px;\n        height: 80px;\n        content: \"\";\n        display: block;\n        position: absolute;\n        top: -104px;\n        left: calc(50% - 40px);\n      }\n\n      .btn {\n        margin-top: 28px;\n        text-transform: uppercase;\n        letter-spacing: 0.05em;\n        font-weight: 700;\n        font-size: 14px;\n        line-height: 14px;\n        padding: 18px 20px;\n        color: #3880ff;\n        cursor: pointer;\n      }\n    }\n\n    h1 {\n      font-size: 56px;\n      margin-bottom: 20px;\n      font-weight: 700;\n    }\n\n    h1 em {\n      font-family: \"Georgia\", serif;\n      font-size: 36px;\n      font-style: italic;\n      font-weight: normal;\n      padding: 0 0px 0 8px;\n      position: relative;\n      top: -6px;\n    }\n\n    p {\n      font-size: 22px;\n      font-weight: 500;\n      color: #d6dee8;\n    }\n\n    .logos {\n      background-color: #212a36;\n      overflow: hidden;\n      padding: 34px 0;\n      width: 100%;\n      flex: 1 0 auto;\n      margin-top: 140px;\n      position: relative;\n\n      .container {\n        position: relative;\n        z-index: 2;\n      }\n    }\n\n    .logos__bg {\n      width: 100%;\n      height: 100%;\n      position: absolute;\n      bottom: 0;\n      left: 0;\n      background: no-repeat center bottom\n        url(\"/img/enterprise/cta-background.jpg\");\n      background-size: cover;\n      filter: url(\"#blur\");\n      filter: blur(20px);\n      z-index: 1;\n\n      &:after {\n        display: block;\n        content: \"\";\n        width: 100%;\n        height: 100%;\n        top: 0;\n        left: 0;\n        position: absolute;\n        background: rgba(0, 0, 0, 0.18);\n      }\n    }\n\n    @media (max-width: $screen-sm-min) {\n      padding-top: 310px;\n\n      h1 {\n        font-size: 48px;\n      }\n\n      h1 em {\n        font-size: 30px;\n        top: -6px;\n      }\n\n      p {\n        max-width: 500px;\n        margin-left: auto;\n        margin-right: auto;\n      }\n\n      .logos {\n        padding: 22px 0;\n        margin-top: 70px;\n      }\n    }\n  }\n\n  .logos .container {\n    display: flex;\n    justify-content: space-between;\n    align-items: center;\n\n    &:before,\n    &:after {\n      display: none;\n    }\n\n    @media (max-width: $screen-sm-min) {\n      max-width: 540px;\n      flex-wrap: wrap;\n      justify-content: center;\n      align-items: center;\n\n      .logo {\n        margin: 10px;\n      }\n    }\n  }\n\n  .section__content.logos .container {\n    max-width: 960px;\n\n    @media (max-width: $screen-sm-min) {\n      .logo {\n        margin: 15px;\n      }\n    }\n  }\n\n  .logos .logo {\n    background: url(\"/img/enterprise/logo-sprite.png\") no-repeat;\n    background-size: 324px 381px;\n    background-position: center center;\n\n    &--target {\n      background-position: -167px -6px;\n      width: 22px;\n      height: 22px;\n    }\n    &--verizon {\n      background-position: -167px -46px;\n      width: 79px;\n      height: 18px;\n    }\n    &--marketwatch {\n      background-position: -167px -82px;\n      width: 128px;\n      height: 19px;\n    }\n    &--usarmy {\n      background-position: -167px -122px;\n      width: 52px;\n      height: 18px;\n    }\n    &--ea {\n      background-position: -167px -159px;\n      width: 37px;\n      height: 18px;\n    }\n    &--diesel {\n      background-position: -167px -200px;\n      width: 92px;\n      height: 13px;\n    }\n    &--bmw {\n      background-position: -167px -232px;\n      width: 24px;\n      height: 24px;\n    }\n    &--ibm {\n      background-position: -167px -272px;\n      width: 48px;\n      height: 18px;\n    }\n    &--lendingclub {\n      background-position: -5px -8px;\n      width: 145px;\n      height: 22px;\n    }\n    &--airbus {\n      background-position: -5px -44px;\n      width: 128px;\n      height: 24px;\n    }\n    &--cat {\n      background-position: -5px -81px;\n      width: 41px;\n      height: 24px;\n    }\n    &--study {\n      background-position: -5px -122px;\n      width: 130px;\n      height: 20px;\n    }\n    &--comcast {\n      background-position: -5px -156px;\n      width: 88px;\n      height: 24px;\n    }\n    &--amtrak {\n      background-position: -5px -194px;\n      width: 56px;\n      height: 24px;\n    }\n    &--aaa {\n      background-position: -5px -228px;\n      width: 54px;\n      height: 32px;\n    }\n    &--ge {\n      background-position: -5px -264px;\n      width: 34px;\n      height: 34px;\n    }\n    &--usaa {\n      background-position: -5px -302px;\n      width: 28px;\n      height: 32px;\n    }\n    &--ing {\n      background-position: -5px -343px;\n      width: 87px;\n      height: 22px;\n    }\n  }\n\n  .overview {\n    margin-top: -65px;\n\n    hgroup {\n      text-align: center;\n      max-width: 680px;\n      margin: 0 auto;\n    }\n  }\n\n  .section__content {\n    padding-top: 150px;\n    padding-bottom: 150px;\n\n    & + .section__content {\n      padding-top: 80px;\n    }\n\n    &.overview {\n      padding-top: 120px;\n    }\n\n    & + .section__content.form {\n      padding-top: 30px;\n    }\n\n    &.overview + .section__content {\n      padding-top: 0px;\n    }\n\n    hgroup {\n      position: relative;\n    }\n\n    h2 {\n      font-size: 40px;\n      font-weight: 700;\n      letter-spacing: -0.01em;\n      color: #161a1f;\n      b {\n        font-weight: 700;\n      }\n    }\n\n    h3 {\n      font-size: 32px;\n      line-height: 48px;\n      font-weight: 700;\n      letter-spacing: -0.03em;\n      max-width: 596px;\n      margin-top: 30px;\n      margin-bottom: 80px;\n      color: #161a1f;\n    }\n\n    h4 {\n      font-size: 24px;\n      line-height: 32px;\n      font-weight: 600;\n      color: #161a1f;\n      letter-spacing: -0.02em;\n      margin-bottom: 16px;\n    }\n\n    h4.sm {\n      font-size: 20px;\n      line-height: 26px;\n    }\n\n    h5 {\n      font-size: 20px;\n      font-weight: 600;\n      b {\n        font-weight: 600;\n      }\n    }\n\n    .hgroup-header {\n      display: flex;\n      justify-content: space-between;\n      align-items: flex-end;\n      margin-bottom: 40px;\n\n      h3 {\n        margin-bottom: 0;\n      }\n\n      a {\n        padding-bottom: 8px;\n      }\n    }\n\n    .text-link {\n      transition: color 0.2s;\n      text-transform: uppercase;\n      color: #2880ff;\n      font-weight: 700;\n      font-size: 14px;\n      letter-spacing: 0.08em;\n      display: flex;\n      align-items: center;\n      padding-left: 40px;\n\n      svg {\n        transition: transform 0.2s;\n        width: 15px;\n        height: 16px;\n        position: relative;\n        top: -1px;\n        fill: #2880ff;\n        margin: 0;\n      }\n\n      &:hover {\n        color: lighten(#2880ff, 5%);\n      }\n\n      &:hover svg {\n        transform: translateX(2px);\n      }\n    }\n\n    .two-tone {\n      color: #828e9e;\n\n      b {\n        color: #15191e;\n      }\n    }\n\n    p {\n      font-size: 18px;\n      line-height: 32px;\n    }\n\n    p.lead {\n      font-size: 22px;\n      line-height: 36px;\n      letter-spacing: -0.03em;\n      margin-top: 22px;\n    }\n\n    p.sm {\n      font-size: 16px;\n      line-height: 28px;\n    }\n\n    .row {\n      display: flex;\n      justify-content: space-between;\n\n      &:before,\n      &:after {\n        display: none;\n      }\n    }\n\n    .row .col {\n      padding-left: 15px;\n      padding-right: 35px;\n    }\n\n    &--align-right {\n      hgroup {\n        text-align: right;\n        display: flex;\n        flex-direction: column;\n        align-items: flex-end;\n      }\n    }\n\n    @media (max-width: $screen-sm-max) {\n      padding-top: 100px;\n      padding-bottom: 74px;\n\n      &.overview {\n        padding-top: 80px;\n      }\n\n      .row {\n        flex-direction: column;\n      }\n\n      .row .col + .col {\n        margin-top: 20px;\n      }\n\n      .text-link {\n        position: absolute;\n        top: 0;\n        right: 0;\n      }\n    }\n\n    @media (max-width: $screen-sm-min) {\n      padding-top: 65px;\n\n      & + .section__content {\n        padding-top: 10px;\n\n        &.iv {\n          padding-top: 90px;\n        }\n      }\n\n      h2 {\n        font-size: 36px;\n      }\n\n      .form h2 {\n        max-width: 340px;\n        margin-left: auto;\n        margin-right: auto;\n      }\n\n      h3 {\n        font-size: 28px;\n        line-height: 40px;\n        margin-top: 8px;\n        margin-bottom: 30px;\n      }\n\n      &:not(.overview) hgroup {\n        text-align: left;\n        display: flex;\n        flex-direction: column;\n        align-items: flex-start;\n      }\n\n      h4 {\n        font-size: 20px;\n        line-height: 26px;\n        margin-bottom: 6px;\n      }\n\n      p {\n        font-size: 16px;\n        line-height: 28px;\n      }\n\n      p.lead {\n        font-size: 20px;\n        line-height: 32px;\n      }\n\n      .hgroup-header {\n        margin-bottom: 40px;\n\n        h3 {\n          margin-top: 20px;\n        }\n      }\n\n      .text-link {\n        padding-top: 11px;\n      }\n    }\n\n    @media (max-width: 420px) {\n      .hgroup-header {\n        flex-direction: column;\n        align-items: flex-start;\n      }\n      .text-link {\n        position: static;\n        padding: 20px 0 0;\n      }\n    }\n  }\n\n  .framework-section,\n  .pro-section,\n  .support-section {\n    position: relative;\n\n    &:after {\n      transition: opacity 1s, transform 1s;\n      display: block;\n      content: \"\";\n      background-repeat: none;\n      position: absolute;\n      z-index: -1;\n      background-size: contain;\n      top: 50%;\n      transform-origin: center top;\n      transform: translateY(-52%);\n      opacity: 0;\n    }\n\n    &.animate-bg-in:after {\n      transform: translateY(-50%);\n      opacity: 1;\n    }\n  }\n\n  .framework-section:after {\n    background-image: url(\"/img/enterprise/framework-bg.jpg\");\n    width: 480px;\n    height: 749px;\n    right: 80px;\n  }\n\n  .pro-section:after {\n    background-image: url(\"/img/enterprise/pro-bg.jpg\");\n    width: 1274px;\n    height: 844px;\n    left: -80px;\n  }\n\n  .support-section:after {\n    background-image: url(\"/img/enterprise/support-bg.jpg\");\n    width: 564px;\n    height: 690px;\n    right: 80px;\n  }\n\n  @media (max-width: $screen-sm-max) {\n    .framework-section:after {\n      top: 0;\n      transform: translateY(0);\n      right: 0px;\n    }\n\n    .pro-section:after {\n      top: 50px;\n      transform: translateY(0);\n      left: -120px;\n    }\n\n    .support-section:after {\n      top: 0;\n      transform: translateY(0);\n      right: -70px;\n    }\n  }\n\n  @media (max-width: $screen-sm-min) {\n    .framework-section:after,\n    .pro-section:after,\n    .support-section:after {\n      display: none;\n    }\n  }\n\n  .section-conten + .iv {\n    padding-top: 90px;\n  }\n\n  .iv {\n    background: #152b40;\n    background: url(\"/img/enterprise/bg-pattern.png\") repeat 50% 50%,\n      linear-gradient(to right, #102132 0%, #1f3d5a 100%);\n    background-size: 512px, 100%;\n    margin-top: 32px;\n    padding-bottom: 85px;\n    margin-bottom: 64px;\n\n    hgroup {\n      padding-left: 139px;\n      position: relative;\n\n      &::before {\n        background: url(\"/img/enterprise/identity-vault-icon.png\") repeat 0 0;\n        background-size: 90px;\n        height: 90px;\n        width: 90px;\n        position: absolute;\n        content: \"\";\n        top: 5px;\n        left: 15px;\n      }\n    }\n\n    strong {\n      text-transform: uppercase;\n      font-size: 9px;\n      letter-spacing: 0.23em;\n      color: #809ab3;\n    }\n\n    h2 {\n      color: white;\n      margin-top: 15px;\n      font-size: 32px;\n      margin-bottom: 3px;\n    }\n\n    p {\n      color: #98cdff;\n      margin-bottom: 0;\n      font-size: 18px;\n      letter-spacing: 0.024em;\n      font-weight: 500;\n    }\n\n    .btn {\n      margin-top: 48px;\n      margin-right: 0;\n      text-transform: uppercase;\n      font-size: 14px;\n      font-weight: 700;\n      padding: 14px 16px 11px;\n      letter-spacing: 0.06em;\n      margin-left: 20px;\n\n      i {\n        margin-left: 1px;\n        vertical-align: -3px;\n        font-size: 21px;\n      }\n    }\n\n    @media (max-width: $screen-xs-max) {\n      hgroup:not(.overview) {\n        text-align: center;\n        padding-left: 15px;\n        display: block;\n        padding-bottom: 80px;\n\n        &::before {\n          display: none;\n        }\n      }\n\n      .btn {\n        position: absolute;\n        bottom: 0px;\n        left: calc(50% - 102px);\n        margin-left: 0;\n      }\n    }\n  }\n\n  .form {\n    padding-top: 60px;\n    max-width: 960px;\n    margin: 0 auto;\n\n    h2 {\n      text-align: center;\n      margin-bottom: 60px;\n    }\n  }\n\n  .get-started {\n    background: #f5f7fc;\n    overflow: auto;\n\n    .container {\n      align-items: center;\n      display: flex;\n      margin-bottom: 110px;\n      margin-top: 110px;\n    }\n\n    hgroup {\n      letter-spacing: -0.025em;\n      flex-grow: 1;\n    }\n\n    h2 {\n      color: #24282e;\n      font-size: 28px;\n      font-weight: 700;\n      letter-spacing: inherit;\n      margin: 0 0 5px;\n    }\n\n    p {\n      color: #4f5864;\n      font-size: 20px;\n      font-weight: 600;\n      margin: 0;\n    }\n\n    .btn {\n      font-size: 16px;\n      font-weight: 700;\n      padding: 15px 18px 12px;\n    }\n\n    @media (max-width: $screen-sm-max) {\n      .form {\n        padding-top: 24px;\n      }\n      .container {\n        display: block;\n        text-align: center;\n      }\n      h2 {\n        margin-bottom: 10px;\n      }\n\n      hgroup {\n        padding-bottom: 16px;\n      }\n\n      .btn-group {\n        padding-bottom: 96px;\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "assets/scss/pages/enterprise/_shared.scss",
    "content": "@import './components/ee-hero';\n\n.ee-main {\n  margin-top: 0;\n\n  section {\n    margin-bottom: 200px;\n  }\n\n  .left,\n  .right,\n  .center {\n    display: flex;\n\n    &::before,\n    &::after {\n      display: none;\n    }\n  }\n\n  .left,\n  .right {\n    .content {\n      max-width: 480px;\n\n      @media (max-width: $screen-xs-max) {\n        max-width: 100%;\n        text-align: center;\n\n        li {\n          text-align: left;\n        }\n      }\n    }\n  }\n\n  .left {\n    flex-direction: row;\n\n    .graphics {\n      margin-left: auto;\n    }\n  }\n\n  .right {\n    flex-direction: row-reverse;\n    margin-left: auto;\n\n    .graphics {\n      margin-right: auto;\n    }\n  }\n\n  .center {\n    flex-direction: column;\n    align-items: center;\n    text-align: center;\n\n    .content {\n      width: 894px;\n      max-width: 100%;\n    }\n  }\n\n  .full {\n    .content {\n      max-width: 568px;\n    }\n  }\n\n\n  @media (max-width: $screen-xs-max) {\n    .right,\n    .left {\n      flex-direction: column-reverse;\n      align-items: center;\n\n      .graphics {\n        margin-bottom: 24px;\n        margin-left: 0;\n        margin-right: 0;\n      }\n    }\n\n    section {\n      margin-bottom: 100px;\n    }\n  }\n\n  .graphics {\n    justify-content: flex-end;\n\n    img {\n      width: 100%;\n    }\n  }\n\n  h2 {\n    font-size: 44px;\n    line-height: 51px;\n    letter-spacing: -0.03em;\n\n    &:first-child {\n      margin-top: 0;\n    }\n  }\n\n  .ee-section__title {\n    font-family: $font-family-monospace;\n    font-style: normal;\n    font-weight: bold;\n    font-size: 12px;\n    line-height: 23px;\n    letter-spacing: 0.14em;\n    text-transform: uppercase;\n    color: #5B708B;\n    margin-top: 0;\n  }\n\n  .ee-section__cta {\n    display: inline-block;\n    font-size: 18px;\n    font-weight: 500;\n    margin-top: 16px;\n  }\n\n  p {\n    font-size: 20px;\n    line-height: 31px;\n    letter-spacing: -0.02em;\n    color: #5B708B;\n    margin-top: 18px;\n\n    &.sm {\n      font-size: 16px;\n      line-height: 29px;\n      letter-spacing: -0.01em;\n    }\n  }\n\n  ul:not(.frameworks) {\n    margin-top: 54px;\n  }\n\n  .content {\n    ul {\n      padding-left: 0;\n    }\n\n    li {\n      font-size: 16px;\n      line-height: 23px;\n      letter-spacing: -0.02em;\n      color: #1A232F;\n      margin-bottom: 40px;\n      padding-left: 30px;\n      list-style: none;\n      position: relative;\n\n      &::before {\n        background-image: url('/img/enterprise/check.svg');\n        background-size: 100%;\n        content: '';\n        height: 10px;\n        width: 13px;\n        position: absolute;\n        left: 0;\n        top: 8px;\n      }\n    }\n  }\n\n  .features {\n    display: grid;\n    grid-template-columns: 1fr 1fr 1fr;\n    grid-column-gap: 64px;\n    grid-row-gap: 24px;\n    padding: 0;\n\n    li {\n      list-style: none;\n    }\n\n    .icon {\n      margin-bottom: 16px;\n      width: 48px;\n    }\n\n    @media (max-width: $screen-sm-max) {\n      grid-template-columns: 1fr 1fr;\n    }\n\n    @media (max-width: 500px) {\n      grid-template-columns: 1fr;\n    }\n  }\n\n  .cta-card {\n    background: $blue;\n    border-radius: 12px;\n    padding: 72px 72px 60px;\n    background-size: cover;\n    color: white;\n\n    .ee-section__title,\n    p {\n      color: #CED6E0;\n    }\n  }\n}\n\n#how-to {\n  margin-bottom: 0;\n  position: relative;\n  padding-top: 140px;\n\n  &::before {\n    position: absolute;\n    top: 0;\n    width: 100vw;\n    border-top: 1px solid rgba(#92A1B3, .3);\n    content: '';\n    display: block;\n  }\n}\n\n.cards--red-v-blue {\n  display: flex;\n  text-align: left;\n  justify-content: center;\n  margin-top: 38px;\n\n  &__card {\n    background: #7CABFF;\n    border-radius: 8px;\n    padding: 40px 40px 34px;\n    display: flex;\n    flex-direction: column;\n    align-items: flex-start;\n    margin-right: 24px;\n    flex: 0 1 460px;\n    border-radius: 8px;\n\n    &:last-child {\n      margin-right: 0;\n    }\n\n    &:nth-child(2) {\n      background: #F88D8D;\n\n      .btn {\n        background: rgba(#F45454, .5);\n      }\n    }\n  }\n\n  h3 {\n    font-size: 24px;\n    line-height: normal;\n    letter-spacing: -0.02em;\n    color: white;\n    margin-top: 0;\n  }\n\n  p {\n    font-size: 18px;\n    line-height: 26px;\n    letter-spacing: -0.02em;\n    color: rgba(white, .7);\n    margin-top: 0;\n    margin-bottom: 22px;\n  }\n\n  .btn {\n    margin-top: auto;\n    font-size: 14px;\n    line-height: 22px;\n    letter-spacing: 0.09em;\n    text-transform: uppercase;\n    padding: 10px 14px;\n    font-weight: 600;\n    border-radius: 8px;\n    background: rgba(#3880FF, .5);\n\n    ion-icon {\n      display: inline-block;\n      height: 14px;\n      width: 14px;\n      vertical-align: -2px;\n    }\n  }\n\n  @media (max-width: $screen-xs-max) {\n    flex-direction: column;\n    align-items: center;\n\n    &__card {\n      flex: auto;\n      margin-right: 0;\n      margin-top: 20px;\n      max-width: 460px;\n    }\n  }\n}\n\naside {\n  background: linear-gradient(180deg, #F9FAFB 0%, #FFFFFF 100%);\n  margin-top: -60px;\n  padding-top: 200px;\n  padding-bottom: 120px;\n\n  p {\n    color: #414D5C;\n  }\n\n  .content {\n    max-width: 432px;\n    margin: 0 auto;\n    text-align: center;\n    display: block;\n  }\n}\n\n.ee-get-started {\n  max-width: 700px;\n\n  h3 {\n    color: #414D5C;\n  }\n}\n\n\n.ee-main,\n.resources {\n  .features,\n  .cards {\n    li {\n      p {\n        font-size: 16px;\n        line-height: 29px;\n        letter-spacing: -0.01em;\n        color: #73849A;\n        margin-top: 0;\n      }\n\n      h4 {\n        font-size: 20px;\n        line-height: normal;\n        letter-spacing: -0.02em;\n        color: #020814;\n        font-weight: 600;\n      }\n    }\n  }\n}\n\n.resources {\n  .cards {\n    margin-top: 0 !important;\n    text-align: left;\n    flex-wrap: wrap;\n\n    .img-wrapper {\n      border-radius: 6px;\n\n      + h4 {\n        margin-top: 24px;\n      }\n    }\n\n    // a little extra spacing between cards on the largest width\n    @media (min-width: $screen-lg-min) {\n      margin-left: -40px;\n      margin-right: -40px;\n\n      li {\n        padding: 40px;\n      }\n    }\n  }\n\n  .resources__customer-logos {\n    display: flex;\n    margin: 26px auto 0;\n    padding: 0;\n    justify-content: space-between;\n    max-width: 780px;\n    width: 100%;\n\n    li {\n      background: url('/img/enterprise/customer-logos.png');\n      background-size: 428px 46px;\n      background-repeat: no-repeat;\n      display: block;\n      height: 46px;\n    }\n\n    @media (max-width: $screen-sm) {\n      justify-content: center;\n      flex-wrap: wrap;\n      max-width: 460px;\n\n      li {\n        margin: 20px;\n      }\n    }\n\n    .mastercard {\n      width: 58px;\n    }\n    .nationwide {\n      background-position: -58px 0;\n      width: 33px;\n    }\n    .uniqlo {\n      background-position: -91px 0;\n      width: 65px;\n    }\n    .ibm {\n      background-position: -156px 0;\n      width: 64px;\n    }\n    .ing {\n      background-position: -222px 0;\n      width: 103px;\n    }\n    .sap {\n      background-position: -326px 0;\n      width: 56px;\n    }\n    .nasa {\n      background-position: -380px 0;\n      width: 50px;\n    }\n\n  }\n}\n"
  },
  {
    "path": "assets/scss/pages/enterprise/auth-connect.scss",
    "content": "@import '../../vars';\n@import 'bootstrap-sass/assets/stylesheets/bootstrap/variables';\n\n@import './shared';\n@import './solutions/shared';\nhtml {\n  height: auto;\n}\nbody {\n  // overflow: hidden;\n}\n\n@keyframes spin-in {\n  0% {\n    transform: \n      scale3d(.9, .9, 1)\n      rotate(-10deg);\n    opacity: 0;\n  }\n\n  50% {\n    opacity: 1;\n  }\n\n  100% {\n    transform: scale3d(1, 1, 1) rotate(0deg);\n    opacity: 1;\n  }\n}\n\n#page-auth-connect {\n  ionic-sub-header .btn {\n    background: #00CEAB;\n  }\n\n  .top {\n    position: relative;\n    .btn {\n      margin-top: 26px;\n    }\n  }\n}\n\n// .dummy-container {\n//   margin-block-start: -120px;\n// }\n\n#dummy-element {\n  width: 100%;\n  height: 240px;\n  display: none;\n  position: relative;\n  margin-block-end: 94px;\n  z-index: -1;\n  @media screen and (max-width: $screen-sm-max) {\n    display: inline-block;\n  }\n}\n\n.cta {\n  clear: left;\n  h3 {\n    color: #00CEAB;\n  }\n}\n\n#promo--how-to {\n  padding-top: 0;\n\n  &::before {\n    display: none;\n  }\n\n  .content {\n    margin-top: 0;\n    margin-bottom: 0;\n  }\n}\n\n#sticky-bar {\n  li.active a:not(.btn) {\n    color: $green;\n  }\n\n  @media (max-width: $screen-sm-max) {\n    a {\n      letter-spacing: 0;\n    }\n  }\n}\n\n#powerful-api {\n  .graphics {\n    max-width: 568px;\n\n    @media (max-width: $screen-sm-max) {\n      max-width: 100%;\n\n      img {\n        max-width: 100%;\n        height: auto;\n      }\n    }\n  }\n}\n\n#promo--how-to {\n  h2 {\n    text-align: center;\n  }\n}"
  },
  {
    "path": "assets/scss/pages/enterprise/components/_ee-hero.scss",
    "content": ".ee-hero {\n  max-width: 640px;\n  padding-top: 130px;\n  padding-bottom: 160px;\n\n  &::before,\n  &::after {\n    display: none;\n  }\n\n  h1 {\n    font-size: 52px;\n    line-height: 62px;\n    max-width: 930px;\n    letter-spacing: -0.03em;\n\n    color: #020814;\n    margin-top: 0;\n    margin-bottom: 16px;\n  }\n\n  h4 {\n    font-family: $font-family-monospace;\n    font-weight: bold;\n    font-size: 13px;\n    line-height: 26px;\n    letter-spacing: 0.14em;\n    text-transform: uppercase;\n    color: #92a1b3;\n    margin-bottom: 29px;\n  }\n\n  p {\n    font-size: 24px;\n    font-weight: 400;\n    line-height: 36px;\n    letter-spacing: -0.04em;\n    color: rgba(#27323f, 0.8);\n  }\n\n  .btn {\n    padding-left: 24px;\n    padding-right: 20px;\n    padding-top: 18px;\n    padding-bottom: 18px;\n    font-size: 14px;\n    margin-top: 16px;\n    line-height: 20px;\n    letter-spacing: 0.08em;\n    color: white;\n    text-transform: uppercase;\n    font-weight: 700;\n    background: #3880ff;\n    box-shadow: 0px 2px 4px rgba(2, 8, 20, 0.1),\n      0px 1px 2px rgba(2, 8, 20, 0.08);\n    border-radius: 210px;\n    display: flex;\n    align-items: center;\n\n    &::after {\n      background-image: url('data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"white\" viewBox=\"0 0 512 512\"><path d=\"M85 277.375h259.704L225.002 397.077 256 427l171-171L256 85l-29.922 29.924 118.626 119.701H85v42.75z\"/></svg>');\n      background-size: 100%;\n      content: \"\";\n      height: 20px;\n      width: 20px;\n      display: block;\n      margin-left: 8px;\n      transform: translateY(-1px);\n    }\n\n    &:hover {\n      background-color: #4f8bf5;\n    }\n  }\n\n  &--large {\n    h1 {\n      font-size: 62px;\n      line-height: 69px;\n    }\n  }\n\n  &--wide {\n    max-width: 960px;\n  }\n\n  &--centered {\n    display: flex;\n    flex-direction: column;\n    justify-content: center;\n    align-items: center;\n    text-align: center;\n    margin-left: auto;\n    margin-right: auto;\n  }\n\n  @media (max-width: $screen-xs-max) {\n    padding-top: 70px;\n    padding-bottom: 0;\n\n    h1 {\n      font-size: 44px;\n      line-height: 52px;\n    }\n\n    &--large h1 {\n      font-size: 50px;\n      line-height: 60px;\n    }\n  }\n\n  @media (max-width: $screen-xs) {\n    h1 {\n      font-size: 36px;\n      line-height: 44px;\n      margin-bottom: 6px;\n    }\n\n    &--large h1 {\n      font-size: 42px;\n      line-height: 52px;\n    }\n\n    .btn {\n      margin-top: 8px;\n    }\n  }\n}\n"
  },
  {
    "path": "assets/scss/pages/enterprise/contact.scss",
    "content": "@import '../../vars';\n@import 'bootstrap-sass/assets/stylesheets/bootstrap/variables';\n@import 'shared';\n\n.ee-hero {\n  padding-bottom: 40px;\n}\n\nmain {\n  margin-top: 0;\n  margin-bottom: 140px;\n}\n"
  },
  {
    "path": "assets/scss/pages/enterprise/customers.scss",
    "content": "@import '../../vars';\n@import 'bootstrap-sass/assets/stylesheets/bootstrap/variables';\n@import 'shared';\n\nimg {\n  height: auto;\n}\n\n.ee-hero {\n  max-width: 714px;\n  padding-bottom: 62px;\n  h1 {\n    font-size: 64px;\n    font-weight:bold;\n    line-height: 110%;\n    letter-spacing: -0.03em;\n    color: #010610;\n  }\n  p, a {\n    font-size: 24px;\n    line-height: 160%;\n    letter-spacing: -0.04em;\n    opacity: 0.9;\n    font-family: $font-family-inter;\n  }\n  p {\n    color: #414D5C;\n    margin: 0px;\n    font-weight: 400;\n  }\n  a{\n    color: #3880FF;\n    font-weight: 300;\n  }\n}\n#good-company {\n  h2 {\n    color: #020814;\n    font-weight: 600;\n    margin-bottom: 24px;\n  }\n\n  p {\n    font-size: 20px;\n    line-height: 160%;\n    letter-spacing: -0.03em;\n    color: #414D5C;\n  }\n}\n.ee-main {\n  padding-top: 150px;\n  .container {\n    margin-top: 0 !important;\n    margin-bottom: 0 !important;\n  }\n  h2 {\n    font-weight: 600;\n    font-size: 48px;\n    line-height: 112%;\n    letter-spacing: -0.04em;\n    color: #020814;\n  }\n  .left .spacer {\n    flex-grow:1;\n    max-width: 32px;\n  }\n  .right .spacer {\n\n  }\n  .left,\n  .right {\n    .content {\n      max-width: 420px;\n    }\n    .graphics {\n      margin: 0;\n    }\n  }\n  #companies-list {\n    hgroup {\n      margin-block-end: 86px;\n\n      p {\n        color: #414D5C;\n        margin-block-end:0;\n        letter-spacing: -.03em;\n        line-height: 160%;\n      }\n    }\n    .cards {\n      display:grid;\n      grid-template-columns: repeat(auto-fit, 296px);\n      justify-content: space-between;\n      row-gap: 62px;\n      margin: 0;\n      \n      li {\n        // max-width: 296px;\n        padding: 0;\n  \n        img {\n          height: auto;\n          margin-block-end: 32px;\n        }\n  \n        h4 {\n          margin-block-start: 0;\n          margin-block-end: 12px;\n          color: #010610;\n          font-family: $font-family-inter;\n          font-weight: 500;\n        }\n        p {\n          line-height: 180%;\n          color: #616E7E;\n        }\n      }    \n    }\n  }\n  \n\n  \n  .left,\n  .right {\n    align-items: center;\n\n    .graphics {\n      width: calc(100% - 520px);\n      max-width: 560px;\n\n      img {\n        max-width: 100%;\n      }\n\n      @media (max-width: $screen-xs-max) {\n        position:relative;\n        left: 24px;\n        width: 320px;\n        max-width: 100%;\n      }\n    }\n  }\n\n  section:first-child {\n    padding-bottom: 0;\n  }\n\n  .ee-section-wrapper{\n  \n    section {\n      justify-content:center;\n      padding-top: 120px;\n      padding-bottom: 120px;\n\n      h2 {\n        margin-bottom: 24px;\n      }\n    }\n\n    aside {\n      padding-top: 200px;\n      background: none;\n      padding-bottom: 0px;\n    }\n  }\n  p {\n    line-height: 165.6%;\n    &.sm {\n      color: #73849A;\n    }\n  }\n}\n\n#companies {\n  list-style: none;\n  padding: 0;\n  position: relative;\n  height: 440px;\n  margin-bottom: 326px;\n\n  @media (max-width: $screen-xs-max) {\n    left: -50px;\n  }\n\n  li {\n    position: absolute;\n    top: 0;\n    left: 0;\n    animation: fadeInUp 1s ease-out forwards;\n    opacity: 0;\n\n    &:nth-child(1) {\n      left: 40%;\n      animation-delay: .8s;\n    }\n\n    &:nth-child(2) {\n      left: 74%;\n      animation-delay: .9s;\n    }\n\n    &:nth-child(3) {\n      left: 96%;\n      top: 48%;\n      animation-delay: 1s;\n    }\n\n    &:nth-child(4) {\n      left: 5.5%;\n      top: 2.5%;\n      animation-delay: 1.1s;\n    }\n\n    &:nth-child(5) {\n      left: 55.5%;\n      top: 39.5%;\n      animation-delay: 1.2s;\n    }\n\n    &:nth-child(6) {\n      left: 46%;\n      top: 97%;\n      animation-delay: 1.3s;\n    }\n\n    &:nth-child(7) {\n      left: 76%;\n      top: 78%;\n      animation-delay: 1.4s;\n    }\n\n    &:nth-child(8) {\n      left: 10%;\n      top: 86.5%;\n      animation-delay: 1.5s;\n    }\n\n    &:nth-child(9) {\n      left: 25%;\n      top: 43%;\n      animation-delay: 1.6s;\n    }\n\n    &:nth-child(10) {\n      left: -10.5%;\n      top: 47.5%;\n      animation-delay: 1.7s;\n    }\n  }\n}\n\n.resources hgroup {\n  flex-direction: column;\n  align-items: flex-start;\n  margin-bottom: 32px;\n\n  p {\n    max-width: 600px;\n  }\n}\n\n#good-company {\n  \n  h2 {\n    color: #020814;\n    font-size: 48px;\n    letter-spacing: -.03em;\n  }\n\n  p {\n    max-width: 512px;\n    margin: 0 auto;\n  }\n}\n\n#comp86400 {\n  .logo {\n    width: 137px;\n    height: 32px;\n  }\n\n  .graphics {\n    img {\n      width: 546px;\n    }\n  }\n}\n\n#sworkit {\n  .logo {\n    width: 200px;\n    height: 34px;\n  }\n\n  .graphics {\n    img {\n      width: 560px;\n    }\n  }\n}\n\n#instant-pot {\n  .logo {\n    width: 193px;\n    height: 36px;\n  }\n\n  .graphics {\n    img {\n      width: 546px;\n    }\n  }\n}\n\n#shipt {\n  .logo {\n    width: 148px;\n    height: 50px;\n  }\n\n  .graphics {\n    img {\n      width: 546px;\n    }\n  }\n}\n\n#untappd {\n  .logo {\n    width: 192px;\n    height: 32px;\n  }\n\n  .graphics {\n    img {\n      width: 560px;\n    }\n  }\n}\n\n"
  },
  {
    "path": "assets/scss/pages/enterprise/identity-vault.scss",
    "content": "@import \"../../vars\";\n@import \"bootstrap-sass/assets/stylesheets/bootstrap/variables\";\n\n@import \"./shared\";\n@import \"./solutions/shared\";\n\n#page-identity-vault {\n  img {\n    height: auto;\n  }\n\n  #sticky-bar {\n    li.active a:not(.btn) {\n      color: $navy;\n    }\n  }\n\n  ionic-sub-header .btn {\n    background: $navy;\n  }\n\n  main {\n    font-family: $font-family-inter;\n    overflow: visible;\n\n    h2 {\n      font-size: 40px;\n      line-height: 48px;\n      letter-spacing: -0.04em;\n      color: #020814;\n      font-weight: 600;\n    }\n\n    p,\n    hgroup p + p {\n      font-style: normal;\n      font-weight: normal;\n      font-size: 16px;\n      line-height: 28px;\n      letter-spacing: -0.03em;\n      color: #5b708b;\n    }\n\n    hgroup p,\n    p.lg,\n    h5 {\n      font-size: 20px;\n      line-height: 32px;\n      letter-spacing: -0.03em;\n      color: #4e5b6a;\n\n      strong {\n        font-weight: 500;\n        color: #020814;\n      }\n    }\n\n    h5 {\n      font-weight: 600;\n      color: #020814;\n      margin-bottom: 0;\n      letter-spacing: -0.015em;\n    }\n\n    section {\n      margin-top: 0;\n      margin-bottom: 0;\n\n      @media (max-width: $screen-xs-max) {\n        &,\n        &.center {\n          .content {\n            text-align: left;\n          }\n        }\n      }\n    }\n\n    .checkmark-list {\n      display: flex;\n      flex-wrap: wrap;\n      justify-content: space-between;\n      align-items: center;\n\n      li {\n        padding-left: 42px;\n        position: relative;\n        list-style: none;\n        font-style: normal;\n        font-weight: normal;\n        font-size: 16px;\n        line-height: 26px;\n        letter-spacing: -0.02em;\n        color: #616e7e;\n        margin-bottom: 18px;\n\n        &::before {\n          background: url(\"/img/enterprise/identity-vault/sprite-checkmark.png\")\n            0 bottom no-repeat;\n          background-size: 24px;\n          width: 24px;\n          height: 24px;\n          position: absolute;\n          left: 0;\n          top: 2px;\n          content: \"\";\n        }\n      }\n    }\n\n    .contact-sales {\n      font-size: 16px;\n      font-weight: 500;\n      letter-spacing: -0.03em;\n      margin-top: 9px;\n      display: inline-block;\n      text-decoration: none;\n\n      ion-icon {\n        font-size: 16px;\n        vertical-align: -3px;\n        display: inline-block;\n        transition: 0.3s transform ease;\n      }\n\n      &:hover,\n      &:focus,\n      &:active {\n        text-decoration: none;\n\n        ion-icon {\n          transform: translateX(3px);\n        }\n      }\n    }\n  }\n\n  .top {\n    margin-top: -172px;\n    padding-top: 234px;\n    min-height: 926px;\n\n    .container {\n      position: relative;\n\n      &::after {\n        background: url(\"/img/enterprise/identity-vault/hero-img.png\") 0 0\n          no-repeat;\n        background-size: 100%;\n        width: 560px;\n        height: 728px;\n        content: \"\";\n        display: block;\n        position: absolute;\n        right: -42px;\n        top: -50px;\n      }\n    }\n\n    hgroup {\n      max-width: 502px;\n    }\n\n    h1 {\n      font-size: 64px;\n      line-height: 70px;\n      letter-spacing: -0.03em;\n      color: #020814;\n    }\n\n    h3 {\n      color: #144882;\n      margin-top: 15px;\n      font-style: normal;\n      font-weight: 600;\n      font-size: 24px;\n      line-height: 36px;\n      letter-spacing: 0.06em;\n      text-transform: uppercase;\n      margin-bottom: 48px;\n      font-family: $font-family-inter;\n\n      svg {\n        vertical-align: -24px;\n        margin-right: 10px;\n      }\n    }\n\n    p {\n      font-style: normal;\n      font-weight: normal;\n      font-size: 24px;\n      line-height: 38px;\n      letter-spacing: -0.03em;\n      color: rgba(#414d5c, 0.9);\n    }\n\n    .btn {\n      margin-top: 26px;\n      padding: 14px 17px 12px 16px;\n      font-weight: 700;\n      font-size: 14px;\n      letter-spacing: 0.08em;\n      text-transform: uppercase;\n      margin-bottom: 80px;\n      background: $navy;\n\n      &::after {\n        font-family: \"Ionicons\";\n        content: \"\";\n        font-size: 23px;\n        font-weight: 400;\n        vertical-align: -4px;\n        margin-left: 5px;\n      }\n    }\n\n    @media (max-width: $screen-md-max) {\n      hgroup {\n        max-width: 420px;\n      }\n    }\n\n    @media (max-width: $screen-sm-max) {\n      hgroup {\n        max-width: 100%;\n      }\n\n      h1,\n      h3 {\n        max-width: 460px;\n      }\n\n      .container::after {\n        width: 294px;\n        height: 380px;\n        right: -31px;\n        top: -80px;\n      }\n    }\n\n    @media (max-width: $screen-xs-max) {\n      padding-top: 400px;\n\n      .container::after {\n        width: 147px;\n        height: 190px;\n        right: calc(50% - 95px);\n        top: -190px;\n      }\n\n      h1,\n      h3 {\n        max-width: 100%;\n      }\n    }\n  }\n\n  .gandalf {\n    padding-top: 191px;\n    margin-bottom: 80px;\n    display: block;\n\n    .split {\n      display: flex;\n      align-items: flex-end;\n      justify-content: space-between;\n      flex-wrap: wrap;\n\n      > hgroup {\n        flex: 0 1 464px;\n      }\n    }\n\n    h2 {\n      margin-top: 7px;\n      font-size: 48px;\n      line-height: 58px;\n      margin-bottom: 33px;\n      font-weight: 700;\n    }\n\n    ul {\n      flex: 0 1 392px;\n      margin-bottom: 25px;\n    }\n\n    @media (max-width: $screen-sm-max) {\n      .split {\n        display: block;\n\n        > div {\n          text-align: center;\n        }\n      }\n\n      li {\n        top: 0;\n      }\n    }\n\n    figure {\n      background: #f3f5f8;\n      border-radius: 14px;\n      padding: 24px 30px;\n      margin-top: 22px;\n      position: relative;\n      min-height: 278px;\n\n      &::before,\n      &::after {\n        background: url(\"/img/enterprise/identity-vault/iv-diagram-states.png\")\n          0 0 no-repeat;\n        background-size: 100%;\n        width: 980px;\n        height: 215px;\n        position: absolute;\n        left: 21px;\n        top: 24px;\n        bottom: 0;\n        pointer-events: none;\n        content: \"\";\n        transition: 0.2s opacity, 0.2s transform ease-out;\n      }\n\n      &::after {\n        background-position: 0 100%;\n        opacity: 0;\n        height: 216px;\n        transform: scale3d(1.05, 1.05, 1);\n      }\n\n      strong {\n        font-weight: 600;\n        font-size: 15px;\n      }\n\n      a {\n        background: #eee;\n        border-radius: 10px;\n        height: 18px;\n        width: 28px;\n        display: inline-block;\n        margin-left: 13px;\n        vertical-align: -4px;\n        box-shadow: 0 0 4px inset rgba(0, 0, 0, 0.1);\n        transition: 0.2s border-color;\n        position: relative;\n        cursor: pointer;\n\n        &::before {\n          background: white;\n          width: 16px;\n          height: 16px;\n          content: \"\";\n          box-shadow: 0 1px 4px rgba(0, 0, 0, 0.1);\n          position: absolute;\n          top: 1px;\n          left: 2px;\n          border-radius: 9px;\n          transition: 0.2s transform ease;\n        }\n      }\n\n      &.active {\n        &::before {\n          opacity: 0;\n          transform: scale3d(1.05, 1.05, 1);\n        }\n\n        &::after {\n          opacity: 1;\n          transform: none;\n        }\n\n        a {\n          background-color: #5daffe;\n\n          &::before {\n            transform: translate3d(9px, 0, 0);\n          }\n        }\n      }\n\n      @media (max-width: $screen-md-max) {\n        min-height: 244px;\n\n        &::before,\n        &::after {\n          width: 896px;\n          height: 196px;\n        }\n      }\n\n      @media (max-width: $screen-sm-max) {\n        min-height: 194px;\n\n        &::before,\n        &::after {\n          width: 678px;\n          height: 149px;\n        }\n      }\n\n      @media (max-width: $screen-xs-max) {\n        display: none;\n      }\n    }\n  }\n\n  .points {\n    margin-bottom: 100px;\n\n    hgroup {\n      margin-top: 178px;\n      margin-bottom: 0;\n      max-width: 772px;\n    }\n\n    h2 {\n      margin-bottom: 9px;\n    }\n\n    ul {\n      display: flex;\n      flex-wrap: wrap;\n      padding: 0;\n      list-style: none;\n      padding-top: 56px;\n      justify-content: space-between;\n    }\n\n    li {\n      flex: 0 0 320px;\n      padding-left: 0;\n      padding-top: 69px;\n      margin-left: 1px;\n      position: relative;\n      margin-bottom: 33px;\n\n      @media (max-width: $screen-md-max) {\n        flex-basis: 256px;\n      }\n\n      &::before {\n        background: url(\"/img/enterprise/identity-vault/benefits-icons.png\") 0 0\n          no-repeat;\n        background-size: 48px;\n        width: 48px;\n        height: 48px;\n        content: \"\";\n        position: absolute;\n        top: 0;\n        left: 0;\n      }\n\n      &.protection::before {\n        background-position: 0 -48px;\n      }\n      &.code::before {\n        background-position: 0 -96px;\n      }\n      &.backend::before {\n        background-position: 0 -144px;\n      }\n      &.tokens::before {\n        background-position: 0 -192px;\n      }\n      &.support::before {\n        background-position: 0 -240px;\n      }\n\n      strong {\n        font-size: 20px;\n        font-weight: 600;\n        letter-spacing: -0.02em;\n      }\n\n      p {\n        margin-top: 15px;\n      }\n    }\n\n    @media (max-width: $screen-sm-max) {\n      hgroup {\n        padding-top: 0;\n      }\n\n      li {\n        flex-basis: 340px;\n      }\n    }\n\n    @media (max-width: $screen-xs-max) {\n      li {\n        flex-basis: 100%;\n\n        &::before {\n          left: calc(50% - 24px);\n        }\n      }\n    }\n  }\n\n  .protect,\n  .integrations {\n    position: relative;\n\n    &::before {\n      background: url(\"/img/enterprise/identity-vault/protection-img.png\") 0 0\n        no-repeat;\n      background-size: 100%;\n      width: 560px;\n      height: 560px;\n      content: \"\";\n      position: absolute;\n      top: 71px;\n      right: 19px;\n      display: block;\n\n      @media (max-width: $screen-sm-max) {\n        width: 280px;\n        height: 280px;\n        display: block;\n        position: static;\n        margin: 0 auto;\n      }\n    }\n\n    hgroup {\n      width: calc(50% - 90px);\n      padding-top: 0;\n      margin-top: 136px;\n\n      @media (max-width: $screen-md-max) {\n        width: calc(50% - 66px);\n        padding-bottom: 0;\n\n        h3 {\n          padding-top: 40px;\n        }\n      }\n\n      @media (max-width: $screen-sm-max) {\n        width: 460px;\n      }\n    }\n\n    h2 {\n      margin-bottom: 11px;\n    }\n\n    p.lg {\n      margin-bottom: 24px;\n\n      + p {\n        margin-bottom: 18px;\n        line-height: 26px;\n      }\n    }\n\n    ul {\n      padding: 0;\n      display: flex;\n      flex-wrap: wrap;\n      list-style: none;\n      margin-top: 39px;\n\n      @media (max-width: $screen-md-max) {\n        display: block;\n      }\n    }\n\n    li {\n      flex: 0 0 50%;\n      padding-left: 31px;\n      font-size: 16px;\n      color: #3880ff;\n      position: relative;\n      margin-bottom: 22px;\n\n      &::before {\n        background: url(\"/img/enterprise/identity-vault/checkmark.png\") 0 0\n          no-repeat;\n        background-size: 20px;\n        width: 20px;\n        height: 20px;\n        content: \"\";\n        position: absolute;\n        top: 0;\n        left: 1px;\n      }\n    }\n\n    @media (max-width: $screen-xs-max) {\n      display: block;\n      padding-top: 200px;\n\n      &::before {\n        top: -30px;\n        right: calc(50% - 140px);\n      }\n\n      hgroup {\n        width: 100%;\n        text-align: center;\n      }\n\n      li {\n        flex-basis: 100%;\n      }\n    }\n  }\n\n  .integrations {\n    padding-bottom: 99px;\n\n    &::before {\n      background: url(\"/img/enterprise/identity-vault/integration-img.png\") 0 0\n        no-repeat;\n      background-size: 100%;\n      width: 560px;\n      height: 560px;\n      top: 140px;\n      left: 15px;\n      right: auto;\n    }\n\n    hgroup {\n      padding-top: 64px;\n      margin-bottom: 214px;\n      width: calc(50% - 59px);\n\n      @media (max-width: $screen-md-max) {\n        padding-top: 0px;\n        width: calc(50% - 100px);\n      }\n    }\n\n    @media (max-width: $screen-sm-max) {\n      &::before {\n        width: 280px;\n        height: 280px;\n      }\n\n      hgroup {\n        width: 440px;\n      }\n\n      h3 {\n        padding-top: 50px;\n      }\n    }\n\n    @media (max-width: $screen-xs-max) {\n      padding-top: 330px;\n\n      &::before {\n        top: 80px;\n        left: calc(50% - 140px);\n      }\n\n      hgroup {\n        width: 100%;\n        text-align: center;\n      }\n\n      h3 {\n        padding-top: 50px;\n      }\n\n      li {\n        text-align: left;\n      }\n    }\n  }\n\n  section.what-you-got {\n    background: #101928 url(\"/img/enterprise/identity-vault/bg-panes.png\") 50% 0\n      no-repeat;\n    background-size: 1000px;\n\n    .container {\n      position: relative;\n      padding-bottom: 130px;\n    }\n\n    hgroup {\n      padding-top: 0;\n      max-width: 654px;\n      margin: 179px auto 0;\n      text-align: center;\n    }\n\n    h2 {\n      color: white;\n      margin-bottom: 10px;\n    }\n\n    p {\n      color: #ced6e0;\n    }\n\n    ul {\n      padding: 0;\n      margin-top: 63px;\n    }\n\n    li {\n      flex: 1 0 382px;\n      color: white;\n      margin-bottom: 38px;\n\n      @media (max-width: $screen-md-max) {\n        flex-basis: calc(50% - 50px);\n      }\n\n      &::before {\n        background-position: 0 0;\n      }\n\n      a {\n        color: white;\n        font-weight: 500;\n        text-decoration: underline;\n      }\n    }\n\n    @media (max-width: $screen-xs-max) {\n      background-size: cover;\n\n      hgroup {\n        text-align: left;\n      }\n\n      li {\n        flex-basis: 100%;\n      }\n    }\n  }\n\n  main .demo {\n    padding-top: 168px;\n    padding-bottom: 110px;\n\n    hgroup {\n      text-align: center;\n\n      h5 {\n        font-style: normal;\n        font-weight: 600;\n        color: #4e5b6a;\n        font-size: 24px;\n        line-height: 32px;\n        letter-spacing: -0.02em;\n        margin-bottom: 8px;\n      }\n\n      h2 {\n        margin-top: 0;\n      }\n    }\n\n    .form {\n      margin-top: 50px;\n      max-width: 930px;\n      margin-left: auto;\n      margin-right: auto;\n    }\n\n    @media (max-width: $screen-sm-max) {\n      padding-top: 0;\n      padding-bottom: 40px;\n    }\n\n    @media (max-width: $screen-xs-max) {\n      .form textarea.hs-input {\n        width: calc(100% - 18px) !important;\n      }\n    }\n  }\n\n  .watch {\n    background: #f6f8fb;\n\n    .container {\n      position: relative;\n    }\n\n    .card {\n      position: absolute;\n      left: 85px;\n      top: 68px;\n    }\n\n    img {\n      width: 460px;\n    }\n\n    hgroup {\n      padding-top: 119px;\n      width: calc(50% - 50px);\n      padding-bottom: 140px;\n      margin-left: auto;\n\n      @media (max-width: $screen-md-max) {\n        padding-top: 100px;\n        width: calc(50% - 100px);\n        padding-bottom: 120px;\n\n        p {\n          padding-right: 0;\n        }\n      }\n    }\n\n    h3 {\n      font-weight: 600;\n      letter-spacing: -0.02em;\n    }\n\n    p {\n      margin-top: 24px;\n      font-weight: 400;\n      font-size: 18px;\n      padding-right: 80px;\n      display: block;\n      margin-bottom: 22px;\n      letter-spacing: -0.02em;\n    }\n\n    .btn {\n      padding: 14px 16px 10px;\n      font-size: 14px;\n\n      img {\n        width: 16px;\n        margin-right: 5px;\n      }\n    }\n\n    @media (max-width: $screen-md-max) {\n      .card {\n        left: 0;\n      }\n    }\n\n    @media (max-width: $screen-sm-max) {\n      img {\n        width: 230px;\n      }\n\n      hgroup {\n        padding-top: 50px;\n        width: calc(100% - 260px);\n        padding-bottom: 60px;\n      }\n    }\n\n    @media (max-width: $screen-xs-max) {\n      .container {\n        padding-top: 200px;\n      }\n\n      .card {\n        left: calc(50% - 115px);\n      }\n\n      hgroup {\n        text-align: center;\n        width: 100%;\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "assets/scss/pages/enterprise/index.scss",
    "content": "@import \"../../vars\";\r\n@import \"bootstrap-sass/assets/stylesheets/bootstrap/variables\";\r\n@import \"../../utilities/u-enterprise.scss\";\r\n\r\n$colorBackHighlight: #2774d2;\r\n$colorBackInvert: #010610;\r\n$colorBackInvert2: #001a3a;\r\n$colorBtnText: #001a3a;\r\n$colorPanelBack: #f6f8fb;\r\n$colorTitle: #010610;\r\n$colorTitle2: #73849a;\r\n$colorTitleInvert: white;\r\n$colorSubtext: #445b78;\r\n$colorSubtextInvert: #f6f8fb;\r\n$colorSubtextInvert2: #dee3ea;\r\n$colorSubtextInvert3: #b2becd;\r\n$colorLinkDark: #001a3a;\r\n$colorLinkLight: #488aff;\r\n$lg: 99999;\r\n$shadow: drop-shadow(0px 8px 8px #d3d3d3);\r\n$timing: cubic-bezier(0.71, 0.69, 0.45, 0.84);\r\n\r\n// #region ------------------- DEFAULT STYLES ----------------------------\r\nimg {\r\n  height: auto;\r\n}\r\nh1 {\r\n  margin: 0 0 28px 0;\r\n  font-size: 64px;\r\n  letter-spacing: -0.03em;\r\n}\r\nh2 {\r\n  margin: 0 0 16px 0;\r\n  font-size: 48px;\r\n  line-height: 112%;\r\n  letter-spacing: -0.04em;\r\n  color: $colorTitle;\r\n}\r\nh3 {\r\n  font-family: $font-family-inter;\r\n  font-weight: 500;\r\n  margin-top: 0;\r\n  margin-block-end: 8px;\r\n  color: $colorTitle;\r\n  font-size: 20px;\r\n}\r\n.a1 {\r\n  font-size: 20px;\r\n  line-height: 170%;\r\n  letter-spacing: -0.03em;\r\n}\r\na.light {\r\n  &:hover,\r\n  &:active,\r\n  &:focus {\r\n    color: $colorLinkLight !important;\r\n  }\r\n}\r\na.dark {\r\n  &:hover,\r\n  &:active,\r\n  &:focus {\r\n    color: $colorLinkDark !important;\r\n  }\r\n}\r\np {\r\n  color: $colorSubtext;\r\n  margin: 0;\r\n}\r\n.p1 {\r\n  font-size: 24px;\r\n  line-height: 160%;\r\n  letter-spacing: -0.03em;\r\n}\r\n.p2 {\r\n  font-size: 20px;\r\n  line-height: 160%;\r\n  letter-spacing: -0.03em;\r\n}\r\n.p3 {\r\n  font-size: 16px;\r\n  line-height: 160%;\r\n  letter-spacing: -0.01em;\r\n}\r\n\r\n#sticky-bar li.active a:not(.btn) {\r\n  color: $colorLinkDark !important;\r\n}\r\n\r\n//Sticky nav won't work on mobile without these\r\nmain {\r\n  overflow: visible;\r\n}\r\n@media (max-width: $screen-sm-max) {\r\n  .container {\r\n    overflow: hidden;\r\n  }\r\n}\r\n#top .container,\r\n.navbar .container {\r\n  overflow: visible;\r\n}\r\n\r\n//---------------------------------------------\r\n\r\nblockquote {\r\n  font-family: inherit;\r\n  margin: 0;\r\n  padding: 0;\r\n  border: 0;\r\n  outline: 0;\r\n  font-size: 100%;\r\n  vertical-align: baseline;\r\n  background: transparent;\r\n  quotes: none;\r\n  font-weight: 400;\r\n  line-height: 150%;\r\n  letter-spacing: -0.01em;\r\n  color: $colorTitleInvert;\r\n  z-index: 2;\r\n  position: relative;\r\n\r\n  &::before {\r\n    content: url(\"/img/enterprise/left_quote.png\");\r\n    position: absolute;\r\n    left: -10px;\r\n    top: -7px;\r\n    z-index: -1;\r\n  }\r\n\r\n  footer {\r\n    padding: 0px;\r\n    border-top: 0;\r\n    color: inherit;\r\n    font-family: inherit;\r\n\r\n    cite {\r\n      font-style: normal;\r\n    }\r\n    &::before {\r\n      content: \"\";\r\n    }\r\n  }\r\n}\r\n\r\n.section {\r\n  padding-top: 200px;\r\n  padding-bottom: 200px;\r\n}\r\n\r\n.superTitle {\r\n  font-family: $font-family-monospace;\r\n  font-size: 12px;\r\n  font-weight: bold;\r\n  line-height: 100%;\r\n  text-transform: uppercase;\r\n  color: $colorTitle2;\r\n  letter-spacing: 0.14em;\r\n  margin-bottom: 24px !important;\r\n}\r\n\r\n// #endregion\r\n\r\n// #region ------------------- COMPONENTS --------------------------------\r\n%btn {\r\n  white-space: nowrap;\r\n  text-transform: uppercase;\r\n  border-radius: 8px;\r\n  font-size: 16px;\r\n  font-weight: bold;\r\n  letter-spacing: 0.1em;\r\n  display: inline-flex;\r\n  align-items: center;\r\n  padding: 16px 20px;\r\n  cursor: pointer;\r\n  line-height: 14px;\r\n}\r\n\r\n.btn-main {\r\n  @extend %btn;\r\n  background: white;\r\n  color: $colorBtnText;\r\n}\r\n\r\n@keyframes fadeIn {\r\n  0% {\r\n    opacity: 0;\r\n  }\r\n  100% {\r\n    opacity: 1;\r\n  }\r\n}\r\n\r\n#nativeImgs {\r\n  overflow: visible;\r\n  overflow-x: hidden;\r\n\r\n  .content {\r\n    max-width: 894px;\r\n  }\r\n\r\n  hgroup p {\r\n    max-width: 580px;\r\n    margin-right: auto;\r\n    margin-left: auto;\r\n  }\r\n\r\n  #imageList {\r\n    height: 268px;\r\n    position: relative;\r\n    display: block;\r\n    position: relative;\r\n    opacity: 0;\r\n    animation: fadeIn 1s 1s forwards;\r\n\r\n    li {\r\n      list-style: none;\r\n      position: absolute;\r\n    }\r\n\r\n    img {\r\n      position: absolute;\r\n      width: 128px;\r\n      border-radius: 50%;\r\n      box-shadow: 0 6px 24px rgba(black, 0.1);\r\n\r\n      &.m {\r\n        width: 64px;\r\n      }\r\n\r\n      &.m {\r\n        width: 96px;\r\n      }\r\n    }\r\n  }\r\n}\r\n// #endregion\r\n\r\n// #region ------------------- ANIMATIONS --------------------------------\r\n.btn-main,\r\nionic-sub-header .btn {\r\n  animation-name: colorButtonBack;\r\n  animation-duration: 300ms;\r\n  animation-fill-mode: forwards;\r\n  animation-timing-function: $timing;\r\n  @keyframes colorButtonBack {\r\n    from {\r\n      background: darken(white, 12%);\r\n      color: #001a3a;\r\n    }\r\n    to {\r\n      background: white;\r\n      color: #001a3a;\r\n    }\r\n  }\r\n\r\n  &:hover,\r\n  &:focus,\r\n  &:active {\r\n    animation-name: colorButtonForward;\r\n    animation-duration: 300ms;\r\n    animation-fill-mode: forwards;\r\n    animation-timing-function: $timing;\r\n    @keyframes colorButtonForward {\r\n      from {\r\n        color: #001a3a;\r\n        background: white;\r\n      }\r\n      to {\r\n        background: darken(white, 12%);\r\n        color: #001a3a;\r\n      }\r\n    }\r\n  }\r\n}\r\n\r\n.panel {\r\n  animation-name: jumpUpBackwards;\r\n  animation-duration: 300ms;\r\n  animation-fill-mode: forwards;\r\n  animation-timing-function: $timing;\r\n  @keyframes jumpUpBackwards {\r\n    from {\r\n      background: #e9edf3;\r\n      transform: translateY(-4px);\r\n    }\r\n    to {\r\n    }\r\n  }\r\n\r\n  &:hover,\r\n  &:focus,\r\n  &:active {\r\n    animation-name: jumpUpForwards;\r\n    animation-duration: 300ms;\r\n    animation-fill-mode: forwards;\r\n    animation-timing-function: $timing;\r\n    @keyframes jumpUpForwards {\r\n      from {\r\n      }\r\n      to {\r\n        transform: translateY(-4px);\r\n        background: #e9edf3;\r\n      }\r\n    }\r\n  }\r\n}\r\n// #endregion\r\n\r\nionic-sub-header {\r\n  .ionic-sub-header__mobile-toggle {\r\n    fill: white !important;\r\n  }\r\n  .container {\r\n    background: $colorBackInvert !important;\r\n  }\r\n  // position:absolute;\r\n  background: $colorBackInvert !important;\r\n  a:not(.active):not(:hover):not(.btn) {\r\n    color: white !important;\r\n  }\r\n  [slot=\"title\"] {\r\n    letter-spacing: -0.01em;\r\n    font-size: 18px;\r\n    &:hover,\r\n    &:active,\r\n    &:focus {\r\n      color: #488aff !important;\r\n    }\r\n  }\r\n  .btn {\r\n    background: white;\r\n    color: $colorBtnText !important;\r\n  }\r\n}\r\n\r\n#sticky-bar {\r\n  top: 56px;\r\n}\r\n\r\n.ionic-sub-header--stuck {\r\n  position: sticky;\r\n}\r\n\r\n#heroImage {\r\n  position: absolute;\r\n  top: 0;\r\n  left: 0;\r\n  background: $colorBackInvert;\r\n}\r\n\r\n#heroText {\r\n  @include box($color: white, $mxW: 560px, $mTop: 180px, $mBot: 164px);\r\n  @include box(\"p\", $color: $colorSubtextInvert, $mxW: 560px);\r\n  @include box(\"a.link1\", $mTop: 48px);\r\n  @include box(\"a.link2\", $mTop: 16px, $color: white);\r\n  animation-name: fadeInUp;\r\n  animation-duration: 2s;\r\n\r\n  position: relative;\r\n  z-index: 2;\r\n}\r\n\r\n#top {\r\n  background: $colorBackInvert;\r\n  overflow: hidden;\r\n}\r\n\r\n#top .container {\r\n  position: relative;\r\n}\r\n\r\n#enterpriseSec {\r\n  @include box($mTop: 160px, $mBot: 200px);\r\n  @include spacer($mxW: 143px, $mnH: 100px);\r\n\r\n  #enterpriseText {\r\n    @include box($mxW: 384px);\r\n    @include stack($mY: 16px);\r\n\r\n    #logoList {\r\n      @include box($mTop: 56px, $fG: 0);\r\n      @include cluster($el: \"& \", $sX: 48px, $sY: 32px);\r\n    }\r\n  }\r\n  #enterpriseImg {\r\n    @include box($mxW: 490px);\r\n    img {\r\n      width: 100%;\r\n    }\r\n  }\r\n}\r\n\r\n#ossSec {\r\n  @include spacer($mxW: 96px, $mnW: 32px);\r\n\r\n  #ossTitle {\r\n    @include stack($mY: 16px);\r\n    @include box($mxW: 480px);\r\n    h2 {\r\n      margin-top: 0px !important;\r\n    }\r\n  }\r\n\r\n  #ossCont {\r\n    @include stack($mY: 40px);\r\n    @include box($mxW: 448px);\r\n    @include box(\"svg\", $mnW: 48px, $mxW: 48px, $mnH: 48px);\r\n\r\n    @include box(\".content\", $mxW: 352px);\r\n    @include spacer($mxW: 48px, $mnW: 20px, $mnH: 20px);\r\n  }\r\n}\r\n\r\n#nativeSec {\r\n  @include box($back: linear-gradient(180deg, #f7f9fc 0%, #fcfdfe 100%));\r\n  @include box(\"h2\", $mxW: 480px);\r\n\r\n  #nativeTitle {\r\n    @include spacer($mnW: 40px, $mnH: 40px);\r\n    @include box(\".title1\", $mxW: 480px);\r\n\r\n    @include box(\".title2\", $mxW: 480px);\r\n    @include box(\".title2 a\", $mTop: 32px);\r\n  }\r\n\r\n  #nativeCont {\r\n    @include box(\"svg\", $mxW: 48px, $mBot: 24px);\r\n    @include switcher(\r\n      $count: 3,\r\n      $threshold: $container-sm - $grid-gutter-width,\r\n      $gap: 32px\r\n    );\r\n  }\r\n\r\n  #imageList {\r\n    @include box($mTop: 96px);\r\n    svg {\r\n      filter: $shadow;\r\n    }\r\n  }\r\n}\r\n\r\n#quote1Sec {\r\n  position: relative;\r\n}\r\n\r\n#quote1Img {\r\n  flex-basis: 50%;\r\n  img {\r\n    object-fit: cover;\r\n    width: 100%;\r\n    height: 332px;\r\n  }\r\n}\r\n#quote1Back {\r\n  @include box($back: $colorBackHighlight);\r\n  flex-basis: 50%;\r\n  height: 332px;\r\n}\r\n#quote1Cont {\r\n  height: 100%;\r\n  position: absolute;\r\n  left: 0;\r\n  right: 0;\r\n\r\n  blockquote {\r\n    font-size: 18px;\r\n    position: absolute;\r\n    left: calc(50% + 64px);\r\n    footer {\r\n      margin-top: 32px;\r\n    }\r\n    .company {\r\n      margin-left: 12px;\r\n      opacity: 0.6;\r\n    }\r\n  }\r\n}\r\n\r\n#mobSecSec {\r\n  @include spacer($mxW: 96px, $mnW: 32px, $mnH: 32px);\r\n}\r\n#mobSecTitle {\r\n  @include box($mxW: 480px);\r\n  @include stack($mY: 16px);\r\n  h2 {\r\n    margin-top: 0px !important;\r\n  }\r\n}\r\n\r\n#mobSecCont {\r\n  @include spacer($mnH: 16px);\r\n  @include box($mxW: 448px);\r\n  @include stack($mY: 40px);\r\n  @include box(\"svg\", $w: 80px, $mBot: 42px);\r\n\r\n  .panel {\r\n    @include box($back: $colorPanelBack, $pX: 48px, $pY: 48px, $bR: 8px);\r\n  }\r\n}\r\n\r\n#adviseSec {\r\n  @include box($back: $colorBackInvert2);\r\n\r\n  .superTitle {\r\n    color: $colorSubtextInvert3;\r\n  }\r\n}\r\n#adviseTitle {\r\n  @include stack($mY: 16px);\r\n  @include box(\"h2\", $color: $colorTitleInvert, $mTop: 0px);\r\n  @include box(\"p\", $color: $colorSubtextInvert2, $mxW: 704px);\r\n}\r\n\r\n#adviseCont {\r\n  @include spacer($mnW: 48px);\r\n  @include box($mTop: 128px);\r\n  @include box(\".row1\", $fB: 440px);\r\n  @include box(\".row2\", $fB: 440px);\r\n\r\n  article {\r\n    @include box($mBot: 32px, $fB: 220px);\r\n    @include box(\"h3\", $color: $colorTitleInvert);\r\n    @include box(\"p\", $color: $colorSubtextInvert2);\r\n    @include box(\"svg\", $mBot: 24px);\r\n  }\r\n}\r\n\r\n#delivSec {\r\n  @include box($back: #fbfbfd);\r\n  @include spacer($mxW: 96px, $mnW: 32px, $mnH: 32px);\r\n}\r\n#delivTitle {\r\n  .sec1 {\r\n    @include box($mxW: 480px, $fB: 50%);\r\n    @include box(\"h2\", $mBot: 16px);\r\n    @include box(\"p\", $mxW: 448px);\r\n  }\r\n  .sec2 {\r\n    @include box($mxW: 448px, $fB: 50%);\r\n    filter: $shadow;\r\n  }\r\n}\r\n\r\n#delivCont {\r\n  @include box($mTop: 132px);\r\n  @include box(\"svg\", $w: 48px, $h: 48px, $mBot: 26px);\r\n  @include box(\"article\", $mxW: 308px);\r\n}\r\n\r\n#quote2Sec {\r\n  padding-top: 128px;\r\n  padding-bottom: 128px;\r\n  .a1 {\r\n    color: #92a1b3;\r\n    font-size: 14px;\r\n  }\r\n}\r\n#quote2Title {\r\n  @include box($mxW: 832px, $mBot: 86px);\r\n}\r\n#quote2Cont {\r\n  position: relative;\r\n\r\n  blockquote {\r\n    font-size: 22px;\r\n    footer {\r\n      margin-top: 47px;\r\n    }\r\n    .company {\r\n      margin-left: 12px;\r\n      opacity: 0.6;\r\n    }\r\n  }\r\n\r\n  .sec1 {\r\n    @include box(\r\n      $back: $colorBackHighlight,\r\n      $mxW: 65%,\r\n      $mnH: 560px,\r\n      $pX: 64px,\r\n      $pY: 64px\r\n    );\r\n    @include box(\"& > svg\", $mxW: 215.5px, $mBot: 66.3px);\r\n    @include box(\"blockquote\", $mxW: 66.66%);\r\n    @include box(\"footer\", $mTop: 47px);\r\n\r\n    border-radius: 8px;\r\n  }\r\n  .sec2 {\r\n    height: 100%;\r\n    position: absolute;\r\n    left: 45%;\r\n    img {\r\n      width: 100%;\r\n    }\r\n  }\r\n}\r\n#logoList2 {\r\n  @include cluster($sX: 83px, $sY: 32px);\r\n  @include box($mTop: 97px, $mBot: 28px);\r\n}\r\n\r\n#finalCta {\r\n  @include spacer($mnW: 32px, $mnH: 32px);\r\n\r\n  padding-top: 128px;\r\n  padding-bottom: 128px;\r\n  background: $colorBackInvert;\r\n\r\n  p {\r\n    @include box($color: $colorTitleInvert, $mxW: 679px);\r\n\r\n    strong {\r\n      font-weight: 600;\r\n    }\r\n\r\n    font-size: 28px;\r\n    line-height: 120%;\r\n    letter-spacing: -0.03em;\r\n  }\r\n}\r\n\r\n//sticky doesn't work without this\r\n@media (min-width: $screen-sm) {\r\n  main {\r\n    overflow: visible;\r\n  }\r\n  .tag-along {\r\n    position: relative;\r\n    #mobSecTitle {\r\n      position: sticky;\r\n      top: 180px;\r\n      height: 100%;\r\n    }\r\n  }\r\n}\r\n\r\n@media (min-width: $screen-sm) and (max-width: $screen-md) {\r\n  #adviseCont > .spacer {\r\n    min-width: 0px;\r\n  }\r\n}\r\n\r\n@media (max-width: $screen-sm) {\r\n  h1 {\r\n    font-size: 56px;\r\n  }\r\n  h2 {\r\n    font-size: 38px;\r\n  }\r\n  .section {\r\n    padding-top: 100px;\r\n    padding-bottom: 100px;\r\n  }\r\n\r\n  [class*=\"strip\"] {\r\n    flex-direction: column;\r\n  }\r\n  .snap {\r\n    max-width: 100% !important;\r\n  }\r\n\r\n  #quote1Cont {\r\n    position: static;\r\n    blockquote {\r\n      position: relative;\r\n      top: 0;\r\n      left: 0;\r\n    }\r\n  }\r\n  #quote1Back {\r\n    position: static;\r\n    height: auto;\r\n    padding-top: 32px;\r\n    padding-bottom: 32px;\r\n    min-height: 332px;\r\n    display: flex;\r\n    align-items: center;\r\n  }\r\n\r\n  #adviseSec {\r\n    text-align: start;\r\n\r\n    .superTitle {\r\n      text-align: start;\r\n    }\r\n    #adviseTitle {\r\n      h2,\r\n      p {\r\n        text-align: start;\r\n      }\r\n\r\n      a {\r\n        margin-left: 0;\r\n      }\r\n    }\r\n  }\r\n\r\n  #adviseCont {\r\n    @include box($mTop: 64px);\r\n  }\r\n\r\n  #delivCont {\r\n    @include box($mTop: 64px);\r\n  }\r\n\r\n  #quote2Cont .sec1 {\r\n    @include box($mnH: auto, $pX: 32px);\r\n    @include box(\"svg\", $mBot: 32px);\r\n  }\r\n\r\n  #quote2Cont .sec2 {\r\n    position: static;\r\n  }\r\n\r\n  #finalCta .sec2 {\r\n    justify-content: flex-start;\r\n  }\r\n}\r\n"
  },
  {
    "path": "assets/scss/pages/enterprise/offline-storage.scss",
    "content": "@import '../../vars';\n@import 'bootstrap-sass/assets/stylesheets/bootstrap/variables';\n\n@import './shared';\n@import './solutions/shared';\n\nbody {\n  background: rgba(247, 249, 252, .6);\n}\n\nimg {\n  height: auto;\n}\n\nmain,\n#pre-footer,\nfooter {\n  background: white;\n}\n\n#sticky-bar {\n  z-index: 2;\n\n  li.active a:not(.btn) {\n    color: $purple;\n  }\n}\n\nionic-sub-header .btn,\nionic-sub-header .btn:hover,\nionic-sub-header .btn:active {\n  background: $purple;\n}\n\n#page-offline-storage .cta {\n  margin-top: -32px;\n\n  hgroup {\n    max-width: 482px;\n    padding-top: 12px;\n    padding-bottom: 94px;\n\n    h3 {\n      color: $purple;\n      font-style: normal;\n      font-weight: 600;\n      font-size: 24px;\n      line-height: 36px;\n      letter-spacing: 0.06em;\n      text-transform: uppercase;\n      margin-bottom: 48px;\n      font-family: $font-family-inter;\n    }\n\n    h1 {\n      font-size: 64px;\n      line-height: 70px;\n    }\n\n    p {\n      letter-spacing: -0.02em;\n      max-width: 470px;\n      line-height: 1.5;\n    }\n\n    .btn {\n      background: $purple;\n      box-shadow: \n        0px 2px 4px rgba(2, 8, 20, 0.1), \n        0px 1px 2px rgba(2, 8, 20, 0.08);\n      border-radius: 10px;\n\n      font-size: 15px;\n      line-height: 21px;\n      font-weight: 700;\n      letter-spacing: 0.08em;\n      text-transform: uppercase;\n      margin-top: 26px;\n      padding: 14px 16px 12px;\n\n      &::after {\n        font-family: 'Ionicons';\n        content: '';\n        font-size: 23px;\n        font-weight: 400;\n        vertical-align: -3px;\n        margin-left: 5px;\n      }\n    }\n  }\n\n  .graphics {\n    top: 113px;\n    right: 19px;\n    opacity: 0;\n    animation: fadeInUp 1s ease .5s forwards;\n\n    .line-1,\n    .line-2,\n    .line-3,\n    .line-4,\n    .line-5 {\n      opacity: 0;\n      animation: fadeInUp .4s ease-out .6s forwards;\n    }\n\n    .line-2  { animation-delay: .7s; }\n    .line-3  { animation-delay: .8s; }\n    .line-4  { animation-delay: .9s; }\n    .line-5  { animation-delay: 1s; }\n\n    @media (max-width: $screen-md-max) {\n      right: 0;\n    }\n\n    @media (max-width: $screen-sm-max) {\n      svg {\n        opacity: .14;\n      }\n    }\n  }\n}\n\nmain section {\n  &.right,\n  &.left, \n  &.pair {\n    hgroup {\n      position: relative;\n      z-index: 1;\n    }\n  }\n}\n\n#overview {\n  margin-top: 158px;\n\n  h3 {\n    margin-bottom: 7px;\n  }\n\n  hgroup p {\n    letter-spacing: -.03em;\n    margin-bottom: 33px;\n  }\n\n  li {\n    flex: 0 calc(33% - 33px);\n  }\n\n  h4 {\n    margin-top: 6px;\n    letter-spacing: -.02em;\n    margin-bottom: 16px;\n    font-weight: 600;\n  }\n\n  li p {\n    line-height: 29px;\n  }\n\n  @media (max-width: $screen-xs-max) {\n    ul {\n      flex-wrap: wrap;\n    }\n    \n    li {\n      flex: 100%;\n    }\n  }\n}\n\n#secure,\n#mobile-ready {\n  padding-top: 200px;\n  padding-bottom: 172px;\n\n  hgroup {\n    max-width: 472px;\n  }\n\n  .graphics {\n    position: absolute;\n  }\n\n  @media (max-width: $screen-sm-max) {\n    display: flex;\n    flex-direction: column;\n    padding-bottom: 450px;\n    margin-bottom: 50px;\n    margin-top: 0;\n    padding-top: 0;\n\n    .graphics {\n      bottom: 0;\n      height: auto;\n    }\n  }\n\n  @media (max-width: $screen-xs-max) {\n    padding-bottom: 200px;\n\n    .graphics {\n      width: 400px;\n    }\n  }\n}\n\n#secure {\n  .graphics {\n    right: calc(60% - 1000px);\n    margin-top: -26px;\n\n    @media (min-width: 1668px), (max-width: $screen-sm-max) {\n      right: 0;\n    }\n  }\n}\n\n#mobile-ready {\n  padding-bottom: 300px;\n\n  .graphics {\n    left: calc(50% - 971px);\n    margin-top: 11px;\n\n    @media (min-width: 1940px), (max-width: $screen-sm-max) {\n      left: 0;\n    }\n  }\n\n  @media (max-width: $screen-sm-max) {\n    padding-bottom: 620px;\n  }\n\n  @media (max-width: $screen-xs-max) {\n    padding-bottom: 300px;\n  }\n}\n\n#features {\n  background: rgba(247, 249, 252, .6);\n  margin: 0;\n  padding-top: 170px;\n  padding-bottom: 180px;\n\n  h4 {\n    color: #868FF5;\n    margin-bottom: 18px;\n  }\n\n  li {\n    flex: 0 1 360px;\n\n    &::before {\n      content: url('/img/offline-storage/ico-check-circle.svg');\n    }\n  }\n}\n\n#get-started {\n  h3 {\n    color: #5A629A;\n  }\n\n  h2 {\n    color: $purple;\n  }\n}"
  },
  {
    "path": "assets/scss/pages/enterprise/platform.scss",
    "content": "@import '../../vars';\n@import '../../mixins';\n@import 'bootstrap-sass/assets/stylesheets/bootstrap/variables';\n@import 'shared';\n\nsection {\n  position: relative;\n}\n\nimg {\n  height: auto;\n}\n\n#app-builder .graphics {\n  margin-left: -86px;\n  padding-left: 0;\n  margin-right: -120px;\n  width: 897px;\n\n\n  @media (max-width: $screen-xs-max) {\n    width: 100%;\n    margin-top: 100px;\n    margin-bottom: -60px;\n  }\n}\n\n#oss {\n  .frameworks {\n    margin-bottom: 33px;\n\n    @include flex-list();\n\n    li {\n      height: 32px;\n      width: 32px;\n      background-size: 100%;\n      display: inline-block;\n      margin-right: 12px;\n\n      &.frameworks__angular {\n        background-image: url('/img/homepage/framework-support-angular.png')\n      }\n\n      &.frameworks__react {\n        background-image: url('/img/homepage/framework-support-react.png')\n      }\n\n      &.frameworks__vue {\n        background-image: url('/img/homepage/framework-support-vue.png')\n      }\n\n      &.frameworks__js {\n        background-image: url('/img/homepage/framework-support-javascript.png')\n      }\n\n      &::before {\n        display: none;\n      }\n    }\n\n    @media (max-width: $screen-xs-max) {\n      justify-content: space-around;\n      width: 260px;\n      margin: 0 auto;\n\n      li {\n        margin-right: 0;\n      }\n    }\n  }\n\n  .graphics {\n    padding-right: 0;\n    margin-left: -130px;\n    width: 789px;\n\n    @media (max-width: $screen-xs-max) {\n      width: 100%;\n      max-width: 400px;\n      margin-left: -60px;\n    }\n  }\n}\n\n#devops .graphics {\n  width: calc(100% - 480px);\n  margin-right: -20px;\n  margin-top: -40px;\n\n  img {\n    width: 1035px;\n    position: relative;\n    left: -380px;\n  }\n}\n\n#integrations {\n  .integration-list {\n    position: relative;\n    width: 100%;\n    height: 360px;\n    display:block;\n    margin: 0 0 48px;\n    padding: 0;\n    position: relative;\n    opacity: 0;\n    animation: fadeIn 1s 1s forwards;\n\n    li {\n      list-style: none;\n      position: absolute;\n    }\n\n    img {\n      position: absolute;\n      width: 128px;\n      border-radius: 50%;\n      box-shadow: 0 6px 24px rgba(black, .1);\n\n      &.m {\n        width: 64px;\n      }\n\n      &.m {\n        width: 96px;\n      }\n    }\n  }\n}\n\n#advisory {\n  background-image: url('/img/enterprise/platform/card-advisory.jpg');\n}\n"
  },
  {
    "path": "assets/scss/pages/enterprise/solutions/_shared.scss",
    "content": "@import '../../../vars';\n@import '../../../mixins';\n@import 'bootstrap-sass/assets/stylesheets/bootstrap/variables';\n\n.banner {\n  background: #fff;\n  text-align: left;\n\n  .container {\n    position: relative;\n  }\n\n  .ee-hero {\n    max-width: 480px;\n  }\n\n  .ee-hero h4,\n  .ee-hero h1,\n  .ee-hero p {\n    position: relative;\n    z-index: 2;\n  }\n\n}\n\n@media (max-width: $screen-xs-max) {\n  .ee-hero {\n    padding-bottom: 80px;\n  }\n}\n\n\n.solution-hero {\n  h4,\n  h2,\n  p,\n  a {\n    position: relative;\n    z-index: 2;\n  }\n\n  &::after {\n    background-size: cover;\n    position: absolute;\n    z-index: 1;\n    content: '';\n    display: block;\n  }\n\n  &--cross-platform::after {\n    background: url('/img/solutions/bg-cross-platform-header.svg');\n    width: 850px;\n    height: 431px;\n    right: calc(50% - 796px);\n    top: 138px;\n  }\n\n  &--design-system::after {\n    background: url('/img/solutions/design-systems-banner.svg');\n    width: 755px;\n    height: 593px;\n    right: -72px;\n    top: 74px;\n  }\n\n  &--pwa::after {\n    background: url('/img/enterprise/pwa.png');\n    width: 513px;\n    height: 520px;\n    background-size: 513px 520px;\n    right: 50px;\n    top: 74px;\n  }\n}\n\n.right .solution-hero--design-system::after {\n  right: auto;\n  left: -72px;\n}\n\nmain {\n  letter-spacing: -0.028em;\n  color: #2F3A48;\n\n  h2 {\n    font-size: 40px;\n    line-height: 50px;\n    letter-spacing: -0.03em;\n    color: #020814;\n    margin-bottom: 15px;\n  }\n\n  h3 {\n    color: #414D5C;\n    font-weight: 600;\n    margin-bottom: 4px;\n\n    + h2 {\n      margin-top: 0;\n    }\n  }\n\n  p {\n    font-size: 20px;\n    line-height: 31px;\n    margin-bottom: 40px;\n  }\n\n  ul {\n    padding-left: 0;\n  }\n\n  li {\n    font-size: 16px;\n    line-height: 23px;\n    color: #1A232F;\n    margin-bottom: 32px;\n    position: relative;\n    list-style: none;\n    padding-left: 30px;\n    letter-spacing: -.016em;\n\n\n    &::before {\n      content: url('data:image/svg+xml,\n        <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\">\n          <path d=\"M186.301 339.893L96 249.461l-32 30.507L186.301 402 448 140.506 416 110z\"/>\n        </svg>');\n      position: absolute;\n      left: 0;\n      top: 1px;\n      height: 15px;\n      width: 15px;\n      fill: #1A232F;\n      display: block;\n    }\n  }\n\n  section {\n    display: flex;\n    position: relative;\n\n    &.container {\n      &::before,\n      &::after {\n        display: none;\n      }\n    }\n\n    &.right {\n      flex-direction: row-reverse;\n    }\n\n    &.center {\n      justify-content: center;\n      flex-direction: column;\n      align-items: center;\n\n      .content {\n        max-width: 798px;\n        text-align: center;\n\n        ul {\n          display: flex;\n          flex-wrap: wrap;\n          justify-content: space-between;\n\n          @media (max-width: $screen-sm-max) {\n            justify-content: flex-start;\n          }\n        }\n\n        li {\n          max-width: 376px;\n          width: 100%;\n        }\n      }\n    }\n  }\n\n  .content {\n    max-width: 482px;\n    margin: 232px 0 184px;\n\n    @media (max-width: $screen-sm-max) {\n      max-width: 100%;\n      margin: 60px auto;\n    }\n  }\n\n  aside {\n    background: #F6F8FB;\n    padding-top: 114px;\n    padding-bottom: 120px;\n\n    p {\n      color: #414D5C;\n    }\n\n    .content {\n      max-width: 432px;\n      margin: 0 auto;\n      text-align: center;\n      display: block;\n    }\n  }\n\n  .get-started {\n    max-width: 700px;\n  }\n\n  .cards {\n    display: flex;\n    text-align: left;\n    justify-content: center;\n    margin-top: 38px;\n\n    .card {\n      background: #7CABFF;\n      border-radius: 8px;\n      padding: 40px 40px 34px;\n      display: flex;\n      flex-direction: column;\n      align-items: flex-start;\n      margin-right: 24px;\n      flex: 0 1 460px;\n      border-radius: 8px;\n\n      &:last-child {\n        margin-right: 0;\n      }\n\n      &:nth-child(2) {\n        background: #F88D8D;\n\n        .btn {\n          background: rgba(#F45454, .5);\n        }\n      }\n    }\n\n    h3 {\n      font-size: 24px;\n      line-height: normal;\n      letter-spacing: -0.02em;\n      color: white;\n      margin-top: 0;\n    }\n\n    p {\n      font-size: 18px;\n      line-height: 26px;\n      letter-spacing: -0.02em;\n      color: rgba(white, .7);\n    }\n\n    .btn {\n      margin-top: auto;\n      font-size: 14px;\n      line-height: 22px;\n      letter-spacing: 0.09em;\n      text-transform: uppercase;\n      padding: 10px 14px;\n      font-weight: 600;\n      border-radius: 8px;\n      background: rgba(#3880FF, .5);\n\n      ion-icon {\n        display: inline-block;\n        height: 14px;\n        width: 14px;\n        vertical-align: -2px;\n      }\n    }\n\n    @media (max-width: $screen-xs-max) {\n      flex-direction: column;\n\n      .card {\n        flex: auto;\n        margin-right: 0;\n        margin-top: 20px;\n      }\n    }\n  }\n}\n\n.resources {\n  margin-top: 96px;\n}\n\n\n.cta {\n  position: relative;\n  min-height: 760px;\n  max-width: 100%;\n  overflow: hidden;\n\n  hgroup {\n    max-width: 446px;\n    position: relative;\n    z-index: 1;\n\n    svg {\n      display: inline-block;\n      vertical-align: -50%;\n    }\n\n    h3 {\n      color: #00CEAB;\n      font-style: normal;\n      font-weight: 600;\n      font-size: 24px;\n      line-height: 36px;\n      letter-spacing: 0.06em;\n      text-transform: uppercase;\n      margin-bottom: 48px;\n      font-family: $font-family-inter;\n\n      svg {\n        margin-right: 10px;\n        vertical-align: -24px;\n      }\n\n    }\n\n    h1 {\n      font-size: 48px;\n      line-height: 1.2em;\n      letter-spacing: -0.03em;\n    }\n\n    p  {\n      font-size: 24px;\n      line-height: 36px;\n      letter-spacing: -0.04em;\n    }\n  }\n}\n\n.spinner, \n.cta .graphics {\n  position: absolute;\n  right: 0;\n  top: 90px;\n}\n\n.spinner {\n  animation: spin 200s linear infinite;\n\n  @media (max-width: $screen-xs-max) {\n    opacity: .3;\n  }\n}\n\n#overview li::before {\n  display: none;\n}\n\n#header-graphic {\n  opacity: 0;\n  animation: spin-in 2s cubic-bezier(0,1,.59,.95) .5s forwards;\n\n  // g {\n  //   animation: figureeight 20s ease infinite;\n\n  //   &:nth-child(2) { animation-delay: 2s; }\n  //   &:nth-child(3) { animation-delay: 4s; }\n  //   &:nth-child(4) { animation-delay: 6s; }\n  // }\n}\n\nmain section {\n  margin-top: 128px;\n  margin-bottom: 128px;\n\n  h2, \n  h3 {\n    color: #020814;\n    letter-spacing: -0.03em;\n  }\n\n  h3 {\n    margin-bottom: 18px;\n  }\n\n  h4,\n  strong {\n    color: #1A232F;\n    letter-spacing: -0.04em;\n  }\n\n  p {\n    letter-spacing: -0.02em;\n    color: #2F3A48;\n  }\n\n  &.center {\n    hgroup {\n      max-width: 784px;\n      margin-right: auto;\n      margin-left: auto;\n      text-align: center;\n    }\n  }\n\n  &.right,\n  &.left,\n  &.pair {\n    &.container,\n    .container {\n      display: flex;\n      flex-wrap: wrap;\n      justify-content: space-between;\n      align-items: center;\n  \n      hgroup {\n        max-width: 450px;\n  \n        @media (max-width: $screen-md-max) {\n          max-width: 360px;\n        }\n  \n        @media (max-width: $screen-sm-max) {\n          max-width: 100%;\n        }\n      }\n  \n      &::before,\n      &::after {\n        display: none;\n      }\n    }\n  }\n\n  &.right.container,\n  &.right .container{\n    flex-direction: row-reverse;\n  }\n\n  &.pair {\n    justify-content: space-around;\n    align-items: flex-start;\n\n    .card {\n      max-width: 380px;\n      flex: 1;\n      margin-bottom: 32px;\n    }\n\n    @media (max-width: $screen-xs-max) {\n      flex-direction: column;\n      align-items: stretch;\n\n      .card {\n        max-width: 100%;\n      }\n    }\n  }\n\n  hgroup {\n    svg {\n      margin-bottom: 4px;\n      margin-left: 3px;\n    }\n\n    h2 {\n      font-size: 48px;\n      line-height: 60px;\n      letter-spacing: -0.03em;\n    }\n\n    h3 {\n      font-size: 40px;\n      line-height: 50px;\n    }\n\n    p {\n      font-size: 20px;\n      line-height: 31px;\n    }\n  }\n\n  .items {\n    display: flex;\n    justify-content: space-between;\n    flex-wrap: wrap;\n    margin-left: -15px;\n    margin-right: -15px;\n    list-style: none;\n    padding: 0;\n\n    li {\n      padding: 64px 15px 0;\n      flex: 0 calc(33% - 20px);\n\n      @media (max-width: $screen-xs-max) {\n        flex: 0 100%;\n        padding-top: 0;\n      }\n    }\n\n    svg {\n      margin-bottom: 8px;\n    }\n\n    h4 {\n      font-size: 20px;\n      line-height: 22px;\n    }\n\n    p {\n      font-size: 16px;\n      line-height: 27px;\n      color: #616E7E;\n    }\n  }\n\n  .features {\n    display: flex;\n    justify-content: space-around;\n    flex-wrap: wrap;\n    margin-left: -15px;\n    margin-right: -15px;\n    list-style: none;\n    padding: 0;\n    margin-top: 72px;\n\n    li {\n      padding: 0 15px 0 34px;\n      flex: 0 1 350px;\n      min-width: 256px;\n      margin-bottom: 36px;\n      position: relative;\n\n      &::before {\n        content: url('data:image/svg+xml,\n          <svg viewBox=\"0 0 14 11\" xmlns=\"http://www.w3.org/2000/svg\">\n            <path d=\"M4.45889 8.66035L1.16667 5.25367L0 6.4029L4.45889 11L14 1.1492L12.8333 0L4.45889 8.66035Z\"/>\n          </svg>');\n        fill: #1A232F;\n        display: block;\n        width:13px;\n        height:10px;\n        position: absolute;\n        left: 6px;\n        top: 2px;\n      }\n    }\n\n    strong {\n      font-size: 16px;\n      line-height: 23px;\n      font-weight: 600;\n    }\n\n    p {\n      font-size: 14px;\n      line-height: 22px;\n    }\n  }\n\n  @media (max-width: $screen-sm-max) {\n    .graphics {\n      margin: 0 auto;\n      max-width: 100%;\n      height: auto;\n    }\n  }\n}\n\nmain aside {\n  background: #F6F8FB;\n  margin-top: -60px;\n  padding-top: 200px;\n  padding-bottom: 120px;\n\n  h4 {\n    color: rgba(#020814, .8);\n  }\n}\n\n#features {\n  hgroup {\n    max-width: 700px;\n  }\n\n   h4 {\n    font-family: $font-family-monospace;\n    font-style: normal;\n    font-weight: bold;\n    font-size: 14px;\n    line-height: 26px;\n    letter-spacing: 0.14em;\n    text-transform: uppercase;\n    color: #92A1B3;\n   }\n\n   h3 {\n    font-size: 24px;\n    line-height: 34px;\n    letter-spacing: -0.02em;\n    color: #020814;\n   }\n}"
  },
  {
    "path": "assets/scss/pages/enterprise/solutions/cross-platform.scss",
    "content": "@import '../../../vars';\n@import '../../../mixins';\n@import 'bootstrap-sass/assets/stylesheets/bootstrap/variables';\n\n@import '../shared';\n@import './shared';\n\nimg {\n  height: auto;\n}\n\n#more-than-mobile .content {\n  margin-top: 316px;\n\n  &::after {\n    background: url('/img/solutions/apple-devices.png');\n    background-size: cover;\n    width: 982px;\n    height: 696px;\n    position: absolute;\n    right: calc(50% - 898px);\n    top: 174px;\n    content: '';\n  }\n\n  @media (max-width: $screen-sm-max) {\n    margin-bottom: 200px;\n\n    &::after {\n      right: calc(100% - 906px);\n      width: 491px;\n      height: 348px;\n      top: auto;\n      bottom: 50px;\n    }\n  }\n}\n\n#full-native-power .content {\n  margin-top: 373px;\n\n  &::after {\n    background: url('/img/solutions/iphone-parts.jpg');\n    background-size: cover;\n    width: 594px;\n    height: 772px;\n    position: absolute;\n    left: -38px;\n    top: 207px;\n    content: '';\n  }\n\n  @media (max-width: $screen-md-max) {\n    &::after {\n      width: 396px;\n      height: 515px;\n      top: 328px;\n    }\n  }\n\n  @media (max-width: $screen-md-max) {\n    margin-top: 400px;\n\n    &::after {\n      width: 297px;\n      height: 386px;\n      top: 0;\n      left: calc(50% - 150px);\n    }\n  }\n}\n\n#future-proof .content {\n  margin-top: 431px;\n\n  &::after {\n    background: url('/img/solutions/ionic-platforms.svg');\n    background-size: cover;\n    width: 606px;\n    height: 672px;\n    position: absolute;\n    right: calc(50% - 632px);\n    top: 282px;\n    content: '';\n  }\n\n  @media (max-width: $screen-md-max) {\n    &::after {\n      width: 303px;\n      height: 336px;\n      right: calc(50% - 150px);\n      top: 80px;\n    }\n  }\n}\n\n#how-to .content {\n  margin-top: 146px;\n  max-width: 100%;;\n\n  h2 {\n    text-align: center;\n  }\n}\n\n#get-started {\n  margin-top: -225px;\n  padding-top: 134px;\n\n  @media (max-width: $screen-md-max) {\n    padding-top: 300px;\n    margin-top: -200px;\n  }\n}\n"
  },
  {
    "path": "assets/scss/pages/enterprise/solutions/design.scss",
    "content": "@import '../../../vars';\n@import '../../../mixins';\n@import 'bootstrap-sass/assets/stylesheets/bootstrap/variables';\n\n@import '../shared';\n@import './shared';\n\nimg {\n  height: auto;\n}\n\n#build-and-share .content::after {\n  background: url('/img/solutions/components.png');\n  background-size: cover;\n  width: 881px;\n  height: 727px;\n  position: absolute;\n  right: calc(50% - 900px);\n  top: 112px;\n  content: '';\n}\n\n@media (max-width: $screen-sm-max) {\n  #build-and-share {\n    margin-bottom: 100px;\n\n    .content::after {\n      width: 387px;\n      height: 363px;\n      top: auto;\n      right: calc(100% - 870px);\n      bottom: -95px;\n    }\n  }\n}\n\n#one-design .content::after {\n  background: url('/img/solutions/everywhere.png');\n  background-size: cover;\n  width: 762px;\n  height: 512px;\n  position: absolute;\n  left: -216px;\n  top: 214px;\n  content: '';\n\n  @media (max-width: $screen-md-max) {\n    width: 508px;\n    height: 341px;\n    left: -70px;\n    top: 250px;\n  }\n}\n\n@media (max-width: $screen-sm-max) {\n  #one-design .content {\n    margin-bottom: 250px;\n\n    &::after {\n      width: 381px;\n      height: 256px;\n      left: calc(50% - 190px);\n      bottom: 0;\n      top: auto;\n    }\n  }\n}\n\n#developer-adoption {\n  border-bottom: 1px solid rgba(#92A1B3, .3);\n  position: relative;\n\n  .content {\n    margin-top: 222px;\n    margin-bottom: 198px;\n    position: static;\n\n    &::after {\n      background: url('/img/solutions/design-system-dashboard.png');\n      background-size: cover;\n      width: 942px;\n      height: 742px;\n      position: absolute;\n      right: calc(50% - 899px);\n      bottom: 0;\n      content: '';\n\n      @media (max-width: $screen-md-max) {\n        right: calc(50% - 950px);\n      }\n    }\n\n    @media (max-width: $screen-sm-max) {\n      margin-top: 100px;\n      margin-bottom: 180px;\n\n      &::after {\n        right: calc(50% - 540px);\n        width: 471px;\n        height: 371px;\n      }\n    }\n\n    @media (max-width: $screen-xs-max) {\n      &::after {\n        right: calc(100% - 920px);\n      }\n    }\n  }\n\n  @media (min-width: 1794px) {\n    .content::after {\n      right: 0;\n    }\n  }\n}\n\n#help {\n  .content {\n    text-align: left;\n  }\n\n  h2,\n  p {\n    margin-right: 140px;\n    margin-left: 140px;\n\n    @media (max-width: $screen-sm-max) {\n      margin-right: 0;\n      margin-left: 0;\n    }\n  }\n}\n"
  },
  {
    "path": "assets/scss/pages/enterprise/solutions/index.scss",
    "content": "@import '../../../vars';\n@import '../../../mixins';\n@import 'bootstrap-sass/assets/stylesheets/bootstrap/variables';\n\n@import '../shared';\n@import './shared';\n\n.ee-hero {\n  padding-bottom: 0;\n}\n\n.ee-main section {\n  margin-bottom: 80px;\n}\n\nmain {\n  margin-bottom: 180px;\n\n  .content {\n   margin: 163px 0 184px;\n }\n\n p {\n   margin-bottom: 0;\n }\n}\n\n@media (max-width: $screen-xs-max) {\n  main .content {\n    margin: 80px 0 0;\n  }\n\n  .solution-hero::after {\n   display: none;\n  }\n}\n"
  },
  {
    "path": "assets/scss/pages/enterprise/support.scss",
    "content": "@import \"../../vars\";\n@import \"bootstrap-sass/assets/stylesheets/bootstrap/variables\";\n\n#page-enterprise-support {\n  .navbar.transparent ~ .banner {\n    background: #00295b no-repeat center bottom\n      url(\"/img/enterprise/support/enterprise-support-hero-bg.jpg\");\n    background-size: cover;\n    padding-bottom: 118px;\n    padding-top: 135px;\n    color: rgba(white, 1);\n\n    hgroup {\n      padding-top: 0;\n      padding-bottom: 0;\n    }\n\n    h1 {\n      font-weight: 700;\n      font-size: 50px;\n    }\n\n    p {\n      font-size: 20px;\n      font-weight: 500;\n      color: #bccce4;\n    }\n  }\n\n  .btn {\n    font-size: 15px;\n    font-weight: 700;\n  }\n\n  section.help {\n    hgroup {\n      padding-top: 64px;\n      padding-bottom: 64px;\n\n      h2 {\n        font-weight: 700;\n        font-size: 34px;\n        letter-spacing: -0.04em;\n      }\n\n      p {\n        font-size: 18px;\n        font-weight: 500;\n      }\n    }\n\n    .features {\n      padding: 0;\n      list-style: none;\n      display: flex;\n      flex-wrap: wrap;\n      justify-content: space-between;\n      max-width: 850px;\n      margin: 16px auto 16px;\n\n      @media (max-width: $screen-xs-max) {\n        justify-content: center;\n      }\n\n      li {\n        flex: 0 0 240px;\n        padding-top: 80px;\n        position: relative;\n        margin-bottom: 64px;\n\n        &::before {\n          background: url(\"/img/enterprise/support/enterprise-support-icons.png\")\n            no-repeat 0 0;\n          background-size: 48px;\n          width: 48px;\n          height: 48px;\n          content: \"\";\n          position: absolute;\n          top: 0;\n        }\n\n        @media (max-width: $screen-xs-max) {\n          flex: 0 0 100%;\n          text-align: center;\n\n          &::before {\n            left: calc(50% - 24px);\n          }\n        }\n\n        &.reviews::before {\n          background-position: 0 -48px;\n        }\n        &.sla::before {\n          background-position: 0 -96px;\n        }\n        &.training::before {\n          background-position: 0 -144px;\n        }\n        &.contact::before {\n          background-position: 0 -192px;\n        }\n        &.slack::before {\n          background-position: 0 -240px;\n        }\n\n        h4 {\n          font-weight: 600;\n          font-size: 20px;\n          margin-bottom: 16px;\n        }\n\n        p {\n          font-size: 16px;\n          font-weight: 400;\n          color: #727a87;\n        }\n      }\n    }\n  }\n\n  section.plan {\n    background: #f5f7fb;\n    padding-top: 64px;\n    // text-align: center;\n    padding-bottom: 64px;\n\n    .container {\n      max-width: 768px;\n    }\n\n    hgroup {\n      h2 {\n        font-weight: 700;\n        font-size: 34px;\n        letter-spacing: -0.04em;\n      }\n\n      p {\n        margin-top: 16px;\n        color: #626a77;\n        font-weight: 500;\n        margin-bottom: 64px;\n      }\n    }\n  }\n\n  section.get-in-touch {\n    margin-top: 0;\n    padding-top: 60px;\n    padding-bottom: 60px;\n    background: linear-gradient(to right, #4c8cff 0%, #76c6ff 100%);\n\n    .container {\n      display: flex;\n      align-items: center;\n\n      @media (max-width: $screen-xs-max) {\n        display: block;\n        text-align: center;\n      }\n    }\n\n    hgroup {\n      padding-bottom: 33px;\n    }\n\n    h2 {\n      font-size: 28px;\n      letter-spacing: -0.02em;\n      font-weight: 600;\n      display: inline-block;\n    }\n\n    p {\n      color: #003e82;\n      font-size: 18px;\n      font-weight: 500;\n      display: inline-block;\n    }\n\n    .btn-group {\n      text-align: right;\n    }\n\n    .btn {\n      margin-bottom: 8px;\n    }\n  }\n}\n"
  },
  {
    "path": "assets/scss/pages/enterprise/training.scss",
    "content": "#page-enterprise-training {\n  .banner {\n    padding-top: 198px;\n    padding-bottom: 90px;\n\n    h1 {\n      font-size: 48px;\n      font-weight: 600;\n      letter-spacing: -0.018em;\n    }\n\n    p {\n      margin-top: 15px;\n      font-size: 20px;\n      font-weight: 600;\n      letter-spacing: -0.03em;\n    }\n  }\n\n  main {\n    max-width: 630px;\n\n    h2 {\n      font-size: 29px;\n      font-weight: 700;\n      margin-bottom: 18px;\n      letter-spacing: -0.04em;\n    }\n\n    h3 {\n      margin-top: 39px;\n      margin-bottom: 21px;\n      font-size: 19px;\n      font-weight: 700;\n      letter-spacing: -0.005em;\n    }\n\n    p {\n      font-size: 17px;\n      font-weight: 500;\n      letter-spacing: 0.02em;\n      line-height: 1.9em;\n      margin-bottom: 32px;\n\n      + ul {\n        margin-top: -16px;\n      }\n    }\n\n    ul {\n      padding-left: 26px;\n    }\n\n    li {\n      font-size: 18px;\n      font-weight: 500;\n      letter-spacing: -0.005em;\n      line-height: 1.8em;\n    }\n  }\n\n  aside {\n    max-width: 520px;\n    margin-top: 46px;\n    margin-bottom: 78px;\n    text-align: center;\n\n    h3 {\n      color: #3880ff;\n      font-size: 28px;\n      font-weight: 700;\n      letter-spacing: -0.03em;\n\n      i {\n        color: #93a2bc;\n        font-style: normal;\n      }\n    }\n\n    .card {\n      padding: 30px 30px 1px;\n      width: 100%;\n      min-height: 300px;\n      background: white;\n      border-radius: 8px;\n      margin: 32px auto;\n      box-shadow: 0 6px 20px rgba(0, 0, 0, 0.2);\n    }\n  }\n}\n"
  },
  {
    "path": "assets/scss/pages/enterprise/why-ionic.scss",
    "content": "@import '../../vars';\n@import 'bootstrap-sass/assets/stylesheets/bootstrap/variables';\n@import 'shared';\n\nimg {\n  height: auto;\n}\n#experiences {\n  .content {\n    max-width: 500px;\n  }\n\n  .graphics {\n    width: 580px;\n    margin-right: 28px;\n    float: left;\n\n    img {\n      width: 757px;\n      float: right;\n    }\n\n    @media (max-width: $screen-md-max) {\n      width: 320px;\n      padding-right: 20px;\n    }\n\n    @media (max-width: $screen-xs-max) {\n      width: 100%;\n      margin-right: 0;\n\n      img {\n        width: 100%;\n        float: none;\n        max-width: 757px;\n      }\n    }\n  }\n}\n\n#streamline .graphics {\n  padding-left: 20px;\n}\n\n#talent .graphics {\n  width: 500px;\n\n  @media (max-width: $screen-md-max) {\n    width: calc(100% - 520px);\n  }\n\n  @media (max-width: $screen-xs-max) {\n    width: 100%;\n    max-width: 560px;\n    margin: 0 auto 20px;\n  }\n}\n\n#create .graphics {\n  width: 593px;\n  padding-left: 20px;\n  max-width: 100%;\n}\n\n#developers {\n\n  .graphics {\n    padding-right: 20px\n  }\n\n}\n"
  },
  {
    "path": "assets/scss/pages/framework.scss",
    "content": "@import \"../vars\";\n\n.page-framework {\n  img {\n    height: auto;\n  }\n\n  .primary-row {\n    text-align: center;\n\n    h1,\n    h2 {\n      border: none;\n      font-weight: normal;\n    }\n\n    h1 {\n      margin: 10px 0 0 0;\n      color: #ebf3ff;\n      font-size: 49px;\n    }\n\n    h2 {\n      margin: 5px 0 0 0;\n      color: #a8c7ff;\n      font-size: 16px;\n      line-height: 28px;\n      font-weight: 600;\n      cursor: default;\n      // -webkit-font-smoothing: antialiased;\n      text-shadow: 0 1px 2px rgba(0, 0, 0, 0.1);\n    }\n\n    .desktop-btn {\n      display: none;\n    }\n  }\n\n  .btn-row {\n    padding: 0;\n  }\n\n  .version-text {\n    color: rgba(255, 255, 255, 0.4);\n    font-weight: 500;\n    font-size: 11px;\n    a {\n      color: rgba(255, 255, 255, 0.4);\n\n      &:hover {\n        color: rgba(255, 255, 255, 0.7);\n        text-decoration: none;\n      }\n    }\n  }\n\n  .feature-img {\n    height: 175px;\n\n    @media (max-width: $screen-xs-max) {\n      display: none;\n    }\n\n    .demo-link {\n      visibility: visible;\n    }\n\n    .app-icon {\n      visibility: visible;\n    }\n\n    .device {\n      &.iphone {\n        width: 544px;\n        position: relative;\n        left: 46px;\n        top: 36px;\n      }\n\n      &.pixel {\n        width: 430px;\n        position: absolute;\n        top: 64px;\n        right: 110px;\n\n        @media (max-width: $screen-sm-max) {\n          right: 0;\n        }\n      }\n    }\n\n    .one,\n    .two {\n      opacity: 0;\n      animation: fadeInDown 0.7s;\n      animation-fill-mode: forwards;\n    }\n\n    .one {\n      animation-delay: 0.5s;\n    }\n\n    .two {\n      animation-delay: 0.7s;\n    }\n\n    .three {\n      opacity: 0;\n      animation: fadeIn 0.7s;\n      animation-fill-mode: forwards;\n      animation-delay: 1s;\n    }\n\n    .app-icon {\n      background-image: url(\"/img/frameworkpage/ionicview-icon_2x.png\");\n      background-size: 84px 84px;\n      background-repeat: no-repeat;\n      display: none;\n      height: 84px;\n      width: 84px;\n      position: absolute;\n      right: 0;\n      bottom: 0;\n\n      @media (max-width: $screen-sm-max) {\n        bottom: -60px;\n      }\n    }\n\n    a {\n      opacity: 1;\n\n      img {\n        opacity: 0.9;\n        transition: opacity 0.1s linear;\n        animation-delay: 0.5s;\n      }\n\n      span {\n        opacity: 0.7;\n        transition: opacity 0.1s linear;\n        animation-delay: 0.5s;\n      }\n\n      &:hover img,\n      &:hover span {\n        opacity: 1;\n      }\n    }\n\n    .demo-link {\n      position: absolute;\n      right: 6px;\n      bottom: -20px;\n      display: none;\n      color: white;\n      text-decoration: underline;\n      font-weight: 500;\n      font-size: 10px;\n      text-decoration: none;\n      text-shadow: 0px 1px 6px rgba(0, 0, 0, 0.2);\n\n      @media (max-width: $screen-sm-max) {\n        bottom: -75px;\n      }\n    }\n  }\n\n  @media (min-width: 768px) {\n    /* TABLET/Phone */\n    .primary-row {\n      text-align: left;\n\n      h1 {\n        font-size: 34px;\n      }\n\n      h2 {\n        font-size: 20px;\n      }\n\n      .desktop-btn {\n        display: inline-block;\n      }\n\n      .mobile-btn {\n        display: none;\n      }\n\n      .demo-link {\n        display: block;\n      }\n\n      .app-icon {\n        display: block;\n      }\n    }\n\n    .feature-img {\n      background-size: 420px 393px;\n      min-height: 405px;\n    }\n  }\n\n  .utility-bar {\n    margin-top: -160px;\n    position: relative;\n    padding: 20px 0 22px;\n    width: 100%;\n    background: rgba(0, 0, 0, 0.15);\n\n    @media (max-width: $screen-sm-max) {\n      margin-top: -216px;\n    }\n\n    @media (max-width: $screen-xs-max) {\n      margin-top: -528px;\n    }\n\n    .container {\n      overflow: hidden;\n      color: #dae7fd;\n      text-overflow: ellipsis;\n      white-space: nowrap;\n    }\n\n    form {\n      max-width: 458px;\n      float: right;\n\n      @media (max-width: $screen-sm-max) {\n        max-width: calc(100% - 340px);\n      }\n\n      @media (max-width: $screen-xs-max) {\n        float: none;\n        max-width: 100%;\n        margin-top: 15px;\n      }\n    }\n\n    button {\n      padding: 10px 13px;\n    }\n  }\n\n  #promo-ionicu {\n    background: url(\"/img/promos/university.jpg\") no-repeat transparent;\n    background-size: cover;\n    text-align: center;\n    padding-top: 100px;\n    height: 450px;\n    box-sizing: border-box;\n\n    h2,\n    h4 {\n      color: #fff;\n      text-shadow: 0px 1px 2px rgba(0, 0, 0, 0.5);\n    }\n    h2 {\n      font-weight: 400;\n      b {\n        font-weight: 600;\n      }\n    }\n    h4 {\n      font-weight: 400;\n      margin-bottom: 50px;\n    }\n\n    .btn {\n      background-color: white;\n      color: #397ff2;\n      box-shadow: 0px 1px 3px rgba(0, 0, 0, 0.15);\n    }\n  }\n\n  #promo-snapshot {\n    position: relative;\n    text-align: center;\n    background: linear-gradient(to right, #06558e 0%, #006e89 100%);\n    padding-top: 60px;\n\n    .container {\n      max-width: 975px;\n    }\n\n    h2 {\n      font-weight: 300;\n      margin-top: 0;\n      margin-bottom: 20px;\n      color: #fff;\n\n      a {\n        font-weight: 500;\n        color: #fff;\n        box-shadow: inset 0 0px 0 white, inset 0 -1px 0 white;\n        transition: 0.3s box-shadow;\n\n        &:hover,\n        &:active,\n        &:focus {\n          text-decoration: none;\n          box-shadow: inset 0 0px 0 white, inset 0 -2px 0 white;\n        }\n      }\n    }\n\n    h4 {\n      color: #fff;\n      margin-bottom: 50px;\n    }\n\n    img {\n      max-width: 100%;\n    }\n\n    #promo-bar {\n      width: 100%;\n      position: absolute;\n      bottom: 0;\n      z-index: 1;\n      background-color: rgba(255, 255, 255, 0.95);\n      -webkit-backdrop-filter: blur(10px);\n      backdrop-filter: blur(10px);\n      padding: 10px 0;\n      overflow: auto;\n\n      .left-text {\n        float: left;\n        line-height: 60px;\n        vertical-align: middle;\n        font-weight: 500;\n        margin-left: 15px;\n      }\n      .right-text {\n        float: right;\n        line-height: 60px;\n        vertical-align: middle;\n        margin-right: 15px;\n      }\n    }\n  }\n\n  .banner-cta {\n    background: #f6f7fa;\n    padding-top: 80px;\n    margin-bottom: -32px;\n\n    .box {\n      background: url(\"/img/framework/2018-framework-card-bg.png\") 50% 50%\n        no-repeat;\n      background-size: cover;\n      display: flex;\n      align-items: center;\n      border-radius: 8px;\n      box-shadow: 0 2px 16px rgba(0, 0, 0, 0.3);\n      padding: 37px 69px 38px 54px;\n      position: relative;\n      min-height: 160px;\n\n      @media (max-width: $screen-xs-max) {\n        display: block;\n        padding-left: 32px;\n        padding-right: 32px;\n        text-align: center;\n\n        &::before {\n          display: none;\n        }\n\n        .btn {\n          margin-left: 0;\n          margin-top: 24px;\n        }\n      }\n    }\n\n    hgroup {\n      flex-grow: 1;\n      color: white;\n      position: relative;\n      z-index: 1;\n      margin-top: 8px;\n    }\n\n    .orange {\n      color: $orange;\n      font-size: 18px;\n      letter-spacing: 0.015em;\n      margin-bottom: 12px;\n      line-height: 1em;\n    }\n\n    h2 {\n      font-weight: 700;\n      margin-top: 0;\n      font-size: 38px;\n      letter-spacing: -0.045em;\n      margin-bottom: 5px;\n    }\n\n    .lg {\n      font-size: 22px;\n      letter-spacing: -0.019em;\n      margin-bottom: 0;\n      color: white;\n    }\n\n    .btn {\n      margin-left: 8px;\n      font-size: 16px;\n      letter-spacing: 0.055em;\n      padding: 19px 21px 14px;\n      font-weight: 600;\n      position: relative;\n      z-index: 1;\n      text-transform: uppercase;\n    }\n  }\n\n  .built-with {\n    background: #f6f7fa;\n    padding-bottom: 100px;\n\n    @media (max-width: $screen-sm-max) {\n      padding-bottom: 40px;\n    }\n\n    hgroup {\n      position: relative;\n      padding-top: 103px;\n\n      @media (max-width: $screen-sm-max) {\n        padding-top: 280px;\n      }\n\n      @media (max-width: $screen-xs-max) {\n        padding-top: 153px;\n      }\n\n      h2,\n      h4 {\n        width: 48%;\n\n        @media (max-width: $screen-sm-max) {\n          width: 100%;\n          text-align: center;\n        }\n      }\n\n      h2 {\n        font-size: 28px;\n        font-weight: 500;\n        letter-spacing: -0.02em;\n      }\n\n      h4 {\n        font-size: 20px;\n        font-weight: 400;\n        color: #4a566b;\n        line-height: 1.8em;\n        margin-top: 16px;\n        letter-spacing: -0.02em;\n      }\n    }\n\n    .techs {\n      list-style: none;\n      position: absolute;\n      right: 0;\n      top: 123px;\n      width: 48%;\n\n      @media (max-width: $screen-sm-max) {\n        top: 50px;\n        left: 0;\n        margin: 0 auto;\n        width: 600px;\n      }\n\n      @media (max-width: $screen-xs-max) {\n        transform: scale(0.5, 0.5);\n        top: 50px;\n        width: 600px;\n      }\n\n      @media (max-width: 600px) {\n        margin-left: calc(50% - 300px);\n      }\n\n      li {\n        background: url(\"/img/framework/web-icons.png\") no-repeat 0 0;\n        background-size: 200px;\n        height: 200px;\n        width: 200px;\n        position: absolute;\n        opacity: 0;\n        animation: fadeIn 1s;\n        animation-fill-mode: forwards;\n\n        &.angular {\n          right: 64.5%;\n          animation-delay: 1.4s;\n        }\n\n        &.js {\n          right: 43%;\n          background-position: 0 -200px;\n          animation-delay: 1.6s;\n        }\n\n        &.ts {\n          right: 21.5%;\n          background-position: 0 -400px;\n          animation-delay: 1.8s;\n        }\n\n        &.html {\n          right: 0%;\n          background-position: 0 -600px;\n          animation-delay: 2s;\n        }\n      }\n    }\n\n    .features {\n      margin-top: 75px;\n\n      @media (max-width: $screen-sm-max) {\n        display: flex;\n        flex-wrap: wrap;\n        margin-top: 45px;\n      }\n\n      li {\n        width: calc(25% + 2px);\n        display: inline-block;\n        padding-left: 37px;\n        padding-right: 20px;\n        vertical-align: top;\n        background: url(\"/img/framework/checkmark-icon.png\") no-repeat 0 0;\n        background-size: 24px;\n\n        @media (max-width: $screen-sm-max) {\n          width: auto;\n          flex: 1 0 320px;\n          margin-bottom: 15px;\n        }\n\n        h3 {\n          font-size: 17px;\n          font-weight: 500;\n          margin-top: 4px;\n          margin-bottom: 5px;\n        }\n\n        p {\n          font-size: 16px;\n          font-weight: 400;\n          color: #5c6a81;\n          line-height: 1.7em;\n          letter-spacing: -0.02em;\n        }\n\n        &:last-child {\n          padding-right: 0;\n          width: calc(25% - 19px);\n        }\n      }\n    }\n  }\n\n  .about-code {\n    position: relative;\n\n    .code-box {\n      width: 545px;\n      box-shadow: 0 8px 16px rgba(0, 0, 0, 0.08), 0 2px 6px rgba(0, 0, 0, 0.04);\n      border-radius: 4px;\n      position: absolute;\n      top: -20px;\n      background: white;\n\n      @media (max-width: 626px) {\n        display: none;\n      }\n\n      .app,\n      .toggle {\n        transition: 0.7s right cubic-bezier(0.49, 1.65, 0.73, 1.13);\n      }\n\n      &.done {\n        .app,\n        .toggle {\n          transition: none;\n        }\n      }\n\n      &.active {\n        .app,\n        .toggle {\n          right: 65%;\n        }\n      }\n\n      header {\n        padding: 24px 38px 28px;\n        position: relative;\n        z-index: 5;\n\n        &::after {\n          position: absolute;\n          bottom: -5px;\n          background: linear-gradient(\n            to bottom,\n            rgba(200, 200, 200, 0.3) 0%,\n            rgba(200, 200, 200, 0) 100%\n          );\n          left: 0;\n          right: 0;\n          height: 5px;\n          content: \"\";\n          display: block;\n        }\n\n        h3 {\n          font-weight: 700;\n          font-size: 11px;\n          letter-spacing: 0.2em;\n          text-transform: uppercase;\n          display: inline-block;\n        }\n\n        .platforms {\n          list-style: none;\n          position: absolute;\n          right: 26px;\n          top: 37px;\n\n          li {\n            background: url(\"/img/framework/icons-sm.png\") no-repeat 0 0;\n            background-size: 24px;\n            height: 24px;\n            width: 24px;\n            display: inline-block;\n            margin-right: 9px;\n\n            &.android {\n              background-position: 0 -24px;\n            }\n            &.windows {\n              background-position: 0 -48px;\n            }\n            &.chrome {\n              background-position: 0 -72px;\n            }\n            &.electron {\n              background-position: 0 -96px;\n            }\n          }\n        }\n      }\n    }\n\n    hgroup {\n      min-height: 469px;\n      margin-left: 625px;\n\n      @media (max-width: $screen-sm-max) {\n        margin-left: 0;\n        margin-top: 400px;\n        text-align: center;\n        min-height: 0;\n        margin-bottom: 40px;\n      }\n\n      @media (max-width: 626px) {\n        margin-top: 0;\n      }\n\n      h2 {\n        padding-top: 72px;\n        font-size: 28px;\n        line-height: 1.6em;\n        font-weight: 500;\n        letter-spacing: -0.02em;\n      }\n\n      h4 {\n        font-size: 20px;\n        font-weight: 400;\n        color: #4a566b;\n        line-height: 1.8em;\n        margin-top: 16px;\n        letter-spacing: -0.02em;\n\n        strong {\n          color: black;\n          font-weight: 400;\n        }\n      }\n    }\n\n    .features {\n      list-style: none;\n      padding: 0 0 109px;\n\n      @media (max-width: $screen-sm-max) {\n        padding-bottom: 50px;\n      }\n\n      li {\n        display: inline-block;\n        padding-top: 93px;\n        position: relative;\n        width: 29.7%;\n        vertical-align: top;\n        padding-right: 5%;\n        box-sizing: content-box;\n\n        @media (max-width: $screen-sm-max) {\n          width: 100%;\n          text-align: center;\n          margin-bottom: 40px;\n          padding-right: 0;\n        }\n\n        &::before {\n          background: url(\"/img/framework/icons-lg.png\") no-repeat 0 0;\n          background-size: 93px;\n          height: 93px;\n          width: 93px;\n          content: \"\";\n          top: 0;\n          left: -7px;\n          position: absolute;\n\n          @media (max-width: $screen-sm-max) {\n            left: calc(50% - 47px);\n          }\n        }\n\n        &.beautiful::before {\n          background-position: 0 -93px;\n        }\n\n        &.optimized::before {\n          background-position: 0 -186px;\n        }\n\n        &:last-child {\n          padding-right: 0;\n        }\n\n        h3 {\n          font-size: 22px;\n          font-weight: 500;\n          margin-bottom: 16px;\n          letter-spacing: -0.02em;\n        }\n\n        p,\n        a {\n          font-size: 16px;\n          color: #5c6a81;\n          line-height: 2em;\n          letter-spacing: -0.02em;\n        }\n\n        a {\n          color: #4a8bfc;\n          font-weight: 500;\n\n          span {\n            position: relative;\n            right: -2px;\n            top: 2px;\n          }\n\n          &:hover {\n            color: darken($blue, 5);\n            text-decoration: none;\n          }\n        }\n      }\n    }\n  }\n\n  .about-toolkit {\n    background: #09224d;\n    background: linear-gradient(to right, #051d46 0%, #1d3f6f 100%);\n    padding-top: 109px;\n    padding-bottom: 36px;\n    color: #9fb0cb;\n\n    hgroup {\n      text-align: center;\n      margin-bottom: 96px;\n\n      h2 {\n        color: white;\n        font-size: 27px;\n        font-weight: 500;\n        margin-bottom: 27px;\n        letter-spacing: -0.01em;\n      }\n\n      h4 {\n        font-weight: 500;\n        font-size: 20px;\n        letter-spacing: -0.02em;\n      }\n    }\n\n    .features {\n      list-style: none;\n      padding: 0;\n\n      @media (max-width: $screen-md-max) {\n        display: flex;\n        flex-wrap: wrap;\n      }\n\n      li {\n        width: calc(33% + 22px);\n        display: inline-block;\n        padding-left: 83px;\n        margin-bottom: 54px;\n        font-weight: 500;\n        font-size: 16px;\n        padding-right: 55px;\n        line-height: 1.8em;\n        vertical-align: top;\n        position: relative;\n        letter-spacing: -0.02em;\n\n        &:nth-child(3),\n        &:last-child {\n          width: calc(33% - 40px);\n          padding-right: 0;\n        }\n\n        @media (max-width: $screen-md-max) {\n          width: auto;\n          flex: 1 0 350px;\n\n          &:nth-child(3),\n          &:last-child {\n            width: auto;\n          }\n        }\n\n        &::before {\n          background: url(\"/img/framework/icons-md.png\") no-repeat 0 0;\n          background-size: 80px;\n          height: 80px;\n          width: 80px;\n          content: \"\";\n          position: absolute;\n          left: 0;\n          top: 0;\n        }\n\n        &.cli::before {\n          background-position: 0 -320px;\n        }\n\n        &.native::before {\n          background-position: 0 -400px;\n        }\n\n        &.reload::before {\n          background-position: 0 -480px;\n        }\n\n        &.zionicons::before {\n          background-position: 0 -560px;\n        }\n\n        &.deeplinking::before {\n          background-position: 0 -640px;\n        }\n\n        &.aot::before {\n          background-position: 0 -720px;\n        }\n\n        a {\n          color: white;\n\n          &:hover {\n            text-decoration: none;\n            color: rgba(white, 0.7);\n          }\n        }\n      }\n    }\n  }\n\n  .about-community {\n    background: #09172e;\n    background: url(\"/img/framework/map.png\") no-repeat center center,\n      linear-gradient(to right, #050f23 0%, #13233f 100%);\n\n    background-size: cover, 100%;\n    color: #909ebb;\n    padding-bottom: 44px;\n\n    .container {\n      position: relative;\n    }\n\n    .stats {\n      background: white;\n      border-radius: 4px;\n      color: $light-blue;\n      width: 412px;\n      text-transform: uppercase;\n      position: absolute;\n      right: 15px;\n      top: -19px;\n      padding: 55px 85px 52px;\n      text-align: center;\n      box-shadow: 0 8px 16px rgba(0, 0, 0, 0.2);\n\n      @media (max-width: $screen-xs-max) {\n        position: relative;\n        right: 0;\n        width: 100%;\n      }\n\n      @media (max-width: 420px) {\n        padding-right: 15px;\n        padding-left: 15px;\n      }\n\n      h5 {\n        background: #fff;\n        color: #b8c1cf;\n        font-size: 11px;\n        position: relative;\n        padding: 0 10px;\n        font-weight: 700;\n        letter-spacing: 0.2em;\n\n        &::before,\n        &::after {\n          content: \"\";\n          left: 0;\n          right: 73%;\n          border-bottom: 1px solid #d0d6e0;\n          display: block;\n          top: 4px;\n          position: absolute;\n        }\n\n        &::after {\n          left: 73%;\n          right: 0;\n        }\n      }\n\n      h1 {\n        font-weight: 600;\n        font-size: 78px;\n        letter-spacing: -3px;\n        margin-bottom: 0;\n        margin-top: 36px;\n      }\n\n      h4 {\n        margin-top: -3px;\n        font-size: 13px;\n        color: #272a2f;\n        font-weight: 700;\n        letter-spacing: 5px;\n      }\n\n      ul {\n        list-style: none;\n        padding: 33px 0 0;\n\n        @media (max-width: $screen-xs-max) {\n          max-width: 250px;\n          margin: 0 auto;\n        }\n      }\n\n      li {\n        font-weight: 700;\n        text-align: left;\n        position: relative;\n        letter-spacing: 0.15em;\n        padding: 12px 0 16px 37px;\n        font-size: 13px;\n\n        &::before {\n          background: url(\"/img/framework/icons-sm.png\") no-repeat 0 0;\n          background-size: 24px;\n          height: 24px;\n          width: 24px;\n          content: \"\";\n          display: block;\n          position: absolute;\n          left: -4px;\n          top: 10px;\n        }\n\n        &.devs::before {\n          background-position: 0 -120px;\n        }\n\n        &.meetups::before {\n          background-position: 0 -144px;\n        }\n\n        &.github::before {\n          background-position: 0 -168px;\n        }\n\n        &.so::before {\n          background-position: 0 -192px;\n        }\n      }\n    }\n\n    hgroup {\n      padding-top: 108px;\n      margin-right: 425px;\n      padding-bottom: 76px;\n\n      @media (max-width: $screen-sm-max) {\n        padding-top: 20px;\n        padding-bottom: 46px;\n      }\n\n      @media (max-width: $screen-xs-max) {\n        margin-right: 0;\n        text-align: center;\n      }\n\n      h2 {\n        color: white;\n        font-weight: 400;\n        margin-bottom: 16px;\n        font-size: 27px;\n        margin-bottom: 28px;\n      }\n\n      h4 {\n        font-weight: 500;\n        font-size: 19px;\n      }\n    }\n\n    .features {\n      list-style: none;\n      margin-right: 420px;\n      padding: 0;\n\n      @media (max-width: $screen-xs-max) {\n        margin-right: 0;\n      }\n\n      li {\n        padding: 0 64px 83px 78px;\n        display: inline-block;\n        position: relative;\n        width: 49%;\n        font-weight: 500;\n        font-size: 16px;\n\n        @media (max-width: $screen-sm-max) {\n          width: 100%;\n          padding-right: 5px;\n          padding-bottom: 50px;\n        }\n\n        &::before {\n          background: url(\"/img/framework/icons-md.png\") no-repeat 0 0;\n          background-size: 80px;\n          height: 80px;\n          width: 80px;\n          content: \"\";\n          display: block;\n          position: absolute;\n          left: -11px;\n          top: -11px;\n        }\n\n        &.so::before {\n          background-position: 0 -80px;\n        }\n\n        &.slack::before {\n          background-position: 0 -160px;\n        }\n\n        &.forum::before {\n          background-position: 0 -240px;\n        }\n      }\n    }\n\n    a {\n      color: white;\n\n      &:hover {\n        text-decoration: none;\n        color: rgba(white, 0.7);\n      }\n    }\n  }\n\n  .loved-by {\n    text-align: center;\n    position: relative;\n\n    h2 {\n      margin-top: 125px;\n      padding-top: 58px;\n      margin-bottom: 67px;\n      font-size: 22px;\n      font-weight: 500;\n      color: #4a566b;\n      position: relative;\n      letter-spacing: -0.03em;\n\n      &::before {\n        background: url(\"/img/framework/heart-icon.png\") no-repeat center top;\n        background-size: 48px;\n        height: 43px;\n        width: 48px;\n        content: \"\";\n        display: block;\n        position: absolute;\n        top: 0;\n        left: calc(50% - 24px);\n        animation: pulse 3.5s infinite;\n      }\n\n      strong {\n        font-weight: 500;\n        color: #272a2f;\n      }\n    }\n\n    h3 {\n      font-family: \"Georgia\", sans-serif;\n      font-size: 22px;\n      margin: 0 auto;\n      display: inline-block;\n      max-width: 900px;\n      color: #727a87;\n      line-height: 2.2em;\n      position: relative;\n      font-weight: 300;\n      position: absolute;\n      left: 0;\n      right: 0;\n      opacity: 0;\n\n      &.active {\n        position: relative;\n        opacity: 1;\n\n        &::before {\n          background: url(\"/img/quote.png\") no-repeat;\n          background-size: 50px 50px;\n          height: 50px;\n          width: 50px;\n          content: \"\";\n          position: absolute;\n          left: -50px;\n          top: -5px;\n          opacity: 0.7;\n        }\n      }\n    }\n\n    .quotees {\n      list-style: none;\n      padding: 36px 0 44px;\n\n      @media (max-width: $screen-sm-max) {\n        display: flex;\n        flex-wrap: wrap;\n        justify-content: space-around;\n      }\n\n      li {\n        list-style: none;\n        text-align: left;\n        display: inline-block;\n        position: relative;\n        padding-left: 90px;\n        padding-right: 40px;\n        vertical-align: top;\n        min-width: 23%;\n        min-height: 80px;\n        margin-bottom: 20px;\n        opacity: 0.3;\n        transition: 0.3s opacity;\n        cursor: pointer;\n\n        @media (max-width: $screen-sm-max) {\n          flex: 0 0 240px;\n          padding-right: 20px;\n        }\n\n        &.active {\n          opacity: 1;\n        }\n\n        img {\n          position: absolute;\n          left: 0;\n          width: 88px;\n          height: 80px;\n        }\n\n        strong {\n          display: block;\n          font-weight: 500;\n          font-size: 16px;\n          margin-top: 27px;\n        }\n\n        span {\n          color: #727a87;\n          font-size: 14px;\n\n          a {\n            color: $blue;\n\n            &:hover {\n              color: darken($blue, 5);\n              text-decoration: none;\n            }\n          }\n        }\n      }\n    }\n\n    .companies {\n      width: 100%;\n      max-width: 977px;\n      margin: 10px auto 123px;\n    }\n  }\n}\n\n.fadeInDown {\n  animation-name: fadeInDown;\n}\n\n#slider {\n  margin: 0 auto;\n  padding: 0;\n  position: relative;\n  top: -78px;\n  width: 100%;\n  overflow-x: hidden;\n\n  .slick-prev,\n  .slick-next {\n    left: 10px;\n    top: 40%;\n\n    &:before {\n      content: \" \";\n      display: block;\n      position: relative;\n      background: no-repeat url(\"/img/slider-arrow-left.png\");\n      background-size: 19px;\n      width: 19px;\n      height: 42px;\n      z-index: 1000;\n      opacity: 0.4;\n      transition: 0.3s opacity;\n    }\n\n    &:hover:before {\n      opacity: 1;\n    }\n  }\n\n  .slick-next {\n    left: auto;\n    right: 10px;\n\n    &:before {\n      background: no-repeat url(\"/img/slider-arrow-right.png\");\n      background-size: 19px;\n    }\n  }\n\n  .slick-fade-out {\n    opacity: 1 !important;\n  }\n\n  .slide {\n    padding: 100px 0 100px;\n    width: 100%;\n    outline: none;\n  }\n\n  .feature-img {\n    min-height: 502px;\n  }\n\n  .slick-dots {\n    bottom: 97px;\n\n    li button:before {\n      color: white;\n      font-size: 22px;\n      transition: transform 0.2s, opacity 0.2s;\n    }\n\n    li.slick-active button:before {\n      transform: scale(1.3);\n    }\n  }\n\n  .col-sm-6:first-child {\n    padding-left: 0;\n    min-height: 604px;\n\n    @media (max-width: $screen-xs-max) {\n      min-height: 304px;\n    }\n  }\n\n  h1 {\n    margin: 50px 0 0 0;\n    font-size: 48px;\n    font-weight: 400;\n    color: white;\n    letter-spacing: -0.05em;\n    // -webkit-font-smoothing: antialiased;\n    text-shadow: 0 1px 2px rgba(0, 0, 0, 0.07);\n    cursor: default;\n    line-height: 64px;\n\n    strong {\n      font-weight: 600;\n    }\n  }\n\n  h2 {\n    font-size: 32px;\n    color: white;\n  }\n\n  h3 {\n    color: #d8e8ff;\n    font-size: 18px;\n    font-weight: 500;\n    cursor: default;\n    margin: 20px 0px 32px;\n    line-height: 1.6;\n    letter-spacing: -0.02em;\n    max-width: 500px;\n    text-shadow: 0 1px 2px rgba(0, 0, 0, 0.07);\n  }\n\n  .btn-row {\n    margin-top: 66px;\n  }\n\n  .ion-chevron-right {\n    font-size: 16px;\n    margin-left: 4px;\n  }\n}\n\n// IE fixes\n$ieEightAndNine: \"\\0/\";\n.home .navbar {\n  background: none;\n  background: unquote(#4e8ef7 + $ieEightAndNine);\n}\n\n@media screen and (-ms-high-contrast: active), (-ms-high-contrast: none) {\n  .home .navbar {\n    background: #4e8ef7;\n  }\n}\n\n@media (max-width: $screen-sm-max) {\n  #slider {\n    top: -134px;\n\n    .slide {\n      padding: 125px 0 50px;\n    }\n\n    .slick-dots {\n      bottom: 172px;\n    }\n\n    .feature-img {\n      min-height: 455px;\n    }\n\n    h1 {\n      font-size: 32px;\n      line-height: 48px;\n      margin-top: 84px;\n    }\n\n    h3 {\n      font-size: 18px;\n    }\n  }\n}\n\n@media (max-width: $screen-xs-max) {\n  #slider {\n    top: -392px;\n\n    .slide {\n      padding: 472px 0 188px;\n    }\n\n    .slick-dots {\n      bottom: 229px;\n    }\n\n    .feature-img {\n      min-height: 305px;\n    }\n\n    .logo,\n    .slide-creator .logo {\n      margin: -15px auto 15px;\n      text-align: center;\n    }\n\n    h1 {\n      font-size: 30px;\n      margin: 0 auto;\n      text-align: center;\n    }\n\n    h3 {\n      font-size: 14px;\n      margin: 0 auto;\n      text-align: center;\n    }\n\n    .logo {\n      margin: 0 auto 15px;\n    }\n  }\n\n  .home .utility-bar {\n    margin-top: -628px;\n  }\n}\n\n.slide-home {\n  background: #298fff;\n  background: linear-gradient(to right, #347eff 0%, #1ea3ff 100%);\n}\n\n.social-row {\n  margin: 12px 0 0 0;\n  font-weight: 500;\n  padding-left: 0;\n  display: inline-block;\n  float: left;\n\n  @media (max-width: $screen-xs-max) {\n    float: none;\n  }\n\n  li {\n    display: inline-block;\n    height: 27px;\n    margin-right: 22px;\n    font-size: 14px;\n\n    i {\n      padding-right: 2px;\n      display: inline;\n    }\n\n    @media (max-width: $screen-sm-max) {\n      font-size: 14px;\n      margin-right: 15px;\n\n      i {\n        padding-right: 4px;\n      }\n    }\n\n    @media (max-width: 360px) {\n      &:nth-child(2) {\n        display: none;\n      }\n    }\n  }\n\n  a {\n    text-decoration: none;\n    opacity: 0.6;\n    color: white;\n    letter-spacing: -0.02em;\n    transition: 0.3s opacity;\n\n    &:hover {\n      opacity: 1;\n    }\n  }\n}\n"
  },
  {
    "path": "assets/scss/pages/getting-started-with-ionic-vue-1.scss",
    "content": "@import '../vars';\n@import url('https://fonts.googleapis.com/css?family=Roboto+Mono');\n\n$ff-roboto: 'Roboto Mono', 'Source Code Pro', monospace;\n$ff-inter: Inter, \"Inter UI\", Helvetica, Arial, sans-serif;\n\n.container {\n  --gutter: 8px;\n  padding-right: 8px;\n  padding-left: 8px;\n  margin-right: auto;\n  margin-left: auto;\n\n  @media (min-width: $screen-sm) {\n    --gutter: 16px;\n    width: 768px;\n    padding-right: 16px;\n    padding-left: 16px;\n  }\n\n  @media (min-width: $screen-md) {\n    --gutter: 0px;\n    width: 1024px;\n  }\n\n  @media (min-width: $screen-lg) {\n    width: 1152px;\n  }\n}\n\n* {\n  box-sizing: border-box;\n}\n\na {\n  text-decoration: none;\n}\n\nhtml,\nbody {\n  margin: 0;\n  padding: 0;\n  overflow-x: hidden;\n}\n\nul {\n  margin: 0;\n  padding: 0;\n}\n\nli {\n  list-style-type: none;\n}\n\np, li {\n  margin: 0;\n  font-family: $ff-roboto;\n  color: #3D574C;\n  line-height: 160%;\n  letter-spacing: -0.02em;\n}\n\nh1 {\n  font-family: $ff-roboto;\n  font-size: 64px;\n  line-height: 100%;\n  letter-spacing: -0.06em;\n  color: #030B08;\n  margin: 0 0 32px 0;\n}\nh2 {\n  font-family: $ff-roboto;\n  font-size: 32px;\n  line-height: 100%;\n  letter-spacing: -0.02em;\n  color: #030B08;\n  margin: 0;\n}\nh3 {\n  font-family: $ff-roboto;\n  font-weight: 500;\n  font-size: 24px;\n  line-height: 160%;\n  letter-spacing: -0.02em;\n  color: #030B08;\n  margin: 0 0 4px 0;\n}\n\n.highlight {\n  color: \t#00ce7c;\n}\n\n#live {\n  background: #435466;\n  padding-top: 16px;\n  padding-bottom: 16px;\n\n  .embed-container { \n    position: relative; \n    padding-bottom: 56.25%; \n    height: 0; \n    max-width: 100%;\n    margin: 32px 0;\n\n    &::after {\n      position: absolute;\n      right: -10px;\n      top: -10px;\n      content: '';\n      width: 100%;\n      height: 100%;\n      background: rgba(40, 54, 69, 0.6);\n      transition: background-color .15s ease-out;\n    }\n  } \n  .embed-container iframe, \n  .embed-container object, \n  .embed-container embed { \n    position: absolute; \n    top: 0; \n    left: 0; \n    width: 100%; \n    height: 100%;\n    z-index: 1;\n  }\n}\n\n#top {\n  --left-width: 56.3%;\n  --right-width: 43.7%;\n\n  .strip {\n    display: flex;\n\n    @media screen and (max-width: $screen-sm-max) {\n      flex-direction: column;\n    }\n  }\n\n  .vue-lines {\n    position: absolute;\n    z-index: -1;\n    height: 100%;\n    min-width: 100%;\n    width: auto;\n\n    @media screen and (max-width: $screen-lg) {\n      display: none;\n    }\n  }\n\n  .strip-0 {\n    article {\n      position: relative;\n   \n    }\n    article:first-of-type {\n      flex-basis: var(--left-width);\n\n      padding-block-start: 20px;\n      padding-block-end: 124px;\n      padding-inline-end: 96px;\n\n      @media screen and (max-width: $screen-sm-max) {\n        padding-inline-end: 0;\n      }\n\n      .vue-lines {\n        top: 0;\n        right: 0;\n      }\n\n      &::before {\n        content: '';\n        position: absolute;\n        z-index: -2;\n\n        left: -54.44vw;\n        right: 0;\n        top: 0;\n        bottom: 0;\n        background: linear-gradient(180deg, #FFFFFF 31.25%, #F8F9FC 100%);\n\n        @media screen and (max-width: $screen-sm-max) {\n          right: -54.44vw;\n        }\n      }    \n\n\n      sup {\n        font-weight: 700;\n        font-size: 12px;\n        line-height: 160%;\n        letter-spacing: 0.16em;\n        display: inline-block;\n        font-family: $ff-roboto;\n        color: #92A0B3;\n\n        margin-block-start: 72px;\n        margin-block-end: 32px;\n\n        .divider {\n          display: inline-block !important;\n          margin: 0 10px;\n        }\n      }\n\n      p {\n        font-size: 20px;\n      }\n    }\n    article:last-of-type {\n      flex-basis: var(--right-width);\n      padding: 128px 0px 131px 64px;\n\n      @media screen and (max-width: $screen-sm-max) {\n        padding-inline-start: 0;\n        padding-inline-end: 0;\n      }\n\n      .vue-lines {\n        top: 0;\n        left: 0;\n\n      }\n\n      &::before {\n        content: '';\n        position: absolute;\n        z-index: -2;\n\n        left: 0;\n        right: -45.56vw;\n        top: 0;\n        bottom: 0;\n        background: #C1EDDA;\n\n        @media screen and (max-width: $screen-sm-max) {\n          left: -45.56vw;\n        }\n      }  \n\n      .speaker a {        \n        display: grid;\n        grid-template-columns: 96px 1fr;\n        column-gap: 42px;\n        align-items: center;\n\n        margin-block-start: 50px;\n\n        &:hover, &:active, &:focus {\n\n          .image-wrapper::after {\n            background: #1fdb8d;\n          }\n          img {\n            transform: translate(1px, -1px);\n          }\n        }\n\n        .image-wrapper {\n          position: relative;         \n          \n          img {\n            position: relative;\n            z-index: 2;\n\n            transition: transform .15s ease-out;\n          }\n\n          &::after {\n            content: '';\n            position: absolute;\n            width: 100%;\n            height: 100%;\n            background: #1DCD83;\n            top: -10px;\n            right: -10px;\n            z-index: 1;\n\n            transition: background-color .15s ease-out;\n          }\n        }\n\n        .info {\n          position: relative;\n          top: -6px;\n        }\n      }\n    }\n  }\n  .strip-1 {\n    article {\n      position: relative;\n    }\n    article:first-of-type {\n      flex-basis: var(--left-width);\n\n      padding-block-start: 96px;\n      padding-block-end: 96px;\n      padding-inline-end: 96px;\n\n      @media screen and (max-width: $screen-sm-max) {\n        padding-inline-end: 0px;\n      }\n\n      .vue-lines {\n        top: 0;\n        right: 0;\n      }\n\n      &::before {\n        content: '';\n        position: absolute;\n        z-index: -2;\n\n        left: -54.44vw;\n        right: 0;\n        top: 0;\n        bottom: 0;\n        background: #8398AE;\n\n        @media screen and (max-width: $screen-sm-max) {\n          right: -54.44vw;\n        }\n      }\n\n      h2 {\n        color: #fff;\n        margin-block-end: 50px;\n      }\n    }\n    article:last-of-type {\n      flex-basis: var(--right-width);\n\n      padding: 96px 0px 132px 64px;\n\n      @media screen and (max-width: $screen-sm-max) {\n        padding-inline-start: 0px;\n      }\n\n      .vue-lines {\n        top: 0;\n        left: 0;\n      }\n\n      &::before {\n        content: '';\n        position: absolute;\n        z-index: -2;\n\n        left: 0;\n        right: -45.56vw;\n        top: 0;\n        bottom: 0;\n        background: #EAFCF4;\n\n        @media screen and (max-width: $screen-sm-max) {\n          left: -45.56vw;\n        }\n      }  \n\n      h2 {\n        margin-block-end: 32px;\n      }\n\n      li  {\n        + li {\n          margin-block-start: 12px;\n        }\n      \n      }\n    }\n  }\n}\n\n#hubspot-override .hbspt-form {\n  position: relative;\n  display: flex;\n\n  max-width: 544px;   \n\n  * {\n    width: 100%;\n  }\n\n  form {\n    align-items: center;\n    max-width: 544px;   \n  }\n\n  fieldset:not(:first-of-type) {\n    display: none;\n  }\n\n  .hs-email {\n    padding-inline-end: 27px;\n\n    input {\n      border: 0;\n      padding: 24px 22px;\n      height: 64px;\n      padding-inline-end: 142px;\n\n      font-family: $ff-roboto;\n      font-size: 14px;\n      line-height: 112%;\n      letter-spacing: -0.02em;\n      color: black;\n      box-shadow: 10px -10px 0px #435466;\n\n      &::placeholder {\n        font-family: $ff-roboto;\n        font-size: 14px;\n        letter-spacing: -0.02em;\n        color: #92A0B3;\n      }\n    }\n  }\n\n  .hs-fieldtype-booleancheckbox {\n    margin-top: 16px;\n\n    input[type=checkbox] {\n      width: auto;\n      margin-right: 8px;\n    }\n  }\n\n  .hs-submit {\n    position: absolute;\n    right: 0;\n    top: 8px;\n    width: auto;\n    width: 180px;\n\n    background: #1DCD83;\n\n    transition: background-color .2s ease-out;\n\n    &:hover {\n      background: #29e094;\n    }\n\n    input {\n      --arrow-size: 1.06em;\n\n      cursor: pointer;\n      height: 48px;\n      border: none;\n      padding: 15px 40px 17px 20px;\n      text-align: left;\n\n      font-family: $ff-roboto;\n      font-size: 14px;\n      font-weight: 700;\n\n      color: #fff;\n      background: transparent;\n\n      background-image: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPSc1MTInIGhlaWdodD0nNTEyJyB2aWV3Qm94PScwIDAgNTEyIDUxMic+PHBvbHlsaW5lIHBvaW50cz0nMjY4IDExMiA0MTIgMjU2IDI2OCA0MDAnIHN0eWxlPSdmaWxsOm5vbmU7c3Ryb2tlOiNmZmY7c3Ryb2tlLWxpbmVjYXA6c3F1YXJlO3N0cm9rZS1taXRlcmxpbWl0OjEwO3N0cm9rZS13aWR0aDo0OHB4Jy8+PGxpbmUgeDE9JzM5MicgeTE9JzI1NicgeDI9JzEwMCcgeTI9JzI1Nicgc3R5bGU9J2ZpbGw6bm9uZTtzdHJva2U6I2ZmZjtzdHJva2UtbGluZWNhcDpzcXVhcmU7c3Ryb2tlLW1pdGVybGltaXQ6MTA7c3Ryb2tlLXdpZHRoOjQ4cHgnLz48L3N2Zz4=);\n      background-size: var(--arrow-size);\n      background-position: calc(100% - 18px) center;\n      background-repeat: no-repeat;\n\n\n    }\n  }\n\n  .hs-error-msg {\n    font-size: 14px;\n    color: red;\n  }\n\n  .submitted-message p {\n    display: flex;\n    align-items: center;\n\n    &::before {\n      content: '';\n      display: inline-block;\n      margin-inline-end: 8px;\n      height: 24px;\n      width: 24px;\n      background: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPGNpcmNsZSBjeD0iMTIiIGN5PSIxMiIgcj0iMTIiIGZpbGw9IiMxRENEODMiLz4KPHBhdGggZD0iTTE3IDhMMTAgMTZMNyAxMyIgc3Ryb2tlPSIjRTNFREZGIiBzdHJva2Utd2lkdGg9IjIiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIvPgo8L3N2Zz4K);\n    }\n\n    color: #fff;\n  }\n}\n\n\n#resources {\n  background: #435466;\n  padding-block-start: 96px;\n  padding-block-end: 110px;\n\n  h2 {\n    color: #fff;\n    margin-block-end: 50px;\n  }\n\n  ul {\n    display: grid;\n    grid-template-columns: 1fr 1fr 1fr 1fr;\n    column-gap: 32px;\n    row-gap: 64px;\n\n    @media screen and (max-width: $screen-sm-max) {\n      grid-template-columns: 1fr 1fr;\n      grid-template-row: auto auto;\n    }\n\n    @media screen and (max-width: $screen-xs) {\n      grid-template-columns: 1fr;\n      grid-template-row: auto auto auto auto;\n    }\n\n    li {\n      position: relative;\n\n      &::after {\n        position: absolute;\n        right: -10px;\n        top: -10px;\n        content: '';\n        width: 100%;\n        height: 100%;\n        background: rgba(40, 54, 69, .6);\n        z-index: 1;\n\n        transition: background-color .15s ease-out;\n      }\n      &:hover::after {\n        background: rgba(40, 54, 69, .45);\n      }\n    \n      a {\n        display: block;\n        position: relative;\n        padding: 19px 42px 19px 16px;\n        background: #697D91;\n        color: #fff;\n\n        font-family: $ff-roboto;\n        font-weight: 500;\n        line-height: 160%;\n        letter-spacing: -0.02em;\n        z-index: 2;\n\n        transition: background-color .15s ease-out,\n                    transform .15s ease-out;\n\n        &:hover {\n          background: #74889a;\n          transform: translate(1px, -1px);\n        }\n\n        &::after {\n          content: '';        \n          position: absolute;\n          letter-spacing: 0;\n          font-family: $ff-inter;\n\n          top: 50%;\n          transform: translateY(-50%);\n          right: 16px;\n          width: 18px;\n          height: 18px;\n          background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTkiIGhlaWdodD0iMTgiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZD0iTTEwIDJsNyA3LTcgN00xNSA5SDEiIHN0cm9rZT0iI2ZmZiIgc3Ryb2tlLXdpZHRoPSIyIiBzdHJva2UtbWl0ZXJsaW1pdD0iMTAiIHN0cm9rZS1saW5lY2FwPSJzcXVhcmUiLz48L3N2Zz4=);\n        }\n      }\n    }\n  }\n}\n\n#footer {\n  background: #25384B;\n  padding-block-start: 52.5px;\n    padding-block-end: 52.5px;  \n\n  .wrapper {   \n    display: flex;\n    flex-wrap: wrap;\n    align-items: center;\n    justify-content: space-between;\n    margin: -32px -32px 0 0;\n\n    > * {\n      margin: 32px 32px 0 0;\n    }\n  }\n\n  .info {\n    display: flex;\n\n    > div {\n      font-size: 12px;\n      line-height: 160%;\n      color: #92A0B3;\n      font-family: $ff-inter;\n\n      a {\n        color: inherit;\n\n        transition: color .15s ease-out;\n\n        &:hover {\n          color: #fff\n        }\n      }\n    }\n    div + div {\n      margin-inline-start: 24px;\n    }\n  }\n\n  .social {\n    a {\n      + a {\n        display: inline-block;\n        margin-inline-start: 18px;\n      }\n\n      svg path {\n        transition: fill .15s ease-out; \n      }\n\n      &:hover, &:active, &:focus {\n        svg path {\n          fill: #fff;\n        }\n      }\n    }\n  }\n}\n\n"
  },
  {
    "path": "assets/scss/pages/getting-started.scss",
    "content": "// #region ---------------------- IMPORTS -------------------------\n\n@import \"../vars\";\n@import \"bootstrap-sass/assets/stylesheets/bootstrap/variables\";\n@import \"../utilities/u-getting-started\";\n// #endregion -----------------------------------------------------\n\n// #region ---------------------- VARIABLES ----------------------\n$headingColor: #010610;\n$pColorMain: #2d4665;\n$pColorSecondary: #445b78;\n// #endregion -----------------------------------------------------\n\n// #region ---------------------- COMPONENTS ----------------------\n\n// #endregion -----------------------------------------------------\n\n// #region ---------------------- GENERIC -------------------------\nh1,\nh2,\nh3,\np {\n  margin: 0;\n}\n\nh2,\nh3 {\n  font-family: $font-family-inter;\n}\n\nh1 {\n  @include font(\n    $fs: 64px,\n    $fw: bold,\n    $lh: 100%,\n    $ls: -0.04em,\n    $color: $headingColor\n  );\n}\n\nh2 {\n  @include font(\n    $fs: 28px,\n    $fw: 600,\n    $lh: 112%,\n    $ls: -0.02em,\n    $color: $headingColor\n  );\n}\n\nh3 {\n  @include font(\n    $fs: 20px,\n    $fw: 500,\n    $lh: 24px,\n    $ls: -0.01em,\n    $color: $headingColor\n  );\n}\n\np {\n  @include font($fs: 16px, $ls: -0.01em);\n}\n\n// a:not(.button) {\n//   border-bottom: 1px solid rgba(74, 139, 252, 0);\n//   transition: border-color .2s;\n\n//   &:hover, &:active, &:focus {\n//     transition: border-color .2s;\n//     border-color: rgba(74, 139, 252, 1);\n//     color: #4a8bfc;\n//   }\n// }\n// #endregion -----------------------------------------------------\n\n// #region ---------------------- PAGE STYLES ---------------------\n#landing {\n  @include box($pos: relative, $pt: 149px, $pb: 104px, $mb: 143px);\n\n  .landing__content {\n    h1 {\n      @include box($mxw: 455px, $mb: 32px);\n    }\n    p {\n      @include box($mxw: 448px);\n      @include font($fs: 22px, $lh: 160%, $color: $pColorMain);\n    }\n  }\n\n  .landing__image {\n    @include box($pos: absolute, $r: -140px, $t: 0, $z: -1);\n    @include media($thresh: $screen-sm-max, $o: 0.1);\n  }\n}\n\n#wizard {\n  .wizard__wrapper {\n    @include box(\n      $d: flex,\n      $fw: wrap,\n      $br: 8px,\n      $p: 48px 40px 48px 120px,\n      $jc: space-between,\n      $ai: flex-end,\n      $back: #486fff url(\"/img/getting-started/bg-app-wizard.svg\") left center\n        no-repeat,\n      $bs: \"0px 8px 16px rgba(2, 8, 20, 0.08), 0px 4px 8px rgba(2, 8, 20, 0.12)\"\n    );\n\n    h2 {\n      @include font($fs: 24px, $color: #fff);\n    }\n    p {\n      @include box($color: #fff, $mxw: 620px, $o: 0.8, $mt: 6px);\n      @include font($lh: 160%);\n    }\n  }\n\n  .wizard__btn {\n    @include box(\n      $d: flex,\n      $ai: center,\n      $br: 8px,\n      $p: \"10px 12px\",\n      $bord: none,\n      $back: #6c9dff,\n      $mt: 16px,\n      $trans: \"all .3s\"\n    );\n    @include font(\n      $fs: 15px,\n      $fw: bold,\n      $tt: uppercase,\n      $ls: 0.08em,\n      $ws: nowrap,\n      $color: white\n    );\n\n    &:hover,\n    &:active,\n    &:focus {\n      box-shadow: 0 3px 5px rgba(0, 0, 0, 0.15);\n      background: lighten(#6c9dff, 2%);\n      transition: all 0.3s;\n      text-decoration: none;\n    }\n\n    ion-icon {\n      font-size: 16px;\n      margin-left: 4px;\n    }\n  }\n}\n\n#install {\n  @include box($d: flex, $fw: wrap, $mt: 160px);\n\n  h2 {\n    @include box($mb: 35px);\n  }\n\n  .install_cards {\n    @include box(\n      $d: grid,\n      $gtc: repeat(auto-fit, minmax(308px, 1fr)),\n      $cg: 50px,\n      $rg: 64px,\n      $w: 100%\n    );\n\n    h3 {\n      line-height: 24px;\n    }\n\n    strong {\n      @include font($fw: 600, $ff: $font-family-monospace, $color: black);\n    }\n  }\n  .account__cards {\n    @include box(\n      $d: grid,\n      $gtc: repeat(auto-fit, minmax(335px, 1fr)),\n      $cg: 128px,\n      $rg: 64px,\n      $mt: 144px\n    );\n    @include media($thresh: $screen-md-max, $cg: 50px);\n\n    h2 {\n      margin-bottom: 16px;\n    }\n  }\n\n  article {\n    .card__step {\n      @include font(\n        $ff: $font-family-monospace,\n        $lh: 100%,\n        $ls: 0.08em,\n        $fw: 500,\n        $color: #92a1b3\n      );\n      margin-bottom: 24px;\n    }\n\n    h3 {\n      margin-bottom: 20px;\n    }\n\n    .card__text,\n    #signup-thanks > p {\n      @include font($fs: 16px, $lh: 180%, $color: #2d4665);\n    }\n\n    .card__code {\n      @include box($h: 64px, $mt: 32px);\n\n      pre {\n        @include box(\n          $d: flex,\n          $ai: center,\n          $back: #1c334f,\n          $br: 8px,\n          $bord: none,\n          $h: 100%,\n          $p: \"0 20px\"\n        );\n      }\n\n      code {\n        @include box($back: none, $color: white, $p: 0);\n        @include font($fs: 16px, $ls: -0.02em, $lh: 130%, $fw: 500);\n      }\n\n      .highlight,\n      .hljs-keyword {\n        background: #1c334f;\n        color: #46b1ff;\n        font-weight: 500;\n      }\n\n      .hljs-built_in,\n      .hljs-tag {\n        color: white;\n      }\n    }\n\n    #submit {\n      text-transform: none;\n      font-weight: 600;\n      font-size: 16px;\n      letter-spacing: -0.02em;\n    }\n  }\n\n  .card__subText {\n    @include box($mt: 8px);\n    @include font($fs: 12px, $lh: 180%, $ls: -0.01em, $color: #5b708b);\n\n    a {\n      @include box($d: inline-flex, $ai: center);\n      ion-icon {\n        margin-left: 2px;\n      }\n    }\n  }\n}\n\n#nextSteps {\n  @include box($mt: 144px, $mb: 200px);\n\n  .next__cards {\n    @include box(\n      $d: grid,\n      $gtc: repeat(auto-fill, minmax(312px, 1fr)),\n      $cg: 44px,\n      $rg: 44px\n    );\n  }\n\n  h2 {\n    margin-bottom: 36px;\n  }\n\n  article {\n    a {\n      &:hover,\n      &:active,\n      &:focus {\n        svg {\n          transform: scale(1.05, 1.05);\n          transition: transform 200ms cubic-bezier(0.32, 0.72, 0, 1);\n        }\n      }\n    }\n\n    .card__image {\n      @include box($d: flex, $of: hidden, $br: 6px);\n\n      svg {\n        flex-grow: 1;\n        transition: transform 200ms cubic-bezier(0.32, 0.72, 0, 1);\n      }\n    }\n\n    .card__superTitle {\n      @include box($mt: 24px, $mb: 12px);\n      @include font(\n        $fs: 10px,\n        $fw: 500,\n        $lh: 100%,\n        $ls: 0.08em,\n        $tt: uppercase,\n        $color: #92a1b3\n      );\n    }\n\n    h3 {\n      @include box($mb: 12px);\n    }\n\n    p {\n      @include font($lh: 160%, $color: #445b78);\n    }\n  }\n}\n// #endregion -----------------------------------------------------\n"
  },
  {
    "path": "assets/scss/pages/go/_pwa-architects-guide.scss",
    "content": "#page-go-pwa-architects-guide,\n#page-go-why-hybrid {\n  font-family: $font-family-inter;\n\n  .banner {\n    background-color: #f6f8fc;\n    border-bottom: 1px solid #e5e7eb;\n    margin-top: -138px;\n    padding-top: 78px;\n\n    svg {\n      fill: #4f6384;\n    }\n\n    hgroup {\n      display: flex;\n      flex-direction: column;\n      align-items: flex-start;\n      text-align: left;\n      padding-top: 81px;\n      padding-bottom: 72px;\n      padding-right: 632px;\n    }\n\n    h1 {\n      color: #24282e;\n      font-size: 37px;\n      font-weight: 700;\n      letter-spacing: -0.034em;\n      margin: 77px 0 22px;\n    }\n\n    p {\n      font-size: 18px;\n      line-height: 32px;\n      font-weight: 400;\n      letter-spacing: -0.02em;\n      color: #626c7d;\n      max-width: 800px;\n    }\n  }\n\n  .content,\n  .signup-form {\n    flex: 1 0;\n  }\n\n  .content {\n    padding-top: 279px;\n    padding-right: 30px;\n    font-size: 14px;\n    color: #4e545e;\n    letter-spacing: -0.02em;\n    max-width: 526px;\n  }\n\n  main {\n    margin-top: -240px;\n    padding-bottom: 0px;\n    display: flex;\n    flex-wrap: wrap;\n    justify-content: space-between;\n    overflow: visible;\n\n    &::before,\n    &::after {\n      display: none;\n    }\n\n    .lg {\n      color: #6e7f99;\n      font-size: 18px;\n      line-height: 36px;\n      perspective: 600px;\n      margin-bottom: 48px;\n\n      &::before {\n        background-image: url(\"/img/articles/pwa-cover-title.png\"),\n          url(\"/img/articles/pwa-cover-bg.png\"),\n          linear-gradient(60deg, #73c5ff 0, #3880ff 100%);\n        background-size: 64%, 100%, 100%;\n        background-repeat: no-repeat, repeat, repeat;\n        background-position: 20% 12%, 50% 50%, 50% 50%;\n        height: 281px;\n        width: 186px;\n        content: \"\";\n        float: left;\n        margin-left: 6px;\n        margin-right: 61px;\n        border-radius: 8px;\n        transform: rotateY(12deg);\n        margin-top: -64px;\n        margin-bottom: 12px;\n        box-shadow: 0 2px 16px rgba(0, 0, 0, 0.2);\n      }\n    }\n\n    p {\n      letter-spacing: -0.02em;\n      line-height: 2em;\n      font-size: 16px;\n      margin-bottom: 16px;\n    }\n\n    ul {\n      list-style-type: none;\n      padding: 0;\n      margin: 0 0 46px;\n    }\n\n    li {\n      padding: 0px 0 0 21px;\n      font-size: 16px;\n      line-height: 32px;\n      position: relative;\n      letter-spacing: -0.021em;\n\n      strong {\n        font-weight: 500;\n      }\n\n      &:before {\n        content: \"•\";\n        opacity: 0.8;\n        position: absolute;\n        left: 7px;\n      }\n    }\n  }\n\n  .signup-form,\n  .thank-you aside {\n    padding: 42px 48px 48px;\n    background: white;\n    box-shadow: 0 8px 48px 0px rgba(black, 0.2);\n    max-width: 536px;\n    border-radius: 10px;\n\n    h3 {\n      margin-top: 0;\n      margin-bottom: 30px;\n      font-weight: 700;\n      font-size: 28px;\n      line-height: 36px;\n      letter-spacing: -0.03em;\n    }\n  }\n\n  .company {\n    margin: 232px 0 68px;\n    text-align: center;\n    width: 100%;\n\n    h2 {\n      color: #7f8fab;\n      margin: 0 auto;\n      font-size: 28px;\n      max-width: 760px;\n      text-align: center;\n      line-height: 1.4em;\n      letter-spacing: -0.04em;\n      font-weight: 600;\n    }\n\n    strong {\n      color: #131924;\n      font-weight: 700;\n    }\n\n    .logos {\n      display: flex;\n      flex-wrap: wrap;\n      margin-top: 51px;\n      justify-content: space-evenly;\n\n      &::before,\n      &::after {\n        background: url(\"/img/homepage/enterprise-logos.png\") 0 0 no-repeat;\n        background-size: 100%;\n        width: 494px;\n        height: 42px;\n        content: \"\";\n        max-width: 100%;\n        margin-bottom: 32px;\n        display: inline-block;\n      }\n\n      &::after {\n        background-position: 0 bottom;\n      }\n    }\n  }\n\n  .get-started {\n    background: #f1f4f8;\n    overflow: auto;\n\n    .container {\n      align-items: center;\n      display: flex;\n      margin-bottom: 110px;\n      margin-top: 110px;\n    }\n\n    hgroup {\n      letter-spacing: -0.025em;\n      flex-grow: 1;\n    }\n\n    h2 {\n      color: $blue;\n      font-size: 28px;\n      font-weight: 700;\n      letter-spacing: inherit;\n      margin: 0 0 5px;\n    }\n\n    p {\n      color: #24282e;\n      font-size: 20px;\n      font-weight: 600;\n      margin: 0;\n    }\n\n    .btn {\n      font-size: 16px;\n      font-weight: 700;\n    }\n  }\n\n  @media (max-width: $screen-sm-max) {\n    .banner hgroup {\n      padding-right: 15px;\n      text-align: center;\n    }\n\n    h1 {\n      margin-right: auto;\n      margin-left: auto;\n    }\n\n    p.lg {\n      margin-right: 24px;\n    }\n\n    main {\n      display: block;\n    }\n\n    .content {\n      max-width: 100%;\n      padding-right: 0;\n    }\n\n    .signup-form {\n      max-width: 100%;\n    }\n\n    .company {\n      margin-top: 128px;\n    }\n\n    .get-started .btn + .btn {\n      margin-top: 8px;\n    }\n  }\n\n  .banner .thank-you {\n    min-height: 490px;\n  }\n\n  main.thank-you {\n    margin-top: -340px;\n  }\n\n  .thank-you {\n    aside {\n      margin-right: auto;\n      margin-left: auto;\n      max-width: 500px;\n    }\n\n    p::before {\n      content: none;\n    }\n\n    .btn {\n      display: block;\n    }\n\n    p.lg {\n      margin-bottom: 0;\n    }\n\n    .also {\n      margin-top: 0;\n      margin-bottom: 64px;\n    }\n\n    .company {\n      margin-top: 128px;\n    }\n  }\n}\n"
  },
  {
    "path": "assets/scss/pages/go/_why-hybrid.scss",
    "content": "#page-go-why-hybrid {\n  main .lg::before {\n    background-image: url('/img/articles/why-hybrid-cover.jpg');\n    background-size: 100%;\n    background-position: 0 0;\n    height: 242px;\n  }\n}"
  },
  {
    "path": "assets/scss/pages/home.scss",
    "content": "@import \"../vars\";\n@import \"../mixins\";\n@import \"../components/home_slides/index\";\n@import \"../components/home_slides/react-1\";\n\n#page-home {\n  img {\n    height: auto;\n  }\n\n  .activateOnScroll {\n    opacity: 0;\n    transform: translateY(48px);\n    transition: 0.4s opacity,\n      0.8s transform cubic-bezier(0.07, 0.89, 0.79, 0.95);\n\n    &.active {\n      transform: translateY(0);\n      opacity: 1;\n    }\n  }\n\n  main {\n    overflow: visible;\n\n    .container {\n      position: relative;\n    }\n  }\n\n  hubspot-dynamic-content:not(.hydrated) {\n    visibility: hidden;\n\n    [slot=\"alternate\"] {\n      display: none;\n    }\n  }\n\n  #hubspotForm {\n    .modal-body {\n      position: relative;\n      padding: 4rem;\n    }\n\n    .close-button {\n      height: 1rem;\n      width: 1rem;\n      position: absolute;\n      right: 2rem;\n      top: 2rem;\n      cursor: pointer;\n    }\n    h2 {\n      text-align: center;\n      margin-bottom: 8px;\n    }\n  }\n\n  #promo--hybrid-vs-native {\n    @media (max-width: $screen-sm-max) {\n      margin-top: 0;\n    }\n  }\n\n  section {\n    position: relative;\n\n    &.center {\n      text-align: center;\n    }\n\n    &.left,\n    &.right {\n      display: flex;\n\n      .content {\n        > * {\n          max-width: 448px;\n        }\n\n        @media (max-width: $screen-md-max) {\n          max-width: 400px;\n        }\n\n        @media (max-width: $screen-sm-max) {\n          max-width: 100%;\n        }\n      }\n\n      @media (max-width: $screen-sm-max) {\n        padding-top: 100px;\n        padding-bottom: 100px;\n      }\n    }\n\n    &.left {\n      .graphics {\n        margin-left: auto;\n      }\n\n      @media (max-width: $screen-sm-max) {\n        flex-direction: column-reverse;\n      }\n    }\n\n    &.right {\n      .content {\n        margin-left: auto;\n      }\n\n      @media (max-width: $screen-sm-max) {\n        flex-direction: column;\n      }\n    }\n\n    &.split hgroup {\n      display: flex;\n      flex-wrap: wrap;\n      align-items: flex-end;\n      margin-bottom: 66px;\n\n      > :nth-child(1) {\n        flex: 0 1 480px;\n        margin-bottom: 0;\n      }\n\n      > :nth-child(2) {\n        flex: 0 1 440px;\n        margin-left: auto;\n        margin-bottom: 4px;\n      }\n\n      @media (max-width: $screen-md-max) {\n        flex-direction: column;\n\n        > :nth-child(1) {\n          flex: 1;\n          margin-bottom: 16px;\n        }\n\n        > :nth-child(2) {\n          flex: 1;\n          margin-right: auto;\n          margin-bottom: 4px;\n        }\n      }\n    }\n\n    h2 {\n      font-size: 48px;\n      line-height: 112%;\n      display: flex;\n      flex-direction: column;\n      color: #657482;\n\n      em {\n        font-style: normal;\n        color: #03060b;\n      }\n\n      + p {\n        margin-top: 16px;\n      }\n    }\n\n    h3 {\n      font-weight: 500;\n      font-size: 20px;\n      line-height: 112%;\n      letter-spacing: -0.02em;\n      color: #010610;\n    }\n\n    h4 {\n      font-size: 12px;\n      color: #92a0b3;\n      letter-spacing: 0.16em;\n      text-transform: uppercase;\n      font-family: \"Roboto Mono\", \"SF Mono\", Menlo, monospace;\n\n      + h2 {\n        margin-top: 32px;\n      }\n    }\n\n    h5 {\n      font-size: 20px;\n      margin-bottom: 11px;\n      font-weight: 600;\n      line-height: 28px;\n      letter-spacing: -0.02em;\n      color: #020814;\n    }\n\n    p {\n      font-size: 16px;\n      color: #5b708b;\n      line-height: 29px;\n      letter-spacing: -0.02em;\n      margin-bottom: 8px;\n    }\n\n    hgroup p,\n    p.lg {\n      color: #445b78;\n      font-size: 20px;\n      line-height: 160%;\n      letter-spacing: -0.02em;\n\n      strong {\n        font-weight: 600;\n      }\n    }\n\n    .highlight {\n      position: relative;\n      background: transparent;\n\n      &::before {\n        content: \"\";\n        background: #d1ebff;\n        position: absolute;\n        left: 0;\n        right: -2px;\n        bottom: 2px;\n        height: 16px;\n        z-index: -1;\n      }\n    }\n\n    .link {\n      font-weight: 500;\n      font-size: 20px;\n      line-height: 112%;\n      letter-spacing: -0.02em;\n      color: #4d8dff;\n\n      transition: opacity 0.2s ease-out;\n\n      &:hover,\n      &:active,\n      &:focus {\n        opacity: 0.7;\n      }\n    }\n\n    pre code {\n      background: transparent;\n      color: white;\n    }\n\n    @media (max-width: $screen-sm-max) {\n      .content {\n        width: 100%;\n        text-align: left;\n      }\n    }\n  }\n\n  .overflow-mask {\n    overflow: hidden;\n    max-width: 100vw;\n  }\n\n  #build-with-web {\n    padding-top: 248px;\n    padding-block-start: clamp(160px, 26vw, 248px);\n\n    @media screen and (max-width: $screen-xs-max) {\n      padding-block-end: 100px;\n    }\n\n    hgroup {\n      display: flex;\n      flex-direction: column;\n      text-align: center;\n      max-width: 672px;\n\n      margin-inline-start: auto;\n      margin-inline-end: auto;\n      margin-block-end: 80px;\n\n      h2 {\n        margin-block-end: 24px;\n      }\n\n      p {\n        margin: 0;\n      }\n    }\n\n    ul {\n      list-style: none;\n      display: flex;\n      flex-wrap: wrap;\n      justify-content: space-between;\n      padding-left: 0;\n      margin: 0;\n      margin-block-start: -64px;\n\n      @media (max-width: $screen-sm-max) {\n        justify-content: space-around;\n      }\n    }\n\n    li {\n      flex: 0 1 310px;\n\n      margin-block-start: 64px;\n\n      h3 {\n        margin-block-end: 20px;\n      }\n\n      p {\n        margin: 0;\n        a {\n          transition: opacity 0.2s ease-out;\n        }\n        a:hover,\n        a:focus {\n          color: #4a8bfc;\n          opacity: 0.7;\n        }\n      }\n\n      img {\n        margin-block-end: 32px;\n        border-radius: 16px;\n      }\n\n      &:nth-child(2) {\n        transition-delay: 0.1s;\n      }\n\n      &:nth-child(3) {\n        transition-delay: 0.2s;\n      }\n    }\n  }\n\n  #performance {\n    padding-top: 257px;\n    padding-bottom: 152px;\n    padding-block-start: clamp(160px, 26vw, 257px);\n    padding-block-end: clamp(100px, 20vw, 152px);\n\n    hgroup {\n      h2 {\n        margin-block-end: 32px;\n      }\n\n      p {\n        margin-block-end: 32px;\n      }\n    }\n\n    .graphics {\n      display: grid;\n      grid-template-columns: 270px 270px;\n      list-style: none;\n      position: relative;\n      padding-left: 0;\n      margin-top: -41px;\n      margin-right: -63px;\n\n      &::before,\n      &::after {\n        position: absolute;\n        border: 0px solid #e9edf3;\n        content: \"\";\n      }\n\n      &::before {\n        border-bottom-width: 2px;\n        top: 50%;\n        left: 0;\n        right: 0;\n      }\n\n      &::after {\n        border-right-width: 2px;\n        left: 50%;\n        top: 0;\n        bottom: 0;\n      }\n    }\n\n    li {\n      font-weight: 500;\n      font-size: 20px;\n      line-height: 28px;\n      letter-spacing: -0.03em;\n      color: #414d5c;\n      padding: 44px;\n      display: flex;\n      flex-direction: column;\n      justify-content: center;\n      align-items: flex-start;\n\n      span {\n        max-width: 175px;\n\n        > sup {\n          display: inline-block;\n\n          font-weight: 500;\n          font-size: 20px;\n          line-height: 100%;\n          letter-spacing: -0.03em;\n          color: #2d4665;\n        }\n      }\n\n      strong {\n        display: block;\n        font-size: 96px;\n        font-weight: 600;\n        line-height: 100%;\n        letter-spacing: -0.08em;\n        color: #03060b;\n        margin-left: -7px;\n\n        sub,\n        sup {\n          font-size: 32px;\n          font-weight: 600;\n          letter-spacing: -0.04em;\n          margin-left: 6px;\n        }\n\n        sub {\n          vertical-align: 9px;\n        }\n\n        sup {\n          vertical-align: 24px;\n          font-weight: 800;\n        }\n      }\n\n      .subtext {\n        display: block;\n        font-weight: 500;\n        font-size: 16px;\n        line-height: 140%;\n        letter-spacing: -0.03em;\n        color: #2d4665;\n        max-width: 161px;\n      }\n    }\n\n    @media (max-width: $screen-md-max) {\n      .graphics {\n        margin-right: -20px;\n      }\n    }\n\n    @media (max-width: $screen-sm-max) {\n      .graphics {\n        margin-right: auto;\n        margin-bottom: 48px;\n      }\n    }\n\n    @media (max-width: $screen-xs-max) {\n      .graphics {\n        grid-template-columns: 1fr 1fr;\n      }\n\n      li {\n        font-size: 16px;\n        padding: 10px;\n\n        span {\n          max-width: 138px;\n        }\n\n        strong {\n          font-size: 64px;\n\n          sub,\n          sup {\n            font-size: 32px;\n          }\n\n          sup {\n            vertical-align: 8px;\n          }\n\n          sub {\n            vertical-align: 8px;\n\n            small {\n              font-size: 28px;\n            }\n          }\n        }\n      }\n    }\n  }\n\n  #agnostic {\n    overflow: visible;\n\n    padding-top: 252px;\n    padding-bottom: 113px;\n    padding-block-start: clamp(40px, 26vw, 252px);\n    padding-block-end: clamp(66px, 18vw, 113px);\n\n    .frameworks {\n      margin-bottom: 33px;\n      margin-top: 28px;\n\n      @include flex-list();\n\n      li {\n        font-size: 12px;\n        font-weight: 700;\n        line-height: 30px;\n        letter-spacing: 0.1em;\n        text-transform: uppercase;\n        color: #1a232f;\n        margin-right: 16px;\n\n        a {\n          vertical-align: 8px;\n          background-size: 100%;\n          display: inline-block;\n          opacity: 0.6;\n          transition: 0.2s opacity;\n\n          &:hover {\n            opacity: 1;\n          }\n        }\n\n        img {\n          height: 24px;\n          width: 24px;\n        }\n      }\n    }\n\n    .graphics {\n      width: 560px;\n      height: 708px;\n      margin-left: -55px;\n      margin-top: -169px;\n\n      @media (max-width: $screen-sm-max) {\n        margin: 64px auto 24px;\n        width: 300px;\n        max-width: 100%;\n        height: auto;\n      }\n    }\n  }\n\n  #components {\n    padding-top: 250px;\n    padding-block-start: clamp(160px, 26vw, 250px);\n\n    hgroup {\n      @media screen and (max-width: $screen-md-max) {\n        align-items: flex-start;\n        max-width: 430px;\n      }\n    }\n  }\n\n  #native {\n    padding-top: 294px;\n    padding-bottom: 50px;\n    padding-block-start: clamp(200px, 29vw, 294px);\n    padding-block-end: 50px;\n\n    hgroup {\n      h2 {\n        max-width: 464px;\n      }\n      p {\n        margin-block-end: 32px;\n      }\n    }\n\n    .graphics {\n      margin-top: -16px;\n      margin-right: -68px;\n      position: relative;\n\n      @media screen and (max-width: $screen-sm-max) {\n        margin-inline-start: 0;\n        margin-inline-end: 0;\n      }\n\n      > img {\n        position: absolute;\n        top: -115px;\n        left: calc(50% - 207px);\n        height: 761px;\n        width: 499px;\n        z-index: -1;\n      }\n\n      home-native {\n        position: relative;\n      }\n    }\n\n    @media (max-width: $screen-sm-max) {\n      flex-direction: column;\n      overflow: hidden;\n\n      .graphics {\n        margin-top: 64px;\n        margin-right: auto;\n        max-width: 100%;\n      }\n    }\n  }\n\n  #community {\n    z-index: 1;\n\n    margin-top: 338px;\n    padding-top: 120px;\n    margin-bottom: 360px;\n\n    margin-block-start: clamp(220px, 30vw, 338px);\n    padding-block-start: clamp(90px, 12vw, 120px);\n    margin-block-end: clamp(160px, 28vw, 360px);\n\n    hgroup {\n      h2 {\n        max-width: 451px;\n      }\n      p {\n        margin-block-start: 32px;\n        margin-block-end: 32px;\n      }\n      .link + .link {\n        margin-inline-start: 28px;\n      }\n    }\n\n    .graphics {\n      position: absolute;\n      left: -188px;\n      top: -22px;\n\n      img {\n        height: auto;\n      }\n    }\n\n    @media (max-width: $screen-sm-max) {\n      padding-bottom: 800px;\n\n      .graphics {\n        top: auto;\n        bottom: 0;\n        left: 0;\n        width: 100%;\n      }\n    }\n    @media (max-width: $screen-sm-max) {\n      padding-bottom: 100vw;\n    }\n  }\n\n  #integrations {\n    background: linear-gradient(180deg, #ffffff 0%, #f9fafb 100%);\n    overflow: visible;\n    overflow-x: hidden;\n\n    padding-top: 150px;\n    padding-block-start: clamp(100px, 13vw, 150px);\n\n    .content {\n      max-width: 736px;\n    }\n\n    hgroup {\n      h2 {\n        display: block;\n        margin-block-end: 24px;\n      }\n\n      p {\n        margin: 0;\n        margin-block-end: 32px;\n      }\n    }\n\n    .integration-list {\n      position: relative;\n      height: 360px;\n      display: block;\n      margin: 0 0 48px;\n      padding: 0;\n      position: relative;\n      opacity: 0;\n      animation: fadeIn 1s 1s forwards;\n\n      li {\n        list-style: none;\n        position: absolute;\n      }\n\n      img {\n        position: absolute;\n        width: 128px;\n        border-radius: 50%;\n        box-shadow: 0 6px 24px rgba(black, 0.1);\n\n        &.m {\n          width: 64px;\n        }\n\n        &.m {\n          width: 96px;\n        }\n      }\n    }\n  }\n\n  #testimonials {\n    padding-top: 200px;\n    padding-block-start: clamp(120px, 22vw, 200px);\n\n    h2 {\n      padding-top: 78px;\n      background: url(\"/img/homepage/heart.png\") no-repeat top center;\n      background-size: 88px;\n      text-align: center;\n      display: block;\n\n      font-size: 32px;\n      line-height: 120%;\n      letter-spacing: -0.03em;\n    }\n\n    blockquote {\n      border-left: 0;\n      position: absolute;\n      left: calc(50% - (784px / 2));\n      font-family: $font-family-serif;\n      max-width: 784px;\n      margin: 20px auto;\n      font-size: 22px;\n      line-height: 37px;\n      color: #5b708b;\n      text-align: center;\n      opacity: 0;\n      transition: 0.3s opacity;\n\n      &::before {\n        content: \"“\";\n        color: #dee3ea;\n        font-size: 64px;\n        position: absolute;\n        top: 26px;\n        left: -4px;\n      }\n\n      &.is-active {\n        opacity: 1;\n      }\n\n      @media (max-width: $screen-sm-max) {\n        left: 0;\n        width: 100%;\n      }\n    }\n\n    .quotees {\n      margin: 220px -32px 10px;\n      padding: 0;\n      list-style: none;\n      display: flex;\n      flex-wrap: wrap;\n      justify-content: space-around;\n      position: relative;\n\n      li {\n        opacity: 0.5;\n        cursor: pointer;\n        // flex: 0 1 190px;\n        margin-bottom: 32px;\n        transition: 0.2s opacity;\n        display: block;\n        padding: 6px 18px 10px 60px;\n        position: relative;\n\n        &.is-active {\n          opacity: 1;\n        }\n      }\n\n      img {\n        width: 50px;\n        height: auto;\n        position: absolute;\n        left: 8px;\n        margin-right: 8px;\n      }\n\n      strong {\n        display: block;\n        font-weight: 500;\n        font-size: 16px;\n        line-height: 19px;\n        letter-spacing: -0.02em;\n        color: #000000;\n        margin-top: 4px;\n      }\n\n      span {\n        font-size: 12px;\n        line-height: 23px;\n        letter-spacing: -0.02em;\n        color: #73849a;\n        display: block;\n      }\n\n      @media (max-width: $screen-md-max) {\n        margin-top: 300px;\n        margin-left: 0;\n        margin-right: 0;\n      }\n\n      @media (max-width: 440px) {\n        margin-top: 420px;\n      }\n    }\n\n    &__highlight {\n      background: transparent;\n      position: absolute;\n      box-shadow: 0px 8px 16px rgba(2, 8, 20, 0.1),\n        0px 4px 8px rgba(2, 8, 20, 0.08);\n      border-radius: 40px;\n      box-sizing: content-box;\n      transition: 0.2s all ease-out;\n    }\n  }\n\n  #start {\n    margin-top: 154px;\n    margin-block-start: clamp(100px, 16vw, 154px);\n\n    background: #3880ff;\n    padding-top: 91px;\n    padding-bottom: 91px;\n\n    .container {\n      display: flex;\n      flex-wrap: wrap;\n      align-items: center;\n      color: white;\n\n      &::before,\n      &::after {\n        display: none;\n      }\n    }\n\n    h2 {\n      font-size: 32px;\n      line-height: 120%;\n      letter-spacing: -0.03em;\n      color: #ffffff;\n    }\n\n    p {\n      letter-spacing: -0.03em;\n      color: #ffffff;\n      margin: 0;\n      margin-block-end: 8px;\n    }\n\n    .btn {\n      display: flex;\n\n      padding: 16px 20px;\n      margin-left: auto;\n      font-weight: bold;\n      font-size: 14px;\n      line-height: 17px;\n      letter-spacing: 0.08em;\n      border-radius: 100px;\n      text-transform: uppercase;\n      color: #4d8dff;\n      height: 48px;\n\n      span {\n        white-space: pre;\n      }\n\n      svg {\n        display: block;\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "assets/scss/pages/integrations/index1.scss",
    "content": "@import \"../../vars\";\n@import \"bootstrap-sass/assets/stylesheets/bootstrap/variables\";\n\n.integrations-card {\n  transition: all 0.3s;\n  display: block;\n  position: relative;\n  flex: 0 0 calc(25% - 16px);\n  margin: 0 8px 16px;\n  background: #ffffff;\n  box-shadow: 0 3px 13px rgba(0, 0, 0, 0.08), 0 2px 4px rgba(0, 0, 0, 0.08);\n  border-radius: 8px;\n\n  h2 {\n    font-size: 16px;\n    font-weight: 600;\n    color: #000;\n  }\n\n  &:hover {\n    box-shadow: 0 8px 24px rgba(0, 0, 0, 0.08), 0 6px 12px rgba(0, 0, 0, 0.08);\n  }\n\n  &--premier:after {\n    content: url(\"data:image/svg+xml,%3csvg width='52' height='50' viewBox='0 0 52 50' fill='none' xmlns='http://www.w3.org/2000/svg'%3e%3cpath d='M52 43L5 0H44C48.4183 0 52 3.58172 52 8V43Z' fill='%2387B1F7'/%3e%3cpath d='M41 13.6464L44.9009 16L43.869 11.5604L47.3125 8.57528L42.7729 8.18544L41 4L39.2268 8.18544L34.6875 8.57528L38.131 11.5604L37.0988 16L41 13.6464Z' fill='white'/%3e%3c/svg%3e\");\n    position: absolute;\n    top: 0;\n    right: 0;\n  }\n\n  &--featured {\n    flex: 0 0 calc(33% - 10px);\n    padding: 24px;\n\n    h1 {\n      font-size: 18px;\n      line-height: 25px;\n      font-weight: 600;\n      color: #000000;\n      margin-bottom: 6px;\n    }\n\n    p {\n      font-size: 14px;\n      line-height: 22px;\n      color: #637696;\n      margin-bottom: 0;\n    }\n\n    ul {\n      list-style-type: none;\n      margin-top: 0;\n      padding: 0;\n      position: absolute;\n      top: 26px;\n      right: 26px;\n      text-align: right;\n    }\n\n    .integrations-tag {\n      margin-bottom: 2px;\n    }\n\n    .integrations-card__image {\n      height: 70px;\n      display: flex;\n      flex-direction: column;\n      justify-content: center;\n      align-items: flex-start;\n\n      img {\n        max-height: 70px;\n        max-width: 180px;\n      }\n    }\n  }\n\n  &--small {\n    h2 {\n      margin-top: 0;\n      margin-bottom: 0;\n      padding: 14px 18px;\n    }\n\n    .integrations-card__image {\n      height: 116px;\n      width: 100%;\n      display: flex;\n      justify-content: center;\n      align-items: center;\n      margin-bottom: 10px;\n\n      border-bottom: 1px solid #ecf0f5;\n\n      img {\n        max-height: 50px;\n        max-width: 140px;\n      }\n    }\n  }\n}\n\n.integrations-tag {\n  font-weight: 500;\n  line-height: 1;\n  font-size: 9px;\n  letter-spacing: 0.03em;\n  text-transform: uppercase;\n  color: #9fabbe;\n  border: 1px solid #e2e9f3;\n  border-radius: 100px;\n  padding: 3px 6px;\n  display: inline-flex;\n  align-items: center;\n\n  &--premier {\n    background-color: #87b1f7;\n    position: relative;\n    color: #fff;\n    border: none;\n\n    ion-icon {\n      position: absolute;\n      top: 50%;\n      transform: translateY(-50%);\n      left: 6px;\n      width: 13px;\n      height: 13px;\n      fill: #fff;\n    }\n    padding-left: 22px;\n  }\n}\n\n#page-integrations {\n  position: relative;\n\n  &::before {\n    content: \"\";\n    display: block;\n    position: absolute;\n    top: 0;\n    left: 0;\n    width: 100%;\n    height: 564px;\n    z-index: -1;\n    background: url(\"/img/integrations/integrations-hero-bg.png\");\n    background-repeat: repeat-x;\n    background-size: 1680px;\n    background-position: center -20px;\n    opacity: 0.6;\n  }\n\n  &.show {\n    display: block;\n  }\n\n  &.hide {\n    display: none;\n  }\n\n  .integrations-hero {\n    text-align: center;\n    margin: 100px 0;\n\n    h1 {\n      font-size: 48px;\n      letter-spacing: -0.02em;\n      color: #000000;\n    }\n\n    p {\n      font-size: 24px;\n      letter-spacing: -0.02em;\n      color: #394d71;\n    }\n  }\n\n  .integrations-featured__list {\n    display: flex;\n    margin-left: -8px;\n  }\n\n  .integrations-list {\n    margin: 100px 0 140px;\n  }\n\n  .integrations-list__inner {\n    display: flex;\n    justify-content: space-between;\n  }\n\n  .integrations-list__filter {\n    flex: 0 0 194px;\n\n    h4 {\n      font-weight: 600;\n      font-size: 11px;\n      letter-spacing: 0.05em;\n      text-transform: uppercase;\n      color: #92a0b9;\n      margin-bottom: 14px;\n    }\n  }\n\n  .integrations-list__filter-close {\n    display: none;\n  }\n\n  .integrations-searchbox {\n    position: relative;\n\n    ion-icon {\n      position: absolute;\n      top: 50%;\n      transform: translateY(-50%);\n\n      &[name=\"search\"] {\n        color: #3880ff;\n        left: 11px;\n      }\n\n      &[name=\"close\"] {\n        transition: opacity 0.3s;\n        right: 11px;\n        pointer-events: none;\n        color: rgba(69, 88, 121, 0.75);\n        opacity: 0;\n      }\n    }\n\n    input {\n      border-radius: 100px;\n      border: none;\n      outline: none;\n      background: #f5f8fc;\n      font-size: 14px;\n      padding: 8px 30px;\n      color: #455879;\n      width: 100%;\n\n      &::placeholder {\n        color: #8e9fbc;\n      }\n    }\n\n    &.active {\n      ion-icon[name=\"close\"] {\n        opacity: 1;\n        pointer-events: all;\n        cursor: pointer;\n      }\n    }\n  }\n\n  .integrations-filter-toggle {\n    display: none;\n    font-size: 20px;\n    flex: 0 0 36px;\n    align-items: center;\n    justify-content: flex-end;\n    color: #3880ff;\n    cursor: pointer;\n  }\n\n  .integrations-category-filter a,\n  .integrations-check__label {\n    font-weight: 600;\n    line-height: 1;\n    font-size: 14px;\n    color: #2c3b55;\n  }\n\n  .integrations-toggles {\n    margin: 36px 0;\n\n    .integrations-check,\n    .integrations-check__label,\n    .integrations-check__input {\n      cursor: pointer;\n    }\n\n    .integrations-check + .integrations-check {\n      margin-top: 6px;\n    }\n\n    .integrations-check__label,\n    tippy {\n      margin-left: 6px;\n    }\n  }\n\n  .integrations-category-filter {\n    list-style-type: none;\n    margin: 0;\n    padding: 0;\n    transition: opacity 0.3s;\n    display: block;\n\n    li a {\n      transition: color 0.3s;\n      height: 20px;\n      display: flex;\n      align-items: center;\n      outline: none;\n      text-decoration: none;\n\n      &:hover {\n        color: #3880ff;\n      }\n    }\n\n    li + li {\n      margin-top: 12px;\n    }\n\n    &:not(.disable) li.active a {\n      pointer-events: none;\n      color: #3880ff;\n      padding-left: 8px;\n      border-left: 2px solid rgba(56, 128, 255, 0.4);\n    }\n\n    &.disable {\n      cursor: not-allowed;\n      opacity: 0.4;\n\n      a {\n        pointer-events: none;\n      }\n    }\n  }\n\n  .integrations-category-select {\n    display: none;\n  }\n\n  .integrations-list__results {\n    margin-left: 40px;\n    flex: 1 0 0;\n    max-width: 864px;\n\n    .loader {\n      display: none;\n    }\n  }\n\n  .integrations-list__results-category {\n    &:not(:last-child) {\n      margin-bottom: 46px;\n    }\n  }\n\n  .integrations-list__results-header {\n    display: flex;\n    justify-content: space-between;\n    align-items: baseline;\n    margin-bottom: 8px;\n\n    h4 {\n      font-size: 20px;\n      font-weight: 600;\n      margin-top: 0;\n      margin-bottom: 4px;\n    }\n\n    a {\n      font-weight: 600;\n      font-size: 16px;\n\n      ion-icon {\n        transition: transform 0.3s;\n        transform: translate(0, 1px);\n      }\n\n      &:hover ion-icon {\n        transform: translate(2px, 1px);\n      }\n    }\n\n    h4 > a {\n      margin-right: 8px;\n      font-size: 18px;\n      display: none;\n    }\n  }\n\n  .integrations-list__results-row {\n    display: flex;\n    flex-wrap: wrap;\n    margin-left: -8px;\n  }\n\n  .integrations-list__results-grid {\n    display: flex;\n    flex-wrap: wrap;\n    margin-left: -8px;\n    margin-right: -8px;\n  }\n\n  .integrations-list__empty-row {\n    opacity: 0.5;\n    margin-left: 8px;\n  }\n\n  .integrations-list__results-form {\n    display: none;\n    background: #f6f8fb;\n    border-radius: 16px;\n    flex-direction: column;\n    justify-content: center;\n    padding: 32px;\n    max-width: 600px;\n    margin-left: auto;\n    margin-right: auto;\n\n    h3 {\n      text-align: center;\n      max-width: 400px;\n      margin-top: 10px;\n      margin-left: auto;\n      margin-right: auto;\n      font-size: 22px;\n      font-weight: 600;\n      line-height: 30px;\n      color: #000;\n    }\n\n    &.show {\n      display: flex;\n    }\n\n    .hs_submit {\n      text-align: center;\n    }\n  }\n\n  .integrations-list__results-search {\n    display: none;\n  }\n\n  .integrations-list__empty-message {\n    text-align: center;\n    display: block;\n    margin-bottom: 48px;\n    font-size: 16px;\n    width: 100%;\n\n    b {\n      font-weight: 600;\n    }\n  }\n\n  tippy .tip.top {\n    left: -100px;\n    &::after {\n      right: 87px;\n    }\n\n    padding: 10px 12px 12px;\n    font-size: 12px;\n    line-height: 16px;\n    font-weight: 400;\n    font-family: $font-family-inter;\n  }\n}\n\n#page-integrations-detail {\n  background: url(\"/img/integrations/integrations-hero-bg.png\");\n  background-repeat: repeat-x;\n  background-size: 1680px;\n  background-position: center -300px;\n\n  .integrations-detail__nav {\n    margin-top: 20px;\n    margin-bottom: 80px;\n\n    a {\n      font-size: 16px;\n      font-weight: 600;\n      display: flex;\n      align-items: center;\n\n      ion-icon {\n        transition: transform 0.3s;\n        transform: translateY(-2px);\n        margin-right: 8px;\n      }\n\n      &:hover ion-icon {\n        transform: translate(-2px, -2px);\n      }\n    }\n  }\n\n  .integrations-detail__wrapper {\n    max-width: 748px;\n    margin-left: auto;\n    margin-right: auto;\n    margin-bottom: 140px;\n  }\n\n  .integrations-detail__header {\n    padding-bottom: 38px;\n    margin-bottom: 38px;\n    border-bottom: 1px solid #edf2f7;\n    display: flex;\n\n    h1 {\n      margin: 0;\n      font-size: 32px;\n      font-weight: 600;\n    }\n\n    p {\n      line-height: 28px;\n      font-size: 18px;\n      letter-spacing: -0.02em;\n      color: #637696;\n      max-width: 400px;\n      padding: 5px 0 6px;\n    }\n\n    ul {\n      margin: 0;\n      padding: 0;\n      list-style-type: none;\n      display: flex;\n    }\n\n    .integrations-tag {\n      font-size: 10px;\n      padding: 3px 7px 4px;\n\n      & + .integrations-tag {\n        margin-left: 6px;\n      }\n\n      &--premier {\n        padding-left: 22px;\n      }\n    }\n  }\n\n  .integrations-detail__logo {\n    background: #ffffff;\n    box-shadow: 0px 0px 3px rgba(0, 0, 0, 0.08), 0px 3px 6px rgba(0, 0, 0, 0.1);\n    border-radius: 8px;\n    width: 200px;\n    height: 180px;\n    flex: 0 0 200px;\n    margin-right: 38px;\n\n    display: flex;\n    justify-content: center;\n    align-items: center;\n\n    img {\n      max-height: 70px;\n      max-width: 140px;\n    }\n  }\n\n  .integrations-detail__logo + div {\n    flex: 1 0 0;\n    display: flex;\n    flex-direction: column;\n    justify-content: center;\n  }\n\n  .integrations-detail__body {\n    display: flex;\n  }\n\n  .integrations-detail__content {\n    flex: 1 0 0;\n\n    h1,\n    h2,\n    h3,\n    h4,\n    h5,\n    h6 {\n      font-size: 20px;\n      font-weight: 600;\n\n      margin-block-start: 3rem;\n      margin-block-end: 1rem;\n\n      &:first-child {\n        margin-block-start: 0;\n      }\n    }\n\n    p,\n    ul {\n      font-size: 14px;\n      line-height: 1.8;\n      color: #637696;\n\n      &:last-child {\n        margin-bottom: 0;\n      }\n    }\n    \n    p + p {\n      margin-block-start: 1rem;\n    }\n\n    ul {\n      margin-left: 0;\n      padding: 0;\n    }\n\n    ul li {\n      list-style-type: none;\n      position: relative;\n      padding-left: 22px;\n\n      & + li {\n        margin-top: 12px;\n      }\n\n      &:before {\n        position: absolute;\n        top: 3px;\n        left: 0;\n        content: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16px' height='16px' fill='%2362C67B' viewBox='0 0 512 512'%3E%3Cpath d='M170.718 216.482L141.6 245.6l93.6 93.6 208-208-29.118-29.118L235.2 279.918l-64.482-63.436zM422.4 256c0 91.518-74.883 166.4-166.4 166.4S89.6 347.518 89.6 256 164.482 89.6 256 89.6c15.6 0 31.2 2.082 45.764 6.241L334 63.6C310.082 53.2 284.082 48 256 48 141.6 48 48 141.6 48 256s93.6 208 208 208 208-93.6 208-208h-41.6z'/%3E%3C/svg%3E\");\n        width: 16px;\n        height: 16px;\n        fill: #62c67b;\n      }\n    }\n  }\n\n  .integrations-detail__actions {\n    flex: 0 0 192px;\n    margin-left: 46px;\n  }\n\n  .integrations-detail__actions-inner {\n    position: sticky;\n    top: 20px;\n\n    h5 {\n      margin-top: 0;\n      color: #73849a;\n      font-size: 10px;\n      text-transform: uppercase;\n      letter-spacing: 0.08em;\n      font-weight: 700;\n      margin-bottom: 4px;\n    }\n\n    ul {\n      list-style-type: none;\n      margin: 0;\n      padding: 0;\n    }\n\n    li + li {\n      margin-top: 4px;\n    }\n\n    li a {\n      transition: 0.3s all;\n      border-bottom: 1px solid #b2ceff;\n\n      &:hover {\n        border-bottom: 1px solid #5b768e;\n      }\n    }\n  }\n\n  .integrations-detail__cta {\n    background: #f3f7ff;\n    border-radius: 8px;\n    text-align: center;\n    padding: 16px;\n\n    span {\n      font-size: 13px;\n      line-height: 1.3;\n      display: block;\n      margin-bottom: 12px;\n      color: #637696;\n    }\n\n    .btn {\n      display: block;\n      width: 100%;\n      font-weight: 700;\n      font-size: 15px;\n    }\n\n    + h5 {\n      margin-top: 38px;\n    }\n  }\n\n  .integrations-detail__cta-secondary {\n    margin-top: 26px;\n\n    p {\n      font-weight: 500;\n      line-height: 17px;\n      font-size: 13px;\n      color: #637696;\n    }\n\n    .btn {\n      font-size: 13px;\n      font-weight: 700;\n      padding: 8px 13px 7px;\n    }\n  }\n\n  ul + .integrations-detail__cta-secondary {\n    border-top: 1px solid #edf2f7;\n    padding-top: 26px;\n  }\n\n  .integrations-detail__form {\n    border-top: 1px solid #edf2f7;\n    padding-top: 60px;\n    margin-top: 38px;\n\n    h1 {\n      margin: 0 0 4px;\n      font-size: 26px;\n      font-weight: 600;\n      text-align: center;\n    }\n\n    & > p {\n      line-height: 28px;\n      font-size: 18px;\n      letter-spacing: -0.02em;\n      color: #637696;\n      max-width: 400px;\n      margin-left: auto;\n      margin-right: auto;\n      margin-bottom: 26px;\n      text-align: center;\n    }\n\n    .hs_submit {\n      text-align: center;\n    }\n\n    .hs-custom-style>div input:not([type=image]):not([type=submit]):not([type=button]):not([type=radio]):not([type=checkbox]):not([type=file]),\n    .hs-custom-style fieldset input:not([type=image]):not([type=submit]):not([type=button]):not([type=radio]):not([type=checkbox]):not([type=file]) {\n      padding: 11px 15px;\n    }\n  }\n}\n\n@media (max-width: $screen-lg) {\n  .integrations-card--featured {\n    ul {\n      display: flex;\n      flex-wrap: wrap;\n      position: relative;\n      top: 0;\n      right: 0;\n      text-align: left;\n      margin: 8px 0 0;\n    }\n\n    li {\n      margin-right: 4px;\n    }\n  }\n\n  .integrations-featured .container,\n  .integrations-list .container {\n    width: 100%;\n  }\n}\n\n@media (max-width: $screen-md) {\n  .integrations-card:not(.integrations-card--featured) {\n    flex: 0 0 calc(50% - 16px);\n  }\n}\n\n@media (min-width: $screen-sm) {\n  .integrations-list__filter-inner {\n    position: sticky;\n    top: 38px;\n  }\n}\n\n@media (max-width: $screen-sm) {\n  .integrations-card--featured {\n    flex: 0 0 86%;\n    max-width: 420px;\n\n    &:last-child {\n      margin-right: 18px;\n    }\n\n    p {\n      font-size: 13px;\n      line-height: 18px;\n    }\n  }\n\n  #page-integrations {\n    background-size: 1160px;\n\n    .integrations-featured {\n      padding: 0 16px 0;\n\n      .container {\n        padding: 0;\n      }\n\n      &__list:after {\n        content: \"\";\n        display: block;\n        height: 10px;\n        flex: 0 0 1px;\n      }\n\n      overflow-x: auto;\n      -webkit-overflow-scrolling: touch;\n      -ms-overflow-style: -ms-autohiding-scrollbar;\n      &::-webkit-scrollbar {\n        display: none;\n      }\n    }\n\n    .integrations-hero {\n      margin: 60px 0;\n\n      h1 {\n        font-size: 38px;\n      }\n\n      p {\n        font-size: 20px;\n        max-width: 340px;\n        margin-left: auto;\n        margin-right: auto;\n      }\n    }\n\n    .integrations-list {\n      margin: 136px 0 80px;\n    }\n\n    .integrations-list__results-header h4 > a {\n      display: inline-block;\n    }\n\n    .integrations-list__results-category .integrations-list__results-row {\n      flex-wrap: nowrap;\n      width: 100vw;\n      margin-left: -18px;\n      margin-right: -16px;\n\n      overflow-x: auto;\n      -webkit-overflow-scrolling: touch;\n      -ms-overflow-style: -ms-autohiding-scrollbar;\n      &::-webkit-scrollbar {\n        display: none;\n      }\n\n      .integrations-card:first-child {\n        margin-left: 16px;\n      }\n\n      .integrations-card:last-child {\n        margin-right: 16px;\n      }\n\n      .integrations-card {\n        flex: 0 0 40%;\n        max-width: 420px;\n      }\n\n      &:after {\n        content: \"\";\n        display: block;\n        height: 10px;\n        flex: 0 0 1px;\n      }\n    }\n\n    .integrations-list__filter {\n      padding-bottom: 46px;\n      position: relative;\n      flex: 0;\n    }\n\n    .integrations-list__filter-inner {\n      height: 100%;\n    }\n\n    .integrations-list__filter-menu {\n      display: flex;\n      position: absolute;\n      top: -90px;\n      width: calc(100vw - 32px);\n    }\n\n    .integrations-searchbox {\n      flex: 1;\n\n      input {\n        font-size: 16px;\n      }\n    }\n\n    .integrations-filter-toggle {\n      display: flex;\n    }\n\n    .integrations-toggles {\n      margin-top: 0;\n    }\n\n    .integrations-list__filter-facets {\n      position: relative;\n      top: 0;\n      height: 100%;\n      width: 200px;\n      transition: transform 0.3s;\n      transform: translateX(-200px);\n\n      & > div + div {\n        margin-top: 20px;\n      }\n    }\n\n    // .integrations-list__filter-close {\n    //   position: absolute;\n    //   top: 0;\n    //   right: 16px;\n    //   display: block;\n    //   color: #9b9b9c;\n    //   font-size: 16px;\n    // }\n\n    .integrations-list__filter-facets-inner {\n      position: sticky;\n      top: 72px;\n    }\n\n    .show-mobile-filters .integrations-list__filter-facets {\n      transform: translateX(0);\n    }\n\n    .integrations-list__results {\n      margin-left: -196px;\n      transition: transform 0.3s;\n      transform: translateX(0);\n      position: relative;\n\n      .click-region {\n        display: none;\n      }\n    }\n\n    .integrations-list__results.loading {\n      & > *:not(.loader) {\n        transition: opacity 0.3s;\n        opacity: 0 !important;\n      }\n\n      .loader {\n        display: block;\n        position: absolute;\n        top: 0;\n        left: 50%;\n        margin-left: -15px;\n        width: 30px;\n        &:before {\n          content: \"\";\n          display: block;\n          padding-top: 100%;\n        }\n      }\n\n      .circular {\n        animation: rotate 2s linear infinite;\n        height: 100%;\n        transform-origin: center center;\n        width: 100%;\n        position: absolute;\n        top: 0;\n        bottom: 0;\n        left: 0;\n        right: 0;\n        margin: auto;\n      }\n\n      .path {\n        stroke-dasharray: 1, 200;\n        stroke-dashoffset: 0;\n        animation: dash 1.5s ease-in-out infinite;\n        stroke-linecap: round;\n        stroke: #3880ff;\n        stroke-width: 4px;\n      }\n\n      @keyframes rotate {\n        100% {\n          transform: rotate(360deg);\n        }\n      }\n\n      @keyframes dash {\n        0% {\n          stroke-dasharray: 1, 200;\n          stroke-dashoffset: 0;\n        }\n        50% {\n          stroke-dasharray: 89, 200;\n          stroke-dashoffset: -35px;\n        }\n        100% {\n          stroke-dasharray: 89, 200;\n          stroke-dashoffset: -124px;\n        }\n      }\n    }\n\n    .show-mobile-filters .integrations-list__results {\n      transform: translateX(200px);\n\n      .click-region {\n        display: block;\n        width: 100%;\n        height: 100%;\n        z-index: 999;\n        position: absolute;\n        top: 0;\n        left: 0;\n      }\n    }\n  }\n\n  #page-integrations-detail {\n    .integrations-detail__wrapper {\n      margin-bottom: 90px;\n      max-width: 500px;\n    }\n\n    .integrations-detail__nav {\n      margin-bottom: 30px;\n    }\n    .integrations-detail__header {\n      flex-direction: column;\n      align-items: center;\n      text-align: center;\n      padding-bottom: 0;\n      border-bottom: 0;\n\n      p {\n        max-width: 500px;\n      }\n      ul {\n        justify-content: center;\n      }\n    }\n    .integrations-detail__logo {\n      margin-right: 0;\n      margin-bottom: 40px;\n      width: 132px;\n      height: 118px;\n      flex: 0 0 118px;\n\n      img {\n        max-height: 50px;\n        max-width: 120px;\n      }\n    }\n    .integrations-detail__logo + div {\n      flex: 0;\n    }\n\n    .integrations-detail__body {\n      position: relative;\n      padding-top: 140px;\n      flex-direction: column;\n    }\n\n    .integrations-detail__actions {\n      margin-left: 0;\n      flex: none;\n    }\n\n    .integrations-detail__cta {\n      position: absolute;\n      top: 0;\n      left: 0;\n      width: 100%;\n    }\n\n    .integrations-detail__actions-inner {\n      position: static;\n    }\n\n    .integrations-detail__cta-secondary {\n      display: none;\n    }\n  }\n}\n\n\n"
  },
  {
    "path": "assets/scss/pages/ioniconf-2020.scss",
    "content": "//#region ----------------------------- IMPORTS ------------------------------------------\n@import \"bootstrap-sass/assets/stylesheets/bootstrap/variables\";\n@import \"bootstrap-sass/assets/stylesheets/bootstrap/normalize\";\n\n@import \"../vars\";\n@import \"../fonts\";\n@import \"../components/mobile-nav\";\n\n@import \"../utilities/u-mixins\";\n\n@font-face {\n  font-family: \"Ionicons\";\n  src: local(\"Ionicons\"), url(\"/fonts/ionicons.woff2\") format(\"woff2\"),\n    url(\"/fonts/content/fonts/ionicons.woff\") format(\"woff\"),\n    url(\"/fonts/content/fonts/ionicons.ttf\") format(\"ttf\"),\n    url(\"/fonts/content/fonts/ionicons.eot#iefix\") format(\"eot\"),\n    url(\"/fonts/content/fonts/ionicons.svg#Ionicons\") format(\"svg\");\n  font-weight: normal;\n  font-style: normal;\n}\n//#endregion ----------------------------------------------------------------------------\n\n//#region ----------------------------- ANIMATIONS ----------------------------------------\n@keyframes fadeDown {\n  0% {\n    z-index: -1;\n    opacity: 0;\n    transform: translateY(0px);\n  }\n  1% {\n    z-index: 1;\n    opacity: 0;\n    transform: translateY(-10px);\n  }\n  100% {\n    z-index: 1;\n    opacity: 1;\n    transform: translateY(0);\n  }\n}\n\n@keyframes pushUp {\n  to {\n    transform: translateY(-1px);\n    filter: hue-rotate(125deg);\n    box-shadow: 0px 4px 8px black;\n  }\n}\n@keyframes pushDown {\n  0% {\n    transform: translateY(-1px);\n    filter: hue-rotate(125deg);\n    box-shadow: 0px 4px 8px black;\n  }\n  100% {\n    transform: translateY(0px);\n  }\n}\n//#endregion ------------------------------------------------------------------------------\n\n//#region ----------------------------- VARIABLES -----------------------------------------\n$colorBackMain: #000715;\n$colorTitleMain: white;\n$colorTextMain: #e9edf3;\n$colorTextHighlight: #5887ff;\n$colorButtonMain: linear-gradient(74.26deg, #4cc3ff 0%, #4172ff 100%);\n$fontFamilyRoboto: \"Roboto Mono\", Menlo, Courier, monospace;\n$fontFamilyInter: $font-family-inter;\n$fontFamilyMono: $font-family-monospace;\n$timingFunction: cubic-bezier(0.17, 0.67, 0.52, 1);\n\n:root {\n  --navHeight: 78px;\n}\n//#endregion ------------------------------------------------------------------------------\n\n//#region ----------------------------- COMPONENTS ----------------------------------------\n\n.highlight {\n  color: $colorTextHighlight;\n}\n\n.btn-main {\n  @include box(\n    $d: inline-flex,\n    $ai: center,\n    $back: $colorButtonMain,\n    $color: white,\n    $br: 8px,\n    $bord: none,\n    $p: 16px 20px\n  );\n  @include font(\n    $fw: 600,\n    $fs: 16px,\n    $lh: 16px,\n    $ws: nowrap,\n    $tt: uppercase,\n    $ls: 0.1em\n  );\n  animation: pushDown 0.25s $timingFunction;\n  animation-fill-mode: forwards;\n\n  &:hover,\n  &:active,\n  &:focus {\n    animation: pushUp 0.25s $timingFunction;\n    animation-fill-mode: forwards;\n  }\n}\n\n.btn-secondary {\n  @include box(\n    $d: flex,\n    $ai: center,\n    $curs: pointer,\n    $pos: relative,\n    $bord: 1px solid $colorTextHighlight,\n    $h: 39px,\n    $br: 8px,\n    $back: transparent\n  );\n  @include font($fw: 600, $fs: 16px, $lh: 19px, $ws: nowrap, $color: #fff);\n  transition: all 0.15s ease-in;\n\n  &:hover,\n  &:active,\n  &:focus,\n  &:focus-within {\n    @include box($bord: 1px solid #ff4db5);\n    transition: all 0.15s ease-in;\n\n    & .checkbox,\n    & .arrow {\n      transform: translateX(2px);\n      transition: all 0.15s ease-in;\n    }\n  }\n\n  .text {\n    @include box($d: flex, $ai: center, $z: 1, $p: 10px 12px, $pie: 30px);\n  }\n\n  .arrow {\n    @include box(\n      $d: flex,\n      $ai: center,\n      $w: 18px,\n      $curs: pointer,\n      $pos: absolute,\n      $back: $colorBackMain,\n      $r: 8px,\n      $z: 1\n    );\n    @include font($fs: 18px);\n    transition: all 0.15s ease-in;\n  }\n\n  .checkbox {\n    @include box($pos: absolute, $r: 10px, $pis: 12px, $z: -1);\n    transition: all 0.15s ease-in;\n  }\n\n  .checkbox:checked {\n    @include box($z: -1);\n    & ~ hubspot-form {\n      @include box(\n        $o: 1,\n        $a: fadeDown 0.25s cubic-bezier(0.17, 0.67, 0.52, 1),\n        $afm: forwards\n      );\n    }\n\n    & ~ .text {\n      @include box(\n        $o: 0,\n        $trans: all 0.25s cubic-bezier(0.17, 0.67, 0.52, 1),\n        $tf: translateY(10px)\n      );\n    }\n    & ~ .arrow {\n      @include box($z: -1);\n    }\n  }\n\n  hubspot-form {\n    @include box(\n      $pos: absolute,\n      $h: 100%,\n      $w: 100%,\n      $o: 0,\n      $tf: translateY(-10px)\n    );\n    fieldset {\n      @include box($w: 100%, $h: 100%);\n    }\n    label {\n      @include box($v: hidden, $pos: absolute);\n    }\n    input {\n      @include box(\n        $h: 100%,\n        $w: 100%,\n        $br: 8px,\n        $bord: none,\n        $p: 10px 12px,\n        $pie: 42px\n      );\n      @include font($lh: 16px, $color: #000, $fw: 400);\n    }\n    .hs-button {\n      @include box(\n        $pos: absolute,\n        $r: 0,\n        $t: 1px,\n        $h: calc(100% - 2px),\n        $bord: none,\n        $br: 8px,\n        $back: transparent,\n        $p: 0px 6px,\n        $w: 40px,\n      );\n      @include font($color: black, $fs: 18px);\n        white-space: nowrap;\n    }\n    .success {\n      @include box($pos: absolute, $t: 1px, $r: 1px, $h: calc(100% - 2px));\n    }\n  }\n}\n\n.container {\n  padding-right: 15px;\n  padding-left: 15px;\n  margin-right: auto;\n  margin-left: auto;\n}\n\n@media (min-width: 768px) {\n  .container {\n    width: 750px;\n  }\n}\n\n@media (min-width: 992px) {\n  .container {\n    width: 970px;\n  }\n}\n\n@media (min-width: 1104px) {\n  .container {\n    width: 1054px;\n  }\n}\n\n// #endregion ------------------------------------------------------------------------\n\n//#region ----------------------------- GENERIC -------------------------------------------\n\nbody * {\n  box-sizing: border-box;\n}\n\nfieldset {\n  border: none;\n  padding: 0;\n  margin: 0;\n}\n\n.no-scroll {\n  overflow: hidden;\n}\n\nbody {\n  overflow-x: hidden;\n}\n\na:focus,\na:hover,\na:active,\na:visited {\n  color: white;\n  text-decoration: none;\n}\n\nnav {\n  &::before,\n  &::after {\n    display: none !important;\n  }\n}\n\nsection {\n  margin-block-start: 200px;\n  margin-block-end: 200px;\n}\n\na {\n  text-decoration: none;\n  color: inherit;\n}\n\nhtml,\nbody,\nmain {\n  background: $colorBackMain;\n  position: relative;\n  z-index: -2;\n  font-family: $fontFamilyInter;\n}\n\nbutton,\n.mobile-nav {\n  font-family: $fontFamilyInter;\n}\n\nul {\n  list-style-type: none;\n  margin: 0;\n  padding-left: 0;\n}\n\nh1 {\n  margin: 0;\n  font-size: 64px;\n  line-height: 100%;\n  letter-spacing: -0.04em;\n  color: #fff;\n}\n\nh2 {\n  margin: 0;\n  font-weight: 600;\n  font-size: 48px;\n  line-height: 120%;\n  color: #fff;\n  display: flex;\n  letter-spacing: -0.03em;\n}\n\nh3 {\n  margin: 0;\n  font-weight: 500;\n  font-size: 20px;\n  line-height: 24px;\n  letter-spacing: -0.01em;\n  color: #fff;\n}\n\np {\n  margin: 0;\n  font-weight: 400;\n  color: #fff;\n}\n\n.p2 {\n  font-size: 20px;\n  line-height: 160%;\n  letter-spacing: -0.03em;\n  color: #dee3ea;\n}\n\n.p3 {\n  font-size: 16px;\n  line-height: 180%;\n  letter-spacing: 0.01em;\n  color: #dee3ea;\n}\n\n// #endregion --------------------------------------------------------------------------------\n\n//#region ----------------------------- PAGE STYLES ----------------------------------------\n#header {\n  @include box($pos: sticky, $t: 0, $z: 1);\n\n  .nav {\n    @include box(\n      $ai: center,\n      $h: var(--navHeight),\n      $pos: absolute,\n      $back: transparent,\n      $l: 0,\n      $t: 0,\n      $w: 100%\n    );\n    transition: background-color 0.25s $timingFunction;\n\n    .nav__wrap {\n      @include box($d: flex);\n    }\n\n    .nav__sections {\n      @include box($d: flex, $ai: center, $w: 100%, $jc: center);\n      a {\n        @include box(\n          $d: inline-block,\n          $pos: relative,\n          $trans: all 0.25s $timingFunction,\n          $tf: translateY(0px)\n        );\n\n        &::before {\n          @include box(\n            $c: \"\",\n            $pos: absolute,\n            $b: -10px,\n            $w: 0,\n            $h: 5px,\n            $mbs: 5px,\n            $trans: all 0.25s $timingFunction,\n            $o: 0,\n            $back: linear-gradient(74.26deg, #ff4db5 0%, #ff4262 100%)\n          );\n        }\n      }\n      a:hover,\n      a:active,\n      a:focus,\n      li.active > a {\n        transform: translateY(-1px);\n        &:before {\n          width: 100%;\n          opacity: 1;\n        }\n      }\n\n      & > li {\n        @include box($mis: 32px, $mie: 32px, $color: white);\n        font-size: 16px;\n      }\n    }\n\n    &.scrolled {\n      background: rgba(0, 7, 21, 0.95);\n    }\n  }\n}\n#mainNav {\n  @include box($d: flex);\n  @include media($val: $screen-xs-max, $d: none);\n}\n\n#mobileNavBar {\n  @include box($d: none);\n  @include media($val: $screen-xs-max, $d: flex);\n}\n\n.mobile-nav {\n  @include box($d: none, $back: $colorBackMain);\n\n  .mobile-nav__close {\n    opacity: 1;\n\n    svg {\n      fill: white;\n      width: 20px;\n      height: 20px;\n    }\n  }\n\n  .mobile-nav__bg {\n    z-index: -1;\n    position: absolute;\n    top: 0;\n  }\n\n  .mobile-nav__menu {\n    background: url(\"/img/ioniconf/bg-menu.svg\");\n    background-size: cover;\n    background-repeat: no-repeat;\n    padding: 0;\n    padding-top: 34px;\n    padding-block-end: 67px;\n    max-width: 100%;\n    color: white;\n    display: flex;\n    flex-direction: column;\n    height: 100%;\n\n    .mobile-nav__menuitem {\n      flex-basis: 0;\n      margin-top: 0;\n      padding: 16px;\n      svg {\n        max-height: 35vh;\n      }\n\n      a {\n        color: white;\n        text-align: center;\n      }\n    }\n  }\n\n  .mobile-nav__register {\n    @include box(\n      $h: 39px,\n      $back: $colorButtonMain,\n      $color: white,\n      $br: 8px,\n      $bord: none,\n      $pi: 12px,\n      $pb: 10px\n    );\n    @include font($fw: 600, $fs: 16px, $lh: 16px, $ws: nowrap);\n  }\n\n  .mobile-nav__footer {\n    display: flex;\n    justify-content: center;\n    background-color: $colorBackMain;\n    position: absolute;\n    z-index: 2;\n    bottom: 0;\n\n    .footer__cta {\n      width: 100%;\n    }\n\n    .text {\n      @include box($d: inline-flex, $w: 100%, $ai: center, $jc: center);\n    }\n  }\n}\n\n#mobileNavBar {\n  display: none;\n  justify-content: space-between;\n\n  .nav__logo {\n    @include box($d: flex, $ai: center);\n  }\n  button {\n    @include box(\n      $d: flex,\n      $ai: center,\n      $color: white,\n      $back: none,\n      $bord: none,\n      $p: 0\n    );\n    @include font($fs: 34px, $lh: 34px, $fw: bold);\n  }\n}\n\n#navSpace {\n  height: var(--navHeight);\n}\n\n#landing {\n  @include box($mbs: 0, $mbe: 0, $pbe: 246px, $pos: relative, $of: hidden);\n\n  .landing__wrap {\n    @include box($d: flex, $ai: center, $jc: space-between, $pbs: 121px);\n    @include media($val: $screen-sm-max, $fd: column, $ai: flex-start);\n  }\n  .landing__content {\n    @include box($mxw: 448px);\n    @include media($val: $screen-sm-max, $order: 2, $mbs: 48px);\n\n    h1 {\n      @include box($mbe: 24px);\n\n      span {\n        @include box($d: block, $mbe: 40px);\n        @include font(\n          $fw: 500,\n          $fs: 16px,\n          $lh: 160%,\n          $ls: 0.16em,\n          $ff: $fontFamilyRoboto,\n          $tt: uppercase\n        );\n      }\n    }\n\n    p {\n      @include box($mbe: 40px);\n      @include font($fs: 24px, $lh: 160%, $ls: -0.02em);\n    }\n  }\n  .landing__img {\n    @include box($h: 100%, $w: 100%, $mxw: 448px);\n    @include media($val: $screen-sm-max, $mxw: 50%);\n  }\n}\n\n#landingBack {\n  @include box($pos: absolute, $z: -1, $l: calc((100% - 1800px) / 2));\n}\n\n#backgroundImage {\n  background: url(\"/img/ioniconf/bg-tessellation.min.svg\");\n  background-position: center top;\n  background-size: cover;\n}\n\n#keynote {\n  @include box($mbs: 0);\n\n  h2 {\n    @include box($pbe: 32px);\n  }\n\n  .keynote__video {\n    @include box(\n      $pos: relative,\n      $pbe: 56.25%,\n      $pbs: 25px,\n      $h: 0,\n      $bord: 2px solid rgba(255, 255, 255, 0.5)\n    );\n\n    iframe {\n      @include box($pos: absolute, $t: 0, $l: 0, $w: 100%, $h: 100%);\n    }\n  }\n}\n\n#talks {\n  .talks__cards {\n    @include box(\n      $d: grid,\n      $gtc: repeat(auto-fill, minmax(298px, 1fr)),\n      $cg: 63px,\n      $rg: 40px,\n      $mbs: 36px\n    );\n  }\n\n  .card__video {\n    @include box(\n      $pos: relative,\n      $pbe: 56.25%,\n      $pbs: 25px,\n      $h: 0,\n      $bord: 2px solid rgba(255, 255, 255, 0.5)\n    );\n\n    iframe {\n      @include box($pos: absolute, $t: 0, $l: 0, $w: 100%, $h: 100%);\n    }\n  }\n  .card__title {\n    @include box(\n      $d: flex,\n      $ai: center,\n      $jc: space-between,\n      $mbs: 32px,\n      $mbe: 20px\n    );\n\n    .info {\n      @include box($d: flex, $ai: center);\n\n      img {\n        @include box($mie: 12px);\n      }\n    }\n    .social {\n      @include box($d: grid, $gtc: repeat(2, minmax(18px, 20px)), $cg: 16px);\n\n      a {\n        @include box($d: flex, $ai: center);\n\n        svg {\n          @include box($f: transparent, $trans: fill 0.1s ease-in);\n\n          &:hover,\n          &:active,\n          &:focus,\n          &:focus-within {\n            @include box($f: #fff, $trans: fill 0.1s ease-in);\n          }\n        }\n      }\n    }\n  }\n  .card__info {\n    @include box($mnh: 73px);\n    @include font($lh: 140%, $ls: -0.03em);\n  }\n}\n\n#topics {\n  h3 {\n    @include font(\n      $ff: $fontFamilyRoboto,\n      $fw: 500,\n      $fs: 16px,\n      $lh: 160%,\n      $ls: 0.16em,\n      $tt: uppercase\n    );\n    @include box($color: #b2becd, $mbe: 8px, $ta: center);\n  }\n}\n\n#topicsContent {\n  @include box($d: flex, $fd: column, $ai: center);\n  img {\n    margin-left: 36px;\n    margin-right: 36px;\n    margin-top: 48px;\n  }\n  div {\n    display: inline-block;\n    text-align: center;\n  }\n}\n\n#event {\n  .container {\n    @include box($d: flex, $jc: space-between);\n  }\n\n  .sticky {\n    @include box($pos: sticky, $t: calc(var(--navHeight) + 44px));\n  }\n}\n\n#eventInfo {\n  @include box(\n    $d: inline-block,\n    $va: top,\n    $mxw: 480px,\n    $pos: sticky,\n    $t: calc(var(--navHeight) + 44px),\n    $mie: 16px\n  );\n  @include media($val: $screen-xs-max, $mie: 0);\n\n  h2 {\n    @include box($mbe: 34px);\n  }\n  .p2 + .p2 {\n    margin-top: 32px;\n  }\n}\n\n#eventContent {\n  @include box($d: inline-block, $mis: 16px);\n  @include media($val: $screen-xs-max, $mis: 0);\n  margin-top: 88px;\n\n  .card {\n    @include box($mxw: 448px, $color: white, $p: 48px, $br: 8px, $mbe: 48px);\n    &:last-of-type {\n      margin-block-end: 0;\n    }\n\n    .card__text {\n      @include font($fs: 22px, $lh: 180%);\n      @include box($mbs: 30px);\n    }\n\n    &.card__automate {\n      @include box(\n        $back: \"linear-gradient(237.26deg, #786CFF 0%, #6C99FF 100%)\"\n      );\n\n      .card__icon {\n        @include box($mxw: 102px, $mxh: 96px);\n      }\n    }\n    &.card__animations {\n      @include box(\n        $back: \"linear-gradient(237.26deg, #FF7B5E 0%, #FF6A7B 100%)\"\n      );\n\n      .card__icon {\n        @include box($mxw: 102px, $mxh: 96px);\n      }\n    }\n    &.card__staticHosting {\n      @include box(\n        $back: \"linear-gradient(237.26deg, #36DCBD 0%, #58D565 100%)\"\n      );\n\n      .card__icon {\n        @include box($mxw: 102px, $mxh: 96px);\n      }\n    }\n    &.card__authentication {\n      @include box(\n        $back: \"linear-gradient(237.26deg, #4790FF 0%, #67D3F7 100%)\"\n      );\n\n      .card__icon {\n        @include box($mxw: 102px, $mxh: 96px);\n      }\n    }\n    &.card__testing {\n      @include box(\n        $back:\n          \"linear-gradient(237.26deg, #FFD84D 0%, #FFD748 0.01%, #FF9F45 100%)\"\n      );\n\n      .card__icon {\n        @include box($mxw: 102px, $mxh: 96px);\n      }\n    }\n  }\n}\n\n#footer {\n  @include font($fs: 14px, $lh: 17px, $color: white);\n  margin-bottom: 0px;\n\n  // & > div.container::before, & > div.container::after {\n  //   display:none;\n  // }\n\n  .footer__wrap {\n    @include box($d: flex, $ai: center, $fw: wrap);\n    @include media($val: $screen-xs-max, $jc: center);\n  }\n\n  .footer__cta {\n    @include box($p: 24px 0px);\n  }\n}\n\n.footer__list {\n  @include box($d: flex, $ai: center, $jc: space-evenly, $fw: wrap);\n  flex-grow: 1;\n  & > li {\n    padding: 24px;\n\n    & > a {\n      &:hover,\n      &:active,\n      &:focus {\n        color: $colorTextHighlight;\n      }\n    }\n  }\n}\n\n#footerIcon {\n  width: auto;\n  object-fit: contain;\n  padding: 24px 0;\n}\n//#endregion --------------------------------------------------------------------------------\n\n//#region ----------------------------- MEDIA QUERIES ---------------------------------------\n@media screen and (min-width: 1800px) {\n  #tessellationBg,\n  #landingBack {\n    left: 0 !important;\n    width: 100%;\n  }\n}\n\n@media screen and (max-width: $screen-xs-max) {\n  :root {\n    --navHeight: 50px;\n  }\n  body {\n    padding-top: 0px;\n  }\n  #mainNav {\n    display: none !important;\n  }\n  #mobileNavBar {\n    display: flex !important;\n  }\n\n  #landingContent {\n    @include box($mbs: 32px);\n    flex-direction: column;\n\n    .u-spacer {\n      display: none !important;\n    }\n  }\n  #landingImage {\n    @include box($mbe: 32px, $mnh: 35vh, $mxw: 461px, $jc: center);\n    order: 1;\n\n    svg {\n      @include box($mxw: 50vw);\n    }\n  }\n  #landingMain {\n    order: 3;\n  }\n\n  #event > .container {\n    flex-wrap: wrap;\n  }\n\n  #event .u-spacer {\n    display: none;\n  }\n\n  #eventInfo {\n    @include box($pos: static);\n  }\n\n  #footer .u-spacer {\n    display: none;\n  }\n}\n\n//#endregion --------------------------------------------------------------------------------------\n"
  },
  {
    "path": "assets/scss/pages/jobs.scss",
    "content": "@import '../vars';\n@import 'bootstrap-sass/assets/stylesheets/bootstrap/variables';\n\n#page-jobs {\n\n  img {\n    height: auto;\n  }\n  .navbar ~ .banner {\n    background: #26708a no-repeat center top;\n    background-image: url('/img/jobs/jobs-cta-bg.jpg'),\n                      linear-gradient(to right, #1e4e8b 0%, #298776 100%);\n    background-size: cover;\n    height: 360px;\n  }\n\n  .what-we {\n    padding-top: 100px;\n\n    .content {\n      padding: 95px 50px 75px;\n    }\n\n    .graphics {\n      width: 100%;\n    }\n\n    .col {\n      width: 49.9%;\n      padding-right: 35px;\n      float: left;\n\n      + .col {\n        padding-right: 0;\n        padding-left: 35px;\n      }\n\n      p {\n        font-size: 18px;\n        line-height: 32px;\n        font-weight: 400;\n      }\n    }\n\n    @media (max-width: $screen-xs-max) {\n      .col,\n      .col + .col {\n        width: 100%;\n        padding: 0 0 50px;\n      }\n    }\n  }\n\n  .why.hero.top {\n    padding-top: 0;\n\n    .content {\n      max-width: 675px;\n      margin: 95px auto 55px;\n\n      p {\n        color: #5d636c;\n        font-size: 18px;\n        line-height: 28px;\n        font-weight: 400;\n      }\n    }\n\n    .graphics {\n      width: 100%;\n    }\n  }\n\n  .reasons {\n    display: flex;\n    flex-wrap: wrap;\n    justify-content: space-between;\n\n    .reason {\n      padding-left: 72px;\n      padding-right: 10px;\n      padding-bottom: 70px;\n      flex: 1 0 290px;\n      max-width: 350px;\n      position: relative;\n      margin: 0 auto;\n\n      &:before {\n        background: no-repeat center top url('/img/jobs/jobs-perks-icons.png');\n        background-size: 48px;\n        height: 48px;\n        width: 48px;\n        content: '';\n        position: absolute;\n        left: 0;\n        top: 0;\n      }\n\n      &:nth-child(2):before { background-position: center -48px; }\n      &:nth-child(3):before { background-position: center -96px; }\n      &:nth-child(4):before { background-position: center -144px; }\n      &:nth-child(5):before { background-position: center -192px; }\n      &:nth-child(6):before { background-position: center -240px; }\n      h4 {\n        font-size: 16px;\n        line-height: 24px;\n      }\n\n      p {\n        font-size: 14px;\n        line-height: 24px;\n      }\n    }\n  }\n\n  .bennefits {\n    background: #2466d2;\n    background: linear-gradient(to right, #4688f4 0%, #1e60cc 100%);\n    position: relative;\n    overflow: hidden;\n\n    .content {\n      padding-top: 90px;\n      padding-bottom: 72px;\n\n      &:before {\n        background: no-repeat left top url('/img/jobs/ionic-photos-3.jpg');\n        background-size: cover;\n        width: 1000px;\n        content: '';\n        position: absolute;\n        bottom: 0;\n        top: 0;\n        display: block;\n        left: 45%;\n        @media (max-width: $screen-sm-max)  {\n          left: 60%;\n          background-position: left -340px;\n        }\n        @media (max-width: $screen-xs-max)  {\n          display: none;\n        }\n        @media (min-width: 1820px)  {\n          width: 924px;\n          height: 700px;\n          left: auto;\n          right: 0;\n        }\n      }\n    }\n\n    h3 {\n      color: white;\n      padding-left: 72px;\n      position: relative;\n\n      &:before {\n        background: no-repeat center -288px url('/img/jobs/jobs-perks-icons.png');\n        background-size: 48px;\n        height: 48px;\n        width: 48px;\n        content: '';\n        position: absolute;\n        left: 0;\n        top: 0;\n      }\n    }\n\n    ul {\n      list-style: none;\n      padding-left: 72px;\n\n      li {\n        color: white;\n        opacity: .8;\n        position: relative;\n        line-height: 1em;\n        padding: 15px 0 15px 23px;\n        font-weight: 400;\n        font-size: 16px;\n\n        &:before {\n          background: no-repeat center center url('/img/jobs/job-perks-checkmark.png');\n          background-size: 12px;\n          height: 12px;\n          width: 12px;\n          content: '';\n          position: absolute;\n          left: 0;\n          top: 16px;\n        }\n      }\n    }\n  }\n\n  .open-positions {\n    max-width: 690px;\n    margin: 0 auto;\n\n    hgroup {\n      padding: 90px 25px 70px;\n    }\n\n    hgroup p {\n      color: #5d636c;\n      font-size: 18px;\n      line-height: 28px;\n      font-weight: 400;\n    }\n\n    ul,\n    .rbox-opening-list {\n      padding: 0;\n\n      li,\n      .rbox-opening-li {\n        list-style: none;\n        padding: 16px 0;\n        position: relative;\n\n        .lever-team-title {\n          font-size: 24px;\n        }\n\n        strong,\n        .lever-job-title,\n        .rbox-opening-li-title {\n          font-size: 16px;\n          line-height: 1.4em;\n          color: $blue;\n          font-weight: 500;\n          transition: .2s color;\n\n          &:hover {\n            color: darken($blue, 10);\n          }\n        }\n\n        .location,\n        .lever-job-tag,\n        .rbox-job-shortdesc {\n          font-weight: 400;\n          font-size: 14px;\n          float: right;\n          color: $darkish-grey;\n        }\n\n        .learn-more {\n          float: right;\n          margin-top: 18px;\n          font-weight: 500;\n          cursor: pointer;\n        }\n\n        .rbox-opening-position-info {\n          position: absolute;\n          right: 0;\n          top: 20px;\n        }\n\n        &.active .details {\n          transform: scale3d(1, 1 , 1);\n          max-height: 800px;\n          opacity: 1;\n        }\n      }\n\n      .rbox-opening-li {\n        padding-bottom: 29px;\n      }\n    }\n\n    .lever-team ul li  + li {\n      border-top: 1px solid $lighter-grey;\n    }\n\n    .details {\n      transform: scale3d(1, 0 , 1);\n      max-height: 0;\n      opacity: 0;\n      transform-origin: top;\n      transition: opacity .5s,\n                  max-height .5s,\n                  transform .5s cubic-bezier(0.155, 1.105, 0.295, 1.12);\n    }\n\n    .rbox-application-form input {\n      float: none;\n      width: 100%;\n\n      &[type='file'] {\n        border: 0;\n      }\n    }\n\n  }\n}\n"
  },
  {
    "path": "assets/scss/pages/native.scss",
    "content": "@import '../vars';\r\n@import 'bootstrap-sass/assets/stylesheets/bootstrap/variables';\r\n@import '../utilities/u-native';\r\n\r\n// #region --------------- VARIABLES -------------------\r\n$mainColor: #193455;\r\n$heroHeight: 768px;\r\n$sectionPad: 200px;\r\n\r\n$colorBack2: #F7F9FC;\r\n$colorBackInvert: $mainColor;\r\n\r\n// Text\r\n$colorTitle: #010610;\r\n$colorTitle2: #1A232F;\r\n$colorTitleInvert: white;\r\n$colorSubtext1: #2D4665;\r\n$colorSubtext2: #616E7E;\r\n$colorSubtext3: #445B78;\r\n$colorSubtext4: #5B708B;;\r\n$colorSubtextInvert: #E9EDF3;\r\n$colorSubtextInvert2: #CED6E0;\r\n\r\n// buttons\r\n$btnPrimaryBack: $mainColor;\r\n$btnPrimaryText: white;\r\n$btnSecondaryBack: #DEE3EA;\r\n$btnSecondaryText: #{$mainColor};\r\n// #endregion\r\n\r\n// #region --------------- BUTTONS ---------------------\r\n%btn {\r\n  border-radius: 8px;\r\n  height: 51px;\r\n  cursor: pointer;\r\n  text-transform: uppercase;\r\n  border:none;  \r\n  font-weight: bold;\r\n  letter-spacing: .1rem;\r\n  white-space: nowrap;\r\n  text-align:center;\r\n}\r\n\r\n@include box('.btn-primary', null, null, $btnPrimaryBack, $btnPrimaryText);\r\n.btn-primary {\r\n  @extend %btn;\r\n  @include animationForward($time: 300ms) {\r\n    0% {\r\n      background: lighten($mainColor, 8%);\r\n      box-shadow: 0 7px 14px rgba(0, 0, 0, 0.12), 0 3px 6px rgba(0, 0, 0, 0.08);\r\n    }\r\n    100% {\r\n\r\n    }\r\n  }  \r\n  &:hover, &:focus {\r\n    @include animationForward($time: 300ms) {\r\n      0% {\r\n      }\r\n      100% {\r\n        background: lighten($mainColor, 8%);\r\n        box-shadow: 0 7px 14px rgba(0, 0, 0, 0.12), 0 3px 6px rgba(0, 0, 0, 0.08);\r\n      }\r\n    }\r\n  }\r\n}\r\n\r\n@include box('.btn-secondary', null, null, $btnSecondaryBack, $btnSecondaryText);\r\n.btn-secondary {\r\n  @extend %btn;\r\n  @include animationForward($time: 300ms) {\r\n    0% {\r\n      background: darken(#DEE3EA, 4%);\r\n      box-shadow: 0 7px 14px rgba(0, 0, 0, 0.12), 0 3px 6px rgba(0, 0, 0, 0.08);\r\n    }\r\n    100% {\r\n\r\n    }\r\n  }  \r\n  &:hover, &:focus {\r\n    @include animationForward($time: 300ms) {\r\n      0% {\r\n      }\r\n      100% {\r\n        background: darken(#DEE3EA, 4%);\r\n        box-shadow: 0 7px 14px rgba(0, 0, 0, 0.12), 0 3px 6px rgba(0, 0, 0, 0.08);\r\n      }\r\n    }\r\n  }\r\n  \r\n}\r\n\r\n// #endregion\r\n\r\n// #region --------------- DEFAULT STYLES -------------\r\nh1 {\r\n  font-weight: 900;\r\n  font-size: 64px;\r\n  line-height: 100%;\r\n  margin: 0px;\r\n}\r\nh2 {\r\n  font-weight: 600;\r\n  font-size: 48px;\r\n  line-height: 112%;\r\n  letter-spacing: -.04em;\r\n  color: $colorTitle;\r\n  margin-bottom: 40px;\r\n  margin-top: 0px;\r\n}\r\nh3 {\r\n  font-weight: 500;\r\n  font-size: 20px;\r\n  font-family: $font-family-inter;\r\n  color: $colorTitle;\r\n  letter-spacing: -.01em;\r\n  margin-top: 0px;\r\n}\r\n.p1 {\r\n  font-size: 20px;\r\n  line-height: 160%;\r\n  letter-spacing: -.03em;\r\n}\r\n.p2 {\r\n  font-size: 16px;\r\n  line-height: 180%;\r\n  letter-spacing: -.01em;\r\n}\r\nimg {\r\n  max-width: 100%;\r\n  height: auto;\r\n}\r\na {\r\n  text-decoration: none;\r\n  &:active, &:hover, &:focus {\r\n    text-decoration: none;\r\n    color: #488aff;\r\n  }\r\n}\r\n#sticky-bar .anchor:hover {\r\n  color: $mainColor;\r\n  font-weight: 600;\r\n}\r\n#sticky-bar li.active a:not(.btn) {\r\n  color: $mainColor;\r\n}\r\n\r\n.btn.anchor {\r\n  background: $mainColor;\r\n}\r\n.highlight {\r\n  color: #4a8bfc;\r\n}\r\n.superTitle {\r\n  content: 'key features';\r\n  text-transform: uppercase;\r\n  color: #73849A;\r\n  letter-spacing: .16em;\r\n  font-size: 12px;\r\n  font-family: Roboto Mono;\r\n  font-weight: bold;\r\n  position: absolute;\r\n  top: -42px;\r\n  width: 100%;\r\n}\r\n\r\n#get-started .content {\r\n  position: relative;\r\n}\r\n\r\n// Main Section Styles\r\n@include stack('.main1', $sectionPad);\r\n@include box('.main1', $pY: $sectionPad);\r\n@include box('.main2', $pY: $sectionPad);\r\n@include box('.main3', $pY: $sectionPad);\r\n// #endregion\r\n\r\n\r\n// ------------------------- CUSTOM PAGE STYLES -----------------------------\r\n\r\n@include stack('', 40px);\r\n\r\n\r\n@include box('ionic-sub-header .btn-primary', $pY:5px, $pX: 10px);\r\nionic-sub-header {\r\n  .breadcrumbs {\r\n    font-size: 16px;\r\n  }\r\n  @media (max-width: $screen-sm-max) {\r\n    .breadcrumbs {\r\n      font-size: 12px;\r\n    }\r\n  }\r\n\r\n  #hdrNativeLogo:hover {\r\n    path.text {\r\n      // color: black;\r\n      fill: black;\r\n    }\r\n    path.tb-rect {\r\n      fill: #E4B035;\r\n    }\r\n    path.lr-rect {\r\n      fill: #FFD352;\r\n    }\r\n  }\r\n  svg {\r\n    height: 24px;\r\n  }\r\n  .btn-primary {\r\n    display:flex;\r\n    align-items:center;\r\n    text-align: center;\r\n    justify-content: center;\r\n    text-transform: none;\r\n    // padding-top: 6px !important;\r\n    padding-right: 10px !important;\r\n    font-size: 13px;\r\n    height: 28px;\r\n    font-weight: 600;\r\n\r\n    &:hover {\r\n      color:white !important;\r\n    }\r\n  }\r\n}\r\n\r\n#hero {\r\n  min-height: $heroHeight;\r\n  position: relative;\r\n  overflow:hidden;\r\n}\r\n\r\n#heroBack {\r\n  position: absolute;\r\n  left: calc((1800px - 100%) / 2 * -1);\r\n  height: 100%;\r\n  z-index: -1;\r\n}\r\n\r\n@include box('#heroText', $mW: 448px, $mTop: 134px, $mBot: 134px);\r\n@include box('#heroText a.btn-primary', $pY:16px, $pX: 20px, $mRight: 20px, $mBot: 20px);\r\n@include box('#heroText a.btn-secondary', $pY:16px, $pX: 20px);\r\n#heroText {\r\n  animation-name: fadeInUp;\r\n  animation-duration: 2s;\r\n  \r\n  @include box(h1, $color: $colorTitle);\r\n  h1 {\r\n  }\r\n\r\n  @include box(p, $color: $colorSubtext1);\r\n  p {\r\n    font-size: 22px;\r\n  }\r\n}\r\n\r\n@include box('#nativeTitle', $mW: 576px);\r\n@include box('#nativeTitle p', $mBot: 96.11px, $color: $colorSubtext3);\r\n@include switcher('#native', 3, $container-sm - $grid-gutter-width, 44px);\r\n#native {\r\n  article {\r\n    flex: 1 1 312px;\r\n  }\r\n  @include box('svg', $mBot: 32px);\r\n  svg {\r\n    height: 64px;\r\n  }\r\n}\r\n\r\n@include box('#pluginsText', $mW: 300px);\r\n@include box('#pluginsText p', $color: $colorSubtext3);\r\n@include stack('#pluginsText', 40px);\r\n@include box('#pluginsImg', $mW: 420px);\r\n@include box('#plugins svg + svg', $mLeft: 28px);\r\n#plugins {\r\n  justify-content: space-between;\r\n}\r\n#pluginsText {\r\n  flex-grow: 1;\r\n  max-width: 448px;\r\n  justify-content: center;\r\n  svg {\r\n    width: 48px;\r\n  }\r\n}\r\n#pluginsImg {\r\n  flex-grow:1;\r\n  max-width: 566px;\r\n  img {\r\n    object-fit: contain;\r\n  }\r\n}\r\n\r\n@include box('#securityText', $color: $colorTitle, $mW: 300px);\r\n@include box('#securityText p', $color: $colorSubtext3);\r\n@include stack('#securityText', 40px);\r\n@include box('#securityImg', $mW: 420px);\r\n#security {\r\n  justify-content: space-between;\r\n}\r\n#securityText {\r\n  order: 2;\r\n  flex-grow: 1;\r\n  max-width: 408px;\r\n  justify-content: center;\r\n}\r\n#securityImg {\r\n  flex-grow:1;\r\n  order: 1;\r\n  max-width: 570px;\r\n  img {\r\n    object-fit: contain;\r\n    margin-right: 50px;\r\n  }\r\n}\r\n\r\n@include stack('#supGuidance', 40px);\r\n@include box('#support', $mRight: 40px);\r\n@include box ('#supGuidance h2', $color: $colorTitle);\r\n@include box ('#supGuidance p', $color: $colorSubtext3);\r\n#supGuidance {\r\n  margin-bottom: 200px;\r\n  width: 100%;\r\n  justify-content: space-between;\r\n  svg {\r\n    height: 176px;\r\n    width: 280px;\r\n  }\r\n  article {\r\n    flex: 1 1 0;\r\n    max-width: 448px;\r\n  }\r\n}\r\n\r\n@include box('.panel', 32px, 32px, $colorSubtext3, null, 324px);\r\n@include box('.panel > h3', $color: $colorTitleInvert);\r\n@include box('.panel > p', $color: $colorSubtextInvert2);\r\n.panel {\r\n  border-radius: 8px;\r\n  height: 100%;\r\n  @include animationForward($time: 300ms) {\r\n    0% {\r\n      background: lighten(#445B78, 4%);\r\n      box-shadow: 0 7px 14px rgba(0, 0, 0, 0.12), 0 3px 6px rgba(0, 0, 0, 0.08);\r\n      transform: translateY(-2px);\r\n    }\r\n    100% {\r\n\r\n    }\r\n  }  \r\n  &:hover, &:focus {\r\n    @include animationForward($time: 300ms) {\r\n      0% {\r\n      }\r\n      100% {\r\n        background: lighten(#445B78, 4%);\r\n        box-shadow: 0 7px 14px rgba(0, 0, 0, 0.12), 0 3px 6px rgba(0, 0, 0, 0.08);\r\n        transform: translateY(-2px);\r\n      }\r\n    }\r\n  }\r\n}\r\n\r\n@include box('#secFeatures', $back: $colorBackInvert);\r\n@include box('#secFeaturesText', $mBot: 96px, $mW: 640px);\r\n@include box('#secFeaturesText h2', $color: $colorTitleInvert);\r\n@include box('#secFeaturesText p', $color: $colorSubtextInvert);\r\n@include switcher('#secFeatures', 3, $container-sm - $grid-gutter-width, 26px);\r\n#secFeatures {  \r\n\r\n  @include box('svg', $mBot: 32px);\r\n  svg {\r\n    width: 80px;\r\n  }\r\n\r\n}\r\n\r\n@include switcher('#keyFeatures', 2, ($container-sm - $grid-gutter-width), 87px);\r\n@include box('#keyFeatures', $back: $colorBack2);\r\n@include box('#keyFeaturesTitle p', $color: $colorSubtext4);\r\n@include box('#keyFeaturesContent h3', $color: $colorTitle2);\r\n@include box('#keyFeaturesContent p', $color: $colorSubtext3);\r\n\r\n#keyFeatures {  \r\n  @include box('svg', $mRight: 40px);\r\n  svg {\r\n    position: relative;\r\n    width: 56px;\r\n    z-index:2;\r\n  }\r\n}\r\n@include stack('#keyFeaturesContent', 92px);\r\n#keyFeaturesContent {\r\n  contain: content;\r\n  overflow: hidden;\r\n\r\n  @include box('article', $back: $colorBack2);\r\n  article:not(:last-child) {\r\n    padding-bottom: 100px;\r\n  }\r\n  @for $i from 1 through 5 {\r\n    article:nth-child(#{$i}) {\r\n      position: relative;\r\n      z-index: #{$i};\r\n    }\r\n  }\r\n  article:not(:last-child):after {\r\n    contain: content;\r\n    writing-mode: vertical-lr;\r\n    content: '............................................................';\r\n    position: absolute;\r\n    left: 20px;\r\n    height: 100%;\r\n    z-index: 1;\r\n    letter-spacing: 4px;\r\n    color: #B2BECD;\r\n    font-size: 20px;\r\n  }\r\n}\r\n\r\n\r\n// Sticky doesn't work without this.\r\n@media (min-width: $screen-sm) {\r\n  main {\r\n    overflow: visible;\r\n  }\r\n}\r\n\r\n.tag-along {  \r\n  position:relative;\r\n  #keyFeaturesTitle {\r\n    position:sticky;\r\n    top:225px;\r\n    height: 100%;\r\n  }\r\n}\r\n\r\n@include box('#get-started', $pY: $sectionPad);\r\n#get-started {\r\n\r\n}\r\n\r\n// -------------------------- MEDIA QUERIES -------------------------------\r\n\r\n@media (max-width: $screen-sm) {\r\n  :root {\r\n    --sectionPad: 100px;\r\n  }  \r\n  #native {\r\n    svg {\r\n      margin-left:auto;\r\n      margin-right:auto;\r\n    }\r\n  }\r\n  #plugins {\r\n\r\n  }\r\n  #pluginsImg {\r\n    // display: none;\r\n    position: relative;\r\n    right: 0;\r\n    // max-width: 80%;\r\n    margin-left: auto;\r\n    margin-top: 50px;\r\n  }\r\n  #securityImg {\r\n    // display:none;\r\n    order: 2;\r\n    position: relative;\r\n    position: static;\r\n    margin-top: 100px;\r\n    margin-left: auto;\r\n    // max-width: 80%;\r\n    img {\r\n      margin-right: 0px;\r\n    }\r\n  }\r\n  #support {\r\n    margin-bottom: 100px;\r\n  }\r\n\r\n}\r\n\r\n.whitepaperCta {\r\n  background: linear-gradient(90deg, #F1FAFF 0%, #B8E3FF 44.999%, #F2F8FD 45%);\r\n  margin-bottom: 80px;\r\n\r\n  .container {\r\n    position: relative;\r\n    padding-top: 76px;\r\n    padding-bottom: 76px;\r\n  }\r\n\r\n  img {\r\n    position: absolute;\r\n    bottom: 0;\r\n    left: calc(45% - 520px);\r\n\r\n    @media (max-width: $screen-md-max) {\r\n      left: calc(45% - 460px);\r\n    }\r\n  }\r\n\r\n  &__content {\r\n    padding-left: calc(45% + 60px);\r\n  }\r\n\r\n  h3 {\r\n    margin-bottom: 2rem;\r\n    font-size: 28px;\r\n    line-height: 34px;\r\n    letter-spacing: -0.02em;\r\n    font-weight: 600;\r\n\r\n    span {\r\n      color: rgba(97,110,126,.7);\r\n    }\r\n  }\r\n\r\n  .btn {\r\n    text-transform: uppercase;\r\n    font-weight: 600;\r\n    letter-spacing: .1em;\r\n  }\r\n\r\n  @media (max-width: $screen-md) {\r\n    background: linear-gradient(180deg, #F1FAFF 0%, #B8E3FF 44.999%, #F2F8FD 45%);\r\n    padding-top: 0;\r\n\r\n    &__content {\r\n      padding-left: 0;\r\n      padding-top: 260px;\r\n      max-width: 500px;\r\n      margin: 0 auto;\r\n    }\r\n\r\n    img {\r\n      bottom: 55%;\r\n      left: calc(50% - 260px);\r\n    }\r\n  }\r\n}"
  },
  {
    "path": "assets/scss/pages/press/_release.scss",
    "content": "body.press-release {\n  main.container {\n    font-family: $font-family-serif;\n    max-width: 730px;\n\n    h1 {\n      position: relative;\n      padding-top: 101px;\n      margin-top: 67px;\n      font-size: 32px;\n      font-weight: 700;\n      letter-spacing: -0.02em;\n      line-height: 44px;\n\n      &::before {\n        background: url(\"/img/press/press-thumbnail.png\") no-repeat 0 0;\n        background-size: 72px;\n        width: 72px;\n        height: 72px;\n        content: \"\";\n        position: absolute;\n        top: 0;\n      }\n\n      + h3 {\n        margin-top: 10px;\n        font-size: 19px;\n        font-weight: 600;\n        line-height: 1.55em;\n        letter-spacing: 0.003em;\n        margin-bottom: 25px;\n      }\n    }\n\n    h3 + h4 {\n      font-size: 12px;\n      color: #929cac;\n      letter-spacing: 0.02em;\n      margin-bottom: 58px;\n    }\n\n    h2,\n    h3 {\n      font-weight: 600;\n    }\n\n    p {\n      font-size: 20px;\n      line-height: 2em;\n      margin-bottom: 40px;\n    }\n\n    ul {\n      margin-bottom: 40px;\n    }\n\n    li {\n      font-size: 20px;\n      line-height: 2em;\n    }\n  }\n}\n"
  },
  {
    "path": "assets/scss/pages/press/index.scss",
    "content": "@import \"../../vars\";\n@import \"bootstrap-sass/assets/stylesheets/bootstrap/variables\";\n@import \"../../mixins\";\n\n#page-press {\n  .navbar ~ .banner {\n    background: #182949 no-repeat center top;\n    background-image: url(\"/img/press/press-cta-bg.jpg\"),\n      linear-gradient(to right, #1f3253 0%, #39485d 100%);\n    background-size: cover, 100%;\n\n    hgroup {\n      text-align: left;\n      max-width: 100%;\n      padding-top: 16px;\n      padding-left: 99px;\n      padding-bottom: 98px;\n      position: relative;\n\n      &::before {\n        background: url(\"/img/press/press-hero-icon.png\") 0 0 no-repeat;\n        background-size: 64px;\n        width: 64px;\n        height: 64px;\n        content: \"\";\n        position: absolute;\n        left: 14px;\n        top: 36px;\n      }\n\n      @media (max-width: $screen-xs-max) {\n        margin-top: 100px;\n      }\n    }\n\n    h1 {\n      font-weight: 700;\n      font-size: 33px;\n      margin-bottom: 4px;\n      letter-spacing: -0.037em;\n    }\n\n    a {\n      color: white;\n      text-decoration: none;\n    }\n\n    p {\n      font-size: 17px;\n      letter-spacing: -0.005em;\n    }\n  }\n\n  .cards {\n    margin-top: -41px;\n    list-style: none;\n    display: flex;\n    justify-content: space-between;\n    padding-right: 0;\n    padding-left: 0;\n\n    @media (max-width: $screen-xs-max) {\n      flex-wrap: wrap;\n      justify-content: center;\n    }\n\n    li {\n      @include box();\n\n      padding: 82px 24px 38px;\n      flex: 0 1 320px;\n      text-align: center;\n      position: relative;\n      margin-bottom: 32px;\n\n      &::before {\n        background: url(\"/img/press/brand-asset-icons.png\") 0 0 no-repeat;\n        background-size: 114px;\n        width: 114px;\n        height: 114px;\n        position: absolute;\n        content: \"\";\n        top: -31px;\n        left: calc(50% - 57px);\n      }\n\n      &.primary-logo::before {\n        background-position: 0 0;\n      }\n      &.light-logo::before {\n        background-position: 0 -114px;\n      }\n      &.all::before {\n        background-position: 0 -224px;\n      }\n\n      @media (max-width: $screen-md-max) {\n        flex-basis: 300px;\n      }\n\n      @media (max-width: $screen-sm-max) {\n        flex-basis: 230px;\n      }\n\n      @media (max-width: $screen-xs-max) {\n        flex-basis: 90%;\n      }\n    }\n\n    h3 {\n      font-size: 16px;\n      text-transform: uppercase;\n      font-weight: 700;\n      margin-bottom: 12px;\n      letter-spacing: 0.1em;\n      color: #272a2f;\n    }\n\n    p {\n      font-size: 15px;\n    }\n\n    .btn {\n      padding: 12px 16px 9px;\n      font-size: 14px;\n      margin-top: 16px;\n    }\n  }\n\n  .tabs {\n    margin-top: 47px;\n    padding-top: 8px;\n    margin-bottom: 50px;\n    position: relative;\n    display: flex;\n\n    .tab-menu {\n      flex: 0 1 237px;\n      min-width: 140px;\n    }\n\n    .nav-stacked {\n      h4 {\n        font-size: 14px;\n        text-transform: uppercase;\n        letter-spacing: 0.08em;\n        font-weight: 700;\n        margin-top: 13px;\n      }\n\n      a {\n        font-weight: 500;\n        color: $blackish;\n        font-size: 15px;\n        padding: 0 0 0 8px;\n        margin: 19px 0 19px -10px;\n        border-left: 2px solid transparent;\n        background: transparent !important;\n        transition: color 0.2s, border-color 0.2s;\n      }\n\n      li.active a,\n      li a:hover,\n      li a:active {\n        color: $blue;\n        border-color: rgba($blue, 0.6);\n      }\n    }\n\n    .tab-content {\n      flex: 1 0 300px;\n      padding-left: 87px;\n\n      ul {\n        padding-left: 0;\n      }\n\n      li {\n        list-style: none;\n\n        a {\n          position: relative;\n          display: block;\n          padding-left: 102px;\n          margin-top: 12px;\n          margin-bottom: 43px;\n\n          &::before,\n          &::after {\n            background: url(\"/img/press/press-thumbnail.png\") 0 0 no-repeat;\n            background-size: 72px;\n            width: 72px;\n            height: 72px;\n            content: \"\";\n            position: absolute;\n            left: 0;\n            top: 0;\n            transition: 0.3s opacity;\n          }\n\n          &::after {\n            opacity: 0;\n            background-position: 0 -72px;\n          }\n\n          &:hover {\n            &::before {\n              // opacity: 0;\n            }\n\n            &::after {\n              opacity: 1;\n            }\n\n            strong {\n              color: $blue;\n            }\n          }\n\n          strong {\n            color: #272a2f;\n            font-size: 16px;\n            font-weight: 700;\n            transition: 0.3s color;\n          }\n\n          time {\n            color: #727a87;\n            display: block;\n            line-height: 24px;\n            letter-spacing: -0.03em;\n            font-weight: 500;\n            transition: 0.3s color;\n          }\n\n          span {\n            color: #727a87;\n            display: block;\n            font-size: 15px;\n            font-weight: 400;\n            line-height: 28px;\n            letter-spacing: -0.004em;\n            transition: 0.3s color;\n          }\n        }\n      }\n    }\n\n    @media (max-width: $screen-xs-max) {\n      flex-direction: column;\n\n      .tab-menu {\n        flex-basis: 32px;\n\n        .nav-stacked {\n          display: flex;\n          justify-content: space-around;\n\n          h4 {\n            margin-top: 25px;\n          }\n\n          li.active a,\n          li a:hover,\n          li a:active {\n            border-right-color: transparent;\n            border-bottom: 2px solid $blue;\n          }\n        }\n      }\n\n      .tab-content {\n        padding-left: 32px;\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "assets/scss/pages/pricing/__feature-lists.scss",
    "content": ".feature-lists {\n  display: flex;\n  justify-content: center;\n  flex-wrap: wrap;\n\n  &::before,\n  &::after {\n    display: none;\n  }\n\n  &__product {\n    flex: 0 1 380px;\n    display: flex;\n    flex-direction: column;\n  }\n\n  &__heading {\n    text-align: left;\n    margin-bottom: 48px;\n    padding-right: 15px;\n\n    h2 {\n      font-size: 26px;\n      line-height: 36px;\n      letter-spacing: -0.03em;\n      color: #1A232F;\n    }\n\n    p {\n      font-size: 20px;\n      line-height: 24px;\n      letter-spacing: -0.03em;\n      color: #616E7E;\n\n      span {\n        color: lighten(#616E7E, 40)\n      }\n    }\n  }\n\n  &__features  {\n    list-style: none;\n    padding: 0 0 24px;\n    \n    li {\n      font-size: 14px;\n      line-height: 23px;\n      letter-spacing: -0.02em;\n      color: #414D5C;\n      position: relative;\n      padding: 18px 0 18px 22px;\n      border-bottom: 1px solid #E9EDF3;\n\n      &:last-child {\n        border-bottom: none;\n      }\n\n      &::before {\n        content: url('data:image/svg+xml,\n          <svg viewBox=\"0 0 14 11\" xmlns=\"http://www.w3.org/2000/svg\">\n            <path d=\"M4.45889 8.66035L1.16667 5.25367L0 6.4029L4.45889 11L14 1.1492L12.8333 0L4.45889 8.66035Z\"/>\n          </svg>');\n        position: absolute;\n        left: 0;\n        top: calc(50% - 11px);\n        height: 11px;\n        width: 14px;\n        opacity: .5;\n        fill: #73849A;\n      }\n\n      a {\n        margin-left: 3px;\n        text-decoration: underline;\n      }\n    }\n  }\n\n  &__cta {\n    align-self: flex-start;\n    margin-top: auto;\n  }\n}\n"
  },
  {
    "path": "assets/scss/pages/pricing/__modal.scss",
    "content": ".modal {\n  hgroup {\n    padding-top: 18px;\n    padding-bottom: 32px;\n  }\n\n  h3 {\n    font-size: 29px;\n    font-weight: 600;\n    color: #171a20;\n    margin: 18px 0 8px;\n    letter-spacing: -0.03em;\n  }\n\n  p {\n    font-size: 18px;\n    line-height: 28px;\n    color: #4c576c;\n    max-width: 400px;\n    margin: 0 auto;\n  }\n\n  form {\n    max-width: 100%;\n    padding: 0 15px 15px;\n  }\n  \n  .hs_submit {\n    text-align: center;\n    font-weight: 600;\n  }\n}"
  },
  {
    "path": "assets/scss/pages/pricing/__plan-cards.scss",
    "content": "@import '../../vars';\n\n .plans {\n  display: grid;\n  margin-left: -58px;\n  margin-top: 55px;\n  font-family: $font-family-inter;\n  gap: 16px;\n  grid-template-columns: 272px 272px 272px 272px;\n  grid-template-rows: auto;\n  grid-template-areas: \n    \"hobby launch growth scale\";\n\n  @media (max-width: $screen-md-max) {\n    gap: 8px;\n    margin-left: -20px;\n    grid-template-columns: 239px 239px 239px 239px;\n  }\n\n  @media (max-width: $screen-sm-max) {\n    margin-left: 0;\n    grid-template-columns: 1fr 1fr;\n    grid-template-areas: \n      \"hobby launch\"\n      \"growth scale\";\n    .plan__card--featured {\n      margin-top: 32px;\n    }\n  }\n\n  @media (max-width: 500px) {\n    grid-template-columns: 1fr;\n    grid-template-areas: \n      \"hobby\"\n      \"launch\"\n      \"growth\"\n      \"scale\";\n  }\n}\n\n#plan-hobby {\n  grid-area: hobby;\n}\n\n#plan-launch {\n  grid-area: launch;\n}\n\n#plan-launch {\n  grid-area: growth;\n}\n\n#plan-launch {\n  grid-area: scale;\n}\n\n#plan-launch {\n  grid-area: enterprise;\n}\n\n.plan__card {\n  border-radius: 12px;\n  background: white;\n  padding: 30px 26px 26px;\n  position: relative;\n  flex: 1;\n  display: flex;\n  flex-direction: column;\n  justify-content: flex-start;\n  border: 1px solid #DEE3EA;\n  box-shadow: 0px 2px 4px rgba(0, 16, 46, 0.04);\n\n  &--dark {\n    background: #1A325C;\n    color: #E9EDF3;\n    border-color: #03112C;\n\n    &.plan__card h3,\n    .plan__price strong {\n      color: #fff;\n    }\n\n    .plan__description {\n      color: $c-indigo-300;\n    }\n\n    .plan {\n      &__price__term {\n        color: #A9B6CE;\n      }\n\n      &__feature {\n        &__divider {\n          border-color: #415B89;\n\n          + .plan__feature__header {\n            background: #1A325C;\n            color: #A9B6CE;\n          }\n        }\n\n        &__list li::before {\n          background-image: url('/img/pricing/ico-check-light.svg');\n        }\n\n        &__highlight {\n          background: #324E7E;\n        }\n      }\n    }\n  }\n\n  &--featured {\n    border-top-left-radius: 0;\n    border-top-right-radius: 0;\n    border: 2px solid #3880FF;\n  }\n}\n\n.plan {\n  &__card h3 {\n    color: #020814;\n    margin-top: 0;\n    margin-bottom: 13px;\n\n    font-weight: 600;\n    font-size: 12px;\n    line-height: 120%;\n    letter-spacing: 0.14em;\n    text-transform: uppercase;\n  }\n\n  &__price {\n    font-weight: 500;\n    font-size: 20px;\n    line-height: 24px;\n    letter-spacing: -0.04em;\n    color: #1A232F;\n    padding-bottom: 13px;\n\n    &__term {\n      font-size: 14px;\n      line-height: 17px;\n      letter-spacing: -0.02em;\n      color: #414D5C;\n      display: block;\n      margin-top: -2px;\n\n      &--short {\n        display: inline;\n      }\n    }\n\n    sup {\n      font-weight: 500;\n      font-size: 24px;\n      line-height: 29px;\n      margin-right: 2px;\n    }\n\n    strong {\n      font-weight: bold;\n      font-size: 44px;\n      line-height: 48px;\n      letter-spacing: -.03em;\n    }\n  }\n\n  &__description {\n    font-size: 15px;\n    line-height: 150%;\n    letter-spacing: -0.01em;\n    color: $c-indigo-800;\n  }\n\n  &__cta.btn {\n    align-self: flex-start;\n    font-size: 16px;\n    line-height: 19px;\n    padding: 16px;\n    letter-spacing: 0.1em;\n    text-transform: uppercase;\n    border: 1px solid #3880FF;\n    box-shadow: 0px 2px 4px rgba(0, 16, 46, 0.04);\n    margin-top: auto;\n    align-self: stretch;\n\n    &.light {\n      border-color: #EEF6FE;\n      color: #3880FF;\n\n      &:hover {\n        box-shadow: 0px 2px 4px rgba(0, 16, 46, 0.08);\n      }\n    }\n\n    &.navy {\n      border-color: #4A679B;\n      color: #D1EBFF;\n      background: #324E7E;\n\n      &:hover {\n        box-shadow: 0px 2px 4px rgba(0, 16, 46, 0.2);\n      }\n    }\n\n    &:hover {\n      box-shadow: 0px 2px 4px rgba(0, 16, 46, 0.12);\n    }\n  }\n\n  &__feature {\n    &__divider {\n      border-bottom: 1px solid #DEE3EA;\n      margin: 30px -26px 0;\n\n      + .plan__feature__header {\n        margin: -9px -5px 0;\n        background: white;\n        align-self: flex-start;\n        padding: 6px;\n      }\n    }\n    \n    &__header {\n      font-size: 10px;\n      line-height: 4px;\n      letter-spacing: 0.08em;\n      text-transform: uppercase;\n      color: #616E7E;\n    }\n    \n    &__list {\n      padding-left: 0;\n      margin: 9px 0 26px;\n      \n      li {\n        position: relative;\n        margin: 14px 0 0 -8px;\n        list-style: none;\n        padding: 4px 0 5px 30px;\n        letter-spacing: -0.02em;\n        \n        &::before {\n          position: absolute;\n          top: 9px;\n          left: 6px;\n          background: url('/img/pricing/ico-check-dark.svg');\n          height: 11px;\n          width: 11px;\n          content: '';\n        }\n        \n        strong {\n          letter-spacing: -.04em;\n          font-weight: 600;\n        }\n      }\n    }\n    \n    &__highlight {\n      background: #F6F8FB;\n      border-radius: 16px;\n      margin-right: -8px;\n    }\n    \n    &__asterisk {\n      font-size: 12px;\n      line-height: 14px;\n      letter-spacing: -0.01em;\n      color: #92A1B3;\n      margin: 20px auto 0;\n      text-align: center;\n      width: 100%;\n      display: block;\n    }\n  }\n  \n  &__note {\n    position: absolute;\n    top: -34px;\n    left: -2px;\n    right: -2px;\n    background: #3880FF;\n    border-radius: 12px 12px 0 0;\n    color: white;\n    text-align: center;\n    font-weight: 600;\n    font-size: 12px;\n    line-height: 16px;\n    letter-spacing: -0.02em;\n    padding: 9px 1em;\n  }\n}\n\n\n.plans {\n  .plan__price__monthly,\n  .plan__price__annually {\n    transition: .3s all ease-out;\n    display: inline-block;\n  }\n\n  .plan__price__monthly {\n    position: absolute;\n  }\n\n  &.monthly-active {\n    .plan__price__annually {\n      transform: translateX(-20px);\n      opacity: 0;\n    }\n  }\n\n  &.annually-active {\n    .plan__price__monthly {\n      transform: translateX(20px);\n      opacity: 0;\n    }\n  }\n}"
  },
  {
    "path": "assets/scss/pages/pricing/__table.scss",
    "content": "\ntable,\n.table {\n  margin-bottom: 0;\n  min-width: 800px;\n}\n\nthead th,\ntbody td {\n  width: 20%;\n}\n\nthead {\n  th, td {\n    background: #fff;\n    border-bottom: 1px solid rgba(#e8ebf1, 0.6);\n    vertical-align: bottom;\n    padding: 32px 44px 30px;\n  }\n\n  td {\n    padding-bottom: 6px;\n    padding-left: 0;\n  }\n\n  h3,\n  h4 {\n    color: #020814;\n  }\n\n  h3 {\n    font-size: 32px;\n    line-height: 44px;\n    letter-spacing: -0.01em;\n  }\n\n  h4 {\n    font-size: 24px;\n    line-height: 33px;\n    letter-spacing: -0.03em;\n    margin-bottom: 0;\n  }\n\n  .price {\n    font-weight: 600;\n    font-size: 12px;\n    line-height: 20px;\n    color: #1A232F;\n\n    strong {\n      font-size: 16px;\n      font-weight: 600;\n    }\n  }\n\n  .btn,\n  .btn.micro {\n    padding: 6px 10px 6px;\n    text-transform: none;\n    letter-spacing: -0.01em;\n    font-size: 12px;\n    font-weight: 600;\n    margin-top: 7px;\n    background: #EEF6FE;\n    border-color: #EEF6FE;\n\n    &:hover {\n      background: darken(#EEF6FE, 3%);\n      border-color: darken(#EEF6FE, 3%);\n    }\n  }\n\n  .btn--primary,\n  .btn--primary.micro {\n    background: #3880FF;\n    color: #fff;\n\n    &:hover {\n      background: lighten(#3880FF, 3%);\n    }\n\n    &:hover:active,\n    &:active {\n      background: darken(#3880FF, 5%);\n    }\n  }\n\n  .btn--dark,\n  .btn--dark.micro {\n    background: #213049;\n    color: #CDDFFF;\n    border: 0;\n\n    &:hover {\n      background: lighten(#213049, 10%);\n    }\n\n    &:hover:active,\n    &:active {\n      background: darken(#213049, 10%);\n    }\n  }\n\n  .plan-wrap {\n    display: inline-block;\n    text-align: left;\n    border: 0;\n  }\n}\n\ntbody {\n  th,\n  td {\n    padding: 12px 15px;\n\n    &:first-child {\n      padding-left: 0;\n    }\n\n    &:last-child {\n      // padding-right: 0;\n    }\n  }\n\n  tr:first-child  td {\n    padding-top: 40px;\n  }\n\n  .pill {\n    margin-top: -2px;\n    margin-left: 2px;\n    background: none;\n\n    &--blue {\n      margin-left: 8px;\n    }\n  }\n\n  th {\n    font-weight: 400;\n    vertical-align: middle;\n    border: 0;\n    color: #5B708B;\n    font-size: 16px;\n    line-height: 22px;\n    letter-spacing: -0.02em;\n    white-space: nowrap;\n    font-family: $font-family-inter;\n\n    small {\n      font-size: 14px;\n      line-height: 20px;\n      margin-left: 16px;\n    }\n\n    strong {\n      font-size: 18px;\n      line-height: 25px;\n      letter-spacing: -0.02em;\n      font-weight: 600;\n      display: block;\n      color: #1A232F;\n      margin-top: 40px;\n\n      a {\n        transition: border 0.3s;\n        display: inline-block;\n        color: #171a20;\n        border-bottom: 1px solid rgba(#171a20, 0.2);\n        line-height: 1;\n\n        &:hover {\n          border-bottom: 1px solid rgba(#171a20, 0.7);\n        }\n      }\n    }\n\n    span {\n      font-size: 12px;\n      font-weight: 500;\n      color: #999;\n    }\n  }\n\n  td,\n  th {\n    background: #fff;\n  }\n\n  td {\n    vertical-align: middle;\n    text-align: center;\n    font-weight: 500;\n    border: 0;\n    font-size: 16px;\n    line-height: 22px;\n    color: #1A232F;\n    letter-spacing: -0.02em;\n    font-family: $font-family-inter;\n\n    small {\n      font-weight: 400;\n    }\n  }\n\n  .check:before {\n    font-family: 'Ionicons';\n    content: \"\\f2bc\";\n    color: #1A232F;\n    font-size: 16px;\n    line-height: 1em;\n  }\n}\n\ntfoot {\n  .btn.sm {\n    padding: 11px 13px 11px;\n    font-size: 14px;\n    line-height: 19px;\n    border-radius: 8px;\n    letter-spacing: 0.08em;\n    border: 1px solid #3880FF;\n    box-shadow: 0px 2px 4px rgba(0, 16, 46, 0.04);\n\n    &.light {\n      border-color: #EEF6FE;\n      background: #EEF6FE;\n\n      &:hover {\n        border-color: darken(#EEF6FE, 3%);\n        background: darken(#EEF6FE, 3%);\n      }\n    }\n\n    &.dark {\n      border-color: #3E5A8D;\n      background: #2B4675;\n      color: #D1EBFF;\n\n      &:hover {\n        border-color: lighten(#3E5A8D, 3%);\n        background: lighten(#2B4675, 3%);\n      }\n    }\n  }\n\n  td {\n    text-align: center;\n    padding-top: 36px;\n    padding-bottom: 36px;\n  }\n}\n\n.pinned {\n  table {\n    padding-top: 140px;\n    display: block;\n  }\n\n  thead {\n    position: fixed;\n    top: 0;\n    left: 0;\n    width: 100%;\n    z-index: 1000;\n\n    tr {\n      display: flex;\n      width: 100%;\n      max-width: 1110px;\n      margin: 0 auto;\n      padding: 0 15px;\n      position: relative;\n    }\n\n    td {\n      flex: 1 0 auto;\n      display: flex;\n      flex-direction: column;\n      justify-content: flex-end;\n    }\n  }\n\n  tbody {\n    display: block;\n\n    tr {\n      display: flex;\n      width: 100%;\n    }\n\n    th {\n      flex: 1 0 auto;\n    }\n  }\n}\n\n.pinned-at-point {\n  thead {\n    position: absolute;\n\n    tr {\n      padding: 0;\n    }\n  }\n}\n\n@media (max-width: $screen-sm-max) {\n  table,\n  .table {\n    min-width: 100%;\n  }\n\n  thead th,\n  tbody td {\n    width: auto;\n    padding-right: 0;\n    padding-left: 0;\n  }\n\n  thead {\n    td {\n      padding-right: 48px;\n    }\n  }\n\n  tbody th {\n    width: 128px;\n    white-space: normal;\n  }\n}\n\n@media (max-width: $screen-xs-max) {\n  tbody th:first-child {\n    width: 166px;\n    word-wrap: break-word;\n    padding-left: 4px;\n  }\n}\n\n@media (max-width: 690px) {\n  .btn {\n    margin-right: 2px;\n    margin-left: 2px;\n  }\n\n  .table-wrap {\n    position: relative;\n    width:100%;\n    z-index: 1;\n    margin: auto;\n    overflow: auto;\n    height: 90vh;\n  }\n\n  thead {\n    th,\n    td {\n      padding-top: 24px;\n      padding-bottom: 18px;\n      position: -webkit-sticky;\n      position: sticky;\n      top: 0;\n    }\n\n    th {\n      background: #fbfbfb;\n    }\n  }\n\n  table {\n    width: 100%;\n    min-width: 690px;\n    margin: auto;\n    border-collapse: separate;\n    border-spacing: 0;\n  }\n\n  thead {\n    td,\n    th {\n      height: 118px;\n      padding-left: 16px;\n      padding-right: 16px;\n    }\n  }\n\n  thead th,\n  tbody td {\n    width: 128px;\n  }\n\n  tbody td {\n    border: 1px solid #f7f7f7;\n    border-left: none;\n    border-top: none;\n  }\n\n  thead td,\n  tbody th,\n  tfoot th {\n    width: 166px;\n    padding-right: 16px;\n    word-wrap: break-word;\n    border-right: 1px solid rgba(232, 235, 241, 0.6);\n    position: -webkit-sticky;\n    position: sticky;\n    left: 0;\n    z-index: 2;\n  }\n\n  thead td:first-child,\n  tfoot th:first-child {\n    z-index: 5;\n    width: 166px;\n    background: white;\n  }\n\n  tbody tr.combined {\n    th, td {\n      padding-top: 22px;\n      padding-bottom: 14px;\n    }\n  }\n\n  tbody tr:last-child th {\n    height: 110px;\n  }\n  \n  tfoot,\n  tfoot th,\n  tfoot td {\n    position: -webkit-sticky;\n    position: sticky;\n    bottom: 0;\n    z-index:4;\n    padding-top: 4px;\n    padding-bottom: 4px;\n    background: #fbfbfb;\n  }\n}\n\n"
  },
  {
    "path": "assets/scss/pages/pricing/__vars.scss",
    "content": "$c-white: white;\n$c-carbon-400: #414D5C;\n$c-carbon-600: #27323F;\n$c-carbon-700: #1A232F;\n$c-carbon-900: #010610;\n$c-black-700: #010610;\n$c-aqua: #E7F4FF;\n$c-blue-800: #4D8DFF;\n$c-indigo-50: #FBFBFD;\n$c-indigo-200: #E9EDF3;\n$c-indigo-300: #DEE3EA;\n$c-indigo-600: #92A1B3;\n$c-indigo-700: #73849A;\n$c-indigo-800: #5B708B;\n$c-indigo-850: #345073;\n$c-indigo-1000: #2D4665;\n$c-indigo-1100: #182E4A;\n$c-indigo-1200: #001A3A;\n\n$expander-padding: 32px;"
  },
  {
    "path": "assets/scss/pages/pricing/compare.scss",
    "content": "@import \"../../vars\";\n@import \"./__vars\";\n@import \"bootstrap-sass/assets/stylesheets/bootstrap/variables\";\n@import \"./__modal\";\n@import \"./__plan-cards\";\n@import \"./__table\";\n\nbody {\n  padding-top: 0;\n}\n\n.navbar {\n  position: relative;\n}\n\nmain {\n  padding: 30px 0;\n}\n\n.cta {\n  hgroup {\n    padding-top: 54px;\n    max-width: 718px;\n    margin-left: 0;\n    padding-bottom: 21px;\n\n    h1 {\n      font-size: 56px;\n      line-height: 110%;\n      letter-spacing: -0.04em;\n      color: $c-carbon-900;\n      margin-bottom: 8px;\n      letter-spacing: -0.04em;\n    }\n\n    p {\n      font-size: 22px;\n      line-height: 160%;\n      letter-spacing: -0.02em;\n      color: rgba($c-carbon-900, 0.9);\n      font-family: $font-family-inter;\n    }\n  }\n}\n\nmain {\n  padding-bottom: 170px;\n\n  @media (max-width: $screen-xs-max) {\n    padding-bottom: 90px;\n  }\n\n  .toggle {\n    display: flex;\n    align-items: center;\n    justify-content: center;\n    background: #f4f6f9;\n    border-radius: 18px;\n    cursor: default;\n    margin: 0 auto 54px;\n    width: 204px;\n    font-weight: 500;\n    padding: 3px 2px;\n    font-family: $font-family-inter;\n\n    span {\n      transition: color 0.3s, background 0.3s;\n      border-radius: 30px;\n      padding: 5px 13px;\n      text-align: center;\n      font-size: 13px;\n      line-height: 16px;\n      letter-spacing: -0.01em;\n      color: #5b708b;\n      transition: 0.2s color, 0.2s background;\n    }\n\n    span:hover {\n      cursor: pointer;\n      color: #7398d8;\n    }\n\n    .active,\n    .active:hover {\n      font-weight: 600;\n      border-radius: 18px;\n      color: #1a232f;\n      background: #ffffff;\n      box-shadow: 0px 2px 3px rgba(0, 16, 46, 0.15);\n    }\n  }\n}\n\n.prefer-open-source {\n  border: 1px solid #dee3ea;\n  border-radius: 16px;\n  font-size: 12px;\n  line-height: 15px;\n  color: #5b708b;\n  padding: 9px 12px 6px;\n  margin: 66px auto 24px;\n  max-width: 386px;\n  display: flex;\n  align-items: center;\n  justify-content: space-between;\n  transition: 0.2 box-shadow;\n\n  span {\n    font-weight: 600;\n    letter-spacing: -0.01em;\n    color: #4d8dff;\n    margin-left: 8px;\n    white-space: nowrap;\n  }\n\n  svg {\n    vertical-align: -1px;\n  }\n\n  &:hover {\n    box-shadow: 0px 2px 3px rgba(0, 16, 46, 0.05);\n  }\n}\n\n.anchor-cta {\n  margin-top: 52px;\n  font-weight: 500;\n  font-size: 17px;\n  line-height: 27px;\n  text-align: center;\n  letter-spacing: -0.02em;\n  color: #639cff;\n  display: block;\n\n  svg {\n    vertical-align: -1px;\n  }\n\n  &:hover {\n    color: $blue;\n  }\n}\n\n.logos {\n  text-align: center;\n  margin-top: 190px;\n  background: #0b111c;\n  padding-top: 105px;\n  padding-bottom: 124px;\n  color: white;\n\n  h3 {\n    display: block;\n    margin-bottom: 69px;\n    font-size: 31px;\n  }\n\n  .icons {\n    display: flex;\n    justify-content: space-between;\n    align-items: center;\n    flex-wrap: wrap;\n\n    @media (max-width: 560px) {\n      justify-content: space-around;\n\n      > div {\n        margin: 0 20px 20px;\n      }\n    }\n  }\n\n  .icons > div {\n    background-image: url(\"/img/pricing/logos-light.png\");\n    background-size: 100%;\n    background-repeat: no-repeat;\n    flex: 0 0 66px;\n    height: 48px;\n  }\n\n  .logo--national {\n    background-position: 0 0;\n  }\n  .logo--verizon {\n    background-position: 0 -1 * (48px * 1);\n  }\n  .logo--comcast {\n    background-position: 0 -1 * (48px * 2);\n  }\n  .logo--panera {\n    background-position: 0 -1 * (48px * 3);\n  }\n  .logo--mastercard {\n    background-position: 0 -1 * (48px * 4);\n  }\n  .logo--usaa {\n    background-position: 0 -1 * (48px * 5);\n  }\n  .logo--amtrak {\n    background-position: 0 -1 * (48px * 6);\n  }\n  .logo--ge {\n    background-position: 0 -1 * (48px * 7);\n  }\n}\n\n.box {\n  margin-top: 41px;\n  background-color: rgb(255, 255, 255);\n  overflow: hidden;\n}\n\n.table-wrap {\n  position: relative;\n  overflow-x: auto;\n  tippy .tip.right {\n    top: -60px;\n  }\n}\n\n.features {\n  li {\n    font-family: $font-family-inter;\n    font-size: 16px;\n    letter-spacing: -0.01em;\n    color: #414d5c;\n    padding: 10px 0;\n    display: flex;\n\n    &:before {\n      content: \"\";\n      display: inline-block;\n      background-image: url(\"/img/checkmark-light-gray.svg\");\n      background-repeat: no-repeat;\n      background-size: 100%;\n      width: 24px;\n      height: 24px;\n      margin-right: 12px;\n      margin-bottom: -6px;\n    }\n\n    @media (max-width: $screen-sm-max) {\n      &::before {\n        position: relative;\n        top: 2px;\n        width: 18px;\n        height: 18px;\n        flex: 0 0 18px;\n      }\n    }\n  }\n}\n\nmain hgroup:not(.feature-lists__heading) {\n  text-align: center;\n\n  h4 {\n    text-transform: uppercase;\n    font-weight: 700;\n    font-size: 16px;\n    letter-spacing: 0.1em;\n    margin-top: 32px;\n    color: #999;\n  }\n\n  h3 {\n    font-weight: 600;\n    max-width: 975px;\n    margin: 32px auto 16px;\n    font-size: 24px;\n    line-height: 1.8em;\n  }\n}\n\n.btn.sm {\n  text-transform: uppercase;\n}\n\n.comparison {\n  padding-top: 180px;\n\n  h2 {\n    font-size: 48px;\n    font-weight: 600;\n    letter-spacing: -0.04em;\n  }\n\n  @media (max-width: $screen-xs-max) {\n    padding-top: 100px;\n  }\n\n  @media (max-width: 830px) {\n    padding-left: 0;\n    padding-right: 0;\n  }\n}\n\n.offwhite-bg {\n  background: rgba(#f7f9fc, 0.7);\n}\n\n.also {\n  border-left: 0;\n  border-right: 0;\n  padding: 0 0 164px;\n\n  h3 {\n    font-weight: 600;\n    letter-spacing: -0.04em;\n    font-size: 48px;\n    line-height: 53px;\n    margin: 196px auto 62px;\n    text-align: center;\n  }\n\n  h4 {\n    font-size: 18px;\n    color: #020814;\n    font-weight: 600;\n    line-height: 25px;\n    letter-spacing: -0.02em;\n    margin-bottom: 13px;\n  }\n\n  p {\n    font-size: 15px;\n    line-height: 27px;\n    letter-spacing: -0.02em;\n    color: #5b708b;\n  }\n\n  ul {\n    padding: 0;\n    list-style-type: none;\n    display: flex;\n    flex-wrap: wrap;\n    justify-content: space-around;\n    margin: 17px -17px -17px;\n  }\n\n  li {\n    flex: 1 0 25%;\n    min-width: 230px;\n    padding: 0 17px 17px;\n    position: relative;\n\n    &::before {\n      background: url(\"/img/pricing/sprite-features.svg\");\n      background-size: 100%;\n      width: 48px;\n      height: 48px;\n      content: \"\";\n      display: block;\n      margin-bottom: 25px;\n    }\n\n    &:nth-child(2)::before {\n      background-position: 0 -48px;\n    }\n    &:nth-child(3)::before {\n      background-position: 0 -96px;\n    }\n    &:nth-child(4)::before {\n      background-position: 0 -144px;\n    }\n  }\n}\n\n.faq {\n  padding-top: 180px;\n  padding-bottom: 170px;\n\n  h3,\n  h4 {\n    color: #020814;\n    font-weight: 600;\n  }\n\n  h4,\n  p {\n    line-height: 29px;\n    letter-spacing: -0.02em;\n  }\n\n  h3 {\n    font-size: 48px;\n    line-height: 53px;\n    text-align: center;\n    letter-spacing: -0.04em;\n  }\n\n  h4 {\n    font-size: 24px;\n    margin-top: 54px;\n    margin-bottom: 17px;\n  }\n\n  p {\n    font-size: 16px;\n    color: #5b708b;\n    margin-bottom: 26px;\n    letter-spacing: -0.02em;\n    font-family: $font-family-inter;\n  }\n\n  &__cols {\n    display: flex;\n    justify-content: space-between;\n    flex-wrap: wrap;\n    margin: 0 -32px;\n  }\n\n  &__col {\n    padding: 0;\n    flex: 1 0 364px;\n    padding: 0 32px;\n    list-style: none;\n  }\n}\n\n.form-wrapper {\n  &.offwhite-bg {\n    padding-top: 160px;\n  }\n\n  .container {\n    max-width: 756px;\n  }\n\n  hgroup {\n    margin-bottom: 20px;\n\n    h2 {\n      font-weight: 600;\n      line-height: 1.2;\n      font-size: 28px;\n      letter-spacing: -0.01em;\n      color: #000000;\n      margin-bottom: 0;\n    }\n\n    p {\n      margin-top: 6px;\n      line-height: 28px;\n      font-size: 22px;\n      text-align: center;\n      letter-spacing: -0.01em;\n      font-weight: 400;\n      color: #5b708b;\n    }\n  }\n\n  @media (max-width: $screen-xs-max) {\n    &.offwhite-bg {\n      padding-top: 80px;\n    }\n  }\n}\n"
  },
  {
    "path": "assets/scss/pages/pricing/enterprise.scss",
    "content": "@import '../../vars';\n@import '../../mixins';\n@import 'bootstrap-sass/assets/stylesheets/bootstrap/variables';\n@import './_vars';\n@import './__modal';\n\n.hubspot-override .hbspt-form .hs-form-required {\n  display: none;\n}\n\n.transparent .cta {\n  padding-top: 20px;\n  margin-top: 0;\n  background: $c-indigo-1200;\n\n  hgroup {\n    max-width: 650px;\n    padding-bottom: 120px;\n  }\n\n  h1 {\n    font-size: 56px;\n    line-height: 110%;\n    letter-spacing: -0.04em;\n    color: $c-white;\n    margin-bottom: 5px;\n  }\n\n  p {\n    color: rgba($c-indigo-300, .9);\n    font-size: 22px;\n    line-height: 160%;\n    letter-spacing: -0.02em;\n  }\n}\n\nmain {\n  overflow: visible;\n}\n\n#hear-from-you {\n  background: linear-gradient(180deg, #FFFFFF 0%, #FAFBFD 100%);\n\n  .container {\n    &::before,\n    &::after {\n      display: none;\n    }\n  }\n\n  .expander {\n    display: flex;\n    overflow: visible;\n    margin-left: -1 * $expander-padding;\n    align-items: flex-start;\n  }\n\n  h2 {\n    font-weight: 600;\n    font-size: 40px;\n    line-height: 44px;\n    letter-spacing: -0.04em;\n    color: $c-indigo-1200;\n    margin-bottom: 7px;\n  }\n\n  h3 {\n    font-weight: 600;\n    font-size: 22px;\n    line-height: 160%;\n    letter-spacing: -0.02em;\n    color: $c-carbon-900;\n    margin-bottom: 0px;\n  }\n\n  h4 {\n    font-weight: 600;\n    font-size: 12px;\n    line-height: 14px;\n    letter-spacing: 0.14em;\n    text-transform: uppercase;\n    color: $c-carbon-600;\n  }\n\n  p {\n    font-size: 20px;\n    line-height: 160%;\n    letter-spacing: -0.03em;\n    color: $c-indigo-850;\n  }\n\n  ul {\n    padding: 0;\n  }\n\n  .features {\n    margin: 31px 0 67px;\n\n    li {\n      font-size: 16px;\n      line-height: 150%;\n      letter-spacing: -0.01em;\n      color: $c-indigo-850;\n      padding-left: 36px;\n      margin: 24px 0;\n      position: relative;\n      list-style: none;\n  \n      &::before {\n        background: url('/img/pricing/ico-check.svg');\n        background-size: 100%;\n        height: 20px;\n        width: 20px;\n        position: absolute;\n        left: 0;\n        top: 0;\n        content: '';\n      }\n    }\n  }\n\n  .companies {\n    display: flex;\n    flex-wrap: wrap;\n    justify-content: space-between;\n    align-items: center;\n\n    li {\n      list-style: none;\n      padding: 6px 0;\n      flex: 0 1 75px;\n      text-align: center;\n\n      @media (max-width: $screen-md-max) {\n        padding: 6px 12px;\n        flex: 1;\n      }\n    }\n  }\n\n  .form {\n    @include box;\n    background: linear-gradient(0deg, #FFFFFF, #FFFFFF), #486FFF;\n    box-shadow: \n      0px 8px 16px rgba(2, 8, 20, 0.08), \n      0px 4px 8px rgba(2, 8, 20, 0.12);\n    border-radius: 8px;\n    margin-top: -48px;\n    margin-bottom: -48px;\n    padding: 20px 40px 38px;\n    position: relative;\n    z-index: 1;\n    flex: 0 0 540px;\n\n    &__aside {\n      padding: 44px 0 16px 68px;\n\n      @media (max-width: $screen-xs-max) {\n        padding-left: 30px;\n      }\n    }\n\n    @media (max-width: $screen-sm-max) {\n      flex: 0 0 400px;\n    }\n\n    @media (max-width: $screen-xs-max) {\n      display: none;\n    }\n\n    .hs-richtext p {\n      font-size: 10px;\n      line-height: 12px;\n      letter-spacing: -0.01em;\n      color: $c-indigo-700;\n    }\n  }\n\n  @media (max-width: $screen-xs-max) {\n    margin-left: 0;\n  }\n}\n\n#tag-along {\n  position: relative;\n  display: flex;\n  justify-content: space-between;\n  align-items: flex-start;\n  margin-top: 169px;\n  margin-bottom: 128px;\n\n  &::before,\n  &::after {\n    display: none;\n  }\n\n  hgroup {\n    position: sticky;\n    top: 100px;\n    width: 440px;\n    \n\n    h4 {\n      font-size: 12px;\n      line-height: 100%;\n      letter-spacing: 0.16em;\n      text-transform: uppercase;\n      color: $c-indigo-700;\n      margin-bottom: 32px;\n      font-family: $font-family-monospace;\n    }\n\n    h2 {\n      font-weight: 600;\n      font-size: 48px;\n      line-height: 110%;\n      letter-spacing: -0.04em;\n      color: $c-carbon-900;\n      margin-bottom: 20px;\n    }\n\n    p {\n      font-size: 20px;\n      line-height: 160%;\n      letter-spacing: -0.03em;\n      color: $c-indigo-800;\n      margin-bottom: 13px;\n    }\n\n    @media (max-width: $screen-xs-max) {\n      width: 100%;\n      margin-bottom: 64px;\n      position: static;\n    }\n  }\n\n  > ul {\n    padding: 0;\n    position: relative;\n    max-width: 455px;\n    margin-top: 53px;\n\n    &::before {\n      background-image: linear-gradient(#78B8F8 20%, rgba(120, 184, 248, 0) 0%);\n      background-position: right;\n      background-size: 2px 10px;\n      background-repeat: repeat-y;\n      position: absolute;\n      top: 0;\n      bottom: 314px;\n      left: 23px;\n      width: 2px;\n      content: '';\n    }\n  }\n\n  li {\n    list-style: none;\n    position: relative;\n    padding-left: 103px;\n    margin-bottom: 62px;\n    padding-top: 8px;\n\n    svg {\n      position: absolute;\n      top: 0;\n      left: 0;\n    }\n\n    h3 {\n      font-weight: 600;\n      font-size: 20px;\n      line-height: 150%;\n      letter-spacing: -0.01em;\n      color: $c-carbon-700;\n      margin-top: 0;\n      margin-bottom: 0px;\n    }\n\n    p {\n      font-size: 16px;\n      line-height: 150%;\n      letter-spacing: -0.01em;\n      color: $c-carbon-400;\n      margin-bottom: 14px;\n    }\n\n    ul {\n      padding: 0;\n    }\n\n    li {\n      padding-left: 30px;\n      position: relative;\n      list-style: none;\n      font-size: 15px;\n      line-height: 150%;\n      letter-spacing: -0.01em;\n      color: $c-indigo-800;\n      margin: 7px 0;\n\n      &::before {\n        background: url('/img/pricing/ico-check-2.svg');\n        background-size: 100%;\n        height: 20px;\n        width: 20px;\n        position: absolute;\n        left: 0;\n        top: 10px;\n        content: '';\n      }\n    }\n  }\n\n  @media (max-width: $screen-xs-max) {\n    flex-direction: column;\n    margin-bottom: 0;\n  }\n}\n\n#quote {\n  background: $c-indigo-50;\n  padding-top: 124px;\n  padding-bottom: 100px;\n  overflow: hidden;\n\n  hgroup {\n    text-align: center;\n    max-width: 518px;\n    margin: 0 auto 74px;\n\n    h4 {\n      font-weight: bold;\n      font-size: 12px;\n      line-height: 100%;\n      letter-spacing: 0.16em;\n      text-transform: uppercase;\n      color: $c-indigo-700;\n      font-family: $font-family-monospace;\n      margin-bottom: 32px;\n    }\n\n    h2 {\n      font-weight: 600;\n      font-size: 48px;\n      line-height: 110%;\n      letter-spacing: -0.04em;\n      color: $c-carbon-900;\n      margin-bottom: 30px;\n    }\n  }\n\n  quoteblock {\n    background: #2774D2;\n    border-radius: 8px;\n    width: 672px;\n    padding: 64px 64px 90px;\n    display: block;\n    position: relative;\n\n    p {\n      font-weight: 500;\n      font-size: 22px;\n      line-height: 150%;\n      letter-spacing: -0.01em;\n      color: $c-white;\n      margin: 55px 0 40px;\n      position: relative;\n      max-width: 384px;\n\n      &::before {\n        content: '“';\n        color: rgba($c-white, .6);\n        mix-blend-mode: soft-light;\n        font-size: 64px;\n        position: absolute;\n        top: 4px;\n        left: -16px;\n      }\n    }\n\n    footer {\n      border-top: none;\n      font-weight: 600;\n      font-size: 18px;\n      line-height: 150%;\n      letter-spacing: -0.01em;\n      color: $c-white;\n      padding: 0;\n      margin: 0;\n\n      cite {\n        opacity: .5;\n        margin-left: 14px;\n        font-style: normal;\n      }\n    }\n\n    aside {\n      position: absolute;\n      right: -375px;\n      top: 59px;\n\n      img {\n        width: 591px;\n      }\n    }\n\n    @media (max-width: $screen-xs-max) {\n      width: 100%;\n      max-width: 500px;\n      margin: 0 auto;\n\n      aside {\n        position: static;\n\n        img {\n          width: 100%;\n          max-width: 544px;\n        }\n      }\n    }\n  }\n\n  .logos {\n    margin: 64px -20px;\n    display: flex;\n    flex-wrap: wrap;\n    justify-content: space-around;\n    padding: 0;\n    align-items: center;\n\n    li {\n      padding: 20px;\n      list-style: none;\n    }\n\n    @media (max-width: $screen-xs-max) {\n      justify-content: space-around;\n    }\n  }\n}\n\n#get-started {\n  padding-top: 170px;\n  padding-bottom: 128px;\n\n  hgroup {\n    text-align: center;\n  }\n\n  h4 {\n    font-family: $font-family-monospace;\n    font-style: normal;\n    font-weight: bold;\n    font-size: 12px;\n    line-height: 100%;\n    letter-spacing: 0.16em;\n    text-transform: uppercase;\n    color: $c-indigo-700;\n    margin-bottom: 30px;\n  }\n\n  h2 {\n    font-weight: 600;\n    font-size: 48px;\n    line-height: 110%;\n    letter-spacing: -0.04em;\n    color: $c-carbon-900;\n  }\n\n  .hubspot-override {\n    margin: 32px auto 0 auto;\n    max-width: 700px;\n  }\n}"
  },
  {
    "path": "assets/scss/pages/pricing/index.scss",
    "content": "@import '../../vars';\n@import 'bootstrap-sass/assets/stylesheets/bootstrap/variables';\n@import './_vars';\n@import './__modal';\n\n.cta.cta--transparent {\n    background: #3E6CFF;\n    color: $c-white;\n    padding-top: 20px;\n    margin-top: 0;\n    position: relative;\n    z-index: 1;\n\n  hgroup {\n    max-width: 790px;\n    padding-bottom: 35px;\n\n    h1 {\n      font-size: 56px;\n      line-height: 62px;\n      letter-spacing: -0.04em;\n      margin-bottom: 4px;\n    }\n\n    p {\n      font-size: 22px;\n      line-height: 35px;\n      letter-spacing: -0.02em;\n      color: rgba($c-aqua, 0.9);\n    }\n  }\n\n  aside {\n    border: 1px solid rgba($c-aqua, .3);\n    border-radius: 8px;\n    max-width: 533px;\n    padding: 13px $expander-padding 17px $expander-padding;\n    margin-left: -1 * $expander-padding;\n    margin-right: -1 * $expander-padding;\n    margin-bottom: 187px;\n    display: block;\n\n    @media (max-width: $screen-sm-max) {\n      margin-left: 0;\n      margin-right: 0;\n    }\n\n    h3 {\n      font-weight: 600;\n      font-size: 22px;\n      line-height: 35px;\n      letter-spacing: -0.02em;\n      margin-bottom: 0px;\n    }\n\n    p {\n      font-size: 16px;\n      line-height: 26px;\n      letter-spacing: -0.01em;\n      color: $c-aqua;\n\n      a {\n        margin-left: 8px;\n        color: $c-white;\n        font-weight: 600;\n        position: relative;\n        border-bottom: 2px solid rgba($c-white, .3);\n\n        &::after {\n          background-image: url('/img/pricing/arrow-forward-sharp.svg');\n          background-size: 100%;\n          content: '';\n          height: 10px;\n          width: 12px;\n          top: 4px;\n          right: -16px;\n          position: absolute;\n          transition: .2s transform ease;\n          display: inline-block;\n\n          @media (max-width: $screen-sm-max) {\n            position: static;\n            margin-left: 8px;\n          }\n        }\n\n        &:hover::after {\n          transform: translateX(3px);\n        }\n      }\n    }\n  }\n}\n\nmain {\n  margin-top: -160px;\n  position: relative;\n  background: linear-gradient(180deg, #FFFFFF 0%, #FAFBFD 100%);\n\n  section:first-child {\n    position: relative;\n    z-index: 1;\n\n    h3 {\n      color: $c-white;\n      font-size: 22px;\n      line-height: 35px;\n      letter-spacing: -0.02em;\n      color: $c-white;\n      margin-bottom: 12px;\n    }\n  }\n}\n\n$card-expander-gap: 10px;\n$expander-padding-with-gap: $expander-padding + $card-expander-gap;\n.cards {\n  padding: 0;\n  margin-left: -1 * $expander-padding-with-gap;\n  margin-right: -1 * $expander-padding-with-gap;\n  display: flex;\n  flex-wrap: wrap;\n  position: relative;\n  z-index: 1;\n\n  @media (max-width: $screen-sm-max) {\n    flex-direction: column;\n    margin-left: 0;\n    margin-right: 0;\n  }\n}\n\n\n.card {\n  flex: 1 0 200px;\n  margin-bottom: 12px;\n  padding: 28px $expander-padding-with-gap 109px;\n  position: relative;\n  list-style: none;\n  transition: .1s transform ease-out;\n\n  &::before {\n    position: absolute;\n    background: #FFFFFF;\n    box-shadow: \n      0px 8px 16px rgba(2, 8, 20, 0.08), \n      0px 4px 8px rgba(2, 8, 20, 0.12);\n    border-radius: 8px;\n    content: '';\n    top: 0;\n    bottom: 0;\n    right: $card-expander-gap;\n    left: $card-expander-gap;\n    z-index: -1;\n    transition: .1s box-shadow ease-out;\n  }\n\n  h2 {\n    color: $c-black-700;\n    font-size: 28px;\n    line-height: 34px;\n    letter-spacing: -0.02em;\n    margin-bottom: 15px;\n  }\n\n  p, \n  li {\n    color: $c-indigo-1000;\n    font-size: 16px;\n    line-height: 26px;\n    letter-spacing: -0.01em;\n    font-weight: 500;\n  }\n\n  ul {\n    display: flex;\n    flex-wrap: wrap;\n    padding: 16px 0;\n    width: calc(100% + 38px);\n  }\n\n  li {\n    padding-left: 22px;\n    padding-right: 8px;\n    font-size: 14px;\n    flex: 1 0 180px;\n    margin: 10px 0;\n    position: relative;\n    list-style: none;\n\n    &::before {\n      content: '';\n      background: url('/img/pricing/ico-check-dark-2020.svg');\n      background-size: 100%;\n      height: 10px;\n      width: 10px;\n      position: absolute;\n      left: 0;\n      top: 8px;\n    }\n  }\n\n  .call-to-action {\n    color: $c-blue-800;\n    font-size: 16px;\n    font-weight: 700;\n    line-height: 1em;\n    letter-spacing: 0.08em;\n    text-transform: uppercase;\n    padding: 30px $expander-padding;\n    position: absolute;\n    bottom: 0;\n    left: $card-expander-gap;\n    right: $card-expander-gap;\n    background: #F9FBFE;\n    border-radius: 0px 0px 8px 8px;\n    \n    svg {\n      float: right;\n      position: relative;\n      transition: .3s transform ease-out;\n    }\n  }\n\n  &.dark {\n    &::before {\n      background: $c-indigo-1200;\n      box-shadow: \n        0px 8px 16px rgba(2, 8, 20, 0.08),\n        0px 4px 8px rgba(2, 8, 20, 0.12);\n    }\n\n    h2 {\n      color: $c-white;\n    }\n\n    p,\n    li {\n      color: $c-indigo-200;\n    }\n\n    li::before {\n      background-image: url('/img/pricing/ico-check-light-2020.svg');\n    }\n\n    .call-to-action {\n      color: $c-white;\n      background: $c-indigo-1100;\n\n      path {\n        stroke: $c-white;\n      }\n    }\n  }\n\n\n  &:hover {\n    transform: translateY(-2px);\n\n    .call-to-action svg {\n      transform: translateX(4px);\n    }\n\n    &::before {\n      box-shadow: \n        0px 10px 24px rgba(2, 8, 20, 0.12), \n        0px 6px 12px rgba(2, 8, 20, 0.2);\n    }\n  }\n}\n\n#loved-by {\n  margin-top: 74px;\n  margin-bottom: 136px;\n\n  h3 {\n    max-width: 300px;\n    font-size: 20px;\n    font-weight: 600;\n    line-height: 130%;\n    letter-spacing: -0.01em;\n    color: $c-carbon-600;\n    margin-bottom: 38px;\n    font-family: $font-family-inter;\n  }\n\n  ul {\n    padding: 0;\n    display: flex;\n    flex-wrap: wrap;\n    justify-content: space-between;\n    list-style: none;\n    align-items: center;\n  }\n}"
  },
  {
    "path": "assets/scss/pages/pro/_contact.scss",
    "content": "#page-products-contact{\n\n    .pricing-survey{\n        width:600px;\n        margin:40px auto 40px auto;\n    }\n    \n    .cta{\n        text-align:center;\n    }\n\n    .button-container{\n        margin-top:25px;\n        text-align:right;\n    }\n\n}"
  },
  {
    "path": "assets/scss/pages/pro/_deploy.scss",
    "content": "#page-products-deploy {\n  .top {\n    margin-top: -138px;\n    padding-top: 170px;\n    background: white;\n    text-align: left;\n    padding-bottom: 522px;\n    background: white url('/img/pro/deploy/deploy-hero-flat-img.png') 50% 100% no-repeat;\n    background-size: 1108px;\n\n    @media (max-width: $screen-xs-max)  {\n      background-size: 780px;\n      padding-bottom: 360px\n    }\n\n    .container {\n      display: flex;\n      justify-content: space-between;\n      @media (max-width: $screen-md-max)  {\n        flex-direction: column;\n      }\n    }\n    .container:before,\n    .container:after {\n      content: '';\n      display: none;\n    }\n\n    hgroup {\n      padding-top: 99px;\n      max-width: 100%;\n      position: relative;\n      max-width: 555px;\n\n      &::before {\n        background: url('/img/pro/deploy/deploy-hero-icon.png') 0 0 no-repeat;\n        background-size: 80px;\n        height: 80px;\n        width: 80px;\n        position: absolute;\n        top: 0;\n        left: 0;\n        content: '';\n      }\n\n      h1 {\n        letter-spacing: -.03em;\n        font-weight: 700;\n        font-size: 48px;\n        max-width: 420px;\n      }\n\n      p {\n        font-size: 20px;\n        display: inline-block;\n        margin-top: 12px;\n      }\n    }\n\n    .btns {\n      margin-top: 150px;\n\n      .btn {\n        font-size: 16px;\n        font-weight: 700;\n\n        &.purple {\n          background: #5657fb;\n          margin-right: 9px;\n          padding: 12px 19px 10px;\n\n        }\n\n        &.white  {\n          color: #5657fb;\n          padding: 12px 19px 10px;\n          margin-right: 3px;\n        }\n      }\n\n\n\n      @media (max-width: $screen-md-max)  {\n        margin-top: 22px;\n        margin-bottom: 32px;\n      }\n    }\n\n    @media (max-width: $screen-xs-max)  {\n      hgroup:before {\n        left: 50%;\n        transform: translateX(-40px);\n      }\n      hgroup,\n      .btns {\n        text-align: center;\n      }\n      hgroup,\n      hgroup h1 {\n        margin-left: auto;\n        margin-right: auto;\n      }\n    }\n  }\n\n  section.skip {\n    background: #f6f8fc;\n\n    .container {\n      position: relative;\n      padding-bottom: 38px;\n    }\n\n    hgroup {\n      padding-top: 72px;\n      width: calc(50% - 77px);\n      padding-bottom: 50px;\n\n      @media (max-width: $screen-md-max)  {\n        width: 100%;\n        text-align: center;\n      }\n    }\n\n    h2 {\n      line-height: 41px;\n      margin-bottom: 22px;\n    }\n\n    p {\n      font-size: 16px;\n      letter-spacing: -0.02em;\n\n      strong {\n        color: #363a40;\n      }\n    }\n\n    .items {\n      padding: 0;\n      width: calc(50% - 50px);\n\n      @media (max-width: $screen-xs-max)  {\n        display: block;\n        text-align: center;\n        width: 100%;\n      }\n\n      p {\n        font-size: 16px;\n        font-weight: 600;\n        letter-spacing: -.026em;\n        line-height: 1.8em;\n        margin-bottom: 30px;\n        color: #5e6777;\n      }\n    }\n\n    li {\n      flex: 0 1 224px;\n      padding-right: 6px;\n\n      @media (max-width: $screen-md-max)  {\n        flex-basis: 321px;\n        z-index: 1\n      }\n\n      &::before {\n        background-image: url('/img/pro/deploy/feature-icons-sm.png');\n        background-size: 48px;\n      }\n\n      &.live::before { background-position: 0 0; }\n      &.automatic::before { background-position: 0 -48px; }\n      &.split::before { background-position: 0 -96px; }\n      &.compliant::before { background-position: 0 -144px; }\n    }\n\n    .graphics {\n      background: url('/img/pro/deploy/feature-img-skip.png') 0 0 no-repeat;\n      background-size: 724px;\n      width: 724px;\n      height: 739px;\n      position: absolute;\n      bottom: 0;\n      right: 0;\n      top: auto;\n      opacity: 0;\n      transition: .2s opacity;\n\n      @media (max-width: $screen-sm-max)  {\n        right: -160px;\n      }\n      @media (max-width: $screen-xs-max)  {\n        display: none;\n      }\n\n      &.active {\n        opacity: 1;\n      }\n    }\n  }\n  section {\n    &.live,\n    &.latest,\n    &.run {\n      h2 {\n        position: relative;\n\n        &::before {\n          background: url('/img/pro/deploy/feature-icons-lg.png') 0 0 no-repeat;\n          background-size: 64px;\n          height: 64px;\n          width: 64px;\n          position: absolute;\n          top: 0;\n          left: 0;\n          content: '';\n\n          @media (max-width: $screen-xs-max)  {\n            left: calc(50% - 32px);\n          }\n        }\n      }\n\n      @media (max-width: $screen-xs-max)  {\n        .graphics {\n          display: none;\n        }\n      }\n    }\n  }\n\n  section.live {\n    background: linear-gradient(to right, #5b4cfc 0%, #8e83ff 100%);\n    overflow: hidden;\n\n    hgroup {\n      padding-top: 127px;\n      padding-bottom: 107px;\n\n      @media (max-width: $screen-xs-max)  {\n        width: 100%;\n        text-align: center;\n      }\n    }\n\n    h2 {\n      padding-top: 83px;\n      margin-bottom: 20px;\n      font-size: 36px;\n      font-weight: 700;\n      letter-spacing: -0.03em;\n      line-height: 42px;\n\n      span {\n        color: white;\n      }\n    }\n\n    p {\n      font-size: 16px;\n      letter-spacing: -0.02em;\n      color: white;\n    }\n\n    .graphics {\n      position: absolute;\n      right: 0;\n      width: 50%;\n\n      .iphone,\n      .android {\n        position: absolute;\n        width: 330px;\n        height: 518px;\n        bottom: 0;\n        right: 0;\n\n        &::after {\n          background: no-repeat 0 0;\n          z-index: 1;\n          position: absolute;\n          top: 0;\n          right: 0;\n          width: 330px;\n          height: 518px;\n          content: '';\n        }\n\n        .screen {\n          background: no-repeat 0 0;\n          position: absolute;\n          bottom: 0;\n          animation: 10s screenPop-1 infinite;\n\n          &:nth-child(2) {\n            animation-name: screenPop-2;\n          }\n\n          &:nth-child(3) {\n            animation-name: screenPop-3;\n          }\n        }\n      }\n\n      .iphone {\n        right: 250px;\n        z-index: 1;\n\n        @media (max-width: $screen-sm-max)  {\n          right: 100px;\n        }\n\n        &::after {\n          background-image: url('/img/pro/deploy/feature-iphone-device.png');\n          background-size: 330px;\n        }\n\n        .screen {\n          background-image: url('/img/pro/deploy/feature-iphone-screen-1.png');\n          background-size: 266px;\n          width: 266px;\n          height: 396px;\n          right: 32px;\n\n          &:nth-child(2) {\n            background-image: url('/img/pro/deploy/feature-iphone-screen-2.png');\n            background-size: 266px;\n          }\n\n          &:nth-child(3) {\n            background-image: url('/img/pro/deploy/feature-iphone-screen-3.png');\n            background-size: 266px;\n          }\n        }\n      }\n\n      .android {\n        &::after {\n          right: 0;\n          background-image: url('/img/pro/deploy/feature-android-device.png');\n          background-size: 330px;\n        }\n\n        .screen {\n          background-image: url('/img/pro/deploy/feature-android-screen-1.png');\n          background-size: 280px;\n          width: 280px;\n          height: 462px;\n          right: 26px;\n          animation-delay: .25s;\n\n          &:nth-child(2) {\n            background-image: url('/img/pro/deploy/feature-android-screen-2.png');\n            background-size: 280px;\n            animation-delay: .25s;\n          }\n\n          &:nth-child(3) {\n            background-image: url('/img/pro/deploy/feature-android-screen-3.png');\n            background-size: 280px;\n            animation-delay: .25s;\n          }\n        }\n      }\n    }\n  }\n\n  section.latest {\n    hgroup {\n      width: calc(50% - 108px);\n      padding-top: 132px;\n      padding-right: 25px;\n      padding-bottom: 121px;\n\n      @media (max-width: $screen-sm-max)  {\n        width: 45%;\n      }\n\n      @media (max-width: $screen-xs-max)  {\n        width: 100%;\n        text-align: center;\n        padding-right: 0;\n      }\n    }\n\n    h2 {\n      padding-top: 87px;\n      font-size: 27px;\n      letter-spacing: -.024em;\n\n      margin-bottom: 20px;\n      font-size: 36px;\n      font-weight: 700;\n      letter-spacing: -0.03em;\n      line-height: 42px;\n\n      &::before {\n        background-position: 0 -64px;\n      }\n    }\n\n    p {\n      font-size: 16px;\n      letter-spacing: -0.02em;\n    }\n\n    .graphics {\n      background: url('/img/pro/deploy/feature-img-latest.png') 0 50% no-repeat;\n      background-size: 589px;\n      width: 589px;\n      // height: 378px;\n      position: absolute;\n      bottom: 0;\n      left: 0;\n      top: 0;\n      opacity: 0;\n      transition: .2s opacity;\n\n      @media (max-width: $screen-sm-max)  {\n        background-size: 100%;\n        width: 50%;\n      }\n\n      &.active {\n        opacity: 1;\n      }\n    }\n  }\n\n  section.run {\n    background: #f6f8fc;\n\n    hgroup {\n      padding-top: 126px;\n      padding-bottom: 108px;\n\n      @media (max-width: $screen-sm-max)  {\n        width: 45%;\n      }\n\n      @media (max-width: $screen-xs-max)  {\n        width: 100%;\n        text-align: center;\n      }\n    }\n\n    h2 {\n      padding-top: 83px;\n      margin-bottom: 20px;\n      font-size: 36px;\n      font-weight: 700;\n      letter-spacing: -0.03em;\n      line-height: 42px;\n\n      &::before {\n        background-position: 0 -128px;\n      }\n    }\n\n    p {\n      font-size: 16px;\n      letter-spacing: -0.02em;\n    }\n\n    .graphics {\n      background: url('/img/pro/deploy/feature-img-abtest.png') 50% 100% no-repeat;\n      background-size: 526px;\n      width: 526px;\n      height: 513px;\n      position: absolute;\n      bottom: 0;\n      right: 0;\n      top: auto;\n      opacity: 0;\n      transition: .2s opacity;\n\n      @media (max-width: $screen-sm-max)  {\n        background-size: 100%;\n        background-position: 100% 100%;\n        width: 50%;\n      }\n\n      &.active {\n        opacity: 1;\n      }\n    }\n  }\n\n  section.get-started {\n    background: #e7ecf6;\n\n    h2 {\n      color: #272a2f;\n    }\n\n    p {\n      color: #5e6777;\n    }\n\n    .btn {\n      padding: 12px 19px 10px;\n      font-size: 16px;\n      letter-spacing: -.02em;\n      font-weight: 700;\n\n      &.white {\n        color: #5244ff;\n      }\n\n      &.purple {\n        background: #5a4dfc;\n        margin-right: 2px;\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "assets/scss/pages/pro/_general.scss",
    "content": "// This is a collection of generics for the products pages\n.products-page {\n  font-family: $font-family-inter;\n  position: relative;\n\n  .top {\n    position: relative;\n\n    h1 {\n      letter-spacing: -0.03em;\n      font-weight: 700;\n      font-size: 48px;\n    }\n\n    p {\n      font-size: 20px;\n      font-weight: 600;\n      margin-top: 17px;\n      display: inline-block;\n      letter-spacing: -0.03em;\n      line-height: 1.5em;\n      color: #2f3744;\n    }\n\n    .graphics {\n      position: absolute;\n    }\n  }\n\n  .center {\n    hgroup {\n      padding-top: 100px;\n      text-align: center;\n      max-width: 748px;\n      margin: 0 auto 18px;\n\n      h2 {\n        font-size: 36px;\n        font-weight: 700;\n        letter-spacing: -0.03em;\n        color: #161a1f;\n      }\n\n      p {\n        font-size: 18px;\n        color: #5e6777;\n        margin-top: 29px;\n        letter-spacing: -0.03em;\n        line-height: 1.8em;\n        font-weight: 600;\n      }\n\n      p strong {\n        color: #272a2f;\n        font-weight: 700;\n      }\n    }\n  }\n\n  ul.items {\n    padding: 48px 14px;\n    display: flex;\n    justify-content: space-between;\n    flex-wrap: wrap;\n\n    li {\n      list-style: none;\n      padding-top: 67px;\n      position: relative;\n\n      &::before {\n        background: 0 0 no-repeat;\n        background-size: 100%;\n        height: 48px;\n        width: 48px;\n        content: \"\";\n        display: block;\n        position: absolute;\n        top: 0;\n      }\n\n      strong {\n        letter-spacing: -0.03em;\n        display: inline-block;\n        font-size: 17px;\n        text-transform: none;\n        letter-spacing: 0.001em;\n        margin-top: 4px;\n        margin-bottom: 10px;\n      }\n\n      p {\n        font-size: 16px;\n        font-weight: 600;\n        letter-spacing: -0.026em;\n        line-height: 1.8em;\n        margin-bottom: 30px;\n        color: #5e6777;\n      }\n\n      @media (max-width: $screen-xs-max) {\n        display: block;\n        flex-basis: 100%;\n        text-align: center;\n\n        &::before {\n          left: calc(50% - 24px);\n        }\n      }\n    }\n  }\n\n  section.left,\n  section.right,\n  section.both {\n    .container {\n      position: relative;\n    }\n\n    hgroup {\n      padding-top: 208px;\n      padding-bottom: 151px;\n      width: calc(50% - 147px);\n      position: relative;\n\n      @media (max-width: $screen-sm-max) {\n        width: calc(50% - 48px);\n      }\n\n      &::before {\n        background: 0 0 no-repeat;\n        background-size: 100%;\n        height: 64px;\n        width: 64px;\n        content: \"\";\n        position: absolute;\n        top: 126px;\n        display: block;\n      }\n\n      &::after {\n        content: \"\";\n        clear: both;\n        display: table;\n      }\n\n      h2 {\n        margin-bottom: 20px;\n        font-size: 36px;\n        font-weight: 700;\n        letter-spacing: -0.03em;\n        line-height: 42px;\n      }\n\n      p {\n        font-size: 16px;\n        font-weight: 600;\n        letter-spacing: -0.026em;\n        line-height: 1.8em;\n        margin-bottom: 30px;\n        color: #5e6777;\n\n        strong {\n          font-weight: 600;\n        }\n      }\n    }\n\n    .graphics {\n      background: 0 50% no-repeat;\n      background-size: 100%;\n      width: 470px;\n      position: absolute;\n      right: 0;\n      bottom: 0;\n      top: 0;\n      opacity: 0;\n\n      &.activateOnScroll {\n        filter: blur(10px);\n        transition: 0.4s opacity, 0.4s filter;\n\n        &.active {\n          opacity: 1;\n          filter: blur(0);\n        }\n      }\n\n      @media (max-width: $screen-sm-max) {\n        right: -20%;\n      }\n    }\n  }\n\n  section.right {\n    hgroup {\n      float: right;\n    }\n\n    .graphics {\n      right: auto;\n      left: 0;\n\n      @media (max-width: $screen-sm-max) {\n        left: -20%;\n      }\n    }\n  }\n\n  section.both {\n    .container {\n      display: flex;\n      clear: both;\n      justify-content: space-between;\n\n      &::before,\n      &::after {\n        display: none;\n      }\n    }\n  }\n\n  .get-started {\n    background: 0 0 no-repeat;\n    background-size: cover;\n\n    .container {\n      display: flex;\n      padding-top: 101px;\n      padding-bottom: 102px;\n      flex-wrap: wrap;\n      align-items: center;\n\n      &::before,\n      &::after {\n        display: none;\n      }\n\n      @media (max-width: $screen-sm-max) {\n        text-align: center;\n      }\n    }\n\n    hgroup,\n    .btns {\n      display: inline-block;\n    }\n\n    hgroup {\n      flex-grow: 1;\n    }\n\n    h2 {\n      color: white;\n      font-size: 28px;\n      letter-spacing: -0.03em;\n      margin-top: 30px;\n      margin-bottom: 5px;\n      font-weight: 600;\n    }\n\n    p {\n      font-size: 20px;\n      font-weight: 600;\n      letter-spacing: -0.02em;\n      color: #003e82;\n    }\n\n    .btns {\n      .btn {\n        padding: 12px 19px 10px;\n        font-size: 16px;\n        font-weight: 700;\n\n        &:last-child {\n          margin-right: -5px;\n        }\n\n        @media (max-width: $screen-xs-max) {\n          text-align: center;\n          display: block;\n          margin: 16px auto;\n        }\n      }\n      @media (max-width: $screen-sm-max) {\n        width: 100%;\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "assets/scss/pages/pro/_package.scss",
    "content": "#page-products-package {\n  #sub-header > .container {\n    z-index: 2;\n  }\n\n  .top {\n    clear: both;\n    position: relative;\n    top: -144px;\n    overflow: hidden;\n    padding-top: 178px;\n    background: #e7a2dd;\n    background: linear-gradient(to right, #c696f8 0%, #fca5a7 100%);\n\n    hgroup {\n      padding-top: 103px;\n      padding-bottom: 148px;\n      text-align: left;\n      position: relative;\n      z-index: 5;\n\n      &::before {\n        background: url('/img/pro/package/package-hero-icon.png') no-repeat 0 0;\n        background-size: 80px;\n        width: 80px;\n        height: 80px;\n        content: '';\n        position: absolute;\n        top: 0;\n        left: 15px;\n      }\n\n      h1,\n      p {\n        color: white;\n      }\n\n      h1 {\n        max-width: 350px;\n      }\n\n      p {\n        color: rgba(white, .9);\n        max-width: 475px;\n        letter-spacing: -.03em;\n        line-height: 1.5em;\n        font-size: 20px;\n\n        strong {\n          color: rgba(white, 1);\n        }\n      }\n\n      .btns {\n        margin-top: 32px;\n\n        .btn {\n          font-size: 16px;\n          font-weight: 700;\n\n          &.pink {\n            background: #e33766;\n            margin-right: 9px;\n            padding: 12px 19px 12px;\n          }\n\n          &.white  {\n            color: #e33766;\n            padding: 12px 19px 12px;\n          }\n        }\n      }\n    }\n\n    @media (max-width: $screen-xs-max)  {\n      hgroup:before {\n        left: 50%;\n        transform: translateX(-40px);\n      }\n      hgroup,\n      .btns {\n        text-align: center;\n      }\n      hgroup,\n      hgroup h1 {\n        margin-left: auto;\n        margin-right: auto;\n      }\n    }\n\n    .graphics {\n      position: absolute;\n      top: 0;\n      right: 0;\n      bottom: 0;\n      width: 50%;\n      z-index: 1;\n    }\n\n    .cloud {\n      opacity: 0;\n      position: absolute;\n      top: 200px;\n      left: -200px;\n      width: 346px;\n      height: 312px;\n      animation: 40s floatingCloud linear infinite;\n      z-index: 5;\n\n      &::before {\n        background: url('/img/pro/package/package-hero-cloud.png') no-repeat 0 0;\n        background-size: 346px;\n        top: 0;\n        bottom: 0;\n        right: 0;\n        left: 0;\n        content: '';\n        position: absolute;\n      }\n\n      .build {\n        background: url('/img/pro/package/package-hero-app-icon.png') no-repeat 0 0;\n        background-size: 87px;\n        width: 87px;\n        height: 116px;\n        content: '';\n        position: absolute;\n        top: 30px;\n        left: 20px;\n        animation: 10s rainDrop linear infinite;\n        z-index: 6;\n\n        &:nth-child(2) {\n          top: 166px;\n          left: 220px;\n          animation-delay: .8s;\n          animation-duration: 8s;\n        }\n\n        &:nth-child(3) {\n          top: 33px;\n          left: 130px;\n          animation-delay: 1.8s;\n          animation-duration: 9s;\n        }\n\n        &:nth-child(4) {\n          top: 50px;\n          left: 60px;\n          animation-delay: 2.8s;\n          animation-duration: 12s;\n        }\n      }\n\n      &:nth-child(2) {\n        top: 0;\n        left: 0;\n        transform: scale3d(.5,.5,1);\n        animation-name: floatingCloud-2;\n        animation-duration: 60s;\n        animation-delay: 10s;\n        z-index: 1;\n\n        .build {\n          z-index: 2;\n          animation-delay: 1s;\n\n          &:nth-child(2) {animation-delay: 2s;}\n          &:nth-child(3) {animation-delay: 3s;}\n          &:nth-child(4) {animation-delay: 4s;}\n        }\n      }\n\n      &:nth-child(3) {\n        top: 10px;\n        left: -150px;\n        animation-name: floatingCloud-3;\n        animation-duration: 50s;\n        animation-delay: 2s;\n        z-index: 3;\n\n        .build {\n          z-index: 4;\n          animation-delay: .1s;\n\n          &:nth-child(2) {animation-delay: .2s;}\n          &:nth-child(3) {animation-delay: .3s;}\n          &:nth-child(4) {animation-delay: .4s;}\n        }\n      }\n\n      &:nth-child(4) {\n        top: 300px;\n        left: -250px;\n        animation-name: floatingCloud-4;\n        animation-duration: 30s;\n        animation-delay: 2s;\n        z-index: 3;\n\n        .build {\n          z-index: 4;\n          animation-delay: .1s;\n\n          &:nth-child(2) {animation-delay: .2s;}\n          &:nth-child(3) {animation-delay: .3s;}\n          &:nth-child(4) {animation-delay: .4s;}\n        }\n      }\n    }\n  }\n\n  .features {\n    position: relative;\n    z-index: 10;\n    background: linear-gradient(to right, #efddff 0,#ffe3e4 100%);\n\n    // cool blur effect in webkit\n    @supports (backdrop-filter: blur(10px)) {\n      backdrop-filter: blur(10px);\n      background: rgba(white,.6);\n    }\n\n    ul {\n      padding: 71px 0px 45px;\n\n      @media (max-width: $screen-xs-max)  {\n        display: block;\n      }\n    }\n\n    li {\n      flex: 0 1 315px;\n\n      @media (max-width: $screen-md-max)  {\n        flex: 0 1 303px;\n      }\n\n      &::before {\n        background-image: url('/img/pro/package/feature-icons-sm.png');\n        background-size: 48px;\n      }\n\n      &.zero::before { background-position: 0 -48px; }\n      &.peace::before { background-position: 0 -96px; }\n    }\n\n    p {\n      letter-spacing: -0.02em;\n      margin-top: 2px;\n      margin-right: 5px;\n    }\n  }\n\n  main {\n    margin-top: -144px;\n  }\n\n  .turn {\n    background: #f8f5fb;\n\n    hgroup {\n      max-width: 740px;\n      padding-top: 100px;\n      padding-bottom: 423px;\n\n      @media (max-width: $screen-md-max)  {\n        padding-bottom: 314px;\n      }\n    }\n\n    p {\n      margin-top: 30px;\n    }\n\n    .container {\n      position: relative;\n    }\n\n    .graphics {\n      width: 1056px;\n      height: 401px;\n      position: absolute;\n      bottom: 0;\n      left: calc(50% - 544px);\n\n      .html {\n        background: no-repeat 0 0 url('/img/pro/package/package-img-css-file.png');\n        background-size: 150px;\n        width: 150px;\n        height: 180px;\n        content: '';\n        position: absolute;\n        left: -3px;\n        top: 76px;\n\n        &::before,\n        &::after {\n          background: no-repeat 0 0 url('/img/pro/package/package-img-html-file.png');\n          background-size: 150px;\n          width: 150px;\n          height: 180px;\n          content: '';\n          position: absolute;\n          left: 67px;\n          top: 5px;\n        }\n\n        &::after {\n          background-image: url('/img/pro/package/package-img-js-file.png');\n          background-size: 150px;\n          left: 137px;\n          top: -2px;\n        }\n      }\n\n      .app {\n        background: no-repeat 0 0 url('/img/pro/package/package-img-ipa-file.png');\n        background-size: 150px;\n        width: 150px;\n        height: 180px;\n        content: '';\n        position: absolute;\n        left: 912px;\n        top: 81px;\n\n        &::before {\n          background: no-repeat 0 0 url('/img/pro/package/package-img-apk-file.png');\n          background-size: 150px;\n          width: 150px;\n          height: 180px;\n          content: '';\n          position: absolute;\n          left: -100px;\n          top: 2px;\n        }\n      }\n\n      .circles {\n        width: 1056px;\n        margin: 0 auto;\n      }\n\n      .box {\n        background: no-repeat 0 0 url('/img/pro/package/package-img-server.png');\n        background-size: 460px;\n        width: 460px;\n        height: 402px;\n        content: '';\n        position: absolute;\n        left: 375px;\n        top: 1px;\n\n        &::before {\n          background: no-repeat center center url('/img/pro/package/ionic-package-server-light.jpg.png');\n          background-size: 45px;\n          width: 44px;\n          height: 44px;\n          content: '';\n          position: absolute;\n          left: 262px;\n          top: 95px;\n          opacity: 0;\n          transition: opacity .3s;\n        }\n\n        &.active::before {\n          opacity: 1;\n        }\n      }\n\n      .circle {\n        height: 7px;\n        width: 7px;\n        position: absolute;\n        top: 169px;\n        left: 288px;\n        border-radius: 50%;\n        background: #e5e9f1;\n\n        &::before {\n          position: absolute;\n          top: 0;\n          left: 0;\n          right: 0;\n          bottom: 0;\n          opacity: 0;\n          content: '';\n          border-radius: 50%;\n          background-color: $red;\n          transition: opacity .6s;\n        }\n\n        &.active::before {\n          opacity: 1;\n        }\n\n        &:nth-child(2) { left: 308px; }\n        &:nth-child(3) { left: 328px; }\n        &:nth-child(4) { left: 348px; }\n        &:nth-child(5) { left: 367px; }\n        &:nth-child(6) { left: 711px; }\n        &:nth-child(7) { left: 731px; }\n        &:nth-child(8) { left: 750px; }\n        &:nth-child(9) { left: 770px; }\n        &:nth-child(10) { left: 790px; }\n      }\n\n      @media (max-width: $screen-md-max)  {\n        transform: scale3d(.5,.5,1);\n        left: calc(50% - 526px);\n      }\n\n      @media (max-width: $screen-xs-max)  {\n        transform: scale3d(0.3, 0.3, 1);\n      }\n    }\n  }\n\n  .leave {\n    hgroup {\n      width: calc(50% - 130px);\n      padding-top: 100px;\n      padding-bottom: 100px;\n\n      @media (max-width: $screen-xs-max)  {\n        width: 100%;\n        text-align: center;\n      }\n    }\n\n    h2 {\n      letter-spacing: -.015em;\n      margin-bottom: 31px;\n    }\n\n    p {\n      font-size: 16px;\n      letter-spacing: -0.02em;\n      line-height: 1.8em;\n      margin-bottom: 18px;\n      color: #5e6777;\n\n      strong {\n        font-weight: 600;\n      }\n    }\n\n    .container {\n      position: relative;\n      overflow: hidden;\n\n      &::after {\n        background: url('/img/pro/package/floating-app-icons.png') 0 0 no-repeat;\n        background-size: 682px;\n        width: 682px;\n        height: 650px;\n        content: '';\n        position: absolute;\n        top: -96px;\n        right: 0;\n        pointer-events: none;\n      }\n    }\n\n    @media (max-width: $screen-sm-max)  {\n      hgroup {\n        width: 100%;\n        text-align: center;\n      }\n\n      .container::after {\n        opacity: .5;\n      }\n    }\n\n  }\n\n  .get-started {\n    background: linear-gradient(to right, #c696f8 0%, #fca5a7 100%);\n\n     h2 {\n       margin-bottom: 7px;\n     }\n\n     p {\n      color: #601baa;\n\n      strong {\n        font-weight: 600;\n      }\n    }\n\n    .btn {\n      padding: 12px 19px 10px;\n      font-size: 16px;\n      letter-spacing: -.02em;\n      font-weight: 700;\n\n      &.pink {\n        background: #f34971;\n        margin-right: 2px;\n      }\n\n      &.white {\n        background: white;\n        color: #e93677;\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "assets/scss/pages/pro/_teams.scss",
    "content": "#page-products-for-teams {\n  #sub-header > .container {\n    align-items: center;\n  }\n\n  .cta {\n    background-color: #12223a;\n    background-image: url(\"/img/pro/teams-hero-bg.jpg\"),\n      linear-gradient(120deg, #12223a, #000a1c);\n    background-size: cover, 100%;\n    background-position: 50% 50%;\n    margin-top: -136px;\n    padding-top: 136px;\n    text-align: center;\n    position: relative;\n  }\n\n  .cta hgroup {\n    padding-bottom: 114px;\n  }\n\n  .cta h1 {\n    font-size: 48px;\n    font-weight: 700;\n    margin-top: 30px;\n  }\n\n  .cta p {\n    color: #a0abbf;\n    font-weight: 600;\n  }\n\n  .cta p strong {\n    color: #ccd4e3;\n  }\n\n  .cta-buttons {\n    margin-top: 50px;\n  }\n\n  .cta .btn {\n    color: #ffffff;\n    font-size: 16px;\n    font-weight: 700;\n    padding: 14px 24px;\n\n    &.secondary {\n      background-color: #21314e;\n    }\n  }\n\n  .cta .logo-field {\n    align-items: center;\n    display: flex;\n    height: 120px;\n    justify-content: center;\n    overflow: hidden;\n    position: relative;\n\n    &::before {\n      background-image: linear-gradient(\n          rgba(200, 225, 255, 0.08),\n          rgba(200, 220, 255, 0.08)\n        ),\n        url(/img/pro/teams-hero-bg.jpg);\n      background-size: 100%, cover;\n      background-position: 50% 50%, 50% 50%;\n      position: absolute;\n      content: \"\";\n      top: calc(100% - 661px);\n      width: 100%;\n      height: 661px;\n      filter: blur(24px);\n    }\n\n    img {\n      max-width: 895px;\n      width: 80%;\n      position: relative;\n    }\n\n    @media (max-width: $screen-sm) {\n      display: none;\n    }\n  }\n\n  .hero {\n    background-repeat: no-repeat;\n    padding: 260px 0;\n\n    @media (max-width: $screen-lg) {\n      padding: 20% 0;\n    }\n  }\n\n  .hero .container {\n    display: flex;\n    flex-direction: column;\n  }\n\n  .hero.flipped .container {\n    align-items: flex-end;\n  }\n\n  .hero__content {\n    width: 40%;\n\n    @media (max-width: $screen-sm) {\n      text-align: center;\n      width: 100%;\n    }\n  }\n\n  .hero__icon {\n    background-image: url(\"/img/pro/teams-feature-icons.png\");\n    background-position: top center;\n    background-repeat: no-repeat;\n    background-size: 100%;\n    display: inline-block;\n    height: 64px;\n    margin-bottom: 40px;\n    width: 64px;\n\n    @media (max-width: $screen-sm) {\n      margin-bottom: 20px;\n    }\n  }\n\n  .ship .hero__icon {\n    background-position-y: 0;\n  }\n\n  .listen .hero__icon {\n    background-position-y: -64px;\n  }\n\n  .collaborate .hero__icon {\n    background-position-y: -128px;\n  }\n\n  .hero h2 {\n    color: #9aaac1;\n    font-size: 36px;\n    font-weight: 700;\n    letter-spacing: -0.03em;\n    line-height: 46px;\n    margin-bottom: 1em;\n  }\n\n  .hero h2 strong {\n    color: #24282e;\n  }\n\n  .hero p {\n    color: #505863;\n    font-size: 18px;\n    font-weight: 600;\n  }\n\n  .ship {\n    background-image: url(\"/img/pro/teams-ship-hero.jpg\");\n    background-position: right center;\n    background-size: 811px;\n  }\n\n  .listen {\n    background-image: url(\"/img/pro/teams-listen-hero.png\");\n    background-position: left center;\n    background-size: 811px;\n  }\n\n  .collaborate {\n    background-image: url(\"/img/pro/teams-collaborate-hero.jpg\");\n    background-position: right center;\n    background-size: 811px;\n  }\n\n  .ship,\n  .collaborate {\n    @media (min-width: $screen-sm) {\n      background-position: center right -400px;\n    }\n    @media (min-width: $screen-lg) {\n      background-position: center right -150px;\n    }\n    @media (min-width: 1400px) {\n      background-position: center right -50px;\n    }\n  }\n\n  .listen {\n    @media (min-width: $screen-sm) {\n      background-position: center left -350px;\n    }\n    @media (min-width: $screen-lg) {\n      background-position: center left -150px;\n    }\n    @media (min-width: 1400px) {\n      background-position: center left -50px;\n    }\n  }\n\n  .ship,\n  .listen,\n  .collaborate {\n    @media (max-width: $screen-sm) {\n      background-image: none;\n      padding: 60px 0;\n    }\n  }\n\n  .features {\n    padding: 100px 0;\n  }\n\n  .features .hero__content {\n    @media (min-width: $screen-sm) {\n      width: 70%;\n    }\n  }\n\n  .features h3 {\n    color: #24282e;\n    font-size: 20px;\n    font-weight: 700;\n    margin-bottom: 20px;\n  }\n\n  .features p {\n    color: #747f92;\n    font-size: 16px;\n    line-height: 1.6;\n  }\n\n  .features .hero__icon {\n    background-image: url(\"/img/pro/teams-subfeature-icons.png\");\n    height: 48px;\n    margin-bottom: 0;\n    width: 48px;\n\n    &.sharing {\n      background-position-y: 0;\n    }\n    &.ci {\n      background-position-y: -48px * 1;\n    }\n    &.feed {\n      background-position-y: -48px * 2;\n    }\n    &.collab {\n      background-position-y: -48px * 3;\n    }\n    &.binaries {\n      background-position-y: -48px * 4;\n    }\n    &.channels {\n      background-position-y: -48px * 5;\n    }\n    &.cd {\n      background-position-y: -48px * 6;\n    }\n    &.monitoring {\n      background-position-y: -48px * 7;\n    }\n    &.rapid {\n      background-position-y: -48px * 8;\n    }\n  }\n\n  .features__list {\n    display: flex;\n    flex-wrap: wrap;\n    list-style: none;\n    margin: 70px 0 0;\n    padding: 0;\n  }\n\n  .features__list li {\n    flex: 0 0 33.33%;\n    padding-bottom: 4em;\n    padding-right: 4em;\n\n    @media (max-width: $screen-md) {\n      flex: 0 0 50%;\n    }\n\n    @media (max-width: $screen-sm) {\n      flex: 0 0 100%;\n      padding-right: 0;\n      text-align: center;\n    }\n  }\n\n  .quotes {\n    color: #ffffff;\n    display: flex;\n    font-size: 20px;\n    font-weight: 600;\n    letter-spacing: -0.01em;\n\n    @media (max-width: $screen-sm) {\n      flex-direction: column;\n    }\n  }\n\n  .quotes__content {\n    max-width: 490px;\n    position: relative;\n  }\n\n  .quotes__napa,\n  .quotes__hmb {\n    display: flex;\n    flex: 1;\n    padding: 80px;\n\n    @media (max-width: $screen-xs) {\n      padding: 40px;\n    }\n  }\n\n  .quotes__napa {\n    background-color: #6b56d4;\n    justify-content: flex-end;\n\n    @media (max-width: $screen-sm) {\n      justify-content: flex-start;\n    }\n  }\n\n  .quotes__napa .case-study-pill {\n    background-color: #5635c2;\n    border-radius: 20px;\n    color: rgba(255, 255, 255, 0.6);\n    display: inline-block;\n    font-size: 12px;\n    line-height: 1;\n    margin-bottom: 30px;\n    padding: 7px 10px 6px;\n    position: absolute;\n    right: 0;\n    top: 7px;\n    transition: color 200ms ease-in-out;\n\n    strong {\n      font-weight: inherit;\n      color: #ffffff;\n    }\n\n    &:after {\n      content: \" \\203a\";\n    }\n\n    &:hover {\n      color: #ffffff;\n    }\n\n    @media (max-width: $screen-lg) {\n      position: relative;\n    }\n  }\n\n  .quotes__hmb {\n    background-color: #424b58;\n  }\n\n  .quotes__logo {\n    background-image: url(\"/img/pro/teams-quote-logos.png\");\n    background-position: top;\n    background-size: 100%;\n    background-repeat: no-repeat;\n    display: block;\n    height: 40px;\n    margin-bottom: 2em;\n    width: 260px;\n  }\n\n  .quotes__hmb .quotes__logo {\n    background-position-y: -40px;\n  }\n\n  .quotes blockquote {\n    border: none;\n    font-size: inherit;\n    line-height: 1.5;\n    margin: 0;\n    padding: 0;\n  }\n\n  .quotes blockquote > small {\n    color: rgba(255, 255, 255, 0.6);\n    margin-top: 2em;\n    text-align: right;\n\n    &::before {\n      content: \"\";\n    }\n\n    strong {\n      font-weight: inherit;\n      color: #ffffff;\n    }\n  }\n\n  .get-started {\n    background: #1b212a;\n    overflow: auto;\n  }\n\n  .get-started .container {\n    align-items: center;\n    display: flex;\n    margin-bottom: 110px;\n    margin-top: 110px;\n\n    @media (max-width: $screen-sm-max) {\n      display: block;\n      text-align: center;\n    }\n  }\n\n  .get-started hgroup {\n    letter-spacing: -0.025em;\n    flex-grow: 1;\n\n    @media (max-width: $screen-sm-max) {\n      padding-bottom: 16px;\n    }\n  }\n\n  .get-started h2 {\n    color: #ffffff;\n    font-size: 28px;\n    font-weight: 700;\n    letter-spacing: inherit;\n    margin: 0 0 5px;\n  }\n\n  .get-started p {\n    color: #98a3b2;\n    font-size: 20px;\n    font-weight: 600;\n    margin: 0;\n  }\n\n  .get-started .btn {\n    font-size: 16px;\n    font-weight: 700;\n\n    &.secondary {\n      background-color: #3d4b5f;\n    }\n  }\n}\n"
  },
  {
    "path": "assets/scss/pages/pro/index.scss",
    "content": "@import \"../../vars\";\n@import \"bootstrap-sass/assets/stylesheets/bootstrap/variables\";\n\n#page-products {\n  background-color: #fff;\n\n  .pre-header {\n    margin-bottom: 0px;\n  }\n\n  #sub-header > .container {\n    align-items: center;\n\n    &:before {\n      border-top-color: rgba(255, 255, 255, 0.1);\n    }\n  }\n\n  > .cta {\n    position: relative;\n    background-image: linear-gradient(\n      90deg,\n      rgb(101, 33, 252) 0%,\n      rgb(56, 159, 255) 100%\n    );\n    margin-top: -140px;\n    padding-top: 140px;\n\n    // &:before {\n    //   content: '';\n    //   background-position: center center;\n    //   background-size: cover;\n    //   display: block;\n    //   width: 100%;\n    //   height: 100%;\n    //   position: absolute;\n    //   top: 0;\n    //   left: 0;\n    //   background-image: linear-gradient(90deg, rgb(96,48,252) 0%, rgb(95,162,254) 100%);\n    //   // background-image: url(\"/img/pro/pro-hero-bg.png\");\n    //   background-size: cover;\n    // }\n\n    @mixin bg-layout($x-spacing, $y-begin, $y-spacing) {\n      &:nth-child(1) {\n        opacity: 0.05;\n        top: $y-begin;\n        left: (100% / $x-spacing) * 0;\n      }\n      &:nth-child(2) {\n        opacity: 0.1;\n        top: ($y-begin - ($y-spacing * 1));\n        left: (100% / $x-spacing) * 1;\n      }\n      &:nth-child(3) {\n        opacity: 0.09;\n        top: ($y-begin - ($y-spacing * 2));\n        left: (100% / $x-spacing) * 2;\n      }\n      &:nth-child(4) {\n        opacity: 0.15;\n        top: ($y-begin - ($y-spacing * 3));\n        left: (100% / $x-spacing) * 3;\n      }\n      &:nth-child(5) {\n        opacity: 0.16;\n        top: ($y-begin - ($y-spacing * 4));\n        left: (100% / $x-spacing) * 4;\n      }\n      &:nth-child(6) {\n        opacity: 0.08;\n        top: ($y-begin - ($y-spacing * 5));\n        left: (100% / $x-spacing) * 5;\n      }\n    }\n\n    .cta__background {\n      content: \"\";\n      background-position: center center;\n      background-size: cover;\n      display: block;\n      width: 100%;\n      height: 100%;\n      position: absolute;\n      z-index: 0;\n      top: -4px;\n      left: 0;\n      background-image: linear-gradient(\n        90deg,\n        rgb(96, 48, 252) 0%,\n        rgb(95, 162, 254) 100%\n      );\n      // background-image: url(\"/img/pro/pro-hero-bg.png\");\n      background-size: cover;\n      opacity: 0.5;\n      overflow: hidden;\n\n      & > div {\n        width: 100%;\n        height: 100%;\n        position: absolute;\n        background-image: linear-gradient(\n          90deg,\n          #fff 0%,\n          rgba(255, 255, 255, 0) 75%\n        );\n        transform: translate(-20px, 0) rotate(-3deg) skew(16deg, 0deg)\n          scale(1, 1.5);\n        transform-origin: top;\n\n        @include bg-layout(6.5, 75%, 25%);\n\n        @media (max-width: $screen-sm) {\n          @include bg-layout(4, 60%, 15%);\n        }\n      }\n    }\n\n    hgroup {\n      text-align: center;\n      position: relative;\n      max-width: 830px;\n      padding-bottom: 354px;\n      padding-top: 54px;\n\n      h3 {\n        font-family: $font-family-monospace;\n        text-transform: uppercase;\n        letter-spacing: 0.18em;\n        font-size: 12px;\n        line-height: 18px;\n        font-weight: 600;\n        color: #e3e6ff;\n      }\n\n      h1 {\n        margin-top: 36px;\n        font-size: 56px;\n        line-height: 60px;\n        font-weight: 700;\n        letter-spacing: -0.038em;\n        margin-bottom: 264x;\n      }\n\n      p {\n        letter-spacing: -0.03em;\n        max-width: 724px;\n        line-height: 1.8em;\n        margin: 0 auto;\n        font-size: 22px;\n        font-weight: 400;\n        color: #fff;\n        font-family: $font-family-inter;\n      }\n\n      .cta-buttons {\n        margin-top: 30px;\n        padding-left: 24px;\n        padding-right: 24px;\n        color: white;\n        letter-spacing: -0.02em;\n\n        > .btn {\n          align-items: center;\n          background-color: #7898ff;\n          border-radius: 2em;\n          display: inline-flex;\n          font-size: 15px;\n          font-weight: 700;\n          text-transform: uppercase;\n          letter-spacing: 0.1em;\n          padding: 14px 26px;\n\n          &:not(:hover) {\n            box-shadow: none;\n          }\n        }\n\n        > .btn--primary {\n          background-color: #fff;\n          color: #4a68ff;\n\n          &:after {\n            transition: transform 0.3s;\n            content: \"\\f287\";\n            font-family: \"Ionicons\";\n            font-size: 15px;\n            margin-left: 8px;\n          }\n\n          &:hover:after {\n            transform: translateX(2px);\n          }\n        }\n\n        .sales {\n          color: rgba(white, 0.5);\n          margin-top: 6px;\n          display: inline-block;\n          text-decoration: underline;\n          transition: 0.2s color;\n\n          &:hover {\n            color: rgba(white, 0.8);\n          }\n        }\n      }\n      @media (max-width: $screen-sm) {\n        padding-bottom: 140px;\n      }\n\n      @media (max-width: $screen-xs) {\n        padding-top: 14px;\n\n        h1 {\n          font-size: 40px;\n          line-height: 46px;\n        }\n\n        h3 {\n          max-width: 246px;\n          margin-left: auto;\n          margin-right: auto;\n        }\n\n        p {\n          font-size: 18px;\n          line-height: 1.6em;\n        }\n\n        .btn {\n          width: 100%;\n          margin-right: 0;\n          justify-content: center;\n          margin-bottom: 8px;\n        }\n      }\n    }\n  }\n\n  .cta-overlay {\n    margin-top: -239px;\n    position: relative;\n    z-index: 1;\n    overflow: hidden;\n    display: flex;\n    flex-direction: column;\n    align-items: center;\n    width: 100%;\n    padding: 0 20px;\n\n    .app-screenshot {\n      overflow: hidden;\n      width: 100%;\n      max-width: 960px;\n      background-color: #fff;\n      background-repeat: no-repeat;\n      background-size: cover;\n      border-radius: 16px;\n      box-shadow: 0 8px 16px rgba(0, 14, 41, 0.08),\n        0 30px 60px rgba(0, 11, 34, 0.15);\n\n      img {\n        width: 100%;\n      }\n    }\n\n    // & > div:not(.customer-logos) {\n    //   background-color: #f9fafc;\n    //   padding: 58px;\n    //   display: flex;\n    //   align-items: flex-start;\n    // }\n\n    // .pro-video,\n    // .pro-benefits {\n    //   flex: 1;\n    // }\n    //\n    // @media (max-width: $screen-sm)  {\n    //   & > div:not(.customer-logos) {\n    //     flex-direction: column;\n    //     padding: 32px;\n    //   }\n    //\n    //   .pro-video,\n    //   .pro-benefits {\n    //     width: 100%;\n    //   }\n    //\n    //   .pro-benefits {\n    //     padding-left: 0;\n    //     padding-top: 40px;\n    //   }\n    // }\n\n    @media (max-width: $screen-sm) {\n      margin-top: -76px;\n    }\n  }\n\n  .customer-logos {\n    padding: 0;\n    width: 100%;\n    max-width: 1024px;\n    margin-top: 30px;\n\n    display: flex;\n    flex-wrap: wrap;\n    align-items: center;\n    justify-content: space-between;\n\n    [class^=\"customer-logo\"] {\n      background-image: url(\"/img/pro/pro-customer-sprite.png\");\n      background-repeat: no-repeat;\n      background-size: 121px 256px;\n      margin: 34px 42px;\n    }\n\n    @media (max-width: $screen-sm-max) {\n      justify-content: center;\n      [class^=\"customer-logo\"] {\n        margin: 22px 34px;\n      }\n    }\n\n    @media (max-width: $screen-sm-min) {\n      padding: 8px;\n      [class^=\"customer-logo\"] {\n        margin: 16px 18px;\n      }\n    }\n\n    .customer-logo--lendingclub {\n      width: 121px;\n      height: 18px;\n      background-position: 0 0;\n    }\n    .customer-logo--mcdonalds {\n      background-position: 0 -19px;\n      width: 24px;\n      height: 20px;\n    }\n    .customer-logo--study {\n      background-position: 0 -40px;\n      width: 118px;\n      height: 18px;\n    }\n    .customer-logo--cat {\n      background-position: 0 -59px;\n      width: 34px;\n      height: 20px;\n    }\n    .customer-logo--ge {\n      background-position: 0 -80px;\n      width: 24px;\n      height: 24px;\n    }\n    .customer-logo--comcast {\n      background-position: 0 -105px;\n      width: 73px;\n      height: 20px;\n    }\n    .customer-logo--amtrak {\n      background-position: 0 -126px;\n      width: 47px;\n      height: 20px;\n    }\n    .customer-logo--airbus {\n      background-position: 0 -147px;\n      width: 107px;\n      height: 20px;\n    }\n    .customer-logo--aaa {\n      background-position: 0 -168px;\n      width: 45px;\n      height: 27px;\n    }\n    .customer-logo--deloitte {\n      background-position: 0 -195px;\n      width: 87px;\n      height: 16px;\n    }\n    .customer-logo--usaa {\n      background-position: 0 -212px;\n      width: 21px;\n      height: 24px;\n    }\n    .customer-logo--ing {\n      background-position: 0 -237px;\n      width: 73px;\n      height: 19px;\n    }\n  }\n\n  .pro-video {\n    align-items: center;\n    display: flex;\n    justify-content: center;\n    position: relative;\n    z-index: 1;\n\n    &:before {\n      content: \"\";\n      display: block;\n      height: 50%;\n      left: 0;\n      position: absolute;\n      top: 0;\n      width: 100%;\n      z-index: 1;\n    }\n\n    .video-player {\n      max-width: 900px;\n      width: 100%;\n      position: relative;\n      z-index: 2;\n\n      &:hover {\n        cursor: pointer;\n      }\n\n      &:not(.is-playing):hover .video-player-frame {\n        transform: scale(0.99);\n      }\n\n      &:not(.is-playing):hover .video-player-button {\n        transform: translate(-50%, -50%) scale(1.05);\n      }\n\n      &.is-ready .video-player-button {\n        display: block;\n      }\n\n      &.is-playing .video-player-button {\n        display: none;\n      }\n    }\n\n    .video-player-button {\n      display: none;\n      left: 50%;\n      position: absolute;\n      top: 50%;\n      transform: translate(-50%, -50%) scale(1);\n      transition: transform 400ms cubic-bezier(0.175, 0.885, 0.32, 1.275);\n      width: 80px;\n      z-index: 1;\n    }\n\n    .video-player-frame {\n      background-image: url(\"/img/pro/pro-dash-video-screenshot.png\");\n      background-position: center center;\n      background-repeat: no-repeat;\n      background-size: contain;\n      border-radius: 8px;\n      height: 0;\n      overflow: hidden;\n      padding-bottom: 64.67%;\n      position: relative;\n      transform: scale(1);\n      transition: transform 400ms cubic-bezier(0.19, 1, 0.22, 1);\n\n      > iframe {\n        height: 100%;\n        left: 0;\n        position: absolute;\n        top: 0;\n        width: 100%;\n      }\n    }\n  }\n\n  .pro-benefits {\n    padding-left: 60px;\n\n    ul {\n      list-style-type: none;\n      margin: 0;\n      padding: 0;\n    }\n\n    li {\n      position: relative;\n      padding-left: 40px;\n\n      & + li {\n        margin-top: 22px;\n      }\n\n      &::before {\n        display: block;\n        content: \"\";\n        width: 24px;\n        height: 24px;\n        background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADEAAAAwCAYAAAC4wJK5AAAD/ElEQVRogc3a24tVZRzG8c9ac9jOOOjIMGoMSXQxRBc16UWS4YVikBKKUGTEUF35BwjhX5BCF0EXRhcVU0QUCBYR5AESJIkwu4kYL4JA85A56dC4Z2xWF+8a3TOzD2vtw5oeWOzN3uv9/Z4v73G974qSJHHwY+1QH7ZhK0bTaxAD6f/TmMJkep3HOcy0mri7xfJ92Itx7EApQ5mnK76XcQYTOKFJoGYhBnEQhzDUZAwC9PPpdRNv4z2hxjIrzpk0wutCc3hLawBLNZTGnExzRFkL5oHYiJP4AMN53OXUcJrjZJqzobJCbMdF7GzOV1Pamebc3ujG+Oc/Ggbbj2+xoWVb+bUhzb2/3k2NamI/vpBt1OmUSqmHmiD1ILbj0wb3FKVY8FK1adUyuBGfW9kaWKqS4GlZZ68GEeETK9MHGmmD4G3R8FsN4jXFjkJ5tVPweF9LIQZxtCg3Leio4BXLIQ7q7ETWLg0LXrEYok9YC62IhtewOt8wckjwvAhir/auhTJrZB37trB3Sy6QIcHzIojxNnvLpJF17B6ju4u1/ex5ilL2tfU4DyD6hOeBQlUJsKD+XnqzQ+xAXwxx5FkFT2zVAGZm+fICd+5mDlPCtlATkWfa7LGu6gH8NZ073NYYIh5rm8MG2jjYVgAYjREl4aG+41q/hj3tBWABImJd6xbra/0aXti8uNO2AQAGQ00kVuct2V8KE1QWdRAABkJNRNkfygkT0r4t4RppUIcdBkA6T0RR9v2evt4ws67tD21791htkCIAMB0jiSN3spboiuiq6Ji1QAoCgKkYSXfst6wlpsuc+DF8LmgpSIEAMBkj6epyKU+p2zO1QZ7YVCgACxCrenyft2QtkG2jhQLA+RgeXe9MFJnLW7oaSKXuznUcoIxzMWx+xFRvtx+aiVILZPYeX//UUQDCjvpMDMdO+bfUbaLZSPdB0tVneY6vLnD9dluM1tMERBevJI6d4vERa3+94vf5RMZ5eLlKPWwa4vIt/qnRxNqom3jYQk3AL5f9XerxbitRy3NculoIAOEsY4Ylux0Dq7wTR24VYqE13RAOY7AE4sZtf3Z3OVy4pfx6U8Vp0rIdwNl73o8j3xVqKZ9O46PKH6ptYybziZdxvQhHOXUNryKp/LHWrvhVvChMJv8XlfGS4G2R6p09nMUrmO+QqTyaF7ycrfZnowOU41a+Rsqph+O1bshyCnQczwntsWhdS3PXBCD7UdZZjAkjQ1E6neas2oQqFT/5UOagV7ELbwiTTad0I82xS5VOXE15DxUTfCjsUx0W1i/t0s005miaI6l/+wM1ezI6hSPCAuwAvtFc5y+nZQ+ksY7I+V4Hrb9lM4PP0mvFXhX6D3mVKTX2fENsAAAAAElFTkSuQmCC\");\n        background-repeat: no-repeat;\n        background-size: 100%;\n        position: absolute;\n        top: 0;\n        left: 0;\n      }\n\n      h4 {\n        margin: 0;\n        font-weight: 600;\n        font-size: 16px;\n        line-height: 20px;\n      }\n\n      p {\n        color: #545c6a;\n        font-size: 15px;\n        line-height: 24px;\n      }\n    }\n  }\n\n  .hero {\n    background: no-repeat center center;\n    background-size: cover;\n    overflow: hidden;\n    padding-top: 0;\n    padding-bottom: 0;\n\n    .content {\n      width: 39%;\n      text-align: left;\n      padding-top: 200px;\n      padding-bottom: 220px;\n      color: #070f1a;\n      min-height: 724px;\n      position: relative;\n\n      &.dark {\n        color: rgba(white, 0.8);\n\n        h2,\n        .hero__cta {\n          color: #151d2b;\n        }\n\n        p {\n          color: #596a89;\n        }\n      }\n\n      h2 {\n        font-size: 36px;\n        letter-spacing: -0.03em;\n        font-weight: 600;\n        margin-bottom: 12px;\n      }\n\n      p {\n        font-size: 20px;\n        line-height: 32px;\n        font-family: $font-family-inter;\n        font-weight: 400;\n      }\n\n      h4 {\n        font-family: $font-family-monospace;\n        padding-top: 100px;\n        position: relative;\n        color: #808fa7;\n\n        &::before {\n          background: url(\"/img/pro/product-header-icons.png\") 0 0 no-repeat;\n          background-size: 64px;\n          width: 64px;\n          height: 64px;\n          content: \"\";\n          position: absolute;\n          top: 0;\n        }\n      }\n    }\n\n    &__cta-bar {\n      display: flex;\n      align-items: center;\n\n      a + a {\n        margin-left: 20px;\n      }\n    }\n\n    &__cta-bar-secondary {\n      margin-left: 30px;\n    }\n\n    @media (max-width: $screen-xs-max) {\n      &__cta-bar {\n        flex-direction: column;\n      }\n      &__cta-bar-secondary {\n        margin-left: 0;\n        margin-top: 24px;\n      }\n    }\n\n    &__cta {\n      border-bottom-style: solid;\n      border-bottom-width: 2px;\n      color: inherit;\n      font-size: 18px;\n      font-weight: 700;\n      padding-bottom: 4px;\n      transition: border-bottom-color 100ms ease-in-out;\n\n      &:after {\n        content: \"\\f287\";\n        font-family: \"Ionicons\";\n        font-size: 16px;\n        margin-left: 5px;\n      }\n\n      &:hover {\n        border-bottom-color: transparent;\n      }\n    }\n\n    &__icon-link {\n      transition: opacity 0.3s;\n      display: inline-block;\n      opacity: 0.7;\n\n      i {\n        font-size: 30px;\n        color: #fff;\n      }\n\n      &:hover {\n        opacity: 1;\n      }\n    }\n\n    .container {\n      position: relative;\n\n      &::before {\n        background-repeat: no-repeat;\n        background-position: right 0;\n        background-size: contain;\n        top: 0;\n        right: 0;\n        left: 0;\n        bottom: 0;\n        content: \"\";\n        display: block;\n        position: absolute;\n        opacity: 0;\n        transition: 0.2s opacity;\n      }\n    }\n\n    &.active .container::before {\n      opacity: 1;\n    }\n\n    h4 {\n      font-size: 11px;\n      font-weight: 700;\n      letter-spacing: 0.2em;\n      color: #272a2f;\n      text-transform: uppercase;\n      margin-bottom: 30px;\n    }\n\n    h3 {\n      font-size: 36px;\n      font-weight: 700;\n      letter-spacing: -0.02em;\n      margin-bottom: 30px;\n    }\n\n    h2 {\n      color: #272a2f;\n      font-size: 36px;\n      margin-bottom: 23px;\n      margin-top: 14px;\n      font-weight: 700;\n      letter-spacing: -0.015em;\n    }\n\n    p {\n      font-size: 16px;\n      font-weight: 600;\n      letter-spacing: -0.026em;\n      line-height: 1.8em;\n      margin-bottom: 30px;\n      color: #5e6777;\n\n      strong {\n        color: #272a2f;\n        font-weight: 700;\n      }\n\n      a {\n        &:hover {\n          color: $blue;\n        }\n      }\n    }\n\n    .btn {\n      padding: 13px 15px;\n      font-size: 14px;\n      font-weight: 600;\n\n      strong {\n        font-weight: 700;\n      }\n\n      &::after {\n        font-family: \"Ionicons\";\n        content: \"\\f287\";\n        font-size: 15px;\n        line-height: 10px;\n        vertical-align: -1px;\n        margin-left: 8px;\n        font-weight: 600;\n        display: inline-block;\n        transition: 0.2s transform;\n      }\n\n      &:hover::after {\n        transform: translate3d(2px, 0, 0);\n      }\n    }\n\n    @media (max-width: $screen-xs) {\n      .content {\n        h2 {\n          font-size: 30px;\n        }\n        p {\n          font-size: 18px;\n          line-height: 1.6em;\n        }\n      }\n    }\n  }\n\n  #overview {\n    background-color: #fff;\n    color: #272a2f;\n    padding-bottom: 180px;\n    padding-top: 140px;\n\n    hgroup {\n      max-width: 740px;\n      margin: 0 auto 68px;\n\n      h3 {\n        font-weight: 600;\n        color: #070f1a;\n        margin-bottom: 14px;\n      }\n\n      p {\n        font-size: 22px;\n        line-height: 36px;\n        color: #43546f;\n        font-weight: 400;\n      }\n    }\n\n    .features {\n      padding: 0;\n      list-style: none;\n      display: flex;\n      justify-content: space-between;\n      max-width: 960px;\n      margin: 0 auto;\n\n      h4 {\n        font-size: 20px;\n        text-transform: none;\n        letter-spacing: -0.02em;\n        margin-top: 5px;\n        margin-bottom: 13px;\n        font-weight: 600;\n      }\n\n      p {\n        font-family: $font-family-inter;\n        font-size: 16px;\n        line-height: 28px;\n        color: #687e99;\n        letter-spacing: -0.015em;\n        font-weight: 400;\n      }\n    }\n\n    li {\n      padding-top: 68px;\n      flex: 0 1 320px;\n      position: relative;\n\n      &::before {\n        background: url(\"/img/pro/pro-feature-icons.png\") 0 0 no-repeat;\n        background-size: 48px;\n        height: 48px;\n        width: 48px;\n        content: \"\";\n        position: absolute;\n        top: 0;\n      }\n\n      &.faster::before {\n        background-position: 0 -48px;\n      }\n      &.happier::before {\n        background-position: 0 -96px;\n      }\n      & + li {\n        margin-left: 24px;\n      }\n    }\n\n    @media (max-width: 520px) {\n      .features {\n        display: block;\n      }\n\n      li {\n        text-align: center;\n\n        &::before {\n          left: calc(50% - 24px);\n        }\n\n        + li {\n          margin-left: 0;\n        }\n      }\n    }\n\n    @media (max-width: $screen-sm) {\n      padding-bottom: 68px;\n      padding-top: 102px;\n    }\n\n    @media (max-width: $screen-xs) {\n      padding-bottom: 48px;\n      padding-top: 72px;\n\n      hgroup {\n        margin-bottom: 42px;\n\n        h3 {\n          font-size: 30px;\n        }\n\n        p {\n          font-size: 18px;\n          line-height: 1.6em;\n        }\n      }\n    }\n  }\n\n  #updates {\n    background-image: linear-gradient(\n      0deg,\n      rgb(255, 255, 255) 0%,\n      rgb(246, 248, 251) 100%\n    );\n    background-size: 100%;\n\n    h4 {\n      &::before {\n        background-position: 0 0;\n      }\n    }\n\n    .content {\n      padding-top: 179px;\n      position: relative;\n      z-index: 10;\n\n      @media (max-width: $screen-md-max) {\n        padding-top: 148px;\n      }\n    }\n\n    .anim-updates {\n      position: absolute;\n      z-index: 4;\n      top: 0;\n      bottom: 0;\n      left: 50%;\n      transform: translateX(-100px);\n      display: flex;\n      align-items: center;\n    }\n    .anim-updates__root {\n      width: 726px;\n      height: 437px;\n      position: relative;\n    }\n    .anim-updates__foreground,\n    .anim-updates__background {\n      width: 100%;\n      height: 100%;\n      position: absolute;\n      top: 0;\n      left: 0;\n    }\n    .anim-updates__foreground {\n      z-index: 10;\n      transform: translateZ(1000px);\n    }\n    .anim-updates__background {\n      z-index: 1;\n      transform: translateZ(100px);\n    }\n\n    .anim-updates__device {\n      width: 726px;\n      height: 437px;\n      background-image: url(\"/img/pro/updates-illustration-device.png\");\n      background-repeat: no-repeat;\n      background-size: 726px 437px;\n      position: absolute;\n      top: 0;\n      left: 0;\n      z-index: 5;\n      transform: translateZ(500px);\n    }\n\n    .anim-updates__screen {\n      width: 308px;\n      height: 554px;\n      background: #5d37ff;\n      position: absolute;\n      top: 28px;\n      left: 406px;\n      transform-origin: top left;\n      transform: rotateX(60deg) rotateY(0.7deg) rotateZ(36.5deg)\n        skew(2deg, -1.5deg);\n    }\n\n    @media (max-width: $screen-sm-max) {\n      .anim-updates {\n        display: none;\n      }\n\n      .content {\n        min-height: 0;\n        padding-top: 64px;\n        padding-bottom: 64px;\n        width: 100%;\n        text-align: center;\n\n        h4::before {\n          left: calc(50% - 32px);\n        }\n      }\n    }\n  }\n\n  #build {\n    background-image: linear-gradient(\n      0deg,\n      rgb(255, 255, 255) 0%,\n      rgb(246, 248, 251) 100%\n    );\n    padding: 100px 0;\n\n    h4 {\n      &::before {\n        background-position: 0 -64px;\n      }\n    }\n\n    .anim-build {\n      position: absolute;\n      left: 0;\n      top: 0;\n      bottom: 0;\n      width: 39%;\n      display: flex;\n      justify-content: center;\n      align-items: center;\n    }\n\n    .anim-build__text {\n      fill: #5d37ff;\n      text-transform: uppercase;\n      font-size: 12px;\n      font-weight: 700;\n      letter-spacing: 0.05em;\n    }\n\n    .content {\n      padding-top: 140px;\n    }\n\n    @media (max-width: $screen-sm-max) {\n      .container::before {\n        background-size: 40%;\n        top: 128px;\n        bottom: 128px;\n      }\n\n      .content {\n        padding-top: 64px;\n        min-height: 0;\n        width: 40%;\n      }\n    }\n\n    @media (max-width: $screen-xs-max) {\n      background-image: none;\n      padding: 0;\n\n      .anim-build {\n        display: none;\n      }\n\n      .content {\n        min-height: 0;\n        padding-top: 64px;\n        padding-bottom: 64px;\n        width: 100%;\n        text-align: center;\n\n        h4::before {\n          left: calc(50% - 32px);\n        }\n      }\n    }\n  }\n\n  #reporting {\n    background: #081b17;\n    padding: 50px 0;\n\n    h4,\n    .btn {\n      color: #607d79;\n\n      &::before {\n        background-position: 0 -256px;\n      }\n    }\n\n    .anim-reporting {\n      width: 1084px;\n      height: 100%;\n      display: flex;\n      overflow: hidden;\n      position: absolute;\n      top: 0;\n      left: 50%;\n      transform: translateX(-240px);\n      bottom: 0;\n      z-index: 1;\n    }\n\n    #anim-reporting__svg {\n      width: 100%;\n      height: 100%;\n    }\n\n    .anim-reporting__bg {\n      fill: #0d2b25;\n    }\n\n    .anim-reporting__scan {\n      animation-name: cycle-fade;\n      animation-duration: 2s;\n      animation-direction: alternate;\n      animation-iteration-count: infinite;\n      animation-timing-function: ease;\n    }\n    @keyframes cycle-fade {\n      from {\n        opacity: 0.4;\n      }\n      to {\n        opacity: 1;\n      }\n    }\n\n    .anim-reporting__bug {\n      fill: #ff3267;\n      transform-origin: center center;\n    }\n\n    .content {\n      padding-top: 172px;\n      width: 40%;\n      z-index: 5;\n    }\n\n    @media (max-width: $screen-sm-max) {\n      .content {\n        min-height: 0;\n        padding-top: 64px;\n        width: 100%;\n      }\n      .anim-reporting {\n        opacity: 0.7;\n      }\n      .anim-reporting__clipped {\n        transform: scale(0.8);\n      }\n    }\n\n    @media (max-width: $screen-sm-max) {\n      padding: 0;\n\n      .anim-reporting {\n        display: none;\n      }\n\n      .content {\n        min-height: 0;\n        padding-top: 64px;\n        padding-bottom: 64px;\n        width: 100%;\n        text-align: center;\n\n        h4::before {\n          left: calc(50% - 32px);\n        }\n      }\n    }\n  }\n\n  #push {\n    background: #ffbc2a no-repeat center bottom;\n    background-image: linear-gradient(to right, #ffce39 0%, #ffad20 100%);\n    background-size: 100%;\n\n    h4 {\n      color: #d26d00;\n\n      &::before {\n        background-position: 0 -320px;\n      }\n    }\n\n    .container::before {\n      background-image: url(\"/img/pro/product-push-img.png\");\n      background-position: left 0;\n      top: 80px;\n      bottom: 80px;\n\n      @media (max-width: $screen-md-max) {\n        top: 130px;\n        bottom: 130px;\n      }\n    }\n\n    .content {\n      padding-top: 172px;\n      width: 35%;\n    }\n\n    @media (max-width: $screen-sm-max) {\n      .container::before {\n        display: none;\n      }\n\n      .content {\n        min-height: 0;\n        padding-top: 64px;\n        padding-bottom: 64px;\n        width: 100%;\n        text-align: center;\n\n        h4::before {\n          left: calc(50% - 32px);\n        }\n      }\n    }\n  }\n\n  #automate {\n    background-color: #f9fafc;\n    background-image: linear-gradient(\n      0deg,\n      rgb(255, 255, 255) 0%,\n      rgb(246, 248, 251) 100%\n    );\n\n    background-size: 100%;\n    position: relative;\n    padding-bottom: 160px;\n\n    h4 {\n      &::before {\n        background-position: 0 -128px;\n      }\n    }\n\n    .anim-automate {\n      position: absolute;\n      top: 220px;\n      left: 50%;\n      margin-left: -400px;\n\n      svg {\n        .connector {\n          opacity: 0;\n          stroke-dasharray: 80px;\n        }\n\n        rect.four {\n          opacity: 0.6;\n        }\n\n        #top,\n        #bottom {\n          position: relative;\n        }\n        #bottom {\n          z-index: 1;\n        }\n        #top {\n          z-index: 2;\n        }\n      }\n\n      svg > g {\n        transform: translateY(50px);\n      }\n    }\n\n    @media (max-width: $screen-md-max) {\n      padding-bottom: 390px;\n\n      .content {\n        width: 100%;\n        max-width: 500px;\n        text-align: center;\n        margin-left: auto;\n        margin-right: auto;\n      }\n      .content h4::before {\n        left: calc(50% - 32px);\n      }\n      .anim-automate {\n        transform: scale(0.8);\n        top: 470px;\n        margin-left: -670px;\n      }\n    }\n\n    @media (max-width: $screen-sm-min) {\n      padding: 0;\n\n      .anim-automate {\n        display: none;\n      }\n\n      .content {\n        min-height: 0;\n        padding-top: 64px;\n        padding-bottom: 64px;\n        width: 100%;\n        text-align: center;\n\n        h4::before {\n          left: calc(50% - 32px);\n        }\n      }\n    }\n\n    .anim-automate_ui {\n      position: absolute;\n      width: 100%;\n      height: 100%;\n\n      > div {\n        position: absolute;\n        transform: translate(-50%, -50%);\n        max-width: 114px;\n        text-align: center;\n        display: flex;\n        flex-direction: column;\n        align-items: center;\n        opacity: 0;\n\n        p {\n          font-family: $font-family-inter;\n          margin: 0;\n          color: #fff;\n          font-size: 13px;\n          line-height: 17px;\n        }\n\n        span {\n          display: block;\n          opacity: 0.6;\n          font-family: 12px;\n        }\n\n        &:before {\n          content: \"\";\n          display: block;\n          width: 20px;\n          height: 50px;\n          margin-bottom: 12px;\n          background-repeat: no-repeat;\n          background-size: 100%;\n        }\n      }\n\n      .master:before {\n        background-image: url(\"/img/pro/pro-automate-animation/master.png\");\n        width: 100px;\n        height: 30px;\n        background-size: 100px 30px;\n      }\n\n      .staging:before {\n        background-image: url(\"/img/pro/pro-automate-animation/staging.png\");\n        width: 110px;\n        height: 30px;\n        background-size: 110px 30px;\n      }\n\n      .qa:before {\n        background-image: url(\"/img/pro/pro-automate-animation/qa.png\");\n        width: 61px;\n        height: 30px;\n        background-size: 61px 30px;\n      }\n\n      .android:before,\n      .ios:before,\n      .web:before {\n        width: 62px;\n        height: 62px;\n        background-size: 62px 62px;\n      }\n\n      .android:before {\n        background-image: url(\"/img/pro/pro-automate-animation/android.png\");\n      }\n\n      .ios:before {\n        background-image: url(\"/img/pro/pro-automate-animation/ios.png\");\n      }\n\n      .web:before {\n        background-image: url(\"/img/pro/pro-automate-animation/js.png\");\n      }\n\n      .testflight:before {\n        background-image: url(\"/img/pro/pro-automate-animation/testflight.png\");\n        width: 53px;\n        height: 53px;\n        background-size: 53px 53px;\n      }\n\n      .playstore:before {\n        background-image: url(\"/img/pro/pro-automate-animation/playstore.png\");\n        width: 50px;\n        height: 55px;\n        background-size: 50px 55px;\n      }\n\n      .webhook:before {\n        background-image: url(\"/img/pro/pro-automate-animation/webhook.png\");\n        width: 58px;\n        height: 54px;\n        background-size: 58px 54px;\n      }\n\n      .master,\n      .staging,\n      .qa {\n        left: 50%;\n        top: 195px;\n      }\n\n      .android,\n      .ios,\n      .web {\n        left: 50%;\n        top: 368px;\n      }\n\n      .android,\n      .web {\n        margin-left: 174px;\n      }\n\n      .ios {\n        margin-left: -178px;\n      }\n\n      .testflight,\n      .playstore,\n      .webhook {\n        left: 50%;\n        top: 540px;\n      }\n\n      .testflight {\n        margin-left: -352px;\n      }\n\n      .playstore {\n        margin-left: 352px;\n      }\n    }\n  }\n\n  .pro-features {\n    padding: 196px 0;\n    background-color: #394072;\n\n    hgroup {\n      text-align: center;\n      max-width: 560px;\n      margin-left: auto;\n      margin-right: auto;\n\n      h3 {\n        color: #fff;\n        font-size: 36px;\n        font-weight: 600;\n        line-height: 40px;\n        margin-top: 0;\n      }\n\n      p {\n        color: #d7d9eb;\n        font-family: $font-family-inter;\n        font-size: 20px;\n        line-height: 32px;\n      }\n    }\n\n    ul {\n      margin: 0 -24px 0;\n      padding: 0;\n      display: flex;\n      flex-wrap: wrap;\n      list-style-type: none;\n    }\n\n    li {\n      flex: 0 0 25%;\n      margin-top: 86px;\n      padding: 0 24px;\n\n      h5 {\n        color: #fff;\n        font-size: 20px;\n        font-weight: 600;\n        margin-bottom: 18px;\n        margin-top: 0;\n        display: flex;\n        align-items: center;\n      }\n\n      p {\n        color: #b9bcd8;\n        font-family: $font-family-inter;\n        font-size: 16px;\n        line-height: 28px;\n      }\n    }\n\n    [class^=\"pro-feature--\"] h5::before {\n      display: block;\n      content: \"\";\n      width: 24px;\n      height: 24px;\n      background-image: url(\"/img/pro/pro-feature-sprite.png\");\n      background-repeat: no-repeat;\n      background-size: 24px 192px;\n      margin-right: 12px;\n    }\n\n    .pro-feature--app-dashboard h5::before {\n      background-position: 0 0;\n    }\n\n    .pro-feature--configurable h5::before {\n      background-position: 0 calc(-1 * 24px);\n    }\n\n    .pro-feature--clean-builds h5::before {\n      background-position: 0 calc(-2 * 24px);\n    }\n\n    .pro-feature--mobile-ci-cd h5::before {\n      background-position: 0 calc(-3 * 24px);\n    }\n\n    .pro-feature--git-integrations h5::before {\n      background-position: 0 calc(-4 * 24px);\n    }\n\n    .pro-feature--connected-services h5::before {\n      background-position: 0 calc(-5 * 24px);\n    }\n\n    .pro-feature--live-app-updating h5::before {\n      background-position: 0 calc(-6 * 24px);\n    }\n\n    .pro-feature--role-based-controls h5::before {\n      background-position: 0 calc(-7 * 24px);\n    }\n\n    @media (max-width: $screen-md-max) {\n      li {\n        flex: 0 0 33%;\n      }\n    }\n\n    @media (max-width: $screen-sm-max) {\n      padding: 90px 0;\n      text-align: center;\n\n      h5 {\n        justify-content: center;\n      }\n\n      li {\n        flex: 0 0 50%;\n      }\n    }\n\n    @media (max-width: $screen-xs-max) {\n      hgroup h3 {\n        font-size: 30px;\n      }\n\n      li {\n        flex: 0 0 100%;\n        margin-top: 36px;\n      }\n    }\n  }\n\n  .get-started {\n    background: linear-gradient(\n      45deg,\n      rgb(27, 31, 58) 0%,\n      rgb(41, 47, 82) 100%\n    );\n\n    overflow: auto;\n\n    .container {\n      align-items: center;\n      display: flex;\n      margin-bottom: 120px;\n      margin-top: 120px;\n    }\n\n    hgroup {\n      letter-spacing: -0.025em;\n      flex-grow: 1;\n    }\n\n    h2 {\n      color: #e0e3f6;\n      font-size: 28px;\n      line-height: 36px;\n      font-weight: 400;\n      letter-spacing: -0.02em;\n      margin: 0;\n      max-width: 680px;\n\n      strong {\n        font-weight: 600;\n        color: #fff;\n      }\n    }\n\n    h3 {\n      color: #8aa6ff;\n      font-size: 24px;\n      line-height: 36px;\n      font-weight: 400;\n      margin: 0;\n    }\n\n    .btn {\n      font-size: 15px;\n      text-transform: uppercase;\n      letter-spacing: 0.1em;\n      font-weight: 700;\n      border-radius: 100px;\n      background-color: #5fa3ff;\n      padding: 16px 28px 14px;\n\n      &:hover {\n        background-color: #4895fc;\n      }\n    }\n\n    @media (max-width: $screen-sm-max) {\n      .container {\n        display: block;\n        text-align: center;\n      }\n\n      hgroup {\n        padding-bottom: 16px;\n      }\n\n      .btn-group {\n        padding-bottom: 96px;\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "assets/scss/pages/products/advisory.scss",
    "content": "@import \"../../vars\";\n@import \"bootstrap-sass/assets/stylesheets/bootstrap/variables\";\n\n#page-products-advisory {\n  img {\n    height: auto;\n  }\n\n  .top {\n    text-align: center;\n    background-color: #171e2a;\n    margin-top: -148px;\n    padding-top: 235px;\n    padding-bottom: 140px;\n    background-image: url(\"/img/products/advisory/advisory-hero-bg.png\");\n    background-repeat: no-repeat;\n    background-size: cover;\n    background-position: center center;\n\n    hgroup {\n      color: #fff;\n\n      h4 {\n        line-height: 25px;\n        font-size: 12px;\n        letter-spacing: 0.14em;\n        text-transform: uppercase;\n        color: #b2becd;\n        font-family: $font-family-monospace;\n        margin-bottom: 0;\n      }\n\n      h1,\n      p {\n        margin-left: auto;\n        margin-right: auto;\n      }\n\n      h1 {\n        line-height: 63px;\n        font-size: 56px;\n        letter-spacing: -0.02em;\n        margin-top: 14px;\n        max-width: 600px;\n      }\n\n      p {\n        font-size: 22px;\n        line-height: 30px;\n        max-width: 540px;\n        color: #dee3ea;\n      }\n\n      .btn {\n        margin-top: 24px;\n        font-weight: 700;\n        font-size: 14px;\n        letter-spacing: 0.06em;\n      }\n\n      @media (max-width: $screen-sm) {\n        h1 {\n          font-size: 48px;\n          line-height: 54px;\n        }\n      }\n\n      @media (max-width: $screen-xs) {\n        h1 {\n          font-size: 40px;\n          line-height: 44px;\n        }\n\n        p {\n          line-height: 28px;\n          font-size: 18px;\n        }\n      }\n    }\n\n    @media (max-width: $screen-sm) {\n      margin-top: 0;\n      padding-top: 54px;\n      padding-bottom: 78px;\n    }\n  }\n\n  main section {\n    padding: 72px 0;\n\n    h2 {\n      font-size: 32px;\n      line-height: 42px;\n      letter-spacing: -0.03em;\n      color: #1a232f;\n      margin-bottom: 20px;\n    }\n\n    h4 {\n      font-weight: 600;\n      font-size: 18px;\n      line-height: 24px;\n      letter-spacing: -0.02em;\n      color: #1a232f;\n      margin-top: 16px;\n      margin-bottom: 6px;\n    }\n\n    p {\n      color: #4e5b6a;\n      line-height: 26px;\n      font-size: 16px;\n      letter-spacing: -0.01em;\n      font-family: $font-family-inter;\n    }\n\n    p.large {\n      color: #27323f;\n      line-height: 39px;\n      font-size: 22px;\n      letter-spacing: -0.02em;\n      margin-bottom: 24px;\n    }\n\n    p.small {\n      line-height: 22px;\n      font-size: 14px;\n      letter-spacing: -0.02em;\n      color: #5b708b;\n    }\n\n    .btn {\n      color: #fff;\n      background: #3880ff;\n      box-shadow: 0px 0px 2px rgba(0, 20, 56, 0.14),\n        0px 2px 3px rgba(0, 20, 56, 0.08);\n      border-radius: 84px;\n      font-weight: 700;\n      font-size: 14px;\n      letter-spacing: 0.06em;\n      padding: 19px 25px 19px;\n      height: 52px;\n      display: flex;\n      align-items: center;\n\n      ion-icon {\n        font-size: 18px;\n        margin-left: 4px;\n        transform: translate(0, -1px);\n      }\n\n      &:hover {\n        background-color: lighten(#3880ff, 2%);\n        ion-icon {\n          transform: translate(1px, -1px);\n        }\n      }\n    }\n\n    @media (max-width: $screen-sm) {\n      padding: 60px 0;\n    }\n    @media (max-width: $screen-xs) {\n      padding: 40px 0;\n    }\n  }\n\n  .flex {\n    display: flex;\n    justify-content: space-between;\n  }\n\n  .measure {\n    max-width: 560px;\n\n    &-lg {\n      max-width: 720px;\n    }\n  }\n\n  .customer-logos {\n    padding: 0;\n\n    ul {\n      padding: 32px 0;\n      list-style-type: none;\n      display: flex;\n      justify-content: space-between;\n      align-items: center;\n    }\n\n    [class^=\"customer-logo\"] {\n      display: block;\n      background-image: url(\"/img/products/advisory/advisory-logo-sprite.png\");\n      background-repeat: no-repeat;\n      background-size: 176px 193px;\n    }\n\n    .customer-logo--aaa {\n      width: 72px;\n      height: 42px;\n      background-position: 0 0;\n    }\n\n    .customer-logo--amtrak {\n      width: 176px;\n      height: 20px;\n      background-position: 0 -43px;\n    }\n\n    .customer-logo--panera {\n      width: 112px;\n      height: 39px;\n      background-position: 0 -64px;\n    }\n\n    .customer-logo--ge {\n      width: 48px;\n      height: 49px;\n      background-position: 0 -103px;\n    }\n\n    .customer-logo--rbi {\n      width: 62px;\n      height: 41px;\n      background-position: 0 -152px;\n    }\n\n    img {\n      height: 48px;\n      margin-left: auto;\n      margin-right: auto;\n    }\n\n    @media (max-width: $screen-md) {\n      [class^=\"customer-logo\"] {\n        transform: scale(0.75);\n      }\n    }\n\n    @media (max-width: $screen-sm) {\n      ul {\n        padding-bottom: 0;\n        padding-bottom: 0;\n      }\n    }\n\n    @media (max-width: $screen-xs) {\n      ul {\n        justify-content: center;\n        flex-wrap: wrap;\n        margin: -10px auto;\n        max-width: 460px;\n      }\n      [class^=\"customer-logo\"] {\n        transform: scale(0.7);\n        margin: 3px;\n      }\n    }\n  }\n\n  .goals {\n    @media (max-width: $screen-md) {\n      .flex {\n        flex-direction: column;\n      }\n\n      .checkmark-list--large {\n        padding-left: 0;\n        padding-top: 24px;\n        max-width: 460px;\n      }\n    }\n  }\n\n  .lifecycle {\n    .flex {\n      width: 100%;\n    }\n\n    .illustration,\n    hgroup {\n      flex: 0 0 50%;\n    }\n\n    .illustration img {\n      width: 100%;\n      max-width: 430px;\n      margin-top: 44px;\n    }\n\n    ul {\n      list-style: none;\n      margin: 0;\n      padding: 0;\n      display: flex;\n      flex-wrap: wrap;\n    }\n\n    li {\n      flex: 0 0 50%;\n      padding-right: 50px;\n      margin-bottom: 12px;\n    }\n\n    h5 {\n      text-transform: uppercase;\n      letter-spacing: 0.08em;\n      font-size: 13px;\n\n      &.blue {\n        color: #3880ff;\n      }\n      &.purple {\n        color: #6030ff;\n      }\n      &.green {\n        color: #43c465;\n      }\n      &.gray {\n        color: #5b708b;\n      }\n    }\n\n    @media (max-width: $screen-md) {\n      .flex {\n        flex-direction: column;\n      }\n      .illustration {\n        text-align: center;\n      }\n      .illustration img {\n        margin-top: 0;\n        margin-bottom: 44px;\n      }\n      h2,\n      hgroup > p {\n        text-align: center;\n      }\n    }\n\n    @media (max-width: $screen-xs) {\n      li {\n        flex: 0 0 100%;\n      }\n\n      h2,\n      hgroup > p {\n        text-align: left;\n      }\n    }\n  }\n\n  .book-a-session {\n    .well {\n      padding: 54px 54px 48px;\n      border-radius: 8px;\n      background-color: #f4f6fc;\n      display: flex;\n      align-items: flex-end;\n      justify-content: space-between;\n    }\n\n    h3 {\n      margin-top: 0;\n      font-size: 26px;\n      letter-spacing: -0.02em;\n      color: #020814;\n      font-weight: 600;\n    }\n\n    p.large {\n      line-height: 32px;\n      font-size: 20px;\n      letter-spacing: -0.02em;\n      color: #73849a;\n      margin-bottom: 0;\n\n      strong {\n        font-weight: 400;\n        color: #020814;\n      }\n    }\n\n    .btn {\n      margin-left: 40px;\n    }\n\n    @media (max-width: $screen-lg) {\n      p.large {\n        font-size: 18px;\n        line-height: 30px;\n        letter-spacing: -0.01em;\n      }\n    }\n\n    @media (max-width: $screen-md) {\n      .well {\n        flex-direction: column;\n        text-align: center;\n        align-items: center;\n      }\n\n      .btn {\n        margin-left: 0px;\n        margin-top: 18px;\n      }\n    }\n\n    @media (max-width: $screen-xs) {\n      .well {\n        padding: 32px;\n      }\n    }\n  }\n\n  .what-you-get {\n    .checkmark-list--large {\n      max-width: 100%;\n      padding: 0;\n      margin: 38px 0 0;\n      display: flex;\n      flex-wrap: wrap;\n    }\n\n    .checkmark-list--large li {\n      flex-direction: column;\n      flex: 0 0 25%;\n      padding-right: 24px;\n      margin-bottom: 24px;\n      position: relative;\n\n      & + li {\n        margin-top: 0;\n      }\n\n      i {\n        position: absolute;\n        top: 11px;\n      }\n\n      h4 {\n        margin-left: 32px;\n      }\n    }\n\n    @media (max-width: $screen-md) {\n      .checkmark-list--large li {\n        flex: 0 0 33.33%;\n      }\n    }\n\n    @media (max-width: $screen-sm) {\n      .checkmark-list--large li {\n        flex: 0 0 50%;\n      }\n    }\n\n    @media (max-width: $screen-xs) {\n      .checkmark-list--large li {\n        flex: 0 0 100%;\n      }\n    }\n  }\n\n  .use-cases {\n    hgroup h2 {\n      margin-bottom: 4px;\n    }\n\n    hgroup p.large {\n      margin-bottom: 28px;\n    }\n\n    .row-list {\n      list-style-type: none;\n      margin: 0;\n      padding: 0;\n\n      & > li {\n        display: block;\n        border-top: 1px solid #dee3ea;\n        display: flex;\n        padding-top: 32px;\n      }\n\n      h4 {\n        margin-top: 4px;\n        font-size: 20px;\n      }\n\n      h5 {\n        margin-top: 7px;\n        font-size: 16px;\n        font-weight: 600;\n      }\n\n      & > li + li {\n        margin-top: 32px;\n      }\n\n      .col {\n        flex: 0 0 50%;\n      }\n\n      .measure {\n        max-width: 440px;\n      }\n\n      hgroup {\n        margin-right: 60px;\n      }\n    }\n\n    @media (max-width: $screen-sm) {\n      .row-list {\n        & > li {\n          flex-direction: column;\n        }\n\n        hgroup {\n          margin-right: 0;\n          margin-bottom: 20px;\n        }\n\n        .measure {\n          max-width: 580px;\n        }\n      }\n    }\n  }\n\n  .modal form {\n    max-width: 100%;\n  }\n  .modal-body {\n    padding: 32px 48px 48px;\n  }\n\n  .call-to-action {\n    background-color: #f6f8fb;\n    padding-top: 140px;\n    padding-bottom: 100px;\n\n    .container {\n      max-width: 768px;\n    }\n\n    hgroup {\n      text-align: center;\n      margin-bottom: 40px;\n\n      h3 {\n        font-size: 28px;\n        font-weight: 600;\n        text-align: center;\n        letter-spacing: -0.02em;\n        color: #616e7e;\n        margin-bottom: 4px;\n\n        em {\n          font-style: normal;\n          color: #1a232f;\n        }\n      }\n      p {\n        line-height: 32px;\n        font-size: 18px;\n        text-align: center;\n        letter-spacing: -0.01em;\n        color: #5b708b;\n\n        b {\n          font-weight: 500;\n        }\n      }\n    }\n\n    @media (max-width: $screen-sm) {\n      padding-top: 80px;\n    }\n  }\n}\n"
  },
  {
    "path": "assets/scss/pages/products/appflow.scss",
    "content": "@import \"../../vars\";\n@import \"bootstrap-sass/assets/stylesheets/bootstrap/variables\";\n\n#page-products {\n  img {\n    height: auto;\n  }\n\n  background-color: #fff;\n  height: auto !important;\n  min-height: auto;\n\n  ionic-sub-header .btn {\n    background-color: #6a7fff;\n  }\n\n  .pre-header {\n    margin-bottom: 0px;\n  }\n\n  #sub-header > .container {\n    align-items: center;\n\n    &:before {\n      border-top-color: rgba(255, 255, 255, 0.1);\n    }\n  }\n\n  > .cta {\n    position: relative;\n    background-image: linear-gradient(90deg, #634cf2 0%, #67a5f8 100%);\n    margin-top: 0;\n    padding-top: 12px;\n\n    @mixin bg-layout($x-spacing, $y-begin, $y-spacing) {\n      &:nth-child(1) {\n        opacity: 0.05;\n        top: $y-begin;\n        left: (100% / $x-spacing) * 0;\n      }\n      &:nth-child(2) {\n        opacity: 0.1;\n        top: ($y-begin - ($y-spacing * 1));\n        left: (100% / $x-spacing) * 1;\n      }\n      &:nth-child(3) {\n        opacity: 0.09;\n        top: ($y-begin - ($y-spacing * 2));\n        left: (100% / $x-spacing) * 2;\n      }\n      &:nth-child(4) {\n        opacity: 0.15;\n        top: ($y-begin - ($y-spacing * 3));\n        left: (100% / $x-spacing) * 3;\n      }\n      &:nth-child(5) {\n        opacity: 0.16;\n        top: ($y-begin - ($y-spacing * 4));\n        left: (100% / $x-spacing) * 4;\n      }\n      &:nth-child(6) {\n        opacity: 0.08;\n        top: ($y-begin - ($y-spacing * 5));\n        left: (100% / $x-spacing) * 5;\n      }\n    }\n\n    .cta__background {\n      content: \"\";\n      background-position: center center;\n      background-size: cover;\n      display: block;\n      width: 100%;\n      height: 100%;\n      position: absolute;\n      z-index: 0;\n      top: 0;\n      left: 0;\n      background-image: linear-gradient(90deg, #634cf2 0%, #67a5f8 100%);\n      // background-image: url(\"/img/pro/pro-hero-bg.png\");\n      background-size: cover;\n      opacity: 0.5;\n      overflow: hidden;\n\n      & > div {\n        width: 100%;\n        height: 100%;\n        position: absolute;\n        background-image: linear-gradient(\n          90deg,\n          #fff 0%,\n          rgba(255, 255, 255, 0) 75%\n        );\n        transform: translate(-20px, 0) rotate(-3deg) skew(16deg, 0deg)\n          scale(1, 1.5);\n        transform-origin: top;\n\n        @include bg-layout(6.5, 75%, 25%);\n\n        @media (max-width: $screen-sm) {\n          @include bg-layout(4, 60%, 15%);\n        }\n      }\n    }\n\n    hgroup {\n      text-align: left;\n      position: relative;\n      max-width: 100%;\n      padding-bottom: 84px;\n      padding-top: 64px;\n      z-index: 1;\n\n      .announcement {\n        transition: box-shadow 0.3s;\n        display: inline-block;\n        background-color: #f5d15f;\n        color: #534926;\n        font-family: $font-family-inter;\n        padding: 3px 14px 4px;\n        border-radius: 100px;\n\n        &__title {\n          letter-spacing: 0.14em;\n          text-transform: uppercase;\n          font-weight: 600;\n          font-size: 12px;\n          line-height: 120%;\n        }\n        &__message {\n          font-size: 12px;\n          letter-spacing: -0.01em;\n        }\n\n        i::after {\n          transition: left 0.2s;\n          font-style: normal;\n          content: \"\\f3d1\";\n          font-family: \"Ionicons\";\n          font-size: 12px;\n          position: relative;\n          margin-left: 2px;\n          top: 1px;\n        }\n\n        &:hover {\n          box-shadow: 0px 4px 8px rgba(2, 8, 20, 0.1),\n            0px 2px 4px rgba(2, 8, 20, 0.08);\n        }\n        &:hover i::after {\n          left: 1px;\n        }\n      }\n\n      h1 {\n        margin-top: 36px;\n        font-size: 56px;\n        line-height: 60px;\n        font-weight: 700;\n        letter-spacing: -0.038em;\n        margin-bottom: 264x;\n      }\n\n      p {\n        letter-spacing: -0.03em;\n        max-width: 700px;\n        line-height: 1.6em;\n        font-size: 22px;\n        font-weight: 400;\n        color: #fff;\n      }\n\n      .cta-buttons {\n        margin-top: 30px;\n        color: white;\n        letter-spacing: -0.02em;\n\n        > .btn {\n          align-items: center;\n          background-color: #7898ff;\n          border-radius: 8px;\n          display: inline-flex;\n          font-size: 16px;\n          font-weight: 700;\n          text-transform: uppercase;\n          letter-spacing: 0.1em;\n          padding: 18px 24px 16px;\n\n          &:not(:hover) {\n            box-shadow: none;\n          }\n        }\n\n        > .btn--primary {\n          background-color: #fff;\n          color: #4a68ff;\n        }\n\n        .sales {\n          color: rgba(white, 0.5);\n          margin-top: 6px;\n          display: inline-block;\n          text-decoration: underline;\n          transition: 0.2s color;\n\n          &:hover {\n            color: rgba(white, 0.8);\n          }\n        }\n\n        + img {\n          margin-top: 8px;\n          display: block;\n        }\n      }\n\n      @media (max-width: $screen-sm) {\n        max-width: 480px;\n        margin-left: auto;\n        margin-right: auto;\n        text-align: center;\n        padding-bottom: 40px;\n      }\n\n      @media (max-width: $screen-xs) {\n        padding-top: 14px;\n\n        h1 {\n          font-size: 40px;\n          line-height: 46px;\n        }\n\n        h3 {\n          max-width: 246px;\n          margin-left: auto;\n          margin-right: auto;\n        }\n\n        p {\n          font-size: 18px;\n          line-height: 1.6em;\n        }\n\n        .btn {\n          width: 100%;\n          margin-right: 0;\n          justify-content: center;\n          margin-bottom: 8px;\n        }\n      }\n\n      // fadein animations\n      .announcement,\n      h1,\n      p,\n      .cta-buttons .btn,\n      .cta-buttons + img {\n        animation: 1s fadeInUp forwards;\n        opacity: 0;\n      }\n\n      .announcement {\n        animation-delay: 0.4s;\n      }\n      h1 {\n        animation-delay: 0.6s;\n      }\n      p {\n        animation-delay: 0.9s;\n      }\n      .cta-buttons .btn {\n        animation-delay: 1.1s;\n      }\n      .cta-buttons .btn:last-child {\n        animation-delay: 1.2s;\n      }\n      .cta-buttons + img {\n        animation-delay: 2s;\n      }\n    }\n  }\n\n  ionic-appflow-activator {\n    display: flex;\n    flex-direction: column;\n    align-items: center;\n    width: 100%;\n    position: relative;\n    z-index: 1;\n\n    .app-screenshot {\n      box-sizing: border-box;\n      position: relative;\n      height: 546px;\n      width: calc(100vw - 32px);\n      max-width: 1172px;\n      opacity: 0;\n      animation: fadeIn 1s 1.8s forwards;\n      z-index: 10;\n      margin-bottom: -70px;\n    }\n\n    @media (max-width: 1054px) {\n      .app-screenshot {\n        height: unset;\n        padding-top: 54%;\n      }\n    }\n\n    @media (max-width: $screen-sm) {\n      .app-screenshot {\n        padding-top: 58%;\n        width: calc(100vw - 16px);\n      }\n\n      li {\n        text-align: center;\n        padding-top: 16px;\n      }\n\n      li + li {\n        margin-left: 8px;\n      }\n\n      li h5 {\n        font-size: 10px;\n        line-height: 1.2;\n        margin-top: 4px;\n        margin-bottom: 20px;\n      }\n\n      li p {\n        display: none;\n      }\n    }\n\n    @media (max-width: $screen-xs) {\n      .app-screenshot {\n        padding-top: 64%;\n      }\n      // li h5 {\n      //   display: none;\n      // }\n    }\n  }\n\n  .hero {\n    background: no-repeat center center;\n    background-size: cover;\n    overflow: hidden;\n    padding-top: 0;\n    padding-bottom: 0;\n\n    .content {\n      width: 39%;\n      text-align: left;\n      padding-top: 200px;\n      padding-bottom: 220px;\n      color: #070f1a;\n      min-height: 724px;\n      position: relative;\n\n      &.dark {\n        color: rgba(white, 0.8);\n\n        h2,\n        .hero__cta {\n          color: #151d2b;\n        }\n\n        p {\n          color: #596a89;\n        }\n      }\n\n      h2 {\n        font-size: 48px;\n        line-height: 1.1;\n        letter-spacing: -0.03em;\n        font-weight: 600;\n        margin-bottom: 12px;\n      }\n\n      p {\n        font-size: 20px;\n        line-height: 1.6;\n        font-family: $font-family-inter;\n        font-weight: 400;\n      }\n\n      h4 {\n        font-family: $font-family-monospace;\n        padding-top: 100px;\n        position: relative;\n        color: #808fa7;\n\n        &::before {\n          background: url(\"/img/pro/product-header-icons.png\") 0 0 no-repeat;\n          background-size: 64px;\n          width: 64px;\n          height: 64px;\n          content: \"\";\n          position: absolute;\n          top: 0;\n        }\n      }\n    }\n\n    &__cta-bar {\n      display: flex;\n      align-items: center;\n\n      a + a {\n        margin-left: 20px;\n      }\n    }\n\n    &__cta-bar-secondary {\n      margin-left: 30px;\n    }\n\n    @media (max-width: $screen-xs-max) {\n      &__cta-bar {\n        flex-direction: column;\n      }\n      &__cta-bar-secondary {\n        margin-left: 0;\n        margin-top: 24px;\n      }\n    }\n\n    &__cta {\n      border-bottom-style: solid;\n      border-bottom-width: 2px;\n      color: inherit;\n      font-size: 18px;\n      font-weight: 700;\n      padding-bottom: 4px;\n      transition: border-bottom-color 100ms ease-in-out;\n\n      &:after {\n        content: \"\\f287\";\n        font-family: \"Ionicons\";\n        font-size: 16px;\n        margin-left: 5px;\n      }\n\n      &:hover {\n        border-bottom-color: transparent;\n      }\n    }\n\n    &__icon-link {\n      transition: opacity 0.3s;\n      display: inline-block;\n      opacity: 0.7;\n\n      i {\n        font-size: 30px;\n        color: #fff;\n      }\n\n      &:hover {\n        opacity: 1;\n      }\n    }\n\n    .container {\n      position: relative;\n\n      &::before {\n        background-repeat: no-repeat;\n        background-position: right 0;\n        background-size: contain;\n        top: 0;\n        right: 0;\n        left: 0;\n        bottom: 0;\n        content: \"\";\n        display: block;\n        position: absolute;\n        opacity: 0;\n        transition: 0.2s opacity;\n      }\n    }\n\n    &.active .container::before {\n      opacity: 1;\n    }\n\n    h4 {\n      font-size: 11px;\n      font-weight: 700;\n      letter-spacing: 0.2em;\n      color: #272a2f;\n      text-transform: uppercase;\n      margin-bottom: 30px;\n    }\n\n    h3 {\n      font-size: 36px;\n      font-weight: 700;\n      letter-spacing: -0.02em;\n      margin-bottom: 30px;\n    }\n\n    h2 {\n      color: #272a2f;\n      font-size: 36px;\n      margin-bottom: 23px;\n      margin-top: 14px;\n      font-weight: 700;\n      letter-spacing: -0.015em;\n    }\n\n    p {\n      font-size: 16px;\n      font-weight: 600;\n      letter-spacing: -0.026em;\n      line-height: 1.8em;\n      margin-bottom: 30px;\n      color: #5e6777;\n\n      strong {\n        color: #272a2f;\n        font-weight: 700;\n      }\n\n      a {\n        &:hover {\n          color: $blue;\n        }\n      }\n    }\n\n    .btn {\n      padding: 13px 15px;\n      font-size: 14px;\n      font-weight: 600;\n\n      strong {\n        font-weight: 700;\n      }\n\n      &::after {\n        font-family: \"Ionicons\";\n        content: \"\\f287\";\n        font-size: 15px;\n        line-height: 10px;\n        vertical-align: -1px;\n        margin-left: 8px;\n        font-weight: 600;\n        display: inline-block;\n        transition: 0.2s transform;\n      }\n\n      &:hover::after {\n        transform: translate3d(2px, 0, 0);\n      }\n    }\n\n    @media (max-width: $screen-xs) {\n      .content {\n        h2 {\n          font-size: 30px;\n        }\n        p {\n          font-size: 18px;\n          line-height: 1.6em;\n        }\n      }\n    }\n  }\n\n  #overview {\n    background-color: #fff;\n    color: #272a2f;\n    padding-bottom: 60px;\n    padding-top: 140px;\n\n    hgroup {\n      max-width: 760px;\n      margin: 0 auto 68px;\n\n      h3 {\n        font-size: 48px;\n        letter-spacing: -0.04em;\n        font-weight: 600;\n        color: #070f1a;\n        margin-bottom: 20px;\n      }\n\n      p {\n        font-family: $font-family-inter;\n        font-size: 20px;\n        line-height: 160%;\n        color: #616e7e;\n        font-weight: 400;\n      }\n    }\n\n    .features {\n      padding: 0;\n      list-style: none;\n      display: flex;\n      justify-content: space-between;\n      // max-width: 960px;\n      margin: 0 auto;\n\n      h4 {\n        font-size: 20px;\n        text-transform: none;\n        letter-spacing: -0.02em;\n        margin-top: 5px;\n        margin-bottom: 13px;\n        font-weight: 600;\n        color: #010610;\n      }\n\n      p {\n        font-family: $font-family-inter;\n        font-size: 16px;\n        line-height: 28px;\n        color: #687e99;\n        letter-spacing: -0.015em;\n        font-weight: 400;\n      }\n    }\n\n    li {\n      padding-top: 68px;\n      flex: 0 1 340px;\n      position: relative;\n\n      &::before {\n        background: url(\"/img/pro/pro-feature-icons.png\") 0 0 no-repeat;\n        background-size: 48px;\n        height: 48px;\n        width: 48px;\n        content: \"\";\n        position: absolute;\n        top: 0;\n      }\n\n      &.faster::before {\n        background-position: 0 -48px;\n      }\n      &.happier::before {\n        background-position: 0 -96px;\n      }\n      & + li {\n        margin-left: 24px;\n      }\n    }\n\n    @media (max-width: 520px) {\n      .features {\n        display: block;\n      }\n\n      li {\n        text-align: center;\n\n        &::before {\n          left: calc(50% - 24px);\n        }\n\n        + li {\n          margin-left: 0;\n        }\n      }\n    }\n\n    @media (max-width: $screen-sm) {\n      padding-bottom: 68px;\n      padding-top: 102px;\n    }\n\n    @media (max-width: $screen-xs) {\n      padding-bottom: 48px;\n      padding-top: 72px;\n\n      hgroup {\n        margin-bottom: 42px;\n\n        h3 {\n          font-size: 30px;\n        }\n\n        p {\n          font-size: 18px;\n          line-height: 1.6em;\n        }\n      }\n    }\n  }\n\n  .customers {\n    padding: 0;\n    width: 100%;\n    margin: 64px auto 64px;\n\n    h4 {\n      max-width: 240px;\n      font-weight: 600;\n      font-size: 20px;\n      line-height: 140%;\n      color: #010610;\n    }\n\n    @media (max-width: $screen-sm) {\n      margin-top: 0;\n\n      h4 {\n        text-align: center;\n        margin-left: auto;\n        margin-right: auto;\n      }\n    }\n  }\n\n  .customer-logos {\n    margin-left: -32px;\n    margin-right: -32px;\n    display: flex;\n    flex-wrap: wrap;\n    align-items: center;\n    justify-content: space-between;\n\n    [class^=\"customer-logo\"] {\n      background-image: url(\"/img/pro/pro-customer-sprite.png\");\n      background-repeat: no-repeat;\n      background-size: 72px 187px;\n      margin: 24px 42px;\n    }\n    @media (max-width: $screen-md) {\n      justify-content: start;\n      [class^=\"customer-logo\"] {\n        margin: 24px 28px;\n      }\n    }\n    @media (max-width: $screen-sm) {\n      justify-content: center;\n      padding: 8px;\n    }\n\n    @media (max-width: $screen-xs) {\n      [class^=\"customer-logo\"] {\n        margin: 16px 16px;\n      }\n    }\n\n    .customer-logo--aaa {\n      width: 50px;\n      height: 30px;\n      background-position: 0 0;\n    }\n    .customer-logo--amtrak {\n      background-position: 0 -31px;\n      width: 64px;\n      height: 27px;\n    }\n    .customer-logo--ibm {\n      background-position: 0 -58px;\n      width: 53px;\n      height: 22px;\n    }\n    .customer-logo--cat {\n      background-position: 0 -80px;\n      width: 42px;\n      height: 25px;\n    }\n    .customer-logo--nasa {\n      background-position: 0 -106px;\n      width: 72px;\n      height: 19px;\n    }\n    .customer-logo--nbc {\n      background-position: 0 -126px;\n      width: 49px;\n      height: 28px;\n    }\n    .customer-logo--target {\n      background-position: 0 -154px;\n      width: 32px;\n      height: 33px;\n    }\n  }\n\n  .deploy-to-appstores {\n    background: linear-gradient(0deg, #e7f4ff, #e7f4ff);\n\n    .pill {\n      display: inline-block;\n      font-family: $font-family-inter;\n      background: #d1eaff;\n      border-radius: 20px;\n      color: #4d8dff;\n      padding: 8px 14px;\n      letter-spacing: 0.14em;\n      text-transform: uppercase;\n      font-weight: 600;\n      font-size: 12px;\n      margin-bottom: 8px;\n    }\n\n    .content {\n      width: 100%;\n      max-width: unset;\n      min-height: unset;\n      display: flex;\n      align-items: flex-end;\n      justify-content: space-between;\n      padding-top: 160px;\n      padding-bottom: 80px;\n\n      h2,\n      p {\n        margin-bottom: 0;\n        max-width: 460px;\n      }\n\n      p {\n        margin-left: 24px;\n      }\n    }\n\n    .screen {\n      box-sizing: border-box;\n      margin-left: auto;\n      margin-right: auto;\n      max-width: 1226px;\n      width: 100%;\n      padding: 0 20px;\n      display: flex;\n\n      img {\n        width: 100%;\n        margin-bottom: -24px;\n      }\n\n      ul {\n        padding: 0;\n        flex: 0 0 72px;\n        margin-left: 56px;\n      }\n\n      li {\n        list-style-type: none;\n        text-indent: 999px;\n        display: block;\n        width: 72px;\n        height: 72px;\n        background-image: url(\"/img/appflow/appstore-icon-sprite.png\");\n        background-size: 72px 218px;\n        background-repeat: no-repeat;\n      }\n\n      li + li {\n        margin-top: 32px;\n      }\n\n      .icon-testflight {\n        background-position: 0 -73px;\n      }\n      .icon-google-play {\n        background-position: 0 -146px;\n      }\n    }\n\n    @media (max-width: $screen-md) {\n      .content {\n        padding-top: 80px;\n      }\n      .screen li {\n        transform: scale(0.8);\n      }\n      .screen li + li {\n        margin-top: 16px;\n      }\n    }\n\n    @media (max-width: $screen-sm) {\n      .content {\n        flex-direction: column;\n        align-items: center;\n        text-align: center;\n        padding-bottom: 40px;\n        p {\n          margin-left: 0;\n        }\n      }\n\n      .screen {\n        flex-direction: column-reverse;\n        align-items: center;\n      }\n\n      .screen ul {\n        display: flex;\n        margin-left: 0;\n        margin-bottom: 24px;\n      }\n\n      .screen li + li {\n        margin-top: 0;\n        margin-left: 16px;\n      }\n    }\n  }\n\n  #updates {\n    background-image: linear-gradient(\n      0deg,\n      rgb(255, 255, 255) 0%,\n      rgb(246, 248, 251) 100%\n    );\n    background-size: 100%;\n\n    h4 {\n      &::before {\n        background-position: 0 0;\n      }\n    }\n\n    .content {\n      padding-top: 260px;\n      position: relative;\n      z-index: 10;\n    }\n\n    .anim-updates {\n      position: absolute;\n      z-index: 4;\n      top: 0;\n      bottom: 0;\n      left: 50%;\n      transform: translateX(-100px);\n      display: flex;\n      align-items: center;\n    }\n    .anim-updates__root {\n      width: 726px;\n      height: 437px;\n      position: relative;\n    }\n    .anim-updates__foreground,\n    .anim-updates__background {\n      width: 100%;\n      height: 100%;\n      position: absolute;\n      top: 0;\n      left: 0;\n    }\n    .anim-updates__foreground {\n      z-index: 10;\n      transform: translateZ(1000px);\n    }\n    .anim-updates__background {\n      z-index: 1;\n      transform: translateZ(100px);\n    }\n\n    .anim-updates__device {\n      width: 801px;\n      height: 481px;\n      background-image: url(\"/img/pro/updates-illustration-device.png\");\n      background-repeat: no-repeat;\n      background-size: 801px 481px;\n      position: absolute;\n      top: 0;\n      left: 0;\n      z-index: 5;\n      transform: translateZ(500px);\n    }\n\n    .anim-updates__screen {\n      width: 298px;\n      height: 924px;\n      background: #5d37ff;\n      position: absolute;\n      top: 3px;\n      left: 506px;\n      transform-origin: top left;\n      transform: rotateX(65.4deg) rotateY(1.4deg) rotateZ(32.9deg)\n        skew(-2deg, -4.1deg);\n      border-radius: 32px;\n    }\n    @media (max-width: $screen-md) {\n      .anim-updates {\n        transform: translate(-180px, -56px) scale(0.7);\n      }\n      .content {\n        padding-top: 164px;\n        padding-bottom: 164px;\n        min-height: unset;\n      }\n    }\n    @media (max-width: $screen-sm) {\n      .anim-updates {\n        transform: translateX(-50%) scale(0.7);\n        opacity: 0.3;\n      }\n\n      .content {\n        min-height: unset;\n        padding-top: 164px;\n        padding-bottom: 164px;\n        width: 100%;\n        max-width: 500px;\n        margin-left: auto;\n        margin-right: auto;\n        text-align: center;\n      }\n    }\n\n    @media (max-width: $screen-xs) {\n      .anim-updates {\n        transform: translateX(-50%) scale(0.5);\n      }\n      .content {\n        padding-top: 100px;\n        padding-bottom: 100px;\n      }\n    }\n  }\n\n  #build {\n    background-image: linear-gradient(\n      0deg,\n      rgb(255, 255, 255) 0%,\n      rgb(246, 248, 251) 100%\n    );\n    padding: 100px 0;\n\n    h4 {\n      &::before {\n        background-position: 0 -64px;\n      }\n    }\n\n    .anim-build {\n      position: absolute;\n      left: 0;\n      top: 0;\n      bottom: 0;\n      width: 50%;\n      display: flex;\n      justify-content: center;\n      align-items: center;\n    }\n\n    .anim-build__text {\n      fill: #5d37ff;\n      text-transform: uppercase;\n      font-size: 12px;\n      font-weight: 700;\n      letter-spacing: 0.05em;\n    }\n\n    .content {\n      padding-top: 200px;\n    }\n    @media (max-width: $screen-md) {\n      padding: 0;\n    }\n\n    @media (max-width: $screen-sm) {\n      .container {\n        display: flex;\n        flex-direction: column-reverse;\n        align-items: center;\n      }\n\n      .container::before,\n      .container::after {\n        display: none;\n      }\n\n      .anim-build {\n        position: relative;\n        margin-top: 180px;\n        margin-bottom: 60px;\n        width: 100%;\n        max-width: 360px;\n\n        svg {\n          height: 100%;\n        }\n      }\n\n      .content {\n        width: 100%;\n        max-width: 500px;\n        padding-top: 0;\n        padding-bottom: 164px;\n        text-align: center;\n        margin-left: auto;\n        margin-right: auto;\n        min-height: unset;\n      }\n      .content h4::before {\n        left: calc(50% - 32px);\n      }\n    }\n\n    @media (max-width: $screen-xs) {\n      .anim-build {\n        margin-top: 100px;\n        margin-bottom: 24px;\n        width: 80%;\n        max-width: 280px;\n      }\n\n      .content {\n        padding-bottom: 100px;\n      }\n    }\n  }\n\n  #automate {\n    background-color: #f9fafc;\n    background-image: linear-gradient(\n      0deg,\n      rgb(255, 255, 255) 0%,\n      rgb(246, 248, 251) 100%\n    );\n\n    background-size: 100%;\n    position: relative;\n    padding-bottom: 160px;\n\n    h4 {\n      &::before {\n        background-position: 0 -128px;\n      }\n    }\n\n    .anim-automate {\n      position: absolute;\n      top: 130px;\n      left: 50%;\n      margin-left: -400px;\n      transform: scale(1.1);\n\n      svg {\n        .connector {\n          opacity: 0;\n          stroke-dasharray: 80px;\n        }\n\n        rect.four {\n          opacity: 0.6;\n        }\n\n        #top,\n        #bottom {\n          position: relative;\n        }\n        #bottom {\n          z-index: 1;\n        }\n        #top {\n          z-index: 2;\n        }\n      }\n\n      svg > g {\n        transform: translateY(50px);\n      }\n    }\n\n    @media (max-width: $screen-md) {\n      padding-bottom: 320px;\n\n      .content {\n        width: 100%;\n        max-width: 500px;\n        padding-top: 140px;\n        text-align: center;\n        margin-left: auto;\n        margin-right: auto;\n      }\n      .content h4::before {\n        left: calc(50% - 32px);\n      }\n      .anim-automate {\n        transform: scale(0.8);\n        top: 380px;\n        margin-left: -670px;\n      }\n    }\n\n    @media (max-width: $screen-sm) {\n      padding-bottom: 180px;\n      .content {\n        padding-top: 100px;\n      }\n      .anim-automate {\n        transform: scale(0.7);\n        top: 260px;\n      }\n    }\n\n    .anim-automate_ui {\n      position: absolute;\n      width: 100%;\n      height: 100%;\n\n      > div {\n        position: absolute;\n        transform: translate(-50%, -50%);\n        max-width: 114px;\n        text-align: center;\n        display: flex;\n        flex-direction: column;\n        align-items: center;\n        opacity: 0;\n\n        p {\n          font-family: $font-family-inter;\n          margin: 0;\n          color: #fff;\n          font-size: 13px;\n          line-height: 17px;\n        }\n\n        span {\n          display: block;\n          opacity: 0.6;\n          font-family: 12px;\n        }\n\n        &:before {\n          content: \"\";\n          display: block;\n          width: 20px;\n          height: 50px;\n          margin-bottom: 12px;\n          background-repeat: no-repeat;\n          background-size: 100%;\n        }\n      }\n\n      .master:before {\n        background-image: url(\"/img/pro/pro-automate-animation/master.png\");\n        width: 100px;\n        height: 30px;\n        background-size: 100px 30px;\n      }\n\n      .staging:before {\n        background-image: url(\"/img/pro/pro-automate-animation/staging.png\");\n        width: 110px;\n        height: 30px;\n        background-size: 110px 30px;\n      }\n\n      .qa:before {\n        background-image: url(\"/img/pro/pro-automate-animation/qa.png\");\n        width: 61px;\n        height: 30px;\n        background-size: 61px 30px;\n      }\n\n      .android:before,\n      .ios:before,\n      .web:before {\n        width: 62px;\n        height: 62px;\n        background-size: 62px 62px;\n      }\n\n      .android:before {\n        background-image: url(\"/img/pro/pro-automate-animation/android.png\");\n      }\n\n      .ios:before {\n        background-image: url(\"/img/pro/pro-automate-animation/ios.png\");\n      }\n\n      .web:before {\n        background-image: url(\"/img/pro/pro-automate-animation/js.png\");\n      }\n\n      .testflight:before {\n        background-image: url(\"/img/pro/pro-automate-animation/testflight.png\");\n        width: 53px;\n        height: 53px;\n        background-size: 53px 53px;\n      }\n\n      .playstore:before {\n        background-image: url(\"/img/pro/pro-automate-animation/playstore.png\");\n        width: 50px;\n        height: 55px;\n        background-size: 50px 55px;\n      }\n\n      .webhook:before {\n        background-image: url(\"/img/pro/pro-automate-animation/webhook.png\");\n        width: 58px;\n        height: 54px;\n        background-size: 58px 54px;\n      }\n\n      .master,\n      .staging,\n      .qa {\n        left: 50%;\n        top: 195px;\n      }\n\n      .android,\n      .ios,\n      .web {\n        left: 50%;\n        top: 368px;\n      }\n\n      .android,\n      .web {\n        margin-left: 174px;\n      }\n\n      .ios {\n        margin-left: -178px;\n      }\n\n      .testflight,\n      .playstore,\n      .webhook {\n        left: 50%;\n        top: 540px;\n      }\n\n      .testflight {\n        margin-left: -352px;\n      }\n\n      .playstore {\n        margin-left: 352px;\n      }\n    }\n  }\n\n  .pro-features {\n    padding: 186px 0;\n    background-color: #7870fb;\n\n    hgroup {\n      text-align: center;\n      max-width: 560px;\n      margin-left: auto;\n      margin-right: auto;\n\n      h3 {\n        color: #fff;\n        font-weight: 600;\n        font-size: 48px;\n        line-height: 110%;\n        margin-top: 0;\n        margin-bottom: 24px;\n      }\n\n      p {\n        color: rgba(255, 255, 255, 0.8);\n        font-family: $font-family-inter;\n        font-size: 20px;\n        line-height: 32px;\n        letter-spacing: -0.02em;\n      }\n    }\n\n    ul {\n      margin: 0 -24px 0;\n      padding: 0;\n      display: flex;\n      flex-wrap: wrap;\n      list-style-type: none;\n    }\n\n    li {\n      flex: 0 0 25%;\n      margin-top: 86px;\n      padding: 0 24px;\n      // opacity: 0;\n\n      h5 {\n        color: #fff;\n        font-size: 20px;\n        font-weight: 600;\n        margin-bottom: 18px;\n        margin-top: 0;\n        display: flex;\n        align-items: center;\n      }\n\n      p {\n        color: rgba(255, 255, 255, 0.8);\n        font-family: $font-family-inter;\n        font-size: 16px;\n        line-height: 28px;\n      }\n\n      &:nth-child(2) {\n        transition-delay: 0.1s !important;\n      }\n      &:nth-child(3) {\n        transition-delay: 0.2s !important;\n      }\n      &:nth-child(4) {\n        transition-delay: 0.3s !important;\n      }\n      &:nth-child(5) {\n        transition-delay: 0.4s !important;\n      }\n      &:nth-child(6) {\n        transition-delay: 0.5s !important;\n      }\n      &:nth-child(7) {\n        transition-delay: 0.6s !important;\n      }\n      &:nth-child(8) {\n        transition-delay: 0.7s !important;\n      }\n    }\n\n    [class^=\"pro-feature--\"] h5::before {\n      display: block;\n      content: \"\";\n      width: 24px;\n      height: 24px;\n      background-image: url(\"/img/pro/pro-feature-sprite.png\");\n      background-repeat: no-repeat;\n      background-size: 24px 192px;\n      margin-right: 12px;\n    }\n\n    .pro-feature--app-dashboard h5::before {\n      background-position: 0 0;\n    }\n\n    .pro-feature--configurable h5::before {\n      background-position: 0 calc(-1 * 24px);\n    }\n\n    .pro-feature--clean-builds h5::before {\n      background-position: 0 calc(-2 * 24px);\n    }\n\n    .pro-feature--mobile-ci-cd h5::before {\n      background-position: 0 calc(-3 * 24px);\n    }\n\n    .pro-feature--git-integrations h5::before {\n      background-position: 0 calc(-4 * 24px);\n    }\n\n    .pro-feature--connected-services h5::before {\n      background-position: 0 calc(-5 * 24px);\n    }\n\n    .pro-feature--live-app-updating h5::before {\n      background-position: 0 calc(-6 * 24px);\n    }\n\n    .pro-feature--app-store-deploys h5::before {\n      background-position: 0 calc(-7 * 24px);\n    }\n\n    @media (max-width: $screen-md-max) {\n      li {\n        flex: 0 0 33%;\n      }\n    }\n\n    @media (max-width: $screen-sm-max) {\n      padding: 90px 0;\n      text-align: center;\n\n      h5 {\n        justify-content: center;\n      }\n\n      li {\n        flex: 0 0 50%;\n      }\n    }\n\n    @media (max-width: $screen-xs-max) {\n      hgroup h3 {\n        font-size: 30px;\n      }\n\n      li {\n        flex: 0 0 100%;\n        margin-top: 36px;\n      }\n    }\n  }\n\n  .get-started {\n    background: linear-gradient(\n      45deg,\n      rgb(27, 31, 58) 0%,\n      rgb(41, 47, 82) 100%\n    );\n\n    overflow: auto;\n\n    .container {\n      align-items: center;\n      display: flex;\n      margin-bottom: 120px;\n      margin-top: 120px;\n    }\n\n    hgroup {\n      letter-spacing: -0.025em;\n      flex-grow: 1;\n    }\n\n    h2 {\n      color: #e0e3f6;\n      font-size: 28px;\n      line-height: 36px;\n      font-weight: 400;\n      letter-spacing: -0.02em;\n      margin: 0;\n      max-width: 680px;\n\n      strong {\n        font-weight: 600;\n        color: #fff;\n      }\n    }\n\n    h3 {\n      color: #8aa6ff;\n      font-size: 24px;\n      line-height: 36px;\n      font-weight: 400;\n      margin: 0;\n    }\n\n    .btn {\n      font-size: 15px;\n      text-transform: uppercase;\n      letter-spacing: 0.1em;\n      font-weight: 700;\n      border-radius: 100px;\n      background-color: #5fa3ff;\n      padding: 16px 28px 14px;\n\n      &:hover {\n        background-color: #4895fc;\n      }\n    }\n\n    @media (max-width: $screen-sm-max) {\n      .container {\n        display: block;\n        text-align: center;\n      }\n\n      hgroup {\n        padding-bottom: 16px;\n      }\n\n      .btn-group {\n        padding-bottom: 96px;\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "assets/scss/pages/pwa/_index.scss",
    "content": "#page-pwa {\n  img:not(.promo__illustration) {\n    width: auto;\n  }\n  img {\n    height: auto;\n\n    &.promo__image {\n      height: 156px;\n      width: unset;\n    }\n  }\n\n  svg.logo {\n    width: 200px;\n    padding: 0 0 40px;\n  }\n\n  font-size: 1.4rem;\n\n  #social-share-sidebar {\n    left: 35px;\n  }\n\n  h1,\n  h2,\n  h3 {\n    font-weight: 700;\n  }\n\n  .lede {\n    color: #748196;\n    font-size: 1.3em;\n    font-weight: 600;\n    line-height: 1.6;\n    margin: 1em auto;\n    max-width: 72rem;\n\n    @media screen and (max-width: $screen-xs-max) {\n      font-size: 1.2em;\n    }\n  }\n\n  .lede > strong {\n    color: #333333;\n  }\n\n  .eyebrow {\n    font-size: 2rem;\n    font-weight: 700;\n    letter-spacing: 0.1em;\n    margin: 1em 0;\n    text-transform: uppercase;\n  }\n\n  .card {\n    border-radius: 6px;\n    box-shadow: 0px 4px 6px rgba(black, 0.1), 0px 1px 3px rgba(black, 0.08);\n    overflow: hidden;\n    transition: transform 100ms ease-out, box-shadow 120ms ease-out;\n\n    &__image {\n      max-width: 100%;\n    }\n\n    &__content {\n      padding: 1em;\n    }\n\n    &:hover {\n      box-shadow: 0 8px 16px rgba(black, 0.08), 0 3px 6px rgba(black, 0.08);\n      transform: translateY(-2px);\n    }\n  }\n\n  .panel {\n    padding: 8rem 4rem;\n\n    &__header {\n      margin-bottom: 6rem;\n      text-align: center;\n    }\n  }\n\n  .panel .container {\n    max-width: 1140px;\n  }\n\n  // CTA\n  .cta {\n    background-image: url(\"/img/pwa/pwa-hero.jpg\");\n    background-position: center center;\n    background-size: cover;\n    padding: 16rem 0;\n    text-align: center;\n\n    @media screen and (max-width: $screen-xs-max) {\n      margin-top: 0;\n      padding-bottom: calc(16rem - 70px);\n    }\n  }\n\n  .cta h1 {\n    font-size: 3.45em;\n    letter-spacing: -0.02em;\n\n    @media screen and (max-width: $screen-xs-max) {\n      font-size: 3em;\n    }\n  }\n\n  .cta .eyebrow {\n    font-size: 1.4rem;\n    letter-spacing: 0.2em;\n  }\n\n  .cta .lede {\n    color: #cfe1fa;\n  }\n\n  .cta .lede > strong {\n    color: white;\n    font-weight: inherit;\n  }\n\n  // Features\n\n  .features {\n    display: flex;\n    flex-wrap: wrap;\n    list-style: none;\n    margin: 0 auto;\n    max-width: 100rem;\n    padding: 0;\n    text-align: center;\n  }\n\n  .features > li {\n    flex: 0 0 25%;\n    padding: 2%;\n\n    @media screen and (max-width: $screen-xs-max) {\n      flex: 0 0 50%;\n    }\n  }\n\n  .features h4 {\n    font-size: 1.15em;\n    font-weight: 600;\n  }\n\n  .features p {\n    color: #748196;\n    font-size: 0.925em;\n    font-weight: 600;\n  }\n\n  .features__icon {\n    $features-icon-size: 48px;\n\n    background-image: url(\"/img/pwa/pwa-feature-icons.png\");\n    background-position: top left;\n    background-size: 100%;\n    height: $features-icon-size;\n    margin: 0 auto 2rem;\n    width: $features-icon-size;\n\n    &--reliable {\n      background-position-y: 0;\n    }\n    &--fast {\n      background-position-y: $features-icon-size * -1;\n    }\n    &--accessible {\n      background-position-y: $features-icon-size * -2;\n    }\n    &--web-based {\n      background-position-y: $features-icon-size * -3;\n    }\n    &--discoverable {\n      background-position-y: $features-icon-size * -4;\n    }\n    &--small {\n      background-position-y: $features-icon-size * -5;\n    }\n    &--instant {\n      background-position-y: $features-icon-size * -6;\n    }\n    &--simple {\n      background-position-y: $features-icon-size * -7;\n    }\n  }\n\n  @media screen and (min-width: $screen-md-min) {\n    .features > li:hover {\n      p,\n      h4,\n      .features__icon {\n        opacity: 1;\n        transform: translateY(0);\n      }\n    }\n    .features h4,\n    .features p,\n    .features__icon {\n      transform: translateY(20px);\n      transition: transform 200ms cubic-bezier(0.175, 0.885, 0.32, 1.275);\n    }\n    .features p {\n      opacity: 0;\n    }\n  }\n\n  // Examples\n\n  .examples {\n    background-color: #f6f9fc;\n  }\n\n  .examples.panel {\n    @media screen and (max-width: $screen-xs-max) {\n      padding-left: 1rem;\n      padding-right: 1rem;\n    }\n  }\n\n  .examples__list {\n    display: flex;\n    flex-wrap: wrap;\n    justify-content: center;\n  }\n\n  .examples__list > .card {\n    border-radius: 8px;\n    box-shadow: 0px 3px 8px rgba(black, 0.1);\n    margin: 1rem;\n    width: calc(1110px / 3 - 2rem);\n\n    &:hover {\n      box-shadow: 0 8px 16px rgba(black, 0.1), 0 3px 6px rgba(black, 0.1);\n    }\n\n    @media screen and (max-width: $screen-xs-max) {\n      margin-left: 0;\n      margin-right: 0;\n    }\n  }\n\n  .example {\n    background-position: center center;\n    background-size: cover;\n    border-radius: 8px;\n    color: rgba(white, 0.8);\n    font-weight: 600;\n    height: 0;\n    padding-bottom: 88%;\n    position: relative;\n\n    &.starbucks {\n      background-image: url(\"/img/pwa/pwa-starbucks-bg.jpg\");\n    }\n    &.pinterest {\n      background-image: url(\"/img/pwa/pwa-pinterest-bg.jpg\");\n    }\n    &.uber {\n      background-image: url(\"/img/pwa/pwa-uber-bg.jpg\");\n    }\n    &.lyft {\n      background-image: url(\"/img/pwa/pwa-lyft-bg.jpg\");\n    }\n    &.twitter {\n      background-image: url(\"/img/pwa/pwa-twitter-bg.jpg\");\n    }\n    &.forbes {\n      background-image: url(\"/img/pwa/pwa-forbes-bg.jpg\");\n    }\n  }\n\n  .example__content {\n    bottom: 0;\n    height: 46.875%;\n    left: 0;\n    padding: 1.4em;\n    position: absolute;\n    right: 0;\n\n    img {\n      height: 40px;\n      margin-bottom: 1em;\n    }\n  }\n\n  // Library\n\n  .library > .container > section {\n    padding-left: 2rem;\n  }\n\n  .library__list h4 {\n    font-size: 16px;\n    font-weight: 600;\n  }\n\n  .library__list p {\n    color: #748196;\n    font-size: 13px;\n    font-weight: 600;\n  }\n\n  .library__list a {\n    color: inherit;\n\n    &:focus {\n      text-decoration: none;\n    }\n  }\n\n  .library__list {\n    display: flex;\n    flex-wrap: wrap;\n    list-style: none;\n    margin: 2em 0 4em 0;\n    padding: 0;\n  }\n\n  .library__list > li {\n    flex: 0 0 25%;\n    padding-bottom: 2rem;\n    padding-right: 2rem;\n\n    @media screen and (max-width: $screen-md-max) {\n      flex: 0 0 33.33%;\n    }\n\n    @media screen and (max-width: $screen-sm-max) {\n      flex: 0 0 50%;\n    }\n\n    @media screen and (max-width: $screen-xs-max) {\n      flex: 0 0 100%;\n      padding-right: 0;\n    }\n  }\n\n  .library__list .card {\n    height: 100%;\n    margin-left: auto;\n    margin-right: auto;\n\n    @media screen and (max-width: $screen-xs-max) {\n      max-width: 260px;\n    }\n  }\n\n  .library .eyebrow {\n    @media screen and (max-width: $screen-xs-max) {\n      text-align: center;\n    }\n  }\n\n  // Promo buttons\n  .promo_button {\n    margin-top: 40px;\n  }\n}\n"
  },
  {
    "path": "assets/scss/pages/pwa-toolkit.scss",
    "content": "@import \"../vars\";\n@import \"../mixins\";\n@import \"bootstrap-sass/assets/stylesheets/bootstrap/variables\";\n\n.banner {\n  hgroup {\n    padding-top: 75px;\n    max-width: 700px;\n    text-align: center;\n  }\n\n  img {\n    max-width: 100%;\n  }\n\n  p {\n    margin-top: 61px;\n    font-size: 32px;\n    font-weight: 600;\n    letter-spacing: -0.008em;\n    color: #0f151f;\n  }\n\n  ul {\n    max-width: 978px;\n    padding-top: 51px;\n    padding-bottom: 95px;\n    list-style: none;\n    text-align: left;\n    display: grid;\n    grid-template-columns: auto auto auto auto;\n\n    @media (max-width: $screen-sm-max) {\n      display: flex;\n      flex-wrap: wrap;\n      justify-content: space-around;\n\n      li {\n        flex: 0 0 234px;\n      }\n    }\n\n    &::before,\n    &::after {\n      content: none;\n    }\n  }\n\n  li {\n    padding: 13px 0 13px 28px;\n    position: relative;\n    font-weight: 600;\n    font-size: 16px;\n    letter-spacing: -0.02em;\n\n    &::before {\n      font-family: \"Ionicons\";\n      content: \"\\f2bc\";\n      color: #5c77ff;\n      position: absolute;\n      left: 0;\n      top: 10px;\n      font-size: 18px;\n      font-weight: 400;\n    }\n  }\n}\n\nmain {\n  font-family: $font-family-inter;\n  max-width: 674px;\n  margin-bottom: 118px;\n\n  h1,\n  h2,\n  h3 {\n    font-weight: 700;\n    letter-spacing: -0.008em;\n    color: #0f1620;\n  }\n\n  h2 {\n    margin-bottom: 5px;\n  }\n\n  h3 {\n    font-size: 18px;\n    margin-top: 56px;\n    margin-bottom: 16px;\n  }\n\n  img {\n    max-width: 100%;\n    margin-top: 1px;\n  }\n\n  p {\n    letter-spacing: -0.01em;\n    margin-bottom: 22px;\n    line-height: 2em;\n\n    code {\n      color: #7058fd;\n      background: #eff2f7;\n      padding: 2px 8px;\n      letter-spacing: 0.02em;\n    }\n  }\n\n  ol {\n    padding-left: 42px;\n    margin-top: 25px;\n    margin-bottom: 24px;\n\n    li {\n      padding: 4px 0px;\n    }\n  }\n\n  hgroup {\n    margin-top: 144px;\n    margin-bottom: 52px;\n\n    &:first-child {\n      margin-top: 108px;\n      margin-bottom: 59px;\n    }\n\n    p {\n      line-height: 1.64em;\n      font-size: 18px;\n      letter-spacing: -0.03em;\n    }\n  }\n\n  + footer {\n    border-top: 1px solid #eee;\n  }\n}\n\n.steps {\n  list-style: none;\n  padding-left: 0;\n  margin-bottom: 65px;\n\n  li {\n    margin-bottom: 62px;\n  }\n\n  p {\n    letter-spacing: -0.01em;\n    margin-bottom: 17px;\n  }\n\n  strong {\n    font-weight: 500;\n    margin-right: 29px;\n  }\n\n  code {\n    background: none;\n  }\n\n  pre {\n    border: none;\n    background: #f5f7fa;\n    font-size: 12px;\n    font-weight: 500;\n    padding: 15px 14px;\n    position: relative;\n\n    .hljs {\n      background: none;\n    }\n\n    .hljs-built_in {\n      color: inherit;\n    }\n\n    &::before {\n      position: absolute;\n      content: \"shell\";\n      text-transform: uppercase;\n      font-size: 11px;\n      font-weight: 500;\n      top: 0.2em;\n      right: 1em;\n      color: #cdd4de;\n    }\n  }\n}\n"
  },
  {
    "path": "assets/scss/pages/react.scss",
    "content": "@import '../vars';\n@import 'bootstrap-sass/assets/stylesheets/bootstrap/variables';\n\n@import './enterprise/shared';\n@import './enterprise/solutions/shared';\n@import './solutions/shared';\n\n#page-react {\n  background: #ffffff;\n\n  img {\n    height: auto;\n  }\n\n  main section {\n    @media (max-width: $screen-xs) {\n      margin-top: 64px;\n      margin-bottom: 64px;\n    }\n  }\n\n  .grid {\n    display: grid;\n  }\n\n  .grid-cols-1\t{ grid-template-columns: repeat(1, minmax(0, 1fr)); }\n  .grid-cols-2\t{ grid-template-columns: repeat(2, minmax(0, 1fr)); }\n  .grid-cols-3\t{ grid-template-columns: repeat(3, minmax(0, 1fr)); }\n  .grid-cols-4\t{ grid-template-columns: repeat(4, minmax(0, 1fr)); }\n  \n  h1, \n  h2,\n  h3, \n  h4,\n  h5,\n  strong {\n    color: #111111;\n    font-weight: 600;\n\n    @media (max-width: $screen-sm-max) {\n      hyphens: auto;\n    }\n  }\n\n  code {\n    background: #DFF8FE;\n    color: #4991FF;\n    border-radius: 4px;\n  }\n\n  twitter-widget {\n    float: left;\n  }\n\n  .logo {\n    width: 128px;\n  }\n\n  react-components {\n    height: 566px;\n    width: 100%;\n    max-width: 500px;\n    margin: auto;\n  }\n\n  header {\n    position: relative;\n\n    background-color: #131A23;\n    color: white;\n    background-image: url('/img/react/react-cta-bg.png');\n    background-repeat: no-repeat;\n    background-size: 75%;\n    background-position: center bottom;\n\n    .back-button {\n      position: absolute;\n      top: 20px;\n      left: 20px;\n      display: block;\n      font-size: 10px;\n      font-weight: 500;\n      background-color: #313C4A;\n      border-radius: 16px;\n      padding: 6px 8px;\n      text-transform: uppercase;\n      cursor: pointer;\n      text-decoration: none;\n      color: white;\n      ion-icon {\n        vertical-align: middle;\n      }\n    }\n\n    h1 {\n      color: white;\n      font-size: 48px;\n      line-height: 110%;\n      @media (max-width: $screen-sm) {\n        font-size: 48px;\n      }\n      @media (max-width: $screen-xs) {\n        font-size: 24px;\n      }\n    }\n\n    .container {\n      max-width: 654px;\n      text-align: center;\n      padding: 88px 0;\n    }\n\n    .logo {\n      height: 72px;\n      width: 72px;\n    }\n\n    p {\n      max-width: 620px;\n      margin: 0 auto;\n    }\n\n    a.btn {\n      padding-top: 18px;\n      padding-bottom: 18px;\n      margin-top: 24px;\n      font-size: 15px;\n      text-transform: uppercase;\n      font-weight: bold;\n    }\n\n    a.btn.get-started {\n      background-color: #29ADFF;\n      border-radius: 10px;\n    }\n    a.btn.live-demo {\n      background-color: #414D5C;\n      border-radius: 10px;\n\n      @media (max-width: $screen-xs) {\n        display: none;\n      }\n    }\n    a.btn.live-demo-mobile {\n      display: none;\n\n      @media (max-width: $screen-xs) {\n        display: inline-block;\n      }\n    }\n\n    .keep-reading {\n      margin-top: 32px;\n      font-size: 14px;\n      display: block;\n      color: rgba(white,.5);\n      transition: .2s color;\n      text-decoration: none;\n\n      ion-icon {\n        display: block;\n        font-size: 26px;\n        height: 26px;\n        text-align: center;\n        margin: 0 auto;\n        transition: .2s transform ease-out;\n      }\n\n      &:hover {\n        color: rgba(white,.7);\n\n        ion-icon {\n          transform: translateY(4px);\n        }\n      }\n    }\n  }\n\n  .hero {\n    img {\n      width: calc(100% + 256px);\n      margin-left: -128px;\n\n      @media (max-width: 1200px) {\n        width: calc(100% + 128px);\n        margin-left: -64px;\n      }\n\n      @media (max-width: $screen-sm-max) {\n        width: calc(100% + 64px);\n        margin-left: -32px;\n      }\n    }\n  }\n\n  h1 {\n    font-size: 64px;\n    line-height: 70px;\n    letter-spacing: -.04em;\n  }\n\n  h2 {\n    letter-spacing: -.03em;\n    font-weight: 600;\n    font-size: 40px;\n    line-height: 110%;\n  }\n\n  h3 {\n    font-size: 32px;\n    letter-spacing: -.03em;\n  }\n\n  h4 {\n    font-size: 20px;\n    line-height: 28px;\n    letter-spacing: -.02em;\n  }\n\n  p,\n  li {\n    color: rgba(47,58,72,.9);\n    font-size: 16px;\n    line-height: 29px;\n    letter-spacing: -.01em;\n  }\n\n  hgroup {\n    h2 {\n      font-size: 40px;\n      letter-spacing: -0.03em;\n      line-height: 110%;\n      font-weight: 600;\n    }\n\n    p {\n      color: #2F3A48;\n      font-size: 20px;\n      line-height: 150%;\n      letter-spacing: -.03em;\n      margin-top: 32px;\n      margin-bottom: 16px;\n    }\n\n    ul {\n      margin: 0;\n      padding: 0;\n    }\n    li {\n      display: flex;\n      cursor: pointer;\n\n      &:before {\n        display: none;\n      }\n\n      font-size: 22px;\n      color: #1A232F;\n      margin: 0;\n      padding: 0;\n      list-style: none;\n\n      .icon {\n        display: flex;\n        align-items: center;\n        justify-content: center;\n        width: 28px;\n        margin-right: 16px;\n        margin-top: 0;\n\n        background-position: 0% 50%;\n        background-size: 28px 24px;\n        background-repeat: no-repeat;\n\n        &.cards { background-image: url('/img/react/card-icon.svg'); }\n        &.lists { background-image: url('/img/react/list-icon.svg'); }\n        &.action-sheet { background-image: url('/img/react/action-sheet-icon.svg'); }\n      }\n\n      .title {\n        padding: 16px 0;\n        flex: 1;\n        position: relative;\n\n        .progress {\n          position: absolute;\n          display: block;\n          width: 100%;\n          height: 2px;\n          opacity: 0;\n          background: #009DFF;\n          bottom: -1px;\n          transform-origin: 0 0;\n\n          transition: opacity 0.2s ease-out;\n        }\n      }\n\n      &.selected {\n        color: #009DFF;\n        .icon {\n          svg * {\n            stroke: #009DFF;\n          }\n        }\n        .title .progress {\n          opacity: 1;\n        }\n      }\n    }\n\n    .more {\n      display: block;\n      font-size: 24px;\n      line-height: 40px;\n      margin-top: 16px;\n      margin-left: 42px;\n      ion-icon {\n        vertical-align: middle;\n      }\n      p {\n        font-size: 18px;\n        line-height: 24px;\n        margin-bottom: 10px;\n      }\n    }\n  }\n\n  img {\n    object-fit: contain;\n  }\n\n  li {\n    color: #E9EDF3;\n  }\n\n  .features {\n    grid-gap: 50px;\n    @media (max-width: $screen-sm) {\n      grid-template-columns: 1fr;\n      grid-gap: 24px;\n\n      p {\n        margin-bottom: 16px;\n      }\n    }\n  }\n\n  .feature {\n    .image {\n      height: 56px;\n      display: flex;\n      align-items: center;\n      svg {\n      }\n      margin-bottom: 28px;\n    }\n\n    h3 {\n      font-size: 20px;\n      letter-spacing: -0.03em;\n      font-weight: 600;\n    }\n\n    p {\n      font-size: 16px;\n      line-height: 180%;\n      letter-spacing: -0.02em;\n    }\n\n    h3 a {\n      color: #020814;\n      font-size: 20px;\n      font-weight: 600px;\n    }\n\n    img {\n      width: 100%;\n      max-width: 308px;\n      margin-bottom: 28px;\n    }\n  }\n\n  #components {\n    margin-bottom: 24px;\n    @media (max-width: $screen-sm) {\n      grid-template-columns: 1fr;\n    }\n  }\n\n  #native {\n    display: flex;\n    flex-wrap: nowrap;\n\n    > * {\n      flex-basis: 50%;\n    }\n\n    @media (max-width: $screen-sm-max) {\n      react-capacitor {\n        display: none;\n      }\n      ul {\n        display: none;\n      }\n\n      hgroup {\n        align-self: flex-start;\n      }\n    }\n\n    react-capacitor {\n      height: 100%;\n      margin-right: 64px;\n      max-width: 50%;\n\n      @media screen and (min-width: $screen-md) {\n        min-height: 469px;\n      }\n    }\n\n    hgroup {\n      max-width: 50%;\n    }\n\n    .content {\n      margin-top: 100px;\n    }\n    .graphics {\n      margin-top: -16px;\n      margin-right: -68px;\n      position: relative;\n\n      > img {\n        position: absolute;\n        top: -115px;\n        left: calc(50% - 207px);\n        height: 761px;\n        width: 499px;\n        z-index: -1;\n      }\n\n      home-native {\n        position: relative;\n      }\n    }\n\n    @media (max-width: $screen-sm-max) {\n      flex-direction: column;\n\n      .graphics {\n        margin-top: 64px;\n        margin-right: auto;\n        max-width: 100%;\n      }\n    }\n  }\n\n  #enterprise {\n    hgroup {\n    }\n\n    .graphics {\n      img {\n        max-width: 468px;\n        width: 100%;\n      }\n    }\n\n    .btn {\n      background-color: #193857;\n    }\n    @media (max-width: $screen-sm) {\n      .graphics {\n        display: none;\n      }\n      .btn {\n        display: block;\n        margin: auto;\n      }\n    }\n  }\n\n  #start {\n    background: #44B7FF;\n    border-radius: 16px;\n    padding: 64px;\n    margin-bottom: 64px;\n    color: white;\n\n    grid-template-columns: 2fr 3fr;\n\n    h2 {\n      margin-top: 0;\n      font-size: 32px;\n    }\n    p {\n      font-size: 16px;\n      margin-bottom: 0;\n    }\n    h2, p, pre, code {\n      color: white;\n    }\n    &:before {\n      display: none;\n    }\n    pre {\n      background-color: #0071B8;\n      color: white;\n      border: none;\n      border-radius: 8px;\n      text-align: left;\n      font-size: 16px;\n      margin-left: 56px;\n    }\n    code {\n      background: transparent;\n      color: white;\n      .hljs-tag {\n        color: white;\n      }\n      .hljs-keyword {\n        color: white;\n      }\n    }\n    @media (max-width: $screen-sm) {\n      grid-template-columns: 1fr;\n      \n      padding: 32px;\n      margin: 16px;\n\n      h2 {\n        font-size: 24px;\n      }\n\n      p {\n        font-size: 14px;\n        line-height: 18px;\n      }\n\n      pre {\n        margin-left: 0;\n        margin-top: 24px;\n        font-size: 12px;\n      }\n    }\n  }\n\n  #demo-info {\n    h2 {\n      margin-bottom: 48px;\n    }\n    p {\n      font-size: 20px;\n      line-height: 150%;\n    }\n  }\n\n  #demo-info, #samples {\n    i {\n      color: #73849A;\n    }\n    p {\n      margin: 20px 0;\n    }\n    .try-it {\n      font-weight: bold;\n      ion-icon {\n        vertical-align: middle;;\n      }\n    }\n    @media (max-width: $screen-sm) {\n      .grid.grid-cols-2 {\n        grid-template-columns: 1fr;\n      }\n    }\n  }\n\n  #samples {\n    p {\n      height: 105px;\n    }\n  }\n\n  #demo {\n    width: 100%;\n\n    #demo-frame {\n      height: 750px;\n      width: 100%;\n      border: none;\n      @media (max-width: $screen-xs) {\n        display: none;\n      }\n    }\n    #demo-mobile {\n      display: none;\n      text-align: center;\n      margin: 36px auto;\n      @media (max-width: $screen-xs) {\n        display: block;\n      }\n    }\n  }\n\n  #vs-react-native {\n    hgroup {\n      p {\n        margin-bottom: 64px;\n      }\n    }\n\n    .feature {\n      h3 {\n        height: 48px;\n      }\n    }\n\n    @media (max-width: $screen-xs) {\n      text-align: left;\n      .features {\n        grid-gap: 24px;\n      }\n      .feature {\n        p {\n          height: auto;\n          margin-bottom: 16px;\n        }\n      }\n    }\n  }\n\n  #accolades {\n    margin-top: 48px;\n    margin-bottom: 96px;\n    .tweets {\n      display: grid;\n      grid-template-columns: 1fr 1fr;\n      column-gap: 64px;\n      @media (max-width: $screen-sm) {\n        grid-template-columns: 1fr;\n        column-gap: 16px;\n      }\n\n      .tweet-share {\n        display: grid;\n        grid-template-columns: auto auto;\n        justify-content: space-between;\n        align-items: center;\n        background: #F6F8FB;\n        border-radius: 4px;\n        color: #2F3A48;\n        padding: 32px;\n        height: 96px;\n        h4 {\n          margin: 0;\n        }\n        a {\n          color: #009DFF;\n        }\n      }\n\n      .tweet {\n        background: #F6F8FB;\n        border-radius: 4px;\n        color: #2F3A48;\n        padding: 32px;\n        margin-bottom: 56px;\n\n        .tweet-author {\n          display: grid;\n          grid-template-columns: 56px 1fr 16px;\n        }\n\n        .tweet-author-avatar {\n          width: 40px;\n          height: 40px;\n          border-radius: 40px;\n          background-color: gray;\n          img {\n            width: 40px;\n            height: 40px;\n            border-radius: 40px;\n          }\n        }\n\n        .tweet-author-info {\n          font-weight: 500;\n          font-size: 16px;\n          line-height: 160%;\n          /* or 26px */\n          letter-spacing: -0.02em;\n\n          a {\n            color: #020814;\n            text-decoration: none;\n          }\n\n          h3 {\n            margin-top: 0;\n            margin-bottom: 0px;\n            font-weight: 500;\n            font-size: 16px;\n            line-height: 160%;\n            /* or 26px */\n\n            letter-spacing: -0.02em;\n\n            /* carbon / 800 */\n\n            color: #020814;\n          }\n          h5 {\n            margin-top: 0;\n            font-size: 12px;\n            line-height: 160%;\n            /* or 19px */\n\n            letter-spacing: -0.02em;\n\n            /* carbon / 300 */\n\n            color: #414D5C;\n\n          }\n        }\n\n        .tweet-author-username {\n          font-size: 12px;\n          line-height: 160%;\n          /* or 19px */\n\n          display: flex;\n          align-items: center;\n          letter-spacing: -0.02em;\n\n          /* carbon / 300 */\n\n          color: #414D5C;\n        }\n\n        .tweet-content {\n          margin-top: 24px;\n          margin-bottom: 28px;\n        }\n\n        .tweet-footer {\n          display: grid;\n          grid-template-columns: auto auto;\n          justify-content: space-between;\n\n          letter-spacing: 0.08em;\n          font-size: 10px;\n          /* carbon / 100 */\n\n          color: #616E7E;\n\n          .tweet-date {\n            text-transform: uppercase;\n          }\n          .tweet-view {\n            text-transform: uppercase;\n            a {\n              text-decoration: none;\n              color: #616E7E;\n            }\n          }\n        }\n      }\n    }\n  }\n}\n\n@media (max-width: 767px) {\n  body {\n    padding-top: 0;\n  }\n}\n"
  },
  {
    "path": "assets/scss/pages/resources/case-studies.scss",
    "content": "@import \"../../vars\";\n@import \"../../mixins\";\n@import \"bootstrap-sass/assets/stylesheets/bootstrap/variables\";\n\nmain hgroup {\n  margin-top: 24px;\n  margin-bottom: 53px;\n\n  @media (max-width: $screen-xs-max) {\n    margin-bottom: 0;\n  }\n\n  strong {\n    text-transform: uppercase;\n    font-size: 11px;\n    font-weight: 600;\n    color: #9cabc4;\n  }\n\n  h4 {\n    margin-top: 62px;\n    font-size: 12px;\n    color: #92a1b3;\n    text-transform: uppercase;\n    letter-spacing: 0.14em;\n  }\n\n  h1 {\n    font-size: 46px;\n    margin-top: 56px;\n  }\n\n  p {\n    font-weight: 400;\n    color: #898989;\n    max-width: 750px;\n    margin: 13px auto;\n    font-size: 20px;\n    line-height: 1.8em;\n    letter-spacing: 0.01em;\n  }\n\n  .byline {\n    font-style: normal;\n    font-weight: normal;\n    line-height: 29px;\n    font-size: 16px;\n    letter-spacing: -0.02em;\n    color: #92a1b3;\n    margin-bottom: 42px;\n\n    .avatar {\n      width: 28px;\n      height: 28px;\n      margin: 0 8px 0 0;\n      border-radius: 50%;\n      display: inline-block;\n    }\n\n    .tags {\n      padding: 0;\n      margin-left: 4px;\n      list-style: none;\n      vertical-align: 2px;\n      display: inline-block;\n\n      li {\n        font-size: 10px;\n        color: #ced6e0;\n        background: transparent;\n        padding: 3px 5px 4px;\n        line-height: 1em;\n        margin-right: 2px;\n        font-weight: 600;\n        text-transform: uppercase;\n        border-radius: 4px;\n        letter-spacing: 0.08em;\n        vertical-align: 1px;\n        display: inline-block;\n        border: 1px solid #e9edf3;\n        // transition: color 0.2s, border-color 0.2s, background-color 0.2s;\n      }\n    }\n  }\n\n  img {\n    margin: 24px auto;\n    max-width: 100%;\n  }\n}\n\nmain {\n  display: flex;\n  overflow: visible;\n  padding-bottom: 160px;\n  @media (max-width: $screen-sm) {\n    padding-bottom: 80px;\n  }\n  @media (max-width: $screen-xs-max) {\n    flex-direction: column;\n  }\n}\n\n.sticky-wrapper {\n  position: sticky;\n  top: 128px;\n}\n\naside {\n  flex: 0 1 208px;\n  padding-right: 20px;\n  margin-bottom: 0;\n  margin-top: 52px;\n\n  h4 {\n    font-size: 10px;\n    text-transform: uppercase;\n    color: #a4b3cc;\n    font-weight: 600;\n    letter-spacing: 0.16em;\n  }\n\n  ul {\n    padding: 0;\n    font-size: 14px;\n    margin: 9px 0 30px;\n    list-style: none;\n    line-height: 1.4em;\n\n    @media (max-width: $screen-md-max) {\n      font-size: 12px;\n    }\n  }\n\n  li {\n    margin: 12px 0 13px;\n  }\n\n  a {\n    color: #52678c;\n    display: block;\n    transition: 0.2s transform ease, 0.2s color;\n\n    &:hover,\n    &:active,\n    &:focus,\n    &.active {\n      color: $blue;\n      text-decoration: none;\n    }\n\n    &.active {\n      transform: translateX(8px);\n    }\n\n    &.nav-level-heading3 {\n      padding-left: 12px;\n      opacity: 0.8;\n    }\n  }\n\n  .btn {\n    margin: 0 0 32px;\n  }\n\n  .lightblue {\n    background: #e6f0f8;\n    color: $blue;\n    border-radius: 4px;\n    padding: 9px 16px;\n    display: inline-block;\n    font-size: 11px;\n    text-transform: uppercase;\n    font-weight: 700;\n    letter-spacing: 0.07em;\n\n    ion-icon {\n      font-size: 18px;\n      vertical-align: -5px;\n    }\n  }\n\n  .navbar-cta-btn {\n    font-size: 14px;\n    line-height: 1em;\n  }\n\n  .sharing {\n    margin: 0;\n    border-top: 2px solid #f3f5f9;\n    padding-top: 26px;\n\n    li {\n      margin: 0;\n      margin-right: 6px;\n      display: inline-block;\n    }\n\n    a {\n      color: #cbd2dd;\n      font-size: 20px;\n\n      &:hover {\n        color: $blue;\n      }\n    }\n\n    #web-share {\n      display: none;\n    }\n  }\n\n  @media (max-width: $screen-sm) {\n    display: none;\n  }\n}\n\n.main-col {\n  flex: 1;\n  display: flex;\n  flex-direction: column;\n  align-items: center;\n}\n\n.main-col__inner {\n  width: 100%;\n  max-width: 663px;\n  margin-left: 40px;\n}\n\n@media (max-width: $screen-md-max) {\n  .main-col {\n    align-items: flex-end;\n  }\n\n  .main-col__inner {\n    margin-left: 20px;\n  }\n}\n\n@media (max-width: $screen-sm) {\n  .main-col {\n    align-items: center;\n  }\n  .main-col__inner {\n    margin-left: 0;\n  }\n}\n\narticle {\n  padding-bottom: 58px;\n  border-bottom: 1px solid #edf0f6;\n  margin-bottom: 37px;\n\n  h2 {\n    font-size: 30px;\n    margin-top: 2.65em;\n    margin-bottom: 0.8em;\n    font-weight: 600;\n\n    strong {\n      font-weight: 600;\n    }\n  }\n\n  h3 {\n    font-size: 20px;\n    line-height: 1.3;\n    margin-top: 2.3em;\n    margin-bottom: 1.2em;\n    letter-spacing: -0.014em;\n    font-weight: 600;\n\n    strong {\n      font-weight: 600;\n    }\n  }\n\n  h4,\n  h5,\n  h6 {\n    margin: 1em 0;\n  }\n\n  h4 {\n    text-transform: uppercase;\n    letter-spacing: 0.1em;\n    font-size: 14px;\n  }\n\n  h5 {\n    font-size: 15px;\n  }\n\n  h6 {\n    font-size: 11px;\n    text-transform: uppercase;\n    letter-spacing: 0.1em;\n  }\n\n  p,\n  ul,\n  ol {\n    font-size: 16px;\n    letter-spacing: -0.011em;\n    line-height: 1.75em;\n    margin-bottom: 1.8em;\n    color: #5b708b;\n  }\n\n  ul,\n  ol {\n    li + li {\n      margin-top: 8px;\n    }\n  }\n\n  ul {\n    padding-left: 0;\n\n    li {\n      list-style-type: none;\n      position: relative;\n      padding-left: 18px;\n\n      &:before {\n        content: \"\";\n        display: inline-block;\n        width: 6px;\n        height: 6px;\n        background: #b2becd;\n        position: absolute;\n        top: 12px;\n        left: 0;\n        border-radius: 8px;\n      }\n    }\n  }\n\n  b,\n  strong {\n    font-weight: 500;\n  }\n\n  blockquote {\n    background: #f2f5f8;\n    border-radius: 4px;\n    position: relative;\n    padding: 64px 80px 68px 111px;\n    color: #5e749a;\n    font-family: $font-family-serif;\n    font-style: italic;\n    border: none;\n    margin: 77px -16px 54px;\n\n    &::before {\n      position: absolute;\n      top: -6px;\n      left: 54px;\n      font-size: 180px;\n      content: \"\\201C\";\n      color: #e3e7ec;\n    }\n\n    p {\n      font-size: 18px;\n      position: relative;\n      z-index: 1;\n      letter-spacing: 0.022em;\n      line-height: 1.8em;\n\n      &:last-child {\n        margin-bottom: 0;\n      }\n    }\n\n    cite {\n      font-size: 15px;\n      letter-spacing: 0.02em;\n\n      span {\n        color: #9da9bd;\n        margin-left: 8px;\n      }\n    }\n  }\n\n  img {\n    max-width: 100%;\n  }\n\n  pre,\n  code {\n    border: none;\n    background: rgb(245, 247, 250);\n  }\n\n  figure {\n    width: 295px;\n    float: right;\n    margin: 8px -20px 16px 74px;\n\n    &.left {\n      float: left;\n      margin-right: 74px;\n      margin-left: -20px;\n    }\n\n    img {\n      box-shadow: 0 4px 48px rgba(0, 0, 0, 0.2);\n    }\n\n    figcaption {\n      color: #a8b0be;\n      font-size: 11px;\n      margin-top: 13px;\n    }\n\n    @media (max-width: $screen-xs-max) {\n      margin-right: 0;\n      margin-left: 32px;\n\n      &.left {\n        margin-left: 0;\n        margin-right: 32px;\n      }\n    }\n\n    @media (max-width: $screen-xs-min) {\n      width: 100%;\n    }\n  }\n\n  aside.advertisement a {\n    font-size: 30px;\n    color: $blue;\n    margin-bottom: 1.6em;\n    margin-left: -1em;\n\n    &:hover {\n      color: darken($blue, 15);\n    }\n  }\n\n  .table-wrap {\n    overflow-x: auto;\n    margin-right: -15px;\n    padding-right: 15px;\n    box-sizing: content-box;\n    font-size: 13px;\n\n    td,\n    th {\n      min-width: 120px;\n      padding-right: 12px;\n    }\n\n    table tbody tr td {\n      border-top-color: #dee3ea;\n    }\n    table > thead > tr > th {\n      border-bottom-color: #e9edf3;\n      font-weight: 600;\n    }\n  }\n}\n\n.resource-list {\n  margin-bottom: 0;\n\n  &__header {\n    .all {\n      float: right;\n\n      ion-icon {\n        display: inline-block;\n        transition: 0.2s transform ease;\n      }\n\n      &:hover ion-icon {\n        transform: translateX(2px);\n      }\n    }\n\n    h4 {\n      text-transform: uppercase;\n      font-size: 14px;\n      letter-spacing: 0.12em;\n    }\n  }\n\n  .resource-card-list {\n    margin-left: -10px;\n    margin-right: -10px;\n  }\n\n  .resource-card-list--third .resource-card {\n    padding: 5px;\n    height: 214px;\n  }\n\n  .resource-card-list--third .resource-card a .title {\n    font-size: 18px;\n  }\n}\n"
  },
  {
    "path": "assets/scss/pages/resources/index.scss",
    "content": "@import '../../vars';\n@import '../../mixins';\n@import 'bootstrap-sass/assets/stylesheets/bootstrap/variables';\n// @import '../shared';\n\nbody {\n  font-weight: 600;\n  letter-spacing: -0.015em;\n}\n\n.ee-hero {\n  padding-bottom: 24px;\n}\n\n.banner {\n  text-align: left;\n  border-bottom: 1px solid #e3e8f1;\n\n  .transitionTitle {\n    margin-bottom: 60px;\n  }\n\n  .hero-content {\n    display: flex;\n    flex-direction: column;\n  }\n\n  .resource-card-list {\n    margin-bottom: 64px;\n  }\n\n  @media (max-width: $screen-md-min) {\n    .transitionTitle {\n      margin-bottom: 40px;\n    }\n    // .hero-content {\n    //   flex-direction: column-reverse;\n    // }\n  }\n\n  @media (max-width: $screen-sm-min) {\n    padding-top: 130px;\n\n    h1,\n    p {\n      text-align: center;\n    }\n  }\n}\n\n.resource-list {\n  margin-top: 70px;\n  &:last-child {\n    margin-bottom: 100px;\n  }\n  @media (max-width: $screen-md-min) {\n    margin-top: 50px;\n  }\n}\n.resource-list__header {\n  display: flex;\n  justify-content: space-between;\n  align-items: baseline;\n\n  h4 {\n    font-size: 18px;\n    font-weight: 700;\n    color: #24282e;\n    margin-bottom: 4px;\n  }\n\n  a {\n    font-size: 16px;\n    font-weight: 600;\n\n    &:after {\n      transition: transform 0.3s;\n      font-family: 'Ionicons';\n      content: '\\f287';\n      font-size: 16px;\n      margin-left: 6px;\n      display: inline-block;\n    }\n\n    &:hover {\n      color: #186bfb;\n    }\n\n    &:hover:after {\n      transform: translate3d(3px, 0, 0);\n    }\n  }\n}\n.tabs__scroll {\n  position: relative;\n\n  @media (max-width: 560px) {\n    &:before,\n    &:after {\n      transition: opacity 0.3s;\n      pointer-events: none;\n      position: absolute;\n      right: 0;\n      top: 0;\n      opacity: 0;\n    }\n\n    &:before {\n      font-family: 'Ionicons';\n      content: '\\f3d1';\n      font-size: 14px;\n      color: #626c7d;\n      z-index: 3;\n      top: 50%;\n      transform: translateY(-60%);\n    }\n\n    &:after {\n      content: '';\n      display: block;\n      width: 80px;\n      height: 100%;\n      z-index: 2;\n      background-image: linear-gradient(90deg, rgba(246,248,252,0.00) 0%, #F6F8FC 75%);\n    }\n  }\n}\n\n.tabs {\n  width: 100%;\n  max-width: 800px;\n  margin: 0 auto;\n  overflow-x: auto;\n  position: relative;\n  z-index: 1;\n  -webkit-overflow-scrolling: touch;\n\n  ul {\n    margin: 0 auto;\n    padding: 0;\n    padding-left: 40px;\n    padding-right: 40px;\n    list-style-type: none;\n    display: flex;\n    align-items: flex-end;\n    justify-content: space-between;\n    min-width: 560px;\n  }\n}\n\n.tabs__scroll--hint:before,\n.tabs__scroll--hint:after {\n  opacity: 1;\n}\n\n.tabs__item {\n  & + .tabs__item {\n    margin-left: 18px;\n  }\n\n  a {\n    position: relative;\n    transition: border 0.3s, color 0.3s;\n    text-decoration: none;\n    display: inline-block;\n    font-size: 14px;\n    color: #8e9bb1;\n    display: flex;\n    align-items: center;\n    padding-bottom: 30px;\n    border-bottom: 2px solid transparent;\n\n    span {\n      display: block;\n      flex: 1 0 auto;\n      white-space: nowrap;\n      text-align: center;\n    }\n  }\n\n  svg {\n    width: 20px;\n    height: 20px;\n    margin: 0 10px 0 0;\n  }\n\n  .highlight {\n    transition: fill 0.3s;\n    fill: #D8E0EF;\n  }\n\n  .bg {\n    transition: fill 0.3s;\n    fill: #A1AEC2;\n  }\n\n  a:hover,\n  &.active a {\n    color: #3880ff;\n\n    .highlight {\n      fill: #C1DBFF;\n    }\n\n    .bg {\n      fill: #4D8CFD;\n    }\n  }\n\n  a:focus,\n  a:active {\n    text-decoration: none;\n    outline: none;\n  }\n\n  &.active a {\n    pointer-events: none;\n    cursor: default;\n    border-bottom-color: #3880ff;\n  }\n}\n\n@media (max-width: $screen-md-min) {\n  .tabs ul {\n    // margin-bottom: 40px;\n  }\n\n  .tabs__item a {\n    padding-bottom: 8px;\n    flex-direction: column;\n\n    svg {\n      margin: 0;\n      margin-bottom: 6px\n    }\n  }\n}\n"
  },
  {
    "path": "assets/scss/pages/resources/webinars.scss",
    "content": "@import \"../../vars\";\n@import \"../../mixins\";\n@import \"bootstrap-sass/assets/stylesheets/bootstrap/variables\";\n\n// hacks to override enterprise header styles\n\n.pre-header.back {\n  background: rgba(255, 255, 255, 0.2);\n\n  a,\n  a ion-icon {\n    color: #fff;\n  }\n}\n\n#sub-header {\n  & > .container::before {\n    border-top: 1px solid rgba(255, 255, 255, 0.2);\n  }\n\n  .breadcrumbs li,\n  .breadcrumbs li a {\n    font-family: $font-family-inter;\n    font-size: 13px;\n    color: #fff;\n    font-weight: 400;\n    letter-spacing: -0.01em;\n  }\n\n  .breadcrumbs li a {\n    color: rgba(255, 255, 255, 0.6);\n\n    &:hover {\n      color: rgba(255, 255, 255, 1);\n    }\n  }\n\n  .breadcrumbs li::after {\n    color: rgba(255, 255, 255, 0.3);\n    margin-left: 7px;\n    margin-right: 6px;\n    font-size: 14px;\n  }\n\n  @media (max-width: $screen-sm) {\n    display: none;\n  }\n}\n\n.navbar-default.enterprise:not(.navbar-sticky) {\n  .navbar-brand svg {\n    fill: #fff;\n\n    @media (max-width: $screen-sm) {\n      fill: #000;\n    }\n  }\n\n  .navbar-nav > li:not(.header-btn-white) > a {\n    color: rgba(255, 255, 255, 1);\n\n    &:hover {\n      color: rgba(255, 255, 255, 0.6);\n    }\n  }\n\n  #header-btn-outline {\n    color: #fff;\n    border: 1px solid rgba(255, 255, 255, 0.4);\n\n    &:hover {\n      border: 1px solid rgba(255, 255, 255, 1);\n    }\n  }\n}\n\n.transparent .cta {\n  margin-top: -200px;\n  padding-top: 200px;\n}\n\n// end hacks\n\n.cta {\n  background-color: #12223a;\n  background-image: url(\"/img/resource-center/webinars/bg-header.jpg\"),\n    linear-gradient(120deg, #4864ec, #84aff4);\n  background-size: cover, 100%;\n  background-position: 50% 50%;\n  margin-top: -138px;\n  padding-top: 138px;\n\n  &.podcasts {\n    background-image: url(\"/img/resource-center/bg-header-podcasts.jpg?3\"),\n      linear-gradient(to bottom, #010c29, #02133c);\n    background-size: cover, 100%;\n    background-position: 50% 50%;\n  }\n\n  &.videos {\n    background-image: url(\"/img/resource-center/bg-header-videos.jpg\"),\n      linear-gradient(to bottom, #010c29, #02133c);\n    background-size: cover, 100%;\n    background-position: 50% 50%;\n  }\n\n  hgroup {\n    padding-top: 76px;\n    max-width: 100%;\n    padding-bottom: 159px;\n\n    h1 {\n      font-size: 72px;\n      font-size: 56px;\n      margin-top: 22px;\n      max-width: 800px;\n    }\n\n    p {\n      color: #d9e9fe;\n      margin-top: 19px;\n      font-size: 16px;\n    }\n  }\n\n  strong {\n    text-transform: uppercase;\n    font-size: 13px;\n    letter-spacing: 0.12em;\n  }\n\n  .btn {\n    text-transform: uppercase;\n    margin-top: 41px;\n    padding: 15px 25px 16px;\n    font-size: 15px;\n    letter-spacing: 0.1em;\n  }\n}\n\n.card {\n  @include box;\n  border-radius: 14px;\n  margin-top: -32px;\n  display: flex;\n  margin-bottom: 128px;\n\n  @media (max-width: $screen-sm-max) {\n    flex-direction: column;\n  }\n}\n\narticle {\n  flex-grow: 1;\n  padding: 42px 53px 66px;\n  color: #596a89;\n\n  @media (max-width: 400px) {\n    padding-right: 24px;\n    padding-left: 24px;\n  }\n\n  h2 {\n    font-weight: 400;\n    font-size: 32px;\n    color: #5e79ff;\n  }\n\n  h4 {\n    font-weight: 400;\n    font-size: 22px;\n    letter-spacing: -0.018em;\n    line-height: 1.46em;\n    color: #596a89;\n\n    + h3 {\n      margin-top: 42px;\n    }\n  }\n\n  h3 {\n    font-weight: 600;\n    font-size: 20px;\n    margin-top: 42px;\n    margin-bottom: 15px;\n  }\n\n  strong {\n    font-weight: 600;\n  }\n\n  p {\n    font-size: 16px;\n    line-height: 1.8em;\n    letter-spacing: -0.008em;\n  }\n\n  ul {\n    margin-top: 20px;\n    padding-left: 0;\n    padding-bottom: 6px;\n  }\n\n  li {\n    line-height: 1.8em;\n    font-size: 16px;\n    list-style: none;\n    margin-left: 4px;\n    letter-spacing: -0.004em;\n    position: relative;\n    margin-left: 0;\n    padding-left: 44px;\n    margin-bottom: 20px;\n\n    &::before {\n      background: url(\"/img/resource-center/webinars/ico-check.png\") no-repeat 0\n        0;\n      background-size: 24px;\n      width: 24px;\n      height: 24px;\n      content: \"\";\n      position: absolute;\n      left: 0;\n      top: 0;\n    }\n  }\n\n  .btn {\n    margin-top: 30px;\n    text-transform: uppercase;\n    font-size: 15px;\n    padding: 17px 24px 14px;\n    letter-spacing: 0.1em;\n  }\n}\n\naside {\n  flex: 0 0 340px;\n  display: flex;\n  flex-direction: column;\n  padding: 54px 32px 32px;\n  background: #f6f9fc;\n\n  h4 {\n    text-transform: uppercase;\n    font-size: 14px;\n    letter-spacing: 0.1em;\n  }\n\n  .host {\n    margin-top: 16px;\n    margin-bottom: 24px;\n\n    img {\n      border-radius: 50%;\n      float: left;\n      display: block;\n    }\n\n    strong {\n      display: block;\n      margin-left: 63px;\n      margin-top: 6px;\n      font-size: 16px;\n      font-weight: 600;\n      color: #151d2b;\n    }\n\n    span {\n      margin-left: 63px;\n      display: block;\n      line-height: 1.2em;\n      color: #6b82ac;\n    }\n  }\n\n  .subscribe-cta {\n    margin-top: auto;\n    @include box;\n    padding: 8px 28px 28px;\n\n    @media (min-width: $screen-md-min) {\n      width: 327px;\n    }\n\n    h3 {\n      font-weight: 600;\n      font-size: 18px;\n      margin-bottom: 1px;\n      letter-spacing: -0.01em;\n    }\n\n    p {\n      margin-bottom: 16px;\n      line-height: 1.8em;\n      letter-spacing: -0.008em;\n    }\n\n    .btn {\n      width: 100%;\n      font-size: 16px;\n      background: #d6eeff;\n      color: #3880ff;\n      padding: 15px 10px 11px;\n    }\n  }\n\n  ionic-newsletter-signup form {\n    max-width: 100%;\n\n    input {\n      min-width: 0;\n    }\n  }\n\n  @media (max-width: $screen-sm-max) {\n    flex: 0 0 100%;\n  }\n}\n\n.resource-list {\n  margin-bottom: 64px;\n\n  &__header h4 {\n    font-size: 24px;\n    margin-bottom: 1px;\n  }\n}\n\n.scrollTopLink {\n  float: right;\n  font-size: 15px;\n  font-weight: 600;\n}\n\n.modal-body {\n  padding: 32px 48px;\n\n  @media (max-width: $screen-xs-max) {\n    padding: 16px;\n  }\n\n  form {\n    max-width: 100%;\n  }\n}\n\n#podcast-player {\n  width: 100%;\n  height: 180px;\n  margin: 22px 0 48px;\n}\n\n#youtube-responsive {\n  overflow: hidden;\n  padding-bottom: 56.25%;\n  position: relative;\n  height: 0;\n  margin: 22px 0 48px;\n\n  iframe {\n    left: 0;\n    top: 0;\n    height: 100%;\n    width: 100%;\n    position: absolute;\n  }\n}\n\n#wistia_responsive_padding {\n  padding: 56.25% 0 0 0;\n  position: relative;\n  margin: 22px 0 48px;\n\n  .wistia_responsive_wrapper {\n    height: 100%;\n    left: 0;\n    position: absolute;\n    top: 0;\n    width: 100%;\n  }\n\n  .wistia_embed {\n    height: 100%;\n    position: relative;\n    width: 100%;\n  }\n\n  .wistia_swatch {\n    height: 100%;\n    left: 0;\n    opacity: 0;\n    overflow: hidden;\n    position: absolute;\n    top: 0;\n    transition: opacity 200ms;\n    width: 100%;\n\n    img {\n      filter: blur(5px);\n      height: 100%;\n      object-fit: contain;\n      width: 100%;\n    }\n  }\n}\n"
  },
  {
    "path": "assets/scss/pages/resources/whitepapers.scss",
    "content": "@import \"../../vars\";\n@import \"../../mixins\";\n@import \"bootstrap-sass/assets/stylesheets/bootstrap/variables\";\n\n.cta {\n  background: linear-gradient(to bottom, white, #f6f8fc);\n  border-bottom: 1px solid #e5e7eb;\n  margin-top: -138px;\n  padding-top: 78px;\n\n  hgroup {\n    display: flex;\n    flex-direction: column;\n    align-items: center;\n    text-align: center;\n    padding-top: 20px;\n    padding-bottom: 114px;\n    max-width: 840px;\n\n    h5 {\n      text-transform: uppercase;\n      font-weight: 700;\n      letter-spacing: 0.1em;\n      font-size: 12px;\n      color: #8e9aab;\n    }\n\n    h1 {\n      color: #24282e;\n      font-size: 40px;\n      font-weight: 700;\n      letter-spacing: -0.03em;\n      margin: 12px 0 24px;\n    }\n\n    p {\n      font-size: 18px;\n      line-height: 32px;\n      font-weight: 600;\n      letter-spacing: -0.02em;\n      color: #626c7d;\n      max-width: 800px;\n    }\n  }\n}\n\n.signup-form {\n  padding-top: 110px;\n  padding-bottom: 0px;\n  display: flex;\n  justify-content: space-between;\n  max-width: 1000px;\n  margin-left: auto;\n  margin-right: auto;\n\n  .left-col,\n  .right-col {\n    width: 100%;\n    max-width: 472px;\n  }\n\n  .left-col {\n    padding-right: 30px;\n    font-family: $font-family-system;\n    font-size: 14px;\n    line-height: 1.6em;\n    color: #4e545e;\n    letter-spacing: -0.02em;\n\n    .illustration + p {\n      color: #6e7f99;\n      font-size: 18px;\n      line-height: 28px;\n    }\n\n    h5 {\n      font-size: 14px;\n      color: #4e545e;\n      letter-spacing: -0.02em;\n      font-weight: 400;\n      margin-top: 13px;\n    }\n\n    ul {\n      list-style-type: none;\n      padding: 0;\n      margin: 16px 0 32px;\n      line-height: 20px;\n    }\n\n    li {\n      padding-left: 20px;\n      position: relative;\n\n      &:before {\n        content: \"•\";\n        margin-right: 10px;\n        opacity: 0.8;\n        position: absolute;\n        left: 0;\n      }\n\n      & + li {\n        margin-top: 12px;\n      }\n    }\n\n    .p-bold {\n      font-weight: 600;\n    }\n  }\n\n  .right-col {\n    padding-left: 30px;\n\n    h3 {\n      margin-top: 0;\n      margin-bottom: 30px;\n      font-weight: 700;\n      font-size: 28px;\n      line-height: 36px;\n      letter-spacing: -0.03em;\n    }\n  }\n\n  .illustration {\n    position: relative;\n    width: 100%;\n    max-width: 430px;\n    margin-bottom: 30px;\n\n    img {\n      width: 100%;\n      border-radius: 8px;\n      box-shadow: 0 6px 12px rgba(0, 0, 0, 0.08), 0 2px 4px rgba(0, 0, 0, 0.08);\n    }\n  }\n}\n\n@media (max-width: $screen-sm) {\n  .cta hgroup {\n    padding-bottom: 60px;\n  }\n\n  .signup-form {\n    padding-top: 60px;\n    flex-direction: column;\n    align-items: center;\n    padding-bottom: 0;\n  }\n\n  .signup-form .left-col,\n  .signup-form .right-col {\n    padding-left: 0;\n    padding-right: 0;\n  }\n\n  .signup-form .left-col {\n    margin-top: -80px;\n  }\n  .signup-form .right-col {\n    margin-top: 50px;\n  }\n\n  .signup-form .illustration {\n    margin-left: auto;\n    margin-right: auto;\n  }\n}\n\n.company {\n  margin: 77px auto 68px;\n\n  h2 {\n    color: #7f8fab;\n    margin: 0 auto;\n    font-size: 28px;\n    max-width: 760px;\n    text-align: center;\n    line-height: 1.4em;\n    letter-spacing: -0.04em;\n    font-weight: 600;\n\n    strong {\n      color: #131924;\n      font-weight: 600;\n    }\n  }\n\n  h3 {\n    color: #7f8fab;\n    font-weight: 600;\n    line-height: 1.4em;\n    letter-spacing: -0.04em;\n    text-align: center;\n    font-size: 16px;\n  }\n\n  .logos {\n    display: flex;\n    flex-wrap: wrap;\n    margin-top: 51px;\n    justify-content: space-evenly;\n\n    &::before,\n    &::after {\n      background: url(\"/img/homepage/enterprise-logos.png\") 0 0 no-repeat;\n      background-size: 494px;\n      width: 494px;\n      height: 42px;\n      content: \"\";\n      max-width: 100%;\n      margin-bottom: 32px;\n      display: inline-block;\n    }\n\n    &::after {\n      background-position: 0 bottom;\n    }\n  }\n}\n\n.get-started {\n  background: #f1f4f8;\n  overflow: auto;\n\n  .container {\n    align-items: center;\n    display: flex;\n    margin-bottom: 110px;\n    margin-top: 110px;\n  }\n\n  hgroup {\n    letter-spacing: -0.025em;\n    flex-grow: 1;\n  }\n\n  h2 {\n    color: $blue;\n    font-size: 28px;\n    font-weight: 700;\n    letter-spacing: inherit;\n    margin: 0 0 5px;\n  }\n\n  p {\n    color: #24282e;\n    font-size: 20px;\n    font-weight: 600;\n    margin: 0;\n  }\n\n  .btn {\n    font-size: 16px;\n    font-weight: 700;\n  }\n\n  @media (max-width: $screen-sm-max) {\n    .container {\n      display: block;\n      text-align: center;\n    }\n\n    hgroup {\n      padding-bottom: 16px;\n    }\n\n    .btn-group {\n      padding-bottom: 96px;\n    }\n  }\n}\n"
  },
  {
    "path": "assets/scss/pages/solutions/_shared.scss",
    "content": ""
  },
  {
    "path": "assets/scss/pages/subscribe.scss",
    "content": "@import '../vars';\n@import '../mixins';\n@import 'bootstrap-sass/assets/stylesheets/bootstrap/variables';\n\n.subscribe {\n  @include box;\n  \n  max-width: 400px;\n  margin: -64px auto 80px auto;\n  padding: 32px 24px;\n\n  img {\n    width: 100%;\n    margin-bottom: 32px;\n  }\n\n}"
  },
  {
    "path": "assets/scss/pages/support.scss",
    "content": "@import \"../vars\";\n@import \"bootstrap-sass/assets/stylesheets/bootstrap/variables\";\n\n#page-support {\n  .cta {\n    background: #4192fe no-repeat center bottom;\n    background-image: url(\"/img/support/cta-bg.png\");\n    background-size: cover;\n\n    hgroup {\n      max-width: 560px;\n      padding-top: 56px;\n      padding-bottom: 112px;\n\n      h1 {\n        font-size: 56px;\n      }\n\n      p {\n        font-size: 24px;\n        letter-spacing: -0.03em;\n        color: rgba(#fff, 0.9);\n      }\n\n      @media (max-width: $screen-sm) {\n        max-width: 460px;\n        padding-top: 60px;\n        padding-bottom: 80px;\n\n        h1 {\n          font-size: 40px;\n          line-height: 54px;\n          margin-bottom: 6px;\n        }\n        p {\n          line-height: 30px;\n          font-size: 20px;\n          margin-left: auto;\n          max-width: 308px;\n          margin-right: auto;\n        }\n      }\n    }\n  }\n\n  .anchor-dest {\n    position: absolute;\n    margin-top: -80px;\n  }\n\n  main {\n    hgroup {\n      h2 {\n        font-size: 22px;\n        margin-top: 30px;\n      }\n\n      p {\n        font-size: 16px;\n        color: $darkish-grey;\n        font-weight: 400;\n      }\n    }\n\n    .container {\n      margin-top: 126px;\n    }\n    .container ~ .container,\n    .container ~ .banner {\n      margin-top: 180px;\n    }\n\n    .container__header {\n      display: flex;\n      justify-content: space-between;\n      align-items: flex-end;\n      margin-bottom: 58px;\n\n      hgroup {\n        flex: 0 0 50%;\n      }\n\n      h2 {\n        font-size: 40px;\n        letter-spacing: -0.03em;\n      }\n\n      h4 {\n        font-family: $font-family-inter;\n        font-weight: 600;\n        font-size: 16px;\n        letter-spacing: -0.01em;\n      }\n\n      p {\n        font-family: $font-family-inter;\n        font-size: 20px;\n        line-height: 30px;\n        color: #616e7e;\n        margin-bottom: 0;\n        letter-spacing: -0.02em;\n      }\n\n      .btn {\n        box-shadow: 0px 2px 6px rgba(2, 8, 20, 0.08),\n          0px 1px 2px rgba(2, 8, 20, 0.1);\n        border-radius: 8px;\n        padding: 12px 18px;\n        font-weight: 600;\n        font-size: 14px;\n        letter-spacing: -0.01em;\n      }\n    }\n\n    @media (max-width: $screen-md) {\n      .container__header {\n        h2 {\n          font-size: 36px;\n        }\n        p {\n          font-size: 18px;\n          line-height: 28px;\n        }\n      }\n    }\n\n    @media (max-width: $screen-sm) {\n      .container {\n        margin-top: 64px;\n      }\n      .container ~ .container,\n      .container ~ .banner {\n        margin-top: 84px;\n      }\n\n      .container__header {\n        flex-direction: column;\n        align-items: center;\n\n        hgroup {\n          text-align: center;\n          margin-bottom: 16px;\n          max-width: 520px;\n        }\n\n        h2 {\n          font-size: 32px;\n        }\n      }\n    }\n  }\n\n  .card-list {\n    display: flex;\n    list-style-type: none;\n    margin: 0 -29px;\n    padding: 0;\n\n    &__card {\n      padding: 0 29px;\n      flex: 0 0 33.33%;\n\n      a {\n        color: inherit;\n\n        &,\n        &:active {\n          text-decoration: none;\n        }\n      }\n\n      img {\n        width: 100%;\n      }\n\n      h3 {\n        font-weight: 600;\n        font-size: 24px;\n        line-height: 30px;\n        letter-spacing: -0.01em;\n        color: #1a232f;\n        margin-bottom: 10px;\n        margin-top: 20px;\n      }\n\n      p {\n        font-size: 16px;\n        line-height: 27px;\n        letter-spacing: -0.01em;\n        color: #616e7e;\n      }\n\n      .link-text {\n        transition: 0.2s color;\n        font-size: 16px;\n        line-height: 27px;\n        letter-spacing: -0.01em;\n        color: #3880ff;\n        display: inline-flex;\n        align-items: center;\n      }\n\n      .link-text ion-icon {\n        transition: 0.2s translate;\n        transform: translate(1px, 1px);\n      }\n\n      a:hover .link-text {\n        color: #0c59e0;\n      }\n\n      a:hover .link-text ion-icon {\n        transform: translate(3px, 1px);\n      }\n    }\n\n    @media (max-width: $screen-md) {\n      margin: 0 -16px;\n\n      &__card {\n        padding: 0 16px;\n\n        h3 {\n          font-size: 20px;\n        }\n\n        p {\n          font-size: 15px;\n          line-height: 25px;\n        }\n      }\n    }\n\n    @media (max-width: $screen-sm) {\n      flex-direction: column;\n      max-width: 400px;\n      margin-left: auto;\n      margin-right: auto;\n\n      &__card {\n        padding: 0;\n      }\n\n      &__card + .card-list__card {\n        margin-top: 32px;\n      }\n    }\n  }\n\n  .link-list {\n    display: flex;\n    list-style-type: none;\n    margin: 78px 0 0;\n    padding: 0;\n    justify-content: space-between;\n\n    a {\n      display: flex;\n      flex-direction: column;\n      align-items: center;\n\n      svg path {\n        transition: 0.2s fill;\n        fill: #414d5c;\n      }\n\n      &:hover svg path {\n        fill: #3880ff;\n      }\n\n      span {\n        transition: 0.2s color;\n        padding-top: 8px;\n        font-size: 16px;\n        line-height: 25px;\n        text-align: center;\n        letter-spacing: -0.01em;\n        color: #414d5c;\n      }\n\n      &:hover span {\n        color: #3880ff;\n      }\n    }\n\n    @media (max-width: $screen-md) {\n      margin: 56px 0 0;\n\n      svg {\n        height: 36px;\n      }\n    }\n\n    @media (max-width: $screen-sm) {\n      max-width: 440px;\n      flex-wrap: wrap;\n      margin-left: auto;\n      margin-right: auto;\n\n      li {\n        flex: 0 0 33.33%;\n        margin-bottom: 28px;\n      }\n\n      svg {\n        height: 24px;\n      }\n\n      span {\n        font-size: 12px;\n      }\n    }\n\n    @media (max-width: $screen-xs) {\n      li {\n        flex: 0 0 50%;\n      }\n    }\n  }\n\n  .items {\n    list-style: none;\n    margin-top: 28px;\n\n    @media (max-width: $screen-md-max) {\n      display: flex;\n      justify-content: space-around;\n    }\n\n    @media (max-width: $screen-sm-max) {\n      display: block;\n    }\n\n    a {\n      padding: 14px 23px 18px 95px;\n      margin-right: 13px;\n      position: relative;\n      cursor: pointer;\n      display: inline-block;\n      width: 365px;\n      margin-bottom: 30px;\n      vertical-align: top;\n\n      &,\n      &:hover,\n      &:active {\n        text-decoration: none;\n      }\n\n      &:last-child {\n        margin-right: 0;\n      }\n\n      @media (max-width: $screen-sm-max) {\n        display: block;\n        margin: 18px auto;\n\n        &:last-child {\n          margin-right: auto;\n        }\n      }\n\n      &::before {\n        border-radius: 4px;\n        background: white;\n        box-shadow: 0 1px 4px rgba(0, 0, 0, 0.15);\n        position: absolute;\n        top: 0;\n        bottom: 0;\n        left: 0;\n        right: 0;\n        content: \"\";\n        display: block;\n        transition: 0.3s transform cubic-bezier(0.155, 1.105, 0.295, 1.12),\n          0.3s box-shadow;\n      }\n\n      &:hover {\n        text-decoration: none;\n\n        &::before {\n          box-shadow: 0 4px 10px rgba(0, 0, 0, 0.15);\n          transform: scale(1.05);\n        }\n      }\n\n      @media (max-width: $screen-xs-max) {\n        width: 100%;\n\n        &:hover {\n          text-decoration: none;\n\n          &::before {\n            transform: scale(1);\n          }\n        }\n      }\n\n      &::after {\n        background-repeat: no-repeat;\n        background-image: url(\"/img/support/support-thumbnails.png\");\n        background-size: 48px;\n        width: 48px;\n        height: 48px;\n        content: \"\";\n        display: block;\n        position: absolute;\n        left: 29px;\n        top: 34px;\n        transition: 0.3s transform cubic-bezier(0.155, 1.105, 0.295, 1.12);\n      }\n\n      &.slack::after {\n        background-position: 0 -48px;\n      }\n      &.so::after {\n        background-position: 0 -96px;\n      }\n      &.account::after {\n        background-position: 0 -144px;\n      }\n      &.bug::after {\n        background-position: 0 -192px;\n      }\n      &.troubleshooting::after {\n        background-position: 0 -240px;\n      }\n      &.resources::after {\n        background-position: 0 -288px;\n      }\n      &.github::after {\n        background-position: 0 -336px;\n      }\n      &.faq::after {\n        background-position: 0 -384px;\n      }\n\n      h3 {\n        color: #272a2f;\n        font-size: 16px;\n        position: relative;\n        letter-spacing: -0.02em;\n        margin-bottom: 8px;\n      }\n\n      p {\n        color: $darkish-grey;\n        font-size: 14px;\n        font-weight: 400;\n        position: relative;\n        line-height: 1.4;\n      }\n    }\n  }\n\n  .banner {\n    background: #18263e;\n    background-image: url(\"/img/support/support-banner-bg.jpg\");\n    background-repeat: no-repeat;\n    background-size: cover;\n    background-position: center;\n\n    .container {\n      margin-top: 0;\n    }\n\n    hgroup {\n      margin-top: 0;\n      padding: 86px 0;\n      color: rgba(white, 0.95);\n      text-align: left;\n      max-width: 430px;\n\n      strong {\n        color: white;\n        font-weight: 600;\n      }\n\n      h1 {\n        font-size: 40px;\n        line-height: 50px;\n        letter-spacing: -0.03em;\n        color: #ffffff;\n      }\n\n      p,\n      a {\n        font-family: $font-family-inter;\n      }\n\n      p {\n        font-size: 20px;\n        line-height: 31px;\n        letter-spacing: -0.02em;\n        color: rgba(#fff, 0.8);\n      }\n\n      a {\n        transition: 0.2s all;\n        display: flex;\n        align-items: center;\n        font-weight: 500;\n        font-size: 19px;\n        line-height: 32px;\n        letter-spacing: -0.02em;\n        color: #639cff;\n\n        ion-icon {\n          transform: translate(1px, 1px);\n        }\n\n        &:hover {\n          color: #70a3fd;\n\n          ion-icon {\n            transform: translate(3px, 1px);\n          }\n        }\n      }\n    }\n\n    @media (max-width: $screen-sm) {\n      hgroup {\n        margin-left: auto;\n        margin-right: auto;\n        text-align: center;\n        display: flex;\n        flex-direction: column;\n        align-items: center;\n      }\n    }\n  }\n\n  section.newsletter-signup {\n    background-color: #f6f8fb;\n\n    .container {\n      margin-top: 0;\n      padding-top: 120px;\n      padding-bottom: 120px;\n    }\n\n    .flex {\n      display: flex;\n      justify-content: space-between;\n      align-items: flex-end;\n    }\n\n    hgroup {\n      padding-right: 80px;\n\n      h1 {\n        font-weight: 500;\n        font-size: 28px;\n        line-height: normal;\n        letter-spacing: -0.03em;\n        color: #3880ff;\n        margin-bottom: 0;\n      }\n\n      p {\n        font-size: 20px;\n        line-height: 36px;\n        letter-spacing: -0.02em;\n        color: #73849a;\n        margin-bottom: 0;\n      }\n    }\n\n    ionic-newsletter-signup {\n      height: 50px;\n      flex: 1;\n\n      input {\n        background: #fff;\n      }\n    }\n\n    @media (max-width: $screen-sm) {\n      .flex {\n        flex-direction: column;\n        align-items: center;\n      }\n\n      hgroup {\n        padding-right: 0;\n        text-align: center;\n        margin-left: auto;\n        margin-right: auto;\n      }\n\n      .container {\n        padding-top: 60px;\n        padding-bottom: 98px;\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "assets/scss/pages/survey/2017.scss",
    "content": "@import '../../vars';\n@import 'surveys';\n\n\n\n.survey-layout {\n  .navbar ~ .banner {\n    h2 {\n      font-weight: 700;\n      color: rgba(0, 0, 0, .5);\n      font-size: 19px;\n      letter-spacing: .05em;\n  \n      svg {\n        fill-opacity: .5;\n        display: block;\n      }\n    }\n  }\n  \n  article {\n    > hgroup,\n    > section {\n      .container::before {\n        background: url('/img/survey/header-thumbnails.png');\n        background-size: 96px;\n        width: 96px;\n        height: 96px;\n        content: '';\n        display: block;\n        margin: 92px auto 36px;\n      }\n    }\n    \n    > section .container::before {\n      position: absolute;\n      top: -113px;\n      left: 24px;\n      margin: 0;\n    }\n\n    > hgroup .container {\n        font-family: $font-family-serif;\n    }\n  }\n}\n\n#insights .container {\n  &::before {\n    animation: 1s fadeInUp;\n    animation-delay: 3.5s;\n    animation-fill-mode: forwards;\n    opacity: 0;\n  }\n\n  p {\n    animation: 1s fadeInUp;\n    animation-delay: 3.75s;\n    animation-fill-mode: forwards;\n    opacity: 0;\n  }\n}\n\n#profile {\n  .container::before {\n    background-position: 0 -96px;\n  }\n  \n  aside {\n    @media (max-width: $screen-sm-max)  {\n      text-align: center;\n    }\n  }\n\n  .factoid {\n    width: 200px;\n    background: #e9edf8;\n    border-radius: 32px;\n    display: inline-block;\n    margin: 34px -7px 0px 15px;\n    padding: 33px 19px 12px;\n\n    strong {\n      color: $blue;\n      font-weight: 500;\n      font-size: 48px;\n      text-align: center;\n      display: block;\n      letter-spacing: -.05em;\n      margin-bottom: -2px;\n    }\n\n    p {\n      font-size: 14px;\n      line-height: 1.4em;\n    }\n  }\n}\n\n#trends {\n  background: #f6f8fc;\n\n  .container::before {\n    background-position: 0 -192px;\n  }\n\n  figure {\n    display: block;\n    margin: 94px auto 33px;\n    padding-left: 35px;\n\n    &:first-child {\n      margin-top: 99px;\n    }\n\n    img {\n      margin-bottom: 8px;\n    }\n\n    strong {\n      font-size: 48px;\n      color: $blue;\n      font-weight: 400;\n      letter-spacing: -.01em;\n    }\n\n    p {\n      padding-left: 0;\n      padding-right: 0;\n      margin-left: 0;\n      font-size: 14px;\n      font-weight: 500;\n      max-width: 142px;\n      margin-top: -4px;\n      line-height: 1.48em;\n    }\n\n    &:last-child img {\n      margin-left: 17px;\n    }\n  }\n     \n  aside {\n    @media (max-width: $screen-sm-max)  {\n      text-align: center;\n\n      figure,\n      figure:first-child {\n        display: inline-block;\n        margin-top: 50px;\n        vertical-align: top;\n      }\n    }\n\n    @media (max-width: $screen-xs-max)  {\n      display: flex;\n      justify-content: space-around;\n\n      figure {\n        padding-left: 0;\n      }\n    }\n  }\n}\n\n#tools {\n  background: #161920;\n\n  .container::before {\n    background-position: 0 -288px;\n  }\n\n  .tools {\n    text-align: center;\n    padding: 0 24px 0 0;\n    display: flex;\n    justify-content: space-between;\n\n    li {\n      background: no-repeat url('/img/survey/tools-icons.png');\n      background-size: 70px;\n      width: 70px;\n      height: 70px;\n      display: inline-block;\n\n      &.node {      background-position: 0 -70px; }\n      &.analytics { background-position: 0 -140px; }\n      &.vscode {    background-position: 0 -210px; }\n      &.aws {       background-position: 0 -280px; }\n    }\n\n    @media (max-width: $screen-xs-max)  {\n      padding-right: 0;\n    }\n  }\n}\n\n#habbits {\n  background: $blue;\n\n  .container::before {\n    background-position: 0 -384px;\n  }\n}\n\n#big-picture {\n  background: #f6f8fc;\n\n  .container::before {\n    background-position: 0 -480px;\n  }\n\n  p {\n    animation-delay: 2s;\n  }\n}"
  },
  {
    "path": "assets/scss/pages/survey/2018.scss",
    "content": "@import \"../../vars\";\n@import \"../../mixins\";\n@import \"surveys\";\n\n#page-survey-2018 {\n  .navbar ~ .banner {\n    background: #709df0 no-repeat 50% 50%;\n    background-image: linear-gradient(\n      135deg,\n      #2a67ff 0%,\n      #317ef0 10%,\n      #5bb2e6 30%,\n      #6fb2e4 36%,\n      #996cc7 66%,\n      #95a0fd 100%\n    );\n    background-image: url(\"/img/survey/2018-bg.jpg\"),\n      linear-gradient(\n        135deg,\n        #2a67ff 0%,\n        #317ef0 10%,\n        #5bb2e6 30%,\n        #6fb2e4 36%,\n        #996cc7 66%,\n        #95a0fd 100%\n      );\n    background-size: cover, 100%;\n  }\n\n  #bars-and-cubes {\n    position: absolute;\n    height: 100%;\n    width: 100%;\n    top: 0;\n    overflow: hidden;\n\n    #bars {\n      position: absolute;\n      width: 100%;\n      bottom: -400px;\n      left: 0;\n\n      > g {\n        opacity: 0;\n        mix-blend-mode: overlay;\n        animation: fadeInUp 1s 0.5s forwards;\n\n        &:nth-child(16) {\n          animation-delay: 0.6s;\n        }\n        &:nth-child(15) {\n          animation-delay: 0.65s;\n        }\n        &:nth-child(14) {\n          animation-delay: 0.7s;\n        }\n        &:nth-child(13) {\n          animation-delay: 0.75s;\n        }\n        &:nth-child(12) {\n          animation-delay: 0.8s;\n        }\n        &:nth-child(11) {\n          animation-delay: 0.85s;\n        }\n        &:nth-child(10) {\n          animation-delay: 0.9s;\n        }\n        &:nth-child(9) {\n          animation-delay: 0.95s;\n        }\n        &:nth-child(8) {\n          animation-delay: 1s;\n        }\n        &:nth-child(7) {\n          animation-delay: 1.05s;\n        }\n        &:nth-child(6) {\n          animation-delay: 1.1s;\n        }\n        &:nth-child(5) {\n          animation-delay: 1.15s;\n        }\n        &:nth-child(4) {\n          animation-delay: 1.2s;\n        }\n        &:nth-child(3) {\n          animation-delay: 1.25s;\n        }\n        &:nth-child(2) {\n          animation-delay: 1.3s;\n        }\n      }\n    }\n\n    #cubes {\n      position: absolute;\n      width: 100%;\n      top: -50px;\n      left: 0;\n      opacity: 0;\n      mix-blend-mode: overlay;\n      animation: fadeInUp 2s ease 3s forwards;\n\n      g g {\n        animation: hoverY 10s infinite;\n\n        &:nth-child(2) {\n          animation-duration: 15s;\n        }\n        &:nth-child(3) {\n          animation-duration: 8s;\n        }\n        &:nth-child(4) {\n          animation-duration: 13s;\n        }\n      }\n    }\n  }\n\n  .cta hgroup {\n    max-width: 590px;\n\n    h2 {\n      font-family: $font-family-monospace;\n      font-weight: bold;\n      font-size: 12px;\n      letter-spacing: 0.14em;\n      text-transform: uppercase;\n      margin-top: 28px;\n      margin-bottom: 23px;\n\n      svg {\n        margin-bottom: 10px;\n      }\n    }\n\n    h1 {\n      font-size: 64px;\n      line-height: normal;\n      letter-spacing: -0.03em;\n      margin-top: 22px;\n      margin-bottom: 2px;\n    }\n\n    p {\n      margin-bottom: 10px;\n      line-height: 40px;\n    }\n  }\n\n  .bar {\n    .nav a {\n      font-size: 14px;\n      letter-spacing: 0.04em;\n      text-transform: uppercase;\n      padding: 43px 26px 38px;\n      color: #b2becd;\n    }\n\n    .active a,\n    a:hover {\n      color: #639cff;\n    }\n\n    .active a {\n      border-color: #639cff;\n    }\n\n    @media (max-width: $screen-sm-max) {\n      .nav a {\n        padding: 24px 9px 24px;\n      }\n    }\n\n    @media (max-width: $screen-xs-max) {\n      overflow-x: auto;\n\n      .nav a {\n        padding: 24px 6px 24px;\n      }\n    }\n  }\n\n  article {\n    h4,\n    p {\n      padding-left: 0;\n      padding-right: 0;\n    }\n\n    h3 {\n      font-size: 48px;\n      letter-spacing: -0.03em;\n      margin-bottom: 30px;\n    }\n\n    h4 {\n      font-size: 20px;\n      letter-spacing: -0.02em;\n    }\n\n    blockquote {\n      font-family: $font-family-inter;\n      line-height: 34px;\n      font-size: 20px;\n      letter-spacing: -0.02em;\n      color: #7c90f6;\n      border-left: none;\n      padding-left: 0;\n      margin-left: 0;\n      margin-bottom: 13px;\n      padding-top: 0;\n\n      a {\n        text-decoration: underline;\n        font-weight: 500;\n      }\n\n      &.pink {\n        color: #f37bab;\n      }\n\n      &.orange {\n        color: #f5947e;\n      }\n    }\n\n    section {\n      background: linear-gradient(\n        180deg,\n        #f7f9fc 0%,\n        rgba(247, 249, 252, 0) 100%\n      );\n      padding-top: 106px;\n      padding-bottom: 170px;\n    }\n\n    section {\n      h3 {\n        margin-left: 19px;\n      }\n\n      .col-md-6 {\n        padding: 0 48px 0 35px;\n\n        + .col-md-6 {\n          padding: 0 35px 0 48px;\n        }\n\n        @media (max-width: $screen-xs-max) {\n          &,\n          + .col-md-6 {\n            padding: 0 15px;\n          }\n        }\n      }\n\n      p {\n        font-family: $font-family-inter;\n        line-height: 29px;\n        font-size: 16px;\n        letter-spacing: -0.01em;\n        margin-bottom: 22px;\n      }\n\n      h4 {\n        margin-top: 0;\n        margin-bottom: 28px;\n        line-height: normal;\n      }\n\n      p + h4 {\n        margin-top: 66px;\n        margin-bottom: 19px;\n      }\n    }\n  }\n\n  .factoid {\n    padding: 5px 0 20px;\n    display: inline-block;\n\n    &:first-child {\n      margin-right: 56px;\n    }\n\n    strong {\n      line-height: normal;\n      font-size: 56px;\n      letter-spacing: -0.03em;\n      color: #7c8ff6;\n    }\n\n    span {\n      font-family: $font-family-inter;\n      line-height: normal;\n      font-size: 16px;\n      letter-spacing: -0.02em;\n      color: #4b537a;\n      display: block;\n      margin-top: -14px;\n    }\n  }\n\n  #introduction {\n    .container {\n      max-width: 622px;\n      margin: 98px auto 158px;\n    }\n\n    h3 {\n      font-size: 48px;\n      letter-spacing: -0.03em;\n      color: #0e151f;\n      margin-bottom: 8px;\n    }\n\n    p {\n      font-size: 24px;\n      text-align: center;\n      line-height: normal;\n      margin-bottom: 33px;\n      letter-spacing: -0.02em;\n    }\n  }\n\n  #big-three {\n    display: flex;\n    justify-content: space-between;\n    flex-wrap: wrap;\n    padding: 0 0 24px;\n\n    li {\n      background: url(\"/img/survey/frameworks.png\") 0 0 no-repeat;\n      height: 96px;\n      width: 96px;\n      list-style: none;\n      background-size: 96px;\n      margin-bottom: 16px;\n\n      @include sprite(\"angular\" \"react\" \"vue\", 96, \"\");\n    }\n  }\n\n  .tools {\n    display: flex;\n    flex-wrap: wrap;\n    padding: 0 0 24px;\n\n    li {\n      background: url(\"/img/survey/tools.png\") 0 0 no-repeat;\n      height: 80px;\n      width: 80px;\n      list-style: none;\n      background-size: 80px;\n      margin-bottom: 16px;\n      margin-right: 15px;\n\n      @include sprite(\n        \"ionic\" \"react\" \"xamarin\" \"mysql\" \"firebase\" \"mongodb\" \"postgres\",\n        80,\n        \"\"\n      );\n    }\n  }\n\n  img.pull-right {\n    margin: 24px -15px 10px 30px;\n  }\n\n  #tools .tools {\n    margin: -2px 0 25px -9px;\n  }\n\n  #habbits aside {\n    display: flex;\n    margin-bottom: 52px;\n  }\n\n  #backend .tools {\n    margin: 39px 0 1px;\n  }\n\n  #big-picture {\n    background: #18212f;\n    color: white;\n\n    .container {\n      max-width: 622px;\n    }\n\n    h3 {\n      margin-bottom: 8px;\n    }\n\n    p {\n      line-height: normal;\n      font-size: 24px;\n      letter-spacing: -0.02em;\n      margin-bottom: 33px;\n      color: #dee3ea;\n\n      &.blue {\n        color: #639cff;\n        margin-bottom: 40px;\n      }\n\n      strong {\n        font-weight: 600;\n        color: white;\n      }\n    }\n  }\n\n  #results {\n    hgroup {\n      max-width: 970px;\n      padding-top: 162px;\n\n      h2 {\n        line-height: normal;\n        font-size: 48px;\n        letter-spacing: -0.03em;\n      }\n\n      p {\n        line-height: normal;\n        font-size: 24px;\n        letter-spacing: -0.02em;\n        color: #dee3ea;\n        max-width: 640px;\n      }\n    }\n\n    section {\n      background: transparent;\n      padding-bottom: 0px;\n      padding-top: 14px;\n    }\n\n    #demographics {\n      padding-top: 105px;\n    }\n\n    #backend {\n      padding-bottom: 105px;\n    }\n\n    h3 {\n      line-height: normal;\n      font-size: 36px;\n      letter-spacing: -0.02em;\n      margin: 33px -0 44px;\n      padding: 0;\n    }\n\n    h4 {\n      font-family: $font-family-monospace;\n      font-style: normal;\n      font-weight: 500;\n      line-height: normal;\n      font-size: 20px;\n      letter-spacing: -0.04em;\n      margin-bottom: 42px;\n    }\n\n    ionic-bar-chart {\n      font-family: $font-family-monospace;\n      margin-bottom: 111px;\n\n      &:not(.hydrated) {\n        min-height: 120px;\n      }\n    }\n\n    .bar {\n      background: #5b708b\n        linear-gradient(to right, rgba(#92e1a7, 0.2), rgba(#51a7ff, 0.2));\n    }\n  }\n\n  #tools .bar {\n    background: #5b708b\n      linear-gradient(to right, rgba(#e54385, 0.2), rgba(#786df9, 0.2));\n  }\n\n  #results-pwas .bar {\n    background: #5b708b\n      linear-gradient(to right, rgba(#ff7b5e, 0.2), rgba(#f37bab, 0.2));\n  }\n\n  #backend .bar {\n    background: #5b708b\n      linear-gradient(to right, rgba(#f2c526, 0.2), rgba(#92e1a7, 0.2));\n  }\n}\n"
  },
  {
    "path": "assets/scss/pages/survey/2020.scss",
    "content": "@import '../../vars';\n\n$c-black-300: #24282E;\n$c-black-400: #17202E;\n$c-black-500: #0E151F;\n\n$c-grey-200: #F7F9FC;\n$c-grey-300: #DEE3EA;\n$c-grey-400: #B2BECD;\n\n$c-blue-400: #3780FF;\n\n// scroll reveal conflicts w/ sticky nav\nhtml {\n  height: auto !important;\n}\n\n#page-survey-2020 {\n  position: relative;\n}\n\n#survey-banner {\n  background: transparent 50% 0% no-repeat padding-box;\n  background-image:\n    url('/img/survey/banner-mask.svg'),\n    linear-gradient(180deg, #4BA6FF 0%, #3E71FF 100%);\n  background-size: 1440px, cover;\n\n  // safari only because of a chrome bug\n  @media not all and (min-resolution:.001dpcm)\n    { @supports (-webkit-appearance:none) {\n      overflow: hidden;\n    }\n  }\n\n  .container {\n    position: relative;\n  }\n\n  hgroup {\n    max-width: 580px;\n  }\n\n  h1,\n  h4,\n  p {\n    animation: 1s fadeInUp;\n    animation-fill-mode: forwards;\n    opacity: 0;\n  }\n\n  h1 {\n    font-size: 64px;\n    line-height: normal;\n    letter-spacing: -.03em;\n    margin-top: 22px;\n    margin-bottom: 2px;\n    font-weight: 600;\n    animation-delay: 1.2s;\n  }\n\n  h4 {\n    font-family: $font-family-monospace;\n    font-weight: 700;\n    font-size: 12px;\n    letter-spacing: .14em;\n    text-transform: uppercase;\n    margin-top: 0;\n    margin-bottom: 23px;\n    opacity: 0;\n    animation-delay: 0s;\n  }\n\n  p {\n    font-size: 22px;\n    color: rgba(255,255,255,.8);\n    line-height: 40px;\n    opacity: 0;\n    animation-delay: 1.4s;\n  }\n}\n\n#cubes {\n  li {\n    list-style: none;\n    position: absolute;\n    animation: 1s fadeIn;\n    animation-fill-mode: forwards;\n    opacity: 0;\n    \n    &:nth-child(1) {\n      top: 22px;\n      left: -336px;\n      animation-delay: 2s;\n    }\n\n    &:nth-child(2) {\n      top: 58px;\n      right: -196px;\n      animation-delay: 2.2s;\n    }\n\n    &:nth-child(3) {\n      top: 337px;\n      right: -254px;\n      animation-delay: 2.4s;\n    }\n\n    &:nth-child(4) {\n      top: 237px;\n      left: -120px;\n      animation-delay: 2.6s;\n    }\n\n    &:nth-child(5) {\n      top: 30px;\n      right: 92px;\n      animation-delay: 2.8s;\n    }\n\n    &:nth-child(6) {\n      top: 309px;\n      left: -34px;\n      animation-delay: 2.9s;\n    }\n  }\n}\n\n#survey-2020-nav {\n  position: sticky;\n  z-index: 1;\n  top: -2px;\n  background: white;\n  transition: .2s box-shadow, .2s border-color;\n  border-bottom: 1px solid $c-grey-300;\n  transition: .3s background-color;\n\n  ul {\n    display: flex;\n    justify-content: space-around;\n    padding: 0;\n    margin-top: 0;\n    margin-bottom: 0;\n  }\n\n  li {\n    list-style: none;\n  }\n\n  a {\n    padding: 43px 26px 38px;\n    display: inline-block;\n    font-size: 14px;\n    line-height: 1em;\n    letter-spacing: 0;\n    color: $c-grey-400;\n    font-weight: 600;\n    transition: .2s color;\n    position: relative;\n\n    &::before {\n      content: '';\n      background: $c-blue-400;\n      position: absolute;\n      bottom: -1px;\n      right: 0;\n      left: 0;\n      height: 2px;\n      opacity: 0;\n      transition: .4s opacity ease-out;\n    }\n  }\n\n  li.active a,\n  a:hover,\n  a:active,\n  a:focus {\n    color: $c-blue-400;\n    background: transparent;\n  }\n\n  li.active a::before {\n    opacity: 1;\n  }\n\n  &.isSticky {\n    box-shadow: 0 2px 4px rgba($c-black-300, .1);\n    border-bottom-color: transparent;\n\n    @supports (backdrop-filter: blur(5px)) {\n      background: rgba(white, .8);\n      backdrop-filter: blur(30px);\n    }\n  }\n\n  &.isDark {\n    background: black;\n\n    @supports (backdrop-filter: blur(5px)) {\n      background: rgba(black, .7);\n      backdrop-filter: blur(20px);\n    }\n  }\n\n  @media (max-width: $screen-xs-max)  {\n    overflow-x: auto;\n    top: 46px;\n\n    a {\n      padding: 32px 8px 24px;\n    }\n  }\n}\n\n#scroll-spy {\n  position: relative;\n  top: -96px;\n}\n\nmain {\n\n  h2 {\n    font-size: 48px;\n    line-height: 66px;\n    font-weight: bold;\n    letter-spacing: 0;\n    color: $c-black-500;\n    margin-bottom: 45px;\n  }\n\n  p {\n    font-size: 16px;\n    line-height: 29px;\n    font-weight: 400;\n    letter-spacing: 0;\n    color: $c-black-500;\n    margin-bottom: 20px;\n\n    &.lg {\n      font-size: 24px;\n      line-height: 33px;\n      font-weight: 400;\n      letter-spacing: 0;\n      color: $c-black-300;\n      margin-bottom: 32px;\n\n      + .lg {\n        margin-top: 40px;\n      }\n\n      + h3 {\n        margin-top: 60px;\n      }\n    }\n\n    &.highlight {\n      color: $c-blue-400;\n      font-size: 20px;\n      line-height: 34px;\n      font-weight: 400;\n      background: transparent;\n    }\n  }\n\n  h4 {\n    font-weight: 600;\n    font-size: 20px;\n    line-height: 27px;\n    color: $c-black-500;\n    letter-spacing: 0;\n\n    + .highlight {\n      margin-top: 25px;\n    }\n  }\n\n  dl {\n    margin: 48px 0 100px;\n  }\n\n  dt {\n    font-size: 20px;\n    letter-spacing: 0;\n    line-height: 24px;\n\n    small {\n      display: block;\n      font-weight: 500;\n      font-size: 14px;\n      color: rgba(white, .7);\n    }\n  }\n\n  dd {\n    margin-bottom: 60px;\n  }\n\n  .spacer {\n    margin: 45px 0;\n  }\n\n  .container {\n    max-width: 880px + $grid-gutter-width;\n    position: relative;\n    z-index: 0;\n  }\n\n  section {\n    padding-top: 77px;\n    padding-bottom: 77px;\n    overflow: hidden;\n\n    &.grey {\n      background: $c-grey-200;\n    }\n\n    &.dark,\n    &.black {\n      background: $c-black-400;\n      color: white;\n      padding-top: 110px;\n      padding-bottom: 110px;\n\n      p, \n      h2, \n      h3, \n      h4, \n      h5 {\n        color: white;\n      }\n    }\n\n    &.black {\n      background: $c-black-500;\n    }\n\n    &.center {\n      .container {\n        max-width: 630px;\n      }\n    }\n\n    figure {\n      margin: 30px 0;\n    }\n\n    @media (max-width: $screen-sm-max)  {\n      svg,\n      img {\n        max-width: 100%;\n      }\n    }\n  }\n\n  .cols {\n    display: flex;\n    justify-content: space-between;\n\n    .col {\n      width: 380px;\n      overflow: visible;\n\n      @media (max-width: $screen-sm-max)  {\n        width: 350px;\n      }\n    }\n\n    + h4 {\n      margin-top: 50px;\n    }\n\n\n    @media (max-width: $screen-xs-max)  {\n      flex-wrap: wrap;\n\n      .col {\n        width: 100%;\n      }\n    }\n  }\n}\n\n#results {\n  h3 {\n    font-size: 36px;\n    line-height: 44px;\n    font-weight: 700;\n  }\n}\n\n#trends,\n#tools,\n#tools-tools,\n#js-trends,\n#delivery,\n#pwas,\n#backend,\n#bottom-line {\n  .container::before {\n    background: transparent no-repeat 0 0;\n    background-size: 100%;\n    content: '';\n    z-index: -1;\n    position: absolute;\n  }\n}\n\n#trends .container::before {\n  background-image: url('/img/survey/lines-trends.svg');\n  width: 317px;\n  height: 267px;\n  bottom: -77px;\n  right: 30px;\n  \n  @media (max-width: $screen-xs-max)  {\n    bottom: -200px;\n    right: -60px;\n  }\n}\n\n#tools .container::before {\n  background-image: url('/img/survey/lines-tools.svg');\n  width: 545px;\n  height: 355px;\n  bottom: 58px;\n  left: -260px;\n  opacity: .4;\n}\n\n#tools-tools .container::before {\n  background-image: url('/img/survey/lines-tools-tools.svg');\n  width: 299px;\n  height: 254px;\n  bottom: -77px;\n  right: -260px;\n}\n\n#js-trends .container::before {\n  background-image: url('/img/survey/lines-js-trends.svg');\n  width: 1440px;\n  height: 355px;\n  left: -280px;\n  top: 170px;\n\n  @media (max-width: $screen-xs-max)  {\n    display: none;\n  }\n}\n\n#delivery {\n  .container::before {\n    background-image: url('/img/survey/lines-delivery.svg');\n    width: 1097px;\n    height: 508px;\n    bottom: -77px;\n    left: -340px;\n  }\n\n  figure {\n    margin: 140px 0 100px; \n\n    svg.sm {\n      display: none;\n    }\n  \n    @media (max-width: $screen-sm-max)  {\n      svg {\n        &.sm {\n          display: block;\n        }\n  \n        &.lg {\n          display: none;\n        }\n      }\n    }\n  }\n}\n\n#pwas .container::before {\n  background-image: url('/img/survey/lines-pwas.svg');\n  width: 726px;\n  height: 356px;\n  bottom: -77px;\n  right: -312px;\n\n  @media (max-width: $screen-xs-max)  {\n    display: none;\n  }\n}\n\n#backend .container::before {\n  background-image: url('/img/survey/lines-backend.svg');\n  width: 234px;\n  height: 347px;\n  bottom: -79px;\n  left: -220px;\n}\n\n#bottom-line {\n  .container::before {\n    background-image: url('/img/survey/lines-bottom-line.svg');\n    width: 519px;\n    height: 244px;\n    top: -114px;\n    right: -400px;\n  }\n}\n\n#frameworks {\n  list-style: none;\n  padding: 0;\n  margin: 60px 0 70px;\n\n  li {\n    display: inline-block;\n    margin-right: 20px;\n  }\n\n  svg {\n    width: unset;\n  }\n\n  @media (max-width: $screen-xs-max)  {\n    display: flex;\n    justify-content: space-around;\n\n    margin-right: 0;\n  }\n}\n\n#results-demographcis,\n#results-frameworks,\n#results-pwas,\n#results-process,\n#results-backend {\n  position: relative;\n\n  &::before {\n    background: transparent no-repeat 0 0;\n    background-size: 100%;\n    position: absolute;\n    content: '';\n    background-image: url('/img/survey/lines-demographics.svg');\n    width: 393px;\n    height: 300px;\n    top: -50px;\n    left: -60px;\n  }\n}\n\n#results-demographcis::before { top: 0; }\n\n#results-frameworks::before {\n  background-image: url('/img/survey/lines-frameworks.svg');\n}\n\n#results-process::before {\n  background-image: url('/img/survey/lines-frameworks.svg');\n}\n\n#results-pwas::before {\n  background-image: url('/img/survey/lines-pwa.svg');\n}\n\n#results-backend::before {\n  background-image: url('/img/survey/lines-backend-results.svg');\n}"
  },
  {
    "path": "assets/scss/pages/survey/_surveys.scss",
    "content": ".survey-layout {\n  .navbar ~ .banner {\n    background: linear-gradient(to right, #1e6fff 0%, #0499ff 100%);\n    background-size: 100%;\n    position: relative;\n\n    canvas {\n      position: absolute;\n      top: 0;\n      left: 0;\n      bottom: 0;\n      width: 100%;\n      animation: 10s fadeIn;\n      animation-fill-mode: forwards;\n      animation-delay: 1s;\n      opacity: 0;\n    }\n\n    hgroup {\n      padding-bottom: 112px;\n      padding-top: 48px;\n    }\n\n    h2 {\n      z-index: 1;\n      position: relative;\n      opacity: 0;\n      animation: 1s fadeInUp;\n      animation-delay: 2s;\n      animation-fill-mode: forwards;\n\n      svg {\n        margin: 23px auto 15px;\n        width: 32px;\n        display: block;\n      }\n    }\n\n    h1 {\n      font-size: 62px;\n      margin-top: 27px;\n      margin-bottom: 14px;    \n      letter-spacing: -.025em;\n      font-weight: 600;\n      animation: 1s fadeInUp;\n      animation-delay: 2.2s;\n      animation-fill-mode: forwards;\n      opacity: 0;\n    }\n\n    p {\n      font-size: 22px;\n      color: rgba(255, 255, 255, .8);\n      animation: 1s fadeInUp;\n      animation-delay: 2.4s;\n      animation-fill-mode: forwards;\n      letter-spacing: .01em;\n      opacity: 0;\n    }\n\n    .bar {\n      background: #fff;\n      ul li a {\n        padding: 28px 18px 22px;\n        margin: 0 15px -2px;\n\n        @media (max-width: $screen-xs-max)  {\n          padding-left: 0;\n          padding-right: 0;\n          margin-left: 5px;\n          margin-right: 5px; \n        }\n      }\n\n      @supports(backdrop-filter: blur(30px)) {\n        background: rgba(255, 255, 255, .8);\n        backdrop-filter: blur(30px);\n      }\n\n      &:not(.affix) {\n        box-shadow: 0 1px 4px rgba(0, 0, 0, 0.05), 0 1px 0 rgba(0, 0, 0, 0.05);\n        position: absolute;\n      }\n    }\n  } \n\n  article {\n    padding-top: 64px;\n\n    > hgroup .container {\n      max-width: 680px;\n      margin: 32px auto 49px;\n\n      p {\n        color: $blacker;\n        font-size: 23px;\n        line-height: 1.75em;\n        margin-bottom: 1.73em;\n        letter-spacing: -.001em;\n      }\n\n      h2 {\n        margin-top: 64px;\n      }\n\n      strong {\n        font-weight: 600;\n      }\n    }\n\n    h3 {\n      font-weight: 700;\n      letter-spacing: -.04em;\n      margin-top: 64px;\n      margin-bottom: 0;\n      padding: 31px 16px 29px;\n      font-size: 32px;\n\n      &::before,\n      &::after {\n        display: none;\n      }\n    }\n  }\n\n  section {\n    padding-bottom: 71px;\n\n    .container {\n      position: relative;\n      max-width: 962px;\n    }\n\n    h4 {\n      font-weight: 600;\n      font-size: 20px;\n      letter-spacing: -0.02em;\n    }\n\n    p,\n    h4 {\n      padding: 0 16px;\n      // max-width: 1000px;\n      margin: 0 auto 30px;\n      line-height: 1.69em;\n      letter-spacing: -.018em;\n\n      + h4 {\n        margin-top: 48px;\n      }\n    }\n\n    p {\n      font-size: 18px;\n      line-height: 1.75em;\n    }\n\n    .row + .row {\n      padding-top: 32px;\n    }\n  }\n\n  .dark {\n    background: #111925;\n\n    h2,\n    h3,\n    h4 {\n      color: rgba(255, 255, 255, .95);\n    }\n\n    p {\n      color: rgba(255, 255, 255, .8);\n    }\n\n    figure strong {\n      color: #ced6e0;\n    }\n  }\n\n  .intro::before {\n    animation-delay: 3s;\n  }\n\n  .data {\n    .container::before {\n      display: none;\n    }\n\n    h4 {\n      margin-bottom: 8px;\n    }\n  }\n}\n"
  },
  {
    "path": "assets/scss/pages/team.scss",
    "content": "@import '../vars';\n\n#page-team {\n  .navbar ~ .banner {\n    background: #393e49 no-repeat center top;\n    background-image: url('/img/team/team-cta-bg.jpg'),\n                      linear-gradient(to right, #1a2538 0%, #1f2b40 100%);\n    background-size: cover, 100%;\n    height: 360px;\n  }\n\n  .made-of {\n    max-width: 680px;\n    width: 100%;\n    margin: 80px auto 90px;\n    text-align: center;\n\n    h3 {\n      margin-bottom: 10px;\n    }\n\n    p {\n      color: #5d636c;\n      font-size: 18px;\n      line-height: 28px;\n      font-weight: 400;\n    }\n  }\n\n  .cofounders {\n\n    .img {\n      background: #f9f9fa no-repeat center top;\n      background-image: url('/img/team/max-ben.jpg');\n      background-size: cover;\n      height: 436px;\n      width: 100%;\n\n      @media (max-width: $screen-xs-max)  {\n        height: 290px;\n      }\n    }\n\n    .bar {\n      background: #f9f9fa repeat-y center top;\n      background-image: url('/img/team/max-ben-bar.jpg');\n      background-size: cover;\n      padding-top: 30px;\n\n      h4 {\n        font-size: 18px;\n        margin-bottom: 0;\n      }\n\n      p {\n        color: $dark-grey;\n      }\n    }\n\n    .max,\n    .ben {\n      width: 49%;\n      float: left;\n    }\n\n    .max {\n      padding-left: 15%;\n      @media (max-width: $screen-xs-max)  {\n        padding-left: 0;\n      }\n    }\n\n    .ben {\n      padding-left: 6%;\n    }\n  }\n\n  .employees {\n    display: flex;\n    flex-wrap: wrap;\n    justify-content: space-around;\n    padding-bottom: 60px;\n\n    .employee {\n      flex: 0 1 260px;\n      padding: 0 50px 50px;\n      position: relative;\n      margin: 0 auto;\n      text-decoration: none;\n\n      .avatar {\n        height: 160px;\n        width: 160px;\n        object-fit: cover;\n        -webkit-clip-path: circle(80px at center);\n        clip-path: circle(80px at center);\n        transition: transform .2s ease;\n      }\n\n      ion-icon.avatar {\n        color: lightgray;\n      }\n\n      &[href]:hover .avatar {\n        transform: scale(1.05, 1.05);\n      }\n\n      hgroup {\n        position:relative;\n        margin-top: 16px;\n        max-width: 160px;\n\n        h4 {\n          font-size: 16px;\n          margin-bottom: 4px;\n          font-weight: 600;\n          color: $blackish;\n          white-space: nowrap;\n        }\n\n        .social-row {\n          cursor: default;\n          position:relative;\n          z-index: 2;\n          top: 8px;\n          & > * {\n            margin-right: 4px;\n          }\n        }\n        .twitter {          \n          font-size: 22px;\n          font-family: \"Ionicons\";\n          transition: .2s color ease;\n          color: #a1a1a1;\n\n          &:hover, &:active, &:focus {\n            color:#696969;\n            text-decoration: none;\n          }\n        }\n\n        .linkedin {\n          font-size: 22px;\n          font-family: \"Ionicons\";\n          transition: .2s color ease;\n          color: #a1a1a1;    \n\n          &:hover, &:active, &:focus {\n              color:#696969;\n              text-decoration: none;\n            }    \n        }\n\n\n        p {\n          font-size: 10px;\n          color: #aaa;\n          font-weight: 600;\n          text-transform: uppercase;\n          letter-spacing: .03em;\n          margin-bottom: 3px;\n          white-space:nowrap;\n\n          &.blue {\n            color: $blue;\n\n          }\n        }\n      }\n\n      .description {\n        position: absolute;\n        width: 250px;\n        height: 260px;\n        top: 0;\n        line-height: 260px;\n        opacity: 0;\n        transition: opacity .5s;\n\n        p {\n          display: inline-block;\n          vertical-align: middle;\n          color: $blackish;\n          font-weight: 400;\n          font-size: 13px;\n          line-height: 22px;\n        }\n      }\n    }\n  }\n\n  .hero {\n    background: no-repeat center top url('/img/team/see-openings-bg.jpg');\n    background-size: cover;\n    height: 260px;\n    padding-top: 65px;\n\n    h3 {\n      color: white;\n    }\n\n    .btn.white {\n      text-transform: none;\n      letter-spacing: -0.02em;\n      font-weight: 700;\n      font-size: 14px;\n      border-radius: 3px;\n      padding: 16px 15px 14px;\n      margin-top: 15px;\n    }\n  }\n}\n"
  },
  {
    "path": "assets/scss/pages/thank-you.scss",
    "content": "@import \"../vars\";\n#page-thank-you {\n  font-family: $font-family-inter;\n\n  main {\n    padding-bottom: 0px;\n    overflow: visible;\n    margin-top: 40px;\n    padding-top: 64px;\n    padding-right: 30px;\n    font-size: 14px;\n    color: #4e545e;\n    letter-spacing: -0.02em;\n    max-width: 526px;\n\n    &::before {\n      background-color: #f6f8fc;\n      border-bottom: 1px solid #e5e7eb;\n      content: \"\";\n      position: absolute;\n      top: 0;\n      right: 0;\n      left: 0;\n      height: 450px;\n      display: block;\n    }\n\n    &::after {\n      display: none;\n    }\n\n    h1 {\n      color: $blacker;\n\n      + p {\n        color: #6e7f99;\n        font-size: 18px;\n        line-height: 36px;\n        perspective: 600px;\n        margin-bottom: 0;\n      }\n    }\n\n    p {\n      letter-spacing: -0.02em;\n      line-height: 2em;\n      font-size: 16px;\n      margin-bottom: 16px;\n    }\n  }\n\n  .content {\n    padding: 42px 48px 48px;\n    background: white;\n    box-shadow: 0 8px 48px 0px rgba(black, 0.2);\n    max-width: 536px;\n    border-radius: 10px;\n    position: relative;\n    margin-right: auto;\n    margin-left: auto;\n    text-align: center;\n    word-break: break-word;\n\n    h3 {\n      margin-top: 0;\n      margin-bottom: 30px;\n      font-weight: 700;\n      font-size: 28px;\n      line-height: 36px;\n      letter-spacing: -0.03em;\n    }\n\n    .btn {\n      display: block;\n      font-weight: 600;\n      white-space: normal;\n    }\n  }\n\n  .company {\n    margin: 128px 0 68px;\n    text-align: center;\n    width: 100%;\n\n    h2 {\n      color: #7f8fab;\n      margin: 0 auto;\n      font-size: 28px;\n      max-width: 790px;\n      text-align: center;\n      line-height: 1.4em;\n      letter-spacing: -0.04em;\n      font-weight: 600;\n      padding-right: 15px;\n      padding-left: 15px;\n    }\n\n    strong {\n      color: #131924;\n      font-weight: 700;\n    }\n\n    .logos {\n      display: flex;\n      flex-wrap: wrap;\n      margin-top: 51px;\n      justify-content: space-evenly;\n\n      &::before,\n      &::after {\n        background: url(\"/img/homepage/enterprise-logos.png\") 0 0 no-repeat;\n        background-size: 100%;\n        width: 494px;\n        height: 42px;\n        content: \"\";\n        max-width: 100%;\n        margin-bottom: 32px;\n        display: inline-block;\n      }\n\n      &::after {\n        background-position: 0 bottom;\n      }\n    }\n  }\n\n  @media (max-width: $screen-sm-max) {\n    .banner hgroup {\n      padding-right: 15px;\n      text-align: center;\n    }\n\n    h1 {\n      margin-right: auto;\n      margin-left: auto;\n    }\n\n    p.lg {\n      margin-right: 24px;\n    }\n\n    main {\n      display: block;\n    }\n\n    .company {\n      margin-top: 128px;\n    }\n  }\n}\n"
  },
  {
    "path": "assets/scss/pages/translations.scss",
    "content": "@import '../vars';\n@import '../components/resource-card';\n\nmain {\n  margin-top: 64px;\n  margin-bottom: 64px;\n}\n\n.resource-card-list {\n  justify-content: space-around;\n}\n\n#join-the-fight {\n  margin: 0 auto;\n  max-width: 600px;\n}"
  },
  {
    "path": "assets/scss/pages/trusted-partners.scss",
    "content": "@import '../vars';\n@import 'bootstrap-sass/assets/stylesheets/bootstrap/variables';\n\n@import '../mixins';\n\n@mixin tp-logos() {\n  &.arctic-leaf { background-image: url('/img/trusted-partners/tp-logo-arctic-leaf.png'); }\n  &.bendyworks { background-image: url('/img/trusted-partners/tp-logo-bendyworks.png'); }\n  &.benoveltylimited { background-image: url('/img/trusted-partners/tp-logo-benovelty.png'); }\n  &.briebug { background-image: url('/img/trusted-partners/tp-logo-briebug.png'); }\n  &.byng { background-image: url('/img/trusted-partners/tp-logo-byng.png'); }\n  &.clearlyinnovative { background-image: url('/img/trusted-partners/tp-logo-clearlyinnovative.png'); }\n  &.digitalscientists { background-image: url('/img/trusted-partners/tp-logo-digitalscientists.png'); }\n  &.elixel { background-image: url('/img/trusted-partners/tp-logo-elixel.png'); }\n  &.hybapps { background-image: url('/img/trusted-partners/tp-logo-hybapps.png?1'); }\n  &.hybridmob { background-image: url('/img/trusted-partners/tp-logo-hybridmob.png'); }\n  &.hybrid-heroes { background-image: url('/img/trusted-partners/tp-logo-hybrid-heroes.png'); }\n  &.incentro { background-image: url('/img/trusted-partners/tp-logo-incentro.png'); }\n  &.inviqa { background-image: url('/img/trusted-partners/tp-logo-inviqa.png'); }\n  &.jnesis { background-image: url('/img/trusted-partners/tp-logo-jnesis.png'); }\n  &.keensoft { background-image: url('/img/trusted-partners/tp-logo-keensoft.png'); }\n  &.kunder { background-image: url('/img/trusted-partners/tp-logo-kunder.png'); }\n  &.macadamian { background-image: url('/img/trusted-partners/tp-logo-macadamian.png'); }\n  &.modus { background-image: url('/img/trusted-partners/tp-logo-modus.png'); }\n  &.onetree { background-image: url('/img/trusted-partners/tp-logo-onetree.png'); }\n  &.openforge { background-image: url('/img/trusted-partners/tp-logo-openforge.png'); }\n  &.ordina { background-image: url('/img/trusted-partners/tp-logo-ordina.png'); }\n  &.powergate { background-image: url('/img/trusted-partners/tp-logo-powergate.png'); }\n  &.rangle { background-image: url('/img/trusted-partners/tp-logo-rangle.png'); }\n  &.revunit { background-image: url('/img/trusted-partners/tp-logo-revunit.png'); }\n  &.scaffold { background-image: url('/img/trusted-partners/tp-logo-scaffold.png'); }\n  &.scopic { background-image: url('/img/trusted-partners/tp-logo-scopic.png'); }\n  &.spatial-vision { background-image: url('/img/trusted-partners/tp-logo-spatial-vision.png'); }\n  &.warpdev { background-image: url('/img/trusted-partners/tp-logo-warpdev.png'); }\n  &.yuxi { background-image: url('/img/trusted-partners/tp-logo-yuxi.png'); }\n}\n\n#page-trusted-partners {\n  .navbar {\n    .btn {\n      color: #26262e;\n    }\n\n    ~ .banner {\n      background: #2a262c;\n      background: url('/img/trusted-partners/tp-cta-bg.jpg'),\n                  linear-gradient(to right, #222530 0%, #35363e 50%, #2a2932 100%);\n      background-size: cover, 100%;\n\n      hgroup {\n        background: no-repeat center 100px url('/img/trusted-partners/ionic-trusted-partners-badge.png');\n        background-size: 143px;\n        padding-top: 260px;\n        margin-top: -72px;\n        padding-bottom: 67px;\n        text-align: center;\n        color: rgba(white, .9);\n\n        strong {\n          color: white;\n        }\n\n        h1 {\n          font-size: 48px;\n          line-height: 53px;\n          letter-spacing: -0.03em;\n        }\n\n        p {\n          max-width: 650px;\n          margin: 0 auto;\n          font-size: 18px;\n          font-family: $font-family-inter;\n          font-weight: 400;\n\n          b, strong {\n            font-weight: 600;\n          }\n\n          a {\n            color: rgba(white, .9);\n            text-decoration: underline;\n            transition: .2s color;\n            cursor: pointer;\n\n            &:hover {\n              color: white;\n            }\n          }\n\n          &.sm {\n            font-size: 14px;\n          }\n        }\n\n        .btn.white {\n          color: $blue;\n          margin: 44px auto 5px;\n          font-weight: 700 !important;\n        }\n      }\n    }\n  }\n\n  .perks {\n    border-bottom: 1px #e9ecf3 solid;\n    background: #f9fafc;\n    padding: 100px 0 20px;\n    margin-bottom: 0;\n\n    hgroup {\n      h2 {\n        font-size: 48px;\n        line-height: 53px;\n        letter-spacing: -0.03em;\n        color: #020814;\n        margin-bottom: 0;\n      }\n\n      p {\n        font-size: 24px;\n        line-height: 38px;\n        letter-spacing: -0.04em;\n        color: #27323F;\n      }\n    }\n\n    .item {\n      padding-top: 235px;\n\n      &::before {\n        background: no-repeat top center url('/img/trusted-partners/tp-info-icons.png');\n        background-size: 180px;\n        position: absolute;\n        top: 0;\n        left: 0;\n        right: 0;\n        height: 180px;\n        content: '';\n      }\n\n      &.quality::before {   background-position: center center; }\n      &.platforms::before { background-position: bottom center; }\n    }\n  }\n\n  .list {\n    justify-content: space-between;\n    padding: 48px 0 0;\n    display: flex;\n    flex-wrap: wrap;\n\n    .item,\n    li {\n      width: 300px;\n      flex: 0 0 300px;\n      position: relative;\n      text-align: center;\n      list-style: none;\n      padding-bottom: 80px;\n      margin: 0 auto;\n\n      h4 {\n        font-size: 22px;\n      }\n\n      p {\n        line-height: 24px;\n        max-width: 300px;\n        font-size: 14px;\n        margin: 0 auto;\n      }\n    }\n  }\n\n  #partner-map {\n    background: #17191c;\n    height: 689px;\n    padding-top: 72px;\n    position: relative;\n    margin-bottom: 160px;\n\n    @media (max-width: $screen-md-max)  {\n      height: 600px;\n    }\n\n    @media (max-width: $screen-sm-max)  {\n      height: 470px;\n    }\n\n    @media (max-width: $screen-sm-max)  {\n      height: 370px;\n    }\n\n    hgroup {\n      position: relative;\n      z-index: 1;\n    }\n\n    h2 {\n      color: rgba(white, .9);\n\n      strong {\n        color: rgba(white, .9);\n      }\n    }\n\n    p {\n      color: rgba(white, .7);\n      font-size: 24px;\n      line-height: 38px;\n      letter-spacing: -0.04em;\n    }\n\n    .dots {\n      position: absolute;\n      top: 40px;\n      left: 0;\n      right: 0;\n      bottom: 0;\n      margin-bottom:0;\n      background: url('/img/trusted-partners/tp-map.jpg') no-repeat top center;\n      background-size: 125%;\n      margin-right: auto;\n      margin-left: auto;\n      width: 1130px;\n\n      @media (max-width: $screen-md-max) {\n        width: 970px;\n      }\n\n      @media (max-width: $screen-sm-max) {\n        width: 750px;\n      }\n\n      li {\n        position: absolute;\n        height: 9px;\n        width: 9px;\n        border-radius: 9px;\n        background: $blue;\n        display: block;\n        box-shadow: 0 0 4px 2px rgba(#17191c, .7);\n        cursor: pointer;\n\n        .box {\n          background: white 50% 10px;\n          background-repeat: no-repeat;\n          background-size: 170px;\n          width: 200px;\n          border-radius: 3px;\n          position: relative;\n          z-index: 2;\n          padding: 95px 15px 15px;\n          box-shadow: 1px 2px 4px rgba(0, 0, 0, .2);\n          text-align: center;\n          display: block;\n          opacity: 0;\n          transform: scale(.01);\n          transform-origin: left top;\n          transition: all .3s cubic-bezier(.155, 1.105, .295, 1.12),\n                      opacity .2s linear;\n          transition-delay: 0s, 0s;\n\n          @include tp-logos();\n\n          .btn {\n            display: block;\n          }\n\n          &.left {\n            left: -190px;\n            transform-origin: right top;\n            &.bottom {\n              left: -190px;\n              top: -140px;\n              transform-origin: right bottom;\n            }\n          }\n          &.bottom {\n            top: -140px;\n            transform-origin: left bottom;\n          }\n\n        }\n\n        &:hover .box {\n          opacity: 1;\n          transform: scale(1);\n          transition-delay: .2s, .2s;\n          // pointer-events: auto\n        }\n      }\n\n      @media (max-width: $screen-sm-max)  {\n        background-position: center bottom;\n\n        li {\n          display: none;\n        }\n      }\n    }\n  }\n\n  .partners {\n    padding-top: 96px;\n\n    h2 {\n      color: #020814;\n      font-size: 48px;\n      line-height: 53px;\n      text-align: center;\n      letter-spacing: -0.03em;\n      margin-top: 40px;\n    }\n\n    .list {\n      margin-bottom: 0;\n\n      li {\n        padding-top: 130px;\n        padding-bottom: 70px;\n        position: relative;\n        margin-bottom: 120px;\n        background: transparent no-repeat center top;\n        background-size: 250px;\n\n        @include tp-logos();\n\n        p {\n          color: #5B708B;\n        }\n\n        .btn {\n          left: 0;\n          right: 0;\n          bottom: 0;\n          width: 113px;\n          margin: 0 auto;\n          position: absolute;\n          font-size: 14px;\n        }\n\n        .modal-info { display: none; }\n\n        &.premium {\n          width: 460px;\n          flex: 0 0 460px;\n          text-align: left;\n          transition: .2s all ease-out;\n          background-position: center 16px;\n    \n          a {\n            margin-top: -170px;\n            padding-top: 190px;\n            display: block;\n            cursor: pointer;\n    \n            p {\n              color: #5B708B;\n              margin-left: 32px;\n              margin-right: 32px;\n              max-width: 100%;\n            }\n          }\n    \n          &:hover {\n            border-radius: 6px;\n            box-shadow: 0 8px 32px rgba(0,0,0,0.1),\n                        0 2px 8px  rgba(0,0,0,0.1);\n            transform: translateY(-4px);\n          }\n\n\n          @media (max-width: $screen-md-max) {\n            width: 360px;\n            flex: 0 0 360px;\n          }\n\n          @media (max-width: $screen-xs-max) {\n            max-width: 500px;\n            flex: 0 0 100%;\n          }\n        }\n      }\n    }\n  }\n\n  .bar.text-center {\n    background: #6199f5 no-repeat center top  url('/img/trusted-partners/apply-prefooter-img.jpg');\n    background-size: cover;\n    padding: 85px 0 75px;\n\n    h3 {\n      color: white;\n    }\n\n    .btn {\n      margin-top: 10px;\n      padding: 14px 20px 13px;\n      border-radius: 3px;\n    }\n  }\n\n  #tp-learn-more {\n\n    .modal-dialog {\n      width: 840px;\n      perspective: 1000;\n\n\n\n      &.flip {\n        transform: rotateY(180deg);\n\n        .modal-body {\n          &.front {\n            transform: translateZ(-1px);\n            opacity: 0;\n          }\n\n          &.back {\n            transform: rotateY(180deg) translateZ(-1px);\n            opacity: 1;\n\n            @media (max-width: $screen-xs-max)  {\n              transform: rotateY(180deg) translateZ(1px);\n            }\n          }\n        }\n      }\n    }\n\n    .modal-content {\n      transition: 0.6s;\n      transform-style: preserve-3d;\n      position: relative;\n    }\n\n    .modal-body {\n      padding: 46px 50px;\n      min-height: 460px;\n      transition: 0.1s opacity;\n      transition-delay: .3s;\n      height: 845px;\n      // backface-visibility: hidden;\n\n      &.front {\n        transform: translateZ(0);\n      }\n\n      &.back {\n        transform: rotateY(180deg) translateZ(1px);\n        position: absolute;\n        top: 0;\n        left: 0;\n        right: 0;\n        background: white;\n        opacity: 0;\n      }\n    }\n\n    section {\n      width: 445px;\n    }\n\n    aside {\n      float: right;\n      width: 240px;\n    }\n\n    @media (max-width: $screen-xs-max)  {\n      section,\n      aside {\n        width: 100%;\n        float: none;\n      }\n    }\n\n    .logo {\n      width: 167px;\n      height: 100px;\n      padding-bottom: 70px;\n      position: relative;\n      background: transparent no-repeat left top;\n      background-size: 167px;\n\n      @include tp-logos();\n    }\n\n    p {\n      color: #272b31;\n      font-weight: 400;\n    }\n\n    .tablist {\n      padding: 0;\n\n      li {\n        list-style: none;\n        display: inline-block;\n\n        &.active a,\n        &:hover a {\n          color: $blue;\n        }\n\n        &.active a::before {\n          border-bottom-color: $blue;\n        }\n      }\n\n      a {\n        color: #69717e;\n        font-size: 14px;\n        margin-right: 35px;\n        font-weight: 500;\n        transition: .2s color;\n        position: relative;\n\n        &::before {\n          position: absolute;\n          left: 0;\n          right: 0;\n          bottom: -3px;\n          content: '';\n          border-bottom: 2px solid transparent;\n          transition: .2s border-color;\n        }\n      }\n    }\n\n    .tab-content {\n      padding-top: 10px;\n      font-size: 15px;\n      display: block;\n    }\n\n    iframe {\n      box-shadow: inset 0 0 10px 0 rgba(0,0,0,0.1);\n    }\n\n    .btn {\n      letter-spacing: 0;\n      border-radius: 2px;\n      text-transform: none;\n      width: 100%;\n      font-weight: 600;\n      font-size: 16px;\n      margin-top: 34px;\n      padding: 15px 15px 18px;\n      white-space: normal;\n\n      // &::after {\n      //   font-family: 'Ionicons';\n      //   content: '\\f3d6';\n      //   font-size: 30px;\n      //   font-weight: 600;\n      //   margin-left: 10px;\n      //   position: relative;\n      //   top: 5px;\n      // }\n    }\n\n    .back .btn {\n      font-size: 21px;\n      top: -1px;\n      left: -1px;\n      height: 56px;\n\n      &::after {\n        content: '';\n      }\n    }\n\n    address {\n      color: #818893;\n      font-size: 12px;\n      padding-top: 35px;\n\n      strong {\n        color: black;\n        font-size: 17px;\n        text-transform: uppercase;\n      }\n    }\n\n    .features {\n      padding: 0;\n\n      li {\n        font-size: 12px;\n        padding-left: 20px;\n        list-style: none;\n        margin: 7px 0;\n        position: relative;\n\n        &::before {\n          font-family: 'Ionicons';\n          content: '\\f2bc';\n          position: absolute;\n          left: 0;\n          font-size: 11px;\n        }\n      }\n    }\n\n    hgroup {\n      padding-bottom: 64px;\n    }\n\n    @media (max-width: $screen-xs-max)  {\n      .modal-dialog {\n        position: fixed;\n        left: 0;\n        right: 0;\n        width: auto;\n        top: 0;\n        bottom: 0;\n        overflow: scroll;\n      }\n\n      .modal-body {\n        height: auto;\n        padding-bottom: 500px;\n\n        aside {\n          position: absolute;\n          bottom: 30px;\n          width: 100%;\n          overflow: hidden;\n        }\n      }\n\n      .close {\n        top: 8px;\n        right: 8px;\n      }\n\n      .go-back {\n        top: 8px;\n        left: 8px;\n      }\n\n      form input,\n      form .select-wrapper {\n        width: 100%;\n      }\n\n      .front .btn {\n        width: calc(100% - 100px);\n      }\n    }\n  }\n\n  #applicationForm {\n    .modal-dialog {\n      max-width: 500px;\n    }\n\n    .modal-body {\n      max-height: calc(100vh - 60px);\n      overflow: scroll;\n      position: static;\n    }\n\n    .hero {\n      padding-top: 40px;\n    }\n  }\n}\n"
  },
  {
    "path": "assets/scss/pages/values.scss",
    "content": "@import \"../vars\";\n@import \"bootstrap-sass/assets/stylesheets/bootstrap/variables\";\n\n#page-values {\n  .navbar ~ .banner {\n    background: #181830 no-repeat center top;\n    background-image: url(\"/img/values/values-cta-bg.jpg\"),\n      linear-gradient(to right, #f4f7fb 0%, #d9dfe8 100%);\n    background-size: cover, 100%;\n    height: 360px;\n\n    h1 {\n      color: $blackish;\n    }\n\n    p {\n      color: $dark-grey;\n      font-weight: 400;\n    }\n  }\n\n  dl {\n    max-width: 575px;\n    margin: 160px auto 0;\n    padding: 0 40px;\n\n    dt {\n      font-size: 24px;\n      font-weight: 700;\n      color: $blacker;\n      position: relative;\n      margin-bottom: 10px;\n\n      span {\n        font-weight: 700;\n        color: #d2d6db;\n        position: absolute;\n        left: -30px;\n        top: 0px;\n      }\n    }\n\n    dd {\n      color: #5d636c;\n      font-size: 18px;\n      line-height: 28px;\n      font-weight: 400;\n      margin-bottom: 90px;\n    }\n  }\n\n  .hero {\n    background: no-repeat center top url(\"/img/values/meet-team.jpg\");\n    background-size: cover;\n    height: 260px;\n    padding-top: 87px;\n\n    h3 {\n      color: white;\n    }\n\n    .btn.white {\n      text-transform: none;\n      letter-spacing: 0.5px;\n      font-weight: 600;\n      font-size: 14px;\n      border-radius: 3px;\n      padding: 16px 15px 14px;\n      margin-top: 15px;\n    }\n  }\n}\n"
  },
  {
    "path": "assets/scss/pages/vue.scss",
    "content": "@import \"../vars\";\n@import \"bootstrap-sass/assets/stylesheets/bootstrap/variables\";\n\n:root {\n  font-size: 16px;\n}\n\n@media (max-width: $screen-xs-max) {\n  body {\n    padding-top: 0;\n  }\n}\n\n#page-vue {\n  // #region ------------ GENERAL STYLES ----------------\n\n  img {\n    object-fit: contain;\n    max-width: 100%;\n    height: auto;\n  }\n\n  ul {\n    list-style: none;\n    padding: 0;\n    margin: 0;\n  }\n\n  h1 {\n    color: #001a3a;\n    font-weight: 800;\n    font-size: 64px;\n    line-height: 100%;\n    letter-spacing: -0.05em;\n  }\n\n  h2,\n  h3 {\n    color: #03060b;\n  }\n\n  h2 {\n    font-weight: bold;\n    font-size: 48px;\n    line-height: 112%;\n    letter-spacing: -0.05em;\n\n    margin-block-end: 24px;\n  }\n\n  h3 {\n    font-weight: 500;\n    font-size: 20px;\n    line-height: 112%;\n    letter-spacing: -0.02em;\n  }\n\n  .p2 {\n    color: #2d4665;\n    font-size: 20px;\n    line-height: 160%;\n    letter-spacing: -0.02em;\n\n    margin: 0;\n  }\n\n  .p3 {\n    color: #2d4665;\n    font-size: 16px;\n    line-height: 180%;\n    letter-spacing: -0.02em;\n\n    margin: 0;\n  }\n\n  .highlight {\n    color: #37be81;\n    background: initial;\n  }\n\n  a {\n    text-decoration: none;\n  }\n  //#endregion\n\n  // #region ------------ COMPONENTS --------------------\n  %btn {\n    border-radius: 1000px;\n    display: inline-flex;\n    align-items: center;\n    justify-content: center;\n\n    font-weight: 600;\n    font-size: 1rem;\n    line-height: 112%;\n    letter-spacing: -0.02em;\n\n    padding: 1rem 1.5rem;\n\n    transition: background-color 0.2s ease-out;\n  }\n\n  .primary-btn {\n    @extend %btn;\n    background: #37be81;\n    color: #fff;\n\n    &:hover,\n    &:active,\n    &:focus {\n      background: #45c98e;\n    }\n  }\n  .secondary-btn {\n    @extend %btn;\n    background: #e6f5ef;\n    color: #37be81;\n\n    &:hover,\n    &:active,\n    &:focus {\n      background: #edf7f2;\n    }\n  }\n\n  .components-list {\n    margin-block-start: 2rem;\n\n    svg {\n      display: block;\n    }\n    li {\n      display: flex;\n      align-items: center;\n\n      font-size: 24px;\n      line-height: 100%;\n      letter-spacing: -0.03em;\n      color: #1a232f;\n\n      cursor: pointer;\n\n      transition: color 0.1s ease-out;\n\n      svg {\n        margin-block-end: 2px;\n      }\n\n      rect,\n      path,\n      circle {\n        transition: stroke 0.1s ease-out;\n      }\n\n      .icon {\n        margin-inline-end: 2rem;\n      }\n\n      .title {\n        flex-grow: 1;\n        position: relative;\n        border-block-end: 1px solid #eaedf4;\n\n        .word {\n          display: inline-block;\n          padding-block-start: 1rem;\n          padding-block-end: 1rem;\n        }\n\n        .progress {\n          position: absolute;\n          display: block;\n          width: 100%;\n          height: 2px;\n          opacity: 0;\n          background: #37be81;\n          bottom: -1px;\n          transform-origin: 0 0;\n\n          transition: opacity 0.2s ease-out;\n        }\n      }\n    }\n    li.selected {\n      color: #37be81;\n\n      .progress {\n        opacity: 1;\n      }\n\n      rect,\n      path,\n      circle {\n        stroke: currentColor;\n      }\n    }\n  }\n  // #endregion -----------------------------------------\n\n  // #region ------------ GENERAL -----------------------\n  #sticky-bar {\n    .nav {\n      min-height: 4.75rem;\n\n      li {\n        display: flex;\n        align-items: center;\n\n        &.active .anchor {\n          color: #37be81 !important;\n        }\n        .anchor:hover,\n        .anchor:active,\n        .anchor:focus {\n          color: #37be81 !important;\n        }\n      }\n\n      .try-it {\n        @extend %btn;\n        font-weight: bold;\n        font-size: 14px;\n        line-height: 157.33%;\n        letter-spacing: 0.08em;\n        text-transform: uppercase;\n\n        color: #37be81;\n        background: #e3faf1;\n\n        padding: 0.5rem 1rem;\n\n        &:hover,\n        &:active,\n        &:focus {\n          background: #edf7f2;\n        }\n      }\n    }\n  }\n\n  .header-wrapper {\n    background: linear-gradient(\n      180deg,\n      rgba(251, 252, 253, 0) 0%,\n      #fbfcfd 100%\n    );\n  }\n  header {\n    position: relative;\n    background-color: #fbfcfd;\n    color: white;\n    background-image: url(\"/img/vue/vue-cta-bg.png\");\n    background-repeat: no-repeat;\n    background-size: auto 100%;\n    background-position: center bottom;\n\n    min-height: 672px;\n    display: flex;\n    align-items: center;\n    text-align: center;\n\n    .back-button {\n      @extend %btn;\n      position: absolute;\n      top: 20px;\n      left: 20px;\n\n      font-size: 10px;\n      letter-spacing: 0.08em;\n      text-transform: uppercase;\n\n      padding: 0.5rem 0.75rem;\n      background: #f6f8fc;\n\n      &:hover,\n      &:active,\n      &:focus {\n        color: #4a8bfc;\n      }\n    }\n\n    hgroup {\n      max-width: 650px;\n      margin-block-start: 1rem;\n\n      h1 {\n        margin-block-end: 40px;\n      }\n\n      .logo {\n        margin-block-end: 40px;\n      }\n\n      .cta-row {\n        margin-block-end: 30px;\n      }\n\n      .video-row {\n        max-width: 560px;\n\n        padding-bottom: 56.25%;\n        position: relative;\n        display: block;\n        width: 100%;\n\n        margin-inline-start: auto;\n        margin-inline-end: auto;\n        margin-block-end: 32px;\n\n        iframe {\n          position: absolute;\n          width: 100%;\n          height: 100%;\n\n          top: 0;\n          left: 0;\n        }\n      }\n    }\n  }\n\n  #intro {\n    margin-block-start: 12.5rem;\n    margin-block-end: 8rem;\n\n    display: grid;\n    grid-template-columns: 1fr 1fr 1fr;\n    column-gap: 5rem;\n    row-gap: 4rem;\n\n    @media screen and (max-width: $screen-md-max) {\n      column-gap: 2rem;\n    }\n    @media screen and (max-width: $screen-xs-max) {\n      grid-template-columns: initial;\n      grid-template-rows: 1fr 1fr 1fr;\n    }\n\n    article {\n      img {\n        margin-block-end: 32px;\n      }\n\n      h3 {\n        margin-block-end: 20px;\n      }\n    }\n  }\n\n  #components {\n    display: flex;\n    justify-content: space-between;\n\n    padding-block-start: 2rem;\n    margin-inline-start: -2rem;\n    max-width: 100%;\n\n    @media screen and (max-width: $screen-xs-max) {\n      flex-direction: column;\n    }\n\n    > * {\n      flex-basis: 50%;\n      margin-block-start: 4rem;\n      margin-inline-start: 2rem;\n    }\n\n    hgroup {\n      max-width: 480px;\n    }\n\n    vue-components {\n      width: 100%;\n      max-width: 32rem;\n    }\n  }\n\n  #native {\n    margin-block-start: 232px;\n\n    .wrapper {\n      display: flex;\n      justify-content: space-between;\n\n      @media screen and (max-width: $screen-xs-max) {\n        flex-direction: column-reverse;\n        max-width: 100%;\n      }\n\n      margin-block-start: -4rem;\n      margin-inline-start: -4rem;\n\n      > * {\n        flex-basis: 50%;\n        min-width: 0;\n\n        margin-block-start: 4rem;\n        margin-inline-start: 4rem;\n      }\n    }\n\n    react-capacitor {\n      max-width: 32rem;\n\n      @media screen and (min-width: $screen-md) {\n        min-height: 487px;\n      }\n    }\n\n    hgroup {\n      max-width: 30rem;\n    }\n  }\n\n  #samples {\n    margin-block-start: 14rem;\n    margin-block-end: 14rem;\n\n    hgroup {\n      display: flex;\n      flex-wrap: wrap;\n      justify-content: space-between;\n      align-items: flex-end;\n\n      margin-inline-start: -1rem;\n      margin-block-start: -1rem;\n      margin-block-end: 4rem;\n\n      > * {\n        margin-inline-start: 1rem;\n        margin-block-start: 1rem;\n      }\n\n      h2 {\n        max-width: 28rem;\n      }\n\n      p {\n        max-width: 30rem;\n        margin-block-end: 2rem;\n      }\n    }\n\n    .features {\n      display: grid;\n      grid-template-columns: 1fr 1fr 1fr;\n      column-gap: 2rem;\n      row-gap: 4rem;\n\n      @media screen and (max-width: $screen-md-max) {\n        column-gap: 2rem;\n      }\n      @media screen and (max-width: $screen-xs-max) {\n        grid-template-columns: initial;\n        grid-template-rows: 1fr 1fr 1fr;\n        max-width: 22rem;\n      }\n\n      .feature {\n        display: flex;\n        align-items: flex-start;\n        flex-direction: column;\n\n        img {\n          display: block;\n          border-radius: 1rem;\n        }\n\n        h3 {\n          margin: 2rem 0 1rem;\n        }\n\n        p {\n          margin-block-end: 1rem;\n          flex-grow: 1;\n        }\n      }\n\n      .try-it {\n        display: inline-block;\n        font-weight: 600;\n        font-size: 13px;\n        line-height: 120%;\n        display: inline-flex;\n        align-items: center;\n        text-align: center;\n        letter-spacing: -0.02em;\n\n        padding: 0.53125rem 0.75rem;\n        background: #e8faf4;\n        border-radius: 100px;\n\n        color: #20bd76;\n\n        transition: background-color 0.2s ease-out;\n\n        &:hover,\n        &:active,\n        &:focus {\n          background: #edf7f2;\n        }\n      }\n    }\n  }\n\n  #enterprise {\n    display: flex;\n    justify-content: space-between;\n    align-items: center;\n\n    margin-inline-start: -2rem;\n    margin-block-start: -2rem;\n\n    @media screen and (max-width: $screen-xs-max) {\n      flex-direction: column;\n      align-items: flex-start;\n    }\n\n    > * {\n      margin-inline-start: 2rem;\n      margin-block-start: 2rem;\n    }\n\n    .graphics {\n      flex-basis: 60%;\n\n      img {\n        display: block;\n        margin-inline-start: -1rem;\n\n        @media screen and (max-width: $screen-xs-max) {\n          margin: 0;\n        }\n      }\n    }\n\n    hgroup {\n      flex-basis: 40%;\n      max-width: 30rem;\n\n      p {\n        margin-block-end: 2rem;\n      }\n    }\n  }\n\n  #why {\n    margin-block-start: 14rem;\n    margin-block-end: 14rem;\n\n    hgroup {\n      text-align: center;\n      max-width: 40rem;\n      margin: 0 auto 4rem;\n    }\n\n    .features {\n      display: grid;\n      grid-template-columns: 1fr 1fr 1fr 1fr;\n      column-gap: 2rem;\n      row-gap: 4rem;\n\n      @media screen and (max-width: $screen-md-max) {\n        grid-template-columns: 1fr 1fr;\n        grid-template-row: 1fr 1fr;\n      }\n      @media screen and (max-width: $screen-xs-max) {\n        grid-template-columns: initial;\n        grid-template-rows: 1fr 1fr 1fr 1fr;\n      }\n\n      .feature {\n        display: grid;\n        align-items: center;\n        grid-template-rows: 3.5rem min-content min-content;\n\n        h3 {\n          margin-block-start: 1.5rem;\n          margin-block-end: 1rem;\n        }\n      }\n    }\n  }\n\n  #accolades {\n    columns: 2;\n    column-gap: 4rem;\n\n    @media screen and (max-width: $screen-xs-max) {\n      columns: 1;\n    }\n\n    h2 {\n      margin-block-end: 1rem;\n    }\n\n    .tweet {\n      background: #f6f8fc;\n      border-radius: 8px;\n      position: relative;\n\n      padding: 2rem;\n      margin-block-start: 4rem;\n\n      -webkit-column-break-inside: avoid;\n      page-break-inside: avoid;\n      break-inside: avoid;\n\n      .tweet-author {\n        display: grid;\n        grid-template-columns: 2.5rem max-content;\n        column-gap: 1rem;\n\n        margin-block-end: 1.25rem;\n\n        &-info {\n          display: flex;\n          flex-direction: column;\n          justify-content: center;\n        }\n\n        h3 {\n          font-weight: 500;\n          font-size: 16px;\n          letter-spacing: -0.02em;\n          color: #020814;\n\n          a {\n            color: inherit;\n          }\n        }\n\n        h5 {\n          font-weight: normal;\n          font-size: 12px;\n          letter-spacing: -0.02em;\n          color: #414d5c;\n          margin: 0.25rem 0 0 0;\n\n          a {\n            color: inherit;\n          }\n        }\n\n        img {\n          border-radius: 1000px;\n        }\n      }\n\n      .tweet-footer {\n        display: flex;\n        justify-content: space-between;\n\n        margin-block-start: 1.5rem;\n\n        font-size: 10px;\n        line-height: 160%;\n        letter-spacing: 0.08em;\n        text-transform: uppercase;\n        color: #616e7e;\n\n        a {\n          color: inherit;\n        }\n      }\n\n      &-twitter-icon {\n        position: absolute;\n        right: 2rem;\n        top: 2rem;\n\n        width: 1rem;\n        height: 1rem;\n\n        background-image: url(\"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTciIGhlaWdodD0iMTMiIHZpZXdCb3g9IjAgMCAxNyAxMyIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZD0iTTE2LjUgMS41NDAzNkMxNS45MDE2IDEuODAxMDQgMTUuMjYyIDEuOTc3MDggMTQuNTg3OSAyLjA1ODMzQzE1LjI3NTcgMS42NTIwOCAxNS44MDUzIDEuMDA4ODUgMTYuMDUyOSAwLjI0Mzc1QzE1LjQwOTggMC42MTk1MzEgMTQuNjk4IDAuODkzNzUgMTMuOTM4IDEuMDM5MzJDMTMuMzI5MyAwLjM5OTQ3OSAxMi40NjI2IDAgMTEuNTA2NiAwQzkuNjY2NzMgMCA4LjE3NzY1IDEuNDY5MjcgOC4xNzc2NSAzLjI4MDQ3QzguMTc3NjUgMy41Mzc3NiA4LjIwNTE2IDMuNzg4MjggOC4yNjM2MyA0LjAyODY1QzUuNDk1MjQgMy44OTMyMyAzLjAzOTgxIDIuNTg2NDYgMS4zOTk0MSAwLjU5OTIxOUMxLjExMzk3IDEuMDgzMzMgMC45NDg5MDMgMS42NDg3IDAuOTQ4OTAzIDIuMjQ3OTJDMC45NDg5MDMgMy4zODU0MiAxLjU0MDQxIDQuMzkwODkgMi40MzQ1NSA0Ljk3OTk1QzEuODg0MzEgNC45NjY0MSAxLjM2ODQ2IDQuODE3NDUgMC45MjEzOTIgNC41NzAzMVY0LjYxMDk0QzAuOTIxMzkyIDYuMjAyMDggMi4wNzAwMSA3LjUyNTc4IDMuNTkzNDggNy44MjcwOEMzLjMxNDkzIDcuOTAxNTYgMy4wMTkxNyA3Ljk0MjE5IDIuNzE2NTQgNy45NDIxOUMyLjUwMzMyIDcuOTQyMTkgMi4yOTM1NSA3LjkyMTg4IDIuMDkwNjUgNy44ODEyNUMyLjUxMzY0IDkuMTg0NjQgMy43NDQ4IDEwLjEzMjYgNS4yMDI5MyAxMC4xNTk2QzQuMDY0NjIgMTEuMDM5OCAyLjYyNzEzIDExLjU2NDYgMS4wNjU4MyAxMS41NjQ2QzAuNzk3NTg4IDExLjU2NDYgMC41MzI3ODYgMTEuNTQ3NyAwLjI3MTQyMyAxMS41MTcyQzEuNzM5ODcgMTIuNDU4MyAzLjQ5MDMxIDEzIDUuMzY4IDEzQzExLjQ5OTcgMTMgMTQuODQ5MyA3Ljk5OTc0IDE0Ljg0OTMgMy42NjMwMkMxNC44NDkzIDMuNTIwODMgMTQuODQ1OCAzLjM3ODY1IDE0LjgzOSAzLjIzOTg0QzE1LjQ4ODkgMi43NzYwNCAxNi4wNTI5IDIuMjAwNTIgMTYuNSAxLjU0MDM2WiIgZmlsbD0iIzRDQTBFQyIvPgo8L3N2Zz4K\");\n        background-repeat: no-repeat;\n      }\n    }\n\n    .tweet-share {\n      display: flex;\n      flex-wrap: wrap;\n      align-items: center;\n      justify-content: space-between;\n\n      h4 {\n        font-weight: 500;\n        font-size: 20px;\n        letter-spacing: -0.02em;\n        color: #020814;\n      }\n\n      a {\n        font-size: 16px;\n        line-height: 180%;\n        letter-spacing: -0.02em;\n\n        color: #009dff;\n      }\n    }\n  }\n\n  #start {\n    margin-block-start: 10rem;\n    margin-block-end: 10rem;\n\n    background-color: #4ac896;\n    box-shadow: 0px 16px 32px -2px rgba(0, 0, 0, 0.1),\n      0px 8px 16px -2px rgba(0, 0, 0, 0.06);\n    border-radius: 24px;\n\n    .wrapper {\n      padding: clamp(1rem, 6vw, 4rem);\n    }\n\n    .inside-wrapper {\n      display: flex;\n      flex-wrap: wrap;\n      justify-content: space-between;\n      align-items: center;\n\n      margin-block-start: -2rem;\n      margin-inline-start: -2rem;\n\n      > * {\n        margin-inline-start: 2rem;\n        margin-block-start: 2rem;\n      }\n    }\n\n    hgroup {\n      h2 {\n        max-width: 22.3125rem;\n        color: #fff;\n\n        margin-block-end: 0.5rem;\n      }\n      p {\n        color: #f1fdf5;\n      }\n    }\n\n    .code {\n      max-width: calc(100% - 2rem);\n      width: 27.375rem;\n\n      background: #004e58;\n      border-radius: 16px;\n      padding-inline-start: clamp(1rem, 6vw, 2.375rem);\n      padding-inline-end: clamp(1rem, 4vw, 2.375rem);\n\n      pre,\n      code,\n      span {\n        font-weight: normal;\n        font-size: 20px;\n        line-height: 160%;\n        letter-spacing: -0.06em;\n\n        background: #004e58;\n        border: none;\n        margin: 0;\n        color: #fff;\n      }\n    }\n  }\n  // #endregion -----------------------------------------\n}\n"
  },
  {
    "path": "assets/scss/pygments/autumn.scss",
    "content": ".highlight .hll { background-color: #ffffcc }\n.highlight .c { color: #aaaaaa; font-style: italic } /* Comment */\n.highlight .err { color: #F00000; background-color: #F0A0A0 } /* Error */\n.highlight .k { color: #0000aa } /* Keyword */\n.highlight .cm { color: #aaaaaa; font-style: italic } /* Comment.Multiline */\n.highlight .cp { color: #4c8317 } /* Comment.Preproc */\n.highlight .c1 { color: #aaaaaa; font-style: italic } /* Comment.Single */\n.highlight .cs { color: #0000aa; font-style: italic } /* Comment.Special */\n.highlight .gd { color: #aa0000 } /* Generic.Deleted */\n.highlight .ge { font-style: italic } /* Generic.Emph */\n.highlight .gr { color: #aa0000 } /* Generic.Error */\n.highlight .gh { color: #000080; font-weight: bold } /* Generic.Heading */\n.highlight .gi { color: #00aa00 } /* Generic.Inserted */\n.highlight .go { color: #888888 } /* Generic.Output */\n.highlight .gp { color: #555555 } /* Generic.Prompt */\n.highlight .gs { font-weight: bold } /* Generic.Strong */\n.highlight .gu { color: #800080; font-weight: bold } /* Generic.Subheading */\n.highlight .gt { color: #aa0000 } /* Generic.Traceback */\n.highlight .kc { color: #0000aa } /* Keyword.Constant */\n.highlight .kd { color: #0000aa } /* Keyword.Declaration */\n.highlight .kn { color: #0000aa } /* Keyword.Namespace */\n.highlight .kp { color: #0000aa } /* Keyword.Pseudo */\n.highlight .kr { color: #0000aa } /* Keyword.Reserved */\n.highlight .kt { color: #00aaaa } /* Keyword.Type */\n.highlight .m { color: #009999 } /* Literal.Number */\n.highlight .s { color: #aa5500 } /* Literal.String */\n.highlight .na { color: #1e90ff } /* Name.Attribute */\n.highlight .nb { color: #00aaaa } /* Name.Builtin */\n.highlight .nc { color: #00aa00; text-decoration: underline } /* Name.Class */\n.highlight .no { color: #aa0000 } /* Name.Constant */\n.highlight .nd { color: #888888 } /* Name.Decorator */\n.highlight .ni { color: #800000; font-weight: bold } /* Name.Entity */\n.highlight .nf { color: #00aa00 } /* Name.Function */\n.highlight .nn { color: #00aaaa; text-decoration: underline } /* Name.Namespace */\n.highlight .nt { color: #1e90ff; font-weight: bold } /* Name.Tag */\n.highlight .nv { color: #aa0000 } /* Name.Variable */\n.highlight .ow { color: #0000aa } /* Operator.Word */\n.highlight .w { color: #bbbbbb } /* Text.Whitespace */\n.highlight .mf { color: #009999 } /* Literal.Number.Float */\n.highlight .mh { color: #009999 } /* Literal.Number.Hex */\n.highlight .mi { color: #009999 } /* Literal.Number.Integer */\n.highlight .mo { color: #009999 } /* Literal.Number.Oct */\n.highlight .sb { color: #aa5500 } /* Literal.String.Backtick */\n.highlight .sc { color: #aa5500 } /* Literal.String.Char */\n.highlight .sd { color: #aa5500 } /* Literal.String.Doc */\n.highlight .s2 { color: #aa5500 } /* Literal.String.Double */\n.highlight .se { color: #aa5500 } /* Literal.String.Escape */\n.highlight .sh { color: #aa5500 } /* Literal.String.Heredoc */\n.highlight .si { color: #aa5500 } /* Literal.String.Interpol */\n.highlight .sx { color: #aa5500 } /* Literal.String.Other */\n.highlight .sr { color: #009999 } /* Literal.String.Regex */\n.highlight .s1 { color: #aa5500 } /* Literal.String.Single */\n.highlight .ss { color: #0000aa } /* Literal.String.Symbol */\n.highlight .bp { color: #00aaaa } /* Name.Builtin.Pseudo */\n.highlight .vc { color: #aa0000 } /* Name.Variable.Class */\n.highlight .vg { color: #aa0000 } /* Name.Variable.Global */\n.highlight .vi { color: #aa0000 } /* Name.Variable.Instance */\n.highlight .il { color: #009999 } /* Literal.Number.Integer.Long */\n"
  },
  {
    "path": "assets/scss/pygments/borland.css",
    "content": ".codehilite .hll { background-color: #ffffcc }\n.codehilite .c { color: #008800; font-style: italic } /* Comment */\n.codehilite .err { color: #a61717; background-color: #e3d2d2 } /* Error */\n.codehilite .k { color: #000080; font-weight: bold } /* Keyword */\n.codehilite .cm { color: #008800; font-style: italic } /* Comment.Multiline */\n.codehilite .cp { color: #008080 } /* Comment.Preproc */\n.codehilite .c1 { color: #008800; font-style: italic } /* Comment.Single */\n.codehilite .cs { color: #008800; font-weight: bold } /* Comment.Special */\n.codehilite .gd { color: #000000; background-color: #ffdddd } /* Generic.Deleted */\n.codehilite .ge { font-style: italic } /* Generic.Emph */\n.codehilite .gr { color: #aa0000 } /* Generic.Error */\n.codehilite .gh { color: #999999 } /* Generic.Heading */\n.codehilite .gi { color: #000000; background-color: #ddffdd } /* Generic.Inserted */\n.codehilite .go { color: #888888 } /* Generic.Output */\n.codehilite .gp { color: #555555 } /* Generic.Prompt */\n.codehilite .gs { font-weight: bold } /* Generic.Strong */\n.codehilite .gu { color: #aaaaaa } /* Generic.Subheading */\n.codehilite .gt { color: #aa0000 } /* Generic.Traceback */\n.codehilite .kc { color: #000080; font-weight: bold } /* Keyword.Constant */\n.codehilite .kd { color: #000080; font-weight: bold } /* Keyword.Declaration */\n.codehilite .kn { color: #000080; font-weight: bold } /* Keyword.Namespace */\n.codehilite .kp { color: #000080; font-weight: bold } /* Keyword.Pseudo */\n.codehilite .kr { color: #000080; font-weight: bold } /* Keyword.Reserved */\n.codehilite .kt { color: #000080; font-weight: bold } /* Keyword.Type */\n.codehilite .m { color: #0000FF } /* Literal.Number */\n.codehilite .s { color: #0000FF } /* Literal.String */\n.codehilite .na { color: #FF0000 } /* Name.Attribute */\n.codehilite .nt { color: #000080; font-weight: bold } /* Name.Tag */\n.codehilite .ow { font-weight: bold } /* Operator.Word */\n.codehilite .w { color: #bbbbbb } /* Text.Whitespace */\n.codehilite .mf { color: #0000FF } /* Literal.Number.Float */\n.codehilite .mh { color: #0000FF } /* Literal.Number.Hex */\n.codehilite .mi { color: #0000FF } /* Literal.Number.Integer */\n.codehilite .mo { color: #0000FF } /* Literal.Number.Oct */\n.codehilite .sb { color: #0000FF } /* Literal.String.Backtick */\n.codehilite .sc { color: #800080 } /* Literal.String.Char */\n.codehilite .sd { color: #0000FF } /* Literal.String.Doc */\n.codehilite .s2 { color: #0000FF } /* Literal.String.Double */\n.codehilite .se { color: #0000FF } /* Literal.String.Escape */\n.codehilite .sh { color: #0000FF } /* Literal.String.Heredoc */\n.codehilite .si { color: #0000FF } /* Literal.String.Interpol */\n.codehilite .sx { color: #0000FF } /* Literal.String.Other */\n.codehilite .sr { color: #0000FF } /* Literal.String.Regex */\n.codehilite .s1 { color: #0000FF } /* Literal.String.Single */\n.codehilite .ss { color: #0000FF } /* Literal.String.Symbol */\n.codehilite .il { color: #0000FF } /* Literal.Number.Integer.Long */\n"
  },
  {
    "path": "assets/scss/pygments/bw.css",
    "content": ".codehilite .hll { background-color: #ffffcc }\n.codehilite .c { font-style: italic } /* Comment */\n.codehilite .err { border: 1px solid #FF0000 } /* Error */\n.codehilite .k { font-weight: bold } /* Keyword */\n.codehilite .cm { font-style: italic } /* Comment.Multiline */\n.codehilite .c1 { font-style: italic } /* Comment.Single */\n.codehilite .cs { font-style: italic } /* Comment.Special */\n.codehilite .ge { font-style: italic } /* Generic.Emph */\n.codehilite .gh { font-weight: bold } /* Generic.Heading */\n.codehilite .gp { font-weight: bold } /* Generic.Prompt */\n.codehilite .gs { font-weight: bold } /* Generic.Strong */\n.codehilite .gu { font-weight: bold } /* Generic.Subheading */\n.codehilite .kc { font-weight: bold } /* Keyword.Constant */\n.codehilite .kd { font-weight: bold } /* Keyword.Declaration */\n.codehilite .kn { font-weight: bold } /* Keyword.Namespace */\n.codehilite .kr { font-weight: bold } /* Keyword.Reserved */\n.codehilite .s { font-style: italic } /* Literal.String */\n.codehilite .nc { font-weight: bold } /* Name.Class */\n.codehilite .ni { font-weight: bold } /* Name.Entity */\n.codehilite .ne { font-weight: bold } /* Name.Exception */\n.codehilite .nn { font-weight: bold } /* Name.Namespace */\n.codehilite .nt { font-weight: bold } /* Name.Tag */\n.codehilite .ow { font-weight: bold } /* Operator.Word */\n.codehilite .sb { font-style: italic } /* Literal.String.Backtick */\n.codehilite .sc { font-style: italic } /* Literal.String.Char */\n.codehilite .sd { font-style: italic } /* Literal.String.Doc */\n.codehilite .s2 { font-style: italic } /* Literal.String.Double */\n.codehilite .se { font-weight: bold; font-style: italic } /* Literal.String.Escape */\n.codehilite .sh { font-style: italic } /* Literal.String.Heredoc */\n.codehilite .si { font-weight: bold; font-style: italic } /* Literal.String.Interpol */\n.codehilite .sx { font-style: italic } /* Literal.String.Other */\n.codehilite .sr { font-style: italic } /* Literal.String.Regex */\n.codehilite .s1 { font-style: italic } /* Literal.String.Single */\n.codehilite .ss { font-style: italic } /* Literal.String.Symbol */\n"
  },
  {
    "path": "assets/scss/pygments/colorful.css",
    "content": ".codehilite .hll { background-color: #ffffcc }\n.codehilite .c { color: #808080 } /* Comment */\n.codehilite .err { color: #F00000; background-color: #F0A0A0 } /* Error */\n.codehilite .k { color: #008000; font-weight: bold } /* Keyword */\n.codehilite .o { color: #303030 } /* Operator */\n.codehilite .cm { color: #808080 } /* Comment.Multiline */\n.codehilite .cp { color: #507090 } /* Comment.Preproc */\n.codehilite .c1 { color: #808080 } /* Comment.Single */\n.codehilite .cs { color: #cc0000; font-weight: bold } /* Comment.Special */\n.codehilite .gd { color: #A00000 } /* Generic.Deleted */\n.codehilite .ge { font-style: italic } /* Generic.Emph */\n.codehilite .gr { color: #FF0000 } /* Generic.Error */\n.codehilite .gh { color: #000080; font-weight: bold } /* Generic.Heading */\n.codehilite .gi { color: #00A000 } /* Generic.Inserted */\n.codehilite .go { color: #808080 } /* Generic.Output */\n.codehilite .gp { color: #c65d09; font-weight: bold } /* Generic.Prompt */\n.codehilite .gs { font-weight: bold } /* Generic.Strong */\n.codehilite .gu { color: #800080; font-weight: bold } /* Generic.Subheading */\n.codehilite .gt { color: #0040D0 } /* Generic.Traceback */\n.codehilite .kc { color: #008000; font-weight: bold } /* Keyword.Constant */\n.codehilite .kd { color: #008000; font-weight: bold } /* Keyword.Declaration */\n.codehilite .kn { color: #008000; font-weight: bold } /* Keyword.Namespace */\n.codehilite .kp { color: #003080; font-weight: bold } /* Keyword.Pseudo */\n.codehilite .kr { color: #008000; font-weight: bold } /* Keyword.Reserved */\n.codehilite .kt { color: #303090; font-weight: bold } /* Keyword.Type */\n.codehilite .m { color: #6000E0; font-weight: bold } /* Literal.Number */\n.codehilite .s { background-color: #fff0f0 } /* Literal.String */\n.codehilite .na { color: #0000C0 } /* Name.Attribute */\n.codehilite .nb { color: #007020 } /* Name.Builtin */\n.codehilite .nc { color: #B00060; font-weight: bold } /* Name.Class */\n.codehilite .no { color: #003060; font-weight: bold } /* Name.Constant */\n.codehilite .nd { color: #505050; font-weight: bold } /* Name.Decorator */\n.codehilite .ni { color: #800000; font-weight: bold } /* Name.Entity */\n.codehilite .ne { color: #F00000; font-weight: bold } /* Name.Exception */\n.codehilite .nf { color: #0060B0; font-weight: bold } /* Name.Function */\n.codehilite .nl { color: #907000; font-weight: bold } /* Name.Label */\n.codehilite .nn { color: #0e84b5; font-weight: bold } /* Name.Namespace */\n.codehilite .nt { color: #007000 } /* Name.Tag */\n.codehilite .nv { color: #906030 } /* Name.Variable */\n.codehilite .ow { color: #000000; font-weight: bold } /* Operator.Word */\n.codehilite .w { color: #bbbbbb } /* Text.Whitespace */\n.codehilite .mf { color: #6000E0; font-weight: bold } /* Literal.Number.Float */\n.codehilite .mh { color: #005080; font-weight: bold } /* Literal.Number.Hex */\n.codehilite .mi { color: #0000D0; font-weight: bold } /* Literal.Number.Integer */\n.codehilite .mo { color: #4000E0; font-weight: bold } /* Literal.Number.Oct */\n.codehilite .sb { background-color: #fff0f0 } /* Literal.String.Backtick */\n.codehilite .sc { color: #0040D0 } /* Literal.String.Char */\n.codehilite .sd { color: #D04020 } /* Literal.String.Doc */\n.codehilite .s2 { background-color: #fff0f0 } /* Literal.String.Double */\n.codehilite .se { color: #606060; font-weight: bold; background-color: #fff0f0 } /* Literal.String.Escape */\n.codehilite .sh { background-color: #fff0f0 } /* Literal.String.Heredoc */\n.codehilite .si { background-color: #e0e0e0 } /* Literal.String.Interpol */\n.codehilite .sx { color: #D02000; background-color: #fff0f0 } /* Literal.String.Other */\n.codehilite .sr { color: #000000; background-color: #fff0ff } /* Literal.String.Regex */\n.codehilite .s1 { background-color: #fff0f0 } /* Literal.String.Single */\n.codehilite .ss { color: #A06000 } /* Literal.String.Symbol */\n.codehilite .bp { color: #007020 } /* Name.Builtin.Pseudo */\n.codehilite .vc { color: #306090 } /* Name.Variable.Class */\n.codehilite .vg { color: #d07000; font-weight: bold } /* Name.Variable.Global */\n.codehilite .vi { color: #3030B0 } /* Name.Variable.Instance */\n.codehilite .il { color: #0000D0; font-weight: bold } /* Literal.Number.Integer.Long */\n"
  },
  {
    "path": "assets/scss/pygments/default.css",
    "content": ".codehilite .hll { background-color: #ffffcc }\n.codehilite  { background: #f8f8f8; }\n.codehilite .c { color: #408080; font-style: italic } /* Comment */\n.codehilite .err { border: 1px solid #FF0000 } /* Error */\n.codehilite .k { color: #008000; font-weight: bold } /* Keyword */\n.codehilite .o { color: #666666 } /* Operator */\n.codehilite .cm { color: #408080; font-style: italic } /* Comment.Multiline */\n.codehilite .cp { color: #BC7A00 } /* Comment.Preproc */\n.codehilite .c1 { color: #408080; font-style: italic } /* Comment.Single */\n.codehilite .cs { color: #408080; font-style: italic } /* Comment.Special */\n.codehilite .gd { color: #A00000 } /* Generic.Deleted */\n.codehilite .ge { font-style: italic } /* Generic.Emph */\n.codehilite .gr { color: #FF0000 } /* Generic.Error */\n.codehilite .gh { color: #000080; font-weight: bold } /* Generic.Heading */\n.codehilite .gi { color: #00A000 } /* Generic.Inserted */\n.codehilite .go { color: #808080 } /* Generic.Output */\n.codehilite .gp { color: #000080; font-weight: bold } /* Generic.Prompt */\n.codehilite .gs { font-weight: bold } /* Generic.Strong */\n.codehilite .gu { color: #800080; font-weight: bold } /* Generic.Subheading */\n.codehilite .gt { color: #0040D0 } /* Generic.Traceback */\n.codehilite .kc { color: #008000; font-weight: bold } /* Keyword.Constant */\n.codehilite .kd { color: #008000; font-weight: bold } /* Keyword.Declaration */\n.codehilite .kn { color: #008000; font-weight: bold } /* Keyword.Namespace */\n.codehilite .kp { color: #008000 } /* Keyword.Pseudo */\n.codehilite .kr { color: #008000; font-weight: bold } /* Keyword.Reserved */\n.codehilite .kt { color: #B00040 } /* Keyword.Type */\n.codehilite .m { color: #666666 } /* Literal.Number */\n.codehilite .s { color: #BA2121 } /* Literal.String */\n.codehilite .na { color: #7D9029 } /* Name.Attribute */\n.codehilite .nb { color: #008000 } /* Name.Builtin */\n.codehilite .nc { color: #0000FF; font-weight: bold } /* Name.Class */\n.codehilite .no { color: #880000 } /* Name.Constant */\n.codehilite .nd { color: #AA22FF } /* Name.Decorator */\n.codehilite .ni { color: #999999; font-weight: bold } /* Name.Entity */\n.codehilite .ne { color: #D2413A; font-weight: bold } /* Name.Exception */\n.codehilite .nf { color: #0000FF } /* Name.Function */\n.codehilite .nl { color: #A0A000 } /* Name.Label */\n.codehilite .nn { color: #0000FF; font-weight: bold } /* Name.Namespace */\n.codehilite .nt { color: #008000; font-weight: bold } /* Name.Tag */\n.codehilite .nv { color: #19177C } /* Name.Variable */\n.codehilite .ow { color: #AA22FF; font-weight: bold } /* Operator.Word */\n.codehilite .w { color: #bbbbbb } /* Text.Whitespace */\n.codehilite .mf { color: #666666 } /* Literal.Number.Float */\n.codehilite .mh { color: #666666 } /* Literal.Number.Hex */\n.codehilite .mi { color: #666666 } /* Literal.Number.Integer */\n.codehilite .mo { color: #666666 } /* Literal.Number.Oct */\n.codehilite .sb { color: #BA2121 } /* Literal.String.Backtick */\n.codehilite .sc { color: #BA2121 } /* Literal.String.Char */\n.codehilite .sd { color: #BA2121; font-style: italic } /* Literal.String.Doc */\n.codehilite .s2 { color: #BA2121 } /* Literal.String.Double */\n.codehilite .se { color: #BB6622; font-weight: bold } /* Literal.String.Escape */\n.codehilite .sh { color: #BA2121 } /* Literal.String.Heredoc */\n.codehilite .si { color: #BB6688; font-weight: bold } /* Literal.String.Interpol */\n.codehilite .sx { color: #008000 } /* Literal.String.Other */\n.codehilite .sr { color: #BB6688 } /* Literal.String.Regex */\n.codehilite .s1 { color: #BA2121 } /* Literal.String.Single */\n.codehilite .ss { color: #19177C } /* Literal.String.Symbol */\n.codehilite .bp { color: #008000 } /* Name.Builtin.Pseudo */\n.codehilite .vc { color: #19177C } /* Name.Variable.Class */\n.codehilite .vg { color: #19177C } /* Name.Variable.Global */\n.codehilite .vi { color: #19177C } /* Name.Variable.Instance */\n.codehilite .il { color: #666666 } /* Literal.Number.Integer.Long */\n"
  },
  {
    "path": "assets/scss/pygments/emacs.css",
    "content": ".codehilite .hll { background-color: #ffffcc }\n.codehilite .c { color: #008800; font-style: italic } /* Comment */\n.codehilite .err { border: 1px solid #FF0000 } /* Error */\n.codehilite .k { color: #AA22FF; font-weight: bold } /* Keyword */\n.codehilite .o { color: #666666 } /* Operator */\n.codehilite .cm { color: #008800; font-style: italic } /* Comment.Multiline */\n.codehilite .cp { color: #008800 } /* Comment.Preproc */\n.codehilite .c1 { color: #008800; font-style: italic } /* Comment.Single */\n.codehilite .cs { color: #008800; font-weight: bold } /* Comment.Special */\n.codehilite .gd { color: #A00000 } /* Generic.Deleted */\n.codehilite .ge { font-style: italic } /* Generic.Emph */\n.codehilite .gr { color: #FF0000 } /* Generic.Error */\n.codehilite .gh { color: #000080; font-weight: bold } /* Generic.Heading */\n.codehilite .gi { color: #00A000 } /* Generic.Inserted */\n.codehilite .go { color: #808080 } /* Generic.Output */\n.codehilite .gp { color: #000080; font-weight: bold } /* Generic.Prompt */\n.codehilite .gs { font-weight: bold } /* Generic.Strong */\n.codehilite .gu { color: #800080; font-weight: bold } /* Generic.Subheading */\n.codehilite .gt { color: #0040D0 } /* Generic.Traceback */\n.codehilite .kc { color: #AA22FF; font-weight: bold } /* Keyword.Constant */\n.codehilite .kd { color: #AA22FF; font-weight: bold } /* Keyword.Declaration */\n.codehilite .kn { color: #AA22FF; font-weight: bold } /* Keyword.Namespace */\n.codehilite .kp { color: #AA22FF } /* Keyword.Pseudo */\n.codehilite .kr { color: #AA22FF; font-weight: bold } /* Keyword.Reserved */\n.codehilite .kt { color: #00BB00; font-weight: bold } /* Keyword.Type */\n.codehilite .m { color: #666666 } /* Literal.Number */\n.codehilite .s { color: #BB4444 } /* Literal.String */\n.codehilite .na { color: #BB4444 } /* Name.Attribute */\n.codehilite .nb { color: #AA22FF } /* Name.Builtin */\n.codehilite .nc { color: #0000FF } /* Name.Class */\n.codehilite .no { color: #880000 } /* Name.Constant */\n.codehilite .nd { color: #AA22FF } /* Name.Decorator */\n.codehilite .ni { color: #999999; font-weight: bold } /* Name.Entity */\n.codehilite .ne { color: #D2413A; font-weight: bold } /* Name.Exception */\n.codehilite .nf { color: #00A000 } /* Name.Function */\n.codehilite .nl { color: #A0A000 } /* Name.Label */\n.codehilite .nn { color: #0000FF; font-weight: bold } /* Name.Namespace */\n.codehilite .nt { color: #008000; font-weight: bold } /* Name.Tag */\n.codehilite .nv { color: #B8860B } /* Name.Variable */\n.codehilite .ow { color: #AA22FF; font-weight: bold } /* Operator.Word */\n.codehilite .w { color: #bbbbbb } /* Text.Whitespace */\n.codehilite .mf { color: #666666 } /* Literal.Number.Float */\n.codehilite .mh { color: #666666 } /* Literal.Number.Hex */\n.codehilite .mi { color: #666666 } /* Literal.Number.Integer */\n.codehilite .mo { color: #666666 } /* Literal.Number.Oct */\n.codehilite .sb { color: #BB4444 } /* Literal.String.Backtick */\n.codehilite .sc { color: #BB4444 } /* Literal.String.Char */\n.codehilite .sd { color: #BB4444; font-style: italic } /* Literal.String.Doc */\n.codehilite .s2 { color: #BB4444 } /* Literal.String.Double */\n.codehilite .se { color: #BB6622; font-weight: bold } /* Literal.String.Escape */\n.codehilite .sh { color: #BB4444 } /* Literal.String.Heredoc */\n.codehilite .si { color: #BB6688; font-weight: bold } /* Literal.String.Interpol */\n.codehilite .sx { color: #008000 } /* Literal.String.Other */\n.codehilite .sr { color: #BB6688 } /* Literal.String.Regex */\n.codehilite .s1 { color: #BB4444 } /* Literal.String.Single */\n.codehilite .ss { color: #B8860B } /* Literal.String.Symbol */\n.codehilite .bp { color: #AA22FF } /* Name.Builtin.Pseudo */\n.codehilite .vc { color: #B8860B } /* Name.Variable.Class */\n.codehilite .vg { color: #B8860B } /* Name.Variable.Global */\n.codehilite .vi { color: #B8860B } /* Name.Variable.Instance */\n.codehilite .il { color: #666666 } /* Literal.Number.Integer.Long */\n"
  },
  {
    "path": "assets/scss/pygments/friendly.css",
    "content": ".codehilite .hll { background-color: #ffffcc }\n.codehilite .c { color: #60a0b0; font-style: italic } /* Comment */\n.codehilite .err { border: 1px solid #FF0000 } /* Error */\n.codehilite .k { color: #007020; font-weight: bold } /* Keyword */\n.codehilite .o { color: #666666 } /* Operator */\n.codehilite .cm { color: #60a0b0; font-style: italic } /* Comment.Multiline */\n.codehilite .cp { color: #007020 } /* Comment.Preproc */\n.codehilite .c1 { color: #60a0b0; font-style: italic } /* Comment.Single */\n.codehilite .cs { color: #60a0b0; background-color: #fff0f0 } /* Comment.Special */\n.codehilite .gd { color: #A00000 } /* Generic.Deleted */\n.codehilite .ge { font-style: italic } /* Generic.Emph */\n.codehilite .gr { color: #FF0000 } /* Generic.Error */\n.codehilite .gh { color: #000080; font-weight: bold } /* Generic.Heading */\n.codehilite .gi { color: #00A000 } /* Generic.Inserted */\n.codehilite .go { color: #808080 } /* Generic.Output */\n.codehilite .gp { color: #c65d09; font-weight: bold } /* Generic.Prompt */\n.codehilite .gs { font-weight: bold } /* Generic.Strong */\n.codehilite .gu { color: #800080; font-weight: bold } /* Generic.Subheading */\n.codehilite .gt { color: #0040D0 } /* Generic.Traceback */\n.codehilite .kc { color: #007020; font-weight: bold } /* Keyword.Constant */\n.codehilite .kd { color: #007020; font-weight: bold } /* Keyword.Declaration */\n.codehilite .kn { color: #007020; font-weight: bold } /* Keyword.Namespace */\n.codehilite .kp { color: #007020 } /* Keyword.Pseudo */\n.codehilite .kr { color: #007020; font-weight: bold } /* Keyword.Reserved */\n.codehilite .kt { color: #902000 } /* Keyword.Type */\n.codehilite .m { color: #40a070 } /* Literal.Number */\n.codehilite .s { color: #4070a0 } /* Literal.String */\n.codehilite .na { color: #4070a0 } /* Name.Attribute */\n.codehilite .nb { color: #007020 } /* Name.Builtin */\n.codehilite .nc { color: #0e84b5; font-weight: bold } /* Name.Class */\n.codehilite .no { color: #60add5 } /* Name.Constant */\n.codehilite .nd { color: #555555; font-weight: bold } /* Name.Decorator */\n.codehilite .ni { color: #d55537; font-weight: bold } /* Name.Entity */\n.codehilite .ne { color: #007020 } /* Name.Exception */\n.codehilite .nf { color: #06287e } /* Name.Function */\n.codehilite .nl { color: #002070; font-weight: bold } /* Name.Label */\n.codehilite .nn { color: #0e84b5; font-weight: bold } /* Name.Namespace */\n.codehilite .nt { color: #062873; font-weight: bold } /* Name.Tag */\n.codehilite .nv { color: #bb60d5 } /* Name.Variable */\n.codehilite .ow { color: #007020; font-weight: bold } /* Operator.Word */\n.codehilite .w { color: #bbbbbb } /* Text.Whitespace */\n.codehilite .mf { color: #40a070 } /* Literal.Number.Float */\n.codehilite .mh { color: #40a070 } /* Literal.Number.Hex */\n.codehilite .mi { color: #40a070 } /* Literal.Number.Integer */\n.codehilite .mo { color: #40a070 } /* Literal.Number.Oct */\n.codehilite .sb { color: #4070a0 } /* Literal.String.Backtick */\n.codehilite .sc { color: #4070a0 } /* Literal.String.Char */\n.codehilite .sd { color: #4070a0; font-style: italic } /* Literal.String.Doc */\n.codehilite .s2 { color: #4070a0 } /* Literal.String.Double */\n.codehilite .se { color: #4070a0; font-weight: bold } /* Literal.String.Escape */\n.codehilite .sh { color: #4070a0 } /* Literal.String.Heredoc */\n.codehilite .si { color: #70a0d0; font-style: italic } /* Literal.String.Interpol */\n.codehilite .sx { color: #c65d09 } /* Literal.String.Other */\n.codehilite .sr { color: #235388 } /* Literal.String.Regex */\n.codehilite .s1 { color: #4070a0 } /* Literal.String.Single */\n.codehilite .ss { color: #517918 } /* Literal.String.Symbol */\n.codehilite .bp { color: #007020 } /* Name.Builtin.Pseudo */\n.codehilite .vc { color: #bb60d5 } /* Name.Variable.Class */\n.codehilite .vg { color: #bb60d5 } /* Name.Variable.Global */\n.codehilite .vi { color: #bb60d5 } /* Name.Variable.Instance */\n.codehilite .il { color: #40a070 } /* Literal.Number.Integer.Long */\n"
  },
  {
    "path": "assets/scss/pygments/fruity.css",
    "content": ".codehilite .hll { background-color: #333333 }\n.codehilite .c { color: #008800; font-style: italic; background-color: #0f140f } /* Comment */\n.codehilite .err { color: #ffffff } /* Error */\n.codehilite .g { color: #ffffff } /* Generic */\n.codehilite .k { color: #fb660a; font-weight: bold } /* Keyword */\n.codehilite .l { color: #ffffff } /* Literal */\n.codehilite .n { color: #ffffff } /* Name */\n.codehilite .o { color: #ffffff } /* Operator */\n.codehilite .x { color: #ffffff } /* Other */\n.codehilite .p { color: #ffffff } /* Punctuation */\n.codehilite .cm { color: #008800; font-style: italic; background-color: #0f140f } /* Comment.Multiline */\n.codehilite .cp { color: #ff0007; font-weight: bold; font-style: italic; background-color: #0f140f } /* Comment.Preproc */\n.codehilite .c1 { color: #008800; font-style: italic; background-color: #0f140f } /* Comment.Single */\n.codehilite .cs { color: #008800; font-style: italic; background-color: #0f140f } /* Comment.Special */\n.codehilite .gd { color: #ffffff } /* Generic.Deleted */\n.codehilite .ge { color: #ffffff } /* Generic.Emph */\n.codehilite .gr { color: #ffffff } /* Generic.Error */\n.codehilite .gh { color: #ffffff; font-weight: bold } /* Generic.Heading */\n.codehilite .gi { color: #ffffff } /* Generic.Inserted */\n.codehilite .go { color: #444444; background-color: #222222 } /* Generic.Output */\n.codehilite .gp { color: #ffffff } /* Generic.Prompt */\n.codehilite .gs { color: #ffffff } /* Generic.Strong */\n.codehilite .gu { color: #ffffff; font-weight: bold } /* Generic.Subheading */\n.codehilite .gt { color: #ffffff } /* Generic.Traceback */\n.codehilite .kc { color: #fb660a; font-weight: bold } /* Keyword.Constant */\n.codehilite .kd { color: #fb660a; font-weight: bold } /* Keyword.Declaration */\n.codehilite .kn { color: #fb660a; font-weight: bold } /* Keyword.Namespace */\n.codehilite .kp { color: #fb660a } /* Keyword.Pseudo */\n.codehilite .kr { color: #fb660a; font-weight: bold } /* Keyword.Reserved */\n.codehilite .kt { color: #cdcaa9; font-weight: bold } /* Keyword.Type */\n.codehilite .ld { color: #ffffff } /* Literal.Date */\n.codehilite .m { color: #0086f7; font-weight: bold } /* Literal.Number */\n.codehilite .s { color: #0086d2 } /* Literal.String */\n.codehilite .na { color: #ff0086; font-weight: bold } /* Name.Attribute */\n.codehilite .nb { color: #ffffff } /* Name.Builtin */\n.codehilite .nc { color: #ffffff } /* Name.Class */\n.codehilite .no { color: #0086d2 } /* Name.Constant */\n.codehilite .nd { color: #ffffff } /* Name.Decorator */\n.codehilite .ni { color: #ffffff } /* Name.Entity */\n.codehilite .ne { color: #ffffff } /* Name.Exception */\n.codehilite .nf { color: #ff0086; font-weight: bold } /* Name.Function */\n.codehilite .nl { color: #ffffff } /* Name.Label */\n.codehilite .nn { color: #ffffff } /* Name.Namespace */\n.codehilite .nx { color: #ffffff } /* Name.Other */\n.codehilite .py { color: #ffffff } /* Name.Property */\n.codehilite .nt { color: #fb660a; font-weight: bold } /* Name.Tag */\n.codehilite .nv { color: #fb660a } /* Name.Variable */\n.codehilite .ow { color: #ffffff } /* Operator.Word */\n.codehilite .w { color: #888888 } /* Text.Whitespace */\n.codehilite .mf { color: #0086f7; font-weight: bold } /* Literal.Number.Float */\n.codehilite .mh { color: #0086f7; font-weight: bold } /* Literal.Number.Hex */\n.codehilite .mi { color: #0086f7; font-weight: bold } /* Literal.Number.Integer */\n.codehilite .mo { color: #0086f7; font-weight: bold } /* Literal.Number.Oct */\n.codehilite .sb { color: #0086d2 } /* Literal.String.Backtick */\n.codehilite .sc { color: #0086d2 } /* Literal.String.Char */\n.codehilite .sd { color: #0086d2 } /* Literal.String.Doc */\n.codehilite .s2 { color: #0086d2 } /* Literal.String.Double */\n.codehilite .se { color: #0086d2 } /* Literal.String.Escape */\n.codehilite .sh { color: #0086d2 } /* Literal.String.Heredoc */\n.codehilite .si { color: #0086d2 } /* Literal.String.Interpol */\n.codehilite .sx { color: #0086d2 } /* Literal.String.Other */\n.codehilite .sr { color: #0086d2 } /* Literal.String.Regex */\n.codehilite .s1 { color: #0086d2 } /* Literal.String.Single */\n.codehilite .ss { color: #0086d2 } /* Literal.String.Symbol */\n.codehilite .bp { color: #ffffff } /* Name.Builtin.Pseudo */\n.codehilite .vc { color: #fb660a } /* Name.Variable.Class */\n.codehilite .vg { color: #fb660a } /* Name.Variable.Global */\n.codehilite .vi { color: #fb660a } /* Name.Variable.Instance */\n.codehilite .il { color: #0086f7; font-weight: bold } /* Literal.Number.Integer.Long */\n"
  },
  {
    "path": "assets/scss/pygments/github.css",
    "content": ".hll { background-color: #ffffcc }\n.c { color: #999988; font-style: italic } /* Comment */\n.err { color: #a61717; background-color: #e3d2d2 } /* Error */\n.k { color: #000000; font-weight: bold } /* Keyword */\n.o { color: #000000; font-weight: bold } /* Operator */\n.cm { color: #999988; font-style: italic } /* Comment.Multiline */\n.cp { color: #999999; font-weight: bold; font-style: italic } /* Comment.Preproc */\n.c1 { color: #999988; font-style: italic } /* Comment.Single */\n.cs { color: #999999; font-weight: bold; font-style: italic } /* Comment.Special */\n.gd { color: #000000; background-color: #ffdddd } /* Generic.Deleted */\n.ge { color: #000000; font-style: italic } /* Generic.Emph */\n.gr { color: #aa0000 } /* Generic.Error */\n.gh { color: #999999 } /* Generic.Heading */\n.gi { color: #000000; background-color: #ddffdd } /* Generic.Inserted */\n.go { color: #888888 } /* Generic.Output */\n.gp { color: #555555 } /* Generic.Prompt */\n.gs { font-weight: bold } /* Generic.Strong */\n.gu { color: #aaaaaa } /* Generic.Subheading */\n.gt { color: #aa0000 } /* Generic.Traceback */\n.kc { color: #000000; font-weight: bold } /* Keyword.Constant */\n.kd { color: #000000; font-weight: bold } /* Keyword.Declaration */\n.kn { color: #000000; font-weight: bold } /* Keyword.Namespace */\n.kp { color: #000000; font-weight: bold } /* Keyword.Pseudo */\n.kr { color: #000000; font-weight: bold } /* Keyword.Reserved */\n.kt { color: #445588; font-weight: bold } /* Keyword.Type */\n.m { color: #009999 } /* Literal.Number */\n.s { color: #d01040 } /* Literal.String */\n.na { color: #008080 } /* Name.Attribute */\n.nb { color: #0086B3 } /* Name.Builtin */\n.nc { color: #445588; font-weight: bold } /* Name.Class */\n.no { color: #008080 } /* Name.Constant */\n.nd { color: #3c5d5d; font-weight: bold } /* Name.Decorator */\n.ni { color: #800080 } /* Name.Entity */\n.ne { color: #990000; font-weight: bold } /* Name.Exception */\n.nf { color: #990000; font-weight: bold } /* Name.Function */\n.nl { color: #990000; font-weight: bold } /* Name.Label */\n.nn { color: #555555 } /* Name.Namespace */\n.nt { color: #000080 } /* Name.Tag */\n.nv { color: #008080 } /* Name.Variable */\n.ow { color: #000000; font-weight: bold } /* Operator.Word */\n.w { color: #bbbbbb } /* Text.Whitespace */\n.mf { color: #009999 } /* Literal.Number.Float */\n.mh { color: #009999 } /* Literal.Number.Hex */\n.mi { color: #009999 } /* Literal.Number.Integer */\n.mo { color: #009999 } /* Literal.Number.Oct */\n.sb { color: #d01040 } /* Literal.String.Backtick */\n.sc { color: #d01040 } /* Literal.String.Char */\n.sd { color: #d01040 } /* Literal.String.Doc */\n.s2 { color: #d01040 } /* Literal.String.Double */\n.se { color: #d01040 } /* Literal.String.Escape */\n.sh { color: #d01040 } /* Literal.String.Heredoc */\n.si { color: #d01040 } /* Literal.String.Interpol */\n.sx { color: #d01040 } /* Literal.String.Other */\n.sr { color: #009926 } /* Literal.String.Regex */\n.s1 { color: #d01040 } /* Literal.String.Single */\n.ss { color: #990073 } /* Literal.String.Symbol */\n.bp { color: #999999 } /* Name.Builtin.Pseudo */\n.vc { color: #008080 } /* Name.Variable.Class */\n.vg { color: #008080 } /* Name.Variable.Global */\n.vi { color: #008080 } /* Name.Variable.Instance */\n.il { color: #009999 } /* Literal.Number.Integer.Long */\n"
  },
  {
    "path": "assets/scss/pygments/ionic.scss",
    "content": ".highlight  { background: #ffffff; }\n.highlight .c { color: #999988; font-style: italic } /* Comment */\n.highlight .err { color: #a61717; background-color: #e3d2d2 } /* Error */\n.highlight .k { font-weight: bold } /* Keyword */\n.highlight .o { font-weight: bold } /* Operator */\n.highlight .cm { color: #999988; font-style: italic } /* Comment.Multiline */\n.highlight .cp { color: #999999; font-weight: bold } /* Comment.Preproc */\n.highlight .c1 { color: #999988; font-style: italic } /* Comment.Single */\n.highlight .cs { color: #999999; font-weight: bold; font-style: italic } /* Comment.Special */\n.highlight .gd { color: #000000; background-color: #ffdddd } /* Generic.Deleted */\n.highlight .gd .x { color: #000000; background-color: #ffaaaa } /* Generic.Deleted.Specific */\n.highlight .ge { font-style: italic } /* Generic.Emph */\n.highlight .gr { color: #aa0000 } /* Generic.Error */\n.highlight .gh { color: #999999 } /* Generic.Heading */\n.highlight .gi { color: #000000; background-color: #ddffdd } /* Generic.Inserted */\n.highlight .gi .x { color: #000000; background-color: #aaffaa } /* Generic.Inserted.Specific */\n.highlight .go { color: #888888 } /* Generic.Output */\n.highlight .gp { color: #555555 } /* Generic.Prompt */\n.highlight .gs { font-weight: bold } /* Generic.Strong */\n.highlight .gu { color: #aaaaaa } /* Generic.Subheading */\n.highlight .gt { color: #aa0000 } /* Generic.Traceback */\n.highlight .kc { font-weight: bold } /* Keyword.Constant */\n.highlight .kd { font-weight: bold } /* Keyword.Declaration */\n.highlight .kp { font-weight: bold } /* Keyword.Pseudo */\n.highlight .kr { font-weight: bold } /* Keyword.Reserved */\n.highlight .kt { color: #445588; font-weight: bold } /* Keyword.Type */\n.highlight .m { color: #009999 } /* Literal.Number */\n.highlight .s { color: #d14 } /* Literal.String */\n.highlight .na { color: #008080 } /* Name.Attribute */\n.highlight .nb { color: #0086B3 } /* Name.Builtin */\n.highlight .nc { color: #445588; font-weight: bold } /* Name.Class */\n.highlight .no { color: #008080 } /* Name.Constant */\n.highlight .ni { color: #800080 } /* Name.Entity */\n.highlight .ne { color: #990000; font-weight: bold } /* Name.Exception */\n.highlight .nf { color: #990000; font-weight: bold } /* Name.Function */\n.highlight .nn { color: #555555 } /* Name.Namespace */\n.highlight .nt { color: #000080 } /* Name.Tag */\n.highlight .nv { color: #008080 } /* Name.Variable */\n.highlight .ow { font-weight: bold } /* Operator.Word */\n.highlight .w { color: #bbbbbb } /* Text.Whitespace */\n.highlight .mf { color: #009999 } /* Literal.Number.Float */\n.highlight .mh { color: #009999 } /* Literal.Number.Hex */\n.highlight .mi { color: #009999 } /* Literal.Number.Integer */\n.highlight .mo { color: #009999 } /* Literal.Number.Oct */\n.highlight .sb { color: #d14 } /* Literal.String.Backtick */\n.highlight .sc { color: #d14 } /* Literal.String.Char */\n.highlight .sd { color: #d14 } /* Literal.String.Doc */\n.highlight .s2 { color: #d14 } /* Literal.String.Double */\n.highlight .se { color: #d14 } /* Literal.String.Escape */\n.highlight .sh { color: #d14 } /* Literal.String.Heredoc */\n.highlight .si { color: #d14 } /* Literal.String.Interpol */\n.highlight .sx { color: #d14 } /* Literal.String.Other */\n.highlight .sr { color: #009926 } /* Literal.String.Regex */\n.highlight .s1 { color: #d14 } /* Literal.String.Single */\n.highlight .ss { color: #990073 } /* Literal.String.Symbol */\n.highlight .bp { color: #999999 } /* Name.Builtin.Pseudo */\n.highlight .vc { color: #008080 } /* Name.Variable.Class */\n.highlight .vg { color: #008080 } /* Name.Variable.Global */\n.highlight .vi { color: #008080 } /* Name.Variable.Instance */\n.highlight .il { color: #009999 } /* Literal.Number.Integer.Long */\n"
  },
  {
    "path": "assets/scss/pygments/manni.css",
    "content": ".codehilite .hll { background-color: #ffffcc }\n.codehilite .c { color: #0099FF; font-style: italic } /* Comment */\n.codehilite .err { color: #AA0000; background-color: #FFAAAA } /* Error */\n.codehilite .k { color: #006699; font-weight: bold } /* Keyword */\n.codehilite .o { color: #555555 } /* Operator */\n.codehilite .cm { color: #0099FF; font-style: italic } /* Comment.Multiline */\n.codehilite .cp { color: #009999 } /* Comment.Preproc */\n.codehilite .c1 { color: #0099FF; font-style: italic } /* Comment.Single */\n.codehilite .cs { color: #0099FF; font-weight: bold; font-style: italic } /* Comment.Special */\n.codehilite .gd { background-color: #FFCCCC; border: 1px solid #CC0000 } /* Generic.Deleted */\n.codehilite .ge { font-style: italic } /* Generic.Emph */\n.codehilite .gr { color: #FF0000 } /* Generic.Error */\n.codehilite .gh { color: #003300; font-weight: bold } /* Generic.Heading */\n.codehilite .gi { background-color: #CCFFCC; border: 1px solid #00CC00 } /* Generic.Inserted */\n.codehilite .go { color: #AAAAAA } /* Generic.Output */\n.codehilite .gp { color: #000099; font-weight: bold } /* Generic.Prompt */\n.codehilite .gs { font-weight: bold } /* Generic.Strong */\n.codehilite .gu { color: #003300; font-weight: bold } /* Generic.Subheading */\n.codehilite .gt { color: #99CC66 } /* Generic.Traceback */\n.codehilite .kc { color: #006699; font-weight: bold } /* Keyword.Constant */\n.codehilite .kd { color: #006699; font-weight: bold } /* Keyword.Declaration */\n.codehilite .kn { color: #006699; font-weight: bold } /* Keyword.Namespace */\n.codehilite .kp { color: #006699 } /* Keyword.Pseudo */\n.codehilite .kr { color: #006699; font-weight: bold } /* Keyword.Reserved */\n.codehilite .kt { color: #007788; font-weight: bold } /* Keyword.Type */\n.codehilite .m { color: #FF6600 } /* Literal.Number */\n.codehilite .s { color: #CC3300 } /* Literal.String */\n.codehilite .na { color: #330099 } /* Name.Attribute */\n.codehilite .nb { color: #336666 } /* Name.Builtin */\n.codehilite .nc { color: #00AA88; font-weight: bold } /* Name.Class */\n.codehilite .no { color: #336600 } /* Name.Constant */\n.codehilite .nd { color: #9999FF } /* Name.Decorator */\n.codehilite .ni { color: #999999; font-weight: bold } /* Name.Entity */\n.codehilite .ne { color: #CC0000; font-weight: bold } /* Name.Exception */\n.codehilite .nf { color: #CC00FF } /* Name.Function */\n.codehilite .nl { color: #9999FF } /* Name.Label */\n.codehilite .nn { color: #00CCFF; font-weight: bold } /* Name.Namespace */\n.codehilite .nt { color: #330099; font-weight: bold } /* Name.Tag */\n.codehilite .nv { color: #003333 } /* Name.Variable */\n.codehilite .ow { color: #000000; font-weight: bold } /* Operator.Word */\n.codehilite .w { color: #bbbbbb } /* Text.Whitespace */\n.codehilite .mf { color: #FF6600 } /* Literal.Number.Float */\n.codehilite .mh { color: #FF6600 } /* Literal.Number.Hex */\n.codehilite .mi { color: #FF6600 } /* Literal.Number.Integer */\n.codehilite .mo { color: #FF6600 } /* Literal.Number.Oct */\n.codehilite .sb { color: #CC3300 } /* Literal.String.Backtick */\n.codehilite .sc { color: #CC3300 } /* Literal.String.Char */\n.codehilite .sd { color: #CC3300; font-style: italic } /* Literal.String.Doc */\n.codehilite .s2 { color: #CC3300 } /* Literal.String.Double */\n.codehilite .se { color: #CC3300; font-weight: bold } /* Literal.String.Escape */\n.codehilite .sh { color: #CC3300 } /* Literal.String.Heredoc */\n.codehilite .si { color: #AA0000 } /* Literal.String.Interpol */\n.codehilite .sx { color: #CC3300 } /* Literal.String.Other */\n.codehilite .sr { color: #33AAAA } /* Literal.String.Regex */\n.codehilite .s1 { color: #CC3300 } /* Literal.String.Single */\n.codehilite .ss { color: #FFCC33 } /* Literal.String.Symbol */\n.codehilite .bp { color: #336666 } /* Name.Builtin.Pseudo */\n.codehilite .vc { color: #003333 } /* Name.Variable.Class */\n.codehilite .vg { color: #003333 } /* Name.Variable.Global */\n.codehilite .vi { color: #003333 } /* Name.Variable.Instance */\n.codehilite .il { color: #FF6600 } /* Literal.Number.Integer.Long */\n"
  },
  {
    "path": "assets/scss/pygments/monokai.css",
    "content": ".codehilite .hll { background-color: #49483e }\n.codehilite .c { color: #75715e } /* Comment */\n.codehilite .err { color: #960050; background-color: #1e0010 } /* Error */\n.codehilite .k { color: #66d9ef } /* Keyword */\n.codehilite .l { color: #ae81ff } /* Literal */\n.codehilite .n { color: #f8f8f2 } /* Name */\n.codehilite .o { color: #f92672 } /* Operator */\n.codehilite .p { color: #f8f8f2 } /* Punctuation */\n.codehilite .cm { color: #75715e } /* Comment.Multiline */\n.codehilite .cp { color: #75715e } /* Comment.Preproc */\n.codehilite .c1 { color: #75715e } /* Comment.Single */\n.codehilite .cs { color: #75715e } /* Comment.Special */\n.codehilite .ge { font-style: italic } /* Generic.Emph */\n.codehilite .gs { font-weight: bold } /* Generic.Strong */\n.codehilite .kc { color: #66d9ef } /* Keyword.Constant */\n.codehilite .kd { color: #66d9ef } /* Keyword.Declaration */\n.codehilite .kn { color: #f92672 } /* Keyword.Namespace */\n.codehilite .kp { color: #66d9ef } /* Keyword.Pseudo */\n.codehilite .kr { color: #66d9ef } /* Keyword.Reserved */\n.codehilite .kt { color: #66d9ef } /* Keyword.Type */\n.codehilite .ld { color: #e6db74 } /* Literal.Date */\n.codehilite .m { color: #ae81ff } /* Literal.Number */\n.codehilite .s { color: #e6db74 } /* Literal.String */\n.codehilite .na { color: #a6e22e } /* Name.Attribute */\n.codehilite .nb { color: #f8f8f2 } /* Name.Builtin */\n.codehilite .nc { color: #a6e22e } /* Name.Class */\n.codehilite .no { color: #66d9ef } /* Name.Constant */\n.codehilite .nd { color: #a6e22e } /* Name.Decorator */\n.codehilite .ni { color: #f8f8f2 } /* Name.Entity */\n.codehilite .ne { color: #a6e22e } /* Name.Exception */\n.codehilite .nf { color: #a6e22e } /* Name.Function */\n.codehilite .nl { color: #f8f8f2 } /* Name.Label */\n.codehilite .nn { color: #f8f8f2 } /* Name.Namespace */\n.codehilite .nx { color: #a6e22e } /* Name.Other */\n.codehilite .py { color: #f8f8f2 } /* Name.Property */\n.codehilite .nt { color: #f92672 } /* Name.Tag */\n.codehilite .nv { color: #f8f8f2 } /* Name.Variable */\n.codehilite .ow { color: #f92672 } /* Operator.Word */\n.codehilite .w { color: #f8f8f2 } /* Text.Whitespace */\n.codehilite .mf { color: #ae81ff } /* Literal.Number.Float */\n.codehilite .mh { color: #ae81ff } /* Literal.Number.Hex */\n.codehilite .mi { color: #ae81ff } /* Literal.Number.Integer */\n.codehilite .mo { color: #ae81ff } /* Literal.Number.Oct */\n.codehilite .sb { color: #e6db74 } /* Literal.String.Backtick */\n.codehilite .sc { color: #e6db74 } /* Literal.String.Char */\n.codehilite .sd { color: #e6db74 } /* Literal.String.Doc */\n.codehilite .s2 { color: #e6db74 } /* Literal.String.Double */\n.codehilite .se { color: #ae81ff } /* Literal.String.Escape */\n.codehilite .sh { color: #e6db74 } /* Literal.String.Heredoc */\n.codehilite .si { color: #e6db74 } /* Literal.String.Interpol */\n.codehilite .sx { color: #e6db74 } /* Literal.String.Other */\n.codehilite .sr { color: #e6db74 } /* Literal.String.Regex */\n.codehilite .s1 { color: #e6db74 } /* Literal.String.Single */\n.codehilite .ss { color: #e6db74 } /* Literal.String.Symbol */\n.codehilite .bp { color: #f8f8f2 } /* Name.Builtin.Pseudo */\n.codehilite .vc { color: #f8f8f2 } /* Name.Variable.Class */\n.codehilite .vg { color: #f8f8f2 } /* Name.Variable.Global */\n.codehilite .vi { color: #f8f8f2 } /* Name.Variable.Instance */\n.codehilite .il { color: #ae81ff } /* Literal.Number.Integer.Long */\n\n.codehilite .gh { } /* Generic Heading & Diff Header */\n.codehilite .gu { color: #75715e; } /* Generic.Subheading & Diff Unified/Comment? */\n.codehilite .gd { color: #f92672; } /* Generic.Deleted & Diff Deleted */\n.codehilite .gi { color: #a6e22e; } /* Generic.Inserted & Diff Inserted */\n"
  },
  {
    "path": "assets/scss/pygments/murphy.css",
    "content": ".codehilite .hll { background-color: #ffffcc }\n.codehilite .c { color: #606060; font-style: italic } /* Comment */\n.codehilite .err { color: #F00000; background-color: #F0A0A0 } /* Error */\n.codehilite .k { color: #208090; font-weight: bold } /* Keyword */\n.codehilite .o { color: #303030 } /* Operator */\n.codehilite .cm { color: #606060; font-style: italic } /* Comment.Multiline */\n.codehilite .cp { color: #507090 } /* Comment.Preproc */\n.codehilite .c1 { color: #606060; font-style: italic } /* Comment.Single */\n.codehilite .cs { color: #c00000; font-weight: bold; font-style: italic } /* Comment.Special */\n.codehilite .gd { color: #A00000 } /* Generic.Deleted */\n.codehilite .ge { font-style: italic } /* Generic.Emph */\n.codehilite .gr { color: #FF0000 } /* Generic.Error */\n.codehilite .gh { color: #000080; font-weight: bold } /* Generic.Heading */\n.codehilite .gi { color: #00A000 } /* Generic.Inserted */\n.codehilite .go { color: #808080 } /* Generic.Output */\n.codehilite .gp { color: #c65d09; font-weight: bold } /* Generic.Prompt */\n.codehilite .gs { font-weight: bold } /* Generic.Strong */\n.codehilite .gu { color: #800080; font-weight: bold } /* Generic.Subheading */\n.codehilite .gt { color: #0040D0 } /* Generic.Traceback */\n.codehilite .kc { color: #208090; font-weight: bold } /* Keyword.Constant */\n.codehilite .kd { color: #208090; font-weight: bold } /* Keyword.Declaration */\n.codehilite .kn { color: #208090; font-weight: bold } /* Keyword.Namespace */\n.codehilite .kp { color: #0080f0; font-weight: bold } /* Keyword.Pseudo */\n.codehilite .kr { color: #208090; font-weight: bold } /* Keyword.Reserved */\n.codehilite .kt { color: #6060f0; font-weight: bold } /* Keyword.Type */\n.codehilite .m { color: #6000E0; font-weight: bold } /* Literal.Number */\n.codehilite .s { background-color: #e0e0ff } /* Literal.String */\n.codehilite .na { color: #000070 } /* Name.Attribute */\n.codehilite .nb { color: #007020 } /* Name.Builtin */\n.codehilite .nc { color: #e090e0; font-weight: bold } /* Name.Class */\n.codehilite .no { color: #50e0d0; font-weight: bold } /* Name.Constant */\n.codehilite .nd { color: #505050; font-weight: bold } /* Name.Decorator */\n.codehilite .ni { color: #800000 } /* Name.Entity */\n.codehilite .ne { color: #F00000; font-weight: bold } /* Name.Exception */\n.codehilite .nf { color: #50e0d0; font-weight: bold } /* Name.Function */\n.codehilite .nl { color: #907000; font-weight: bold } /* Name.Label */\n.codehilite .nn { color: #0e84b5; font-weight: bold } /* Name.Namespace */\n.codehilite .nt { color: #007000 } /* Name.Tag */\n.codehilite .nv { color: #003060 } /* Name.Variable */\n.codehilite .ow { color: #000000; font-weight: bold } /* Operator.Word */\n.codehilite .w { color: #bbbbbb } /* Text.Whitespace */\n.codehilite .mf { color: #6000E0; font-weight: bold } /* Literal.Number.Float */\n.codehilite .mh { color: #005080; font-weight: bold } /* Literal.Number.Hex */\n.codehilite .mi { color: #6060f0; font-weight: bold } /* Literal.Number.Integer */\n.codehilite .mo { color: #4000E0; font-weight: bold } /* Literal.Number.Oct */\n.codehilite .sb { background-color: #e0e0ff } /* Literal.String.Backtick */\n.codehilite .sc { color: #8080F0 } /* Literal.String.Char */\n.codehilite .sd { color: #D04020 } /* Literal.String.Doc */\n.codehilite .s2 { background-color: #e0e0ff } /* Literal.String.Double */\n.codehilite .se { color: #606060; font-weight: bold; background-color: #e0e0ff } /* Literal.String.Escape */\n.codehilite .sh { background-color: #e0e0ff } /* Literal.String.Heredoc */\n.codehilite .si { background-color: #e0e0e0 } /* Literal.String.Interpol */\n.codehilite .sx { color: #f08080; background-color: #e0e0ff } /* Literal.String.Other */\n.codehilite .sr { color: #000000; background-color: #e0e0ff } /* Literal.String.Regex */\n.codehilite .s1 { background-color: #e0e0ff } /* Literal.String.Single */\n.codehilite .ss { color: #f0c080 } /* Literal.String.Symbol */\n.codehilite .bp { color: #007020 } /* Name.Builtin.Pseudo */\n.codehilite .vc { color: #c0c0f0 } /* Name.Variable.Class */\n.codehilite .vg { color: #f08040 } /* Name.Variable.Global */\n.codehilite .vi { color: #a0a0f0 } /* Name.Variable.Instance */\n.codehilite .il { color: #6060f0; font-weight: bold } /* Literal.Number.Integer.Long */\n"
  },
  {
    "path": "assets/scss/pygments/native.css",
    "content": ".codehilite .hll { background-color: #404040 }\n.codehilite .c { color: #999999; font-style: italic } /* Comment */\n.codehilite .err { color: #a61717; background-color: #e3d2d2 } /* Error */\n.codehilite .g { color: #d0d0d0 } /* Generic */\n.codehilite .k { color: #6ab825; font-weight: bold } /* Keyword */\n.codehilite .l { color: #d0d0d0 } /* Literal */\n.codehilite .n { color: #d0d0d0 } /* Name */\n.codehilite .o { color: #d0d0d0 } /* Operator */\n.codehilite .x { color: #d0d0d0 } /* Other */\n.codehilite .p { color: #d0d0d0 } /* Punctuation */\n.codehilite .cm { color: #999999; font-style: italic } /* Comment.Multiline */\n.codehilite .cp { color: #cd2828; font-weight: bold } /* Comment.Preproc */\n.codehilite .c1 { color: #999999; font-style: italic } /* Comment.Single */\n.codehilite .cs { color: #e50808; font-weight: bold; background-color: #520000 } /* Comment.Special */\n.codehilite .gd { color: #d22323 } /* Generic.Deleted */\n.codehilite .ge { color: #d0d0d0; font-style: italic } /* Generic.Emph */\n.codehilite .gr { color: #d22323 } /* Generic.Error */\n.codehilite .gh { color: #ffffff; font-weight: bold } /* Generic.Heading */\n.codehilite .gi { color: #589819 } /* Generic.Inserted */\n.codehilite .go { color: #cccccc } /* Generic.Output */\n.codehilite .gp { color: #aaaaaa } /* Generic.Prompt */\n.codehilite .gs { color: #d0d0d0; font-weight: bold } /* Generic.Strong */\n.codehilite .gu { color: #ffffff; text-decoration: underline } /* Generic.Subheading */\n.codehilite .gt { color: #d22323 } /* Generic.Traceback */\n.codehilite .kc { color: #6ab825; font-weight: bold } /* Keyword.Constant */\n.codehilite .kd { color: #6ab825; font-weight: bold } /* Keyword.Declaration */\n.codehilite .kn { color: #6ab825; font-weight: bold } /* Keyword.Namespace */\n.codehilite .kp { color: #6ab825 } /* Keyword.Pseudo */\n.codehilite .kr { color: #6ab825; font-weight: bold } /* Keyword.Reserved */\n.codehilite .kt { color: #6ab825; font-weight: bold } /* Keyword.Type */\n.codehilite .ld { color: #d0d0d0 } /* Literal.Date */\n.codehilite .m { color: #3677a9 } /* Literal.Number */\n.codehilite .s { color: #ed9d13 } /* Literal.String */\n.codehilite .na { color: #bbbbbb } /* Name.Attribute */\n.codehilite .nb { color: #24909d } /* Name.Builtin */\n.codehilite .nc { color: #447fcf; text-decoration: underline } /* Name.Class */\n.codehilite .no { color: #40ffff } /* Name.Constant */\n.codehilite .nd { color: #ffa500 } /* Name.Decorator */\n.codehilite .ni { color: #d0d0d0 } /* Name.Entity */\n.codehilite .ne { color: #bbbbbb } /* Name.Exception */\n.codehilite .nf { color: #447fcf } /* Name.Function */\n.codehilite .nl { color: #d0d0d0 } /* Name.Label */\n.codehilite .nn { color: #447fcf; text-decoration: underline } /* Name.Namespace */\n.codehilite .nx { color: #d0d0d0 } /* Name.Other */\n.codehilite .py { color: #d0d0d0 } /* Name.Property */\n.codehilite .nt { color: #6ab825; font-weight: bold } /* Name.Tag */\n.codehilite .nv { color: #40ffff } /* Name.Variable */\n.codehilite .ow { color: #6ab825; font-weight: bold } /* Operator.Word */\n.codehilite .w { color: #666666 } /* Text.Whitespace */\n.codehilite .mf { color: #3677a9 } /* Literal.Number.Float */\n.codehilite .mh { color: #3677a9 } /* Literal.Number.Hex */\n.codehilite .mi { color: #3677a9 } /* Literal.Number.Integer */\n.codehilite .mo { color: #3677a9 } /* Literal.Number.Oct */\n.codehilite .sb { color: #ed9d13 } /* Literal.String.Backtick */\n.codehilite .sc { color: #ed9d13 } /* Literal.String.Char */\n.codehilite .sd { color: #ed9d13 } /* Literal.String.Doc */\n.codehilite .s2 { color: #ed9d13 } /* Literal.String.Double */\n.codehilite .se { color: #ed9d13 } /* Literal.String.Escape */\n.codehilite .sh { color: #ed9d13 } /* Literal.String.Heredoc */\n.codehilite .si { color: #ed9d13 } /* Literal.String.Interpol */\n.codehilite .sx { color: #ffa500 } /* Literal.String.Other */\n.codehilite .sr { color: #ed9d13 } /* Literal.String.Regex */\n.codehilite .s1 { color: #ed9d13 } /* Literal.String.Single */\n.codehilite .ss { color: #ed9d13 } /* Literal.String.Symbol */\n.codehilite .bp { color: #24909d } /* Name.Builtin.Pseudo */\n.codehilite .vc { color: #40ffff } /* Name.Variable.Class */\n.codehilite .vg { color: #40ffff } /* Name.Variable.Global */\n.codehilite .vi { color: #40ffff } /* Name.Variable.Instance */\n.codehilite .il { color: #3677a9 } /* Literal.Number.Integer.Long */\n"
  },
  {
    "path": "assets/scss/pygments/pastie.css",
    "content": ".codehilite .hll { background-color: #ffffcc }\n.codehilite .c { color: #888888 } /* Comment */\n.codehilite .err { color: #a61717; background-color: #e3d2d2 } /* Error */\n.codehilite .k { color: #008800; font-weight: bold } /* Keyword */\n.codehilite .cm { color: #888888 } /* Comment.Multiline */\n.codehilite .cp { color: #cc0000; font-weight: bold } /* Comment.Preproc */\n.codehilite .c1 { color: #888888 } /* Comment.Single */\n.codehilite .cs { color: #cc0000; font-weight: bold; background-color: #fff0f0 } /* Comment.Special */\n.codehilite .gd { color: #000000; background-color: #ffdddd } /* Generic.Deleted */\n.codehilite .ge { font-style: italic } /* Generic.Emph */\n.codehilite .gr { color: #aa0000 } /* Generic.Error */\n.codehilite .gh { color: #303030 } /* Generic.Heading */\n.codehilite .gi { color: #000000; background-color: #ddffdd } /* Generic.Inserted */\n.codehilite .go { color: #888888 } /* Generic.Output */\n.codehilite .gp { color: #555555 } /* Generic.Prompt */\n.codehilite .gs { font-weight: bold } /* Generic.Strong */\n.codehilite .gu { color: #606060 } /* Generic.Subheading */\n.codehilite .gt { color: #aa0000 } /* Generic.Traceback */\n.codehilite .kc { color: #008800; font-weight: bold } /* Keyword.Constant */\n.codehilite .kd { color: #008800; font-weight: bold } /* Keyword.Declaration */\n.codehilite .kn { color: #008800; font-weight: bold } /* Keyword.Namespace */\n.codehilite .kp { color: #008800 } /* Keyword.Pseudo */\n.codehilite .kr { color: #008800; font-weight: bold } /* Keyword.Reserved */\n.codehilite .kt { color: #888888; font-weight: bold } /* Keyword.Type */\n.codehilite .m { color: #0000DD; font-weight: bold } /* Literal.Number */\n.codehilite .s { color: #dd2200; background-color: #fff0f0 } /* Literal.String */\n.codehilite .na { color: #336699 } /* Name.Attribute */\n.codehilite .nb { color: #003388 } /* Name.Builtin */\n.codehilite .nc { color: #bb0066; font-weight: bold } /* Name.Class */\n.codehilite .no { color: #003366; font-weight: bold } /* Name.Constant */\n.codehilite .nd { color: #555555 } /* Name.Decorator */\n.codehilite .ne { color: #bb0066; font-weight: bold } /* Name.Exception */\n.codehilite .nf { color: #0066bb; font-weight: bold } /* Name.Function */\n.codehilite .nl { color: #336699; font-style: italic } /* Name.Label */\n.codehilite .nn { color: #bb0066; font-weight: bold } /* Name.Namespace */\n.codehilite .py { color: #336699; font-weight: bold } /* Name.Property */\n.codehilite .nt { color: #bb0066; font-weight: bold } /* Name.Tag */\n.codehilite .nv { color: #336699 } /* Name.Variable */\n.codehilite .ow { color: #008800 } /* Operator.Word */\n.codehilite .w { color: #bbbbbb } /* Text.Whitespace */\n.codehilite .mf { color: #0000DD; font-weight: bold } /* Literal.Number.Float */\n.codehilite .mh { color: #0000DD; font-weight: bold } /* Literal.Number.Hex */\n.codehilite .mi { color: #0000DD; font-weight: bold } /* Literal.Number.Integer */\n.codehilite .mo { color: #0000DD; font-weight: bold } /* Literal.Number.Oct */\n.codehilite .sb { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Backtick */\n.codehilite .sc { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Char */\n.codehilite .sd { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Doc */\n.codehilite .s2 { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Double */\n.codehilite .se { color: #0044dd; background-color: #fff0f0 } /* Literal.String.Escape */\n.codehilite .sh { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Heredoc */\n.codehilite .si { color: #3333bb; background-color: #fff0f0 } /* Literal.String.Interpol */\n.codehilite .sx { color: #22bb22; background-color: #f0fff0 } /* Literal.String.Other */\n.codehilite .sr { color: #008800; background-color: #fff0ff } /* Literal.String.Regex */\n.codehilite .s1 { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Single */\n.codehilite .ss { color: #aa6600; background-color: #fff0f0 } /* Literal.String.Symbol */\n.codehilite .bp { color: #003388 } /* Name.Builtin.Pseudo */\n.codehilite .vc { color: #336699 } /* Name.Variable.Class */\n.codehilite .vg { color: #dd7700 } /* Name.Variable.Global */\n.codehilite .vi { color: #3333bb } /* Name.Variable.Instance */\n.codehilite .il { color: #0000DD; font-weight: bold } /* Literal.Number.Integer.Long */\n"
  },
  {
    "path": "assets/scss/pygments/perldoc.css",
    "content": ".codehilite .hll { background-color: #ffffcc }\n.codehilite .c { color: #228B22 } /* Comment */\n.codehilite .err { color: #a61717; background-color: #e3d2d2 } /* Error */\n.codehilite .k { color: #8B008B; font-weight: bold } /* Keyword */\n.codehilite .cm { color: #228B22 } /* Comment.Multiline */\n.codehilite .cp { color: #1e889b } /* Comment.Preproc */\n.codehilite .c1 { color: #228B22 } /* Comment.Single */\n.codehilite .cs { color: #8B008B; font-weight: bold } /* Comment.Special */\n.codehilite .gd { color: #aa0000 } /* Generic.Deleted */\n.codehilite .ge { font-style: italic } /* Generic.Emph */\n.codehilite .gr { color: #aa0000 } /* Generic.Error */\n.codehilite .gh { color: #000080; font-weight: bold } /* Generic.Heading */\n.codehilite .gi { color: #00aa00 } /* Generic.Inserted */\n.codehilite .go { color: #888888 } /* Generic.Output */\n.codehilite .gp { color: #555555 } /* Generic.Prompt */\n.codehilite .gs { font-weight: bold } /* Generic.Strong */\n.codehilite .gu { color: #800080; font-weight: bold } /* Generic.Subheading */\n.codehilite .gt { color: #aa0000 } /* Generic.Traceback */\n.codehilite .kc { color: #8B008B; font-weight: bold } /* Keyword.Constant */\n.codehilite .kd { color: #8B008B; font-weight: bold } /* Keyword.Declaration */\n.codehilite .kn { color: #8B008B; font-weight: bold } /* Keyword.Namespace */\n.codehilite .kp { color: #8B008B; font-weight: bold } /* Keyword.Pseudo */\n.codehilite .kr { color: #8B008B; font-weight: bold } /* Keyword.Reserved */\n.codehilite .kt { color: #a7a7a7; font-weight: bold } /* Keyword.Type */\n.codehilite .m { color: #B452CD } /* Literal.Number */\n.codehilite .s { color: #CD5555 } /* Literal.String */\n.codehilite .na { color: #658b00 } /* Name.Attribute */\n.codehilite .nb { color: #658b00 } /* Name.Builtin */\n.codehilite .nc { color: #008b45; font-weight: bold } /* Name.Class */\n.codehilite .no { color: #00688B } /* Name.Constant */\n.codehilite .nd { color: #707a7c } /* Name.Decorator */\n.codehilite .ne { color: #008b45; font-weight: bold } /* Name.Exception */\n.codehilite .nf { color: #008b45 } /* Name.Function */\n.codehilite .nn { color: #008b45; text-decoration: underline } /* Name.Namespace */\n.codehilite .nt { color: #8B008B; font-weight: bold } /* Name.Tag */\n.codehilite .nv { color: #00688B } /* Name.Variable */\n.codehilite .ow { color: #8B008B } /* Operator.Word */\n.codehilite .w { color: #bbbbbb } /* Text.Whitespace */\n.codehilite .mf { color: #B452CD } /* Literal.Number.Float */\n.codehilite .mh { color: #B452CD } /* Literal.Number.Hex */\n.codehilite .mi { color: #B452CD } /* Literal.Number.Integer */\n.codehilite .mo { color: #B452CD } /* Literal.Number.Oct */\n.codehilite .sb { color: #CD5555 } /* Literal.String.Backtick */\n.codehilite .sc { color: #CD5555 } /* Literal.String.Char */\n.codehilite .sd { color: #CD5555 } /* Literal.String.Doc */\n.codehilite .s2 { color: #CD5555 } /* Literal.String.Double */\n.codehilite .se { color: #CD5555 } /* Literal.String.Escape */\n.codehilite .sh { color: #1c7e71; font-style: italic } /* Literal.String.Heredoc */\n.codehilite .si { color: #CD5555 } /* Literal.String.Interpol */\n.codehilite .sx { color: #cb6c20 } /* Literal.String.Other */\n.codehilite .sr { color: #1c7e71 } /* Literal.String.Regex */\n.codehilite .s1 { color: #CD5555 } /* Literal.String.Single */\n.codehilite .ss { color: #CD5555 } /* Literal.String.Symbol */\n.codehilite .bp { color: #658b00 } /* Name.Builtin.Pseudo */\n.codehilite .vc { color: #00688B } /* Name.Variable.Class */\n.codehilite .vg { color: #00688B } /* Name.Variable.Global */\n.codehilite .vi { color: #00688B } /* Name.Variable.Instance */\n.codehilite .il { color: #B452CD } /* Literal.Number.Integer.Long */\n"
  },
  {
    "path": "assets/scss/pygments/tango.css",
    "content": ".codehilite .hll { background-color: #ffffcc }\n.codehilite .c { color: #8f5902; font-style: italic } /* Comment */\n.codehilite .err { color: #a40000; border: 1px solid #ef2929 } /* Error */\n.codehilite .g { color: #000000 } /* Generic */\n.codehilite .k { color: #204a87; font-weight: bold } /* Keyword */\n.codehilite .l { color: #000000 } /* Literal */\n.codehilite .n { color: #000000 } /* Name */\n.codehilite .o { color: #ce5c00; font-weight: bold } /* Operator */\n.codehilite .x { color: #000000 } /* Other */\n.codehilite .p { color: #000000; font-weight: bold } /* Punctuation */\n.codehilite .cm { color: #8f5902; font-style: italic } /* Comment.Multiline */\n.codehilite .cp { color: #8f5902; font-style: italic } /* Comment.Preproc */\n.codehilite .c1 { color: #8f5902; font-style: italic } /* Comment.Single */\n.codehilite .cs { color: #8f5902; font-style: italic } /* Comment.Special */\n.codehilite .gd { color: #a40000 } /* Generic.Deleted */\n.codehilite .ge { color: #000000; font-style: italic } /* Generic.Emph */\n.codehilite .gr { color: #ef2929 } /* Generic.Error */\n.codehilite .gh { color: #000080; font-weight: bold } /* Generic.Heading */\n.codehilite .gi { color: #00A000 } /* Generic.Inserted */\n.codehilite .go { color: #000000; font-style: italic } /* Generic.Output */\n.codehilite .gp { color: #8f5902 } /* Generic.Prompt */\n.codehilite .gs { color: #000000; font-weight: bold } /* Generic.Strong */\n.codehilite .gu { color: #800080; font-weight: bold } /* Generic.Subheading */\n.codehilite .gt { color: #a40000; font-weight: bold } /* Generic.Traceback */\n.codehilite .kc { color: #204a87; font-weight: bold } /* Keyword.Constant */\n.codehilite .kd { color: #204a87; font-weight: bold } /* Keyword.Declaration */\n.codehilite .kn { color: #204a87; font-weight: bold } /* Keyword.Namespace */\n.codehilite .kp { color: #204a87; font-weight: bold } /* Keyword.Pseudo */\n.codehilite .kr { color: #204a87; font-weight: bold } /* Keyword.Reserved */\n.codehilite .kt { color: #204a87; font-weight: bold } /* Keyword.Type */\n.codehilite .ld { color: #000000 } /* Literal.Date */\n.codehilite .m { color: #0000cf; font-weight: bold } /* Literal.Number */\n.codehilite .s { color: #4e9a06 } /* Literal.String */\n.codehilite .na { color: #c4a000 } /* Name.Attribute */\n.codehilite .nb { color: #204a87 } /* Name.Builtin */\n.codehilite .nc { color: #000000 } /* Name.Class */\n.codehilite .no { color: #000000 } /* Name.Constant */\n.codehilite .nd { color: #5c35cc; font-weight: bold } /* Name.Decorator */\n.codehilite .ni { color: #ce5c00 } /* Name.Entity */\n.codehilite .ne { color: #cc0000; font-weight: bold } /* Name.Exception */\n.codehilite .nf { color: #000000 } /* Name.Function */\n.codehilite .nl { color: #f57900 } /* Name.Label */\n.codehilite .nn { color: #000000 } /* Name.Namespace */\n.codehilite .nx { color: #000000 } /* Name.Other */\n.codehilite .py { color: #000000 } /* Name.Property */\n.codehilite .nt { color: #204a87; font-weight: bold } /* Name.Tag */\n.codehilite .nv { color: #000000 } /* Name.Variable */\n.codehilite .ow { color: #204a87; font-weight: bold } /* Operator.Word */\n.codehilite .w { color: #f8f8f8; text-decoration: underline } /* Text.Whitespace */\n.codehilite .mf { color: #0000cf; font-weight: bold } /* Literal.Number.Float */\n.codehilite .mh { color: #0000cf; font-weight: bold } /* Literal.Number.Hex */\n.codehilite .mi { color: #0000cf; font-weight: bold } /* Literal.Number.Integer */\n.codehilite .mo { color: #0000cf; font-weight: bold } /* Literal.Number.Oct */\n.codehilite .sb { color: #4e9a06 } /* Literal.String.Backtick */\n.codehilite .sc { color: #4e9a06 } /* Literal.String.Char */\n.codehilite .sd { color: #8f5902; font-style: italic } /* Literal.String.Doc */\n.codehilite .s2 { color: #4e9a06 } /* Literal.String.Double */\n.codehilite .se { color: #4e9a06 } /* Literal.String.Escape */\n.codehilite .sh { color: #4e9a06 } /* Literal.String.Heredoc */\n.codehilite .si { color: #4e9a06 } /* Literal.String.Interpol */\n.codehilite .sx { color: #4e9a06 } /* Literal.String.Other */\n.codehilite .sr { color: #4e9a06 } /* Literal.String.Regex */\n.codehilite .s1 { color: #4e9a06 } /* Literal.String.Single */\n.codehilite .ss { color: #4e9a06 } /* Literal.String.Symbol */\n.codehilite .bp { color: #3465a4 } /* Name.Builtin.Pseudo */\n.codehilite .vc { color: #000000 } /* Name.Variable.Class */\n.codehilite .vg { color: #000000 } /* Name.Variable.Global */\n.codehilite .vi { color: #000000 } /* Name.Variable.Instance */\n.codehilite .il { color: #0000cf; font-weight: bold } /* Literal.Number.Integer.Long */\n"
  },
  {
    "path": "assets/scss/pygments/trac.css",
    "content": ".codehilite .hll { background-color: #ffffcc }\n.codehilite .c { color: #999988; font-style: italic } /* Comment */\n.codehilite .err { color: #a61717; background-color: #e3d2d2 } /* Error */\n.codehilite .k { font-weight: bold } /* Keyword */\n.codehilite .o { font-weight: bold } /* Operator */\n.codehilite .cm { color: #999988; font-style: italic } /* Comment.Multiline */\n.codehilite .cp { color: #999999; font-weight: bold } /* Comment.Preproc */\n.codehilite .c1 { color: #999988; font-style: italic } /* Comment.Single */\n.codehilite .cs { color: #999999; font-weight: bold; font-style: italic } /* Comment.Special */\n.codehilite .gd { color: #000000; background-color: #ffdddd } /* Generic.Deleted */\n.codehilite .ge { font-style: italic } /* Generic.Emph */\n.codehilite .gr { color: #aa0000 } /* Generic.Error */\n.codehilite .gh { color: #999999 } /* Generic.Heading */\n.codehilite .gi { color: #000000; background-color: #ddffdd } /* Generic.Inserted */\n.codehilite .go { color: #888888 } /* Generic.Output */\n.codehilite .gp { color: #555555 } /* Generic.Prompt */\n.codehilite .gs { font-weight: bold } /* Generic.Strong */\n.codehilite .gu { color: #aaaaaa } /* Generic.Subheading */\n.codehilite .gt { color: #aa0000 } /* Generic.Traceback */\n.codehilite .kc { font-weight: bold } /* Keyword.Constant */\n.codehilite .kd { font-weight: bold } /* Keyword.Declaration */\n.codehilite .kn { font-weight: bold } /* Keyword.Namespace */\n.codehilite .kp { font-weight: bold } /* Keyword.Pseudo */\n.codehilite .kr { font-weight: bold } /* Keyword.Reserved */\n.codehilite .kt { color: #445588; font-weight: bold } /* Keyword.Type */\n.codehilite .m { color: #009999 } /* Literal.Number */\n.codehilite .s { color: #bb8844 } /* Literal.String */\n.codehilite .na { color: #008080 } /* Name.Attribute */\n.codehilite .nb { color: #999999 } /* Name.Builtin */\n.codehilite .nc { color: #445588; font-weight: bold } /* Name.Class */\n.codehilite .no { color: #008080 } /* Name.Constant */\n.codehilite .ni { color: #800080 } /* Name.Entity */\n.codehilite .ne { color: #990000; font-weight: bold } /* Name.Exception */\n.codehilite .nf { color: #990000; font-weight: bold } /* Name.Function */\n.codehilite .nn { color: #555555 } /* Name.Namespace */\n.codehilite .nt { color: #000080 } /* Name.Tag */\n.codehilite .nv { color: #008080 } /* Name.Variable */\n.codehilite .ow { font-weight: bold } /* Operator.Word */\n.codehilite .w { color: #bbbbbb } /* Text.Whitespace */\n.codehilite .mf { color: #009999 } /* Literal.Number.Float */\n.codehilite .mh { color: #009999 } /* Literal.Number.Hex */\n.codehilite .mi { color: #009999 } /* Literal.Number.Integer */\n.codehilite .mo { color: #009999 } /* Literal.Number.Oct */\n.codehilite .sb { color: #bb8844 } /* Literal.String.Backtick */\n.codehilite .sc { color: #bb8844 } /* Literal.String.Char */\n.codehilite .sd { color: #bb8844 } /* Literal.String.Doc */\n.codehilite .s2 { color: #bb8844 } /* Literal.String.Double */\n.codehilite .se { color: #bb8844 } /* Literal.String.Escape */\n.codehilite .sh { color: #bb8844 } /* Literal.String.Heredoc */\n.codehilite .si { color: #bb8844 } /* Literal.String.Interpol */\n.codehilite .sx { color: #bb8844 } /* Literal.String.Other */\n.codehilite .sr { color: #808000 } /* Literal.String.Regex */\n.codehilite .s1 { color: #bb8844 } /* Literal.String.Single */\n.codehilite .ss { color: #bb8844 } /* Literal.String.Symbol */\n.codehilite .bp { color: #999999 } /* Name.Builtin.Pseudo */\n.codehilite .vc { color: #008080 } /* Name.Variable.Class */\n.codehilite .vg { color: #008080 } /* Name.Variable.Global */\n.codehilite .vi { color: #008080 } /* Name.Variable.Instance */\n.codehilite .il { color: #009999 } /* Literal.Number.Integer.Long */\n"
  },
  {
    "path": "assets/scss/pygments/vim.css",
    "content": ".codehilite .hll { background-color: #222222 }\n.codehilite .c { color: #000080 } /* Comment */\n.codehilite .err { color: #cccccc; border: 1px solid #FF0000 } /* Error */\n.codehilite .g { color: #cccccc } /* Generic */\n.codehilite .k { color: #cdcd00 } /* Keyword */\n.codehilite .l { color: #cccccc } /* Literal */\n.codehilite .n { color: #cccccc } /* Name */\n.codehilite .o { color: #3399cc } /* Operator */\n.codehilite .x { color: #cccccc } /* Other */\n.codehilite .p { color: #cccccc } /* Punctuation */\n.codehilite .cm { color: #000080 } /* Comment.Multiline */\n.codehilite .cp { color: #000080 } /* Comment.Preproc */\n.codehilite .c1 { color: #000080 } /* Comment.Single */\n.codehilite .cs { color: #cd0000; font-weight: bold } /* Comment.Special */\n.codehilite .gd { color: #cd0000 } /* Generic.Deleted */\n.codehilite .ge { color: #cccccc; font-style: italic } /* Generic.Emph */\n.codehilite .gr { color: #FF0000 } /* Generic.Error */\n.codehilite .gh { color: #000080; font-weight: bold } /* Generic.Heading */\n.codehilite .gi { color: #00cd00 } /* Generic.Inserted */\n.codehilite .go { color: #808080 } /* Generic.Output */\n.codehilite .gp { color: #000080; font-weight: bold } /* Generic.Prompt */\n.codehilite .gs { color: #cccccc; font-weight: bold } /* Generic.Strong */\n.codehilite .gu { color: #800080; font-weight: bold } /* Generic.Subheading */\n.codehilite .gt { color: #0040D0 } /* Generic.Traceback */\n.codehilite .kc { color: #cdcd00 } /* Keyword.Constant */\n.codehilite .kd { color: #00cd00 } /* Keyword.Declaration */\n.codehilite .kn { color: #cd00cd } /* Keyword.Namespace */\n.codehilite .kp { color: #cdcd00 } /* Keyword.Pseudo */\n.codehilite .kr { color: #cdcd00 } /* Keyword.Reserved */\n.codehilite .kt { color: #00cd00 } /* Keyword.Type */\n.codehilite .ld { color: #cccccc } /* Literal.Date */\n.codehilite .m { color: #cd00cd } /* Literal.Number */\n.codehilite .s { color: #cd0000 } /* Literal.String */\n.codehilite .na { color: #cccccc } /* Name.Attribute */\n.codehilite .nb { color: #cd00cd } /* Name.Builtin */\n.codehilite .nc { color: #00cdcd } /* Name.Class */\n.codehilite .no { color: #cccccc } /* Name.Constant */\n.codehilite .nd { color: #cccccc } /* Name.Decorator */\n.codehilite .ni { color: #cccccc } /* Name.Entity */\n.codehilite .ne { color: #666699; font-weight: bold } /* Name.Exception */\n.codehilite .nf { color: #cccccc } /* Name.Function */\n.codehilite .nl { color: #cccccc } /* Name.Label */\n.codehilite .nn { color: #cccccc } /* Name.Namespace */\n.codehilite .nx { color: #cccccc } /* Name.Other */\n.codehilite .py { color: #cccccc } /* Name.Property */\n.codehilite .nt { color: #cccccc } /* Name.Tag */\n.codehilite .nv { color: #00cdcd } /* Name.Variable */\n.codehilite .ow { color: #cdcd00 } /* Operator.Word */\n.codehilite .w { color: #cccccc } /* Text.Whitespace */\n.codehilite .mf { color: #cd00cd } /* Literal.Number.Float */\n.codehilite .mh { color: #cd00cd } /* Literal.Number.Hex */\n.codehilite .mi { color: #cd00cd } /* Literal.Number.Integer */\n.codehilite .mo { color: #cd00cd } /* Literal.Number.Oct */\n.codehilite .sb { color: #cd0000 } /* Literal.String.Backtick */\n.codehilite .sc { color: #cd0000 } /* Literal.String.Char */\n.codehilite .sd { color: #cd0000 } /* Literal.String.Doc */\n.codehilite .s2 { color: #cd0000 } /* Literal.String.Double */\n.codehilite .se { color: #cd0000 } /* Literal.String.Escape */\n.codehilite .sh { color: #cd0000 } /* Literal.String.Heredoc */\n.codehilite .si { color: #cd0000 } /* Literal.String.Interpol */\n.codehilite .sx { color: #cd0000 } /* Literal.String.Other */\n.codehilite .sr { color: #cd0000 } /* Literal.String.Regex */\n.codehilite .s1 { color: #cd0000 } /* Literal.String.Single */\n.codehilite .ss { color: #cd0000 } /* Literal.String.Symbol */\n.codehilite .bp { color: #cd00cd } /* Name.Builtin.Pseudo */\n.codehilite .vc { color: #00cdcd } /* Name.Variable.Class */\n.codehilite .vg { color: #00cdcd } /* Name.Variable.Global */\n.codehilite .vi { color: #00cdcd } /* Name.Variable.Instance */\n.codehilite .il { color: #cd00cd } /* Literal.Number.Integer.Long */\n"
  },
  {
    "path": "assets/scss/pygments/vs.css",
    "content": ".codehilite .hll { background-color: #ffffcc }\n.codehilite .c { color: #008000 } /* Comment */\n.codehilite .err { border: 1px solid #FF0000 } /* Error */\n.codehilite .k { color: #0000ff } /* Keyword */\n.codehilite .cm { color: #008000 } /* Comment.Multiline */\n.codehilite .cp { color: #0000ff } /* Comment.Preproc */\n.codehilite .c1 { color: #008000 } /* Comment.Single */\n.codehilite .cs { color: #008000 } /* Comment.Special */\n.codehilite .ge { font-style: italic } /* Generic.Emph */\n.codehilite .gh { font-weight: bold } /* Generic.Heading */\n.codehilite .gp { font-weight: bold } /* Generic.Prompt */\n.codehilite .gs { font-weight: bold } /* Generic.Strong */\n.codehilite .gu { font-weight: bold } /* Generic.Subheading */\n.codehilite .kc { color: #0000ff } /* Keyword.Constant */\n.codehilite .kd { color: #0000ff } /* Keyword.Declaration */\n.codehilite .kn { color: #0000ff } /* Keyword.Namespace */\n.codehilite .kp { color: #0000ff } /* Keyword.Pseudo */\n.codehilite .kr { color: #0000ff } /* Keyword.Reserved */\n.codehilite .kt { color: #2b91af } /* Keyword.Type */\n.codehilite .s { color: #a31515 } /* Literal.String */\n.codehilite .nc { color: #2b91af } /* Name.Class */\n.codehilite .ow { color: #0000ff } /* Operator.Word */\n.codehilite .sb { color: #a31515 } /* Literal.String.Backtick */\n.codehilite .sc { color: #a31515 } /* Literal.String.Char */\n.codehilite .sd { color: #a31515 } /* Literal.String.Doc */\n.codehilite .s2 { color: #a31515 } /* Literal.String.Double */\n.codehilite .se { color: #a31515 } /* Literal.String.Escape */\n.codehilite .sh { color: #a31515 } /* Literal.String.Heredoc */\n.codehilite .si { color: #a31515 } /* Literal.String.Interpol */\n.codehilite .sx { color: #a31515 } /* Literal.String.Other */\n.codehilite .sr { color: #a31515 } /* Literal.String.Regex */\n.codehilite .s1 { color: #a31515 } /* Literal.String.Single */\n.codehilite .ss { color: #a31515 } /* Literal.String.Symbol */\n"
  },
  {
    "path": "assets/scss/pygments/zenburn.css",
    "content": "\n.codehilite code, .codehilite pre{color:#fdce93;background-color:#3f3f3f}\n.codehilite .hll{background-color:#222}\n.codehilite .c{color:#7f9f7f}\n.codehilite .err{color:#e37170;background-color:#3d3535}\n.codehilite .g{color:#7f9f7f}\n.codehilite .k{color:#f0dfaf}\n.codehilite .l{color:#ccc}\n.codehilite .n{color:#dcdccc}\n.codehilite .o{color:#f0efd0}\n.codehilite .x{color:#ccc}\n.codehilite .p{color:#41706f}\n.codehilite .cm{color:#7f9f7f}\n.codehilite .cp{color:#7f9f7f}\n.codehilite .c1{color:#7f9f7f}\n.codehilite .cs{color:#cd0000;font-weight:bold}\n.codehilite .gd{color:#cd0000}\n.codehilite .ge{color:#ccc;font-style:italic}\n.codehilite .gr{color:red}\n.codehilite .gh{color:#dcdccc;font-weight:bold}\n.codehilite .gi{color:#00cd00}\n.codehilite .go{color:gray}\n.codehilite .gp{color:#dcdccc;font-weight:bold}\n.codehilite .gs{color:#ccc;font-weight:bold}\n.codehilite .gu{color:purple;font-weight:bold}\n.codehilite .gt{color:#0040D0}\n.codehilite .kc{color:#dca3a3}\n.codehilite .kd{color:#ffff86}\n.codehilite .kn{color:#dfaf8f;font-weight:bold}\n.codehilite .kp{color:#cdcf99}\n.codehilite .kr{color:#cdcd00}\n.codehilite .kt{color:#00cd00}\n.codehilite .ld{color:#cc9393}\n.codehilite .m{color:#8cd0d3}\n.codehilite .s{color:#cc9393}\n.codehilite .na{color:#9ac39f}\n.codehilite .nb{color:#efef8f}\n.codehilite .nc{color:#efef8f}\n.codehilite .no{color:#ccc}\n.codehilite .nd{color:#ccc}\n.codehilite .ni{color:#c28182}\n.codehilite .ne{color:#c3bf9f;font-weight:bold}\n.codehilite .nf{color:#efef8f}\n.codehilite .nl{color:#ccc}\n.codehilite .nn{color:#8fbede}\n.codehilite .nx{color:#ccc}\n.codehilite .py{color:#ccc}\n.codehilite .nt{color:#9ac39f}\n.codehilite .nv{color:#dcdccc}\n.codehilite .ow{color:#f0efd0}\n.codehilite .w{color:#ccc}\n.codehilite .mf{color:#8cd0d3}\n.codehilite .mh{color:#8cd0d3}\n.codehilite .mi{color:#8cd0d3}\n.codehilite .mo{color:#8cd0d3}\n.codehilite .sb{color:#cc9393}\n.codehilite .sc{color:#cc9393}\n.codehilite .sd{color:#cc9393}\n.codehilite .s2{color:#cc9393}\n.codehilite .se{color:#cc9393}\n.codehilite .sh{color:#cc9393}\n.codehilite .si{color:#cc9393}\n.codehilite .sx{color:#cc9393}\n.codehilite .sr{color:#cc9393}\n.codehilite .s1{color:#cc9393}\n.codehilite .ss{color:#cc9393}\n.codehilite .bp{color:#efef8f}\n.codehilite .vc{color:#efef8f}\n.codehilite .vg{color:#dcdccc}\n.codehilite .vi{color:#ffffc7}\n.codehilite .il{color:#8cd0d3}\n"
  },
  {
    "path": "assets/scss/styles.scss",
    "content": "//\n// Ionic v2\n//\n// SCSS styles for Ionicframework.com.\n// Some parts of the site still use styles in ./scss rather than this ./_scss\n// These former pages are depreciated and being phased out for the styles here.\n//\n//\n\n@import 'theme';\n@import 'vars';\n@import 'fonts';\n\n// Reset and dependencies\n@import 'bootstrap-sass/assets/stylesheets/bootstrap/normalize';\n@import 'bootstrap-sass/assets/stylesheets/bootstrap/print';\n@import 'bootstrap-sass/assets/stylesheets/bootstrap/glyphicons';\n\n// Core CSS\n@import 'bootstrap-sass/assets/stylesheets/bootstrap/scaffolding';\n@import 'bootstrap-sass/assets/stylesheets/bootstrap/type';\n@import 'bootstrap-sass/assets/stylesheets/bootstrap/code';\n@import 'bootstrap-sass/assets/stylesheets/bootstrap/grid';\n@import 'bootstrap-sass/assets/stylesheets/bootstrap/tables';\n@import 'bootstrap-sass/assets/stylesheets/bootstrap/forms';\n@import 'bootstrap-sass/assets/stylesheets/bootstrap/buttons';\n\n// Components\n@import 'bootstrap-sass/assets/stylesheets/bootstrap/component-animations';\n@import 'bootstrap-sass/assets/stylesheets/bootstrap/dropdowns';\n@import 'bootstrap-sass/assets/stylesheets/bootstrap/button-groups';\n@import 'bootstrap-sass/assets/stylesheets/bootstrap/input-groups';\n@import 'bootstrap-sass/assets/stylesheets/bootstrap/navs';\n@import 'bootstrap-sass/assets/stylesheets/bootstrap/navbar';\n// @import 'bootstrap/breadcrumbs';\n// @import 'bootstrap/pagination';\n// @import 'bootstrap/pager';\n// @import 'bootstrap/labels';\n@import 'bootstrap-sass/assets/stylesheets/bootstrap/badges';\n// @import 'bootstrap/jumbotron';\n// @import 'bootstrap/thumbnails';\n// @import 'bootstrap/alerts';\n// @import 'bootstrap/progress-bars';\n// @import 'bootstrap/media';\n// @import 'bootstrap/list-group';\n// @import 'bootstrap/panels';\n// @import 'bootstrap/responsive-embed';\n// @import 'bootstrap/wells';\n// @import 'bootstrap/close';\n\n// Components w/ JavaScript\n@import 'bootstrap-sass/assets/stylesheets/bootstrap/modals';\n@import 'bootstrap-sass/assets/stylesheets/bootstrap/tooltip';\n// @import 'bootstrap/popovers';\n// @import 'bootstrap/carousel';\n\n// Utility classes\n@import 'bootstrap-sass/assets/stylesheets/bootstrap/utilities';\n@import 'bootstrap-sass/assets/stylesheets/bootstrap/responsive-utilities';\n\n@import 'pygments/ionic';\n@import 'hljs';\n@import 'typography';\n\n// ionic-site utilities\n@import 'animations';\n@import 'mixins';\n\n@import 'components/banner';\n@import 'components/bar';\n@import 'components/bar-chart';\n@import 'components/checkmark-list';\n@import 'components/form';\n@import 'components/header';\n@import 'components/hubspot_form';\n@import 'components/sub_header';\n@import 'components/hero';\n@import 'components/cta';\n@import 'components/pre_footer';\n@import 'components/pre-header';\n@import 'components/footer';\n@import 'components/utils';\n@import 'components/buttons';\n@import 'components/draggable';\n@import 'components/jquery_UI';\n@import 'components/alert';\n@import 'components/side_nav';\n@import 'components/tables';\n@import 'components/toc';\n@import 'components/docs_content';\n@import 'components/pro_docs_content';\n@import 'components/promos/index';\n@import 'components/mobile-nav';\n@import 'components/responsive_docs';\n@import 'components/modal';\n@import 'components/site-search';\n@import 'components/snap_bar';\n@import 'components/social_share_sidebar';\n@import 'components/sticky-bar';\n@import 'components/tabs';\n@import 'components/tag';\n@import 'components/testimonial-slides';\n@import 'components/tooltip';\n@import 'components/tippy';\n\n@import 'general';\n@import 'pages/404';\n// @import 'pages/about';\n// @import 'pages/articles/pwa-architects-guide';\n@import 'pages/articles/why-hybrid';\n// @import 'pages/contact';\n@import 'pages/contributors';\n@import 'pages/demo';\n// @import 'pages/developers';\n// @import 'pages/enterprise/index';\n// @import 'pages/enterprise/identity-vault';\n// @import 'pages/enterprise/support';\n// @import 'pages/enterprise/training';\n@import 'pages/getting-started';\n@import 'pages/start';\n@import 'pages/go/pwa-architects-guide';\n@import 'pages/go/why-hybrid';\n// @import 'pages/home';\n// @import 'pages/jobs';\n// @import 'pages/press/index';\n@import 'pages/press/release';\n// @import 'pages/pricing/index';\n// @import 'pages/pricing/table';\n// @import 'pages/pricing/trial';\n@import 'pages/pro/contact';\n@import 'pages/pro/deploy';\n@import 'pages/pro/general';\n// @import 'pages/pro/index';\n@import 'pages/pro/package';\n@import 'pages/pro/teams';\n@import 'pages/pwa/index';\n// @import 'pages/pwa/toolkit';\n// @import 'pages/resources/index';\n@import 'pages/sales';\n@import 'pages/startups';\n// @import 'pages/support';\n// @import 'pages/survey/surveys';\n// @import 'pages/team';\n// @import 'pages/trusted-partners';\n// @import 'pages/values';\n@import 'pages/what-is-ionic';\n@import 'pages/coming-soon';\n\n@import 'ionicons-v3/ionicons';\n"
  },
  {
    "path": "assets/scss/utilities/u-enterprise.scss",
    "content": ".d\\:flx {\r\n  display:flex;\r\n}\r\n.d\\:blk {\r\n  display:block;\r\n}\r\n.d\\:i-flx {\r\n  display:inline-flex;\r\n}\r\n.d\\:flx\\:w {\r\n  display:flex;\r\n  flex-wrap:wrap;\r\n}\r\n.d\\:flx\\:c {\r\n  display: flex;\r\n  flex-direction:column;\r\n}\r\n.ai\\:c {\r\n  align-items:center;\r\n}\r\n.ai\\:s {\r\n  align-items:flex-start;\r\n}\r\n.fg {\r\n  flex-grow: 1;\r\n}\r\n\r\n.jc\\:c {\r\n  justify-content: center !important;\r\n}\r\n.jc\\:sb {\r\n  justify-content: space-between\r\n}\r\n.jc\\:se {\r\n  justify-content: space-evenly;\r\n}\r\n\r\n.ctr\\:x {\r\n  margin-left: auto;\r\n  margin-right: auto;\r\n}\r\n.ctr\\:txt {\r\n  text-align: center;\r\n}\r\n\r\n.strip {\r\n  display: flex;\r\n}\r\n\r\n.strip\\:w {\r\n  display: flex;\r\n  flex-wrap: wrap;\r\n}\r\n\r\n.strip\\:w > * {\r\n  flex-grow: 1;\r\n}\r\n\r\n.strip > * {\r\n  flex-grow: 1;\r\n}\r\n\r\n// --------------------- STACK --------------------------\r\n@mixin stack($element: '&', $mY: null){\r\n  #{$element}[class~='stack'] {    \r\n    display: flex;\r\n    flex-direction: column;\r\n  }\r\n\r\n  #{$element}[class~='stack'] > * {\r\n    margin-top: 0;\r\n    margin-bottom: 0;\r\n  } \r\n\r\n  #{$element}.stack > * + * {\r\n    margin-top: #{$mY};\r\n  }\r\n\r\n  #{$element}.stack\\:rec * + * {\r\n    margin-top: #{$mY};\r\n  }  \r\n}\r\n\r\n// ------------------------ BOX -----------------------------\r\n@mixin box($element:'&', $pY:null, $pX:null, $back:null, $color:null,\r\n           $fB: null, $mTop:null, $mBot:null, $mLeft:null, $mRight:null, $fG: 9999,\r\n           $w: null, $h: null, $mxW: null, $mnW: null, $mxH:null, $mnH:null, $bR: null) {\r\n  #{$element}.box {\r\n    box-sizing: border-box;\r\n    padding-left: #{$pX};\r\n    padding-right: #{$pX};\r\n    padding-top: #{$pY};\r\n    padding-bottom: #{$pY};\r\n    margin-left: #{$mLeft};\r\n    margin-right: #{$mRight};\r\n    margin-top: #{$mTop};\r\n    margin-bottom: #{$mBot};\r\n    background: #{$back};\r\n    color: #{$color};\r\n    flex-basis: #{$fB};   \r\n    flex-grow: #{$fG};\r\n    width: #{$w};\r\n    height: #{$h};\r\n    max-width: #{$mxW};\r\n    min-width: #{$mnW};\r\n    max-height: #{$mxH};\r\n    min-height: #{$mnH};\r\n    border-radius: #{$bR};\r\n  }\r\n}\r\n\r\n@mixin spacer($el: '&', $mxW: null, $mnW: null, $mnH: null, $mxH: null, $fB: null, $fG: 1) {\r\n  #{$el} .spacer {\r\n    max-width: $mxW;\r\n    min-width: $mnW;\r\n    max-height: $mxH;\r\n    min-height: $mnH;\r\n    @if $fB {\r\n      flex-basis: $fB;\r\n    } @else {\r\n      flex-basis: 0px;\r\n    }    \r\n    flex-grow: $fG;\r\n  }\r\n}\r\n// ---------------------- CLUSTER ---------------------------------\r\n@mixin cluster($el: '&', $sX: 0, $sY: 0) {\r\n  #{$el}.cluster {\r\n    display: flex;\r\n    flex-wrap: wrap;\r\n    justify-content: flex-start;\r\n    align-items: center;\r\n    margin-left: calc(#{$sX} / 2 * -1);\r\n    margin-right: calc(#{$sX} / 2 * -1);\r\n    margin-top: calc(#{$sY} / 2 * -1);\r\n    margin-bottom: calc(#{$sY} / 2 * -1);\r\n  }\r\n\r\n  #{$el}.cluster > * {\r\n    margin-left: calc(#{$sX} / 2);\r\n    margin-right: calc(#{$sX} / 2);\r\n    margin-top: calc(#{$sY} / 2);\r\n    margin-bottom: calc(#{$sY} / 2);\r\n  }\r\n}\r\n// ----------------------- SWITCHER -----------------------------\r\n@mixin switcher($element:\"&\", $count:null, $threshold:null, $gap:null){\r\n  #{$element}.switcher > * {\r\n    display: flex;\r\n    flex-wrap: wrap;\r\n    margin: calc((#{$gap} / 2) * -1);\r\n  }\r\n  \r\n  #{$element}.switcher > * > * {\r\n    flex-grow: 1;\r\n    flex-basis: calc((#{$threshold} - (100% - #{$gap})) * 999);\r\n    margin: calc(#{$gap} / 2);\r\n  }\r\n  \r\n  #{$element}.switcher > * > :nth-last-child(n+#{$count + 1}),\r\n  #{$element}.switcher > * > :nth-last-child(n+#{$count + 1}) ~ * {\r\n    flex-basis: 100%;\r\n  }\r\n}"
  },
  {
    "path": "assets/scss/utilities/u-getting-started.scss",
    "content": "@mixin box($el:'&', $back:null, $color:null, $fb: null, $mt:null, $mb:null, $ml:null,\n           $mr:null, $fg: null, $w: null, $h: null, $mxw: null, $mnw: null, $mxh:null, $mnh:null, $pos: null,\n           $t:null, $r:null, $b:null, $l:null, $z:null, $bord:null, $bt:null, $br:null, $bb:null, $bl:null,\n           $pt:null, $pb:null, $pl:null, $pr:null, $d:null, $gtc:null, $gg:null, $jc:null, $js:null, $ai:null, $as:null, $p: null,\n           $order:null, $fd:null, $fw:null, $bs:null, $o:null, $rg:null, $cg:null, $trans:null, $of:null) {\n  #{$el}.u-box {\n    display:#{$d};\n    padding: #{$p};\n    margin-left: #{$ml};\n    margin-right: #{$mr};\n    margin-top: #{$mt};\n    margin-bottom: #{$mb};\n    background: #{$back};\n    color: #{$color};\n    flex-basis: #{$fb};   \n    flex-grow: #{$fg};\n    width: #{$w};\n    height: #{$h};\n    max-width: #{$mxw};\n    min-width: #{$mnw};\n    max-height: #{$mxh};\n    min-height: #{$mnh};\n    border-radius: #{$br};\n    position: #{$pos};\n    top: #{$t};\n    right: #{$r};\n    bottom: #{$b};\n    left: #{$l};\n    z-index: #{$z};\n    border: #{$bord};\n    padding-top: #{$pt};\n    padding-right: #{$pr};\n    padding-bottom: #{$pb};\n    padding-left: #{$pl};\n    grid-template-columns: #{$gtc};\n    grid-gap: #{$gg};\n    column-gap: #{$cg};\n    row-gap: #{$rg};\n    justify-content:#{$jc};\n    justify-self:#{$js};\n    align-items:#{$ai};\n    align-self:#{$as};\n    order: #{$order};\n    flex-direction: #{$fd};\n    flex-wrap: #{$fw};\n    box-shadow: #{$bs};\n    opacity: #{$o};\n    transition: #{$trans};\n    overflow:#{$of};\n  }\n}\n\n@mixin media($el:'&', $type:'max', $thresh:null, $back:null, $color:null, $fb: null, $mt:null, $mb:null, $ml:null,\n$mr:null, $fg: null, $w: null, $h: null, $mxw: null, $mnw: null, $mxh:null, $mnh:null, $pos: null,\n$t:null, $r:null, $b:null, $l:null, $z:null, $bord:null, $bt:null, $br:null, $bb:null, $bl:null,\n$pt:null, $pb:null, $pl:null, $pr:null, $d:null, $gtc:null, $gg:null, $jc:null, $js:null, $ai:null, $as:null, $p: null,\n$order:null, $fd:null, $fw:null, $bs:null, $o:null, $rg:null, $cg:null) {\n  @media screen and (#{$type}-width: $thresh) {\n    #{$el}.u-media {\n      display:#{$d};\n      padding: #{$p};\n      margin-left: #{$ml};\n      margin-right: #{$mr};\n      margin-top: #{$mt};\n      margin-bottom: #{$mb};\n      background: #{$back};\n      color: #{$color};\n      flex-basis: #{$fb};   \n      flex-grow: #{$fg};\n      width: #{$w};\n      height: #{$h};\n      max-width: #{$mxw};\n      min-width: #{$mnw};\n      max-height: #{$mxh};\n      min-height: #{$mnh};\n      border-radius: #{$br};\n      position: #{$pos};\n      top: #{$t};\n      right: #{$r};\n      bottom: #{$b};\n      left: #{$l};\n      z-index: #{$z};\n      border: #{$bord};\n      padding-top: #{$pt};\n      padding-right: #{$pr};\n      padding-bottom: #{$pb};\n      padding-left: #{$pl};\n      grid-template-columns: #{$gtc};\n      grid-gap: #{$gg};\n      column-gap: #{$cg};\n      row-gap: #{$rg};\n      justify-content:#{$jc};\n      justify-self:#{$js};\n      align-items:#{$ai};\n      align-self:#{$as};\n      order: #{$order};\n      flex-direction: #{$fd};\n      flex-wrap: #{$fw};\n      box-shadow: #{$bs};\n      opacity: #{$o};\n    }\n  }\n}\n\n\n@mixin font($el:'&', $ff: null, $fw: null, $fs: null, $lh: null, $ls: null, $tt: null, $ws: null, $color:null) {\n  #{$el}.u-font {\n    font-family: #{$ff};\n    font-weight: #{$fw};\n    font-size: #{$fs};\n    line-height: #{$lh};\n    letter-spacing: #{$ls};\n    text-transform: #{$tt};\n    white-space: #{$ws};\n    color: #{$color};\n  }  \n}\n@mixin spacer($el:'& ', $mnW:null, $mnH:null, $fB:null, $fG:null, $mxW: null, $mxH:null, $w:null, $h:null, $d:null) {\n  #{$el}.u-spacer {\n    display: #{$d};\n    min-width: #{$mnW};\n    min-height: #{$mnH};\n    flex-basis: #{$fB};\n    flex-grow: #{$fG};\n    max-width: #{$mxW};\n    max-height: #{$mxH};\n    width: #{$w};\n    height: #{$h};\n\n  }\n}"
  },
  {
    "path": "assets/scss/utilities/u-ioniconf.scss",
    "content": ".u-flex {\n  display: flex;\n}\n.u-flex-c {\n  display:flex;\n  flex-direction:column;\n}\n.u-grow {\n  flex-grow: 1;\n}\n.u-fill {\n  height: 100%;\n  width: 100%;\n}\n.u-wrap {\n  flex-wrap:wrap;\n}\n.u-align-items-c {\n  align-items: center;\n}\n.u-align-items-s {\n  align-items: start;\n}\n.u-align-self-c {\n  align-self:center;\n}\n.u-center-text {\n  text-align: center;\n}\n.u-marg-x-auto {\n  margin-left: auto;\n  margin-right: auto;\n}\n.u-inline {\n  display:inline;\n}\n.u-w100 {\n  width: 100%;\n}\n.u-h100 {\n  height: 100%;\n}\n.u-ml-auto {\n  margin-left: auto;\n}\n.u-just-cont-c {\n  justify-content: center;\n}\n.u-just-cont-sa {\n  justify-content: space-around;\n}\n.u-just-cont-se {\n  justify-content: space-evenly;\n}\n.u-just-cont-sb {\n  justify-content: space-between;\n}\n\n@mixin box($element:'&', $pY:null, $pX:null, $back:null, $color:null, $fB: null, $mTop:null, $mBot:null, $mLeft:null,\n           $mRight:null, $fG: null, $w: null, $h: null, $mxW: null, $mnW: null, $mxH:null, $mnH:null, $br: null, $pos: null,\n           $t:null, $r:null, $b:null, $l:null, $z:null, $bord:null, $bTop:null, $bRight:null, $bBot:null, $bLeft:null,\n           $pTop:null, $pBot:null, $pLeft:null, $pRight:null, $d:null, $gtc:null, $gg:null, $jc:null, $js:null, $ai:null, $as:null,\n           $p: null, $o:null, $order:null, $bf:null, $over:null) {\n  #{$element}.u-box {\n    display:#{$d};\n    padding: #{$p};\n    padding-left: #{$pX};\n    padding-right: #{$pX};\n    padding-top: #{$pY};\n    padding-bottom: #{$pY};\n    margin-left: #{$mLeft};\n    margin-right: #{$mRight};\n    margin-top: #{$mTop};\n    margin-bottom: #{$mBot};\n    background: #{$back};\n    color: #{$color};\n    flex-basis: #{$fB};   \n    flex-grow: #{$fG};\n    width: #{$w};\n    height: #{$h};\n    max-width: #{$mxW};\n    min-width: #{$mnW};\n    max-height: #{$mxH};\n    min-height: #{$mnH};\n    border-radius: #{$br};\n    position: #{$pos};\n    top: #{$t};\n    right: #{$r};\n    bottom: #{$b};\n    left: #{$l};\n    z-index: #{$z};\n    border: #{$bord};\n    padding-top: #{$pTop};\n    padding-right: #{$pRight};\n    padding-bottom: #{$pBot};\n    padding-left: #{$pLeft};\n    grid-template-columns: #{$gtc};\n    grid-gap: #{$gg};\n    justify-content:#{$jc};\n    justify-self:#{$js};\n    align-items:#{$ai};\n    align-self:#{$as};\n    order: #{$order};\n    opacity:#{$o};\n    backdrop-filter:#{bf};\n    overflow:#{$over};\n  }\n}\n\n@mixin font($element:'&', $ff: null, $fw: null, $fs: null, $lh: null, $ls: null, $tt: null, $ws: null, $color:null, $o:null) {\n  #{$element}.u-font {\n    font-family: #{$ff};\n    font-weight: #{$fw};\n    font-size: #{$fs};\n    line-height: #{$lh};\n    letter-spacing: #{$ls};\n    text-transform: #{$tt};\n    white-space: #{$ws};\n    color: #{$color};\n    opacity: #{$o};\n  }  \n}\n@mixin spacer($el:'& ', $mnW:null, $mnH:null, $fB:null, $fG:null, $mxW: null, $mxH:null, $w:null, $h:null, $d:null) {\n  #{$el}.u-spacer {\n    display: #{$d};\n    min-width: #{$mnW};\n    min-height: #{$mnH};\n    flex-basis: #{$fB};\n    flex-grow: #{$fG};\n    max-width: #{$mxW};\n    max-height: #{$mxH};\n    width: #{$w};\n    height: #{$h};\n\n  }\n}"
  },
  {
    "path": "assets/scss/utilities/u-mixins.scss",
    "content": "@mixin box($back:null, $color:null, $fb: null, $mis:null, $mie:null, $mbs:null, $mbe:null, $c:null,\n           $fg: null, $w: null, $h: null, $mxw: null, $mnw: null, $mxh:null, $mnh:null, $pos: null, $va:null,\n           $t:null, $r:null, $b:null, $l:null, $z:null, $bord:null, $bt:null, $br:null, $bb:null, $bl:null, $bi:null,\n           $pbs:null, $pbe:null, $pis:null, $pie:null, $pi:null, $pb:null, $d:null, $gtc:null, $gg:null, $jc:null, $js:null, $ai:null, $as:null, $p: null,\n           $order:null, $fd:null, $fw:null, $bs:null, $o:null, $rg:null, $cg:null, $trans:null, $tf:null, $of:null, $ta:null,\n           $v:null, $curs:null, $contain:null, $f:null, $a:null, $afm:null) {\n  display:#{$d};\n  @if $c {\n    content: \"#{$c}\";\n  }  \n  padding: #{$p};\n  margin-inline-start: #{$mis};\n  margin-inline-end: #{$mie};\n  margin-block-start: #{$mbs};\n  margin-block-end: #{$mbe};\n  background: #{$back};\n  color: #{$color};\n  flex-basis: #{$fb};   \n  flex-grow: #{$fg};\n  width: #{$w};\n  height: #{$h};\n  max-width: #{$mxw};\n  min-width: #{$mnw};\n  max-height: #{$mxh};\n  min-height: #{$mnh};\n  border-radius: #{$br};\n  border-image: #{$bi};\n  position: #{$pos};\n  top: #{$t};\n  right: #{$r};\n  bottom: #{$b};\n  left: #{$l};\n  z-index: #{$z};\n  border: #{$bord};\n  padding-inline-start: #{$pis};\n  padding-inline-end: #{$pie};\n  padding-block-start: #{$pbs};\n  padding-block-end: #{$pbe};\n  padding-inline: #{$pi};\n  padding-block: #{$pb};\n  grid-template-columns: #{$gtc};\n  grid-gap: #{$gg};\n  column-gap: #{$cg};\n  row-gap: #{$rg};\n  justify-content:#{$jc};\n  justify-self:#{$js};\n  align-items:#{$ai};\n  align-self:#{$as};\n  order: #{$order};\n  flex-direction: #{$fd};\n  flex-wrap: #{$fw};\n  box-shadow: #{$bs};\n  opacity: #{$o};\n  transition: #{$trans};\n  overflow:#{$of};\n  transform:#{$tf};\n  text-align:#{$ta};\n  vertical-align: #{$va};\n  visibility: #{$v};\n  cursor: #{$curs};\n  contain: #{$contain};\n  fill: #{$f};\n  animation:#{$a};\n  animation-fill-mode: #{$afm};\n}\n\n@mixin media($type:'max-width', $val:null, $back:null, $color:null, $fb: null, $mis:null, $mie:null, $mbs:null, $mbe:null,\n$fg: null, $w: null, $h: null, $mxw: null, $mnw: null, $mxh:null, $mnh:null, $pos: null,\n$t:null, $r:null, $b:null, $l:null, $z:null, $bord:null, $bt:null, $br:null, $bb:null, $bl:null,\n$pbs:null, $pbe:null, $pis:null, $pie:null, $d:null, $gtc:null, $gg:null, $jc:null, $js:null, $ai:null, $as:null, $p: null,\n$order:null, $fd:null, $fw:null, $bs:null, $o:null, $rg:null, $cg:null, $ta:null) {\n  @media screen and (#{$type}: $val) {\n    display:#{$d};\n    padding: #{$p};\n    margin-inline-start: #{$mis};\n    margin-inline-end: #{$mie};\n    margin-block-start: #{$mbs};\n    margin-block-end: #{$mbe};\n    background: #{$back};\n    color: #{$color};\n    flex-basis: #{$fb};   \n    flex-grow: #{$fg};\n    width: #{$w};\n    height: #{$h};\n    max-width: #{$mxw};\n    min-width: #{$mnw};\n    max-height: #{$mxh};\n    min-height: #{$mnh};\n    border-radius: #{$br};\n    position: #{$pos};\n    top: #{$t};\n    right: #{$r};\n    bottom: #{$b};\n    left: #{$l};\n    z-index: #{$z};\n    border: #{$bord};\n    padding-inline-start: #{$pis};\n    padding-inline-end: #{$pie};\n    padding-block-start: #{$pbs};\n    padding-block-end: #{$pbe};\n    grid-template-columns: #{$gtc};\n    grid-gap: #{$gg};\n    column-gap: #{$cg};\n    row-gap: #{$rg};\n    justify-content:#{$jc};\n    justify-self:#{$js};\n    align-items:#{$ai};\n    align-self:#{$as};\n    order: #{$order};\n    flex-direction: #{$fd};\n    flex-wrap: #{$fw};\n    box-shadow: #{$bs};\n    opacity: #{$o};\n    text-align: #{$ta}\n  }\n}\n\n\n@mixin font($ff: null, $fw: null, $fs: null, $lh: null, $ls: null, $tt: null, $ws: null, $color:null, $o:null) {\n  font-family: #{$ff};\n  font-weight: #{$fw};\n  font-size: #{$fs};\n  line-height: #{$lh};\n  letter-spacing: #{$ls};\n  text-transform: #{$tt};\n  white-space: #{$ws};\n  color: #{$color};\n  opacity: #{$o};\n}"
  },
  {
    "path": "assets/scss/utilities/u-native.scss",
    "content": "// #region --------------- UTILITIES ------------------\r\n@mixin animationForward($name: unique-id(), $time: 1s, $curve: cubic-bezier(.47,.44,.11,.87)) {\r\n  animation: #{$name} #{$time};\r\n  animation-timing-function: $curve;\r\n  animation-fill-mode: forwards;\r\n  @keyframes #{$name} {\r\n    @content;\r\n  }\r\n}\r\n\r\n.strip {\r\n  display:flex;\r\n  flex-wrap: wrap;\r\n}\r\n\r\n.strip\\:c {\r\n  display:flex;\r\n  flex-wrap: wrap;\r\n  justify-content: space-evenly;\r\n}\r\n\r\n[class^='strip'] > * {\r\n  // flex-grow:1;\r\n  flex-shrink: 1;\r\n}\r\n\r\n.flex\\:r\\:w {\r\n  display: flex;\r\n  flex-flow: row wrap;\r\n}\r\n.flex\\:r\\:nw {\r\n  display: flex;\r\n  flex-flow: row nowrap;\r\n}\r\n\r\n.flex {\r\n  display: flex;\r\n}\r\n\r\n.flex\\:c {\r\n  display:flex;\r\n  flex-direction:column;\r\n}\r\n\r\n\r\n\r\n// --------------------- EXPAND -------------------------\r\n.expand\\:y {\r\n  display: flex;\r\n  align-items: stretch;\r\n}\r\n\r\n.expand\\:w {\r\n  width: 100%;\r\n}\r\n\r\n.expand\\:x\\:s {\r\n  display:flex;\r\n  justify-content: flex-start;\r\n}\r\n\r\n.expand\\:x\\:c {\r\n  display:flex;\r\n  justify-content: center;\r\n}\r\n\r\n.expand\\:x\\:e {\r\n  display:flex;\r\n  justify-content: flex-end;\r\n}\r\n\r\n// --------------------- STACK --------------------------\r\n@mixin stack($element, $mY){\r\n  #{$element}[class~='stack'] {    \r\n    display: flex;\r\n    flex-direction: column;\r\n  }\r\n\r\n  #{$element}[class~='stack'] > * {\r\n    margin-top: 0;\r\n    margin-bottom: 0;\r\n  } \r\n\r\n  #{$element}.stack > * + * {\r\n    --s: #{$mY};\r\n    margin-top: var(--s);\r\n  }\r\n\r\n  #{$element}.stack\\:rec * + * {\r\n    --s: #{$mY};\r\n    margin-top: var(--s);\r\n  }  \r\n}\r\n\r\n// ------------------------ BOX -----------------------------\r\n@mixin box($element:null, $pY:null, $pX:null, $back:null, $color:null,\r\n           $mW: null, $mTop:null, $mBot:null, $mLeft:null, $mRight:null) {\r\n  #{$element}.box {\r\n    padding-left: #{$pX};\r\n    padding-right: #{$pX};\r\n    padding-top: #{$pY};\r\n    padding-bottom: #{$pY};\r\n    margin-left: #{$mLeft};\r\n    margin-right: #{$mRight};\r\n    margin-top: #{$mTop};\r\n    margin-bottom: #{$mBot};\r\n    background: #{$back};\r\n    color: #{$color};\r\n    flex-basis: #{$mW};    \r\n  }\r\n}\r\n\r\n// ------------------------ CENTER ---------------------------\r\n@mixin centerX($element, $mw) {\r\n  #{$element} .center\\:x {\r\n    --mw: #{$mw};\r\n    text-align: center;\r\n    margin-left: auto;\r\n    margin-right: auto;\r\n    max-width: var(--mw);\r\n  }\r\n}\r\n\r\n.center\\:x {\r\n  margin-left: auto;\r\n  margin-right: auto;\r\n}\r\n\r\n.center\\:y {\r\n  align-self: center;\r\n}\r\n\r\n.center\\:txt {\r\n  text-align:center;\r\n}\r\n\r\n// ----------------------- SWITCHER -----------------------------\r\n@mixin switcher($element, $count, $threshold, $gap){\r\n  #{$element} .switcher > * {\r\n    display: flex;\r\n    flex-wrap: wrap;\r\n    margin: calc((#{$gap} / 2) * -1);\r\n  }\r\n  \r\n  #{$element} .switcher > * > * {\r\n    flex-grow: 1;\r\n    flex-basis: calc((#{$threshold} - (100% - #{$gap})) * 999);\r\n    margin: calc(#{$gap} / 2);\r\n  }\r\n  \r\n  #{$element} .switcher > * > :nth-last-child(n+#{$count + 1}),\r\n  #{$element} .switcher > * > :nth-last-child(n+#{$count + 1}) ~ * {\r\n    flex-basis: 100%;\r\n  }\r\n}\r\n\r\n// #endregion\r\n\r\n"
  },
  {
    "path": "assets/stencil/_vars.scss",
    "content": "// Colors\n$blue: #488aff;\n$lightblue: #b8ceff;\n$green: #2cd865;\n$yellow: #ffcb2c;\n$red: #f45454;\n\n$dark: #24282e;\n$darkgrey: #727a87;\n$grey: #a8b0be;\n$lightgrey: #e8ebf1;\n$light: #f8f9fb;\n\n//fonts\n$font-family-avenir: \"Avenir Next\", \"Helvetica Neue\", Helvetica, sans-serif;\n$font-family-inter: \"Inter\", \"Helvetica Neue\", Helvetica, sans-serif;\n$font-family-mono: \"SFMono-Regular\", \"Roboto Mono\", Consolas, \"Liberation Mono\",\n  Menlo, Courier, monospace;\n$font-family-default: $font-family-inter;\n\n// Breakpoints\n$screen-md-max: 1104px;\n$screen-sm-max: 991px;\n$screen-xs-max: 767px;\n$screen-xxs-max: 480px;\n"
  },
  {
    "path": "assets/stencil/components/additional-resources/additional-resources.scss",
    "content": "@import '../../vars';\n\n.resources {\n  padding-bottom: 120px;\n\n  @media (max-width: $screen-xs-max) {\n    padding-bottom: 60px;\n  }\n\n  .cards {\n    list-style-type: none;\n    margin: 0;\n    padding: 0;\n    display: grid;\n    grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));\n    margin-left: -24px;\n    margin-right: -24px;\n  }\n\n  hgroup {\n    display: flex;\n    justify-content: space-between;\n    align-items: baseline;\n\n    h3 {\n      font-weight: 600;\n      line-height: normal;\n      font-size: 28px;\n      letter-spacing: -0.02em;\n      color: #1A232F;\n      margin-bottom: 0;\n    }\n\n    h4 {\n      font-weight: 600;\n      font-size: 24px;\n      line-height: normal;\n      letter-spacing: -0.02em;\n      color: #1A232F;\n    }\n\n    h5 {\n      font-weight: 700;\n      line-height: 1;\n      font-size: 14px;\n      letter-spacing: 0.08em;\n      color: #3880FF;\n      text-transform: uppercase;\n    }\n\n    ion-icon {\n      transform: translateY(2px);\n    }\n  }\n\n  .cards li {\n    display: block;\n    flex: 0 0 32.75%;\n    padding: 24px;\n\n    a {\n      display: block;\n      width: 100%;\n    }\n\n    .img-wrapper {\n      overflow: hidden;\n      border-radius: 6px;\n    }\n\n    img {\n      width: 100%;\n      height: 180px;\n      object-fit: cover;\n    }\n\n    h6 {\n      line-height: 23px;\n      font-size: 12px;\n      letter-spacing: 0.12em;\n      text-transform: uppercase;\n      color: #B2BECD;\n      margin-bottom: 0;\n      margin-top: 16px;\n    }\n\n    h4 {\n      font-size: 20px;\n      margin-top: 10px;\n      color: #1A232F;\n      font-weight: 600;\n    }\n\n    p {\n      color: #5B708B;\n      line-height: 22px;\n      font-size: 14px;\n      letter-spacing: -0.02em;\n    }\n  }\n\n  @media (max-width: $screen-md-max) {\n    .cards {\n      margin-left: -12px;\n      margin-right: -12px;\n    }\n\n    .cards li {\n      padding: 12px;\n    }\n  }\n\n  @media (max-width: $screen-sm-max) {\n    .cards {\n      flex-wrap: wrap;\n    }\n    .cards li {\n      flex: 0 0 50%;\n    }\n  }\n\n  @media (max-width: $screen-xxs-max) {\n    .cards li {\n      flex: 0 0 100%;\n    }\n\n    h5 {\n      display: none;\n    }\n  }\n}\n"
  },
  {
    "path": "assets/stencil/components/additional-resources/additional-resources.tsx",
    "content": "import Prismic from 'prismic-javascript';\nimport { Component, Prop, h, Host, State } from '@stencil/core';\nimport defaultResources from './default.json';\n\n@Component({\n  tag: 'additional-resources',\n  styleUrl: 'additional-resources.scss',\n  shadow: false\n})\nexport class AdditionalResources {\n  @Prop() page: string = 'default';\n\n  @State() headline: string = 'Related Reading';\n  @State() resources: { [key: string]: any }[] = [];\n\n  apiURL = 'https://ionicframeworkcom.prismic.io/api/v2';\n  fields = ['title', 'tagline', 'hero_image', 'meta_image'];\n  categories = ['article', 'blog', 'book', 'case-study', 'course', 'podcast', 'video', 'webinar', 'whitepaper'];\n\n\n  async componentWillLoad() {\n    let linkedFields = [];\n    this.categories.forEach(category => {\n      this.fields.forEach(field => {\n        linkedFields.push(`${category}.${field}`);\n      });\n    });\n\n    try {\n      const api = await Prismic.getApi(this.apiURL);\n      const response = await api.getSingle('related_resources', {'fetchLinks' : linkedFields});\n\n      this.headline = this.page === 'default' ? \n        response.data.text.text : response.data[`${this.page}_text`].text;\n      this.headline = this.headline ?? 'Related Reading';\n\n      const resourcesTmp = this.page === 'default' ? \n        response.data.resources : response.data[`${this.page}_resources`];\n      this.resources = resourcesTmp.map(r => r.resource);\n\n      // console.log(this.headline, this.resources)\n    } catch (e) {\n      console.warn(e);\n      console.log('Using default Related Resources instead');\n      this.headline = 'Related Reading';\n      this.resources = defaultResources;\n    }\n  }\n\n  renderResource(resource) {\n    // default image in case it's not set\n    let image = resource.data.hero_image ? \n      resource.data.hero_image.url.replace(/\\?.*/,'') :\n      'https://ionicframework.com/img/resource-center/card-webinar-hybrid-vs-native.png';\n    image += '?auto=compress,format&fit=crop&';\n    return (\n      <li>\n        <a href={`/resources/${resource.type === 'case-study' ? 'case-studies' : `${resource.type}s`}/${resource.uid}`}>\n          <div class=\"img-wrapper\">\n            <img src={`${image}w=560&h=360`}\n                 srcset={`${image}w=280&h=180 1x, ${image}w=560&h=360 2x`}\n                 width=\"280\" \n                 height=\"180\" \n                 loading=\"lazy\" \n                 alt={resource.data.title}/>\n          </div>\n          <h6>{resource.type}</h6>\n          <h4>{resource.data.title}</h4>\n          <p class=\"small\">{resource.data.tagline}</p>\n        </a>\n      </li>\n    )\n  }\n\n  render() {\n    if (this.resources.length < 1) return;\n    return (\n      <Host class=\"resources\">\n        <hgroup>\n          <h3>{this.headline}</h3>\n          <h5>\n            <a href=\"/resources\">\n              See all resources \n              <ion-icon name=\"ios-arrow-forward\" role=\"img\" class=\"md hydrated\" aria-label=\"ios arrow forward\"></ion-icon>\n            </a>\n          </h5>\n        </hgroup>\n        <ul class=\"cards\">\n          {this.resources.map(resource => this.renderResource(resource))}\n        </ul>\n      </Host>\n    );\n  }\n}\n"
  },
  {
    "path": "assets/stencil/components/additional-resources/default.json",
    "content": "[\n  {\n    \"id\": \"XFtVWhQAAB8AaRsr\",\n    \"type\": \"article\",\n    \"tags\": [\n      \"hybrid\",\n      \"introduction\"\n    ],\n    \"slug\": \"what-is-hybrid-app-development\",\n    \"lang\": \"en-us\",\n    \"uid\": \"what-is-hybrid-app-development\",\n    \"data\": {\n      \"title\": \"What is Hybrid App Development?\",\n      \"tagline\": \"Hybrid apps are a blend, hence the name hybrid, of both native and web solutions. Where the core of the application is written using web technologies. In this article we dive deep into hybrid app technology.\",\n      \"hero_image\": {\n        \"dimensions\": {\n          \"width\": 1440,\n          \"height\": 720\n        },\n        \"alt\": null,\n        \"copyright\": null,\n        \"url\": \"https://images.prismic.io/ionicframeworkcom/2467bff206b39cd3bfa7fd8b8b0b91988d70485f_hybrid-app-development.png?auto=compress,format\",\n        \"1x\": {\n          \"dimensions\": {\n            \"width\": 720,\n            \"height\": 360\n          },\n          \"alt\": null,\n          \"copyright\": null,\n          \"url\": \"https://images.prismic.io/ionicframeworkcom/879463f76f322c72c9944264eaefa0e772d415a2_hybrid-app-development.png?auto=compress,format\"\n        }\n      }\n    },\n    \"link_type\": \"Document\",\n    \"isBroken\": false\n  },\n  {\n    \"id\": \"XtbAQxAAACMARbZ9\",\n    \"type\": \"video\",\n    \"tags\": [\n      \"react\",\n      \"capacitor\"\n    ],\n    \"slug\": \"learn-to-build-mobile-apps-with-ionic-framework-reactjs-and-capacitor\",\n    \"lang\": \"en-us\",\n    \"uid\": \"build-mobile-apps-with-ionic-framework-reactjs-and-capacitor\",\n    \"data\": {\n      \"title\": \"Learn to Build Mobile Apps With Ionic Framework, ReactJS and Capacitor\",\n      \"tagline\": \"We start with the famous two tab application, walking through the structure of the application and how to set up the routes for the tabs.\"\n    },\n    \"link_type\": \"Document\",\n    \"isBroken\": false\n  },\n  {\n    \"id\": \"XmEq-hEAACIAfdkR\",\n    \"type\": \"article\",\n    \"tags\": [\n      \"community\",\n      \"ionic\"\n    ],\n    \"slug\": \"why-developers-love-ionic\",\n    \"lang\": \"en-us\",\n    \"uid\": \"why-developers-love-ionic\",\n    \"data\": {\n      \"title\": \"Why Developers Love Ionic\",\n      \"tagline\": \"Ionic powers a significant portion of the Apple App Store and Google Play Store, driven entirely by the love that developers have for  building apps with our platform.\",\n      \"hero_image\": {\n        \"dimensions\": {\n          \"width\": 1440,\n          \"height\": 800\n        },\n        \"alt\": null,\n        \"copyright\": null,\n        \"url\": \"https://images.prismic.io/ionicframeworkcom/79ff69bb-774b-48d8-b30a-b9ac533121e1_why-devs-love-ionic-article.png?auto=compress,format&rect=0,0,1440,800&w=1440&h=800\",\n        \"1x\": {\n          \"dimensions\": {\n            \"width\": 720,\n            \"height\": 400\n          },\n          \"alt\": null,\n          \"copyright\": null,\n          \"url\": \"https://images.prismic.io/ionicframeworkcom/79ff69bb-774b-48d8-b30a-b9ac533121e1_why-devs-love-ionic-article.png?auto=compress,format&rect=0,0,1440,800&w=720&h=400\"\n        }\n      },\n      \"meta_image\": {\n        \"dimensions\": {\n          \"width\": 1200,\n          \"height\": 630\n        },\n        \"alt\": null,\n        \"copyright\": null,\n        \"url\": \"https://images.prismic.io/ionicframeworkcom/79ff69bb-774b-48d8-b30a-b9ac533121e1_why-devs-love-ionic-article.png?auto=compress,format&rect=0,22,1440,756&w=1200&h=630\"\n      }\n    },\n    \"link_type\": \"Document\",\n    \"isBroken\": false\n  }\n]"
  },
  {
    "path": "assets/stencil/components/angular-components/angular-components.scss",
    "content": "@import \"../../vars\";\n// @import '../../../../node_modules/prismjs/themes/prism-tomorrow';\n@import \"../../prism-ionic\";\n\n:host {\n  display: block;\n\n  * {\n    box-sizing: border-box;\n  }\n\n  .grid {\n    height: 100%;\n    display: grid;\n    grid-template-columns: 1fr;\n    grid-template-rows: 50px 1fr;\n  }\n\n  border-radius: 10px;\n  margin-right: -24px;\n  margin-left: -24px;\n\n  @media (min-width: 1200px) {\n    margin-right: -64px;\n    margin-left: -64px;\n  }\n\n  @media (max-width: $screen-sm-max) {\n    grid-template-columns: minmax(200px, 1fr) 290px;\n    margin-right: -8px;\n    margin-left: -8px;\n  }\n\n  .code-header {\n    background: #0b1521;\n    border-radius: 10px 0 0 0;\n    font-size: 12px;\n    font-weight: 600;\n    line-height: 13px;\n    letter-spacing: 0.1em;\n    text-transform: uppercase;\n    display: flex;\n    justify-content: space-between;\n\n    ul {\n      display: flex;\n      flex-direction: row;\n      padding: 0;\n      margin: 0;\n    }\n\n    li {\n      color: #7a8ea7;\n      border: 1px solid transparent;\n      list-style: none;\n      padding: 20px;\n      cursor: pointer;\n      user-select: none;\n      z-index: 1;\n      position: relative;\n      transition: 0.2s color, 0.2s background-color;\n\n      &::after {\n        position: absolute;\n        height: 1px;\n        content: \"\";\n        bottom: -2px;\n        left: 0;\n        right: 0;\n        background: transparent;\n      }\n\n      &.active {\n        background: #1c2b3e;\n        border-color: #283a50;\n        border-bottom-color: #1c2b3e;\n        color: #ffffff;\n\n        &::after {\n          background: #1c2b3e;\n        }\n      }\n\n      &:first-child {\n        border-radius: 10px 0 0 0;\n      }\n\n      &:hover {\n        color: #ffffff;\n      }\n\n      @media (max-width: $screen-xs-max) {\n        padding: 20px 10px;\n      }\n    }\n\n    a {\n      background: rgba(#7cabff, 0.3);\n      color: #7cabff;\n      border-radius: 16px;\n      padding: 8px;\n      align-self: center;\n      margin-right: 20px;\n      transition: 0.2s background-color;\n\n      &:hover,\n      &:active,\n      &:focus {\n        text-decoration: none;\n        background: rgba(#7cabff, 0.5);\n      }\n\n      @media (max-width: $screen-xs-max) {\n        display: none;\n      }\n    }\n  }\n\n  .preview-header {\n    background: #f9fafc;\n    border: 1px solid #e9edf3;\n    border-bottom: none;\n    border-radius: 10px 10px 0px 0px;\n    display: flex;\n    justify-content: center;\n    align-items: center;\n\n    ion-segment {\n      display: flex;\n      justify-content: center;\n      width: 142px;\n      background: #e9edf3;\n    }\n\n    ion-segment-button {\n      flex: 0 1;\n    }\n  }\n\n  .tab-content,\n  .preview-content {\n    position: relative;\n    padding: 0;\n    margin: 0;\n\n    li {\n      display: none;\n\n      &.active {\n        display: block;\n      }\n    }\n  }\n\n  .preview-content.code {\n    background: #1c2b3e;\n    display: block;\n    overflow: hidden;\n\n    li {\n      height: 100%;\n    }\n\n    pre {\n      height: 100%;\n      overflow-x: auto;\n      background: transparent;\n      padding: 0;\n      margin: 0;\n      color: white;\n      border: none;\n      font-size: 13px;\n      line-height: 23px;\n      letter-spacing: -0.01em;\n      font-weight: 500;\n      font-family: $font-family-mono;\n      padding: 24px 48px;\n\n      @media (max-width: $screen-xs-max) {\n        padding: 24px 0 48px 16px;\n      }\n\n      code {\n        white-space: pre;\n      }\n    }\n  }\n\n  .preview-content {\n    background: radial-gradient(#e8ebef 10%, #fcfdfe 10%) repeat;\n    border: 1px solid #e9edf3;\n    background-size: 10px 10px;\n    border-radius: 0 0 10px 10px;\n    display: flex;\n    justify-content: center;\n    align-items: center;\n\n    iframe {\n      background: transparent;\n    }\n  }\n\n  @media (max-width: 525px) {\n    grid-template-columns: 100%;\n\n    .code-header {\n      border-radius: 10px 10px 0 0;\n\n      li {\n        padding: 20px;\n      }\n    }\n\n    .tab-content {\n      border-radius: 0 0 10px 10px;\n    }\n  }\n}\n"
  },
  {
    "path": "assets/stencil/components/angular-components/angular-components.tsx",
    "content": "import { Component, State, h, Prop, Watch } from '@stencil/core';\n\nimport '@ionic/core';\nimport Prism from 'prismjs';\n\nexport type TabType = 'card' | 'lists' | 'actionSheet';\n\n@Component({\n  tag: 'angular-components',\n  styleUrl: 'angular-components.scss',\n  shadow: true,\n})\nexport class AngularComponents {\n  @Prop() tab: TabType = 'card';\n  @State() activeTab: TabType = 'card';\n  @State() activeView = 'preview';\n\n  @Watch('tab')\n  handleTabChange() {\n    this.activeTab = this.tab;\n  }\n\n  resizeIframe(el) {\n    setTimeout(() => {\n      el.style.height =\n        (el.contentWindow.document.documentElement.scrollHeight || 350) + 'px';\n    }, 50);\n  }\n\n  renderCode = (code: string, lang: string) => {\n    return (\n      <pre>\n        <code\n          innerHTML={Prism.highlight(code, Prism.languages[lang], lang)}\n        ></code>\n      </pre>\n    );\n  };\n\n  render() {\n    return (\n      <div class=\"grid\">\n        <header class=\"preview-header\">\n          <ion-segment\n            mode=\"ios\"\n            value={this.activeView}\n            color=\"medium\"\n            onIonChange={(e) => (this.activeView = e.detail.value)}\n          >\n            <ion-segment-button value=\"preview\">\n              <ion-label>Preview</ion-label>\n            </ion-segment-button>\n            <ion-segment-button value=\"code\">\n              <ion-label>Code</ion-label>\n            </ion-segment-button>\n          </ion-segment>\n        </header>\n\n        <ul\n          class={`preview-content${this.activeView === 'code' ? ' code' : ''}`}\n        >\n          {Object.keys(this.markup).map((key) => (\n            <li class={this.activeTab === key ? 'active' : 'innactive'}>\n              <iframe\n                srcdoc={this.ionicInjector(this.markup[key].src)}\n                frameborder=\"0\"\n                scrolling=\"no\"\n                style={{\n                  display: this.activeView === 'preview' ? 'block' : 'none',\n                }}\n                onLoad={(e) => this.resizeIframe(e.target)}\n              ></iframe>\n              {this.activeView === 'code'\n                ? this.renderCode(this.markup[key].display, this.markup[key].lang)\n                : null}\n            </li>\n          ))}\n        </ul>\n      </div>\n    );\n  }\n\n  ionicInjector(code) {\n    return `\n  <link rel=\"stylesheet\" href=\"https://cdn.jsdelivr.net/npm/@ionic/core@next/css/ionic.bundle.css\" />\n  <script type=\"module\" src=\"https://cdn.jsdelivr.net/npm/@ionic/core@next/dist/ionic/ionic.esm.js\"></script>\n  <script nomodule src=\"https://cdn.jsdelivr.net/npm/@ionic/core@next/dist/ionic/ionic.js\"></script>\n  <script>window.Ionic = {\n    config: {\n      mode: 'ios'\n    }\n  }</script>\n  ${code}`;\n  }\n\n  markup = {\n    card: {\n      lang: 'html',\n      display: `\n  <ion-card>\n    <ion-img src=\"/assets/myImg.png\"></ion-img>\n    <ion-card-header>\n      <ion-card-subtitle>Card Subtitle</ion-card-subtitle>\n      <ion-card-title>Card Title</ion-card-title>\n    </ion-card-header>\n    <ion-card-content>\n      <p>\n        Here’s a small text description for the card component.\n        Nothing more, nothing less.\n      </p>\n      <ion-item>\n        <ion-button fill=\"solid\">Action</ion-button>\n        <ion-icon name=\"heart\" slot=\"end\"></ion-icon>\n        <ion-icon name=\"share\" slot=\"end\"></ion-icon>\n      </ion-item>\n    </ion-card-content>\n  </ion-card>`,\n      src: `\n          <style>\n            html, body {\n              height: 380px;\n            }\n            ion-card {\n              border-radius: 1rem;\n            }\n            ion-card img {\n              width: 100%;\n              height: 120px;\n            }\n\n            ion-card ion-grid {\n              --ion-grid-column-padding: 0;\n\n              padding: 10px 0 0;\n            }\n\n            ion-card-content ion-col:last-child {\n              text-align: right;\n            }\n\n            ion-card ion-button[fill=\"clear\"] {\n              --padding-end: 0;\n              margin: 0;\n\n              height: 30px;\n            }\n          </style>\n          <ion-card>\n            <img src=\"/img/angular/demo-image@2x.png\" loading=\"lazy\" width=\"288\" height=\"148\"  />\n            <ion-card-header>\n              <ion-card-subtitle>Card Subtitle</ion-card-subtitle>\n              <ion-card-title>Card Title</ion-card-title>\n            </ion-card-header>\n            <ion-card-content>\n              Here's a small text description for the card content. Nothing more, nothing less.\n              <ion-grid>\n                <ion-row>\n                  <ion-col>\n                    <ion-button size=\"small\">Action</ion-button>\n                  </ion-col>\n                  <ion-col>\n                    <ion-button fill=\"clear\" color=\"medium\">\n                      <ion-icon slot=\"icon-only\" name=\"heart-outline\"></ion-icon>\n                    </ion-button>\n                    <ion-button fill=\"clear\" color=\"medium\">\n                      <ion-icon slot=\"icon-only\" name=\"share-outline\"></ion-icon>\n                    </ion-button>\n                  </ion-col>\n                </ion-row>\n              </ion-grid>\n            </ion-card-content>\n          </ion-card>`,\n    },\n    lists: {\n      lang: 'html',\n      display: `\n  <ion-list>\n    <ion-item *ngFor=\"let album of albums\">\n      <ion-thumbnail slot=\"start\">\n        <ion-img [src]=\"album.artwork\"></ion-img>\n      </ion-thumbnail>\n      <ion-label>\n        <h2>{{album.title}}</h2>\n        <p>{{album.artist}}, {{album.year}}</p>\n      </ion-label>\n    </ion-item>\n  </ion-list>\n  `,\n      src: `\n        <style>\n          html, body {\n            min-height: 300px;\n          }\n          ion-thumbnail {\n            --border-radius: 6px;\n          }\n        </style>\n        <ion-app>\n          <ion-content>\n            <ion-list>\n              <ion-item>\n                <ion-thumbnail slot=\"start\">\n                  <img src=\"https://upload.wikimedia.org/wikipedia/en/2/26/Iron_%26_Wine_-_Beast_Epic.jpg\" />\n                </ion-thumbnail>\n                <ion-label>\n                  <h2>Beast Epic</h2>\n                  <p>Iron & Wine, 2017</p>\n                </ion-label>\n              </ion-item>\n              <ion-item>\n                <ion-thumbnail slot=\"start\">\n                  <img src=\"https://media.pitchfork.com/photos/5c7425267ad40308b4a8835c/1:1/w_320/JapaneseHouse_GoodAtFalling.jpg\" />\n                </ion-thumbnail>\n                <ion-label>\n                  <h2>Good At Falling</h2>\n                  <p>The Japanese House, 2019</p>\n                </ion-label>\n              </ion-item>\n              <ion-item>\n                <ion-thumbnail slot=\"start\">\n                  <img src=\"https://upload.wikimedia.org/wikipedia/en/4/4f/Hallucinogen_%28EP%29_%28Front_Cover%29.png\" />\n                </ion-thumbnail>\n                <ion-label>\n                  <h2>Hallucinogen</h2>\n                  <p>Kelela, 2015</p>\n                </ion-label>\n              </ion-item>\n              <ion-item>\n                <ion-thumbnail slot=\"start\">\n                  <img src=\"https://upload.wikimedia.org/wikipedia/en/6/66/22%2C_A_Million_cover.jpg\" />\n                </ion-thumbnail>\n                <ion-label>\n                  <h2>22, A Million</h2>\n                  <p>Bon Iver, 2016</p>\n                </ion-label>\n              </ion-item>\n              <ion-item>\n                <ion-thumbnail slot=\"start\">\n                  <img src=\"https://upload.wikimedia.org/wikipedia/en/thumb/0/02/F%28x%29_4_Walls_CD_Cover.jpg/220px-F%28x%29_4_Walls_CD_Cover.jpg\" />\n                </ion-thumbnail>\n                <ion-label>\n                  <h2>4 Walls</h2>\n                  <p>f(x), 2015</p>\n                </ion-label>\n              </ion-item>\n            </ion-list>\n          </ion-content>\n        </ion-app>`,\n    },\n    actionSheet: {\n      lang: 'js',\n      display: `@Component({\n  selector: 'app-home',\n  template: \\`\n    <ion-button\n      (click)=\"showActionSheet()\"\n      expand=\"block\">\n       Show Action Sheet\n    </ion-button>\n  \\`,\n})\nexport class HomePage {\n constructor(\n   private actionSheetCtrl: ActionSheetController\n ) {}\n  showActionSheet() {\n    this.actionSheetCtrl\n      .create({...})\n      .then((actionSheet) => {\n        actionSheet.present();\n      });\n  }\n}`,\n      src: `\n        <ion-app>\n          <ion-content fullscreen class=\"ion-padding\">\n            <ion-button expand=\"block\">Open Action Sheet</ion-button>\n          </ion-content>\n        </ion-app>\n        <script type=\"module\">\n          import { actionSheetController } from 'https://cdn.jsdelivr.net/npm/@ionic/core@next/dist/ionic/index.esm.js';\n          window.actionSheetController = actionSheetController;\n        </script>\n        <script>\n          const button = document.querySelector('ion-button');\n          button.addEventListener('click', handleButtonClick);\n\n          async function handleButtonClick() {\n            const actionSheet = await actionSheetController.create({\n              header: 'Albums',\n              buttons: [\n                { text: 'Delete', role: 'destructive' },\n                { text: 'Share' },\n                { text: 'Play' },\n                { text: 'Favorite' },\n                { text: 'Cancel', role: 'cancel' }\n              ]\n            });\n\n            await actionSheet.present();\n          }\n        </script>\n      `,\n    },\n  };\n}\n"
  },
  {
    "path": "assets/stencil/components/app-wizard/app-wizard.scss",
    "content": "ionic-app-wizard {\n  width: 100%;\n}\n\n#app-wizard {\n  height: 100%;\n  display: grid;\n  grid-template-rows: auto 1fr;\n\n  .form-area {\n    width: 100%;\n    max-width: 400px;\n    margin: 0 auto;\n  }\n\n  hgroup {\n    text-align: center;\n    margin-bottom: 32px;\n\n    h2 {\n      font-size: 32px;\n      line-height: 22px;\n      letter-spacing: -0.03em;\n    }\n\n    p {\n      font-weight: normal;\n      font-size: 18px;\n      letter-spacing: -0.02em;\n      margin-top: 16px;\n      color: #414D5C;\n    }\n  }\n\n  button ion-icon {\n    vertical-align: middle;\n    margin-top: -1px\n  }\n\n  label {\n    font-size: 12px;\n    line-height: 15px;\n    font-weight: normal;\n    color: var(--c-carbon-200);\n    margin-bottom: 14px;\n  }\n\n  ui-floating-input {\n    margin-bottom: 25px;\n  }\n\n  .next-button-wrapper {\n    margin-top: 20px;\n  }\n\n  .app-icon-group {\n    display: grid;\n    grid-template-columns: 96px 1fr;\n    column-gap: 56px;\n    margin-bottom: 15px;\n\n    input[type=\"file\"] {\n      visibility: hidden;\n      width: 0;\n    }\n\n    .app-icon-wrapper {\n      width: 96px;\n      height: 96px;\n      min-width: 96px;\n      min-height: 96px;\n\n      .app-icon-dropping-icon {\n        display: none;\n        color: white;\n        svg {\n          fill: white;\n          stroke: white;\n        }\n      }\n\n      &.app-icon-dropping {\n        border: 2px solid var(--c-blue-800);\n        border-radius: 32px;\n        padding: 2px;\n        justify-content: center;\n        align-items: center;\n        position: relative;\n\n        .app-icon-dropping-wrapper {\n          position: absolute;\n          left: 0;\n          top: 0;\n          width: 100%;\n          height: 100%;\n          border-radius: 32px;\n          background-color: rgba(255, 255, 255, 0.4);\n          display: flex;\n          justify-content: center;\n          align-items: center;\n          z-index: 2;\n        }\n\n        .app-icon-dropping-icon {\n          display: block;\n          background-color: var(--c-blue-800);\n          border-radius: 10px;\n          display: flex;\n          justify-content: center;\n          align-items: center;\n          width: 32px;\n          height: 32px;\n          font-size: 22px;\n          color: white;\n        }\n\n        .app-icon-hover {\n          display: none;\n        }\n\n        .app-icon {\n          border-radius: 28px;\n          width: 88px;\n          height: 88px;\n          min-width: 88px;\n          min-height: 88px;\n\n          .app-icon-image {\n            width: 58px;\n            height: 58px;\n          }\n        }\n      }\n    }\n\n    .app-icon {\n      width: 96px;\n      height: 96px;\n      min-width: 96px;\n      min-height: 96px;\n      position: relative;\n      border-radius: 32px;\n      display: flex;\n      justify-content: center;\n      align-items: center;\n      font-size: 64px;\n      user-select: none;\n      margin-bottom: 12px;\n\n      .app-icon-hover {\n        display: none;\n        position: absolute;\n        width: 100%;\n        height: 100%;\n        border-radius: inherit;\n        z-index: 2;\n        top: 0;\n        left: 0;\n        background: rgba(0,0,0,0.3);\n        color: white;\n        align-items: flex-end;\n        justify-content: center;\n      }\n\n      .app-icon-hover-icons {\n        display: grid;\n        grid-template-columns: 1fr 1fr;\n        column-gap: 14px;\n        margin-bottom: 4px;\n        font-size: 26px;\n        justify-content: center;\n        align-items: center;\n        color: var(--c-grey-300);\n\n        .icon {\n          text-align: center;\n          svg {\n            stroke: var(--c-grey-300);\n          }\n        }\n\n        .icon:hover {\n          cursor: pointer;\n          svg {\n            stroke: white;\n          }\n        }\n      }\n\n      &:hover {\n        .app-icon-hover {\n          display: flex;\n        }\n      }\n\n      .app-icon-image {\n        width: 64px;\n        height: 64px;\n      }\n      .app-icon-image-uploaded {\n        background-size: 100%;\n        width: 96px;\n        height: 96px;\n        border-radius: 32px;\n      }\n    }\n\n    .app-icon-upload {\n      flex: 1;\n      display: flex;\n      overflow: hidden;\n      flex-direction: column;\n      justify-content: center;\n      padding: 16px;\n    }\n  }\n\n  .info-circle {\n    font-size: 16px;\n    vertical-align: middle;\n    margin-left: 4px;\n  }\n\n  .finish {\n    text-align: center;\n    hgroup {\n      margin: 76px 0 24px 0;\n      .icon {\n        font-size: 36px;\n        margin-bottom: 8px;\n      }\n    }\n\n    .creating-app {\n      code {\n        display: flex;\n        justify-content: center;\n        align-items: center;\n        height: 65px;\n        text-align: center;\n      }\n    }\n\n    pre {\n      text-align: left;\n      background: #0E151F;\n      border-radius: 6px;\n      border: none;\n      padding: 0px 16px;\n      color: white;\n      width: 400px;\n      margin: auto;\n\n      code {\n        border: none;\n        font-size: 16px\n      }\n    }\n\n    .info {\n      margin-top: 12px;\n      margin-bottom: 16px;\n    }\n\n    hr {\n      width: 50%;\n      margin: 50px auto 0;\n    }\n\n    .social {\n      max-width: 80%;\n      margin: auto;\n      margin-top: 16px;\n      display: flex;\n      column-gap: 16px;\n      justify-content: center;\n    }\n  }\n\n  .frameworks {\n    user-select: none;\n\n    .framework {\n      text-align: center;\n\n      &.soon {\n        opacity: 0.5;\n        cursor: not-allowed;\n      }\n    }\n\n    .framework-logo {\n      background: url('/img/start/js-framework-sprite.png') no-repeat transparent;\n      background-size: 56px;\n      margin: 15px auto;\n      width: 56px;\n      height: 56px;\n    }\n\n    .framework-angular { background-position: 0 -56px; }\n    .framework-react { background-position: 0 -168px; }\n    .framework-vue { background-position: 0 -280px; }\n\n    .selected {\n      border: 2px solid #3880FF !important;\n\n      h5 {\n        color: #4D8DFF;\n      }\n      .framework-angular { background-position: 0 0; }\n      .framework-react { background-position: 0 -112px; }\n      .framework-vue { background-position: 0 -224px; }\n    }\n\n  }\n\n  .themes {\n    display: grid;\n    grid-template-columns: repeat(auto-fit, minmax(34px, 1fr));\n    column-gap: 5px;\n    row-gap: 5px;\n    align-items: center;\n    margin-bottom: 16px;\n    user-select: none;\n    .theme {\n      width: 34px;\n      height: 34px;\n      line-height: 34px;\n      text-align: center;\n\n      border-radius: 100%;\n\n      user-select: none;\n\n      opacity: 0.6;\n\n      cursor: pointer;\n\n      &.selected {\n        opacity: 1;\n\n        svg {\n          vertical-align: middle;\n          margin-top: -1px;\n        }\n      }\n\n      &.pick-theme {\n        position: relative;\n        margin-top: -2px;\n        margin-left: -2px;\n        width: 38px;\n        height: 38px;\n        border: 2px solid #E9EDF3;\n        padding: 0;\n        color: #5B708B;\n        font-size: 20px;\n        text-align: center;\n        ion-icon {\n          vertical-align: middle;\n          margin-top: -2px;\n        }\n\n        .color-picker {\n          position: absolute;\n          left: 0;\n          visibility: collapse;\n          bottom: 10px;\n        }\n      }\n    }\n  }\n\n  .templates {\n    display: grid;\n    grid-template-columns: repeat(auto-fit, 120px);\n    column-gap: 10px;\n    row-gap: 10px;\n    justify-content: space-between;\n\n    .template {\n      flex-shrink: 1;\n      cursor: pointer;\n\n      &.selected {\n        .template-image {\n          border: 2px solid #3880FF !important;\n        }\n\n        h5 {\n          color: #4D8DFF;\n        }\n      }\n\n      .template-image {\n        background-size: 100%;\n        background-color: transparent;\n        margin: auto;\n        width: 120px;\n        height: 140px;\n        border-radius: 8px;\n        border: 2px solid transparent;\n        box-shadow: 0px 2px 4px rgba(0, 13, 36, 0.04), 0px 2px 8px rgba(0, 13, 36, 0.1);\n      }\n\n      .template-tabs {\n        background-image: url('/img/start/starter-template-tabs.png');\n      }\n\n      .template-sidemenu {\n        background-image: url('/img/start/starter-template-menu.png');\n      }\n\n      .template-list {\n        background-image: url('/img/start/starter-template-list.png');\n      }\n\n      &:first-child {\n        margin-left: 0;\n      }\n      &:last-child {\n        margin-right: 0;\n      }\n      h5 {\n        text-transform: uppercase;\n        font-weight: 600;\n        font-size: 9px;\n        line-height: 11px;\n        text-align: center;\n        letter-spacing: 0.1em;\n      }\n    }\n  }\n\n  .frameworks {\n    display: flex;\n    grid-template-columns: repeat(auto-fit, 120px);\n    column-gap: 10px;\n    row-gap: 10px;\n    justify-content: space-between;\n\n    .framework {\n      flex: 0;\n      min-width: 120px;\n      cursor: pointer;\n      height: 120px;\n      border-radius: 8px;\n      border: 2px solid transparent;\n      box-shadow: 0px 2px 4px rgba(0, 13, 36, 0.04), 0px 2px 8px rgba(0, 13, 36, 0.1);\n      font-size: 14px;\n\n      h5 {\n        font-size: 14px;\n        font-weight: normal;\n        letter-spacing: -0.01em;\n      }\n\n      &:first-child {\n        margin-left: 0;\n      }\n      &:last-child {\n        margin-right: 0;\n      }\n    }\n  }\n\n  @media screen and (max-width: 480px) {\n    .notice {\n      position: static;\n      border: 0;\n    }\n    .wrapper {\n      max-width: 100%;\n      margin: 0;\n      padding: 16px;\n    }\n    .form {\n      padding: 0;\n    }\n    .templates {\n      flex-wrap: wrap;\n      justify-content: flex-start;\n      .template {\n        flex-grow: 0;\n      }\n    }\n    .frameworks {\n      flex-wrap: wrap;\n      justify-content: flex-start;\n      .framework {\n        flex-grow: 0;\n      }\n    }\n\n    .finish {\n      pre {\n        width: 100%;\n        code {\n          font-size: 13px;\n        }\n      }\n\n      hgroup {\n        margin-top: 32px;\n        .icon {\n          font-size: 24px;\n        }\n        h2 {\n          font-size: 28px;\n        }\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "assets/stencil/components/app-wizard/app-wizard.tsx",
    "content": "import { Component, State, h, Listen, Element } from '@stencil/core';\n\nimport { getUser } from '../../util/auth';\nimport { identify, trackEvent } from '../../util/hubspot';\nimport { getUtmParams } from '../../util/analytics';\nimport { UserInfo } from '../../declarations';\n\nimport { Emoji } from '../emoji-picker/emoji-picker';\nimport { generateAppIconForThemeAndEmoji, generateAppIconForThemeAndImage } from '../../util/app-icon';\n\nconst TEMPLATES = [\n  { name: 'Tabs', id: 'tabs' },\n  { name: 'Menu', id: 'sidemenu' },\n  { name: 'List', id: 'list' },\n];\n\nconst FRAMEWORKS = [\n  { name: 'React', id: 'react' },\n  { name: 'Angular', id: 'angular' },\n  { name: 'Vue', id: 'vue' },\n]\n\nconst THEMES = [\n  '#3880FF', // blue\n  '#5260ff', // purple\n  '#2dd36f', // green\n  '#ffc409', // yellow\n  '#eb445a', // red\n  '#f4f5f8', // light\n  '#92949c', // medium\n  '#222428', // dark\n]\n\ndeclare var window: any;\n\nconst emojiSvg = image => `https://cdnjs.cloudflare.com/ajax/libs/twemoji/14.0.2/svg/${image}.svg`;\n\n@Component({\n  tag: 'ionic-app-wizard',\n  styleUrl: 'app-wizard.scss',\n  shadow: false\n})\nexport class AppWizard {\n  @Element() el;\n\n  STEPS = [\n    {\n      name: 'Create app',\n      id: 'basics'\n    },\n    {\n      name: 'Account',\n      id: 'profile'\n    },\n    {\n      name: 'Finish',\n      id: 'finish'\n    }\n  ]\n\n  STEP_BASICS = 0;\n  STEP_PROFILE = 1;\n  STEP_FINISH = 2;\n\n  @State() step = this.STEP_BASICS;\n\n  @State() showSignup = true;\n  @State() loginErrors = null;\n  @State() creatingApp = false;\n\n  @State() user: UserInfo;\n\n  @State() authParams: URLSearchParams;\n\n  // The current appId from the server\n  appId: string;\n\n  // Color picker ref\n  colorPickerRef: HTMLInputElement;\n\n  // Reference to the basic form for validation\n  submitButtonWrapRef: HTMLDivElement;\n\n  getRandomEmoji(): Emoji {\n    const emoji = [\n      '1f60b', // yum\n      '1f601', // grin\n      '1f60e', // shades\n      '1f61c', //\n      '1f929', // starstruck\n      '1f604', // smile\n      '1f603', // smiley\n      '1f973', // party\n    ].map(i => ({\n      image: i\n    }));\n\n    return emoji[Math.floor(Math.random() * emoji.length)];\n  }\n\n  @State() selectedEmoji: Emoji = this.getRandomEmoji();\n  @State() showEmojiPicker = false;\n  @State() emojiPickerEvent: MouseEvent = null;\n  @State() isAppIconDropping = false;\n  @State() appIconUploadError = '';\n\n  // Form state\n  @State() authenticating = false;\n  @State() theme = THEMES[0];\n  @State() appName = '';\n  @State() framework = 'react';\n  @State() template = 'tabs';\n  @State() bundleId = '';\n  @State() appUrl = '';\n  @State() appIcon: string;\n\n\n  async componentDidLoad() {\n    const params = new URLSearchParams(window.location.hash.slice(1));\n\n    this.authParams = new URLSearchParams(window.location.search);\n\n    if (params.has('state')) {\n      this.appId = params.get('state');\n    } else if (params.has('pwa')) {\n      window.location.hash = '';\n      trackEvent({id: 'Starting_PWA_Wizard'});\n    } else if (params.has('vue')) {\n      this.framework = 'vue';\n      window.location.hash = '';\n      trackEvent({id: 'Starting_Vue_Wizard'});\n    }\n\n    const stayOnFinish = params.has('finish');\n\n    if (this.appId) {\n      this.finish(stayOnFinish);\n    } else {\n      this.setStep(this.STEP_BASICS);\n    }\n\n    try {\n      // Get the user to see if they are logged in\n      this.user = await getUser();\n    } catch (e) {\n    }\n  }\n\n  @Listen('popstate', { target: 'window' })\n  handlePopState(e) {\n    if (e.state) {\n      const step = e.state.step;\n      this.step = step || 0;\n    }\n  }\n\n  setStep = (step) => {\n    this.step = step;\n    let hash = this.STEPS[this.step].id;\n    history.pushState({ step: this.step }, null, `#${hash}`);\n  }\n\n  authorize = () => {\n    const currentOrigin = window.location.origin.toLowerCase();\n    const urlBase =\n      currentOrigin.indexOf(\"staging.ionicframework.com\") > -1\n        ? \"https://staging.ionic.io\"\n        : currentOrigin.indexOf(\"ionicframework.com\") > -1\n        ? \"https://ionic.io\"\n        : \"http://localhost:5001\";\n\n    if (this.authParams.get('client_id') !== 'cli') {\n      const params = new URLSearchParams();\n      params.set(\"scope\", \"openid profile email\");\n      params.set(\"response_type\", \"id_token token\");\n      params.set(\"client_id\", \"wizard\");\n      params.set(\"redirect_uri\", window.location.origin + '/start')\n      params.set(\"state\", this.appId || '');\n      params.set(\"nonce\", Math.random().toString(36).substring(2));\n      params.set(\"source\", \"wizard-1\");\n      window.location.assign(`${urlBase}/signup?${params.toString()}`);\n    } else {\n      const path = this.user ? 'oauth/authorize' : 'signup';\n      this.authParams.set(\"state\", this.appId || '');\n      this.authParams.set(\"source\", \"cli-start-wizard\");\n      window.location.assign(`${urlBase}/${path}?${this.authParams.toString()}`);\n    }\n  };\n\n  finish = (stayOnFinish = false) => {\n    if (this.user) {\n      identify(this.user.email, this.user.sub);\n    }\n    trackEvent({\n      id: 'Start Wizard Finish'\n    });\n    if(stayOnFinish) {\n      this.setStep(this.STEPS.length - 1);\n    } else {\n      const currentOrigin = window.location.origin.toLowerCase();\n      let urlBase = currentOrigin.indexOf('staging.ionicframework.com') > -1 ?\n         'https://staging.ionicjs.com' :\n          currentOrigin.indexOf('ionicframework.com') > -1 ?\n          'https://dashboard.ionicframework.com' : 'http://localhost:8080'\n      window.location.href = `${urlBase}/create-app/${this.appId}`\n    }\n  };\n\n  basicsNext = async (e?) => {\n    e?.preventDefault();\n    e?.stopPropagation();\n\n    try {\n      this.creatingApp = true;\n\n      const created = await this.save();\n\n      if (!created) {\n        alert('Unable to create app, please ping us on Twitter and try the manual install below.');\n        this.setStep(this.STEP_BASICS);\n        return;\n      }\n\n      if (this.user && this.authParams.get('client_id') !== 'cli') {\n        this.finish();\n      } else {\n        this.authorize();\n      }\n    } catch (e) {\n      try {\n        const data = JSON.parse(e.message);\n        if (data.type === 'too-large') {\n          alert('Unable to create app, your icon image is too large. Try a smaller filesize or add it manually later');\n        } else {\n          alert('Unable to create app, please ping us on Twitter and try the manual install below.');\n        }\n      } catch(e) {\n        alert('Unable to create app, please ping us on Twitter and try the manual install below.');\n      }\n    } finally {\n      this.creatingApp = false;\n    }\n  }\n\n  save = async () => {\n    let iconImage;\n    let splash;\n    if (!this.appIcon && this.selectedEmoji) {\n      const emoji = this.selectedEmoji;\n      let emojiImage = emoji.image.replace('.png', '');\n      const emojiSplit = emojiImage.split('-');\n      let emojiImageName = emojiImage;\n      if (emojiSplit.length === 2 && emojiSplit[1] === 'fe0f') {\n        emojiImageName = emojiImage.replace('-fe0f', '');\n      }\n      const emojiImageUrl = emojiSvg(emojiImageName);\n      const renderedAppIcon = await generateAppIconForThemeAndEmoji(this.theme, emojiImageUrl, 1024, 768);\n      const renderedSplashScreen = await generateAppIconForThemeAndEmoji(this.theme, emojiImageUrl, 2732, 512);\n      iconImage = renderedAppIcon;\n      splash = renderedSplashScreen;\n    } else {\n      const renderedSplashScreen = await generateAppIconForThemeAndImage(this.theme, this.appIcon, 2732, 512);\n      iconImage = this.appIcon;\n      splash = renderedSplashScreen;\n    }\n\n    const res = await fetch('/api/v1/wizard/create', {\n      body: JSON.stringify({\n        type: this.framework,\n        'package-id': this.bundleId,\n        tid: this.getHubspotId(),\n        email: this.user?.email,\n        appId: this.appId,\n        template: this.template,\n        name: this.appName,\n        theme: this.theme,\n        appSplash: splash,\n        appIcon: iconImage,\n        utm: getUtmParams()\n      }),\n      method: 'POST',\n      headers: {\n        'Content-Type': 'application/json'\n      }\n    });\n\n    if (res.status === 413) {\n      throw new Error(JSON.stringify({ type: 'too-large' }));\n    }\n\n    if (res.status !== 201) {\n      throw new Error(JSON.stringify({ type: 'error' }));\n    }\n\n    const data = await res.json();\n    this.appId = data.appId;\n    return data;\n  }\n\n  getApp = async () => {\n    const res = await fetch(`/api/v1/wizard/app/${this.getHubspotId()}`);\n\n    return await res.json();\n  }\n\n  getHubspotId = () => {\n    return window.getCookie('hubspotutk');\n  }\n\n  handlePickEmoji = (e) => {\n    this.selectedEmoji = e.detail as Emoji;\n    this.appIcon = null;\n    this.showEmojiPicker = false;\n  }\n\n  handlePickTheme = (_e) => {\n    const colorPicker = this.el.querySelector('input[type=\"color\"]');\n\n    colorPicker && colorPicker.click();\n  }\n\n  handleInput = (fieldName) => e => {\n    this[fieldName] = e.target.value;\n  };\n\n  setAppIconFromFile = (file: File) => {\n    const reader = new FileReader();\n    reader.readAsDataURL(file);\n    reader.onload = () => {\n      const img = new Image();\n      img.src = reader.result as string;\n      img.onload = () => {\n        if (img.width < 1024 || img.height < 1024) {\n          alert('Icon size must be at least 1024x1024');\n        } else {\n          this.selectedEmoji = null;\n          this.appIcon = reader.result as string;\n        }\n      }\n    }\n    reader.onerror = () => {\n      this.appIconUploadError = 'Unable to read file';\n    }\n  }\n\n  handleAppIconChoose = (e) => {\n    if (e.target.files.length) {\n      const file = e.target.files[0];\n      if (file.size > 1024 * 800) {\n        this.appIconUploadError = 'Image must be < 800KB';\n        return;\n      }\n\n      this.setAppIconFromFile(file);\n    }\n  }\n\n  handleAppIconDragOver = (e: DragEvent) => {\n    this.isAppIconDropping = true;\n    e.dataTransfer.dropEffect = 'copy';\n    e.preventDefault();\n  }\n\n  handleAppIconDragOut = (_e) => {\n    this.isAppIconDropping = false;\n  }\n\n  handleAppIconDrop = (e: DragEvent) => {\n    e.preventDefault();\n    this.isAppIconDropping = false;\n    if (e.dataTransfer.files) {\n      const file = e.dataTransfer.files[0];\n\n      if (file.size > 1024 * 800) {\n        this.appIconUploadError = 'Image must be < 800KB';\n        return;\n      }\n\n      this.setAppIconFromFile(file);\n    }\n  }\n\n  handleRootDragOver = (e: DragEvent) => {\n    e.preventDefault();\n    return false;\n  };\n\n  handleRootDrop = (e: DragEvent) => {\n    e.preventDefault();\n    return false;\n  };\n\n  renderBasics() {\n    const { showEmojiPicker, creatingApp } = this;\n\n    let buttonText;\n    if (creatingApp) {\n      buttonText = <span><ion-spinner /></span>;\n    } else if (this.user) {\n      buttonText = <span>Create App</span>;\n    } else {\n      buttonText = <span>Continue {'->'}</span>;\n    }\n\n    return (\n      <div>\n        <hgroup>\n          <h2>Welcome to Ionic</h2>\n          <p>Let's start your first app</p>\n        </hgroup>\n        <form class=\"form Bizible-Exclude\" onSubmit={this.basicsNext}>\n          <ui-floating-input\n            label=\"App name\"\n            type=\"text\"\n            name=\"app-name\"\n            value={this.appName}\n            tabindex={1}\n            required={true}\n            onChange={this.handleInput('appName')} />\n          <div\n            class={`app-icon-group`}>\n            <div class=\"app-icon-pick\">\n              <label>\n                Pick an icon\n                <ui-tip\n                  text=\"An icon for your app. You can easily change this and add your own image later!\"\n                  position=\"top\">\n                  <InfoCircle />\n                </ui-tip>\n              </label>\n              <AppIcon\n                img={this.appIcon}\n                emoji={this.selectedEmoji}\n                theme={this.theme}\n                onChooseEmoji={(e) => { this.showEmojiPicker = true; this.emojiPickerEvent = e }}\n                onChooseFile={this.handleAppIconChoose}\n                isDropping={this.isAppIconDropping}\n                onDragOver={this.handleAppIconDragOver}\n                onDragLeave={this.handleAppIconDragOut}\n                onDrop={this.handleAppIconDrop}\n                 />\n            </div>\n            <ionic-emoji-picker\n              open={showEmojiPicker}\n              openEvent={this.emojiPickerEvent}\n              onEmojiPick={this.handlePickEmoji}\n              onClosed={() => this.showEmojiPicker = false} />\n            <div class=\"app-icon-theme\">\n              <label>Pick a theme color</label>\n              <ui-tip\n                text=\"The primary brand color for your app\"\n                position=\"top\">\n                <InfoCircle />\n              </ui-tip>\n              <ThemeSwitcher\n                value={this.theme}\n                onChange={(theme) => this.theme = theme}\n                onPick={this.handlePickTheme}\n              />\n            </div>\n          </div>\n          <div class=\"form-group\">\n            <label>\n              Pick a layout template\n              <ui-tip\n                text=\"Choose a tabs, menu, or list-style layout\"\n                position=\"top\">\n                <InfoCircle />\n              </ui-tip>\n            </label>\n            <TemplateSwitcher\n              value={this.template}\n              onChange={tmpl => this.template = tmpl} />\n          </div>\n          <div class=\"form-group\" id=\"field-appname\">\n            <label>\n              Pick a JavaScript Framework\n              <ui-tip\n                text=\"React and Vue are beginner friendly, Angular is popular for enterprise\"\n                position=\"top\">\n                <InfoCircle />\n              </ui-tip>\n            </label>\n            <FrameworkSwitcher\n              value={this.framework}\n              onChange={framework => {\n                this.framework = framework;\n              }} />\n          </div>\n          <div ref={e => this.submitButtonWrapRef = e} class=\"next-button-wrapper\">\n            <Button disabled={creatingApp}>\n              {buttonText}\n            </Button>\n          </div>\n        </form>\n      </div>\n    )\n  }\n\n  renderFinish() {\n    const instructions = `\nnpm install -g @ionic/cli cordova-res\nionic start --start-id ${this.appId}\n    `;\n\n    document.querySelector('.header__feedback').classList.add('is-visible');\n\n    return (\n      <div class=\"finish\">\n        <hgroup>\n          <span class=\"icon\">🎉</span>\n          <h2>You're all set</h2>\n          <p>\n            Run this to see your amazing new app:\n          </p>\n        </hgroup>\n        <div>\n          <pre><code>{instructions}</code></pre>\n        </div>\n        <div class=\"info\">\n          Requires <b><code>@ionic/cli</code> 6.5.0</b> or above<br />\n          Need help? See the full <a href=\"https://ionicframework.com/docs/installation/cli\">installation guide</a>\n        </div>\n        <div class=\"share\">\n          <a\n            href=\"https://twitter.com/share?ref_src=twsrc%5Etfw\"\n            class=\"twitter-share-button\"\n            data-size=\"large\"\n            data-text=\"Check out the new mobile App Wizard from @ionicframework\"\n            data-url=\"https://ionicframework.com/start\"\n            data-via=\"ionicframework\"\n            data-related=\"ionicframework,maxlynch\"\n            data-show-count=\"false\">Tweet</a>\n        </div>\n        <hr />\n        <div class=\"social\">\n          <iframe src=\"https://ghbtns.com/github-btn.html?user=ionic-team&repo=ionic&type=star&count=true\" frameborder=\"0\" scrolling=\"0\" width=\"100px\" height=\"30px\"></iframe>\n          <a class=\"twitter-follow-button\"\n            data-show-screen-name=\"false\"\n            href=\"https://twitter.com/ionicframework\">\n          Follow @IonicFramework</a>\n        </div>\n\n        <twitter-script />\n      </div>\n    )\n  }\n\n  renderStep() {\n    switch (this.step) {\n      case this.STEP_BASICS: return this.renderBasics();\n      case this.STEP_PROFILE: return null;\n      case this.STEP_FINISH: return this.renderFinish();\n    }\n  }\n\n  render() {\n    return (\n      <div id=\"app-wizard\" onDragOver={this.handleRootDragOver} onDrop={this.handleRootDrop}>\n        {this.step < 2 ? (\n          <ionic-switcher\n            items={[this.STEPS[0], this.STEPS[1]].map(s => s.name).join()}\n            index={this.step}\n            />\n          ) : null}\n\n        <div class=\"form-area\">\n          {this.renderStep()}\n        </div>\n        <div class=\"notice notice--fixed\">\n          Prefer to install manually? <br />\n          <a href=\"https://ionicframework.com/docs/intro/cli\">Follow our CLI installation guide</a>\n        </div>\n      </div>\n    );\n  }\n}\n\nconst Button = (props, children) => (\n  <button type=\"submit\" class=\"btn btn-block\" {...props}>{ children }</button>\n);\n\nconst AppIcon = ({ img, emoji, theme, onChooseEmoji, isDropping,\n                   onChooseFile, onDragOver, onDragLeave, onDrop }) => {\n  const bgColor = img ? 'transparent': theme;\n\n  let bgImage;\n  if (emoji) {\n    let emojiImage = emoji.image.replace('.png', '');\n    const imageSplit = emojiImage.split('-');\n\n    // For some reason we need to remove fe0f from images that just have it\n    // as blah-fe0f since those aren't named as such in the twemoji database\n    if (imageSplit.length == 2 && imageSplit[1] === 'fe0f') {\n      emojiImage = emojiImage.replace('-fe0f', '');\n    }\n    bgImage = `url('${emojiSvg(emojiImage)}')`;\n  } else {\n    bgImage = `url(${img})`;\n  }\n\n  return (\n    <div class={`app-icon-wrapper${isDropping ? ` app-icon-dropping` : ''}`}\n         onDragOver={onDragOver}\n         onDragLeave={onDragLeave}\n         onDrop={onDrop}>\n      <div class=\"app-icon-dropping-wrapper\">\n        <div class=\"app-icon-dropping-icon\">\n          <svg width=\"18\" height=\"18\" viewBox=\"0 0 18 18\" xmlns=\"http://www.w3.org/2000/svg\">\n            <path d=\"M9 1V17\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path d=\"M17 9H1\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n          </svg>\n        </div>\n      </div>\n      <div\n        class=\"app-icon\"\n        style={{ backgroundColor: bgColor }}>\n        <div\n          class={`app-icon-image${ img ? ' app-icon-image-uploaded' : ''}`}\n          style={{ backgroundImage: bgImage }} />\n        <div class=\"app-icon-hover\">\n          <div class=\"app-icon-hover-icons\">\n            <div class=\"icon\" onClick={onChooseEmoji} title=\"Pick emoji\">\n              <svg width=\"26\" height=\"26\" viewBox=\"0 0 26 26\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n                <path d=\"M13 25C19.6274 25 25 19.6274 25 13C25 6.37258 19.6274 1 13 1C6.37258 1 1 6.37258 1 13C1 19.6274 6.37258 25 13 25Z\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n                <path d=\"M8.19995 16.3C8.19995 16.3 9.99995 18.7 13 18.7C16 18.7 17.8 16.3 17.8 16.3\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n                <path d=\"M8.5 11.2H8.512\" stroke-width=\"3\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n                <path d=\"M17.5 11.2H17.512\" stroke-width=\"3\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n              </svg>\n            </div>\n\n            <div class=\"icon\" onClick={() => (document.querySelector('#file-app-icon') as HTMLInputElement).click()} title=\"Pick file\">\n              <svg width=\"18\" height=\"24\" viewBox=\"0 0 18 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n                <path d=\"M17 23H1\"  stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n                <path d=\"M9 1V19\"  stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n                <path d=\"M17 9L9 1L1 9\"  stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n              </svg>\n            </div>\n          </div>\n          <input type=\"file\" id=\"file-app-icon\" accept=\"image/png\" onChange={onChooseFile} />\n        </div>\n      </div>\n    </div>\n  )\n};\n\nconst ThemeSwitcher = ({ value, onChange, onPick }) => {\n  const themes = [\n    ...THEMES,\n    !THEMES.find(t => t === value) ? value : null\n  ].filter(t => !!t);\n\n  return (\n    <div class=\"themes\">\n    {themes.map(t => (\n      <div\n        key={t}\n        class={`theme ${value === t ? 'selected' : ''}`}\n        style={{ backgroundColor: t }}\n        onClick={() => onChange(t)}>\n        { value === t ? (\n          <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n            <path d=\"M11 1L4 11L1 7.25\"  stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n          </svg>\n        ) : null}\n      </div>\n    ))}\n      <div\n        class=\"theme pick-theme\"\n        onClick={() => onPick()}\n        >\n        <ion-icon name=\"md-color-filter\" />\n        <input\n          type=\"color\"\n          class=\"color-picker\"\n          value={value}\n          onInput={(e: any) => onChange(e.currentTarget.value) }\n          />\n      </div>\n    </div>\n  )\n}\n\nconst FrameworkSwitcher = ({ value, onChange }) => (\n  <div class=\"frameworks\">\n  {FRAMEWORKS.map(f => (\n    <div\n      key={f.id}\n      class={`framework ${value === f.id ? 'selected' : ''}`}\n      onClick={() => onChange(f.id)}>\n      <div class={`framework-logo framework-${f.id}`} />\n      <h5>{f.name}</h5>\n    </div>\n  ))}\n  </div>\n);\n\nconst TemplateSwitcher = ({ value, onChange }) => (\n  <div class=\"templates\">\n  {TEMPLATES.map(f => (\n    <div\n      key={f.id}\n      class={`template ${value === f.id ? 'selected' : ''}`}\n      onClick={() => onChange(f.id)}>\n      <div class={`template-image template-${f.id}`} />\n      <h5>{f.name}</h5>\n    </div>\n  ))}\n  </div>\n);\n\nconst InfoCircle = () => (\n  <ion-icon class=\"info-circle\" name=\"information-circle-outline\" />\n);\n"
  },
  {
    "path": "assets/stencil/components/auth-connect-promo/auth-connect-promo.scss",
    "content": "@use '../../vars' as var;\n\n//#region -------------------------------- ANIMATIONS ------------------------------------\n@keyframes fadeOut {\n  0% {\n    opacity: 1;\n    z-index:1;\n  }\n  100% {\n    opacity: 0;\n    z-index: -1;\n  }\n}\n@keyframes fadeInOut {\n  0% {\n    opacity: 0;\n    z-index:1;\n  }\n  17% {\n    opacity: 1;\n    z-index:1;\n  }\n  83% {\n    opacity: 1;\n    z-index: 1;\n  }\n  99% {\n    opacity: 0;\n    z-index: -1;\n  }\n}\n@keyframes bringToFront {\n  from {\n    z-index:1;\n  }\n  to {\n    z-index: 1043;\n  }\n}\n// #endregion --------------------------------------------------------------------\n\n$timing: cubic-bezier(.23,.87,.62,.96);\n\n::slotted(#player) {\n  opacity: 0;\n  border-radius: 16px;\n}\n\n:host {\n  width: var(--width);\n  height: var(--height);\n  \n  &.expanded {\n    .wrapper {\n      --scale-x: 1 !important;\n      --scale-y: 1 !important;\n      z-index: 1041;\n\n      .video {\n        opacity: 1;\n        transition: all .3s $timing; \n\n        .standin {\n          animation: fadeInOut 1.8s $timing 0s forwards;\n          position: absolute;\n          background: white;          \n        }\n      }\n      .subtitle {\n        opacity: 0;\n        transition: opacity .3s $timing 0s;\n      }\n    }\n\n    .overlay {\n      z-index: 1041;\n      .transparent-circles {\n        opacity: 0;\n        transition: all .3s $timing;\n      }\n  \n      .play-circle {\n        transition: opacity .3s $timing 1.2s;\n        z-index: 1042;\n        opacity: 0;\n      }\n\n      .blur {    \n        z-index: -1;\n        border-radius: 16px;  \n        backdrop-filter: unset;\n        animation: fadeOut .3s $timing .6s forwards;\n      } \n      &.played {\n        .transparent-circles, .play-circle {\n          transition: all .3s $timing;\n          z-index: -1;\n        }\n      }\n    }     \n\n    ::slotted(#player) {\n      z-index: 1;\n      opacity: 1;\n      transition: all .3s $timing .9s; \n      animation: bringToFront .3s $timing 1.2s forwards;\n    }          \n  }\n}\n\n.wrapper {\n  z-index: 0;\n  position: absolute;\n  top: var(--top);\n  left: var(--left);\n  // width: var(--width);\n  // height: var(--height);\n\n  transition: top .3s $timing, left .3s $timing, width .3s $timing, height .3s $timing;\n\n  .video {\n    opacity:0;\n    transition: all .3s $timing;\n    position: absolute;\n    transform: scale(var(--scale-x), var(--scale-y));\n    height: 100%;\n    width: 100%; \n\n    .standin {\n      opacity: 0;\n      animation: fadeOut .3s $timing forwards;\n      transition: all .3s $timing;\n      z-index: -1;\n      border-radius: 16px;\n      position: absolute;\n      width: 100%;\n      height: 100%;\n    }\n  }\n}\n\nsvg {\n  display: block;\n}\n\n.overlay {\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  opacity: 1;\n\n  .blur {\n    border-radius: 32px;\n    transform: scale(var(--scale-x), var(--scale-y));\n    backdrop-filter: blur(60px);\n    box-shadow: 0px 16px 32px rgba(2, 8, 20, 0.08), 0px 8px 16px rgba(2, 8, 20, 0.08);\n    transition: all .3s $timing;\n  }\n\n  // &.pop-in {\n  //   opacity: 1;\n  //   transform: scale3d(1, 1, 1);\n  //   transition: all 1s $timing;\n\n  //   .blur {\n  //     // backdrop-filter: blur(60px);\n  //     // transition: all .3s $timing 1s;\n  //   }\n\n  //   .subtitle {\n  //     opacity: 1;\n  //     transition: opacity 1s $timing .5s;\n  //   }\n  // }\n}\n\n.big-circle {\n  position: absolute;    \n}\n.small-circle {\n  position: absolute;    \n}\n.transparent-circles {\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  position: absolute;\n}\n.play-circle {\n  position: absolute;\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  cursor: pointer;\n\n  .outer-circle {\n    filter: drop-shadow(0px 8px 16px rgba(2, 8, 20, 0.08)) drop-shadow(0px 4px 8px rgba(2, 8, 20, 0.08));\n  }\n\n  .play {\n    position: absolute;\n    transform: translateX(3px);\n    transition: all .3s $timing;\n\n    path{\n      transition: all .3s $timing;        \n    } \n  }\n\n  &:hover {\n    .play {\n      transition: all .3s $timing;\n      transform: translateX(3px) scale(1.02);\n      filter: drop-shadow(0px 8px 16px rgba(2, 8, 20, 0.08)) drop-shadow(0px 4px 8px rgba(2, 8, 20, 0.08));\n\n      path{\n        transition: all .3s $timing;        \n        fill: #00e8c0;\n      } \n    }  \n  }\n}\n\n.subtitle {\n  text-transform: uppercase;\n  letter-spacing: 0.16em;\n  font-weight: bold;\n  font-size: 12px;\n  line-height: 112%;\n  font-family: var.$font-family-mono;\n  position: absolute;\n  color: #445B78;\n  opacity: 1;\n  transition: opacity .6s $timing .3s;\n\n  &.toggle {\n    opacity: 0;\n    transition: opacity .1s $timing;\n  }\n}\n\n"
  },
  {
    "path": "assets/stencil/components/auth-connect-promo/auth-connect-promo.tsx",
    "content": "import { Component, Host, h, State, Listen } from '@stencil/core';\n\n\n@Component({\n  tag: 'auth-connect-promo',\n  styleUrl: 'auth-connect-promo.scss',\n  scoped: true\n})\nexport class AuthConnectPromo {\n  private backdropEl: HTMLElement;\n  private overlayEl: HTMLElement;\n\n  private container: {\n    width: number,\n    height: number\n  }\n  private overlay = {\n    origin: {\n      width: 396,\n      height: 240\n    },\n    width: 396,\n    height: 240,\n  }\n  private aspectRatio = {\n    x: 16,\n    y: 9,\n  }\n  private gutter = 15;\n  private previousCoordinates: { left: number, top: number }\n  private scaleRatio: { x: number, y: number };\n  private fullSize: { width: number, height: number };\n  private smallScreen: boolean;\n\n\n  @State() coordinates: { left: number, top: number };\n  @State() expanded = false;\n\n  componentWillLoad() {\n    this.sequence();\n  }\n\n  sequence() {\n    this.getContainer();\n    this.checkScreenSize();\n    this.getFullSizeDimensions();\n    this.getCoordinates();\n    this.getScale();\n  }\n\n  getContainer = () => {\n    const container = document.body.querySelector('.top.container') as HTMLElement;\n    this.container = {\n      width: container.offsetWidth,\n      height: container.offsetHeight\n    }\n  }\n\n  checkScreenSize() {\n    this.smallScreen = window.innerWidth < 992;\n\n    if (this.container.width < this.overlay.origin.width) {\n      this.overlay.width = this.container.width;\n    } else {\n      this.overlay.width = this.overlay.origin.width;\n    }\n  }\n\n  getCoordinates = () => { \n    const { expanded, smallScreen, fullSize } = this;\n\n    if (expanded) {\n      this.coordinates = {\n        left: (window.innerWidth - fullSize.width) / 2 + window.scrollX,\n        top: (window.innerHeight - fullSize.height) / 2 + window.scrollY,\n      }\n      return;\n    }\n\n   \n    if (smallScreen) {\n      const { left, top, height } = document.querySelector('#dummy-element').getBoundingClientRect();\n      const leftVal = left + this.overlay.width / 2 - (this.fullSize.width / 2)\n      const topVal = top + (height / 2) - (this.fullSize.height / 2)\n\n      this.coordinates = {\n        left: leftVal + window.scrollX - this.gutter,\n        top: topVal + window.scrollY,\n      }\n      this.previousCoordinates = this.coordinates;\n      return;\n    }\n\n\n    const { left, top, width, height } = document.querySelector('.spinner').getBoundingClientRect();\n    const leftVal = left + (width / 2) - (this.fullSize.width / 2)\n    const topVal = top + (height / 2) - (this.fullSize.height / 2)\n\n    this.coordinates = {\n      left: leftVal + window.scrollX,\n      top: topVal + window.scrollY,\n    }\n    this.previousCoordinates = this.coordinates;\n  }\n\n  getScale = () => {\n    const { fullSize, overlay } = this;\n    this.scaleRatio = {\n      x: overlay.width / fullSize.width,\n      y: overlay.height / fullSize.height\n    }\n  }\n\n  handlePlay = () => {   \n    setTimeout(() => {\n      this.overlayEl.classList.add(\"played\");\n    }, 1200)     \n    document.body.classList.add(\"no-scroll\");\n    this.backdropEl.classList.add(\"modal-backdrop\");\n    this.backdropEl.classList.add(\"in\");\n   \n    this.expanded = true;\n\n    this.coordinates = {\n      left: (window.innerWidth - this.fullSize.width) / 2 + window.scrollX,\n      top: (window.innerHeight - this.fullSize.height) / 2 + window.scrollY,\n    }    \n  }\n\n  getFullSizeDimensions = () => {\n    const { aspectRatio, gutter } = this;\n    const ratio = aspectRatio.x / aspectRatio.y;\n    const ratioInverse = aspectRatio.y / aspectRatio.x;\n\n    if (window.innerWidth * aspectRatio.y  >= window.innerHeight * aspectRatio.x) {\n      const height = window.innerHeight * ratio >= this.container.width ? this.container.width * ratioInverse : window.innerHeight;\n      this.fullSize = {\n        width: (height - gutter * 2) * ratio,\n        height: height - (gutter * 2)\n      }\n    } else {\n      // let widthRounded = Math.round(this.container.width);\n      // let heightRounded = Math.round(this.container.height);\n\n      // let deviance = widthRounded / heightRounded - ratio;\n      \n      // if (deviance > .1 || deviance < -.1) {\n      //   console.log(\"got here\", deviance);\n      // }\n\n      // while(deviance > .2 || deviance < -.2) {\n      //   widthRounded - 1;\n      //   deviance = widthRounded / heightRounded - ratio;\n      // }\n      this.fullSize = {        \n        width: this.container.width,\n        height: this.container.width * ratioInverse,\n      }\n\n      \n    }\n  }\n\n  handleExit = () => {\n    this.overlayEl.classList.remove(\"played\");\n    document.body.classList.remove('no-scroll');\n    this.backdropEl.classList.remove(\"modal-backdrop\");\n    this.backdropEl.classList.remove(\"in\");\n    this.expanded = false;\n    this.coordinates = this.previousCoordinates;\n    this.getCoordinates();\n  }\n\n  @Listen('resize', { target: 'window'})\n  updateItemOffsets() {\n    requestAnimationFrame(() => {\n      this.sequence();\n    })\n  }\n\n  render() {\n    const { coordinates, fullSize, scaleRatio, expanded } = this;\n    return (\n      <Host\n      style={{\n        '--left': coordinates.left.toString().concat('px'),\n        '--top': coordinates.top.toString().concat('px'),\n        '--width': fullSize.width.toString().concat('px'),\n        '--height': fullSize.height.toString().concat('px'),\n        '--scale-x': scaleRatio.x.toString(),\n        '--scale-y': scaleRatio.y.toString()\n      }}\n      class={{ \"expanded\": expanded }}>\n        <div id=\"backdrop\" ref={e => {this.backdropEl = e}} class=\"fade\" onClick={() => this.handleExit()}></div>\n        <div\n          class=\"wrapper\"          \n        >\n          <div class=\"overlay\" ref={e => this.overlayEl = e}>\n            <div class=\"video\">\n              <div class=\"standin\"></div>\n              <slot />\n            </div>\n            <svg\n              class=\"blur\"\n              viewBox=\"0 0 396 240\"\n              width={fullSize.width} height={fullSize.height}\n              fill=\"white\" xmlns=\"http://www.w3.org/2000/svg\"\n            >\n            </svg>\n            <div class=\"transparent-circles\">\n              <svg class=\"big-circle\" width=\"288\" height=\"288\" viewBox=\"0 0 288 288\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n                <circle opacity=\"0.06\" cx=\"144\" cy=\"144\" r=\"144\" fill=\"#00CEAB\" />\n              </svg>\n              <svg class=\"small-circle\" width=\"288\" height=\"288\" viewBox=\"0 0 288 288\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n                <circle opacity=\"0.12\" cx=\"144\" cy=\"144\" r=\"96\" fill=\"#00CEAB\" />\n              </svg>\n            </div>\n            <div\n              class=\"play-circle\"\n              role=\"button\"\n              aria-label=\"play video\"\n              onClick={!expanded ? this.handlePlay : () => {}}>\n              <svg class=\"outer-circle\" width=\"120\" height=\"120\" viewBox=\"-60 -60 120 120\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n                <circle r=\"60\" fill=\"white\" />\n              </svg>\n              <svg class=\"play\" width=\"42\" height=\"48\" viewBox=\"0 0 42 48\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n                <path d=\"M5.14453 47.7187C4.35307 47.7173 3.57563 47.5098 2.88867 47.1168C1.3418 46.2402 0.380157 44.5386 0.380157 42.6914V5.30858C0.380157 3.4562 1.3418 1.75979 2.88867 0.883226C3.59199 0.479022 4.39097 0.27116 5.2021 0.281364C6.01323 0.291569 6.80672 0.519465 7.49965 0.941234L39.4491 20.0658C40.1149 20.4833 40.6638 21.0631 41.0443 21.7507C41.4248 22.4384 41.6244 23.2115 41.6244 23.9974C41.6244 24.7833 41.4248 25.5564 41.0443 26.2441C40.6638 26.9318 40.1149 27.5115 39.4491 27.9291L7.49449 47.0587C6.78537 47.4874 5.97316 47.7156 5.14453 47.7187Z\" fill=\"#00CEAB\" />\n              </svg>\n            </div>\n            <p class={{ subtitle: true, toggle: expanded}}\n            \n            style={{\n              'top': ((this.fullSize.height - this.overlay.height) / 2 + this.overlay.height + 12).toString().concat('px'),\n            }}>See how Auth Connect works</p>\n          </div>\n          \n        </div>\n        \n      </Host>\n    )\n  }\n}\n"
  },
  {
    "path": "assets/stencil/components/bar-chart/bar-chart.scss",
    "content": "@import '../../vars';\n\nbar-chart {\n  fill: currentColor;\n\n  // important necessary to override attr vals\n  path.c3-bar {\n    &:nth-child(1),\n    &:nth-child(2) {\n      fill: url(#blue-gradient) !important;\n      stroke: url(#blue-gradient) !important;\n    }\n  }\n\n  text.c3-text {\n    &:nth-child(1),\n    &:nth-child(2) {\n      fill: #3780FF !important;\n    }\n  }\n\n  &[color=\"pink\"] {\n    path.c3-bar {\n      &:nth-child(1),\n      &:nth-child(2) {\n        fill: url(#pink-gradient) !important;\n        stroke: url(#pink-gradient) !important;\n      }\n    }\n\n    text.c3-text {\n      &:nth-child(1),\n      &:nth-child(2) {\n        fill: #F37BAB !important;\n      }\n    }\n  }\n\n  &[color=\"blue\"] {\n    path.c3-bar {\n      &:nth-child(1),\n      &:nth-child(2) {\n        fill: url(#blue-gradient) !important;\n        stroke: url(#blue-gradient) !important;\n      }\n    }\n\n    text.c3-text {\n      &:nth-child(1),\n      &:nth-child(2) {\n        fill: #3780FF !important;\n      }\n    }\n  }\n\n  &[color=\"yellow\"] {\n    path.c3-bar {\n      &:nth-child(1),\n      &:nth-child(2) {\n        fill: url(#yellow-gradient) !important;\n        stroke: url(#yellow-gradient) !important;\n      }\n    }\n\n    text.c3-text {\n      &:nth-child(1),\n      &:nth-child(2) {\n        fill: #F7D443 !important;\n      }\n    }\n  }\n\n  &[color=\"green\"] {\n    path.c3-bar {\n      &:nth-child(1),\n      &:nth-child(2) {\n        fill: url(#green-gradient) !important;\n        stroke: url(#green-gradient) !important;\n      }\n    }\n\n    text.c3-text {\n      &:nth-child(1),\n      &:nth-child(2) {\n        fill: #3EED5B !important;\n      }\n    }\n  }\n}\n\n\n\n\n"
  },
  {
    "path": "assets/stencil/components/bar-chart/bar-chart.tsx",
    "content": "import { Component, Element, Prop } from '@stencil/core';\nimport c3 from 'c3';\n\n@Component({\n  tag: 'bar-chart',\n  styleUrl: 'bar-chart.scss',\n  shadow: false\n})\nexport class BarChart {\n\n  @Prop() graphData: string | object = {};\n  @Prop() color: string = 'blue';\n\n  @Element() el;\n\n  data = {};\n  defaultColor = '#73849A';\n  barChartGradients = `\n    <svg id=\"bar-chart-gradients\" width=\"0\" height=\"0\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\">\n      <defs>\n        <linearGradient id=\"pink-gradient\">\n          <stop offset=\"0%\" stop-color=\"#F9BFD7\" />\n          <stop offset=\"100%\" stop-color=\"#F37BAB\" />\n        </linearGradient>\n        <linearGradient id=\"blue-gradient\">\n          <stop offset=\"0%\" stop-color=\"#87B3FF\" />\n          <stop offset=\"100%\" stop-color=\"#3780FF\" />\n        </linearGradient>\n        <linearGradient id=\"yellow-gradient\">\n          <stop offset=\"0%\" stop-color=\"#FCEEB4\" />\n          <stop offset=\"100%\" stop-color=\"#F7D443\" />\n        </linearGradient>\n        <linearGradient id=\"green-gradient\">\n          <stop offset=\"0%\" stop-color=\"#8BF49D\" />\n          <stop offset=\"100%\" stop-color=\"#3EED5B\" />\n        </linearGradient>\n      </defs>\n    </svg>`\n\n  componentWillLoad() {\n    const gradientsExist = !!document.getElementById('bar-chart-gradients');\n    if (!gradientsExist) {\n      // add hidden SVG of gradient defs if it doesn't exist yet\n      const parser = new DOMParser();\n      const $svg = parser.parseFromString(this.barChartGradients, 'text/html');\n      document.body.appendChild($svg.body);\n    }\n\n    this.data = typeof this.graphData === 'string' ? JSON.parse(this.graphData) : this.graphData;\n\n    var data = Object.keys(this.data).map((k) => {\n      return {label: k, value: this.data[k]};\n    });\n\n    const bars = ['data1'].concat(data.map(function(bar) {\n      return bar.value;\n    }));\n    const labels = data.map(function(bar) {\n      return bar.label;\n    });\n\n    c3.generate({\n      bindto: this.el,\n      data: {\n        columns: [ bars ],\n        type: 'bar',\n        labels: {\n          show: true,\n          format: function(v) { return v + '%'; }\n        },\n        colors: {\n          data1: this.defaultColor\n        },\n      },\n      padding: {\n        left: 218,\n      },\n      size: {\n        height: 37 * labels.length\n      },\n      bar: {\n        width: {\n          ratio: 0.3 // bar height\n        }\n      },\n      axis: {\n        rotated: true,\n        x: {\n          type: 'category',\n          categories: labels,\n          tick: {\n            multiline: false,\n            outer: true,\n          },\n          height: 50,\n          width: 200\n        },\n        y: {\n          show: false\n        }\n      },\n      legend: {\n        show: false\n      },\n      tooltip: {\n        show: false\n      }\n    });\n  }\n\n  render() {\n    return;\n  }\n}\n"
  },
  {
    "path": "assets/stencil/components/ebook-switcher/bookData.json",
    "content": "{\n  \"hybrid-vs-native\": {\n    \"title\": \"Hybrid vs. Native\",\n    \"image\": {\n      \"url\": \"https://images.prismic.io/ionicframeworkcom/dc70a9c1-eb1f-4e1a-8a89-ab6db635caba_book-hybrid-vs-native%402x.png?auto=compress,format\",\n      \"alt\": \"Hybrid vs Native book cover\"\n    },\n    \"text\": {\n      \"normal\": \"Learn the differences between hybrid and native apps.\",\n      \"bold\": \"We break down all the myths and misconceptions.\"\n    },\n    \"formId\": \"8883f3dd-d97c-4719-aaef-4132038af0c1\"\n  },\n  \"evaluating-ionic-enterprise\": {\n    \"title\": \"Evaluating Ionic for Enterprise Development\",\n    \"image\": {\n      \"url\": \"https://images.prismic.io/ionicframeworkcom/f8a4747c-e37c-420d-99dd-e1ceec5b1711_book-enterprise-development%402x.png?auto=compress,format\",\n      \"alt\": \"Evaluating ionic enterprise book cover\"\n    },\n    \"text\": {\n      \"normal\": \"Get all the facts you need to make the right decision.\",\n      \"bold\": \"We wrote a guide on everything you need to know.\"\n    },\n    \"formId\": \"7419f80f-b2f7-42d7-bfd6-167f9a347017\"\n  },\n  \"architects-guide-to-pwas\": {\n    \"title\": \"The Architect's Guide to Progressive Web Apps\",\n    \"image\": {\n      \"url\": \"https://images.prismic.io/ionicframeworkcom/f2657363-ef33-4534-b248-6b3cee69489a_book-progressive-web-apps%402x.png?auto=compress,format\",\n      \"alt\": \"architects guide to pwas book cover\"\n    },\n    \"text\": {\n      \"normal\": \"See how PWAs can boost your app strategy —\",\n      \"bold\": \"and what you need to know to get started today.\"\n    },\n    \"formId\": \"504e0e0c-29f0-4234-8853-61110a01a2ef\"\n  },\n  \"cross-platform-apps-with-capacitor\": {\n    \"title\": \"Building Cross-platform apps with Capacitor\",\n    \"image\": {\n      \"url\": \"https://images.prismic.io/ionicframeworkcom/75a55ef6-8230-4c25-8eff-09337e4002ec_book-cross-platform-capacitor%402x.png?auto=compress,format\",\n      \"alt\": \"cross-platform apps with capacitor book cover\"\n    },\n    \"text\": {\n      \"normal\": \"See when and why to use Capacitor to build cross-platform apps.\",\n      \"bold\": \"We wrote a guide to help you get started.\"\n    },\n    \"formId\": \"9151dc0b-42d9-479f-b7b8-649e0e7bd1bc\"\n  },\n  \"solving-mobile-cicd-with-appflow\": {\n    \"title\": \"Solving Mobile CI/CD with Appflow\",\n    \"image\": {\n      \"url\": \"https://images.prismic.io/ionicframeworkcom/3f5d25ef-2a7b-495f-bcfb-b9066a2025af_book-appflow-cicd%402x.png?auto=compress,format\",\n      \"alt\": \"solving mobile ci/cd with appflow book cover\"\n    },\n    \"text\": {\n      \"normal\": \"Setting up a CI/CD pipeline for mobile is no simple task.\",\n      \"bold\": \"Learn how Appflow makes it easy.\"\n    },\n    \"formId\": \"635cf145-8698-40f9-9192-405ed130ad8a\"\n  }\n}"
  },
  {
    "path": "assets/stencil/components/ebook-switcher/ebook-switcher.scss",
    "content": "@import '../../vars';\n\nebook-switcher {\n  .wrapper {\n    display: flex;\n    border-radius: 32px;\n    overflow: hidden;\n    border: 1px solid #e9edf3;\n\n    background: linear-gradient(180deg, #0d2e55 0%, #001a3a 100%);\n\n    @media (max-width: $screen-xs-max) {\n      flex-direction: column-reverse;\n\n      .image-wrapper-inner {\n        top: 0;\n        margin-block-end: -18.25rem;\n      }\n    }\n\n    > * {\n      flex-basis: 50%;\n      min-width: 0;\n    }\n  }\n\n  .image-wrapper {\n\n    .dots-wrapper {\n      position: relative;\n      width: fit-content;\n\n      margin-inline-start: auto;\n      margin-inline-end: auto;\n\n      [class*=dots] {\n        position: absolute;\n      }\n\n      .dots-1 {\n        top: -16px;\n        left: -72px;\n      }\n      .dots-2 {\n        top: 160px;\n        right: -72px;\n      }\n    }\n\n    &-inner {\n      overflow: hidden;\n\n      width: fit-content;\n      position: relative;\n\n      margin-block-end: -14.25rem;\n\n      top: 2.625rem;\n\n      box-shadow: 30px 20px 40px black;\n  \n      border-radius: 2px;\n  \n      img {\n        margin: -1px;\n\n        position: relative;\n        z-index: 2;\n\n        display: block;\n      }\n    }\n  }\n\n  .heading-group {\n    padding: clamp(32px, 5vw, 84px) clamp(32px, 4.5vw, 50px)\n      clamp(32px, 5vw, 85px) clamp(32px, 4.5vw, 50px);\n\n\n    h2 {\n      font-weight: 600;\n      font-size: 24px;\n      line-height: 120%;\n      letter-spacing: -0.03em;\n      color: #cdd6df;\n\n      margin-block-end: clamp(16px, 3vw, 32px);\n\n      em {\n        font-style: normal;\n        color: #fff;\n      }\n    }\n\n    a {\n      display: inline-block;\n      background: #3880ff;\n      border-radius: 100px;\n      padding: 8.5px 12px 7.5px;\n      min-height: 32px;\n      vertical-align: middle;\n      text-decoration: none;\n      cursor: pointer;\n\n      font-weight: 600;\n      font-size: 13px;\n      line-height: 112%;\n      letter-spacing: -0.02em;\n      color: #fff;\n\n      transition: background-color 0.2s ease-out;\n\n      &:hover,\n      &:active,\n      &:focus {\n        background: #5291ff;\n      }\n\n      .arrow {\n        letter-spacing: 0;\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "assets/stencil/components/ebook-switcher/ebook-switcher.tsx",
    "content": "import { Component, Prop, h, Host } from '@stencil/core';\nimport data from './bookData.json';\n\n@Component({\n  tag: 'ebook-switcher',\n  styleUrl: 'ebook-switcher.scss',\n  shadow: false\n})\nexport class EbookSwitcher {\n\n  @Prop({ reflect: true}) id = 'hybrid-vs-native';\n\n  render() {\n    const { Modal, Dots, id } = this;\n\n    return (\n      <Host>\n        <Modal />\n        <div class=\"container\">\n          <div class=\"wrapper\">\n            <div class=\"image-wrapper\">\n              <div class=\"dots-wrapper\">\n                <Dots class=\"dots-1\" />\n                <Dots class=\"dots-2\" />\n                <div class=\"image-wrapper-inner\">\n                  <img\n                    loading=\"lazy\"\n                    width=\"312\"\n                    height=\"404\"\n                    src={data[id].image.url}\n                    alt={data[id].image.alt}\n                  />\n                </div>\n              </div>\n            </div>\n            <div class=\"heading-group\">\n              <h2>\n                {data[id].text.normal}{' '}\n                <em>{data[id].text.bold}</em>\n              </h2>\n              <a\n                data-toggle=\"modal\" data-target=\"#hubspotForm\"\n                onClick={(e) => {\n                  e.preventDefault();\n                  window.c('Button', 'Homepage eBook CTA', null, null, { trackerName: 'legacy'});\n                }}\n               >Read the free eBook <span class=\"arrow\">-&gt;</span></a\n              >\n            </div>\n          </div>\n        </div>\n      </Host>\n    );\n  }\n\n  Modal = () => {\n    const { id } = this;\n    \n    return (\n      <div\n        class=\"modal collapse fade\"\n        id=\"hubspotForm\"\n        tabindex=\"-1\"\n        role=\"dialog\"\n      >\n        <div class=\"modal-dialog\">\n          <div class=\"modal-content\">\n            <div class=\"modal-body\">\n              <svg data-toggle=\"modal\" data-target=\"#hubspotForm\" class=\"close-button\" version=\"1.1\" id=\"Capa_1\" xmlns=\"http://www.w3.org/2000/svg\" x=\"0px\" y=\"0px\" viewBox=\"0.0002498626708984375 0.014999866485595703 460.77471923828125 460.7449645996094\" style={{enableBackground:\"new 0 0 460.775 460.775\"}} xmlSpace=\"preserve\">\n                <path d=\"M285.08,230.397L456.218,59.27c6.076-6.077,6.076-15.911,0-21.986L423.511,4.565c-2.913-2.911-6.866-4.55-10.992-4.55\n                  c-4.127,0-8.08,1.639-10.993,4.55l-171.138,171.14L59.25,4.565c-2.913-2.911-6.866-4.55-10.993-4.55\n                  c-4.126,0-8.08,1.639-10.992,4.55L4.558,37.284c-6.077,6.075-6.077,15.909,0,21.986l171.138,171.128L4.575,401.505\n                  c-6.074,6.077-6.074,15.911,0,21.986l32.709,32.719c2.911,2.911,6.865,4.55,10.992,4.55c4.127,0,8.08-1.639,10.994-4.55\n                  l171.117-171.12l171.118,171.12c2.913,2.911,6.866,4.55,10.993,4.55c4.128,0,8.081-1.639,10.992-4.55l32.709-32.719\n                  c6.074-6.075,6.074-15.909,0-21.986L285.08,230.397z\"></path>\n                </svg>\n              <h2>{data[id].title}</h2>\n              <hubspot-form form-id={data[id].formId}></hubspot-form>\n            </div>\n          </div>\n        </div>\n      </div>\n    )\n  }\n\n  Dots = (props) => (\n    <svg width=\"165\" height=\"161\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" {...props}><circle cx=\"1.7\" cy=\"1.7\" r=\"1.7\" fill=\"#8AA4FF\"/><circle cx=\"1.7\" cy=\"24.1\" r=\"1.7\" fill=\"#8AA4FF\"/><circle cx=\"1.7\" cy=\"46.5\" r=\"1.7\" fill=\"#8AA4FF\"/><circle cx=\"1.7\" cy=\"68.9\" r=\"1.7\" fill=\"#8AA4FF\"/><circle cx=\"1.7\" cy=\"91.3\" r=\"1.7\" fill=\"#8AA4FF\"/><circle cx=\"1.7\" cy=\"113.7\" r=\"1.7\" fill=\"#8AA4FF\"/><circle cx=\"1.7\" cy=\"136.1\" r=\"1.7\" fill=\"#8AA4FF\"/><circle cx=\"1.7\" cy=\"158.6\" r=\"1.7\" fill=\"#8AA4FF\"/><circle cx=\"142.9\" cy=\"1.7\" r=\"1.7\" fill=\"#8AA4FF\"/><circle cx=\"142.9\" cy=\"24.1\" r=\"1.7\" fill=\"#8AA4FF\"/><circle cx=\"142.9\" cy=\"46.5\" r=\"1.7\" fill=\"#8AA4FF\"/><circle cx=\"142.9\" cy=\"68.9\" r=\"1.7\" fill=\"#8AA4FF\"/><circle cx=\"142.9\" cy=\"91.3\" r=\"1.7\" fill=\"#8AA4FF\"/><circle cx=\"142.9\" cy=\"113.7\" r=\"1.7\" fill=\"#8AA4FF\"/><circle cx=\"142.9\" cy=\"136.1\" r=\"1.7\" fill=\"#8AA4FF\"/><circle cx=\"142.9\" cy=\"158.6\" r=\"1.7\" fill=\"#8AA4FF\"/><circle cx=\"102.6\" cy=\"1.7\" r=\"1.7\" fill=\"#8AA4FF\"/><circle cx=\"102.6\" cy=\"24.1\" r=\"1.7\" fill=\"#8AA4FF\"/><circle cx=\"102.6\" cy=\"46.5\" r=\"1.7\" fill=\"#8AA4FF\"/><circle cx=\"102.6\" cy=\"68.9\" r=\"1.7\" fill=\"#8AA4FF\"/><circle cx=\"102.6\" cy=\"91.3\" r=\"1.7\" fill=\"#8AA4FF\"/><circle cx=\"102.6\" cy=\"113.7\" r=\"1.7\" fill=\"#8AA4FF\"/><circle cx=\"102.6\" cy=\"136.1\" r=\"1.7\" fill=\"#8AA4FF\"/><circle cx=\"102.6\" cy=\"158.6\" r=\"1.7\" fill=\"#8AA4FF\"/><circle cx=\"122.7\" cy=\"1.7\" r=\"1.7\" fill=\"#8AA4FF\"/><circle cx=\"122.7\" cy=\"24.1\" r=\"1.7\" fill=\"#8AA4FF\"/><circle cx=\"122.7\" cy=\"46.5\" r=\"1.7\" fill=\"#8AA4FF\"/><circle cx=\"122.7\" cy=\"68.9\" r=\"1.7\" fill=\"#8AA4FF\"/><circle cx=\"122.7\" cy=\"91.3\" r=\"1.7\" fill=\"#8AA4FF\"/><circle cx=\"122.7\" cy=\"113.7\" r=\"1.7\" fill=\"#8AA4FF\"/><circle cx=\"122.7\" cy=\"136.1\" r=\"1.7\" fill=\"#8AA4FF\"/><circle cx=\"122.7\" cy=\"158.6\" r=\"1.7\" fill=\"#8AA4FF\"/><circle cx=\"82.4\" cy=\"1.7\" r=\"1.7\" fill=\"#8AA4FF\"/><circle cx=\"82.4\" cy=\"24.1\" r=\"1.7\" fill=\"#8AA4FF\"/><circle cx=\"82.4\" cy=\"46.5\" r=\"1.7\" fill=\"#8AA4FF\"/><circle cx=\"82.4\" cy=\"68.9\" r=\"1.7\" fill=\"#8AA4FF\"/><circle cx=\"82.4\" cy=\"91.3\" r=\"1.7\" fill=\"#8AA4FF\"/><circle cx=\"82.4\" cy=\"113.7\" r=\"1.7\" fill=\"#8AA4FF\"/><circle cx=\"82.4\" cy=\"136.1\" r=\"1.7\" fill=\"#8AA4FF\"/><circle cx=\"82.4\" cy=\"158.6\" r=\"1.7\" fill=\"#8AA4FF\"/><circle cx=\"62.2\" cy=\"1.7\" r=\"1.7\" fill=\"#8AA4FF\"/><circle cx=\"62.2\" cy=\"24.1\" r=\"1.7\" fill=\"#8AA4FF\"/><circle cx=\"62.2\" cy=\"46.5\" r=\"1.7\" fill=\"#8AA4FF\"/><circle cx=\"62.2\" cy=\"68.9\" r=\"1.7\" fill=\"#8AA4FF\"/><circle cx=\"62.2\" cy=\"91.3\" r=\"1.7\" fill=\"#8AA4FF\"/><circle cx=\"62.2\" cy=\"113.7\" r=\"1.7\" fill=\"#8AA4FF\"/><circle cx=\"62.2\" cy=\"136.1\" r=\"1.7\" fill=\"#8AA4FF\"/><circle cx=\"62.2\" cy=\"158.6\" r=\"1.7\" fill=\"#8AA4FF\"/><circle cx=\"42\" cy=\"1.7\" r=\"1.7\" fill=\"#8AA4FF\"/><circle cx=\"42\" cy=\"24.1\" r=\"1.7\" fill=\"#8AA4FF\"/><circle cx=\"42\" cy=\"46.5\" r=\"1.7\" fill=\"#8AA4FF\"/><circle cx=\"42\" cy=\"68.9\" r=\"1.7\" fill=\"#8AA4FF\"/><circle cx=\"42\" cy=\"91.3\" r=\"1.7\" fill=\"#8AA4FF\"/><circle cx=\"42\" cy=\"113.7\" r=\"1.7\" fill=\"#8AA4FF\"/><circle cx=\"42\" cy=\"136.1\" r=\"1.7\" fill=\"#8AA4FF\"/><circle cx=\"42\" cy=\"158.6\" r=\"1.7\" fill=\"#8AA4FF\"/><circle cx=\"21.9\" cy=\"1.7\" r=\"1.7\" fill=\"#8AA4FF\"/><circle cx=\"21.9\" cy=\"24.1\" r=\"1.7\" fill=\"#8AA4FF\"/><circle cx=\"21.9\" cy=\"46.5\" r=\"1.7\" fill=\"#8AA4FF\"/><circle cx=\"21.9\" cy=\"68.9\" r=\"1.7\" fill=\"#8AA4FF\"/><circle cx=\"21.9\" cy=\"91.3\" r=\"1.7\" fill=\"#8AA4FF\"/><circle cx=\"21.9\" cy=\"113.7\" r=\"1.7\" fill=\"#8AA4FF\"/><circle cx=\"21.9\" cy=\"136.1\" r=\"1.7\" fill=\"#8AA4FF\"/><circle cx=\"21.9\" cy=\"158.6\" r=\"1.7\" fill=\"#8AA4FF\"/><circle cx=\"163.1\" cy=\"1.7\" r=\"1.7\" fill=\"#8AA4FF\"/><circle cx=\"163.1\" cy=\"24.1\" r=\"1.7\" fill=\"#8AA4FF\"/><circle cx=\"163.1\" cy=\"46.5\" r=\"1.7\" fill=\"#8AA4FF\"/><circle cx=\"163.1\" cy=\"68.9\" r=\"1.7\" fill=\"#8AA4FF\"/><circle cx=\"163.1\" cy=\"91.3\" r=\"1.7\" fill=\"#8AA4FF\"/><circle cx=\"163.1\" cy=\"113.7\" r=\"1.7\" fill=\"#8AA4FF\"/><circle cx=\"163.1\" cy=\"136.1\" r=\"1.7\" fill=\"#8AA4FF\"/><circle cx=\"163.1\" cy=\"158.6\" r=\"1.7\" fill=\"#8AA4FF\"/></svg>\n  )\n}"
  },
  {
    "path": "assets/stencil/components/emoji-picker/emoji-picker.scss",
    "content": ":host {\n  --category-color: var(--c-grey-700);\n  --category-selected-color: var(--c-purple-400);\n  --padding-left-right: 12px;\n  --search-border-color: var(--c-grey-600);\n  --search-color: var(--c-grey-900);\n\n  display: none;\n  position: fixed;\n  width: 320px;\n  height: 420px;\n  z-index: 1000;\n  box-shadow: 0px 0px 3px rgba(0, 0, 0, 0.15);\n  border-radius: 15px;\n  background-color: white;\n}\n\n:host(.open) {\n  display: block;\n}\n\n.wrapper {\n  display: flex;\n  flex-direction: column;\n  height: 100%;\n}\n\n.categories {\n  display: flex;\n  justify-content: space-between;\n  padding: 12px var(--padding-left-right) 0;\n}\n\n.category {\n  cursor: pointer;\n  border-bottom: 2px solid transparent;\n  svg {\n    fill: var(--category-color);\n    transition: fill 200ms ease-in-out;\n  }\n}\n\n.category.category-selected {\n  border-bottom: 2px solid var(--category-selected-color);\n\n  svg {\n    fill: var(--category-selected-color);\n  }\n}\n\n.search {\n  display: flex;\n  padding: 4px var(--padding-left-right);\n  position: relative;\n\n  user-select: none;\n\n  input {\n    flex: 1;\n    border-radius: 4px;\n    color: var(--search-color);\n    border: 1px solid var(--search-border-color);\n    height: 20px;\n    padding: 4px;\n  }\n\n  .x {\n    cursor: pointer;\n    position: absolute;\n    right: 16px;\n    top: 0px;\n    font-size: 12px;\n    line-height: 25px;\n\n    ion-icon {\n      vertical-align: middle;\n      color: var(--search-color);\n    }\n  }\n}\n\n.emojis {\n  flex: 1;\n  overflow-y: auto;\n  margin: 0;\n  padding: 4px var(--padding-left-right);\n\n  display: grid;\n  grid-template-columns: repeat(9, 32px);\n  justify-content: space-between;\n  align-content: flex-start;\n\n  .emoji-image {\n    background-image: url('/js/stencil/emoji-sheet-twitter-256-64.png');\n    background-repeat: no-repeat;\n    background-color: transparent;\n    width: 24px;\n    height: 24px;\n    background-size: 5700% 5700%;\n  }\n\n  li {\n    list-style: none;\n    font-size: 24px;\n    width: 32px;\n    height: 32px;\n    display: flex;\n    justify-content: center;\n    align-items: center;\n    cursor: pointer;\n\n    border-radius: 100%;\n\n    &:hover {\n      background-color: #eee;\n    }\n\n    .emoji {\n      font-size: 24px;\n    }\n  }\n}"
  },
  {
    "path": "assets/stencil/components/emoji-picker/emoji-picker.tsx",
    "content": "import { Component, Prop, Event, h, EventEmitter, Host, Watch, Listen, Element, State } from '@stencil/core';\n\nimport * as EmojiSvgs from './svgs';\n\ninterface EmojiSet {\n  aliases: { [key:string]: string };\n  categories: EmojiCategory[];\n  compressed: boolean;\n  default: EmojiSet;\n  emojis: EmojiMap;\n}\n\ninterface EmojiMap {\n  [name:string]: Emoji;\n}\n\nexport interface Emoji {\n  name?: string;\n  unified?: string;\n  non_qualified?: string;\n  documo?: any;\n  au?: string;\n  softbank?: string;\n  google?: string;\n  image?: string;\n  sheet_x?: number;\n  sheet_y?: number;\n  short_name?: string;\n  short_names?: string[];\n  text?: string;\n  texts?: string;\n  category?: string;\n  sort_order?: number;\n  added_in?: string;\n  has_img_apple?: boolean;\n  has_img_google?: boolean;\n  has_img_twitter?: boolean;\n  has_img_facebook?: boolean;\n  skin_variations?: { [code:string]: SkinVariation };\n}\n\ninterface SkinVariation {\n  added_in: string;\n  has_img_apple: boolean;\n  has_img_facebook: boolean;\n  has_img_google: boolean;\n  has_img_twitter: boolean;\n  image: string;\n  non_qualified: any;\n  sheet_x: number;\n  sheet_y: number;\n  unified: string;\n}\n\ninterface EmojiCategory {\n  emojis: string[];\n  id: string;\n  name: string;\n}\n\n@Component({\n  tag: 'ionic-emoji-picker',\n  styleUrl: 'emoji-picker.scss',\n  shadow: true\n})\nexport class EmojiPicker {\n  @Element() el;\n\n  @Prop() open = false;\n  @Prop() openEvent: MouseEvent;\n  @Event() emojiPick: EventEmitter;\n  @Event() closed: EventEmitter;\n\n  @State() emoji: EmojiSet;\n  @State() selectedCategory: EmojiCategory;\n  @State() categories: EmojiCategory[];\n  @State() searchQuery: string = '';\n\n  @State() emojis: EmojiMap;\n\n  x: number = 0;\n  y: number = 0;\n\n  async componentWillLoad() {\n    /*\n    this.categories = EMOJI.categories;\n    this.selectedCategory = this.categories[0];\n    */\n    const ret = await fetch('/js/stencil/emoji.json');\n\n    const allEmoji = await ret.json() as Emoji[];\n\n    var categories = [\n      ['Smileys & Emotion', 'smileys'],\n      ['People & Body', 'people'],\n      ['Animals & Nature', 'nature'],\n      ['Food & Drink', 'foods'],\n      ['Activities', 'activity'],\n      ['Travel & Places', 'places'],\n      ['Objects', 'objects'],\n      ['Symbols', 'symbols'],\n      ['Flags', 'flags'],\n    ]\n\n    const startingCategories = categories.map(c => ({\n      emojis: [],\n      id: c[1],\n      name: c[0]\n    }));\n\n    this.emojis = allEmoji.reduce((emojis, emoji) => {\n      if (!(emoji.short_name in emojis)) {\n        emojis[emoji.short_name] = emoji;\n      }\n      return emojis;\n    }, {} as EmojiMap);\n\n    this.categories = allEmoji.sort((a, b) => a.sort_order - b.sort_order).reduce((categories, emoji) => {\n      if (emoji.category === 'Skin Tones') {\n        return categories;\n      }\n\n      let cat = categories.find(c => c.name === emoji.category);\n      if (!cat) {\n        cat = {\n          emojis: [],\n          id: emoji.category,\n          name: emoji.category\n        } as EmojiCategory;\n        categories.push(cat);\n      }\n      cat.emojis.push(emoji.short_name);\n      return categories;\n    }, startingCategories);\n\n    let smileys = this.categories[0]\n    let people = this.categories[1]\n    let smileysAndPeople = { id: 'people', name: 'Smileys & People', emojis: [] }\n    smileysAndPeople.emojis = []\n      .concat(smileys.emojis.slice(0, 114))\n      .concat(people.emojis)\n      .concat(smileys.emojis.slice(114));\n\n    this.categories.unshift(smileysAndPeople);\n    this.categories.splice(1, 2);\n\n    this.selectedCategory = this.categories[0];\n  }\n\n  @Watch('openEvent')\n  openEventChange() {\n    if (!this.openEvent) {\n      return;\n    }\n    const target = this.openEvent.target;\n    const box = (target as HTMLElement).getBoundingClientRect();\n    this.x = box.left;\n    this.y = box.bottom;\n  }\n\n  @Listen('click', { target: 'body' })\n  handleBodyClick(e) {\n    if (!this.open) {\n      return;\n    }\n\n    let el = e.target;\n    while (el) {\n      if (el === this.el) {\n        return;\n      }\n      el = el.parentElement;\n    }\n\n    this.closed.emit();\n  }\n\n  handleSelectCategory = (c: EmojiCategory) => {\n    this.selectedCategory = c;\n    this.searchQuery = '';\n    setTimeout(() => {\n      this.el.shadowRoot.querySelector('.emojis').scrollTop = 0;\n    }, 30);\n  }\n\n  handleSearchInput = (e) => this.searchQuery = e.target.value;\n\n  handleClearSearchInput = (_e) => this.searchQuery = '';\n\n  handleEmojiPicked = (emoji: Emoji) => {\n    this.emojiPick.emit(emoji);\n  }\n\n  getFilteredEmojis() {\n    if (this.searchQuery) {\n      return Object.keys(this.emojis).filter(k => {\n        const emoji = this.emojis[k];\n        const fields = [\n          ...(emoji.short_names || []),\n          emoji.name,\n        ];\n\n        return fields.some(f => !!f && f.toLocaleLowerCase().indexOf(this.searchQuery.toLocaleLowerCase()) >= 0);\n      }).sort((a, b) => {\n        const ea = this.emojis[a];\n        const eb = this.emojis[b];\n\n        return ea.sort_order - eb.sort_order;\n      });\n    }\n\n    return this.selectedCategory.emojis;\n  }\n\n  render() {\n    if (!this.open) {\n      return null;\n    }\n\n    const visibleEmojis = this.searchQuery ? this.getFilteredEmojis() : this.selectedCategory.emojis;\n\n    return (\n      <Host\n        style={{ left: `${this.x}px`, top: `${this.y}px` }}\n        class={ this.open ? 'open' : ''}>\n        <div class=\"wrapper\">\n          <Categories\n            categories={this.categories}\n            selectedCategory={this.selectedCategory}\n            selectCategory={this.handleSelectCategory}\n            />\n          <Search\n            value={this.searchQuery}\n            onInput={this.handleSearchInput}\n            onClear={this.handleClearSearchInput}\n            />\n          <Emojis\n            visibleEmojis={visibleEmojis}\n            emojis={this.emojis}\n            emojiPicked={this.handleEmojiPicked}\n            />\n        </div>\n      </Host>\n    )\n  }\n}\n\ninterface CategoriesProps {\n  categories: EmojiCategory[];\n  selectedCategory: EmojiCategory;\n  selectCategory: (c: EmojiCategory) => void;\n}\n\nconst Categories = ({ categories, selectedCategory, selectCategory }: CategoriesProps) => (\n  <div class=\"categories\">\n  {categories.map(c => {\n    return (\n      <div\n        class={`category${selectedCategory === c ? ' category-selected' : ''}`}\n        onClick={() => selectCategory(c)}\n        >\n        {EmojiSvgs.categories[c.id]()}\n      </div>\n    );\n  }\n  )}\n  </div>\n)\n\ninterface SearchProps {\n  onInput: (e) => void;\n  onClear: (e) => void;\n  value: string;\n}\nconst Search = ({ onInput, onClear, value }: SearchProps) => (\n  <div class=\"search\">\n    <input\n      type=\"search\"\n      placeholder=\"Search\"\n      value={value}\n      onInput={onInput}\n      onPaste={onInput}\n      onClick={onInput}\n      />\n    { value ? (\n    <div class=\"x\" onClick={onClear}>\n      <ion-icon name=\"close\" />\n    </div>\n    ) : null}\n  </div>\n)\n\nconst processName = (name) => name\n                              .toLocaleLowerCase().split(/[\\s_-]+/)\n                              .map(s => s[0].toUpperCase() + s.slice(1))\n                              .join(' ');\ninterface EmojisProps {\n  visibleEmojis: string[];\n  emojis: EmojiMap;\n  emojiPicked: (emoji: Emoji) => void;\n}\nconst Emojis = ({ visibleEmojis, emojis, emojiPicked }: EmojisProps) => {\n  return (\n    <ul class=\"emojis\">\n      {visibleEmojis.map(e => {\n        const em = emojis[e]\n        const x = em.sheet_x * (100 / 56);\n        const y = em.sheet_y * (100 / 56);\n\n        let name = null;\n        if (em.name) {\n          name = processName(em.name);\n        } else if (em.short_name) {\n          name = processName(em.short_name);\n        }\n\n        return (\n          <li title={name}\n              onClick={() => emojiPicked(em)}>\n            <div\n              class=\"emoji-image\"\n              style={{ backgroundPosition: `${x}% ${y}%`}} />\n          </li>\n        )\n      })}\n    </ul>\n  )\n}"
  },
  {
    "path": "assets/stencil/components/emoji-picker/svgs.tsx",
    "content": "import { h } from '@stencil/core';\n\nexport const categories = {\n  activity: () => (\n    <svg\n      xmlns=\"http://www.w3.org/2000/svg\"\n      viewBox=\"0 0 24 24\"\n      width=\"24\"\n      height=\"24\"\n    >\n      <path d=\"M12 0C5.373 0 0 5.372 0 12c0 6.627 5.373 12 12 12 6.628 0 12-5.373 12-12 0-6.628-5.372-12-12-12m9.949 11H17.05c.224-2.527 1.232-4.773 1.968-6.113A9.966 9.966 0 0 1 21.949 11M13 11V2.051a9.945 9.945 0 0 1 4.432 1.564c-.858 1.491-2.156 4.22-2.392 7.385H13zm-2 0H8.961c-.238-3.165-1.536-5.894-2.393-7.385A9.95 9.95 0 0 1 11 2.051V11zm0 2v8.949a9.937 9.937 0 0 1-4.432-1.564c.857-1.492 2.155-4.221 2.393-7.385H11zm4.04 0c.236 3.164 1.534 5.893 2.392 7.385A9.92 9.92 0 0 1 13 21.949V13h2.04zM4.982 4.887C5.718 6.227 6.726 8.473 6.951 11h-4.9a9.977 9.977 0 0 1 2.931-6.113M2.051 13h4.9c-.226 2.527-1.233 4.771-1.969 6.113A9.972 9.972 0 0 1 2.051 13m16.967 6.113c-.735-1.342-1.744-3.586-1.968-6.113h4.899a9.961 9.961 0 0 1-2.931 6.113\" />\n    </svg>\n  ),\n\n  custom: () => (\n    <svg\n      xmlns=\"http://www.w3.org/2000/svg\"\n      viewBox=\"0 0 24 24\"\n      width=\"24\"\n      height=\"24\"\n    >\n      <g transform=\"translate(2.000000, 1.000000)\">\n        <rect id=\"Rectangle\" x=\"8\" y=\"0\" width=\"3\" height=\"21\" rx=\"1.5\" />\n        <rect\n          id=\"Rectangle\"\n          transform=\"translate(9.843, 10.549) rotate(60) translate(-9.843, -10.549) \"\n          x=\"8.343\"\n          y=\"0.049\"\n          width=\"3\"\n          height=\"21\"\n          rx=\"1.5\"\n        />\n        <rect\n          id=\"Rectangle\"\n          transform=\"translate(9.843, 10.549) rotate(-60) translate(-9.843, -10.549) \"\n          x=\"8.343\"\n          y=\"0.049\"\n          width=\"3\"\n          height=\"21\"\n          rx=\"1.5\"\n        />\n      </g>\n    </svg>\n  ),\n\n  flags: () => (\n    <svg\n      xmlns=\"http://www.w3.org/2000/svg\"\n      viewBox=\"0 0 24 24\"\n      width=\"24\"\n      height=\"24\"\n    >\n      <path d=\"M0 0l6.084 24H8L1.916 0zM21 5h-4l-1-4H4l3 12h3l1 4h13L21 5zM6.563 3h7.875l2 8H8.563l-2-8zm8.832 10l-2.856 1.904L12.063 13h3.332zM19 13l-1.5-6h1.938l2 8H16l3-2z\" />\n    </svg>\n  ),\n\n  foods: () => (\n    <svg\n      xmlns=\"http://www.w3.org/2000/svg\"\n      viewBox=\"0 0 24 24\"\n      width=\"24\"\n      height=\"24\"\n    >\n      <path d=\"M17 4.978c-1.838 0-2.876.396-3.68.934.513-1.172 1.768-2.934 4.68-2.934a1 1 0 0 0 0-2c-2.921 0-4.629 1.365-5.547 2.512-.064.078-.119.162-.18.244C11.73 1.838 10.798.023 9.207.023 8.579.022 7.85.306 7 .978 5.027 2.54 5.329 3.902 6.492 4.999 3.609 5.222 0 7.352 0 12.969c0 4.582 4.961 11.009 9 11.009 1.975 0 2.371-.486 3-1 .629.514 1.025 1 3 1 4.039 0 9-6.418 9-11 0-5.953-4.055-8-7-8M8.242 2.546c.641-.508.943-.523.965-.523.426.169.975 1.405 1.357 3.055-1.527-.629-2.741-1.352-2.98-1.846.059-.112.241-.356.658-.686M15 21.978c-1.08 0-1.21-.109-1.559-.402l-.176-.146c-.367-.302-.816-.452-1.266-.452s-.898.15-1.266.452l-.176.146c-.347.292-.477.402-1.557.402-2.813 0-7-5.389-7-9.009 0-5.823 4.488-5.991 5-5.991 1.939 0 2.484.471 3.387 1.251l.323.276a1.995 1.995 0 0 0 2.58 0l.323-.276c.902-.78 1.447-1.251 3.387-1.251.512 0 5 .168 5 6 0 3.617-4.187 9-7 9\" />\n    </svg>\n  ),\n\n  nature: () => (\n    <svg\n      xmlns=\"http://www.w3.org/2000/svg\"\n      viewBox=\"0 0 24 24\"\n      width=\"24\"\n      height=\"24\"\n    >\n      <path d=\"M15.5 8a1.5 1.5 0 1 0 .001 3.001A1.5 1.5 0 0 0 15.5 8M8.5 8a1.5 1.5 0 1 0 .001 3.001A1.5 1.5 0 0 0 8.5 8\" />\n      <path d=\"M18.933 0h-.027c-.97 0-2.138.787-3.018 1.497-1.274-.374-2.612-.51-3.887-.51-1.285 0-2.616.133-3.874.517C7.245.79 6.069 0 5.093 0h-.027C3.352 0 .07 2.67.002 7.026c-.039 2.479.276 4.238 1.04 5.013.254.258.882.677 1.295.882.191 3.177.922 5.238 2.536 6.38.897.637 2.187.949 3.2 1.102C8.04 20.6 8 20.795 8 21c0 1.773 2.35 3 4 3 1.648 0 4-1.227 4-3 0-.201-.038-.393-.072-.586 2.573-.385 5.435-1.877 5.925-7.587.396-.22.887-.568 1.104-.788.763-.774 1.079-2.534 1.04-5.013C23.929 2.67 20.646 0 18.933 0M3.223 9.135c-.237.281-.837 1.155-.884 1.238-.15-.41-.368-1.349-.337-3.291.051-3.281 2.478-4.972 3.091-5.031.256.015.731.27 1.265.646-1.11 1.171-2.275 2.915-2.352 5.125-.133.546-.398.858-.783 1.313M12 22c-.901 0-1.954-.693-2-1 0-.654.475-1.236 1-1.602V20a1 1 0 1 0 2 0v-.602c.524.365 1 .947 1 1.602-.046.307-1.099 1-2 1m3-3.48v.02a4.752 4.752 0 0 0-1.262-1.02c1.092-.516 2.239-1.334 2.239-2.217 0-1.842-1.781-2.195-3.977-2.195-2.196 0-3.978.354-3.978 2.195 0 .883 1.148 1.701 2.238 2.217A4.8 4.8 0 0 0 9 18.539v-.025c-1-.076-2.182-.281-2.973-.842-1.301-.92-1.838-3.045-1.853-6.478l.023-.041c.496-.826 1.49-1.45 1.804-3.102 0-2.047 1.357-3.631 2.362-4.522C9.37 3.178 10.555 3 11.948 3c1.447 0 2.685.192 3.733.57 1 .9 2.316 2.465 2.316 4.48.313 1.651 1.307 2.275 1.803 3.102.035.058.068.117.102.178-.059 5.967-1.949 7.01-4.902 7.19m6.628-8.202c-.037-.065-.074-.13-.113-.195a7.587 7.587 0 0 0-.739-.987c-.385-.455-.648-.768-.782-1.313-.076-2.209-1.241-3.954-2.353-5.124.531-.376 1.004-.63 1.261-.647.636.071 3.044 1.764 3.096 5.031.027 1.81-.347 3.218-.37 3.235\" />\n    </svg>\n  ),\n\n  objects: () => (\n    <svg\n      xmlns=\"http://www.w3.org/2000/svg\"\n      viewBox=\"0 0 24 24\"\n      width=\"24\"\n      height=\"24\"\n    >\n      <path d=\"M12 0a9 9 0 0 0-5 16.482V21s2.035 3 5 3 5-3 5-3v-4.518A9 9 0 0 0 12 0zm0 2c3.86 0 7 3.141 7 7s-3.14 7-7 7-7-3.141-7-7 3.14-7 7-7zM9 17.477c.94.332 1.946.523 3 .523s2.06-.19 3-.523v.834c-.91.436-1.925.689-3 .689a6.924 6.924 0 0 1-3-.69v-.833zm.236 3.07A8.854 8.854 0 0 0 12 21c.965 0 1.888-.167 2.758-.451C14.155 21.173 13.153 22 12 22c-1.102 0-2.117-.789-2.764-1.453z\" />\n      <path d=\"M14.745 12.449h-.004c-.852-.024-1.188-.858-1.577-1.824-.421-1.061-.703-1.561-1.182-1.566h-.009c-.481 0-.783.497-1.235 1.537-.436.982-.801 1.811-1.636 1.791l-.276-.043c-.565-.171-.853-.691-1.284-1.794-.125-.313-.202-.632-.27-.913-.051-.213-.127-.53-.195-.634C7.067 9.004 7.039 9 6.99 9A1 1 0 0 1 7 7h.01c1.662.017 2.015 1.373 2.198 2.134.486-.981 1.304-2.058 2.797-2.075 1.531.018 2.28 1.153 2.731 2.141l.002-.008C14.944 8.424 15.327 7 16.979 7h.032A1 1 0 1 1 17 9h-.011c-.149.076-.256.474-.319.709a6.484 6.484 0 0 1-.311.951c-.429.973-.79 1.789-1.614 1.789\" />\n    </svg>\n  ),\n\n  people: () => (\n    <svg\n      xmlns=\"http://www.w3.org/2000/svg\"\n      viewBox=\"0 0 24 24\"\n      width=\"24\"\n      height=\"24\"\n    >\n      <path d=\"M12 0C5.373 0 0 5.373 0 12s5.373 12 12 12 12-5.373 12-12S18.627 0 12 0m0 22C6.486 22 2 17.514 2 12S6.486 2 12 2s10 4.486 10 10-4.486 10-10 10\" />\n      <path d=\"M8 7a2 2 0 1 0-.001 3.999A2 2 0 0 0 8 7M16 7a2 2 0 1 0-.001 3.999A2 2 0 0 0 16 7M15.232 15c-.693 1.195-1.87 2-3.349 2-1.477 0-2.655-.805-3.347-2H15m3-2H6a6 6 0 1 0 12 0\" />\n    </svg>\n  ),\n\n  places: () => (\n    <svg\n      xmlns=\"http://www.w3.org/2000/svg\"\n      viewBox=\"0 0 24 24\"\n      width=\"24\"\n      height=\"24\"\n    >\n      <path d=\"M6.5 12C5.122 12 4 13.121 4 14.5S5.122 17 6.5 17 9 15.879 9 14.5 7.878 12 6.5 12m0 3c-.275 0-.5-.225-.5-.5s.225-.5.5-.5.5.225.5.5-.225.5-.5.5M17.5 12c-1.378 0-2.5 1.121-2.5 2.5s1.122 2.5 2.5 2.5 2.5-1.121 2.5-2.5-1.122-2.5-2.5-2.5m0 3c-.275 0-.5-.225-.5-.5s.225-.5.5-.5.5.225.5.5-.225.5-.5.5\" />\n      <path d=\"M22.482 9.494l-1.039-.346L21.4 9h.6c.552 0 1-.439 1-.992 0-.006-.003-.008-.003-.008H23c0-1-.889-2-1.984-2h-.642l-.731-1.717C19.262 3.012 18.091 2 16.764 2H7.236C5.909 2 4.738 3.012 4.357 4.283L3.626 6h-.642C1.889 6 1 7 1 8h.003S1 8.002 1 8.008C1 8.561 1.448 9 2 9h.6l-.043.148-1.039.346a2.001 2.001 0 0 0-1.359 2.097l.751 7.508a1 1 0 0 0 .994.901H3v1c0 1.103.896 2 2 2h2c1.104 0 2-.897 2-2v-1h6v1c0 1.103.896 2 2 2h2c1.104 0 2-.897 2-2v-1h1.096a.999.999 0 0 0 .994-.901l.751-7.508a2.001 2.001 0 0 0-1.359-2.097M6.273 4.857C6.402 4.43 6.788 4 7.236 4h9.527c.448 0 .834.43.963.857L19.313 9H4.688l1.585-4.143zM7 21H5v-1h2v1zm12 0h-2v-1h2v1zm2.189-3H2.811l-.662-6.607L3 11h18l.852.393L21.189 18z\" />\n    </svg>\n  ),\n\n  recent: () => (\n    <svg\n      xmlns=\"http://www.w3.org/2000/svg\"\n      viewBox=\"0 0 24 24\"\n      width=\"24\"\n      height=\"24\"\n    >\n      <path d=\"M13 4h-2l-.001 7H9v2h2v2h2v-2h4v-2h-4z\" />\n      <path d=\"M12 0C5.373 0 0 5.373 0 12s5.373 12 12 12 12-5.373 12-12S18.627 0 12 0m0 22C6.486 22 2 17.514 2 12S6.486 2 12 2s10 4.486 10 10-4.486 10-10 10\" />\n    </svg>\n  ),\n\n  symbols: () => (\n    <svg\n      xmlns=\"http://www.w3.org/2000/svg\"\n      viewBox=\"0 0 24 24\"\n      width=\"24\"\n      height=\"24\"\n    >\n      <path d=\"M0 0h11v2H0zM4 11h3V6h4V4H0v2h4zM15.5 17c1.381 0 2.5-1.116 2.5-2.493s-1.119-2.493-2.5-2.493S13 13.13 13 14.507 14.119 17 15.5 17m0-2.986c.276 0 .5.222.5.493 0 .272-.224.493-.5.493s-.5-.221-.5-.493.224-.493.5-.493M21.5 19.014c-1.381 0-2.5 1.116-2.5 2.493S20.119 24 21.5 24s2.5-1.116 2.5-2.493-1.119-2.493-2.5-2.493m0 2.986a.497.497 0 0 1-.5-.493c0-.271.224-.493.5-.493s.5.222.5.493a.497.497 0 0 1-.5.493M22 13l-9 9 1.513 1.5 8.99-9.009zM17 11c2.209 0 4-1.119 4-2.5V2s.985-.161 1.498.949C23.01 4.055 23 6 23 6s1-1.119 1-3.135C24-.02 21 0 21 0h-2v6.347A5.853 5.853 0 0 0 17 6c-2.209 0-4 1.119-4 2.5s1.791 2.5 4 2.5M10.297 20.482l-1.475-1.585a47.54 47.54 0 0 1-1.442 1.129c-.307-.288-.989-1.016-2.045-2.183.902-.836 1.479-1.466 1.729-1.892s.376-.871.376-1.336c0-.592-.273-1.178-.818-1.759-.546-.581-1.329-.871-2.349-.871-1.008 0-1.79.293-2.344.879-.556.587-.832 1.181-.832 1.784 0 .813.419 1.748 1.256 2.805-.847.614-1.444 1.208-1.794 1.784a3.465 3.465 0 0 0-.523 1.833c0 .857.308 1.56.924 2.107.616.549 1.423.823 2.42.823 1.173 0 2.444-.379 3.813-1.137L8.235 24h2.819l-2.09-2.383 1.333-1.135zm-6.736-6.389a1.02 1.02 0 0 1 .73-.286c.31 0 .559.085.747.254a.849.849 0 0 1 .283.659c0 .518-.419 1.112-1.257 1.784-.536-.651-.805-1.231-.805-1.742a.901.901 0 0 1 .302-.669M3.74 22c-.427 0-.778-.116-1.057-.349-.279-.232-.418-.487-.418-.766 0-.594.509-1.288 1.527-2.083.968 1.134 1.717 1.946 2.248 2.438-.921.507-1.686.76-2.3.76\" />\n    </svg>\n  ),\n}\n\nexport const search = {\n  search: () => (\n    <svg\n      xmlns=\"http://www.w3.org/2000/svg\"\n      width=\"13\"\n      height=\"13\"\n      viewBox=\"0 0 20 20\"\n      opacity=\"0.5\"\n    >\n      <path d=\"M12.9 14.32a8 8 0 1 1 1.41-1.41l5.35 5.33-1.42 1.42-5.33-5.34zM8 14A6 6 0 1 0 8 2a6 6 0 0 0 0 12z\" />\n    </svg>\n  ),\n\n  delete: () => (\n    <svg\n      xmlns=\"http://www.w3.org/2000/svg\"\n      width=\"13\"\n      height=\"13\"\n      viewBox=\"0 0 20 20\"\n      opacity=\"0.5\"\n    >\n      <path d=\"M10 8.586L2.929 1.515 1.515 2.929 8.586 10l-7.071 7.071 1.414 1.414L10 11.414l7.071 7.071 1.414-1.414L11.414 10l7.071-7.071-1.414-1.414L10 8.586z\" />\n    </svg>\n  ),\n}\n"
  },
  {
    "path": "assets/stencil/components/home-components/home-components.scss",
    "content": "@import '../../vars';\n// @import '../../../../node_modules/prismjs/themes/prism-tomorrow';\n@import '../../prism-ionic';\n\nhome-components {\n  display: grid;\n  grid-template-columns: 634px 1fr;\n  border-radius: 10px;\n  margin-right: -24px;\n  margin-left: -24px;\n\n  @media (min-width: 1200px) {\n    margin-right: -32px;\n    margin-left: -32px;\n  }\n\n  @media (max-width: $screen-sm-max) {\n    grid-template-columns: minmax(200px, 1fr) 290px;\n    margin-right: -8px;\n    margin-left: -8px;\n  }\n\n  .code-header {\n    background: #0B1521;\n    border-radius: 10px 0 0 0;\n    font-size: 12px;\n    font-weight: 600;\n    line-height: 13px;\n    letter-spacing: 0.1em;\n    text-transform: uppercase;\n    display: flex;\n    justify-content: space-between;\n\n    ul {\n      display: flex;\n      flex-direction: row;\n      padding: 0;\n      margin: 0;\n    }\n\n    li {\n      color: #7A8EA7;\n      border: 1px solid transparent;\n      list-style: none;\n      padding: 20px;\n      cursor: pointer;\n      z-index: 1;\n      position: relative;\n      transition: .2s color, .2s background-color;\n\n      &::after {\n        position: absolute;\n        height: 1px;\n        content: '';\n        bottom: -2px;\n        left: 0;\n        right: 0;\n        background: transparent;\n      }\n\n      &.active {\n        background: #1C2B3E;\n        border-color: #283A50;\n        border-bottom-color: #1C2B3E;\n        color: #FFFFFF;\n\n        &::after {\n          background: #1C2B3E;\n        }\n      }\n\n      &:first-child {\n        border-radius: 10px 0 0 0;\n      }\n\n      &:hover {\n        color: #FFFFFF;\n      }\n\n      @media (max-width: $screen-xs-max) {\n        padding: 20px 10px;\n      }\n    }\n\n    a {\n      background: rgba(#7CABFF, 0.3);\n      color: #7CABFF;\n      border-radius: 16px;\n      padding: 8px;\n      align-self: center;\n      margin-right: 20px;\n      transition: .2s background-color;\n      \n      &:hover,\n      &:active,\n      &:focus {\n        text-decoration: none;\n        background: rgba(#7CABFF, 0.5);\n      }\n\n      @media (max-width: $screen-xs-max) {\n        display: none;\n      }\n    }\n  }\n\n  .preview-header {\n    background: #F9FAFC;\n    border: 1px solid #E9EDF3;\n    border-bottom: none;\n    border-radius: 0px 10px 0px 0px;\n    display: flex;\n    justify-content: center;\n    align-items: center;\n\n    ion-segment {\n      display: flex;\n      justify-content: center;\n      width: 142px;\n      background: #E9EDF3;\n    }\n\n    ion-segment-button {\n      flex: 0 1;\n    }\n  }\n\n  .tab-content,\n  .preview-content {\n    position: relative;\n    padding: 0;\n\n    li {\n      display: none;\n\n      &.active {\n        display: block;\n      }\n    }\n  }\n\n  .tab-content {\n    background: #1C2B3E;\n    border: 1px solid #283A50;\n    border-radius: 0 0 0 10px;\n    align-items: flex-start;\n    position: relative;\n\n    &::before,\n    &::after {\n      position: absolute;\n      content: '';\n      top: 0;\n      bottom: 4px;\n      left: 0;\n      width: 16px;\n      background: linear-gradient(to left, rgba(#1C2B3E, 0), #1C2B3E);\n    }\n\n    &::after {\n      left: auto;\n      right: 0;\n      background: linear-gradient(to right, rgba(#1C2B3E, 0), #1C2B3E);\n    }\n\n    pre  {\n      background: transparent;\n      padding: 0;\n      margin: 0;\n      color: white;\n      border: none;\n      font-size: 13px;\n      line-height: 23px;\n      letter-spacing: -.01em;\n      font-weight: 500;\n      font-family: $font-family-mono;\n      padding: 24px 0 48px 56px;\n\n      @media (max-width: $screen-xs-max) {\n        padding: 24px 0 48px 16px;\n      }\n\n      code {\n        white-space: pre;\n      }\n    }\n\n    .tag {\n      background: transparent;\n      margin-left: 0;\n      padding: 0;\n      border-radius: 0;\n      font-weight: 700;\n      font-size: inherit;\n      text-transform: none;\n      letter-spacing: 0;\n    }\n  }\n\n  .preview-content {\n    background: radial-gradient(#E8EBEF 10%, #FCFDFE 10%) repeat;\n    border: 1px solid #E9EDF3;\n    background-size: 10px 10px;\n    border-radius: 0 0 10px 0;\n    display: flex;\n    justify-content: center;\n    align-items: center;\n\n    iframe {\n      background: transparent;\n    }\n  }\n\n  @media (max-width: 525px) {\n    grid-template-columns: 100%;\n\n    .code-header {\n      border-radius: 10px 10px 0 0;\n\n      li {\n        padding: 20px;\n      }\n    }\n\n    .tab-content {\n      border-radius: 0 0 10px 10px;\n    }\n\n    .preview-header,\n    .preview-content {\n      display: none;\n    }\n  }\n}"
  },
  {
    "path": "assets/stencil/components/home-components/home-components.tsx",
    "content": "import {\n  Component,\n  // Element,\n  // Prop,\n  State,\n  h\n} from '@stencil/core';\n\nimport '@ionic/core';\nimport Prism from 'prismjs';\n\n\n\n@Component({\n  tag: 'home-components',\n  styleUrl: 'home-components.scss',\n  shadow: false\n})\nexport class HomeComponents {\n  @State() activeTab: 'card'|'button'|'listItem' = 'card';\n  @State() activePlatform = 'ios';\n\n  constructor() {\n  }\n\n  componentWillLoad() {\n  }\n\n  componentDidLoad() {\n  }\n\n  resizeIframe(el) {\n    setTimeout(() => {\n      // console.log(el.contentWindow.document.documentElement.scrollHeight)\n      el.style.height = (el.contentWindow.document.documentElement.scrollHeight || 280) + 'px';\n    }, 50)\n  }\n\n\n  render() {\n    return [\n      <header class=\"code-header\">\n        <ul class=\"tab-menu\">\n          <li class={this.activeTab === 'card' ? 'active' : 'innactive'}\n              onClick={() => this.activeTab = 'card'}>Card</li>\n          <li class={this.activeTab === 'button' ? 'active' : 'innactive'}\n              onClick={() => this.activeTab = 'button'}>Button</li>\n          <li class={this.activeTab === 'listItem' ? 'active' : 'innactive'}\n              onClick={() => this.activeTab = 'listItem'}>List Item</li>\n        </ul>,\n        <a href=\"https://ionicframework.com/docs/components\" target=\"_blank\">See All</a>\n      </header>,\n\n      <header class=\"preview-header\">\n        <ion-segment mode=\"ios\" \n                     value={this.activePlatform}\n                     color=\"medium\" \n                     onIonChange={e => this.activePlatform = e.detail.value }>\n          <ion-segment-button value=\"ios\">\n            <ion-label>iOS</ion-label>\n          </ion-segment-button>\n          <ion-segment-button value=\"md\">\n            <ion-label>Android</ion-label>\n          </ion-segment-button>\n        </ion-segment>\n      </header>,\n\n      <ul class=\"tab-content\">\n        {Object.keys(this.markup).map(key => (\n          <li class={this.activeTab === key ? 'active' : 'innactive'}>\n            <pre>\n              <code innerHTML={Prism.highlight(\n                this.markup[key].display, \n                Prism.languages.html, \n                'html'\n              )}></code>\n            </pre>\n          </li>\n        ))}\n      </ul>,\n\n      <ul class=\"preview-content\">\n        {Object.keys(this.markup).map(key => (\n          <li class={this.activeTab === key ? 'active' : 'innactive'}>\n            <iframe srcdoc={this.ionicInjector(this.markup[key].src)}\n                    frameborder=\"0\"\n                    scrolling=\"no\"\n                    loading=\"lazy\"\n                    onLoad={e => this.resizeIframe(e.target)}></iframe>\n          </li>\n        ))}\n      </ul>\n    ];\n  }\n\n  ionicInjector(code) {\n    return `\n<link rel=\"stylesheet\" href=\"https://cdn.jsdelivr.net/npm/@ionic/core@next/css/ionic.bundle.css\" />\n<script type=\"module\" src=\"https://cdn.jsdelivr.net/npm/@ionic/core@next/dist/ionic/ionic.esm.js\"></script>\n<script nomodule src=\"https://cdn.jsdelivr.net/npm/@ionic/core@next/dist/ionic/ionic.js\"></script>\n<script>window.Ionic = {\n  config: {\n    mode: '${this.activePlatform}'\n  }\n}</script>\n${code}`;\n  }\n\n  markup = {\n    card: {\n      display: `\n<ion-card>\n  <ion-img src=\"/assets/myImg.png\"></ion-img>\n  <ion-card-content>\n    <ion-card-header>\n      <ion-card-subtitle>Card Subtitle</ion-card-subtitle>\n      <ion-card-title>Card Title</ion-card-title>\n    </ion-card-header>\n    <p>Here’s a small text description for the card component. \n       Nothing more, nothing less.\n    </p>\n    <ion-item>\n      <ion-button fill=\"solid\">Action</ion-button>\n      <ion-icon name=\"heart” slot=\"end”></ion-icon>\n      <ion-icon name=\"share” slot=\"end”></ion-icon>\n    </ion-item>\n  </ion-card-content>\n</ion-card>`,\n      src: `\n        <style>\n          html, body {\n            height: 380px;\n          }\n          ion-card img {\n            width: 100%;\n            height: 120px;\n          }\n          \n          ion-card ion-grid {\n            --ion-grid-column-padding: 0;\n            \n            padding: 10px 0 0;\n          }\n          \n          ion-card-content ion-col:last-child {\n            text-align: right;\n          }\n          \n          ion-card ion-button[fill=\"clear\"] {\n            --padding-end: 0;\n            margin: 0;\n          \n            height: 30px;\n          }\n        </style>\n        <ion-card>\n          <img src=\"/img/homepage/demo-image.png\" />\n          <ion-card-header>\n            <ion-card-subtitle>Card Subtitle</ion-card-subtitle>\n            <ion-card-title>Card Title</ion-card-title>\n          </ion-card-header>\n          <ion-card-content>\n            Here's a small text description for the card content. Nothing more, nothing less.\n            <ion-grid>\n              <ion-row>\n                <ion-col>\n                  <ion-button size=\"small\">Action</ion-button>\n                </ion-col>\n                <ion-col>\n                  <ion-button fill=\"clear\" color=\"medium\">\n                    <ion-icon slot=\"icon-only\" name=\"heart-outline\"></ion-icon>\n                  </ion-button>\n                  <ion-button fill=\"clear\" color=\"medium\">\n                    <ion-icon slot=\"icon-only\" name=\"share-outline\"></ion-icon>\n                  </ion-button>\n                </ion-col>\n              </ion-row>\n            </ion-grid>\n          </ion-card-content>\n        </ion-card>`\n    },\n\n  button: {\n    display:`\n<!-- Default -->\n<ion-button>Default</ion-button>\n\n<!-- Anchor -->\n<ion-button href=\"#\">Anchor</ion-button>\n\n<!-- Colors -->\n<ion-button color=\"primary\">Primary</ion-button>\n<ion-button color=\"secondary\">Secondary</ion-button>\n<ion-button color=\"tertiary\">Tertiary</ion-button>\n<ion-button color=\"success\">Success</ion-button>\n<ion-button color=\"warning\">Warning</ion-button>\n<ion-button color=\"danger\">Danger</ion-button>\n<ion-button color=\"light\">Light</ion-button>\n<ion-button color=\"medium\">Medium</ion-button>\n<ion-button color=\"dark\">Dark</ion-button>\n\n`,\n    src: `\n      <style>\n        html, body {\n          min-height: 300px;\n        }\n      </style>  \n      <ion-app><ion-list>\n        <!-- Default -->\n        <ion-button>Default</ion-button>\n\n        <!-- Anchor -->\n        <ion-button href=\"javascript:void(0);\">Anchor</ion-button>\n\n        <!-- Colors -->\n        <ion-button color=\"primary\">Primary</ion-button>\n        <ion-button color=\"secondary\">Secondary</ion-button>\n        <ion-button color=\"tertiary\">Tertiary</ion-button>\n        <ion-button color=\"success\">Success</ion-button>\n        <ion-button color=\"warning\">Warning</ion-button>\n        <ion-button color=\"danger\">Danger</ion-button>\n        <ion-button color=\"light\">Light</ion-button>\n        <ion-button color=\"medium\">Medium</ion-button>\n        <ion-button color=\"dark\">Dark</ion-button>\n      </ion-list></ion-app>`\n  },\n\n  listItem: {\n    display: `\n<h4>Discover</h4>\n<h2>Music we think you'll love.</h2>\n<IonList>\n  {albums.map(album =>\n    <IonItem key={album.id}>\n      <IonThumbnail slot=\"start\">\n        <img src={album.artwork} />\n      </IonThumbnail>\n      <IonLabel>\n        <h2>{album.title}</h2>\n        <p>{album.artist}, {album.year}</p>\n      </IonLabel>\n    </IonItem>\n  )}\n</IonList>\n\n\n`,\n    src: `\n      <style>\n        html, body {\n          min-height: 300px;\n        }\n        ion-thumbnail {\n          --border-radius: 6px;\n        }\n      </style>\n      <ion-app>\n        <ion-content>\n          <ion-list>\n            <ion-item>\n              <ion-thumbnail slot=\"start\">\n                <img src=\"https://upload.wikimedia.org/wikipedia/en/2/26/Iron_%26_Wine_-_Beast_Epic.jpg\" />\n              </ion-thumbnail>\n              <ion-label>\n                <h2>Beast Epic</h2>\n                <p>Iron & Wine, 2017</p>\n              </ion-label>\n            </ion-item>\n            <ion-item>\n              <ion-thumbnail slot=\"start\">\n                <img src=\"https://media.pitchfork.com/photos/5c7425267ad40308b4a8835c/1:1/w_320/JapaneseHouse_GoodAtFalling.jpg\" />\n              </ion-thumbnail>\n              <ion-label>\n                <h2>Good At Falling</h2>\n                <p>The Japanese House, 2019</p>\n              </ion-label>\n            </ion-item>\n            <ion-item>\n              <ion-thumbnail slot=\"start\">\n                <img src=\"https://upload.wikimedia.org/wikipedia/en/4/4f/Hallucinogen_%28EP%29_%28Front_Cover%29.png\" />\n              </ion-thumbnail>\n              <ion-label>\n                <h2>Hallucinogen</h2>\n                <p>Kelela, 2015</p>\n              </ion-label>\n            </ion-item>\n            <ion-item>\n              <ion-thumbnail slot=\"start\">\n                <img src=\"https://upload.wikimedia.org/wikipedia/en/6/66/22%2C_A_Million_cover.jpg\" />\n              </ion-thumbnail>\n              <ion-label>\n                <h2>22, A Million</h2>\n                <p>Bon Iver, 2016</p>\n              </ion-label>\n            </ion-item>\n            <ion-item>\n              <ion-thumbnail slot=\"start\">\n                <img src=\"https://upload.wikimedia.org/wikipedia/en/thumb/0/02/F%28x%29_4_Walls_CD_Cover.jpg/220px-F%28x%29_4_Walls_CD_Cover.jpg\" />\n              </ion-thumbnail>\n              <ion-label>\n                <h2>4 Walls</h2>\n                <p>f(x), 2015</p>\n              </ion-label>\n            </ion-item>\n          </ion-list>\n        </ion-content>\n      </ion-app>`\n    }\n  }\n}\n"
  },
  {
    "path": "assets/stencil/components/home-countdown/home-countdown.scss",
    "content": "@import '../../vars';\n\nhome-countdown {\n  padding: 32px 0 ;\n\n  ul {\n    list-style: none;\n    padding: 0;\n    display: flex;\n    flex-wrap: wrap;\n  }\n\n  li {\n    display: flex;\n    flex-direction: column;\n    width: 80px;\n    align-items: center;\n    margin: 0 48px;\n    position: relative;\n\n    &::after {\n      content: '';\n      position: absolute;\n      right: -48px;\n      top: 30px;\n      height: 50px;\n      border-right: 1px solid rgba(#fff, .5)\n    }\n\n    &:last-child::after {\n      display: none;\n    }\n  }\n\n  strong {\n    font-weight: 400;\n    font-size: 48px;\n    line-height: 73px;\n    letter-spacing: -0.04em;\n  }\n\n  span {\n    font-weight: 500;\n    font-size: 16px;\n    line-height: 24px;\n    letter-spacing: 0.08em;\n    color: rgba(#fff, 0.9);\n  }\n}\n"
  },
  {
    "path": "assets/stencil/components/home-countdown/home-countdown.tsx",
    "content": "import { Component, Prop, State, h } from '@stencil/core';\nimport moment from 'moment';\n\n@Component({\n  tag: 'home-countdown',\n  styleUrl: 'home-countdown.scss',\n  shadow: false\n})\nexport class HomeCountdown {\n  @Prop() eventStart: string = '1593007200';\n\n  @State() days: number;\n  @State() hours: number;\n  @State() minutes: number;\n  @State() seconds: number;\n\n\n  componentWillLoad() {\n    this.update();\n    setInterval(this.update.bind(this), 1000);\n  }\n\n  update() {\n    const eventTime = parseInt(this.eventStart, 10) * 1000;\n    const currentTime = new Date().getTime();\n    const diffTime = eventTime - currentTime;\n    const duration = moment.duration(diffTime, 'milliseconds');\n\n    this.days = moment.duration(duration).days();\n    this.hours = moment.duration(duration).hours();\n    this.minutes = moment.duration(duration).minutes();\n    this.seconds = moment.duration(duration).seconds();\n  }\n\n  render() {\n    return(\n      <ul>\n        <li>\n          <strong>{this.days}</strong>\n          <span>DAY{this.days == 1 ? '' : 'S'}</span>\n        </li>\n        <li>\n          <strong>{this.hours}</strong>\n          <span>HOUR{this.hours == 1 ? '' : 'S'}</span>\n        </li>\n        <li>\n          <strong>{this.minutes}</strong>\n          <span>MINUTE{this.minutes == 1 ? '' : 'S'}</span>\n        </li>\n        <li>\n          <strong>{this.seconds}</strong>\n          <span>SECOND{this.seconds == 1 ? '' : 'S'}</span>\n        </li>\n      </ul>\n    );\n  }\n}\n"
  },
  {
    "path": "assets/stencil/components/home-native/home-native.scss",
    "content": "@import '../../vars';\n// @import '../../../../node_modules/prismjs/themes/prism-tomorrow';\n@import '../../prism-ionic';\n\nhome-native {\n  display: flex;\n  flex-direction: column;\n  width: 560px;\n  border-radius: 10px;\n  position: relative;\n\n  @media (max-width: $screen-xs-max) {\n    width: 100%;\n    max-width: 560px;\n  }\n\n  .code-header {\n    background: #0B1521;\n    z-index: 1;\n    position: relative;\n    border-radius: 10px 10px 0 0;\n    font-size: 12px;\n    font-weight: 600;\n    line-height: 13px;\n    letter-spacing: 0.1em;\n    text-transform: uppercase;\n    display: flex;\n    justify-content: space-between;\n\n    ul {\n      display: flex;\n      flex-direction: row;\n      padding: 0;\n      margin: 0;\n\n      @media (max-width: 400px) {\n        overflow-x: auto;\n      }\n    }\n\n    li {\n      color: #7A8EA7;\n      border: 1px solid transparent;\n      list-style: none;\n      padding: 20px;\n      cursor: pointer;\n      position: relative;\n      transition: .2s color, .2s background-color;\n\n      &::after {\n        position: absolute;\n        height: 1px;\n        content: '';\n        bottom: -2px;\n        left: 0;\n        right: 0;\n        background: transparent;\n      }\n\n      &.active {\n        background: #1C2B3E;\n        border-color: #283A50;\n        border-bottom-color: #1C2B3E;\n        color: #FFFFFF;\n\n        &::after {\n          background: #1C2B3E;\n        }\n      }\n\n      &:first-child {\n        border-radius: 10px 0 0 0;\n      }\n\n      &:hover {\n        color: #FFFFFF;\n      }\n\n      @media (max-width: 530px) {\n        padding: 20px 10px;\n      }\n    }\n\n    a {\n      background: rgba(#7CABFF, 0.3);\n      color: #7CABFF;\n      border-radius: 16px;\n      padding: 8px;\n      align-self: center;\n      margin-right: 20px;\n      transition: .2s background-color;\n      \n      &:hover,\n      &:active,\n      &:focus {\n        text-decoration: none;\n        background: rgba(#7CABFF, 0.5);\n      }\n\n      @media (max-width: 470px) {\n        display: none;\n      }\n    }\n  }\n\n  .tab-content {\n    position: relative;\n    padding: 0;\n\n    li {\n      display: none;\n\n      &.active {\n        display: block;\n      }\n    }\n  }\n\n  .tab-content {\n    background: #1C2B3E;\n    border: 1px solid #283A50;\n    border-radius: 0 0 10px 10px;\n    align-items: flex-start;\n    position: relative;\n\n    &::before,\n    &::after {\n      position: absolute;\n      content: '';\n      top: 0;\n      bottom: 4px;\n      left: 0;\n      width: 16px;\n      background: linear-gradient(to left, rgba(#1C2B3E, 0), #1C2B3E);\n    }\n\n    &::after {\n      left: auto;\n      right: 0;\n      background: linear-gradient(to right, rgba(#1C2B3E, 0), #1C2B3E);\n    }\n\n    pre  {\n      background: transparent;\n      padding: 0;\n      margin: 0;\n      color: white;\n      border: none;\n      font-size: 13px;\n      line-height: 23px;\n      letter-spacing: -.01em;\n      font-weight: 500;\n      font-family: $font-family-mono;\n      padding: 24px 16px 48px 56px;\n\n      code {\n        white-space: pre;\n      }\n    }\n\n    .tag {\n      background: transparent;\n      margin-left: 0;\n      padding: 0;\n      border-radius: 0;\n      font-weight: 700;\n      font-size: inherit;\n      text-transform: none;\n      letter-spacing: 0;\n    }\n  }\n\n  .preview-icon {\n    position: absolute;\n    padding: 0;\n    bottom: -70px;\n    right: -20px;\n\n    li {\n      display: none;\n      list-style: none;\n\n      &.active {\n        display: block;\n      }\n    }\n  }\n}"
  },
  {
    "path": "assets/stencil/components/home-native/home-native.tsx",
    "content": "import {\n  Component,\n  // Element,\n  // Prop,\n  State,\n  h\n} from '@stencil/core';\n\nimport '@ionic/core';\nimport Prism from 'prismjs';\n\n\n\n@Component({\n  tag: 'home-native',\n  styleUrl: 'home-native.scss',\n  shadow: false\n})\nexport class HomeNative {\n  @State() activeTab: 'identityVault'|'camera'|'geolocation' = 'identityVault';\n\n  constructor() {\n  }\n\n  componentWillLoad() {\n  }\n\n  componentDidLoad() {\n  }\n\n\n  render() {\n    return [\n      <header class=\"code-header\">\n        <ul class=\"tab-menu\">\n          <li class={this.activeTab === 'identityVault' ? 'active' : 'innactive'}\n              onClick={() => this.activeTab = 'identityVault'}>Identity Vault</li>\n          <li class={this.activeTab === 'camera' ? 'active' : 'innactive'}\n              onClick={() => this.activeTab = 'camera'}>Camera</li>\n          <li class={this.activeTab === 'geolocation' ? 'active' : 'innactive'}\n              onClick={() => this.activeTab = 'geolocation'}>Geolocation</li>\n        </ul>,\n        <a href=\"https://ionicframework.com/docs/native\" target=\"_blank\">See All</a>\n      </header>,\n\n      <ul class=\"tab-content\">\n        {Object.keys(this.markup).map(key => (\n          <li class={this.activeTab === key ? 'active' : 'innactive'}>\n            <pre>\n              <code innerHTML={Prism.highlight(\n                this.markup[key].code, \n                Prism.languages.javascript, \n                'typescript'\n              )}></code>\n            </pre>\n          </li>\n        ))}\n      </ul>,\n\n      <ul class=\"preview-icon\">\n        {Object.keys(this.markup).map(key => (\n          <li class={this.activeTab === key ? 'active' : 'innactive'}>\n            <img src={`/img/homepage/icon-native-${key}.png`} \n                 title={key}\n                 loading=\"lazy\"\n                 width={this.markup[key].dimensions.x}\n                 height={this.markup[key].dimensions.y}/>\n          </li>\n        ))}\n      </ul>\n    ];\n  }\n\n  markup = {\n    identityVault: {\n      dimensions: {\n        x: 137,\n        y: 134\n      },\n      code: `\nlogout() {\n  // lock the vault when the user logs out\n  this.identityVault.lock();\n}\n\nonVaultReady() {\n  // unlock the vault using biometrics\n  this.identityVault.unlock();\n}\n\nonVaultUnlocked() {\n  // restore the session when the vault is unlocked\n  this.session = await this.identityVault.restoreSession();\n}`,\n    },\n\n    camera: {\n      dimensions: {\n        x: 119,\n        y: 125\n      },\n      code: `\nasync takeProfilePicture() {\n  // Take a picture or video, or load from the library\n  const picture = await this.camera.getPicture({\n    encodingType: this.camera.EncodingType.JPEG\n  });\n\n  // confirm that users choice of picture\n  const msg = \"Set as new profile picture?\";\n  const confirmed = await this.dialogs.confirm(msg);\n  if (confirmed) {\n    // upload the picture to the server\n    return this.userService.uploadProfilePic(picture);\n  }\n}`,\n    },\n\n    geolocation: {\n      dimensions: {\n        x: 122,\n        y: 122\n      },\n      code: `\nasync plotCurrentLocation() {\n  // get the users current position\n  const position = await this.geolocation.getCurrentPosition();\n\n  // grab latitude & longitude\n  const latitude = position.coords.latitude;\n  const longitude = position.coords.longitude;\n\n  // place a pin on map at users current coordinates\n  this.mapService.dropPin(latitude, longitude);\n}\n\n\n\n`,\n    }\n  }\n}\n"
  },
  {
    "path": "assets/stencil/components/hubspot-dynamic-content/hubspot-dynamic-content.scss",
    "content": "@import '../../vars';\n\nhubspot-dynamic-content {\n  transition: .2s opacity ease-out;\n  opacity: 0;\n  \n  &.ready {\n    opacity: 1;\n  }\n}\n\n\n\n\n"
  },
  {
    "path": "assets/stencil/components/hubspot-dynamic-content/hubspot-dynamic-content.tsx",
    "content": "import { Component, Element, Prop, h, State, Host } from '@stencil/core';\n\n@Component({\n  tag: 'hubspot-dynamic-content',\n  styleUrl: 'hubspot-dynamic-content.scss',\n  shadow: false\n})\nexport class HubspotDynamicContent {\n\n  @Prop() listId: string = 'default';\n  @State() isInList = false;\n  @Element() el;\n\n  API_URL = 'https://ionic-site-new.now.sh/api/hubspot/hasconverted';\n\n  async componentWillLoad() {\n    const hsutk = window['getCookie']('hubspotutk');\n\n    fetch(`${this.API_URL}?listId=${this.listId}&hsutk=${hsutk}`)\n      .then(response => response.json())\n      .then( data => {\n        this.isInList = data.found;\n      })\n      .catch(e => {\n        console.warn(e);\n      })\n      .finally( () => {\n        this.el.classList.add('ready');\n      });\n  }\n\n  render() {\n    // console.log('rendering', this.isInList);\n    return (\n      <Host>\n        {this.isInList ? \n          <slot name=\"default\" /> : \n          <slot name=\"alternate\" />\n        }\n      </Host>\n    );\n  }\n}\n"
  },
  {
    "path": "assets/stencil/components/hubspot-form/hubspot-form.scss",
    "content": "@import '../../vars';\n\nhubspot-form:not(.no-default-styles) {\n  display: block;\n\n  max-width: 420px;\n  margin: 0 auto;\n  font-weight: 400;\n\n  .hs-form-required {\n    display: none;\n  }\n\n  form {\n    fieldset.form-columns-2 .input {\n      margin-right: 12px;\n    }\n\n    &.stacked .field {\n      margin-bottom: 4px;\n    }\n  }\n\n  .hs-input,\n  input.hs-input,\n  select.hs-input {\n    border: 1px solid #e1e5ed;\n    // padding: 15px 5px 15px 18px;\n    font-weight: 500;\n    border-radius: 4px;\n    transition: border-color 0.2s;\n    box-shadow: none;\n    outline: none;\n    height: 30px;\n    padding: 6px 12px;\n    font-size: 14px;\n    line-height: 1.428571429;\n\n    &:placeholder {\n      color: var(--c-carbon-60);\n    }\n\n    &:valid {\n      // border-color: #B4BBC5;\n    }\n\n    &:hover,\n    &:focus,\n    &:active {\n      outline: none;\n      border-color: var(--c-ionic-brand);\n      box-shadow: none;\n    }\n\n    &.hs-input.error {\n      border-color: var(--c-red-60);\n    }\n  }\n\n  select.hs-input {\n    height: 44px;\n    width: calc(100% + 6px) !important;\n  }\n\n  textarea.hs-input {\n    padding: 12px;\n    width: calc(100% + 3px) !important;\n    min-height: 192px;\n  }\n\n  .hs_submit input.hs-button {\n    white-space: nowrap;\n    display: block;\n    margin: auto;\n    cursor: pointer;\n    font-size: 13px;\n    padding: 10px 18px 10px;\n    margin-right: -14px;\n    margin-top: -36px;\n    margin-left: auto;\n    margin-right: auto;\n    line-height: 23px;\n    float: right;\n    font-weight: 600;\n    letter-spacing: 0;\n    text-transform: none;\n    text-shadow: none;\n    background: var(--c-ionic-brand);\n    border: 0;\n    outline: 0;\n    transition: all 0.2s linear;\n    box-shadow: 0 1px 3px rgba(0, 0, 0, 0.12);\n\n    &:hover {\n      border: 0;\n      box-shadow: 0 4px 8px rgba(0, 0, 0, 0.12);\n      background: #5995fc;\n      color: #fff;\n      outline: 0;\n    }\n\n    &:active,\n    &:active:not(.inactive):not(.link),\n    &:focus:not(.inactive) {\n      border: 0;\n      color: #fff;\n      box-shadow: inset 0 1px 4px rgba(0, 0, 0, 0.2);\n      background: #5995fc;\n      outline: 0;\n    }\n  }\n\n  .submitted-message {\n    &:before {\n      content: '';\n      display: block;\n      background-image: url('/img/checkmark-light-green.svg');\n      background-repeat: no-repeat;\n      background-size: 100%;\n      width: 42px;\n      height: 42px;\n      margin-bottom: 12px;\n    }\n\n    font-size: 18px;\n    padding: 34px 0 78px;\n    text-align: center;\n    display: flex;\n    flex-direction: column;\n    align-items: center;\n    font-weight: 400;\n    color: #35af55;\n    max-width: 410px;\n    background-color: white;\n    margin: 0 auto;\n  }\n\n  .hubspot-override .hs-form {\n    font-family: var(--f-family-system);\n    // TODO these styles are only used on contributors landing,\n    // need to be applied to all hubspot forms\n\n    &,\n    & fieldset,\n    & iframe {\n      max-width: 100%;\n    }\n\n    // fieldset + fieldset,\n    // form.stacked .hs-form-field + .hs-form-field,\n    // fieldset .hs-form-field + .hs-form-field,\n    // form.stacked .hs-form-field + .hs-dependent-field {\n    //   margin-top: 26px;\n    // }\n    .hs-form-field {\n      margin-top: 16px;\n    }\n\n    label {\n      margin-bottom: 3px;\n    }\n\n    .hs-form-required {\n      display: inline;\n      color: #f45454;\n      margin-left: 4px;\n    }\n\n    .hs-richtext {\n      margin-top: 8px;\n    }\n\n    .hs-input,\n    input.hs-input {\n      transition: border 0.3s;\n      font-weight: 500;\n      background-color: #fff;\n      background-image: none;\n      border: 1px solid #ced6e3;\n      line-height: 1.39286;\n      border-radius: 4px;\n      padding: 11px 15px;\n      font-size: 15px;\n      margin-bottom: 0;\n      color: #505863;\n    }\n\n    input.hs-input[type='number'] {\n      float: none;\n    }\n\n    input.hs-input[type='text'],\n    input.hs-input[type='email'],\n    input.hs-input[type='tel'] {\n      height: auto;\n      width: 100%;\n      float: none;\n\n      &:focus {\n        border-color: #629eff;\n      }\n    }\n\n    input.hs-input[type='radio'],\n    input.hs-input[type='checkbox'] {\n      height: auto;\n      margin-right: 8px;\n    }\n\n    .hs-form-booleancheckbox-display {\n      display: flex;\n    }\n\n    select.hs-input {\n      height: 44px;\n\n      appearance: none;\n      -moz-appearance: none;\n      background-image: linear-gradient(45deg, transparent 50%, gray 50%),\n        linear-gradient(135deg, gray 50%, transparent 50%);\n      background-position: calc(100% - 20px) 50%, calc(100% - 15px) 50%;\n      background-size: 5px 5px, 5px 5px, 1px 1.5em;\n      background-repeat: no-repeat;\n    }\n\n    form fieldset.form-columns-2 .input {\n      margin: 0;\n    }\n\n    fieldset.form-columns-2 .hs-form-field {\n      padding: 0 10px;\n\n      &:first-child {\n        padding-left: 0;\n      }\n      &:last-child {\n        padding-right: 0;\n      }\n    }\n\n    .inputs-list,\n    .hs-error-msgs {\n      margin: 0;\n      padding: 0;\n      list-style-type: none;\n    }\n\n    .inputs-list.multi-container {\n      overflow: hidden;\n\n      li:nth-last-child(n + 6):first-child,\n      li:nth-last-child(n + 6):first-child ~ li {\n        width: 50%;\n        float: left;\n        padding-right: 11px;\n      }\n      li:nth-last-child(n + 6):first-child ~ li:nth-child(even) {\n        padding-right: 0;\n        padding-left: 11px;\n      }\n    }\n\n    .hs-form-checkbox-display {\n      margin-top: 4px;\n      display: flex;\n    }\n\n    .hs-form-checkbox-display .hs-input[type='checkbox'] {\n      margin-right: 10px;\n    }\n\n    .hs-form-checkbox-display span {\n      font-size: 15px;\n      color: #505863;\n    }\n\n    .hs-error-msgs {\n      padding: 5px 0 0;\n      font-size: 11px;\n      color: #f45454;\n    }\n\n    .hs_submit {\n      margin-top: 30px;\n    }\n\n    .hs_submit input.hs-button {\n      transition: all 0.3s ease;\n      margin: 0;\n      float: none;\n      margin: auto;\n      font-size: 16px;\n      font-weight: 700;\n      padding: 12px 20px;\n      vertical-align: middle;\n      color: white;\n      background: #3880ff;\n      box-shadow: 0 1px 3px rgba(0, 0, 0, 0.08), 0 2px 4px rgba(0, 0, 0, 0.12);\n      border-radius: 4px;\n      line-height: 18px;\n      letter-spacing: -0.01em;\n\n      &:hover {\n        box-shadow: 0 7px 14px rgba(0, 0, 0, 0.12),\n          0 3px 6px rgba(0, 0, 0, 0.08);\n        background: #4d8dfd;\n        color: #fff;\n        outline: none;\n      }\n    }\n\n    @media (max-width: $screen-xs-max) {\n      fieldset.form-columns-2 .hs-form-field {\n        width: 100%;\n        float: none;\n        padding: 0;\n\n        & + .hs-form-field {\n          margin-top: 24px;\n        }\n      }\n      .inputs-list.multi-container {\n        li:nth-last-child(n + 6):first-child,\n        li:nth-last-child(n + 6):first-child ~ li {\n          width: 100%;\n          float: none;\n          padding-right: 0;\n        }\n        li:nth-last-child(n + 6):first-child ~ li:nth-child(even) {\n          padding-left: 0;\n        }\n      }\n      .hs_submit input.hs-button {\n        width: 100%;\n      }\n    }\n  }\n\n  .hubspot-override--large .hs-form {\n    label:not(.hs-form-booleancheckbox-display) {\n      text-transform: uppercase;\n      font-size: 12px;\n      letter-spacing: 0.05em;\n      margin-bottom: 6px;\n    }\n\n    .hs-form-booleancheckbox-display {\n      font-size: 15px;\n    }\n\n    .hs-richtext {\n      p span,\n      p a {\n        font-size: 15px;\n      }\n    }\n\n    .hs-input,\n    input.hs-input {\n      padding: 16px 20px 18px;\n      font-size: 18px;\n    }\n\n    select.hs-input {\n      text-indent: 10px;\n      height: 60px;\n    }\n    @-moz-document url-prefix() {\n      select.hs-input {\n        text-indent: 0;\n      }\n    }\n\n    .hs-error-msgs label {\n      font-size: 11px;\n      letter-spacing: 0;\n      text-transform: none;\n    }\n\n    fieldset.form-columns-2 .hs-form-field {\n      padding: 0 20px;\n    }\n\n    .hs_submit {\n      text-align: center;\n      padding-top: 18px;\n    }\n\n    .hs_submit input.hs-button {\n      padding: 22px 27px 24px;\n      border-radius: 6px;\n    }\n\n    @media (max-width: $screen-xs-max) {\n      fieldset.form-columns-2 .hs-form-field {\n        padding: 0;\n      }\n    }\n  }\n\n  .hubspot-override--measure {\n    max-width: 748px;\n    margin-left: auto;\n    margin-right: auto;\n  }\n}\n"
  },
  {
    "path": "assets/stencil/components/hubspot-form/hubspot-form.tsx",
    "content": "import {\n  Component,\n  Host,\n  h,\n  Prop,\n  Event,\n  EventEmitter,\n  Element,\n  State,\n  Listen,\n} from '@stencil/core';\nimport { importResource } from '../../util/common';\n\ndeclare var window: any;\n\n@Component({\n  tag: 'hubspot-form',\n  styleUrl: 'hubspot-form.scss',\n})\nexport class HubspotForm {\n  @Element() el?: HTMLElement;\n  @Prop() formId?: string;\n  @Prop() portalId = '3776657';\n  @Prop() goToWebinarKey?: string;\n  @Prop() ajax = false;\n  @Prop() noDefaultStyles = false;\n  @Prop() submitText = undefined;\n\n  @Event() formSubmitted?: EventEmitter;\n\n  @State() error: string | null = null;\n\n  scriptEl?: HTMLScriptElement;\n\n  componentDidLoad() {\n    importResource(\n      { propertyName: 'hbspt', link: '//js.hsforms.net/forms/v2.js' },\n      this.handleScriptLoad,\n    );\n  }\n\n  @Listen('message', { target: 'window' })\n  handleWindowMessage(e: MessageEvent) {\n    if (e.data && e.data.formGuid && this.ajax) {\n      // Don't let hubspot do anything\n      e.preventDefault();\n      e.stopImmediatePropagation();\n\n      if (e.data.accepted === true) {\n        this.formSubmitted?.emit();\n      } else if (e.data.accepted === false) {\n        this.error =\n          'Unable to submit. Please check your information and try again.';\n      } else {\n        this.error = '';\n      }\n    }\n  }\n\n  handleScriptLoad = () => {\n    requestAnimationFrame(() => {\n      window.hbspt.forms.create({\n        portalId: '3776657',\n        formId: this.formId,\n        target: `#${this.getFormElementId()}`,\n        goToWebinarWebinarKey: this.goToWebinarKey || '',\n        css: '',\n        onFormReady: this.handleFormReady,\n        translations: {\n          en: {\n            submitText: this.submitText,\n          }\n        }\n      });\n    });\n  };\n\n  handleFormReady = (_e: any, _c: any) => {\n    // Don't override the form if not using the ajax method\n    if (!this.ajax) {\n      return;\n    }\n\n    const formEl = this.el?.querySelector(\n      `#${this.getFormElementId()} form`,\n    ) as HTMLFormElement;\n    if (!formEl) {\n      return;\n    }\n\n    formEl.addEventListener('submit', (e: Event) => {\n      e.preventDefault();\n      e.stopPropagation();\n      return false;\n    });\n\n    formEl\n      .querySelector('input[type=\"submit\"]')\n      ?.addEventListener('click', e => {\n        this.submitForm(formEl);\n        e.preventDefault();\n      });\n  };\n\n  getFormElementId = () => `hbspt-form-${this.formId}`;\n\n  submitForm = async (form: HTMLFormElement) => {\n    const data = new FormData(form);\n\n    try {\n      const ret = await fetch(form.getAttribute('action')!, {\n        method: 'POST',\n        body: data,\n      });\n\n      if (ret.status !== 200) {\n        this.error = 'Error submitting form';\n      } else {\n        // The response from hubspot is a script tag. I know, it's truly magnificent\n        const frame = document.createElement('iframe');\n        frame.srcdoc = await ret.text();\n        document.body.appendChild(frame);\n      }\n    } catch (e) {\n      this.error = 'Unable to submit form';\n    }\n  };\n\n  render() {\n    return (\n      <Host class={{\n        'no-default-styles': this.noDefaultStyles,\n      }}>\n        <div class=\"hubspot-override\">\n          <div id={this.getFormElementId()} />\n        </div>\n        {this.error ? <div class=\"hs-error-msgs\">{this.error}</div> : null}\n      </Host>\n    );\n  }\n}\n"
  },
  {
    "path": "assets/stencil/components/icon-external/icon-external.scss",
    "content": "@import '../../vars';\n\nicon-external {\n  color: #a6b8d2;\n  width: .8em;\n  height: .8em;\n  display: inline-block;\n\n  svg {\n    fill: currentColor;\n\n    .new-tab__box {\n      opacity: .5;\n    }\n\n    .new-tab__arrow {\n      transition: .2s transform ease-out, .2s fill ease;\n      will-change: trasnform, fill;\n    }\n  }\n}\n\na:hover icon-external,\nicon-external:hover {\n  color: $blue;\n\n  .new-tab__arrow {\n    transform: translate(1px, -1px);\n  }\n}\n"
  },
  {
    "path": "assets/stencil/components/icon-external/icon-external.tsx",
    "content": "import { Component, h } from '@stencil/core';\n\n@Component({\n  tag: 'icon-external',\n  styleUrl: 'icon-external.scss',\n  shadow: false\n})\nexport class IconExternal {\n  render() {\n    return (\n      <svg class=\"new-tab\" viewBox=\"0 0 12 12\" data-ssrc=\"59.1\">\n        <g transform=\"translate(0,1)\" data-ssrc=\"59.0\">\n          <rect class=\"new-tab__box\"\n                x=\"0\"\n                y=\"2\"\n                width=\"9\"\n                height=\"9\"\n                rx=\"1.5\"\n                data-ssrc=\"59.0.\"></rect>\n          <path class=\"new-tab__arrow\"\n                d=\"M9.18198052,1 L6.5,1 L6.5,0 L11,0 L11,1 L11,4.5 L10,4.5 L10,1.59619408 L4.02512627,7.57106781 L3.31801948,6.86396103 L9.18198052,1 Z\" data-ssrc=\"59.1.\"></path>\n        </g>\n      </svg>\n    );\n  }\n}\n"
  },
  {
    "path": "assets/stencil/components/ionic-appflow-activatior/activator-icons.tsx",
    "content": "import { h } from '@stencil/core';\n\nconst iconColors: any = {\n  active: [\n    '#6C89F7', '#8AB2FF', '#ABC7FE', '#DAEDFC'\n  ],\n  default: [\n    '#E3EFF9', '#9CB2F8', '#B7CBF1', '#C4D7FA'\n  ]\n}\n\nexport const publishIcon: any = (state = 'default') => (\n  <svg width=\"48\" height=\"48\" viewBox=\"0 0 48 48\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n    <circle cx=\"24\" cy=\"24\" r=\"24\" fill={iconColors[state][0]}/>\n    <path d=\"M37.5 13C37.5 12.4477 37.0523 12 36.5 12H27.1282C26.6827 12 26.4596 12.5386 26.7746 12.8536L36.6464 22.7254C36.9614 23.0404 37.5 22.8173 37.5 22.3718V13Z\" fill=\"#B2CEFF\"/>\n    <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M23.4267 23.3122C21.6604 26.895 20.74 30.9366 20.6261 35.6052C20.6126 36.1573 21.0618 36.6053 21.614 36.6053H24.4386C24.9909 36.6053 25.437 36.1569 25.4523 35.6049C25.5643 31.5688 26.3607 28.2717 27.754 25.4455C29.1338 22.6466 31.1549 20.1964 33.8805 17.9059C34.3033 17.5505 34.3777 16.9227 34.0348 16.4897L32.281 14.2756C31.9381 13.8427 31.308 13.7687 30.8839 14.1225C27.7012 16.7774 25.1771 19.7616 23.4267 23.3122Z\" fill=\"#B2CEFF\"/>\n    <path d=\"M27.9875 35.9753C27.8705 31.2109 26.927 27.0438 25.0922 23.3293C23.2739 19.6481 20.6598 16.5731 17.4019 13.8604C16.5338 13.1376 15.2644 13.3014 14.5829 14.1602L12.8395 16.3569C12.147 17.2295 12.3108 18.4711 13.1344 19.1621C15.7648 21.3691 17.682 23.7009 18.9846 26.3379C20.2997 29.0003 21.0675 32.1342 21.1763 36.0275C21.2064 37.1017 22.0772 38 23.1897 38H26C27.0981 38 28.0153 37.1051 27.9875 35.9753Z\" fill={iconColors[state][3]} stroke={iconColors[state][0]} stroke-width=\"2\"/>\n    <path d=\"M10 13C10 12.4477 10.4477 12 11 12H20.3718C20.8173 12 21.0404 12.5386 20.7254 12.8536L10.8536 22.7254C10.5386 23.0404 10 22.8173 10 22.3718V13Z\" fill={iconColors[state][3]}/>\n    <circle cx=\"24\" cy=\"34\" r=\"6\" fill={iconColors[state][3]} stroke={iconColors[state][0]} stroke-width=\"2\"/>\n  </svg>\n);\n\nexport const updatesIcon: any = (state = 'default') => (\n  <svg width=\"48\" height=\"48\" viewBox=\"0 0 48 48\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n    <circle cx=\"24\" cy=\"24\" r=\"24\" fill={iconColors[state][0]}/>\n    <path d=\"M35.5975 18.8571H12.4025C11.1713 18.8571 10.4644 20.2585 11.1963 21.2486L22.7937 36.9393C23.3933 37.7506 24.6067 37.7506 25.2063 36.9393L36.8037 21.2486C37.5356 20.2585 36.8287 18.8571 35.5975 18.8571Z\" fill={iconColors[state][1]}/>\n    <path d=\"M32.1075 11.1428H15.8925C14.65 11.1428 13.9462 12.567 14.701 13.554L22.8085 24.1561C23.4088 24.9412 24.5912 24.9412 25.1915 24.1561L33.299 13.554C34.0538 12.567 33.35 11.1428 32.1075 11.1428Z\" fill={iconColors[state][3]}/>\n  </svg>\n);\n\nexport const buildsIcon: any = (state = 'default') => (\n  <svg width=\"48\" height=\"48\" viewBox=\"0 0 48 48\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n    <circle cx=\"24\" cy=\"24\" r=\"24\" fill={iconColors[state][0]}/>\n    <path d=\"M24 10.2858C23.7602 10.2858 23.5204 10.3388 23.3017 10.4451L11.0956 16.3707C10.5978 16.6123 10.2857 17.0911 10.2857 17.613V29.2302C10.2857 29.7522 10.5978 30.2309 11.0956 30.4726L23.3017 36.3982C23.5204 36.5044 23.7602 36.5575 24 36.5575V10.2858Z\" fill={iconColors[state][3]}/>\n    <path d=\"M24 10.2858C24.2398 10.2858 24.4796 10.3388 24.6983 10.4451L36.9044 16.3707C37.4022 16.6123 37.7143 17.0911 37.7143 17.613V29.2302C37.7143 29.7522 37.4022 30.2309 36.9044 30.4726L24.6983 36.3982C24.4796 36.5044 24.2398 36.5575 24 36.5575V10.2858Z\" fill={iconColors[state][3]}/>\n    <path d=\"M24 21.8572C24.8571 21.8572 25.7143 21.4314 25.7143 21.4314L35.5825 16.8486C36.5767 16.3869 37.7142 17.1129 37.7142 18.2091V29.8664C37.7142 31.034 37.0368 32.0955 35.9778 32.5873L25.7143 37.3537C25.7143 37.3537 24.8571 37.7143 24 37.7143V21.8572Z\" fill={iconColors[state][1]}/>\n    <path d=\"M24 21.8572C23.1429 21.8572 22.2797 21.4287 22.2797 21.4287L12.4175 16.8486C11.4233 16.3869 10.2857 17.1129 10.2857 18.2091V29.8664C10.2857 31.034 10.9632 32.0955 12.0221 32.5873L22.2857 37.3537C22.2857 37.3537 23.1429 37.7143 24 37.7143V21.8572Z\" fill={iconColors[state][2]}/>\n  </svg>\n);\n\nexport const automationsIcon: any = (state = 'default') => (\n  <svg width=\"48\" height=\"48\" viewBox=\"0 0 48 48\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n    <circle cx=\"24\" cy=\"24\" r=\"24\" fill={iconColors[state][0]}/>\n    <rect x=\"12\" y=\"12\" width=\"24\" height=\"24\" rx=\"6\" fill={state === 'active' ? iconColors[state][1] : iconColors[state][3]}/>\n    <path d=\"M32.0488 21.6741H24.8049L28.313 8.0895C28.3733 7.76242 28.005 7.57344 27.831 7.84237L15.5324 25.3519C15.278 25.7589 15.519 26.3258 15.9542 26.3258H23.1981L19.6899 39.9104C19.6297 40.2375 19.9979 40.4265 20.172 40.1575L32.4706 22.6553C32.7183 22.241 32.484 21.6741 32.0488 21.6741Z\" fill={state === 'active' ? iconColors[state][3] : iconColors[state][1]}/>\n  </svg>\n);"
  },
  {
    "path": "assets/stencil/components/ionic-appflow-activatior/ionic-appflow-activatior.tsx",
    "content": "import { Component, State, Listen, Element, h } from '@stencil/core';\nimport { TweenLite } from \"gsap/TweenLite\";\nimport { publishIcon, updatesIcon, buildsIcon, automationsIcon } from './activator-icons'\n\nconst screens: any = [\n  {\n    name: 'App Publishing',\n    description: 'Publish directly to the Apple and Google App Stores.',\n    icon: publishIcon,\n    image: '/img/appflow/screen-app-publishing.png'\n  },\n  {\n    name: 'Live Updates',\n    description: 'Deploy live app updates in real-time.',\n    icon: updatesIcon,\n    image: '/img/appflow/screen-live-updates.png'\n  },\n  {\n    name: 'Native Builds',\n    description: 'Compile native app binaries in the cloud.',\n    icon: buildsIcon,\n    image: '/img/appflow/screen-native-builds.png'\n  },\n  {\n    name: 'Automations',\n    description: 'Fully automate your app delivery pipeline.',\n    icon: automationsIcon,\n    image: '/img/appflow/screen-automations.png'\n  },\n]\n\n\n@Component({\n  tag: 'ionic-appflow-activator',\n  styleUrl: 'ionic-appflow-activator.scss',\n  shadow: false\n})\nexport class IonicAppflowActivator {\n  @Element() el: HTMLElement;\n\n  @State() currentScreen: number = null;\n  @State() isPaused: boolean = false;\n\n  duration = 6;//seconds\n  indicators = [];\n  tween: any = null;\n\n  componentDidLoad() {\n    this.currentScreen = 0;\n    setTimeout(this.start.bind(this), 2000);\n  }\n\n  start() {\n    const indicator = this.indicators[this.currentScreen];\n\n    TweenLite.set(indicator, {\n      width: 0,\n      alpha: 1\n    });\n\n    this.tween = TweenLite.to(indicator, this.duration, {\n      width: '100%',\n      onComplete: () => {\n        this.increment();\n      }\n    });\n  }\n\n  override(index) {\n    if (this.currentScreen === index) return;\n    this.tween.pause();\n    this.increment(index);\n  }\n\n  increment(index?) {\n    TweenLite.to(this.indicators[this.currentScreen], 0.4, {\n      alpha: 0\n    });\n\n    if (index !== undefined) {\n      this.currentScreen = index;\n      this.start();\n      return;\n    }\n\n    this.currentScreen = (this.currentScreen >= screens.length - 1) ? 0 : this.currentScreen + 1;\n    this.start();\n  }\n\n  @Listen('scroll', {target: 'window'})\n  onScroll() {\n    if (this.tween === null) return false;\n    const rect = this.el.getBoundingClientRect();\n    const isVisible = (rect.top <= window.innerHeight) && (rect.bottom >= 0);\n\n    if (isVisible && this.isPaused) {\n      this.tween.play();\n      this.isPaused = false;\n    }\n    if (!isVisible && !this.isPaused) {\n      this.tween.pause();\n      this.isPaused = true;\n    }\n  }\n\n  render() {\n    return ([\n      <div class=\"app-screenshot\">\n        {screens.map((screen, i) =>\n          <div class={`screen ${i === this.currentScreen ? 'animate-in' : 'animate-out'}`}>\n            <img src={screen.image}/>\n          </div>\n        )}\n      </div>,\n      <div class=\"nav\">\n        <div class=\"container\">\n          <ul>\n            {screens.map((screen, i) =>\n              <li\n                class={(i === this.currentScreen) ? 'active' : 'default'}\n                onMouseEnter={() => this.override(i)}>\n                {screen.icon(i === this.currentScreen ? 'active' : 'default')}\n                <h5>{screen.name}</h5>\n                <p>{screen.description}</p>\n                <div class=\"indicator\" ref={(el) => this.indicators[i] = el}></div>\n              </li>\n            )}\n          </ul>\n        </div>\n      </div>\n    ]);\n  }\n}\n\n"
  },
  {
    "path": "assets/stencil/components/ionic-appflow-activatior/ionic-appflow-activator.scss",
    "content": "@import '../../vars';\n\nionic-appflow-activator {\n  overflow: hidden;\n\n  .nav {\n    width: 100%;\n    background: #fff;\n    box-shadow: 0px -12px 24px rgba(2, 8, 20, 0.06), 0px -4px 8px rgba(2, 8, 20, 0.02);\n    z-index: 20;\n    position: relative;\n    border-bottom: 1px solid #F0F0F0;\n  }\n\n  ul {\n    position: relative;\n    z-index: 10;\n    display: flex;\n    width: 100%;\n    margin: 0;\n    padding: 0;\n    overflow: hidden;\n  }\n\n  li {\n    padding-top: 24px;\n    display: inline-block;\n    position: relative;\n    list-style: none;\n    flex: 1;\n    cursor: default;\n  }\n\n  li + li {\n    margin-left: 56px;\n  }\n\n  li {\n    h5,\n    p {\n      font-family: $font-family-inter;\n      transition: color 0.2s;\n    }\n\n    h5 {\n      display: block;\n      font-size: 14px;\n      line-height: 22px;\n      letter-spacing: 0.08em;\n      text-transform: uppercase;\n      font-weight: 600;\n      color: #616E7E;\n    }\n\n    p {\n      color: #92A1B3;\n      margin-bottom: 24px;\n    }\n\n    svg {\n      transition: transform 0.2s;\n    }\n  }\n\n  li.active {\n    h5 {\n      color: #010610;\n    }\n    p {\n      color: #5B708B;\n    }\n\n    svg {\n      transform: translateY(-2px);\n    }\n  }\n\n  .indicator {\n    position: absolute;\n    bottom: 0;\n    left: 0;\n    height: 2px;\n    width: 0%;\n    background-color: #6C89F7;\n  }\n\n  .app-screenshot {\n    position: relative;\n    z-index: 5;\n\n    .screen {\n      border-radius: 16px;\n      overflow: hidden;\n      position: absolute;\n      top: 0;\n      width: 100%;\n      opacity: 0;\n      transform: translateY(6px);\n      animation-fill-mode: forwards;\n\n      &.animate-in {\n        animation-timing-function: cubic-bezier(0.19, 1, 0.22, 1);\n        animation-duration: 1s;\n        animation-name: animateIn;\n        animation-delay: 0.1s;\n        z-index: 15;\n      }\n\n      &.animate-out {\n        animation-timing-function: ease;\n        animation-duration: 0.6s;\n        animation-name: animateOut;\n        z-index: 10;\n      }\n    }\n\n    img {\n      vertical-align: bottom;\n      width: 100%;\n    }\n  }\n}\n\n\n@keyframes animateIn {\n  from {\n    // transform: translateY(6px);\n    opacity: 0;\n  }\n\n  to {\n    // transform: translateY(0);\n    opacity: 1;\n  }\n}\n\n@keyframes animateOut {\n  from {\n    // transform: translateY(0) scale(1);\n    opacity: 1;\n  }\n\n  to {\n    // transform: translateY(4px) scale(0.98);\n    opacity: 0;\n  }\n}"
  },
  {
    "path": "assets/stencil/components/ionic-bar-chart/ionic-bar-chart.scss",
    "content": "@import '../../vars';\n\nionic-bar-chart {\n  font-style: normal;\n  font-weight: normal;\n  line-height: normal;\n  font-size: 16px;\n  display: block;\n  letter-spacing: -0.04em;\n\n  .bar-container {\n    width: 100%;\n    padding-right: 50px;\n    max-width: 697px;\n  }\n\n  .bar {\n    height: 12px;\n    position: relative;\n    border-radius: 2px;\n\n    span {\n      position: absolute;\n      right: -40px;\n      font-weight: 500;\n      top: -3px;\n    }\n  }\n\n  strong {\n    margin-top: 10px;\n    display: block;\n    font-weight: 400;\n    margin-bottom: 34px;\n  }\n}"
  },
  {
    "path": "assets/stencil/components/ionic-bar-chart/ionic-bar-chart.tsx",
    "content": "import {\n  Component,\n  // Element,\n  Prop,\n  // State,\n  h\n} from '@stencil/core';\n\n@Component({\n  tag: 'ionic-bar-chart',\n  styleUrl: 'ionic-bar-chart.scss',\n  shadow: false\n})\nexport class IonicBarChart {\n  @Prop() data:string;\n  @Prop() color:string;\n\n  constructor() {\n  }\n\n  componentWillLoad() {\n  }\n\n  componentDidLoad() {\n  }\n\n  hexToRgb(hex) {\n    // Expand shorthand form (e.g. \"03F\") to full form (e.g. \"0033FF\")\n    var shorthandRegex = /^#?([a-f\\d])([a-f\\d])([a-f\\d])$/i;\n    hex = hex.replace(shorthandRegex, function(_, r, g, b) {\n        return r + r + g + g + b + b;\n    });\n\n    var result = /^\\s?#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i.exec(hex);\n    return result ? \n      `${parseInt(result[1], 16)}, ${parseInt(result[2], 16)}, ` +\n      `${parseInt(result[3], 16)}` : null;\n}\n\n  prepareData() {\n    let max = 0;\n    const color = this.color ? this.color.split(',') : ['#92E1A7', '#51A7FF'];\n    const dataObj = JSON.parse(this.data.replace(/'/g, '\"'));\n    return Object.keys(dataObj).map((key) => {\n      if (max < dataObj[key]) {\n        max = dataObj[key];\n      }\n      return {\n        name: key,\n        value: parseInt(dataObj[key], 10)\n      }\n    }).map((item, i) => { \n      return {\n        ...item,\n        styles: {\n          bar: {\n            width:`${Math.round((item.value/max) * 100) }%`,\n            background: i > 1 ? \n              // semi-greyed-out after the first two\n              `rgba(91,112,139) linear-gradient(to right, ${color.map(item =>\n                `rgba(${this.hexToRgb(item)}, .2)`\n              ).join(', ')})` : \n              `linear-gradient(to right, ${color.join(', ')})`\n          },\n          text: {\n            color: i > 1 ? '#5B708B' : color[color.length - 1]\n          }\n        }\n      }\n    });\n\n  }\n\n  render() {\n    return [\n      <figure>\n        {this.prepareData().map(item => { \n          return [\n          <div class=\"bar-container\">\n            <div class=\"bar\" style={item.styles.bar}>\n              <span style={item.styles.text}>{item.value}%</span>\n            </div>\n          </div>,\n          <strong>{item.name}</strong>\n        ]})}\n      </figure>\n    ];\n  }\n}\n"
  },
  {
    "path": "assets/stencil/components/ionic-button/ionic-button.scss",
    "content": "@import '../../vars';\n@mixin colorize($color, $dark: true) {\n  background: $color;\n\n  @if $dark {\n    color: white;\n\n    &:hover {\n      background: lighten($color, 5);\n    }\n\n    &:active {\n      background: darken($color, 5);\n    }\n  } @else {\n\n    &:active {\n      background: darken($color, 2);\n    }\n  }\n}\n\nionic-button {\n  button {\n    border-radius: 4px;\n    padding: 11px 15px 9px;\n    font-size: 16px;\n    font-weight: 500;\n    box-shadow: 0 1px 3px rgba(0,0,0,.1);\n    border: 0;\n    outline: none;\n    height: 100%;\n    transition:\n      background-color .2s,\n      border-color .3s,\n      box-shadow .3s,\n      color .3s;\n\n    &.default { @include colorize($blue) }\n    &.white {\n      @include colorize(white, false);\n      border-color: $lightgrey;\n      color: $blue;\n    }\n\n    &:hover {\n      box-shadow: 0 2px 5px rgba(0,0,0,.12);\n    }\n\n    &:active {\n      box-shadow: inset 0 1px 2px rgba(0,0,0,.1);\n    }\n\n    &:disabled {\n      background: $lightgrey;\n      color: white;\n      box-shadow: none;\n    }\n  }\n}\n\n\n\n\n"
  },
  {
    "path": "assets/stencil/components/ionic-button/ionic-button.tsx",
    "content": "import { Component, Prop, h } from '@stencil/core';\n\n@Component({\n  tag: 'ionic-button',\n  styleUrl: 'ionic-button.scss',\n  shadow: false\n})\nexport class IonicButton {\n\n  @Prop() color: string = 'default';\n  @Prop() type: string = 'button';\n  @Prop() disabled: boolean = false;\n\n  render() {\n    if (this.disabled){\n      return (\n        <button\n          class={this.color}\n          type={this.type}\n          disabled>\n          <slot/>\n        </button>\n      );\n    }\n\n    return (\n      <button\n        class={this.color}\n        type={this.type}>\n\n        <slot/>\n      </button>\n    );\n  }\n}\n"
  },
  {
    "path": "assets/stencil/components/ionic-newsletter-signup/ionic-newsletter-signup.scss",
    "content": "@import '../../vars';\n\nionic-newsletter-signup {\n\n  form {\n    position: relative;\n    display: flex;\n    border-collapse: separate;\n    width: 100%;\n    height: 40px;\n\n    @media (max-width: $screen-sm-max) {\n      max-width: calc(100% - 340px);\n    }\n\n    @media (max-width: $screen-xs-max) {\n      float: none;\n      max-width: 100%;\n      margin-top: 15px;\n    }\n\n    &.dark {\n      input {\n        color: white;\n        box-shadow: none;\n\n        &:hover {\n          box-shadow: 0 1px 3px rgba(0, 0, 0, .15);\n        }\n\n        &:focus {\n          box-shadow: 0 1px 3px rgba(0, 0, 0, .1);\n        }\n\n        &::placeholder {\n          color: #bbceef;\n        }\n      }\n    }\n\n    &.lg {\n      height: 48px;\n\n      input {\n        padding: 1px 17px 0;\n        font-size: 14px;\n      }\n\n      ionic-button button {\n        padding: 11px 12px;\n      }\n    }\n\n    &.arrow {\n      border-radius: 6px;\n      box-shadow: 0 1px 3px rgba(0,16,44,.08), 0 2px 4px rgba(0,16,44,.12);\n      transition: .15s box-shadow ease;\n\n      &:hover {\n        box-shadow: 0 7px 14px rgba(0,16,44,.12), 0 3px 6px rgba(0,16,44,.08);\n      }\n\n      input {\n        border-radius: 6px 0 0 6px;\n        box-shadow: none;\n\n\n\n        &::placeholder {\n          color: #a8b0be;\n          font-weight: 400;\n        }\n      }\n\n      ionic-button button {\n        background: #f0f5ff;\n        color: #3880ff;\n        font-size: 23px;\n        display: flex;\n        align-items: center;\n        border-radius: 0 6px 6px 0;\n\n        &:hover {\n          background: darken(#f0f5ff, 1);\n        }\n      }\n\n      @media (max-width: $screen-sm-max) {\n        max-width: 100%;\n      }\n    }\n\n    &.homepage {\n      height: 48px;\n      border-radius: 6px;\n      background: white;\n      border: 1px solid #E9EDF3;\n      transition: .2s border-color, .2s background-color;\n\n      &:hover {\n        border-color: #73A6FF;\n        background: white;\n      }\n\n      svg {\n        position: absolute;\n        top: 16px;\n        left: 16px;\n      }\n\n      input {\n        border-radius: 6px 0 0 6px;\n        box-shadow: none;\n        padding-left: 46px;\n\n\n        &::placeholder {\n          color: #a8b0be;\n          font-weight: 400;\n        }\n      }\n\n      ionic-button button {\n        background: transparent;\n        color: #7CABFF;\n        font-size: 23px;\n        display: flex;\n        align-items: center;\n        box-shadow: none;\n        border-radius: 0 6px 6px 0;\n\n        &:hover,\n        &:active,\n        &:focus {\n          color: darken(#7CABFF, 10);\n          background: transparent;\n        }\n      }\n\n      @media (max-width: $screen-sm-max) {\n        max-width: 100%;\n      }\n    }\n  }\n\n  input {\n    border: none;\n    background: rgba(white, .2);\n    border-radius: 4px 0 0 4px;\n    font-size: 13px;\n    color: $dark;\n    box-shadow: none;\n    font-weight: 500;\n    height: 100%;\n    outline: 0;\n    flex-grow: 1;\n    padding: 0px 16px 1px;\n    box-shadow: 0 1px 3px rgba(0, 0, 0, .1);\n    transition: .2s background, .2s box-shadow;\n\n    &:hover {\n      box-shadow: 0 1px 3px rgba(0, 0, 0, .15);\n    }\n\n    &:focus {\n      box-shadow: none;\n      background: rgba(white,.25);\n      box-shadow: inset 0 0 2px rgba(0, 0, 0, .1);\n    }\n\n    &::placeholder {\n      padding-left: 0;\n      color: #a1a9b6;\n    }\n  }\n\n  ionic-button {\n    height: 100%;\n\n    button {\n      border-top-left-radius: 0;\n      border-bottom-left-radius: 0;\n      font-weight: 500;\n      font-size: 14px;\n      height: 100%;\n      padding: 8px 9px 10px;\n    }\n  }\n}\n"
  },
  {
    "path": "assets/stencil/components/ionic-newsletter-signup/ionic-newsletter-signup.tsx",
    "content": "import { Component, Prop, State, h } from '@stencil/core';\nimport { EmailOutlineIcon } from '../../icons';\n\n@Component({\n  tag: 'ionic-newsletter-signup',\n  styleUrl: 'ionic-newsletter-signup.scss',\n  shadow: false\n})\nexport class IonicNewsletterSignup {\n  @Prop() srLabel = {\n    id: Math.random().toString(36).substring(2),\n    text: 'enter email to join newsletter',\n  } \n  @Prop() placeholder: string = 'Email address';\n  @Prop() buttonText: string = 'Subscribe';\n  @Prop() darkMode: boolean = false;\n  @Prop() homepageMode: boolean = false;\n  @Prop() arrowMode: boolean = false;\n  @Prop() lg: boolean = false;\n  @Prop() kind: string = 'default';\n\n  @State() isLoading: boolean = false;\n  @State() hasSubmitted: boolean = false;\n  @State() email: string = null;\n\n  hsFormIds = {\n    default: '76e5f69f-85fd-4579-afce-a1892d48bb32',\n    podcast: ''\n  }\n\n  handleEmailChange(event) {\n    this.email = event.target.value;\n  }\n\n  handleSubmit(e) {\n    e.preventDefault();\n    const email = this.email;\n    this.isLoading = true;\n    var xhr = new XMLHttpRequest();   // new HttpRequest instance\n    xhr.open('POST', 'https://ionicframework.com/api/v1/newsletter');\n    xhr.setRequestHeader(\"Content-Type\", \"application/json;charset=UTF-8\");\n    xhr.onreadystatechange = () => {\n      if (xhr.readyState === 4 && xhr.status === 200) {\n        this.isLoading = false;\n        var json = JSON.parse(xhr.responseText);\n        this.hasSubmitted = json.ok;\n        this.hubspotIdentify(email);\n      }\n    };\n    xhr.send(JSON.stringify({ email: this.email, podcast: this.kind === 'podcast'}));\n  }\n\n  hubspotIdentify(email: string) {\n    const _hsq = window['_hsq'] = window['_hsq'] || [];\n    _hsq.push([\"identify\",{\n      email: email\n    }]);\n     _hsq.push([\"trackEvent\", {\n        id: \"Signed Up for Newsletter\",\n        value: true\n    }]);\n\n    // Send \n    var xhr = new XMLHttpRequest();\n    var url = [\n      'https://api.hsforms.com/submissions/v3/integration/submit',\n      '3776657',\n      '76e5f69f-85fd-4579-afce-a1892d48bb32'].join('/');\n\n    const hutkMatch = document.cookie.match && document.cookie.match(/hubspotutk=(.*?);/)\n    const hutk = hutkMatch ? hutkMatch[1] : ''\n\n    xhr.open(\"POST\", url);\n    xhr.setRequestHeader(\"Content-Type\", \"application/json;charset=UTF-8\");\n    xhr.onreadystatechange = () => {\n      if (xhr.readyState === 4 && xhr.status === 200) {\n        var json = JSON.parse(xhr.responseText);\n        console.log(json)\n      }\n    };\n    xhr.send(JSON.stringify({ \n      fields: [{\n        name: 'email',\n        value: this.email\n      }],\n      context: {\n        hutk,\n        pageUri: window.location.href,\n        pageName: document.title\n      }\n    }));\n  }\n\n  getFormClass() {\n    let str = this.darkMode ? 'dark' : '';\n    if (this.arrowMode) {\n      str += ' arrow';\n    }\n    if (this.homepageMode) {\n      str += ' homepage';\n    }\n    if (this.lg) {\n      str += ' lg';\n    }\n    return str;\n  }\n\n  render() {\n    return (\n      <form\n        onSubmit={(e) => this.handleSubmit(e)}\n        class={this.getFormClass()}>\n\n        {this.homepageMode ? <EmailOutlineIcon/> : ''}\n        <label id={this.srLabel.id} class=\"sr-only\">{this.srLabel.text}</label>\n\n        <input\n          aria-labelledby={this.srLabel.id}\n          name=\"email\"\n          type=\"email\"\n          value={this.email}\n          onInput={() => this.handleEmailChange(event)}\n          disabled={this.isLoading}\n          placeholder={this.placeholder}\n          required />\n\n        <ionic-button\n          color={this.darkMode ? 'white' : 'default'}\n          type=\"submit\"\n          disabled={this.isLoading || this.hasSubmitted}>\n\n          {this.hasSubmitted ? 'Added!' :\n            this.arrowMode || this.homepageMode ?\n              <ion-icon name=\"md-arrow-forward\"></ion-icon> : this.buttonText\n          }\n        </ionic-button>\n      </form>\n    );\n  }\n}\n"
  },
  {
    "path": "assets/stencil/components/ionic-search/ionic-search.scss",
    "content": "@import '../../vars';\n\n@keyframes ionic-search-scan {\n  from {left: 0;}\n  to {left: 100%;}\n}\n\n@keyframes ionic-search-scan-mobile {\n  from {left: calc(0% + 8px);}\n  to {left: calc(100% - 16px);}\n}\n\nionic-search {\n  display: block;\n  display: inline-block;\n\n  svg {\n    fill: $darkgrey;\n  }\n\n  ion-icon {\n    font-size: 18px;\n    cursor: pointer;\n\n    &:hover svg {\n      fill: #3880ff;\n    }\n  }\n\n  .search {\n    right: 115px;\n    font-size: 18px;\n    margin-top:7px;\n    color: white;\n    transition: .2s opacity, .4s transform cubic-bezier(0.23, 1, 0.32, 1);\n\n    &.active {\n      cursor: default;\n      opacity: 0;\n      transform: scale3d(0, 0, 1);\n    }\n\n    svg {\n      fill: $grey;\n      width: 18px;\n      height: 18px;\n    }\n  }\n\n  .search-static {\n    left: 15px;\n    z-index: 12;\n    opacity: 0;\n    transform: translate3d(0, -25px, 0);\n    transition: .4s transform cubic-bezier(0.23, 1, 0.32, 1), .1s opacity;\n  }\n\n  .close {\n    right: 11px;\n    z-index: 12;\n    opacity: 0;\n    pointer-events: none;\n    transition: .3s opacity;\n\n    &.active {\n      pointer-events: all;\n      opacity: 1;\n      transform: none;\n    }\n  }\n\n  input {\n    width: 100%;\n    margin-left: 0;\n    padding-left: 40px;\n    padding-right: 40px;\n    outline: none;\n    border: none;\n    z-index: 12;\n    background: white;\n    border-radius: 6px;\n    padding: 14px 30px 14px 41px;\n    font-size: 14px;\n    letter-spacing: -.01em;\n    position: relative;\n    opacity: 0;\n    transform: translate3d(0, -15px, 0);\n    transition: .2s opacity, .4s transform cubic-bezier(0.23, 1, 0.32, 1);\n\n    &::placeholder {\n      color: $grey;\n    }\n\n    &:focus {\n      // border-color: #eee;\n    }\n  }\n\n  .slot {\n    .hidden {\n      display: none;\n    }\n  }\n\n  ul {\n    position: relative;\n    background: white;\n    list-style: none;\n    margin-top: 4px;\n    margin-bottom: 0;\n    border-radius: 6px;\n    text-align: left;\n    padding: 19px 3px;\n    box-shadow: 0 8px 16px rgba(0,0,0,.08);\n    opacity: 0;\n    transform: translate3d(0, -50px, 0);\n    transition: .5s transform cubic-bezier(0.23, 1, 0.32, 1), .2s opacity;\n\n    strong {\n      display: block;\n      font-weight: 600;\n    }\n\n    span {\n      color: #767d88;\n      font-size: 12px;\n\n      em {\n        color: $darkgrey;\n      }\n    }\n\n    .no-results {\n      padding: 8px 40px;\n      color: #2a2f38;\n    }\n  }\n\n  a {\n    display: inline-block;\n    padding: 8px 40px;\n    font-weight: 600;\n    color: #2a2f38;\n    width: 100%;\n    transition: .2s color, .2s background-color;\n\n    &:hover {\n      color: #3880ff;\n      background-color: #fafafa;\n    }\n  }\n\n  .searching {\n    position: absolute;\n    height: 1px;\n    width: 8px;\n    background: #3880ff;\n    top: 30px;\n    left: 0;\n    animation: ionic-search-scan 1s ease-in-out infinite;\n  }\n\n  .search-box {\n    // display: none;\n    position: absolute;\n    left: calc(50% - 330px);\n    width: 660px;\n    top: 10px;\n    z-index: 12;\n    padding-top: 2px;\n    pointer-events: none;\n    transition: opacity 0.2s linear;\n\n    ion-icon {\n      top: 17px;\n      font-size: 17px;\n      position: absolute;\n    }\n\n    &.active {\n      pointer-events: all;\n\n      ul {\n        transform: none;\n        opacity: 1;\n        transition-delay: .2s;\n      }\n\n      input {\n        transform: none;\n        opacity: 1;\n        transition-delay: .1s;\n      }\n\n      .search-static {\n        opacity: 1;\n        transform: none;\n      }\n\n      .close {\n        opacity: 1;\n        transform: none;\n        transition-delay: .4s;\n      }\n    }\n  }\n\n  .backdrop {\n    background: rgba(0, 8, 24, 0.4);\n    position: fixed;\n    top: 0;\n    right: 0;\n    bottom: 0;\n    left: 0;\n    opacity: 0;\n    pointer-events: none;\n    transition: .4s all ease;\n\n    &.active {\n      opacity: 1;\n      pointer-events: all;\n      z-index: 11;\n    }\n  }\n\n  &[mobile] {\n    display: block;\n\n    .search {\n      color: #999;\n      right: auto;\n      left: 0;\n      bottom: 0;\n      font-size: 28px;\n      padding: 22px;\n      top: auto;\n      z-index: 3;\n      position: fixed;\n    }\n\n    .backdrop {\n      top: 0;\n      background: rgba(0,0,0,.5);\n      z-index: 2;\n    }\n\n    .search-box {\n      width: auto;\n      left: 2px;\n      right: 2px;\n      top: 42px;\n      bottom: 0;\n      padding: 60px 12px 48px;\n      position: fixed;\n      z-index: 13;\n      background: white;\n      border-top-left-radius: 12px;\n      border-top-right-radius: 12px;\n      transform: translate3d(0, 100%, 0);\n      transition: .4s transform cubic-bezier(0.23, 1, 0.32, 1);\n\n      &.active {\n        transform: none;\n      }\n    }\n\n    .mobile-close {\n      transition-delay: 0;\n      left: calc(50% - 24px);\n      top: 0;\n      left: 0;\n      right: 0;\n      position: absolute;\n\n      svg {\n        position: absolute;\n        top: 8px;\n        width: 40px;\n        height: 40px;\n        left: calc(50% - 20px);\n      }\n    }\n\n    .searching {\n      top: 113px;\n      z-index: 13;\n      animation: ionic-search-scan-mobile 1s ease-in-out infinite;\n    }\n\n    ul {\n      opacity: 1;\n      transform: none;\n      z-index: 3;\n      top: auto;\n      box-shadow: none;\n      width: 100%;\n      max-height: calc(100vh - 154px);\n      overflow: touch;\n    }\n\n    .search-static {\n      transform: none;\n      opacity: 1;\n      z-index: 13;\n      top: 71px;\n      left: 22px;\n    }\n\n    a {\n      padding-left: 20px;\n      padding-right: 20px;\n    }\n\n    input {\n      margin: 0 0 10px;\n      padding: 10px 40px 8px;\n      background: #eceef2;\n      border-radius: 12px;\n      width: 100%;\n    }\n\n    ~ .mobile-nav__pane {\n      min-height: 100%;\n      background: white;\n      transition: .4s transform ease, .4s border-radius step-end;\n    }\n\n    &.active ~ .mobile-nav__pane {\n      border-radius: 12px;\n      transform: scale3d(0.97, 0.97, 1);\n      transition: .4s transform ease;\n    }\n  }\n}\n\n.mobile-nav {\n  background: black !important;\n}\n"
  },
  {
    "path": "assets/stencil/components/ionic-search/ionic-search.tsx",
    "content": "import 'ionicons';\nimport { Close } from '../../icons';\n\nimport {\n  Component,\n  Element,\n  Prop,\n  State,\n  h\n} from '@stencil/core';\n\n@Component({\n  tag: 'ionic-search',\n  styleUrl: 'ionic-search.scss',\n  shadow: false\n})\nexport class IonicSearch {\n\n  @State() active = false;\n  @State() query = '';\n  @State() pending = 0;\n  @State() results: Array<any> = null;\n  @State() dragStyles: {};\n  // @State() pane: HTMLDivElement;\n  @Prop() mobile: boolean;\n  @Element() el;\n\n  dragY:number = null;\n  startY:number = null;\n  screenHeight: number = null;\n\n  urls: any;\n  URLS = () => {\n    const api = 'https://api.swiftype.com/api/v1/public/engines/';\n    const key = '9oVyaKGPzxoZAyUo9Sm8';\n\n    return {\n      autocomplete: query =>\n        `${api}suggest.json?q=${query}&engine_key=${key}`,\n      search: query =>\n        `${api}search.json?q=${query}&engine_key=${key}`\n    }\n  };\n\n  constructor() {\n    this.activate = this.activate.bind(this);\n    this.close = this.close.bind(this);\n    this.onKeyUp = this.onKeyUp.bind(this);\n    this.touchStart = this.touchStart.bind(this);\n    this.touchMove = this.touchMove.bind(this);\n    this.touchEnd = this.touchEnd.bind(this);\n\n    this.urls = this.URLS();\n  }\n\n  // componentDidLoad() {\n  //   this.pane = this.el.parentElement.querySelector('.mobile-nav__pane');\n  // }\n\n  activate() {\n    this.active = true;\n    this.el.classList.add('active');\n    setTimeout(() => {\n      this.el.querySelector('input').focus();\n    }, 500, this)\n  }\n\n  close() {\n    this.active = false;\n    this.el.classList.remove('active');\n    this.el.querySelector('input').blur();\n    setTimeout(() => {\n      this.el.querySelector('input').value = '';\n      this.results = null;\n    }, 500, this);\n  }\n\n  async onKeyUp(e) {\n    if ( e.keyCode === 27) {\n      this.close();\n      return;\n    }\n\n    if (e.target.value.length < 3) {\n      this.results = null;\n      return;\n    }\n\n    this.query = e.target.value;\n    this.pending++;\n    const resp = await fetch(this.urls.autocomplete(this.query))\n    const res = await resp.json();\n    this.pending--;\n    this.results = res.records.page;\n  }\n\n  touchStart(e) {\n    this.screenHeight = window.innerHeight\n      || document.documentElement.clientHeight\n      || document.body.clientHeight;\n    this.startY = Math.round(e.touches.item(0).screenY)\n  }\n\n  touchMove(e) {\n    e.preventDefault();\n    this.dragY = Math.max(0, Math.round(\n      (e.touches.item(0).screenY - this.startY) / this.screenHeight * 100\n    ));\n    this.dragStyles = {\n      transitionDuration: '.1s',\n      transform: `translate3d(0, ${this.dragY}%, 0)`\n    }\n    // window.requestAnimationFrame(()=> {\n    //   const scale = ((3 * this.dragY / 100) + 97) / 100;\n    //   this.pane.style.transform = `scale3d(${scale}, ${scale}, 1)`;\n    //   this.pane.style['transition-duration'] = '.1s';\n    // });\n  }\n\n  isFirefox() {\n    return navigator.userAgent.indexOf(\"Firefox\") != -1;\n  }\n\n  touchEnd() {\n    if (this.dragY > 30) {\n      this.close();\n    }\n    this.dragY = null;\n    this.startY = null;\n    this.dragStyles = {}\n  }\n\n  render() {\n    return [\n      <div class={`search-box${this.active ? ' active' : ''}`}\n           style={this.dragStyles}\n           onTouchMove={e => this.results && this.results.length > 5 ?\n            null : e.preventDefault()}>\n        <input type=\"text\" onKeyUp={this.onKeyUp} placeholder=\"Search Ionic..\"/>\n\n        <ion-icon class={`search-static ${this.active ? ' active' : ''}`}\n                  name=\"md-search\"></ion-icon>\n\n        {this.mobile && !this.isFirefox() ?\n          <div class=\"mobile-close\"\n               onClick={this.close}\n               onTouchStart={this.touchStart}\n               onTouchMove={this.touchMove}\n               onTouchEnd={this.touchEnd}>\n            <Close/>\n          </div>\n          :\n          <ion-icon class={`close ${this.active ? ' active' : ''}`}\n                    name='md-close'\n                    onClick={this.close}></ion-icon>\n        }\n\n        {this.results !== null ? <ul>\n          {this.results.map(result =>\n            <li>\n              <a href={result.url} title={result.title}>\n                <strong>{result.title}</strong>\n                <span innerHTML={result.highlight.sections}></span>\n              </a>\n            </li>\n          )}\n          {this.results.length === 0 ?\n            <li><span class=\"no-results\">No results</span></li>\n          : null}\n        </ul> : null}\n\n        <div class={`slot ${this.results === null ? '' : 'hidden'}`}>\n          <slot/>\n        </div>\n\n        {this.pending > 0 ? <span class=\"searching\"></span> : null}\n      </div>,\n\n      <ion-icon class={`search ${this.active ? ' active' : ''}`}\n                name=\"md-search\"\n                onClick={this.active ? null : this.activate}></ion-icon>,\n\n      <div class={`backdrop ${this.active ? 'active' : null}`}\n           onClick={this.close}></div>\n    ];\n  }\n}\n"
  },
  {
    "path": "assets/stencil/components/ionic-slider/ionic-slider.scss",
    "content": "@import '../../vars';\n\nionic-slider {\n  position: relative;\n\n  [slot^=\"slide-\"] {\n    position: absolute;\n    top: 0;\n    right: 0;\n    bottom: 0;\n    left: 0;\n    overflow: hidden;\n  }\n\n  > div {\n    position: absolute;\n    top: 0;\n    right: 0;\n    bottom: 0;\n    left: 0;\n    overflow: hidden;\n    display: none;\n    animation: fadeIn .5s ease;\n\n    &.visible {\n      display: block;\n\n      &.new {\n        z-index: 1;\n      }\n    }\n  }\n\n  .dots {\n    position: absolute;\n    top: 0;\n    bottom: 0;\n    left: 20px;\n    padding: 0;\n    display: flex;\n    flex-direction: column;\n    justify-content: center;\n    align-content: center;\n    z-index: 2;\n\n    li {\n      height: 8px;\n      width: 8px;\n      border-radius: 50%;\n      border: 1px solid rgba(255,255,255, .5);\n      margin-bottom: 4px;\n      list-style: none;\n      cursor: pointer;\n      transition: .5s background-color ease, .5s border-color ease;\n\n      &.active {\n        background-color: white;\n        border-color: white;\n      }\n    }\n  }\n}\n\n\n\n"
  },
  {
    "path": "assets/stencil/components/ionic-slider/ionic-slider.tsx",
    "content": "import { Component, State, h } from '@stencil/core';\n\n@Component({\n  tag: 'ionic-slider',\n  styleUrl: 'ionic-slider.scss',\n  shadow: false\n})\nexport class IonicSlider {\n\n  \n  slideCount = 1;\n  timer = null;\n  old = null;\n  upcoming = null;\n  slideDelay = 10000;\n\n  @State() current = 0;\n  @State() status = [];\n  @State() ticker = 0;\n\n  constructor() {\n    this.getClasses.bind(this);\n    this.goTo.bind(this);\n    this.activate.bind(this);\n    this.deactivate.bind(this);\n    this.next.bind(this);\n\n    for(let i = 0; i < this.slideCount; i++) {\n      this.status.push({\n        visible: i === 0,\n        active: i === 0,\n        new: false\n      })\n    }\n  }\n\n  componentDidLoad() {\n    this.timer = setTimeout(this.next, this.slideDelay);\n  }\n\n  next = () => {\n    this.goTo(this.current >= this.slideCount - 1 ? 0 : this.current + 1)\n  }\n\n  goTo = (slide: number) => {\n    // slide doesn't exist\n    if (!this.status[slide]) return;\n    clearTimeout(this.timer);\n    this.old = this.current;\n    setTimeout(this.deactivate, 1000);\n    this.upcoming = this.current = slide;\n    this.status[slide].visible = true;\n    this.status[slide].new = true;\n    setTimeout(this.activate, 500);\n    this.timer = setTimeout(this.next, this.slideDelay);\n    this.ticker++;\n    // return true;\n  }\n\n  deactivate = () => {\n    this.status[this.old].active = false;\n    this.status[this.old].visible = false;\n    this.status[this.current].new = false;\n    this.ticker++;\n  }\n\n  activate = () => {\n    this.status[this.current].active = true;\n    this.ticker++;\n  }\n\n  getClasses(item) {\n    return [\n      this.status[item].visible ? 'visible' : '',\n      this.status[item].active ? 'active' : '',\n      this.status[item].new ? 'new' : ''\n    ].join(' ');\n  }\n\n  render() {\n    return [\n      <div class={this.getClasses(0)}>\n        <slot name=\"slide-0\"/>\n      </div>,\n      <div class={this.getClasses(1)}>\n        <slot name=\"slide-1\"/>\n      </div>,\n      <ul class=\"dots\">\n        <li class={this.current === 0 ? 'active' : ''}\n            onClick={this.goTo.bind(this, 0)}></li>\n        <li class={this.current === 1 ? 'active' : ''}\n            onClick={this.goTo.bind(this, 1)}></li>\n      </ul>\n    ];\n  }\n}"
  },
  {
    "path": "assets/stencil/components/ionic-snap-bar/ionic-snap-bar.scss",
    "content": "@import \"../../vars\";\n\nionic-snap-bar {\n  background: linear-gradient(to right, #17203d, #1f2c53);\n  display: none;\n  width: 100%;\n  position: relative;\n  padding: 0 24px;\n  z-index: 1;\n\n  &.hydrated {\n    display: block;\n  }\n\n  .wrapper {\n    padding: 0 16px;\n    display: flex;\n    flex-wrap: wrap;\n    align-items: center;\n    justify-content: space-around;\n    color: rgba(white, 0.6);\n    margin: 0 auto;\n    max-width: 586px;\n    height: 0;\n    transition: 0.4s height ease, 0.4s padding ease;\n\n    &.active {\n      height: 48px;\n      padding-top: 13px;\n      padding-bottom: 13px;\n\n      > * {\n        transform: scaleY(1);\n      }\n\n      + .close {\n        opacity: 1;\n        pointer-events: all;\n      }\n    }\n\n    > * {\n      font-size: 1em;\n      font-weight: 600;\n      display: inline-block;\n      transform: scaleY(0);\n      transition: 0.2s transform ease;\n    }\n\n    a {\n      border-radius: 1.8em;\n      text-transform: uppercase;\n      color: #fff;\n      text-decoration: none;\n      background: rgba(56, 128, 255, 0.28);\n      display: inline-block;\n      padding: 6px 12px 4px;\n      font-size: 10px;\n      letter-spacing: 0.1em;\n      margin-bottom: 2px;\n      transition: 0.2s background ease;\n      font-weight: 800;\n\n      &::after {\n        content: \"\";\n        border: solid white;\n        border-width: 0 1px 1px 0;\n        display: inline-block;\n        padding: 3px;\n        margin-left: 2px;\n        vertical-align: 1px;\n        transform: rotate(-45deg);\n      }\n\n      &:hover {\n        background: rgba(56, 128, 255, 0.4);\n      }\n    }\n\n    strong,\n    h1,\n    h2,\n    h3,\n    h4 {\n      font-weight: 700;\n      color: white;\n      letter-spacing: 0.01em;\n    }\n  }\n\n  .close {\n    color: rgba(white, 0.3);\n    position: absolute;\n    font-size: 24px;\n    right: 16px;\n    top: 5px;\n    cursor: pointer;\n    pointer-events: none;\n    opacity: 0;\n    transition: 0.4s opacity ease, 0.2s color ease;\n\n    &:hover {\n      color: rgba(white, 0.5);\n    }\n  }\n}\n"
  },
  {
    "path": "assets/stencil/components/ionic-snap-bar/ionic-snap-bar.tsx",
    "content": "import { Component, State, h } from '@stencil/core';\n\n@Component({\n  tag: 'ionic-snap-bar',\n  styleUrl: 'ionic-snap-bar.scss',\n  shadow: false\n})\nexport class IonicSnapBar {\n\n  @State() active = false;\n\n  componentDidLoad() {\n    setTimeout(() => {\n      this.active = true;\n    }, 2500);\n  }\n\n  close() {\n    this.active = false;\n  }\n\n  render() {\n    return [\n      <div class={`wrapper ${this.active ? 'active' : ''}`}>\n        <slot/>\n      </div>,\n      <div id=\"snap-bar-close\"\n           class=\"close\"\n           onClick={this.close.bind(this)}>&#xd7;</div>\n    ];\n  }\n}"
  },
  {
    "path": "assets/stencil/components/ionic-sub-header/ionic-sub-header.scss",
    "content": "@import \"../../vars\";\n\nionic-sub-header {\n  font-family: $font-family-inter;\n  position: sticky;\n  top: 0;\n  top: -0.5px;\n  z-index: 99;\n  backdrop-filter: blur(20px);\n  transition: 0.2s box-shadow;\n\n  &.ionic-sub-header--initialized {\n    transition: background-color 0.4s ease, box-shadow 0.4s ease;\n\n    &:not(.ionic-sub-header--stuck) {\n      backdrop-filter: none;\n    }\n  }\n\n  &__trigger {\n    position: absolute;\n    left: 0;\n    width: 100vw;\n    height: 1px;\n    pointer-events: none;\n    opacity: 0;\n\n    @media (max-width: $screen-xs-max) {\n      top: 0;\n    }\n  }\n\n  &.ionic-sub-header--not-sticky {\n    position: relative;\n\n    &.ionic-sub-header--stuck {\n      background: none;\n      box-shadow: none;\n      backdrop-filter: none;\n    }\n  }\n\n  &.ionic-sub-header--stuck {\n    background: #020814;\n    box-shadow: 0 1px 0px rgba(black, 0.06);\n\n    @supports (\n      (-webkit-backdrop-filter: blur(20px)) or (backdrop-filter: blur(20px))\n    ) {\n      background: rgba(#020814, 0.8);\n    }\n  }\n\n  & > .container {\n    display: flex;\n    flex-direction: row;\n    justify-content: space-between;\n    align-items: center;\n    color: white;\n    font-size: 13px;\n    font-weight: 500;\n    min-height: 55px;\n    // flex-wrap: wrap;\n    overflow-x: auto;\n    position: relative;\n    z-index: 1;\n\n    &::before {\n      border-top: 1px solid rgba(white, 0.06);\n      display: block;\n      content: \"\";\n      position: absolute;\n      top: 0;\n      right: 15px;\n      left: 15px;\n      flex: 0 0 100%;\n\n      @media (max-width: $screen-xs-max) {\n        display: none;\n      }\n    }\n\n    &::after {\n      display: none;\n    }\n  }\n\n  ul {\n    padding: 0;\n    list-style: none;\n    margin-bottom: 0;\n    display: flex;\n    align-items: center;\n    font-size: 12px;\n    line-height: 14px;\n    letter-spacing: -0.02em;\n    font-weight: 400;\n  }\n\n  li {\n    display: flex;\n    align-items: center;\n  }\n\n  [slot=\"right\"] li:last-child a:not(.btn) {\n    padding-right: 0;\n  }\n\n  ul:not([slot=\"right\"]) li:first-child a,\n  [slot=\"left\"] li:first-child a,\n  [slot=\"title\"] {\n    padding-left: 0;\n  }\n\n  ul {\n    font-size: 13px;\n    line-height: 14px;\n  }\n\n  [slot=\"title\"] {\n    // same as .sub-header__breadcrumbs li:last-child a\n    font-size: 16px;\n    font-weight: 600;\n    line-height: 22px;\n    letter-spacing: -0.03em;\n    padding-top: 0;\n    padding-bottom: 0;\n\n    &:hover {\n      color: white;\n    }\n  }\n\n  [slot=\"breadcrumbs\"] li {\n    &::after {\n      content: \"/\";\n      color: rgba(white, 0.1);\n      font-size: 16px;\n      font-weight: 400;\n      vertical-align: 0px;\n    }\n\n    a {\n      padding-left: 8px;\n      padding-right: 8px;\n      color: rgba(white, 0.6);\n    }\n\n    &:last-child {\n      a {\n        font-weight: 600;\n        color: white;\n      }\n\n      &::after {\n        display: none;\n      }\n    }\n  }\n\n  span,\n  a {\n    color: white;\n    fill: white;\n    position: relative;\n    letter-spacing: 0;\n    padding: 16px 12px;\n    display: inline-block;\n    text-decoration: none;\n    white-space: nowrap;\n    transition: 0.2s color;\n\n    &.has-icon {\n      padding-left: 32px;\n    }\n\n    ion-icon {\n      font-size: 1.4em;\n      position: absolute;\n      left: 12px;\n      top: 14px;\n    }\n  }\n\n  a {\n    cursor: pointer;\n\n    svg,\n    path {\n      transition: 0.2s fill;\n      vertical-align: -15%;\n    }\n\n    &.active {\n      pointer-events: none;\n    }\n\n    &:hover,\n    &:active,\n    &:focus {\n      text-decoration: none;\n    }\n\n    &.current,\n    &.active,\n    &:hover {\n      color: rgba(white, 0.4);\n    }\n\n    &.btn {\n      padding: 5px 10px 6px;\n      border-radius: 6px;\n      color: white;\n      font-size: 13px;\n      font-weight: 600;\n      vertical-align: 0px;\n      letter-spacing: -0.01em;\n      margin-right: 3px;\n      margin-left: 9px;\n      box-shadow: none;\n      transition: 0.3s box-shadow, 0.3s background;\n\n      &:hover {\n        box-shadow: 0 3px 5px rgba(0, 0, 0, 0.15);\n      }\n\n      &:active {\n        box-shadow: inset 0 1px 4px rgba(0, 0, 0, 0.2);\n      }\n    }\n  }\n\n  .ionic-sub-header__mobile-toggle {\n    display: none;\n  }\n\n  @media (max-width: $screen-xs-max) {\n    &.hydrated.ionic-sub-header--initialized {\n      max-height: 55px;\n      background: transparent;\n    }\n\n    > .container {\n      max-height: 55px;\n      transition: 0.4s max-height ease;\n\n      background: black;\n      backdrop-filter: blur(20px);\n      @supports (\n        (-webkit-backdrop-filter: blur(20px)) or (backdrop-filter: blur(20px))\n      ) {\n        background: rgba(black, 0.9);\n      }\n    }\n\n    &,\n    & > .container {\n      overflow: visible;\n      perspective: 1000px;\n    }\n\n    span,\n    a {\n      ion-icon {\n        font-size: 1.4em;\n        position: static;\n        vertical-align: -3px;\n      }\n    }\n\n    .ionic-sub-header__mobile-toggle {\n      display: block;\n      margin-top: 2px;\n      cursor: pointer;\n      transform-style: preserve-3d;\n      transition: 0.4s transform cubic-bezier(0.07, 0.65, 0.57, 1.66);\n\n      svg path {\n        stroke-dasharray: 955;\n        stroke-dashoffset: 955;\n        transition: stroke-dashoffset 0.4s linear forwards;\n      }\n\n      &:hover {\n        color: inherit;\n      }\n    }\n\n    [slot=\"right\"] {\n      flex: 100%;\n      // position: absolute;\n      // background: white;\n      // left: 0;\n      // top: 55px;\n      // width: 100vw;\n      padding: 0 16px 16px;\n      display: flex;\n      flex-direction: column;\n      justify-content: stretch;\n      align-items: stretch;\n      // box-shadow: 0 1px 0px rgba(black, .06);\n\n      // backdrop-filter: blur(20px);\n      // @supports ((-webkit-backdrop-filter: blur(20px)) or (backdrop-filter: blur(20px))) {\n      //   background: rgba(white, .8);\n      // }\n\n      transform: scaleY(0);\n      transform-origin: top;\n      transition: transform 0.4s ease 0.3s;\n\n      li {\n        display: block;\n        opacity: 0;\n        transform: translateX(15px);\n        transition: transform 0.4s step-end 0s, opacity 0.4s ease 0s;\n      }\n\n      a {\n        width: 100%;\n        padding-left: 0;\n        padding-right: 0;\n      }\n\n      .btn {\n        margin-top: 16px;\n        text-align: center;\n        margin-left: 0;\n        border-radius: 4px;\n      }\n    }\n\n    &.ionic-sub-header--mobile-active {\n      // box-shadow: none;\n\n      > .container {\n        box-shadow: 0 1px 0px rgba(black, 0.06);\n        transition: 0.4s max-height ease;\n        max-height: 600px;\n      }\n\n      .ionic-sub-header__mobile-toggle {\n        transform: rotateZ(180deg);\n      }\n\n      [slot=\"right\"] {\n        transform: scaleY(1);\n        transition: transform 0.4s ease 0s;\n\n        li {\n          transform: translateX(0);\n          opacity: 1;\n          transition: 0.4s transform 0.2s ease, 0.4s opacity 0.2s ease;\n\n          &:nth-child(2) {\n            transition-delay: 0.3s;\n          }\n          &:nth-child(3) {\n            transition-delay: 0.4s;\n          }\n          &:nth-child(4) {\n            transition-delay: 0.5s;\n          }\n          &:nth-child(5) {\n            transition-delay: 0.6s;\n          }\n        }\n      }\n    }\n\n    & > .container {\n      flex-wrap: wrap;\n    }\n  }\n}\n\nbody.light ionic-sub-header {\n  &.ionic-sub-header--stuck {\n    background: white;\n\n    @supports (\n      (-webkit-backdrop-filter: blur(20px)) or (backdrop-filter: blur(20px))\n    ) {\n      background: rgba(white, 0.9);\n    }\n  }\n\n  .container::before {\n    border-top-color: rgba(black, 0.06);\n  }\n\n  span,\n  a {\n    color: #414d5c;\n    fill: #414d5c;\n  }\n\n  .btn,\n  .btn:hover {\n    color: white;\n  }\n\n  .btn.white {\n    color: #4d8dff;\n    border: 1px solid #e9edf3;\n    box-shadow: 0px 1px 2px rgba(0, 16, 46, 0.04);\n    border-radius: 6px;\n    padding-bottom: 6px;\n\n    &:hover {\n      box-shadow: 0px 2px 4px rgba(0, 16, 46, 0.08);\n    }\n\n    &:active,\n    &:focus {\n      box-shadow: inset 0px 1px 2px rgba(0, 16, 46, 0.04);\n    }\n  }\n\n  [slot=\"breadcrumbs\"] li {\n    &:after {\n      color: rgba(#414d5c, 0.2);\n    }\n\n    &:not(:last-child) a {\n      color: rgba(#414d5c, 0.6);\n\n      &:hover {\n        color: $blue;\n      }\n    }\n  }\n\n  [slot=\"breadcrumbs\"],\n  [slot=\"title\"] {\n    &,\n    a {\n      color: #1a232f;\n\n      &:hover {\n        color: #1a232f;\n      }\n    }\n  }\n\n  a {\n    &.current,\n    &.active {\n      color: #b1bbca;\n    }\n\n    &:hover {\n      color: $blue;\n\n      svg,\n      path {\n        fill: $blue;\n      }\n    }\n\n    &.ionic-sub-header__mobile-toggle:hover {\n      svg,\n      path {\n        fill: unset;\n      }\n    }\n  }\n\n  @media (max-width: $screen-xs-max) {\n    > .container {\n      background: white;\n\n      @supports (\n        (-webkit-backdrop-filter: blur(20px)) or (backdrop-filter: blur(20px))\n      ) {\n        background: rgba(white, 0.9);\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "assets/stencil/components/ionic-sub-header/ionic-sub-header.tsx",
    "content": "import { Component, Element, Prop, State, h } from '@stencil/core';\nimport { ChevronDown } from '../../icons';\n\n@Component({\n  tag: 'ionic-sub-header',\n  styleUrl: 'ionic-sub-header.scss',\n  shadow: false\n})\nexport class IonicSubHeader {\n\n  @Prop() darkMode = true;\n\n  @State() mobileDropdownActive = false;\n  @State() stuck = false;\n  @State() queued = false;\n  @Element() el;\n\n  observer: IntersectionObserver;\n\n  constructor() {\n    this.handleMobileToggleClick = this.handleMobileToggleClick.bind(this);\n  }\n\n  getTriggerEl() {\n    // return (<div class=\"ionic-sub-header__trigger\"></div>)\n    const trigger = document.createElement('div');\n    trigger.id = 'ionic-sub-header__trigger';\n    return trigger;\n  }\n\n  componentDidLoad() {\n    this.el.before(this.getTriggerEl());\n    this.init();\n    requestAnimationFrame(()=>{\n      this.el.classList.add('ionic-sub-header--initialized');\n    })\n  }\n\n  init() {\n    this.observer = new IntersectionObserver(entries => {\n      if (this.queued) return;\n  \n      // no intersection with screen\n    \tif(!this.stuck && entries[0].intersectionRatio === 0) {\n        this.queued = true;\n        requestAnimationFrame(() => {\n          this.el.classList.add('ionic-sub-header--stuck');\n          this.stuck = true;\n          this.queued = false;\n        });\n  \n    \t// fully intersects with screen\n      } else if(this.stuck && entries[0].intersectionRatio === 1) {\n        this.queued = true;\n        requestAnimationFrame(() => {\n          this.el.classList.remove('ionic-sub-header--stuck');\n          this.stuck = false;\n          this.queued = false;\n        })\n      }\n    }, { threshold: [0,1] })\n\n    if (this.el) {\n      this.observer.observe(document.getElementById('ionic-sub-header__trigger'));\n      setTimeout(() => {\n        this.el.classList.add('ionic-sub-header--initialized');\n        document.querySelector('.navbar-default').classList.add('navbar--not-fixed');\n      }, 405)\n    }\n  }\n\n  handleMobileToggleClick() {\n    this.el.classList.toggle('ionic-sub-header--mobile-active');\n  }\n\n  render() {\n    return (\n      <div class=\"container\">\n        <slot name=\"title\"/>\n        <slot name=\"breadcrumbs\"/>\n        <slot name=\"left\"/>\n        <a class=\"ionic-sub-header__mobile-toggle\"\n           onClick={this.handleMobileToggleClick}>\n          <ChevronDown/>\n        </a>\n        <slot name=\"right\"/>\n      </div>\n    );\n  }\n}\n"
  },
  {
    "path": "assets/stencil/components/ionic-switcher/ionic-switcher.scss",
    "content": "ionic-switcher {\n  .switcher {\n    display: flex;\n    justify-content: center;\n    align-items: center;\n    user-select: none;\n    width: 100%;\n\n    .empty-circle {\n      display: inline-block;\n      vertical-align: middle;\n      width: 10px;\n      height: 10px;\n      border-radius: 10px;\n      border: 1px solid var(--c-carbon-900);\n    }\n\n    .switcher-separator {\n      display: inline-block;\n      width: 22px;\n      height: 1px;\n      margin: 0px 6px;\n      background-color: var(--c-indigo-400);\n    }\n\n    .switcher-button {\n      text-align: left;\n      color: #020814;\n      width: auto;\n      position: relative;\n\n      ion-icon,\n      .empty-circle {\n        vertical-align: middle;\n        margin-right: 7px;\n        margin-bottom: 1px;\n      }\n\n      &.switcher-button-completed {\n        &:after {\n          background-color: var(--c-blue-800);\n        }\n\n        color: #3880ff;\n\n        ion-icon {\n          color: #3880ff;\n          fill: #3880ff;\n          stroke: #3880ff;\n        }\n      }\n\n      &.switcher-button-inactive {\n        color: #92a1b3;\n\n        .empty-circle {\n          border-color: var(--c-indigo-400);\n        }\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "assets/stencil/components/ionic-switcher/ionic-switcher.tsx",
    "content": "import { Component, h, Prop } from \"@stencil/core\";\n\n@Component({\n  tag: \"ionic-switcher\",\n  styleUrl: \"ionic-switcher.scss\",\n  shadow: false,\n})\nexport class IonicSwitcher {\n  @Prop() items: string;\n  @Prop() index: number;\n\n  render() {\n    const { index } = this;\n    const items = this.items.split(\",\");\n\n    return (\n      <div class=\"switcher\">\n        {items.map((item, i) => {\n          const completed = i < index;\n          const inactive = i > index;\n          return [\n            <div\n              key={item}\n              class={`switcher-button${completed ? \" switcher-button-completed\" : \"\"}${\n                inactive ? \" switcher-button-inactive\" : \"\"\n              }`}\n            >\n              {completed ? <ion-icon name=\"checkmark-circle\" /> : <div class=\"empty-circle\" />}\n              {item}\n            </div>,\n            i < items.length - 1 ? <div class=\"switcher-separator\" /> : null,\n          ];\n        })}\n      </div>\n    );\n  }\n}\n"
  },
  {
    "path": "assets/stencil/components/ionic-toggle/ionic-toggle-button.scss",
    "content": ":host {\n  flex: 1;\n  display: flex;\n  text-decoration: none;\n  cursor: pointer;\n  border: 1px solid #eee;\n  text-align: center;\n  font-size: 14px;\n}\ndiv {\n  padding: 16px;\n  flex: 1;\n}\n:host(:last-child) {\n  border-left: none;\n}\n:host(.selected) {\n  background-color: #4F8EF7;\n  color: white;\n  font-weight: bold;\n}"
  },
  {
    "path": "assets/stencil/components/ionic-toggle/ionic-toggle-button.tsx",
    "content": "import { Component, Event, Prop, State, EventEmitter, Method, h } from '@stencil/core';\n\n@Component({\n  tag: 'ionic-toggle-button',\n  styleUrl: 'ionic-toggle-button.scss',\n  shadow: true\n})\nexport class IonicToggleButton {\n  @Event() toggleSelected: EventEmitter;\n\n  @Prop() title: string;\n  @Prop() tab: string;\n\n  @State() selected = false;\n\n  @Method()\n  deselect() {\n    this.selected = false;\n  }\n\n  @Method()\n  select() {\n    this.selected = true;\n  }\n\n  handleSelected() {\n    this.toggleSelected.emit(this);\n  }\n\n  hostData() {\n    return {\n      class: {\n        selected: this.selected\n      }\n    }\n  }\n\n  render() {\n    return (\n      <div onClick={_ => this.handleSelected()}>\n        {this.title}\n      </div>\n    );\n  }\n}"
  },
  {
    "path": "assets/stencil/components/ionic-toggle/ionic-toggle-tab.tsx",
    "content": "import { Component, Prop, Method, State, h } from '@stencil/core';\n\n@Component({\n  tag: 'ionic-toggle-tab',\n  styles: `\n  `,\n  shadow: true\n})\nexport class IonicToggleTab {\n  @Prop() tab: string;\n\n  @State() hidden = true;\n\n  @Method()\n  hide() {\n    this.hidden = true;\n  }\n\n  @Method()\n  show() {\n    this.hidden = false;\n  }\n\n  hostData() {\n    return {\n      style: {\n        display: this.hidden ? 'none' : 'block'\n      }\n    }\n  }\n\n  render() {\n    return (\n      <slot />\n    );\n  }\n}"
  },
  {
    "path": "assets/stencil/components/ionic-toggle/ionic-toggle.scss",
    "content": ":host {\n  display: block;\n}\n\n.toggle-buttons {\n  display: flex;\n  flex-direction: row;\n\n  justify-content: center;\n}\n\n.toggle-tabs {\n\n}"
  },
  {
    "path": "assets/stencil/components/ionic-toggle/ionic-toggle.tsx",
    "content": "import { Component, Element, Listen, h } from '@stencil/core';\nimport { IonicToggleButton } from './ionic-toggle-button';\nimport { IonicToggleTab } from './ionic-toggle-tab';\n\n@Component({\n  tag: 'ionic-toggle',\n  styleUrl: 'ionic-toggle.scss',\n  shadow: true\n})\nexport class IonicToggle {\n  @Element() el: Element;\n\n\n  componentDidLoad() {\n  }\n\n  @Listen('toggleSelected')\n  selectionChanged(e: any) {\n    const target = e.detail as IonicToggleButton;\n    const buttons = this.el.querySelectorAll('ionic-toggle-button');\n    Array.prototype.forEach.call(buttons, (child: IonicToggleButton) => {\n      child.deselect();\n    });\n\n    const tabName = target.tab;\n    target.select();\n\n    console.log('Selecting this one', tabName, target);\n\n    const tabs = this.el.querySelectorAll(`ionic-toggle-tab`);\n    console.log('Found tabs', tabs);\n    Array.prototype.forEach.call(tabs, (tab: IonicToggleTab) => {\n      tab.hide();\n      if (tab.tab === tabName) {\n        tab.show();\n      }\n    })\n  }\n\n  render() {\n    return (\n      <div class=\"toggle-content\">\n        <div class=\"toggle-buttons\">\n          <slot name=\"buttons\"/>\n        </div>\n        <div class=\"toggle-tabs\">\n          <slot name=\"tabs\"></slot>\n        </div>\n      </div>\n    );\n  }\n}"
  },
  {
    "path": "assets/stencil/components/react-capacitor/react-capacitor.scss",
    "content": "@import \"../../vars\";\n// @import '../../../../node_modules/prismjs/themes/prism-tomorrow';\n@import \"../../prism-ionic\";\n\n:host {\n  display: flex;\n  flex-direction: column;\n  width: 100%;\n  border-radius: 10px;\n  position: relative;\n\n  @media (max-width: $screen-xs-max) {\n    width: 100%;\n    max-width: 560px;\n  }\n\n  .code-header {\n    background: #0b1521;\n    z-index: 1;\n    position: relative;\n    border-radius: 10px 10px 0 0;\n    font-size: 12px;\n    font-weight: 600;\n    line-height: 13px;\n    letter-spacing: 0.1em;\n    text-transform: uppercase;\n    display: flex;\n    justify-content: space-between;\n    user-select: none;\n\n    ul {\n      display: flex;\n      flex-direction: row;\n      padding: 0;\n      margin: 0;\n\n      @media (max-width: 400px) {\n        overflow-x: auto;\n      }\n    }\n\n    li {\n      color: #7a8ea7;\n      border: 1px solid transparent;\n      list-style: none;\n      padding: 20px;\n      cursor: pointer;\n      position: relative;\n      transition: 0.2s color, 0.2s background-color;\n\n      &::after {\n        position: absolute;\n        height: 1px;\n        content: \"\";\n        bottom: -2px;\n        left: 0;\n        right: 0;\n        background: transparent;\n      }\n\n      &.active {\n        background: #1c2b3e;\n        border-color: #283a50;\n        border-bottom-color: #1c2b3e;\n        color: #ffffff;\n\n        &::after {\n          background: #1c2b3e;\n        }\n      }\n\n      &:first-child {\n        border-radius: 10px 0 0 0;\n      }\n\n      &:hover {\n        color: #ffffff;\n      }\n\n      @media (max-width: 530px) {\n        padding: 20px 10px;\n      }\n    }\n\n    a {\n      background: rgba(#7cabff, 0.3);\n      color: #7cabff;\n      border-radius: 16px;\n      padding: 8px;\n      align-self: center;\n      margin-right: 20px;\n      transition: 0.2s background-color;\n\n      &:hover,\n      &:active,\n      &:focus {\n        text-decoration: none;\n        background: rgba(#7cabff, 0.5);\n      }\n\n      @media (max-width: 470px) {\n        display: none;\n      }\n    }\n  }\n\n  .tab-content {\n  }\n\n  .tab-content {\n    background: #1c2b3e;\n    border: 1px solid #283a50;\n    border-radius: 10px;\n    align-items: flex-start;\n    position: relative;\n    margin: 0;\n    padding: 0;\n\n    display: flex;\n    overflow-x: auto;\n\n    height: 100%;\n\n    li {\n      display: none;\n\n      &.active {\n        display: block;\n      }\n    }\n\n    pre {\n      background: transparent;\n      padding: 0;\n      margin: 0;\n      color: white;\n      border: none;\n      border-radius: 10px;\n      font-size: 13px;\n      line-height: 23px;\n      letter-spacing: -0.01em;\n      font-weight: 500;\n      font-family: $font-family-mono;\n      padding: 1.5rem 3rem;\n\n      code {\n        white-space: pre;\n      }\n    }\n\n    .tag {\n      background: transparent;\n      margin-left: 0;\n      padding: 0;\n      border-radius: 0;\n      font-weight: 700;\n      font-size: inherit;\n      text-transform: none;\n      letter-spacing: 0;\n    }\n  }\n\n  .preview-icon {\n    position: absolute;\n    padding: 0;\n    bottom: -70px;\n    right: -20px;\n\n    li {\n      display: none;\n      list-style: none;\n\n      &.active {\n        display: block;\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "assets/stencil/components/react-capacitor/react-capacitor.tsx",
    "content": "import { Component, State, h, Prop, Watch } from '@stencil/core';\n\nimport '@ionic/core';\nimport Prism from 'prismjs';\n\nexport type TabType = 'notifications' | 'camera' | 'geolocation';\n\n@Component({\n  tag: 'react-capacitor',\n  styleUrl: 'react-capacitor.scss',\n  shadow: true,\n})\nexport class ReactCapacitor {\n  @Prop() tab: TabType = 'camera';\n  @State() activeTab: TabType = 'camera';\n\n  constructor() {}\n\n  @Watch('tab')\n  handleTabChange() {\n    this.activeTab = this.tab;\n  }\n\n  componentWillLoad() {}\n\n  componentDidLoad() {}\n\n  render() {\n    return [\n      <ul class=\"tab-content\">\n        {Object.keys(this.markup).map((key) => (\n          <li class={this.activeTab === key ? 'active' : 'innactive'}>\n            <pre>\n              <code\n                innerHTML={Prism.highlight(\n                  this.markup[key].code,\n                  Prism.languages.javascript,\n                  'typescript'\n                )}\n              ></code>\n            </pre>\n          </li>\n        ))}\n      </ul>,\n    ];\n  }\n\n  markup = {\n    notifications: {\n      dimensions: {\n        x: 137,\n        y: 134,\n      },\n      code: `\nimport { LocalNotifications } from '@capacitor/local-notifications';\n\nLocalNotifications.schedule({\n  notifications: [\n    {\n      title: \"On sale\",\n      body: \"Widgets are 10% off. Act fast!\",\n      id: 1,\n      schedule: { at: new Date(Date.now() + 1000 * 5) },\n      sound: null,\n      attachments: null,\n      actionTypeId: \"\",\n      extra: null\n    }\n  ]\n});`,\n    },\n    camera: {\n      dimensions: {\n        x: 119,\n        y: 125,\n      },\n      code: `\nimport { Camera, CameraResultType } from '@capacitor/camera';\n\nasync takeProfilePicture() {\n  // Take a picture or video, or load from the library\n  const image = await Camera.getPhoto({\n      quality: 90,\n      allowEditing: true,\n      resultType: CameraResultType.Uri\n  });\n}\n`,\n    },\n    geolocation: {\n      dimensions: {\n        x: 122,\n        y: 122,\n      },\n      code: `\nimport { Geolocation } from '@capacitor/geolocation';\n\n// get the users current position\nconst position = await Geolocation.getCurrentPosition();\n\n// grab latitude & longitude\nconst latitude = position.coords.latitude;\nconst longitude = position.coords.longitude;\n`,\n    },\n  };\n}\n"
  },
  {
    "path": "assets/stencil/components/react-components/react-components.scss",
    "content": "@import '../../vars';\n// @import '../../../../node_modules/prismjs/themes/prism-tomorrow';\n@import '../../prism-ionic';\n\n:host {\n  display: block;\n\n  .grid {\n    height: 100%;\n    display: grid;\n    grid-template-columns: 1fr;\n    grid-template-rows: 50px 1fr;\n  }\n\n  border-radius: 10px;\n  margin-right: -24px;\n  margin-left: -24px;\n\n  @media (min-width: 1200px) {\n    margin-right: -64px;\n    margin-left: -64px;\n  }\n\n  @media (max-width: $screen-sm-max) {\n    grid-template-columns: minmax(200px, 1fr) 290px;\n    margin-right: -8px;\n    margin-left: -8px;\n  }\n\n  .code-header {\n    background: #0B1521;\n    border-radius: 10px 0 0 0;\n    font-size: 12px;\n    font-weight: 600;\n    line-height: 13px;\n    letter-spacing: 0.1em;\n    text-transform: uppercase;\n    display: flex;\n    justify-content: space-between;\n\n    ul {\n      display: flex;\n      flex-direction: row;\n      padding: 0;\n      margin: 0;\n    }\n\n    li {\n      color: #7A8EA7;\n      border: 1px solid transparent;\n      list-style: none;\n      padding: 20px;\n      cursor: pointer;\n      user-select: none;\n      z-index: 1;\n      position: relative;\n      transition: .2s color, .2s background-color;\n\n      &::after {\n        position: absolute;\n        height: 1px;\n        content: '';\n        bottom: -2px;\n        left: 0;\n        right: 0;\n        background: transparent;\n      }\n\n      &.active {\n        background: #1C2B3E;\n        border-color: #283A50;\n        border-bottom-color: #1C2B3E;\n        color: #FFFFFF;\n\n        &::after {\n          background: #1C2B3E;\n        }\n      }\n\n      &:first-child {\n        border-radius: 10px 0 0 0;\n      }\n\n      &:hover {\n        color: #FFFFFF;\n      }\n\n      @media (max-width: $screen-xs-max) {\n        padding: 20px 10px;\n      }\n    }\n\n    a {\n      background: rgba(#7CABFF, 0.3);\n      color: #7CABFF;\n      border-radius: 16px;\n      padding: 8px;\n      align-self: center;\n      margin-right: 20px;\n      transition: .2s background-color;\n      \n      &:hover,\n      &:active,\n      &:focus {\n        text-decoration: none;\n        background: rgba(#7CABFF, 0.5);\n      }\n\n      @media (max-width: $screen-xs-max) {\n        display: none;\n      }\n    }\n  }\n\n  .preview-header {\n    background: #F9FAFC;\n    border: 1px solid #E9EDF3;\n    border-bottom: none;\n    border-radius: 10px 10px 0px 0px;\n    display: flex;\n    justify-content: center;\n    align-items: center;\n\n    ion-segment {\n      display: flex;\n      justify-content: center;\n      width: 142px;\n      background: #E9EDF3;\n    }\n\n    ion-segment-button {\n      flex: 0 1;\n    }\n  }\n\n  .tab-content,\n  .preview-content {\n    position: relative;\n    padding: 0;\n    margin: 0;\n\n    li {\n      display: none;\n\n      &.active {\n        display: block;\n      }\n    }\n  }\n\n  .preview-content.code {\n    background: #1C2B3E;\n    display: block;\n    overflow: hidden;\n\n    pre  {\n      background: transparent;\n      padding: 0;\n      margin: 0;\n      color: white;\n      border: none;\n      font-size: 13px;\n      line-height: 23px;\n      letter-spacing: -.01em;\n      font-weight: 500;\n      font-family: $font-family-mono;\n      padding: 24px 0 24px 48px;\n\n      @media (max-width: $screen-xs-max) {\n        padding: 24px 0 48px 16px;\n      }\n\n      code {\n        white-space: pre;\n      }\n    }\n  }\n\n  .preview-content {\n    background: radial-gradient(#E8EBEF 10%, #FCFDFE 10%) repeat;\n    border: 1px solid #E9EDF3;\n    background-size: 10px 10px;\n    border-radius: 0 0 10px 10px;\n    display: flex;\n    justify-content: center;\n    align-items: center;\n\n    iframe {\n      background: transparent;\n    }\n  }\n\n  @media (max-width: 525px) {\n    grid-template-columns: 100%;\n\n    .code-header {\n      border-radius: 10px 10px 0 0;\n\n      li {\n        padding: 20px;\n      }\n    }\n\n    .tab-content {\n      border-radius: 0 0 10px 10px;\n    }\n  }\n}"
  },
  {
    "path": "assets/stencil/components/react-components/react-components.tsx",
    "content": "import {\n  Component,\n  // Element,\n  // Prop,\n  State,\n  h,\n  Prop,\n  Watch\n} from '@stencil/core';\n\nimport '@ionic/core';\nimport Prism from 'prismjs';\n\n\nexport type TabType = 'card' | 'lists' | 'actionSheet';\n\n@Component({\n  tag: 'react-components',\n  styleUrl: 'react-components.scss',\n  shadow: true\n})\nexport class ReactComponents {\n  @Prop() tab: TabType = 'card';\n  @State() activeTab: TabType = 'card';\n  @State() activeView = 'preview';\n\n  constructor() {\n  }\n\n  @Watch('tab')\n  handleTabChange() {\n    this.activeTab = this.tab;\n  }\n\n  componentWillLoad() {\n  }\n\n  componentDidLoad() {\n  }\n\n  resizeIframe(el) {\n    setTimeout(() => {\n      console.log(el.contentWindow.document.documentElement.scrollHeight)\n      el.style.height = (el.contentWindow.document.documentElement.scrollHeight || 350) + 'px';\n    }, 50)\n  }\n\n\n  renderCode = (code) => {\n    return (\n      <pre><code innerHTML={Prism.highlight(\n        code,\n        Prism.languages.html, \n        'html'\n      )}></code></pre>\n    );\n  }\n\n  render() {\n    return (\n      <div class=\"grid\">\n        <header class=\"preview-header\">\n          <ion-segment mode=\"ios\" \n                      value={this.activeView}\n                      color=\"medium\" \n                      onIonChange={e => this.activeView = e.detail.value }>\n            <ion-segment-button value=\"preview\">\n              <ion-label>Preview</ion-label>\n            </ion-segment-button>\n            <ion-segment-button value=\"code\">\n              <ion-label>Code</ion-label>\n            </ion-segment-button>\n          </ion-segment>\n        </header>\n\n        <ul class={`preview-content${ this.activeView === 'code' ? ' code' : ''}`}>\n          {Object.keys(this.markup).map(key => (\n            <li class={this.activeTab === key ? 'active' : 'innactive'}>\n              <iframe srcdoc={this.ionicInjector(this.markup[key].src)}\n                      frameborder=\"0\"\n                      scrolling=\"no\"\n                      style={{ display: this.activeView === 'preview' ? 'block' : 'none' }}\n                      onLoad={e => this.resizeIframe(e.target)}></iframe>\n              {this.activeView === 'code' ? this.renderCode(this.markup[key].display) : null}\n            </li>\n          ))}\n        </ul>\n      </div>\n    );\n  }\n\n  ionicInjector(code) {\n    return `\n<link rel=\"stylesheet\" href=\"https://cdn.jsdelivr.net/npm/@ionic/core@next/css/ionic.bundle.css\" />\n<script type=\"module\" src=\"https://cdn.jsdelivr.net/npm/@ionic/core@next/dist/ionic/ionic.esm.js\"></script>\n<script nomodule src=\"https://cdn.jsdelivr.net/npm/@ionic/core@next/dist/ionic/ionic.js\"></script>\n<script>window.Ionic = {\n  config: {\n    mode: 'ios'\n  }\n}</script>\n${code}`;\n  }\n\n  markup = {\n    card: {\n      display: `\n<IonCard>\n  <IonImg src=\"/assets/myImg.png\"></IonImg>\n  <IonCardHeader>\n    <IonCardSubtitle>Card Subtitle</IonCardSubtitle>\n    <IonCardTitle>Card Title</IonCardTitle>\n  </IonCardHeader>\n  <IonCardContent>\n    <p>\n      Here’s a small text description for the card component. \n      Nothing more, nothing less.\n    </p>\n    <IonItem>\n      <IonButton fill=\"solid\">Action</IonButton>\n      <IonIcon icon={heart} slot=\"end\"></IonIcon>\n      <IonIcon icon={share} slot=\"end\"></IonIcon>\n    </IonItem>\n  </IonCardContent>\n</IonCard>`,\n      src: `\n        <style>\n          html, body {\n            height: 380px;\n          }\n          ion-card img {\n            width: 100%;\n            height: 120px;\n          }\n          \n          ion-card ion-grid {\n            --ion-grid-column-padding: 0;\n            \n            padding: 10px 0 0;\n          }\n          \n          ion-card-content ion-col:last-child {\n            text-align: right;\n          }\n          \n          ion-card ion-button[fill=\"clear\"] {\n            --padding-end: 0;\n            margin: 0;\n          \n            height: 30px;\n          }\n        </style>\n        <ion-card>\n          <img src=\"/img/homepage/demo-image.png\" />\n          <ion-card-header>\n            <ion-card-subtitle>Card Subtitle</ion-card-subtitle>\n            <ion-card-title>Card Title</ion-card-title>\n          </ion-card-header>\n          <ion-card-content>\n            Here's a small text description for the card content. Nothing more, nothing less.\n            <ion-grid>\n              <ion-row>\n                <ion-col>\n                  <ion-button size=\"small\">Action</ion-button>\n                </ion-col>\n                <ion-col>\n                  <ion-button fill=\"clear\" color=\"medium\">\n                    <ion-icon slot=\"icon-only\" name=\"heart-outline\"></ion-icon>\n                  </ion-button>\n                  <ion-button fill=\"clear\" color=\"medium\">\n                    <ion-icon slot=\"icon-only\" name=\"share-outline\"></ion-icon>\n                  </ion-button>\n                </ion-col>\n              </ion-row>\n            </ion-grid>\n          </ion-card-content>\n        </ion-card>`\n    },\n\n  lists: {\n    display: `\n<h4>Discover</h4>\n<h2>Music we think you'll love.</h2>\n<IonList>\n  {albums.map(album =>\n    <IonItem key={album.id}>\n      <IonThumbnail slot=\"start\">\n        <img src={album.artwork} />\n      </IonThumbnail>\n      <IonLabel>\n        <h2>{album.title}</h2>\n        <p>{album.artist}, {album.year}</p>\n      </IonLabel>\n    </IonItem>\n  )}\n</IonList>\n\n\n`,\n    src: `\n      <style>\n        html, body {\n          min-height: 300px;\n        }\n        ion-thumbnail {\n          --border-radius: 6px;\n        }\n      </style>\n      <ion-app>\n        <ion-content>\n          <ion-list>\n            <ion-item>\n              <ion-thumbnail slot=\"start\">\n                <img src=\"https://upload.wikimedia.org/wikipedia/en/2/26/Iron_%26_Wine_-_Beast_Epic.jpg\" />\n              </ion-thumbnail>\n              <ion-label>\n                <h2>Beast Epic</h2>\n                <p>Iron & Wine, 2017</p>\n              </ion-label>\n            </ion-item>\n            <ion-item>\n              <ion-thumbnail slot=\"start\">\n                <img src=\"https://media.pitchfork.com/photos/5c7425267ad40308b4a8835c/1:1/w_320/JapaneseHouse_GoodAtFalling.jpg\" />\n              </ion-thumbnail>\n              <ion-label>\n                <h2>Good At Falling</h2>\n                <p>The Japanese House, 2019</p>\n              </ion-label>\n            </ion-item>\n            <ion-item>\n              <ion-thumbnail slot=\"start\">\n                <img src=\"https://upload.wikimedia.org/wikipedia/en/4/4f/Hallucinogen_%28EP%29_%28Front_Cover%29.png\" />\n              </ion-thumbnail>\n              <ion-label>\n                <h2>Hallucinogen</h2>\n                <p>Kelela, 2015</p>\n              </ion-label>\n            </ion-item>\n            <ion-item>\n              <ion-thumbnail slot=\"start\">\n                <img src=\"https://upload.wikimedia.org/wikipedia/en/6/66/22%2C_A_Million_cover.jpg\" />\n              </ion-thumbnail>\n              <ion-label>\n                <h2>22, A Million</h2>\n                <p>Bon Iver, 2016</p>\n              </ion-label>\n            </ion-item>\n            <ion-item>\n              <ion-thumbnail slot=\"start\">\n                <img src=\"https://upload.wikimedia.org/wikipedia/en/thumb/0/02/F%28x%29_4_Walls_CD_Cover.jpg/220px-F%28x%29_4_Walls_CD_Cover.jpg\" />\n              </ion-thumbnail>\n              <ion-label>\n                <h2>4 Walls</h2>\n                <p>f(x), 2015</p>\n              </ion-label>\n            </ion-item>\n          </ion-list>\n        </ion-content>\n      </ion-app>`\n    },\n    \n    actionSheet: {\n      display: `\n<IonButton\n  onClick={() => setShowActionSheet(true)}\n  expand=\"block\">Show Action Sheet</IonButton>\n<IonActionSheet\n  isOpen={showActionSheet}\n  onDidDismiss={() => setShowActionSheet(false)}\n  buttons={buttons} />`,\n      src: `\n      <ion-app>\n        <ion-content fullscreen class=\"ion-padding\">\n          <ion-button expand=\"block\">Open Action Sheet</ion-button>\n        </ion-content>\n      </ion-app>\n      <script type=\"module\">\n        import { actionSheetController } from 'https://cdn.jsdelivr.net/npm/@ionic/core@next/dist/ionic/index.esm.js';\n        window.actionSheetController = actionSheetController;\n      </script>\n      <script>\n        const button = document.querySelector('ion-button');\n        button.addEventListener('click', handleButtonClick);\n    \n        async function handleButtonClick() {\n          const actionSheet = await actionSheetController.create({\n            header: 'Albums',\n            buttons: [\n              { text: 'Delete', role: 'destructive' },\n              { text: 'Share' },\n              { text: 'Play' },\n              { text: 'Favorite' },\n              { text: 'Cancel', role: 'cancel' }\n            ]\n          });\n    \n          await actionSheet.present();\n        }\n      </script>\n    `\n    }\n  }\n}\n"
  },
  {
    "path": "assets/stencil/components/react-demo/react-demo.scss",
    "content": ""
  },
  {
    "path": "assets/stencil/components/react-demo/react-demo.tsx",
    "content": "import { Component, Element, h } from '@stencil/core';\n@Component({\n  tag: 'ionic-react-demo',\n  styleUrl: 'react-demo.scss',\n  shadow: true\n})\nexport class IonicReactDemo {\n  @Element() el: Element;\n\n  componentDidLoad() {\n  }\n\n  render() {\n    return (\n      <div class=\"toggle-content\">\n      </div>\n    );\n  }\n}"
  },
  {
    "path": "assets/stencil/components/twitter-script/twitter-script.tsx",
    "content": "import { Component, h } from '@stencil/core';\n\n@Component({\n  tag: 'twitter-script',\n  shadow: false\n})\nexport class TwitterScript {\n  scriptEl: HTMLScriptElement;\n\n  componentDidLoad() {\n    const scriptValue = `\nwindow.twttr = (function (d, s, id) {\nvar js, fjs = d.getElementsByTagName(s)[0],\n  t = window.twttr || {};\nif (d.getElementById(id)) return t;\njs = d.createElement(s);\njs.id = id;\njs.src = \"https://platform.twitter.com/widgets.js\";\nfjs.parentNode.insertBefore(js, fjs);\n\nt._e = [];\nt.ready = function (f) {\n  t._e.push(f);\n};\n\nreturn t;\n}(document, \"script\", \"twitter-wjs\"));`\n\n    const script = document.createElement('script') as HTMLScriptElement;\n\n    script.type = 'text/javascript';\n    script.async = true;\n    script.innerHTML = scriptValue;\n    document.body.appendChild(script);\n  }\n\n  componentDidUnload() {\n    this.scriptEl && this.scriptEl.parentNode.removeChild(this.scriptEl);\n  }\n\n  render() {\n    return <span />;\n  }\n}"
  },
  {
    "path": "assets/stencil/components/ui/floating-input/floating-input.scss",
    "content": "ui-floating-input {\n  display: block;\n  position: relative;\n\n  .ui-floating-input {\n    position: relative;\n    \n    background: var(--c-indigo-50);\n\n    &.focused {\n      border-color: var(--c-blue-800);\n\n      label {\n        color: var(--c-blue-800) !important;\n      }\n\n      input {\n        caret-color: var(--c-blue-800);\n      }\n    }\n\n    &.focused, &.has-value {\n      label {\n        font-size: 12px !important;\n        // line-height: 15px;\n        line-height: 1.15rem;\n        transform: translateY(-106%) scale(0.75);\n        cursor: auto;\n      }\n    }\n\n    \n  }\n\n  label {\n    position: absolute;\n    left: 16px;\n    top: 50%;\n    transform: translateY(-50%);\n    transform-origin: left top;\n    will-change: transform;\n    pointer-events: none;\n\n    color: var(--c-carbon-100) !important;\n    display: block;\n    font-weight: normal;\n    font-size: 15px !important;\n    line-height: 18px !important;\n    letter-spacing: .009375em;\n\n    overflow: hidden;\n    white-space: nowrap;\n\n    text-align: left;\n    cursor: text;\n\n    transition: transform 150ms cubic-bezier(0.4, 0, 0.2, 1), color 150ms cubic-bezier(0.4, 0, 0.2, 1);\n  }\n\n  input {\n    border: 1px solid var(--c-indigo-400);\n    border-radius: 8px;\n    padding: 20px 16px 6px;\n\n    color: var(--c-carbon-800);\n\n    width: 100%;\n\n    &:focus {\n    }\n\n    &:required {\n      box-shadow: none;\n    }\n\n    &:valid {\n    }\n\n    &.invalid {\n      border: 1px solid var(--c-red-600);\n    }\n  }\n\n  .form-message {\n    color: var(--c-red-600);\n    font-weight: 500;\n\n    &--small {\n      font-size: 11px;\n      line-height: 16px;\n      margin-top: 2px;\n    }\n  }\n}"
  },
  {
    "path": "assets/stencil/components/ui/floating-input/floating-input.tsx",
    "content": "import { Component, h, Prop, State, Method } from '@stencil/core';\n\n@Component({\n  tag: 'ui-floating-input',\n  styleUrl: 'floating-input.scss',\n  shadow: false\n})\nexport class FloatingInput {\n  @Prop() label = '';\n  @Prop() disabled = false;\n  @Prop() value = '';\n  @Prop() name: string;\n  @Prop() inputId: string;\n  @Prop() type = 'text';\n  @Prop() message = '';\n  @Prop() inputTabIndex: number;\n  @Prop() required: boolean;\n  @Prop() autocomplete: string;\n  @Prop() onChange: (e) => void = (_e) => {};\n\n  @State() focused = false;\n\n  @Method()\n  async setFocus(focused) {\n    this.focused = focused;\n  }\n\n  checkChange = (e) => {\n    this.onChange && this.onChange(e);\n  }\n\n  handleInput = (e) => {\n    this.checkChange(e);\n  }\n\n  handleChange = (e) => {\n    this.checkChange(e);\n  }\n\n  handleKeyUp = (e) => {\n    this.checkChange(e);\n  }\n\n  handlePaste = (e) => {\n    this.checkChange(e);\n  }\n\n  handleClick = (e) => {\n    this.checkChange(e);\n  }\n\n  handleBlur = () => {\n    this.setFocus(false);\n    this.message = '';\n  }\n\n  render() {\n    const { label, type, name, inputId, inputTabIndex,\n            required, value, disabled, autocomplete, message } = this;\n\n    return [\n      <div class={{'ui-floating-input': true,\n                    'focused': this.focused,\n                    'has-value': this.value !== ''}}>\n        <input\n          id={inputId}\n          class={{'invalid': this.message !== ''}}\n          type={type}\n          name={name}\n          tabindex={inputTabIndex}\n          required={required}\n          value={value}\n          disabled={disabled}\n          autocomplete={autocomplete}\n          onInput={this.handleInput}\n          onPaste={this.handlePaste}\n          onKeyUp={this.handleKeyUp}\n          onClick={this.handleClick}\n          onFocus={_e => this.setFocus(true)}\n          onBlur={this.handleBlur}\n          />\n        <label>{label}</label>\n      </div>,\n      message && <div class=\"form-message form-message--small\">{message}</div>\n    ];\n  }\n}"
  },
  {
    "path": "assets/stencil/components/ui/tip/tip.scss",
    "content": "ui-tip {\n  display: contents;\n  cursor: pointer;\n}\n\nui-tip.is-active:after {\n  opacity: 1;\n  transition: opacity 150ms;\n  transition-delay: 100ms;\n}\n\nui-tip:after {\n  background-color: var(--c-black);\n  border: solid 1px var(--c-gray-30);\n  border-radius: 4px;\n  color: var(--c-grey-400);\n  content: attr(text);\n  font-family: var(--font-family);\n  font-size: 12px;\n  text-transform: none;\n  line-height: 1;\n  opacity: 0;\n  padding: 0.75em;\n  pointer-events: none;\n  position: fixed;\n  transition: opacity 75ms;\n  white-space: nowrap;\n  z-index: 1000;\n}\n\nui-tip.bottom:after {\n  left: calc(var(--target-left) + (var(--target-width) / 2) + var(--tip-adjustment-x, 0px));\n  top: calc(var(--target-bottom) - var(--tip-adjustment-y, 0px));\n  transform: translate(-50%, 0);\n}\n\nui-tip.right:after {\n  left: calc(var(--target-right) + var(--tip-adjustment-x, 0px));\n  top: calc(var(--target-top) + (var(--target-height) / 2) - var(--tip-adjustment-y, 0px));\n  transform: translate(0, -50%);\n}\n\nui-tip.top:after {\n  left: calc(var(--target-left) + (var(--target-width) / 2) + var(--tip-adjustment-x, 0px));\n  top: calc(var(--target-top) - var(--tip-adjustment-y, 0px));\n  transform: translate(-50%, -100%);\n}\n\nui-tip.left:after {\n  left: calc(var(--target-left) + var(--tip-adjustment-x, 0px));\n  top: calc(var(--target-top) + (var(--target-height) / 2) - var(--tip-adjustment-y, 0px));\n  transform: translate(-100%, -50%);\n}"
  },
  {
    "path": "assets/stencil/components/ui/tip/tip.tsx",
    "content": "import { Component, Element, Listen, State, Prop, h } from '@stencil/core';\n\nconst defaultBounds: ClientRect = {\n  top: 0,\n  right: 0,\n  bottom: 0,\n  left: 0,\n  width: 0,\n  height: 0,\n};\n\n@Component({\n  tag: 'ui-tip',\n  styleUrl: 'tip.scss'\n})\nexport class UiTip {\n  @Prop({ reflect: true }) text: string;\n  @Prop({ reflect: true }) disabled = false;\n  @Prop() position: 'top' | 'right' | 'bottom' | 'left' = 'bottom';\n  @State() isActive = false;\n  @State() bounds: ClientRect;\n  @Element() element: HTMLElement;\n\n  @Listen('mouseenter')\n  handleMouseEnter() {\n    if (!this.disabled && this.element.firstElementChild) {\n      this.bounds = this.getBounds(this.element.firstElementChild);\n      this.isActive = true;\n    }\n  }\n\n  @Listen('mousedown')\n  @Listen('mouseleave')\n  handleMouseLeave() {\n    this.isActive = false;\n  }\n\n  getBounds(element: Element): ClientRect {\n    return element.getBoundingClientRect();\n  }\n\n  hostData() {\n    const { bounds = defaultBounds } = this;\n\n    return {\n      class: {\n        'is-active': this.isActive,\n        [this.position]: true,\n      },\n      style: {\n        '--target-top': `${bounds.top}px`,\n        '--target-right': `${bounds.right}px`,\n        '--target-bottom': `${bounds.bottom}px`,\n        '--target-left': `${bounds.left}px`,\n        '--target-width': `${bounds.width}px`,\n        '--target-height': `${bounds.height}px`,\n      },\n      'aria-label': this.text,\n    };\n  }\n\n  render() {\n    return <slot />;\n  }\n}\n"
  },
  {
    "path": "assets/stencil/components/vue-components/vue-components.scss",
    "content": "@import \"../../vars\";\n// @import '../../../../node_modules/prismjs/themes/prism-tomorrow';\n@import \"../../prism-ionic\";\n\n:host {\n  display: block;\n\n  * {\n    box-sizing: border-box;\n  }\n\n  .grid {\n    height: 100%;\n    display: grid;\n    grid-template-columns: 1fr;\n    grid-template-rows: 50px 1fr;\n  }\n\n  border-radius: 10px;\n  margin-right: -24px;\n  margin-left: -24px;\n\n  @media (min-width: 1200px) {\n    margin-right: -64px;\n    margin-left: -64px;\n  }\n\n  @media (max-width: $screen-sm-max) {\n    grid-template-columns: minmax(200px, 1fr) 290px;\n    margin-right: -8px;\n    margin-left: -8px;\n  }\n\n  .code-header {\n    background: #0b1521;\n    border-radius: 10px 0 0 0;\n    font-size: 12px;\n    font-weight: 600;\n    line-height: 13px;\n    letter-spacing: 0.1em;\n    text-transform: uppercase;\n    display: flex;\n    justify-content: space-between;\n\n    ul {\n      display: flex;\n      flex-direction: row;\n      padding: 0;\n      margin: 0;\n    }\n\n    li {\n      color: #7a8ea7;\n      border: 1px solid transparent;\n      list-style: none;\n      padding: 20px;\n      cursor: pointer;\n      user-select: none;\n      z-index: 1;\n      position: relative;\n      transition: 0.2s color, 0.2s background-color;\n\n      &::after {\n        position: absolute;\n        height: 1px;\n        content: \"\";\n        bottom: -2px;\n        left: 0;\n        right: 0;\n        background: transparent;\n      }\n\n      &.active {\n        background: #1c2b3e;\n        border-color: #283a50;\n        border-bottom-color: #1c2b3e;\n        color: #ffffff;\n\n        &::after {\n          background: #1c2b3e;\n        }\n      }\n\n      &:first-child {\n        border-radius: 10px 0 0 0;\n      }\n\n      &:hover {\n        color: #ffffff;\n      }\n\n      @media (max-width: $screen-xs-max) {\n        padding: 20px 10px;\n      }\n    }\n\n    a {\n      background: rgba(#7cabff, 0.3);\n      color: #7cabff;\n      border-radius: 16px;\n      padding: 8px;\n      align-self: center;\n      margin-right: 20px;\n      transition: 0.2s background-color;\n\n      &:hover,\n      &:active,\n      &:focus {\n        text-decoration: none;\n        background: rgba(#7cabff, 0.5);\n      }\n\n      @media (max-width: $screen-xs-max) {\n        display: none;\n      }\n    }\n  }\n\n  .preview-header {\n    background: #f9fafc;\n    border: 1px solid #e9edf3;\n    border-bottom: none;\n    border-radius: 10px 10px 0px 0px;\n    display: flex;\n    justify-content: center;\n    align-items: center;\n\n    ion-segment {\n      display: flex;\n      justify-content: center;\n      width: 142px;\n      background: #e9edf3;\n    }\n\n    ion-segment-button {\n      flex: 0 1;\n    }\n  }\n\n  .tab-content,\n  .preview-content {\n    position: relative;\n    padding: 0;\n    margin: 0;\n\n    li {\n      display: none;\n\n      &.active {\n        display: block;\n      }\n    }\n  }\n\n  .preview-content.code {\n    background: #1c2b3e;\n    display: block;\n    overflow: hidden;\n\n    li {\n      height: 100%;\n    }\n\n    pre {\n      height: 100%;\n      overflow-x: auto;\n      background: transparent;\n      padding: 0;\n      margin: 0;\n      color: white;\n      border: none;\n      font-size: 13px;\n      line-height: 23px;\n      letter-spacing: -0.01em;\n      font-weight: 500;\n      font-family: $font-family-mono;\n      padding: 24px 48px;\n\n      @media (max-width: $screen-xs-max) {\n        padding: 24px 0 48px 16px;\n      }\n\n      code {\n        white-space: pre;\n      }\n    }\n  }\n\n  .preview-content {\n    background: radial-gradient(#e8ebef 10%, #fcfdfe 10%) repeat;\n    border: 1px solid #e9edf3;\n    background-size: 10px 10px;\n    border-radius: 0 0 10px 10px;\n    display: flex;\n    justify-content: center;\n    align-items: center;\n\n    iframe {\n      background: transparent;\n    }\n  }\n\n  @media (max-width: 525px) {\n    grid-template-columns: 100%;\n\n    .code-header {\n      border-radius: 10px 10px 0 0;\n\n      li {\n        padding: 20px;\n      }\n    }\n\n    .tab-content {\n      border-radius: 0 0 10px 10px;\n    }\n  }\n}\n"
  },
  {
    "path": "assets/stencil/components/vue-components/vue-components.tsx",
    "content": "import { Component, State, h, Prop, Watch } from \"@stencil/core\";\n\nimport \"@ionic/core\";\nimport Prism from \"prismjs\";\n\nexport type TabType = \"card\" | \"lists\" | \"actionSheet\";\n\n@Component({\n  tag: \"vue-components\",\n  styleUrl: \"vue-components.scss\",\n  shadow: true,\n})\nexport class VueComponents {\n  @Prop() tab: TabType = \"card\";\n  @State() activeTab: TabType = \"card\";\n  @State() activeView = \"preview\";\n\n  @Watch(\"tab\")\n  handleTabChange() {\n    this.activeTab = this.tab;\n  }\n\n  resizeIframe(el) {\n    setTimeout(() => {\n      el.style.height =\n        (el.contentWindow.document.documentElement.scrollHeight || 350) + \"px\";\n    }, 50);\n  }\n\n  renderCode = (code) => {\n    return (\n      <pre>\n        <code\n          innerHTML={Prism.highlight(code, Prism.languages.html, \"html\")}\n        ></code>\n      </pre>\n    );\n  };\n\n  render() {\n    return (\n      <div class=\"grid\">\n        <header class=\"preview-header\">\n          <ion-segment\n            mode=\"ios\"\n            value={this.activeView}\n            color=\"medium\"\n            onIonChange={e => this.activeView = e.detail.value }\n          >\n            <ion-segment-button value=\"preview\" >\n              <ion-label>Preview</ion-label>\n            </ion-segment-button>\n            <ion-segment-button value=\"code\">\n              <ion-label>Code</ion-label>\n            </ion-segment-button>\n          </ion-segment>\n        </header>\n\n        <ul\n          class={`preview-content${this.activeView === \"code\" ? \" code\" : \"\"}`}\n        >\n          {Object.keys(this.markup).map((key) => (\n            <li class={this.activeTab === key ? \"active\" : \"innactive\"}>\n              <iframe\n                srcdoc={this.ionicInjector(this.markup[key].src)}\n                frameborder=\"0\"\n                scrolling=\"no\"\n                style={{\n                  display: this.activeView === \"preview\" ? \"block\" : \"none\",\n                }}\n                onLoad={(e) => this.resizeIframe(e.target)}\n              ></iframe>\n              {this.activeView === \"code\"\n                ? this.renderCode(this.markup[key].display)\n                : null}\n            </li>\n          ))}\n        </ul>\n      </div>\n    );\n  }\n\n  ionicInjector(code) {\n    return `\n  <link rel=\"stylesheet\" href=\"https://cdn.jsdelivr.net/npm/@ionic/core@next/css/ionic.bundle.css\" />\n  <script type=\"module\" src=\"https://cdn.jsdelivr.net/npm/@ionic/core@next/dist/ionic/ionic.esm.js\"></script>\n  <script nomodule src=\"https://cdn.jsdelivr.net/npm/@ionic/core@next/dist/ionic/ionic.js\"></script>\n  <script>window.Ionic = {\n    config: {\n      mode: 'ios'\n    }\n  }</script>\n  ${code}`;\n  }\n\n  markup = {\n    card: {\n      display: `\n  <ion-card>\n    <ion-img :src=\"/assets/myImg.png\"></ion-img>\n    <ion-card-header>\n      <ion-card-subtitle>Card Subtitle</ion-card-subtitle>\n      <ion-card-title>Card Title</ion-card-title>\n    </ion-card-header>\n    <ion-card-content>\n      <p>\n        Here’s a small text description for the card component. \n        Nothing more, nothing less.\n      </p>\n      <ion-item>\n        <ion-button fill=\"solid\">Action</ion-button>\n        <ion-icon :icon=\"heart\" slot=\"end\"></ion-icon>\n        <ion-icon :icon=\"share\" slot=\"end\"></ion-icon>\n      </ion-item>\n    </ion-card-content>\n  </ion-card>`,\n      src: `\n          <style>\n            html, body {\n              height: 380px;\n            }\n            ion-card {\n              border-radius: 1rem;\n            }\n            ion-card img {\n              width: 100%;\n              height: 120px;\n            }\n            \n            ion-card ion-grid {\n              --ion-grid-column-padding: 0;\n              \n              padding: 10px 0 0;\n            }\n            \n            ion-card-content ion-col:last-child {\n              text-align: right;\n            }\n            \n            ion-card ion-button[fill=\"clear\"] {\n              --padding-end: 0;\n              margin: 0;\n            \n              height: 30px;\n            }\n          </style>\n          <ion-card>\n            <img src=\"/img/vue/demo-image@2x.png\" loading=\"lazy\" width=\"288\" height=\"148\"  />\n            <ion-card-header>\n              <ion-card-subtitle>Card Subtitle</ion-card-subtitle>\n              <ion-card-title>Card Title</ion-card-title>\n            </ion-card-header>\n            <ion-card-content>\n              Here's a small text description for the card content. Nothing more, nothing less.\n              <ion-grid>\n                <ion-row>\n                  <ion-col>\n                    <ion-button size=\"small\">Action</ion-button>\n                  </ion-col>\n                  <ion-col>\n                    <ion-button fill=\"clear\" color=\"medium\">\n                      <ion-icon slot=\"icon-only\" name=\"heart-outline\"></ion-icon>\n                    </ion-button>\n                    <ion-button fill=\"clear\" color=\"medium\">\n                      <ion-icon slot=\"icon-only\" name=\"share-outline\"></ion-icon>\n                    </ion-button>\n                  </ion-col>\n                </ion-row>\n              </ion-grid>\n            </ion-card-content>\n          </ion-card>`,\n    },\n\n    lists: {\n      display: `\n  <ion-list>\n    <ion-item v-for=\"album in albums\" :key=\"album.id\">\n      <ion-thumbnail slot=\"start\">\n        <ion-img :src=\"album.artwork\"></ion-img>\n      </ion-thumbnail>\n      <ion-label>\n        <h2>{{album.title}}</h2>\n        <p>{{album.artist}}, {{album.year}}</p>\n      </ion-label>\n    </ion-item>\n  </ion-list>\n  `,\n      src: `\n        <style>\n          html, body {\n            min-height: 300px;\n          }\n          ion-thumbnail {\n            --border-radius: 6px;\n          }\n        </style>\n        <ion-app>\n          <ion-content>\n            <ion-list>\n              <ion-item>\n                <ion-thumbnail slot=\"start\">\n                  <img src=\"https://upload.wikimedia.org/wikipedia/en/2/26/Iron_%26_Wine_-_Beast_Epic.jpg\" />\n                </ion-thumbnail>\n                <ion-label>\n                  <h2>Beast Epic</h2>\n                  <p>Iron & Wine, 2017</p>\n                </ion-label>\n              </ion-item>\n              <ion-item>\n                <ion-thumbnail slot=\"start\">\n                  <img src=\"https://media.pitchfork.com/photos/5c7425267ad40308b4a8835c/1:1/w_320/JapaneseHouse_GoodAtFalling.jpg\" />\n                </ion-thumbnail>\n                <ion-label>\n                  <h2>Good At Falling</h2>\n                  <p>The Japanese House, 2019</p>\n                </ion-label>\n              </ion-item>\n              <ion-item>\n                <ion-thumbnail slot=\"start\">\n                  <img src=\"https://upload.wikimedia.org/wikipedia/en/4/4f/Hallucinogen_%28EP%29_%28Front_Cover%29.png\" />\n                </ion-thumbnail>\n                <ion-label>\n                  <h2>Hallucinogen</h2>\n                  <p>Kelela, 2015</p>\n                </ion-label>\n              </ion-item>\n              <ion-item>\n                <ion-thumbnail slot=\"start\">\n                  <img src=\"https://upload.wikimedia.org/wikipedia/en/6/66/22%2C_A_Million_cover.jpg\" />\n                </ion-thumbnail>\n                <ion-label>\n                  <h2>22, A Million</h2>\n                  <p>Bon Iver, 2016</p>\n                </ion-label>\n              </ion-item>\n              <ion-item>\n                <ion-thumbnail slot=\"start\">\n                  <img src=\"https://upload.wikimedia.org/wikipedia/en/thumb/0/02/F%28x%29_4_Walls_CD_Cover.jpg/220px-F%28x%29_4_Walls_CD_Cover.jpg\" />\n                </ion-thumbnail>\n                <ion-label>\n                  <h2>4 Walls</h2>\n                  <p>f(x), 2015</p>\n                </ion-label>\n              </ion-item>\n            </ion-list>\n          </ion-content>\n        </ion-app>`,\n    },\n\n    actionSheet: {\n      display: `\n  <ion-button\n    @click=\"setShowActionSheet(true)\"\n    expand=\"block\">Show Action Sheet</ion-button>\n  <ion-action-sheet\n    :is-open=\"isOpenRef\"\n    header=\"Albums\"\n    :buttons=\"buttons\"\n    @onDidDismiss=\"setShowActionSheet(false)\">\n  </ion-action-sheet>`,\n      src: `\n        <ion-app>\n          <ion-content fullscreen class=\"ion-padding\">\n            <ion-button expand=\"block\">Open Action Sheet</ion-button>\n          </ion-content>\n        </ion-app>\n        <script type=\"module\">\n          import { actionSheetController } from 'https://cdn.jsdelivr.net/npm/@ionic/core@next/dist/ionic/index.esm.js';\n          window.actionSheetController = actionSheetController;\n        </script>\n        <script>\n          const button = document.querySelector('ion-button');\n          button.addEventListener('click', handleButtonClick);\n      \n          async function handleButtonClick() {\n            const actionSheet = await actionSheetController.create({\n              header: 'Albums',\n              buttons: [\n                { text: 'Delete', role: 'destructive' },\n                { text: 'Share' },\n                { text: 'Play' },\n                { text: 'Favorite' },\n                { text: 'Cancel', role: 'cancel' }\n              ]\n            });\n      \n            await actionSheet.present();\n          }\n        </script>\n      `,\n    },\n  };\n}\n"
  },
  {
    "path": "assets/stencil/components.d.ts",
    "content": "/* eslint-disable */\n/* tslint:disable */\n/**\n * This is an autogenerated file created by the Stencil compiler.\n * It contains typing information for all components that exist in this project.\n */\nimport { HTMLStencilElement, JSXBase } from \"@stencil/core/internal\";\nimport { TabType } from \"./components/angular-components/angular-components\";\nimport { TabType as TabType1 } from \"./components/react-capacitor/react-capacitor\";\nimport { TabType as TabType2 } from \"./components/react-components/react-components\";\nimport { TabType as TabType3 } from \"./components/vue-components/vue-components\";\nexport namespace Components {\n    interface AdditionalResources {\n        \"page\": string;\n    }\n    interface AngularComponents {\n        \"tab\": TabType;\n    }\n    interface AuthConnectPromo {\n    }\n    interface BarChart {\n        \"color\": string;\n        \"graphData\": string | object;\n    }\n    interface EbookSwitcher {\n        \"id\": string;\n    }\n    interface HomeComponents {\n    }\n    interface HomeCountdown {\n        \"eventStart\": string;\n    }\n    interface HomeNative {\n    }\n    interface HubspotDynamicContent {\n        \"listId\": string;\n    }\n    interface HubspotForm {\n        \"ajax\": boolean;\n        \"formId\"?: string;\n        \"goToWebinarKey\"?: string;\n        \"noDefaultStyles\": boolean;\n        \"portalId\": string;\n        \"submitText\": any;\n    }\n    interface IconExternal {\n    }\n    interface IonicAppWizard {\n    }\n    interface IonicAppflowActivator {\n    }\n    interface IonicBarChart {\n        \"color\": string;\n        \"data\": string;\n    }\n    interface IonicButton {\n        \"color\": string;\n        \"disabled\": boolean;\n        \"type\": string;\n    }\n    interface IonicEmojiPicker {\n        \"open\": boolean;\n        \"openEvent\": MouseEvent;\n    }\n    interface IonicNewsletterSignup {\n        \"arrowMode\": boolean;\n        \"buttonText\": string;\n        \"darkMode\": boolean;\n        \"homepageMode\": boolean;\n        \"kind\": string;\n        \"lg\": boolean;\n        \"placeholder\": string;\n        \"srLabel\": { id: string; text: string; };\n    }\n    interface IonicReactDemo {\n    }\n    interface IonicSearch {\n        \"mobile\": boolean;\n    }\n    interface IonicSlider {\n    }\n    interface IonicSnapBar {\n    }\n    interface IonicSubHeader {\n        \"darkMode\": boolean;\n    }\n    interface IonicSwitcher {\n        \"index\": number;\n        \"items\": string;\n    }\n    interface IonicToggle {\n    }\n    interface IonicToggleButton {\n        \"deselect\": () => Promise<void>;\n        \"select\": () => Promise<void>;\n        \"tab\": string;\n        \"title\": string;\n    }\n    interface IonicToggleTab {\n        \"hide\": () => Promise<void>;\n        \"show\": () => Promise<void>;\n        \"tab\": string;\n    }\n    interface ReactCapacitor {\n        \"tab\": TabType;\n    }\n    interface ReactComponents {\n        \"tab\": TabType;\n    }\n    interface TwitterScript {\n    }\n    interface UiFloatingInput {\n        \"autocomplete\": string;\n        \"disabled\": boolean;\n        \"inputId\": string;\n        \"inputTabIndex\": number;\n        \"label\": string;\n        \"message\": string;\n        \"name\": string;\n        \"onChange\": (e) => void;\n        \"required\": boolean;\n        \"setFocus\": (focused: any) => Promise<void>;\n        \"type\": string;\n        \"value\": string;\n    }\n    interface UiTip {\n        \"disabled\": boolean;\n        \"position\": 'top' | 'right' | 'bottom' | 'left';\n        \"text\": string;\n    }\n    interface VueComponents {\n        \"tab\": TabType;\n    }\n}\ndeclare global {\n    interface HTMLAdditionalResourcesElement extends Components.AdditionalResources, HTMLStencilElement {\n    }\n    var HTMLAdditionalResourcesElement: {\n        prototype: HTMLAdditionalResourcesElement;\n        new (): HTMLAdditionalResourcesElement;\n    };\n    interface HTMLAngularComponentsElement extends Components.AngularComponents, HTMLStencilElement {\n    }\n    var HTMLAngularComponentsElement: {\n        prototype: HTMLAngularComponentsElement;\n        new (): HTMLAngularComponentsElement;\n    };\n    interface HTMLAuthConnectPromoElement extends Components.AuthConnectPromo, HTMLStencilElement {\n    }\n    var HTMLAuthConnectPromoElement: {\n        prototype: HTMLAuthConnectPromoElement;\n        new (): HTMLAuthConnectPromoElement;\n    };\n    interface HTMLBarChartElement extends Components.BarChart, HTMLStencilElement {\n    }\n    var HTMLBarChartElement: {\n        prototype: HTMLBarChartElement;\n        new (): HTMLBarChartElement;\n    };\n    interface HTMLEbookSwitcherElement extends Components.EbookSwitcher, HTMLStencilElement {\n    }\n    var HTMLEbookSwitcherElement: {\n        prototype: HTMLEbookSwitcherElement;\n        new (): HTMLEbookSwitcherElement;\n    };\n    interface HTMLHomeComponentsElement extends Components.HomeComponents, HTMLStencilElement {\n    }\n    var HTMLHomeComponentsElement: {\n        prototype: HTMLHomeComponentsElement;\n        new (): HTMLHomeComponentsElement;\n    };\n    interface HTMLHomeCountdownElement extends Components.HomeCountdown, HTMLStencilElement {\n    }\n    var HTMLHomeCountdownElement: {\n        prototype: HTMLHomeCountdownElement;\n        new (): HTMLHomeCountdownElement;\n    };\n    interface HTMLHomeNativeElement extends Components.HomeNative, HTMLStencilElement {\n    }\n    var HTMLHomeNativeElement: {\n        prototype: HTMLHomeNativeElement;\n        new (): HTMLHomeNativeElement;\n    };\n    interface HTMLHubspotDynamicContentElement extends Components.HubspotDynamicContent, HTMLStencilElement {\n    }\n    var HTMLHubspotDynamicContentElement: {\n        prototype: HTMLHubspotDynamicContentElement;\n        new (): HTMLHubspotDynamicContentElement;\n    };\n    interface HTMLHubspotFormElement extends Components.HubspotForm, HTMLStencilElement {\n    }\n    var HTMLHubspotFormElement: {\n        prototype: HTMLHubspotFormElement;\n        new (): HTMLHubspotFormElement;\n    };\n    interface HTMLIconExternalElement extends Components.IconExternal, HTMLStencilElement {\n    }\n    var HTMLIconExternalElement: {\n        prototype: HTMLIconExternalElement;\n        new (): HTMLIconExternalElement;\n    };\n    interface HTMLIonicAppWizardElement extends Components.IonicAppWizard, HTMLStencilElement {\n    }\n    var HTMLIonicAppWizardElement: {\n        prototype: HTMLIonicAppWizardElement;\n        new (): HTMLIonicAppWizardElement;\n    };\n    interface HTMLIonicAppflowActivatorElement extends Components.IonicAppflowActivator, HTMLStencilElement {\n    }\n    var HTMLIonicAppflowActivatorElement: {\n        prototype: HTMLIonicAppflowActivatorElement;\n        new (): HTMLIonicAppflowActivatorElement;\n    };\n    interface HTMLIonicBarChartElement extends Components.IonicBarChart, HTMLStencilElement {\n    }\n    var HTMLIonicBarChartElement: {\n        prototype: HTMLIonicBarChartElement;\n        new (): HTMLIonicBarChartElement;\n    };\n    interface HTMLIonicButtonElement extends Components.IonicButton, HTMLStencilElement {\n    }\n    var HTMLIonicButtonElement: {\n        prototype: HTMLIonicButtonElement;\n        new (): HTMLIonicButtonElement;\n    };\n    interface HTMLIonicEmojiPickerElement extends Components.IonicEmojiPicker, HTMLStencilElement {\n    }\n    var HTMLIonicEmojiPickerElement: {\n        prototype: HTMLIonicEmojiPickerElement;\n        new (): HTMLIonicEmojiPickerElement;\n    };\n    interface HTMLIonicNewsletterSignupElement extends Components.IonicNewsletterSignup, HTMLStencilElement {\n    }\n    var HTMLIonicNewsletterSignupElement: {\n        prototype: HTMLIonicNewsletterSignupElement;\n        new (): HTMLIonicNewsletterSignupElement;\n    };\n    interface HTMLIonicReactDemoElement extends Components.IonicReactDemo, HTMLStencilElement {\n    }\n    var HTMLIonicReactDemoElement: {\n        prototype: HTMLIonicReactDemoElement;\n        new (): HTMLIonicReactDemoElement;\n    };\n    interface HTMLIonicSearchElement extends Components.IonicSearch, HTMLStencilElement {\n    }\n    var HTMLIonicSearchElement: {\n        prototype: HTMLIonicSearchElement;\n        new (): HTMLIonicSearchElement;\n    };\n    interface HTMLIonicSliderElement extends Components.IonicSlider, HTMLStencilElement {\n    }\n    var HTMLIonicSliderElement: {\n        prototype: HTMLIonicSliderElement;\n        new (): HTMLIonicSliderElement;\n    };\n    interface HTMLIonicSnapBarElement extends Components.IonicSnapBar, HTMLStencilElement {\n    }\n    var HTMLIonicSnapBarElement: {\n        prototype: HTMLIonicSnapBarElement;\n        new (): HTMLIonicSnapBarElement;\n    };\n    interface HTMLIonicSubHeaderElement extends Components.IonicSubHeader, HTMLStencilElement {\n    }\n    var HTMLIonicSubHeaderElement: {\n        prototype: HTMLIonicSubHeaderElement;\n        new (): HTMLIonicSubHeaderElement;\n    };\n    interface HTMLIonicSwitcherElement extends Components.IonicSwitcher, HTMLStencilElement {\n    }\n    var HTMLIonicSwitcherElement: {\n        prototype: HTMLIonicSwitcherElement;\n        new (): HTMLIonicSwitcherElement;\n    };\n    interface HTMLIonicToggleElement extends Components.IonicToggle, HTMLStencilElement {\n    }\n    var HTMLIonicToggleElement: {\n        prototype: HTMLIonicToggleElement;\n        new (): HTMLIonicToggleElement;\n    };\n    interface HTMLIonicToggleButtonElement extends Components.IonicToggleButton, HTMLStencilElement {\n    }\n    var HTMLIonicToggleButtonElement: {\n        prototype: HTMLIonicToggleButtonElement;\n        new (): HTMLIonicToggleButtonElement;\n    };\n    interface HTMLIonicToggleTabElement extends Components.IonicToggleTab, HTMLStencilElement {\n    }\n    var HTMLIonicToggleTabElement: {\n        prototype: HTMLIonicToggleTabElement;\n        new (): HTMLIonicToggleTabElement;\n    };\n    interface HTMLReactCapacitorElement extends Components.ReactCapacitor, HTMLStencilElement {\n    }\n    var HTMLReactCapacitorElement: {\n        prototype: HTMLReactCapacitorElement;\n        new (): HTMLReactCapacitorElement;\n    };\n    interface HTMLReactComponentsElement extends Components.ReactComponents, HTMLStencilElement {\n    }\n    var HTMLReactComponentsElement: {\n        prototype: HTMLReactComponentsElement;\n        new (): HTMLReactComponentsElement;\n    };\n    interface HTMLTwitterScriptElement extends Components.TwitterScript, HTMLStencilElement {\n    }\n    var HTMLTwitterScriptElement: {\n        prototype: HTMLTwitterScriptElement;\n        new (): HTMLTwitterScriptElement;\n    };\n    interface HTMLUiFloatingInputElement extends Components.UiFloatingInput, HTMLStencilElement {\n    }\n    var HTMLUiFloatingInputElement: {\n        prototype: HTMLUiFloatingInputElement;\n        new (): HTMLUiFloatingInputElement;\n    };\n    interface HTMLUiTipElement extends Components.UiTip, HTMLStencilElement {\n    }\n    var HTMLUiTipElement: {\n        prototype: HTMLUiTipElement;\n        new (): HTMLUiTipElement;\n    };\n    interface HTMLVueComponentsElement extends Components.VueComponents, HTMLStencilElement {\n    }\n    var HTMLVueComponentsElement: {\n        prototype: HTMLVueComponentsElement;\n        new (): HTMLVueComponentsElement;\n    };\n    interface HTMLElementTagNameMap {\n        \"additional-resources\": HTMLAdditionalResourcesElement;\n        \"angular-components\": HTMLAngularComponentsElement;\n        \"auth-connect-promo\": HTMLAuthConnectPromoElement;\n        \"bar-chart\": HTMLBarChartElement;\n        \"ebook-switcher\": HTMLEbookSwitcherElement;\n        \"home-components\": HTMLHomeComponentsElement;\n        \"home-countdown\": HTMLHomeCountdownElement;\n        \"home-native\": HTMLHomeNativeElement;\n        \"hubspot-dynamic-content\": HTMLHubspotDynamicContentElement;\n        \"hubspot-form\": HTMLHubspotFormElement;\n        \"icon-external\": HTMLIconExternalElement;\n        \"ionic-app-wizard\": HTMLIonicAppWizardElement;\n        \"ionic-appflow-activator\": HTMLIonicAppflowActivatorElement;\n        \"ionic-bar-chart\": HTMLIonicBarChartElement;\n        \"ionic-button\": HTMLIonicButtonElement;\n        \"ionic-emoji-picker\": HTMLIonicEmojiPickerElement;\n        \"ionic-newsletter-signup\": HTMLIonicNewsletterSignupElement;\n        \"ionic-react-demo\": HTMLIonicReactDemoElement;\n        \"ionic-search\": HTMLIonicSearchElement;\n        \"ionic-slider\": HTMLIonicSliderElement;\n        \"ionic-snap-bar\": HTMLIonicSnapBarElement;\n        \"ionic-sub-header\": HTMLIonicSubHeaderElement;\n        \"ionic-switcher\": HTMLIonicSwitcherElement;\n        \"ionic-toggle\": HTMLIonicToggleElement;\n        \"ionic-toggle-button\": HTMLIonicToggleButtonElement;\n        \"ionic-toggle-tab\": HTMLIonicToggleTabElement;\n        \"react-capacitor\": HTMLReactCapacitorElement;\n        \"react-components\": HTMLReactComponentsElement;\n        \"twitter-script\": HTMLTwitterScriptElement;\n        \"ui-floating-input\": HTMLUiFloatingInputElement;\n        \"ui-tip\": HTMLUiTipElement;\n        \"vue-components\": HTMLVueComponentsElement;\n    }\n}\ndeclare namespace LocalJSX {\n    interface AdditionalResources {\n        \"page\"?: string;\n    }\n    interface AngularComponents {\n        \"tab\"?: TabType;\n    }\n    interface AuthConnectPromo {\n    }\n    interface BarChart {\n        \"color\"?: string;\n        \"graphData\"?: string | object;\n    }\n    interface EbookSwitcher {\n        \"id\"?: string;\n    }\n    interface HomeComponents {\n    }\n    interface HomeCountdown {\n        \"eventStart\"?: string;\n    }\n    interface HomeNative {\n    }\n    interface HubspotDynamicContent {\n        \"listId\"?: string;\n    }\n    interface HubspotForm {\n        \"ajax\"?: boolean;\n        \"formId\"?: string;\n        \"goToWebinarKey\"?: string;\n        \"noDefaultStyles\"?: boolean;\n        \"onFormSubmitted\"?: (event: CustomEvent<any>) => void;\n        \"portalId\"?: string;\n        \"submitText\"?: any;\n    }\n    interface IconExternal {\n    }\n    interface IonicAppWizard {\n    }\n    interface IonicAppflowActivator {\n    }\n    interface IonicBarChart {\n        \"color\"?: string;\n        \"data\"?: string;\n    }\n    interface IonicButton {\n        \"color\"?: string;\n        \"disabled\"?: boolean;\n        \"type\"?: string;\n    }\n    interface IonicEmojiPicker {\n        \"onClosed\"?: (event: CustomEvent<any>) => void;\n        \"onEmojiPick\"?: (event: CustomEvent<any>) => void;\n        \"open\"?: boolean;\n        \"openEvent\"?: MouseEvent;\n    }\n    interface IonicNewsletterSignup {\n        \"arrowMode\"?: boolean;\n        \"buttonText\"?: string;\n        \"darkMode\"?: boolean;\n        \"homepageMode\"?: boolean;\n        \"kind\"?: string;\n        \"lg\"?: boolean;\n        \"placeholder\"?: string;\n        \"srLabel\"?: { id: string; text: string; };\n    }\n    interface IonicReactDemo {\n    }\n    interface IonicSearch {\n        \"mobile\"?: boolean;\n    }\n    interface IonicSlider {\n    }\n    interface IonicSnapBar {\n    }\n    interface IonicSubHeader {\n        \"darkMode\"?: boolean;\n    }\n    interface IonicSwitcher {\n        \"index\"?: number;\n        \"items\"?: string;\n    }\n    interface IonicToggle {\n    }\n    interface IonicToggleButton {\n        \"onToggleSelected\"?: (event: CustomEvent<any>) => void;\n        \"tab\"?: string;\n        \"title\"?: string;\n    }\n    interface IonicToggleTab {\n        \"tab\"?: string;\n    }\n    interface ReactCapacitor {\n        \"tab\"?: TabType;\n    }\n    interface ReactComponents {\n        \"tab\"?: TabType;\n    }\n    interface TwitterScript {\n    }\n    interface UiFloatingInput {\n        \"autocomplete\"?: string;\n        \"disabled\"?: boolean;\n        \"inputId\"?: string;\n        \"inputTabIndex\"?: number;\n        \"label\"?: string;\n        \"message\"?: string;\n        \"name\"?: string;\n        \"onChange\"?: (e) => void;\n        \"required\"?: boolean;\n        \"type\"?: string;\n        \"value\"?: string;\n    }\n    interface UiTip {\n        \"disabled\"?: boolean;\n        \"position\"?: 'top' | 'right' | 'bottom' | 'left';\n        \"text\"?: string;\n    }\n    interface VueComponents {\n        \"tab\"?: TabType;\n    }\n    interface IntrinsicElements {\n        \"additional-resources\": AdditionalResources;\n        \"angular-components\": AngularComponents;\n        \"auth-connect-promo\": AuthConnectPromo;\n        \"bar-chart\": BarChart;\n        \"ebook-switcher\": EbookSwitcher;\n        \"home-components\": HomeComponents;\n        \"home-countdown\": HomeCountdown;\n        \"home-native\": HomeNative;\n        \"hubspot-dynamic-content\": HubspotDynamicContent;\n        \"hubspot-form\": HubspotForm;\n        \"icon-external\": IconExternal;\n        \"ionic-app-wizard\": IonicAppWizard;\n        \"ionic-appflow-activator\": IonicAppflowActivator;\n        \"ionic-bar-chart\": IonicBarChart;\n        \"ionic-button\": IonicButton;\n        \"ionic-emoji-picker\": IonicEmojiPicker;\n        \"ionic-newsletter-signup\": IonicNewsletterSignup;\n        \"ionic-react-demo\": IonicReactDemo;\n        \"ionic-search\": IonicSearch;\n        \"ionic-slider\": IonicSlider;\n        \"ionic-snap-bar\": IonicSnapBar;\n        \"ionic-sub-header\": IonicSubHeader;\n        \"ionic-switcher\": IonicSwitcher;\n        \"ionic-toggle\": IonicToggle;\n        \"ionic-toggle-button\": IonicToggleButton;\n        \"ionic-toggle-tab\": IonicToggleTab;\n        \"react-capacitor\": ReactCapacitor;\n        \"react-components\": ReactComponents;\n        \"twitter-script\": TwitterScript;\n        \"ui-floating-input\": UiFloatingInput;\n        \"ui-tip\": UiTip;\n        \"vue-components\": VueComponents;\n    }\n}\nexport { LocalJSX as JSX };\ndeclare module \"@stencil/core\" {\n    export namespace JSX {\n        interface IntrinsicElements {\n            \"additional-resources\": LocalJSX.AdditionalResources & JSXBase.HTMLAttributes<HTMLAdditionalResourcesElement>;\n            \"angular-components\": LocalJSX.AngularComponents & JSXBase.HTMLAttributes<HTMLAngularComponentsElement>;\n            \"auth-connect-promo\": LocalJSX.AuthConnectPromo & JSXBase.HTMLAttributes<HTMLAuthConnectPromoElement>;\n            \"bar-chart\": LocalJSX.BarChart & JSXBase.HTMLAttributes<HTMLBarChartElement>;\n            \"ebook-switcher\": LocalJSX.EbookSwitcher & JSXBase.HTMLAttributes<HTMLEbookSwitcherElement>;\n            \"home-components\": LocalJSX.HomeComponents & JSXBase.HTMLAttributes<HTMLHomeComponentsElement>;\n            \"home-countdown\": LocalJSX.HomeCountdown & JSXBase.HTMLAttributes<HTMLHomeCountdownElement>;\n            \"home-native\": LocalJSX.HomeNative & JSXBase.HTMLAttributes<HTMLHomeNativeElement>;\n            \"hubspot-dynamic-content\": LocalJSX.HubspotDynamicContent & JSXBase.HTMLAttributes<HTMLHubspotDynamicContentElement>;\n            \"hubspot-form\": LocalJSX.HubspotForm & JSXBase.HTMLAttributes<HTMLHubspotFormElement>;\n            \"icon-external\": LocalJSX.IconExternal & JSXBase.HTMLAttributes<HTMLIconExternalElement>;\n            \"ionic-app-wizard\": LocalJSX.IonicAppWizard & JSXBase.HTMLAttributes<HTMLIonicAppWizardElement>;\n            \"ionic-appflow-activator\": LocalJSX.IonicAppflowActivator & JSXBase.HTMLAttributes<HTMLIonicAppflowActivatorElement>;\n            \"ionic-bar-chart\": LocalJSX.IonicBarChart & JSXBase.HTMLAttributes<HTMLIonicBarChartElement>;\n            \"ionic-button\": LocalJSX.IonicButton & JSXBase.HTMLAttributes<HTMLIonicButtonElement>;\n            \"ionic-emoji-picker\": LocalJSX.IonicEmojiPicker & JSXBase.HTMLAttributes<HTMLIonicEmojiPickerElement>;\n            \"ionic-newsletter-signup\": LocalJSX.IonicNewsletterSignup & JSXBase.HTMLAttributes<HTMLIonicNewsletterSignupElement>;\n            \"ionic-react-demo\": LocalJSX.IonicReactDemo & JSXBase.HTMLAttributes<HTMLIonicReactDemoElement>;\n            \"ionic-search\": LocalJSX.IonicSearch & JSXBase.HTMLAttributes<HTMLIonicSearchElement>;\n            \"ionic-slider\": LocalJSX.IonicSlider & JSXBase.HTMLAttributes<HTMLIonicSliderElement>;\n            \"ionic-snap-bar\": LocalJSX.IonicSnapBar & JSXBase.HTMLAttributes<HTMLIonicSnapBarElement>;\n            \"ionic-sub-header\": LocalJSX.IonicSubHeader & JSXBase.HTMLAttributes<HTMLIonicSubHeaderElement>;\n            \"ionic-switcher\": LocalJSX.IonicSwitcher & JSXBase.HTMLAttributes<HTMLIonicSwitcherElement>;\n            \"ionic-toggle\": LocalJSX.IonicToggle & JSXBase.HTMLAttributes<HTMLIonicToggleElement>;\n            \"ionic-toggle-button\": LocalJSX.IonicToggleButton & JSXBase.HTMLAttributes<HTMLIonicToggleButtonElement>;\n            \"ionic-toggle-tab\": LocalJSX.IonicToggleTab & JSXBase.HTMLAttributes<HTMLIonicToggleTabElement>;\n            \"react-capacitor\": LocalJSX.ReactCapacitor & JSXBase.HTMLAttributes<HTMLReactCapacitorElement>;\n            \"react-components\": LocalJSX.ReactComponents & JSXBase.HTMLAttributes<HTMLReactComponentsElement>;\n            \"twitter-script\": LocalJSX.TwitterScript & JSXBase.HTMLAttributes<HTMLTwitterScriptElement>;\n            \"ui-floating-input\": LocalJSX.UiFloatingInput & JSXBase.HTMLAttributes<HTMLUiFloatingInputElement>;\n            \"ui-tip\": LocalJSX.UiTip & JSXBase.HTMLAttributes<HTMLUiTipElement>;\n            \"vue-components\": LocalJSX.VueComponents & JSXBase.HTMLAttributes<HTMLVueComponentsElement>;\n        }\n    }\n}\n"
  },
  {
    "path": "assets/stencil/declarations.ts",
    "content": "declare global {\n  interface Window {\n    API_URL: string;\n    DASHBOARD_URL: string;\n    _hsq: any[];\n    c: (cat, lbl, el?, val?, opts?) => void;\n    dataLayer: object[];\n    grecaptcha?: any;\n  }\n}\n\n/**\n * An (incomplete) representation of the user model for the API\n */\nexport interface UserInfo {\n  sub: string;\n  name: string;\n  preferred_username: string;\n  picture: string;\n  email: string;\n  email_verified: boolean;\n}\n"
  },
  {
    "path": "assets/stencil/forms.tsx",
    "content": "import { h } from '@stencil/core';\n\nexport const FormErrors = (_props, children) => (\n  <div class=\"form-errors\">{children}</div>\n);\n"
  },
  {
    "path": "assets/stencil/icons.tsx",
    "content": "import { h } from '@stencil/core';\n\nexport const Close = () => (\n\t<svg version=\"1.1\"\n\t\t\t xmlns=\"http://www.w3.org/2000/svg\"\n\t\t\t viewBox=\"0 0 512 512\"\n\t\t\t preserveAspectRatio=\"\"\n\t\t\t style={{'enable-background':'new 0 0 512 512'}}>\n    <path d=\"M256,307c-2.4,0-4.8-0.4-7-1.2L78.3,246.3c-11.1-3.9-17-16-13.1-27.1c3.9-11.1,16.1-16.9,27.2-13l157.9,55.1 c3.7,1.3,7.7,1.3,11.3,0l157.9-55.1c11.1-3.9,23.3,2,27.2,13c3.9,11.1-2,23.2-13.1,27.1L263,305.8C260.8,306.6,258.4,307,256,307z\"/>\n\t</svg>\n);\n\nexport const ChevronDown = () => (\n  <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\" height=\"20\" width=\"20\">\n    <path d=\"M256 294.1L383 167c9.4-9.4 24.6-9.4 33.9 0s9.3 24.6 0 34L273 345c-9.1 9.1-23.7 9.3-33.1.7L95 201.1c-4.7-4.7-7-10.9-7-17s2.3-12.3 7-17c9.4-9.4 24.6-9.4 33.9 0l127.1 127z\"/>\n  </svg>\n);\n\nexport const EmailIcon = () => (\n  <svg width=\"20\" height=\"14\" viewBox=\"0 0 20 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n    <path d=\"M19.8365 1.71514L14.6635 7.04323C14.625 7.08213 14.625 7.14046 14.6635 7.17935L18.2837 11.0782C18.5288 11.3261 18.5288 11.7248 18.2837 11.9727C18.1635 12.0942 18 12.1574 17.8413 12.1574C17.6827 12.1574 17.5192 12.0942 17.399 11.9727L13.7933 8.08844C13.7548 8.04954 13.6923 8.04954 13.6538 8.08844L12.774 8.99266C12.0385 9.74617 11.0625 10.1643 10.0144 10.1691C8.95192 10.174 7.94231 9.72187 7.19712 8.95863L6.35096 8.08844C6.3125 8.04954 6.25 8.04954 6.21154 8.08844L2.60577 11.9727C2.48558 12.0942 2.32212 12.1574 2.16346 12.1574C2.00481 12.1574 1.84135 12.0942 1.72115 11.9727C1.47596 11.7248 1.47596 11.3261 1.72115 11.0782L5.34135 7.17935C5.375 7.14046 5.375 7.08213 5.34135 7.04323L0.163462 1.71514C0.100962 1.65194 0 1.69569 0 1.7832V12.4443C0 13.2999 0.692308 13.9999 1.53846 13.9999H18.4615C19.3077 13.9999 20 13.2999 20 12.4443V1.7832C20 1.69569 19.8942 1.6568 19.8365 1.71514Z\" fill=\"#B2BECD\"/>\n    <path d=\"M10.0013 8.90121C10.7128 8.90121 11.3811 8.61925 11.8811 8.10394L19.4244 0.340297C19.1599 0.126396 18.833 0 18.4724 0H1.53493C1.17435 0 0.842623 0.126396 0.583008 0.340297L8.12628 8.10394C8.62147 8.61438 9.28974 8.90121 10.0013 8.90121Z\" fill=\"#B2BECD\"/>\n  </svg>\n);\n\nexport const EmailOutlineIcon = () => (\n  <svg width=\"20\" height=\"16\" viewBox=\"0 0 20 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n    <path d=\"M17.2692 1.00012H2.73077C1.77452 1.00012 1 1.78324 1 2.75011V13.25C1 14.2169 1.77452 15 2.73077 15H17.2692C18.2255 15 19 14.2169 19 13.25V2.75011C19 1.78324 18.2255 1.00012 17.2692 1.00012Z\" stroke=\"#CED6E0\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n    <path d=\"M3.76953 3.80005L10.0003 8.70002L16.2311 3.80005\" stroke=\"#CED6E0\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n  </svg>\n\n);\n\nexport const ForwardIcon = () => (\n  <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"6\" height=\"10\" viewBox=\"0 0 6 10\" fill=\"none\">\n    <path d=\"M4.19128 5.00186L0.220265 8.78303C-0.0734215 9.0629 -0.0734215 9.51544 0.220265 9.79233C0.513951 10.0692 0.988847 10.0692 1.28253 9.79233L5.78155 5.508C6.06587 5.23707 6.07212 4.80238 5.80342 4.52252L1.28566 0.208411C1.13881 0.0684779 0.945107 -6.94223e-09 0.754523 0C0.56394 6.94223e-09 0.370232 0.0684779 0.223389 0.208411C-0.0702975 0.488277 -0.0702974 0.940826 0.223389 1.21771L4.19128 5.00186Z\" fill=\"currentColor\"/>\n  </svg>\n);\n\nexport const LogoBlog = () => (\n  <svg id=\"ionic-blog-logo\" width=\"60\" height=\"24\" viewBox=\"0 0 90 32\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n    <rect width=\"43\" height=\"32\" fill=\"url(#pattern0)\"></rect>\n    <path d=\"M44.5283 7.54545V25H47.7925V23.4489H47.9885C48.4317 24.3523 49.463 25.2301 51.2016 25.2301C54.1249 25.2301 56.409 22.8352 56.409 18.4631C56.409 14.0398 54.0311 11.7386 51.1931 11.7386C49.4459 11.7386 48.4317 12.6335 47.9885 13.5284H47.8351V7.54545H44.5283ZM53.2641 18.4545C53.2641 20.9006 52.2669 22.5369 50.3237 22.5369C48.2953 22.5369 47.5283 20.7472 47.5283 18.4545C47.5283 16.1449 48.3124 14.4233 50.3237 14.4233C52.2755 14.4233 53.2641 16.017 53.2641 18.4545ZM61.8451 7.54545H58.5383V25H61.8451V7.54545ZM70.0788 25.2472C73.8374 25.2472 76.1726 22.4602 76.1726 18.4801C76.1726 14.4744 73.8374 11.7386 70.0788 11.7386C66.3288 11.7386 63.9851 14.4744 63.9851 18.4801C63.9851 22.4602 66.3288 25.2472 70.0788 25.2472ZM70.0788 22.5369C68.0163 22.5369 67.1555 20.7983 67.1555 18.4801C67.1555 16.1534 68.0163 14.4233 70.0788 14.4233C72.1499 14.4233 73.0021 16.1534 73.0021 18.4801C73.0021 20.7983 72.1499 22.5369 70.0788 22.5369ZM86.4475 11.9517V13.5284H86.2685C85.8253 12.6335 84.8026 11.7386 83.0555 11.7386C80.2089 11.7386 77.831 14.0398 77.831 18.3608C77.831 22.7074 80.243 24.7528 83.0469 24.7528C84.9305 24.7528 85.9106 23.8068 86.2856 23.1165H86.4731V24.4375C86.4901 26.4318 85.2373 27.2415 83.4816 27.2415C81.8282 27.2415 80.7969 26.483 80.0725 25.8608L78.4532 28.0256C79.1947 28.9631 81.0782 29.9773 83.5668 29.9773C87.1123 29.9773 89.7117 28.179 89.7117 24.642V11.9517H86.4475ZM80.9844 18.3523C80.9844 16.0426 81.9645 14.4233 83.9162 14.4233C85.885 14.4233 86.7202 16.1449 86.7202 18.3523C86.7202 20.6278 85.8509 22.1108 83.9162 22.1108C82.0668 22.1108 80.9844 20.7812 80.9844 18.3523Z\" fill=\"#5392FC\"></path>\n    <defs>\n      <pattern id=\"pattern0\" patternContentUnits=\"objectBoundingBox\" width=\"1\" height=\"1\">\n        <use xlinkHref=\"#image0\" transform=\"scale(0.0116279 0.015625)\"></use>\n      </pattern>\n      <image id=\"image0\" width=\"186\" height=\"64\" xlinkHref=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAALoAAABACAYAAACtB22OAAAQYUlEQVR4Ae1dCZhVxZX+T9V93YAi0oBLIo7L8M0Mi8s4UZPoqIkbrkB3K2ESjMGREekGnImZmK2NzvdFiAivgXHNYsxGb4r7pxPjGBUdNJKAoigaQNmkaUDpfn1v1ZmvXvd7ee/2vfdtdPfr1/d+X/ets1SdU+eeV7eWU3UJrmvjfh5vaX0dM00GcDyAchdLf4MxDWySxE85Qtw/bji92d8KhfKL3wKUUHE9c9nQNr0YRDcAEAl8kd81g+8r2y8WjB1L7UWua6heP1og7uhxJ9/LjwM4vx91yVs0Ab87MIImTyDqzLuQMGNJWyDecg/dq+8aqE5ung4DX4q/jUr6UYWVK8QCtHE3T5CS1wKQhRRUBHmVUnTyuFG0vgh0CVUoMgsIYenrSsDJjVlld12KzMShOsVgAUFMFxeDIgdDh1Kqy8GwR1jGXy1g+ugn/BUc8KlSqsuAfxjFVAHj6GXFpFCBupRSXQo0RZg91QIDZb48VecwHVogZwvQpjbNQbkee42x7i9dLLYO4uxd2iWnEk47Mbm+5SvsjQ/iupp/qX8JfoPrAPHr0Lhvb5tsuvY86kgQw3vpWiBji/7H9xnGwfvTyY35n/hj3IGzfRLmF2HqZqZMrZS/CIDhYDoHRA+NOFzf07SGj8620JBv4Fogo6MP3KoFa87md0OYqYh/ufJVPiqYO6QOdAsMOkc3Dr73ALD1Y8bmXYz2Tj7LJv3Nlev50IH+MEP9/S1gXuuD5jJOvn1Pl5Or7vHGjj0cqRiOGUdV4EEAZoU4vErQAoPK0YmALbsYqcNv4/C79uKofR368t509Mqo4znIaKq1Mo+wC3C8/pJbgMq9knXQdV1SnTzVorEYXw/mXnW6VHlhum8tMOgcPcC8Y29usD8XQA9JA9gCoaOnPDwBeU4KGCZLyAKho6c8TNY8PgUMkyVkgdDR0x9mGBSWbo+SgUJHT3mUDByTAobJErJA6OjpD3NkOhhCpWKBQTWPnumhacDEwvTrVb2SpbPdnmgJcRJrGsUMAeI2h3lDJ1mvPVlLsf5SsHo5HwrlnMaCxrGiw4igNbhNMb8zco/1+s/qDn6A3OX38LAhMedzqTKJeKcmtbbpxrI3QeS5PuG2UejoKRYRQL+FAVTfw8fqDucmvV3NEBBjdHzllk08TvyyiGBBtU+rd1ZJ4qUNcyMvp6jea8lz69gaNVJNI4HrtFLnAhSB0Y04Hh5q1DO67a9Qsap652mbcf8jNfKxbB3QU3FmurJeXRYBZnNMXahdMuNxSixRWa+2cFTdK6VY0nAjfWLK8lsgy9h1mTjWU5U+R355Ummu5UxZ2HFiVVTdomPqbRDNAzAmwLhDiXG11vRSddRpqV7Mnw3gLZh0VdQ+f1SF8yYIv2XGBQh+45Uz4woLWFVZr9dMiXaeno8CU/87NrFqmXrZlMPApRlkjiXwbVqpt65can8hSF7GePSgzMVI645H91Vt9YbgN93C6b2zJO/X0jDwMgGf91U4mLDTAVc9Uht5wY/NT25Q6IHpPultziIQLfArNwu8YqJbmmvkwix44yxTlzgzhcA9AIZkmyeFr50FX0yank/BJZMZW/QkZ5joFQsU4ORGnyMs0NPTltn/fLCUM06Obeq3BTq5UUcS8x2VUXtpNrpVRtUNQuDneTq5ETGUNDX4yQod3c8yAwdvHnDL5fXt5pzMgi+9Q63QhMqCC0oWQLXTlqpvJ0GPxNQlzmUAL/Mg5Yo6wi9D6Oh+luk//P8Q0Y2a+WwNfYokvpjAt4OwKUClighHflpoUFrVUmc6GNcHyImB8RAYV7PUpzP057XGNWA81r110TMrEd9evcz27J5NXcRHCIGfBZ33SYRXNGieAJ9rbKKZJwN8B4CtngI9kBlnXW5r7MeNoi6Fv1dVur9LBjZL8MyG2oi7j2li5J+uruPbnAq9QBin79oemGYdAs6ZulRVtQC+r++0DC5gyl18OJOKutBJkIHndYcz6+Gbh7yXRHYlVgN4cFq080wCPQjQOBfdgEJrcXddHZ9aV0dpDiWGqNvAGOWRx6BaoXF943yryUU3NnmqejHfypZzC4O+66L3AEvXc3pUtZgR/Laj5ekeTp5UuqGOOltq5R3QmJ5EuhIkKLCL4GJPA4XQ5hRlzxkfJjwhW+WFHk6eLKO5tmy1gPVFgN9OItMSfNK6kcrE/Cev+KwR49okIj3RZlvyC009nTzJ1XATtTfWRr4Xf6sksd6J0NG97dKX2A4trCtWzacd2Qg1D54Z9V68BD71yvrYJC9aII6ZiHi2F49508Q+kV81PzQveiquoZZ2wdJXAfBc1GJCmgzH0l/1mz4kxtdXzSGfH02qVKBlvvUgmH+cjk2HQkdPt0c/QFzfMpfeyUWwbcsfEvCpVx6prcu88EG4ymX2aQD+xofnB49/m/b40Hqgm+aU/4kZD/QgdCHONyudCZoAp7XwCbzpJjXOsx5JwNnchWXdysDHfryho/tZpo/wtmX5OYWvBo/+B32sKT4A7MEjBJ/ZA5kRIb/ow9La2iof8qH5ohXJ5T7ESMR2/snQ4tOYQDztwWsGpzldXSuj7Ktr6Og5mfOgM+/M9vXslixA/+vGGZiZ/9YLH4jT/PdedMF47vd15HjRgnCP1MY/t+M5I8IO/Z3Jq7bDnKfj+dkgreTvg8r3o0nQs360jLMupTzT4WeUvsPTtnxl2cxbPB8e0YhcyyTCaK/1Yga7Z1iyLpoZm4h6hj0LQYebQhj2KPL5glBkLz7KWlAKowO9VfiUGbboKYbq+6TOZ6k7rqbQ8ZiqnipzPOSqJz4IQz4fgRBQQdmCaEJ4D0iTeUTE95tTHUfHT1dLsmabIOl/YG7o6NlasVf46LMmOjCfooUkn00i2Q8cE3K1xu5EOvXOoM+kwrmkGeypHwH7usvxlGloZXZnXqu8Ugm/AbVPO59LjULeQixw6JjRTl4nDzDYc6UR5DeP7a8mE73rRSVGXjE0ZrUTTJ79frCOy2qZS7v9ZkmIrS956ZMJpxjn+fFkbE3ClVE/0x0cvFY0C0BOseVmA4RW6govDYjpJS98II71izCnO7kuBo6vqrfPbayJ5DQ4FEP0v4ATkfRphWpqt9YkMYRXwbgkCXcnmDELzMtyiWm/cBEfQkJ9xadDF7bobiP3OUyYaWKwc5GrHW3i1uODOnc+JvGUG5cJHjPEegXATi8+Zvph91SgF7kH7vIf82hi/lYPQlcwzEsN/0l7EzRWeDiRTr/zyZVRNTMdFwwdVuZ8EwzfrZBhHz3Yfn1BjQjb+k31jzir2ZJ4cBTxD7wUY2BNUw1t8KIF4e6dTTaYf+LDc7be4dzqQ0tDV9dxWXm5+hUDR6YRuoHuMNwkyeqQK/0WvoiwvHJF7KQkc0DChCkz0XcCWMIWPcg4fUfjCWqo/kOmln3qEqdaazIttufeVqkRuAweVJ9O27oTwH5PHqbvTFvqLL/iDh7uSQcwLcrHqAr1ePdOpB5sRPjoUy1/kUowrbsGe8arM3AIHPl85RInMGTY0IWmJ7wC3VJlZeyjpzKH6d6zABFPJFu+UVnvNGuFBiHln22FPbK8cww58gwwvmYiFP01oLX4jGj0pwdTzGprZVR9C+AVXpxEmBMZqqZVRe37bcaTkqzNWsGyhHMiE00B1DcAJJf33WWwxoIn5/Xc2C0PWAv1MPU1AF6bNg+HQGNl1HkBgh6CcFYLp2xbTGJEmVJnAPiG+Ziy1xqAW37o6G6L9C8swagWAtVghYjpWNpZfedYKVazmq6Sec97m2o31Yi7q+qVcZwqHzMcZUJiLcJ3AQUpzcJPz0GsOy8Dv2ieZ6104w1sWvWpS+0ZgsgMeP0qezY0nw0toaEQUV3f7fEqzw+X0dFLaWU0cSa6nzEGKp4E/u3huWWvFaw/EdNinglLVZiWsuDy4h8Vwe9EqzQfbfa9WuZF/lAVda5hxM+oL2TcaBr3XWaLoUvYgUIKdZVV/GCnXXw6MsUfbr6KaQItaJxr3Z9vAe58JsabWuVk0wq7abnCWuPXpqxsQnwba61fEmMagLZc5ST4iehmgLYn4JR766BydPNJl2K7mufKr4PjO2Ry7XZ8oJkvbayVSw52nYxjNtdaM4nxFQD5xOPsYuDalvnWjGycPKG/Cc3tJPsfzUaPBC7LewcTriMh7gY4HjSWmo+BDYPG0c07bWdbNsOWVBP1QZqIm+bJ/9LQpwmG2TIWHC1I/BaY/l04cnzLvEjOc+a51KhxnvUb4cgTAaoB0RuZ89KfzBtGSHlCc62Vc6itKf/RmqHvN9dYlxLxed17UYMagHbN+Ekn2eOba6wH2FEmFt8jIpLXZjzXZaCtjPqd67KjDXh/e2ZH761zXTI7SRdH9WKugFBnaWHCWbXZSylAolWAN2spVzfNoaBN0tmKyYvPTCFKqDMV0zgibRZnNEi0QfFGFvKV5lryDM3NS1h3JrOXlUidRZLGC61HsZEJsUsKvb69zHrh0dkUf0/X1bH4c4V+HeCT3fIk+IJB4ej7DgBvbWHEjzJzWyEd5oXTrUHzlkuvevFAk6N82JBI57EtN5Svy1aryqj6PsBeC1utolUenfGhjjwkW1G9z5dPH9u05Buyc3JTgay3jPV+bQenhKqofeEwqHXCli9OrbezmvmpiqrZANd5WYzAK8w4IeP04jGjgD2euxO9iu1dXOsnjBHDgudtzeGcMbvrW6KmT37Ac5uun570gR8lxPeuBUwrPpTVnQwkpyIF0zOVUWeFKJeLGmbTZrcGU5Z3nmIpcTuDzRmNXte+WKcVX3nN6OinHk945yNGLHiI5CXkoOM+3A0c754hdUl59Z3M/XBXliSoweaMkvDqYwtMXWJfIKAeAPVYHTU9jrk6pm6sjKp1AvyeFmiDxkgQJkHhhKCnzYSbzIqvqU5GRz92NOGiU4DXNzG2tvaxBVzinlvPOOsfglt0V5acQIb3huOcCgmZ87AAHecTApAoiwCepIFJyf1TQR5uchHuNTMxiQKMo5vzOsoSCPfdhCmffBzF/9y0YoQPKQc+zam70lULDbw7/Ej5TDHWqdR1aplv3Ve5TJVBszkpLOO4MaM9CPeKI+WcVD5TaL9NV6Uq0t9pAm6pOy/3He/9rXepyG+aK5dL8EUAthRQJ7NNb1ZTjTW74SpKm38XTNyriw4FKN13WRnPL7pa5h3513eKlraklbWRZ4WU44no+37b7HwssI/Bd+qYHNdUa3nG1dO7rTxRCDarXn6RYz5lFyf62bWMd7dl6sCl6E7YanfIM++6hj5MwYbJfraA2cShR6lLoHERiE4H2HwaM7Gr6hOA3gPzGsF4BlquMjE6QSrHR3ab2tRygNL6NEGZipn2fxsZr72XtaNvAuRlC6fTW8Vcp1C3wi0Q7/i3jxDmEx6+pxwVLqZvStBmD9dIghmQZnE9p7Q8I3TyLCxVAixxR59A1Nk+gi4FszkzL+386oFUR0HAsaOBSccRDvU/GugDs8t82AZ5/p0zuuZYB1IdQ13zs0CPSemNu3mCsPS/EtPFAEy/yHN/Yn7i+iaXiWnZ1w794W4WWz7G/j378Ze2dv20AlZtJutF94i8b7QKpfSnBf4fDDmp8wXLZvsAAAAASUVORK5CYII=\"></image>\n    </defs>\n  </svg>\n);"
  },
  {
    "path": "assets/stencil/index.d.ts",
    "content": "// declare module \"*.svg\" {\n//   const content: any;\n//   export default content;\n// }"
  },
  {
    "path": "assets/stencil/index.html",
    "content": "<!DOCTYPE html>\n<html dir=\"ltr\" lang=\"en\">\n<head>\n  <meta charset=\"utf-8\">\n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=5.0\">\n  <title>Stencil Component Starter</title>\n  <link href=\"https://cdnjs.cloudflare.com/ajax/libs/normalize/7.0.0/normalize.min.css\" rel=\"stylesheet\"/>\n  <style>\n    *,\n    *::before,\n    *::after {\n      box-sizing: border-box;\n    }\n\n    body {\n      font-family: \"Avenir Next\",\"Helvetica Neue\",Helvetica,sans-serif;\n      background: #b8ceff;\n      padding: 0;\n    }\n\n    ionic-newsletter-signup {\n      margin: 64px auto;\n      display: block;\n    }\n\n    .content {\n      padding: 24px;\n    }\n  </style>\n  <script src=\"/build/ionic-site-components.js\"></script>\n\n</head>\n<body>\n  <!--<ionic-snap-bar>\n    <strong>Ionic Pro.</strong>\n    <span>The powerful mobile development toolkit.</span>\n    <a href=\"\">Explore ionic pro</a>\n  </ionic-snap-bar>-->\n\n  <div class=\"content\">\n    <ionic-search>\n      <ul>\n        <li><a href=\"\">Default</a></li>\n        <li><a href=\"\">Content</a></li>\n      </ul>\n    </ionic-search>\n    <ionic-button>Blue button</ionic-button>\n    <ionic-button color=\"white\">White button</ionic-button>\n    <br/>\n    <ionic-newsletter-signup/>\n    <br/>\n    <ionic-newsletter-signup\n      dark-mode=\"true\"\n      placeholder=\"Get the latest ionic framework news and updates\"\n      button-text=\"Email me!\"/>\n  </div>\n\n\n</body>\n</html>\n"
  },
  {
    "path": "assets/stencil/index.ts",
    "content": "export * from './components';\n"
  },
  {
    "path": "assets/stencil/prism-ionic.scss",
    "content": "/**\n * Ionic Dark theme for JavaScript, CSS and HTML\n * Based on prism.js Dark theme\n * @author Perry Govier\n */\n\n code[class*=\"language-\"],\n pre[class*=\"language-\"] {\n   color: #4d4d4c;\n   background: none;\n   white-space: pre;\n   word-spacing: normal;\n   word-break: normal;\n   word-wrap: normal;\n   line-height: 1.5;\n \n   -moz-tab-size: 4;\n   -o-tab-size: 4;\n   tab-size: 4;\n \n   -webkit-hyphens: none;\n   -moz-hyphens: none;\n   -ms-hyphens: none;\n   hyphens: none;\n }\n \n pre[class*=\"language-\"],\n :not(pre) > code[class*=\"language-\"] {\n   background: hsl(30, 20%, 25%);\n }\n \n  /* Code blocks */\n pre[class*=\"language-\"] {\n   padding: 1em;\n   margin: .5em 0;\n   overflow: auto;\n   border: .3em solid hsl(30, 20%, 40%);\n   border-radius: .5em;\n   box-shadow: 1px 1px .5em black inset;\n }\n \n  /* Inline code */\n :not(pre) > code[class*=\"language-\"] {\n   padding: .15em .2em .05em;\n   border-radius: .3em;\n   border: .13em solid hsl(30, 20%, 40%);\n   box-shadow: 1px 1px .3em -.1em black inset;\n   white-space: normal;\n }\n \n /* Tomorrow Comment */\n .token.comment,\n .token.prolog,\n .token.doctype,\n .token.cdata {\n   color: #8c9296;\n }\n \n .token.punctuation {\n   opacity: .7;\n }\n \n .namespace {\n   opacity: .7;\n }\n \n .token.tag {\n   color: #97bdff;\n }\n \n .token.tag .token.tag {\n   color: #639cff;\n }\n \n .token.property,\n .token.attr-name,\n .token.boolean,\n .token.number,\n .token.constant,\n .token.symbol {\n   color: #8582fb;\n }\n \n .token.selector,\n .token.char,\n .token.function,\n .token.builtin,\n .token.inserted {\n   color: #EADA8A;\n }\n \n .token.operator,\n .token.string,\n .token.entity,\n .token.url,\n .token.attr-value,\n .language-css .token.string,\n .style .token.string,\n .token.variable {\n   color: #92e1a7;\n }\n \n .token.atrule {\n   color: #ffbb01;\n }\n \n .token.regex,\n .token.keyword,\n .token.important {\n   color: #639BFF;\n }\n \n .token.important,\n .token.bold {\n   font-weight: bold;\n }\n .token.italic {\n   font-style: italic;\n }\n \n .token.entity {\n   cursor: help;\n }\n \n .token.deleted {\n   color: red;\n }\n "
  },
  {
    "path": "assets/stencil/util/analytics.ts",
    "content": "declare var window: any;\n\nexport const trackClick = (eventCategory, eventLabel, eventEl?, eventValue?) => {\n  window.c(eventCategory, eventLabel, eventEl, eventValue);\n};\n\nexport const getUtmParams = () => {\n  const search = location.search;\n  if (!search) {\n    return {};\n  }\n\n  return search\n    .substring(1)\n    .split('&')\n    .map(arg => arg.split('='))\n    .filter(arg => arg[0].indexOf('utm_') === 0)\n    .reduce((args, arg) => { args[arg[0]] = arg[1]; return args }, {});\n}"
  },
  {
    "path": "assets/stencil/util/app-icon.ts",
    "content": "export const generateAppIconForThemeAndEmoji = async (theme, emojiImage, imageSize, iconSize) => {\n  const canvas = document.createElement('canvas');\n  canvas.style.visibility = 'hidden';\n\n  // We fetch the image text because we need to modify it to fix a FF bug\n  const svgDataReq = await fetch(emojiImage);\n  const svgData = await svgDataReq.text();\n\n  const el = document.createElement('div');\n  el.innerHTML = svgData;\n\n  const svgEl = el.firstElementChild;\n\n  // Necessary to avoid a firefox bug where it refuses to render svg's\n  // that don't have width and height attributes\n  svgEl.setAttribute('width', `${iconSize}`);\n  svgEl.setAttribute('height', `${iconSize}`);\n\n  const b64 = btoa(el.innerHTML);\n\n  canvas.width = imageSize\n  canvas.height = imageSize;\n  canvas.style.width = `${imageSize}px`;\n  canvas.style.height = `${imageSize}px`;\n\n  const ctx = canvas.getContext('2d');\n\n  ctx.fillStyle = theme;\n  ctx.fillRect(0, 0, imageSize, imageSize);\n\n  const midx = imageSize / 2;\n  const midy = imageSize / 2;\n\n  const imageX = midx - iconSize / 2;\n  const imageY = midy - iconSize / 2;\n\n  const img = new Image();\n  img.src = `data:image/svg+xml;base64,${b64}`;\n\n  return new Promise((resolve, reject) => {\n    img.onload = () => {\n      ctx.drawImage(img, imageX, imageY, iconSize, iconSize);\n\n      resolve(canvas.toDataURL('image/png'));\n    };\n\n    img.onerror = (e) => {\n      reject(e);\n    };\n  });\n};\n\nexport const generateAppIconForThemeAndImage = async (theme, image, fullImageSize, maxImageWidth) => {\n  const canvas = document.createElement('canvas');\n  canvas.style.visibility = 'hidden';\n  canvas.width = fullImageSize;\n  canvas.height = fullImageSize;\n  canvas.style.width = `${fullImageSize}px`;\n  canvas.style.height = `${fullImageSize}px`;\n  const ctx = canvas.getContext('2d');\n\n  ctx.fillStyle = theme;\n  ctx.fillRect(0, 0, fullImageSize, fullImageSize);\n\n  const midx = fullImageSize / 2;\n  const midy = fullImageSize / 2;\n\n  const img = new Image();\n  img.src = image;\n\n  return new Promise((resolve, reject) => {\n    img.onload = () => {\n      const aspectRatio = img.width / img.height;\n      const imageW = Math.max(Math.min(img.width, maxImageWidth), maxImageWidth);\n      const imageH = imageW * 1 / aspectRatio;\n      const imageX = midx - imageW / 2;\n      const imageY = midy - imageH / 2;\n\n\n      ctx.drawImage(img, imageX, imageY, imageW, imageH);\n\n      resolve(canvas.toDataURL('image/png'));\n    };\n\n    img.onerror = (e) => {\n      reject(e);\n    };\n  });\n};"
  },
  {
    "path": "assets/stencil/util/auth.ts",
    "content": "import { identify, trackEvent } from './hubspot';\nimport { recaptcha } from './recaptcha';\nimport { UserInfo } from '../declarations';\n\nexport interface SignupForm {\n  name?: string;\n  email?: string;\n  username?: string;\n  password?: string;\n}\n\nexport interface LoginForm {\n  email?: string;\n  password?: string;\n}\n\nconst makeApiError = (message, exc?, reason?) => ({\n  message,\n  error: exc,\n  reason\n});\n\nexport const login = async (email, password, source, loginEventId =\"000006636951\") => {\n  try {\n    const params = new URLSearchParams(window.location.search);\n    if (params.has(\"source\")) {\n      source = params.get(\"source\");\n    } else if (params.has(\"client_id\")) {\n      source = params.get(\"client_id\");\n    }\n\n    const recaptchaCode = await recaptcha('login');\n    const ret = await fetch('/oauth/login', {\n      method: 'POST',\n      body: JSON.stringify({\n        email,\n        password,\n        source,\n        recaptcha: recaptchaCode\n      }),\n      headers: {\n        'Content-Type': 'application/json'\n      },\n    });\n\n    if (ret.status !== 200) {\n      const responseJson = await ret.json();\n      throw responseJson?.error?.message || 'Unable to log in';\n    }\n\n    await ret.json();\n\n    window.dataLayer.push({ event: 'login' });\n    identify(email);\n    trackEvent({ id: loginEventId });\n\n    return location.search;\n    //return oauthAuthorize();\n  } catch (e) {\n    const reason = typeof e === 'string' ? e : '';\n    throw makeApiError(reason || 'Unable to log in', e, reason);\n  }\n}\n\nexport const oauthAuthorize = () => {\n  const params = new URLSearchParams(window.location.search);\n  if (params.has(\"client_id\")) {\n    window.location.assign(`/oauth/authorize${window.location.search}`);\n  } else {\n    window.location.assign(`${window.DASHBOARD_URL}/login${window.location.search}`);\n  }\n}\n\nexport const signup = async (form: SignupForm, source: string, signupEventId=\"000006040735\") => {\n  try {\n    var params = new URLSearchParams(window.location.search);\n    if (params.has(\"source\")) {\n      source = params.get(\"source\");\n    } else if (params.has(\"client_id\")) {\n      source = params.get(\"client_id\");\n    }\n\n    const recaptchaCode = await recaptcha('signup');\n\n    const ret = await fetch('/oauth/signup', {\n      method: 'POST',\n      body: JSON.stringify({\n        ...form,\n        source,\n        recaptcha: recaptchaCode\n      }),\n      headers: {\n        'Accept': 'application/json',\n        'Content-Type': 'application/json'\n      },\n    });\n\n    const data = await ret.json();\n\n    if (data.error) {\n      return data;\n    }\n\n    window.dataLayer.push({ event: 'sign_up' });\n    identify(form.email);\n    trackEvent({ id: signupEventId });\n\n    return data;\n  } catch (e) {\n    throw makeApiError('Unable to create account', e);\n  }\n}\n\nexport const getUser = async (): Promise<UserInfo> => {\n  try {\n    const ret = await fetch('/oauth/userinfo');\n    if (!ret.ok) {\n      return null;\n    }\n    return await ret.json() as UserInfo;\n  } catch (e) {\n    return null;\n  }\n}\n"
  },
  {
    "path": "assets/stencil/util/common.ts",
    "content": "export const importResource = (\n  {\n    propertyName,\n    link,\n    target = document.body,\n    defer = true,\n    async = true,\n  }: {\n    propertyName?: string;\n    link: string;\n    target?: HTMLElement;\n    async?: boolean;\n    defer?: boolean;\n  },\n  callback: () => any,\n) => {\n  if (hasGlobalProperty(propertyName)) return callback();\n\n  const scriptAlreadyLoading = Array.from(document.scripts).some(script => {\n    if (script.src === link) {\n      script.addEventListener('load', callback);\n      return true;\n    }\n  });\n\n  if (scriptAlreadyLoading) return;\n\n  const script = document.createElement('script');\n  script.src = link;\n  script.type = 'text/javascript';\n  script.addEventListener('load', callback);\n  script.defer = defer;\n  script.async = async;\n  script.onerror = () => console.warn(`error loading resource: ${link}`);\n\n  target.appendChild(script);\n};\n\nexport const pixelize = (num: number) => {\n  return num.toString().concat('px');\n};\n\nconst hasGlobalProperty = (property: string) => {\n  if (property && property.includes('.')) {\n    const propertyList = property.split('.');\n    return !!propertyList.reduce((prev, cur) => {\n      return prev.hasOwnProperty(cur) ? prev[cur] : null;\n    }, window);\n  }\n\n  return window.hasOwnProperty(property);\n};\n\nexport function slugify(text: string) {\n  if (!text) {\n    return '';\n  }\n  return text\n    .toString()\n    .toLowerCase()\n    .replace(/\\s+/g, '-') // Replace spaces with -\n    .replace(/[^\\w\\-]+/g, '') // Remove all non-word chars\n    .replace(/\\-\\-+/g, '-') // Replace multiple - with single -\n    .replace(/^-+/, '') // Trim - from start of text\n    .replace(/-+$/, ''); // Trim - from end of text\n}\n"
  },
  {
    "path": "assets/stencil/util/hubspot.ts",
    "content": "declare var window: any;\n\ninterface HubspotTrackEventArgs {\n  id: string;\n}\n\nexport const trackEvent = (trackEventData: HubspotTrackEventArgs) => {\n  var _hsq = (window._hsq = window._hsq || []);\n  _hsq.push([\"trackEvent\", trackEventData]);\n}\n\nexport const identify = (email, id = null) => {\n  var _hsq = (window._hsq = window._hsq || []);\n  _hsq.push([\"identify\", { email, id }]);\n}"
  },
  {
    "path": "assets/stencil/util/recaptcha.ts",
    "content": "export const recaptcha = async (action = 'signup') => {\n  if (typeof window.grecaptcha === 'undefined' || typeof window.grecaptcha.execute === 'undefined') {\n    return;\n  }\n\n  return window.grecaptcha.execute('6LfbcKAUAAAAACUDq_t59TP8MawQXB37DVEeSOjZ', { action });\n};\n"
  },
  {
    "path": "content/404.html",
    "content": "---\nlayout: fluid/docs_base\nid: 404\ntitle: 404 - Page Not Found\npermalink: /404.html\n---\n<div class=\"four-oh-four\">\n  <img src=\"/img/framework-four-oh-four.png\" />\n  <h2>Ooops. The page you're looking for got lost in space.</h2>\n  <p>The address might be mistyped or the page may have moved.</p>\n  <a href=\"/\">Take me back home</a>\n</div>\n"
  },
  {
    "path": "content/CNAME",
    "content": "ionicframework.com\n"
  },
  {
    "path": "content/assets/fonts/inter/inter.css",
    "content": "@font-face {\n  font-family: 'Inter';\n  font-style:  normal;\n  font-weight: 100;\n  src: url(\"Inter-Thin.woff2\") format(\"woff2\"),\n       url(\"Inter-Thin.woff\") format(\"woff\");\n}\n@font-face {\n  font-family: 'Inter';\n  font-style:  italic;\n  font-weight: 100;\n  src: url(\"Inter-ThinItalic.woff2\") format(\"woff2\"),\n       url(\"Inter-ThinItalic.woff\") format(\"woff\");\n}\n\n@font-face {\n  font-family: 'Inter';\n  font-style:  normal;\n  font-weight: 200;\n  src: url(\"Inter-ExtraLight.woff2\") format(\"woff2\"),\n       url(\"Inter-ExtraLight.woff\") format(\"woff\");\n}\n@font-face {\n  font-family: 'Inter';\n  font-style:  italic;\n  font-weight: 200;\n  src: url(\"Inter-ExtraLightItalic.woff2\") format(\"woff2\"),\n       url(\"Inter-ExtraLightItalic.woff\") format(\"woff\");\n}\n\n@font-face {\n  font-family: 'Inter';\n  font-style:  normal;\n  font-weight: 300;\n  src: url(\"Inter-Light.woff2\") format(\"woff2\"),\n       url(\"Inter-Light.woff\") format(\"woff\");\n}\n@font-face {\n  font-family: 'Inter';\n  font-style:  italic;\n  font-weight: 300;\n  src: url(\"Inter-LightItalic.woff2\") format(\"woff2\"),\n       url(\"Inter-LightItalic.woff\") format(\"woff\");\n}\n\n@font-face {\n  font-family: 'Inter';\n  font-style:  normal;\n  font-weight: 400;\n  src: url(\"Inter-Regular.woff2\") format(\"woff2\"),\n       url(\"Inter-Regular.woff\") format(\"woff\");\n}\n@font-face {\n  font-family: 'Inter';\n  font-style:  italic;\n  font-weight: 400;\n  src: url(\"Inter-Italic.woff2\") format(\"woff2\"),\n       url(\"Inter-Italic.woff\") format(\"woff\");\n}\n\n@font-face {\n  font-family: 'Inter';\n  font-style:  normal;\n  font-weight: 500;\n  src: url(\"Inter-Medium.woff2\") format(\"woff2\"),\n       url(\"Inter-Medium.woff\") format(\"woff\");\n}\n@font-face {\n  font-family: 'Inter';\n  font-style:  italic;\n  font-weight: 500;\n  src: url(\"Inter-MediumItalic.woff2\") format(\"woff2\"),\n       url(\"Inter-MediumItalic.woff\") format(\"woff\");\n}\n\n@font-face {\n  font-family: 'Inter';\n  font-style:  normal;\n  font-weight: 600;\n  src: url(\"Inter-SemiBold.woff2\") format(\"woff2\"),\n       url(\"Inter-SemiBold.woff\") format(\"woff\");\n}\n@font-face {\n  font-family: 'Inter';\n  font-style:  italic;\n  font-weight: 600;\n  src: url(\"Inter-SemiBoldItalic.woff2\") format(\"woff2\"),\n       url(\"Inter-SemiBoldItalic.woff\") format(\"woff\");\n}\n\n@font-face {\n  font-family: 'Inter';\n  font-style:  normal;\n  font-weight: 700;\n  src: url(\"Inter-Bold.woff2\") format(\"woff2\"),\n       url(\"Inter-Bold.woff\") format(\"woff\");\n}\n@font-face {\n  font-family: 'Inter';\n  font-style:  italic;\n  font-weight: 700;\n  src: url(\"Inter-BoldItalic.woff2\") format(\"woff2\"),\n       url(\"Inter-BoldItalic.woff\") format(\"woff\");\n}\n\n@font-face {\n  font-family: 'Inter';\n  font-style:  normal;\n  font-weight: 800;\n  src: url(\"Inter-ExtraBold.woff2\") format(\"woff2\"),\n       url(\"Inter-ExtraBold.woff\") format(\"woff\");\n}\n@font-face {\n  font-family: 'Inter';\n  font-style:  italic;\n  font-weight: 800;\n  src: url(\"Inter-ExtraBoldItalic.woff2\") format(\"woff2\"),\n       url(\"Inter-ExtraBoldItalic.woff\") format(\"woff\");\n}\n\n@font-face {\n  font-family: 'Inter';\n  font-style:  normal;\n  font-weight: 900;\n  src: url(\"Inter-Black.woff2\") format(\"woff2\"),\n       url(\"Inter-Black.woff\") format(\"woff\");\n}\n@font-face {\n  font-family: 'Inter';\n  font-style:  italic;\n  font-weight: 900;\n  src: url(\"Inter-BlackItalic.woff2\") format(\"woff2\"),\n       url(\"Inter-BlackItalic.woff\") format(\"woff\");\n}\n\n/* -------------------------------------------------------\nVariable font.\nUsage:\n\n  html { font-family: 'Inter', sans-serif; }\n  @supports (font-variation-settings: normal) {\n    html { font-family: 'Inter var', sans-serif; }\n  }\n*/\n@font-face {\n  font-family: 'Inter var';\n  font-weight: 100 900;\n  font-style: normal;\n  font-named-instance: 'Regular';\n  src: url(\"Inter-upright.var.woff2\") format(\"woff2 supports variations(gvar)\"),\n       url(\"Inter-upright.var.woff2\") format(\"woff2-variations\"),\n       url(\"Inter-upright.var.woff2\") format(\"woff2\");\n}\n@font-face {\n  font-family: 'Inter var';\n  font-weight: 100 900;\n  font-style: italic;\n  font-named-instance: 'Italic';\n  src: url(\"Inter-italic.var.woff2\") format(\"woff2 supports variations(gvar)\"),\n       url(\"Inter-italic.var.woff2\") format(\"woff2-variations\"),\n       url(\"Inter-italic.var.woff2\") format(\"woff2\");\n}\n\n\n/* --------------------------------------------------------------------------\n[EXPERIMENTAL] Multi-axis, single variable font.\n\nSlant axis is not yet widely supported (as of February 2019) and thus this\nmulti-axis single variable font is opt-in rather than the default.\n\nWhen using this, you will probably need to set font-variation-settings\nexplicitly, e.g.\n\n  * { font-variation-settings: \"slnt\" 0deg }\n  .italic { font-variation-settings: \"slnt\" 10deg }\n\n*/\n@font-face {\n  font-family: 'Inter var experimental';\n  font-weight: 100 900;\n  font-style: oblique 0deg 10deg;\n  src: url(\"Inter.var.woff2\") format(\"woff2-variations\"),\n       url(\"Inter.var.woff2\") format(\"woff2\");\n}\n"
  },
  {
    "path": "content/browserconfig.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<browserconfig>\n  <msapplication>\n    <tile>\n      <square70x70logo src=\"/img/meta/mstile-70x70.png\"/>\n      <square150x150logo src=\"/img/meta/mstile-150x150.png\"/>\n      <square310x310logo src=\"/img/meta/mstile-310x310.png\"/>\n      <wide310x150logo src=\"/img/meta/mstile-310x150.png\"/>\n      <TileColor>#4c8fff</TileColor>\n    </tile>\n  </msapplication>\n</browserconfig>\n"
  },
  {
    "path": "content/circle.yml",
    "content": "general:\n  branches:\n    ignore:\n      - production\nmachine:\n  node:\n    version: 6.9.1\n  ruby:\n    version: 2.2.3\ndependencies:\n  pre:\n    - gem install jekyll -v 3.0.1 && gem install kramdown && gem install rouge\n    - ./scripts/prepare.sh\n  cache_directories:\n    - \"~/.rvm\"\ntest:\n  override:\n    - ./scripts/test.sh\ndeployment:\n staging:\n   branch: master\n   commands:\n     - ./scripts/deploy_staging.sh\n"
  },
  {
    "path": "content/css/animate.css",
    "content": "@charset \"UTF-8\";\n\n\n/*!\nAnimate.css - http://daneden.me/animate\nLicensed under the MIT license\n\nCopyright (c) 2013 Daniel Eden\n\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:\n\nThe above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\n\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*/\n\n.animated {\n  -webkit-animation-duration: 1s;\n  animation-duration: 1s;\n  -webkit-animation-fill-mode: both;\n  animation-fill-mode: both;\n}\n\n.animated.hinge {\n  -webkit-animation-duration: 2s;\n  animation-duration: 2s;\n}\n\n@-webkit-keyframes bounce {\n  0%, 20%, 50%, 80%, 100% {\n    -webkit-transform: translateY(0);\n    transform: translateY(0);\n  }\n\n  40% {\n    -webkit-transform: translateY(-30px);\n    transform: translateY(-30px);\n  }\n\n  60% {\n    -webkit-transform: translateY(-15px);\n    transform: translateY(-15px);\n  }\n}\n\n@keyframes bounce {\n  0%, 20%, 50%, 80%, 100% {\n    -webkit-transform: translateY(0);\n    -ms-transform: translateY(0);\n    transform: translateY(0);\n  }\n\n  40% {\n    -webkit-transform: translateY(-30px);\n    -ms-transform: translateY(-30px);\n    transform: translateY(-30px);\n  }\n\n  60% {\n    -webkit-transform: translateY(-15px);\n    -ms-transform: translateY(-15px);\n    transform: translateY(-15px);\n  }\n}\n\n.bounce {\n  -webkit-animation-name: bounce;\n  animation-name: bounce;\n}\n\n@-webkit-keyframes flash {\n  0%, 50%, 100% {\n    opacity: 1;\n  }\n\n  25%, 75% {\n    opacity: 0;\n  }\n}\n\n@keyframes flash {\n  0%, 50%, 100% {\n    opacity: 1;\n  }\n\n  25%, 75% {\n    opacity: 0;\n  }\n}\n\n.flash {\n  -webkit-animation-name: flash;\n  animation-name: flash;\n}\n\n/* originally authored by Nick Pettit - https://github.com/nickpettit/glide */\n\n@-webkit-keyframes pulse {\n  0% {\n    -webkit-transform: scale(1);\n    transform: scale(1);\n  }\n\n  50% {\n    -webkit-transform: scale(1.1);\n    transform: scale(1.1);\n  }\n\n  100% {\n    -webkit-transform: scale(1);\n    transform: scale(1);\n  }\n}\n\n@keyframes pulse {\n  0% {\n    -webkit-transform: scale(1);\n    -ms-transform: scale(1);\n    transform: scale(1);\n  }\n\n  50% {\n    -webkit-transform: scale(1.1);\n    -ms-transform: scale(1.1);\n    transform: scale(1.1);\n  }\n\n  100% {\n    -webkit-transform: scale(1);\n    -ms-transform: scale(1);\n    transform: scale(1);\n  }\n}\n\n.pulse {\n  -webkit-animation-name: pulse;\n  animation-name: pulse;\n}\n\n@-webkit-keyframes shake {\n  0%, 100% {\n    -webkit-transform: translateX(0);\n    transform: translateX(0);\n  }\n\n  10%, 30%, 50%, 70%, 90% {\n    -webkit-transform: translateX(-10px);\n    transform: translateX(-10px);\n  }\n\n  20%, 40%, 60%, 80% {\n    -webkit-transform: translateX(10px);\n    transform: translateX(10px);\n  }\n}\n\n@keyframes shake {\n  0%, 100% {\n    -webkit-transform: translateX(0);\n    -ms-transform: translateX(0);\n    transform: translateX(0);\n  }\n\n  10%, 30%, 50%, 70%, 90% {\n    -webkit-transform: translateX(-10px);\n    -ms-transform: translateX(-10px);\n    transform: translateX(-10px);\n  }\n\n  20%, 40%, 60%, 80% {\n    -webkit-transform: translateX(10px);\n    -ms-transform: translateX(10px);\n    transform: translateX(10px);\n  }\n}\n\n.shake {\n  -webkit-animation-name: shake;\n  animation-name: shake;\n}\n\n@-webkit-keyframes swing {\n  20% {\n    -webkit-transform: rotate(15deg);\n    transform: rotate(15deg);\n  }\n\n  40% {\n    -webkit-transform: rotate(-10deg);\n    transform: rotate(-10deg);\n  }\n\n  60% {\n    -webkit-transform: rotate(5deg);\n    transform: rotate(5deg);\n  }\n\n  80% {\n    -webkit-transform: rotate(-5deg);\n    transform: rotate(-5deg);\n  }\n\n  100% {\n    -webkit-transform: rotate(0deg);\n    transform: rotate(0deg);\n  }\n}\n\n@keyframes swing {\n  20% {\n    -webkit-transform: rotate(15deg);\n    -ms-transform: rotate(15deg);\n    transform: rotate(15deg);\n  }\n\n  40% {\n    -webkit-transform: rotate(-10deg);\n    -ms-transform: rotate(-10deg);\n    transform: rotate(-10deg);\n  }\n\n  60% {\n    -webkit-transform: rotate(5deg);\n    -ms-transform: rotate(5deg);\n    transform: rotate(5deg);\n  }\n\n  80% {\n    -webkit-transform: rotate(-5deg);\n    -ms-transform: rotate(-5deg);\n    transform: rotate(-5deg);\n  }\n\n  100% {\n    -webkit-transform: rotate(0deg);\n    -ms-transform: rotate(0deg);\n    transform: rotate(0deg);\n  }\n}\n\n.swing {\n  -webkit-transform-origin: top center;\n  -ms-transform-origin: top center;\n  transform-origin: top center;\n  -webkit-animation-name: swing;\n  animation-name: swing;\n}\n\n@-webkit-keyframes tada {\n  0% {\n    -webkit-transform: scale(1);\n    transform: scale(1);\n  }\n\n  10%, 20% {\n    -webkit-transform: scale(0.9) rotate(-3deg);\n    transform: scale(0.9) rotate(-3deg);\n  }\n\n  30%, 50%, 70%, 90% {\n    -webkit-transform: scale(1.1) rotate(3deg);\n    transform: scale(1.1) rotate(3deg);\n  }\n\n  40%, 60%, 80% {\n    -webkit-transform: scale(1.1) rotate(-3deg);\n    transform: scale(1.1) rotate(-3deg);\n  }\n\n  100% {\n    -webkit-transform: scale(1) rotate(0);\n    transform: scale(1) rotate(0);\n  }\n}\n\n@keyframes tada {\n  0% {\n    -webkit-transform: scale(1);\n    -ms-transform: scale(1);\n    transform: scale(1);\n  }\n\n  10%, 20% {\n    -webkit-transform: scale(0.9) rotate(-3deg);\n    -ms-transform: scale(0.9) rotate(-3deg);\n    transform: scale(0.9) rotate(-3deg);\n  }\n\n  30%, 50%, 70%, 90% {\n    -webkit-transform: scale(1.1) rotate(3deg);\n    -ms-transform: scale(1.1) rotate(3deg);\n    transform: scale(1.1) rotate(3deg);\n  }\n\n  40%, 60%, 80% {\n    -webkit-transform: scale(1.1) rotate(-3deg);\n    -ms-transform: scale(1.1) rotate(-3deg);\n    transform: scale(1.1) rotate(-3deg);\n  }\n\n  100% {\n    -webkit-transform: scale(1) rotate(0);\n    -ms-transform: scale(1) rotate(0);\n    transform: scale(1) rotate(0);\n  }\n}\n\n.tada {\n  -webkit-animation-name: tada;\n  animation-name: tada;\n}\n\n/* originally authored by Nick Pettit - https://github.com/nickpettit/glide */\n\n@-webkit-keyframes wobble {\n  0% {\n    -webkit-transform: translateX(0%);\n    transform: translateX(0%);\n  }\n\n  15% {\n    -webkit-transform: translateX(-25%) rotate(-5deg);\n    transform: translateX(-25%) rotate(-5deg);\n  }\n\n  30% {\n    -webkit-transform: translateX(20%) rotate(3deg);\n    transform: translateX(20%) rotate(3deg);\n  }\n\n  45% {\n    -webkit-transform: translateX(-15%) rotate(-3deg);\n    transform: translateX(-15%) rotate(-3deg);\n  }\n\n  60% {\n    -webkit-transform: translateX(10%) rotate(2deg);\n    transform: translateX(10%) rotate(2deg);\n  }\n\n  75% {\n    -webkit-transform: translateX(-5%) rotate(-1deg);\n    transform: translateX(-5%) rotate(-1deg);\n  }\n\n  100% {\n    -webkit-transform: translateX(0%);\n    transform: translateX(0%);\n  }\n}\n\n@keyframes wobble {\n  0% {\n    -webkit-transform: translateX(0%);\n    -ms-transform: translateX(0%);\n    transform: translateX(0%);\n  }\n\n  15% {\n    -webkit-transform: translateX(-25%) rotate(-5deg);\n    -ms-transform: translateX(-25%) rotate(-5deg);\n    transform: translateX(-25%) rotate(-5deg);\n  }\n\n  30% {\n    -webkit-transform: translateX(20%) rotate(3deg);\n    -ms-transform: translateX(20%) rotate(3deg);\n    transform: translateX(20%) rotate(3deg);\n  }\n\n  45% {\n    -webkit-transform: translateX(-15%) rotate(-3deg);\n    -ms-transform: translateX(-15%) rotate(-3deg);\n    transform: translateX(-15%) rotate(-3deg);\n  }\n\n  60% {\n    -webkit-transform: translateX(10%) rotate(2deg);\n    -ms-transform: translateX(10%) rotate(2deg);\n    transform: translateX(10%) rotate(2deg);\n  }\n\n  75% {\n    -webkit-transform: translateX(-5%) rotate(-1deg);\n    -ms-transform: translateX(-5%) rotate(-1deg);\n    transform: translateX(-5%) rotate(-1deg);\n  }\n\n  100% {\n    -webkit-transform: translateX(0%);\n    -ms-transform: translateX(0%);\n    transform: translateX(0%);\n  }\n}\n\n.wobble {\n  -webkit-animation-name: wobble;\n  animation-name: wobble;\n}\n\n@-webkit-keyframes bounceIn {\n  0% {\n    opacity: 0;\n    -webkit-transform: scale(.3);\n    transform: scale(.3);\n  }\n\n  50% {\n    opacity: 1;\n    -webkit-transform: scale(1.05);\n    transform: scale(1.05);\n  }\n\n  70% {\n    -webkit-transform: scale(.9);\n    transform: scale(.9);\n  }\n\n  100% {\n    -webkit-transform: scale(1);\n    transform: scale(1);\n  }\n}\n\n@keyframes bounceIn {\n  0% {\n    opacity: 0;\n    -webkit-transform: scale(.3);\n    -ms-transform: scale(.3);\n    transform: scale(.3);\n  }\n\n  50% {\n    opacity: 1;\n    -webkit-transform: scale(1.05);\n    -ms-transform: scale(1.05);\n    transform: scale(1.05);\n  }\n\n  70% {\n    -webkit-transform: scale(.9);\n    -ms-transform: scale(.9);\n    transform: scale(.9);\n  }\n\n  100% {\n    -webkit-transform: scale(1);\n    -ms-transform: scale(1);\n    transform: scale(1);\n  }\n}\n\n.bounceIn {\n  -webkit-animation-name: bounceIn;\n  animation-name: bounceIn;\n}\n\n@-webkit-keyframes bounceInDown {\n  0% {\n    opacity: 0;\n    -webkit-transform: translateY(-2000px);\n    transform: translateY(-2000px);\n  }\n\n  60% {\n    opacity: 1;\n    -webkit-transform: translateY(30px);\n    transform: translateY(30px);\n  }\n\n  80% {\n    -webkit-transform: translateY(-10px);\n    transform: translateY(-10px);\n  }\n\n  100% {\n    -webkit-transform: translateY(0);\n    transform: translateY(0);\n  }\n}\n\n@keyframes bounceInDown {\n  0% {\n    opacity: 0;\n    -webkit-transform: translateY(-2000px);\n    -ms-transform: translateY(-2000px);\n    transform: translateY(-2000px);\n  }\n\n  60% {\n    opacity: 1;\n    -webkit-transform: translateY(30px);\n    -ms-transform: translateY(30px);\n    transform: translateY(30px);\n  }\n\n  80% {\n    -webkit-transform: translateY(-10px);\n    -ms-transform: translateY(-10px);\n    transform: translateY(-10px);\n  }\n\n  100% {\n    -webkit-transform: translateY(0);\n    -ms-transform: translateY(0);\n    transform: translateY(0);\n  }\n}\n\n.bounceInDown {\n  -webkit-animation-name: bounceInDown;\n  animation-name: bounceInDown;\n}\n\n@-webkit-keyframes bounceInLeft {\n  0% {\n    opacity: 0;\n    -webkit-transform: translateX(-2000px);\n    transform: translateX(-2000px);\n  }\n\n  60% {\n    opacity: 1;\n    -webkit-transform: translateX(30px);\n    transform: translateX(30px);\n  }\n\n  80% {\n    -webkit-transform: translateX(-10px);\n    transform: translateX(-10px);\n  }\n\n  100% {\n    -webkit-transform: translateX(0);\n    transform: translateX(0);\n  }\n}\n\n@keyframes bounceInLeft {\n  0% {\n    opacity: 0;\n    -webkit-transform: translateX(-2000px);\n    -ms-transform: translateX(-2000px);\n    transform: translateX(-2000px);\n  }\n\n  60% {\n    opacity: 1;\n    -webkit-transform: translateX(30px);\n    -ms-transform: translateX(30px);\n    transform: translateX(30px);\n  }\n\n  80% {\n    -webkit-transform: translateX(-10px);\n    -ms-transform: translateX(-10px);\n    transform: translateX(-10px);\n  }\n\n  100% {\n    -webkit-transform: translateX(0);\n    -ms-transform: translateX(0);\n    transform: translateX(0);\n  }\n}\n\n.bounceInLeft {\n  -webkit-animation-name: bounceInLeft;\n  animation-name: bounceInLeft;\n}\n\n@-webkit-keyframes bounceInRight {\n  0% {\n    opacity: 0;\n    -webkit-transform: translateX(2000px);\n    transform: translateX(2000px);\n  }\n\n  60% {\n    opacity: 1;\n    -webkit-transform: translateX(-30px);\n    transform: translateX(-30px);\n  }\n\n  80% {\n    -webkit-transform: translateX(10px);\n    transform: translateX(10px);\n  }\n\n  100% {\n    -webkit-transform: translateX(0);\n    transform: translateX(0);\n  }\n}\n\n@keyframes bounceInRight {\n  0% {\n    opacity: 0;\n    -webkit-transform: translateX(2000px);\n    -ms-transform: translateX(2000px);\n    transform: translateX(2000px);\n  }\n\n  60% {\n    opacity: 1;\n    -webkit-transform: translateX(-30px);\n    -ms-transform: translateX(-30px);\n    transform: translateX(-30px);\n  }\n\n  80% {\n    -webkit-transform: translateX(10px);\n    -ms-transform: translateX(10px);\n    transform: translateX(10px);\n  }\n\n  100% {\n    -webkit-transform: translateX(0);\n    -ms-transform: translateX(0);\n    transform: translateX(0);\n  }\n}\n\n.bounceInRight {\n  -webkit-animation-name: bounceInRight;\n  animation-name: bounceInRight;\n}\n\n@-webkit-keyframes bounceInUp {\n  0% {\n    opacity: 0;\n    -webkit-transform: translateY(2000px);\n    transform: translateY(2000px);\n  }\n\n  60% {\n    opacity: 1;\n    -webkit-transform: translateY(-30px);\n    transform: translateY(-30px);\n  }\n\n  80% {\n    -webkit-transform: translateY(10px);\n    transform: translateY(10px);\n  }\n\n  100% {\n    -webkit-transform: translateY(0);\n    transform: translateY(0);\n  }\n}\n\n@keyframes bounceInUp {\n  0% {\n    opacity: 0;\n    -webkit-transform: translateY(2000px);\n    -ms-transform: translateY(2000px);\n    transform: translateY(2000px);\n  }\n\n  60% {\n    opacity: 1;\n    -webkit-transform: translateY(-30px);\n    -ms-transform: translateY(-30px);\n    transform: translateY(-30px);\n  }\n\n  80% {\n    -webkit-transform: translateY(10px);\n    -ms-transform: translateY(10px);\n    transform: translateY(10px);\n  }\n\n  100% {\n    -webkit-transform: translateY(0);\n    -ms-transform: translateY(0);\n    transform: translateY(0);\n  }\n}\n\n.bounceInUp {\n  -webkit-animation-name: bounceInUp;\n  animation-name: bounceInUp;\n}\n\n@-webkit-keyframes bounceOut {\n  0% {\n    -webkit-transform: scale(1);\n    transform: scale(1);\n  }\n\n  25% {\n    -webkit-transform: scale(.95);\n    transform: scale(.95);\n  }\n\n  50% {\n    opacity: 1;\n    -webkit-transform: scale(1.1);\n    transform: scale(1.1);\n  }\n\n  100% {\n    opacity: 0;\n    -webkit-transform: scale(.3);\n    transform: scale(.3);\n  }\n}\n\n@keyframes bounceOut {\n  0% {\n    -webkit-transform: scale(1);\n    -ms-transform: scale(1);\n    transform: scale(1);\n  }\n\n  25% {\n    -webkit-transform: scale(.95);\n    -ms-transform: scale(.95);\n    transform: scale(.95);\n  }\n\n  50% {\n    opacity: 1;\n    -webkit-transform: scale(1.1);\n    -ms-transform: scale(1.1);\n    transform: scale(1.1);\n  }\n\n  100% {\n    opacity: 0;\n    -webkit-transform: scale(.3);\n    -ms-transform: scale(.3);\n    transform: scale(.3);\n  }\n}\n\n.bounceOut {\n  -webkit-animation-name: bounceOut;\n  animation-name: bounceOut;\n}\n\n@-webkit-keyframes bounceOutDown {\n  0% {\n    -webkit-transform: translateY(0);\n    transform: translateY(0);\n  }\n\n  20% {\n    opacity: 1;\n    -webkit-transform: translateY(-20px);\n    transform: translateY(-20px);\n  }\n\n  100% {\n    opacity: 0;\n    -webkit-transform: translateY(2000px);\n    transform: translateY(2000px);\n  }\n}\n\n@keyframes bounceOutDown {\n  0% {\n    -webkit-transform: translateY(0);\n    -ms-transform: translateY(0);\n    transform: translateY(0);\n  }\n\n  20% {\n    opacity: 1;\n    -webkit-transform: translateY(-20px);\n    -ms-transform: translateY(-20px);\n    transform: translateY(-20px);\n  }\n\n  100% {\n    opacity: 0;\n    -webkit-transform: translateY(2000px);\n    -ms-transform: translateY(2000px);\n    transform: translateY(2000px);\n  }\n}\n\n.bounceOutDown {\n  -webkit-animation-name: bounceOutDown;\n  animation-name: bounceOutDown;\n}\n\n@-webkit-keyframes bounceOutLeft {\n  0% {\n    -webkit-transform: translateX(0);\n    transform: translateX(0);\n  }\n\n  20% {\n    opacity: 1;\n    -webkit-transform: translateX(20px);\n    transform: translateX(20px);\n  }\n\n  100% {\n    opacity: 0;\n    -webkit-transform: translateX(-2000px);\n    transform: translateX(-2000px);\n  }\n}\n\n@keyframes bounceOutLeft {\n  0% {\n    -webkit-transform: translateX(0);\n    -ms-transform: translateX(0);\n    transform: translateX(0);\n  }\n\n  20% {\n    opacity: 1;\n    -webkit-transform: translateX(20px);\n    -ms-transform: translateX(20px);\n    transform: translateX(20px);\n  }\n\n  100% {\n    opacity: 0;\n    -webkit-transform: translateX(-2000px);\n    -ms-transform: translateX(-2000px);\n    transform: translateX(-2000px);\n  }\n}\n\n.bounceOutLeft {\n  -webkit-animation-name: bounceOutLeft;\n  animation-name: bounceOutLeft;\n}\n\n@-webkit-keyframes bounceOutRight {\n  0% {\n    -webkit-transform: translateX(0);\n    transform: translateX(0);\n  }\n\n  20% {\n    opacity: 1;\n    -webkit-transform: translateX(-20px);\n    transform: translateX(-20px);\n  }\n\n  100% {\n    opacity: 0;\n    -webkit-transform: translateX(2000px);\n    transform: translateX(2000px);\n  }\n}\n\n@keyframes bounceOutRight {\n  0% {\n    -webkit-transform: translateX(0);\n    -ms-transform: translateX(0);\n    transform: translateX(0);\n  }\n\n  20% {\n    opacity: 1;\n    -webkit-transform: translateX(-20px);\n    -ms-transform: translateX(-20px);\n    transform: translateX(-20px);\n  }\n\n  100% {\n    opacity: 0;\n    -webkit-transform: translateX(2000px);\n    -ms-transform: translateX(2000px);\n    transform: translateX(2000px);\n  }\n}\n\n.bounceOutRight {\n  -webkit-animation-name: bounceOutRight;\n  animation-name: bounceOutRight;\n}\n\n@-webkit-keyframes bounceOutUp {\n  0% {\n    -webkit-transform: translateY(0);\n    transform: translateY(0);\n  }\n\n  20% {\n    opacity: 1;\n    -webkit-transform: translateY(20px);\n    transform: translateY(20px);\n  }\n\n  100% {\n    opacity: 0;\n    -webkit-transform: translateY(-2000px);\n    transform: translateY(-2000px);\n  }\n}\n\n@keyframes bounceOutUp {\n  0% {\n    -webkit-transform: translateY(0);\n    -ms-transform: translateY(0);\n    transform: translateY(0);\n  }\n\n  20% {\n    opacity: 1;\n    -webkit-transform: translateY(20px);\n    -ms-transform: translateY(20px);\n    transform: translateY(20px);\n  }\n\n  100% {\n    opacity: 0;\n    -webkit-transform: translateY(-2000px);\n    -ms-transform: translateY(-2000px);\n    transform: translateY(-2000px);\n  }\n}\n\n.bounceOutUp {\n  -webkit-animation-name: bounceOutUp;\n  animation-name: bounceOutUp;\n}\n\n@-webkit-keyframes fadeIn {\n  0% {\n    opacity: 0;\n  }\n\n  100% {\n    opacity: 1;\n  }\n}\n\n@keyframes fadeIn {\n  0% {\n    opacity: 0;\n  }\n\n  100% {\n    opacity: 1;\n  }\n}\n\n.fadeIn {\n  -webkit-animation-name: fadeIn;\n  animation-name: fadeIn;\n}\n\n@-webkit-keyframes fadeInDown {\n  0% {\n    opacity: 0;\n    -webkit-transform: translateY(-20px);\n    transform: translateY(-20px);\n  }\n\n  100% {\n    opacity: 1;\n    -webkit-transform: translateY(0);\n    transform: translateY(0);\n  }\n}\n\n@keyframes fadeInDown {\n  0% {\n    opacity: 0;\n    -webkit-transform: translateY(-20px);\n    -ms-transform: translateY(-20px);\n    transform: translateY(-20px);\n  }\n\n  100% {\n    opacity: 1;\n    -webkit-transform: translateY(0);\n    -ms-transform: translateY(0);\n    transform: translateY(0);\n  }\n}\n\n.fadeInDown {\n  -webkit-animation-name: fadeInDown;\n  animation-name: fadeInDown;\n}\n\n@-webkit-keyframes fadeInDownBig {\n  0% {\n    opacity: 0;\n    -webkit-transform: translateY(-2000px);\n    transform: translateY(-2000px);\n  }\n\n  100% {\n    opacity: 1;\n    -webkit-transform: translateY(0);\n    transform: translateY(0);\n  }\n}\n\n@keyframes fadeInDownBig {\n  0% {\n    opacity: 0;\n    -webkit-transform: translateY(-2000px);\n    -ms-transform: translateY(-2000px);\n    transform: translateY(-2000px);\n  }\n\n  100% {\n    opacity: 1;\n    -webkit-transform: translateY(0);\n    -ms-transform: translateY(0);\n    transform: translateY(0);\n  }\n}\n\n.fadeInDownBig {\n  -webkit-animation-name: fadeInDownBig;\n  animation-name: fadeInDownBig;\n}\n\n@-webkit-keyframes fadeInLeft {\n  0% {\n    opacity: 0;\n    -webkit-transform: translateX(-20px);\n    transform: translateX(-20px);\n  }\n\n  100% {\n    opacity: 1;\n    -webkit-transform: translateX(0);\n    transform: translateX(0);\n  }\n}\n\n@keyframes fadeInLeft {\n  0% {\n    opacity: 0;\n    -webkit-transform: translateX(-20px);\n    -ms-transform: translateX(-20px);\n    transform: translateX(-20px);\n  }\n\n  100% {\n    opacity: 1;\n    -webkit-transform: translateX(0);\n    -ms-transform: translateX(0);\n    transform: translateX(0);\n  }\n}\n\n.fadeInLeft {\n  -webkit-animation-name: fadeInLeft;\n  animation-name: fadeInLeft;\n}\n\n@-webkit-keyframes fadeInLeftBig {\n  0% {\n    opacity: 0;\n    -webkit-transform: translateX(-2000px);\n    transform: translateX(-2000px);\n  }\n\n  100% {\n    opacity: 1;\n    -webkit-transform: translateX(0);\n    transform: translateX(0);\n  }\n}\n\n@keyframes fadeInLeftBig {\n  0% {\n    opacity: 0;\n    -webkit-transform: translateX(-2000px);\n    -ms-transform: translateX(-2000px);\n    transform: translateX(-2000px);\n  }\n\n  100% {\n    opacity: 1;\n    -webkit-transform: translateX(0);\n    -ms-transform: translateX(0);\n    transform: translateX(0);\n  }\n}\n\n.fadeInLeftBig {\n  -webkit-animation-name: fadeInLeftBig;\n  animation-name: fadeInLeftBig;\n}\n\n@-webkit-keyframes fadeInRight {\n  0% {\n    opacity: 0;\n    -webkit-transform: translateX(20px);\n    transform: translateX(20px);\n  }\n\n  100% {\n    opacity: 1;\n    -webkit-transform: translateX(0);\n    transform: translateX(0);\n  }\n}\n\n@keyframes fadeInRight {\n  0% {\n    opacity: 0;\n    -webkit-transform: translateX(20px);\n    -ms-transform: translateX(20px);\n    transform: translateX(20px);\n  }\n\n  100% {\n    opacity: 1;\n    -webkit-transform: translateX(0);\n    -ms-transform: translateX(0);\n    transform: translateX(0);\n  }\n}\n\n.fadeInRight {\n  -webkit-animation-name: fadeInRight;\n  animation-name: fadeInRight;\n}\n\n@-webkit-keyframes fadeInRightBig {\n  0% {\n    opacity: 0;\n    -webkit-transform: translateX(2000px);\n    transform: translateX(2000px);\n  }\n\n  100% {\n    opacity: 1;\n    -webkit-transform: translateX(0);\n    transform: translateX(0);\n  }\n}\n\n@keyframes fadeInRightBig {\n  0% {\n    opacity: 0;\n    -webkit-transform: translateX(2000px);\n    -ms-transform: translateX(2000px);\n    transform: translateX(2000px);\n  }\n\n  100% {\n    opacity: 1;\n    -webkit-transform: translateX(0);\n    -ms-transform: translateX(0);\n    transform: translateX(0);\n  }\n}\n\n.fadeInRightBig {\n  -webkit-animation-name: fadeInRightBig;\n  animation-name: fadeInRightBig;\n}\n\n@-webkit-keyframes fadeInUp {\n  0% {\n    opacity: 0;\n    -webkit-transform: translateY(20px);\n    transform: translateY(20px);\n  }\n\n  100% {\n    opacity: 1;\n    -webkit-transform: translateY(0);\n    transform: translateY(0);\n  }\n}\n\n@keyframes fadeInUp {\n  0% {\n    opacity: 0;\n    -webkit-transform: translateY(20px);\n    -ms-transform: translateY(20px);\n    transform: translateY(20px);\n  }\n\n  100% {\n    opacity: 1;\n    -webkit-transform: translateY(0);\n    -ms-transform: translateY(0);\n    transform: translateY(0);\n  }\n}\n\n.fadeInUp {\n  -webkit-animation-name: fadeInUp;\n  animation-name: fadeInUp;\n}\n\n@-webkit-keyframes fadeInUpBig {\n  0% {\n    opacity: 0;\n    -webkit-transform: translateY(2000px);\n    transform: translateY(2000px);\n  }\n\n  100% {\n    opacity: 1;\n    -webkit-transform: translateY(0);\n    transform: translateY(0);\n  }\n}\n\n@keyframes fadeInUpBig {\n  0% {\n    opacity: 0;\n    -webkit-transform: translateY(2000px);\n    -ms-transform: translateY(2000px);\n    transform: translateY(2000px);\n  }\n\n  100% {\n    opacity: 1;\n    -webkit-transform: translateY(0);\n    -ms-transform: translateY(0);\n    transform: translateY(0);\n  }\n}\n\n.fadeInUpBig {\n  -webkit-animation-name: fadeInUpBig;\n  animation-name: fadeInUpBig;\n}\n\n@-webkit-keyframes fadeOut {\n  0% {\n    opacity: 1;\n  }\n\n  100% {\n    opacity: 0;\n  }\n}\n\n@keyframes fadeOut {\n  0% {\n    opacity: 1;\n  }\n\n  100% {\n    opacity: 0;\n  }\n}\n\n.fadeOut {\n  -webkit-animation-name: fadeOut;\n  animation-name: fadeOut;\n}\n\n@-webkit-keyframes fadeOutDown {\n  0% {\n    opacity: 1;\n    -webkit-transform: translateY(0);\n    transform: translateY(0);\n  }\n\n  100% {\n    opacity: 0;\n    -webkit-transform: translateY(20px);\n    transform: translateY(20px);\n  }\n}\n\n@keyframes fadeOutDown {\n  0% {\n    opacity: 1;\n    -webkit-transform: translateY(0);\n    -ms-transform: translateY(0);\n    transform: translateY(0);\n  }\n\n  100% {\n    opacity: 0;\n    -webkit-transform: translateY(20px);\n    -ms-transform: translateY(20px);\n    transform: translateY(20px);\n  }\n}\n\n.fadeOutDown {\n  -webkit-animation-name: fadeOutDown;\n  animation-name: fadeOutDown;\n}\n\n@-webkit-keyframes fadeOutDownBig {\n  0% {\n    opacity: 1;\n    -webkit-transform: translateY(0);\n    transform: translateY(0);\n  }\n\n  100% {\n    opacity: 0;\n    -webkit-transform: translateY(2000px);\n    transform: translateY(2000px);\n  }\n}\n\n@keyframes fadeOutDownBig {\n  0% {\n    opacity: 1;\n    -webkit-transform: translateY(0);\n    -ms-transform: translateY(0);\n    transform: translateY(0);\n  }\n\n  100% {\n    opacity: 0;\n    -webkit-transform: translateY(2000px);\n    -ms-transform: translateY(2000px);\n    transform: translateY(2000px);\n  }\n}\n\n.fadeOutDownBig {\n  -webkit-animation-name: fadeOutDownBig;\n  animation-name: fadeOutDownBig;\n}\n\n@-webkit-keyframes fadeOutLeft {\n  0% {\n    opacity: 1;\n    -webkit-transform: translateX(0);\n    transform: translateX(0);\n  }\n\n  100% {\n    opacity: 0;\n    -webkit-transform: translateX(-20px);\n    transform: translateX(-20px);\n  }\n}\n\n@keyframes fadeOutLeft {\n  0% {\n    opacity: 1;\n    -webkit-transform: translateX(0);\n    -ms-transform: translateX(0);\n    transform: translateX(0);\n  }\n\n  100% {\n    opacity: 0;\n    -webkit-transform: translateX(-20px);\n    -ms-transform: translateX(-20px);\n    transform: translateX(-20px);\n  }\n}\n\n.fadeOutLeft {\n  -webkit-animation-name: fadeOutLeft;\n  animation-name: fadeOutLeft;\n}\n\n@-webkit-keyframes fadeOutLeftBig {\n  0% {\n    opacity: 1;\n    -webkit-transform: translateX(0);\n    transform: translateX(0);\n  }\n\n  100% {\n    opacity: 0;\n    -webkit-transform: translateX(-2000px);\n    transform: translateX(-2000px);\n  }\n}\n\n@keyframes fadeOutLeftBig {\n  0% {\n    opacity: 1;\n    -webkit-transform: translateX(0);\n    -ms-transform: translateX(0);\n    transform: translateX(0);\n  }\n\n  100% {\n    opacity: 0;\n    -webkit-transform: translateX(-2000px);\n    -ms-transform: translateX(-2000px);\n    transform: translateX(-2000px);\n  }\n}\n\n.fadeOutLeftBig {\n  -webkit-animation-name: fadeOutLeftBig;\n  animation-name: fadeOutLeftBig;\n}\n\n@-webkit-keyframes fadeOutRight {\n  0% {\n    opacity: 1;\n    -webkit-transform: translateX(0);\n    transform: translateX(0);\n  }\n\n  100% {\n    opacity: 0;\n    -webkit-transform: translateX(20px);\n    transform: translateX(20px);\n  }\n}\n\n@keyframes fadeOutRight {\n  0% {\n    opacity: 1;\n    -webkit-transform: translateX(0);\n    -ms-transform: translateX(0);\n    transform: translateX(0);\n  }\n\n  100% {\n    opacity: 0;\n    -webkit-transform: translateX(20px);\n    -ms-transform: translateX(20px);\n    transform: translateX(20px);\n  }\n}\n\n.fadeOutRight {\n  -webkit-animation-name: fadeOutRight;\n  animation-name: fadeOutRight;\n}\n\n@-webkit-keyframes fadeOutRightBig {\n  0% {\n    opacity: 1;\n    -webkit-transform: translateX(0);\n    transform: translateX(0);\n  }\n\n  100% {\n    opacity: 0;\n    -webkit-transform: translateX(2000px);\n    transform: translateX(2000px);\n  }\n}\n\n@keyframes fadeOutRightBig {\n  0% {\n    opacity: 1;\n    -webkit-transform: translateX(0);\n    -ms-transform: translateX(0);\n    transform: translateX(0);\n  }\n\n  100% {\n    opacity: 0;\n    -webkit-transform: translateX(2000px);\n    -ms-transform: translateX(2000px);\n    transform: translateX(2000px);\n  }\n}\n\n.fadeOutRightBig {\n  -webkit-animation-name: fadeOutRightBig;\n  animation-name: fadeOutRightBig;\n}\n\n@-webkit-keyframes fadeOutUp {\n  0% {\n    opacity: 1;\n    -webkit-transform: translateY(0);\n    transform: translateY(0);\n  }\n\n  100% {\n    opacity: 0;\n    -webkit-transform: translateY(-20px);\n    transform: translateY(-20px);\n  }\n}\n\n@keyframes fadeOutUp {\n  0% {\n    opacity: 1;\n    -webkit-transform: translateY(0);\n    -ms-transform: translateY(0);\n    transform: translateY(0);\n  }\n\n  100% {\n    opacity: 0;\n    -webkit-transform: translateY(-20px);\n    -ms-transform: translateY(-20px);\n    transform: translateY(-20px);\n  }\n}\n\n.fadeOutUp {\n  -webkit-animation-name: fadeOutUp;\n  animation-name: fadeOutUp;\n}\n\n@-webkit-keyframes fadeOutUpBig {\n  0% {\n    opacity: 1;\n    -webkit-transform: translateY(0);\n    transform: translateY(0);\n  }\n\n  100% {\n    opacity: 0;\n    -webkit-transform: translateY(-2000px);\n    transform: translateY(-2000px);\n  }\n}\n\n@keyframes fadeOutUpBig {\n  0% {\n    opacity: 1;\n    -webkit-transform: translateY(0);\n    -ms-transform: translateY(0);\n    transform: translateY(0);\n  }\n\n  100% {\n    opacity: 0;\n    -webkit-transform: translateY(-2000px);\n    -ms-transform: translateY(-2000px);\n    transform: translateY(-2000px);\n  }\n}\n\n.fadeOutUpBig {\n  -webkit-animation-name: fadeOutUpBig;\n  animation-name: fadeOutUpBig;\n}\n\n@-webkit-keyframes flip {\n  0% {\n    -webkit-transform: perspective(400px) translateZ(0) rotateY(0) scale(1);\n    transform: perspective(400px) translateZ(0) rotateY(0) scale(1);\n    -webkit-animation-timing-function: ease-out;\n    animation-timing-function: ease-out;\n  }\n\n  40% {\n    -webkit-transform: perspective(400px) translateZ(150px) rotateY(170deg) scale(1);\n    transform: perspective(400px) translateZ(150px) rotateY(170deg) scale(1);\n    -webkit-animation-timing-function: ease-out;\n    animation-timing-function: ease-out;\n  }\n\n  50% {\n    -webkit-transform: perspective(400px) translateZ(150px) rotateY(190deg) scale(1);\n    transform: perspective(400px) translateZ(150px) rotateY(190deg) scale(1);\n    -webkit-animation-timing-function: ease-in;\n    animation-timing-function: ease-in;\n  }\n\n  80% {\n    -webkit-transform: perspective(400px) translateZ(0) rotateY(360deg) scale(.95);\n    transform: perspective(400px) translateZ(0) rotateY(360deg) scale(.95);\n    -webkit-animation-timing-function: ease-in;\n    animation-timing-function: ease-in;\n  }\n\n  100% {\n    -webkit-transform: perspective(400px) translateZ(0) rotateY(360deg) scale(1);\n    transform: perspective(400px) translateZ(0) rotateY(360deg) scale(1);\n    -webkit-animation-timing-function: ease-in;\n    animation-timing-function: ease-in;\n  }\n}\n\n@keyframes flip {\n  0% {\n    -webkit-transform: perspective(400px) translateZ(0) rotateY(0) scale(1);\n    -ms-transform: perspective(400px) translateZ(0) rotateY(0) scale(1);\n    transform: perspective(400px) translateZ(0) rotateY(0) scale(1);\n    -webkit-animation-timing-function: ease-out;\n    animation-timing-function: ease-out;\n  }\n\n  40% {\n    -webkit-transform: perspective(400px) translateZ(150px) rotateY(170deg) scale(1);\n    -ms-transform: perspective(400px) translateZ(150px) rotateY(170deg) scale(1);\n    transform: perspective(400px) translateZ(150px) rotateY(170deg) scale(1);\n    -webkit-animation-timing-function: ease-out;\n    animation-timing-function: ease-out;\n  }\n\n  50% {\n    -webkit-transform: perspective(400px) translateZ(150px) rotateY(190deg) scale(1);\n    -ms-transform: perspective(400px) translateZ(150px) rotateY(190deg) scale(1);\n    transform: perspective(400px) translateZ(150px) rotateY(190deg) scale(1);\n    -webkit-animation-timing-function: ease-in;\n    animation-timing-function: ease-in;\n  }\n\n  80% {\n    -webkit-transform: perspective(400px) translateZ(0) rotateY(360deg) scale(.95);\n    -ms-transform: perspective(400px) translateZ(0) rotateY(360deg) scale(.95);\n    transform: perspective(400px) translateZ(0) rotateY(360deg) scale(.95);\n    -webkit-animation-timing-function: ease-in;\n    animation-timing-function: ease-in;\n  }\n\n  100% {\n    -webkit-transform: perspective(400px) translateZ(0) rotateY(360deg) scale(1);\n    -ms-transform: perspective(400px) translateZ(0) rotateY(360deg) scale(1);\n    transform: perspective(400px) translateZ(0) rotateY(360deg) scale(1);\n    -webkit-animation-timing-function: ease-in;\n    animation-timing-function: ease-in;\n  }\n}\n\n.animated.flip {\n  -webkit-backface-visibility: visible;\n  -ms-backface-visibility: visible;\n  backface-visibility: visible;\n  -webkit-animation-name: flip;\n  animation-name: flip;\n}\n\n@-webkit-keyframes flipInX {\n  0% {\n    -webkit-transform: perspective(400px) rotateX(90deg);\n    transform: perspective(400px) rotateX(90deg);\n    opacity: 0;\n  }\n\n  40% {\n    -webkit-transform: perspective(400px) rotateX(-10deg);\n    transform: perspective(400px) rotateX(-10deg);\n  }\n\n  70% {\n    -webkit-transform: perspective(400px) rotateX(10deg);\n    transform: perspective(400px) rotateX(10deg);\n  }\n\n  100% {\n    -webkit-transform: perspective(400px) rotateX(0deg);\n    transform: perspective(400px) rotateX(0deg);\n    opacity: 1;\n  }\n}\n\n@keyframes flipInX {\n  0% {\n    -webkit-transform: perspective(400px) rotateX(90deg);\n    -ms-transform: perspective(400px) rotateX(90deg);\n    transform: perspective(400px) rotateX(90deg);\n    opacity: 0;\n  }\n\n  40% {\n    -webkit-transform: perspective(400px) rotateX(-10deg);\n    -ms-transform: perspective(400px) rotateX(-10deg);\n    transform: perspective(400px) rotateX(-10deg);\n  }\n\n  70% {\n    -webkit-transform: perspective(400px) rotateX(10deg);\n    -ms-transform: perspective(400px) rotateX(10deg);\n    transform: perspective(400px) rotateX(10deg);\n  }\n\n  100% {\n    -webkit-transform: perspective(400px) rotateX(0deg);\n    -ms-transform: perspective(400px) rotateX(0deg);\n    transform: perspective(400px) rotateX(0deg);\n    opacity: 1;\n  }\n}\n\n.flipInX {\n  -webkit-backface-visibility: visible !important;\n  -ms-backface-visibility: visible !important;\n  backface-visibility: visible !important;\n  -webkit-animation-name: flipInX;\n  animation-name: flipInX;\n}\n\n@-webkit-keyframes flipInY {\n  0% {\n    -webkit-transform: perspective(400px) rotateY(90deg);\n    transform: perspective(400px) rotateY(90deg);\n    opacity: 0;\n  }\n\n  40% {\n    -webkit-transform: perspective(400px) rotateY(-10deg);\n    transform: perspective(400px) rotateY(-10deg);\n  }\n\n  70% {\n    -webkit-transform: perspective(400px) rotateY(10deg);\n    transform: perspective(400px) rotateY(10deg);\n  }\n\n  100% {\n    -webkit-transform: perspective(400px) rotateY(0deg);\n    transform: perspective(400px) rotateY(0deg);\n    opacity: 1;\n  }\n}\n\n@keyframes flipInY {\n  0% {\n    -webkit-transform: perspective(400px) rotateY(90deg);\n    -ms-transform: perspective(400px) rotateY(90deg);\n    transform: perspective(400px) rotateY(90deg);\n    opacity: 0;\n  }\n\n  40% {\n    -webkit-transform: perspective(400px) rotateY(-10deg);\n    -ms-transform: perspective(400px) rotateY(-10deg);\n    transform: perspective(400px) rotateY(-10deg);\n  }\n\n  70% {\n    -webkit-transform: perspective(400px) rotateY(10deg);\n    -ms-transform: perspective(400px) rotateY(10deg);\n    transform: perspective(400px) rotateY(10deg);\n  }\n\n  100% {\n    -webkit-transform: perspective(400px) rotateY(0deg);\n    -ms-transform: perspective(400px) rotateY(0deg);\n    transform: perspective(400px) rotateY(0deg);\n    opacity: 1;\n  }\n}\n\n.flipInY {\n  -webkit-backface-visibility: visible !important;\n  -ms-backface-visibility: visible !important;\n  backface-visibility: visible !important;\n  -webkit-animation-name: flipInY;\n  animation-name: flipInY;\n}\n\n@-webkit-keyframes flipOutX {\n  0% {\n    -webkit-transform: perspective(400px) rotateX(0deg);\n    transform: perspective(400px) rotateX(0deg);\n    opacity: 1;\n  }\n\n  100% {\n    -webkit-transform: perspective(400px) rotateX(90deg);\n    transform: perspective(400px) rotateX(90deg);\n    opacity: 0;\n  }\n}\n\n@keyframes flipOutX {\n  0% {\n    -webkit-transform: perspective(400px) rotateX(0deg);\n    -ms-transform: perspective(400px) rotateX(0deg);\n    transform: perspective(400px) rotateX(0deg);\n    opacity: 1;\n  }\n\n  100% {\n    -webkit-transform: perspective(400px) rotateX(90deg);\n    -ms-transform: perspective(400px) rotateX(90deg);\n    transform: perspective(400px) rotateX(90deg);\n    opacity: 0;\n  }\n}\n\n.flipOutX {\n  -webkit-animation-name: flipOutX;\n  animation-name: flipOutX;\n  -webkit-backface-visibility: visible !important;\n  -ms-backface-visibility: visible !important;\n  backface-visibility: visible !important;\n}\n\n@-webkit-keyframes flipOutY {\n  0% {\n    -webkit-transform: perspective(400px) rotateY(0deg);\n    transform: perspective(400px) rotateY(0deg);\n    opacity: 1;\n  }\n\n  100% {\n    -webkit-transform: perspective(400px) rotateY(90deg);\n    transform: perspective(400px) rotateY(90deg);\n    opacity: 0;\n  }\n}\n\n@keyframes flipOutY {\n  0% {\n    -webkit-transform: perspective(400px) rotateY(0deg);\n    -ms-transform: perspective(400px) rotateY(0deg);\n    transform: perspective(400px) rotateY(0deg);\n    opacity: 1;\n  }\n\n  100% {\n    -webkit-transform: perspective(400px) rotateY(90deg);\n    -ms-transform: perspective(400px) rotateY(90deg);\n    transform: perspective(400px) rotateY(90deg);\n    opacity: 0;\n  }\n}\n\n.flipOutY {\n  -webkit-backface-visibility: visible !important;\n  -ms-backface-visibility: visible !important;\n  backface-visibility: visible !important;\n  -webkit-animation-name: flipOutY;\n  animation-name: flipOutY;\n}\n\n@-webkit-keyframes lightSpeedIn {\n  0% {\n    -webkit-transform: translateX(100%) skewX(-30deg);\n    transform: translateX(100%) skewX(-30deg);\n    opacity: 0;\n  }\n\n  60% {\n    -webkit-transform: translateX(-20%) skewX(30deg);\n    transform: translateX(-20%) skewX(30deg);\n    opacity: 1;\n  }\n\n  80% {\n    -webkit-transform: translateX(0%) skewX(-15deg);\n    transform: translateX(0%) skewX(-15deg);\n    opacity: 1;\n  }\n\n  100% {\n    -webkit-transform: translateX(0%) skewX(0deg);\n    transform: translateX(0%) skewX(0deg);\n    opacity: 1;\n  }\n}\n\n@keyframes lightSpeedIn {\n  0% {\n    -webkit-transform: translateX(100%) skewX(-30deg);\n    -ms-transform: translateX(100%) skewX(-30deg);\n    transform: translateX(100%) skewX(-30deg);\n    opacity: 0;\n  }\n\n  60% {\n    -webkit-transform: translateX(-20%) skewX(30deg);\n    -ms-transform: translateX(-20%) skewX(30deg);\n    transform: translateX(-20%) skewX(30deg);\n    opacity: 1;\n  }\n\n  80% {\n    -webkit-transform: translateX(0%) skewX(-15deg);\n    -ms-transform: translateX(0%) skewX(-15deg);\n    transform: translateX(0%) skewX(-15deg);\n    opacity: 1;\n  }\n\n  100% {\n    -webkit-transform: translateX(0%) skewX(0deg);\n    -ms-transform: translateX(0%) skewX(0deg);\n    transform: translateX(0%) skewX(0deg);\n    opacity: 1;\n  }\n}\n\n.lightSpeedIn {\n  -webkit-animation-name: lightSpeedIn;\n  animation-name: lightSpeedIn;\n  -webkit-animation-timing-function: ease-out;\n  animation-timing-function: ease-out;\n}\n\n@-webkit-keyframes lightSpeedOut {\n  0% {\n    -webkit-transform: translateX(0%) skewX(0deg);\n    transform: translateX(0%) skewX(0deg);\n    opacity: 1;\n  }\n\n  100% {\n    -webkit-transform: translateX(100%) skewX(-30deg);\n    transform: translateX(100%) skewX(-30deg);\n    opacity: 0;\n  }\n}\n\n@keyframes lightSpeedOut {\n  0% {\n    -webkit-transform: translateX(0%) skewX(0deg);\n    -ms-transform: translateX(0%) skewX(0deg);\n    transform: translateX(0%) skewX(0deg);\n    opacity: 1;\n  }\n\n  100% {\n    -webkit-transform: translateX(100%) skewX(-30deg);\n    -ms-transform: translateX(100%) skewX(-30deg);\n    transform: translateX(100%) skewX(-30deg);\n    opacity: 0;\n  }\n}\n\n.lightSpeedOut {\n  -webkit-animation-name: lightSpeedOut;\n  animation-name: lightSpeedOut;\n  -webkit-animation-timing-function: ease-in;\n  animation-timing-function: ease-in;\n}\n\n@-webkit-keyframes rotateIn {\n  0% {\n    -webkit-transform-origin: center center;\n    transform-origin: center center;\n    -webkit-transform: rotate(-200deg);\n    transform: rotate(-200deg);\n    opacity: 0;\n  }\n\n  100% {\n    -webkit-transform-origin: center center;\n    transform-origin: center center;\n    -webkit-transform: rotate(0);\n    transform: rotate(0);\n    opacity: 1;\n  }\n}\n\n@keyframes rotateIn {\n  0% {\n    -webkit-transform-origin: center center;\n    -ms-transform-origin: center center;\n    transform-origin: center center;\n    -webkit-transform: rotate(-200deg);\n    -ms-transform: rotate(-200deg);\n    transform: rotate(-200deg);\n    opacity: 0;\n  }\n\n  100% {\n    -webkit-transform-origin: center center;\n    -ms-transform-origin: center center;\n    transform-origin: center center;\n    -webkit-transform: rotate(0);\n    -ms-transform: rotate(0);\n    transform: rotate(0);\n    opacity: 1;\n  }\n}\n\n.rotateIn {\n  -webkit-animation-name: rotateIn;\n  animation-name: rotateIn;\n}\n\n@-webkit-keyframes rotateInDownLeft {\n  0% {\n    -webkit-transform-origin: left bottom;\n    transform-origin: left bottom;\n    -webkit-transform: rotate(-90deg);\n    transform: rotate(-90deg);\n    opacity: 0;\n  }\n\n  100% {\n    -webkit-transform-origin: left bottom;\n    transform-origin: left bottom;\n    -webkit-transform: rotate(0);\n    transform: rotate(0);\n    opacity: 1;\n  }\n}\n\n@keyframes rotateInDownLeft {\n  0% {\n    -webkit-transform-origin: left bottom;\n    -ms-transform-origin: left bottom;\n    transform-origin: left bottom;\n    -webkit-transform: rotate(-90deg);\n    -ms-transform: rotate(-90deg);\n    transform: rotate(-90deg);\n    opacity: 0;\n  }\n\n  100% {\n    -webkit-transform-origin: left bottom;\n    -ms-transform-origin: left bottom;\n    transform-origin: left bottom;\n    -webkit-transform: rotate(0);\n    -ms-transform: rotate(0);\n    transform: rotate(0);\n    opacity: 1;\n  }\n}\n\n.rotateInDownLeft {\n  -webkit-animation-name: rotateInDownLeft;\n  animation-name: rotateInDownLeft;\n}\n\n@-webkit-keyframes rotateInDownRight {\n  0% {\n    -webkit-transform-origin: right bottom;\n    transform-origin: right bottom;\n    -webkit-transform: rotate(90deg);\n    transform: rotate(90deg);\n    opacity: 0;\n  }\n\n  100% {\n    -webkit-transform-origin: right bottom;\n    transform-origin: right bottom;\n    -webkit-transform: rotate(0);\n    transform: rotate(0);\n    opacity: 1;\n  }\n}\n\n@keyframes rotateInDownRight {\n  0% {\n    -webkit-transform-origin: right bottom;\n    -ms-transform-origin: right bottom;\n    transform-origin: right bottom;\n    -webkit-transform: rotate(90deg);\n    -ms-transform: rotate(90deg);\n    transform: rotate(90deg);\n    opacity: 0;\n  }\n\n  100% {\n    -webkit-transform-origin: right bottom;\n    -ms-transform-origin: right bottom;\n    transform-origin: right bottom;\n    -webkit-transform: rotate(0);\n    -ms-transform: rotate(0);\n    transform: rotate(0);\n    opacity: 1;\n  }\n}\n\n.rotateInDownRight {\n  -webkit-animation-name: rotateInDownRight;\n  animation-name: rotateInDownRight;\n}\n\n@-webkit-keyframes rotateInUpLeft {\n  0% {\n    -webkit-transform-origin: left bottom;\n    transform-origin: left bottom;\n    -webkit-transform: rotate(90deg);\n    transform: rotate(90deg);\n    opacity: 0;\n  }\n\n  100% {\n    -webkit-transform-origin: left bottom;\n    transform-origin: left bottom;\n    -webkit-transform: rotate(0);\n    transform: rotate(0);\n    opacity: 1;\n  }\n}\n\n@keyframes rotateInUpLeft {\n  0% {\n    -webkit-transform-origin: left bottom;\n    -ms-transform-origin: left bottom;\n    transform-origin: left bottom;\n    -webkit-transform: rotate(90deg);\n    -ms-transform: rotate(90deg);\n    transform: rotate(90deg);\n    opacity: 0;\n  }\n\n  100% {\n    -webkit-transform-origin: left bottom;\n    -ms-transform-origin: left bottom;\n    transform-origin: left bottom;\n    -webkit-transform: rotate(0);\n    -ms-transform: rotate(0);\n    transform: rotate(0);\n    opacity: 1;\n  }\n}\n\n.rotateInUpLeft {\n  -webkit-animation-name: rotateInUpLeft;\n  animation-name: rotateInUpLeft;\n}\n\n@-webkit-keyframes rotateInUpRight {\n  0% {\n    -webkit-transform-origin: right bottom;\n    transform-origin: right bottom;\n    -webkit-transform: rotate(-90deg);\n    transform: rotate(-90deg);\n    opacity: 0;\n  }\n\n  100% {\n    -webkit-transform-origin: right bottom;\n    transform-origin: right bottom;\n    -webkit-transform: rotate(0);\n    transform: rotate(0);\n    opacity: 1;\n  }\n}\n\n@keyframes rotateInUpRight {\n  0% {\n    -webkit-transform-origin: right bottom;\n    -ms-transform-origin: right bottom;\n    transform-origin: right bottom;\n    -webkit-transform: rotate(-90deg);\n    -ms-transform: rotate(-90deg);\n    transform: rotate(-90deg);\n    opacity: 0;\n  }\n\n  100% {\n    -webkit-transform-origin: right bottom;\n    -ms-transform-origin: right bottom;\n    transform-origin: right bottom;\n    -webkit-transform: rotate(0);\n    -ms-transform: rotate(0);\n    transform: rotate(0);\n    opacity: 1;\n  }\n}\n\n.rotateInUpRight {\n  -webkit-animation-name: rotateInUpRight;\n  animation-name: rotateInUpRight;\n}\n\n@-webkit-keyframes rotateOut {\n  0% {\n    -webkit-transform-origin: center center;\n    transform-origin: center center;\n    -webkit-transform: rotate(0);\n    transform: rotate(0);\n    opacity: 1;\n  }\n\n  100% {\n    -webkit-transform-origin: center center;\n    transform-origin: center center;\n    -webkit-transform: rotate(200deg);\n    transform: rotate(200deg);\n    opacity: 0;\n  }\n}\n\n@keyframes rotateOut {\n  0% {\n    -webkit-transform-origin: center center;\n    -ms-transform-origin: center center;\n    transform-origin: center center;\n    -webkit-transform: rotate(0);\n    -ms-transform: rotate(0);\n    transform: rotate(0);\n    opacity: 1;\n  }\n\n  100% {\n    -webkit-transform-origin: center center;\n    -ms-transform-origin: center center;\n    transform-origin: center center;\n    -webkit-transform: rotate(200deg);\n    -ms-transform: rotate(200deg);\n    transform: rotate(200deg);\n    opacity: 0;\n  }\n}\n\n.rotateOut {\n  -webkit-animation-name: rotateOut;\n  animation-name: rotateOut;\n}\n\n@-webkit-keyframes rotateOutDownLeft {\n  0% {\n    -webkit-transform-origin: left bottom;\n    transform-origin: left bottom;\n    -webkit-transform: rotate(0);\n    transform: rotate(0);\n    opacity: 1;\n  }\n\n  100% {\n    -webkit-transform-origin: left bottom;\n    transform-origin: left bottom;\n    -webkit-transform: rotate(90deg);\n    transform: rotate(90deg);\n    opacity: 0;\n  }\n}\n\n@keyframes rotateOutDownLeft {\n  0% {\n    -webkit-transform-origin: left bottom;\n    -ms-transform-origin: left bottom;\n    transform-origin: left bottom;\n    -webkit-transform: rotate(0);\n    -ms-transform: rotate(0);\n    transform: rotate(0);\n    opacity: 1;\n  }\n\n  100% {\n    -webkit-transform-origin: left bottom;\n    -ms-transform-origin: left bottom;\n    transform-origin: left bottom;\n    -webkit-transform: rotate(90deg);\n    -ms-transform: rotate(90deg);\n    transform: rotate(90deg);\n    opacity: 0;\n  }\n}\n\n.rotateOutDownLeft {\n  -webkit-animation-name: rotateOutDownLeft;\n  animation-name: rotateOutDownLeft;\n}\n\n@-webkit-keyframes rotateOutDownRight {\n  0% {\n    -webkit-transform-origin: right bottom;\n    transform-origin: right bottom;\n    -webkit-transform: rotate(0);\n    transform: rotate(0);\n    opacity: 1;\n  }\n\n  100% {\n    -webkit-transform-origin: right bottom;\n    transform-origin: right bottom;\n    -webkit-transform: rotate(-90deg);\n    transform: rotate(-90deg);\n    opacity: 0;\n  }\n}\n\n@keyframes rotateOutDownRight {\n  0% {\n    -webkit-transform-origin: right bottom;\n    -ms-transform-origin: right bottom;\n    transform-origin: right bottom;\n    -webkit-transform: rotate(0);\n    -ms-transform: rotate(0);\n    transform: rotate(0);\n    opacity: 1;\n  }\n\n  100% {\n    -webkit-transform-origin: right bottom;\n    -ms-transform-origin: right bottom;\n    transform-origin: right bottom;\n    -webkit-transform: rotate(-90deg);\n    -ms-transform: rotate(-90deg);\n    transform: rotate(-90deg);\n    opacity: 0;\n  }\n}\n\n.rotateOutDownRight {\n  -webkit-animation-name: rotateOutDownRight;\n  animation-name: rotateOutDownRight;\n}\n\n@-webkit-keyframes rotateOutUpLeft {\n  0% {\n    -webkit-transform-origin: left bottom;\n    transform-origin: left bottom;\n    -webkit-transform: rotate(0);\n    transform: rotate(0);\n    opacity: 1;\n  }\n\n  100% {\n    -webkit-transform-origin: left bottom;\n    transform-origin: left bottom;\n    -webkit-transform: rotate(-90deg);\n    transform: rotate(-90deg);\n    opacity: 0;\n  }\n}\n\n@keyframes rotateOutUpLeft {\n  0% {\n    -webkit-transform-origin: left bottom;\n    -ms-transform-origin: left bottom;\n    transform-origin: left bottom;\n    -webkit-transform: rotate(0);\n    -ms-transform: rotate(0);\n    transform: rotate(0);\n    opacity: 1;\n  }\n\n  100% {\n    -webkit-transform-origin: left bottom;\n    -ms-transform-origin: left bottom;\n    transform-origin: left bottom;\n    -webkit-transform: rotate(-90deg);\n    -ms-transform: rotate(-90deg);\n    transform: rotate(-90deg);\n    opacity: 0;\n  }\n}\n\n.rotateOutUpLeft {\n  -webkit-animation-name: rotateOutUpLeft;\n  animation-name: rotateOutUpLeft;\n}\n\n@-webkit-keyframes rotateOutUpRight {\n  0% {\n    -webkit-transform-origin: right bottom;\n    transform-origin: right bottom;\n    -webkit-transform: rotate(0);\n    transform: rotate(0);\n    opacity: 1;\n  }\n\n  100% {\n    -webkit-transform-origin: right bottom;\n    transform-origin: right bottom;\n    -webkit-transform: rotate(90deg);\n    transform: rotate(90deg);\n    opacity: 0;\n  }\n}\n\n@keyframes rotateOutUpRight {\n  0% {\n    -webkit-transform-origin: right bottom;\n    -ms-transform-origin: right bottom;\n    transform-origin: right bottom;\n    -webkit-transform: rotate(0);\n    -ms-transform: rotate(0);\n    transform: rotate(0);\n    opacity: 1;\n  }\n\n  100% {\n    -webkit-transform-origin: right bottom;\n    -ms-transform-origin: right bottom;\n    transform-origin: right bottom;\n    -webkit-transform: rotate(90deg);\n    -ms-transform: rotate(90deg);\n    transform: rotate(90deg);\n    opacity: 0;\n  }\n}\n\n.rotateOutUpRight {\n  -webkit-animation-name: rotateOutUpRight;\n  animation-name: rotateOutUpRight;\n}\n\n@-webkit-keyframes slideInDown {\n  0% {\n    opacity: 0;\n    -webkit-transform: translateY(-2000px);\n    transform: translateY(-2000px);\n  }\n\n  100% {\n    -webkit-transform: translateY(0);\n    transform: translateY(0);\n  }\n}\n\n@keyframes slideInDown {\n  0% {\n    opacity: 0;\n    -webkit-transform: translateY(-2000px);\n    -ms-transform: translateY(-2000px);\n    transform: translateY(-2000px);\n  }\n\n  100% {\n    -webkit-transform: translateY(0);\n    -ms-transform: translateY(0);\n    transform: translateY(0);\n  }\n}\n\n.slideInDown {\n  -webkit-animation-name: slideInDown;\n  animation-name: slideInDown;\n}\n\n@-webkit-keyframes slideInLeft {\n  0% {\n    opacity: 0;\n    -webkit-transform: translateX(-2000px);\n    transform: translateX(-2000px);\n  }\n\n  100% {\n    -webkit-transform: translateX(0);\n    transform: translateX(0);\n  }\n}\n\n@keyframes slideInLeft {\n  0% {\n    opacity: 0;\n    -webkit-transform: translateX(-2000px);\n    -ms-transform: translateX(-2000px);\n    transform: translateX(-2000px);\n  }\n\n  100% {\n    -webkit-transform: translateX(0);\n    -ms-transform: translateX(0);\n    transform: translateX(0);\n  }\n}\n\n.slideInLeft {\n  -webkit-animation-name: slideInLeft;\n  animation-name: slideInLeft;\n}\n\n@-webkit-keyframes slideInRight {\n  0% {\n    opacity: 0;\n    -webkit-transform: translateX(2000px);\n    transform: translateX(2000px);\n  }\n\n  100% {\n    -webkit-transform: translateX(0);\n    transform: translateX(0);\n  }\n}\n\n@keyframes slideInRight {\n  0% {\n    opacity: 0;\n    -webkit-transform: translateX(2000px);\n    -ms-transform: translateX(2000px);\n    transform: translateX(2000px);\n  }\n\n  100% {\n    -webkit-transform: translateX(0);\n    -ms-transform: translateX(0);\n    transform: translateX(0);\n  }\n}\n\n.slideInRight {\n  -webkit-animation-name: slideInRight;\n  animation-name: slideInRight;\n}\n\n@-webkit-keyframes slideOutLeft {\n  0% {\n    -webkit-transform: translateX(0);\n    transform: translateX(0);\n  }\n\n  100% {\n    opacity: 0;\n    -webkit-transform: translateX(-2000px);\n    transform: translateX(-2000px);\n  }\n}\n\n@keyframes slideOutLeft {\n  0% {\n    -webkit-transform: translateX(0);\n    -ms-transform: translateX(0);\n    transform: translateX(0);\n  }\n\n  100% {\n    opacity: 0;\n    -webkit-transform: translateX(-2000px);\n    -ms-transform: translateX(-2000px);\n    transform: translateX(-2000px);\n  }\n}\n\n.slideOutLeft {\n  -webkit-animation-name: slideOutLeft;\n  animation-name: slideOutLeft;\n}\n\n@-webkit-keyframes slideOutRight {\n  0% {\n    -webkit-transform: translateX(0);\n    transform: translateX(0);\n  }\n\n  100% {\n    opacity: 0;\n    -webkit-transform: translateX(2000px);\n    transform: translateX(2000px);\n  }\n}\n\n@keyframes slideOutRight {\n  0% {\n    -webkit-transform: translateX(0);\n    -ms-transform: translateX(0);\n    transform: translateX(0);\n  }\n\n  100% {\n    opacity: 0;\n    -webkit-transform: translateX(2000px);\n    -ms-transform: translateX(2000px);\n    transform: translateX(2000px);\n  }\n}\n\n.slideOutRight {\n  -webkit-animation-name: slideOutRight;\n  animation-name: slideOutRight;\n}\n\n@-webkit-keyframes slideOutUp {\n  0% {\n    -webkit-transform: translateY(0);\n    transform: translateY(0);\n  }\n\n  100% {\n    opacity: 0;\n    -webkit-transform: translateY(-2000px);\n    transform: translateY(-2000px);\n  }\n}\n\n@keyframes slideOutUp {\n  0% {\n    -webkit-transform: translateY(0);\n    -ms-transform: translateY(0);\n    transform: translateY(0);\n  }\n\n  100% {\n    opacity: 0;\n    -webkit-transform: translateY(-2000px);\n    -ms-transform: translateY(-2000px);\n    transform: translateY(-2000px);\n  }\n}\n\n.slideOutUp {\n  -webkit-animation-name: slideOutUp;\n  animation-name: slideOutUp;\n}\n\n@-webkit-keyframes hinge {\n  0% {\n    -webkit-transform: rotate(0);\n    transform: rotate(0);\n    -webkit-transform-origin: top left;\n    transform-origin: top left;\n    -webkit-animation-timing-function: ease-in-out;\n    animation-timing-function: ease-in-out;\n  }\n\n  20%, 60% {\n    -webkit-transform: rotate(80deg);\n    transform: rotate(80deg);\n    -webkit-transform-origin: top left;\n    transform-origin: top left;\n    -webkit-animation-timing-function: ease-in-out;\n    animation-timing-function: ease-in-out;\n  }\n\n  40% {\n    -webkit-transform: rotate(60deg);\n    transform: rotate(60deg);\n    -webkit-transform-origin: top left;\n    transform-origin: top left;\n    -webkit-animation-timing-function: ease-in-out;\n    animation-timing-function: ease-in-out;\n  }\n\n  80% {\n    -webkit-transform: rotate(60deg) translateY(0);\n    transform: rotate(60deg) translateY(0);\n    opacity: 1;\n    -webkit-transform-origin: top left;\n    transform-origin: top left;\n    -webkit-animation-timing-function: ease-in-out;\n    animation-timing-function: ease-in-out;\n  }\n\n  100% {\n    -webkit-transform: translateY(700px);\n    transform: translateY(700px);\n    opacity: 0;\n  }\n}\n\n@keyframes hinge {\n  0% {\n    -webkit-transform: rotate(0);\n    -ms-transform: rotate(0);\n    transform: rotate(0);\n    -webkit-transform-origin: top left;\n    -ms-transform-origin: top left;\n    transform-origin: top left;\n    -webkit-animation-timing-function: ease-in-out;\n    animation-timing-function: ease-in-out;\n  }\n\n  20%, 60% {\n    -webkit-transform: rotate(80deg);\n    -ms-transform: rotate(80deg);\n    transform: rotate(80deg);\n    -webkit-transform-origin: top left;\n    -ms-transform-origin: top left;\n    transform-origin: top left;\n    -webkit-animation-timing-function: ease-in-out;\n    animation-timing-function: ease-in-out;\n  }\n\n  40% {\n    -webkit-transform: rotate(60deg);\n    -ms-transform: rotate(60deg);\n    transform: rotate(60deg);\n    -webkit-transform-origin: top left;\n    -ms-transform-origin: top left;\n    transform-origin: top left;\n    -webkit-animation-timing-function: ease-in-out;\n    animation-timing-function: ease-in-out;\n  }\n\n  80% {\n    -webkit-transform: rotate(60deg) translateY(0);\n    -ms-transform: rotate(60deg) translateY(0);\n    transform: rotate(60deg) translateY(0);\n    opacity: 1;\n    -webkit-transform-origin: top left;\n    -ms-transform-origin: top left;\n    transform-origin: top left;\n    -webkit-animation-timing-function: ease-in-out;\n    animation-timing-function: ease-in-out;\n  }\n\n  100% {\n    -webkit-transform: translateY(700px);\n    -ms-transform: translateY(700px);\n    transform: translateY(700px);\n    opacity: 0;\n  }\n}\n\n.hinge {\n  -webkit-animation-name: hinge;\n  animation-name: hinge;\n}\n\n/* originally authored by Nick Pettit - https://github.com/nickpettit/glide */\n\n@-webkit-keyframes rollIn {\n  0% {\n    opacity: 0;\n    -webkit-transform: translateX(-100%) rotate(-120deg);\n    transform: translateX(-100%) rotate(-120deg);\n  }\n\n  100% {\n    opacity: 1;\n    -webkit-transform: translateX(0px) rotate(0deg);\n    transform: translateX(0px) rotate(0deg);\n  }\n}\n\n@keyframes rollIn {\n  0% {\n    opacity: 0;\n    -webkit-transform: translateX(-100%) rotate(-120deg);\n    -ms-transform: translateX(-100%) rotate(-120deg);\n    transform: translateX(-100%) rotate(-120deg);\n  }\n\n  100% {\n    opacity: 1;\n    -webkit-transform: translateX(0px) rotate(0deg);\n    -ms-transform: translateX(0px) rotate(0deg);\n    transform: translateX(0px) rotate(0deg);\n  }\n}\n\n.rollIn {\n  -webkit-animation-name: rollIn;\n  animation-name: rollIn;\n}\n\n/* originally authored by Nick Pettit - https://github.com/nickpettit/glide */\n\n@-webkit-keyframes rollOut {\n  0% {\n    opacity: 1;\n    -webkit-transform: translateX(0px) rotate(0deg);\n    transform: translateX(0px) rotate(0deg);\n  }\n\n  100% {\n    opacity: 0;\n    -webkit-transform: translateX(100%) rotate(120deg);\n    transform: translateX(100%) rotate(120deg);\n  }\n}\n\n@keyframes rollOut {\n  0% {\n    opacity: 1;\n    -webkit-transform: translateX(0px) rotate(0deg);\n    -ms-transform: translateX(0px) rotate(0deg);\n    transform: translateX(0px) rotate(0deg);\n  }\n\n  100% {\n    opacity: 0;\n    -webkit-transform: translateX(100%) rotate(120deg);\n    -ms-transform: translateX(100%) rotate(120deg);\n    transform: translateX(100%) rotate(120deg);\n  }\n}\n\n.rollOut {\n  -webkit-animation-name: rollOut;\n  animation-name: rollOut;\n}"
  },
  {
    "path": "content/css/bootstrap/.gitkeep",
    "content": ""
  },
  {
    "path": "content/css/bootstrap/bootstrap.css",
    "content": "/*!\n * Bootstrap v3.0.0\n *\n * Copyright 2013 Twitter, Inc\n * Licensed under the Apache License v2.0\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Designed and built with all the love in the world by @mdo and @fat.\n */\n/*! normalize.css v2.1.0 | MIT License | git.io/normalize */\narticle,\naside,\ndetails,\nfigcaption,\nfigure,\nfooter,\nheader,\nhgroup,\nmain,\nnav,\nsection,\nsummary {\n  display: block; }\n\naudio,\ncanvas,\nvideo {\n  display: inline-block; }\n\naudio:not([controls]) {\n  display: none;\n  height: 0; }\n\n[hidden] {\n  display: none; }\n\nhtml {\n  font-family: sans-serif;\n  -webkit-text-size-adjust: 100%;\n  -ms-text-size-adjust: 100%; }\n\nbody {\n  margin: 0; }\n\na:focus {\n  outline: thin dotted; }\n\na:active,\na:hover {\n  outline: 0; }\n\nh1 {\n  font-size: 2em;\n  margin: 0.67em 0; }\n\nabbr[title] {\n  border-bottom: 1px dotted; }\n\nb,\nstrong {\n  font-weight: bold; }\n\ndfn {\n  font-style: italic; }\n\nhr {\n  box-sizing: content-box;\n  height: 0; }\n\nmark {\n  background: #ff0;\n  color: #000; }\n\ncode,\nkbd,\npre,\nsamp {\n  font-family: monospace, serif;\n  font-size: 1em; }\n\npre {\n  white-space: pre-wrap; }\n\nq {\n  quotes: \"\\201C\" \"\\201D\" \"\\2018\" \"\\2019\"; }\n\nsmall {\n  font-size: 80%; }\n\nsub,\nsup {\n  font-size: 75%;\n  line-height: 0;\n  position: relative;\n  vertical-align: baseline; }\n\nsup {\n  top: -0.5em; }\n\nsub {\n  bottom: -0.25em; }\n\nimg {\n  border: 0; }\n\nsvg:not(:root) {\n  overflow: hidden; }\n\nfigure {\n  margin: 0; }\n\nfieldset {\n  border: 1px solid #c0c0c0;\n  margin: 0 2px;\n  padding: 0.35em 0.625em 0.75em; }\n\nlegend {\n  border: 0;\n  padding: 0; }\n\nbutton,\ninput,\nselect,\ntextarea {\n  font-family: inherit;\n  font-size: 100%;\n  margin: 0; }\n\nbutton,\ninput {\n  line-height: normal; }\n\nbutton,\nselect {\n  text-transform: none; }\n\nbutton,\nhtml input[type=\"button\"],\ninput[type=\"reset\"],\ninput[type=\"submit\"] {\n  -webkit-appearance: button;\n  cursor: pointer; }\n\nbutton[disabled],\nhtml input[disabled] {\n  cursor: default; }\n\ninput[type=\"checkbox\"],\ninput[type=\"radio\"] {\n  box-sizing: border-box;\n  padding: 0; }\n\ninput[type=\"search\"] {\n  -webkit-appearance: textfield;\n  box-sizing: content-box; }\n\ninput[type=\"search\"]::-webkit-search-cancel-button,\ninput[type=\"search\"]::-webkit-search-decoration {\n  -webkit-appearance: none; }\n\nbutton::-moz-focus-inner,\ninput::-moz-focus-inner {\n  border: 0;\n  padding: 0; }\n\ntextarea {\n  overflow: auto;\n  vertical-align: top; }\n\ntable {\n  border-collapse: collapse;\n  border-spacing: 0; }\n\n@media print {\n  * {\n    text-shadow: none !important;\n    color: #000 !important;\n    background: transparent !important;\n    box-shadow: none !important; }\n  a,\n  a:visited {\n    text-decoration: underline; }\n  a[href]:after {\n    content: \" (\" attr(href) \")\"; }\n  abbr[title]:after {\n    content: \" (\" attr(title) \")\"; }\n  .ir a:after,\n  a[href^=\"javascript:\"]:after,\n  a[href^=\"#\"]:after {\n    content: \"\"; }\n  pre,\n  blockquote {\n    border: 1px solid #999;\n    page-break-inside: avoid; }\n  thead {\n    display: table-header-group; }\n  tr,\n  img {\n    page-break-inside: avoid; }\n  img {\n    max-width: 100% !important; }\n  @page {\n    margin: 2cm .5cm; }\n  p,\n  h2,\n  h3 {\n    orphans: 3;\n    widows: 3; }\n  h2,\n  h3 {\n    page-break-after: avoid; }\n  .navbar {\n    display: none; }\n  .table td,\n  .table th {\n    background-color: #fff !important; }\n  .btn > .caret,\n  .dropup > .btn > .caret {\n    border-top-color: #000 !important; }\n  .label {\n    border: 1px solid #000; }\n  .table {\n    border-collapse: collapse !important; }\n  .table-bordered th,\n  .table-bordered td {\n    border: 1px solid #ddd !important; } }\n\n*,\n*:before,\n*:after {\n  box-sizing: border-box; }\n\nhtml {\n  font-size: 62.5%;\n  -webkit-tap-highlight-color: rgba(0, 0, 0, 0); }\n\nbody {\n  font-family: \"Helvetica Neue\", Helvetica, Arial, \"Lucida Grande\", sans-serif;\n  font-size: 15px;\n  line-height: 1.42857;\n  color: #333;\n  background-color: #fff; }\n\ninput,\nbutton,\nselect,\ntextarea {\n  font-family: inherit;\n  font-size: inherit;\n  line-height: inherit; }\n\nbutton,\ninput,\nselect[multiple],\ntextarea {\n  background-image: none; }\n\na {\n  color: #4F8EF7;\n  text-decoration: none; }\n  a:hover, a:focus {\n    color: #0b60ef;\n    text-decoration: underline; }\n  a:focus {\n    outline: none; }\n\nimg {\n  vertical-align: middle; }\n\n.img-responsive {\n  display: block;\n  max-width: 100%;\n  height: auto; }\n\n.img-rounded {\n  border-radius: 6px; }\n\n.img-thumbnail, .thumbnail {\n  padding: 4px;\n  line-height: 1.42857;\n  background-color: #fff;\n  border: 1px solid #ddd;\n  border-radius: 2px;\n  transition: all 0.2s ease-in-out;\n  display: inline-block;\n  max-width: 100%;\n  height: auto; }\n\n.img-circle {\n  border-radius: 50%; }\n\nhr {\n  margin-top: 21px;\n  margin-bottom: 21px;\n  border: 0;\n  border-top: 1px solid #eeeeee; }\n\n.sr-only {\n  position: absolute;\n  width: 1px;\n  height: 1px;\n  margin: -1px;\n  padding: 0;\n  overflow: hidden;\n  clip: rect(0 0 0 0);\n  border: 0; }\n\np {\n  margin: 0 0 10.5px; }\n\n.lead {\n  margin-bottom: 21px;\n  font-size: 17.25px;\n  font-weight: 200;\n  line-height: 1.4; }\n  @media (min-width: 768px) {\n    .lead {\n      font-size: 22.5px; } }\n\nsmall {\n  font-size: 85%; }\n\ncite {\n  font-style: normal; }\n\n.text-muted {\n  color: #999999; }\n\n.text-primary {\n  color: #4F8EF7; }\n\n.text-warning {\n  color: #c09853; }\n\n.text-danger {\n  color: #b94a48; }\n\n.text-success {\n  color: #468847; }\n\n.text-info {\n  color: #3a87ad; }\n\n.text-left {\n  text-align: left; }\n\n.text-right {\n  text-align: right; }\n\n.text-center {\n  text-align: center; }\n\nh1, h2, h3, h4, h5, h6,\n.h1, .h2, .h3, .h4, .h5, .h6 {\n  font-family: \"Helvetica Neue\", Helvetica, Arial, \"Lucida Grande\", sans-serif;\n  font-weight: 500;\n  line-height: 1.1; }\n  h1 small, h2 small, h3 small, h4 small, h5 small, h6 small,\n  .h1 small, .h2 small, .h3 small, .h4 small, .h5 small, .h6 small {\n    font-weight: normal;\n    line-height: 1;\n    color: #999999; }\n\nh1,\nh2,\nh3 {\n  margin-top: 21px;\n  margin-bottom: 10.5px; }\n\nh4,\nh5,\nh6 {\n  margin-top: 10.5px;\n  margin-bottom: 10.5px; }\n\nh1, .h1 {\n  font-size: 32px; }\n\nh2, .h2 {\n  font-size: 26px; }\n\nh3, .h3 {\n  font-size: 22px; }\n\nh4, .h4 {\n  font-size: 19px; }\n\nh5, .h5 {\n  font-size: 17px; }\n\nh6, .h6 {\n  font-size: 15px; }\n\nh1 small, .h1 small {\n  font-size: 19px; }\n\nh2 small, .h2 small {\n  font-size: 17px; }\n\nh3 small, .h3 small,\nh4 small, .h4 small {\n  font-size: 15px; }\n\n.page-header {\n  padding-bottom: 9.5px;\n  margin: 42px 0 21px;\n  border-bottom: 1px solid #eeeeee; }\n\nul,\nol {\n  margin-top: 0;\n  margin-bottom: 10.5px; }\n  ul ul,\n  ul ol,\n  ol ul,\n  ol ol {\n    margin-bottom: 0; }\n\n.list-unstyled, .list-inline {\n  padding-left: 0;\n  list-style: none; }\n\n.list-inline > li {\n  display: inline-block;\n  padding-left: 5px;\n  padding-right: 5px; }\n\ndl {\n  margin-bottom: 21px; }\n\ndt,\ndd {\n  line-height: 1.42857; }\n\ndt {\n  font-weight: bold; }\n\ndd {\n  margin-left: 0; }\n\n@media (min-width: 768px) {\n  .dl-horizontal dt {\n    float: left;\n    width: 160px;\n    clear: left;\n    text-align: right;\n    overflow: hidden;\n    text-overflow: ellipsis;\n    white-space: nowrap; }\n  .dl-horizontal dd {\n    margin-left: 180px; }\n    .dl-horizontal dd:before, .dl-horizontal dd:after {\n      content: \" \";\n      /* 1 */\n      display: table;\n      /* 2 */ }\n    .dl-horizontal dd:after {\n      clear: both; } }\n\nabbr[title],\nabbr[data-original-title] {\n  cursor: help;\n  border-bottom: 1px dotted #999999; }\n\nabbr.initialism {\n  font-size: 90%;\n  text-transform: uppercase; }\n\nblockquote {\n  padding: 10.5px 21px;\n  margin: 0 0 21px;\n  border-left: 5px solid #eeeeee; }\n  blockquote p {\n    font-size: 18.75px;\n    font-weight: 300;\n    line-height: 1.25; }\n  blockquote p:last-child {\n    margin-bottom: 0; }\n  blockquote small {\n    display: block;\n    line-height: 1.42857;\n    color: #999999; }\n    blockquote small:before {\n      content: '\\2014 \\00A0'; }\n  blockquote.pull-right {\n    padding-right: 15px;\n    padding-left: 0;\n    border-right: 5px solid #eeeeee;\n    border-left: 0; }\n    blockquote.pull-right p,\n    blockquote.pull-right small {\n      text-align: right; }\n    blockquote.pull-right small:before {\n      content: ''; }\n    blockquote.pull-right small:after {\n      content: '\\00A0 \\2014'; }\n\nq:before,\nq:after,\nblockquote:before,\nblockquote:after {\n  content: \"\"; }\n\naddress {\n  display: block;\n  margin-bottom: 21px;\n  font-style: normal;\n  line-height: 1.42857; }\n\ncode,\npre {\n  font-family: Monaco, Menlo, Consolas, \"Courier New\", monospace; }\n\ncode {\n  margin-left: 3px;\n  margin-right: 3px;\n  padding: 2px 4px;\n  font-size: 85%;\n  color: #4D8CF4;\n  background-color: whitesmoke;\n  white-space: nowrap;\n  border-radius: 2px; }\n\npre {\n  display: block;\n  padding: 10px;\n  margin: 0 0 10.5px;\n  font-size: 14px;\n  line-height: 1.42857;\n  word-break: break-all;\n  word-wrap: break-word;\n  color: #333333;\n  background-color: transparent;\n  border: 1px solid #eee;\n  border-radius: 2px; }\n  pre.prettyprint {\n    margin-bottom: 21px; }\n  pre code {\n    padding: 0;\n    font-size: inherit;\n    color: inherit;\n    white-space: pre-wrap;\n    background-color: transparent;\n    border: 0; }\n\n.pre-scrollable {\n  max-height: 340px;\n  overflow-y: scroll; }\n\n.container {\n  margin-right: auto;\n  margin-left: auto;\n  padding-left: 15px;\n  padding-right: 15px; }\n  .container:before, .container:after {\n    content: \" \";\n    /* 1 */\n    display: table;\n    /* 2 */ }\n  .container:after {\n    clear: both; }\n\n.row {\n  margin-left: -15px;\n  margin-right: -15px; }\n  .row:before, .row:after {\n    content: \" \";\n    /* 1 */\n    display: table;\n    /* 2 */ }\n  .row:after {\n    clear: both; }\n\n.col-xs-1,\n.col-xs-2,\n.col-xs-3,\n.col-xs-4,\n.col-xs-5,\n.col-xs-6,\n.col-xs-7,\n.col-xs-8,\n.col-xs-9,\n.col-xs-10,\n.col-xs-11,\n.col-xs-12,\n.col-sm-1,\n.col-sm-2,\n.col-sm-3,\n.col-sm-4,\n.col-sm-5,\n.col-sm-6,\n.col-sm-7,\n.col-sm-8,\n.col-sm-9,\n.col-sm-10,\n.col-sm-11,\n.col-sm-12,\n.col-md-1,\n.col-md-2,\n.col-md-3,\n.col-md-4,\n.col-md-5,\n.col-md-6,\n.col-md-7,\n.col-md-8,\n.col-md-9,\n.col-md-10,\n.col-md-11,\n.col-md-12,\n.col-lg-1,\n.col-lg-2,\n.col-lg-3,\n.col-lg-4,\n.col-lg-5,\n.col-lg-6,\n.col-lg-7,\n.col-lg-8,\n.col-lg-9,\n.col-lg-10,\n.col-lg-11,\n.col-lg-12 {\n  position: relative;\n  min-height: 1px;\n  padding-left: 15px;\n  padding-right: 15px; }\n\n.col-xs-1,\n.col-xs-2,\n.col-xs-3,\n.col-xs-4,\n.col-xs-5,\n.col-xs-6,\n.col-xs-7,\n.col-xs-8,\n.col-xs-9,\n.col-xs-10,\n.col-xs-11 {\n  float: left; }\n\n.col-xs-1 {\n  width: 8.33333%; }\n\n.col-xs-2 {\n  width: 16.66667%; }\n\n.col-xs-3 {\n  width: 25%; }\n\n.col-xs-4 {\n  width: 33.33333%; }\n\n.col-xs-5 {\n  width: 41.66667%; }\n\n.col-xs-6 {\n  width: 50%; }\n\n.col-xs-7 {\n  width: 58.33333%; }\n\n.col-xs-8 {\n  width: 66.66667%; }\n\n.col-xs-9 {\n  width: 75%; }\n\n.col-xs-10 {\n  width: 83.33333%; }\n\n.col-xs-11 {\n  width: 91.66667%; }\n\n.col-xs-12 {\n  width: 100%; }\n\n@media (min-width: 768px) {\n  .container {\n    max-width: 750px; }\n  .col-sm-1,\n  .col-sm-2,\n  .col-sm-3,\n  .col-sm-4,\n  .col-sm-5,\n  .col-sm-6,\n  .col-sm-7,\n  .col-sm-8,\n  .col-sm-9,\n  .col-sm-10,\n  .col-sm-11 {\n    float: left; }\n  .col-sm-1 {\n    width: 8.33333%; }\n  .col-sm-2 {\n    width: 16.66667%; }\n  .col-sm-3 {\n    width: 25%; }\n  .col-sm-4 {\n    width: 33.33333%; }\n  .col-sm-5 {\n    width: 41.66667%; }\n  .col-sm-6 {\n    width: 50%; }\n  .col-sm-7 {\n    width: 58.33333%; }\n  .col-sm-8 {\n    width: 66.66667%; }\n  .col-sm-9 {\n    width: 75%; }\n  .col-sm-10 {\n    width: 83.33333%; }\n  .col-sm-11 {\n    width: 91.66667%; }\n  .col-sm-12 {\n    width: 100%; }\n  .col-sm-push-1 {\n    left: 8.33333%; }\n  .col-sm-push-2 {\n    left: 16.66667%; }\n  .col-sm-push-3 {\n    left: 25%; }\n  .col-sm-push-4 {\n    left: 33.33333%; }\n  .col-sm-push-5 {\n    left: 41.66667%; }\n  .col-sm-push-6 {\n    left: 50%; }\n  .col-sm-push-7 {\n    left: 58.33333%; }\n  .col-sm-push-8 {\n    left: 66.66667%; }\n  .col-sm-push-9 {\n    left: 75%; }\n  .col-sm-push-10 {\n    left: 83.33333%; }\n  .col-sm-push-11 {\n    left: 91.66667%; }\n  .col-sm-pull-1 {\n    right: 8.33333%; }\n  .col-sm-pull-2 {\n    right: 16.66667%; }\n  .col-sm-pull-3 {\n    right: 25%; }\n  .col-sm-pull-4 {\n    right: 33.33333%; }\n  .col-sm-pull-5 {\n    right: 41.66667%; }\n  .col-sm-pull-6 {\n    right: 50%; }\n  .col-sm-pull-7 {\n    right: 58.33333%; }\n  .col-sm-pull-8 {\n    right: 66.66667%; }\n  .col-sm-pull-9 {\n    right: 75%; }\n  .col-sm-pull-10 {\n    right: 83.33333%; }\n  .col-sm-pull-11 {\n    right: 91.66667%; }\n  .col-sm-offset-1 {\n    margin-left: 8.33333%; }\n  .col-sm-offset-2 {\n    margin-left: 16.66667%; }\n  .col-sm-offset-3 {\n    margin-left: 25%; }\n  .col-sm-offset-4 {\n    margin-left: 33.33333%; }\n  .col-sm-offset-5 {\n    margin-left: 41.66667%; }\n  .col-sm-offset-6 {\n    margin-left: 50%; }\n  .col-sm-offset-7 {\n    margin-left: 58.33333%; }\n  .col-sm-offset-8 {\n    margin-left: 66.66667%; }\n  .col-sm-offset-9 {\n    margin-left: 75%; }\n  .col-sm-offset-10 {\n    margin-left: 83.33333%; }\n  .col-sm-offset-11 {\n    margin-left: 91.66667%; } }\n\n@media (min-width: 992px) {\n  .container {\n    max-width: 970px; }\n  .col-md-1,\n  .col-md-2,\n  .col-md-3,\n  .col-md-4,\n  .col-md-5,\n  .col-md-6,\n  .col-md-7,\n  .col-md-8,\n  .col-md-9,\n  .col-md-10,\n  .col-md-11 {\n    float: left; }\n  .col-md-1 {\n    width: 8.33333%; }\n  .col-md-2 {\n    width: 16.66667%; }\n  .col-md-3 {\n    width: 25%; }\n  .col-md-4 {\n    width: 33.33333%; }\n  .col-md-5 {\n    width: 41.66667%; }\n  .col-md-6 {\n    width: 50%; }\n  .col-md-7 {\n    width: 58.33333%; }\n  .col-md-8 {\n    width: 66.66667%; }\n  .col-md-9 {\n    width: 75%; }\n  .col-md-10 {\n    width: 83.33333%; }\n  .col-md-11 {\n    width: 91.66667%; }\n  .col-md-12 {\n    width: 100%; }\n  .col-md-push-0 {\n    left: auto; }\n  .col-md-push-1 {\n    left: 8.33333%; }\n  .col-md-push-2 {\n    left: 16.66667%; }\n  .col-md-push-3 {\n    left: 25%; }\n  .col-md-push-4 {\n    left: 33.33333%; }\n  .col-md-push-5 {\n    left: 41.66667%; }\n  .col-md-push-6 {\n    left: 50%; }\n  .col-md-push-7 {\n    left: 58.33333%; }\n  .col-md-push-8 {\n    left: 66.66667%; }\n  .col-md-push-9 {\n    left: 75%; }\n  .col-md-push-10 {\n    left: 83.33333%; }\n  .col-md-push-11 {\n    left: 91.66667%; }\n  .col-md-pull-0 {\n    right: auto; }\n  .col-md-pull-1 {\n    right: 8.33333%; }\n  .col-md-pull-2 {\n    right: 16.66667%; }\n  .col-md-pull-3 {\n    right: 25%; }\n  .col-md-pull-4 {\n    right: 33.33333%; }\n  .col-md-pull-5 {\n    right: 41.66667%; }\n  .col-md-pull-6 {\n    right: 50%; }\n  .col-md-pull-7 {\n    right: 58.33333%; }\n  .col-md-pull-8 {\n    right: 66.66667%; }\n  .col-md-pull-9 {\n    right: 75%; }\n  .col-md-pull-10 {\n    right: 83.33333%; }\n  .col-md-pull-11 {\n    right: 91.66667%; }\n  .col-md-offset-0 {\n    margin-left: 0; }\n  .col-md-offset-1 {\n    margin-left: 8.33333%; }\n  .col-md-offset-2 {\n    margin-left: 16.66667%; }\n  .col-md-offset-3 {\n    margin-left: 25%; }\n  .col-md-offset-4 {\n    margin-left: 33.33333%; }\n  .col-md-offset-5 {\n    margin-left: 41.66667%; }\n  .col-md-offset-6 {\n    margin-left: 50%; }\n  .col-md-offset-7 {\n    margin-left: 58.33333%; }\n  .col-md-offset-8 {\n    margin-left: 66.66667%; }\n  .col-md-offset-9 {\n    margin-left: 75%; }\n  .col-md-offset-10 {\n    margin-left: 83.33333%; }\n  .col-md-offset-11 {\n    margin-left: 91.66667%; } }\n\n@media (min-width: 1200px) {\n  .container {\n    max-width: 1170px; }\n  .col-lg-1,\n  .col-lg-2,\n  .col-lg-3,\n  .col-lg-4,\n  .col-lg-5,\n  .col-lg-6,\n  .col-lg-7,\n  .col-lg-8,\n  .col-lg-9,\n  .col-lg-10,\n  .col-lg-11 {\n    float: left; }\n  .col-lg-1 {\n    width: 8.33333%; }\n  .col-lg-2 {\n    width: 16.66667%; }\n  .col-lg-3 {\n    width: 25%; }\n  .col-lg-4 {\n    width: 33.33333%; }\n  .col-lg-5 {\n    width: 41.66667%; }\n  .col-lg-6 {\n    width: 50%; }\n  .col-lg-7 {\n    width: 58.33333%; }\n  .col-lg-8 {\n    width: 66.66667%; }\n  .col-lg-9 {\n    width: 75%; }\n  .col-lg-10 {\n    width: 83.33333%; }\n  .col-lg-11 {\n    width: 91.66667%; }\n  .col-lg-12 {\n    width: 100%; }\n  .col-lg-push-0 {\n    left: auto; }\n  .col-lg-push-1 {\n    left: 8.33333%; }\n  .col-lg-push-2 {\n    left: 16.66667%; }\n  .col-lg-push-3 {\n    left: 25%; }\n  .col-lg-push-4 {\n    left: 33.33333%; }\n  .col-lg-push-5 {\n    left: 41.66667%; }\n  .col-lg-push-6 {\n    left: 50%; }\n  .col-lg-push-7 {\n    left: 58.33333%; }\n  .col-lg-push-8 {\n    left: 66.66667%; }\n  .col-lg-push-9 {\n    left: 75%; }\n  .col-lg-push-10 {\n    left: 83.33333%; }\n  .col-lg-push-11 {\n    left: 91.66667%; }\n  .col-lg-pull-0 {\n    right: auto; }\n  .col-lg-pull-1 {\n    right: 8.33333%; }\n  .col-lg-pull-2 {\n    right: 16.66667%; }\n  .col-lg-pull-3 {\n    right: 25%; }\n  .col-lg-pull-4 {\n    right: 33.33333%; }\n  .col-lg-pull-5 {\n    right: 41.66667%; }\n  .col-lg-pull-6 {\n    right: 50%; }\n  .col-lg-pull-7 {\n    right: 58.33333%; }\n  .col-lg-pull-8 {\n    right: 66.66667%; }\n  .col-lg-pull-9 {\n    right: 75%; }\n  .col-lg-pull-10 {\n    right: 83.33333%; }\n  .col-lg-pull-11 {\n    right: 91.66667%; }\n  .col-lg-offset-0 {\n    margin-left: 0; }\n  .col-lg-offset-1 {\n    margin-left: 8.33333%; }\n  .col-lg-offset-2 {\n    margin-left: 16.66667%; }\n  .col-lg-offset-3 {\n    margin-left: 25%; }\n  .col-lg-offset-4 {\n    margin-left: 33.33333%; }\n  .col-lg-offset-5 {\n    margin-left: 41.66667%; }\n  .col-lg-offset-6 {\n    margin-left: 50%; }\n  .col-lg-offset-7 {\n    margin-left: 58.33333%; }\n  .col-lg-offset-8 {\n    margin-left: 66.66667%; }\n  .col-lg-offset-9 {\n    margin-left: 75%; }\n  .col-lg-offset-10 {\n    margin-left: 83.33333%; }\n  .col-lg-offset-11 {\n    margin-left: 91.66667%; } }\n\ntable {\n  max-width: 100%;\n  background-color: transparent; }\n\nth {\n  text-align: left; }\n\n.table {\n  width: 100%;\n  margin-bottom: 21px; }\n  .table thead > tr > th,\n  .table thead > tr > td,\n  .table tbody > tr > th,\n  .table tbody > tr > td,\n  .table tfoot > tr > th,\n  .table tfoot > tr > td {\n    padding: 8px;\n    line-height: 1.42857;\n    vertical-align: top;\n    border-top: 1px solid #ddd; }\n  .table thead > tr > th {\n    vertical-align: bottom;\n    border-bottom: 2px solid #ddd; }\n  .table caption + thead tr:first-child th, .table caption + thead tr:first-child td,\n  .table colgroup + thead tr:first-child th,\n  .table colgroup + thead tr:first-child td,\n  .table thead:first-child tr:first-child th,\n  .table thead:first-child tr:first-child td {\n    border-top: 0; }\n  .table tbody + tbody {\n    border-top: 2px solid #ddd; }\n  .table .table {\n    background-color: #fff; }\n\n.table-condensed thead > tr > th,\n.table-condensed thead > tr > td,\n.table-condensed tbody > tr > th,\n.table-condensed tbody > tr > td,\n.table-condensed tfoot > tr > th,\n.table-condensed tfoot > tr > td {\n  padding: 5px; }\n\n.table-bordered {\n  border: 1px solid #ddd; }\n  .table-bordered > thead > tr > th,\n  .table-bordered > thead > tr > td,\n  .table-bordered > tbody > tr > th,\n  .table-bordered > tbody > tr > td,\n  .table-bordered > tfoot > tr > th,\n  .table-bordered > tfoot > tr > td {\n    border: 1px solid #ddd; }\n  .table-bordered > thead > tr > th,\n  .table-bordered > thead > tr > td {\n    border-bottom-width: 2px; }\n\n.table-striped > tbody > tr:nth-child(odd) > td,\n.table-striped > tbody > tr:nth-child(odd) > th {\n  background-color: #f9f9f9; }\n\n.table-hover > tbody > tr:hover > td,\n.table-hover > tbody > tr:hover > th {\n  background-color: #f5f5f5; }\n\ntable col[class*=\"col-\"] {\n  float: none;\n  display: table-column; }\n\ntable td[class*=\"col-\"],\ntable th[class*=\"col-\"] {\n  float: none;\n  display: table-cell; }\n\n.table > thead > tr > td.active,\n.table > thead > tr > th.active,\n.table > thead > tr.active > td,\n.table > thead > tr.active > th,\n.table > tbody > tr > td.active,\n.table > tbody > tr > th.active,\n.table > tbody > tr.active > td,\n.table > tbody > tr.active > th,\n.table > tfoot > tr > td.active,\n.table > tfoot > tr > th.active,\n.table > tfoot > tr.active > td,\n.table > tfoot > tr.active > th {\n  background-color: #f5f5f5; }\n\n.table > thead > tr > td.success,\n.table > thead > tr > th.success,\n.table > thead > tr.success > td,\n.table > thead > tr.success > th,\n.table > tbody > tr > td.success,\n.table > tbody > tr > th.success,\n.table > tbody > tr.success > td,\n.table > tbody > tr.success > th,\n.table > tfoot > tr > td.success,\n.table > tfoot > tr > th.success,\n.table > tfoot > tr.success > td,\n.table > tfoot > tr.success > th {\n  background-color: #dff0d8;\n  border-color: #d6e9c6; }\n\n.table-hover > tbody > tr > td.success:hover,\n.table-hover > tbody > tr > th.success:hover,\n.table-hover > tbody > tr.success:hover > td {\n  background-color: #d0e9c6;\n  border-color: #c9e2b3; }\n\n.table > thead > tr > td.danger,\n.table > thead > tr > th.danger,\n.table > thead > tr.danger > td,\n.table > thead > tr.danger > th,\n.table > tbody > tr > td.danger,\n.table > tbody > tr > th.danger,\n.table > tbody > tr.danger > td,\n.table > tbody > tr.danger > th,\n.table > tfoot > tr > td.danger,\n.table > tfoot > tr > th.danger,\n.table > tfoot > tr.danger > td,\n.table > tfoot > tr.danger > th {\n  background-color: #f2dede;\n  border-color: #eed3d7; }\n\n.table-hover > tbody > tr > td.danger:hover,\n.table-hover > tbody > tr > th.danger:hover,\n.table-hover > tbody > tr.danger:hover > td {\n  background-color: #ebcccc;\n  border-color: #e6c1c7; }\n\n.table > thead > tr > td.warning,\n.table > thead > tr > th.warning,\n.table > thead > tr.warning > td,\n.table > thead > tr.warning > th,\n.table > tbody > tr > td.warning,\n.table > tbody > tr > th.warning,\n.table > tbody > tr.warning > td,\n.table > tbody > tr.warning > th,\n.table > tfoot > tr > td.warning,\n.table > tfoot > tr > th.warning,\n.table > tfoot > tr.warning > td,\n.table > tfoot > tr.warning > th {\n  background-color: #fcf8e3;\n  border-color: #fbeed5; }\n\n.table-hover > tbody > tr > td.warning:hover,\n.table-hover > tbody > tr > th.warning:hover,\n.table-hover > tbody > tr.warning:hover > td {\n  background-color: #faf2cc;\n  border-color: #f8e5be; }\n\n@media (max-width: 768px) {\n  .table-responsive {\n    width: 100%;\n    margin-bottom: 15px;\n    overflow-y: hidden;\n    overflow-x: scroll;\n    border: 1px solid #ddd; }\n    .table-responsive > .table {\n      margin-bottom: 0;\n      background-color: #fff; }\n      .table-responsive > .table > thead > tr > th,\n      .table-responsive > .table > thead > tr > td,\n      .table-responsive > .table > tbody > tr > th,\n      .table-responsive > .table > tbody > tr > td,\n      .table-responsive > .table > tfoot > tr > th,\n      .table-responsive > .table > tfoot > tr > td {\n        white-space: nowrap; }\n    .table-responsive > .table-bordered {\n      border: 0; }\n      .table-responsive > .table-bordered > thead > tr > th:first-child,\n      .table-responsive > .table-bordered > thead > tr > td:first-child,\n      .table-responsive > .table-bordered > tbody > tr > th:first-child,\n      .table-responsive > .table-bordered > tbody > tr > td:first-child,\n      .table-responsive > .table-bordered > tfoot > tr > th:first-child,\n      .table-responsive > .table-bordered > tfoot > tr > td:first-child {\n        border-left: 0; }\n      .table-responsive > .table-bordered > thead > tr > th:last-child,\n      .table-responsive > .table-bordered > thead > tr > td:last-child,\n      .table-responsive > .table-bordered > tbody > tr > th:last-child,\n      .table-responsive > .table-bordered > tbody > tr > td:last-child,\n      .table-responsive > .table-bordered > tfoot > tr > th:last-child,\n      .table-responsive > .table-bordered > tfoot > tr > td:last-child {\n        border-right: 0; }\n      .table-responsive > .table-bordered > thead > tr:last-child > th,\n      .table-responsive > .table-bordered > thead > tr:last-child > td,\n      .table-responsive > .table-bordered > tbody > tr:last-child > th,\n      .table-responsive > .table-bordered > tbody > tr:last-child > td,\n      .table-responsive > .table-bordered > tfoot > tr:last-child > th,\n      .table-responsive > .table-bordered > tfoot > tr:last-child > td {\n        border-bottom: 0; } }\n\nfieldset {\n  padding: 0;\n  margin: 0;\n  border: 0; }\n\nlegend {\n  display: block;\n  width: 100%;\n  padding: 0;\n  margin-bottom: 21px;\n  font-size: 22.5px;\n  line-height: inherit;\n  color: #333333;\n  border: 0;\n  border-bottom: 1px solid #e5e5e5; }\n\nlabel {\n  display: inline-block;\n  margin-bottom: 5px;\n  font-weight: bold; }\n\ninput[type=\"search\"] {\n  box-sizing: border-box; }\n\ninput[type=\"radio\"],\ninput[type=\"checkbox\"] {\n  margin: 4px 0 0;\n  margin-top: 1px \\9;\n  /* IE8-9 */\n  line-height: normal; }\n\ninput[type=\"file\"] {\n  display: block; }\n\nselect[multiple],\nselect[size] {\n  height: auto; }\n\nselect optgroup {\n  font-size: inherit;\n  font-style: inherit;\n  font-family: inherit; }\n\ninput[type=\"file\"]:focus,\ninput[type=\"radio\"]:focus,\ninput[type=\"checkbox\"]:focus {\n  outline: none; }\n\ninput[type=\"number\"]::-webkit-outer-spin-button, input[type=\"number\"]::-webkit-inner-spin-button {\n  height: auto; }\n\n.form-control:-moz-placeholder {\n  color: #999999; }\n\n.form-control::-moz-placeholder {\n  color: #999999; }\n\n.form-control:-ms-input-placeholder {\n  color: #999999; }\n\n.form-control::-webkit-input-placeholder {\n  color: #999999; }\n\n.form-control {\n  display: block;\n  width: 100%;\n  height: 35px;\n  padding: 6px 12px;\n  font-size: 15px;\n  line-height: 1.42857;\n  color: #555555;\n  vertical-align: middle;\n  background-color: #fff;\n  border: 1px solid #ccc;\n  border-radius: 2px;\n  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n  transition: border-color ease-in-out 0.15s, box-shadow ease-in-out 0.15s; }\n  .form-control:focus {\n    border-color: #66afe9;\n    outline: 0;\n    box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(102, 175, 233, 0.6); }\n  .form-control[disabled], .form-control[readonly],\n  fieldset[disabled] .form-control {\n    cursor: not-allowed;\n    background-color: #eeeeee; }\n\ntextarea.form-control {\n  height: auto; }\n\n.form-group {\n  margin-bottom: 15px; }\n\n.radio,\n.checkbox {\n  display: block;\n  min-height: 21px;\n  margin-top: 10px;\n  margin-bottom: 10px;\n  padding-left: 20px;\n  vertical-align: middle; }\n  .radio label,\n  .checkbox label {\n    display: inline;\n    margin-bottom: 0;\n    font-weight: normal;\n    cursor: pointer; }\n\n.radio input[type=\"radio\"],\n.radio-inline input[type=\"radio\"],\n.checkbox input[type=\"checkbox\"],\n.checkbox-inline input[type=\"checkbox\"] {\n  float: left;\n  margin-left: -20px; }\n\n.radio + .radio,\n.checkbox + .checkbox {\n  margin-top: -5px; }\n\n.radio-inline,\n.checkbox-inline {\n  display: inline-block;\n  padding-left: 20px;\n  margin-bottom: 0;\n  vertical-align: middle;\n  font-weight: normal;\n  cursor: pointer; }\n\n.radio-inline + .radio-inline,\n.checkbox-inline + .checkbox-inline {\n  margin-top: 0;\n  margin-left: 10px; }\n\ninput[type=\"radio\"][disabled],\nfieldset[disabled] input[type=\"radio\"],\ninput[type=\"checkbox\"][disabled],\nfieldset[disabled]\ninput[type=\"checkbox\"],\n.radio[disabled],\nfieldset[disabled]\n.radio,\n.radio-inline[disabled],\nfieldset[disabled]\n.radio-inline,\n.checkbox[disabled],\nfieldset[disabled]\n.checkbox,\n.checkbox-inline[disabled],\nfieldset[disabled]\n.checkbox-inline {\n  cursor: not-allowed; }\n\n.input-sm, .input-group-sm > .form-control,\n.input-group-sm > .input-group-addon,\n.input-group-sm > .input-group-btn > .btn {\n  height: 31px;\n  padding: 5px 10px;\n  font-size: 13px;\n  line-height: 1.5;\n  border-radius: 3px; }\n\nselect.input-sm, .input-group-sm > select.form-control,\n.input-group-sm > select.input-group-addon,\n.input-group-sm > .input-group-btn > select.btn {\n  height: 31px;\n  line-height: 31px; }\n\ntextarea.input-sm, .input-group-sm > textarea.form-control,\n.input-group-sm > textarea.input-group-addon,\n.input-group-sm > .input-group-btn > textarea.btn {\n  height: auto; }\n\n.input-lg, .input-group-lg > .form-control,\n.input-group-lg > .input-group-addon,\n.input-group-lg > .input-group-btn > .btn {\n  height: 47px;\n  padding: 10px 16px;\n  font-size: 19px;\n  line-height: 1.33;\n  border-radius: 6px; }\n\nselect.input-lg, .input-group-lg > select.form-control,\n.input-group-lg > select.input-group-addon,\n.input-group-lg > .input-group-btn > select.btn {\n  height: 47px;\n  line-height: 47px; }\n\ntextarea.input-lg, .input-group-lg > textarea.form-control,\n.input-group-lg > textarea.input-group-addon,\n.input-group-lg > .input-group-btn > textarea.btn {\n  height: auto; }\n\n.has-warning .help-block,\n.has-warning .control-label {\n  color: #c09853; }\n\n.has-warning .form-control {\n  border-color: #c09853;\n  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); }\n  .has-warning .form-control:focus {\n    border-color: #a47e3c;\n    box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #dbc59e; }\n\n.has-warning .input-group-addon {\n  color: #c09853;\n  border-color: #c09853;\n  background-color: #fcf8e3; }\n\n.has-error .help-block,\n.has-error .control-label {\n  color: #b94a48; }\n\n.has-error .form-control {\n  border-color: #b94a48;\n  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); }\n  .has-error .form-control:focus {\n    border-color: #953b39;\n    box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #d59392; }\n\n.has-error .input-group-addon {\n  color: #b94a48;\n  border-color: #b94a48;\n  background-color: #f2dede; }\n\n.has-success .help-block,\n.has-success .control-label {\n  color: #468847; }\n\n.has-success .form-control {\n  border-color: #468847;\n  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); }\n  .has-success .form-control:focus {\n    border-color: #356635;\n    box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #7aba7b; }\n\n.has-success .input-group-addon {\n  color: #468847;\n  border-color: #468847;\n  background-color: #dff0d8; }\n\n.form-control-static {\n  margin-bottom: 0;\n  padding-top: 7px; }\n\n.help-block {\n  display: block;\n  margin-top: 5px;\n  margin-bottom: 10px;\n  color: #737373; }\n\n@media (min-width: 768px) {\n  .form-inline .form-group, .navbar-form .form-group {\n    display: inline-block;\n    margin-bottom: 0;\n    vertical-align: middle; }\n  .form-inline .form-control, .navbar-form .form-control {\n    display: inline-block; }\n  .form-inline .radio, .navbar-form .radio,\n  .form-inline .checkbox,\n  .navbar-form .checkbox {\n    display: inline-block;\n    margin-top: 0;\n    margin-bottom: 0;\n    padding-left: 0; }\n  .form-inline .radio input[type=\"radio\"], .navbar-form .radio input[type=\"radio\"],\n  .form-inline .checkbox input[type=\"checkbox\"],\n  .navbar-form .checkbox input[type=\"checkbox\"] {\n    float: none;\n    margin-left: 0; } }\n\n.form-horizontal .control-label,\n.form-horizontal .radio,\n.form-horizontal .checkbox,\n.form-horizontal .radio-inline,\n.form-horizontal .checkbox-inline {\n  margin-top: 0;\n  margin-bottom: 0;\n  padding-top: 7px; }\n\n.form-horizontal .form-group {\n  margin-left: -15px;\n  margin-right: -15px; }\n  .form-horizontal .form-group:before, .form-horizontal .form-group:after {\n    content: \" \";\n    /* 1 */\n    display: table;\n    /* 2 */ }\n  .form-horizontal .form-group:after {\n    clear: both; }\n\n@media (min-width: 768px) {\n  .form-horizontal .control-label {\n    text-align: right; } }\n\n.btn {\n  display: inline-block;\n  padding: 6px 12px;\n  margin-bottom: 0;\n  font-family: \"AvenirNextLTPro-Regular\", \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n  font-weight: normal;\n  font-size: 15px;\n  line-height: 1.42857;\n  text-align: center;\n  vertical-align: middle;\n  cursor: pointer;\n  border: 1px solid transparent;\n  border-radius: 2px;\n  white-space: nowrap;\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  -ms-user-select: none;\n  -o-user-select: none;\n  user-select: none; }\n  .btn:focus {\n    outline: none; }\n  .btn:hover, .btn:focus {\n    color: #333;\n    text-decoration: none; }\n  .btn:active, .btn.active {\n    outline: 0;\n    background-image: none;\n    box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); }\n  .btn.disabled, .btn[disabled],\n  fieldset[disabled] .btn {\n    cursor: not-allowed;\n    pointer-events: none;\n    opacity: 0.65;\n    filter: alpha(opacity=65);\n    box-shadow: none; }\n\n.btn-default {\n  color: #333;\n  background-color: #fff;\n  transition: background-color .1s ease-in-out; }\n  .btn-default:hover, .btn-default:focus, .btn-default:active, .btn-default.active {\n    color: #333;\n    background-color: #ebebeb; }\n  .open .btn-default.dropdown-toggle {\n    color: #333;\n    background-color: #ebebeb;\n    border-color: #adadad; }\n  .btn-default:active, .btn-default.active {\n    background-image: none; }\n  .open .btn-default.dropdown-toggle {\n    background-image: none; }\n  .btn-default.disabled, .btn-default.disabled:hover, .btn-default.disabled:focus, .btn-default.disabled:active, .btn-default.disabled.active, .btn-default[disabled], .btn-default[disabled]:hover, .btn-default[disabled]:focus, .btn-default[disabled]:active, .btn-default[disabled].active,\n  fieldset[disabled] .btn-default,\n  fieldset[disabled] .btn-default:hover,\n  fieldset[disabled] .btn-default:focus,\n  fieldset[disabled] .btn-default:active,\n  fieldset[disabled] .btn-default.active {\n    background-color: #fff;\n    border-color: #ccc; }\n\n.btn-primary {\n  color: #fff;\n  background-color: #4F8EF7;\n  transition: background-color .1s ease-in-out; }\n  .btn-primary:hover, .btn-primary:focus, .btn-primary:active, .btn-primary.active {\n    color: #fff;\n    background-color: #2875f5; }\n  .open .btn-primary.dropdown-toggle {\n    color: #fff;\n    background-color: #2875f5;\n    border-color: #1468f4; }\n  .btn-primary:active, .btn-primary.active {\n    background-image: none; }\n  .open .btn-primary.dropdown-toggle {\n    background-image: none; }\n  .btn-primary.disabled, .btn-primary.disabled:hover, .btn-primary.disabled:focus, .btn-primary.disabled:active, .btn-primary.disabled.active, .btn-primary[disabled], .btn-primary[disabled]:hover, .btn-primary[disabled]:focus, .btn-primary[disabled]:active, .btn-primary[disabled].active,\n  fieldset[disabled] .btn-primary,\n  fieldset[disabled] .btn-primary:hover,\n  fieldset[disabled] .btn-primary:focus,\n  fieldset[disabled] .btn-primary:active,\n  fieldset[disabled] .btn-primary.active {\n    background-color: #4F8EF7;\n    border-color: #4F8EF7; }\n\n.btn-warning {\n  color: #fff;\n  background-color: #f0ad4e;\n  transition: background-color .1s ease-in-out; }\n  .btn-warning:hover, .btn-warning:focus, .btn-warning:active, .btn-warning.active {\n    color: #fff;\n    background-color: #ed9c28; }\n  .open .btn-warning.dropdown-toggle {\n    color: #fff;\n    background-color: #ed9c28;\n    border-color: #d58512; }\n  .btn-warning:active, .btn-warning.active {\n    background-image: none; }\n  .open .btn-warning.dropdown-toggle {\n    background-image: none; }\n  .btn-warning.disabled, .btn-warning.disabled:hover, .btn-warning.disabled:focus, .btn-warning.disabled:active, .btn-warning.disabled.active, .btn-warning[disabled], .btn-warning[disabled]:hover, .btn-warning[disabled]:focus, .btn-warning[disabled]:active, .btn-warning[disabled].active,\n  fieldset[disabled] .btn-warning,\n  fieldset[disabled] .btn-warning:hover,\n  fieldset[disabled] .btn-warning:focus,\n  fieldset[disabled] .btn-warning:active,\n  fieldset[disabled] .btn-warning.active {\n    background-color: #f0ad4e;\n    border-color: #eea236; }\n\n.btn-danger {\n  color: #fff;\n  background-color: #d9534f;\n  transition: background-color .1s ease-in-out; }\n  .btn-danger:hover, .btn-danger:focus, .btn-danger:active, .btn-danger.active {\n    color: #fff;\n    background-color: #d2322d; }\n  .open .btn-danger.dropdown-toggle {\n    color: #fff;\n    background-color: #d2322d;\n    border-color: #ac2925; }\n  .btn-danger:active, .btn-danger.active {\n    background-image: none; }\n  .open .btn-danger.dropdown-toggle {\n    background-image: none; }\n  .btn-danger.disabled, .btn-danger.disabled:hover, .btn-danger.disabled:focus, .btn-danger.disabled:active, .btn-danger.disabled.active, .btn-danger[disabled], .btn-danger[disabled]:hover, .btn-danger[disabled]:focus, .btn-danger[disabled]:active, .btn-danger[disabled].active,\n  fieldset[disabled] .btn-danger,\n  fieldset[disabled] .btn-danger:hover,\n  fieldset[disabled] .btn-danger:focus,\n  fieldset[disabled] .btn-danger:active,\n  fieldset[disabled] .btn-danger.active {\n    background-color: #d9534f;\n    border-color: #d43f3a; }\n\n.btn-success {\n  color: #fff;\n  background-color: #5cb85c;\n  transition: background-color .1s ease-in-out; }\n  .btn-success:hover, .btn-success:focus, .btn-success:active, .btn-success.active {\n    color: #fff;\n    background-color: #47a447; }\n  .open .btn-success.dropdown-toggle {\n    color: #fff;\n    background-color: #47a447;\n    border-color: #398439; }\n  .btn-success:active, .btn-success.active {\n    background-image: none; }\n  .open .btn-success.dropdown-toggle {\n    background-image: none; }\n  .btn-success.disabled, .btn-success.disabled:hover, .btn-success.disabled:focus, .btn-success.disabled:active, .btn-success.disabled.active, .btn-success[disabled], .btn-success[disabled]:hover, .btn-success[disabled]:focus, .btn-success[disabled]:active, .btn-success[disabled].active,\n  fieldset[disabled] .btn-success,\n  fieldset[disabled] .btn-success:hover,\n  fieldset[disabled] .btn-success:focus,\n  fieldset[disabled] .btn-success:active,\n  fieldset[disabled] .btn-success.active {\n    background-color: #5cb85c;\n    border-color: #4cae4c; }\n\n.btn-info {\n  color: #fff;\n  background-color: #5bc0de;\n  transition: background-color .1s ease-in-out; }\n  .btn-info:hover, .btn-info:focus, .btn-info:active, .btn-info.active {\n    color: #fff;\n    background-color: #39b3d7; }\n  .open .btn-info.dropdown-toggle {\n    color: #fff;\n    background-color: #39b3d7;\n    border-color: #269abc; }\n  .btn-info:active, .btn-info.active {\n    background-image: none; }\n  .open .btn-info.dropdown-toggle {\n    background-image: none; }\n  .btn-info.disabled, .btn-info.disabled:hover, .btn-info.disabled:focus, .btn-info.disabled:active, .btn-info.disabled.active, .btn-info[disabled], .btn-info[disabled]:hover, .btn-info[disabled]:focus, .btn-info[disabled]:active, .btn-info[disabled].active,\n  fieldset[disabled] .btn-info,\n  fieldset[disabled] .btn-info:hover,\n  fieldset[disabled] .btn-info:focus,\n  fieldset[disabled] .btn-info:active,\n  fieldset[disabled] .btn-info.active {\n    background-color: #5bc0de;\n    border-color: #46b8da; }\n\n.btn-link {\n  color: #4F8EF7;\n  font-weight: normal;\n  cursor: pointer;\n  border-radius: 0; }\n  .btn-link, .btn-link:active, .btn-link[disabled],\n  fieldset[disabled] .btn-link {\n    background-color: transparent;\n    box-shadow: none; }\n  .btn-link, .btn-link:hover, .btn-link:focus, .btn-link:active {\n    border-color: transparent; }\n  .btn-link:hover, .btn-link:focus {\n    color: #0b60ef;\n    text-decoration: underline;\n    background-color: transparent; }\n  .btn-link[disabled]:hover, .btn-link[disabled]:focus,\n  fieldset[disabled] .btn-link:hover,\n  fieldset[disabled] .btn-link:focus {\n    color: #999999;\n    text-decoration: none; }\n\n.btn-lg, .btn-group-lg > .btn {\n  padding: 10px 16px;\n  font-size: 19px;\n  line-height: 1.33;\n  border-radius: 6px; }\n\n.btn-sm, .btn-group-sm > .btn,\n.btn-xs,\n.btn-group-xs > .btn {\n  padding: 5px 10px;\n  font-size: 13px;\n  line-height: 1.5;\n  border-radius: 3px; }\n\n\n.btn-xs,\n.btn-group-xs > .btn {\n  padding: 1px 5px; }\n\n.btn-block {\n  display: block;\n  width: 100%;\n  padding-left: 0;\n  padding-right: 0; }\n\n.btn-block + .btn-block {\n  margin-top: 5px; }\n\ninput[type=\"submit\"].btn-block,\ninput[type=\"reset\"].btn-block,\ninput[type=\"button\"].btn-block {\n  width: 100%; }\n\n.fade {\n  opacity: 0;\n  transition: opacity 0.15s linear; }\n  .fade.in {\n    opacity: 1; }\n\n.collapse {\n  display: none; }\n  .collapse.in {\n    display: block; }\n\n.collapsing {\n  position: relative;\n  height: 0;\n  overflow: hidden;\n  transition: height 0.35s ease; }\n\n@font-face {\n  font-family: 'Glyphicons Halflings';\n  src: url(\"../fonts/glyphicons-halflings-regular.eot\");\n  src: url(\"../fonts/glyphicons-halflings-regular.eot?#iefix\") format(\"embedded-opentype\"), url(\"../fonts/glyphicons-halflings-regular.woff\") format(\"woff\"), url(\"../fonts/glyphicons-halflings-regular.ttf\") format(\"truetype\"), url(\"../fonts/glyphicons-halflings-regular.svg#glyphicons-halflingsregular\") format(\"svg\"); }\n\n.glyphicon {\n  position: relative;\n  top: 1px;\n  display: inline-block;\n  font-family: 'Glyphicons Halflings';\n  font-style: normal;\n  font-weight: normal;\n  line-height: 1;\n  -webkit-font-smoothing: antialiased; }\n\n.glyphicon-asterisk:before {\n  content: \"\\2a\"; }\n\n.glyphicon-plus:before {\n  content: \"\\2b\"; }\n\n.glyphicon-euro:before {\n  content: \"\\20ac\"; }\n\n.glyphicon-minus:before {\n  content: \"\\2212\"; }\n\n.glyphicon-cloud:before {\n  content: \"\\2601\"; }\n\n.glyphicon-envelope:before {\n  content: \"\\2709\"; }\n\n.glyphicon-pencil:before {\n  content: \"\\270f\"; }\n\n.glyphicon-glass:before {\n  content: \"\\e001\"; }\n\n.glyphicon-music:before {\n  content: \"\\e002\"; }\n\n.glyphicon-search:before {\n  content: \"\\e003\"; }\n\n.glyphicon-heart:before {\n  content: \"\\e005\"; }\n\n.glyphicon-star:before {\n  content: \"\\e006\"; }\n\n.glyphicon-star-empty:before {\n  content: \"\\e007\"; }\n\n.glyphicon-user:before {\n  content: \"\\e008\"; }\n\n.glyphicon-film:before {\n  content: \"\\e009\"; }\n\n.glyphicon-th-large:before {\n  content: \"\\e010\"; }\n\n.glyphicon-th:before {\n  content: \"\\e011\"; }\n\n.glyphicon-th-list:before {\n  content: \"\\e012\"; }\n\n.glyphicon-ok:before {\n  content: \"\\e013\"; }\n\n.glyphicon-remove:before {\n  content: \"\\e014\"; }\n\n.glyphicon-zoom-in:before {\n  content: \"\\e015\"; }\n\n.glyphicon-zoom-out:before {\n  content: \"\\e016\"; }\n\n.glyphicon-off:before {\n  content: \"\\e017\"; }\n\n.glyphicon-signal:before {\n  content: \"\\e018\"; }\n\n.glyphicon-cog:before {\n  content: \"\\e019\"; }\n\n.glyphicon-trash:before {\n  content: \"\\e020\"; }\n\n.glyphicon-home:before {\n  content: \"\\e021\"; }\n\n.glyphicon-file:before {\n  content: \"\\e022\"; }\n\n.glyphicon-time:before {\n  content: \"\\e023\"; }\n\n.glyphicon-road:before {\n  content: \"\\e024\"; }\n\n.glyphicon-download-alt:before {\n  content: \"\\e025\"; }\n\n.glyphicon-download:before {\n  content: \"\\e026\"; }\n\n.glyphicon-upload:before {\n  content: \"\\e027\"; }\n\n.glyphicon-inbox:before {\n  content: \"\\e028\"; }\n\n.glyphicon-play-circle:before {\n  content: \"\\e029\"; }\n\n.glyphicon-repeat:before {\n  content: \"\\e030\"; }\n\n.glyphicon-refresh:before {\n  content: \"\\e031\"; }\n\n.glyphicon-list-alt:before {\n  content: \"\\e032\"; }\n\n.glyphicon-flag:before {\n  content: \"\\e034\"; }\n\n.glyphicon-headphones:before {\n  content: \"\\e035\"; }\n\n.glyphicon-volume-off:before {\n  content: \"\\e036\"; }\n\n.glyphicon-volume-down:before {\n  content: \"\\e037\"; }\n\n.glyphicon-volume-up:before {\n  content: \"\\e038\"; }\n\n.glyphicon-qrcode:before {\n  content: \"\\e039\"; }\n\n.glyphicon-barcode:before {\n  content: \"\\e040\"; }\n\n.glyphicon-tag:before {\n  content: \"\\e041\"; }\n\n.glyphicon-tags:before {\n  content: \"\\e042\"; }\n\n.glyphicon-book:before {\n  content: \"\\e043\"; }\n\n.glyphicon-print:before {\n  content: \"\\e045\"; }\n\n.glyphicon-font:before {\n  content: \"\\e047\"; }\n\n.glyphicon-bold:before {\n  content: \"\\e048\"; }\n\n.glyphicon-italic:before {\n  content: \"\\e049\"; }\n\n.glyphicon-text-height:before {\n  content: \"\\e050\"; }\n\n.glyphicon-text-width:before {\n  content: \"\\e051\"; }\n\n.glyphicon-align-left:before {\n  content: \"\\e052\"; }\n\n.glyphicon-align-center:before {\n  content: \"\\e053\"; }\n\n.glyphicon-align-right:before {\n  content: \"\\e054\"; }\n\n.glyphicon-align-justify:before {\n  content: \"\\e055\"; }\n\n.glyphicon-list:before {\n  content: \"\\e056\"; }\n\n.glyphicon-indent-left:before {\n  content: \"\\e057\"; }\n\n.glyphicon-indent-right:before {\n  content: \"\\e058\"; }\n\n.glyphicon-facetime-video:before {\n  content: \"\\e059\"; }\n\n.glyphicon-picture:before {\n  content: \"\\e060\"; }\n\n.glyphicon-map-marker:before {\n  content: \"\\e062\"; }\n\n.glyphicon-adjust:before {\n  content: \"\\e063\"; }\n\n.glyphicon-tint:before {\n  content: \"\\e064\"; }\n\n.glyphicon-edit:before {\n  content: \"\\e065\"; }\n\n.glyphicon-share:before {\n  content: \"\\e066\"; }\n\n.glyphicon-check:before {\n  content: \"\\e067\"; }\n\n.glyphicon-move:before {\n  content: \"\\e068\"; }\n\n.glyphicon-step-backward:before {\n  content: \"\\e069\"; }\n\n.glyphicon-fast-backward:before {\n  content: \"\\e070\"; }\n\n.glyphicon-backward:before {\n  content: \"\\e071\"; }\n\n.glyphicon-play:before {\n  content: \"\\e072\"; }\n\n.glyphicon-pause:before {\n  content: \"\\e073\"; }\n\n.glyphicon-stop:before {\n  content: \"\\e074\"; }\n\n.glyphicon-forward:before {\n  content: \"\\e075\"; }\n\n.glyphicon-fast-forward:before {\n  content: \"\\e076\"; }\n\n.glyphicon-step-forward:before {\n  content: \"\\e077\"; }\n\n.glyphicon-eject:before {\n  content: \"\\e078\"; }\n\n.glyphicon-chevron-left:before {\n  content: \"\\e079\"; }\n\n.glyphicon-chevron-right:before {\n  content: \"\\e080\"; }\n\n.glyphicon-plus-sign:before {\n  content: \"\\e081\"; }\n\n.glyphicon-minus-sign:before {\n  content: \"\\e082\"; }\n\n.glyphicon-remove-sign:before {\n  content: \"\\e083\"; }\n\n.glyphicon-ok-sign:before {\n  content: \"\\e084\"; }\n\n.glyphicon-question-sign:before {\n  content: \"\\e085\"; }\n\n.glyphicon-info-sign:before {\n  content: \"\\e086\"; }\n\n.glyphicon-screenshot:before {\n  content: \"\\e087\"; }\n\n.glyphicon-remove-circle:before {\n  content: \"\\e088\"; }\n\n.glyphicon-ok-circle:before {\n  content: \"\\e089\"; }\n\n.glyphicon-ban-circle:before {\n  content: \"\\e090\"; }\n\n.glyphicon-arrow-left:before {\n  content: \"\\e091\"; }\n\n.glyphicon-arrow-right:before {\n  content: \"\\e092\"; }\n\n.glyphicon-arrow-up:before {\n  content: \"\\e093\"; }\n\n.glyphicon-arrow-down:before {\n  content: \"\\e094\"; }\n\n.glyphicon-share-alt:before {\n  content: \"\\e095\"; }\n\n.glyphicon-resize-full:before {\n  content: \"\\e096\"; }\n\n.glyphicon-resize-small:before {\n  content: \"\\e097\"; }\n\n.glyphicon-exclamation-sign:before {\n  content: \"\\e101\"; }\n\n.glyphicon-gift:before {\n  content: \"\\e102\"; }\n\n.glyphicon-leaf:before {\n  content: \"\\e103\"; }\n\n.glyphicon-eye-open:before {\n  content: \"\\e105\"; }\n\n.glyphicon-eye-close:before {\n  content: \"\\e106\"; }\n\n.glyphicon-warning-sign:before {\n  content: \"\\e107\"; }\n\n.glyphicon-plane:before {\n  content: \"\\e108\"; }\n\n.glyphicon-random:before {\n  content: \"\\e110\"; }\n\n.glyphicon-comment:before {\n  content: \"\\e111\"; }\n\n.glyphicon-magnet:before {\n  content: \"\\e112\"; }\n\n.glyphicon-chevron-up:before {\n  content: \"\\e113\"; }\n\n.glyphicon-chevron-down:before {\n  content: \"\\e114\"; }\n\n.glyphicon-retweet:before {\n  content: \"\\e115\"; }\n\n.glyphicon-shopping-cart:before {\n  content: \"\\e116\"; }\n\n.glyphicon-folder-close:before {\n  content: \"\\e117\"; }\n\n.glyphicon-folder-open:before {\n  content: \"\\e118\"; }\n\n.glyphicon-resize-vertical:before {\n  content: \"\\e119\"; }\n\n.glyphicon-resize-horizontal:before {\n  content: \"\\e120\"; }\n\n.glyphicon-hdd:before {\n  content: \"\\e121\"; }\n\n.glyphicon-bullhorn:before {\n  content: \"\\e122\"; }\n\n.glyphicon-certificate:before {\n  content: \"\\e124\"; }\n\n.glyphicon-thumbs-up:before {\n  content: \"\\e125\"; }\n\n.glyphicon-thumbs-down:before {\n  content: \"\\e126\"; }\n\n.glyphicon-hand-right:before {\n  content: \"\\e127\"; }\n\n.glyphicon-hand-left:before {\n  content: \"\\e128\"; }\n\n.glyphicon-hand-up:before {\n  content: \"\\e129\"; }\n\n.glyphicon-hand-down:before {\n  content: \"\\e130\"; }\n\n.glyphicon-circle-arrow-right:before {\n  content: \"\\e131\"; }\n\n.glyphicon-circle-arrow-left:before {\n  content: \"\\e132\"; }\n\n.glyphicon-circle-arrow-up:before {\n  content: \"\\e133\"; }\n\n.glyphicon-circle-arrow-down:before {\n  content: \"\\e134\"; }\n\n.glyphicon-globe:before {\n  content: \"\\e135\"; }\n\n.glyphicon-tasks:before {\n  content: \"\\e137\"; }\n\n.glyphicon-filter:before {\n  content: \"\\e138\"; }\n\n.glyphicon-fullscreen:before {\n  content: \"\\e140\"; }\n\n.glyphicon-dashboard:before {\n  content: \"\\e141\"; }\n\n.glyphicon-heart-empty:before {\n  content: \"\\e143\"; }\n\n.glyphicon-link:before {\n  content: \"\\e144\"; }\n\n.glyphicon-phone:before {\n  content: \"\\e145\"; }\n\n.glyphicon-usd:before {\n  content: \"\\e148\"; }\n\n.glyphicon-gbp:before {\n  content: \"\\e149\"; }\n\n.glyphicon-sort:before {\n  content: \"\\e150\"; }\n\n.glyphicon-sort-by-alphabet:before {\n  content: \"\\e151\"; }\n\n.glyphicon-sort-by-alphabet-alt:before {\n  content: \"\\e152\"; }\n\n.glyphicon-sort-by-order:before {\n  content: \"\\e153\"; }\n\n.glyphicon-sort-by-order-alt:before {\n  content: \"\\e154\"; }\n\n.glyphicon-sort-by-attributes:before {\n  content: \"\\e155\"; }\n\n.glyphicon-sort-by-attributes-alt:before {\n  content: \"\\e156\"; }\n\n.glyphicon-unchecked:before {\n  content: \"\\e157\"; }\n\n.glyphicon-expand:before {\n  content: \"\\e158\"; }\n\n.glyphicon-collapse-down:before {\n  content: \"\\e159\"; }\n\n.glyphicon-collapse-up:before {\n  content: \"\\e160\"; }\n\n.glyphicon-log-in:before {\n  content: \"\\e161\"; }\n\n.glyphicon-flash:before {\n  content: \"\\e162\"; }\n\n.glyphicon-log-out:before {\n  content: \"\\e163\"; }\n\n.glyphicon-new-window:before {\n  content: \"\\e164\"; }\n\n.glyphicon-record:before {\n  content: \"\\e165\"; }\n\n.glyphicon-save:before {\n  content: \"\\e166\"; }\n\n.glyphicon-open:before {\n  content: \"\\e167\"; }\n\n.glyphicon-saved:before {\n  content: \"\\e168\"; }\n\n.glyphicon-import:before {\n  content: \"\\e169\"; }\n\n.glyphicon-export:before {\n  content: \"\\e170\"; }\n\n.glyphicon-send:before {\n  content: \"\\e171\"; }\n\n.glyphicon-floppy-disk:before {\n  content: \"\\e172\"; }\n\n.glyphicon-floppy-saved:before {\n  content: \"\\e173\"; }\n\n.glyphicon-floppy-remove:before {\n  content: \"\\e174\"; }\n\n.glyphicon-floppy-save:before {\n  content: \"\\e175\"; }\n\n.glyphicon-floppy-open:before {\n  content: \"\\e176\"; }\n\n.glyphicon-credit-card:before {\n  content: \"\\e177\"; }\n\n.glyphicon-transfer:before {\n  content: \"\\e178\"; }\n\n.glyphicon-cutlery:before {\n  content: \"\\e179\"; }\n\n.glyphicon-header:before {\n  content: \"\\e180\"; }\n\n.glyphicon-compressed:before {\n  content: \"\\e181\"; }\n\n.glyphicon-earphone:before {\n  content: \"\\e182\"; }\n\n.glyphicon-phone-alt:before {\n  content: \"\\e183\"; }\n\n.glyphicon-tower:before {\n  content: \"\\e184\"; }\n\n.glyphicon-stats:before {\n  content: \"\\e185\"; }\n\n.glyphicon-sd-video:before {\n  content: \"\\e186\"; }\n\n.glyphicon-hd-video:before {\n  content: \"\\e187\"; }\n\n.glyphicon-subtitles:before {\n  content: \"\\e188\"; }\n\n.glyphicon-sound-stereo:before {\n  content: \"\\e189\"; }\n\n.glyphicon-sound-dolby:before {\n  content: \"\\e190\"; }\n\n.glyphicon-sound-5-1:before {\n  content: \"\\e191\"; }\n\n.glyphicon-sound-6-1:before {\n  content: \"\\e192\"; }\n\n.glyphicon-sound-7-1:before {\n  content: \"\\e193\"; }\n\n.glyphicon-copyright-mark:before {\n  content: \"\\e194\"; }\n\n.glyphicon-registration-mark:before {\n  content: \"\\e195\"; }\n\n.glyphicon-cloud-download:before {\n  content: \"\\e197\"; }\n\n.glyphicon-cloud-upload:before {\n  content: \"\\e198\"; }\n\n.glyphicon-tree-conifer:before {\n  content: \"\\e199\"; }\n\n.glyphicon-tree-deciduous:before {\n  content: \"\\e200\"; }\n\n.glyphicon-briefcase:before {\n  content: \"\\1f4bc\"; }\n\n.glyphicon-calendar:before {\n  content: \"\\1f4c5\"; }\n\n.glyphicon-pushpin:before {\n  content: \"\\1f4cc\"; }\n\n.glyphicon-paperclip:before {\n  content: \"\\1f4ce\"; }\n\n.glyphicon-camera:before {\n  content: \"\\1f4f7\"; }\n\n.glyphicon-lock:before {\n  content: \"\\1f512\"; }\n\n.glyphicon-bell:before {\n  content: \"\\1f514\"; }\n\n.glyphicon-bookmark:before {\n  content: \"\\1f516\"; }\n\n.glyphicon-fire:before {\n  content: \"\\1f525\"; }\n\n.glyphicon-wrench:before {\n  content: \"\\1f527\"; }\n\n.caret {\n  display: inline-block;\n  width: 0;\n  height: 0;\n  margin-left: 2px;\n  vertical-align: middle;\n  border-top: 4px solid #000;\n  border-right: 4px solid transparent;\n  border-left: 4px solid transparent;\n  border-bottom: 0 dotted;\n  content: \"\"; }\n\n.dropdown {\n  position: relative; }\n\n.dropdown-toggle:focus {\n  outline: 0; }\n\n.dropdown-menu {\n  position: absolute;\n  top: 100%;\n  left: 0;\n  z-index: 1000;\n  display: none;\n  float: left;\n  min-width: 160px;\n  padding: 5px 0;\n  margin: 2px 0 0;\n  list-style: none;\n  font-size: 15px;\n  background-color: #fff;\n  border: 1px solid #ccc;\n  border: 1px solid rgba(0, 0, 0, 0.15);\n  border-radius: 2px;\n  box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175);\n  background-clip: padding-box; }\n  .dropdown-menu.pull-right {\n    right: 0;\n    left: auto; }\n  .dropdown-menu .divider {\n    height: 1px;\n    margin: 9.5px 0;\n    overflow: hidden;\n    background-color: #e5e5e5; }\n  .dropdown-menu > li > a {\n    display: block;\n    padding: 3px 20px;\n    clear: both;\n    font-weight: normal;\n    line-height: 1.42857;\n    color: #333333;\n    white-space: nowrap; }\n\n.dropdown-menu > li > a:hover, .dropdown-menu > li > a:focus {\n  text-decoration: none;\n  color: #fff;\n  background-color: #4F8EF7; }\n\n.dropdown-menu > .active > a, .dropdown-menu > .active > a:hover, .dropdown-menu > .active > a:focus {\n  color: #fff;\n  text-decoration: none;\n  outline: 0;\n  background-color: #4F8EF7; }\n\n.dropdown-menu > .disabled > a, .dropdown-menu > .disabled > a:hover, .dropdown-menu > .disabled > a:focus {\n  color: #999999; }\n\n.dropdown-menu > .disabled > a:hover, .dropdown-menu > .disabled > a:focus {\n  text-decoration: none;\n  background-color: transparent;\n  background-image: none;\n  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n  cursor: not-allowed; }\n\n.open > .dropdown-menu {\n  display: block; }\n\n.open > a {\n  outline: 0; }\n\n.dropdown-header {\n  display: block;\n  padding: 3px 20px;\n  font-size: 13px;\n  line-height: 1.42857;\n  color: #999999; }\n\n.dropdown-backdrop {\n  position: fixed;\n  left: 0;\n  right: 0;\n  bottom: 0;\n  top: 0;\n  z-index: 990; }\n\n.pull-right > .dropdown-menu {\n  right: 0;\n  left: auto; }\n\n.dropup .caret,\n.navbar-fixed-bottom .dropdown .caret {\n  border-top: 0 dotted;\n  border-bottom: 4px solid #000;\n  content: \"\"; }\n\n.dropup .dropdown-menu,\n.navbar-fixed-bottom .dropdown .dropdown-menu {\n  top: auto;\n  bottom: 100%;\n  margin-bottom: 1px; }\n\n@media (min-width: 768px) {\n  .navbar-right .dropdown-menu {\n    right: 0;\n    left: auto; } }\n\n.btn-default .caret {\n  border-top-color: #333; }\n\n.btn-primary .caret,\n.btn-success .caret,\n.btn-warning .caret,\n.btn-danger .caret,\n.btn-info .caret {\n  border-top-color: #fff; }\n\n.dropup .btn-default .caret {\n  border-bottom-color: #333; }\n\n.dropup .btn-primary .caret,\n.dropup .btn-success .caret,\n.dropup .btn-warning .caret,\n.dropup .btn-danger .caret,\n.dropup .btn-info .caret {\n  border-bottom-color: #fff; }\n\n.btn-group,\n.btn-group-vertical {\n  position: relative;\n  display: inline-block;\n  vertical-align: middle; }\n  .btn-group > .btn,\n  .btn-group-vertical > .btn {\n    position: relative;\n    float: left; }\n    .btn-group > .btn:hover, .btn-group > .btn:focus, .btn-group > .btn:active, .btn-group > .btn.active,\n    .btn-group-vertical > .btn:hover,\n    .btn-group-vertical > .btn:focus,\n    .btn-group-vertical > .btn:active,\n    .btn-group-vertical > .btn.active {\n      z-index: 2; }\n    .btn-group > .btn:focus,\n    .btn-group-vertical > .btn:focus {\n      outline: none; }\n\n.btn-group .btn + .btn,\n.btn-group .btn + .btn-group,\n.btn-group .btn-group + .btn,\n.btn-group .btn-group + .btn-group {\n  margin-left: -1px; }\n\n.btn-toolbar:before, .btn-toolbar:after {\n  content: \" \";\n  /* 1 */\n  display: table;\n  /* 2 */ }\n\n.btn-toolbar:after {\n  clear: both; }\n\n.btn-toolbar .btn-group {\n  float: left; }\n\n.btn-toolbar > .btn + .btn,\n.btn-toolbar > .btn + .btn-group,\n.btn-toolbar > .btn-group + .btn,\n.btn-toolbar > .btn-group + .btn-group {\n  margin-left: 5px; }\n\n.btn-group > .btn:not(:first-child):not(:last-child):not(.dropdown-toggle) {\n  border-radius: 0; }\n\n.btn-group > .btn:first-child {\n  margin-left: 0; }\n  .btn-group > .btn:first-child:not(:last-child):not(.dropdown-toggle) {\n    border-bottom-right-radius: 0;\n    border-top-right-radius: 0; }\n\n.btn-group > .btn:last-child:not(:first-child),\n.btn-group > .dropdown-toggle:not(:first-child) {\n  border-bottom-left-radius: 0;\n  border-top-left-radius: 0; }\n\n.btn-group > .btn-group {\n  float: left; }\n\n.btn-group > .btn-group:not(:first-child):not(:last-child) > .btn {\n  border-radius: 0; }\n\n.btn-group > .btn-group:first-child > .btn:last-child,\n.btn-group > .btn-group:first-child > .dropdown-toggle {\n  border-bottom-right-radius: 0;\n  border-top-right-radius: 0; }\n\n.btn-group > .btn-group:last-child > .btn:first-child {\n  border-bottom-left-radius: 0;\n  border-top-left-radius: 0; }\n\n.btn-group .dropdown-toggle:active,\n.btn-group.open .dropdown-toggle {\n  outline: 0; }\n\n.btn-group > .btn + .dropdown-toggle {\n  padding-left: 8px;\n  padding-right: 8px; }\n\n.btn-group > .btn-lg + .dropdown-toggle, .btn-group-lg.btn-group > .btn + .dropdown-toggle {\n  padding-left: 12px;\n  padding-right: 12px; }\n\n.btn-group.open .dropdown-toggle {\n  box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); }\n\n.btn .caret {\n  margin-left: 0; }\n\n.btn-lg .caret, .btn-group-lg > .btn .caret {\n  border-width: 5px 5px 0;\n  border-bottom-width: 0; }\n\n.dropup .btn-lg .caret, .dropup .btn-group-lg > .btn .caret {\n  border-width: 0 5px 5px; }\n\n.btn-group-vertical > .btn,\n.btn-group-vertical > .btn-group {\n  display: block;\n  float: none;\n  width: 100%;\n  max-width: 100%; }\n\n.btn-group-vertical > .btn-group:before, .btn-group-vertical > .btn-group:after {\n  content: \" \";\n  /* 1 */\n  display: table;\n  /* 2 */ }\n\n.btn-group-vertical > .btn-group:after {\n  clear: both; }\n\n.btn-group-vertical > .btn-group > .btn {\n  float: none; }\n\n.btn-group-vertical > .btn + .btn,\n.btn-group-vertical > .btn + .btn-group,\n.btn-group-vertical > .btn-group + .btn,\n.btn-group-vertical > .btn-group + .btn-group {\n  margin-top: -1px;\n  margin-left: 0; }\n\n.btn-group-vertical > .btn:not(:first-child):not(:last-child) {\n  border-radius: 0; }\n\n.btn-group-vertical > .btn:first-child:not(:last-child) {\n  border-top-right-radius: 2px;\n  border-bottom-right-radius: 0;\n  border-bottom-left-radius: 0; }\n\n.btn-group-vertical > .btn:last-child:not(:first-child) {\n  border-bottom-left-radius: 2px;\n  border-top-right-radius: 0;\n  border-top-left-radius: 0; }\n\n.btn-group-vertical > .btn-group:not(:first-child):not(:last-child) > .btn {\n  border-radius: 0; }\n\n.btn-group-vertical > .btn-group:first-child > .btn:last-child,\n.btn-group-vertical > .btn-group:first-child > .dropdown-toggle {\n  border-bottom-right-radius: 0;\n  border-bottom-left-radius: 0; }\n\n.btn-group-vertical > .btn-group:last-child > .btn:first-child {\n  border-top-right-radius: 0;\n  border-top-left-radius: 0; }\n\n.btn-group-justified {\n  display: table;\n  width: 100%;\n  table-layout: fixed;\n  border-collapse: separate; }\n  .btn-group-justified .btn {\n    float: none;\n    display: table-cell;\n    width: 1%; }\n\n[data-toggle=\"buttons\"] > .btn > input[type=\"radio\"],\n[data-toggle=\"buttons\"] > .btn > input[type=\"checkbox\"] {\n  display: none; }\n\n.input-group {\n  position: relative;\n  display: table;\n  border-collapse: separate; }\n  .input-group.col {\n    float: none;\n    padding-left: 0;\n    padding-right: 0; }\n  .input-group .form-control {\n    width: 100%;\n    margin-bottom: 0; }\n\n.input-group-addon,\n.input-group-btn,\n.input-group .form-control {\n  display: table-cell; }\n  .input-group-addon:not(:first-child):not(:last-child),\n  .input-group-btn:not(:first-child):not(:last-child),\n  .input-group .form-control:not(:first-child):not(:last-child) {\n    border-radius: 0; }\n\n.input-group-addon,\n.input-group-btn {\n  width: 1%;\n  white-space: nowrap;\n  vertical-align: middle; }\n\n.input-group-addon {\n  padding: 6px 12px;\n  font-size: 15px;\n  font-weight: normal;\n  line-height: 1;\n  text-align: center;\n  background-color: #eeeeee;\n  border: 1px solid #ccc;\n  border-radius: 2px; }\n  .input-group-addon.input-sm,\n  .input-group-sm > .input-group-addon,\n  .input-group-sm > .input-group-btn > .input-group-addon.btn {\n    padding: 5px 10px;\n    font-size: 13px;\n    border-radius: 3px; }\n  .input-group-addon.input-lg,\n  .input-group-lg > .input-group-addon,\n  .input-group-lg > .input-group-btn > .input-group-addon.btn {\n    padding: 10px 16px;\n    font-size: 19px;\n    border-radius: 6px; }\n  .input-group-addon input[type=\"radio\"],\n  .input-group-addon input[type=\"checkbox\"] {\n    margin-top: 0; }\n\n.input-group .form-control:first-child,\n.input-group-addon:first-child,\n.input-group-btn:first-child > .btn,\n.input-group-btn:first-child > .dropdown-toggle,\n.input-group-btn:last-child > .btn:not(:last-child):not(.dropdown-toggle) {\n  border-bottom-right-radius: 0;\n  border-top-right-radius: 0; }\n\n.input-group-addon:first-child {\n  border-right: 0; }\n\n.input-group .form-control:last-child,\n.input-group-addon:last-child,\n.input-group-btn:last-child > .btn,\n.input-group-btn:last-child > .dropdown-toggle,\n.input-group-btn:first-child > .btn:not(:first-child) {\n  border-bottom-left-radius: 0;\n  border-top-left-radius: 0; }\n\n.input-group-addon:last-child {\n  border-left: 0; }\n\n.input-group-btn {\n  position: relative;\n  white-space: nowrap; }\n\n.input-group-btn > .btn {\n  position: relative; }\n  .input-group-btn > .btn + .btn {\n    margin-left: -4px; }\n  .input-group-btn > .btn:hover, .input-group-btn > .btn:active {\n    z-index: 2; }\n\n.nav {\n  margin-bottom: 0;\n  padding-left: 0;\n  list-style: none; }\n  .nav:before, .nav:after {\n    content: \" \";\n    /* 1 */\n    display: table;\n    /* 2 */ }\n  .nav:after {\n    clear: both; }\n  .nav > li {\n    position: relative;\n    display: block; }\n    .nav > li > a {\n      position: relative;\n      display: block;\n      padding: 10px 15px; }\n      .nav > li > a:hover, .nav > li > a:focus {\n        text-decoration: none;\n        background-color: #eeeeee; }\n    .nav > li.disabled > a {\n      color: #999999; }\n      .nav > li.disabled > a:hover, .nav > li.disabled > a:focus {\n        color: #999999;\n        text-decoration: none;\n        background-color: transparent;\n        cursor: not-allowed; }\n  .nav .open > a, .nav .open > a:hover, .nav .open > a:focus {\n    background-color: #eeeeee;\n    border-color: #4F8EF7; }\n  .nav .nav-divider {\n    height: 1px;\n    margin: 9.5px 0;\n    overflow: hidden;\n    background-color: #e5e5e5; }\n  .nav > li > a > img {\n    max-width: none; }\n\n.nav-tabs {\n  border-bottom: 1px solid #ddd; }\n  .nav-tabs > li {\n    float: left;\n    margin-bottom: -1px; }\n    .nav-tabs > li > a {\n      margin-right: 2px;\n      line-height: 1.42857;\n      border: 1px solid transparent;\n      border-radius: 2px 2px 0 0; }\n      .nav-tabs > li > a:hover {\n        border-color: #eeeeee #eeeeee #ddd; }\n    .nav-tabs > li.active > a, .nav-tabs > li.active > a:hover, .nav-tabs > li.active > a:focus {\n      color: #555555;\n      background-color: #fff;\n      border: 1px solid #ddd;\n      border-bottom-color: transparent;\n      cursor: default; }\n\n.nav-pills > li {\n  float: left; }\n  .nav-pills > li > a {\n    border-radius: 5px; }\n  .nav-pills > li + li {\n    margin-left: 2px; }\n  .nav-pills > li.active > a, .nav-pills > li.active > a:hover, .nav-pills > li.active > a:focus {\n    color: #fff;\n    background-color: #4F8EF7; }\n\n.nav-stacked > li {\n  float: none; }\n  .nav-stacked > li + li {\n    margin-top: 2px;\n    margin-left: 0; }\n\n.nav-justified, .nav-tabs.nav-justified {\n  width: 100%; }\n  .nav-justified > li, .nav-tabs.nav-justified > li {\n    float: none; }\n    .nav-justified > li > a, .nav-tabs.nav-justified > li > a {\n      text-align: center; }\n  @media (min-width: 768px) {\n    .nav-justified > li, .nav-tabs.nav-justified > li {\n      display: table-cell;\n      width: 1%; } }\n\n.nav-tabs-justified, .nav-tabs.nav-justified {\n  border-bottom: 0; }\n  .nav-tabs-justified > li > a, .nav-tabs.nav-justified > li > a {\n    border-bottom: 1px solid #ddd;\n    margin-right: 0; }\n  .nav-tabs-justified > .active > a, .nav-tabs.nav-justified > .active > a {\n    border-bottom-color: #fff; }\n\n.tabbable:before, .tabbable:after {\n  content: \" \";\n  /* 1 */\n  display: table;\n  /* 2 */ }\n\n.tabbable:after {\n  clear: both; }\n\n.tab-content > .tab-pane,\n.pill-content > .pill-pane {\n  display: none; }\n\n.tab-content > .active,\n.pill-content > .active {\n  display: block; }\n\n.nav .caret {\n  border-top-color: #4F8EF7;\n  border-bottom-color: #4F8EF7; }\n\n.nav a:hover .caret {\n  border-top-color: #0b60ef;\n  border-bottom-color: #0b60ef; }\n\n.nav-tabs .dropdown-menu {\n  margin-top: -1px;\n  border-top-right-radius: 0;\n  border-top-left-radius: 0; }\n\n.navbar {\n  position: relative;\n  z-index: 1000;\n  min-height: 73px;\n  margin-bottom: 0;\n  border: 0; }\n  .navbar:before, .navbar:after {\n    content: \" \";\n    /* 1 */\n    display: table;\n    /* 2 */ }\n  .navbar:after {\n    clear: both; }\n\n.navbar-header:before, .navbar-header:after {\n  content: \" \";\n  /* 1 */\n  display: table;\n  /* 2 */ }\n\n.navbar-header:after {\n  clear: both; }\n\n@media (min-width: 768px) {\n  .navbar-header {\n    float: left; } }\n\n.navbar-collapse {\n  background-color: #f7f7f7;\n  max-height: 340px;\n  overflow-x: visible;\n  padding-right: 15px;\n  padding-left: 15px;\n  border-top: 1px solid transparent;\n  border-bottom: 1px solid transparent;\n  box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1);\n  -webkit-overflow-scrolling: touch; }\n  .navbar-collapse:before, .navbar-collapse:after {\n    content: \" \";\n    /* 1 */\n    display: table;\n    /* 2 */ }\n  .navbar-collapse:after {\n    clear: both; }\n  .navbar-collapse.in {\n    overflow-y: auto; }\n  @media (min-width: 768px) {\n    .navbar-collapse {\n      width: auto;\n      border-top: 0;\n      border-bottom: 0;\n      background-color: transparent;\n      box-shadow: none; }\n      .navbar-collapse.collapse {\n        display: block !important;\n        height: auto !important;\n        padding-bottom: 0;\n        overflow: visible !important; }\n      .navbar-collapse.in {\n        overflow-y: visible; }\n      .navbar-collapse .navbar-nav.navbar-left:first-child {\n        margin-left: -15px; }\n      .navbar-collapse .navbar-nav.navbar-right:last-child {\n        margin-right: -15px; }\n      .navbar-collapse .navbar-text:last-child {\n        margin-right: 0; } }\n\n.container > .navbar-header,\n.container > .navbar-collapse {\n  margin-right: -15px;\n  margin-left: -15px; }\n  @media (min-width: 768px) {\n    .container > .navbar-header,\n    .container > .navbar-collapse {\n      margin-right: 0;\n      margin-left: 0; } }\n\n.navbar-static-top {\n  border-width: 0; }\n  @media (min-width: 768px) {\n    .navbar-static-top {\n      border-radius: 0; } }\n\n.navbar-fixed-top,\n.navbar-fixed-bottom {\n  position: fixed;\n  right: 0;\n  left: 0;\n  border-width: 0; }\n  @media (min-width: 768px) {\n    .navbar-fixed-top,\n    .navbar-fixed-bottom {\n      border-radius: 0; } }\n\n.navbar-fixed-top {\n  z-index: 1030;\n  top: 0; }\n\n.navbar-fixed-bottom {\n  bottom: 0;\n  margin-bottom: 0; }\n\n.navbar-brand {\n  float: left;\n  padding: 15px 0 0 10px;\n  opacity: 0.7; }\n  .navbar-brand:hover, .navbar-brand:focus {\n    opacity: 1;\n    text-decoration: none; }\n  @media (min-width: 768px) {\n    .navbar > .container .navbar-brand {\n      margin-left: -15px; } }\n\n.navbar-toggle {\n  position: relative;\n  float: right;\n  margin-right: 15px;\n  padding: 9px 10px;\n  margin-top: 19.5px;\n  margin-bottom: 19.5px;\n  background-color: transparent;\n  border: 1px solid transparent; }\n  .navbar-toggle .icon-bar {\n    display: block;\n    width: 22px;\n    height: 2px;\n    border-radius: 1px; }\n  .navbar-toggle .icon-bar + .icon-bar {\n    margin-top: 4px; }\n  @media (min-width: 768px) {\n    .navbar-toggle {\n      display: none; } }\n\n.navbar-nav {\n  margin: 13px -15px;\n  font-size: 14px; }\n  .navbar-nav > li > a {\n    padding-top: 10px;\n    padding-bottom: 10px;\n    line-height: 21px; }\n  @media (max-width: 767px) {\n    .navbar-nav .open .dropdown-menu {\n      position: static;\n      float: none;\n      width: auto;\n      margin-top: 0;\n      background-color: transparent;\n      border: 0;\n      box-shadow: none; }\n      .navbar-nav .open .dropdown-menu > li > a,\n      .navbar-nav .open .dropdown-menu .dropdown-header {\n        padding: 5px 15px 5px 25px; }\n      .navbar-nav .open .dropdown-menu > li > a {\n        line-height: 21px; }\n        .navbar-nav .open .dropdown-menu > li > a:hover, .navbar-nav .open .dropdown-menu > li > a:focus {\n          background-image: none; } }\n  @media (min-width: 768px) {\n    .navbar-nav {\n      float: left;\n      margin: 0; }\n      .navbar-nav > li {\n        float: left; }\n        .navbar-nav > li > a {\n          padding-top: 26px;\n          padding-bottom: 26px; } }\n\n@media (min-width: 768px) {\n  .navbar-left {\n    float: left !important; }\n  .navbar-right {\n    float: right !important; } }\n\n.navbar-form {\n  margin-left: -15px;\n  margin-right: -15px;\n  padding: 10px 15px;\n  border-top: 1px solid transparent;\n  border-bottom: 1px solid transparent;\n  box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1);\n  margin-top: 19px;\n  margin-bottom: 19px; }\n  @media (max-width: 767px) {\n    .navbar-form .form-group {\n      margin-bottom: 5px; } }\n  @media (min-width: 768px) {\n    .navbar-form {\n      width: auto;\n      border: 0;\n      margin-left: 0;\n      margin-right: 0;\n      padding-top: 0;\n      padding-bottom: 0;\n      box-shadow: none; } }\n\n.navbar-nav > li > .dropdown-menu {\n  margin-top: 0;\n  border-top-right-radius: 0;\n  border-top-left-radius: 0; }\n\n.navbar-fixed-bottom .navbar-nav > li > .dropdown-menu {\n  border-bottom-right-radius: 0;\n  border-bottom-left-radius: 0; }\n\n.navbar-nav.pull-right > li > .dropdown-menu,\n.navbar-nav > li > .dropdown-menu.pull-right {\n  left: auto;\n  right: 0; }\n\n.navbar-btn {\n  margin-top: 19px;\n  margin-bottom: 19px; }\n\n.navbar-text {\n  float: left;\n  margin-top: 26px;\n  margin-bottom: 26px; }\n  @media (min-width: 768px) {\n    .navbar-text {\n      margin-left: 15px;\n      margin-right: 15px; } }\n\n.navbar-default {\n  /*background-color: $navbar-default-bg;\n  border-color: $navbar-default-border;*/\n  font-family: \"AvenirNextLTPro-Medium\", \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n  font-weight: normal;\n  -webkit-font-smoothing: antialiased; }\n  .navbar-default .navbar-brand {\n    color: #4F8EF7; }\n    .navbar-default .navbar-brand:hover, .navbar-default .navbar-brand:focus {\n      color: #1e6ff5;\n      background-color: transparent; }\n  .navbar-default .navbar-text {\n    color: #777; }\n  .navbar-default .navbar-nav > li > a {\n    color: #4F8EF7;\n    padding-left: 0 !important;\n    padding-right: 0 !important;\n    margin: 0 30px; }\n    .navbar-default .navbar-nav > li > a:hover, .navbar-default .navbar-nav > li > a:focus {\n      color: #4F8EF7;\n      background-color: transparent; }\n  .navbar-default .navbar-nav > .active > a, .navbar-default .navbar-nav > .active > a:hover, .navbar-default .navbar-nav > .active > a:focus {\n    color: #4F8EF7;\n    background-color: #e7e7e7; }\n  .navbar-default .navbar-nav > .disabled > a, .navbar-default .navbar-nav > .disabled > a:hover, .navbar-default .navbar-nav > .disabled > a:focus {\n    color: #ccc;\n    background-color: transparent; }\n  .navbar-default .navbar-toggle {\n    border-color: #ddd; }\n    .navbar-default .navbar-toggle:hover, .navbar-default .navbar-toggle:focus {\n      background-color: #ddd; }\n    .navbar-default .navbar-toggle .icon-bar {\n      background-color: #ccc; }\n  .navbar-default .navbar-collapse,\n  .navbar-default .navbar-form {\n    border-color: #e6e6e6; }\n  .navbar-default .navbar-nav > .dropdown > a:hover .caret,\n  .navbar-default .navbar-nav > .dropdown > a:focus .caret {\n    border-top-color: #4F8EF7;\n    border-bottom-color: #4F8EF7; }\n  .navbar-default .navbar-nav > .open > a, .navbar-default .navbar-nav > .open > a:hover, .navbar-default .navbar-nav > .open > a:focus {\n    background-color: #e7e7e7;\n    color: #4F8EF7; }\n    .navbar-default .navbar-nav > .open > a .caret, .navbar-default .navbar-nav > .open > a:hover .caret, .navbar-default .navbar-nav > .open > a:focus .caret {\n      border-top-color: #4F8EF7;\n      border-bottom-color: #4F8EF7; }\n  .navbar-default .navbar-nav > .dropdown > a .caret {\n    border-top-color: #4F8EF7;\n    border-bottom-color: #4F8EF7; }\n  @media (max-width: 767px) {\n    .navbar-default .navbar-nav .open .dropdown-menu > li > a {\n      color: #4F8EF7; }\n      .navbar-default .navbar-nav .open .dropdown-menu > li > a:hover, .navbar-default .navbar-nav .open .dropdown-menu > li > a:focus {\n        color: #4F8EF7;\n        background-color: transparent; }\n    .navbar-default .navbar-nav .open .dropdown-menu > .active > a, .navbar-default .navbar-nav .open .dropdown-menu > .active > a:hover, .navbar-default .navbar-nav .open .dropdown-menu > .active > a:focus {\n      color: #4F8EF7;\n      background-color: #e7e7e7; }\n    .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a, .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:hover, .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:focus {\n      color: #ccc;\n      background-color: transparent; } }\n  .navbar-default .navbar-link {\n    color: #4F8EF7; }\n    .navbar-default .navbar-link:hover {\n      color: #4F8EF7; }\n\n.navbar-inverse {\n  background-color: #222;\n  border-color: #090909; }\n  .navbar-inverse .navbar-brand {\n    color: #999999; }\n    .navbar-inverse .navbar-brand:hover, .navbar-inverse .navbar-brand:focus {\n      color: #fff;\n      background-color: transparent; }\n  .navbar-inverse .navbar-text {\n    color: #999999; }\n  .navbar-inverse .navbar-nav > li > a {\n    color: #999999; }\n    .navbar-inverse .navbar-nav > li > a:hover, .navbar-inverse .navbar-nav > li > a:focus {\n      color: #fff;\n      background-color: transparent; }\n  .navbar-inverse .navbar-nav > .active > a, .navbar-inverse .navbar-nav > .active > a:hover, .navbar-inverse .navbar-nav > .active > a:focus {\n    color: #fff;\n    background-color: #090909; }\n  .navbar-inverse .navbar-nav > .disabled > a, .navbar-inverse .navbar-nav > .disabled > a:hover, .navbar-inverse .navbar-nav > .disabled > a:focus {\n    color: #444;\n    background-color: transparent; }\n  .navbar-inverse .navbar-toggle {\n    border-color: #333; }\n    .navbar-inverse .navbar-toggle:hover, .navbar-inverse .navbar-toggle:focus {\n      background-color: #333; }\n    .navbar-inverse .navbar-toggle .icon-bar {\n      background-color: #fff; }\n  .navbar-inverse .navbar-collapse,\n  .navbar-inverse .navbar-form {\n    border-color: #101010; }\n  .navbar-inverse .navbar-nav > .open > a, .navbar-inverse .navbar-nav > .open > a:hover, .navbar-inverse .navbar-nav > .open > a:focus {\n    background-color: #090909;\n    color: #fff; }\n  .navbar-inverse .navbar-nav > .dropdown > a:hover .caret {\n    border-top-color: #fff;\n    border-bottom-color: #fff; }\n  .navbar-inverse .navbar-nav > .dropdown > a .caret {\n    border-top-color: #999999;\n    border-bottom-color: #999999; }\n  .navbar-inverse .navbar-nav > .open > a .caret, .navbar-inverse .navbar-nav > .open > a:hover .caret, .navbar-inverse .navbar-nav > .open > a:focus .caret {\n    border-top-color: #fff;\n    border-bottom-color: #fff; }\n  @media (max-width: 767px) {\n    .navbar-inverse .navbar-nav .open .dropdown-menu > .dropdown-header {\n      border-color: #090909; }\n    .navbar-inverse .navbar-nav .open .dropdown-menu > li > a {\n      color: #999999; }\n      .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:hover, .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:focus {\n        color: #fff;\n        background-color: transparent; }\n    .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a, .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:hover, .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:focus {\n      color: #fff;\n      background-color: #090909; }\n    .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a, .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:hover, .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:focus {\n      color: #444;\n      background-color: transparent; } }\n  .navbar-inverse .navbar-link {\n    color: #999999; }\n    .navbar-inverse .navbar-link:hover {\n      color: #fff; }\n\n.breadcrumb {\n  padding: 8px 15px;\n  margin-bottom: 21px;\n  list-style: none;\n  background-color: #f5f5f5;\n  border-radius: 2px; }\n  .breadcrumb > li {\n    display: inline-block; }\n    .breadcrumb > li + li:before {\n      content: \"/\\00a0\";\n      padding: 0 5px;\n      color: #ccc; }\n  .breadcrumb > .active {\n    color: #999999; }\n\n.pagination {\n  display: inline-block;\n  padding-left: 0;\n  margin: 21px 0;\n  border-radius: 2px; }\n  .pagination > li {\n    display: inline; }\n    .pagination > li > a,\n    .pagination > li > span {\n      position: relative;\n      float: left;\n      padding: 6px 12px;\n      line-height: 1.42857;\n      text-decoration: none;\n      background-color: #fff;\n      border: 1px solid #ddd;\n      margin-left: -1px; }\n    .pagination > li:first-child > a,\n    .pagination > li:first-child > span {\n      margin-left: 0;\n      border-bottom-left-radius: 2px;\n      border-top-left-radius: 2px; }\n    .pagination > li:last-child > a,\n    .pagination > li:last-child > span {\n      border-bottom-right-radius: 2px;\n      border-top-right-radius: 2px; }\n  .pagination > li > a:hover, .pagination > li > a:focus,\n  .pagination > li > span:hover,\n  .pagination > li > span:focus {\n    background-color: #eeeeee; }\n  .pagination > .active > a, .pagination > .active > a:hover, .pagination > .active > a:focus,\n  .pagination > .active > span,\n  .pagination > .active > span:hover,\n  .pagination > .active > span:focus {\n    z-index: 2;\n    color: #fff;\n    background-color: #4F8EF7;\n    border-color: #4F8EF7;\n    cursor: default; }\n  .pagination > .disabled > span,\n  .pagination > .disabled > a,\n  .pagination > .disabled > a:hover,\n  .pagination > .disabled > a:focus {\n    color: #999999;\n    background-color: #fff;\n    border-color: #ddd;\n    cursor: not-allowed; }\n\n.pagination-lg > li > a,\n.pagination-lg > li > span {\n  padding: 10px 16px;\n  font-size: 19px; }\n\n.pagination-lg > li:first-child > a,\n.pagination-lg > li:first-child > span {\n  border-bottom-left-radius: 6px;\n  border-top-left-radius: 6px; }\n\n.pagination-lg > li:last-child > a,\n.pagination-lg > li:last-child > span {\n  border-bottom-right-radius: 6px;\n  border-top-right-radius: 6px; }\n\n.pagination-sm > li > a,\n.pagination-sm > li > span {\n  padding: 5px 10px;\n  font-size: 13px; }\n\n.pagination-sm > li:first-child > a,\n.pagination-sm > li:first-child > span {\n  border-bottom-left-radius: 3px;\n  border-top-left-radius: 3px; }\n\n.pagination-sm > li:last-child > a,\n.pagination-sm > li:last-child > span {\n  border-bottom-right-radius: 3px;\n  border-top-right-radius: 3px; }\n\n.pager {\n  padding-left: 0;\n  margin: 21px 0;\n  list-style: none;\n  text-align: center; }\n  .pager:before, .pager:after {\n    content: \" \";\n    /* 1 */\n    display: table;\n    /* 2 */ }\n  .pager:after {\n    clear: both; }\n  .pager li {\n    display: inline; }\n    .pager li > a,\n    .pager li > span {\n      display: inline-block;\n      padding: 5px 14px;\n      background-color: #fff;\n      border: 1px solid #ddd;\n      border-radius: 15px; }\n    .pager li > a:hover,\n    .pager li > a:focus {\n      text-decoration: none;\n      background-color: #eeeeee; }\n  .pager .next > a,\n  .pager .next > span {\n    float: right; }\n  .pager .previous > a,\n  .pager .previous > span {\n    float: left; }\n  .pager .disabled > a,\n  .pager .disabled > a:hover,\n  .pager .disabled > a:focus,\n  .pager .disabled > span {\n    color: #999999;\n    background-color: #fff;\n    cursor: not-allowed; }\n\n.label {\n  display: inline;\n  padding: .2em .6em .3em;\n  font-size: 75%;\n  font-weight: bold;\n  line-height: 1;\n  color: #fff;\n  text-align: center;\n  white-space: nowrap;\n  vertical-align: baseline;\n  border-radius: .25em; }\n  .label[href]:hover, .label[href]:focus {\n    color: #fff;\n    text-decoration: none;\n    cursor: pointer; }\n  .label:empty {\n    display: none; }\n\n.label-default {\n  background-color: #999999; }\n  .label-default[href]:hover, .label-default[href]:focus {\n    background-color: gray; }\n\n.label-primary {\n  background-color: #4F8EF7; }\n  .label-primary[href]:hover, .label-primary[href]:focus {\n    background-color: #1e6ff5; }\n\n.label-success {\n  background-color: #5cb85c; }\n  .label-success[href]:hover, .label-success[href]:focus {\n    background-color: #449d44; }\n\n.label-info {\n  background-color: #5bc0de; }\n  .label-info[href]:hover, .label-info[href]:focus {\n    background-color: #31b0d5; }\n\n.label-warning {\n  background-color: #f0ad4e; }\n  .label-warning[href]:hover, .label-warning[href]:focus {\n    background-color: #ec971f; }\n\n.label-danger {\n  background-color: #d9534f; }\n  .label-danger[href]:hover, .label-danger[href]:focus {\n    background-color: #c9302c; }\n\n.badge {\n  display: inline-block;\n  min-width: 10px;\n  padding: 3px 7px;\n  font-size: 13px;\n  font-weight: bold;\n  color: #fff;\n  line-height: 1;\n  vertical-align: baseline;\n  white-space: nowrap;\n  text-align: center;\n  background-color: #999999;\n  border-radius: 10px; }\n  .badge:empty {\n    display: none; }\n\na.badge:hover, a.badge:focus {\n  color: #fff;\n  text-decoration: none;\n  cursor: pointer; }\n\n.btn .badge {\n  position: relative;\n  top: -1px; }\n\na.list-group-item.active > .badge,\n.nav-pills > .active > a > .badge {\n  color: #4F8EF7;\n  background-color: #fff; }\n\n.nav-pills > li > a > .badge {\n  margin-left: 3px; }\n\n.jumbotron {\n  padding: 30px;\n  margin-bottom: 30px;\n  font-size: 22.5px;\n  font-weight: 200;\n  line-height: 2.14286;\n  color: inherit;\n  background-color: #eeeeee; }\n  .jumbotron h1 {\n    line-height: 1;\n    color: inherit; }\n  .jumbotron p {\n    line-height: 1.4; }\n  .container .jumbotron {\n    border-radius: 6px; }\n  @media screen and (min-width: 768px) {\n    .jumbotron {\n      padding-top: 48px;\n      padding-bottom: 48px; }\n      .container .jumbotron {\n        padding-left: 60px;\n        padding-right: 60px; }\n      .jumbotron h1 {\n        font-size: 67.5px; } }\n\n.thumbnail {\n  display: block; }\n  .thumbnail > img {\n    display: block;\n    max-width: 100%;\n    height: auto; }\n\na.thumbnail:hover,\na.thumbnail:focus {\n  border-color: #4F8EF7; }\n\n.thumbnail > img {\n  margin-left: auto;\n  margin-right: auto; }\n\n.thumbnail .caption {\n  padding: 9px;\n  color: #333; }\n\n.alert {\n  padding: 15px;\n  margin-bottom: 21px;\n  border: 1px solid transparent;\n  border-radius: 2px; }\n  .alert h4 {\n    margin-top: 0;\n    color: inherit; }\n  .alert .alert-link {\n    font-weight: bold; }\n  .alert > p,\n  .alert > ul {\n    margin-bottom: 0; }\n  .alert > p + p {\n    margin-top: 5px; }\n\n.alert-dismissable {\n  padding-right: 35px; }\n  .alert-dismissable .close {\n    position: relative;\n    top: -2px;\n    right: -21px;\n    color: inherit; }\n\n.alert-success {\n  background-color: #dff0d8;\n  border-color: #d6e9c6;\n  color: #468847; }\n  .alert-success hr {\n    border-top-color: #c9e2b3; }\n  .alert-success .alert-link {\n    color: #356635; }\n\n.alert-info {\n  background-color: #d9edf7;\n  border-color: #bce8f1;\n  color: #3a87ad; }\n  .alert-info hr {\n    border-top-color: #a6e1ec; }\n  .alert-info .alert-link {\n    color: #2d6987; }\n\n.alert-warning {\n  background-color: #fcf8e3;\n  border-color: #fbeed5;\n  color: #c09853; }\n  .alert-warning hr {\n    border-top-color: #f8e5be; }\n  .alert-warning .alert-link {\n    color: #a47e3c; }\n\n.alert-danger {\n  background-color: #f2dede;\n  border-color: #eed3d7;\n  color: #b94a48; }\n  .alert-danger hr {\n    border-top-color: #e6c1c7; }\n  .alert-danger .alert-link {\n    color: #953b39; }\n\n@-webkit-keyframes progress-bar-stripes {\n  from {\n    background-position: 40px 0; }\n  to {\n    background-position: 0 0; } }\n\n@keyframes progress-bar-stripes {\n  from {\n    background-position: 40px 0; }\n  to {\n    background-position: 0 0; } }\n\n.progress {\n  overflow: hidden;\n  height: 21px;\n  margin-bottom: 21px;\n  background-color: #f5f5f5;\n  border-radius: 2px;\n  box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1); }\n\n.progress-bar {\n  float: left;\n  width: 0%;\n  height: 100%;\n  font-size: 13px;\n  color: #fff;\n  text-align: center;\n  background-color: #4F8EF7;\n  box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15);\n  transition: width 0.6s ease; }\n\n.progress-striped .progress-bar {\n  background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n  background-size: 40px 40px; }\n\n.progress.active .progress-bar {\n  -webkit-animation: progress-bar-stripes 2s linear infinite;\n  animation: progress-bar-stripes 2s linear infinite; }\n\n.progress-bar-success {\n  background-color: #5cb85c; }\n  .progress-striped .progress-bar-success {\n    background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); }\n\n.progress-bar-info {\n  background-color: #5bc0de; }\n  .progress-striped .progress-bar-info {\n    background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); }\n\n.progress-bar-warning {\n  background-color: #f0ad4e; }\n  .progress-striped .progress-bar-warning {\n    background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); }\n\n.progress-bar-danger {\n  background-color: #d9534f; }\n  .progress-striped .progress-bar-danger {\n    background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); }\n\n.media,\n.media-body {\n  overflow: hidden;\n  zoom: 1; }\n\n.media,\n.media .media {\n  margin-top: 15px; }\n\n.media:first-child {\n  margin-top: 0; }\n\n.media-object {\n  display: block; }\n\n.media-heading {\n  margin: 0 0 5px; }\n\n.media > .pull-left {\n  margin-right: 10px; }\n\n.media > .pull-right {\n  margin-left: 10px; }\n\n.media-list {\n  padding-left: 0;\n  list-style: none; }\n\n.list-group {\n  margin-bottom: 20px;\n  padding-left: 0; }\n\n.list-group-item {\n  position: relative;\n  display: block;\n  padding: 10px 15px;\n  margin-bottom: -1px;\n  background-color: #fff;\n  border: 1px solid #ddd; }\n  .list-group-item:first-child {\n    border-top-right-radius: 2px;\n    border-top-left-radius: 2px; }\n  .list-group-item:last-child {\n    margin-bottom: 0;\n    border-bottom-right-radius: 2px;\n    border-bottom-left-radius: 2px; }\n  .list-group-item > .badge {\n    float: right; }\n  .list-group-item > .badge + .badge {\n    margin-right: 5px; }\n  .list-group-item.active, .list-group-item.active:hover, .list-group-item.active:focus {\n    z-index: 2;\n    color: #fff;\n    background-color: #4F8EF7;\n    border-color: #4F8EF7; }\n    .list-group-item.active .list-group-item-heading, .list-group-item.active:hover .list-group-item-heading, .list-group-item.active:focus .list-group-item-heading {\n      color: inherit; }\n    .list-group-item.active .list-group-item-text, .list-group-item.active:hover .list-group-item-text, .list-group-item.active:focus .list-group-item-text {\n      color: white; }\n\na.list-group-item {\n  color: #555; }\n  a.list-group-item .list-group-item-heading {\n    color: #333; }\n  a.list-group-item:hover, a.list-group-item:focus {\n    text-decoration: none;\n    background-color: #f5f5f5; }\n\n.list-group-item-heading {\n  margin-top: 0;\n  margin-bottom: 5px; }\n\n.list-group-item-text {\n  margin-bottom: 0;\n  line-height: 1.3; }\n\n.panel {\n  margin-bottom: 21px;\n  background-color: #fff;\n  border: 1px solid transparent;\n  border-radius: 2px;\n  box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05); }\n\n.panel-body {\n  padding: 15px; }\n  .panel-body:before, .panel-body:after {\n    content: \" \";\n    /* 1 */\n    display: table;\n    /* 2 */ }\n  .panel-body:after {\n    clear: both; }\n\n.panel > .list-group {\n  margin-bottom: 0; }\n  .panel > .list-group .list-group-item {\n    border-width: 1px 0; }\n    .panel > .list-group .list-group-item:first-child {\n      border-top-right-radius: 0;\n      border-top-left-radius: 0; }\n    .panel > .list-group .list-group-item:last-child {\n      border-bottom: 0; }\n\n.panel-heading + .list-group .list-group-item:first-child {\n  border-top-width: 0; }\n\n.panel > .table {\n  margin-bottom: 0; }\n\n.panel > .panel-body + .table {\n  border-top: 1px solid #ddd; }\n\n.panel-heading {\n  padding: 10px 15px;\n  border-bottom: 1px solid transparent;\n  border-top-right-radius: 1px;\n  border-top-left-radius: 1px; }\n\n.panel-title {\n  margin-top: 0;\n  margin-bottom: 0;\n  font-size: 17px; }\n  .panel-title > a {\n    color: inherit; }\n\n.panel-footer {\n  padding: 10px 15px;\n  background-color: #f5f5f5;\n  border-top: 1px solid #ddd;\n  border-bottom-right-radius: 1px;\n  border-bottom-left-radius: 1px; }\n\n.panel-group .panel {\n  margin-bottom: 0;\n  border-radius: 2px;\n  overflow: hidden; }\n  .panel-group .panel + .panel {\n    margin-top: 5px; }\n\n.panel-group .panel-heading {\n  border-bottom: 0; }\n  .panel-group .panel-heading + .panel-collapse .panel-body {\n    border-top: 1px solid #ddd; }\n\n.panel-group .panel-footer {\n  border-top: 0; }\n  .panel-group .panel-footer + .panel-collapse .panel-body {\n    border-bottom: 1px solid #ddd; }\n\n.panel-default {\n  border-color: #ddd; }\n  .panel-default > .panel-heading {\n    color: #333333;\n    background-color: #f5f5f5;\n    border-color: #ddd; }\n    .panel-default > .panel-heading + .panel-collapse .panel-body {\n      border-top-color: #ddd; }\n  .panel-default > .panel-footer + .panel-collapse .panel-body {\n    border-bottom-color: #ddd; }\n\n.panel-primary {\n  border-color: #4F8EF7; }\n  .panel-primary > .panel-heading {\n    color: #fff;\n    background-color: #4F8EF7;\n    border-color: #4F8EF7; }\n    .panel-primary > .panel-heading + .panel-collapse .panel-body {\n      border-top-color: #4F8EF7; }\n  .panel-primary > .panel-footer + .panel-collapse .panel-body {\n    border-bottom-color: #4F8EF7; }\n\n.panel-success {\n  border-color: #d6e9c6; }\n  .panel-success > .panel-heading {\n    color: #468847;\n    background-color: #dff0d8;\n    border-color: #d6e9c6; }\n    .panel-success > .panel-heading + .panel-collapse .panel-body {\n      border-top-color: #d6e9c6; }\n  .panel-success > .panel-footer + .panel-collapse .panel-body {\n    border-bottom-color: #d6e9c6; }\n\n.panel-warning {\n  border-color: #fbeed5; }\n  .panel-warning > .panel-heading {\n    color: #c09853;\n    background-color: #fcf8e3;\n    border-color: #fbeed5; }\n    .panel-warning > .panel-heading + .panel-collapse .panel-body {\n      border-top-color: #fbeed5; }\n  .panel-warning > .panel-footer + .panel-collapse .panel-body {\n    border-bottom-color: #fbeed5; }\n\n.panel-danger {\n  border-color: #eed3d7; }\n  .panel-danger > .panel-heading {\n    color: #b94a48;\n    background-color: #f2dede;\n    border-color: #eed3d7; }\n    .panel-danger > .panel-heading + .panel-collapse .panel-body {\n      border-top-color: #eed3d7; }\n  .panel-danger > .panel-footer + .panel-collapse .panel-body {\n    border-bottom-color: #eed3d7; }\n\n.panel-info {\n  border-color: #bce8f1; }\n  .panel-info > .panel-heading {\n    color: #3a87ad;\n    background-color: #d9edf7;\n    border-color: #bce8f1; }\n    .panel-info > .panel-heading + .panel-collapse .panel-body {\n      border-top-color: #bce8f1; }\n  .panel-info > .panel-footer + .panel-collapse .panel-body {\n    border-bottom-color: #bce8f1; }\n\n.well {\n  min-height: 20px;\n  padding: 19px;\n  margin-bottom: 20px;\n  background-color: #f5f5f5;\n  border: 1px solid #e3e3e3;\n  border-radius: 2px;\n  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05); }\n  .well blockquote {\n    border-color: #ddd;\n    border-color: rgba(0, 0, 0, 0.15); }\n\n.well-lg {\n  padding: 24px;\n  border-radius: 6px; }\n\n.well-sm {\n  padding: 9px;\n  border-radius: 3px; }\n\n.close {\n  float: right;\n  font-size: 22.5px;\n  font-weight: bold;\n  line-height: 1;\n  color: #000;\n  text-shadow: 0 1px 0 #fff;\n  opacity: 0.2;\n  filter: alpha(opacity=20); }\n  .close:hover, .close:focus {\n    color: #000;\n    text-decoration: none;\n    cursor: pointer;\n    opacity: 0.5;\n    filter: alpha(opacity=50); }\n\nbutton.close {\n  padding: 0;\n  cursor: pointer;\n  background: transparent;\n  border: 0;\n  -webkit-appearance: none; }\n\n.modal-open {\n  overflow: hidden; }\n  .modal-open .navbar-fixed-top,\n  .modal-open .navbar-fixed-bottom {\n    margin-right: 15px; }\n\nbody.modal-open {\n  margin-right: 15px; }\n\n.modal {\n  display: none;\n  overflow: auto;\n  overflow-y: scroll;\n  position: fixed;\n  top: 0;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  z-index: 1040; }\n  .modal.fade .modal-dialog {\n    -webkit-transform: translate(0, -25%);\n    transform: translate(0, -25%);\n    transition: -webkit-transform 0.3s ease-out;\n    transition: transform 0.3s ease-out;\n    transition: transform 0.3s ease-out, -webkit-transform 0.3s ease-out; }\n  .modal.in .modal-dialog {\n    -webkit-transform: translate(0, 0);\n    transform: translate(0, 0); }\n\n.modal-dialog {\n  margin-left: auto;\n  margin-right: auto;\n  width: auto;\n  padding: 10px;\n  z-index: 1050; }\n\n.modal-content {\n  position: relative;\n  background-color: #fff;\n  border: 1px solid #999;\n  border: 1px solid rgba(0, 0, 0, 0.2);\n  border-radius: 6px;\n  box-shadow: 0 3px 9px rgba(0, 0, 0, 0.5);\n  background-clip: padding-box;\n  outline: none; }\n\n.modal-backdrop {\n  position: fixed;\n  top: 0;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  z-index: 1030;\n  background-color: #000; }\n  .modal-backdrop.fade {\n    opacity: 0;\n    filter: alpha(opacity=0); }\n  .modal-backdrop.in {\n    opacity: 0.5;\n    filter: alpha(opacity=50); }\n\n.modal-header {\n  padding: 15px;\n  border-bottom: 1px solid #e5e5e5;\n  min-height: 16.42857px; }\n\n.modal-header .close {\n  margin-top: -2px; }\n\n.modal-title {\n  margin: 0;\n  line-height: 1.42857; }\n\n.modal-body {\n  position: relative;\n  padding: 20px; }\n\n.modal-footer {\n  margin-top: 15px;\n  padding: 19px 20px 20px;\n  text-align: right;\n  border-top: 1px solid #e5e5e5; }\n  .modal-footer:before, .modal-footer:after {\n    content: \" \";\n    /* 1 */\n    display: table;\n    /* 2 */ }\n  .modal-footer:after {\n    clear: both; }\n  .modal-footer .btn + .btn {\n    margin-left: 5px;\n    margin-bottom: 0; }\n  .modal-footer .btn-group .btn + .btn {\n    margin-left: -1px; }\n  .modal-footer .btn-block + .btn-block {\n    margin-left: 0; }\n\n@media screen and (min-width: 768px) {\n  .modal-dialog {\n    left: 50%;\n    right: auto;\n    width: 600px;\n    padding-top: 30px;\n    padding-bottom: 30px; }\n  .modal-content {\n    box-shadow: 0 5px 15px rgba(0, 0, 0, 0.5); } }\n\n.tooltip {\n  position: absolute;\n  z-index: 1030;\n  display: block;\n  visibility: visible;\n  font-size: 13px;\n  line-height: 1.4;\n  opacity: 0;\n  filter: alpha(opacity=0); }\n  .tooltip.in {\n    opacity: 0.9;\n    filter: alpha(opacity=90); }\n  .tooltip.top {\n    margin-top: -3px;\n    padding: 5px 0; }\n  .tooltip.right {\n    margin-left: 3px;\n    padding: 0 5px; }\n  .tooltip.bottom {\n    margin-top: 3px;\n    padding: 5px 0; }\n  .tooltip.left {\n    margin-left: -3px;\n    padding: 0 5px; }\n\n.tooltip-inner {\n  max-width: 200px;\n  padding: 3px 8px;\n  color: #fff;\n  text-align: center;\n  text-decoration: none;\n  background-color: #000;\n  border-radius: 2px; }\n\n.tooltip-arrow {\n  position: absolute;\n  width: 0;\n  height: 0;\n  border-color: transparent;\n  border-style: solid; }\n\n.tooltip.top .tooltip-arrow {\n  bottom: 0;\n  left: 50%;\n  margin-left: -5px;\n  border-width: 5px 5px 0;\n  border-top-color: #000; }\n\n.tooltip.top-left .tooltip-arrow {\n  bottom: 0;\n  left: 5px;\n  border-width: 5px 5px 0;\n  border-top-color: #000; }\n\n.tooltip.top-right .tooltip-arrow {\n  bottom: 0;\n  right: 5px;\n  border-width: 5px 5px 0;\n  border-top-color: #000; }\n\n.tooltip.right .tooltip-arrow {\n  top: 50%;\n  left: 0;\n  margin-top: -5px;\n  border-width: 5px 5px 5px 0;\n  border-right-color: #000; }\n\n.tooltip.left .tooltip-arrow {\n  top: 50%;\n  right: 0;\n  margin-top: -5px;\n  border-width: 5px 0 5px 5px;\n  border-left-color: #000; }\n\n.tooltip.bottom .tooltip-arrow {\n  top: 0;\n  left: 50%;\n  margin-left: -5px;\n  border-width: 0 5px 5px;\n  border-bottom-color: #000; }\n\n.tooltip.bottom-left .tooltip-arrow {\n  top: 0;\n  left: 5px;\n  border-width: 0 5px 5px;\n  border-bottom-color: #000; }\n\n.tooltip.bottom-right .tooltip-arrow {\n  top: 0;\n  right: 5px;\n  border-width: 0 5px 5px;\n  border-bottom-color: #000; }\n\n.popover {\n  position: absolute;\n  top: 0;\n  left: 0;\n  z-index: 1010;\n  display: none;\n  max-width: 276px;\n  padding: 1px;\n  text-align: left;\n  background-color: #fff;\n  background-clip: padding-box;\n  border: 1px solid #ccc;\n  border: 1px solid rgba(0, 0, 0, 0.2);\n  border-radius: 6px;\n  box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);\n  white-space: normal; }\n  .popover.top {\n    margin-top: -10px; }\n  .popover.right {\n    margin-left: 10px; }\n  .popover.bottom {\n    margin-top: 10px; }\n  .popover.left {\n    margin-left: -10px; }\n\n.popover-title {\n  margin: 0;\n  padding: 8px 14px;\n  font-size: 15px;\n  font-weight: normal;\n  line-height: 18px;\n  background-color: #f7f7f7;\n  border-bottom: 1px solid #ebebeb;\n  border-radius: 5px 5px 0 0; }\n\n.popover-content {\n  padding: 9px 14px; }\n\n.popover .arrow, .popover .arrow:after {\n  position: absolute;\n  display: block;\n  width: 0;\n  height: 0;\n  border-color: transparent;\n  border-style: solid; }\n\n.popover .arrow {\n  border-width: 11px; }\n\n.popover .arrow:after {\n  border-width: 10px;\n  content: \"\"; }\n\n.popover.top .arrow {\n  left: 50%;\n  margin-left: -11px;\n  border-bottom-width: 0;\n  border-top-color: #999;\n  border-top-color: rgba(0, 0, 0, 0.25);\n  bottom: -11px; }\n  .popover.top .arrow:after {\n    content: \" \";\n    bottom: 1px;\n    margin-left: -10px;\n    border-bottom-width: 0;\n    border-top-color: #fff; }\n\n.popover.right .arrow {\n  top: 50%;\n  left: -11px;\n  margin-top: -11px;\n  border-left-width: 0;\n  border-right-color: #999;\n  border-right-color: rgba(0, 0, 0, 0.25); }\n  .popover.right .arrow:after {\n    content: \" \";\n    left: 1px;\n    bottom: -10px;\n    border-left-width: 0;\n    border-right-color: #fff; }\n\n.popover.bottom .arrow {\n  left: 50%;\n  margin-left: -11px;\n  border-top-width: 0;\n  border-bottom-color: #999;\n  border-bottom-color: rgba(0, 0, 0, 0.25);\n  top: -11px; }\n  .popover.bottom .arrow:after {\n    content: \" \";\n    top: 1px;\n    margin-left: -10px;\n    border-top-width: 0;\n    border-bottom-color: #fff; }\n\n.popover.left .arrow {\n  top: 50%;\n  right: -11px;\n  margin-top: -11px;\n  border-right-width: 0;\n  border-left-color: #999;\n  border-left-color: rgba(0, 0, 0, 0.25); }\n  .popover.left .arrow:after {\n    content: \" \";\n    right: 1px;\n    border-right-width: 0;\n    border-left-color: #fff;\n    bottom: -10px; }\n\n.carousel {\n  position: relative; }\n\n.carousel-inner {\n  position: relative;\n  overflow: hidden;\n  width: 100%; }\n  .carousel-inner > .item {\n    display: none;\n    position: relative;\n    transition: 0.6s ease-in-out left; }\n    .carousel-inner > .item > img,\n    .carousel-inner > .item > a > img {\n      display: block;\n      max-width: 100%;\n      height: auto;\n      line-height: 1; }\n  .carousel-inner > .active,\n  .carousel-inner > .next,\n  .carousel-inner > .prev {\n    display: block; }\n  .carousel-inner > .active {\n    left: 0; }\n  .carousel-inner > .next,\n  .carousel-inner > .prev {\n    position: absolute;\n    top: 0;\n    width: 100%; }\n  .carousel-inner > .next {\n    left: 100%; }\n  .carousel-inner > .prev {\n    left: -100%; }\n  .carousel-inner > .next.left,\n  .carousel-inner > .prev.right {\n    left: 0; }\n  .carousel-inner > .active.left {\n    left: -100%; }\n  .carousel-inner > .active.right {\n    left: 100%; }\n\n.carousel-control {\n  position: absolute;\n  top: 0;\n  left: 0;\n  bottom: 0;\n  width: 15%;\n  opacity: 0.5;\n  filter: alpha(opacity=50);\n  font-size: 20px;\n  color: #fff;\n  text-align: center;\n  text-shadow: 0 1px 2px rgba(0, 0, 0, 0.6); }\n  .carousel-control.left {\n    background-image: linear-gradient(to right, rgba(0, 0, 0, 0.5) 0%, rgba(0, 0, 0, 0.0001) 100%);\n    background-repeat: repeat-x;\n    filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1); }\n  .carousel-control.right {\n    left: auto;\n    right: 0;\n    background-image: linear-gradient(to right, rgba(0, 0, 0, 0.0001) 0%, rgba(0, 0, 0, 0.5) 100%);\n    background-repeat: repeat-x;\n    filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1); }\n  .carousel-control:hover, .carousel-control:focus {\n    color: #fff;\n    text-decoration: none;\n    opacity: 0.9;\n    filter: alpha(opacity=90); }\n  .carousel-control .icon-prev,\n  .carousel-control .icon-next,\n  .carousel-control .glyphicon-chevron-left,\n  .carousel-control .glyphicon-chevron-right {\n    position: absolute;\n    top: 50%;\n    left: 50%;\n    z-index: 5;\n    display: inline-block; }\n  .carousel-control .icon-prev,\n  .carousel-control .icon-next {\n    width: 20px;\n    height: 20px;\n    margin-top: -10px;\n    margin-left: -10px;\n    font-family: serif; }\n  .carousel-control .icon-prev:before {\n    content: '\\2039'; }\n  .carousel-control .icon-next:before {\n    content: '\\203a'; }\n\n.carousel-indicators {\n  position: absolute;\n  bottom: 10px;\n  left: 50%;\n  z-index: 15;\n  width: 60%;\n  margin-left: -30%;\n  padding-left: 0;\n  list-style: none;\n  text-align: center; }\n  .carousel-indicators li {\n    display: inline-block;\n    width: 10px;\n    height: 10px;\n    margin: 1px;\n    text-indent: -999px;\n    border: 1px solid #fff;\n    border-radius: 10px;\n    cursor: pointer; }\n  .carousel-indicators .active {\n    margin: 0;\n    width: 12px;\n    height: 12px;\n    background-color: #fff; }\n\n.carousel-caption {\n  position: absolute;\n  left: 15%;\n  right: 15%;\n  bottom: 20px;\n  z-index: 10;\n  padding-top: 20px;\n  padding-bottom: 20px;\n  color: #fff;\n  text-align: center;\n  text-shadow: 0 1px 2px rgba(0, 0, 0, 0.6); }\n  .carousel-caption .btn {\n    text-shadow: none; }\n\n@media screen and (min-width: 768px) {\n  .carousel-control .icon-prev,\n  .carousel-control .icon-next {\n    width: 30px;\n    height: 30px;\n    margin-top: -15px;\n    margin-left: -15px;\n    font-size: 30px; }\n  .carousel-caption {\n    left: 20%;\n    right: 20%;\n    padding-bottom: 30px; }\n  .carousel-indicators {\n    bottom: 20px; } }\n\n.clearfix:before, .clearfix:after {\n  content: \" \";\n  /* 1 */\n  display: table;\n  /* 2 */ }\n\n.clearfix:after {\n  clear: both; }\n\n.pull-right {\n  float: right !important; }\n\n.pull-left {\n  float: left !important; }\n\n.hide {\n  display: none !important; }\n\n.show {\n  display: block !important; }\n\n.invisible {\n  visibility: hidden; }\n\n.text-hide {\n  font: 0/0 a;\n  color: transparent;\n  text-shadow: none;\n  background-color: transparent;\n  border: 0; }\n\n.affix {\n  position: fixed; }\n\n@-ms-viewport {\n  width: device-width; }\n\n@media screen and (max-width: 400px) {\n  @-ms-viewport {\n    width: 320px; } }\n\n.hidden {\n  display: none !important;\n  visibility: hidden !important; }\n\n.visible-xs {\n  display: none !important; }\n\ntr.visible-xs {\n  display: none !important; }\n\nth.visible-xs,\ntd.visible-xs {\n  display: none !important; }\n\n@media (max-width: 767px) {\n  .visible-xs {\n    display: block !important; }\n  tr.visible-xs {\n    display: table-row !important; }\n  th.visible-xs,\n  td.visible-xs {\n    display: table-cell !important; } }\n\n@media (min-width: 768px) and (max-width: 991px) {\n  .visible-xs.visible-sm {\n    display: block !important; }\n  tr.visible-xs.visible-sm {\n    display: table-row !important; }\n  th.visible-xs.visible-sm,\n  td.visible-xs.visible-sm {\n    display: table-cell !important; } }\n\n@media (min-width: 992px) and (max-width: 1199px) {\n  .visible-xs.visible-md {\n    display: block !important; }\n  tr.visible-xs.visible-md {\n    display: table-row !important; }\n  th.visible-xs.visible-md,\n  td.visible-xs.visible-md {\n    display: table-cell !important; } }\n\n@media (min-width: 1200px) {\n  .visible-xs.visible-lg {\n    display: block !important; }\n  tr.visible-xs.visible-lg {\n    display: table-row !important; }\n  th.visible-xs.visible-lg,\n  td.visible-xs.visible-lg {\n    display: table-cell !important; } }\n\n.visible-sm {\n  display: none !important; }\n\ntr.visible-sm {\n  display: none !important; }\n\nth.visible-sm,\ntd.visible-sm {\n  display: none !important; }\n\n@media (max-width: 767px) {\n  .visible-sm.visible-xs {\n    display: block !important; }\n  tr.visible-sm.visible-xs {\n    display: table-row !important; }\n  th.visible-sm.visible-xs,\n  td.visible-sm.visible-xs {\n    display: table-cell !important; } }\n\n@media (min-width: 768px) and (max-width: 991px) {\n  .visible-sm {\n    display: block !important; }\n  tr.visible-sm {\n    display: table-row !important; }\n  th.visible-sm,\n  td.visible-sm {\n    display: table-cell !important; } }\n\n@media (min-width: 992px) and (max-width: 1199px) {\n  .visible-sm.visible-md {\n    display: block !important; }\n  tr.visible-sm.visible-md {\n    display: table-row !important; }\n  th.visible-sm.visible-md,\n  td.visible-sm.visible-md {\n    display: table-cell !important; } }\n\n@media (min-width: 1200px) {\n  .visible-sm.visible-lg {\n    display: block !important; }\n  tr.visible-sm.visible-lg {\n    display: table-row !important; }\n  th.visible-sm.visible-lg,\n  td.visible-sm.visible-lg {\n    display: table-cell !important; } }\n\n.visible-md {\n  display: none !important; }\n\ntr.visible-md {\n  display: none !important; }\n\nth.visible-md,\ntd.visible-md {\n  display: none !important; }\n\n@media (max-width: 767px) {\n  .visible-md.visible-xs {\n    display: block !important; }\n  tr.visible-md.visible-xs {\n    display: table-row !important; }\n  th.visible-md.visible-xs,\n  td.visible-md.visible-xs {\n    display: table-cell !important; } }\n\n@media (min-width: 768px) and (max-width: 991px) {\n  .visible-md.visible-sm {\n    display: block !important; }\n  tr.visible-md.visible-sm {\n    display: table-row !important; }\n  th.visible-md.visible-sm,\n  td.visible-md.visible-sm {\n    display: table-cell !important; } }\n\n@media (min-width: 992px) and (max-width: 1199px) {\n  .visible-md {\n    display: block !important; }\n  tr.visible-md {\n    display: table-row !important; }\n  th.visible-md,\n  td.visible-md {\n    display: table-cell !important; } }\n\n@media (min-width: 1200px) {\n  .visible-md.visible-lg {\n    display: block !important; }\n  tr.visible-md.visible-lg {\n    display: table-row !important; }\n  th.visible-md.visible-lg,\n  td.visible-md.visible-lg {\n    display: table-cell !important; } }\n\n.visible-lg {\n  display: none !important; }\n\ntr.visible-lg {\n  display: none !important; }\n\nth.visible-lg,\ntd.visible-lg {\n  display: none !important; }\n\n@media (max-width: 767px) {\n  .visible-lg.visible-xs {\n    display: block !important; }\n  tr.visible-lg.visible-xs {\n    display: table-row !important; }\n  th.visible-lg.visible-xs,\n  td.visible-lg.visible-xs {\n    display: table-cell !important; } }\n\n@media (min-width: 768px) and (max-width: 991px) {\n  .visible-lg.visible-sm {\n    display: block !important; }\n  tr.visible-lg.visible-sm {\n    display: table-row !important; }\n  th.visible-lg.visible-sm,\n  td.visible-lg.visible-sm {\n    display: table-cell !important; } }\n\n@media (min-width: 992px) and (max-width: 1199px) {\n  .visible-lg.visible-md {\n    display: block !important; }\n  tr.visible-lg.visible-md {\n    display: table-row !important; }\n  th.visible-lg.visible-md,\n  td.visible-lg.visible-md {\n    display: table-cell !important; } }\n\n@media (min-width: 1200px) {\n  .visible-lg {\n    display: block !important; }\n  tr.visible-lg {\n    display: table-row !important; }\n  th.visible-lg,\n  td.visible-lg {\n    display: table-cell !important; } }\n\n.hidden-xs {\n  display: block !important; }\n\ntr.hidden-xs {\n  display: table-row !important; }\n\nth.hidden-xs,\ntd.hidden-xs {\n  display: table-cell !important; }\n\n@media (max-width: 767px) {\n  .hidden-xs {\n    display: none !important; }\n  tr.hidden-xs {\n    display: none !important; }\n  th.hidden-xs,\n  td.hidden-xs {\n    display: none !important; } }\n\n@media (min-width: 768px) and (max-width: 991px) {\n  .hidden-xs.hidden-sm {\n    display: none !important; }\n  tr.hidden-xs.hidden-sm {\n    display: none !important; }\n  th.hidden-xs.hidden-sm,\n  td.hidden-xs.hidden-sm {\n    display: none !important; } }\n\n@media (min-width: 992px) and (max-width: 1199px) {\n  .hidden-xs.hidden-md {\n    display: none !important; }\n  tr.hidden-xs.hidden-md {\n    display: none !important; }\n  th.hidden-xs.hidden-md,\n  td.hidden-xs.hidden-md {\n    display: none !important; } }\n\n@media (min-width: 1200px) {\n  .hidden-xs.hidden-lg {\n    display: none !important; }\n  tr.hidden-xs.hidden-lg {\n    display: none !important; }\n  th.hidden-xs.hidden-lg,\n  td.hidden-xs.hidden-lg {\n    display: none !important; } }\n\n.hidden-sm {\n  display: block !important; }\n\ntr.hidden-sm {\n  display: table-row !important; }\n\nth.hidden-sm,\ntd.hidden-sm {\n  display: table-cell !important; }\n\n@media (max-width: 767px) {\n  .hidden-sm.hidden-xs {\n    display: none !important; }\n  tr.hidden-sm.hidden-xs {\n    display: none !important; }\n  th.hidden-sm.hidden-xs,\n  td.hidden-sm.hidden-xs {\n    display: none !important; } }\n\n@media (min-width: 768px) and (max-width: 991px) {\n  .hidden-sm {\n    display: none !important; }\n  tr.hidden-sm {\n    display: none !important; }\n  th.hidden-sm,\n  td.hidden-sm {\n    display: none !important; } }\n\n@media (min-width: 992px) and (max-width: 1199px) {\n  .hidden-sm.hidden-md {\n    display: none !important; }\n  tr.hidden-sm.hidden-md {\n    display: none !important; }\n  th.hidden-sm.hidden-md,\n  td.hidden-sm.hidden-md {\n    display: none !important; } }\n\n@media (min-width: 1200px) {\n  .hidden-sm.hidden-lg {\n    display: none !important; }\n  tr.hidden-sm.hidden-lg {\n    display: none !important; }\n  th.hidden-sm.hidden-lg,\n  td.hidden-sm.hidden-lg {\n    display: none !important; } }\n\n.hidden-md {\n  display: block !important; }\n\ntr.hidden-md {\n  display: table-row !important; }\n\nth.hidden-md,\ntd.hidden-md {\n  display: table-cell !important; }\n\n@media (max-width: 767px) {\n  .hidden-md.hidden-xs {\n    display: none !important; }\n  tr.hidden-md.hidden-xs {\n    display: none !important; }\n  th.hidden-md.hidden-xs,\n  td.hidden-md.hidden-xs {\n    display: none !important; } }\n\n@media (min-width: 768px) and (max-width: 991px) {\n  .hidden-md.hidden-sm {\n    display: none !important; }\n  tr.hidden-md.hidden-sm {\n    display: none !important; }\n  th.hidden-md.hidden-sm,\n  td.hidden-md.hidden-sm {\n    display: none !important; } }\n\n@media (min-width: 992px) and (max-width: 1199px) {\n  .hidden-md {\n    display: none !important; }\n  tr.hidden-md {\n    display: none !important; }\n  th.hidden-md,\n  td.hidden-md {\n    display: none !important; } }\n\n@media (min-width: 1200px) {\n  .hidden-md.hidden-lg {\n    display: none !important; }\n  tr.hidden-md.hidden-lg {\n    display: none !important; }\n  th.hidden-md.hidden-lg,\n  td.hidden-md.hidden-lg {\n    display: none !important; } }\n\n.hidden-lg {\n  display: block !important; }\n\ntr.hidden-lg {\n  display: table-row !important; }\n\nth.hidden-lg,\ntd.hidden-lg {\n  display: table-cell !important; }\n\n@media (max-width: 767px) {\n  .hidden-lg.hidden-xs {\n    display: none !important; }\n  tr.hidden-lg.hidden-xs {\n    display: none !important; }\n  th.hidden-lg.hidden-xs,\n  td.hidden-lg.hidden-xs {\n    display: none !important; } }\n\n@media (min-width: 768px) and (max-width: 991px) {\n  .hidden-lg.hidden-sm {\n    display: none !important; }\n  tr.hidden-lg.hidden-sm {\n    display: none !important; }\n  th.hidden-lg.hidden-sm,\n  td.hidden-lg.hidden-sm {\n    display: none !important; } }\n\n@media (min-width: 992px) and (max-width: 1199px) {\n  .hidden-lg.hidden-md {\n    display: none !important; }\n  tr.hidden-lg.hidden-md {\n    display: none !important; }\n  th.hidden-lg.hidden-md,\n  td.hidden-lg.hidden-md {\n    display: none !important; } }\n\n@media (min-width: 1200px) {\n  .hidden-lg {\n    display: none !important; }\n  tr.hidden-lg {\n    display: none !important; }\n  th.hidden-lg,\n  td.hidden-lg {\n    display: none !important; } }\n\n.visible-print {\n  display: none !important; }\n\ntr.visible-print {\n  display: none !important; }\n\nth.visible-print,\ntd.visible-print {\n  display: none !important; }\n\n@media print {\n  .visible-print {\n    display: block !important; }\n  tr.visible-print {\n    display: table-row !important; }\n  th.visible-print,\n  td.visible-print {\n    display: table-cell !important; }\n  .hidden-print {\n    display: none !important; }\n  tr.hidden-print {\n    display: none !important; }\n  th.hidden-print,\n  td.hidden-print {\n    display: none !important; } }\n"
  },
  {
    "path": "content/css/bootstrap.css",
    "content": "/*!\n * Bootstrap v3.0.0\n *\n * Copyright 2013 Twitter, Inc\n * Licensed under the Apache License v2.0\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Designed and built with all the love in the world by @mdo and @fat.\n */\n\n/*! normalize.css v2.1.0 | MIT License | git.io/normalize */\n\narticle,\naside,\ndetails,\nfigcaption,\nfigure,\nfooter,\nheader,\nhgroup,\nmain,\nnav,\nsection,\nsummary {\n  display: block;\n}\n\naudio,\ncanvas,\nvideo {\n  display: inline-block;\n}\n\naudio:not([controls]) {\n  display: none;\n  height: 0;\n}\n\n[hidden] {\n  display: none;\n}\n\nhtml {\n  font-family: sans-serif;\n  -webkit-text-size-adjust: 100%;\n      -ms-text-size-adjust: 100%;\n}\n\nbody {\n  margin: 0;\n}\n\na:focus {\n  outline: thin dotted;\n}\n\na:active,\na:hover {\n  outline: 0;\n}\n\nh1 {\n  margin: 0.67em 0;\n  font-size: 2em;\n}\n\nabbr[title] {\n  border-bottom: 1px dotted;\n}\n\nb,\nstrong {\n  font-weight: bold;\n}\n\ndfn {\n  font-style: italic;\n}\n\nhr {\n  height: 0;\n  -moz-box-sizing: content-box;\n       box-sizing: content-box;\n}\n\nmark {\n  color: #000;\n  background: #ff0;\n}\n\ncode,\nkbd,\npre,\nsamp {\n  font-family: monospace, serif;\n  font-size: 1em;\n}\n\npre {\n  white-space: pre-wrap;\n}\n\nq {\n  quotes: \"\\201C\" \"\\201D\" \"\\2018\" \"\\2019\";\n}\n\nsmall {\n  font-size: 80%;\n}\n\nsub,\nsup {\n  position: relative;\n  font-size: 75%;\n  line-height: 0;\n  vertical-align: baseline;\n}\n\nsup {\n  top: -0.5em;\n}\n\nsub {\n  bottom: -0.25em;\n}\n\nimg {\n  border: 0;\n}\n\nsvg:not(:root) {\n  overflow: hidden;\n}\n\nfigure {\n  margin: 0;\n}\n\nfieldset {\n  padding: 0.35em 0.625em 0.75em;\n  margin: 0 2px;\n  border: 1px solid #c0c0c0;\n}\n\nlegend {\n  padding: 0;\n  border: 0;\n}\n\nbutton,\ninput,\nselect,\ntextarea {\n  margin: 0;\n  font-family: inherit;\n  font-size: 100%;\n}\n\nbutton,\ninput {\n  line-height: normal;\n}\n\nbutton,\nselect {\n  text-transform: none;\n}\n\nbutton,\nhtml input[type=\"button\"],\ninput[type=\"reset\"],\ninput[type=\"submit\"] {\n  cursor: pointer;\n  -webkit-appearance: button;\n}\n\nbutton[disabled],\nhtml input[disabled] {\n  cursor: default;\n}\n\ninput[type=\"checkbox\"],\ninput[type=\"radio\"] {\n  padding: 0;\n  box-sizing: border-box;\n}\n\ninput[type=\"search\"] {\n  -webkit-box-sizing: content-box;\n     -moz-box-sizing: content-box;\n          box-sizing: content-box;\n  -webkit-appearance: textfield;\n}\n\ninput[type=\"search\"]::-webkit-search-cancel-button,\ninput[type=\"search\"]::-webkit-search-decoration {\n  -webkit-appearance: none;\n}\n\nbutton::-moz-focus-inner,\ninput::-moz-focus-inner {\n  padding: 0;\n  border: 0;\n}\n\ntextarea {\n  overflow: auto;\n  vertical-align: top;\n}\n\ntable {\n  border-collapse: collapse;\n  border-spacing: 0;\n}\n\n@media print {\n  * {\n    color: #000 !important;\n    text-shadow: none !important;\n    background: transparent !important;\n    box-shadow: none !important;\n  }\n  a,\n  a:visited {\n    text-decoration: underline;\n  }\n  a[href]:after {\n    content: \" (\" attr(href) \")\";\n  }\n  abbr[title]:after {\n    content: \" (\" attr(title) \")\";\n  }\n  .ir a:after,\n  a[href^=\"javascript:\"]:after,\n  a[href^=\"#\"]:after {\n    content: \"\";\n  }\n  pre,\n  blockquote {\n    border: 1px solid #999;\n    page-break-inside: avoid;\n  }\n  thead {\n    display: table-header-group;\n  }\n  tr,\n  img {\n    page-break-inside: avoid;\n  }\n  img {\n    max-width: 100% !important;\n  }\n  @page  {\n    margin: 2cm .5cm;\n  }\n  p,\n  h2,\n  h3 {\n    orphans: 3;\n    widows: 3;\n  }\n  h2,\n  h3 {\n    page-break-after: avoid;\n  }\n  .navbar {\n    display: none;\n  }\n  .table td,\n  .table th {\n    background-color: #fff !important;\n  }\n  .btn > .caret,\n  .dropup > .btn > .caret {\n    border-top-color: #000 !important;\n  }\n  .label {\n    border: 1px solid #000;\n  }\n  .table {\n    border-collapse: collapse !important;\n  }\n  .table-bordered th,\n  .table-bordered td {\n    border: 1px solid #ddd !important;\n  }\n}\n\n*,\n*:before,\n*:after {\n  -webkit-box-sizing: border-box;\n     -moz-box-sizing: border-box;\n          box-sizing: border-box;\n}\n\nhtml {\n  font-size: 62.5%;\n  -webkit-tap-highlight-color: rgba(0, 0, 0, 0);\n}\n\nbody {\n  font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n  font-size: 14px;\n  line-height: 1.428571429;\n  color: #333333;\n  background-color: #ffffff;\n}\n\ninput,\nbutton,\nselect,\ntextarea {\n  font-family: inherit;\n  font-size: inherit;\n  line-height: inherit;\n}\n\nbutton,\ninput,\nselect[multiple],\ntextarea {\n  background-image: none;\n}\n\na {\n  color: #428bca;\n  text-decoration: none;\n}\n\na:hover,\na:focus {\n  color: #2a6496;\n  text-decoration: underline;\n}\n\na:focus {\n  outline: thin dotted #333;\n  outline: 5px auto -webkit-focus-ring-color;\n  outline-offset: -2px;\n}\n\nimg {\n  vertical-align: middle;\n}\n\n.img-responsive {\n  display: block;\n  height: auto;\n  max-width: 100%;\n}\n\n.img-rounded {\n  border-radius: 6px;\n}\n\n.img-thumbnail {\n  display: inline-block;\n  height: auto;\n  max-width: 100%;\n  padding: 4px;\n  line-height: 1.428571429;\n  background-color: #ffffff;\n  border: 1px solid #dddddd;\n  border-radius: 4px;\n  -webkit-transition: all 0.2s ease-in-out;\n          transition: all 0.2s ease-in-out;\n}\n\n.img-circle {\n  border-radius: 50%;\n}\n\nhr {\n  margin-top: 20px;\n  margin-bottom: 20px;\n  border: 0;\n  border-top: 1px solid #eeeeee;\n}\n\n.sr-only {\n  position: absolute;\n  width: 1px;\n  height: 1px;\n  padding: 0;\n  margin: -1px;\n  overflow: hidden;\n  clip: rect(0 0 0 0);\n  border: 0;\n}\n\np {\n  margin: 0 0 10px;\n}\n\n.lead {\n  margin-bottom: 20px;\n  font-size: 16.099999999999998px;\n  font-weight: 200;\n  line-height: 1.4;\n}\n\n@media (min-width: 768px) {\n  .lead {\n    font-size: 21px;\n  }\n}\n\nsmall {\n  font-size: 85%;\n}\n\ncite {\n  font-style: normal;\n}\n\n.text-muted {\n  color: #999999;\n}\n\n.text-primary {\n  color: #428bca;\n}\n\n.text-warning {\n  color: #c09853;\n}\n\n.text-danger {\n  color: #b94a48;\n}\n\n.text-success {\n  color: #468847;\n}\n\n.text-info {\n  color: #3a87ad;\n}\n\n.text-left {\n  text-align: left;\n}\n\n.text-right {\n  text-align: right;\n}\n\n.text-center {\n  text-align: center;\n}\n\nh1,\nh2,\nh3,\nh4,\nh5,\nh6,\n.h1,\n.h2,\n.h3,\n.h4,\n.h5,\n.h6 {\n  font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n  font-weight: 500;\n  line-height: 1.1;\n}\n\nh1 small,\nh2 small,\nh3 small,\nh4 small,\nh5 small,\nh6 small,\n.h1 small,\n.h2 small,\n.h3 small,\n.h4 small,\n.h5 small,\n.h6 small {\n  font-weight: normal;\n  line-height: 1;\n  color: #999999;\n}\n\nh1,\nh2,\nh3 {\n  margin-top: 20px;\n  margin-bottom: 10px;\n}\n\nh4,\nh5,\nh6 {\n  margin-top: 10px;\n  margin-bottom: 10px;\n}\n\nh1,\n.h1 {\n  font-size: 36px;\n}\n\nh2,\n.h2 {\n  font-size: 30px;\n}\n\nh3,\n.h3 {\n  font-size: 24px;\n}\n\nh4,\n.h4 {\n  font-size: 20px;\n}\n\nh5,\n.h5 {\n  font-size: 14px;\n}\n\nh6,\n.h6 {\n  font-size: 12px;\n}\n\nh1 small,\n.h1 small {\n  font-size: 24px;\n}\n\nh2 small,\n.h2 small {\n  font-size: 18px;\n}\n\nh3 small,\n.h3 small,\nh4 small,\n.h4 small {\n  font-size: 14px;\n}\n\n.page-header {\n  padding-bottom: 9px;\n  margin: 40px 0 20px;\n  border-bottom: 1px solid #eeeeee;\n}\n\nul,\nol {\n  margin-top: 0;\n  margin-bottom: 10px;\n}\n\nul ul,\nol ul,\nul ol,\nol ol {\n  margin-bottom: 0;\n}\n\n.list-unstyled {\n  padding-left: 0;\n  list-style: none;\n}\n\n.list-inline {\n  padding-left: 0;\n  list-style: none;\n}\n\n.list-inline > li {\n  display: inline-block;\n  padding-right: 5px;\n  padding-left: 5px;\n}\n\ndl {\n  margin-bottom: 20px;\n}\n\ndt,\ndd {\n  line-height: 1.428571429;\n}\n\ndt {\n  font-weight: bold;\n}\n\ndd {\n  margin-left: 0;\n}\n\n@media (min-width: 768px) {\n  .dl-horizontal dt {\n    float: left;\n    width: 160px;\n    overflow: hidden;\n    clear: left;\n    text-align: right;\n    text-overflow: ellipsis;\n    white-space: nowrap;\n  }\n  .dl-horizontal dd {\n    margin-left: 180px;\n  }\n  .dl-horizontal dd:before,\n  .dl-horizontal dd:after {\n    display: table;\n    content: \" \";\n  }\n  .dl-horizontal dd:after {\n    clear: both;\n  }\n  .dl-horizontal dd:before,\n  .dl-horizontal dd:after {\n    display: table;\n    content: \" \";\n  }\n  .dl-horizontal dd:after {\n    clear: both;\n  }\n}\n\nabbr[title],\nabbr[data-original-title] {\n  cursor: help;\n  border-bottom: 1px dotted #999999;\n}\n\nabbr.initialism {\n  font-size: 90%;\n  text-transform: uppercase;\n}\n\nblockquote {\n  padding: 10px 20px;\n  margin: 0 0 20px;\n  border-left: 5px solid #eeeeee;\n}\n\nblockquote p {\n  font-size: 17.5px;\n  font-weight: 300;\n  line-height: 1.25;\n}\n\nblockquote p:last-child {\n  margin-bottom: 0;\n}\n\nblockquote small {\n  display: block;\n  line-height: 1.428571429;\n  color: #999999;\n}\n\nblockquote small:before {\n  content: '\\2014 \\00A0';\n}\n\nblockquote.pull-right {\n  padding-right: 15px;\n  padding-left: 0;\n  border-right: 5px solid #eeeeee;\n  border-left: 0;\n}\n\nblockquote.pull-right p,\nblockquote.pull-right small {\n  text-align: right;\n}\n\nblockquote.pull-right small:before {\n  content: '';\n}\n\nblockquote.pull-right small:after {\n  content: '\\00A0 \\2014';\n}\n\nq:before,\nq:after,\nblockquote:before,\nblockquote:after {\n  content: \"\";\n}\n\naddress {\n  display: block;\n  margin-bottom: 20px;\n  font-style: normal;\n  line-height: 1.428571429;\n}\n\ncode,\npre {\n  font-family: Monaco, Menlo, Consolas, \"Courier New\", monospace;\n}\n\ncode {\n  padding: 2px 4px;\n  font-size: 90%;\n  color: #c7254e;\n  white-space: nowrap;\n  background-color: #f9f2f4;\n  border-radius: 4px;\n}\n\npre {\n  display: block;\n  padding: 9.5px;\n  margin: 0 0 10px;\n  font-size: 13px;\n  line-height: 1.428571429;\n  color: #333333;\n  word-break: break-all;\n  word-wrap: break-word;\n  background-color: #f5f5f5;\n  border: 1px solid #cccccc;\n  border-radius: 4px;\n}\n\npre.prettyprint {\n  margin-bottom: 20px;\n}\n\npre code {\n  padding: 0;\n  font-size: inherit;\n  color: inherit;\n  white-space: pre-wrap;\n  background-color: transparent;\n  border: 0;\n}\n\n.pre-scrollable {\n  max-height: 340px;\n  overflow-y: scroll;\n}\n\n.container {\n  padding-right: 15px;\n  padding-left: 15px;\n  margin-right: auto;\n  margin-left: auto;\n}\n\n.container:before,\n.container:after {\n  display: table;\n  content: \" \";\n}\n\n.container:after {\n  clear: both;\n}\n\n.container:before,\n.container:after {\n  display: table;\n  content: \" \";\n}\n\n.container:after {\n  clear: both;\n}\n\n.row {\n  margin-right: -15px;\n  margin-left: -15px;\n}\n\n.row:before,\n.row:after {\n  display: table;\n  content: \" \";\n}\n\n.row:after {\n  clear: both;\n}\n\n.row:before,\n.row:after {\n  display: table;\n  content: \" \";\n}\n\n.row:after {\n  clear: both;\n}\n\n.col-xs-1,\n.col-xs-2,\n.col-xs-3,\n.col-xs-4,\n.col-xs-5,\n.col-xs-6,\n.col-xs-7,\n.col-xs-8,\n.col-xs-9,\n.col-xs-10,\n.col-xs-11,\n.col-xs-12,\n.col-sm-1,\n.col-sm-2,\n.col-sm-3,\n.col-sm-4,\n.col-sm-5,\n.col-sm-6,\n.col-sm-7,\n.col-sm-8,\n.col-sm-9,\n.col-sm-10,\n.col-sm-11,\n.col-sm-12,\n.col-md-1,\n.col-md-2,\n.col-md-3,\n.col-md-4,\n.col-md-5,\n.col-md-6,\n.col-md-7,\n.col-md-8,\n.col-md-9,\n.col-md-10,\n.col-md-11,\n.col-md-12,\n.col-lg-1,\n.col-lg-2,\n.col-lg-3,\n.col-lg-4,\n.col-lg-5,\n.col-lg-6,\n.col-lg-7,\n.col-lg-8,\n.col-lg-9,\n.col-lg-10,\n.col-lg-11,\n.col-lg-12 {\n  position: relative;\n  min-height: 1px;\n  padding-right: 15px;\n  padding-left: 15px;\n}\n\n.col-xs-1,\n.col-xs-2,\n.col-xs-3,\n.col-xs-4,\n.col-xs-5,\n.col-xs-6,\n.col-xs-7,\n.col-xs-8,\n.col-xs-9,\n.col-xs-10,\n.col-xs-11 {\n  float: left;\n}\n\n.col-xs-1 {\n  width: 8.333333333333332%;\n}\n\n.col-xs-2 {\n  width: 16.666666666666664%;\n}\n\n.col-xs-3 {\n  width: 25%;\n}\n\n.col-xs-4 {\n  width: 33.33333333333333%;\n}\n\n.col-xs-5 {\n  width: 41.66666666666667%;\n}\n\n.col-xs-6 {\n  width: 50%;\n}\n\n.col-xs-7 {\n  width: 58.333333333333336%;\n}\n\n.col-xs-8 {\n  width: 66.66666666666666%;\n}\n\n.col-xs-9 {\n  width: 75%;\n}\n\n.col-xs-10 {\n  width: 83.33333333333334%;\n}\n\n.col-xs-11 {\n  width: 91.66666666666666%;\n}\n\n.col-xs-12 {\n  width: 100%;\n}\n\n@media (min-width: 768px) {\n  .container {\n    max-width: 750px;\n  }\n  .col-sm-1,\n  .col-sm-2,\n  .col-sm-3,\n  .col-sm-4,\n  .col-sm-5,\n  .col-sm-6,\n  .col-sm-7,\n  .col-sm-8,\n  .col-sm-9,\n  .col-sm-10,\n  .col-sm-11 {\n    float: left;\n  }\n  .col-sm-1 {\n    width: 8.333333333333332%;\n  }\n  .col-sm-2 {\n    width: 16.666666666666664%;\n  }\n  .col-sm-3 {\n    width: 25%;\n  }\n  .col-sm-4 {\n    width: 33.33333333333333%;\n  }\n  .col-sm-5 {\n    width: 41.66666666666667%;\n  }\n  .col-sm-6 {\n    width: 50%;\n  }\n  .col-sm-7 {\n    width: 58.333333333333336%;\n  }\n  .col-sm-8 {\n    width: 66.66666666666666%;\n  }\n  .col-sm-9 {\n    width: 75%;\n  }\n  .col-sm-10 {\n    width: 83.33333333333334%;\n  }\n  .col-sm-11 {\n    width: 91.66666666666666%;\n  }\n  .col-sm-12 {\n    width: 100%;\n  }\n  .col-sm-push-1 {\n    left: 8.333333333333332%;\n  }\n  .col-sm-push-2 {\n    left: 16.666666666666664%;\n  }\n  .col-sm-push-3 {\n    left: 25%;\n  }\n  .col-sm-push-4 {\n    left: 33.33333333333333%;\n  }\n  .col-sm-push-5 {\n    left: 41.66666666666667%;\n  }\n  .col-sm-push-6 {\n    left: 50%;\n  }\n  .col-sm-push-7 {\n    left: 58.333333333333336%;\n  }\n  .col-sm-push-8 {\n    left: 66.66666666666666%;\n  }\n  .col-sm-push-9 {\n    left: 75%;\n  }\n  .col-sm-push-10 {\n    left: 83.33333333333334%;\n  }\n  .col-sm-push-11 {\n    left: 91.66666666666666%;\n  }\n  .col-sm-pull-1 {\n    right: 8.333333333333332%;\n  }\n  .col-sm-pull-2 {\n    right: 16.666666666666664%;\n  }\n  .col-sm-pull-3 {\n    right: 25%;\n  }\n  .col-sm-pull-4 {\n    right: 33.33333333333333%;\n  }\n  .col-sm-pull-5 {\n    right: 41.66666666666667%;\n  }\n  .col-sm-pull-6 {\n    right: 50%;\n  }\n  .col-sm-pull-7 {\n    right: 58.333333333333336%;\n  }\n  .col-sm-pull-8 {\n    right: 66.66666666666666%;\n  }\n  .col-sm-pull-9 {\n    right: 75%;\n  }\n  .col-sm-pull-10 {\n    right: 83.33333333333334%;\n  }\n  .col-sm-pull-11 {\n    right: 91.66666666666666%;\n  }\n  .col-sm-offset-1 {\n    margin-left: 8.333333333333332%;\n  }\n  .col-sm-offset-2 {\n    margin-left: 16.666666666666664%;\n  }\n  .col-sm-offset-3 {\n    margin-left: 25%;\n  }\n  .col-sm-offset-4 {\n    margin-left: 33.33333333333333%;\n  }\n  .col-sm-offset-5 {\n    margin-left: 41.66666666666667%;\n  }\n  .col-sm-offset-6 {\n    margin-left: 50%;\n  }\n  .col-sm-offset-7 {\n    margin-left: 58.333333333333336%;\n  }\n  .col-sm-offset-8 {\n    margin-left: 66.66666666666666%;\n  }\n  .col-sm-offset-9 {\n    margin-left: 75%;\n  }\n  .col-sm-offset-10 {\n    margin-left: 83.33333333333334%;\n  }\n  .col-sm-offset-11 {\n    margin-left: 91.66666666666666%;\n  }\n}\n\n@media (min-width: 992px) {\n  .container {\n    max-width: 970px;\n  }\n  .col-md-1,\n  .col-md-2,\n  .col-md-3,\n  .col-md-4,\n  .col-md-5,\n  .col-md-6,\n  .col-md-7,\n  .col-md-8,\n  .col-md-9,\n  .col-md-10,\n  .col-md-11 {\n    float: left;\n  }\n  .col-md-1 {\n    width: 8.333333333333332%;\n  }\n  .col-md-2 {\n    width: 16.666666666666664%;\n  }\n  .col-md-3 {\n    width: 25%;\n  }\n  .col-md-4 {\n    width: 33.33333333333333%;\n  }\n  .col-md-5 {\n    width: 41.66666666666667%;\n  }\n  .col-md-6 {\n    width: 50%;\n  }\n  .col-md-7 {\n    width: 58.333333333333336%;\n  }\n  .col-md-8 {\n    width: 66.66666666666666%;\n  }\n  .col-md-9 {\n    width: 75%;\n  }\n  .col-md-10 {\n    width: 83.33333333333334%;\n  }\n  .col-md-11 {\n    width: 91.66666666666666%;\n  }\n  .col-md-12 {\n    width: 100%;\n  }\n  .col-md-push-0 {\n    left: auto;\n  }\n  .col-md-push-1 {\n    left: 8.333333333333332%;\n  }\n  .col-md-push-2 {\n    left: 16.666666666666664%;\n  }\n  .col-md-push-3 {\n    left: 25%;\n  }\n  .col-md-push-4 {\n    left: 33.33333333333333%;\n  }\n  .col-md-push-5 {\n    left: 41.66666666666667%;\n  }\n  .col-md-push-6 {\n    left: 50%;\n  }\n  .col-md-push-7 {\n    left: 58.333333333333336%;\n  }\n  .col-md-push-8 {\n    left: 66.66666666666666%;\n  }\n  .col-md-push-9 {\n    left: 75%;\n  }\n  .col-md-push-10 {\n    left: 83.33333333333334%;\n  }\n  .col-md-push-11 {\n    left: 91.66666666666666%;\n  }\n  .col-md-pull-0 {\n    right: auto;\n  }\n  .col-md-pull-1 {\n    right: 8.333333333333332%;\n  }\n  .col-md-pull-2 {\n    right: 16.666666666666664%;\n  }\n  .col-md-pull-3 {\n    right: 25%;\n  }\n  .col-md-pull-4 {\n    right: 33.33333333333333%;\n  }\n  .col-md-pull-5 {\n    right: 41.66666666666667%;\n  }\n  .col-md-pull-6 {\n    right: 50%;\n  }\n  .col-md-pull-7 {\n    right: 58.333333333333336%;\n  }\n  .col-md-pull-8 {\n    right: 66.66666666666666%;\n  }\n  .col-md-pull-9 {\n    right: 75%;\n  }\n  .col-md-pull-10 {\n    right: 83.33333333333334%;\n  }\n  .col-md-pull-11 {\n    right: 91.66666666666666%;\n  }\n  .col-md-offset-0 {\n    margin-left: 0;\n  }\n  .col-md-offset-1 {\n    margin-left: 8.333333333333332%;\n  }\n  .col-md-offset-2 {\n    margin-left: 16.666666666666664%;\n  }\n  .col-md-offset-3 {\n    margin-left: 25%;\n  }\n  .col-md-offset-4 {\n    margin-left: 33.33333333333333%;\n  }\n  .col-md-offset-5 {\n    margin-left: 41.66666666666667%;\n  }\n  .col-md-offset-6 {\n    margin-left: 50%;\n  }\n  .col-md-offset-7 {\n    margin-left: 58.333333333333336%;\n  }\n  .col-md-offset-8 {\n    margin-left: 66.66666666666666%;\n  }\n  .col-md-offset-9 {\n    margin-left: 75%;\n  }\n  .col-md-offset-10 {\n    margin-left: 83.33333333333334%;\n  }\n  .col-md-offset-11 {\n    margin-left: 91.66666666666666%;\n  }\n}\n\n@media (min-width: 1200px) {\n  .container {\n    max-width: 1170px;\n  }\n  .col-lg-1,\n  .col-lg-2,\n  .col-lg-3,\n  .col-lg-4,\n  .col-lg-5,\n  .col-lg-6,\n  .col-lg-7,\n  .col-lg-8,\n  .col-lg-9,\n  .col-lg-10,\n  .col-lg-11 {\n    float: left;\n  }\n  .col-lg-1 {\n    width: 8.333333333333332%;\n  }\n  .col-lg-2 {\n    width: 16.666666666666664%;\n  }\n  .col-lg-3 {\n    width: 25%;\n  }\n  .col-lg-4 {\n    width: 33.33333333333333%;\n  }\n  .col-lg-5 {\n    width: 41.66666666666667%;\n  }\n  .col-lg-6 {\n    width: 50%;\n  }\n  .col-lg-7 {\n    width: 58.333333333333336%;\n  }\n  .col-lg-8 {\n    width: 66.66666666666666%;\n  }\n  .col-lg-9 {\n    width: 75%;\n  }\n  .col-lg-10 {\n    width: 83.33333333333334%;\n  }\n  .col-lg-11 {\n    width: 91.66666666666666%;\n  }\n  .col-lg-12 {\n    width: 100%;\n  }\n  .col-lg-push-0 {\n    left: auto;\n  }\n  .col-lg-push-1 {\n    left: 8.333333333333332%;\n  }\n  .col-lg-push-2 {\n    left: 16.666666666666664%;\n  }\n  .col-lg-push-3 {\n    left: 25%;\n  }\n  .col-lg-push-4 {\n    left: 33.33333333333333%;\n  }\n  .col-lg-push-5 {\n    left: 41.66666666666667%;\n  }\n  .col-lg-push-6 {\n    left: 50%;\n  }\n  .col-lg-push-7 {\n    left: 58.333333333333336%;\n  }\n  .col-lg-push-8 {\n    left: 66.66666666666666%;\n  }\n  .col-lg-push-9 {\n    left: 75%;\n  }\n  .col-lg-push-10 {\n    left: 83.33333333333334%;\n  }\n  .col-lg-push-11 {\n    left: 91.66666666666666%;\n  }\n  .col-lg-pull-0 {\n    right: auto;\n  }\n  .col-lg-pull-1 {\n    right: 8.333333333333332%;\n  }\n  .col-lg-pull-2 {\n    right: 16.666666666666664%;\n  }\n  .col-lg-pull-3 {\n    right: 25%;\n  }\n  .col-lg-pull-4 {\n    right: 33.33333333333333%;\n  }\n  .col-lg-pull-5 {\n    right: 41.66666666666667%;\n  }\n  .col-lg-pull-6 {\n    right: 50%;\n  }\n  .col-lg-pull-7 {\n    right: 58.333333333333336%;\n  }\n  .col-lg-pull-8 {\n    right: 66.66666666666666%;\n  }\n  .col-lg-pull-9 {\n    right: 75%;\n  }\n  .col-lg-pull-10 {\n    right: 83.33333333333334%;\n  }\n  .col-lg-pull-11 {\n    right: 91.66666666666666%;\n  }\n  .col-lg-offset-0 {\n    margin-left: 0;\n  }\n  .col-lg-offset-1 {\n    margin-left: 8.333333333333332%;\n  }\n  .col-lg-offset-2 {\n    margin-left: 16.666666666666664%;\n  }\n  .col-lg-offset-3 {\n    margin-left: 25%;\n  }\n  .col-lg-offset-4 {\n    margin-left: 33.33333333333333%;\n  }\n  .col-lg-offset-5 {\n    margin-left: 41.66666666666667%;\n  }\n  .col-lg-offset-6 {\n    margin-left: 50%;\n  }\n  .col-lg-offset-7 {\n    margin-left: 58.333333333333336%;\n  }\n  .col-lg-offset-8 {\n    margin-left: 66.66666666666666%;\n  }\n  .col-lg-offset-9 {\n    margin-left: 75%;\n  }\n  .col-lg-offset-10 {\n    margin-left: 83.33333333333334%;\n  }\n  .col-lg-offset-11 {\n    margin-left: 91.66666666666666%;\n  }\n}\n\ntable {\n  max-width: 100%;\n  background-color: transparent;\n}\n\nth {\n  text-align: left;\n}\n\n.table {\n  width: 100%;\n  margin-bottom: 20px;\n}\n\n.table thead > tr > th,\n.table tbody > tr > th,\n.table tfoot > tr > th,\n.table thead > tr > td,\n.table tbody > tr > td,\n.table tfoot > tr > td {\n  padding: 8px;\n  line-height: 1.428571429;\n  vertical-align: top;\n  border-top: 1px solid #dddddd;\n}\n\n.table thead > tr > th {\n  vertical-align: bottom;\n  border-bottom: 2px solid #dddddd;\n}\n\n.table caption + thead tr:first-child th,\n.table colgroup + thead tr:first-child th,\n.table thead:first-child tr:first-child th,\n.table caption + thead tr:first-child td,\n.table colgroup + thead tr:first-child td,\n.table thead:first-child tr:first-child td {\n  border-top: 0;\n}\n\n.table tbody + tbody {\n  border-top: 2px solid #dddddd;\n}\n\n.table .table {\n  background-color: #ffffff;\n}\n\n.table-condensed thead > tr > th,\n.table-condensed tbody > tr > th,\n.table-condensed tfoot > tr > th,\n.table-condensed thead > tr > td,\n.table-condensed tbody > tr > td,\n.table-condensed tfoot > tr > td {\n  padding: 5px;\n}\n\n.table-bordered {\n  border: 1px solid #dddddd;\n}\n\n.table-bordered > thead > tr > th,\n.table-bordered > tbody > tr > th,\n.table-bordered > tfoot > tr > th,\n.table-bordered > thead > tr > td,\n.table-bordered > tbody > tr > td,\n.table-bordered > tfoot > tr > td {\n  border: 1px solid #dddddd;\n}\n\n.table-bordered > thead > tr > th,\n.table-bordered > thead > tr > td {\n  border-bottom-width: 2px;\n}\n\n.table-striped > tbody > tr:nth-child(odd) > td,\n.table-striped > tbody > tr:nth-child(odd) > th {\n  background-color: #f9f9f9;\n}\n\n.table-hover > tbody > tr:hover > td,\n.table-hover > tbody > tr:hover > th {\n  background-color: #f5f5f5;\n}\n\ntable col[class*=\"col-\"] {\n  display: table-column;\n  float: none;\n}\n\ntable td[class*=\"col-\"],\ntable th[class*=\"col-\"] {\n  display: table-cell;\n  float: none;\n}\n\n.table > thead > tr > td.active,\n.table > tbody > tr > td.active,\n.table > tfoot > tr > td.active,\n.table > thead > tr > th.active,\n.table > tbody > tr > th.active,\n.table > tfoot > tr > th.active,\n.table > thead > tr.active > td,\n.table > tbody > tr.active > td,\n.table > tfoot > tr.active > td,\n.table > thead > tr.active > th,\n.table > tbody > tr.active > th,\n.table > tfoot > tr.active > th {\n  background-color: #f5f5f5;\n}\n\n.table > thead > tr > td.success,\n.table > tbody > tr > td.success,\n.table > tfoot > tr > td.success,\n.table > thead > tr > th.success,\n.table > tbody > tr > th.success,\n.table > tfoot > tr > th.success,\n.table > thead > tr.success > td,\n.table > tbody > tr.success > td,\n.table > tfoot > tr.success > td,\n.table > thead > tr.success > th,\n.table > tbody > tr.success > th,\n.table > tfoot > tr.success > th {\n  background-color: #dff0d8;\n  border-color: #d6e9c6;\n}\n\n.table-hover > tbody > tr > td.success:hover,\n.table-hover > tbody > tr > th.success:hover,\n.table-hover > tbody > tr.success:hover > td {\n  background-color: #d0e9c6;\n  border-color: #c9e2b3;\n}\n\n.table > thead > tr > td.danger,\n.table > tbody > tr > td.danger,\n.table > tfoot > tr > td.danger,\n.table > thead > tr > th.danger,\n.table > tbody > tr > th.danger,\n.table > tfoot > tr > th.danger,\n.table > thead > tr.danger > td,\n.table > tbody > tr.danger > td,\n.table > tfoot > tr.danger > td,\n.table > thead > tr.danger > th,\n.table > tbody > tr.danger > th,\n.table > tfoot > tr.danger > th {\n  background-color: #f2dede;\n  border-color: #eed3d7;\n}\n\n.table-hover > tbody > tr > td.danger:hover,\n.table-hover > tbody > tr > th.danger:hover,\n.table-hover > tbody > tr.danger:hover > td {\n  background-color: #ebcccc;\n  border-color: #e6c1c7;\n}\n\n.table > thead > tr > td.warning,\n.table > tbody > tr > td.warning,\n.table > tfoot > tr > td.warning,\n.table > thead > tr > th.warning,\n.table > tbody > tr > th.warning,\n.table > tfoot > tr > th.warning,\n.table > thead > tr.warning > td,\n.table > tbody > tr.warning > td,\n.table > tfoot > tr.warning > td,\n.table > thead > tr.warning > th,\n.table > tbody > tr.warning > th,\n.table > tfoot > tr.warning > th {\n  background-color: #fcf8e3;\n  border-color: #fbeed5;\n}\n\n.table-hover > tbody > tr > td.warning:hover,\n.table-hover > tbody > tr > th.warning:hover,\n.table-hover > tbody > tr.warning:hover > td {\n  background-color: #faf2cc;\n  border-color: #f8e5be;\n}\n\n@media (max-width: 768px) {\n  .table-responsive {\n    width: 100%;\n    margin-bottom: 15px;\n    overflow-x: scroll;\n    overflow-y: hidden;\n    border: 1px solid #dddddd;\n  }\n  .table-responsive > .table {\n    margin-bottom: 0;\n    background-color: #fff;\n  }\n  .table-responsive > .table > thead > tr > th,\n  .table-responsive > .table > tbody > tr > th,\n  .table-responsive > .table > tfoot > tr > th,\n  .table-responsive > .table > thead > tr > td,\n  .table-responsive > .table > tbody > tr > td,\n  .table-responsive > .table > tfoot > tr > td {\n    white-space: nowrap;\n  }\n  .table-responsive > .table-bordered {\n    border: 0;\n  }\n  .table-responsive > .table-bordered > thead > tr > th:first-child,\n  .table-responsive > .table-bordered > tbody > tr > th:first-child,\n  .table-responsive > .table-bordered > tfoot > tr > th:first-child,\n  .table-responsive > .table-bordered > thead > tr > td:first-child,\n  .table-responsive > .table-bordered > tbody > tr > td:first-child,\n  .table-responsive > .table-bordered > tfoot > tr > td:first-child {\n    border-left: 0;\n  }\n  .table-responsive > .table-bordered > thead > tr > th:last-child,\n  .table-responsive > .table-bordered > tbody > tr > th:last-child,\n  .table-responsive > .table-bordered > tfoot > tr > th:last-child,\n  .table-responsive > .table-bordered > thead > tr > td:last-child,\n  .table-responsive > .table-bordered > tbody > tr > td:last-child,\n  .table-responsive > .table-bordered > tfoot > tr > td:last-child {\n    border-right: 0;\n  }\n  .table-responsive > .table-bordered > thead > tr:last-child > th,\n  .table-responsive > .table-bordered > tbody > tr:last-child > th,\n  .table-responsive > .table-bordered > tfoot > tr:last-child > th,\n  .table-responsive > .table-bordered > thead > tr:last-child > td,\n  .table-responsive > .table-bordered > tbody > tr:last-child > td,\n  .table-responsive > .table-bordered > tfoot > tr:last-child > td {\n    border-bottom: 0;\n  }\n}\n\nfieldset {\n  padding: 0;\n  margin: 0;\n  border: 0;\n}\n\nlegend {\n  display: block;\n  width: 100%;\n  padding: 0;\n  margin-bottom: 20px;\n  font-size: 21px;\n  line-height: inherit;\n  color: #333333;\n  border: 0;\n  border-bottom: 1px solid #e5e5e5;\n}\n\nlabel {\n  display: inline-block;\n  margin-bottom: 5px;\n  font-weight: bold;\n}\n\ninput[type=\"search\"] {\n  -webkit-box-sizing: border-box;\n     -moz-box-sizing: border-box;\n          box-sizing: border-box;\n}\n\ninput[type=\"radio\"],\ninput[type=\"checkbox\"] {\n  margin: 4px 0 0;\n  margin-top: 1px \\9;\n  /* IE8-9 */\n\n  line-height: normal;\n}\n\ninput[type=\"file\"] {\n  display: block;\n}\n\nselect[multiple],\nselect[size] {\n  height: auto;\n}\n\nselect optgroup {\n  font-family: inherit;\n  font-size: inherit;\n  font-style: inherit;\n}\n\ninput[type=\"file\"]:focus,\ninput[type=\"radio\"]:focus,\ninput[type=\"checkbox\"]:focus {\n  outline: thin dotted #333;\n  outline: 5px auto -webkit-focus-ring-color;\n  outline-offset: -2px;\n}\n\ninput[type=\"number\"]::-webkit-outer-spin-button,\ninput[type=\"number\"]::-webkit-inner-spin-button {\n  height: auto;\n}\n\n.form-control:-moz-placeholder {\n  color: #999999;\n}\n\n.form-control::-moz-placeholder {\n  color: #999999;\n}\n\n.form-control:-ms-input-placeholder {\n  color: #999999;\n}\n\n.form-control::-webkit-input-placeholder {\n  color: #999999;\n}\n\n.form-control {\n  display: block;\n  width: 100%;\n  height: 34px;\n  padding: 6px 12px;\n  font-size: 14px;\n  line-height: 1.428571429;\n  color: #555555;\n  vertical-align: middle;\n  background-color: #ffffff;\n  border: 1px solid #cccccc;\n  border-radius: 4px;\n  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n          box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n  -webkit-transition: border-color ease-in-out 0.15s, box-shadow ease-in-out 0.15s;\n          transition: border-color ease-in-out 0.15s, box-shadow ease-in-out 0.15s;\n}\n\n.form-control:focus {\n  border-color: #66afe9;\n  outline: 0;\n  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(102, 175, 233, 0.6);\n          box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(102, 175, 233, 0.6);\n}\n\n.form-control[disabled],\n.form-control[readonly],\nfieldset[disabled] .form-control {\n  cursor: not-allowed;\n  background-color: #eeeeee;\n}\n\ntextarea.form-control {\n  height: auto;\n}\n\n.form-group {\n  margin-bottom: 15px;\n}\n\n.radio,\n.checkbox {\n  display: block;\n  min-height: 20px;\n  padding-left: 20px;\n  margin-top: 10px;\n  margin-bottom: 10px;\n  vertical-align: middle;\n}\n\n.radio label,\n.checkbox label {\n  display: inline;\n  margin-bottom: 0;\n  font-weight: normal;\n  cursor: pointer;\n}\n\n.radio input[type=\"radio\"],\n.radio-inline input[type=\"radio\"],\n.checkbox input[type=\"checkbox\"],\n.checkbox-inline input[type=\"checkbox\"] {\n  float: left;\n  margin-left: -20px;\n}\n\n.radio + .radio,\n.checkbox + .checkbox {\n  margin-top: -5px;\n}\n\n.radio-inline,\n.checkbox-inline {\n  display: inline-block;\n  padding-left: 20px;\n  margin-bottom: 0;\n  font-weight: normal;\n  vertical-align: middle;\n  cursor: pointer;\n}\n\n.radio-inline + .radio-inline,\n.checkbox-inline + .checkbox-inline {\n  margin-top: 0;\n  margin-left: 10px;\n}\n\ninput[type=\"radio\"][disabled],\ninput[type=\"checkbox\"][disabled],\n.radio[disabled],\n.radio-inline[disabled],\n.checkbox[disabled],\n.checkbox-inline[disabled],\nfieldset[disabled] input[type=\"radio\"],\nfieldset[disabled] input[type=\"checkbox\"],\nfieldset[disabled] .radio,\nfieldset[disabled] .radio-inline,\nfieldset[disabled] .checkbox,\nfieldset[disabled] .checkbox-inline {\n  cursor: not-allowed;\n}\n\n.input-sm {\n  height: 30px;\n  padding: 5px 10px;\n  font-size: 12px;\n  line-height: 1.5;\n  border-radius: 3px;\n}\n\nselect.input-sm {\n  height: 30px;\n  line-height: 30px;\n}\n\ntextarea.input-sm {\n  height: auto;\n}\n\n.input-lg {\n  height: 45px;\n  padding: 10px 16px;\n  font-size: 18px;\n  line-height: 1.33;\n  border-radius: 6px;\n}\n\nselect.input-lg {\n  height: 45px;\n  line-height: 45px;\n}\n\ntextarea.input-lg {\n  height: auto;\n}\n\n.has-warning .help-block,\n.has-warning .control-label {\n  color: #c09853;\n}\n\n.has-warning .form-control {\n  border-color: #c09853;\n  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n          box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n}\n\n.has-warning .form-control:focus {\n  border-color: #a47e3c;\n  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #dbc59e;\n          box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #dbc59e;\n}\n\n.has-warning .input-group-addon {\n  color: #c09853;\n  background-color: #fcf8e3;\n  border-color: #c09853;\n}\n\n.has-error .help-block,\n.has-error .control-label {\n  color: #b94a48;\n}\n\n.has-error .form-control {\n  border-color: #b94a48;\n  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n          box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n}\n\n.has-error .form-control:focus {\n  border-color: #953b39;\n  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #d59392;\n          box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #d59392;\n}\n\n.has-error .input-group-addon {\n  color: #b94a48;\n  background-color: #f2dede;\n  border-color: #b94a48;\n}\n\n.has-success .help-block,\n.has-success .control-label {\n  color: #468847;\n}\n\n.has-success .form-control {\n  border-color: #468847;\n  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n          box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n}\n\n.has-success .form-control:focus {\n  border-color: #356635;\n  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #7aba7b;\n          box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #7aba7b;\n}\n\n.has-success .input-group-addon {\n  color: #468847;\n  background-color: #dff0d8;\n  border-color: #468847;\n}\n\n.form-control-static {\n  padding-top: 7px;\n  margin-bottom: 0;\n}\n\n.help-block {\n  display: block;\n  margin-top: 5px;\n  margin-bottom: 10px;\n  color: #737373;\n}\n\n@media (min-width: 768px) {\n  .form-inline .form-group {\n    display: inline-block;\n    margin-bottom: 0;\n    vertical-align: middle;\n  }\n  .form-inline .form-control {\n    display: inline-block;\n  }\n  .form-inline .radio,\n  .form-inline .checkbox {\n    display: inline-block;\n    padding-left: 0;\n    margin-top: 0;\n    margin-bottom: 0;\n  }\n  .form-inline .radio input[type=\"radio\"],\n  .form-inline .checkbox input[type=\"checkbox\"] {\n    float: none;\n    margin-left: 0;\n  }\n}\n\n.form-horizontal .control-label,\n.form-horizontal .radio,\n.form-horizontal .checkbox,\n.form-horizontal .radio-inline,\n.form-horizontal .checkbox-inline {\n  padding-top: 7px;\n  margin-top: 0;\n  margin-bottom: 0;\n}\n\n.form-horizontal .form-group {\n  margin-right: -15px;\n  margin-left: -15px;\n}\n\n.form-horizontal .form-group:before,\n.form-horizontal .form-group:after {\n  display: table;\n  content: \" \";\n}\n\n.form-horizontal .form-group:after {\n  clear: both;\n}\n\n.form-horizontal .form-group:before,\n.form-horizontal .form-group:after {\n  display: table;\n  content: \" \";\n}\n\n.form-horizontal .form-group:after {\n  clear: both;\n}\n\n@media (min-width: 768px) {\n  .form-horizontal .control-label {\n    text-align: right;\n  }\n}\n\n.btn {\n  display: inline-block;\n  padding: 6px 12px;\n  margin-bottom: 0;\n  font-size: 14px;\n  font-weight: normal;\n  line-height: 1.428571429;\n  text-align: center;\n  white-space: nowrap;\n  vertical-align: middle;\n  cursor: pointer;\n  border: 1px solid transparent;\n  border-radius: 4px;\n  -webkit-user-select: none;\n     -moz-user-select: none;\n      -ms-user-select: none;\n       -o-user-select: none;\n          user-select: none;\n}\n\n.btn:focus {\n  outline: thin dotted #333;\n  outline: 5px auto -webkit-focus-ring-color;\n  outline-offset: -2px;\n}\n\n.btn:hover,\n.btn:focus {\n  color: #333333;\n  text-decoration: none;\n}\n\n.btn:active,\n.btn.active {\n  background-image: none;\n  outline: 0;\n  -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n          box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n}\n\n.btn.disabled,\n.btn[disabled],\nfieldset[disabled] .btn {\n  pointer-events: none;\n  cursor: not-allowed;\n  opacity: 0.65;\n  filter: alpha(opacity=65);\n  -webkit-box-shadow: none;\n          box-shadow: none;\n}\n\n.btn-default {\n  color: #333333;\n  background-color: #ffffff;\n  border-color: #cccccc;\n}\n\n.btn-default:hover,\n.btn-default:focus,\n.btn-default:active,\n.btn-default.active,\n.open .dropdown-toggle.btn-default {\n  color: #333333;\n  background-color: #ebebeb;\n  border-color: #adadad;\n}\n\n.btn-default:active,\n.btn-default.active,\n.open .dropdown-toggle.btn-default {\n  background-image: none;\n}\n\n.btn-default.disabled,\n.btn-default[disabled],\nfieldset[disabled] .btn-default,\n.btn-default.disabled:hover,\n.btn-default[disabled]:hover,\nfieldset[disabled] .btn-default:hover,\n.btn-default.disabled:focus,\n.btn-default[disabled]:focus,\nfieldset[disabled] .btn-default:focus,\n.btn-default.disabled:active,\n.btn-default[disabled]:active,\nfieldset[disabled] .btn-default:active,\n.btn-default.disabled.active,\n.btn-default[disabled].active,\nfieldset[disabled] .btn-default.active {\n  background-color: #ffffff;\n  border-color: #cccccc;\n}\n\n.btn-primary {\n  color: #ffffff;\n  background-color: #428bca;\n  border-color: #357ebd;\n}\n\n.btn-primary:hover,\n.btn-primary:focus,\n.btn-primary:active,\n.btn-primary.active,\n.open .dropdown-toggle.btn-primary {\n  color: #ffffff;\n  background-color: #3276b1;\n  border-color: #285e8e;\n}\n\n.btn-primary:active,\n.btn-primary.active,\n.open .dropdown-toggle.btn-primary {\n  background-image: none;\n}\n\n.btn-primary.disabled,\n.btn-primary[disabled],\nfieldset[disabled] .btn-primary,\n.btn-primary.disabled:hover,\n.btn-primary[disabled]:hover,\nfieldset[disabled] .btn-primary:hover,\n.btn-primary.disabled:focus,\n.btn-primary[disabled]:focus,\nfieldset[disabled] .btn-primary:focus,\n.btn-primary.disabled:active,\n.btn-primary[disabled]:active,\nfieldset[disabled] .btn-primary:active,\n.btn-primary.disabled.active,\n.btn-primary[disabled].active,\nfieldset[disabled] .btn-primary.active {\n  background-color: #428bca;\n  border-color: #357ebd;\n}\n\n.btn-warning {\n  color: #ffffff;\n  background-color: #f0ad4e;\n  border-color: #eea236;\n}\n\n.btn-warning:hover,\n.btn-warning:focus,\n.btn-warning:active,\n.btn-warning.active,\n.open .dropdown-toggle.btn-warning {\n  color: #ffffff;\n  background-color: #ed9c28;\n  border-color: #d58512;\n}\n\n.btn-warning:active,\n.btn-warning.active,\n.open .dropdown-toggle.btn-warning {\n  background-image: none;\n}\n\n.btn-warning.disabled,\n.btn-warning[disabled],\nfieldset[disabled] .btn-warning,\n.btn-warning.disabled:hover,\n.btn-warning[disabled]:hover,\nfieldset[disabled] .btn-warning:hover,\n.btn-warning.disabled:focus,\n.btn-warning[disabled]:focus,\nfieldset[disabled] .btn-warning:focus,\n.btn-warning.disabled:active,\n.btn-warning[disabled]:active,\nfieldset[disabled] .btn-warning:active,\n.btn-warning.disabled.active,\n.btn-warning[disabled].active,\nfieldset[disabled] .btn-warning.active {\n  background-color: #f0ad4e;\n  border-color: #eea236;\n}\n\n.btn-danger {\n  color: #ffffff;\n  background-color: #d9534f;\n  border-color: #d43f3a;\n}\n\n.btn-danger:hover,\n.btn-danger:focus,\n.btn-danger:active,\n.btn-danger.active,\n.open .dropdown-toggle.btn-danger {\n  color: #ffffff;\n  background-color: #d2322d;\n  border-color: #ac2925;\n}\n\n.btn-danger:active,\n.btn-danger.active,\n.open .dropdown-toggle.btn-danger {\n  background-image: none;\n}\n\n.btn-danger.disabled,\n.btn-danger[disabled],\nfieldset[disabled] .btn-danger,\n.btn-danger.disabled:hover,\n.btn-danger[disabled]:hover,\nfieldset[disabled] .btn-danger:hover,\n.btn-danger.disabled:focus,\n.btn-danger[disabled]:focus,\nfieldset[disabled] .btn-danger:focus,\n.btn-danger.disabled:active,\n.btn-danger[disabled]:active,\nfieldset[disabled] .btn-danger:active,\n.btn-danger.disabled.active,\n.btn-danger[disabled].active,\nfieldset[disabled] .btn-danger.active {\n  background-color: #d9534f;\n  border-color: #d43f3a;\n}\n\n.btn-success {\n  color: #ffffff;\n  background-color: #5cb85c;\n  border-color: #4cae4c;\n}\n\n.btn-success:hover,\n.btn-success:focus,\n.btn-success:active,\n.btn-success.active,\n.open .dropdown-toggle.btn-success {\n  color: #ffffff;\n  background-color: #47a447;\n  border-color: #398439;\n}\n\n.btn-success:active,\n.btn-success.active,\n.open .dropdown-toggle.btn-success {\n  background-image: none;\n}\n\n.btn-success.disabled,\n.btn-success[disabled],\nfieldset[disabled] .btn-success,\n.btn-success.disabled:hover,\n.btn-success[disabled]:hover,\nfieldset[disabled] .btn-success:hover,\n.btn-success.disabled:focus,\n.btn-success[disabled]:focus,\nfieldset[disabled] .btn-success:focus,\n.btn-success.disabled:active,\n.btn-success[disabled]:active,\nfieldset[disabled] .btn-success:active,\n.btn-success.disabled.active,\n.btn-success[disabled].active,\nfieldset[disabled] .btn-success.active {\n  background-color: #5cb85c;\n  border-color: #4cae4c;\n}\n\n.btn-info {\n  color: #ffffff;\n  background-color: #5bc0de;\n  border-color: #46b8da;\n}\n\n.btn-info:hover,\n.btn-info:focus,\n.btn-info:active,\n.btn-info.active,\n.open .dropdown-toggle.btn-info {\n  color: #ffffff;\n  background-color: #39b3d7;\n  border-color: #269abc;\n}\n\n.btn-info:active,\n.btn-info.active,\n.open .dropdown-toggle.btn-info {\n  background-image: none;\n}\n\n.btn-info.disabled,\n.btn-info[disabled],\nfieldset[disabled] .btn-info,\n.btn-info.disabled:hover,\n.btn-info[disabled]:hover,\nfieldset[disabled] .btn-info:hover,\n.btn-info.disabled:focus,\n.btn-info[disabled]:focus,\nfieldset[disabled] .btn-info:focus,\n.btn-info.disabled:active,\n.btn-info[disabled]:active,\nfieldset[disabled] .btn-info:active,\n.btn-info.disabled.active,\n.btn-info[disabled].active,\nfieldset[disabled] .btn-info.active {\n  background-color: #5bc0de;\n  border-color: #46b8da;\n}\n\n.btn-link {\n  font-weight: normal;\n  color: #428bca;\n  cursor: pointer;\n  border-radius: 0;\n}\n\n.btn-link,\n.btn-link:active,\n.btn-link[disabled],\nfieldset[disabled] .btn-link {\n  background-color: transparent;\n  -webkit-box-shadow: none;\n          box-shadow: none;\n}\n\n.btn-link,\n.btn-link:hover,\n.btn-link:focus,\n.btn-link:active {\n  border-color: transparent;\n}\n\n.btn-link:hover,\n.btn-link:focus {\n  color: #2a6496;\n  text-decoration: underline;\n  background-color: transparent;\n}\n\n.btn-link[disabled]:hover,\nfieldset[disabled] .btn-link:hover,\n.btn-link[disabled]:focus,\nfieldset[disabled] .btn-link:focus {\n  color: #999999;\n  text-decoration: none;\n}\n\n.btn-lg {\n  padding: 10px 16px;\n  font-size: 18px;\n  line-height: 1.33;\n  border-radius: 6px;\n}\n\n.btn-sm,\n.btn-xs {\n  padding: 5px 10px;\n  font-size: 12px;\n  line-height: 1.5;\n  border-radius: 3px;\n}\n\n.btn-xs {\n  padding: 1px 5px;\n}\n\n.btn-block {\n  display: block;\n  width: 100%;\n  padding-right: 0;\n  padding-left: 0;\n}\n\n.btn-block + .btn-block {\n  margin-top: 5px;\n}\n\ninput[type=\"submit\"].btn-block,\ninput[type=\"reset\"].btn-block,\ninput[type=\"button\"].btn-block {\n  width: 100%;\n}\n\n.fade {\n  opacity: 0;\n  -webkit-transition: opacity 0.15s linear;\n          transition: opacity 0.15s linear;\n}\n\n.fade.in {\n  opacity: 1;\n}\n\n.collapse {\n  display: none;\n}\n\n.collapse.in {\n  display: block;\n}\n\n.collapsing {\n  position: relative;\n  height: 0;\n  overflow: hidden;\n  -webkit-transition: height 0.35s ease;\n          transition: height 0.35s ease;\n}\n\n@font-face {\n  font-family: 'Glyphicons Halflings';\n  src: url('../fonts/glyphicons-halflings-regular.eot');\n  src: url('../fonts/glyphicons-halflings-regular.eot?#iefix') format('embedded-opentype'), url('../fonts/glyphicons-halflings-regular.woff') format('woff'), url('../fonts/glyphicons-halflings-regular.ttf') format('truetype'), url('../fonts/glyphicons-halflings-regular.svg#glyphicons-halflingsregular') format('svg');\n}\n\n.glyphicon {\n  position: relative;\n  top: 1px;\n  display: inline-block;\n  font-family: 'Glyphicons Halflings';\n  -webkit-font-smoothing: antialiased;\n  font-style: normal;\n  font-weight: normal;\n  line-height: 1;\n}\n\n.glyphicon-asterisk:before {\n  content: \"\\2a\";\n}\n\n.glyphicon-plus:before {\n  content: \"\\2b\";\n}\n\n.glyphicon-euro:before {\n  content: \"\\20ac\";\n}\n\n.glyphicon-minus:before {\n  content: \"\\2212\";\n}\n\n.glyphicon-cloud:before {\n  content: \"\\2601\";\n}\n\n.glyphicon-envelope:before {\n  content: \"\\2709\";\n}\n\n.glyphicon-pencil:before {\n  content: \"\\270f\";\n}\n\n.glyphicon-glass:before {\n  content: \"\\e001\";\n}\n\n.glyphicon-music:before {\n  content: \"\\e002\";\n}\n\n.glyphicon-search:before {\n  content: \"\\e003\";\n}\n\n.glyphicon-heart:before {\n  content: \"\\e005\";\n}\n\n.glyphicon-star:before {\n  content: \"\\e006\";\n}\n\n.glyphicon-star-empty:before {\n  content: \"\\e007\";\n}\n\n.glyphicon-user:before {\n  content: \"\\e008\";\n}\n\n.glyphicon-film:before {\n  content: \"\\e009\";\n}\n\n.glyphicon-th-large:before {\n  content: \"\\e010\";\n}\n\n.glyphicon-th:before {\n  content: \"\\e011\";\n}\n\n.glyphicon-th-list:before {\n  content: \"\\e012\";\n}\n\n.glyphicon-ok:before {\n  content: \"\\e013\";\n}\n\n.glyphicon-remove:before {\n  content: \"\\e014\";\n}\n\n.glyphicon-zoom-in:before {\n  content: \"\\e015\";\n}\n\n.glyphicon-zoom-out:before {\n  content: \"\\e016\";\n}\n\n.glyphicon-off:before {\n  content: \"\\e017\";\n}\n\n.glyphicon-signal:before {\n  content: \"\\e018\";\n}\n\n.glyphicon-cog:before {\n  content: \"\\e019\";\n}\n\n.glyphicon-trash:before {\n  content: \"\\e020\";\n}\n\n.glyphicon-home:before {\n  content: \"\\e021\";\n}\n\n.glyphicon-file:before {\n  content: \"\\e022\";\n}\n\n.glyphicon-time:before {\n  content: \"\\e023\";\n}\n\n.glyphicon-road:before {\n  content: \"\\e024\";\n}\n\n.glyphicon-download-alt:before {\n  content: \"\\e025\";\n}\n\n.glyphicon-download:before {\n  content: \"\\e026\";\n}\n\n.glyphicon-upload:before {\n  content: \"\\e027\";\n}\n\n.glyphicon-inbox:before {\n  content: \"\\e028\";\n}\n\n.glyphicon-play-circle:before {\n  content: \"\\e029\";\n}\n\n.glyphicon-repeat:before {\n  content: \"\\e030\";\n}\n\n.glyphicon-refresh:before {\n  content: \"\\e031\";\n}\n\n.glyphicon-list-alt:before {\n  content: \"\\e032\";\n}\n\n.glyphicon-flag:before {\n  content: \"\\e034\";\n}\n\n.glyphicon-headphones:before {\n  content: \"\\e035\";\n}\n\n.glyphicon-volume-off:before {\n  content: \"\\e036\";\n}\n\n.glyphicon-volume-down:before {\n  content: \"\\e037\";\n}\n\n.glyphicon-volume-up:before {\n  content: \"\\e038\";\n}\n\n.glyphicon-qrcode:before {\n  content: \"\\e039\";\n}\n\n.glyphicon-barcode:before {\n  content: \"\\e040\";\n}\n\n.glyphicon-tag:before {\n  content: \"\\e041\";\n}\n\n.glyphicon-tags:before {\n  content: \"\\e042\";\n}\n\n.glyphicon-book:before {\n  content: \"\\e043\";\n}\n\n.glyphicon-print:before {\n  content: \"\\e045\";\n}\n\n.glyphicon-font:before {\n  content: \"\\e047\";\n}\n\n.glyphicon-bold:before {\n  content: \"\\e048\";\n}\n\n.glyphicon-italic:before {\n  content: \"\\e049\";\n}\n\n.glyphicon-text-height:before {\n  content: \"\\e050\";\n}\n\n.glyphicon-text-width:before {\n  content: \"\\e051\";\n}\n\n.glyphicon-align-left:before {\n  content: \"\\e052\";\n}\n\n.glyphicon-align-center:before {\n  content: \"\\e053\";\n}\n\n.glyphicon-align-right:before {\n  content: \"\\e054\";\n}\n\n.glyphicon-align-justify:before {\n  content: \"\\e055\";\n}\n\n.glyphicon-list:before {\n  content: \"\\e056\";\n}\n\n.glyphicon-indent-left:before {\n  content: \"\\e057\";\n}\n\n.glyphicon-indent-right:before {\n  content: \"\\e058\";\n}\n\n.glyphicon-facetime-video:before {\n  content: \"\\e059\";\n}\n\n.glyphicon-picture:before {\n  content: \"\\e060\";\n}\n\n.glyphicon-map-marker:before {\n  content: \"\\e062\";\n}\n\n.glyphicon-adjust:before {\n  content: \"\\e063\";\n}\n\n.glyphicon-tint:before {\n  content: \"\\e064\";\n}\n\n.glyphicon-edit:before {\n  content: \"\\e065\";\n}\n\n.glyphicon-share:before {\n  content: \"\\e066\";\n}\n\n.glyphicon-check:before {\n  content: \"\\e067\";\n}\n\n.glyphicon-move:before {\n  content: \"\\e068\";\n}\n\n.glyphicon-step-backward:before {\n  content: \"\\e069\";\n}\n\n.glyphicon-fast-backward:before {\n  content: \"\\e070\";\n}\n\n.glyphicon-backward:before {\n  content: \"\\e071\";\n}\n\n.glyphicon-play:before {\n  content: \"\\e072\";\n}\n\n.glyphicon-pause:before {\n  content: \"\\e073\";\n}\n\n.glyphicon-stop:before {\n  content: \"\\e074\";\n}\n\n.glyphicon-forward:before {\n  content: \"\\e075\";\n}\n\n.glyphicon-fast-forward:before {\n  content: \"\\e076\";\n}\n\n.glyphicon-step-forward:before {\n  content: \"\\e077\";\n}\n\n.glyphicon-eject:before {\n  content: \"\\e078\";\n}\n\n.glyphicon-chevron-left:before {\n  content: \"\\e079\";\n}\n\n.glyphicon-chevron-right:before {\n  content: \"\\e080\";\n}\n\n.glyphicon-plus-sign:before {\n  content: \"\\e081\";\n}\n\n.glyphicon-minus-sign:before {\n  content: \"\\e082\";\n}\n\n.glyphicon-remove-sign:before {\n  content: \"\\e083\";\n}\n\n.glyphicon-ok-sign:before {\n  content: \"\\e084\";\n}\n\n.glyphicon-question-sign:before {\n  content: \"\\e085\";\n}\n\n.glyphicon-info-sign:before {\n  content: \"\\e086\";\n}\n\n.glyphicon-screenshot:before {\n  content: \"\\e087\";\n}\n\n.glyphicon-remove-circle:before {\n  content: \"\\e088\";\n}\n\n.glyphicon-ok-circle:before {\n  content: \"\\e089\";\n}\n\n.glyphicon-ban-circle:before {\n  content: \"\\e090\";\n}\n\n.glyphicon-arrow-left:before {\n  content: \"\\e091\";\n}\n\n.glyphicon-arrow-right:before {\n  content: \"\\e092\";\n}\n\n.glyphicon-arrow-up:before {\n  content: \"\\e093\";\n}\n\n.glyphicon-arrow-down:before {\n  content: \"\\e094\";\n}\n\n.glyphicon-share-alt:before {\n  content: \"\\e095\";\n}\n\n.glyphicon-resize-full:before {\n  content: \"\\e096\";\n}\n\n.glyphicon-resize-small:before {\n  content: \"\\e097\";\n}\n\n.glyphicon-exclamation-sign:before {\n  content: \"\\e101\";\n}\n\n.glyphicon-gift:before {\n  content: \"\\e102\";\n}\n\n.glyphicon-leaf:before {\n  content: \"\\e103\";\n}\n\n.glyphicon-eye-open:before {\n  content: \"\\e105\";\n}\n\n.glyphicon-eye-close:before {\n  content: \"\\e106\";\n}\n\n.glyphicon-warning-sign:before {\n  content: \"\\e107\";\n}\n\n.glyphicon-plane:before {\n  content: \"\\e108\";\n}\n\n.glyphicon-random:before {\n  content: \"\\e110\";\n}\n\n.glyphicon-comment:before {\n  content: \"\\e111\";\n}\n\n.glyphicon-magnet:before {\n  content: \"\\e112\";\n}\n\n.glyphicon-chevron-up:before {\n  content: \"\\e113\";\n}\n\n.glyphicon-chevron-down:before {\n  content: \"\\e114\";\n}\n\n.glyphicon-retweet:before {\n  content: \"\\e115\";\n}\n\n.glyphicon-shopping-cart:before {\n  content: \"\\e116\";\n}\n\n.glyphicon-folder-close:before {\n  content: \"\\e117\";\n}\n\n.glyphicon-folder-open:before {\n  content: \"\\e118\";\n}\n\n.glyphicon-resize-vertical:before {\n  content: \"\\e119\";\n}\n\n.glyphicon-resize-horizontal:before {\n  content: \"\\e120\";\n}\n\n.glyphicon-hdd:before {\n  content: \"\\e121\";\n}\n\n.glyphicon-bullhorn:before {\n  content: \"\\e122\";\n}\n\n.glyphicon-certificate:before {\n  content: \"\\e124\";\n}\n\n.glyphicon-thumbs-up:before {\n  content: \"\\e125\";\n}\n\n.glyphicon-thumbs-down:before {\n  content: \"\\e126\";\n}\n\n.glyphicon-hand-right:before {\n  content: \"\\e127\";\n}\n\n.glyphicon-hand-left:before {\n  content: \"\\e128\";\n}\n\n.glyphicon-hand-up:before {\n  content: \"\\e129\";\n}\n\n.glyphicon-hand-down:before {\n  content: \"\\e130\";\n}\n\n.glyphicon-circle-arrow-right:before {\n  content: \"\\e131\";\n}\n\n.glyphicon-circle-arrow-left:before {\n  content: \"\\e132\";\n}\n\n.glyphicon-circle-arrow-up:before {\n  content: \"\\e133\";\n}\n\n.glyphicon-circle-arrow-down:before {\n  content: \"\\e134\";\n}\n\n.glyphicon-globe:before {\n  content: \"\\e135\";\n}\n\n.glyphicon-tasks:before {\n  content: \"\\e137\";\n}\n\n.glyphicon-filter:before {\n  content: \"\\e138\";\n}\n\n.glyphicon-fullscreen:before {\n  content: \"\\e140\";\n}\n\n.glyphicon-dashboard:before {\n  content: \"\\e141\";\n}\n\n.glyphicon-heart-empty:before {\n  content: \"\\e143\";\n}\n\n.glyphicon-link:before {\n  content: \"\\e144\";\n}\n\n.glyphicon-phone:before {\n  content: \"\\e145\";\n}\n\n.glyphicon-usd:before {\n  content: \"\\e148\";\n}\n\n.glyphicon-gbp:before {\n  content: \"\\e149\";\n}\n\n.glyphicon-sort:before {\n  content: \"\\e150\";\n}\n\n.glyphicon-sort-by-alphabet:before {\n  content: \"\\e151\";\n}\n\n.glyphicon-sort-by-alphabet-alt:before {\n  content: \"\\e152\";\n}\n\n.glyphicon-sort-by-order:before {\n  content: \"\\e153\";\n}\n\n.glyphicon-sort-by-order-alt:before {\n  content: \"\\e154\";\n}\n\n.glyphicon-sort-by-attributes:before {\n  content: \"\\e155\";\n}\n\n.glyphicon-sort-by-attributes-alt:before {\n  content: \"\\e156\";\n}\n\n.glyphicon-unchecked:before {\n  content: \"\\e157\";\n}\n\n.glyphicon-expand:before {\n  content: \"\\e158\";\n}\n\n.glyphicon-collapse-down:before {\n  content: \"\\e159\";\n}\n\n.glyphicon-collapse-up:before {\n  content: \"\\e160\";\n}\n\n.glyphicon-log-in:before {\n  content: \"\\e161\";\n}\n\n.glyphicon-flash:before {\n  content: \"\\e162\";\n}\n\n.glyphicon-log-out:before {\n  content: \"\\e163\";\n}\n\n.glyphicon-new-window:before {\n  content: \"\\e164\";\n}\n\n.glyphicon-record:before {\n  content: \"\\e165\";\n}\n\n.glyphicon-save:before {\n  content: \"\\e166\";\n}\n\n.glyphicon-open:before {\n  content: \"\\e167\";\n}\n\n.glyphicon-saved:before {\n  content: \"\\e168\";\n}\n\n.glyphicon-import:before {\n  content: \"\\e169\";\n}\n\n.glyphicon-export:before {\n  content: \"\\e170\";\n}\n\n.glyphicon-send:before {\n  content: \"\\e171\";\n}\n\n.glyphicon-floppy-disk:before {\n  content: \"\\e172\";\n}\n\n.glyphicon-floppy-saved:before {\n  content: \"\\e173\";\n}\n\n.glyphicon-floppy-remove:before {\n  content: \"\\e174\";\n}\n\n.glyphicon-floppy-save:before {\n  content: \"\\e175\";\n}\n\n.glyphicon-floppy-open:before {\n  content: \"\\e176\";\n}\n\n.glyphicon-credit-card:before {\n  content: \"\\e177\";\n}\n\n.glyphicon-transfer:before {\n  content: \"\\e178\";\n}\n\n.glyphicon-cutlery:before {\n  content: \"\\e179\";\n}\n\n.glyphicon-header:before {\n  content: \"\\e180\";\n}\n\n.glyphicon-compressed:before {\n  content: \"\\e181\";\n}\n\n.glyphicon-earphone:before {\n  content: \"\\e182\";\n}\n\n.glyphicon-phone-alt:before {\n  content: \"\\e183\";\n}\n\n.glyphicon-tower:before {\n  content: \"\\e184\";\n}\n\n.glyphicon-stats:before {\n  content: \"\\e185\";\n}\n\n.glyphicon-sd-video:before {\n  content: \"\\e186\";\n}\n\n.glyphicon-hd-video:before {\n  content: \"\\e187\";\n}\n\n.glyphicon-subtitles:before {\n  content: \"\\e188\";\n}\n\n.glyphicon-sound-stereo:before {\n  content: \"\\e189\";\n}\n\n.glyphicon-sound-dolby:before {\n  content: \"\\e190\";\n}\n\n.glyphicon-sound-5-1:before {\n  content: \"\\e191\";\n}\n\n.glyphicon-sound-6-1:before {\n  content: \"\\e192\";\n}\n\n.glyphicon-sound-7-1:before {\n  content: \"\\e193\";\n}\n\n.glyphicon-copyright-mark:before {\n  content: \"\\e194\";\n}\n\n.glyphicon-registration-mark:before {\n  content: \"\\e195\";\n}\n\n.glyphicon-cloud-download:before {\n  content: \"\\e197\";\n}\n\n.glyphicon-cloud-upload:before {\n  content: \"\\e198\";\n}\n\n.glyphicon-tree-conifer:before {\n  content: \"\\e199\";\n}\n\n.glyphicon-tree-deciduous:before {\n  content: \"\\e200\";\n}\n\n.glyphicon-briefcase:before {\n  content: \"\\1f4bc\";\n}\n\n.glyphicon-calendar:before {\n  content: \"\\1f4c5\";\n}\n\n.glyphicon-pushpin:before {\n  content: \"\\1f4cc\";\n}\n\n.glyphicon-paperclip:before {\n  content: \"\\1f4ce\";\n}\n\n.glyphicon-camera:before {\n  content: \"\\1f4f7\";\n}\n\n.glyphicon-lock:before {\n  content: \"\\1f512\";\n}\n\n.glyphicon-bell:before {\n  content: \"\\1f514\";\n}\n\n.glyphicon-bookmark:before {\n  content: \"\\1f516\";\n}\n\n.glyphicon-fire:before {\n  content: \"\\1f525\";\n}\n\n.glyphicon-wrench:before {\n  content: \"\\1f527\";\n}\n\n.caret {\n  display: inline-block;\n  width: 0;\n  height: 0;\n  margin-left: 2px;\n  vertical-align: middle;\n  border-top: 4px solid #000000;\n  border-right: 4px solid transparent;\n  border-bottom: 0 dotted;\n  border-left: 4px solid transparent;\n  content: \"\";\n}\n\n.dropdown {\n  position: relative;\n}\n\n.dropdown-toggle:focus {\n  outline: 0;\n}\n\n.dropdown-menu {\n  position: absolute;\n  top: 100%;\n  left: 0;\n  z-index: 1000;\n  display: none;\n  float: left;\n  min-width: 160px;\n  padding: 5px 0;\n  margin: 2px 0 0;\n  font-size: 14px;\n  list-style: none;\n  background-color: #ffffff;\n  border: 1px solid #cccccc;\n  border: 1px solid rgba(0, 0, 0, 0.15);\n  border-radius: 4px;\n  -webkit-box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175);\n          box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175);\n  background-clip: padding-box;\n}\n\n.dropdown-menu.pull-right {\n  right: 0;\n  left: auto;\n}\n\n.dropdown-menu .divider {\n  height: 1px;\n  margin: 9px 0;\n  overflow: hidden;\n  background-color: #e5e5e5;\n}\n\n.dropdown-menu > li > a {\n  display: block;\n  padding: 3px 20px;\n  clear: both;\n  font-weight: normal;\n  line-height: 1.428571429;\n  color: #333333;\n  white-space: nowrap;\n}\n\n.dropdown-menu > li > a:hover,\n.dropdown-menu > li > a:focus {\n  color: #ffffff;\n  text-decoration: none;\n  background-color: #428bca;\n}\n\n.dropdown-menu > .active > a,\n.dropdown-menu > .active > a:hover,\n.dropdown-menu > .active > a:focus {\n  color: #ffffff;\n  text-decoration: none;\n  background-color: #428bca;\n  outline: 0;\n}\n\n.dropdown-menu > .disabled > a,\n.dropdown-menu > .disabled > a:hover,\n.dropdown-menu > .disabled > a:focus {\n  color: #999999;\n}\n\n.dropdown-menu > .disabled > a:hover,\n.dropdown-menu > .disabled > a:focus {\n  text-decoration: none;\n  cursor: not-allowed;\n  background-color: transparent;\n  background-image: none;\n  filter: progid:DXImageTransform.Microsoft.gradient(enabled=false);\n}\n\n.open > .dropdown-menu {\n  display: block;\n}\n\n.open > a {\n  outline: 0;\n}\n\n.dropdown-header {\n  display: block;\n  padding: 3px 20px;\n  font-size: 12px;\n  line-height: 1.428571429;\n  color: #999999;\n}\n\n.dropdown-backdrop {\n  position: fixed;\n  top: 0;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  z-index: 990;\n}\n\n.pull-right > .dropdown-menu {\n  right: 0;\n  left: auto;\n}\n\n.dropup .caret,\n.navbar-fixed-bottom .dropdown .caret {\n  border-top: 0 dotted;\n  border-bottom: 4px solid #000000;\n  content: \"\";\n}\n\n.dropup .dropdown-menu,\n.navbar-fixed-bottom .dropdown .dropdown-menu {\n  top: auto;\n  bottom: 100%;\n  margin-bottom: 1px;\n}\n\n@media (min-width: 768px) {\n  .navbar-right .dropdown-menu {\n    right: 0;\n    left: auto;\n  }\n}\n\n.btn-default .caret {\n  border-top-color: #333333;\n}\n\n.btn-primary .caret,\n.btn-success .caret,\n.btn-warning .caret,\n.btn-danger .caret,\n.btn-info .caret {\n  border-top-color: #fff;\n}\n\n.dropup .btn-default .caret {\n  border-bottom-color: #333333;\n}\n\n.dropup .btn-primary .caret,\n.dropup .btn-success .caret,\n.dropup .btn-warning .caret,\n.dropup .btn-danger .caret,\n.dropup .btn-info .caret {\n  border-bottom-color: #fff;\n}\n\n.btn-group,\n.btn-group-vertical {\n  position: relative;\n  display: inline-block;\n  vertical-align: middle;\n}\n\n.btn-group > .btn,\n.btn-group-vertical > .btn {\n  position: relative;\n  float: left;\n}\n\n.btn-group > .btn:hover,\n.btn-group-vertical > .btn:hover,\n.btn-group > .btn:focus,\n.btn-group-vertical > .btn:focus,\n.btn-group > .btn:active,\n.btn-group-vertical > .btn:active,\n.btn-group > .btn.active,\n.btn-group-vertical > .btn.active {\n  z-index: 2;\n}\n\n.btn-group > .btn:focus,\n.btn-group-vertical > .btn:focus {\n  outline: none;\n}\n\n.btn-group .btn + .btn,\n.btn-group .btn + .btn-group,\n.btn-group .btn-group + .btn,\n.btn-group .btn-group + .btn-group {\n  margin-left: -1px;\n}\n\n.btn-toolbar:before,\n.btn-toolbar:after {\n  display: table;\n  content: \" \";\n}\n\n.btn-toolbar:after {\n  clear: both;\n}\n\n.btn-toolbar:before,\n.btn-toolbar:after {\n  display: table;\n  content: \" \";\n}\n\n.btn-toolbar:after {\n  clear: both;\n}\n\n.btn-toolbar .btn-group {\n  float: left;\n}\n\n.btn-toolbar > .btn + .btn,\n.btn-toolbar > .btn-group + .btn,\n.btn-toolbar > .btn + .btn-group,\n.btn-toolbar > .btn-group + .btn-group {\n  margin-left: 5px;\n}\n\n.btn-group > .btn:not(:first-child):not(:last-child):not(.dropdown-toggle) {\n  border-radius: 0;\n}\n\n.btn-group > .btn:first-child {\n  margin-left: 0;\n}\n\n.btn-group > .btn:first-child:not(:last-child):not(.dropdown-toggle) {\n  border-top-right-radius: 0;\n  border-bottom-right-radius: 0;\n}\n\n.btn-group > .btn:last-child:not(:first-child),\n.btn-group > .dropdown-toggle:not(:first-child) {\n  border-bottom-left-radius: 0;\n  border-top-left-radius: 0;\n}\n\n.btn-group > .btn-group {\n  float: left;\n}\n\n.btn-group > .btn-group:not(:first-child):not(:last-child) > .btn {\n  border-radius: 0;\n}\n\n.btn-group > .btn-group:first-child > .btn:last-child,\n.btn-group > .btn-group:first-child > .dropdown-toggle {\n  border-top-right-radius: 0;\n  border-bottom-right-radius: 0;\n}\n\n.btn-group > .btn-group:last-child > .btn:first-child {\n  border-bottom-left-radius: 0;\n  border-top-left-radius: 0;\n}\n\n.btn-group .dropdown-toggle:active,\n.btn-group.open .dropdown-toggle {\n  outline: 0;\n}\n\n.btn-group-xs > .btn {\n  padding: 5px 10px;\n  padding: 1px 5px;\n  font-size: 12px;\n  line-height: 1.5;\n  border-radius: 3px;\n}\n\n.btn-group-sm > .btn {\n  padding: 5px 10px;\n  font-size: 12px;\n  line-height: 1.5;\n  border-radius: 3px;\n}\n\n.btn-group-lg > .btn {\n  padding: 10px 16px;\n  font-size: 18px;\n  line-height: 1.33;\n  border-radius: 6px;\n}\n\n.btn-group > .btn + .dropdown-toggle {\n  padding-right: 8px;\n  padding-left: 8px;\n}\n\n.btn-group > .btn-lg + .dropdown-toggle {\n  padding-right: 12px;\n  padding-left: 12px;\n}\n\n.btn-group.open .dropdown-toggle {\n  -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n          box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n}\n\n.btn .caret {\n  margin-left: 0;\n}\n\n.btn-lg .caret {\n  border-width: 5px 5px 0;\n  border-bottom-width: 0;\n}\n\n.dropup .btn-lg .caret {\n  border-width: 0 5px 5px;\n}\n\n.btn-group-vertical > .btn,\n.btn-group-vertical > .btn-group {\n  display: block;\n  float: none;\n  width: 100%;\n  max-width: 100%;\n}\n\n.btn-group-vertical > .btn-group:before,\n.btn-group-vertical > .btn-group:after {\n  display: table;\n  content: \" \";\n}\n\n.btn-group-vertical > .btn-group:after {\n  clear: both;\n}\n\n.btn-group-vertical > .btn-group:before,\n.btn-group-vertical > .btn-group:after {\n  display: table;\n  content: \" \";\n}\n\n.btn-group-vertical > .btn-group:after {\n  clear: both;\n}\n\n.btn-group-vertical > .btn-group > .btn {\n  float: none;\n}\n\n.btn-group-vertical > .btn + .btn,\n.btn-group-vertical > .btn + .btn-group,\n.btn-group-vertical > .btn-group + .btn,\n.btn-group-vertical > .btn-group + .btn-group {\n  margin-top: -1px;\n  margin-left: 0;\n}\n\n.btn-group-vertical > .btn:not(:first-child):not(:last-child) {\n  border-radius: 0;\n}\n\n.btn-group-vertical > .btn:first-child:not(:last-child) {\n  border-top-right-radius: 4px;\n  border-bottom-right-radius: 0;\n  border-bottom-left-radius: 0;\n}\n\n.btn-group-vertical > .btn:last-child:not(:first-child) {\n  border-top-right-radius: 0;\n  border-bottom-left-radius: 4px;\n  border-top-left-radius: 0;\n}\n\n.btn-group-vertical > .btn-group:not(:first-child):not(:last-child) > .btn {\n  border-radius: 0;\n}\n\n.btn-group-vertical > .btn-group:first-child > .btn:last-child,\n.btn-group-vertical > .btn-group:first-child > .dropdown-toggle {\n  border-bottom-right-radius: 0;\n  border-bottom-left-radius: 0;\n}\n\n.btn-group-vertical > .btn-group:last-child > .btn:first-child {\n  border-top-right-radius: 0;\n  border-top-left-radius: 0;\n}\n\n.btn-group-justified {\n  display: table;\n  width: 100%;\n  border-collapse: separate;\n  table-layout: fixed;\n}\n\n.btn-group-justified .btn {\n  display: table-cell;\n  float: none;\n  width: 1%;\n}\n\n[data-toggle=\"buttons\"] > .btn > input[type=\"radio\"],\n[data-toggle=\"buttons\"] > .btn > input[type=\"checkbox\"] {\n  display: none;\n}\n\n.input-group {\n  position: relative;\n  display: table;\n  border-collapse: separate;\n}\n\n.input-group.col {\n  float: none;\n  padding-right: 0;\n  padding-left: 0;\n}\n\n.input-group .form-control {\n  width: 100%;\n  margin-bottom: 0;\n}\n\n.input-group-lg > .form-control,\n.input-group-lg > .input-group-addon,\n.input-group-lg > .input-group-btn > .btn {\n  height: 45px;\n  padding: 10px 16px;\n  font-size: 18px;\n  line-height: 1.33;\n  border-radius: 6px;\n}\n\nselect.input-group-lg > .form-control,\nselect.input-group-lg > .input-group-addon,\nselect.input-group-lg > .input-group-btn > .btn {\n  height: 45px;\n  line-height: 45px;\n}\n\ntextarea.input-group-lg > .form-control,\ntextarea.input-group-lg > .input-group-addon,\ntextarea.input-group-lg > .input-group-btn > .btn {\n  height: auto;\n}\n\n.input-group-sm > .form-control,\n.input-group-sm > .input-group-addon,\n.input-group-sm > .input-group-btn > .btn {\n  height: 30px;\n  padding: 5px 10px;\n  font-size: 12px;\n  line-height: 1.5;\n  border-radius: 3px;\n}\n\nselect.input-group-sm > .form-control,\nselect.input-group-sm > .input-group-addon,\nselect.input-group-sm > .input-group-btn > .btn {\n  height: 30px;\n  line-height: 30px;\n}\n\ntextarea.input-group-sm > .form-control,\ntextarea.input-group-sm > .input-group-addon,\ntextarea.input-group-sm > .input-group-btn > .btn {\n  height: auto;\n}\n\n.input-group-addon,\n.input-group-btn,\n.input-group .form-control {\n  display: table-cell;\n}\n\n.input-group-addon:not(:first-child):not(:last-child),\n.input-group-btn:not(:first-child):not(:last-child),\n.input-group .form-control:not(:first-child):not(:last-child) {\n  border-radius: 0;\n}\n\n.input-group-addon,\n.input-group-btn {\n  width: 1%;\n  white-space: nowrap;\n  vertical-align: middle;\n}\n\n.input-group-addon {\n  padding: 6px 12px;\n  font-size: 14px;\n  font-weight: normal;\n  line-height: 1;\n  text-align: center;\n  background-color: #eeeeee;\n  border: 1px solid #cccccc;\n  border-radius: 4px;\n}\n\n.input-group-addon.input-sm {\n  padding: 5px 10px;\n  font-size: 12px;\n  border-radius: 3px;\n}\n\n.input-group-addon.input-lg {\n  padding: 10px 16px;\n  font-size: 18px;\n  border-radius: 6px;\n}\n\n.input-group-addon input[type=\"radio\"],\n.input-group-addon input[type=\"checkbox\"] {\n  margin-top: 0;\n}\n\n.input-group .form-control:first-child,\n.input-group-addon:first-child,\n.input-group-btn:first-child > .btn,\n.input-group-btn:first-child > .dropdown-toggle,\n.input-group-btn:last-child > .btn:not(:last-child):not(.dropdown-toggle) {\n  border-top-right-radius: 0;\n  border-bottom-right-radius: 0;\n}\n\n.input-group-addon:first-child {\n  border-right: 0;\n}\n\n.input-group .form-control:last-child,\n.input-group-addon:last-child,\n.input-group-btn:last-child > .btn,\n.input-group-btn:last-child > .dropdown-toggle,\n.input-group-btn:first-child > .btn:not(:first-child) {\n  border-bottom-left-radius: 0;\n  border-top-left-radius: 0;\n}\n\n.input-group-addon:last-child {\n  border-left: 0;\n}\n\n.input-group-btn {\n  position: relative;\n  white-space: nowrap;\n}\n\n.input-group-btn > .btn {\n  position: relative;\n}\n\n.input-group-btn > .btn + .btn {\n  margin-left: -4px;\n}\n\n.input-group-btn > .btn:hover,\n.input-group-btn > .btn:active {\n  z-index: 2;\n}\n\n.nav {\n  padding-left: 0;\n  margin-bottom: 0;\n  list-style: none;\n}\n\n.nav:before,\n.nav:after {\n  display: table;\n  content: \" \";\n}\n\n.nav:after {\n  clear: both;\n}\n\n.nav:before,\n.nav:after {\n  display: table;\n  content: \" \";\n}\n\n.nav:after {\n  clear: both;\n}\n\n.nav > li {\n  position: relative;\n  display: block;\n}\n\n.nav > li > a {\n  position: relative;\n  display: block;\n  padding: 10px 15px;\n}\n\n.nav > li > a:hover,\n.nav > li > a:focus {\n  text-decoration: none;\n  background-color: #eeeeee;\n}\n\n.nav > li.disabled > a {\n  color: #999999;\n}\n\n.nav > li.disabled > a:hover,\n.nav > li.disabled > a:focus {\n  color: #999999;\n  text-decoration: none;\n  cursor: not-allowed;\n  background-color: transparent;\n}\n\n.nav .open > a,\n.nav .open > a:hover,\n.nav .open > a:focus {\n  background-color: #eeeeee;\n  border-color: #428bca;\n}\n\n.nav .nav-divider {\n  height: 1px;\n  margin: 9px 0;\n  overflow: hidden;\n  background-color: #e5e5e5;\n}\n\n.nav > li > a > img {\n  max-width: none;\n}\n\n.nav-tabs {\n  border-bottom: 1px solid #dddddd;\n}\n\n.nav-tabs > li {\n  float: left;\n  margin-bottom: -1px;\n}\n\n.nav-tabs > li > a {\n  margin-right: 2px;\n  line-height: 1.428571429;\n  border: 1px solid transparent;\n  border-radius: 4px 4px 0 0;\n}\n\n.nav-tabs > li > a:hover {\n  border-color: #eeeeee #eeeeee #dddddd;\n}\n\n.nav-tabs > li.active > a,\n.nav-tabs > li.active > a:hover,\n.nav-tabs > li.active > a:focus {\n  color: #555555;\n  cursor: default;\n  background-color: #ffffff;\n  border: 1px solid #dddddd;\n  border-bottom-color: transparent;\n}\n\n.nav-tabs.nav-justified {\n  width: 100%;\n  border-bottom: 0;\n}\n\n.nav-tabs.nav-justified > li {\n  float: none;\n}\n\n.nav-tabs.nav-justified > li > a {\n  text-align: center;\n}\n\n@media (min-width: 768px) {\n  .nav-tabs.nav-justified > li {\n    display: table-cell;\n    width: 1%;\n  }\n}\n\n.nav-tabs.nav-justified > li > a {\n  margin-right: 0;\n  border-bottom: 1px solid #dddddd;\n}\n\n.nav-tabs.nav-justified > .active > a {\n  border-bottom-color: #ffffff;\n}\n\n.nav-pills > li {\n  float: left;\n}\n\n.nav-pills > li > a {\n  border-radius: 5px;\n}\n\n.nav-pills > li + li {\n  margin-left: 2px;\n}\n\n.nav-pills > li.active > a,\n.nav-pills > li.active > a:hover,\n.nav-pills > li.active > a:focus {\n  color: #ffffff;\n  background-color: #428bca;\n}\n\n.nav-stacked > li {\n  float: none;\n}\n\n.nav-stacked > li + li {\n  margin-top: 2px;\n  margin-left: 0;\n}\n\n.nav-justified {\n  width: 100%;\n}\n\n.nav-justified > li {\n  float: none;\n}\n\n.nav-justified > li > a {\n  text-align: center;\n}\n\n@media (min-width: 768px) {\n  .nav-justified > li {\n    display: table-cell;\n    width: 1%;\n  }\n}\n\n.nav-tabs-justified {\n  border-bottom: 0;\n}\n\n.nav-tabs-justified > li > a {\n  margin-right: 0;\n  border-bottom: 1px solid #dddddd;\n}\n\n.nav-tabs-justified > .active > a {\n  border-bottom-color: #ffffff;\n}\n\n.tabbable:before,\n.tabbable:after {\n  display: table;\n  content: \" \";\n}\n\n.tabbable:after {\n  clear: both;\n}\n\n.tabbable:before,\n.tabbable:after {\n  display: table;\n  content: \" \";\n}\n\n.tabbable:after {\n  clear: both;\n}\n\n.tab-content > .tab-pane,\n.pill-content > .pill-pane {\n  display: none;\n}\n\n.tab-content > .active,\n.pill-content > .active {\n  display: block;\n}\n\n.nav .caret {\n  border-top-color: #428bca;\n  border-bottom-color: #428bca;\n}\n\n.nav a:hover .caret {\n  border-top-color: #2a6496;\n  border-bottom-color: #2a6496;\n}\n\n.nav-tabs .dropdown-menu {\n  margin-top: -1px;\n  border-top-right-radius: 0;\n  border-top-left-radius: 0;\n}\n\n.navbar {\n  position: relative;\n  z-index: 1000;\n  min-height: 50px;\n  margin-bottom: 20px;\n  border: 1px solid transparent;\n}\n\n.navbar:before,\n.navbar:after {\n  display: table;\n  content: \" \";\n}\n\n.navbar:after {\n  clear: both;\n}\n\n.navbar:before,\n.navbar:after {\n  display: table;\n  content: \" \";\n}\n\n.navbar:after {\n  clear: both;\n}\n\n@media (min-width: 768px) {\n  .navbar {\n    border-radius: 4px;\n  }\n}\n\n.navbar-header:before,\n.navbar-header:after {\n  display: table;\n  content: \" \";\n}\n\n.navbar-header:after {\n  clear: both;\n}\n\n.navbar-header:before,\n.navbar-header:after {\n  display: table;\n  content: \" \";\n}\n\n.navbar-header:after {\n  clear: both;\n}\n\n@media (min-width: 768px) {\n  .navbar-header {\n    float: left;\n  }\n}\n\n.navbar-collapse {\n  max-height: 340px;\n  padding-right: 15px;\n  padding-left: 15px;\n  overflow-x: visible;\n  border-top: 1px solid transparent;\n  box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1);\n  -webkit-overflow-scrolling: touch;\n}\n\n.navbar-collapse:before,\n.navbar-collapse:after {\n  display: table;\n  content: \" \";\n}\n\n.navbar-collapse:after {\n  clear: both;\n}\n\n.navbar-collapse:before,\n.navbar-collapse:after {\n  display: table;\n  content: \" \";\n}\n\n.navbar-collapse:after {\n  clear: both;\n}\n\n.navbar-collapse.in {\n  overflow-y: auto;\n}\n\n@media (min-width: 768px) {\n  .navbar-collapse {\n    width: auto;\n    border-top: 0;\n    box-shadow: none;\n  }\n  .navbar-collapse.collapse {\n    display: block !important;\n    height: auto !important;\n    padding-bottom: 0;\n    overflow: visible !important;\n  }\n  .navbar-collapse.in {\n    overflow-y: visible;\n  }\n  .navbar-collapse .navbar-nav.navbar-left:first-child {\n    margin-left: -15px;\n  }\n  .navbar-collapse .navbar-nav.navbar-right:last-child {\n    margin-right: -15px;\n  }\n  .navbar-collapse .navbar-text:last-child {\n    margin-right: 0;\n  }\n}\n\n.container > .navbar-header,\n.container > .navbar-collapse {\n  margin-right: -15px;\n  margin-left: -15px;\n}\n\n@media (min-width: 768px) {\n  .container > .navbar-header,\n  .container > .navbar-collapse {\n    margin-right: 0;\n    margin-left: 0;\n  }\n}\n\n.navbar-static-top {\n  border-width: 0 0 1px;\n}\n\n@media (min-width: 768px) {\n  .navbar-static-top {\n    border-radius: 0;\n  }\n}\n\n.navbar-fixed-top,\n.navbar-fixed-bottom {\n  position: fixed;\n  right: 0;\n  left: 0;\n  border-width: 0 0 1px;\n}\n\n@media (min-width: 768px) {\n  .navbar-fixed-top,\n  .navbar-fixed-bottom {\n    border-radius: 0;\n  }\n}\n\n.navbar-fixed-top {\n  top: 0;\n  z-index: 1030;\n}\n\n.navbar-fixed-bottom {\n  bottom: 0;\n  margin-bottom: 0;\n}\n\n.navbar-brand {\n  float: left;\n  padding: 15px 15px;\n  font-size: 18px;\n  line-height: 20px;\n}\n\n.navbar-brand:hover,\n.navbar-brand:focus {\n  text-decoration: none;\n}\n\n@media (min-width: 768px) {\n  .navbar > .container .navbar-brand {\n    margin-left: -15px;\n  }\n}\n\n.navbar-toggle {\n  position: relative;\n  float: right;\n  padding: 9px 10px;\n  margin-top: 8px;\n  margin-right: 15px;\n  margin-bottom: 8px;\n  background-color: transparent;\n  border: 1px solid transparent;\n  border-radius: 4px;\n}\n\n.navbar-toggle .icon-bar {\n  display: block;\n  width: 22px;\n  height: 2px;\n  border-radius: 1px;\n}\n\n.navbar-toggle .icon-bar + .icon-bar {\n  margin-top: 4px;\n}\n\n@media (min-width: 768px) {\n  .navbar-toggle {\n    display: none;\n  }\n}\n\n.navbar-nav {\n  margin: 7.5px -15px;\n}\n\n.navbar-nav > li > a {\n  padding-top: 10px;\n  padding-bottom: 10px;\n  line-height: 20px;\n}\n\n@media (max-width: 767px) {\n  .navbar-nav .open .dropdown-menu {\n    position: static;\n    float: none;\n    width: auto;\n    margin-top: 0;\n    background-color: transparent;\n    border: 0;\n    box-shadow: none;\n  }\n  .navbar-nav .open .dropdown-menu > li > a,\n  .navbar-nav .open .dropdown-menu .dropdown-header {\n    padding: 5px 15px 5px 25px;\n  }\n  .navbar-nav .open .dropdown-menu > li > a {\n    line-height: 20px;\n  }\n  .navbar-nav .open .dropdown-menu > li > a:hover,\n  .navbar-nav .open .dropdown-menu > li > a:focus {\n    background-image: none;\n  }\n}\n\n@media (min-width: 768px) {\n  .navbar-nav {\n    float: left;\n    margin: 0;\n  }\n  .navbar-nav > li {\n    float: left;\n  }\n  .navbar-nav > li > a {\n    padding-top: 15px;\n    padding-bottom: 15px;\n  }\n}\n\n@media (min-width: 768px) {\n  .navbar-left {\n    float: left !important;\n  }\n  .navbar-right {\n    float: right !important;\n  }\n}\n\n.navbar-form {\n  padding: 10px 15px;\n  margin-top: 8px;\n  margin-right: -15px;\n  margin-bottom: 8px;\n  margin-left: -15px;\n  border-top: 1px solid transparent;\n  border-bottom: 1px solid transparent;\n  -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1);\n          box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1);\n}\n\n@media (min-width: 768px) {\n  .navbar-form .form-group {\n    display: inline-block;\n    margin-bottom: 0;\n    vertical-align: middle;\n  }\n  .navbar-form .form-control {\n    display: inline-block;\n  }\n  .navbar-form .radio,\n  .navbar-form .checkbox {\n    display: inline-block;\n    padding-left: 0;\n    margin-top: 0;\n    margin-bottom: 0;\n  }\n  .navbar-form .radio input[type=\"radio\"],\n  .navbar-form .checkbox input[type=\"checkbox\"] {\n    float: none;\n    margin-left: 0;\n  }\n}\n\n@media (max-width: 767px) {\n  .navbar-form .form-group {\n    margin-bottom: 5px;\n  }\n}\n\n@media (min-width: 768px) {\n  .navbar-form {\n    width: auto;\n    padding-top: 0;\n    padding-bottom: 0;\n    margin-right: 0;\n    margin-left: 0;\n    border: 0;\n    -webkit-box-shadow: none;\n            box-shadow: none;\n  }\n}\n\n.navbar-nav > li > .dropdown-menu {\n  margin-top: 0;\n  border-top-right-radius: 0;\n  border-top-left-radius: 0;\n}\n\n.navbar-fixed-bottom .navbar-nav > li > .dropdown-menu {\n  border-bottom-right-radius: 0;\n  border-bottom-left-radius: 0;\n}\n\n.navbar-nav.pull-right > li > .dropdown-menu,\n.navbar-nav > li > .dropdown-menu.pull-right {\n  right: 0;\n  left: auto;\n}\n\n.navbar-btn {\n  margin-top: 8px;\n  margin-bottom: 8px;\n}\n\n.navbar-text {\n  float: left;\n  margin-top: 15px;\n  margin-bottom: 15px;\n}\n\n@media (min-width: 768px) {\n  .navbar-text {\n    margin-right: 15px;\n    margin-left: 15px;\n  }\n}\n\n.navbar-default {\n  background-color: #f8f8f8;\n  border-color: #e7e7e7;\n}\n\n.navbar-default .navbar-brand {\n  color: #777777;\n}\n\n.navbar-default .navbar-brand:hover,\n.navbar-default .navbar-brand:focus {\n  color: #5e5e5e;\n  background-color: transparent;\n}\n\n.navbar-default .navbar-text {\n  color: #777777;\n}\n\n.navbar-default .navbar-nav > li > a {\n  color: #777777;\n}\n\n.navbar-default .navbar-nav > li > a:hover,\n.navbar-default .navbar-nav > li > a:focus {\n  color: #333333;\n  background-color: transparent;\n}\n\n.navbar-default .navbar-nav > .active > a,\n.navbar-default .navbar-nav > .active > a:hover,\n.navbar-default .navbar-nav > .active > a:focus {\n  color: #555555;\n  background-color: #e7e7e7;\n}\n\n.navbar-default .navbar-nav > .disabled > a,\n.navbar-default .navbar-nav > .disabled > a:hover,\n.navbar-default .navbar-nav > .disabled > a:focus {\n  color: #cccccc;\n  background-color: transparent;\n}\n\n.navbar-default .navbar-toggle {\n  border-color: #dddddd;\n}\n\n.navbar-default .navbar-toggle:hover,\n.navbar-default .navbar-toggle:focus {\n  background-color: #dddddd;\n}\n\n.navbar-default .navbar-toggle .icon-bar {\n  background-color: #cccccc;\n}\n\n.navbar-default .navbar-collapse,\n.navbar-default .navbar-form {\n  border-color: #e6e6e6;\n}\n\n.navbar-default .navbar-nav > .dropdown > a:hover .caret,\n.navbar-default .navbar-nav > .dropdown > a:focus .caret {\n  border-top-color: #333333;\n  border-bottom-color: #333333;\n}\n\n.navbar-default .navbar-nav > .open > a,\n.navbar-default .navbar-nav > .open > a:hover,\n.navbar-default .navbar-nav > .open > a:focus {\n  color: #555555;\n  background-color: #e7e7e7;\n}\n\n.navbar-default .navbar-nav > .open > a .caret,\n.navbar-default .navbar-nav > .open > a:hover .caret,\n.navbar-default .navbar-nav > .open > a:focus .caret {\n  border-top-color: #555555;\n  border-bottom-color: #555555;\n}\n\n.navbar-default .navbar-nav > .dropdown > a .caret {\n  border-top-color: #777777;\n  border-bottom-color: #777777;\n}\n\n@media (max-width: 767px) {\n  .navbar-default .navbar-nav .open .dropdown-menu > li > a {\n    color: #777777;\n  }\n  .navbar-default .navbar-nav .open .dropdown-menu > li > a:hover,\n  .navbar-default .navbar-nav .open .dropdown-menu > li > a:focus {\n    color: #333333;\n    background-color: transparent;\n  }\n  .navbar-default .navbar-nav .open .dropdown-menu > .active > a,\n  .navbar-default .navbar-nav .open .dropdown-menu > .active > a:hover,\n  .navbar-default .navbar-nav .open .dropdown-menu > .active > a:focus {\n    color: #555555;\n    background-color: #e7e7e7;\n  }\n  .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a,\n  .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:hover,\n  .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:focus {\n    color: #cccccc;\n    background-color: transparent;\n  }\n}\n\n.navbar-default .navbar-link {\n  color: #777777;\n}\n\n.navbar-default .navbar-link:hover {\n  color: #333333;\n}\n\n.navbar-inverse {\n  background-color: #222222;\n  border-color: #080808;\n}\n\n.navbar-inverse .navbar-brand {\n  color: #999999;\n}\n\n.navbar-inverse .navbar-brand:hover,\n.navbar-inverse .navbar-brand:focus {\n  color: #ffffff;\n  background-color: transparent;\n}\n\n.navbar-inverse .navbar-text {\n  color: #999999;\n}\n\n.navbar-inverse .navbar-nav > li > a {\n  color: #999999;\n}\n\n.navbar-inverse .navbar-nav > li > a:hover,\n.navbar-inverse .navbar-nav > li > a:focus {\n  color: #ffffff;\n  background-color: transparent;\n}\n\n.navbar-inverse .navbar-nav > .active > a,\n.navbar-inverse .navbar-nav > .active > a:hover,\n.navbar-inverse .navbar-nav > .active > a:focus {\n  color: #ffffff;\n  background-color: #080808;\n}\n\n.navbar-inverse .navbar-nav > .disabled > a,\n.navbar-inverse .navbar-nav > .disabled > a:hover,\n.navbar-inverse .navbar-nav > .disabled > a:focus {\n  color: #444444;\n  background-color: transparent;\n}\n\n.navbar-inverse .navbar-toggle {\n  border-color: #333333;\n}\n\n.navbar-inverse .navbar-toggle:hover,\n.navbar-inverse .navbar-toggle:focus {\n  background-color: #333333;\n}\n\n.navbar-inverse .navbar-toggle .icon-bar {\n  background-color: #ffffff;\n}\n\n.navbar-inverse .navbar-collapse,\n.navbar-inverse .navbar-form {\n  border-color: #101010;\n}\n\n.navbar-inverse .navbar-nav > .open > a,\n.navbar-inverse .navbar-nav > .open > a:hover,\n.navbar-inverse .navbar-nav > .open > a:focus {\n  color: #ffffff;\n  background-color: #080808;\n}\n\n.navbar-inverse .navbar-nav > .dropdown > a:hover .caret {\n  border-top-color: #ffffff;\n  border-bottom-color: #ffffff;\n}\n\n.navbar-inverse .navbar-nav > .dropdown > a .caret {\n  border-top-color: #999999;\n  border-bottom-color: #999999;\n}\n\n.navbar-inverse .navbar-nav > .open > a .caret,\n.navbar-inverse .navbar-nav > .open > a:hover .caret,\n.navbar-inverse .navbar-nav > .open > a:focus .caret {\n  border-top-color: #ffffff;\n  border-bottom-color: #ffffff;\n}\n\n@media (max-width: 767px) {\n  .navbar-inverse .navbar-nav .open .dropdown-menu > .dropdown-header {\n    border-color: #080808;\n  }\n  .navbar-inverse .navbar-nav .open .dropdown-menu > li > a {\n    color: #999999;\n  }\n  .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:hover,\n  .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:focus {\n    color: #ffffff;\n    background-color: transparent;\n  }\n  .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a,\n  .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:hover,\n  .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:focus {\n    color: #ffffff;\n    background-color: #080808;\n  }\n  .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a,\n  .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:hover,\n  .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:focus {\n    color: #444444;\n    background-color: transparent;\n  }\n}\n\n.navbar-inverse .navbar-link {\n  color: #999999;\n}\n\n.navbar-inverse .navbar-link:hover {\n  color: #ffffff;\n}\n\n.breadcrumb {\n  padding: 8px 15px;\n  margin-bottom: 20px;\n  list-style: none;\n  background-color: #f5f5f5;\n  border-radius: 4px;\n}\n\n.breadcrumb > li {\n  display: inline-block;\n}\n\n.breadcrumb > li + li:before {\n  padding: 0 5px;\n  color: #cccccc;\n  content: \"/\\00a0\";\n}\n\n.breadcrumb > .active {\n  color: #999999;\n}\n\n.pagination {\n  display: inline-block;\n  padding-left: 0;\n  margin: 20px 0;\n  border-radius: 4px;\n}\n\n.pagination > li {\n  display: inline;\n}\n\n.pagination > li > a,\n.pagination > li > span {\n  position: relative;\n  float: left;\n  padding: 6px 12px;\n  margin-left: -1px;\n  line-height: 1.428571429;\n  text-decoration: none;\n  background-color: #ffffff;\n  border: 1px solid #dddddd;\n}\n\n.pagination > li:first-child > a,\n.pagination > li:first-child > span {\n  margin-left: 0;\n  border-bottom-left-radius: 4px;\n  border-top-left-radius: 4px;\n}\n\n.pagination > li:last-child > a,\n.pagination > li:last-child > span {\n  border-top-right-radius: 4px;\n  border-bottom-right-radius: 4px;\n}\n\n.pagination > li > a:hover,\n.pagination > li > span:hover,\n.pagination > li > a:focus,\n.pagination > li > span:focus {\n  background-color: #eeeeee;\n}\n\n.pagination > .active > a,\n.pagination > .active > span,\n.pagination > .active > a:hover,\n.pagination > .active > span:hover,\n.pagination > .active > a:focus,\n.pagination > .active > span:focus {\n  z-index: 2;\n  color: #ffffff;\n  cursor: default;\n  background-color: #428bca;\n  border-color: #428bca;\n}\n\n.pagination > .disabled > span,\n.pagination > .disabled > a,\n.pagination > .disabled > a:hover,\n.pagination > .disabled > a:focus {\n  color: #999999;\n  cursor: not-allowed;\n  background-color: #ffffff;\n  border-color: #dddddd;\n}\n\n.pagination-lg > li > a,\n.pagination-lg > li > span {\n  padding: 10px 16px;\n  font-size: 18px;\n}\n\n.pagination-lg > li:first-child > a,\n.pagination-lg > li:first-child > span {\n  border-bottom-left-radius: 6px;\n  border-top-left-radius: 6px;\n}\n\n.pagination-lg > li:last-child > a,\n.pagination-lg > li:last-child > span {\n  border-top-right-radius: 6px;\n  border-bottom-right-radius: 6px;\n}\n\n.pagination-sm > li > a,\n.pagination-sm > li > span {\n  padding: 5px 10px;\n  font-size: 12px;\n}\n\n.pagination-sm > li:first-child > a,\n.pagination-sm > li:first-child > span {\n  border-bottom-left-radius: 3px;\n  border-top-left-radius: 3px;\n}\n\n.pagination-sm > li:last-child > a,\n.pagination-sm > li:last-child > span {\n  border-top-right-radius: 3px;\n  border-bottom-right-radius: 3px;\n}\n\n.pager {\n  padding-left: 0;\n  margin: 20px 0;\n  text-align: center;\n  list-style: none;\n}\n\n.pager:before,\n.pager:after {\n  display: table;\n  content: \" \";\n}\n\n.pager:after {\n  clear: both;\n}\n\n.pager:before,\n.pager:after {\n  display: table;\n  content: \" \";\n}\n\n.pager:after {\n  clear: both;\n}\n\n.pager li {\n  display: inline;\n}\n\n.pager li > a,\n.pager li > span {\n  display: inline-block;\n  padding: 5px 14px;\n  background-color: #ffffff;\n  border: 1px solid #dddddd;\n  border-radius: 15px;\n}\n\n.pager li > a:hover,\n.pager li > a:focus {\n  text-decoration: none;\n  background-color: #eeeeee;\n}\n\n.pager .next > a,\n.pager .next > span {\n  float: right;\n}\n\n.pager .previous > a,\n.pager .previous > span {\n  float: left;\n}\n\n.pager .disabled > a,\n.pager .disabled > a:hover,\n.pager .disabled > a:focus,\n.pager .disabled > span {\n  color: #999999;\n  cursor: not-allowed;\n  background-color: #ffffff;\n}\n\n.label {\n  display: inline;\n  padding: .2em .6em .3em;\n  font-size: 75%;\n  font-weight: bold;\n  line-height: 1;\n  color: #ffffff;\n  text-align: center;\n  white-space: nowrap;\n  vertical-align: baseline;\n  border-radius: .25em;\n}\n\n.label[href]:hover,\n.label[href]:focus {\n  color: #ffffff;\n  text-decoration: none;\n  cursor: pointer;\n}\n\n.label:empty {\n  display: none;\n}\n\n.label-default {\n  background-color: #999999;\n}\n\n.label-default[href]:hover,\n.label-default[href]:focus {\n  background-color: #808080;\n}\n\n.label-primary {\n  background-color: #428bca;\n}\n\n.label-primary[href]:hover,\n.label-primary[href]:focus {\n  background-color: #3071a9;\n}\n\n.label-success {\n  background-color: #5cb85c;\n}\n\n.label-success[href]:hover,\n.label-success[href]:focus {\n  background-color: #449d44;\n}\n\n.label-info {\n  background-color: #5bc0de;\n}\n\n.label-info[href]:hover,\n.label-info[href]:focus {\n  background-color: #31b0d5;\n}\n\n.label-warning {\n  background-color: #f0ad4e;\n}\n\n.label-warning[href]:hover,\n.label-warning[href]:focus {\n  background-color: #ec971f;\n}\n\n.label-danger {\n  background-color: #d9534f;\n}\n\n.label-danger[href]:hover,\n.label-danger[href]:focus {\n  background-color: #c9302c;\n}\n\n.badge {\n  display: inline-block;\n  min-width: 10px;\n  padding: 3px 7px;\n  font-size: 12px;\n  font-weight: bold;\n  line-height: 1;\n  color: #ffffff;\n  text-align: center;\n  white-space: nowrap;\n  vertical-align: baseline;\n  background-color: #999999;\n  border-radius: 10px;\n}\n\n.badge:empty {\n  display: none;\n}\n\na.badge:hover,\na.badge:focus {\n  color: #ffffff;\n  text-decoration: none;\n  cursor: pointer;\n}\n\n.btn .badge {\n  position: relative;\n  top: -1px;\n}\n\na.list-group-item.active > .badge,\n.nav-pills > .active > a > .badge {\n  color: #428bca;\n  background-color: #ffffff;\n}\n\n.nav-pills > li > a > .badge {\n  margin-left: 3px;\n}\n\n.jumbotron {\n  padding: 30px;\n  margin-bottom: 30px;\n  font-size: 21px;\n  font-weight: 200;\n  line-height: 2.1428571435;\n  color: inherit;\n  background-color: #eeeeee;\n}\n\n.jumbotron h1 {\n  line-height: 1;\n  color: inherit;\n}\n\n.jumbotron p {\n  line-height: 1.4;\n}\n\n.container .jumbotron {\n  border-radius: 6px;\n}\n\n@media screen and (min-width: 768px) {\n  .jumbotron {\n    padding-top: 48px;\n    padding-bottom: 48px;\n  }\n  .container .jumbotron {\n    padding-right: 60px;\n    padding-left: 60px;\n  }\n  .jumbotron h1 {\n    font-size: 63px;\n  }\n}\n\n.thumbnail {\n  display: inline-block;\n  display: block;\n  height: auto;\n  max-width: 100%;\n  padding: 4px;\n  line-height: 1.428571429;\n  background-color: #ffffff;\n  border: 1px solid #dddddd;\n  border-radius: 4px;\n  -webkit-transition: all 0.2s ease-in-out;\n          transition: all 0.2s ease-in-out;\n}\n\n.thumbnail > img {\n  display: block;\n  height: auto;\n  max-width: 100%;\n}\n\na.thumbnail:hover,\na.thumbnail:focus {\n  border-color: #428bca;\n}\n\n.thumbnail > img {\n  margin-right: auto;\n  margin-left: auto;\n}\n\n.thumbnail .caption {\n  padding: 9px;\n  color: #333333;\n}\n\n.alert {\n  padding: 15px;\n  margin-bottom: 20px;\n  border: 1px solid transparent;\n  border-radius: 4px;\n}\n\n.alert h4 {\n  margin-top: 0;\n  color: inherit;\n}\n\n.alert .alert-link {\n  font-weight: bold;\n}\n\n.alert > p,\n.alert > ul {\n  margin-bottom: 0;\n}\n\n.alert > p + p {\n  margin-top: 5px;\n}\n\n.alert-dismissable {\n  padding-right: 35px;\n}\n\n.alert-dismissable .close {\n  position: relative;\n  top: -2px;\n  right: -21px;\n  color: inherit;\n}\n\n.alert-success {\n  color: #468847;\n  background-color: #dff0d8;\n  border-color: #d6e9c6;\n}\n\n.alert-success hr {\n  border-top-color: #c9e2b3;\n}\n\n.alert-success .alert-link {\n  color: #356635;\n}\n\n.alert-info {\n  color: #3a87ad;\n  background-color: #d9edf7;\n  border-color: #bce8f1;\n}\n\n.alert-info hr {\n  border-top-color: #a6e1ec;\n}\n\n.alert-info .alert-link {\n  color: #2d6987;\n}\n\n.alert-warning {\n  color: #c09853;\n  background-color: #fcf8e3;\n  border-color: #fbeed5;\n}\n\n.alert-warning hr {\n  border-top-color: #f8e5be;\n}\n\n.alert-warning .alert-link {\n  color: #a47e3c;\n}\n\n.alert-danger {\n  color: #b94a48;\n  background-color: #f2dede;\n  border-color: #eed3d7;\n}\n\n.alert-danger hr {\n  border-top-color: #e6c1c7;\n}\n\n.alert-danger .alert-link {\n  color: #953b39;\n}\n\n@-webkit-keyframes progress-bar-stripes {\n  from {\n    background-position: 40px 0;\n  }\n  to {\n    background-position: 0 0;\n  }\n}\n\n@-moz-keyframes progress-bar-stripes {\n  from {\n    background-position: 40px 0;\n  }\n  to {\n    background-position: 0 0;\n  }\n}\n\n@-o-keyframes progress-bar-stripes {\n  from {\n    background-position: 0 0;\n  }\n  to {\n    background-position: 40px 0;\n  }\n}\n\n@keyframes progress-bar-stripes {\n  from {\n    background-position: 40px 0;\n  }\n  to {\n    background-position: 0 0;\n  }\n}\n\n.progress {\n  height: 20px;\n  margin-bottom: 20px;\n  overflow: hidden;\n  background-color: #f5f5f5;\n  border-radius: 4px;\n  -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1);\n          box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1);\n}\n\n.progress-bar {\n  float: left;\n  width: 0;\n  height: 100%;\n  font-size: 12px;\n  color: #ffffff;\n  text-align: center;\n  background-color: #428bca;\n  -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15);\n          box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15);\n  -webkit-transition: width 0.6s ease;\n          transition: width 0.6s ease;\n}\n\n.progress-striped .progress-bar {\n  background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent));\n  background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n  background-image: -moz-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n  background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n  background-size: 40px 40px;\n}\n\n.progress.active .progress-bar {\n  -webkit-animation: progress-bar-stripes 2s linear infinite;\n     -moz-animation: progress-bar-stripes 2s linear infinite;\n      -ms-animation: progress-bar-stripes 2s linear infinite;\n       -o-animation: progress-bar-stripes 2s linear infinite;\n          animation: progress-bar-stripes 2s linear infinite;\n}\n\n.progress-bar-success {\n  background-color: #5cb85c;\n}\n\n.progress-striped .progress-bar-success {\n  background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent));\n  background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n  background-image: -moz-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n  background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n}\n\n.progress-bar-info {\n  background-color: #5bc0de;\n}\n\n.progress-striped .progress-bar-info {\n  background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent));\n  background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n  background-image: -moz-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n  background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n}\n\n.progress-bar-warning {\n  background-color: #f0ad4e;\n}\n\n.progress-striped .progress-bar-warning {\n  background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent));\n  background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n  background-image: -moz-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n  background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n}\n\n.progress-bar-danger {\n  background-color: #d9534f;\n}\n\n.progress-striped .progress-bar-danger {\n  background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent));\n  background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n  background-image: -moz-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n  background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n}\n\n.media,\n.media-body {\n  overflow: hidden;\n  zoom: 1;\n}\n\n.media,\n.media .media {\n  margin-top: 15px;\n}\n\n.media:first-child {\n  margin-top: 0;\n}\n\n.media-object {\n  display: block;\n}\n\n.media-heading {\n  margin: 0 0 5px;\n}\n\n.media > .pull-left {\n  margin-right: 10px;\n}\n\n.media > .pull-right {\n  margin-left: 10px;\n}\n\n.media-list {\n  padding-left: 0;\n  list-style: none;\n}\n\n.list-group {\n  padding-left: 0;\n  margin-bottom: 20px;\n}\n\n.list-group-item {\n  position: relative;\n  display: block;\n  padding: 10px 15px;\n  margin-bottom: -1px;\n  background-color: #ffffff;\n  border: 1px solid #dddddd;\n}\n\n.list-group-item:first-child {\n  border-top-right-radius: 4px;\n  border-top-left-radius: 4px;\n}\n\n.list-group-item:last-child {\n  margin-bottom: 0;\n  border-bottom-right-radius: 4px;\n  border-bottom-left-radius: 4px;\n}\n\n.list-group-item > .badge {\n  float: right;\n}\n\n.list-group-item > .badge + .badge {\n  margin-right: 5px;\n}\n\na.list-group-item {\n  color: #555555;\n}\n\na.list-group-item .list-group-item-heading {\n  color: #333333;\n}\n\na.list-group-item:hover,\na.list-group-item:focus {\n  text-decoration: none;\n  background-color: #f5f5f5;\n}\n\n.list-group-item.active,\n.list-group-item.active:hover,\n.list-group-item.active:focus {\n  z-index: 2;\n  color: #ffffff;\n  background-color: #428bca;\n  border-color: #428bca;\n}\n\n.list-group-item.active .list-group-item-heading,\n.list-group-item.active:hover .list-group-item-heading,\n.list-group-item.active:focus .list-group-item-heading {\n  color: inherit;\n}\n\n.list-group-item.active .list-group-item-text,\n.list-group-item.active:hover .list-group-item-text,\n.list-group-item.active:focus .list-group-item-text {\n  color: #e1edf7;\n}\n\n.list-group-item-heading {\n  margin-top: 0;\n  margin-bottom: 5px;\n}\n\n.list-group-item-text {\n  margin-bottom: 0;\n  line-height: 1.3;\n}\n\n.panel {\n  margin-bottom: 20px;\n  background-color: #ffffff;\n  border: 1px solid transparent;\n  border-radius: 4px;\n  -webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05);\n          box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05);\n}\n\n.panel-body {\n  padding: 15px;\n}\n\n.panel-body:before,\n.panel-body:after {\n  display: table;\n  content: \" \";\n}\n\n.panel-body:after {\n  clear: both;\n}\n\n.panel-body:before,\n.panel-body:after {\n  display: table;\n  content: \" \";\n}\n\n.panel-body:after {\n  clear: both;\n}\n\n.panel > .list-group {\n  margin-bottom: 0;\n}\n\n.panel > .list-group .list-group-item {\n  border-width: 1px 0;\n}\n\n.panel > .list-group .list-group-item:first-child {\n  border-top-right-radius: 0;\n  border-top-left-radius: 0;\n}\n\n.panel > .list-group .list-group-item:last-child {\n  border-bottom: 0;\n}\n\n.panel-heading + .list-group .list-group-item:first-child {\n  border-top-width: 0;\n}\n\n.panel > .table {\n  margin-bottom: 0;\n}\n\n.panel > .panel-body + .table {\n  border-top: 1px solid #dddddd;\n}\n\n.panel-heading {\n  padding: 10px 15px;\n  border-bottom: 1px solid transparent;\n  border-top-right-radius: 3px;\n  border-top-left-radius: 3px;\n}\n\n.panel-title {\n  margin-top: 0;\n  margin-bottom: 0;\n  font-size: 16px;\n}\n\n.panel-title > a {\n  color: inherit;\n}\n\n.panel-footer {\n  padding: 10px 15px;\n  background-color: #f5f5f5;\n  border-top: 1px solid #dddddd;\n  border-bottom-right-radius: 3px;\n  border-bottom-left-radius: 3px;\n}\n\n.panel-group .panel {\n  margin-bottom: 0;\n  overflow: hidden;\n  border-radius: 4px;\n}\n\n.panel-group .panel + .panel {\n  margin-top: 5px;\n}\n\n.panel-group .panel-heading {\n  border-bottom: 0;\n}\n\n.panel-group .panel-heading + .panel-collapse .panel-body {\n  border-top: 1px solid #dddddd;\n}\n\n.panel-group .panel-footer {\n  border-top: 0;\n}\n\n.panel-group .panel-footer + .panel-collapse .panel-body {\n  border-bottom: 1px solid #dddddd;\n}\n\n.panel-default {\n  border-color: #dddddd;\n}\n\n.panel-default > .panel-heading {\n  color: #333333;\n  background-color: #f5f5f5;\n  border-color: #dddddd;\n}\n\n.panel-default > .panel-heading + .panel-collapse .panel-body {\n  border-top-color: #dddddd;\n}\n\n.panel-default > .panel-footer + .panel-collapse .panel-body {\n  border-bottom-color: #dddddd;\n}\n\n.panel-primary {\n  border-color: #428bca;\n}\n\n.panel-primary > .panel-heading {\n  color: #ffffff;\n  background-color: #428bca;\n  border-color: #428bca;\n}\n\n.panel-primary > .panel-heading + .panel-collapse .panel-body {\n  border-top-color: #428bca;\n}\n\n.panel-primary > .panel-footer + .panel-collapse .panel-body {\n  border-bottom-color: #428bca;\n}\n\n.panel-success {\n  border-color: #d6e9c6;\n}\n\n.panel-success > .panel-heading {\n  color: #468847;\n  background-color: #dff0d8;\n  border-color: #d6e9c6;\n}\n\n.panel-success > .panel-heading + .panel-collapse .panel-body {\n  border-top-color: #d6e9c6;\n}\n\n.panel-success > .panel-footer + .panel-collapse .panel-body {\n  border-bottom-color: #d6e9c6;\n}\n\n.panel-warning {\n  border-color: #fbeed5;\n}\n\n.panel-warning > .panel-heading {\n  color: #c09853;\n  background-color: #fcf8e3;\n  border-color: #fbeed5;\n}\n\n.panel-warning > .panel-heading + .panel-collapse .panel-body {\n  border-top-color: #fbeed5;\n}\n\n.panel-warning > .panel-footer + .panel-collapse .panel-body {\n  border-bottom-color: #fbeed5;\n}\n\n.panel-danger {\n  border-color: #eed3d7;\n}\n\n.panel-danger > .panel-heading {\n  color: #b94a48;\n  background-color: #f2dede;\n  border-color: #eed3d7;\n}\n\n.panel-danger > .panel-heading + .panel-collapse .panel-body {\n  border-top-color: #eed3d7;\n}\n\n.panel-danger > .panel-footer + .panel-collapse .panel-body {\n  border-bottom-color: #eed3d7;\n}\n\n.panel-info {\n  border-color: #bce8f1;\n}\n\n.panel-info > .panel-heading {\n  color: #3a87ad;\n  background-color: #d9edf7;\n  border-color: #bce8f1;\n}\n\n.panel-info > .panel-heading + .panel-collapse .panel-body {\n  border-top-color: #bce8f1;\n}\n\n.panel-info > .panel-footer + .panel-collapse .panel-body {\n  border-bottom-color: #bce8f1;\n}\n\n.well {\n  min-height: 20px;\n  padding: 19px;\n  margin-bottom: 20px;\n  background-color: #f5f5f5;\n  border: 1px solid #e3e3e3;\n  border-radius: 4px;\n  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05);\n          box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05);\n}\n\n.well blockquote {\n  border-color: #ddd;\n  border-color: rgba(0, 0, 0, 0.15);\n}\n\n.well-lg {\n  padding: 24px;\n  border-radius: 6px;\n}\n\n.well-sm {\n  padding: 9px;\n  border-radius: 3px;\n}\n\n.close {\n  float: right;\n  font-size: 21px;\n  font-weight: bold;\n  line-height: 1;\n  color: #000000;\n  text-shadow: 0 1px 0 #ffffff;\n  opacity: 0.2;\n  filter: alpha(opacity=20);\n}\n\n.close:hover,\n.close:focus {\n  color: #000000;\n  text-decoration: none;\n  cursor: pointer;\n  opacity: 0.5;\n  filter: alpha(opacity=50);\n}\n\nbutton.close {\n  padding: 0;\n  cursor: pointer;\n  background: transparent;\n  border: 0;\n  -webkit-appearance: none;\n}\n\n.modal-open {\n  overflow: hidden;\n}\n\nbody.modal-open,\n.modal-open .navbar-fixed-top,\n.modal-open .navbar-fixed-bottom {\n  margin-right: 15px;\n}\n\n.modal {\n  position: fixed;\n  top: 0;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  z-index: 1040;\n  display: none;\n  overflow: auto;\n  overflow-y: scroll;\n}\n\n.modal.fade .modal-dialog {\n  -webkit-transform: translate(0, -25%);\n      -ms-transform: translate(0, -25%);\n          transform: translate(0, -25%);\n  -webkit-transition: -webkit-transform 0.3s ease-out;\n     -moz-transition: -moz-transform 0.3s ease-out;\n       -o-transition: -o-transform 0.3s ease-out;\n          transition: transform 0.3s ease-out;\n}\n\n.modal.in .modal-dialog {\n  -webkit-transform: translate(0, 0);\n      -ms-transform: translate(0, 0);\n          transform: translate(0, 0);\n}\n\n.modal-dialog {\n  z-index: 1050;\n  width: auto;\n  padding: 10px;\n  margin-right: auto;\n  margin-left: auto;\n}\n\n.modal-content {\n  position: relative;\n  background-color: #ffffff;\n  border: 1px solid #999999;\n  border: 1px solid rgba(0, 0, 0, 0.2);\n  border-radius: 6px;\n  outline: none;\n  -webkit-box-shadow: 0 3px 9px rgba(0, 0, 0, 0.5);\n          box-shadow: 0 3px 9px rgba(0, 0, 0, 0.5);\n  background-clip: padding-box;\n}\n\n.modal-backdrop {\n  position: fixed;\n  top: 0;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  z-index: 1030;\n  background-color: #000000;\n}\n\n.modal-backdrop.fade {\n  opacity: 0;\n  filter: alpha(opacity=0);\n}\n\n.modal-backdrop.in {\n  opacity: 0.5;\n  filter: alpha(opacity=50);\n}\n\n.modal-header {\n  min-height: 16.428571429px;\n  padding: 15px;\n  border-bottom: 1px solid #e5e5e5;\n}\n\n.modal-header .close {\n  margin-top: -2px;\n}\n\n.modal-title {\n  margin: 0;\n  line-height: 1.428571429;\n}\n\n.modal-body {\n  position: relative;\n  padding: 20px;\n}\n\n.modal-footer {\n  padding: 19px 20px 20px;\n  margin-top: 15px;\n  text-align: right;\n  border-top: 1px solid #e5e5e5;\n}\n\n.modal-footer:before,\n.modal-footer:after {\n  display: table;\n  content: \" \";\n}\n\n.modal-footer:after {\n  clear: both;\n}\n\n.modal-footer:before,\n.modal-footer:after {\n  display: table;\n  content: \" \";\n}\n\n.modal-footer:after {\n  clear: both;\n}\n\n.modal-footer .btn + .btn {\n  margin-bottom: 0;\n  margin-left: 5px;\n}\n\n.modal-footer .btn-group .btn + .btn {\n  margin-left: -1px;\n}\n\n.modal-footer .btn-block + .btn-block {\n  margin-left: 0;\n}\n\n@media screen and (min-width: 768px) {\n  .modal-dialog {\n    right: auto;\n    left: 50%;\n    width: 600px;\n    padding-top: 30px;\n    padding-bottom: 30px;\n  }\n  .modal-content {\n    -webkit-box-shadow: 0 5px 15px rgba(0, 0, 0, 0.5);\n            box-shadow: 0 5px 15px rgba(0, 0, 0, 0.5);\n  }\n}\n\n.tooltip {\n  position: absolute;\n  z-index: 1030;\n  display: block;\n  font-size: 12px;\n  line-height: 1.4;\n  opacity: 0;\n  filter: alpha(opacity=0);\n  visibility: visible;\n}\n\n.tooltip.in {\n  opacity: 0.9;\n  filter: alpha(opacity=90);\n}\n\n.tooltip.top {\n  padding: 5px 0;\n  margin-top: -3px;\n}\n\n.tooltip.right {\n  padding: 0 5px;\n  margin-left: 3px;\n}\n\n.tooltip.bottom {\n  padding: 5px 0;\n  margin-top: 3px;\n}\n\n.tooltip.left {\n  padding: 0 5px;\n  margin-left: -3px;\n}\n\n.tooltip-inner {\n  max-width: 200px;\n  padding: 3px 8px;\n  color: #ffffff;\n  text-align: center;\n  text-decoration: none;\n  background-color: #000000;\n  border-radius: 4px;\n}\n\n.tooltip-arrow {\n  position: absolute;\n  width: 0;\n  height: 0;\n  border-color: transparent;\n  border-style: solid;\n}\n\n.tooltip.top .tooltip-arrow {\n  bottom: 0;\n  left: 50%;\n  margin-left: -5px;\n  border-top-color: #000000;\n  border-width: 5px 5px 0;\n}\n\n.tooltip.top-left .tooltip-arrow {\n  bottom: 0;\n  left: 5px;\n  border-top-color: #000000;\n  border-width: 5px 5px 0;\n}\n\n.tooltip.top-right .tooltip-arrow {\n  right: 5px;\n  bottom: 0;\n  border-top-color: #000000;\n  border-width: 5px 5px 0;\n}\n\n.tooltip.right .tooltip-arrow {\n  top: 50%;\n  left: 0;\n  margin-top: -5px;\n  border-right-color: #000000;\n  border-width: 5px 5px 5px 0;\n}\n\n.tooltip.left .tooltip-arrow {\n  top: 50%;\n  right: 0;\n  margin-top: -5px;\n  border-left-color: #000000;\n  border-width: 5px 0 5px 5px;\n}\n\n.tooltip.bottom .tooltip-arrow {\n  top: 0;\n  left: 50%;\n  margin-left: -5px;\n  border-bottom-color: #000000;\n  border-width: 0 5px 5px;\n}\n\n.tooltip.bottom-left .tooltip-arrow {\n  top: 0;\n  left: 5px;\n  border-bottom-color: #000000;\n  border-width: 0 5px 5px;\n}\n\n.tooltip.bottom-right .tooltip-arrow {\n  top: 0;\n  right: 5px;\n  border-bottom-color: #000000;\n  border-width: 0 5px 5px;\n}\n\n.popover {\n  position: absolute;\n  top: 0;\n  left: 0;\n  z-index: 1010;\n  display: none;\n  max-width: 276px;\n  padding: 1px;\n  text-align: left;\n  white-space: normal;\n  background-color: #ffffff;\n  border: 1px solid #cccccc;\n  border: 1px solid rgba(0, 0, 0, 0.2);\n  border-radius: 6px;\n  -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);\n          box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);\n  background-clip: padding-box;\n}\n\n.popover.top {\n  margin-top: -10px;\n}\n\n.popover.right {\n  margin-left: 10px;\n}\n\n.popover.bottom {\n  margin-top: 10px;\n}\n\n.popover.left {\n  margin-left: -10px;\n}\n\n.popover-title {\n  padding: 8px 14px;\n  margin: 0;\n  font-size: 14px;\n  font-weight: normal;\n  line-height: 18px;\n  background-color: #f7f7f7;\n  border-bottom: 1px solid #ebebeb;\n  border-radius: 5px 5px 0 0;\n}\n\n.popover-content {\n  padding: 9px 14px;\n}\n\n.popover .arrow,\n.popover .arrow:after {\n  position: absolute;\n  display: block;\n  width: 0;\n  height: 0;\n  border-color: transparent;\n  border-style: solid;\n}\n\n.popover .arrow {\n  border-width: 11px;\n}\n\n.popover .arrow:after {\n  border-width: 10px;\n  content: \"\";\n}\n\n.popover.top .arrow {\n  bottom: -11px;\n  left: 50%;\n  margin-left: -11px;\n  border-top-color: #999999;\n  border-top-color: rgba(0, 0, 0, 0.25);\n  border-bottom-width: 0;\n}\n\n.popover.top .arrow:after {\n  bottom: 1px;\n  margin-left: -10px;\n  border-top-color: #ffffff;\n  border-bottom-width: 0;\n  content: \" \";\n}\n\n.popover.right .arrow {\n  top: 50%;\n  left: -11px;\n  margin-top: -11px;\n  border-right-color: #999999;\n  border-right-color: rgba(0, 0, 0, 0.25);\n  border-left-width: 0;\n}\n\n.popover.right .arrow:after {\n  bottom: -10px;\n  left: 1px;\n  border-right-color: #ffffff;\n  border-left-width: 0;\n  content: \" \";\n}\n\n.popover.bottom .arrow {\n  top: -11px;\n  left: 50%;\n  margin-left: -11px;\n  border-bottom-color: #999999;\n  border-bottom-color: rgba(0, 0, 0, 0.25);\n  border-top-width: 0;\n}\n\n.popover.bottom .arrow:after {\n  top: 1px;\n  margin-left: -10px;\n  border-bottom-color: #ffffff;\n  border-top-width: 0;\n  content: \" \";\n}\n\n.popover.left .arrow {\n  top: 50%;\n  right: -11px;\n  margin-top: -11px;\n  border-left-color: #999999;\n  border-left-color: rgba(0, 0, 0, 0.25);\n  border-right-width: 0;\n}\n\n.popover.left .arrow:after {\n  right: 1px;\n  bottom: -10px;\n  border-left-color: #ffffff;\n  border-right-width: 0;\n  content: \" \";\n}\n\n.carousel {\n  position: relative;\n}\n\n.carousel-inner {\n  position: relative;\n  width: 100%;\n  overflow: hidden;\n}\n\n.carousel-inner > .item {\n  position: relative;\n  display: none;\n  -webkit-transition: 0.6s ease-in-out left;\n          transition: 0.6s ease-in-out left;\n}\n\n.carousel-inner > .item > img,\n.carousel-inner > .item > a > img {\n  display: block;\n  height: auto;\n  max-width: 100%;\n  line-height: 1;\n}\n\n.carousel-inner > .active,\n.carousel-inner > .next,\n.carousel-inner > .prev {\n  display: block;\n}\n\n.carousel-inner > .active {\n  left: 0;\n}\n\n.carousel-inner > .next,\n.carousel-inner > .prev {\n  position: absolute;\n  top: 0;\n  width: 100%;\n}\n\n.carousel-inner > .next {\n  left: 100%;\n}\n\n.carousel-inner > .prev {\n  left: -100%;\n}\n\n.carousel-inner > .next.left,\n.carousel-inner > .prev.right {\n  left: 0;\n}\n\n.carousel-inner > .active.left {\n  left: -100%;\n}\n\n.carousel-inner > .active.right {\n  left: 100%;\n}\n\n.carousel-control {\n  position: absolute;\n  top: 0;\n  bottom: 0;\n  left: 0;\n  width: 15%;\n  font-size: 20px;\n  color: #ffffff;\n  text-align: center;\n  text-shadow: 0 1px 2px rgba(0, 0, 0, 0.6);\n  opacity: 0.5;\n  filter: alpha(opacity=50);\n}\n\n.carousel-control.left {\n  background-image: -webkit-gradient(linear, 0 top, 100% top, from(rgba(0, 0, 0, 0.5)), to(rgba(0, 0, 0, 0.0001)));\n  background-image: -webkit-linear-gradient(left, color-stop(rgba(0, 0, 0, 0.5) 0), color-stop(rgba(0, 0, 0, 0.0001) 100%));\n  background-image: -moz-linear-gradient(left, rgba(0, 0, 0, 0.5) 0, rgba(0, 0, 0, 0.0001) 100%);\n  background-image: linear-gradient(to right, rgba(0, 0, 0, 0.5) 0, rgba(0, 0, 0, 0.0001) 100%);\n  background-repeat: repeat-x;\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1);\n}\n\n.carousel-control.right {\n  right: 0;\n  left: auto;\n  background-image: -webkit-gradient(linear, 0 top, 100% top, from(rgba(0, 0, 0, 0.0001)), to(rgba(0, 0, 0, 0.5)));\n  background-image: -webkit-linear-gradient(left, color-stop(rgba(0, 0, 0, 0.0001) 0), color-stop(rgba(0, 0, 0, 0.5) 100%));\n  background-image: -moz-linear-gradient(left, rgba(0, 0, 0, 0.0001) 0, rgba(0, 0, 0, 0.5) 100%);\n  background-image: linear-gradient(to right, rgba(0, 0, 0, 0.0001) 0, rgba(0, 0, 0, 0.5) 100%);\n  background-repeat: repeat-x;\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1);\n}\n\n.carousel-control:hover,\n.carousel-control:focus {\n  color: #ffffff;\n  text-decoration: none;\n  opacity: 0.9;\n  filter: alpha(opacity=90);\n}\n\n.carousel-control .icon-prev,\n.carousel-control .icon-next,\n.carousel-control .glyphicon-chevron-left,\n.carousel-control .glyphicon-chevron-right {\n  position: absolute;\n  top: 50%;\n  left: 50%;\n  z-index: 5;\n  display: inline-block;\n}\n\n.carousel-control .icon-prev,\n.carousel-control .icon-next {\n  width: 20px;\n  height: 20px;\n  margin-top: -10px;\n  margin-left: -10px;\n  font-family: serif;\n}\n\n.carousel-control .icon-prev:before {\n  content: '\\2039';\n}\n\n.carousel-control .icon-next:before {\n  content: '\\203a';\n}\n\n.carousel-indicators {\n  position: absolute;\n  bottom: 10px;\n  left: 50%;\n  z-index: 15;\n  width: 60%;\n  padding-left: 0;\n  margin-left: -30%;\n  text-align: center;\n  list-style: none;\n}\n\n.carousel-indicators li {\n  display: inline-block;\n  width: 10px;\n  height: 10px;\n  margin: 1px;\n  text-indent: -999px;\n  cursor: pointer;\n  border: 1px solid #ffffff;\n  border-radius: 10px;\n}\n\n.carousel-indicators .active {\n  width: 12px;\n  height: 12px;\n  margin: 0;\n  background-color: #ffffff;\n}\n\n.carousel-caption {\n  position: absolute;\n  right: 15%;\n  bottom: 20px;\n  left: 15%;\n  z-index: 10;\n  padding-top: 20px;\n  padding-bottom: 20px;\n  color: #ffffff;\n  text-align: center;\n  text-shadow: 0 1px 2px rgba(0, 0, 0, 0.6);\n}\n\n.carousel-caption .btn {\n  text-shadow: none;\n}\n\n@media screen and (min-width: 768px) {\n  .carousel-control .icon-prev,\n  .carousel-control .icon-next {\n    width: 30px;\n    height: 30px;\n    margin-top: -15px;\n    margin-left: -15px;\n    font-size: 30px;\n  }\n  .carousel-caption {\n    right: 20%;\n    left: 20%;\n    padding-bottom: 30px;\n  }\n  .carousel-indicators {\n    bottom: 20px;\n  }\n}\n\n.clearfix:before,\n.clearfix:after {\n  display: table;\n  content: \" \";\n}\n\n.clearfix:after {\n  clear: both;\n}\n\n.pull-right {\n  float: right !important;\n}\n\n.pull-left {\n  float: left !important;\n}\n\n.hide {\n  display: none !important;\n}\n\n.show {\n  display: block !important;\n}\n\n.invisible {\n  visibility: hidden;\n}\n\n.text-hide {\n  font: 0/0 a;\n  color: transparent;\n  text-shadow: none;\n  background-color: transparent;\n  border: 0;\n}\n\n.affix {\n  position: fixed;\n}\n\n@-ms-viewport {\n  width: device-width;\n}\n\n@media screen and (max-width: 400px) {\n  @-ms-viewport {\n    width: 320px;\n  }\n}\n\n.hidden {\n  display: none !important;\n  visibility: hidden !important;\n}\n\n.visible-xs {\n  display: none !important;\n}\n\ntr.visible-xs {\n  display: none !important;\n}\n\nth.visible-xs,\ntd.visible-xs {\n  display: none !important;\n}\n\n@media (max-width: 767px) {\n  .visible-xs {\n    display: block !important;\n  }\n  tr.visible-xs {\n    display: table-row !important;\n  }\n  th.visible-xs,\n  td.visible-xs {\n    display: table-cell !important;\n  }\n}\n\n@media (min-width: 768px) and (max-width: 991px) {\n  .visible-xs.visible-sm {\n    display: block !important;\n  }\n  tr.visible-xs.visible-sm {\n    display: table-row !important;\n  }\n  th.visible-xs.visible-sm,\n  td.visible-xs.visible-sm {\n    display: table-cell !important;\n  }\n}\n\n@media (min-width: 992px) and (max-width: 1199px) {\n  .visible-xs.visible-md {\n    display: block !important;\n  }\n  tr.visible-xs.visible-md {\n    display: table-row !important;\n  }\n  th.visible-xs.visible-md,\n  td.visible-xs.visible-md {\n    display: table-cell !important;\n  }\n}\n\n@media (min-width: 1200px) {\n  .visible-xs.visible-lg {\n    display: block !important;\n  }\n  tr.visible-xs.visible-lg {\n    display: table-row !important;\n  }\n  th.visible-xs.visible-lg,\n  td.visible-xs.visible-lg {\n    display: table-cell !important;\n  }\n}\n\n.visible-sm {\n  display: none !important;\n}\n\ntr.visible-sm {\n  display: none !important;\n}\n\nth.visible-sm,\ntd.visible-sm {\n  display: none !important;\n}\n\n@media (max-width: 767px) {\n  .visible-sm.visible-xs {\n    display: block !important;\n  }\n  tr.visible-sm.visible-xs {\n    display: table-row !important;\n  }\n  th.visible-sm.visible-xs,\n  td.visible-sm.visible-xs {\n    display: table-cell !important;\n  }\n}\n\n@media (min-width: 768px) and (max-width: 991px) {\n  .visible-sm {\n    display: block !important;\n  }\n  tr.visible-sm {\n    display: table-row !important;\n  }\n  th.visible-sm,\n  td.visible-sm {\n    display: table-cell !important;\n  }\n}\n\n@media (min-width: 992px) and (max-width: 1199px) {\n  .visible-sm.visible-md {\n    display: block !important;\n  }\n  tr.visible-sm.visible-md {\n    display: table-row !important;\n  }\n  th.visible-sm.visible-md,\n  td.visible-sm.visible-md {\n    display: table-cell !important;\n  }\n}\n\n@media (min-width: 1200px) {\n  .visible-sm.visible-lg {\n    display: block !important;\n  }\n  tr.visible-sm.visible-lg {\n    display: table-row !important;\n  }\n  th.visible-sm.visible-lg,\n  td.visible-sm.visible-lg {\n    display: table-cell !important;\n  }\n}\n\n.visible-md {\n  display: none !important;\n}\n\ntr.visible-md {\n  display: none !important;\n}\n\nth.visible-md,\ntd.visible-md {\n  display: none !important;\n}\n\n@media (max-width: 767px) {\n  .visible-md.visible-xs {\n    display: block !important;\n  }\n  tr.visible-md.visible-xs {\n    display: table-row !important;\n  }\n  th.visible-md.visible-xs,\n  td.visible-md.visible-xs {\n    display: table-cell !important;\n  }\n}\n\n@media (min-width: 768px) and (max-width: 991px) {\n  .visible-md.visible-sm {\n    display: block !important;\n  }\n  tr.visible-md.visible-sm {\n    display: table-row !important;\n  }\n  th.visible-md.visible-sm,\n  td.visible-md.visible-sm {\n    display: table-cell !important;\n  }\n}\n\n@media (min-width: 992px) and (max-width: 1199px) {\n  .visible-md {\n    display: block !important;\n  }\n  tr.visible-md {\n    display: table-row !important;\n  }\n  th.visible-md,\n  td.visible-md {\n    display: table-cell !important;\n  }\n}\n\n@media (min-width: 1200px) {\n  .visible-md.visible-lg {\n    display: block !important;\n  }\n  tr.visible-md.visible-lg {\n    display: table-row !important;\n  }\n  th.visible-md.visible-lg,\n  td.visible-md.visible-lg {\n    display: table-cell !important;\n  }\n}\n\n.visible-lg {\n  display: none !important;\n}\n\ntr.visible-lg {\n  display: none !important;\n}\n\nth.visible-lg,\ntd.visible-lg {\n  display: none !important;\n}\n\n@media (max-width: 767px) {\n  .visible-lg.visible-xs {\n    display: block !important;\n  }\n  tr.visible-lg.visible-xs {\n    display: table-row !important;\n  }\n  th.visible-lg.visible-xs,\n  td.visible-lg.visible-xs {\n    display: table-cell !important;\n  }\n}\n\n@media (min-width: 768px) and (max-width: 991px) {\n  .visible-lg.visible-sm {\n    display: block !important;\n  }\n  tr.visible-lg.visible-sm {\n    display: table-row !important;\n  }\n  th.visible-lg.visible-sm,\n  td.visible-lg.visible-sm {\n    display: table-cell !important;\n  }\n}\n\n@media (min-width: 992px) and (max-width: 1199px) {\n  .visible-lg.visible-md {\n    display: block !important;\n  }\n  tr.visible-lg.visible-md {\n    display: table-row !important;\n  }\n  th.visible-lg.visible-md,\n  td.visible-lg.visible-md {\n    display: table-cell !important;\n  }\n}\n\n@media (min-width: 1200px) {\n  .visible-lg {\n    display: block !important;\n  }\n  tr.visible-lg {\n    display: table-row !important;\n  }\n  th.visible-lg,\n  td.visible-lg {\n    display: table-cell !important;\n  }\n}\n\n.hidden-xs {\n  display: block !important;\n}\n\ntr.hidden-xs {\n  display: table-row !important;\n}\n\nth.hidden-xs,\ntd.hidden-xs {\n  display: table-cell !important;\n}\n\n@media (max-width: 767px) {\n  .hidden-xs {\n    display: none !important;\n  }\n  tr.hidden-xs {\n    display: none !important;\n  }\n  th.hidden-xs,\n  td.hidden-xs {\n    display: none !important;\n  }\n}\n\n@media (min-width: 768px) and (max-width: 991px) {\n  .hidden-xs.hidden-sm {\n    display: none !important;\n  }\n  tr.hidden-xs.hidden-sm {\n    display: none !important;\n  }\n  th.hidden-xs.hidden-sm,\n  td.hidden-xs.hidden-sm {\n    display: none !important;\n  }\n}\n\n@media (min-width: 992px) and (max-width: 1199px) {\n  .hidden-xs.hidden-md {\n    display: none !important;\n  }\n  tr.hidden-xs.hidden-md {\n    display: none !important;\n  }\n  th.hidden-xs.hidden-md,\n  td.hidden-xs.hidden-md {\n    display: none !important;\n  }\n}\n\n@media (min-width: 1200px) {\n  .hidden-xs.hidden-lg {\n    display: none !important;\n  }\n  tr.hidden-xs.hidden-lg {\n    display: none !important;\n  }\n  th.hidden-xs.hidden-lg,\n  td.hidden-xs.hidden-lg {\n    display: none !important;\n  }\n}\n\n.hidden-sm {\n  display: block !important;\n}\n\ntr.hidden-sm {\n  display: table-row !important;\n}\n\nth.hidden-sm,\ntd.hidden-sm {\n  display: table-cell !important;\n}\n\n@media (max-width: 767px) {\n  .hidden-sm.hidden-xs {\n    display: none !important;\n  }\n  tr.hidden-sm.hidden-xs {\n    display: none !important;\n  }\n  th.hidden-sm.hidden-xs,\n  td.hidden-sm.hidden-xs {\n    display: none !important;\n  }\n}\n\n@media (min-width: 768px) and (max-width: 991px) {\n  .hidden-sm {\n    display: none !important;\n  }\n  tr.hidden-sm {\n    display: none !important;\n  }\n  th.hidden-sm,\n  td.hidden-sm {\n    display: none !important;\n  }\n}\n\n@media (min-width: 992px) and (max-width: 1199px) {\n  .hidden-sm.hidden-md {\n    display: none !important;\n  }\n  tr.hidden-sm.hidden-md {\n    display: none !important;\n  }\n  th.hidden-sm.hidden-md,\n  td.hidden-sm.hidden-md {\n    display: none !important;\n  }\n}\n\n@media (min-width: 1200px) {\n  .hidden-sm.hidden-lg {\n    display: none !important;\n  }\n  tr.hidden-sm.hidden-lg {\n    display: none !important;\n  }\n  th.hidden-sm.hidden-lg,\n  td.hidden-sm.hidden-lg {\n    display: none !important;\n  }\n}\n\n.hidden-md {\n  display: block !important;\n}\n\ntr.hidden-md {\n  display: table-row !important;\n}\n\nth.hidden-md,\ntd.hidden-md {\n  display: table-cell !important;\n}\n\n@media (max-width: 767px) {\n  .hidden-md.hidden-xs {\n    display: none !important;\n  }\n  tr.hidden-md.hidden-xs {\n    display: none !important;\n  }\n  th.hidden-md.hidden-xs,\n  td.hidden-md.hidden-xs {\n    display: none !important;\n  }\n}\n\n@media (min-width: 768px) and (max-width: 991px) {\n  .hidden-md.hidden-sm {\n    display: none !important;\n  }\n  tr.hidden-md.hidden-sm {\n    display: none !important;\n  }\n  th.hidden-md.hidden-sm,\n  td.hidden-md.hidden-sm {\n    display: none !important;\n  }\n}\n\n@media (min-width: 992px) and (max-width: 1199px) {\n  .hidden-md {\n    display: none !important;\n  }\n  tr.hidden-md {\n    display: none !important;\n  }\n  th.hidden-md,\n  td.hidden-md {\n    display: none !important;\n  }\n}\n\n@media (min-width: 1200px) {\n  .hidden-md.hidden-lg {\n    display: none !important;\n  }\n  tr.hidden-md.hidden-lg {\n    display: none !important;\n  }\n  th.hidden-md.hidden-lg,\n  td.hidden-md.hidden-lg {\n    display: none !important;\n  }\n}\n\n.hidden-lg {\n  display: block !important;\n}\n\ntr.hidden-lg {\n  display: table-row !important;\n}\n\nth.hidden-lg,\ntd.hidden-lg {\n  display: table-cell !important;\n}\n\n@media (max-width: 767px) {\n  .hidden-lg.hidden-xs {\n    display: none !important;\n  }\n  tr.hidden-lg.hidden-xs {\n    display: none !important;\n  }\n  th.hidden-lg.hidden-xs,\n  td.hidden-lg.hidden-xs {\n    display: none !important;\n  }\n}\n\n@media (min-width: 768px) and (max-width: 991px) {\n  .hidden-lg.hidden-sm {\n    display: none !important;\n  }\n  tr.hidden-lg.hidden-sm {\n    display: none !important;\n  }\n  th.hidden-lg.hidden-sm,\n  td.hidden-lg.hidden-sm {\n    display: none !important;\n  }\n}\n\n@media (min-width: 992px) and (max-width: 1199px) {\n  .hidden-lg.hidden-md {\n    display: none !important;\n  }\n  tr.hidden-lg.hidden-md {\n    display: none !important;\n  }\n  th.hidden-lg.hidden-md,\n  td.hidden-lg.hidden-md {\n    display: none !important;\n  }\n}\n\n@media (min-width: 1200px) {\n  .hidden-lg {\n    display: none !important;\n  }\n  tr.hidden-lg {\n    display: none !important;\n  }\n  th.hidden-lg,\n  td.hidden-lg {\n    display: none !important;\n  }\n}\n\n.visible-print {\n  display: none !important;\n}\n\ntr.visible-print {\n  display: none !important;\n}\n\nth.visible-print,\ntd.visible-print {\n  display: none !important;\n}\n\n@media print {\n  .visible-print {\n    display: block !important;\n  }\n  tr.visible-print {\n    display: table-row !important;\n  }\n  th.visible-print,\n  td.visible-print {\n    display: table-cell !important;\n  }\n  .hidden-print {\n    display: none !important;\n  }\n  tr.hidden-print {\n    display: none !important;\n  }\n  th.hidden-print,\n  td.hidden-print {\n    display: none !important;\n  }\n}"
  },
  {
    "path": "content/css/creator.css",
    "content": "@import url(\"https://code.ionicframework.com/ionicons/2.0.1/css/ionicons.min.css\");\n@import url(\"https://fonts.googleapis.com/css?family=Roboto+Mono\");\n@font-face {\n  font-family: 'Ionicons';\n  src: url(\"/fonts/ionicons.woff2\") format(\"woff2\"), url(\"/fonts/ionicons.woff\") format(\"woff\"), url(\"/fonts/ionicons.ttf\") format(\"ttf\"), url(\"/fonts/ionicons.eot#iefix\") format(\"eot\") url(\"/fonts/ionicons.svg#Ionicons\") format(\"svg\");\n  font-weight: normal;\n  font-style: normal; }\n\n@font-face {\n  font-family: 'Eina';\n  src: url(\"/fonts/eina/eina-01-bold.woff2\") format(\"woff2\"), url(\"/fonts/eina/eina-01-bold.woff\") format(\"woff\"), url(\"/fonts/eina/eina-01-bold.ttf\") format(\"ttf\"), url(\"/fonts/eina/eina-01-bold.eot?#iefix\") format(\"eot\");\n  font-weight: 700;\n  unicode-range: U+000-5FF; }\n\n@font-face {\n  font-family: 'Eina';\n  src: url(\"/fonts/eina/eina-01-semibold.woff2\") format(\"woff2\"), url(\"/fonts/eina/eina-01-semibold.woff\") format(\"woff\"), url(\"/fonts/eina/eina-01-semibold.ttf\") format(\"ttf\"), url(\"/fonts/eina/eina-01-semibold.eot?#iefix\") format(\"eot\");\n  font-weight: 600;\n  unicode-range: U+000-5FF; }\n\n@font-face {\n  font-family: 'Eina';\n  src: url(\"/fonts/eina/eina-01-regular.woff2\") format(\"woff2\"), url(\"/fonts/eina/eina-01-regular.woff\") format(\"woff\"), url(\"/fonts/eina/eina-01-regular.ttf\") format(\"ttf\"), url(\"/fonts/eina/eina-01-regular.eot?#iefix\") format(\"eot\");\n  font-weight: 400;\n  unicode-range: U+000-5FF; }\n\n@font-face {\n  font-family: 'Inter';\n  font-style: normal;\n  font-weight: 400;\n  unicode-range: U+000-5FF;\n  src: url(\"https://code.ionicframework.com/assets/fonts/inter/Inter-Regular.woff2\") format(\"woff2\"), url(\"https://code.ionicframework.com/assets/fonts/inter/Inter-Regular.woff\") format(\"woff\"); }\n\n@font-face {\n  font-family: 'Inter';\n  font-style: italic;\n  font-weight: 400;\n  unicode-range: U+000-5FF;\n  src: url(\"https://code.ionicframework.com/assets/fonts/inter/Inter-Italic.woff2\") format(\"woff2\"), url(\"https://code.ionicframework.com/assets/fonts/inter/Inter-Italic.woff\") format(\"woff\"); }\n\n@font-face {\n  font-family: 'Inter';\n  font-style: normal;\n  font-weight: 500;\n  unicode-range: U+000-5FF;\n  src: url(\"https://code.ionicframework.com/assets/fonts/inter/Inter-Medium.woff2\") format(\"woff2\"), url(\"https://code.ionicframework.com/assets/fonts/inter/Inter-Medium.woff\") format(\"woff\"); }\n\n@font-face {\n  font-family: 'Inter';\n  font-style: italic;\n  font-weight: 500;\n  unicode-range: U+000-5FF;\n  src: url(\"https://code.ionicframework.com/assets/fonts/inter/Inter-MediumItalic.woff2\") format(\"woff2\"), url(\"https://code.ionicframework.com/assets/fonts/inter/Inter-MediumItalic.woff\") format(\"woff\"); }\n\n@font-face {\n  font-family: 'Inter';\n  font-style: normal;\n  font-weight: 600;\n  unicode-range: U+000-5FF;\n  src: url(\"https://code.ionicframework.com/assets/fonts/inter/Inter-SemiBold.woff2\") format(\"woff2\"), url(\"https://code.ionicframework.com/assets/fonts/inter/Inter-SemiBold.woff\") format(\"woff\"); }\n\n@font-face {\n  font-family: 'Inter';\n  font-style: italic;\n  font-weight: 600;\n  unicode-range: U+000-5FF;\n  src: url(\"https://code.ionicframework.com/assets/fonts/inter/Inter-SemiBoldItalic.woff2\") format(\"woff2\"), url(\"https://code.ionicframework.com/assets/fonts/inter/Inter-SemiBoldItalic.woff\") format(\"woff\"); }\n\n@font-face {\n  font-family: 'Inter';\n  font-style: normal;\n  font-weight: 700;\n  unicode-range: U+000-5FF;\n  src: url(\"https://code.ionicframework.com/assets/fonts/inter/Inter-Bold.woff2\") format(\"woff2\"), url(\"https://code.ionicframework.com/assets/fonts/inter/Inter-Bold.woff\") format(\"woff\"); }\n\n@font-face {\n  font-family: 'Inter';\n  font-style: italic;\n  font-weight: 700;\n  unicode-range: U+000-5FF;\n  src: url(\"https://code.ionicframework.com/assets/fonts/inter/Inter-BoldItalic.woff2\") format(\"woff2\"), url(\"https://code.ionicframework.com/assets/fonts/inter/Inter-BoldItalic.woff\") format(\"woff\"); }\n\n@font-face {\n  font-family: 'Inter';\n  font-style: normal;\n  font-weight: 800;\n  unicode-range: U+000-5FF;\n  src: url(\"https://code.ionicframework.com/assets/fonts/inter/Inter-ExtraBold.woff2\") format(\"woff2\"), url(\"https://code.ionicframework.com/assets/fonts/inter/Inter-ExtraBold.woff\") format(\"woff\"); }\n\n@font-face {\n  font-family: 'Inter';\n  font-style: italic;\n  font-weight: 800;\n  unicode-range: U+000-5FF;\n  src: url(\"https://code.ionicframework.com/assets/fonts/inter/Inter-ExtraBoldItalic.woff2\") format(\"woff2\"), url(\"https://code.ionicframework.com/assets/fonts/inter/Inter-ExtraBoldItalic.woff\") format(\"woff\"); }\n\n@font-face {\n  font-family: 'Inter';\n  font-style: normal;\n  font-weight: 900;\n  unicode-range: U+000-5FF;\n  src: url(\"https://code.ionicframework.com/assets/fonts/inter/Inter-Black.woff2\") format(\"woff2\"), url(\"https://code.ionicframework.com/assets/fonts/inter/Inter-Black.woff\") format(\"woff\"); }\n\n@font-face {\n  font-family: 'Inter';\n  font-style: italic;\n  font-weight: 900;\n  unicode-range: U+000-5FF;\n  src: url(\"https://code.ionicframework.com/assets/fonts/inter/Inter-BlackItalic.woff2\") format(\"woff2\"), url(\"https://code.ionicframework.com/assets/fonts/inter/Inter-BlackItalic.woff\") format(\"woff\"); }\n\n/*! normalize.css v3.0.2 | MIT License | git.io/normalize */\nhtml {\n  font-family: sans-serif;\n  -ms-text-size-adjust: 100%;\n  -webkit-text-size-adjust: 100%; }\n\nbody {\n  margin: 0; }\n\narticle,\naside,\ndetails,\nfigcaption,\nfigure,\nfooter,\nheader,\nhgroup,\nmain,\nmenu,\nnav,\nsection,\nsummary {\n  display: block; }\n\naudio,\ncanvas,\nprogress,\nvideo {\n  display: inline-block;\n  vertical-align: baseline; }\n\naudio:not([controls]) {\n  display: none;\n  height: 0; }\n\n[hidden],\ntemplate {\n  display: none; }\n\na {\n  background-color: transparent; }\n\na:active,\na:hover {\n  outline: 0; }\n\nabbr[title] {\n  border-bottom: 1px dotted; }\n\nb,\nstrong {\n  font-weight: bold; }\n\ndfn {\n  font-style: italic; }\n\nh1 {\n  font-size: 2em;\n  margin: 0.67em 0; }\n\nmark {\n  background: #ff0;\n  color: #000; }\n\nsmall {\n  font-size: 80%; }\n\nsub,\nsup {\n  font-size: 75%;\n  line-height: 0;\n  position: relative;\n  vertical-align: baseline; }\n\nsup {\n  top: -0.5em; }\n\nsub {\n  bottom: -0.25em; }\n\nimg {\n  border: 0; }\n\nsvg:not(:root) {\n  overflow: hidden; }\n\nfigure {\n  margin: 1em 40px; }\n\nhr {\n  box-sizing: content-box;\n  height: 0; }\n\npre {\n  overflow: auto; }\n\ncode,\nkbd,\npre,\nsamp {\n  font-family: monospace, monospace;\n  font-size: 1em; }\n\nbutton,\ninput,\noptgroup,\nselect,\ntextarea {\n  color: inherit;\n  font: inherit;\n  margin: 0; }\n\nbutton {\n  overflow: visible; }\n\nbutton,\nselect {\n  text-transform: none; }\n\nbutton,\nhtml input[type=\"button\"],\ninput[type=\"reset\"],\ninput[type=\"submit\"] {\n  -webkit-appearance: button;\n  cursor: pointer; }\n\nbutton[disabled],\nhtml input[disabled] {\n  cursor: default; }\n\nbutton::-moz-focus-inner,\ninput::-moz-focus-inner {\n  border: 0;\n  padding: 0; }\n\ninput {\n  line-height: normal; }\n\ninput[type=\"checkbox\"],\ninput[type=\"radio\"] {\n  box-sizing: border-box;\n  padding: 0; }\n\ninput[type=\"number\"]::-webkit-inner-spin-button,\ninput[type=\"number\"]::-webkit-outer-spin-button {\n  height: auto; }\n\ninput[type=\"search\"] {\n  -webkit-appearance: textfield;\n  box-sizing: content-box; }\n\ninput[type=\"search\"]::-webkit-search-cancel-button,\ninput[type=\"search\"]::-webkit-search-decoration {\n  -webkit-appearance: none; }\n\nfieldset {\n  border: 1px solid #c0c0c0;\n  margin: 0 2px;\n  padding: 0.35em 0.625em 0.75em; }\n\nlegend {\n  border: 0;\n  padding: 0; }\n\ntextarea {\n  overflow: auto; }\n\noptgroup {\n  font-weight: bold; }\n\ntable {\n  border-collapse: collapse;\n  border-spacing: 0; }\n\ntd,\nth {\n  padding: 0; }\n\n/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */\n@media print {\n  *,\n  *:before,\n  *:after {\n    background: transparent !important;\n    color: #000 !important;\n    box-shadow: none !important;\n    text-shadow: none !important; }\n  a,\n  a:visited {\n    text-decoration: underline; }\n  a[href]:after {\n    content: \" (\" attr(href) \")\"; }\n  abbr[title]:after {\n    content: \" (\" attr(title) \")\"; }\n  a[href^=\"#\"]:after,\n  a[href^=\"javascript:\"]:after {\n    content: \"\"; }\n  pre,\n  blockquote {\n    border: 1px solid #999;\n    page-break-inside: avoid; }\n  thead {\n    display: table-header-group; }\n  tr,\n  img {\n    page-break-inside: avoid; }\n  img {\n    max-width: 100% !important; }\n  p,\n  h2,\n  h3 {\n    orphans: 3;\n    widows: 3; }\n  h2,\n  h3 {\n    page-break-after: avoid; }\n  select {\n    background: #fff !important; }\n  .navbar {\n    display: none; }\n  .btn > .caret,\n  .dropup > .btn > .caret {\n    border-top-color: #000 !important; }\n  .label {\n    border: 1px solid #000; }\n  .table {\n    border-collapse: collapse !important; }\n    .table td,\n    .table th {\n      background-color: #fff !important; }\n  .table-bordered th,\n  .table-bordered td {\n    border: 1px solid #ddd !important; } }\n\n@font-face {\n  font-family: 'Glyphicons Halflings';\n  src: url(\"../fonts/bootstrap/glyphicons-halflings-regular.eot\");\n  src: url(\"../fonts/bootstrap/glyphicons-halflings-regular.eot?#iefix\") format(\"embedded-opentype\"), url(\"../fonts/bootstrap/glyphicons-halflings-regular.woff2\") format(\"woff2\"), url(\"../fonts/bootstrap/glyphicons-halflings-regular.woff\") format(\"woff\"), url(\"../fonts/bootstrap/glyphicons-halflings-regular.ttf\") format(\"truetype\"), url(\"../fonts/bootstrap/glyphicons-halflings-regular.svg#glyphicons_halflingsregular\") format(\"svg\"); }\n\n.glyphicon {\n  position: relative;\n  top: 1px;\n  display: inline-block;\n  font-family: 'Glyphicons Halflings';\n  font-style: normal;\n  font-weight: normal;\n  line-height: 1;\n  -webkit-font-smoothing: antialiased;\n  -moz-osx-font-smoothing: grayscale; }\n\n.glyphicon-asterisk:before {\n  content: \"\\2a\"; }\n\n.glyphicon-plus:before {\n  content: \"\\2b\"; }\n\n.glyphicon-euro:before,\n.glyphicon-eur:before {\n  content: \"\\20ac\"; }\n\n.glyphicon-minus:before {\n  content: \"\\2212\"; }\n\n.glyphicon-cloud:before {\n  content: \"\\2601\"; }\n\n.glyphicon-envelope:before {\n  content: \"\\2709\"; }\n\n.glyphicon-pencil:before {\n  content: \"\\270f\"; }\n\n.glyphicon-glass:before {\n  content: \"\\e001\"; }\n\n.glyphicon-music:before {\n  content: \"\\e002\"; }\n\n.glyphicon-search:before {\n  content: \"\\e003\"; }\n\n.glyphicon-heart:before {\n  content: \"\\e005\"; }\n\n.glyphicon-star:before {\n  content: \"\\e006\"; }\n\n.glyphicon-star-empty:before {\n  content: \"\\e007\"; }\n\n.glyphicon-user:before {\n  content: \"\\e008\"; }\n\n.glyphicon-film:before {\n  content: \"\\e009\"; }\n\n.glyphicon-th-large:before {\n  content: \"\\e010\"; }\n\n.glyphicon-th:before {\n  content: \"\\e011\"; }\n\n.glyphicon-th-list:before {\n  content: \"\\e012\"; }\n\n.glyphicon-ok:before {\n  content: \"\\e013\"; }\n\n.glyphicon-remove:before {\n  content: \"\\e014\"; }\n\n.glyphicon-zoom-in:before {\n  content: \"\\e015\"; }\n\n.glyphicon-zoom-out:before {\n  content: \"\\e016\"; }\n\n.glyphicon-off:before {\n  content: \"\\e017\"; }\n\n.glyphicon-signal:before {\n  content: \"\\e018\"; }\n\n.glyphicon-cog:before {\n  content: \"\\e019\"; }\n\n.glyphicon-trash:before {\n  content: \"\\e020\"; }\n\n.glyphicon-home:before {\n  content: \"\\e021\"; }\n\n.glyphicon-file:before {\n  content: \"\\e022\"; }\n\n.glyphicon-time:before {\n  content: \"\\e023\"; }\n\n.glyphicon-road:before {\n  content: \"\\e024\"; }\n\n.glyphicon-download-alt:before {\n  content: \"\\e025\"; }\n\n.glyphicon-download:before {\n  content: \"\\e026\"; }\n\n.glyphicon-upload:before {\n  content: \"\\e027\"; }\n\n.glyphicon-inbox:before {\n  content: \"\\e028\"; }\n\n.glyphicon-play-circle:before {\n  content: \"\\e029\"; }\n\n.glyphicon-repeat:before {\n  content: \"\\e030\"; }\n\n.glyphicon-refresh:before {\n  content: \"\\e031\"; }\n\n.glyphicon-list-alt:before {\n  content: \"\\e032\"; }\n\n.glyphicon-lock:before {\n  content: \"\\e033\"; }\n\n.glyphicon-flag:before {\n  content: \"\\e034\"; }\n\n.glyphicon-headphones:before {\n  content: \"\\e035\"; }\n\n.glyphicon-volume-off:before {\n  content: \"\\e036\"; }\n\n.glyphicon-volume-down:before {\n  content: \"\\e037\"; }\n\n.glyphicon-volume-up:before {\n  content: \"\\e038\"; }\n\n.glyphicon-qrcode:before {\n  content: \"\\e039\"; }\n\n.glyphicon-barcode:before {\n  content: \"\\e040\"; }\n\n.glyphicon-tag:before {\n  content: \"\\e041\"; }\n\n.glyphicon-tags:before {\n  content: \"\\e042\"; }\n\n.glyphicon-book:before {\n  content: \"\\e043\"; }\n\n.glyphicon-bookmark:before {\n  content: \"\\e044\"; }\n\n.glyphicon-print:before {\n  content: \"\\e045\"; }\n\n.glyphicon-camera:before {\n  content: \"\\e046\"; }\n\n.glyphicon-font:before {\n  content: \"\\e047\"; }\n\n.glyphicon-bold:before {\n  content: \"\\e048\"; }\n\n.glyphicon-italic:before {\n  content: \"\\e049\"; }\n\n.glyphicon-text-height:before {\n  content: \"\\e050\"; }\n\n.glyphicon-text-width:before {\n  content: \"\\e051\"; }\n\n.glyphicon-align-left:before {\n  content: \"\\e052\"; }\n\n.glyphicon-align-center:before {\n  content: \"\\e053\"; }\n\n.glyphicon-align-right:before {\n  content: \"\\e054\"; }\n\n.glyphicon-align-justify:before {\n  content: \"\\e055\"; }\n\n.glyphicon-list:before {\n  content: \"\\e056\"; }\n\n.glyphicon-indent-left:before {\n  content: \"\\e057\"; }\n\n.glyphicon-indent-right:before {\n  content: \"\\e058\"; }\n\n.glyphicon-facetime-video:before {\n  content: \"\\e059\"; }\n\n.glyphicon-picture:before {\n  content: \"\\e060\"; }\n\n.glyphicon-map-marker:before {\n  content: \"\\e062\"; }\n\n.glyphicon-adjust:before {\n  content: \"\\e063\"; }\n\n.glyphicon-tint:before {\n  content: \"\\e064\"; }\n\n.glyphicon-edit:before {\n  content: \"\\e065\"; }\n\n.glyphicon-share:before {\n  content: \"\\e066\"; }\n\n.glyphicon-check:before {\n  content: \"\\e067\"; }\n\n.glyphicon-move:before {\n  content: \"\\e068\"; }\n\n.glyphicon-step-backward:before {\n  content: \"\\e069\"; }\n\n.glyphicon-fast-backward:before {\n  content: \"\\e070\"; }\n\n.glyphicon-backward:before {\n  content: \"\\e071\"; }\n\n.glyphicon-play:before {\n  content: \"\\e072\"; }\n\n.glyphicon-pause:before {\n  content: \"\\e073\"; }\n\n.glyphicon-stop:before {\n  content: \"\\e074\"; }\n\n.glyphicon-forward:before {\n  content: \"\\e075\"; }\n\n.glyphicon-fast-forward:before {\n  content: \"\\e076\"; }\n\n.glyphicon-step-forward:before {\n  content: \"\\e077\"; }\n\n.glyphicon-eject:before {\n  content: \"\\e078\"; }\n\n.glyphicon-chevron-left:before {\n  content: \"\\e079\"; }\n\n.glyphicon-chevron-right:before {\n  content: \"\\e080\"; }\n\n.glyphicon-plus-sign:before {\n  content: \"\\e081\"; }\n\n.glyphicon-minus-sign:before {\n  content: \"\\e082\"; }\n\n.glyphicon-remove-sign:before {\n  content: \"\\e083\"; }\n\n.glyphicon-ok-sign:before {\n  content: \"\\e084\"; }\n\n.glyphicon-question-sign:before {\n  content: \"\\e085\"; }\n\n.glyphicon-info-sign:before {\n  content: \"\\e086\"; }\n\n.glyphicon-screenshot:before {\n  content: \"\\e087\"; }\n\n.glyphicon-remove-circle:before {\n  content: \"\\e088\"; }\n\n.glyphicon-ok-circle:before {\n  content: \"\\e089\"; }\n\n.glyphicon-ban-circle:before {\n  content: \"\\e090\"; }\n\n.glyphicon-arrow-left:before {\n  content: \"\\e091\"; }\n\n.glyphicon-arrow-right:before {\n  content: \"\\e092\"; }\n\n.glyphicon-arrow-up:before {\n  content: \"\\e093\"; }\n\n.glyphicon-arrow-down:before {\n  content: \"\\e094\"; }\n\n.glyphicon-share-alt:before {\n  content: \"\\e095\"; }\n\n.glyphicon-resize-full:before {\n  content: \"\\e096\"; }\n\n.glyphicon-resize-small:before {\n  content: \"\\e097\"; }\n\n.glyphicon-exclamation-sign:before {\n  content: \"\\e101\"; }\n\n.glyphicon-gift:before {\n  content: \"\\e102\"; }\n\n.glyphicon-leaf:before {\n  content: \"\\e103\"; }\n\n.glyphicon-fire:before {\n  content: \"\\e104\"; }\n\n.glyphicon-eye-open:before {\n  content: \"\\e105\"; }\n\n.glyphicon-eye-close:before {\n  content: \"\\e106\"; }\n\n.glyphicon-warning-sign:before {\n  content: \"\\e107\"; }\n\n.glyphicon-plane:before {\n  content: \"\\e108\"; }\n\n.glyphicon-calendar:before {\n  content: \"\\e109\"; }\n\n.glyphicon-random:before {\n  content: \"\\e110\"; }\n\n.glyphicon-comment:before {\n  content: \"\\e111\"; }\n\n.glyphicon-magnet:before {\n  content: \"\\e112\"; }\n\n.glyphicon-chevron-up:before {\n  content: \"\\e113\"; }\n\n.glyphicon-chevron-down:before {\n  content: \"\\e114\"; }\n\n.glyphicon-retweet:before {\n  content: \"\\e115\"; }\n\n.glyphicon-shopping-cart:before {\n  content: \"\\e116\"; }\n\n.glyphicon-folder-close:before {\n  content: \"\\e117\"; }\n\n.glyphicon-folder-open:before {\n  content: \"\\e118\"; }\n\n.glyphicon-resize-vertical:before {\n  content: \"\\e119\"; }\n\n.glyphicon-resize-horizontal:before {\n  content: \"\\e120\"; }\n\n.glyphicon-hdd:before {\n  content: \"\\e121\"; }\n\n.glyphicon-bullhorn:before {\n  content: \"\\e122\"; }\n\n.glyphicon-bell:before {\n  content: \"\\e123\"; }\n\n.glyphicon-certificate:before {\n  content: \"\\e124\"; }\n\n.glyphicon-thumbs-up:before {\n  content: \"\\e125\"; }\n\n.glyphicon-thumbs-down:before {\n  content: \"\\e126\"; }\n\n.glyphicon-hand-right:before {\n  content: \"\\e127\"; }\n\n.glyphicon-hand-left:before {\n  content: \"\\e128\"; }\n\n.glyphicon-hand-up:before {\n  content: \"\\e129\"; }\n\n.glyphicon-hand-down:before {\n  content: \"\\e130\"; }\n\n.glyphicon-circle-arrow-right:before {\n  content: \"\\e131\"; }\n\n.glyphicon-circle-arrow-left:before {\n  content: \"\\e132\"; }\n\n.glyphicon-circle-arrow-up:before {\n  content: \"\\e133\"; }\n\n.glyphicon-circle-arrow-down:before {\n  content: \"\\e134\"; }\n\n.glyphicon-globe:before {\n  content: \"\\e135\"; }\n\n.glyphicon-wrench:before {\n  content: \"\\e136\"; }\n\n.glyphicon-tasks:before {\n  content: \"\\e137\"; }\n\n.glyphicon-filter:before {\n  content: \"\\e138\"; }\n\n.glyphicon-briefcase:before {\n  content: \"\\e139\"; }\n\n.glyphicon-fullscreen:before {\n  content: \"\\e140\"; }\n\n.glyphicon-dashboard:before {\n  content: \"\\e141\"; }\n\n.glyphicon-paperclip:before {\n  content: \"\\e142\"; }\n\n.glyphicon-heart-empty:before {\n  content: \"\\e143\"; }\n\n.glyphicon-link:before {\n  content: \"\\e144\"; }\n\n.glyphicon-phone:before {\n  content: \"\\e145\"; }\n\n.glyphicon-pushpin:before {\n  content: \"\\e146\"; }\n\n.glyphicon-usd:before {\n  content: \"\\e148\"; }\n\n.glyphicon-gbp:before {\n  content: \"\\e149\"; }\n\n.glyphicon-sort:before {\n  content: \"\\e150\"; }\n\n.glyphicon-sort-by-alphabet:before {\n  content: \"\\e151\"; }\n\n.glyphicon-sort-by-alphabet-alt:before {\n  content: \"\\e152\"; }\n\n.glyphicon-sort-by-order:before {\n  content: \"\\e153\"; }\n\n.glyphicon-sort-by-order-alt:before {\n  content: \"\\e154\"; }\n\n.glyphicon-sort-by-attributes:before {\n  content: \"\\e155\"; }\n\n.glyphicon-sort-by-attributes-alt:before {\n  content: \"\\e156\"; }\n\n.glyphicon-unchecked:before {\n  content: \"\\e157\"; }\n\n.glyphicon-expand:before {\n  content: \"\\e158\"; }\n\n.glyphicon-collapse-down:before {\n  content: \"\\e159\"; }\n\n.glyphicon-collapse-up:before {\n  content: \"\\e160\"; }\n\n.glyphicon-log-in:before {\n  content: \"\\e161\"; }\n\n.glyphicon-flash:before {\n  content: \"\\e162\"; }\n\n.glyphicon-log-out:before {\n  content: \"\\e163\"; }\n\n.glyphicon-new-window:before {\n  content: \"\\e164\"; }\n\n.glyphicon-record:before {\n  content: \"\\e165\"; }\n\n.glyphicon-save:before {\n  content: \"\\e166\"; }\n\n.glyphicon-open:before {\n  content: \"\\e167\"; }\n\n.glyphicon-saved:before {\n  content: \"\\e168\"; }\n\n.glyphicon-import:before {\n  content: \"\\e169\"; }\n\n.glyphicon-export:before {\n  content: \"\\e170\"; }\n\n.glyphicon-send:before {\n  content: \"\\e171\"; }\n\n.glyphicon-floppy-disk:before {\n  content: \"\\e172\"; }\n\n.glyphicon-floppy-saved:before {\n  content: \"\\e173\"; }\n\n.glyphicon-floppy-remove:before {\n  content: \"\\e174\"; }\n\n.glyphicon-floppy-save:before {\n  content: \"\\e175\"; }\n\n.glyphicon-floppy-open:before {\n  content: \"\\e176\"; }\n\n.glyphicon-credit-card:before {\n  content: \"\\e177\"; }\n\n.glyphicon-transfer:before {\n  content: \"\\e178\"; }\n\n.glyphicon-cutlery:before {\n  content: \"\\e179\"; }\n\n.glyphicon-header:before {\n  content: \"\\e180\"; }\n\n.glyphicon-compressed:before {\n  content: \"\\e181\"; }\n\n.glyphicon-earphone:before {\n  content: \"\\e182\"; }\n\n.glyphicon-phone-alt:before {\n  content: \"\\e183\"; }\n\n.glyphicon-tower:before {\n  content: \"\\e184\"; }\n\n.glyphicon-stats:before {\n  content: \"\\e185\"; }\n\n.glyphicon-sd-video:before {\n  content: \"\\e186\"; }\n\n.glyphicon-hd-video:before {\n  content: \"\\e187\"; }\n\n.glyphicon-subtitles:before {\n  content: \"\\e188\"; }\n\n.glyphicon-sound-stereo:before {\n  content: \"\\e189\"; }\n\n.glyphicon-sound-dolby:before {\n  content: \"\\e190\"; }\n\n.glyphicon-sound-5-1:before {\n  content: \"\\e191\"; }\n\n.glyphicon-sound-6-1:before {\n  content: \"\\e192\"; }\n\n.glyphicon-sound-7-1:before {\n  content: \"\\e193\"; }\n\n.glyphicon-copyright-mark:before {\n  content: \"\\e194\"; }\n\n.glyphicon-registration-mark:before {\n  content: \"\\e195\"; }\n\n.glyphicon-cloud-download:before {\n  content: \"\\e197\"; }\n\n.glyphicon-cloud-upload:before {\n  content: \"\\e198\"; }\n\n.glyphicon-tree-conifer:before {\n  content: \"\\e199\"; }\n\n.glyphicon-tree-deciduous:before {\n  content: \"\\e200\"; }\n\n.glyphicon-cd:before {\n  content: \"\\e201\"; }\n\n.glyphicon-save-file:before {\n  content: \"\\e202\"; }\n\n.glyphicon-open-file:before {\n  content: \"\\e203\"; }\n\n.glyphicon-level-up:before {\n  content: \"\\e204\"; }\n\n.glyphicon-copy:before {\n  content: \"\\e205\"; }\n\n.glyphicon-paste:before {\n  content: \"\\e206\"; }\n\n.glyphicon-alert:before {\n  content: \"\\e209\"; }\n\n.glyphicon-equalizer:before {\n  content: \"\\e210\"; }\n\n.glyphicon-king:before {\n  content: \"\\e211\"; }\n\n.glyphicon-queen:before {\n  content: \"\\e212\"; }\n\n.glyphicon-pawn:before {\n  content: \"\\e213\"; }\n\n.glyphicon-bishop:before {\n  content: \"\\e214\"; }\n\n.glyphicon-knight:before {\n  content: \"\\e215\"; }\n\n.glyphicon-baby-formula:before {\n  content: \"\\e216\"; }\n\n.glyphicon-tent:before {\n  content: \"\\26fa\"; }\n\n.glyphicon-blackboard:before {\n  content: \"\\e218\"; }\n\n.glyphicon-bed:before {\n  content: \"\\e219\"; }\n\n.glyphicon-apple:before {\n  content: \"\\f8ff\"; }\n\n.glyphicon-erase:before {\n  content: \"\\e221\"; }\n\n.glyphicon-hourglass:before {\n  content: \"\\231b\"; }\n\n.glyphicon-lamp:before {\n  content: \"\\e223\"; }\n\n.glyphicon-duplicate:before {\n  content: \"\\e224\"; }\n\n.glyphicon-piggy-bank:before {\n  content: \"\\e225\"; }\n\n.glyphicon-scissors:before {\n  content: \"\\e226\"; }\n\n.glyphicon-bitcoin:before {\n  content: \"\\e227\"; }\n\n.glyphicon-btc:before {\n  content: \"\\e227\"; }\n\n.glyphicon-xbt:before {\n  content: \"\\e227\"; }\n\n.glyphicon-yen:before {\n  content: \"\\00a5\"; }\n\n.glyphicon-jpy:before {\n  content: \"\\00a5\"; }\n\n.glyphicon-ruble:before {\n  content: \"\\20bd\"; }\n\n.glyphicon-rub:before {\n  content: \"\\20bd\"; }\n\n.glyphicon-scale:before {\n  content: \"\\e230\"; }\n\n.glyphicon-ice-lolly:before {\n  content: \"\\e231\"; }\n\n.glyphicon-ice-lolly-tasted:before {\n  content: \"\\e232\"; }\n\n.glyphicon-education:before {\n  content: \"\\e233\"; }\n\n.glyphicon-option-horizontal:before {\n  content: \"\\e234\"; }\n\n.glyphicon-option-vertical:before {\n  content: \"\\e235\"; }\n\n.glyphicon-menu-hamburger:before {\n  content: \"\\e236\"; }\n\n.glyphicon-modal-window:before {\n  content: \"\\e237\"; }\n\n.glyphicon-oil:before {\n  content: \"\\e238\"; }\n\n.glyphicon-grain:before {\n  content: \"\\e239\"; }\n\n.glyphicon-sunglasses:before {\n  content: \"\\e240\"; }\n\n.glyphicon-text-size:before {\n  content: \"\\e241\"; }\n\n.glyphicon-text-color:before {\n  content: \"\\e242\"; }\n\n.glyphicon-text-background:before {\n  content: \"\\e243\"; }\n\n.glyphicon-object-align-top:before {\n  content: \"\\e244\"; }\n\n.glyphicon-object-align-bottom:before {\n  content: \"\\e245\"; }\n\n.glyphicon-object-align-horizontal:before {\n  content: \"\\e246\"; }\n\n.glyphicon-object-align-left:before {\n  content: \"\\e247\"; }\n\n.glyphicon-object-align-vertical:before {\n  content: \"\\e248\"; }\n\n.glyphicon-object-align-right:before {\n  content: \"\\e249\"; }\n\n.glyphicon-triangle-right:before {\n  content: \"\\e250\"; }\n\n.glyphicon-triangle-left:before {\n  content: \"\\e251\"; }\n\n.glyphicon-triangle-bottom:before {\n  content: \"\\e252\"; }\n\n.glyphicon-triangle-top:before {\n  content: \"\\e253\"; }\n\n.glyphicon-console:before {\n  content: \"\\e254\"; }\n\n.glyphicon-superscript:before {\n  content: \"\\e255\"; }\n\n.glyphicon-subscript:before {\n  content: \"\\e256\"; }\n\n.glyphicon-menu-left:before {\n  content: \"\\e257\"; }\n\n.glyphicon-menu-right:before {\n  content: \"\\e258\"; }\n\n.glyphicon-menu-down:before {\n  content: \"\\e259\"; }\n\n.glyphicon-menu-up:before {\n  content: \"\\e260\"; }\n\n* {\n  box-sizing: border-box; }\n\n*:before,\n*:after {\n  box-sizing: border-box; }\n\nhtml {\n  font-size: 10px;\n  -webkit-tap-highlight-color: rgba(0, 0, 0, 0); }\n\nbody {\n  font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n  font-size: 14px;\n  line-height: 1.428571429;\n  color: #333333;\n  background-color: #fff; }\n\ninput,\nbutton,\nselect,\ntextarea {\n  font-family: inherit;\n  font-size: inherit;\n  line-height: inherit; }\n\na {\n  color: #337ab7;\n  text-decoration: none; }\n  a:hover, a:focus {\n    color: #23527c;\n    text-decoration: underline; }\n  a:focus {\n    outline: thin dotted;\n    outline: 5px auto -webkit-focus-ring-color;\n    outline-offset: -2px; }\n\nfigure {\n  margin: 0; }\n\nimg {\n  vertical-align: middle; }\n\n.img-responsive {\n  display: block;\n  max-width: 100%;\n  height: auto; }\n\n.img-rounded {\n  border-radius: 6px; }\n\n.img-thumbnail {\n  padding: 4px;\n  line-height: 1.428571429;\n  background-color: #fff;\n  border: 1px solid #ddd;\n  border-radius: 4px;\n  transition: all 0.2s ease-in-out;\n  display: inline-block;\n  max-width: 100%;\n  height: auto; }\n\n.img-circle {\n  border-radius: 50%; }\n\nhr {\n  margin-top: 20px;\n  margin-bottom: 20px;\n  border: 0;\n  border-top: 1px solid #eeeeee; }\n\n.sr-only {\n  position: absolute;\n  width: 1px;\n  height: 1px;\n  margin: -1px;\n  padding: 0;\n  overflow: hidden;\n  clip: rect(0, 0, 0, 0);\n  border: 0; }\n\n.sr-only-focusable:active, .sr-only-focusable:focus {\n  position: static;\n  width: auto;\n  height: auto;\n  margin: 0;\n  overflow: visible;\n  clip: auto; }\n\n[role=\"button\"] {\n  cursor: pointer; }\n\nh1, h2, h3, h4, h5, h6,\n.h1, .h2, .h3, .h4, .h5, .h6 {\n  font-family: inherit;\n  font-weight: 700;\n  line-height: 1.1;\n  color: inherit; }\n  h1 small,\n  h1 .small, h2 small,\n  h2 .small, h3 small,\n  h3 .small, h4 small,\n  h4 .small, h5 small,\n  h5 .small, h6 small,\n  h6 .small,\n  .h1 small,\n  .h1 .small, .h2 small,\n  .h2 .small, .h3 small,\n  .h3 .small, .h4 small,\n  .h4 .small, .h5 small,\n  .h5 .small, .h6 small,\n  .h6 .small {\n    font-weight: normal;\n    line-height: 1;\n    color: #777777; }\n\nh1, .h1,\nh2, .h2,\nh3, .h3 {\n  margin-top: 20px;\n  margin-bottom: 10px; }\n  h1 small,\n  h1 .small, .h1 small,\n  .h1 .small,\n  h2 small,\n  h2 .small, .h2 small,\n  .h2 .small,\n  h3 small,\n  h3 .small, .h3 small,\n  .h3 .small {\n    font-size: 65%; }\n\nh4, .h4,\nh5, .h5,\nh6, .h6 {\n  margin-top: 10px;\n  margin-bottom: 10px; }\n  h4 small,\n  h4 .small, .h4 small,\n  .h4 .small,\n  h5 small,\n  h5 .small, .h5 small,\n  .h5 .small,\n  h6 small,\n  h6 .small, .h6 small,\n  .h6 .small {\n    font-size: 75%; }\n\nh1, .h1 {\n  font-size: 36px; }\n\nh2, .h2 {\n  font-size: 30px; }\n\nh3, .h3 {\n  font-size: 24px; }\n\nh4, .h4 {\n  font-size: 18px; }\n\nh5, .h5 {\n  font-size: 14px; }\n\nh6, .h6 {\n  font-size: 12px; }\n\np {\n  margin: 0 0 10px; }\n\n.lead {\n  margin-bottom: 20px;\n  font-size: 16px;\n  font-weight: 300;\n  line-height: 1.4; }\n  @media (min-width: 768px) {\n    .lead {\n      font-size: 21px; } }\n\nsmall,\n.small {\n  font-size: 85%; }\n\nmark,\n.mark {\n  background-color: #fcf8e3;\n  padding: .2em; }\n\n.text-left {\n  text-align: left; }\n\n.text-right {\n  text-align: right; }\n\n.text-center {\n  text-align: center; }\n\n.text-justify {\n  text-align: justify; }\n\n.text-nowrap {\n  white-space: nowrap; }\n\n.text-lowercase {\n  text-transform: lowercase; }\n\n.text-uppercase, .initialism {\n  text-transform: uppercase; }\n\n.text-capitalize {\n  text-transform: capitalize; }\n\n.text-muted {\n  color: #777777; }\n\n.text-primary {\n  color: #337ab7; }\n\na.text-primary:hover {\n  color: #286090; }\n\n.text-success {\n  color: #3c763d; }\n\na.text-success:hover {\n  color: #2b542c; }\n\n.text-info {\n  color: #31708f; }\n\na.text-info:hover {\n  color: #245269; }\n\n.text-warning {\n  color: #8a6d3b; }\n\na.text-warning:hover {\n  color: #66512c; }\n\n.text-danger {\n  color: #a94442; }\n\na.text-danger:hover {\n  color: #843534; }\n\n.bg-primary {\n  color: #fff; }\n\n.bg-primary {\n  background-color: #337ab7; }\n\na.bg-primary:hover {\n  background-color: #286090; }\n\n.bg-success {\n  background-color: #dff0d8; }\n\na.bg-success:hover {\n  background-color: #c1e2b3; }\n\n.bg-info {\n  background-color: #d9edf7; }\n\na.bg-info:hover {\n  background-color: #afd9ee; }\n\n.bg-warning {\n  background-color: #fcf8e3; }\n\na.bg-warning:hover {\n  background-color: #f7ecb5; }\n\n.bg-danger {\n  background-color: #f2dede; }\n\na.bg-danger:hover {\n  background-color: #e4b9b9; }\n\n.page-header {\n  padding-bottom: 9px;\n  margin: 40px 0 20px;\n  border-bottom: 1px solid #eeeeee; }\n\nul,\nol {\n  margin-top: 0;\n  margin-bottom: 10px; }\n  ul ul,\n  ul ol,\n  ol ul,\n  ol ol {\n    margin-bottom: 0; }\n\n.list-unstyled {\n  padding-left: 0;\n  list-style: none; }\n\n.list-inline {\n  padding-left: 0;\n  list-style: none;\n  margin-left: -5px; }\n  .list-inline > li {\n    display: inline-block;\n    padding-left: 5px;\n    padding-right: 5px; }\n\ndl {\n  margin-top: 0;\n  margin-bottom: 20px; }\n\ndt,\ndd {\n  line-height: 1.428571429; }\n\ndt {\n  font-weight: bold; }\n\ndd {\n  margin-left: 0; }\n\n.dl-horizontal dd:before, .dl-horizontal dd:after {\n  content: \" \";\n  display: table; }\n\n.dl-horizontal dd:after {\n  clear: both; }\n\n@media (min-width: 768px) {\n  .dl-horizontal dt {\n    float: left;\n    width: 160px;\n    clear: left;\n    text-align: right;\n    overflow: hidden;\n    text-overflow: ellipsis;\n    white-space: nowrap; }\n  .dl-horizontal dd {\n    margin-left: 180px; } }\n\nabbr[title],\nabbr[data-original-title] {\n  cursor: help;\n  border-bottom: 1px dotted #777777; }\n\n.initialism {\n  font-size: 90%; }\n\nblockquote {\n  padding: 10px 20px;\n  margin: 0 0 20px;\n  font-size: 17.5px;\n  border-left: 5px solid #eeeeee; }\n  blockquote p:last-child,\n  blockquote ul:last-child,\n  blockquote ol:last-child {\n    margin-bottom: 0; }\n  blockquote footer,\n  blockquote small,\n  blockquote .small {\n    display: block;\n    font-size: 80%;\n    line-height: 1.428571429;\n    color: #777777; }\n    blockquote footer:before,\n    blockquote small:before,\n    blockquote .small:before {\n      content: '\\2014 \\00A0'; }\n\n.blockquote-reverse,\nblockquote.pull-right {\n  padding-right: 15px;\n  padding-left: 0;\n  border-right: 5px solid #eeeeee;\n  border-left: 0;\n  text-align: right; }\n  .blockquote-reverse footer:before,\n  .blockquote-reverse small:before,\n  .blockquote-reverse .small:before,\n  blockquote.pull-right footer:before,\n  blockquote.pull-right small:before,\n  blockquote.pull-right .small:before {\n    content: ''; }\n  .blockquote-reverse footer:after,\n  .blockquote-reverse small:after,\n  .blockquote-reverse .small:after,\n  blockquote.pull-right footer:after,\n  blockquote.pull-right small:after,\n  blockquote.pull-right .small:after {\n    content: '\\00A0 \\2014'; }\n\naddress {\n  margin-bottom: 20px;\n  font-style: normal;\n  line-height: 1.428571429; }\n\ncode,\nkbd,\npre,\nsamp {\n  font-family: \"Roboto Mono\", Menlo, Monaco, Consolas, \"Courier New\", monospace; }\n\ncode {\n  padding: 2px 4px;\n  font-size: 90%;\n  color: #4D8CF4;\n  background-color: whitesmoke;\n  border-radius: 4px; }\n\nkbd {\n  padding: 2px 4px;\n  font-size: 90%;\n  color: #fff;\n  background-color: #333;\n  border-radius: 3px;\n  box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.25); }\n  kbd kbd {\n    padding: 0;\n    font-size: 100%;\n    font-weight: bold;\n    box-shadow: none; }\n\npre {\n  display: block;\n  padding: 9.5px;\n  margin: 0 0 10px;\n  font-size: 13px;\n  line-height: 1.428571429;\n  word-break: break-all;\n  word-wrap: break-word;\n  color: #333333;\n  background-color: #f5f5f5;\n  border: 1px solid #ccc;\n  border-radius: 4px; }\n  pre code {\n    padding: 0;\n    font-size: inherit;\n    color: inherit;\n    white-space: pre-wrap;\n    background-color: transparent;\n    border-radius: 0; }\n\n.pre-scrollable {\n  max-height: 340px;\n  overflow-y: scroll; }\n\n.container {\n  margin-right: auto;\n  margin-left: auto;\n  padding-left: 15px;\n  padding-right: 15px; }\n  .container:before, .container:after {\n    content: \" \";\n    display: table; }\n  .container:after {\n    clear: both; }\n  @media (min-width: 768px) {\n    .container {\n      width: 750px; } }\n  @media (min-width: 992px) {\n    .container {\n      width: 970px; } }\n  @media (min-width: 1220px) {\n    .container {\n      width: 1170px; } }\n\n.container-fluid {\n  margin-right: auto;\n  margin-left: auto;\n  padding-left: 15px;\n  padding-right: 15px; }\n  .container-fluid:before, .container-fluid:after {\n    content: \" \";\n    display: table; }\n  .container-fluid:after {\n    clear: both; }\n\n.row {\n  margin-left: -15px;\n  margin-right: -15px; }\n  .row:before, .row:after {\n    content: \" \";\n    display: table; }\n  .row:after {\n    clear: both; }\n\n.col-xs-1, .col-sm-1, .col-md-1, .col-lg-1, .col-xs-2, .col-sm-2, .col-md-2, .col-lg-2, .col-xs-3, .col-sm-3, .col-md-3, .col-lg-3, .col-xs-4, .col-sm-4, .col-md-4, .col-lg-4, .col-xs-5, .col-sm-5, .col-md-5, .col-lg-5, .col-xs-6, .col-sm-6, .col-md-6, .col-lg-6, .col-xs-7, .col-sm-7, .col-md-7, .col-lg-7, .col-xs-8, .col-sm-8, .col-md-8, .col-lg-8, .col-xs-9, .col-sm-9, .col-md-9, .col-lg-9, .col-xs-10, .col-sm-10, .col-md-10, .col-lg-10, .col-xs-11, .col-sm-11, .col-md-11, .col-lg-11, .col-xs-12, .col-sm-12, .col-md-12, .col-lg-12 {\n  position: relative;\n  min-height: 1px;\n  padding-left: 15px;\n  padding-right: 15px; }\n\n.col-xs-1, .col-xs-2, .col-xs-3, .col-xs-4, .col-xs-5, .col-xs-6, .col-xs-7, .col-xs-8, .col-xs-9, .col-xs-10, .col-xs-11, .col-xs-12 {\n  float: left; }\n\n.col-xs-1 {\n  width: 8.3333333333%; }\n\n.col-xs-2 {\n  width: 16.6666666667%; }\n\n.col-xs-3 {\n  width: 25%; }\n\n.col-xs-4 {\n  width: 33.3333333333%; }\n\n.col-xs-5 {\n  width: 41.6666666667%; }\n\n.col-xs-6 {\n  width: 50%; }\n\n.col-xs-7 {\n  width: 58.3333333333%; }\n\n.col-xs-8 {\n  width: 66.6666666667%; }\n\n.col-xs-9 {\n  width: 75%; }\n\n.col-xs-10 {\n  width: 83.3333333333%; }\n\n.col-xs-11 {\n  width: 91.6666666667%; }\n\n.col-xs-12 {\n  width: 100%; }\n\n.col-xs-pull-0 {\n  right: auto; }\n\n.col-xs-pull-1 {\n  right: 8.3333333333%; }\n\n.col-xs-pull-2 {\n  right: 16.6666666667%; }\n\n.col-xs-pull-3 {\n  right: 25%; }\n\n.col-xs-pull-4 {\n  right: 33.3333333333%; }\n\n.col-xs-pull-5 {\n  right: 41.6666666667%; }\n\n.col-xs-pull-6 {\n  right: 50%; }\n\n.col-xs-pull-7 {\n  right: 58.3333333333%; }\n\n.col-xs-pull-8 {\n  right: 66.6666666667%; }\n\n.col-xs-pull-9 {\n  right: 75%; }\n\n.col-xs-pull-10 {\n  right: 83.3333333333%; }\n\n.col-xs-pull-11 {\n  right: 91.6666666667%; }\n\n.col-xs-pull-12 {\n  right: 100%; }\n\n.col-xs-push-0 {\n  left: auto; }\n\n.col-xs-push-1 {\n  left: 8.3333333333%; }\n\n.col-xs-push-2 {\n  left: 16.6666666667%; }\n\n.col-xs-push-3 {\n  left: 25%; }\n\n.col-xs-push-4 {\n  left: 33.3333333333%; }\n\n.col-xs-push-5 {\n  left: 41.6666666667%; }\n\n.col-xs-push-6 {\n  left: 50%; }\n\n.col-xs-push-7 {\n  left: 58.3333333333%; }\n\n.col-xs-push-8 {\n  left: 66.6666666667%; }\n\n.col-xs-push-9 {\n  left: 75%; }\n\n.col-xs-push-10 {\n  left: 83.3333333333%; }\n\n.col-xs-push-11 {\n  left: 91.6666666667%; }\n\n.col-xs-push-12 {\n  left: 100%; }\n\n.col-xs-offset-0 {\n  margin-left: 0%; }\n\n.col-xs-offset-1 {\n  margin-left: 8.3333333333%; }\n\n.col-xs-offset-2 {\n  margin-left: 16.6666666667%; }\n\n.col-xs-offset-3 {\n  margin-left: 25%; }\n\n.col-xs-offset-4 {\n  margin-left: 33.3333333333%; }\n\n.col-xs-offset-5 {\n  margin-left: 41.6666666667%; }\n\n.col-xs-offset-6 {\n  margin-left: 50%; }\n\n.col-xs-offset-7 {\n  margin-left: 58.3333333333%; }\n\n.col-xs-offset-8 {\n  margin-left: 66.6666666667%; }\n\n.col-xs-offset-9 {\n  margin-left: 75%; }\n\n.col-xs-offset-10 {\n  margin-left: 83.3333333333%; }\n\n.col-xs-offset-11 {\n  margin-left: 91.6666666667%; }\n\n.col-xs-offset-12 {\n  margin-left: 100%; }\n\n@media (min-width: 768px) {\n  .col-sm-1, .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-10, .col-sm-11, .col-sm-12 {\n    float: left; }\n  .col-sm-1 {\n    width: 8.3333333333%; }\n  .col-sm-2 {\n    width: 16.6666666667%; }\n  .col-sm-3 {\n    width: 25%; }\n  .col-sm-4 {\n    width: 33.3333333333%; }\n  .col-sm-5 {\n    width: 41.6666666667%; }\n  .col-sm-6 {\n    width: 50%; }\n  .col-sm-7 {\n    width: 58.3333333333%; }\n  .col-sm-8 {\n    width: 66.6666666667%; }\n  .col-sm-9 {\n    width: 75%; }\n  .col-sm-10 {\n    width: 83.3333333333%; }\n  .col-sm-11 {\n    width: 91.6666666667%; }\n  .col-sm-12 {\n    width: 100%; }\n  .col-sm-pull-0 {\n    right: auto; }\n  .col-sm-pull-1 {\n    right: 8.3333333333%; }\n  .col-sm-pull-2 {\n    right: 16.6666666667%; }\n  .col-sm-pull-3 {\n    right: 25%; }\n  .col-sm-pull-4 {\n    right: 33.3333333333%; }\n  .col-sm-pull-5 {\n    right: 41.6666666667%; }\n  .col-sm-pull-6 {\n    right: 50%; }\n  .col-sm-pull-7 {\n    right: 58.3333333333%; }\n  .col-sm-pull-8 {\n    right: 66.6666666667%; }\n  .col-sm-pull-9 {\n    right: 75%; }\n  .col-sm-pull-10 {\n    right: 83.3333333333%; }\n  .col-sm-pull-11 {\n    right: 91.6666666667%; }\n  .col-sm-pull-12 {\n    right: 100%; }\n  .col-sm-push-0 {\n    left: auto; }\n  .col-sm-push-1 {\n    left: 8.3333333333%; }\n  .col-sm-push-2 {\n    left: 16.6666666667%; }\n  .col-sm-push-3 {\n    left: 25%; }\n  .col-sm-push-4 {\n    left: 33.3333333333%; }\n  .col-sm-push-5 {\n    left: 41.6666666667%; }\n  .col-sm-push-6 {\n    left: 50%; }\n  .col-sm-push-7 {\n    left: 58.3333333333%; }\n  .col-sm-push-8 {\n    left: 66.6666666667%; }\n  .col-sm-push-9 {\n    left: 75%; }\n  .col-sm-push-10 {\n    left: 83.3333333333%; }\n  .col-sm-push-11 {\n    left: 91.6666666667%; }\n  .col-sm-push-12 {\n    left: 100%; }\n  .col-sm-offset-0 {\n    margin-left: 0%; }\n  .col-sm-offset-1 {\n    margin-left: 8.3333333333%; }\n  .col-sm-offset-2 {\n    margin-left: 16.6666666667%; }\n  .col-sm-offset-3 {\n    margin-left: 25%; }\n  .col-sm-offset-4 {\n    margin-left: 33.3333333333%; }\n  .col-sm-offset-5 {\n    margin-left: 41.6666666667%; }\n  .col-sm-offset-6 {\n    margin-left: 50%; }\n  .col-sm-offset-7 {\n    margin-left: 58.3333333333%; }\n  .col-sm-offset-8 {\n    margin-left: 66.6666666667%; }\n  .col-sm-offset-9 {\n    margin-left: 75%; }\n  .col-sm-offset-10 {\n    margin-left: 83.3333333333%; }\n  .col-sm-offset-11 {\n    margin-left: 91.6666666667%; }\n  .col-sm-offset-12 {\n    margin-left: 100%; } }\n\n@media (min-width: 992px) {\n  .col-md-1, .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-10, .col-md-11, .col-md-12 {\n    float: left; }\n  .col-md-1 {\n    width: 8.3333333333%; }\n  .col-md-2 {\n    width: 16.6666666667%; }\n  .col-md-3 {\n    width: 25%; }\n  .col-md-4 {\n    width: 33.3333333333%; }\n  .col-md-5 {\n    width: 41.6666666667%; }\n  .col-md-6 {\n    width: 50%; }\n  .col-md-7 {\n    width: 58.3333333333%; }\n  .col-md-8 {\n    width: 66.6666666667%; }\n  .col-md-9 {\n    width: 75%; }\n  .col-md-10 {\n    width: 83.3333333333%; }\n  .col-md-11 {\n    width: 91.6666666667%; }\n  .col-md-12 {\n    width: 100%; }\n  .col-md-pull-0 {\n    right: auto; }\n  .col-md-pull-1 {\n    right: 8.3333333333%; }\n  .col-md-pull-2 {\n    right: 16.6666666667%; }\n  .col-md-pull-3 {\n    right: 25%; }\n  .col-md-pull-4 {\n    right: 33.3333333333%; }\n  .col-md-pull-5 {\n    right: 41.6666666667%; }\n  .col-md-pull-6 {\n    right: 50%; }\n  .col-md-pull-7 {\n    right: 58.3333333333%; }\n  .col-md-pull-8 {\n    right: 66.6666666667%; }\n  .col-md-pull-9 {\n    right: 75%; }\n  .col-md-pull-10 {\n    right: 83.3333333333%; }\n  .col-md-pull-11 {\n    right: 91.6666666667%; }\n  .col-md-pull-12 {\n    right: 100%; }\n  .col-md-push-0 {\n    left: auto; }\n  .col-md-push-1 {\n    left: 8.3333333333%; }\n  .col-md-push-2 {\n    left: 16.6666666667%; }\n  .col-md-push-3 {\n    left: 25%; }\n  .col-md-push-4 {\n    left: 33.3333333333%; }\n  .col-md-push-5 {\n    left: 41.6666666667%; }\n  .col-md-push-6 {\n    left: 50%; }\n  .col-md-push-7 {\n    left: 58.3333333333%; }\n  .col-md-push-8 {\n    left: 66.6666666667%; }\n  .col-md-push-9 {\n    left: 75%; }\n  .col-md-push-10 {\n    left: 83.3333333333%; }\n  .col-md-push-11 {\n    left: 91.6666666667%; }\n  .col-md-push-12 {\n    left: 100%; }\n  .col-md-offset-0 {\n    margin-left: 0%; }\n  .col-md-offset-1 {\n    margin-left: 8.3333333333%; }\n  .col-md-offset-2 {\n    margin-left: 16.6666666667%; }\n  .col-md-offset-3 {\n    margin-left: 25%; }\n  .col-md-offset-4 {\n    margin-left: 33.3333333333%; }\n  .col-md-offset-5 {\n    margin-left: 41.6666666667%; }\n  .col-md-offset-6 {\n    margin-left: 50%; }\n  .col-md-offset-7 {\n    margin-left: 58.3333333333%; }\n  .col-md-offset-8 {\n    margin-left: 66.6666666667%; }\n  .col-md-offset-9 {\n    margin-left: 75%; }\n  .col-md-offset-10 {\n    margin-left: 83.3333333333%; }\n  .col-md-offset-11 {\n    margin-left: 91.6666666667%; }\n  .col-md-offset-12 {\n    margin-left: 100%; } }\n\n@media (min-width: 1220px) {\n  .col-lg-1, .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-10, .col-lg-11, .col-lg-12 {\n    float: left; }\n  .col-lg-1 {\n    width: 8.3333333333%; }\n  .col-lg-2 {\n    width: 16.6666666667%; }\n  .col-lg-3 {\n    width: 25%; }\n  .col-lg-4 {\n    width: 33.3333333333%; }\n  .col-lg-5 {\n    width: 41.6666666667%; }\n  .col-lg-6 {\n    width: 50%; }\n  .col-lg-7 {\n    width: 58.3333333333%; }\n  .col-lg-8 {\n    width: 66.6666666667%; }\n  .col-lg-9 {\n    width: 75%; }\n  .col-lg-10 {\n    width: 83.3333333333%; }\n  .col-lg-11 {\n    width: 91.6666666667%; }\n  .col-lg-12 {\n    width: 100%; }\n  .col-lg-pull-0 {\n    right: auto; }\n  .col-lg-pull-1 {\n    right: 8.3333333333%; }\n  .col-lg-pull-2 {\n    right: 16.6666666667%; }\n  .col-lg-pull-3 {\n    right: 25%; }\n  .col-lg-pull-4 {\n    right: 33.3333333333%; }\n  .col-lg-pull-5 {\n    right: 41.6666666667%; }\n  .col-lg-pull-6 {\n    right: 50%; }\n  .col-lg-pull-7 {\n    right: 58.3333333333%; }\n  .col-lg-pull-8 {\n    right: 66.6666666667%; }\n  .col-lg-pull-9 {\n    right: 75%; }\n  .col-lg-pull-10 {\n    right: 83.3333333333%; }\n  .col-lg-pull-11 {\n    right: 91.6666666667%; }\n  .col-lg-pull-12 {\n    right: 100%; }\n  .col-lg-push-0 {\n    left: auto; }\n  .col-lg-push-1 {\n    left: 8.3333333333%; }\n  .col-lg-push-2 {\n    left: 16.6666666667%; }\n  .col-lg-push-3 {\n    left: 25%; }\n  .col-lg-push-4 {\n    left: 33.3333333333%; }\n  .col-lg-push-5 {\n    left: 41.6666666667%; }\n  .col-lg-push-6 {\n    left: 50%; }\n  .col-lg-push-7 {\n    left: 58.3333333333%; }\n  .col-lg-push-8 {\n    left: 66.6666666667%; }\n  .col-lg-push-9 {\n    left: 75%; }\n  .col-lg-push-10 {\n    left: 83.3333333333%; }\n  .col-lg-push-11 {\n    left: 91.6666666667%; }\n  .col-lg-push-12 {\n    left: 100%; }\n  .col-lg-offset-0 {\n    margin-left: 0%; }\n  .col-lg-offset-1 {\n    margin-left: 8.3333333333%; }\n  .col-lg-offset-2 {\n    margin-left: 16.6666666667%; }\n  .col-lg-offset-3 {\n    margin-left: 25%; }\n  .col-lg-offset-4 {\n    margin-left: 33.3333333333%; }\n  .col-lg-offset-5 {\n    margin-left: 41.6666666667%; }\n  .col-lg-offset-6 {\n    margin-left: 50%; }\n  .col-lg-offset-7 {\n    margin-left: 58.3333333333%; }\n  .col-lg-offset-8 {\n    margin-left: 66.6666666667%; }\n  .col-lg-offset-9 {\n    margin-left: 75%; }\n  .col-lg-offset-10 {\n    margin-left: 83.3333333333%; }\n  .col-lg-offset-11 {\n    margin-left: 91.6666666667%; }\n  .col-lg-offset-12 {\n    margin-left: 100%; } }\n\ntable {\n  background-color: transparent; }\n\ncaption {\n  padding-top: 8px;\n  padding-bottom: 8px;\n  color: #777777;\n  text-align: left; }\n\nth {\n  text-align: left; }\n\ntable, .table {\n  width: 100%;\n  max-width: 100%;\n  margin-bottom: 20px; }\n  table > thead > tr > th,\n  table > thead > tr > td,\n  table > tbody > tr > th,\n  table > tbody > tr > td,\n  table > tfoot > tr > th,\n  table > tfoot > tr > td, .table > thead > tr > th,\n  .table > thead > tr > td,\n  .table > tbody > tr > th,\n  .table > tbody > tr > td,\n  .table > tfoot > tr > th,\n  .table > tfoot > tr > td {\n    padding: 8px;\n    line-height: 1.428571429;\n    vertical-align: top;\n    border-top: 1px solid #ddd; }\n  table > thead > tr > th, .table > thead > tr > th {\n    vertical-align: bottom;\n    border-bottom: 2px solid #ddd; }\n  table > caption + thead > tr:first-child > th,\n  table > caption + thead > tr:first-child > td,\n  table > colgroup + thead > tr:first-child > th,\n  table > colgroup + thead > tr:first-child > td,\n  table > thead:first-child > tr:first-child > th,\n  table > thead:first-child > tr:first-child > td, .table > caption + thead > tr:first-child > th,\n  .table > caption + thead > tr:first-child > td,\n  .table > colgroup + thead > tr:first-child > th,\n  .table > colgroup + thead > tr:first-child > td,\n  .table > thead:first-child > tr:first-child > th,\n  .table > thead:first-child > tr:first-child > td {\n    border-top: 0; }\n  table > tbody + tbody, .table > tbody + tbody {\n    border-top: 2px solid #ddd; }\n  table .table, .table .table {\n    background-color: #fff; }\n\n.table-condensed > thead > tr > th,\n.table-condensed > thead > tr > td,\n.table-condensed > tbody > tr > th,\n.table-condensed > tbody > tr > td,\n.table-condensed > tfoot > tr > th,\n.table-condensed > tfoot > tr > td {\n  padding: 5px; }\n\n.table-bordered {\n  border: 1px solid #ddd; }\n  .table-bordered > thead > tr > th,\n  .table-bordered > thead > tr > td,\n  .table-bordered > tbody > tr > th,\n  .table-bordered > tbody > tr > td,\n  .table-bordered > tfoot > tr > th,\n  .table-bordered > tfoot > tr > td {\n    border: 1px solid #ddd; }\n  .table-bordered > thead > tr > th,\n  .table-bordered > thead > tr > td {\n    border-bottom-width: 2px; }\n\n.table-striped > tbody > tr:nth-of-type(odd) {\n  background-color: #f9f9f9; }\n\n.table-hover > tbody > tr:hover {\n  background-color: #f5f5f5; }\n\ntable col[class*=\"col-\"] {\n  position: static;\n  float: none;\n  display: table-column; }\n\ntable td[class*=\"col-\"],\ntable th[class*=\"col-\"] {\n  position: static;\n  float: none;\n  display: table-cell; }\n\n.table > thead > tr > td.active,\n.table > thead > tr > th.active,\n.table > thead > tr.active > td,\n.table > thead > tr.active > th,\n.table > tbody > tr > td.active,\n.table > tbody > tr > th.active,\n.table > tbody > tr.active > td,\n.table > tbody > tr.active > th,\n.table > tfoot > tr > td.active,\n.table > tfoot > tr > th.active,\n.table > tfoot > tr.active > td,\n.table > tfoot > tr.active > th {\n  background-color: #f5f5f5; }\n\n.table-hover > tbody > tr > td.active:hover,\n.table-hover > tbody > tr > th.active:hover,\n.table-hover > tbody > tr.active:hover > td,\n.table-hover > tbody > tr:hover > .active,\n.table-hover > tbody > tr.active:hover > th {\n  background-color: #e8e8e8; }\n\n.table > thead > tr > td.success,\n.table > thead > tr > th.success,\n.table > thead > tr.success > td,\n.table > thead > tr.success > th,\n.table > tbody > tr > td.success,\n.table > tbody > tr > th.success,\n.table > tbody > tr.success > td,\n.table > tbody > tr.success > th,\n.table > tfoot > tr > td.success,\n.table > tfoot > tr > th.success,\n.table > tfoot > tr.success > td,\n.table > tfoot > tr.success > th {\n  background-color: #dff0d8; }\n\n.table-hover > tbody > tr > td.success:hover,\n.table-hover > tbody > tr > th.success:hover,\n.table-hover > tbody > tr.success:hover > td,\n.table-hover > tbody > tr:hover > .success,\n.table-hover > tbody > tr.success:hover > th {\n  background-color: #d0e9c6; }\n\n.table > thead > tr > td.info,\n.table > thead > tr > th.info,\n.table > thead > tr.info > td,\n.table > thead > tr.info > th,\n.table > tbody > tr > td.info,\n.table > tbody > tr > th.info,\n.table > tbody > tr.info > td,\n.table > tbody > tr.info > th,\n.table > tfoot > tr > td.info,\n.table > tfoot > tr > th.info,\n.table > tfoot > tr.info > td,\n.table > tfoot > tr.info > th {\n  background-color: #d9edf7; }\n\n.table-hover > tbody > tr > td.info:hover,\n.table-hover > tbody > tr > th.info:hover,\n.table-hover > tbody > tr.info:hover > td,\n.table-hover > tbody > tr:hover > .info,\n.table-hover > tbody > tr.info:hover > th {\n  background-color: #c4e3f3; }\n\n.table > thead > tr > td.warning,\n.table > thead > tr > th.warning,\n.table > thead > tr.warning > td,\n.table > thead > tr.warning > th,\n.table > tbody > tr > td.warning,\n.table > tbody > tr > th.warning,\n.table > tbody > tr.warning > td,\n.table > tbody > tr.warning > th,\n.table > tfoot > tr > td.warning,\n.table > tfoot > tr > th.warning,\n.table > tfoot > tr.warning > td,\n.table > tfoot > tr.warning > th {\n  background-color: #fcf8e3; }\n\n.table-hover > tbody > tr > td.warning:hover,\n.table-hover > tbody > tr > th.warning:hover,\n.table-hover > tbody > tr.warning:hover > td,\n.table-hover > tbody > tr:hover > .warning,\n.table-hover > tbody > tr.warning:hover > th {\n  background-color: #faf2cc; }\n\n.table > thead > tr > td.danger,\n.table > thead > tr > th.danger,\n.table > thead > tr.danger > td,\n.table > thead > tr.danger > th,\n.table > tbody > tr > td.danger,\n.table > tbody > tr > th.danger,\n.table > tbody > tr.danger > td,\n.table > tbody > tr.danger > th,\n.table > tfoot > tr > td.danger,\n.table > tfoot > tr > th.danger,\n.table > tfoot > tr.danger > td,\n.table > tfoot > tr.danger > th {\n  background-color: #f2dede; }\n\n.table-hover > tbody > tr > td.danger:hover,\n.table-hover > tbody > tr > th.danger:hover,\n.table-hover > tbody > tr.danger:hover > td,\n.table-hover > tbody > tr:hover > .danger,\n.table-hover > tbody > tr.danger:hover > th {\n  background-color: #ebcccc; }\n\n.table-responsive {\n  overflow-x: auto;\n  min-height: 0.01%; }\n  @media screen and (max-width: 767px) {\n    .table-responsive {\n      width: 100%;\n      margin-bottom: 15px;\n      overflow-y: hidden;\n      -ms-overflow-style: -ms-autohiding-scrollbar;\n      border: 1px solid #ddd; }\n      .table-responsive > .table {\n        margin-bottom: 0; }\n        .table-responsive > .table > thead > tr > th,\n        .table-responsive > .table > thead > tr > td,\n        .table-responsive > .table > tbody > tr > th,\n        .table-responsive > .table > tbody > tr > td,\n        .table-responsive > .table > tfoot > tr > th,\n        .table-responsive > .table > tfoot > tr > td {\n          white-space: nowrap; }\n      .table-responsive > .table-bordered {\n        border: 0; }\n        .table-responsive > .table-bordered > thead > tr > th:first-child,\n        .table-responsive > .table-bordered > thead > tr > td:first-child,\n        .table-responsive > .table-bordered > tbody > tr > th:first-child,\n        .table-responsive > .table-bordered > tbody > tr > td:first-child,\n        .table-responsive > .table-bordered > tfoot > tr > th:first-child,\n        .table-responsive > .table-bordered > tfoot > tr > td:first-child {\n          border-left: 0; }\n        .table-responsive > .table-bordered > thead > tr > th:last-child,\n        .table-responsive > .table-bordered > thead > tr > td:last-child,\n        .table-responsive > .table-bordered > tbody > tr > th:last-child,\n        .table-responsive > .table-bordered > tbody > tr > td:last-child,\n        .table-responsive > .table-bordered > tfoot > tr > th:last-child,\n        .table-responsive > .table-bordered > tfoot > tr > td:last-child {\n          border-right: 0; }\n        .table-responsive > .table-bordered > tbody > tr:last-child > th,\n        .table-responsive > .table-bordered > tbody > tr:last-child > td,\n        .table-responsive > .table-bordered > tfoot > tr:last-child > th,\n        .table-responsive > .table-bordered > tfoot > tr:last-child > td {\n          border-bottom: 0; } }\n\nfieldset {\n  padding: 0;\n  margin: 0;\n  border: 0;\n  min-width: 0; }\n\nlegend {\n  display: block;\n  width: 100%;\n  padding: 0;\n  margin-bottom: 20px;\n  font-size: 21px;\n  line-height: inherit;\n  color: #333333;\n  border: 0;\n  border-bottom: 1px solid #e5e5e5; }\n\nlabel {\n  display: inline-block;\n  max-width: 100%;\n  margin-bottom: 5px;\n  font-weight: 600; }\n\ninput[type=\"search\"] {\n  box-sizing: border-box; }\n\ninput[type=\"radio\"],\ninput[type=\"checkbox\"] {\n  margin: 4px 0 0;\n  margin-top: 1px \\9;\n  line-height: normal; }\n\ninput[type=\"file\"] {\n  display: block; }\n\ninput[type=\"range\"] {\n  display: block;\n  width: 100%; }\n\nselect[multiple],\nselect[size] {\n  height: auto; }\n\ninput[type=\"file\"]:focus,\ninput[type=\"radio\"]:focus,\ninput[type=\"checkbox\"]:focus {\n  outline: thin dotted;\n  outline: 5px auto -webkit-focus-ring-color;\n  outline-offset: -2px; }\n\noutput {\n  display: block;\n  padding-top: 7px;\n  font-size: 14px;\n  line-height: 1.428571429;\n  color: #555555; }\n\n.form-control {\n  display: block;\n  width: 100%;\n  height: 34px;\n  padding: 6px 12px;\n  font-size: 14px;\n  line-height: 1.428571429;\n  color: #555555;\n  background-color: #fff;\n  background-image: none;\n  border: 1px solid #ccc;\n  border-radius: 4px;\n  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n  transition: border-color ease-in-out 0.15s, box-shadow ease-in-out 0.15s; }\n  .form-control:focus {\n    border-color: #66afe9;\n    outline: 0;\n    box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(102, 175, 233, 0.6); }\n  .form-control::-moz-placeholder {\n    color: #999;\n    opacity: 1; }\n  .form-control:-ms-input-placeholder {\n    color: #999; }\n  .form-control::-webkit-input-placeholder {\n    color: #999; }\n  .form-control[disabled], .form-control[readonly],\n  fieldset[disabled] .form-control {\n    background-color: #eeeeee;\n    opacity: 1; }\n  .form-control[disabled],\n  fieldset[disabled] .form-control {\n    cursor: not-allowed; }\n\ntextarea.form-control {\n  height: auto; }\n\ninput[type=\"search\"] {\n  -webkit-appearance: none; }\n\n@media screen and (-webkit-min-device-pixel-ratio: 0) {\n  input[type=\"date\"],\n  input[type=\"time\"],\n  input[type=\"datetime-local\"],\n  input[type=\"month\"] {\n    line-height: 34px; }\n    input[type=\"date\"].input-sm, .input-group-sm > input.form-control[type=\"date\"],\n    .input-group-sm > input.input-group-addon[type=\"date\"],\n    .input-group-sm > .input-group-btn > input.btn[type=\"date\"],\n    .input-group-sm input[type=\"date\"],\n    input[type=\"time\"].input-sm,\n    .input-group-sm > input.form-control[type=\"time\"],\n    .input-group-sm > input.input-group-addon[type=\"time\"],\n    .input-group-sm > .input-group-btn > input.btn[type=\"time\"],\n    .input-group-sm\n    input[type=\"time\"],\n    input[type=\"datetime-local\"].input-sm,\n    .input-group-sm > input.form-control[type=\"datetime-local\"],\n    .input-group-sm > input.input-group-addon[type=\"datetime-local\"],\n    .input-group-sm > .input-group-btn > input.btn[type=\"datetime-local\"],\n    .input-group-sm\n    input[type=\"datetime-local\"],\n    input[type=\"month\"].input-sm,\n    .input-group-sm > input.form-control[type=\"month\"],\n    .input-group-sm > input.input-group-addon[type=\"month\"],\n    .input-group-sm > .input-group-btn > input.btn[type=\"month\"],\n    .input-group-sm\n    input[type=\"month\"] {\n      line-height: 30px; }\n    input[type=\"date\"].input-lg, .input-group-lg > input.form-control[type=\"date\"],\n    .input-group-lg > input.input-group-addon[type=\"date\"],\n    .input-group-lg > .input-group-btn > input.btn[type=\"date\"],\n    .input-group-lg input[type=\"date\"],\n    input[type=\"time\"].input-lg,\n    .input-group-lg > input.form-control[type=\"time\"],\n    .input-group-lg > input.input-group-addon[type=\"time\"],\n    .input-group-lg > .input-group-btn > input.btn[type=\"time\"],\n    .input-group-lg\n    input[type=\"time\"],\n    input[type=\"datetime-local\"].input-lg,\n    .input-group-lg > input.form-control[type=\"datetime-local\"],\n    .input-group-lg > input.input-group-addon[type=\"datetime-local\"],\n    .input-group-lg > .input-group-btn > input.btn[type=\"datetime-local\"],\n    .input-group-lg\n    input[type=\"datetime-local\"],\n    input[type=\"month\"].input-lg,\n    .input-group-lg > input.form-control[type=\"month\"],\n    .input-group-lg > input.input-group-addon[type=\"month\"],\n    .input-group-lg > .input-group-btn > input.btn[type=\"month\"],\n    .input-group-lg\n    input[type=\"month\"] {\n      line-height: 46px; } }\n\n.form-group {\n  margin-bottom: 15px; }\n\n.radio,\n.checkbox {\n  position: relative;\n  display: block;\n  margin-top: 10px;\n  margin-bottom: 10px; }\n  .radio label,\n  .checkbox label {\n    min-height: 20px;\n    padding-left: 20px;\n    margin-bottom: 0;\n    font-weight: normal;\n    cursor: pointer; }\n\n.radio input[type=\"radio\"],\n.radio-inline input[type=\"radio\"],\n.checkbox input[type=\"checkbox\"],\n.checkbox-inline input[type=\"checkbox\"] {\n  position: absolute;\n  margin-left: -20px;\n  margin-top: 4px \\9; }\n\n.radio + .radio,\n.checkbox + .checkbox {\n  margin-top: -5px; }\n\n.radio-inline,\n.checkbox-inline {\n  position: relative;\n  display: inline-block;\n  padding-left: 20px;\n  margin-bottom: 0;\n  vertical-align: middle;\n  font-weight: normal;\n  cursor: pointer; }\n\n.radio-inline + .radio-inline,\n.checkbox-inline + .checkbox-inline {\n  margin-top: 0;\n  margin-left: 10px; }\n\ninput[type=\"radio\"][disabled], input[type=\"radio\"].disabled,\nfieldset[disabled] input[type=\"radio\"],\ninput[type=\"checkbox\"][disabled],\ninput[type=\"checkbox\"].disabled,\nfieldset[disabled]\ninput[type=\"checkbox\"] {\n  cursor: not-allowed; }\n\n.radio-inline.disabled,\nfieldset[disabled] .radio-inline,\n.checkbox-inline.disabled,\nfieldset[disabled]\n.checkbox-inline {\n  cursor: not-allowed; }\n\n.radio.disabled label,\nfieldset[disabled] .radio label,\n.checkbox.disabled label,\nfieldset[disabled]\n.checkbox label {\n  cursor: not-allowed; }\n\n.form-control-static {\n  padding-top: 7px;\n  padding-bottom: 7px;\n  margin-bottom: 0;\n  min-height: 34px; }\n  .form-control-static.input-lg, .input-group-lg > .form-control-static.form-control,\n  .input-group-lg > .form-control-static.input-group-addon,\n  .input-group-lg > .input-group-btn > .form-control-static.btn, .form-control-static.input-sm, .input-group-sm > .form-control-static.form-control,\n  .input-group-sm > .form-control-static.input-group-addon,\n  .input-group-sm > .input-group-btn > .form-control-static.btn {\n    padding-left: 0;\n    padding-right: 0; }\n\n.input-sm, .input-group-sm > .form-control,\n.input-group-sm > .input-group-addon,\n.input-group-sm > .input-group-btn > .btn {\n  height: 30px;\n  padding: 5px 10px;\n  font-size: 12px;\n  line-height: 1.5;\n  border-radius: 3px; }\n\nselect.input-sm, .input-group-sm > select.form-control,\n.input-group-sm > select.input-group-addon,\n.input-group-sm > .input-group-btn > select.btn {\n  height: 30px;\n  line-height: 30px; }\n\ntextarea.input-sm, .input-group-sm > textarea.form-control,\n.input-group-sm > textarea.input-group-addon,\n.input-group-sm > .input-group-btn > textarea.btn,\nselect[multiple].input-sm,\n.input-group-sm > select.form-control[multiple],\n.input-group-sm > select.input-group-addon[multiple],\n.input-group-sm > .input-group-btn > select.btn[multiple] {\n  height: auto; }\n\n.form-group-sm .form-control {\n  height: 30px;\n  padding: 5px 10px;\n  font-size: 12px;\n  line-height: 1.5;\n  border-radius: 3px; }\n\n.form-group-sm select.form-control {\n  height: 30px;\n  line-height: 30px; }\n\n.form-group-sm textarea.form-control,\n.form-group-sm select[multiple].form-control {\n  height: auto; }\n\n.form-group-sm .form-control-static {\n  height: 30px;\n  padding: 5px 10px;\n  font-size: 12px;\n  line-height: 1.5;\n  min-height: 32px; }\n\n.input-lg, .input-group-lg > .form-control,\n.input-group-lg > .input-group-addon,\n.input-group-lg > .input-group-btn > .btn {\n  height: 46px;\n  padding: 10px 16px;\n  font-size: 18px;\n  line-height: 1.3333333;\n  border-radius: 6px; }\n\nselect.input-lg, .input-group-lg > select.form-control,\n.input-group-lg > select.input-group-addon,\n.input-group-lg > .input-group-btn > select.btn {\n  height: 46px;\n  line-height: 46px; }\n\ntextarea.input-lg, .input-group-lg > textarea.form-control,\n.input-group-lg > textarea.input-group-addon,\n.input-group-lg > .input-group-btn > textarea.btn,\nselect[multiple].input-lg,\n.input-group-lg > select.form-control[multiple],\n.input-group-lg > select.input-group-addon[multiple],\n.input-group-lg > .input-group-btn > select.btn[multiple] {\n  height: auto; }\n\n.form-group-lg .form-control {\n  height: 46px;\n  padding: 10px 16px;\n  font-size: 18px;\n  line-height: 1.3333333;\n  border-radius: 6px; }\n\n.form-group-lg select.form-control {\n  height: 46px;\n  line-height: 46px; }\n\n.form-group-lg textarea.form-control,\n.form-group-lg select[multiple].form-control {\n  height: auto; }\n\n.form-group-lg .form-control-static {\n  height: 46px;\n  padding: 10px 16px;\n  font-size: 18px;\n  line-height: 1.3333333;\n  min-height: 38px; }\n\n.has-feedback {\n  position: relative; }\n  .has-feedback .form-control {\n    padding-right: 42.5px; }\n\n.form-control-feedback {\n  position: absolute;\n  top: 0;\n  right: 0;\n  z-index: 2;\n  display: block;\n  width: 34px;\n  height: 34px;\n  line-height: 34px;\n  text-align: center;\n  pointer-events: none; }\n\n.input-lg + .form-control-feedback, .input-group-lg > .form-control + .form-control-feedback, .input-group-lg > .input-group-addon + .form-control-feedback, .input-group-lg > .input-group-btn > .btn + .form-control-feedback {\n  width: 46px;\n  height: 46px;\n  line-height: 46px; }\n\n.input-sm + .form-control-feedback, .input-group-sm > .form-control + .form-control-feedback, .input-group-sm > .input-group-addon + .form-control-feedback, .input-group-sm > .input-group-btn > .btn + .form-control-feedback {\n  width: 30px;\n  height: 30px;\n  line-height: 30px; }\n\n.has-success .help-block,\n.has-success .control-label,\n.has-success .radio,\n.has-success .checkbox,\n.has-success .radio-inline,\n.has-success .checkbox-inline,\n.has-success.radio label,\n.has-success.checkbox label,\n.has-success.radio-inline label,\n.has-success.checkbox-inline label {\n  color: #3c763d; }\n\n.has-success .form-control {\n  border-color: #3c763d;\n  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); }\n  .has-success .form-control:focus {\n    border-color: #2b542c;\n    box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #67b168; }\n\n.has-success .input-group-addon {\n  color: #3c763d;\n  border-color: #3c763d;\n  background-color: #dff0d8; }\n\n.has-success .form-control-feedback {\n  color: #3c763d; }\n\n.has-warning .help-block,\n.has-warning .control-label,\n.has-warning .radio,\n.has-warning .checkbox,\n.has-warning .radio-inline,\n.has-warning .checkbox-inline,\n.has-warning.radio label,\n.has-warning.checkbox label,\n.has-warning.radio-inline label,\n.has-warning.checkbox-inline label {\n  color: #8a6d3b; }\n\n.has-warning .form-control {\n  border-color: #8a6d3b;\n  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); }\n  .has-warning .form-control:focus {\n    border-color: #66512c;\n    box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #c0a16b; }\n\n.has-warning .input-group-addon {\n  color: #8a6d3b;\n  border-color: #8a6d3b;\n  background-color: #fcf8e3; }\n\n.has-warning .form-control-feedback {\n  color: #8a6d3b; }\n\n.has-error .help-block,\n.has-error .control-label,\n.has-error .radio,\n.has-error .checkbox,\n.has-error .radio-inline,\n.has-error .checkbox-inline,\n.has-error.radio label,\n.has-error.checkbox label,\n.has-error.radio-inline label,\n.has-error.checkbox-inline label {\n  color: #a94442; }\n\n.has-error .form-control {\n  border-color: #a94442;\n  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); }\n  .has-error .form-control:focus {\n    border-color: #843534;\n    box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ce8483; }\n\n.has-error .input-group-addon {\n  color: #a94442;\n  border-color: #a94442;\n  background-color: #f2dede; }\n\n.has-error .form-control-feedback {\n  color: #a94442; }\n\n.has-feedback label ~ .form-control-feedback {\n  top: 25px; }\n\n.has-feedback label.sr-only ~ .form-control-feedback {\n  top: 0; }\n\n.help-block {\n  display: block;\n  margin-top: 5px;\n  margin-bottom: 10px;\n  color: #737373; }\n\n@media (min-width: 768px) {\n  .form-inline .form-group {\n    display: inline-block;\n    margin-bottom: 0;\n    vertical-align: middle; }\n  .form-inline .form-control {\n    display: inline-block;\n    width: auto;\n    vertical-align: middle; }\n  .form-inline .form-control-static {\n    display: inline-block; }\n  .form-inline .input-group {\n    display: inline-table;\n    vertical-align: middle; }\n    .form-inline .input-group .input-group-addon,\n    .form-inline .input-group .input-group-btn,\n    .form-inline .input-group .form-control {\n      width: auto; }\n  .form-inline .input-group > .form-control {\n    width: 100%; }\n  .form-inline .control-label {\n    margin-bottom: 0;\n    vertical-align: middle; }\n  .form-inline .radio,\n  .form-inline .checkbox {\n    display: inline-block;\n    margin-top: 0;\n    margin-bottom: 0;\n    vertical-align: middle; }\n    .form-inline .radio label,\n    .form-inline .checkbox label {\n      padding-left: 0; }\n  .form-inline .radio input[type=\"radio\"],\n  .form-inline .checkbox input[type=\"checkbox\"] {\n    position: relative;\n    margin-left: 0; }\n  .form-inline .has-feedback .form-control-feedback {\n    top: 0; } }\n\n.form-horizontal .radio,\n.form-horizontal .checkbox,\n.form-horizontal .radio-inline,\n.form-horizontal .checkbox-inline {\n  margin-top: 0;\n  margin-bottom: 0;\n  padding-top: 7px; }\n\n.form-horizontal .radio,\n.form-horizontal .checkbox {\n  min-height: 27px; }\n\n.form-horizontal .form-group {\n  margin-left: -15px;\n  margin-right: -15px; }\n  .form-horizontal .form-group:before, .form-horizontal .form-group:after {\n    content: \" \";\n    display: table; }\n  .form-horizontal .form-group:after {\n    clear: both; }\n\n@media (min-width: 768px) {\n  .form-horizontal .control-label {\n    text-align: right;\n    margin-bottom: 0;\n    padding-top: 7px; } }\n\n.form-horizontal .has-feedback .form-control-feedback {\n  right: 15px; }\n\n@media (min-width: 768px) {\n  .form-horizontal .form-group-lg .control-label {\n    padding-top: 14.333333px; } }\n\n@media (min-width: 768px) {\n  .form-horizontal .form-group-sm .control-label {\n    padding-top: 6px; } }\n\n.btn {\n  display: inline-block;\n  margin-bottom: 0;\n  font-weight: normal;\n  font-family: \"Eina\", \"Helvetica Neue\", Helvetica, sans-serif;\n  text-align: center;\n  vertical-align: middle;\n  -ms-touch-action: manipulation;\n      touch-action: manipulation;\n  cursor: pointer;\n  background-image: none;\n  border: 1px solid transparent;\n  white-space: nowrap;\n  padding: 6px 12px;\n  font-size: 14px;\n  line-height: 1.428571429;\n  border-radius: 4px;\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  -ms-user-select: none;\n  user-select: none; }\n  .btn:focus, .btn.focus, .btn:active:focus, .btn:active.focus, .btn.active:focus, .btn.active.focus {\n    outline: thin dotted;\n    outline: 5px auto -webkit-focus-ring-color;\n    outline-offset: -2px; }\n  .btn:hover, .btn:focus, .btn.focus {\n    color: #333;\n    text-decoration: none; }\n  .btn:active, .btn.active {\n    outline: 0;\n    background-image: none;\n    box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); }\n  .btn.disabled, .btn[disabled],\n  fieldset[disabled] .btn {\n    cursor: not-allowed;\n    pointer-events: none;\n    opacity: 0.65;\n    filter: alpha(opacity=65);\n    box-shadow: none; }\n\n.btn-default {\n  color: #333;\n  background-color: #fff;\n  border-color: #ccc; }\n  .btn-default:hover, .btn-default:focus, .btn-default.focus, .btn-default:active, .btn-default.active,\n  .open > .btn-default.dropdown-toggle {\n    color: #333;\n    background-color: #e6e5e5;\n    border-color: #adadad; }\n  .btn-default:active, .btn-default.active,\n  .open > .btn-default.dropdown-toggle {\n    background-image: none; }\n  .btn-default.disabled, .btn-default.disabled:hover, .btn-default.disabled:focus, .btn-default.disabled.focus, .btn-default.disabled:active, .btn-default.disabled.active, .btn-default[disabled], .btn-default[disabled]:hover, .btn-default[disabled]:focus, .btn-default[disabled].focus, .btn-default[disabled]:active, .btn-default[disabled].active,\n  fieldset[disabled] .btn-default,\n  fieldset[disabled] .btn-default:hover,\n  fieldset[disabled] .btn-default:focus,\n  fieldset[disabled] .btn-default.focus,\n  fieldset[disabled] .btn-default:active,\n  fieldset[disabled] .btn-default.active {\n    background-color: #fff;\n    border-color: #ccc; }\n  .btn-default .badge {\n    color: #fff;\n    background-color: #333; }\n\n.btn-primary {\n  color: #fff;\n  background-color: #337ab7;\n  border-color: #2e6da4; }\n  .btn-primary:hover, .btn-primary:focus, .btn-primary.focus, .btn-primary:active, .btn-primary.active,\n  .open > .btn-primary.dropdown-toggle {\n    color: #fff;\n    background-color: #286090;\n    border-color: #204d74; }\n  .btn-primary:active, .btn-primary.active,\n  .open > .btn-primary.dropdown-toggle {\n    background-image: none; }\n  .btn-primary.disabled, .btn-primary.disabled:hover, .btn-primary.disabled:focus, .btn-primary.disabled.focus, .btn-primary.disabled:active, .btn-primary.disabled.active, .btn-primary[disabled], .btn-primary[disabled]:hover, .btn-primary[disabled]:focus, .btn-primary[disabled].focus, .btn-primary[disabled]:active, .btn-primary[disabled].active,\n  fieldset[disabled] .btn-primary,\n  fieldset[disabled] .btn-primary:hover,\n  fieldset[disabled] .btn-primary:focus,\n  fieldset[disabled] .btn-primary.focus,\n  fieldset[disabled] .btn-primary:active,\n  fieldset[disabled] .btn-primary.active {\n    background-color: #337ab7;\n    border-color: #2e6da4; }\n  .btn-primary .badge {\n    color: #337ab7;\n    background-color: #fff; }\n\n.btn-success {\n  color: #fff;\n  background-color: #5cb85c;\n  border-color: #4cae4c; }\n  .btn-success:hover, .btn-success:focus, .btn-success.focus, .btn-success:active, .btn-success.active,\n  .open > .btn-success.dropdown-toggle {\n    color: #fff;\n    background-color: #449d44;\n    border-color: #398439; }\n  .btn-success:active, .btn-success.active,\n  .open > .btn-success.dropdown-toggle {\n    background-image: none; }\n  .btn-success.disabled, .btn-success.disabled:hover, .btn-success.disabled:focus, .btn-success.disabled.focus, .btn-success.disabled:active, .btn-success.disabled.active, .btn-success[disabled], .btn-success[disabled]:hover, .btn-success[disabled]:focus, .btn-success[disabled].focus, .btn-success[disabled]:active, .btn-success[disabled].active,\n  fieldset[disabled] .btn-success,\n  fieldset[disabled] .btn-success:hover,\n  fieldset[disabled] .btn-success:focus,\n  fieldset[disabled] .btn-success.focus,\n  fieldset[disabled] .btn-success:active,\n  fieldset[disabled] .btn-success.active {\n    background-color: #5cb85c;\n    border-color: #4cae4c; }\n  .btn-success .badge {\n    color: #5cb85c;\n    background-color: #fff; }\n\n.btn-info {\n  color: #fff;\n  background-color: #5bc0de;\n  border-color: #46b8da; }\n  .btn-info:hover, .btn-info:focus, .btn-info.focus, .btn-info:active, .btn-info.active,\n  .open > .btn-info.dropdown-toggle {\n    color: #fff;\n    background-color: #31b0d5;\n    border-color: #269abc; }\n  .btn-info:active, .btn-info.active,\n  .open > .btn-info.dropdown-toggle {\n    background-image: none; }\n  .btn-info.disabled, .btn-info.disabled:hover, .btn-info.disabled:focus, .btn-info.disabled.focus, .btn-info.disabled:active, .btn-info.disabled.active, .btn-info[disabled], .btn-info[disabled]:hover, .btn-info[disabled]:focus, .btn-info[disabled].focus, .btn-info[disabled]:active, .btn-info[disabled].active,\n  fieldset[disabled] .btn-info,\n  fieldset[disabled] .btn-info:hover,\n  fieldset[disabled] .btn-info:focus,\n  fieldset[disabled] .btn-info.focus,\n  fieldset[disabled] .btn-info:active,\n  fieldset[disabled] .btn-info.active {\n    background-color: #5bc0de;\n    border-color: #46b8da; }\n  .btn-info .badge {\n    color: #5bc0de;\n    background-color: #fff; }\n\n.btn-warning {\n  color: #fff;\n  background-color: #f0ad4e;\n  border-color: #eea236; }\n  .btn-warning:hover, .btn-warning:focus, .btn-warning.focus, .btn-warning:active, .btn-warning.active,\n  .open > .btn-warning.dropdown-toggle {\n    color: #fff;\n    background-color: #ec971f;\n    border-color: #d58512; }\n  .btn-warning:active, .btn-warning.active,\n  .open > .btn-warning.dropdown-toggle {\n    background-image: none; }\n  .btn-warning.disabled, .btn-warning.disabled:hover, .btn-warning.disabled:focus, .btn-warning.disabled.focus, .btn-warning.disabled:active, .btn-warning.disabled.active, .btn-warning[disabled], .btn-warning[disabled]:hover, .btn-warning[disabled]:focus, .btn-warning[disabled].focus, .btn-warning[disabled]:active, .btn-warning[disabled].active,\n  fieldset[disabled] .btn-warning,\n  fieldset[disabled] .btn-warning:hover,\n  fieldset[disabled] .btn-warning:focus,\n  fieldset[disabled] .btn-warning.focus,\n  fieldset[disabled] .btn-warning:active,\n  fieldset[disabled] .btn-warning.active {\n    background-color: #f0ad4e;\n    border-color: #eea236; }\n  .btn-warning .badge {\n    color: #f0ad4e;\n    background-color: #fff; }\n\n.btn-danger {\n  color: #fff;\n  background-color: #d9534f;\n  border-color: #d43f3a; }\n  .btn-danger:hover, .btn-danger:focus, .btn-danger.focus, .btn-danger:active, .btn-danger.active,\n  .open > .btn-danger.dropdown-toggle {\n    color: #fff;\n    background-color: #c9302c;\n    border-color: #ac2925; }\n  .btn-danger:active, .btn-danger.active,\n  .open > .btn-danger.dropdown-toggle {\n    background-image: none; }\n  .btn-danger.disabled, .btn-danger.disabled:hover, .btn-danger.disabled:focus, .btn-danger.disabled.focus, .btn-danger.disabled:active, .btn-danger.disabled.active, .btn-danger[disabled], .btn-danger[disabled]:hover, .btn-danger[disabled]:focus, .btn-danger[disabled].focus, .btn-danger[disabled]:active, .btn-danger[disabled].active,\n  fieldset[disabled] .btn-danger,\n  fieldset[disabled] .btn-danger:hover,\n  fieldset[disabled] .btn-danger:focus,\n  fieldset[disabled] .btn-danger.focus,\n  fieldset[disabled] .btn-danger:active,\n  fieldset[disabled] .btn-danger.active {\n    background-color: #d9534f;\n    border-color: #d43f3a; }\n  .btn-danger .badge {\n    color: #d9534f;\n    background-color: #fff; }\n\n.btn-link {\n  color: #337ab7;\n  font-weight: normal;\n  border-radius: 0; }\n  .btn-link, .btn-link:active, .btn-link.active, .btn-link[disabled],\n  fieldset[disabled] .btn-link {\n    background-color: transparent;\n    box-shadow: none; }\n  .btn-link, .btn-link:hover, .btn-link:focus, .btn-link:active {\n    border-color: transparent; }\n  .btn-link:hover, .btn-link:focus {\n    color: #23527c;\n    text-decoration: underline;\n    background-color: transparent; }\n  .btn-link[disabled]:hover, .btn-link[disabled]:focus,\n  fieldset[disabled] .btn-link:hover,\n  fieldset[disabled] .btn-link:focus {\n    color: #777777;\n    text-decoration: none; }\n\n.btn-lg, .btn-group-lg > .btn {\n  padding: 10px 16px;\n  font-size: 18px;\n  line-height: 1.3333333;\n  border-radius: 6px; }\n\n.btn-sm, .btn-group-sm > .btn {\n  padding: 5px 10px;\n  font-size: 12px;\n  line-height: 1.5;\n  border-radius: 3px; }\n\n.btn-xs, .btn-group-xs > .btn {\n  padding: 1px 5px;\n  font-size: 12px;\n  line-height: 1.5;\n  border-radius: 3px; }\n\n.btn-block {\n  display: block;\n  width: 100%; }\n\n.btn-block + .btn-block {\n  margin-top: 5px; }\n\ninput[type=\"submit\"].btn-block,\ninput[type=\"reset\"].btn-block,\ninput[type=\"button\"].btn-block {\n  width: 100%; }\n\n.fade {\n  opacity: 0;\n  transition: opacity 0.15s linear; }\n  .fade.in {\n    opacity: 1; }\n\n.collapse {\n  display: none; }\n  .collapse.in {\n    display: block; }\n\ntr.collapse.in {\n  display: table-row; }\n\ntbody.collapse.in {\n  display: table-row-group; }\n\n.collapsing {\n  position: relative;\n  height: 0;\n  overflow: hidden;\n  transition-property: height, visibility;\n  transition-duration: 0.35s;\n  transition-timing-function: ease; }\n\n.caret {\n  display: inline-block;\n  width: 0;\n  height: 0;\n  margin-left: 2px;\n  vertical-align: middle;\n  border-top: 4px dashed;\n  border-right: 4px solid transparent;\n  border-left: 4px solid transparent; }\n\n.dropup,\n.dropdown {\n  position: relative; }\n\n.dropdown-toggle:focus {\n  outline: 0; }\n\n.dropdown-menu {\n  position: absolute;\n  top: 100%;\n  left: 0;\n  z-index: 1000;\n  display: none;\n  float: left;\n  min-width: 160px;\n  padding: 5px 0;\n  margin: 2px 0 0;\n  list-style: none;\n  font-size: 14px;\n  text-align: left;\n  background-color: #fff;\n  border: 1px solid #ccc;\n  border: 1px solid rgba(0, 0, 0, 0.15);\n  border-radius: 4px;\n  box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175);\n  background-clip: padding-box; }\n  .dropdown-menu.pull-right {\n    right: 0;\n    left: auto; }\n  .dropdown-menu .divider {\n    height: 1px;\n    margin: 9px 0;\n    overflow: hidden;\n    background-color: #e5e5e5; }\n  .dropdown-menu > li > a {\n    display: block;\n    padding: 3px 20px;\n    clear: both;\n    font-weight: normal;\n    line-height: 1.428571429;\n    color: #333333;\n    white-space: nowrap; }\n\n.dropdown-menu > li > a:hover, .dropdown-menu > li > a:focus {\n  text-decoration: none;\n  color: #262626;\n  background-color: #f5f5f5; }\n\n.dropdown-menu > .active > a, .dropdown-menu > .active > a:hover, .dropdown-menu > .active > a:focus {\n  color: #fff;\n  text-decoration: none;\n  outline: 0;\n  background-color: #337ab7; }\n\n.dropdown-menu > .disabled > a, .dropdown-menu > .disabled > a:hover, .dropdown-menu > .disabled > a:focus {\n  color: #777777; }\n\n.dropdown-menu > .disabled > a:hover, .dropdown-menu > .disabled > a:focus {\n  text-decoration: none;\n  background-color: transparent;\n  background-image: none;\n  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n  cursor: not-allowed; }\n\n.open > .dropdown-menu {\n  display: block; }\n\n.open > a {\n  outline: 0; }\n\n.dropdown-menu-right {\n  left: auto;\n  right: 0; }\n\n.dropdown-menu-left {\n  left: 0;\n  right: auto; }\n\n.dropdown-menu-center {\n  left: 50%;\n  -webkit-transform: translateX(-50%);\n          transform: translateX(-50%); }\n\n.dropdown-header {\n  display: block;\n  padding: 3px 20px;\n  font-size: 12px;\n  line-height: 1.428571429;\n  color: #777777;\n  white-space: nowrap; }\n\n.dropdown-backdrop {\n  position: fixed;\n  left: 0;\n  right: 0;\n  bottom: 0;\n  top: 0;\n  z-index: 990; }\n\n.pull-right > .dropdown-menu {\n  right: 0;\n  left: auto; }\n\n.dropup .caret,\n.navbar-fixed-bottom .dropdown .caret {\n  border-top: 0;\n  border-bottom: 4px solid;\n  content: \"\"; }\n\n.dropup .dropdown-menu,\n.navbar-fixed-bottom .dropdown .dropdown-menu {\n  top: auto;\n  bottom: 100%;\n  margin-bottom: 2px; }\n\n@media (min-width: 768px) {\n  .navbar-right .dropdown-menu {\n    right: 0;\n    left: auto; }\n  .navbar-right .dropdown-menu-left {\n    left: 0;\n    right: auto; } }\n\n.btn-group,\n.btn-group-vertical {\n  position: relative;\n  display: inline-block;\n  vertical-align: middle; }\n  .btn-group > .btn,\n  .btn-group-vertical > .btn {\n    position: relative;\n    float: left; }\n    .btn-group > .btn:hover, .btn-group > .btn:focus, .btn-group > .btn:active, .btn-group > .btn.active,\n    .btn-group-vertical > .btn:hover,\n    .btn-group-vertical > .btn:focus,\n    .btn-group-vertical > .btn:active,\n    .btn-group-vertical > .btn.active {\n      z-index: 2; }\n\n.btn-group .btn + .btn,\n.btn-group .btn + .btn-group,\n.btn-group .btn-group + .btn,\n.btn-group .btn-group + .btn-group {\n  margin-left: -1px; }\n\n.btn-toolbar {\n  margin-left: -5px; }\n  .btn-toolbar:before, .btn-toolbar:after {\n    content: \" \";\n    display: table; }\n  .btn-toolbar:after {\n    clear: both; }\n  .btn-toolbar .btn-group,\n  .btn-toolbar .input-group {\n    float: left; }\n  .btn-toolbar > .btn,\n  .btn-toolbar > .btn-group,\n  .btn-toolbar > .input-group {\n    margin-left: 5px; }\n\n.btn-group > .btn:not(:first-child):not(:last-child):not(.dropdown-toggle) {\n  border-radius: 0; }\n\n.btn-group > .btn:first-child {\n  margin-left: 0; }\n  .btn-group > .btn:first-child:not(:last-child):not(.dropdown-toggle) {\n    border-bottom-right-radius: 0;\n    border-top-right-radius: 0; }\n\n.btn-group > .btn:last-child:not(:first-child),\n.btn-group > .dropdown-toggle:not(:first-child) {\n  border-bottom-left-radius: 0;\n  border-top-left-radius: 0; }\n\n.btn-group > .btn-group {\n  float: left; }\n\n.btn-group > .btn-group:not(:first-child):not(:last-child) > .btn {\n  border-radius: 0; }\n\n.btn-group > .btn-group:first-child:not(:last-child) > .btn:last-child,\n.btn-group > .btn-group:first-child:not(:last-child) > .dropdown-toggle {\n  border-bottom-right-radius: 0;\n  border-top-right-radius: 0; }\n\n.btn-group > .btn-group:last-child:not(:first-child) > .btn:first-child {\n  border-bottom-left-radius: 0;\n  border-top-left-radius: 0; }\n\n.btn-group .dropdown-toggle:active,\n.btn-group.open .dropdown-toggle {\n  outline: 0; }\n\n.btn-group > .btn + .dropdown-toggle {\n  padding-left: 8px;\n  padding-right: 8px; }\n\n.btn-group > .btn-lg + .dropdown-toggle, .btn-group-lg.btn-group > .btn + .dropdown-toggle {\n  padding-left: 12px;\n  padding-right: 12px; }\n\n.btn-group.open .dropdown-toggle {\n  box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); }\n  .btn-group.open .dropdown-toggle.btn-link {\n    box-shadow: none; }\n\n.btn .caret {\n  margin-left: 0; }\n\n.btn-lg .caret, .btn-group-lg > .btn .caret {\n  border-width: 5px 5px 0;\n  border-bottom-width: 0; }\n\n.dropup .btn-lg .caret, .dropup .btn-group-lg > .btn .caret {\n  border-width: 0 5px 5px; }\n\n.btn-group-vertical > .btn,\n.btn-group-vertical > .btn-group,\n.btn-group-vertical > .btn-group > .btn {\n  display: block;\n  float: none;\n  width: 100%;\n  max-width: 100%; }\n\n.btn-group-vertical > .btn-group:before, .btn-group-vertical > .btn-group:after {\n  content: \" \";\n  display: table; }\n\n.btn-group-vertical > .btn-group:after {\n  clear: both; }\n\n.btn-group-vertical > .btn-group > .btn {\n  float: none; }\n\n.btn-group-vertical > .btn + .btn,\n.btn-group-vertical > .btn + .btn-group,\n.btn-group-vertical > .btn-group + .btn,\n.btn-group-vertical > .btn-group + .btn-group {\n  margin-top: -1px;\n  margin-left: 0; }\n\n.btn-group-vertical > .btn:not(:first-child):not(:last-child) {\n  border-radius: 0; }\n\n.btn-group-vertical > .btn:first-child:not(:last-child) {\n  border-top-right-radius: 4px;\n  border-bottom-right-radius: 0;\n  border-bottom-left-radius: 0; }\n\n.btn-group-vertical > .btn:last-child:not(:first-child) {\n  border-bottom-left-radius: 4px;\n  border-top-right-radius: 0;\n  border-top-left-radius: 0; }\n\n.btn-group-vertical > .btn-group:not(:first-child):not(:last-child) > .btn {\n  border-radius: 0; }\n\n.btn-group-vertical > .btn-group:first-child:not(:last-child) > .btn:last-child,\n.btn-group-vertical > .btn-group:first-child:not(:last-child) > .dropdown-toggle {\n  border-bottom-right-radius: 0;\n  border-bottom-left-radius: 0; }\n\n.btn-group-vertical > .btn-group:last-child:not(:first-child) > .btn:first-child {\n  border-top-right-radius: 0;\n  border-top-left-radius: 0; }\n\n.btn-group-justified {\n  display: table;\n  width: 100%;\n  table-layout: fixed;\n  border-collapse: separate; }\n  .btn-group-justified > .btn,\n  .btn-group-justified > .btn-group {\n    float: none;\n    display: table-cell;\n    width: 1%; }\n  .btn-group-justified > .btn-group .btn {\n    width: 100%; }\n  .btn-group-justified > .btn-group .dropdown-menu {\n    left: auto; }\n\n[data-toggle=\"buttons\"] > .btn input[type=\"radio\"],\n[data-toggle=\"buttons\"] > .btn input[type=\"checkbox\"],\n[data-toggle=\"buttons\"] > .btn-group > .btn input[type=\"radio\"],\n[data-toggle=\"buttons\"] > .btn-group > .btn input[type=\"checkbox\"] {\n  position: absolute;\n  clip: rect(0, 0, 0, 0);\n  pointer-events: none; }\n\n.input-group {\n  position: relative;\n  display: table;\n  border-collapse: separate; }\n  .input-group[class*=\"col-\"] {\n    float: none;\n    padding-left: 0;\n    padding-right: 0; }\n  .input-group .form-control {\n    position: relative;\n    z-index: 2;\n    float: left;\n    width: 100%;\n    margin-bottom: 0; }\n\n.input-group-addon,\n.input-group-btn,\n.input-group .form-control {\n  display: table-cell; }\n  .input-group-addon:not(:first-child):not(:last-child),\n  .input-group-btn:not(:first-child):not(:last-child),\n  .input-group .form-control:not(:first-child):not(:last-child) {\n    border-radius: 0; }\n\n.input-group-addon,\n.input-group-btn {\n  width: 1%;\n  white-space: nowrap;\n  vertical-align: middle; }\n\n.input-group-addon {\n  padding: 6px 12px;\n  font-size: 14px;\n  font-weight: normal;\n  line-height: 1;\n  color: #555555;\n  text-align: center;\n  background-color: #eeeeee;\n  border: 1px solid #ccc;\n  border-radius: 4px; }\n  .input-group-addon.input-sm,\n  .input-group-sm > .input-group-addon,\n  .input-group-sm > .input-group-btn > .input-group-addon.btn {\n    padding: 5px 10px;\n    font-size: 12px;\n    border-radius: 3px; }\n  .input-group-addon.input-lg,\n  .input-group-lg > .input-group-addon,\n  .input-group-lg > .input-group-btn > .input-group-addon.btn {\n    padding: 10px 16px;\n    font-size: 18px;\n    border-radius: 6px; }\n  .input-group-addon input[type=\"radio\"],\n  .input-group-addon input[type=\"checkbox\"] {\n    margin-top: 0; }\n\n.input-group .form-control:first-child,\n.input-group-addon:first-child,\n.input-group-btn:first-child > .btn,\n.input-group-btn:first-child > .btn-group > .btn,\n.input-group-btn:first-child > .dropdown-toggle,\n.input-group-btn:last-child > .btn:not(:last-child):not(.dropdown-toggle),\n.input-group-btn:last-child > .btn-group:not(:last-child) > .btn {\n  border-bottom-right-radius: 0;\n  border-top-right-radius: 0; }\n\n.input-group-addon:first-child {\n  border-right: 0; }\n\n.input-group .form-control:last-child,\n.input-group-addon:last-child,\n.input-group-btn:last-child > .btn,\n.input-group-btn:last-child > .btn-group > .btn,\n.input-group-btn:last-child > .dropdown-toggle,\n.input-group-btn:first-child > .btn:not(:first-child),\n.input-group-btn:first-child > .btn-group:not(:first-child) > .btn {\n  border-bottom-left-radius: 0;\n  border-top-left-radius: 0; }\n\n.input-group-addon:last-child {\n  border-left: 0; }\n\n.input-group-btn {\n  position: relative;\n  font-size: 0;\n  white-space: nowrap; }\n  .input-group-btn > .btn {\n    position: relative; }\n    .input-group-btn > .btn + .btn {\n      margin-left: -1px; }\n    .input-group-btn > .btn:hover, .input-group-btn > .btn:focus, .input-group-btn > .btn:active {\n      z-index: 2; }\n  .input-group-btn:first-child > .btn,\n  .input-group-btn:first-child > .btn-group {\n    margin-right: -1px; }\n  .input-group-btn:last-child > .btn,\n  .input-group-btn:last-child > .btn-group {\n    margin-left: -1px; }\n\n.nav {\n  margin-bottom: 0;\n  padding-left: 0;\n  list-style: none; }\n  .nav:before, .nav:after {\n    content: \" \";\n    display: table; }\n  .nav:after {\n    clear: both; }\n  .nav > li {\n    position: relative;\n    display: block; }\n    .nav > li > a {\n      position: relative;\n      display: block;\n      padding: 10px 15px; }\n      .nav > li > a:hover, .nav > li > a:focus {\n        text-decoration: none;\n        background-color: #eeeeee; }\n    .nav > li.disabled > a {\n      color: #777777; }\n      .nav > li.disabled > a:hover, .nav > li.disabled > a:focus {\n        color: #777777;\n        text-decoration: none;\n        background-color: transparent;\n        cursor: not-allowed; }\n  .nav .open > a, .nav .open > a:hover, .nav .open > a:focus {\n    background-color: #eeeeee;\n    border-color: #337ab7; }\n  .nav .nav-divider {\n    height: 1px;\n    margin: 9px 0;\n    overflow: hidden;\n    background-color: #e5e5e5; }\n  .nav > li > a > img {\n    max-width: none; }\n\n.nav-tabs {\n  border-bottom: 1px solid #ddd; }\n  .nav-tabs > li {\n    float: left;\n    margin-bottom: -1px; }\n    .nav-tabs > li > a {\n      margin-right: 2px;\n      line-height: 1.428571429;\n      border: 1px solid transparent;\n      border-radius: 4px 4px 0 0; }\n      .nav-tabs > li > a:hover {\n        border-color: #eeeeee #eeeeee #ddd; }\n    .nav-tabs > li.active > a, .nav-tabs > li.active > a:hover, .nav-tabs > li.active > a:focus {\n      color: #555555;\n      background-color: #fff;\n      border: 1px solid #ddd;\n      border-bottom-color: transparent;\n      cursor: default; }\n\n.nav-pills > li {\n  float: left; }\n  .nav-pills > li > a {\n    border-radius: 4px; }\n  .nav-pills > li + li {\n    margin-left: 2px; }\n  .nav-pills > li.active > a, .nav-pills > li.active > a:hover, .nav-pills > li.active > a:focus {\n    color: #fff;\n    background-color: #337ab7; }\n\n.nav-stacked > li {\n  float: none; }\n  .nav-stacked > li + li {\n    margin-top: 2px;\n    margin-left: 0; }\n\n.nav-justified, .nav-tabs.nav-justified {\n  width: 100%; }\n  .nav-justified > li, .nav-tabs.nav-justified > li {\n    float: none; }\n    .nav-justified > li > a, .nav-tabs.nav-justified > li > a {\n      text-align: center;\n      margin-bottom: 5px; }\n  .nav-justified > .dropdown .dropdown-menu {\n    top: auto;\n    left: auto; }\n  @media (min-width: 768px) {\n    .nav-justified > li, .nav-tabs.nav-justified > li {\n      display: table-cell;\n      width: 1%; }\n      .nav-justified > li > a, .nav-tabs.nav-justified > li > a {\n        margin-bottom: 0; } }\n\n.nav-tabs-justified, .nav-tabs.nav-justified {\n  border-bottom: 0; }\n  .nav-tabs-justified > li > a, .nav-tabs.nav-justified > li > a {\n    margin-right: 0;\n    border-radius: 4px; }\n  .nav-tabs-justified > .active > a, .nav-tabs.nav-justified > .active > a,\n  .nav-tabs-justified > .active > a:hover,\n  .nav-tabs.nav-justified > .active > a:hover,\n  .nav-tabs-justified > .active > a:focus,\n  .nav-tabs.nav-justified > .active > a:focus {\n    border: 1px solid #ddd; }\n  @media (min-width: 768px) {\n    .nav-tabs-justified > li > a, .nav-tabs.nav-justified > li > a {\n      border-bottom: 1px solid #ddd;\n      border-radius: 4px 4px 0 0; }\n    .nav-tabs-justified > .active > a, .nav-tabs.nav-justified > .active > a,\n    .nav-tabs-justified > .active > a:hover,\n    .nav-tabs.nav-justified > .active > a:hover,\n    .nav-tabs-justified > .active > a:focus,\n    .nav-tabs.nav-justified > .active > a:focus {\n      border-bottom-color: #fff; } }\n\n.tab-content > .tab-pane {\n  display: none; }\n\n.tab-content > .active {\n  display: block; }\n\n.nav-tabs .dropdown-menu {\n  margin-top: -1px;\n  border-top-right-radius: 0;\n  border-top-left-radius: 0; }\n\n.navbar {\n  position: relative;\n  min-height: 50px;\n  margin-bottom: 20px;\n  border: 1px solid transparent; }\n  .navbar:before, .navbar:after {\n    content: \" \";\n    display: table; }\n  .navbar:after {\n    clear: both; }\n  @media (min-width: 768px) {\n    .navbar {\n      border-radius: 4px; } }\n\n.navbar-header:before, .navbar-header:after {\n  content: \" \";\n  display: table; }\n\n.navbar-header:after {\n  clear: both; }\n\n@media (min-width: 768px) {\n  .navbar-header {\n    float: left; } }\n\n.navbar-collapse {\n  overflow-x: visible;\n  padding-right: 15px;\n  padding-left: 15px;\n  border-top: 1px solid transparent;\n  box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1);\n  -webkit-overflow-scrolling: touch; }\n  .navbar-collapse:before, .navbar-collapse:after {\n    content: \" \";\n    display: table; }\n  .navbar-collapse:after {\n    clear: both; }\n  .navbar-collapse.in {\n    overflow-y: auto; }\n  @media (min-width: 768px) {\n    .navbar-collapse {\n      width: auto;\n      border-top: 0;\n      box-shadow: none; }\n      .navbar-collapse.collapse {\n        display: block !important;\n        height: auto !important;\n        padding-bottom: 0;\n        overflow: visible !important; }\n      .navbar-collapse.in {\n        overflow-y: visible; }\n      .navbar-fixed-top .navbar-collapse,\n      .navbar-static-top .navbar-collapse,\n      .navbar-fixed-bottom .navbar-collapse {\n        padding-left: 0;\n        padding-right: 0; } }\n\n.navbar-fixed-top .navbar-collapse,\n.navbar-fixed-bottom .navbar-collapse {\n  max-height: 340px; }\n  @media (max-device-width: 480px) and (orientation: landscape) {\n    .navbar-fixed-top .navbar-collapse,\n    .navbar-fixed-bottom .navbar-collapse {\n      max-height: 200px; } }\n\n.container > .navbar-header,\n.container > .navbar-collapse,\n.container-fluid > .navbar-header,\n.container-fluid > .navbar-collapse {\n  margin-right: -15px;\n  margin-left: -15px; }\n  @media (min-width: 768px) {\n    .container > .navbar-header,\n    .container > .navbar-collapse,\n    .container-fluid > .navbar-header,\n    .container-fluid > .navbar-collapse {\n      margin-right: 0;\n      margin-left: 0; } }\n\n.navbar-static-top {\n  z-index: 1000;\n  border-width: 0 0 1px; }\n  @media (min-width: 768px) {\n    .navbar-static-top {\n      border-radius: 0; } }\n\n.navbar-fixed-top,\n.navbar-fixed-bottom {\n  position: fixed;\n  right: 0;\n  left: 0;\n  z-index: 1030; }\n  @media (min-width: 768px) {\n    .navbar-fixed-top,\n    .navbar-fixed-bottom {\n      border-radius: 0; } }\n\n.navbar-fixed-top {\n  top: 0;\n  border-width: 0 0 1px; }\n\n.navbar-fixed-bottom {\n  bottom: 0;\n  margin-bottom: 0;\n  border-width: 1px 0 0; }\n\n.navbar-brand {\n  float: left;\n  padding: 15px 15px;\n  font-size: 18px;\n  line-height: 20px;\n  height: 50px; }\n  .navbar-brand:hover, .navbar-brand:focus {\n    text-decoration: none; }\n  .navbar-brand > img {\n    display: block; }\n  @media (min-width: 768px) {\n    .navbar > .container .navbar-brand,\n    .navbar > .container-fluid .navbar-brand {\n      margin-left: -15px; } }\n\n.navbar-toggle {\n  position: relative;\n  float: right;\n  margin-right: 15px;\n  padding: 9px 10px;\n  margin-top: 8px;\n  margin-bottom: 8px;\n  background-color: transparent;\n  background-image: none;\n  border: 1px solid transparent;\n  border-radius: 4px; }\n  .navbar-toggle:focus {\n    outline: 0; }\n  .navbar-toggle .icon-bar {\n    display: block;\n    width: 22px;\n    height: 2px;\n    border-radius: 1px; }\n  .navbar-toggle .icon-bar + .icon-bar {\n    margin-top: 4px; }\n  @media (min-width: 768px) {\n    .navbar-toggle {\n      display: none; } }\n\n.navbar-nav {\n  margin: 7.5px -15px; }\n  .navbar-nav > li > a {\n    padding-top: 10px;\n    padding-bottom: 10px;\n    line-height: 20px; }\n  @media (max-width: 767px) {\n    .navbar-nav .open .dropdown-menu {\n      position: static;\n      float: none;\n      width: auto;\n      margin-top: 0;\n      background-color: transparent;\n      border: 0;\n      box-shadow: none; }\n      .navbar-nav .open .dropdown-menu > li > a,\n      .navbar-nav .open .dropdown-menu .dropdown-header {\n        padding: 5px 15px 5px 25px; }\n      .navbar-nav .open .dropdown-menu > li > a {\n        line-height: 20px; }\n        .navbar-nav .open .dropdown-menu > li > a:hover, .navbar-nav .open .dropdown-menu > li > a:focus {\n          background-image: none; } }\n  @media (min-width: 768px) {\n    .navbar-nav {\n      float: left;\n      margin: 0; }\n      .navbar-nav > li {\n        float: left; }\n        .navbar-nav > li > a {\n          padding-top: 15px;\n          padding-bottom: 15px; } }\n\n.navbar-form {\n  margin-left: -15px;\n  margin-right: -15px;\n  padding: 10px 15px;\n  border-top: 1px solid transparent;\n  border-bottom: 1px solid transparent;\n  box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1);\n  margin-top: 8px;\n  margin-bottom: 8px; }\n  @media (min-width: 768px) {\n    .navbar-form .form-group {\n      display: inline-block;\n      margin-bottom: 0;\n      vertical-align: middle; }\n    .navbar-form .form-control {\n      display: inline-block;\n      width: auto;\n      vertical-align: middle; }\n    .navbar-form .form-control-static {\n      display: inline-block; }\n    .navbar-form .input-group {\n      display: inline-table;\n      vertical-align: middle; }\n      .navbar-form .input-group .input-group-addon,\n      .navbar-form .input-group .input-group-btn,\n      .navbar-form .input-group .form-control {\n        width: auto; }\n    .navbar-form .input-group > .form-control {\n      width: 100%; }\n    .navbar-form .control-label {\n      margin-bottom: 0;\n      vertical-align: middle; }\n    .navbar-form .radio,\n    .navbar-form .checkbox {\n      display: inline-block;\n      margin-top: 0;\n      margin-bottom: 0;\n      vertical-align: middle; }\n      .navbar-form .radio label,\n      .navbar-form .checkbox label {\n        padding-left: 0; }\n    .navbar-form .radio input[type=\"radio\"],\n    .navbar-form .checkbox input[type=\"checkbox\"] {\n      position: relative;\n      margin-left: 0; }\n    .navbar-form .has-feedback .form-control-feedback {\n      top: 0; } }\n  @media (max-width: 767px) {\n    .navbar-form .form-group {\n      margin-bottom: 5px; }\n      .navbar-form .form-group:last-child {\n        margin-bottom: 0; } }\n  @media (min-width: 768px) {\n    .navbar-form {\n      width: auto;\n      border: 0;\n      margin-left: 0;\n      margin-right: 0;\n      padding-top: 0;\n      padding-bottom: 0;\n      box-shadow: none; } }\n\n.navbar-nav > li > .dropdown-menu {\n  margin-top: 0;\n  border-top-right-radius: 0;\n  border-top-left-radius: 0; }\n\n.navbar-fixed-bottom .navbar-nav > li > .dropdown-menu {\n  margin-bottom: 0;\n  border-top-right-radius: 4px;\n  border-top-left-radius: 4px;\n  border-bottom-right-radius: 0;\n  border-bottom-left-radius: 0; }\n\n.navbar-btn {\n  margin-top: 8px;\n  margin-bottom: 8px; }\n  .navbar-btn.btn-sm, .btn-group-sm > .navbar-btn.btn {\n    margin-top: 10px;\n    margin-bottom: 10px; }\n  .navbar-btn.btn-xs, .btn-group-xs > .navbar-btn.btn {\n    margin-top: 14px;\n    margin-bottom: 14px; }\n\n.navbar-text {\n  margin-top: 15px;\n  margin-bottom: 15px; }\n  @media (min-width: 768px) {\n    .navbar-text {\n      float: left;\n      margin-left: 15px;\n      margin-right: 15px; } }\n\n@media (min-width: 768px) {\n  .navbar-left {\n    float: left !important; }\n  .navbar-right {\n    float: right !important;\n    margin-right: -15px; }\n    .navbar-right ~ .navbar-right {\n      margin-right: 0; } }\n\n.navbar-default {\n  background-color: #4a8bfc;\n  border-color: #4a8bfc; }\n  .navbar-default .navbar-brand {\n    color: rgba(255, 255, 255, 0.8); }\n    .navbar-default .navbar-brand:hover, .navbar-default .navbar-brand:focus {\n      color: #fff;\n      background-color: transparent; }\n  .navbar-default .navbar-text {\n    color: #777; }\n  .navbar-default .navbar-nav > li > a {\n    color: rgba(255, 255, 255, 0.8); }\n    .navbar-default .navbar-nav > li > a:hover, .navbar-default .navbar-nav > li > a:focus {\n      color: #fff;\n      background-color: transparent; }\n  .navbar-default .navbar-nav > .active > a, .navbar-default .navbar-nav > .active > a:hover, .navbar-default .navbar-nav > .active > a:focus {\n    color: #fff;\n    background-color: transparent; }\n  .navbar-default .navbar-nav > .disabled > a, .navbar-default .navbar-nav > .disabled > a:hover, .navbar-default .navbar-nav > .disabled > a:focus {\n    color: #ccc;\n    background-color: transparent; }\n  .navbar-default .navbar-toggle {\n    border-color: #ddd; }\n    .navbar-default .navbar-toggle:hover, .navbar-default .navbar-toggle:focus {\n      background-color: #ddd; }\n    .navbar-default .navbar-toggle .icon-bar {\n      background-color: #888; }\n  .navbar-default .navbar-collapse,\n  .navbar-default .navbar-form {\n    border-color: #4a8bfc; }\n  .navbar-default .navbar-nav > .open > a, .navbar-default .navbar-nav > .open > a:hover, .navbar-default .navbar-nav > .open > a:focus {\n    background-color: transparent;\n    color: #fff; }\n  @media (max-width: 767px) {\n    .navbar-default .navbar-nav .open .dropdown-menu > li > a {\n      color: rgba(255, 255, 255, 0.8); }\n      .navbar-default .navbar-nav .open .dropdown-menu > li > a:hover, .navbar-default .navbar-nav .open .dropdown-menu > li > a:focus {\n        color: #fff;\n        background-color: transparent; }\n    .navbar-default .navbar-nav .open .dropdown-menu > .active > a, .navbar-default .navbar-nav .open .dropdown-menu > .active > a:hover, .navbar-default .navbar-nav .open .dropdown-menu > .active > a:focus {\n      color: #fff;\n      background-color: transparent; }\n    .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a, .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:hover, .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:focus {\n      color: #ccc;\n      background-color: transparent; } }\n  .navbar-default .navbar-link {\n    color: rgba(255, 255, 255, 0.8); }\n    .navbar-default .navbar-link:hover {\n      color: #fff; }\n  .navbar-default .btn-link {\n    color: rgba(255, 255, 255, 0.8); }\n    .navbar-default .btn-link:hover, .navbar-default .btn-link:focus {\n      color: #fff; }\n    .navbar-default .btn-link[disabled]:hover, .navbar-default .btn-link[disabled]:focus,\n    fieldset[disabled] .navbar-default .btn-link:hover,\n    fieldset[disabled] .navbar-default .btn-link:focus {\n      color: #ccc; }\n\n.navbar-inverse {\n  background-color: #222;\n  border-color: #090808; }\n  .navbar-inverse .navbar-brand {\n    color: #9d9d9d; }\n    .navbar-inverse .navbar-brand:hover, .navbar-inverse .navbar-brand:focus {\n      color: #fff;\n      background-color: transparent; }\n  .navbar-inverse .navbar-text {\n    color: #9d9d9d; }\n  .navbar-inverse .navbar-nav > li > a {\n    color: #9d9d9d; }\n    .navbar-inverse .navbar-nav > li > a:hover, .navbar-inverse .navbar-nav > li > a:focus {\n      color: #fff;\n      background-color: transparent; }\n  .navbar-inverse .navbar-nav > .active > a, .navbar-inverse .navbar-nav > .active > a:hover, .navbar-inverse .navbar-nav > .active > a:focus {\n    color: #fff;\n    background-color: #090808; }\n  .navbar-inverse .navbar-nav > .disabled > a, .navbar-inverse .navbar-nav > .disabled > a:hover, .navbar-inverse .navbar-nav > .disabled > a:focus {\n    color: #444;\n    background-color: transparent; }\n  .navbar-inverse .navbar-toggle {\n    border-color: #333; }\n    .navbar-inverse .navbar-toggle:hover, .navbar-inverse .navbar-toggle:focus {\n      background-color: #333; }\n    .navbar-inverse .navbar-toggle .icon-bar {\n      background-color: #fff; }\n  .navbar-inverse .navbar-collapse,\n  .navbar-inverse .navbar-form {\n    border-color: #101010; }\n  .navbar-inverse .navbar-nav > .open > a, .navbar-inverse .navbar-nav > .open > a:hover, .navbar-inverse .navbar-nav > .open > a:focus {\n    background-color: #090808;\n    color: #fff; }\n  @media (max-width: 767px) {\n    .navbar-inverse .navbar-nav .open .dropdown-menu > .dropdown-header {\n      border-color: #090808; }\n    .navbar-inverse .navbar-nav .open .dropdown-menu .divider {\n      background-color: #090808; }\n    .navbar-inverse .navbar-nav .open .dropdown-menu > li > a {\n      color: #9d9d9d; }\n      .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:hover, .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:focus {\n        color: #fff;\n        background-color: transparent; }\n    .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a, .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:hover, .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:focus {\n      color: #fff;\n      background-color: #090808; }\n    .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a, .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:hover, .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:focus {\n      color: #444;\n      background-color: transparent; } }\n  .navbar-inverse .navbar-link {\n    color: #9d9d9d; }\n    .navbar-inverse .navbar-link:hover {\n      color: #fff; }\n  .navbar-inverse .btn-link {\n    color: #9d9d9d; }\n    .navbar-inverse .btn-link:hover, .navbar-inverse .btn-link:focus {\n      color: #fff; }\n    .navbar-inverse .btn-link[disabled]:hover, .navbar-inverse .btn-link[disabled]:focus,\n    fieldset[disabled] .navbar-inverse .btn-link:hover,\n    fieldset[disabled] .navbar-inverse .btn-link:focus {\n      color: #444; }\n\n.navbar-default.navbar-sticky {\n  position: fixed;\n  top: 0;\n  left: 0;\n  right: 0;\n  z-index: 9999;\n  padding: 10px 0;\n  opacity: 0;\n  -webkit-transform: translate3d(0, -100%, 0);\n          transform: translate3d(0, -100%, 0);\n  box-shadow: 0 2px 6px 0 rgba(0, 0, 0, 0.07);\n  background: #fff; }\n  @supports ((-webkit-backdrop-filter: saturate(180%) blur(20px)) or (backdrop-filter: saturate(180%) blur(20px))) {\n    .navbar-default.navbar-sticky {\n      background: rgba(255, 255, 255, 0.9);\n      -webkit-backdrop-filter: saturate(180%) blur(20px);\n              backdrop-filter: saturate(180%) blur(20px); } }\n  .navbar-default.navbar-sticky .navbar-nav > li.header-btn-white a {\n    background-color: #488aff;\n    color: #fff; }\n    .navbar-default.navbar-sticky .navbar-nav > li.header-btn-white a:hover {\n      background-color: rgba(74, 139, 252, 0.9);\n      color: #fff; }\n  .navbar-default.navbar-sticky--show, .navbar-default.navbar-sticky--hide {\n    -webkit-animation-fill-mode: forwards;\n            animation-fill-mode: forwards; }\n  .navbar-default.navbar-sticky--hide {\n    -webkit-animation-duration: 0.1s;\n            animation-duration: 0.1s;\n    -webkit-animation-name: slideup;\n            animation-name: slideup; }\n\n@-webkit-keyframes slideup {\n  0% {\n    opacity: 1;\n    -webkit-transform: translate3d(0, 0, 0);\n            transform: translate3d(0, 0, 0); }\n  100% {\n    opacity: 0;\n    -webkit-transform: translate3d(0, -100%, 0);\n            transform: translate3d(0, -100%, 0); } }\n\n@keyframes slideup {\n  0% {\n    opacity: 1;\n    -webkit-transform: translate3d(0, 0, 0);\n            transform: translate3d(0, 0, 0); }\n  100% {\n    opacity: 0;\n    -webkit-transform: translate3d(0, -100%, 0);\n            transform: translate3d(0, -100%, 0); } }\n  .navbar-default.navbar-sticky--show {\n    -webkit-animation-duration: 0.5s;\n            animation-duration: 0.5s;\n    -webkit-animation-name: slidedown;\n            animation-name: slidedown;\n    -webkit-animation-timing-function: cubic-bezier(0.075, 0.82, 0.165, 1);\n            animation-timing-function: cubic-bezier(0.075, 0.82, 0.165, 1); }\n\n@-webkit-keyframes slidedown {\n  0% {\n    opacity: 0;\n    -webkit-transform: translate3d(0, -100%, 0);\n            transform: translate3d(0, -100%, 0); }\n  1% {\n    opacity: 1; }\n  100% {\n    opacity: 1;\n    -webkit-transform: translate3d(0, 0, 0);\n            transform: translate3d(0, 0, 0); } }\n\n@keyframes slidedown {\n  0% {\n    opacity: 0;\n    -webkit-transform: translate3d(0, -100%, 0);\n            transform: translate3d(0, -100%, 0); }\n  1% {\n    opacity: 1; }\n  100% {\n    opacity: 1;\n    -webkit-transform: translate3d(0, 0, 0);\n            transform: translate3d(0, 0, 0); } }\n  @media (max-width: 767px) {\n    .navbar-default.navbar-sticky {\n      display: none; } }\n\n.modal-open {\n  overflow: hidden; }\n\n.modal {\n  display: none;\n  overflow: hidden;\n  position: fixed;\n  top: 0;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  z-index: 1050;\n  -webkit-overflow-scrolling: touch;\n  outline: 0; }\n  .modal.fade .modal-dialog {\n    -webkit-transform: translate(0, -25%);\n    transform: translate(0, -25%);\n    transition: -webkit-transform 0.3s ease-out;\n    transition: transform 0.3s ease-out;\n    transition: transform 0.3s ease-out, -webkit-transform 0.3s ease-out; }\n  .modal.in .modal-dialog {\n    -webkit-transform: translate(0, 0);\n    transform: translate(0, 0); }\n\n.modal-open .modal {\n  overflow-x: hidden;\n  overflow-y: auto; }\n\n.modal-dialog {\n  position: relative;\n  width: auto;\n  margin: 10px; }\n\n.modal-content {\n  position: relative;\n  background-color: #fff;\n  border: 1px solid #999;\n  border: 1px solid rgba(0, 0, 0, 0.2);\n  border-radius: 6px;\n  box-shadow: 0 3px 9px rgba(0, 0, 0, 0.5);\n  background-clip: padding-box;\n  outline: 0; }\n\n.modal-backdrop {\n  position: fixed;\n  top: 0;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  z-index: 1040;\n  background-color: #000; }\n  .modal-backdrop.fade {\n    opacity: 0;\n    filter: alpha(opacity=0); }\n  .modal-backdrop.in {\n    opacity: 0.5;\n    filter: alpha(opacity=50); }\n\n.modal-header {\n  padding: 15px;\n  border-bottom: 1px solid #e5e5e5;\n  min-height: 16.428571429px; }\n\n.modal-header .close {\n  margin-top: -2px; }\n\n.modal-title {\n  margin: 0;\n  line-height: 1.428571429; }\n\n.modal-body {\n  position: relative;\n  padding: 15px; }\n\n.modal-footer {\n  padding: 15px;\n  text-align: right;\n  border-top: 1px solid #e5e5e5; }\n  .modal-footer:before, .modal-footer:after {\n    content: \" \";\n    display: table; }\n  .modal-footer:after {\n    clear: both; }\n  .modal-footer .btn + .btn {\n    margin-left: 5px;\n    margin-bottom: 0; }\n  .modal-footer .btn-group .btn + .btn {\n    margin-left: -1px; }\n  .modal-footer .btn-block + .btn-block {\n    margin-left: 0; }\n\n.modal-scrollbar-measure {\n  position: absolute;\n  top: -9999px;\n  width: 50px;\n  height: 50px;\n  overflow: scroll; }\n\n@media (min-width: 768px) {\n  .modal-dialog {\n    width: 600px;\n    margin: 30px auto; }\n  .modal-content {\n    box-shadow: 0 5px 15px rgba(0, 0, 0, 0.5); }\n  .modal-sm {\n    width: 300px; } }\n\n@media (min-width: 992px) {\n  .modal-lg {\n    width: 900px; } }\n\n.tooltip {\n  position: absolute;\n  z-index: 1070;\n  display: block;\n  font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n  font-size: 12px;\n  font-weight: normal;\n  line-height: 1.4;\n  opacity: 0;\n  filter: alpha(opacity=0); }\n  .tooltip.in {\n    opacity: 0.9;\n    filter: alpha(opacity=90); }\n  .tooltip.top {\n    margin-top: -3px;\n    padding: 5px 0; }\n  .tooltip.right {\n    margin-left: 3px;\n    padding: 0 5px; }\n  .tooltip.bottom {\n    margin-top: 3px;\n    padding: 5px 0; }\n  .tooltip.left {\n    margin-left: -3px;\n    padding: 0 5px; }\n\n.tooltip-inner {\n  max-width: 200px;\n  padding: 3px 8px;\n  color: #fff;\n  text-align: center;\n  text-decoration: none;\n  background-color: #000;\n  border-radius: 4px; }\n\n.tooltip-arrow {\n  position: absolute;\n  width: 0;\n  height: 0;\n  border-color: transparent;\n  border-style: solid; }\n\n.tooltip.top .tooltip-arrow {\n  bottom: 0;\n  left: 50%;\n  margin-left: -5px;\n  border-width: 5px 5px 0;\n  border-top-color: #000; }\n\n.tooltip.top-left .tooltip-arrow {\n  bottom: 0;\n  right: 5px;\n  margin-bottom: -5px;\n  border-width: 5px 5px 0;\n  border-top-color: #000; }\n\n.tooltip.top-right .tooltip-arrow {\n  bottom: 0;\n  left: 5px;\n  margin-bottom: -5px;\n  border-width: 5px 5px 0;\n  border-top-color: #000; }\n\n.tooltip.right .tooltip-arrow {\n  top: 50%;\n  left: 0;\n  margin-top: -5px;\n  border-width: 5px 5px 5px 0;\n  border-right-color: #000; }\n\n.tooltip.left .tooltip-arrow {\n  top: 50%;\n  right: 0;\n  margin-top: -5px;\n  border-width: 5px 0 5px 5px;\n  border-left-color: #000; }\n\n.tooltip.bottom .tooltip-arrow {\n  top: 0;\n  left: 50%;\n  margin-left: -5px;\n  border-width: 0 5px 5px;\n  border-bottom-color: #000; }\n\n.tooltip.bottom-left .tooltip-arrow {\n  top: 0;\n  right: 5px;\n  margin-top: -5px;\n  border-width: 0 5px 5px;\n  border-bottom-color: #000; }\n\n.tooltip.bottom-right .tooltip-arrow {\n  top: 0;\n  left: 5px;\n  margin-top: -5px;\n  border-width: 0 5px 5px;\n  border-bottom-color: #000; }\n\n.clearfix:before, .clearfix:after {\n  content: \" \";\n  display: table; }\n\n.clearfix:after {\n  clear: both; }\n\n.center-block {\n  display: block;\n  margin-left: auto;\n  margin-right: auto; }\n\n.pull-right {\n  float: right !important; }\n\n.pull-left {\n  float: left !important; }\n\n.hide {\n  display: none !important; }\n\n.show {\n  display: block !important; }\n\n.invisible {\n  visibility: hidden; }\n\n.text-hide {\n  font: 0/0 a;\n  color: transparent;\n  text-shadow: none;\n  background-color: transparent;\n  border: 0; }\n\n.hidden {\n  display: none !important; }\n\n.affix {\n  position: fixed; }\n\n@-ms-viewport {\n  width: device-width; }\n\n.visible-xs {\n  display: none !important; }\n\n.visible-sm {\n  display: none !important; }\n\n.visible-md {\n  display: none !important; }\n\n.visible-lg {\n  display: none !important; }\n\n.visible-xs-block,\n.visible-xs-inline,\n.visible-xs-inline-block,\n.visible-sm-block,\n.visible-sm-inline,\n.visible-sm-inline-block,\n.visible-md-block,\n.visible-md-inline,\n.visible-md-inline-block,\n.visible-lg-block,\n.visible-lg-inline,\n.visible-lg-inline-block {\n  display: none !important; }\n\n@media (max-width: 767px) {\n  .visible-xs {\n    display: block !important; }\n  table.visible-xs {\n    display: table; }\n  tr.visible-xs {\n    display: table-row !important; }\n  th.visible-xs,\n  td.visible-xs {\n    display: table-cell !important; } }\n\n@media (max-width: 767px) {\n  .visible-xs-block {\n    display: block !important; } }\n\n@media (max-width: 767px) {\n  .visible-xs-inline {\n    display: inline !important; } }\n\n@media (max-width: 767px) {\n  .visible-xs-inline-block {\n    display: inline-block !important; } }\n\n@media (min-width: 768px) and (max-width: 991px) {\n  .visible-sm {\n    display: block !important; }\n  table.visible-sm {\n    display: table; }\n  tr.visible-sm {\n    display: table-row !important; }\n  th.visible-sm,\n  td.visible-sm {\n    display: table-cell !important; } }\n\n@media (min-width: 768px) and (max-width: 991px) {\n  .visible-sm-block {\n    display: block !important; } }\n\n@media (min-width: 768px) and (max-width: 991px) {\n  .visible-sm-inline {\n    display: inline !important; } }\n\n@media (min-width: 768px) and (max-width: 991px) {\n  .visible-sm-inline-block {\n    display: inline-block !important; } }\n\n@media (min-width: 992px) and (max-width: 1219px) {\n  .visible-md {\n    display: block !important; }\n  table.visible-md {\n    display: table; }\n  tr.visible-md {\n    display: table-row !important; }\n  th.visible-md,\n  td.visible-md {\n    display: table-cell !important; } }\n\n@media (min-width: 992px) and (max-width: 1219px) {\n  .visible-md-block {\n    display: block !important; } }\n\n@media (min-width: 992px) and (max-width: 1219px) {\n  .visible-md-inline {\n    display: inline !important; } }\n\n@media (min-width: 992px) and (max-width: 1219px) {\n  .visible-md-inline-block {\n    display: inline-block !important; } }\n\n@media (min-width: 1220px) {\n  .visible-lg {\n    display: block !important; }\n  table.visible-lg {\n    display: table; }\n  tr.visible-lg {\n    display: table-row !important; }\n  th.visible-lg,\n  td.visible-lg {\n    display: table-cell !important; } }\n\n@media (min-width: 1220px) {\n  .visible-lg-block {\n    display: block !important; } }\n\n@media (min-width: 1220px) {\n  .visible-lg-inline {\n    display: inline !important; } }\n\n@media (min-width: 1220px) {\n  .visible-lg-inline-block {\n    display: inline-block !important; } }\n\n@media (max-width: 767px) {\n  .hidden-xs {\n    display: none !important; } }\n\n@media (min-width: 768px) and (max-width: 991px) {\n  .hidden-sm {\n    display: none !important; } }\n\n@media (min-width: 992px) and (max-width: 1219px) {\n  .hidden-md {\n    display: none !important; } }\n\n@media (min-width: 1220px) {\n  .hidden-lg {\n    display: none !important; } }\n\n.visible-print {\n  display: none !important; }\n\n@media print {\n  .visible-print {\n    display: block !important; }\n  table.visible-print {\n    display: table; }\n  tr.visible-print {\n    display: table-row !important; }\n  th.visible-print,\n  td.visible-print {\n    display: table-cell !important; } }\n\n.visible-print-block {\n  display: none !important; }\n  @media print {\n    .visible-print-block {\n      display: block !important; } }\n\n.visible-print-inline {\n  display: none !important; }\n  @media print {\n    .visible-print-inline {\n      display: inline !important; } }\n\n.visible-print-inline-block {\n  display: none !important; }\n  @media print {\n    .visible-print-inline-block {\n      display: inline-block !important; } }\n\n@media print {\n  .hidden-print {\n    display: none !important; } }\n\n.btn {\n  font-weight: 600;\n  border-radius: 3px;\n  padding: 10px 20px 12px;\n  font-size: 16px; }\n  .btn.btn-ionic {\n    background: #4a8bfc;\n    color: white;\n    transition: color .2s, background-color .2s;\n    -webkit-font-smoothing: antialiased;\n    font-size: 20px;\n    letter-spacing: 0;\n    padding: 16px 28px; }\n    .btn.btn-ionic:hover {\n      color: #fff;\n      background: #5B98FF; }\n  .btn.btn-outline {\n    color: #4a8bfc;\n    border-color: #4a8bfc;\n    border: #4a8bfc 2px solid;\n    transition: color .2s, background-color .2s;\n    -webkit-font-smoothing: antialiased; }\n    .btn.btn-outline:hover {\n      color: white;\n      background-color: #4a8bfc; }\n  .btn.fill.green, .btn.fill.blue {\n    border-radius: 4px;\n    color: white;\n    font-size: 14px;\n    font-weight: 500;\n    position: relative;\n    box-shadow: 0 1px 1px rgba(0, 0, 0, 0.1);\n    padding: 12px 20px; }\n  .btn.fill.green {\n    background: #39d46d;\n    padding-left: 35px; }\n    .btn.fill.green .icon {\n      font-size: 26px;\n      position: absolute;\n      top: 4px;\n      left: 15px;\n      font-weight: 800; }\n  .btn.fill.blue {\n    background: #48acf8;\n    padding-left: 45px;\n    margin-left: 5px; }\n    .btn.fill.blue .icon {\n      font-size: 22px;\n      position: absolute;\n      top: 6px;\n      left: 20px; }\n\nheader.container {\n  padding-top: 20px;\n  padding-bottom: 20px;\n  -webkit-font-smoothing: antialiased; }\n  header.container .creator-logo {\n    width: 120px; }\n  header.container nav {\n    float: right; }\n    @media (max-width: 767px) {\n      header.container nav {\n        float: none; } }\n    header.container nav a {\n      color: #484f5b;\n      display: inline-block;\n      font-weight: 500;\n      transition: .2s color;\n      font-size: 14px;\n      letter-spacing: 0; }\n      header.container nav a.active, header.container nav a:hover {\n        color: #a0a5b0;\n        box-shadow: none; }\n      @media (max-width: 767px) {\n        header.container nav a {\n          width: 100%;\n          text-align: center; } }\n    header.container nav .btn {\n      padding: 8px 14px;\n      margin-left: 2px; }\n      header.container nav .btn.border {\n        border-left: 1px solid #ebeef2;\n        border-radius: 0;\n        margin-left: 10px;\n        padding-left: 25px; }\n    header.container nav .blue {\n      color: #4a8bfc; }\n      header.container nav .blue:hover, header.container nav .blue:active {\n        color: #639bfc;\n        box-shadow: none; }\n    header.container nav .signup {\n      background: #4a8bfc;\n      color: white;\n      transition: .2s background; }\n      header.container nav .signup:hover {\n        background: #3b81fc;\n        color: white; }\n\nhgroup {\n  padding-top: 75px;\n  padding-bottom: 75px;\n  text-align: center; }\n  hgroup h1 {\n    font-weight: 600;\n    font-size: 32px;\n    margin-bottom: 0; }\n  hgroup h2 {\n    font-weight: 600;\n    font-size: 28px;\n    margin-bottom: 15px;\n    color: #4C555A; }\n    hgroup h2 strong {\n      font-weight: 700; }\n  hgroup h3 {\n    font-size: 25px;\n    font-weight: 600; }\n    hgroup h3 + p {\n      font-weight: 400;\n      font-size: 14px;\n      line-height: 20px; }\n  hgroup p {\n    font-weight: 300;\n    font-size: 20px;\n    color: #576070;\n    margin-bottom: 32px; }\n  hgroup.preserver {\n    padding-top: 180px;\n    background: #f3f5f7 center 55px no-repeat url(\"/img/pro/creator/support-buoy.png\");\n    background-size: 80px;\n    border-bottom: 2px #e2e7ef solid; }\n  hgroup:not(form) .btn {\n    margin-top: 10px; }\n  hgroup.grey-top {\n    background: #f3f5f7;\n    padding-bottom: 200px;\n    margin-bottom: -130px;\n    border-bottom: 2px solid #e6e9ee; }\n\ninput[type=text].input {\n  border: 2px solid #e6e9ee;\n  border-radius: 3px;\n  padding: 10px 20px;\n  font-size: 16px;\n  transition: .4s border-color; }\n  input[type=text].input::-webkit-input-placeholder {\n    color: #a0a5b0; }\n  input[type=text].input:-ms-input-placeholder {\n    color: #a0a5b0; }\n  input[type=text].input:focus {\n    border-color: #4a8bfc;\n    outline: none; }\n\n.tail {\n  background: #263d4c;\n  color: #9bacb6;\n  padding: 80px 0;\n  margin-top: 90px; }\n  .tail.ghost {\n    background: #263d4c center center no-repeat url(\"/img/pro/creator/bg-creator-ghost.png\");\n    background-size: auto 100%; }\n  .tail h2 {\n    color: white;\n    font-size: 28px;\n    font-weight: 600; }\n  .tail p {\n    font-size: 18px; }\n    .tail p a {\n      position: relative;\n      color: #4a8bfc;\n      transition: color .2s; }\n      .tail p a.underscore:after {\n        content: '';\n        min-height: 1px;\n        position: absolute;\n        left: 0;\n        right: 0;\n        bottom: -3px;\n        border-bottom: 2px solid #4a8bfc;\n        transition: border-color .2s; }\n      .tail p a:hover {\n        color: #95bbfd;\n        text-decoration: none; }\n        .tail p a:hover:after {\n          border-color: #95bbfd; }\n\n.start-now {\n  margin-top: 60px; }\n  .start-now form {\n    position: relative;\n    padding-top: 28px; }\n    .start-now form .btn {\n      margin-top: -3px;\n      padding: 11px 20px;\n      font-size: 16px; }\n    .start-now form .input {\n      width: 330px; }\n      @media (max-width: 500px) {\n        .start-now form .input {\n          width: 100%; } }\n    .start-now form:before {\n      background: no-repeat center center url(\"/img/pro/creator/signup-arrow.png\");\n      background-size: 61px;\n      width: 61px;\n      height: 56px;\n      content: '';\n      position: absolute;\n      margin-left: -90px;\n      margin-top: -25px; }\n  @media (max-width: 991px) {\n    .start-now {\n      padding-left: 5px;\n      padding-right: 5px; }\n      .start-now form .btn {\n        display: block;\n        margin: 10px auto 0; } }\n\nfooter {\n  color: #a0a5b0;\n  padding-top: 50px; }\n  footer .row {\n    display: -ms-flexbox;\n    display: flex;\n    -ms-flex-flow: row wrap;\n        flex-flow: row wrap;\n    width: 1000px;\n    margin: 0 auto; }\n    @media (max-width: 1219px) {\n      footer .row {\n        width: auto; } }\n    @media (max-width: 991px) {\n      footer .row {\n        display: block; }\n        footer .row .left,\n        footer .row .right,\n        footer .row .center {\n          width: auto;\n          margin: 0 auto;\n          text-align: center; }\n        footer .row .center {\n          -ms-flex-pack: distribute;\n              justify-content: space-around;\n          margin-top: 50px; } }\n  footer .left {\n    width: 190px;\n    -ms-flex-positive: 0;\n        flex-grow: 0;\n    -ms-flex-negative: 0;\n        flex-shrink: 0;\n    margin-right: 87px;\n    font-size: 14px; }\n    footer .left p {\n      line-height: 20px;\n      color: #a0a5b0;\n      font-weight: 300; }\n    footer .left .creator-logo {\n      width: 120px;\n      margin-bottom: 22px; }\n    @media (max-width: 1219px) {\n      footer .left {\n        margin-right: 5px; } }\n  footer .right {\n    width: 332px;\n    -ms-flex-positive: 0;\n        flex-grow: 0;\n    -ms-flex-negative: 0;\n        flex-shrink: 0;\n    margin-left: 60px; }\n    @media (max-width: 1219px) {\n      footer .right {\n        margin-left: 5px; } }\n    @media (max-width: 991px) {\n      footer .right {\n        display: none !important; } }\n  footer .twitter {\n    background: no-repeat center center url(\"/img/twitter-bubble.png\");\n    background-size: 332px;\n    width: 332px;\n    height: 109px;\n    padding: 18px 16px 26px 59px;\n    font-size: 14px;\n    color: #4C555A; }\n    footer .twitter p {\n      color: #4C555A;\n      line-height: 20px;\n      font-weight: 400; }\n    footer .twitter a {\n      color: #4a8bfc; }\n      footer .twitter a:hover {\n        color: #045cf5; }\n  footer .center {\n    display: -ms-flexbox;\n    display: flex;\n    -ms-flex-flow: row wrap;\n        flex-flow: row wrap;\n    -ms-flex-pack: justify;\n        justify-content: space-between;\n    -ms-flex-positive: 2;\n        flex-grow: 2; }\n    footer .center section {\n      display: inline-block; }\n  footer ul {\n    list-style: none;\n    padding: 0; }\n    footer ul li {\n      font-size: 14px;\n      line-height: 2em; }\n  footer a {\n    color: #b0b6c4;\n    transition: color .2s; }\n    footer a:hover {\n      color: #4f8ef7;\n      text-decoration: none; }\n  footer h3 {\n    font-weight: 500;\n    font-size: 16px;\n    color: #4C555A;\n    line-height: 10.5px; }\n  footer .bottom {\n    text-align: center;\n    margin-top: 44px;\n    padding-top: 44px;\n    padding-bottom: 24px;\n    position: relative; }\n    footer .bottom .ioni-io-logo {\n      width: 72px;\n      height: 24px;\n      margin-right: 10px;\n      margin-top: -3px; }\n    footer .bottom p {\n      margin: 0 auto;\n      color: #e6e9ee;\n      font-size: 12px; }\n    footer .bottom:before {\n      content: '';\n      width: 98px;\n      height: 1px;\n      border-bottom: 1px solid #ebeef2;\n      position: absolute;\n      top: 0;\n      left: 0;\n      right: 0;\n      margin: 0 auto; }\n\n#page-creator {\n  color: #4C555A;\n  -webkit-font-smoothing: antialiased; }\n  #page-creator .hero {\n    background: center bottom no-repeat url(\"/img/pro/creator/bg-hero-creator.jpg\");\n    background-size: cover;\n    min-height: 875px; }\n    @media (min-width: 1950px) {\n      #page-creator .hero {\n        background-position: center -160px; }\n        #page-creator .hero hgroup.container h3 {\n          max-width: 100%; } }\n    @media (min-width: 2250px) {\n      #page-creator .hero {\n        background-position: center -235px; } }\n    @media (min-width: 2400px) {\n      #page-creator .hero {\n        background-position: center -270px; } }\n    @media (min-width: 2500px) {\n      #page-creator .hero {\n        background-position: center -290px; } }\n    @media (min-width: 2550px) {\n      #page-creator .hero {\n        background-position: center -310px; } }\n    @media (max-width: 767px) {\n      #page-creator .hero {\n        background-size: 767px;\n        min-height: 600px;\n        background-position: center bottom; } }\n    #page-creator .hero hgroup {\n      padding-top: 70px;\n      margin-top: 0; }\n      #page-creator .hero hgroup h1 {\n        font-weight: 600;\n        font-size: 32px;\n        letter-spacing: -0.01em;\n        margin-top: 20px; }\n        #page-creator .hero hgroup h1 a {\n          color: #4a8bfc;\n          transition: color .2s;\n          text-decoration: none; }\n          #page-creator .hero hgroup h1 a:hover {\n            color: #7cabfd; }\n      #page-creator .hero hgroup h3 {\n        color: #474d59;\n        font-size: 20px;\n        font-weight: 500;\n        max-width: 500px;\n        margin: 26px auto 44px;\n        -webkit-font-smoothing: antialiased;\n        line-height: 28px; }\n        #page-creator .hero hgroup h3 strong {\n          font-weight: 600;\n          color: #576070; }\n  #page-creator .used-by {\n    font-size: 16px;\n    color: #a0a5b0;\n    text-align: center;\n    margin-top: 30px;\n    margin-bottom: 60px; }\n    #page-creator .used-by p {\n      margin-bottom: 20px;\n      font-weight: 400; }\n    #page-creator .used-by img {\n      width: 602px; }\n      @media (max-width: 767px) {\n        #page-creator .used-by img {\n          width: 100%; } }\n  #page-creator .how-creator-works {\n    background: white;\n    background: linear-gradient(to right, #4a8efa 0%, #34b3fe 100%);\n    text-align: center; }\n    #page-creator .how-creator-works hgroup {\n      padding-top: 80px;\n      padding-bottom: 50px; }\n    #page-creator .how-creator-works h3,\n    #page-creator .how-creator-works h4,\n    #page-creator .how-creator-works strong {\n      color: white; }\n    #page-creator .how-creator-works strong {\n      font-weight: 600; }\n    #page-creator .how-creator-works h4 {\n      font-size: 18px;\n      font-weight: 500; }\n    #page-creator .how-creator-works p {\n      color: white;\n      font-weight: 400;\n      line-height: 22px;\n      font-size: 14px; }\n    #page-creator .how-creator-works hgroup h3 {\n      font-weight: 500; }\n    #page-creator .how-creator-works hgroup p {\n      font-size: 18px; }\n    #page-creator .how-creator-works .step {\n      display: inline-block;\n      width: 330px;\n      padding-top: 215px;\n      padding-bottom: 80px;\n      margin-right: 70px;\n      background: no-repeat center top;\n      background-size: 270px;\n      position: relative; }\n      #page-creator .how-creator-works .step:last-child {\n        margin-right: 0; }\n        #page-creator .how-creator-works .step:last-child::before {\n          display: none; }\n      #page-creator .how-creator-works .step.drag-n-drop {\n        background-image: url(\"/img/pro/creator/works-dnd.png?1\"); }\n      #page-creator .how-creator-works .step.preview {\n        background-image: url(\"/img/pro/creator/works-preview.png\"); }\n      #page-creator .how-creator-works .step.export {\n        background-image: url(\"/img/pro/creator/works-export.png?1\"); }\n      #page-creator .how-creator-works .step:before {\n        background: no-repeat center center url(\"/img/pro/creator/ico-arrow-works.png\");\n        background-size: 19px;\n        width: 19px;\n        height: 43px;\n        content: '';\n        position: absolute;\n        top: 85px;\n        right: -60px; }\n      @media (max-width: 1219px) and (min-width: 992px) {\n        #page-creator .how-creator-works .step {\n          margin-right: 60px;\n          width: 270px; }\n          #page-creator .how-creator-works .step:before {\n            right: -35px; } }\n      @media (max-width: 991px) {\n        #page-creator .how-creator-works .step {\n          margin-right: 0;\n          width: 100%; }\n          #page-creator .how-creator-works .step:before {\n            display: 0; } }\n  #page-creator .hero-side .container {\n    height: 498px;\n    padding-top: 140px; }\n  #page-creator .hero-side.left .container {\n    padding-left: 695px;\n    background: no-repeat left top;\n    background-size: 682px; }\n    @media (max-width: 1219px) and (min-width: 992px) {\n      #page-creator .hero-side.left .container {\n        margin-left: -100px;\n        width: 1100px;\n        padding-left: 670px; } }\n    @media (max-width: 991px) {\n      #page-creator .hero-side.left .container {\n        padding-left: 10px;\n        padding-bottom: 150px;\n        background-position: center bottom;\n        background-size: 227px;\n        text-align: center;\n        height: auto; } }\n  #page-creator .hero-side.right {\n    background: #f6f7fa; }\n    #page-creator .hero-side.right .container {\n      padding-right: 660px;\n      background: no-repeat right top;\n      background-size: 682px; }\n      @media (max-width: 1219px) and (min-width: 992px) {\n        #page-creator .hero-side.right .container {\n          margin-right: -50px;\n          width: 1020px;\n          padding-right: 630px; } }\n      @media (max-width: 991px) {\n        #page-creator .hero-side.right .container {\n          padding-right: 10px;\n          padding-bottom: 150px;\n          background-position: center bottom;\n          background-size: 227px;\n          text-align: center;\n          height: auto; } }\n  #page-creator .hero-side.tool .container {\n    background-image: url(\"/img/pro/creator/features-tool.jpg\"); }\n    @media (max-width: 991px) {\n      #page-creator .hero-side.tool .container {\n        background-image: none;\n        padding-bottom: 100px; } }\n  #page-creator .hero-side.dnd .container {\n    background-image: url(\"/img/pro/creator/features-dnd.png?1\"); }\n  #page-creator .hero-side.xplatform .container {\n    background-image: url(\"/img/pro/creator/features-xplatform.jpg\"); }\n  #page-creator .hero-side.teams .container {\n    background-image: url(\"/img/pro/creator/features-teams.png?1\"); }\n  #page-creator .hero-side.inline-code-editing {\n    background: no-repeat left bottom;\n    background-image: url(\"/img/pro/creator/features-code.jpg\");\n    background-size: 45%; }\n    @media screen and (min-width: 2000px) {\n      #page-creator .hero-side.inline-code-editing {\n        background-size: 896px; } }\n    @media (max-width: 991px) {\n      #page-creator .hero-side.inline-code-editing {\n        background-size: 299px; } }\n  #page-creator .hero-side h2 {\n    font-size: 24px;\n    font-weight: 500;\n    line-height: 1.5em;\n    margin-bottom: 20px;\n    letter-spacing: -0.02em; }\n  #page-creator .hero-side p {\n    color: #7E8792;\n    font-size: 16px;\n    font-weight: 400;\n    line-height: 1.8em;\n    margin-bottom: 15px; }\n    #page-creator .hero-side p em,\n    #page-creator .hero-side p strong {\n      font-weight: 600; }\n  #page-creator .hero-side .platforms {\n    width: 107px; }\n  #page-creator .hero-center .top {\n    background: #121b2e no-repeat center bottom url(\"/img/pro/creator/features-preview-photo.jpg\");\n    background-size: 1800px; }\n    #page-creator .hero-center .top .container {\n      height: 410px;\n      padding-top: 151px; }\n      #page-creator .hero-center .top .container h2 {\n        color: white;\n        font-size: 32px;\n        font-weight: 600; }\n      #page-creator .hero-center .top .container p {\n        color: #a0a5b0;\n        font-size: 18px; }\n  #page-creator .hero-center .bottom {\n    background: #222f49 no-repeat center bottom url(\"/img/pro/creator/features-preview-blur.jpg?1\");\n    background-size: 1800px; }\n    #page-creator .hero-center .bottom .container {\n      height: 140px;\n      text-align: center;\n      padding-top: 22px; }\n      #page-creator .hero-center .bottom .container p {\n        color: #a0a5b0;\n        font-size: 14px;\n        font-weight: 400; }\n      #page-creator .hero-center .bottom .container .btn {\n        height: 53px; }\n        #page-creator .hero-center .bottom .container .btn.app-store {\n          background: no-repeat center center url(\"/img/pro/creator/app-store-creator-btn.png\");\n          background-size: 153px;\n          width: 153px; }\n          @media (max-width: 767px) {\n            #page-creator .hero-center .bottom .container .btn.app-store {\n              background-size: 102px;\n              width: 102px; } }\n        #page-creator .hero-center .bottom .container .btn.google-play {\n          background: no-repeat center center url(\"/img/pro/creator/google-play-creator-btn.png?1\");\n          background-size: 184px;\n          width: 184px; }\n          @media (max-width: 767px) {\n            #page-creator .hero-center .bottom .container .btn.google-play {\n              background-size: 123px;\n              width: 123px; } }\n  #page-creator .hero-center strong {\n    font-weight: 500;\n    color: #ebeef2; }\n\n.product-comparison {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-pack: center;\n      justify-content: center;\n  -ms-flex-flow: row wrap;\n      flex-flow: row wrap;\n  -webkit-font-smoothing: antialiased; }\n  .product-comparison.billing-toggle {\n    margin-bottom: 5px; }\n    .product-comparison.billing-toggle button {\n      background: none;\n      border: 0;\n      border-bottom: 2px solid #e6e9ee;\n      color: #a0a5b0;\n      font-size: 14px;\n      padding: 5px 15px;\n      transition: .2s color, .2s border-color;\n      outline: 0;\n      line-height: 21.4px;\n      font-size: 15px;\n      font-weight: 500; }\n      .product-comparison.billing-toggle button.active, .product-comparison.billing-toggle button:hover {\n        color: #4a8bfc;\n        border-color: #4a8bfc; }\n  .product-comparison .plan {\n    border: 2px solid #ebeef2;\n    border-radius: 2px;\n    text-align: center;\n    margin: 15px 6px;\n    padding: 30px 10px;\n    width: calc(25% - 13px);\n    max-width: 251px;\n    min-width: 224px;\n    color: #576070;\n    background: white; }\n    .product-comparison .plan .fade {\n      opacity: 1;\n      position: absolute;\n      transition: .2s ease all;\n      left: 0;\n      right: 0; }\n      .product-comparison .plan .fade.ng-hide {\n        opacity: 0;\n        -webkit-transform: scale(1.5, 1.5);\n                transform: scale(1.5, 1.5); }\n    .product-comparison .plan.enterprise {\n      margin-top: 20px;\n      width: 640px;\n      max-width: 100%;\n      position: relative; }\n      .product-comparison .plan.enterprise:before, .product-comparison .plan.enterprise:after {\n        background: no-repeat center center url(\"/img/pro/creator/entrprs-str.png\");\n        background-size: 26px;\n        width: 26px;\n        height: 24px;\n        content: '';\n        position: absolute;\n        left: -50px; }\n      .product-comparison .plan.enterprise:after {\n        left: auto;\n        right: -50px; }\n      .product-comparison .plan.enterprise h3 {\n        display: inline;\n        font-size: 18px;\n        font-weight: 700;\n        margin-right: 5px; }\n      .product-comparison .plan.enterprise p {\n        display: inline;\n        font-size: 14px;\n        font-weight: 400;\n        color: #9bacb6; }\n        .product-comparison .plan.enterprise p strong {\n          color: #f66486;\n          font-weight: 500; }\n      .product-comparison .plan.enterprise a {\n        font-weight: 600; }\n    .product-comparison .plan.free h2 {\n      color: #f6a42e; }\n    .product-comparison .plan.dev h2 {\n      color: #5c6775; }\n    .product-comparison .plan.pro h2 {\n      color: #36c971; }\n    .product-comparison .plan.business h2 {\n      color: #8364f6; }\n    .product-comparison .plan hgroup {\n      padding: 0; }\n      .product-comparison .plan hgroup h2,\n      .product-comparison .plan hgroup h3,\n      .product-comparison .plan hgroup h4,\n      .product-comparison .plan hgroup small {\n        color: #4C555A;\n        margin: 0; }\n      .product-comparison .plan hgroup h2 {\n        font-size: 16px;\n        text-transform: uppercase;\n        letter-spacing: 3px;\n        font-weight: 700;\n        margin-bottom: 30px; }\n      .product-comparison .plan hgroup h3 {\n        font-size: 56px;\n        font-weight: 700;\n        height: 61px;\n        position: relative;\n        width: 100%; }\n        .product-comparison .plan hgroup h3 sup {\n          font-size: 20px;\n          top: -.5em; }\n        .product-comparison .plan hgroup h3 sub {\n          font-size: 18px;\n          font-weight: 600;\n          bottom: 0; }\n        .product-comparison .plan hgroup h3 a {\n          font-size: 37px;\n          text-decoration: none; }\n          .product-comparison .plan hgroup h3 a:hover, .product-comparison .plan hgroup h3 a:active {\n            color: #4a8bfc; }\n      .product-comparison .plan hgroup h4 {\n        font-size: 16px;\n        font-weight: 500;\n        color: #a0a5b0;\n        line-height: 17.6px; }\n    .product-comparison .plan ul {\n      list-style: none;\n      padding: 25px 0 0; }\n      .product-comparison .plan ul li {\n        padding: 8px 10px;\n        margin: 0 -10px;\n        font-size: 14px;\n        font-weight: 400; }\n        .product-comparison .plan ul li strong {\n          font-weight: 400;\n          color: #4C555A; }\n        .product-comparison .plan ul li.feature {\n          background: #f6f8fa; }\n    @media (max-width: 1219px) {\n      .product-comparison .plan {\n        width: 205px; } }\n  @media (max-width: 991px) {\n    .product-comparison {\n      max-width: 480px;\n      margin: 0 auto; } }\n\n.also-included h3 {\n  text-align: center;\n  margin: 85px auto;\n  font-weight: 400; }\n\n.also-included strong {\n  font-size: 16px;\n  font-weight: 500;\n  margin-bottom: 14px;\n  display: block; }\n\n.also-included p {\n  font-size: 14px;\n  color: #898989;\n  line-height: 1.8em;\n  font-weight: 400; }\n\n.also-included ul {\n  padding: 0 72px;\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-flow: row wrap;\n      flex-flow: row wrap;\n  -ms-flex-pack: justify;\n      justify-content: space-between; }\n\n.also-included li {\n  width: 295px;\n  list-style: none;\n  padding-left: 28px;\n  position: relative;\n  margin-bottom: 80px; }\n  .also-included li::before {\n    background: top center no-repeat url(\"/img/pro/creator/included-icons.png\");\n    background-size: 20px;\n    position: absolute;\n    content: '';\n    width: 20px;\n    height: 20px;\n    left: 0;\n    top: 0; }\n  .also-included li.sharing::before {\n    background-position: center -20px; }\n  .also-included li.ionic::before {\n    background-position: center -40px; }\n  .also-included li.templates::before {\n    background-position: center -60px; }\n  .also-included li.exporting::before {\n    background-position: center -80px; }\n  .also-included li.preview::before {\n    background-position: center -100px; }\n\n.faq {\n  background: #f6f8fa;\n  padding-bottom: 120px; }\n  .faq hgroup {\n    padding-top: 100px;\n    padding-bottom: 10px; }\n  .faq .cols {\n    display: -ms-flexbox;\n    display: flex;\n    -ms-flex-pack: center;\n        justify-content: center;\n    -webkit-font-smoothing: antialiased; }\n  .faq .col {\n    max-width: 395px;\n    margin: 0 45px; }\n    .faq .col dt {\n      font-weight: 500;\n      font-size: 16px;\n      margin: 70px 0 14px;\n      line-height: 20px; }\n    .faq .col dd {\n      color: #808692;\n      font-size: 14px;\n      line-height: 2em; }\n      .faq .col dd strong {\n        font-weight: 500;\n        color: #808692; }\n  @media (max-width: 767px) {\n    .faq {\n      display: block; }\n      .faq .cols {\n        display: block; }\n      .faq .col {\n        max-width: 100%; } }\n\n.brody {\n  background: right bottom no-repeat url(\"/img/pro/creator/support-brody.jpg\");\n  background-size: 60%;\n  min-height: 550px;\n  padding-bottom: 100px;\n  padding-top: 32px; }\n  .brody + .tail {\n    margin-top: 0; }\n  .brody dl {\n    width: 45%; }\n    .brody dl dt {\n      padding: 50px 0 10px;\n      font-size: 18px;\n      font-weight: 400; }\n    .brody dl dd {\n      color: #576070;\n      font-size: 14px;\n      line-height: 1.9em;\n      font-weight: 400; }\n  @media (max-width: 767px) {\n    .brody {\n      background-position: center bottom;\n      padding-bottom: 250px;\n      background-size: 300px; }\n      .brody dl {\n        width: 100%; } }\n\n#body-creator-docs,\n#body-creator-docs .container {\n  position: relative; }\n\n#body-creator-docs #index {\n  -webkit-font-smoothing: antialiased;\n  position: fixed;\n  max-height: 100%;\n  overflow-y: auto;\n  background: rgba(255, 255, 255, 0.8); }\n  @media (min-width: 1220px) {\n    #body-creator-docs #index {\n      width: 277px; } }\n  @media (max-width: 1219px) and (min-width: 992px) {\n    #body-creator-docs #index {\n      width: 212px; } }\n  @media (max-width: 991px) and (min-width: 768px) {\n    #body-creator-docs #index {\n      width: 157px; } }\n  @media (max-width: 767px) {\n    #body-creator-docs #index {\n      width: 100%;\n      position: relative !important; } }\n  #body-creator-docs #index.bottom {\n    position: absolute;\n    bottom: 0; }\n  #body-creator-docs #index ul {\n    padding-left: 0;\n    list-style: none; }\n    #body-creator-docs #index ul a {\n      font-size: 16px;\n      color: #4C555A;\n      font-weight: 400;\n      margin: 1.1em 0;\n      display: block;\n      border-right: 2px solid transparent;\n      transition: color .2s, border-color .2s; }\n    #body-creator-docs #index ul ul .active > a,\n    #body-creator-docs #index ul a:hover {\n      color: #4a8bfc;\n      text-decoration: none;\n      background: none; }\n    #body-creator-docs #index ul ul {\n      padding-left: 25px;\n      padding-right: 25px; }\n      #body-creator-docs #index ul ul.animate-show {\n        opacity: 1; }\n        #body-creator-docs #index ul ul.animate-show a {\n          min-height: 20px;\n          max-height: 150px; }\n        #body-creator-docs #index ul ul.animate-show.ng-hide-add, #body-creator-docs #index ul ul.animate-show.ng-hide-remove {\n          transition: all linear .2s; }\n        #body-creator-docs #index ul ul.animate-show.ng-hide {\n          opacity: 0; }\n          #body-creator-docs #index ul ul.animate-show.ng-hide a {\n            max-height: 0; }\n      #body-creator-docs #index ul ul a {\n        font-size: 14px;\n        color: #a0a5b0;\n        font-weight: 400;\n        transition: all linear .2s; }\n      #body-creator-docs #index ul ul .active a {\n        border-color: #4a8bfc;\n        overflow-y: hidden; }\n\n#docs h1,\n#docs h2,\n#docs h3,\n#docs h4,\n#docs h5,\n#docs h6 {\n  font-weight: 600;\n  margin: 2.2em 0 .8em;\n  line-height: 2em; }\n\n#docs h2 {\n  font-size: 20px; }\n\n#docs h3 {\n  font-size: 18px; }\n\n#docs h4 {\n  font-size: 16px; }\n\n#docs p {\n  font-size: 14px;\n  color: #898989;\n  line-height: 2em;\n  font-weight: 400; }\n\n.studio-callout {\n  margin: 100px 0;\n  background-color: #4D5B69;\n  border-radius: 8px;\n  position: relative;\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-align: start;\n      align-items: flex-start; }\n  .studio-callout hgroup {\n    -ms-flex: 0 0 45%;\n        flex: 0 0 45%;\n    padding: 0;\n    text-align: left;\n    padding: 80px 0 80px 80px; }\n    .studio-callout hgroup h3 {\n      margin-top: 0;\n      margin-bottom: 22px;\n      font-weight: 500;\n      color: #fff; }\n    .studio-callout hgroup p {\n      font-size: 18px;\n      line-height: 24px;\n      color: #DDDDDD;\n      margin-bottom: 20px; }\n    .studio-callout hgroup p strong {\n      font-weight: 600;\n      color: #fff; }\n    .studio-callout hgroup .btn {\n      padding: 11px 20px;\n      font-size: 16px; }\n  .studio-callout img {\n    position: absolute;\n    top: 0;\n    right: 0;\n    width: 50% !important; }\n  @media (max-width: 1220px) {\n    .studio-callout hgroup {\n      padding: 40px 0 40px 40px; } }\n  @media (max-width: 768px) {\n    .studio-callout {\n      margin: 120px 0 0;\n      -ms-flex-direction: column-reverse;\n          flex-direction: column-reverse;\n      -ms-flex-align: center;\n          align-items: center; }\n      .studio-callout img {\n        width: 100% !important;\n        max-width: 475px;\n        position: relative;\n        margin-bottom: -100px;\n        margin-top: -60px;\n        position: relative;\n        z-index: 1; }\n      .studio-callout hgroup {\n        position: relative;\n        text-align: center;\n        padding: 40px;\n        z-index: 2; } }\n  @media (max-width: 480px) {\n    .studio-callout hgroup {\n      padding-left: 20px;\n      padding-right: 20px; }\n      .studio-callout hgroup p {\n        font-size: 16px; } }\n\n/*# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImNyZWF0b3Iuc2NzcyIsIl9mb250cy5zY3NzIiwiYm9vdHN0cmFwL19ub3JtYWxpemUuc2NzcyIsImNyZWF0b3IuY3NzIiwiYm9vdHN0cmFwL19wcmludC5zY3NzIiwiYm9vdHN0cmFwL19nbHlwaGljb25zLnNjc3MiLCJib290c3RyYXAvX3NjYWZmb2xkaW5nLnNjc3MiLCJib290c3RyYXAvbWl4aW5zL192ZW5kb3ItcHJlZml4ZXMuc2NzcyIsImJvb3RzdHJhcC9fdmFyaWFibGVzLnNjc3MiLCJib290c3RyYXAvbWl4aW5zL190YWItZm9jdXMuc2NzcyIsImJvb3RzdHJhcC9taXhpbnMvX2ltYWdlLnNjc3MiLCJib290c3RyYXAvX3R5cGUuc2NzcyIsImJvb3RzdHJhcC9taXhpbnMvX3RleHQtZW1waGFzaXMuc2NzcyIsImJvb3RzdHJhcC9taXhpbnMvX2JhY2tncm91bmQtdmFyaWFudC5zY3NzIiwiYm9vdHN0cmFwL21peGlucy9fY2xlYXJmaXguc2NzcyIsImJvb3RzdHJhcC9taXhpbnMvX3RleHQtb3ZlcmZsb3cuc2NzcyIsImJvb3RzdHJhcC9fY29kZS5zY3NzIiwiX3ZhcnMuc2NzcyIsImJvb3RzdHJhcC9fZ3JpZC5zY3NzIiwiYm9vdHN0cmFwL21peGlucy9fZ3JpZC5zY3NzIiwiYm9vdHN0cmFwL21peGlucy9fZ3JpZC1mcmFtZXdvcmsuc2NzcyIsImJvb3RzdHJhcC9fdGFibGVzLnNjc3MiLCJib290c3RyYXAvbWl4aW5zL190YWJsZS1yb3cuc2NzcyIsImJvb3RzdHJhcC9fZm9ybXMuc2NzcyIsImJvb3RzdHJhcC9taXhpbnMvX2Zvcm1zLnNjc3MiLCJib290c3RyYXAvX2J1dHRvbnMuc2NzcyIsImJvb3RzdHJhcC9taXhpbnMvX2J1dHRvbnMuc2NzcyIsImJvb3RzdHJhcC9taXhpbnMvX29wYWNpdHkuc2NzcyIsImJvb3RzdHJhcC9fY29tcG9uZW50LWFuaW1hdGlvbnMuc2NzcyIsImJvb3RzdHJhcC9fZHJvcGRvd25zLnNjc3MiLCJib290c3RyYXAvbWl4aW5zL19uYXYtZGl2aWRlci5zY3NzIiwiYm9vdHN0cmFwL21peGlucy9fcmVzZXQtZmlsdGVyLnNjc3MiLCJib290c3RyYXAvX2J1dHRvbi1ncm91cHMuc2NzcyIsImJvb3RzdHJhcC9taXhpbnMvX2JvcmRlci1yYWRpdXMuc2NzcyIsImJvb3RzdHJhcC9faW5wdXQtZ3JvdXBzLnNjc3MiLCJib290c3RyYXAvX25hdnMuc2NzcyIsImJvb3RzdHJhcC9fbmF2YmFyLnNjc3MiLCJib290c3RyYXAvbWl4aW5zL19uYXYtdmVydGljYWwtYWxpZ24uc2NzcyIsImJvb3RzdHJhcC9fbW9kYWxzLnNjc3MiLCJib290c3RyYXAvX3Rvb2x0aXAuc2NzcyIsImJvb3RzdHJhcC9fdXRpbGl0aWVzLnNjc3MiLCJib290c3RyYXAvbWl4aW5zL19jZW50ZXItYmxvY2suc2NzcyIsImJvb3RzdHJhcC9taXhpbnMvX2hpZGUtdGV4dC5zY3NzIiwiYm9vdHN0cmFwL19yZXNwb25zaXZlLXV0aWxpdGllcy5zY3NzIiwiYm9vdHN0cmFwL21peGlucy9fcmVzcG9uc2l2ZS12aXNpYmlsaXR5LnNjc3MiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBZUEsbUZBQVk7QUNmWixtRUFBWTtBQU9aO0VBQ0Usd0JBQXVCO0VBQ3ZCLDBPQUt3RDtFQUN4RCxvQkFBbUI7RUFDbkIsbUJBQWtCLEVBQUE7O0FBR3BCO0VBQ0Usb0JBQW1CO0VBQ25CLDZOQUc0RDtFQUM1RCxpQkFBZ0I7RUFDaEIseUJBQXdCLEVBQUE7O0FBRTFCO0VBQ0Usb0JBQW1CO0VBQ25CLDZPQUdnRTtFQUNoRSxpQkFBZ0I7RUFDaEIseUJBQXdCLEVBQUE7O0FBRTFCO0VBQ0Usb0JBQW1CO0VBQ25CLHlPQUcrRDtFQUMvRCxpQkFBZ0I7RUFDaEIseUJBQXdCLEVBQUE7O0FBRzFCO0VBQ0UscUJBQW9CO0VBQ3BCLG1CQUFtQjtFQUNuQixpQkFBZ0I7RUFDaEIseUJBQXdCO0VBQ3hCLGdNQUMwRCxFQUFBOztBQUU1RDtFQUNFLHFCQUFvQjtFQUNwQixtQkFBbUI7RUFDbkIsaUJBQWdCO0VBQ2hCLHlCQUF3QjtFQUN4Qiw4TEFDeUQsRUFBQTs7QUFHM0Q7RUFDRSxxQkFBb0I7RUFDcEIsbUJBQW1CO0VBQ25CLGlCQUFnQjtFQUNoQix5QkFBd0I7RUFDeEIsOExBQ3lELEVBQUE7O0FBRTNEO0VBQ0UscUJBQW9CO0VBQ3BCLG1CQUFtQjtFQUNuQixpQkFBZ0I7RUFDaEIseUJBQXdCO0VBQ3hCLDBNQUMrRCxFQUFBOztBQUdqRTtFQUNFLHFCQUFvQjtFQUNwQixtQkFBbUI7RUFDbkIsaUJBQWdCO0VBQ2hCLHlCQUF3QjtFQUN4QixrTUFDMkQsRUFBQTs7QUFFN0Q7RUFDRSxxQkFBb0I7RUFDcEIsbUJBQW1CO0VBQ25CLGlCQUFnQjtFQUNoQix5QkFBd0I7RUFDeEIsOE1BQ2lFLEVBQUE7O0FBR25FO0VBQ0UscUJBQW9CO0VBQ3BCLG1CQUFtQjtFQUNuQixpQkFBZ0I7RUFDaEIseUJBQXdCO0VBQ3hCLDBMQUN1RCxFQUFBOztBQUV6RDtFQUNFLHFCQUFvQjtFQUNwQixtQkFBbUI7RUFDbkIsaUJBQWdCO0VBQ2hCLHlCQUF3QjtFQUN4QixzTUFDNkQsRUFBQTs7QUFHL0Q7RUFDRSxxQkFBb0I7RUFDcEIsbUJBQW1CO0VBQ25CLGlCQUFnQjtFQUNoQix5QkFBd0I7RUFDeEIsb01BQzRELEVBQUE7O0FBRTlEO0VBQ0UscUJBQW9CO0VBQ3BCLG1CQUFtQjtFQUNuQixpQkFBZ0I7RUFDaEIseUJBQXdCO0VBQ3hCLGdOQUNrRSxFQUFBOztBQUdwRTtFQUNFLHFCQUFvQjtFQUNwQixtQkFBbUI7RUFDbkIsaUJBQWdCO0VBQ2hCLHlCQUF3QjtFQUN4Qiw0TEFDd0QsRUFBQTs7QUFFMUQ7RUFDRSxxQkFBb0I7RUFDcEIsbUJBQW1CO0VBQ25CLGlCQUFnQjtFQUNoQix5QkFBd0I7RUFDeEIsd01BQzhELEVBQUE7O0FBR2hFO0VBQ0UsOEJBQTZCO0VBQzdCLGlCQUFnQjtFQUNoQix5QkFBd0I7RUFDeEIsd0VBQWlDO0VBQ2pDLHNSQUVvRCxFQUFBOztBQUd0RDtFQUNFLDhCQUE2QjtFQUM3QixpQkFBZ0I7RUFDaEIseUJBQXdCO0VBQ3hCLHdFQUFpQztFQUNqQyxzUkFFb0QsRUFBQTs7QUN0S3RELDREQUE0RDtBQVE1RDtFQUNFLHdCQUF1QjtFQUN2QiwyQkFBMEI7RUFDMUIsK0JBQThCLEVBQy9COztBQU1EO0VBQ0UsVUFBUyxFQUNWOztBQVlEOzs7Ozs7Ozs7Ozs7O0VBYUUsZUFBYyxFQUNmOztBQU9EOzs7O0VBSUUsc0JBQXFCO0VBQ3JCLHlCQUF3QixFQUN6Qjs7QUFPRDtFQUNFLGNBQWE7RUFDYixVQUFTLEVBQ1Y7O0FDMEZEOztFRGpGRSxjQUFhLEVBQ2Q7O0FBU0Q7RUFDRSw4QkFBNkIsRUFDOUI7O0FBTUQ7O0VBRUUsV0FBVSxFQUNYOztBQVNEO0VBQ0UsMEJBQXlCLEVBQzFCOztBQU1EOztFQUVFLGtCQUFpQixFQUNsQjs7QUFNRDtFQUNFLG1CQUFrQixFQUNuQjs7QUFPRDtFQUNFLGVBQWM7RUFDZCxpQkFBZ0IsRUFDakI7O0FBTUQ7RUFDRSxpQkFBZ0I7RUFDaEIsWUFBVyxFQUNaOztBQU1EO0VBQ0UsZUFBYyxFQUNmOztBQU1EOztFQUVFLGVBQWM7RUFDZCxlQUFjO0VBQ2QsbUJBQWtCO0VBQ2xCLHlCQUF3QixFQUN6Qjs7QUFFRDtFQUNFLFlBQVcsRUFDWjs7QUFFRDtFQUNFLGdCQUFlLEVBQ2hCOztBQVNEO0VBQ0UsVUFBUyxFQUNWOztBQU1EO0VBQ0UsaUJBQWdCLEVBQ2pCOztBQVNEO0VBQ0UsaUJBQWdCLEVBQ2pCOztBQU1EO0VBRUUsd0JBQXVCO0VBQ3ZCLFVBQVMsRUFDVjs7QUFNRDtFQUNFLGVBQWMsRUFDZjs7QUFNRDs7OztFQUlFLGtDQUFpQztFQUNqQyxlQUFjLEVBQ2Y7O0FBaUJEOzs7OztFQUtFLGVBQWM7RUFDZCxjQUFhO0VBQ2IsVUFBUyxFQUNWOztBQU1EO0VBQ0Usa0JBQWlCLEVBQ2xCOztBQVNEOztFQUVFLHFCQUFvQixFQUNyQjs7QUFVRDs7OztFQUlFLDJCQUEwQjtFQUMxQixnQkFBZSxFQUNoQjs7QUFNRDs7RUFFRSxnQkFBZSxFQUNoQjs7QUFNRDs7RUFFRSxVQUFTO0VBQ1QsV0FBVSxFQUNYOztBQU9EO0VBQ0Usb0JBQW1CLEVBQ3BCOztBQVVEOztFQUVFLHVCQUFzQjtFQUN0QixXQUFVLEVBQ1g7O0FBUUQ7O0VBRUUsYUFBWSxFQUNiOztBQVFEO0VBQ0UsOEJBQTZCO0VBRzdCLHdCQUF1QixFQUN4Qjs7QUFRRDs7RUFFRSx5QkFBd0IsRUFDekI7O0FBTUQ7RUFDRSwwQkFBeUI7RUFDekIsY0FBYTtFQUNiLCtCQUE4QixFQUMvQjs7QUFPRDtFQUNFLFVBQVM7RUFDVCxXQUFVLEVBQ1g7O0FBTUQ7RUFDRSxlQUFjLEVBQ2Y7O0FBT0Q7RUFDRSxrQkFBaUIsRUFDbEI7O0FBU0Q7RUFDRSwwQkFBeUI7RUFDekIsa0JBQWlCLEVBQ2xCOztBQUVEOztFQUVFLFdBQVUsRUFDWDs7QUUxYUQscUZBQXFGO0FBT3JGO0VBQ0k7OztJQUdJLG1DQUFrQztJQUNsQyx1QkFBc0I7SUFDdEIsNEJBQTJCO0lBQzNCLDZCQUE0QixFQUMvQjtFQUVEOztJQUVJLDJCQUEwQixFQUM3QjtFQUVEO0lBQ0ksNkJBQTRCLEVBQy9CO0VBRUQ7SUFDSSw4QkFBNkIsRUFDaEM7RUFJRDs7SUFFSSxZQUFXLEVBQ2Q7RUFFRDs7SUFFSSx1QkFBc0I7SUFDdEIseUJBQXdCLEVBQzNCO0VBRUQ7SUFDSSw0QkFBMkIsRUFDOUI7RUFFRDs7SUFFSSx5QkFBd0IsRUFDM0I7RUZxSUw7SUVsSVEsMkJBQTBCLEVBQzdCO0VBRUQ7OztJQUdJLFdBQVU7SUFDVixVQUFTLEVBQ1o7RUFFRDs7SUFFSSx3QkFBdUIsRUFDMUI7RUFNRDtJQUNJLDRCQUEyQixFQUM5QjtFQUdEO0lBQ0ksY0FBYSxFQUNoQjtFQUNEOztJQUdRLGtDQUFpQyxFQUNwQztFQUVMO0lBQ0ksdUJBQXNCLEVBQ3pCO0VBRUQ7SUFDSSxxQ0FBb0MsRUFNdkM7SUFQRDs7TUFLUSxrQ0FBaUMsRUFDcEM7RUFFTDs7SUFHUSxrQ0FBaUMsRUFDcEMsRUFBQTs7QUM1RlQ7RUFDRSxvQ0FBbUM7RUFDbkMsZ0VBQWtKO0VBQ2xKLGtiQUkwTSxFQUFBOztBQUk1TTtFQUNFLG1CQUFrQjtFQUNsQixTQUFRO0VBQ1Isc0JBQXFCO0VBQ3JCLG9DQUFtQztFQUNuQyxtQkFBa0I7RUFDbEIsb0JBQW1CO0VBQ25CLGVBQWM7RUFDZCxvQ0FBbUM7RUFDbkMsbUNBQWtDLEVBQ25DOztBQUdEO0VBQStDLGVBQWMsRUFBSTs7QUFDakU7RUFBK0MsZUFBYyxFQUFJOztBQUNqRTs7RUFDK0MsaUJBQWdCLEVBQUk7O0FBQ25FO0VBQStDLGlCQUFnQixFQUFJOztBQUNuRTtFQUErQyxpQkFBZ0IsRUFBSTs7QUFDbkU7RUFBK0MsaUJBQWdCLEVBQUk7O0FBQ25FO0VBQStDLGlCQUFnQixFQUFJOztBQUNuRTtFQUErQyxpQkFBZ0IsRUFBSTs7QUFDbkU7RUFBK0MsaUJBQWdCLEVBQUk7O0FBQ25FO0VBQStDLGlCQUFnQixFQUFJOztBQUNuRTtFQUErQyxpQkFBZ0IsRUFBSTs7QUFDbkU7RUFBK0MsaUJBQWdCLEVBQUk7O0FBQ25FO0VBQStDLGlCQUFnQixFQUFJOztBQUNuRTtFQUErQyxpQkFBZ0IsRUFBSTs7QUFDbkU7RUFBK0MsaUJBQWdCLEVBQUk7O0FBQ25FO0VBQStDLGlCQUFnQixFQUFJOztBQUNuRTtFQUErQyxpQkFBZ0IsRUFBSTs7QUFDbkU7RUFBK0MsaUJBQWdCLEVBQUk7O0FBQ25FO0VBQStDLGlCQUFnQixFQUFJOztBQUNuRTtFQUErQyxpQkFBZ0IsRUFBSTs7QUFDbkU7RUFBK0MsaUJBQWdCLEVBQUk7O0FBQ25FO0VBQStDLGlCQUFnQixFQUFJOztBQUNuRTtFQUErQyxpQkFBZ0IsRUFBSTs7QUFDbkU7RUFBK0MsaUJBQWdCLEVBQUk7O0FBQ25FO0VBQStDLGlCQUFnQixFQUFJOztBQUNuRTtFQUErQyxpQkFBZ0IsRUFBSTs7QUFDbkU7RUFBK0MsaUJBQWdCLEVBQUk7O0FBQ25FO0VBQStDLGlCQUFnQixFQUFJOztBQUNuRTtFQUErQyxpQkFBZ0IsRUFBSTs7QUFDbkU7RUFBK0MsaUJBQWdCLEVBQUk7O0FBQ25FO0VBQStDLGlCQUFnQixFQUFJOztBQUNuRTtFQUErQyxpQkFBZ0IsRUFBSTs7QUFDbkU7RUFBK0MsaUJBQWdCLEVBQUk7O0FBQ25FO0VBQStDLGlCQUFnQixFQUFJOztBQUNuRTtFQUErQyxpQkFBZ0IsRUFBSTs7QUFDbkU7RUFBK0MsaUJBQWdCLEVBQUk7O0FBQ25FO0VBQStDLGlCQUFnQixFQUFJOztBQUNuRTtFQUErQyxpQkFBZ0IsRUFBSTs7QUFDbkU7RUFBK0MsaUJBQWdCLEVBQUk7O0FBQ25FO0VBQStDLGlCQUFnQixFQUFJOztBQUNuRTtFQUErQyxpQkFBZ0IsRUFBSTs7QUFDbkU7RUFBK0MsaUJBQWdCLEVBQUk7O0FBQ25FO0VBQStDLGlCQUFnQixFQUFJOztBQUNuRTtFQUErQyxpQkFBZ0IsRUFBSTs7QUFDbkU7RUFBK0MsaUJBQWdCLEVBQUk7O0FBQ25FO0VBQStDLGlCQUFnQixFQUFJOztBQUNuRTtFQUErQyxpQkFBZ0IsRUFBSTs7QUFDbkU7RUFBK0MsaUJBQWdCLEVBQUk7O0FBQ25FO0VBQStDLGlCQUFnQixFQUFJOztBQUNuRTtFQUErQyxpQkFBZ0IsRUFBSTs7QUFDbkU7RUFBK0MsaUJBQWdCLEVBQUk7O0FBQ25FO0VBQStDLGlCQUFnQixFQUFJOztBQUNuRTtFQUErQyxpQkFBZ0IsRUFBSTs7QUFDbkU7RUFBK0MsaUJBQWdCLEVBQUk7O0FBQ25FO0VBQStDLGlCQUFnQixFQUFJOztBQUNuRTtFQUErQyxpQkFBZ0IsRUFBSTs7QUFDbkU7RUFBK0MsaUJBQWdCLEVBQUk7O0FBQ25FO0VBQStDLGlCQUFnQixFQUFJOztBQUNuRTtFQUErQyxpQkFBZ0IsRUFBSTs7QUFDbkU7RUFBK0MsaUJBQWdCLEVBQUk7O0FBQ25FO0VBQStDLGlCQUFnQixFQUFJOztBQUNuRTtFQUErQyxpQkFBZ0IsRUFBSTs7QUFDbkU7RUFBK0MsaUJBQWdCLEVBQUk7O0FBQ25FO0VBQStDLGlCQUFnQixFQUFJOztBQUNuRTtFQUErQyxpQkFBZ0IsRUFBSTs7QUFDbkU7RUFBK0MsaUJBQWdCLEVBQUk7O0FBQ25FO0VBQStDLGlCQUFnQixFQUFJOztBQUNuRTtFQUErQyxpQkFBZ0IsRUFBSTs7QUFDbkU7RUFBK0MsaUJBQWdCLEVBQUk7O0FBQ25FO0VBQStDLGlCQUFnQixFQUFJOztBQUNuRTtFQUErQyxpQkFBZ0IsRUFBSTs7QUFDbkU7RUFBK0MsaUJBQWdCLEVBQUk7O0FBQ25FO0VBQStDLGlCQUFnQixFQUFJOztBQUNuRTtFQUErQyxpQkFBZ0IsRUFBSTs7QUFDbkU7RUFBK0MsaUJBQWdCLEVBQUk7O0FBQ25FO0VBQStDLGlCQUFnQixFQUFJOztBQUNuRTtFQUErQyxpQkFBZ0IsRUFBSTs7QUFDbkU7RUFBK0MsaUJBQWdCLEVBQUk7O0FBQ25FO0VBQStDLGlCQUFnQixFQUFJOztBQUNuRTtFQUErQyxpQkFBZ0IsRUFBSTs7QUFDbkU7RUFBK0MsaUJBQWdCLEVBQUk7O0FBQ25FO0VBQStDLGlCQUFnQixFQUFJOztBQUNuRTtFQUErQyxpQkFBZ0IsRUFBSTs7QUFDbkU7RUFBK0MsaUJBQWdCLEVBQUk7O0FBQ25FO0VBQStDLGlCQUFnQixFQUFJOztBQUNuRTtFQUErQyxpQkFBZ0IsRUFBSTs7QUFDbkU7RUFBK0MsaUJBQWdCLEVBQUk7O0FBQ25FO0VBQStDLGlCQUFnQixFQUFJOztBQUNuRTtFQUErQyxpQkFBZ0IsRUFBSTs7QUFDbkU7RUFBK0MsaUJBQWdCLEVBQUk7O0FBQ25FO0VBQStDLGlCQUFnQixFQUFJOztBQUNuRTtFQUErQyxpQkFBZ0IsRUFBSTs7QUFDbkU7RUFBK0MsaUJBQWdCLEVBQUk7O0FBQ25FO0VBQStDLGlCQUFnQixFQUFJOztBQUNuRTtFQUErQyxpQkFBZ0IsRUFBSTs7QUFDbkU7RUFBK0MsaUJBQWdCLEVBQUk7O0FBQ25FO0VBQStDLGlCQUFnQixFQUFJOztBQUNuRTtFQUErQyxpQkFBZ0IsRUFBSTs7QUFDbkU7RUFBK0MsaUJBQWdCLEVBQUk7O0FBQ25FO0VBQStDLGlCQUFnQixFQUFJOztBQUNuRTtFQUErQyxpQkFBZ0IsRUFBSTs7QUFDbkU7RUFBK0MsaUJBQWdCLEVBQUk7O0FBQ25FO0VBQStDLGlCQUFnQixFQUFJOztBQUNuRTtFQUErQyxpQkFBZ0IsRUFBSTs7QUFDbkU7RUFBK0MsaUJBQWdCLEVBQUk7O0FBQ25FO0VBQStDLGlCQUFnQixFQUFJOztBQUNuRTtFQUErQyxpQkFBZ0IsRUFBSTs7QUFDbkU7RUFBK0MsaUJBQWdCLEVBQUk7O0FBQ25FO0VBQStDLGlCQUFnQixFQUFJOztBQUNuRTtFQUErQyxpQkFBZ0IsRUFBSTs7QUFDbkU7RUFBK0MsaUJBQWdCLEVBQUk7O0FBQ25FO0VBQStDLGlCQUFnQixFQUFJOztBQUNuRTtFQUErQyxpQkFBZ0IsRUFBSTs7QUFDbkU7RUFBK0MsaUJBQWdCLEVBQUk7O0FBQ25FO0VBQStDLGlCQUFnQixFQUFJOztBQUNuRTtFQUErQyxpQkFBZ0IsRUFBSTs7QUFDbkU7RUFBK0MsaUJBQWdCLEVBQUk7O0FBQ25FO0VBQStDLGlCQUFnQixFQUFJOztBQUNuRTtFQUErQyxpQkFBZ0IsRUFBSTs7QUFDbkU7RUFBK0MsaUJBQWdCLEVBQUk7O0FBQ25FO0VBQStDLGlCQUFnQixFQUFJOztBQUNuRTtFQUErQyxpQkFBZ0IsRUFBSTs7QUFDbkU7RUFBK0MsaUJBQWdCLEVBQUk7O0FBQ25FO0VBQStDLGlCQUFnQixFQUFJOztBQUNuRTtFQUErQyxpQkFBZ0IsRUFBSTs7QUFDbkU7RUFBK0MsaUJBQWdCLEVBQUk7O0FBQ25FO0VBQStDLGlCQUFnQixFQUFJOztBQUNuRTtFQUErQyxpQkFBZ0IsRUFBSTs7QUFDbkU7RUFBK0MsaUJBQWdCLEVBQUk7O0FBQ25FO0VBQStDLGlCQUFnQixFQUFJOztBQUNuRTtFQUErQyxpQkFBZ0IsRUFBSTs7QUFDbkU7RUFBK0MsaUJBQWdCLEVBQUk7O0FBQ25FO0VBQStDLGlCQUFnQixFQUFJOztBQUNuRTtFQUErQyxpQkFBZ0IsRUFBSTs7QUFDbkU7RUFBK0MsaUJBQWdCLEVBQUk7O0FBQ25FO0VBQStDLGlCQUFnQixFQUFJOztBQUNuRTtFQUErQyxpQkFBZ0IsRUFBSTs7QUFDbkU7RUFBK0MsaUJBQWdCLEVBQUk7O0FBQ25FO0VBQStDLGlCQUFnQixFQUFJOztBQUNuRTtFQUErQyxpQkFBZ0IsRUFBSTs7QUFDbkU7RUFBK0MsaUJBQWdCLEVBQUk7O0FBQ25FO0VBQStDLGlCQUFnQixFQUFJOztBQUNuRTtFQUErQyxpQkFBZ0IsRUFBSTs7QUFDbkU7RUFBK0MsaUJBQWdCLEVBQUk7O0FBQ25FO0VBQStDLGlCQUFnQixFQUFJOztBQUNuRTtFQUErQyxpQkFBZ0IsRUFBSTs7QUFDbkU7RUFBK0MsaUJBQWdCLEVBQUk7O0FBQ25FO0VBQStDLGlCQUFnQixFQUFJOztBQUNuRTtFQUErQyxpQkFBZ0IsRUFBSTs7QUFDbkU7RUFBK0MsaUJBQWdCLEVBQUk7O0FBQ25FO0VBQStDLGlCQUFnQixFQUFJOztBQUNuRTtFQUErQyxpQkFBZ0IsRUFBSTs7QUFDbkU7RUFBK0MsaUJBQWdCLEVBQUk7O0FBQ25FO0VBQStDLGlCQUFnQixFQUFJOztBQUNuRTtFQUErQyxpQkFBZ0IsRUFBSTs7QUFDbkU7RUFBK0MsaUJBQWdCLEVBQUk7O0FBQ25FO0VBQStDLGlCQUFnQixFQUFJOztBQUNuRTtFQUErQyxpQkFBZ0IsRUFBSTs7QUFDbkU7RUFBK0MsaUJBQWdCLEVBQUk7O0FBQ25FO0VBQStDLGlCQUFnQixFQUFJOztBQUNuRTtFQUErQyxpQkFBZ0IsRUFBSTs7QUFDbkU7RUFBK0MsaUJBQWdCLEVBQUk7O0FBQ25FO0VBQStDLGlCQUFnQixFQUFJOztBQUNuRTtFQUErQyxpQkFBZ0IsRUFBSTs7QUFDbkU7RUFBK0MsaUJBQWdCLEVBQUk7O0FBQ25FO0VBQStDLGlCQUFnQixFQUFJOztBQUNuRTtFQUErQyxpQkFBZ0IsRUFBSTs7QUFDbkU7RUFBK0MsaUJBQWdCLEVBQUk7O0FBQ25FO0VBQStDLGlCQUFnQixFQUFJOztBQUNuRTtFQUErQyxpQkFBZ0IsRUFBSTs7QUFDbkU7RUFBK0MsaUJBQWdCLEVBQUk7O0FBQ25FO0VBQStDLGlCQUFnQixFQUFJOztBQUNuRTtFQUErQyxpQkFBZ0IsRUFBSTs7QUFDbkU7RUFBK0MsaUJBQWdCLEVBQUk7O0FBQ25FO0VBQStDLGlCQUFnQixFQUFJOztBQUNuRTtFQUErQyxpQkFBZ0IsRUFBSTs7QUFDbkU7RUFBK0MsaUJBQWdCLEVBQUk7O0FBQ25FO0VBQStDLGlCQUFnQixFQUFJOztBQUNuRTtFQUErQyxpQkFBZ0IsRUFBSTs7QUFDbkU7RUFBK0MsaUJBQWdCLEVBQUk7O0FBQ25FO0VBQStDLGlCQUFnQixFQUFJOztBQUNuRTtFQUErQyxpQkFBZ0IsRUFBSTs7QUFDbkU7RUFBK0MsaUJBQWdCLEVBQUk7O0FBQ25FO0VBQStDLGlCQUFnQixFQUFJOztBQUNuRTtFQUErQyxpQkFBZ0IsRUFBSTs7QUFDbkU7RUFBK0MsaUJBQWdCLEVBQUk7O0FBQ25FO0VBQStDLGlCQUFnQixFQUFJOztBQUNuRTtFQUErQyxpQkFBZ0IsRUFBSTs7QUFDbkU7RUFBK0MsaUJBQWdCLEVBQUk7O0FBQ25FO0VBQStDLGlCQUFnQixFQUFJOztBQUNuRTtFQUErQyxpQkFBZ0IsRUFBSTs7QUFDbkU7RUFBK0MsaUJBQWdCLEVBQUk7O0FBQ25FO0VBQStDLGlCQUFnQixFQUFJOztBQUNuRTtFQUErQyxpQkFBZ0IsRUFBSTs7QUFDbkU7RUFBK0MsaUJBQWdCLEVBQUk7O0FBQ25FO0VBQStDLGlCQUFnQixFQUFJOztBQUNuRTtFQUErQyxpQkFBZ0IsRUFBSTs7QUFDbkU7RUFBK0MsaUJBQWdCLEVBQUk7O0FBQ25FO0VBQStDLGlCQUFnQixFQUFJOztBQUNuRTtFQUErQyxpQkFBZ0IsRUFBSTs7QUFDbkU7RUFBK0MsaUJBQWdCLEVBQUk7O0FBQ25FO0VBQStDLGlCQUFnQixFQUFJOztBQUNuRTtFQUErQyxpQkFBZ0IsRUFBSTs7QUFDbkU7RUFBK0MsaUJBQWdCLEVBQUk7O0FBQ25FO0VBQStDLGlCQUFnQixFQUFJOztBQUNuRTtFQUErQyxpQkFBZ0IsRUFBSTs7QUFTbkU7RUFBK0MsaUJBQWdCLEVBQUk7O0FBQ25FO0VBQStDLGlCQUFnQixFQUFJOztBQUNuRTtFQUErQyxpQkFBZ0IsRUFBSTs7QUFDbkU7RUFBK0MsaUJBQWdCLEVBQUk7O0FBQ25FO0VBQStDLGlCQUFnQixFQUFJOztBQUNuRTtFQUErQyxpQkFBZ0IsRUFBSTs7QUFDbkU7RUFBK0MsaUJBQWdCLEVBQUk7O0FBQ25FO0VBQStDLGlCQUFnQixFQUFJOztBQUNuRTtFQUErQyxpQkFBZ0IsRUFBSTs7QUFDbkU7RUFBK0MsaUJBQWdCLEVBQUk7O0FBQ25FO0VBQStDLGlCQUFnQixFQUFJOztBQUNuRTtFQUErQyxpQkFBZ0IsRUFBSTs7QUFDbkU7RUFBK0MsaUJBQWdCLEVBQUk7O0FBQ25FO0VBQStDLGlCQUFnQixFQUFJOztBQUNuRTtFQUErQyxpQkFBZ0IsRUFBSTs7QUFDbkU7RUFBK0MsaUJBQWdCLEVBQUk7O0FBQ25FO0VBQStDLGlCQUFnQixFQUFJOztBQUNuRTtFQUErQyxpQkFBZ0IsRUFBSTs7QUFDbkU7RUFBK0MsaUJBQWdCLEVBQUk7O0FBQ25FO0VBQStDLGlCQUFnQixFQUFJOztBQUNuRTtFQUErQyxpQkFBZ0IsRUFBSTs7QUFDbkU7RUFBK0MsaUJBQWdCLEVBQUk7O0FBQ25FO0VBQStDLGlCQUFnQixFQUFJOztBQUNuRTtFQUErQyxpQkFBZ0IsRUFBSTs7QUFDbkU7RUFBK0MsaUJBQWdCLEVBQUk7O0FBQ25FO0VBQStDLGlCQUFnQixFQUFJOztBQUNuRTtFQUErQyxpQkFBZ0IsRUFBSTs7QUFDbkU7RUFBK0MsaUJBQWdCLEVBQUk7O0FBQ25FO0VBQStDLGlCQUFnQixFQUFJOztBQUNuRTtFQUErQyxpQkFBZ0IsRUFBSTs7QUFDbkU7RUFBK0MsaUJBQWdCLEVBQUk7O0FBQ25FO0VBQStDLGlCQUFnQixFQUFJOztBQUNuRTtFQUErQyxpQkFBZ0IsRUFBSTs7QUFDbkU7RUFBK0MsaUJBQWdCLEVBQUk7O0FBQ25FO0VBQStDLGlCQUFnQixFQUFJOztBQUNuRTtFQUErQyxpQkFBZ0IsRUFBSTs7QUFDbkU7RUFBK0MsaUJBQWdCLEVBQUk7O0FBQ25FO0VBQStDLGlCQUFnQixFQUFJOztBQUNuRTtFQUErQyxpQkFBZ0IsRUFBSTs7QUFDbkU7RUFBK0MsaUJBQWdCLEVBQUk7O0FBQ25FO0VBQStDLGlCQUFnQixFQUFJOztBQUNuRTtFQUErQyxpQkFBZ0IsRUFBSTs7QUFDbkU7RUFBK0MsaUJBQWdCLEVBQUk7O0FBQ25FO0VBQStDLGlCQUFnQixFQUFJOztBQUNuRTtFQUErQyxpQkFBZ0IsRUFBSTs7QUFDbkU7RUFBK0MsaUJBQWdCLEVBQUk7O0FBQ25FO0VBQStDLGlCQUFnQixFQUFJOztBQUNuRTtFQUErQyxpQkFBZ0IsRUFBSTs7QUFDbkU7RUFBK0MsaUJBQWdCLEVBQUk7O0FBQ25FO0VBQStDLGlCQUFnQixFQUFJOztBQUNuRTtFQUErQyxpQkFBZ0IsRUFBSTs7QUFDbkU7RUFBK0MsaUJBQWdCLEVBQUk7O0FBQ25FO0VBQStDLGlCQUFnQixFQUFJOztBQUNuRTtFQUErQyxpQkFBZ0IsRUFBSTs7QUFDbkU7RUFBK0MsaUJBQWdCLEVBQUk7O0FBQ25FO0VBQStDLGlCQUFnQixFQUFJOztBQ3RTbkU7RUNrRVUsdUJEakVzQixFQUMvQjs7QUFDRDs7RUMrRFUsdUJEN0RzQixFQUMvQjs7QUpSRDtFSWNFLGdCQUFlO0VBQ2YsOENBQTBDLEVBQzNDOztBSk5EO0VJU0UsNERFa0JzRTtFRmpCdEUsZ0JFdUI0QjtFRnRCNUIseUJFa0NtQztFRmpDbkMsZUVsQitDO0VGbUIvQyx1QkVGMEIsRUZHM0I7O0FBR0Q7Ozs7RUFJRSxxQkFBb0I7RUFDcEIsbUJBQWtCO0VBQ2xCLHFCQUFvQixFQUNyQjs7QUo4Q0Q7RUl4Q0UsZUUvQjJDO0VGZ0MzQyxzQkFBcUIsRUFXdEI7RUFiRDtJQU1JLGVFakI0QztJRmtCNUMsMkJFaEI2QixFRmlCOUI7RUFSSDtJRzNDRSxxQkFBb0I7SUFFcEIsMkNBQTBDO0lBQzFDLHFCQUFvQixFSG9EbkI7O0FKK0lIO0VJcklFLFVBQVMsRUFDVjs7QUppSEQ7RUkzR0UsdUJBQXNCLEVBQ3ZCOztBQUdEO0VJdkVFLGVBRG1DO0VBRW5DLGdCQUFlO0VBQ2YsYUFBWSxFSnVFYjs7QUFHRDtFQUNFLG1CRXdCNkIsRUZ2QjlCOztBQUtEO0VBQ0UsYUUwb0IrQjtFRnpvQi9CLHlCRS9CbUM7RUZnQ25DLHVCRWxFMEI7RUZtRTFCLHVCRTJvQmdDO0VGMW9CaEMsbUJFWTZCO0VEOEVyQixpQ0R6RitCO0VJekZ2QyxzQko0Rm9DO0VJM0ZwQyxnQkFBZTtFQUNmLGFBQVksRUoyRmI7O0FBR0Q7RUFDRSxtQkFBa0IsRUFDbkI7O0FKdUdEO0VJakdFLGlCRWhEb0U7RUZpRHBFLG9CRWpEb0U7RUZrRHBFLFVBQVM7RUFDVCw4QkVyR2lELEVGc0dsRDs7QUFPRDtFQUNFLG1CQUFrQjtFQUNsQixXQUFVO0VBQ1YsWUFBVztFQUNYLGFBQVk7RUFDWixXQUFVO0VBQ1YsaUJBQWdCO0VBQ2hCLHVCQUFtQjtFQUNuQixVQUFTLEVBQ1Y7O0FBTUQ7RUFHSSxpQkFBZ0I7RUFDaEIsWUFBVztFQUNYLGFBQVk7RUFDWixVQUFTO0VBQ1Qsa0JBQWlCO0VBQ2pCLFdBQVUsRUFDWDs7QUh1bENIO0VHM2tDRSxnQkFBZSxFQUNoQjs7QUt6SkQ7O0VBRUUscUJIMEQrQjtFR3pEL0IsaUJIMEQyQjtFR3pEM0IsaUJIMEQyQjtFR3pEM0IsZUgwRCtCLEVHbERoQztFQWJEOzs7Ozs7Ozs7Ozs7OztJQVNJLG9CQUFtQjtJQUNuQixlQUFjO0lBQ2QsZUhMK0MsRUdNaEQ7O0FBR0g7OztFQUdFLGlCSHVDb0U7RUd0Q3BFLG9CQUEwQyxFQU0zQztFQVZEOzs7Ozs7Ozs7SUFRSSxlQUFjLEVBQ2Y7O0FBRUg7OztFQUdFLGlCQUF1QztFQUN2QyxvQkFBMEMsRUFNM0M7RUFWRDs7Ozs7Ozs7O0lBUUksZUFBYyxFQUNmOztBQUdIO0VBQVUsZ0JIUzhDLEVHVGxCOztBQUN0QztFQUFVLGdCSFMrQyxFR1RuQjs7QUFDdEM7RUFBVSxnQkhTNkMsRUdUakI7O0FBQ3RDO0VBQVUsZ0JIUzhDLEVHVGxCOztBQUN0QztFQUFVLGdCSENvQixFR0RROztBQUN0QztFQUFVLGdCSFM4QyxFR1RsQjs7QUFNdEM7RUFDRSxpQkFBdUMsRUFDeEM7O0FBRUQ7RUFDRSxvQkhHb0U7RUdGcEUsZ0JBQTBDO0VBQzFDLGlCQUFnQjtFQUNoQixpQkFBZ0IsRUFLakI7RUFIQztJQU5GO01BT0ksZ0JBQWtDLEVBRXJDLEVBQUE7O0FBT0Q7O0VBRUUsZUFBNkQsRUFDOUQ7O0FBRUQ7O0VBRUUsMEJIc2FzQztFR3JhdEMsY0FBYSxFQUNkOztBQUdEO0VBQXVCLGlCQUFnQixFQUFJOztBQUMzQztFQUF1QixrQkFBaUIsRUFBSTs7QUFDNUM7RUFBdUIsbUJBQWtCLEVBQUk7O0FBQzdDO0VBQXVCLG9CQUFtQixFQUFJOztBQUM5QztFQUF1QixvQkFBbUIsRUFBSTs7QUFHOUM7RUFBdUIsMEJBQXlCLEVBQUk7O0FBQ3BEO0VBQXVCLDBCQUF5QixFQUFJOztBQUNwRDtFQUF1QiwyQkFBMEIsRUFBSTs7QUFHckQ7RUFDRSxlSHhGaUQsRUd5RmxEOztBQ25HQztFQUNFLGVKWXlDLEVJWDFDOztBQUNEO0VBQ0UsZUFBMEIsRUFDM0I7O0FBTEQ7RUFDRSxlSjRlb0MsRUkzZXJDOztBQUNEO0VBQ0UsZUFBMEIsRUFDM0I7O0FBTEQ7RUFDRSxlSmdmb0MsRUkvZXJDOztBQUNEO0VBQ0UsZUFBMEIsRUFDM0I7O0FBTEQ7RUFDRSxlSm9mb0MsRUluZnJDOztBQUNEO0VBQ0UsZUFBMEIsRUFDM0I7O0FBTEQ7RUFDRSxlSndmb0MsRUl2ZnJDOztBQUNEO0VBQ0UsZUFBMEIsRUFDM0I7O0FENkdIO0VBR0UsWUFBVyxFQUNaOztBQUpEO0VFakhJLDBCTFl5QyxFS1gxQzs7QUFDRDtFQUNFLDBCQUFxQyxFQUN0Qzs7QUFMRDtFQUNFLDBCTDZlb0MsRUs1ZXJDOztBQUNEO0VBQ0UsMEJBQXFDLEVBQ3RDOztBQUxEO0VBQ0UsMEJMaWZvQyxFS2hmckM7O0FBQ0Q7RUFDRSwwQkFBcUMsRUFDdEM7O0FBTEQ7RUFDRSwwQkxxZm9DLEVLcGZyQzs7QUFDRDtFQUNFLDBCQUFxQyxFQUN0Qzs7QUFMRDtFQUNFLDBCTHlmb0MsRUt4ZnJDOztBQUNEO0VBQ0UsMEJBQXFDLEVBQ3RDOztBRmdJSDtFQUNFLG9CQUFpRDtFQUNqRCxvQkgxRW9FO0VHMkVwRSxpQ0g3SGlELEVHOEhsRDs7QUFPRDs7RUFFRSxjQUFhO0VBQ2Isb0JBQTBDLEVBSzNDO0VBUkQ7Ozs7SUFNSSxpQkFBZ0IsRUFDakI7O0FBV0g7RUFKRSxnQkFBZTtFQUNmLGlCQUFnQixFQUtqQjs7QUFJRDtFQVZFLGdCQUFlO0VBQ2YsaUJBQWdCO0VBV2hCLGtCQUFpQixFQU9sQjtFQVREO0lBS0ksc0JBQXFCO0lBQ3JCLGtCQUFpQjtJQUNqQixtQkFBa0IsRUFDbkI7O0FBSUg7RUFDRSxjQUFhO0VBQ2Isb0JIekhvRSxFRzBIckU7O0FBQ0Q7O0VBRUUseUJIL0htQyxFR2dJcEM7O0FBQ0Q7RUFDRSxrQkFBaUIsRUFDbEI7O0FBQ0Q7RUFDRSxlQUFjLEVBQ2Y7O0FHeExDO0VBRUUsYUFBWTtFQUNaLGVBQWMsRUFDZjs7QUFDRDtFQUNFLFlBQVcsRUFDWjs7QUg2TEQ7RUFMRjtJQU9NLFlBQVc7SUFDWCxhQUFtQztJQUNuQyxZQUFXO0lBQ1gsa0JBQWlCO0lJbE5yQixpQkFBZ0I7SUFDaEIsd0JBQXVCO0lBQ3ZCLG9CQUFtQixFSmtOaEI7RUFaTDtJQWNNLG1CSHFuQjZCLEVHcG5COUIsRUFBQTs7QUFTTDs7RUFHRSxhQUFZO0VBQ1osa0NIMU5pRCxFRzJObEQ7O0FBQ0Q7RUFDRSxlQUFjLEVBRWY7O0FBR0Q7RUFDRSxtQkhoTG9FO0VHaUxwRSxpQkhqTG9FO0VHa0xwRSxrQkhzbUJvRDtFR3JtQnBELCtCSHJPaUQsRUc2UGxEO0VBNUJEOzs7SUFVTSxpQkFBZ0IsRUFDakI7RUFYTDs7O0lBbUJJLGVBQWM7SUFDZCxlQUFjO0lBQ2QseUJIdE1pQztJR3VNakMsZUh4UCtDLEVHNlBoRDtJQTNCSDs7O01BeUJNLHVCQUFzQixFQUN2Qjs7QUFPTDs7RUFFRSxvQkFBbUI7RUFDbkIsZ0JBQWU7RUFDZixnQ0h0UWlEO0VHdVFqRCxlQUFjO0VBQ2Qsa0JBQWlCLEVBV2xCO0VBakJEOzs7Ozs7SUFZZSxZQUFXLEVBQUk7RUFaOUI7Ozs7OztJQWNNLHVCQUFzQixFQUN2Qjs7QUFLTDtFQUNFLG9CSHJPb0U7RUdzT3BFLG1CQUFrQjtFQUNsQix5Qkh6T21DLEVHME9wQzs7QVRyRUQ7Ozs7RWMxTkUsOEVDTnNGLEVET3ZGOztBQUdEO0VBQ0UsaUJBQWdCO0VBQ2hCLGVBQWM7RUFDZCxlUjZ5Qm1DO0VRNXlCbkMsNkJSNnlCc0M7RVE1eUJ0QyxtQlIwRjZCLEVRekY5Qjs7QUFHRDtFQUNFLGlCQUFnQjtFQUNoQixlQUFjO0VBQ2QsWVJ1eUJnQztFUXR5QmhDLHVCUnV5QmdDO0VRdHlCaEMsbUJSbUY2QjtFUWxGN0IsK0NBQTBDLEVBUTNDO0VBZEQ7SUFTSSxXQUFVO0lBQ1YsZ0JBQWU7SUFDZixrQkFBaUI7SUFDakIsaUJBQWdCLEVBQ2pCOztBZHdMSDtFY25MRSxlQUFjO0VBQ2QsZUFBMEM7RUFDMUMsaUJBQXVDO0VBQ3ZDLGdCQUFnQztFQUNoQyx5QlJrQm1DO0VRakJuQyxzQkFBcUI7RUFDckIsc0JBQXFCO0VBQ3JCLGVScEMrQztFUXFDL0MsMEJSbXhCbUM7RVFseEJuQyx1QlJveEJnQztFUW54QmhDLG1CUjBENkIsRVEvQzlCO0VBdEJEO0lBZUksV0FBVTtJQUNWLG1CQUFrQjtJQUNsQixlQUFjO0lBQ2Qsc0JBQXFCO0lBQ3JCLDhCQUE2QjtJQUM3QixpQkFBZ0IsRUFDakI7O0FBSUg7RUFDRSxrQlJxd0JpQztFUXB3QmpDLG1CQUFrQixFQUNuQjs7QUUzREQ7RUNIRSxtQkFBa0I7RUFDbEIsa0JBQWlCO0VBQ2pCLG1CQUE0QjtFQUM1QixvQkFBNEIsRURZN0I7RUpSQztJQUVFLGFBQVk7SUFDWixlQUFjLEVBQ2Y7RUFDRDtJQUNFLFlBQVcsRUFDWjtFSVJEO0lBSEY7TUFJSSxhVnNVdUQsRVU5VDFELEVBQUE7RUFOQztJQU5GO01BT0ksYVZ3VXVELEVVblUxRCxFQUFBO0VBSEM7SUFURjtNQVVJLGNWMFV3RCxFVXhVM0QsRUFBQTs7QUFRRDtFQ3ZCRSxtQkFBa0I7RUFDbEIsa0JBQWlCO0VBQ2pCLG1CQUE0QjtFQUM1QixvQkFBNEIsRURzQjdCO0VKbEJDO0lBRUUsYUFBWTtJQUNaLGVBQWMsRUFDZjtFQUNEO0lBQ0UsWUFBVyxFQUNaOztBSWtCSDtFQ3ZCRSxtQkFBNEI7RUFDNUIsb0JBQTRCLEVEd0I3QjtFSjNCQztJQUVFLGFBQVk7SUFDWixlQUFjLEVBQ2Y7RUFDRDtJQUNFLFlBQVcsRUFDWjs7QU1WRDtFQUNFLG1CQUFrQjtFQUVsQixnQkFBZTtFQUVmLG1CQUF1QztFQUN2QyxvQkFBdUMsRUFDeEM7O0FBU0Q7RUFDRSxZQUFXLEVBQ1o7O0FBTUM7RUFDRSxxQkFBMkMsRUFDNUM7O0FBRkQ7RUFDRSxzQkFBMkMsRUFDNUM7O0FBRkQ7RUFDRSxXQUEyQyxFQUM1Qzs7QUFGRDtFQUNFLHNCQUEyQyxFQUM1Qzs7QUFGRDtFQUNFLHNCQUEyQyxFQUM1Qzs7QUFGRDtFQUNFLFdBQTJDLEVBQzVDOztBQUZEO0VBQ0Usc0JBQTJDLEVBQzVDOztBQUZEO0VBQ0Usc0JBQTJDLEVBQzVDOztBQUZEO0VBQ0UsV0FBMkMsRUFDNUM7O0FBRkQ7RUFDRSxzQkFBMkMsRUFDNUM7O0FBRkQ7RUFDRSxzQkFBMkMsRUFDNUM7O0FBRkQ7RUFDRSxZQUEyQyxFQUM1Qzs7QUFrQkQ7RUFDRSxZQUFXLEVBQ1o7O0FBUEQ7RUFDRSxxQkFBMkMsRUFDNUM7O0FBRkQ7RUFDRSxzQkFBMkMsRUFDNUM7O0FBRkQ7RUFDRSxXQUEyQyxFQUM1Qzs7QUFGRDtFQUNFLHNCQUEyQyxFQUM1Qzs7QUFGRDtFQUNFLHNCQUEyQyxFQUM1Qzs7QUFGRDtFQUNFLFdBQTJDLEVBQzVDOztBQUZEO0VBQ0Usc0JBQTJDLEVBQzVDOztBQUZEO0VBQ0Usc0JBQTJDLEVBQzVDOztBQUZEO0VBQ0UsV0FBMkMsRUFDNUM7O0FBRkQ7RUFDRSxzQkFBMkMsRUFDNUM7O0FBRkQ7RUFDRSxzQkFBMkMsRUFDNUM7O0FBRkQ7RUFDRSxZQUEyQyxFQUM1Qzs7QUFQRDtFQUNFLFdBQVUsRUFDWDs7QUFQRDtFQUNFLG9CQUEwQyxFQUMzQzs7QUFGRDtFQUNFLHFCQUEwQyxFQUMzQzs7QUFGRDtFQUNFLFVBQTBDLEVBQzNDOztBQUZEO0VBQ0UscUJBQTBDLEVBQzNDOztBQUZEO0VBQ0UscUJBQTBDLEVBQzNDOztBQUZEO0VBQ0UsVUFBMEMsRUFDM0M7O0FBRkQ7RUFDRSxxQkFBMEMsRUFDM0M7O0FBRkQ7RUFDRSxxQkFBMEMsRUFDM0M7O0FBRkQ7RUFDRSxVQUEwQyxFQUMzQzs7QUFGRDtFQUNFLHFCQUEwQyxFQUMzQzs7QUFGRDtFQUNFLHFCQUEwQyxFQUMzQzs7QUFGRDtFQUNFLFdBQTBDLEVBQzNDOztBQWtCRDtFQUNFLGdCQUFpRCxFQUNsRDs7QUFGRDtFQUNFLDJCQUFpRCxFQUNsRDs7QUFGRDtFQUNFLDRCQUFpRCxFQUNsRDs7QUFGRDtFQUNFLGlCQUFpRCxFQUNsRDs7QUFGRDtFQUNFLDRCQUFpRCxFQUNsRDs7QUFGRDtFQUNFLDRCQUFpRCxFQUNsRDs7QUFGRDtFQUNFLGlCQUFpRCxFQUNsRDs7QUFGRDtFQUNFLDRCQUFpRCxFQUNsRDs7QUFGRDtFQUNFLDRCQUFpRCxFQUNsRDs7QUFGRDtFQUNFLGlCQUFpRCxFQUNsRDs7QUFGRDtFQUNFLDRCQUFpRCxFQUNsRDs7QUFGRDtFQUNFLDRCQUFpRCxFQUNsRDs7QUFGRDtFQUNFLGtCQUFpRCxFQUNsRDs7QUZFTDtFRXJDRTtJQUNFLFlBQVcsRUFDWjtFQU1DO0lBQ0UscUJBQTJDLEVBQzVDO0VBRkQ7SUFDRSxzQkFBMkMsRUFDNUM7RUFGRDtJQUNFLFdBQTJDLEVBQzVDO0VBRkQ7SUFDRSxzQkFBMkMsRUFDNUM7RUFGRDtJQUNFLHNCQUEyQyxFQUM1QztFQUZEO0lBQ0UsV0FBMkMsRUFDNUM7RUFGRDtJQUNFLHNCQUEyQyxFQUM1QztFQUZEO0lBQ0Usc0JBQTJDLEVBQzVDO0VBRkQ7SUFDRSxXQUEyQyxFQUM1QztFQUZEO0lBQ0Usc0JBQTJDLEVBQzVDO0VBRkQ7SUFDRSxzQkFBMkMsRUFDNUM7RUFGRDtJQUNFLFlBQTJDLEVBQzVDO0VBa0JEO0lBQ0UsWUFBVyxFQUNaO0VBUEQ7SUFDRSxxQkFBMkMsRUFDNUM7RUFGRDtJQUNFLHNCQUEyQyxFQUM1QztFQUZEO0lBQ0UsV0FBMkMsRUFDNUM7RUFGRDtJQUNFLHNCQUEyQyxFQUM1QztFQUZEO0lBQ0Usc0JBQTJDLEVBQzVDO0VBRkQ7SUFDRSxXQUEyQyxFQUM1QztFQUZEO0lBQ0Usc0JBQTJDLEVBQzVDO0VBRkQ7SUFDRSxzQkFBMkMsRUFDNUM7RUFGRDtJQUNFLFdBQTJDLEVBQzVDO0VBRkQ7SUFDRSxzQkFBMkMsRUFDNUM7RUFGRDtJQUNFLHNCQUEyQyxFQUM1QztFQUZEO0lBQ0UsWUFBMkMsRUFDNUM7RUFQRDtJQUNFLFdBQVUsRUFDWDtFQVBEO0lBQ0Usb0JBQTBDLEVBQzNDO0VBRkQ7SUFDRSxxQkFBMEMsRUFDM0M7RUFGRDtJQUNFLFVBQTBDLEVBQzNDO0VBRkQ7SUFDRSxxQkFBMEMsRUFDM0M7RUFGRDtJQUNFLHFCQUEwQyxFQUMzQztFQUZEO0lBQ0UsVUFBMEMsRUFDM0M7RUFGRDtJQUNFLHFCQUEwQyxFQUMzQztFQUZEO0lBQ0UscUJBQTBDLEVBQzNDO0VBRkQ7SUFDRSxVQUEwQyxFQUMzQztFQUZEO0lBQ0UscUJBQTBDLEVBQzNDO0VBRkQ7SUFDRSxxQkFBMEMsRUFDM0M7RUFGRDtJQUNFLFdBQTBDLEVBQzNDO0VBa0JEO0lBQ0UsZ0JBQWlELEVBQ2xEO0VBRkQ7SUFDRSwyQkFBaUQsRUFDbEQ7RUFGRDtJQUNFLDRCQUFpRCxFQUNsRDtFQUZEO0lBQ0UsaUJBQWlELEVBQ2xEO0VBRkQ7SUFDRSw0QkFBaUQsRUFDbEQ7RUFGRDtJQUNFLDRCQUFpRCxFQUNsRDtFQUZEO0lBQ0UsaUJBQWlELEVBQ2xEO0VBRkQ7SUFDRSw0QkFBaUQsRUFDbEQ7RUFGRDtJQUNFLDRCQUFpRCxFQUNsRDtFQUZEO0lBQ0UsaUJBQWlELEVBQ2xEO0VBRkQ7SUFDRSw0QkFBaUQsRUFDbEQ7RUFGRDtJQUNFLDRCQUFpRCxFQUNsRDtFQUZEO0lBQ0Usa0JBQWlELEVBQ2xELEVBQUE7O0FGV0w7RUU5Q0U7SUFDRSxZQUFXLEVBQ1o7RUFNQztJQUNFLHFCQUEyQyxFQUM1QztFQUZEO0lBQ0Usc0JBQTJDLEVBQzVDO0VBRkQ7SUFDRSxXQUEyQyxFQUM1QztFQUZEO0lBQ0Usc0JBQTJDLEVBQzVDO0VBRkQ7SUFDRSxzQkFBMkMsRUFDNUM7RUFGRDtJQUNFLFdBQTJDLEVBQzVDO0VBRkQ7SUFDRSxzQkFBMkMsRUFDNUM7RUFGRDtJQUNFLHNCQUEyQyxFQUM1QztFQUZEO0lBQ0UsV0FBMkMsRUFDNUM7RUFGRDtJQUNFLHNCQUEyQyxFQUM1QztFQUZEO0lBQ0Usc0JBQTJDLEVBQzVDO0VBRkQ7SUFDRSxZQUEyQyxFQUM1QztFQWtCRDtJQUNFLFlBQVcsRUFDWjtFQVBEO0lBQ0UscUJBQTJDLEVBQzVDO0VBRkQ7SUFDRSxzQkFBMkMsRUFDNUM7RUFGRDtJQUNFLFdBQTJDLEVBQzVDO0VBRkQ7SUFDRSxzQkFBMkMsRUFDNUM7RUFGRDtJQUNFLHNCQUEyQyxFQUM1QztFQUZEO0lBQ0UsV0FBMkMsRUFDNUM7RUFGRDtJQUNFLHNCQUEyQyxFQUM1QztFQUZEO0lBQ0Usc0JBQTJDLEVBQzVDO0VBRkQ7SUFDRSxXQUEyQyxFQUM1QztFQUZEO0lBQ0Usc0JBQTJDLEVBQzVDO0VBRkQ7SUFDRSxzQkFBMkMsRUFDNUM7RUFGRDtJQUNFLFlBQTJDLEVBQzVDO0VBUEQ7SUFDRSxXQUFVLEVBQ1g7RUFQRDtJQUNFLG9CQUEwQyxFQUMzQztFQUZEO0lBQ0UscUJBQTBDLEVBQzNDO0VBRkQ7SUFDRSxVQUEwQyxFQUMzQztFQUZEO0lBQ0UscUJBQTBDLEVBQzNDO0VBRkQ7SUFDRSxxQkFBMEMsRUFDM0M7RUFGRDtJQUNFLFVBQTBDLEVBQzNDO0VBRkQ7SUFDRSxxQkFBMEMsRUFDM0M7RUFGRDtJQUNFLHFCQUEwQyxFQUMzQztFQUZEO0lBQ0UsVUFBMEMsRUFDM0M7RUFGRDtJQUNFLHFCQUEwQyxFQUMzQztFQUZEO0lBQ0UscUJBQTBDLEVBQzNDO0VBRkQ7SUFDRSxXQUEwQyxFQUMzQztFQWtCRDtJQUNFLGdCQUFpRCxFQUNsRDtFQUZEO0lBQ0UsMkJBQWlELEVBQ2xEO0VBRkQ7SUFDRSw0QkFBaUQsRUFDbEQ7RUFGRDtJQUNFLGlCQUFpRCxFQUNsRDtFQUZEO0lBQ0UsNEJBQWlELEVBQ2xEO0VBRkQ7SUFDRSw0QkFBaUQsRUFDbEQ7RUFGRDtJQUNFLGlCQUFpRCxFQUNsRDtFQUZEO0lBQ0UsNEJBQWlELEVBQ2xEO0VBRkQ7SUFDRSw0QkFBaUQsRUFDbEQ7RUFGRDtJQUNFLGlCQUFpRCxFQUNsRDtFQUZEO0lBQ0UsNEJBQWlELEVBQ2xEO0VBRkQ7SUFDRSw0QkFBaUQsRUFDbEQ7RUFGRDtJQUNFLGtCQUFpRCxFQUNsRCxFQUFBOztBRm9CTDtFRXZERTtJQUNFLFlBQVcsRUFDWjtFQU1DO0lBQ0UscUJBQTJDLEVBQzVDO0VBRkQ7SUFDRSxzQkFBMkMsRUFDNUM7RUFGRDtJQUNFLFdBQTJDLEVBQzVDO0VBRkQ7SUFDRSxzQkFBMkMsRUFDNUM7RUFGRDtJQUNFLHNCQUEyQyxFQUM1QztFQUZEO0lBQ0UsV0FBMkMsRUFDNUM7RUFGRDtJQUNFLHNCQUEyQyxFQUM1QztFQUZEO0lBQ0Usc0JBQTJDLEVBQzVDO0VBRkQ7SUFDRSxXQUEyQyxFQUM1QztFQUZEO0lBQ0Usc0JBQTJDLEVBQzVDO0VBRkQ7SUFDRSxzQkFBMkMsRUFDNUM7RUFGRDtJQUNFLFlBQTJDLEVBQzVDO0VBa0JEO0lBQ0UsWUFBVyxFQUNaO0VBUEQ7SUFDRSxxQkFBMkMsRUFDNUM7RUFGRDtJQUNFLHNCQUEyQyxFQUM1QztFQUZEO0lBQ0UsV0FBMkMsRUFDNUM7RUFGRDtJQUNFLHNCQUEyQyxFQUM1QztFQUZEO0lBQ0Usc0JBQTJDLEVBQzVDO0VBRkQ7SUFDRSxXQUEyQyxFQUM1QztFQUZEO0lBQ0Usc0JBQTJDLEVBQzVDO0VBRkQ7SUFDRSxzQkFBMkMsRUFDNUM7RUFGRDtJQUNFLFdBQTJDLEVBQzVDO0VBRkQ7SUFDRSxzQkFBMkMsRUFDNUM7RUFGRDtJQUNFLHNCQUEyQyxFQUM1QztFQUZEO0lBQ0UsWUFBMkMsRUFDNUM7RUFQRDtJQUNFLFdBQVUsRUFDWDtFQVBEO0lBQ0Usb0JBQTBDLEVBQzNDO0VBRkQ7SUFDRSxxQkFBMEMsRUFDM0M7RUFGRDtJQUNFLFVBQTBDLEVBQzNDO0VBRkQ7SUFDRSxxQkFBMEMsRUFDM0M7RUFGRDtJQUNFLHFCQUEwQyxFQUMzQztFQUZEO0lBQ0UsVUFBMEMsRUFDM0M7RUFGRDtJQUNFLHFCQUEwQyxFQUMzQztFQUZEO0lBQ0UscUJBQTBDLEVBQzNDO0VBRkQ7SUFDRSxVQUEwQyxFQUMzQztFQUZEO0lBQ0UscUJBQTBDLEVBQzNDO0VBRkQ7SUFDRSxxQkFBMEMsRUFDM0M7RUFGRDtJQUNFLFdBQTBDLEVBQzNDO0VBa0JEO0lBQ0UsZ0JBQWlELEVBQ2xEO0VBRkQ7SUFDRSwyQkFBaUQsRUFDbEQ7RUFGRDtJQUNFLDRCQUFpRCxFQUNsRDtFQUZEO0lBQ0UsaUJBQWlELEVBQ2xEO0VBRkQ7SUFDRSw0QkFBaUQsRUFDbEQ7RUFGRDtJQUNFLDRCQUFpRCxFQUNsRDtFQUZEO0lBQ0UsaUJBQWlELEVBQ2xEO0VBRkQ7SUFDRSw0QkFBaUQsRUFDbEQ7RUFGRDtJQUNFLDRCQUFpRCxFQUNsRDtFQUZEO0lBQ0UsaUJBQWlELEVBQ2xEO0VBRkQ7SUFDRSw0QkFBaUQsRUFDbEQ7RUFGRDtJQUNFLDRCQUFpRCxFQUNsRDtFQUZEO0lBQ0Usa0JBQWlELEVBQ2xELEVBQUE7O0FsQnFXTDtFbUI1WkUsOEJiZ0l5QyxFYS9IMUM7O0FBQ0Q7RUFDRSxpQmJ3SGlDO0VhdkhqQyxvQmJ1SGlDO0VhdEhqQyxlYkdpRDtFYUZqRCxpQkFBZ0IsRUFDakI7O0FBQ0Q7RUFDRSxpQkFBZ0IsRUFDakI7O0FBS0Q7RUFDRSxZQUFXO0VBQ1gsZ0JBQWU7RUFDZixvQmJ5Q29FLEVhRHJFO0VBM0NEOzs7Ozs7Ozs7OztJQVdRLGFiaUcyQjtJYWhHM0IseUJiOEI2QjtJYTdCN0Isb0JBQW1CO0lBQ25CLDJCYjJHNEIsRWExRzdCO0VBZlA7SUFvQkksdUJBQXNCO0lBQ3RCLDhCYm9HZ0MsRWFuR2pDO0VBdEJIOzs7Ozs7Ozs7OztJQThCUSxjQUFhLEVBQ2Q7RUEvQlA7SUFvQ0ksMkJicUZnQyxFYXBGakM7RUFyQ0g7SUF5Q0ksdUJiakN3QixFYWtDekI7O0FBTUg7Ozs7OztFQU9RLGFidUQyQixFYXRENUI7O0FBVVA7RUFDRSx1QmJzRGtDLEVhckNuQztFQWxCRDs7Ozs7O0lBUVEsdUJiK0M0QixFYTlDN0I7RUFUUDs7SUFlTSx5QkFBd0IsRUFDekI7O0FBU0w7RUFFSSwwQmJzQm1DLEVhckJwQzs7QUFRSDtFQUVJLDBCYmFtQyxFYVpwQzs7QUFRSDtFQUNFLGlCQUFnQjtFQUNoQixZQUFXO0VBQ1gsc0JBQXFCLEVBQ3RCOztBQUNEOztFQUlNLGlCQUFnQjtFQUNoQixZQUFXO0VBQ1gsb0JBQW1CLEVBQ3BCOztBQzdJSDs7Ozs7Ozs7Ozs7O0VBT0ksMEJkOEhpQyxFYzdIbEM7O0FBS0g7Ozs7O0VBTUksMEJBQXlDLEVBQzFDOztBQXBCSDs7Ozs7Ozs7Ozs7O0VBT0ksMEJkc2VrQyxFY3JlbkM7O0FBS0g7Ozs7O0VBTUksMEJBQXlDLEVBQzFDOztBQXBCSDs7Ozs7Ozs7Ozs7O0VBT0ksMEJkMGVrQyxFY3plbkM7O0FBS0g7Ozs7O0VBTUksMEJBQXlDLEVBQzFDOztBQXBCSDs7Ozs7Ozs7Ozs7O0VBT0ksMEJkOGVrQyxFYzdlbkM7O0FBS0g7Ozs7O0VBTUksMEJBQXlDLEVBQzFDOztBQXBCSDs7Ozs7Ozs7Ozs7O0VBT0ksMEJka2ZrQyxFY2pmbkM7O0FBS0g7Ozs7O0VBTUksMEJBQXlDLEVBQzFDOztBRGlKTDtFQUNFLGlCQUFnQjtFQUNoQixrQkFBaUIsRUE2RGxCO0VBM0RDO0lBSkY7TUFLSSxZQUFXO01BQ1gsb0JBQTZDO01BQzdDLG1CQUFrQjtNQUNsQiw2Q0FBNEM7TUFDNUMsdUJickNnQyxFYTJGbkM7TUEvREQ7UUFhTSxpQkFBZ0IsRUFhakI7UUExQkw7Ozs7OztVQXNCWSxvQkFBbUIsRUFDcEI7TUF2Qlg7UUE4Qk0sVUFBUyxFQStCVjtRQTdETDs7Ozs7O1VBdUNZLGVBQWMsRUFDZjtRQXhDWDs7Ozs7O1VBMkNZLGdCQUFlLEVBQ2hCO1FBNUNYOzs7O1VBd0RZLGlCQUFnQixFQUNqQixFQUFBOztBbkJ1Slg7RXFCaFhFLFdBQVU7RUFDVixVQUFTO0VBQ1QsVUFBUztFQUlULGFBQVksRUFDYjs7QXJCb1hEO0VxQmpYRSxlQUFjO0VBQ2QsWUFBVztFQUNYLFdBQVU7RUFDVixvQmYwQ29FO0VlekNwRSxnQkFBa0M7RUFDbEMscUJBQW9CO0VBQ3BCLGVmZCtDO0VlZS9DLFVBQVM7RUFDVCxpQ2Y4THNDLEVlN0x2Qzs7QUFFRDtFQUNFLHNCQUFxQjtFQUNyQixnQkFBZTtFQUNmLG1CQUFrQjtFQUNsQixpQkFBZ0IsRUFDakI7O0FyQmdVRDtFS3hSVSx1QmdCN0JzQixFQUMvQjs7QUFHRDs7RUFFRSxnQkFBZTtFQUNmLG1CQUFrQjtFQUNsQixvQkFBbUIsRUFDcEI7O0FBR0Q7RUFDRSxlQUFjLEVBQ2Y7O0FBR0Q7RUFDRSxlQUFjO0VBQ2QsWUFBVyxFQUNaOztBQUdEOztFQUVFLGFBQVksRUFDYjs7QUFHRDs7O0VkeEVFLHFCQUFvQjtFQUVwQiwyQ0FBMEM7RUFDMUMscUJBQW9CLEVjeUVyQjs7QUFHRDtFQUNFLGVBQWM7RUFDZCxpQkFBeUM7RUFDekMsZ0JmbkM0QjtFZW9DNUIseUJmeEJtQztFZXlCbkMsZWYzRWlELEVlNEVsRDs7QUF5QkQ7RUFDRSxlQUFjO0VBQ2QsWUFBVztFQUNYLGFmMkZ5RjtFZTFGekYsa0JmdkI4QjtFZXdCOUIsZ0JmcEU0QjtFZXFFNUIseUJmekRtQztFZTBEbkMsZWY1R2lEO0VlNkdqRCx1QmY2RG1DO0VlNURuQyx1QkFBc0I7RUFDdEIsdUJma0VtQztFZWpFbkMsbUJmaEI2QjtFRHhDckIsaURnQnlENEM7RWhCNkQ1Qyx5RWdCNURzRSxFQTBCL0U7RUNqR0M7SUFDRSxzQmhCaUpvQztJZ0JoSnBDLFdBQVU7SWpCV0osbUZpQmR1RCxFQUs5RDtFakIwQ0Q7SUFDRSxZQ3NHaUM7SURyR2pDLFdBQVUsRUFDWDtFQUNEO0lBQTBCLFlDbUdTLEVEbkdRO0VBQzNDO0lBQWdDLFlDa0dHLEVEbEdjO0VnQk9uRDs7SUE2QkksMEJmaEkrQztJZWlJL0MsV0FBVSxFQUNYO0VBL0JIOztJQW1DSSxvQmY2RXdDLEVlNUV6Qzs7QUFNSDtFQUNFLGFBQVksRUFDYjs7QXJCc01EO0VxQjNMRSx5QkFBd0IsRUFDekI7O0FBVUQ7RUFDRTs7OztJQUlFLGtCZnVCdUYsRWVaeEY7SUFmRDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztNQVFJLGtCZnVCNkcsRWV0QjlHO0lBVEg7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7TUFhSSxrQmZnQjRHLEVlZjdHLEVBQUE7O0FBVUw7RUFDRSxvQmZTbUMsRWVScEM7O0FBT0Q7O0VBRUUsbUJBQWtCO0VBQ2xCLGVBQWM7RUFDZCxpQkFBZ0I7RUFDaEIsb0JBQW1CLEVBU3BCO0VBZEQ7O0lBUUksaUJmN0prRTtJZThKbEUsbUJBQWtCO0lBQ2xCLGlCQUFnQjtJQUNoQixvQkFBbUI7SUFDbkIsZ0JBQWUsRUFDaEI7O0FBRUg7Ozs7RUFJRSxtQkFBa0I7RUFDbEIsbUJBQWtCO0VBQ2xCLG1CQUFrQixFQUNuQjs7QUFFRDs7RUFFRSxpQkFBZ0IsRUFDakI7O0FBR0Q7O0VBRUUsbUJBQWtCO0VBQ2xCLHNCQUFxQjtFQUNyQixtQkFBa0I7RUFDbEIsaUJBQWdCO0VBQ2hCLHVCQUFzQjtFQUN0QixvQkFBbUI7RUFDbkIsZ0JBQWUsRUFDaEI7O0FBQ0Q7O0VBRUUsY0FBYTtFQUNiLGtCQUFpQixFQUNsQjs7QUFNRDs7Ozs7O0VBS0ksb0JmM0N3QyxFZTRDekM7O0FBR0g7Ozs7O0VBSUksb0JmbkR3QyxFZW9EekM7O0FBR0g7Ozs7O0VBS00sb0JmNURzQyxFZTZEdkM7O0FBVUw7RUFFRSxpQkFBeUM7RUFDekMsb0JBQTRDO0VBRTVDLGlCQUFnQjtFQUNoQixpQkFBcUQsRUFPdEQ7RUFiRDs7Ozs7SUFVSSxnQkFBZTtJQUNmLGlCQUFnQixFQUNqQjs7QUMvT0Q7OztFQUNFLGFoQjZJK0c7RWdCNUkvRyxrQmhCNkI0QjtFZ0I1QjVCLGdCaEJwQm9EO0VnQnFCcEQsaUJoQmlDMkI7RWdCaEMzQixtQmhCb0MyQixFZ0JuQzVCOztBQUVEOzs7RUFDRSxhaEJxSStHO0VnQnBJL0csa0JoQm9JK0csRWdCbkloSDs7QUFFRDs7Ozs7OztFQUVFLGFBQVksRUFDYjs7QUFoQkQ7RUFDRSxhaEI2SStHO0VnQjVJL0csa0JoQjZCNEI7RWdCNUI1QixnQmhCcEJvRDtFZ0JxQnBELGlCaEJpQzJCO0VnQmhDM0IsbUJoQm9DMkIsRWdCbkM1Qjs7QUFFRDtFQUNFLGFoQnFJK0c7RWdCcEkvRyxrQmhCb0krRyxFZ0JuSWhIOztBQUVEOztFQUVFLGFBQVksRUFDYjs7QUQ0T0g7RUFLSSxhZm5IK0c7RWVvSC9HLGtCZm5PNEI7RWVvTzVCLGdCZnBSb0Q7RWVxUnBELGlCZi9OMkI7RWVnTzNCLGlCQUFzRCxFQUN2RDs7QUN0UUQ7OztFQUNFLGFoQjJJOEc7RWdCMUk5RyxtQmhCMEI0QjtFZ0J6QjVCLGdCaEJyQm9EO0VnQnNCcEQsdUJoQmdDaUM7RWdCL0JqQyxtQmhCbUMyQixFZ0JsQzVCOztBQUVEOzs7RUFDRSxhaEJtSThHO0VnQmxJOUcsa0JoQmtJOEcsRWdCakkvRzs7QUFFRDs7Ozs7OztFQUVFLGFBQVksRUFDYjs7QUFoQkQ7RUFDRSxhaEIySThHO0VnQjFJOUcsbUJoQjBCNEI7RWdCekI1QixnQmhCckJvRDtFZ0JzQnBELHVCaEJnQ2lDO0VnQi9CakMsbUJoQm1DMkIsRWdCbEM1Qjs7QUFFRDtFQUNFLGFoQm1JOEc7RWdCbEk5RyxrQmhCa0k4RyxFZ0JqSS9HOztBQUVEOztFQUVFLGFBQVksRUFDYjs7QUQwUEg7RUFLSSxhZm5JOEc7RWVvSTlHLG1CZnBQNEI7RWVxUDVCLGdCZm5Tb0Q7RWVvU3BELHVCZjlPaUM7RWUrT2pDLGlCQUFzRCxFQUN2RDs7QUFRSDtFQUVFLG1CQUFrQixFQU1uQjtFQVJEO0lBTUksc0JBQTBDLEVBQzNDOztBQUdIO0VBQ0UsbUJBQWtCO0VBQ2xCLE9BQU07RUFDTixTQUFRO0VBQ1IsV0FBVTtFQUNWLGVBQWM7RUFDZCxZZmxLeUY7RWVtS3pGLGFmbkt5RjtFZW9LekYsa0JmcEt5RjtFZXFLekYsbUJBQWtCO0VBQ2xCLHFCQUFvQixFQUNyQjs7QUFDRDtFQUNFLFlmdktnSDtFZXdLaEgsYWZ4S2dIO0VleUtoSCxrQmZ6S2dILEVlMEtqSDs7QUFDRDtFQUNFLFlmMUtpSDtFZTJLakgsYWYzS2lIO0VlNEtqSCxrQmY1S2lILEVlNktsSDs7QUMxWEM7Ozs7Ozs7Ozs7RUFVRSxlaEJnZW9DLEVnQi9kckM7O0FBRUQ7RUFDRSxzQmhCNGRvQztFRDVhOUIsaURpQi9DOEMsRUFNckQ7RUFMQztJQUNFLHNCQUF3QztJakI2Q3BDLGtFaUI1QzBFLEVBRS9FOztBQUdIO0VBQ0UsZWhCa2RvQztFZ0JqZHBDLHNCaEJpZG9DO0VnQmhkcEMsMEJoQmlkb0MsRWdCaGRyQzs7QUFFRDtFQUNFLGVoQjRjb0MsRWdCM2NyQzs7QUEvQkQ7Ozs7Ozs7Ozs7RUFVRSxlaEJ3ZW9DLEVnQnZlckM7O0FBRUQ7RUFDRSxzQmhCb2VvQztFRHBiOUIsaURpQi9DOEMsRUFNckQ7RUFMQztJQUNFLHNCQUF3QztJakI2Q3BDLGtFaUI1QzBFLEVBRS9FOztBQUdIO0VBQ0UsZWhCMGRvQztFZ0J6ZHBDLHNCaEJ5ZG9DO0VnQnhkcEMsMEJoQnlkb0MsRWdCeGRyQzs7QUFFRDtFQUNFLGVoQm9kb0MsRWdCbmRyQzs7QUEvQkQ7Ozs7Ozs7Ozs7RUFVRSxlaEI0ZW9DLEVnQjNlckM7O0FBRUQ7RUFDRSxzQmhCd2VvQztFRHhiOUIsaURpQi9DOEMsRUFNckQ7RUFMQztJQUNFLHNCQUF3QztJakI2Q3BDLGtFaUI1QzBFLEVBRS9FOztBQUdIO0VBQ0UsZWhCOGRvQztFZ0I3ZHBDLHNCaEI2ZG9DO0VnQjVkcEMsMEJoQjZkb0MsRWdCNWRyQzs7QUFFRDtFQUNFLGVoQndkb0MsRWdCdmRyQzs7QUR5V0g7RUFHSyxVQUFnQyxFQUNsQzs7QUFKSDtFQU1LLE9BQU0sRUFDUjs7QUFTSDtFQUNFLGVBQWM7RUFDZCxnQkFBZTtFQUNmLG9CQUFtQjtFQUNuQixlQUFnQyxFQUNqQzs7QUFrQkM7RUFFRTtJQUNFLHNCQUFxQjtJQUNyQixpQkFBZ0I7SUFDaEIsdUJBQXNCLEVBQ3ZCO0VBR0Q7SUFDRSxzQkFBcUI7SUFDckIsWUFBVztJQUNYLHVCQUFzQixFQUN2QjtFQUdEO0lBQ0Usc0JBQXFCLEVBQ3RCO0VBRUQ7SUFDRSxzQkFBcUI7SUFDckIsdUJBQXNCLEVBT3ZCO0lBTEM7OztNQUdFLFlBQVcsRUFDWjtFQUlIO0lBQ0UsWUFBVyxFQUNaO0VBRUQ7SUFDRSxpQkFBZ0I7SUFDaEIsdUJBQXNCLEVBQ3ZCO0VBSUQ7O0lBRUUsc0JBQXFCO0lBQ3JCLGNBQWE7SUFDYixpQkFBZ0I7SUFDaEIsdUJBQXNCLEVBS3ZCO0lBSEM7O01BQ0UsZ0JBQWUsRUFDaEI7RUFFSDs7SUFFRSxtQkFBa0I7SUFDbEIsZUFBYyxFQUNmO0VBR0Q7SUFDRSxPQUFNLEVBQ1AsRUFBQTs7QUFlTDs7OztFQVNJLGNBQWE7RUFDYixpQkFBZ0I7RUFDaEIsaUJBQXlDLEVBQzFDOztBQVpIOztFQWlCSSxpQkFBa0UsRUFDbkU7O0FBbEJIO0VKcmZFLG1CQUE0QjtFQUM1QixvQkFBNEIsRUkyZ0IzQjtFVDlnQkQ7SUFFRSxhQUFZO0lBQ1osZUFBYyxFQUNmO0VBQ0Q7SUFDRSxZQUFXLEVBQ1o7O0FTMmdCRDtFQTNCRjtJQTZCTSxrQkFBaUI7SUFDakIsaUJBQWdCO0lBQ2hCLGlCQUF5QyxFQUMxQyxFQUFBOztBQWhDTDtFQXdDSSxZQUErQixFQUNoQzs7QUFPQztFQWhESjtJQWtEUSx5QkFBaUUsRUFDbEUsRUFBQTs7QUFJSDtFQXZESjtJQXlEUSxpQkFBMEMsRUFDM0MsRUFBQTs7QUV0akJQO0VBQ0Usc0JBQXFCO0VBQ3JCLGlCQUFnQjtFQUNoQixvQmpCMElxQztFaUJ6SXJDLDZEUlpnRTtFUWFoRSxtQkFBa0I7RUFDbEIsdUJBQXNCO0VBQ3RCLCtCQUEwQjtNQUExQiwyQkFBMEI7RUFDMUIsZ0JBQWU7RUFDZix1QkFBc0I7RUFDdEIsOEJBQTZCO0VBQzdCLG9CQUFtQjtFQzRCbkIsa0JsQmdEOEI7RWtCL0M5QixnQmxCRzRCO0VrQkY1Qix5QmxCY21DO0VrQmJuQyxtQmxCMkQ2QjtFRDRHN0IsMEJrQnBNeUI7RWxCcU10Qix1QmtCck1zQjtFbEJzTXJCLHNCa0J0TXFCO0VsQnVNakIsa0JrQnZNaUIsRUFpQzFCO0VBOUNEO0loQkpFLHFCQUFvQjtJQUVwQiwyQ0FBMEM7SUFDMUMscUJBQW9CLEVnQnNCakI7RUFyQkw7SUEyQkksWWpCb0hpQztJaUJuSGpDLHNCQUFxQixFQUN0QjtFQTdCSDtJQWlDSSxXQUFVO0lBQ1YsdUJBQXNCO0lsQjJCaEIsaURrQjFCOEMsRUFDckQ7RUFwQ0g7O0lBeUNJLG9CakJpTHdDO0lpQmhMeEMscUJBQW9CO0lFL0N0QixjRmdEc0I7SUU3Q3RCLDBCQUFrQztJcEIrRDFCLGlCa0JqQmtCLEVBQ3pCOztBQU9IO0VDdERFLFlsQmlKbUM7RWtCaEpuQyx1QmxCaUptQztFa0JoSm5DLG1CbEJpSm1DLEVpQjNGcEM7RUNwREM7O0lBTUUsWWxCdUlpQztJa0J0SWpDLDBCQUEwQztJQUN0QyxzQkFBa0MsRUFDdkM7RUFDRDs7SUFHRSx1QkFBc0IsRUFDdkI7RUFJQzs7Ozs7OztJQU1FLHVCbEJzSCtCO0lrQnJIM0IsbUJsQnNIMkIsRWtCckhoQztFQUdIO0lBQ0UsWWxCZ0hpQztJa0IvR2pDLHVCbEI4R2lDLEVrQjdHbEM7O0FEcUJIO0VDekRFLFlsQnFKbUM7RWtCcEpuQywwQmxCVTJDO0VrQlQzQyxzQmxCcUowRCxFaUI1RjNEO0VDdkRDOztJQU1FLFlsQjJJaUM7SWtCMUlqQywwQkFBMEM7SUFDdEMsc0JBQWtDLEVBQ3ZDO0VBQ0Q7O0lBR0UsdUJBQXNCLEVBQ3ZCO0VBSUM7Ozs7Ozs7SUFNRSwwQmxCakJ1QztJa0JrQm5DLHNCbEIwSGtELEVrQnpIdkQ7RUFHSDtJQUNFLGVsQnZCeUM7SWtCd0J6Qyx1QmxCa0hpQyxFa0JqSGxDOztBRHlCSDtFQzdERSxZbEJ5Sm1DO0VrQnhKbkMsMEJsQlc2QjtFa0JWN0Isc0JsQnlKMEQsRWlCNUYzRDtFQzNEQzs7SUFNRSxZbEIrSWlDO0lrQjlJakMsMEJBQTBDO0lBQ3RDLHNCQUFrQyxFQUN2QztFQUNEOztJQUdFLHVCQUFzQixFQUN2QjtFQUlDOzs7Ozs7O0lBTUUsMEJsQmhCeUI7SWtCaUJyQixzQmxCOEhrRCxFa0I3SHZEO0VBR0g7SUFDRSxlbEJ0QjJCO0lrQnVCM0IsdUJsQnNIaUMsRWtCckhsQzs7QUQ2Qkg7RUNqRUUsWWxCNkptQztFa0I1Sm5DLDBCbEJZNkI7RWtCWDdCLHNCbEI2SnVELEVpQjVGeEQ7RUMvREM7O0lBTUUsWWxCbUppQztJa0JsSmpDLDBCQUEwQztJQUN0QyxzQkFBa0MsRUFDdkM7RUFDRDs7SUFHRSx1QkFBc0IsRUFDdkI7RUFJQzs7Ozs7OztJQU1FLDBCbEJmeUI7SWtCZ0JyQixzQmxCa0krQyxFa0JqSXBEO0VBR0g7SUFDRSxlbEJyQjJCO0lrQnNCM0IsdUJsQjBIaUMsRWtCekhsQzs7QURpQ0g7RUNyRUUsWWxCaUttQztFa0JoS25DLDBCbEJhNkI7RWtCWjdCLHNCbEJpSzBELEVpQjVGM0Q7RUNuRUM7O0lBTUUsWWxCdUppQztJa0J0SmpDLDBCQUEwQztJQUN0QyxzQkFBa0MsRUFDdkM7RUFDRDs7SUFHRSx1QkFBc0IsRUFDdkI7RUFJQzs7Ozs7OztJQU1FLDBCbEJkeUI7SWtCZXJCLHNCbEJzSWtELEVrQnJJdkQ7RUFHSDtJQUNFLGVsQnBCMkI7SWtCcUIzQix1QmxCOEhpQyxFa0I3SGxDOztBRHFDSDtFQ3pFRSxZbEJxS21DO0VrQnBLbkMsMEJsQmM2QjtFa0JiN0Isc0JsQnFLeUQsRWlCNUYxRDtFQ3ZFQzs7SUFNRSxZbEIySmlDO0lrQjFKakMsMEJBQTBDO0lBQ3RDLHNCQUFrQyxFQUN2QztFQUNEOztJQUdFLHVCQUFzQixFQUN2QjtFQUlDOzs7Ozs7O0lBTUUsMEJsQmJ5QjtJa0JjckIsc0JsQjBJaUQsRWtCekl0RDtFQUdIO0lBQ0UsZWxCbkIyQjtJa0JvQjNCLHVCbEJrSWlDLEVrQmpJbEM7O0FEOENIO0VBQ0UsZWpCeEUyQztFaUJ5RTNDLG9CQUFtQjtFQUNuQixpQkFBZ0IsRUE4QmpCO0VBakNEOztJQVVJLDhCQUE2QjtJbEI3QnZCLGlCa0I4QmtCLEVBQ3pCO0VBWkg7SUFpQkksMEJBQXlCLEVBQzFCO0VBbEJIO0lBcUJJLGVqQnpFNEM7SWlCMEU1QywyQmpCeEU2QjtJaUJ5RTdCLDhCQUE2QixFQUM5QjtFQXhCSDs7O0lBNkJNLGVqQnZHNkM7SWlCd0c3QyxzQkFBcUIsRUFDdEI7O0FBUUw7RUNoRkUsbUJsQm1EOEI7RWtCbEQ5QixnQmxCSXNEO0VrQkh0RCx1QmxCeURtQztFa0J4RG5DLG1CbEI0RDZCLEVpQm9COUI7O0FBQ0Q7RUNwRkUsa0JsQnNEOEI7RWtCckQ5QixnQmxCS3NEO0VrQkp0RCxpQmxCMEQ2QjtFa0J6RDdCLG1CbEI2RDZCLEVpQnVCOUI7O0FBQ0Q7RUN4RkUsaUJsQnlENkI7RWtCeEQ3QixnQmxCS3NEO0VrQkp0RCxpQmxCMEQ2QjtFa0J6RDdCLG1CbEI2RDZCLEVpQjBCOUI7O0FBTUQ7RUFDRSxlQUFjO0VBQ2QsWUFBVyxFQUNaOztBQUdEO0VBQ0UsZ0JBQWUsRUFDaEI7O0FBR0Q7OztFQUlJLFlBQVcsRUFDWjs7QUd0Skg7RUFDRSxXQUFVO0VyQmlMRixpQ3FCaEwrQixFQUl4QztFQU5EO0lBSUksV0FBVSxFQUNYOztBQUdIO0VBQ0UsY0FBYSxFQUtkO0VBTkQ7SUFHYyxlQUFjLEVBQUk7O0FBS2hDO0VBQW9CLG1CQUFrQixFQUFJOztBQUUxQztFQUFvQix5QkFBd0IsRUFBSTs7QUFFaEQ7RUFDRSxtQkFBa0I7RUFDbEIsVUFBUztFQUNULGlCQUFnQjtFckIrSlIsd0NxQjlKdUM7RXJCc0t2QywyQnFCckt5QjtFckJ5S3pCLGlDcUJ4S2dDLEVBQ3pDOztBQzlCRDtFQUNFLHNCQUFxQjtFQUNyQixTQUFRO0VBQ1IsVUFBUztFQUNULGlCQUFnQjtFQUNoQix1QkFBc0I7RUFDdEIsdUJBQXNDO0VBQ3RDLG9DQUFpRDtFQUNqRCxtQ0FBaUQsRUFDbEQ7O0FBR0Q7O0VBRUUsbUJBQWtCLEVBQ25COztBQUdEO0VBQ0UsV0FBVSxFQUNYOztBQUdEO0VBQ0UsbUJBQWtCO0VBQ2xCLFVBQVM7RUFDVCxRQUFPO0VBQ1AsY3JCK082QjtFcUI5TzdCLGNBQWE7RUFDYixZQUFXO0VBQ1gsaUJBQWdCO0VBQ2hCLGVBQWM7RUFDZCxnQkFBZTtFQUNmLGlCQUFnQjtFQUNoQixnQnJCVzRCO0VxQlY1QixpQkFBZ0I7RUFDaEIsdUJyQmdNbUM7RXFCL0xuQyx1QnJCbU1tQztFcUJsTW5DLHNDckJnTThDO0VxQi9MOUMsbUJyQmdFNkI7RUR4Q3JCLDRDc0J2QnVDO0VBQy9DLDZCQUE0QixFQXlCN0I7RUEzQ0Q7SUF3QkksU0FBUTtJQUNSLFdBQVUsRUFDWDtFQTFCSDtJQ3hCRSxZQUFXO0lBQ1gsY0FBMkM7SUFDM0MsaUJBQWdCO0lBQ2hCLDBCdEJ3T3NDLEVxQnBMckM7RUEvQkg7SUFtQ0ksZUFBYztJQUNkLGtCQUFpQjtJQUNqQixZQUFXO0lBQ1gsb0JBQW1CO0lBQ25CLHlCckJMaUM7SXFCTWpDLGVyQnpENkM7SXFCMEQ3QyxvQkFBbUIsRUFDcEI7O0FBSUg7RUFHSSxzQkFBcUI7RUFDckIsZXJCc0ttRDtFcUJyS25ELDBCckJ1S29DLEVxQnRLckM7O0FBSUg7RUFJSSxZckJ5QjRCO0VxQnhCNUIsc0JBQXFCO0VBQ3JCLFdBQVU7RUFDViwwQnJCM0V5QyxFcUI0RTFDOztBQU9IO0VBSUksZXJCMUYrQyxFcUIyRmhEOztBQUxIO0VBVUksc0JBQXFCO0VBQ3JCLDhCQUE2QjtFQUM3Qix1QkFBc0I7RUUxR3hCLG9FQUFtRTtFRjRHakUsb0JyQmdId0MsRXFCL0d6Qzs7QUFJSDtFQUdJLGVBQWMsRUFDZjs7QUFKSDtFQVFJLFdBQVUsRUFDWDs7QUFPSDtFQUNFLFdBQVU7RUFDVixTQUFRLEVBQ1Q7O0FBT0Q7RUFDRSxRQUFPO0VBQ1AsWUFBVyxFQUNaOztBQUVEO0VBQ0UsVUFBUztFQUNULG9DQUEyQjtVQUEzQiw0QkFBMkIsRUFDNUI7O0FBR0Q7RUFDRSxlQUFjO0VBQ2Qsa0JBQWlCO0VBQ2pCLGdCckIxR3NEO0VxQjJHdEQseUJyQmpHbUM7RXFCa0duQyxlckJuSmlEO0VxQm9KakQsb0JBQW1CLEVBQ3BCOztBQUdEO0VBQ0UsZ0JBQWU7RUFDZixRQUFPO0VBQ1AsU0FBUTtFQUNSLFVBQVM7RUFDVCxPQUFNO0VBQ04sYXJCb0c2QixFcUJuRzlCOztBQUdEO0VBQ0UsU0FBUTtFQUNSLFdBQVUsRUFDWDs7QUFPRDs7RUFJSSxjQUFhO0VBQ2IseUJBQXNDO0VBQ3RDLFlBQVcsRUFDWjs7QUFQSDs7RUFVSSxVQUFTO0VBQ1QsYUFBWTtFQUNaLG1CQUFrQixFQUNuQjs7QUFRSDtFQUNFO0lBRUksU0FBUTtJQUFFLFdBQVUsRUFDckI7RUFISDtJQU9JLFFBQU87SUFBRSxZQUFXLEVBQ3JCLEVBQUE7O0FHbk5MOztFQUVFLG1CQUFrQjtFQUNsQixzQkFBcUI7RUFDckIsdUJBQXNCLEVBWXZCO0VBaEJEOztJQU1JLG1CQUFrQjtJQUNsQixZQUFXLEVBUVo7SUFmSDs7Ozs7TUFhTSxXQUFVLEVBQ1g7O0FBS0w7Ozs7RUFLSSxrQkFBaUIsRUFDbEI7O0FBSUg7RUFDRSxrQkFBaUIsRUFZbEI7RWxCbENDO0lBRUUsYUFBWTtJQUNaLGVBQWMsRUFDZjtFQUNEO0lBQ0UsWUFBVyxFQUNaO0VrQmNIOztJQU1JLFlBQVcsRUFDWjtFQVBIOzs7SUFXSSxpQkFBZ0IsRUFDakI7O0FBR0g7RUFDRSxpQkFBZ0IsRUFDakI7O0FBR0Q7RUFDRSxlQUFjLEVBSWY7RUFMRDtJQy9DRSw4QkRrRGdDO0lDakQ3QiwyQkRpRDZCLEVBQy9COztBQUdIOztFQzlDRSw2QkRnRDZCO0VDL0MxQiwwQkQrQzBCLEVBQzlCOztBQUdEO0VBQ0UsWUFBVyxFQUNaOztBQUNEO0VBQ0UsaUJBQWdCLEVBQ2pCOztBQUNEOztFQ2xFRSw4QkRxRWdDO0VDcEU3QiwyQkRvRTZCLEVBQy9COztBQUVIO0VDaEVFLDZCRGlFNkI7RUNoRTFCLDBCRGdFMEIsRUFDOUI7O0FBR0Q7O0VBRUUsV0FBVSxFQUNYOztBQWdCRDtFQUNFLGtCQUFpQjtFQUNqQixtQkFBa0IsRUFDbkI7O0FBQ0Q7RUFDRSxtQkFBa0I7RUFDbEIsb0JBQW1CLEVBQ3BCOztBQUlEO0V6QjdDVSxpRHlCOEM0QyxFQU1yRDtFQVBEO0l6QjdDVSxpQnlCa0RrQixFQUN6Qjs7QUFLSDtFQUNFLGVBQWMsRUFDZjs7QUFFRDtFQUNFLHdCQUFxRDtFQUNyRCx1QkFBc0IsRUFDdkI7O0FBRUQ7RUFDRSx3QnhCZDZCLEV3QmU5Qjs7QUFNRDs7O0VBSUksZUFBYztFQUNkLFlBQVc7RUFDWCxZQUFXO0VBQ1gsZ0JBQWUsRUFDaEI7O0FsQnpJRDtFQUVFLGFBQVk7RUFDWixlQUFjLEVBQ2Y7O0FBQ0Q7RUFDRSxZQUFXLEVBQ1o7O0FrQjBISDtFQWNNLFlBQVcsRUFDWjs7QUFmTDs7OztFQXNCSSxpQkFBZ0I7RUFDaEIsZUFBYyxFQUNmOztBQUdIO0VBRUksaUJBQWdCLEVBQ2pCOztBQUhIO0VBS0ksNkJ4QmpFMkI7RXlCbEc3Qiw4QkRvS2lDO0VDbktoQyw2QkRtS2dDLEVBQ2hDOztBQVBIO0VBU0ksK0J4QnJFMkI7RXlCMUc3QiwyQkRnTDhCO0VDL0s3QiwwQkQrSzZCLEVBQzdCOztBQUVIO0VBQ0UsaUJBQWdCLEVBQ2pCOztBQUNEOztFQzlLRSw4QkRpTGlDO0VDaExoQyw2QkRnTGdDLEVBQ2hDOztBQUVIO0VDNUxFLDJCRDZMNEI7RUM1TDNCLDBCRDRMMkIsRUFDN0I7O0FBTUQ7RUFDRSxlQUFjO0VBQ2QsWUFBVztFQUNYLG9CQUFtQjtFQUNuQiwwQkFBeUIsRUFjMUI7RUFsQkQ7O0lBT0ksWUFBVztJQUNYLG9CQUFtQjtJQUNuQixVQUFTLEVBQ1Y7RUFWSDtJQVlJLFlBQVcsRUFDWjtFQWJIO0lBZ0JJLFdBQVUsRUFDWDs7QTdCK3FHSDs7OztFNkIxcEdNLG1CQUFrQjtFQUNsQix1QkFBbUI7RUFDbkIscUJBQW9CLEVBQ3JCOztBRTFPTDtFQUNFLG1CQUFrQjtFQUNsQixlQUFjO0VBQ2QsMEJBQXlCLEVBdUIxQjtFQTFCRDtJQU9JLFlBQVc7SUFDWCxnQkFBZTtJQUNmLGlCQUFnQixFQUNqQjtFQVZIO0lBZUksbUJBQWtCO0lBQ2xCLFdBQVU7SUFLVixZQUFXO0lBRVgsWUFBVztJQUNYLGlCQUFnQixFQUNqQjs7QUFzQkg7OztFQUdFLG9CQUFtQixFQUtwQjtFQVJEOzs7SUFNSSxpQkFBZ0IsRUFDakI7O0FBR0g7O0VBRUUsVUFBUztFQUNULG9CQUFtQjtFQUNuQix1QkFBc0IsRUFDdkI7O0FBSUQ7RUFDRSxrQjFCc0I4QjtFMEJyQjlCLGdCMUJ2QjRCO0UwQndCNUIsb0JBQW1CO0VBQ25CLGVBQWM7RUFDZCxlMUJoRWlEO0UwQmlFakQsbUJBQWtCO0VBQ2xCLDBCMUJoRWlEO0UwQmlFakQsdUIxQjhHbUM7RTBCN0duQyxtQjFCNEI2QixFMEJUOUI7RUE1QkQ7OztJQWFJLGtCMUJnQjRCO0kwQmY1QixnQjFCakNvRDtJMEJrQ3BELG1CMUJ3QjJCLEUwQnZCNUI7RUFoQkg7OztJQWtCSSxtQjFCUTRCO0kwQlA1QixnQjFCdkNvRDtJMEJ3Q3BELG1CMUJrQjJCLEUwQmpCNUI7RUFyQkg7O0lBMEJJLGNBQWEsRUFDZDs7QUFJSDs7Ozs7OztFRGhHRSw4QkN1RzhCO0VEdEczQiwyQkNzRzJCLEVBQy9COztBQUNEO0VBQ0UsZ0JBQWUsRUFDaEI7O0FBQ0Q7Ozs7Ozs7RURwR0UsNkJDMkc2QjtFRDFHMUIsMEJDMEcwQixFQUM5Qjs7QUFDRDtFQUNFLGVBQWMsRUFDZjs7QUFJRDtFQUNFLG1CQUFrQjtFQUdsQixhQUFZO0VBQ1osb0JBQW1CLEVBOEJwQjtFQW5DRDtJQVVJLG1CQUFrQixFQVVuQjtJQXBCSDtNQVlNLGtCQUFpQixFQUNsQjtJQWJMO01Ba0JNLFdBQVUsRUFDWDtFQW5CTDs7SUEwQk0sbUJBQWtCLEVBQ25CO0VBM0JMOztJQWdDTSxrQkFBaUIsRUFDbEI7O0FDM0pMO0VBQ0UsaUJBQWdCO0VBQ2hCLGdCQUFlO0VBQ2YsaUJBQWdCLEVBeURqQjtFckJ2REM7SUFFRSxhQUFZO0lBQ1osZUFBYyxFQUNmO0VBQ0Q7SUFDRSxZQUFXLEVBQ1o7RXFCWkg7SUFPSSxtQkFBa0I7SUFDbEIsZUFBYyxFQXlCZjtJQWpDSDtNQVdNLG1CQUFrQjtNQUNsQixlQUFjO01BQ2QsbUIzQmdaK0MsRTJCMVloRDtNQW5CTDtRQWdCUSxzQkFBcUI7UUFDckIsMEIzQlYyQyxFMkJXNUM7SUFsQlA7TUF1Qk0sZTNCakI2QyxFMkIwQjlDO01BaENMO1FBMkJRLGUzQnJCMkM7UTJCc0IzQyxzQkFBcUI7UUFDckIsOEJBQTZCO1FBQzdCLG9CM0I0TG9DLEUyQjNMckM7RUEvQlA7SUF3Q00sMEIzQmpDNkM7STJCa0M3QyxzQjNCaEN1QyxFMkJpQ3hDO0VBMUNMO0lMSEUsWUFBVztJQUNYLGNBQTJDO0lBQzNDLGlCQUFnQjtJQUNoQiwwQkFKZ0MsRUt3RC9CO0VBcERIO0lBMERJLGdCQUFlLEVBQ2hCOztBQVFIO0VBQ0UsOEIzQmdXOEMsRTJCN1QvQztFQXBDRDtJQUdJLFlBQVc7SUFFWCxvQkFBbUIsRUF5QnBCO0lBOUJIO01BU00sa0JBQWlCO01BQ2pCLHlCM0J0QitCO00yQnVCL0IsOEJBQTZCO01BQzdCLDJCQUEwRCxFQUkzRDtNQWhCTDtRQWNRLG1DM0JtVndDLEUyQmxWekM7SUFmUDtNQXVCUSxlM0JyRjJDO00yQnNGM0MsdUIzQnRFb0I7TTJCdUVwQix1QjNCOFV3QztNMkI3VXhDLGlDQUFnQztNQUNoQyxnQkFBZSxFQUNoQjs7QUFhUDtFQUVJLFlBQVcsRUFtQlo7RUFyQkg7SUFNTSxtQjNCYnlCLEUyQmMxQjtFQVBMO0lBU00saUJBQWdCLEVBQ2pCO0VBVkw7SUFpQlEsWTNCbkJ3QjtJMkJvQnhCLDBCM0JySHFDLEUyQnNIdEM7O0FBT1A7RUFFSSxZQUFXLEVBS1o7RUFQSDtJQUlNLGdCQUFlO0lBQ2YsZUFBYyxFQUNmOztBQVdMO0VBQ0UsWUFBVyxFQXdCWjtFQXpCRDtJQUlJLFlBQVcsRUFLWjtJQVRIO01BTU0sbUJBQWtCO01BQ2xCLG1CQUFrQixFQUNuQjtFQVJMO0lBWUksVUFBUztJQUNULFdBQVUsRUFDWDtFQUVEO0lBaEJGO01Ba0JNLG9CQUFtQjtNQUNuQixVQUFTLEVBSVY7TUF2Qkw7UUFxQlEsaUJBQWdCLEVBQ2pCLEVBQUE7O0FBUVA7RUFDRSxpQkFBZ0IsRUF5QmpCO0VBMUJEO0lBS0ksZ0JBQWU7SUFDZixtQjNCdEYyQixFMkJ1RjVCO0VBUEg7Ozs7O0lBWUksdUIzQjJPa0QsRTJCMU9uRDtFQUVEO0lBZkY7TUFpQk0sOEIzQnNPZ0Q7TTJCck9oRCwyQkFBMEQsRUFDM0Q7SUFuQkw7Ozs7O01BdUJNLDBCM0J2THNCLEUyQndMdkIsRUFBQTs7QUFTTDtFQUVJLGNBQWEsRUFDZDs7QUFISDtFQUtJLGVBQWMsRUFDZjs7QUFRSDtFQUVFLGlCQUFnQjtFRjNPaEIsMkJFNk80QjtFRjVPM0IsMEJFNE8yQixFQUM3Qjs7QS9CcEtHO0VnQ2xFRixtQkFBa0I7RUFDbEIsaUI1QjJWcUM7RTRCMVZyQyxvQjVCb0RvRTtFNEJuRHBFLDhCQUE2QixFQVE5QjtFdEJUQztJQUVFLGFBQVk7SUFDWixlQUFjLEVBQ2Y7RUFDRDtJQUNFLFlBQVcsRUFDWjtFc0JERDtJaEMwREU7TWdDekRBLG1CNUJ5RjJCLEU0QnZGOUIsRUFBQTs7QXRCVEM7RUFFRSxhQUFZO0VBQ1osZUFBYyxFQUNmOztBQUNEO0VBQ0UsWUFBVyxFQUNaOztBc0JhRDtFQUhGO0lBSUksWUFBVyxFQUVkLEVBQUE7O0FBYUQ7RUFDRSxvQkFBbUI7RUFDbkIsb0I1QnVUZ0U7RTRCdFRoRSxtQjVCc1RnRTtFNEJyVGhFLGtDQUFpQztFQUNqQyxtREFBOEM7RUFFOUMsa0NBQWlDLEVBK0JsQztFdEIxRUM7SUFFRSxhQUFZO0lBQ1osZUFBYyxFQUNmO0VBQ0Q7SUFDRSxZQUFXLEVBQ1o7RXNCNkJIO0lBVUksaUJBQWdCLEVBQ2pCO0VBRUQ7SUFiRjtNQWNJLFlBQVc7TUFDWCxjQUFhO01BQ2IsaUJBQWdCLEVBc0JuQjtNQXRDRDtRQW1CTSwwQkFBeUI7UUFDekIsd0JBQXVCO1FBQ3ZCLGtCQUFpQjtRQUNqQiw2QkFBNEIsRUFDN0I7TUF2Qkw7UUEwQk0sb0JBQW1CLEVBQ3BCO01BSUQ7OztRQUdFLGdCQUFlO1FBQ2YsaUJBQWdCLEVBQ2pCLEVBQUE7O0FBSUw7O0VBR0ksa0I1QmdSb0MsRTRCM1FyQztFQUhDO0lBTEo7O01BTU0sa0JBQWlCLEVBRXBCLEVBQUE7O0FBUUg7Ozs7RUFJSSxvQjVCNlA4RDtFNEI1UDlELG1CNUI0UDhELEU0QnRQL0Q7RUFKQztJQVBKOzs7O01BUU0sZ0JBQWU7TUFDZixlQUFlLEVBRWxCLEVBQUE7O0FBV0g7RUFDRSxjNUIrSTZCO0U0QjlJN0Isc0JBQXFCLEVBS3RCO0VBSEM7SUFKRjtNQUtJLGlCQUFnQixFQUVuQixFQUFBOztBQUdEOztFQUVFLGdCQUFlO0VBQ2YsU0FBUTtFQUNSLFFBQU87RUFDUCxjNUJxSTZCLEU0Qi9IOUI7RUFIQztJQVJGOztNQVNJLGlCQUFnQixFQUVuQixFQUFBOztBQUNEO0VBQ0UsT0FBTTtFQUNOLHNCQUFxQixFQUN0Qjs7QUFDRDtFQUNFLFVBQVM7RUFDVCxpQkFBZ0I7RUFDaEIsc0JBQXFCLEVBQ3RCOztBQUtEO0VBQ0UsWUFBVztFQUNYLG1CNUJzTWdFO0U0QnJNaEUsZ0I1QmpIc0Q7RTRCa0h0RCxrQjVCckdvRTtFNEJzR3BFLGE1QmdNcUMsRTRCL0t0QztFQXRCRDtJQVNJLHNCQUFxQixFQUN0QjtFQVZIO0lBYUksZUFBYyxFQUNmO0VBRUQ7SUFDRTs7TUFFRSxtQjVCcUw0RCxFNEJwTDdELEVBQUE7O0FBVUw7RUFDRSxtQkFBa0I7RUFDbEIsYUFBWTtFQUNaLG1CNUJ1S2dFO0U0QnRLaEUsa0JBQWlCO0VDOUxqQixnQkFBb0Q7RUFDcEQsbUJBQXVEO0VEK0x2RCw4QkFBNkI7RUFDN0IsdUJBQXNCO0VBQ3RCLDhCQUE2QjtFQUM3QixtQjVCNUY2QixFNEJrSDlCO0VBL0JEO0lBY0ksV0FBVSxFQUNYO0VBZkg7SUFtQkksZUFBYztJQUNkLFlBQVc7SUFDWCxZQUFXO0lBQ1gsbUJBQWtCLEVBQ25CO0VBdkJIO0lBeUJJLGdCQUFlLEVBQ2hCO0VBRUQ7SUE1QkY7TUE2QkksY0FBYSxFQUVoQixFQUFBOztBQVFEO0VBQ0Usb0I1QmtJZ0UsRTRCckZqRTtFQTlDRDtJQUlJLGtCQUFvQjtJQUNwQixxQkFBb0I7SUFDcEIsa0I1QjVLa0UsRTRCNktuRTtFQUVEO0lBVEY7TUFZTSxpQkFBZ0I7TUFDaEIsWUFBVztNQUNYLFlBQVc7TUFDWCxjQUFhO01BQ2IsOEJBQTZCO01BQzdCLFVBQVM7TUFDVCxpQkFBZ0IsRUFZakI7TUE5Qkw7O1FBcUJRLDJCQUEwQixFQUMzQjtNQXRCUDtRQXdCUSxrQjVCOUw4RCxFNEJtTS9EO1FBN0JQO1VBMkJVLHVCQUFzQixFQUN2QixFQUFBO0VBTVA7SUFsQ0Y7TUFtQ0ksWUFBVztNQUNYLFVBQVMsRUFVWjtNQTlDRDtRQXVDTSxZQUFXLEVBS1o7UUE1Q0w7VUF5Q1Esa0I1QjJGeUU7VTRCMUZ6RSxxQjVCMEZ5RSxFNEJ6RjFFLEVBQUE7O0FBV1A7RUFDRSxtQjVCNEVnRTtFNEIzRWhFLG9CNUIyRWdFO0U0QjFFaEUsbUI1QjBFZ0U7RTRCekVoRSxrQ0FBaUM7RUFDakMscUNBQW9DO0U3QjdONUIscUY2QjhOaUU7RUM3UnpFLGdCQUFvRDtFQUNwRCxtQkFBdUQsRUR5VHhEO0Vic0hDO0lBRUU7TUFDRSxzQkFBcUI7TUFDckIsaUJBQWdCO01BQ2hCLHVCQUFzQixFQUN2QjtJQUdEO01BQ0Usc0JBQXFCO01BQ3JCLFlBQVc7TUFDWCx1QkFBc0IsRUFDdkI7SUFHRDtNQUNFLHNCQUFxQixFQUN0QjtJQUVEO01BQ0Usc0JBQXFCO01BQ3JCLHVCQUFzQixFQU92QjtNQUxDOzs7UUFHRSxZQUFXLEVBQ1o7SUFJSDtNQUNFLFlBQVcsRUFDWjtJQUVEO01BQ0UsaUJBQWdCO01BQ2hCLHVCQUFzQixFQUN2QjtJQUlEOztNQUVFLHNCQUFxQjtNQUNyQixjQUFhO01BQ2IsaUJBQWdCO01BQ2hCLHVCQUFzQixFQUt2QjtNQUhDOztRQUNFLGdCQUFlLEVBQ2hCO0lBRUg7O01BRUUsbUJBQWtCO01BQ2xCLGVBQWMsRUFDZjtJQUdEO01BQ0UsT0FBTSxFQUNQLEVBQUE7RWEzTUQ7SWI4SUE7TWE3SUUsbUJBQWtCLEVBTXJCO01BcEJIO1FBaUJRLGlCQUFnQixFQUNqQixFQUFBO0VBUUw7SUExQkY7TUEyQkksWUFBVztNQUNYLFVBQVM7TUFDVCxlQUFjO01BQ2QsZ0JBQWU7TUFDZixlQUFjO01BQ2Qsa0JBQWlCO003QnhQWCxpQjZCeVBrQixFQUUzQixFQUFBOztBQU1EO0VBQ0UsY0FBYTtFSHBVYiwyQkdxVTRCO0VIcFUzQiwwQkdvVTJCLEVBQzdCOztBQUVEO0VBQ0UsaUJBQWdCO0VIelVoQiw2QnpCMEc2QjtFeUJ6RzVCLDRCekJ5RzRCO0V5QmxHN0IsOEJHbVUrQjtFSGxVOUIsNkJHa1U4QixFQUNoQzs7QUFPRDtFQ2hWRSxnQkFBb0Q7RUFDcEQsbUJBQXVELEVEd1Z4RDtFQVREO0lDaFZFLGlCQUFvRDtJQUNwRCxvQkFBdUQsRURvVnREO0VBTEg7SUNoVkUsaUJBQW9EO0lBQ3BELG9CQUF1RCxFRHVWdEQ7O0FBUUg7RUNoV0UsaUJBQW9EO0VBQ3BELG9CQUF1RCxFRHVXeEQ7RUFMQztJQUhGO01BSUksWUFBVztNQUNYLGtCNUJEOEQ7TTRCRTlELG1CNUJGOEQsRTRCSWpFLEVBQUE7O0FBV0Q7RUFDRTtJQUNFLHVCQUFzQixFQUN2QjtFQUNEO0lBQ0Usd0JBQXVCO0lBQ3pCLG9CNUJyQmdFLEU0QjBCL0Q7SUFQRDtNQUtJLGdCQUFlLEVBQ2hCLEVBQUE7O0FBU0w7RUFDRSwwQm5CcFlxQjtFbUJxWXJCLHNCbkJyWXFCLEVtQnFnQnRCO0VBbElEO0lBS0ksZ0NuQmpYbUMsRW1CdVhwQztJQVhIO01BUU0sWW5CbFhpQztNbUJtWGpDLDhCNUJ2QmdELEU0QndCakQ7RUFWTDtJQWNJLFk1QjVDbUMsRTRCNkNwQztFQWZIO0lBbUJNLGdDbkI5WGlDLEVtQnFZbEM7SUExQkw7TUF1QlEsWW5CaFkrQjtNbUJpWS9CLDhCNUIvQzhDLEU0QmdEL0M7RUF6QlA7SUErQlEsWW5CdlkrQjtJbUJ3WS9CLDhCbkJ2WW1DLEVtQndZcEM7RUFqQ1A7SUF1Q1EsWTVCM0R1QztJNEI0RHZDLDhCNUIzRDhDLEU0QjREL0M7RUF6Q1A7SUE4Q0ksbUI1QnZEMkMsRTRCK0Q1QztJQXRESDtNQWlETSx1QjVCNUR5QyxFNEI2RDFDO0lBbERMO01Bb0RNLHVCNUI5RHlDLEU0QitEMUM7RUFyREw7O0lBMERJLHNCbkI3Ym1CLEVtQjhicEI7RUEzREg7SUFvRVEsOEJuQjNhbUM7SW1CNGFuQyxZbkI3YStCLEVtQjhhaEM7RUFHSDtJQXpFSjtNQTZFVSxnQ25CeGI2QixFbUI4YjlCO01BbkZUO1FBZ0ZZLFluQnpiMkI7UW1CMGIzQiw4QjVCeEcwQyxFNEJ5RzNDO0lBbEZYO01Bd0ZZLFluQmhjMkI7TW1CaWMzQiw4Qm5CaGMrQixFbUJpY2hDO0lBMUZYO01BZ0dZLFk1QnBIbUM7TTRCcUhuQyw4QjVCcEgwQyxFNEJxSDNDLEVBQUE7RUFsR1g7SUE4R0ksZ0NuQnpkbUMsRW1CNmRwQztJQWxISDtNQWdITSxZbkJ6ZGlDLEVtQjBkbEM7RUFqSEw7SUFxSEksZ0NuQmhlbUMsRW1CNGVwQztJQWpJSDtNQXdITSxZbkJqZWlDLEVtQmtlbEM7SUF6SEw7OztNQThIUSxZNUJsSnVDLEU0Qm1KeEM7O0FBT1A7RUFDRSx1QjVCMUk4QztFNEIySTlDLHNCNUIxSXlFLEU0QjJRMUU7RUFuSUQ7SUFLSSxlNUIxSWlFLEU0QmdKbEU7SUFYSDtNQVFNLFk1Qm5JMEM7TTRCb0kxQyw4QjVCbklpRCxFNEJvSWxEO0VBVkw7SUFjSSxlNUJ4SmlFLEU0QnlKbEU7RUFmSDtJQW1CTSxlNUJ4SitELEU0QitKaEU7SUExQkw7TUF1QlEsWTVCM0p3QztNNEI0SnhDLDhCNUIzSitDLEU0QjRKaEQ7RUF6QlA7SUErQlEsWTVCbkt3QztJNEJvS3hDLDBCNUJqS21FLEU0QmtLcEU7RUFqQ1A7SUF1Q1EsWTVCdkt3QztJNEJ3S3hDLDhCNUJ2SytDLEU0QndLaEQ7RUF6Q1A7SUErQ0ksbUI1QnBLNEMsRTRCNEs3QztJQXZESDtNQWtETSx1QjVCekswQyxFNEIwSzNDO0lBbkRMO01BcURNLHVCNUIzSzBDLEU0QjRLM0M7RUF0REw7O0lBMkRJLHNCQUE0QyxFQUM3QztFQTVESDtJQW9FUSwwQjVCck1tRTtJNEJzTW5FLFk1QnpNd0MsRTRCME16QztFQUdIO0lBekVKO01BNkVVLHNCNUJyTmlFLEU0QnNObEU7SUE5RVQ7TUFnRlUsMEI1QnhOaUUsRTRCeU5sRTtJQWpGVDtNQW1GVSxlNUJ4TjJELEU0QjhONUQ7TUF6RlQ7UUFzRlksWTVCMU5vQztRNEIyTnBDLDhCNUIxTjJDLEU0QjJONUM7SUF4Rlg7TUE4RlksWTVCbE9vQztNNEJtT3BDLDBCNUJoTytELEU0QmlPaEU7SUFoR1g7TUFzR1ksWTVCdE9vQztNNEJ1T3BDLDhCNUJ0TzJDLEU0QnVPNUMsRUFBQTtFQXhHWDtJQStHSSxlNUJwUGlFLEU0QndQbEU7SUFuSEg7TUFpSE0sWTVCclAwQyxFNEJzUDNDO0VBbEhMO0lBc0hJLGU1QjNQaUUsRTRCdVFsRTtJQWxJSDtNQXlITSxZNUI3UDBDLEU0QjhQM0M7SUExSEw7OztNQStIUSxZNUIvUHdDLEU0QmdRekM7O0FBS1A7RUFDRSxnQkFBZTtFQUNmLE9BQU07RUFDTixRQUFPO0VBQ1AsU0FBUTtFQUNSLGNBQWE7RUFDYixnQkFBZTtFQUNmLFdBQVU7RUFDViw0Q0FBbUM7VUFBbkMsb0NBQW1DO0VBQ25DLDRDQUF3QztFQUN4QyxpQkFBZ0IsRUE2RGpCO0VBM0R1RDtJQVp4RDtNQWFJLHFDQUFxQjtNQUNyQixtREFBMEM7Y0FBMUMsMkNBQTBDLEVBeUQ3QyxFQUFBO0VBdkVEO0lBa0JJLDBCQUF5QjtJQUN6QixZQUFXLEVBTVo7SUF6Qkg7TUFzQk0sMENBQXFDO01BQ3JDLFlBQVcsRUFDWjtFQXhCTDtJQTZCSSxzQ0FBNEI7WUFBNUIsOEJBQTRCLEVBQzdCO0VBOUJIO0lBaUNJLGlDQUF3QjtZQUF4Qix5QkFBd0I7SUFDeEIsZ0NBQXVCO1lBQXZCLHdCQUF1QixFQVl4Qjs7QUFWQztFQUNFO0lBQ0UsV0FBVTtJQUNWLHdDQUErQjtZQUEvQixnQ0FBK0IsRUFBQTtFQUVqQztJQUNFLFdBQVU7SUFDViw0Q0FBbUM7WUFBbkMsb0NBQW1DLEVBQUEsRUFBQTs7QUFQdkM7RUFDRTtJQUNFLFdBQVU7SUFDVix3Q0FBK0I7WUFBL0IsZ0NBQStCLEVBQUE7RUFFakM7SUFDRSxXQUFVO0lBQ1YsNENBQW1DO1lBQW5DLG9DQUFtQyxFQUFBLEVBQUE7RUEzQzNDO0lBaURJLGlDQUF3QjtZQUF4Qix5QkFBd0I7SUFDeEIsa0NBQXlCO1lBQXpCLDBCQUF5QjtJQUN6Qix1RUFBOEQ7WUFBOUQsK0RBQThELEVBZS9EOztBQWJDO0VBQ0U7SUFDRSxXQUFVO0lBQ1YsNENBQW1DO1lBQW5DLG9DQUFtQyxFQUFBO0VBRXJDO0lBQ0UsV0FBVSxFQUFBO0VBRVo7SUFDRSxXQUFVO0lBQ1Ysd0NBQStCO1lBQS9CLGdDQUErQixFQUFBLEVBQUE7O0FBVm5DO0VBQ0U7SUFDRSxXQUFVO0lBQ1YsNENBQW1DO1lBQW5DLG9DQUFtQyxFQUFBO0VBRXJDO0lBQ0UsV0FBVSxFQUFBO0VBRVo7SUFDRSxXQUFVO0lBQ1Ysd0NBQStCO1lBQS9CLGdDQUErQixFQUFBLEVBQUE7RUFLckM7SUFwRUY7TUFxRUksY0FBYSxFQUVoQixFQUFBOztBRXB0QkQ7RUFDRSxpQkFBZ0IsRUFDakI7O0FBR0Q7RUFDRSxjQUFhO0VBQ2IsaUJBQWdCO0VBQ2hCLGdCQUFlO0VBQ2YsT0FBTTtFQUNOLFNBQVE7RUFDUixVQUFTO0VBQ1QsUUFBTztFQUNQLGM5QjhQNkI7RThCN1A3QixrQ0FBaUM7RUFJakMsV0FBVSxFQVFYO0VBckJEO0kvQjBIRSxzQ0FBb0M7SUFHNUIsOEJBQTRCO0lBcUU1Qiw0QytCaExxQztJL0JnTHJDLG9DK0JoTHFDO0kvQmdMckMscUUrQmhMcUMsRUFDNUM7RUFuQkg7SS9CMEhFLG1DQUFvQztJQUc1QiwyQkFBNEIsRStCekdZOztBQUVsRDtFQUNFLG1CQUFrQjtFQUNsQixpQkFBZ0IsRUFDakI7O0FBR0Q7RUFDRSxtQkFBa0I7RUFDbEIsWUFBVztFQUNYLGFBQVksRUFDYjs7QUFHRDtFQUNFLG1CQUFrQjtFQUNsQix1QjlCaWlCaUQ7RThCaGlCakQsdUI5Qm9pQmlEO0U4Qm5pQmpELHFDOUJpaUIyRDtFOEJoaUIzRCxtQjlCdUQ2QjtFRHpDckIseUMrQmJvQztFQUM1Qyw2QkFBNEI7RUFFNUIsV0FBVSxFQUNYOztBQUdEO0VBQ0UsZ0JBQWU7RUFDZixPQUFNO0VBQ04sU0FBUTtFQUNSLFVBQVM7RUFDVCxRQUFPO0VBQ1AsYzlCK002QjtFOEI5TTdCLHVCOUJzaEJnQyxFOEJsaEJqQztFQVhEO0lYNURFLFdXcUUyQjtJWGxFM0IseUJBQWtDLEVXa0VGO0VBVGxDO0lYNURFLGFuQjJsQjhCO0ltQnhsQjlCLDBCQUFrQyxFV21Fa0I7O0FBS3REO0VBQ0UsYzlCaWdCZ0M7RThCaGdCaEMsaUM5QmdoQm1DO0U4Qi9nQm5DLDJCQUE2RCxFQUM5RDs7QUFFRDtFQUNFLGlCQUFnQixFQUNqQjs7QUFHRDtFQUNFLFVBQVM7RUFDVCx5QjlCNUJtQyxFOEI2QnBDOztBQUlEO0VBQ0UsbUJBQWtCO0VBQ2xCLGM5QjJlZ0MsRThCMWVqQzs7QUFHRDtFQUNFLGM5QnNlZ0M7RThCcmVoQyxrQkFBaUI7RUFDakIsOEI5QnVmbUMsRThCdmVwQztFeEI1R0M7SUFFRSxhQUFZO0lBQ1osZUFBYyxFQUNmO0VBQ0Q7SUFDRSxZQUFXLEVBQ1o7RXdCa0ZIO0lBUUksaUJBQWdCO0lBQ2hCLGlCQUFnQixFQUNqQjtFQVZIO0lBYUksa0JBQWlCLEVBQ2xCO0VBZEg7SUFpQkksZUFBYyxFQUNmOztBQUlIO0VBQ0UsbUJBQWtCO0VBQ2xCLGFBQVk7RUFDWixZQUFXO0VBQ1gsYUFBWTtFQUNaLGlCQUFnQixFQUNqQjs7QUFHRDtFQTFGQTtJQTZGSSxhOUI2ZCtCO0k4QjVkL0Isa0JBQWlCLEVBQ2xCO0VBeEZIO0kvQm1CVSwwQytCdUV1QyxFQUM5QztFQUdEO0lBQVksYTlCc2RxQixFOEJ0ZEQsRUFBQTs7QUFHbEM7RUFDRTtJQUFZLGE5QmdkcUIsRThCaGRELEVBQUE7O0FDOUlsQztFQUNFLG1CQUFrQjtFQUNsQixjL0IwUTZCO0UrQnpRN0IsZUFBYztFQUVkLDREL0JrQ3NFO0UrQmpDdEUsZ0IvQnlDc0Q7RStCeEN0RCxvQkFBbUI7RUFDbkIsaUJBQWdCO0VaWGhCLFdZWWtCO0VaVGxCLHlCQUFrQyxFWWdCbkM7RUFoQkQ7SVpIRSxhbkJ5Z0I4QjtJbUJ0Z0I5QiwwQkFBa0MsRVlXZTtFQVhuRDtJQVlhLGlCQUFpQjtJQUFFLGVBQStCLEVBQUk7RUFabkU7SUFhYSxpQkFBaUI7SUFBRSxlL0I0ZkMsRStCNWZrQztFQWJuRTtJQWNhLGdCQUFpQjtJQUFFLGVBQStCLEVBQUk7RUFkbkU7SUFlYSxrQkFBaUI7SUFBRSxlL0IwZkMsRStCMWZrQzs7QUFJbkU7RUFDRSxpQi9CNmVpQztFK0I1ZWpDLGlCQUFnQjtFQUNoQixZL0I2ZWdDO0UrQjVlaEMsbUJBQWtCO0VBQ2xCLHNCQUFxQjtFQUNyQix1Qi9CNGVnQztFK0IzZWhDLG1CL0I2RTZCLEUrQjVFOUI7O0FBR0Q7RUFDRSxtQkFBa0I7RUFDbEIsU0FBUTtFQUNSLFVBQVM7RUFDVCwwQkFBeUI7RUFDekIsb0JBQW1CLEVBQ3BCOztBQUVEO0VBRUksVUFBUztFQUNULFVBQVM7RUFDVCxrQi9CK2Q2QjtFK0I5ZDdCLHdCQUF5RDtFQUN6RCx1Qi9CeWQ4QixFK0J4ZC9COztBQVBIO0VBU0ksVUFBUztFQUNULFcvQnlkNkI7RStCeGQ3QixvQi9Cd2Q2QjtFK0J2ZDdCLHdCQUF5RDtFQUN6RCx1Qi9Ca2Q4QixFK0JqZC9COztBQWRIO0VBZ0JJLFVBQVM7RUFDVCxVL0JrZDZCO0UrQmpkN0Isb0IvQmlkNkI7RStCaGQ3Qix3QkFBeUQ7RUFDekQsdUIvQjJjOEIsRStCMWMvQjs7QUFyQkg7RUF1QkksU0FBUTtFQUNSLFFBQU87RUFDUCxpQi9CMGM2QjtFK0J6YzdCLDRCQUE4RTtFQUM5RSx5Qi9Cb2M4QixFK0JuYy9COztBQTVCSDtFQThCSSxTQUFRO0VBQ1IsU0FBUTtFQUNSLGlCL0JtYzZCO0UrQmxjN0IsNEIvQmtjNkI7RStCamM3Qix3Qi9CNmI4QixFK0I1Yi9COztBQW5DSDtFQXFDSSxPQUFNO0VBQ04sVUFBUztFQUNULGtCL0I0YjZCO0UrQjNiN0Isd0IvQjJiNkI7RStCMWI3QiwwQi9Cc2I4QixFK0JyYi9COztBQTFDSDtFQTRDSSxPQUFNO0VBQ04sVy9Cc2I2QjtFK0JyYjdCLGlCL0JxYjZCO0UrQnBiN0Isd0IvQm9iNkI7RStCbmI3QiwwQi9CK2E4QixFK0I5YS9COztBQWpESDtFQW1ESSxPQUFNO0VBQ04sVS9CK2E2QjtFK0I5YTdCLGlCL0I4YTZCO0UrQjdhN0Isd0IvQjZhNkI7RStCNWE3QiwwQi9Cd2E4QixFK0J2YS9COztBekJ2RkQ7RUFFRSxhQUFZO0VBQ1osZUFBYyxFQUNmOztBQUNEO0VBQ0UsWUFBVyxFQUNaOztBMEJUSDtFQ1JFLGVBQWM7RUFDZCxrQkFBaUI7RUFDakIsbUJBQWtCLEVEUW5COztBQUNEO0VBQ0Usd0JBQXVCLEVBQ3hCOztBQUNEO0VBQ0UsdUJBQXNCLEVBQ3ZCOztBQU9EO0VBQ0UseUJBQXdCLEVBQ3pCOztBQUNEO0VBQ0UsMEJBQXlCLEVBQzFCOztBQUNEO0VBQ0UsbUJBQWtCLEVBQ25COztBQUNEO0VFekJFLFlBQVc7RUFDWCxtQkFBa0I7RUFDbEIsa0JBQWlCO0VBQ2pCLDhCQUE2QjtFQUM3QixVQUFTLEVGdUJWOztBQU9EO0VBQ0UseUJBQXdCLEVBQ3pCOztBQU1EO0VBQ0UsZ0JBQWUsRUFDaEI7O0FHbENEO0VBQ0Usb0JBQW1CLEVBQUE7O0FDSm5CO0VBQ0UseUJBQXdCLEVBQ3pCOztBQUZEO0VBQ0UseUJBQXdCLEVBQ3pCOztBQUZEO0VBQ0UseUJBQXdCLEVBQ3pCOztBQUZEO0VBQ0UseUJBQXdCLEVBQ3pCOztBRGNIOzs7Ozs7Ozs7Ozs7RUFZRSx5QkFBd0IsRUFDekI7O0FBRUQ7RUMvQkU7SUFWRSwwQkFBeUIsRUFDMUI7RUFDRDtJQUFtQixlQUFjLEVBQUk7RUFDckM7SUFBbUIsOEJBQTZCLEVBQUk7RUFDcEQ7O0lBQ21CLCtCQUE4QixFQUFJLEVBQUE7O0FEd0NyRDtFQURGO0lBRUksMEJBQXlCLEVBRTVCLEVBQUE7O0FBRUM7RUFERjtJQUVJLDJCQUEwQixFQUU3QixFQUFBOztBQUVDO0VBREY7SUFFSSxpQ0FBZ0MsRUFFbkMsRUFBQTs7QUFFRDtFQ2xERTtJQVZFLDBCQUF5QixFQUMxQjtFQUNEO0lBQW1CLGVBQWMsRUFBSTtFQUNyQztJQUFtQiw4QkFBNkIsRUFBSTtFQUNwRDs7SUFDbUIsK0JBQThCLEVBQUksRUFBQTs7QUQyRHJEO0VBREY7SUFFSSwwQkFBeUIsRUFFNUIsRUFBQTs7QUFFQztFQURGO0lBRUksMkJBQTBCLEVBRTdCLEVBQUE7O0FBRUM7RUFERjtJQUVJLGlDQUFnQyxFQUVuQyxFQUFBOztBQUVEO0VDckVFO0lBVkUsMEJBQXlCLEVBQzFCO0VBQ0Q7SUFBbUIsZUFBYyxFQUFJO0VBQ3JDO0lBQW1CLDhCQUE2QixFQUFJO0VBQ3BEOztJQUNtQiwrQkFBOEIsRUFBSSxFQUFBOztBRDhFckQ7RUFERjtJQUVJLDBCQUF5QixFQUU1QixFQUFBOztBQUVDO0VBREY7SUFFSSwyQkFBMEIsRUFFN0IsRUFBQTs7QUFFQztFQURGO0lBRUksaUNBQWdDLEVBRW5DLEVBQUE7O0FBRUQ7RUN4RkU7SUFWRSwwQkFBeUIsRUFDMUI7RUFDRDtJQUFtQixlQUFjLEVBQUk7RUFDckM7SUFBbUIsOEJBQTZCLEVBQUk7RUFDcEQ7O0lBQ21CLCtCQUE4QixFQUFJLEVBQUE7O0FEaUdyRDtFQURGO0lBRUksMEJBQXlCLEVBRTVCLEVBQUE7O0FBRUM7RUFERjtJQUVJLDJCQUEwQixFQUU3QixFQUFBOztBQUVDO0VBREY7SUFFSSxpQ0FBZ0MsRUFFbkMsRUFBQTs7QUFFRDtFQzNHRTtJQUNFLHlCQUF3QixFQUN6QixFQUFBOztBRDZHSDtFQy9HRTtJQUNFLHlCQUF3QixFQUN6QixFQUFBOztBRGlISDtFQ25IRTtJQUNFLHlCQUF3QixFQUN6QixFQUFBOztBRHFISDtFQ3ZIRTtJQUNFLHlCQUF3QixFQUN6QixFQUFBOztBQUZEO0VBQ0UseUJBQXdCLEVBQ3pCOztBRGtJSDtFQ3BJRTtJQVZFLDBCQUF5QixFQUMxQjtFQUNEO0lBQW1CLGVBQWMsRUFBSTtFQUNyQztJQUFtQiw4QkFBNkIsRUFBSTtFQUNwRDs7SUFDbUIsK0JBQThCLEVBQUksRUFBQTs7QUQ0SXZEO0VBQ0UseUJBQXdCLEVBS3pCO0VBSEM7SUFIRjtNQUlJLDBCQUF5QixFQUU1QixFQUFBOztBQUNEO0VBQ0UseUJBQXdCLEVBS3pCO0VBSEM7SUFIRjtNQUlJLDJCQUEwQixFQUU3QixFQUFBOztBQUNEO0VBQ0UseUJBQXdCLEVBS3pCO0VBSEM7SUFIRjtNQUlJLGlDQUFnQyxFQUVuQyxFQUFBOztBQUVEO0VDN0pFO0lBQ0UseUJBQXdCLEVBQ3pCLEVBQUE7O0FuQlhIO0V6Qm9DRSxpQkFBZ0I7RUFDaEIsbUJBQWtCO0VBRWxCLHdCQUF1QjtFQUN2QixnQkFBZSxFQW9FaEI7RUF6RUQ7SUFRSSxvQmlCMUNtQjtJakIyQ25CLGFBQVk7SUFDWiw0Q0FBMkM7SUFDM0Msb0NBQW1DO0lBQ25DLGdCQUFlO0lBQ2Ysa0JBQWlCO0lBQ2pCLG1CQUFrQixFQU1uQjtJQXBCSDtNQWlCTSxZQUFXO01BQ1gsb0JBQW1CLEVBQ3BCO0VBbkJMO0lBdUJJLGVpQnpEbUI7SWpCMERuQixzQmlCMURtQjtJakIyRG5CLDBCQUF1QjtJQUN2Qiw0Q0FBMkM7SUFDM0Msb0NBQW1DLEVBTXBDO0lBakNIO01BOEJNLGFBQVk7TUFDWiwwQmlCakVpQixFakJrRWxCO0VBaENMO0lBc0NNLG1CQUFrQjtJQUNsQixhQUFZO0lBQ1osZ0JBQWU7SUFDZixpQkFBZ0I7SUFDaEIsbUJBQWtCO0lBQ2xCLHlDQUFxQztJQUNyQyxtQkFBa0IsRUFDbkI7RUE3Q0w7SUFnRE0sb0JBQW1CO0lBQ25CLG1CQUFrQixFQVNuQjtJQTFETDtNQW9EUSxnQkFBZTtNQUNmLG1CQUFrQjtNQUNsQixTQUFRO01BQ1IsV0FBVTtNQUNWLGlCQUFnQixFQUNqQjtFQXpEUDtJQTZETSxvQkFBbUI7SUFDbkIsbUJBQWtCO0lBQ2xCLGlCQUFnQixFQVFqQjtJQXZFTDtNQWtFUSxnQkFBZTtNQUNmLG1CQUFrQjtNQUNsQixTQUFRO01BQ1IsV0FBVSxFQUNYOztBQUtQO0VBQ0Usa0JBQWlCO0VBQ2pCLHFCQUFvQjtFQUNwQixvQ0FBbUMsRUFrRXBDO0VBckVEO0lBTUksYUFBWSxFQUNiO0VBUEg7SUFVSSxhQUFZLEVBMERiO0lBeERDO01BWko7UUFhTSxZQUFXLEVBdURkLEVBQUE7SUFwRUg7TUFpQk0sZUFoSWU7TUFpSWYsc0JBQXFCO01BQ3JCLGlCQUFnQjtNQUNoQixzQkFBcUI7TUFDckIsZ0JBQWU7TUFDZixrQkFBaUIsRUFZbEI7TUFsQ0w7UUEwQlEsZWlCN0hlO1FqQjhIZixpQkFBZ0IsRUFDakI7TUFFRDtRQTlCTjtVQStCUSxZQUFXO1VBQ1gsbUJBQWtCLEVBRXJCLEVBQUE7SUFsQ0w7TUFxQ00sa0JBQWlCO01BQ2pCLGlCQUFnQixFQVFqQjtNQTlDTDtRQXlDUSwrQmlCOUllO1FqQitJZixpQkFBZ0I7UUFDaEIsa0JBQWlCO1FBQ2pCLG1CQUNGLEVBQUM7SUE3Q1A7TUFpRE0sZWlCOUppQixFakJxS2xCO01BeERMO1FBcURRLGVBQXdCO1FBQ3hCLGlCQUFnQixFQUNqQjtJQXZEUDtNQTJETSxvQmlCeEtpQjtNakJ5S2pCLGFBQVk7TUFDWiwyQkFBMEIsRUFNM0I7TUFuRUw7UUFnRVEsb0JBQTRCO1FBQzVCLGFBQVksRUFDYjs7QUFLUDtFQUNFLGtCQUFpQjtFQUNqQixxQkFBb0I7RUFDcEIsbUJBQWtCLEVBc0RuQjtFQXpERDtJQU1JLGlCQUFnQjtJQUNoQixnQkFBZTtJQUNmLGlCQUFnQixFQUNqQjtFQVRIO0lBWUksaUJBQWdCO0lBQ2hCLGdCQUFlO0lBQ2Ysb0JBQW1CO0lBQ25CLGVpQnJMbUIsRWpCMExwQjtJQXBCSDtNQWtCTSxpQkFBZ0IsRUFDakI7RUFuQkw7SUF1QkksZ0JBQWU7SUFDZixpQkFBZ0IsRUFPakI7SUEvQkg7TUEyQk0saUJBQWdCO01BQ2hCLGdCQUFlO01BQ2Ysa0JBQWlCLEVBQ2xCO0VBOUJMO0lBa0NJLGlCQUFnQjtJQUNoQixnQkFBZTtJQUNmLGVpQjNNbUI7SWpCNE1uQixvQkFBbUIsRUFDcEI7RUF0Q0g7SUF5Q0ksbUJBQWtCO0lBQ2xCLG1GQUFrRjtJQUNsRixzQkFBcUI7SUFDckIsaUNBQWdDLEVBQ2pDO0VBN0NIO0lBZ0RJLGlCQUFnQixFQUNqQjtFQWpESDtJQW9ESSxvQkFqUGE7SUFrUGIsc0JBQXFCO0lBQ3JCLHNCQUFxQjtJQUNyQixpQ2lCbE9tQixFakJtT3BCOztBQUdIO0VBQ0UsMEJpQnZPcUI7RWpCd09yQixtQkFBa0I7RUFDbEIsbUJBQWtCO0VBQ2xCLGdCQUFlO0VBQ2YsNkJBQTRCLEVBYzdCO0VBbkJEO0lBUUksZWlCN09tQixFakI4T3BCO0VBVEg7SUFZSSxlaUJqUG1CLEVqQmtQcEI7RUFiSDtJQWdCSSxzQmlCL1BtQjtJakJnUW5CLGNBQWEsRUFDZDs7QUFHSDtFQUNFLG9CQUFtQjtFQUNuQixlQTNRZ0I7RUE0UWhCLGdCQUFlO0VBQ2YsaUJBQWdCLEVBMENqQjtFQTlDRDtJQU9JLHlGQUF3RjtJQUN4RiwyQkFBMEIsRUFDM0I7RUFUSDtJQVlJLGFBQVk7SUFDWixnQkFBZTtJQUNmLGlCQUFnQixFQUNqQjtFQWZIO0lBa0JJLGdCQUFlLEVBMkJoQjtJQTdDSDtNQXFCTSxtQkFBa0I7TUFDbEIsZWlCMVJpQjtNakIyUmpCLHNCQUFxQixFQXFCdEI7TUE1Q0w7UUEwQlEsWUFBVztRQUNYLGdCQUFlO1FBQ2YsbUJBQWtCO1FBQ2xCLFFBQU87UUFDUCxTQUFRO1FBQ1IsYUFBWTtRQUNaLGlDaUJwU2U7UWpCcVNmLDZCQUE0QixFQUM3QjtNQWxDUDtRQXFDUSxlQUF5QjtRQUN6QixzQkFBcUIsRUFLdEI7UUEzQ1A7VUF5Q1Usc0JBQWdDLEVBQ2pDOztBQU1UO0VBQ0UsaUJBQWdCLEVBd0NqQjtFQXpDRDtJQUlJLG1CQUFrQjtJQUNsQixrQkFBaUIsRUF5QmxCO0lBOUJIO01BUU0saUJBQWdCO01BQ2hCLG1CQUFrQjtNQUNsQixnQkFBZSxFQUNoQjtJQVhMO01BY00sYUFBWSxFQUliO01BSEM7UUFmTjtVQWdCUSxZQUFXLEVBRWQsRUFBQTtJQWxCTDtNQXFCTSw2RUFBNEU7TUFDNUUsc0JBQXFCO01BQ3JCLFlBQVc7TUFDWCxhQUFZO01BQ1osWUFBVztNQUNYLG1CQUFrQjtNQUNsQixtQkFBa0I7TUFDbEIsa0JBQWlCLEVBQ2xCO0VBR0g7SUFoQ0Y7TUFpQ0ksa0JBQWlCO01BQ2pCLG1CQUFrQixFQU9yQjtNQXpDRDtRQXFDTSxlQUFjO1FBQ2Qsb0JBQW1CLEVBQ3BCLEVBQUE7O0FBSUw7RUFDRSxlaUJ0VnFCO0VqQnVWckIsa0JBQWlCLEVBK0psQjtFQWpLRDtJQUtJLHFCQUFhO0lBQWIsY0FBYTtJQUNiLHdCQUFtQjtRQUFuQixvQkFBbUI7SUFDbkIsY0FBYTtJQUNiLGVBQWMsRUFvQmY7SUFuQkM7TUFUSjtRQVVNLFlBQVcsRUFrQmQsRUFBQTtJQWhCQztNQVpKO1FBYU0sZUFBYyxFQWVqQjtRQTVCSDs7O1VBa0JRLFlBQVc7VUFDWCxlQUFjO1VBQ2QsbUJBQWtCLEVBQ25CO1FBckJQO1VBd0JRLDBCQUE2QjtjQUE3Qiw4QkFBNkI7VUFDN0IsaUJBQWdCLEVBQ2pCLEVBQUE7RUExQlA7SUFnQ0ksYUFBWTtJQUNaLHFCQUFZO1FBQVosYUFBWTtJQUNaLHFCQUFjO1FBQWQsZUFBYztJQUNkLG1CQUFrQjtJQUNsQixnQkFBZSxFQWdCaEI7SUFwREg7TUF1Q00sa0JBQWlCO01BQ2pCLGVpQjdYaUI7TWpCOFhqQixpQkFBZ0IsRUFDakI7SUExQ0w7TUE2Q00sYUFBWTtNQUNaLG9CQUFtQixFQUNwQjtJQUVEO01BakRKO1FBa0RNLGtCQUFpQixFQUVwQixFQUFBO0VBcERIO0lBdURJLGFBQVk7SUFDWixxQkFBWTtRQUFaLGFBQVk7SUFDWixxQkFBYztRQUFkLGVBQWM7SUFDZCxrQkFBaUIsRUFPbEI7SUFOQztNQTNESjtRQTRETSxpQkFBZ0IsRUFLbkIsRUFBQTtJQUhDO01BOURKO1FBK0RNLHlCQUF3QixFQUUzQixFQUFBO0VBakVIO0lBb0VJLG1FQUFrRTtJQUNsRSx1QkFBc0I7SUFDdEIsYUFBWTtJQUNaLGNBQWE7SUFDYiw2QkFBNEI7SUFDNUIsZ0JBQWU7SUFDZixlaUIzWm1CLEVqQjBhcEI7SUF6Rkg7TUE2RU0sZWlCOVppQjtNakIrWmpCLGtCQUFpQjtNQUNqQixpQkFBZ0IsRUFDakI7SUFoRkw7TUFtRk0sZWlCbGJpQixFakJ1YmxCO01BeEZMO1FBc0ZRLGVBQXVCLEVBQ3hCO0VBdkZQO0lBNEZJLHFCQUFhO0lBQWIsY0FBYTtJQUNiLHdCQUFtQjtRQUFuQixvQkFBbUI7SUFDbkIsdUJBQThCO1FBQTlCLCtCQUE4QjtJQUM5QixxQkFBWTtRQUFaLGFBQVksRUFLYjtJQXBHSDtNQWtHTSxzQkFBcUIsRUFDdEI7RUFuR0w7SUF1R0ksaUJBQWdCO0lBQ2hCLFdBQVUsRUFNWDtJQTlHSDtNQTJHTSxnQkFBZTtNQUNmLGlCQUFnQixFQUNqQjtFQTdHTDtJQWlISSxlQUFjO0lBQ2Qsc0JBQXFCLEVBTXRCO0lBeEhIO01BcUhNLGVBQWM7TUFDZCxzQkFBcUIsRUFDdEI7RUF2SEw7SUEySEksaUJBQWdCO0lBQ2hCLGdCQUFlO0lBQ2YsZWlCOWNtQjtJakIrY25CLG9CQUFtQixFQUNwQjtFQS9ISDtJQWtJSSxtQkFBa0I7SUFDbEIsaUJBQWdCO0lBQ2hCLGtCQUFpQjtJQUNqQixxQkFBb0I7SUFDcEIsbUJBQWtCLEVBMEJuQjtJQWhLSDtNQXlJTSxZQUFXO01BQ1gsYUFBWTtNQUNaLG1CQUFrQjtNQUNsQixpQkFBZ0IsRUFDakI7SUE3SUw7TUFnSk0sZUFBYztNQUNkLGVpQnZlaUI7TWpCd2VqQixnQkFBZSxFQUNoQjtJQW5KTDtNQXNKTSxZQUFXO01BQ1gsWUFBVztNQUNYLFlBQVc7TUFDWCxpQ2lCaGZpQjtNakJpZmpCLG1CQUFrQjtNQUNsQixPQUFNO01BQ04sUUFBTztNQUNQLFNBQVE7TUFDUixlQUFjLEVBQ2Y7O0FBS0w7RUFDRSxlaUJ0ZnFCO0VqQnVmckIsb0NBQW1DLEVBeVhwQztFQTNYRDtJQUtJLGdGQUErRTtJQUMvRSx1QkFBc0I7SUFDdEIsa0JBQWlCLEVBb0VsQjtJQWxFQztNQVRKO1FBVU0sbUNBQWtDLEVBaUVyQztRQTNFSDtVQWFRLGdCQUFlLEVBQ2hCLEVBQUE7SUFHSDtNQWpCSjtRQWtCTSxtQ0FBa0MsRUF5RHJDLEVBQUE7SUF0REM7TUFyQko7UUFzQk0sbUNBQWtDLEVBcURyQyxFQUFBO0lBbERDO01BekJKO1FBMEJNLG1DQUFrQyxFQWlEckMsRUFBQTtJQTlDQztNQTdCSjtRQThCTSxtQ0FBa0MsRUE2Q3JDLEVBQUE7SUExQ0M7TUFqQ0o7UUFrQ00sdUJRcFAyQztRUnFQM0Msa0JBQWlCO1FBQ2pCLG1DQUFrQyxFQXVDckMsRUFBQTtJQTNFSDtNQXdDTSxrQkFBaUI7TUFDakIsY0FBYSxFQWlDZDtNQTFFTDtRQTRDUSxpQkFBZ0I7UUFDaEIsZ0JBQWU7UUFDZix3QkFBdUI7UUFDdkIsaUJBQWdCLEVBV2pCO1FBMURQO1VBa0RVLGVpQnJqQmE7VWpCc2pCYixzQkFBcUI7VUFDckIsc0JBQXFCLEVBS3RCO1VBekRUO1lBdURZLGVBQXlCLEVBQzFCO01BeERYO1FBNkRRLGVBQWM7UUFDZCxnQkFBZTtRQUNmLGlCQUFnQjtRQUNoQixpQkFBZ0I7UUFDaEIsdUJBQXNCO1FBQ3RCLG9DQUFtQztRQUNuQyxrQkFBaUIsRUFNbEI7UUF6RVA7VUFzRVUsaUJBQWdCO1VBQ2hCLGVpQjdqQmEsRWpCOGpCZDtFQXhFVDtJQThFSSxnQkFBZTtJQUNmLGVpQnhrQm1CO0lqQnlrQm5CLG1CQUFrQjtJQUNsQixpQkFBZ0I7SUFDaEIsb0JBQW1CLEVBYXBCO0lBL0ZIO01BcUZNLG9CQUFtQjtNQUNuQixpQkFBZ0IsRUFDakI7SUF2Rkw7TUEwRk0sYUFBWSxFQUliO01BSEM7UUEzRk47VUE0RlEsWUFBVyxFQUVkLEVBQUE7RUE5Rkw7SUFrR0ksa0JBQWlCO0lBQ2pCLGdFQUE4RDtJQUM5RCxtQkFBa0IsRUFpR25CO0lBck1IO01BdUdNLGtCQUFpQjtNQUNqQixxQkFBb0IsRUFDckI7SUF6R0w7OztNQThHTSxhQUFZLEVBQ2I7SUEvR0w7TUFrSE0saUJBQWdCLEVBQ2pCO0lBbkhMO01Bc0hNLGdCQUFlO01BQ2YsaUJBQWdCLEVBQ2pCO0lBeEhMO01BMkhNLGFBQVk7TUFDWixpQkFBZ0I7TUFDaEIsa0JBQWlCO01BQ2pCLGdCQUFlLEVBQ2hCO0lBL0hMO01BbUlRLGlCQUFnQixFQUNqQjtJQXBJUDtNQXVJUSxnQkFBZSxFQUNoQjtJQXhJUDtNQTRJTSxzQkFBcUI7TUFDckIsYUFBWTtNQUNaLG1CQUFrQjtNQUNsQixxQkFBb0I7TUFDcEIsbUJBQWtCO01BQ2xCLGlDQUFnQztNQUNoQyx1QkFBc0I7TUFDdEIsbUJBQWtCLEVBaURuQjtNQXBNTDtRQXNKUSxnQkFBZSxFQUtoQjtRQTNKUDtVQXlKVSxjQUFhLEVBQ2Q7TUExSlQ7UUE4SlEsMERBQXlELEVBQzFEO01BL0pQO1FBa0tRLDREQUEyRCxFQUM1RDtNQW5LUDtRQXNLUSw2REFBNEQsRUFDN0Q7TUF2S1A7UUEwS1EsZ0ZBQStFO1FBQy9FLHNCQUFxQjtRQUNyQixZQUFXO1FBQ1gsYUFBWTtRQUNaLFlBQVc7UUFDWCxtQkFBa0I7UUFDbEIsVUFBUztRQUNULGFBQVksRUFDYjtNQUVEO1FBcExOO1VBcUxRLG1CQUFrQjtVQUNsQixhQUFZLEVBY2Y7VUFwTUw7WUF5TFUsYUFBWSxFQUNiLEVBQUE7TUFFSDtRQTVMTjtVQTZMUSxnQkFBZTtVQUNmLFlBQVcsRUFNZDtVQXBNTDtZQWlNVSxXQUFVLEVBQ1gsRUFBQTtFQWxNVDtJQXlNTSxjQUFhO0lBQ2IsbUJBQWtCLEVBQ25CO0VBM01MO0lBOE1NLG9CQUFtQjtJQUNuQiwrQkFBOEI7SUFDOUIsdUJBQXNCLEVBZ0J2QjtJQWRDO01BbE5OO1FBbU5RLG9CQUFtQjtRQUNuQixjQUFhO1FBQ2Isb0JBQW1CLEVBV3RCLEVBQUE7SUFSQztNQXhOTjtRQXlOUSxtQkFBa0I7UUFDbEIsc0JBQXFCO1FBQ3JCLG1DQUFrQztRQUNsQyx1QkFBc0I7UUFDdEIsbUJBQWtCO1FBQ2xCLGFBQVksRUFFZixFQUFBO0VBaE9MO0lBbU9NLG9CQUFtQixFQXNCcEI7SUF6UEw7TUFzT1EscUJBQW9CO01BQ3BCLGdDQUErQjtNQUMvQix1QkFBc0IsRUFnQnZCO01BZEM7UUExT1I7VUEyT1Usb0JBQW1CO1VBQ25CLGNBQWE7VUFDYixxQkFBb0IsRUFXdkIsRUFBQTtNQVJDO1FBaFBSO1VBaVBVLG9CQUFtQjtVQUNuQixzQkFBcUI7VUFDckIsbUNBQWtDO1VBQ2xDLHVCQUFzQjtVQUN0QixtQkFBa0I7VUFDbEIsYUFBWSxFQUVmLEVBQUE7RUF4UFA7SUE0UE0sNERBQTJELEVBSzVEO0lBSkM7TUE3UE47UUE4UFEsdUJBQXNCO1FBQ3RCLHNCQUFxQixFQUV4QixFQUFBO0VBalFMO0lBb1FNLDZEQUE0RCxFQUM3RDtFQXJRTDtJQXdRTSxpRUFBZ0UsRUFDakU7RUF6UUw7SUE0UU0sK0RBQThELEVBQy9EO0VBN1FMO0lBZ1JNLGtDQUFpQztJQUNqQyw0REFBMkQ7SUFDM0QscUJBQW9CLEVBU3JCO0lBUEM7TUFwUk47UUFxUlEsdUJBQXNCLEVBTXpCLEVBQUE7SUFIQztNQXhSTjtRQXlSUSx1QkFBc0IsRUFFekIsRUFBQTtFQTNSTDtJQThSTSxnQkFBZTtJQUNmLGlCQUFnQjtJQUNoQixtQkFBa0I7SUFDbEIsb0JBQW1CO0lBQ25CLHdCQUF1QixFQUN4QjtFQW5TTDtJQXNTTSxlQUFjO0lBQ2QsZ0JBQWU7SUFDZixpQkFBZ0I7SUFDaEIsbUJBQWtCO0lBQ2xCLG9CQUFtQixFQU1wQjtJQWhUTDs7TUE4U1EsaUJBQWdCLEVBQ2pCO0VBL1NQO0lBbVRNLGFBQVksRUFDYjtFQXBUTDtJQXlUTSwrRkFBOEY7SUFDOUYsd0JBQXVCLEVBaUJ4QjtJQTNVTDtNQTZUUSxjQUFhO01BQ2IsbUJBQWtCLEVBWW5CO01BMVVQO1FBaVVVLGFBQVk7UUFDWixnQkFBZTtRQUNmLGlCQUFnQixFQUNqQjtNQXBVVDtRQXVVVSxlaUJoMEJhO1FqQmkwQmIsZ0JBQWUsRUFDaEI7RUF6VVQ7SUE4VU0sZ0dBQStGO0lBQy9GLHdCQUF1QixFQXFDeEI7SUFwWEw7TUFrVlEsY0FBYTtNQUNiLG1CQUFrQjtNQUNsQixrQkFBaUIsRUErQmxCO01BblhQO1FBdVZVLGVpQmgxQmE7UWpCaTFCYixnQkFBZTtRQUNmLGlCQUFnQixFQUNqQjtNQTFWVDtRQTZWVSxhQUFZLEVBcUJiO1FBbFhUO1VBZ1dZLHNGQUFxRjtVQUNyRix1QkFBc0I7VUFDdEIsYUFBWSxFQUtiO1VBSkM7WUFuV1o7Y0FvV2MsdUJBQXNCO2NBQ3RCLGFBQVksRUFFZixFQUFBO1FBdldYO1VBMFdZLDBGQUF5RjtVQUN6Rix1QkFBc0I7VUFDdEIsYUFBWSxFQUtiO1VBSkM7WUE3V1o7Y0E4V2MsdUJBQXNCO2NBQ3RCLGFBQVksRUFFZixFQUFBO0VBalhYO0lBdVhNLGlCQUFnQjtJQUNoQixlaUJuM0JpQixFakJvM0JsQjs7QUFJTDtFQUNFLHFCQUFhO0VBQWIsY0FBYTtFQUNiLHNCQUF1QjtNQUF2Qix3QkFBdUI7RUFDdkIsd0JBQW1CO01BQW5CLG9CQUFtQjtFQUNuQixvQ0FBbUMsRUE4THBDO0VBbE1EO0lBT0ksbUJBQWtCLEVBcUJuQjtJQTVCSDtNQVVNLGlCQUFnQjtNQUNoQixVQUFTO01BQ1QsaUNpQm40QmlCO01qQm80QmpCLGVpQm40QmlCO01qQm80QmpCLGdCQUFlO01BQ2Ysa0JBQWlCO01BQ2pCLHdDQUF1QztNQUN2QyxXQUFVO01BQ1Ysb0JBQW1CO01BQ25CLGdCQUFlO01BQ2YsaUJBQWdCLEVBT2pCO01BM0JMO1FBd0JRLGVpQng1QmU7UWpCeTVCZixzQmlCejVCZSxFakIwNUJoQjtFQTFCUDtJQStCSSwwQmlCdjVCbUI7SWpCdzVCbkIsbUJBQWtCO0lBQ2xCLG1CQUFrQjtJQUNsQixpQkFBZ0I7SUFDaEIsbUJBQWtCO0lBQ2xCLHdCQUF1QjtJQUN2QixpQkFBZ0I7SUFDaEIsaUJBQWdCO0lBQ2hCLGVpQjE1Qm1CO0lqQjI1Qm5CLGtCQUFpQixFQW1KbEI7SUEzTEg7TUEyQ00sV0FBVTtNQUNWLG1CQUFrQjtNQUNsQix5QkFBd0I7TUFDeEIsUUFBTztNQUNQLFNBQVEsRUFNVDtNQXJETDtRQWtEUSxXQUFVO1FBQ1YsbUNBQTBCO2dCQUExQiwyQkFBMEIsRUFDM0I7SUFwRFA7TUF3RE0saUJBQWdCO01BQ2hCLGFBQVk7TUFDWixnQkFBZTtNQUNmLG1CQUFrQixFQXlDbkI7TUFwR0w7UUErRFEsNEVBQTJFO1FBQzNFLHNCQUFxQjtRQUNyQixZQUFXO1FBQ1gsYUFBWTtRQUNaLFlBQVc7UUFDWCxtQkFBa0I7UUFDbEIsWUFBVyxFQUNaO01BdEVQO1FBeUVRLFdBQVU7UUFDVixhQUFZLEVBQ2I7TUEzRVA7UUE4RVEsZ0JBQWU7UUFDZixnQkFBZTtRQUNmLGlCQUFnQjtRQUNoQixrQkFBaUIsRUFDbEI7TUFsRlA7UUFxRlEsZ0JBQWU7UUFDZixnQkFBZTtRQUNmLGlCQUFnQjtRQUNoQixlQTc5QlUsRUFtK0JYO1FBOUZQO1VBMkZVLGVBQWM7VUFDZCxpQkFBZ0IsRUFDakI7TUE3RlQ7UUFpR1EsaUJBQWdCLEVBQ2pCO0lBbEdQO01Bc0dnQixlQUFjLEVBQUk7SUF0R2xDO01BdUdlLGVBQWMsRUFBSTtJQXZHakM7TUF3R2UsZUFBYyxFQUFJO0lBeEdqQztNQXlHb0IsZUFBYyxFQUFJO0lBekd0QztNQTRHTSxXQUFVLEVBcURYO01BaktMOzs7O1FBa0hRLGVpQnArQmU7UWpCcStCZixVQUFTLEVBQ1Y7TUFwSFA7UUF1SFEsZ0JBQWU7UUFDZiwwQkFBeUI7UUFDekIsb0JBQW1CO1FBQ25CLGlCQUFnQjtRQUNoQixvQkFBbUIsRUFDcEI7TUE1SFA7UUErSFEsZ0JBQWU7UUFDZixpQkFBZ0I7UUFDaEIsYUFBWTtRQUNaLG1CQUFrQjtRQUNsQixZQUFXLEVBc0JaO1FBekpQO1VBc0lVLGdCQUFlO1VBQ2YsV0FBVSxFQUNYO1FBeElUO1VBMklVLGdCQUFlO1VBQ2YsaUJBQWdCO1VBQ2hCLFVBQVMsRUFDVjtRQTlJVDtVQWlKVSxnQkFBZTtVQUNmLHNCQUFxQixFQU10QjtVQXhKVDtZQXNKWSxlaUJ0aENXLEVqQnVoQ1o7TUF2Slg7UUE0SlEsZ0JBQWU7UUFDZixpQkFBZ0I7UUFDaEIsZWlCcGhDZTtRakJxaENmLG9CQUFtQixFQUNwQjtJQWhLUDtNQW9LTSxpQkFBZ0I7TUFDaEIsa0JBQWlCLEVBaUJsQjtNQXRMTDtRQXdLUSxrQkFBaUI7UUFDakIsZ0JBQWU7UUFDZixnQkFBZTtRQUNmLGlCQUFnQixFQVVqQjtRQXJMUDtVQThLVSxpQkFBZ0I7VUFDaEIsZWlCamlDYSxFakJraUNkO1FBaExUO1VBbUxVLG9CQUFtQixFQUNwQjtJQUlMO01BeExKO1FBeUxNLGFBQVksRUFFZixFQUFBO0VBRUQ7SUE3TEY7TUErTEksaUJBQWdCO01BQ2hCLGVBQWMsRUFFakIsRUFBQTs7QUFFRDtFQUVJLG1CQUFrQjtFQUNsQixrQkFBaUI7RUFDakIsaUJBQWdCLEVBQ2pCOztBQUxIO0VBUUksZ0JBQWU7RUFDZixpQkFBZ0I7RUFDaEIsb0JBQW1CO0VBQ25CLGVBQWMsRUFDZjs7QUFaSDtFQWVJLGdCQUFlO0VBQ2YsZWlCeGtDbUI7RWpCeWtDbkIsbUJBQWtCO0VBQ2xCLGlCQUFnQixFQUNqQjs7QUFuQkg7RUFzQkksZ0JBQWU7RUFDZixxQkFBYTtFQUFiLGNBQWE7RUFDYix3QkFBbUI7TUFBbkIsb0JBQW1CO0VBQ25CLHVCQUE4QjtNQUE5QiwrQkFBOEIsRUFDL0I7O0FBMUJIO0VBNkJJLGFBQVk7RUFDWixpQkFBZ0I7RUFDaEIsbUJBQWtCO0VBQ2xCLG1CQUFrQjtFQUNsQixvQkFBbUIsRUFrQnBCO0VBbkRIO0lBb0NNLDRFQUEyRTtJQUMzRSxzQkFBcUI7SUFDckIsbUJBQWtCO0lBQ2xCLFlBQVc7SUFDWCxZQUFXO0lBQ1gsYUFBWTtJQUNaLFFBQU87SUFDUCxPQUFNLEVBQ1A7RUE1Q0w7SUE4QzBCLGtDQUFpQyxFQUFJO0VBOUMvRDtJQStDMEIsa0NBQWlDLEVBQUk7RUEvQy9EO0lBZ0QwQixrQ0FBaUMsRUFBSTtFQWhEL0Q7SUFpRDBCLGtDQUFpQyxFQUFJO0VBakQvRDtJQWtEMEIsbUNBQWtDLEVBQUk7O0FBS2hFO0VBQ0Usb0JBQW1CO0VBQ25CLHNCQUFxQixFQStDdEI7RUFqREQ7SUFLSSxtQkFBa0I7SUFDbEIscUJBQW9CLEVBQ3JCO0VBUEg7SUFVSSxxQkFBYTtJQUFiLGNBQWE7SUFDYixzQkFBdUI7UUFBdkIsd0JBQXVCO0lBQ3ZCLG9DQUFtQyxFQUNwQztFQWJIO0lBZ0JJLGlCQUFnQjtJQUNoQixlQUFjLEVBbUJmO0lBcENIO01Bb0JNLGlCQUFnQjtNQUNoQixnQkFBZTtNQUNmLG9CQUFtQjtNQUNuQixrQkFBaUIsRUFDbEI7SUF4Qkw7TUEyQk0sZUFBYztNQUNkLGdCQUFlO01BQ2YsaUJBQWdCLEVBTWpCO01BbkNMO1FBZ0NRLGlCQUFnQjtRQUNoQixlQUFjLEVBQ2Y7RUFJTDtJQXRDRjtNQXVDSSxlQUFjLEVBVWpCO01BakREO1FBMENNLGVBQWMsRUFDZjtNQTNDTDtRQThDTSxnQkFBZSxFQUNoQixFQUFBOztBQUlMO0VBQ0UsNkVBQTRFO0VBQzVFLHFCQUFvQjtFQUNwQixrQkFBaUI7RUFDakIsc0JBQXFCO0VBQ3JCLGtCQUFpQixFQWdDbEI7RUFyQ0Q7SUFRSSxjQUFhLEVBQ2Q7RUFUSDtJQVlJLFdBQVUsRUFjWDtJQTFCSDtNQWVNLHFCQUFvQjtNQUNwQixnQkFBZTtNQUNmLGlCQUFnQixFQUNqQjtJQWxCTDtNQXFCTSxlaUJ0ckNpQjtNakJ1ckNqQixnQkFBZTtNQUNmLG1CQUFrQjtNQUNsQixpQkFBZ0IsRUFDakI7RUFHSDtJQTVCRjtNQTZCSSxtQ0FBa0M7TUFDbEMsc0JBQXFCO01BQ3JCLHVCQUFzQixFQU16QjtNQXJDRDtRQWtDTSxZQUFXLEVBQ1osRUFBQTs7QUFJTDs7RUFFRSxtQkFBa0IsRUFDbkI7O0FBRUQ7RUFDRSxvQ0FBbUM7RUFDbkMsZ0JBQWU7RUFDZixpQkFBZ0I7RUFDaEIsaUJBQWdCO0VBQ2hCLHFDQUFnQyxFQWdGakM7RUEvRUM7SUFORjtNQU9JLGFBQVksRUE4RWYsRUFBQTtFQTVFQztJQVRGO01BVUksYUFBWSxFQTJFZixFQUFBO0VBekVDO0lBWkY7TUFhSSxhQUFZLEVBd0VmLEVBQUE7RUF0RUM7SUFmRjtNQWdCSSxZQUFXO01BQ1gsOEJBQTZCLEVBb0VoQyxFQUFBO0VBckZEO0lBcUJJLG1CQUFrQjtJQUNsQixVQUFTLEVBQ1Y7RUF2Qkg7SUEwQkksZ0JBQWU7SUFDZixpQkFBZ0IsRUF5RGpCO0lBcEZIO01BOEJNLGdCQUFlO01BQ2YsZWlCM3VDaUI7TWpCNHVDakIsaUJBQWdCO01BQ2hCLGdCQUFlO01BQ2YsZUFBYztNQUNkLG9DQUFtQztNQUNuQyx3Q0FBdUMsRUFDeEM7SUFyQ0w7O01BeUNNLGVpQm53Q2lCO01qQm93Q2pCLHNCQUFxQjtNQUNyQixpQkFBZ0IsRUFDakI7SUE1Q0w7TUErQ00sbUJBQWtCO01BQ2xCLG9CQUFtQixFQW1DcEI7TUFuRkw7UUFtRFEsV0FBVSxFQW1CWDtRQXRFUDtVQXNEVSxpQkFBZ0I7VUFDaEIsa0JBQWlCLEVBQ2xCO1FBeERUO1VBNERVLDJCQUEwQixFQUMzQjtRQTdEVDtVQWdFVSxXQUFVLEVBS1g7VUFyRVQ7WUFtRVksY0FBYSxFQUNkO01BcEVYO1FBeUVRLGdCQUFlO1FBQ2YsZWlCMXhDZTtRakIyeENmLGlCQUFnQjtRQUNoQiwyQkFBMEIsRUFDM0I7TUE3RVA7UUFnRlEsc0JpQjF5Q2U7UWpCMnlDZixtQkFBa0IsRUFDbkI7O0FBS1A7Ozs7OztFQU9JLGlCQUFnQjtFQUNoQixxQkFBb0I7RUFDcEIsaUJBQWdCLEVBQ2pCOztBQVZIO0VBYUksZ0JBQWUsRUFDaEI7O0FBZEg7RUFpQkksZ0JBQWUsRUFDaEI7O0FBbEJIO0VBcUJJLGdCQUFlLEVBQ2hCOztBQXRCSDtFQXlCSSxnQkFBZTtFQUNmLGVpQi96Q21CO0VqQmcwQ25CLGlCQUFnQjtFQUNoQixpQkFBZ0IsRUFDakI7O0FBR0g7RUFDRSxnQkFBZTtFQUNmLDBCQUF5QjtFQUN6QixtQkFBa0I7RUFDbEIsbUJBQWtCO0VBQ2xCLHFCQUFhO0VBQWIsY0FBYTtFQUNiLHNCQUF1QjtNQUF2Qix3QkFBdUIsRUErRXhCO0VBckZEO0lBU0ksa0JBQWE7UUFBYixjQUFhO0lBQ2IsV0FBVTtJQUNWLGlCQUFnQjtJQUNoQiwwQkFBeUIsRUF5QjFCO0lBckNIO01BZU0sY0FBYTtNQUNiLG9CQUFtQjtNQUNuQixpQkFBZ0I7TUFDaEIsWUFBVyxFQUNaO0lBbkJMO01Bc0JNLGdCQUFlO01BQ2Ysa0JBQWlCO01BQ2pCLGVBQWM7TUFDZCxvQkFBbUIsRUFDcEI7SUExQkw7TUE2Qk0saUJBQWdCO01BQ2hCLFlBQVcsRUFDWjtJQS9CTDtNQWtDTSxtQkFBa0I7TUFDbEIsZ0JBQWUsRUFDaEI7RUFwQ0w7SUF3Q0ksbUJBQWtCO0lBQ2xCLE9BQU07SUFDTixTQUFRO0lBQ1Isc0JBQXFCLEVBQ3RCO0VBRUQ7SUE5Q0Y7TUFnRE0sMEJBQXlCLEVBQzFCLEVBQUE7RUFHSDtJQXBERjtNQXFESSxrQkFBaUI7TUFDakIsbUNBQThCO1VBQTlCLCtCQUE4QjtNQUM5Qix1QkFBbUI7VUFBbkIsb0JBQW1CLEVBOEJ0QjtNQXJGRDtRQTBETSx1QkFBc0I7UUFDdEIsaUJBQWdCO1FBQ2hCLG1CQUFrQjtRQUNsQixzQkFBcUI7UUFDckIsa0JBQWlCO1FBQ2pCLG1CQUFrQjtRQUNsQixXQUFVLEVBQ1g7TUFqRUw7UUFvRU0sbUJBQWtCO1FBQ2xCLG1CQUFrQjtRQUNsQixjQUFhO1FBQ2IsV0FBVSxFQUNYLEVBQUE7RUFHSDtJQTNFRjtNQTZFTSxtQkFBa0I7TUFDbEIsb0JBQW1CLEVBS3BCO01BbkZMO1FBaUZRLGdCQUFlLEVBQ2hCLEVBQUEiLCJmaWxlIjoiY3JlYXRvci5jc3MiLCJzb3VyY2VzQ29udGVudCI6WyIkd2hpdGlzaDogI2YzZjVmNztcbiRsaWdodGVyLWdyZXk6ICNlMmU3ZWY7XG4kbGlnaHQtZ3JleTogI2RiZTBlOTtcbiRsaWdodGlzaC1ncmV5OiAjYTRhYmI5O1xuJG1lZC1ncmV5OiAjOWJhY2I2O1xuJGRhcmtpc2gtZ3JleTogIzc0N2E4NTtcbiRkYXJrLWdyZXk6ICM2ZTc2N2Y7XG4kZGFya2VyLWdyZXk6ICM0ODRmNWI7XG4kYmxhY2tpc2g6ICMxZjIzMmM7XG5cbiRsaWdodC1ibHVlOiAjYzBlMWZmO1xuJGJsdWU6ICM0YzhmZmY7XG5cblxuLy9AaW1wb3J0IHVybChodHRwczovL2ZvbnRzLmdvb2dsZWFwaXMuY29tL2Nzcz9mYW1pbHk9TnVuaXRvOjMwMCk7XG5AaW1wb3J0IHVybCgnaHR0cHM6Ly9jb2RlLmlvbmljZnJhbWV3b3JrLmNvbS9pb25pY29ucy8yLjAuMS9jc3MvaW9uaWNvbnMubWluLmNzcycpO1xuQGltcG9ydCAnLi9mb250cycsXG4gICAgICAgICd2YXJzJztcblxuLy8gQm9vdHN0cmFwXG5AaW1wb3J0ICdib290c3RyYXAvdmFyaWFibGVzJztcbkBpbXBvcnQgJ2Jvb3RzdHJhcC9taXhpbnMnO1xuQGltcG9ydCAnYm9vdHN0cmFwL25vcm1hbGl6ZSc7XG5AaW1wb3J0ICdib290c3RyYXAvcHJpbnQnO1xuQGltcG9ydCAnYm9vdHN0cmFwL2dseXBoaWNvbnMnO1xuQGltcG9ydCAnYm9vdHN0cmFwL3NjYWZmb2xkaW5nJztcbkBpbXBvcnQgJ2Jvb3RzdHJhcC90eXBlJztcbkBpbXBvcnQgJ2Jvb3RzdHJhcC9jb2RlJztcbkBpbXBvcnQgJ2Jvb3RzdHJhcC9ncmlkJztcbkBpbXBvcnQgJ2Jvb3RzdHJhcC90YWJsZXMnO1xuQGltcG9ydCAnYm9vdHN0cmFwL2Zvcm1zJztcbkBpbXBvcnQgJ2Jvb3RzdHJhcC9idXR0b25zJztcbkBpbXBvcnQgJ2Jvb3RzdHJhcC9jb21wb25lbnQtYW5pbWF0aW9ucyc7XG5AaW1wb3J0ICdib290c3RyYXAvZHJvcGRvd25zJztcbkBpbXBvcnQgJ2Jvb3RzdHJhcC9idXR0b24tZ3JvdXBzJztcbkBpbXBvcnQgJ2Jvb3RzdHJhcC9pbnB1dC1ncm91cHMnO1xuQGltcG9ydCAnYm9vdHN0cmFwL25hdnMnO1xuQGltcG9ydCAnYm9vdHN0cmFwL25hdmJhcic7XG5AaW1wb3J0ICdib290c3RyYXAvbW9kYWxzJztcbkBpbXBvcnQgJ2Jvb3RzdHJhcC90b29sdGlwJztcbkBpbXBvcnQgJ2Jvb3RzdHJhcC91dGlsaXRpZXMnO1xuQGltcG9ydCAnYm9vdHN0cmFwL3Jlc3BvbnNpdmUtdXRpbGl0aWVzJztcblxuLmJ0biB7XG4gIGZvbnQtd2VpZ2h0OiA2MDA7XG4gIGJvcmRlci1yYWRpdXM6IDNweDtcbiAgLy8gbGV0dGVyLXNwYWNpbmc6IDFweDtcbiAgcGFkZGluZzogMTBweCAyMHB4IDEycHg7IC8vIG1hdGNoIGlucHV0W3R5cGU9dGV4dF0uaW5wdXRcbiAgZm9udC1zaXplOiAxNnB4O1xuXG4gICYuYnRuLWlvbmljIHtcbiAgICBiYWNrZ3JvdW5kOiAkYmx1ZTtcbiAgICBjb2xvcjogd2hpdGU7XG4gICAgdHJhbnNpdGlvbjogY29sb3IgLjJzLCBiYWNrZ3JvdW5kLWNvbG9yIC4ycztcbiAgICAtd2Via2l0LWZvbnQtc21vb3RoaW5nOiBhbnRpYWxpYXNlZDtcbiAgICBmb250LXNpemU6IDIwcHg7XG4gICAgbGV0dGVyLXNwYWNpbmc6IDA7XG4gICAgcGFkZGluZzogMTZweCAyOHB4O1xuXG4gICAgJjpob3ZlciB7XG4gICAgICBjb2xvcjogI2ZmZjtcbiAgICAgIGJhY2tncm91bmQ6ICM1Qjk4RkY7XG4gICAgfVxuICB9XG5cbiAgJi5idG4tb3V0bGluZSB7XG4gICAgY29sb3I6ICRibHVlO1xuICAgIGJvcmRlci1jb2xvcjogJGJsdWU7XG4gICAgYm9yZGVyOiAkYmx1ZSAycHggc29saWQ7XG4gICAgdHJhbnNpdGlvbjogY29sb3IgLjJzLCBiYWNrZ3JvdW5kLWNvbG9yIC4ycztcbiAgICAtd2Via2l0LWZvbnQtc21vb3RoaW5nOiBhbnRpYWxpYXNlZDtcblxuICAgICY6aG92ZXIge1xuICAgICAgY29sb3I6IHdoaXRlO1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogJGJsdWU7XG4gICAgfVxuICB9XG5cbiAgJi5maWxsIHtcbiAgICAmLmdyZWVuLFxuICAgICYuYmx1ZSB7XG4gICAgICBib3JkZXItcmFkaXVzOiA0cHg7XG4gICAgICBjb2xvcjogd2hpdGU7XG4gICAgICBmb250LXNpemU6IDE0cHg7XG4gICAgICBmb250LXdlaWdodDogNTAwO1xuICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICAgYm94LXNoYWRvdzogMCAxcHggMXB4IHJnYmEoMCwwLDAsMC4xKTtcbiAgICAgIHBhZGRpbmc6IDEycHggMjBweDtcbiAgICB9XG5cbiAgICAmLmdyZWVuIHtcbiAgICAgIGJhY2tncm91bmQ6ICMzOWQ0NmQ7XG4gICAgICBwYWRkaW5nLWxlZnQ6IDM1cHg7XG5cbiAgICAgIC5pY29uIHtcbiAgICAgICAgZm9udC1zaXplOiAyNnB4O1xuICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgIHRvcDogNHB4O1xuICAgICAgICBsZWZ0OiAxNXB4O1xuICAgICAgICBmb250LXdlaWdodDogODAwO1xuICAgICAgfVxuICAgIH1cblxuICAgICYuYmx1ZSB7XG4gICAgICBiYWNrZ3JvdW5kOiAjNDhhY2Y4O1xuICAgICAgcGFkZGluZy1sZWZ0OiA0NXB4O1xuICAgICAgbWFyZ2luLWxlZnQ6IDVweDtcblxuICAgICAgLmljb24ge1xuICAgICAgICBmb250LXNpemU6IDIycHg7XG4gICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgdG9wOiA2cHg7XG4gICAgICAgIGxlZnQ6IDIwcHg7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmhlYWRlci5jb250YWluZXIge1xuICBwYWRkaW5nLXRvcDogMjBweDtcbiAgcGFkZGluZy1ib3R0b206IDIwcHg7XG4gIC13ZWJraXQtZm9udC1zbW9vdGhpbmc6IGFudGlhbGlhc2VkO1xuXG4gIC5jcmVhdG9yLWxvZ28ge1xuICAgIHdpZHRoOiAxMjBweDtcbiAgfVxuXG4gIG5hdiB7XG4gICAgZmxvYXQ6IHJpZ2h0O1xuXG4gICAgQG1lZGlhIChtYXgtd2lkdGg6ICRzY3JlZW4teHMtbWF4KSAge1xuICAgICAgZmxvYXQ6IG5vbmU7XG4gICAgfVxuXG4gICAgYSB7XG4gICAgICBjb2xvcjogJGRhcmtlci1ncmV5O1xuICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgICAgZm9udC13ZWlnaHQ6IDUwMDtcbiAgICAgIHRyYW5zaXRpb246IC4ycyBjb2xvcjtcbiAgICAgIGZvbnQtc2l6ZTogMTRweDtcbiAgICAgIGxldHRlci1zcGFjaW5nOiAwO1xuXG4gICAgICAmLmFjdGl2ZSxcbiAgICAgICY6aG92ZXIge1xuICAgICAgICBjb2xvcjogJGxpZ2h0aXNoLWdyZXk7XG4gICAgICAgIGJveC1zaGFkb3c6IG5vbmU7XG4gICAgICB9XG5cbiAgICAgIEBtZWRpYSAobWF4LXdpZHRoOiAkc2NyZWVuLXhzLW1heCkgIHtcbiAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAuYnRuIHtcbiAgICAgIHBhZGRpbmc6IDhweCAxNHB4O1xuICAgICAgbWFyZ2luLWxlZnQ6IDJweDtcblxuICAgICAgJi5ib3JkZXIge1xuICAgICAgICBib3JkZXItbGVmdDogMXB4IHNvbGlkICRsaWdodGVyLWdyZXk7XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDA7XG4gICAgICAgIG1hcmdpbi1sZWZ0OiAxMHB4O1xuICAgICAgICBwYWRkaW5nLWxlZnQ6IDI1cHhcbiAgICAgIH1cbiAgICB9XG5cbiAgICAuYmx1ZSB7XG4gICAgICBjb2xvcjogJGJsdWU7XG5cbiAgICAgICY6aG92ZXIsXG4gICAgICAmOmFjdGl2ZSB7XG4gICAgICAgIGNvbG9yOiBsaWdodGVuKCRibHVlLCA1KTtcbiAgICAgICAgYm94LXNoYWRvdzogbm9uZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAuc2lnbnVwIHtcbiAgICAgIGJhY2tncm91bmQ6ICRibHVlO1xuICAgICAgY29sb3I6IHdoaXRlO1xuICAgICAgdHJhbnNpdGlvbjogLjJzIGJhY2tncm91bmQ7XG5cbiAgICAgICY6aG92ZXIge1xuICAgICAgICBiYWNrZ3JvdW5kOiBkYXJrZW4oJGJsdWUsIDMpO1xuICAgICAgICBjb2xvcjogd2hpdGU7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmhncm91cCB7XG4gIHBhZGRpbmctdG9wOiA3NXB4O1xuICBwYWRkaW5nLWJvdHRvbTogNzVweDtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuXG4gIGgxIHtcbiAgICBmb250LXdlaWdodDogNjAwO1xuICAgIGZvbnQtc2l6ZTogMzJweDtcbiAgICBtYXJnaW4tYm90dG9tOiAwO1xuICB9XG5cbiAgaDIge1xuICAgIGZvbnQtd2VpZ2h0OiA2MDA7XG4gICAgZm9udC1zaXplOiAyOHB4O1xuICAgIG1hcmdpbi1ib3R0b206IDE1cHg7XG4gICAgY29sb3I6ICRibGFja2lzaDtcblxuICAgIHN0cm9uZyB7XG4gICAgICBmb250LXdlaWdodDogNzAwO1xuICAgIH1cbiAgfVxuXG4gIGgzIHtcbiAgICBmb250LXNpemU6IDI1cHg7XG4gICAgZm9udC13ZWlnaHQ6IDYwMDtcblxuICAgICsgcCB7XG4gICAgICBmb250LXdlaWdodDogNDAwO1xuICAgICAgZm9udC1zaXplOiAxNHB4O1xuICAgICAgbGluZS1oZWlnaHQ6IDIwcHg7XG4gICAgfVxuICB9XG5cbiAgcCB7XG4gICAgZm9udC13ZWlnaHQ6IDMwMDtcbiAgICBmb250LXNpemU6IDIwcHg7XG4gICAgY29sb3I6ICRkYXJrLWdyZXk7XG4gICAgbWFyZ2luLWJvdHRvbTogMzJweDtcbiAgfVxuXG4gICYucHJlc2VydmVyIHtcbiAgICBwYWRkaW5nLXRvcDogMTgwcHg7XG4gICAgYmFja2dyb3VuZDogI2YzZjVmNyBjZW50ZXIgNTVweCBuby1yZXBlYXQgdXJsKCcvaW1nL3Byby9jcmVhdG9yL3N1cHBvcnQtYnVveS5wbmcnKTtcbiAgICBiYWNrZ3JvdW5kLXNpemU6IDgwcHg7XG4gICAgYm9yZGVyLWJvdHRvbTogMnB4ICNlMmU3ZWYgc29saWQ7XG4gIH1cblxuICAmOm5vdChmb3JtKSAuYnRuIHtcbiAgICBtYXJnaW4tdG9wOiAxMHB4O1xuICB9XG5cbiAgJi5ncmV5LXRvcCB7XG4gICAgYmFja2dyb3VuZDogJHdoaXRpc2g7XG4gICAgcGFkZGluZy1ib3R0b206IDIwMHB4O1xuICAgIG1hcmdpbi1ib3R0b206IC0xMzBweDtcbiAgICBib3JkZXItYm90dG9tOiAycHggc29saWQgJGxpZ2h0LWdyZXk7XG4gIH1cbn1cblxuaW5wdXRbdHlwZT10ZXh0XS5pbnB1dCB7XG4gIGJvcmRlcjogMnB4IHNvbGlkICRsaWdodC1ncmV5O1xuICBib3JkZXItcmFkaXVzOiAzcHg7XG4gIHBhZGRpbmc6IDEwcHggMjBweDtcbiAgZm9udC1zaXplOiAxNnB4O1xuICB0cmFuc2l0aW9uOiAuNHMgYm9yZGVyLWNvbG9yO1xuXG4gICY6Oi13ZWJraXQtaW5wdXQtcGxhY2Vob2xkZXIge1xuICAgIGNvbG9yOiAkbGlnaHRpc2gtZ3JleTtcbiAgfVxuXG4gICY6LW1zLWlucHV0LXBsYWNlaG9sZGVyIHtcbiAgICBjb2xvcjogJGxpZ2h0aXNoLWdyZXk7XG4gIH1cblxuICAmOmZvY3VzIHtcbiAgICBib3JkZXItY29sb3I6ICRibHVlO1xuICAgIG91dGxpbmU6IG5vbmU7XG4gIH1cbn1cblxuLnRhaWwge1xuICBiYWNrZ3JvdW5kOiAjMjYzZDRjO1xuICBjb2xvcjogJG1lZC1ncmV5O1xuICBwYWRkaW5nOiA4MHB4IDA7XG4gIG1hcmdpbi10b3A6IDkwcHg7XG5cbiAgJi5naG9zdCB7XG4gICAgYmFja2dyb3VuZDogIzI2M2Q0YyBjZW50ZXIgY2VudGVyIG5vLXJlcGVhdCB1cmwoJy9pbWcvcHJvL2NyZWF0b3IvYmctY3JlYXRvci1naG9zdC5wbmcnKTtcbiAgICBiYWNrZ3JvdW5kLXNpemU6IGF1dG8gMTAwJTtcbiAgfVxuXG4gIGgyIHtcbiAgICBjb2xvcjogd2hpdGU7XG4gICAgZm9udC1zaXplOiAyOHB4O1xuICAgIGZvbnQtd2VpZ2h0OiA2MDA7XG4gIH1cblxuICBwIHtcbiAgICBmb250LXNpemU6IDE4cHg7XG5cbiAgICBhIHtcbiAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgIGNvbG9yOiAkYmx1ZTtcbiAgICAgIHRyYW5zaXRpb246IGNvbG9yIC4ycztcblxuICAgICAgJi51bmRlcnNjb3JlOmFmdGVyIHtcbiAgICAgICAgY29udGVudDogJyc7XG4gICAgICAgIG1pbi1oZWlnaHQ6IDFweDtcbiAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICBsZWZ0OiAwO1xuICAgICAgICByaWdodDogMDtcbiAgICAgICAgYm90dG9tOiAtM3B4O1xuICAgICAgICBib3JkZXItYm90dG9tOiAycHggc29saWQgJGJsdWU7XG4gICAgICAgIHRyYW5zaXRpb246IGJvcmRlci1jb2xvciAuMnM7XG4gICAgICB9XG5cbiAgICAgICY6aG92ZXIge1xuICAgICAgICBjb2xvcjogbGlnaHRlbigkYmx1ZSwgMTUpO1xuICAgICAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG5cbiAgICAgICAgJjphZnRlciB7XG4gICAgICAgICAgYm9yZGVyLWNvbG9yOiBsaWdodGVuKCRibHVlLCAxNSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuLnN0YXJ0LW5vdyB7XG4gIG1hcmdpbi10b3A6IDYwcHg7XG5cbiAgZm9ybSB7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIHBhZGRpbmctdG9wOiAyOHB4O1xuXG4gICAgLmJ0biB7XG4gICAgICBtYXJnaW4tdG9wOiAtM3B4O1xuICAgICAgcGFkZGluZzogMTFweCAyMHB4O1xuICAgICAgZm9udC1zaXplOiAxNnB4O1xuICAgIH1cblxuICAgIC5pbnB1dCB7XG4gICAgICB3aWR0aDogMzMwcHg7XG4gICAgICBAbWVkaWEgKG1heC13aWR0aDogNTAwcHgpIHtcbiAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgJjpiZWZvcmUge1xuICAgICAgYmFja2dyb3VuZDogbm8tcmVwZWF0IGNlbnRlciBjZW50ZXIgdXJsKCcvaW1nL3Byby9jcmVhdG9yL3NpZ251cC1hcnJvdy5wbmcnKTtcbiAgICAgIGJhY2tncm91bmQtc2l6ZTogNjFweDtcbiAgICAgIHdpZHRoOiA2MXB4O1xuICAgICAgaGVpZ2h0OiA1NnB4O1xuICAgICAgY29udGVudDogJyc7XG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICBtYXJnaW4tbGVmdDogLTkwcHg7XG4gICAgICBtYXJnaW4tdG9wOiAtMjVweDtcbiAgICB9XG4gIH1cblxuICBAbWVkaWEgKG1heC13aWR0aDogJHNjcmVlbi1zbS1tYXgpIHtcbiAgICBwYWRkaW5nLWxlZnQ6IDVweDtcbiAgICBwYWRkaW5nLXJpZ2h0OiA1cHg7XG5cbiAgICBmb3JtIC5idG4ge1xuICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICBtYXJnaW46IDEwcHggYXV0byAwO1xuICAgIH1cbiAgfVxufVxuXG5mb290ZXIge1xuICBjb2xvcjogJGxpZ2h0aXNoLWdyZXk7XG4gIHBhZGRpbmctdG9wOiA1MHB4O1xuXG4gIC5yb3cge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgZmxleC1mbG93OiByb3cgd3JhcDtcbiAgICB3aWR0aDogMTAwMHB4O1xuICAgIG1hcmdpbjogMCBhdXRvO1xuICAgIEBtZWRpYSAobWF4LXdpZHRoOiAkc2NyZWVuLW1kLW1heCkge1xuICAgICAgd2lkdGg6IGF1dG87XG4gICAgfVxuICAgIEBtZWRpYSAobWF4LXdpZHRoOiAkc2NyZWVuLXNtLW1heCkge1xuICAgICAgZGlzcGxheTogYmxvY2s7XG5cbiAgICAgIC5sZWZ0LFxuICAgICAgLnJpZ2h0LFxuICAgICAgLmNlbnRlciB7XG4gICAgICAgIHdpZHRoOiBhdXRvO1xuICAgICAgICBtYXJnaW46IDAgYXV0bztcbiAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgICAgfVxuXG4gICAgICAuY2VudGVyIHtcbiAgICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1hcm91bmQ7XG4gICAgICAgIG1hcmdpbi10b3A6IDUwcHg7XG4gICAgICB9XG4gICAgfVxuICB9XG5cblxuICAubGVmdCB7XG4gICAgd2lkdGg6IDE5MHB4O1xuICAgIGZsZXgtZ3JvdzogMDtcbiAgICBmbGV4LXNocmluazogMDtcbiAgICBtYXJnaW4tcmlnaHQ6IDg3cHg7XG4gICAgZm9udC1zaXplOiAxNHB4O1xuXG4gICAgcCB7XG4gICAgICBsaW5lLWhlaWdodDogMjBweDtcbiAgICAgIGNvbG9yOiAkbGlnaHRpc2gtZ3JleTtcbiAgICAgIGZvbnQtd2VpZ2h0OiAzMDA7XG4gICAgfVxuXG4gICAgLmNyZWF0b3ItbG9nbyB7XG4gICAgICB3aWR0aDogMTIwcHg7XG4gICAgICBtYXJnaW4tYm90dG9tOiAyMnB4O1xuICAgIH1cblxuICAgIEBtZWRpYSAobWF4LXdpZHRoOiAkc2NyZWVuLW1kLW1heCkge1xuICAgICAgbWFyZ2luLXJpZ2h0OiA1cHg7XG4gICAgfVxuICB9XG5cbiAgLnJpZ2h0IHtcbiAgICB3aWR0aDogMzMycHg7XG4gICAgZmxleC1ncm93OiAwO1xuICAgIGZsZXgtc2hyaW5rOiAwO1xuICAgIG1hcmdpbi1sZWZ0OiA2MHB4O1xuICAgIEBtZWRpYSAobWF4LXdpZHRoOiAkc2NyZWVuLW1kLW1heCkge1xuICAgICAgbWFyZ2luLWxlZnQ6IDVweDtcbiAgICB9XG4gICAgQG1lZGlhIChtYXgtd2lkdGg6ICRzY3JlZW4tc20tbWF4KSB7XG4gICAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7XG4gICAgfVxuICB9XG5cbiAgLnR3aXR0ZXIge1xuICAgIGJhY2tncm91bmQ6IG5vLXJlcGVhdCBjZW50ZXIgY2VudGVyIHVybCgnL2ltZy90d2l0dGVyLWJ1YmJsZS5wbmcnKTtcbiAgICBiYWNrZ3JvdW5kLXNpemU6IDMzMnB4O1xuICAgIHdpZHRoOiAzMzJweDtcbiAgICBoZWlnaHQ6IDEwOXB4O1xuICAgIHBhZGRpbmc6IDE4cHggMTZweCAyNnB4IDU5cHg7XG4gICAgZm9udC1zaXplOiAxNHB4O1xuICAgIGNvbG9yOiAkYmxhY2tpc2g7XG5cbiAgICBwIHtcbiAgICAgIGNvbG9yOiAkYmxhY2tpc2g7XG4gICAgICBsaW5lLWhlaWdodDogMjBweDtcbiAgICAgIGZvbnQtd2VpZ2h0OiA0MDA7XG4gICAgfVxuXG4gICAgYSB7XG4gICAgICBjb2xvcjogJGJsdWU7XG5cbiAgICAgICY6aG92ZXIge1xuICAgICAgICBjb2xvcjogZGFya2VuKCRibHVlLDE1KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAuY2VudGVyIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGZsZXgtZmxvdzogcm93IHdyYXA7XG4gICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xuICAgIGZsZXgtZ3JvdzogMjtcblxuICAgIHNlY3Rpb24ge1xuICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgIH1cbiAgfVxuXG4gIHVsIHtcbiAgICBsaXN0LXN0eWxlOiBub25lO1xuICAgIHBhZGRpbmc6IDA7XG5cbiAgICBsaSB7XG4gICAgICBmb250LXNpemU6IDE0cHg7XG4gICAgICBsaW5lLWhlaWdodDogMmVtO1xuICAgIH1cbiAgfVxuXG4gIGEge1xuICAgIGNvbG9yOiAjYjBiNmM0O1xuICAgIHRyYW5zaXRpb246IGNvbG9yIC4ycztcblxuICAgICY6aG92ZXIge1xuICAgICAgY29sb3I6ICM0ZjhlZjc7XG4gICAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG4gICAgfVxuICB9XG5cbiAgaDMge1xuICAgIGZvbnQtd2VpZ2h0OiA1MDA7XG4gICAgZm9udC1zaXplOiAxNnB4O1xuICAgIGNvbG9yOiAkYmxhY2tpc2g7XG4gICAgbGluZS1oZWlnaHQ6IDEwLjVweDtcbiAgfVxuXG4gIC5ib3R0b20ge1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICBtYXJnaW4tdG9wOiA0NHB4O1xuICAgIHBhZGRpbmctdG9wOiA0NHB4O1xuICAgIHBhZGRpbmctYm90dG9tOiAyNHB4O1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcblxuICAgIC5pb25pLWlvLWxvZ28ge1xuICAgICAgd2lkdGg6IDcycHg7XG4gICAgICBoZWlnaHQ6IDI0cHg7XG4gICAgICBtYXJnaW4tcmlnaHQ6IDEwcHg7XG4gICAgICBtYXJnaW4tdG9wOiAtM3B4O1xuICAgIH1cblxuICAgIHAge1xuICAgICAgbWFyZ2luOiAwIGF1dG87XG4gICAgICBjb2xvcjogJGxpZ2h0LWdyZXk7XG4gICAgICBmb250LXNpemU6IDEycHg7XG4gICAgfVxuXG4gICAgJjpiZWZvcmUge1xuICAgICAgY29udGVudDogJyc7XG4gICAgICB3aWR0aDogOThweDtcbiAgICAgIGhlaWdodDogMXB4O1xuICAgICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICRsaWdodGVyLWdyZXk7XG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICB0b3A6IDA7XG4gICAgICBsZWZ0OiAwO1xuICAgICAgcmlnaHQ6IDA7XG4gICAgICBtYXJnaW46IDAgYXV0bztcbiAgICB9XG4gIH1cbn1cblxuXG4jcGFnZS1jcmVhdG9yIHtcbiAgY29sb3I6ICRibGFja2lzaDtcbiAgLXdlYmtpdC1mb250LXNtb290aGluZzogYW50aWFsaWFzZWQ7XG5cbiAgLmhlcm8ge1xuICAgIGJhY2tncm91bmQ6IGNlbnRlciBib3R0b20gbm8tcmVwZWF0IHVybCgnL2ltZy9wcm8vY3JlYXRvci9iZy1oZXJvLWNyZWF0b3IuanBnJyk7XG4gICAgYmFja2dyb3VuZC1zaXplOiBjb3ZlcjtcbiAgICBtaW4taGVpZ2h0OiA4NzVweDtcblxuICAgIEBtZWRpYSAobWluLXdpZHRoOiAxOTUwcHgpICB7XG4gICAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiBjZW50ZXIgLTE2MHB4O1xuXG4gICAgICBoZ3JvdXAuY29udGFpbmVyIGgzIHtcbiAgICAgICAgbWF4LXdpZHRoOiAxMDAlO1xuICAgICAgfVxuICAgIH1cblxuICAgIEBtZWRpYSAobWluLXdpZHRoOiAyMjUwcHgpICB7XG4gICAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiBjZW50ZXIgLTIzNXB4O1xuICAgIH1cblxuICAgIEBtZWRpYSAobWluLXdpZHRoOiAyNDAwcHgpICB7XG4gICAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiBjZW50ZXIgLTI3MHB4O1xuICAgIH1cblxuICAgIEBtZWRpYSAobWluLXdpZHRoOiAyNTAwcHgpICB7XG4gICAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiBjZW50ZXIgLTI5MHB4O1xuICAgIH1cblxuICAgIEBtZWRpYSAobWluLXdpZHRoOiAyNTUwcHgpICB7XG4gICAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiBjZW50ZXIgLTMxMHB4O1xuICAgIH1cblxuICAgIEBtZWRpYSAobWF4LXdpZHRoOiAkc2NyZWVuLXhzLW1heCkgIHtcbiAgICAgIGJhY2tncm91bmQtc2l6ZTogJHNjcmVlbi14cy1tYXg7XG4gICAgICBtaW4taGVpZ2h0OiA2MDBweDtcbiAgICAgIGJhY2tncm91bmQtcG9zaXRpb246IGNlbnRlciBib3R0b207XG4gICAgfVxuXG4gICAgaGdyb3VwIHtcbiAgICAgIHBhZGRpbmctdG9wOiA3MHB4O1xuICAgICAgbWFyZ2luLXRvcDogMDtcblxuICAgICAgaDEge1xuICAgICAgICBmb250LXdlaWdodDogNjAwO1xuICAgICAgICBmb250LXNpemU6IDMycHg7XG4gICAgICAgIGxldHRlci1zcGFjaW5nOiAtMC4wMWVtO1xuICAgICAgICBtYXJnaW4tdG9wOiAyMHB4O1xuXG4gICAgICAgIGEge1xuICAgICAgICAgIGNvbG9yOiAkYmx1ZTtcbiAgICAgICAgICB0cmFuc2l0aW9uOiBjb2xvciAuMnM7XG4gICAgICAgICAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xuXG4gICAgICAgICAgJjpob3ZlciB7XG4gICAgICAgICAgICBjb2xvcjogbGlnaHRlbigkYmx1ZSwgMTApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBoMyB7XG4gICAgICAgIGNvbG9yOiAjNDc0ZDU5O1xuICAgICAgICBmb250LXNpemU6IDIwcHg7XG4gICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7XG4gICAgICAgIG1heC13aWR0aDogNTAwcHg7XG4gICAgICAgIG1hcmdpbjogMjZweCBhdXRvIDQ0cHg7XG4gICAgICAgIC13ZWJraXQtZm9udC1zbW9vdGhpbmc6IGFudGlhbGlhc2VkO1xuICAgICAgICBsaW5lLWhlaWdodDogMjhweDtcblxuICAgICAgICBzdHJvbmcge1xuICAgICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7XG4gICAgICAgICAgY29sb3I6ICRkYXJrLWdyZXk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAudXNlZC1ieSB7XG4gICAgZm9udC1zaXplOiAxNnB4O1xuICAgIGNvbG9yOiAkbGlnaHRpc2gtZ3JleTtcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgbWFyZ2luLXRvcDogMzBweDtcbiAgICBtYXJnaW4tYm90dG9tOiA2MHB4O1xuXG4gICAgcCB7XG4gICAgICBtYXJnaW4tYm90dG9tOiAyMHB4O1xuICAgICAgZm9udC13ZWlnaHQ6IDQwMDtcbiAgICB9XG5cbiAgICBpbWcge1xuICAgICAgd2lkdGg6IDYwMnB4O1xuICAgICAgQG1lZGlhIChtYXgtd2lkdGg6ICRzY3JlZW4teHMtbWF4KSB7XG4gICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC5ob3ctY3JlYXRvci13b3JrcyB7XG4gICAgYmFja2dyb3VuZDogd2hpdGU7XG4gICAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KHRvIHJpZ2h0LCAjNGE4ZWZhIDAlLCMzNGIzZmUgMTAwJSk7XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xuXG4gICAgaGdyb3VwIHtcbiAgICAgIHBhZGRpbmctdG9wOiA4MHB4O1xuICAgICAgcGFkZGluZy1ib3R0b206IDUwcHg7XG4gICAgfVxuXG4gICAgaDMsXG4gICAgaDQsXG4gICAgc3Ryb25nIHtcbiAgICAgIGNvbG9yOiB3aGl0ZTtcbiAgICB9XG5cbiAgICBzdHJvbmcge1xuICAgICAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgICB9XG5cbiAgICBoNCB7XG4gICAgICBmb250LXNpemU6IDE4cHg7XG4gICAgICBmb250LXdlaWdodDogNTAwO1xuICAgIH1cblxuICAgIHAge1xuICAgICAgY29sb3I6IHdoaXRlO1xuICAgICAgZm9udC13ZWlnaHQ6IDQwMDtcbiAgICAgIGxpbmUtaGVpZ2h0OiAyMnB4O1xuICAgICAgZm9udC1zaXplOiAxNHB4O1xuICAgIH1cblxuICAgIGhncm91cCB7XG4gICAgICBoMyB7XG4gICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7XG4gICAgICB9XG5cbiAgICAgIHAge1xuICAgICAgICBmb250LXNpemU6IDE4cHg7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLnN0ZXAge1xuICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgICAgd2lkdGg6IDMzMHB4O1xuICAgICAgcGFkZGluZy10b3A6IDIxNXB4O1xuICAgICAgcGFkZGluZy1ib3R0b206IDgwcHg7XG4gICAgICBtYXJnaW4tcmlnaHQ6IDcwcHg7XG4gICAgICBiYWNrZ3JvdW5kOiBuby1yZXBlYXQgY2VudGVyIHRvcDtcbiAgICAgIGJhY2tncm91bmQtc2l6ZTogMjcwcHg7XG4gICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG5cbiAgICAgICY6bGFzdC1jaGlsZCB7XG4gICAgICAgIG1hcmdpbi1yaWdodDogMDtcblxuICAgICAgICAmOjpiZWZvcmUge1xuICAgICAgICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgJi5kcmFnLW4tZHJvcCB7XG4gICAgICAgIGJhY2tncm91bmQtaW1hZ2U6IHVybCgnL2ltZy9wcm8vY3JlYXRvci93b3Jrcy1kbmQucG5nPzEnKTtcbiAgICAgIH1cblxuICAgICAgJi5wcmV2aWV3IHtcbiAgICAgICAgYmFja2dyb3VuZC1pbWFnZTogdXJsKCcvaW1nL3Byby9jcmVhdG9yL3dvcmtzLXByZXZpZXcucG5nJyk7XG4gICAgICB9XG5cbiAgICAgICYuZXhwb3J0IHtcbiAgICAgICAgYmFja2dyb3VuZC1pbWFnZTogdXJsKCcvaW1nL3Byby9jcmVhdG9yL3dvcmtzLWV4cG9ydC5wbmc/MScpO1xuICAgICAgfVxuXG4gICAgICAmOmJlZm9yZSB7XG4gICAgICAgIGJhY2tncm91bmQ6IG5vLXJlcGVhdCBjZW50ZXIgY2VudGVyIHVybCgnL2ltZy9wcm8vY3JlYXRvci9pY28tYXJyb3ctd29ya3MucG5nJyk7XG4gICAgICAgIGJhY2tncm91bmQtc2l6ZTogMTlweDtcbiAgICAgICAgd2lkdGg6IDE5cHg7XG4gICAgICAgIGhlaWdodDogNDNweDtcbiAgICAgICAgY29udGVudDogJyc7XG4gICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgdG9wOiA4NXB4O1xuICAgICAgICByaWdodDogLTYwcHg7XG4gICAgICB9XG5cbiAgICAgIEBtZWRpYSAobWF4LXdpZHRoOiAkc2NyZWVuLW1kLW1heCkgYW5kIChtaW4td2lkdGg6ICRzY3JlZW4tbWQtbWluKSB7XG4gICAgICAgIG1hcmdpbi1yaWdodDogNjBweDtcbiAgICAgICAgd2lkdGg6IDI3MHB4O1xuXG4gICAgICAgICY6YmVmb3JlIHtcbiAgICAgICAgICByaWdodDogLTM1cHg7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIEBtZWRpYSAobWF4LXdpZHRoOiAkc2NyZWVuLXNtLW1heCkge1xuICAgICAgICBtYXJnaW4tcmlnaHQ6IDA7XG4gICAgICAgIHdpZHRoOiAxMDAlO1xuXG4gICAgICAgICY6YmVmb3JlIHtcbiAgICAgICAgICBkaXNwbGF5OiAwO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLmhlcm8tc2lkZSB7XG4gICAgLmNvbnRhaW5lciB7XG4gICAgICBoZWlnaHQ6IDQ5OHB4O1xuICAgICAgcGFkZGluZy10b3A6IDE0MHB4O1xuICAgIH1cblxuICAgICYubGVmdCAuY29udGFpbmVyIHtcbiAgICAgIHBhZGRpbmctbGVmdDogNjk1cHg7XG4gICAgICBiYWNrZ3JvdW5kOiBuby1yZXBlYXQgbGVmdCB0b3A7XG4gICAgICBiYWNrZ3JvdW5kLXNpemU6IDY4MnB4O1xuXG4gICAgICBAbWVkaWEgKG1heC13aWR0aDogJHNjcmVlbi1tZC1tYXgpIGFuZCAobWluLXdpZHRoOiAkc2NyZWVuLW1kLW1pbikge1xuICAgICAgICBtYXJnaW4tbGVmdDogLTEwMHB4O1xuICAgICAgICB3aWR0aDogMTEwMHB4O1xuICAgICAgICBwYWRkaW5nLWxlZnQ6IDY3MHB4O1xuICAgICAgfVxuXG4gICAgICBAbWVkaWEgKG1heC13aWR0aDogJHNjcmVlbi1zbS1tYXgpIHtcbiAgICAgICAgcGFkZGluZy1sZWZ0OiAxMHB4O1xuICAgICAgICBwYWRkaW5nLWJvdHRvbTogMTUwcHg7XG4gICAgICAgIGJhY2tncm91bmQtcG9zaXRpb246IGNlbnRlciBib3R0b207XG4gICAgICAgIGJhY2tncm91bmQtc2l6ZTogMjI3cHg7XG4gICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICAgICAgaGVpZ2h0OiBhdXRvO1xuICAgICAgfVxuICAgIH1cblxuICAgICYucmlnaHQge1xuICAgICAgYmFja2dyb3VuZDogI2Y2ZjdmYTtcblxuICAgICAgLmNvbnRhaW5lciB7XG4gICAgICAgIHBhZGRpbmctcmlnaHQ6IDY2MHB4O1xuICAgICAgICBiYWNrZ3JvdW5kOiBuby1yZXBlYXQgcmlnaHQgdG9wO1xuICAgICAgICBiYWNrZ3JvdW5kLXNpemU6IDY4MnB4O1xuXG4gICAgICAgIEBtZWRpYSAobWF4LXdpZHRoOiAkc2NyZWVuLW1kLW1heCkgYW5kIChtaW4td2lkdGg6ICRzY3JlZW4tbWQtbWluKSB7XG4gICAgICAgICAgbWFyZ2luLXJpZ2h0OiAtNTBweDtcbiAgICAgICAgICB3aWR0aDogMTAyMHB4O1xuICAgICAgICAgIHBhZGRpbmctcmlnaHQ6IDYzMHB4O1xuICAgICAgICB9XG5cbiAgICAgICAgQG1lZGlhIChtYXgtd2lkdGg6ICRzY3JlZW4tc20tbWF4KSB7XG4gICAgICAgICAgcGFkZGluZy1yaWdodDogMTBweDtcbiAgICAgICAgICBwYWRkaW5nLWJvdHRvbTogMTUwcHg7XG4gICAgICAgICAgYmFja2dyb3VuZC1wb3NpdGlvbjogY2VudGVyIGJvdHRvbTtcbiAgICAgICAgICBiYWNrZ3JvdW5kLXNpemU6IDIyN3B4O1xuICAgICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICAgICAgICBoZWlnaHQ6IGF1dG87XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAmLnRvb2wgLmNvbnRhaW5lciB7XG4gICAgICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoJy9pbWcvcHJvL2NyZWF0b3IvZmVhdHVyZXMtdG9vbC5qcGcnKTtcbiAgICAgIEBtZWRpYSAobWF4LXdpZHRoOiAkc2NyZWVuLXNtLW1heCkge1xuICAgICAgICBiYWNrZ3JvdW5kLWltYWdlOiBub25lO1xuICAgICAgICBwYWRkaW5nLWJvdHRvbTogMTAwcHg7XG4gICAgICB9XG4gICAgfVxuXG4gICAgJi5kbmQgLmNvbnRhaW5lciB7XG4gICAgICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoJy9pbWcvcHJvL2NyZWF0b3IvZmVhdHVyZXMtZG5kLnBuZz8xJyk7XG4gICAgfVxuXG4gICAgJi54cGxhdGZvcm0gLmNvbnRhaW5lciB7XG4gICAgICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoJy9pbWcvcHJvL2NyZWF0b3IvZmVhdHVyZXMteHBsYXRmb3JtLmpwZycpO1xuICAgIH1cblxuICAgICYudGVhbXMgLmNvbnRhaW5lciB7XG4gICAgICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoJy9pbWcvcHJvL2NyZWF0b3IvZmVhdHVyZXMtdGVhbXMucG5nPzEnKTtcbiAgICB9XG5cbiAgICAmLmlubGluZS1jb2RlLWVkaXRpbmcge1xuICAgICAgYmFja2dyb3VuZDogbm8tcmVwZWF0IGxlZnQgYm90dG9tO1xuICAgICAgYmFja2dyb3VuZC1pbWFnZTogdXJsKCcvaW1nL3Byby9jcmVhdG9yL2ZlYXR1cmVzLWNvZGUuanBnJyk7XG4gICAgICBiYWNrZ3JvdW5kLXNpemU6IDQ1JTtcblxuICAgICAgQG1lZGlhIHNjcmVlbiBhbmQgKG1pbi13aWR0aDogMjAwMHB4KSB7XG4gICAgICAgIGJhY2tncm91bmQtc2l6ZTogODk2cHg7XG4gICAgICB9XG5cbiAgICAgIEBtZWRpYSAobWF4LXdpZHRoOiAkc2NyZWVuLXNtLW1heCkge1xuICAgICAgICBiYWNrZ3JvdW5kLXNpemU6IDI5OXB4O1xuICAgICAgfVxuICAgIH1cblxuICAgIGgyIHtcbiAgICAgIGZvbnQtc2l6ZTogMjRweDtcbiAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7XG4gICAgICBsaW5lLWhlaWdodDogMS41ZW07XG4gICAgICBtYXJnaW4tYm90dG9tOiAyMHB4O1xuICAgICAgbGV0dGVyLXNwYWNpbmc6IC0wLjAyZW07XG4gICAgfVxuXG4gICAgcCB7XG4gICAgICBjb2xvcjogIzdFODc5MjtcbiAgICAgIGZvbnQtc2l6ZTogMTZweDtcbiAgICAgIGZvbnQtd2VpZ2h0OiA0MDA7XG4gICAgICBsaW5lLWhlaWdodDogMS44ZW07XG4gICAgICBtYXJnaW4tYm90dG9tOiAxNXB4O1xuXG4gICAgICBlbSxcbiAgICAgIHN0cm9uZyB7XG4gICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLnBsYXRmb3JtcyB7XG4gICAgICB3aWR0aDogMTA3cHg7XG4gICAgfVxuICB9XG5cbiAgLmhlcm8tY2VudGVyIHtcbiAgICAudG9wIHtcbiAgICAgIGJhY2tncm91bmQ6ICMxMjFiMmUgbm8tcmVwZWF0IGNlbnRlciBib3R0b20gdXJsKCcvaW1nL3Byby9jcmVhdG9yL2ZlYXR1cmVzLXByZXZpZXctcGhvdG8uanBnJyk7XG4gICAgICBiYWNrZ3JvdW5kLXNpemU6IDE4MDBweDtcblxuICAgICAgLmNvbnRhaW5lciB7XG4gICAgICAgIGhlaWdodDogNDEwcHg7XG4gICAgICAgIHBhZGRpbmctdG9wOiAxNTFweDtcblxuICAgICAgICBoMiB7XG4gICAgICAgICAgY29sb3I6IHdoaXRlO1xuICAgICAgICAgIGZvbnQtc2l6ZTogMzJweDtcbiAgICAgICAgICBmb250LXdlaWdodDogNjAwO1xuICAgICAgICB9XG5cbiAgICAgICAgcCB7XG4gICAgICAgICAgY29sb3I6ICRsaWdodGlzaC1ncmV5O1xuICAgICAgICAgIGZvbnQtc2l6ZTogMThweDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIC5ib3R0b20ge1xuICAgICAgYmFja2dyb3VuZDogIzIyMmY0OSBuby1yZXBlYXQgY2VudGVyIGJvdHRvbSB1cmwoJy9pbWcvcHJvL2NyZWF0b3IvZmVhdHVyZXMtcHJldmlldy1ibHVyLmpwZz8xJyk7XG4gICAgICBiYWNrZ3JvdW5kLXNpemU6IDE4MDBweDtcblxuICAgICAgLmNvbnRhaW5lciB7XG4gICAgICAgIGhlaWdodDogMTQwcHg7XG4gICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICAgICAgcGFkZGluZy10b3A6IDIycHg7XG5cbiAgICAgICAgcCB7XG4gICAgICAgICAgY29sb3I6ICRsaWdodGlzaC1ncmV5O1xuICAgICAgICAgIGZvbnQtc2l6ZTogMTRweDtcbiAgICAgICAgICBmb250LXdlaWdodDogNDAwO1xuICAgICAgICB9XG5cbiAgICAgICAgLmJ0biB7XG4gICAgICAgICAgaGVpZ2h0OiA1M3B4O1xuXG4gICAgICAgICAgJi5hcHAtc3RvcmUge1xuICAgICAgICAgICAgYmFja2dyb3VuZDogbm8tcmVwZWF0IGNlbnRlciBjZW50ZXIgdXJsKCcvaW1nL3Byby9jcmVhdG9yL2FwcC1zdG9yZS1jcmVhdG9yLWJ0bi5wbmcnKTtcbiAgICAgICAgICAgIGJhY2tncm91bmQtc2l6ZTogMTUzcHg7XG4gICAgICAgICAgICB3aWR0aDogMTUzcHg7XG4gICAgICAgICAgICBAbWVkaWEgKG1heC13aWR0aDogJHNjcmVlbi14cy1tYXgpIHtcbiAgICAgICAgICAgICAgYmFja2dyb3VuZC1zaXplOiAxMDJweDtcbiAgICAgICAgICAgICAgd2lkdGg6IDEwMnB4O1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgICYuZ29vZ2xlLXBsYXkge1xuICAgICAgICAgICAgYmFja2dyb3VuZDogbm8tcmVwZWF0IGNlbnRlciBjZW50ZXIgdXJsKCcvaW1nL3Byby9jcmVhdG9yL2dvb2dsZS1wbGF5LWNyZWF0b3ItYnRuLnBuZz8xJyk7XG4gICAgICAgICAgICBiYWNrZ3JvdW5kLXNpemU6IDE4NHB4O1xuICAgICAgICAgICAgd2lkdGg6IDE4NHB4O1xuICAgICAgICAgICAgQG1lZGlhIChtYXgtd2lkdGg6ICRzY3JlZW4teHMtbWF4KSB7XG4gICAgICAgICAgICAgIGJhY2tncm91bmQtc2l6ZTogMTIzcHg7XG4gICAgICAgICAgICAgIHdpZHRoOiAxMjNweDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBzdHJvbmcge1xuICAgICAgZm9udC13ZWlnaHQ6IDUwMDtcbiAgICAgIGNvbG9yOiAkbGlnaHRlci1ncmV5O1xuICAgIH1cbiAgfVxufVxuXG4ucHJvZHVjdC1jb21wYXJpc29uIHtcbiAgZGlzcGxheTogZmxleDtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gIGZsZXgtZmxvdzogcm93IHdyYXA7XG4gIC13ZWJraXQtZm9udC1zbW9vdGhpbmc6IGFudGlhbGlhc2VkO1xuXG4gICYuYmlsbGluZy10b2dnbGUge1xuICAgIG1hcmdpbi1ib3R0b206IDVweDtcblxuICAgIGJ1dHRvbiB7XG4gICAgICBiYWNrZ3JvdW5kOiBub25lO1xuICAgICAgYm9yZGVyOiAwO1xuICAgICAgYm9yZGVyLWJvdHRvbTogMnB4IHNvbGlkICRsaWdodC1ncmV5O1xuICAgICAgY29sb3I6ICRsaWdodGlzaC1ncmV5O1xuICAgICAgZm9udC1zaXplOiAxNHB4O1xuICAgICAgcGFkZGluZzogNXB4IDE1cHg7XG4gICAgICB0cmFuc2l0aW9uOiAuMnMgY29sb3IsIC4ycyBib3JkZXItY29sb3I7XG4gICAgICBvdXRsaW5lOiAwO1xuICAgICAgbGluZS1oZWlnaHQ6IDIxLjRweDtcbiAgICAgIGZvbnQtc2l6ZTogMTVweDtcbiAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7XG5cbiAgICAgICYuYWN0aXZlLFxuICAgICAgJjpob3ZlciB7XG4gICAgICAgIGNvbG9yOiAkYmx1ZTtcbiAgICAgICAgYm9yZGVyLWNvbG9yOiAkYmx1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAucGxhbiB7XG4gICAgYm9yZGVyOiAycHggc29saWQgJGxpZ2h0ZXItZ3JleTtcbiAgICBib3JkZXItcmFkaXVzOiAycHg7XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgIG1hcmdpbjogMTVweCA2cHg7XG4gICAgcGFkZGluZzogMzBweCAxMHB4O1xuICAgIHdpZHRoOiBjYWxjKDI1JSAtIDEzcHgpO1xuICAgIG1heC13aWR0aDogMjUxcHg7XG4gICAgbWluLXdpZHRoOiAyMjRweDtcbiAgICBjb2xvcjogJGRhcmstZ3JleTtcbiAgICBiYWNrZ3JvdW5kOiB3aGl0ZTtcblxuICAgIC5mYWRlIHtcbiAgICAgIG9wYWNpdHk6IDE7XG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICB0cmFuc2l0aW9uOiAuMnMgZWFzZSBhbGw7XG4gICAgICBsZWZ0OiAwO1xuICAgICAgcmlnaHQ6IDA7XG5cbiAgICAgICYubmctaGlkZSB7XG4gICAgICAgIG9wYWNpdHk6IDA7XG4gICAgICAgIHRyYW5zZm9ybTogc2NhbGUoMS41LCAxLjUpO1xuICAgICAgfVxuICAgIH1cblxuICAgICYuZW50ZXJwcmlzZSB7XG4gICAgICBtYXJnaW4tdG9wOiAyMHB4O1xuICAgICAgd2lkdGg6IDY0MHB4O1xuICAgICAgbWF4LXdpZHRoOiAxMDAlO1xuICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuXG4gICAgICAmOmJlZm9yZSxcbiAgICAgICY6YWZ0ZXIge1xuICAgICAgICBiYWNrZ3JvdW5kOiBuby1yZXBlYXQgY2VudGVyIGNlbnRlciB1cmwoJy9pbWcvcHJvL2NyZWF0b3IvZW50cnBycy1zdHIucG5nJyk7XG4gICAgICAgIGJhY2tncm91bmQtc2l6ZTogMjZweDtcbiAgICAgICAgd2lkdGg6IDI2cHg7XG4gICAgICAgIGhlaWdodDogMjRweDtcbiAgICAgICAgY29udGVudDogJyc7XG4gICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgbGVmdDogLTUwcHg7XG4gICAgICB9XG5cbiAgICAgICY6YWZ0ZXIge1xuICAgICAgICBsZWZ0OiBhdXRvO1xuICAgICAgICByaWdodDogLTUwcHg7XG4gICAgICB9XG5cbiAgICAgIGgzIHtcbiAgICAgICAgZGlzcGxheTogaW5saW5lO1xuICAgICAgICBmb250LXNpemU6IDE4cHg7XG4gICAgICAgIGZvbnQtd2VpZ2h0OiA3MDA7XG4gICAgICAgIG1hcmdpbi1yaWdodDogNXB4O1xuICAgICAgfVxuXG4gICAgICBwIHtcbiAgICAgICAgZGlzcGxheTogaW5saW5lO1xuICAgICAgICBmb250LXNpemU6IDE0cHg7XG4gICAgICAgIGZvbnQtd2VpZ2h0OiA0MDA7XG4gICAgICAgIGNvbG9yOiAkbWVkLWdyZXk7XG5cbiAgICAgICAgc3Ryb25nIHtcbiAgICAgICAgICBjb2xvcjogI2Y2NjQ4NjtcbiAgICAgICAgICBmb250LXdlaWdodDogNTAwO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGEge1xuICAgICAgICBmb250LXdlaWdodDogNjAwO1xuICAgICAgfVxuXG4gICAgfVxuXG4gICAgJi5mcmVlIGgyIHsgY29sb3I6ICNmNmE0MmU7IH1cbiAgICAmLmRldiBoMiB7IGNvbG9yOiAjNWM2Nzc1OyB9XG4gICAgJi5wcm8gaDIgeyBjb2xvcjogIzM2Yzk3MTsgfVxuICAgICYuYnVzaW5lc3MgaDIgeyBjb2xvcjogIzgzNjRmNjsgfVxuXG4gICAgaGdyb3VwIHtcbiAgICAgIHBhZGRpbmc6IDA7XG5cbiAgICAgIGgyLFxuICAgICAgaDMsXG4gICAgICBoNCxcbiAgICAgIHNtYWxsIHtcbiAgICAgICAgY29sb3I6ICRibGFja2lzaDtcbiAgICAgICAgbWFyZ2luOiAwO1xuICAgICAgfVxuXG4gICAgICBoMiB7XG4gICAgICAgIGZvbnQtc2l6ZTogMTZweDtcbiAgICAgICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcbiAgICAgICAgbGV0dGVyLXNwYWNpbmc6IDNweDtcbiAgICAgICAgZm9udC13ZWlnaHQ6IDcwMDtcbiAgICAgICAgbWFyZ2luLWJvdHRvbTogMzBweDtcbiAgICAgIH1cblxuICAgICAgaDMge1xuICAgICAgICBmb250LXNpemU6IDU2cHg7XG4gICAgICAgIGZvbnQtd2VpZ2h0OiA3MDA7XG4gICAgICAgIGhlaWdodDogNjFweDtcbiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICAgICB3aWR0aDogMTAwJTtcblxuICAgICAgICBzdXAge1xuICAgICAgICAgIGZvbnQtc2l6ZTogMjBweDtcbiAgICAgICAgICB0b3A6IC0uNWVtO1xuICAgICAgICB9XG5cbiAgICAgICAgc3ViIHtcbiAgICAgICAgICBmb250LXNpemU6IDE4cHg7XG4gICAgICAgICAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgICAgICAgICBib3R0b206IDA7XG4gICAgICAgIH1cblxuICAgICAgICBhIHtcbiAgICAgICAgICBmb250LXNpemU6IDM3cHg7XG4gICAgICAgICAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xuXG4gICAgICAgICAgJjpob3ZlcixcbiAgICAgICAgICAmOmFjdGl2ZSB7XG4gICAgICAgICAgICBjb2xvcjogJGJsdWU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGg0IHtcbiAgICAgICAgZm9udC1zaXplOiAxNnB4O1xuICAgICAgICBmb250LXdlaWdodDogNTAwO1xuICAgICAgICBjb2xvcjogJGxpZ2h0aXNoLWdyZXk7XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxNy42cHg7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdWwge1xuICAgICAgbGlzdC1zdHlsZTogbm9uZTtcbiAgICAgIHBhZGRpbmc6IDI1cHggMCAwO1xuXG4gICAgICBsaSB7XG4gICAgICAgIHBhZGRpbmc6IDhweCAxMHB4O1xuICAgICAgICBtYXJnaW46IDAgLTEwcHg7XG4gICAgICAgIGZvbnQtc2l6ZTogMTRweDtcbiAgICAgICAgZm9udC13ZWlnaHQ6IDQwMDtcblxuICAgICAgICBzdHJvbmcge1xuICAgICAgICAgIGZvbnQtd2VpZ2h0OiA0MDA7XG4gICAgICAgICAgY29sb3I6ICRibGFja2lzaDtcbiAgICAgICAgfVxuXG4gICAgICAgICYuZmVhdHVyZSB7XG4gICAgICAgICAgYmFja2dyb3VuZDogI2Y2ZjhmYTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIEBtZWRpYSAobWF4LXdpZHRoOiAkc2NyZWVuLW1kLW1heCkgIHtcbiAgICAgIHdpZHRoOiAyMDVweDtcbiAgICB9XG4gIH1cblxuICBAbWVkaWEgKG1heC13aWR0aDogJHNjcmVlbi1zbS1tYXgpICB7XG4gICAgLy8gLnByb2R1Y3QtY29tcGFyaXNvblxuICAgIG1heC13aWR0aDogNDgwcHg7XG4gICAgbWFyZ2luOiAwIGF1dG87XG4gIH1cbn1cblxuLmFsc28taW5jbHVkZWQge1xuICBoMyB7XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgIG1hcmdpbjogODVweCBhdXRvO1xuICAgIGZvbnQtd2VpZ2h0OiA0MDA7XG4gIH1cblxuICBzdHJvbmcge1xuICAgIGZvbnQtc2l6ZTogMTZweDtcbiAgICBmb250LXdlaWdodDogNTAwO1xuICAgIG1hcmdpbi1ib3R0b206IDE0cHg7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gIH1cblxuICBwIHtcbiAgICBmb250LXNpemU6IDE0cHg7XG4gICAgY29sb3I6ICRkYXJraXNoLWdyZXk7XG4gICAgbGluZS1oZWlnaHQ6IDEuOGVtO1xuICAgIGZvbnQtd2VpZ2h0OiA0MDA7XG4gIH1cblxuICB1bCB7XG4gICAgcGFkZGluZzogMCA3MnB4O1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgZmxleC1mbG93OiByb3cgd3JhcDtcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG4gIH1cblxuICBsaSB7XG4gICAgd2lkdGg6IDI5NXB4O1xuICAgIGxpc3Qtc3R5bGU6IG5vbmU7XG4gICAgcGFkZGluZy1sZWZ0OiAyOHB4O1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICBtYXJnaW4tYm90dG9tOiA4MHB4O1xuXG4gICAgJjo6YmVmb3JlIHtcbiAgICAgIGJhY2tncm91bmQ6IHRvcCBjZW50ZXIgbm8tcmVwZWF0IHVybCgnL2ltZy9wcm8vY3JlYXRvci9pbmNsdWRlZC1pY29ucy5wbmcnKTtcbiAgICAgIGJhY2tncm91bmQtc2l6ZTogMjBweDtcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgIGNvbnRlbnQ6ICcnO1xuICAgICAgd2lkdGg6IDIwcHg7XG4gICAgICBoZWlnaHQ6IDIwcHg7XG4gICAgICBsZWZ0OiAwO1xuICAgICAgdG9wOiAwO1xuICAgIH1cblxuICAgICYuc2hhcmluZzo6YmVmb3JlIHsgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiBjZW50ZXIgLTIwcHg7IH1cbiAgICAmLmlvbmljOjpiZWZvcmUgeyAgICAgYmFja2dyb3VuZC1wb3NpdGlvbjogY2VudGVyIC00MHB4OyB9XG4gICAgJi50ZW1wbGF0ZXM6OmJlZm9yZSB7IGJhY2tncm91bmQtcG9zaXRpb246IGNlbnRlciAtNjBweDsgfVxuICAgICYuZXhwb3J0aW5nOjpiZWZvcmUgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiBjZW50ZXIgLTgwcHg7IH1cbiAgICAmLnByZXZpZXc6OmJlZm9yZSB7ICAgYmFja2dyb3VuZC1wb3NpdGlvbjogY2VudGVyIC0xMDBweDsgfVxuICB9XG5cbn1cblxuLmZhcSB7XG4gIGJhY2tncm91bmQ6ICNmNmY4ZmE7XG4gIHBhZGRpbmctYm90dG9tOiAxMjBweDtcblxuICBoZ3JvdXAge1xuICAgIHBhZGRpbmctdG9wOiAxMDBweDtcbiAgICBwYWRkaW5nLWJvdHRvbTogMTBweDtcbiAgfVxuXG4gIC5jb2xzIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICAgIC13ZWJraXQtZm9udC1zbW9vdGhpbmc6IGFudGlhbGlhc2VkO1xuICB9XG5cbiAgLmNvbCB7XG4gICAgbWF4LXdpZHRoOiAzOTVweDtcbiAgICBtYXJnaW46IDAgNDVweDtcblxuICAgIGR0IHtcbiAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7XG4gICAgICBmb250LXNpemU6IDE2cHg7XG4gICAgICBtYXJnaW46IDcwcHggMCAxNHB4O1xuICAgICAgbGluZS1oZWlnaHQ6IDIwcHg7XG4gICAgfVxuXG4gICAgZGQge1xuICAgICAgY29sb3I6ICM4MDg2OTI7XG4gICAgICBmb250LXNpemU6IDE0cHg7XG4gICAgICBsaW5lLWhlaWdodDogMmVtO1xuXG4gICAgICBzdHJvbmcge1xuICAgICAgICBmb250LXdlaWdodDogNTAwO1xuICAgICAgICBjb2xvcjogIzgwODY5MjtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBAbWVkaWEgKG1heC13aWR0aDogJHNjcmVlbi14cy1tYXgpICB7XG4gICAgZGlzcGxheTogYmxvY2s7XG5cbiAgICAuY29scyB7XG4gICAgICBkaXNwbGF5OiBibG9jaztcbiAgICB9XG5cbiAgICAuY29sIHtcbiAgICAgIG1heC13aWR0aDogMTAwJTtcbiAgICB9XG4gIH1cbn1cblxuLmJyb2R5IHtcbiAgYmFja2dyb3VuZDogcmlnaHQgYm90dG9tIG5vLXJlcGVhdCB1cmwoJy9pbWcvcHJvL2NyZWF0b3Ivc3VwcG9ydC1icm9keS5qcGcnKTtcbiAgYmFja2dyb3VuZC1zaXplOiA2MCU7XG4gIG1pbi1oZWlnaHQ6IDU1MHB4O1xuICBwYWRkaW5nLWJvdHRvbTogMTAwcHg7XG4gIHBhZGRpbmctdG9wOiAzMnB4O1xuXG4gICsgLnRhaWwge1xuICAgIG1hcmdpbi10b3A6IDA7XG4gIH1cblxuICBkbCB7XG4gICAgd2lkdGg6IDQ1JTtcblxuICAgIGR0IHtcbiAgICAgIHBhZGRpbmc6IDUwcHggMCAxMHB4O1xuICAgICAgZm9udC1zaXplOiAxOHB4O1xuICAgICAgZm9udC13ZWlnaHQ6IDQwMDtcbiAgICB9XG5cbiAgICBkZCB7XG4gICAgICBjb2xvcjogJGRhcmstZ3JleTtcbiAgICAgIGZvbnQtc2l6ZTogMTRweDtcbiAgICAgIGxpbmUtaGVpZ2h0OiAxLjllbTtcbiAgICAgIGZvbnQtd2VpZ2h0OiA0MDA7XG4gICAgfVxuICB9XG5cbiAgQG1lZGlhIChtYXgtd2lkdGg6ICRzY3JlZW4teHMtbWF4KSAge1xuICAgIGJhY2tncm91bmQtcG9zaXRpb246IGNlbnRlciBib3R0b207XG4gICAgcGFkZGluZy1ib3R0b206IDI1MHB4O1xuICAgIGJhY2tncm91bmQtc2l6ZTogMzAwcHg7XG5cbiAgICBkbCB7XG4gICAgICB3aWR0aDogMTAwJTtcbiAgICB9XG4gIH1cbn1cblxuI2JvZHktY3JlYXRvci1kb2NzLFxuI2JvZHktY3JlYXRvci1kb2NzIC5jb250YWluZXIge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG59XG5cbiNib2R5LWNyZWF0b3ItZG9jcyAjaW5kZXgge1xuICAtd2Via2l0LWZvbnQtc21vb3RoaW5nOiBhbnRpYWxpYXNlZDtcbiAgcG9zaXRpb246IGZpeGVkO1xuICBtYXgtaGVpZ2h0OiAxMDAlO1xuICBvdmVyZmxvdy15OiBhdXRvO1xuICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwyNTUsMjU1LC44KTtcbiAgQG1lZGlhIChtaW4td2lkdGg6ICRzY3JlZW4tbGctbWluKSB7XG4gICAgd2lkdGg6IDI3N3B4O1xuICB9XG4gIEBtZWRpYSAobWF4LXdpZHRoOiAkc2NyZWVuLW1kLW1heCkgYW5kIChtaW4td2lkdGg6ICRzY3JlZW4tbWQtbWluKSB7XG4gICAgd2lkdGg6IDIxMnB4O1xuICB9XG4gIEBtZWRpYSAobWF4LXdpZHRoOiAkc2NyZWVuLXNtLW1heCkgYW5kIChtaW4td2lkdGg6ICRzY3JlZW4tc20tbWluKSB7XG4gICAgd2lkdGg6IDE1N3B4O1xuICB9XG4gIEBtZWRpYSAobWF4LXdpZHRoOiAkc2NyZWVuLXhzLW1heCkgIHtcbiAgICB3aWR0aDogMTAwJTtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmUgIWltcG9ydGFudDtcbiAgfVxuXG4gICYuYm90dG9tIHtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgYm90dG9tOiAwO1xuICB9XG5cbiAgdWwge1xuICAgIHBhZGRpbmctbGVmdDogMDtcbiAgICBsaXN0LXN0eWxlOiBub25lO1xuXG4gICAgYSB7XG4gICAgICBmb250LXNpemU6IDE2cHg7XG4gICAgICBjb2xvcjogJGJsYWNraXNoO1xuICAgICAgZm9udC13ZWlnaHQ6IDQwMDtcbiAgICAgIG1hcmdpbjogMS4xZW0gMDtcbiAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgYm9yZGVyLXJpZ2h0OiAycHggc29saWQgdHJhbnNwYXJlbnQ7XG4gICAgICB0cmFuc2l0aW9uOiBjb2xvciAuMnMsIGJvcmRlci1jb2xvciAuMnM7XG4gICAgfVxuXG4gICAgdWwgLmFjdGl2ZSA+IGEsXG4gICAgYTpob3ZlciB7XG4gICAgICBjb2xvcjogJGJsdWU7XG4gICAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG4gICAgICBiYWNrZ3JvdW5kOiBub25lO1xuICAgIH1cblxuICAgIHVsIHtcbiAgICAgIHBhZGRpbmctbGVmdDogMjVweDtcbiAgICAgIHBhZGRpbmctcmlnaHQ6IDI1cHg7XG5cbiAgICAgICYuYW5pbWF0ZS1zaG93IHtcbiAgICAgICAgb3BhY2l0eTogMTtcblxuICAgICAgICBhIHtcbiAgICAgICAgICBtaW4taGVpZ2h0OiAyMHB4O1xuICAgICAgICAgIG1heC1oZWlnaHQ6IDE1MHB4O1xuICAgICAgICB9XG5cbiAgICAgICAgJi5uZy1oaWRlLWFkZCxcbiAgICAgICAgJi5uZy1oaWRlLXJlbW92ZSB7XG4gICAgICAgICAgdHJhbnNpdGlvbjogYWxsIGxpbmVhciAuMnM7XG4gICAgICAgIH1cblxuICAgICAgICAmLm5nLWhpZGUge1xuICAgICAgICAgIG9wYWNpdHk6IDA7XG5cbiAgICAgICAgICBhIHtcbiAgICAgICAgICAgIG1heC1oZWlnaHQ6IDA7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGEge1xuICAgICAgICBmb250LXNpemU6IDE0cHg7XG4gICAgICAgIGNvbG9yOiAkbGlnaHRpc2gtZ3JleTtcbiAgICAgICAgZm9udC13ZWlnaHQ6IDQwMDtcbiAgICAgICAgdHJhbnNpdGlvbjogYWxsIGxpbmVhciAuMnM7XG4gICAgICB9XG5cbiAgICAgIC5hY3RpdmUgYSB7XG4gICAgICAgIGJvcmRlci1jb2xvcjogJGJsdWU7XG4gICAgICAgIG92ZXJmbG93LXk6IGhpZGRlbjtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuI2RvY3Mge1xuICBoMSxcbiAgaDIsXG4gIGgzLFxuICBoNCxcbiAgaDUsXG4gIGg2IHtcbiAgICBmb250LXdlaWdodDogNjAwO1xuICAgIG1hcmdpbjogMi4yZW0gMCAuOGVtO1xuICAgIGxpbmUtaGVpZ2h0OiAyZW07XG4gIH1cblxuICBoMiB7XG4gICAgZm9udC1zaXplOiAyMHB4O1xuICB9XG5cbiAgaDMge1xuICAgIGZvbnQtc2l6ZTogMThweDtcbiAgfVxuXG4gIGg0IHtcbiAgICBmb250LXNpemU6IDE2cHg7XG4gIH1cblxuICBwIHtcbiAgICBmb250LXNpemU6IDE0cHg7XG4gICAgY29sb3I6ICRkYXJraXNoLWdyZXk7XG4gICAgbGluZS1oZWlnaHQ6IDJlbTtcbiAgICBmb250LXdlaWdodDogNDAwO1xuICB9XG59XG5cbi5zdHVkaW8tY2FsbG91dCB7XG4gIG1hcmdpbjogMTAwcHggMDtcbiAgYmFja2dyb3VuZC1jb2xvcjogIzRENUI2OTtcbiAgYm9yZGVyLXJhZGl1czogOHB4O1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGFsaWduLWl0ZW1zOiBmbGV4LXN0YXJ0O1xuXG4gIGhncm91cCB7XG4gICAgZmxleDogMCAwIDQ1JTtcbiAgICBwYWRkaW5nOiAwO1xuICAgIHRleHQtYWxpZ246IGxlZnQ7XG4gICAgcGFkZGluZzogODBweCAwIDgwcHggODBweDtcblxuICAgIGgzIHtcbiAgICAgIG1hcmdpbi10b3A6IDA7XG4gICAgICBtYXJnaW4tYm90dG9tOiAyMnB4O1xuICAgICAgZm9udC13ZWlnaHQ6IDUwMDtcbiAgICAgIGNvbG9yOiAjZmZmO1xuICAgIH1cblxuICAgIHAge1xuICAgICAgZm9udC1zaXplOiAxOHB4O1xuICAgICAgbGluZS1oZWlnaHQ6IDI0cHg7XG4gICAgICBjb2xvcjogI0RERERERDtcbiAgICAgIG1hcmdpbi1ib3R0b206IDIwcHg7XG4gICAgfVxuXG4gICAgcCBzdHJvbmd7XG4gICAgICBmb250LXdlaWdodDogNjAwO1xuICAgICAgY29sb3I6ICNmZmY7XG4gICAgfVxuXG4gICAgLmJ0biB7XG4gICAgICBwYWRkaW5nOiAxMXB4IDIwcHg7XG4gICAgICBmb250LXNpemU6IDE2cHg7XG4gICAgfVxuICB9XG5cbiAgaW1nIHtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgdG9wOiAwO1xuICAgIHJpZ2h0OiAwO1xuICAgIHdpZHRoOiA1MCUgIWltcG9ydGFudDtcbiAgfVxuXG4gIEBtZWRpYSAobWF4LXdpZHRoOiAkc2NyZWVuLWxnKSAge1xuICAgIGhncm91cCB7XG4gICAgICBwYWRkaW5nOiA0MHB4IDAgNDBweCA0MHB4O1xuICAgIH1cbiAgfVxuXG4gIEBtZWRpYSAobWF4LXdpZHRoOiAkc2NyZWVuLXNtKSAge1xuICAgIG1hcmdpbjogMTIwcHggMCAwO1xuICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW4tcmV2ZXJzZTtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuXG4gICAgaW1nIHtcbiAgICAgIHdpZHRoOiAxMDAlICFpbXBvcnRhbnQ7XG4gICAgICBtYXgtd2lkdGg6IDQ3NXB4O1xuICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICAgbWFyZ2luLWJvdHRvbTogLTEwMHB4O1xuICAgICAgbWFyZ2luLXRvcDogLTYwcHg7XG4gICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICB6LWluZGV4OiAxO1xuICAgIH1cblxuICAgIGhncm91cCB7XG4gICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgICBwYWRkaW5nOiA0MHB4O1xuICAgICAgei1pbmRleDogMjtcbiAgICB9XG4gIH1cblxuICBAbWVkaWEgKG1heC13aWR0aDogJHNjcmVlbi14cykgIHtcbiAgICBoZ3JvdXAge1xuICAgICAgcGFkZGluZy1sZWZ0OiAyMHB4O1xuICAgICAgcGFkZGluZy1yaWdodDogMjBweDtcblxuICAgICAgcCB7XG4gICAgICAgIGZvbnQtc2l6ZTogMTZweDtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbiIsIkBpbXBvcnQgdXJsKCdodHRwczovL2ZvbnRzLmdvb2dsZWFwaXMuY29tL2Nzcz9mYW1pbHk9Um9ib3RvK01vbm8nKTtcblxuJGNkbjogJ2h0dHBzOi8vY29kZS5pb25pY2ZyYW1ld29yay5jb20vYXNzZXRzL2ZvbnRzLyc7XG4kZm9udHNEaXI6ICcvZm9udHMvJztcbiRlaW5hRGlyOiAkZm9udHNEaXIgKyAnZWluYS8nO1xuJGdyYXBoaWtEaXI6ICRmb250c0RpciArICdncmFwaGlrLyc7XG5cbkBmb250LWZhY2Uge1xuICBmb250LWZhbWlseTogJ0lvbmljb25zJztcbiAgc3JjOlxuICAgIHVybCgkZm9udHNEaXIgKyAnaW9uaWNvbnMud29mZjInKSBmb3JtYXQoJ3dvZmYyJyksXG4gICAgdXJsKCRmb250c0RpciArICdpb25pY29ucy53b2ZmJykgZm9ybWF0KCd3b2ZmJyksXG4gICAgdXJsKCRmb250c0RpciArICdpb25pY29ucy50dGYnKSBmb3JtYXQoJ3R0ZicpLFxuICAgIHVybCgkZm9udHNEaXIgKyAnaW9uaWNvbnMuZW90I2llZml4JykgZm9ybWF0KCdlb3QnKVxuICAgIHVybCgkZm9udHNEaXIgKyAnaW9uaWNvbnMuc3ZnI0lvbmljb25zJykgZm9ybWF0KCdzdmcnKTtcbiAgZm9udC13ZWlnaHQ6IG5vcm1hbDtcbiAgZm9udC1zdHlsZTogbm9ybWFsO1xufVxuXG5AZm9udC1mYWNlIHtcbiAgZm9udC1mYW1pbHk6ICdFaW5hJztcbiAgc3JjOiB1cmwoJGVpbmFEaXIgKyAnZWluYS0wMS1ib2xkLndvZmYyJykgZm9ybWF0KCd3b2ZmMicpLFxuICAgICAgIHVybCgkZWluYURpciArICdlaW5hLTAxLWJvbGQud29mZicpIGZvcm1hdCgnd29mZicpLFxuICAgICAgIHVybCgkZWluYURpciArICdlaW5hLTAxLWJvbGQudHRmJykgZm9ybWF0KCd0dGYnKSxcbiAgICAgICB1cmwoJGVpbmFEaXIgKyAnZWluYS0wMS1ib2xkLmVvdD8jaWVmaXgnKSBmb3JtYXQoJ2VvdCcpO1xuICBmb250LXdlaWdodDogNzAwO1xuICB1bmljb2RlLXJhbmdlOiBVKzAwMC01RkY7XG59XG5AZm9udC1mYWNlIHtcbiAgZm9udC1mYW1pbHk6ICdFaW5hJztcbiAgc3JjOiB1cmwoJGVpbmFEaXIgKyAnZWluYS0wMS1zZW1pYm9sZC53b2ZmMicpIGZvcm1hdCgnd29mZjInKSxcbiAgICAgICB1cmwoJGVpbmFEaXIgKyAnZWluYS0wMS1zZW1pYm9sZC53b2ZmJykgZm9ybWF0KCd3b2ZmJyksXG4gICAgICAgdXJsKCRlaW5hRGlyICsgJ2VpbmEtMDEtc2VtaWJvbGQudHRmJykgZm9ybWF0KCd0dGYnKSxcbiAgICAgICB1cmwoJGVpbmFEaXIgKyAnZWluYS0wMS1zZW1pYm9sZC5lb3Q/I2llZml4JykgZm9ybWF0KCdlb3QnKTtcbiAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgdW5pY29kZS1yYW5nZTogVSswMDAtNUZGO1xufVxuQGZvbnQtZmFjZSB7XG4gIGZvbnQtZmFtaWx5OiAnRWluYSc7XG4gIHNyYzogdXJsKCRlaW5hRGlyICsgJ2VpbmEtMDEtcmVndWxhci53b2ZmMicpIGZvcm1hdCgnd29mZjInKSxcbiAgICAgICB1cmwoJGVpbmFEaXIgKyAnZWluYS0wMS1yZWd1bGFyLndvZmYnKSBmb3JtYXQoJ3dvZmYnKSxcbiAgICAgICB1cmwoJGVpbmFEaXIgKyAnZWluYS0wMS1yZWd1bGFyLnR0ZicpIGZvcm1hdCgndHRmJyksXG4gICAgICAgdXJsKCRlaW5hRGlyICsgJ2VpbmEtMDEtcmVndWxhci5lb3Q/I2llZml4JykgZm9ybWF0KCdlb3QnKTtcbiAgZm9udC13ZWlnaHQ6IDQwMDtcbiAgdW5pY29kZS1yYW5nZTogVSswMDAtNUZGO1xufVxuXG5AZm9udC1mYWNlIHtcbiAgZm9udC1mYW1pbHk6ICdJbnRlcic7XG4gIGZvbnQtc3R5bGU6ICBub3JtYWw7XG4gIGZvbnQtd2VpZ2h0OiA0MDA7XG4gIHVuaWNvZGUtcmFuZ2U6IFUrMDAwLTVGRjtcbiAgc3JjOiB1cmwoJGNkbiArICdpbnRlci9JbnRlci1SZWd1bGFyLndvZmYyJykgZm9ybWF0KCd3b2ZmMicpLFxuICAgICAgIHVybCgkY2RuICsgJ2ludGVyL0ludGVyLVJlZ3VsYXIud29mZicpIGZvcm1hdCgnd29mZicpO1xufVxuQGZvbnQtZmFjZSB7XG4gIGZvbnQtZmFtaWx5OiAnSW50ZXInO1xuICBmb250LXN0eWxlOiAgaXRhbGljO1xuICBmb250LXdlaWdodDogNDAwO1xuICB1bmljb2RlLXJhbmdlOiBVKzAwMC01RkY7XG4gIHNyYzogdXJsKCRjZG4gKyAnaW50ZXIvSW50ZXItSXRhbGljLndvZmYyJykgZm9ybWF0KCd3b2ZmMicpLFxuICAgICAgIHVybCgkY2RuICsgJ2ludGVyL0ludGVyLUl0YWxpYy53b2ZmJykgZm9ybWF0KCd3b2ZmJyk7XG59XG5cbkBmb250LWZhY2Uge1xuICBmb250LWZhbWlseTogJ0ludGVyJztcbiAgZm9udC1zdHlsZTogIG5vcm1hbDtcbiAgZm9udC13ZWlnaHQ6IDUwMDtcbiAgdW5pY29kZS1yYW5nZTogVSswMDAtNUZGO1xuICBzcmM6IHVybCgkY2RuICsgJ2ludGVyL0ludGVyLU1lZGl1bS53b2ZmMicpIGZvcm1hdCgnd29mZjInKSxcbiAgICAgICB1cmwoJGNkbiArICdpbnRlci9JbnRlci1NZWRpdW0ud29mZicpIGZvcm1hdCgnd29mZicpO1xufVxuQGZvbnQtZmFjZSB7XG4gIGZvbnQtZmFtaWx5OiAnSW50ZXInO1xuICBmb250LXN0eWxlOiAgaXRhbGljO1xuICBmb250LXdlaWdodDogNTAwO1xuICB1bmljb2RlLXJhbmdlOiBVKzAwMC01RkY7XG4gIHNyYzogdXJsKCRjZG4gKyAnaW50ZXIvSW50ZXItTWVkaXVtSXRhbGljLndvZmYyJykgZm9ybWF0KCd3b2ZmMicpLFxuICAgICAgIHVybCgkY2RuICsgJ2ludGVyL0ludGVyLU1lZGl1bUl0YWxpYy53b2ZmJykgZm9ybWF0KCd3b2ZmJyk7XG59XG5cbkBmb250LWZhY2Uge1xuICBmb250LWZhbWlseTogJ0ludGVyJztcbiAgZm9udC1zdHlsZTogIG5vcm1hbDtcbiAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgdW5pY29kZS1yYW5nZTogVSswMDAtNUZGO1xuICBzcmM6IHVybCgkY2RuICsgJ2ludGVyL0ludGVyLVNlbWlCb2xkLndvZmYyJykgZm9ybWF0KCd3b2ZmMicpLFxuICAgICAgIHVybCgkY2RuICsgJ2ludGVyL0ludGVyLVNlbWlCb2xkLndvZmYnKSBmb3JtYXQoJ3dvZmYnKTtcbn1cbkBmb250LWZhY2Uge1xuICBmb250LWZhbWlseTogJ0ludGVyJztcbiAgZm9udC1zdHlsZTogIGl0YWxpYztcbiAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgdW5pY29kZS1yYW5nZTogVSswMDAtNUZGO1xuICBzcmM6IHVybCgkY2RuICsgJ2ludGVyL0ludGVyLVNlbWlCb2xkSXRhbGljLndvZmYyJykgZm9ybWF0KCd3b2ZmMicpLFxuICAgICAgIHVybCgkY2RuICsgJ2ludGVyL0ludGVyLVNlbWlCb2xkSXRhbGljLndvZmYnKSBmb3JtYXQoJ3dvZmYnKTtcbn1cblxuQGZvbnQtZmFjZSB7XG4gIGZvbnQtZmFtaWx5OiAnSW50ZXInO1xuICBmb250LXN0eWxlOiAgbm9ybWFsO1xuICBmb250LXdlaWdodDogNzAwO1xuICB1bmljb2RlLXJhbmdlOiBVKzAwMC01RkY7XG4gIHNyYzogdXJsKCRjZG4gKyAnaW50ZXIvSW50ZXItQm9sZC53b2ZmMicpIGZvcm1hdCgnd29mZjInKSxcbiAgICAgICB1cmwoJGNkbiArICdpbnRlci9JbnRlci1Cb2xkLndvZmYnKSBmb3JtYXQoJ3dvZmYnKTtcbn1cbkBmb250LWZhY2Uge1xuICBmb250LWZhbWlseTogJ0ludGVyJztcbiAgZm9udC1zdHlsZTogIGl0YWxpYztcbiAgZm9udC13ZWlnaHQ6IDcwMDtcbiAgdW5pY29kZS1yYW5nZTogVSswMDAtNUZGO1xuICBzcmM6IHVybCgkY2RuICsgJ2ludGVyL0ludGVyLUJvbGRJdGFsaWMud29mZjInKSBmb3JtYXQoJ3dvZmYyJyksXG4gICAgICAgdXJsKCRjZG4gKyAnaW50ZXIvSW50ZXItQm9sZEl0YWxpYy53b2ZmJykgZm9ybWF0KCd3b2ZmJyk7XG59XG5cbkBmb250LWZhY2Uge1xuICBmb250LWZhbWlseTogJ0ludGVyJztcbiAgZm9udC1zdHlsZTogIG5vcm1hbDtcbiAgZm9udC13ZWlnaHQ6IDgwMDtcbiAgdW5pY29kZS1yYW5nZTogVSswMDAtNUZGO1xuICBzcmM6IHVybCgkY2RuICsgJ2ludGVyL0ludGVyLUV4dHJhQm9sZC53b2ZmMicpIGZvcm1hdCgnd29mZjInKSxcbiAgICAgICB1cmwoJGNkbiArICdpbnRlci9JbnRlci1FeHRyYUJvbGQud29mZicpIGZvcm1hdCgnd29mZicpO1xufVxuQGZvbnQtZmFjZSB7XG4gIGZvbnQtZmFtaWx5OiAnSW50ZXInO1xuICBmb250LXN0eWxlOiAgaXRhbGljO1xuICBmb250LXdlaWdodDogODAwO1xuICB1bmljb2RlLXJhbmdlOiBVKzAwMC01RkY7XG4gIHNyYzogdXJsKCRjZG4gKyAnaW50ZXIvSW50ZXItRXh0cmFCb2xkSXRhbGljLndvZmYyJykgZm9ybWF0KCd3b2ZmMicpLFxuICAgICAgIHVybCgkY2RuICsgJ2ludGVyL0ludGVyLUV4dHJhQm9sZEl0YWxpYy53b2ZmJykgZm9ybWF0KCd3b2ZmJyk7XG59XG5cbkBmb250LWZhY2Uge1xuICBmb250LWZhbWlseTogJ0ludGVyJztcbiAgZm9udC1zdHlsZTogIG5vcm1hbDtcbiAgZm9udC13ZWlnaHQ6IDkwMDtcbiAgdW5pY29kZS1yYW5nZTogVSswMDAtNUZGO1xuICBzcmM6IHVybCgkY2RuICsgJ2ludGVyL0ludGVyLUJsYWNrLndvZmYyJykgZm9ybWF0KCd3b2ZmMicpLFxuICAgICAgIHVybCgkY2RuICsgJ2ludGVyL0ludGVyLUJsYWNrLndvZmYnKSBmb3JtYXQoJ3dvZmYnKTtcbn1cbkBmb250LWZhY2Uge1xuICBmb250LWZhbWlseTogJ0ludGVyJztcbiAgZm9udC1zdHlsZTogIGl0YWxpYztcbiAgZm9udC13ZWlnaHQ6IDkwMDtcbiAgdW5pY29kZS1yYW5nZTogVSswMDAtNUZGO1xuICBzcmM6IHVybCgkY2RuICsgJ2ludGVyL0ludGVyLUJsYWNrSXRhbGljLndvZmYyJykgZm9ybWF0KCd3b2ZmMicpLFxuICAgICAgIHVybCgkY2RuICsgJ2ludGVyL0ludGVyLUJsYWNrSXRhbGljLndvZmYnKSBmb3JtYXQoJ3dvZmYnKTtcbn1cblxuQGZvbnQtZmFjZSB7XG4gIGZvbnQtZmFtaWx5OiAnRnJlaWdodFRleHRQcm8nO1xuICBmb250LXdlaWdodDogNDAwO1xuICB1bmljb2RlLXJhbmdlOiBVKzAwMC01RkY7XG4gIHNyYzogdXJsKCRjZG4gKyAnMjlEMjZBXzBfMC5lb3QnKTtcbiAgc3JjOiB1cmwoJGNkbiArICcyOUQyNkFfMF8wLmVvdD8jaWVmaXgnKSBmb3JtYXQoJ2VtYmVkZGVkLW9wZW50eXBlJyksXG4gICAgICAgdXJsKCRjZG4gKyAnMjlEMjZBXzBfMC53b2ZmJykgZm9ybWF0KCd3b2ZmJyksXG4gICAgICAgdXJsKCRjZG4gKyAnMjlEMjZBXzBfMC50dGYnKSBmb3JtYXQoJ3RydWV0eXBlJyk7XG59XG5cbkBmb250LWZhY2Uge1xuICBmb250LWZhbWlseTogJ0ZyZWlnaHRUZXh0UHJvJztcbiAgZm9udC13ZWlnaHQ6IDUwMDtcbiAgdW5pY29kZS1yYW5nZTogVSswMDAtNUZGO1xuICBzcmM6IHVybCgkY2RuICsgJzI5RDI2QV8xXzAuZW90Jyk7XG4gIHNyYzogdXJsKCRjZG4gKyAnMjlEMjZBXzFfMC5lb3Q/I2llZml4JykgZm9ybWF0KCdlbWJlZGRlZC1vcGVudHlwZScpLFxuICAgICAgIHVybCgkY2RuICsgJzI5RDI2QV8xXzAud29mZicpIGZvcm1hdCgnd29mZicpLFxuICAgICAgIHVybCgkY2RuICsgJzI5RDI2QV8xXzAudHRmJykgZm9ybWF0KCd0cnVldHlwZScpO1xufVxuIiwiLyohIG5vcm1hbGl6ZS5jc3MgdjMuMC4yIHwgTUlUIExpY2Vuc2UgfCBnaXQuaW8vbm9ybWFsaXplICovXG5cbi8vXG4vLyAxLiBTZXQgZGVmYXVsdCBmb250IGZhbWlseSB0byBzYW5zLXNlcmlmLlxuLy8gMi4gUHJldmVudCBpT1MgdGV4dCBzaXplIGFkanVzdCBhZnRlciBvcmllbnRhdGlvbiBjaGFuZ2UsIHdpdGhvdXQgZGlzYWJsaW5nXG4vLyAgICB1c2VyIHpvb20uXG4vL1xuXG5odG1sIHtcbiAgZm9udC1mYW1pbHk6IHNhbnMtc2VyaWY7IC8vIDFcbiAgLW1zLXRleHQtc2l6ZS1hZGp1c3Q6IDEwMCU7IC8vIDJcbiAgLXdlYmtpdC10ZXh0LXNpemUtYWRqdXN0OiAxMDAlOyAvLyAyXG59XG5cbi8vXG4vLyBSZW1vdmUgZGVmYXVsdCBtYXJnaW4uXG4vL1xuXG5ib2R5IHtcbiAgbWFyZ2luOiAwO1xufVxuXG4vLyBIVE1MNSBkaXNwbGF5IGRlZmluaXRpb25zXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4vL1xuLy8gQ29ycmVjdCBgYmxvY2tgIGRpc3BsYXkgbm90IGRlZmluZWQgZm9yIGFueSBIVE1MNSBlbGVtZW50IGluIElFIDgvOS5cbi8vIENvcnJlY3QgYGJsb2NrYCBkaXNwbGF5IG5vdCBkZWZpbmVkIGZvciBgZGV0YWlsc2Agb3IgYHN1bW1hcnlgIGluIElFIDEwLzExXG4vLyBhbmQgRmlyZWZveC5cbi8vIENvcnJlY3QgYGJsb2NrYCBkaXNwbGF5IG5vdCBkZWZpbmVkIGZvciBgbWFpbmAgaW4gSUUgMTEuXG4vL1xuXG5hcnRpY2xlLFxuYXNpZGUsXG5kZXRhaWxzLFxuZmlnY2FwdGlvbixcbmZpZ3VyZSxcbmZvb3RlcixcbmhlYWRlcixcbmhncm91cCxcbm1haW4sXG5tZW51LFxubmF2LFxuc2VjdGlvbixcbnN1bW1hcnkge1xuICBkaXNwbGF5OiBibG9jaztcbn1cblxuLy9cbi8vIDEuIENvcnJlY3QgYGlubGluZS1ibG9ja2AgZGlzcGxheSBub3QgZGVmaW5lZCBpbiBJRSA4LzkuXG4vLyAyLiBOb3JtYWxpemUgdmVydGljYWwgYWxpZ25tZW50IG9mIGBwcm9ncmVzc2AgaW4gQ2hyb21lLCBGaXJlZm94LCBhbmQgT3BlcmEuXG4vL1xuXG5hdWRpbyxcbmNhbnZhcyxcbnByb2dyZXNzLFxudmlkZW8ge1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7IC8vIDFcbiAgdmVydGljYWwtYWxpZ246IGJhc2VsaW5lOyAvLyAyXG59XG5cbi8vXG4vLyBQcmV2ZW50IG1vZGVybiBicm93c2VycyBmcm9tIGRpc3BsYXlpbmcgYGF1ZGlvYCB3aXRob3V0IGNvbnRyb2xzLlxuLy8gUmVtb3ZlIGV4Y2VzcyBoZWlnaHQgaW4gaU9TIDUgZGV2aWNlcy5cbi8vXG5cbmF1ZGlvOm5vdChbY29udHJvbHNdKSB7XG4gIGRpc3BsYXk6IG5vbmU7XG4gIGhlaWdodDogMDtcbn1cblxuLy9cbi8vIEFkZHJlc3MgYFtoaWRkZW5dYCBzdHlsaW5nIG5vdCBwcmVzZW50IGluIElFIDgvOS8xMC5cbi8vIEhpZGUgdGhlIGB0ZW1wbGF0ZWAgZWxlbWVudCBpbiBJRSA4LzkvMTEsIFNhZmFyaSwgYW5kIEZpcmVmb3ggPCAyMi5cbi8vXG5cbltoaWRkZW5dLFxudGVtcGxhdGUge1xuICBkaXNwbGF5OiBub25lO1xufVxuXG4vLyBMaW5rc1xuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuLy9cbi8vIFJlbW92ZSB0aGUgZ3JheSBiYWNrZ3JvdW5kIGNvbG9yIGZyb20gYWN0aXZlIGxpbmtzIGluIElFIDEwLlxuLy9cblxuYSB7XG4gIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xufVxuXG4vL1xuLy8gSW1wcm92ZSByZWFkYWJpbGl0eSB3aGVuIGZvY3VzZWQgYW5kIGFsc28gbW91c2UgaG92ZXJlZCBpbiBhbGwgYnJvd3NlcnMuXG4vL1xuXG5hOmFjdGl2ZSxcbmE6aG92ZXIge1xuICBvdXRsaW5lOiAwO1xufVxuXG4vLyBUZXh0LWxldmVsIHNlbWFudGljc1xuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuLy9cbi8vIEFkZHJlc3Mgc3R5bGluZyBub3QgcHJlc2VudCBpbiBJRSA4LzkvMTAvMTEsIFNhZmFyaSwgYW5kIENocm9tZS5cbi8vXG5cbmFiYnJbdGl0bGVdIHtcbiAgYm9yZGVyLWJvdHRvbTogMXB4IGRvdHRlZDtcbn1cblxuLy9cbi8vIEFkZHJlc3Mgc3R5bGUgc2V0IHRvIGBib2xkZXJgIGluIEZpcmVmb3ggNCssIFNhZmFyaSwgYW5kIENocm9tZS5cbi8vXG5cbmIsXG5zdHJvbmcge1xuICBmb250LXdlaWdodDogYm9sZDtcbn1cblxuLy9cbi8vIEFkZHJlc3Mgc3R5bGluZyBub3QgcHJlc2VudCBpbiBTYWZhcmkgYW5kIENocm9tZS5cbi8vXG5cbmRmbiB7XG4gIGZvbnQtc3R5bGU6IGl0YWxpYztcbn1cblxuLy9cbi8vIEFkZHJlc3MgdmFyaWFibGUgYGgxYCBmb250LXNpemUgYW5kIG1hcmdpbiB3aXRoaW4gYHNlY3Rpb25gIGFuZCBgYXJ0aWNsZWBcbi8vIGNvbnRleHRzIGluIEZpcmVmb3ggNCssIFNhZmFyaSwgYW5kIENocm9tZS5cbi8vXG5cbmgxIHtcbiAgZm9udC1zaXplOiAyZW07XG4gIG1hcmdpbjogMC42N2VtIDA7XG59XG5cbi8vXG4vLyBBZGRyZXNzIHN0eWxpbmcgbm90IHByZXNlbnQgaW4gSUUgOC85LlxuLy9cblxubWFyayB7XG4gIGJhY2tncm91bmQ6ICNmZjA7XG4gIGNvbG9yOiAjMDAwO1xufVxuXG4vL1xuLy8gQWRkcmVzcyBpbmNvbnNpc3RlbnQgYW5kIHZhcmlhYmxlIGZvbnQgc2l6ZSBpbiBhbGwgYnJvd3NlcnMuXG4vL1xuXG5zbWFsbCB7XG4gIGZvbnQtc2l6ZTogODAlO1xufVxuXG4vL1xuLy8gUHJldmVudCBgc3ViYCBhbmQgYHN1cGAgYWZmZWN0aW5nIGBsaW5lLWhlaWdodGAgaW4gYWxsIGJyb3dzZXJzLlxuLy9cblxuc3ViLFxuc3VwIHtcbiAgZm9udC1zaXplOiA3NSU7XG4gIGxpbmUtaGVpZ2h0OiAwO1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIHZlcnRpY2FsLWFsaWduOiBiYXNlbGluZTtcbn1cblxuc3VwIHtcbiAgdG9wOiAtMC41ZW07XG59XG5cbnN1YiB7XG4gIGJvdHRvbTogLTAuMjVlbTtcbn1cblxuLy8gRW1iZWRkZWQgY29udGVudFxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuLy9cbi8vIFJlbW92ZSBib3JkZXIgd2hlbiBpbnNpZGUgYGFgIGVsZW1lbnQgaW4gSUUgOC85LzEwLlxuLy9cblxuaW1nIHtcbiAgYm9yZGVyOiAwO1xufVxuXG4vL1xuLy8gQ29ycmVjdCBvdmVyZmxvdyBub3QgaGlkZGVuIGluIElFIDkvMTAvMTEuXG4vL1xuXG5zdmc6bm90KDpyb290KSB7XG4gIG92ZXJmbG93OiBoaWRkZW47XG59XG5cbi8vIEdyb3VwaW5nIGNvbnRlbnRcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbi8vXG4vLyBBZGRyZXNzIG1hcmdpbiBub3QgcHJlc2VudCBpbiBJRSA4LzkgYW5kIFNhZmFyaS5cbi8vXG5cbmZpZ3VyZSB7XG4gIG1hcmdpbjogMWVtIDQwcHg7XG59XG5cbi8vXG4vLyBBZGRyZXNzIGRpZmZlcmVuY2VzIGJldHdlZW4gRmlyZWZveCBhbmQgb3RoZXIgYnJvd3NlcnMuXG4vL1xuXG5ociB7XG4gIC1tb3otYm94LXNpemluZzogY29udGVudC1ib3g7XG4gIGJveC1zaXppbmc6IGNvbnRlbnQtYm94O1xuICBoZWlnaHQ6IDA7XG59XG5cbi8vXG4vLyBDb250YWluIG92ZXJmbG93IGluIGFsbCBicm93c2Vycy5cbi8vXG5cbnByZSB7XG4gIG92ZXJmbG93OiBhdXRvO1xufVxuXG4vL1xuLy8gQWRkcmVzcyBvZGQgYGVtYC11bml0IGZvbnQgc2l6ZSByZW5kZXJpbmcgaW4gYWxsIGJyb3dzZXJzLlxuLy9cblxuY29kZSxcbmtiZCxcbnByZSxcbnNhbXAge1xuICBmb250LWZhbWlseTogbW9ub3NwYWNlLCBtb25vc3BhY2U7XG4gIGZvbnQtc2l6ZTogMWVtO1xufVxuXG4vLyBGb3Jtc1xuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuLy9cbi8vIEtub3duIGxpbWl0YXRpb246IGJ5IGRlZmF1bHQsIENocm9tZSBhbmQgU2FmYXJpIG9uIE9TIFggYWxsb3cgdmVyeSBsaW1pdGVkXG4vLyBzdHlsaW5nIG9mIGBzZWxlY3RgLCB1bmxlc3MgYSBgYm9yZGVyYCBwcm9wZXJ0eSBpcyBzZXQuXG4vL1xuXG4vL1xuLy8gMS4gQ29ycmVjdCBjb2xvciBub3QgYmVpbmcgaW5oZXJpdGVkLlxuLy8gICAgS25vd24gaXNzdWU6IGFmZmVjdHMgY29sb3Igb2YgZGlzYWJsZWQgZWxlbWVudHMuXG4vLyAyLiBDb3JyZWN0IGZvbnQgcHJvcGVydGllcyBub3QgYmVpbmcgaW5oZXJpdGVkLlxuLy8gMy4gQWRkcmVzcyBtYXJnaW5zIHNldCBkaWZmZXJlbnRseSBpbiBGaXJlZm94IDQrLCBTYWZhcmksIGFuZCBDaHJvbWUuXG4vL1xuXG5idXR0b24sXG5pbnB1dCxcbm9wdGdyb3VwLFxuc2VsZWN0LFxudGV4dGFyZWEge1xuICBjb2xvcjogaW5oZXJpdDsgLy8gMVxuICBmb250OiBpbmhlcml0OyAvLyAyXG4gIG1hcmdpbjogMDsgLy8gM1xufVxuXG4vL1xuLy8gQWRkcmVzcyBgb3ZlcmZsb3dgIHNldCB0byBgaGlkZGVuYCBpbiBJRSA4LzkvMTAvMTEuXG4vL1xuXG5idXR0b24ge1xuICBvdmVyZmxvdzogdmlzaWJsZTtcbn1cblxuLy9cbi8vIEFkZHJlc3MgaW5jb25zaXN0ZW50IGB0ZXh0LXRyYW5zZm9ybWAgaW5oZXJpdGFuY2UgZm9yIGBidXR0b25gIGFuZCBgc2VsZWN0YC5cbi8vIEFsbCBvdGhlciBmb3JtIGNvbnRyb2wgZWxlbWVudHMgZG8gbm90IGluaGVyaXQgYHRleHQtdHJhbnNmb3JtYCB2YWx1ZXMuXG4vLyBDb3JyZWN0IGBidXR0b25gIHN0eWxlIGluaGVyaXRhbmNlIGluIEZpcmVmb3gsIElFIDgvOS8xMC8xMSwgYW5kIE9wZXJhLlxuLy8gQ29ycmVjdCBgc2VsZWN0YCBzdHlsZSBpbmhlcml0YW5jZSBpbiBGaXJlZm94LlxuLy9cblxuYnV0dG9uLFxuc2VsZWN0IHtcbiAgdGV4dC10cmFuc2Zvcm06IG5vbmU7XG59XG5cbi8vXG4vLyAxLiBBdm9pZCB0aGUgV2ViS2l0IGJ1ZyBpbiBBbmRyb2lkIDQuMC4qIHdoZXJlICgyKSBkZXN0cm95cyBuYXRpdmUgYGF1ZGlvYFxuLy8gICAgYW5kIGB2aWRlb2AgY29udHJvbHMuXG4vLyAyLiBDb3JyZWN0IGluYWJpbGl0eSB0byBzdHlsZSBjbGlja2FibGUgYGlucHV0YCB0eXBlcyBpbiBpT1MuXG4vLyAzLiBJbXByb3ZlIHVzYWJpbGl0eSBhbmQgY29uc2lzdGVuY3kgb2YgY3Vyc29yIHN0eWxlIGJldHdlZW4gaW1hZ2UtdHlwZVxuLy8gICAgYGlucHV0YCBhbmQgb3RoZXJzLlxuLy9cblxuYnV0dG9uLFxuaHRtbCBpbnB1dFt0eXBlPVwiYnV0dG9uXCJdLCAvLyAxXG5pbnB1dFt0eXBlPVwicmVzZXRcIl0sXG5pbnB1dFt0eXBlPVwic3VibWl0XCJdIHtcbiAgLXdlYmtpdC1hcHBlYXJhbmNlOiBidXR0b247IC8vIDJcbiAgY3Vyc29yOiBwb2ludGVyOyAvLyAzXG59XG5cbi8vXG4vLyBSZS1zZXQgZGVmYXVsdCBjdXJzb3IgZm9yIGRpc2FibGVkIGVsZW1lbnRzLlxuLy9cblxuYnV0dG9uW2Rpc2FibGVkXSxcbmh0bWwgaW5wdXRbZGlzYWJsZWRdIHtcbiAgY3Vyc29yOiBkZWZhdWx0O1xufVxuXG4vL1xuLy8gUmVtb3ZlIGlubmVyIHBhZGRpbmcgYW5kIGJvcmRlciBpbiBGaXJlZm94IDQrLlxuLy9cblxuYnV0dG9uOjotbW96LWZvY3VzLWlubmVyLFxuaW5wdXQ6Oi1tb3otZm9jdXMtaW5uZXIge1xuICBib3JkZXI6IDA7XG4gIHBhZGRpbmc6IDA7XG59XG5cbi8vXG4vLyBBZGRyZXNzIEZpcmVmb3ggNCsgc2V0dGluZyBgbGluZS1oZWlnaHRgIG9uIGBpbnB1dGAgdXNpbmcgYCFpbXBvcnRhbnRgIGluXG4vLyB0aGUgVUEgc3R5bGVzaGVldC5cbi8vXG5cbmlucHV0IHtcbiAgbGluZS1oZWlnaHQ6IG5vcm1hbDtcbn1cblxuLy9cbi8vIEl0J3MgcmVjb21tZW5kZWQgdGhhdCB5b3UgZG9uJ3QgYXR0ZW1wdCB0byBzdHlsZSB0aGVzZSBlbGVtZW50cy5cbi8vIEZpcmVmb3gncyBpbXBsZW1lbnRhdGlvbiBkb2Vzbid0IHJlc3BlY3QgYm94LXNpemluZywgcGFkZGluZywgb3Igd2lkdGguXG4vL1xuLy8gMS4gQWRkcmVzcyBib3ggc2l6aW5nIHNldCB0byBgY29udGVudC1ib3hgIGluIElFIDgvOS8xMC5cbi8vIDIuIFJlbW92ZSBleGNlc3MgcGFkZGluZyBpbiBJRSA4LzkvMTAuXG4vL1xuXG5pbnB1dFt0eXBlPVwiY2hlY2tib3hcIl0sXG5pbnB1dFt0eXBlPVwicmFkaW9cIl0ge1xuICBib3gtc2l6aW5nOiBib3JkZXItYm94OyAvLyAxXG4gIHBhZGRpbmc6IDA7IC8vIDJcbn1cblxuLy9cbi8vIEZpeCB0aGUgY3Vyc29yIHN0eWxlIGZvciBDaHJvbWUncyBpbmNyZW1lbnQvZGVjcmVtZW50IGJ1dHRvbnMuIEZvciBjZXJ0YWluXG4vLyBgZm9udC1zaXplYCB2YWx1ZXMgb2YgdGhlIGBpbnB1dGAsIGl0IGNhdXNlcyB0aGUgY3Vyc29yIHN0eWxlIG9mIHRoZVxuLy8gZGVjcmVtZW50IGJ1dHRvbiB0byBjaGFuZ2UgZnJvbSBgZGVmYXVsdGAgdG8gYHRleHRgLlxuLy9cblxuaW5wdXRbdHlwZT1cIm51bWJlclwiXTo6LXdlYmtpdC1pbm5lci1zcGluLWJ1dHRvbixcbmlucHV0W3R5cGU9XCJudW1iZXJcIl06Oi13ZWJraXQtb3V0ZXItc3Bpbi1idXR0b24ge1xuICBoZWlnaHQ6IGF1dG87XG59XG5cbi8vXG4vLyAxLiBBZGRyZXNzIGBhcHBlYXJhbmNlYCBzZXQgdG8gYHNlYXJjaGZpZWxkYCBpbiBTYWZhcmkgYW5kIENocm9tZS5cbi8vIDIuIEFkZHJlc3MgYGJveC1zaXppbmdgIHNldCB0byBgYm9yZGVyLWJveGAgaW4gU2FmYXJpIGFuZCBDaHJvbWVcbi8vICAgIChpbmNsdWRlIGAtbW96YCB0byBmdXR1cmUtcHJvb2YpLlxuLy9cblxuaW5wdXRbdHlwZT1cInNlYXJjaFwiXSB7XG4gIC13ZWJraXQtYXBwZWFyYW5jZTogdGV4dGZpZWxkOyAvLyAxXG4gIC1tb3otYm94LXNpemluZzogY29udGVudC1ib3g7XG4gIC13ZWJraXQtYm94LXNpemluZzogY29udGVudC1ib3g7IC8vIDJcbiAgYm94LXNpemluZzogY29udGVudC1ib3g7XG59XG5cbi8vXG4vLyBSZW1vdmUgaW5uZXIgcGFkZGluZyBhbmQgc2VhcmNoIGNhbmNlbCBidXR0b24gaW4gU2FmYXJpIGFuZCBDaHJvbWUgb24gT1MgWC5cbi8vIFNhZmFyaSAoYnV0IG5vdCBDaHJvbWUpIGNsaXBzIHRoZSBjYW5jZWwgYnV0dG9uIHdoZW4gdGhlIHNlYXJjaCBpbnB1dCBoYXNcbi8vIHBhZGRpbmcgKGFuZCBgdGV4dGZpZWxkYCBhcHBlYXJhbmNlKS5cbi8vXG5cbmlucHV0W3R5cGU9XCJzZWFyY2hcIl06Oi13ZWJraXQtc2VhcmNoLWNhbmNlbC1idXR0b24sXG5pbnB1dFt0eXBlPVwic2VhcmNoXCJdOjotd2Via2l0LXNlYXJjaC1kZWNvcmF0aW9uIHtcbiAgLXdlYmtpdC1hcHBlYXJhbmNlOiBub25lO1xufVxuXG4vL1xuLy8gRGVmaW5lIGNvbnNpc3RlbnQgYm9yZGVyLCBtYXJnaW4sIGFuZCBwYWRkaW5nLlxuLy9cblxuZmllbGRzZXQge1xuICBib3JkZXI6IDFweCBzb2xpZCAjYzBjMGMwO1xuICBtYXJnaW46IDAgMnB4O1xuICBwYWRkaW5nOiAwLjM1ZW0gMC42MjVlbSAwLjc1ZW07XG59XG5cbi8vXG4vLyAxLiBDb3JyZWN0IGBjb2xvcmAgbm90IGJlaW5nIGluaGVyaXRlZCBpbiBJRSA4LzkvMTAvMTEuXG4vLyAyLiBSZW1vdmUgcGFkZGluZyBzbyBwZW9wbGUgYXJlbid0IGNhdWdodCBvdXQgaWYgdGhleSB6ZXJvIG91dCBmaWVsZHNldHMuXG4vL1xuXG5sZWdlbmQge1xuICBib3JkZXI6IDA7IC8vIDFcbiAgcGFkZGluZzogMDsgLy8gMlxufVxuXG4vL1xuLy8gUmVtb3ZlIGRlZmF1bHQgdmVydGljYWwgc2Nyb2xsYmFyIGluIElFIDgvOS8xMC8xMS5cbi8vXG5cbnRleHRhcmVhIHtcbiAgb3ZlcmZsb3c6IGF1dG87XG59XG5cbi8vXG4vLyBEb24ndCBpbmhlcml0IHRoZSBgZm9udC13ZWlnaHRgIChhcHBsaWVkIGJ5IGEgcnVsZSBhYm92ZSkuXG4vLyBOT1RFOiB0aGUgZGVmYXVsdCBjYW5ub3Qgc2FmZWx5IGJlIGNoYW5nZWQgaW4gQ2hyb21lIGFuZCBTYWZhcmkgb24gT1MgWC5cbi8vXG5cbm9wdGdyb3VwIHtcbiAgZm9udC13ZWlnaHQ6IGJvbGQ7XG59XG5cbi8vIFRhYmxlc1xuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuLy9cbi8vIFJlbW92ZSBtb3N0IHNwYWNpbmcgYmV0d2VlbiB0YWJsZSBjZWxscy5cbi8vXG5cbnRhYmxlIHtcbiAgYm9yZGVyLWNvbGxhcHNlOiBjb2xsYXBzZTtcbiAgYm9yZGVyLXNwYWNpbmc6IDA7XG59XG5cbnRkLFxudGgge1xuICBwYWRkaW5nOiAwO1xufVxuIiwiQGltcG9ydCB1cmwoXCJodHRwczovL2NvZGUuaW9uaWNmcmFtZXdvcmsuY29tL2lvbmljb25zLzIuMC4xL2Nzcy9pb25pY29ucy5taW4uY3NzXCIpO1xuQGltcG9ydCB1cmwoXCJodHRwczovL2ZvbnRzLmdvb2dsZWFwaXMuY29tL2Nzcz9mYW1pbHk9Um9ib3RvK01vbm9cIik7XG5AZm9udC1mYWNlIHtcbiAgZm9udC1mYW1pbHk6ICdJb25pY29ucyc7XG4gIHNyYzogdXJsKFwiL2ZvbnRzL2lvbmljb25zLndvZmYyXCIpIGZvcm1hdChcIndvZmYyXCIpLCB1cmwoXCIvZm9udHMvaW9uaWNvbnMud29mZlwiKSBmb3JtYXQoXCJ3b2ZmXCIpLCB1cmwoXCIvZm9udHMvaW9uaWNvbnMudHRmXCIpIGZvcm1hdChcInR0ZlwiKSwgdXJsKFwiL2ZvbnRzL2lvbmljb25zLmVvdCNpZWZpeFwiKSBmb3JtYXQoXCJlb3RcIikgdXJsKFwiL2ZvbnRzL2lvbmljb25zLnN2ZyNJb25pY29uc1wiKSBmb3JtYXQoXCJzdmdcIik7XG4gIGZvbnQtd2VpZ2h0OiBub3JtYWw7XG4gIGZvbnQtc3R5bGU6IG5vcm1hbDsgfVxuXG5AZm9udC1mYWNlIHtcbiAgZm9udC1mYW1pbHk6ICdFaW5hJztcbiAgc3JjOiB1cmwoXCIvZm9udHMvZWluYS9laW5hLTAxLWJvbGQud29mZjJcIikgZm9ybWF0KFwid29mZjJcIiksIHVybChcIi9mb250cy9laW5hL2VpbmEtMDEtYm9sZC53b2ZmXCIpIGZvcm1hdChcIndvZmZcIiksIHVybChcIi9mb250cy9laW5hL2VpbmEtMDEtYm9sZC50dGZcIikgZm9ybWF0KFwidHRmXCIpLCB1cmwoXCIvZm9udHMvZWluYS9laW5hLTAxLWJvbGQuZW90PyNpZWZpeFwiKSBmb3JtYXQoXCJlb3RcIik7XG4gIGZvbnQtd2VpZ2h0OiA3MDA7XG4gIHVuaWNvZGUtcmFuZ2U6IFUrMDAwLTVGRjsgfVxuXG5AZm9udC1mYWNlIHtcbiAgZm9udC1mYW1pbHk6ICdFaW5hJztcbiAgc3JjOiB1cmwoXCIvZm9udHMvZWluYS9laW5hLTAxLXNlbWlib2xkLndvZmYyXCIpIGZvcm1hdChcIndvZmYyXCIpLCB1cmwoXCIvZm9udHMvZWluYS9laW5hLTAxLXNlbWlib2xkLndvZmZcIikgZm9ybWF0KFwid29mZlwiKSwgdXJsKFwiL2ZvbnRzL2VpbmEvZWluYS0wMS1zZW1pYm9sZC50dGZcIikgZm9ybWF0KFwidHRmXCIpLCB1cmwoXCIvZm9udHMvZWluYS9laW5hLTAxLXNlbWlib2xkLmVvdD8jaWVmaXhcIikgZm9ybWF0KFwiZW90XCIpO1xuICBmb250LXdlaWdodDogNjAwO1xuICB1bmljb2RlLXJhbmdlOiBVKzAwMC01RkY7IH1cblxuQGZvbnQtZmFjZSB7XG4gIGZvbnQtZmFtaWx5OiAnRWluYSc7XG4gIHNyYzogdXJsKFwiL2ZvbnRzL2VpbmEvZWluYS0wMS1yZWd1bGFyLndvZmYyXCIpIGZvcm1hdChcIndvZmYyXCIpLCB1cmwoXCIvZm9udHMvZWluYS9laW5hLTAxLXJlZ3VsYXIud29mZlwiKSBmb3JtYXQoXCJ3b2ZmXCIpLCB1cmwoXCIvZm9udHMvZWluYS9laW5hLTAxLXJlZ3VsYXIudHRmXCIpIGZvcm1hdChcInR0ZlwiKSwgdXJsKFwiL2ZvbnRzL2VpbmEvZWluYS0wMS1yZWd1bGFyLmVvdD8jaWVmaXhcIikgZm9ybWF0KFwiZW90XCIpO1xuICBmb250LXdlaWdodDogNDAwO1xuICB1bmljb2RlLXJhbmdlOiBVKzAwMC01RkY7IH1cblxuQGZvbnQtZmFjZSB7XG4gIGZvbnQtZmFtaWx5OiAnSW50ZXInO1xuICBmb250LXN0eWxlOiBub3JtYWw7XG4gIGZvbnQtd2VpZ2h0OiA0MDA7XG4gIHVuaWNvZGUtcmFuZ2U6IFUrMDAwLTVGRjtcbiAgc3JjOiB1cmwoXCJodHRwczovL2NvZGUuaW9uaWNmcmFtZXdvcmsuY29tL2Fzc2V0cy9mb250cy9pbnRlci9JbnRlci1SZWd1bGFyLndvZmYyXCIpIGZvcm1hdChcIndvZmYyXCIpLCB1cmwoXCJodHRwczovL2NvZGUuaW9uaWNmcmFtZXdvcmsuY29tL2Fzc2V0cy9mb250cy9pbnRlci9JbnRlci1SZWd1bGFyLndvZmZcIikgZm9ybWF0KFwid29mZlwiKTsgfVxuXG5AZm9udC1mYWNlIHtcbiAgZm9udC1mYW1pbHk6ICdJbnRlcic7XG4gIGZvbnQtc3R5bGU6IGl0YWxpYztcbiAgZm9udC13ZWlnaHQ6IDQwMDtcbiAgdW5pY29kZS1yYW5nZTogVSswMDAtNUZGO1xuICBzcmM6IHVybChcImh0dHBzOi8vY29kZS5pb25pY2ZyYW1ld29yay5jb20vYXNzZXRzL2ZvbnRzL2ludGVyL0ludGVyLUl0YWxpYy53b2ZmMlwiKSBmb3JtYXQoXCJ3b2ZmMlwiKSwgdXJsKFwiaHR0cHM6Ly9jb2RlLmlvbmljZnJhbWV3b3JrLmNvbS9hc3NldHMvZm9udHMvaW50ZXIvSW50ZXItSXRhbGljLndvZmZcIikgZm9ybWF0KFwid29mZlwiKTsgfVxuXG5AZm9udC1mYWNlIHtcbiAgZm9udC1mYW1pbHk6ICdJbnRlcic7XG4gIGZvbnQtc3R5bGU6IG5vcm1hbDtcbiAgZm9udC13ZWlnaHQ6IDUwMDtcbiAgdW5pY29kZS1yYW5nZTogVSswMDAtNUZGO1xuICBzcmM6IHVybChcImh0dHBzOi8vY29kZS5pb25pY2ZyYW1ld29yay5jb20vYXNzZXRzL2ZvbnRzL2ludGVyL0ludGVyLU1lZGl1bS53b2ZmMlwiKSBmb3JtYXQoXCJ3b2ZmMlwiKSwgdXJsKFwiaHR0cHM6Ly9jb2RlLmlvbmljZnJhbWV3b3JrLmNvbS9hc3NldHMvZm9udHMvaW50ZXIvSW50ZXItTWVkaXVtLndvZmZcIikgZm9ybWF0KFwid29mZlwiKTsgfVxuXG5AZm9udC1mYWNlIHtcbiAgZm9udC1mYW1pbHk6ICdJbnRlcic7XG4gIGZvbnQtc3R5bGU6IGl0YWxpYztcbiAgZm9udC13ZWlnaHQ6IDUwMDtcbiAgdW5pY29kZS1yYW5nZTogVSswMDAtNUZGO1xuICBzcmM6IHVybChcImh0dHBzOi8vY29kZS5pb25pY2ZyYW1ld29yay5jb20vYXNzZXRzL2ZvbnRzL2ludGVyL0ludGVyLU1lZGl1bUl0YWxpYy53b2ZmMlwiKSBmb3JtYXQoXCJ3b2ZmMlwiKSwgdXJsKFwiaHR0cHM6Ly9jb2RlLmlvbmljZnJhbWV3b3JrLmNvbS9hc3NldHMvZm9udHMvaW50ZXIvSW50ZXItTWVkaXVtSXRhbGljLndvZmZcIikgZm9ybWF0KFwid29mZlwiKTsgfVxuXG5AZm9udC1mYWNlIHtcbiAgZm9udC1mYW1pbHk6ICdJbnRlcic7XG4gIGZvbnQtc3R5bGU6IG5vcm1hbDtcbiAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgdW5pY29kZS1yYW5nZTogVSswMDAtNUZGO1xuICBzcmM6IHVybChcImh0dHBzOi8vY29kZS5pb25pY2ZyYW1ld29yay5jb20vYXNzZXRzL2ZvbnRzL2ludGVyL0ludGVyLVNlbWlCb2xkLndvZmYyXCIpIGZvcm1hdChcIndvZmYyXCIpLCB1cmwoXCJodHRwczovL2NvZGUuaW9uaWNmcmFtZXdvcmsuY29tL2Fzc2V0cy9mb250cy9pbnRlci9JbnRlci1TZW1pQm9sZC53b2ZmXCIpIGZvcm1hdChcIndvZmZcIik7IH1cblxuQGZvbnQtZmFjZSB7XG4gIGZvbnQtZmFtaWx5OiAnSW50ZXInO1xuICBmb250LXN0eWxlOiBpdGFsaWM7XG4gIGZvbnQtd2VpZ2h0OiA2MDA7XG4gIHVuaWNvZGUtcmFuZ2U6IFUrMDAwLTVGRjtcbiAgc3JjOiB1cmwoXCJodHRwczovL2NvZGUuaW9uaWNmcmFtZXdvcmsuY29tL2Fzc2V0cy9mb250cy9pbnRlci9JbnRlci1TZW1pQm9sZEl0YWxpYy53b2ZmMlwiKSBmb3JtYXQoXCJ3b2ZmMlwiKSwgdXJsKFwiaHR0cHM6Ly9jb2RlLmlvbmljZnJhbWV3b3JrLmNvbS9hc3NldHMvZm9udHMvaW50ZXIvSW50ZXItU2VtaUJvbGRJdGFsaWMud29mZlwiKSBmb3JtYXQoXCJ3b2ZmXCIpOyB9XG5cbkBmb250LWZhY2Uge1xuICBmb250LWZhbWlseTogJ0ludGVyJztcbiAgZm9udC1zdHlsZTogbm9ybWFsO1xuICBmb250LXdlaWdodDogNzAwO1xuICB1bmljb2RlLXJhbmdlOiBVKzAwMC01RkY7XG4gIHNyYzogdXJsKFwiaHR0cHM6Ly9jb2RlLmlvbmljZnJhbWV3b3JrLmNvbS9hc3NldHMvZm9udHMvaW50ZXIvSW50ZXItQm9sZC53b2ZmMlwiKSBmb3JtYXQoXCJ3b2ZmMlwiKSwgdXJsKFwiaHR0cHM6Ly9jb2RlLmlvbmljZnJhbWV3b3JrLmNvbS9hc3NldHMvZm9udHMvaW50ZXIvSW50ZXItQm9sZC53b2ZmXCIpIGZvcm1hdChcIndvZmZcIik7IH1cblxuQGZvbnQtZmFjZSB7XG4gIGZvbnQtZmFtaWx5OiAnSW50ZXInO1xuICBmb250LXN0eWxlOiBpdGFsaWM7XG4gIGZvbnQtd2VpZ2h0OiA3MDA7XG4gIHVuaWNvZGUtcmFuZ2U6IFUrMDAwLTVGRjtcbiAgc3JjOiB1cmwoXCJodHRwczovL2NvZGUuaW9uaWNmcmFtZXdvcmsuY29tL2Fzc2V0cy9mb250cy9pbnRlci9JbnRlci1Cb2xkSXRhbGljLndvZmYyXCIpIGZvcm1hdChcIndvZmYyXCIpLCB1cmwoXCJodHRwczovL2NvZGUuaW9uaWNmcmFtZXdvcmsuY29tL2Fzc2V0cy9mb250cy9pbnRlci9JbnRlci1Cb2xkSXRhbGljLndvZmZcIikgZm9ybWF0KFwid29mZlwiKTsgfVxuXG5AZm9udC1mYWNlIHtcbiAgZm9udC1mYW1pbHk6ICdJbnRlcic7XG4gIGZvbnQtc3R5bGU6IG5vcm1hbDtcbiAgZm9udC13ZWlnaHQ6IDgwMDtcbiAgdW5pY29kZS1yYW5nZTogVSswMDAtNUZGO1xuICBzcmM6IHVybChcImh0dHBzOi8vY29kZS5pb25pY2ZyYW1ld29yay5jb20vYXNzZXRzL2ZvbnRzL2ludGVyL0ludGVyLUV4dHJhQm9sZC53b2ZmMlwiKSBmb3JtYXQoXCJ3b2ZmMlwiKSwgdXJsKFwiaHR0cHM6Ly9jb2RlLmlvbmljZnJhbWV3b3JrLmNvbS9hc3NldHMvZm9udHMvaW50ZXIvSW50ZXItRXh0cmFCb2xkLndvZmZcIikgZm9ybWF0KFwid29mZlwiKTsgfVxuXG5AZm9udC1mYWNlIHtcbiAgZm9udC1mYW1pbHk6ICdJbnRlcic7XG4gIGZvbnQtc3R5bGU6IGl0YWxpYztcbiAgZm9udC13ZWlnaHQ6IDgwMDtcbiAgdW5pY29kZS1yYW5nZTogVSswMDAtNUZGO1xuICBzcmM6IHVybChcImh0dHBzOi8vY29kZS5pb25pY2ZyYW1ld29yay5jb20vYXNzZXRzL2ZvbnRzL2ludGVyL0ludGVyLUV4dHJhQm9sZEl0YWxpYy53b2ZmMlwiKSBmb3JtYXQoXCJ3b2ZmMlwiKSwgdXJsKFwiaHR0cHM6Ly9jb2RlLmlvbmljZnJhbWV3b3JrLmNvbS9hc3NldHMvZm9udHMvaW50ZXIvSW50ZXItRXh0cmFCb2xkSXRhbGljLndvZmZcIikgZm9ybWF0KFwid29mZlwiKTsgfVxuXG5AZm9udC1mYWNlIHtcbiAgZm9udC1mYW1pbHk6ICdJbnRlcic7XG4gIGZvbnQtc3R5bGU6IG5vcm1hbDtcbiAgZm9udC13ZWlnaHQ6IDkwMDtcbiAgdW5pY29kZS1yYW5nZTogVSswMDAtNUZGO1xuICBzcmM6IHVybChcImh0dHBzOi8vY29kZS5pb25pY2ZyYW1ld29yay5jb20vYXNzZXRzL2ZvbnRzL2ludGVyL0ludGVyLUJsYWNrLndvZmYyXCIpIGZvcm1hdChcIndvZmYyXCIpLCB1cmwoXCJodHRwczovL2NvZGUuaW9uaWNmcmFtZXdvcmsuY29tL2Fzc2V0cy9mb250cy9pbnRlci9JbnRlci1CbGFjay53b2ZmXCIpIGZvcm1hdChcIndvZmZcIik7IH1cblxuQGZvbnQtZmFjZSB7XG4gIGZvbnQtZmFtaWx5OiAnSW50ZXInO1xuICBmb250LXN0eWxlOiBpdGFsaWM7XG4gIGZvbnQtd2VpZ2h0OiA5MDA7XG4gIHVuaWNvZGUtcmFuZ2U6IFUrMDAwLTVGRjtcbiAgc3JjOiB1cmwoXCJodHRwczovL2NvZGUuaW9uaWNmcmFtZXdvcmsuY29tL2Fzc2V0cy9mb250cy9pbnRlci9JbnRlci1CbGFja0l0YWxpYy53b2ZmMlwiKSBmb3JtYXQoXCJ3b2ZmMlwiKSwgdXJsKFwiaHR0cHM6Ly9jb2RlLmlvbmljZnJhbWV3b3JrLmNvbS9hc3NldHMvZm9udHMvaW50ZXIvSW50ZXItQmxhY2tJdGFsaWMud29mZlwiKSBmb3JtYXQoXCJ3b2ZmXCIpOyB9XG5cbkBmb250LWZhY2Uge1xuICBmb250LWZhbWlseTogJ0ZyZWlnaHRUZXh0UHJvJztcbiAgZm9udC13ZWlnaHQ6IDQwMDtcbiAgdW5pY29kZS1yYW5nZTogVSswMDAtNUZGO1xuICBzcmM6IHVybChcImh0dHBzOi8vY29kZS5pb25pY2ZyYW1ld29yay5jb20vYXNzZXRzL2ZvbnRzLzI5RDI2QV8wXzAuZW90XCIpO1xuICBzcmM6IHVybChcImh0dHBzOi8vY29kZS5pb25pY2ZyYW1ld29yay5jb20vYXNzZXRzL2ZvbnRzLzI5RDI2QV8wXzAuZW90PyNpZWZpeFwiKSBmb3JtYXQoXCJlbWJlZGRlZC1vcGVudHlwZVwiKSwgdXJsKFwiaHR0cHM6Ly9jb2RlLmlvbmljZnJhbWV3b3JrLmNvbS9hc3NldHMvZm9udHMvMjlEMjZBXzBfMC53b2ZmXCIpIGZvcm1hdChcIndvZmZcIiksIHVybChcImh0dHBzOi8vY29kZS5pb25pY2ZyYW1ld29yay5jb20vYXNzZXRzL2ZvbnRzLzI5RDI2QV8wXzAudHRmXCIpIGZvcm1hdChcInRydWV0eXBlXCIpOyB9XG5cbkBmb250LWZhY2Uge1xuICBmb250LWZhbWlseTogJ0ZyZWlnaHRUZXh0UHJvJztcbiAgZm9udC13ZWlnaHQ6IDUwMDtcbiAgdW5pY29kZS1yYW5nZTogVSswMDAtNUZGO1xuICBzcmM6IHVybChcImh0dHBzOi8vY29kZS5pb25pY2ZyYW1ld29yay5jb20vYXNzZXRzL2ZvbnRzLzI5RDI2QV8xXzAuZW90XCIpO1xuICBzcmM6IHVybChcImh0dHBzOi8vY29kZS5pb25pY2ZyYW1ld29yay5jb20vYXNzZXRzL2ZvbnRzLzI5RDI2QV8xXzAuZW90PyNpZWZpeFwiKSBmb3JtYXQoXCJlbWJlZGRlZC1vcGVudHlwZVwiKSwgdXJsKFwiaHR0cHM6Ly9jb2RlLmlvbmljZnJhbWV3b3JrLmNvbS9hc3NldHMvZm9udHMvMjlEMjZBXzFfMC53b2ZmXCIpIGZvcm1hdChcIndvZmZcIiksIHVybChcImh0dHBzOi8vY29kZS5pb25pY2ZyYW1ld29yay5jb20vYXNzZXRzL2ZvbnRzLzI5RDI2QV8xXzAudHRmXCIpIGZvcm1hdChcInRydWV0eXBlXCIpOyB9XG5cbi8qISBub3JtYWxpemUuY3NzIHYzLjAuMiB8IE1JVCBMaWNlbnNlIHwgZ2l0LmlvL25vcm1hbGl6ZSAqL1xuaHRtbCB7XG4gIGZvbnQtZmFtaWx5OiBzYW5zLXNlcmlmO1xuICAtbXMtdGV4dC1zaXplLWFkanVzdDogMTAwJTtcbiAgLXdlYmtpdC10ZXh0LXNpemUtYWRqdXN0OiAxMDAlOyB9XG5cbmJvZHkge1xuICBtYXJnaW46IDA7IH1cblxuYXJ0aWNsZSxcbmFzaWRlLFxuZGV0YWlscyxcbmZpZ2NhcHRpb24sXG5maWd1cmUsXG5mb290ZXIsXG5oZWFkZXIsXG5oZ3JvdXAsXG5tYWluLFxubWVudSxcbm5hdixcbnNlY3Rpb24sXG5zdW1tYXJ5IHtcbiAgZGlzcGxheTogYmxvY2s7IH1cblxuYXVkaW8sXG5jYW52YXMsXG5wcm9ncmVzcyxcbnZpZGVvIHtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICB2ZXJ0aWNhbC1hbGlnbjogYmFzZWxpbmU7IH1cblxuYXVkaW86bm90KFtjb250cm9sc10pIHtcbiAgZGlzcGxheTogbm9uZTtcbiAgaGVpZ2h0OiAwOyB9XG5cbltoaWRkZW5dLFxudGVtcGxhdGUge1xuICBkaXNwbGF5OiBub25lOyB9XG5cbmEge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDsgfVxuXG5hOmFjdGl2ZSxcbmE6aG92ZXIge1xuICBvdXRsaW5lOiAwOyB9XG5cbmFiYnJbdGl0bGVdIHtcbiAgYm9yZGVyLWJvdHRvbTogMXB4IGRvdHRlZDsgfVxuXG5iLFxuc3Ryb25nIHtcbiAgZm9udC13ZWlnaHQ6IGJvbGQ7IH1cblxuZGZuIHtcbiAgZm9udC1zdHlsZTogaXRhbGljOyB9XG5cbmgxIHtcbiAgZm9udC1zaXplOiAyZW07XG4gIG1hcmdpbjogMC42N2VtIDA7IH1cblxubWFyayB7XG4gIGJhY2tncm91bmQ6ICNmZjA7XG4gIGNvbG9yOiAjMDAwOyB9XG5cbnNtYWxsIHtcbiAgZm9udC1zaXplOiA4MCU7IH1cblxuc3ViLFxuc3VwIHtcbiAgZm9udC1zaXplOiA3NSU7XG4gIGxpbmUtaGVpZ2h0OiAwO1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIHZlcnRpY2FsLWFsaWduOiBiYXNlbGluZTsgfVxuXG5zdXAge1xuICB0b3A6IC0wLjVlbTsgfVxuXG5zdWIge1xuICBib3R0b206IC0wLjI1ZW07IH1cblxuaW1nIHtcbiAgYm9yZGVyOiAwOyB9XG5cbnN2Zzpub3QoOnJvb3QpIHtcbiAgb3ZlcmZsb3c6IGhpZGRlbjsgfVxuXG5maWd1cmUge1xuICBtYXJnaW46IDFlbSA0MHB4OyB9XG5cbmhyIHtcbiAgLW1vei1ib3gtc2l6aW5nOiBjb250ZW50LWJveDtcbiAgYm94LXNpemluZzogY29udGVudC1ib3g7XG4gIGhlaWdodDogMDsgfVxuXG5wcmUge1xuICBvdmVyZmxvdzogYXV0bzsgfVxuXG5jb2RlLFxua2JkLFxucHJlLFxuc2FtcCB7XG4gIGZvbnQtZmFtaWx5OiBtb25vc3BhY2UsIG1vbm9zcGFjZTtcbiAgZm9udC1zaXplOiAxZW07IH1cblxuYnV0dG9uLFxuaW5wdXQsXG5vcHRncm91cCxcbnNlbGVjdCxcbnRleHRhcmVhIHtcbiAgY29sb3I6IGluaGVyaXQ7XG4gIGZvbnQ6IGluaGVyaXQ7XG4gIG1hcmdpbjogMDsgfVxuXG5idXR0b24ge1xuICBvdmVyZmxvdzogdmlzaWJsZTsgfVxuXG5idXR0b24sXG5zZWxlY3Qge1xuICB0ZXh0LXRyYW5zZm9ybTogbm9uZTsgfVxuXG5idXR0b24sXG5odG1sIGlucHV0W3R5cGU9XCJidXR0b25cIl0sXG5pbnB1dFt0eXBlPVwicmVzZXRcIl0sXG5pbnB1dFt0eXBlPVwic3VibWl0XCJdIHtcbiAgLXdlYmtpdC1hcHBlYXJhbmNlOiBidXR0b247XG4gIGN1cnNvcjogcG9pbnRlcjsgfVxuXG5idXR0b25bZGlzYWJsZWRdLFxuaHRtbCBpbnB1dFtkaXNhYmxlZF0ge1xuICBjdXJzb3I6IGRlZmF1bHQ7IH1cblxuYnV0dG9uOjotbW96LWZvY3VzLWlubmVyLFxuaW5wdXQ6Oi1tb3otZm9jdXMtaW5uZXIge1xuICBib3JkZXI6IDA7XG4gIHBhZGRpbmc6IDA7IH1cblxuaW5wdXQge1xuICBsaW5lLWhlaWdodDogbm9ybWFsOyB9XG5cbmlucHV0W3R5cGU9XCJjaGVja2JveFwiXSxcbmlucHV0W3R5cGU9XCJyYWRpb1wiXSB7XG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gIHBhZGRpbmc6IDA7IH1cblxuaW5wdXRbdHlwZT1cIm51bWJlclwiXTo6LXdlYmtpdC1pbm5lci1zcGluLWJ1dHRvbixcbmlucHV0W3R5cGU9XCJudW1iZXJcIl06Oi13ZWJraXQtb3V0ZXItc3Bpbi1idXR0b24ge1xuICBoZWlnaHQ6IGF1dG87IH1cblxuaW5wdXRbdHlwZT1cInNlYXJjaFwiXSB7XG4gIC13ZWJraXQtYXBwZWFyYW5jZTogdGV4dGZpZWxkO1xuICAtbW96LWJveC1zaXppbmc6IGNvbnRlbnQtYm94O1xuICAtd2Via2l0LWJveC1zaXppbmc6IGNvbnRlbnQtYm94O1xuICBib3gtc2l6aW5nOiBjb250ZW50LWJveDsgfVxuXG5pbnB1dFt0eXBlPVwic2VhcmNoXCJdOjotd2Via2l0LXNlYXJjaC1jYW5jZWwtYnV0dG9uLFxuaW5wdXRbdHlwZT1cInNlYXJjaFwiXTo6LXdlYmtpdC1zZWFyY2gtZGVjb3JhdGlvbiB7XG4gIC13ZWJraXQtYXBwZWFyYW5jZTogbm9uZTsgfVxuXG5maWVsZHNldCB7XG4gIGJvcmRlcjogMXB4IHNvbGlkICNjMGMwYzA7XG4gIG1hcmdpbjogMCAycHg7XG4gIHBhZGRpbmc6IDAuMzVlbSAwLjYyNWVtIDAuNzVlbTsgfVxuXG5sZWdlbmQge1xuICBib3JkZXI6IDA7XG4gIHBhZGRpbmc6IDA7IH1cblxudGV4dGFyZWEge1xuICBvdmVyZmxvdzogYXV0bzsgfVxuXG5vcHRncm91cCB7XG4gIGZvbnQtd2VpZ2h0OiBib2xkOyB9XG5cbnRhYmxlIHtcbiAgYm9yZGVyLWNvbGxhcHNlOiBjb2xsYXBzZTtcbiAgYm9yZGVyLXNwYWNpbmc6IDA7IH1cblxudGQsXG50aCB7XG4gIHBhZGRpbmc6IDA7IH1cblxuLyohIFNvdXJjZTogaHR0cHM6Ly9naXRodWIuY29tL2g1YnAvaHRtbDUtYm9pbGVycGxhdGUvYmxvYi9tYXN0ZXIvc3JjL2Nzcy9tYWluLmNzcyAqL1xuQG1lZGlhIHByaW50IHtcbiAgKixcbiAgKjpiZWZvcmUsXG4gICo6YWZ0ZXIge1xuICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50ICFpbXBvcnRhbnQ7XG4gICAgY29sb3I6ICMwMDAgIWltcG9ydGFudDtcbiAgICBib3gtc2hhZG93OiBub25lICFpbXBvcnRhbnQ7XG4gICAgdGV4dC1zaGFkb3c6IG5vbmUgIWltcG9ydGFudDsgfVxuICBhLFxuICBhOnZpc2l0ZWQge1xuICAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOyB9XG4gIGFbaHJlZl06YWZ0ZXIge1xuICAgIGNvbnRlbnQ6IFwiIChcIiBhdHRyKGhyZWYpIFwiKVwiOyB9XG4gIGFiYnJbdGl0bGVdOmFmdGVyIHtcbiAgICBjb250ZW50OiBcIiAoXCIgYXR0cih0aXRsZSkgXCIpXCI7IH1cbiAgYVtocmVmXj1cIiNcIl06YWZ0ZXIsXG4gIGFbaHJlZl49XCJqYXZhc2NyaXB0OlwiXTphZnRlciB7XG4gICAgY29udGVudDogXCJcIjsgfVxuICBwcmUsXG4gIGJsb2NrcXVvdGUge1xuICAgIGJvcmRlcjogMXB4IHNvbGlkICM5OTk7XG4gICAgcGFnZS1icmVhay1pbnNpZGU6IGF2b2lkOyB9XG4gIHRoZWFkIHtcbiAgICBkaXNwbGF5OiB0YWJsZS1oZWFkZXItZ3JvdXA7IH1cbiAgdHIsXG4gIGltZyB7XG4gICAgcGFnZS1icmVhay1pbnNpZGU6IGF2b2lkOyB9XG4gIGltZyB7XG4gICAgbWF4LXdpZHRoOiAxMDAlICFpbXBvcnRhbnQ7IH1cbiAgcCxcbiAgaDIsXG4gIGgzIHtcbiAgICBvcnBoYW5zOiAzO1xuICAgIHdpZG93czogMzsgfVxuICBoMixcbiAgaDMge1xuICAgIHBhZ2UtYnJlYWstYWZ0ZXI6IGF2b2lkOyB9XG4gIHNlbGVjdCB7XG4gICAgYmFja2dyb3VuZDogI2ZmZiAhaW1wb3J0YW50OyB9XG4gIC5uYXZiYXIge1xuICAgIGRpc3BsYXk6IG5vbmU7IH1cbiAgLmJ0biA+IC5jYXJldCxcbiAgLmRyb3B1cCA+IC5idG4gPiAuY2FyZXQge1xuICAgIGJvcmRlci10b3AtY29sb3I6ICMwMDAgIWltcG9ydGFudDsgfVxuICAubGFiZWwge1xuICAgIGJvcmRlcjogMXB4IHNvbGlkICMwMDA7IH1cbiAgLnRhYmxlIHtcbiAgICBib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlICFpbXBvcnRhbnQ7IH1cbiAgICAudGFibGUgdGQsXG4gICAgLnRhYmxlIHRoIHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6ICNmZmYgIWltcG9ydGFudDsgfVxuICAudGFibGUtYm9yZGVyZWQgdGgsXG4gIC50YWJsZS1ib3JkZXJlZCB0ZCB7XG4gICAgYm9yZGVyOiAxcHggc29saWQgI2RkZCAhaW1wb3J0YW50OyB9IH1cblxuQGZvbnQtZmFjZSB7XG4gIGZvbnQtZmFtaWx5OiAnR2x5cGhpY29ucyBIYWxmbGluZ3MnO1xuICBzcmM6IHVybChcIi4uL2ZvbnRzL2Jvb3RzdHJhcC9nbHlwaGljb25zLWhhbGZsaW5ncy1yZWd1bGFyLmVvdFwiKTtcbiAgc3JjOiB1cmwoXCIuLi9mb250cy9ib290c3RyYXAvZ2x5cGhpY29ucy1oYWxmbGluZ3MtcmVndWxhci5lb3Q/I2llZml4XCIpIGZvcm1hdChcImVtYmVkZGVkLW9wZW50eXBlXCIpLCB1cmwoXCIuLi9mb250cy9ib290c3RyYXAvZ2x5cGhpY29ucy1oYWxmbGluZ3MtcmVndWxhci53b2ZmMlwiKSBmb3JtYXQoXCJ3b2ZmMlwiKSwgdXJsKFwiLi4vZm9udHMvYm9vdHN0cmFwL2dseXBoaWNvbnMtaGFsZmxpbmdzLXJlZ3VsYXIud29mZlwiKSBmb3JtYXQoXCJ3b2ZmXCIpLCB1cmwoXCIuLi9mb250cy9ib290c3RyYXAvZ2x5cGhpY29ucy1oYWxmbGluZ3MtcmVndWxhci50dGZcIikgZm9ybWF0KFwidHJ1ZXR5cGVcIiksIHVybChcIi4uL2ZvbnRzL2Jvb3RzdHJhcC9nbHlwaGljb25zLWhhbGZsaW5ncy1yZWd1bGFyLnN2ZyNnbHlwaGljb25zX2hhbGZsaW5nc3JlZ3VsYXJcIikgZm9ybWF0KFwic3ZnXCIpOyB9XG5cbi5nbHlwaGljb24ge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIHRvcDogMXB4O1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIGZvbnQtZmFtaWx5OiAnR2x5cGhpY29ucyBIYWxmbGluZ3MnO1xuICBmb250LXN0eWxlOiBub3JtYWw7XG4gIGZvbnQtd2VpZ2h0OiBub3JtYWw7XG4gIGxpbmUtaGVpZ2h0OiAxO1xuICAtd2Via2l0LWZvbnQtc21vb3RoaW5nOiBhbnRpYWxpYXNlZDtcbiAgLW1vei1vc3gtZm9udC1zbW9vdGhpbmc6IGdyYXlzY2FsZTsgfVxuXG4uZ2x5cGhpY29uLWFzdGVyaXNrOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFwyYVwiOyB9XG5cbi5nbHlwaGljb24tcGx1czpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcMmJcIjsgfVxuXG4uZ2x5cGhpY29uLWV1cm86YmVmb3JlLFxuLmdseXBoaWNvbi1ldXI6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXDIwYWNcIjsgfVxuXG4uZ2x5cGhpY29uLW1pbnVzOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFwyMjEyXCI7IH1cblxuLmdseXBoaWNvbi1jbG91ZDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcMjYwMVwiOyB9XG5cbi5nbHlwaGljb24tZW52ZWxvcGU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXDI3MDlcIjsgfVxuXG4uZ2x5cGhpY29uLXBlbmNpbDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcMjcwZlwiOyB9XG5cbi5nbHlwaGljb24tZ2xhc3M6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUwMDFcIjsgfVxuXG4uZ2x5cGhpY29uLW11c2ljOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMDAyXCI7IH1cblxuLmdseXBoaWNvbi1zZWFyY2g6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUwMDNcIjsgfVxuXG4uZ2x5cGhpY29uLWhlYXJ0OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMDA1XCI7IH1cblxuLmdseXBoaWNvbi1zdGFyOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMDA2XCI7IH1cblxuLmdseXBoaWNvbi1zdGFyLWVtcHR5OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMDA3XCI7IH1cblxuLmdseXBoaWNvbi11c2VyOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMDA4XCI7IH1cblxuLmdseXBoaWNvbi1maWxtOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMDA5XCI7IH1cblxuLmdseXBoaWNvbi10aC1sYXJnZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTAxMFwiOyB9XG5cbi5nbHlwaGljb24tdGg6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUwMTFcIjsgfVxuXG4uZ2x5cGhpY29uLXRoLWxpc3Q6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUwMTJcIjsgfVxuXG4uZ2x5cGhpY29uLW9rOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMDEzXCI7IH1cblxuLmdseXBoaWNvbi1yZW1vdmU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUwMTRcIjsgfVxuXG4uZ2x5cGhpY29uLXpvb20taW46YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUwMTVcIjsgfVxuXG4uZ2x5cGhpY29uLXpvb20tb3V0OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMDE2XCI7IH1cblxuLmdseXBoaWNvbi1vZmY6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUwMTdcIjsgfVxuXG4uZ2x5cGhpY29uLXNpZ25hbDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTAxOFwiOyB9XG5cbi5nbHlwaGljb24tY29nOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMDE5XCI7IH1cblxuLmdseXBoaWNvbi10cmFzaDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTAyMFwiOyB9XG5cbi5nbHlwaGljb24taG9tZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTAyMVwiOyB9XG5cbi5nbHlwaGljb24tZmlsZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTAyMlwiOyB9XG5cbi5nbHlwaGljb24tdGltZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTAyM1wiOyB9XG5cbi5nbHlwaGljb24tcm9hZDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTAyNFwiOyB9XG5cbi5nbHlwaGljb24tZG93bmxvYWQtYWx0OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMDI1XCI7IH1cblxuLmdseXBoaWNvbi1kb3dubG9hZDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTAyNlwiOyB9XG5cbi5nbHlwaGljb24tdXBsb2FkOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMDI3XCI7IH1cblxuLmdseXBoaWNvbi1pbmJveDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTAyOFwiOyB9XG5cbi5nbHlwaGljb24tcGxheS1jaXJjbGU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUwMjlcIjsgfVxuXG4uZ2x5cGhpY29uLXJlcGVhdDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTAzMFwiOyB9XG5cbi5nbHlwaGljb24tcmVmcmVzaDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTAzMVwiOyB9XG5cbi5nbHlwaGljb24tbGlzdC1hbHQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUwMzJcIjsgfVxuXG4uZ2x5cGhpY29uLWxvY2s6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUwMzNcIjsgfVxuXG4uZ2x5cGhpY29uLWZsYWc6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUwMzRcIjsgfVxuXG4uZ2x5cGhpY29uLWhlYWRwaG9uZXM6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUwMzVcIjsgfVxuXG4uZ2x5cGhpY29uLXZvbHVtZS1vZmY6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUwMzZcIjsgfVxuXG4uZ2x5cGhpY29uLXZvbHVtZS1kb3duOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMDM3XCI7IH1cblxuLmdseXBoaWNvbi12b2x1bWUtdXA6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUwMzhcIjsgfVxuXG4uZ2x5cGhpY29uLXFyY29kZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTAzOVwiOyB9XG5cbi5nbHlwaGljb24tYmFyY29kZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTA0MFwiOyB9XG5cbi5nbHlwaGljb24tdGFnOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMDQxXCI7IH1cblxuLmdseXBoaWNvbi10YWdzOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMDQyXCI7IH1cblxuLmdseXBoaWNvbi1ib29rOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMDQzXCI7IH1cblxuLmdseXBoaWNvbi1ib29rbWFyazpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTA0NFwiOyB9XG5cbi5nbHlwaGljb24tcHJpbnQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUwNDVcIjsgfVxuXG4uZ2x5cGhpY29uLWNhbWVyYTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTA0NlwiOyB9XG5cbi5nbHlwaGljb24tZm9udDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTA0N1wiOyB9XG5cbi5nbHlwaGljb24tYm9sZDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTA0OFwiOyB9XG5cbi5nbHlwaGljb24taXRhbGljOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMDQ5XCI7IH1cblxuLmdseXBoaWNvbi10ZXh0LWhlaWdodDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTA1MFwiOyB9XG5cbi5nbHlwaGljb24tdGV4dC13aWR0aDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTA1MVwiOyB9XG5cbi5nbHlwaGljb24tYWxpZ24tbGVmdDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTA1MlwiOyB9XG5cbi5nbHlwaGljb24tYWxpZ24tY2VudGVyOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMDUzXCI7IH1cblxuLmdseXBoaWNvbi1hbGlnbi1yaWdodDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTA1NFwiOyB9XG5cbi5nbHlwaGljb24tYWxpZ24tanVzdGlmeTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTA1NVwiOyB9XG5cbi5nbHlwaGljb24tbGlzdDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTA1NlwiOyB9XG5cbi5nbHlwaGljb24taW5kZW50LWxlZnQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUwNTdcIjsgfVxuXG4uZ2x5cGhpY29uLWluZGVudC1yaWdodDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTA1OFwiOyB9XG5cbi5nbHlwaGljb24tZmFjZXRpbWUtdmlkZW86YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUwNTlcIjsgfVxuXG4uZ2x5cGhpY29uLXBpY3R1cmU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUwNjBcIjsgfVxuXG4uZ2x5cGhpY29uLW1hcC1tYXJrZXI6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUwNjJcIjsgfVxuXG4uZ2x5cGhpY29uLWFkanVzdDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTA2M1wiOyB9XG5cbi5nbHlwaGljb24tdGludDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTA2NFwiOyB9XG5cbi5nbHlwaGljb24tZWRpdDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTA2NVwiOyB9XG5cbi5nbHlwaGljb24tc2hhcmU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUwNjZcIjsgfVxuXG4uZ2x5cGhpY29uLWNoZWNrOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMDY3XCI7IH1cblxuLmdseXBoaWNvbi1tb3ZlOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMDY4XCI7IH1cblxuLmdseXBoaWNvbi1zdGVwLWJhY2t3YXJkOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMDY5XCI7IH1cblxuLmdseXBoaWNvbi1mYXN0LWJhY2t3YXJkOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMDcwXCI7IH1cblxuLmdseXBoaWNvbi1iYWNrd2FyZDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTA3MVwiOyB9XG5cbi5nbHlwaGljb24tcGxheTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTA3MlwiOyB9XG5cbi5nbHlwaGljb24tcGF1c2U6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUwNzNcIjsgfVxuXG4uZ2x5cGhpY29uLXN0b3A6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUwNzRcIjsgfVxuXG4uZ2x5cGhpY29uLWZvcndhcmQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUwNzVcIjsgfVxuXG4uZ2x5cGhpY29uLWZhc3QtZm9yd2FyZDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTA3NlwiOyB9XG5cbi5nbHlwaGljb24tc3RlcC1mb3J3YXJkOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMDc3XCI7IH1cblxuLmdseXBoaWNvbi1lamVjdDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTA3OFwiOyB9XG5cbi5nbHlwaGljb24tY2hldnJvbi1sZWZ0OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMDc5XCI7IH1cblxuLmdseXBoaWNvbi1jaGV2cm9uLXJpZ2h0OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMDgwXCI7IH1cblxuLmdseXBoaWNvbi1wbHVzLXNpZ246YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUwODFcIjsgfVxuXG4uZ2x5cGhpY29uLW1pbnVzLXNpZ246YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUwODJcIjsgfVxuXG4uZ2x5cGhpY29uLXJlbW92ZS1zaWduOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMDgzXCI7IH1cblxuLmdseXBoaWNvbi1vay1zaWduOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMDg0XCI7IH1cblxuLmdseXBoaWNvbi1xdWVzdGlvbi1zaWduOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMDg1XCI7IH1cblxuLmdseXBoaWNvbi1pbmZvLXNpZ246YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUwODZcIjsgfVxuXG4uZ2x5cGhpY29uLXNjcmVlbnNob3Q6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUwODdcIjsgfVxuXG4uZ2x5cGhpY29uLXJlbW92ZS1jaXJjbGU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUwODhcIjsgfVxuXG4uZ2x5cGhpY29uLW9rLWNpcmNsZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTA4OVwiOyB9XG5cbi5nbHlwaGljb24tYmFuLWNpcmNsZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTA5MFwiOyB9XG5cbi5nbHlwaGljb24tYXJyb3ctbGVmdDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTA5MVwiOyB9XG5cbi5nbHlwaGljb24tYXJyb3ctcmlnaHQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUwOTJcIjsgfVxuXG4uZ2x5cGhpY29uLWFycm93LXVwOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMDkzXCI7IH1cblxuLmdseXBoaWNvbi1hcnJvdy1kb3duOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMDk0XCI7IH1cblxuLmdseXBoaWNvbi1zaGFyZS1hbHQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUwOTVcIjsgfVxuXG4uZ2x5cGhpY29uLXJlc2l6ZS1mdWxsOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMDk2XCI7IH1cblxuLmdseXBoaWNvbi1yZXNpemUtc21hbGw6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUwOTdcIjsgfVxuXG4uZ2x5cGhpY29uLWV4Y2xhbWF0aW9uLXNpZ246YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUxMDFcIjsgfVxuXG4uZ2x5cGhpY29uLWdpZnQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUxMDJcIjsgfVxuXG4uZ2x5cGhpY29uLWxlYWY6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUxMDNcIjsgfVxuXG4uZ2x5cGhpY29uLWZpcmU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUxMDRcIjsgfVxuXG4uZ2x5cGhpY29uLWV5ZS1vcGVuOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMTA1XCI7IH1cblxuLmdseXBoaWNvbi1leWUtY2xvc2U6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUxMDZcIjsgfVxuXG4uZ2x5cGhpY29uLXdhcm5pbmctc2lnbjpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTEwN1wiOyB9XG5cbi5nbHlwaGljb24tcGxhbmU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUxMDhcIjsgfVxuXG4uZ2x5cGhpY29uLWNhbGVuZGFyOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMTA5XCI7IH1cblxuLmdseXBoaWNvbi1yYW5kb206YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUxMTBcIjsgfVxuXG4uZ2x5cGhpY29uLWNvbW1lbnQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUxMTFcIjsgfVxuXG4uZ2x5cGhpY29uLW1hZ25ldDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTExMlwiOyB9XG5cbi5nbHlwaGljb24tY2hldnJvbi11cDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTExM1wiOyB9XG5cbi5nbHlwaGljb24tY2hldnJvbi1kb3duOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMTE0XCI7IH1cblxuLmdseXBoaWNvbi1yZXR3ZWV0OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMTE1XCI7IH1cblxuLmdseXBoaWNvbi1zaG9wcGluZy1jYXJ0OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMTE2XCI7IH1cblxuLmdseXBoaWNvbi1mb2xkZXItY2xvc2U6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUxMTdcIjsgfVxuXG4uZ2x5cGhpY29uLWZvbGRlci1vcGVuOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMTE4XCI7IH1cblxuLmdseXBoaWNvbi1yZXNpemUtdmVydGljYWw6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUxMTlcIjsgfVxuXG4uZ2x5cGhpY29uLXJlc2l6ZS1ob3Jpem9udGFsOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMTIwXCI7IH1cblxuLmdseXBoaWNvbi1oZGQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUxMjFcIjsgfVxuXG4uZ2x5cGhpY29uLWJ1bGxob3JuOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMTIyXCI7IH1cblxuLmdseXBoaWNvbi1iZWxsOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMTIzXCI7IH1cblxuLmdseXBoaWNvbi1jZXJ0aWZpY2F0ZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTEyNFwiOyB9XG5cbi5nbHlwaGljb24tdGh1bWJzLXVwOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMTI1XCI7IH1cblxuLmdseXBoaWNvbi10aHVtYnMtZG93bjpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTEyNlwiOyB9XG5cbi5nbHlwaGljb24taGFuZC1yaWdodDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTEyN1wiOyB9XG5cbi5nbHlwaGljb24taGFuZC1sZWZ0OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMTI4XCI7IH1cblxuLmdseXBoaWNvbi1oYW5kLXVwOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMTI5XCI7IH1cblxuLmdseXBoaWNvbi1oYW5kLWRvd246YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUxMzBcIjsgfVxuXG4uZ2x5cGhpY29uLWNpcmNsZS1hcnJvdy1yaWdodDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTEzMVwiOyB9XG5cbi5nbHlwaGljb24tY2lyY2xlLWFycm93LWxlZnQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUxMzJcIjsgfVxuXG4uZ2x5cGhpY29uLWNpcmNsZS1hcnJvdy11cDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTEzM1wiOyB9XG5cbi5nbHlwaGljb24tY2lyY2xlLWFycm93LWRvd246YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUxMzRcIjsgfVxuXG4uZ2x5cGhpY29uLWdsb2JlOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMTM1XCI7IH1cblxuLmdseXBoaWNvbi13cmVuY2g6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUxMzZcIjsgfVxuXG4uZ2x5cGhpY29uLXRhc2tzOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMTM3XCI7IH1cblxuLmdseXBoaWNvbi1maWx0ZXI6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUxMzhcIjsgfVxuXG4uZ2x5cGhpY29uLWJyaWVmY2FzZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTEzOVwiOyB9XG5cbi5nbHlwaGljb24tZnVsbHNjcmVlbjpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTE0MFwiOyB9XG5cbi5nbHlwaGljb24tZGFzaGJvYXJkOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMTQxXCI7IH1cblxuLmdseXBoaWNvbi1wYXBlcmNsaXA6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUxNDJcIjsgfVxuXG4uZ2x5cGhpY29uLWhlYXJ0LWVtcHR5OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMTQzXCI7IH1cblxuLmdseXBoaWNvbi1saW5rOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMTQ0XCI7IH1cblxuLmdseXBoaWNvbi1waG9uZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTE0NVwiOyB9XG5cbi5nbHlwaGljb24tcHVzaHBpbjpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTE0NlwiOyB9XG5cbi5nbHlwaGljb24tdXNkOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMTQ4XCI7IH1cblxuLmdseXBoaWNvbi1nYnA6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUxNDlcIjsgfVxuXG4uZ2x5cGhpY29uLXNvcnQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUxNTBcIjsgfVxuXG4uZ2x5cGhpY29uLXNvcnQtYnktYWxwaGFiZXQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUxNTFcIjsgfVxuXG4uZ2x5cGhpY29uLXNvcnQtYnktYWxwaGFiZXQtYWx0OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMTUyXCI7IH1cblxuLmdseXBoaWNvbi1zb3J0LWJ5LW9yZGVyOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMTUzXCI7IH1cblxuLmdseXBoaWNvbi1zb3J0LWJ5LW9yZGVyLWFsdDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTE1NFwiOyB9XG5cbi5nbHlwaGljb24tc29ydC1ieS1hdHRyaWJ1dGVzOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMTU1XCI7IH1cblxuLmdseXBoaWNvbi1zb3J0LWJ5LWF0dHJpYnV0ZXMtYWx0OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMTU2XCI7IH1cblxuLmdseXBoaWNvbi11bmNoZWNrZWQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUxNTdcIjsgfVxuXG4uZ2x5cGhpY29uLWV4cGFuZDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTE1OFwiOyB9XG5cbi5nbHlwaGljb24tY29sbGFwc2UtZG93bjpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTE1OVwiOyB9XG5cbi5nbHlwaGljb24tY29sbGFwc2UtdXA6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUxNjBcIjsgfVxuXG4uZ2x5cGhpY29uLWxvZy1pbjpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTE2MVwiOyB9XG5cbi5nbHlwaGljb24tZmxhc2g6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUxNjJcIjsgfVxuXG4uZ2x5cGhpY29uLWxvZy1vdXQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUxNjNcIjsgfVxuXG4uZ2x5cGhpY29uLW5ldy13aW5kb3c6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUxNjRcIjsgfVxuXG4uZ2x5cGhpY29uLXJlY29yZDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTE2NVwiOyB9XG5cbi5nbHlwaGljb24tc2F2ZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTE2NlwiOyB9XG5cbi5nbHlwaGljb24tb3BlbjpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTE2N1wiOyB9XG5cbi5nbHlwaGljb24tc2F2ZWQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUxNjhcIjsgfVxuXG4uZ2x5cGhpY29uLWltcG9ydDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTE2OVwiOyB9XG5cbi5nbHlwaGljb24tZXhwb3J0OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMTcwXCI7IH1cblxuLmdseXBoaWNvbi1zZW5kOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMTcxXCI7IH1cblxuLmdseXBoaWNvbi1mbG9wcHktZGlzazpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTE3MlwiOyB9XG5cbi5nbHlwaGljb24tZmxvcHB5LXNhdmVkOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMTczXCI7IH1cblxuLmdseXBoaWNvbi1mbG9wcHktcmVtb3ZlOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMTc0XCI7IH1cblxuLmdseXBoaWNvbi1mbG9wcHktc2F2ZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTE3NVwiOyB9XG5cbi5nbHlwaGljb24tZmxvcHB5LW9wZW46YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUxNzZcIjsgfVxuXG4uZ2x5cGhpY29uLWNyZWRpdC1jYXJkOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMTc3XCI7IH1cblxuLmdseXBoaWNvbi10cmFuc2ZlcjpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTE3OFwiOyB9XG5cbi5nbHlwaGljb24tY3V0bGVyeTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTE3OVwiOyB9XG5cbi5nbHlwaGljb24taGVhZGVyOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMTgwXCI7IH1cblxuLmdseXBoaWNvbi1jb21wcmVzc2VkOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMTgxXCI7IH1cblxuLmdseXBoaWNvbi1lYXJwaG9uZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTE4MlwiOyB9XG5cbi5nbHlwaGljb24tcGhvbmUtYWx0OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMTgzXCI7IH1cblxuLmdseXBoaWNvbi10b3dlcjpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTE4NFwiOyB9XG5cbi5nbHlwaGljb24tc3RhdHM6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUxODVcIjsgfVxuXG4uZ2x5cGhpY29uLXNkLXZpZGVvOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMTg2XCI7IH1cblxuLmdseXBoaWNvbi1oZC12aWRlbzpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTE4N1wiOyB9XG5cbi5nbHlwaGljb24tc3VidGl0bGVzOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMTg4XCI7IH1cblxuLmdseXBoaWNvbi1zb3VuZC1zdGVyZW86YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUxODlcIjsgfVxuXG4uZ2x5cGhpY29uLXNvdW5kLWRvbGJ5OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMTkwXCI7IH1cblxuLmdseXBoaWNvbi1zb3VuZC01LTE6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUxOTFcIjsgfVxuXG4uZ2x5cGhpY29uLXNvdW5kLTYtMTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTE5MlwiOyB9XG5cbi5nbHlwaGljb24tc291bmQtNy0xOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMTkzXCI7IH1cblxuLmdseXBoaWNvbi1jb3B5cmlnaHQtbWFyazpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTE5NFwiOyB9XG5cbi5nbHlwaGljb24tcmVnaXN0cmF0aW9uLW1hcms6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUxOTVcIjsgfVxuXG4uZ2x5cGhpY29uLWNsb3VkLWRvd25sb2FkOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMTk3XCI7IH1cblxuLmdseXBoaWNvbi1jbG91ZC11cGxvYWQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUxOThcIjsgfVxuXG4uZ2x5cGhpY29uLXRyZWUtY29uaWZlcjpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTE5OVwiOyB9XG5cbi5nbHlwaGljb24tdHJlZS1kZWNpZHVvdXM6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUyMDBcIjsgfVxuXG4uZ2x5cGhpY29uLWNkOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMjAxXCI7IH1cblxuLmdseXBoaWNvbi1zYXZlLWZpbGU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUyMDJcIjsgfVxuXG4uZ2x5cGhpY29uLW9wZW4tZmlsZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTIwM1wiOyB9XG5cbi5nbHlwaGljb24tbGV2ZWwtdXA6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUyMDRcIjsgfVxuXG4uZ2x5cGhpY29uLWNvcHk6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUyMDVcIjsgfVxuXG4uZ2x5cGhpY29uLXBhc3RlOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMjA2XCI7IH1cblxuLmdseXBoaWNvbi1hbGVydDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTIwOVwiOyB9XG5cbi5nbHlwaGljb24tZXF1YWxpemVyOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMjEwXCI7IH1cblxuLmdseXBoaWNvbi1raW5nOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMjExXCI7IH1cblxuLmdseXBoaWNvbi1xdWVlbjpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTIxMlwiOyB9XG5cbi5nbHlwaGljb24tcGF3bjpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTIxM1wiOyB9XG5cbi5nbHlwaGljb24tYmlzaG9wOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMjE0XCI7IH1cblxuLmdseXBoaWNvbi1rbmlnaHQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUyMTVcIjsgfVxuXG4uZ2x5cGhpY29uLWJhYnktZm9ybXVsYTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTIxNlwiOyB9XG5cbi5nbHlwaGljb24tdGVudDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcMjZmYVwiOyB9XG5cbi5nbHlwaGljb24tYmxhY2tib2FyZDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTIxOFwiOyB9XG5cbi5nbHlwaGljb24tYmVkOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMjE5XCI7IH1cblxuLmdseXBoaWNvbi1hcHBsZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjhmZlwiOyB9XG5cbi5nbHlwaGljb24tZXJhc2U6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUyMjFcIjsgfVxuXG4uZ2x5cGhpY29uLWhvdXJnbGFzczpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcMjMxYlwiOyB9XG5cbi5nbHlwaGljb24tbGFtcDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTIyM1wiOyB9XG5cbi5nbHlwaGljb24tZHVwbGljYXRlOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMjI0XCI7IH1cblxuLmdseXBoaWNvbi1waWdneS1iYW5rOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMjI1XCI7IH1cblxuLmdseXBoaWNvbi1zY2lzc29yczpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTIyNlwiOyB9XG5cbi5nbHlwaGljb24tYml0Y29pbjpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTIyN1wiOyB9XG5cbi5nbHlwaGljb24tYnRjOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMjI3XCI7IH1cblxuLmdseXBoaWNvbi14YnQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUyMjdcIjsgfVxuXG4uZ2x5cGhpY29uLXllbjpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcMDBhNVwiOyB9XG5cbi5nbHlwaGljb24tanB5OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFwwMGE1XCI7IH1cblxuLmdseXBoaWNvbi1ydWJsZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcMjBiZFwiOyB9XG5cbi5nbHlwaGljb24tcnViOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFwyMGJkXCI7IH1cblxuLmdseXBoaWNvbi1zY2FsZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTIzMFwiOyB9XG5cbi5nbHlwaGljb24taWNlLWxvbGx5OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMjMxXCI7IH1cblxuLmdseXBoaWNvbi1pY2UtbG9sbHktdGFzdGVkOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMjMyXCI7IH1cblxuLmdseXBoaWNvbi1lZHVjYXRpb246YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUyMzNcIjsgfVxuXG4uZ2x5cGhpY29uLW9wdGlvbi1ob3Jpem9udGFsOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMjM0XCI7IH1cblxuLmdseXBoaWNvbi1vcHRpb24tdmVydGljYWw6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUyMzVcIjsgfVxuXG4uZ2x5cGhpY29uLW1lbnUtaGFtYnVyZ2VyOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMjM2XCI7IH1cblxuLmdseXBoaWNvbi1tb2RhbC13aW5kb3c6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUyMzdcIjsgfVxuXG4uZ2x5cGhpY29uLW9pbDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTIzOFwiOyB9XG5cbi5nbHlwaGljb24tZ3JhaW46YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUyMzlcIjsgfVxuXG4uZ2x5cGhpY29uLXN1bmdsYXNzZXM6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUyNDBcIjsgfVxuXG4uZ2x5cGhpY29uLXRleHQtc2l6ZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTI0MVwiOyB9XG5cbi5nbHlwaGljb24tdGV4dC1jb2xvcjpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTI0MlwiOyB9XG5cbi5nbHlwaGljb24tdGV4dC1iYWNrZ3JvdW5kOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMjQzXCI7IH1cblxuLmdseXBoaWNvbi1vYmplY3QtYWxpZ24tdG9wOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMjQ0XCI7IH1cblxuLmdseXBoaWNvbi1vYmplY3QtYWxpZ24tYm90dG9tOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMjQ1XCI7IH1cblxuLmdseXBoaWNvbi1vYmplY3QtYWxpZ24taG9yaXpvbnRhbDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTI0NlwiOyB9XG5cbi5nbHlwaGljb24tb2JqZWN0LWFsaWduLWxlZnQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUyNDdcIjsgfVxuXG4uZ2x5cGhpY29uLW9iamVjdC1hbGlnbi12ZXJ0aWNhbDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTI0OFwiOyB9XG5cbi5nbHlwaGljb24tb2JqZWN0LWFsaWduLXJpZ2h0OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMjQ5XCI7IH1cblxuLmdseXBoaWNvbi10cmlhbmdsZS1yaWdodDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTI1MFwiOyB9XG5cbi5nbHlwaGljb24tdHJpYW5nbGUtbGVmdDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTI1MVwiOyB9XG5cbi5nbHlwaGljb24tdHJpYW5nbGUtYm90dG9tOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMjUyXCI7IH1cblxuLmdseXBoaWNvbi10cmlhbmdsZS10b3A6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUyNTNcIjsgfVxuXG4uZ2x5cGhpY29uLWNvbnNvbGU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUyNTRcIjsgfVxuXG4uZ2x5cGhpY29uLXN1cGVyc2NyaXB0OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMjU1XCI7IH1cblxuLmdseXBoaWNvbi1zdWJzY3JpcHQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUyNTZcIjsgfVxuXG4uZ2x5cGhpY29uLW1lbnUtbGVmdDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTI1N1wiOyB9XG5cbi5nbHlwaGljb24tbWVudS1yaWdodDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTI1OFwiOyB9XG5cbi5nbHlwaGljb24tbWVudS1kb3duOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMjU5XCI7IH1cblxuLmdseXBoaWNvbi1tZW51LXVwOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMjYwXCI7IH1cblxuKiB7XG4gIC13ZWJraXQtYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgLW1vei1ib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICBib3gtc2l6aW5nOiBib3JkZXItYm94OyB9XG5cbio6YmVmb3JlLFxuKjphZnRlciB7XG4gIC13ZWJraXQtYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgLW1vei1ib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICBib3gtc2l6aW5nOiBib3JkZXItYm94OyB9XG5cbmh0bWwge1xuICBmb250LXNpemU6IDEwcHg7XG4gIC13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvcjogcmdiYSgwLCAwLCAwLCAwKTsgfVxuXG5ib2R5IHtcbiAgZm9udC1mYW1pbHk6IFwiSGVsdmV0aWNhIE5ldWVcIiwgSGVsdmV0aWNhLCBBcmlhbCwgc2Fucy1zZXJpZjtcbiAgZm9udC1zaXplOiAxNHB4O1xuICBsaW5lLWhlaWdodDogMS40Mjg1NzE0Mjk7XG4gIGNvbG9yOiAjMzMzMzMzO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmOyB9XG5cbmlucHV0LFxuYnV0dG9uLFxuc2VsZWN0LFxudGV4dGFyZWEge1xuICBmb250LWZhbWlseTogaW5oZXJpdDtcbiAgZm9udC1zaXplOiBpbmhlcml0O1xuICBsaW5lLWhlaWdodDogaW5oZXJpdDsgfVxuXG5hIHtcbiAgY29sb3I6ICMzMzdhYjc7XG4gIHRleHQtZGVjb3JhdGlvbjogbm9uZTsgfVxuICBhOmhvdmVyLCBhOmZvY3VzIHtcbiAgICBjb2xvcjogIzIzNTI3YztcbiAgICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsgfVxuICBhOmZvY3VzIHtcbiAgICBvdXRsaW5lOiB0aGluIGRvdHRlZDtcbiAgICBvdXRsaW5lOiA1cHggYXV0byAtd2Via2l0LWZvY3VzLXJpbmctY29sb3I7XG4gICAgb3V0bGluZS1vZmZzZXQ6IC0ycHg7IH1cblxuZmlndXJlIHtcbiAgbWFyZ2luOiAwOyB9XG5cbmltZyB7XG4gIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7IH1cblxuLmltZy1yZXNwb25zaXZlIHtcbiAgZGlzcGxheTogYmxvY2s7XG4gIG1heC13aWR0aDogMTAwJTtcbiAgaGVpZ2h0OiBhdXRvOyB9XG5cbi5pbWctcm91bmRlZCB7XG4gIGJvcmRlci1yYWRpdXM6IDZweDsgfVxuXG4uaW1nLXRodW1ibmFpbCB7XG4gIHBhZGRpbmc6IDRweDtcbiAgbGluZS1oZWlnaHQ6IDEuNDI4NTcxNDI5O1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xuICBib3JkZXI6IDFweCBzb2xpZCAjZGRkO1xuICBib3JkZXItcmFkaXVzOiA0cHg7XG4gIC13ZWJraXQtdHJhbnNpdGlvbjogYWxsIDAuMnMgZWFzZS1pbi1vdXQ7XG4gIC1vLXRyYW5zaXRpb246IGFsbCAwLjJzIGVhc2UtaW4tb3V0O1xuICB0cmFuc2l0aW9uOiBhbGwgMC4ycyBlYXNlLWluLW91dDtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICBtYXgtd2lkdGg6IDEwMCU7XG4gIGhlaWdodDogYXV0bzsgfVxuXG4uaW1nLWNpcmNsZSB7XG4gIGJvcmRlci1yYWRpdXM6IDUwJTsgfVxuXG5ociB7XG4gIG1hcmdpbi10b3A6IDIwcHg7XG4gIG1hcmdpbi1ib3R0b206IDIwcHg7XG4gIGJvcmRlcjogMDtcbiAgYm9yZGVyLXRvcDogMXB4IHNvbGlkICNlZWVlZWU7IH1cblxuLnNyLW9ubHkge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHdpZHRoOiAxcHg7XG4gIGhlaWdodDogMXB4O1xuICBtYXJnaW46IC0xcHg7XG4gIHBhZGRpbmc6IDA7XG4gIG92ZXJmbG93OiBoaWRkZW47XG4gIGNsaXA6IHJlY3QoMCwgMCwgMCwgMCk7XG4gIGJvcmRlcjogMDsgfVxuXG4uc3Itb25seS1mb2N1c2FibGU6YWN0aXZlLCAuc3Itb25seS1mb2N1c2FibGU6Zm9jdXMge1xuICBwb3NpdGlvbjogc3RhdGljO1xuICB3aWR0aDogYXV0bztcbiAgaGVpZ2h0OiBhdXRvO1xuICBtYXJnaW46IDA7XG4gIG92ZXJmbG93OiB2aXNpYmxlO1xuICBjbGlwOiBhdXRvOyB9XG5cbltyb2xlPVwiYnV0dG9uXCJdIHtcbiAgY3Vyc29yOiBwb2ludGVyOyB9XG5cbmgxLCBoMiwgaDMsIGg0LCBoNSwgaDYsXG4uaDEsIC5oMiwgLmgzLCAuaDQsIC5oNSwgLmg2IHtcbiAgZm9udC1mYW1pbHk6IGluaGVyaXQ7XG4gIGZvbnQtd2VpZ2h0OiA3MDA7XG4gIGxpbmUtaGVpZ2h0OiAxLjE7XG4gIGNvbG9yOiBpbmhlcml0OyB9XG4gIGgxIHNtYWxsLFxuICBoMSAuc21hbGwsIGgyIHNtYWxsLFxuICBoMiAuc21hbGwsIGgzIHNtYWxsLFxuICBoMyAuc21hbGwsIGg0IHNtYWxsLFxuICBoNCAuc21hbGwsIGg1IHNtYWxsLFxuICBoNSAuc21hbGwsIGg2IHNtYWxsLFxuICBoNiAuc21hbGwsXG4gIC5oMSBzbWFsbCxcbiAgLmgxIC5zbWFsbCwgLmgyIHNtYWxsLFxuICAuaDIgLnNtYWxsLCAuaDMgc21hbGwsXG4gIC5oMyAuc21hbGwsIC5oNCBzbWFsbCxcbiAgLmg0IC5zbWFsbCwgLmg1IHNtYWxsLFxuICAuaDUgLnNtYWxsLCAuaDYgc21hbGwsXG4gIC5oNiAuc21hbGwge1xuICAgIGZvbnQtd2VpZ2h0OiBub3JtYWw7XG4gICAgbGluZS1oZWlnaHQ6IDE7XG4gICAgY29sb3I6ICM3Nzc3Nzc7IH1cblxuaDEsIC5oMSxcbmgyLCAuaDIsXG5oMywgLmgzIHtcbiAgbWFyZ2luLXRvcDogMjBweDtcbiAgbWFyZ2luLWJvdHRvbTogMTBweDsgfVxuICBoMSBzbWFsbCxcbiAgaDEgLnNtYWxsLCAuaDEgc21hbGwsXG4gIC5oMSAuc21hbGwsXG4gIGgyIHNtYWxsLFxuICBoMiAuc21hbGwsIC5oMiBzbWFsbCxcbiAgLmgyIC5zbWFsbCxcbiAgaDMgc21hbGwsXG4gIGgzIC5zbWFsbCwgLmgzIHNtYWxsLFxuICAuaDMgLnNtYWxsIHtcbiAgICBmb250LXNpemU6IDY1JTsgfVxuXG5oNCwgLmg0LFxuaDUsIC5oNSxcbmg2LCAuaDYge1xuICBtYXJnaW4tdG9wOiAxMHB4O1xuICBtYXJnaW4tYm90dG9tOiAxMHB4OyB9XG4gIGg0IHNtYWxsLFxuICBoNCAuc21hbGwsIC5oNCBzbWFsbCxcbiAgLmg0IC5zbWFsbCxcbiAgaDUgc21hbGwsXG4gIGg1IC5zbWFsbCwgLmg1IHNtYWxsLFxuICAuaDUgLnNtYWxsLFxuICBoNiBzbWFsbCxcbiAgaDYgLnNtYWxsLCAuaDYgc21hbGwsXG4gIC5oNiAuc21hbGwge1xuICAgIGZvbnQtc2l6ZTogNzUlOyB9XG5cbmgxLCAuaDEge1xuICBmb250LXNpemU6IDM2cHg7IH1cblxuaDIsIC5oMiB7XG4gIGZvbnQtc2l6ZTogMzBweDsgfVxuXG5oMywgLmgzIHtcbiAgZm9udC1zaXplOiAyNHB4OyB9XG5cbmg0LCAuaDQge1xuICBmb250LXNpemU6IDE4cHg7IH1cblxuaDUsIC5oNSB7XG4gIGZvbnQtc2l6ZTogMTRweDsgfVxuXG5oNiwgLmg2IHtcbiAgZm9udC1zaXplOiAxMnB4OyB9XG5cbnAge1xuICBtYXJnaW46IDAgMCAxMHB4OyB9XG5cbi5sZWFkIHtcbiAgbWFyZ2luLWJvdHRvbTogMjBweDtcbiAgZm9udC1zaXplOiAxNnB4O1xuICBmb250LXdlaWdodDogMzAwO1xuICBsaW5lLWhlaWdodDogMS40OyB9XG4gIEBtZWRpYSAobWluLXdpZHRoOiA3NjhweCkge1xuICAgIC5sZWFkIHtcbiAgICAgIGZvbnQtc2l6ZTogMjFweDsgfSB9XG5cbnNtYWxsLFxuLnNtYWxsIHtcbiAgZm9udC1zaXplOiA4NSU7IH1cblxubWFyayxcbi5tYXJrIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZjZjhlMztcbiAgcGFkZGluZzogLjJlbTsgfVxuXG4udGV4dC1sZWZ0IHtcbiAgdGV4dC1hbGlnbjogbGVmdDsgfVxuXG4udGV4dC1yaWdodCB7XG4gIHRleHQtYWxpZ246IHJpZ2h0OyB9XG5cbi50ZXh0LWNlbnRlciB7XG4gIHRleHQtYWxpZ246IGNlbnRlcjsgfVxuXG4udGV4dC1qdXN0aWZ5IHtcbiAgdGV4dC1hbGlnbjoganVzdGlmeTsgfVxuXG4udGV4dC1ub3dyYXAge1xuICB3aGl0ZS1zcGFjZTogbm93cmFwOyB9XG5cbi50ZXh0LWxvd2VyY2FzZSB7XG4gIHRleHQtdHJhbnNmb3JtOiBsb3dlcmNhc2U7IH1cblxuLnRleHQtdXBwZXJjYXNlLCAuaW5pdGlhbGlzbSB7XG4gIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7IH1cblxuLnRleHQtY2FwaXRhbGl6ZSB7XG4gIHRleHQtdHJhbnNmb3JtOiBjYXBpdGFsaXplOyB9XG5cbi50ZXh0LW11dGVkIHtcbiAgY29sb3I6ICM3Nzc3Nzc7IH1cblxuLnRleHQtcHJpbWFyeSB7XG4gIGNvbG9yOiAjMzM3YWI3OyB9XG5cbmEudGV4dC1wcmltYXJ5OmhvdmVyIHtcbiAgY29sb3I6ICMyODYwOTA7IH1cblxuLnRleHQtc3VjY2VzcyB7XG4gIGNvbG9yOiAjM2M3NjNkOyB9XG5cbmEudGV4dC1zdWNjZXNzOmhvdmVyIHtcbiAgY29sb3I6ICMyYjU0MmM7IH1cblxuLnRleHQtaW5mbyB7XG4gIGNvbG9yOiAjMzE3MDhmOyB9XG5cbmEudGV4dC1pbmZvOmhvdmVyIHtcbiAgY29sb3I6ICMyNDUyNjk7IH1cblxuLnRleHQtd2FybmluZyB7XG4gIGNvbG9yOiAjOGE2ZDNiOyB9XG5cbmEudGV4dC13YXJuaW5nOmhvdmVyIHtcbiAgY29sb3I6ICM2NjUxMmM7IH1cblxuLnRleHQtZGFuZ2VyIHtcbiAgY29sb3I6ICNhOTQ0NDI7IH1cblxuYS50ZXh0LWRhbmdlcjpob3ZlciB7XG4gIGNvbG9yOiAjODQzNTM0OyB9XG5cbi5iZy1wcmltYXJ5IHtcbiAgY29sb3I6ICNmZmY7IH1cblxuLmJnLXByaW1hcnkge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMzM3YWI3OyB9XG5cbmEuYmctcHJpbWFyeTpob3ZlciB7XG4gIGJhY2tncm91bmQtY29sb3I6ICMyODYwOTA7IH1cblxuLmJnLXN1Y2Nlc3Mge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZGZmMGQ4OyB9XG5cbmEuYmctc3VjY2Vzczpob3ZlciB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNjMWUyYjM7IH1cblxuLmJnLWluZm8ge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZDllZGY3OyB9XG5cbmEuYmctaW5mbzpob3ZlciB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNhZmQ5ZWU7IH1cblxuLmJnLXdhcm5pbmcge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmNmOGUzOyB9XG5cbmEuYmctd2FybmluZzpob3ZlciB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmN2VjYjU7IH1cblxuLmJnLWRhbmdlciB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmMmRlZGU7IH1cblxuYS5iZy1kYW5nZXI6aG92ZXIge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZTRiOWI5OyB9XG5cbi5wYWdlLWhlYWRlciB7XG4gIHBhZGRpbmctYm90dG9tOiA5cHg7XG4gIG1hcmdpbjogNDBweCAwIDIwcHg7XG4gIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjZWVlZWVlOyB9XG5cbnVsLFxub2wge1xuICBtYXJnaW4tdG9wOiAwO1xuICBtYXJnaW4tYm90dG9tOiAxMHB4OyB9XG4gIHVsIHVsLFxuICB1bCBvbCxcbiAgb2wgdWwsXG4gIG9sIG9sIHtcbiAgICBtYXJnaW4tYm90dG9tOiAwOyB9XG5cbi5saXN0LXVuc3R5bGVkIHtcbiAgcGFkZGluZy1sZWZ0OiAwO1xuICBsaXN0LXN0eWxlOiBub25lOyB9XG5cbi5saXN0LWlubGluZSB7XG4gIHBhZGRpbmctbGVmdDogMDtcbiAgbGlzdC1zdHlsZTogbm9uZTtcbiAgbWFyZ2luLWxlZnQ6IC01cHg7IH1cbiAgLmxpc3QtaW5saW5lID4gbGkge1xuICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICBwYWRkaW5nLWxlZnQ6IDVweDtcbiAgICBwYWRkaW5nLXJpZ2h0OiA1cHg7IH1cblxuZGwge1xuICBtYXJnaW4tdG9wOiAwO1xuICBtYXJnaW4tYm90dG9tOiAyMHB4OyB9XG5cbmR0LFxuZGQge1xuICBsaW5lLWhlaWdodDogMS40Mjg1NzE0Mjk7IH1cblxuZHQge1xuICBmb250LXdlaWdodDogYm9sZDsgfVxuXG5kZCB7XG4gIG1hcmdpbi1sZWZ0OiAwOyB9XG5cbi5kbC1ob3Jpem9udGFsIGRkOmJlZm9yZSwgLmRsLWhvcml6b250YWwgZGQ6YWZ0ZXIge1xuICBjb250ZW50OiBcIiBcIjtcbiAgZGlzcGxheTogdGFibGU7IH1cblxuLmRsLWhvcml6b250YWwgZGQ6YWZ0ZXIge1xuICBjbGVhcjogYm90aDsgfVxuXG5AbWVkaWEgKG1pbi13aWR0aDogNzY4cHgpIHtcbiAgLmRsLWhvcml6b250YWwgZHQge1xuICAgIGZsb2F0OiBsZWZ0O1xuICAgIHdpZHRoOiAxNjBweDtcbiAgICBjbGVhcjogbGVmdDtcbiAgICB0ZXh0LWFsaWduOiByaWdodDtcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzO1xuICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7IH1cbiAgLmRsLWhvcml6b250YWwgZGQge1xuICAgIG1hcmdpbi1sZWZ0OiAxODBweDsgfSB9XG5cbmFiYnJbdGl0bGVdLFxuYWJicltkYXRhLW9yaWdpbmFsLXRpdGxlXSB7XG4gIGN1cnNvcjogaGVscDtcbiAgYm9yZGVyLWJvdHRvbTogMXB4IGRvdHRlZCAjNzc3Nzc3OyB9XG5cbi5pbml0aWFsaXNtIHtcbiAgZm9udC1zaXplOiA5MCU7IH1cblxuYmxvY2txdW90ZSB7XG4gIHBhZGRpbmc6IDEwcHggMjBweDtcbiAgbWFyZ2luOiAwIDAgMjBweDtcbiAgZm9udC1zaXplOiAxNy41cHg7XG4gIGJvcmRlci1sZWZ0OiA1cHggc29saWQgI2VlZWVlZTsgfVxuICBibG9ja3F1b3RlIHA6bGFzdC1jaGlsZCxcbiAgYmxvY2txdW90ZSB1bDpsYXN0LWNoaWxkLFxuICBibG9ja3F1b3RlIG9sOmxhc3QtY2hpbGQge1xuICAgIG1hcmdpbi1ib3R0b206IDA7IH1cbiAgYmxvY2txdW90ZSBmb290ZXIsXG4gIGJsb2NrcXVvdGUgc21hbGwsXG4gIGJsb2NrcXVvdGUgLnNtYWxsIHtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgICBmb250LXNpemU6IDgwJTtcbiAgICBsaW5lLWhlaWdodDogMS40Mjg1NzE0Mjk7XG4gICAgY29sb3I6ICM3Nzc3Nzc7IH1cbiAgICBibG9ja3F1b3RlIGZvb3RlcjpiZWZvcmUsXG4gICAgYmxvY2txdW90ZSBzbWFsbDpiZWZvcmUsXG4gICAgYmxvY2txdW90ZSAuc21hbGw6YmVmb3JlIHtcbiAgICAgIGNvbnRlbnQ6ICdcXDIwMTQgXFwwMEEwJzsgfVxuXG4uYmxvY2txdW90ZS1yZXZlcnNlLFxuYmxvY2txdW90ZS5wdWxsLXJpZ2h0IHtcbiAgcGFkZGluZy1yaWdodDogMTVweDtcbiAgcGFkZGluZy1sZWZ0OiAwO1xuICBib3JkZXItcmlnaHQ6IDVweCBzb2xpZCAjZWVlZWVlO1xuICBib3JkZXItbGVmdDogMDtcbiAgdGV4dC1hbGlnbjogcmlnaHQ7IH1cbiAgLmJsb2NrcXVvdGUtcmV2ZXJzZSBmb290ZXI6YmVmb3JlLFxuICAuYmxvY2txdW90ZS1yZXZlcnNlIHNtYWxsOmJlZm9yZSxcbiAgLmJsb2NrcXVvdGUtcmV2ZXJzZSAuc21hbGw6YmVmb3JlLFxuICBibG9ja3F1b3RlLnB1bGwtcmlnaHQgZm9vdGVyOmJlZm9yZSxcbiAgYmxvY2txdW90ZS5wdWxsLXJpZ2h0IHNtYWxsOmJlZm9yZSxcbiAgYmxvY2txdW90ZS5wdWxsLXJpZ2h0IC5zbWFsbDpiZWZvcmUge1xuICAgIGNvbnRlbnQ6ICcnOyB9XG4gIC5ibG9ja3F1b3RlLXJldmVyc2UgZm9vdGVyOmFmdGVyLFxuICAuYmxvY2txdW90ZS1yZXZlcnNlIHNtYWxsOmFmdGVyLFxuICAuYmxvY2txdW90ZS1yZXZlcnNlIC5zbWFsbDphZnRlcixcbiAgYmxvY2txdW90ZS5wdWxsLXJpZ2h0IGZvb3RlcjphZnRlcixcbiAgYmxvY2txdW90ZS5wdWxsLXJpZ2h0IHNtYWxsOmFmdGVyLFxuICBibG9ja3F1b3RlLnB1bGwtcmlnaHQgLnNtYWxsOmFmdGVyIHtcbiAgICBjb250ZW50OiAnXFwwMEEwIFxcMjAxNCc7IH1cblxuYWRkcmVzcyB7XG4gIG1hcmdpbi1ib3R0b206IDIwcHg7XG4gIGZvbnQtc3R5bGU6IG5vcm1hbDtcbiAgbGluZS1oZWlnaHQ6IDEuNDI4NTcxNDI5OyB9XG5cbmNvZGUsXG5rYmQsXG5wcmUsXG5zYW1wIHtcbiAgZm9udC1mYW1pbHk6IFwiUm9ib3RvIE1vbm9cIiwgTWVubG8sIE1vbmFjbywgQ29uc29sYXMsIFwiQ291cmllciBOZXdcIiwgbW9ub3NwYWNlOyB9XG5cbmNvZGUge1xuICBwYWRkaW5nOiAycHggNHB4O1xuICBmb250LXNpemU6IDkwJTtcbiAgY29sb3I6ICM0RDhDRjQ7XG4gIGJhY2tncm91bmQtY29sb3I6IHdoaXRlc21va2U7XG4gIGJvcmRlci1yYWRpdXM6IDRweDsgfVxuXG5rYmQge1xuICBwYWRkaW5nOiAycHggNHB4O1xuICBmb250LXNpemU6IDkwJTtcbiAgY29sb3I6ICNmZmY7XG4gIGJhY2tncm91bmQtY29sb3I6ICMzMzM7XG4gIGJvcmRlci1yYWRpdXM6IDNweDtcbiAgYm94LXNoYWRvdzogaW5zZXQgMCAtMXB4IDAgcmdiYSgwLCAwLCAwLCAwLjI1KTsgfVxuICBrYmQga2JkIHtcbiAgICBwYWRkaW5nOiAwO1xuICAgIGZvbnQtc2l6ZTogMTAwJTtcbiAgICBmb250LXdlaWdodDogYm9sZDtcbiAgICBib3gtc2hhZG93OiBub25lOyB9XG5cbnByZSB7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICBwYWRkaW5nOiA5LjVweDtcbiAgbWFyZ2luOiAwIDAgMTBweDtcbiAgZm9udC1zaXplOiAxM3B4O1xuICBsaW5lLWhlaWdodDogMS40Mjg1NzE0Mjk7XG4gIHdvcmQtYnJlYWs6IGJyZWFrLWFsbDtcbiAgd29yZC13cmFwOiBicmVhay13b3JkO1xuICBjb2xvcjogIzMzMzMzMztcbiAgYmFja2dyb3VuZC1jb2xvcjogI2Y1ZjVmNTtcbiAgYm9yZGVyOiAxcHggc29saWQgI2NjYztcbiAgYm9yZGVyLXJhZGl1czogNHB4OyB9XG4gIHByZSBjb2RlIHtcbiAgICBwYWRkaW5nOiAwO1xuICAgIGZvbnQtc2l6ZTogaW5oZXJpdDtcbiAgICBjb2xvcjogaW5oZXJpdDtcbiAgICB3aGl0ZS1zcGFjZTogcHJlLXdyYXA7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7XG4gICAgYm9yZGVyLXJhZGl1czogMDsgfVxuXG4ucHJlLXNjcm9sbGFibGUge1xuICBtYXgtaGVpZ2h0OiAzNDBweDtcbiAgb3ZlcmZsb3cteTogc2Nyb2xsOyB9XG5cbi5jb250YWluZXIge1xuICBtYXJnaW4tcmlnaHQ6IGF1dG87XG4gIG1hcmdpbi1sZWZ0OiBhdXRvO1xuICBwYWRkaW5nLWxlZnQ6IDE1cHg7XG4gIHBhZGRpbmctcmlnaHQ6IDE1cHg7IH1cbiAgLmNvbnRhaW5lcjpiZWZvcmUsIC5jb250YWluZXI6YWZ0ZXIge1xuICAgIGNvbnRlbnQ6IFwiIFwiO1xuICAgIGRpc3BsYXk6IHRhYmxlOyB9XG4gIC5jb250YWluZXI6YWZ0ZXIge1xuICAgIGNsZWFyOiBib3RoOyB9XG4gIEBtZWRpYSAobWluLXdpZHRoOiA3NjhweCkge1xuICAgIC5jb250YWluZXIge1xuICAgICAgd2lkdGg6IDc1MHB4OyB9IH1cbiAgQG1lZGlhIChtaW4td2lkdGg6IDk5MnB4KSB7XG4gICAgLmNvbnRhaW5lciB7XG4gICAgICB3aWR0aDogOTcwcHg7IH0gfVxuICBAbWVkaWEgKG1pbi13aWR0aDogMTIyMHB4KSB7XG4gICAgLmNvbnRhaW5lciB7XG4gICAgICB3aWR0aDogMTE3MHB4OyB9IH1cblxuLmNvbnRhaW5lci1mbHVpZCB7XG4gIG1hcmdpbi1yaWdodDogYXV0bztcbiAgbWFyZ2luLWxlZnQ6IGF1dG87XG4gIHBhZGRpbmctbGVmdDogMTVweDtcbiAgcGFkZGluZy1yaWdodDogMTVweDsgfVxuICAuY29udGFpbmVyLWZsdWlkOmJlZm9yZSwgLmNvbnRhaW5lci1mbHVpZDphZnRlciB7XG4gICAgY29udGVudDogXCIgXCI7XG4gICAgZGlzcGxheTogdGFibGU7IH1cbiAgLmNvbnRhaW5lci1mbHVpZDphZnRlciB7XG4gICAgY2xlYXI6IGJvdGg7IH1cblxuLnJvdyB7XG4gIG1hcmdpbi1sZWZ0OiAtMTVweDtcbiAgbWFyZ2luLXJpZ2h0OiAtMTVweDsgfVxuICAucm93OmJlZm9yZSwgLnJvdzphZnRlciB7XG4gICAgY29udGVudDogXCIgXCI7XG4gICAgZGlzcGxheTogdGFibGU7IH1cbiAgLnJvdzphZnRlciB7XG4gICAgY2xlYXI6IGJvdGg7IH1cblxuLmNvbC14cy0xLCAuY29sLXNtLTEsIC5jb2wtbWQtMSwgLmNvbC1sZy0xLCAuY29sLXhzLTIsIC5jb2wtc20tMiwgLmNvbC1tZC0yLCAuY29sLWxnLTIsIC5jb2wteHMtMywgLmNvbC1zbS0zLCAuY29sLW1kLTMsIC5jb2wtbGctMywgLmNvbC14cy00LCAuY29sLXNtLTQsIC5jb2wtbWQtNCwgLmNvbC1sZy00LCAuY29sLXhzLTUsIC5jb2wtc20tNSwgLmNvbC1tZC01LCAuY29sLWxnLTUsIC5jb2wteHMtNiwgLmNvbC1zbS02LCAuY29sLW1kLTYsIC5jb2wtbGctNiwgLmNvbC14cy03LCAuY29sLXNtLTcsIC5jb2wtbWQtNywgLmNvbC1sZy03LCAuY29sLXhzLTgsIC5jb2wtc20tOCwgLmNvbC1tZC04LCAuY29sLWxnLTgsIC5jb2wteHMtOSwgLmNvbC1zbS05LCAuY29sLW1kLTksIC5jb2wtbGctOSwgLmNvbC14cy0xMCwgLmNvbC1zbS0xMCwgLmNvbC1tZC0xMCwgLmNvbC1sZy0xMCwgLmNvbC14cy0xMSwgLmNvbC1zbS0xMSwgLmNvbC1tZC0xMSwgLmNvbC1sZy0xMSwgLmNvbC14cy0xMiwgLmNvbC1zbS0xMiwgLmNvbC1tZC0xMiwgLmNvbC1sZy0xMiB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgbWluLWhlaWdodDogMXB4O1xuICBwYWRkaW5nLWxlZnQ6IDE1cHg7XG4gIHBhZGRpbmctcmlnaHQ6IDE1cHg7IH1cblxuLmNvbC14cy0xLCAuY29sLXhzLTIsIC5jb2wteHMtMywgLmNvbC14cy00LCAuY29sLXhzLTUsIC5jb2wteHMtNiwgLmNvbC14cy03LCAuY29sLXhzLTgsIC5jb2wteHMtOSwgLmNvbC14cy0xMCwgLmNvbC14cy0xMSwgLmNvbC14cy0xMiB7XG4gIGZsb2F0OiBsZWZ0OyB9XG5cbi5jb2wteHMtMSB7XG4gIHdpZHRoOiA4LjMzMzMzMzMzMzMlOyB9XG5cbi5jb2wteHMtMiB7XG4gIHdpZHRoOiAxNi42NjY2NjY2NjY3JTsgfVxuXG4uY29sLXhzLTMge1xuICB3aWR0aDogMjUlOyB9XG5cbi5jb2wteHMtNCB7XG4gIHdpZHRoOiAzMy4zMzMzMzMzMzMzJTsgfVxuXG4uY29sLXhzLTUge1xuICB3aWR0aDogNDEuNjY2NjY2NjY2NyU7IH1cblxuLmNvbC14cy02IHtcbiAgd2lkdGg6IDUwJTsgfVxuXG4uY29sLXhzLTcge1xuICB3aWR0aDogNTguMzMzMzMzMzMzMyU7IH1cblxuLmNvbC14cy04IHtcbiAgd2lkdGg6IDY2LjY2NjY2NjY2NjclOyB9XG5cbi5jb2wteHMtOSB7XG4gIHdpZHRoOiA3NSU7IH1cblxuLmNvbC14cy0xMCB7XG4gIHdpZHRoOiA4My4zMzMzMzMzMzMzJTsgfVxuXG4uY29sLXhzLTExIHtcbiAgd2lkdGg6IDkxLjY2NjY2NjY2NjclOyB9XG5cbi5jb2wteHMtMTIge1xuICB3aWR0aDogMTAwJTsgfVxuXG4uY29sLXhzLXB1bGwtMCB7XG4gIHJpZ2h0OiBhdXRvOyB9XG5cbi5jb2wteHMtcHVsbC0xIHtcbiAgcmlnaHQ6IDguMzMzMzMzMzMzMyU7IH1cblxuLmNvbC14cy1wdWxsLTIge1xuICByaWdodDogMTYuNjY2NjY2NjY2NyU7IH1cblxuLmNvbC14cy1wdWxsLTMge1xuICByaWdodDogMjUlOyB9XG5cbi5jb2wteHMtcHVsbC00IHtcbiAgcmlnaHQ6IDMzLjMzMzMzMzMzMzMlOyB9XG5cbi5jb2wteHMtcHVsbC01IHtcbiAgcmlnaHQ6IDQxLjY2NjY2NjY2NjclOyB9XG5cbi5jb2wteHMtcHVsbC02IHtcbiAgcmlnaHQ6IDUwJTsgfVxuXG4uY29sLXhzLXB1bGwtNyB7XG4gIHJpZ2h0OiA1OC4zMzMzMzMzMzMzJTsgfVxuXG4uY29sLXhzLXB1bGwtOCB7XG4gIHJpZ2h0OiA2Ni42NjY2NjY2NjY3JTsgfVxuXG4uY29sLXhzLXB1bGwtOSB7XG4gIHJpZ2h0OiA3NSU7IH1cblxuLmNvbC14cy1wdWxsLTEwIHtcbiAgcmlnaHQ6IDgzLjMzMzMzMzMzMzMlOyB9XG5cbi5jb2wteHMtcHVsbC0xMSB7XG4gIHJpZ2h0OiA5MS42NjY2NjY2NjY3JTsgfVxuXG4uY29sLXhzLXB1bGwtMTIge1xuICByaWdodDogMTAwJTsgfVxuXG4uY29sLXhzLXB1c2gtMCB7XG4gIGxlZnQ6IGF1dG87IH1cblxuLmNvbC14cy1wdXNoLTEge1xuICBsZWZ0OiA4LjMzMzMzMzMzMzMlOyB9XG5cbi5jb2wteHMtcHVzaC0yIHtcbiAgbGVmdDogMTYuNjY2NjY2NjY2NyU7IH1cblxuLmNvbC14cy1wdXNoLTMge1xuICBsZWZ0OiAyNSU7IH1cblxuLmNvbC14cy1wdXNoLTQge1xuICBsZWZ0OiAzMy4zMzMzMzMzMzMzJTsgfVxuXG4uY29sLXhzLXB1c2gtNSB7XG4gIGxlZnQ6IDQxLjY2NjY2NjY2NjclOyB9XG5cbi5jb2wteHMtcHVzaC02IHtcbiAgbGVmdDogNTAlOyB9XG5cbi5jb2wteHMtcHVzaC03IHtcbiAgbGVmdDogNTguMzMzMzMzMzMzMyU7IH1cblxuLmNvbC14cy1wdXNoLTgge1xuICBsZWZ0OiA2Ni42NjY2NjY2NjY3JTsgfVxuXG4uY29sLXhzLXB1c2gtOSB7XG4gIGxlZnQ6IDc1JTsgfVxuXG4uY29sLXhzLXB1c2gtMTAge1xuICBsZWZ0OiA4My4zMzMzMzMzMzMzJTsgfVxuXG4uY29sLXhzLXB1c2gtMTEge1xuICBsZWZ0OiA5MS42NjY2NjY2NjY3JTsgfVxuXG4uY29sLXhzLXB1c2gtMTIge1xuICBsZWZ0OiAxMDAlOyB9XG5cbi5jb2wteHMtb2Zmc2V0LTAge1xuICBtYXJnaW4tbGVmdDogMCU7IH1cblxuLmNvbC14cy1vZmZzZXQtMSB7XG4gIG1hcmdpbi1sZWZ0OiA4LjMzMzMzMzMzMzMlOyB9XG5cbi5jb2wteHMtb2Zmc2V0LTIge1xuICBtYXJnaW4tbGVmdDogMTYuNjY2NjY2NjY2NyU7IH1cblxuLmNvbC14cy1vZmZzZXQtMyB7XG4gIG1hcmdpbi1sZWZ0OiAyNSU7IH1cblxuLmNvbC14cy1vZmZzZXQtNCB7XG4gIG1hcmdpbi1sZWZ0OiAzMy4zMzMzMzMzMzMzJTsgfVxuXG4uY29sLXhzLW9mZnNldC01IHtcbiAgbWFyZ2luLWxlZnQ6IDQxLjY2NjY2NjY2NjclOyB9XG5cbi5jb2wteHMtb2Zmc2V0LTYge1xuICBtYXJnaW4tbGVmdDogNTAlOyB9XG5cbi5jb2wteHMtb2Zmc2V0LTcge1xuICBtYXJnaW4tbGVmdDogNTguMzMzMzMzMzMzMyU7IH1cblxuLmNvbC14cy1vZmZzZXQtOCB7XG4gIG1hcmdpbi1sZWZ0OiA2Ni42NjY2NjY2NjY3JTsgfVxuXG4uY29sLXhzLW9mZnNldC05IHtcbiAgbWFyZ2luLWxlZnQ6IDc1JTsgfVxuXG4uY29sLXhzLW9mZnNldC0xMCB7XG4gIG1hcmdpbi1sZWZ0OiA4My4zMzMzMzMzMzMzJTsgfVxuXG4uY29sLXhzLW9mZnNldC0xMSB7XG4gIG1hcmdpbi1sZWZ0OiA5MS42NjY2NjY2NjY3JTsgfVxuXG4uY29sLXhzLW9mZnNldC0xMiB7XG4gIG1hcmdpbi1sZWZ0OiAxMDAlOyB9XG5cbkBtZWRpYSAobWluLXdpZHRoOiA3NjhweCkge1xuICAuY29sLXNtLTEsIC5jb2wtc20tMiwgLmNvbC1zbS0zLCAuY29sLXNtLTQsIC5jb2wtc20tNSwgLmNvbC1zbS02LCAuY29sLXNtLTcsIC5jb2wtc20tOCwgLmNvbC1zbS05LCAuY29sLXNtLTEwLCAuY29sLXNtLTExLCAuY29sLXNtLTEyIHtcbiAgICBmbG9hdDogbGVmdDsgfVxuICAuY29sLXNtLTEge1xuICAgIHdpZHRoOiA4LjMzMzMzMzMzMzMlOyB9XG4gIC5jb2wtc20tMiB7XG4gICAgd2lkdGg6IDE2LjY2NjY2NjY2NjclOyB9XG4gIC5jb2wtc20tMyB7XG4gICAgd2lkdGg6IDI1JTsgfVxuICAuY29sLXNtLTQge1xuICAgIHdpZHRoOiAzMy4zMzMzMzMzMzMzJTsgfVxuICAuY29sLXNtLTUge1xuICAgIHdpZHRoOiA0MS42NjY2NjY2NjY3JTsgfVxuICAuY29sLXNtLTYge1xuICAgIHdpZHRoOiA1MCU7IH1cbiAgLmNvbC1zbS03IHtcbiAgICB3aWR0aDogNTguMzMzMzMzMzMzMyU7IH1cbiAgLmNvbC1zbS04IHtcbiAgICB3aWR0aDogNjYuNjY2NjY2NjY2NyU7IH1cbiAgLmNvbC1zbS05IHtcbiAgICB3aWR0aDogNzUlOyB9XG4gIC5jb2wtc20tMTAge1xuICAgIHdpZHRoOiA4My4zMzMzMzMzMzMzJTsgfVxuICAuY29sLXNtLTExIHtcbiAgICB3aWR0aDogOTEuNjY2NjY2NjY2NyU7IH1cbiAgLmNvbC1zbS0xMiB7XG4gICAgd2lkdGg6IDEwMCU7IH1cbiAgLmNvbC1zbS1wdWxsLTAge1xuICAgIHJpZ2h0OiBhdXRvOyB9XG4gIC5jb2wtc20tcHVsbC0xIHtcbiAgICByaWdodDogOC4zMzMzMzMzMzMzJTsgfVxuICAuY29sLXNtLXB1bGwtMiB7XG4gICAgcmlnaHQ6IDE2LjY2NjY2NjY2NjclOyB9XG4gIC5jb2wtc20tcHVsbC0zIHtcbiAgICByaWdodDogMjUlOyB9XG4gIC5jb2wtc20tcHVsbC00IHtcbiAgICByaWdodDogMzMuMzMzMzMzMzMzMyU7IH1cbiAgLmNvbC1zbS1wdWxsLTUge1xuICAgIHJpZ2h0OiA0MS42NjY2NjY2NjY3JTsgfVxuICAuY29sLXNtLXB1bGwtNiB7XG4gICAgcmlnaHQ6IDUwJTsgfVxuICAuY29sLXNtLXB1bGwtNyB7XG4gICAgcmlnaHQ6IDU4LjMzMzMzMzMzMzMlOyB9XG4gIC5jb2wtc20tcHVsbC04IHtcbiAgICByaWdodDogNjYuNjY2NjY2NjY2NyU7IH1cbiAgLmNvbC1zbS1wdWxsLTkge1xuICAgIHJpZ2h0OiA3NSU7IH1cbiAgLmNvbC1zbS1wdWxsLTEwIHtcbiAgICByaWdodDogODMuMzMzMzMzMzMzMyU7IH1cbiAgLmNvbC1zbS1wdWxsLTExIHtcbiAgICByaWdodDogOTEuNjY2NjY2NjY2NyU7IH1cbiAgLmNvbC1zbS1wdWxsLTEyIHtcbiAgICByaWdodDogMTAwJTsgfVxuICAuY29sLXNtLXB1c2gtMCB7XG4gICAgbGVmdDogYXV0bzsgfVxuICAuY29sLXNtLXB1c2gtMSB7XG4gICAgbGVmdDogOC4zMzMzMzMzMzMzJTsgfVxuICAuY29sLXNtLXB1c2gtMiB7XG4gICAgbGVmdDogMTYuNjY2NjY2NjY2NyU7IH1cbiAgLmNvbC1zbS1wdXNoLTMge1xuICAgIGxlZnQ6IDI1JTsgfVxuICAuY29sLXNtLXB1c2gtNCB7XG4gICAgbGVmdDogMzMuMzMzMzMzMzMzMyU7IH1cbiAgLmNvbC1zbS1wdXNoLTUge1xuICAgIGxlZnQ6IDQxLjY2NjY2NjY2NjclOyB9XG4gIC5jb2wtc20tcHVzaC02IHtcbiAgICBsZWZ0OiA1MCU7IH1cbiAgLmNvbC1zbS1wdXNoLTcge1xuICAgIGxlZnQ6IDU4LjMzMzMzMzMzMzMlOyB9XG4gIC5jb2wtc20tcHVzaC04IHtcbiAgICBsZWZ0OiA2Ni42NjY2NjY2NjY3JTsgfVxuICAuY29sLXNtLXB1c2gtOSB7XG4gICAgbGVmdDogNzUlOyB9XG4gIC5jb2wtc20tcHVzaC0xMCB7XG4gICAgbGVmdDogODMuMzMzMzMzMzMzMyU7IH1cbiAgLmNvbC1zbS1wdXNoLTExIHtcbiAgICBsZWZ0OiA5MS42NjY2NjY2NjY3JTsgfVxuICAuY29sLXNtLXB1c2gtMTIge1xuICAgIGxlZnQ6IDEwMCU7IH1cbiAgLmNvbC1zbS1vZmZzZXQtMCB7XG4gICAgbWFyZ2luLWxlZnQ6IDAlOyB9XG4gIC5jb2wtc20tb2Zmc2V0LTEge1xuICAgIG1hcmdpbi1sZWZ0OiA4LjMzMzMzMzMzMzMlOyB9XG4gIC5jb2wtc20tb2Zmc2V0LTIge1xuICAgIG1hcmdpbi1sZWZ0OiAxNi42NjY2NjY2NjY3JTsgfVxuICAuY29sLXNtLW9mZnNldC0zIHtcbiAgICBtYXJnaW4tbGVmdDogMjUlOyB9XG4gIC5jb2wtc20tb2Zmc2V0LTQge1xuICAgIG1hcmdpbi1sZWZ0OiAzMy4zMzMzMzMzMzMzJTsgfVxuICAuY29sLXNtLW9mZnNldC01IHtcbiAgICBtYXJnaW4tbGVmdDogNDEuNjY2NjY2NjY2NyU7IH1cbiAgLmNvbC1zbS1vZmZzZXQtNiB7XG4gICAgbWFyZ2luLWxlZnQ6IDUwJTsgfVxuICAuY29sLXNtLW9mZnNldC03IHtcbiAgICBtYXJnaW4tbGVmdDogNTguMzMzMzMzMzMzMyU7IH1cbiAgLmNvbC1zbS1vZmZzZXQtOCB7XG4gICAgbWFyZ2luLWxlZnQ6IDY2LjY2NjY2NjY2NjclOyB9XG4gIC5jb2wtc20tb2Zmc2V0LTkge1xuICAgIG1hcmdpbi1sZWZ0OiA3NSU7IH1cbiAgLmNvbC1zbS1vZmZzZXQtMTAge1xuICAgIG1hcmdpbi1sZWZ0OiA4My4zMzMzMzMzMzMzJTsgfVxuICAuY29sLXNtLW9mZnNldC0xMSB7XG4gICAgbWFyZ2luLWxlZnQ6IDkxLjY2NjY2NjY2NjclOyB9XG4gIC5jb2wtc20tb2Zmc2V0LTEyIHtcbiAgICBtYXJnaW4tbGVmdDogMTAwJTsgfSB9XG5cbkBtZWRpYSAobWluLXdpZHRoOiA5OTJweCkge1xuICAuY29sLW1kLTEsIC5jb2wtbWQtMiwgLmNvbC1tZC0zLCAuY29sLW1kLTQsIC5jb2wtbWQtNSwgLmNvbC1tZC02LCAuY29sLW1kLTcsIC5jb2wtbWQtOCwgLmNvbC1tZC05LCAuY29sLW1kLTEwLCAuY29sLW1kLTExLCAuY29sLW1kLTEyIHtcbiAgICBmbG9hdDogbGVmdDsgfVxuICAuY29sLW1kLTEge1xuICAgIHdpZHRoOiA4LjMzMzMzMzMzMzMlOyB9XG4gIC5jb2wtbWQtMiB7XG4gICAgd2lkdGg6IDE2LjY2NjY2NjY2NjclOyB9XG4gIC5jb2wtbWQtMyB7XG4gICAgd2lkdGg6IDI1JTsgfVxuICAuY29sLW1kLTQge1xuICAgIHdpZHRoOiAzMy4zMzMzMzMzMzMzJTsgfVxuICAuY29sLW1kLTUge1xuICAgIHdpZHRoOiA0MS42NjY2NjY2NjY3JTsgfVxuICAuY29sLW1kLTYge1xuICAgIHdpZHRoOiA1MCU7IH1cbiAgLmNvbC1tZC03IHtcbiAgICB3aWR0aDogNTguMzMzMzMzMzMzMyU7IH1cbiAgLmNvbC1tZC04IHtcbiAgICB3aWR0aDogNjYuNjY2NjY2NjY2NyU7IH1cbiAgLmNvbC1tZC05IHtcbiAgICB3aWR0aDogNzUlOyB9XG4gIC5jb2wtbWQtMTAge1xuICAgIHdpZHRoOiA4My4zMzMzMzMzMzMzJTsgfVxuICAuY29sLW1kLTExIHtcbiAgICB3aWR0aDogOTEuNjY2NjY2NjY2NyU7IH1cbiAgLmNvbC1tZC0xMiB7XG4gICAgd2lkdGg6IDEwMCU7IH1cbiAgLmNvbC1tZC1wdWxsLTAge1xuICAgIHJpZ2h0OiBhdXRvOyB9XG4gIC5jb2wtbWQtcHVsbC0xIHtcbiAgICByaWdodDogOC4zMzMzMzMzMzMzJTsgfVxuICAuY29sLW1kLXB1bGwtMiB7XG4gICAgcmlnaHQ6IDE2LjY2NjY2NjY2NjclOyB9XG4gIC5jb2wtbWQtcHVsbC0zIHtcbiAgICByaWdodDogMjUlOyB9XG4gIC5jb2wtbWQtcHVsbC00IHtcbiAgICByaWdodDogMzMuMzMzMzMzMzMzMyU7IH1cbiAgLmNvbC1tZC1wdWxsLTUge1xuICAgIHJpZ2h0OiA0MS42NjY2NjY2NjY3JTsgfVxuICAuY29sLW1kLXB1bGwtNiB7XG4gICAgcmlnaHQ6IDUwJTsgfVxuICAuY29sLW1kLXB1bGwtNyB7XG4gICAgcmlnaHQ6IDU4LjMzMzMzMzMzMzMlOyB9XG4gIC5jb2wtbWQtcHVsbC04IHtcbiAgICByaWdodDogNjYuNjY2NjY2NjY2NyU7IH1cbiAgLmNvbC1tZC1wdWxsLTkge1xuICAgIHJpZ2h0OiA3NSU7IH1cbiAgLmNvbC1tZC1wdWxsLTEwIHtcbiAgICByaWdodDogODMuMzMzMzMzMzMzMyU7IH1cbiAgLmNvbC1tZC1wdWxsLTExIHtcbiAgICByaWdodDogOTEuNjY2NjY2NjY2NyU7IH1cbiAgLmNvbC1tZC1wdWxsLTEyIHtcbiAgICByaWdodDogMTAwJTsgfVxuICAuY29sLW1kLXB1c2gtMCB7XG4gICAgbGVmdDogYXV0bzsgfVxuICAuY29sLW1kLXB1c2gtMSB7XG4gICAgbGVmdDogOC4zMzMzMzMzMzMzJTsgfVxuICAuY29sLW1kLXB1c2gtMiB7XG4gICAgbGVmdDogMTYuNjY2NjY2NjY2NyU7IH1cbiAgLmNvbC1tZC1wdXNoLTMge1xuICAgIGxlZnQ6IDI1JTsgfVxuICAuY29sLW1kLXB1c2gtNCB7XG4gICAgbGVmdDogMzMuMzMzMzMzMzMzMyU7IH1cbiAgLmNvbC1tZC1wdXNoLTUge1xuICAgIGxlZnQ6IDQxLjY2NjY2NjY2NjclOyB9XG4gIC5jb2wtbWQtcHVzaC02IHtcbiAgICBsZWZ0OiA1MCU7IH1cbiAgLmNvbC1tZC1wdXNoLTcge1xuICAgIGxlZnQ6IDU4LjMzMzMzMzMzMzMlOyB9XG4gIC5jb2wtbWQtcHVzaC04IHtcbiAgICBsZWZ0OiA2Ni42NjY2NjY2NjY3JTsgfVxuICAuY29sLW1kLXB1c2gtOSB7XG4gICAgbGVmdDogNzUlOyB9XG4gIC5jb2wtbWQtcHVzaC0xMCB7XG4gICAgbGVmdDogODMuMzMzMzMzMzMzMyU7IH1cbiAgLmNvbC1tZC1wdXNoLTExIHtcbiAgICBsZWZ0OiA5MS42NjY2NjY2NjY3JTsgfVxuICAuY29sLW1kLXB1c2gtMTIge1xuICAgIGxlZnQ6IDEwMCU7IH1cbiAgLmNvbC1tZC1vZmZzZXQtMCB7XG4gICAgbWFyZ2luLWxlZnQ6IDAlOyB9XG4gIC5jb2wtbWQtb2Zmc2V0LTEge1xuICAgIG1hcmdpbi1sZWZ0OiA4LjMzMzMzMzMzMzMlOyB9XG4gIC5jb2wtbWQtb2Zmc2V0LTIge1xuICAgIG1hcmdpbi1sZWZ0OiAxNi42NjY2NjY2NjY3JTsgfVxuICAuY29sLW1kLW9mZnNldC0zIHtcbiAgICBtYXJnaW4tbGVmdDogMjUlOyB9XG4gIC5jb2wtbWQtb2Zmc2V0LTQge1xuICAgIG1hcmdpbi1sZWZ0OiAzMy4zMzMzMzMzMzMzJTsgfVxuICAuY29sLW1kLW9mZnNldC01IHtcbiAgICBtYXJnaW4tbGVmdDogNDEuNjY2NjY2NjY2NyU7IH1cbiAgLmNvbC1tZC1vZmZzZXQtNiB7XG4gICAgbWFyZ2luLWxlZnQ6IDUwJTsgfVxuICAuY29sLW1kLW9mZnNldC03IHtcbiAgICBtYXJnaW4tbGVmdDogNTguMzMzMzMzMzMzMyU7IH1cbiAgLmNvbC1tZC1vZmZzZXQtOCB7XG4gICAgbWFyZ2luLWxlZnQ6IDY2LjY2NjY2NjY2NjclOyB9XG4gIC5jb2wtbWQtb2Zmc2V0LTkge1xuICAgIG1hcmdpbi1sZWZ0OiA3NSU7IH1cbiAgLmNvbC1tZC1vZmZzZXQtMTAge1xuICAgIG1hcmdpbi1sZWZ0OiA4My4zMzMzMzMzMzMzJTsgfVxuICAuY29sLW1kLW9mZnNldC0xMSB7XG4gICAgbWFyZ2luLWxlZnQ6IDkxLjY2NjY2NjY2NjclOyB9XG4gIC5jb2wtbWQtb2Zmc2V0LTEyIHtcbiAgICBtYXJnaW4tbGVmdDogMTAwJTsgfSB9XG5cbkBtZWRpYSAobWluLXdpZHRoOiAxMjIwcHgpIHtcbiAgLmNvbC1sZy0xLCAuY29sLWxnLTIsIC5jb2wtbGctMywgLmNvbC1sZy00LCAuY29sLWxnLTUsIC5jb2wtbGctNiwgLmNvbC1sZy03LCAuY29sLWxnLTgsIC5jb2wtbGctOSwgLmNvbC1sZy0xMCwgLmNvbC1sZy0xMSwgLmNvbC1sZy0xMiB7XG4gICAgZmxvYXQ6IGxlZnQ7IH1cbiAgLmNvbC1sZy0xIHtcbiAgICB3aWR0aDogOC4zMzMzMzMzMzMzJTsgfVxuICAuY29sLWxnLTIge1xuICAgIHdpZHRoOiAxNi42NjY2NjY2NjY3JTsgfVxuICAuY29sLWxnLTMge1xuICAgIHdpZHRoOiAyNSU7IH1cbiAgLmNvbC1sZy00IHtcbiAgICB3aWR0aDogMzMuMzMzMzMzMzMzMyU7IH1cbiAgLmNvbC1sZy01IHtcbiAgICB3aWR0aDogNDEuNjY2NjY2NjY2NyU7IH1cbiAgLmNvbC1sZy02IHtcbiAgICB3aWR0aDogNTAlOyB9XG4gIC5jb2wtbGctNyB7XG4gICAgd2lkdGg6IDU4LjMzMzMzMzMzMzMlOyB9XG4gIC5jb2wtbGctOCB7XG4gICAgd2lkdGg6IDY2LjY2NjY2NjY2NjclOyB9XG4gIC5jb2wtbGctOSB7XG4gICAgd2lkdGg6IDc1JTsgfVxuICAuY29sLWxnLTEwIHtcbiAgICB3aWR0aDogODMuMzMzMzMzMzMzMyU7IH1cbiAgLmNvbC1sZy0xMSB7XG4gICAgd2lkdGg6IDkxLjY2NjY2NjY2NjclOyB9XG4gIC5jb2wtbGctMTIge1xuICAgIHdpZHRoOiAxMDAlOyB9XG4gIC5jb2wtbGctcHVsbC0wIHtcbiAgICByaWdodDogYXV0bzsgfVxuICAuY29sLWxnLXB1bGwtMSB7XG4gICAgcmlnaHQ6IDguMzMzMzMzMzMzMyU7IH1cbiAgLmNvbC1sZy1wdWxsLTIge1xuICAgIHJpZ2h0OiAxNi42NjY2NjY2NjY3JTsgfVxuICAuY29sLWxnLXB1bGwtMyB7XG4gICAgcmlnaHQ6IDI1JTsgfVxuICAuY29sLWxnLXB1bGwtNCB7XG4gICAgcmlnaHQ6IDMzLjMzMzMzMzMzMzMlOyB9XG4gIC5jb2wtbGctcHVsbC01IHtcbiAgICByaWdodDogNDEuNjY2NjY2NjY2NyU7IH1cbiAgLmNvbC1sZy1wdWxsLTYge1xuICAgIHJpZ2h0OiA1MCU7IH1cbiAgLmNvbC1sZy1wdWxsLTcge1xuICAgIHJpZ2h0OiA1OC4zMzMzMzMzMzMzJTsgfVxuICAuY29sLWxnLXB1bGwtOCB7XG4gICAgcmlnaHQ6IDY2LjY2NjY2NjY2NjclOyB9XG4gIC5jb2wtbGctcHVsbC05IHtcbiAgICByaWdodDogNzUlOyB9XG4gIC5jb2wtbGctcHVsbC0xMCB7XG4gICAgcmlnaHQ6IDgzLjMzMzMzMzMzMzMlOyB9XG4gIC5jb2wtbGctcHVsbC0xMSB7XG4gICAgcmlnaHQ6IDkxLjY2NjY2NjY2NjclOyB9XG4gIC5jb2wtbGctcHVsbC0xMiB7XG4gICAgcmlnaHQ6IDEwMCU7IH1cbiAgLmNvbC1sZy1wdXNoLTAge1xuICAgIGxlZnQ6IGF1dG87IH1cbiAgLmNvbC1sZy1wdXNoLTEge1xuICAgIGxlZnQ6IDguMzMzMzMzMzMzMyU7IH1cbiAgLmNvbC1sZy1wdXNoLTIge1xuICAgIGxlZnQ6IDE2LjY2NjY2NjY2NjclOyB9XG4gIC5jb2wtbGctcHVzaC0zIHtcbiAgICBsZWZ0OiAyNSU7IH1cbiAgLmNvbC1sZy1wdXNoLTQge1xuICAgIGxlZnQ6IDMzLjMzMzMzMzMzMzMlOyB9XG4gIC5jb2wtbGctcHVzaC01IHtcbiAgICBsZWZ0OiA0MS42NjY2NjY2NjY3JTsgfVxuICAuY29sLWxnLXB1c2gtNiB7XG4gICAgbGVmdDogNTAlOyB9XG4gIC5jb2wtbGctcHVzaC03IHtcbiAgICBsZWZ0OiA1OC4zMzMzMzMzMzMzJTsgfVxuICAuY29sLWxnLXB1c2gtOCB7XG4gICAgbGVmdDogNjYuNjY2NjY2NjY2NyU7IH1cbiAgLmNvbC1sZy1wdXNoLTkge1xuICAgIGxlZnQ6IDc1JTsgfVxuICAuY29sLWxnLXB1c2gtMTAge1xuICAgIGxlZnQ6IDgzLjMzMzMzMzMzMzMlOyB9XG4gIC5jb2wtbGctcHVzaC0xMSB7XG4gICAgbGVmdDogOTEuNjY2NjY2NjY2NyU7IH1cbiAgLmNvbC1sZy1wdXNoLTEyIHtcbiAgICBsZWZ0OiAxMDAlOyB9XG4gIC5jb2wtbGctb2Zmc2V0LTAge1xuICAgIG1hcmdpbi1sZWZ0OiAwJTsgfVxuICAuY29sLWxnLW9mZnNldC0xIHtcbiAgICBtYXJnaW4tbGVmdDogOC4zMzMzMzMzMzMzJTsgfVxuICAuY29sLWxnLW9mZnNldC0yIHtcbiAgICBtYXJnaW4tbGVmdDogMTYuNjY2NjY2NjY2NyU7IH1cbiAgLmNvbC1sZy1vZmZzZXQtMyB7XG4gICAgbWFyZ2luLWxlZnQ6IDI1JTsgfVxuICAuY29sLWxnLW9mZnNldC00IHtcbiAgICBtYXJnaW4tbGVmdDogMzMuMzMzMzMzMzMzMyU7IH1cbiAgLmNvbC1sZy1vZmZzZXQtNSB7XG4gICAgbWFyZ2luLWxlZnQ6IDQxLjY2NjY2NjY2NjclOyB9XG4gIC5jb2wtbGctb2Zmc2V0LTYge1xuICAgIG1hcmdpbi1sZWZ0OiA1MCU7IH1cbiAgLmNvbC1sZy1vZmZzZXQtNyB7XG4gICAgbWFyZ2luLWxlZnQ6IDU4LjMzMzMzMzMzMzMlOyB9XG4gIC5jb2wtbGctb2Zmc2V0LTgge1xuICAgIG1hcmdpbi1sZWZ0OiA2Ni42NjY2NjY2NjY3JTsgfVxuICAuY29sLWxnLW9mZnNldC05IHtcbiAgICBtYXJnaW4tbGVmdDogNzUlOyB9XG4gIC5jb2wtbGctb2Zmc2V0LTEwIHtcbiAgICBtYXJnaW4tbGVmdDogODMuMzMzMzMzMzMzMyU7IH1cbiAgLmNvbC1sZy1vZmZzZXQtMTEge1xuICAgIG1hcmdpbi1sZWZ0OiA5MS42NjY2NjY2NjY3JTsgfVxuICAuY29sLWxnLW9mZnNldC0xMiB7XG4gICAgbWFyZ2luLWxlZnQ6IDEwMCU7IH0gfVxuXG50YWJsZSB7XG4gIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50OyB9XG5cbmNhcHRpb24ge1xuICBwYWRkaW5nLXRvcDogOHB4O1xuICBwYWRkaW5nLWJvdHRvbTogOHB4O1xuICBjb2xvcjogIzc3Nzc3NztcbiAgdGV4dC1hbGlnbjogbGVmdDsgfVxuXG50aCB7XG4gIHRleHQtYWxpZ246IGxlZnQ7IH1cblxudGFibGUsIC50YWJsZSB7XG4gIHdpZHRoOiAxMDAlO1xuICBtYXgtd2lkdGg6IDEwMCU7XG4gIG1hcmdpbi1ib3R0b206IDIwcHg7IH1cbiAgdGFibGUgPiB0aGVhZCA+IHRyID4gdGgsXG4gIHRhYmxlID4gdGhlYWQgPiB0ciA+IHRkLFxuICB0YWJsZSA+IHRib2R5ID4gdHIgPiB0aCxcbiAgdGFibGUgPiB0Ym9keSA+IHRyID4gdGQsXG4gIHRhYmxlID4gdGZvb3QgPiB0ciA+IHRoLFxuICB0YWJsZSA+IHRmb290ID4gdHIgPiB0ZCwgLnRhYmxlID4gdGhlYWQgPiB0ciA+IHRoLFxuICAudGFibGUgPiB0aGVhZCA+IHRyID4gdGQsXG4gIC50YWJsZSA+IHRib2R5ID4gdHIgPiB0aCxcbiAgLnRhYmxlID4gdGJvZHkgPiB0ciA+IHRkLFxuICAudGFibGUgPiB0Zm9vdCA+IHRyID4gdGgsXG4gIC50YWJsZSA+IHRmb290ID4gdHIgPiB0ZCB7XG4gICAgcGFkZGluZzogOHB4O1xuICAgIGxpbmUtaGVpZ2h0OiAxLjQyODU3MTQyOTtcbiAgICB2ZXJ0aWNhbC1hbGlnbjogdG9wO1xuICAgIGJvcmRlci10b3A6IDFweCBzb2xpZCAjZGRkOyB9XG4gIHRhYmxlID4gdGhlYWQgPiB0ciA+IHRoLCAudGFibGUgPiB0aGVhZCA+IHRyID4gdGgge1xuICAgIHZlcnRpY2FsLWFsaWduOiBib3R0b207XG4gICAgYm9yZGVyLWJvdHRvbTogMnB4IHNvbGlkICNkZGQ7IH1cbiAgdGFibGUgPiBjYXB0aW9uICsgdGhlYWQgPiB0cjpmaXJzdC1jaGlsZCA+IHRoLFxuICB0YWJsZSA+IGNhcHRpb24gKyB0aGVhZCA+IHRyOmZpcnN0LWNoaWxkID4gdGQsXG4gIHRhYmxlID4gY29sZ3JvdXAgKyB0aGVhZCA+IHRyOmZpcnN0LWNoaWxkID4gdGgsXG4gIHRhYmxlID4gY29sZ3JvdXAgKyB0aGVhZCA+IHRyOmZpcnN0LWNoaWxkID4gdGQsXG4gIHRhYmxlID4gdGhlYWQ6Zmlyc3QtY2hpbGQgPiB0cjpmaXJzdC1jaGlsZCA+IHRoLFxuICB0YWJsZSA+IHRoZWFkOmZpcnN0LWNoaWxkID4gdHI6Zmlyc3QtY2hpbGQgPiB0ZCwgLnRhYmxlID4gY2FwdGlvbiArIHRoZWFkID4gdHI6Zmlyc3QtY2hpbGQgPiB0aCxcbiAgLnRhYmxlID4gY2FwdGlvbiArIHRoZWFkID4gdHI6Zmlyc3QtY2hpbGQgPiB0ZCxcbiAgLnRhYmxlID4gY29sZ3JvdXAgKyB0aGVhZCA+IHRyOmZpcnN0LWNoaWxkID4gdGgsXG4gIC50YWJsZSA+IGNvbGdyb3VwICsgdGhlYWQgPiB0cjpmaXJzdC1jaGlsZCA+IHRkLFxuICAudGFibGUgPiB0aGVhZDpmaXJzdC1jaGlsZCA+IHRyOmZpcnN0LWNoaWxkID4gdGgsXG4gIC50YWJsZSA+IHRoZWFkOmZpcnN0LWNoaWxkID4gdHI6Zmlyc3QtY2hpbGQgPiB0ZCB7XG4gICAgYm9yZGVyLXRvcDogMDsgfVxuICB0YWJsZSA+IHRib2R5ICsgdGJvZHksIC50YWJsZSA+IHRib2R5ICsgdGJvZHkge1xuICAgIGJvcmRlci10b3A6IDJweCBzb2xpZCAjZGRkOyB9XG4gIHRhYmxlIC50YWJsZSwgLnRhYmxlIC50YWJsZSB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjsgfVxuXG4udGFibGUtY29uZGVuc2VkID4gdGhlYWQgPiB0ciA+IHRoLFxuLnRhYmxlLWNvbmRlbnNlZCA+IHRoZWFkID4gdHIgPiB0ZCxcbi50YWJsZS1jb25kZW5zZWQgPiB0Ym9keSA+IHRyID4gdGgsXG4udGFibGUtY29uZGVuc2VkID4gdGJvZHkgPiB0ciA+IHRkLFxuLnRhYmxlLWNvbmRlbnNlZCA+IHRmb290ID4gdHIgPiB0aCxcbi50YWJsZS1jb25kZW5zZWQgPiB0Zm9vdCA+IHRyID4gdGQge1xuICBwYWRkaW5nOiA1cHg7IH1cblxuLnRhYmxlLWJvcmRlcmVkIHtcbiAgYm9yZGVyOiAxcHggc29saWQgI2RkZDsgfVxuICAudGFibGUtYm9yZGVyZWQgPiB0aGVhZCA+IHRyID4gdGgsXG4gIC50YWJsZS1ib3JkZXJlZCA+IHRoZWFkID4gdHIgPiB0ZCxcbiAgLnRhYmxlLWJvcmRlcmVkID4gdGJvZHkgPiB0ciA+IHRoLFxuICAudGFibGUtYm9yZGVyZWQgPiB0Ym9keSA+IHRyID4gdGQsXG4gIC50YWJsZS1ib3JkZXJlZCA+IHRmb290ID4gdHIgPiB0aCxcbiAgLnRhYmxlLWJvcmRlcmVkID4gdGZvb3QgPiB0ciA+IHRkIHtcbiAgICBib3JkZXI6IDFweCBzb2xpZCAjZGRkOyB9XG4gIC50YWJsZS1ib3JkZXJlZCA+IHRoZWFkID4gdHIgPiB0aCxcbiAgLnRhYmxlLWJvcmRlcmVkID4gdGhlYWQgPiB0ciA+IHRkIHtcbiAgICBib3JkZXItYm90dG9tLXdpZHRoOiAycHg7IH1cblxuLnRhYmxlLXN0cmlwZWQgPiB0Ym9keSA+IHRyOm50aC1vZi10eXBlKG9kZCkge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjlmOWY5OyB9XG5cbi50YWJsZS1ob3ZlciA+IHRib2R5ID4gdHI6aG92ZXIge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjVmNWY1OyB9XG5cbnRhYmxlIGNvbFtjbGFzcyo9XCJjb2wtXCJdIHtcbiAgcG9zaXRpb246IHN0YXRpYztcbiAgZmxvYXQ6IG5vbmU7XG4gIGRpc3BsYXk6IHRhYmxlLWNvbHVtbjsgfVxuXG50YWJsZSB0ZFtjbGFzcyo9XCJjb2wtXCJdLFxudGFibGUgdGhbY2xhc3MqPVwiY29sLVwiXSB7XG4gIHBvc2l0aW9uOiBzdGF0aWM7XG4gIGZsb2F0OiBub25lO1xuICBkaXNwbGF5OiB0YWJsZS1jZWxsOyB9XG5cbi50YWJsZSA+IHRoZWFkID4gdHIgPiB0ZC5hY3RpdmUsXG4udGFibGUgPiB0aGVhZCA+IHRyID4gdGguYWN0aXZlLFxuLnRhYmxlID4gdGhlYWQgPiB0ci5hY3RpdmUgPiB0ZCxcbi50YWJsZSA+IHRoZWFkID4gdHIuYWN0aXZlID4gdGgsXG4udGFibGUgPiB0Ym9keSA+IHRyID4gdGQuYWN0aXZlLFxuLnRhYmxlID4gdGJvZHkgPiB0ciA+IHRoLmFjdGl2ZSxcbi50YWJsZSA+IHRib2R5ID4gdHIuYWN0aXZlID4gdGQsXG4udGFibGUgPiB0Ym9keSA+IHRyLmFjdGl2ZSA+IHRoLFxuLnRhYmxlID4gdGZvb3QgPiB0ciA+IHRkLmFjdGl2ZSxcbi50YWJsZSA+IHRmb290ID4gdHIgPiB0aC5hY3RpdmUsXG4udGFibGUgPiB0Zm9vdCA+IHRyLmFjdGl2ZSA+IHRkLFxuLnRhYmxlID4gdGZvb3QgPiB0ci5hY3RpdmUgPiB0aCB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmNWY1ZjU7IH1cblxuLnRhYmxlLWhvdmVyID4gdGJvZHkgPiB0ciA+IHRkLmFjdGl2ZTpob3Zlcixcbi50YWJsZS1ob3ZlciA+IHRib2R5ID4gdHIgPiB0aC5hY3RpdmU6aG92ZXIsXG4udGFibGUtaG92ZXIgPiB0Ym9keSA+IHRyLmFjdGl2ZTpob3ZlciA+IHRkLFxuLnRhYmxlLWhvdmVyID4gdGJvZHkgPiB0cjpob3ZlciA+IC5hY3RpdmUsXG4udGFibGUtaG92ZXIgPiB0Ym9keSA+IHRyLmFjdGl2ZTpob3ZlciA+IHRoIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2U4ZThlODsgfVxuXG4udGFibGUgPiB0aGVhZCA+IHRyID4gdGQuc3VjY2Vzcyxcbi50YWJsZSA+IHRoZWFkID4gdHIgPiB0aC5zdWNjZXNzLFxuLnRhYmxlID4gdGhlYWQgPiB0ci5zdWNjZXNzID4gdGQsXG4udGFibGUgPiB0aGVhZCA+IHRyLnN1Y2Nlc3MgPiB0aCxcbi50YWJsZSA+IHRib2R5ID4gdHIgPiB0ZC5zdWNjZXNzLFxuLnRhYmxlID4gdGJvZHkgPiB0ciA+IHRoLnN1Y2Nlc3MsXG4udGFibGUgPiB0Ym9keSA+IHRyLnN1Y2Nlc3MgPiB0ZCxcbi50YWJsZSA+IHRib2R5ID4gdHIuc3VjY2VzcyA+IHRoLFxuLnRhYmxlID4gdGZvb3QgPiB0ciA+IHRkLnN1Y2Nlc3MsXG4udGFibGUgPiB0Zm9vdCA+IHRyID4gdGguc3VjY2Vzcyxcbi50YWJsZSA+IHRmb290ID4gdHIuc3VjY2VzcyA+IHRkLFxuLnRhYmxlID4gdGZvb3QgPiB0ci5zdWNjZXNzID4gdGgge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZGZmMGQ4OyB9XG5cbi50YWJsZS1ob3ZlciA+IHRib2R5ID4gdHIgPiB0ZC5zdWNjZXNzOmhvdmVyLFxuLnRhYmxlLWhvdmVyID4gdGJvZHkgPiB0ciA+IHRoLnN1Y2Nlc3M6aG92ZXIsXG4udGFibGUtaG92ZXIgPiB0Ym9keSA+IHRyLnN1Y2Nlc3M6aG92ZXIgPiB0ZCxcbi50YWJsZS1ob3ZlciA+IHRib2R5ID4gdHI6aG92ZXIgPiAuc3VjY2Vzcyxcbi50YWJsZS1ob3ZlciA+IHRib2R5ID4gdHIuc3VjY2Vzczpob3ZlciA+IHRoIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2QwZTljNjsgfVxuXG4udGFibGUgPiB0aGVhZCA+IHRyID4gdGQuaW5mbyxcbi50YWJsZSA+IHRoZWFkID4gdHIgPiB0aC5pbmZvLFxuLnRhYmxlID4gdGhlYWQgPiB0ci5pbmZvID4gdGQsXG4udGFibGUgPiB0aGVhZCA+IHRyLmluZm8gPiB0aCxcbi50YWJsZSA+IHRib2R5ID4gdHIgPiB0ZC5pbmZvLFxuLnRhYmxlID4gdGJvZHkgPiB0ciA+IHRoLmluZm8sXG4udGFibGUgPiB0Ym9keSA+IHRyLmluZm8gPiB0ZCxcbi50YWJsZSA+IHRib2R5ID4gdHIuaW5mbyA+IHRoLFxuLnRhYmxlID4gdGZvb3QgPiB0ciA+IHRkLmluZm8sXG4udGFibGUgPiB0Zm9vdCA+IHRyID4gdGguaW5mbyxcbi50YWJsZSA+IHRmb290ID4gdHIuaW5mbyA+IHRkLFxuLnRhYmxlID4gdGZvb3QgPiB0ci5pbmZvID4gdGgge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZDllZGY3OyB9XG5cbi50YWJsZS1ob3ZlciA+IHRib2R5ID4gdHIgPiB0ZC5pbmZvOmhvdmVyLFxuLnRhYmxlLWhvdmVyID4gdGJvZHkgPiB0ciA+IHRoLmluZm86aG92ZXIsXG4udGFibGUtaG92ZXIgPiB0Ym9keSA+IHRyLmluZm86aG92ZXIgPiB0ZCxcbi50YWJsZS1ob3ZlciA+IHRib2R5ID4gdHI6aG92ZXIgPiAuaW5mbyxcbi50YWJsZS1ob3ZlciA+IHRib2R5ID4gdHIuaW5mbzpob3ZlciA+IHRoIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2M0ZTNmMzsgfVxuXG4udGFibGUgPiB0aGVhZCA+IHRyID4gdGQud2FybmluZyxcbi50YWJsZSA+IHRoZWFkID4gdHIgPiB0aC53YXJuaW5nLFxuLnRhYmxlID4gdGhlYWQgPiB0ci53YXJuaW5nID4gdGQsXG4udGFibGUgPiB0aGVhZCA+IHRyLndhcm5pbmcgPiB0aCxcbi50YWJsZSA+IHRib2R5ID4gdHIgPiB0ZC53YXJuaW5nLFxuLnRhYmxlID4gdGJvZHkgPiB0ciA+IHRoLndhcm5pbmcsXG4udGFibGUgPiB0Ym9keSA+IHRyLndhcm5pbmcgPiB0ZCxcbi50YWJsZSA+IHRib2R5ID4gdHIud2FybmluZyA+IHRoLFxuLnRhYmxlID4gdGZvb3QgPiB0ciA+IHRkLndhcm5pbmcsXG4udGFibGUgPiB0Zm9vdCA+IHRyID4gdGgud2FybmluZyxcbi50YWJsZSA+IHRmb290ID4gdHIud2FybmluZyA+IHRkLFxuLnRhYmxlID4gdGZvb3QgPiB0ci53YXJuaW5nID4gdGgge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmNmOGUzOyB9XG5cbi50YWJsZS1ob3ZlciA+IHRib2R5ID4gdHIgPiB0ZC53YXJuaW5nOmhvdmVyLFxuLnRhYmxlLWhvdmVyID4gdGJvZHkgPiB0ciA+IHRoLndhcm5pbmc6aG92ZXIsXG4udGFibGUtaG92ZXIgPiB0Ym9keSA+IHRyLndhcm5pbmc6aG92ZXIgPiB0ZCxcbi50YWJsZS1ob3ZlciA+IHRib2R5ID4gdHI6aG92ZXIgPiAud2FybmluZyxcbi50YWJsZS1ob3ZlciA+IHRib2R5ID4gdHIud2FybmluZzpob3ZlciA+IHRoIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZhZjJjYzsgfVxuXG4udGFibGUgPiB0aGVhZCA+IHRyID4gdGQuZGFuZ2VyLFxuLnRhYmxlID4gdGhlYWQgPiB0ciA+IHRoLmRhbmdlcixcbi50YWJsZSA+IHRoZWFkID4gdHIuZGFuZ2VyID4gdGQsXG4udGFibGUgPiB0aGVhZCA+IHRyLmRhbmdlciA+IHRoLFxuLnRhYmxlID4gdGJvZHkgPiB0ciA+IHRkLmRhbmdlcixcbi50YWJsZSA+IHRib2R5ID4gdHIgPiB0aC5kYW5nZXIsXG4udGFibGUgPiB0Ym9keSA+IHRyLmRhbmdlciA+IHRkLFxuLnRhYmxlID4gdGJvZHkgPiB0ci5kYW5nZXIgPiB0aCxcbi50YWJsZSA+IHRmb290ID4gdHIgPiB0ZC5kYW5nZXIsXG4udGFibGUgPiB0Zm9vdCA+IHRyID4gdGguZGFuZ2VyLFxuLnRhYmxlID4gdGZvb3QgPiB0ci5kYW5nZXIgPiB0ZCxcbi50YWJsZSA+IHRmb290ID4gdHIuZGFuZ2VyID4gdGgge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjJkZWRlOyB9XG5cbi50YWJsZS1ob3ZlciA+IHRib2R5ID4gdHIgPiB0ZC5kYW5nZXI6aG92ZXIsXG4udGFibGUtaG92ZXIgPiB0Ym9keSA+IHRyID4gdGguZGFuZ2VyOmhvdmVyLFxuLnRhYmxlLWhvdmVyID4gdGJvZHkgPiB0ci5kYW5nZXI6aG92ZXIgPiB0ZCxcbi50YWJsZS1ob3ZlciA+IHRib2R5ID4gdHI6aG92ZXIgPiAuZGFuZ2VyLFxuLnRhYmxlLWhvdmVyID4gdGJvZHkgPiB0ci5kYW5nZXI6aG92ZXIgPiB0aCB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNlYmNjY2M7IH1cblxuLnRhYmxlLXJlc3BvbnNpdmUge1xuICBvdmVyZmxvdy14OiBhdXRvO1xuICBtaW4taGVpZ2h0OiAwLjAxJTsgfVxuICBAbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiA3NjdweCkge1xuICAgIC50YWJsZS1yZXNwb25zaXZlIHtcbiAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgbWFyZ2luLWJvdHRvbTogMTVweDtcbiAgICAgIG92ZXJmbG93LXk6IGhpZGRlbjtcbiAgICAgIC1tcy1vdmVyZmxvdy1zdHlsZTogLW1zLWF1dG9oaWRpbmctc2Nyb2xsYmFyO1xuICAgICAgYm9yZGVyOiAxcHggc29saWQgI2RkZDsgfVxuICAgICAgLnRhYmxlLXJlc3BvbnNpdmUgPiAudGFibGUge1xuICAgICAgICBtYXJnaW4tYm90dG9tOiAwOyB9XG4gICAgICAgIC50YWJsZS1yZXNwb25zaXZlID4gLnRhYmxlID4gdGhlYWQgPiB0ciA+IHRoLFxuICAgICAgICAudGFibGUtcmVzcG9uc2l2ZSA+IC50YWJsZSA+IHRoZWFkID4gdHIgPiB0ZCxcbiAgICAgICAgLnRhYmxlLXJlc3BvbnNpdmUgPiAudGFibGUgPiB0Ym9keSA+IHRyID4gdGgsXG4gICAgICAgIC50YWJsZS1yZXNwb25zaXZlID4gLnRhYmxlID4gdGJvZHkgPiB0ciA+IHRkLFxuICAgICAgICAudGFibGUtcmVzcG9uc2l2ZSA+IC50YWJsZSA+IHRmb290ID4gdHIgPiB0aCxcbiAgICAgICAgLnRhYmxlLXJlc3BvbnNpdmUgPiAudGFibGUgPiB0Zm9vdCA+IHRyID4gdGQge1xuICAgICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7IH1cbiAgICAgIC50YWJsZS1yZXNwb25zaXZlID4gLnRhYmxlLWJvcmRlcmVkIHtcbiAgICAgICAgYm9yZGVyOiAwOyB9XG4gICAgICAgIC50YWJsZS1yZXNwb25zaXZlID4gLnRhYmxlLWJvcmRlcmVkID4gdGhlYWQgPiB0ciA+IHRoOmZpcnN0LWNoaWxkLFxuICAgICAgICAudGFibGUtcmVzcG9uc2l2ZSA+IC50YWJsZS1ib3JkZXJlZCA+IHRoZWFkID4gdHIgPiB0ZDpmaXJzdC1jaGlsZCxcbiAgICAgICAgLnRhYmxlLXJlc3BvbnNpdmUgPiAudGFibGUtYm9yZGVyZWQgPiB0Ym9keSA+IHRyID4gdGg6Zmlyc3QtY2hpbGQsXG4gICAgICAgIC50YWJsZS1yZXNwb25zaXZlID4gLnRhYmxlLWJvcmRlcmVkID4gdGJvZHkgPiB0ciA+IHRkOmZpcnN0LWNoaWxkLFxuICAgICAgICAudGFibGUtcmVzcG9uc2l2ZSA+IC50YWJsZS1ib3JkZXJlZCA+IHRmb290ID4gdHIgPiB0aDpmaXJzdC1jaGlsZCxcbiAgICAgICAgLnRhYmxlLXJlc3BvbnNpdmUgPiAudGFibGUtYm9yZGVyZWQgPiB0Zm9vdCA+IHRyID4gdGQ6Zmlyc3QtY2hpbGQge1xuICAgICAgICAgIGJvcmRlci1sZWZ0OiAwOyB9XG4gICAgICAgIC50YWJsZS1yZXNwb25zaXZlID4gLnRhYmxlLWJvcmRlcmVkID4gdGhlYWQgPiB0ciA+IHRoOmxhc3QtY2hpbGQsXG4gICAgICAgIC50YWJsZS1yZXNwb25zaXZlID4gLnRhYmxlLWJvcmRlcmVkID4gdGhlYWQgPiB0ciA+IHRkOmxhc3QtY2hpbGQsXG4gICAgICAgIC50YWJsZS1yZXNwb25zaXZlID4gLnRhYmxlLWJvcmRlcmVkID4gdGJvZHkgPiB0ciA+IHRoOmxhc3QtY2hpbGQsXG4gICAgICAgIC50YWJsZS1yZXNwb25zaXZlID4gLnRhYmxlLWJvcmRlcmVkID4gdGJvZHkgPiB0ciA+IHRkOmxhc3QtY2hpbGQsXG4gICAgICAgIC50YWJsZS1yZXNwb25zaXZlID4gLnRhYmxlLWJvcmRlcmVkID4gdGZvb3QgPiB0ciA+IHRoOmxhc3QtY2hpbGQsXG4gICAgICAgIC50YWJsZS1yZXNwb25zaXZlID4gLnRhYmxlLWJvcmRlcmVkID4gdGZvb3QgPiB0ciA+IHRkOmxhc3QtY2hpbGQge1xuICAgICAgICAgIGJvcmRlci1yaWdodDogMDsgfVxuICAgICAgICAudGFibGUtcmVzcG9uc2l2ZSA+IC50YWJsZS1ib3JkZXJlZCA+IHRib2R5ID4gdHI6bGFzdC1jaGlsZCA+IHRoLFxuICAgICAgICAudGFibGUtcmVzcG9uc2l2ZSA+IC50YWJsZS1ib3JkZXJlZCA+IHRib2R5ID4gdHI6bGFzdC1jaGlsZCA+IHRkLFxuICAgICAgICAudGFibGUtcmVzcG9uc2l2ZSA+IC50YWJsZS1ib3JkZXJlZCA+IHRmb290ID4gdHI6bGFzdC1jaGlsZCA+IHRoLFxuICAgICAgICAudGFibGUtcmVzcG9uc2l2ZSA+IC50YWJsZS1ib3JkZXJlZCA+IHRmb290ID4gdHI6bGFzdC1jaGlsZCA+IHRkIHtcbiAgICAgICAgICBib3JkZXItYm90dG9tOiAwOyB9IH1cblxuZmllbGRzZXQge1xuICBwYWRkaW5nOiAwO1xuICBtYXJnaW46IDA7XG4gIGJvcmRlcjogMDtcbiAgbWluLXdpZHRoOiAwOyB9XG5cbmxlZ2VuZCB7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICB3aWR0aDogMTAwJTtcbiAgcGFkZGluZzogMDtcbiAgbWFyZ2luLWJvdHRvbTogMjBweDtcbiAgZm9udC1zaXplOiAyMXB4O1xuICBsaW5lLWhlaWdodDogaW5oZXJpdDtcbiAgY29sb3I6ICMzMzMzMzM7XG4gIGJvcmRlcjogMDtcbiAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNlNWU1ZTU7IH1cblxubGFiZWwge1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIG1heC13aWR0aDogMTAwJTtcbiAgbWFyZ2luLWJvdHRvbTogNXB4O1xuICBmb250LXdlaWdodDogNjAwOyB9XG5cbmlucHV0W3R5cGU9XCJzZWFyY2hcIl0ge1xuICAtd2Via2l0LWJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gIC1tb3otYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDsgfVxuXG5pbnB1dFt0eXBlPVwicmFkaW9cIl0sXG5pbnB1dFt0eXBlPVwiY2hlY2tib3hcIl0ge1xuICBtYXJnaW46IDRweCAwIDA7XG4gIG1hcmdpbi10b3A6IDFweCBcXDk7XG4gIGxpbmUtaGVpZ2h0OiBub3JtYWw7IH1cblxuaW5wdXRbdHlwZT1cImZpbGVcIl0ge1xuICBkaXNwbGF5OiBibG9jazsgfVxuXG5pbnB1dFt0eXBlPVwicmFuZ2VcIl0ge1xuICBkaXNwbGF5OiBibG9jaztcbiAgd2lkdGg6IDEwMCU7IH1cblxuc2VsZWN0W211bHRpcGxlXSxcbnNlbGVjdFtzaXplXSB7XG4gIGhlaWdodDogYXV0bzsgfVxuXG5pbnB1dFt0eXBlPVwiZmlsZVwiXTpmb2N1cyxcbmlucHV0W3R5cGU9XCJyYWRpb1wiXTpmb2N1cyxcbmlucHV0W3R5cGU9XCJjaGVja2JveFwiXTpmb2N1cyB7XG4gIG91dGxpbmU6IHRoaW4gZG90dGVkO1xuICBvdXRsaW5lOiA1cHggYXV0byAtd2Via2l0LWZvY3VzLXJpbmctY29sb3I7XG4gIG91dGxpbmUtb2Zmc2V0OiAtMnB4OyB9XG5cbm91dHB1dCB7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICBwYWRkaW5nLXRvcDogN3B4O1xuICBmb250LXNpemU6IDE0cHg7XG4gIGxpbmUtaGVpZ2h0OiAxLjQyODU3MTQyOTtcbiAgY29sb3I6ICM1NTU1NTU7IH1cblxuLmZvcm0tY29udHJvbCB7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICB3aWR0aDogMTAwJTtcbiAgaGVpZ2h0OiAzNHB4O1xuICBwYWRkaW5nOiA2cHggMTJweDtcbiAgZm9udC1zaXplOiAxNHB4O1xuICBsaW5lLWhlaWdodDogMS40Mjg1NzE0Mjk7XG4gIGNvbG9yOiAjNTU1NTU1O1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xuICBiYWNrZ3JvdW5kLWltYWdlOiBub25lO1xuICBib3JkZXI6IDFweCBzb2xpZCAjY2NjO1xuICBib3JkZXItcmFkaXVzOiA0cHg7XG4gIC13ZWJraXQtYm94LXNoYWRvdzogaW5zZXQgMCAxcHggMXB4IHJnYmEoMCwgMCwgMCwgMC4wNzUpO1xuICBib3gtc2hhZG93OiBpbnNldCAwIDFweCAxcHggcmdiYSgwLCAwLCAwLCAwLjA3NSk7XG4gIC13ZWJraXQtdHJhbnNpdGlvbjogYm9yZGVyLWNvbG9yIGVhc2UtaW4tb3V0IDAuMTVzLCBib3gtc2hhZG93IGVhc2UtaW4tb3V0IDAuMTVzO1xuICAtby10cmFuc2l0aW9uOiBib3JkZXItY29sb3IgZWFzZS1pbi1vdXQgMC4xNXMsIGJveC1zaGFkb3cgZWFzZS1pbi1vdXQgMC4xNXM7XG4gIHRyYW5zaXRpb246IGJvcmRlci1jb2xvciBlYXNlLWluLW91dCAwLjE1cywgYm94LXNoYWRvdyBlYXNlLWluLW91dCAwLjE1czsgfVxuICAuZm9ybS1jb250cm9sOmZvY3VzIHtcbiAgICBib3JkZXItY29sb3I6ICM2NmFmZTk7XG4gICAgb3V0bGluZTogMDtcbiAgICAtd2Via2l0LWJveC1zaGFkb3c6IGluc2V0IDAgMXB4IDFweCByZ2JhKDAsIDAsIDAsIDAuMDc1KSwgMCAwIDhweCByZ2JhKDEwMiwgMTc1LCAyMzMsIDAuNik7XG4gICAgYm94LXNoYWRvdzogaW5zZXQgMCAxcHggMXB4IHJnYmEoMCwgMCwgMCwgMC4wNzUpLCAwIDAgOHB4IHJnYmEoMTAyLCAxNzUsIDIzMywgMC42KTsgfVxuICAuZm9ybS1jb250cm9sOjotbW96LXBsYWNlaG9sZGVyIHtcbiAgICBjb2xvcjogIzk5OTtcbiAgICBvcGFjaXR5OiAxOyB9XG4gIC5mb3JtLWNvbnRyb2w6LW1zLWlucHV0LXBsYWNlaG9sZGVyIHtcbiAgICBjb2xvcjogIzk5OTsgfVxuICAuZm9ybS1jb250cm9sOjotd2Via2l0LWlucHV0LXBsYWNlaG9sZGVyIHtcbiAgICBjb2xvcjogIzk5OTsgfVxuICAuZm9ybS1jb250cm9sW2Rpc2FibGVkXSwgLmZvcm0tY29udHJvbFtyZWFkb25seV0sXG4gIGZpZWxkc2V0W2Rpc2FibGVkXSAuZm9ybS1jb250cm9sIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZWVlZWVlO1xuICAgIG9wYWNpdHk6IDE7IH1cbiAgLmZvcm0tY29udHJvbFtkaXNhYmxlZF0sXG4gIGZpZWxkc2V0W2Rpc2FibGVkXSAuZm9ybS1jb250cm9sIHtcbiAgICBjdXJzb3I6IG5vdC1hbGxvd2VkOyB9XG5cbnRleHRhcmVhLmZvcm0tY29udHJvbCB7XG4gIGhlaWdodDogYXV0bzsgfVxuXG5pbnB1dFt0eXBlPVwic2VhcmNoXCJdIHtcbiAgLXdlYmtpdC1hcHBlYXJhbmNlOiBub25lOyB9XG5cbkBtZWRpYSBzY3JlZW4gYW5kICgtd2Via2l0LW1pbi1kZXZpY2UtcGl4ZWwtcmF0aW86IDApIHtcbiAgaW5wdXRbdHlwZT1cImRhdGVcIl0sXG4gIGlucHV0W3R5cGU9XCJ0aW1lXCJdLFxuICBpbnB1dFt0eXBlPVwiZGF0ZXRpbWUtbG9jYWxcIl0sXG4gIGlucHV0W3R5cGU9XCJtb250aFwiXSB7XG4gICAgbGluZS1oZWlnaHQ6IDM0cHg7IH1cbiAgICBpbnB1dFt0eXBlPVwiZGF0ZVwiXS5pbnB1dC1zbSwgLmlucHV0LWdyb3VwLXNtID4gaW5wdXQuZm9ybS1jb250cm9sW3R5cGU9XCJkYXRlXCJdLFxuICAgIC5pbnB1dC1ncm91cC1zbSA+IGlucHV0LmlucHV0LWdyb3VwLWFkZG9uW3R5cGU9XCJkYXRlXCJdLFxuICAgIC5pbnB1dC1ncm91cC1zbSA+IC5pbnB1dC1ncm91cC1idG4gPiBpbnB1dC5idG5bdHlwZT1cImRhdGVcIl0sXG4gICAgLmlucHV0LWdyb3VwLXNtIGlucHV0W3R5cGU9XCJkYXRlXCJdLFxuICAgIGlucHV0W3R5cGU9XCJ0aW1lXCJdLmlucHV0LXNtLFxuICAgIC5pbnB1dC1ncm91cC1zbSA+IGlucHV0LmZvcm0tY29udHJvbFt0eXBlPVwidGltZVwiXSxcbiAgICAuaW5wdXQtZ3JvdXAtc20gPiBpbnB1dC5pbnB1dC1ncm91cC1hZGRvblt0eXBlPVwidGltZVwiXSxcbiAgICAuaW5wdXQtZ3JvdXAtc20gPiAuaW5wdXQtZ3JvdXAtYnRuID4gaW5wdXQuYnRuW3R5cGU9XCJ0aW1lXCJdLFxuICAgIC5pbnB1dC1ncm91cC1zbVxuICAgIGlucHV0W3R5cGU9XCJ0aW1lXCJdLFxuICAgIGlucHV0W3R5cGU9XCJkYXRldGltZS1sb2NhbFwiXS5pbnB1dC1zbSxcbiAgICAuaW5wdXQtZ3JvdXAtc20gPiBpbnB1dC5mb3JtLWNvbnRyb2xbdHlwZT1cImRhdGV0aW1lLWxvY2FsXCJdLFxuICAgIC5pbnB1dC1ncm91cC1zbSA+IGlucHV0LmlucHV0LWdyb3VwLWFkZG9uW3R5cGU9XCJkYXRldGltZS1sb2NhbFwiXSxcbiAgICAuaW5wdXQtZ3JvdXAtc20gPiAuaW5wdXQtZ3JvdXAtYnRuID4gaW5wdXQuYnRuW3R5cGU9XCJkYXRldGltZS1sb2NhbFwiXSxcbiAgICAuaW5wdXQtZ3JvdXAtc21cbiAgICBpbnB1dFt0eXBlPVwiZGF0ZXRpbWUtbG9jYWxcIl0sXG4gICAgaW5wdXRbdHlwZT1cIm1vbnRoXCJdLmlucHV0LXNtLFxuICAgIC5pbnB1dC1ncm91cC1zbSA+IGlucHV0LmZvcm0tY29udHJvbFt0eXBlPVwibW9udGhcIl0sXG4gICAgLmlucHV0LWdyb3VwLXNtID4gaW5wdXQuaW5wdXQtZ3JvdXAtYWRkb25bdHlwZT1cIm1vbnRoXCJdLFxuICAgIC5pbnB1dC1ncm91cC1zbSA+IC5pbnB1dC1ncm91cC1idG4gPiBpbnB1dC5idG5bdHlwZT1cIm1vbnRoXCJdLFxuICAgIC5pbnB1dC1ncm91cC1zbVxuICAgIGlucHV0W3R5cGU9XCJtb250aFwiXSB7XG4gICAgICBsaW5lLWhlaWdodDogMzBweDsgfVxuICAgIGlucHV0W3R5cGU9XCJkYXRlXCJdLmlucHV0LWxnLCAuaW5wdXQtZ3JvdXAtbGcgPiBpbnB1dC5mb3JtLWNvbnRyb2xbdHlwZT1cImRhdGVcIl0sXG4gICAgLmlucHV0LWdyb3VwLWxnID4gaW5wdXQuaW5wdXQtZ3JvdXAtYWRkb25bdHlwZT1cImRhdGVcIl0sXG4gICAgLmlucHV0LWdyb3VwLWxnID4gLmlucHV0LWdyb3VwLWJ0biA+IGlucHV0LmJ0blt0eXBlPVwiZGF0ZVwiXSxcbiAgICAuaW5wdXQtZ3JvdXAtbGcgaW5wdXRbdHlwZT1cImRhdGVcIl0sXG4gICAgaW5wdXRbdHlwZT1cInRpbWVcIl0uaW5wdXQtbGcsXG4gICAgLmlucHV0LWdyb3VwLWxnID4gaW5wdXQuZm9ybS1jb250cm9sW3R5cGU9XCJ0aW1lXCJdLFxuICAgIC5pbnB1dC1ncm91cC1sZyA+IGlucHV0LmlucHV0LWdyb3VwLWFkZG9uW3R5cGU9XCJ0aW1lXCJdLFxuICAgIC5pbnB1dC1ncm91cC1sZyA+IC5pbnB1dC1ncm91cC1idG4gPiBpbnB1dC5idG5bdHlwZT1cInRpbWVcIl0sXG4gICAgLmlucHV0LWdyb3VwLWxnXG4gICAgaW5wdXRbdHlwZT1cInRpbWVcIl0sXG4gICAgaW5wdXRbdHlwZT1cImRhdGV0aW1lLWxvY2FsXCJdLmlucHV0LWxnLFxuICAgIC5pbnB1dC1ncm91cC1sZyA+IGlucHV0LmZvcm0tY29udHJvbFt0eXBlPVwiZGF0ZXRpbWUtbG9jYWxcIl0sXG4gICAgLmlucHV0LWdyb3VwLWxnID4gaW5wdXQuaW5wdXQtZ3JvdXAtYWRkb25bdHlwZT1cImRhdGV0aW1lLWxvY2FsXCJdLFxuICAgIC5pbnB1dC1ncm91cC1sZyA+IC5pbnB1dC1ncm91cC1idG4gPiBpbnB1dC5idG5bdHlwZT1cImRhdGV0aW1lLWxvY2FsXCJdLFxuICAgIC5pbnB1dC1ncm91cC1sZ1xuICAgIGlucHV0W3R5cGU9XCJkYXRldGltZS1sb2NhbFwiXSxcbiAgICBpbnB1dFt0eXBlPVwibW9udGhcIl0uaW5wdXQtbGcsXG4gICAgLmlucHV0LWdyb3VwLWxnID4gaW5wdXQuZm9ybS1jb250cm9sW3R5cGU9XCJtb250aFwiXSxcbiAgICAuaW5wdXQtZ3JvdXAtbGcgPiBpbnB1dC5pbnB1dC1ncm91cC1hZGRvblt0eXBlPVwibW9udGhcIl0sXG4gICAgLmlucHV0LWdyb3VwLWxnID4gLmlucHV0LWdyb3VwLWJ0biA+IGlucHV0LmJ0blt0eXBlPVwibW9udGhcIl0sXG4gICAgLmlucHV0LWdyb3VwLWxnXG4gICAgaW5wdXRbdHlwZT1cIm1vbnRoXCJdIHtcbiAgICAgIGxpbmUtaGVpZ2h0OiA0NnB4OyB9IH1cblxuLmZvcm0tZ3JvdXAge1xuICBtYXJnaW4tYm90dG9tOiAxNXB4OyB9XG5cbi5yYWRpbyxcbi5jaGVja2JveCB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgZGlzcGxheTogYmxvY2s7XG4gIG1hcmdpbi10b3A6IDEwcHg7XG4gIG1hcmdpbi1ib3R0b206IDEwcHg7IH1cbiAgLnJhZGlvIGxhYmVsLFxuICAuY2hlY2tib3ggbGFiZWwge1xuICAgIG1pbi1oZWlnaHQ6IDIwcHg7XG4gICAgcGFkZGluZy1sZWZ0OiAyMHB4O1xuICAgIG1hcmdpbi1ib3R0b206IDA7XG4gICAgZm9udC13ZWlnaHQ6IG5vcm1hbDtcbiAgICBjdXJzb3I6IHBvaW50ZXI7IH1cblxuLnJhZGlvIGlucHV0W3R5cGU9XCJyYWRpb1wiXSxcbi5yYWRpby1pbmxpbmUgaW5wdXRbdHlwZT1cInJhZGlvXCJdLFxuLmNoZWNrYm94IGlucHV0W3R5cGU9XCJjaGVja2JveFwiXSxcbi5jaGVja2JveC1pbmxpbmUgaW5wdXRbdHlwZT1cImNoZWNrYm94XCJdIHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICBtYXJnaW4tbGVmdDogLTIwcHg7XG4gIG1hcmdpbi10b3A6IDRweCBcXDk7IH1cblxuLnJhZGlvICsgLnJhZGlvLFxuLmNoZWNrYm94ICsgLmNoZWNrYm94IHtcbiAgbWFyZ2luLXRvcDogLTVweDsgfVxuXG4ucmFkaW8taW5saW5lLFxuLmNoZWNrYm94LWlubGluZSB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICBwYWRkaW5nLWxlZnQ6IDIwcHg7XG4gIG1hcmdpbi1ib3R0b206IDA7XG4gIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG4gIGZvbnQtd2VpZ2h0OiBub3JtYWw7XG4gIGN1cnNvcjogcG9pbnRlcjsgfVxuXG4ucmFkaW8taW5saW5lICsgLnJhZGlvLWlubGluZSxcbi5jaGVja2JveC1pbmxpbmUgKyAuY2hlY2tib3gtaW5saW5lIHtcbiAgbWFyZ2luLXRvcDogMDtcbiAgbWFyZ2luLWxlZnQ6IDEwcHg7IH1cblxuaW5wdXRbdHlwZT1cInJhZGlvXCJdW2Rpc2FibGVkXSwgaW5wdXRbdHlwZT1cInJhZGlvXCJdLmRpc2FibGVkLFxuZmllbGRzZXRbZGlzYWJsZWRdIGlucHV0W3R5cGU9XCJyYWRpb1wiXSxcbmlucHV0W3R5cGU9XCJjaGVja2JveFwiXVtkaXNhYmxlZF0sXG5pbnB1dFt0eXBlPVwiY2hlY2tib3hcIl0uZGlzYWJsZWQsXG5maWVsZHNldFtkaXNhYmxlZF1cbmlucHV0W3R5cGU9XCJjaGVja2JveFwiXSB7XG4gIGN1cnNvcjogbm90LWFsbG93ZWQ7IH1cblxuLnJhZGlvLWlubGluZS5kaXNhYmxlZCxcbmZpZWxkc2V0W2Rpc2FibGVkXSAucmFkaW8taW5saW5lLFxuLmNoZWNrYm94LWlubGluZS5kaXNhYmxlZCxcbmZpZWxkc2V0W2Rpc2FibGVkXVxuLmNoZWNrYm94LWlubGluZSB7XG4gIGN1cnNvcjogbm90LWFsbG93ZWQ7IH1cblxuLnJhZGlvLmRpc2FibGVkIGxhYmVsLFxuZmllbGRzZXRbZGlzYWJsZWRdIC5yYWRpbyBsYWJlbCxcbi5jaGVja2JveC5kaXNhYmxlZCBsYWJlbCxcbmZpZWxkc2V0W2Rpc2FibGVkXVxuLmNoZWNrYm94IGxhYmVsIHtcbiAgY3Vyc29yOiBub3QtYWxsb3dlZDsgfVxuXG4uZm9ybS1jb250cm9sLXN0YXRpYyB7XG4gIHBhZGRpbmctdG9wOiA3cHg7XG4gIHBhZGRpbmctYm90dG9tOiA3cHg7XG4gIG1hcmdpbi1ib3R0b206IDA7XG4gIG1pbi1oZWlnaHQ6IDM0cHg7IH1cbiAgLmZvcm0tY29udHJvbC1zdGF0aWMuaW5wdXQtbGcsIC5pbnB1dC1ncm91cC1sZyA+IC5mb3JtLWNvbnRyb2wtc3RhdGljLmZvcm0tY29udHJvbCxcbiAgLmlucHV0LWdyb3VwLWxnID4gLmZvcm0tY29udHJvbC1zdGF0aWMuaW5wdXQtZ3JvdXAtYWRkb24sXG4gIC5pbnB1dC1ncm91cC1sZyA+IC5pbnB1dC1ncm91cC1idG4gPiAuZm9ybS1jb250cm9sLXN0YXRpYy5idG4sIC5mb3JtLWNvbnRyb2wtc3RhdGljLmlucHV0LXNtLCAuaW5wdXQtZ3JvdXAtc20gPiAuZm9ybS1jb250cm9sLXN0YXRpYy5mb3JtLWNvbnRyb2wsXG4gIC5pbnB1dC1ncm91cC1zbSA+IC5mb3JtLWNvbnRyb2wtc3RhdGljLmlucHV0LWdyb3VwLWFkZG9uLFxuICAuaW5wdXQtZ3JvdXAtc20gPiAuaW5wdXQtZ3JvdXAtYnRuID4gLmZvcm0tY29udHJvbC1zdGF0aWMuYnRuIHtcbiAgICBwYWRkaW5nLWxlZnQ6IDA7XG4gICAgcGFkZGluZy1yaWdodDogMDsgfVxuXG4uaW5wdXQtc20sIC5pbnB1dC1ncm91cC1zbSA+IC5mb3JtLWNvbnRyb2wsXG4uaW5wdXQtZ3JvdXAtc20gPiAuaW5wdXQtZ3JvdXAtYWRkb24sXG4uaW5wdXQtZ3JvdXAtc20gPiAuaW5wdXQtZ3JvdXAtYnRuID4gLmJ0biB7XG4gIGhlaWdodDogMzBweDtcbiAgcGFkZGluZzogNXB4IDEwcHg7XG4gIGZvbnQtc2l6ZTogMTJweDtcbiAgbGluZS1oZWlnaHQ6IDEuNTtcbiAgYm9yZGVyLXJhZGl1czogM3B4OyB9XG5cbnNlbGVjdC5pbnB1dC1zbSwgLmlucHV0LWdyb3VwLXNtID4gc2VsZWN0LmZvcm0tY29udHJvbCxcbi5pbnB1dC1ncm91cC1zbSA+IHNlbGVjdC5pbnB1dC1ncm91cC1hZGRvbixcbi5pbnB1dC1ncm91cC1zbSA+IC5pbnB1dC1ncm91cC1idG4gPiBzZWxlY3QuYnRuIHtcbiAgaGVpZ2h0OiAzMHB4O1xuICBsaW5lLWhlaWdodDogMzBweDsgfVxuXG50ZXh0YXJlYS5pbnB1dC1zbSwgLmlucHV0LWdyb3VwLXNtID4gdGV4dGFyZWEuZm9ybS1jb250cm9sLFxuLmlucHV0LWdyb3VwLXNtID4gdGV4dGFyZWEuaW5wdXQtZ3JvdXAtYWRkb24sXG4uaW5wdXQtZ3JvdXAtc20gPiAuaW5wdXQtZ3JvdXAtYnRuID4gdGV4dGFyZWEuYnRuLFxuc2VsZWN0W211bHRpcGxlXS5pbnB1dC1zbSxcbi5pbnB1dC1ncm91cC1zbSA+IHNlbGVjdC5mb3JtLWNvbnRyb2xbbXVsdGlwbGVdLFxuLmlucHV0LWdyb3VwLXNtID4gc2VsZWN0LmlucHV0LWdyb3VwLWFkZG9uW211bHRpcGxlXSxcbi5pbnB1dC1ncm91cC1zbSA+IC5pbnB1dC1ncm91cC1idG4gPiBzZWxlY3QuYnRuW211bHRpcGxlXSB7XG4gIGhlaWdodDogYXV0bzsgfVxuXG4uZm9ybS1ncm91cC1zbSAuZm9ybS1jb250cm9sIHtcbiAgaGVpZ2h0OiAzMHB4O1xuICBwYWRkaW5nOiA1cHggMTBweDtcbiAgZm9udC1zaXplOiAxMnB4O1xuICBsaW5lLWhlaWdodDogMS41O1xuICBib3JkZXItcmFkaXVzOiAzcHg7IH1cblxuLmZvcm0tZ3JvdXAtc20gc2VsZWN0LmZvcm0tY29udHJvbCB7XG4gIGhlaWdodDogMzBweDtcbiAgbGluZS1oZWlnaHQ6IDMwcHg7IH1cblxuLmZvcm0tZ3JvdXAtc20gdGV4dGFyZWEuZm9ybS1jb250cm9sLFxuLmZvcm0tZ3JvdXAtc20gc2VsZWN0W211bHRpcGxlXS5mb3JtLWNvbnRyb2wge1xuICBoZWlnaHQ6IGF1dG87IH1cblxuLmZvcm0tZ3JvdXAtc20gLmZvcm0tY29udHJvbC1zdGF0aWMge1xuICBoZWlnaHQ6IDMwcHg7XG4gIHBhZGRpbmc6IDVweCAxMHB4O1xuICBmb250LXNpemU6IDEycHg7XG4gIGxpbmUtaGVpZ2h0OiAxLjU7XG4gIG1pbi1oZWlnaHQ6IDMycHg7IH1cblxuLmlucHV0LWxnLCAuaW5wdXQtZ3JvdXAtbGcgPiAuZm9ybS1jb250cm9sLFxuLmlucHV0LWdyb3VwLWxnID4gLmlucHV0LWdyb3VwLWFkZG9uLFxuLmlucHV0LWdyb3VwLWxnID4gLmlucHV0LWdyb3VwLWJ0biA+IC5idG4ge1xuICBoZWlnaHQ6IDQ2cHg7XG4gIHBhZGRpbmc6IDEwcHggMTZweDtcbiAgZm9udC1zaXplOiAxOHB4O1xuICBsaW5lLWhlaWdodDogMS4zMzMzMzMzO1xuICBib3JkZXItcmFkaXVzOiA2cHg7IH1cblxuc2VsZWN0LmlucHV0LWxnLCAuaW5wdXQtZ3JvdXAtbGcgPiBzZWxlY3QuZm9ybS1jb250cm9sLFxuLmlucHV0LWdyb3VwLWxnID4gc2VsZWN0LmlucHV0LWdyb3VwLWFkZG9uLFxuLmlucHV0LWdyb3VwLWxnID4gLmlucHV0LWdyb3VwLWJ0biA+IHNlbGVjdC5idG4ge1xuICBoZWlnaHQ6IDQ2cHg7XG4gIGxpbmUtaGVpZ2h0OiA0NnB4OyB9XG5cbnRleHRhcmVhLmlucHV0LWxnLCAuaW5wdXQtZ3JvdXAtbGcgPiB0ZXh0YXJlYS5mb3JtLWNvbnRyb2wsXG4uaW5wdXQtZ3JvdXAtbGcgPiB0ZXh0YXJlYS5pbnB1dC1ncm91cC1hZGRvbixcbi5pbnB1dC1ncm91cC1sZyA+IC5pbnB1dC1ncm91cC1idG4gPiB0ZXh0YXJlYS5idG4sXG5zZWxlY3RbbXVsdGlwbGVdLmlucHV0LWxnLFxuLmlucHV0LWdyb3VwLWxnID4gc2VsZWN0LmZvcm0tY29udHJvbFttdWx0aXBsZV0sXG4uaW5wdXQtZ3JvdXAtbGcgPiBzZWxlY3QuaW5wdXQtZ3JvdXAtYWRkb25bbXVsdGlwbGVdLFxuLmlucHV0LWdyb3VwLWxnID4gLmlucHV0LWdyb3VwLWJ0biA+IHNlbGVjdC5idG5bbXVsdGlwbGVdIHtcbiAgaGVpZ2h0OiBhdXRvOyB9XG5cbi5mb3JtLWdyb3VwLWxnIC5mb3JtLWNvbnRyb2wge1xuICBoZWlnaHQ6IDQ2cHg7XG4gIHBhZGRpbmc6IDEwcHggMTZweDtcbiAgZm9udC1zaXplOiAxOHB4O1xuICBsaW5lLWhlaWdodDogMS4zMzMzMzMzO1xuICBib3JkZXItcmFkaXVzOiA2cHg7IH1cblxuLmZvcm0tZ3JvdXAtbGcgc2VsZWN0LmZvcm0tY29udHJvbCB7XG4gIGhlaWdodDogNDZweDtcbiAgbGluZS1oZWlnaHQ6IDQ2cHg7IH1cblxuLmZvcm0tZ3JvdXAtbGcgdGV4dGFyZWEuZm9ybS1jb250cm9sLFxuLmZvcm0tZ3JvdXAtbGcgc2VsZWN0W211bHRpcGxlXS5mb3JtLWNvbnRyb2wge1xuICBoZWlnaHQ6IGF1dG87IH1cblxuLmZvcm0tZ3JvdXAtbGcgLmZvcm0tY29udHJvbC1zdGF0aWMge1xuICBoZWlnaHQ6IDQ2cHg7XG4gIHBhZGRpbmc6IDEwcHggMTZweDtcbiAgZm9udC1zaXplOiAxOHB4O1xuICBsaW5lLWhlaWdodDogMS4zMzMzMzMzO1xuICBtaW4taGVpZ2h0OiAzOHB4OyB9XG5cbi5oYXMtZmVlZGJhY2sge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7IH1cbiAgLmhhcy1mZWVkYmFjayAuZm9ybS1jb250cm9sIHtcbiAgICBwYWRkaW5nLXJpZ2h0OiA0Mi41cHg7IH1cblxuLmZvcm0tY29udHJvbC1mZWVkYmFjayB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgdG9wOiAwO1xuICByaWdodDogMDtcbiAgei1pbmRleDogMjtcbiAgZGlzcGxheTogYmxvY2s7XG4gIHdpZHRoOiAzNHB4O1xuICBoZWlnaHQ6IDM0cHg7XG4gIGxpbmUtaGVpZ2h0OiAzNHB4O1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIHBvaW50ZXItZXZlbnRzOiBub25lOyB9XG5cbi5pbnB1dC1sZyArIC5mb3JtLWNvbnRyb2wtZmVlZGJhY2ssIC5pbnB1dC1ncm91cC1sZyA+IC5mb3JtLWNvbnRyb2wgKyAuZm9ybS1jb250cm9sLWZlZWRiYWNrLCAuaW5wdXQtZ3JvdXAtbGcgPiAuaW5wdXQtZ3JvdXAtYWRkb24gKyAuZm9ybS1jb250cm9sLWZlZWRiYWNrLCAuaW5wdXQtZ3JvdXAtbGcgPiAuaW5wdXQtZ3JvdXAtYnRuID4gLmJ0biArIC5mb3JtLWNvbnRyb2wtZmVlZGJhY2sge1xuICB3aWR0aDogNDZweDtcbiAgaGVpZ2h0OiA0NnB4O1xuICBsaW5lLWhlaWdodDogNDZweDsgfVxuXG4uaW5wdXQtc20gKyAuZm9ybS1jb250cm9sLWZlZWRiYWNrLCAuaW5wdXQtZ3JvdXAtc20gPiAuZm9ybS1jb250cm9sICsgLmZvcm0tY29udHJvbC1mZWVkYmFjaywgLmlucHV0LWdyb3VwLXNtID4gLmlucHV0LWdyb3VwLWFkZG9uICsgLmZvcm0tY29udHJvbC1mZWVkYmFjaywgLmlucHV0LWdyb3VwLXNtID4gLmlucHV0LWdyb3VwLWJ0biA+IC5idG4gKyAuZm9ybS1jb250cm9sLWZlZWRiYWNrIHtcbiAgd2lkdGg6IDMwcHg7XG4gIGhlaWdodDogMzBweDtcbiAgbGluZS1oZWlnaHQ6IDMwcHg7IH1cblxuLmhhcy1zdWNjZXNzIC5oZWxwLWJsb2NrLFxuLmhhcy1zdWNjZXNzIC5jb250cm9sLWxhYmVsLFxuLmhhcy1zdWNjZXNzIC5yYWRpbyxcbi5oYXMtc3VjY2VzcyAuY2hlY2tib3gsXG4uaGFzLXN1Y2Nlc3MgLnJhZGlvLWlubGluZSxcbi5oYXMtc3VjY2VzcyAuY2hlY2tib3gtaW5saW5lLFxuLmhhcy1zdWNjZXNzLnJhZGlvIGxhYmVsLFxuLmhhcy1zdWNjZXNzLmNoZWNrYm94IGxhYmVsLFxuLmhhcy1zdWNjZXNzLnJhZGlvLWlubGluZSBsYWJlbCxcbi5oYXMtc3VjY2Vzcy5jaGVja2JveC1pbmxpbmUgbGFiZWwge1xuICBjb2xvcjogIzNjNzYzZDsgfVxuXG4uaGFzLXN1Y2Nlc3MgLmZvcm0tY29udHJvbCB7XG4gIGJvcmRlci1jb2xvcjogIzNjNzYzZDtcbiAgLXdlYmtpdC1ib3gtc2hhZG93OiBpbnNldCAwIDFweCAxcHggcmdiYSgwLCAwLCAwLCAwLjA3NSk7XG4gIGJveC1zaGFkb3c6IGluc2V0IDAgMXB4IDFweCByZ2JhKDAsIDAsIDAsIDAuMDc1KTsgfVxuICAuaGFzLXN1Y2Nlc3MgLmZvcm0tY29udHJvbDpmb2N1cyB7XG4gICAgYm9yZGVyLWNvbG9yOiAjMmI1NDJjO1xuICAgIC13ZWJraXQtYm94LXNoYWRvdzogaW5zZXQgMCAxcHggMXB4IHJnYmEoMCwgMCwgMCwgMC4wNzUpLCAwIDAgNnB4ICM2N2IxNjg7XG4gICAgYm94LXNoYWRvdzogaW5zZXQgMCAxcHggMXB4IHJnYmEoMCwgMCwgMCwgMC4wNzUpLCAwIDAgNnB4ICM2N2IxNjg7IH1cblxuLmhhcy1zdWNjZXNzIC5pbnB1dC1ncm91cC1hZGRvbiB7XG4gIGNvbG9yOiAjM2M3NjNkO1xuICBib3JkZXItY29sb3I6ICMzYzc2M2Q7XG4gIGJhY2tncm91bmQtY29sb3I6ICNkZmYwZDg7IH1cblxuLmhhcy1zdWNjZXNzIC5mb3JtLWNvbnRyb2wtZmVlZGJhY2sge1xuICBjb2xvcjogIzNjNzYzZDsgfVxuXG4uaGFzLXdhcm5pbmcgLmhlbHAtYmxvY2ssXG4uaGFzLXdhcm5pbmcgLmNvbnRyb2wtbGFiZWwsXG4uaGFzLXdhcm5pbmcgLnJhZGlvLFxuLmhhcy13YXJuaW5nIC5jaGVja2JveCxcbi5oYXMtd2FybmluZyAucmFkaW8taW5saW5lLFxuLmhhcy13YXJuaW5nIC5jaGVja2JveC1pbmxpbmUsXG4uaGFzLXdhcm5pbmcucmFkaW8gbGFiZWwsXG4uaGFzLXdhcm5pbmcuY2hlY2tib3ggbGFiZWwsXG4uaGFzLXdhcm5pbmcucmFkaW8taW5saW5lIGxhYmVsLFxuLmhhcy13YXJuaW5nLmNoZWNrYm94LWlubGluZSBsYWJlbCB7XG4gIGNvbG9yOiAjOGE2ZDNiOyB9XG5cbi5oYXMtd2FybmluZyAuZm9ybS1jb250cm9sIHtcbiAgYm9yZGVyLWNvbG9yOiAjOGE2ZDNiO1xuICAtd2Via2l0LWJveC1zaGFkb3c6IGluc2V0IDAgMXB4IDFweCByZ2JhKDAsIDAsIDAsIDAuMDc1KTtcbiAgYm94LXNoYWRvdzogaW5zZXQgMCAxcHggMXB4IHJnYmEoMCwgMCwgMCwgMC4wNzUpOyB9XG4gIC5oYXMtd2FybmluZyAuZm9ybS1jb250cm9sOmZvY3VzIHtcbiAgICBib3JkZXItY29sb3I6ICM2NjUxMmM7XG4gICAgLXdlYmtpdC1ib3gtc2hhZG93OiBpbnNldCAwIDFweCAxcHggcmdiYSgwLCAwLCAwLCAwLjA3NSksIDAgMCA2cHggI2MwYTE2YjtcbiAgICBib3gtc2hhZG93OiBpbnNldCAwIDFweCAxcHggcmdiYSgwLCAwLCAwLCAwLjA3NSksIDAgMCA2cHggI2MwYTE2YjsgfVxuXG4uaGFzLXdhcm5pbmcgLmlucHV0LWdyb3VwLWFkZG9uIHtcbiAgY29sb3I6ICM4YTZkM2I7XG4gIGJvcmRlci1jb2xvcjogIzhhNmQzYjtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZjZjhlMzsgfVxuXG4uaGFzLXdhcm5pbmcgLmZvcm0tY29udHJvbC1mZWVkYmFjayB7XG4gIGNvbG9yOiAjOGE2ZDNiOyB9XG5cbi5oYXMtZXJyb3IgLmhlbHAtYmxvY2ssXG4uaGFzLWVycm9yIC5jb250cm9sLWxhYmVsLFxuLmhhcy1lcnJvciAucmFkaW8sXG4uaGFzLWVycm9yIC5jaGVja2JveCxcbi5oYXMtZXJyb3IgLnJhZGlvLWlubGluZSxcbi5oYXMtZXJyb3IgLmNoZWNrYm94LWlubGluZSxcbi5oYXMtZXJyb3IucmFkaW8gbGFiZWwsXG4uaGFzLWVycm9yLmNoZWNrYm94IGxhYmVsLFxuLmhhcy1lcnJvci5yYWRpby1pbmxpbmUgbGFiZWwsXG4uaGFzLWVycm9yLmNoZWNrYm94LWlubGluZSBsYWJlbCB7XG4gIGNvbG9yOiAjYTk0NDQyOyB9XG5cbi5oYXMtZXJyb3IgLmZvcm0tY29udHJvbCB7XG4gIGJvcmRlci1jb2xvcjogI2E5NDQ0MjtcbiAgLXdlYmtpdC1ib3gtc2hhZG93OiBpbnNldCAwIDFweCAxcHggcmdiYSgwLCAwLCAwLCAwLjA3NSk7XG4gIGJveC1zaGFkb3c6IGluc2V0IDAgMXB4IDFweCByZ2JhKDAsIDAsIDAsIDAuMDc1KTsgfVxuICAuaGFzLWVycm9yIC5mb3JtLWNvbnRyb2w6Zm9jdXMge1xuICAgIGJvcmRlci1jb2xvcjogIzg0MzUzNDtcbiAgICAtd2Via2l0LWJveC1zaGFkb3c6IGluc2V0IDAgMXB4IDFweCByZ2JhKDAsIDAsIDAsIDAuMDc1KSwgMCAwIDZweCAjY2U4NDgzO1xuICAgIGJveC1zaGFkb3c6IGluc2V0IDAgMXB4IDFweCByZ2JhKDAsIDAsIDAsIDAuMDc1KSwgMCAwIDZweCAjY2U4NDgzOyB9XG5cbi5oYXMtZXJyb3IgLmlucHV0LWdyb3VwLWFkZG9uIHtcbiAgY29sb3I6ICNhOTQ0NDI7XG4gIGJvcmRlci1jb2xvcjogI2E5NDQ0MjtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2YyZGVkZTsgfVxuXG4uaGFzLWVycm9yIC5mb3JtLWNvbnRyb2wtZmVlZGJhY2sge1xuICBjb2xvcjogI2E5NDQ0MjsgfVxuXG4uaGFzLWZlZWRiYWNrIGxhYmVsIH4gLmZvcm0tY29udHJvbC1mZWVkYmFjayB7XG4gIHRvcDogMjVweDsgfVxuXG4uaGFzLWZlZWRiYWNrIGxhYmVsLnNyLW9ubHkgfiAuZm9ybS1jb250cm9sLWZlZWRiYWNrIHtcbiAgdG9wOiAwOyB9XG5cbi5oZWxwLWJsb2NrIHtcbiAgZGlzcGxheTogYmxvY2s7XG4gIG1hcmdpbi10b3A6IDVweDtcbiAgbWFyZ2luLWJvdHRvbTogMTBweDtcbiAgY29sb3I6ICM3MzczNzM7IH1cblxuQG1lZGlhIChtaW4td2lkdGg6IDc2OHB4KSB7XG4gIC5mb3JtLWlubGluZSAuZm9ybS1ncm91cCB7XG4gICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgIG1hcmdpbi1ib3R0b206IDA7XG4gICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTsgfVxuICAuZm9ybS1pbmxpbmUgLmZvcm0tY29udHJvbCB7XG4gICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgIHdpZHRoOiBhdXRvO1xuICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7IH1cbiAgLmZvcm0taW5saW5lIC5mb3JtLWNvbnRyb2wtc3RhdGljIHtcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7IH1cbiAgLmZvcm0taW5saW5lIC5pbnB1dC1ncm91cCB7XG4gICAgZGlzcGxheTogaW5saW5lLXRhYmxlO1xuICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7IH1cbiAgICAuZm9ybS1pbmxpbmUgLmlucHV0LWdyb3VwIC5pbnB1dC1ncm91cC1hZGRvbixcbiAgICAuZm9ybS1pbmxpbmUgLmlucHV0LWdyb3VwIC5pbnB1dC1ncm91cC1idG4sXG4gICAgLmZvcm0taW5saW5lIC5pbnB1dC1ncm91cCAuZm9ybS1jb250cm9sIHtcbiAgICAgIHdpZHRoOiBhdXRvOyB9XG4gIC5mb3JtLWlubGluZSAuaW5wdXQtZ3JvdXAgPiAuZm9ybS1jb250cm9sIHtcbiAgICB3aWR0aDogMTAwJTsgfVxuICAuZm9ybS1pbmxpbmUgLmNvbnRyb2wtbGFiZWwge1xuICAgIG1hcmdpbi1ib3R0b206IDA7XG4gICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTsgfVxuICAuZm9ybS1pbmxpbmUgLnJhZGlvLFxuICAuZm9ybS1pbmxpbmUgLmNoZWNrYm94IHtcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgbWFyZ2luLXRvcDogMDtcbiAgICBtYXJnaW4tYm90dG9tOiAwO1xuICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7IH1cbiAgICAuZm9ybS1pbmxpbmUgLnJhZGlvIGxhYmVsLFxuICAgIC5mb3JtLWlubGluZSAuY2hlY2tib3ggbGFiZWwge1xuICAgICAgcGFkZGluZy1sZWZ0OiAwOyB9XG4gIC5mb3JtLWlubGluZSAucmFkaW8gaW5wdXRbdHlwZT1cInJhZGlvXCJdLFxuICAuZm9ybS1pbmxpbmUgLmNoZWNrYm94IGlucHV0W3R5cGU9XCJjaGVja2JveFwiXSB7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIG1hcmdpbi1sZWZ0OiAwOyB9XG4gIC5mb3JtLWlubGluZSAuaGFzLWZlZWRiYWNrIC5mb3JtLWNvbnRyb2wtZmVlZGJhY2sge1xuICAgIHRvcDogMDsgfSB9XG5cbi5mb3JtLWhvcml6b250YWwgLnJhZGlvLFxuLmZvcm0taG9yaXpvbnRhbCAuY2hlY2tib3gsXG4uZm9ybS1ob3Jpem9udGFsIC5yYWRpby1pbmxpbmUsXG4uZm9ybS1ob3Jpem9udGFsIC5jaGVja2JveC1pbmxpbmUge1xuICBtYXJnaW4tdG9wOiAwO1xuICBtYXJnaW4tYm90dG9tOiAwO1xuICBwYWRkaW5nLXRvcDogN3B4OyB9XG5cbi5mb3JtLWhvcml6b250YWwgLnJhZGlvLFxuLmZvcm0taG9yaXpvbnRhbCAuY2hlY2tib3gge1xuICBtaW4taGVpZ2h0OiAyN3B4OyB9XG5cbi5mb3JtLWhvcml6b250YWwgLmZvcm0tZ3JvdXAge1xuICBtYXJnaW4tbGVmdDogLTE1cHg7XG4gIG1hcmdpbi1yaWdodDogLTE1cHg7IH1cbiAgLmZvcm0taG9yaXpvbnRhbCAuZm9ybS1ncm91cDpiZWZvcmUsIC5mb3JtLWhvcml6b250YWwgLmZvcm0tZ3JvdXA6YWZ0ZXIge1xuICAgIGNvbnRlbnQ6IFwiIFwiO1xuICAgIGRpc3BsYXk6IHRhYmxlOyB9XG4gIC5mb3JtLWhvcml6b250YWwgLmZvcm0tZ3JvdXA6YWZ0ZXIge1xuICAgIGNsZWFyOiBib3RoOyB9XG5cbkBtZWRpYSAobWluLXdpZHRoOiA3NjhweCkge1xuICAuZm9ybS1ob3Jpem9udGFsIC5jb250cm9sLWxhYmVsIHtcbiAgICB0ZXh0LWFsaWduOiByaWdodDtcbiAgICBtYXJnaW4tYm90dG9tOiAwO1xuICAgIHBhZGRpbmctdG9wOiA3cHg7IH0gfVxuXG4uZm9ybS1ob3Jpem9udGFsIC5oYXMtZmVlZGJhY2sgLmZvcm0tY29udHJvbC1mZWVkYmFjayB7XG4gIHJpZ2h0OiAxNXB4OyB9XG5cbkBtZWRpYSAobWluLXdpZHRoOiA3NjhweCkge1xuICAuZm9ybS1ob3Jpem9udGFsIC5mb3JtLWdyb3VwLWxnIC5jb250cm9sLWxhYmVsIHtcbiAgICBwYWRkaW5nLXRvcDogMTQuMzMzMzMzcHg7IH0gfVxuXG5AbWVkaWEgKG1pbi13aWR0aDogNzY4cHgpIHtcbiAgLmZvcm0taG9yaXpvbnRhbCAuZm9ybS1ncm91cC1zbSAuY29udHJvbC1sYWJlbCB7XG4gICAgcGFkZGluZy10b3A6IDZweDsgfSB9XG5cbi5idG4ge1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIG1hcmdpbi1ib3R0b206IDA7XG4gIGZvbnQtd2VpZ2h0OiBub3JtYWw7XG4gIGZvbnQtZmFtaWx5OiBcIkVpbmFcIiwgXCJIZWx2ZXRpY2EgTmV1ZVwiLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbiAgdG91Y2gtYWN0aW9uOiBtYW5pcHVsYXRpb247XG4gIGN1cnNvcjogcG9pbnRlcjtcbiAgYmFja2dyb3VuZC1pbWFnZTogbm9uZTtcbiAgYm9yZGVyOiAxcHggc29saWQgdHJhbnNwYXJlbnQ7XG4gIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gIHBhZGRpbmc6IDZweCAxMnB4O1xuICBmb250LXNpemU6IDE0cHg7XG4gIGxpbmUtaGVpZ2h0OiAxLjQyODU3MTQyOTtcbiAgYm9yZGVyLXJhZGl1czogNHB4O1xuICAtd2Via2l0LXVzZXItc2VsZWN0OiBub25lO1xuICAtbW96LXVzZXItc2VsZWN0OiBub25lO1xuICAtbXMtdXNlci1zZWxlY3Q6IG5vbmU7XG4gIHVzZXItc2VsZWN0OiBub25lOyB9XG4gIC5idG46Zm9jdXMsIC5idG4uZm9jdXMsIC5idG46YWN0aXZlOmZvY3VzLCAuYnRuOmFjdGl2ZS5mb2N1cywgLmJ0bi5hY3RpdmU6Zm9jdXMsIC5idG4uYWN0aXZlLmZvY3VzIHtcbiAgICBvdXRsaW5lOiB0aGluIGRvdHRlZDtcbiAgICBvdXRsaW5lOiA1cHggYXV0byAtd2Via2l0LWZvY3VzLXJpbmctY29sb3I7XG4gICAgb3V0bGluZS1vZmZzZXQ6IC0ycHg7IH1cbiAgLmJ0bjpob3ZlciwgLmJ0bjpmb2N1cywgLmJ0bi5mb2N1cyB7XG4gICAgY29sb3I6ICMzMzM7XG4gICAgdGV4dC1kZWNvcmF0aW9uOiBub25lOyB9XG4gIC5idG46YWN0aXZlLCAuYnRuLmFjdGl2ZSB7XG4gICAgb3V0bGluZTogMDtcbiAgICBiYWNrZ3JvdW5kLWltYWdlOiBub25lO1xuICAgIC13ZWJraXQtYm94LXNoYWRvdzogaW5zZXQgMCAzcHggNXB4IHJnYmEoMCwgMCwgMCwgMC4xMjUpO1xuICAgIGJveC1zaGFkb3c6IGluc2V0IDAgM3B4IDVweCByZ2JhKDAsIDAsIDAsIDAuMTI1KTsgfVxuICAuYnRuLmRpc2FibGVkLCAuYnRuW2Rpc2FibGVkXSxcbiAgZmllbGRzZXRbZGlzYWJsZWRdIC5idG4ge1xuICAgIGN1cnNvcjogbm90LWFsbG93ZWQ7XG4gICAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG4gICAgb3BhY2l0eTogMC42NTtcbiAgICBmaWx0ZXI6IGFscGhhKG9wYWNpdHk9NjUpO1xuICAgIC13ZWJraXQtYm94LXNoYWRvdzogbm9uZTtcbiAgICBib3gtc2hhZG93OiBub25lOyB9XG5cbi5idG4tZGVmYXVsdCB7XG4gIGNvbG9yOiAjMzMzO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xuICBib3JkZXItY29sb3I6ICNjY2M7IH1cbiAgLmJ0bi1kZWZhdWx0OmhvdmVyLCAuYnRuLWRlZmF1bHQ6Zm9jdXMsIC5idG4tZGVmYXVsdC5mb2N1cywgLmJ0bi1kZWZhdWx0OmFjdGl2ZSwgLmJ0bi1kZWZhdWx0LmFjdGl2ZSxcbiAgLm9wZW4gPiAuYnRuLWRlZmF1bHQuZHJvcGRvd24tdG9nZ2xlIHtcbiAgICBjb2xvcjogIzMzMztcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZTZlNWU1O1xuICAgIGJvcmRlci1jb2xvcjogI2FkYWRhZDsgfVxuICAuYnRuLWRlZmF1bHQ6YWN0aXZlLCAuYnRuLWRlZmF1bHQuYWN0aXZlLFxuICAub3BlbiA+IC5idG4tZGVmYXVsdC5kcm9wZG93bi10b2dnbGUge1xuICAgIGJhY2tncm91bmQtaW1hZ2U6IG5vbmU7IH1cbiAgLmJ0bi1kZWZhdWx0LmRpc2FibGVkLCAuYnRuLWRlZmF1bHQuZGlzYWJsZWQ6aG92ZXIsIC5idG4tZGVmYXVsdC5kaXNhYmxlZDpmb2N1cywgLmJ0bi1kZWZhdWx0LmRpc2FibGVkLmZvY3VzLCAuYnRuLWRlZmF1bHQuZGlzYWJsZWQ6YWN0aXZlLCAuYnRuLWRlZmF1bHQuZGlzYWJsZWQuYWN0aXZlLCAuYnRuLWRlZmF1bHRbZGlzYWJsZWRdLCAuYnRuLWRlZmF1bHRbZGlzYWJsZWRdOmhvdmVyLCAuYnRuLWRlZmF1bHRbZGlzYWJsZWRdOmZvY3VzLCAuYnRuLWRlZmF1bHRbZGlzYWJsZWRdLmZvY3VzLCAuYnRuLWRlZmF1bHRbZGlzYWJsZWRdOmFjdGl2ZSwgLmJ0bi1kZWZhdWx0W2Rpc2FibGVkXS5hY3RpdmUsXG4gIGZpZWxkc2V0W2Rpc2FibGVkXSAuYnRuLWRlZmF1bHQsXG4gIGZpZWxkc2V0W2Rpc2FibGVkXSAuYnRuLWRlZmF1bHQ6aG92ZXIsXG4gIGZpZWxkc2V0W2Rpc2FibGVkXSAuYnRuLWRlZmF1bHQ6Zm9jdXMsXG4gIGZpZWxkc2V0W2Rpc2FibGVkXSAuYnRuLWRlZmF1bHQuZm9jdXMsXG4gIGZpZWxkc2V0W2Rpc2FibGVkXSAuYnRuLWRlZmF1bHQ6YWN0aXZlLFxuICBmaWVsZHNldFtkaXNhYmxlZF0gLmJ0bi1kZWZhdWx0LmFjdGl2ZSB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjtcbiAgICBib3JkZXItY29sb3I6ICNjY2M7IH1cbiAgLmJ0bi1kZWZhdWx0IC5iYWRnZSB7XG4gICAgY29sb3I6ICNmZmY7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogIzMzMzsgfVxuXG4uYnRuLXByaW1hcnkge1xuICBjb2xvcjogI2ZmZjtcbiAgYmFja2dyb3VuZC1jb2xvcjogIzMzN2FiNztcbiAgYm9yZGVyLWNvbG9yOiAjMmU2ZGE0OyB9XG4gIC5idG4tcHJpbWFyeTpob3ZlciwgLmJ0bi1wcmltYXJ5OmZvY3VzLCAuYnRuLXByaW1hcnkuZm9jdXMsIC5idG4tcHJpbWFyeTphY3RpdmUsIC5idG4tcHJpbWFyeS5hY3RpdmUsXG4gIC5vcGVuID4gLmJ0bi1wcmltYXJ5LmRyb3Bkb3duLXRvZ2dsZSB7XG4gICAgY29sb3I6ICNmZmY7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogIzI4NjA5MDtcbiAgICBib3JkZXItY29sb3I6ICMyMDRkNzQ7IH1cbiAgLmJ0bi1wcmltYXJ5OmFjdGl2ZSwgLmJ0bi1wcmltYXJ5LmFjdGl2ZSxcbiAgLm9wZW4gPiAuYnRuLXByaW1hcnkuZHJvcGRvd24tdG9nZ2xlIHtcbiAgICBiYWNrZ3JvdW5kLWltYWdlOiBub25lOyB9XG4gIC5idG4tcHJpbWFyeS5kaXNhYmxlZCwgLmJ0bi1wcmltYXJ5LmRpc2FibGVkOmhvdmVyLCAuYnRuLXByaW1hcnkuZGlzYWJsZWQ6Zm9jdXMsIC5idG4tcHJpbWFyeS5kaXNhYmxlZC5mb2N1cywgLmJ0bi1wcmltYXJ5LmRpc2FibGVkOmFjdGl2ZSwgLmJ0bi1wcmltYXJ5LmRpc2FibGVkLmFjdGl2ZSwgLmJ0bi1wcmltYXJ5W2Rpc2FibGVkXSwgLmJ0bi1wcmltYXJ5W2Rpc2FibGVkXTpob3ZlciwgLmJ0bi1wcmltYXJ5W2Rpc2FibGVkXTpmb2N1cywgLmJ0bi1wcmltYXJ5W2Rpc2FibGVkXS5mb2N1cywgLmJ0bi1wcmltYXJ5W2Rpc2FibGVkXTphY3RpdmUsIC5idG4tcHJpbWFyeVtkaXNhYmxlZF0uYWN0aXZlLFxuICBmaWVsZHNldFtkaXNhYmxlZF0gLmJ0bi1wcmltYXJ5LFxuICBmaWVsZHNldFtkaXNhYmxlZF0gLmJ0bi1wcmltYXJ5OmhvdmVyLFxuICBmaWVsZHNldFtkaXNhYmxlZF0gLmJ0bi1wcmltYXJ5OmZvY3VzLFxuICBmaWVsZHNldFtkaXNhYmxlZF0gLmJ0bi1wcmltYXJ5LmZvY3VzLFxuICBmaWVsZHNldFtkaXNhYmxlZF0gLmJ0bi1wcmltYXJ5OmFjdGl2ZSxcbiAgZmllbGRzZXRbZGlzYWJsZWRdIC5idG4tcHJpbWFyeS5hY3RpdmUge1xuICAgIGJhY2tncm91bmQtY29sb3I6ICMzMzdhYjc7XG4gICAgYm9yZGVyLWNvbG9yOiAjMmU2ZGE0OyB9XG4gIC5idG4tcHJpbWFyeSAuYmFkZ2Uge1xuICAgIGNvbG9yOiAjMzM3YWI3O1xuICAgIGJhY2tncm91bmQtY29sb3I6ICNmZmY7IH1cblxuLmJ0bi1zdWNjZXNzIHtcbiAgY29sb3I6ICNmZmY7XG4gIGJhY2tncm91bmQtY29sb3I6ICM1Y2I4NWM7XG4gIGJvcmRlci1jb2xvcjogIzRjYWU0YzsgfVxuICAuYnRuLXN1Y2Nlc3M6aG92ZXIsIC5idG4tc3VjY2Vzczpmb2N1cywgLmJ0bi1zdWNjZXNzLmZvY3VzLCAuYnRuLXN1Y2Nlc3M6YWN0aXZlLCAuYnRuLXN1Y2Nlc3MuYWN0aXZlLFxuICAub3BlbiA+IC5idG4tc3VjY2Vzcy5kcm9wZG93bi10b2dnbGUge1xuICAgIGNvbG9yOiAjZmZmO1xuICAgIGJhY2tncm91bmQtY29sb3I6ICM0NDlkNDQ7XG4gICAgYm9yZGVyLWNvbG9yOiAjMzk4NDM5OyB9XG4gIC5idG4tc3VjY2VzczphY3RpdmUsIC5idG4tc3VjY2Vzcy5hY3RpdmUsXG4gIC5vcGVuID4gLmJ0bi1zdWNjZXNzLmRyb3Bkb3duLXRvZ2dsZSB7XG4gICAgYmFja2dyb3VuZC1pbWFnZTogbm9uZTsgfVxuICAuYnRuLXN1Y2Nlc3MuZGlzYWJsZWQsIC5idG4tc3VjY2Vzcy5kaXNhYmxlZDpob3ZlciwgLmJ0bi1zdWNjZXNzLmRpc2FibGVkOmZvY3VzLCAuYnRuLXN1Y2Nlc3MuZGlzYWJsZWQuZm9jdXMsIC5idG4tc3VjY2Vzcy5kaXNhYmxlZDphY3RpdmUsIC5idG4tc3VjY2Vzcy5kaXNhYmxlZC5hY3RpdmUsIC5idG4tc3VjY2Vzc1tkaXNhYmxlZF0sIC5idG4tc3VjY2Vzc1tkaXNhYmxlZF06aG92ZXIsIC5idG4tc3VjY2Vzc1tkaXNhYmxlZF06Zm9jdXMsIC5idG4tc3VjY2Vzc1tkaXNhYmxlZF0uZm9jdXMsIC5idG4tc3VjY2Vzc1tkaXNhYmxlZF06YWN0aXZlLCAuYnRuLXN1Y2Nlc3NbZGlzYWJsZWRdLmFjdGl2ZSxcbiAgZmllbGRzZXRbZGlzYWJsZWRdIC5idG4tc3VjY2VzcyxcbiAgZmllbGRzZXRbZGlzYWJsZWRdIC5idG4tc3VjY2Vzczpob3ZlcixcbiAgZmllbGRzZXRbZGlzYWJsZWRdIC5idG4tc3VjY2Vzczpmb2N1cyxcbiAgZmllbGRzZXRbZGlzYWJsZWRdIC5idG4tc3VjY2Vzcy5mb2N1cyxcbiAgZmllbGRzZXRbZGlzYWJsZWRdIC5idG4tc3VjY2VzczphY3RpdmUsXG4gIGZpZWxkc2V0W2Rpc2FibGVkXSAuYnRuLXN1Y2Nlc3MuYWN0aXZlIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjNWNiODVjO1xuICAgIGJvcmRlci1jb2xvcjogIzRjYWU0YzsgfVxuICAuYnRuLXN1Y2Nlc3MgLmJhZGdlIHtcbiAgICBjb2xvcjogIzVjYjg1YztcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmOyB9XG5cbi5idG4taW5mbyB7XG4gIGNvbG9yOiAjZmZmO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjNWJjMGRlO1xuICBib3JkZXItY29sb3I6ICM0NmI4ZGE7IH1cbiAgLmJ0bi1pbmZvOmhvdmVyLCAuYnRuLWluZm86Zm9jdXMsIC5idG4taW5mby5mb2N1cywgLmJ0bi1pbmZvOmFjdGl2ZSwgLmJ0bi1pbmZvLmFjdGl2ZSxcbiAgLm9wZW4gPiAuYnRuLWluZm8uZHJvcGRvd24tdG9nZ2xlIHtcbiAgICBjb2xvcjogI2ZmZjtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjMzFiMGQ1O1xuICAgIGJvcmRlci1jb2xvcjogIzI2OWFiYzsgfVxuICAuYnRuLWluZm86YWN0aXZlLCAuYnRuLWluZm8uYWN0aXZlLFxuICAub3BlbiA+IC5idG4taW5mby5kcm9wZG93bi10b2dnbGUge1xuICAgIGJhY2tncm91bmQtaW1hZ2U6IG5vbmU7IH1cbiAgLmJ0bi1pbmZvLmRpc2FibGVkLCAuYnRuLWluZm8uZGlzYWJsZWQ6aG92ZXIsIC5idG4taW5mby5kaXNhYmxlZDpmb2N1cywgLmJ0bi1pbmZvLmRpc2FibGVkLmZvY3VzLCAuYnRuLWluZm8uZGlzYWJsZWQ6YWN0aXZlLCAuYnRuLWluZm8uZGlzYWJsZWQuYWN0aXZlLCAuYnRuLWluZm9bZGlzYWJsZWRdLCAuYnRuLWluZm9bZGlzYWJsZWRdOmhvdmVyLCAuYnRuLWluZm9bZGlzYWJsZWRdOmZvY3VzLCAuYnRuLWluZm9bZGlzYWJsZWRdLmZvY3VzLCAuYnRuLWluZm9bZGlzYWJsZWRdOmFjdGl2ZSwgLmJ0bi1pbmZvW2Rpc2FibGVkXS5hY3RpdmUsXG4gIGZpZWxkc2V0W2Rpc2FibGVkXSAuYnRuLWluZm8sXG4gIGZpZWxkc2V0W2Rpc2FibGVkXSAuYnRuLWluZm86aG92ZXIsXG4gIGZpZWxkc2V0W2Rpc2FibGVkXSAuYnRuLWluZm86Zm9jdXMsXG4gIGZpZWxkc2V0W2Rpc2FibGVkXSAuYnRuLWluZm8uZm9jdXMsXG4gIGZpZWxkc2V0W2Rpc2FibGVkXSAuYnRuLWluZm86YWN0aXZlLFxuICBmaWVsZHNldFtkaXNhYmxlZF0gLmJ0bi1pbmZvLmFjdGl2ZSB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogIzViYzBkZTtcbiAgICBib3JkZXItY29sb3I6ICM0NmI4ZGE7IH1cbiAgLmJ0bi1pbmZvIC5iYWRnZSB7XG4gICAgY29sb3I6ICM1YmMwZGU7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjsgfVxuXG4uYnRuLXdhcm5pbmcge1xuICBjb2xvcjogI2ZmZjtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2YwYWQ0ZTtcbiAgYm9yZGVyLWNvbG9yOiAjZWVhMjM2OyB9XG4gIC5idG4td2FybmluZzpob3ZlciwgLmJ0bi13YXJuaW5nOmZvY3VzLCAuYnRuLXdhcm5pbmcuZm9jdXMsIC5idG4td2FybmluZzphY3RpdmUsIC5idG4td2FybmluZy5hY3RpdmUsXG4gIC5vcGVuID4gLmJ0bi13YXJuaW5nLmRyb3Bkb3duLXRvZ2dsZSB7XG4gICAgY29sb3I6ICNmZmY7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogI2VjOTcxZjtcbiAgICBib3JkZXItY29sb3I6ICNkNTg1MTI7IH1cbiAgLmJ0bi13YXJuaW5nOmFjdGl2ZSwgLmJ0bi13YXJuaW5nLmFjdGl2ZSxcbiAgLm9wZW4gPiAuYnRuLXdhcm5pbmcuZHJvcGRvd24tdG9nZ2xlIHtcbiAgICBiYWNrZ3JvdW5kLWltYWdlOiBub25lOyB9XG4gIC5idG4td2FybmluZy5kaXNhYmxlZCwgLmJ0bi13YXJuaW5nLmRpc2FibGVkOmhvdmVyLCAuYnRuLXdhcm5pbmcuZGlzYWJsZWQ6Zm9jdXMsIC5idG4td2FybmluZy5kaXNhYmxlZC5mb2N1cywgLmJ0bi13YXJuaW5nLmRpc2FibGVkOmFjdGl2ZSwgLmJ0bi13YXJuaW5nLmRpc2FibGVkLmFjdGl2ZSwgLmJ0bi13YXJuaW5nW2Rpc2FibGVkXSwgLmJ0bi13YXJuaW5nW2Rpc2FibGVkXTpob3ZlciwgLmJ0bi13YXJuaW5nW2Rpc2FibGVkXTpmb2N1cywgLmJ0bi13YXJuaW5nW2Rpc2FibGVkXS5mb2N1cywgLmJ0bi13YXJuaW5nW2Rpc2FibGVkXTphY3RpdmUsIC5idG4td2FybmluZ1tkaXNhYmxlZF0uYWN0aXZlLFxuICBmaWVsZHNldFtkaXNhYmxlZF0gLmJ0bi13YXJuaW5nLFxuICBmaWVsZHNldFtkaXNhYmxlZF0gLmJ0bi13YXJuaW5nOmhvdmVyLFxuICBmaWVsZHNldFtkaXNhYmxlZF0gLmJ0bi13YXJuaW5nOmZvY3VzLFxuICBmaWVsZHNldFtkaXNhYmxlZF0gLmJ0bi13YXJuaW5nLmZvY3VzLFxuICBmaWVsZHNldFtkaXNhYmxlZF0gLmJ0bi13YXJuaW5nOmFjdGl2ZSxcbiAgZmllbGRzZXRbZGlzYWJsZWRdIC5idG4td2FybmluZy5hY3RpdmUge1xuICAgIGJhY2tncm91bmQtY29sb3I6ICNmMGFkNGU7XG4gICAgYm9yZGVyLWNvbG9yOiAjZWVhMjM2OyB9XG4gIC5idG4td2FybmluZyAuYmFkZ2Uge1xuICAgIGNvbG9yOiAjZjBhZDRlO1xuICAgIGJhY2tncm91bmQtY29sb3I6ICNmZmY7IH1cblxuLmJ0bi1kYW5nZXIge1xuICBjb2xvcjogI2ZmZjtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2Q5NTM0ZjtcbiAgYm9yZGVyLWNvbG9yOiAjZDQzZjNhOyB9XG4gIC5idG4tZGFuZ2VyOmhvdmVyLCAuYnRuLWRhbmdlcjpmb2N1cywgLmJ0bi1kYW5nZXIuZm9jdXMsIC5idG4tZGFuZ2VyOmFjdGl2ZSwgLmJ0bi1kYW5nZXIuYWN0aXZlLFxuICAub3BlbiA+IC5idG4tZGFuZ2VyLmRyb3Bkb3duLXRvZ2dsZSB7XG4gICAgY29sb3I6ICNmZmY7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogI2M5MzAyYztcbiAgICBib3JkZXItY29sb3I6ICNhYzI5MjU7IH1cbiAgLmJ0bi1kYW5nZXI6YWN0aXZlLCAuYnRuLWRhbmdlci5hY3RpdmUsXG4gIC5vcGVuID4gLmJ0bi1kYW5nZXIuZHJvcGRvd24tdG9nZ2xlIHtcbiAgICBiYWNrZ3JvdW5kLWltYWdlOiBub25lOyB9XG4gIC5idG4tZGFuZ2VyLmRpc2FibGVkLCAuYnRuLWRhbmdlci5kaXNhYmxlZDpob3ZlciwgLmJ0bi1kYW5nZXIuZGlzYWJsZWQ6Zm9jdXMsIC5idG4tZGFuZ2VyLmRpc2FibGVkLmZvY3VzLCAuYnRuLWRhbmdlci5kaXNhYmxlZDphY3RpdmUsIC5idG4tZGFuZ2VyLmRpc2FibGVkLmFjdGl2ZSwgLmJ0bi1kYW5nZXJbZGlzYWJsZWRdLCAuYnRuLWRhbmdlcltkaXNhYmxlZF06aG92ZXIsIC5idG4tZGFuZ2VyW2Rpc2FibGVkXTpmb2N1cywgLmJ0bi1kYW5nZXJbZGlzYWJsZWRdLmZvY3VzLCAuYnRuLWRhbmdlcltkaXNhYmxlZF06YWN0aXZlLCAuYnRuLWRhbmdlcltkaXNhYmxlZF0uYWN0aXZlLFxuICBmaWVsZHNldFtkaXNhYmxlZF0gLmJ0bi1kYW5nZXIsXG4gIGZpZWxkc2V0W2Rpc2FibGVkXSAuYnRuLWRhbmdlcjpob3ZlcixcbiAgZmllbGRzZXRbZGlzYWJsZWRdIC5idG4tZGFuZ2VyOmZvY3VzLFxuICBmaWVsZHNldFtkaXNhYmxlZF0gLmJ0bi1kYW5nZXIuZm9jdXMsXG4gIGZpZWxkc2V0W2Rpc2FibGVkXSAuYnRuLWRhbmdlcjphY3RpdmUsXG4gIGZpZWxkc2V0W2Rpc2FibGVkXSAuYnRuLWRhbmdlci5hY3RpdmUge1xuICAgIGJhY2tncm91bmQtY29sb3I6ICNkOTUzNGY7XG4gICAgYm9yZGVyLWNvbG9yOiAjZDQzZjNhOyB9XG4gIC5idG4tZGFuZ2VyIC5iYWRnZSB7XG4gICAgY29sb3I6ICNkOTUzNGY7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjsgfVxuXG4uYnRuLWxpbmsge1xuICBjb2xvcjogIzMzN2FiNztcbiAgZm9udC13ZWlnaHQ6IG5vcm1hbDtcbiAgYm9yZGVyLXJhZGl1czogMDsgfVxuICAuYnRuLWxpbmssIC5idG4tbGluazphY3RpdmUsIC5idG4tbGluay5hY3RpdmUsIC5idG4tbGlua1tkaXNhYmxlZF0sXG4gIGZpZWxkc2V0W2Rpc2FibGVkXSAuYnRuLWxpbmsge1xuICAgIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xuICAgIC13ZWJraXQtYm94LXNoYWRvdzogbm9uZTtcbiAgICBib3gtc2hhZG93OiBub25lOyB9XG4gIC5idG4tbGluaywgLmJ0bi1saW5rOmhvdmVyLCAuYnRuLWxpbms6Zm9jdXMsIC5idG4tbGluazphY3RpdmUge1xuICAgIGJvcmRlci1jb2xvcjogdHJhbnNwYXJlbnQ7IH1cbiAgLmJ0bi1saW5rOmhvdmVyLCAuYnRuLWxpbms6Zm9jdXMge1xuICAgIGNvbG9yOiAjMjM1MjdjO1xuICAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1xuICAgIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50OyB9XG4gIC5idG4tbGlua1tkaXNhYmxlZF06aG92ZXIsIC5idG4tbGlua1tkaXNhYmxlZF06Zm9jdXMsXG4gIGZpZWxkc2V0W2Rpc2FibGVkXSAuYnRuLWxpbms6aG92ZXIsXG4gIGZpZWxkc2V0W2Rpc2FibGVkXSAuYnRuLWxpbms6Zm9jdXMge1xuICAgIGNvbG9yOiAjNzc3Nzc3O1xuICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTsgfVxuXG4uYnRuLWxnLCAuYnRuLWdyb3VwLWxnID4gLmJ0biB7XG4gIHBhZGRpbmc6IDEwcHggMTZweDtcbiAgZm9udC1zaXplOiAxOHB4O1xuICBsaW5lLWhlaWdodDogMS4zMzMzMzMzO1xuICBib3JkZXItcmFkaXVzOiA2cHg7IH1cblxuLmJ0bi1zbSwgLmJ0bi1ncm91cC1zbSA+IC5idG4ge1xuICBwYWRkaW5nOiA1cHggMTBweDtcbiAgZm9udC1zaXplOiAxMnB4O1xuICBsaW5lLWhlaWdodDogMS41O1xuICBib3JkZXItcmFkaXVzOiAzcHg7IH1cblxuLmJ0bi14cywgLmJ0bi1ncm91cC14cyA+IC5idG4ge1xuICBwYWRkaW5nOiAxcHggNXB4O1xuICBmb250LXNpemU6IDEycHg7XG4gIGxpbmUtaGVpZ2h0OiAxLjU7XG4gIGJvcmRlci1yYWRpdXM6IDNweDsgfVxuXG4uYnRuLWJsb2NrIHtcbiAgZGlzcGxheTogYmxvY2s7XG4gIHdpZHRoOiAxMDAlOyB9XG5cbi5idG4tYmxvY2sgKyAuYnRuLWJsb2NrIHtcbiAgbWFyZ2luLXRvcDogNXB4OyB9XG5cbmlucHV0W3R5cGU9XCJzdWJtaXRcIl0uYnRuLWJsb2NrLFxuaW5wdXRbdHlwZT1cInJlc2V0XCJdLmJ0bi1ibG9jayxcbmlucHV0W3R5cGU9XCJidXR0b25cIl0uYnRuLWJsb2NrIHtcbiAgd2lkdGg6IDEwMCU7IH1cblxuLmZhZGUge1xuICBvcGFjaXR5OiAwO1xuICAtd2Via2l0LXRyYW5zaXRpb246IG9wYWNpdHkgMC4xNXMgbGluZWFyO1xuICAtby10cmFuc2l0aW9uOiBvcGFjaXR5IDAuMTVzIGxpbmVhcjtcbiAgdHJhbnNpdGlvbjogb3BhY2l0eSAwLjE1cyBsaW5lYXI7IH1cbiAgLmZhZGUuaW4ge1xuICAgIG9wYWNpdHk6IDE7IH1cblxuLmNvbGxhcHNlIHtcbiAgZGlzcGxheTogbm9uZTsgfVxuICAuY29sbGFwc2UuaW4ge1xuICAgIGRpc3BsYXk6IGJsb2NrOyB9XG5cbnRyLmNvbGxhcHNlLmluIHtcbiAgZGlzcGxheTogdGFibGUtcm93OyB9XG5cbnRib2R5LmNvbGxhcHNlLmluIHtcbiAgZGlzcGxheTogdGFibGUtcm93LWdyb3VwOyB9XG5cbi5jb2xsYXBzaW5nIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBoZWlnaHQ6IDA7XG4gIG92ZXJmbG93OiBoaWRkZW47XG4gIC13ZWJraXQtdHJhbnNpdGlvbi1wcm9wZXJ0eTogaGVpZ2h0LCB2aXNpYmlsaXR5O1xuICB0cmFuc2l0aW9uLXByb3BlcnR5OiBoZWlnaHQsIHZpc2liaWxpdHk7XG4gIC13ZWJraXQtdHJhbnNpdGlvbi1kdXJhdGlvbjogMC4zNXM7XG4gIHRyYW5zaXRpb24tZHVyYXRpb246IDAuMzVzO1xuICAtd2Via2l0LXRyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uOiBlYXNlO1xuICB0cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbjogZWFzZTsgfVxuXG4uY2FyZXQge1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIHdpZHRoOiAwO1xuICBoZWlnaHQ6IDA7XG4gIG1hcmdpbi1sZWZ0OiAycHg7XG4gIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG4gIGJvcmRlci10b3A6IDRweCBkYXNoZWQ7XG4gIGJvcmRlci1yaWdodDogNHB4IHNvbGlkIHRyYW5zcGFyZW50O1xuICBib3JkZXItbGVmdDogNHB4IHNvbGlkIHRyYW5zcGFyZW50OyB9XG5cbi5kcm9wdXAsXG4uZHJvcGRvd24ge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7IH1cblxuLmRyb3Bkb3duLXRvZ2dsZTpmb2N1cyB7XG4gIG91dGxpbmU6IDA7IH1cblxuLmRyb3Bkb3duLW1lbnUge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHRvcDogMTAwJTtcbiAgbGVmdDogMDtcbiAgei1pbmRleDogMTAwMDtcbiAgZGlzcGxheTogbm9uZTtcbiAgZmxvYXQ6IGxlZnQ7XG4gIG1pbi13aWR0aDogMTYwcHg7XG4gIHBhZGRpbmc6IDVweCAwO1xuICBtYXJnaW46IDJweCAwIDA7XG4gIGxpc3Qtc3R5bGU6IG5vbmU7XG4gIGZvbnQtc2l6ZTogMTRweDtcbiAgdGV4dC1hbGlnbjogbGVmdDtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjtcbiAgYm9yZGVyOiAxcHggc29saWQgI2NjYztcbiAgYm9yZGVyOiAxcHggc29saWQgcmdiYSgwLCAwLCAwLCAwLjE1KTtcbiAgYm9yZGVyLXJhZGl1czogNHB4O1xuICAtd2Via2l0LWJveC1zaGFkb3c6IDAgNnB4IDEycHggcmdiYSgwLCAwLCAwLCAwLjE3NSk7XG4gIGJveC1zaGFkb3c6IDAgNnB4IDEycHggcmdiYSgwLCAwLCAwLCAwLjE3NSk7XG4gIGJhY2tncm91bmQtY2xpcDogcGFkZGluZy1ib3g7IH1cbiAgLmRyb3Bkb3duLW1lbnUucHVsbC1yaWdodCB7XG4gICAgcmlnaHQ6IDA7XG4gICAgbGVmdDogYXV0bzsgfVxuICAuZHJvcGRvd24tbWVudSAuZGl2aWRlciB7XG4gICAgaGVpZ2h0OiAxcHg7XG4gICAgbWFyZ2luOiA5cHggMDtcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgIGJhY2tncm91bmQtY29sb3I6ICNlNWU1ZTU7IH1cbiAgLmRyb3Bkb3duLW1lbnUgPiBsaSA+IGEge1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIHBhZGRpbmc6IDNweCAyMHB4O1xuICAgIGNsZWFyOiBib3RoO1xuICAgIGZvbnQtd2VpZ2h0OiBub3JtYWw7XG4gICAgbGluZS1oZWlnaHQ6IDEuNDI4NTcxNDI5O1xuICAgIGNvbG9yOiAjMzMzMzMzO1xuICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7IH1cblxuLmRyb3Bkb3duLW1lbnUgPiBsaSA+IGE6aG92ZXIsIC5kcm9wZG93bi1tZW51ID4gbGkgPiBhOmZvY3VzIHtcbiAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xuICBjb2xvcjogIzI2MjYyNjtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2Y1ZjVmNTsgfVxuXG4uZHJvcGRvd24tbWVudSA+IC5hY3RpdmUgPiBhLCAuZHJvcGRvd24tbWVudSA+IC5hY3RpdmUgPiBhOmhvdmVyLCAuZHJvcGRvd24tbWVudSA+IC5hY3RpdmUgPiBhOmZvY3VzIHtcbiAgY29sb3I6ICNmZmY7XG4gIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbiAgb3V0bGluZTogMDtcbiAgYmFja2dyb3VuZC1jb2xvcjogIzMzN2FiNzsgfVxuXG4uZHJvcGRvd24tbWVudSA+IC5kaXNhYmxlZCA+IGEsIC5kcm9wZG93bi1tZW51ID4gLmRpc2FibGVkID4gYTpob3ZlciwgLmRyb3Bkb3duLW1lbnUgPiAuZGlzYWJsZWQgPiBhOmZvY3VzIHtcbiAgY29sb3I6ICM3Nzc3Nzc7IH1cblxuLmRyb3Bkb3duLW1lbnUgPiAuZGlzYWJsZWQgPiBhOmhvdmVyLCAuZHJvcGRvd24tbWVudSA+IC5kaXNhYmxlZCA+IGE6Zm9jdXMge1xuICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG4gIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xuICBiYWNrZ3JvdW5kLWltYWdlOiBub25lO1xuICBmaWx0ZXI6IHByb2dpZDpEWEltYWdlVHJhbnNmb3JtLk1pY3Jvc29mdC5ncmFkaWVudChlbmFibGVkID0gZmFsc2UpO1xuICBjdXJzb3I6IG5vdC1hbGxvd2VkOyB9XG5cbi5vcGVuID4gLmRyb3Bkb3duLW1lbnUge1xuICBkaXNwbGF5OiBibG9jazsgfVxuXG4ub3BlbiA+IGEge1xuICBvdXRsaW5lOiAwOyB9XG5cbi5kcm9wZG93bi1tZW51LXJpZ2h0IHtcbiAgbGVmdDogYXV0bztcbiAgcmlnaHQ6IDA7IH1cblxuLmRyb3Bkb3duLW1lbnUtbGVmdCB7XG4gIGxlZnQ6IDA7XG4gIHJpZ2h0OiBhdXRvOyB9XG5cbi5kcm9wZG93bi1tZW51LWNlbnRlciB7XG4gIGxlZnQ6IDUwJTtcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC01MCUpOyB9XG5cbi5kcm9wZG93bi1oZWFkZXIge1xuICBkaXNwbGF5OiBibG9jaztcbiAgcGFkZGluZzogM3B4IDIwcHg7XG4gIGZvbnQtc2l6ZTogMTJweDtcbiAgbGluZS1oZWlnaHQ6IDEuNDI4NTcxNDI5O1xuICBjb2xvcjogIzc3Nzc3NztcbiAgd2hpdGUtc3BhY2U6IG5vd3JhcDsgfVxuXG4uZHJvcGRvd24tYmFja2Ryb3Age1xuICBwb3NpdGlvbjogZml4ZWQ7XG4gIGxlZnQ6IDA7XG4gIHJpZ2h0OiAwO1xuICBib3R0b206IDA7XG4gIHRvcDogMDtcbiAgei1pbmRleDogOTkwOyB9XG5cbi5wdWxsLXJpZ2h0ID4gLmRyb3Bkb3duLW1lbnUge1xuICByaWdodDogMDtcbiAgbGVmdDogYXV0bzsgfVxuXG4uZHJvcHVwIC5jYXJldCxcbi5uYXZiYXItZml4ZWQtYm90dG9tIC5kcm9wZG93biAuY2FyZXQge1xuICBib3JkZXItdG9wOiAwO1xuICBib3JkZXItYm90dG9tOiA0cHggc29saWQ7XG4gIGNvbnRlbnQ6IFwiXCI7IH1cblxuLmRyb3B1cCAuZHJvcGRvd24tbWVudSxcbi5uYXZiYXItZml4ZWQtYm90dG9tIC5kcm9wZG93biAuZHJvcGRvd24tbWVudSB7XG4gIHRvcDogYXV0bztcbiAgYm90dG9tOiAxMDAlO1xuICBtYXJnaW4tYm90dG9tOiAycHg7IH1cblxuQG1lZGlhIChtaW4td2lkdGg6IDc2OHB4KSB7XG4gIC5uYXZiYXItcmlnaHQgLmRyb3Bkb3duLW1lbnUge1xuICAgIHJpZ2h0OiAwO1xuICAgIGxlZnQ6IGF1dG87IH1cbiAgLm5hdmJhci1yaWdodCAuZHJvcGRvd24tbWVudS1sZWZ0IHtcbiAgICBsZWZ0OiAwO1xuICAgIHJpZ2h0OiBhdXRvOyB9IH1cblxuLmJ0bi1ncm91cCxcbi5idG4tZ3JvdXAtdmVydGljYWwge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTsgfVxuICAuYnRuLWdyb3VwID4gLmJ0bixcbiAgLmJ0bi1ncm91cC12ZXJ0aWNhbCA+IC5idG4ge1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICBmbG9hdDogbGVmdDsgfVxuICAgIC5idG4tZ3JvdXAgPiAuYnRuOmhvdmVyLCAuYnRuLWdyb3VwID4gLmJ0bjpmb2N1cywgLmJ0bi1ncm91cCA+IC5idG46YWN0aXZlLCAuYnRuLWdyb3VwID4gLmJ0bi5hY3RpdmUsXG4gICAgLmJ0bi1ncm91cC12ZXJ0aWNhbCA+IC5idG46aG92ZXIsXG4gICAgLmJ0bi1ncm91cC12ZXJ0aWNhbCA+IC5idG46Zm9jdXMsXG4gICAgLmJ0bi1ncm91cC12ZXJ0aWNhbCA+IC5idG46YWN0aXZlLFxuICAgIC5idG4tZ3JvdXAtdmVydGljYWwgPiAuYnRuLmFjdGl2ZSB7XG4gICAgICB6LWluZGV4OiAyOyB9XG5cbi5idG4tZ3JvdXAgLmJ0biArIC5idG4sXG4uYnRuLWdyb3VwIC5idG4gKyAuYnRuLWdyb3VwLFxuLmJ0bi1ncm91cCAuYnRuLWdyb3VwICsgLmJ0bixcbi5idG4tZ3JvdXAgLmJ0bi1ncm91cCArIC5idG4tZ3JvdXAge1xuICBtYXJnaW4tbGVmdDogLTFweDsgfVxuXG4uYnRuLXRvb2xiYXIge1xuICBtYXJnaW4tbGVmdDogLTVweDsgfVxuICAuYnRuLXRvb2xiYXI6YmVmb3JlLCAuYnRuLXRvb2xiYXI6YWZ0ZXIge1xuICAgIGNvbnRlbnQ6IFwiIFwiO1xuICAgIGRpc3BsYXk6IHRhYmxlOyB9XG4gIC5idG4tdG9vbGJhcjphZnRlciB7XG4gICAgY2xlYXI6IGJvdGg7IH1cbiAgLmJ0bi10b29sYmFyIC5idG4tZ3JvdXAsXG4gIC5idG4tdG9vbGJhciAuaW5wdXQtZ3JvdXAge1xuICAgIGZsb2F0OiBsZWZ0OyB9XG4gIC5idG4tdG9vbGJhciA+IC5idG4sXG4gIC5idG4tdG9vbGJhciA+IC5idG4tZ3JvdXAsXG4gIC5idG4tdG9vbGJhciA+IC5pbnB1dC1ncm91cCB7XG4gICAgbWFyZ2luLWxlZnQ6IDVweDsgfVxuXG4uYnRuLWdyb3VwID4gLmJ0bjpub3QoOmZpcnN0LWNoaWxkKTpub3QoOmxhc3QtY2hpbGQpOm5vdCguZHJvcGRvd24tdG9nZ2xlKSB7XG4gIGJvcmRlci1yYWRpdXM6IDA7IH1cblxuLmJ0bi1ncm91cCA+IC5idG46Zmlyc3QtY2hpbGQge1xuICBtYXJnaW4tbGVmdDogMDsgfVxuICAuYnRuLWdyb3VwID4gLmJ0bjpmaXJzdC1jaGlsZDpub3QoOmxhc3QtY2hpbGQpOm5vdCguZHJvcGRvd24tdG9nZ2xlKSB7XG4gICAgYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6IDA7XG4gICAgYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6IDA7IH1cblxuLmJ0bi1ncm91cCA+IC5idG46bGFzdC1jaGlsZDpub3QoOmZpcnN0LWNoaWxkKSxcbi5idG4tZ3JvdXAgPiAuZHJvcGRvd24tdG9nZ2xlOm5vdCg6Zmlyc3QtY2hpbGQpIHtcbiAgYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czogMDtcbiAgYm9yZGVyLXRvcC1sZWZ0LXJhZGl1czogMDsgfVxuXG4uYnRuLWdyb3VwID4gLmJ0bi1ncm91cCB7XG4gIGZsb2F0OiBsZWZ0OyB9XG5cbi5idG4tZ3JvdXAgPiAuYnRuLWdyb3VwOm5vdCg6Zmlyc3QtY2hpbGQpOm5vdCg6bGFzdC1jaGlsZCkgPiAuYnRuIHtcbiAgYm9yZGVyLXJhZGl1czogMDsgfVxuXG4uYnRuLWdyb3VwID4gLmJ0bi1ncm91cDpmaXJzdC1jaGlsZDpub3QoOmxhc3QtY2hpbGQpID4gLmJ0bjpsYXN0LWNoaWxkLFxuLmJ0bi1ncm91cCA+IC5idG4tZ3JvdXA6Zmlyc3QtY2hpbGQ6bm90KDpsYXN0LWNoaWxkKSA+IC5kcm9wZG93bi10b2dnbGUge1xuICBib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czogMDtcbiAgYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6IDA7IH1cblxuLmJ0bi1ncm91cCA+IC5idG4tZ3JvdXA6bGFzdC1jaGlsZDpub3QoOmZpcnN0LWNoaWxkKSA+IC5idG46Zmlyc3QtY2hpbGQge1xuICBib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOiAwO1xuICBib3JkZXItdG9wLWxlZnQtcmFkaXVzOiAwOyB9XG5cbi5idG4tZ3JvdXAgLmRyb3Bkb3duLXRvZ2dsZTphY3RpdmUsXG4uYnRuLWdyb3VwLm9wZW4gLmRyb3Bkb3duLXRvZ2dsZSB7XG4gIG91dGxpbmU6IDA7IH1cblxuLmJ0bi1ncm91cCA+IC5idG4gKyAuZHJvcGRvd24tdG9nZ2xlIHtcbiAgcGFkZGluZy1sZWZ0OiA4cHg7XG4gIHBhZGRpbmctcmlnaHQ6IDhweDsgfVxuXG4uYnRuLWdyb3VwID4gLmJ0bi1sZyArIC5kcm9wZG93bi10b2dnbGUsIC5idG4tZ3JvdXAtbGcuYnRuLWdyb3VwID4gLmJ0biArIC5kcm9wZG93bi10b2dnbGUge1xuICBwYWRkaW5nLWxlZnQ6IDEycHg7XG4gIHBhZGRpbmctcmlnaHQ6IDEycHg7IH1cblxuLmJ0bi1ncm91cC5vcGVuIC5kcm9wZG93bi10b2dnbGUge1xuICAtd2Via2l0LWJveC1zaGFkb3c6IGluc2V0IDAgM3B4IDVweCByZ2JhKDAsIDAsIDAsIDAuMTI1KTtcbiAgYm94LXNoYWRvdzogaW5zZXQgMCAzcHggNXB4IHJnYmEoMCwgMCwgMCwgMC4xMjUpOyB9XG4gIC5idG4tZ3JvdXAub3BlbiAuZHJvcGRvd24tdG9nZ2xlLmJ0bi1saW5rIHtcbiAgICAtd2Via2l0LWJveC1zaGFkb3c6IG5vbmU7XG4gICAgYm94LXNoYWRvdzogbm9uZTsgfVxuXG4uYnRuIC5jYXJldCB7XG4gIG1hcmdpbi1sZWZ0OiAwOyB9XG5cbi5idG4tbGcgLmNhcmV0LCAuYnRuLWdyb3VwLWxnID4gLmJ0biAuY2FyZXQge1xuICBib3JkZXItd2lkdGg6IDVweCA1cHggMDtcbiAgYm9yZGVyLWJvdHRvbS13aWR0aDogMDsgfVxuXG4uZHJvcHVwIC5idG4tbGcgLmNhcmV0LCAuZHJvcHVwIC5idG4tZ3JvdXAtbGcgPiAuYnRuIC5jYXJldCB7XG4gIGJvcmRlci13aWR0aDogMCA1cHggNXB4OyB9XG5cbi5idG4tZ3JvdXAtdmVydGljYWwgPiAuYnRuLFxuLmJ0bi1ncm91cC12ZXJ0aWNhbCA+IC5idG4tZ3JvdXAsXG4uYnRuLWdyb3VwLXZlcnRpY2FsID4gLmJ0bi1ncm91cCA+IC5idG4ge1xuICBkaXNwbGF5OiBibG9jaztcbiAgZmxvYXQ6IG5vbmU7XG4gIHdpZHRoOiAxMDAlO1xuICBtYXgtd2lkdGg6IDEwMCU7IH1cblxuLmJ0bi1ncm91cC12ZXJ0aWNhbCA+IC5idG4tZ3JvdXA6YmVmb3JlLCAuYnRuLWdyb3VwLXZlcnRpY2FsID4gLmJ0bi1ncm91cDphZnRlciB7XG4gIGNvbnRlbnQ6IFwiIFwiO1xuICBkaXNwbGF5OiB0YWJsZTsgfVxuXG4uYnRuLWdyb3VwLXZlcnRpY2FsID4gLmJ0bi1ncm91cDphZnRlciB7XG4gIGNsZWFyOiBib3RoOyB9XG5cbi5idG4tZ3JvdXAtdmVydGljYWwgPiAuYnRuLWdyb3VwID4gLmJ0biB7XG4gIGZsb2F0OiBub25lOyB9XG5cbi5idG4tZ3JvdXAtdmVydGljYWwgPiAuYnRuICsgLmJ0bixcbi5idG4tZ3JvdXAtdmVydGljYWwgPiAuYnRuICsgLmJ0bi1ncm91cCxcbi5idG4tZ3JvdXAtdmVydGljYWwgPiAuYnRuLWdyb3VwICsgLmJ0bixcbi5idG4tZ3JvdXAtdmVydGljYWwgPiAuYnRuLWdyb3VwICsgLmJ0bi1ncm91cCB7XG4gIG1hcmdpbi10b3A6IC0xcHg7XG4gIG1hcmdpbi1sZWZ0OiAwOyB9XG5cbi5idG4tZ3JvdXAtdmVydGljYWwgPiAuYnRuOm5vdCg6Zmlyc3QtY2hpbGQpOm5vdCg6bGFzdC1jaGlsZCkge1xuICBib3JkZXItcmFkaXVzOiAwOyB9XG5cbi5idG4tZ3JvdXAtdmVydGljYWwgPiAuYnRuOmZpcnN0LWNoaWxkOm5vdCg6bGFzdC1jaGlsZCkge1xuICBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogNHB4O1xuICBib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czogMDtcbiAgYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czogMDsgfVxuXG4uYnRuLWdyb3VwLXZlcnRpY2FsID4gLmJ0bjpsYXN0LWNoaWxkOm5vdCg6Zmlyc3QtY2hpbGQpIHtcbiAgYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czogNHB4O1xuICBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogMDtcbiAgYm9yZGVyLXRvcC1sZWZ0LXJhZGl1czogMDsgfVxuXG4uYnRuLWdyb3VwLXZlcnRpY2FsID4gLmJ0bi1ncm91cDpub3QoOmZpcnN0LWNoaWxkKTpub3QoOmxhc3QtY2hpbGQpID4gLmJ0biB7XG4gIGJvcmRlci1yYWRpdXM6IDA7IH1cblxuLmJ0bi1ncm91cC12ZXJ0aWNhbCA+IC5idG4tZ3JvdXA6Zmlyc3QtY2hpbGQ6bm90KDpsYXN0LWNoaWxkKSA+IC5idG46bGFzdC1jaGlsZCxcbi5idG4tZ3JvdXAtdmVydGljYWwgPiAuYnRuLWdyb3VwOmZpcnN0LWNoaWxkOm5vdCg6bGFzdC1jaGlsZCkgPiAuZHJvcGRvd24tdG9nZ2xlIHtcbiAgYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6IDA7XG4gIGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6IDA7IH1cblxuLmJ0bi1ncm91cC12ZXJ0aWNhbCA+IC5idG4tZ3JvdXA6bGFzdC1jaGlsZDpub3QoOmZpcnN0LWNoaWxkKSA+IC5idG46Zmlyc3QtY2hpbGQge1xuICBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogMDtcbiAgYm9yZGVyLXRvcC1sZWZ0LXJhZGl1czogMDsgfVxuXG4uYnRuLWdyb3VwLWp1c3RpZmllZCB7XG4gIGRpc3BsYXk6IHRhYmxlO1xuICB3aWR0aDogMTAwJTtcbiAgdGFibGUtbGF5b3V0OiBmaXhlZDtcbiAgYm9yZGVyLWNvbGxhcHNlOiBzZXBhcmF0ZTsgfVxuICAuYnRuLWdyb3VwLWp1c3RpZmllZCA+IC5idG4sXG4gIC5idG4tZ3JvdXAtanVzdGlmaWVkID4gLmJ0bi1ncm91cCB7XG4gICAgZmxvYXQ6IG5vbmU7XG4gICAgZGlzcGxheTogdGFibGUtY2VsbDtcbiAgICB3aWR0aDogMSU7IH1cbiAgLmJ0bi1ncm91cC1qdXN0aWZpZWQgPiAuYnRuLWdyb3VwIC5idG4ge1xuICAgIHdpZHRoOiAxMDAlOyB9XG4gIC5idG4tZ3JvdXAtanVzdGlmaWVkID4gLmJ0bi1ncm91cCAuZHJvcGRvd24tbWVudSB7XG4gICAgbGVmdDogYXV0bzsgfVxuXG5bZGF0YS10b2dnbGU9XCJidXR0b25zXCJdID4gLmJ0biBpbnB1dFt0eXBlPVwicmFkaW9cIl0sXG5bZGF0YS10b2dnbGU9XCJidXR0b25zXCJdID4gLmJ0biBpbnB1dFt0eXBlPVwiY2hlY2tib3hcIl0sXG5bZGF0YS10b2dnbGU9XCJidXR0b25zXCJdID4gLmJ0bi1ncm91cCA+IC5idG4gaW5wdXRbdHlwZT1cInJhZGlvXCJdLFxuW2RhdGEtdG9nZ2xlPVwiYnV0dG9uc1wiXSA+IC5idG4tZ3JvdXAgPiAuYnRuIGlucHV0W3R5cGU9XCJjaGVja2JveFwiXSB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgY2xpcDogcmVjdCgwLCAwLCAwLCAwKTtcbiAgcG9pbnRlci1ldmVudHM6IG5vbmU7IH1cblxuLmlucHV0LWdyb3VwIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBkaXNwbGF5OiB0YWJsZTtcbiAgYm9yZGVyLWNvbGxhcHNlOiBzZXBhcmF0ZTsgfVxuICAuaW5wdXQtZ3JvdXBbY2xhc3MqPVwiY29sLVwiXSB7XG4gICAgZmxvYXQ6IG5vbmU7XG4gICAgcGFkZGluZy1sZWZ0OiAwO1xuICAgIHBhZGRpbmctcmlnaHQ6IDA7IH1cbiAgLmlucHV0LWdyb3VwIC5mb3JtLWNvbnRyb2wge1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICB6LWluZGV4OiAyO1xuICAgIGZsb2F0OiBsZWZ0O1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIG1hcmdpbi1ib3R0b206IDA7IH1cblxuLmlucHV0LWdyb3VwLWFkZG9uLFxuLmlucHV0LWdyb3VwLWJ0bixcbi5pbnB1dC1ncm91cCAuZm9ybS1jb250cm9sIHtcbiAgZGlzcGxheTogdGFibGUtY2VsbDsgfVxuICAuaW5wdXQtZ3JvdXAtYWRkb246bm90KDpmaXJzdC1jaGlsZCk6bm90KDpsYXN0LWNoaWxkKSxcbiAgLmlucHV0LWdyb3VwLWJ0bjpub3QoOmZpcnN0LWNoaWxkKTpub3QoOmxhc3QtY2hpbGQpLFxuICAuaW5wdXQtZ3JvdXAgLmZvcm0tY29udHJvbDpub3QoOmZpcnN0LWNoaWxkKTpub3QoOmxhc3QtY2hpbGQpIHtcbiAgICBib3JkZXItcmFkaXVzOiAwOyB9XG5cbi5pbnB1dC1ncm91cC1hZGRvbixcbi5pbnB1dC1ncm91cC1idG4ge1xuICB3aWR0aDogMSU7XG4gIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7IH1cblxuLmlucHV0LWdyb3VwLWFkZG9uIHtcbiAgcGFkZGluZzogNnB4IDEycHg7XG4gIGZvbnQtc2l6ZTogMTRweDtcbiAgZm9udC13ZWlnaHQ6IG5vcm1hbDtcbiAgbGluZS1oZWlnaHQ6IDE7XG4gIGNvbG9yOiAjNTU1NTU1O1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIGJhY2tncm91bmQtY29sb3I6ICNlZWVlZWU7XG4gIGJvcmRlcjogMXB4IHNvbGlkICNjY2M7XG4gIGJvcmRlci1yYWRpdXM6IDRweDsgfVxuICAuaW5wdXQtZ3JvdXAtYWRkb24uaW5wdXQtc20sXG4gIC5pbnB1dC1ncm91cC1zbSA+IC5pbnB1dC1ncm91cC1hZGRvbixcbiAgLmlucHV0LWdyb3VwLXNtID4gLmlucHV0LWdyb3VwLWJ0biA+IC5pbnB1dC1ncm91cC1hZGRvbi5idG4ge1xuICAgIHBhZGRpbmc6IDVweCAxMHB4O1xuICAgIGZvbnQtc2l6ZTogMTJweDtcbiAgICBib3JkZXItcmFkaXVzOiAzcHg7IH1cbiAgLmlucHV0LWdyb3VwLWFkZG9uLmlucHV0LWxnLFxuICAuaW5wdXQtZ3JvdXAtbGcgPiAuaW5wdXQtZ3JvdXAtYWRkb24sXG4gIC5pbnB1dC1ncm91cC1sZyA+IC5pbnB1dC1ncm91cC1idG4gPiAuaW5wdXQtZ3JvdXAtYWRkb24uYnRuIHtcbiAgICBwYWRkaW5nOiAxMHB4IDE2cHg7XG4gICAgZm9udC1zaXplOiAxOHB4O1xuICAgIGJvcmRlci1yYWRpdXM6IDZweDsgfVxuICAuaW5wdXQtZ3JvdXAtYWRkb24gaW5wdXRbdHlwZT1cInJhZGlvXCJdLFxuICAuaW5wdXQtZ3JvdXAtYWRkb24gaW5wdXRbdHlwZT1cImNoZWNrYm94XCJdIHtcbiAgICBtYXJnaW4tdG9wOiAwOyB9XG5cbi5pbnB1dC1ncm91cCAuZm9ybS1jb250cm9sOmZpcnN0LWNoaWxkLFxuLmlucHV0LWdyb3VwLWFkZG9uOmZpcnN0LWNoaWxkLFxuLmlucHV0LWdyb3VwLWJ0bjpmaXJzdC1jaGlsZCA+IC5idG4sXG4uaW5wdXQtZ3JvdXAtYnRuOmZpcnN0LWNoaWxkID4gLmJ0bi1ncm91cCA+IC5idG4sXG4uaW5wdXQtZ3JvdXAtYnRuOmZpcnN0LWNoaWxkID4gLmRyb3Bkb3duLXRvZ2dsZSxcbi5pbnB1dC1ncm91cC1idG46bGFzdC1jaGlsZCA+IC5idG46bm90KDpsYXN0LWNoaWxkKTpub3QoLmRyb3Bkb3duLXRvZ2dsZSksXG4uaW5wdXQtZ3JvdXAtYnRuOmxhc3QtY2hpbGQgPiAuYnRuLWdyb3VwOm5vdCg6bGFzdC1jaGlsZCkgPiAuYnRuIHtcbiAgYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6IDA7XG4gIGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiAwOyB9XG5cbi5pbnB1dC1ncm91cC1hZGRvbjpmaXJzdC1jaGlsZCB7XG4gIGJvcmRlci1yaWdodDogMDsgfVxuXG4uaW5wdXQtZ3JvdXAgLmZvcm0tY29udHJvbDpsYXN0LWNoaWxkLFxuLmlucHV0LWdyb3VwLWFkZG9uOmxhc3QtY2hpbGQsXG4uaW5wdXQtZ3JvdXAtYnRuOmxhc3QtY2hpbGQgPiAuYnRuLFxuLmlucHV0LWdyb3VwLWJ0bjpsYXN0LWNoaWxkID4gLmJ0bi1ncm91cCA+IC5idG4sXG4uaW5wdXQtZ3JvdXAtYnRuOmxhc3QtY2hpbGQgPiAuZHJvcGRvd24tdG9nZ2xlLFxuLmlucHV0LWdyb3VwLWJ0bjpmaXJzdC1jaGlsZCA+IC5idG46bm90KDpmaXJzdC1jaGlsZCksXG4uaW5wdXQtZ3JvdXAtYnRuOmZpcnN0LWNoaWxkID4gLmJ0bi1ncm91cDpub3QoOmZpcnN0LWNoaWxkKSA+IC5idG4ge1xuICBib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOiAwO1xuICBib3JkZXItdG9wLWxlZnQtcmFkaXVzOiAwOyB9XG5cbi5pbnB1dC1ncm91cC1hZGRvbjpsYXN0LWNoaWxkIHtcbiAgYm9yZGVyLWxlZnQ6IDA7IH1cblxuLmlucHV0LWdyb3VwLWJ0biB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgZm9udC1zaXplOiAwO1xuICB3aGl0ZS1zcGFjZTogbm93cmFwOyB9XG4gIC5pbnB1dC1ncm91cC1idG4gPiAuYnRuIHtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7IH1cbiAgICAuaW5wdXQtZ3JvdXAtYnRuID4gLmJ0biArIC5idG4ge1xuICAgICAgbWFyZ2luLWxlZnQ6IC0xcHg7IH1cbiAgICAuaW5wdXQtZ3JvdXAtYnRuID4gLmJ0bjpob3ZlciwgLmlucHV0LWdyb3VwLWJ0biA+IC5idG46Zm9jdXMsIC5pbnB1dC1ncm91cC1idG4gPiAuYnRuOmFjdGl2ZSB7XG4gICAgICB6LWluZGV4OiAyOyB9XG4gIC5pbnB1dC1ncm91cC1idG46Zmlyc3QtY2hpbGQgPiAuYnRuLFxuICAuaW5wdXQtZ3JvdXAtYnRuOmZpcnN0LWNoaWxkID4gLmJ0bi1ncm91cCB7XG4gICAgbWFyZ2luLXJpZ2h0OiAtMXB4OyB9XG4gIC5pbnB1dC1ncm91cC1idG46bGFzdC1jaGlsZCA+IC5idG4sXG4gIC5pbnB1dC1ncm91cC1idG46bGFzdC1jaGlsZCA+IC5idG4tZ3JvdXAge1xuICAgIG1hcmdpbi1sZWZ0OiAtMXB4OyB9XG5cbi5uYXYge1xuICBtYXJnaW4tYm90dG9tOiAwO1xuICBwYWRkaW5nLWxlZnQ6IDA7XG4gIGxpc3Qtc3R5bGU6IG5vbmU7IH1cbiAgLm5hdjpiZWZvcmUsIC5uYXY6YWZ0ZXIge1xuICAgIGNvbnRlbnQ6IFwiIFwiO1xuICAgIGRpc3BsYXk6IHRhYmxlOyB9XG4gIC5uYXY6YWZ0ZXIge1xuICAgIGNsZWFyOiBib3RoOyB9XG4gIC5uYXYgPiBsaSB7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIGRpc3BsYXk6IGJsb2NrOyB9XG4gICAgLm5hdiA+IGxpID4gYSB7XG4gICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgIHBhZGRpbmc6IDEwcHggMTVweDsgfVxuICAgICAgLm5hdiA+IGxpID4gYTpob3ZlciwgLm5hdiA+IGxpID4gYTpmb2N1cyB7XG4gICAgICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2VlZWVlZTsgfVxuICAgIC5uYXYgPiBsaS5kaXNhYmxlZCA+IGEge1xuICAgICAgY29sb3I6ICM3Nzc3Nzc7IH1cbiAgICAgIC5uYXYgPiBsaS5kaXNhYmxlZCA+IGE6aG92ZXIsIC5uYXYgPiBsaS5kaXNhYmxlZCA+IGE6Zm9jdXMge1xuICAgICAgICBjb2xvcjogIzc3Nzc3NztcbiAgICAgICAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcbiAgICAgICAgY3Vyc29yOiBub3QtYWxsb3dlZDsgfVxuICAubmF2IC5vcGVuID4gYSwgLm5hdiAub3BlbiA+IGE6aG92ZXIsIC5uYXYgLm9wZW4gPiBhOmZvY3VzIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZWVlZWVlO1xuICAgIGJvcmRlci1jb2xvcjogIzMzN2FiNzsgfVxuICAubmF2IC5uYXYtZGl2aWRlciB7XG4gICAgaGVpZ2h0OiAxcHg7XG4gICAgbWFyZ2luOiA5cHggMDtcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgIGJhY2tncm91bmQtY29sb3I6ICNlNWU1ZTU7IH1cbiAgLm5hdiA+IGxpID4gYSA+IGltZyB7XG4gICAgbWF4LXdpZHRoOiBub25lOyB9XG5cbi5uYXYtdGFicyB7XG4gIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjZGRkOyB9XG4gIC5uYXYtdGFicyA+IGxpIHtcbiAgICBmbG9hdDogbGVmdDtcbiAgICBtYXJnaW4tYm90dG9tOiAtMXB4OyB9XG4gICAgLm5hdi10YWJzID4gbGkgPiBhIHtcbiAgICAgIG1hcmdpbi1yaWdodDogMnB4O1xuICAgICAgbGluZS1oZWlnaHQ6IDEuNDI4NTcxNDI5O1xuICAgICAgYm9yZGVyOiAxcHggc29saWQgdHJhbnNwYXJlbnQ7XG4gICAgICBib3JkZXItcmFkaXVzOiA0cHggNHB4IDAgMDsgfVxuICAgICAgLm5hdi10YWJzID4gbGkgPiBhOmhvdmVyIHtcbiAgICAgICAgYm9yZGVyLWNvbG9yOiAjZWVlZWVlICNlZWVlZWUgI2RkZDsgfVxuICAgIC5uYXYtdGFicyA+IGxpLmFjdGl2ZSA+IGEsIC5uYXYtdGFicyA+IGxpLmFjdGl2ZSA+IGE6aG92ZXIsIC5uYXYtdGFicyA+IGxpLmFjdGl2ZSA+IGE6Zm9jdXMge1xuICAgICAgY29sb3I6ICM1NTU1NTU7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xuICAgICAgYm9yZGVyOiAxcHggc29saWQgI2RkZDtcbiAgICAgIGJvcmRlci1ib3R0b20tY29sb3I6IHRyYW5zcGFyZW50O1xuICAgICAgY3Vyc29yOiBkZWZhdWx0OyB9XG5cbi5uYXYtcGlsbHMgPiBsaSB7XG4gIGZsb2F0OiBsZWZ0OyB9XG4gIC5uYXYtcGlsbHMgPiBsaSA+IGEge1xuICAgIGJvcmRlci1yYWRpdXM6IDRweDsgfVxuICAubmF2LXBpbGxzID4gbGkgKyBsaSB7XG4gICAgbWFyZ2luLWxlZnQ6IDJweDsgfVxuICAubmF2LXBpbGxzID4gbGkuYWN0aXZlID4gYSwgLm5hdi1waWxscyA+IGxpLmFjdGl2ZSA+IGE6aG92ZXIsIC5uYXYtcGlsbHMgPiBsaS5hY3RpdmUgPiBhOmZvY3VzIHtcbiAgICBjb2xvcjogI2ZmZjtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjMzM3YWI3OyB9XG5cbi5uYXYtc3RhY2tlZCA+IGxpIHtcbiAgZmxvYXQ6IG5vbmU7IH1cbiAgLm5hdi1zdGFja2VkID4gbGkgKyBsaSB7XG4gICAgbWFyZ2luLXRvcDogMnB4O1xuICAgIG1hcmdpbi1sZWZ0OiAwOyB9XG5cbi5uYXYtanVzdGlmaWVkLCAubmF2LXRhYnMubmF2LWp1c3RpZmllZCB7XG4gIHdpZHRoOiAxMDAlOyB9XG4gIC5uYXYtanVzdGlmaWVkID4gbGksIC5uYXYtdGFicy5uYXYtanVzdGlmaWVkID4gbGkge1xuICAgIGZsb2F0OiBub25lOyB9XG4gICAgLm5hdi1qdXN0aWZpZWQgPiBsaSA+IGEsIC5uYXYtdGFicy5uYXYtanVzdGlmaWVkID4gbGkgPiBhIHtcbiAgICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICAgIG1hcmdpbi1ib3R0b206IDVweDsgfVxuICAubmF2LWp1c3RpZmllZCA+IC5kcm9wZG93biAuZHJvcGRvd24tbWVudSB7XG4gICAgdG9wOiBhdXRvO1xuICAgIGxlZnQ6IGF1dG87IH1cbiAgQG1lZGlhIChtaW4td2lkdGg6IDc2OHB4KSB7XG4gICAgLm5hdi1qdXN0aWZpZWQgPiBsaSwgLm5hdi10YWJzLm5hdi1qdXN0aWZpZWQgPiBsaSB7XG4gICAgICBkaXNwbGF5OiB0YWJsZS1jZWxsO1xuICAgICAgd2lkdGg6IDElOyB9XG4gICAgICAubmF2LWp1c3RpZmllZCA+IGxpID4gYSwgLm5hdi10YWJzLm5hdi1qdXN0aWZpZWQgPiBsaSA+IGEge1xuICAgICAgICBtYXJnaW4tYm90dG9tOiAwOyB9IH1cblxuLm5hdi10YWJzLWp1c3RpZmllZCwgLm5hdi10YWJzLm5hdi1qdXN0aWZpZWQge1xuICBib3JkZXItYm90dG9tOiAwOyB9XG4gIC5uYXYtdGFicy1qdXN0aWZpZWQgPiBsaSA+IGEsIC5uYXYtdGFicy5uYXYtanVzdGlmaWVkID4gbGkgPiBhIHtcbiAgICBtYXJnaW4tcmlnaHQ6IDA7XG4gICAgYm9yZGVyLXJhZGl1czogNHB4OyB9XG4gIC5uYXYtdGFicy1qdXN0aWZpZWQgPiAuYWN0aXZlID4gYSwgLm5hdi10YWJzLm5hdi1qdXN0aWZpZWQgPiAuYWN0aXZlID4gYSxcbiAgLm5hdi10YWJzLWp1c3RpZmllZCA+IC5hY3RpdmUgPiBhOmhvdmVyLFxuICAubmF2LXRhYnMubmF2LWp1c3RpZmllZCA+IC5hY3RpdmUgPiBhOmhvdmVyLFxuICAubmF2LXRhYnMtanVzdGlmaWVkID4gLmFjdGl2ZSA+IGE6Zm9jdXMsXG4gIC5uYXYtdGFicy5uYXYtanVzdGlmaWVkID4gLmFjdGl2ZSA+IGE6Zm9jdXMge1xuICAgIGJvcmRlcjogMXB4IHNvbGlkICNkZGQ7IH1cbiAgQG1lZGlhIChtaW4td2lkdGg6IDc2OHB4KSB7XG4gICAgLm5hdi10YWJzLWp1c3RpZmllZCA+IGxpID4gYSwgLm5hdi10YWJzLm5hdi1qdXN0aWZpZWQgPiBsaSA+IGEge1xuICAgICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNkZGQ7XG4gICAgICBib3JkZXItcmFkaXVzOiA0cHggNHB4IDAgMDsgfVxuICAgIC5uYXYtdGFicy1qdXN0aWZpZWQgPiAuYWN0aXZlID4gYSwgLm5hdi10YWJzLm5hdi1qdXN0aWZpZWQgPiAuYWN0aXZlID4gYSxcbiAgICAubmF2LXRhYnMtanVzdGlmaWVkID4gLmFjdGl2ZSA+IGE6aG92ZXIsXG4gICAgLm5hdi10YWJzLm5hdi1qdXN0aWZpZWQgPiAuYWN0aXZlID4gYTpob3ZlcixcbiAgICAubmF2LXRhYnMtanVzdGlmaWVkID4gLmFjdGl2ZSA+IGE6Zm9jdXMsXG4gICAgLm5hdi10YWJzLm5hdi1qdXN0aWZpZWQgPiAuYWN0aXZlID4gYTpmb2N1cyB7XG4gICAgICBib3JkZXItYm90dG9tLWNvbG9yOiAjZmZmOyB9IH1cblxuLnRhYi1jb250ZW50ID4gLnRhYi1wYW5lIHtcbiAgZGlzcGxheTogbm9uZTsgfVxuXG4udGFiLWNvbnRlbnQgPiAuYWN0aXZlIHtcbiAgZGlzcGxheTogYmxvY2s7IH1cblxuLm5hdi10YWJzIC5kcm9wZG93bi1tZW51IHtcbiAgbWFyZ2luLXRvcDogLTFweDtcbiAgYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6IDA7XG4gIGJvcmRlci10b3AtbGVmdC1yYWRpdXM6IDA7IH1cblxuLm5hdmJhciB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgbWluLWhlaWdodDogNTBweDtcbiAgbWFyZ2luLWJvdHRvbTogMjBweDtcbiAgYm9yZGVyOiAxcHggc29saWQgdHJhbnNwYXJlbnQ7IH1cbiAgLm5hdmJhcjpiZWZvcmUsIC5uYXZiYXI6YWZ0ZXIge1xuICAgIGNvbnRlbnQ6IFwiIFwiO1xuICAgIGRpc3BsYXk6IHRhYmxlOyB9XG4gIC5uYXZiYXI6YWZ0ZXIge1xuICAgIGNsZWFyOiBib3RoOyB9XG4gIEBtZWRpYSAobWluLXdpZHRoOiA3NjhweCkge1xuICAgIC5uYXZiYXIge1xuICAgICAgYm9yZGVyLXJhZGl1czogNHB4OyB9IH1cblxuLm5hdmJhci1oZWFkZXI6YmVmb3JlLCAubmF2YmFyLWhlYWRlcjphZnRlciB7XG4gIGNvbnRlbnQ6IFwiIFwiO1xuICBkaXNwbGF5OiB0YWJsZTsgfVxuXG4ubmF2YmFyLWhlYWRlcjphZnRlciB7XG4gIGNsZWFyOiBib3RoOyB9XG5cbkBtZWRpYSAobWluLXdpZHRoOiA3NjhweCkge1xuICAubmF2YmFyLWhlYWRlciB7XG4gICAgZmxvYXQ6IGxlZnQ7IH0gfVxuXG4ubmF2YmFyLWNvbGxhcHNlIHtcbiAgb3ZlcmZsb3cteDogdmlzaWJsZTtcbiAgcGFkZGluZy1yaWdodDogMTVweDtcbiAgcGFkZGluZy1sZWZ0OiAxNXB4O1xuICBib3JkZXItdG9wOiAxcHggc29saWQgdHJhbnNwYXJlbnQ7XG4gIGJveC1zaGFkb3c6IGluc2V0IDAgMXB4IDAgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEpO1xuICAtd2Via2l0LW92ZXJmbG93LXNjcm9sbGluZzogdG91Y2g7IH1cbiAgLm5hdmJhci1jb2xsYXBzZTpiZWZvcmUsIC5uYXZiYXItY29sbGFwc2U6YWZ0ZXIge1xuICAgIGNvbnRlbnQ6IFwiIFwiO1xuICAgIGRpc3BsYXk6IHRhYmxlOyB9XG4gIC5uYXZiYXItY29sbGFwc2U6YWZ0ZXIge1xuICAgIGNsZWFyOiBib3RoOyB9XG4gIC5uYXZiYXItY29sbGFwc2UuaW4ge1xuICAgIG92ZXJmbG93LXk6IGF1dG87IH1cbiAgQG1lZGlhIChtaW4td2lkdGg6IDc2OHB4KSB7XG4gICAgLm5hdmJhci1jb2xsYXBzZSB7XG4gICAgICB3aWR0aDogYXV0bztcbiAgICAgIGJvcmRlci10b3A6IDA7XG4gICAgICBib3gtc2hhZG93OiBub25lOyB9XG4gICAgICAubmF2YmFyLWNvbGxhcHNlLmNvbGxhcHNlIHtcbiAgICAgICAgZGlzcGxheTogYmxvY2sgIWltcG9ydGFudDtcbiAgICAgICAgaGVpZ2h0OiBhdXRvICFpbXBvcnRhbnQ7XG4gICAgICAgIHBhZGRpbmctYm90dG9tOiAwO1xuICAgICAgICBvdmVyZmxvdzogdmlzaWJsZSAhaW1wb3J0YW50OyB9XG4gICAgICAubmF2YmFyLWNvbGxhcHNlLmluIHtcbiAgICAgICAgb3ZlcmZsb3cteTogdmlzaWJsZTsgfVxuICAgICAgLm5hdmJhci1maXhlZC10b3AgLm5hdmJhci1jb2xsYXBzZSxcbiAgICAgIC5uYXZiYXItc3RhdGljLXRvcCAubmF2YmFyLWNvbGxhcHNlLFxuICAgICAgLm5hdmJhci1maXhlZC1ib3R0b20gLm5hdmJhci1jb2xsYXBzZSB7XG4gICAgICAgIHBhZGRpbmctbGVmdDogMDtcbiAgICAgICAgcGFkZGluZy1yaWdodDogMDsgfSB9XG5cbi5uYXZiYXItZml4ZWQtdG9wIC5uYXZiYXItY29sbGFwc2UsXG4ubmF2YmFyLWZpeGVkLWJvdHRvbSAubmF2YmFyLWNvbGxhcHNlIHtcbiAgbWF4LWhlaWdodDogMzQwcHg7IH1cbiAgQG1lZGlhIChtYXgtZGV2aWNlLXdpZHRoOiA0ODBweCkgYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSB7XG4gICAgLm5hdmJhci1maXhlZC10b3AgLm5hdmJhci1jb2xsYXBzZSxcbiAgICAubmF2YmFyLWZpeGVkLWJvdHRvbSAubmF2YmFyLWNvbGxhcHNlIHtcbiAgICAgIG1heC1oZWlnaHQ6IDIwMHB4OyB9IH1cblxuLmNvbnRhaW5lciA+IC5uYXZiYXItaGVhZGVyLFxuLmNvbnRhaW5lciA+IC5uYXZiYXItY29sbGFwc2UsXG4uY29udGFpbmVyLWZsdWlkID4gLm5hdmJhci1oZWFkZXIsXG4uY29udGFpbmVyLWZsdWlkID4gLm5hdmJhci1jb2xsYXBzZSB7XG4gIG1hcmdpbi1yaWdodDogLTE1cHg7XG4gIG1hcmdpbi1sZWZ0OiAtMTVweDsgfVxuICBAbWVkaWEgKG1pbi13aWR0aDogNzY4cHgpIHtcbiAgICAuY29udGFpbmVyID4gLm5hdmJhci1oZWFkZXIsXG4gICAgLmNvbnRhaW5lciA+IC5uYXZiYXItY29sbGFwc2UsXG4gICAgLmNvbnRhaW5lci1mbHVpZCA+IC5uYXZiYXItaGVhZGVyLFxuICAgIC5jb250YWluZXItZmx1aWQgPiAubmF2YmFyLWNvbGxhcHNlIHtcbiAgICAgIG1hcmdpbi1yaWdodDogMDtcbiAgICAgIG1hcmdpbi1sZWZ0OiAwOyB9IH1cblxuLm5hdmJhci1zdGF0aWMtdG9wIHtcbiAgei1pbmRleDogMTAwMDtcbiAgYm9yZGVyLXdpZHRoOiAwIDAgMXB4OyB9XG4gIEBtZWRpYSAobWluLXdpZHRoOiA3NjhweCkge1xuICAgIC5uYXZiYXItc3RhdGljLXRvcCB7XG4gICAgICBib3JkZXItcmFkaXVzOiAwOyB9IH1cblxuLm5hdmJhci1maXhlZC10b3AsXG4ubmF2YmFyLWZpeGVkLWJvdHRvbSB7XG4gIHBvc2l0aW9uOiBmaXhlZDtcbiAgcmlnaHQ6IDA7XG4gIGxlZnQ6IDA7XG4gIHotaW5kZXg6IDEwMzA7IH1cbiAgQG1lZGlhIChtaW4td2lkdGg6IDc2OHB4KSB7XG4gICAgLm5hdmJhci1maXhlZC10b3AsXG4gICAgLm5hdmJhci1maXhlZC1ib3R0b20ge1xuICAgICAgYm9yZGVyLXJhZGl1czogMDsgfSB9XG5cbi5uYXZiYXItZml4ZWQtdG9wIHtcbiAgdG9wOiAwO1xuICBib3JkZXItd2lkdGg6IDAgMCAxcHg7IH1cblxuLm5hdmJhci1maXhlZC1ib3R0b20ge1xuICBib3R0b206IDA7XG4gIG1hcmdpbi1ib3R0b206IDA7XG4gIGJvcmRlci13aWR0aDogMXB4IDAgMDsgfVxuXG4ubmF2YmFyLWJyYW5kIHtcbiAgZmxvYXQ6IGxlZnQ7XG4gIHBhZGRpbmc6IDE1cHggMTVweDtcbiAgZm9udC1zaXplOiAxOHB4O1xuICBsaW5lLWhlaWdodDogMjBweDtcbiAgaGVpZ2h0OiA1MHB4OyB9XG4gIC5uYXZiYXItYnJhbmQ6aG92ZXIsIC5uYXZiYXItYnJhbmQ6Zm9jdXMge1xuICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTsgfVxuICAubmF2YmFyLWJyYW5kID4gaW1nIHtcbiAgICBkaXNwbGF5OiBibG9jazsgfVxuICBAbWVkaWEgKG1pbi13aWR0aDogNzY4cHgpIHtcbiAgICAubmF2YmFyID4gLmNvbnRhaW5lciAubmF2YmFyLWJyYW5kLFxuICAgIC5uYXZiYXIgPiAuY29udGFpbmVyLWZsdWlkIC5uYXZiYXItYnJhbmQge1xuICAgICAgbWFyZ2luLWxlZnQ6IC0xNXB4OyB9IH1cblxuLm5hdmJhci10b2dnbGUge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIGZsb2F0OiByaWdodDtcbiAgbWFyZ2luLXJpZ2h0OiAxNXB4O1xuICBwYWRkaW5nOiA5cHggMTBweDtcbiAgbWFyZ2luLXRvcDogOHB4O1xuICBtYXJnaW4tYm90dG9tOiA4cHg7XG4gIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xuICBiYWNrZ3JvdW5kLWltYWdlOiBub25lO1xuICBib3JkZXI6IDFweCBzb2xpZCB0cmFuc3BhcmVudDtcbiAgYm9yZGVyLXJhZGl1czogNHB4OyB9XG4gIC5uYXZiYXItdG9nZ2xlOmZvY3VzIHtcbiAgICBvdXRsaW5lOiAwOyB9XG4gIC5uYXZiYXItdG9nZ2xlIC5pY29uLWJhciB7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgd2lkdGg6IDIycHg7XG4gICAgaGVpZ2h0OiAycHg7XG4gICAgYm9yZGVyLXJhZGl1czogMXB4OyB9XG4gIC5uYXZiYXItdG9nZ2xlIC5pY29uLWJhciArIC5pY29uLWJhciB7XG4gICAgbWFyZ2luLXRvcDogNHB4OyB9XG4gIEBtZWRpYSAobWluLXdpZHRoOiA3NjhweCkge1xuICAgIC5uYXZiYXItdG9nZ2xlIHtcbiAgICAgIGRpc3BsYXk6IG5vbmU7IH0gfVxuXG4ubmF2YmFyLW5hdiB7XG4gIG1hcmdpbjogNy41cHggLTE1cHg7IH1cbiAgLm5hdmJhci1uYXYgPiBsaSA+IGEge1xuICAgIHBhZGRpbmctdG9wOiAxMHB4O1xuICAgIHBhZGRpbmctYm90dG9tOiAxMHB4O1xuICAgIGxpbmUtaGVpZ2h0OiAyMHB4OyB9XG4gIEBtZWRpYSAobWF4LXdpZHRoOiA3NjdweCkge1xuICAgIC5uYXZiYXItbmF2IC5vcGVuIC5kcm9wZG93bi1tZW51IHtcbiAgICAgIHBvc2l0aW9uOiBzdGF0aWM7XG4gICAgICBmbG9hdDogbm9uZTtcbiAgICAgIHdpZHRoOiBhdXRvO1xuICAgICAgbWFyZ2luLXRvcDogMDtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xuICAgICAgYm9yZGVyOiAwO1xuICAgICAgYm94LXNoYWRvdzogbm9uZTsgfVxuICAgICAgLm5hdmJhci1uYXYgLm9wZW4gLmRyb3Bkb3duLW1lbnUgPiBsaSA+IGEsXG4gICAgICAubmF2YmFyLW5hdiAub3BlbiAuZHJvcGRvd24tbWVudSAuZHJvcGRvd24taGVhZGVyIHtcbiAgICAgICAgcGFkZGluZzogNXB4IDE1cHggNXB4IDI1cHg7IH1cbiAgICAgIC5uYXZiYXItbmF2IC5vcGVuIC5kcm9wZG93bi1tZW51ID4gbGkgPiBhIHtcbiAgICAgICAgbGluZS1oZWlnaHQ6IDIwcHg7IH1cbiAgICAgICAgLm5hdmJhci1uYXYgLm9wZW4gLmRyb3Bkb3duLW1lbnUgPiBsaSA+IGE6aG92ZXIsIC5uYXZiYXItbmF2IC5vcGVuIC5kcm9wZG93bi1tZW51ID4gbGkgPiBhOmZvY3VzIHtcbiAgICAgICAgICBiYWNrZ3JvdW5kLWltYWdlOiBub25lOyB9IH1cbiAgQG1lZGlhIChtaW4td2lkdGg6IDc2OHB4KSB7XG4gICAgLm5hdmJhci1uYXYge1xuICAgICAgZmxvYXQ6IGxlZnQ7XG4gICAgICBtYXJnaW46IDA7IH1cbiAgICAgIC5uYXZiYXItbmF2ID4gbGkge1xuICAgICAgICBmbG9hdDogbGVmdDsgfVxuICAgICAgICAubmF2YmFyLW5hdiA+IGxpID4gYSB7XG4gICAgICAgICAgcGFkZGluZy10b3A6IDE1cHg7XG4gICAgICAgICAgcGFkZGluZy1ib3R0b206IDE1cHg7IH0gfVxuXG4ubmF2YmFyLWZvcm0ge1xuICBtYXJnaW4tbGVmdDogLTE1cHg7XG4gIG1hcmdpbi1yaWdodDogLTE1cHg7XG4gIHBhZGRpbmc6IDEwcHggMTVweDtcbiAgYm9yZGVyLXRvcDogMXB4IHNvbGlkIHRyYW5zcGFyZW50O1xuICBib3JkZXItYm90dG9tOiAxcHggc29saWQgdHJhbnNwYXJlbnQ7XG4gIC13ZWJraXQtYm94LXNoYWRvdzogaW5zZXQgMCAxcHggMCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMSksIDAgMXB4IDAgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEpO1xuICBib3gtc2hhZG93OiBpbnNldCAwIDFweCAwIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xKSwgMCAxcHggMCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMSk7XG4gIG1hcmdpbi10b3A6IDhweDtcbiAgbWFyZ2luLWJvdHRvbTogOHB4OyB9XG4gIEBtZWRpYSAobWluLXdpZHRoOiA3NjhweCkge1xuICAgIC5uYXZiYXItZm9ybSAuZm9ybS1ncm91cCB7XG4gICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgICBtYXJnaW4tYm90dG9tOiAwO1xuICAgICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTsgfVxuICAgIC5uYXZiYXItZm9ybSAuZm9ybS1jb250cm9sIHtcbiAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICAgIHdpZHRoOiBhdXRvO1xuICAgICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTsgfVxuICAgIC5uYXZiYXItZm9ybSAuZm9ybS1jb250cm9sLXN0YXRpYyB7XG4gICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7IH1cbiAgICAubmF2YmFyLWZvcm0gLmlucHV0LWdyb3VwIHtcbiAgICAgIGRpc3BsYXk6IGlubGluZS10YWJsZTtcbiAgICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7IH1cbiAgICAgIC5uYXZiYXItZm9ybSAuaW5wdXQtZ3JvdXAgLmlucHV0LWdyb3VwLWFkZG9uLFxuICAgICAgLm5hdmJhci1mb3JtIC5pbnB1dC1ncm91cCAuaW5wdXQtZ3JvdXAtYnRuLFxuICAgICAgLm5hdmJhci1mb3JtIC5pbnB1dC1ncm91cCAuZm9ybS1jb250cm9sIHtcbiAgICAgICAgd2lkdGg6IGF1dG87IH1cbiAgICAubmF2YmFyLWZvcm0gLmlucHV0LWdyb3VwID4gLmZvcm0tY29udHJvbCB7XG4gICAgICB3aWR0aDogMTAwJTsgfVxuICAgIC5uYXZiYXItZm9ybSAuY29udHJvbC1sYWJlbCB7XG4gICAgICBtYXJnaW4tYm90dG9tOiAwO1xuICAgICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTsgfVxuICAgIC5uYXZiYXItZm9ybSAucmFkaW8sXG4gICAgLm5hdmJhci1mb3JtIC5jaGVja2JveCB7XG4gICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgICBtYXJnaW4tdG9wOiAwO1xuICAgICAgbWFyZ2luLWJvdHRvbTogMDtcbiAgICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7IH1cbiAgICAgIC5uYXZiYXItZm9ybSAucmFkaW8gbGFiZWwsXG4gICAgICAubmF2YmFyLWZvcm0gLmNoZWNrYm94IGxhYmVsIHtcbiAgICAgICAgcGFkZGluZy1sZWZ0OiAwOyB9XG4gICAgLm5hdmJhci1mb3JtIC5yYWRpbyBpbnB1dFt0eXBlPVwicmFkaW9cIl0sXG4gICAgLm5hdmJhci1mb3JtIC5jaGVja2JveCBpbnB1dFt0eXBlPVwiY2hlY2tib3hcIl0ge1xuICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICAgbWFyZ2luLWxlZnQ6IDA7IH1cbiAgICAubmF2YmFyLWZvcm0gLmhhcy1mZWVkYmFjayAuZm9ybS1jb250cm9sLWZlZWRiYWNrIHtcbiAgICAgIHRvcDogMDsgfSB9XG4gIEBtZWRpYSAobWF4LXdpZHRoOiA3NjdweCkge1xuICAgIC5uYXZiYXItZm9ybSAuZm9ybS1ncm91cCB7XG4gICAgICBtYXJnaW4tYm90dG9tOiA1cHg7IH1cbiAgICAgIC5uYXZiYXItZm9ybSAuZm9ybS1ncm91cDpsYXN0LWNoaWxkIHtcbiAgICAgICAgbWFyZ2luLWJvdHRvbTogMDsgfSB9XG4gIEBtZWRpYSAobWluLXdpZHRoOiA3NjhweCkge1xuICAgIC5uYXZiYXItZm9ybSB7XG4gICAgICB3aWR0aDogYXV0bztcbiAgICAgIGJvcmRlcjogMDtcbiAgICAgIG1hcmdpbi1sZWZ0OiAwO1xuICAgICAgbWFyZ2luLXJpZ2h0OiAwO1xuICAgICAgcGFkZGluZy10b3A6IDA7XG4gICAgICBwYWRkaW5nLWJvdHRvbTogMDtcbiAgICAgIC13ZWJraXQtYm94LXNoYWRvdzogbm9uZTtcbiAgICAgIGJveC1zaGFkb3c6IG5vbmU7IH0gfVxuXG4ubmF2YmFyLW5hdiA+IGxpID4gLmRyb3Bkb3duLW1lbnUge1xuICBtYXJnaW4tdG9wOiAwO1xuICBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogMDtcbiAgYm9yZGVyLXRvcC1sZWZ0LXJhZGl1czogMDsgfVxuXG4ubmF2YmFyLWZpeGVkLWJvdHRvbSAubmF2YmFyLW5hdiA+IGxpID4gLmRyb3Bkb3duLW1lbnUge1xuICBtYXJnaW4tYm90dG9tOiAwO1xuICBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogNHB4O1xuICBib3JkZXItdG9wLWxlZnQtcmFkaXVzOiA0cHg7XG4gIGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiAwO1xuICBib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOiAwOyB9XG5cbi5uYXZiYXItYnRuIHtcbiAgbWFyZ2luLXRvcDogOHB4O1xuICBtYXJnaW4tYm90dG9tOiA4cHg7IH1cbiAgLm5hdmJhci1idG4uYnRuLXNtLCAuYnRuLWdyb3VwLXNtID4gLm5hdmJhci1idG4uYnRuIHtcbiAgICBtYXJnaW4tdG9wOiAxMHB4O1xuICAgIG1hcmdpbi1ib3R0b206IDEwcHg7IH1cbiAgLm5hdmJhci1idG4uYnRuLXhzLCAuYnRuLWdyb3VwLXhzID4gLm5hdmJhci1idG4uYnRuIHtcbiAgICBtYXJnaW4tdG9wOiAxNHB4O1xuICAgIG1hcmdpbi1ib3R0b206IDE0cHg7IH1cblxuLm5hdmJhci10ZXh0IHtcbiAgbWFyZ2luLXRvcDogMTVweDtcbiAgbWFyZ2luLWJvdHRvbTogMTVweDsgfVxuICBAbWVkaWEgKG1pbi13aWR0aDogNzY4cHgpIHtcbiAgICAubmF2YmFyLXRleHQge1xuICAgICAgZmxvYXQ6IGxlZnQ7XG4gICAgICBtYXJnaW4tbGVmdDogMTVweDtcbiAgICAgIG1hcmdpbi1yaWdodDogMTVweDsgfSB9XG5cbkBtZWRpYSAobWluLXdpZHRoOiA3NjhweCkge1xuICAubmF2YmFyLWxlZnQge1xuICAgIGZsb2F0OiBsZWZ0ICFpbXBvcnRhbnQ7IH1cbiAgLm5hdmJhci1yaWdodCB7XG4gICAgZmxvYXQ6IHJpZ2h0ICFpbXBvcnRhbnQ7XG4gICAgbWFyZ2luLXJpZ2h0OiAtMTVweDsgfVxuICAgIC5uYXZiYXItcmlnaHQgfiAubmF2YmFyLXJpZ2h0IHtcbiAgICAgIG1hcmdpbi1yaWdodDogMDsgfSB9XG5cbi5uYXZiYXItZGVmYXVsdCB7XG4gIGJhY2tncm91bmQtY29sb3I6ICM0YThiZmM7XG4gIGJvcmRlci1jb2xvcjogIzRhOGJmYzsgfVxuICAubmF2YmFyLWRlZmF1bHQgLm5hdmJhci1icmFuZCB7XG4gICAgY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC44KTsgfVxuICAgIC5uYXZiYXItZGVmYXVsdCAubmF2YmFyLWJyYW5kOmhvdmVyLCAubmF2YmFyLWRlZmF1bHQgLm5hdmJhci1icmFuZDpmb2N1cyB7XG4gICAgICBjb2xvcjogI2ZmZjtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50OyB9XG4gIC5uYXZiYXItZGVmYXVsdCAubmF2YmFyLXRleHQge1xuICAgIGNvbG9yOiAjNzc3OyB9XG4gIC5uYXZiYXItZGVmYXVsdCAubmF2YmFyLW5hdiA+IGxpID4gYSB7XG4gICAgY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC44KTsgfVxuICAgIC5uYXZiYXItZGVmYXVsdCAubmF2YmFyLW5hdiA+IGxpID4gYTpob3ZlciwgLm5hdmJhci1kZWZhdWx0IC5uYXZiYXItbmF2ID4gbGkgPiBhOmZvY3VzIHtcbiAgICAgIGNvbG9yOiAjZmZmO1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7IH1cbiAgLm5hdmJhci1kZWZhdWx0IC5uYXZiYXItbmF2ID4gLmFjdGl2ZSA+IGEsIC5uYXZiYXItZGVmYXVsdCAubmF2YmFyLW5hdiA+IC5hY3RpdmUgPiBhOmhvdmVyLCAubmF2YmFyLWRlZmF1bHQgLm5hdmJhci1uYXYgPiAuYWN0aXZlID4gYTpmb2N1cyB7XG4gICAgY29sb3I6ICNmZmY7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7IH1cbiAgLm5hdmJhci1kZWZhdWx0IC5uYXZiYXItbmF2ID4gLmRpc2FibGVkID4gYSwgLm5hdmJhci1kZWZhdWx0IC5uYXZiYXItbmF2ID4gLmRpc2FibGVkID4gYTpob3ZlciwgLm5hdmJhci1kZWZhdWx0IC5uYXZiYXItbmF2ID4gLmRpc2FibGVkID4gYTpmb2N1cyB7XG4gICAgY29sb3I6ICNjY2M7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7IH1cbiAgLm5hdmJhci1kZWZhdWx0IC5uYXZiYXItdG9nZ2xlIHtcbiAgICBib3JkZXItY29sb3I6ICNkZGQ7IH1cbiAgICAubmF2YmFyLWRlZmF1bHQgLm5hdmJhci10b2dnbGU6aG92ZXIsIC5uYXZiYXItZGVmYXVsdCAubmF2YmFyLXRvZ2dsZTpmb2N1cyB7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZGRkOyB9XG4gICAgLm5hdmJhci1kZWZhdWx0IC5uYXZiYXItdG9nZ2xlIC5pY29uLWJhciB7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjODg4OyB9XG4gIC5uYXZiYXItZGVmYXVsdCAubmF2YmFyLWNvbGxhcHNlLFxuICAubmF2YmFyLWRlZmF1bHQgLm5hdmJhci1mb3JtIHtcbiAgICBib3JkZXItY29sb3I6ICM0YThiZmM7IH1cbiAgLm5hdmJhci1kZWZhdWx0IC5uYXZiYXItbmF2ID4gLm9wZW4gPiBhLCAubmF2YmFyLWRlZmF1bHQgLm5hdmJhci1uYXYgPiAub3BlbiA+IGE6aG92ZXIsIC5uYXZiYXItZGVmYXVsdCAubmF2YmFyLW5hdiA+IC5vcGVuID4gYTpmb2N1cyB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7XG4gICAgY29sb3I6ICNmZmY7IH1cbiAgQG1lZGlhIChtYXgtd2lkdGg6IDc2N3B4KSB7XG4gICAgLm5hdmJhci1kZWZhdWx0IC5uYXZiYXItbmF2IC5vcGVuIC5kcm9wZG93bi1tZW51ID4gbGkgPiBhIHtcbiAgICAgIGNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuOCk7IH1cbiAgICAgIC5uYXZiYXItZGVmYXVsdCAubmF2YmFyLW5hdiAub3BlbiAuZHJvcGRvd24tbWVudSA+IGxpID4gYTpob3ZlciwgLm5hdmJhci1kZWZhdWx0IC5uYXZiYXItbmF2IC5vcGVuIC5kcm9wZG93bi1tZW51ID4gbGkgPiBhOmZvY3VzIHtcbiAgICAgICAgY29sb3I6ICNmZmY7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50OyB9XG4gICAgLm5hdmJhci1kZWZhdWx0IC5uYXZiYXItbmF2IC5vcGVuIC5kcm9wZG93bi1tZW51ID4gLmFjdGl2ZSA+IGEsIC5uYXZiYXItZGVmYXVsdCAubmF2YmFyLW5hdiAub3BlbiAuZHJvcGRvd24tbWVudSA+IC5hY3RpdmUgPiBhOmhvdmVyLCAubmF2YmFyLWRlZmF1bHQgLm5hdmJhci1uYXYgLm9wZW4gLmRyb3Bkb3duLW1lbnUgPiAuYWN0aXZlID4gYTpmb2N1cyB7XG4gICAgICBjb2xvcjogI2ZmZjtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50OyB9XG4gICAgLm5hdmJhci1kZWZhdWx0IC5uYXZiYXItbmF2IC5vcGVuIC5kcm9wZG93bi1tZW51ID4gLmRpc2FibGVkID4gYSwgLm5hdmJhci1kZWZhdWx0IC5uYXZiYXItbmF2IC5vcGVuIC5kcm9wZG93bi1tZW51ID4gLmRpc2FibGVkID4gYTpob3ZlciwgLm5hdmJhci1kZWZhdWx0IC5uYXZiYXItbmF2IC5vcGVuIC5kcm9wZG93bi1tZW51ID4gLmRpc2FibGVkID4gYTpmb2N1cyB7XG4gICAgICBjb2xvcjogI2NjYztcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50OyB9IH1cbiAgLm5hdmJhci1kZWZhdWx0IC5uYXZiYXItbGluayB7XG4gICAgY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC44KTsgfVxuICAgIC5uYXZiYXItZGVmYXVsdCAubmF2YmFyLWxpbms6aG92ZXIge1xuICAgICAgY29sb3I6ICNmZmY7IH1cbiAgLm5hdmJhci1kZWZhdWx0IC5idG4tbGluayB7XG4gICAgY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC44KTsgfVxuICAgIC5uYXZiYXItZGVmYXVsdCAuYnRuLWxpbms6aG92ZXIsIC5uYXZiYXItZGVmYXVsdCAuYnRuLWxpbms6Zm9jdXMge1xuICAgICAgY29sb3I6ICNmZmY7IH1cbiAgICAubmF2YmFyLWRlZmF1bHQgLmJ0bi1saW5rW2Rpc2FibGVkXTpob3ZlciwgLm5hdmJhci1kZWZhdWx0IC5idG4tbGlua1tkaXNhYmxlZF06Zm9jdXMsXG4gICAgZmllbGRzZXRbZGlzYWJsZWRdIC5uYXZiYXItZGVmYXVsdCAuYnRuLWxpbms6aG92ZXIsXG4gICAgZmllbGRzZXRbZGlzYWJsZWRdIC5uYXZiYXItZGVmYXVsdCAuYnRuLWxpbms6Zm9jdXMge1xuICAgICAgY29sb3I6ICNjY2M7IH1cblxuLm5hdmJhci1pbnZlcnNlIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogIzIyMjtcbiAgYm9yZGVyLWNvbG9yOiAjMDkwODA4OyB9XG4gIC5uYXZiYXItaW52ZXJzZSAubmF2YmFyLWJyYW5kIHtcbiAgICBjb2xvcjogIzlkOWQ5ZDsgfVxuICAgIC5uYXZiYXItaW52ZXJzZSAubmF2YmFyLWJyYW5kOmhvdmVyLCAubmF2YmFyLWludmVyc2UgLm5hdmJhci1icmFuZDpmb2N1cyB7XG4gICAgICBjb2xvcjogI2ZmZjtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50OyB9XG4gIC5uYXZiYXItaW52ZXJzZSAubmF2YmFyLXRleHQge1xuICAgIGNvbG9yOiAjOWQ5ZDlkOyB9XG4gIC5uYXZiYXItaW52ZXJzZSAubmF2YmFyLW5hdiA+IGxpID4gYSB7XG4gICAgY29sb3I6ICM5ZDlkOWQ7IH1cbiAgICAubmF2YmFyLWludmVyc2UgLm5hdmJhci1uYXYgPiBsaSA+IGE6aG92ZXIsIC5uYXZiYXItaW52ZXJzZSAubmF2YmFyLW5hdiA+IGxpID4gYTpmb2N1cyB7XG4gICAgICBjb2xvcjogI2ZmZjtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50OyB9XG4gIC5uYXZiYXItaW52ZXJzZSAubmF2YmFyLW5hdiA+IC5hY3RpdmUgPiBhLCAubmF2YmFyLWludmVyc2UgLm5hdmJhci1uYXYgPiAuYWN0aXZlID4gYTpob3ZlciwgLm5hdmJhci1pbnZlcnNlIC5uYXZiYXItbmF2ID4gLmFjdGl2ZSA+IGE6Zm9jdXMge1xuICAgIGNvbG9yOiAjZmZmO1xuICAgIGJhY2tncm91bmQtY29sb3I6ICMwOTA4MDg7IH1cbiAgLm5hdmJhci1pbnZlcnNlIC5uYXZiYXItbmF2ID4gLmRpc2FibGVkID4gYSwgLm5hdmJhci1pbnZlcnNlIC5uYXZiYXItbmF2ID4gLmRpc2FibGVkID4gYTpob3ZlciwgLm5hdmJhci1pbnZlcnNlIC5uYXZiYXItbmF2ID4gLmRpc2FibGVkID4gYTpmb2N1cyB7XG4gICAgY29sb3I6ICM0NDQ7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7IH1cbiAgLm5hdmJhci1pbnZlcnNlIC5uYXZiYXItdG9nZ2xlIHtcbiAgICBib3JkZXItY29sb3I6ICMzMzM7IH1cbiAgICAubmF2YmFyLWludmVyc2UgLm5hdmJhci10b2dnbGU6aG92ZXIsIC5uYXZiYXItaW52ZXJzZSAubmF2YmFyLXRvZ2dsZTpmb2N1cyB7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjMzMzOyB9XG4gICAgLm5hdmJhci1pbnZlcnNlIC5uYXZiYXItdG9nZ2xlIC5pY29uLWJhciB7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmOyB9XG4gIC5uYXZiYXItaW52ZXJzZSAubmF2YmFyLWNvbGxhcHNlLFxuICAubmF2YmFyLWludmVyc2UgLm5hdmJhci1mb3JtIHtcbiAgICBib3JkZXItY29sb3I6ICMxMDEwMTA7IH1cbiAgLm5hdmJhci1pbnZlcnNlIC5uYXZiYXItbmF2ID4gLm9wZW4gPiBhLCAubmF2YmFyLWludmVyc2UgLm5hdmJhci1uYXYgPiAub3BlbiA+IGE6aG92ZXIsIC5uYXZiYXItaW52ZXJzZSAubmF2YmFyLW5hdiA+IC5vcGVuID4gYTpmb2N1cyB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogIzA5MDgwODtcbiAgICBjb2xvcjogI2ZmZjsgfVxuICBAbWVkaWEgKG1heC13aWR0aDogNzY3cHgpIHtcbiAgICAubmF2YmFyLWludmVyc2UgLm5hdmJhci1uYXYgLm9wZW4gLmRyb3Bkb3duLW1lbnUgPiAuZHJvcGRvd24taGVhZGVyIHtcbiAgICAgIGJvcmRlci1jb2xvcjogIzA5MDgwODsgfVxuICAgIC5uYXZiYXItaW52ZXJzZSAubmF2YmFyLW5hdiAub3BlbiAuZHJvcGRvd24tbWVudSAuZGl2aWRlciB7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDkwODA4OyB9XG4gICAgLm5hdmJhci1pbnZlcnNlIC5uYXZiYXItbmF2IC5vcGVuIC5kcm9wZG93bi1tZW51ID4gbGkgPiBhIHtcbiAgICAgIGNvbG9yOiAjOWQ5ZDlkOyB9XG4gICAgICAubmF2YmFyLWludmVyc2UgLm5hdmJhci1uYXYgLm9wZW4gLmRyb3Bkb3duLW1lbnUgPiBsaSA+IGE6aG92ZXIsIC5uYXZiYXItaW52ZXJzZSAubmF2YmFyLW5hdiAub3BlbiAuZHJvcGRvd24tbWVudSA+IGxpID4gYTpmb2N1cyB7XG4gICAgICAgIGNvbG9yOiAjZmZmO1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDsgfVxuICAgIC5uYXZiYXItaW52ZXJzZSAubmF2YmFyLW5hdiAub3BlbiAuZHJvcGRvd24tbWVudSA+IC5hY3RpdmUgPiBhLCAubmF2YmFyLWludmVyc2UgLm5hdmJhci1uYXYgLm9wZW4gLmRyb3Bkb3duLW1lbnUgPiAuYWN0aXZlID4gYTpob3ZlciwgLm5hdmJhci1pbnZlcnNlIC5uYXZiYXItbmF2IC5vcGVuIC5kcm9wZG93bi1tZW51ID4gLmFjdGl2ZSA+IGE6Zm9jdXMge1xuICAgICAgY29sb3I6ICNmZmY7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDkwODA4OyB9XG4gICAgLm5hdmJhci1pbnZlcnNlIC5uYXZiYXItbmF2IC5vcGVuIC5kcm9wZG93bi1tZW51ID4gLmRpc2FibGVkID4gYSwgLm5hdmJhci1pbnZlcnNlIC5uYXZiYXItbmF2IC5vcGVuIC5kcm9wZG93bi1tZW51ID4gLmRpc2FibGVkID4gYTpob3ZlciwgLm5hdmJhci1pbnZlcnNlIC5uYXZiYXItbmF2IC5vcGVuIC5kcm9wZG93bi1tZW51ID4gLmRpc2FibGVkID4gYTpmb2N1cyB7XG4gICAgICBjb2xvcjogIzQ0NDtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50OyB9IH1cbiAgLm5hdmJhci1pbnZlcnNlIC5uYXZiYXItbGluayB7XG4gICAgY29sb3I6ICM5ZDlkOWQ7IH1cbiAgICAubmF2YmFyLWludmVyc2UgLm5hdmJhci1saW5rOmhvdmVyIHtcbiAgICAgIGNvbG9yOiAjZmZmOyB9XG4gIC5uYXZiYXItaW52ZXJzZSAuYnRuLWxpbmsge1xuICAgIGNvbG9yOiAjOWQ5ZDlkOyB9XG4gICAgLm5hdmJhci1pbnZlcnNlIC5idG4tbGluazpob3ZlciwgLm5hdmJhci1pbnZlcnNlIC5idG4tbGluazpmb2N1cyB7XG4gICAgICBjb2xvcjogI2ZmZjsgfVxuICAgIC5uYXZiYXItaW52ZXJzZSAuYnRuLWxpbmtbZGlzYWJsZWRdOmhvdmVyLCAubmF2YmFyLWludmVyc2UgLmJ0bi1saW5rW2Rpc2FibGVkXTpmb2N1cyxcbiAgICBmaWVsZHNldFtkaXNhYmxlZF0gLm5hdmJhci1pbnZlcnNlIC5idG4tbGluazpob3ZlcixcbiAgICBmaWVsZHNldFtkaXNhYmxlZF0gLm5hdmJhci1pbnZlcnNlIC5idG4tbGluazpmb2N1cyB7XG4gICAgICBjb2xvcjogIzQ0NDsgfVxuXG4ubmF2YmFyLWRlZmF1bHQubmF2YmFyLXN0aWNreSB7XG4gIHBvc2l0aW9uOiBmaXhlZDtcbiAgdG9wOiAwO1xuICBsZWZ0OiAwO1xuICByaWdodDogMDtcbiAgei1pbmRleDogOTk5OTtcbiAgcGFkZGluZzogMTBweCAwO1xuICBvcGFjaXR5OiAwO1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZTNkKDAsIC0xMDAlLCAwKTtcbiAgYm94LXNoYWRvdzogMCAycHggNnB4IDAgcmdiYSgwLCAwLCAwLCAwLjA3KTtcbiAgYmFja2dyb3VuZDogI2ZmZjsgfVxuICBAc3VwcG9ydHMgKGJhY2tkcm9wLWZpbHRlcjogc2F0dXJhdGUoMTgwJSkgYmx1cigyMHB4KSkge1xuICAgIC5uYXZiYXItZGVmYXVsdC5uYXZiYXItc3RpY2t5IHtcbiAgICAgIGJhY2tncm91bmQ6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC45KTtcbiAgICAgIGJhY2tkcm9wLWZpbHRlcjogc2F0dXJhdGUoMTgwJSkgYmx1cigyMHB4KTsgfSB9XG4gIC5uYXZiYXItZGVmYXVsdC5uYXZiYXItc3RpY2t5IC5uYXZiYXItbmF2ID4gbGkuaGVhZGVyLWJ0bi13aGl0ZSBhIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjNDg4YWZmO1xuICAgIGNvbG9yOiAjZmZmOyB9XG4gICAgLm5hdmJhci1kZWZhdWx0Lm5hdmJhci1zdGlja3kgLm5hdmJhci1uYXYgPiBsaS5oZWFkZXItYnRuLXdoaXRlIGE6aG92ZXIge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSg3NCwgMTM5LCAyNTIsIDAuOSk7XG4gICAgICBjb2xvcjogI2ZmZjsgfVxuICAubmF2YmFyLWRlZmF1bHQubmF2YmFyLXN0aWNreS0tc2hvdywgLm5hdmJhci1kZWZhdWx0Lm5hdmJhci1zdGlja3ktLWhpZGUge1xuICAgIGFuaW1hdGlvbi1maWxsLW1vZGU6IGZvcndhcmRzOyB9XG4gIC5uYXZiYXItZGVmYXVsdC5uYXZiYXItc3RpY2t5LS1oaWRlIHtcbiAgICBhbmltYXRpb24tZHVyYXRpb246IDAuMXM7XG4gICAgYW5pbWF0aW9uLW5hbWU6IHNsaWRldXA7IH1cblxuQGtleWZyYW1lcyBzbGlkZXVwIHtcbiAgMCUge1xuICAgIG9wYWNpdHk6IDE7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUzZCgwLCAwLCAwKTsgfVxuICAxMDAlIHtcbiAgICBvcGFjaXR5OiAwO1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlM2QoMCwgLTEwMCUsIDApOyB9IH1cbiAgLm5hdmJhci1kZWZhdWx0Lm5hdmJhci1zdGlja3ktLXNob3cge1xuICAgIGFuaW1hdGlvbi1kdXJhdGlvbjogMC41cztcbiAgICBhbmltYXRpb24tbmFtZTogc2xpZGVkb3duO1xuICAgIGFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IGN1YmljLWJlemllcigwLjA3NSwgMC44MiwgMC4xNjUsIDEpOyB9XG5cbkBrZXlmcmFtZXMgc2xpZGVkb3duIHtcbiAgMCUge1xuICAgIG9wYWNpdHk6IDA7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUzZCgwLCAtMTAwJSwgMCk7IH1cbiAgMSUge1xuICAgIG9wYWNpdHk6IDE7IH1cbiAgMTAwJSB7XG4gICAgb3BhY2l0eTogMTtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZTNkKDAsIDAsIDApOyB9IH1cbiAgQG1lZGlhIChtYXgtd2lkdGg6IDc2N3B4KSB7XG4gICAgLm5hdmJhci1kZWZhdWx0Lm5hdmJhci1zdGlja3kge1xuICAgICAgZGlzcGxheTogbm9uZTsgfSB9XG5cbi5tb2RhbC1vcGVuIHtcbiAgb3ZlcmZsb3c6IGhpZGRlbjsgfVxuXG4ubW9kYWwge1xuICBkaXNwbGF5OiBub25lO1xuICBvdmVyZmxvdzogaGlkZGVuO1xuICBwb3NpdGlvbjogZml4ZWQ7XG4gIHRvcDogMDtcbiAgcmlnaHQ6IDA7XG4gIGJvdHRvbTogMDtcbiAgbGVmdDogMDtcbiAgei1pbmRleDogMTA1MDtcbiAgLXdlYmtpdC1vdmVyZmxvdy1zY3JvbGxpbmc6IHRvdWNoO1xuICBvdXRsaW5lOiAwOyB9XG4gIC5tb2RhbC5mYWRlIC5tb2RhbC1kaWFsb2cge1xuICAgIC13ZWJraXQtdHJhbnNmb3JtOiB0cmFuc2xhdGUoMCwgLTI1JSk7XG4gICAgLW1zLXRyYW5zZm9ybTogdHJhbnNsYXRlKDAsIC0yNSUpO1xuICAgIC1vLXRyYW5zZm9ybTogdHJhbnNsYXRlKDAsIC0yNSUpO1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlKDAsIC0yNSUpO1xuICAgIC13ZWJraXQtdHJhbnNpdGlvbjogLXdlYmtpdC10cmFuc2Zvcm0gMC4zcyBlYXNlLW91dDtcbiAgICAtbW96LXRyYW5zaXRpb246IC1tb3otdHJhbnNmb3JtIDAuM3MgZWFzZS1vdXQ7XG4gICAgLW8tdHJhbnNpdGlvbjogLW8tdHJhbnNmb3JtIDAuM3MgZWFzZS1vdXQ7XG4gICAgdHJhbnNpdGlvbjogdHJhbnNmb3JtIDAuM3MgZWFzZS1vdXQ7IH1cbiAgLm1vZGFsLmluIC5tb2RhbC1kaWFsb2cge1xuICAgIC13ZWJraXQtdHJhbnNmb3JtOiB0cmFuc2xhdGUoMCwgMCk7XG4gICAgLW1zLXRyYW5zZm9ybTogdHJhbnNsYXRlKDAsIDApO1xuICAgIC1vLXRyYW5zZm9ybTogdHJhbnNsYXRlKDAsIDApO1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlKDAsIDApOyB9XG5cbi5tb2RhbC1vcGVuIC5tb2RhbCB7XG4gIG92ZXJmbG93LXg6IGhpZGRlbjtcbiAgb3ZlcmZsb3cteTogYXV0bzsgfVxuXG4ubW9kYWwtZGlhbG9nIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICB3aWR0aDogYXV0bztcbiAgbWFyZ2luOiAxMHB4OyB9XG5cbi5tb2RhbC1jb250ZW50IHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xuICBib3JkZXI6IDFweCBzb2xpZCAjOTk5O1xuICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDAsIDAsIDAsIDAuMik7XG4gIGJvcmRlci1yYWRpdXM6IDZweDtcbiAgLXdlYmtpdC1ib3gtc2hhZG93OiAwIDNweCA5cHggcmdiYSgwLCAwLCAwLCAwLjUpO1xuICBib3gtc2hhZG93OiAwIDNweCA5cHggcmdiYSgwLCAwLCAwLCAwLjUpO1xuICBiYWNrZ3JvdW5kLWNsaXA6IHBhZGRpbmctYm94O1xuICBvdXRsaW5lOiAwOyB9XG5cbi5tb2RhbC1iYWNrZHJvcCB7XG4gIHBvc2l0aW9uOiBmaXhlZDtcbiAgdG9wOiAwO1xuICByaWdodDogMDtcbiAgYm90dG9tOiAwO1xuICBsZWZ0OiAwO1xuICB6LWluZGV4OiAxMDQwO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDAwOyB9XG4gIC5tb2RhbC1iYWNrZHJvcC5mYWRlIHtcbiAgICBvcGFjaXR5OiAwO1xuICAgIGZpbHRlcjogYWxwaGEob3BhY2l0eT0wKTsgfVxuICAubW9kYWwtYmFja2Ryb3AuaW4ge1xuICAgIG9wYWNpdHk6IDAuNTtcbiAgICBmaWx0ZXI6IGFscGhhKG9wYWNpdHk9NTApOyB9XG5cbi5tb2RhbC1oZWFkZXIge1xuICBwYWRkaW5nOiAxNXB4O1xuICBib3JkZXItYm90dG9tOiAxcHggc29saWQgI2U1ZTVlNTtcbiAgbWluLWhlaWdodDogMTYuNDI4NTcxNDI5cHg7IH1cblxuLm1vZGFsLWhlYWRlciAuY2xvc2Uge1xuICBtYXJnaW4tdG9wOiAtMnB4OyB9XG5cbi5tb2RhbC10aXRsZSB7XG4gIG1hcmdpbjogMDtcbiAgbGluZS1oZWlnaHQ6IDEuNDI4NTcxNDI5OyB9XG5cbi5tb2RhbC1ib2R5IHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBwYWRkaW5nOiAxNXB4OyB9XG5cbi5tb2RhbC1mb290ZXIge1xuICBwYWRkaW5nOiAxNXB4O1xuICB0ZXh0LWFsaWduOiByaWdodDtcbiAgYm9yZGVyLXRvcDogMXB4IHNvbGlkICNlNWU1ZTU7IH1cbiAgLm1vZGFsLWZvb3RlcjpiZWZvcmUsIC5tb2RhbC1mb290ZXI6YWZ0ZXIge1xuICAgIGNvbnRlbnQ6IFwiIFwiO1xuICAgIGRpc3BsYXk6IHRhYmxlOyB9XG4gIC5tb2RhbC1mb290ZXI6YWZ0ZXIge1xuICAgIGNsZWFyOiBib3RoOyB9XG4gIC5tb2RhbC1mb290ZXIgLmJ0biArIC5idG4ge1xuICAgIG1hcmdpbi1sZWZ0OiA1cHg7XG4gICAgbWFyZ2luLWJvdHRvbTogMDsgfVxuICAubW9kYWwtZm9vdGVyIC5idG4tZ3JvdXAgLmJ0biArIC5idG4ge1xuICAgIG1hcmdpbi1sZWZ0OiAtMXB4OyB9XG4gIC5tb2RhbC1mb290ZXIgLmJ0bi1ibG9jayArIC5idG4tYmxvY2sge1xuICAgIG1hcmdpbi1sZWZ0OiAwOyB9XG5cbi5tb2RhbC1zY3JvbGxiYXItbWVhc3VyZSB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgdG9wOiAtOTk5OXB4O1xuICB3aWR0aDogNTBweDtcbiAgaGVpZ2h0OiA1MHB4O1xuICBvdmVyZmxvdzogc2Nyb2xsOyB9XG5cbkBtZWRpYSAobWluLXdpZHRoOiA3NjhweCkge1xuICAubW9kYWwtZGlhbG9nIHtcbiAgICB3aWR0aDogNjAwcHg7XG4gICAgbWFyZ2luOiAzMHB4IGF1dG87IH1cbiAgLm1vZGFsLWNvbnRlbnQge1xuICAgIC13ZWJraXQtYm94LXNoYWRvdzogMCA1cHggMTVweCByZ2JhKDAsIDAsIDAsIDAuNSk7XG4gICAgYm94LXNoYWRvdzogMCA1cHggMTVweCByZ2JhKDAsIDAsIDAsIDAuNSk7IH1cbiAgLm1vZGFsLXNtIHtcbiAgICB3aWR0aDogMzAwcHg7IH0gfVxuXG5AbWVkaWEgKG1pbi13aWR0aDogOTkycHgpIHtcbiAgLm1vZGFsLWxnIHtcbiAgICB3aWR0aDogOTAwcHg7IH0gfVxuXG4udG9vbHRpcCB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgei1pbmRleDogMTA3MDtcbiAgZGlzcGxheTogYmxvY2s7XG4gIGZvbnQtZmFtaWx5OiBcIkhlbHZldGljYSBOZXVlXCIsIEhlbHZldGljYSwgQXJpYWwsIHNhbnMtc2VyaWY7XG4gIGZvbnQtc2l6ZTogMTJweDtcbiAgZm9udC13ZWlnaHQ6IG5vcm1hbDtcbiAgbGluZS1oZWlnaHQ6IDEuNDtcbiAgb3BhY2l0eTogMDtcbiAgZmlsdGVyOiBhbHBoYShvcGFjaXR5PTApOyB9XG4gIC50b29sdGlwLmluIHtcbiAgICBvcGFjaXR5OiAwLjk7XG4gICAgZmlsdGVyOiBhbHBoYShvcGFjaXR5PTkwKTsgfVxuICAudG9vbHRpcC50b3Age1xuICAgIG1hcmdpbi10b3A6IC0zcHg7XG4gICAgcGFkZGluZzogNXB4IDA7IH1cbiAgLnRvb2x0aXAucmlnaHQge1xuICAgIG1hcmdpbi1sZWZ0OiAzcHg7XG4gICAgcGFkZGluZzogMCA1cHg7IH1cbiAgLnRvb2x0aXAuYm90dG9tIHtcbiAgICBtYXJnaW4tdG9wOiAzcHg7XG4gICAgcGFkZGluZzogNXB4IDA7IH1cbiAgLnRvb2x0aXAubGVmdCB7XG4gICAgbWFyZ2luLWxlZnQ6IC0zcHg7XG4gICAgcGFkZGluZzogMCA1cHg7IH1cblxuLnRvb2x0aXAtaW5uZXIge1xuICBtYXgtd2lkdGg6IDIwMHB4O1xuICBwYWRkaW5nOiAzcHggOHB4O1xuICBjb2xvcjogI2ZmZjtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG4gIGJhY2tncm91bmQtY29sb3I6ICMwMDA7XG4gIGJvcmRlci1yYWRpdXM6IDRweDsgfVxuXG4udG9vbHRpcC1hcnJvdyB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgd2lkdGg6IDA7XG4gIGhlaWdodDogMDtcbiAgYm9yZGVyLWNvbG9yOiB0cmFuc3BhcmVudDtcbiAgYm9yZGVyLXN0eWxlOiBzb2xpZDsgfVxuXG4udG9vbHRpcC50b3AgLnRvb2x0aXAtYXJyb3cge1xuICBib3R0b206IDA7XG4gIGxlZnQ6IDUwJTtcbiAgbWFyZ2luLWxlZnQ6IC01cHg7XG4gIGJvcmRlci13aWR0aDogNXB4IDVweCAwO1xuICBib3JkZXItdG9wLWNvbG9yOiAjMDAwOyB9XG5cbi50b29sdGlwLnRvcC1sZWZ0IC50b29sdGlwLWFycm93IHtcbiAgYm90dG9tOiAwO1xuICByaWdodDogNXB4O1xuICBtYXJnaW4tYm90dG9tOiAtNXB4O1xuICBib3JkZXItd2lkdGg6IDVweCA1cHggMDtcbiAgYm9yZGVyLXRvcC1jb2xvcjogIzAwMDsgfVxuXG4udG9vbHRpcC50b3AtcmlnaHQgLnRvb2x0aXAtYXJyb3cge1xuICBib3R0b206IDA7XG4gIGxlZnQ6IDVweDtcbiAgbWFyZ2luLWJvdHRvbTogLTVweDtcbiAgYm9yZGVyLXdpZHRoOiA1cHggNXB4IDA7XG4gIGJvcmRlci10b3AtY29sb3I6ICMwMDA7IH1cblxuLnRvb2x0aXAucmlnaHQgLnRvb2x0aXAtYXJyb3cge1xuICB0b3A6IDUwJTtcbiAgbGVmdDogMDtcbiAgbWFyZ2luLXRvcDogLTVweDtcbiAgYm9yZGVyLXdpZHRoOiA1cHggNXB4IDVweCAwO1xuICBib3JkZXItcmlnaHQtY29sb3I6ICMwMDA7IH1cblxuLnRvb2x0aXAubGVmdCAudG9vbHRpcC1hcnJvdyB7XG4gIHRvcDogNTAlO1xuICByaWdodDogMDtcbiAgbWFyZ2luLXRvcDogLTVweDtcbiAgYm9yZGVyLXdpZHRoOiA1cHggMCA1cHggNXB4O1xuICBib3JkZXItbGVmdC1jb2xvcjogIzAwMDsgfVxuXG4udG9vbHRpcC5ib3R0b20gLnRvb2x0aXAtYXJyb3cge1xuICB0b3A6IDA7XG4gIGxlZnQ6IDUwJTtcbiAgbWFyZ2luLWxlZnQ6IC01cHg7XG4gIGJvcmRlci13aWR0aDogMCA1cHggNXB4O1xuICBib3JkZXItYm90dG9tLWNvbG9yOiAjMDAwOyB9XG5cbi50b29sdGlwLmJvdHRvbS1sZWZ0IC50b29sdGlwLWFycm93IHtcbiAgdG9wOiAwO1xuICByaWdodDogNXB4O1xuICBtYXJnaW4tdG9wOiAtNXB4O1xuICBib3JkZXItd2lkdGg6IDAgNXB4IDVweDtcbiAgYm9yZGVyLWJvdHRvbS1jb2xvcjogIzAwMDsgfVxuXG4udG9vbHRpcC5ib3R0b20tcmlnaHQgLnRvb2x0aXAtYXJyb3cge1xuICB0b3A6IDA7XG4gIGxlZnQ6IDVweDtcbiAgbWFyZ2luLXRvcDogLTVweDtcbiAgYm9yZGVyLXdpZHRoOiAwIDVweCA1cHg7XG4gIGJvcmRlci1ib3R0b20tY29sb3I6ICMwMDA7IH1cblxuLmNsZWFyZml4OmJlZm9yZSwgLmNsZWFyZml4OmFmdGVyIHtcbiAgY29udGVudDogXCIgXCI7XG4gIGRpc3BsYXk6IHRhYmxlOyB9XG5cbi5jbGVhcmZpeDphZnRlciB7XG4gIGNsZWFyOiBib3RoOyB9XG5cbi5jZW50ZXItYmxvY2sge1xuICBkaXNwbGF5OiBibG9jaztcbiAgbWFyZ2luLWxlZnQ6IGF1dG87XG4gIG1hcmdpbi1yaWdodDogYXV0bzsgfVxuXG4ucHVsbC1yaWdodCB7XG4gIGZsb2F0OiByaWdodCAhaW1wb3J0YW50OyB9XG5cbi5wdWxsLWxlZnQge1xuICBmbG9hdDogbGVmdCAhaW1wb3J0YW50OyB9XG5cbi5oaWRlIHtcbiAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50OyB9XG5cbi5zaG93IHtcbiAgZGlzcGxheTogYmxvY2sgIWltcG9ydGFudDsgfVxuXG4uaW52aXNpYmxlIHtcbiAgdmlzaWJpbGl0eTogaGlkZGVuOyB9XG5cbi50ZXh0LWhpZGUge1xuICBmb250OiAwLzAgYTtcbiAgY29sb3I6IHRyYW5zcGFyZW50O1xuICB0ZXh0LXNoYWRvdzogbm9uZTtcbiAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7XG4gIGJvcmRlcjogMDsgfVxuXG4uaGlkZGVuIHtcbiAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50OyB9XG5cbi5hZmZpeCB7XG4gIHBvc2l0aW9uOiBmaXhlZDsgfVxuXG5ALW1zLXZpZXdwb3J0IHtcbiAgd2lkdGg6IGRldmljZS13aWR0aDsgfVxuXG4udmlzaWJsZS14cyB7XG4gIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDsgfVxuXG4udmlzaWJsZS1zbSB7XG4gIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDsgfVxuXG4udmlzaWJsZS1tZCB7XG4gIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDsgfVxuXG4udmlzaWJsZS1sZyB7XG4gIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDsgfVxuXG4udmlzaWJsZS14cy1ibG9jayxcbi52aXNpYmxlLXhzLWlubGluZSxcbi52aXNpYmxlLXhzLWlubGluZS1ibG9jayxcbi52aXNpYmxlLXNtLWJsb2NrLFxuLnZpc2libGUtc20taW5saW5lLFxuLnZpc2libGUtc20taW5saW5lLWJsb2NrLFxuLnZpc2libGUtbWQtYmxvY2ssXG4udmlzaWJsZS1tZC1pbmxpbmUsXG4udmlzaWJsZS1tZC1pbmxpbmUtYmxvY2ssXG4udmlzaWJsZS1sZy1ibG9jayxcbi52aXNpYmxlLWxnLWlubGluZSxcbi52aXNpYmxlLWxnLWlubGluZS1ibG9jayB7XG4gIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDsgfVxuXG5AbWVkaWEgKG1heC13aWR0aDogNzY3cHgpIHtcbiAgLnZpc2libGUteHMge1xuICAgIGRpc3BsYXk6IGJsb2NrICFpbXBvcnRhbnQ7IH1cbiAgdGFibGUudmlzaWJsZS14cyB7XG4gICAgZGlzcGxheTogdGFibGU7IH1cbiAgdHIudmlzaWJsZS14cyB7XG4gICAgZGlzcGxheTogdGFibGUtcm93ICFpbXBvcnRhbnQ7IH1cbiAgdGgudmlzaWJsZS14cyxcbiAgdGQudmlzaWJsZS14cyB7XG4gICAgZGlzcGxheTogdGFibGUtY2VsbCAhaW1wb3J0YW50OyB9IH1cblxuQG1lZGlhIChtYXgtd2lkdGg6IDc2N3B4KSB7XG4gIC52aXNpYmxlLXhzLWJsb2NrIHtcbiAgICBkaXNwbGF5OiBibG9jayAhaW1wb3J0YW50OyB9IH1cblxuQG1lZGlhIChtYXgtd2lkdGg6IDc2N3B4KSB7XG4gIC52aXNpYmxlLXhzLWlubGluZSB7XG4gICAgZGlzcGxheTogaW5saW5lICFpbXBvcnRhbnQ7IH0gfVxuXG5AbWVkaWEgKG1heC13aWR0aDogNzY3cHgpIHtcbiAgLnZpc2libGUteHMtaW5saW5lLWJsb2NrIHtcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2sgIWltcG9ydGFudDsgfSB9XG5cbkBtZWRpYSAobWluLXdpZHRoOiA3NjhweCkgYW5kIChtYXgtd2lkdGg6IDk5MXB4KSB7XG4gIC52aXNpYmxlLXNtIHtcbiAgICBkaXNwbGF5OiBibG9jayAhaW1wb3J0YW50OyB9XG4gIHRhYmxlLnZpc2libGUtc20ge1xuICAgIGRpc3BsYXk6IHRhYmxlOyB9XG4gIHRyLnZpc2libGUtc20ge1xuICAgIGRpc3BsYXk6IHRhYmxlLXJvdyAhaW1wb3J0YW50OyB9XG4gIHRoLnZpc2libGUtc20sXG4gIHRkLnZpc2libGUtc20ge1xuICAgIGRpc3BsYXk6IHRhYmxlLWNlbGwgIWltcG9ydGFudDsgfSB9XG5cbkBtZWRpYSAobWluLXdpZHRoOiA3NjhweCkgYW5kIChtYXgtd2lkdGg6IDk5MXB4KSB7XG4gIC52aXNpYmxlLXNtLWJsb2NrIHtcbiAgICBkaXNwbGF5OiBibG9jayAhaW1wb3J0YW50OyB9IH1cblxuQG1lZGlhIChtaW4td2lkdGg6IDc2OHB4KSBhbmQgKG1heC13aWR0aDogOTkxcHgpIHtcbiAgLnZpc2libGUtc20taW5saW5lIHtcbiAgICBkaXNwbGF5OiBpbmxpbmUgIWltcG9ydGFudDsgfSB9XG5cbkBtZWRpYSAobWluLXdpZHRoOiA3NjhweCkgYW5kIChtYXgtd2lkdGg6IDk5MXB4KSB7XG4gIC52aXNpYmxlLXNtLWlubGluZS1ibG9jayB7XG4gICAgZGlzcGxheTogaW5saW5lLWJsb2NrICFpbXBvcnRhbnQ7IH0gfVxuXG5AbWVkaWEgKG1pbi13aWR0aDogOTkycHgpIGFuZCAobWF4LXdpZHRoOiAxMjE5cHgpIHtcbiAgLnZpc2libGUtbWQge1xuICAgIGRpc3BsYXk6IGJsb2NrICFpbXBvcnRhbnQ7IH1cbiAgdGFibGUudmlzaWJsZS1tZCB7XG4gICAgZGlzcGxheTogdGFibGU7IH1cbiAgdHIudmlzaWJsZS1tZCB7XG4gICAgZGlzcGxheTogdGFibGUtcm93ICFpbXBvcnRhbnQ7IH1cbiAgdGgudmlzaWJsZS1tZCxcbiAgdGQudmlzaWJsZS1tZCB7XG4gICAgZGlzcGxheTogdGFibGUtY2VsbCAhaW1wb3J0YW50OyB9IH1cblxuQG1lZGlhIChtaW4td2lkdGg6IDk5MnB4KSBhbmQgKG1heC13aWR0aDogMTIxOXB4KSB7XG4gIC52aXNpYmxlLW1kLWJsb2NrIHtcbiAgICBkaXNwbGF5OiBibG9jayAhaW1wb3J0YW50OyB9IH1cblxuQG1lZGlhIChtaW4td2lkdGg6IDk5MnB4KSBhbmQgKG1heC13aWR0aDogMTIxOXB4KSB7XG4gIC52aXNpYmxlLW1kLWlubGluZSB7XG4gICAgZGlzcGxheTogaW5saW5lICFpbXBvcnRhbnQ7IH0gfVxuXG5AbWVkaWEgKG1pbi13aWR0aDogOTkycHgpIGFuZCAobWF4LXdpZHRoOiAxMjE5cHgpIHtcbiAgLnZpc2libGUtbWQtaW5saW5lLWJsb2NrIHtcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2sgIWltcG9ydGFudDsgfSB9XG5cbkBtZWRpYSAobWluLXdpZHRoOiAxMjIwcHgpIHtcbiAgLnZpc2libGUtbGcge1xuICAgIGRpc3BsYXk6IGJsb2NrICFpbXBvcnRhbnQ7IH1cbiAgdGFibGUudmlzaWJsZS1sZyB7XG4gICAgZGlzcGxheTogdGFibGU7IH1cbiAgdHIudmlzaWJsZS1sZyB7XG4gICAgZGlzcGxheTogdGFibGUtcm93ICFpbXBvcnRhbnQ7IH1cbiAgdGgudmlzaWJsZS1sZyxcbiAgdGQudmlzaWJsZS1sZyB7XG4gICAgZGlzcGxheTogdGFibGUtY2VsbCAhaW1wb3J0YW50OyB9IH1cblxuQG1lZGlhIChtaW4td2lkdGg6IDEyMjBweCkge1xuICAudmlzaWJsZS1sZy1ibG9jayB7XG4gICAgZGlzcGxheTogYmxvY2sgIWltcG9ydGFudDsgfSB9XG5cbkBtZWRpYSAobWluLXdpZHRoOiAxMjIwcHgpIHtcbiAgLnZpc2libGUtbGctaW5saW5lIHtcbiAgICBkaXNwbGF5OiBpbmxpbmUgIWltcG9ydGFudDsgfSB9XG5cbkBtZWRpYSAobWluLXdpZHRoOiAxMjIwcHgpIHtcbiAgLnZpc2libGUtbGctaW5saW5lLWJsb2NrIHtcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2sgIWltcG9ydGFudDsgfSB9XG5cbkBtZWRpYSAobWF4LXdpZHRoOiA3NjdweCkge1xuICAuaGlkZGVuLXhzIHtcbiAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7IH0gfVxuXG5AbWVkaWEgKG1pbi13aWR0aDogNzY4cHgpIGFuZCAobWF4LXdpZHRoOiA5OTFweCkge1xuICAuaGlkZGVuLXNtIHtcbiAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7IH0gfVxuXG5AbWVkaWEgKG1pbi13aWR0aDogOTkycHgpIGFuZCAobWF4LXdpZHRoOiAxMjE5cHgpIHtcbiAgLmhpZGRlbi1tZCB7XG4gICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50OyB9IH1cblxuQG1lZGlhIChtaW4td2lkdGg6IDEyMjBweCkge1xuICAuaGlkZGVuLWxnIHtcbiAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7IH0gfVxuXG4udmlzaWJsZS1wcmludCB7XG4gIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDsgfVxuXG5AbWVkaWEgcHJpbnQge1xuICAudmlzaWJsZS1wcmludCB7XG4gICAgZGlzcGxheTogYmxvY2sgIWltcG9ydGFudDsgfVxuICB0YWJsZS52aXNpYmxlLXByaW50IHtcbiAgICBkaXNwbGF5OiB0YWJsZTsgfVxuICB0ci52aXNpYmxlLXByaW50IHtcbiAgICBkaXNwbGF5OiB0YWJsZS1yb3cgIWltcG9ydGFudDsgfVxuICB0aC52aXNpYmxlLXByaW50LFxuICB0ZC52aXNpYmxlLXByaW50IHtcbiAgICBkaXNwbGF5OiB0YWJsZS1jZWxsICFpbXBvcnRhbnQ7IH0gfVxuXG4udmlzaWJsZS1wcmludC1ibG9jayB7XG4gIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDsgfVxuICBAbWVkaWEgcHJpbnQge1xuICAgIC52aXNpYmxlLXByaW50LWJsb2NrIHtcbiAgICAgIGRpc3BsYXk6IGJsb2NrICFpbXBvcnRhbnQ7IH0gfVxuXG4udmlzaWJsZS1wcmludC1pbmxpbmUge1xuICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7IH1cbiAgQG1lZGlhIHByaW50IHtcbiAgICAudmlzaWJsZS1wcmludC1pbmxpbmUge1xuICAgICAgZGlzcGxheTogaW5saW5lICFpbXBvcnRhbnQ7IH0gfVxuXG4udmlzaWJsZS1wcmludC1pbmxpbmUtYmxvY2sge1xuICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7IH1cbiAgQG1lZGlhIHByaW50IHtcbiAgICAudmlzaWJsZS1wcmludC1pbmxpbmUtYmxvY2sge1xuICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrICFpbXBvcnRhbnQ7IH0gfVxuXG5AbWVkaWEgcHJpbnQge1xuICAuaGlkZGVuLXByaW50IHtcbiAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7IH0gfVxuXG4uYnRuIHtcbiAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgYm9yZGVyLXJhZGl1czogM3B4O1xuICBwYWRkaW5nOiAxMHB4IDIwcHggMTJweDtcbiAgZm9udC1zaXplOiAxNnB4OyB9XG4gIC5idG4uYnRuLWlvbmljIHtcbiAgICBiYWNrZ3JvdW5kOiAjNGE4YmZjO1xuICAgIGNvbG9yOiB3aGl0ZTtcbiAgICB0cmFuc2l0aW9uOiBjb2xvciAuMnMsIGJhY2tncm91bmQtY29sb3IgLjJzO1xuICAgIC13ZWJraXQtZm9udC1zbW9vdGhpbmc6IGFudGlhbGlhc2VkO1xuICAgIGZvbnQtc2l6ZTogMjBweDtcbiAgICBsZXR0ZXItc3BhY2luZzogMDtcbiAgICBwYWRkaW5nOiAxNnB4IDI4cHg7IH1cbiAgICAuYnRuLmJ0bi1pb25pYzpob3ZlciB7XG4gICAgICBjb2xvcjogI2ZmZjtcbiAgICAgIGJhY2tncm91bmQ6ICM1Qjk4RkY7IH1cbiAgLmJ0bi5idG4tb3V0bGluZSB7XG4gICAgY29sb3I6ICM0YThiZmM7XG4gICAgYm9yZGVyLWNvbG9yOiAjNGE4YmZjO1xuICAgIGJvcmRlcjogIzRhOGJmYyAycHggc29saWQ7XG4gICAgdHJhbnNpdGlvbjogY29sb3IgLjJzLCBiYWNrZ3JvdW5kLWNvbG9yIC4ycztcbiAgICAtd2Via2l0LWZvbnQtc21vb3RoaW5nOiBhbnRpYWxpYXNlZDsgfVxuICAgIC5idG4uYnRuLW91dGxpbmU6aG92ZXIge1xuICAgICAgY29sb3I6IHdoaXRlO1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogIzRhOGJmYzsgfVxuICAuYnRuLmZpbGwuZ3JlZW4sIC5idG4uZmlsbC5ibHVlIHtcbiAgICBib3JkZXItcmFkaXVzOiA0cHg7XG4gICAgY29sb3I6IHdoaXRlO1xuICAgIGZvbnQtc2l6ZTogMTRweDtcbiAgICBmb250LXdlaWdodDogNTAwO1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICBib3gtc2hhZG93OiAwIDFweCAxcHggcmdiYSgwLCAwLCAwLCAwLjEpO1xuICAgIHBhZGRpbmc6IDEycHggMjBweDsgfVxuICAuYnRuLmZpbGwuZ3JlZW4ge1xuICAgIGJhY2tncm91bmQ6ICMzOWQ0NmQ7XG4gICAgcGFkZGluZy1sZWZ0OiAzNXB4OyB9XG4gICAgLmJ0bi5maWxsLmdyZWVuIC5pY29uIHtcbiAgICAgIGZvbnQtc2l6ZTogMjZweDtcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgIHRvcDogNHB4O1xuICAgICAgbGVmdDogMTVweDtcbiAgICAgIGZvbnQtd2VpZ2h0OiA4MDA7IH1cbiAgLmJ0bi5maWxsLmJsdWUge1xuICAgIGJhY2tncm91bmQ6ICM0OGFjZjg7XG4gICAgcGFkZGluZy1sZWZ0OiA0NXB4O1xuICAgIG1hcmdpbi1sZWZ0OiA1cHg7IH1cbiAgICAuYnRuLmZpbGwuYmx1ZSAuaWNvbiB7XG4gICAgICBmb250LXNpemU6IDIycHg7XG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICB0b3A6IDZweDtcbiAgICAgIGxlZnQ6IDIwcHg7IH1cblxuaGVhZGVyLmNvbnRhaW5lciB7XG4gIHBhZGRpbmctdG9wOiAyMHB4O1xuICBwYWRkaW5nLWJvdHRvbTogMjBweDtcbiAgLXdlYmtpdC1mb250LXNtb290aGluZzogYW50aWFsaWFzZWQ7IH1cbiAgaGVhZGVyLmNvbnRhaW5lciAuY3JlYXRvci1sb2dvIHtcbiAgICB3aWR0aDogMTIwcHg7IH1cbiAgaGVhZGVyLmNvbnRhaW5lciBuYXYge1xuICAgIGZsb2F0OiByaWdodDsgfVxuICAgIEBtZWRpYSAobWF4LXdpZHRoOiA3NjdweCkge1xuICAgICAgaGVhZGVyLmNvbnRhaW5lciBuYXYge1xuICAgICAgICBmbG9hdDogbm9uZTsgfSB9XG4gICAgaGVhZGVyLmNvbnRhaW5lciBuYXYgYSB7XG4gICAgICBjb2xvcjogIzQ4NGY1YjtcbiAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7XG4gICAgICB0cmFuc2l0aW9uOiAuMnMgY29sb3I7XG4gICAgICBmb250LXNpemU6IDE0cHg7XG4gICAgICBsZXR0ZXItc3BhY2luZzogMDsgfVxuICAgICAgaGVhZGVyLmNvbnRhaW5lciBuYXYgYS5hY3RpdmUsIGhlYWRlci5jb250YWluZXIgbmF2IGE6aG92ZXIge1xuICAgICAgICBjb2xvcjogI2EwYTViMDtcbiAgICAgICAgYm94LXNoYWRvdzogbm9uZTsgfVxuICAgICAgQG1lZGlhIChtYXgtd2lkdGg6IDc2N3B4KSB7XG4gICAgICAgIGhlYWRlci5jb250YWluZXIgbmF2IGEge1xuICAgICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsgfSB9XG4gICAgaGVhZGVyLmNvbnRhaW5lciBuYXYgLmJ0biB7XG4gICAgICBwYWRkaW5nOiA4cHggMTRweDtcbiAgICAgIG1hcmdpbi1sZWZ0OiAycHg7IH1cbiAgICAgIGhlYWRlci5jb250YWluZXIgbmF2IC5idG4uYm9yZGVyIHtcbiAgICAgICAgYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjZWJlZWYyO1xuICAgICAgICBib3JkZXItcmFkaXVzOiAwO1xuICAgICAgICBtYXJnaW4tbGVmdDogMTBweDtcbiAgICAgICAgcGFkZGluZy1sZWZ0OiAyNXB4OyB9XG4gICAgaGVhZGVyLmNvbnRhaW5lciBuYXYgLmJsdWUge1xuICAgICAgY29sb3I6ICM0YThiZmM7IH1cbiAgICAgIGhlYWRlci5jb250YWluZXIgbmF2IC5ibHVlOmhvdmVyLCBoZWFkZXIuY29udGFpbmVyIG5hdiAuYmx1ZTphY3RpdmUge1xuICAgICAgICBjb2xvcjogIzYzOWJmYztcbiAgICAgICAgYm94LXNoYWRvdzogbm9uZTsgfVxuICAgIGhlYWRlci5jb250YWluZXIgbmF2IC5zaWdudXAge1xuICAgICAgYmFja2dyb3VuZDogIzRhOGJmYztcbiAgICAgIGNvbG9yOiB3aGl0ZTtcbiAgICAgIHRyYW5zaXRpb246IC4ycyBiYWNrZ3JvdW5kOyB9XG4gICAgICBoZWFkZXIuY29udGFpbmVyIG5hdiAuc2lnbnVwOmhvdmVyIHtcbiAgICAgICAgYmFja2dyb3VuZDogIzNiODFmYztcbiAgICAgICAgY29sb3I6IHdoaXRlOyB9XG5cbmhncm91cCB7XG4gIHBhZGRpbmctdG9wOiA3NXB4O1xuICBwYWRkaW5nLWJvdHRvbTogNzVweDtcbiAgdGV4dC1hbGlnbjogY2VudGVyOyB9XG4gIGhncm91cCBoMSB7XG4gICAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgICBmb250LXNpemU6IDMycHg7XG4gICAgbWFyZ2luLWJvdHRvbTogMDsgfVxuICBoZ3JvdXAgaDIge1xuICAgIGZvbnQtd2VpZ2h0OiA2MDA7XG4gICAgZm9udC1zaXplOiAyOHB4O1xuICAgIG1hcmdpbi1ib3R0b206IDE1cHg7XG4gICAgY29sb3I6ICM0QzU1NUE7IH1cbiAgICBoZ3JvdXAgaDIgc3Ryb25nIHtcbiAgICAgIGZvbnQtd2VpZ2h0OiA3MDA7IH1cbiAgaGdyb3VwIGgzIHtcbiAgICBmb250LXNpemU6IDI1cHg7XG4gICAgZm9udC13ZWlnaHQ6IDYwMDsgfVxuICAgIGhncm91cCBoMyArIHAge1xuICAgICAgZm9udC13ZWlnaHQ6IDQwMDtcbiAgICAgIGZvbnQtc2l6ZTogMTRweDtcbiAgICAgIGxpbmUtaGVpZ2h0OiAyMHB4OyB9XG4gIGhncm91cCBwIHtcbiAgICBmb250LXdlaWdodDogMzAwO1xuICAgIGZvbnQtc2l6ZTogMjBweDtcbiAgICBjb2xvcjogIzU3NjA3MDtcbiAgICBtYXJnaW4tYm90dG9tOiAzMnB4OyB9XG4gIGhncm91cC5wcmVzZXJ2ZXIge1xuICAgIHBhZGRpbmctdG9wOiAxODBweDtcbiAgICBiYWNrZ3JvdW5kOiAjZjNmNWY3IGNlbnRlciA1NXB4IG5vLXJlcGVhdCB1cmwoXCIvaW1nL3Byby9jcmVhdG9yL3N1cHBvcnQtYnVveS5wbmdcIik7XG4gICAgYmFja2dyb3VuZC1zaXplOiA4MHB4O1xuICAgIGJvcmRlci1ib3R0b206IDJweCAjZTJlN2VmIHNvbGlkOyB9XG4gIGhncm91cDpub3QoZm9ybSkgLmJ0biB7XG4gICAgbWFyZ2luLXRvcDogMTBweDsgfVxuICBoZ3JvdXAuZ3JleS10b3Age1xuICAgIGJhY2tncm91bmQ6ICNmM2Y1Zjc7XG4gICAgcGFkZGluZy1ib3R0b206IDIwMHB4O1xuICAgIG1hcmdpbi1ib3R0b206IC0xMzBweDtcbiAgICBib3JkZXItYm90dG9tOiAycHggc29saWQgI2U2ZTllZTsgfVxuXG5pbnB1dFt0eXBlPXRleHRdLmlucHV0IHtcbiAgYm9yZGVyOiAycHggc29saWQgI2U2ZTllZTtcbiAgYm9yZGVyLXJhZGl1czogM3B4O1xuICBwYWRkaW5nOiAxMHB4IDIwcHg7XG4gIGZvbnQtc2l6ZTogMTZweDtcbiAgdHJhbnNpdGlvbjogLjRzIGJvcmRlci1jb2xvcjsgfVxuICBpbnB1dFt0eXBlPXRleHRdLmlucHV0Ojotd2Via2l0LWlucHV0LXBsYWNlaG9sZGVyIHtcbiAgICBjb2xvcjogI2EwYTViMDsgfVxuICBpbnB1dFt0eXBlPXRleHRdLmlucHV0Oi1tcy1pbnB1dC1wbGFjZWhvbGRlciB7XG4gICAgY29sb3I6ICNhMGE1YjA7IH1cbiAgaW5wdXRbdHlwZT10ZXh0XS5pbnB1dDpmb2N1cyB7XG4gICAgYm9yZGVyLWNvbG9yOiAjNGE4YmZjO1xuICAgIG91dGxpbmU6IG5vbmU7IH1cblxuLnRhaWwge1xuICBiYWNrZ3JvdW5kOiAjMjYzZDRjO1xuICBjb2xvcjogIzliYWNiNjtcbiAgcGFkZGluZzogODBweCAwO1xuICBtYXJnaW4tdG9wOiA5MHB4OyB9XG4gIC50YWlsLmdob3N0IHtcbiAgICBiYWNrZ3JvdW5kOiAjMjYzZDRjIGNlbnRlciBjZW50ZXIgbm8tcmVwZWF0IHVybChcIi9pbWcvcHJvL2NyZWF0b3IvYmctY3JlYXRvci1naG9zdC5wbmdcIik7XG4gICAgYmFja2dyb3VuZC1zaXplOiBhdXRvIDEwMCU7IH1cbiAgLnRhaWwgaDIge1xuICAgIGNvbG9yOiB3aGl0ZTtcbiAgICBmb250LXNpemU6IDI4cHg7XG4gICAgZm9udC13ZWlnaHQ6IDYwMDsgfVxuICAudGFpbCBwIHtcbiAgICBmb250LXNpemU6IDE4cHg7IH1cbiAgICAudGFpbCBwIGEge1xuICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICAgY29sb3I6ICM0YThiZmM7XG4gICAgICB0cmFuc2l0aW9uOiBjb2xvciAuMnM7IH1cbiAgICAgIC50YWlsIHAgYS51bmRlcnNjb3JlOmFmdGVyIHtcbiAgICAgICAgY29udGVudDogJyc7XG4gICAgICAgIG1pbi1oZWlnaHQ6IDFweDtcbiAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICBsZWZ0OiAwO1xuICAgICAgICByaWdodDogMDtcbiAgICAgICAgYm90dG9tOiAtM3B4O1xuICAgICAgICBib3JkZXItYm90dG9tOiAycHggc29saWQgIzRhOGJmYztcbiAgICAgICAgdHJhbnNpdGlvbjogYm9yZGVyLWNvbG9yIC4yczsgfVxuICAgICAgLnRhaWwgcCBhOmhvdmVyIHtcbiAgICAgICAgY29sb3I6ICM5NWJiZmQ7XG4gICAgICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTsgfVxuICAgICAgICAudGFpbCBwIGE6aG92ZXI6YWZ0ZXIge1xuICAgICAgICAgIGJvcmRlci1jb2xvcjogIzk1YmJmZDsgfVxuXG4uc3RhcnQtbm93IHtcbiAgbWFyZ2luLXRvcDogNjBweDsgfVxuICAuc3RhcnQtbm93IGZvcm0ge1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICBwYWRkaW5nLXRvcDogMjhweDsgfVxuICAgIC5zdGFydC1ub3cgZm9ybSAuYnRuIHtcbiAgICAgIG1hcmdpbi10b3A6IC0zcHg7XG4gICAgICBwYWRkaW5nOiAxMXB4IDIwcHg7XG4gICAgICBmb250LXNpemU6IDE2cHg7IH1cbiAgICAuc3RhcnQtbm93IGZvcm0gLmlucHV0IHtcbiAgICAgIHdpZHRoOiAzMzBweDsgfVxuICAgICAgQG1lZGlhIChtYXgtd2lkdGg6IDUwMHB4KSB7XG4gICAgICAgIC5zdGFydC1ub3cgZm9ybSAuaW5wdXQge1xuICAgICAgICAgIHdpZHRoOiAxMDAlOyB9IH1cbiAgICAuc3RhcnQtbm93IGZvcm06YmVmb3JlIHtcbiAgICAgIGJhY2tncm91bmQ6IG5vLXJlcGVhdCBjZW50ZXIgY2VudGVyIHVybChcIi9pbWcvcHJvL2NyZWF0b3Ivc2lnbnVwLWFycm93LnBuZ1wiKTtcbiAgICAgIGJhY2tncm91bmQtc2l6ZTogNjFweDtcbiAgICAgIHdpZHRoOiA2MXB4O1xuICAgICAgaGVpZ2h0OiA1NnB4O1xuICAgICAgY29udGVudDogJyc7XG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICBtYXJnaW4tbGVmdDogLTkwcHg7XG4gICAgICBtYXJnaW4tdG9wOiAtMjVweDsgfVxuICBAbWVkaWEgKG1heC13aWR0aDogOTkxcHgpIHtcbiAgICAuc3RhcnQtbm93IHtcbiAgICAgIHBhZGRpbmctbGVmdDogNXB4O1xuICAgICAgcGFkZGluZy1yaWdodDogNXB4OyB9XG4gICAgICAuc3RhcnQtbm93IGZvcm0gLmJ0biB7XG4gICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICBtYXJnaW46IDEwcHggYXV0byAwOyB9IH1cblxuZm9vdGVyIHtcbiAgY29sb3I6ICNhMGE1YjA7XG4gIHBhZGRpbmctdG9wOiA1MHB4OyB9XG4gIGZvb3RlciAucm93IHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGZsZXgtZmxvdzogcm93IHdyYXA7XG4gICAgd2lkdGg6IDEwMDBweDtcbiAgICBtYXJnaW46IDAgYXV0bzsgfVxuICAgIEBtZWRpYSAobWF4LXdpZHRoOiAxMjE5cHgpIHtcbiAgICAgIGZvb3RlciAucm93IHtcbiAgICAgICAgd2lkdGg6IGF1dG87IH0gfVxuICAgIEBtZWRpYSAobWF4LXdpZHRoOiA5OTFweCkge1xuICAgICAgZm9vdGVyIC5yb3cge1xuICAgICAgICBkaXNwbGF5OiBibG9jazsgfVxuICAgICAgICBmb290ZXIgLnJvdyAubGVmdCxcbiAgICAgICAgZm9vdGVyIC5yb3cgLnJpZ2h0LFxuICAgICAgICBmb290ZXIgLnJvdyAuY2VudGVyIHtcbiAgICAgICAgICB3aWR0aDogYXV0bztcbiAgICAgICAgICBtYXJnaW46IDAgYXV0bztcbiAgICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7IH1cbiAgICAgICAgZm9vdGVyIC5yb3cgLmNlbnRlciB7XG4gICAgICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1hcm91bmQ7XG4gICAgICAgICAgbWFyZ2luLXRvcDogNTBweDsgfSB9XG4gIGZvb3RlciAubGVmdCB7XG4gICAgd2lkdGg6IDE5MHB4O1xuICAgIGZsZXgtZ3JvdzogMDtcbiAgICBmbGV4LXNocmluazogMDtcbiAgICBtYXJnaW4tcmlnaHQ6IDg3cHg7XG4gICAgZm9udC1zaXplOiAxNHB4OyB9XG4gICAgZm9vdGVyIC5sZWZ0IHAge1xuICAgICAgbGluZS1oZWlnaHQ6IDIwcHg7XG4gICAgICBjb2xvcjogI2EwYTViMDtcbiAgICAgIGZvbnQtd2VpZ2h0OiAzMDA7IH1cbiAgICBmb290ZXIgLmxlZnQgLmNyZWF0b3ItbG9nbyB7XG4gICAgICB3aWR0aDogMTIwcHg7XG4gICAgICBtYXJnaW4tYm90dG9tOiAyMnB4OyB9XG4gICAgQG1lZGlhIChtYXgtd2lkdGg6IDEyMTlweCkge1xuICAgICAgZm9vdGVyIC5sZWZ0IHtcbiAgICAgICAgbWFyZ2luLXJpZ2h0OiA1cHg7IH0gfVxuICBmb290ZXIgLnJpZ2h0IHtcbiAgICB3aWR0aDogMzMycHg7XG4gICAgZmxleC1ncm93OiAwO1xuICAgIGZsZXgtc2hyaW5rOiAwO1xuICAgIG1hcmdpbi1sZWZ0OiA2MHB4OyB9XG4gICAgQG1lZGlhIChtYXgtd2lkdGg6IDEyMTlweCkge1xuICAgICAgZm9vdGVyIC5yaWdodCB7XG4gICAgICAgIG1hcmdpbi1sZWZ0OiA1cHg7IH0gfVxuICAgIEBtZWRpYSAobWF4LXdpZHRoOiA5OTFweCkge1xuICAgICAgZm9vdGVyIC5yaWdodCB7XG4gICAgICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDsgfSB9XG4gIGZvb3RlciAudHdpdHRlciB7XG4gICAgYmFja2dyb3VuZDogbm8tcmVwZWF0IGNlbnRlciBjZW50ZXIgdXJsKFwiL2ltZy90d2l0dGVyLWJ1YmJsZS5wbmdcIik7XG4gICAgYmFja2dyb3VuZC1zaXplOiAzMzJweDtcbiAgICB3aWR0aDogMzMycHg7XG4gICAgaGVpZ2h0OiAxMDlweDtcbiAgICBwYWRkaW5nOiAxOHB4IDE2cHggMjZweCA1OXB4O1xuICAgIGZvbnQtc2l6ZTogMTRweDtcbiAgICBjb2xvcjogIzRDNTU1QTsgfVxuICAgIGZvb3RlciAudHdpdHRlciBwIHtcbiAgICAgIGNvbG9yOiAjNEM1NTVBO1xuICAgICAgbGluZS1oZWlnaHQ6IDIwcHg7XG4gICAgICBmb250LXdlaWdodDogNDAwOyB9XG4gICAgZm9vdGVyIC50d2l0dGVyIGEge1xuICAgICAgY29sb3I6ICM0YThiZmM7IH1cbiAgICAgIGZvb3RlciAudHdpdHRlciBhOmhvdmVyIHtcbiAgICAgICAgY29sb3I6ICMwNDVjZjU7IH1cbiAgZm9vdGVyIC5jZW50ZXIge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgZmxleC1mbG93OiByb3cgd3JhcDtcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG4gICAgZmxleC1ncm93OiAyOyB9XG4gICAgZm9vdGVyIC5jZW50ZXIgc2VjdGlvbiB7XG4gICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7IH1cbiAgZm9vdGVyIHVsIHtcbiAgICBsaXN0LXN0eWxlOiBub25lO1xuICAgIHBhZGRpbmc6IDA7IH1cbiAgICBmb290ZXIgdWwgbGkge1xuICAgICAgZm9udC1zaXplOiAxNHB4O1xuICAgICAgbGluZS1oZWlnaHQ6IDJlbTsgfVxuICBmb290ZXIgYSB7XG4gICAgY29sb3I6ICNiMGI2YzQ7XG4gICAgdHJhbnNpdGlvbjogY29sb3IgLjJzOyB9XG4gICAgZm9vdGVyIGE6aG92ZXIge1xuICAgICAgY29sb3I6ICM0ZjhlZjc7XG4gICAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7IH1cbiAgZm9vdGVyIGgzIHtcbiAgICBmb250LXdlaWdodDogNTAwO1xuICAgIGZvbnQtc2l6ZTogMTZweDtcbiAgICBjb2xvcjogIzRDNTU1QTtcbiAgICBsaW5lLWhlaWdodDogMTAuNXB4OyB9XG4gIGZvb3RlciAuYm90dG9tIHtcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgbWFyZ2luLXRvcDogNDRweDtcbiAgICBwYWRkaW5nLXRvcDogNDRweDtcbiAgICBwYWRkaW5nLWJvdHRvbTogMjRweDtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7IH1cbiAgICBmb290ZXIgLmJvdHRvbSAuaW9uaS1pby1sb2dvIHtcbiAgICAgIHdpZHRoOiA3MnB4O1xuICAgICAgaGVpZ2h0OiAyNHB4O1xuICAgICAgbWFyZ2luLXJpZ2h0OiAxMHB4O1xuICAgICAgbWFyZ2luLXRvcDogLTNweDsgfVxuICAgIGZvb3RlciAuYm90dG9tIHAge1xuICAgICAgbWFyZ2luOiAwIGF1dG87XG4gICAgICBjb2xvcjogI2U2ZTllZTtcbiAgICAgIGZvbnQtc2l6ZTogMTJweDsgfVxuICAgIGZvb3RlciAuYm90dG9tOmJlZm9yZSB7XG4gICAgICBjb250ZW50OiAnJztcbiAgICAgIHdpZHRoOiA5OHB4O1xuICAgICAgaGVpZ2h0OiAxcHg7XG4gICAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgI2ViZWVmMjtcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgIHRvcDogMDtcbiAgICAgIGxlZnQ6IDA7XG4gICAgICByaWdodDogMDtcbiAgICAgIG1hcmdpbjogMCBhdXRvOyB9XG5cbiNwYWdlLWNyZWF0b3Ige1xuICBjb2xvcjogIzRDNTU1QTtcbiAgLXdlYmtpdC1mb250LXNtb290aGluZzogYW50aWFsaWFzZWQ7IH1cbiAgI3BhZ2UtY3JlYXRvciAuaGVybyB7XG4gICAgYmFja2dyb3VuZDogY2VudGVyIGJvdHRvbSBuby1yZXBlYXQgdXJsKFwiL2ltZy9wcm8vY3JlYXRvci9iZy1oZXJvLWNyZWF0b3IuanBnXCIpO1xuICAgIGJhY2tncm91bmQtc2l6ZTogY292ZXI7XG4gICAgbWluLWhlaWdodDogODc1cHg7IH1cbiAgICBAbWVkaWEgKG1pbi13aWR0aDogMTk1MHB4KSB7XG4gICAgICAjcGFnZS1jcmVhdG9yIC5oZXJvIHtcbiAgICAgICAgYmFja2dyb3VuZC1wb3NpdGlvbjogY2VudGVyIC0xNjBweDsgfVxuICAgICAgICAjcGFnZS1jcmVhdG9yIC5oZXJvIGhncm91cC5jb250YWluZXIgaDMge1xuICAgICAgICAgIG1heC13aWR0aDogMTAwJTsgfSB9XG4gICAgQG1lZGlhIChtaW4td2lkdGg6IDIyNTBweCkge1xuICAgICAgI3BhZ2UtY3JlYXRvciAuaGVybyB7XG4gICAgICAgIGJhY2tncm91bmQtcG9zaXRpb246IGNlbnRlciAtMjM1cHg7IH0gfVxuICAgIEBtZWRpYSAobWluLXdpZHRoOiAyNDAwcHgpIHtcbiAgICAgICNwYWdlLWNyZWF0b3IgLmhlcm8ge1xuICAgICAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiBjZW50ZXIgLTI3MHB4OyB9IH1cbiAgICBAbWVkaWEgKG1pbi13aWR0aDogMjUwMHB4KSB7XG4gICAgICAjcGFnZS1jcmVhdG9yIC5oZXJvIHtcbiAgICAgICAgYmFja2dyb3VuZC1wb3NpdGlvbjogY2VudGVyIC0yOTBweDsgfSB9XG4gICAgQG1lZGlhIChtaW4td2lkdGg6IDI1NTBweCkge1xuICAgICAgI3BhZ2UtY3JlYXRvciAuaGVybyB7XG4gICAgICAgIGJhY2tncm91bmQtcG9zaXRpb246IGNlbnRlciAtMzEwcHg7IH0gfVxuICAgIEBtZWRpYSAobWF4LXdpZHRoOiA3NjdweCkge1xuICAgICAgI3BhZ2UtY3JlYXRvciAuaGVybyB7XG4gICAgICAgIGJhY2tncm91bmQtc2l6ZTogNzY3cHg7XG4gICAgICAgIG1pbi1oZWlnaHQ6IDYwMHB4O1xuICAgICAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiBjZW50ZXIgYm90dG9tOyB9IH1cbiAgICAjcGFnZS1jcmVhdG9yIC5oZXJvIGhncm91cCB7XG4gICAgICBwYWRkaW5nLXRvcDogNzBweDtcbiAgICAgIG1hcmdpbi10b3A6IDA7IH1cbiAgICAgICNwYWdlLWNyZWF0b3IgLmhlcm8gaGdyb3VwIGgxIHtcbiAgICAgICAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgICAgICAgZm9udC1zaXplOiAzMnB4O1xuICAgICAgICBsZXR0ZXItc3BhY2luZzogLTAuMDFlbTtcbiAgICAgICAgbWFyZ2luLXRvcDogMjBweDsgfVxuICAgICAgICAjcGFnZS1jcmVhdG9yIC5oZXJvIGhncm91cCBoMSBhIHtcbiAgICAgICAgICBjb2xvcjogIzRhOGJmYztcbiAgICAgICAgICB0cmFuc2l0aW9uOiBjb2xvciAuMnM7XG4gICAgICAgICAgdGV4dC1kZWNvcmF0aW9uOiBub25lOyB9XG4gICAgICAgICAgI3BhZ2UtY3JlYXRvciAuaGVybyBoZ3JvdXAgaDEgYTpob3ZlciB7XG4gICAgICAgICAgICBjb2xvcjogIzdjYWJmZDsgfVxuICAgICAgI3BhZ2UtY3JlYXRvciAuaGVybyBoZ3JvdXAgaDMge1xuICAgICAgICBjb2xvcjogIzQ3NGQ1OTtcbiAgICAgICAgZm9udC1zaXplOiAyMHB4O1xuICAgICAgICBmb250LXdlaWdodDogNTAwO1xuICAgICAgICBtYXgtd2lkdGg6IDUwMHB4O1xuICAgICAgICBtYXJnaW46IDI2cHggYXV0byA0NHB4O1xuICAgICAgICAtd2Via2l0LWZvbnQtc21vb3RoaW5nOiBhbnRpYWxpYXNlZDtcbiAgICAgICAgbGluZS1oZWlnaHQ6IDI4cHg7IH1cbiAgICAgICAgI3BhZ2UtY3JlYXRvciAuaGVybyBoZ3JvdXAgaDMgc3Ryb25nIHtcbiAgICAgICAgICBmb250LXdlaWdodDogNjAwO1xuICAgICAgICAgIGNvbG9yOiAjNTc2MDcwOyB9XG4gICNwYWdlLWNyZWF0b3IgLnVzZWQtYnkge1xuICAgIGZvbnQtc2l6ZTogMTZweDtcbiAgICBjb2xvcjogI2EwYTViMDtcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgbWFyZ2luLXRvcDogMzBweDtcbiAgICBtYXJnaW4tYm90dG9tOiA2MHB4OyB9XG4gICAgI3BhZ2UtY3JlYXRvciAudXNlZC1ieSBwIHtcbiAgICAgIG1hcmdpbi1ib3R0b206IDIwcHg7XG4gICAgICBmb250LXdlaWdodDogNDAwOyB9XG4gICAgI3BhZ2UtY3JlYXRvciAudXNlZC1ieSBpbWcge1xuICAgICAgd2lkdGg6IDYwMnB4OyB9XG4gICAgICBAbWVkaWEgKG1heC13aWR0aDogNzY3cHgpIHtcbiAgICAgICAgI3BhZ2UtY3JlYXRvciAudXNlZC1ieSBpbWcge1xuICAgICAgICAgIHdpZHRoOiAxMDAlOyB9IH1cbiAgI3BhZ2UtY3JlYXRvciAuaG93LWNyZWF0b3Itd29ya3Mge1xuICAgIGJhY2tncm91bmQ6IHdoaXRlO1xuICAgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCh0byByaWdodCwgIzRhOGVmYSAwJSwgIzM0YjNmZSAxMDAlKTtcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7IH1cbiAgICAjcGFnZS1jcmVhdG9yIC5ob3ctY3JlYXRvci13b3JrcyBoZ3JvdXAge1xuICAgICAgcGFkZGluZy10b3A6IDgwcHg7XG4gICAgICBwYWRkaW5nLWJvdHRvbTogNTBweDsgfVxuICAgICNwYWdlLWNyZWF0b3IgLmhvdy1jcmVhdG9yLXdvcmtzIGgzLFxuICAgICNwYWdlLWNyZWF0b3IgLmhvdy1jcmVhdG9yLXdvcmtzIGg0LFxuICAgICNwYWdlLWNyZWF0b3IgLmhvdy1jcmVhdG9yLXdvcmtzIHN0cm9uZyB7XG4gICAgICBjb2xvcjogd2hpdGU7IH1cbiAgICAjcGFnZS1jcmVhdG9yIC5ob3ctY3JlYXRvci13b3JrcyBzdHJvbmcge1xuICAgICAgZm9udC13ZWlnaHQ6IDYwMDsgfVxuICAgICNwYWdlLWNyZWF0b3IgLmhvdy1jcmVhdG9yLXdvcmtzIGg0IHtcbiAgICAgIGZvbnQtc2l6ZTogMThweDtcbiAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7IH1cbiAgICAjcGFnZS1jcmVhdG9yIC5ob3ctY3JlYXRvci13b3JrcyBwIHtcbiAgICAgIGNvbG9yOiB3aGl0ZTtcbiAgICAgIGZvbnQtd2VpZ2h0OiA0MDA7XG4gICAgICBsaW5lLWhlaWdodDogMjJweDtcbiAgICAgIGZvbnQtc2l6ZTogMTRweDsgfVxuICAgICNwYWdlLWNyZWF0b3IgLmhvdy1jcmVhdG9yLXdvcmtzIGhncm91cCBoMyB7XG4gICAgICBmb250LXdlaWdodDogNTAwOyB9XG4gICAgI3BhZ2UtY3JlYXRvciAuaG93LWNyZWF0b3Itd29ya3MgaGdyb3VwIHAge1xuICAgICAgZm9udC1zaXplOiAxOHB4OyB9XG4gICAgI3BhZ2UtY3JlYXRvciAuaG93LWNyZWF0b3Itd29ya3MgLnN0ZXAge1xuICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgICAgd2lkdGg6IDMzMHB4O1xuICAgICAgcGFkZGluZy10b3A6IDIxNXB4O1xuICAgICAgcGFkZGluZy1ib3R0b206IDgwcHg7XG4gICAgICBtYXJnaW4tcmlnaHQ6IDcwcHg7XG4gICAgICBiYWNrZ3JvdW5kOiBuby1yZXBlYXQgY2VudGVyIHRvcDtcbiAgICAgIGJhY2tncm91bmQtc2l6ZTogMjcwcHg7XG4gICAgICBwb3NpdGlvbjogcmVsYXRpdmU7IH1cbiAgICAgICNwYWdlLWNyZWF0b3IgLmhvdy1jcmVhdG9yLXdvcmtzIC5zdGVwOmxhc3QtY2hpbGQge1xuICAgICAgICBtYXJnaW4tcmlnaHQ6IDA7IH1cbiAgICAgICAgI3BhZ2UtY3JlYXRvciAuaG93LWNyZWF0b3Itd29ya3MgLnN0ZXA6bGFzdC1jaGlsZDo6YmVmb3JlIHtcbiAgICAgICAgICBkaXNwbGF5OiBub25lOyB9XG4gICAgICAjcGFnZS1jcmVhdG9yIC5ob3ctY3JlYXRvci13b3JrcyAuc3RlcC5kcmFnLW4tZHJvcCB7XG4gICAgICAgIGJhY2tncm91bmQtaW1hZ2U6IHVybChcIi9pbWcvcHJvL2NyZWF0b3Ivd29ya3MtZG5kLnBuZz8xXCIpOyB9XG4gICAgICAjcGFnZS1jcmVhdG9yIC5ob3ctY3JlYXRvci13b3JrcyAuc3RlcC5wcmV2aWV3IHtcbiAgICAgICAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFwiL2ltZy9wcm8vY3JlYXRvci93b3Jrcy1wcmV2aWV3LnBuZ1wiKTsgfVxuICAgICAgI3BhZ2UtY3JlYXRvciAuaG93LWNyZWF0b3Itd29ya3MgLnN0ZXAuZXhwb3J0IHtcbiAgICAgICAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFwiL2ltZy9wcm8vY3JlYXRvci93b3Jrcy1leHBvcnQucG5nPzFcIik7IH1cbiAgICAgICNwYWdlLWNyZWF0b3IgLmhvdy1jcmVhdG9yLXdvcmtzIC5zdGVwOmJlZm9yZSB7XG4gICAgICAgIGJhY2tncm91bmQ6IG5vLXJlcGVhdCBjZW50ZXIgY2VudGVyIHVybChcIi9pbWcvcHJvL2NyZWF0b3IvaWNvLWFycm93LXdvcmtzLnBuZ1wiKTtcbiAgICAgICAgYmFja2dyb3VuZC1zaXplOiAxOXB4O1xuICAgICAgICB3aWR0aDogMTlweDtcbiAgICAgICAgaGVpZ2h0OiA0M3B4O1xuICAgICAgICBjb250ZW50OiAnJztcbiAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICB0b3A6IDg1cHg7XG4gICAgICAgIHJpZ2h0OiAtNjBweDsgfVxuICAgICAgQG1lZGlhIChtYXgtd2lkdGg6IDEyMTlweCkgYW5kIChtaW4td2lkdGg6IDk5MnB4KSB7XG4gICAgICAgICNwYWdlLWNyZWF0b3IgLmhvdy1jcmVhdG9yLXdvcmtzIC5zdGVwIHtcbiAgICAgICAgICBtYXJnaW4tcmlnaHQ6IDYwcHg7XG4gICAgICAgICAgd2lkdGg6IDI3MHB4OyB9XG4gICAgICAgICAgI3BhZ2UtY3JlYXRvciAuaG93LWNyZWF0b3Itd29ya3MgLnN0ZXA6YmVmb3JlIHtcbiAgICAgICAgICAgIHJpZ2h0OiAtMzVweDsgfSB9XG4gICAgICBAbWVkaWEgKG1heC13aWR0aDogOTkxcHgpIHtcbiAgICAgICAgI3BhZ2UtY3JlYXRvciAuaG93LWNyZWF0b3Itd29ya3MgLnN0ZXAge1xuICAgICAgICAgIG1hcmdpbi1yaWdodDogMDtcbiAgICAgICAgICB3aWR0aDogMTAwJTsgfVxuICAgICAgICAgICNwYWdlLWNyZWF0b3IgLmhvdy1jcmVhdG9yLXdvcmtzIC5zdGVwOmJlZm9yZSB7XG4gICAgICAgICAgICBkaXNwbGF5OiAwOyB9IH1cbiAgI3BhZ2UtY3JlYXRvciAuaGVyby1zaWRlIC5jb250YWluZXIge1xuICAgIGhlaWdodDogNDk4cHg7XG4gICAgcGFkZGluZy10b3A6IDE0MHB4OyB9XG4gICNwYWdlLWNyZWF0b3IgLmhlcm8tc2lkZS5sZWZ0IC5jb250YWluZXIge1xuICAgIHBhZGRpbmctbGVmdDogNjk1cHg7XG4gICAgYmFja2dyb3VuZDogbm8tcmVwZWF0IGxlZnQgdG9wO1xuICAgIGJhY2tncm91bmQtc2l6ZTogNjgycHg7IH1cbiAgICBAbWVkaWEgKG1heC13aWR0aDogMTIxOXB4KSBhbmQgKG1pbi13aWR0aDogOTkycHgpIHtcbiAgICAgICNwYWdlLWNyZWF0b3IgLmhlcm8tc2lkZS5sZWZ0IC5jb250YWluZXIge1xuICAgICAgICBtYXJnaW4tbGVmdDogLTEwMHB4O1xuICAgICAgICB3aWR0aDogMTEwMHB4O1xuICAgICAgICBwYWRkaW5nLWxlZnQ6IDY3MHB4OyB9IH1cbiAgICBAbWVkaWEgKG1heC13aWR0aDogOTkxcHgpIHtcbiAgICAgICNwYWdlLWNyZWF0b3IgLmhlcm8tc2lkZS5sZWZ0IC5jb250YWluZXIge1xuICAgICAgICBwYWRkaW5nLWxlZnQ6IDEwcHg7XG4gICAgICAgIHBhZGRpbmctYm90dG9tOiAxNTBweDtcbiAgICAgICAgYmFja2dyb3VuZC1wb3NpdGlvbjogY2VudGVyIGJvdHRvbTtcbiAgICAgICAgYmFja2dyb3VuZC1zaXplOiAyMjdweDtcbiAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgICAgICBoZWlnaHQ6IGF1dG87IH0gfVxuICAjcGFnZS1jcmVhdG9yIC5oZXJvLXNpZGUucmlnaHQge1xuICAgIGJhY2tncm91bmQ6ICNmNmY3ZmE7IH1cbiAgICAjcGFnZS1jcmVhdG9yIC5oZXJvLXNpZGUucmlnaHQgLmNvbnRhaW5lciB7XG4gICAgICBwYWRkaW5nLXJpZ2h0OiA2NjBweDtcbiAgICAgIGJhY2tncm91bmQ6IG5vLXJlcGVhdCByaWdodCB0b3A7XG4gICAgICBiYWNrZ3JvdW5kLXNpemU6IDY4MnB4OyB9XG4gICAgICBAbWVkaWEgKG1heC13aWR0aDogMTIxOXB4KSBhbmQgKG1pbi13aWR0aDogOTkycHgpIHtcbiAgICAgICAgI3BhZ2UtY3JlYXRvciAuaGVyby1zaWRlLnJpZ2h0IC5jb250YWluZXIge1xuICAgICAgICAgIG1hcmdpbi1yaWdodDogLTUwcHg7XG4gICAgICAgICAgd2lkdGg6IDEwMjBweDtcbiAgICAgICAgICBwYWRkaW5nLXJpZ2h0OiA2MzBweDsgfSB9XG4gICAgICBAbWVkaWEgKG1heC13aWR0aDogOTkxcHgpIHtcbiAgICAgICAgI3BhZ2UtY3JlYXRvciAuaGVyby1zaWRlLnJpZ2h0IC5jb250YWluZXIge1xuICAgICAgICAgIHBhZGRpbmctcmlnaHQ6IDEwcHg7XG4gICAgICAgICAgcGFkZGluZy1ib3R0b206IDE1MHB4O1xuICAgICAgICAgIGJhY2tncm91bmQtcG9zaXRpb246IGNlbnRlciBib3R0b207XG4gICAgICAgICAgYmFja2dyb3VuZC1zaXplOiAyMjdweDtcbiAgICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgICAgICAgaGVpZ2h0OiBhdXRvOyB9IH1cbiAgI3BhZ2UtY3JlYXRvciAuaGVyby1zaWRlLnRvb2wgLmNvbnRhaW5lciB7XG4gICAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFwiL2ltZy9wcm8vY3JlYXRvci9mZWF0dXJlcy10b29sLmpwZ1wiKTsgfVxuICAgIEBtZWRpYSAobWF4LXdpZHRoOiA5OTFweCkge1xuICAgICAgI3BhZ2UtY3JlYXRvciAuaGVyby1zaWRlLnRvb2wgLmNvbnRhaW5lciB7XG4gICAgICAgIGJhY2tncm91bmQtaW1hZ2U6IG5vbmU7XG4gICAgICAgIHBhZGRpbmctYm90dG9tOiAxMDBweDsgfSB9XG4gICNwYWdlLWNyZWF0b3IgLmhlcm8tc2lkZS5kbmQgLmNvbnRhaW5lciB7XG4gICAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFwiL2ltZy9wcm8vY3JlYXRvci9mZWF0dXJlcy1kbmQucG5nPzFcIik7IH1cbiAgI3BhZ2UtY3JlYXRvciAuaGVyby1zaWRlLnhwbGF0Zm9ybSAuY29udGFpbmVyIHtcbiAgICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXCIvaW1nL3Byby9jcmVhdG9yL2ZlYXR1cmVzLXhwbGF0Zm9ybS5qcGdcIik7IH1cbiAgI3BhZ2UtY3JlYXRvciAuaGVyby1zaWRlLnRlYW1zIC5jb250YWluZXIge1xuICAgIGJhY2tncm91bmQtaW1hZ2U6IHVybChcIi9pbWcvcHJvL2NyZWF0b3IvZmVhdHVyZXMtdGVhbXMucG5nPzFcIik7IH1cbiAgI3BhZ2UtY3JlYXRvciAuaGVyby1zaWRlLmlubGluZS1jb2RlLWVkaXRpbmcge1xuICAgIGJhY2tncm91bmQ6IG5vLXJlcGVhdCBsZWZ0IGJvdHRvbTtcbiAgICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXCIvaW1nL3Byby9jcmVhdG9yL2ZlYXR1cmVzLWNvZGUuanBnXCIpO1xuICAgIGJhY2tncm91bmQtc2l6ZTogNDUlOyB9XG4gICAgQG1lZGlhIHNjcmVlbiBhbmQgKG1pbi13aWR0aDogMjAwMHB4KSB7XG4gICAgICAjcGFnZS1jcmVhdG9yIC5oZXJvLXNpZGUuaW5saW5lLWNvZGUtZWRpdGluZyB7XG4gICAgICAgIGJhY2tncm91bmQtc2l6ZTogODk2cHg7IH0gfVxuICAgIEBtZWRpYSAobWF4LXdpZHRoOiA5OTFweCkge1xuICAgICAgI3BhZ2UtY3JlYXRvciAuaGVyby1zaWRlLmlubGluZS1jb2RlLWVkaXRpbmcge1xuICAgICAgICBiYWNrZ3JvdW5kLXNpemU6IDI5OXB4OyB9IH1cbiAgI3BhZ2UtY3JlYXRvciAuaGVyby1zaWRlIGgyIHtcbiAgICBmb250LXNpemU6IDI0cHg7XG4gICAgZm9udC13ZWlnaHQ6IDUwMDtcbiAgICBsaW5lLWhlaWdodDogMS41ZW07XG4gICAgbWFyZ2luLWJvdHRvbTogMjBweDtcbiAgICBsZXR0ZXItc3BhY2luZzogLTAuMDJlbTsgfVxuICAjcGFnZS1jcmVhdG9yIC5oZXJvLXNpZGUgcCB7XG4gICAgY29sb3I6ICM3RTg3OTI7XG4gICAgZm9udC1zaXplOiAxNnB4O1xuICAgIGZvbnQtd2VpZ2h0OiA0MDA7XG4gICAgbGluZS1oZWlnaHQ6IDEuOGVtO1xuICAgIG1hcmdpbi1ib3R0b206IDE1cHg7IH1cbiAgICAjcGFnZS1jcmVhdG9yIC5oZXJvLXNpZGUgcCBlbSxcbiAgICAjcGFnZS1jcmVhdG9yIC5oZXJvLXNpZGUgcCBzdHJvbmcge1xuICAgICAgZm9udC13ZWlnaHQ6IDYwMDsgfVxuICAjcGFnZS1jcmVhdG9yIC5oZXJvLXNpZGUgLnBsYXRmb3JtcyB7XG4gICAgd2lkdGg6IDEwN3B4OyB9XG4gICNwYWdlLWNyZWF0b3IgLmhlcm8tY2VudGVyIC50b3Age1xuICAgIGJhY2tncm91bmQ6ICMxMjFiMmUgbm8tcmVwZWF0IGNlbnRlciBib3R0b20gdXJsKFwiL2ltZy9wcm8vY3JlYXRvci9mZWF0dXJlcy1wcmV2aWV3LXBob3RvLmpwZ1wiKTtcbiAgICBiYWNrZ3JvdW5kLXNpemU6IDE4MDBweDsgfVxuICAgICNwYWdlLWNyZWF0b3IgLmhlcm8tY2VudGVyIC50b3AgLmNvbnRhaW5lciB7XG4gICAgICBoZWlnaHQ6IDQxMHB4O1xuICAgICAgcGFkZGluZy10b3A6IDE1MXB4OyB9XG4gICAgICAjcGFnZS1jcmVhdG9yIC5oZXJvLWNlbnRlciAudG9wIC5jb250YWluZXIgaDIge1xuICAgICAgICBjb2xvcjogd2hpdGU7XG4gICAgICAgIGZvbnQtc2l6ZTogMzJweDtcbiAgICAgICAgZm9udC13ZWlnaHQ6IDYwMDsgfVxuICAgICAgI3BhZ2UtY3JlYXRvciAuaGVyby1jZW50ZXIgLnRvcCAuY29udGFpbmVyIHAge1xuICAgICAgICBjb2xvcjogI2EwYTViMDtcbiAgICAgICAgZm9udC1zaXplOiAxOHB4OyB9XG4gICNwYWdlLWNyZWF0b3IgLmhlcm8tY2VudGVyIC5ib3R0b20ge1xuICAgIGJhY2tncm91bmQ6ICMyMjJmNDkgbm8tcmVwZWF0IGNlbnRlciBib3R0b20gdXJsKFwiL2ltZy9wcm8vY3JlYXRvci9mZWF0dXJlcy1wcmV2aWV3LWJsdXIuanBnPzFcIik7XG4gICAgYmFja2dyb3VuZC1zaXplOiAxODAwcHg7IH1cbiAgICAjcGFnZS1jcmVhdG9yIC5oZXJvLWNlbnRlciAuYm90dG9tIC5jb250YWluZXIge1xuICAgICAgaGVpZ2h0OiAxNDBweDtcbiAgICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICAgIHBhZGRpbmctdG9wOiAyMnB4OyB9XG4gICAgICAjcGFnZS1jcmVhdG9yIC5oZXJvLWNlbnRlciAuYm90dG9tIC5jb250YWluZXIgcCB7XG4gICAgICAgIGNvbG9yOiAjYTBhNWIwO1xuICAgICAgICBmb250LXNpemU6IDE0cHg7XG4gICAgICAgIGZvbnQtd2VpZ2h0OiA0MDA7IH1cbiAgICAgICNwYWdlLWNyZWF0b3IgLmhlcm8tY2VudGVyIC5ib3R0b20gLmNvbnRhaW5lciAuYnRuIHtcbiAgICAgICAgaGVpZ2h0OiA1M3B4OyB9XG4gICAgICAgICNwYWdlLWNyZWF0b3IgLmhlcm8tY2VudGVyIC5ib3R0b20gLmNvbnRhaW5lciAuYnRuLmFwcC1zdG9yZSB7XG4gICAgICAgICAgYmFja2dyb3VuZDogbm8tcmVwZWF0IGNlbnRlciBjZW50ZXIgdXJsKFwiL2ltZy9wcm8vY3JlYXRvci9hcHAtc3RvcmUtY3JlYXRvci1idG4ucG5nXCIpO1xuICAgICAgICAgIGJhY2tncm91bmQtc2l6ZTogMTUzcHg7XG4gICAgICAgICAgd2lkdGg6IDE1M3B4OyB9XG4gICAgICAgICAgQG1lZGlhIChtYXgtd2lkdGg6IDc2N3B4KSB7XG4gICAgICAgICAgICAjcGFnZS1jcmVhdG9yIC5oZXJvLWNlbnRlciAuYm90dG9tIC5jb250YWluZXIgLmJ0bi5hcHAtc3RvcmUge1xuICAgICAgICAgICAgICBiYWNrZ3JvdW5kLXNpemU6IDEwMnB4O1xuICAgICAgICAgICAgICB3aWR0aDogMTAycHg7IH0gfVxuICAgICAgICAjcGFnZS1jcmVhdG9yIC5oZXJvLWNlbnRlciAuYm90dG9tIC5jb250YWluZXIgLmJ0bi5nb29nbGUtcGxheSB7XG4gICAgICAgICAgYmFja2dyb3VuZDogbm8tcmVwZWF0IGNlbnRlciBjZW50ZXIgdXJsKFwiL2ltZy9wcm8vY3JlYXRvci9nb29nbGUtcGxheS1jcmVhdG9yLWJ0bi5wbmc/MVwiKTtcbiAgICAgICAgICBiYWNrZ3JvdW5kLXNpemU6IDE4NHB4O1xuICAgICAgICAgIHdpZHRoOiAxODRweDsgfVxuICAgICAgICAgIEBtZWRpYSAobWF4LXdpZHRoOiA3NjdweCkge1xuICAgICAgICAgICAgI3BhZ2UtY3JlYXRvciAuaGVyby1jZW50ZXIgLmJvdHRvbSAuY29udGFpbmVyIC5idG4uZ29vZ2xlLXBsYXkge1xuICAgICAgICAgICAgICBiYWNrZ3JvdW5kLXNpemU6IDEyM3B4O1xuICAgICAgICAgICAgICB3aWR0aDogMTIzcHg7IH0gfVxuICAjcGFnZS1jcmVhdG9yIC5oZXJvLWNlbnRlciBzdHJvbmcge1xuICAgIGZvbnQtd2VpZ2h0OiA1MDA7XG4gICAgY29sb3I6ICNlYmVlZjI7IH1cblxuLnByb2R1Y3QtY29tcGFyaXNvbiB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICBmbGV4LWZsb3c6IHJvdyB3cmFwO1xuICAtd2Via2l0LWZvbnQtc21vb3RoaW5nOiBhbnRpYWxpYXNlZDsgfVxuICAucHJvZHVjdC1jb21wYXJpc29uLmJpbGxpbmctdG9nZ2xlIHtcbiAgICBtYXJnaW4tYm90dG9tOiA1cHg7IH1cbiAgICAucHJvZHVjdC1jb21wYXJpc29uLmJpbGxpbmctdG9nZ2xlIGJ1dHRvbiB7XG4gICAgICBiYWNrZ3JvdW5kOiBub25lO1xuICAgICAgYm9yZGVyOiAwO1xuICAgICAgYm9yZGVyLWJvdHRvbTogMnB4IHNvbGlkICNlNmU5ZWU7XG4gICAgICBjb2xvcjogI2EwYTViMDtcbiAgICAgIGZvbnQtc2l6ZTogMTRweDtcbiAgICAgIHBhZGRpbmc6IDVweCAxNXB4O1xuICAgICAgdHJhbnNpdGlvbjogLjJzIGNvbG9yLCAuMnMgYm9yZGVyLWNvbG9yO1xuICAgICAgb3V0bGluZTogMDtcbiAgICAgIGxpbmUtaGVpZ2h0OiAyMS40cHg7XG4gICAgICBmb250LXNpemU6IDE1cHg7XG4gICAgICBmb250LXdlaWdodDogNTAwOyB9XG4gICAgICAucHJvZHVjdC1jb21wYXJpc29uLmJpbGxpbmctdG9nZ2xlIGJ1dHRvbi5hY3RpdmUsIC5wcm9kdWN0LWNvbXBhcmlzb24uYmlsbGluZy10b2dnbGUgYnV0dG9uOmhvdmVyIHtcbiAgICAgICAgY29sb3I6ICM0YThiZmM7XG4gICAgICAgIGJvcmRlci1jb2xvcjogIzRhOGJmYzsgfVxuICAucHJvZHVjdC1jb21wYXJpc29uIC5wbGFuIHtcbiAgICBib3JkZXI6IDJweCBzb2xpZCAjZWJlZWYyO1xuICAgIGJvcmRlci1yYWRpdXM6IDJweDtcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgbWFyZ2luOiAxNXB4IDZweDtcbiAgICBwYWRkaW5nOiAzMHB4IDEwcHg7XG4gICAgd2lkdGg6IGNhbGMoMjUlIC0gMTNweCk7XG4gICAgbWF4LXdpZHRoOiAyNTFweDtcbiAgICBtaW4td2lkdGg6IDIyNHB4O1xuICAgIGNvbG9yOiAjNTc2MDcwO1xuICAgIGJhY2tncm91bmQ6IHdoaXRlOyB9XG4gICAgLnByb2R1Y3QtY29tcGFyaXNvbiAucGxhbiAuZmFkZSB7XG4gICAgICBvcGFjaXR5OiAxO1xuICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgdHJhbnNpdGlvbjogLjJzIGVhc2UgYWxsO1xuICAgICAgbGVmdDogMDtcbiAgICAgIHJpZ2h0OiAwOyB9XG4gICAgICAucHJvZHVjdC1jb21wYXJpc29uIC5wbGFuIC5mYWRlLm5nLWhpZGUge1xuICAgICAgICBvcGFjaXR5OiAwO1xuICAgICAgICB0cmFuc2Zvcm06IHNjYWxlKDEuNSwgMS41KTsgfVxuICAgIC5wcm9kdWN0LWNvbXBhcmlzb24gLnBsYW4uZW50ZXJwcmlzZSB7XG4gICAgICBtYXJnaW4tdG9wOiAyMHB4O1xuICAgICAgd2lkdGg6IDY0MHB4O1xuICAgICAgbWF4LXdpZHRoOiAxMDAlO1xuICAgICAgcG9zaXRpb246IHJlbGF0aXZlOyB9XG4gICAgICAucHJvZHVjdC1jb21wYXJpc29uIC5wbGFuLmVudGVycHJpc2U6YmVmb3JlLCAucHJvZHVjdC1jb21wYXJpc29uIC5wbGFuLmVudGVycHJpc2U6YWZ0ZXIge1xuICAgICAgICBiYWNrZ3JvdW5kOiBuby1yZXBlYXQgY2VudGVyIGNlbnRlciB1cmwoXCIvaW1nL3Byby9jcmVhdG9yL2VudHJwcnMtc3RyLnBuZ1wiKTtcbiAgICAgICAgYmFja2dyb3VuZC1zaXplOiAyNnB4O1xuICAgICAgICB3aWR0aDogMjZweDtcbiAgICAgICAgaGVpZ2h0OiAyNHB4O1xuICAgICAgICBjb250ZW50OiAnJztcbiAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICBsZWZ0OiAtNTBweDsgfVxuICAgICAgLnByb2R1Y3QtY29tcGFyaXNvbiAucGxhbi5lbnRlcnByaXNlOmFmdGVyIHtcbiAgICAgICAgbGVmdDogYXV0bztcbiAgICAgICAgcmlnaHQ6IC01MHB4OyB9XG4gICAgICAucHJvZHVjdC1jb21wYXJpc29uIC5wbGFuLmVudGVycHJpc2UgaDMge1xuICAgICAgICBkaXNwbGF5OiBpbmxpbmU7XG4gICAgICAgIGZvbnQtc2l6ZTogMThweDtcbiAgICAgICAgZm9udC13ZWlnaHQ6IDcwMDtcbiAgICAgICAgbWFyZ2luLXJpZ2h0OiA1cHg7IH1cbiAgICAgIC5wcm9kdWN0LWNvbXBhcmlzb24gLnBsYW4uZW50ZXJwcmlzZSBwIHtcbiAgICAgICAgZGlzcGxheTogaW5saW5lO1xuICAgICAgICBmb250LXNpemU6IDE0cHg7XG4gICAgICAgIGZvbnQtd2VpZ2h0OiA0MDA7XG4gICAgICAgIGNvbG9yOiAjOWJhY2I2OyB9XG4gICAgICAgIC5wcm9kdWN0LWNvbXBhcmlzb24gLnBsYW4uZW50ZXJwcmlzZSBwIHN0cm9uZyB7XG4gICAgICAgICAgY29sb3I6ICNmNjY0ODY7XG4gICAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDsgfVxuICAgICAgLnByb2R1Y3QtY29tcGFyaXNvbiAucGxhbi5lbnRlcnByaXNlIGEge1xuICAgICAgICBmb250LXdlaWdodDogNjAwOyB9XG4gICAgLnByb2R1Y3QtY29tcGFyaXNvbiAucGxhbi5mcmVlIGgyIHtcbiAgICAgIGNvbG9yOiAjZjZhNDJlOyB9XG4gICAgLnByb2R1Y3QtY29tcGFyaXNvbiAucGxhbi5kZXYgaDIge1xuICAgICAgY29sb3I6ICM1YzY3NzU7IH1cbiAgICAucHJvZHVjdC1jb21wYXJpc29uIC5wbGFuLnBybyBoMiB7XG4gICAgICBjb2xvcjogIzM2Yzk3MTsgfVxuICAgIC5wcm9kdWN0LWNvbXBhcmlzb24gLnBsYW4uYnVzaW5lc3MgaDIge1xuICAgICAgY29sb3I6ICM4MzY0ZjY7IH1cbiAgICAucHJvZHVjdC1jb21wYXJpc29uIC5wbGFuIGhncm91cCB7XG4gICAgICBwYWRkaW5nOiAwOyB9XG4gICAgICAucHJvZHVjdC1jb21wYXJpc29uIC5wbGFuIGhncm91cCBoMixcbiAgICAgIC5wcm9kdWN0LWNvbXBhcmlzb24gLnBsYW4gaGdyb3VwIGgzLFxuICAgICAgLnByb2R1Y3QtY29tcGFyaXNvbiAucGxhbiBoZ3JvdXAgaDQsXG4gICAgICAucHJvZHVjdC1jb21wYXJpc29uIC5wbGFuIGhncm91cCBzbWFsbCB7XG4gICAgICAgIGNvbG9yOiAjNEM1NTVBO1xuICAgICAgICBtYXJnaW46IDA7IH1cbiAgICAgIC5wcm9kdWN0LWNvbXBhcmlzb24gLnBsYW4gaGdyb3VwIGgyIHtcbiAgICAgICAgZm9udC1zaXplOiAxNnB4O1xuICAgICAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xuICAgICAgICBsZXR0ZXItc3BhY2luZzogM3B4O1xuICAgICAgICBmb250LXdlaWdodDogNzAwO1xuICAgICAgICBtYXJnaW4tYm90dG9tOiAzMHB4OyB9XG4gICAgICAucHJvZHVjdC1jb21wYXJpc29uIC5wbGFuIGhncm91cCBoMyB7XG4gICAgICAgIGZvbnQtc2l6ZTogNTZweDtcbiAgICAgICAgZm9udC13ZWlnaHQ6IDcwMDtcbiAgICAgICAgaGVpZ2h0OiA2MXB4O1xuICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICAgIHdpZHRoOiAxMDAlOyB9XG4gICAgICAgIC5wcm9kdWN0LWNvbXBhcmlzb24gLnBsYW4gaGdyb3VwIGgzIHN1cCB7XG4gICAgICAgICAgZm9udC1zaXplOiAyMHB4O1xuICAgICAgICAgIHRvcDogLS41ZW07IH1cbiAgICAgICAgLnByb2R1Y3QtY29tcGFyaXNvbiAucGxhbiBoZ3JvdXAgaDMgc3ViIHtcbiAgICAgICAgICBmb250LXNpemU6IDE4cHg7XG4gICAgICAgICAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgICAgICAgICBib3R0b206IDA7IH1cbiAgICAgICAgLnByb2R1Y3QtY29tcGFyaXNvbiAucGxhbiBoZ3JvdXAgaDMgYSB7XG4gICAgICAgICAgZm9udC1zaXplOiAzN3B4O1xuICAgICAgICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTsgfVxuICAgICAgICAgIC5wcm9kdWN0LWNvbXBhcmlzb24gLnBsYW4gaGdyb3VwIGgzIGE6aG92ZXIsIC5wcm9kdWN0LWNvbXBhcmlzb24gLnBsYW4gaGdyb3VwIGgzIGE6YWN0aXZlIHtcbiAgICAgICAgICAgIGNvbG9yOiAjNGE4YmZjOyB9XG4gICAgICAucHJvZHVjdC1jb21wYXJpc29uIC5wbGFuIGhncm91cCBoNCB7XG4gICAgICAgIGZvbnQtc2l6ZTogMTZweDtcbiAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDtcbiAgICAgICAgY29sb3I6ICNhMGE1YjA7XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxNy42cHg7IH1cbiAgICAucHJvZHVjdC1jb21wYXJpc29uIC5wbGFuIHVsIHtcbiAgICAgIGxpc3Qtc3R5bGU6IG5vbmU7XG4gICAgICBwYWRkaW5nOiAyNXB4IDAgMDsgfVxuICAgICAgLnByb2R1Y3QtY29tcGFyaXNvbiAucGxhbiB1bCBsaSB7XG4gICAgICAgIHBhZGRpbmc6IDhweCAxMHB4O1xuICAgICAgICBtYXJnaW46IDAgLTEwcHg7XG4gICAgICAgIGZvbnQtc2l6ZTogMTRweDtcbiAgICAgICAgZm9udC13ZWlnaHQ6IDQwMDsgfVxuICAgICAgICAucHJvZHVjdC1jb21wYXJpc29uIC5wbGFuIHVsIGxpIHN0cm9uZyB7XG4gICAgICAgICAgZm9udC13ZWlnaHQ6IDQwMDtcbiAgICAgICAgICBjb2xvcjogIzRDNTU1QTsgfVxuICAgICAgICAucHJvZHVjdC1jb21wYXJpc29uIC5wbGFuIHVsIGxpLmZlYXR1cmUge1xuICAgICAgICAgIGJhY2tncm91bmQ6ICNmNmY4ZmE7IH1cbiAgICBAbWVkaWEgKG1heC13aWR0aDogMTIxOXB4KSB7XG4gICAgICAucHJvZHVjdC1jb21wYXJpc29uIC5wbGFuIHtcbiAgICAgICAgd2lkdGg6IDIwNXB4OyB9IH1cbiAgQG1lZGlhIChtYXgtd2lkdGg6IDk5MXB4KSB7XG4gICAgLnByb2R1Y3QtY29tcGFyaXNvbiB7XG4gICAgICBtYXgtd2lkdGg6IDQ4MHB4O1xuICAgICAgbWFyZ2luOiAwIGF1dG87IH0gfVxuXG4uYWxzby1pbmNsdWRlZCBoMyB7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgbWFyZ2luOiA4NXB4IGF1dG87XG4gIGZvbnQtd2VpZ2h0OiA0MDA7IH1cblxuLmFsc28taW5jbHVkZWQgc3Ryb25nIHtcbiAgZm9udC1zaXplOiAxNnB4O1xuICBmb250LXdlaWdodDogNTAwO1xuICBtYXJnaW4tYm90dG9tOiAxNHB4O1xuICBkaXNwbGF5OiBibG9jazsgfVxuXG4uYWxzby1pbmNsdWRlZCBwIHtcbiAgZm9udC1zaXplOiAxNHB4O1xuICBjb2xvcjogIzg5ODk4OTtcbiAgbGluZS1oZWlnaHQ6IDEuOGVtO1xuICBmb250LXdlaWdodDogNDAwOyB9XG5cbi5hbHNvLWluY2x1ZGVkIHVsIHtcbiAgcGFkZGluZzogMCA3MnB4O1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWZsb3c6IHJvdyB3cmFwO1xuICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47IH1cblxuLmFsc28taW5jbHVkZWQgbGkge1xuICB3aWR0aDogMjk1cHg7XG4gIGxpc3Qtc3R5bGU6IG5vbmU7XG4gIHBhZGRpbmctbGVmdDogMjhweDtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBtYXJnaW4tYm90dG9tOiA4MHB4OyB9XG4gIC5hbHNvLWluY2x1ZGVkIGxpOjpiZWZvcmUge1xuICAgIGJhY2tncm91bmQ6IHRvcCBjZW50ZXIgbm8tcmVwZWF0IHVybChcIi9pbWcvcHJvL2NyZWF0b3IvaW5jbHVkZWQtaWNvbnMucG5nXCIpO1xuICAgIGJhY2tncm91bmQtc2l6ZTogMjBweDtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgY29udGVudDogJyc7XG4gICAgd2lkdGg6IDIwcHg7XG4gICAgaGVpZ2h0OiAyMHB4O1xuICAgIGxlZnQ6IDA7XG4gICAgdG9wOiAwOyB9XG4gIC5hbHNvLWluY2x1ZGVkIGxpLnNoYXJpbmc6OmJlZm9yZSB7XG4gICAgYmFja2dyb3VuZC1wb3NpdGlvbjogY2VudGVyIC0yMHB4OyB9XG4gIC5hbHNvLWluY2x1ZGVkIGxpLmlvbmljOjpiZWZvcmUge1xuICAgIGJhY2tncm91bmQtcG9zaXRpb246IGNlbnRlciAtNDBweDsgfVxuICAuYWxzby1pbmNsdWRlZCBsaS50ZW1wbGF0ZXM6OmJlZm9yZSB7XG4gICAgYmFja2dyb3VuZC1wb3NpdGlvbjogY2VudGVyIC02MHB4OyB9XG4gIC5hbHNvLWluY2x1ZGVkIGxpLmV4cG9ydGluZzo6YmVmb3JlIHtcbiAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiBjZW50ZXIgLTgwcHg7IH1cbiAgLmFsc28taW5jbHVkZWQgbGkucHJldmlldzo6YmVmb3JlIHtcbiAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiBjZW50ZXIgLTEwMHB4OyB9XG5cbi5mYXEge1xuICBiYWNrZ3JvdW5kOiAjZjZmOGZhO1xuICBwYWRkaW5nLWJvdHRvbTogMTIwcHg7IH1cbiAgLmZhcSBoZ3JvdXAge1xuICAgIHBhZGRpbmctdG9wOiAxMDBweDtcbiAgICBwYWRkaW5nLWJvdHRvbTogMTBweDsgfVxuICAuZmFxIC5jb2xzIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICAgIC13ZWJraXQtZm9udC1zbW9vdGhpbmc6IGFudGlhbGlhc2VkOyB9XG4gIC5mYXEgLmNvbCB7XG4gICAgbWF4LXdpZHRoOiAzOTVweDtcbiAgICBtYXJnaW46IDAgNDVweDsgfVxuICAgIC5mYXEgLmNvbCBkdCB7XG4gICAgICBmb250LXdlaWdodDogNTAwO1xuICAgICAgZm9udC1zaXplOiAxNnB4O1xuICAgICAgbWFyZ2luOiA3MHB4IDAgMTRweDtcbiAgICAgIGxpbmUtaGVpZ2h0OiAyMHB4OyB9XG4gICAgLmZhcSAuY29sIGRkIHtcbiAgICAgIGNvbG9yOiAjODA4NjkyO1xuICAgICAgZm9udC1zaXplOiAxNHB4O1xuICAgICAgbGluZS1oZWlnaHQ6IDJlbTsgfVxuICAgICAgLmZhcSAuY29sIGRkIHN0cm9uZyB7XG4gICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7XG4gICAgICAgIGNvbG9yOiAjODA4NjkyOyB9XG4gIEBtZWRpYSAobWF4LXdpZHRoOiA3NjdweCkge1xuICAgIC5mYXEge1xuICAgICAgZGlzcGxheTogYmxvY2s7IH1cbiAgICAgIC5mYXEgLmNvbHMge1xuICAgICAgICBkaXNwbGF5OiBibG9jazsgfVxuICAgICAgLmZhcSAuY29sIHtcbiAgICAgICAgbWF4LXdpZHRoOiAxMDAlOyB9IH1cblxuLmJyb2R5IHtcbiAgYmFja2dyb3VuZDogcmlnaHQgYm90dG9tIG5vLXJlcGVhdCB1cmwoXCIvaW1nL3Byby9jcmVhdG9yL3N1cHBvcnQtYnJvZHkuanBnXCIpO1xuICBiYWNrZ3JvdW5kLXNpemU6IDYwJTtcbiAgbWluLWhlaWdodDogNTUwcHg7XG4gIHBhZGRpbmctYm90dG9tOiAxMDBweDtcbiAgcGFkZGluZy10b3A6IDMycHg7IH1cbiAgLmJyb2R5ICsgLnRhaWwge1xuICAgIG1hcmdpbi10b3A6IDA7IH1cbiAgLmJyb2R5IGRsIHtcbiAgICB3aWR0aDogNDUlOyB9XG4gICAgLmJyb2R5IGRsIGR0IHtcbiAgICAgIHBhZGRpbmc6IDUwcHggMCAxMHB4O1xuICAgICAgZm9udC1zaXplOiAxOHB4O1xuICAgICAgZm9udC13ZWlnaHQ6IDQwMDsgfVxuICAgIC5icm9keSBkbCBkZCB7XG4gICAgICBjb2xvcjogIzU3NjA3MDtcbiAgICAgIGZvbnQtc2l6ZTogMTRweDtcbiAgICAgIGxpbmUtaGVpZ2h0OiAxLjllbTtcbiAgICAgIGZvbnQtd2VpZ2h0OiA0MDA7IH1cbiAgQG1lZGlhIChtYXgtd2lkdGg6IDc2N3B4KSB7XG4gICAgLmJyb2R5IHtcbiAgICAgIGJhY2tncm91bmQtcG9zaXRpb246IGNlbnRlciBib3R0b207XG4gICAgICBwYWRkaW5nLWJvdHRvbTogMjUwcHg7XG4gICAgICBiYWNrZ3JvdW5kLXNpemU6IDMwMHB4OyB9XG4gICAgICAuYnJvZHkgZGwge1xuICAgICAgICB3aWR0aDogMTAwJTsgfSB9XG5cbiNib2R5LWNyZWF0b3ItZG9jcyxcbiNib2R5LWNyZWF0b3ItZG9jcyAuY29udGFpbmVyIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlOyB9XG5cbiNib2R5LWNyZWF0b3ItZG9jcyAjaW5kZXgge1xuICAtd2Via2l0LWZvbnQtc21vb3RoaW5nOiBhbnRpYWxpYXNlZDtcbiAgcG9zaXRpb246IGZpeGVkO1xuICBtYXgtaGVpZ2h0OiAxMDAlO1xuICBvdmVyZmxvdy15OiBhdXRvO1xuICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuOCk7IH1cbiAgQG1lZGlhIChtaW4td2lkdGg6IDEyMjBweCkge1xuICAgICNib2R5LWNyZWF0b3ItZG9jcyAjaW5kZXgge1xuICAgICAgd2lkdGg6IDI3N3B4OyB9IH1cbiAgQG1lZGlhIChtYXgtd2lkdGg6IDEyMTlweCkgYW5kIChtaW4td2lkdGg6IDk5MnB4KSB7XG4gICAgI2JvZHktY3JlYXRvci1kb2NzICNpbmRleCB7XG4gICAgICB3aWR0aDogMjEycHg7IH0gfVxuICBAbWVkaWEgKG1heC13aWR0aDogOTkxcHgpIGFuZCAobWluLXdpZHRoOiA3NjhweCkge1xuICAgICNib2R5LWNyZWF0b3ItZG9jcyAjaW5kZXgge1xuICAgICAgd2lkdGg6IDE1N3B4OyB9IH1cbiAgQG1lZGlhIChtYXgtd2lkdGg6IDc2N3B4KSB7XG4gICAgI2JvZHktY3JlYXRvci1kb2NzICNpbmRleCB7XG4gICAgICB3aWR0aDogMTAwJTtcbiAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZSAhaW1wb3J0YW50OyB9IH1cbiAgI2JvZHktY3JlYXRvci1kb2NzICNpbmRleC5ib3R0b20ge1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICBib3R0b206IDA7IH1cbiAgI2JvZHktY3JlYXRvci1kb2NzICNpbmRleCB1bCB7XG4gICAgcGFkZGluZy1sZWZ0OiAwO1xuICAgIGxpc3Qtc3R5bGU6IG5vbmU7IH1cbiAgICAjYm9keS1jcmVhdG9yLWRvY3MgI2luZGV4IHVsIGEge1xuICAgICAgZm9udC1zaXplOiAxNnB4O1xuICAgICAgY29sb3I6ICM0QzU1NUE7XG4gICAgICBmb250LXdlaWdodDogNDAwO1xuICAgICAgbWFyZ2luOiAxLjFlbSAwO1xuICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICBib3JkZXItcmlnaHQ6IDJweCBzb2xpZCB0cmFuc3BhcmVudDtcbiAgICAgIHRyYW5zaXRpb246IGNvbG9yIC4ycywgYm9yZGVyLWNvbG9yIC4yczsgfVxuICAgICNib2R5LWNyZWF0b3ItZG9jcyAjaW5kZXggdWwgdWwgLmFjdGl2ZSA+IGEsXG4gICAgI2JvZHktY3JlYXRvci1kb2NzICNpbmRleCB1bCBhOmhvdmVyIHtcbiAgICAgIGNvbG9yOiAjNGE4YmZjO1xuICAgICAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xuICAgICAgYmFja2dyb3VuZDogbm9uZTsgfVxuICAgICNib2R5LWNyZWF0b3ItZG9jcyAjaW5kZXggdWwgdWwge1xuICAgICAgcGFkZGluZy1sZWZ0OiAyNXB4O1xuICAgICAgcGFkZGluZy1yaWdodDogMjVweDsgfVxuICAgICAgI2JvZHktY3JlYXRvci1kb2NzICNpbmRleCB1bCB1bC5hbmltYXRlLXNob3cge1xuICAgICAgICBvcGFjaXR5OiAxOyB9XG4gICAgICAgICNib2R5LWNyZWF0b3ItZG9jcyAjaW5kZXggdWwgdWwuYW5pbWF0ZS1zaG93IGEge1xuICAgICAgICAgIG1pbi1oZWlnaHQ6IDIwcHg7XG4gICAgICAgICAgbWF4LWhlaWdodDogMTUwcHg7IH1cbiAgICAgICAgI2JvZHktY3JlYXRvci1kb2NzICNpbmRleCB1bCB1bC5hbmltYXRlLXNob3cubmctaGlkZS1hZGQsICNib2R5LWNyZWF0b3ItZG9jcyAjaW5kZXggdWwgdWwuYW5pbWF0ZS1zaG93Lm5nLWhpZGUtcmVtb3ZlIHtcbiAgICAgICAgICB0cmFuc2l0aW9uOiBhbGwgbGluZWFyIC4yczsgfVxuICAgICAgICAjYm9keS1jcmVhdG9yLWRvY3MgI2luZGV4IHVsIHVsLmFuaW1hdGUtc2hvdy5uZy1oaWRlIHtcbiAgICAgICAgICBvcGFjaXR5OiAwOyB9XG4gICAgICAgICAgI2JvZHktY3JlYXRvci1kb2NzICNpbmRleCB1bCB1bC5hbmltYXRlLXNob3cubmctaGlkZSBhIHtcbiAgICAgICAgICAgIG1heC1oZWlnaHQ6IDA7IH1cbiAgICAgICNib2R5LWNyZWF0b3ItZG9jcyAjaW5kZXggdWwgdWwgYSB7XG4gICAgICAgIGZvbnQtc2l6ZTogMTRweDtcbiAgICAgICAgY29sb3I6ICNhMGE1YjA7XG4gICAgICAgIGZvbnQtd2VpZ2h0OiA0MDA7XG4gICAgICAgIHRyYW5zaXRpb246IGFsbCBsaW5lYXIgLjJzOyB9XG4gICAgICAjYm9keS1jcmVhdG9yLWRvY3MgI2luZGV4IHVsIHVsIC5hY3RpdmUgYSB7XG4gICAgICAgIGJvcmRlci1jb2xvcjogIzRhOGJmYztcbiAgICAgICAgb3ZlcmZsb3cteTogaGlkZGVuOyB9XG5cbiNkb2NzIGgxLFxuI2RvY3MgaDIsXG4jZG9jcyBoMyxcbiNkb2NzIGg0LFxuI2RvY3MgaDUsXG4jZG9jcyBoNiB7XG4gIGZvbnQtd2VpZ2h0OiA2MDA7XG4gIG1hcmdpbjogMi4yZW0gMCAuOGVtO1xuICBsaW5lLWhlaWdodDogMmVtOyB9XG5cbiNkb2NzIGgyIHtcbiAgZm9udC1zaXplOiAyMHB4OyB9XG5cbiNkb2NzIGgzIHtcbiAgZm9udC1zaXplOiAxOHB4OyB9XG5cbiNkb2NzIGg0IHtcbiAgZm9udC1zaXplOiAxNnB4OyB9XG5cbiNkb2NzIHAge1xuICBmb250LXNpemU6IDE0cHg7XG4gIGNvbG9yOiAjODk4OTg5O1xuICBsaW5lLWhlaWdodDogMmVtO1xuICBmb250LXdlaWdodDogNDAwOyB9XG5cbi5zdHVkaW8tY2FsbG91dCB7XG4gIG1hcmdpbjogMTAwcHggMDtcbiAgYmFja2dyb3VuZC1jb2xvcjogIzRENUI2OTtcbiAgYm9yZGVyLXJhZGl1czogOHB4O1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGFsaWduLWl0ZW1zOiBmbGV4LXN0YXJ0OyB9XG4gIC5zdHVkaW8tY2FsbG91dCBoZ3JvdXAge1xuICAgIGZsZXg6IDAgMCA0NSU7XG4gICAgcGFkZGluZzogMDtcbiAgICB0ZXh0LWFsaWduOiBsZWZ0O1xuICAgIHBhZGRpbmc6IDgwcHggMCA4MHB4IDgwcHg7IH1cbiAgICAuc3R1ZGlvLWNhbGxvdXQgaGdyb3VwIGgzIHtcbiAgICAgIG1hcmdpbi10b3A6IDA7XG4gICAgICBtYXJnaW4tYm90dG9tOiAyMnB4O1xuICAgICAgZm9udC13ZWlnaHQ6IDUwMDtcbiAgICAgIGNvbG9yOiAjZmZmOyB9XG4gICAgLnN0dWRpby1jYWxsb3V0IGhncm91cCBwIHtcbiAgICAgIGZvbnQtc2l6ZTogMThweDtcbiAgICAgIGxpbmUtaGVpZ2h0OiAyNHB4O1xuICAgICAgY29sb3I6ICNEREREREQ7XG4gICAgICBtYXJnaW4tYm90dG9tOiAyMHB4OyB9XG4gICAgLnN0dWRpby1jYWxsb3V0IGhncm91cCBwIHN0cm9uZyB7XG4gICAgICBmb250LXdlaWdodDogNjAwO1xuICAgICAgY29sb3I6ICNmZmY7IH1cbiAgICAuc3R1ZGlvLWNhbGxvdXQgaGdyb3VwIC5idG4ge1xuICAgICAgcGFkZGluZzogMTFweCAyMHB4O1xuICAgICAgZm9udC1zaXplOiAxNnB4OyB9XG4gIC5zdHVkaW8tY2FsbG91dCBpbWcge1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICB0b3A6IDA7XG4gICAgcmlnaHQ6IDA7XG4gICAgd2lkdGg6IDUwJSAhaW1wb3J0YW50OyB9XG4gIEBtZWRpYSAobWF4LXdpZHRoOiAxMjIwcHgpIHtcbiAgICAuc3R1ZGlvLWNhbGxvdXQgaGdyb3VwIHtcbiAgICAgIHBhZGRpbmc6IDQwcHggMCA0MHB4IDQwcHg7IH0gfVxuICBAbWVkaWEgKG1heC13aWR0aDogNzY4cHgpIHtcbiAgICAuc3R1ZGlvLWNhbGxvdXQge1xuICAgICAgbWFyZ2luOiAxMjBweCAwIDA7XG4gICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uLXJldmVyc2U7XG4gICAgICBhbGlnbi1pdGVtczogY2VudGVyOyB9XG4gICAgICAuc3R1ZGlvLWNhbGxvdXQgaW1nIHtcbiAgICAgICAgd2lkdGg6IDEwMCUgIWltcG9ydGFudDtcbiAgICAgICAgbWF4LXdpZHRoOiA0NzVweDtcbiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICAgICBtYXJnaW4tYm90dG9tOiAtMTAwcHg7XG4gICAgICAgIG1hcmdpbi10b3A6IC02MHB4O1xuICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICAgIHotaW5kZXg6IDE7IH1cbiAgICAgIC5zdHVkaW8tY2FsbG91dCBoZ3JvdXAge1xuICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICAgICAgcGFkZGluZzogNDBweDtcbiAgICAgICAgei1pbmRleDogMjsgfSB9XG4gIEBtZWRpYSAobWF4LXdpZHRoOiA0ODBweCkge1xuICAgIC5zdHVkaW8tY2FsbG91dCBoZ3JvdXAge1xuICAgICAgcGFkZGluZy1sZWZ0OiAyMHB4O1xuICAgICAgcGFkZGluZy1yaWdodDogMjBweDsgfVxuICAgICAgLnN0dWRpby1jYWxsb3V0IGhncm91cCBwIHtcbiAgICAgICAgZm9udC1zaXplOiAxNnB4OyB9IH1cbiIsIi8qISBTb3VyY2U6IGh0dHBzOi8vZ2l0aHViLmNvbS9oNWJwL2h0bWw1LWJvaWxlcnBsYXRlL2Jsb2IvbWFzdGVyL3NyYy9jc3MvbWFpbi5jc3MgKi9cblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIFByaW50IHN0eWxlcy5cbi8vIElubGluZWQgdG8gYXZvaWQgdGhlIGFkZGl0aW9uYWwgSFRUUCByZXF1ZXN0OiBoNWJwLmNvbS9yXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG5AbWVkaWEgcHJpbnQge1xuICAgICosXG4gICAgKjpiZWZvcmUsXG4gICAgKjphZnRlciB7XG4gICAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50ICFpbXBvcnRhbnQ7XG4gICAgICAgIGNvbG9yOiAjMDAwICFpbXBvcnRhbnQ7IC8vIEJsYWNrIHByaW50cyBmYXN0ZXI6IGg1YnAuY29tL3NcbiAgICAgICAgYm94LXNoYWRvdzogbm9uZSAhaW1wb3J0YW50O1xuICAgICAgICB0ZXh0LXNoYWRvdzogbm9uZSAhaW1wb3J0YW50O1xuICAgIH1cblxuICAgIGEsXG4gICAgYTp2aXNpdGVkIHtcbiAgICAgICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XG4gICAgfVxuXG4gICAgYVtocmVmXTphZnRlciB7XG4gICAgICAgIGNvbnRlbnQ6IFwiIChcIiBhdHRyKGhyZWYpIFwiKVwiO1xuICAgIH1cblxuICAgIGFiYnJbdGl0bGVdOmFmdGVyIHtcbiAgICAgICAgY29udGVudDogXCIgKFwiIGF0dHIodGl0bGUpIFwiKVwiO1xuICAgIH1cblxuICAgIC8vIERvbid0IHNob3cgbGlua3MgdGhhdCBhcmUgZnJhZ21lbnQgaWRlbnRpZmllcnMsXG4gICAgLy8gb3IgdXNlIHRoZSBgamF2YXNjcmlwdDpgIHBzZXVkbyBwcm90b2NvbFxuICAgIGFbaHJlZl49XCIjXCJdOmFmdGVyLFxuICAgIGFbaHJlZl49XCJqYXZhc2NyaXB0OlwiXTphZnRlciB7XG4gICAgICAgIGNvbnRlbnQ6IFwiXCI7XG4gICAgfVxuXG4gICAgcHJlLFxuICAgIGJsb2NrcXVvdGUge1xuICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAjOTk5O1xuICAgICAgICBwYWdlLWJyZWFrLWluc2lkZTogYXZvaWQ7XG4gICAgfVxuXG4gICAgdGhlYWQge1xuICAgICAgICBkaXNwbGF5OiB0YWJsZS1oZWFkZXItZ3JvdXA7IC8vIGg1YnAuY29tL3RcbiAgICB9XG5cbiAgICB0cixcbiAgICBpbWcge1xuICAgICAgICBwYWdlLWJyZWFrLWluc2lkZTogYXZvaWQ7XG4gICAgfVxuXG4gICAgaW1nIHtcbiAgICAgICAgbWF4LXdpZHRoOiAxMDAlICFpbXBvcnRhbnQ7XG4gICAgfVxuXG4gICAgcCxcbiAgICBoMixcbiAgICBoMyB7XG4gICAgICAgIG9ycGhhbnM6IDM7XG4gICAgICAgIHdpZG93czogMztcbiAgICB9XG5cbiAgICBoMixcbiAgICBoMyB7XG4gICAgICAgIHBhZ2UtYnJlYWstYWZ0ZXI6IGF2b2lkO1xuICAgIH1cblxuICAgIC8vIEJvb3RzdHJhcCBzcGVjaWZpYyBjaGFuZ2VzIHN0YXJ0XG4gICAgLy9cbiAgICAvLyBDaHJvbWUgKE9TWCkgZml4IGZvciBodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvaXNzdWVzLzExMjQ1XG4gICAgLy8gT25jZSBmaXhlZCwgd2UgY2FuIGp1c3Qgc3RyYWlnaHQgdXAgcmVtb3ZlIHRoaXMuXG4gICAgc2VsZWN0IHtcbiAgICAgICAgYmFja2dyb3VuZDogI2ZmZiAhaW1wb3J0YW50O1xuICAgIH1cblxuICAgIC8vIEJvb3RzdHJhcCBjb21wb25lbnRzXG4gICAgLm5hdmJhciB7XG4gICAgICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgfVxuICAgIC5idG4sXG4gICAgLmRyb3B1cCA+IC5idG4ge1xuICAgICAgICA+IC5jYXJldCB7XG4gICAgICAgICAgICBib3JkZXItdG9wLWNvbG9yOiAjMDAwICFpbXBvcnRhbnQ7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLmxhYmVsIHtcbiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgIzAwMDtcbiAgICB9XG5cbiAgICAudGFibGUge1xuICAgICAgICBib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlICFpbXBvcnRhbnQ7XG5cbiAgICAgICAgdGQsXG4gICAgICAgIHRoIHtcbiAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICNmZmYgIWltcG9ydGFudDtcbiAgICAgICAgfVxuICAgIH1cbiAgICAudGFibGUtYm9yZGVyZWQge1xuICAgICAgICB0aCxcbiAgICAgICAgdGQge1xuICAgICAgICAgICAgYm9yZGVyOiAxcHggc29saWQgI2RkZCAhaW1wb3J0YW50O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gQm9vdHN0cmFwIHNwZWNpZmljIGNoYW5nZXMgZW5kXG59XG4iLCIvL1xuLy8gR2x5cGhpY29ucyBmb3IgQm9vdHN0cmFwXG4vL1xuLy8gU2luY2UgaWNvbnMgYXJlIGZvbnRzLCB0aGV5IGNhbiBiZSBwbGFjZWQgYW55d2hlcmUgdGV4dCBpcyBwbGFjZWQgYW5kIGFyZVxuLy8gdGh1cyBhdXRvbWF0aWNhbGx5IHNpemVkIHRvIG1hdGNoIHRoZSBzdXJyb3VuZGluZyBjaGlsZC4gVG8gdXNlLCBjcmVhdGUgYW5cbi8vIGlubGluZSBlbGVtZW50IHdpdGggdGhlIGFwcHJvcHJpYXRlIGNsYXNzZXMsIGxpa2Ugc286XG4vL1xuLy8gPGEgaHJlZj1cIiNcIj48c3BhbiBjbGFzcz1cImdseXBoaWNvbiBnbHlwaGljb24tc3RhclwiPjwvc3Bhbj4gU3RhcjwvYT5cblxuLy8gSW1wb3J0IHRoZSBmb250c1xuQGZvbnQtZmFjZSB7XG4gIGZvbnQtZmFtaWx5OiAnR2x5cGhpY29ucyBIYWxmbGluZ3MnO1xuICBzcmM6IHVybChpZigkYm9vdHN0cmFwLXNhc3MtYXNzZXQtaGVscGVyLCB0d2JzLWZvbnQtcGF0aCgnI3skaWNvbi1mb250LXBhdGh9I3skaWNvbi1mb250LW5hbWV9LmVvdCcpLCAnI3skaWNvbi1mb250LXBhdGh9I3skaWNvbi1mb250LW5hbWV9LmVvdCcpKTtcbiAgc3JjOiB1cmwoaWYoJGJvb3RzdHJhcC1zYXNzLWFzc2V0LWhlbHBlciwgdHdicy1mb250LXBhdGgoJyN7JGljb24tZm9udC1wYXRofSN7JGljb24tZm9udC1uYW1lfS5lb3Q/I2llZml4JyksICcjeyRpY29uLWZvbnQtcGF0aH0jeyRpY29uLWZvbnQtbmFtZX0uZW90PyNpZWZpeCcpKSBmb3JtYXQoJ2VtYmVkZGVkLW9wZW50eXBlJyksXG4gICAgICAgdXJsKGlmKCRib290c3RyYXAtc2Fzcy1hc3NldC1oZWxwZXIsIHR3YnMtZm9udC1wYXRoKCcjeyRpY29uLWZvbnQtcGF0aH0jeyRpY29uLWZvbnQtbmFtZX0ud29mZjInKSwgJyN7JGljb24tZm9udC1wYXRofSN7JGljb24tZm9udC1uYW1lfS53b2ZmMicpKSBmb3JtYXQoJ3dvZmYyJyksXG4gICAgICAgdXJsKGlmKCRib290c3RyYXAtc2Fzcy1hc3NldC1oZWxwZXIsIHR3YnMtZm9udC1wYXRoKCcjeyRpY29uLWZvbnQtcGF0aH0jeyRpY29uLWZvbnQtbmFtZX0ud29mZicpLCAnI3skaWNvbi1mb250LXBhdGh9I3skaWNvbi1mb250LW5hbWV9LndvZmYnKSkgZm9ybWF0KCd3b2ZmJyksXG4gICAgICAgdXJsKGlmKCRib290c3RyYXAtc2Fzcy1hc3NldC1oZWxwZXIsIHR3YnMtZm9udC1wYXRoKCcjeyRpY29uLWZvbnQtcGF0aH0jeyRpY29uLWZvbnQtbmFtZX0udHRmJyksICcjeyRpY29uLWZvbnQtcGF0aH0jeyRpY29uLWZvbnQtbmFtZX0udHRmJykpIGZvcm1hdCgndHJ1ZXR5cGUnKSxcbiAgICAgICB1cmwoaWYoJGJvb3RzdHJhcC1zYXNzLWFzc2V0LWhlbHBlciwgdHdicy1mb250LXBhdGgoJyN7JGljb24tZm9udC1wYXRofSN7JGljb24tZm9udC1uYW1lfS5zdmcjI3skaWNvbi1mb250LXN2Zy1pZH0nKSwgJyN7JGljb24tZm9udC1wYXRofSN7JGljb24tZm9udC1uYW1lfS5zdmcjI3skaWNvbi1mb250LXN2Zy1pZH0nKSkgZm9ybWF0KCdzdmcnKTtcbn1cblxuLy8gQ2F0Y2hhbGwgYmFzZWNsYXNzXG4uZ2x5cGhpY29uIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICB0b3A6IDFweDtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICBmb250LWZhbWlseTogJ0dseXBoaWNvbnMgSGFsZmxpbmdzJztcbiAgZm9udC1zdHlsZTogbm9ybWFsO1xuICBmb250LXdlaWdodDogbm9ybWFsO1xuICBsaW5lLWhlaWdodDogMTtcbiAgLXdlYmtpdC1mb250LXNtb290aGluZzogYW50aWFsaWFzZWQ7XG4gIC1tb3otb3N4LWZvbnQtc21vb3RoaW5nOiBncmF5c2NhbGU7XG59XG5cbi8vIEluZGl2aWR1YWwgaWNvbnNcbi5nbHlwaGljb24tYXN0ZXJpc2sgICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXDJhXCI7IH0gfVxuLmdseXBoaWNvbi1wbHVzICAgICAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcMmJcIjsgfSB9XG4uZ2x5cGhpY29uLWV1cm8sXG4uZ2x5cGhpY29uLWV1ciAgICAgICAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFwyMGFjXCI7IH0gfVxuLmdseXBoaWNvbi1taW51cyAgICAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcMjIxMlwiOyB9IH1cbi5nbHlwaGljb24tY2xvdWQgICAgICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXDI2MDFcIjsgfSB9XG4uZ2x5cGhpY29uLWVudmVsb3BlICAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFwyNzA5XCI7IH0gfVxuLmdseXBoaWNvbi1wZW5jaWwgICAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcMjcwZlwiOyB9IH1cbi5nbHlwaGljb24tZ2xhc3MgICAgICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUwMDFcIjsgfSB9XG4uZ2x5cGhpY29uLW11c2ljICAgICAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMDAyXCI7IH0gfVxuLmdseXBoaWNvbi1zZWFyY2ggICAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTAwM1wiOyB9IH1cbi5nbHlwaGljb24taGVhcnQgICAgICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUwMDVcIjsgfSB9XG4uZ2x5cGhpY29uLXN0YXIgICAgICAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMDA2XCI7IH0gfVxuLmdseXBoaWNvbi1zdGFyLWVtcHR5ICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTAwN1wiOyB9IH1cbi5nbHlwaGljb24tdXNlciAgICAgICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUwMDhcIjsgfSB9XG4uZ2x5cGhpY29uLWZpbG0gICAgICAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMDA5XCI7IH0gfVxuLmdseXBoaWNvbi10aC1sYXJnZSAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTAxMFwiOyB9IH1cbi5nbHlwaGljb24tdGggICAgICAgICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUwMTFcIjsgfSB9XG4uZ2x5cGhpY29uLXRoLWxpc3QgICAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMDEyXCI7IH0gfVxuLmdseXBoaWNvbi1vayAgICAgICAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTAxM1wiOyB9IH1cbi5nbHlwaGljb24tcmVtb3ZlICAgICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUwMTRcIjsgfSB9XG4uZ2x5cGhpY29uLXpvb20taW4gICAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMDE1XCI7IH0gfVxuLmdseXBoaWNvbi16b29tLW91dCAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTAxNlwiOyB9IH1cbi5nbHlwaGljb24tb2ZmICAgICAgICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUwMTdcIjsgfSB9XG4uZ2x5cGhpY29uLXNpZ25hbCAgICAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMDE4XCI7IH0gfVxuLmdseXBoaWNvbi1jb2cgICAgICAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTAxOVwiOyB9IH1cbi5nbHlwaGljb24tdHJhc2ggICAgICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUwMjBcIjsgfSB9XG4uZ2x5cGhpY29uLWhvbWUgICAgICAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMDIxXCI7IH0gfVxuLmdseXBoaWNvbi1maWxlICAgICAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTAyMlwiOyB9IH1cbi5nbHlwaGljb24tdGltZSAgICAgICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUwMjNcIjsgfSB9XG4uZ2x5cGhpY29uLXJvYWQgICAgICAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMDI0XCI7IH0gfVxuLmdseXBoaWNvbi1kb3dubG9hZC1hbHQgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTAyNVwiOyB9IH1cbi5nbHlwaGljb24tZG93bmxvYWQgICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUwMjZcIjsgfSB9XG4uZ2x5cGhpY29uLXVwbG9hZCAgICAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMDI3XCI7IH0gfVxuLmdseXBoaWNvbi1pbmJveCAgICAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTAyOFwiOyB9IH1cbi5nbHlwaGljb24tcGxheS1jaXJjbGUgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUwMjlcIjsgfSB9XG4uZ2x5cGhpY29uLXJlcGVhdCAgICAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMDMwXCI7IH0gfVxuLmdseXBoaWNvbi1yZWZyZXNoICAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTAzMVwiOyB9IH1cbi5nbHlwaGljb24tbGlzdC1hbHQgICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUwMzJcIjsgfSB9XG4uZ2x5cGhpY29uLWxvY2sgICAgICAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMDMzXCI7IH0gfVxuLmdseXBoaWNvbi1mbGFnICAgICAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTAzNFwiOyB9IH1cbi5nbHlwaGljb24taGVhZHBob25lcyAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUwMzVcIjsgfSB9XG4uZ2x5cGhpY29uLXZvbHVtZS1vZmYgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMDM2XCI7IH0gfVxuLmdseXBoaWNvbi12b2x1bWUtZG93biAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTAzN1wiOyB9IH1cbi5nbHlwaGljb24tdm9sdW1lLXVwICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUwMzhcIjsgfSB9XG4uZ2x5cGhpY29uLXFyY29kZSAgICAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMDM5XCI7IH0gfVxuLmdseXBoaWNvbi1iYXJjb2RlICAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTA0MFwiOyB9IH1cbi5nbHlwaGljb24tdGFnICAgICAgICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUwNDFcIjsgfSB9XG4uZ2x5cGhpY29uLXRhZ3MgICAgICAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMDQyXCI7IH0gfVxuLmdseXBoaWNvbi1ib29rICAgICAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTA0M1wiOyB9IH1cbi5nbHlwaGljb24tYm9va21hcmsgICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUwNDRcIjsgfSB9XG4uZ2x5cGhpY29uLXByaW50ICAgICAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMDQ1XCI7IH0gfVxuLmdseXBoaWNvbi1jYW1lcmEgICAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTA0NlwiOyB9IH1cbi5nbHlwaGljb24tZm9udCAgICAgICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUwNDdcIjsgfSB9XG4uZ2x5cGhpY29uLWJvbGQgICAgICAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMDQ4XCI7IH0gfVxuLmdseXBoaWNvbi1pdGFsaWMgICAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTA0OVwiOyB9IH1cbi5nbHlwaGljb24tdGV4dC1oZWlnaHQgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUwNTBcIjsgfSB9XG4uZ2x5cGhpY29uLXRleHQtd2lkdGggICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMDUxXCI7IH0gfVxuLmdseXBoaWNvbi1hbGlnbi1sZWZ0ICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTA1MlwiOyB9IH1cbi5nbHlwaGljb24tYWxpZ24tY2VudGVyICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUwNTNcIjsgfSB9XG4uZ2x5cGhpY29uLWFsaWduLXJpZ2h0ICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMDU0XCI7IH0gfVxuLmdseXBoaWNvbi1hbGlnbi1qdXN0aWZ5ICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTA1NVwiOyB9IH1cbi5nbHlwaGljb24tbGlzdCAgICAgICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUwNTZcIjsgfSB9XG4uZ2x5cGhpY29uLWluZGVudC1sZWZ0ICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMDU3XCI7IH0gfVxuLmdseXBoaWNvbi1pbmRlbnQtcmlnaHQgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTA1OFwiOyB9IH1cbi5nbHlwaGljb24tZmFjZXRpbWUtdmlkZW8gICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUwNTlcIjsgfSB9XG4uZ2x5cGhpY29uLXBpY3R1cmUgICAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMDYwXCI7IH0gfVxuLmdseXBoaWNvbi1tYXAtbWFya2VyICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTA2MlwiOyB9IH1cbi5nbHlwaGljb24tYWRqdXN0ICAgICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUwNjNcIjsgfSB9XG4uZ2x5cGhpY29uLXRpbnQgICAgICAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMDY0XCI7IH0gfVxuLmdseXBoaWNvbi1lZGl0ICAgICAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTA2NVwiOyB9IH1cbi5nbHlwaGljb24tc2hhcmUgICAgICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUwNjZcIjsgfSB9XG4uZ2x5cGhpY29uLWNoZWNrICAgICAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMDY3XCI7IH0gfVxuLmdseXBoaWNvbi1tb3ZlICAgICAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTA2OFwiOyB9IH1cbi5nbHlwaGljb24tc3RlcC1iYWNrd2FyZCAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUwNjlcIjsgfSB9XG4uZ2x5cGhpY29uLWZhc3QtYmFja3dhcmQgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMDcwXCI7IH0gfVxuLmdseXBoaWNvbi1iYWNrd2FyZCAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTA3MVwiOyB9IH1cbi5nbHlwaGljb24tcGxheSAgICAgICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUwNzJcIjsgfSB9XG4uZ2x5cGhpY29uLXBhdXNlICAgICAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMDczXCI7IH0gfVxuLmdseXBoaWNvbi1zdG9wICAgICAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTA3NFwiOyB9IH1cbi5nbHlwaGljb24tZm9yd2FyZCAgICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUwNzVcIjsgfSB9XG4uZ2x5cGhpY29uLWZhc3QtZm9yd2FyZCAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMDc2XCI7IH0gfVxuLmdseXBoaWNvbi1zdGVwLWZvcndhcmQgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTA3N1wiOyB9IH1cbi5nbHlwaGljb24tZWplY3QgICAgICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUwNzhcIjsgfSB9XG4uZ2x5cGhpY29uLWNoZXZyb24tbGVmdCAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMDc5XCI7IH0gfVxuLmdseXBoaWNvbi1jaGV2cm9uLXJpZ2h0ICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTA4MFwiOyB9IH1cbi5nbHlwaGljb24tcGx1cy1zaWduICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUwODFcIjsgfSB9XG4uZ2x5cGhpY29uLW1pbnVzLXNpZ24gICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMDgyXCI7IH0gfVxuLmdseXBoaWNvbi1yZW1vdmUtc2lnbiAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTA4M1wiOyB9IH1cbi5nbHlwaGljb24tb2stc2lnbiAgICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUwODRcIjsgfSB9XG4uZ2x5cGhpY29uLXF1ZXN0aW9uLXNpZ24gICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMDg1XCI7IH0gfVxuLmdseXBoaWNvbi1pbmZvLXNpZ24gICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTA4NlwiOyB9IH1cbi5nbHlwaGljb24tc2NyZWVuc2hvdCAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUwODdcIjsgfSB9XG4uZ2x5cGhpY29uLXJlbW92ZS1jaXJjbGUgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMDg4XCI7IH0gfVxuLmdseXBoaWNvbi1vay1jaXJjbGUgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTA4OVwiOyB9IH1cbi5nbHlwaGljb24tYmFuLWNpcmNsZSAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUwOTBcIjsgfSB9XG4uZ2x5cGhpY29uLWFycm93LWxlZnQgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMDkxXCI7IH0gfVxuLmdseXBoaWNvbi1hcnJvdy1yaWdodCAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTA5MlwiOyB9IH1cbi5nbHlwaGljb24tYXJyb3ctdXAgICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUwOTNcIjsgfSB9XG4uZ2x5cGhpY29uLWFycm93LWRvd24gICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMDk0XCI7IH0gfVxuLmdseXBoaWNvbi1zaGFyZS1hbHQgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTA5NVwiOyB9IH1cbi5nbHlwaGljb24tcmVzaXplLWZ1bGwgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUwOTZcIjsgfSB9XG4uZ2x5cGhpY29uLXJlc2l6ZS1zbWFsbCAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMDk3XCI7IH0gfVxuLmdseXBoaWNvbi1leGNsYW1hdGlvbi1zaWduICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTEwMVwiOyB9IH1cbi5nbHlwaGljb24tZ2lmdCAgICAgICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUxMDJcIjsgfSB9XG4uZ2x5cGhpY29uLWxlYWYgICAgICAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMTAzXCI7IH0gfVxuLmdseXBoaWNvbi1maXJlICAgICAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTEwNFwiOyB9IH1cbi5nbHlwaGljb24tZXllLW9wZW4gICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUxMDVcIjsgfSB9XG4uZ2x5cGhpY29uLWV5ZS1jbG9zZSAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMTA2XCI7IH0gfVxuLmdseXBoaWNvbi13YXJuaW5nLXNpZ24gICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTEwN1wiOyB9IH1cbi5nbHlwaGljb24tcGxhbmUgICAgICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUxMDhcIjsgfSB9XG4uZ2x5cGhpY29uLWNhbGVuZGFyICAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMTA5XCI7IH0gfVxuLmdseXBoaWNvbi1yYW5kb20gICAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTExMFwiOyB9IH1cbi5nbHlwaGljb24tY29tbWVudCAgICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUxMTFcIjsgfSB9XG4uZ2x5cGhpY29uLW1hZ25ldCAgICAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMTEyXCI7IH0gfVxuLmdseXBoaWNvbi1jaGV2cm9uLXVwICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTExM1wiOyB9IH1cbi5nbHlwaGljb24tY2hldnJvbi1kb3duICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUxMTRcIjsgfSB9XG4uZ2x5cGhpY29uLXJldHdlZXQgICAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMTE1XCI7IH0gfVxuLmdseXBoaWNvbi1zaG9wcGluZy1jYXJ0ICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTExNlwiOyB9IH1cbi5nbHlwaGljb24tZm9sZGVyLWNsb3NlICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUxMTdcIjsgfSB9XG4uZ2x5cGhpY29uLWZvbGRlci1vcGVuICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMTE4XCI7IH0gfVxuLmdseXBoaWNvbi1yZXNpemUtdmVydGljYWwgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTExOVwiOyB9IH1cbi5nbHlwaGljb24tcmVzaXplLWhvcml6b250YWwgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUxMjBcIjsgfSB9XG4uZ2x5cGhpY29uLWhkZCAgICAgICAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMTIxXCI7IH0gfVxuLmdseXBoaWNvbi1idWxsaG9ybiAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTEyMlwiOyB9IH1cbi5nbHlwaGljb24tYmVsbCAgICAgICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUxMjNcIjsgfSB9XG4uZ2x5cGhpY29uLWNlcnRpZmljYXRlICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMTI0XCI7IH0gfVxuLmdseXBoaWNvbi10aHVtYnMtdXAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTEyNVwiOyB9IH1cbi5nbHlwaGljb24tdGh1bWJzLWRvd24gICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUxMjZcIjsgfSB9XG4uZ2x5cGhpY29uLWhhbmQtcmlnaHQgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMTI3XCI7IH0gfVxuLmdseXBoaWNvbi1oYW5kLWxlZnQgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTEyOFwiOyB9IH1cbi5nbHlwaGljb24taGFuZC11cCAgICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUxMjlcIjsgfSB9XG4uZ2x5cGhpY29uLWhhbmQtZG93biAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMTMwXCI7IH0gfVxuLmdseXBoaWNvbi1jaXJjbGUtYXJyb3ctcmlnaHQgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTEzMVwiOyB9IH1cbi5nbHlwaGljb24tY2lyY2xlLWFycm93LWxlZnQgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUxMzJcIjsgfSB9XG4uZ2x5cGhpY29uLWNpcmNsZS1hcnJvdy11cCAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMTMzXCI7IH0gfVxuLmdseXBoaWNvbi1jaXJjbGUtYXJyb3ctZG93biAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTEzNFwiOyB9IH1cbi5nbHlwaGljb24tZ2xvYmUgICAgICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUxMzVcIjsgfSB9XG4uZ2x5cGhpY29uLXdyZW5jaCAgICAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMTM2XCI7IH0gfVxuLmdseXBoaWNvbi10YXNrcyAgICAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTEzN1wiOyB9IH1cbi5nbHlwaGljb24tZmlsdGVyICAgICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUxMzhcIjsgfSB9XG4uZ2x5cGhpY29uLWJyaWVmY2FzZSAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMTM5XCI7IH0gfVxuLmdseXBoaWNvbi1mdWxsc2NyZWVuICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTE0MFwiOyB9IH1cbi5nbHlwaGljb24tZGFzaGJvYXJkICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUxNDFcIjsgfSB9XG4uZ2x5cGhpY29uLXBhcGVyY2xpcCAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMTQyXCI7IH0gfVxuLmdseXBoaWNvbi1oZWFydC1lbXB0eSAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTE0M1wiOyB9IH1cbi5nbHlwaGljb24tbGluayAgICAgICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUxNDRcIjsgfSB9XG4uZ2x5cGhpY29uLXBob25lICAgICAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMTQ1XCI7IH0gfVxuLmdseXBoaWNvbi1wdXNocGluICAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTE0NlwiOyB9IH1cbi5nbHlwaGljb24tdXNkICAgICAgICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUxNDhcIjsgfSB9XG4uZ2x5cGhpY29uLWdicCAgICAgICAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMTQ5XCI7IH0gfVxuLmdseXBoaWNvbi1zb3J0ICAgICAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTE1MFwiOyB9IH1cbi5nbHlwaGljb24tc29ydC1ieS1hbHBoYWJldCAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUxNTFcIjsgfSB9XG4uZ2x5cGhpY29uLXNvcnQtYnktYWxwaGFiZXQtYWx0ICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMTUyXCI7IH0gfVxuLmdseXBoaWNvbi1zb3J0LWJ5LW9yZGVyICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTE1M1wiOyB9IH1cbi5nbHlwaGljb24tc29ydC1ieS1vcmRlci1hbHQgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUxNTRcIjsgfSB9XG4uZ2x5cGhpY29uLXNvcnQtYnktYXR0cmlidXRlcyAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMTU1XCI7IH0gfVxuLmdseXBoaWNvbi1zb3J0LWJ5LWF0dHJpYnV0ZXMtYWx0IHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTE1NlwiOyB9IH1cbi5nbHlwaGljb24tdW5jaGVja2VkICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUxNTdcIjsgfSB9XG4uZ2x5cGhpY29uLWV4cGFuZCAgICAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMTU4XCI7IH0gfVxuLmdseXBoaWNvbi1jb2xsYXBzZS1kb3duICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTE1OVwiOyB9IH1cbi5nbHlwaGljb24tY29sbGFwc2UtdXAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUxNjBcIjsgfSB9XG4uZ2x5cGhpY29uLWxvZy1pbiAgICAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMTYxXCI7IH0gfVxuLmdseXBoaWNvbi1mbGFzaCAgICAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTE2MlwiOyB9IH1cbi5nbHlwaGljb24tbG9nLW91dCAgICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUxNjNcIjsgfSB9XG4uZ2x5cGhpY29uLW5ldy13aW5kb3cgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMTY0XCI7IH0gfVxuLmdseXBoaWNvbi1yZWNvcmQgICAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTE2NVwiOyB9IH1cbi5nbHlwaGljb24tc2F2ZSAgICAgICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUxNjZcIjsgfSB9XG4uZ2x5cGhpY29uLW9wZW4gICAgICAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMTY3XCI7IH0gfVxuLmdseXBoaWNvbi1zYXZlZCAgICAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTE2OFwiOyB9IH1cbi5nbHlwaGljb24taW1wb3J0ICAgICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUxNjlcIjsgfSB9XG4uZ2x5cGhpY29uLWV4cG9ydCAgICAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMTcwXCI7IH0gfVxuLmdseXBoaWNvbi1zZW5kICAgICAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTE3MVwiOyB9IH1cbi5nbHlwaGljb24tZmxvcHB5LWRpc2sgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUxNzJcIjsgfSB9XG4uZ2x5cGhpY29uLWZsb3BweS1zYXZlZCAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMTczXCI7IH0gfVxuLmdseXBoaWNvbi1mbG9wcHktcmVtb3ZlICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTE3NFwiOyB9IH1cbi5nbHlwaGljb24tZmxvcHB5LXNhdmUgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUxNzVcIjsgfSB9XG4uZ2x5cGhpY29uLWZsb3BweS1vcGVuICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMTc2XCI7IH0gfVxuLmdseXBoaWNvbi1jcmVkaXQtY2FyZCAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTE3N1wiOyB9IH1cbi5nbHlwaGljb24tdHJhbnNmZXIgICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUxNzhcIjsgfSB9XG4uZ2x5cGhpY29uLWN1dGxlcnkgICAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMTc5XCI7IH0gfVxuLmdseXBoaWNvbi1oZWFkZXIgICAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTE4MFwiOyB9IH1cbi5nbHlwaGljb24tY29tcHJlc3NlZCAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUxODFcIjsgfSB9XG4uZ2x5cGhpY29uLWVhcnBob25lICAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMTgyXCI7IH0gfVxuLmdseXBoaWNvbi1waG9uZS1hbHQgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTE4M1wiOyB9IH1cbi5nbHlwaGljb24tdG93ZXIgICAgICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUxODRcIjsgfSB9XG4uZ2x5cGhpY29uLXN0YXRzICAgICAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMTg1XCI7IH0gfVxuLmdseXBoaWNvbi1zZC12aWRlbyAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTE4NlwiOyB9IH1cbi5nbHlwaGljb24taGQtdmlkZW8gICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUxODdcIjsgfSB9XG4uZ2x5cGhpY29uLXN1YnRpdGxlcyAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMTg4XCI7IH0gfVxuLmdseXBoaWNvbi1zb3VuZC1zdGVyZW8gICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTE4OVwiOyB9IH1cbi5nbHlwaGljb24tc291bmQtZG9sYnkgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUxOTBcIjsgfSB9XG4uZ2x5cGhpY29uLXNvdW5kLTUtMSAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMTkxXCI7IH0gfVxuLmdseXBoaWNvbi1zb3VuZC02LTEgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTE5MlwiOyB9IH1cbi5nbHlwaGljb24tc291bmQtNy0xICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUxOTNcIjsgfSB9XG4uZ2x5cGhpY29uLWNvcHlyaWdodC1tYXJrICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMTk0XCI7IH0gfVxuLmdseXBoaWNvbi1yZWdpc3RyYXRpb24tbWFyayAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTE5NVwiOyB9IH1cbi5nbHlwaGljb24tY2xvdWQtZG93bmxvYWQgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUxOTdcIjsgfSB9XG4uZ2x5cGhpY29uLWNsb3VkLXVwbG9hZCAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMTk4XCI7IH0gfVxuLmdseXBoaWNvbi10cmVlLWNvbmlmZXIgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTE5OVwiOyB9IH1cbi5nbHlwaGljb24tdHJlZS1kZWNpZHVvdXMgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUyMDBcIjsgfSB9XG4uZ2x5cGhpY29uLWNkICAgICAgICAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMjAxXCI7IH0gfVxuLmdseXBoaWNvbi1zYXZlLWZpbGUgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTIwMlwiOyB9IH1cbi5nbHlwaGljb24tb3Blbi1maWxlICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUyMDNcIjsgfSB9XG4uZ2x5cGhpY29uLWxldmVsLXVwICAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMjA0XCI7IH0gfVxuLmdseXBoaWNvbi1jb3B5ICAgICAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTIwNVwiOyB9IH1cbi5nbHlwaGljb24tcGFzdGUgICAgICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUyMDZcIjsgfSB9XG4vLyBUaGUgZm9sbG93aW5nIDIgR2x5cGhpY29ucyBhcmUgb21pdHRlZCBmb3IgdGhlIHRpbWUgYmVpbmcgYmVjYXVzZVxuLy8gdGhleSBjdXJyZW50bHkgdXNlIFVuaWNvZGUgY29kZXBvaW50cyB0aGF0IGFyZSBvdXRzaWRlIHRoZVxuLy8gQmFzaWMgTXVsdGlsaW5ndWFsIFBsYW5lIChCTVApLiBPbGRlciBidWdneSB2ZXJzaW9ucyBvZiBXZWJLaXQgY2FuJ3QgaGFuZGxlXG4vLyBub24tQk1QIGNvZGVwb2ludHMgaW4gQ1NTIHN0cmluZyBlc2NhcGVzLCBhbmQgdGh1cyBjYW4ndCBkaXNwbGF5IHRoZXNlIHR3byBpY29ucy5cbi8vIE5vdGFibHksIHRoZSBidWcgYWZmZWN0cyBzb21lIG9sZGVyIHZlcnNpb25zIG9mIHRoZSBBbmRyb2lkIEJyb3dzZXIuXG4vLyBNb3JlIGluZm86IGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9pc3N1ZXMvMTAxMDZcbi8vIC5nbHlwaGljb24tZG9vciAgICAgICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXDFmNmFhXCI7IH0gfVxuLy8gLmdseXBoaWNvbi1rZXkgICAgICAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcMWY1MTFcIjsgfSB9XG4uZ2x5cGhpY29uLWFsZXJ0ICAgICAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMjA5XCI7IH0gfVxuLmdseXBoaWNvbi1lcXVhbGl6ZXIgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTIxMFwiOyB9IH1cbi5nbHlwaGljb24ta2luZyAgICAgICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUyMTFcIjsgfSB9XG4uZ2x5cGhpY29uLXF1ZWVuICAgICAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMjEyXCI7IH0gfVxuLmdseXBoaWNvbi1wYXduICAgICAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTIxM1wiOyB9IH1cbi5nbHlwaGljb24tYmlzaG9wICAgICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUyMTRcIjsgfSB9XG4uZ2x5cGhpY29uLWtuaWdodCAgICAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMjE1XCI7IH0gfVxuLmdseXBoaWNvbi1iYWJ5LWZvcm11bGEgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTIxNlwiOyB9IH1cbi5nbHlwaGljb24tdGVudCAgICAgICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXDI2ZmFcIjsgfSB9XG4uZ2x5cGhpY29uLWJsYWNrYm9hcmQgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMjE4XCI7IH0gfVxuLmdseXBoaWNvbi1iZWQgICAgICAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTIxOVwiOyB9IH1cbi5nbHlwaGljb24tYXBwbGUgICAgICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGY4ZmZcIjsgfSB9XG4uZ2x5cGhpY29uLWVyYXNlICAgICAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMjIxXCI7IH0gfVxuLmdseXBoaWNvbi1ob3VyZ2xhc3MgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcMjMxYlwiOyB9IH1cbi5nbHlwaGljb24tbGFtcCAgICAgICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUyMjNcIjsgfSB9XG4uZ2x5cGhpY29uLWR1cGxpY2F0ZSAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMjI0XCI7IH0gfVxuLmdseXBoaWNvbi1waWdneS1iYW5rICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTIyNVwiOyB9IH1cbi5nbHlwaGljb24tc2Npc3NvcnMgICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUyMjZcIjsgfSB9XG4uZ2x5cGhpY29uLWJpdGNvaW4gICAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMjI3XCI7IH0gfVxuLmdseXBoaWNvbi1idGMgICAgICAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTIyN1wiOyB9IH1cbi5nbHlwaGljb24teGJ0ICAgICAgICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUyMjdcIjsgfSB9XG4uZ2x5cGhpY29uLXllbiAgICAgICAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFwwMGE1XCI7IH0gfVxuLmdseXBoaWNvbi1qcHkgICAgICAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcMDBhNVwiOyB9IH1cbi5nbHlwaGljb24tcnVibGUgICAgICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXDIwYmRcIjsgfSB9XG4uZ2x5cGhpY29uLXJ1YiAgICAgICAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFwyMGJkXCI7IH0gfVxuLmdseXBoaWNvbi1zY2FsZSAgICAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTIzMFwiOyB9IH1cbi5nbHlwaGljb24taWNlLWxvbGx5ICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUyMzFcIjsgfSB9XG4uZ2x5cGhpY29uLWljZS1sb2xseS10YXN0ZWQgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMjMyXCI7IH0gfVxuLmdseXBoaWNvbi1lZHVjYXRpb24gICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTIzM1wiOyB9IH1cbi5nbHlwaGljb24tb3B0aW9uLWhvcml6b250YWwgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUyMzRcIjsgfSB9XG4uZ2x5cGhpY29uLW9wdGlvbi12ZXJ0aWNhbCAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMjM1XCI7IH0gfVxuLmdseXBoaWNvbi1tZW51LWhhbWJ1cmdlciAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTIzNlwiOyB9IH1cbi5nbHlwaGljb24tbW9kYWwtd2luZG93ICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUyMzdcIjsgfSB9XG4uZ2x5cGhpY29uLW9pbCAgICAgICAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMjM4XCI7IH0gfVxuLmdseXBoaWNvbi1ncmFpbiAgICAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTIzOVwiOyB9IH1cbi5nbHlwaGljb24tc3VuZ2xhc3NlcyAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUyNDBcIjsgfSB9XG4uZ2x5cGhpY29uLXRleHQtc2l6ZSAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMjQxXCI7IH0gfVxuLmdseXBoaWNvbi10ZXh0LWNvbG9yICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTI0MlwiOyB9IH1cbi5nbHlwaGljb24tdGV4dC1iYWNrZ3JvdW5kICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUyNDNcIjsgfSB9XG4uZ2x5cGhpY29uLW9iamVjdC1hbGlnbi10b3AgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMjQ0XCI7IH0gfVxuLmdseXBoaWNvbi1vYmplY3QtYWxpZ24tYm90dG9tICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTI0NVwiOyB9IH1cbi5nbHlwaGljb24tb2JqZWN0LWFsaWduLWhvcml6b250YWx7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUyNDZcIjsgfSB9XG4uZ2x5cGhpY29uLW9iamVjdC1hbGlnbi1sZWZ0ICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMjQ3XCI7IH0gfVxuLmdseXBoaWNvbi1vYmplY3QtYWxpZ24tdmVydGljYWwgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTI0OFwiOyB9IH1cbi5nbHlwaGljb24tb2JqZWN0LWFsaWduLXJpZ2h0ICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUyNDlcIjsgfSB9XG4uZ2x5cGhpY29uLXRyaWFuZ2xlLXJpZ2h0ICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMjUwXCI7IH0gfVxuLmdseXBoaWNvbi10cmlhbmdsZS1sZWZ0ICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTI1MVwiOyB9IH1cbi5nbHlwaGljb24tdHJpYW5nbGUtYm90dG9tICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUyNTJcIjsgfSB9XG4uZ2x5cGhpY29uLXRyaWFuZ2xlLXRvcCAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMjUzXCI7IH0gfVxuLmdseXBoaWNvbi1jb25zb2xlICAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTI1NFwiOyB9IH1cbi5nbHlwaGljb24tc3VwZXJzY3JpcHQgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUyNTVcIjsgfSB9XG4uZ2x5cGhpY29uLXN1YnNjcmlwdCAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMjU2XCI7IH0gfVxuLmdseXBoaWNvbi1tZW51LWxlZnQgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTI1N1wiOyB9IH1cbi5nbHlwaGljb24tbWVudS1yaWdodCAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUyNThcIjsgfSB9XG4uZ2x5cGhpY29uLW1lbnUtZG93biAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMjU5XCI7IH0gfVxuLmdseXBoaWNvbi1tZW51LXVwICAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTI2MFwiOyB9IH1cbiIsIi8vXG4vLyBTY2FmZm9sZGluZ1xuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuXG4vLyBSZXNldCB0aGUgYm94LXNpemluZ1xuLy9cbi8vIEhlYWRzIHVwISBUaGlzIHJlc2V0IG1heSBjYXVzZSBjb25mbGljdHMgd2l0aCBzb21lIHRoaXJkLXBhcnR5IHdpZGdldHMuXG4vLyBGb3IgcmVjb21tZW5kYXRpb25zIG9uIHJlc29sdmluZyBzdWNoIGNvbmZsaWN0cywgc2VlXG4vLyBodHRwOi8vZ2V0Ym9vdHN0cmFwLmNvbS9nZXR0aW5nLXN0YXJ0ZWQvI3RoaXJkLWJveC1zaXppbmdcbioge1xuICBAaW5jbHVkZSBib3gtc2l6aW5nKGJvcmRlci1ib3gpO1xufVxuKjpiZWZvcmUsXG4qOmFmdGVyIHtcbiAgQGluY2x1ZGUgYm94LXNpemluZyhib3JkZXItYm94KTtcbn1cblxuXG4vLyBCb2R5IHJlc2V0XG5cbmh0bWwge1xuICBmb250LXNpemU6IDEwcHg7XG4gIC13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvcjogcmdiYSgwLDAsMCwwKTtcbn1cblxuYm9keSB7XG4gIGZvbnQtZmFtaWx5OiAkZm9udC1mYW1pbHktYmFzZTtcbiAgZm9udC1zaXplOiAkZm9udC1zaXplLWJhc2U7XG4gIGxpbmUtaGVpZ2h0OiAkbGluZS1oZWlnaHQtYmFzZTtcbiAgY29sb3I6ICR0ZXh0LWNvbG9yO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAkYm9keS1iZztcbn1cblxuLy8gUmVzZXQgZm9udHMgZm9yIHJlbGV2YW50IGVsZW1lbnRzXG5pbnB1dCxcbmJ1dHRvbixcbnNlbGVjdCxcbnRleHRhcmVhIHtcbiAgZm9udC1mYW1pbHk6IGluaGVyaXQ7XG4gIGZvbnQtc2l6ZTogaW5oZXJpdDtcbiAgbGluZS1oZWlnaHQ6IGluaGVyaXQ7XG59XG5cblxuLy8gTGlua3NcblxuYSB7XG4gIGNvbG9yOiAkbGluay1jb2xvcjtcbiAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xuXG4gICY6aG92ZXIsXG4gICY6Zm9jdXMge1xuICAgIGNvbG9yOiAkbGluay1ob3Zlci1jb2xvcjtcbiAgICB0ZXh0LWRlY29yYXRpb246ICRsaW5rLWhvdmVyLWRlY29yYXRpb247XG4gIH1cblxuICAmOmZvY3VzIHtcbiAgICBAaW5jbHVkZSB0YWItZm9jdXM7XG4gIH1cbn1cblxuXG4vLyBGaWd1cmVzXG4vL1xuLy8gV2UgcmVzZXQgdGhpcyBoZXJlIGJlY2F1c2UgcHJldmlvdXNseSBOb3JtYWxpemUgaGFkIG5vIGBmaWd1cmVgIG1hcmdpbnMuIFRoaXNcbi8vIGVuc3VyZXMgd2UgZG9uJ3QgYnJlYWsgYW55b25lJ3MgdXNlIG9mIHRoZSBlbGVtZW50LlxuXG5maWd1cmUge1xuICBtYXJnaW46IDA7XG59XG5cblxuLy8gSW1hZ2VzXG5cbmltZyB7XG4gIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG59XG5cbi8vIFJlc3BvbnNpdmUgaW1hZ2VzIChlbnN1cmUgaW1hZ2VzIGRvbid0IHNjYWxlIGJleW9uZCB0aGVpciBwYXJlbnRzKVxuLmltZy1yZXNwb25zaXZlIHtcbiAgQGluY2x1ZGUgaW1nLXJlc3BvbnNpdmU7XG59XG5cbi8vIFJvdW5kZWQgY29ybmVyc1xuLmltZy1yb3VuZGVkIHtcbiAgYm9yZGVyLXJhZGl1czogJGJvcmRlci1yYWRpdXMtbGFyZ2U7XG59XG5cbi8vIEltYWdlIHRodW1ibmFpbHNcbi8vXG4vLyBIZWFkcyB1cCEgVGhpcyBpcyBtaXhpbi1lZCBpbnRvIHRodW1ibmFpbHMubGVzcyBmb3IgYC50aHVtYm5haWxgLlxuLmltZy10aHVtYm5haWwge1xuICBwYWRkaW5nOiAkdGh1bWJuYWlsLXBhZGRpbmc7XG4gIGxpbmUtaGVpZ2h0OiAkbGluZS1oZWlnaHQtYmFzZTtcbiAgYmFja2dyb3VuZC1jb2xvcjogJHRodW1ibmFpbC1iZztcbiAgYm9yZGVyOiAxcHggc29saWQgJHRodW1ibmFpbC1ib3JkZXI7XG4gIGJvcmRlci1yYWRpdXM6ICR0aHVtYm5haWwtYm9yZGVyLXJhZGl1cztcbiAgQGluY2x1ZGUgdHJhbnNpdGlvbihhbGwgLjJzIGVhc2UtaW4tb3V0KTtcblxuICAvLyBLZWVwIHRoZW0gYXQgbW9zdCAxMDAlIHdpZGVcbiAgQGluY2x1ZGUgaW1nLXJlc3BvbnNpdmUoaW5saW5lLWJsb2NrKTtcbn1cblxuLy8gUGVyZmVjdCBjaXJjbGVcbi5pbWctY2lyY2xlIHtcbiAgYm9yZGVyLXJhZGl1czogNTAlOyAvLyBzZXQgcmFkaXVzIGluIHBlcmNlbnRzXG59XG5cblxuLy8gSG9yaXpvbnRhbCBydWxlc1xuXG5ociB7XG4gIG1hcmdpbi10b3A6ICAgICRsaW5lLWhlaWdodC1jb21wdXRlZDtcbiAgbWFyZ2luLWJvdHRvbTogJGxpbmUtaGVpZ2h0LWNvbXB1dGVkO1xuICBib3JkZXI6IDA7XG4gIGJvcmRlci10b3A6IDFweCBzb2xpZCAkaHItYm9yZGVyO1xufVxuXG5cbi8vIE9ubHkgZGlzcGxheSBjb250ZW50IHRvIHNjcmVlbiByZWFkZXJzXG4vL1xuLy8gU2VlOiBodHRwOi8vYTExeXByb2plY3QuY29tL3Bvc3RzL2hvdy10by1oaWRlLWNvbnRlbnQvXG5cbi5zci1vbmx5IHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB3aWR0aDogMXB4O1xuICBoZWlnaHQ6IDFweDtcbiAgbWFyZ2luOiAtMXB4O1xuICBwYWRkaW5nOiAwO1xuICBvdmVyZmxvdzogaGlkZGVuO1xuICBjbGlwOiByZWN0KDAsMCwwLDApO1xuICBib3JkZXI6IDA7XG59XG5cbi8vIFVzZSBpbiBjb25qdW5jdGlvbiB3aXRoIC5zci1vbmx5IHRvIG9ubHkgZGlzcGxheSBjb250ZW50IHdoZW4gaXQncyBmb2N1c2VkLlxuLy8gVXNlZnVsIGZvciBcIlNraXAgdG8gbWFpbiBjb250ZW50XCIgbGlua3M7IHNlZSBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDEzL05PVEUtV0NBRzIwLVRFQ0hTLTIwMTMwOTA1L0cxXG4vLyBDcmVkaXQ6IEhUTUw1IEJvaWxlcnBsYXRlXG5cbi5zci1vbmx5LWZvY3VzYWJsZSB7XG4gICY6YWN0aXZlLFxuICAmOmZvY3VzIHtcbiAgICBwb3NpdGlvbjogc3RhdGljO1xuICAgIHdpZHRoOiBhdXRvO1xuICAgIGhlaWdodDogYXV0bztcbiAgICBtYXJnaW46IDA7XG4gICAgb3ZlcmZsb3c6IHZpc2libGU7XG4gICAgY2xpcDogYXV0bztcbiAgfVxufVxuXG5cbi8vIGlPUyBcImNsaWNrYWJsZSBlbGVtZW50c1wiIGZpeCBmb3Igcm9sZT1cImJ1dHRvblwiXG4vL1xuLy8gRml4ZXMgXCJjbGlja2FiaWxpdHlcIiBpc3N1ZSAoYW5kIG1vcmUgZ2VuZXJhbGx5LCB0aGUgZmlyaW5nIG9mIGV2ZW50cyBzdWNoIGFzIGZvY3VzIGFzIHdlbGwpXG4vLyBmb3IgdHJhZGl0aW9uYWxseSBub24tZm9jdXNhYmxlIGVsZW1lbnRzIHdpdGggcm9sZT1cImJ1dHRvblwiXG4vLyBzZWUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvRXZlbnRzL2NsaWNrI1NhZmFyaV9Nb2JpbGVcbi8vIFVwc3RyZWFtIHBhdGNoIGZvciBub3JtYWxpemUuY3NzIHN1Ym1pdHRlZDogaHR0cHM6Ly9naXRodWIuY29tL25lY29sYXMvbm9ybWFsaXplLmNzcy9wdWxsLzM3OSAtIHJlbW92ZSB0aGlzIGZpeCBvbmNlIHRoYXQgaXMgbWVyZ2VkXG5cbltyb2xlPVwiYnV0dG9uXCJdIHtcbiAgY3Vyc29yOiBwb2ludGVyO1xufSIsIi8vIFZlbmRvciBQcmVmaXhlc1xuLy9cbi8vIEFsbCB2ZW5kb3IgbWl4aW5zIGFyZSBkZXByZWNhdGVkIGFzIG9mIHYzLjIuMCBkdWUgdG8gdGhlIGludHJvZHVjdGlvbiBvZlxuLy8gQXV0b3ByZWZpeGVyIGluIG91ciBHcnVudGZpbGUuIFRoZXkgd2lsbCBiZSByZW1vdmVkIGluIHY0LlxuXG4vLyAtIEFuaW1hdGlvbnNcbi8vIC0gQmFja2ZhY2UgdmlzaWJpbGl0eVxuLy8gLSBCb3ggc2hhZG93XG4vLyAtIEJveCBzaXppbmdcbi8vIC0gQ29udGVudCBjb2x1bW5zXG4vLyAtIEh5cGhlbnNcbi8vIC0gUGxhY2Vob2xkZXIgdGV4dFxuLy8gLSBUcmFuc2Zvcm1hdGlvbnNcbi8vIC0gVHJhbnNpdGlvbnNcbi8vIC0gVXNlciBTZWxlY3RcblxuXG4vLyBBbmltYXRpb25zXG5AbWl4aW4gYW5pbWF0aW9uKCRhbmltYXRpb24pIHtcbiAgLXdlYmtpdC1hbmltYXRpb246ICRhbmltYXRpb247XG4gICAgICAgLW8tYW5pbWF0aW9uOiAkYW5pbWF0aW9uO1xuICAgICAgICAgIGFuaW1hdGlvbjogJGFuaW1hdGlvbjtcbn1cbkBtaXhpbiBhbmltYXRpb24tbmFtZSgkbmFtZSkge1xuICAtd2Via2l0LWFuaW1hdGlvbi1uYW1lOiAkbmFtZTtcbiAgICAgICAgICBhbmltYXRpb24tbmFtZTogJG5hbWU7XG59XG5AbWl4aW4gYW5pbWF0aW9uLWR1cmF0aW9uKCRkdXJhdGlvbikge1xuICAtd2Via2l0LWFuaW1hdGlvbi1kdXJhdGlvbjogJGR1cmF0aW9uO1xuICAgICAgICAgIGFuaW1hdGlvbi1kdXJhdGlvbjogJGR1cmF0aW9uO1xufVxuQG1peGluIGFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb24oJHRpbWluZy1mdW5jdGlvbikge1xuICAtd2Via2l0LWFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246ICR0aW1pbmctZnVuY3Rpb247XG4gICAgICAgICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogJHRpbWluZy1mdW5jdGlvbjtcbn1cbkBtaXhpbiBhbmltYXRpb24tZGVsYXkoJGRlbGF5KSB7XG4gIC13ZWJraXQtYW5pbWF0aW9uLWRlbGF5OiAkZGVsYXk7XG4gICAgICAgICAgYW5pbWF0aW9uLWRlbGF5OiAkZGVsYXk7XG59XG5AbWl4aW4gYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudCgkaXRlcmF0aW9uLWNvdW50KSB7XG4gIC13ZWJraXQtYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudDogJGl0ZXJhdGlvbi1jb3VudDtcbiAgICAgICAgICBhbmltYXRpb24taXRlcmF0aW9uLWNvdW50OiAkaXRlcmF0aW9uLWNvdW50O1xufVxuQG1peGluIGFuaW1hdGlvbi1kaXJlY3Rpb24oJGRpcmVjdGlvbikge1xuICAtd2Via2l0LWFuaW1hdGlvbi1kaXJlY3Rpb246ICRkaXJlY3Rpb247XG4gICAgICAgICAgYW5pbWF0aW9uLWRpcmVjdGlvbjogJGRpcmVjdGlvbjtcbn1cbkBtaXhpbiBhbmltYXRpb24tZmlsbC1tb2RlKCRmaWxsLW1vZGUpIHtcbiAgLXdlYmtpdC1hbmltYXRpb24tZmlsbC1tb2RlOiAkZmlsbC1tb2RlO1xuICAgICAgICAgIGFuaW1hdGlvbi1maWxsLW1vZGU6ICRmaWxsLW1vZGU7XG59XG5cbi8vIEJhY2tmYWNlIHZpc2liaWxpdHlcbi8vIFByZXZlbnQgYnJvd3NlcnMgZnJvbSBmbGlja2VyaW5nIHdoZW4gdXNpbmcgQ1NTIDNEIHRyYW5zZm9ybXMuXG4vLyBEZWZhdWx0IHZhbHVlIGlzIGB2aXNpYmxlYCwgYnV0IGNhbiBiZSBjaGFuZ2VkIHRvIGBoaWRkZW5gXG5cbkBtaXhpbiBiYWNrZmFjZS12aXNpYmlsaXR5KCR2aXNpYmlsaXR5KXtcbiAgLXdlYmtpdC1iYWNrZmFjZS12aXNpYmlsaXR5OiAkdmlzaWJpbGl0eTtcbiAgICAgLW1vei1iYWNrZmFjZS12aXNpYmlsaXR5OiAkdmlzaWJpbGl0eTtcbiAgICAgICAgICBiYWNrZmFjZS12aXNpYmlsaXR5OiAkdmlzaWJpbGl0eTtcbn1cblxuLy8gRHJvcCBzaGFkb3dzXG4vL1xuLy8gTm90ZTogRGVwcmVjYXRlZCBgLmJveC1zaGFkb3coKWAgYXMgb2YgdjMuMS4wIHNpbmNlIGFsbCBvZiBCb290c3RyYXAnc1xuLy8gc3VwcG9ydGVkIGJyb3dzZXJzIHRoYXQgaGF2ZSBib3ggc2hhZG93IGNhcGFiaWxpdGllcyBub3cgc3VwcG9ydCBpdC5cblxuQG1peGluIGJveC1zaGFkb3coJHNoYWRvdy4uLikge1xuICAtd2Via2l0LWJveC1zaGFkb3c6ICRzaGFkb3c7IC8vIGlPUyA8NC4zICYgQW5kcm9pZCA8NC4xXG4gICAgICAgICAgYm94LXNoYWRvdzogJHNoYWRvdztcbn1cblxuLy8gQm94IHNpemluZ1xuQG1peGluIGJveC1zaXppbmcoJGJveG1vZGVsKSB7XG4gIC13ZWJraXQtYm94LXNpemluZzogJGJveG1vZGVsO1xuICAgICAtbW96LWJveC1zaXppbmc6ICRib3htb2RlbDtcbiAgICAgICAgICBib3gtc2l6aW5nOiAkYm94bW9kZWw7XG59XG5cbi8vIENTUzMgQ29udGVudCBDb2x1bW5zXG5AbWl4aW4gY29udGVudC1jb2x1bW5zKCRjb2x1bW4tY291bnQsICRjb2x1bW4tZ2FwOiAkZ3JpZC1ndXR0ZXItd2lkdGgpIHtcbiAgLXdlYmtpdC1jb2x1bW4tY291bnQ6ICRjb2x1bW4tY291bnQ7XG4gICAgIC1tb3otY29sdW1uLWNvdW50OiAkY29sdW1uLWNvdW50O1xuICAgICAgICAgIGNvbHVtbi1jb3VudDogJGNvbHVtbi1jb3VudDtcbiAgLXdlYmtpdC1jb2x1bW4tZ2FwOiAkY29sdW1uLWdhcDtcbiAgICAgLW1vei1jb2x1bW4tZ2FwOiAkY29sdW1uLWdhcDtcbiAgICAgICAgICBjb2x1bW4tZ2FwOiAkY29sdW1uLWdhcDtcbn1cblxuLy8gT3B0aW9uYWwgaHlwaGVuYXRpb25cbkBtaXhpbiBoeXBoZW5zKCRtb2RlOiBhdXRvKSB7XG4gIHdvcmQtd3JhcDogYnJlYWstd29yZDtcbiAgLXdlYmtpdC1oeXBoZW5zOiAkbW9kZTtcbiAgICAgLW1vei1oeXBoZW5zOiAkbW9kZTtcbiAgICAgIC1tcy1oeXBoZW5zOiAkbW9kZTsgLy8gSUUxMCtcbiAgICAgICAtby1oeXBoZW5zOiAkbW9kZTtcbiAgICAgICAgICBoeXBoZW5zOiAkbW9kZTtcbn1cblxuLy8gUGxhY2Vob2xkZXIgdGV4dFxuQG1peGluIHBsYWNlaG9sZGVyKCRjb2xvcjogJGlucHV0LWNvbG9yLXBsYWNlaG9sZGVyKSB7XG4gIC8vIEZpcmVmb3hcbiAgJjo6LW1vei1wbGFjZWhvbGRlciB7XG4gICAgY29sb3I6ICRjb2xvcjtcbiAgICBvcGFjaXR5OiAxOyAvLyBPdmVycmlkZSBGaXJlZm94J3MgdW51c3VhbCBkZWZhdWx0IG9wYWNpdHk7IHNlZSBodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvcHVsbC8xMTUyNlxuICB9XG4gICY6LW1zLWlucHV0LXBsYWNlaG9sZGVyIHsgY29sb3I6ICRjb2xvcjsgfSAvLyBJbnRlcm5ldCBFeHBsb3JlciAxMCtcbiAgJjo6LXdlYmtpdC1pbnB1dC1wbGFjZWhvbGRlciAgeyBjb2xvcjogJGNvbG9yOyB9IC8vIFNhZmFyaSBhbmQgQ2hyb21lXG59XG5cbi8vIFRyYW5zZm9ybWF0aW9uc1xuQG1peGluIHNjYWxlKCRyYXRpby4uLikge1xuICAtd2Via2l0LXRyYW5zZm9ybTogc2NhbGUoJHJhdGlvKTtcbiAgICAgIC1tcy10cmFuc2Zvcm06IHNjYWxlKCRyYXRpbyk7IC8vIElFOSBvbmx5XG4gICAgICAgLW8tdHJhbnNmb3JtOiBzY2FsZSgkcmF0aW8pO1xuICAgICAgICAgIHRyYW5zZm9ybTogc2NhbGUoJHJhdGlvKTtcbn1cblxuQG1peGluIHNjYWxlWCgkcmF0aW8pIHtcbiAgLXdlYmtpdC10cmFuc2Zvcm06IHNjYWxlWCgkcmF0aW8pO1xuICAgICAgLW1zLXRyYW5zZm9ybTogc2NhbGVYKCRyYXRpbyk7IC8vIElFOSBvbmx5XG4gICAgICAgLW8tdHJhbnNmb3JtOiBzY2FsZVgoJHJhdGlvKTtcbiAgICAgICAgICB0cmFuc2Zvcm06IHNjYWxlWCgkcmF0aW8pO1xufVxuQG1peGluIHNjYWxlWSgkcmF0aW8pIHtcbiAgLXdlYmtpdC10cmFuc2Zvcm06IHNjYWxlWSgkcmF0aW8pO1xuICAgICAgLW1zLXRyYW5zZm9ybTogc2NhbGVZKCRyYXRpbyk7IC8vIElFOSBvbmx5XG4gICAgICAgLW8tdHJhbnNmb3JtOiBzY2FsZVkoJHJhdGlvKTtcbiAgICAgICAgICB0cmFuc2Zvcm06IHNjYWxlWSgkcmF0aW8pO1xufVxuQG1peGluIHNrZXcoJHgsICR5KSB7XG4gIC13ZWJraXQtdHJhbnNmb3JtOiBza2V3WCgkeCkgc2tld1koJHkpO1xuICAgICAgLW1zLXRyYW5zZm9ybTogc2tld1goJHgpIHNrZXdZKCR5KTsgLy8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9pc3N1ZXMvNDg4NTsgSUU5K1xuICAgICAgIC1vLXRyYW5zZm9ybTogc2tld1goJHgpIHNrZXdZKCR5KTtcbiAgICAgICAgICB0cmFuc2Zvcm06IHNrZXdYKCR4KSBza2V3WSgkeSk7XG59XG5AbWl4aW4gdHJhbnNsYXRlKCR4LCAkeSkge1xuICAtd2Via2l0LXRyYW5zZm9ybTogdHJhbnNsYXRlKCR4LCAkeSk7XG4gICAgICAtbXMtdHJhbnNmb3JtOiB0cmFuc2xhdGUoJHgsICR5KTsgLy8gSUU5IG9ubHlcbiAgICAgICAtby10cmFuc2Zvcm06IHRyYW5zbGF0ZSgkeCwgJHkpO1xuICAgICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlKCR4LCAkeSk7XG59XG5AbWl4aW4gdHJhbnNsYXRlM2QoJHgsICR5LCAkeikge1xuICAtd2Via2l0LXRyYW5zZm9ybTogdHJhbnNsYXRlM2QoJHgsICR5LCAkeik7XG4gICAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUzZCgkeCwgJHksICR6KTtcbn1cbkBtaXhpbiByb3RhdGUoJGRlZ3JlZXMpIHtcbiAgLXdlYmtpdC10cmFuc2Zvcm06IHJvdGF0ZSgkZGVncmVlcyk7XG4gICAgICAtbXMtdHJhbnNmb3JtOiByb3RhdGUoJGRlZ3JlZXMpOyAvLyBJRTkgb25seVxuICAgICAgIC1vLXRyYW5zZm9ybTogcm90YXRlKCRkZWdyZWVzKTtcbiAgICAgICAgICB0cmFuc2Zvcm06IHJvdGF0ZSgkZGVncmVlcyk7XG59XG5AbWl4aW4gcm90YXRlWCgkZGVncmVlcykge1xuICAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlWCgkZGVncmVlcyk7XG4gICAgICAtbXMtdHJhbnNmb3JtOiByb3RhdGVYKCRkZWdyZWVzKTsgLy8gSUU5IG9ubHlcbiAgICAgICAtby10cmFuc2Zvcm06IHJvdGF0ZVgoJGRlZ3JlZXMpO1xuICAgICAgICAgIHRyYW5zZm9ybTogcm90YXRlWCgkZGVncmVlcyk7XG59XG5AbWl4aW4gcm90YXRlWSgkZGVncmVlcykge1xuICAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlWSgkZGVncmVlcyk7XG4gICAgICAtbXMtdHJhbnNmb3JtOiByb3RhdGVZKCRkZWdyZWVzKTsgLy8gSUU5IG9ubHlcbiAgICAgICAtby10cmFuc2Zvcm06IHJvdGF0ZVkoJGRlZ3JlZXMpO1xuICAgICAgICAgIHRyYW5zZm9ybTogcm90YXRlWSgkZGVncmVlcyk7XG59XG5AbWl4aW4gcGVyc3BlY3RpdmUoJHBlcnNwZWN0aXZlKSB7XG4gIC13ZWJraXQtcGVyc3BlY3RpdmU6ICRwZXJzcGVjdGl2ZTtcbiAgICAgLW1vei1wZXJzcGVjdGl2ZTogJHBlcnNwZWN0aXZlO1xuICAgICAgICAgIHBlcnNwZWN0aXZlOiAkcGVyc3BlY3RpdmU7XG59XG5AbWl4aW4gcGVyc3BlY3RpdmUtb3JpZ2luKCRwZXJzcGVjdGl2ZSkge1xuICAtd2Via2l0LXBlcnNwZWN0aXZlLW9yaWdpbjogJHBlcnNwZWN0aXZlO1xuICAgICAtbW96LXBlcnNwZWN0aXZlLW9yaWdpbjogJHBlcnNwZWN0aXZlO1xuICAgICAgICAgIHBlcnNwZWN0aXZlLW9yaWdpbjogJHBlcnNwZWN0aXZlO1xufVxuQG1peGluIHRyYW5zZm9ybS1vcmlnaW4oJG9yaWdpbikge1xuICAtd2Via2l0LXRyYW5zZm9ybS1vcmlnaW46ICRvcmlnaW47XG4gICAgIC1tb3otdHJhbnNmb3JtLW9yaWdpbjogJG9yaWdpbjtcbiAgICAgIC1tcy10cmFuc2Zvcm0tb3JpZ2luOiAkb3JpZ2luOyAvLyBJRTkgb25seVxuICAgICAgICAgIHRyYW5zZm9ybS1vcmlnaW46ICRvcmlnaW47XG59XG5cblxuLy8gVHJhbnNpdGlvbnNcblxuQG1peGluIHRyYW5zaXRpb24oJHRyYW5zaXRpb24uLi4pIHtcbiAgLXdlYmtpdC10cmFuc2l0aW9uOiAkdHJhbnNpdGlvbjtcbiAgICAgICAtby10cmFuc2l0aW9uOiAkdHJhbnNpdGlvbjtcbiAgICAgICAgICB0cmFuc2l0aW9uOiAkdHJhbnNpdGlvbjtcbn1cbkBtaXhpbiB0cmFuc2l0aW9uLXByb3BlcnR5KCR0cmFuc2l0aW9uLXByb3BlcnR5Li4uKSB7XG4gIC13ZWJraXQtdHJhbnNpdGlvbi1wcm9wZXJ0eTogJHRyYW5zaXRpb24tcHJvcGVydHk7XG4gICAgICAgICAgdHJhbnNpdGlvbi1wcm9wZXJ0eTogJHRyYW5zaXRpb24tcHJvcGVydHk7XG59XG5AbWl4aW4gdHJhbnNpdGlvbi1kZWxheSgkdHJhbnNpdGlvbi1kZWxheSkge1xuICAtd2Via2l0LXRyYW5zaXRpb24tZGVsYXk6ICR0cmFuc2l0aW9uLWRlbGF5O1xuICAgICAgICAgIHRyYW5zaXRpb24tZGVsYXk6ICR0cmFuc2l0aW9uLWRlbGF5O1xufVxuQG1peGluIHRyYW5zaXRpb24tZHVyYXRpb24oJHRyYW5zaXRpb24tZHVyYXRpb24uLi4pIHtcbiAgLXdlYmtpdC10cmFuc2l0aW9uLWR1cmF0aW9uOiAkdHJhbnNpdGlvbi1kdXJhdGlvbjtcbiAgICAgICAgICB0cmFuc2l0aW9uLWR1cmF0aW9uOiAkdHJhbnNpdGlvbi1kdXJhdGlvbjtcbn1cbkBtaXhpbiB0cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbigkdGltaW5nLWZ1bmN0aW9uKSB7XG4gIC13ZWJraXQtdHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb246ICR0aW1pbmctZnVuY3Rpb247XG4gICAgICAgICAgdHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb246ICR0aW1pbmctZnVuY3Rpb247XG59XG5AbWl4aW4gdHJhbnNpdGlvbi10cmFuc2Zvcm0oJHRyYW5zaXRpb24uLi4pIHtcbiAgLXdlYmtpdC10cmFuc2l0aW9uOiAtd2Via2l0LXRyYW5zZm9ybSAkdHJhbnNpdGlvbjtcbiAgICAgLW1vei10cmFuc2l0aW9uOiAtbW96LXRyYW5zZm9ybSAkdHJhbnNpdGlvbjtcbiAgICAgICAtby10cmFuc2l0aW9uOiAtby10cmFuc2Zvcm0gJHRyYW5zaXRpb247XG4gICAgICAgICAgdHJhbnNpdGlvbjogdHJhbnNmb3JtICR0cmFuc2l0aW9uO1xufVxuXG5cbi8vIFVzZXIgc2VsZWN0XG4vLyBGb3Igc2VsZWN0aW5nIHRleHQgb24gdGhlIHBhZ2VcblxuQG1peGluIHVzZXItc2VsZWN0KCRzZWxlY3QpIHtcbiAgLXdlYmtpdC11c2VyLXNlbGVjdDogJHNlbGVjdDtcbiAgICAgLW1vei11c2VyLXNlbGVjdDogJHNlbGVjdDtcbiAgICAgIC1tcy11c2VyLXNlbGVjdDogJHNlbGVjdDsgLy8gSUUxMCtcbiAgICAgICAgICB1c2VyLXNlbGVjdDogJHNlbGVjdDtcbn1cbiIsIiRib290c3RyYXAtc2Fzcy1hc3NldC1oZWxwZXI6IGZhbHNlICFkZWZhdWx0O1xuLy9cbi8vIFZhcmlhYmxlc1xuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuXG4vLz09IENvbG9yc1xuLy9cbi8vIyMgR3JheSBhbmQgYnJhbmQgY29sb3JzIGZvciB1c2UgYWNyb3NzIEJvb3RzdHJhcC5cblxuJGdyYXktYmFzZTogICAgICAgICAgICAgICMwMDAgIWRlZmF1bHQ7XG4kZ3JheS1kYXJrZXI6ICAgICAgICAgICAgbGlnaHRlbigkZ3JheS1iYXNlLCAxMy41JSkgIWRlZmF1bHQ7IC8vICMyMjJcbiRncmF5LWRhcms6ICAgICAgICAgICAgICBsaWdodGVuKCRncmF5LWJhc2UsIDIwJSkgIWRlZmF1bHQ7ICAgLy8gIzMzM1xuJGdyYXk6ICAgICAgICAgICAgICAgICAgIGxpZ2h0ZW4oJGdyYXktYmFzZSwgMzMuNSUpICFkZWZhdWx0OyAvLyAjNTU1XG4kZ3JheS1saWdodDogICAgICAgICAgICAgbGlnaHRlbigkZ3JheS1iYXNlLCA0Ni43JSkgIWRlZmF1bHQ7IC8vICM3NzdcbiRncmF5LWxpZ2h0ZXI6ICAgICAgICAgICBsaWdodGVuKCRncmF5LWJhc2UsIDkzLjUlKSAhZGVmYXVsdDsgLy8gI2VlZVxuXG4kYnJhbmQtcHJpbWFyeTogICAgICAgICBkYXJrZW4oIzQyOGJjYSwgNi41JSkgIWRlZmF1bHQ7IC8vICMzMzdhYjdcbiRicmFuZC1zdWNjZXNzOiAgICAgICAgICM1Y2I4NWMgIWRlZmF1bHQ7XG4kYnJhbmQtaW5mbzogICAgICAgICAgICAjNWJjMGRlICFkZWZhdWx0O1xuJGJyYW5kLXdhcm5pbmc6ICAgICAgICAgI2YwYWQ0ZSAhZGVmYXVsdDtcbiRicmFuZC1kYW5nZXI6ICAgICAgICAgICNkOTUzNGYgIWRlZmF1bHQ7XG5cblxuLy89PSBTY2FmZm9sZGluZ1xuLy9cbi8vIyMgU2V0dGluZ3MgZm9yIHNvbWUgb2YgdGhlIG1vc3QgZ2xvYmFsIHN0eWxlcy5cblxuLy8qKiBCYWNrZ3JvdW5kIGNvbG9yIGZvciBgPGJvZHk+YC5cbiRib2R5LWJnOiAgICAgICAgICAgICAgICNmZmYgIWRlZmF1bHQ7XG4vLyoqIEdsb2JhbCB0ZXh0IGNvbG9yIG9uIGA8Ym9keT5gLlxuJHRleHQtY29sb3I6ICAgICAgICAgICAgJGdyYXktZGFyayAhZGVmYXVsdDtcblxuLy8qKiBHbG9iYWwgdGV4dHVhbCBsaW5rIGNvbG9yLlxuJGxpbmstY29sb3I6ICAgICAgICAgICAgJGJyYW5kLXByaW1hcnkgIWRlZmF1bHQ7XG4vLyoqIExpbmsgaG92ZXIgY29sb3Igc2V0IHZpYSBgZGFya2VuKClgIGZ1bmN0aW9uLlxuJGxpbmstaG92ZXItY29sb3I6ICAgICAgZGFya2VuKCRsaW5rLWNvbG9yLCAxNSUpICFkZWZhdWx0O1xuLy8qKiBMaW5rIGhvdmVyIGRlY29yYXRpb24uXG4kbGluay1ob3Zlci1kZWNvcmF0aW9uOiB1bmRlcmxpbmUgIWRlZmF1bHQ7XG5cblxuLy89PSBUeXBvZ3JhcGh5XG4vL1xuLy8jIyBGb250LCBsaW5lLWhlaWdodCwgYW5kIGNvbG9yIGZvciBib2R5IHRleHQsIGhlYWRpbmdzLCBhbmQgbW9yZS5cblxuJGZvbnQtZmFtaWx5LXNhbnMtc2VyaWY6ICBcIkhlbHZldGljYSBOZXVlXCIsIEhlbHZldGljYSwgQXJpYWwsIHNhbnMtc2VyaWYgIWRlZmF1bHQ7XG4kZm9udC1mYW1pbHktc2VyaWY6ICAgICAgIEdlb3JnaWEsIFwiVGltZXMgTmV3IFJvbWFuXCIsIFRpbWVzLCBzZXJpZiAhZGVmYXVsdDtcbi8vKiogRGVmYXVsdCBtb25vc3BhY2UgZm9udHMgZm9yIGA8Y29kZT5gLCBgPGtiZD5gLCBhbmQgYDxwcmU+YC5cbiRmb250LWZhbWlseS1tb25vc3BhY2U6ICAgTWVubG8sIE1vbmFjbywgQ29uc29sYXMsIFwiQ291cmllciBOZXdcIiwgbW9ub3NwYWNlICFkZWZhdWx0O1xuJGZvbnQtZmFtaWx5LWJhc2U6ICAgICAgICAkZm9udC1mYW1pbHktc2Fucy1zZXJpZiAhZGVmYXVsdDtcblxuJGZvbnQtc2l6ZS1iYXNlOiAgICAgICAgICAxNHB4ICFkZWZhdWx0O1xuJGZvbnQtc2l6ZS1sYXJnZTogICAgICAgICBjZWlsKCgkZm9udC1zaXplLWJhc2UgKiAxLjI1KSkgIWRlZmF1bHQ7IC8vIH4xOHB4XG4kZm9udC1zaXplLXNtYWxsOiAgICAgICAgIGNlaWwoKCRmb250LXNpemUtYmFzZSAqIDAuODUpKSAhZGVmYXVsdDsgLy8gfjEycHhcblxuJGZvbnQtc2l6ZS1oMTogICAgICAgICAgICBmbG9vcigoJGZvbnQtc2l6ZS1iYXNlICogMi42KSkgIWRlZmF1bHQ7IC8vIH4zNnB4XG4kZm9udC1zaXplLWgyOiAgICAgICAgICAgIGZsb29yKCgkZm9udC1zaXplLWJhc2UgKiAyLjE1KSkgIWRlZmF1bHQ7IC8vIH4zMHB4XG4kZm9udC1zaXplLWgzOiAgICAgICAgICAgIGNlaWwoKCRmb250LXNpemUtYmFzZSAqIDEuNykpICFkZWZhdWx0OyAvLyB+MjRweFxuJGZvbnQtc2l6ZS1oNDogICAgICAgICAgICBjZWlsKCgkZm9udC1zaXplLWJhc2UgKiAxLjI1KSkgIWRlZmF1bHQ7IC8vIH4xOHB4XG4kZm9udC1zaXplLWg1OiAgICAgICAgICAgICRmb250LXNpemUtYmFzZSAhZGVmYXVsdDtcbiRmb250LXNpemUtaDY6ICAgICAgICAgICAgY2VpbCgoJGZvbnQtc2l6ZS1iYXNlICogMC44NSkpICFkZWZhdWx0OyAvLyB+MTJweFxuXG4vLyoqIFVuaXQtbGVzcyBgbGluZS1oZWlnaHRgIGZvciB1c2UgaW4gY29tcG9uZW50cyBsaWtlIGJ1dHRvbnMuXG4kbGluZS1oZWlnaHQtYmFzZTogICAgICAgIDEuNDI4NTcxNDI5ICFkZWZhdWx0OyAvLyAyMC8xNFxuLy8qKiBDb21wdXRlZCBcImxpbmUtaGVpZ2h0XCIgKGBmb250LXNpemVgICogYGxpbmUtaGVpZ2h0YCkgZm9yIHVzZSB3aXRoIGBtYXJnaW5gLCBgcGFkZGluZ2AsIGV0Yy5cbiRsaW5lLWhlaWdodC1jb21wdXRlZDogICAgZmxvb3IoKCRmb250LXNpemUtYmFzZSAqICRsaW5lLWhlaWdodC1iYXNlKSkgIWRlZmF1bHQ7IC8vIH4yMHB4XG5cbi8vKiogQnkgZGVmYXVsdCwgdGhpcyBpbmhlcml0cyBmcm9tIHRoZSBgPGJvZHk+YC5cbiRoZWFkaW5ncy1mb250LWZhbWlseTogICAgaW5oZXJpdCAhZGVmYXVsdDtcbiRoZWFkaW5ncy1mb250LXdlaWdodDogICAgNzAwICFkZWZhdWx0O1xuJGhlYWRpbmdzLWxpbmUtaGVpZ2h0OiAgICAxLjEgIWRlZmF1bHQ7XG4kaGVhZGluZ3MtY29sb3I6ICAgICAgICAgIGluaGVyaXQgIWRlZmF1bHQ7XG5cblxuLy89PSBJY29ub2dyYXBoeVxuLy9cbi8vIyMgU3BlY2lmeSBjdXN0b20gbG9jYXRpb24gYW5kIGZpbGVuYW1lIG9mIHRoZSBpbmNsdWRlZCBHbHlwaGljb25zIGljb24gZm9udC4gVXNlZnVsIGZvciB0aG9zZSBpbmNsdWRpbmcgQm9vdHN0cmFwIHZpYSBCb3dlci5cblxuLy8qKiBMb2FkIGZvbnRzIGZyb20gdGhpcyBkaXJlY3RvcnkuXG5cbi8vIFtjb252ZXJ0ZXJdIElmICRib290c3RyYXAtc2Fzcy1hc3NldC1oZWxwZXIgaWYgdXNlZCwgcHJvdmlkZSBwYXRoIHJlbGF0aXZlIHRvIHRoZSBhc3NldHMgbG9hZCBwYXRoLlxuLy8gW2NvbnZlcnRlcl0gVGhpcyBpcyBiZWNhdXNlIHNvbWUgYXNzZXQgaGVscGVycywgc3VjaCBhcyBTcHJvY2tldHMsIGRvIG5vdCB3b3JrIHdpdGggZmlsZS1yZWxhdGl2ZSBwYXRocy5cbiRpY29uLWZvbnQtcGF0aDogaWYoJGJvb3RzdHJhcC1zYXNzLWFzc2V0LWhlbHBlciwgXCJib290c3RyYXAvXCIsIFwiLi4vZm9udHMvYm9vdHN0cmFwL1wiKSAhZGVmYXVsdDtcblxuLy8qKiBGaWxlIG5hbWUgZm9yIGFsbCBmb250IGZpbGVzLlxuJGljb24tZm9udC1uYW1lOiAgICAgICAgICBcImdseXBoaWNvbnMtaGFsZmxpbmdzLXJlZ3VsYXJcIiAhZGVmYXVsdDtcbi8vKiogRWxlbWVudCBJRCB3aXRoaW4gU1ZHIGljb24gZmlsZS5cbiRpY29uLWZvbnQtc3ZnLWlkOiAgICAgICAgXCJnbHlwaGljb25zX2hhbGZsaW5nc3JlZ3VsYXJcIiAhZGVmYXVsdDtcblxuXG4vLz09IENvbXBvbmVudHNcbi8vXG4vLyMjIERlZmluZSBjb21tb24gcGFkZGluZyBhbmQgYm9yZGVyIHJhZGl1cyBzaXplcyBhbmQgbW9yZS4gVmFsdWVzIGJhc2VkIG9uIDE0cHggdGV4dCBhbmQgMS40MjggbGluZS1oZWlnaHQgKH4yMHB4IHRvIHN0YXJ0KS5cblxuJHBhZGRpbmctYmFzZS12ZXJ0aWNhbDogICAgIDZweCAhZGVmYXVsdDtcbiRwYWRkaW5nLWJhc2UtaG9yaXpvbnRhbDogICAxMnB4ICFkZWZhdWx0O1xuXG4kcGFkZGluZy1sYXJnZS12ZXJ0aWNhbDogICAgMTBweCAhZGVmYXVsdDtcbiRwYWRkaW5nLWxhcmdlLWhvcml6b250YWw6ICAxNnB4ICFkZWZhdWx0O1xuXG4kcGFkZGluZy1zbWFsbC12ZXJ0aWNhbDogICAgNXB4ICFkZWZhdWx0O1xuJHBhZGRpbmctc21hbGwtaG9yaXpvbnRhbDogIDEwcHggIWRlZmF1bHQ7XG5cbiRwYWRkaW5nLXhzLXZlcnRpY2FsOiAgICAgICAxcHggIWRlZmF1bHQ7XG4kcGFkZGluZy14cy1ob3Jpem9udGFsOiAgICAgNXB4ICFkZWZhdWx0O1xuXG4kbGluZS1oZWlnaHQtbGFyZ2U6ICAgICAgICAgMS4zMzMzMzMzICFkZWZhdWx0OyAvLyBleHRyYSBkZWNpbWFscyBmb3IgV2luIDguMSBDaHJvbWVcbiRsaW5lLWhlaWdodC1zbWFsbDogICAgICAgICAxLjUgIWRlZmF1bHQ7XG5cbiRib3JkZXItcmFkaXVzLWJhc2U6ICAgICAgICA0cHggIWRlZmF1bHQ7XG4kYm9yZGVyLXJhZGl1cy1sYXJnZTogICAgICAgNnB4ICFkZWZhdWx0O1xuJGJvcmRlci1yYWRpdXMtc21hbGw6ICAgICAgIDNweCAhZGVmYXVsdDtcblxuLy8qKiBHbG9iYWwgY29sb3IgZm9yIGFjdGl2ZSBpdGVtcyAoZS5nLiwgbmF2cyBvciBkcm9wZG93bnMpLlxuJGNvbXBvbmVudC1hY3RpdmUtY29sb3I6ICAgICNmZmYgIWRlZmF1bHQ7XG4vLyoqIEdsb2JhbCBiYWNrZ3JvdW5kIGNvbG9yIGZvciBhY3RpdmUgaXRlbXMgKGUuZy4sIG5hdnMgb3IgZHJvcGRvd25zKS5cbiRjb21wb25lbnQtYWN0aXZlLWJnOiAgICAgICAkYnJhbmQtcHJpbWFyeSAhZGVmYXVsdDtcblxuLy8qKiBXaWR0aCBvZiB0aGUgYGJvcmRlcmAgZm9yIGdlbmVyYXRpbmcgY2FyZXRzIHRoYXQgaW5kaWNhdG9yIGRyb3Bkb3ducy5cbiRjYXJldC13aWR0aC1iYXNlOiAgICAgICAgICA0cHggIWRlZmF1bHQ7XG4vLyoqIENhcmV0cyBpbmNyZWFzZSBzbGlnaHRseSBpbiBzaXplIGZvciBsYXJnZXIgY29tcG9uZW50cy5cbiRjYXJldC13aWR0aC1sYXJnZTogICAgICAgICA1cHggIWRlZmF1bHQ7XG5cblxuLy89PSBUYWJsZXNcbi8vXG4vLyMjIEN1c3RvbWl6ZXMgdGhlIGAudGFibGVgIGNvbXBvbmVudCB3aXRoIGJhc2ljIHZhbHVlcywgZWFjaCB1c2VkIGFjcm9zcyBhbGwgdGFibGUgdmFyaWF0aW9ucy5cblxuLy8qKiBQYWRkaW5nIGZvciBgPHRoPmBzIGFuZCBgPHRkPmBzLlxuJHRhYmxlLWNlbGwtcGFkZGluZzogICAgICAgICAgICA4cHggIWRlZmF1bHQ7XG4vLyoqIFBhZGRpbmcgZm9yIGNlbGxzIGluIGAudGFibGUtY29uZGVuc2VkYC5cbiR0YWJsZS1jb25kZW5zZWQtY2VsbC1wYWRkaW5nOiAgNXB4ICFkZWZhdWx0O1xuXG4vLyoqIERlZmF1bHQgYmFja2dyb3VuZCBjb2xvciB1c2VkIGZvciBhbGwgdGFibGVzLlxuJHRhYmxlLWJnOiAgICAgICAgICAgICAgICAgICAgICB0cmFuc3BhcmVudCAhZGVmYXVsdDtcbi8vKiogQmFja2dyb3VuZCBjb2xvciB1c2VkIGZvciBgLnRhYmxlLXN0cmlwZWRgLlxuJHRhYmxlLWJnLWFjY2VudDogICAgICAgICAgICAgICAjZjlmOWY5ICFkZWZhdWx0O1xuLy8qKiBCYWNrZ3JvdW5kIGNvbG9yIHVzZWQgZm9yIGAudGFibGUtaG92ZXJgLlxuJHRhYmxlLWJnLWhvdmVyOiAgICAgICAgICAgICAgICAjZjVmNWY1ICFkZWZhdWx0O1xuJHRhYmxlLWJnLWFjdGl2ZTogICAgICAgICAgICAgICAkdGFibGUtYmctaG92ZXIgIWRlZmF1bHQ7XG5cbi8vKiogQm9yZGVyIGNvbG9yIGZvciB0YWJsZSBhbmQgY2VsbCBib3JkZXJzLlxuJHRhYmxlLWJvcmRlci1jb2xvcjogICAgICAgICAgICAjZGRkICFkZWZhdWx0O1xuXG5cbi8vPT0gQnV0dG9uc1xuLy9cbi8vIyMgRm9yIGVhY2ggb2YgQm9vdHN0cmFwJ3MgYnV0dG9ucywgZGVmaW5lIHRleHQsIGJhY2tncm91bmQgYW5kIGJvcmRlciBjb2xvci5cblxuJGJ0bi1mb250LXdlaWdodDogICAgICAgICAgICAgICAgbm9ybWFsICFkZWZhdWx0O1xuXG4kYnRuLWRlZmF1bHQtY29sb3I6ICAgICAgICAgICAgICAjMzMzICFkZWZhdWx0O1xuJGJ0bi1kZWZhdWx0LWJnOiAgICAgICAgICAgICAgICAgI2ZmZiAhZGVmYXVsdDtcbiRidG4tZGVmYXVsdC1ib3JkZXI6ICAgICAgICAgICAgICNjY2MgIWRlZmF1bHQ7XG5cbiRidG4tcHJpbWFyeS1jb2xvcjogICAgICAgICAgICAgICNmZmYgIWRlZmF1bHQ7XG4kYnRuLXByaW1hcnktYmc6ICAgICAgICAgICAgICAgICAkYnJhbmQtcHJpbWFyeSAhZGVmYXVsdDtcbiRidG4tcHJpbWFyeS1ib3JkZXI6ICAgICAgICAgICAgIGRhcmtlbigkYnRuLXByaW1hcnktYmcsIDUlKSAhZGVmYXVsdDtcblxuJGJ0bi1zdWNjZXNzLWNvbG9yOiAgICAgICAgICAgICAgI2ZmZiAhZGVmYXVsdDtcbiRidG4tc3VjY2Vzcy1iZzogICAgICAgICAgICAgICAgICRicmFuZC1zdWNjZXNzICFkZWZhdWx0O1xuJGJ0bi1zdWNjZXNzLWJvcmRlcjogICAgICAgICAgICAgZGFya2VuKCRidG4tc3VjY2Vzcy1iZywgNSUpICFkZWZhdWx0O1xuXG4kYnRuLWluZm8tY29sb3I6ICAgICAgICAgICAgICAgICAjZmZmICFkZWZhdWx0O1xuJGJ0bi1pbmZvLWJnOiAgICAgICAgICAgICAgICAgICAgJGJyYW5kLWluZm8gIWRlZmF1bHQ7XG4kYnRuLWluZm8tYm9yZGVyOiAgICAgICAgICAgICAgICBkYXJrZW4oJGJ0bi1pbmZvLWJnLCA1JSkgIWRlZmF1bHQ7XG5cbiRidG4td2FybmluZy1jb2xvcjogICAgICAgICAgICAgICNmZmYgIWRlZmF1bHQ7XG4kYnRuLXdhcm5pbmctYmc6ICAgICAgICAgICAgICAgICAkYnJhbmQtd2FybmluZyAhZGVmYXVsdDtcbiRidG4td2FybmluZy1ib3JkZXI6ICAgICAgICAgICAgIGRhcmtlbigkYnRuLXdhcm5pbmctYmcsIDUlKSAhZGVmYXVsdDtcblxuJGJ0bi1kYW5nZXItY29sb3I6ICAgICAgICAgICAgICAgI2ZmZiAhZGVmYXVsdDtcbiRidG4tZGFuZ2VyLWJnOiAgICAgICAgICAgICAgICAgICRicmFuZC1kYW5nZXIgIWRlZmF1bHQ7XG4kYnRuLWRhbmdlci1ib3JkZXI6ICAgICAgICAgICAgICBkYXJrZW4oJGJ0bi1kYW5nZXItYmcsIDUlKSAhZGVmYXVsdDtcblxuJGJ0bi1saW5rLWRpc2FibGVkLWNvbG9yOiAgICAgICAgJGdyYXktbGlnaHQgIWRlZmF1bHQ7XG5cblxuLy89PSBGb3Jtc1xuLy9cbi8vIyNcblxuLy8qKiBgPGlucHV0PmAgYmFja2dyb3VuZCBjb2xvclxuJGlucHV0LWJnOiAgICAgICAgICAgICAgICAgICAgICAgI2ZmZiAhZGVmYXVsdDtcbi8vKiogYDxpbnB1dCBkaXNhYmxlZD5gIGJhY2tncm91bmQgY29sb3JcbiRpbnB1dC1iZy1kaXNhYmxlZDogICAgICAgICAgICAgICRncmF5LWxpZ2h0ZXIgIWRlZmF1bHQ7XG5cbi8vKiogVGV4dCBjb2xvciBmb3IgYDxpbnB1dD5gc1xuJGlucHV0LWNvbG9yOiAgICAgICAgICAgICAgICAgICAgJGdyYXkgIWRlZmF1bHQ7XG4vLyoqIGA8aW5wdXQ+YCBib3JkZXIgY29sb3JcbiRpbnB1dC1ib3JkZXI6ICAgICAgICAgICAgICAgICAgICNjY2MgIWRlZmF1bHQ7XG5cbi8vIFRPRE86IFJlbmFtZSBgJGlucHV0LWJvcmRlci1yYWRpdXNgIHRvIGAkaW5wdXQtYm9yZGVyLXJhZGl1cy1iYXNlYCBpbiB2NFxuLy8qKiBEZWZhdWx0IGAuZm9ybS1jb250cm9sYCBib3JkZXIgcmFkaXVzXG4vLyBUaGlzIGhhcyBubyBlZmZlY3Qgb24gYDxzZWxlY3Q+YHMgaW4gc29tZSBicm93c2VycywgZHVlIHRvIHRoZSBsaW1pdGVkIHN0eWxhYmlsaXR5IG9mIGA8c2VsZWN0PmBzIGluIENTUy5cbiRpbnB1dC1ib3JkZXItcmFkaXVzOiAgICAgICAgICAgICRib3JkZXItcmFkaXVzLWJhc2UgIWRlZmF1bHQ7XG4vLyoqIExhcmdlIGAuZm9ybS1jb250cm9sYCBib3JkZXIgcmFkaXVzXG4kaW5wdXQtYm9yZGVyLXJhZGl1cy1sYXJnZTogICAgICAkYm9yZGVyLXJhZGl1cy1sYXJnZSAhZGVmYXVsdDtcbi8vKiogU21hbGwgYC5mb3JtLWNvbnRyb2xgIGJvcmRlciByYWRpdXNcbiRpbnB1dC1ib3JkZXItcmFkaXVzLXNtYWxsOiAgICAgICRib3JkZXItcmFkaXVzLXNtYWxsICFkZWZhdWx0O1xuXG4vLyoqIEJvcmRlciBjb2xvciBmb3IgaW5wdXRzIG9uIGZvY3VzXG4kaW5wdXQtYm9yZGVyLWZvY3VzOiAgICAgICAgICAgICAjNjZhZmU5ICFkZWZhdWx0O1xuXG4vLyoqIFBsYWNlaG9sZGVyIHRleHQgY29sb3JcbiRpbnB1dC1jb2xvci1wbGFjZWhvbGRlcjogICAgICAgICM5OTkgIWRlZmF1bHQ7XG5cbi8vKiogRGVmYXVsdCBgLmZvcm0tY29udHJvbGAgaGVpZ2h0XG4kaW5wdXQtaGVpZ2h0LWJhc2U6ICAgICAgICAgICAgICAoJGxpbmUtaGVpZ2h0LWNvbXB1dGVkICsgKCRwYWRkaW5nLWJhc2UtdmVydGljYWwgKiAyKSArIDIpICFkZWZhdWx0O1xuLy8qKiBMYXJnZSBgLmZvcm0tY29udHJvbGAgaGVpZ2h0XG4kaW5wdXQtaGVpZ2h0LWxhcmdlOiAgICAgICAgICAgICAoY2VpbCgkZm9udC1zaXplLWxhcmdlICogJGxpbmUtaGVpZ2h0LWxhcmdlKSArICgkcGFkZGluZy1sYXJnZS12ZXJ0aWNhbCAqIDIpICsgMikgIWRlZmF1bHQ7XG4vLyoqIFNtYWxsIGAuZm9ybS1jb250cm9sYCBoZWlnaHRcbiRpbnB1dC1oZWlnaHQtc21hbGw6ICAgICAgICAgICAgIChmbG9vcigkZm9udC1zaXplLXNtYWxsICogJGxpbmUtaGVpZ2h0LXNtYWxsKSArICgkcGFkZGluZy1zbWFsbC12ZXJ0aWNhbCAqIDIpICsgMikgIWRlZmF1bHQ7XG5cbi8vKiogYC5mb3JtLWdyb3VwYCBtYXJnaW5cbiRmb3JtLWdyb3VwLW1hcmdpbi1ib3R0b206ICAgICAgIDE1cHggIWRlZmF1bHQ7XG5cbiRsZWdlbmQtY29sb3I6ICAgICAgICAgICAgICAgICAgICRncmF5LWRhcmsgIWRlZmF1bHQ7XG4kbGVnZW5kLWJvcmRlci1jb2xvcjogICAgICAgICAgICAjZTVlNWU1ICFkZWZhdWx0O1xuXG4vLyoqIEJhY2tncm91bmQgY29sb3IgZm9yIHRleHR1YWwgaW5wdXQgYWRkb25zXG4kaW5wdXQtZ3JvdXAtYWRkb24tYmc6ICAgICAgICAgICAkZ3JheS1saWdodGVyICFkZWZhdWx0O1xuLy8qKiBCb3JkZXIgY29sb3IgZm9yIHRleHR1YWwgaW5wdXQgYWRkb25zXG4kaW5wdXQtZ3JvdXAtYWRkb24tYm9yZGVyLWNvbG9yOiAkaW5wdXQtYm9yZGVyICFkZWZhdWx0O1xuXG4vLyoqIERpc2FibGVkIGN1cnNvciBmb3IgZm9ybSBjb250cm9scyBhbmQgYnV0dG9ucy5cbiRjdXJzb3ItZGlzYWJsZWQ6ICAgICAgICAgICAgICAgIG5vdC1hbGxvd2VkICFkZWZhdWx0O1xuXG5cbi8vPT0gRHJvcGRvd25zXG4vL1xuLy8jIyBEcm9wZG93biBtZW51IGNvbnRhaW5lciBhbmQgY29udGVudHMuXG5cbi8vKiogQmFja2dyb3VuZCBmb3IgdGhlIGRyb3Bkb3duIG1lbnUuXG4kZHJvcGRvd24tYmc6ICAgICAgICAgICAgICAgICAgICAjZmZmICFkZWZhdWx0O1xuLy8qKiBEcm9wZG93biBtZW51IGBib3JkZXItY29sb3JgLlxuJGRyb3Bkb3duLWJvcmRlcjogICAgICAgICAgICAgICAgcmdiYSgwLDAsMCwuMTUpICFkZWZhdWx0O1xuLy8qKiBEcm9wZG93biBtZW51IGBib3JkZXItY29sb3JgICoqZm9yIElFOCoqLlxuJGRyb3Bkb3duLWZhbGxiYWNrLWJvcmRlcjogICAgICAgI2NjYyAhZGVmYXVsdDtcbi8vKiogRGl2aWRlciBjb2xvciBmb3IgYmV0d2VlbiBkcm9wZG93biBpdGVtcy5cbiRkcm9wZG93bi1kaXZpZGVyLWJnOiAgICAgICAgICAgICNlNWU1ZTUgIWRlZmF1bHQ7XG5cbi8vKiogRHJvcGRvd24gbGluayB0ZXh0IGNvbG9yLlxuJGRyb3Bkb3duLWxpbmstY29sb3I6ICAgICAgICAgICAgJGdyYXktZGFyayAhZGVmYXVsdDtcbi8vKiogSG92ZXIgY29sb3IgZm9yIGRyb3Bkb3duIGxpbmtzLlxuJGRyb3Bkb3duLWxpbmstaG92ZXItY29sb3I6ICAgICAgZGFya2VuKCRncmF5LWRhcmssIDUlKSAhZGVmYXVsdDtcbi8vKiogSG92ZXIgYmFja2dyb3VuZCBmb3IgZHJvcGRvd24gbGlua3MuXG4kZHJvcGRvd24tbGluay1ob3Zlci1iZzogICAgICAgICAjZjVmNWY1ICFkZWZhdWx0O1xuXG4vLyoqIEFjdGl2ZSBkcm9wZG93biBtZW51IGl0ZW0gdGV4dCBjb2xvci5cbiRkcm9wZG93bi1saW5rLWFjdGl2ZS1jb2xvcjogICAgICRjb21wb25lbnQtYWN0aXZlLWNvbG9yICFkZWZhdWx0O1xuLy8qKiBBY3RpdmUgZHJvcGRvd24gbWVudSBpdGVtIGJhY2tncm91bmQgY29sb3IuXG4kZHJvcGRvd24tbGluay1hY3RpdmUtYmc6ICAgICAgICAkY29tcG9uZW50LWFjdGl2ZS1iZyAhZGVmYXVsdDtcblxuLy8qKiBEaXNhYmxlZCBkcm9wZG93biBtZW51IGl0ZW0gYmFja2dyb3VuZCBjb2xvci5cbiRkcm9wZG93bi1saW5rLWRpc2FibGVkLWNvbG9yOiAgICRncmF5LWxpZ2h0ICFkZWZhdWx0O1xuXG4vLyoqIFRleHQgY29sb3IgZm9yIGhlYWRlcnMgd2l0aGluIGRyb3Bkb3duIG1lbnVzLlxuJGRyb3Bkb3duLWhlYWRlci1jb2xvcjogICAgICAgICAgJGdyYXktbGlnaHQgIWRlZmF1bHQ7XG5cbi8vKiogRGVwcmVjYXRlZCBgJGRyb3Bkb3duLWNhcmV0LWNvbG9yYCBhcyBvZiB2My4xLjBcbiRkcm9wZG93bi1jYXJldC1jb2xvcjogICAgICAgICAgICMwMDAgIWRlZmF1bHQ7XG5cblxuLy8tLSBaLWluZGV4IG1hc3RlciBsaXN0XG4vL1xuLy8gV2FybmluZzogQXZvaWQgY3VzdG9taXppbmcgdGhlc2UgdmFsdWVzLiBUaGV5J3JlIHVzZWQgZm9yIGEgYmlyZCdzIGV5ZSB2aWV3XG4vLyBvZiBjb21wb25lbnRzIGRlcGVuZGVudCBvbiB0aGUgei1heGlzIGFuZCBhcmUgZGVzaWduZWQgdG8gYWxsIHdvcmsgdG9nZXRoZXIuXG4vL1xuLy8gTm90ZTogVGhlc2UgdmFyaWFibGVzIGFyZSBub3QgZ2VuZXJhdGVkIGludG8gdGhlIEN1c3RvbWl6ZXIuXG5cbiR6aW5kZXgtbmF2YmFyOiAgICAgICAgICAgIDEwMDAgIWRlZmF1bHQ7XG4kemluZGV4LWRyb3Bkb3duOiAgICAgICAgICAxMDAwICFkZWZhdWx0O1xuJHppbmRleC1wb3BvdmVyOiAgICAgICAgICAgMTA2MCAhZGVmYXVsdDtcbiR6aW5kZXgtdG9vbHRpcDogICAgICAgICAgIDEwNzAgIWRlZmF1bHQ7XG4kemluZGV4LW5hdmJhci1maXhlZDogICAgICAxMDMwICFkZWZhdWx0O1xuJHppbmRleC1tb2RhbC1iYWNrZ3JvdW5kOiAgMTA0MCAhZGVmYXVsdDtcbiR6aW5kZXgtbW9kYWw6ICAgICAgICAgICAgIDEwNTAgIWRlZmF1bHQ7XG5cblxuLy89PSBNZWRpYSBxdWVyaWVzIGJyZWFrcG9pbnRzXG4vL1xuLy8jIyBEZWZpbmUgdGhlIGJyZWFrcG9pbnRzIGF0IHdoaWNoIHlvdXIgbGF5b3V0IHdpbGwgY2hhbmdlLCBhZGFwdGluZyB0byBkaWZmZXJlbnQgc2NyZWVuIHNpemVzLlxuXG4vLyBFeHRyYSBzbWFsbCBzY3JlZW4gLyBwaG9uZVxuLy8qKiBEZXByZWNhdGVkIGAkc2NyZWVuLXhzYCBhcyBvZiB2My4wLjFcbiRzY3JlZW4teHM6ICAgICAgICAgICAgICAgICAgNDgwcHggIWRlZmF1bHQ7XG4vLyoqIERlcHJlY2F0ZWQgYCRzY3JlZW4teHMtbWluYCBhcyBvZiB2My4yLjBcbiRzY3JlZW4teHMtbWluOiAgICAgICAgICAgICAgJHNjcmVlbi14cyAhZGVmYXVsdDtcbi8vKiogRGVwcmVjYXRlZCBgJHNjcmVlbi1waG9uZWAgYXMgb2YgdjMuMC4xXG4kc2NyZWVuLXBob25lOiAgICAgICAgICAgICAgICRzY3JlZW4teHMtbWluICFkZWZhdWx0O1xuXG4vLyBTbWFsbCBzY3JlZW4gLyB0YWJsZXRcbi8vKiogRGVwcmVjYXRlZCBgJHNjcmVlbi1zbWAgYXMgb2YgdjMuMC4xXG4kc2NyZWVuLXNtOiAgICAgICAgICAgICAgICAgIDc2OHB4ICFkZWZhdWx0O1xuJHNjcmVlbi1zbS1taW46ICAgICAgICAgICAgICAkc2NyZWVuLXNtICFkZWZhdWx0O1xuLy8qKiBEZXByZWNhdGVkIGAkc2NyZWVuLXRhYmxldGAgYXMgb2YgdjMuMC4xXG4kc2NyZWVuLXRhYmxldDogICAgICAgICAgICAgICRzY3JlZW4tc20tbWluICFkZWZhdWx0O1xuXG4vLyBNZWRpdW0gc2NyZWVuIC8gZGVza3RvcFxuLy8qKiBEZXByZWNhdGVkIGAkc2NyZWVuLW1kYCBhcyBvZiB2My4wLjFcbiRzY3JlZW4tbWQ6ICAgICAgICAgICAgICAgICAgOTkycHggIWRlZmF1bHQ7XG4kc2NyZWVuLW1kLW1pbjogICAgICAgICAgICAgICRzY3JlZW4tbWQgIWRlZmF1bHQ7XG4vLyoqIERlcHJlY2F0ZWQgYCRzY3JlZW4tZGVza3RvcGAgYXMgb2YgdjMuMC4xXG4kc2NyZWVuLWRlc2t0b3A6ICAgICAgICAgICAgICRzY3JlZW4tbWQtbWluICFkZWZhdWx0O1xuXG4vLyBMYXJnZSBzY3JlZW4gLyB3aWRlIGRlc2t0b3Bcbi8vKiogRGVwcmVjYXRlZCBgJHNjcmVlbi1sZ2AgYXMgb2YgdjMuMC4xXG4kc2NyZWVuLWxnOiAgICAgICAgICAgICAgICAgIDEyMjBweCAhZGVmYXVsdDtcbiRzY3JlZW4tbGctbWluOiAgICAgICAgICAgICAgJHNjcmVlbi1sZyAhZGVmYXVsdDtcbi8vKiogRGVwcmVjYXRlZCBgJHNjcmVlbi1sZy1kZXNrdG9wYCBhcyBvZiB2My4wLjFcbiRzY3JlZW4tbGctZGVza3RvcDogICAgICAgICAgJHNjcmVlbi1sZy1taW4gIWRlZmF1bHQ7XG5cbi8vIFNvIG1lZGlhIHF1ZXJpZXMgZG9uJ3Qgb3ZlcmxhcCB3aGVuIHJlcXVpcmVkLCBwcm92aWRlIGEgbWF4aW11bVxuJHNjcmVlbi14cy1tYXg6ICAgICAgICAgICAgICAoJHNjcmVlbi1zbS1taW4gLSAxKSAhZGVmYXVsdDtcbiRzY3JlZW4tc20tbWF4OiAgICAgICAgICAgICAgKCRzY3JlZW4tbWQtbWluIC0gMSkgIWRlZmF1bHQ7XG4kc2NyZWVuLW1kLW1heDogICAgICAgICAgICAgICgkc2NyZWVuLWxnLW1pbiAtIDEpICFkZWZhdWx0O1xuXG5cbi8vPT0gR3JpZCBzeXN0ZW1cbi8vXG4vLyMjIERlZmluZSB5b3VyIGN1c3RvbSByZXNwb25zaXZlIGdyaWQuXG5cbi8vKiogTnVtYmVyIG9mIGNvbHVtbnMgaW4gdGhlIGdyaWQuXG4kZ3JpZC1jb2x1bW5zOiAgICAgICAgICAgICAgMTIgIWRlZmF1bHQ7XG4vLyoqIFBhZGRpbmcgYmV0d2VlbiBjb2x1bW5zLiBHZXRzIGRpdmlkZWQgaW4gaGFsZiBmb3IgdGhlIGxlZnQgYW5kIHJpZ2h0LlxuJGdyaWQtZ3V0dGVyLXdpZHRoOiAgICAgICAgIDMwcHggIWRlZmF1bHQ7XG4vLyBOYXZiYXIgY29sbGFwc2Vcbi8vKiogUG9pbnQgYXQgd2hpY2ggdGhlIG5hdmJhciBiZWNvbWVzIHVuY29sbGFwc2VkLlxuJGdyaWQtZmxvYXQtYnJlYWtwb2ludDogICAgICRzY3JlZW4tc20tbWluICFkZWZhdWx0O1xuLy8qKiBQb2ludCBhdCB3aGljaCB0aGUgbmF2YmFyIGJlZ2lucyBjb2xsYXBzaW5nLlxuJGdyaWQtZmxvYXQtYnJlYWtwb2ludC1tYXg6ICgkZ3JpZC1mbG9hdC1icmVha3BvaW50IC0gMSkgIWRlZmF1bHQ7XG5cblxuLy89PSBDb250YWluZXIgc2l6ZXNcbi8vXG4vLyMjIERlZmluZSB0aGUgbWF4aW11bSB3aWR0aCBvZiBgLmNvbnRhaW5lcmAgZm9yIGRpZmZlcmVudCBzY3JlZW4gc2l6ZXMuXG5cbi8vIFNtYWxsIHNjcmVlbiAvIHRhYmxldFxuJGNvbnRhaW5lci10YWJsZXQ6ICAgICAgICAgICAgICg3MjBweCArICRncmlkLWd1dHRlci13aWR0aCkgIWRlZmF1bHQ7XG4vLyoqIEZvciBgJHNjcmVlbi1zbS1taW5gIGFuZCB1cC5cbiRjb250YWluZXItc206ICAgICAgICAgICAgICAgICAkY29udGFpbmVyLXRhYmxldCAhZGVmYXVsdDtcblxuLy8gTWVkaXVtIHNjcmVlbiAvIGRlc2t0b3BcbiRjb250YWluZXItZGVza3RvcDogICAgICAgICAgICAoOTQwcHggKyAkZ3JpZC1ndXR0ZXItd2lkdGgpICFkZWZhdWx0O1xuLy8qKiBGb3IgYCRzY3JlZW4tbWQtbWluYCBhbmQgdXAuXG4kY29udGFpbmVyLW1kOiAgICAgICAgICAgICAgICAgJGNvbnRhaW5lci1kZXNrdG9wICFkZWZhdWx0O1xuXG4vLyBMYXJnZSBzY3JlZW4gLyB3aWRlIGRlc2t0b3BcbiRjb250YWluZXItbGFyZ2UtZGVza3RvcDogICAgICAoMTE0MHB4ICsgJGdyaWQtZ3V0dGVyLXdpZHRoKSAhZGVmYXVsdDtcbi8vKiogRm9yIGAkc2NyZWVuLWxnLW1pbmAgYW5kIHVwLlxuJGNvbnRhaW5lci1sZzogICAgICAgICAgICAgICAgICRjb250YWluZXItbGFyZ2UtZGVza3RvcCAhZGVmYXVsdDtcblxuXG4vLz09IE5hdmJhclxuLy9cbi8vIyNcblxuLy8gQmFzaWNzIG9mIGEgbmF2YmFyXG4kbmF2YmFyLWhlaWdodDogICAgICAgICAgICAgICAgICAgIDUwcHggIWRlZmF1bHQ7XG4kbmF2YmFyLW1hcmdpbi1ib3R0b206ICAgICAgICAgICAgICRsaW5lLWhlaWdodC1jb21wdXRlZCAhZGVmYXVsdDtcbiRuYXZiYXItYm9yZGVyLXJhZGl1czogICAgICAgICAgICAgJGJvcmRlci1yYWRpdXMtYmFzZSAhZGVmYXVsdDtcbiRuYXZiYXItcGFkZGluZy1ob3Jpem9udGFsOiAgICAgICAgZmxvb3IoKCRncmlkLWd1dHRlci13aWR0aCAvIDIpKSAhZGVmYXVsdDtcbiRuYXZiYXItcGFkZGluZy12ZXJ0aWNhbDogICAgICAgICAgKCgkbmF2YmFyLWhlaWdodCAtICRsaW5lLWhlaWdodC1jb21wdXRlZCkgLyAyKSAhZGVmYXVsdDtcbiRuYXZiYXItY29sbGFwc2UtbWF4LWhlaWdodDogICAgICAgMzQwcHggIWRlZmF1bHQ7XG5cbiRuYXZiYXItZGVmYXVsdC1jb2xvcjogICAgICAgICAgICAgIzc3NyAhZGVmYXVsdDtcbiRuYXZiYXItZGVmYXVsdC1iZzogICAgICAgICAgICAgICAgI2Y4ZjhmOCAhZGVmYXVsdDtcbiRuYXZiYXItZGVmYXVsdC1ib3JkZXI6ICAgICAgICAgICAgZGFya2VuKCRuYXZiYXItZGVmYXVsdC1iZywgNi41JSkgIWRlZmF1bHQ7XG5cbi8vIE5hdmJhciBsaW5rc1xuJG5hdmJhci1kZWZhdWx0LWxpbmstY29sb3I6ICAgICAgICAgICAgICAgICM3NzcgIWRlZmF1bHQ7XG4kbmF2YmFyLWRlZmF1bHQtbGluay1ob3Zlci1jb2xvcjogICAgICAgICAgIzMzMyAhZGVmYXVsdDtcbiRuYXZiYXItZGVmYXVsdC1saW5rLWhvdmVyLWJnOiAgICAgICAgICAgICB0cmFuc3BhcmVudCAhZGVmYXVsdDtcbiRuYXZiYXItZGVmYXVsdC1saW5rLWFjdGl2ZS1jb2xvcjogICAgICAgICAjNTU1ICFkZWZhdWx0O1xuJG5hdmJhci1kZWZhdWx0LWxpbmstYWN0aXZlLWJnOiAgICAgICAgICAgIGRhcmtlbigkbmF2YmFyLWRlZmF1bHQtYmcsIDYuNSUpICFkZWZhdWx0O1xuJG5hdmJhci1kZWZhdWx0LWxpbmstZGlzYWJsZWQtY29sb3I6ICAgICAgICNjY2MgIWRlZmF1bHQ7XG4kbmF2YmFyLWRlZmF1bHQtbGluay1kaXNhYmxlZC1iZzogICAgICAgICAgdHJhbnNwYXJlbnQgIWRlZmF1bHQ7XG5cbi8vIE5hdmJhciBicmFuZCBsYWJlbFxuJG5hdmJhci1kZWZhdWx0LWJyYW5kLWNvbG9yOiAgICAgICAgICAgICAgICRuYXZiYXItZGVmYXVsdC1saW5rLWNvbG9yICFkZWZhdWx0O1xuJG5hdmJhci1kZWZhdWx0LWJyYW5kLWhvdmVyLWNvbG9yOiAgICAgICAgIGRhcmtlbigkbmF2YmFyLWRlZmF1bHQtYnJhbmQtY29sb3IsIDEwJSkgIWRlZmF1bHQ7XG4kbmF2YmFyLWRlZmF1bHQtYnJhbmQtaG92ZXItYmc6ICAgICAgICAgICAgdHJhbnNwYXJlbnQgIWRlZmF1bHQ7XG5cbi8vIE5hdmJhciB0b2dnbGVcbiRuYXZiYXItZGVmYXVsdC10b2dnbGUtaG92ZXItYmc6ICAgICAgICAgICAjZGRkICFkZWZhdWx0O1xuJG5hdmJhci1kZWZhdWx0LXRvZ2dsZS1pY29uLWJhci1iZzogICAgICAgICM4ODggIWRlZmF1bHQ7XG4kbmF2YmFyLWRlZmF1bHQtdG9nZ2xlLWJvcmRlci1jb2xvcjogICAgICAgI2RkZCAhZGVmYXVsdDtcblxuXG4vLyBJbnZlcnRlZCBuYXZiYXJcbi8vIFJlc2V0IGludmVydGVkIG5hdmJhciBiYXNpY3NcbiRuYXZiYXItaW52ZXJzZS1jb2xvcjogICAgICAgICAgICAgICAgICAgICAgbGlnaHRlbigkZ3JheS1saWdodCwgMTUlKSAhZGVmYXVsdDtcbiRuYXZiYXItaW52ZXJzZS1iZzogICAgICAgICAgICAgICAgICAgICAgICAgIzIyMiAhZGVmYXVsdDtcbiRuYXZiYXItaW52ZXJzZS1ib3JkZXI6ICAgICAgICAgICAgICAgICAgICAgZGFya2VuKCRuYXZiYXItaW52ZXJzZS1iZywgMTAlKSAhZGVmYXVsdDtcblxuLy8gSW52ZXJ0ZWQgbmF2YmFyIGxpbmtzXG4kbmF2YmFyLWludmVyc2UtbGluay1jb2xvcjogICAgICAgICAgICAgICAgIGxpZ2h0ZW4oJGdyYXktbGlnaHQsIDE1JSkgIWRlZmF1bHQ7XG4kbmF2YmFyLWludmVyc2UtbGluay1ob3Zlci1jb2xvcjogICAgICAgICAgICNmZmYgIWRlZmF1bHQ7XG4kbmF2YmFyLWludmVyc2UtbGluay1ob3Zlci1iZzogICAgICAgICAgICAgIHRyYW5zcGFyZW50ICFkZWZhdWx0O1xuJG5hdmJhci1pbnZlcnNlLWxpbmstYWN0aXZlLWNvbG9yOiAgICAgICAgICAkbmF2YmFyLWludmVyc2UtbGluay1ob3Zlci1jb2xvciAhZGVmYXVsdDtcbiRuYXZiYXItaW52ZXJzZS1saW5rLWFjdGl2ZS1iZzogICAgICAgICAgICAgZGFya2VuKCRuYXZiYXItaW52ZXJzZS1iZywgMTAlKSAhZGVmYXVsdDtcbiRuYXZiYXItaW52ZXJzZS1saW5rLWRpc2FibGVkLWNvbG9yOiAgICAgICAgIzQ0NCAhZGVmYXVsdDtcbiRuYXZiYXItaW52ZXJzZS1saW5rLWRpc2FibGVkLWJnOiAgICAgICAgICAgdHJhbnNwYXJlbnQgIWRlZmF1bHQ7XG5cbi8vIEludmVydGVkIG5hdmJhciBicmFuZCBsYWJlbFxuJG5hdmJhci1pbnZlcnNlLWJyYW5kLWNvbG9yOiAgICAgICAgICAgICAgICAkbmF2YmFyLWludmVyc2UtbGluay1jb2xvciAhZGVmYXVsdDtcbiRuYXZiYXItaW52ZXJzZS1icmFuZC1ob3Zlci1jb2xvcjogICAgICAgICAgI2ZmZiAhZGVmYXVsdDtcbiRuYXZiYXItaW52ZXJzZS1icmFuZC1ob3Zlci1iZzogICAgICAgICAgICAgdHJhbnNwYXJlbnQgIWRlZmF1bHQ7XG5cbi8vIEludmVydGVkIG5hdmJhciB0b2dnbGVcbiRuYXZiYXItaW52ZXJzZS10b2dnbGUtaG92ZXItYmc6ICAgICAgICAgICAgIzMzMyAhZGVmYXVsdDtcbiRuYXZiYXItaW52ZXJzZS10b2dnbGUtaWNvbi1iYXItYmc6ICAgICAgICAgI2ZmZiAhZGVmYXVsdDtcbiRuYXZiYXItaW52ZXJzZS10b2dnbGUtYm9yZGVyLWNvbG9yOiAgICAgICAgIzMzMyAhZGVmYXVsdDtcblxuXG4vLz09IE5hdnNcbi8vXG4vLyMjXG5cbi8vPT09IFNoYXJlZCBuYXYgc3R5bGVzXG4kbmF2LWxpbmstcGFkZGluZzogICAgICAgICAgICAgICAgICAgICAgICAgIDEwcHggMTVweCAhZGVmYXVsdDtcbiRuYXYtbGluay1ob3Zlci1iZzogICAgICAgICAgICAgICAgICAgICAgICAgJGdyYXktbGlnaHRlciAhZGVmYXVsdDtcblxuJG5hdi1kaXNhYmxlZC1saW5rLWNvbG9yOiAgICAgICAgICAgICAgICAgICAkZ3JheS1saWdodCAhZGVmYXVsdDtcbiRuYXYtZGlzYWJsZWQtbGluay1ob3Zlci1jb2xvcjogICAgICAgICAgICAgJGdyYXktbGlnaHQgIWRlZmF1bHQ7XG5cbi8vPT0gVGFic1xuJG5hdi10YWJzLWJvcmRlci1jb2xvcjogICAgICAgICAgICAgICAgICAgICAjZGRkICFkZWZhdWx0O1xuXG4kbmF2LXRhYnMtbGluay1ob3Zlci1ib3JkZXItY29sb3I6ICAgICAgICAgICRncmF5LWxpZ2h0ZXIgIWRlZmF1bHQ7XG5cbiRuYXYtdGFicy1hY3RpdmUtbGluay1ob3Zlci1iZzogICAgICAgICAgICAgJGJvZHktYmcgIWRlZmF1bHQ7XG4kbmF2LXRhYnMtYWN0aXZlLWxpbmstaG92ZXItY29sb3I6ICAgICAgICAgICRncmF5ICFkZWZhdWx0O1xuJG5hdi10YWJzLWFjdGl2ZS1saW5rLWhvdmVyLWJvcmRlci1jb2xvcjogICAjZGRkICFkZWZhdWx0O1xuXG4kbmF2LXRhYnMtanVzdGlmaWVkLWxpbmstYm9yZGVyLWNvbG9yOiAgICAgICAgICAgICNkZGQgIWRlZmF1bHQ7XG4kbmF2LXRhYnMtanVzdGlmaWVkLWFjdGl2ZS1saW5rLWJvcmRlci1jb2xvcjogICAgICRib2R5LWJnICFkZWZhdWx0O1xuXG4vLz09IFBpbGxzXG4kbmF2LXBpbGxzLWJvcmRlci1yYWRpdXM6ICAgICAgICAgICAgICAgICAgICRib3JkZXItcmFkaXVzLWJhc2UgIWRlZmF1bHQ7XG4kbmF2LXBpbGxzLWFjdGl2ZS1saW5rLWhvdmVyLWJnOiAgICAgICAgICAgICRjb21wb25lbnQtYWN0aXZlLWJnICFkZWZhdWx0O1xuJG5hdi1waWxscy1hY3RpdmUtbGluay1ob3Zlci1jb2xvcjogICAgICAgICAkY29tcG9uZW50LWFjdGl2ZS1jb2xvciAhZGVmYXVsdDtcblxuXG4vLz09IFBhZ2luYXRpb25cbi8vXG4vLyMjXG5cbiRwYWdpbmF0aW9uLWNvbG9yOiAgICAgICAgICAgICAgICAgICAgICRsaW5rLWNvbG9yICFkZWZhdWx0O1xuJHBhZ2luYXRpb24tYmc6ICAgICAgICAgICAgICAgICAgICAgICAgI2ZmZiAhZGVmYXVsdDtcbiRwYWdpbmF0aW9uLWJvcmRlcjogICAgICAgICAgICAgICAgICAgICNkZGQgIWRlZmF1bHQ7XG5cbiRwYWdpbmF0aW9uLWhvdmVyLWNvbG9yOiAgICAgICAgICAgICAgICRsaW5rLWhvdmVyLWNvbG9yICFkZWZhdWx0O1xuJHBhZ2luYXRpb24taG92ZXItYmc6ICAgICAgICAgICAgICAgICAgJGdyYXktbGlnaHRlciAhZGVmYXVsdDtcbiRwYWdpbmF0aW9uLWhvdmVyLWJvcmRlcjogICAgICAgICAgICAgICNkZGQgIWRlZmF1bHQ7XG5cbiRwYWdpbmF0aW9uLWFjdGl2ZS1jb2xvcjogICAgICAgICAgICAgICNmZmYgIWRlZmF1bHQ7XG4kcGFnaW5hdGlvbi1hY3RpdmUtYmc6ICAgICAgICAgICAgICAgICAkYnJhbmQtcHJpbWFyeSAhZGVmYXVsdDtcbiRwYWdpbmF0aW9uLWFjdGl2ZS1ib3JkZXI6ICAgICAgICAgICAgICRicmFuZC1wcmltYXJ5ICFkZWZhdWx0O1xuXG4kcGFnaW5hdGlvbi1kaXNhYmxlZC1jb2xvcjogICAgICAgICAgICAkZ3JheS1saWdodCAhZGVmYXVsdDtcbiRwYWdpbmF0aW9uLWRpc2FibGVkLWJnOiAgICAgICAgICAgICAgICNmZmYgIWRlZmF1bHQ7XG4kcGFnaW5hdGlvbi1kaXNhYmxlZC1ib3JkZXI6ICAgICAgICAgICAjZGRkICFkZWZhdWx0O1xuXG5cbi8vPT0gUGFnZXJcbi8vXG4vLyMjXG5cbiRwYWdlci1iZzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICRwYWdpbmF0aW9uLWJnICFkZWZhdWx0O1xuJHBhZ2VyLWJvcmRlcjogICAgICAgICAgICAgICAgICAgICAgICAgJHBhZ2luYXRpb24tYm9yZGVyICFkZWZhdWx0O1xuJHBhZ2VyLWJvcmRlci1yYWRpdXM6ICAgICAgICAgICAgICAgICAgMTVweCAhZGVmYXVsdDtcblxuJHBhZ2VyLWhvdmVyLWJnOiAgICAgICAgICAgICAgICAgICAgICAgJHBhZ2luYXRpb24taG92ZXItYmcgIWRlZmF1bHQ7XG5cbiRwYWdlci1hY3RpdmUtYmc6ICAgICAgICAgICAgICAgICAgICAgICRwYWdpbmF0aW9uLWFjdGl2ZS1iZyAhZGVmYXVsdDtcbiRwYWdlci1hY3RpdmUtY29sb3I6ICAgICAgICAgICAgICAgICAgICRwYWdpbmF0aW9uLWFjdGl2ZS1jb2xvciAhZGVmYXVsdDtcblxuJHBhZ2VyLWRpc2FibGVkLWNvbG9yOiAgICAgICAgICAgICAgICAgJHBhZ2luYXRpb24tZGlzYWJsZWQtY29sb3IgIWRlZmF1bHQ7XG5cblxuLy89PSBKdW1ib3Ryb25cbi8vXG4vLyMjXG5cbiRqdW1ib3Ryb24tcGFkZGluZzogICAgICAgICAgICAgIDMwcHggIWRlZmF1bHQ7XG4kanVtYm90cm9uLWNvbG9yOiAgICAgICAgICAgICAgICBpbmhlcml0ICFkZWZhdWx0O1xuJGp1bWJvdHJvbi1iZzogICAgICAgICAgICAgICAgICAgJGdyYXktbGlnaHRlciAhZGVmYXVsdDtcbiRqdW1ib3Ryb24taGVhZGluZy1jb2xvcjogICAgICAgIGluaGVyaXQgIWRlZmF1bHQ7XG4kanVtYm90cm9uLWZvbnQtc2l6ZTogICAgICAgICAgICBjZWlsKCgkZm9udC1zaXplLWJhc2UgKiAxLjUpKSAhZGVmYXVsdDtcblxuXG4vLz09IEZvcm0gc3RhdGVzIGFuZCBhbGVydHNcbi8vXG4vLyMjIERlZmluZSBjb2xvcnMgZm9yIGZvcm0gZmVlZGJhY2sgc3RhdGVzIGFuZCwgYnkgZGVmYXVsdCwgYWxlcnRzLlxuXG4kc3RhdGUtc3VjY2Vzcy10ZXh0OiAgICAgICAgICAgICAjM2M3NjNkICFkZWZhdWx0O1xuJHN0YXRlLXN1Y2Nlc3MtYmc6ICAgICAgICAgICAgICAgI2RmZjBkOCAhZGVmYXVsdDtcbiRzdGF0ZS1zdWNjZXNzLWJvcmRlcjogICAgICAgICAgIGRhcmtlbihhZGp1c3QtaHVlKCRzdGF0ZS1zdWNjZXNzLWJnLCAtMTApLCA1JSkgIWRlZmF1bHQ7XG5cbiRzdGF0ZS1pbmZvLXRleHQ6ICAgICAgICAgICAgICAgICMzMTcwOGYgIWRlZmF1bHQ7XG4kc3RhdGUtaW5mby1iZzogICAgICAgICAgICAgICAgICAjZDllZGY3ICFkZWZhdWx0O1xuJHN0YXRlLWluZm8tYm9yZGVyOiAgICAgICAgICAgICAgZGFya2VuKGFkanVzdC1odWUoJHN0YXRlLWluZm8tYmcsIC0xMCksIDclKSAhZGVmYXVsdDtcblxuJHN0YXRlLXdhcm5pbmctdGV4dDogICAgICAgICAgICAgIzhhNmQzYiAhZGVmYXVsdDtcbiRzdGF0ZS13YXJuaW5nLWJnOiAgICAgICAgICAgICAgICNmY2Y4ZTMgIWRlZmF1bHQ7XG4kc3RhdGUtd2FybmluZy1ib3JkZXI6ICAgICAgICAgICBkYXJrZW4oYWRqdXN0LWh1ZSgkc3RhdGUtd2FybmluZy1iZywgLTEwKSwgNSUpICFkZWZhdWx0O1xuXG4kc3RhdGUtZGFuZ2VyLXRleHQ6ICAgICAgICAgICAgICAjYTk0NDQyICFkZWZhdWx0O1xuJHN0YXRlLWRhbmdlci1iZzogICAgICAgICAgICAgICAgI2YyZGVkZSAhZGVmYXVsdDtcbiRzdGF0ZS1kYW5nZXItYm9yZGVyOiAgICAgICAgICAgIGRhcmtlbihhZGp1c3QtaHVlKCRzdGF0ZS1kYW5nZXItYmcsIC0xMCksIDUlKSAhZGVmYXVsdDtcblxuXG4vLz09IFRvb2x0aXBzXG4vL1xuLy8jI1xuXG4vLyoqIFRvb2x0aXAgbWF4IHdpZHRoXG4kdG9vbHRpcC1tYXgtd2lkdGg6ICAgICAgICAgICAyMDBweCAhZGVmYXVsdDtcbi8vKiogVG9vbHRpcCB0ZXh0IGNvbG9yXG4kdG9vbHRpcC1jb2xvcjogICAgICAgICAgICAgICAjZmZmICFkZWZhdWx0O1xuLy8qKiBUb29sdGlwIGJhY2tncm91bmQgY29sb3JcbiR0b29sdGlwLWJnOiAgICAgICAgICAgICAgICAgICMwMDAgIWRlZmF1bHQ7XG4kdG9vbHRpcC1vcGFjaXR5OiAgICAgICAgICAgICAuOSAhZGVmYXVsdDtcblxuLy8qKiBUb29sdGlwIGFycm93IHdpZHRoXG4kdG9vbHRpcC1hcnJvdy13aWR0aDogICAgICAgICA1cHggIWRlZmF1bHQ7XG4vLyoqIFRvb2x0aXAgYXJyb3cgY29sb3JcbiR0b29sdGlwLWFycm93LWNvbG9yOiAgICAgICAgICR0b29sdGlwLWJnICFkZWZhdWx0O1xuXG5cbi8vPT0gUG9wb3ZlcnNcbi8vXG4vLyMjXG5cbi8vKiogUG9wb3ZlciBib2R5IGJhY2tncm91bmQgY29sb3JcbiRwb3BvdmVyLWJnOiAgICAgICAgICAgICAgICAgICAgICAgICAgI2ZmZiAhZGVmYXVsdDtcbi8vKiogUG9wb3ZlciBtYXhpbXVtIHdpZHRoXG4kcG9wb3Zlci1tYXgtd2lkdGg6ICAgICAgICAgICAgICAgICAgIDI3NnB4ICFkZWZhdWx0O1xuLy8qKiBQb3BvdmVyIGJvcmRlciBjb2xvclxuJHBvcG92ZXItYm9yZGVyLWNvbG9yOiAgICAgICAgICAgICAgICByZ2JhKDAsMCwwLC4yKSAhZGVmYXVsdDtcbi8vKiogUG9wb3ZlciBmYWxsYmFjayBib3JkZXIgY29sb3JcbiRwb3BvdmVyLWZhbGxiYWNrLWJvcmRlci1jb2xvcjogICAgICAgI2NjYyAhZGVmYXVsdDtcblxuLy8qKiBQb3BvdmVyIHRpdGxlIGJhY2tncm91bmQgY29sb3JcbiRwb3BvdmVyLXRpdGxlLWJnOiAgICAgICAgICAgICAgICAgICAgZGFya2VuKCRwb3BvdmVyLWJnLCAzJSkgIWRlZmF1bHQ7XG5cbi8vKiogUG9wb3ZlciBhcnJvdyB3aWR0aFxuJHBvcG92ZXItYXJyb3ctd2lkdGg6ICAgICAgICAgICAgICAgICAxMHB4ICFkZWZhdWx0O1xuLy8qKiBQb3BvdmVyIGFycm93IGNvbG9yXG4kcG9wb3Zlci1hcnJvdy1jb2xvcjogICAgICAgICAgICAgICAgICRwb3BvdmVyLWJnICFkZWZhdWx0O1xuXG4vLyoqIFBvcG92ZXIgb3V0ZXIgYXJyb3cgd2lkdGhcbiRwb3BvdmVyLWFycm93LW91dGVyLXdpZHRoOiAgICAgICAgICAgKCRwb3BvdmVyLWFycm93LXdpZHRoICsgMSkgIWRlZmF1bHQ7XG4vLyoqIFBvcG92ZXIgb3V0ZXIgYXJyb3cgY29sb3JcbiRwb3BvdmVyLWFycm93LW91dGVyLWNvbG9yOiAgICAgICAgICAgZmFkZV9pbigkcG9wb3Zlci1ib3JkZXItY29sb3IsIDAuMDUpICFkZWZhdWx0O1xuLy8qKiBQb3BvdmVyIG91dGVyIGFycm93IGZhbGxiYWNrIGNvbG9yXG4kcG9wb3Zlci1hcnJvdy1vdXRlci1mYWxsYmFjay1jb2xvcjogIGRhcmtlbigkcG9wb3Zlci1mYWxsYmFjay1ib3JkZXItY29sb3IsIDIwJSkgIWRlZmF1bHQ7XG5cblxuLy89PSBMYWJlbHNcbi8vXG4vLyMjXG5cbi8vKiogRGVmYXVsdCBsYWJlbCBiYWNrZ3JvdW5kIGNvbG9yXG4kbGFiZWwtZGVmYXVsdC1iZzogICAgICAgICAgICAkZ3JheS1saWdodCAhZGVmYXVsdDtcbi8vKiogUHJpbWFyeSBsYWJlbCBiYWNrZ3JvdW5kIGNvbG9yXG4kbGFiZWwtcHJpbWFyeS1iZzogICAgICAgICAgICAkYnJhbmQtcHJpbWFyeSAhZGVmYXVsdDtcbi8vKiogU3VjY2VzcyBsYWJlbCBiYWNrZ3JvdW5kIGNvbG9yXG4kbGFiZWwtc3VjY2Vzcy1iZzogICAgICAgICAgICAkYnJhbmQtc3VjY2VzcyAhZGVmYXVsdDtcbi8vKiogSW5mbyBsYWJlbCBiYWNrZ3JvdW5kIGNvbG9yXG4kbGFiZWwtaW5mby1iZzogICAgICAgICAgICAgICAkYnJhbmQtaW5mbyAhZGVmYXVsdDtcbi8vKiogV2FybmluZyBsYWJlbCBiYWNrZ3JvdW5kIGNvbG9yXG4kbGFiZWwtd2FybmluZy1iZzogICAgICAgICAgICAkYnJhbmQtd2FybmluZyAhZGVmYXVsdDtcbi8vKiogRGFuZ2VyIGxhYmVsIGJhY2tncm91bmQgY29sb3JcbiRsYWJlbC1kYW5nZXItYmc6ICAgICAgICAgICAgICRicmFuZC1kYW5nZXIgIWRlZmF1bHQ7XG5cbi8vKiogRGVmYXVsdCBsYWJlbCB0ZXh0IGNvbG9yXG4kbGFiZWwtY29sb3I6ICAgICAgICAgICAgICAgICAjZmZmICFkZWZhdWx0O1xuLy8qKiBEZWZhdWx0IHRleHQgY29sb3Igb2YgYSBsaW5rZWQgbGFiZWxcbiRsYWJlbC1saW5rLWhvdmVyLWNvbG9yOiAgICAgICNmZmYgIWRlZmF1bHQ7XG5cblxuLy89PSBNb2RhbHNcbi8vXG4vLyMjXG5cbi8vKiogUGFkZGluZyBhcHBsaWVkIHRvIHRoZSBtb2RhbCBib2R5XG4kbW9kYWwtaW5uZXItcGFkZGluZzogICAgICAgICAxNXB4ICFkZWZhdWx0O1xuXG4vLyoqIFBhZGRpbmcgYXBwbGllZCB0byB0aGUgbW9kYWwgdGl0bGVcbiRtb2RhbC10aXRsZS1wYWRkaW5nOiAgICAgICAgIDE1cHggIWRlZmF1bHQ7XG4vLyoqIE1vZGFsIHRpdGxlIGxpbmUtaGVpZ2h0XG4kbW9kYWwtdGl0bGUtbGluZS1oZWlnaHQ6ICAgICAkbGluZS1oZWlnaHQtYmFzZSAhZGVmYXVsdDtcblxuLy8qKiBCYWNrZ3JvdW5kIGNvbG9yIG9mIG1vZGFsIGNvbnRlbnQgYXJlYVxuJG1vZGFsLWNvbnRlbnQtYmc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjZmZmICFkZWZhdWx0O1xuLy8qKiBNb2RhbCBjb250ZW50IGJvcmRlciBjb2xvclxuJG1vZGFsLWNvbnRlbnQtYm9yZGVyLWNvbG9yOiAgICAgICAgICAgICAgICAgICByZ2JhKDAsMCwwLC4yKSAhZGVmYXVsdDtcbi8vKiogTW9kYWwgY29udGVudCBib3JkZXIgY29sb3IgKipmb3IgSUU4KipcbiRtb2RhbC1jb250ZW50LWZhbGxiYWNrLWJvcmRlci1jb2xvcjogICAgICAgICAgIzk5OSAhZGVmYXVsdDtcblxuLy8qKiBNb2RhbCBiYWNrZHJvcCBiYWNrZ3JvdW5kIGNvbG9yXG4kbW9kYWwtYmFja2Ryb3AtYmc6ICAgICAgICAgICAjMDAwICFkZWZhdWx0O1xuLy8qKiBNb2RhbCBiYWNrZHJvcCBvcGFjaXR5XG4kbW9kYWwtYmFja2Ryb3Atb3BhY2l0eTogICAgICAuNSAhZGVmYXVsdDtcbi8vKiogTW9kYWwgaGVhZGVyIGJvcmRlciBjb2xvclxuJG1vZGFsLWhlYWRlci1ib3JkZXItY29sb3I6ICAgI2U1ZTVlNSAhZGVmYXVsdDtcbi8vKiogTW9kYWwgZm9vdGVyIGJvcmRlciBjb2xvclxuJG1vZGFsLWZvb3Rlci1ib3JkZXItY29sb3I6ICAgJG1vZGFsLWhlYWRlci1ib3JkZXItY29sb3IgIWRlZmF1bHQ7XG5cbiRtb2RhbC1sZzogICAgICAgICAgICAgICAgICAgIDkwMHB4ICFkZWZhdWx0O1xuJG1vZGFsLW1kOiAgICAgICAgICAgICAgICAgICAgNjAwcHggIWRlZmF1bHQ7XG4kbW9kYWwtc206ICAgICAgICAgICAgICAgICAgICAzMDBweCAhZGVmYXVsdDtcblxuXG4vLz09IEFsZXJ0c1xuLy9cbi8vIyMgRGVmaW5lIGFsZXJ0IGNvbG9ycywgYm9yZGVyIHJhZGl1cywgYW5kIHBhZGRpbmcuXG5cbiRhbGVydC1wYWRkaW5nOiAgICAgICAgICAgICAgIDE1cHggIWRlZmF1bHQ7XG4kYWxlcnQtYm9yZGVyLXJhZGl1czogICAgICAgICAkYm9yZGVyLXJhZGl1cy1iYXNlICFkZWZhdWx0O1xuJGFsZXJ0LWxpbmstZm9udC13ZWlnaHQ6ICAgICAgYm9sZCAhZGVmYXVsdDtcblxuJGFsZXJ0LXN1Y2Nlc3MtYmc6ICAgICAgICAgICAgJHN0YXRlLXN1Y2Nlc3MtYmcgIWRlZmF1bHQ7XG4kYWxlcnQtc3VjY2Vzcy10ZXh0OiAgICAgICAgICAkc3RhdGUtc3VjY2Vzcy10ZXh0ICFkZWZhdWx0O1xuJGFsZXJ0LXN1Y2Nlc3MtYm9yZGVyOiAgICAgICAgJHN0YXRlLXN1Y2Nlc3MtYm9yZGVyICFkZWZhdWx0O1xuXG4kYWxlcnQtaW5mby1iZzogICAgICAgICAgICAgICAkc3RhdGUtaW5mby1iZyAhZGVmYXVsdDtcbiRhbGVydC1pbmZvLXRleHQ6ICAgICAgICAgICAgICRzdGF0ZS1pbmZvLXRleHQgIWRlZmF1bHQ7XG4kYWxlcnQtaW5mby1ib3JkZXI6ICAgICAgICAgICAkc3RhdGUtaW5mby1ib3JkZXIgIWRlZmF1bHQ7XG5cbiRhbGVydC13YXJuaW5nLWJnOiAgICAgICAgICAgICRzdGF0ZS13YXJuaW5nLWJnICFkZWZhdWx0O1xuJGFsZXJ0LXdhcm5pbmctdGV4dDogICAgICAgICAgJHN0YXRlLXdhcm5pbmctdGV4dCAhZGVmYXVsdDtcbiRhbGVydC13YXJuaW5nLWJvcmRlcjogICAgICAgICRzdGF0ZS13YXJuaW5nLWJvcmRlciAhZGVmYXVsdDtcblxuJGFsZXJ0LWRhbmdlci1iZzogICAgICAgICAgICAgJHN0YXRlLWRhbmdlci1iZyAhZGVmYXVsdDtcbiRhbGVydC1kYW5nZXItdGV4dDogICAgICAgICAgICRzdGF0ZS1kYW5nZXItdGV4dCAhZGVmYXVsdDtcbiRhbGVydC1kYW5nZXItYm9yZGVyOiAgICAgICAgICRzdGF0ZS1kYW5nZXItYm9yZGVyICFkZWZhdWx0O1xuXG5cbi8vPT0gUHJvZ3Jlc3MgYmFyc1xuLy9cbi8vIyNcblxuLy8qKiBCYWNrZ3JvdW5kIGNvbG9yIG9mIHRoZSB3aG9sZSBwcm9ncmVzcyBjb21wb25lbnRcbiRwcm9ncmVzcy1iZzogICAgICAgICAgICAgICAgICNmNWY1ZjUgIWRlZmF1bHQ7XG4vLyoqIFByb2dyZXNzIGJhciB0ZXh0IGNvbG9yXG4kcHJvZ3Jlc3MtYmFyLWNvbG9yOiAgICAgICAgICAjZmZmICFkZWZhdWx0O1xuLy8qKiBWYXJpYWJsZSBmb3Igc2V0dGluZyByb3VuZGVkIGNvcm5lcnMgb24gcHJvZ3Jlc3MgYmFyLlxuJHByb2dyZXNzLWJvcmRlci1yYWRpdXM6ICAgICAgJGJvcmRlci1yYWRpdXMtYmFzZSAhZGVmYXVsdDtcblxuLy8qKiBEZWZhdWx0IHByb2dyZXNzIGJhciBjb2xvclxuJHByb2dyZXNzLWJhci1iZzogICAgICAgICAgICAgJGJyYW5kLXByaW1hcnkgIWRlZmF1bHQ7XG4vLyoqIFN1Y2Nlc3MgcHJvZ3Jlc3MgYmFyIGNvbG9yXG4kcHJvZ3Jlc3MtYmFyLXN1Y2Nlc3MtYmc6ICAgICAkYnJhbmQtc3VjY2VzcyAhZGVmYXVsdDtcbi8vKiogV2FybmluZyBwcm9ncmVzcyBiYXIgY29sb3JcbiRwcm9ncmVzcy1iYXItd2FybmluZy1iZzogICAgICRicmFuZC13YXJuaW5nICFkZWZhdWx0O1xuLy8qKiBEYW5nZXIgcHJvZ3Jlc3MgYmFyIGNvbG9yXG4kcHJvZ3Jlc3MtYmFyLWRhbmdlci1iZzogICAgICAkYnJhbmQtZGFuZ2VyICFkZWZhdWx0O1xuLy8qKiBJbmZvIHByb2dyZXNzIGJhciBjb2xvclxuJHByb2dyZXNzLWJhci1pbmZvLWJnOiAgICAgICAgJGJyYW5kLWluZm8gIWRlZmF1bHQ7XG5cblxuLy89PSBMaXN0IGdyb3VwXG4vL1xuLy8jI1xuXG4vLyoqIEJhY2tncm91bmQgY29sb3Igb24gYC5saXN0LWdyb3VwLWl0ZW1gXG4kbGlzdC1ncm91cC1iZzogICAgICAgICAgICAgICAgICNmZmYgIWRlZmF1bHQ7XG4vLyoqIGAubGlzdC1ncm91cC1pdGVtYCBib3JkZXIgY29sb3JcbiRsaXN0LWdyb3VwLWJvcmRlcjogICAgICAgICAgICAgI2RkZCAhZGVmYXVsdDtcbi8vKiogTGlzdCBncm91cCBib3JkZXIgcmFkaXVzXG4kbGlzdC1ncm91cC1ib3JkZXItcmFkaXVzOiAgICAgICRib3JkZXItcmFkaXVzLWJhc2UgIWRlZmF1bHQ7XG5cbi8vKiogQmFja2dyb3VuZCBjb2xvciBvZiBzaW5nbGUgbGlzdCBpdGVtcyBvbiBob3ZlclxuJGxpc3QtZ3JvdXAtaG92ZXItYmc6ICAgICAgICAgICAjZjVmNWY1ICFkZWZhdWx0O1xuLy8qKiBUZXh0IGNvbG9yIG9mIGFjdGl2ZSBsaXN0IGl0ZW1zXG4kbGlzdC1ncm91cC1hY3RpdmUtY29sb3I6ICAgICAgICRjb21wb25lbnQtYWN0aXZlLWNvbG9yICFkZWZhdWx0O1xuLy8qKiBCYWNrZ3JvdW5kIGNvbG9yIG9mIGFjdGl2ZSBsaXN0IGl0ZW1zXG4kbGlzdC1ncm91cC1hY3RpdmUtYmc6ICAgICAgICAgICRjb21wb25lbnQtYWN0aXZlLWJnICFkZWZhdWx0O1xuLy8qKiBCb3JkZXIgY29sb3Igb2YgYWN0aXZlIGxpc3QgZWxlbWVudHNcbiRsaXN0LWdyb3VwLWFjdGl2ZS1ib3JkZXI6ICAgICAgJGxpc3QtZ3JvdXAtYWN0aXZlLWJnICFkZWZhdWx0O1xuLy8qKiBUZXh0IGNvbG9yIGZvciBjb250ZW50IHdpdGhpbiBhY3RpdmUgbGlzdCBpdGVtc1xuJGxpc3QtZ3JvdXAtYWN0aXZlLXRleHQtY29sb3I6ICBsaWdodGVuKCRsaXN0LWdyb3VwLWFjdGl2ZS1iZywgNDAlKSAhZGVmYXVsdDtcblxuLy8qKiBUZXh0IGNvbG9yIG9mIGRpc2FibGVkIGxpc3QgaXRlbXNcbiRsaXN0LWdyb3VwLWRpc2FibGVkLWNvbG9yOiAgICAgICRncmF5LWxpZ2h0ICFkZWZhdWx0O1xuLy8qKiBCYWNrZ3JvdW5kIGNvbG9yIG9mIGRpc2FibGVkIGxpc3QgaXRlbXNcbiRsaXN0LWdyb3VwLWRpc2FibGVkLWJnOiAgICAgICAgICRncmF5LWxpZ2h0ZXIgIWRlZmF1bHQ7XG4vLyoqIFRleHQgY29sb3IgZm9yIGNvbnRlbnQgd2l0aGluIGRpc2FibGVkIGxpc3QgaXRlbXNcbiRsaXN0LWdyb3VwLWRpc2FibGVkLXRleHQtY29sb3I6ICRsaXN0LWdyb3VwLWRpc2FibGVkLWNvbG9yICFkZWZhdWx0O1xuXG4kbGlzdC1ncm91cC1saW5rLWNvbG9yOiAgICAgICAgICM1NTUgIWRlZmF1bHQ7XG4kbGlzdC1ncm91cC1saW5rLWhvdmVyLWNvbG9yOiAgICRsaXN0LWdyb3VwLWxpbmstY29sb3IgIWRlZmF1bHQ7XG4kbGlzdC1ncm91cC1saW5rLWhlYWRpbmctY29sb3I6ICMzMzMgIWRlZmF1bHQ7XG5cblxuLy89PSBQYW5lbHNcbi8vXG4vLyMjXG5cbiRwYW5lbC1iZzogICAgICAgICAgICAgICAgICAgICNmZmYgIWRlZmF1bHQ7XG4kcGFuZWwtYm9keS1wYWRkaW5nOiAgICAgICAgICAxNXB4ICFkZWZhdWx0O1xuJHBhbmVsLWhlYWRpbmctcGFkZGluZzogICAgICAgMTBweCAxNXB4ICFkZWZhdWx0O1xuJHBhbmVsLWZvb3Rlci1wYWRkaW5nOiAgICAgICAgJHBhbmVsLWhlYWRpbmctcGFkZGluZyAhZGVmYXVsdDtcbiRwYW5lbC1ib3JkZXItcmFkaXVzOiAgICAgICAgICRib3JkZXItcmFkaXVzLWJhc2UgIWRlZmF1bHQ7XG5cbi8vKiogQm9yZGVyIGNvbG9yIGZvciBlbGVtZW50cyB3aXRoaW4gcGFuZWxzXG4kcGFuZWwtaW5uZXItYm9yZGVyOiAgICAgICAgICAjZGRkICFkZWZhdWx0O1xuJHBhbmVsLWZvb3Rlci1iZzogICAgICAgICAgICAgI2Y1ZjVmNSAhZGVmYXVsdDtcblxuJHBhbmVsLWRlZmF1bHQtdGV4dDogICAgICAgICAgJGdyYXktZGFyayAhZGVmYXVsdDtcbiRwYW5lbC1kZWZhdWx0LWJvcmRlcjogICAgICAgICNkZGQgIWRlZmF1bHQ7XG4kcGFuZWwtZGVmYXVsdC1oZWFkaW5nLWJnOiAgICAjZjVmNWY1ICFkZWZhdWx0O1xuXG4kcGFuZWwtcHJpbWFyeS10ZXh0OiAgICAgICAgICAjZmZmICFkZWZhdWx0O1xuJHBhbmVsLXByaW1hcnktYm9yZGVyOiAgICAgICAgJGJyYW5kLXByaW1hcnkgIWRlZmF1bHQ7XG4kcGFuZWwtcHJpbWFyeS1oZWFkaW5nLWJnOiAgICAkYnJhbmQtcHJpbWFyeSAhZGVmYXVsdDtcblxuJHBhbmVsLXN1Y2Nlc3MtdGV4dDogICAgICAgICAgJHN0YXRlLXN1Y2Nlc3MtdGV4dCAhZGVmYXVsdDtcbiRwYW5lbC1zdWNjZXNzLWJvcmRlcjogICAgICAgICRzdGF0ZS1zdWNjZXNzLWJvcmRlciAhZGVmYXVsdDtcbiRwYW5lbC1zdWNjZXNzLWhlYWRpbmctYmc6ICAgICRzdGF0ZS1zdWNjZXNzLWJnICFkZWZhdWx0O1xuXG4kcGFuZWwtaW5mby10ZXh0OiAgICAgICAgICAgICAkc3RhdGUtaW5mby10ZXh0ICFkZWZhdWx0O1xuJHBhbmVsLWluZm8tYm9yZGVyOiAgICAgICAgICAgJHN0YXRlLWluZm8tYm9yZGVyICFkZWZhdWx0O1xuJHBhbmVsLWluZm8taGVhZGluZy1iZzogICAgICAgJHN0YXRlLWluZm8tYmcgIWRlZmF1bHQ7XG5cbiRwYW5lbC13YXJuaW5nLXRleHQ6ICAgICAgICAgICRzdGF0ZS13YXJuaW5nLXRleHQgIWRlZmF1bHQ7XG4kcGFuZWwtd2FybmluZy1ib3JkZXI6ICAgICAgICAkc3RhdGUtd2FybmluZy1ib3JkZXIgIWRlZmF1bHQ7XG4kcGFuZWwtd2FybmluZy1oZWFkaW5nLWJnOiAgICAkc3RhdGUtd2FybmluZy1iZyAhZGVmYXVsdDtcblxuJHBhbmVsLWRhbmdlci10ZXh0OiAgICAgICAgICAgJHN0YXRlLWRhbmdlci10ZXh0ICFkZWZhdWx0O1xuJHBhbmVsLWRhbmdlci1ib3JkZXI6ICAgICAgICAgJHN0YXRlLWRhbmdlci1ib3JkZXIgIWRlZmF1bHQ7XG4kcGFuZWwtZGFuZ2VyLWhlYWRpbmctYmc6ICAgICAkc3RhdGUtZGFuZ2VyLWJnICFkZWZhdWx0O1xuXG5cbi8vPT0gVGh1bWJuYWlsc1xuLy9cbi8vIyNcblxuLy8qKiBQYWRkaW5nIGFyb3VuZCB0aGUgdGh1bWJuYWlsIGltYWdlXG4kdGh1bWJuYWlsLXBhZGRpbmc6ICAgICAgICAgICA0cHggIWRlZmF1bHQ7XG4vLyoqIFRodW1ibmFpbCBiYWNrZ3JvdW5kIGNvbG9yXG4kdGh1bWJuYWlsLWJnOiAgICAgICAgICAgICAgICAkYm9keS1iZyAhZGVmYXVsdDtcbi8vKiogVGh1bWJuYWlsIGJvcmRlciBjb2xvclxuJHRodW1ibmFpbC1ib3JkZXI6ICAgICAgICAgICAgI2RkZCAhZGVmYXVsdDtcbi8vKiogVGh1bWJuYWlsIGJvcmRlciByYWRpdXNcbiR0aHVtYm5haWwtYm9yZGVyLXJhZGl1czogICAgICRib3JkZXItcmFkaXVzLWJhc2UgIWRlZmF1bHQ7XG5cbi8vKiogQ3VzdG9tIHRleHQgY29sb3IgZm9yIHRodW1ibmFpbCBjYXB0aW9uc1xuJHRodW1ibmFpbC1jYXB0aW9uLWNvbG9yOiAgICAgJHRleHQtY29sb3IgIWRlZmF1bHQ7XG4vLyoqIFBhZGRpbmcgYXJvdW5kIHRoZSB0aHVtYm5haWwgY2FwdGlvblxuJHRodW1ibmFpbC1jYXB0aW9uLXBhZGRpbmc6ICAgOXB4ICFkZWZhdWx0O1xuXG5cbi8vPT0gV2VsbHNcbi8vXG4vLyMjXG5cbiR3ZWxsLWJnOiAgICAgICAgICAgICAgICAgICAgICNmNWY1ZjUgIWRlZmF1bHQ7XG4kd2VsbC1ib3JkZXI6ICAgICAgICAgICAgICAgICBkYXJrZW4oJHdlbGwtYmcsIDclKSAhZGVmYXVsdDtcblxuXG4vLz09IEJhZGdlc1xuLy9cbi8vIyNcblxuJGJhZGdlLWNvbG9yOiAgICAgICAgICAgICAgICAgI2ZmZiAhZGVmYXVsdDtcbi8vKiogTGlua2VkIGJhZGdlIHRleHQgY29sb3Igb24gaG92ZXJcbiRiYWRnZS1saW5rLWhvdmVyLWNvbG9yOiAgICAgICNmZmYgIWRlZmF1bHQ7XG4kYmFkZ2UtYmc6ICAgICAgICAgICAgICAgICAgICAkZ3JheS1saWdodCAhZGVmYXVsdDtcblxuLy8qKiBCYWRnZSB0ZXh0IGNvbG9yIGluIGFjdGl2ZSBuYXYgbGlua1xuJGJhZGdlLWFjdGl2ZS1jb2xvcjogICAgICAgICAgJGxpbmstY29sb3IgIWRlZmF1bHQ7XG4vLyoqIEJhZGdlIGJhY2tncm91bmQgY29sb3IgaW4gYWN0aXZlIG5hdiBsaW5rXG4kYmFkZ2UtYWN0aXZlLWJnOiAgICAgICAgICAgICAjZmZmICFkZWZhdWx0O1xuXG4kYmFkZ2UtZm9udC13ZWlnaHQ6ICAgICAgICAgICBib2xkICFkZWZhdWx0O1xuJGJhZGdlLWxpbmUtaGVpZ2h0OiAgICAgICAgICAgMSAhZGVmYXVsdDtcbiRiYWRnZS1ib3JkZXItcmFkaXVzOiAgICAgICAgIDEwcHggIWRlZmF1bHQ7XG5cblxuLy89PSBCcmVhZGNydW1ic1xuLy9cbi8vIyNcblxuJGJyZWFkY3J1bWItcGFkZGluZy12ZXJ0aWNhbDogICA4cHggIWRlZmF1bHQ7XG4kYnJlYWRjcnVtYi1wYWRkaW5nLWhvcml6b250YWw6IDE1cHggIWRlZmF1bHQ7XG4vLyoqIEJyZWFkY3J1bWIgYmFja2dyb3VuZCBjb2xvclxuJGJyZWFkY3J1bWItYmc6ICAgICAgICAgICAgICAgICAjZjVmNWY1ICFkZWZhdWx0O1xuLy8qKiBCcmVhZGNydW1iIHRleHQgY29sb3JcbiRicmVhZGNydW1iLWNvbG9yOiAgICAgICAgICAgICAgI2NjYyAhZGVmYXVsdDtcbi8vKiogVGV4dCBjb2xvciBvZiBjdXJyZW50IHBhZ2UgaW4gdGhlIGJyZWFkY3J1bWJcbiRicmVhZGNydW1iLWFjdGl2ZS1jb2xvcjogICAgICAgJGdyYXktbGlnaHQgIWRlZmF1bHQ7XG4vLyoqIFRleHR1YWwgc2VwYXJhdG9yIGZvciBiZXR3ZWVuIGJyZWFkY3J1bWIgZWxlbWVudHNcbiRicmVhZGNydW1iLXNlcGFyYXRvcjogICAgICAgICAgXCIvXCIgIWRlZmF1bHQ7XG5cblxuLy89PSBDYXJvdXNlbFxuLy9cbi8vIyNcblxuJGNhcm91c2VsLXRleHQtc2hhZG93OiAgICAgICAgICAgICAgICAgICAgICAgIDAgMXB4IDJweCByZ2JhKDAsMCwwLC42KSAhZGVmYXVsdDtcblxuJGNhcm91c2VsLWNvbnRyb2wtY29sb3I6ICAgICAgICAgICAgICAgICAgICAgICNmZmYgIWRlZmF1bHQ7XG4kY2Fyb3VzZWwtY29udHJvbC13aWR0aDogICAgICAgICAgICAgICAgICAgICAgMTUlICFkZWZhdWx0O1xuJGNhcm91c2VsLWNvbnRyb2wtb3BhY2l0eTogICAgICAgICAgICAgICAgICAgIC41ICFkZWZhdWx0O1xuJGNhcm91c2VsLWNvbnRyb2wtZm9udC1zaXplOiAgICAgICAgICAgICAgICAgIDIwcHggIWRlZmF1bHQ7XG5cbiRjYXJvdXNlbC1pbmRpY2F0b3ItYWN0aXZlLWJnOiAgICAgICAgICAgICAgICAjZmZmICFkZWZhdWx0O1xuJGNhcm91c2VsLWluZGljYXRvci1ib3JkZXItY29sb3I6ICAgICAgICAgICAgICNmZmYgIWRlZmF1bHQ7XG5cbiRjYXJvdXNlbC1jYXB0aW9uLWNvbG9yOiAgICAgICAgICAgICAgICAgICAgICAjZmZmICFkZWZhdWx0O1xuXG5cbi8vPT0gQ2xvc2Vcbi8vXG4vLyMjXG5cbiRjbG9zZS1mb250LXdlaWdodDogICAgICAgICAgIGJvbGQgIWRlZmF1bHQ7XG4kY2xvc2UtY29sb3I6ICAgICAgICAgICAgICAgICAjMDAwICFkZWZhdWx0O1xuJGNsb3NlLXRleHQtc2hhZG93OiAgICAgICAgICAgMCAxcHggMCAjZmZmICFkZWZhdWx0O1xuXG5cbi8vPT0gQ29kZVxuLy9cbi8vIyNcblxuJGNvZGUtY29sb3I6ICAgICAgICAgICAgICAgICAgIzREOENGNCAhZGVmYXVsdDtcbiRjb2RlLWJnOiAgICAgICAgICAgICAgICAgICAgIHdoaXRlc21va2UgIWRlZmF1bHQ7XG5cbiRrYmQtY29sb3I6ICAgICAgICAgICAgICAgICAgICNmZmYgIWRlZmF1bHQ7XG4ka2JkLWJnOiAgICAgICAgICAgICAgICAgICAgICAjMzMzICFkZWZhdWx0O1xuXG4kcHJlLWJnOiAgICAgICAgICAgICAgICAgICAgICAjZjVmNWY1ICFkZWZhdWx0O1xuJHByZS1jb2xvcjogICAgICAgICAgICAgICAgICAgJGdyYXktZGFyayAhZGVmYXVsdDtcbiRwcmUtYm9yZGVyLWNvbG9yOiAgICAgICAgICAgICNjY2MgIWRlZmF1bHQ7XG4kcHJlLXNjcm9sbGFibGUtbWF4LWhlaWdodDogICAzNDBweCAhZGVmYXVsdDtcblxuXG4vLz09IFR5cGVcbi8vXG4vLyMjXG5cbi8vKiogSG9yaXpvbnRhbCBvZmZzZXQgZm9yIGZvcm1zIGFuZCBsaXN0cy5cbiRjb21wb25lbnQtb2Zmc2V0LWhvcml6b250YWw6IDE4MHB4ICFkZWZhdWx0O1xuLy8qKiBUZXh0IG11dGVkIGNvbG9yXG4kdGV4dC1tdXRlZDogICAgICAgICAgICAgICAgICAkZ3JheS1saWdodCAhZGVmYXVsdDtcbi8vKiogQWJicmV2aWF0aW9ucyBhbmQgYWNyb255bXMgYm9yZGVyIGNvbG9yXG4kYWJici1ib3JkZXItY29sb3I6ICAgICAgICAgICAkZ3JheS1saWdodCAhZGVmYXVsdDtcbi8vKiogSGVhZGluZ3Mgc21hbGwgY29sb3JcbiRoZWFkaW5ncy1zbWFsbC1jb2xvcjogICAgICAgICRncmF5LWxpZ2h0ICFkZWZhdWx0O1xuLy8qKiBCbG9ja3F1b3RlIHNtYWxsIGNvbG9yXG4kYmxvY2txdW90ZS1zbWFsbC1jb2xvcjogICAgICAkZ3JheS1saWdodCAhZGVmYXVsdDtcbi8vKiogQmxvY2txdW90ZSBmb250IHNpemVcbiRibG9ja3F1b3RlLWZvbnQtc2l6ZTogICAgICAgICgkZm9udC1zaXplLWJhc2UgKiAxLjI1KSAhZGVmYXVsdDtcbi8vKiogQmxvY2txdW90ZSBib3JkZXIgY29sb3JcbiRibG9ja3F1b3RlLWJvcmRlci1jb2xvcjogICAgICRncmF5LWxpZ2h0ZXIgIWRlZmF1bHQ7XG4vLyoqIFBhZ2UgaGVhZGVyIGJvcmRlciBjb2xvclxuJHBhZ2UtaGVhZGVyLWJvcmRlci1jb2xvcjogICAgJGdyYXktbGlnaHRlciAhZGVmYXVsdDtcbi8vKiogV2lkdGggb2YgaG9yaXpvbnRhbCBkZXNjcmlwdGlvbiBsaXN0IHRpdGxlc1xuJGRsLWhvcml6b250YWwtb2Zmc2V0OiAgICAgICAgJGNvbXBvbmVudC1vZmZzZXQtaG9yaXpvbnRhbCAhZGVmYXVsdDtcbi8vKiogSG9yaXpvbnRhbCBsaW5lIGNvbG9yLlxuJGhyLWJvcmRlcjogICAgICAgICAgICAgICAgICAgJGdyYXktbGlnaHRlciAhZGVmYXVsdDtcbiIsIi8vIFdlYktpdC1zdHlsZSBmb2N1c1xuXG5AbWl4aW4gdGFiLWZvY3VzKCkge1xuICAvLyBEZWZhdWx0XG4gIG91dGxpbmU6IHRoaW4gZG90dGVkO1xuICAvLyBXZWJLaXRcbiAgb3V0bGluZTogNXB4IGF1dG8gLXdlYmtpdC1mb2N1cy1yaW5nLWNvbG9yO1xuICBvdXRsaW5lLW9mZnNldDogLTJweDtcbn1cbiIsIi8vIEltYWdlIE1peGluc1xuLy8gLSBSZXNwb25zaXZlIGltYWdlXG4vLyAtIFJldGluYSBpbWFnZVxuXG5cbi8vIFJlc3BvbnNpdmUgaW1hZ2Vcbi8vXG4vLyBLZWVwIGltYWdlcyBmcm9tIHNjYWxpbmcgYmV5b25kIHRoZSB3aWR0aCBvZiB0aGVpciBwYXJlbnRzLlxuQG1peGluIGltZy1yZXNwb25zaXZlKCRkaXNwbGF5OiBibG9jaykge1xuICBkaXNwbGF5OiAkZGlzcGxheTtcbiAgbWF4LXdpZHRoOiAxMDAlOyAvLyBQYXJ0IDE6IFNldCBhIG1heGltdW0gcmVsYXRpdmUgdG8gdGhlIHBhcmVudFxuICBoZWlnaHQ6IGF1dG87IC8vIFBhcnQgMjogU2NhbGUgdGhlIGhlaWdodCBhY2NvcmRpbmcgdG8gdGhlIHdpZHRoLCBvdGhlcndpc2UgeW91IGdldCBzdHJldGNoaW5nXG59XG5cblxuLy8gUmV0aW5hIGltYWdlXG4vL1xuLy8gU2hvcnQgcmV0aW5hIG1peGluIGZvciBzZXR0aW5nIGJhY2tncm91bmQtaW1hZ2UgYW5kIC1zaXplLiBOb3RlIHRoYXQgdGhlXG4vLyBzcGVsbGluZyBvZiBgbWluLS1tb3otZGV2aWNlLXBpeGVsLXJhdGlvYCBpcyBpbnRlbnRpb25hbC5cbkBtaXhpbiBpbWctcmV0aW5hKCRmaWxlLTF4LCAkZmlsZS0yeCwgJHdpZHRoLTF4LCAkaGVpZ2h0LTF4KSB7XG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChpZigkYm9vdHN0cmFwLXNhc3MtYXNzZXQtaGVscGVyLCB0d2JzLWltYWdlLXBhdGgoXCIjeyRmaWxlLTF4fVwiKSwgXCIjeyRmaWxlLTF4fVwiKSk7XG5cbiAgQG1lZGlhXG4gIG9ubHkgc2NyZWVuIGFuZCAoLXdlYmtpdC1taW4tZGV2aWNlLXBpeGVsLXJhdGlvOiAyKSxcbiAgb25seSBzY3JlZW4gYW5kICggICBtaW4tLW1vei1kZXZpY2UtcGl4ZWwtcmF0aW86IDIpLFxuICBvbmx5IHNjcmVlbiBhbmQgKCAgICAgLW8tbWluLWRldmljZS1waXhlbC1yYXRpbzogMi8xKSxcbiAgb25seSBzY3JlZW4gYW5kICggICAgICAgIG1pbi1kZXZpY2UtcGl4ZWwtcmF0aW86IDIpLFxuICBvbmx5IHNjcmVlbiBhbmQgKCAgICAgICAgICAgICAgICBtaW4tcmVzb2x1dGlvbjogMTkyZHBpKSxcbiAgb25seSBzY3JlZW4gYW5kICggICAgICAgICAgICAgICAgbWluLXJlc29sdXRpb246IDJkcHB4KSB7XG4gICAgYmFja2dyb3VuZC1pbWFnZTogdXJsKGlmKCRib290c3RyYXAtc2Fzcy1hc3NldC1oZWxwZXIsIHR3YnMtaW1hZ2UtcGF0aChcIiN7JGZpbGUtMnh9XCIpLCBcIiN7JGZpbGUtMnh9XCIpKTtcbiAgICBiYWNrZ3JvdW5kLXNpemU6ICR3aWR0aC0xeCAkaGVpZ2h0LTF4O1xuICB9XG59XG4iLCIvL1xuLy8gVHlwb2dyYXBoeVxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuXG4vLyBIZWFkaW5nc1xuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5oMSwgaDIsIGgzLCBoNCwgaDUsIGg2LFxuLmgxLCAuaDIsIC5oMywgLmg0LCAuaDUsIC5oNiB7XG4gIGZvbnQtZmFtaWx5OiAkaGVhZGluZ3MtZm9udC1mYW1pbHk7XG4gIGZvbnQtd2VpZ2h0OiAkaGVhZGluZ3MtZm9udC13ZWlnaHQ7XG4gIGxpbmUtaGVpZ2h0OiAkaGVhZGluZ3MtbGluZS1oZWlnaHQ7XG4gIGNvbG9yOiAkaGVhZGluZ3MtY29sb3I7XG5cbiAgc21hbGwsXG4gIC5zbWFsbCB7XG4gICAgZm9udC13ZWlnaHQ6IG5vcm1hbDtcbiAgICBsaW5lLWhlaWdodDogMTtcbiAgICBjb2xvcjogJGhlYWRpbmdzLXNtYWxsLWNvbG9yO1xuICB9XG59XG5cbmgxLCAuaDEsXG5oMiwgLmgyLFxuaDMsIC5oMyB7XG4gIG1hcmdpbi10b3A6ICRsaW5lLWhlaWdodC1jb21wdXRlZDtcbiAgbWFyZ2luLWJvdHRvbTogKCRsaW5lLWhlaWdodC1jb21wdXRlZCAvIDIpO1xuXG4gIHNtYWxsLFxuICAuc21hbGwge1xuICAgIGZvbnQtc2l6ZTogNjUlO1xuICB9XG59XG5oNCwgLmg0LFxuaDUsIC5oNSxcbmg2LCAuaDYge1xuICBtYXJnaW4tdG9wOiAoJGxpbmUtaGVpZ2h0LWNvbXB1dGVkIC8gMik7XG4gIG1hcmdpbi1ib3R0b206ICgkbGluZS1oZWlnaHQtY29tcHV0ZWQgLyAyKTtcblxuICBzbWFsbCxcbiAgLnNtYWxsIHtcbiAgICBmb250LXNpemU6IDc1JTtcbiAgfVxufVxuXG5oMSwgLmgxIHsgZm9udC1zaXplOiAkZm9udC1zaXplLWgxOyB9XG5oMiwgLmgyIHsgZm9udC1zaXplOiAkZm9udC1zaXplLWgyOyB9XG5oMywgLmgzIHsgZm9udC1zaXplOiAkZm9udC1zaXplLWgzOyB9XG5oNCwgLmg0IHsgZm9udC1zaXplOiAkZm9udC1zaXplLWg0OyB9XG5oNSwgLmg1IHsgZm9udC1zaXplOiAkZm9udC1zaXplLWg1OyB9XG5oNiwgLmg2IHsgZm9udC1zaXplOiAkZm9udC1zaXplLWg2OyB9XG5cblxuLy8gQm9keSB0ZXh0XG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbnAge1xuICBtYXJnaW46IDAgMCAoJGxpbmUtaGVpZ2h0LWNvbXB1dGVkIC8gMik7XG59XG5cbi5sZWFkIHtcbiAgbWFyZ2luLWJvdHRvbTogJGxpbmUtaGVpZ2h0LWNvbXB1dGVkO1xuICBmb250LXNpemU6IGZsb29yKCgkZm9udC1zaXplLWJhc2UgKiAxLjE1KSk7XG4gIGZvbnQtd2VpZ2h0OiAzMDA7XG4gIGxpbmUtaGVpZ2h0OiAxLjQ7XG5cbiAgQG1lZGlhIChtaW4td2lkdGg6ICRzY3JlZW4tc20tbWluKSB7XG4gICAgZm9udC1zaXplOiAoJGZvbnQtc2l6ZS1iYXNlICogMS41KTtcbiAgfVxufVxuXG5cbi8vIEVtcGhhc2lzICYgbWlzY1xuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4vLyBFeDogKDEycHggc21hbGwgZm9udCAvIDE0cHggYmFzZSBmb250KSAqIDEwMCUgPSBhYm91dCA4NSVcbnNtYWxsLFxuLnNtYWxsIHtcbiAgZm9udC1zaXplOiBmbG9vcigoMTAwJSAqICRmb250LXNpemUtc21hbGwgLyAkZm9udC1zaXplLWJhc2UpKTtcbn1cblxubWFyayxcbi5tYXJrIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogJHN0YXRlLXdhcm5pbmctYmc7XG4gIHBhZGRpbmc6IC4yZW07XG59XG5cbi8vIEFsaWdubWVudFxuLnRleHQtbGVmdCAgICAgICAgICAgeyB0ZXh0LWFsaWduOiBsZWZ0OyB9XG4udGV4dC1yaWdodCAgICAgICAgICB7IHRleHQtYWxpZ246IHJpZ2h0OyB9XG4udGV4dC1jZW50ZXIgICAgICAgICB7IHRleHQtYWxpZ246IGNlbnRlcjsgfVxuLnRleHQtanVzdGlmeSAgICAgICAgeyB0ZXh0LWFsaWduOiBqdXN0aWZ5OyB9XG4udGV4dC1ub3dyYXAgICAgICAgICB7IHdoaXRlLXNwYWNlOiBub3dyYXA7IH1cblxuLy8gVHJhbnNmb3JtYXRpb25cbi50ZXh0LWxvd2VyY2FzZSAgICAgIHsgdGV4dC10cmFuc2Zvcm06IGxvd2VyY2FzZTsgfVxuLnRleHQtdXBwZXJjYXNlICAgICAgeyB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlOyB9XG4udGV4dC1jYXBpdGFsaXplICAgICB7IHRleHQtdHJhbnNmb3JtOiBjYXBpdGFsaXplOyB9XG5cbi8vIENvbnRleHR1YWwgY29sb3JzXG4udGV4dC1tdXRlZCB7XG4gIGNvbG9yOiAkdGV4dC1tdXRlZDtcbn1cblxuQGluY2x1ZGUgdGV4dC1lbXBoYXNpcy12YXJpYW50KCcudGV4dC1wcmltYXJ5JywgJGJyYW5kLXByaW1hcnkpO1xuXG5AaW5jbHVkZSB0ZXh0LWVtcGhhc2lzLXZhcmlhbnQoJy50ZXh0LXN1Y2Nlc3MnLCAkc3RhdGUtc3VjY2Vzcy10ZXh0KTtcblxuQGluY2x1ZGUgdGV4dC1lbXBoYXNpcy12YXJpYW50KCcudGV4dC1pbmZvJywgJHN0YXRlLWluZm8tdGV4dCk7XG5cbkBpbmNsdWRlIHRleHQtZW1waGFzaXMtdmFyaWFudCgnLnRleHQtd2FybmluZycsICRzdGF0ZS13YXJuaW5nLXRleHQpO1xuXG5AaW5jbHVkZSB0ZXh0LWVtcGhhc2lzLXZhcmlhbnQoJy50ZXh0LWRhbmdlcicsICRzdGF0ZS1kYW5nZXItdGV4dCk7XG5cbi8vIENvbnRleHR1YWwgYmFja2dyb3VuZHNcbi8vIEZvciBub3cgd2UnbGwgbGVhdmUgdGhlc2UgYWxvbmdzaWRlIHRoZSB0ZXh0IGNsYXNzZXMgdW50aWwgdjQgd2hlbiB3ZSBjYW5cbi8vIHNhZmVseSBzaGlmdCB0aGluZ3MgYXJvdW5kIChwZXIgU2VtVmVyIHJ1bGVzKS5cbi5iZy1wcmltYXJ5IHtcbiAgLy8gR2l2ZW4gdGhlIGNvbnRyYXN0IGhlcmUsIHRoaXMgaXMgdGhlIG9ubHkgY2xhc3MgdG8gaGF2ZSBpdHMgY29sb3IgaW52ZXJ0ZWRcbiAgLy8gYXV0b21hdGljYWxseS5cbiAgY29sb3I6ICNmZmY7XG59XG5AaW5jbHVkZSBiZy12YXJpYW50KCcuYmctcHJpbWFyeScsICRicmFuZC1wcmltYXJ5KTtcblxuQGluY2x1ZGUgYmctdmFyaWFudCgnLmJnLXN1Y2Nlc3MnLCAkc3RhdGUtc3VjY2Vzcy1iZyk7XG5cbkBpbmNsdWRlIGJnLXZhcmlhbnQoJy5iZy1pbmZvJywgJHN0YXRlLWluZm8tYmcpO1xuXG5AaW5jbHVkZSBiZy12YXJpYW50KCcuYmctd2FybmluZycsICRzdGF0ZS13YXJuaW5nLWJnKTtcblxuQGluY2x1ZGUgYmctdmFyaWFudCgnLmJnLWRhbmdlcicsICRzdGF0ZS1kYW5nZXItYmcpO1xuXG5cbi8vIFBhZ2UgaGVhZGVyXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi5wYWdlLWhlYWRlciB7XG4gIHBhZGRpbmctYm90dG9tOiAoKCRsaW5lLWhlaWdodC1jb21wdXRlZCAvIDIpIC0gMSk7XG4gIG1hcmdpbjogKCRsaW5lLWhlaWdodC1jb21wdXRlZCAqIDIpIDAgJGxpbmUtaGVpZ2h0LWNvbXB1dGVkO1xuICBib3JkZXItYm90dG9tOiAxcHggc29saWQgJHBhZ2UtaGVhZGVyLWJvcmRlci1jb2xvcjtcbn1cblxuXG4vLyBMaXN0c1xuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4vLyBVbm9yZGVyZWQgYW5kIE9yZGVyZWQgbGlzdHNcbnVsLFxub2wge1xuICBtYXJnaW4tdG9wOiAwO1xuICBtYXJnaW4tYm90dG9tOiAoJGxpbmUtaGVpZ2h0LWNvbXB1dGVkIC8gMik7XG4gIHVsLFxuICBvbCB7XG4gICAgbWFyZ2luLWJvdHRvbTogMDtcbiAgfVxufVxuXG4vLyBMaXN0IG9wdGlvbnNcblxuLy8gW2NvbnZlcnRlcl0gZXh0cmFjdGVkIGZyb20gYC5saXN0LXVuc3R5bGVkYCBmb3IgbGlic2FzcyBjb21wYXRpYmlsaXR5XG5AbWl4aW4gbGlzdC11bnN0eWxlZCB7XG4gIHBhZGRpbmctbGVmdDogMDtcbiAgbGlzdC1zdHlsZTogbm9uZTtcbn1cbi8vIFtjb252ZXJ0ZXJdIGV4dHJhY3RlZCBhcyBgQG1peGluIGxpc3QtdW5zdHlsZWRgIGZvciBsaWJzYXNzIGNvbXBhdGliaWxpdHlcbi5saXN0LXVuc3R5bGVkIHtcbiAgQGluY2x1ZGUgbGlzdC11bnN0eWxlZDtcbn1cblxuXG4vLyBJbmxpbmUgdHVybnMgbGlzdCBpdGVtcyBpbnRvIGlubGluZS1ibG9ja1xuLmxpc3QtaW5saW5lIHtcbiAgQGluY2x1ZGUgbGlzdC11bnN0eWxlZDtcbiAgbWFyZ2luLWxlZnQ6IC01cHg7XG5cbiAgPiBsaSB7XG4gICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgIHBhZGRpbmctbGVmdDogNXB4O1xuICAgIHBhZGRpbmctcmlnaHQ6IDVweDtcbiAgfVxufVxuXG4vLyBEZXNjcmlwdGlvbiBMaXN0c1xuZGwge1xuICBtYXJnaW4tdG9wOiAwOyAvLyBSZW1vdmUgYnJvd3NlciBkZWZhdWx0XG4gIG1hcmdpbi1ib3R0b206ICRsaW5lLWhlaWdodC1jb21wdXRlZDtcbn1cbmR0LFxuZGQge1xuICBsaW5lLWhlaWdodDogJGxpbmUtaGVpZ2h0LWJhc2U7XG59XG5kdCB7XG4gIGZvbnQtd2VpZ2h0OiBib2xkO1xufVxuZGQge1xuICBtYXJnaW4tbGVmdDogMDsgLy8gVW5kbyBicm93c2VyIGRlZmF1bHRcbn1cblxuLy8gSG9yaXpvbnRhbCBkZXNjcmlwdGlvbiBsaXN0c1xuLy9cbi8vIERlZmF1bHRzIHRvIGJlaW5nIHN0YWNrZWQgd2l0aG91dCBhbnkgb2YgdGhlIGJlbG93IHN0eWxlcyBhcHBsaWVkLCB1bnRpbCB0aGVcbi8vIGdyaWQgYnJlYWtwb2ludCBpcyByZWFjaGVkIChkZWZhdWx0IG9mIH43NjhweCkuXG5cbi5kbC1ob3Jpem9udGFsIHtcbiAgZGQge1xuICAgIEBpbmNsdWRlIGNsZWFyZml4OyAvLyBDbGVhciB0aGUgZmxvYXRlZCBgZHRgIGlmIGFuIGVtcHR5IGBkZGAgaXMgcHJlc2VudFxuICB9XG5cbiAgQG1lZGlhIChtaW4td2lkdGg6ICRncmlkLWZsb2F0LWJyZWFrcG9pbnQpIHtcbiAgICBkdCB7XG4gICAgICBmbG9hdDogbGVmdDtcbiAgICAgIHdpZHRoOiAoJGRsLWhvcml6b250YWwtb2Zmc2V0IC0gMjApO1xuICAgICAgY2xlYXI6IGxlZnQ7XG4gICAgICB0ZXh0LWFsaWduOiByaWdodDtcbiAgICAgIEBpbmNsdWRlIHRleHQtb3ZlcmZsb3c7XG4gICAgfVxuICAgIGRkIHtcbiAgICAgIG1hcmdpbi1sZWZ0OiAkZGwtaG9yaXpvbnRhbC1vZmZzZXQ7XG4gICAgfVxuICB9XG59XG5cblxuLy8gTWlzY1xuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4vLyBBYmJyZXZpYXRpb25zIGFuZCBhY3Jvbnltc1xuYWJiclt0aXRsZV0sXG4vLyBBZGQgZGF0YS0qIGF0dHJpYnV0ZSB0byBoZWxwIG91dCBvdXIgdG9vbHRpcCBwbHVnaW4sIHBlciBodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvaXNzdWVzLzUyNTdcbmFiYnJbZGF0YS1vcmlnaW5hbC10aXRsZV0ge1xuICBjdXJzb3I6IGhlbHA7XG4gIGJvcmRlci1ib3R0b206IDFweCBkb3R0ZWQgJGFiYnItYm9yZGVyLWNvbG9yO1xufVxuLmluaXRpYWxpc20ge1xuICBmb250LXNpemU6IDkwJTtcbiAgQGV4dGVuZCAudGV4dC11cHBlcmNhc2U7XG59XG5cbi8vIEJsb2NrcXVvdGVzXG5ibG9ja3F1b3RlIHtcbiAgcGFkZGluZzogKCRsaW5lLWhlaWdodC1jb21wdXRlZCAvIDIpICRsaW5lLWhlaWdodC1jb21wdXRlZDtcbiAgbWFyZ2luOiAwIDAgJGxpbmUtaGVpZ2h0LWNvbXB1dGVkO1xuICBmb250LXNpemU6ICRibG9ja3F1b3RlLWZvbnQtc2l6ZTtcbiAgYm9yZGVyLWxlZnQ6IDVweCBzb2xpZCAkYmxvY2txdW90ZS1ib3JkZXItY29sb3I7XG5cbiAgcCxcbiAgdWwsXG4gIG9sIHtcbiAgICAmOmxhc3QtY2hpbGQge1xuICAgICAgbWFyZ2luLWJvdHRvbTogMDtcbiAgICB9XG4gIH1cblxuICAvLyBOb3RlOiBEZXByZWNhdGVkIHNtYWxsIGFuZCAuc21hbGwgYXMgb2YgdjMuMS4wXG4gIC8vIENvbnRleHQ6IGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9pc3N1ZXMvMTE2NjBcbiAgZm9vdGVyLFxuICBzbWFsbCxcbiAgLnNtYWxsIHtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgICBmb250LXNpemU6IDgwJTsgLy8gYmFjayB0byBkZWZhdWx0IGZvbnQtc2l6ZVxuICAgIGxpbmUtaGVpZ2h0OiAkbGluZS1oZWlnaHQtYmFzZTtcbiAgICBjb2xvcjogJGJsb2NrcXVvdGUtc21hbGwtY29sb3I7XG5cbiAgICAmOmJlZm9yZSB7XG4gICAgICBjb250ZW50OiAnXFwyMDE0IFxcMDBBMCc7IC8vIGVtIGRhc2gsIG5ic3BcbiAgICB9XG4gIH1cbn1cblxuLy8gT3Bwb3NpdGUgYWxpZ25tZW50IG9mIGJsb2NrcXVvdGVcbi8vXG4vLyBIZWFkcyB1cDogYGJsb2NrcXVvdGUucHVsbC1yaWdodGAgaGFzIGJlZW4gZGVwcmVjYXRlZCBhcyBvZiB2My4xLjAuXG4uYmxvY2txdW90ZS1yZXZlcnNlLFxuYmxvY2txdW90ZS5wdWxsLXJpZ2h0IHtcbiAgcGFkZGluZy1yaWdodDogMTVweDtcbiAgcGFkZGluZy1sZWZ0OiAwO1xuICBib3JkZXItcmlnaHQ6IDVweCBzb2xpZCAkYmxvY2txdW90ZS1ib3JkZXItY29sb3I7XG4gIGJvcmRlci1sZWZ0OiAwO1xuICB0ZXh0LWFsaWduOiByaWdodDtcblxuICAvLyBBY2NvdW50IGZvciBjaXRhdGlvblxuICBmb290ZXIsXG4gIHNtYWxsLFxuICAuc21hbGwge1xuICAgICY6YmVmb3JlIHsgY29udGVudDogJyc7IH1cbiAgICAmOmFmdGVyIHtcbiAgICAgIGNvbnRlbnQ6ICdcXDAwQTAgXFwyMDE0JzsgLy8gbmJzcCwgZW0gZGFzaFxuICAgIH1cbiAgfVxufVxuXG4vLyBBZGRyZXNzZXNcbmFkZHJlc3Mge1xuICBtYXJnaW4tYm90dG9tOiAkbGluZS1oZWlnaHQtY29tcHV0ZWQ7XG4gIGZvbnQtc3R5bGU6IG5vcm1hbDtcbiAgbGluZS1oZWlnaHQ6ICRsaW5lLWhlaWdodC1iYXNlO1xufVxuIiwiLy8gVHlwb2dyYXBoeVxuXG4vLyBbY29udmVydGVyXSAkcGFyZW50IGhhY2tcbkBtaXhpbiB0ZXh0LWVtcGhhc2lzLXZhcmlhbnQoJHBhcmVudCwgJGNvbG9yKSB7XG4gICN7JHBhcmVudH0ge1xuICAgIGNvbG9yOiAkY29sb3I7XG4gIH1cbiAgYSN7JHBhcmVudH06aG92ZXIge1xuICAgIGNvbG9yOiBkYXJrZW4oJGNvbG9yLCAxMCUpO1xuICB9XG59XG4iLCIvLyBDb250ZXh0dWFsIGJhY2tncm91bmRzXG5cbi8vIFtjb252ZXJ0ZXJdICRwYXJlbnQgaGFja1xuQG1peGluIGJnLXZhcmlhbnQoJHBhcmVudCwgJGNvbG9yKSB7XG4gICN7JHBhcmVudH0ge1xuICAgIGJhY2tncm91bmQtY29sb3I6ICRjb2xvcjtcbiAgfVxuICBhI3skcGFyZW50fTpob3ZlciB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogZGFya2VuKCRjb2xvciwgMTAlKTtcbiAgfVxufVxuIiwiLy8gQ2xlYXJmaXhcbi8vXG4vLyBGb3IgbW9kZXJuIGJyb3dzZXJzXG4vLyAxLiBUaGUgc3BhY2UgY29udGVudCBpcyBvbmUgd2F5IHRvIGF2b2lkIGFuIE9wZXJhIGJ1ZyB3aGVuIHRoZVxuLy8gICAgY29udGVudGVkaXRhYmxlIGF0dHJpYnV0ZSBpcyBpbmNsdWRlZCBhbnl3aGVyZSBlbHNlIGluIHRoZSBkb2N1bWVudC5cbi8vICAgIE90aGVyd2lzZSBpdCBjYXVzZXMgc3BhY2UgdG8gYXBwZWFyIGF0IHRoZSB0b3AgYW5kIGJvdHRvbSBvZiBlbGVtZW50c1xuLy8gICAgdGhhdCBhcmUgY2xlYXJmaXhlZC5cbi8vIDIuIFRoZSB1c2Ugb2YgYHRhYmxlYCByYXRoZXIgdGhhbiBgYmxvY2tgIGlzIG9ubHkgbmVjZXNzYXJ5IGlmIHVzaW5nXG4vLyAgICBgOmJlZm9yZWAgdG8gY29udGFpbiB0aGUgdG9wLW1hcmdpbnMgb2YgY2hpbGQgZWxlbWVudHMuXG4vL1xuLy8gU291cmNlOiBodHRwOi8vbmljb2xhc2dhbGxhZ2hlci5jb20vbWljcm8tY2xlYXJmaXgtaGFjay9cblxuQG1peGluIGNsZWFyZml4KCkge1xuICAmOmJlZm9yZSxcbiAgJjphZnRlciB7XG4gICAgY29udGVudDogXCIgXCI7IC8vIDFcbiAgICBkaXNwbGF5OiB0YWJsZTsgLy8gMlxuICB9XG4gICY6YWZ0ZXIge1xuICAgIGNsZWFyOiBib3RoO1xuICB9XG59XG4iLCIvLyBUZXh0IG92ZXJmbG93XG4vLyBSZXF1aXJlcyBpbmxpbmUtYmxvY2sgb3IgYmxvY2sgZm9yIHByb3BlciBzdHlsaW5nXG5cbkBtaXhpbiB0ZXh0LW92ZXJmbG93KCkge1xuICBvdmVyZmxvdzogaGlkZGVuO1xuICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpcztcbiAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbn1cbiIsIi8vXG4vLyBDb2RlIChpbmxpbmUgYW5kIGJsb2NrKVxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuXG4vLyBJbmxpbmUgYW5kIGJsb2NrIGNvZGUgc3R5bGVzXG5jb2RlLFxua2JkLFxucHJlLFxuc2FtcCB7XG4gIGZvbnQtZmFtaWx5OiAkZm9udC1mYW1pbHktbW9ub3NwYWNlO1xufVxuXG4vLyBJbmxpbmUgY29kZVxuY29kZSB7XG4gIHBhZGRpbmc6IDJweCA0cHg7XG4gIGZvbnQtc2l6ZTogOTAlO1xuICBjb2xvcjogJGNvZGUtY29sb3I7XG4gIGJhY2tncm91bmQtY29sb3I6ICRjb2RlLWJnO1xuICBib3JkZXItcmFkaXVzOiAkYm9yZGVyLXJhZGl1cy1iYXNlO1xufVxuXG4vLyBVc2VyIGlucHV0IHR5cGljYWxseSBlbnRlcmVkIHZpYSBrZXlib2FyZFxua2JkIHtcbiAgcGFkZGluZzogMnB4IDRweDtcbiAgZm9udC1zaXplOiA5MCU7XG4gIGNvbG9yOiAka2JkLWNvbG9yO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAka2JkLWJnO1xuICBib3JkZXItcmFkaXVzOiAkYm9yZGVyLXJhZGl1cy1zbWFsbDtcbiAgYm94LXNoYWRvdzogaW5zZXQgMCAtMXB4IDAgcmdiYSgwLDAsMCwuMjUpO1xuXG4gIGtiZCB7XG4gICAgcGFkZGluZzogMDtcbiAgICBmb250LXNpemU6IDEwMCU7XG4gICAgZm9udC13ZWlnaHQ6IGJvbGQ7XG4gICAgYm94LXNoYWRvdzogbm9uZTtcbiAgfVxufVxuXG4vLyBCbG9ja3Mgb2YgY29kZVxucHJlIHtcbiAgZGlzcGxheTogYmxvY2s7XG4gIHBhZGRpbmc6ICgoJGxpbmUtaGVpZ2h0LWNvbXB1dGVkIC0gMSkgLyAyKTtcbiAgbWFyZ2luOiAwIDAgKCRsaW5lLWhlaWdodC1jb21wdXRlZCAvIDIpO1xuICBmb250LXNpemU6ICgkZm9udC1zaXplLWJhc2UgLSAxKTsgLy8gMTRweCB0byAxM3B4XG4gIGxpbmUtaGVpZ2h0OiAkbGluZS1oZWlnaHQtYmFzZTtcbiAgd29yZC1icmVhazogYnJlYWstYWxsO1xuICB3b3JkLXdyYXA6IGJyZWFrLXdvcmQ7XG4gIGNvbG9yOiAkcHJlLWNvbG9yO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAkcHJlLWJnO1xuICBib3JkZXI6IDFweCBzb2xpZCAkcHJlLWJvcmRlci1jb2xvcjtcbiAgYm9yZGVyLXJhZGl1czogJGJvcmRlci1yYWRpdXMtYmFzZTtcblxuICAvLyBBY2NvdW50IGZvciBzb21lIGNvZGUgb3V0cHV0cyB0aGF0IHBsYWNlIGNvZGUgdGFncyBpbiBwcmUgdGFnc1xuICBjb2RlIHtcbiAgICBwYWRkaW5nOiAwO1xuICAgIGZvbnQtc2l6ZTogaW5oZXJpdDtcbiAgICBjb2xvcjogaW5oZXJpdDtcbiAgICB3aGl0ZS1zcGFjZTogcHJlLXdyYXA7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7XG4gICAgYm9yZGVyLXJhZGl1czogMDtcbiAgfVxufVxuXG4vLyBFbmFibGUgc2Nyb2xsYWJsZSBibG9ja3Mgb2YgY29kZVxuLnByZS1zY3JvbGxhYmxlIHtcbiAgbWF4LWhlaWdodDogJHByZS1zY3JvbGxhYmxlLW1heC1oZWlnaHQ7XG4gIG92ZXJmbG93LXk6IHNjcm9sbDtcbn1cbiIsIiRmb250LWZhbWlseS1laW5hOiAnRWluYScsICdIZWx2ZXRpY2EgTmV1ZScsIEhlbHZldGljYSwgc2Fucy1zZXJpZjtcbiRmb250LWZhbWlseS1pbnRlcjogJ0ludGVyJywgJ0ludGVyIFVJJywgSGVsdmV0aWNhLCBBcmlhbCwgc2Fucy1zZXJpZjtcbiRmb250LWZhbWlseS1zeXN0ZW06IGFwcGxlLXN5c3RlbSwgQmxpbmtNYWNTeXN0ZW1Gb250LCBSb2JvdG8sIEhlbHZldGljYSwgQXJpYWwsIHNhbnMtc2VyaWY7XG5cbiRmb250LWZhbWlseS1tb25vc3BhY2U6ICdSb2JvdG8gTW9ubycsIE1lbmxvLCBNb25hY28sIENvbnNvbGFzLCAnQ291cmllciBOZXcnLCBtb25vc3BhY2U7XG4kZm9udC1mYW1pbHktc2VyaWY6ICdBZG9iZSBDYXNsb24nLCBHZW9yZ2lhLCBUaW1lcywgJ1RpbWVzIE5ldyBSb21hbicsIHNlcmlmO1xuXG4kZm9udC1mYW1pbHktZGVmYXVsdDogJGZvbnQtZmFtaWx5LWludGVyO1xuXG4kYmx1ZTogICAgICAgICAgIzRhOGJmYztcbiRsaWdodC1ibHVlOiAgICAjNTI5ZWZmO1xuJGdyZWVuOiAgICAgICAgICMxZWQxNzY7XG4kb3JhbmdlOiAgICAgICAgI2ZjYjUyYztcbiRwdXJwbGU6ICAgICAgICAjOGI3ZGYxO1xuJHJlZDogICAgICAgICAgICNmODU1NmM7XG5cbiR3aGl0ZWlzaDogICAgICAjZjlmYWZiO1xuJGxpZ2h0ZXItZ3JleTogICNlYmVlZjI7XG4kbGlnaHQtZ3JleTogICAgI2U2ZTllZTtcbiRsaWdodGlzaC1ncmV5OiAjYTBhNWIwO1xuJGdyZXk6ICAgICAgICAgICM5ZGE1YjM7XG4kZGFya2lzaC1ncmV5OiAgIzg5ODk4OTtcbiRkYXJrLWdyZXk6ICAgICAjNTc2MDcwO1xuJGJsYWNraXNoOiAgICAgICM0QzU1NUE7XG4kYmxhY2tlcjogICAgICAgIzI0MjgyZTtcblxuJHNpZGVuYXYtd2lkdGg6IDIzMHB4O1xuJHBsYXRmb3JtLXByZXZpZXctd2lkdGg6IDQ2N3B4O1xuXG4vLyBib290c3RyYXAgb3ZlcnJpZGVzXG4kbmF2YmFyLWRlZmF1bHQtYmc6ICAgICAkYmx1ZTtcbiRuYXZiYXItZGVmYXVsdC1ib3JkZXI6ICRibHVlO1xuJG5hdmJhci1kZWZhdWx0LWJyYW5kLWNvbG9yOiByZ2JhKHdoaXRlLCAuOCk7XG4kbmF2YmFyLWRlZmF1bHQtbGluay1jb2xvcjogIHJnYmEod2hpdGUsIC44KTtcbiRuYXZiYXItZGVmYXVsdC1icmFuZC1ob3Zlci1jb2xvcjogI2ZmZjtcbiRuYXZiYXItZGVmYXVsdC1saW5rLWhvdmVyLWNvbG9yOiAgI2ZmZjtcbiRuYXZiYXItZGVmYXVsdC1saW5rLWFjdGl2ZS1jb2xvcjogI2ZmZjtcbiRuYXZiYXItZGVmYXVsdC1saW5rLWFjdGl2ZS1iZzogdHJhbnNwYXJlbnQ7XG5cbi8vICRuYXZiYXItZGVmYXVsdC1icmFuZC1ob3Zlci1iZztcbi8vICRuYXZiYXItZGVmYXVsdC1saW5rLWhvdmVyLWJnO1xuLy8gJG5hdmJhci1kZWZhdWx0LWxpbmstZGlzYWJsZWQtY29sb3I7XG4vLyAkbmF2YmFyLWRlZmF1bHQtbGluay1kaXNhYmxlZC1iZztcbi8vICRuYXZiYXItZGVmYXVsdC10b2dnbGUtYm9yZGVyLWNvbG9yO1xuLy8gJG5hdmJhci1kZWZhdWx0LXRvZ2dsZS1ob3Zlci1iZztcbi8vICRuYXZiYXItZGVmYXVsdC10b2dnbGUtaWNvbi1iYXItYmc7XG5cbi8vIGJvb3RzdHJhcCB2YXJpYWJsZXMgYW5kIG1peGluc1xuQGltcG9ydCAnYm9vdHN0cmFwL3ZhcmlhYmxlcyc7XG5AaW1wb3J0ICdib290c3RyYXAvbWl4aW5zJztcbiIsIi8vXG4vLyBHcmlkIHN5c3RlbVxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuXG4vLyBDb250YWluZXIgd2lkdGhzXG4vL1xuLy8gU2V0IHRoZSBjb250YWluZXIgd2lkdGgsIGFuZCBvdmVycmlkZSBpdCBmb3IgZml4ZWQgbmF2YmFycyBpbiBtZWRpYSBxdWVyaWVzLlxuXG4uY29udGFpbmVyIHtcbiAgQGluY2x1ZGUgY29udGFpbmVyLWZpeGVkO1xuXG4gIEBtZWRpYSAobWluLXdpZHRoOiAkc2NyZWVuLXNtLW1pbikge1xuICAgIHdpZHRoOiAkY29udGFpbmVyLXNtO1xuICB9XG4gIEBtZWRpYSAobWluLXdpZHRoOiAkc2NyZWVuLW1kLW1pbikge1xuICAgIHdpZHRoOiAkY29udGFpbmVyLW1kO1xuICB9XG4gIEBtZWRpYSAobWluLXdpZHRoOiAkc2NyZWVuLWxnLW1pbikge1xuICAgIHdpZHRoOiAkY29udGFpbmVyLWxnO1xuICB9XG59XG5cblxuLy8gRmx1aWQgY29udGFpbmVyXG4vL1xuLy8gVXRpbGl6ZXMgdGhlIG1peGluIG1lYW50IGZvciBmaXhlZCB3aWR0aCBjb250YWluZXJzLCBidXQgd2l0aG91dCBhbnkgZGVmaW5lZFxuLy8gd2lkdGggZm9yIGZsdWlkLCBmdWxsIHdpZHRoIGxheW91dHMuXG5cbi5jb250YWluZXItZmx1aWQge1xuICBAaW5jbHVkZSBjb250YWluZXItZml4ZWQ7XG59XG5cblxuLy8gUm93XG4vL1xuLy8gUm93cyBjb250YWluIGFuZCBjbGVhciB0aGUgZmxvYXRzIG9mIHlvdXIgY29sdW1ucy5cblxuLnJvdyB7XG4gIEBpbmNsdWRlIG1ha2Utcm93O1xufVxuXG5cbi8vIENvbHVtbnNcbi8vXG4vLyBDb21tb24gc3R5bGVzIGZvciBzbWFsbCBhbmQgbGFyZ2UgZ3JpZCBjb2x1bW5zXG5cbkBpbmNsdWRlIG1ha2UtZ3JpZC1jb2x1bW5zO1xuXG5cbi8vIEV4dHJhIHNtYWxsIGdyaWRcbi8vXG4vLyBDb2x1bW5zLCBvZmZzZXRzLCBwdXNoZXMsIGFuZCBwdWxscyBmb3IgZXh0cmEgc21hbGwgZGV2aWNlcyBsaWtlXG4vLyBzbWFydHBob25lcy5cblxuQGluY2x1ZGUgbWFrZS1ncmlkKHhzKTtcblxuXG4vLyBTbWFsbCBncmlkXG4vL1xuLy8gQ29sdW1ucywgb2Zmc2V0cywgcHVzaGVzLCBhbmQgcHVsbHMgZm9yIHRoZSBzbWFsbCBkZXZpY2UgcmFuZ2UsIGZyb20gcGhvbmVzXG4vLyB0byB0YWJsZXRzLlxuXG5AbWVkaWEgKG1pbi13aWR0aDogJHNjcmVlbi1zbS1taW4pIHtcbiAgQGluY2x1ZGUgbWFrZS1ncmlkKHNtKTtcbn1cblxuXG4vLyBNZWRpdW0gZ3JpZFxuLy9cbi8vIENvbHVtbnMsIG9mZnNldHMsIHB1c2hlcywgYW5kIHB1bGxzIGZvciB0aGUgZGVza3RvcCBkZXZpY2UgcmFuZ2UuXG5cbkBtZWRpYSAobWluLXdpZHRoOiAkc2NyZWVuLW1kLW1pbikge1xuICBAaW5jbHVkZSBtYWtlLWdyaWQobWQpO1xufVxuXG5cbi8vIExhcmdlIGdyaWRcbi8vXG4vLyBDb2x1bW5zLCBvZmZzZXRzLCBwdXNoZXMsIGFuZCBwdWxscyBmb3IgdGhlIGxhcmdlIGRlc2t0b3AgZGV2aWNlIHJhbmdlLlxuXG5AbWVkaWEgKG1pbi13aWR0aDogJHNjcmVlbi1sZy1taW4pIHtcbiAgQGluY2x1ZGUgbWFrZS1ncmlkKGxnKTtcbn1cbiIsIi8vIEdyaWQgc3lzdGVtXG4vL1xuLy8gR2VuZXJhdGUgc2VtYW50aWMgZ3JpZCBjb2x1bW5zIHdpdGggdGhlc2UgbWl4aW5zLlxuXG4vLyBDZW50ZXJlZCBjb250YWluZXIgZWxlbWVudFxuQG1peGluIGNvbnRhaW5lci1maXhlZCgkZ3V0dGVyOiAkZ3JpZC1ndXR0ZXItd2lkdGgpIHtcbiAgbWFyZ2luLXJpZ2h0OiBhdXRvO1xuICBtYXJnaW4tbGVmdDogYXV0bztcbiAgcGFkZGluZy1sZWZ0OiAgKCRndXR0ZXIgLyAyKTtcbiAgcGFkZGluZy1yaWdodDogKCRndXR0ZXIgLyAyKTtcbiAgQGluY2x1ZGUgY2xlYXJmaXg7XG59XG5cbi8vIENyZWF0ZXMgYSB3cmFwcGVyIGZvciBhIHNlcmllcyBvZiBjb2x1bW5zXG5AbWl4aW4gbWFrZS1yb3coJGd1dHRlcjogJGdyaWQtZ3V0dGVyLXdpZHRoKSB7XG4gIG1hcmdpbi1sZWZ0OiAgKCRndXR0ZXIgLyAtMik7XG4gIG1hcmdpbi1yaWdodDogKCRndXR0ZXIgLyAtMik7XG4gIEBpbmNsdWRlIGNsZWFyZml4O1xufVxuXG4vLyBHZW5lcmF0ZSB0aGUgZXh0cmEgc21hbGwgY29sdW1uc1xuQG1peGluIG1ha2UteHMtY29sdW1uKCRjb2x1bW5zLCAkZ3V0dGVyOiAkZ3JpZC1ndXR0ZXItd2lkdGgpIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBmbG9hdDogbGVmdDtcbiAgd2lkdGg6IHBlcmNlbnRhZ2UoKCRjb2x1bW5zIC8gJGdyaWQtY29sdW1ucykpO1xuICBtaW4taGVpZ2h0OiAxcHg7XG4gIHBhZGRpbmctbGVmdDogICgkZ3V0dGVyIC8gMik7XG4gIHBhZGRpbmctcmlnaHQ6ICgkZ3V0dGVyIC8gMik7XG59XG5AbWl4aW4gbWFrZS14cy1jb2x1bW4tb2Zmc2V0KCRjb2x1bW5zKSB7XG4gIG1hcmdpbi1sZWZ0OiBwZXJjZW50YWdlKCgkY29sdW1ucyAvICRncmlkLWNvbHVtbnMpKTtcbn1cbkBtaXhpbiBtYWtlLXhzLWNvbHVtbi1wdXNoKCRjb2x1bW5zKSB7XG4gIGxlZnQ6IHBlcmNlbnRhZ2UoKCRjb2x1bW5zIC8gJGdyaWQtY29sdW1ucykpO1xufVxuQG1peGluIG1ha2UteHMtY29sdW1uLXB1bGwoJGNvbHVtbnMpIHtcbiAgcmlnaHQ6IHBlcmNlbnRhZ2UoKCRjb2x1bW5zIC8gJGdyaWQtY29sdW1ucykpO1xufVxuXG4vLyBHZW5lcmF0ZSB0aGUgc21hbGwgY29sdW1uc1xuQG1peGluIG1ha2Utc20tY29sdW1uKCRjb2x1bW5zLCAkZ3V0dGVyOiAkZ3JpZC1ndXR0ZXItd2lkdGgpIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBtaW4taGVpZ2h0OiAxcHg7XG4gIHBhZGRpbmctbGVmdDogICgkZ3V0dGVyIC8gMik7XG4gIHBhZGRpbmctcmlnaHQ6ICgkZ3V0dGVyIC8gMik7XG5cbiAgQG1lZGlhIChtaW4td2lkdGg6ICRzY3JlZW4tc20tbWluKSB7XG4gICAgZmxvYXQ6IGxlZnQ7XG4gICAgd2lkdGg6IHBlcmNlbnRhZ2UoKCRjb2x1bW5zIC8gJGdyaWQtY29sdW1ucykpO1xuICB9XG59XG5AbWl4aW4gbWFrZS1zbS1jb2x1bW4tb2Zmc2V0KCRjb2x1bW5zKSB7XG4gIEBtZWRpYSAobWluLXdpZHRoOiAkc2NyZWVuLXNtLW1pbikge1xuICAgIG1hcmdpbi1sZWZ0OiBwZXJjZW50YWdlKCgkY29sdW1ucyAvICRncmlkLWNvbHVtbnMpKTtcbiAgfVxufVxuQG1peGluIG1ha2Utc20tY29sdW1uLXB1c2goJGNvbHVtbnMpIHtcbiAgQG1lZGlhIChtaW4td2lkdGg6ICRzY3JlZW4tc20tbWluKSB7XG4gICAgbGVmdDogcGVyY2VudGFnZSgoJGNvbHVtbnMgLyAkZ3JpZC1jb2x1bW5zKSk7XG4gIH1cbn1cbkBtaXhpbiBtYWtlLXNtLWNvbHVtbi1wdWxsKCRjb2x1bW5zKSB7XG4gIEBtZWRpYSAobWluLXdpZHRoOiAkc2NyZWVuLXNtLW1pbikge1xuICAgIHJpZ2h0OiBwZXJjZW50YWdlKCgkY29sdW1ucyAvICRncmlkLWNvbHVtbnMpKTtcbiAgfVxufVxuXG4vLyBHZW5lcmF0ZSB0aGUgbWVkaXVtIGNvbHVtbnNcbkBtaXhpbiBtYWtlLW1kLWNvbHVtbigkY29sdW1ucywgJGd1dHRlcjogJGdyaWQtZ3V0dGVyLXdpZHRoKSB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgbWluLWhlaWdodDogMXB4O1xuICBwYWRkaW5nLWxlZnQ6ICAoJGd1dHRlciAvIDIpO1xuICBwYWRkaW5nLXJpZ2h0OiAoJGd1dHRlciAvIDIpO1xuXG4gIEBtZWRpYSAobWluLXdpZHRoOiAkc2NyZWVuLW1kLW1pbikge1xuICAgIGZsb2F0OiBsZWZ0O1xuICAgIHdpZHRoOiBwZXJjZW50YWdlKCgkY29sdW1ucyAvICRncmlkLWNvbHVtbnMpKTtcbiAgfVxufVxuQG1peGluIG1ha2UtbWQtY29sdW1uLW9mZnNldCgkY29sdW1ucykge1xuICBAbWVkaWEgKG1pbi13aWR0aDogJHNjcmVlbi1tZC1taW4pIHtcbiAgICBtYXJnaW4tbGVmdDogcGVyY2VudGFnZSgoJGNvbHVtbnMgLyAkZ3JpZC1jb2x1bW5zKSk7XG4gIH1cbn1cbkBtaXhpbiBtYWtlLW1kLWNvbHVtbi1wdXNoKCRjb2x1bW5zKSB7XG4gIEBtZWRpYSAobWluLXdpZHRoOiAkc2NyZWVuLW1kLW1pbikge1xuICAgIGxlZnQ6IHBlcmNlbnRhZ2UoKCRjb2x1bW5zIC8gJGdyaWQtY29sdW1ucykpO1xuICB9XG59XG5AbWl4aW4gbWFrZS1tZC1jb2x1bW4tcHVsbCgkY29sdW1ucykge1xuICBAbWVkaWEgKG1pbi13aWR0aDogJHNjcmVlbi1tZC1taW4pIHtcbiAgICByaWdodDogcGVyY2VudGFnZSgoJGNvbHVtbnMgLyAkZ3JpZC1jb2x1bW5zKSk7XG4gIH1cbn1cblxuLy8gR2VuZXJhdGUgdGhlIGxhcmdlIGNvbHVtbnNcbkBtaXhpbiBtYWtlLWxnLWNvbHVtbigkY29sdW1ucywgJGd1dHRlcjogJGdyaWQtZ3V0dGVyLXdpZHRoKSB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgbWluLWhlaWdodDogMXB4O1xuICBwYWRkaW5nLWxlZnQ6ICAoJGd1dHRlciAvIDIpO1xuICBwYWRkaW5nLXJpZ2h0OiAoJGd1dHRlciAvIDIpO1xuXG4gIEBtZWRpYSAobWluLXdpZHRoOiAkc2NyZWVuLWxnLW1pbikge1xuICAgIGZsb2F0OiBsZWZ0O1xuICAgIHdpZHRoOiBwZXJjZW50YWdlKCgkY29sdW1ucyAvICRncmlkLWNvbHVtbnMpKTtcbiAgfVxufVxuQG1peGluIG1ha2UtbGctY29sdW1uLW9mZnNldCgkY29sdW1ucykge1xuICBAbWVkaWEgKG1pbi13aWR0aDogJHNjcmVlbi1sZy1taW4pIHtcbiAgICBtYXJnaW4tbGVmdDogcGVyY2VudGFnZSgoJGNvbHVtbnMgLyAkZ3JpZC1jb2x1bW5zKSk7XG4gIH1cbn1cbkBtaXhpbiBtYWtlLWxnLWNvbHVtbi1wdXNoKCRjb2x1bW5zKSB7XG4gIEBtZWRpYSAobWluLXdpZHRoOiAkc2NyZWVuLWxnLW1pbikge1xuICAgIGxlZnQ6IHBlcmNlbnRhZ2UoKCRjb2x1bW5zIC8gJGdyaWQtY29sdW1ucykpO1xuICB9XG59XG5AbWl4aW4gbWFrZS1sZy1jb2x1bW4tcHVsbCgkY29sdW1ucykge1xuICBAbWVkaWEgKG1pbi13aWR0aDogJHNjcmVlbi1sZy1taW4pIHtcbiAgICByaWdodDogcGVyY2VudGFnZSgoJGNvbHVtbnMgLyAkZ3JpZC1jb2x1bW5zKSk7XG4gIH1cbn1cbiIsIi8vIEZyYW1ld29yayBncmlkIGdlbmVyYXRpb25cbi8vXG4vLyBVc2VkIG9ubHkgYnkgQm9vdHN0cmFwIHRvIGdlbmVyYXRlIHRoZSBjb3JyZWN0IG51bWJlciBvZiBncmlkIGNsYXNzZXMgZ2l2ZW5cbi8vIGFueSB2YWx1ZSBvZiBgJGdyaWQtY29sdW1uc2AuXG5cbi8vIFtjb252ZXJ0ZXJdIFRoaXMgaXMgZGVmaW5lZCByZWN1cnNpdmVseSBpbiBMRVNTLCBidXQgU2FzcyBzdXBwb3J0cyByZWFsIGxvb3BzXG5AbWl4aW4gbWFrZS1ncmlkLWNvbHVtbnMoJGk6IDEsICRsaXN0OiBcIi5jb2wteHMtI3skaX0sIC5jb2wtc20tI3skaX0sIC5jb2wtbWQtI3skaX0sIC5jb2wtbGctI3skaX1cIikge1xuICBAZm9yICRpIGZyb20gKDEgKyAxKSB0aHJvdWdoICRncmlkLWNvbHVtbnMge1xuICAgICRsaXN0OiBcIiN7JGxpc3R9LCAuY29sLXhzLSN7JGl9LCAuY29sLXNtLSN7JGl9LCAuY29sLW1kLSN7JGl9LCAuY29sLWxnLSN7JGl9XCI7XG4gIH1cbiAgI3skbGlzdH0ge1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAvLyBQcmV2ZW50IGNvbHVtbnMgZnJvbSBjb2xsYXBzaW5nIHdoZW4gZW1wdHlcbiAgICBtaW4taGVpZ2h0OiAxcHg7XG4gICAgLy8gSW5uZXIgZ3V0dGVyIHZpYSBwYWRkaW5nXG4gICAgcGFkZGluZy1sZWZ0OiAgKCRncmlkLWd1dHRlci13aWR0aCAvIDIpO1xuICAgIHBhZGRpbmctcmlnaHQ6ICgkZ3JpZC1ndXR0ZXItd2lkdGggLyAyKTtcbiAgfVxufVxuXG5cbi8vIFtjb252ZXJ0ZXJdIFRoaXMgaXMgZGVmaW5lZCByZWN1cnNpdmVseSBpbiBMRVNTLCBidXQgU2FzcyBzdXBwb3J0cyByZWFsIGxvb3BzXG5AbWl4aW4gZmxvYXQtZ3JpZC1jb2x1bW5zKCRjbGFzcywgJGk6IDEsICRsaXN0OiBcIi5jb2wtI3skY2xhc3N9LSN7JGl9XCIpIHtcbiAgQGZvciAkaSBmcm9tICgxICsgMSkgdGhyb3VnaCAkZ3JpZC1jb2x1bW5zIHtcbiAgICAkbGlzdDogXCIjeyRsaXN0fSwgLmNvbC0jeyRjbGFzc30tI3skaX1cIjtcbiAgfVxuICAjeyRsaXN0fSB7XG4gICAgZmxvYXQ6IGxlZnQ7XG4gIH1cbn1cblxuXG5AbWl4aW4gY2FsYy1ncmlkLWNvbHVtbigkaW5kZXgsICRjbGFzcywgJHR5cGUpIHtcbiAgQGlmICgkdHlwZSA9PSB3aWR0aCkgYW5kICgkaW5kZXggPiAwKSB7XG4gICAgLmNvbC0jeyRjbGFzc30tI3skaW5kZXh9IHtcbiAgICAgIHdpZHRoOiBwZXJjZW50YWdlKCgkaW5kZXggLyAkZ3JpZC1jb2x1bW5zKSk7XG4gICAgfVxuICB9XG4gIEBpZiAoJHR5cGUgPT0gcHVzaCkgYW5kICgkaW5kZXggPiAwKSB7XG4gICAgLmNvbC0jeyRjbGFzc30tcHVzaC0jeyRpbmRleH0ge1xuICAgICAgbGVmdDogcGVyY2VudGFnZSgoJGluZGV4IC8gJGdyaWQtY29sdW1ucykpO1xuICAgIH1cbiAgfVxuICBAaWYgKCR0eXBlID09IHB1c2gpIGFuZCAoJGluZGV4ID09IDApIHtcbiAgICAuY29sLSN7JGNsYXNzfS1wdXNoLTAge1xuICAgICAgbGVmdDogYXV0bztcbiAgICB9XG4gIH1cbiAgQGlmICgkdHlwZSA9PSBwdWxsKSBhbmQgKCRpbmRleCA+IDApIHtcbiAgICAuY29sLSN7JGNsYXNzfS1wdWxsLSN7JGluZGV4fSB7XG4gICAgICByaWdodDogcGVyY2VudGFnZSgoJGluZGV4IC8gJGdyaWQtY29sdW1ucykpO1xuICAgIH1cbiAgfVxuICBAaWYgKCR0eXBlID09IHB1bGwpIGFuZCAoJGluZGV4ID09IDApIHtcbiAgICAuY29sLSN7JGNsYXNzfS1wdWxsLTAge1xuICAgICAgcmlnaHQ6IGF1dG87XG4gICAgfVxuICB9XG4gIEBpZiAoJHR5cGUgPT0gb2Zmc2V0KSB7XG4gICAgLmNvbC0jeyRjbGFzc30tb2Zmc2V0LSN7JGluZGV4fSB7XG4gICAgICBtYXJnaW4tbGVmdDogcGVyY2VudGFnZSgoJGluZGV4IC8gJGdyaWQtY29sdW1ucykpO1xuICAgIH1cbiAgfVxufVxuXG4vLyBbY29udmVydGVyXSBUaGlzIGlzIGRlZmluZWQgcmVjdXJzaXZlbHkgaW4gTEVTUywgYnV0IFNhc3Mgc3VwcG9ydHMgcmVhbCBsb29wc1xuQG1peGluIGxvb3AtZ3JpZC1jb2x1bW5zKCRjb2x1bW5zLCAkY2xhc3MsICR0eXBlKSB7XG4gIEBmb3IgJGkgZnJvbSAwIHRocm91Z2ggJGNvbHVtbnMge1xuICAgIEBpbmNsdWRlIGNhbGMtZ3JpZC1jb2x1bW4oJGksICRjbGFzcywgJHR5cGUpO1xuICB9XG59XG5cblxuLy8gQ3JlYXRlIGdyaWQgZm9yIHNwZWNpZmljIGNsYXNzXG5AbWl4aW4gbWFrZS1ncmlkKCRjbGFzcykge1xuICBAaW5jbHVkZSBmbG9hdC1ncmlkLWNvbHVtbnMoJGNsYXNzKTtcbiAgQGluY2x1ZGUgbG9vcC1ncmlkLWNvbHVtbnMoJGdyaWQtY29sdW1ucywgJGNsYXNzLCB3aWR0aCk7XG4gIEBpbmNsdWRlIGxvb3AtZ3JpZC1jb2x1bW5zKCRncmlkLWNvbHVtbnMsICRjbGFzcywgcHVsbCk7XG4gIEBpbmNsdWRlIGxvb3AtZ3JpZC1jb2x1bW5zKCRncmlkLWNvbHVtbnMsICRjbGFzcywgcHVzaCk7XG4gIEBpbmNsdWRlIGxvb3AtZ3JpZC1jb2x1bW5zKCRncmlkLWNvbHVtbnMsICRjbGFzcywgb2Zmc2V0KTtcbn1cbiIsIi8vXG4vLyBUYWJsZXNcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cblxudGFibGUge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAkdGFibGUtYmc7XG59XG5jYXB0aW9uIHtcbiAgcGFkZGluZy10b3A6ICR0YWJsZS1jZWxsLXBhZGRpbmc7XG4gIHBhZGRpbmctYm90dG9tOiAkdGFibGUtY2VsbC1wYWRkaW5nO1xuICBjb2xvcjogJHRleHQtbXV0ZWQ7XG4gIHRleHQtYWxpZ246IGxlZnQ7XG59XG50aCB7XG4gIHRleHQtYWxpZ246IGxlZnQ7XG59XG5cblxuLy8gQmFzZWxpbmUgc3R5bGVzXG5cbnRhYmxlLCAudGFibGUge1xuICB3aWR0aDogMTAwJTtcbiAgbWF4LXdpZHRoOiAxMDAlO1xuICBtYXJnaW4tYm90dG9tOiAkbGluZS1oZWlnaHQtY29tcHV0ZWQ7XG4gIC8vIENlbGxzXG4gID4gdGhlYWQsXG4gID4gdGJvZHksXG4gID4gdGZvb3Qge1xuICAgID4gdHIge1xuICAgICAgPiB0aCxcbiAgICAgID4gdGQge1xuICAgICAgICBwYWRkaW5nOiAkdGFibGUtY2VsbC1wYWRkaW5nO1xuICAgICAgICBsaW5lLWhlaWdodDogJGxpbmUtaGVpZ2h0LWJhc2U7XG4gICAgICAgIHZlcnRpY2FsLWFsaWduOiB0b3A7XG4gICAgICAgIGJvcmRlci10b3A6IDFweCBzb2xpZCAkdGFibGUtYm9yZGVyLWNvbG9yO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICAvLyBCb3R0b20gYWxpZ24gZm9yIGNvbHVtbiBoZWFkaW5nc1xuICA+IHRoZWFkID4gdHIgPiB0aCB7XG4gICAgdmVydGljYWwtYWxpZ246IGJvdHRvbTtcbiAgICBib3JkZXItYm90dG9tOiAycHggc29saWQgJHRhYmxlLWJvcmRlci1jb2xvcjtcbiAgfVxuICAvLyBSZW1vdmUgdG9wIGJvcmRlciBmcm9tIHRoZWFkIGJ5IGRlZmF1bHRcbiAgPiBjYXB0aW9uICsgdGhlYWQsXG4gID4gY29sZ3JvdXAgKyB0aGVhZCxcbiAgPiB0aGVhZDpmaXJzdC1jaGlsZCB7XG4gICAgPiB0cjpmaXJzdC1jaGlsZCB7XG4gICAgICA+IHRoLFxuICAgICAgPiB0ZCB7XG4gICAgICAgIGJvcmRlci10b3A6IDA7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIC8vIEFjY291bnQgZm9yIG11bHRpcGxlIHRib2R5IGluc3RhbmNlc1xuICA+IHRib2R5ICsgdGJvZHkge1xuICAgIGJvcmRlci10b3A6IDJweCBzb2xpZCAkdGFibGUtYm9yZGVyLWNvbG9yO1xuICB9XG5cbiAgLy8gTmVzdGluZ1xuICAudGFibGUge1xuICAgIGJhY2tncm91bmQtY29sb3I6ICRib2R5LWJnO1xuICB9XG59XG5cblxuLy8gQ29uZGVuc2VkIHRhYmxlIHcvIGhhbGYgcGFkZGluZ1xuXG4udGFibGUtY29uZGVuc2VkIHtcbiAgPiB0aGVhZCxcbiAgPiB0Ym9keSxcbiAgPiB0Zm9vdCB7XG4gICAgPiB0ciB7XG4gICAgICA+IHRoLFxuICAgICAgPiB0ZCB7XG4gICAgICAgIHBhZGRpbmc6ICR0YWJsZS1jb25kZW5zZWQtY2VsbC1wYWRkaW5nO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5cbi8vIEJvcmRlcmVkIHZlcnNpb25cbi8vXG4vLyBBZGQgYm9yZGVycyBhbGwgYXJvdW5kIHRoZSB0YWJsZSBhbmQgYmV0d2VlbiBhbGwgdGhlIGNvbHVtbnMuXG5cbi50YWJsZS1ib3JkZXJlZCB7XG4gIGJvcmRlcjogMXB4IHNvbGlkICR0YWJsZS1ib3JkZXItY29sb3I7XG4gID4gdGhlYWQsXG4gID4gdGJvZHksXG4gID4gdGZvb3Qge1xuICAgID4gdHIge1xuICAgICAgPiB0aCxcbiAgICAgID4gdGQge1xuICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAkdGFibGUtYm9yZGVyLWNvbG9yO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICA+IHRoZWFkID4gdHIge1xuICAgID4gdGgsXG4gICAgPiB0ZCB7XG4gICAgICBib3JkZXItYm90dG9tLXdpZHRoOiAycHg7XG4gICAgfVxuICB9XG59XG5cblxuLy8gWmVicmEtc3RyaXBpbmdcbi8vXG4vLyBEZWZhdWx0IHplYnJhLXN0cmlwZSBzdHlsZXMgKGFsdGVybmF0aW5nIGdyYXkgYW5kIHRyYW5zcGFyZW50IGJhY2tncm91bmRzKVxuXG4udGFibGUtc3RyaXBlZCB7XG4gID4gdGJvZHkgPiB0cjpudGgtb2YtdHlwZShvZGQpIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkdGFibGUtYmctYWNjZW50O1xuICB9XG59XG5cblxuLy8gSG92ZXIgZWZmZWN0XG4vL1xuLy8gUGxhY2VkIGhlcmUgc2luY2UgaXQgaGFzIHRvIGNvbWUgYWZ0ZXIgdGhlIHBvdGVudGlhbCB6ZWJyYSBzdHJpcGluZ1xuXG4udGFibGUtaG92ZXIge1xuICA+IHRib2R5ID4gdHI6aG92ZXIge1xuICAgIGJhY2tncm91bmQtY29sb3I6ICR0YWJsZS1iZy1ob3ZlcjtcbiAgfVxufVxuXG5cbi8vIFRhYmxlIGNlbGwgc2l6aW5nXG4vL1xuLy8gUmVzZXQgZGVmYXVsdCB0YWJsZSBiZWhhdmlvclxuXG50YWJsZSBjb2xbY2xhc3MqPVwiY29sLVwiXSB7XG4gIHBvc2l0aW9uOiBzdGF0aWM7IC8vIFByZXZlbnQgYm9yZGVyIGhpZGluZyBpbiBGaXJlZm94IGFuZCBJRTktMTEgKHNlZSBodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvaXNzdWVzLzExNjIzKVxuICBmbG9hdDogbm9uZTtcbiAgZGlzcGxheTogdGFibGUtY29sdW1uO1xufVxudGFibGUge1xuICB0ZCxcbiAgdGgge1xuICAgICZbY2xhc3MqPVwiY29sLVwiXSB7XG4gICAgICBwb3NpdGlvbjogc3RhdGljOyAvLyBQcmV2ZW50IGJvcmRlciBoaWRpbmcgaW4gRmlyZWZveCBhbmQgSUU5LTExIChzZWUgaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2lzc3Vlcy8xMTYyMylcbiAgICAgIGZsb2F0OiBub25lO1xuICAgICAgZGlzcGxheTogdGFibGUtY2VsbDtcbiAgICB9XG4gIH1cbn1cblxuXG4vLyBUYWJsZSBiYWNrZ3JvdW5kc1xuLy9cbi8vIEV4YWN0IHNlbGVjdG9ycyBiZWxvdyByZXF1aXJlZCB0byBvdmVycmlkZSBgLnRhYmxlLXN0cmlwZWRgIGFuZCBwcmV2ZW50XG4vLyBpbmhlcml0YW5jZSB0byBuZXN0ZWQgdGFibGVzLlxuXG4vLyBHZW5lcmF0ZSB0aGUgY29udGV4dHVhbCB2YXJpYW50c1xuQGluY2x1ZGUgdGFibGUtcm93LXZhcmlhbnQoJ2FjdGl2ZScsICR0YWJsZS1iZy1hY3RpdmUpO1xuQGluY2x1ZGUgdGFibGUtcm93LXZhcmlhbnQoJ3N1Y2Nlc3MnLCAkc3RhdGUtc3VjY2Vzcy1iZyk7XG5AaW5jbHVkZSB0YWJsZS1yb3ctdmFyaWFudCgnaW5mbycsICRzdGF0ZS1pbmZvLWJnKTtcbkBpbmNsdWRlIHRhYmxlLXJvdy12YXJpYW50KCd3YXJuaW5nJywgJHN0YXRlLXdhcm5pbmctYmcpO1xuQGluY2x1ZGUgdGFibGUtcm93LXZhcmlhbnQoJ2RhbmdlcicsICRzdGF0ZS1kYW5nZXItYmcpO1xuXG5cbi8vIFJlc3BvbnNpdmUgdGFibGVzXG4vL1xuLy8gV3JhcCB5b3VyIHRhYmxlcyBpbiBgLnRhYmxlLXJlc3BvbnNpdmVgIGFuZCB3ZSdsbCBtYWtlIHRoZW0gbW9iaWxlIGZyaWVuZGx5XG4vLyBieSBlbmFibGluZyBob3Jpem9udGFsIHNjcm9sbGluZy4gT25seSBhcHBsaWVzIDw3NjhweC4gRXZlcnl0aGluZyBhYm92ZSB0aGF0XG4vLyB3aWxsIGRpc3BsYXkgbm9ybWFsbHkuXG5cbi50YWJsZS1yZXNwb25zaXZlIHtcbiAgb3ZlcmZsb3cteDogYXV0bztcbiAgbWluLWhlaWdodDogMC4wMSU7IC8vIFdvcmthcm91bmQgZm9yIElFOSBidWcgKHNlZSBodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvaXNzdWVzLzE0ODM3KVxuXG4gIEBtZWRpYSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6ICRzY3JlZW4teHMtbWF4KSB7XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgbWFyZ2luLWJvdHRvbTogKCRsaW5lLWhlaWdodC1jb21wdXRlZCAqIDAuNzUpO1xuICAgIG92ZXJmbG93LXk6IGhpZGRlbjtcbiAgICAtbXMtb3ZlcmZsb3ctc3R5bGU6IC1tcy1hdXRvaGlkaW5nLXNjcm9sbGJhcjtcbiAgICBib3JkZXI6IDFweCBzb2xpZCAkdGFibGUtYm9yZGVyLWNvbG9yO1xuXG4gICAgLy8gVGlnaHRlbiB1cCBzcGFjaW5nXG4gICAgPiAudGFibGUge1xuICAgICAgbWFyZ2luLWJvdHRvbTogMDtcblxuICAgICAgLy8gRW5zdXJlIHRoZSBjb250ZW50IGRvZXNuJ3Qgd3JhcFxuICAgICAgPiB0aGVhZCxcbiAgICAgID4gdGJvZHksXG4gICAgICA+IHRmb290IHtcbiAgICAgICAgPiB0ciB7XG4gICAgICAgICAgPiB0aCxcbiAgICAgICAgICA+IHRkIHtcbiAgICAgICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gU3BlY2lhbCBvdmVycmlkZXMgZm9yIHRoZSBib3JkZXJlZCB0YWJsZXNcbiAgICA+IC50YWJsZS1ib3JkZXJlZCB7XG4gICAgICBib3JkZXI6IDA7XG5cbiAgICAgIC8vIE51a2UgdGhlIGFwcHJvcHJpYXRlIGJvcmRlcnMgc28gdGhhdCB0aGUgcGFyZW50IGNhbiBoYW5kbGUgdGhlbVxuICAgICAgPiB0aGVhZCxcbiAgICAgID4gdGJvZHksXG4gICAgICA+IHRmb290IHtcbiAgICAgICAgPiB0ciB7XG4gICAgICAgICAgPiB0aDpmaXJzdC1jaGlsZCxcbiAgICAgICAgICA+IHRkOmZpcnN0LWNoaWxkIHtcbiAgICAgICAgICAgIGJvcmRlci1sZWZ0OiAwO1xuICAgICAgICAgIH1cbiAgICAgICAgICA+IHRoOmxhc3QtY2hpbGQsXG4gICAgICAgICAgPiB0ZDpsYXN0LWNoaWxkIHtcbiAgICAgICAgICAgIGJvcmRlci1yaWdodDogMDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gT25seSBudWtlIHRoZSBsYXN0IHJvdydzIGJvdHRvbS1ib3JkZXIgaW4gYHRib2R5YCBhbmQgYHRmb290YCBzaW5jZVxuICAgICAgLy8gY2hhbmNlcyBhcmUgdGhlcmUgd2lsbCBiZSBvbmx5IG9uZSBgdHJgIGluIGEgYHRoZWFkYCBhbmQgdGhhdCB3b3VsZFxuICAgICAgLy8gcmVtb3ZlIHRoZSBib3JkZXIgYWx0b2dldGhlci5cbiAgICAgID4gdGJvZHksXG4gICAgICA+IHRmb290IHtcbiAgICAgICAgPiB0cjpsYXN0LWNoaWxkIHtcbiAgICAgICAgICA+IHRoLFxuICAgICAgICAgID4gdGQge1xuICAgICAgICAgICAgYm9yZGVyLWJvdHRvbTogMDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgIH1cbiAgfVxufVxuIiwiLy8gVGFibGVzXG5cbkBtaXhpbiB0YWJsZS1yb3ctdmFyaWFudCgkc3RhdGUsICRiYWNrZ3JvdW5kKSB7XG4gIC8vIEV4YWN0IHNlbGVjdG9ycyBiZWxvdyByZXF1aXJlZCB0byBvdmVycmlkZSBgLnRhYmxlLXN0cmlwZWRgIGFuZCBwcmV2ZW50XG4gIC8vIGluaGVyaXRhbmNlIHRvIG5lc3RlZCB0YWJsZXMuXG4gIC50YWJsZSA+IHRoZWFkID4gdHIsXG4gIC50YWJsZSA+IHRib2R5ID4gdHIsXG4gIC50YWJsZSA+IHRmb290ID4gdHIge1xuICAgID4gdGQuI3skc3RhdGV9LFxuICAgID4gdGguI3skc3RhdGV9LFxuICAgICYuI3skc3RhdGV9ID4gdGQsXG4gICAgJi4jeyRzdGF0ZX0gPiB0aCB7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkYmFja2dyb3VuZDtcbiAgICB9XG4gIH1cblxuICAvLyBIb3ZlciBzdGF0ZXMgZm9yIGAudGFibGUtaG92ZXJgXG4gIC8vIE5vdGU6IHRoaXMgaXMgbm90IGF2YWlsYWJsZSBmb3IgY2VsbHMgb3Igcm93cyB3aXRoaW4gYHRoZWFkYCBvciBgdGZvb3RgLlxuICAudGFibGUtaG92ZXIgPiB0Ym9keSA+IHRyIHtcbiAgICA+IHRkLiN7JHN0YXRlfTpob3ZlcixcbiAgICA+IHRoLiN7JHN0YXRlfTpob3ZlcixcbiAgICAmLiN7JHN0YXRlfTpob3ZlciA+IHRkLFxuICAgICY6aG92ZXIgPiAuI3skc3RhdGV9LFxuICAgICYuI3skc3RhdGV9OmhvdmVyID4gdGgge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogZGFya2VuKCRiYWNrZ3JvdW5kLCA1JSk7XG4gICAgfVxuICB9XG59XG4iLCIvL1xuLy8gRm9ybXNcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cblxuLy8gTm9ybWFsaXplIG5vbi1jb250cm9sc1xuLy9cbi8vIFJlc3R5bGUgYW5kIGJhc2VsaW5lIG5vbi1jb250cm9sIGZvcm0gZWxlbWVudHMuXG5cbmZpZWxkc2V0IHtcbiAgcGFkZGluZzogMDtcbiAgbWFyZ2luOiAwO1xuICBib3JkZXI6IDA7XG4gIC8vIENocm9tZSBhbmQgRmlyZWZveCBzZXQgYSBgbWluLXdpZHRoOiBtaW4tY29udGVudDtgIG9uIGZpZWxkc2V0cyxcbiAgLy8gc28gd2UgcmVzZXQgdGhhdCB0byBlbnN1cmUgaXQgYmVoYXZlcyBtb3JlIGxpa2UgYSBzdGFuZGFyZCBibG9jayBlbGVtZW50LlxuICAvLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2lzc3Vlcy8xMjM1OS5cbiAgbWluLXdpZHRoOiAwO1xufVxuXG5sZWdlbmQge1xuICBkaXNwbGF5OiBibG9jaztcbiAgd2lkdGg6IDEwMCU7XG4gIHBhZGRpbmc6IDA7XG4gIG1hcmdpbi1ib3R0b206ICRsaW5lLWhlaWdodC1jb21wdXRlZDtcbiAgZm9udC1zaXplOiAoJGZvbnQtc2l6ZS1iYXNlICogMS41KTtcbiAgbGluZS1oZWlnaHQ6IGluaGVyaXQ7XG4gIGNvbG9yOiAkbGVnZW5kLWNvbG9yO1xuICBib3JkZXI6IDA7XG4gIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAkbGVnZW5kLWJvcmRlci1jb2xvcjtcbn1cblxubGFiZWwge1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIG1heC13aWR0aDogMTAwJTsgLy8gRm9yY2UgSUU4IHRvIHdyYXAgbG9uZyBjb250ZW50IChzZWUgaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2lzc3Vlcy8xMzE0MSlcbiAgbWFyZ2luLWJvdHRvbTogNXB4O1xuICBmb250LXdlaWdodDogNjAwO1xufVxuXG5cbi8vIE5vcm1hbGl6ZSBmb3JtIGNvbnRyb2xzXG4vL1xuLy8gV2hpbGUgbW9zdCBvZiBvdXIgZm9ybSBzdHlsZXMgcmVxdWlyZSBleHRyYSBjbGFzc2VzLCBzb21lIGJhc2ljIG5vcm1hbGl6YXRpb25cbi8vIGlzIHJlcXVpcmVkIHRvIGVuc3VyZSBvcHRpbXVtIGRpc3BsYXkgd2l0aCBvciB3aXRob3V0IHRob3NlIGNsYXNzZXMgdG8gYmV0dGVyXG4vLyBhZGRyZXNzIGJyb3dzZXIgaW5jb25zaXN0ZW5jaWVzLlxuXG4vLyBPdmVycmlkZSBjb250ZW50LWJveCBpbiBOb3JtYWxpemUgKCogaXNuJ3Qgc3BlY2lmaWMgZW5vdWdoKVxuaW5wdXRbdHlwZT1cInNlYXJjaFwiXSB7XG4gIEBpbmNsdWRlIGJveC1zaXppbmcoYm9yZGVyLWJveCk7XG59XG5cbi8vIFBvc2l0aW9uIHJhZGlvcyBhbmQgY2hlY2tib3hlcyBiZXR0ZXJcbmlucHV0W3R5cGU9XCJyYWRpb1wiXSxcbmlucHV0W3R5cGU9XCJjaGVja2JveFwiXSB7XG4gIG1hcmdpbjogNHB4IDAgMDtcbiAgbWFyZ2luLXRvcDogMXB4IFxcOTsgLy8gSUU4LTlcbiAgbGluZS1oZWlnaHQ6IG5vcm1hbDtcbn1cblxuLy8gU2V0IHRoZSBoZWlnaHQgb2YgZmlsZSBjb250cm9scyB0byBtYXRjaCB0ZXh0IGlucHV0c1xuaW5wdXRbdHlwZT1cImZpbGVcIl0ge1xuICBkaXNwbGF5OiBibG9jaztcbn1cblxuLy8gTWFrZSByYW5nZSBpbnB1dHMgYmVoYXZlIGxpa2UgdGV4dHVhbCBmb3JtIGNvbnRyb2xzXG5pbnB1dFt0eXBlPVwicmFuZ2VcIl0ge1xuICBkaXNwbGF5OiBibG9jaztcbiAgd2lkdGg6IDEwMCU7XG59XG5cbi8vIE1ha2UgbXVsdGlwbGUgc2VsZWN0IGVsZW1lbnRzIGhlaWdodCBub3QgZml4ZWRcbnNlbGVjdFttdWx0aXBsZV0sXG5zZWxlY3Rbc2l6ZV0ge1xuICBoZWlnaHQ6IGF1dG87XG59XG5cbi8vIEZvY3VzIGZvciBmaWxlLCByYWRpbywgYW5kIGNoZWNrYm94XG5pbnB1dFt0eXBlPVwiZmlsZVwiXTpmb2N1cyxcbmlucHV0W3R5cGU9XCJyYWRpb1wiXTpmb2N1cyxcbmlucHV0W3R5cGU9XCJjaGVja2JveFwiXTpmb2N1cyB7XG4gIEBpbmNsdWRlIHRhYi1mb2N1cztcbn1cblxuLy8gQWRqdXN0IG91dHB1dCBlbGVtZW50XG5vdXRwdXQge1xuICBkaXNwbGF5OiBibG9jaztcbiAgcGFkZGluZy10b3A6ICgkcGFkZGluZy1iYXNlLXZlcnRpY2FsICsgMSk7XG4gIGZvbnQtc2l6ZTogJGZvbnQtc2l6ZS1iYXNlO1xuICBsaW5lLWhlaWdodDogJGxpbmUtaGVpZ2h0LWJhc2U7XG4gIGNvbG9yOiAkaW5wdXQtY29sb3I7XG59XG5cblxuLy8gQ29tbW9uIGZvcm0gY29udHJvbHNcbi8vXG4vLyBTaGFyZWQgc2l6ZSBhbmQgdHlwZSByZXNldHMgZm9yIGZvcm0gY29udHJvbHMuIEFwcGx5IGAuZm9ybS1jb250cm9sYCB0byBhbnlcbi8vIG9mIHRoZSBmb2xsb3dpbmcgZm9ybSBjb250cm9sczpcbi8vXG4vLyBzZWxlY3Rcbi8vIHRleHRhcmVhXG4vLyBpbnB1dFt0eXBlPVwidGV4dFwiXVxuLy8gaW5wdXRbdHlwZT1cInBhc3N3b3JkXCJdXG4vLyBpbnB1dFt0eXBlPVwiZGF0ZXRpbWVcIl1cbi8vIGlucHV0W3R5cGU9XCJkYXRldGltZS1sb2NhbFwiXVxuLy8gaW5wdXRbdHlwZT1cImRhdGVcIl1cbi8vIGlucHV0W3R5cGU9XCJtb250aFwiXVxuLy8gaW5wdXRbdHlwZT1cInRpbWVcIl1cbi8vIGlucHV0W3R5cGU9XCJ3ZWVrXCJdXG4vLyBpbnB1dFt0eXBlPVwibnVtYmVyXCJdXG4vLyBpbnB1dFt0eXBlPVwiZW1haWxcIl1cbi8vIGlucHV0W3R5cGU9XCJ1cmxcIl1cbi8vIGlucHV0W3R5cGU9XCJzZWFyY2hcIl1cbi8vIGlucHV0W3R5cGU9XCJ0ZWxcIl1cbi8vIGlucHV0W3R5cGU9XCJjb2xvclwiXVxuXG4uZm9ybS1jb250cm9sIHtcbiAgZGlzcGxheTogYmxvY2s7XG4gIHdpZHRoOiAxMDAlO1xuICBoZWlnaHQ6ICRpbnB1dC1oZWlnaHQtYmFzZTsgLy8gTWFrZSBpbnB1dHMgYXQgbGVhc3QgdGhlIGhlaWdodCBvZiB0aGVpciBidXR0b24gY291bnRlcnBhcnQgKGJhc2UgbGluZS1oZWlnaHQgKyBwYWRkaW5nICsgYm9yZGVyKVxuICBwYWRkaW5nOiAkcGFkZGluZy1iYXNlLXZlcnRpY2FsICRwYWRkaW5nLWJhc2UtaG9yaXpvbnRhbDtcbiAgZm9udC1zaXplOiAkZm9udC1zaXplLWJhc2U7XG4gIGxpbmUtaGVpZ2h0OiAkbGluZS1oZWlnaHQtYmFzZTtcbiAgY29sb3I6ICRpbnB1dC1jb2xvcjtcbiAgYmFja2dyb3VuZC1jb2xvcjogJGlucHV0LWJnO1xuICBiYWNrZ3JvdW5kLWltYWdlOiBub25lOyAvLyBSZXNldCB1bnVzdWFsIEZpcmVmb3gtb24tQW5kcm9pZCBkZWZhdWx0IHN0eWxlOyBzZWUgaHR0cHM6Ly9naXRodWIuY29tL25lY29sYXMvbm9ybWFsaXplLmNzcy9pc3N1ZXMvMjE0XG4gIGJvcmRlcjogMXB4IHNvbGlkICRpbnB1dC1ib3JkZXI7XG4gIGJvcmRlci1yYWRpdXM6ICRpbnB1dC1ib3JkZXItcmFkaXVzOyAvLyBOb3RlOiBUaGlzIGhhcyBubyBlZmZlY3Qgb24gPHNlbGVjdD5zIGluIHNvbWUgYnJvd3NlcnMsIGR1ZSB0byB0aGUgbGltaXRlZCBzdHlsYWJpbGl0eSBvZiA8c2VsZWN0PnMgaW4gQ1NTLlxuICBAaW5jbHVkZSBib3gtc2hhZG93KGluc2V0IDAgMXB4IDFweCByZ2JhKDAsMCwwLC4wNzUpKTtcbiAgQGluY2x1ZGUgdHJhbnNpdGlvbihib3JkZXItY29sb3IgZWFzZS1pbi1vdXQgLjE1cywgYm94LXNoYWRvdyBlYXNlLWluLW91dCAuMTVzKTtcblxuICAvLyBDdXN0b21pemUgdGhlIGA6Zm9jdXNgIHN0YXRlIHRvIGltaXRhdGUgbmF0aXZlIFdlYktpdCBzdHlsZXMuXG4gIEBpbmNsdWRlIGZvcm0tY29udHJvbC1mb2N1cztcblxuICAvLyBQbGFjZWhvbGRlclxuICBAaW5jbHVkZSBwbGFjZWhvbGRlcjtcblxuICAvLyBEaXNhYmxlZCBhbmQgcmVhZC1vbmx5IGlucHV0c1xuICAvL1xuICAvLyBIVE1MNSBzYXlzIHRoYXQgY29udHJvbHMgdW5kZXIgYSBmaWVsZHNldCA+IGxlZ2VuZDpmaXJzdC1jaGlsZCB3b24ndCBiZVxuICAvLyBkaXNhYmxlZCBpZiB0aGUgZmllbGRzZXQgaXMgZGlzYWJsZWQuIER1ZSB0byBpbXBsZW1lbnRhdGlvbiBkaWZmaWN1bHR5LCB3ZVxuICAvLyBkb24ndCBob25vciB0aGF0IGVkZ2UgY2FzZTsgd2Ugc3R5bGUgdGhlbSBhcyBkaXNhYmxlZCBhbnl3YXkuXG4gICZbZGlzYWJsZWRdLFxuICAmW3JlYWRvbmx5XSxcbiAgZmllbGRzZXRbZGlzYWJsZWRdICYge1xuICAgIGJhY2tncm91bmQtY29sb3I6ICRpbnB1dC1iZy1kaXNhYmxlZDtcbiAgICBvcGFjaXR5OiAxOyAvLyBpT1MgZml4IGZvciB1bnJlYWRhYmxlIGRpc2FibGVkIGNvbnRlbnQ7IHNlZSBodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvaXNzdWVzLzExNjU1XG4gIH1cblxuICAmW2Rpc2FibGVkXSxcbiAgZmllbGRzZXRbZGlzYWJsZWRdICYge1xuICAgIGN1cnNvcjogJGN1cnNvci1kaXNhYmxlZDtcbiAgfVxuXG4gIC8vIFtjb252ZXJ0ZXJdIGV4dHJhY3RlZCB0ZXh0YXJlYSYgdG8gdGV4dGFyZWEuZm9ybS1jb250cm9sXG59XG5cbi8vIFJlc2V0IGhlaWdodCBmb3IgYHRleHRhcmVhYHNcbnRleHRhcmVhLmZvcm0tY29udHJvbCB7XG4gIGhlaWdodDogYXV0bztcbn1cblxuXG4vLyBTZWFyY2ggaW5wdXRzIGluIGlPU1xuLy9cbi8vIFRoaXMgb3ZlcnJpZGVzIHRoZSBleHRyYSByb3VuZGVkIGNvcm5lcnMgb24gc2VhcmNoIGlucHV0cyBpbiBpT1Mgc28gdGhhdCBvdXJcbi8vIGAuZm9ybS1jb250cm9sYCBjbGFzcyBjYW4gcHJvcGVybHkgc3R5bGUgdGhlbS4gTm90ZSB0aGF0IHRoaXMgY2Fubm90IHNpbXBseVxuLy8gYmUgYWRkZWQgdG8gYC5mb3JtLWNvbnRyb2xgIGFzIGl0J3Mgbm90IHNwZWNpZmljIGVub3VnaC4gRm9yIGRldGFpbHMsIHNlZVxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2lzc3Vlcy8xMTU4Ni5cblxuaW5wdXRbdHlwZT1cInNlYXJjaFwiXSB7XG4gIC13ZWJraXQtYXBwZWFyYW5jZTogbm9uZTtcbn1cblxuXG4vLyBTcGVjaWFsIHN0eWxlcyBmb3IgaU9TIHRlbXBvcmFsIGlucHV0c1xuLy9cbi8vIEluIE1vYmlsZSBTYWZhcmksIHNldHRpbmcgYGRpc3BsYXk6IGJsb2NrYCBvbiB0ZW1wb3JhbCBpbnB1dHMgY2F1c2VzIHRoZVxuLy8gdGV4dCB3aXRoaW4gdGhlIGlucHV0IHRvIGJlY29tZSB2ZXJ0aWNhbGx5IG1pc2FsaWduZWQuIEFzIGEgd29ya2Fyb3VuZCwgd2Vcbi8vIHNldCBhIHBpeGVsIGxpbmUtaGVpZ2h0IHRoYXQgbWF0Y2hlcyB0aGUgZ2l2ZW4gaGVpZ2h0IG9mIHRoZSBpbnB1dCwgYnV0IG9ubHlcbi8vIGZvciBTYWZhcmkuIFNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM5ODQ4XG5cbkBtZWRpYSBzY3JlZW4gYW5kICgtd2Via2l0LW1pbi1kZXZpY2UtcGl4ZWwtcmF0aW86IDApIHtcbiAgaW5wdXRbdHlwZT1cImRhdGVcIl0sXG4gIGlucHV0W3R5cGU9XCJ0aW1lXCJdLFxuICBpbnB1dFt0eXBlPVwiZGF0ZXRpbWUtbG9jYWxcIl0sXG4gIGlucHV0W3R5cGU9XCJtb250aFwiXSB7XG4gICAgbGluZS1oZWlnaHQ6ICRpbnB1dC1oZWlnaHQtYmFzZTtcblxuICAgICYuaW5wdXQtc20sXG4gICAgLmlucHV0LWdyb3VwLXNtICYge1xuICAgICAgbGluZS1oZWlnaHQ6ICRpbnB1dC1oZWlnaHQtc21hbGw7XG4gICAgfVxuXG4gICAgJi5pbnB1dC1sZyxcbiAgICAuaW5wdXQtZ3JvdXAtbGcgJiB7XG4gICAgICBsaW5lLWhlaWdodDogJGlucHV0LWhlaWdodC1sYXJnZTtcbiAgICB9XG4gIH1cbn1cblxuXG4vLyBGb3JtIGdyb3Vwc1xuLy9cbi8vIERlc2lnbmVkIHRvIGhlbHAgd2l0aCB0aGUgb3JnYW5pemF0aW9uIGFuZCBzcGFjaW5nIG9mIHZlcnRpY2FsIGZvcm1zLiBGb3Jcbi8vIGhvcml6b250YWwgZm9ybXMsIHVzZSB0aGUgcHJlZGVmaW5lZCBncmlkIGNsYXNzZXMuXG5cbi5mb3JtLWdyb3VwIHtcbiAgbWFyZ2luLWJvdHRvbTogJGZvcm0tZ3JvdXAtbWFyZ2luLWJvdHRvbTtcbn1cblxuXG4vLyBDaGVja2JveGVzIGFuZCByYWRpb3Ncbi8vXG4vLyBJbmRlbnQgdGhlIGxhYmVscyB0byBwb3NpdGlvbiByYWRpb3MvY2hlY2tib3hlcyBhcyBoYW5naW5nIGNvbnRyb2xzLlxuXG4ucmFkaW8sXG4uY2hlY2tib3gge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICBtYXJnaW4tdG9wOiAxMHB4O1xuICBtYXJnaW4tYm90dG9tOiAxMHB4O1xuXG4gIGxhYmVsIHtcbiAgICBtaW4taGVpZ2h0OiAkbGluZS1oZWlnaHQtY29tcHV0ZWQ7IC8vIEVuc3VyZSB0aGUgaW5wdXQgZG9lc24ndCBqdW1wIHdoZW4gdGhlcmUgaXMgbm8gdGV4dFxuICAgIHBhZGRpbmctbGVmdDogMjBweDtcbiAgICBtYXJnaW4tYm90dG9tOiAwO1xuICAgIGZvbnQtd2VpZ2h0OiBub3JtYWw7XG4gICAgY3Vyc29yOiBwb2ludGVyO1xuICB9XG59XG4ucmFkaW8gaW5wdXRbdHlwZT1cInJhZGlvXCJdLFxuLnJhZGlvLWlubGluZSBpbnB1dFt0eXBlPVwicmFkaW9cIl0sXG4uY2hlY2tib3ggaW5wdXRbdHlwZT1cImNoZWNrYm94XCJdLFxuLmNoZWNrYm94LWlubGluZSBpbnB1dFt0eXBlPVwiY2hlY2tib3hcIl0ge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIG1hcmdpbi1sZWZ0OiAtMjBweDtcbiAgbWFyZ2luLXRvcDogNHB4IFxcOTtcbn1cblxuLnJhZGlvICsgLnJhZGlvLFxuLmNoZWNrYm94ICsgLmNoZWNrYm94IHtcbiAgbWFyZ2luLXRvcDogLTVweDsgLy8gTW92ZSB1cCBzaWJsaW5nIHJhZGlvcyBvciBjaGVja2JveGVzIGZvciB0aWdodGVyIHNwYWNpbmdcbn1cblxuLy8gUmFkaW9zIGFuZCBjaGVja2JveGVzIG9uIHNhbWUgbGluZVxuLnJhZGlvLWlubGluZSxcbi5jaGVja2JveC1pbmxpbmUge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgcGFkZGluZy1sZWZ0OiAyMHB4O1xuICBtYXJnaW4tYm90dG9tOiAwO1xuICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xuICBmb250LXdlaWdodDogbm9ybWFsO1xuICBjdXJzb3I6IHBvaW50ZXI7XG59XG4ucmFkaW8taW5saW5lICsgLnJhZGlvLWlubGluZSxcbi5jaGVja2JveC1pbmxpbmUgKyAuY2hlY2tib3gtaW5saW5lIHtcbiAgbWFyZ2luLXRvcDogMDtcbiAgbWFyZ2luLWxlZnQ6IDEwcHg7IC8vIHNwYWNlIG91dCBjb25zZWN1dGl2ZSBpbmxpbmUgY29udHJvbHNcbn1cblxuLy8gQXBwbHkgc2FtZSBkaXNhYmxlZCBjdXJzb3IgdHdlYWsgYXMgZm9yIGlucHV0c1xuLy8gU29tZSBzcGVjaWFsIGNhcmUgaXMgbmVlZGVkIGJlY2F1c2UgPGxhYmVsPnMgZG9uJ3QgaW5oZXJpdCB0aGVpciBwYXJlbnQncyBgY3Vyc29yYC5cbi8vXG4vLyBOb3RlOiBOZWl0aGVyIHJhZGlvcyBub3IgY2hlY2tib3hlcyBjYW4gYmUgcmVhZG9ubHkuXG5pbnB1dFt0eXBlPVwicmFkaW9cIl0sXG5pbnB1dFt0eXBlPVwiY2hlY2tib3hcIl0ge1xuICAmW2Rpc2FibGVkXSxcbiAgJi5kaXNhYmxlZCxcbiAgZmllbGRzZXRbZGlzYWJsZWRdICYge1xuICAgIGN1cnNvcjogJGN1cnNvci1kaXNhYmxlZDtcbiAgfVxufVxuLy8gVGhlc2UgY2xhc3NlcyBhcmUgdXNlZCBkaXJlY3RseSBvbiA8bGFiZWw+c1xuLnJhZGlvLWlubGluZSxcbi5jaGVja2JveC1pbmxpbmUge1xuICAmLmRpc2FibGVkLFxuICBmaWVsZHNldFtkaXNhYmxlZF0gJiB7XG4gICAgY3Vyc29yOiAkY3Vyc29yLWRpc2FibGVkO1xuICB9XG59XG4vLyBUaGVzZSBjbGFzc2VzIGFyZSB1c2VkIG9uIGVsZW1lbnRzIHdpdGggPGxhYmVsPiBkZXNjZW5kYW50c1xuLnJhZGlvLFxuLmNoZWNrYm94IHtcbiAgJi5kaXNhYmxlZCxcbiAgZmllbGRzZXRbZGlzYWJsZWRdICYge1xuICAgIGxhYmVsIHtcbiAgICAgIGN1cnNvcjogJGN1cnNvci1kaXNhYmxlZDtcbiAgICB9XG4gIH1cbn1cblxuXG4vLyBTdGF0aWMgZm9ybSBjb250cm9sIHRleHRcbi8vXG4vLyBBcHBseSBjbGFzcyB0byBhIGBwYCBlbGVtZW50IHRvIG1ha2UgYW55IHN0cmluZyBvZiB0ZXh0IGFsaWduIHdpdGggbGFiZWxzIGluXG4vLyBhIGhvcml6b250YWwgZm9ybSBsYXlvdXQuXG5cbi5mb3JtLWNvbnRyb2wtc3RhdGljIHtcbiAgLy8gU2l6ZSBpdCBhcHByb3ByaWF0ZWx5IG5leHQgdG8gcmVhbCBmb3JtIGNvbnRyb2xzXG4gIHBhZGRpbmctdG9wOiAoJHBhZGRpbmctYmFzZS12ZXJ0aWNhbCArIDEpO1xuICBwYWRkaW5nLWJvdHRvbTogKCRwYWRkaW5nLWJhc2UtdmVydGljYWwgKyAxKTtcbiAgLy8gUmVtb3ZlIGRlZmF1bHQgbWFyZ2luIGZyb20gYHBgXG4gIG1hcmdpbi1ib3R0b206IDA7XG4gIG1pbi1oZWlnaHQ6ICgkbGluZS1oZWlnaHQtY29tcHV0ZWQgKyAkZm9udC1zaXplLWJhc2UpO1xuXG4gICYuaW5wdXQtbGcsXG4gICYuaW5wdXQtc20ge1xuICAgIHBhZGRpbmctbGVmdDogMDtcbiAgICBwYWRkaW5nLXJpZ2h0OiAwO1xuICB9XG59XG5cblxuLy8gRm9ybSBjb250cm9sIHNpemluZ1xuLy9cbi8vIEJ1aWxkIG9uIGAuZm9ybS1jb250cm9sYCB3aXRoIG1vZGlmaWVyIGNsYXNzZXMgdG8gZGVjcmVhc2Ugb3IgaW5jcmVhc2UgdGhlXG4vLyBoZWlnaHQgYW5kIGZvbnQtc2l6ZSBvZiBmb3JtIGNvbnRyb2xzLlxuLy9cbi8vIFRoZSBgLmZvcm0tZ3JvdXAtKiBmb3JtLWNvbnRyb2xgIHZhcmlhdGlvbnMgYXJlIHNhZGx5IGR1cGxpY2F0ZWQgdG8gYXZvaWQgdGhlXG4vLyBpc3N1ZSBkb2N1bWVudGVkIGluIGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9pc3N1ZXMvMTUwNzQuXG5cbkBpbmNsdWRlIGlucHV0LXNpemUoJy5pbnB1dC1zbScsICRpbnB1dC1oZWlnaHQtc21hbGwsICRwYWRkaW5nLXNtYWxsLXZlcnRpY2FsLCAkcGFkZGluZy1zbWFsbC1ob3Jpem9udGFsLCAkZm9udC1zaXplLXNtYWxsLCAkbGluZS1oZWlnaHQtc21hbGwsICRpbnB1dC1ib3JkZXItcmFkaXVzLXNtYWxsKTtcbi5mb3JtLWdyb3VwLXNtIHtcblxuICBAaW5jbHVkZSBpbnB1dC1zaXplKCcuZm9ybS1jb250cm9sJywgJGlucHV0LWhlaWdodC1zbWFsbCwgJHBhZGRpbmctc21hbGwtdmVydGljYWwsICRwYWRkaW5nLXNtYWxsLWhvcml6b250YWwsICRmb250LXNpemUtc21hbGwsICRsaW5lLWhlaWdodC1zbWFsbCwgJGlucHV0LWJvcmRlci1yYWRpdXMtc21hbGwpO1xuXG4gIC5mb3JtLWNvbnRyb2wtc3RhdGljIHtcbiAgICBoZWlnaHQ6ICRpbnB1dC1oZWlnaHQtc21hbGw7XG4gICAgcGFkZGluZzogJHBhZGRpbmctc21hbGwtdmVydGljYWwgJHBhZGRpbmctc21hbGwtaG9yaXpvbnRhbDtcbiAgICBmb250LXNpemU6ICRmb250LXNpemUtc21hbGw7XG4gICAgbGluZS1oZWlnaHQ6ICRsaW5lLWhlaWdodC1zbWFsbDtcbiAgICBtaW4taGVpZ2h0OiAoJGxpbmUtaGVpZ2h0LWNvbXB1dGVkICsgJGZvbnQtc2l6ZS1zbWFsbCk7XG4gIH1cbn1cblxuQGluY2x1ZGUgaW5wdXQtc2l6ZSgnLmlucHV0LWxnJywgJGlucHV0LWhlaWdodC1sYXJnZSwgJHBhZGRpbmctbGFyZ2UtdmVydGljYWwsICRwYWRkaW5nLWxhcmdlLWhvcml6b250YWwsICRmb250LXNpemUtbGFyZ2UsICRsaW5lLWhlaWdodC1sYXJnZSwgJGlucHV0LWJvcmRlci1yYWRpdXMtbGFyZ2UpO1xuLmZvcm0tZ3JvdXAtbGcge1xuXG4gIEBpbmNsdWRlIGlucHV0LXNpemUoJy5mb3JtLWNvbnRyb2wnLCAkaW5wdXQtaGVpZ2h0LWxhcmdlLCAkcGFkZGluZy1sYXJnZS12ZXJ0aWNhbCwgJHBhZGRpbmctbGFyZ2UtaG9yaXpvbnRhbCwgJGZvbnQtc2l6ZS1sYXJnZSwgJGxpbmUtaGVpZ2h0LWxhcmdlLCAkaW5wdXQtYm9yZGVyLXJhZGl1cy1sYXJnZSk7XG5cbiAgLmZvcm0tY29udHJvbC1zdGF0aWMge1xuICAgIGhlaWdodDogJGlucHV0LWhlaWdodC1sYXJnZTtcbiAgICBwYWRkaW5nOiAkcGFkZGluZy1sYXJnZS12ZXJ0aWNhbCAkcGFkZGluZy1sYXJnZS1ob3Jpem9udGFsO1xuICAgIGZvbnQtc2l6ZTogJGZvbnQtc2l6ZS1sYXJnZTtcbiAgICBsaW5lLWhlaWdodDogJGxpbmUtaGVpZ2h0LWxhcmdlO1xuICAgIG1pbi1oZWlnaHQ6ICgkbGluZS1oZWlnaHQtY29tcHV0ZWQgKyAkZm9udC1zaXplLWxhcmdlKTtcbiAgfVxufVxuXG5cbi8vIEZvcm0gY29udHJvbCBmZWVkYmFjayBzdGF0ZXNcbi8vXG4vLyBBcHBseSBjb250ZXh0dWFsIGFuZCBzZW1hbnRpYyBzdGF0ZXMgdG8gaW5kaXZpZHVhbCBmb3JtIGNvbnRyb2xzLlxuXG4uaGFzLWZlZWRiYWNrIHtcbiAgLy8gRW5hYmxlIGFic29sdXRlIHBvc2l0aW9uaW5nXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcblxuICAvLyBFbnN1cmUgaWNvbnMgZG9uJ3Qgb3ZlcmxhcCB0ZXh0XG4gIC5mb3JtLWNvbnRyb2wge1xuICAgIHBhZGRpbmctcmlnaHQ6ICgkaW5wdXQtaGVpZ2h0LWJhc2UgKiAxLjI1KTtcbiAgfVxufVxuLy8gRmVlZGJhY2sgaWNvbiAocmVxdWlyZXMgLmdseXBoaWNvbiBjbGFzc2VzKVxuLmZvcm0tY29udHJvbC1mZWVkYmFjayB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgdG9wOiAwO1xuICByaWdodDogMDtcbiAgei1pbmRleDogMjsgLy8gRW5zdXJlIGljb24gaXMgYWJvdmUgaW5wdXQgZ3JvdXBzXG4gIGRpc3BsYXk6IGJsb2NrO1xuICB3aWR0aDogJGlucHV0LWhlaWdodC1iYXNlO1xuICBoZWlnaHQ6ICRpbnB1dC1oZWlnaHQtYmFzZTtcbiAgbGluZS1oZWlnaHQ6ICRpbnB1dC1oZWlnaHQtYmFzZTtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICBwb2ludGVyLWV2ZW50czogbm9uZTtcbn1cbi5pbnB1dC1sZyArIC5mb3JtLWNvbnRyb2wtZmVlZGJhY2sge1xuICB3aWR0aDogJGlucHV0LWhlaWdodC1sYXJnZTtcbiAgaGVpZ2h0OiAkaW5wdXQtaGVpZ2h0LWxhcmdlO1xuICBsaW5lLWhlaWdodDogJGlucHV0LWhlaWdodC1sYXJnZTtcbn1cbi5pbnB1dC1zbSArIC5mb3JtLWNvbnRyb2wtZmVlZGJhY2sge1xuICB3aWR0aDogJGlucHV0LWhlaWdodC1zbWFsbDtcbiAgaGVpZ2h0OiAkaW5wdXQtaGVpZ2h0LXNtYWxsO1xuICBsaW5lLWhlaWdodDogJGlucHV0LWhlaWdodC1zbWFsbDtcbn1cblxuLy8gRmVlZGJhY2sgc3RhdGVzXG4uaGFzLXN1Y2Nlc3Mge1xuICBAaW5jbHVkZSBmb3JtLWNvbnRyb2wtdmFsaWRhdGlvbigkc3RhdGUtc3VjY2Vzcy10ZXh0LCAkc3RhdGUtc3VjY2Vzcy10ZXh0LCAkc3RhdGUtc3VjY2Vzcy1iZyk7XG59XG4uaGFzLXdhcm5pbmcge1xuICBAaW5jbHVkZSBmb3JtLWNvbnRyb2wtdmFsaWRhdGlvbigkc3RhdGUtd2FybmluZy10ZXh0LCAkc3RhdGUtd2FybmluZy10ZXh0LCAkc3RhdGUtd2FybmluZy1iZyk7XG59XG4uaGFzLWVycm9yIHtcbiAgQGluY2x1ZGUgZm9ybS1jb250cm9sLXZhbGlkYXRpb24oJHN0YXRlLWRhbmdlci10ZXh0LCAkc3RhdGUtZGFuZ2VyLXRleHQsICRzdGF0ZS1kYW5nZXItYmcpO1xufVxuXG4vLyBSZXBvc2l0aW9uIGZlZWRiYWNrIGljb24gaWYgaW5wdXQgaGFzIHZpc2libGUgbGFiZWwgYWJvdmVcbi5oYXMtZmVlZGJhY2sgbGFiZWwge1xuXG4gICYgfiAuZm9ybS1jb250cm9sLWZlZWRiYWNrIHtcbiAgICAgdG9wOiAoJGxpbmUtaGVpZ2h0LWNvbXB1dGVkICsgNSk7IC8vIEhlaWdodCBvZiB0aGUgYGxhYmVsYCBhbmQgaXRzIG1hcmdpblxuICB9XG4gICYuc3Itb25seSB+IC5mb3JtLWNvbnRyb2wtZmVlZGJhY2sge1xuICAgICB0b3A6IDA7XG4gIH1cbn1cblxuXG4vLyBIZWxwIHRleHRcbi8vXG4vLyBBcHBseSB0byBhbnkgZWxlbWVudCB5b3Ugd2lzaCB0byBjcmVhdGUgbGlnaHQgdGV4dCBmb3IgcGxhY2VtZW50IGltbWVkaWF0ZWx5XG4vLyBiZWxvdyBhIGZvcm0gY29udHJvbC4gVXNlIGZvciBnZW5lcmFsIGhlbHAsIGZvcm1hdHRpbmcsIG9yIGluc3RydWN0aW9uYWwgdGV4dC5cblxuLmhlbHAtYmxvY2sge1xuICBkaXNwbGF5OiBibG9jazsgLy8gYWNjb3VudCBmb3IgYW55IGVsZW1lbnQgdXNpbmcgaGVscC1ibG9ja1xuICBtYXJnaW4tdG9wOiA1cHg7XG4gIG1hcmdpbi1ib3R0b206IDEwcHg7XG4gIGNvbG9yOiBsaWdodGVuKCR0ZXh0LWNvbG9yLCAyNSUpOyAvLyBsaWdodGVuIHRoZSB0ZXh0IHNvbWUgZm9yIGNvbnRyYXN0XG59XG5cblxuLy8gSW5saW5lIGZvcm1zXG4vL1xuLy8gTWFrZSBmb3JtcyBhcHBlYXIgaW5saW5lKC1ibG9jaykgYnkgYWRkaW5nIHRoZSBgLmZvcm0taW5saW5lYCBjbGFzcy4gSW5saW5lXG4vLyBmb3JtcyBiZWdpbiBzdGFja2VkIG9uIGV4dHJhIHNtYWxsIChtb2JpbGUpIGRldmljZXMgYW5kIHRoZW4gZ28gaW5saW5lIHdoZW5cbi8vIHZpZXdwb3J0cyByZWFjaCA8NzY4cHguXG4vL1xuLy8gUmVxdWlyZXMgd3JhcHBpbmcgaW5wdXRzIGFuZCBsYWJlbHMgd2l0aCBgLmZvcm0tZ3JvdXBgIGZvciBwcm9wZXIgZGlzcGxheSBvZlxuLy8gZGVmYXVsdCBIVE1MIGZvcm0gY29udHJvbHMgYW5kIG91ciBjdXN0b20gZm9ybSBjb250cm9scyAoZS5nLiwgaW5wdXQgZ3JvdXBzKS5cbi8vXG4vLyBIZWFkcyB1cCEgVGhpcyBpcyBtaXhpbi1lZCBpbnRvIGAubmF2YmFyLWZvcm1gIGluIG5hdmJhcnMubGVzcy5cblxuLy8gW2NvbnZlcnRlcl0gZXh0cmFjdGVkIGZyb20gYC5mb3JtLWlubGluZWAgZm9yIGxpYnNhc3MgY29tcGF0aWJpbGl0eVxuQG1peGluIGZvcm0taW5saW5lIHtcblxuICAvLyBLaWNrIGluIHRoZSBpbmxpbmVcbiAgQG1lZGlhIChtaW4td2lkdGg6ICRzY3JlZW4tc20tbWluKSB7XG4gICAgLy8gSW5saW5lLWJsb2NrIGFsbCB0aGUgdGhpbmdzIGZvciBcImlubGluZVwiXG4gICAgLmZvcm0tZ3JvdXAge1xuICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgICAgbWFyZ2luLWJvdHRvbTogMDtcbiAgICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG4gICAgfVxuXG4gICAgLy8gSW4gbmF2YmFyLWZvcm0sIGFsbG93IGZvbGtzIHRvICpub3QqIHVzZSBgLmZvcm0tZ3JvdXBgXG4gICAgLmZvcm0tY29udHJvbCB7XG4gICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgICB3aWR0aDogYXV0bzsgLy8gUHJldmVudCBsYWJlbHMgZnJvbSBzdGFja2luZyBhYm92ZSBpbnB1dHMgaW4gYC5mb3JtLWdyb3VwYFxuICAgICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbiAgICB9XG5cbiAgICAvLyBNYWtlIHN0YXRpYyBjb250cm9scyBiZWhhdmUgbGlrZSByZWd1bGFyIG9uZXNcbiAgICAuZm9ybS1jb250cm9sLXN0YXRpYyB7XG4gICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgfVxuXG4gICAgLmlucHV0LWdyb3VwIHtcbiAgICAgIGRpc3BsYXk6IGlubGluZS10YWJsZTtcbiAgICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG5cbiAgICAgIC5pbnB1dC1ncm91cC1hZGRvbixcbiAgICAgIC5pbnB1dC1ncm91cC1idG4sXG4gICAgICAuZm9ybS1jb250cm9sIHtcbiAgICAgICAgd2lkdGg6IGF1dG87XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gSW5wdXQgZ3JvdXBzIG5lZWQgdGhhdCAxMDAlIHdpZHRoIHRob3VnaFxuICAgIC5pbnB1dC1ncm91cCA+IC5mb3JtLWNvbnRyb2wge1xuICAgICAgd2lkdGg6IDEwMCU7XG4gICAgfVxuXG4gICAgLmNvbnRyb2wtbGFiZWwge1xuICAgICAgbWFyZ2luLWJvdHRvbTogMDtcbiAgICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG4gICAgfVxuXG4gICAgLy8gUmVtb3ZlIGRlZmF1bHQgbWFyZ2luIG9uIHJhZGlvcy9jaGVja2JveGVzIHRoYXQgd2VyZSB1c2VkIGZvciBzdGFja2luZywgYW5kXG4gICAgLy8gdGhlbiB1bmRvIHRoZSBmbG9hdGluZyBvZiByYWRpb3MgYW5kIGNoZWNrYm94ZXMgdG8gbWF0Y2guXG4gICAgLnJhZGlvLFxuICAgIC5jaGVja2JveCB7XG4gICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgICBtYXJnaW4tdG9wOiAwO1xuICAgICAgbWFyZ2luLWJvdHRvbTogMDtcbiAgICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG5cbiAgICAgIGxhYmVsIHtcbiAgICAgICAgcGFkZGluZy1sZWZ0OiAwO1xuICAgICAgfVxuICAgIH1cbiAgICAucmFkaW8gaW5wdXRbdHlwZT1cInJhZGlvXCJdLFxuICAgIC5jaGVja2JveCBpbnB1dFt0eXBlPVwiY2hlY2tib3hcIl0ge1xuICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICAgbWFyZ2luLWxlZnQ6IDA7XG4gICAgfVxuXG4gICAgLy8gUmUtb3ZlcnJpZGUgdGhlIGZlZWRiYWNrIGljb24uXG4gICAgLmhhcy1mZWVkYmFjayAuZm9ybS1jb250cm9sLWZlZWRiYWNrIHtcbiAgICAgIHRvcDogMDtcbiAgICB9XG4gIH1cbn1cbi8vIFtjb252ZXJ0ZXJdIGV4dHJhY3RlZCBhcyBgQG1peGluIGZvcm0taW5saW5lYCBmb3IgbGlic2FzcyBjb21wYXRpYmlsaXR5XG4uZm9ybS1pbmxpbmUge1xuICBAaW5jbHVkZSBmb3JtLWlubGluZTtcbn1cblxuXG5cbi8vIEhvcml6b250YWwgZm9ybXNcbi8vXG4vLyBIb3Jpem9udGFsIGZvcm1zIGFyZSBidWlsdCBvbiBncmlkIGNsYXNzZXMgYW5kIGFsbG93IHlvdSB0byBjcmVhdGUgZm9ybXMgd2l0aFxuLy8gbGFiZWxzIG9uIHRoZSBsZWZ0IGFuZCBpbnB1dHMgb24gdGhlIHJpZ2h0LlxuXG4uZm9ybS1ob3Jpem9udGFsIHtcblxuICAvLyBDb25zaXN0ZW50IHZlcnRpY2FsIGFsaWdubWVudCBvZiByYWRpb3MgYW5kIGNoZWNrYm94ZXNcbiAgLy9cbiAgLy8gTGFiZWxzIGFsc28gZ2V0IHNvbWUgcmVzZXQgc3R5bGVzLCBidXQgdGhhdCBpcyBzY29wZWQgdG8gYSBtZWRpYSBxdWVyeSBiZWxvdy5cbiAgLnJhZGlvLFxuICAuY2hlY2tib3gsXG4gIC5yYWRpby1pbmxpbmUsXG4gIC5jaGVja2JveC1pbmxpbmUge1xuICAgIG1hcmdpbi10b3A6IDA7XG4gICAgbWFyZ2luLWJvdHRvbTogMDtcbiAgICBwYWRkaW5nLXRvcDogKCRwYWRkaW5nLWJhc2UtdmVydGljYWwgKyAxKTsgLy8gRGVmYXVsdCBwYWRkaW5nIHBsdXMgYSBib3JkZXJcbiAgfVxuICAvLyBBY2NvdW50IGZvciBwYWRkaW5nIHdlJ3JlIGFkZGluZyB0byBlbnN1cmUgdGhlIGFsaWdubWVudCBhbmQgb2YgaGVscCB0ZXh0XG4gIC8vIGFuZCBvdGhlciBjb250ZW50IGJlbG93IGl0ZW1zXG4gIC5yYWRpbyxcbiAgLmNoZWNrYm94IHtcbiAgICBtaW4taGVpZ2h0OiAoJGxpbmUtaGVpZ2h0LWNvbXB1dGVkICsgKCRwYWRkaW5nLWJhc2UtdmVydGljYWwgKyAxKSk7XG4gIH1cblxuICAvLyBNYWtlIGZvcm0gZ3JvdXBzIGJlaGF2ZSBsaWtlIHJvd3NcbiAgLmZvcm0tZ3JvdXAge1xuICAgIEBpbmNsdWRlIG1ha2Utcm93O1xuICB9XG5cbiAgLy8gUmVzZXQgc3BhY2luZyBhbmQgcmlnaHQgYWxpZ24gbGFiZWxzLCBidXQgc2NvcGUgdG8gbWVkaWEgcXVlcmllcyBzbyB0aGF0XG4gIC8vIGxhYmVscyBvbiBuYXJyb3cgdmlld3BvcnRzIHN0YWNrIHRoZSBzYW1lIGFzIGEgZGVmYXVsdCBmb3JtIGV4YW1wbGUuXG4gIEBtZWRpYSAobWluLXdpZHRoOiAkc2NyZWVuLXNtLW1pbikge1xuICAgIC5jb250cm9sLWxhYmVsIHtcbiAgICAgIHRleHQtYWxpZ246IHJpZ2h0O1xuICAgICAgbWFyZ2luLWJvdHRvbTogMDtcbiAgICAgIHBhZGRpbmctdG9wOiAoJHBhZGRpbmctYmFzZS12ZXJ0aWNhbCArIDEpOyAvLyBEZWZhdWx0IHBhZGRpbmcgcGx1cyBhIGJvcmRlclxuICAgIH1cbiAgfVxuXG4gIC8vIFZhbGlkYXRpb24gc3RhdGVzXG4gIC8vXG4gIC8vIFJlcG9zaXRpb24gdGhlIGljb24gYmVjYXVzZSBpdCdzIG5vdyB3aXRoaW4gYSBncmlkIGNvbHVtbiBhbmQgY29sdW1ucyBoYXZlXG4gIC8vIGBwb3NpdGlvbjogcmVsYXRpdmU7YCBvbiB0aGVtLiBBbHNvIGFjY291bnRzIGZvciB0aGUgZ3JpZCBndXR0ZXIgcGFkZGluZy5cbiAgLmhhcy1mZWVkYmFjayAuZm9ybS1jb250cm9sLWZlZWRiYWNrIHtcbiAgICByaWdodDogKCRncmlkLWd1dHRlci13aWR0aCAvIDIpO1xuICB9XG5cbiAgLy8gRm9ybSBncm91cCBzaXplc1xuICAvL1xuICAvLyBRdWljayB1dGlsaXR5IGNsYXNzIGZvciBhcHBseWluZyBgLmlucHV0LWxnYCBhbmQgYC5pbnB1dC1zbWAgc3R5bGVzIHRvIHRoZVxuICAvLyBpbnB1dHMgYW5kIGxhYmVscyB3aXRoaW4gYSBgLmZvcm0tZ3JvdXBgLlxuICAuZm9ybS1ncm91cC1sZyB7XG4gICAgQG1lZGlhIChtaW4td2lkdGg6ICRzY3JlZW4tc20tbWluKSB7XG4gICAgICAuY29udHJvbC1sYWJlbCB7XG4gICAgICAgIHBhZGRpbmctdG9wOiAoKCRwYWRkaW5nLWxhcmdlLXZlcnRpY2FsICogJGxpbmUtaGVpZ2h0LWxhcmdlKSArIDEpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICAuZm9ybS1ncm91cC1zbSB7XG4gICAgQG1lZGlhIChtaW4td2lkdGg6ICRzY3JlZW4tc20tbWluKSB7XG4gICAgICAuY29udHJvbC1sYWJlbCB7XG4gICAgICAgIHBhZGRpbmctdG9wOiAoJHBhZGRpbmctc21hbGwtdmVydGljYWwgKyAxKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbiIsIi8vIEZvcm0gdmFsaWRhdGlvbiBzdGF0ZXNcbi8vXG4vLyBVc2VkIGluIGZvcm1zLmxlc3MgdG8gZ2VuZXJhdGUgdGhlIGZvcm0gdmFsaWRhdGlvbiBDU1MgZm9yIHdhcm5pbmdzLCBlcnJvcnMsXG4vLyBhbmQgc3VjY2Vzc2VzLlxuXG5AbWl4aW4gZm9ybS1jb250cm9sLXZhbGlkYXRpb24oJHRleHQtY29sb3I6ICM1NTUsICRib3JkZXItY29sb3I6ICNjY2MsICRiYWNrZ3JvdW5kLWNvbG9yOiAjZjVmNWY1KSB7XG4gIC8vIENvbG9yIHRoZSBsYWJlbCBhbmQgaGVscCB0ZXh0XG4gIC5oZWxwLWJsb2NrLFxuICAuY29udHJvbC1sYWJlbCxcbiAgLnJhZGlvLFxuICAuY2hlY2tib3gsXG4gIC5yYWRpby1pbmxpbmUsXG4gIC5jaGVja2JveC1pbmxpbmUsXG4gICYucmFkaW8gbGFiZWwsXG4gICYuY2hlY2tib3ggbGFiZWwsXG4gICYucmFkaW8taW5saW5lIGxhYmVsLFxuICAmLmNoZWNrYm94LWlubGluZSBsYWJlbCAge1xuICAgIGNvbG9yOiAkdGV4dC1jb2xvcjtcbiAgfVxuICAvLyBTZXQgdGhlIGJvcmRlciBhbmQgYm94IHNoYWRvdyBvbiBzcGVjaWZpYyBpbnB1dHMgdG8gbWF0Y2hcbiAgLmZvcm0tY29udHJvbCB7XG4gICAgYm9yZGVyLWNvbG9yOiAkYm9yZGVyLWNvbG9yO1xuICAgIEBpbmNsdWRlIGJveC1zaGFkb3coaW5zZXQgMCAxcHggMXB4IHJnYmEoMCwwLDAsLjA3NSkpOyAvLyBSZWRlY2xhcmUgc28gdHJhbnNpdGlvbnMgd29ya1xuICAgICY6Zm9jdXMge1xuICAgICAgYm9yZGVyLWNvbG9yOiBkYXJrZW4oJGJvcmRlci1jb2xvciwgMTAlKTtcbiAgICAgICRzaGFkb3c6IGluc2V0IDAgMXB4IDFweCByZ2JhKDAsMCwwLC4wNzUpLCAwIDAgNnB4IGxpZ2h0ZW4oJGJvcmRlci1jb2xvciwgMjAlKTtcbiAgICAgIEBpbmNsdWRlIGJveC1zaGFkb3coJHNoYWRvdyk7XG4gICAgfVxuICB9XG4gIC8vIFNldCB2YWxpZGF0aW9uIHN0YXRlcyBhbHNvIGZvciBhZGRvbnNcbiAgLmlucHV0LWdyb3VwLWFkZG9uIHtcbiAgICBjb2xvcjogJHRleHQtY29sb3I7XG4gICAgYm9yZGVyLWNvbG9yOiAkYm9yZGVyLWNvbG9yO1xuICAgIGJhY2tncm91bmQtY29sb3I6ICRiYWNrZ3JvdW5kLWNvbG9yO1xuICB9XG4gIC8vIE9wdGlvbmFsIGZlZWRiYWNrIGljb25cbiAgLmZvcm0tY29udHJvbC1mZWVkYmFjayB7XG4gICAgY29sb3I6ICR0ZXh0LWNvbG9yO1xuICB9XG59XG5cblxuLy8gRm9ybSBjb250cm9sIGZvY3VzIHN0YXRlXG4vL1xuLy8gR2VuZXJhdGUgYSBjdXN0b21pemVkIGZvY3VzIHN0YXRlIGFuZCBmb3IgYW55IGlucHV0IHdpdGggdGhlIHNwZWNpZmllZCBjb2xvcixcbi8vIHdoaWNoIGRlZmF1bHRzIHRvIHRoZSBgJGlucHV0LWJvcmRlci1mb2N1c2AgdmFyaWFibGUuXG4vL1xuLy8gV2UgaGlnaGx5IGVuY291cmFnZSB5b3UgdG8gbm90IGN1c3RvbWl6ZSB0aGUgZGVmYXVsdCB2YWx1ZSwgYnV0IGluc3RlYWQgdXNlXG4vLyB0aGlzIHRvIHR3ZWFrIGNvbG9ycyBvbiBhbiBhcy1uZWVkZWQgYmFzaXMuIFRoaXMgYWVzdGhldGljIGNoYW5nZSBpcyBiYXNlZCBvblxuLy8gV2ViS2l0J3MgZGVmYXVsdCBzdHlsZXMsIGJ1dCBhcHBsaWNhYmxlIHRvIGEgd2lkZXIgcmFuZ2Ugb2YgYnJvd3NlcnMuIEl0c1xuLy8gdXNhYmlsaXR5IGFuZCBhY2Nlc3NpYmlsaXR5IHNob3VsZCBiZSB0YWtlbiBpbnRvIGFjY291bnQgd2l0aCBhbnkgY2hhbmdlLlxuLy9cbi8vIEV4YW1wbGUgdXNhZ2U6IGNoYW5nZSB0aGUgZGVmYXVsdCBibHVlIGJvcmRlciBhbmQgc2hhZG93IHRvIHdoaXRlIGZvciBiZXR0ZXJcbi8vIGNvbnRyYXN0IGFnYWluc3QgYSBkYXJrIGdyYXkgYmFja2dyb3VuZC5cbkBtaXhpbiBmb3JtLWNvbnRyb2wtZm9jdXMoJGNvbG9yOiAkaW5wdXQtYm9yZGVyLWZvY3VzKSB7XG4gICRjb2xvci1yZ2JhOiByZ2JhKHJlZCgkY29sb3IpLCBncmVlbigkY29sb3IpLCBibHVlKCRjb2xvciksIC42KTtcbiAgJjpmb2N1cyB7XG4gICAgYm9yZGVyLWNvbG9yOiAkY29sb3I7XG4gICAgb3V0bGluZTogMDtcbiAgICBAaW5jbHVkZSBib3gtc2hhZG93KGluc2V0IDAgMXB4IDFweCByZ2JhKDAsMCwwLC4wNzUpLCAwIDAgOHB4ICRjb2xvci1yZ2JhKTtcbiAgfVxufVxuXG4vLyBGb3JtIGNvbnRyb2wgc2l6aW5nXG4vL1xuLy8gUmVsYXRpdmUgdGV4dCBzaXplLCBwYWRkaW5nLCBhbmQgYm9yZGVyLXJhZGlpIGNoYW5nZXMgZm9yIGZvcm0gY29udHJvbHMuIEZvclxuLy8gaG9yaXpvbnRhbCBzaXppbmcsIHdyYXAgY29udHJvbHMgaW4gdGhlIHByZWRlZmluZWQgZ3JpZCBjbGFzc2VzLiBgPHNlbGVjdD5gXG4vLyBlbGVtZW50IGdldHMgc3BlY2lhbCBsb3ZlIGJlY2F1c2UgaXQncyBzcGVjaWFsLCBhbmQgdGhhdCdzIGEgZmFjdCFcbi8vIFtjb252ZXJ0ZXJdICRwYXJlbnQgaGFja1xuQG1peGluIGlucHV0LXNpemUoJHBhcmVudCwgJGlucHV0LWhlaWdodCwgJHBhZGRpbmctdmVydGljYWwsICRwYWRkaW5nLWhvcml6b250YWwsICRmb250LXNpemUsICRsaW5lLWhlaWdodCwgJGJvcmRlci1yYWRpdXMpIHtcbiAgI3skcGFyZW50fSB7XG4gICAgaGVpZ2h0OiAkaW5wdXQtaGVpZ2h0O1xuICAgIHBhZGRpbmc6ICRwYWRkaW5nLXZlcnRpY2FsICRwYWRkaW5nLWhvcml6b250YWw7XG4gICAgZm9udC1zaXplOiAkZm9udC1zaXplO1xuICAgIGxpbmUtaGVpZ2h0OiAkbGluZS1oZWlnaHQ7XG4gICAgYm9yZGVyLXJhZGl1czogJGJvcmRlci1yYWRpdXM7XG4gIH1cblxuICBzZWxlY3QjeyRwYXJlbnR9IHtcbiAgICBoZWlnaHQ6ICRpbnB1dC1oZWlnaHQ7XG4gICAgbGluZS1oZWlnaHQ6ICRpbnB1dC1oZWlnaHQ7XG4gIH1cblxuICB0ZXh0YXJlYSN7JHBhcmVudH0sXG4gIHNlbGVjdFttdWx0aXBsZV0jeyRwYXJlbnR9IHtcbiAgICBoZWlnaHQ6IGF1dG87XG4gIH1cbn1cbiIsIi8vXG4vLyBCdXR0b25zXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5cbi8vIEJhc2Ugc3R5bGVzXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4uYnRuIHtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICBtYXJnaW4tYm90dG9tOiAwOyAvLyBGb3IgaW5wdXQuYnRuXG4gIGZvbnQtd2VpZ2h0OiAkYnRuLWZvbnQtd2VpZ2h0O1xuICBmb250LWZhbWlseTogJGZvbnQtZmFtaWx5LWVpbmE7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbiAgdG91Y2gtYWN0aW9uOiBtYW5pcHVsYXRpb247XG4gIGN1cnNvcjogcG9pbnRlcjtcbiAgYmFja2dyb3VuZC1pbWFnZTogbm9uZTsgLy8gUmVzZXQgdW51c3VhbCBGaXJlZm94LW9uLUFuZHJvaWQgZGVmYXVsdCBzdHlsZTsgc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9uZWNvbGFzL25vcm1hbGl6ZS5jc3MvaXNzdWVzLzIxNFxuICBib3JkZXI6IDFweCBzb2xpZCB0cmFuc3BhcmVudDtcbiAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgQGluY2x1ZGUgYnV0dG9uLXNpemUoJHBhZGRpbmctYmFzZS12ZXJ0aWNhbCwgJHBhZGRpbmctYmFzZS1ob3Jpem9udGFsLCAkZm9udC1zaXplLWJhc2UsICRsaW5lLWhlaWdodC1iYXNlLCAkYm9yZGVyLXJhZGl1cy1iYXNlKTtcbiAgQGluY2x1ZGUgdXNlci1zZWxlY3Qobm9uZSk7XG5cbiAgJixcbiAgJjphY3RpdmUsXG4gICYuYWN0aXZlIHtcbiAgICAmOmZvY3VzLFxuICAgICYuZm9jdXMge1xuICAgICAgQGluY2x1ZGUgdGFiLWZvY3VzO1xuICAgIH1cbiAgfVxuXG4gICY6aG92ZXIsXG4gICY6Zm9jdXMsXG4gICYuZm9jdXMge1xuICAgIGNvbG9yOiAkYnRuLWRlZmF1bHQtY29sb3I7XG4gICAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xuICB9XG5cbiAgJjphY3RpdmUsXG4gICYuYWN0aXZlIHtcbiAgICBvdXRsaW5lOiAwO1xuICAgIGJhY2tncm91bmQtaW1hZ2U6IG5vbmU7XG4gICAgQGluY2x1ZGUgYm94LXNoYWRvdyhpbnNldCAwIDNweCA1cHggcmdiYSgwLDAsMCwuMTI1KSk7XG4gIH1cblxuICAmLmRpc2FibGVkLFxuICAmW2Rpc2FibGVkXSxcbiAgZmllbGRzZXRbZGlzYWJsZWRdICYge1xuICAgIGN1cnNvcjogJGN1cnNvci1kaXNhYmxlZDtcbiAgICBwb2ludGVyLWV2ZW50czogbm9uZTsgLy8gRnV0dXJlLXByb29mIGRpc2FibGluZyBvZiBjbGlja3NcbiAgICBAaW5jbHVkZSBvcGFjaXR5KC42NSk7XG4gICAgQGluY2x1ZGUgYm94LXNoYWRvdyhub25lKTtcbiAgfVxufVxuXG5cbi8vIEFsdGVybmF0ZSBidXR0b25zXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4uYnRuLWRlZmF1bHQge1xuICBAaW5jbHVkZSBidXR0b24tdmFyaWFudCgkYnRuLWRlZmF1bHQtY29sb3IsICRidG4tZGVmYXVsdC1iZywgJGJ0bi1kZWZhdWx0LWJvcmRlcik7XG59XG4uYnRuLXByaW1hcnkge1xuICBAaW5jbHVkZSBidXR0b24tdmFyaWFudCgkYnRuLXByaW1hcnktY29sb3IsICRidG4tcHJpbWFyeS1iZywgJGJ0bi1wcmltYXJ5LWJvcmRlcik7XG59XG4vLyBTdWNjZXNzIGFwcGVhcnMgYXMgZ3JlZW5cbi5idG4tc3VjY2VzcyB7XG4gIEBpbmNsdWRlIGJ1dHRvbi12YXJpYW50KCRidG4tc3VjY2Vzcy1jb2xvciwgJGJ0bi1zdWNjZXNzLWJnLCAkYnRuLXN1Y2Nlc3MtYm9yZGVyKTtcbn1cbi8vIEluZm8gYXBwZWFycyBhcyBibHVlLWdyZWVuXG4uYnRuLWluZm8ge1xuICBAaW5jbHVkZSBidXR0b24tdmFyaWFudCgkYnRuLWluZm8tY29sb3IsICRidG4taW5mby1iZywgJGJ0bi1pbmZvLWJvcmRlcik7XG59XG4vLyBXYXJuaW5nIGFwcGVhcnMgYXMgb3JhbmdlXG4uYnRuLXdhcm5pbmcge1xuICBAaW5jbHVkZSBidXR0b24tdmFyaWFudCgkYnRuLXdhcm5pbmctY29sb3IsICRidG4td2FybmluZy1iZywgJGJ0bi13YXJuaW5nLWJvcmRlcik7XG59XG4vLyBEYW5nZXIgYW5kIGVycm9yIGFwcGVhciBhcyByZWRcbi5idG4tZGFuZ2VyIHtcbiAgQGluY2x1ZGUgYnV0dG9uLXZhcmlhbnQoJGJ0bi1kYW5nZXItY29sb3IsICRidG4tZGFuZ2VyLWJnLCAkYnRuLWRhbmdlci1ib3JkZXIpO1xufVxuXG5cbi8vIExpbmsgYnV0dG9uc1xuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4vLyBNYWtlIGEgYnV0dG9uIGxvb2sgYW5kIGJlaGF2ZSBsaWtlIGEgbGlua1xuLmJ0bi1saW5rIHtcbiAgY29sb3I6ICRsaW5rLWNvbG9yO1xuICBmb250LXdlaWdodDogbm9ybWFsO1xuICBib3JkZXItcmFkaXVzOiAwO1xuXG4gICYsXG4gICY6YWN0aXZlLFxuICAmLmFjdGl2ZSxcbiAgJltkaXNhYmxlZF0sXG4gIGZpZWxkc2V0W2Rpc2FibGVkXSAmIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcbiAgICBAaW5jbHVkZSBib3gtc2hhZG93KG5vbmUpO1xuICB9XG4gICYsXG4gICY6aG92ZXIsXG4gICY6Zm9jdXMsXG4gICY6YWN0aXZlIHtcbiAgICBib3JkZXItY29sb3I6IHRyYW5zcGFyZW50O1xuICB9XG4gICY6aG92ZXIsXG4gICY6Zm9jdXMge1xuICAgIGNvbG9yOiAkbGluay1ob3Zlci1jb2xvcjtcbiAgICB0ZXh0LWRlY29yYXRpb246ICRsaW5rLWhvdmVyLWRlY29yYXRpb247XG4gICAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7XG4gIH1cbiAgJltkaXNhYmxlZF0sXG4gIGZpZWxkc2V0W2Rpc2FibGVkXSAmIHtcbiAgICAmOmhvdmVyLFxuICAgICY6Zm9jdXMge1xuICAgICAgY29sb3I6ICRidG4tbGluay1kaXNhYmxlZC1jb2xvcjtcbiAgICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbiAgICB9XG4gIH1cbn1cblxuXG4vLyBCdXR0b24gU2l6ZXNcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi5idG4tbGcge1xuICAvLyBsaW5lLWhlaWdodDogZW5zdXJlIGV2ZW4tbnVtYmVyZWQgaGVpZ2h0IG9mIGJ1dHRvbiBuZXh0IHRvIGxhcmdlIGlucHV0XG4gIEBpbmNsdWRlIGJ1dHRvbi1zaXplKCRwYWRkaW5nLWxhcmdlLXZlcnRpY2FsLCAkcGFkZGluZy1sYXJnZS1ob3Jpem9udGFsLCAkZm9udC1zaXplLWxhcmdlLCAkbGluZS1oZWlnaHQtbGFyZ2UsICRib3JkZXItcmFkaXVzLWxhcmdlKTtcbn1cbi5idG4tc20ge1xuICAvLyBsaW5lLWhlaWdodDogZW5zdXJlIHByb3BlciBoZWlnaHQgb2YgYnV0dG9uIG5leHQgdG8gc21hbGwgaW5wdXRcbiAgQGluY2x1ZGUgYnV0dG9uLXNpemUoJHBhZGRpbmctc21hbGwtdmVydGljYWwsICRwYWRkaW5nLXNtYWxsLWhvcml6b250YWwsICRmb250LXNpemUtc21hbGwsICRsaW5lLWhlaWdodC1zbWFsbCwgJGJvcmRlci1yYWRpdXMtc21hbGwpO1xufVxuLmJ0bi14cyB7XG4gIEBpbmNsdWRlIGJ1dHRvbi1zaXplKCRwYWRkaW5nLXhzLXZlcnRpY2FsLCAkcGFkZGluZy14cy1ob3Jpem9udGFsLCAkZm9udC1zaXplLXNtYWxsLCAkbGluZS1oZWlnaHQtc21hbGwsICRib3JkZXItcmFkaXVzLXNtYWxsKTtcbn1cblxuXG4vLyBCbG9jayBidXR0b25cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi5idG4tYmxvY2sge1xuICBkaXNwbGF5OiBibG9jaztcbiAgd2lkdGg6IDEwMCU7XG59XG5cbi8vIFZlcnRpY2FsbHkgc3BhY2Ugb3V0IG11bHRpcGxlIGJsb2NrIGJ1dHRvbnNcbi5idG4tYmxvY2sgKyAuYnRuLWJsb2NrIHtcbiAgbWFyZ2luLXRvcDogNXB4O1xufVxuXG4vLyBTcGVjaWZpY2l0eSBvdmVycmlkZXNcbmlucHV0W3R5cGU9XCJzdWJtaXRcIl0sXG5pbnB1dFt0eXBlPVwicmVzZXRcIl0sXG5pbnB1dFt0eXBlPVwiYnV0dG9uXCJdIHtcbiAgJi5idG4tYmxvY2sge1xuICAgIHdpZHRoOiAxMDAlO1xuICB9XG59XG4iLCIvLyBCdXR0b24gdmFyaWFudHNcbi8vXG4vLyBFYXNpbHkgcHVtcCBvdXQgZGVmYXVsdCBzdHlsZXMsIGFzIHdlbGwgYXMgOmhvdmVyLCA6Zm9jdXMsIDphY3RpdmUsXG4vLyBhbmQgZGlzYWJsZWQgb3B0aW9ucyBmb3IgYWxsIGJ1dHRvbnNcblxuQG1peGluIGJ1dHRvbi12YXJpYW50KCRjb2xvciwgJGJhY2tncm91bmQsICRib3JkZXIpIHtcbiAgY29sb3I6ICRjb2xvcjtcbiAgYmFja2dyb3VuZC1jb2xvcjogJGJhY2tncm91bmQ7XG4gIGJvcmRlci1jb2xvcjogJGJvcmRlcjtcblxuICAmOmhvdmVyLFxuICAmOmZvY3VzLFxuICAmLmZvY3VzLFxuICAmOmFjdGl2ZSxcbiAgJi5hY3RpdmUsXG4gIC5vcGVuID4gJi5kcm9wZG93bi10b2dnbGUge1xuICAgIGNvbG9yOiAkY29sb3I7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogZGFya2VuKCRiYWNrZ3JvdW5kLCAxMCUpO1xuICAgICAgICBib3JkZXItY29sb3I6IGRhcmtlbigkYm9yZGVyLCAxMiUpO1xuICB9XG4gICY6YWN0aXZlLFxuICAmLmFjdGl2ZSxcbiAgLm9wZW4gPiAmLmRyb3Bkb3duLXRvZ2dsZSB7XG4gICAgYmFja2dyb3VuZC1pbWFnZTogbm9uZTtcbiAgfVxuICAmLmRpc2FibGVkLFxuICAmW2Rpc2FibGVkXSxcbiAgZmllbGRzZXRbZGlzYWJsZWRdICYge1xuICAgICYsXG4gICAgJjpob3ZlcixcbiAgICAmOmZvY3VzLFxuICAgICYuZm9jdXMsXG4gICAgJjphY3RpdmUsXG4gICAgJi5hY3RpdmUge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogJGJhY2tncm91bmQ7XG4gICAgICAgICAgYm9yZGVyLWNvbG9yOiAkYm9yZGVyO1xuICAgIH1cbiAgfVxuXG4gIC5iYWRnZSB7XG4gICAgY29sb3I6ICRiYWNrZ3JvdW5kO1xuICAgIGJhY2tncm91bmQtY29sb3I6ICRjb2xvcjtcbiAgfVxufVxuXG4vLyBCdXR0b24gc2l6ZXNcbkBtaXhpbiBidXR0b24tc2l6ZSgkcGFkZGluZy12ZXJ0aWNhbCwgJHBhZGRpbmctaG9yaXpvbnRhbCwgJGZvbnQtc2l6ZSwgJGxpbmUtaGVpZ2h0LCAkYm9yZGVyLXJhZGl1cykge1xuICBwYWRkaW5nOiAkcGFkZGluZy12ZXJ0aWNhbCAkcGFkZGluZy1ob3Jpem9udGFsO1xuICBmb250LXNpemU6ICRmb250LXNpemU7XG4gIGxpbmUtaGVpZ2h0OiAkbGluZS1oZWlnaHQ7XG4gIGJvcmRlci1yYWRpdXM6ICRib3JkZXItcmFkaXVzO1xufVxuIiwiLy8gT3BhY2l0eVxuXG5AbWl4aW4gb3BhY2l0eSgkb3BhY2l0eSkge1xuICBvcGFjaXR5OiAkb3BhY2l0eTtcbiAgLy8gSUU4IGZpbHRlclxuICAkb3BhY2l0eS1pZTogKCRvcGFjaXR5ICogMTAwKTtcbiAgZmlsdGVyOiBhbHBoYShvcGFjaXR5PSRvcGFjaXR5LWllKTtcbn1cbiIsIi8vXG4vLyBDb21wb25lbnQgYW5pbWF0aW9uc1xuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLy8gSGVhZHMgdXAhXG4vL1xuLy8gV2UgZG9uJ3QgdXNlIHRoZSBgLm9wYWNpdHkoKWAgbWl4aW4gaGVyZSBzaW5jZSBpdCBjYXVzZXMgYSBidWcgd2l0aCB0ZXh0XG4vLyBmaWVsZHMgaW4gSUU3LTguIFNvdXJjZTogaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL3B1bGwvMzU1Mi5cblxuLmZhZGUge1xuICBvcGFjaXR5OiAwO1xuICBAaW5jbHVkZSB0cmFuc2l0aW9uKG9wYWNpdHkgLjE1cyBsaW5lYXIpO1xuICAmLmluIHtcbiAgICBvcGFjaXR5OiAxO1xuICB9XG59XG5cbi5jb2xsYXBzZSB7XG4gIGRpc3BsYXk6IG5vbmU7XG5cbiAgJi5pbiAgICAgIHsgZGlzcGxheTogYmxvY2s7IH1cbiAgLy8gW2NvbnZlcnRlcl0gZXh0cmFjdGVkIHRyJi5pbiB0byB0ci5jb2xsYXBzZS5pblxuICAvLyBbY29udmVydGVyXSBleHRyYWN0ZWQgdGJvZHkmLmluIHRvIHRib2R5LmNvbGxhcHNlLmluXG59XG5cbnRyLmNvbGxhcHNlLmluICAgIHsgZGlzcGxheTogdGFibGUtcm93OyB9XG5cbnRib2R5LmNvbGxhcHNlLmluIHsgZGlzcGxheTogdGFibGUtcm93LWdyb3VwOyB9XG5cbi5jb2xsYXBzaW5nIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBoZWlnaHQ6IDA7XG4gIG92ZXJmbG93OiBoaWRkZW47XG4gIEBpbmNsdWRlIHRyYW5zaXRpb24tcHJvcGVydHkoaGVpZ2h0LCB2aXNpYmlsaXR5KTtcbiAgQGluY2x1ZGUgdHJhbnNpdGlvbi1kdXJhdGlvbiguMzVzKTtcbiAgQGluY2x1ZGUgdHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb24oZWFzZSk7XG59XG4iLCIvL1xuLy8gRHJvcGRvd24gbWVudXNcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cblxuLy8gRHJvcGRvd24gYXJyb3cvY2FyZXRcbi5jYXJldCB7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgd2lkdGg6IDA7XG4gIGhlaWdodDogMDtcbiAgbWFyZ2luLWxlZnQ6IDJweDtcbiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbiAgYm9yZGVyLXRvcDogICAkY2FyZXQtd2lkdGgtYmFzZSBkYXNoZWQ7XG4gIGJvcmRlci1yaWdodDogJGNhcmV0LXdpZHRoLWJhc2Ugc29saWQgdHJhbnNwYXJlbnQ7XG4gIGJvcmRlci1sZWZ0OiAgJGNhcmV0LXdpZHRoLWJhc2Ugc29saWQgdHJhbnNwYXJlbnQ7XG59XG5cbi8vIFRoZSBkcm9wZG93biB3cmFwcGVyIChkaXYpXG4uZHJvcHVwLFxuLmRyb3Bkb3duIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xufVxuXG4vLyBQcmV2ZW50IHRoZSBmb2N1cyBvbiB0aGUgZHJvcGRvd24gdG9nZ2xlIHdoZW4gY2xvc2luZyBkcm9wZG93bnNcbi5kcm9wZG93bi10b2dnbGU6Zm9jdXMge1xuICBvdXRsaW5lOiAwO1xufVxuXG4vLyBUaGUgZHJvcGRvd24gbWVudSAodWwpXG4uZHJvcGRvd24tbWVudSB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgdG9wOiAxMDAlO1xuICBsZWZ0OiAwO1xuICB6LWluZGV4OiAkemluZGV4LWRyb3Bkb3duO1xuICBkaXNwbGF5OiBub25lOyAvLyBub25lIGJ5IGRlZmF1bHQsIGJ1dCBibG9jayBvbiBcIm9wZW5cIiBvZiB0aGUgbWVudVxuICBmbG9hdDogbGVmdDtcbiAgbWluLXdpZHRoOiAxNjBweDtcbiAgcGFkZGluZzogNXB4IDA7XG4gIG1hcmdpbjogMnB4IDAgMDsgLy8gb3ZlcnJpZGUgZGVmYXVsdCB1bFxuICBsaXN0LXN0eWxlOiBub25lO1xuICBmb250LXNpemU6ICRmb250LXNpemUtYmFzZTtcbiAgdGV4dC1hbGlnbjogbGVmdDsgLy8gRW5zdXJlcyBwcm9wZXIgYWxpZ25tZW50IGlmIHBhcmVudCBoYXMgaXQgY2hhbmdlZCAoZS5nLiwgbW9kYWwgZm9vdGVyKVxuICBiYWNrZ3JvdW5kLWNvbG9yOiAkZHJvcGRvd24tYmc7XG4gIGJvcmRlcjogMXB4IHNvbGlkICRkcm9wZG93bi1mYWxsYmFjay1ib3JkZXI7IC8vIElFOCBmYWxsYmFja1xuICBib3JkZXI6IDFweCBzb2xpZCAkZHJvcGRvd24tYm9yZGVyO1xuICBib3JkZXItcmFkaXVzOiAkYm9yZGVyLXJhZGl1cy1iYXNlO1xuICBAaW5jbHVkZSBib3gtc2hhZG93KDAgNnB4IDEycHggcmdiYSgwLDAsMCwuMTc1KSk7XG4gIGJhY2tncm91bmQtY2xpcDogcGFkZGluZy1ib3g7XG5cbiAgLy8gQWxpZ25zIHRoZSBkcm9wZG93biBtZW51IHRvIHJpZ2h0XG4gIC8vXG4gIC8vIERlcHJlY2F0ZWQgYXMgb2YgMy4xLjAgaW4gZmF2b3Igb2YgYC5kcm9wZG93bi1tZW51LVtkaXJdYFxuICAmLnB1bGwtcmlnaHQge1xuICAgIHJpZ2h0OiAwO1xuICAgIGxlZnQ6IGF1dG87XG4gIH1cblxuICAvLyBEaXZpZGVycyAoYmFzaWNhbGx5IGFuIGhyKSB3aXRoaW4gdGhlIGRyb3Bkb3duXG4gIC5kaXZpZGVyIHtcbiAgICBAaW5jbHVkZSBuYXYtZGl2aWRlcigkZHJvcGRvd24tZGl2aWRlci1iZyk7XG4gIH1cblxuICAvLyBMaW5rcyB3aXRoaW4gdGhlIGRyb3Bkb3duIG1lbnVcbiAgPiBsaSA+IGEge1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIHBhZGRpbmc6IDNweCAyMHB4O1xuICAgIGNsZWFyOiBib3RoO1xuICAgIGZvbnQtd2VpZ2h0OiBub3JtYWw7XG4gICAgbGluZS1oZWlnaHQ6ICRsaW5lLWhlaWdodC1iYXNlO1xuICAgIGNvbG9yOiAkZHJvcGRvd24tbGluay1jb2xvcjtcbiAgICB3aGl0ZS1zcGFjZTogbm93cmFwOyAvLyBwcmV2ZW50IGxpbmtzIGZyb20gcmFuZG9tbHkgYnJlYWtpbmcgb250byBuZXcgbGluZXNcbiAgfVxufVxuXG4vLyBIb3Zlci9Gb2N1cyBzdGF0ZVxuLmRyb3Bkb3duLW1lbnUgPiBsaSA+IGEge1xuICAmOmhvdmVyLFxuICAmOmZvY3VzIHtcbiAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG4gICAgY29sb3I6ICRkcm9wZG93bi1saW5rLWhvdmVyLWNvbG9yO1xuICAgIGJhY2tncm91bmQtY29sb3I6ICRkcm9wZG93bi1saW5rLWhvdmVyLWJnO1xuICB9XG59XG5cbi8vIEFjdGl2ZSBzdGF0ZVxuLmRyb3Bkb3duLW1lbnUgPiAuYWN0aXZlID4gYSB7XG4gICYsXG4gICY6aG92ZXIsXG4gICY6Zm9jdXMge1xuICAgIGNvbG9yOiAkZHJvcGRvd24tbGluay1hY3RpdmUtY29sb3I7XG4gICAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xuICAgIG91dGxpbmU6IDA7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogJGRyb3Bkb3duLWxpbmstYWN0aXZlLWJnO1xuICB9XG59XG5cbi8vIERpc2FibGVkIHN0YXRlXG4vL1xuLy8gR3JheSBvdXQgdGV4dCBhbmQgZW5zdXJlIHRoZSBob3Zlci9mb2N1cyBzdGF0ZSByZW1haW5zIGdyYXlcblxuLmRyb3Bkb3duLW1lbnUgPiAuZGlzYWJsZWQgPiBhIHtcbiAgJixcbiAgJjpob3ZlcixcbiAgJjpmb2N1cyB7XG4gICAgY29sb3I6ICRkcm9wZG93bi1saW5rLWRpc2FibGVkLWNvbG9yO1xuICB9XG5cbiAgLy8gTnVrZSBob3Zlci9mb2N1cyBlZmZlY3RzXG4gICY6aG92ZXIsXG4gICY6Zm9jdXMge1xuICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcbiAgICBiYWNrZ3JvdW5kLWltYWdlOiBub25lOyAvLyBSZW1vdmUgQ1NTIGdyYWRpZW50XG4gICAgQGluY2x1ZGUgcmVzZXQtZmlsdGVyO1xuICAgIGN1cnNvcjogJGN1cnNvci1kaXNhYmxlZDtcbiAgfVxufVxuXG4vLyBPcGVuIHN0YXRlIGZvciB0aGUgZHJvcGRvd25cbi5vcGVuIHtcbiAgLy8gU2hvdyB0aGUgbWVudVxuICA+IC5kcm9wZG93bi1tZW51IHtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgfVxuXG4gIC8vIFJlbW92ZSB0aGUgb3V0bGluZSB3aGVuIDpmb2N1cyBpcyB0cmlnZ2VyZWRcbiAgPiBhIHtcbiAgICBvdXRsaW5lOiAwO1xuICB9XG59XG5cbi8vIE1lbnUgcG9zaXRpb25pbmdcbi8vXG4vLyBBZGQgZXh0cmEgY2xhc3MgdG8gYC5kcm9wZG93bi1tZW51YCB0byBmbGlwIHRoZSBhbGlnbm1lbnQgb2YgdGhlIGRyb3Bkb3duXG4vLyBtZW51IHdpdGggdGhlIHBhcmVudC5cbi5kcm9wZG93bi1tZW51LXJpZ2h0IHtcbiAgbGVmdDogYXV0bzsgLy8gUmVzZXQgdGhlIGRlZmF1bHQgZnJvbSBgLmRyb3Bkb3duLW1lbnVgXG4gIHJpZ2h0OiAwO1xufVxuLy8gV2l0aCB2Mywgd2UgZW5hYmxlZCBhdXRvLWZsaXBwaW5nIGlmIHlvdSBoYXZlIGEgZHJvcGRvd24gd2l0aGluIGEgcmlnaHRcbi8vIGFsaWduZWQgbmF2IGNvbXBvbmVudC4gVG8gZW5hYmxlIHRoZSB1bmRvaW5nIG9mIHRoYXQsIHdlIHByb3ZpZGUgYW4gb3ZlcnJpZGVcbi8vIHRvIHJlc3RvcmUgdGhlIGRlZmF1bHQgZHJvcGRvd24gbWVudSBhbGlnbm1lbnQuXG4vL1xuLy8gVGhpcyBpcyBvbmx5IGZvciBsZWZ0LWFsaWduaW5nIGEgZHJvcGRvd24gbWVudSB3aXRoaW4gYSBgLm5hdmJhci1yaWdodGAgb3Jcbi8vIGAucHVsbC1yaWdodGAgbmF2IGNvbXBvbmVudC5cbi5kcm9wZG93bi1tZW51LWxlZnQge1xuICBsZWZ0OiAwO1xuICByaWdodDogYXV0bztcbn1cbi8vY2VudGVyZWQgZHJvcGRvd24gbWVudVxuLmRyb3Bkb3duLW1lbnUtY2VudGVyIHtcbiAgbGVmdDogNTAlO1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTUwJSk7XG59XG5cbi8vIERyb3Bkb3duIHNlY3Rpb24gaGVhZGVyc1xuLmRyb3Bkb3duLWhlYWRlciB7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICBwYWRkaW5nOiAzcHggMjBweDtcbiAgZm9udC1zaXplOiAkZm9udC1zaXplLXNtYWxsO1xuICBsaW5lLWhlaWdodDogJGxpbmUtaGVpZ2h0LWJhc2U7XG4gIGNvbG9yOiAkZHJvcGRvd24taGVhZGVyLWNvbG9yO1xuICB3aGl0ZS1zcGFjZTogbm93cmFwOyAvLyBhcyB3aXRoID4gbGkgPiBhXG59XG5cbi8vIEJhY2tkcm9wIHRvIGNhdGNoIGJvZHkgY2xpY2tzIG9uIG1vYmlsZSwgZXRjLlxuLmRyb3Bkb3duLWJhY2tkcm9wIHtcbiAgcG9zaXRpb246IGZpeGVkO1xuICBsZWZ0OiAwO1xuICByaWdodDogMDtcbiAgYm90dG9tOiAwO1xuICB0b3A6IDA7XG4gIHotaW5kZXg6ICgkemluZGV4LWRyb3Bkb3duIC0gMTApO1xufVxuXG4vLyBSaWdodCBhbGlnbmVkIGRyb3Bkb3duc1xuLnB1bGwtcmlnaHQgPiAuZHJvcGRvd24tbWVudSB7XG4gIHJpZ2h0OiAwO1xuICBsZWZ0OiBhdXRvO1xufVxuXG4vLyBBbGxvdyBmb3IgZHJvcGRvd25zIHRvIGdvIGJvdHRvbSB1cCAoYWthLCBkcm9wdXAtbWVudSlcbi8vXG4vLyBKdXN0IGFkZCAuZHJvcHVwIGFmdGVyIHRoZSBzdGFuZGFyZCAuZHJvcGRvd24gY2xhc3MgYW5kIHlvdSdyZSBzZXQsIGJyby5cbi8vIFRPRE86IGFic3RyYWN0IHRoaXMgc28gdGhhdCB0aGUgbmF2YmFyIGZpeGVkIHN0eWxlcyBhcmUgbm90IHBsYWNlZCBoZXJlP1xuXG4uZHJvcHVwLFxuLm5hdmJhci1maXhlZC1ib3R0b20gLmRyb3Bkb3duIHtcbiAgLy8gUmV2ZXJzZSB0aGUgY2FyZXRcbiAgLmNhcmV0IHtcbiAgICBib3JkZXItdG9wOiAwO1xuICAgIGJvcmRlci1ib3R0b206ICRjYXJldC13aWR0aC1iYXNlIHNvbGlkO1xuICAgIGNvbnRlbnQ6IFwiXCI7XG4gIH1cbiAgLy8gRGlmZmVyZW50IHBvc2l0aW9uaW5nIGZvciBib3R0b20gdXAgbWVudVxuICAuZHJvcGRvd24tbWVudSB7XG4gICAgdG9wOiBhdXRvO1xuICAgIGJvdHRvbTogMTAwJTtcbiAgICBtYXJnaW4tYm90dG9tOiAycHg7XG4gIH1cbn1cblxuXG4vLyBDb21wb25lbnQgYWxpZ25tZW50XG4vL1xuLy8gUmVpdGVyYXRlIHBlciBuYXZiYXIubGVzcyBhbmQgdGhlIG1vZGlmaWVkIGNvbXBvbmVudCBhbGlnbm1lbnQgdGhlcmUuXG5cbkBtZWRpYSAobWluLXdpZHRoOiAkZ3JpZC1mbG9hdC1icmVha3BvaW50KSB7XG4gIC5uYXZiYXItcmlnaHQge1xuICAgIC5kcm9wZG93bi1tZW51IHtcbiAgICAgIHJpZ2h0OiAwOyBsZWZ0OiBhdXRvO1xuICAgIH1cbiAgICAvLyBOZWNlc3NhcnkgZm9yIG92ZXJyaWRlcyBvZiB0aGUgZGVmYXVsdCByaWdodCBhbGlnbmVkIG1lbnUuXG4gICAgLy8gV2lsbCByZW1vdmUgY29tZSB2NCBpbiBhbGwgbGlrZWxpaG9vZC5cbiAgICAuZHJvcGRvd24tbWVudS1sZWZ0IHtcbiAgICAgIGxlZnQ6IDA7IHJpZ2h0OiBhdXRvO1xuICAgIH1cbiAgfVxufVxuIiwiLy8gSG9yaXpvbnRhbCBkaXZpZGVyc1xuLy9cbi8vIERpdmlkZXJzIChiYXNpY2FsbHkgYW4gaHIpIHdpdGhpbiBkcm9wZG93bnMgYW5kIG5hdiBsaXN0c1xuXG5AbWl4aW4gbmF2LWRpdmlkZXIoJGNvbG9yOiAjZTVlNWU1KSB7XG4gIGhlaWdodDogMXB4O1xuICBtYXJnaW46ICgoJGxpbmUtaGVpZ2h0LWNvbXB1dGVkIC8gMikgLSAxKSAwO1xuICBvdmVyZmxvdzogaGlkZGVuO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAkY29sb3I7XG59XG4iLCIvLyBSZXNldCBmaWx0ZXJzIGZvciBJRVxuLy9cbi8vIFdoZW4geW91IG5lZWQgdG8gcmVtb3ZlIGEgZ3JhZGllbnQgYmFja2dyb3VuZCwgZG8gbm90IGZvcmdldCB0byB1c2UgdGhpcyB0byByZXNldFxuLy8gdGhlIElFIGZpbHRlciBmb3IgSUU5IGFuZCBiZWxvdy5cblxuQG1peGluIHJlc2V0LWZpbHRlcigpIHtcbiAgZmlsdGVyOiBwcm9naWQ6RFhJbWFnZVRyYW5zZm9ybS5NaWNyb3NvZnQuZ3JhZGllbnQoZW5hYmxlZCA9IGZhbHNlKTtcbn1cbiIsIi8vXG4vLyBCdXR0b24gZ3JvdXBzXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4vLyBNYWtlIHRoZSBkaXYgYmVoYXZlIGxpa2UgYSBidXR0b25cbi5idG4tZ3JvdXAsXG4uYnRuLWdyb3VwLXZlcnRpY2FsIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7IC8vIG1hdGNoIC5idG4gYWxpZ25tZW50IGdpdmVuIGZvbnQtc2l6ZSBoYWNrIGFib3ZlXG4gID4gLmJ0biB7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIGZsb2F0OiBsZWZ0O1xuICAgIC8vIEJyaW5nIHRoZSBcImFjdGl2ZVwiIGJ1dHRvbiB0byB0aGUgZnJvbnRcbiAgICAmOmhvdmVyLFxuICAgICY6Zm9jdXMsXG4gICAgJjphY3RpdmUsXG4gICAgJi5hY3RpdmUge1xuICAgICAgei1pbmRleDogMjtcbiAgICB9XG4gIH1cbn1cblxuLy8gUHJldmVudCBkb3VibGUgYm9yZGVycyB3aGVuIGJ1dHRvbnMgYXJlIG5leHQgdG8gZWFjaCBvdGhlclxuLmJ0bi1ncm91cCB7XG4gIC5idG4gKyAuYnRuLFxuICAuYnRuICsgLmJ0bi1ncm91cCxcbiAgLmJ0bi1ncm91cCArIC5idG4sXG4gIC5idG4tZ3JvdXAgKyAuYnRuLWdyb3VwIHtcbiAgICBtYXJnaW4tbGVmdDogLTFweDtcbiAgfVxufVxuXG4vLyBPcHRpb25hbDogR3JvdXAgbXVsdGlwbGUgYnV0dG9uIGdyb3VwcyB0b2dldGhlciBmb3IgYSB0b29sYmFyXG4uYnRuLXRvb2xiYXIge1xuICBtYXJnaW4tbGVmdDogLTVweDsgLy8gT2Zmc2V0IHRoZSBmaXJzdCBjaGlsZCdzIG1hcmdpblxuICBAaW5jbHVkZSBjbGVhcmZpeDtcblxuICAuYnRuLWdyb3VwLFxuICAuaW5wdXQtZ3JvdXAge1xuICAgIGZsb2F0OiBsZWZ0O1xuICB9XG4gID4gLmJ0bixcbiAgPiAuYnRuLWdyb3VwLFxuICA+IC5pbnB1dC1ncm91cCB7XG4gICAgbWFyZ2luLWxlZnQ6IDVweDtcbiAgfVxufVxuXG4uYnRuLWdyb3VwID4gLmJ0bjpub3QoOmZpcnN0LWNoaWxkKTpub3QoOmxhc3QtY2hpbGQpOm5vdCguZHJvcGRvd24tdG9nZ2xlKSB7XG4gIGJvcmRlci1yYWRpdXM6IDA7XG59XG5cbi8vIFNldCBjb3JuZXJzIGluZGl2aWR1YWwgYmVjYXVzZSBzb21ldGltZXMgYSBzaW5nbGUgYnV0dG9uIGNhbiBiZSBpbiBhIC5idG4tZ3JvdXAgYW5kIHdlIG5lZWQgOmZpcnN0LWNoaWxkIGFuZCA6bGFzdC1jaGlsZCB0byBib3RoIG1hdGNoXG4uYnRuLWdyb3VwID4gLmJ0bjpmaXJzdC1jaGlsZCB7XG4gIG1hcmdpbi1sZWZ0OiAwO1xuICAmOm5vdCg6bGFzdC1jaGlsZCk6bm90KC5kcm9wZG93bi10b2dnbGUpIHtcbiAgICBAaW5jbHVkZSBib3JkZXItcmlnaHQtcmFkaXVzKDApO1xuICB9XG59XG4vLyBOZWVkIC5kcm9wZG93bi10b2dnbGUgc2luY2UgOmxhc3QtY2hpbGQgZG9lc24ndCBhcHBseSBnaXZlbiBhIC5kcm9wZG93bi1tZW51IGltbWVkaWF0ZWx5IGFmdGVyIGl0XG4uYnRuLWdyb3VwID4gLmJ0bjpsYXN0LWNoaWxkOm5vdCg6Zmlyc3QtY2hpbGQpLFxuLmJ0bi1ncm91cCA+IC5kcm9wZG93bi10b2dnbGU6bm90KDpmaXJzdC1jaGlsZCkge1xuICBAaW5jbHVkZSBib3JkZXItbGVmdC1yYWRpdXMoMCk7XG59XG5cbi8vIEN1c3RvbSBlZGl0cyBmb3IgaW5jbHVkaW5nIGJ0bi1ncm91cHMgd2l0aGluIGJ0bi1ncm91cHMgKHVzZWZ1bCBmb3IgaW5jbHVkaW5nIGRyb3Bkb3duIGJ1dHRvbnMgd2l0aGluIGEgYnRuLWdyb3VwKVxuLmJ0bi1ncm91cCA+IC5idG4tZ3JvdXAge1xuICBmbG9hdDogbGVmdDtcbn1cbi5idG4tZ3JvdXAgPiAuYnRuLWdyb3VwOm5vdCg6Zmlyc3QtY2hpbGQpOm5vdCg6bGFzdC1jaGlsZCkgPiAuYnRuIHtcbiAgYm9yZGVyLXJhZGl1czogMDtcbn1cbi5idG4tZ3JvdXAgPiAuYnRuLWdyb3VwOmZpcnN0LWNoaWxkOm5vdCg6bGFzdC1jaGlsZCkge1xuICA+IC5idG46bGFzdC1jaGlsZCxcbiAgPiAuZHJvcGRvd24tdG9nZ2xlIHtcbiAgICBAaW5jbHVkZSBib3JkZXItcmlnaHQtcmFkaXVzKDApO1xuICB9XG59XG4uYnRuLWdyb3VwID4gLmJ0bi1ncm91cDpsYXN0LWNoaWxkOm5vdCg6Zmlyc3QtY2hpbGQpID4gLmJ0bjpmaXJzdC1jaGlsZCB7XG4gIEBpbmNsdWRlIGJvcmRlci1sZWZ0LXJhZGl1cygwKTtcbn1cblxuLy8gT24gYWN0aXZlIGFuZCBvcGVuLCBkb24ndCBzaG93IG91dGxpbmVcbi5idG4tZ3JvdXAgLmRyb3Bkb3duLXRvZ2dsZTphY3RpdmUsXG4uYnRuLWdyb3VwLm9wZW4gLmRyb3Bkb3duLXRvZ2dsZSB7XG4gIG91dGxpbmU6IDA7XG59XG5cblxuLy8gU2l6aW5nXG4vL1xuLy8gUmVtaXggdGhlIGRlZmF1bHQgYnV0dG9uIHNpemluZyBjbGFzc2VzIGludG8gbmV3IG9uZXMgZm9yIGVhc2llciBtYW5pcHVsYXRpb24uXG5cbi5idG4tZ3JvdXAteHMgPiAuYnRuIHsgQGV4dGVuZCAuYnRuLXhzOyB9XG4uYnRuLWdyb3VwLXNtID4gLmJ0biB7IEBleHRlbmQgLmJ0bi1zbTsgfVxuLmJ0bi1ncm91cC1sZyA+IC5idG4geyBAZXh0ZW5kIC5idG4tbGc7IH1cblxuXG4vLyBTcGxpdCBidXR0b24gZHJvcGRvd25zXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi8vIEdpdmUgdGhlIGxpbmUgYmV0d2VlbiBidXR0b25zIHNvbWUgZGVwdGhcbi5idG4tZ3JvdXAgPiAuYnRuICsgLmRyb3Bkb3duLXRvZ2dsZSB7XG4gIHBhZGRpbmctbGVmdDogOHB4O1xuICBwYWRkaW5nLXJpZ2h0OiA4cHg7XG59XG4uYnRuLWdyb3VwID4gLmJ0bi1sZyArIC5kcm9wZG93bi10b2dnbGUge1xuICBwYWRkaW5nLWxlZnQ6IDEycHg7XG4gIHBhZGRpbmctcmlnaHQ6IDEycHg7XG59XG5cbi8vIFRoZSBjbGlja2FibGUgYnV0dG9uIGZvciB0b2dnbGluZyB0aGUgbWVudVxuLy8gUmVtb3ZlIHRoZSBncmFkaWVudCBhbmQgc2V0IHRoZSBzYW1lIGluc2V0IHNoYWRvdyBhcyB0aGUgOmFjdGl2ZSBzdGF0ZVxuLmJ0bi1ncm91cC5vcGVuIC5kcm9wZG93bi10b2dnbGUge1xuICBAaW5jbHVkZSBib3gtc2hhZG93KGluc2V0IDAgM3B4IDVweCByZ2JhKDAsMCwwLC4xMjUpKTtcblxuICAvLyBTaG93IG5vIHNoYWRvdyBmb3IgYC5idG4tbGlua2Agc2luY2UgaXQgaGFzIG5vIG90aGVyIGJ1dHRvbiBzdHlsZXMuXG4gICYuYnRuLWxpbmsge1xuICAgIEBpbmNsdWRlIGJveC1zaGFkb3cobm9uZSk7XG4gIH1cbn1cblxuXG4vLyBSZXBvc2l0aW9uIHRoZSBjYXJldFxuLmJ0biAuY2FyZXQge1xuICBtYXJnaW4tbGVmdDogMDtcbn1cbi8vIENhcmV0cyBpbiBvdGhlciBidXR0b24gc2l6ZXNcbi5idG4tbGcgLmNhcmV0IHtcbiAgYm9yZGVyLXdpZHRoOiAkY2FyZXQtd2lkdGgtbGFyZ2UgJGNhcmV0LXdpZHRoLWxhcmdlIDA7XG4gIGJvcmRlci1ib3R0b20td2lkdGg6IDA7XG59XG4vLyBVcHNpZGUgZG93biBjYXJldHMgZm9yIC5kcm9wdXBcbi5kcm9wdXAgLmJ0bi1sZyAuY2FyZXQge1xuICBib3JkZXItd2lkdGg6IDAgJGNhcmV0LXdpZHRoLWxhcmdlICRjYXJldC13aWR0aC1sYXJnZTtcbn1cblxuXG4vLyBWZXJ0aWNhbCBidXR0b24gZ3JvdXBzXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi5idG4tZ3JvdXAtdmVydGljYWwge1xuICA+IC5idG4sXG4gID4gLmJ0bi1ncm91cCxcbiAgPiAuYnRuLWdyb3VwID4gLmJ0biB7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgZmxvYXQ6IG5vbmU7XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgbWF4LXdpZHRoOiAxMDAlO1xuICB9XG5cbiAgLy8gQ2xlYXIgZmxvYXRzIHNvIGRyb3Bkb3duIG1lbnVzIGNhbiBiZSBwcm9wZXJseSBwbGFjZWRcbiAgPiAuYnRuLWdyb3VwIHtcbiAgICBAaW5jbHVkZSBjbGVhcmZpeDtcbiAgICA+IC5idG4ge1xuICAgICAgZmxvYXQ6IG5vbmU7XG4gICAgfVxuICB9XG5cbiAgPiAuYnRuICsgLmJ0bixcbiAgPiAuYnRuICsgLmJ0bi1ncm91cCxcbiAgPiAuYnRuLWdyb3VwICsgLmJ0bixcbiAgPiAuYnRuLWdyb3VwICsgLmJ0bi1ncm91cCB7XG4gICAgbWFyZ2luLXRvcDogLTFweDtcbiAgICBtYXJnaW4tbGVmdDogMDtcbiAgfVxufVxuXG4uYnRuLWdyb3VwLXZlcnRpY2FsID4gLmJ0biB7XG4gICY6bm90KDpmaXJzdC1jaGlsZCk6bm90KDpsYXN0LWNoaWxkKSB7XG4gICAgYm9yZGVyLXJhZGl1czogMDtcbiAgfVxuICAmOmZpcnN0LWNoaWxkOm5vdCg6bGFzdC1jaGlsZCkge1xuICAgIGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiAkYm9yZGVyLXJhZGl1cy1iYXNlO1xuICAgIEBpbmNsdWRlIGJvcmRlci1ib3R0b20tcmFkaXVzKDApO1xuICB9XG4gICY6bGFzdC1jaGlsZDpub3QoOmZpcnN0LWNoaWxkKSB7XG4gICAgYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czogJGJvcmRlci1yYWRpdXMtYmFzZTtcbiAgICBAaW5jbHVkZSBib3JkZXItdG9wLXJhZGl1cygwKTtcbiAgfVxufVxuLmJ0bi1ncm91cC12ZXJ0aWNhbCA+IC5idG4tZ3JvdXA6bm90KDpmaXJzdC1jaGlsZCk6bm90KDpsYXN0LWNoaWxkKSA+IC5idG4ge1xuICBib3JkZXItcmFkaXVzOiAwO1xufVxuLmJ0bi1ncm91cC12ZXJ0aWNhbCA+IC5idG4tZ3JvdXA6Zmlyc3QtY2hpbGQ6bm90KDpsYXN0LWNoaWxkKSB7XG4gID4gLmJ0bjpsYXN0LWNoaWxkLFxuICA+IC5kcm9wZG93bi10b2dnbGUge1xuICAgIEBpbmNsdWRlIGJvcmRlci1ib3R0b20tcmFkaXVzKDApO1xuICB9XG59XG4uYnRuLWdyb3VwLXZlcnRpY2FsID4gLmJ0bi1ncm91cDpsYXN0LWNoaWxkOm5vdCg6Zmlyc3QtY2hpbGQpID4gLmJ0bjpmaXJzdC1jaGlsZCB7XG4gIEBpbmNsdWRlIGJvcmRlci10b3AtcmFkaXVzKDApO1xufVxuXG5cbi8vIEp1c3RpZmllZCBidXR0b24gZ3JvdXBzXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi5idG4tZ3JvdXAtanVzdGlmaWVkIHtcbiAgZGlzcGxheTogdGFibGU7XG4gIHdpZHRoOiAxMDAlO1xuICB0YWJsZS1sYXlvdXQ6IGZpeGVkO1xuICBib3JkZXItY29sbGFwc2U6IHNlcGFyYXRlO1xuICA+IC5idG4sXG4gID4gLmJ0bi1ncm91cCB7XG4gICAgZmxvYXQ6IG5vbmU7XG4gICAgZGlzcGxheTogdGFibGUtY2VsbDtcbiAgICB3aWR0aDogMSU7XG4gIH1cbiAgPiAuYnRuLWdyb3VwIC5idG4ge1xuICAgIHdpZHRoOiAxMDAlO1xuICB9XG5cbiAgPiAuYnRuLWdyb3VwIC5kcm9wZG93bi1tZW51IHtcbiAgICBsZWZ0OiBhdXRvO1xuICB9XG59XG5cblxuLy8gQ2hlY2tib3ggYW5kIHJhZGlvIG9wdGlvbnNcbi8vXG4vLyBJbiBvcmRlciB0byBzdXBwb3J0IHRoZSBicm93c2VyJ3MgZm9ybSB2YWxpZGF0aW9uIGZlZWRiYWNrLCBwb3dlcmVkIGJ5IHRoZVxuLy8gYHJlcXVpcmVkYCBhdHRyaWJ1dGUsIHdlIGhhdmUgdG8gXCJoaWRlXCIgdGhlIGlucHV0cyB2aWEgYGNsaXBgLiBXZSBjYW5ub3QgdXNlXG4vLyBgZGlzcGxheTogbm9uZTtgIG9yIGB2aXNpYmlsaXR5OiBoaWRkZW47YCBhcyB0aGF0IGFsc28gaGlkZXMgdGhlIHBvcG92ZXIuXG4vLyBTaW1wbHkgdmlzdWFsbHkgaGlkaW5nIHRoZSBpbnB1dHMgdmlhIGBvcGFjaXR5YCB3b3VsZCBsZWF2ZSB0aGVtIGNsaWNrYWJsZSBpblxuLy8gY2VydGFpbiBjYXNlcyB3aGljaCBpcyBwcmV2ZW50ZWQgYnkgdXNpbmcgYGNsaXBgIGFuZCBgcG9pbnRlci1ldmVudHNgLlxuLy8gVGhpcyB3YXksIHdlIGVuc3VyZSBhIERPTSBlbGVtZW50IGlzIHZpc2libGUgdG8gcG9zaXRpb24gdGhlIHBvcG92ZXIgZnJvbS5cbi8vXG4vLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL3B1bGwvMTI3OTQgYW5kXG4vLyBodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvcHVsbC8xNDU1OSBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cblxuW2RhdGEtdG9nZ2xlPVwiYnV0dG9uc1wiXSB7XG4gID4gLmJ0bixcbiAgPiAuYnRuLWdyb3VwID4gLmJ0biB7XG4gICAgaW5wdXRbdHlwZT1cInJhZGlvXCJdLFxuICAgIGlucHV0W3R5cGU9XCJjaGVja2JveFwiXSB7XG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICBjbGlwOiByZWN0KDAsMCwwLDApO1xuICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG4gICAgfVxuICB9XG59XG4iLCIvLyBTaW5nbGUgc2lkZSBib3JkZXItcmFkaXVzXG5cbkBtaXhpbiBib3JkZXItdG9wLXJhZGl1cygkcmFkaXVzKSB7XG4gIGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiAkcmFkaXVzO1xuICAgYm9yZGVyLXRvcC1sZWZ0LXJhZGl1czogJHJhZGl1cztcbn1cbkBtaXhpbiBib3JkZXItcmlnaHQtcmFkaXVzKCRyYWRpdXMpIHtcbiAgYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6ICRyYWRpdXM7XG4gICAgIGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiAkcmFkaXVzO1xufVxuQG1peGluIGJvcmRlci1ib3R0b20tcmFkaXVzKCRyYWRpdXMpIHtcbiAgYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6ICRyYWRpdXM7XG4gICBib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOiAkcmFkaXVzO1xufVxuQG1peGluIGJvcmRlci1sZWZ0LXJhZGl1cygkcmFkaXVzKSB7XG4gIGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6ICRyYWRpdXM7XG4gICAgIGJvcmRlci10b3AtbGVmdC1yYWRpdXM6ICRyYWRpdXM7XG59XG4iLCIvL1xuLy8gSW5wdXQgZ3JvdXBzXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4vLyBCYXNlIHN0eWxlc1xuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLmlucHV0LWdyb3VwIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlOyAvLyBGb3IgZHJvcGRvd25zXG4gIGRpc3BsYXk6IHRhYmxlO1xuICBib3JkZXItY29sbGFwc2U6IHNlcGFyYXRlOyAvLyBwcmV2ZW50IGlucHV0IGdyb3VwcyBmcm9tIGluaGVyaXRpbmcgYm9yZGVyIHN0eWxlcyBmcm9tIHRhYmxlIGNlbGxzIHdoZW4gcGxhY2VkIHdpdGhpbiBhIHRhYmxlXG5cbiAgLy8gVW5kbyBwYWRkaW5nIGFuZCBmbG9hdCBvZiBncmlkIGNsYXNzZXNcbiAgJltjbGFzcyo9XCJjb2wtXCJdIHtcbiAgICBmbG9hdDogbm9uZTtcbiAgICBwYWRkaW5nLWxlZnQ6IDA7XG4gICAgcGFkZGluZy1yaWdodDogMDtcbiAgfVxuXG4gIC5mb3JtLWNvbnRyb2wge1xuICAgIC8vIEVuc3VyZSB0aGF0IHRoZSBpbnB1dCBpcyBhbHdheXMgYWJvdmUgdGhlICphcHBlbmRlZCogYWRkb24gYnV0dG9uIGZvclxuICAgIC8vIHByb3BlciBib3JkZXIgY29sb3JzLlxuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICB6LWluZGV4OiAyO1xuXG4gICAgLy8gSUU5IGZ1YmFycyB0aGUgcGxhY2Vob2xkZXIgYXR0cmlidXRlIGluIHRleHQgaW5wdXRzIGFuZCB0aGUgYXJyb3dzIG9uXG4gICAgLy8gc2VsZWN0IGVsZW1lbnRzIGluIGlucHV0IGdyb3Vwcy4gVG8gZml4IGl0LCB3ZSBmbG9hdCB0aGUgaW5wdXQuIERldGFpbHM6XG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2lzc3Vlcy8xMTU2MSNpc3N1ZWNvbW1lbnQtMjg5MzY4NTVcbiAgICBmbG9hdDogbGVmdDtcblxuICAgIHdpZHRoOiAxMDAlO1xuICAgIG1hcmdpbi1ib3R0b206IDA7XG4gIH1cbn1cblxuLy8gU2l6aW5nIG9wdGlvbnNcbi8vXG4vLyBSZW1peCB0aGUgZGVmYXVsdCBmb3JtIGNvbnRyb2wgc2l6aW5nIGNsYXNzZXMgaW50byBuZXcgb25lcyBmb3IgZWFzaWVyXG4vLyBtYW5pcHVsYXRpb24uXG5cbi5pbnB1dC1ncm91cC1sZyA+IC5mb3JtLWNvbnRyb2wsXG4uaW5wdXQtZ3JvdXAtbGcgPiAuaW5wdXQtZ3JvdXAtYWRkb24sXG4uaW5wdXQtZ3JvdXAtbGcgPiAuaW5wdXQtZ3JvdXAtYnRuID4gLmJ0biB7XG4gIEBleHRlbmQgLmlucHV0LWxnO1xufVxuLmlucHV0LWdyb3VwLXNtID4gLmZvcm0tY29udHJvbCxcbi5pbnB1dC1ncm91cC1zbSA+IC5pbnB1dC1ncm91cC1hZGRvbixcbi5pbnB1dC1ncm91cC1zbSA+IC5pbnB1dC1ncm91cC1idG4gPiAuYnRuIHtcbiAgQGV4dGVuZCAuaW5wdXQtc207XG59XG5cblxuLy8gRGlzcGxheSBhcyB0YWJsZS1jZWxsXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4uaW5wdXQtZ3JvdXAtYWRkb24sXG4uaW5wdXQtZ3JvdXAtYnRuLFxuLmlucHV0LWdyb3VwIC5mb3JtLWNvbnRyb2wge1xuICBkaXNwbGF5OiB0YWJsZS1jZWxsO1xuXG4gICY6bm90KDpmaXJzdC1jaGlsZCk6bm90KDpsYXN0LWNoaWxkKSB7XG4gICAgYm9yZGVyLXJhZGl1czogMDtcbiAgfVxufVxuLy8gQWRkb24gYW5kIGFkZG9uIHdyYXBwZXIgZm9yIGJ1dHRvbnNcbi5pbnB1dC1ncm91cC1hZGRvbixcbi5pbnB1dC1ncm91cC1idG4ge1xuICB3aWR0aDogMSU7XG4gIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7IC8vIE1hdGNoIHRoZSBpbnB1dHNcbn1cblxuLy8gVGV4dCBpbnB1dCBncm91cHNcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi5pbnB1dC1ncm91cC1hZGRvbiB7XG4gIHBhZGRpbmc6ICRwYWRkaW5nLWJhc2UtdmVydGljYWwgJHBhZGRpbmctYmFzZS1ob3Jpem9udGFsO1xuICBmb250LXNpemU6ICRmb250LXNpemUtYmFzZTtcbiAgZm9udC13ZWlnaHQ6IG5vcm1hbDtcbiAgbGluZS1oZWlnaHQ6IDE7XG4gIGNvbG9yOiAkaW5wdXQtY29sb3I7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgYmFja2dyb3VuZC1jb2xvcjogJGlucHV0LWdyb3VwLWFkZG9uLWJnO1xuICBib3JkZXI6IDFweCBzb2xpZCAkaW5wdXQtZ3JvdXAtYWRkb24tYm9yZGVyLWNvbG9yO1xuICBib3JkZXItcmFkaXVzOiAkYm9yZGVyLXJhZGl1cy1iYXNlO1xuXG4gIC8vIFNpemluZ1xuICAmLmlucHV0LXNtIHtcbiAgICBwYWRkaW5nOiAkcGFkZGluZy1zbWFsbC12ZXJ0aWNhbCAkcGFkZGluZy1zbWFsbC1ob3Jpem9udGFsO1xuICAgIGZvbnQtc2l6ZTogJGZvbnQtc2l6ZS1zbWFsbDtcbiAgICBib3JkZXItcmFkaXVzOiAkYm9yZGVyLXJhZGl1cy1zbWFsbDtcbiAgfVxuICAmLmlucHV0LWxnIHtcbiAgICBwYWRkaW5nOiAkcGFkZGluZy1sYXJnZS12ZXJ0aWNhbCAkcGFkZGluZy1sYXJnZS1ob3Jpem9udGFsO1xuICAgIGZvbnQtc2l6ZTogJGZvbnQtc2l6ZS1sYXJnZTtcbiAgICBib3JkZXItcmFkaXVzOiAkYm9yZGVyLXJhZGl1cy1sYXJnZTtcbiAgfVxuXG4gIC8vIE51a2UgZGVmYXVsdCBtYXJnaW5zIGZyb20gY2hlY2tib3hlcyBhbmQgcmFkaW9zIHRvIHZlcnRpY2FsbHkgY2VudGVyIHdpdGhpbi5cbiAgaW5wdXRbdHlwZT1cInJhZGlvXCJdLFxuICBpbnB1dFt0eXBlPVwiY2hlY2tib3hcIl0ge1xuICAgIG1hcmdpbi10b3A6IDA7XG4gIH1cbn1cblxuLy8gUmVzZXQgcm91bmRlZCBjb3JuZXJzXG4uaW5wdXQtZ3JvdXAgLmZvcm0tY29udHJvbDpmaXJzdC1jaGlsZCxcbi5pbnB1dC1ncm91cC1hZGRvbjpmaXJzdC1jaGlsZCxcbi5pbnB1dC1ncm91cC1idG46Zmlyc3QtY2hpbGQgPiAuYnRuLFxuLmlucHV0LWdyb3VwLWJ0bjpmaXJzdC1jaGlsZCA+IC5idG4tZ3JvdXAgPiAuYnRuLFxuLmlucHV0LWdyb3VwLWJ0bjpmaXJzdC1jaGlsZCA+IC5kcm9wZG93bi10b2dnbGUsXG4uaW5wdXQtZ3JvdXAtYnRuOmxhc3QtY2hpbGQgPiAuYnRuOm5vdCg6bGFzdC1jaGlsZCk6bm90KC5kcm9wZG93bi10b2dnbGUpLFxuLmlucHV0LWdyb3VwLWJ0bjpsYXN0LWNoaWxkID4gLmJ0bi1ncm91cDpub3QoOmxhc3QtY2hpbGQpID4gLmJ0biB7XG4gIEBpbmNsdWRlIGJvcmRlci1yaWdodC1yYWRpdXMoMCk7XG59XG4uaW5wdXQtZ3JvdXAtYWRkb246Zmlyc3QtY2hpbGQge1xuICBib3JkZXItcmlnaHQ6IDA7XG59XG4uaW5wdXQtZ3JvdXAgLmZvcm0tY29udHJvbDpsYXN0LWNoaWxkLFxuLmlucHV0LWdyb3VwLWFkZG9uOmxhc3QtY2hpbGQsXG4uaW5wdXQtZ3JvdXAtYnRuOmxhc3QtY2hpbGQgPiAuYnRuLFxuLmlucHV0LWdyb3VwLWJ0bjpsYXN0LWNoaWxkID4gLmJ0bi1ncm91cCA+IC5idG4sXG4uaW5wdXQtZ3JvdXAtYnRuOmxhc3QtY2hpbGQgPiAuZHJvcGRvd24tdG9nZ2xlLFxuLmlucHV0LWdyb3VwLWJ0bjpmaXJzdC1jaGlsZCA+IC5idG46bm90KDpmaXJzdC1jaGlsZCksXG4uaW5wdXQtZ3JvdXAtYnRuOmZpcnN0LWNoaWxkID4gLmJ0bi1ncm91cDpub3QoOmZpcnN0LWNoaWxkKSA+IC5idG4ge1xuICBAaW5jbHVkZSBib3JkZXItbGVmdC1yYWRpdXMoMCk7XG59XG4uaW5wdXQtZ3JvdXAtYWRkb246bGFzdC1jaGlsZCB7XG4gIGJvcmRlci1sZWZ0OiAwO1xufVxuXG4vLyBCdXR0b24gaW5wdXQgZ3JvdXBzXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4uaW5wdXQtZ3JvdXAtYnRuIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAvLyBKYW5raWx5IHByZXZlbnQgaW5wdXQgYnV0dG9uIGdyb3VwcyBmcm9tIHdyYXBwaW5nIHdpdGggYHdoaXRlLXNwYWNlYCBhbmRcbiAgLy8gYGZvbnQtc2l6ZWAgaW4gY29tYmluYXRpb24gd2l0aCBgaW5saW5lLWJsb2NrYCBvbiBidXR0b25zLlxuICBmb250LXNpemU6IDA7XG4gIHdoaXRlLXNwYWNlOiBub3dyYXA7XG5cbiAgLy8gTmVnYXRpdmUgbWFyZ2luIGZvciBzcGFjaW5nLCBwb3NpdGlvbiBmb3IgYnJpbmdpbmcgaG92ZXJlZC9mb2N1c2VkL2FjdGl2ZWRcbiAgLy8gZWxlbWVudCBhYm92ZSB0aGUgc2libGluZ3MuXG4gID4gLmJ0biB7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICsgLmJ0biB7XG4gICAgICBtYXJnaW4tbGVmdDogLTFweDtcbiAgICB9XG4gICAgLy8gQnJpbmcgdGhlIFwiYWN0aXZlXCIgYnV0dG9uIHRvIHRoZSBmcm9udFxuICAgICY6aG92ZXIsXG4gICAgJjpmb2N1cyxcbiAgICAmOmFjdGl2ZSB7XG4gICAgICB6LWluZGV4OiAyO1xuICAgIH1cbiAgfVxuXG4gIC8vIE5lZ2F0aXZlIG1hcmdpbiB0byBvbmx5IGhhdmUgYSAxcHggYm9yZGVyIGJldHdlZW4gdGhlIHR3b1xuICAmOmZpcnN0LWNoaWxkIHtcbiAgICA+IC5idG4sXG4gICAgPiAuYnRuLWdyb3VwIHtcbiAgICAgIG1hcmdpbi1yaWdodDogLTFweDtcbiAgICB9XG4gIH1cbiAgJjpsYXN0LWNoaWxkIHtcbiAgICA+IC5idG4sXG4gICAgPiAuYnRuLWdyb3VwIHtcbiAgICAgIG1hcmdpbi1sZWZ0OiAtMXB4O1xuICAgIH1cbiAgfVxufVxuIiwiLy9cbi8vIE5hdnNcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cblxuLy8gQmFzZSBjbGFzc1xuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLm5hdiB7XG4gIG1hcmdpbi1ib3R0b206IDA7XG4gIHBhZGRpbmctbGVmdDogMDsgLy8gT3ZlcnJpZGUgZGVmYXVsdCB1bC9vbFxuICBsaXN0LXN0eWxlOiBub25lO1xuICBAaW5jbHVkZSBjbGVhcmZpeDtcblxuICA+IGxpIHtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgZGlzcGxheTogYmxvY2s7XG5cbiAgICA+IGEge1xuICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICBwYWRkaW5nOiAkbmF2LWxpbmstcGFkZGluZztcbiAgICAgICY6aG92ZXIsXG4gICAgICAmOmZvY3VzIHtcbiAgICAgICAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkbmF2LWxpbmstaG92ZXItYmc7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gRGlzYWJsZWQgc3RhdGUgc2V0cyB0ZXh0IHRvIGdyYXkgYW5kIG51a2VzIGhvdmVyL3RhYiBlZmZlY3RzXG4gICAgJi5kaXNhYmxlZCA+IGEge1xuICAgICAgY29sb3I6ICRuYXYtZGlzYWJsZWQtbGluay1jb2xvcjtcblxuICAgICAgJjpob3ZlcixcbiAgICAgICY6Zm9jdXMge1xuICAgICAgICBjb2xvcjogJG5hdi1kaXNhYmxlZC1saW5rLWhvdmVyLWNvbG9yO1xuICAgICAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xuICAgICAgICBjdXJzb3I6ICRjdXJzb3ItZGlzYWJsZWQ7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gT3BlbiBkcm9wZG93bnNcbiAgLm9wZW4gPiBhIHtcbiAgICAmLFxuICAgICY6aG92ZXIsXG4gICAgJjpmb2N1cyB7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkbmF2LWxpbmstaG92ZXItYmc7XG4gICAgICBib3JkZXItY29sb3I6ICRsaW5rLWNvbG9yO1xuICAgIH1cbiAgfVxuXG4gIC8vIE5hdiBkaXZpZGVycyAoZGVwcmVjYXRlZCB3aXRoIHYzLjAuMSlcbiAgLy9cbiAgLy8gVGhpcyBzaG91bGQgaGF2ZSBiZWVuIHJlbW92ZWQgaW4gdjMgd2l0aCB0aGUgZHJvcHBpbmcgb2YgYC5uYXYtbGlzdGAsIGJ1dFxuICAvLyB3ZSBtaXNzZWQgaXQuIFdlIGRvbid0IGN1cnJlbnRseSBzdXBwb3J0IHRoaXMgYW55d2hlcmUsIGJ1dCBpbiB0aGUgaW50ZXJlc3RcbiAgLy8gb2YgbWFpbnRhaW5pbmcgYmFja3dhcmQgY29tcGF0aWJpbGl0eSBpbiBjYXNlIHlvdSB1c2UgaXQsIGl0J3MgZGVwcmVjYXRlZC5cbiAgLm5hdi1kaXZpZGVyIHtcbiAgICBAaW5jbHVkZSBuYXYtZGl2aWRlcjtcbiAgfVxuXG4gIC8vIFByZXZlbnQgSUU4IGZyb20gbWlzcGxhY2luZyBpbWdzXG4gIC8vXG4gIC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vaDVicC9odG1sNS1ib2lsZXJwbGF0ZS9pc3N1ZXMvOTg0I2lzc3VlY29tbWVudC0zOTg1OTg5XG4gID4gbGkgPiBhID4gaW1nIHtcbiAgICBtYXgtd2lkdGg6IG5vbmU7XG4gIH1cbn1cblxuXG4vLyBUYWJzXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi8vIEdpdmUgdGhlIHRhYnMgc29tZXRoaW5nIHRvIHNpdCBvblxuLm5hdi10YWJzIHtcbiAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICRuYXYtdGFicy1ib3JkZXItY29sb3I7XG4gID4gbGkge1xuICAgIGZsb2F0OiBsZWZ0O1xuICAgIC8vIE1ha2UgdGhlIGxpc3QtaXRlbXMgb3ZlcmxheSB0aGUgYm90dG9tIGJvcmRlclxuICAgIG1hcmdpbi1ib3R0b206IC0xcHg7XG5cbiAgICAvLyBBY3R1YWwgdGFicyAoYXMgbGlua3MpXG4gICAgPiBhIHtcbiAgICAgIG1hcmdpbi1yaWdodDogMnB4O1xuICAgICAgbGluZS1oZWlnaHQ6ICRsaW5lLWhlaWdodC1iYXNlO1xuICAgICAgYm9yZGVyOiAxcHggc29saWQgdHJhbnNwYXJlbnQ7XG4gICAgICBib3JkZXItcmFkaXVzOiAkYm9yZGVyLXJhZGl1cy1iYXNlICRib3JkZXItcmFkaXVzLWJhc2UgMCAwO1xuICAgICAgJjpob3ZlciB7XG4gICAgICAgIGJvcmRlci1jb2xvcjogJG5hdi10YWJzLWxpbmstaG92ZXItYm9yZGVyLWNvbG9yICRuYXYtdGFicy1saW5rLWhvdmVyLWJvcmRlci1jb2xvciAkbmF2LXRhYnMtYm9yZGVyLWNvbG9yO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIEFjdGl2ZSBzdGF0ZSwgYW5kIGl0cyA6aG92ZXIgdG8gb3ZlcnJpZGUgbm9ybWFsIDpob3ZlclxuICAgICYuYWN0aXZlID4gYSB7XG4gICAgICAmLFxuICAgICAgJjpob3ZlcixcbiAgICAgICY6Zm9jdXMge1xuICAgICAgICBjb2xvcjogJG5hdi10YWJzLWFjdGl2ZS1saW5rLWhvdmVyLWNvbG9yO1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkbmF2LXRhYnMtYWN0aXZlLWxpbmstaG92ZXItYmc7XG4gICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICRuYXYtdGFicy1hY3RpdmUtbGluay1ob3Zlci1ib3JkZXItY29sb3I7XG4gICAgICAgIGJvcmRlci1ib3R0b20tY29sb3I6IHRyYW5zcGFyZW50O1xuICAgICAgICBjdXJzb3I6IGRlZmF1bHQ7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIC8vIHB1bGxpbmcgdGhpcyBpbiBtYWlubHkgZm9yIGxlc3Mgc2hvcnRoYW5kXG4gICYubmF2LWp1c3RpZmllZCB7XG4gICAgQGV4dGVuZCAubmF2LWp1c3RpZmllZDtcbiAgICBAZXh0ZW5kIC5uYXYtdGFicy1qdXN0aWZpZWQ7XG4gIH1cbn1cblxuXG4vLyBQaWxsc1xuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLm5hdi1waWxscyB7XG4gID4gbGkge1xuICAgIGZsb2F0OiBsZWZ0O1xuXG4gICAgLy8gTGlua3MgcmVuZGVyZWQgYXMgcGlsbHNcbiAgICA+IGEge1xuICAgICAgYm9yZGVyLXJhZGl1czogJG5hdi1waWxscy1ib3JkZXItcmFkaXVzO1xuICAgIH1cbiAgICArIGxpIHtcbiAgICAgIG1hcmdpbi1sZWZ0OiAycHg7XG4gICAgfVxuXG4gICAgLy8gQWN0aXZlIHN0YXRlXG4gICAgJi5hY3RpdmUgPiBhIHtcbiAgICAgICYsXG4gICAgICAmOmhvdmVyLFxuICAgICAgJjpmb2N1cyB7XG4gICAgICAgIGNvbG9yOiAkbmF2LXBpbGxzLWFjdGl2ZS1saW5rLWhvdmVyLWNvbG9yO1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkbmF2LXBpbGxzLWFjdGl2ZS1saW5rLWhvdmVyLWJnO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5cbi8vIFN0YWNrZWQgcGlsbHNcbi5uYXYtc3RhY2tlZCB7XG4gID4gbGkge1xuICAgIGZsb2F0OiBub25lO1xuICAgICsgbGkge1xuICAgICAgbWFyZ2luLXRvcDogMnB4O1xuICAgICAgbWFyZ2luLWxlZnQ6IDA7IC8vIG5vIG5lZWQgZm9yIHRoaXMgZ2FwIGJldHdlZW4gbmF2IGl0ZW1zXG4gICAgfVxuICB9XG59XG5cblxuLy8gTmF2IHZhcmlhdGlvbnNcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi8vIEp1c3RpZmllZCBuYXYgbGlua3Ncbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLm5hdi1qdXN0aWZpZWQge1xuICB3aWR0aDogMTAwJTtcblxuICA+IGxpIHtcbiAgICBmbG9hdDogbm9uZTtcbiAgICA+IGEge1xuICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgICAgbWFyZ2luLWJvdHRvbTogNXB4O1xuICAgIH1cbiAgfVxuXG4gID4gLmRyb3Bkb3duIC5kcm9wZG93bi1tZW51IHtcbiAgICB0b3A6IGF1dG87XG4gICAgbGVmdDogYXV0bztcbiAgfVxuXG4gIEBtZWRpYSAobWluLXdpZHRoOiAkc2NyZWVuLXNtLW1pbikge1xuICAgID4gbGkge1xuICAgICAgZGlzcGxheTogdGFibGUtY2VsbDtcbiAgICAgIHdpZHRoOiAxJTtcbiAgICAgID4gYSB7XG4gICAgICAgIG1hcmdpbi1ib3R0b206IDA7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbi8vIE1vdmUgYm9yZGVycyB0byBhbmNob3JzIGluc3RlYWQgb2YgYm90dG9tIG9mIGxpc3Rcbi8vXG4vLyBNaXhpbiBmb3IgYWRkaW5nIG9uIHRvcCB0aGUgc2hhcmVkIGAubmF2LWp1c3RpZmllZGAgc3R5bGVzIGZvciBvdXIgdGFic1xuLm5hdi10YWJzLWp1c3RpZmllZCB7XG4gIGJvcmRlci1ib3R0b206IDA7XG5cbiAgPiBsaSA+IGEge1xuICAgIC8vIE92ZXJyaWRlIG1hcmdpbiBmcm9tIC5uYXYtdGFic1xuICAgIG1hcmdpbi1yaWdodDogMDtcbiAgICBib3JkZXItcmFkaXVzOiAkYm9yZGVyLXJhZGl1cy1iYXNlO1xuICB9XG5cbiAgPiAuYWN0aXZlID4gYSxcbiAgPiAuYWN0aXZlID4gYTpob3ZlcixcbiAgPiAuYWN0aXZlID4gYTpmb2N1cyB7XG4gICAgYm9yZGVyOiAxcHggc29saWQgJG5hdi10YWJzLWp1c3RpZmllZC1saW5rLWJvcmRlci1jb2xvcjtcbiAgfVxuXG4gIEBtZWRpYSAobWluLXdpZHRoOiAkc2NyZWVuLXNtLW1pbikge1xuICAgID4gbGkgPiBhIHtcbiAgICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAkbmF2LXRhYnMtanVzdGlmaWVkLWxpbmstYm9yZGVyLWNvbG9yO1xuICAgICAgYm9yZGVyLXJhZGl1czogJGJvcmRlci1yYWRpdXMtYmFzZSAkYm9yZGVyLXJhZGl1cy1iYXNlIDAgMDtcbiAgICB9XG4gICAgPiAuYWN0aXZlID4gYSxcbiAgICA+IC5hY3RpdmUgPiBhOmhvdmVyLFxuICAgID4gLmFjdGl2ZSA+IGE6Zm9jdXMge1xuICAgICAgYm9yZGVyLWJvdHRvbS1jb2xvcjogJG5hdi10YWJzLWp1c3RpZmllZC1hY3RpdmUtbGluay1ib3JkZXItY29sb3I7XG4gICAgfVxuICB9XG59XG5cblxuLy8gVGFiYmFibGUgdGFic1xuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4vLyBIaWRlIHRhYmJhYmxlIHBhbmVzIHRvIHN0YXJ0LCBzaG93IHRoZW0gd2hlbiBgLmFjdGl2ZWBcbi50YWItY29udGVudCB7XG4gID4gLnRhYi1wYW5lIHtcbiAgICBkaXNwbGF5OiBub25lO1xuICB9XG4gID4gLmFjdGl2ZSB7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gIH1cbn1cblxuXG4vLyBEcm9wZG93bnNcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLy8gU3BlY2lmaWMgZHJvcGRvd25zXG4ubmF2LXRhYnMgLmRyb3Bkb3duLW1lbnUge1xuICAvLyBtYWtlIGRyb3Bkb3duIGJvcmRlciBvdmVybGFwIHRhYiBib3JkZXJcbiAgbWFyZ2luLXRvcDogLTFweDtcbiAgLy8gUmVtb3ZlIHRoZSB0b3Agcm91bmRlZCBjb3JuZXJzIGhlcmUgc2luY2UgdGhlcmUgaXMgYSBoYXJkIGVkZ2UgYWJvdmUgdGhlIG1lbnVcbiAgQGluY2x1ZGUgYm9yZGVyLXRvcC1yYWRpdXMoMCk7XG59XG4iLCIvL1xuLy8gTmF2YmFyc1xuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuXG4vLyBXcmFwcGVyIGFuZCBiYXNlIGNsYXNzXG4vL1xuLy8gUHJvdmlkZSBhIHN0YXRpYyBuYXZiYXIgZnJvbSB3aGljaCB3ZSBleHBhbmQgdG8gY3JlYXRlIGZ1bGwtd2lkdGgsIGZpeGVkLCBhbmRcbi8vIG90aGVyIG5hdmJhciB2YXJpYXRpb25zLlxuXG4ubmF2YmFyIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBtaW4taGVpZ2h0OiAkbmF2YmFyLWhlaWdodDsgLy8gRW5zdXJlIGEgbmF2YmFyIGFsd2F5cyBzaG93cyAoZS5nLiwgd2l0aG91dCBhIC5uYXZiYXItYnJhbmQgaW4gY29sbGFwc2VkIG1vZGUpXG4gIG1hcmdpbi1ib3R0b206ICRuYXZiYXItbWFyZ2luLWJvdHRvbTtcbiAgYm9yZGVyOiAxcHggc29saWQgdHJhbnNwYXJlbnQ7XG5cbiAgLy8gUHJldmVudCBmbG9hdHMgZnJvbSBicmVha2luZyB0aGUgbmF2YmFyXG4gIEBpbmNsdWRlIGNsZWFyZml4O1xuXG4gIEBtZWRpYSAobWluLXdpZHRoOiAkZ3JpZC1mbG9hdC1icmVha3BvaW50KSB7XG4gICAgYm9yZGVyLXJhZGl1czogJG5hdmJhci1ib3JkZXItcmFkaXVzO1xuICB9XG59XG5cblxuLy8gTmF2YmFyIGhlYWRpbmdcbi8vXG4vLyBHcm91cHMgYC5uYXZiYXItYnJhbmRgIGFuZCBgLm5hdmJhci10b2dnbGVgIGludG8gYSBzaW5nbGUgY29tcG9uZW50IGZvciBlYXN5XG4vLyBzdHlsaW5nIG9mIHJlc3BvbnNpdmUgYXNwZWN0cy5cblxuLm5hdmJhci1oZWFkZXIge1xuICBAaW5jbHVkZSBjbGVhcmZpeDtcblxuICBAbWVkaWEgKG1pbi13aWR0aDogJGdyaWQtZmxvYXQtYnJlYWtwb2ludCkge1xuICAgIGZsb2F0OiBsZWZ0O1xuICB9XG59XG5cblxuLy8gTmF2YmFyIGNvbGxhcHNlIChib2R5KVxuLy9cbi8vIEdyb3VwIHlvdXIgbmF2YmFyIGNvbnRlbnQgaW50byB0aGlzIGZvciBlYXN5IGNvbGxhcHNpbmcgYW5kIGV4cGFuZGluZyBhY3Jvc3Ncbi8vIHZhcmlvdXMgZGV2aWNlIHNpemVzLiBCeSBkZWZhdWx0LCB0aGlzIGNvbnRlbnQgaXMgY29sbGFwc2VkIHdoZW4gPDc2OHB4LCBidXRcbi8vIHdpbGwgZXhwYW5kIHBhc3QgdGhhdCBmb3IgYSBob3Jpem9udGFsIGRpc3BsYXkuXG4vL1xuLy8gVG8gc3RhcnQgKG9uIG1vYmlsZSBkZXZpY2VzKSB0aGUgbmF2YmFyIGxpbmtzLCBmb3JtcywgYW5kIGJ1dHRvbnMgYXJlIHN0YWNrZWRcbi8vIHZlcnRpY2FsbHkgYW5kIGluY2x1ZGUgYSBgbWF4LWhlaWdodGAgdG8gb3ZlcmZsb3cgaW4gY2FzZSB5b3UgaGF2ZSB0b28gbXVjaFxuLy8gY29udGVudCBmb3IgdGhlIHVzZXIncyB2aWV3cG9ydC5cblxuLm5hdmJhci1jb2xsYXBzZSB7XG4gIG92ZXJmbG93LXg6IHZpc2libGU7XG4gIHBhZGRpbmctcmlnaHQ6ICRuYXZiYXItcGFkZGluZy1ob3Jpem9udGFsO1xuICBwYWRkaW5nLWxlZnQ6ICAkbmF2YmFyLXBhZGRpbmctaG9yaXpvbnRhbDtcbiAgYm9yZGVyLXRvcDogMXB4IHNvbGlkIHRyYW5zcGFyZW50O1xuICBib3gtc2hhZG93OiBpbnNldCAwIDFweCAwIHJnYmEoMjU1LDI1NSwyNTUsLjEpO1xuICBAaW5jbHVkZSBjbGVhcmZpeDtcbiAgLXdlYmtpdC1vdmVyZmxvdy1zY3JvbGxpbmc6IHRvdWNoO1xuXG4gICYuaW4ge1xuICAgIG92ZXJmbG93LXk6IGF1dG87XG4gIH1cblxuICBAbWVkaWEgKG1pbi13aWR0aDogJGdyaWQtZmxvYXQtYnJlYWtwb2ludCkge1xuICAgIHdpZHRoOiBhdXRvO1xuICAgIGJvcmRlci10b3A6IDA7XG4gICAgYm94LXNoYWRvdzogbm9uZTtcblxuICAgICYuY29sbGFwc2Uge1xuICAgICAgZGlzcGxheTogYmxvY2sgIWltcG9ydGFudDtcbiAgICAgIGhlaWdodDogYXV0byAhaW1wb3J0YW50O1xuICAgICAgcGFkZGluZy1ib3R0b206IDA7IC8vIE92ZXJyaWRlIGRlZmF1bHQgc2V0dGluZ1xuICAgICAgb3ZlcmZsb3c6IHZpc2libGUgIWltcG9ydGFudDtcbiAgICB9XG5cbiAgICAmLmluIHtcbiAgICAgIG92ZXJmbG93LXk6IHZpc2libGU7XG4gICAgfVxuXG4gICAgLy8gVW5kbyB0aGUgY29sbGFwc2Ugc2lkZSBwYWRkaW5nIGZvciBuYXZiYXJzIHdpdGggY29udGFpbmVycyB0byBlbnN1cmVcbiAgICAvLyBhbGlnbm1lbnQgb2YgcmlnaHQtYWxpZ25lZCBjb250ZW50cy5cbiAgICAubmF2YmFyLWZpeGVkLXRvcCAmLFxuICAgIC5uYXZiYXItc3RhdGljLXRvcCAmLFxuICAgIC5uYXZiYXItZml4ZWQtYm90dG9tICYge1xuICAgICAgcGFkZGluZy1sZWZ0OiAwO1xuICAgICAgcGFkZGluZy1yaWdodDogMDtcbiAgICB9XG4gIH1cbn1cblxuLm5hdmJhci1maXhlZC10b3AsXG4ubmF2YmFyLWZpeGVkLWJvdHRvbSB7XG4gIC5uYXZiYXItY29sbGFwc2Uge1xuICAgIG1heC1oZWlnaHQ6ICRuYXZiYXItY29sbGFwc2UtbWF4LWhlaWdodDtcblxuICAgIEBtZWRpYSAobWF4LWRldmljZS13aWR0aDogJHNjcmVlbi14cy1taW4pIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkge1xuICAgICAgbWF4LWhlaWdodDogMjAwcHg7XG4gICAgfVxuICB9XG59XG5cblxuLy8gQm90aCBuYXZiYXIgaGVhZGVyIGFuZCBjb2xsYXBzZVxuLy9cbi8vIFdoZW4gYSBjb250YWluZXIgaXMgcHJlc2VudCwgY2hhbmdlIHRoZSBiZWhhdmlvciBvZiB0aGUgaGVhZGVyIGFuZCBjb2xsYXBzZS5cblxuLmNvbnRhaW5lcixcbi5jb250YWluZXItZmx1aWQge1xuICA+IC5uYXZiYXItaGVhZGVyLFxuICA+IC5uYXZiYXItY29sbGFwc2Uge1xuICAgIG1hcmdpbi1yaWdodDogLSRuYXZiYXItcGFkZGluZy1ob3Jpem9udGFsO1xuICAgIG1hcmdpbi1sZWZ0OiAgLSRuYXZiYXItcGFkZGluZy1ob3Jpem9udGFsO1xuXG4gICAgQG1lZGlhIChtaW4td2lkdGg6ICRncmlkLWZsb2F0LWJyZWFrcG9pbnQpIHtcbiAgICAgIG1hcmdpbi1yaWdodDogMDtcbiAgICAgIG1hcmdpbi1sZWZ0OiAgMDtcbiAgICB9XG4gIH1cbn1cblxuXG4vL1xuLy8gTmF2YmFyIGFsaWdubWVudCBvcHRpb25zXG4vL1xuLy8gRGlzcGxheSB0aGUgbmF2YmFyIGFjcm9zcyB0aGUgZW50aXJldHkgb2YgdGhlIHBhZ2Ugb3IgZml4ZWQgaXQgdG8gdGhlIHRvcCBvclxuLy8gYm90dG9tIG9mIHRoZSBwYWdlLlxuXG4vLyBTdGF0aWMgdG9wICh1bmZpeGVkLCBidXQgMTAwJSB3aWRlKSBuYXZiYXJcbi5uYXZiYXItc3RhdGljLXRvcCB7XG4gIHotaW5kZXg6ICR6aW5kZXgtbmF2YmFyO1xuICBib3JkZXItd2lkdGg6IDAgMCAxcHg7XG5cbiAgQG1lZGlhIChtaW4td2lkdGg6ICRncmlkLWZsb2F0LWJyZWFrcG9pbnQpIHtcbiAgICBib3JkZXItcmFkaXVzOiAwO1xuICB9XG59XG5cbi8vIEZpeCB0aGUgdG9wL2JvdHRvbSBuYXZiYXJzIHdoZW4gc2NyZWVuIHJlYWwgZXN0YXRlIHN1cHBvcnRzIGl0XG4ubmF2YmFyLWZpeGVkLXRvcCxcbi5uYXZiYXItZml4ZWQtYm90dG9tIHtcbiAgcG9zaXRpb246IGZpeGVkO1xuICByaWdodDogMDtcbiAgbGVmdDogMDtcbiAgei1pbmRleDogJHppbmRleC1uYXZiYXItZml4ZWQ7XG5cbiAgLy8gVW5kbyB0aGUgcm91bmRlZCBjb3JuZXJzXG4gIEBtZWRpYSAobWluLXdpZHRoOiAkZ3JpZC1mbG9hdC1icmVha3BvaW50KSB7XG4gICAgYm9yZGVyLXJhZGl1czogMDtcbiAgfVxufVxuLm5hdmJhci1maXhlZC10b3Age1xuICB0b3A6IDA7XG4gIGJvcmRlci13aWR0aDogMCAwIDFweDtcbn1cbi5uYXZiYXItZml4ZWQtYm90dG9tIHtcbiAgYm90dG9tOiAwO1xuICBtYXJnaW4tYm90dG9tOiAwOyAvLyBvdmVycmlkZSAubmF2YmFyIGRlZmF1bHRzXG4gIGJvcmRlci13aWR0aDogMXB4IDAgMDtcbn1cblxuXG4vLyBCcmFuZC9wcm9qZWN0IG5hbWVcblxuLm5hdmJhci1icmFuZCB7XG4gIGZsb2F0OiBsZWZ0O1xuICBwYWRkaW5nOiAkbmF2YmFyLXBhZGRpbmctdmVydGljYWwgJG5hdmJhci1wYWRkaW5nLWhvcml6b250YWw7XG4gIGZvbnQtc2l6ZTogJGZvbnQtc2l6ZS1sYXJnZTtcbiAgbGluZS1oZWlnaHQ6ICRsaW5lLWhlaWdodC1jb21wdXRlZDtcbiAgaGVpZ2h0OiAkbmF2YmFyLWhlaWdodDtcblxuICAmOmhvdmVyLFxuICAmOmZvY3VzIHtcbiAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG4gIH1cblxuICA+IGltZyB7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gIH1cblxuICBAbWVkaWEgKG1pbi13aWR0aDogJGdyaWQtZmxvYXQtYnJlYWtwb2ludCkge1xuICAgIC5uYXZiYXIgPiAuY29udGFpbmVyICYsXG4gICAgLm5hdmJhciA+IC5jb250YWluZXItZmx1aWQgJiB7XG4gICAgICBtYXJnaW4tbGVmdDogLSRuYXZiYXItcGFkZGluZy1ob3Jpem9udGFsO1xuICAgIH1cbiAgfVxufVxuXG5cbi8vIE5hdmJhciB0b2dnbGVcbi8vXG4vLyBDdXN0b20gYnV0dG9uIGZvciB0b2dnbGluZyB0aGUgYC5uYXZiYXItY29sbGFwc2VgLCBwb3dlcmVkIGJ5IHRoZSBjb2xsYXBzZVxuLy8gSmF2YVNjcmlwdCBwbHVnaW4uXG5cbi5uYXZiYXItdG9nZ2xlIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBmbG9hdDogcmlnaHQ7XG4gIG1hcmdpbi1yaWdodDogJG5hdmJhci1wYWRkaW5nLWhvcml6b250YWw7XG4gIHBhZGRpbmc6IDlweCAxMHB4O1xuICBAaW5jbHVkZSBuYXZiYXItdmVydGljYWwtYWxpZ24oMzRweCk7XG4gIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xuICBiYWNrZ3JvdW5kLWltYWdlOiBub25lOyAvLyBSZXNldCB1bnVzdWFsIEZpcmVmb3gtb24tQW5kcm9pZCBkZWZhdWx0IHN0eWxlOyBzZWUgaHR0cHM6Ly9naXRodWIuY29tL25lY29sYXMvbm9ybWFsaXplLmNzcy9pc3N1ZXMvMjE0XG4gIGJvcmRlcjogMXB4IHNvbGlkIHRyYW5zcGFyZW50O1xuICBib3JkZXItcmFkaXVzOiAkYm9yZGVyLXJhZGl1cy1iYXNlO1xuXG4gIC8vIFdlIHJlbW92ZSB0aGUgYG91dGxpbmVgIGhlcmUsIGJ1dCBsYXRlciBjb21wZW5zYXRlIGJ5IGF0dGFjaGluZyBgOmhvdmVyYFxuICAvLyBzdHlsZXMgdG8gYDpmb2N1c2AuXG4gICY6Zm9jdXMge1xuICAgIG91dGxpbmU6IDA7XG4gIH1cblxuICAvLyBCYXJzXG4gIC5pY29uLWJhciB7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgd2lkdGg6IDIycHg7XG4gICAgaGVpZ2h0OiAycHg7XG4gICAgYm9yZGVyLXJhZGl1czogMXB4O1xuICB9XG4gIC5pY29uLWJhciArIC5pY29uLWJhciB7XG4gICAgbWFyZ2luLXRvcDogNHB4O1xuICB9XG5cbiAgQG1lZGlhIChtaW4td2lkdGg6ICRncmlkLWZsb2F0LWJyZWFrcG9pbnQpIHtcbiAgICBkaXNwbGF5OiBub25lO1xuICB9XG59XG5cblxuLy8gTmF2YmFyIG5hdiBsaW5rc1xuLy9cbi8vIEJ1aWxkcyBvbiB0b3Agb2YgdGhlIGAubmF2YCBjb21wb25lbnRzIHdpdGggaXRzIG93biBtb2RpZmllciBjbGFzcyB0byBtYWtlXG4vLyB0aGUgbmF2IHRoZSBmdWxsIGhlaWdodCBvZiB0aGUgaG9yaXpvbnRhbCBuYXYgKGFib3ZlIDc2OHB4KS5cblxuLm5hdmJhci1uYXYge1xuICBtYXJnaW46ICgkbmF2YmFyLXBhZGRpbmctdmVydGljYWwgLyAyKSAoLSRuYXZiYXItcGFkZGluZy1ob3Jpem9udGFsKTtcblxuICA+IGxpID4gYSB7XG4gICAgcGFkZGluZy10b3A6ICAgIDEwcHg7XG4gICAgcGFkZGluZy1ib3R0b206IDEwcHg7XG4gICAgbGluZS1oZWlnaHQ6ICRsaW5lLWhlaWdodC1jb21wdXRlZDtcbiAgfVxuXG4gIEBtZWRpYSAobWF4LXdpZHRoOiAkZ3JpZC1mbG9hdC1icmVha3BvaW50LW1heCkge1xuICAgIC8vIERyb3Bkb3ducyBnZXQgY3VzdG9tIGRpc3BsYXkgd2hlbiBjb2xsYXBzZWRcbiAgICAub3BlbiAuZHJvcGRvd24tbWVudSB7XG4gICAgICBwb3NpdGlvbjogc3RhdGljO1xuICAgICAgZmxvYXQ6IG5vbmU7XG4gICAgICB3aWR0aDogYXV0bztcbiAgICAgIG1hcmdpbi10b3A6IDA7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcbiAgICAgIGJvcmRlcjogMDtcbiAgICAgIGJveC1zaGFkb3c6IG5vbmU7XG4gICAgICA+IGxpID4gYSxcbiAgICAgIC5kcm9wZG93bi1oZWFkZXIge1xuICAgICAgICBwYWRkaW5nOiA1cHggMTVweCA1cHggMjVweDtcbiAgICAgIH1cbiAgICAgID4gbGkgPiBhIHtcbiAgICAgICAgbGluZS1oZWlnaHQ6ICRsaW5lLWhlaWdodC1jb21wdXRlZDtcbiAgICAgICAgJjpob3ZlcixcbiAgICAgICAgJjpmb2N1cyB7XG4gICAgICAgICAgYmFja2dyb3VuZC1pbWFnZTogbm9uZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIFVuY29sbGFwc2UgdGhlIG5hdlxuICBAbWVkaWEgKG1pbi13aWR0aDogJGdyaWQtZmxvYXQtYnJlYWtwb2ludCkge1xuICAgIGZsb2F0OiBsZWZ0O1xuICAgIG1hcmdpbjogMDtcblxuICAgID4gbGkge1xuICAgICAgZmxvYXQ6IGxlZnQ7XG4gICAgICA+IGEge1xuICAgICAgICBwYWRkaW5nLXRvcDogICAgJG5hdmJhci1wYWRkaW5nLXZlcnRpY2FsO1xuICAgICAgICBwYWRkaW5nLWJvdHRvbTogJG5hdmJhci1wYWRkaW5nLXZlcnRpY2FsO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5cbi8vIE5hdmJhciBmb3JtXG4vL1xuLy8gRXh0ZW5zaW9uIG9mIHRoZSBgLmZvcm0taW5saW5lYCB3aXRoIHNvbWUgZXh0cmEgZmxhdm9yIGZvciBvcHRpbXVtIGRpc3BsYXkgaW5cbi8vIG91ciBuYXZiYXJzLlxuXG4ubmF2YmFyLWZvcm0ge1xuICBtYXJnaW4tbGVmdDogLSRuYXZiYXItcGFkZGluZy1ob3Jpem9udGFsO1xuICBtYXJnaW4tcmlnaHQ6IC0kbmF2YmFyLXBhZGRpbmctaG9yaXpvbnRhbDtcbiAgcGFkZGluZzogMTBweCAkbmF2YmFyLXBhZGRpbmctaG9yaXpvbnRhbDtcbiAgYm9yZGVyLXRvcDogMXB4IHNvbGlkIHRyYW5zcGFyZW50O1xuICBib3JkZXItYm90dG9tOiAxcHggc29saWQgdHJhbnNwYXJlbnQ7XG4gICRzaGFkb3c6IGluc2V0IDAgMXB4IDAgcmdiYSgyNTUsMjU1LDI1NSwuMSksIDAgMXB4IDAgcmdiYSgyNTUsMjU1LDI1NSwuMSk7XG4gIEBpbmNsdWRlIGJveC1zaGFkb3coJHNoYWRvdyk7XG5cbiAgLy8gTWl4aW4gYmVoYXZpb3IgZm9yIG9wdGltdW0gZGlzcGxheVxuICBAaW5jbHVkZSBmb3JtLWlubGluZTtcblxuICAuZm9ybS1ncm91cCB7XG4gICAgQG1lZGlhIChtYXgtd2lkdGg6ICRncmlkLWZsb2F0LWJyZWFrcG9pbnQtbWF4KSB7XG4gICAgICBtYXJnaW4tYm90dG9tOiA1cHg7XG5cbiAgICAgICY6bGFzdC1jaGlsZCB7XG4gICAgICAgIG1hcmdpbi1ib3R0b206IDA7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gVmVydGljYWxseSBjZW50ZXIgaW4gZXhwYW5kZWQsIGhvcml6b250YWwgbmF2YmFyXG4gIEBpbmNsdWRlIG5hdmJhci12ZXJ0aWNhbC1hbGlnbigkaW5wdXQtaGVpZ2h0LWJhc2UpO1xuXG4gIC8vIFVuZG8gMTAwJSB3aWR0aCBmb3IgcHVsbCBjbGFzc2VzXG4gIEBtZWRpYSAobWluLXdpZHRoOiAkZ3JpZC1mbG9hdC1icmVha3BvaW50KSB7XG4gICAgd2lkdGg6IGF1dG87XG4gICAgYm9yZGVyOiAwO1xuICAgIG1hcmdpbi1sZWZ0OiAwO1xuICAgIG1hcmdpbi1yaWdodDogMDtcbiAgICBwYWRkaW5nLXRvcDogMDtcbiAgICBwYWRkaW5nLWJvdHRvbTogMDtcbiAgICBAaW5jbHVkZSBib3gtc2hhZG93KG5vbmUpO1xuICB9XG59XG5cblxuLy8gRHJvcGRvd24gbWVudXNcblxuLy8gTWVudSBwb3NpdGlvbiBhbmQgbWVudSBjYXJldHNcbi5uYXZiYXItbmF2ID4gbGkgPiAuZHJvcGRvd24tbWVudSB7XG4gIG1hcmdpbi10b3A6IDA7XG4gIEBpbmNsdWRlIGJvcmRlci10b3AtcmFkaXVzKDApO1xufVxuLy8gTWVudSBwb3NpdGlvbiBhbmQgbWVudSBjYXJldCBzdXBwb3J0IGZvciBkcm9wdXBzIHZpYSBleHRyYSBkcm9wdXAgY2xhc3Ncbi5uYXZiYXItZml4ZWQtYm90dG9tIC5uYXZiYXItbmF2ID4gbGkgPiAuZHJvcGRvd24tbWVudSB7XG4gIG1hcmdpbi1ib3R0b206IDA7XG4gIEBpbmNsdWRlIGJvcmRlci10b3AtcmFkaXVzKCRuYXZiYXItYm9yZGVyLXJhZGl1cyk7XG4gIEBpbmNsdWRlIGJvcmRlci1ib3R0b20tcmFkaXVzKDApO1xufVxuXG5cbi8vIEJ1dHRvbnMgaW4gbmF2YmFyc1xuLy9cbi8vIFZlcnRpY2FsbHkgY2VudGVyIGEgYnV0dG9uIHdpdGhpbiBhIG5hdmJhciAod2hlbiAqbm90KiBpbiBhIGZvcm0pLlxuXG4ubmF2YmFyLWJ0biB7XG4gIEBpbmNsdWRlIG5hdmJhci12ZXJ0aWNhbC1hbGlnbigkaW5wdXQtaGVpZ2h0LWJhc2UpO1xuXG4gICYuYnRuLXNtIHtcbiAgICBAaW5jbHVkZSBuYXZiYXItdmVydGljYWwtYWxpZ24oJGlucHV0LWhlaWdodC1zbWFsbCk7XG4gIH1cbiAgJi5idG4teHMge1xuICAgIEBpbmNsdWRlIG5hdmJhci12ZXJ0aWNhbC1hbGlnbigyMik7XG4gIH1cbn1cblxuXG4vLyBUZXh0IGluIG5hdmJhcnNcbi8vXG4vLyBBZGQgYSBjbGFzcyB0byBtYWtlIGFueSBlbGVtZW50IHByb3Blcmx5IGFsaWduIGl0c2VsZiB2ZXJ0aWNhbGx5IHdpdGhpbiB0aGUgbmF2YmFycy5cblxuLm5hdmJhci10ZXh0IHtcbiAgQGluY2x1ZGUgbmF2YmFyLXZlcnRpY2FsLWFsaWduKCRsaW5lLWhlaWdodC1jb21wdXRlZCk7XG5cbiAgQG1lZGlhIChtaW4td2lkdGg6ICRncmlkLWZsb2F0LWJyZWFrcG9pbnQpIHtcbiAgICBmbG9hdDogbGVmdDtcbiAgICBtYXJnaW4tbGVmdDogJG5hdmJhci1wYWRkaW5nLWhvcml6b250YWw7XG4gICAgbWFyZ2luLXJpZ2h0OiAkbmF2YmFyLXBhZGRpbmctaG9yaXpvbnRhbDtcbiAgfVxufVxuXG5cbi8vIENvbXBvbmVudCBhbGlnbm1lbnRcbi8vXG4vLyBSZXB1cnBvc2UgdGhlIHB1bGwgdXRpbGl0aWVzIGFzIHRoZWlyIG93biBuYXZiYXIgdXRpbGl0aWVzIHRvIGF2b2lkIHNwZWNpZmljaXR5XG4vLyBpc3N1ZXMgd2l0aCBwYXJlbnRzIGFuZCBjaGFpbmluZy4gT25seSBkbyB0aGlzIHdoZW4gdGhlIG5hdmJhciBpcyB1bmNvbGxhcHNlZFxuLy8gdGhvdWdoIHNvIHRoYXQgbmF2YmFyIGNvbnRlbnRzIHByb3Blcmx5IHN0YWNrIGFuZCBhbGlnbiBpbiBtb2JpbGUuXG4vL1xuLy8gRGVjbGFyZWQgYWZ0ZXIgdGhlIG5hdmJhciBjb21wb25lbnRzIHRvIGVuc3VyZSBtb3JlIHNwZWNpZmljaXR5IG9uIHRoZSBtYXJnaW5zLlxuXG5AbWVkaWEgKG1pbi13aWR0aDogJGdyaWQtZmxvYXQtYnJlYWtwb2ludCkge1xuICAubmF2YmFyLWxlZnQge1xuICAgIGZsb2F0OiBsZWZ0ICFpbXBvcnRhbnQ7XG4gIH1cbiAgLm5hdmJhci1yaWdodCB7XG4gICAgZmxvYXQ6IHJpZ2h0ICFpbXBvcnRhbnQ7XG4gIG1hcmdpbi1yaWdodDogLSRuYXZiYXItcGFkZGluZy1ob3Jpem9udGFsO1xuXG4gICAgfiAubmF2YmFyLXJpZ2h0IHtcbiAgICAgIG1hcmdpbi1yaWdodDogMDtcbiAgICB9XG4gIH1cbn1cblxuXG4vLyBBbHRlcm5hdGUgbmF2YmFyc1xuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLy8gRGVmYXVsdCBuYXZiYXJcbi5uYXZiYXItZGVmYXVsdCB7XG4gIGJhY2tncm91bmQtY29sb3I6ICRuYXZiYXItZGVmYXVsdC1iZztcbiAgYm9yZGVyLWNvbG9yOiAkbmF2YmFyLWRlZmF1bHQtYm9yZGVyO1xuXG4gIC5uYXZiYXItYnJhbmQge1xuICAgIGNvbG9yOiAkbmF2YmFyLWRlZmF1bHQtYnJhbmQtY29sb3I7XG4gICAgJjpob3ZlcixcbiAgICAmOmZvY3VzIHtcbiAgICAgIGNvbG9yOiAkbmF2YmFyLWRlZmF1bHQtYnJhbmQtaG92ZXItY29sb3I7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkbmF2YmFyLWRlZmF1bHQtYnJhbmQtaG92ZXItYmc7XG4gICAgfVxuICB9XG5cbiAgLm5hdmJhci10ZXh0IHtcbiAgICBjb2xvcjogJG5hdmJhci1kZWZhdWx0LWNvbG9yO1xuICB9XG5cbiAgLm5hdmJhci1uYXYge1xuICAgID4gbGkgPiBhIHtcbiAgICAgIGNvbG9yOiAkbmF2YmFyLWRlZmF1bHQtbGluay1jb2xvcjtcblxuICAgICAgJjpob3ZlcixcbiAgICAgICY6Zm9jdXMge1xuICAgICAgICBjb2xvcjogJG5hdmJhci1kZWZhdWx0LWxpbmstaG92ZXItY29sb3I7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6ICRuYXZiYXItZGVmYXVsdC1saW5rLWhvdmVyLWJnO1xuICAgICAgfVxuICAgIH1cbiAgICA+IC5hY3RpdmUgPiBhIHtcbiAgICAgICYsXG4gICAgICAmOmhvdmVyLFxuICAgICAgJjpmb2N1cyB7XG4gICAgICAgIGNvbG9yOiAkbmF2YmFyLWRlZmF1bHQtbGluay1hY3RpdmUtY29sb3I7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6ICRuYXZiYXItZGVmYXVsdC1saW5rLWFjdGl2ZS1iZztcbiAgICAgIH1cbiAgICB9XG4gICAgPiAuZGlzYWJsZWQgPiBhIHtcbiAgICAgICYsXG4gICAgICAmOmhvdmVyLFxuICAgICAgJjpmb2N1cyB7XG4gICAgICAgIGNvbG9yOiAkbmF2YmFyLWRlZmF1bHQtbGluay1kaXNhYmxlZC1jb2xvcjtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogJG5hdmJhci1kZWZhdWx0LWxpbmstZGlzYWJsZWQtYmc7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLm5hdmJhci10b2dnbGUge1xuICAgIGJvcmRlci1jb2xvcjogJG5hdmJhci1kZWZhdWx0LXRvZ2dsZS1ib3JkZXItY29sb3I7XG4gICAgJjpob3ZlcixcbiAgICAmOmZvY3VzIHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6ICRuYXZiYXItZGVmYXVsdC10b2dnbGUtaG92ZXItYmc7XG4gICAgfVxuICAgIC5pY29uLWJhciB7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkbmF2YmFyLWRlZmF1bHQtdG9nZ2xlLWljb24tYmFyLWJnO1xuICAgIH1cbiAgfVxuXG4gIC5uYXZiYXItY29sbGFwc2UsXG4gIC5uYXZiYXItZm9ybSB7XG4gICAgYm9yZGVyLWNvbG9yOiAkbmF2YmFyLWRlZmF1bHQtYm9yZGVyO1xuICB9XG5cbiAgLy8gRHJvcGRvd24gbWVudSBpdGVtc1xuICAubmF2YmFyLW5hdiB7XG4gICAgLy8gUmVtb3ZlIGJhY2tncm91bmQgY29sb3IgZnJvbSBvcGVuIGRyb3Bkb3duXG4gICAgPiAub3BlbiA+IGEge1xuICAgICAgJixcbiAgICAgICY6aG92ZXIsXG4gICAgICAmOmZvY3VzIHtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogJG5hdmJhci1kZWZhdWx0LWxpbmstYWN0aXZlLWJnO1xuICAgICAgICBjb2xvcjogJG5hdmJhci1kZWZhdWx0LWxpbmstYWN0aXZlLWNvbG9yO1xuICAgICAgfVxuICAgIH1cblxuICAgIEBtZWRpYSAobWF4LXdpZHRoOiAkZ3JpZC1mbG9hdC1icmVha3BvaW50LW1heCkge1xuICAgICAgLy8gRHJvcGRvd25zIGdldCBjdXN0b20gZGlzcGxheSB3aGVuIGNvbGxhcHNlZFxuICAgICAgLm9wZW4gLmRyb3Bkb3duLW1lbnUge1xuICAgICAgICA+IGxpID4gYSB7XG4gICAgICAgICAgY29sb3I6ICRuYXZiYXItZGVmYXVsdC1saW5rLWNvbG9yO1xuICAgICAgICAgICY6aG92ZXIsXG4gICAgICAgICAgJjpmb2N1cyB7XG4gICAgICAgICAgICBjb2xvcjogJG5hdmJhci1kZWZhdWx0LWxpbmstaG92ZXItY29sb3I7XG4gICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkbmF2YmFyLWRlZmF1bHQtbGluay1ob3Zlci1iZztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgPiAuYWN0aXZlID4gYSB7XG4gICAgICAgICAgJixcbiAgICAgICAgICAmOmhvdmVyLFxuICAgICAgICAgICY6Zm9jdXMge1xuICAgICAgICAgICAgY29sb3I6ICRuYXZiYXItZGVmYXVsdC1saW5rLWFjdGl2ZS1jb2xvcjtcbiAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICRuYXZiYXItZGVmYXVsdC1saW5rLWFjdGl2ZS1iZztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgPiAuZGlzYWJsZWQgPiBhIHtcbiAgICAgICAgICAmLFxuICAgICAgICAgICY6aG92ZXIsXG4gICAgICAgICAgJjpmb2N1cyB7XG4gICAgICAgICAgICBjb2xvcjogJG5hdmJhci1kZWZhdWx0LWxpbmstZGlzYWJsZWQtY29sb3I7XG4gICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkbmF2YmFyLWRlZmF1bHQtbGluay1kaXNhYmxlZC1iZztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuXG4gIC8vIExpbmtzIGluIG5hdmJhcnNcbiAgLy9cbiAgLy8gQWRkIGEgY2xhc3MgdG8gZW5zdXJlIGxpbmtzIG91dHNpZGUgdGhlIG5hdmJhciBuYXYgYXJlIGNvbG9yZWQgY29ycmVjdGx5LlxuXG4gIC5uYXZiYXItbGluayB7XG4gICAgY29sb3I6ICRuYXZiYXItZGVmYXVsdC1saW5rLWNvbG9yO1xuICAgICY6aG92ZXIge1xuICAgICAgY29sb3I6ICRuYXZiYXItZGVmYXVsdC1saW5rLWhvdmVyLWNvbG9yO1xuICAgIH1cbiAgfVxuXG4gIC5idG4tbGluayB7XG4gICAgY29sb3I6ICRuYXZiYXItZGVmYXVsdC1saW5rLWNvbG9yO1xuICAgICY6aG92ZXIsXG4gICAgJjpmb2N1cyB7XG4gICAgICBjb2xvcjogJG5hdmJhci1kZWZhdWx0LWxpbmstaG92ZXItY29sb3I7XG4gICAgfVxuICAgICZbZGlzYWJsZWRdLFxuICAgIGZpZWxkc2V0W2Rpc2FibGVkXSAmIHtcbiAgICAgICY6aG92ZXIsXG4gICAgICAmOmZvY3VzIHtcbiAgICAgICAgY29sb3I6ICRuYXZiYXItZGVmYXVsdC1saW5rLWRpc2FibGVkLWNvbG9yO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG4vLyBJbnZlcnNlIG5hdmJhclxuXG4ubmF2YmFyLWludmVyc2Uge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAkbmF2YmFyLWludmVyc2UtYmc7XG4gIGJvcmRlci1jb2xvcjogJG5hdmJhci1pbnZlcnNlLWJvcmRlcjtcblxuICAubmF2YmFyLWJyYW5kIHtcbiAgICBjb2xvcjogJG5hdmJhci1pbnZlcnNlLWJyYW5kLWNvbG9yO1xuICAgICY6aG92ZXIsXG4gICAgJjpmb2N1cyB7XG4gICAgICBjb2xvcjogJG5hdmJhci1pbnZlcnNlLWJyYW5kLWhvdmVyLWNvbG9yO1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogJG5hdmJhci1pbnZlcnNlLWJyYW5kLWhvdmVyLWJnO1xuICAgIH1cbiAgfVxuXG4gIC5uYXZiYXItdGV4dCB7XG4gICAgY29sb3I6ICRuYXZiYXItaW52ZXJzZS1jb2xvcjtcbiAgfVxuXG4gIC5uYXZiYXItbmF2IHtcbiAgICA+IGxpID4gYSB7XG4gICAgICBjb2xvcjogJG5hdmJhci1pbnZlcnNlLWxpbmstY29sb3I7XG5cbiAgICAgICY6aG92ZXIsXG4gICAgICAmOmZvY3VzIHtcbiAgICAgICAgY29sb3I6ICRuYXZiYXItaW52ZXJzZS1saW5rLWhvdmVyLWNvbG9yO1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkbmF2YmFyLWludmVyc2UtbGluay1ob3Zlci1iZztcbiAgICAgIH1cbiAgICB9XG4gICAgPiAuYWN0aXZlID4gYSB7XG4gICAgICAmLFxuICAgICAgJjpob3ZlcixcbiAgICAgICY6Zm9jdXMge1xuICAgICAgICBjb2xvcjogJG5hdmJhci1pbnZlcnNlLWxpbmstYWN0aXZlLWNvbG9yO1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkbmF2YmFyLWludmVyc2UtbGluay1hY3RpdmUtYmc7XG4gICAgICB9XG4gICAgfVxuICAgID4gLmRpc2FibGVkID4gYSB7XG4gICAgICAmLFxuICAgICAgJjpob3ZlcixcbiAgICAgICY6Zm9jdXMge1xuICAgICAgICBjb2xvcjogJG5hdmJhci1pbnZlcnNlLWxpbmstZGlzYWJsZWQtY29sb3I7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6ICRuYXZiYXItaW52ZXJzZS1saW5rLWRpc2FibGVkLWJnO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIERhcmtlbiB0aGUgcmVzcG9uc2l2ZSBuYXYgdG9nZ2xlXG4gIC5uYXZiYXItdG9nZ2xlIHtcbiAgICBib3JkZXItY29sb3I6ICRuYXZiYXItaW52ZXJzZS10b2dnbGUtYm9yZGVyLWNvbG9yO1xuICAgICY6aG92ZXIsXG4gICAgJjpmb2N1cyB7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkbmF2YmFyLWludmVyc2UtdG9nZ2xlLWhvdmVyLWJnO1xuICAgIH1cbiAgICAuaWNvbi1iYXIge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogJG5hdmJhci1pbnZlcnNlLXRvZ2dsZS1pY29uLWJhci1iZztcbiAgICB9XG4gIH1cblxuICAubmF2YmFyLWNvbGxhcHNlLFxuICAubmF2YmFyLWZvcm0ge1xuICAgIGJvcmRlci1jb2xvcjogZGFya2VuKCRuYXZiYXItaW52ZXJzZS1iZywgNyUpO1xuICB9XG5cbiAgLy8gRHJvcGRvd25zXG4gIC5uYXZiYXItbmF2IHtcbiAgICA+IC5vcGVuID4gYSB7XG4gICAgICAmLFxuICAgICAgJjpob3ZlcixcbiAgICAgICY6Zm9jdXMge1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkbmF2YmFyLWludmVyc2UtbGluay1hY3RpdmUtYmc7XG4gICAgICAgIGNvbG9yOiAkbmF2YmFyLWludmVyc2UtbGluay1hY3RpdmUtY29sb3I7XG4gICAgICB9XG4gICAgfVxuXG4gICAgQG1lZGlhIChtYXgtd2lkdGg6ICRncmlkLWZsb2F0LWJyZWFrcG9pbnQtbWF4KSB7XG4gICAgICAvLyBEcm9wZG93bnMgZ2V0IGN1c3RvbSBkaXNwbGF5XG4gICAgICAub3BlbiAuZHJvcGRvd24tbWVudSB7XG4gICAgICAgID4gLmRyb3Bkb3duLWhlYWRlciB7XG4gICAgICAgICAgYm9yZGVyLWNvbG9yOiAkbmF2YmFyLWludmVyc2UtYm9yZGVyO1xuICAgICAgICB9XG4gICAgICAgIC5kaXZpZGVyIHtcbiAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkbmF2YmFyLWludmVyc2UtYm9yZGVyO1xuICAgICAgICB9XG4gICAgICAgID4gbGkgPiBhIHtcbiAgICAgICAgICBjb2xvcjogJG5hdmJhci1pbnZlcnNlLWxpbmstY29sb3I7XG4gICAgICAgICAgJjpob3ZlcixcbiAgICAgICAgICAmOmZvY3VzIHtcbiAgICAgICAgICAgIGNvbG9yOiAkbmF2YmFyLWludmVyc2UtbGluay1ob3Zlci1jb2xvcjtcbiAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICRuYXZiYXItaW52ZXJzZS1saW5rLWhvdmVyLWJnO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICA+IC5hY3RpdmUgPiBhIHtcbiAgICAgICAgICAmLFxuICAgICAgICAgICY6aG92ZXIsXG4gICAgICAgICAgJjpmb2N1cyB7XG4gICAgICAgICAgICBjb2xvcjogJG5hdmJhci1pbnZlcnNlLWxpbmstYWN0aXZlLWNvbG9yO1xuICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogJG5hdmJhci1pbnZlcnNlLWxpbmstYWN0aXZlLWJnO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICA+IC5kaXNhYmxlZCA+IGEge1xuICAgICAgICAgICYsXG4gICAgICAgICAgJjpob3ZlcixcbiAgICAgICAgICAmOmZvY3VzIHtcbiAgICAgICAgICAgIGNvbG9yOiAkbmF2YmFyLWludmVyc2UtbGluay1kaXNhYmxlZC1jb2xvcjtcbiAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICRuYXZiYXItaW52ZXJzZS1saW5rLWRpc2FibGVkLWJnO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC5uYXZiYXItbGluayB7XG4gICAgY29sb3I6ICRuYXZiYXItaW52ZXJzZS1saW5rLWNvbG9yO1xuICAgICY6aG92ZXIge1xuICAgICAgY29sb3I6ICRuYXZiYXItaW52ZXJzZS1saW5rLWhvdmVyLWNvbG9yO1xuICAgIH1cbiAgfVxuXG4gIC5idG4tbGluayB7XG4gICAgY29sb3I6ICRuYXZiYXItaW52ZXJzZS1saW5rLWNvbG9yO1xuICAgICY6aG92ZXIsXG4gICAgJjpmb2N1cyB7XG4gICAgICBjb2xvcjogJG5hdmJhci1pbnZlcnNlLWxpbmstaG92ZXItY29sb3I7XG4gICAgfVxuICAgICZbZGlzYWJsZWRdLFxuICAgIGZpZWxkc2V0W2Rpc2FibGVkXSAmIHtcbiAgICAgICY6aG92ZXIsXG4gICAgICAmOmZvY3VzIHtcbiAgICAgICAgY29sb3I6ICRuYXZiYXItaW52ZXJzZS1saW5rLWRpc2FibGVkLWNvbG9yO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG4ubmF2YmFyLWRlZmF1bHQubmF2YmFyLXN0aWNreSB7XG4gIHBvc2l0aW9uOiBmaXhlZDtcbiAgdG9wOiAwO1xuICBsZWZ0OiAwO1xuICByaWdodDogMDtcbiAgei1pbmRleDogOTk5OTtcbiAgcGFkZGluZzogMTBweCAwO1xuICBvcGFjaXR5OiAwO1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZTNkKDAsIC0xMDAlLCAwKTtcbiAgYm94LXNoYWRvdzogMCAycHggNnB4IDAgcmdiYSgwLDAsMCwwLjA3KTtcbiAgYmFja2dyb3VuZDogI2ZmZjtcblxuICBAc3VwcG9ydHMgKGJhY2tkcm9wLWZpbHRlcjogc2F0dXJhdGUoMTgwJSkgYmx1cigyMHB4KSkge1xuICAgIGJhY2tncm91bmQ6IHJnYmEoI2ZmZiwgMC45KTtcbiAgICBiYWNrZHJvcC1maWx0ZXI6IHNhdHVyYXRlKDE4MCUpIGJsdXIoMjBweCk7XG4gIH1cblxuICAubmF2YmFyLW5hdiA+IGxpLmhlYWRlci1idG4td2hpdGUgYSB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogIzQ4OGFmZjtcbiAgICBjb2xvcjogI2ZmZjtcblxuICAgICY6aG92ZXIge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSg3NCwxMzksMjUyLC45KTtcbiAgICAgIGNvbG9yOiAjZmZmO1xuICAgIH1cbiAgfVxuXG4gICYtLXNob3csXG4gICYtLWhpZGUge1xuICAgIGFuaW1hdGlvbi1maWxsLW1vZGU6Zm9yd2FyZHM7XG4gIH1cblxuICAmLS1oaWRlIHtcbiAgICBhbmltYXRpb24tZHVyYXRpb246IDAuMXM7XG4gICAgYW5pbWF0aW9uLW5hbWU6IHNsaWRldXA7XG5cbiAgICBAa2V5ZnJhbWVzIHNsaWRldXAge1xuICAgICAgMCUge1xuICAgICAgICBvcGFjaXR5OiAxO1xuICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZTNkKDAsIDAsIDApO1xuICAgICAgfVxuICAgICAgMTAwJSB7XG4gICAgICAgIG9wYWNpdHk6IDA7XG4gICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlM2QoMCwgLTEwMCUsIDApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gICYtLXNob3cge1xuICAgIGFuaW1hdGlvbi1kdXJhdGlvbjogMC41cztcbiAgICBhbmltYXRpb24tbmFtZTogc2xpZGVkb3duO1xuICAgIGFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IGN1YmljLWJlemllcigwLjA3NSwgMC44MiwgMC4xNjUsIDEpO1xuXG4gICAgQGtleWZyYW1lcyBzbGlkZWRvd24ge1xuICAgICAgMCUge1xuICAgICAgICBvcGFjaXR5OiAwO1xuICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZTNkKDAsIC0xMDAlLCAwKTtcbiAgICAgIH1cbiAgICAgIDElIHtcbiAgICAgICAgb3BhY2l0eTogMTtcbiAgICAgIH1cbiAgICAgIDEwMCUge1xuICAgICAgICBvcGFjaXR5OiAxO1xuICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZTNkKDAsIDAsIDApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIEBtZWRpYSAobWF4LXdpZHRoOiAkc2NyZWVuLXhzLW1heCkge1xuICAgIGRpc3BsYXk6IG5vbmU7XG4gIH1cbn1cbiIsIi8vIE5hdmJhciB2ZXJ0aWNhbCBhbGlnblxuLy9cbi8vIFZlcnRpY2FsbHkgY2VudGVyIGVsZW1lbnRzIGluIHRoZSBuYXZiYXIuXG4vLyBFeGFtcGxlOiBhbiBlbGVtZW50IGhhcyBhIGhlaWdodCBvZiAzMHB4LCBzbyB3cml0ZSBvdXQgYC5uYXZiYXItdmVydGljYWwtYWxpZ24oMzBweCk7YCB0byBjYWxjdWxhdGUgdGhlIGFwcHJvcHJpYXRlIHRvcCBtYXJnaW4uXG5cbkBtaXhpbiBuYXZiYXItdmVydGljYWwtYWxpZ24oJGVsZW1lbnQtaGVpZ2h0KSB7XG4gIG1hcmdpbi10b3A6ICgoJG5hdmJhci1oZWlnaHQgLSAkZWxlbWVudC1oZWlnaHQpIC8gMik7XG4gIG1hcmdpbi1ib3R0b206ICgoJG5hdmJhci1oZWlnaHQgLSAkZWxlbWVudC1oZWlnaHQpIC8gMik7XG59XG4iLCIvL1xuLy8gTW9kYWxzXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4vLyAubW9kYWwtb3BlbiAgICAgIC0gYm9keSBjbGFzcyBmb3Iga2lsbGluZyB0aGUgc2Nyb2xsXG4vLyAubW9kYWwgICAgICAgICAgIC0gY29udGFpbmVyIHRvIHNjcm9sbCB3aXRoaW5cbi8vIC5tb2RhbC1kaWFsb2cgICAgLSBwb3NpdGlvbmluZyBzaGVsbCBmb3IgdGhlIGFjdHVhbCBtb2RhbFxuLy8gLm1vZGFsLWNvbnRlbnQgICAtIGFjdHVhbCBtb2RhbCB3LyBiZyBhbmQgY29ybmVycyBhbmQgc2hpdFxuXG4vLyBLaWxsIHRoZSBzY3JvbGwgb24gdGhlIGJvZHlcbi5tb2RhbC1vcGVuIHtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbn1cblxuLy8gQ29udGFpbmVyIHRoYXQgdGhlIG1vZGFsIHNjcm9sbHMgd2l0aGluXG4ubW9kYWwge1xuICBkaXNwbGF5OiBub25lO1xuICBvdmVyZmxvdzogaGlkZGVuO1xuICBwb3NpdGlvbjogZml4ZWQ7XG4gIHRvcDogMDtcbiAgcmlnaHQ6IDA7XG4gIGJvdHRvbTogMDtcbiAgbGVmdDogMDtcbiAgei1pbmRleDogJHppbmRleC1tb2RhbDtcbiAgLXdlYmtpdC1vdmVyZmxvdy1zY3JvbGxpbmc6IHRvdWNoO1xuXG4gIC8vIFByZXZlbnQgQ2hyb21lIG9uIFdpbmRvd3MgZnJvbSBhZGRpbmcgYSBmb2N1cyBvdXRsaW5lLiBGb3IgZGV0YWlscywgc2VlXG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9wdWxsLzEwOTUxLlxuICBvdXRsaW5lOiAwO1xuXG4gIC8vIFdoZW4gZmFkaW5nIGluIHRoZSBtb2RhbCwgYW5pbWF0ZSBpdCB0byBzbGlkZSBkb3duXG4gICYuZmFkZSAubW9kYWwtZGlhbG9nIHtcbiAgICBAaW5jbHVkZSB0cmFuc2xhdGUoMCwgLTI1JSk7XG4gICAgQGluY2x1ZGUgdHJhbnNpdGlvbi10cmFuc2Zvcm0oMC4zcyBlYXNlLW91dCk7XG4gIH1cbiAgJi5pbiAubW9kYWwtZGlhbG9nIHsgQGluY2x1ZGUgdHJhbnNsYXRlKDAsIDApIH1cbn1cbi5tb2RhbC1vcGVuIC5tb2RhbCB7XG4gIG92ZXJmbG93LXg6IGhpZGRlbjtcbiAgb3ZlcmZsb3cteTogYXV0bztcbn1cblxuLy8gU2hlbGwgZGl2IHRvIHBvc2l0aW9uIHRoZSBtb2RhbCB3aXRoIGJvdHRvbSBwYWRkaW5nXG4ubW9kYWwtZGlhbG9nIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICB3aWR0aDogYXV0bztcbiAgbWFyZ2luOiAxMHB4O1xufVxuXG4vLyBBY3R1YWwgbW9kYWxcbi5tb2RhbC1jb250ZW50IHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAkbW9kYWwtY29udGVudC1iZztcbiAgYm9yZGVyOiAxcHggc29saWQgJG1vZGFsLWNvbnRlbnQtZmFsbGJhY2stYm9yZGVyLWNvbG9yOyAvL29sZCBicm93c2VycyBmYWxsYmFjayAoaWU4IGV0YylcbiAgYm9yZGVyOiAxcHggc29saWQgJG1vZGFsLWNvbnRlbnQtYm9yZGVyLWNvbG9yO1xuICBib3JkZXItcmFkaXVzOiAkYm9yZGVyLXJhZGl1cy1sYXJnZTtcbiAgQGluY2x1ZGUgYm94LXNoYWRvdygwIDNweCA5cHggcmdiYSgwLDAsMCwuNSkpO1xuICBiYWNrZ3JvdW5kLWNsaXA6IHBhZGRpbmctYm94O1xuICAvLyBSZW1vdmUgZm9jdXMgb3V0bGluZSBmcm9tIG9wZW5lZCBtb2RhbFxuICBvdXRsaW5lOiAwO1xufVxuXG4vLyBNb2RhbCBiYWNrZ3JvdW5kXG4ubW9kYWwtYmFja2Ryb3Age1xuICBwb3NpdGlvbjogZml4ZWQ7XG4gIHRvcDogMDtcbiAgcmlnaHQ6IDA7XG4gIGJvdHRvbTogMDtcbiAgbGVmdDogMDtcbiAgei1pbmRleDogJHppbmRleC1tb2RhbC1iYWNrZ3JvdW5kO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAkbW9kYWwtYmFja2Ryb3AtYmc7XG4gIC8vIEZhZGUgZm9yIGJhY2tkcm9wXG4gICYuZmFkZSB7IEBpbmNsdWRlIG9wYWNpdHkoMCk7IH1cbiAgJi5pbiB7IEBpbmNsdWRlIG9wYWNpdHkoJG1vZGFsLWJhY2tkcm9wLW9wYWNpdHkpOyB9XG59XG5cbi8vIE1vZGFsIGhlYWRlclxuLy8gVG9wIHNlY3Rpb24gb2YgdGhlIG1vZGFsIHcvIHRpdGxlIGFuZCBkaXNtaXNzXG4ubW9kYWwtaGVhZGVyIHtcbiAgcGFkZGluZzogJG1vZGFsLXRpdGxlLXBhZGRpbmc7XG4gIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAkbW9kYWwtaGVhZGVyLWJvcmRlci1jb2xvcjtcbiAgbWluLWhlaWdodDogKCRtb2RhbC10aXRsZS1wYWRkaW5nICsgJG1vZGFsLXRpdGxlLWxpbmUtaGVpZ2h0KTtcbn1cbi8vIENsb3NlIGljb25cbi5tb2RhbC1oZWFkZXIgLmNsb3NlIHtcbiAgbWFyZ2luLXRvcDogLTJweDtcbn1cblxuLy8gVGl0bGUgdGV4dCB3aXRoaW4gaGVhZGVyXG4ubW9kYWwtdGl0bGUge1xuICBtYXJnaW46IDA7XG4gIGxpbmUtaGVpZ2h0OiAkbW9kYWwtdGl0bGUtbGluZS1oZWlnaHQ7XG59XG5cbi8vIE1vZGFsIGJvZHlcbi8vIFdoZXJlIGFsbCBtb2RhbCBjb250ZW50IHJlc2lkZXMgKHNpYmxpbmcgb2YgLm1vZGFsLWhlYWRlciBhbmQgLm1vZGFsLWZvb3Rlcilcbi5tb2RhbC1ib2R5IHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBwYWRkaW5nOiAkbW9kYWwtaW5uZXItcGFkZGluZztcbn1cblxuLy8gRm9vdGVyIChmb3IgYWN0aW9ucylcbi5tb2RhbC1mb290ZXIge1xuICBwYWRkaW5nOiAkbW9kYWwtaW5uZXItcGFkZGluZztcbiAgdGV4dC1hbGlnbjogcmlnaHQ7IC8vIHJpZ2h0IGFsaWduIGJ1dHRvbnNcbiAgYm9yZGVyLXRvcDogMXB4IHNvbGlkICRtb2RhbC1mb290ZXItYm9yZGVyLWNvbG9yO1xuICBAaW5jbHVkZSBjbGVhcmZpeDsgLy8gY2xlYXIgaXQgaW4gY2FzZSBmb2xrcyB1c2UgLnB1bGwtKiBjbGFzc2VzIG9uIGJ1dHRvbnNcblxuICAvLyBQcm9wZXJseSBzcGFjZSBvdXQgYnV0dG9uc1xuICAuYnRuICsgLmJ0biB7XG4gICAgbWFyZ2luLWxlZnQ6IDVweDtcbiAgICBtYXJnaW4tYm90dG9tOiAwOyAvLyBhY2NvdW50IGZvciBpbnB1dFt0eXBlPVwic3VibWl0XCJdIHdoaWNoIGdldHMgdGhlIGJvdHRvbSBtYXJnaW4gbGlrZSBhbGwgb3RoZXIgaW5wdXRzXG4gIH1cbiAgLy8gYnV0IG92ZXJyaWRlIHRoYXQgZm9yIGJ1dHRvbiBncm91cHNcbiAgLmJ0bi1ncm91cCAuYnRuICsgLmJ0biB7XG4gICAgbWFyZ2luLWxlZnQ6IC0xcHg7XG4gIH1cbiAgLy8gYW5kIG92ZXJyaWRlIGl0IGZvciBibG9jayBidXR0b25zIGFzIHdlbGxcbiAgLmJ0bi1ibG9jayArIC5idG4tYmxvY2sge1xuICAgIG1hcmdpbi1sZWZ0OiAwO1xuICB9XG59XG5cbi8vIE1lYXN1cmUgc2Nyb2xsYmFyIHdpZHRoIGZvciBwYWRkaW5nIGJvZHkgZHVyaW5nIG1vZGFsIHNob3cvaGlkZVxuLm1vZGFsLXNjcm9sbGJhci1tZWFzdXJlIHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB0b3A6IC05OTk5cHg7XG4gIHdpZHRoOiA1MHB4O1xuICBoZWlnaHQ6IDUwcHg7XG4gIG92ZXJmbG93OiBzY3JvbGw7XG59XG5cbi8vIFNjYWxlIHVwIHRoZSBtb2RhbFxuQG1lZGlhIChtaW4td2lkdGg6ICRzY3JlZW4tc20tbWluKSB7XG4gIC8vIEF1dG9tYXRpY2FsbHkgc2V0IG1vZGFsJ3Mgd2lkdGggZm9yIGxhcmdlciB2aWV3cG9ydHNcbiAgLm1vZGFsLWRpYWxvZyB7XG4gICAgd2lkdGg6ICRtb2RhbC1tZDtcbiAgICBtYXJnaW46IDMwcHggYXV0bztcbiAgfVxuICAubW9kYWwtY29udGVudCB7XG4gICAgQGluY2x1ZGUgYm94LXNoYWRvdygwIDVweCAxNXB4IHJnYmEoMCwwLDAsLjUpKTtcbiAgfVxuXG4gIC8vIE1vZGFsIHNpemVzXG4gIC5tb2RhbC1zbSB7IHdpZHRoOiAkbW9kYWwtc207IH1cbn1cblxuQG1lZGlhIChtaW4td2lkdGg6ICRzY3JlZW4tbWQtbWluKSB7XG4gIC5tb2RhbC1sZyB7IHdpZHRoOiAkbW9kYWwtbGc7IH1cbn1cbiIsIi8vXG4vLyBUb29sdGlwc1xuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuXG4vLyBCYXNlIGNsYXNzXG4udG9vbHRpcCB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgei1pbmRleDogJHppbmRleC10b29sdGlwO1xuICBkaXNwbGF5OiBibG9jaztcbiAgLy8gUmVzZXQgZm9udCBhbmQgdGV4dCBwcm9wZXJ0aWVzIGdpdmVuIG5ldyBpbnNlcnRpb24gbWV0aG9kXG4gIGZvbnQtZmFtaWx5OiAkZm9udC1mYW1pbHktYmFzZTtcbiAgZm9udC1zaXplOiAkZm9udC1zaXplLXNtYWxsO1xuICBmb250LXdlaWdodDogbm9ybWFsO1xuICBsaW5lLWhlaWdodDogMS40O1xuICBAaW5jbHVkZSBvcGFjaXR5KDApO1xuXG4gICYuaW4gICAgIHsgQGluY2x1ZGUgb3BhY2l0eSgkdG9vbHRpcC1vcGFjaXR5KTsgfVxuICAmLnRvcCAgICB7IG1hcmdpbi10b3A6ICAtM3B4OyBwYWRkaW5nOiAkdG9vbHRpcC1hcnJvdy13aWR0aCAwOyB9XG4gICYucmlnaHQgIHsgbWFyZ2luLWxlZnQ6ICAzcHg7IHBhZGRpbmc6IDAgJHRvb2x0aXAtYXJyb3ctd2lkdGg7IH1cbiAgJi5ib3R0b20geyBtYXJnaW4tdG9wOiAgIDNweDsgcGFkZGluZzogJHRvb2x0aXAtYXJyb3ctd2lkdGggMDsgfVxuICAmLmxlZnQgICB7IG1hcmdpbi1sZWZ0OiAtM3B4OyBwYWRkaW5nOiAwICR0b29sdGlwLWFycm93LXdpZHRoOyB9XG59XG5cbi8vIFdyYXBwZXIgZm9yIHRoZSB0b29sdGlwIGNvbnRlbnRcbi50b29sdGlwLWlubmVyIHtcbiAgbWF4LXdpZHRoOiAkdG9vbHRpcC1tYXgtd2lkdGg7XG4gIHBhZGRpbmc6IDNweCA4cHg7XG4gIGNvbG9yOiAkdG9vbHRpcC1jb2xvcjtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG4gIGJhY2tncm91bmQtY29sb3I6ICR0b29sdGlwLWJnO1xuICBib3JkZXItcmFkaXVzOiAkYm9yZGVyLXJhZGl1cy1iYXNlO1xufVxuXG4vLyBBcnJvd3Ncbi50b29sdGlwLWFycm93IHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB3aWR0aDogMDtcbiAgaGVpZ2h0OiAwO1xuICBib3JkZXItY29sb3I6IHRyYW5zcGFyZW50O1xuICBib3JkZXItc3R5bGU6IHNvbGlkO1xufVxuLy8gTm90ZTogRGVwcmVjYXRlZCAudG9wLWxlZnQsIC50b3AtcmlnaHQsIC5ib3R0b20tbGVmdCwgYW5kIC5ib3R0b20tcmlnaHQgYXMgb2YgdjMuMy4xXG4udG9vbHRpcCB7XG4gICYudG9wIC50b29sdGlwLWFycm93IHtcbiAgICBib3R0b206IDA7XG4gICAgbGVmdDogNTAlO1xuICAgIG1hcmdpbi1sZWZ0OiAtJHRvb2x0aXAtYXJyb3ctd2lkdGg7XG4gICAgYm9yZGVyLXdpZHRoOiAkdG9vbHRpcC1hcnJvdy13aWR0aCAkdG9vbHRpcC1hcnJvdy13aWR0aCAwO1xuICAgIGJvcmRlci10b3AtY29sb3I6ICR0b29sdGlwLWFycm93LWNvbG9yO1xuICB9XG4gICYudG9wLWxlZnQgLnRvb2x0aXAtYXJyb3cge1xuICAgIGJvdHRvbTogMDtcbiAgICByaWdodDogJHRvb2x0aXAtYXJyb3ctd2lkdGg7XG4gICAgbWFyZ2luLWJvdHRvbTogLSR0b29sdGlwLWFycm93LXdpZHRoO1xuICAgIGJvcmRlci13aWR0aDogJHRvb2x0aXAtYXJyb3ctd2lkdGggJHRvb2x0aXAtYXJyb3ctd2lkdGggMDtcbiAgICBib3JkZXItdG9wLWNvbG9yOiAkdG9vbHRpcC1hcnJvdy1jb2xvcjtcbiAgfVxuICAmLnRvcC1yaWdodCAudG9vbHRpcC1hcnJvdyB7XG4gICAgYm90dG9tOiAwO1xuICAgIGxlZnQ6ICR0b29sdGlwLWFycm93LXdpZHRoO1xuICAgIG1hcmdpbi1ib3R0b206IC0kdG9vbHRpcC1hcnJvdy13aWR0aDtcbiAgICBib3JkZXItd2lkdGg6ICR0b29sdGlwLWFycm93LXdpZHRoICR0b29sdGlwLWFycm93LXdpZHRoIDA7XG4gICAgYm9yZGVyLXRvcC1jb2xvcjogJHRvb2x0aXAtYXJyb3ctY29sb3I7XG4gIH1cbiAgJi5yaWdodCAudG9vbHRpcC1hcnJvdyB7XG4gICAgdG9wOiA1MCU7XG4gICAgbGVmdDogMDtcbiAgICBtYXJnaW4tdG9wOiAtJHRvb2x0aXAtYXJyb3ctd2lkdGg7XG4gICAgYm9yZGVyLXdpZHRoOiAkdG9vbHRpcC1hcnJvdy13aWR0aCAkdG9vbHRpcC1hcnJvdy13aWR0aCAkdG9vbHRpcC1hcnJvdy13aWR0aCAwO1xuICAgIGJvcmRlci1yaWdodC1jb2xvcjogJHRvb2x0aXAtYXJyb3ctY29sb3I7XG4gIH1cbiAgJi5sZWZ0IC50b29sdGlwLWFycm93IHtcbiAgICB0b3A6IDUwJTtcbiAgICByaWdodDogMDtcbiAgICBtYXJnaW4tdG9wOiAtJHRvb2x0aXAtYXJyb3ctd2lkdGg7XG4gICAgYm9yZGVyLXdpZHRoOiAkdG9vbHRpcC1hcnJvdy13aWR0aCAwICR0b29sdGlwLWFycm93LXdpZHRoICR0b29sdGlwLWFycm93LXdpZHRoO1xuICAgIGJvcmRlci1sZWZ0LWNvbG9yOiAkdG9vbHRpcC1hcnJvdy1jb2xvcjtcbiAgfVxuICAmLmJvdHRvbSAudG9vbHRpcC1hcnJvdyB7XG4gICAgdG9wOiAwO1xuICAgIGxlZnQ6IDUwJTtcbiAgICBtYXJnaW4tbGVmdDogLSR0b29sdGlwLWFycm93LXdpZHRoO1xuICAgIGJvcmRlci13aWR0aDogMCAkdG9vbHRpcC1hcnJvdy13aWR0aCAkdG9vbHRpcC1hcnJvdy13aWR0aDtcbiAgICBib3JkZXItYm90dG9tLWNvbG9yOiAkdG9vbHRpcC1hcnJvdy1jb2xvcjtcbiAgfVxuICAmLmJvdHRvbS1sZWZ0IC50b29sdGlwLWFycm93IHtcbiAgICB0b3A6IDA7XG4gICAgcmlnaHQ6ICR0b29sdGlwLWFycm93LXdpZHRoO1xuICAgIG1hcmdpbi10b3A6IC0kdG9vbHRpcC1hcnJvdy13aWR0aDtcbiAgICBib3JkZXItd2lkdGg6IDAgJHRvb2x0aXAtYXJyb3ctd2lkdGggJHRvb2x0aXAtYXJyb3ctd2lkdGg7XG4gICAgYm9yZGVyLWJvdHRvbS1jb2xvcjogJHRvb2x0aXAtYXJyb3ctY29sb3I7XG4gIH1cbiAgJi5ib3R0b20tcmlnaHQgLnRvb2x0aXAtYXJyb3cge1xuICAgIHRvcDogMDtcbiAgICBsZWZ0OiAkdG9vbHRpcC1hcnJvdy13aWR0aDtcbiAgICBtYXJnaW4tdG9wOiAtJHRvb2x0aXAtYXJyb3ctd2lkdGg7XG4gICAgYm9yZGVyLXdpZHRoOiAwICR0b29sdGlwLWFycm93LXdpZHRoICR0b29sdGlwLWFycm93LXdpZHRoO1xuICAgIGJvcmRlci1ib3R0b20tY29sb3I6ICR0b29sdGlwLWFycm93LWNvbG9yO1xuICB9XG59XG4iLCIvL1xuLy8gVXRpbGl0eSBjbGFzc2VzXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5cbi8vIEZsb2F0c1xuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4uY2xlYXJmaXgge1xuICBAaW5jbHVkZSBjbGVhcmZpeDtcbn1cbi5jZW50ZXItYmxvY2sge1xuICBAaW5jbHVkZSBjZW50ZXItYmxvY2s7XG59XG4ucHVsbC1yaWdodCB7XG4gIGZsb2F0OiByaWdodCAhaW1wb3J0YW50O1xufVxuLnB1bGwtbGVmdCB7XG4gIGZsb2F0OiBsZWZ0ICFpbXBvcnRhbnQ7XG59XG5cblxuLy8gVG9nZ2xpbmcgY29udGVudFxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4vLyBOb3RlOiBEZXByZWNhdGVkIC5oaWRlIGluIGZhdm9yIG9mIC5oaWRkZW4gb3IgLnNyLW9ubHkgKGFzIGFwcHJvcHJpYXRlKSBpbiB2My4wLjFcbi5oaWRlIHtcbiAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50O1xufVxuLnNob3cge1xuICBkaXNwbGF5OiBibG9jayAhaW1wb3J0YW50O1xufVxuLmludmlzaWJsZSB7XG4gIHZpc2liaWxpdHk6IGhpZGRlbjtcbn1cbi50ZXh0LWhpZGUge1xuICBAaW5jbHVkZSB0ZXh0LWhpZGU7XG59XG5cblxuLy8gSGlkZSBmcm9tIHNjcmVlbnJlYWRlcnMgYW5kIGJyb3dzZXJzXG4vL1xuLy8gQ3JlZGl0OiBIVE1MNSBCb2lsZXJwbGF0ZVxuXG4uaGlkZGVuIHtcbiAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50O1xufVxuXG5cbi8vIEZvciBBZmZpeCBwbHVnaW5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLmFmZml4IHtcbiAgcG9zaXRpb246IGZpeGVkO1xufVxuIiwiLy8gQ2VudGVyLWFsaWduIGEgYmxvY2sgbGV2ZWwgZWxlbWVudFxuXG5AbWl4aW4gY2VudGVyLWJsb2NrKCkge1xuICBkaXNwbGF5OiBibG9jaztcbiAgbWFyZ2luLWxlZnQ6IGF1dG87XG4gIG1hcmdpbi1yaWdodDogYXV0bztcbn1cbiIsIi8vIENTUyBpbWFnZSByZXBsYWNlbWVudFxuLy9cbi8vIEhlYWRzIHVwISB2MyBsYXVuY2hlZCB3aXRoIHdpdGggb25seSBgLmhpZGUtdGV4dCgpYCwgYnV0IHBlciBvdXIgcGF0dGVybiBmb3Jcbi8vIG1peGlucyBiZWluZyByZXVzZWQgYXMgY2xhc3NlcyB3aXRoIHRoZSBzYW1lIG5hbWUsIHRoaXMgZG9lc24ndCBob2xkIHVwLiBBc1xuLy8gb2YgdjMuMC4xIHdlIGhhdmUgYWRkZWQgYC50ZXh0LWhpZGUoKWAgYW5kIGRlcHJlY2F0ZWQgYC5oaWRlLXRleHQoKWAuXG4vL1xuLy8gU291cmNlOiBodHRwczovL2dpdGh1Yi5jb20vaDVicC9odG1sNS1ib2lsZXJwbGF0ZS9jb21taXQvYWEwMzk2ZWFlNzU3XG5cbi8vIERlcHJlY2F0ZWQgYXMgb2YgdjMuMC4xICh3aWxsIGJlIHJlbW92ZWQgaW4gdjQpXG5AbWl4aW4gaGlkZS10ZXh0KCkge1xuICBmb250OiAwLzAgYTtcbiAgY29sb3I6IHRyYW5zcGFyZW50O1xuICB0ZXh0LXNoYWRvdzogbm9uZTtcbiAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7XG4gIGJvcmRlcjogMDtcbn1cblxuLy8gTmV3IG1peGluIHRvIHVzZSBhcyBvZiB2My4wLjFcbkBtaXhpbiB0ZXh0LWhpZGUoKSB7XG4gIEBpbmNsdWRlIGhpZGUtdGV4dDtcbn1cbiIsIi8vXG4vLyBSZXNwb25zaXZlOiBVdGlsaXR5IGNsYXNzZXNcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cblxuLy8gSUUxMCBpbiBXaW5kb3dzIChQaG9uZSkgOFxuLy9cbi8vIFN1cHBvcnQgZm9yIHJlc3BvbnNpdmUgdmlld3MgdmlhIG1lZGlhIHF1ZXJpZXMgaXMga2luZCBvZiBib3JrZWQgaW4gSUUxMCwgZm9yXG4vLyBTdXJmYWNlL2Rlc2t0b3AgaW4gc3BsaXQgdmlldyBhbmQgZm9yIFdpbmRvd3MgUGhvbmUgOC4gVGhpcyBwYXJ0aWN1bGFyIGZpeFxuLy8gbXVzdCBiZSBhY2NvbXBhbmllZCBieSBhIHNuaXBwZXQgb2YgSmF2YVNjcmlwdCB0byBzbmlmZiB0aGUgdXNlciBhZ2VudCBhbmRcbi8vIGFwcGx5IHNvbWUgY29uZGl0aW9uYWwgQ1NTIHRvICpvbmx5KiB0aGUgU3VyZmFjZS9kZXNrdG9wIFdpbmRvd3MgOC4gTG9vayBhdFxuLy8gb3VyIEdldHRpbmcgU3RhcnRlZCBwYWdlIGZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoaXMgYnVnLlxuLy9cbi8vIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgdGhlIGZvbGxvd2luZzpcbi8vXG4vLyBJc3N1ZTogaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2lzc3Vlcy8xMDQ5N1xuLy8gRG9jczogaHR0cDovL2dldGJvb3RzdHJhcC5jb20vZ2V0dGluZy1zdGFydGVkLyNzdXBwb3J0LWllMTAtd2lkdGhcbi8vIFNvdXJjZTogaHR0cDovL3RpbWthZGxlYy5jb20vMjAxMy8wMS93aW5kb3dzLXBob25lLTgtYW5kLWRldmljZS13aWR0aC9cbi8vIFNvdXJjZTogaHR0cDovL3RpbWthZGxlYy5jb20vMjAxMi8xMC9pZTEwLXNuYXAtbW9kZS1hbmQtcmVzcG9uc2l2ZS1kZXNpZ24vXG5cbkAtbXMtdmlld3BvcnQge1xuICB3aWR0aDogZGV2aWNlLXdpZHRoO1xufVxuXG5cbi8vIFZpc2liaWxpdHkgdXRpbGl0aWVzXG4vLyBOb3RlOiBEZXByZWNhdGVkIC52aXNpYmxlLXhzLCAudmlzaWJsZS1zbSwgLnZpc2libGUtbWQsIGFuZCAudmlzaWJsZS1sZyBhcyBvZiB2My4yLjBcblxuQGluY2x1ZGUgcmVzcG9uc2l2ZS1pbnZpc2liaWxpdHkoJy52aXNpYmxlLXhzJyk7XG5AaW5jbHVkZSByZXNwb25zaXZlLWludmlzaWJpbGl0eSgnLnZpc2libGUtc20nKTtcbkBpbmNsdWRlIHJlc3BvbnNpdmUtaW52aXNpYmlsaXR5KCcudmlzaWJsZS1tZCcpO1xuQGluY2x1ZGUgcmVzcG9uc2l2ZS1pbnZpc2liaWxpdHkoJy52aXNpYmxlLWxnJyk7XG5cbi52aXNpYmxlLXhzLWJsb2NrLFxuLnZpc2libGUteHMtaW5saW5lLFxuLnZpc2libGUteHMtaW5saW5lLWJsb2NrLFxuLnZpc2libGUtc20tYmxvY2ssXG4udmlzaWJsZS1zbS1pbmxpbmUsXG4udmlzaWJsZS1zbS1pbmxpbmUtYmxvY2ssXG4udmlzaWJsZS1tZC1ibG9jayxcbi52aXNpYmxlLW1kLWlubGluZSxcbi52aXNpYmxlLW1kLWlubGluZS1ibG9jayxcbi52aXNpYmxlLWxnLWJsb2NrLFxuLnZpc2libGUtbGctaW5saW5lLFxuLnZpc2libGUtbGctaW5saW5lLWJsb2NrIHtcbiAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50O1xufVxuXG5AbWVkaWEgKG1heC13aWR0aDogJHNjcmVlbi14cy1tYXgpIHtcbiAgQGluY2x1ZGUgcmVzcG9uc2l2ZS12aXNpYmlsaXR5KCcudmlzaWJsZS14cycpO1xufVxuLnZpc2libGUteHMtYmxvY2sge1xuICBAbWVkaWEgKG1heC13aWR0aDogJHNjcmVlbi14cy1tYXgpIHtcbiAgICBkaXNwbGF5OiBibG9jayAhaW1wb3J0YW50O1xuICB9XG59XG4udmlzaWJsZS14cy1pbmxpbmUge1xuICBAbWVkaWEgKG1heC13aWR0aDogJHNjcmVlbi14cy1tYXgpIHtcbiAgICBkaXNwbGF5OiBpbmxpbmUgIWltcG9ydGFudDtcbiAgfVxufVxuLnZpc2libGUteHMtaW5saW5lLWJsb2NrIHtcbiAgQG1lZGlhIChtYXgtd2lkdGg6ICRzY3JlZW4teHMtbWF4KSB7XG4gICAgZGlzcGxheTogaW5saW5lLWJsb2NrICFpbXBvcnRhbnQ7XG4gIH1cbn1cblxuQG1lZGlhIChtaW4td2lkdGg6ICRzY3JlZW4tc20tbWluKSBhbmQgKG1heC13aWR0aDogJHNjcmVlbi1zbS1tYXgpIHtcbiAgQGluY2x1ZGUgcmVzcG9uc2l2ZS12aXNpYmlsaXR5KCcudmlzaWJsZS1zbScpO1xufVxuLnZpc2libGUtc20tYmxvY2sge1xuICBAbWVkaWEgKG1pbi13aWR0aDogJHNjcmVlbi1zbS1taW4pIGFuZCAobWF4LXdpZHRoOiAkc2NyZWVuLXNtLW1heCkge1xuICAgIGRpc3BsYXk6IGJsb2NrICFpbXBvcnRhbnQ7XG4gIH1cbn1cbi52aXNpYmxlLXNtLWlubGluZSB7XG4gIEBtZWRpYSAobWluLXdpZHRoOiAkc2NyZWVuLXNtLW1pbikgYW5kIChtYXgtd2lkdGg6ICRzY3JlZW4tc20tbWF4KSB7XG4gICAgZGlzcGxheTogaW5saW5lICFpbXBvcnRhbnQ7XG4gIH1cbn1cbi52aXNpYmxlLXNtLWlubGluZS1ibG9jayB7XG4gIEBtZWRpYSAobWluLXdpZHRoOiAkc2NyZWVuLXNtLW1pbikgYW5kIChtYXgtd2lkdGg6ICRzY3JlZW4tc20tbWF4KSB7XG4gICAgZGlzcGxheTogaW5saW5lLWJsb2NrICFpbXBvcnRhbnQ7XG4gIH1cbn1cblxuQG1lZGlhIChtaW4td2lkdGg6ICRzY3JlZW4tbWQtbWluKSBhbmQgKG1heC13aWR0aDogJHNjcmVlbi1tZC1tYXgpIHtcbiAgQGluY2x1ZGUgcmVzcG9uc2l2ZS12aXNpYmlsaXR5KCcudmlzaWJsZS1tZCcpO1xufVxuLnZpc2libGUtbWQtYmxvY2sge1xuICBAbWVkaWEgKG1pbi13aWR0aDogJHNjcmVlbi1tZC1taW4pIGFuZCAobWF4LXdpZHRoOiAkc2NyZWVuLW1kLW1heCkge1xuICAgIGRpc3BsYXk6IGJsb2NrICFpbXBvcnRhbnQ7XG4gIH1cbn1cbi52aXNpYmxlLW1kLWlubGluZSB7XG4gIEBtZWRpYSAobWluLXdpZHRoOiAkc2NyZWVuLW1kLW1pbikgYW5kIChtYXgtd2lkdGg6ICRzY3JlZW4tbWQtbWF4KSB7XG4gICAgZGlzcGxheTogaW5saW5lICFpbXBvcnRhbnQ7XG4gIH1cbn1cbi52aXNpYmxlLW1kLWlubGluZS1ibG9jayB7XG4gIEBtZWRpYSAobWluLXdpZHRoOiAkc2NyZWVuLW1kLW1pbikgYW5kIChtYXgtd2lkdGg6ICRzY3JlZW4tbWQtbWF4KSB7XG4gICAgZGlzcGxheTogaW5saW5lLWJsb2NrICFpbXBvcnRhbnQ7XG4gIH1cbn1cblxuQG1lZGlhIChtaW4td2lkdGg6ICRzY3JlZW4tbGctbWluKSB7XG4gIEBpbmNsdWRlIHJlc3BvbnNpdmUtdmlzaWJpbGl0eSgnLnZpc2libGUtbGcnKTtcbn1cbi52aXNpYmxlLWxnLWJsb2NrIHtcbiAgQG1lZGlhIChtaW4td2lkdGg6ICRzY3JlZW4tbGctbWluKSB7XG4gICAgZGlzcGxheTogYmxvY2sgIWltcG9ydGFudDtcbiAgfVxufVxuLnZpc2libGUtbGctaW5saW5lIHtcbiAgQG1lZGlhIChtaW4td2lkdGg6ICRzY3JlZW4tbGctbWluKSB7XG4gICAgZGlzcGxheTogaW5saW5lICFpbXBvcnRhbnQ7XG4gIH1cbn1cbi52aXNpYmxlLWxnLWlubGluZS1ibG9jayB7XG4gIEBtZWRpYSAobWluLXdpZHRoOiAkc2NyZWVuLWxnLW1pbikge1xuICAgIGRpc3BsYXk6IGlubGluZS1ibG9jayAhaW1wb3J0YW50O1xuICB9XG59XG5cbkBtZWRpYSAobWF4LXdpZHRoOiAkc2NyZWVuLXhzLW1heCkge1xuICBAaW5jbHVkZSByZXNwb25zaXZlLWludmlzaWJpbGl0eSgnLmhpZGRlbi14cycpO1xufVxuXG5AbWVkaWEgKG1pbi13aWR0aDogJHNjcmVlbi1zbS1taW4pIGFuZCAobWF4LXdpZHRoOiAkc2NyZWVuLXNtLW1heCkge1xuICBAaW5jbHVkZSByZXNwb25zaXZlLWludmlzaWJpbGl0eSgnLmhpZGRlbi1zbScpO1xufVxuXG5AbWVkaWEgKG1pbi13aWR0aDogJHNjcmVlbi1tZC1taW4pIGFuZCAobWF4LXdpZHRoOiAkc2NyZWVuLW1kLW1heCkge1xuICBAaW5jbHVkZSByZXNwb25zaXZlLWludmlzaWJpbGl0eSgnLmhpZGRlbi1tZCcpO1xufVxuXG5AbWVkaWEgKG1pbi13aWR0aDogJHNjcmVlbi1sZy1taW4pIHtcbiAgQGluY2x1ZGUgcmVzcG9uc2l2ZS1pbnZpc2liaWxpdHkoJy5oaWRkZW4tbGcnKTtcbn1cblxuXG4vLyBQcmludCB1dGlsaXRpZXNcbi8vXG4vLyBNZWRpYSBxdWVyaWVzIGFyZSBwbGFjZWQgb24gdGhlIGluc2lkZSB0byBiZSBtaXhpbi1mcmllbmRseS5cblxuLy8gTm90ZTogRGVwcmVjYXRlZCAudmlzaWJsZS1wcmludCBhcyBvZiB2My4yLjBcblxuQGluY2x1ZGUgcmVzcG9uc2l2ZS1pbnZpc2liaWxpdHkoJy52aXNpYmxlLXByaW50Jyk7XG5cbkBtZWRpYSBwcmludCB7XG4gIEBpbmNsdWRlIHJlc3BvbnNpdmUtdmlzaWJpbGl0eSgnLnZpc2libGUtcHJpbnQnKTtcbn1cbi52aXNpYmxlLXByaW50LWJsb2NrIHtcbiAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50O1xuXG4gIEBtZWRpYSBwcmludCB7XG4gICAgZGlzcGxheTogYmxvY2sgIWltcG9ydGFudDtcbiAgfVxufVxuLnZpc2libGUtcHJpbnQtaW5saW5lIHtcbiAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50O1xuXG4gIEBtZWRpYSBwcmludCB7XG4gICAgZGlzcGxheTogaW5saW5lICFpbXBvcnRhbnQ7XG4gIH1cbn1cbi52aXNpYmxlLXByaW50LWlubGluZS1ibG9jayB7XG4gIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDtcblxuICBAbWVkaWEgcHJpbnQge1xuICAgIGRpc3BsYXk6IGlubGluZS1ibG9jayAhaW1wb3J0YW50O1xuICB9XG59XG5cbkBtZWRpYSBwcmludCB7XG4gIEBpbmNsdWRlIHJlc3BvbnNpdmUtaW52aXNpYmlsaXR5KCcuaGlkZGVuLXByaW50Jyk7XG59XG4iLCIvLyBSZXNwb25zaXZlIHV0aWxpdGllc1xuXG4vL1xuLy8gTW9yZSBlYXNpbHkgaW5jbHVkZSBhbGwgdGhlIHN0YXRlcyBmb3IgcmVzcG9uc2l2ZS11dGlsaXRpZXMubGVzcy5cbi8vIFtjb252ZXJ0ZXJdICRwYXJlbnQgaGFja1xuQG1peGluIHJlc3BvbnNpdmUtdmlzaWJpbGl0eSgkcGFyZW50KSB7XG4gICN7JHBhcmVudH0ge1xuICAgIGRpc3BsYXk6IGJsb2NrICFpbXBvcnRhbnQ7XG4gIH1cbiAgdGFibGUjeyRwYXJlbnR9ICB7IGRpc3BsYXk6IHRhYmxlOyB9XG4gIHRyI3skcGFyZW50fSAgICAgeyBkaXNwbGF5OiB0YWJsZS1yb3cgIWltcG9ydGFudDsgfVxuICB0aCN7JHBhcmVudH0sXG4gIHRkI3skcGFyZW50fSAgICAgeyBkaXNwbGF5OiB0YWJsZS1jZWxsICFpbXBvcnRhbnQ7IH1cbn1cblxuLy8gW2NvbnZlcnRlcl0gJHBhcmVudCBoYWNrXG5AbWl4aW4gcmVzcG9uc2l2ZS1pbnZpc2liaWxpdHkoJHBhcmVudCkge1xuICAjeyRwYXJlbnR9IHtcbiAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7XG4gIH1cbn1cbiJdfQ== */\n"
  },
  {
    "path": "content/css/ionic-hljs.css",
    "content": "pre{\n  background-color: white;\n}\n.hljs {\n  display: block;\n  padding: 0.5em;\n  background: #ffffff;\n}\n\n\n/* Done */\n\n.hljs-comment,\n.hljs-template_comment,\n.hljs-javadoc,\n.hljs-comment * {\n  color: #999988;\n  font-style: italic\n}\n\n\n/* Done */\n\n.hljs-keyword,\n.method,\n.hljs-list .hljs-title,\n.clojure .hljs-built_in,\n.nginx .hljs-title,\n.hljs-tag .hljs-title,\n.setting .hljs-value,\n.hljs-winutils,\n.tex .hljs-command,\n.http .hljs-title,\n.hljs-request,\n.hljs-status {\n  color: #445588;\n  font-weight:bold;\n}\n\n.hljs-envvar,\n.tex .hljs-special {\n  color: #660;\n}\n\n\n/* Done */\n\n.hljs-string,\n.hljs-tag .hljs-value,\n.hljs-cdata,\n.hljs-filter .hljs-argument,\n.hljs-attr_selector,\n.apache .hljs-cbracket,\n.hljs-date,\n.hljs-regexp,\n.coffeescript .hljs-attribute {\n  color: #d14;\n}\n\n.hljs-sub .hljs-identifier,\n.hljs-pi,\n.hljs-tag,\n.hljs-tag .hljs-keyword,\n.hljs-decorator,\n.ini .hljs-title,\n.hljs-shebang,\n.hljs-prompt,\n.hljs-hexcolor,\n.hljs-rules .hljs-value,\n.css .hljs-value .hljs-number,\n.hljs-literal,\n.hljs-symbol,\n.ruby .hljs-symbol .hljs-string,\n.hljs-number,\n.css .hljs-function,\n.clojure .hljs-attribute {\n  color: #009999;\n}\n\n.hljs-class .hljs-title,\n.haskell .hljs-type,\n.smalltalk .hljs-class,\n.hljs-javadoctag,\n.hljs-yardoctag,\n.hljs-phpdoc,\n.hljs-typename,\n.hljs-tag .hljs-attribute,\n.hljs-doctype,\n.hljs-class .hljs-id,\n.hljs-built_in,\n.setting,\n.hljs-params,\n.hljs-variable,\n.clojure .hljs-title {\n  color: #0086B3;\n}\n\n.css .hljs-tag,\n.hljs-rules .hljs-property,\n.hljs-pseudo,\n.hljs-subst {\n  color: #000;\n}\n\n.css .hljs-class,\n.css .hljs-id {\n  color: #9B703F;\n}\n\n.hljs-value .hljs-important {\n  color: #ff7700;\n  font-weight: bold;\n}\n\n.hljs-rules .hljs-keyword {\n  color: #C5AF75;\n}\n\n.hljs-annotation,\n.apache .hljs-sqbracket,\n.nginx .hljs-built_in {\n  color: #9B859D;\n}\n\n.hljs-preprocessor,\n.hljs-preprocessor *,\n.hljs-pragma {\n  color: #444;\n}\n\n.tex .hljs-formula {\n  background-color: #EEE;\n  font-style: italic;\n}\n\n.diff .hljs-header,\n.hljs-chunk {\n  color: #808080;\n  font-weight: bold;\n}\n\n.diff .hljs-change {\n  background-color: #BCCFF9;\n}\n\n.hljs-addition {\n  background-color: #BAEEBA;\n}\n\n.hljs-deletion {\n  background-color: #FFC8BD;\n}\n\n.hljs-comment .hljs-yardoctag {\n  font-weight: bold;\n}\n"
  },
  {
    "path": "content/css/ionic.css",
    "content": "@charset \"UTF-8\";\n/*! normalize.css v3.0.2 | MIT License | github.com/necolas/normalize.css */\naudio,\ncanvas,\nprogress,\nvideo {\n  vertical-align: baseline; }\n\naudio:not([controls]) {\n  display: none;\n  height: 0; }\n\nb,\nstrong {\n  font-weight: bold; }\n\nimg {\n  border: 0; }\n\nsvg:not(:root) {\n  overflow: hidden; }\n\nfigure {\n  margin: 1em 40px; }\n\nhr {\n  box-sizing: content-box;\n  height: 0; }\n\npre {\n  overflow: auto; }\n\ncode,\nkbd,\npre,\nsamp {\n  font-family: monospace, monospace;\n  font-size: 1em; }\n\nlabel,\ninput,\nselect,\ntextarea {\n  line-height: normal;\n  font-family: inherit; }\n\nform,\ninput,\noptgroup,\nselect {\n  color: inherit;\n  font: inherit;\n  margin: 0; }\n\nhtml input[type=\"button\"],\ninput[type=\"reset\"],\ninput[type=\"submit\"] {\n  -webkit-appearance: button;\n  cursor: pointer; }\n\nbutton[disabled],\nhtml input[disabled] {\n  cursor: default; }\n\nbutton::-moz-focus-inner,\ninput::-moz-focus-inner {\n  border: 0;\n  padding: 0; }\n\ninput[type=\"checkbox\"],\ninput[type=\"radio\"] {\n  box-sizing: border-box;\n  padding: 0; }\n\ninput[type=\"number\"]::-webkit-inner-spin-button,\ninput[type=\"number\"]::-webkit-outer-spin-button {\n  height: auto; }\n\ninput[type=\"search\"]::-webkit-search-cancel-button,\ninput[type=\"search\"]::-webkit-search-decoration {\n  -webkit-appearance: none; }\n\ntable {\n  border-collapse: collapse;\n  border-spacing: 0; }\n\ntd,\nth {\n  padding: 0; }\n\n* {\n  box-sizing: border-box;\n  -webkit-tap-highlight-color: transparent;\n  -webkit-tap-highlight-color: transparent;\n  -webkit-touch-callout: none; }\n\nhtml {\n  width: 100%;\n  height: 100%;\n  -ms-text-size-adjust: 100%;\n  -webkit-text-size-adjust: 100%; }\n\nbody {\n  position: fixed;\n  overflow: hidden;\n  width: 100%;\n  height: 100%;\n  max-width: 100%;\n  max-height: 100%;\n  margin: 0;\n  padding: 0;\n  word-wrap: break-word;\n  -ms-touch-action: manipulation;\n  touch-action: manipulation;\n  -webkit-user-drag: none;\n  -ms-content-zooming: none;\n  -webkit-font-smoothing: antialiased;\n  font-smoothing: antialiased;\n  text-rendering: optimizeLegibility;\n  -webkit-text-size-adjust: none;\n  -ms-text-size-adjust: none;\n  text-size-adjust: none;\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  -ms-user-select: none;\n  user-select: none;\n  background-color: #fff; }\n\nion-app,\nion-nav,\nion-tabs {\n  display: -webkit-box;\n  display: -webkit-flex;\n  display: -ms-flexbox;\n  display: flex;\n  -webkit-box-orient: vertical;\n  -webkit-box-direction: normal;\n  -webkit-flex-direction: column;\n  -ms-flex-direction: column;\n  flex-direction: column;\n  position: absolute;\n  top: 0;\n  left: 0;\n  width: 100%;\n  height: 100%;\n  overflow: hidden; }\n\nion-navbar-section {\n  display: block;\n  width: 100%;\n  min-height: 50px; }\n\nion-content-section {\n  display: block;\n  -webkit-box-flex: 1;\n  -webkit-flex: 1;\n  -ms-flex: 1;\n  flex: 1;\n  position: relative;\n  width: 100%;\n  height: 100%; }\n\nion-page {\n  display: none;\n  -webkit-box-orient: vertical;\n  -webkit-box-direction: normal;\n  -webkit-flex-direction: column;\n  -ms-flex-direction: column;\n  flex-direction: column;\n  position: absolute;\n  top: 0;\n  left: 0;\n  width: 100%;\n  height: 100%;\n  -webkit-transform: translateZ(0);\n  transform: translateZ(0); }\n  ion-page.show-page {\n    display: -webkit-box;\n    display: -webkit-flex;\n    display: -ms-flexbox;\n    display: flex; }\n\nion-content {\n  position: relative;\n  display: block;\n  width: 100%;\n  height: 100%;\n  -webkit-box-flex: 1;\n  -webkit-flex: 1;\n  -ms-flex: 1;\n  flex: 1;\n  background-color: #fff; }\n\nscroll-content {\n  position: absolute;\n  top: 0;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  display: block;\n  overflow-y: scroll;\n  overflow-x: hidden;\n  -webkit-overflow-scrolling: touch;\n  will-change: scroll-position; }\n\nion-tabbar {\n  display: block;\n  position: absolute;\n  top: 0;\n  left: 0;\n  width: 100%;\n  min-height: 50px; }\n\nion-tab-section {\n  display: block;\n  position: relative;\n  top: 0;\n  left: 0;\n  width: 100%;\n  height: 100%;\n  overflow: hidden; }\n\nion-page.tab-subpage {\n  position: fixed;\n  z-index: 10; }\n\nion-navbar {\n  display: block;\n  position: absolute;\n  top: 0;\n  left: 0;\n  width: 100%;\n  min-height: 50px;\n  z-index: 10; }\n\nion-navbar-section ion-navbar.toolbar {\n  position: absolute; }\n\nion-toolbar {\n  display: block;\n  width: 100%;\n  height: 50px; }\n\nion-toolbar[position=bottom] {\n  bottom: 0;\n  z-index: 10; }\n\n.sticky {\n  position: -webkit-sticky;\n  position: sticky;\n  top: 0; }\n\nhtml {\n  font-size: 62.5%; }\n\nbody {\n  font-size: 1.4rem;\n  font-family: -apple-system, \"Helvetica Neue\", \"Roboto\", sans-serif; }\n\na {\n  color: #387ef5;\n  background-color: transparent; }\n\n.enable-hover a:hover {\n  opacity: 0.7; }\n\nh1, h2, h3, h4, h5, h6 {\n  font-weight: 500;\n  line-height: 1.2;\n  margin-top: 1.6rem;\n  margin-bottom: 1rem; }\n  h1:first-child, h2:first-child, h3:first-child, h4:first-child, h5:first-child, h6:first-child {\n    margin-top: -0.3rem; }\n\nh1 + h2,\nh1 + h3,\nh2 + h3 {\n  margin-top: -0.3rem; }\n\nh1 {\n  font-size: 3.6rem;\n  margin-top: 2rem; }\n\nh2 {\n  font-size: 3rem;\n  margin-top: 1.8rem; }\n\nh3 {\n  font-size: 2.4rem; }\n\nh4 {\n  font-size: 2rem; }\n\nh5 {\n  font-size: 1.6rem; }\n\nh6 {\n  font-size: 1.4rem; }\n\nsmall {\n  font-size: 75%; }\n\nsub,\nsup {\n  font-size: 75%;\n  line-height: 0;\n  position: relative;\n  vertical-align: baseline; }\n\nsup {\n  top: -0.5em; }\n\nsub {\n  bottom: -0.25em; }\n\nh1[primary], h2[primary], h3[primary], h4[primary], h5[primary], h6[primary],\np[primary],\nspan[primary],\na:not([button])[primary],\nsmall[primary],\nb[primary],\ni[primary],\nu[primary],\nstrong[primary],\nem[primary],\nsub[primary],\nsup[primary] {\n  color: #387ef5 !important; }\n\nh1[secondary], h2[secondary], h3[secondary], h4[secondary], h5[secondary], h6[secondary],\np[secondary],\nspan[secondary],\na:not([button])[secondary],\nsmall[secondary],\nb[secondary],\ni[secondary],\nu[secondary],\nstrong[secondary],\nem[secondary],\nsub[secondary],\nsup[secondary] {\n  color: #32db64 !important; }\n\nh1[danger], h2[danger], h3[danger], h4[danger], h5[danger], h6[danger],\np[danger],\nspan[danger],\na:not([button])[danger],\nsmall[danger],\nb[danger],\ni[danger],\nu[danger],\nstrong[danger],\nem[danger],\nsub[danger],\nsup[danger] {\n  color: #f53d3d !important; }\n\nh1[light], h2[light], h3[light], h4[light], h5[light], h6[light],\np[light],\nspan[light],\na:not([button])[light],\nsmall[light],\nb[light],\ni[light],\nu[light],\nstrong[light],\nem[light],\nsub[light],\nsup[light] {\n  color: #f4f4f4 !important; }\n\nh1[dark], h2[dark], h3[dark], h4[dark], h5[dark], h6[dark],\np[dark],\nspan[dark],\na:not([button])[dark],\nsmall[dark],\nb[dark],\ni[dark],\nu[dark],\nstrong[dark],\nem[dark],\nsub[dark],\nsup[dark] {\n  color: #222 !important; }\n\n.align-left {\n  text-align: left; }\n\n.align-center {\n  text-align: center; }\n\n.align-right {\n  text-align: right; }\n\n.no-transition {\n  -webkit-transition: none !important;\n  transition: none !important; }\n\n.hide,\n[hidden],\ntemplate,\nroot-anchor {\n  display: none !important; }\n\n[padding],\n[padding] > scroll-content {\n  padding: 16px; }\n\n[padding-top] {\n  padding-top: 16px; }\n\n[padding-right] {\n  padding-right: 16px; }\n\n[padding-bottom] {\n  padding-bottom: 16px; }\n\n[padding-left] {\n  padding-left: 16px; }\n\n[padding-vertical] {\n  padding-top: 16px;\n  padding-bottom: 16px; }\n\n[padding-horizontal] {\n  padding-right: 16px;\n  padding-left: 16px; }\n\n:focus,\n:active {\n  outline: none; }\n\n.focus-outline :focus {\n  outline-offset: -1px;\n  outline: thin dotted; }\n\n.focus-outline button:focus,\n.focus-outline [button]:focus {\n  border-color: #51a7e8;\n  box-shadow: 0px 0px 8px 0px #51a7e8;\n  outline: thin solid #51a7e8; }\n\n.focus-outline ion-input.has-focus,\n.focus-outline button[ion-item]:focus,\n.focus-outline a[ion-item]:focus {\n  border-color: #51a7e8;\n  box-shadow: inset 0px 0px 8px 0px #51a7e8 !important; }\n\n.focus-outline ion-input :focus {\n  outline: none; }\n\nfocus-ctrl {\n  position: fixed; }\n  focus-ctrl input,\n  focus-ctrl button {\n    position: fixed;\n    top: 1px;\n    width: 9px;\n    left: -9999px;\n    z-index: 9999;\n    pointer-events: none; }\n\n.hide-focused-input {\n  -webkit-box-flex: 0 !important;\n  -webkit-flex: 0 0 8px !important;\n  -ms-flex: 0 0 8px !important;\n  flex: 0 0 8px !important;\n  margin: 0 !important;\n  -webkit-transform: translate3d(-9999px, 0, 0);\n  transform: translate3d(-9999px, 0, 0);\n  pointer-events: none; }\n\n[floating-label] .hide-focused-input,\n[stacked-label] .hide-focused-input {\n  margin-top: -8px !important; }\n\n.cloned-input {\n  pointer-events: none; }\n\nbackdrop {\n  position: absolute;\n  z-index: 1;\n  top: 0;\n  left: 0;\n  width: 100%;\n  height: 100%;\n  background-color: #000;\n  opacity: 0.01;\n  display: block;\n  -webkit-transform: translateZ(0);\n  transform: translateZ(0); }\n\nclick-block {\n  display: block;\n  position: absolute;\n  top: 0;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  opacity: 0;\n  z-index: 9999;\n  -webkit-transform: translate3d(0px, -100%, 0px);\n  transform: translate3d(0px, -100%, 0px);\n  -webkit-transform: translate3d(0px, calc(-100% + 1px), 0px);\n  transform: translate3d(0px, calc(-100% + 1px), 0px); }\n\n.click-block-active {\n  -webkit-transform: translate3d(0px, 0px, 0px);\n  transform: translate3d(0px, 0px, 0px); }\n\n@-webkit-keyframes rotation {\n  from {\n    -webkit-transform: rotate(0deg);\n    transform: rotate(0deg); }\n  to {\n    -webkit-transform: rotate(359deg);\n    transform: rotate(359deg); } }\n\n@keyframes rotation {\n  from {\n    -webkit-transform: rotate(0deg);\n    transform: rotate(0deg); }\n  to {\n    -webkit-transform: rotate(359deg);\n    transform: rotate(359deg); } }\n\nion-loading-icon {\n  display: -webkit-box;\n  display: -webkit-flex;\n  display: -ms-flexbox;\n  display: flex;\n  -webkit-align-self: center;\n  -ms-flex-item-align: center;\n  align-self: center;\n  margin: auto;\n  font-family: 'Ionicons';\n  font-size: 128px;\n  color: #666666;\n  -webkit-animation: rotation 45s infinite linear;\n  animation: rotation 45s infinite linear; }\n  ion-loading-icon:before {\n    content: \"\\f44e\"; }\n\n.toolbar {\n  position: relative;\n  z-index: 10;\n  display: -webkit-box;\n  display: -webkit-flex;\n  display: -ms-flexbox;\n  display: flex;\n  -webkit-box-orient: horizontal;\n  -webkit-box-direction: normal;\n  -webkit-flex-direction: row;\n  -ms-flex-direction: row;\n  flex-direction: row;\n  -webkit-box-align: center;\n  -webkit-align-items: center;\n  -ms-flex-align: center;\n  align-items: center;\n  -webkit-box-pack: justify;\n  -webkit-justify-content: space-between;\n  -ms-flex-pack: justify;\n  justify-content: space-between;\n  -webkit-box-ordinal-group: -9;\n  -webkit-order: -10;\n  -ms-flex-order: -10;\n  order: -10;\n  -webkit-box-flex: 0;\n  -webkit-flex: 0;\n  -ms-flex: 0;\n  flex: 0;\n  padding: 4px;\n  width: 100%;\n  overflow: hidden; }\n  .toolbar button,\n  .toolbar [button] {\n    background-color: transparent;\n    color: #387ef5;\n    box-shadow: none; }\n\n.toolbar toolbar-background {\n  position: absolute;\n  left: 0;\n  top: 0;\n  width: 100%;\n  height: 100%;\n  z-index: -1;\n  border: 0;\n  border-color: #b2b2b2;\n  background-color: #f8f8f8;\n  pointer-events: none; }\n\ntoolbar-content {\n  display: block;\n  -webkit-box-flex: 1;\n  -webkit-flex: 1;\n  -ms-flex: 1;\n  flex: 1;\n  -webkit-box-ordinal-group: 31;\n  -webkit-order: 30;\n  -ms-flex-order: 30;\n  order: 30; }\n\n.toolbar button:hover:not(.disable-hover),\n.toolbar [button]:hover:not(.disable-hover),\n.toolbar button.activated,\n.toolbar [button].activated {\n  color: #387ef5;\n  background-color: transparent; }\n\n.toolbar[position=bottom] {\n  -webkit-box-ordinal-group: 11;\n  -webkit-order: 10;\n  -ms-flex-order: 10;\n  order: 10; }\n\nion-title {\n  -webkit-box-flex: 1;\n  -webkit-flex: 1;\n  -ms-flex: 1;\n  flex: 1;\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.toolbar-title {\n  display: block;\n  width: 100%;\n  white-space: nowrap;\n  text-overflow: ellipsis;\n  overflow: hidden;\n  color: #000; }\n\n.toolbar [menu-toggle] {\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  margin: 0 6px;\n  padding: 0;\n  min-width: 36px;\n  -webkit-box-ordinal-group: 21;\n  -webkit-order: 20;\n  -ms-flex-order: 20;\n  order: 20;\n  box-shadow: none; }\n\n.toolbar [menu-toggle][secondary] {\n  -webkit-box-ordinal-group: 61;\n  -webkit-order: 60;\n  -ms-flex-order: 60;\n  order: 60; }\n\n.toolbar [menu-toggle] icon {\n  padding: 0 6px;\n  font-size: 2.8rem; }\n\nion-nav-items {\n  display: block;\n  margin: 0 0.2rem;\n  pointer-events: none;\n  -webkit-box-ordinal-group: 41;\n  -webkit-order: 40;\n  -ms-flex-order: 40;\n  order: 40; }\n\nion-nav-items[secondary] {\n  -webkit-box-ordinal-group: 51;\n  -webkit-order: 50;\n  -ms-flex-order: 50;\n  order: 50; }\n\nion-nav-items button,\nion-nav-items a,\nion-nav-items input,\nion-nav-items textarea,\nion-nav-items div {\n  pointer-events: auto; }\n\nion-nav-items,\n[menu-toggle] {\n  z-index: 99; }\n\n.toolbar[primary] toolbar-background {\n  background-color: #387ef5;\n  border-color: #0c60ee; }\n\n.toolbar[primary] .toolbar-title,\n.toolbar[primary] button,\n.toolbar[primary] [button],\n.toolbar[primary] button:hover:not(.disable-hover),\n.toolbar[primary] [button]:hover:not(.disable-hover),\n.toolbar[primary] a {\n  color: white; }\n\n.toolbar[secondary] toolbar-background {\n  background-color: #32db64;\n  border-color: #21b94e; }\n\n.toolbar[secondary] .toolbar-title,\n.toolbar[secondary] button,\n.toolbar[secondary] [button],\n.toolbar[secondary] button:hover:not(.disable-hover),\n.toolbar[secondary] [button]:hover:not(.disable-hover),\n.toolbar[secondary] a {\n  color: white; }\n\n.toolbar[danger] toolbar-background {\n  background-color: #f53d3d;\n  border-color: #f30c0c; }\n\n.toolbar[danger] .toolbar-title,\n.toolbar[danger] button,\n.toolbar[danger] [button],\n.toolbar[danger] button:hover:not(.disable-hover),\n.toolbar[danger] [button]:hover:not(.disable-hover),\n.toolbar[danger] a {\n  color: white; }\n\n.toolbar[light] toolbar-background {\n  background-color: #f4f4f4;\n  border-color: #dbdbdb; }\n\n.toolbar[light] .toolbar-title,\n.toolbar[light] button,\n.toolbar[light] [button],\n.toolbar[light] button:hover:not(.disable-hover),\n.toolbar[light] [button]:hover:not(.disable-hover),\n.toolbar[light] a {\n  color: black; }\n\n.toolbar[dark] toolbar-background {\n  background-color: #222;\n  border-color: #090909; }\n\n.toolbar[dark] .toolbar-title,\n.toolbar[dark] button,\n.toolbar[dark] [button],\n.toolbar[dark] button:hover:not(.disable-hover),\n.toolbar[dark] [button]:hover:not(.disable-hover),\n.toolbar[dark] a {\n  color: white; }\n\nion-action-sheet {\n  position: absolute;\n  top: 0;\n  left: 0;\n  width: 100%;\n  height: 100%;\n  display: block;\n  z-index: 1000; }\n\naction-sheet-wrapper {\n  position: absolute;\n  z-index: 10;\n  bottom: 0;\n  left: 0;\n  right: 0;\n  width: 100%;\n  display: block;\n  max-width: 500px;\n  margin: auto;\n  -webkit-transform: translate3d(0, 100%, 0);\n  transform: translate3d(0, 100%, 0); }\n\n.action-sheet-container {\n  width: auto;\n  overflow: hidden; }\n  .action-sheet-container button {\n    display: block;\n    padding: 1px;\n    width: 100%;\n    margin: 0;\n    border-radius: 0;\n    border-color: #d1d3d6;\n    background-color: transparent;\n    color: #007aff;\n    font-size: 21px; }\n  .action-sheet-container button.activated {\n    box-shadow: none;\n    border-color: #d1d3d6;\n    background: #e4e5e7; }\n\n.action-sheet-title {\n  padding: 10px;\n  color: #8f8f8f;\n  text-align: center;\n  font-size: 13px; }\n\n.action-sheet-group {\n  background-color: #fff;\n  overflow: hidden; }\n  .action-sheet-group button {\n    border-width: 1px 0px 0px 0px; }\n  .action-sheet-group button:first-child:last-child {\n    border-width: 0; }\n\n.action-sheet-options {\n  background: #f1f2f3; }\n\nitem-badge {\n  display: inline-block;\n  padding: 3px 8px;\n  min-width: 10px;\n  border-radius: 10px;\n  vertical-align: baseline;\n  text-align: center;\n  white-space: nowrap;\n  font-size: 1.3rem;\n  font-weight: bold;\n  line-height: 1;\n  background: #ccc; }\n  item-badge:empty {\n    display: none; }\n\nbutton,\n[button] {\n  position: relative;\n  display: -webkit-inline-box;\n  display: -webkit-inline-flex;\n  display: -ms-inline-flexbox;\n  display: inline-flex;\n  -webkit-flex-shrink: 0;\n  -ms-flex-negative: 0;\n  flex-shrink: 0;\n  -webkit-flex-flow: row nowrap;\n  -ms-flex-flow: row nowrap;\n  flex-flow: row nowrap;\n  -webkit-box-align: center;\n  -webkit-align-items: center;\n  -ms-flex-align: center;\n  align-items: center;\n  -webkit-box-pack: center;\n  -webkit-justify-content: center;\n  -ms-flex-pack: center;\n  justify-content: center;\n  -webkit-transition: background-color, opacity 100ms linear;\n  transition: background-color, opacity 100ms linear;\n  margin: 0.4rem 0.2rem;\n  padding: 0 1em;\n  min-height: 2.8em;\n  line-height: 1;\n  border: 1px solid #ccc;\n  border: transparent;\n  border-radius: 4px;\n  font-size: 1.6rem;\n  font-family: inherit;\n  font-variant: inherit;\n  font-style: inherit;\n  white-space: nowrap;\n  text-overflow: ellipsis;\n  overflow: hidden;\n  text-align: center;\n  text-transform: none;\n  vertical-align: top;\n  vertical-align: -webkit-baseline-middle;\n  cursor: pointer;\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  -ms-user-select: none;\n  user-select: none;\n  -webkit-appearance: none;\n  -moz-appearance: none;\n  background: #387ef5;\n  color: white; }\n  button:hover:not(.disable-hover),\n  [button]:hover:not(.disable-hover) {\n    opacity: 0.8;\n    text-decoration: none; }\n  button.activated,\n  [button].activated {\n    opacity: 1;\n    background-color: #3474e1; }\n  button[block],\n  [button][block] {\n    display: -webkit-box;\n    display: -webkit-flex;\n    display: -ms-flexbox;\n    display: flex;\n    clear: both;\n    margin-right: 0;\n    margin-left: 0;\n    width: 100%; }\n    button[block]:after,\n    [button][block]:after {\n      clear: both; }\n  button[full],\n  [button][full] {\n    width: 100%;\n    margin-right: 0;\n    margin-left: 0;\n    border-radius: 0;\n    border-right-width: 0;\n    border-left-width: 0; }\n    button[full][outline],\n    [button][full][outline] {\n      border-radius: 0;\n      border-right-width: 0;\n      border-left-width: 0; }\n  button[round],\n  [button][round] {\n    border-radius: 64px;\n    padding: 0 2.6rem; }\n  button[disabled],\n  [button][disabled] {\n    opacity: 0.4;\n    cursor: default !important;\n    pointer-events: none; }\n\na[button] {\n  text-decoration: none; }\n\n[padding] > button[block]:first-child,\n[padding] > [button][block]:first-child {\n  margin-top: 0; }\n\nbutton[primary],\n[button][primary] {\n  background-color: #387ef5;\n  color: white; }\n  button[primary].activated,\n  [button][primary].activated {\n    background-color: #3474e1; }\n\nbutton[secondary],\n[button][secondary] {\n  background-color: #32db64;\n  color: white; }\n  button[secondary].activated,\n  [button][secondary].activated {\n    background-color: #2ec95c; }\n\nbutton[danger],\n[button][danger] {\n  background-color: #f53d3d;\n  color: white; }\n  button[danger].activated,\n  [button][danger].activated {\n    background-color: #e13838; }\n\nbutton[light],\n[button][light] {\n  background-color: #f4f4f4;\n  color: black; }\n  button[light].activated,\n  [button][light].activated {\n    background-color: #e0e0e0; }\n\nbutton[dark],\n[button][dark] {\n  background-color: #222;\n  color: white; }\n  button[dark].activated,\n  [button][dark].activated {\n    background-color: #343434; }\n\nbutton[clear], .ios .popup-buttons button, .ios .searchbar-cancel, .md .popup-buttons button,\n[button][clear] {\n  border-color: transparent;\n  background: transparent;\n  color: #3474e1; }\n  button[clear].activated, .ios .popup-buttons button.activated, .ios .activated.searchbar-cancel, .md .popup-buttons button.activated,\n  [button][clear].activated {\n    opacity: 0.4;\n    background: transparent; }\n  button[clear]:hover:not(.disable-hover), .ios .popup-buttons button:hover:not(.disable-hover), .ios .searchbar-cancel:hover:not(.disable-hover), .md .popup-buttons button:hover:not(.disable-hover),\n  [button][clear]:hover:not(.disable-hover) {\n    opacity: 0.6;\n    color: #3474e1; }\n\nbutton[clear][secondary], .ios .popup-buttons button[secondary], .ios [secondary].searchbar-cancel, .md .popup-buttons button[secondary],\n[button][clear][secondary] {\n  border-color: transparent;\n  background: transparent;\n  color: #2ec95c; }\n  button[clear][secondary]:hover:not(.disable-hover), .ios .popup-buttons button[secondary]:hover:not(.disable-hover), .ios [secondary].searchbar-cancel:hover:not(.disable-hover), .md .popup-buttons button[secondary]:hover:not(.disable-hover),\n  [button][clear][secondary]:hover:not(.disable-hover) {\n    color: #3fcd69; }\n\nbutton[clear][danger], .ios .popup-buttons button[danger], .ios [danger].searchbar-cancel, .md .popup-buttons button[danger],\n[button][clear][danger] {\n  border-color: transparent;\n  background: transparent;\n  color: #e13838; }\n  button[clear][danger]:hover:not(.disable-hover), .ios .popup-buttons button[danger]:hover:not(.disable-hover), .ios [danger].searchbar-cancel:hover:not(.disable-hover), .md .popup-buttons button[danger]:hover:not(.disable-hover),\n  [button][clear][danger]:hover:not(.disable-hover) {\n    color: #cf3434; }\n\nbutton[clear][light], .ios .popup-buttons button[light], .ios [light].searchbar-cancel, .md .popup-buttons button[light],\n[button][clear][light] {\n  border-color: transparent;\n  background: transparent;\n  color: #e0e0e0; }\n  button[clear][light]:hover:not(.disable-hover), .ios .popup-buttons button[light]:hover:not(.disable-hover), .ios [light].searchbar-cancel:hover:not(.disable-hover), .md .popup-buttons button[light]:hover:not(.disable-hover),\n  [button][clear][light]:hover:not(.disable-hover) {\n    color: #cecece; }\n\nbutton[clear][dark], .ios .popup-buttons button[dark], .ios [dark].searchbar-cancel, .md .popup-buttons button[dark],\n[button][clear][dark] {\n  border-color: transparent;\n  background: transparent;\n  color: #343434; }\n  button[clear][dark]:hover:not(.disable-hover), .ios .popup-buttons button[dark]:hover:not(.disable-hover), .ios [dark].searchbar-cancel:hover:not(.disable-hover), .md .popup-buttons button[dark]:hover:not(.disable-hover),\n  [button][clear][dark]:hover:not(.disable-hover) {\n    color: #444444; }\n\nbutton[outline],\n[button][outline] {\n  border: 1px solid #387ef5;\n  background: transparent;\n  color: #387ef5; }\n  button[outline].activated,\n  [button][outline].activated {\n    opacity: 1;\n    color: #fff;\n    background-color: #387ef5; }\n\nbutton[secondary][outline],\n[button][secondary][outline] {\n  border-color: #30d05f;\n  background: transparent;\n  color: #30d05f; }\n  button[secondary][outline].activated,\n  [button][secondary][outline].activated {\n    color: #fff;\n    background-color: #30d05f; }\n\nbutton[danger][outline],\n[button][danger][outline] {\n  border-color: #e93a3a;\n  background: transparent;\n  color: #e93a3a; }\n  button[danger][outline].activated,\n  [button][danger][outline].activated {\n    color: #fff;\n    background-color: #e93a3a; }\n\nbutton[light][outline],\n[button][light][outline] {\n  border-color: #e8e8e8;\n  background: transparent;\n  color: #e8e8e8; }\n  button[light][outline].activated,\n  [button][light][outline].activated {\n    color: #fff;\n    background-color: #e8e8e8; }\n\nbutton[dark][outline],\n[button][dark][outline] {\n  border-color: #2d2d2d;\n  background: transparent;\n  color: #2d2d2d; }\n  button[dark][outline].activated,\n  [button][dark][outline].activated {\n    color: #fff;\n    background-color: #2d2d2d; }\n\nbutton[large],\n[button][large] {\n  padding: 0 1em;\n  min-height: 2.8em;\n  font-size: 2rem; }\n\nbutton[small],\n[button][small] {\n  padding: 0 0.9em;\n  min-height: 2.1em;\n  font-size: 1.3rem; }\n\nbutton icon,\n[button] icon {\n  font-size: 1.4em;\n  background: none;\n  border: none;\n  pointer-events: none;\n  line-height: 0.67; }\n\nbutton.icon-left icon,\n[button].icon-left icon {\n  margin-left: -0.3em;\n  padding-right: 0.3em; }\n\nbutton.icon-right icon,\n[button].icon-right icon {\n  margin-right: -0.2em;\n  padding-left: 0.4em; }\n\nbutton.icon-only,\n[button].icon-only {\n  padding: 0;\n  min-width: 0.9em; }\n  button.icon-only icon,\n  [button].icon-only icon {\n    padding: 0 0.5em;\n    font-size: 1.8em; }\n\nbutton[small] icon,\n[button][small] icon {\n  margin-left: 0;\n  margin-right: 0;\n  font-size: 1.4em; }\n\nbutton[fab],\n[button][fab] {\n  position: absolute;\n  width: 56px;\n  height: 56px;\n  line-height: 56px;\n  min-width: 0;\n  vertical-align: middle;\n  border-radius: 50%;\n  background-clip: padding-box;\n  overflow: hidden;\n  -webkit-transition: .2s linear;\n  transition: .2s linear;\n  -webkit-transition-property: background-color;\n  transition-property: background-color;\n  font-size: 14px; }\n  button[fab][fab-center],\n  [button][fab][fab-center] {\n    left: 50%;\n    margin-left: -28px; }\n  button[fab][fab-top],\n  [button][fab][fab-top] {\n    top: 16px; }\n  button[fab][fab-right],\n  [button][fab][fab-right] {\n    right: 16px; }\n  button[fab][fab-bottom],\n  [button][fab][fab-bottom] {\n    bottom: 16px; }\n  button[fab][fab-left],\n  [button][fab][fab-left] {\n    left: 16px; }\n  button[fab] icon,\n  [button][fab] icon {\n    -webkit-box-flex: 1;\n    -webkit-flex: 1;\n    -ms-flex: 1;\n    flex: 1;\n    font-size: 2.8rem; }\n\nion-checkbox {\n  cursor: pointer;\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  -ms-user-select: none;\n  user-select: none; }\n\nion-checkbox[aria-disabled=true] {\n  opacity: 0.5;\n  color: #666;\n  pointer-events: none; }\n\nicon {\n  display: inline-block;\n  font-size: 1.2em; }\n\nicon[small] {\n  font-size: 1.1em; }\n\n.item {\n  display: -webkit-box;\n  display: -webkit-flex;\n  display: -ms-flexbox;\n  display: flex;\n  -webkit-box-pack: justify;\n  -webkit-justify-content: space-between;\n  -ms-flex-pack: justify;\n  justify-content: space-between;\n  -webkit-box-align: center;\n  -webkit-align-items: center;\n  -ms-flex-align: center;\n  align-items: center;\n  margin: 0;\n  padding: 0;\n  border: 0;\n  min-height: 4.4rem;\n  text-align: initial;\n  overflow: hidden;\n  background-color: #fff;\n  color: #000;\n  box-sizing: border-box; }\n  .item[no-lines] {\n    border: none; }\n    .item[no-lines] .item-inner {\n      border: none; }\n\n.item-inner {\n  display: -webkit-box;\n  display: -webkit-flex;\n  display: -ms-flexbox;\n  display: flex;\n  margin: 0;\n  padding: 0;\n  border: 0;\n  overflow: hidden;\n  box-sizing: border-box;\n  -webkit-box-flex: 1;\n  -webkit-flex: 1;\n  -ms-flex: 1;\n  flex: 1;\n  -webkit-box-orient: vertical;\n  -webkit-box-direction: normal;\n  -webkit-flex-direction: inherit;\n  -ms-flex-direction: inherit;\n  flex-direction: inherit;\n  -webkit-box-align: inherit;\n  -webkit-align-items: inherit;\n  -ms-flex-align: inherit;\n  align-items: inherit;\n  -webkit-align-self: stretch;\n  -ms-flex-item-align: stretch;\n  align-self: stretch; }\n\nion-item-group {\n  display: block; }\n\nion-item-divider {\n  display: block;\n  min-height: 30px;\n  font-weight: 500;\n  width: 100%;\n  z-index: 1000; }\n  ion-item-divider[sticky] {\n    position: -webkit-sticky;\n    position: sticky;\n    top: 0px; }\n\na.item,\nbutton.item {\n  margin: 0;\n  padding: 0;\n  width: 100%;\n  -webkit-box-pack: inherit;\n  -webkit-justify-content: inherit;\n  -ms-flex-pack: inherit;\n  justify-content: inherit;\n  min-height: 4.4rem;\n  font-weight: normal;\n  line-height: normal;\n  text-decoration: none;\n  text-transform: none;\n  color: inherit;\n  border-radius: 0;\n  box-shadow: none;\n  will-change: initial; }\n\nion-item-content {\n  margin: 0;\n  -webkit-box-flex: 1;\n  -webkit-flex: 1;\n  -ms-flex: 1;\n  flex: 1;\n  white-space: nowrap;\n  overflow: hidden;\n  text-overflow: ellipsis;\n  pointer-events: none; }\n  ion-item-content a,\n  ion-item-content button {\n    pointer-events: auto; }\n\n[text-wrap] ion-item-content {\n  white-space: normal; }\n\n.item h1 {\n  margin: 0 0 2px;\n  font-size: 2.4rem;\n  font-weight: normal; }\n\n.item h2 {\n  margin: 0 0 2px;\n  font-size: 1.6rem;\n  font-weight: normal; }\n\n.item h3,\n.item h4,\n.item h5,\n.item h6 {\n  line-height: normal;\n  margin: 0 0 3px 0;\n  font-size: 1.4rem;\n  font-weight: normal; }\n\n.item p {\n  line-height: normal;\n  color: #666;\n  font-size: 1.2rem;\n  margin: 0 0 2px; }\n\n.item h2:last-child,\n.item h3:last-child,\n.item h4:last-child,\n.item h5:last-child,\n.item h6:last-child,\n.item p:last-child {\n  margin-bottom: 0; }\n\n.item a {\n  text-decoration: none; }\n\n.vertical-align-top,\nion-input.item {\n  -webkit-box-align: start;\n  -webkit-align-items: flex-start;\n  -ms-flex-align: start;\n  align-items: flex-start; }\n\nion-item-content + ion-item-content[cnt] {\n  display: none; }\n\n.item > icon[small]:first-child,\n.item-inner > icon[small]:first-child {\n  min-width: 18px; }\n\n.item > icon:first-child,\n.item-inner > icon:first-child {\n  min-width: 24px;\n  text-align: center; }\n\n.item > icon,\n.item-inner > icon {\n  line-height: 1;\n  font-size: 2.4rem; }\n  .item > icon[large],\n  .item-inner > icon[large] {\n    font-size: 3.2rem; }\n  .item > icon[small],\n  .item-inner > icon[small] {\n    font-size: 1.8rem; }\n\nion-avatar,\nion-thumbnail {\n  display: block;\n  line-height: 1; }\n  ion-avatar img,\n  ion-thumbnail img {\n    display: block; }\n\nion-item-sliding {\n  display: block;\n  position: relative;\n  overflow: hidden; }\n  ion-item-sliding .item {\n    position: static; }\n\nion-item-options {\n  display: none;\n  position: absolute;\n  top: 0;\n  right: 0;\n  z-index: 1;\n  height: 100%;\n  visibility: hidden; }\n\nion-item-sliding.active-slide .item,\nion-item-sliding.active-slide .item.item.activated {\n  position: relative;\n  z-index: 2;\n  opacity: 1;\n  -webkit-transition: all 300ms cubic-bezier(0.36, 0.66, 0.04, 1);\n  transition: all 300ms cubic-bezier(0.36, 0.66, 0.04, 1);\n  pointer-events: none; }\n\nion-item-sliding.active-slide ion-item-options {\n  display: -webkit-box;\n  display: -webkit-flex;\n  display: -ms-flexbox;\n  display: flex; }\n\nion-item-sliding.active-slide.active-options ion-item-options {\n  visibility: visible; }\n\nion-row {\n  display: -webkit-box;\n  display: -webkit-flex;\n  display: -ms-flexbox;\n  display: flex;\n  padding: 5px;\n  width: 100%; }\n  ion-row[wrap] {\n    -webkit-flex-wrap: wrap;\n    -ms-flex-wrap: wrap;\n    flex-wrap: wrap; }\n  ion-row[flush] {\n    padding: 0; }\n  ion-row[top] {\n    -webkit-box-align: start;\n    -webkit-align-items: flex-start;\n    -ms-flex-align: start;\n    align-items: flex-start; }\n  ion-row[bottom] {\n    -webkit-box-align: end;\n    -webkit-align-items: flex-end;\n    -ms-flex-align: end;\n    align-items: flex-end; }\n  ion-row[center] {\n    -webkit-box-align: center;\n    -webkit-align-items: center;\n    -ms-flex-align: center;\n    align-items: center; }\n  ion-row[stretch] {\n    -webkit-box-align: stretch;\n    -webkit-align-items: stretch;\n    -ms-flex-align: stretch;\n    align-items: stretch; }\n  ion-row[baseline] {\n    -webkit-box-align: baseline;\n    -webkit-align-items: baseline;\n    -ms-flex-align: baseline;\n    align-items: baseline; }\n\nion-row + ion-row {\n  margin-top: -5px;\n  padding-top: 0; }\n\nion-col {\n  -webkit-box-flex: 1;\n  -webkit-flex: 1;\n  -ms-flex: 1;\n  flex: 1;\n  display: block;\n  padding: 5px;\n  width: 100%; }\n  ion-col[top] {\n    -webkit-align-self: flex-start;\n    -ms-flex-item-align: start;\n    align-self: flex-start; }\n  ion-col[bottom] {\n    -webkit-align-self: flex-end;\n    -ms-flex-item-align: end;\n    align-self: flex-end; }\n  ion-col[center] {\n    -webkit-align-self: center;\n    -ms-flex-item-align: center;\n    align-self: center; }\n  ion-col[stretch] {\n    -webkit-align-self: stretch;\n    -ms-flex-item-align: stretch;\n    align-self: stretch; }\n  ion-col[baseline] {\n    -webkit-align-self: baseline;\n    -ms-flex-item-align: baseline;\n    align-self: baseline; }\n\n/* Column Offsets */\nion-col[offset-10] {\n  margin-left: 10%; }\n\nion-col[offset-20] {\n  margin-left: 20%; }\n\nion-col[offset-25] {\n  margin-left: 25%; }\n\nion-col[offset-33], ion-col[offset-34] {\n  margin-left: 33.3333%; }\n\nion-col[offset-50] {\n  margin-left: 50%; }\n\nion-col[offset-66], ion-col[offset-67] {\n  margin-left: 66.6666%; }\n\nion-col[offset-75] {\n  margin-left: 75%; }\n\nion-col[offset-80] {\n  margin-left: 80%; }\n\nion-col[offset-90] {\n  margin-left: 90%; }\n\n/* Explicit Column Percent Sizes */\n/* By default each grid column will evenly distribute */\n/* across the grid. However, you can specify individual */\n/* columns to take up a certain size of the available area */\nion-col[width-10] {\n  -webkit-box-flex: 0;\n  -webkit-flex: 0 0 10%;\n  -ms-flex: 0 0 10%;\n  flex: 0 0 10%;\n  max-width: 10%; }\n\nion-col[width-20] {\n  -webkit-box-flex: 0;\n  -webkit-flex: 0 0 20%;\n  -ms-flex: 0 0 20%;\n  flex: 0 0 20%;\n  max-width: 20%; }\n\nion-col[width-25] {\n  -webkit-box-flex: 0;\n  -webkit-flex: 0 0 25%;\n  -ms-flex: 0 0 25%;\n  flex: 0 0 25%;\n  max-width: 25%; }\n\nion-col[width-33], ion-col[width-34] {\n  -webkit-box-flex: 0;\n  -webkit-flex: 0 0 33.3333%;\n  -ms-flex: 0 0 33.3333%;\n  flex: 0 0 33.3333%;\n  max-width: 33.3333%; }\n\nion-col[width-50] {\n  -webkit-box-flex: 0;\n  -webkit-flex: 0 0 50%;\n  -ms-flex: 0 0 50%;\n  flex: 0 0 50%;\n  max-width: 50%; }\n\nion-col[width-66], ion-col[width-67] {\n  -webkit-box-flex: 0;\n  -webkit-flex: 0 0 66.6666%;\n  -ms-flex: 0 0 66.6666%;\n  flex: 0 0 66.6666%;\n  max-width: 66.6666%; }\n\nion-col[width-75] {\n  -webkit-box-flex: 0;\n  -webkit-flex: 0 0 75%;\n  -ms-flex: 0 0 75%;\n  flex: 0 0 75%;\n  max-width: 75%; }\n\nion-col[width-80] {\n  -webkit-box-flex: 0;\n  -webkit-flex: 0 0 80%;\n  -ms-flex: 0 0 80%;\n  flex: 0 0 80%;\n  max-width: 80%; }\n\nion-col[width-90] {\n  -webkit-box-flex: 0;\n  -webkit-flex: 0 0 90%;\n  -ms-flex: 0 0 90%;\n  flex: 0 0 90%;\n  max-width: 90%; }\n\n/* Responsive Grid Classes */\n/* Adding a class of responsive-X to a row */\n/* will trigger the width-direction to */\n/* change to column and add some margin */\n/* to any columns in the row for clearity */\n@media (max-width: 567px) {\n  [responsive-sm] {\n    -webkit-box-orient: vertical;\n    -webkit-box-direction: normal;\n    -webkit-flex-direction: column;\n    -ms-flex-direction: column;\n    flex-direction: column; }\n    [responsive-sm] ion-col[width-10], [responsive-sm] ion-col[width-20], [responsive-sm] ion-col[width-25], [responsive-sm] ion-col[width-33], [responsive-sm] ion-col[width-34], [responsive-sm] ion-col[width-50], [responsive-sm] ion-col[width-66], [responsive-sm] ion-col[width-67], [responsive-sm] ion-col[width-75], [responsive-sm] ion-col[width-80], [responsive-sm] ion-col[width-90] {\n      -webkit-box-flex: 1;\n      -webkit-flex: 1;\n      -ms-flex: 1;\n      flex: 1;\n      margin-bottom: 15px;\n      margin-left: 0;\n      max-width: 100%;\n      width: 100%; } }\n\n@media (max-width: 767px) {\n  [responsive-md] {\n    -webkit-box-orient: vertical;\n    -webkit-box-direction: normal;\n    -webkit-flex-direction: column;\n    -ms-flex-direction: column;\n    flex-direction: column; }\n    [responsive-md] ion-col[width-10], [responsive-md] ion-col[width-20], [responsive-md] ion-col[width-25], [responsive-md] ion-col[width-33], [responsive-md] ion-col[width-34], [responsive-md] ion-col[width-50], [responsive-md] ion-col[width-66], [responsive-md] ion-col[width-67], [responsive-md] ion-col[width-75], [responsive-md] ion-col[width-80], [responsive-md] ion-col[width-90] {\n      -webkit-box-flex: 1;\n      -webkit-flex: 1;\n      -ms-flex: 1;\n      flex: 1;\n      margin-bottom: 15px;\n      margin-left: 0;\n      max-width: 100%;\n      width: 100%; } }\n\n@media (max-width: 1023px) {\n  [responsive-lg] {\n    -webkit-box-orient: vertical;\n    -webkit-box-direction: normal;\n    -webkit-flex-direction: column;\n    -ms-flex-direction: column;\n    flex-direction: column; }\n    [responsive-lg] ion-col[width-10], [responsive-lg] ion-col[width-20], [responsive-lg] ion-col[width-25], [responsive-lg] ion-col[width-33], [responsive-lg] ion-col[width-34], [responsive-lg] ion-col[width-50], [responsive-lg] ion-col[width-66], [responsive-lg] ion-col[width-67], [responsive-lg] ion-col[width-75], [responsive-lg] ion-col[width-80], [responsive-lg] ion-col[width-90] {\n      -webkit-box-flex: 1;\n      -webkit-flex: 1;\n      -ms-flex: 1;\n      flex: 1;\n      margin-bottom: 15px;\n      margin-left: 0;\n      max-width: 100%;\n      width: 100%; } }\n\nion-input textarea,\nion-input input[type=\"text\"],\nion-input input[type=\"password\"],\nion-input input[type=\"datetime\"],\nion-input input[type=\"datetime-local\"],\nion-input input[type=\"date\"],\nion-input input[type=\"month\"],\nion-input input[type=\"time\"],\nion-input input[type=\"week\"],\nion-input input[type=\"number\"],\nion-input input[type=\"email\"],\nion-input input[type=\"url\"],\nion-input input[type=\"search\"],\nion-input input[type=\"tel\"],\nion-input input[type=\"color\"] {\n  display: block;\n  background: transparent;\n  border: 0;\n  width: 100%; }\n\nion-input [text-input] {\n  -webkit-box-flex: 1;\n  -webkit-flex: 1;\n  -ms-flex: 1;\n  flex: 1;\n  background-color: #fff;\n  pointer-events: none; }\n\nion-input.has-focus [text-input] {\n  pointer-events: auto; }\n\nion-input input[scroll-assist] {\n  display: inline-block;\n  padding: 0;\n  margin: 0;\n  width: 1px;\n  height: 1px;\n  pointer-events: none; }\n\nion-input textarea {\n  padding-top: 9px; }\n\ntextarea {\n  margin: 0;\n  padding: 0;\n  height: auto;\n  overflow: auto;\n  font: inherit;\n  color: inherit; }\n\n.platform-mobile textarea {\n  resize: none; }\n\ninput::-moz-placeholder,\ntextarea::-moz-placeholder {\n  color: #999; }\n\ninput:-ms-input-placeholder,\ntextarea:-ms-input-placeholder {\n  color: #999; }\n\ninput::-webkit-input-placeholder,\ntextarea::-webkit-input-placeholder {\n  color: #999;\n  text-indent: 0; }\n\nion-label[primary] {\n  color: #387ef5 !important; }\n\nion-label[secondary] {\n  color: #32db64 !important; }\n\nion-label[danger] {\n  color: #f53d3d !important; }\n\nion-label[light] {\n  color: #f4f4f4 !important; }\n\nion-label[dark] {\n  color: #222 !important; }\n\nion-label {\n  display: block;\n  max-width: 200px;\n  font-size: inherit;\n  white-space: nowrap;\n  pointer-events: none; }\n\n[fixed-label] ion-label {\n  width: 30%;\n  min-width: 100px;\n  max-width: 200px; }\n\nion-input[stacked-label],\nion-input[floating-label] {\n  -webkit-box-orient: vertical;\n  -webkit-box-direction: normal;\n  -webkit-flex-direction: column;\n  -ms-flex-direction: column;\n  flex-direction: column;\n  -webkit-box-align: start;\n  -webkit-align-items: flex-start;\n  -ms-flex-align: start;\n  align-items: flex-start; }\n\n[stacked-label] ion-label,\n[floating-label] ion-label {\n  -webkit-align-self: stretch;\n  -ms-flex-item-align: stretch;\n  align-self: stretch;\n  margin-bottom: 0;\n  max-width: 100%; }\n\n[stacked-label] [text-input],\n[floating-label] [text-input] {\n  -webkit-align-self: stretch;\n  -ms-flex-item-align: stretch;\n  align-self: stretch;\n  width: auto; }\n\nion-list-header {\n  display: block;\n  overflow: hidden;\n  white-space: nowrap;\n  text-overflow: ellipsis; }\n\nion-list {\n  display: block;\n  margin: 0;\n  padding: 0;\n  list-style-type: none; }\n\nion-list[inset] {\n  overflow: hidden;\n  -webkit-transform: translateZ(0);\n  transform: translateZ(0); }\n  ion-list[inset] ion-list-header {\n    background-color: #fff; }\n\nion-card {\n  display: block;\n  overflow: hidden;\n  -webkit-transform: translateZ(0);\n  transform: translateZ(0); }\n\nion-card img {\n  display: block;\n  width: 100%; }\n\nion-card-header {\n  display: block;\n  overflow: hidden;\n  white-space: nowrap;\n  text-overflow: ellipsis; }\n\nion-card-content {\n  display: block; }\n\nion-menu {\n  position: absolute;\n  top: 0;\n  right: auto;\n  bottom: 0;\n  left: 0;\n  width: 304px;\n  display: -webkit-box;\n  display: -webkit-flex;\n  display: -ms-flexbox;\n  display: flex;\n  -webkit-box-orient: vertical;\n  -webkit-box-direction: normal;\n  -webkit-flex-direction: column;\n  -ms-flex-direction: column;\n  flex-direction: column;\n  background: #fff;\n  -webkit-transform: translate3d(-9999px, 0px, 0px);\n  transform: translate3d(-9999px, 0px, 0px); }\n\nion-menu[side=right] {\n  right: 0;\n  left: auto; }\n\nion-menu backdrop {\n  z-index: -1;\n  display: none; }\n\n.menu-content {\n  -webkit-transform: translate3d(0px, 0px, 0px);\n  transform: translate3d(0px, 0px, 0px); }\n\n.menu-content-open ion-pane,\n.menu-content-open ion-content,\n.menu-content-open .toolbar {\n  pointer-events: none; }\n\n@media (max-width: 340px) {\n  ion-menu {\n    width: 264px; } }\n\nion-menu[type=reveal].show-menu {\n  -webkit-transform: translate3d(0px, 0px, 0px);\n  transform: translate3d(0px, 0px, 0px); }\n\n.menu-content-reveal {\n  box-shadow: 0px 0px 10px rgba(0, 0, 0, 0.25); }\n\n.menu-content-push {\n  box-shadow: 0px 0px 10px rgba(0, 0, 0, 0.25); }\n\nion-menu[type=overlay] {\n  z-index: 80;\n  box-shadow: 0px 0px 10px rgba(0, 0, 0, 0.25);\n  left: -8px; }\n  ion-menu[type=overlay] backdrop {\n    display: block;\n    -webkit-transform: translate3d(-9999px, 0px, 0px);\n    transform: translate3d(-9999px, 0px, 0px);\n    opacity: 0.01;\n    left: -3000px;\n    width: 6000px; }\n    ion-menu[type=overlay] backdrop.show-backdrop {\n      -webkit-transform: translate3d(0px, 0px, 0px);\n      transform: translate3d(0px, 0px, 0px); }\n\nion-menu[type=overlay][side=right] {\n  left: 8px; }\n\nion-menu[type=push][side=right] {\n  left: 0px; }\n\nion-page.modal {\n  background-color: #fff;\n  z-index: 1000;\n  -webkit-transform: translate3d(0px, 100%, 0px);\n  transform: translate3d(0px, 100%, 0px); }\n\nion-navbar.toolbar {\n  display: -webkit-box;\n  display: -webkit-flex;\n  display: -ms-flexbox;\n  display: flex; }\n\n.back-button {\n  -webkit-box-ordinal-group: 11;\n  -webkit-order: 10;\n  -ms-flex-order: 10;\n  order: 10;\n  display: none; }\n  .back-button.show-back-button {\n    display: -webkit-box;\n    display: -webkit-flex;\n    display: -ms-flexbox;\n    display: flex; }\n\n.back-button-text {\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\nion-popup {\n  position: absolute;\n  z-index: 1000;\n  top: 0;\n  left: 0;\n  bottom: 0;\n  right: 0;\n  display: -webkit-box;\n  display: -webkit-flex;\n  display: -ms-flexbox;\n  display: flex;\n  -webkit-box-pack: center;\n  -webkit-justify-content: center;\n  -ms-flex-pack: center;\n  justify-content: center;\n  -webkit-box-align: center;\n  -webkit-align-items: center;\n  -ms-flex-align: center;\n  align-items: center; }\n  ion-popup popup-wrapper {\n    z-index: 10;\n    min-width: 250px;\n    max-width: 100%;\n    max-height: 90%;\n    display: -webkit-box;\n    display: -webkit-flex;\n    display: -ms-flexbox;\n    display: flex;\n    -webkit-box-orient: vertical;\n    -webkit-box-direction: normal;\n    -webkit-flex-direction: column;\n    -ms-flex-direction: column;\n    flex-direction: column;\n    opacity: 0; }\n  ion-popup input,\n  ion-popup textarea {\n    width: 100%; }\n\n.popup-title {\n  margin: 0;\n  padding: 0; }\n\n.popup-sub-title {\n  margin: 5px 0 0 0;\n  padding: 0;\n  font-weight: normal; }\n\n.popup-body {\n  overflow: auto; }\n  .popup-body:empty {\n    padding: 0; }\n\n.prompt-input {\n  border: 0;\n  background: inherit;\n  padding: 10px 0; }\n  .prompt-input::-moz-placeholder {\n    color: #999; }\n  .prompt-input:-ms-input-placeholder {\n    color: #999; }\n  .prompt-input::-webkit-input-placeholder {\n    color: #999;\n    text-indent: 0; }\n\n.popup-buttons {\n  display: -webkit-box;\n  display: -webkit-flex;\n  display: -ms-flexbox;\n  display: flex;\n  -webkit-box-orient: horizontal;\n  -webkit-box-direction: normal;\n  -webkit-flex-direction: row;\n  -ms-flex-direction: row;\n  flex-direction: row; }\n  .popup-buttons button {\n    display: block;\n    margin: 0;\n    line-height: 20px;\n    font-size: 14px;\n    margin-right: 8px; }\n\nion-swipe-slides {\n  display: block;\n  width: 100%;\n  height: 100%; }\n\n/**\n * Swiper 3.1.2\n * Most modern mobile touch slider and framework with hardware accelerated transitions\n *\n * http://www.idangero.us/swiper/\n *\n * Copyright 2015, Vladimir Kharlampidi\n * The iDangero.us\n * http://www.idangero.us/\n *\n * Licensed under MIT\n *\n * Released on: August 22, 2015\n */\n.swiper-container {\n  margin: 0 auto;\n  position: relative;\n  overflow: hidden;\n  /* Fix of Webkit flickering */\n  z-index: 1; }\n\n.swiper-container-no-flexbox .swiper-slide {\n  float: left; }\n\n.swiper-container-vertical > .swiper-wrapper {\n  -webkit-box-orient: vertical;\n  -ms-flex-direction: column;\n  -webkit-flex-direction: column;\n  flex-direction: column; }\n\n.swiper-wrapper {\n  position: relative;\n  width: 100%;\n  height: 100%;\n  z-index: 1;\n  display: -webkit-box;\n  display: -ms-flexbox;\n  display: -webkit-flex;\n  display: flex;\n  -webkit-transition-property: -webkit-transform;\n  transition-property: transform;\n  box-sizing: content-box; }\n\n.swiper-container-android .swiper-slide,\n.swiper-wrapper {\n  -webkit-transform: translate3d(0px, 0, 0);\n  transform: translate3d(0px, 0, 0); }\n\n.swiper-container-multirow > .swiper-wrapper {\n  -webkit-box-lines: multiple;\n  -moz-box-lines: multiple;\n  -ms-flex-wrap: wrap;\n  -webkit-flex-wrap: wrap;\n  flex-wrap: wrap; }\n\n.swiper-container-free-mode > .swiper-wrapper {\n  -webkit-transition-timing-function: ease-out;\n  transition-timing-function: ease-out;\n  margin: 0 auto; }\n\n.swiper-slide {\n  -webkit-flex-shrink: 0;\n  -ms-flex: 0 0 auto;\n  -webkit-flex-shrink: 0;\n  -ms-flex-negative: 0;\n  flex-shrink: 0;\n  width: 100%;\n  height: 100%;\n  position: relative; }\n\n/* a11y */\n.swiper-container .swiper-notification {\n  position: absolute;\n  left: 0;\n  top: 0;\n  pointer-events: none;\n  opacity: 0;\n  z-index: -1000; }\n\n/* IE10 Windows Phone 8 Fixes */\n.swiper-wp8-horizontal {\n  -ms-touch-action: pan-y;\n  touch-action: pan-y; }\n\n.swiper-wp8-vertical {\n  -ms-touch-action: pan-x;\n  touch-action: pan-x; }\n\n/* Arrows */\n.swiper-button-prev,\n.swiper-button-next {\n  position: absolute;\n  top: 50%;\n  width: 27px;\n  height: 44px;\n  margin-top: -22px;\n  z-index: 10;\n  cursor: pointer;\n  background-size: 27px 44px;\n  background-position: center;\n  background-repeat: no-repeat; }\n\n.swiper-button-prev.swiper-button-disabled,\n.swiper-button-next.swiper-button-disabled {\n  opacity: 0.35;\n  cursor: auto;\n  pointer-events: none; }\n\n.swiper-button-prev,\n.swiper-container-rtl .swiper-button-next {\n  background-image: url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%2027%2044'%3E%3Cpath%20d%3D'M0%2C22L22%2C0l2.1%2C2.1L4.2%2C22l19.9%2C19.9L22%2C44L0%2C22L0%2C22L0%2C22z'%20fill%3D'%23007aff'%2F%3E%3C%2Fsvg%3E\");\n  left: 10px;\n  right: auto; }\n\n.swiper-button-prev.swiper-button-black,\n.swiper-container-rtl .swiper-button-next.swiper-button-black {\n  background-image: url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%2027%2044'%3E%3Cpath%20d%3D'M0%2C22L22%2C0l2.1%2C2.1L4.2%2C22l19.9%2C19.9L22%2C44L0%2C22L0%2C22L0%2C22z'%20fill%3D'%23000000'%2F%3E%3C%2Fsvg%3E\"); }\n\n.swiper-button-prev.swiper-button-white,\n.swiper-container-rtl .swiper-button-next.swiper-button-white {\n  background-image: url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%2027%2044'%3E%3Cpath%20d%3D'M0%2C22L22%2C0l2.1%2C2.1L4.2%2C22l19.9%2C19.9L22%2C44L0%2C22L0%2C22L0%2C22z'%20fill%3D'%23ffffff'%2F%3E%3C%2Fsvg%3E\"); }\n\n.swiper-button-next,\n.swiper-container-rtl .swiper-button-prev {\n  background-image: url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%2027%2044'%3E%3Cpath%20d%3D'M27%2C22L27%2C22L5%2C44l-2.1-2.1L22.8%2C22L2.9%2C2.1L5%2C0L27%2C22L27%2C22z'%20fill%3D'%23007aff'%2F%3E%3C%2Fsvg%3E\");\n  right: 10px;\n  left: auto; }\n\n.swiper-button-next.swiper-button-black,\n.swiper-container-rtl .swiper-button-prev.swiper-button-black {\n  background-image: url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%2027%2044'%3E%3Cpath%20d%3D'M27%2C22L27%2C22L5%2C44l-2.1-2.1L22.8%2C22L2.9%2C2.1L5%2C0L27%2C22L27%2C22z'%20fill%3D'%23000000'%2F%3E%3C%2Fsvg%3E\"); }\n\n.swiper-button-next.swiper-button-white,\n.swiper-container-rtl .swiper-button-prev.swiper-button-white {\n  background-image: url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%2027%2044'%3E%3Cpath%20d%3D'M27%2C22L27%2C22L5%2C44l-2.1-2.1L22.8%2C22L2.9%2C2.1L5%2C0L27%2C22L27%2C22z'%20fill%3D'%23ffffff'%2F%3E%3C%2Fsvg%3E\"); }\n\n/* Pagination Styles */\n.swiper-pagination {\n  position: absolute;\n  text-align: center;\n  -webkit-transition: 300ms;\n  transition: 300ms;\n  -webkit-transform: translate3d(0, 0, 0);\n  transform: translate3d(0, 0, 0);\n  z-index: 10; }\n\n.swiper-pagination.swiper-pagination-hidden {\n  opacity: 0; }\n\n.swiper-pagination-bullet {\n  width: 8px;\n  height: 8px;\n  display: inline-block;\n  border-radius: 100%;\n  background: #000;\n  opacity: 0.2; }\n\nbutton.swiper-pagination-bullet {\n  border: none;\n  margin: 0;\n  padding: 0;\n  box-shadow: none;\n  -moz-appearance: none;\n  -ms-appearance: none;\n  -webkit-appearance: none;\n  appearance: none; }\n\n.swiper-pagination-clickable .swiper-pagination-bullet {\n  cursor: pointer; }\n\n.swiper-pagination-white .swiper-pagination-bullet {\n  background: #fff; }\n\n.swiper-pagination-bullet-active {\n  opacity: 1; }\n\n.swiper-pagination-white .swiper-pagination-bullet-active {\n  background: #fff; }\n\n.swiper-pagination-black .swiper-pagination-bullet-active {\n  background: #000; }\n\n.swiper-container-vertical > .swiper-pagination {\n  right: 10px;\n  top: 50%;\n  -webkit-transform: translate3d(0px, -50%, 0);\n  transform: translate3d(0px, -50%, 0); }\n\n.swiper-container-vertical > .swiper-pagination .swiper-pagination-bullet {\n  margin: 5px 0;\n  display: block; }\n\n.swiper-container-horizontal > .swiper-pagination {\n  bottom: 20px;\n  left: 0;\n  width: 100%; }\n\n.swiper-container-horizontal > .swiper-pagination .swiper-pagination-bullet {\n  margin: 0 5px; }\n\n/* 3D Container */\n.swiper-container-3d {\n  -webkit-perspective: 1200px;\n  -o-perspective: 1200px;\n  perspective: 1200px; }\n\n.swiper-container-3d .swiper-wrapper,\n.swiper-container-3d .swiper-slide,\n.swiper-container-3d .swiper-slide-shadow-left,\n.swiper-container-3d .swiper-slide-shadow-right,\n.swiper-container-3d .swiper-slide-shadow-top,\n.swiper-container-3d .swiper-slide-shadow-bottom,\n.swiper-container-3d .swiper-cube-shadow {\n  -webkit-transform-style: preserve-3d;\n  -ms-transform-style: preserve-3d;\n  transform-style: preserve-3d; }\n\n.swiper-container-3d .swiper-slide-shadow-left,\n.swiper-container-3d .swiper-slide-shadow-right,\n.swiper-container-3d .swiper-slide-shadow-top,\n.swiper-container-3d .swiper-slide-shadow-bottom {\n  position: absolute;\n  left: 0;\n  bottom: 0;\n  width: 100%;\n  height: 100%;\n  pointer-events: none;\n  z-index: 10; }\n\n.swiper-container-3d .swiper-slide-shadow-left {\n  background-image: -webkit-gradient(linear, left top, right top, from(rgba(0, 0, 0, 0.5)), to(transparent));\n  /* Safari 4+, Chrome */\n  background-image: -webkit-linear-gradient(right, rgba(0, 0, 0, 0.5), transparent);\n  /* Chrome 10+, Safari 5.1+, iOS 5+ */\n  /* Firefox 3.6-15 */\n  /* Opera 11.10-12.00 */\n  background-image: linear-gradient(to left, rgba(0, 0, 0, 0.5), transparent);\n  /* Firefox 16+, IE10, Opera 12.50+ */ }\n\n.swiper-container-3d .swiper-slide-shadow-right {\n  background-image: -webkit-gradient(linear, right top, left top, from(rgba(0, 0, 0, 0.5)), to(transparent));\n  /* Safari 4+, Chrome */\n  background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, 0.5), transparent);\n  /* Chrome 10+, Safari 5.1+, iOS 5+ */\n  /* Firefox 3.6-15 */\n  /* Opera 11.10-12.00 */\n  background-image: linear-gradient(to right, rgba(0, 0, 0, 0.5), transparent);\n  /* Firefox 16+, IE10, Opera 12.50+ */ }\n\n.swiper-container-3d .swiper-slide-shadow-top {\n  background-image: -webkit-gradient(linear, left top, left bottom, from(rgba(0, 0, 0, 0.5)), to(transparent));\n  /* Safari 4+, Chrome */\n  background-image: -webkit-linear-gradient(bottom, rgba(0, 0, 0, 0.5), transparent);\n  /* Chrome 10+, Safari 5.1+, iOS 5+ */\n  /* Firefox 3.6-15 */\n  /* Opera 11.10-12.00 */\n  background-image: linear-gradient(to top, rgba(0, 0, 0, 0.5), transparent);\n  /* Firefox 16+, IE10, Opera 12.50+ */ }\n\n.swiper-container-3d .swiper-slide-shadow-bottom {\n  background-image: -webkit-gradient(linear, left bottom, left top, from(rgba(0, 0, 0, 0.5)), to(transparent));\n  /* Safari 4+, Chrome */\n  background-image: -webkit-linear-gradient(top, rgba(0, 0, 0, 0.5), transparent);\n  /* Chrome 10+, Safari 5.1+, iOS 5+ */\n  /* Firefox 3.6-15 */\n  /* Opera 11.10-12.00 */\n  background-image: linear-gradient(to bottom, rgba(0, 0, 0, 0.5), transparent);\n  /* Firefox 16+, IE10, Opera 12.50+ */ }\n\n/* Coverflow */\n.swiper-container-coverflow .swiper-wrapper {\n  /* Windows 8 IE 10 fix */\n  -ms-perspective: 1200px; }\n\n/* Fade */\n.swiper-container-fade.swiper-container-free-mode .swiper-slide {\n  -webkit-transition-timing-function: ease-out;\n  transition-timing-function: ease-out; }\n\n.swiper-container-fade .swiper-slide {\n  pointer-events: none; }\n\n.swiper-container-fade .swiper-slide .swiper-slide {\n  pointer-events: none; }\n\n.swiper-container-fade .swiper-slide-active,\n.swiper-container-fade .swiper-slide-active .swiper-slide-active {\n  pointer-events: auto; }\n\n/* Cube */\n.swiper-container-cube {\n  overflow: visible; }\n\n.swiper-container-cube .swiper-slide {\n  pointer-events: none;\n  visibility: hidden;\n  -webkit-transform-origin: 0 0;\n  transform-origin: 0 0;\n  -webkit-backface-visibility: hidden;\n  -ms-backface-visibility: hidden;\n  backface-visibility: hidden;\n  width: 100%;\n  height: 100%;\n  z-index: 1; }\n\n.swiper-container-cube.swiper-container-rtl .swiper-slide {\n  -webkit-transform-origin: 100% 0;\n  transform-origin: 100% 0; }\n\n.swiper-container-cube .swiper-slide-active,\n.swiper-container-cube .swiper-slide-next,\n.swiper-container-cube .swiper-slide-prev,\n.swiper-container-cube .swiper-slide-next + .swiper-slide {\n  pointer-events: auto;\n  visibility: visible; }\n\n.swiper-container-cube .swiper-slide-shadow-top,\n.swiper-container-cube .swiper-slide-shadow-bottom,\n.swiper-container-cube .swiper-slide-shadow-left,\n.swiper-container-cube .swiper-slide-shadow-right {\n  z-index: 0;\n  -webkit-backface-visibility: hidden;\n  -ms-backface-visibility: hidden;\n  backface-visibility: hidden; }\n\n.swiper-container-cube .swiper-cube-shadow {\n  position: absolute;\n  left: 0;\n  bottom: 0;\n  width: 100%;\n  height: 100%;\n  background: #000;\n  opacity: 0.6;\n  -webkit-filter: blur(50px);\n  filter: blur(50px);\n  z-index: 0; }\n\n/* Scrollbar */\n.swiper-scrollbar {\n  border-radius: 10px;\n  position: relative;\n  -ms-touch-action: none;\n  background: rgba(0, 0, 0, 0.1); }\n\n.swiper-container-horizontal > .swiper-scrollbar {\n  position: absolute;\n  left: 1%;\n  bottom: 3px;\n  z-index: 50;\n  height: 5px;\n  width: 98%; }\n\n.swiper-container-vertical > .swiper-scrollbar {\n  position: absolute;\n  right: 3px;\n  top: 1%;\n  z-index: 50;\n  width: 5px;\n  height: 98%; }\n\n.swiper-scrollbar-drag {\n  height: 100%;\n  width: 100%;\n  position: relative;\n  background: rgba(0, 0, 0, 0.5);\n  border-radius: 10px;\n  left: 0;\n  top: 0; }\n\n.swiper-scrollbar-cursor-drag {\n  cursor: move; }\n\n/* Preloader */\n.swiper-lazy-preloader {\n  width: 42px;\n  height: 42px;\n  position: absolute;\n  left: 50%;\n  top: 50%;\n  margin-left: -21px;\n  margin-top: -21px;\n  z-index: 10;\n  -webkit-transform-origin: 50%;\n  transform-origin: 50%;\n  -webkit-animation: swiper-preloader-spin 1s steps(12, end) infinite;\n  animation: swiper-preloader-spin 1s steps(12, end) infinite; }\n\n.swiper-lazy-preloader:after {\n  display: block;\n  content: \"\";\n  width: 100%;\n  height: 100%;\n  background-image: url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20viewBox%3D'0%200%20120%20120'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20xmlns%3Axlink%3D'http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink'%3E%3Cdefs%3E%3Cline%20id%3D'l'%20x1%3D'60'%20x2%3D'60'%20y1%3D'7'%20y2%3D'27'%20stroke%3D'%236c6c6c'%20stroke-width%3D'11'%20stroke-linecap%3D'round'%2F%3E%3C%2Fdefs%3E%3Cg%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(30%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(60%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(90%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(120%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(150%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.37'%20transform%3D'rotate(180%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.46'%20transform%3D'rotate(210%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.56'%20transform%3D'rotate(240%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.66'%20transform%3D'rotate(270%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.75'%20transform%3D'rotate(300%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.85'%20transform%3D'rotate(330%2060%2C60)'%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E\");\n  background-position: 50%;\n  background-size: 100%;\n  background-repeat: no-repeat; }\n\n.swiper-lazy-preloader-white:after {\n  background-image: url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20viewBox%3D'0%200%20120%20120'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20xmlns%3Axlink%3D'http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink'%3E%3Cdefs%3E%3Cline%20id%3D'l'%20x1%3D'60'%20x2%3D'60'%20y1%3D'7'%20y2%3D'27'%20stroke%3D'%23fff'%20stroke-width%3D'11'%20stroke-linecap%3D'round'%2F%3E%3C%2Fdefs%3E%3Cg%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(30%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(60%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(90%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(120%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(150%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.37'%20transform%3D'rotate(180%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.46'%20transform%3D'rotate(210%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.56'%20transform%3D'rotate(240%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.66'%20transform%3D'rotate(270%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.75'%20transform%3D'rotate(300%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.85'%20transform%3D'rotate(330%2060%2C60)'%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E\"); }\n\n@-webkit-keyframes swiper-preloader-spin {\n  100% {\n    -webkit-transform: rotate(360deg); } }\n\n@keyframes swiper-preloader-spin {\n  100% {\n    -webkit-transform: rotate(360deg);\n    transform: rotate(360deg); } }\n\nion-slides {\n  width: 100%;\n  height: 100%;\n  display: block; }\n\n.slide-zoom {\n  display: block;\n  width: 100%;\n  text-align: center; }\n\n.swiper-container {\n  width: 100%;\n  height: 100%;\n  padding: 0;\n  display: -webkit-box;\n  display: -webkit-flex;\n  display: -ms-flexbox;\n  display: flex;\n  overflow: hidden; }\n\n.swiper-wrapper {\n  width: 100%;\n  height: 100%;\n  padding: 0;\n  display: -webkit-box;\n  display: -webkit-flex;\n  display: -ms-flexbox;\n  display: flex; }\n\n.swiper-container {\n  width: 100%;\n  height: 100%; }\n\n.swiper-slide {\n  width: 100%;\n  height: 100%;\n  box-sizing: border-box;\n  text-align: center;\n  font-size: 18px;\n  /* Center slide text vertically */\n  display: -webkit-box;\n  display: -webkit-flex;\n  display: -ms-flexbox;\n  display: flex;\n  -webkit-box-pack: center;\n  -webkit-justify-content: center;\n  -ms-flex-pack: center;\n  justify-content: center;\n  -webkit-box-align: center;\n  -webkit-align-items: center;\n  -ms-flex-align: center;\n  align-items: center; }\n  .swiper-slide img {\n    width: auto;\n    height: auto;\n    max-width: 100%;\n    max-height: 100%; }\n\nion-radio {\n  display: block;\n  cursor: pointer;\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  -ms-user-select: none;\n  user-select: none; }\n\nion-radio[aria-disabled=true] {\n  opacity: 0.5;\n  color: #666;\n  pointer-events: none; }\n\nion-scroll {\n  position: relative;\n  display: block; }\n  ion-scroll.scroll-x scroll-content {\n    overflow-x: auto; }\n  ion-scroll.scroll-y scroll-content {\n    overflow-y: auto; }\n  ion-scroll[center] scroll-content {\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    -webkit-box-pack: center;\n    -webkit-justify-content: center;\n    -ms-flex-pack: center;\n    justify-content: center; }\n  ion-scroll scroll-content {\n    position: absolute;\n    top: 0;\n    right: 0;\n    bottom: 0;\n    left: 0;\n    overflow-y: hidden;\n    overflow-x: hidden;\n    -webkit-overflow-scrolling: touch;\n    will-change: scroll-position; }\n\nion-refresher {\n  position: absolute;\n  top: -60px;\n  right: 0;\n  left: 0;\n  overflow: hidden;\n  margin: auto;\n  height: 60px; }\n  ion-refresher .refresher-content {\n    position: absolute;\n    bottom: 15px;\n    left: 0;\n    width: 100%;\n    color: #000;\n    text-align: center;\n    font-size: 30px; }\n    ion-refresher .refresher-content .text-refreshing,\n    ion-refresher .refresher-content .text-pulling {\n      font-size: 16px;\n      line-height: 16px; }\n    ion-refresher .refresher-content.refresher-with-text {\n      bottom: 10px; }\n  ion-refresher .icon-refreshing,\n  ion-refresher .icon-pulling {\n    width: 100%;\n    -webkit-backface-visibility: hidden;\n    backface-visibility: hidden;\n    -webkit-transform-style: preserve-3d;\n    transform-style: preserve-3d; }\n  ion-refresher .icon-pulling {\n    -webkit-animation-name: refresh-spin-back;\n    animation-name: refresh-spin-back;\n    -webkit-animation-duration: 200ms;\n    animation-duration: 200ms;\n    -webkit-animation-timing-function: linear;\n    animation-timing-function: linear;\n    -webkit-animation-fill-mode: none;\n    animation-fill-mode: none;\n    -webkit-transform: translate3d(0, 0, 0) rotate(0deg);\n    transform: translate3d(0, 0, 0) rotate(0deg); }\n  ion-refresher .icon-refreshing,\n  ion-refresher .text-refreshing {\n    display: none; }\n  ion-refresher .icon-refreshing {\n    -webkit-animation-duration: 1.5s;\n    animation-duration: 1.5s; }\n  ion-refresher.active .icon-pulling:not(.pulling-rotation-disabled) {\n    -webkit-animation-name: refresh-spin;\n    animation-name: refresh-spin;\n    -webkit-transform: translate3d(0, 0, 0) rotate(-180deg);\n    transform: translate3d(0, 0, 0) rotate(-180deg); }\n  ion-refresher.active.refreshing {\n    -webkit-transition: -webkit-transform .2s;\n    transition: -webkit-transform .2s;\n    transition: transform .2s;\n    -webkit-transform: scale(1, 1);\n    transform: scale(1, 1); }\n    ion-refresher.active.refreshing .icon-pulling,\n    ion-refresher.active.refreshing .text-pulling {\n      display: none; }\n    ion-refresher.active.refreshing .icon-refreshing,\n    ion-refresher.active.refreshing .text-refreshing {\n      display: block; }\n    ion-refresher.active.refreshing.refreshing-tail {\n      -webkit-transform: scale(0, 0);\n      transform: scale(0, 0); }\n\nscroll-content.overscroll {\n  overflow: visible; }\n\n/*\n  -webkit-overflow-scrolling:touch;\n  width:100%;\n}\n*/\n@-webkit-keyframes refresh-spin {\n  0% {\n    -webkit-transform: translate3d(0, 0, 0) rotate(0); }\n  100% {\n    -webkit-transform: translate3d(0, 0, 0) rotate(180deg); } }\n\n@keyframes refresh-spin {\n  0% {\n    -webkit-transform: translate3d(0, 0, 0) rotate(0);\n    transform: translate3d(0, 0, 0) rotate(0); }\n  100% {\n    -webkit-transform: translate3d(0, 0, 0) rotate(180deg);\n    transform: translate3d(0, 0, 0) rotate(180deg); } }\n\n@-webkit-keyframes refresh-spin-back {\n  0% {\n    -webkit-transform: translate3d(0, 0, 0) rotate(180deg); }\n  100% {\n    -webkit-transform: translate3d(0, 0, 0) rotate(0); } }\n\n@keyframes refresh-spin-back {\n  0% {\n    -webkit-transform: translate3d(0, 0, 0) rotate(180deg);\n    transform: translate3d(0, 0, 0) rotate(180deg); }\n  100% {\n    -webkit-transform: translate3d(0, 0, 0) rotate(0);\n    transform: translate3d(0, 0, 0) rotate(0); } }\n\nion-scroll {\n  position: relative;\n  display: block; }\n  ion-scroll.scroll-x scroll-content {\n    overflow-x: auto; }\n  ion-scroll.scroll-y scroll-content {\n    overflow-y: auto; }\n  ion-scroll[center] scroll-content {\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    -webkit-box-pack: center;\n    -webkit-justify-content: center;\n    -ms-flex-pack: center;\n    justify-content: center; }\n  ion-scroll scroll-content {\n    position: absolute;\n    top: 0;\n    right: 0;\n    bottom: 0;\n    left: 0;\n    overflow-y: hidden;\n    overflow-x: hidden;\n    -webkit-overflow-scrolling: touch;\n    will-change: scroll-position; }\n\nion-searchbar {\n  position: relative;\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  width: 100%; }\n\n.searchbar-icon {\n  pointer-events: none; }\n\n.searchbar-input-container {\n  position: relative;\n  display: block;\n  -webkit-flex-shrink: 1;\n  -ms-flex-negative: 1;\n  flex-shrink: 1;\n  width: 100%; }\n\ninput[type=\"search\"].searchbar-input {\n  display: block;\n  width: 100%;\n  height: 100%;\n  border: none;\n  font-family: inherit;\n  line-height: 3rem;\n  -webkit-appearance: none;\n  -moz-appearance: none; }\n\n.searchbar-close-icon {\n  min-height: 0;\n  padding: 0;\n  margin: 0; }\n\nion-segment {\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  -webkit-box-pack: center;\n  -webkit-justify-content: center;\n  -ms-flex-pack: center;\n  justify-content: center;\n  -webkit-box-flex: 1;\n  -webkit-flex: 1;\n  -ms-flex: 1;\n  flex: 1;\n  width: 100%; }\n  ion-segment button,\n  ion-segment [button] {\n    margin-left: 0;\n    margin-right: 0;\n    -webkit-box-flex: 1;\n    -webkit-flex: 1;\n    -ms-flex: 1;\n    flex: 1;\n    display: block;\n    overflow: hidden;\n    padding: 0 16px;\n    width: 0;\n    border-width: 1px 0px 1px 1px;\n    border-radius: 0;\n    text-align: center;\n    text-overflow: ellipsis;\n    white-space: nowrap;\n    background: none; }\n\nion-switch {\n  display: block;\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  -ms-user-select: none;\n  user-select: none; }\n\nion-switch media-switch {\n  margin: 0;\n  cursor: pointer; }\n\nion-switch[aria-disabled=true] {\n  opacity: 0.5;\n  color: #666;\n  pointer-events: none; }\n\nion-tabs {\n  display: -webkit-box;\n  display: -webkit-flex;\n  display: -ms-flexbox;\n  display: flex;\n  -webkit-box-orient: vertical;\n  -webkit-box-direction: normal;\n  -webkit-flex-direction: column;\n  -ms-flex-direction: column;\n  flex-direction: column;\n  overflow: hidden;\n  width: 100%;\n  height: 100%;\n  max-width: 100%;\n  max-height: 100%;\n  margin: 0;\n  padding: 0; }\n\nion-tab {\n  position: absolute;\n  top: 0;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  width: 100%;\n  height: 100%;\n  overflow: hidden;\n  -webkit-box-orient: vertical;\n  -webkit-box-direction: normal;\n  -webkit-flex-direction: column;\n  -ms-flex-direction: column;\n  flex-direction: column;\n  display: none; }\n  ion-tab.show-tab {\n    display: -webkit-box;\n    display: -webkit-flex;\n    display: -ms-flexbox;\n    display: flex; }\n\nion-tabs > ion-navbar-section {\n  -webkit-box-ordinal-group: -29;\n  -webkit-order: -30;\n  -ms-flex-order: -30;\n  order: -30; }\n\nion-tabbar-section {\n  position: relative;\n  -webkit-box-ordinal-group: 21;\n  -webkit-order: 20;\n  -ms-flex-order: 20;\n  order: 20; }\n\n[tabbar-placement=top] ion-tabbar-section {\n  -webkit-box-ordinal-group: -19;\n  -webkit-order: -20;\n  -ms-flex-order: -20;\n  order: -20; }\n\ntabbar {\n  position: relative;\n  display: -webkit-box;\n  display: -webkit-flex;\n  display: -ms-flexbox;\n  display: flex;\n  -webkit-box-pack: center;\n  -webkit-justify-content: center;\n  -ms-flex-pack: center;\n  justify-content: center;\n  overflow: hidden;\n  background: #f8f8f8; }\n\n.tab-button {\n  position: relative;\n  z-index: 0;\n  overflow: hidden;\n  display: -webkit-box;\n  display: -webkit-flex;\n  display: -ms-flexbox;\n  display: flex;\n  -webkit-box-orient: vertical;\n  -webkit-box-direction: normal;\n  -webkit-flex-direction: column;\n  -ms-flex-direction: column;\n  flex-direction: column;\n  -webkit-box-pack: center;\n  -webkit-justify-content: center;\n  -ms-flex-pack: center;\n  justify-content: center;\n  -webkit-box-flex: 1;\n  -webkit-flex: 1;\n  -ms-flex: 1;\n  flex: 1;\n  -webkit-align-self: center;\n  -ms-flex-item-align: center;\n  align-self: center;\n  -webkit-box-align: center;\n  -webkit-align-items: center;\n  -ms-flex-align: center;\n  align-items: center;\n  margin: 0;\n  padding: 10px;\n  min-width: 80px;\n  max-width: 240px;\n  text-align: center;\n  cursor: pointer;\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  -ms-user-select: none;\n  user-select: none;\n  color: #8c8c8c;\n  border: 0;\n  border-radius: 0;\n  background: none; }\n\n.tab-button:hover:not(.disable-hover),\n.tab-button[aria-selected=true] {\n  color: #387ef5; }\n\n.tab-button-text {\n  margin-top: 3px;\n  margin-bottom: 2px; }\n\n.tab-button-text,\n.tab-button-icon {\n  -webkit-align-self: center;\n  -ms-flex-item-align: center;\n  align-self: center;\n  min-width: 26px;\n  max-width: 100%;\n  overflow: hidden;\n  white-space: nowrap;\n  text-overflow: ellipsis;\n  display: none; }\n\n.has-icon .tab-button-icon,\n.has-title .tab-button-text {\n  display: block; }\n\n.has-title-only .tab-button-text {\n  white-space: normal; }\n\ntab-highlight {\n  display: none; }\n\n[tabbar-icons=bottom] .tab-button .tab-button-icon {\n  -webkit-box-ordinal-group: 11;\n  -webkit-order: 10;\n  -ms-flex-order: 10;\n  order: 10; }\n\n[tabbar-icons=left] .tab-button {\n  -webkit-box-orient: horizontal;\n  -webkit-box-direction: normal;\n  -webkit-flex-direction: row;\n  -ms-flex-direction: row;\n  flex-direction: row; }\n  [tabbar-icons=left] .tab-button .tab-button-icon {\n    text-align: right;\n    padding-right: 8px; }\n\n[tabbar-icons=right] .tab-button {\n  -webkit-box-orient: horizontal;\n  -webkit-box-direction: normal;\n  -webkit-flex-direction: row;\n  -ms-flex-direction: row;\n  flex-direction: row; }\n  [tabbar-icons=right] .tab-button .tab-button-icon {\n    -webkit-box-ordinal-group: 11;\n    -webkit-order: 10;\n    -ms-flex-order: 10;\n    order: 10;\n    text-align: left;\n    padding-left: 8px; }\n\n[tabbar-icons=hide] .tab-button-icon {\n  display: none; }\n\ntabbar[primary] {\n  background-color: #387ef5; }\n  tabbar[primary] .tab-button {\n    color: white; }\n  tabbar[primary] .tab-button:hover:not(.disable-hover),\n  tabbar[primary] .tab-button[aria-selected=true] {\n    color: white; }\n\ntabbar[secondary] {\n  background-color: #32db64; }\n  tabbar[secondary] .tab-button {\n    color: white; }\n  tabbar[secondary] .tab-button:hover:not(.disable-hover),\n  tabbar[secondary] .tab-button[aria-selected=true] {\n    color: white; }\n\ntabbar[danger] {\n  background-color: #f53d3d; }\n  tabbar[danger] .tab-button {\n    color: white; }\n  tabbar[danger] .tab-button:hover:not(.disable-hover),\n  tabbar[danger] .tab-button[aria-selected=true] {\n    color: white; }\n\ntabbar[light] {\n  background-color: #f4f4f4; }\n  tabbar[light] .tab-button {\n    color: black; }\n  tabbar[light] .tab-button:hover:not(.disable-hover),\n  tabbar[light] .tab-button[aria-selected=true] {\n    color: black; }\n\ntabbar[dark] {\n  background-color: #222; }\n  tabbar[dark] .tab-button {\n    color: white; }\n  tabbar[dark] .tab-button:hover:not(.disable-hover),\n  tabbar[dark] .tab-button[aria-selected=true] {\n    color: white; }\n\n@font-face {\n  font-family: \"Ionicons\";\n  src: url(\"../fonts/ionicons.ttf?v=3.0.0\") format(\"truetype\"), url(\"../fonts/ionicons.woff?v=3.0.0\") format(\"woff\");\n  font-weight: normal;\n  font-style: normal; }\n\nicon,\n[icon],\n.icon {\n  display: inline-block;\n  font-family: \"Ionicons\";\n  font-style: normal;\n  font-weight: normal;\n  font-variant: normal;\n  text-transform: none;\n  text-rendering: auto;\n  line-height: 1;\n  speak: none;\n  -webkit-font-smoothing: antialiased;\n  -moz-osx-font-smoothing: grayscale; }\n\n/*!\n  Ionicons, v3.0.0\n  Created by Ben Sperry for the Ionic Framework, https://ionicons.com/\n  https://twitter.com/benjsperry  https://twitter.com/ionicframework\n  MIT License: https://github.com/ionic-team/ionicons\n\n  Android-style icons originally built by Google’s\n  Material Design Icons: https://github.com/google/material-design-icons\n  used under CC BY http://creativecommons.org/licenses/by/4.0/\n  Modified icons to fit ionicon’s grid from original.\n*/\n.ion-ios-add:before {\n  content: \"\\f102\"; }\n\n.ion-ios-add-circle:before {\n  content: \"\\f101\"; }\n\n.ion-ios-add-circle-outline:before {\n  content: \"\\f100\"; }\n\n.ion-ios-alarm:before {\n  content: \"\\f3c8\"; }\n\n.ion-ios-alarm-outline:before {\n  content: \"\\f3c7\"; }\n\n.ion-ios-albums:before {\n  content: \"\\f3ca\"; }\n\n.ion-ios-albums-outline:before {\n  content: \"\\f3c9\"; }\n\n.ion-ios-alert:before {\n  content: \"\\f104\"; }\n\n.ion-ios-alert-outline:before {\n  content: \"\\f103\"; }\n\n.ion-ios-american-football:before {\n  content: \"\\f106\"; }\n\n.ion-ios-american-football-outline:before {\n  content: \"\\f105\"; }\n\n.ion-ios-analytics:before {\n  content: \"\\f3ce\"; }\n\n.ion-ios-analytics-outline:before {\n  content: \"\\f3cd\"; }\n\n.ion-ios-aperture:before {\n  content: \"\\f108\"; }\n\n.ion-ios-aperture-outline:before {\n  content: \"\\f107\"; }\n\n.ion-ios-apps:before {\n  content: \"\\f10a\"; }\n\n.ion-ios-apps-outline:before {\n  content: \"\\f109\"; }\n\n.ion-ios-appstore:before {\n  content: \"\\f10c\"; }\n\n.ion-ios-appstore-outline:before {\n  content: \"\\f10b\"; }\n\n.ion-ios-archive:before {\n  content: \"\\f10e\"; }\n\n.ion-ios-archive-outline:before {\n  content: \"\\f10d\"; }\n\n.ion-ios-arrow-back:before {\n  content: \"\\f3cf\"; }\n\n.ion-ios-arrow-down:before {\n  content: \"\\f3d0\"; }\n\n.ion-ios-arrow-dropdown:before {\n  content: \"\\f110\"; }\n\n.ion-ios-arrow-dropdown-circle:before {\n  content: \"\\f10f\"; }\n\n.ion-ios-arrow-dropleft:before {\n  content: \"\\f112\"; }\n\n.ion-ios-arrow-dropleft-circle:before {\n  content: \"\\f111\"; }\n\n.ion-ios-arrow-dropright:before {\n  content: \"\\f114\"; }\n\n.ion-ios-arrow-dropright-circle:before {\n  content: \"\\f113\"; }\n\n.ion-ios-arrow-dropup:before {\n  content: \"\\f116\"; }\n\n.ion-ios-arrow-dropup-circle:before {\n  content: \"\\f115\"; }\n\n.ion-ios-arrow-forward:before {\n  content: \"\\f3d1\"; }\n\n.ion-ios-arrow-round-back:before {\n  content: \"\\f117\"; }\n\n.ion-ios-arrow-round-down:before {\n  content: \"\\f118\"; }\n\n.ion-ios-arrow-round-forward:before {\n  content: \"\\f119\"; }\n\n.ion-ios-arrow-round-up:before {\n  content: \"\\f11a\"; }\n\n.ion-ios-arrow-up:before {\n  content: \"\\f3d8\"; }\n\n.ion-ios-at:before {\n  content: \"\\f3da\"; }\n\n.ion-ios-at-outline:before {\n  content: \"\\f3d9\"; }\n\n.ion-ios-attach:before {\n  content: \"\\f11b\"; }\n\n.ion-ios-backspace:before {\n  content: \"\\f11d\"; }\n\n.ion-ios-backspace-outline:before {\n  content: \"\\f11c\"; }\n\n.ion-ios-barcode:before {\n  content: \"\\f3dc\"; }\n\n.ion-ios-barcode-outline:before {\n  content: \"\\f3db\"; }\n\n.ion-ios-baseball:before {\n  content: \"\\f3de\"; }\n\n.ion-ios-baseball-outline:before {\n  content: \"\\f3dd\"; }\n\n.ion-ios-basket:before {\n  content: \"\\f11f\"; }\n\n.ion-ios-basket-outline:before {\n  content: \"\\f11e\"; }\n\n.ion-ios-basketball:before {\n  content: \"\\f3e0\"; }\n\n.ion-ios-basketball-outline:before {\n  content: \"\\f3df\"; }\n\n.ion-ios-battery-charging:before {\n  content: \"\\f120\"; }\n\n.ion-ios-battery-dead:before {\n  content: \"\\f121\"; }\n\n.ion-ios-battery-full:before {\n  content: \"\\f122\"; }\n\n.ion-ios-beaker:before {\n  content: \"\\f124\"; }\n\n.ion-ios-beaker-outline:before {\n  content: \"\\f123\"; }\n\n.ion-ios-beer:before {\n  content: \"\\f126\"; }\n\n.ion-ios-beer-outline:before {\n  content: \"\\f125\"; }\n\n.ion-ios-bicycle:before {\n  content: \"\\f127\"; }\n\n.ion-ios-bluetooth:before {\n  content: \"\\f128\"; }\n\n.ion-ios-boat:before {\n  content: \"\\f12a\"; }\n\n.ion-ios-boat-outline:before {\n  content: \"\\f129\"; }\n\n.ion-ios-body:before {\n  content: \"\\f3e4\"; }\n\n.ion-ios-body-outline:before {\n  content: \"\\f3e3\"; }\n\n.ion-ios-bonfire:before {\n  content: \"\\f12c\"; }\n\n.ion-ios-bonfire-outline:before {\n  content: \"\\f12b\"; }\n\n.ion-ios-book:before {\n  content: \"\\f3e8\"; }\n\n.ion-ios-book-outline:before {\n  content: \"\\f3e7\"; }\n\n.ion-ios-bookmark:before {\n  content: \"\\f12e\"; }\n\n.ion-ios-bookmark-outline:before {\n  content: \"\\f12d\"; }\n\n.ion-ios-bookmarks:before {\n  content: \"\\f3ea\"; }\n\n.ion-ios-bookmarks-outline:before {\n  content: \"\\f3e9\"; }\n\n.ion-ios-bowtie:before {\n  content: \"\\f130\"; }\n\n.ion-ios-bowtie-outline:before {\n  content: \"\\f12f\"; }\n\n.ion-ios-briefcase:before {\n  content: \"\\f3ee\"; }\n\n.ion-ios-briefcase-outline:before {\n  content: \"\\f3ed\"; }\n\n.ion-ios-browsers:before {\n  content: \"\\f3f0\"; }\n\n.ion-ios-browsers-outline:before {\n  content: \"\\f3ef\"; }\n\n.ion-ios-brush:before {\n  content: \"\\f132\"; }\n\n.ion-ios-brush-outline:before {\n  content: \"\\f131\"; }\n\n.ion-ios-bug:before {\n  content: \"\\f134\"; }\n\n.ion-ios-bug-outline:before {\n  content: \"\\f133\"; }\n\n.ion-ios-build:before {\n  content: \"\\f136\"; }\n\n.ion-ios-build-outline:before {\n  content: \"\\f135\"; }\n\n.ion-ios-bulb:before {\n  content: \"\\f138\"; }\n\n.ion-ios-bulb-outline:before {\n  content: \"\\f137\"; }\n\n.ion-ios-bus:before {\n  content: \"\\f13a\"; }\n\n.ion-ios-bus-outline:before {\n  content: \"\\f139\"; }\n\n.ion-ios-cafe:before {\n  content: \"\\f13c\"; }\n\n.ion-ios-cafe-outline:before {\n  content: \"\\f13b\"; }\n\n.ion-ios-calculator:before {\n  content: \"\\f3f2\"; }\n\n.ion-ios-calculator-outline:before {\n  content: \"\\f3f1\"; }\n\n.ion-ios-calendar:before {\n  content: \"\\f3f4\"; }\n\n.ion-ios-calendar-outline:before {\n  content: \"\\f3f3\"; }\n\n.ion-ios-call:before {\n  content: \"\\f13e\"; }\n\n.ion-ios-call-outline:before {\n  content: \"\\f13d\"; }\n\n.ion-ios-camera:before {\n  content: \"\\f3f6\"; }\n\n.ion-ios-camera-outline:before {\n  content: \"\\f3f5\"; }\n\n.ion-ios-car:before {\n  content: \"\\f140\"; }\n\n.ion-ios-car-outline:before {\n  content: \"\\f13f\"; }\n\n.ion-ios-card:before {\n  content: \"\\f142\"; }\n\n.ion-ios-card-outline:before {\n  content: \"\\f141\"; }\n\n.ion-ios-cart:before {\n  content: \"\\f3f8\"; }\n\n.ion-ios-cart-outline:before {\n  content: \"\\f3f7\"; }\n\n.ion-ios-cash:before {\n  content: \"\\f144\"; }\n\n.ion-ios-cash-outline:before {\n  content: \"\\f143\"; }\n\n.ion-ios-chatboxes:before {\n  content: \"\\f3fa\"; }\n\n.ion-ios-chatboxes-outline:before {\n  content: \"\\f3f9\"; }\n\n.ion-ios-chatbubbles:before {\n  content: \"\\f146\"; }\n\n.ion-ios-chatbubbles-outline:before {\n  content: \"\\f145\"; }\n\n.ion-ios-checkbox:before {\n  content: \"\\f148\"; }\n\n.ion-ios-checkbox-outline:before {\n  content: \"\\f147\"; }\n\n.ion-ios-checkmark:before {\n  content: \"\\f3ff\"; }\n\n.ion-ios-checkmark-circle:before {\n  content: \"\\f14a\"; }\n\n.ion-ios-checkmark-circle-outline:before {\n  content: \"\\f149\"; }\n\n.ion-ios-clipboard:before {\n  content: \"\\f14c\"; }\n\n.ion-ios-clipboard-outline:before {\n  content: \"\\f14b\"; }\n\n.ion-ios-clock:before {\n  content: \"\\f403\"; }\n\n.ion-ios-clock-outline:before {\n  content: \"\\f402\"; }\n\n.ion-ios-close:before {\n  content: \"\\f406\"; }\n\n.ion-ios-close-circle:before {\n  content: \"\\f14e\"; }\n\n.ion-ios-close-circle-outline:before {\n  content: \"\\f14d\"; }\n\n.ion-ios-closed-captioning:before {\n  content: \"\\f150\"; }\n\n.ion-ios-closed-captioning-outline:before {\n  content: \"\\f14f\"; }\n\n.ion-ios-cloud:before {\n  content: \"\\f40c\"; }\n\n.ion-ios-cloud-circle:before {\n  content: \"\\f152\"; }\n\n.ion-ios-cloud-circle-outline:before {\n  content: \"\\f151\"; }\n\n.ion-ios-cloud-done:before {\n  content: \"\\f154\"; }\n\n.ion-ios-cloud-done-outline:before {\n  content: \"\\f153\"; }\n\n.ion-ios-cloud-download:before {\n  content: \"\\f408\"; }\n\n.ion-ios-cloud-download-outline:before {\n  content: \"\\f407\"; }\n\n.ion-ios-cloud-outline:before {\n  content: \"\\f409\"; }\n\n.ion-ios-cloud-upload:before {\n  content: \"\\f40b\"; }\n\n.ion-ios-cloud-upload-outline:before {\n  content: \"\\f40a\"; }\n\n.ion-ios-cloudy:before {\n  content: \"\\f410\"; }\n\n.ion-ios-cloudy-night:before {\n  content: \"\\f40e\"; }\n\n.ion-ios-cloudy-night-outline:before {\n  content: \"\\f40d\"; }\n\n.ion-ios-cloudy-outline:before {\n  content: \"\\f40f\"; }\n\n.ion-ios-code:before {\n  content: \"\\f157\"; }\n\n.ion-ios-code-download:before {\n  content: \"\\f155\"; }\n\n.ion-ios-code-working:before {\n  content: \"\\f156\"; }\n\n.ion-ios-cog:before {\n  content: \"\\f412\"; }\n\n.ion-ios-cog-outline:before {\n  content: \"\\f411\"; }\n\n.ion-ios-color-fill:before {\n  content: \"\\f159\"; }\n\n.ion-ios-color-fill-outline:before {\n  content: \"\\f158\"; }\n\n.ion-ios-color-filter:before {\n  content: \"\\f414\"; }\n\n.ion-ios-color-filter-outline:before {\n  content: \"\\f413\"; }\n\n.ion-ios-color-palette:before {\n  content: \"\\f15b\"; }\n\n.ion-ios-color-palette-outline:before {\n  content: \"\\f15a\"; }\n\n.ion-ios-color-wand:before {\n  content: \"\\f416\"; }\n\n.ion-ios-color-wand-outline:before {\n  content: \"\\f415\"; }\n\n.ion-ios-compass:before {\n  content: \"\\f15d\"; }\n\n.ion-ios-compass-outline:before {\n  content: \"\\f15c\"; }\n\n.ion-ios-construct:before {\n  content: \"\\f15f\"; }\n\n.ion-ios-construct-outline:before {\n  content: \"\\f15e\"; }\n\n.ion-ios-contact:before {\n  content: \"\\f41a\"; }\n\n.ion-ios-contact-outline:before {\n  content: \"\\f419\"; }\n\n.ion-ios-contacts:before {\n  content: \"\\f161\"; }\n\n.ion-ios-contacts-outline:before {\n  content: \"\\f160\"; }\n\n.ion-ios-contract:before {\n  content: \"\\f162\"; }\n\n.ion-ios-contrast:before {\n  content: \"\\f163\"; }\n\n.ion-ios-copy:before {\n  content: \"\\f41c\"; }\n\n.ion-ios-copy-outline:before {\n  content: \"\\f41b\"; }\n\n.ion-ios-create:before {\n  content: \"\\f165\"; }\n\n.ion-ios-create-outline:before {\n  content: \"\\f164\"; }\n\n.ion-ios-crop:before {\n  content: \"\\f41e\"; }\n\n.ion-ios-crop-outline:before {\n  content: \"\\f166\"; }\n\n.ion-ios-cube:before {\n  content: \"\\f168\"; }\n\n.ion-ios-cube-outline:before {\n  content: \"\\f167\"; }\n\n.ion-ios-cut:before {\n  content: \"\\f16a\"; }\n\n.ion-ios-cut-outline:before {\n  content: \"\\f169\"; }\n\n.ion-ios-desktop:before {\n  content: \"\\f16c\"; }\n\n.ion-ios-desktop-outline:before {\n  content: \"\\f16b\"; }\n\n.ion-ios-disc:before {\n  content: \"\\f16e\"; }\n\n.ion-ios-disc-outline:before {\n  content: \"\\f16d\"; }\n\n.ion-ios-document:before {\n  content: \"\\f170\"; }\n\n.ion-ios-document-outline:before {\n  content: \"\\f16f\"; }\n\n.ion-ios-done-all:before {\n  content: \"\\f171\"; }\n\n.ion-ios-download:before {\n  content: \"\\f420\"; }\n\n.ion-ios-download-outline:before {\n  content: \"\\f41f\"; }\n\n.ion-ios-easel:before {\n  content: \"\\f173\"; }\n\n.ion-ios-easel-outline:before {\n  content: \"\\f172\"; }\n\n.ion-ios-egg:before {\n  content: \"\\f175\"; }\n\n.ion-ios-egg-outline:before {\n  content: \"\\f174\"; }\n\n.ion-ios-exit:before {\n  content: \"\\f177\"; }\n\n.ion-ios-exit-outline:before {\n  content: \"\\f176\"; }\n\n.ion-ios-expand:before {\n  content: \"\\f178\"; }\n\n.ion-ios-eye:before {\n  content: \"\\f425\"; }\n\n.ion-ios-eye-off:before {\n  content: \"\\f17a\"; }\n\n.ion-ios-eye-off-outline:before {\n  content: \"\\f179\"; }\n\n.ion-ios-eye-outline:before {\n  content: \"\\f424\"; }\n\n.ion-ios-fastforward:before {\n  content: \"\\f427\"; }\n\n.ion-ios-fastforward-outline:before {\n  content: \"\\f426\"; }\n\n.ion-ios-female:before {\n  content: \"\\f17b\"; }\n\n.ion-ios-filing:before {\n  content: \"\\f429\"; }\n\n.ion-ios-filing-outline:before {\n  content: \"\\f428\"; }\n\n.ion-ios-film:before {\n  content: \"\\f42b\"; }\n\n.ion-ios-film-outline:before {\n  content: \"\\f42a\"; }\n\n.ion-ios-finger-print:before {\n  content: \"\\f17c\"; }\n\n.ion-ios-flag:before {\n  content: \"\\f42d\"; }\n\n.ion-ios-flag-outline:before {\n  content: \"\\f42c\"; }\n\n.ion-ios-flame:before {\n  content: \"\\f42f\"; }\n\n.ion-ios-flame-outline:before {\n  content: \"\\f42e\"; }\n\n.ion-ios-flash:before {\n  content: \"\\f17e\"; }\n\n.ion-ios-flash-outline:before {\n  content: \"\\f17d\"; }\n\n.ion-ios-flask:before {\n  content: \"\\f431\"; }\n\n.ion-ios-flask-outline:before {\n  content: \"\\f430\"; }\n\n.ion-ios-flower:before {\n  content: \"\\f433\"; }\n\n.ion-ios-flower-outline:before {\n  content: \"\\f432\"; }\n\n.ion-ios-folder:before {\n  content: \"\\f435\"; }\n\n.ion-ios-folder-open:before {\n  content: \"\\f180\"; }\n\n.ion-ios-folder-open-outline:before {\n  content: \"\\f17f\"; }\n\n.ion-ios-folder-outline:before {\n  content: \"\\f434\"; }\n\n.ion-ios-football:before {\n  content: \"\\f437\"; }\n\n.ion-ios-football-outline:before {\n  content: \"\\f436\"; }\n\n.ion-ios-funnel:before {\n  content: \"\\f182\"; }\n\n.ion-ios-funnel-outline:before {\n  content: \"\\f181\"; }\n\n.ion-ios-game-controller-a:before {\n  content: \"\\f439\"; }\n\n.ion-ios-game-controller-a-outline:before {\n  content: \"\\f438\"; }\n\n.ion-ios-game-controller-b:before {\n  content: \"\\f43b\"; }\n\n.ion-ios-game-controller-b-outline:before {\n  content: \"\\f43a\"; }\n\n.ion-ios-git-branch:before {\n  content: \"\\f183\"; }\n\n.ion-ios-git-commit:before {\n  content: \"\\f184\"; }\n\n.ion-ios-git-compare:before {\n  content: \"\\f185\"; }\n\n.ion-ios-git-merge:before {\n  content: \"\\f186\"; }\n\n.ion-ios-git-network:before {\n  content: \"\\f187\"; }\n\n.ion-ios-git-pull-request:before {\n  content: \"\\f188\"; }\n\n.ion-ios-glasses:before {\n  content: \"\\f43f\"; }\n\n.ion-ios-glasses-outline:before {\n  content: \"\\f43e\"; }\n\n.ion-ios-globe:before {\n  content: \"\\f18a\"; }\n\n.ion-ios-globe-outline:before {\n  content: \"\\f189\"; }\n\n.ion-ios-grid:before {\n  content: \"\\f18c\"; }\n\n.ion-ios-grid-outline:before {\n  content: \"\\f18b\"; }\n\n.ion-ios-hammer:before {\n  content: \"\\f18e\"; }\n\n.ion-ios-hammer-outline:before {\n  content: \"\\f18d\"; }\n\n.ion-ios-hand:before {\n  content: \"\\f190\"; }\n\n.ion-ios-hand-outline:before {\n  content: \"\\f18f\"; }\n\n.ion-ios-happy:before {\n  content: \"\\f192\"; }\n\n.ion-ios-happy-outline:before {\n  content: \"\\f191\"; }\n\n.ion-ios-headset:before {\n  content: \"\\f194\"; }\n\n.ion-ios-headset-outline:before {\n  content: \"\\f193\"; }\n\n.ion-ios-heart:before {\n  content: \"\\f443\"; }\n\n.ion-ios-heart-outline:before {\n  content: \"\\f442\"; }\n\n.ion-ios-help:before {\n  content: \"\\f446\"; }\n\n.ion-ios-help-buoy:before {\n  content: \"\\f196\"; }\n\n.ion-ios-help-buoy-outline:before {\n  content: \"\\f195\"; }\n\n.ion-ios-help-circle:before {\n  content: \"\\f198\"; }\n\n.ion-ios-help-circle-outline:before {\n  content: \"\\f197\"; }\n\n.ion-ios-home:before {\n  content: \"\\f448\"; }\n\n.ion-ios-home-outline:before {\n  content: \"\\f447\"; }\n\n.ion-ios-ice-cream:before {\n  content: \"\\f19a\"; }\n\n.ion-ios-ice-cream-outline:before {\n  content: \"\\f199\"; }\n\n.ion-ios-image:before {\n  content: \"\\f19c\"; }\n\n.ion-ios-image-outline:before {\n  content: \"\\f19b\"; }\n\n.ion-ios-images:before {\n  content: \"\\f19e\"; }\n\n.ion-ios-images-outline:before {\n  content: \"\\f19d\"; }\n\n.ion-ios-infinite:before {\n  content: \"\\f44a\"; }\n\n.ion-ios-infinite-outline:before {\n  content: \"\\f449\"; }\n\n.ion-ios-information:before {\n  content: \"\\f44d\"; }\n\n.ion-ios-information-circle:before {\n  content: \"\\f1a0\"; }\n\n.ion-ios-information-circle-outline:before {\n  content: \"\\f19f\"; }\n\n.ion-ios-ionic:before {\n  content: \"\\f1a1\"; }\n\n.ion-ios-ionic-outline:before {\n  content: \"\\f44e\"; }\n\n.ion-ios-ionitron:before {\n  content: \"\\f1a3\"; }\n\n.ion-ios-ionitron-outline:before {\n  content: \"\\f1a2\"; }\n\n.ion-ios-jet:before {\n  content: \"\\f1a5\"; }\n\n.ion-ios-jet-outline:before {\n  content: \"\\f1a4\"; }\n\n.ion-ios-key:before {\n  content: \"\\f1a7\"; }\n\n.ion-ios-key-outline:before {\n  content: \"\\f1a6\"; }\n\n.ion-ios-keypad:before {\n  content: \"\\f450\"; }\n\n.ion-ios-keypad-outline:before {\n  content: \"\\f44f\"; }\n\n.ion-ios-laptop:before {\n  content: \"\\f1a8\"; }\n\n.ion-ios-leaf:before {\n  content: \"\\f1aa\"; }\n\n.ion-ios-leaf-outline:before {\n  content: \"\\f1a9\"; }\n\n.ion-ios-list:before {\n  content: \"\\f454\"; }\n\n.ion-ios-list-box:before {\n  content: \"\\f1ac\"; }\n\n.ion-ios-list-box-outline:before {\n  content: \"\\f1ab\"; }\n\n.ion-ios-locate:before {\n  content: \"\\f1ae\"; }\n\n.ion-ios-locate-outline:before {\n  content: \"\\f1ad\"; }\n\n.ion-ios-lock:before {\n  content: \"\\f1b0\"; }\n\n.ion-ios-lock-outline:before {\n  content: \"\\f1af\"; }\n\n.ion-ios-log-in:before {\n  content: \"\\f1b1\"; }\n\n.ion-ios-log-out:before {\n  content: \"\\f1b2\"; }\n\n.ion-ios-magnet:before {\n  content: \"\\f1b4\"; }\n\n.ion-ios-magnet-outline:before {\n  content: \"\\f1b3\"; }\n\n.ion-ios-mail:before {\n  content: \"\\f1b8\"; }\n\n.ion-ios-mail-open:before {\n  content: \"\\f1b6\"; }\n\n.ion-ios-mail-open-outline:before {\n  content: \"\\f1b5\"; }\n\n.ion-ios-mail-outline:before {\n  content: \"\\f1b7\"; }\n\n.ion-ios-male:before {\n  content: \"\\f1b9\"; }\n\n.ion-ios-man:before {\n  content: \"\\f1bb\"; }\n\n.ion-ios-man-outline:before {\n  content: \"\\f1ba\"; }\n\n.ion-ios-map:before {\n  content: \"\\f1bd\"; }\n\n.ion-ios-map-outline:before {\n  content: \"\\f1bc\"; }\n\n.ion-ios-medal:before {\n  content: \"\\f1bf\"; }\n\n.ion-ios-medal-outline:before {\n  content: \"\\f1be\"; }\n\n.ion-ios-medical:before {\n  content: \"\\f45c\"; }\n\n.ion-ios-medical-outline:before {\n  content: \"\\f45b\"; }\n\n.ion-ios-medkit:before {\n  content: \"\\f45e\"; }\n\n.ion-ios-medkit-outline:before {\n  content: \"\\f45d\"; }\n\n.ion-ios-megaphone:before {\n  content: \"\\f1c1\"; }\n\n.ion-ios-megaphone-outline:before {\n  content: \"\\f1c0\"; }\n\n.ion-ios-menu:before {\n  content: \"\\f1c3\"; }\n\n.ion-ios-menu-outline:before {\n  content: \"\\f1c2\"; }\n\n.ion-ios-mic:before {\n  content: \"\\f461\"; }\n\n.ion-ios-mic-off:before {\n  content: \"\\f45f\"; }\n\n.ion-ios-mic-off-outline:before {\n  content: \"\\f1c4\"; }\n\n.ion-ios-mic-outline:before {\n  content: \"\\f460\"; }\n\n.ion-ios-microphone:before {\n  content: \"\\f1c6\"; }\n\n.ion-ios-microphone-outline:before {\n  content: \"\\f1c5\"; }\n\n.ion-ios-moon:before {\n  content: \"\\f468\"; }\n\n.ion-ios-moon-outline:before {\n  content: \"\\f467\"; }\n\n.ion-ios-more:before {\n  content: \"\\f1c8\"; }\n\n.ion-ios-more-outline:before {\n  content: \"\\f1c7\"; }\n\n.ion-ios-move:before {\n  content: \"\\f1cb\"; }\n\n.ion-ios-musical-note:before {\n  content: \"\\f46b\"; }\n\n.ion-ios-musical-note-outline:before {\n  content: \"\\f1cc\"; }\n\n.ion-ios-musical-notes:before {\n  content: \"\\f46c\"; }\n\n.ion-ios-musical-notes-outline:before {\n  content: \"\\f1cd\"; }\n\n.ion-ios-navigate:before {\n  content: \"\\f46e\"; }\n\n.ion-ios-navigate-outline:before {\n  content: \"\\f46d\"; }\n\n.ion-ios-no-smoking:before {\n  content: \"\\f1cf\"; }\n\n.ion-ios-no-smoking-outline:before {\n  content: \"\\f1ce\"; }\n\n.ion-ios-notifications:before {\n  content: \"\\f1d3\"; }\n\n.ion-ios-notifications-off:before {\n  content: \"\\f1d1\"; }\n\n.ion-ios-notifications-off-outline:before {\n  content: \"\\f1d0\"; }\n\n.ion-ios-notifications-outline:before {\n  content: \"\\f1d2\"; }\n\n.ion-ios-nuclear:before {\n  content: \"\\f1d5\"; }\n\n.ion-ios-nuclear-outline:before {\n  content: \"\\f1d4\"; }\n\n.ion-ios-nutrition:before {\n  content: \"\\f470\"; }\n\n.ion-ios-nutrition-outline:before {\n  content: \"\\f46f\"; }\n\n.ion-ios-open:before {\n  content: \"\\f1d7\"; }\n\n.ion-ios-open-outline:before {\n  content: \"\\f1d6\"; }\n\n.ion-ios-options:before {\n  content: \"\\f1d9\"; }\n\n.ion-ios-options-outline:before {\n  content: \"\\f1d8\"; }\n\n.ion-ios-outlet:before {\n  content: \"\\f1db\"; }\n\n.ion-ios-outlet-outline:before {\n  content: \"\\f1da\"; }\n\n.ion-ios-paper:before {\n  content: \"\\f472\"; }\n\n.ion-ios-paper-outline:before {\n  content: \"\\f471\"; }\n\n.ion-ios-paper-plane:before {\n  content: \"\\f1dd\"; }\n\n.ion-ios-paper-plane-outline:before {\n  content: \"\\f1dc\"; }\n\n.ion-ios-partly-sunny:before {\n  content: \"\\f1df\"; }\n\n.ion-ios-partly-sunny-outline:before {\n  content: \"\\f1de\"; }\n\n.ion-ios-pause:before {\n  content: \"\\f478\"; }\n\n.ion-ios-pause-outline:before {\n  content: \"\\f477\"; }\n\n.ion-ios-paw:before {\n  content: \"\\f47a\"; }\n\n.ion-ios-paw-outline:before {\n  content: \"\\f479\"; }\n\n.ion-ios-people:before {\n  content: \"\\f47c\"; }\n\n.ion-ios-people-outline:before {\n  content: \"\\f47b\"; }\n\n.ion-ios-person:before {\n  content: \"\\f47e\"; }\n\n.ion-ios-person-add:before {\n  content: \"\\f1e1\"; }\n\n.ion-ios-person-add-outline:before {\n  content: \"\\f1e0\"; }\n\n.ion-ios-person-outline:before {\n  content: \"\\f47d\"; }\n\n.ion-ios-phone-landscape:before {\n  content: \"\\f1e2\"; }\n\n.ion-ios-phone-portrait:before {\n  content: \"\\f1e3\"; }\n\n.ion-ios-photos:before {\n  content: \"\\f482\"; }\n\n.ion-ios-photos-outline:before {\n  content: \"\\f481\"; }\n\n.ion-ios-pie:before {\n  content: \"\\f484\"; }\n\n.ion-ios-pie-outline:before {\n  content: \"\\f483\"; }\n\n.ion-ios-pin:before {\n  content: \"\\f1e5\"; }\n\n.ion-ios-pin-outline:before {\n  content: \"\\f1e4\"; }\n\n.ion-ios-pint:before {\n  content: \"\\f486\"; }\n\n.ion-ios-pint-outline:before {\n  content: \"\\f485\"; }\n\n.ion-ios-pizza:before {\n  content: \"\\f1e7\"; }\n\n.ion-ios-pizza-outline:before {\n  content: \"\\f1e6\"; }\n\n.ion-ios-plane:before {\n  content: \"\\f1e9\"; }\n\n.ion-ios-plane-outline:before {\n  content: \"\\f1e8\"; }\n\n.ion-ios-planet:before {\n  content: \"\\f1eb\"; }\n\n.ion-ios-planet-outline:before {\n  content: \"\\f1ea\"; }\n\n.ion-ios-play:before {\n  content: \"\\f488\"; }\n\n.ion-ios-play-outline:before {\n  content: \"\\f487\"; }\n\n.ion-ios-podium:before {\n  content: \"\\f1ed\"; }\n\n.ion-ios-podium-outline:before {\n  content: \"\\f1ec\"; }\n\n.ion-ios-power:before {\n  content: \"\\f1ef\"; }\n\n.ion-ios-power-outline:before {\n  content: \"\\f1ee\"; }\n\n.ion-ios-pricetag:before {\n  content: \"\\f48d\"; }\n\n.ion-ios-pricetag-outline:before {\n  content: \"\\f48c\"; }\n\n.ion-ios-pricetags:before {\n  content: \"\\f48f\"; }\n\n.ion-ios-pricetags-outline:before {\n  content: \"\\f48e\"; }\n\n.ion-ios-print:before {\n  content: \"\\f1f1\"; }\n\n.ion-ios-print-outline:before {\n  content: \"\\f1f0\"; }\n\n.ion-ios-pulse:before {\n  content: \"\\f493\"; }\n\n.ion-ios-pulse-outline:before {\n  content: \"\\f1f2\"; }\n\n.ion-ios-qr-scanner:before {\n  content: \"\\f1f3\"; }\n\n.ion-ios-quote:before {\n  content: \"\\f1f5\"; }\n\n.ion-ios-quote-outline:before {\n  content: \"\\f1f4\"; }\n\n.ion-ios-radio:before {\n  content: \"\\f1f9\"; }\n\n.ion-ios-radio-button-off:before {\n  content: \"\\f1f6\"; }\n\n.ion-ios-radio-button-on:before {\n  content: \"\\f1f7\"; }\n\n.ion-ios-radio-outline:before {\n  content: \"\\f1f8\"; }\n\n.ion-ios-rainy:before {\n  content: \"\\f495\"; }\n\n.ion-ios-rainy-outline:before {\n  content: \"\\f494\"; }\n\n.ion-ios-recording:before {\n  content: \"\\f497\"; }\n\n.ion-ios-recording-outline:before {\n  content: \"\\f496\"; }\n\n.ion-ios-redo:before {\n  content: \"\\f499\"; }\n\n.ion-ios-redo-outline:before {\n  content: \"\\f498\"; }\n\n.ion-ios-refresh:before {\n  content: \"\\f49c\"; }\n\n.ion-ios-refresh-circle:before {\n  content: \"\\f226\"; }\n\n.ion-ios-refresh-circle-outline:before {\n  content: \"\\f224\"; }\n\n.ion-ios-remove:before {\n  content: \"\\f1fc\"; }\n\n.ion-ios-remove-circle:before {\n  content: \"\\f1fb\"; }\n\n.ion-ios-remove-circle-outline:before {\n  content: \"\\f1fa\"; }\n\n.ion-ios-reorder:before {\n  content: \"\\f1fd\"; }\n\n.ion-ios-repeat:before {\n  content: \"\\f1fe\"; }\n\n.ion-ios-resize:before {\n  content: \"\\f1ff\"; }\n\n.ion-ios-restaurant:before {\n  content: \"\\f201\"; }\n\n.ion-ios-restaurant-outline:before {\n  content: \"\\f200\"; }\n\n.ion-ios-return-left:before {\n  content: \"\\f202\"; }\n\n.ion-ios-return-right:before {\n  content: \"\\f203\"; }\n\n.ion-ios-reverse-camera:before {\n  content: \"\\f49f\"; }\n\n.ion-ios-reverse-camera-outline:before {\n  content: \"\\f49e\"; }\n\n.ion-ios-rewind:before {\n  content: \"\\f4a1\"; }\n\n.ion-ios-rewind-outline:before {\n  content: \"\\f4a0\"; }\n\n.ion-ios-ribbon:before {\n  content: \"\\f205\"; }\n\n.ion-ios-ribbon-outline:before {\n  content: \"\\f204\"; }\n\n.ion-ios-rose:before {\n  content: \"\\f4a3\"; }\n\n.ion-ios-rose-outline:before {\n  content: \"\\f4a2\"; }\n\n.ion-ios-sad:before {\n  content: \"\\f207\"; }\n\n.ion-ios-sad-outline:before {\n  content: \"\\f206\"; }\n\n.ion-ios-school:before {\n  content: \"\\f209\"; }\n\n.ion-ios-school-outline:before {\n  content: \"\\f208\"; }\n\n.ion-ios-search:before {\n  content: \"\\f4a5\"; }\n\n.ion-ios-search-outline:before {\n  content: \"\\f20a\"; }\n\n.ion-ios-send:before {\n  content: \"\\f20c\"; }\n\n.ion-ios-send-outline:before {\n  content: \"\\f20b\"; }\n\n.ion-ios-settings:before {\n  content: \"\\f4a7\"; }\n\n.ion-ios-settings-outline:before {\n  content: \"\\f20d\"; }\n\n.ion-ios-share:before {\n  content: \"\\f211\"; }\n\n.ion-ios-share-alt:before {\n  content: \"\\f20f\"; }\n\n.ion-ios-share-alt-outline:before {\n  content: \"\\f20e\"; }\n\n.ion-ios-share-outline:before {\n  content: \"\\f210\"; }\n\n.ion-ios-shirt:before {\n  content: \"\\f213\"; }\n\n.ion-ios-shirt-outline:before {\n  content: \"\\f212\"; }\n\n.ion-ios-shuffle:before {\n  content: \"\\f4a9\"; }\n\n.ion-ios-skip-backward:before {\n  content: \"\\f215\"; }\n\n.ion-ios-skip-backward-outline:before {\n  content: \"\\f214\"; }\n\n.ion-ios-skip-forward:before {\n  content: \"\\f217\"; }\n\n.ion-ios-skip-forward-outline:before {\n  content: \"\\f216\"; }\n\n.ion-ios-snow:before {\n  content: \"\\f218\"; }\n\n.ion-ios-speedometer:before {\n  content: \"\\f4b0\"; }\n\n.ion-ios-speedometer-outline:before {\n  content: \"\\f4af\"; }\n\n.ion-ios-square:before {\n  content: \"\\f21a\"; }\n\n.ion-ios-square-outline:before {\n  content: \"\\f219\"; }\n\n.ion-ios-star:before {\n  content: \"\\f4b3\"; }\n\n.ion-ios-star-half:before {\n  content: \"\\f4b1\"; }\n\n.ion-ios-star-outline:before {\n  content: \"\\f4b2\"; }\n\n.ion-ios-stats:before {\n  content: \"\\f21c\"; }\n\n.ion-ios-stats-outline:before {\n  content: \"\\f21b\"; }\n\n.ion-ios-stopwatch:before {\n  content: \"\\f4b5\"; }\n\n.ion-ios-stopwatch-outline:before {\n  content: \"\\f4b4\"; }\n\n.ion-ios-subway:before {\n  content: \"\\f21e\"; }\n\n.ion-ios-subway-outline:before {\n  content: \"\\f21d\"; }\n\n.ion-ios-sunny:before {\n  content: \"\\f4b7\"; }\n\n.ion-ios-sunny-outline:before {\n  content: \"\\f4b6\"; }\n\n.ion-ios-swap:before {\n  content: \"\\f21f\"; }\n\n.ion-ios-switch:before {\n  content: \"\\f221\"; }\n\n.ion-ios-switch-outline:before {\n  content: \"\\f220\"; }\n\n.ion-ios-sync:before {\n  content: \"\\f222\"; }\n\n.ion-ios-tablet-landscape:before {\n  content: \"\\f223\"; }\n\n.ion-ios-tablet-portrait:before {\n  content: \"\\f24e\"; }\n\n.ion-ios-tennisball:before {\n  content: \"\\f4bb\"; }\n\n.ion-ios-tennisball-outline:before {\n  content: \"\\f4ba\"; }\n\n.ion-ios-text:before {\n  content: \"\\f250\"; }\n\n.ion-ios-text-outline:before {\n  content: \"\\f24f\"; }\n\n.ion-ios-thermometer:before {\n  content: \"\\f252\"; }\n\n.ion-ios-thermometer-outline:before {\n  content: \"\\f251\"; }\n\n.ion-ios-thumbs-down:before {\n  content: \"\\f254\"; }\n\n.ion-ios-thumbs-down-outline:before {\n  content: \"\\f253\"; }\n\n.ion-ios-thumbs-up:before {\n  content: \"\\f256\"; }\n\n.ion-ios-thumbs-up-outline:before {\n  content: \"\\f255\"; }\n\n.ion-ios-thunderstorm:before {\n  content: \"\\f4bd\"; }\n\n.ion-ios-thunderstorm-outline:before {\n  content: \"\\f4bc\"; }\n\n.ion-ios-time:before {\n  content: \"\\f4bf\"; }\n\n.ion-ios-time-outline:before {\n  content: \"\\f4be\"; }\n\n.ion-ios-timer:before {\n  content: \"\\f4c1\"; }\n\n.ion-ios-timer-outline:before {\n  content: \"\\f4c0\"; }\n\n.ion-ios-train:before {\n  content: \"\\f258\"; }\n\n.ion-ios-train-outline:before {\n  content: \"\\f257\"; }\n\n.ion-ios-transgender:before {\n  content: \"\\f259\"; }\n\n.ion-ios-trash:before {\n  content: \"\\f4c5\"; }\n\n.ion-ios-trash-outline:before {\n  content: \"\\f4c4\"; }\n\n.ion-ios-trending-down:before {\n  content: \"\\f25a\"; }\n\n.ion-ios-trending-up:before {\n  content: \"\\f25b\"; }\n\n.ion-ios-trophy:before {\n  content: \"\\f25d\"; }\n\n.ion-ios-trophy-outline:before {\n  content: \"\\f25c\"; }\n\n.ion-ios-umbrella:before {\n  content: \"\\f25f\"; }\n\n.ion-ios-umbrella-outline:before {\n  content: \"\\f25e\"; }\n\n.ion-ios-undo:before {\n  content: \"\\f4c7\"; }\n\n.ion-ios-undo-outline:before {\n  content: \"\\f4c6\"; }\n\n.ion-ios-unlock:before {\n  content: \"\\f261\"; }\n\n.ion-ios-unlock-outline:before {\n  content: \"\\f260\"; }\n\n.ion-ios-videocam:before {\n  content: \"\\f4cd\"; }\n\n.ion-ios-videocam-outline:before {\n  content: \"\\f4cc\"; }\n\n.ion-ios-volume-down:before {\n  content: \"\\f262\"; }\n\n.ion-ios-volume-mute:before {\n  content: \"\\f263\"; }\n\n.ion-ios-volume-off:before {\n  content: \"\\f264\"; }\n\n.ion-ios-volume-up:before {\n  content: \"\\f265\"; }\n\n.ion-ios-walk:before {\n  content: \"\\f266\"; }\n\n.ion-ios-warning:before {\n  content: \"\\f268\"; }\n\n.ion-ios-warning-outline:before {\n  content: \"\\f267\"; }\n\n.ion-ios-watch:before {\n  content: \"\\f269\"; }\n\n.ion-ios-water:before {\n  content: \"\\f26b\"; }\n\n.ion-ios-water-outline:before {\n  content: \"\\f26a\"; }\n\n.ion-ios-wifi:before {\n  content: \"\\f26d\"; }\n\n.ion-ios-wifi-outline:before {\n  content: \"\\f26c\"; }\n\n.ion-ios-wine:before {\n  content: \"\\f26f\"; }\n\n.ion-ios-wine-outline:before {\n  content: \"\\f26e\"; }\n\n.ion-ios-woman:before {\n  content: \"\\f271\"; }\n\n.ion-ios-woman-outline:before {\n  content: \"\\f270\"; }\n\n.ion-md-add:before {\n  content: \"\\f273\"; }\n\n.ion-md-add-circle:before {\n  content: \"\\f272\"; }\n\n.ion-md-alarm:before {\n  content: \"\\f274\"; }\n\n.ion-md-albums:before {\n  content: \"\\f275\"; }\n\n.ion-md-alert:before {\n  content: \"\\f276\"; }\n\n.ion-md-american-football:before {\n  content: \"\\f277\"; }\n\n.ion-md-analytics:before {\n  content: \"\\f278\"; }\n\n.ion-md-aperture:before {\n  content: \"\\f279\"; }\n\n.ion-md-apps:before {\n  content: \"\\f27a\"; }\n\n.ion-md-appstore:before {\n  content: \"\\f27b\"; }\n\n.ion-md-archive:before {\n  content: \"\\f27c\"; }\n\n.ion-md-arrow-back:before {\n  content: \"\\f27d\"; }\n\n.ion-md-arrow-down:before {\n  content: \"\\f27e\"; }\n\n.ion-md-arrow-dropdown:before {\n  content: \"\\f280\"; }\n\n.ion-md-arrow-dropdown-circle:before {\n  content: \"\\f27f\"; }\n\n.ion-md-arrow-dropleft:before {\n  content: \"\\f282\"; }\n\n.ion-md-arrow-dropleft-circle:before {\n  content: \"\\f281\"; }\n\n.ion-md-arrow-dropright:before {\n  content: \"\\f284\"; }\n\n.ion-md-arrow-dropright-circle:before {\n  content: \"\\f283\"; }\n\n.ion-md-arrow-dropup:before {\n  content: \"\\f286\"; }\n\n.ion-md-arrow-dropup-circle:before {\n  content: \"\\f285\"; }\n\n.ion-md-arrow-forward:before {\n  content: \"\\f287\"; }\n\n.ion-md-arrow-round-back:before {\n  content: \"\\f288\"; }\n\n.ion-md-arrow-round-down:before {\n  content: \"\\f289\"; }\n\n.ion-md-arrow-round-forward:before {\n  content: \"\\f28a\"; }\n\n.ion-md-arrow-round-up:before {\n  content: \"\\f28b\"; }\n\n.ion-md-arrow-up:before {\n  content: \"\\f28c\"; }\n\n.ion-md-at:before {\n  content: \"\\f28d\"; }\n\n.ion-md-attach:before {\n  content: \"\\f28e\"; }\n\n.ion-md-backspace:before {\n  content: \"\\f28f\"; }\n\n.ion-md-barcode:before {\n  content: \"\\f290\"; }\n\n.ion-md-baseball:before {\n  content: \"\\f291\"; }\n\n.ion-md-basket:before {\n  content: \"\\f292\"; }\n\n.ion-md-basketball:before {\n  content: \"\\f293\"; }\n\n.ion-md-battery-charging:before {\n  content: \"\\f294\"; }\n\n.ion-md-battery-dead:before {\n  content: \"\\f295\"; }\n\n.ion-md-battery-full:before {\n  content: \"\\f296\"; }\n\n.ion-md-beaker:before {\n  content: \"\\f297\"; }\n\n.ion-md-beer:before {\n  content: \"\\f298\"; }\n\n.ion-md-bicycle:before {\n  content: \"\\f299\"; }\n\n.ion-md-bluetooth:before {\n  content: \"\\f29a\"; }\n\n.ion-md-boat:before {\n  content: \"\\f29b\"; }\n\n.ion-md-body:before {\n  content: \"\\f29c\"; }\n\n.ion-md-bonfire:before {\n  content: \"\\f29d\"; }\n\n.ion-md-book:before {\n  content: \"\\f29e\"; }\n\n.ion-md-bookmark:before {\n  content: \"\\f29f\"; }\n\n.ion-md-bookmarks:before {\n  content: \"\\f2a0\"; }\n\n.ion-md-bowtie:before {\n  content: \"\\f2a1\"; }\n\n.ion-md-briefcase:before {\n  content: \"\\f2a2\"; }\n\n.ion-md-browsers:before {\n  content: \"\\f2a3\"; }\n\n.ion-md-brush:before {\n  content: \"\\f2a4\"; }\n\n.ion-md-bug:before {\n  content: \"\\f2a5\"; }\n\n.ion-md-build:before {\n  content: \"\\f2a6\"; }\n\n.ion-md-bulb:before {\n  content: \"\\f2a7\"; }\n\n.ion-md-bus:before {\n  content: \"\\f2a8\"; }\n\n.ion-md-cafe:before {\n  content: \"\\f2a9\"; }\n\n.ion-md-calculator:before {\n  content: \"\\f2aa\"; }\n\n.ion-md-calendar:before {\n  content: \"\\f2ab\"; }\n\n.ion-md-call:before {\n  content: \"\\f2ac\"; }\n\n.ion-md-camera:before {\n  content: \"\\f2ad\"; }\n\n.ion-md-car:before {\n  content: \"\\f2b2\"; }\n\n.ion-md-card:before {\n  content: \"\\f2b3\"; }\n\n.ion-md-cart:before {\n  content: \"\\f2b4\"; }\n\n.ion-md-cash:before {\n  content: \"\\f2b5\"; }\n\n.ion-md-chatboxes:before {\n  content: \"\\f2b6\"; }\n\n.ion-md-chatbubbles:before {\n  content: \"\\f2b7\"; }\n\n.ion-md-checkbox:before {\n  content: \"\\f2b9\"; }\n\n.ion-md-checkbox-outline:before {\n  content: \"\\f2b8\"; }\n\n.ion-md-checkmark:before {\n  content: \"\\f2bc\"; }\n\n.ion-md-checkmark-circle:before {\n  content: \"\\f2bb\"; }\n\n.ion-md-checkmark-circle-outline:before {\n  content: \"\\f2ba\"; }\n\n.ion-md-clipboard:before {\n  content: \"\\f2bd\"; }\n\n.ion-md-clock:before {\n  content: \"\\f2be\"; }\n\n.ion-md-close:before {\n  content: \"\\f2c0\"; }\n\n.ion-md-close-circle:before {\n  content: \"\\f2bf\"; }\n\n.ion-md-closed-captioning:before {\n  content: \"\\f2c1\"; }\n\n.ion-md-cloud:before {\n  content: \"\\f2c9\"; }\n\n.ion-md-cloud-circle:before {\n  content: \"\\f2c2\"; }\n\n.ion-md-cloud-done:before {\n  content: \"\\f2c3\"; }\n\n.ion-md-cloud-download:before {\n  content: \"\\f2c6\"; }\n\n.ion-md-cloud-outline:before {\n  content: \"\\f2c7\"; }\n\n.ion-md-cloud-upload:before {\n  content: \"\\f2c8\"; }\n\n.ion-md-cloudy:before {\n  content: \"\\f2cb\"; }\n\n.ion-md-cloudy-night:before {\n  content: \"\\f2ca\"; }\n\n.ion-md-code:before {\n  content: \"\\f2ce\"; }\n\n.ion-md-code-download:before {\n  content: \"\\f2cc\"; }\n\n.ion-md-code-working:before {\n  content: \"\\f2cd\"; }\n\n.ion-md-cog:before {\n  content: \"\\f2cf\"; }\n\n.ion-md-color-fill:before {\n  content: \"\\f2d0\"; }\n\n.ion-md-color-filter:before {\n  content: \"\\f2d1\"; }\n\n.ion-md-color-palette:before {\n  content: \"\\f2d2\"; }\n\n.ion-md-color-wand:before {\n  content: \"\\f2d3\"; }\n\n.ion-md-compass:before {\n  content: \"\\f2d4\"; }\n\n.ion-md-construct:before {\n  content: \"\\f2d5\"; }\n\n.ion-md-contact:before {\n  content: \"\\f2d6\"; }\n\n.ion-md-contacts:before {\n  content: \"\\f2d7\"; }\n\n.ion-md-contract:before {\n  content: \"\\f2d8\"; }\n\n.ion-md-contrast:before {\n  content: \"\\f2d9\"; }\n\n.ion-md-copy:before {\n  content: \"\\f2da\"; }\n\n.ion-md-create:before {\n  content: \"\\f2db\"; }\n\n.ion-md-crop:before {\n  content: \"\\f2dc\"; }\n\n.ion-md-cube:before {\n  content: \"\\f2dd\"; }\n\n.ion-md-cut:before {\n  content: \"\\f2de\"; }\n\n.ion-md-desktop:before {\n  content: \"\\f2df\"; }\n\n.ion-md-disc:before {\n  content: \"\\f2e0\"; }\n\n.ion-md-document:before {\n  content: \"\\f2e1\"; }\n\n.ion-md-done-all:before {\n  content: \"\\f2e2\"; }\n\n.ion-md-download:before {\n  content: \"\\f2e3\"; }\n\n.ion-md-easel:before {\n  content: \"\\f2e4\"; }\n\n.ion-md-egg:before {\n  content: \"\\f2e5\"; }\n\n.ion-md-exit:before {\n  content: \"\\f2e6\"; }\n\n.ion-md-expand:before {\n  content: \"\\f2e7\"; }\n\n.ion-md-eye:before {\n  content: \"\\f2e9\"; }\n\n.ion-md-eye-off:before {\n  content: \"\\f2e8\"; }\n\n.ion-md-fastforward:before {\n  content: \"\\f2ea\"; }\n\n.ion-md-female:before {\n  content: \"\\f2eb\"; }\n\n.ion-md-filing:before {\n  content: \"\\f2ec\"; }\n\n.ion-md-film:before {\n  content: \"\\f2ed\"; }\n\n.ion-md-finger-print:before {\n  content: \"\\f2ee\"; }\n\n.ion-md-flag:before {\n  content: \"\\f2ef\"; }\n\n.ion-md-flame:before {\n  content: \"\\f2f0\"; }\n\n.ion-md-flash:before {\n  content: \"\\f2f1\"; }\n\n.ion-md-flask:before {\n  content: \"\\f2f2\"; }\n\n.ion-md-flower:before {\n  content: \"\\f2f3\"; }\n\n.ion-md-folder:before {\n  content: \"\\f2f5\"; }\n\n.ion-md-folder-open:before {\n  content: \"\\f2f4\"; }\n\n.ion-md-football:before {\n  content: \"\\f2f6\"; }\n\n.ion-md-funnel:before {\n  content: \"\\f2f7\"; }\n\n.ion-md-game-controller-a:before {\n  content: \"\\f2f8\"; }\n\n.ion-md-game-controller-b:before {\n  content: \"\\f2f9\"; }\n\n.ion-md-git-branch:before {\n  content: \"\\f2fa\"; }\n\n.ion-md-git-commit:before {\n  content: \"\\f2fb\"; }\n\n.ion-md-git-compare:before {\n  content: \"\\f2fc\"; }\n\n.ion-md-git-merge:before {\n  content: \"\\f2fd\"; }\n\n.ion-md-git-network:before {\n  content: \"\\f2fe\"; }\n\n.ion-md-git-pull-request:before {\n  content: \"\\f2ff\"; }\n\n.ion-md-glasses:before {\n  content: \"\\f300\"; }\n\n.ion-md-globe:before {\n  content: \"\\f301\"; }\n\n.ion-md-grid:before {\n  content: \"\\f302\"; }\n\n.ion-md-hammer:before {\n  content: \"\\f303\"; }\n\n.ion-md-hand:before {\n  content: \"\\f304\"; }\n\n.ion-md-happy:before {\n  content: \"\\f305\"; }\n\n.ion-md-headset:before {\n  content: \"\\f306\"; }\n\n.ion-md-heart:before {\n  content: \"\\f308\"; }\n\n.ion-md-heart-outline:before {\n  content: \"\\f307\"; }\n\n.ion-md-help:before {\n  content: \"\\f30b\"; }\n\n.ion-md-help-buoy:before {\n  content: \"\\f309\"; }\n\n.ion-md-help-circle:before {\n  content: \"\\f30a\"; }\n\n.ion-md-home:before {\n  content: \"\\f30c\"; }\n\n.ion-md-ice-cream:before {\n  content: \"\\f30d\"; }\n\n.ion-md-image:before {\n  content: \"\\f30e\"; }\n\n.ion-md-images:before {\n  content: \"\\f30f\"; }\n\n.ion-md-infinite:before {\n  content: \"\\f310\"; }\n\n.ion-md-information:before {\n  content: \"\\f312\"; }\n\n.ion-md-information-circle:before {\n  content: \"\\f311\"; }\n\n.ion-md-ionic:before {\n  content: \"\\f313\"; }\n\n.ion-md-ionitron:before {\n  content: \"\\f314\"; }\n\n.ion-md-jet:before {\n  content: \"\\f315\"; }\n\n.ion-md-key:before {\n  content: \"\\f316\"; }\n\n.ion-md-keypad:before {\n  content: \"\\f317\"; }\n\n.ion-md-laptop:before {\n  content: \"\\f318\"; }\n\n.ion-md-leaf:before {\n  content: \"\\f319\"; }\n\n.ion-md-list:before {\n  content: \"\\f31b\"; }\n\n.ion-md-list-box:before {\n  content: \"\\f31a\"; }\n\n.ion-md-locate:before {\n  content: \"\\f31c\"; }\n\n.ion-md-lock:before {\n  content: \"\\f31d\"; }\n\n.ion-md-log-in:before {\n  content: \"\\f31e\"; }\n\n.ion-md-log-out:before {\n  content: \"\\f31f\"; }\n\n.ion-md-magnet:before {\n  content: \"\\f320\"; }\n\n.ion-md-mail:before {\n  content: \"\\f322\"; }\n\n.ion-md-mail-open:before {\n  content: \"\\f321\"; }\n\n.ion-md-male:before {\n  content: \"\\f323\"; }\n\n.ion-md-man:before {\n  content: \"\\f324\"; }\n\n.ion-md-map:before {\n  content: \"\\f325\"; }\n\n.ion-md-medal:before {\n  content: \"\\f326\"; }\n\n.ion-md-medical:before {\n  content: \"\\f327\"; }\n\n.ion-md-medkit:before {\n  content: \"\\f328\"; }\n\n.ion-md-megaphone:before {\n  content: \"\\f329\"; }\n\n.ion-md-menu:before {\n  content: \"\\f32a\"; }\n\n.ion-md-mic:before {\n  content: \"\\f32c\"; }\n\n.ion-md-mic-off:before {\n  content: \"\\f32b\"; }\n\n.ion-md-microphone:before {\n  content: \"\\f32d\"; }\n\n.ion-md-moon:before {\n  content: \"\\f32e\"; }\n\n.ion-md-more:before {\n  content: \"\\f1c9\"; }\n\n.ion-md-move:before {\n  content: \"\\f331\"; }\n\n.ion-md-musical-note:before {\n  content: \"\\f332\"; }\n\n.ion-md-musical-notes:before {\n  content: \"\\f333\"; }\n\n.ion-md-navigate:before {\n  content: \"\\f334\"; }\n\n.ion-md-no-smoking:before {\n  content: \"\\f335\"; }\n\n.ion-md-notifications:before {\n  content: \"\\f338\"; }\n\n.ion-md-notifications-off:before {\n  content: \"\\f336\"; }\n\n.ion-md-notifications-outline:before {\n  content: \"\\f337\"; }\n\n.ion-md-nuclear:before {\n  content: \"\\f339\"; }\n\n.ion-md-nutrition:before {\n  content: \"\\f33a\"; }\n\n.ion-md-open:before {\n  content: \"\\f33b\"; }\n\n.ion-md-options:before {\n  content: \"\\f33c\"; }\n\n.ion-md-outlet:before {\n  content: \"\\f33d\"; }\n\n.ion-md-paper:before {\n  content: \"\\f33f\"; }\n\n.ion-md-paper-plane:before {\n  content: \"\\f33e\"; }\n\n.ion-md-partly-sunny:before {\n  content: \"\\f340\"; }\n\n.ion-md-pause:before {\n  content: \"\\f341\"; }\n\n.ion-md-paw:before {\n  content: \"\\f342\"; }\n\n.ion-md-people:before {\n  content: \"\\f343\"; }\n\n.ion-md-person:before {\n  content: \"\\f345\"; }\n\n.ion-md-person-add:before {\n  content: \"\\f344\"; }\n\n.ion-md-phone-landscape:before {\n  content: \"\\f346\"; }\n\n.ion-md-phone-portrait:before {\n  content: \"\\f347\"; }\n\n.ion-md-photos:before {\n  content: \"\\f348\"; }\n\n.ion-md-pie:before {\n  content: \"\\f349\"; }\n\n.ion-md-pin:before {\n  content: \"\\f34a\"; }\n\n.ion-md-pint:before {\n  content: \"\\f34b\"; }\n\n.ion-md-pizza:before {\n  content: \"\\f354\"; }\n\n.ion-md-plane:before {\n  content: \"\\f355\"; }\n\n.ion-md-planet:before {\n  content: \"\\f356\"; }\n\n.ion-md-play:before {\n  content: \"\\f357\"; }\n\n.ion-md-podium:before {\n  content: \"\\f358\"; }\n\n.ion-md-power:before {\n  content: \"\\f359\"; }\n\n.ion-md-pricetag:before {\n  content: \"\\f35a\"; }\n\n.ion-md-pricetags:before {\n  content: \"\\f35b\"; }\n\n.ion-md-print:before {\n  content: \"\\f35c\"; }\n\n.ion-md-pulse:before {\n  content: \"\\f35d\"; }\n\n.ion-md-qr-scanner:before {\n  content: \"\\f35e\"; }\n\n.ion-md-quote:before {\n  content: \"\\f35f\"; }\n\n.ion-md-radio:before {\n  content: \"\\f362\"; }\n\n.ion-md-radio-button-off:before {\n  content: \"\\f360\"; }\n\n.ion-md-radio-button-on:before {\n  content: \"\\f361\"; }\n\n.ion-md-rainy:before {\n  content: \"\\f363\"; }\n\n.ion-md-recording:before {\n  content: \"\\f364\"; }\n\n.ion-md-redo:before {\n  content: \"\\f365\"; }\n\n.ion-md-refresh:before {\n  content: \"\\f366\"; }\n\n.ion-md-refresh-circle:before {\n  content: \"\\f228\"; }\n\n.ion-md-remove:before {\n  content: \"\\f368\"; }\n\n.ion-md-remove-circle:before {\n  content: \"\\f367\"; }\n\n.ion-md-reorder:before {\n  content: \"\\f369\"; }\n\n.ion-md-repeat:before {\n  content: \"\\f36a\"; }\n\n.ion-md-resize:before {\n  content: \"\\f36b\"; }\n\n.ion-md-restaurant:before {\n  content: \"\\f36c\"; }\n\n.ion-md-return-left:before {\n  content: \"\\f36d\"; }\n\n.ion-md-return-right:before {\n  content: \"\\f36e\"; }\n\n.ion-md-reverse-camera:before {\n  content: \"\\f36f\"; }\n\n.ion-md-rewind:before {\n  content: \"\\f370\"; }\n\n.ion-md-ribbon:before {\n  content: \"\\f371\"; }\n\n.ion-md-rose:before {\n  content: \"\\f372\"; }\n\n.ion-md-sad:before {\n  content: \"\\f373\"; }\n\n.ion-md-school:before {\n  content: \"\\f374\"; }\n\n.ion-md-search:before {\n  content: \"\\f375\"; }\n\n.ion-md-send:before {\n  content: \"\\f376\"; }\n\n.ion-md-settings:before {\n  content: \"\\f377\"; }\n\n.ion-md-share:before {\n  content: \"\\f379\"; }\n\n.ion-md-share-alt:before {\n  content: \"\\f378\"; }\n\n.ion-md-shirt:before {\n  content: \"\\f37a\"; }\n\n.ion-md-shuffle:before {\n  content: \"\\f37b\"; }\n\n.ion-md-skip-backward:before {\n  content: \"\\f37c\"; }\n\n.ion-md-skip-forward:before {\n  content: \"\\f37d\"; }\n\n.ion-md-snow:before {\n  content: \"\\f37e\"; }\n\n.ion-md-speedometer:before {\n  content: \"\\f37f\"; }\n\n.ion-md-square:before {\n  content: \"\\f381\"; }\n\n.ion-md-square-outline:before {\n  content: \"\\f380\"; }\n\n.ion-md-star:before {\n  content: \"\\f384\"; }\n\n.ion-md-star-half:before {\n  content: \"\\f382\"; }\n\n.ion-md-star-outline:before {\n  content: \"\\f383\"; }\n\n.ion-md-stats:before {\n  content: \"\\f385\"; }\n\n.ion-md-stopwatch:before {\n  content: \"\\f386\"; }\n\n.ion-md-subway:before {\n  content: \"\\f387\"; }\n\n.ion-md-sunny:before {\n  content: \"\\f388\"; }\n\n.ion-md-swap:before {\n  content: \"\\f389\"; }\n\n.ion-md-switch:before {\n  content: \"\\f38a\"; }\n\n.ion-md-sync:before {\n  content: \"\\f38b\"; }\n\n.ion-md-tablet-landscape:before {\n  content: \"\\f38c\"; }\n\n.ion-md-tablet-portrait:before {\n  content: \"\\f38d\"; }\n\n.ion-md-tennisball:before {\n  content: \"\\f38e\"; }\n\n.ion-md-text:before {\n  content: \"\\f38f\"; }\n\n.ion-md-thermometer:before {\n  content: \"\\f390\"; }\n\n.ion-md-thumbs-down:before {\n  content: \"\\f391\"; }\n\n.ion-md-thumbs-up:before {\n  content: \"\\f392\"; }\n\n.ion-md-thunderstorm:before {\n  content: \"\\f393\"; }\n\n.ion-md-time:before {\n  content: \"\\f394\"; }\n\n.ion-md-timer:before {\n  content: \"\\f395\"; }\n\n.ion-md-train:before {\n  content: \"\\f396\"; }\n\n.ion-md-transgender:before {\n  content: \"\\f397\"; }\n\n.ion-md-trash:before {\n  content: \"\\f398\"; }\n\n.ion-md-trending-down:before {\n  content: \"\\f399\"; }\n\n.ion-md-trending-up:before {\n  content: \"\\f39a\"; }\n\n.ion-md-trophy:before {\n  content: \"\\f39b\"; }\n\n.ion-md-umbrella:before {\n  content: \"\\f39c\"; }\n\n.ion-md-undo:before {\n  content: \"\\f39d\"; }\n\n.ion-md-unlock:before {\n  content: \"\\f39e\"; }\n\n.ion-md-videocam:before {\n  content: \"\\f39f\"; }\n\n.ion-md-volume-down:before {\n  content: \"\\f3a0\"; }\n\n.ion-md-volume-mute:before {\n  content: \"\\f3a1\"; }\n\n.ion-md-volume-off:before {\n  content: \"\\f3a2\"; }\n\n.ion-md-volume-up:before {\n  content: \"\\f3a3\"; }\n\n.ion-md-walk:before {\n  content: \"\\f3a4\"; }\n\n.ion-md-warning:before {\n  content: \"\\f3a5\"; }\n\n.ion-md-watch:before {\n  content: \"\\f3a6\"; }\n\n.ion-md-water:before {\n  content: \"\\f3a7\"; }\n\n.ion-md-wifi:before {\n  content: \"\\f3a8\"; }\n\n.ion-md-wine:before {\n  content: \"\\f3a9\"; }\n\n.ion-md-woman:before {\n  content: \"\\f3aa\"; }\n\n.ion-social-android:before {\n  content: \"\\f225\"; }\n\n.ion-social-angular:before {\n  content: \"\\f4d9\"; }\n\n.ion-social-apple:before {\n  content: \"\\f227\"; }\n\n.ion-social-bitcoin:before {\n  content: \"\\f2af\"; }\n\n.ion-social-buffer:before {\n  content: \"\\f229\"; }\n\n.ion-social-chrome:before {\n  content: \"\\f4db\"; }\n\n.ion-social-codepen:before {\n  content: \"\\f4dd\"; }\n\n.ion-social-css3:before {\n  content: \"\\f4df\"; }\n\n.ion-social-designernews:before {\n  content: \"\\f22b\"; }\n\n.ion-social-dribbble:before {\n  content: \"\\f22d\"; }\n\n.ion-social-dropbox:before {\n  content: \"\\f22f\"; }\n\n.ion-social-euro:before {\n  content: \"\\f4e1\"; }\n\n.ion-social-facebook:before {\n  content: \"\\f231\"; }\n\n.ion-social-foursquare:before {\n  content: \"\\f34d\"; }\n\n.ion-social-freebsd-devil:before {\n  content: \"\\f2c4\"; }\n\n.ion-social-github:before {\n  content: \"\\f233\"; }\n\n.ion-social-google:before {\n  content: \"\\f34f\"; }\n\n.ion-social-googleplus:before {\n  content: \"\\f235\"; }\n\n.ion-social-hackernews:before {\n  content: \"\\f237\"; }\n\n.ion-social-html5:before {\n  content: \"\\f4e3\"; }\n\n.ion-social-instagram:before {\n  content: \"\\f351\"; }\n\n.ion-social-javascript:before {\n  content: \"\\f4e5\"; }\n\n.ion-social-linkedin:before {\n  content: \"\\f239\"; }\n\n.ion-social-markdown:before {\n  content: \"\\f4e6\"; }\n\n.ion-social-nodejs:before {\n  content: \"\\f4e7\"; }\n\n.ion-social-octocat:before {\n  content: \"\\f4e8\"; }\n\n.ion-social-pinterest:before {\n  content: \"\\f2b1\"; }\n\n.ion-social-playstation:before {\n  content: \"\\f3ab\"; }\n\n.ion-social-python:before {\n  content: \"\\f4e9\"; }\n\n.ion-social-reddit:before {\n  content: \"\\f23b\"; }\n\n.ion-social-rss:before {\n  content: \"\\f23d\"; }\n\n.ion-social-sass:before {\n  content: \"\\f4ea\"; }\n\n.ion-social-skype:before {\n  content: \"\\f23f\"; }\n\n.ion-social-snapchat:before {\n  content: \"\\f4ec\"; }\n\n.ion-social-steam:before {\n  content: \"\\f3ac\"; }\n\n.ion-social-tumblr:before {\n  content: \"\\f241\"; }\n\n.ion-social-tux:before {\n  content: \"\\f2c5\"; }\n\n.ion-social-twitch:before {\n  content: \"\\f4ee\"; }\n\n.ion-social-twitter:before {\n  content: \"\\f243\"; }\n\n.ion-social-usd:before {\n  content: \"\\f353\"; }\n\n.ion-social-vimeo:before {\n  content: \"\\f245\"; }\n\n.ion-social-whatsapp:before {\n  content: \"\\f4f0\"; }\n\n.ion-social-windows:before {\n  content: \"\\f247\"; }\n\n.ion-social-wordpress:before {\n  content: \"\\f249\"; }\n\n.ion-social-xbox:before {\n  content: \"\\f3ad\"; }\n\n.ion-social-yahoo:before {\n  content: \"\\f24b\"; }\n\n.ion-social-yen:before {\n  content: \"\\f4f2\"; }\n\n.ion-social-youtube:before {\n  content: \"\\f24d\"; }\n\n.ios {\n  /*! Ionic: iOS */\n  /****************/\n  /* DEFAULT LIST */\n  /****************/\n  /**************/\n  /* INSET LIST */\n  /**************/\n  /*****************/\n  /* NO LINES LIST */\n  /*****************/ }\n  .ios hr {\n    border-width: 0;\n    height: 1px;\n    background-color: rgba(0, 0, 0, 0.12); }\n  .ios.hairlines hr {\n    height: 0.55px; }\n  .ios button[block] {\n    display: block; }\n  .ios ion-item-group .item:first-child .item-inner {\n    border-top-width: 0; }\n  .ios ion-item-group .item:last-child .item-inner,\n  .ios ion-item-group ion-item-sliding:last-child .item .item-inner {\n    border: none; }\n  .ios ion-item-divider {\n    padding: 12px 16px 13px 16px;\n    background-color: #f7f7f7;\n    color: #222; }\n  .ios ion-note {\n    color: #aeacb4; }\n  .ios .item {\n    border-radius: 0;\n    padding-left: 16px;\n    font-size: 1.6rem; }\n  .ios .item.activated,\n  .ios a.item.activated,\n  .ios button.item.activated {\n    background-color: #d9d9d9;\n    -webkit-transition-duration: 0ms;\n    transition-duration: 0ms; }\n  .ios .item,\n  .ios a.item,\n  .ios button.item {\n    -webkit-transition-duration: 200ms;\n    transition-duration: 200ms; }\n  .ios .item-inner {\n    padding-right: 8px;\n    border-bottom: 1px solid #c8c7cc; }\n  .ios ion-item-content {\n    margin: 12px 8px 13px 0; }\n  .ios [item-left] {\n    margin: 6px 16px 6.5px 0; }\n  .ios [item-right] {\n    margin: 6px 8px 6.5px 8px; }\n  .ios icon[item-left],\n  .ios icon[item-right] {\n    margin-top: 10px;\n    margin-bottom: 9px; }\n  .ios ion-avatar[item-left],\n  .ios ion-thumbnail[item-left] {\n    margin: 8px 16px 8px 0; }\n  .ios ion-avatar[item-right],\n  .ios ion-thumbnail[item-right] {\n    margin: 8px; }\n  .ios button[item-left],\n  .ios button[item-right],\n  .ios [button][item-left],\n  .ios [button][item-right] {\n    padding: 0 0.5em;\n    font-size: 1.3rem;\n    min-height: 25px;\n    margin-top: 9px; }\n  .ios [item-left].icon-only,\n  .ios [item-right].icon-only,\n  .ios [item-left].icon-only icon,\n  .ios [item-right].icon-only icon,\n  .ios [item-left][clear],\n  .ios [item-right][clear] {\n    padding: 0 1px; }\n  .ios [item-left].icon-left icon,\n  .ios [item-right].icon-left icon {\n    margin-left: 0;\n    margin-bottom: 1px;\n    padding-right: 0.3em; }\n  .ios [item-left].icon-right icon,\n  .ios [item-right].icon-right icon {\n    margin-right: 0;\n    margin-bottom: 1px; }\n  .ios ion-avatar {\n    min-width: 3.6rem;\n    min-height: 3.6rem; }\n    .ios ion-avatar img {\n      max-width: 3.6rem;\n      max-height: 3.6rem;\n      border-radius: 1.8rem; }\n  .ios ion-thumbnail {\n    min-width: 5.6rem;\n    min-height: 5.6rem; }\n    .ios ion-thumbnail img {\n      max-width: 5.6rem;\n      max-height: 5.6rem; }\n  .ios button.item:not([detail-none]) .item-inner,\n  .ios a.item:not([detail-none]) .item-inner,\n  .ios .item[detail-push] .item-inner {\n    background-image: url(\"data:image/svg+xml;charset=utf-8,<svg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%2012%2020'><path%20d='M2,20l-2-2l8-8L0,2l2-2l10,10L2,20z'%20fill='#c8c7cc'/></svg>\");\n    background-repeat: no-repeat;\n    background-position: right 14px center;\n    background-size: 14px 14px;\n    padding-right: 32px; }\n  .ios.hairlines .item-inner {\n    border-bottom-width: 0.55px; }\n  .ios .toolbar {\n    min-height: 4.4rem; }\n    .ios .toolbar [menu-toggle] {\n      -webkit-box-ordinal-group: 21;\n      -webkit-order: 20;\n      -ms-flex-order: 20;\n      order: 20;\n      cursor: pointer; }\n    .ios .toolbar [menu-toggle][secondary] {\n      -webkit-box-ordinal-group: 61;\n      -webkit-order: 60;\n      -ms-flex-order: 60;\n      order: 60; }\n    .ios .toolbar ion-segment-button[button] {\n      line-height: 2.4rem;\n      min-height: 2.4rem;\n      font-size: 1.2rem; }\n    .ios .toolbar button,\n    .ios .toolbar [button] {\n      margin-top: 0;\n      margin-bottom: 0;\n      padding: 0 5px;\n      min-height: 32px; }\n    .ios .toolbar button.icon-only,\n    .ios .toolbar [button].icon-only {\n      padding-right: 0;\n      padding-left: 0; }\n    .ios .toolbar button icon,\n    .ios .toolbar [button] icon {\n      padding: 0;\n      min-width: 28px; }\n    .ios .toolbar .back-button {\n      margin: 0;\n      min-height: 3.2rem;\n      line-height: 1;\n      -webkit-box-ordinal-group: 11;\n      -webkit-order: 10;\n      -ms-flex-order: 10;\n      order: 10;\n      overflow: visible; }\n    .ios .toolbar .back-button-icon {\n      display: inherit;\n      margin: 0;\n      min-width: 18px;\n      font-size: 3.2rem; }\n  .ios .toolbar toolbar-background {\n    border-bottom-width: 1px;\n    border-bottom-style: solid; }\n  .ios ion-title {\n    position: absolute;\n    top: 0;\n    left: 0;\n    width: 100%;\n    height: 100%;\n    padding: 0px 90px 1px 90px;\n    pointer-events: none;\n    -webkit-transform: translateZ(0px);\n    transform: translateZ(0px); }\n  .ios .toolbar-title {\n    font-size: 1.7rem;\n    font-weight: 500;\n    text-align: center;\n    pointer-events: auto; }\n  .ios ion-nav-items {\n    -webkit-box-flex: 1;\n    -webkit-flex: 1;\n    -ms-flex: 1;\n    flex: 1;\n    -webkit-box-ordinal-group: 31;\n    -webkit-order: 30;\n    -ms-flex-order: 30;\n    order: 30;\n    -webkit-transform: translateZ(0px);\n    transform: translateZ(0px); }\n  .ios ion-nav-items[secondary] {\n    text-align: right;\n    -webkit-box-ordinal-group: 51;\n    -webkit-order: 50;\n    -ms-flex-order: 50;\n    order: 50; }\n  .ios.hairlines .toolbar toolbar-background {\n    border-bottom-width: 0.55px; }\n  .ios ion-action-sheet {\n    text-align: center; }\n  .ios .action-sheet-container {\n    padding: 0 10px; }\n    .ios .action-sheet-container button.activated {\n      box-shadow: none;\n      border-color: #d1d3d6;\n      color: #007aff;\n      background: #e4e5e7; }\n  .ios ion-action-sheet button {\n    min-height: 5.6rem;\n    padding: 1.8rem;\n    margin: 0;\n    border: 0;\n    background: transparent; }\n    .ios ion-action-sheet button.activated {\n      background: #e9e9e9; }\n  .ios .action-sheet-group {\n    margin-bottom: 8px;\n    border-radius: 1.3rem; }\n  .ios .action-sheet-group:last-child {\n    margin-bottom: 10px; }\n  .ios .action-sheet-title,\n  .ios .action-sheet-option {\n    min-height: 5.6rem;\n    background: rgba(243, 243, 243, 0.95);\n    font-weight: 400;\n    border-bottom: 1px solid #d6d6da; }\n  .ios .action-sheet-cancel button {\n    font-weight: bold; }\n  .ios .action-sheet-title {\n    padding: 2rem;\n    font-size: 1.2rem;\n    font-weight: 500;\n    color: #5f5f5f;\n    border-radius: 0; }\n  .ios .action-sheet-option {\n    font-size: 2rem;\n    color: #007aff;\n    border-radius: 0; }\n  .ios .action-sheet-title:first-child,\n  .ios .action-sheet-button:first-child,\n  .ios .action-sheet-group button:first-child {\n    border-top-left-radius: 1.3rem;\n    border-top-right-radius: 1.3rem; }\n  .ios .action-sheet-title:last-child,\n  .ios .action-sheet-button:last-child,\n  .ios .action-sheet-group button:last-child {\n    border-bottom-left-radius: 1.3rem;\n    border-bottom-right-radius: 1.3rem; }\n  .ios.hairlines .action-sheet .action-sheet-title,\n  .ios.hairlines .action-sheet .action-sheet-option {\n    border-bottom-width: 0.55px; }\n  .ios .action-sheet-destructive {\n    color: #f53d3d; }\n  .ios ion-card {\n    margin: 12px 12px 12px 12px;\n    font-size: 1.4rem;\n    background: #fff;\n    box-shadow: 0 1px 2px rgba(0, 0, 0, 0.3);\n    border-radius: 2px; }\n    .ios ion-card ion-list {\n      margin-bottom: 0; }\n      .ios ion-card ion-list .item {\n        padding-right: 0; }\n      .ios ion-card ion-list ion-item-content {\n        padding: 0; }\n      .ios ion-card ion-list > .item:last-child,\n      .ios ion-card ion-list > ion-item-sliding:last-child .item {\n        border-bottom: none; }\n    .ios ion-card .item-inner {\n      border: none; }\n    .ios ion-card ion-card-content {\n      padding: 13px 16px 14px 16px;\n      font-size: 1.4rem;\n      line-height: 1.4; }\n    .ios ion-card ion-card-header {\n      padding: 16px;\n      font-size: 1.6rem;\n      font-weight: 500;\n      color: #333; }\n    .ios ion-card ion-card-header + ion-card-content,\n    .ios ion-card .item + ion-card-content {\n      padding-top: 0; }\n    .ios ion-card ion-note[item-left],\n    .ios ion-card ion-note[item-right] {\n      font-size: 1.3rem; }\n    .ios ion-card .card-title {\n      padding: 8px 0 8px 0;\n      font-size: 1.8rem;\n      color: #222; }\n    .ios ion-card h1 {\n      margin: 0 0 2px;\n      font-size: 2.4rem;\n      font-weight: normal; }\n    .ios ion-card h2 {\n      margin: 2px 0 2px;\n      font-size: 1.6rem;\n      font-weight: normal; }\n    .ios ion-card h3,\n    .ios ion-card h4,\n    .ios ion-card h5,\n    .ios ion-card h6 {\n      margin: 2px 0 2px;\n      font-size: 1.4rem;\n      font-weight: normal; }\n    .ios ion-card p {\n      font-size: 1.4rem;\n      margin: 0 0 2px;\n      color: #666; }\n  .ios ion-card + ion-card {\n    margin-top: 0; }\n  .ios .outer-content {\n    background: #efeff4; }\n  .ios ion-nav.has-views,\n  .ios ion-tab.has-views {\n    background: #000; }\n  .ios ion-list-header {\n    position: relative;\n    padding: 10px 16px 10px 16px;\n    font-size: 1.2rem;\n    font-weight: 500;\n    letter-spacing: 0.1rem;\n    text-transform: uppercase;\n    color: #333;\n    border-bottom: 1px solid #c8c7cc; }\n  .ios ion-list {\n    margin: -1px 0 32px 0; }\n    .ios ion-list > .item:first-child {\n      border-top: 1px solid #c8c7cc; }\n    .ios ion-list > .item:last-child,\n    .ios ion-list > ion-item-sliding:last-child .item {\n      border-bottom: 1px solid #c8c7cc; }\n      .ios ion-list > .item:last-child .item-inner,\n      .ios ion-list > ion-item-sliding:last-child .item .item-inner {\n        border-bottom: none; }\n    .ios ion-list .item-inner {\n      border-bottom: 1px solid #c8c7cc; }\n    .ios ion-list .item[no-lines],\n    .ios ion-list .item[no-lines] .item-inner {\n      border-width: 0; }\n    .ios ion-list ion-item-options {\n      border-bottom: 1px solid #c8c7cc; }\n      .ios ion-list ion-item-options button, .ios ion-list ion-item-options [button] {\n        min-height: 100%;\n        height: 100%;\n        margin: 0;\n        border: none;\n        border-radius: 0;\n        display: -webkit-inline-box;\n        display: -webkit-inline-flex;\n        display: -ms-inline-flexbox;\n        display: inline-flex;\n        -webkit-box-align: center;\n        -webkit-align-items: center;\n        -ms-flex-align: center;\n        align-items: center;\n        box-sizing: border-box; }\n        .ios ion-list ion-item-options button:before, .ios ion-list ion-item-options [button]:before {\n          margin: 0 auto; }\n  .ios ion-list + ion-list {\n    margin-top: 42px; }\n    .ios ion-list + ion-list ion-list-header {\n      margin-top: -10px;\n      padding-top: 0; }\n  .ios.hairlines ion-list-header {\n    border-bottom-width: 0.55px; }\n  .ios.hairlines ion-list ion-item-options {\n    border-width: 0.55px; }\n  .ios.hairlines ion-list .item .item-inner {\n    border-width: 0.55px; }\n  .ios.hairlines ion-list > .item:first-child {\n    border-top-width: 0.55px; }\n  .ios.hairlines ion-list > .item:last-child,\n  .ios.hairlines ion-list > ion-item-sliding:last-child .item {\n    border-bottom-width: 0.55px; }\n  .ios ion-list[inset] {\n    margin: 16px 16px 16px 16px;\n    border-radius: 4px; }\n    .ios ion-list[inset] .item {\n      border-bottom: 1px solid #c8c7cc; }\n      .ios ion-list[inset] .item .item-inner {\n        border-bottom: none; }\n    .ios ion-list[inset] > .item:first-child,\n    .ios ion-list[inset] > ion-item-sliding:first-child .item {\n      border-top: none; }\n    .ios ion-list[inset] > .item:last-child,\n    .ios ion-list[inset] > ion-item-sliding:last-child .item {\n      border-bottom: none; }\n  .ios ion-list[inset] + ion-list[inset] {\n    margin-top: 0; }\n  .ios.hairlines ion-list[inset] .item {\n    border-width: 0.55px; }\n  .ios ion-list[no-lines] ion-list-header,\n  .ios ion-list[no-lines] .item,\n  .ios ion-list[no-lines] .item .item-inner,\n  .ios.hairlines ion-list[no-lines] ion-list-header,\n  .ios.hairlines ion-list[no-lines] .item,\n  .ios.hairlines ion-list[no-lines] .item .item-inner {\n    border-width: 0; }\n  .ios [text-input] {\n    margin: 12px 8px 13px 0;\n    padding: 0; }\n  .ios ion-input[inset] [text-input] {\n    margin: 6px 16px 6.5px 16px;\n    padding: 6px 8px 6.5px 8px; }\n  .ios ion-label {\n    margin: 12px 8px 13px 0;\n    color: #7f7f7f; }\n  .ios ion-label + [text-input] {\n    margin-left: 16px; }\n  .ios [stacked-label] ion-label {\n    font-size: 1.2rem;\n    margin-bottom: 4px; }\n  .ios [stacked-label] [text-input],\n  .ios [floating-label] [text-input] {\n    margin-left: 0;\n    margin-top: 8px;\n    margin-bottom: 8px; }\n  .ios [floating-label] ion-label {\n    margin-bottom: 0;\n    -webkit-transform-origin: left top;\n    transform-origin: left top;\n    -webkit-transform: translate3d(0, 27px, 0);\n    transform: translate3d(0, 27px, 0);\n    -webkit-transition: -webkit-transform 150ms ease-in-out;\n    transition: transform 150ms ease-in-out; }\n  .ios [floating-label].has-focus ion-label,\n  .ios [floating-label].has-value ion-label {\n    -webkit-transform: translate3d(0, 0, 0) scale(0.8);\n    transform: translate3d(0, 0, 0) scale(0.8); }\n  .ios ion-navbar-section {\n    min-height: 4.4rem; }\n  .ios .back-button {\n    -webkit-transform: translateZ(0px);\n    transform: translateZ(0px); }\n  .ios ion-popup {\n    background: transparent; }\n    .ios ion-popup popup-wrapper {\n      border-radius: 13px;\n      background-color: #f8f8f8;\n      max-width: 270px;\n      overflow: hidden; }\n  .ios .popup-head {\n    padding: 12px 16px 20px;\n    text-align: center; }\n  .ios .popup-title {\n    margin-top: 12px;\n    font-weight: bold;\n    font-size: 17px; }\n  .ios .popup-sub-title {\n    font-size: 14px;\n    color: #666; }\n  .ios .popup-body {\n    padding: 0px 16px 24px;\n    color: inherit;\n    text-align: center;\n    font-size: 13px; }\n  .ios .prompt-input {\n    padding: 6px;\n    margin-top: 24px;\n    background-color: #fff;\n    border: 1px solid #ccc;\n    border-radius: 4px;\n    -webkit-appearance: none; }\n  .ios .popup-buttons button {\n    margin: 0;\n    -webkit-box-flex: 1;\n    -webkit-flex: 1;\n    -ms-flex: 1;\n    flex: 1;\n    border-radius: 0;\n    font-size: 17px;\n    min-height: 44px;\n    border-right: 1px solid #c8c7cc; }\n    .ios .popup-buttons button.activated {\n      opacity: 1;\n      background-color: #e9e9e9; }\n    .ios .popup-buttons button:hover:not(.disable-hover) {\n      opacity: 1; }\n    .ios .popup-buttons button:before {\n      position: absolute;\n      top: 0;\n      right: 0;\n      left: 0;\n      border-top: 1px solid #c8c7cc;\n      content: '';\n      pointer-events: none; }\n    .ios .popup-buttons button:last-child {\n      font-weight: bold;\n      border-right: 0; }\n  .ios.hairlines .prompt-input {\n    border-width: 0.55px; }\n  .ios.hairlines .popup-buttons button {\n    border-right-width: 0.55px; }\n    .ios.hairlines .popup-buttons button:before {\n      border-top-width: 0.55px; }\n  .ios ion-checkbox[aria-checked=true] checkbox-icon {\n    background-color: #387ef5;\n    border-color: #387ef5; }\n  .ios ion-checkbox[aria-checked=true] checkbox-icon:after {\n    position: absolute;\n    border: 1px solid #fff;\n    top: 3px;\n    left: 7px;\n    width: 4px;\n    height: 9px;\n    border-left: none;\n    border-top: none;\n    content: '';\n    -webkit-transform: rotate(45deg);\n    transform: rotate(45deg); }\n  .ios ion-checkbox.item.activated {\n    background-color: #fff; }\n  .ios media-checkbox {\n    display: block;\n    margin: 10px 16px 10px 2px; }\n  .ios checkbox-icon {\n    position: relative;\n    display: block;\n    width: 21px;\n    height: 21px;\n    border-radius: 50%;\n    border: 1px solid #c8c7cc;\n    background-color: #fff; }\n  .ios ion-checkbox[secondary][aria-checked=true] checkbox-icon {\n    background-color: #32db64;\n    border-color: #32db64; }\n  .ios ion-checkbox[danger][aria-checked=true] checkbox-icon {\n    background-color: #f53d3d;\n    border-color: #f53d3d; }\n  .ios ion-checkbox[light][aria-checked=true] checkbox-icon {\n    background-color: #f4f4f4;\n    border-color: #f4f4f4; }\n  .ios ion-checkbox[dark][aria-checked=true] checkbox-icon {\n    background-color: #222;\n    border-color: #222; }\n  .ios ion-radio[aria-checked=true] radio-icon:after {\n    position: absolute;\n    border: 2px solid #387ef5;\n    top: 3px;\n    left: 7px;\n    width: 4px;\n    height: 10px;\n    border-left: none;\n    border-top: none;\n    content: '';\n    -webkit-transform: rotate(45deg);\n    transform: rotate(45deg); }\n  .ios ion-radio[aria-checked=true] {\n    color: #387ef5; }\n  .ios ion-radio.item.activated {\n    background-color: #fff; }\n  .ios media-radio {\n    display: block;\n    margin: 10px 8px 10px 8px; }\n  .ios radio-icon {\n    position: relative;\n    display: block;\n    width: 16px;\n    height: 21px; }\n  .ios ion-radio[secondary][aria-checked=true] radio-icon:after {\n    border-color: #32db64; }\n  .ios ion-radio[secondary][aria-checked=true] {\n    color: #32db64; }\n  .ios ion-radio[danger][aria-checked=true] radio-icon:after {\n    border-color: #f53d3d; }\n  .ios ion-radio[danger][aria-checked=true] {\n    color: #f53d3d; }\n  .ios ion-radio[light][aria-checked=true] radio-icon:after {\n    border-color: #f4f4f4; }\n  .ios ion-radio[light][aria-checked=true] {\n    color: #f4f4f4; }\n  .ios ion-radio[dark][aria-checked=true] radio-icon:after {\n    border-color: #222; }\n  .ios ion-radio[dark][aria-checked=true] {\n    color: #222; }\n  .ios ion-searchbar {\n    padding: 0 8px;\n    background: rgba(0, 0, 0, 0.2);\n    border-bottom: 1px solid rgba(0, 0, 0, 0.05);\n    min-height: 44px; }\n  .ios .searchbar-search-icon {\n    width: 14px;\n    height: 14px;\n    background-image: url(\"data:image/svg+xml;charset=utf-8,<svg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%2013%2013'><path%20fill='rgba(0,%200,%200,%200.5)'%20d='M5,1c2.2,0,4,1.8,4,4S7.2,9,5,9S1,7.2,1,5S2.8,1,5,1%20M5,0C2.2,0,0,2.2,0,5s2.2,5,5,5s5-2.2,5-5S7.8,0,5,0%20L5,0z'/><line%20stroke='rgba(0,%200,%200,%200.5)'%20stroke-miterlimit='10'%20x1='12.6'%20y1='12.6'%20x2='8.2'%20y2='8.2'/></svg>\");\n    background-size: 13px;\n    background-repeat: no-repeat;\n    position: absolute;\n    left: 9px;\n    top: 9px;\n    margin-left: calc(50% - 60px);\n    -webkit-transition: all 400ms cubic-bezier(0.25, 0.45, 0.05, 1);\n    transition: all 400ms cubic-bezier(0.25, 0.45, 0.05, 1); }\n  .ios .searchbar-input {\n    height: 28px;\n    padding: 0 28px;\n    font-size: 1.4rem;\n    font-weight: 400;\n    border-radius: 5px;\n    color: #000;\n    background-color: #FFFFFF;\n    background-position: 8px center;\n    padding-left: calc(50% - 28px);\n    -webkit-transition: all 400ms cubic-bezier(0.25, 0.45, 0.05, 1);\n    transition: all 400ms cubic-bezier(0.25, 0.45, 0.05, 1); }\n    .ios .searchbar-input::-moz-placeholder {\n      color: rgba(0, 0, 0, 0.5); }\n    .ios .searchbar-input:-ms-input-placeholder {\n      color: rgba(0, 0, 0, 0.5); }\n    .ios .searchbar-input::-webkit-input-placeholder {\n      color: rgba(0, 0, 0, 0.5);\n      text-indent: 0; }\n  .ios .searchbar-close-icon {\n    width: 30px;\n    height: 100%;\n    background-image: url(\"data:image/svg+xml;charset=utf-8,<svg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%20512%20512'><path%20fill='rgba(0,%200,%200,%200.5)'%20d='M403.1,108.9c-81.2-81.2-212.9-81.2-294.2,0s-81.2,212.9,0,294.2c81.2,81.2,212.9,81.2,294.2,0S484.3,190.1,403.1,108.9z%20M352,340.2L340.2,352l-84.4-84.2l-84,83.8L160,339.8l84-83.8l-84-83.8l11.8-11.8l84,83.8l84.4-84.2l11.8,11.8L267.6,256L352,340.2z'/></svg>\");\n    background-size: 18px;\n    background-repeat: no-repeat;\n    background-position: center;\n    position: absolute;\n    right: 0;\n    top: 0; }\n  .ios .searchbar-cancel {\n    -webkit-transition: all 400ms cubic-bezier(0.25, 0.45, 0.05, 1);\n    transition: all 400ms cubic-bezier(0.25, 0.45, 0.05, 1);\n    min-height: 30px;\n    margin-left: 0;\n    padding: 0;\n    visibility: hidden;\n    -webkit-transform: translateX(calc(100% + 8px));\n    transform: translateX(calc(100% + 8px));\n    -webkit-box-flex: 0;\n    -webkit-flex: 0 0 0%;\n    -ms-flex: 0 0 0%;\n    flex: 0 0 0%; }\n  .ios ion-searchbar.left-align .searchbar-search-icon {\n    margin-left: 0; }\n  .ios ion-searchbar.left-align .searchbar-input {\n    padding-left: 30px; }\n  .ios ion-searchbar.left-align .searchbar-cancel {\n    -webkit-transform: translateX(0);\n    transform: translateX(0);\n    -webkit-box-flex: 0;\n    -webkit-flex: 0 0 auto;\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    padding-left: 8px;\n    visibility: visible; }\n  .ios.hairlines ion-searchbar {\n    border-bottom-width: 0.55px; }\n  .ios .toolbar ion-searchbar {\n    background: transparent;\n    border-bottom-width: 0; }\n    .ios .toolbar ion-searchbar .searchbar-input {\n      background-color: rgba(0, 0, 0, 0.08); }\n    .ios .toolbar ion-searchbar .searchbar-cancel {\n      padding: 0; }\n  .ios .toolbar .left-align .searchbar-cancel {\n    padding-left: 8px; }\n  .ios .searchbar-cancel-icon {\n    display: none; }\n  .ios ion-searchbar[primary] .searchbar-cancel {\n    color: #387ef5; }\n  .ios ion-searchbar[secondary] .searchbar-cancel {\n    color: #32db64; }\n  .ios ion-searchbar[danger] .searchbar-cancel {\n    color: #f53d3d; }\n  .ios ion-searchbar[light] .searchbar-cancel {\n    color: #f4f4f4; }\n  .ios ion-searchbar[dark] .searchbar-cancel {\n    color: #222; }\n  .ios ion-segment button,\n  .ios ion-segment [button] {\n    border-width: 1px;\n    border-style: solid;\n    min-height: 3rem;\n    line-height: 3rem;\n    background-color: transparent;\n    color: white;\n    font-size: 1.3rem; }\n    .ios ion-segment button[outline],\n    .ios ion-segment [button][outline] {\n      border: 1px solid #387ef5;\n      background: transparent;\n      color: #387ef5; }\n      .ios ion-segment button[outline].segment-activated,\n      .ios ion-segment [button][outline].segment-activated {\n        opacity: 1;\n        color: white;\n        background-color: #387ef5;\n        -webkit-transition: 100ms all linear;\n        transition: 100ms all linear; }\n      .ios ion-segment button[outline]:hover:not(.segment-activated),\n      .ios ion-segment [button][outline]:hover:not(.segment-activated) {\n        background-color: rgba(56, 126, 245, 0.16); }\n    .ios ion-segment button:first-of-type,\n    .ios ion-segment [button]:first-of-type {\n      border-radius: 4px 0px 0px 4px;\n      margin-right: 0; }\n    .ios ion-segment button:not(:first-of-type),\n    .ios ion-segment [button]:not(:first-of-type) {\n      border-left-width: 0px; }\n    .ios ion-segment button:last-of-type,\n    .ios ion-segment [button]:last-of-type {\n      border-left-width: 0px;\n      border-radius: 0px 4px 4px 0px;\n      margin-left: 0; }\n  .ios .toolbar ion-segment {\n    position: absolute;\n    left: 0;\n    right: 0;\n    top: 0;\n    bottom: 0; }\n    .ios .toolbar ion-segment button,\n    .ios .toolbar ion-segment [button] {\n      max-width: 100px; }\n  .ios .toolbar[primary] ion-segment ion-segment-button[button] {\n    background-color: transparent; }\n    .ios .toolbar[primary] ion-segment ion-segment-button[button][outline] {\n      border-color: white;\n      background: transparent;\n      color: white; }\n      .ios .toolbar[primary] ion-segment ion-segment-button[button][outline].segment-activated {\n        opacity: 1;\n        color: #387ef5;\n        background-color: white; }\n      .ios .toolbar[primary] ion-segment ion-segment-button[button][outline]:hover:not(.segment-activated) {\n        background-color: rgba(255, 255, 255, 0.16); }\n  .ios .toolbar[primary] ion-segment[primary] ion-segment-button[button] {\n    background-color: transparent; }\n    .ios .toolbar[primary] ion-segment[primary] ion-segment-button[button][outline] {\n      border-color: #387ef5;\n      background: transparent;\n      color: #387ef5; }\n      .ios .toolbar[primary] ion-segment[primary] ion-segment-button[button][outline].segment-activated {\n        opacity: 1;\n        color: white;\n        background-color: #387ef5; }\n      .ios .toolbar[primary] ion-segment[primary] ion-segment-button[button][outline]:hover:not(.segment-activated) {\n        background-color: rgba(56, 126, 245, 0.16); }\n  .ios .toolbar[primary] ion-segment[secondary] ion-segment-button[button] {\n    background-color: transparent; }\n    .ios .toolbar[primary] ion-segment[secondary] ion-segment-button[button][outline] {\n      border-color: #32db64;\n      background: transparent;\n      color: #32db64; }\n      .ios .toolbar[primary] ion-segment[secondary] ion-segment-button[button][outline].segment-activated {\n        opacity: 1;\n        color: white;\n        background-color: #32db64; }\n      .ios .toolbar[primary] ion-segment[secondary] ion-segment-button[button][outline]:hover:not(.segment-activated) {\n        background-color: rgba(50, 219, 100, 0.16); }\n  .ios .toolbar[primary] ion-segment[danger] ion-segment-button[button] {\n    background-color: transparent; }\n    .ios .toolbar[primary] ion-segment[danger] ion-segment-button[button][outline] {\n      border-color: #f53d3d;\n      background: transparent;\n      color: #f53d3d; }\n      .ios .toolbar[primary] ion-segment[danger] ion-segment-button[button][outline].segment-activated {\n        opacity: 1;\n        color: white;\n        background-color: #f53d3d; }\n      .ios .toolbar[primary] ion-segment[danger] ion-segment-button[button][outline]:hover:not(.segment-activated) {\n        background-color: rgba(245, 61, 61, 0.16); }\n  .ios .toolbar[primary] ion-segment[light] ion-segment-button[button] {\n    background-color: transparent; }\n    .ios .toolbar[primary] ion-segment[light] ion-segment-button[button][outline] {\n      border-color: #f4f4f4;\n      background: transparent;\n      color: #f4f4f4; }\n      .ios .toolbar[primary] ion-segment[light] ion-segment-button[button][outline].segment-activated {\n        opacity: 1;\n        color: black;\n        background-color: #f4f4f4; }\n      .ios .toolbar[primary] ion-segment[light] ion-segment-button[button][outline]:hover:not(.segment-activated) {\n        background-color: rgba(244, 244, 244, 0.16); }\n  .ios .toolbar[primary] ion-segment[dark] ion-segment-button[button] {\n    background-color: transparent; }\n    .ios .toolbar[primary] ion-segment[dark] ion-segment-button[button][outline] {\n      border-color: #222;\n      background: transparent;\n      color: #222; }\n      .ios .toolbar[primary] ion-segment[dark] ion-segment-button[button][outline].segment-activated {\n        opacity: 1;\n        color: white;\n        background-color: #222; }\n      .ios .toolbar[primary] ion-segment[dark] ion-segment-button[button][outline]:hover:not(.segment-activated) {\n        background-color: rgba(34, 34, 34, 0.16); }\n  .ios ion-segment[primary] ion-segment-button[button] {\n    background-color: transparent; }\n    .ios ion-segment[primary] ion-segment-button[button][outline] {\n      border-color: #387ef5;\n      background: transparent;\n      color: #387ef5; }\n      .ios ion-segment[primary] ion-segment-button[button][outline].segment-activated {\n        opacity: 1;\n        color: white;\n        background-color: #387ef5; }\n      .ios ion-segment[primary] ion-segment-button[button][outline]:hover:not(.segment-activated) {\n        background-color: rgba(56, 126, 245, 0.16); }\n  .ios .toolbar[secondary] ion-segment ion-segment-button[button] {\n    background-color: transparent; }\n    .ios .toolbar[secondary] ion-segment ion-segment-button[button][outline] {\n      border-color: white;\n      background: transparent;\n      color: white; }\n      .ios .toolbar[secondary] ion-segment ion-segment-button[button][outline].segment-activated {\n        opacity: 1;\n        color: #32db64;\n        background-color: white; }\n      .ios .toolbar[secondary] ion-segment ion-segment-button[button][outline]:hover:not(.segment-activated) {\n        background-color: rgba(255, 255, 255, 0.16); }\n  .ios .toolbar[secondary] ion-segment[primary] ion-segment-button[button] {\n    background-color: transparent; }\n    .ios .toolbar[secondary] ion-segment[primary] ion-segment-button[button][outline] {\n      border-color: #387ef5;\n      background: transparent;\n      color: #387ef5; }\n      .ios .toolbar[secondary] ion-segment[primary] ion-segment-button[button][outline].segment-activated {\n        opacity: 1;\n        color: white;\n        background-color: #387ef5; }\n      .ios .toolbar[secondary] ion-segment[primary] ion-segment-button[button][outline]:hover:not(.segment-activated) {\n        background-color: rgba(56, 126, 245, 0.16); }\n  .ios .toolbar[secondary] ion-segment[secondary] ion-segment-button[button] {\n    background-color: transparent; }\n    .ios .toolbar[secondary] ion-segment[secondary] ion-segment-button[button][outline] {\n      border-color: #32db64;\n      background: transparent;\n      color: #32db64; }\n      .ios .toolbar[secondary] ion-segment[secondary] ion-segment-button[button][outline].segment-activated {\n        opacity: 1;\n        color: white;\n        background-color: #32db64; }\n      .ios .toolbar[secondary] ion-segment[secondary] ion-segment-button[button][outline]:hover:not(.segment-activated) {\n        background-color: rgba(50, 219, 100, 0.16); }\n  .ios .toolbar[secondary] ion-segment[danger] ion-segment-button[button] {\n    background-color: transparent; }\n    .ios .toolbar[secondary] ion-segment[danger] ion-segment-button[button][outline] {\n      border-color: #f53d3d;\n      background: transparent;\n      color: #f53d3d; }\n      .ios .toolbar[secondary] ion-segment[danger] ion-segment-button[button][outline].segment-activated {\n        opacity: 1;\n        color: white;\n        background-color: #f53d3d; }\n      .ios .toolbar[secondary] ion-segment[danger] ion-segment-button[button][outline]:hover:not(.segment-activated) {\n        background-color: rgba(245, 61, 61, 0.16); }\n  .ios .toolbar[secondary] ion-segment[light] ion-segment-button[button] {\n    background-color: transparent; }\n    .ios .toolbar[secondary] ion-segment[light] ion-segment-button[button][outline] {\n      border-color: #f4f4f4;\n      background: transparent;\n      color: #f4f4f4; }\n      .ios .toolbar[secondary] ion-segment[light] ion-segment-button[button][outline].segment-activated {\n        opacity: 1;\n        color: black;\n        background-color: #f4f4f4; }\n      .ios .toolbar[secondary] ion-segment[light] ion-segment-button[button][outline]:hover:not(.segment-activated) {\n        background-color: rgba(244, 244, 244, 0.16); }\n  .ios .toolbar[secondary] ion-segment[dark] ion-segment-button[button] {\n    background-color: transparent; }\n    .ios .toolbar[secondary] ion-segment[dark] ion-segment-button[button][outline] {\n      border-color: #222;\n      background: transparent;\n      color: #222; }\n      .ios .toolbar[secondary] ion-segment[dark] ion-segment-button[button][outline].segment-activated {\n        opacity: 1;\n        color: white;\n        background-color: #222; }\n      .ios .toolbar[secondary] ion-segment[dark] ion-segment-button[button][outline]:hover:not(.segment-activated) {\n        background-color: rgba(34, 34, 34, 0.16); }\n  .ios ion-segment[secondary] ion-segment-button[button] {\n    background-color: transparent; }\n    .ios ion-segment[secondary] ion-segment-button[button][outline] {\n      border-color: #32db64;\n      background: transparent;\n      color: #32db64; }\n      .ios ion-segment[secondary] ion-segment-button[button][outline].segment-activated {\n        opacity: 1;\n        color: white;\n        background-color: #32db64; }\n      .ios ion-segment[secondary] ion-segment-button[button][outline]:hover:not(.segment-activated) {\n        background-color: rgba(50, 219, 100, 0.16); }\n  .ios .toolbar[danger] ion-segment ion-segment-button[button] {\n    background-color: transparent; }\n    .ios .toolbar[danger] ion-segment ion-segment-button[button][outline] {\n      border-color: white;\n      background: transparent;\n      color: white; }\n      .ios .toolbar[danger] ion-segment ion-segment-button[button][outline].segment-activated {\n        opacity: 1;\n        color: #f53d3d;\n        background-color: white; }\n      .ios .toolbar[danger] ion-segment ion-segment-button[button][outline]:hover:not(.segment-activated) {\n        background-color: rgba(255, 255, 255, 0.16); }\n  .ios .toolbar[danger] ion-segment[primary] ion-segment-button[button] {\n    background-color: transparent; }\n    .ios .toolbar[danger] ion-segment[primary] ion-segment-button[button][outline] {\n      border-color: #387ef5;\n      background: transparent;\n      color: #387ef5; }\n      .ios .toolbar[danger] ion-segment[primary] ion-segment-button[button][outline].segment-activated {\n        opacity: 1;\n        color: white;\n        background-color: #387ef5; }\n      .ios .toolbar[danger] ion-segment[primary] ion-segment-button[button][outline]:hover:not(.segment-activated) {\n        background-color: rgba(56, 126, 245, 0.16); }\n  .ios .toolbar[danger] ion-segment[secondary] ion-segment-button[button] {\n    background-color: transparent; }\n    .ios .toolbar[danger] ion-segment[secondary] ion-segment-button[button][outline] {\n      border-color: #32db64;\n      background: transparent;\n      color: #32db64; }\n      .ios .toolbar[danger] ion-segment[secondary] ion-segment-button[button][outline].segment-activated {\n        opacity: 1;\n        color: white;\n        background-color: #32db64; }\n      .ios .toolbar[danger] ion-segment[secondary] ion-segment-button[button][outline]:hover:not(.segment-activated) {\n        background-color: rgba(50, 219, 100, 0.16); }\n  .ios .toolbar[danger] ion-segment[danger] ion-segment-button[button] {\n    background-color: transparent; }\n    .ios .toolbar[danger] ion-segment[danger] ion-segment-button[button][outline] {\n      border-color: #f53d3d;\n      background: transparent;\n      color: #f53d3d; }\n      .ios .toolbar[danger] ion-segment[danger] ion-segment-button[button][outline].segment-activated {\n        opacity: 1;\n        color: white;\n        background-color: #f53d3d; }\n      .ios .toolbar[danger] ion-segment[danger] ion-segment-button[button][outline]:hover:not(.segment-activated) {\n        background-color: rgba(245, 61, 61, 0.16); }\n  .ios .toolbar[danger] ion-segment[light] ion-segment-button[button] {\n    background-color: transparent; }\n    .ios .toolbar[danger] ion-segment[light] ion-segment-button[button][outline] {\n      border-color: #f4f4f4;\n      background: transparent;\n      color: #f4f4f4; }\n      .ios .toolbar[danger] ion-segment[light] ion-segment-button[button][outline].segment-activated {\n        opacity: 1;\n        color: black;\n        background-color: #f4f4f4; }\n      .ios .toolbar[danger] ion-segment[light] ion-segment-button[button][outline]:hover:not(.segment-activated) {\n        background-color: rgba(244, 244, 244, 0.16); }\n  .ios .toolbar[danger] ion-segment[dark] ion-segment-button[button] {\n    background-color: transparent; }\n    .ios .toolbar[danger] ion-segment[dark] ion-segment-button[button][outline] {\n      border-color: #222;\n      background: transparent;\n      color: #222; }\n      .ios .toolbar[danger] ion-segment[dark] ion-segment-button[button][outline].segment-activated {\n        opacity: 1;\n        color: white;\n        background-color: #222; }\n      .ios .toolbar[danger] ion-segment[dark] ion-segment-button[button][outline]:hover:not(.segment-activated) {\n        background-color: rgba(34, 34, 34, 0.16); }\n  .ios ion-segment[danger] ion-segment-button[button] {\n    background-color: transparent; }\n    .ios ion-segment[danger] ion-segment-button[button][outline] {\n      border-color: #f53d3d;\n      background: transparent;\n      color: #f53d3d; }\n      .ios ion-segment[danger] ion-segment-button[button][outline].segment-activated {\n        opacity: 1;\n        color: white;\n        background-color: #f53d3d; }\n      .ios ion-segment[danger] ion-segment-button[button][outline]:hover:not(.segment-activated) {\n        background-color: rgba(245, 61, 61, 0.16); }\n  .ios .toolbar[light] ion-segment ion-segment-button[button] {\n    background-color: transparent; }\n    .ios .toolbar[light] ion-segment ion-segment-button[button][outline] {\n      border-color: black;\n      background: transparent;\n      color: black; }\n      .ios .toolbar[light] ion-segment ion-segment-button[button][outline].segment-activated {\n        opacity: 1;\n        color: #f4f4f4;\n        background-color: black; }\n      .ios .toolbar[light] ion-segment ion-segment-button[button][outline]:hover:not(.segment-activated) {\n        background-color: rgba(0, 0, 0, 0.16); }\n  .ios .toolbar[light] ion-segment[primary] ion-segment-button[button] {\n    background-color: transparent; }\n    .ios .toolbar[light] ion-segment[primary] ion-segment-button[button][outline] {\n      border-color: #387ef5;\n      background: transparent;\n      color: #387ef5; }\n      .ios .toolbar[light] ion-segment[primary] ion-segment-button[button][outline].segment-activated {\n        opacity: 1;\n        color: white;\n        background-color: #387ef5; }\n      .ios .toolbar[light] ion-segment[primary] ion-segment-button[button][outline]:hover:not(.segment-activated) {\n        background-color: rgba(56, 126, 245, 0.16); }\n  .ios .toolbar[light] ion-segment[secondary] ion-segment-button[button] {\n    background-color: transparent; }\n    .ios .toolbar[light] ion-segment[secondary] ion-segment-button[button][outline] {\n      border-color: #32db64;\n      background: transparent;\n      color: #32db64; }\n      .ios .toolbar[light] ion-segment[secondary] ion-segment-button[button][outline].segment-activated {\n        opacity: 1;\n        color: white;\n        background-color: #32db64; }\n      .ios .toolbar[light] ion-segment[secondary] ion-segment-button[button][outline]:hover:not(.segment-activated) {\n        background-color: rgba(50, 219, 100, 0.16); }\n  .ios .toolbar[light] ion-segment[danger] ion-segment-button[button] {\n    background-color: transparent; }\n    .ios .toolbar[light] ion-segment[danger] ion-segment-button[button][outline] {\n      border-color: #f53d3d;\n      background: transparent;\n      color: #f53d3d; }\n      .ios .toolbar[light] ion-segment[danger] ion-segment-button[button][outline].segment-activated {\n        opacity: 1;\n        color: white;\n        background-color: #f53d3d; }\n      .ios .toolbar[light] ion-segment[danger] ion-segment-button[button][outline]:hover:not(.segment-activated) {\n        background-color: rgba(245, 61, 61, 0.16); }\n  .ios .toolbar[light] ion-segment[light] ion-segment-button[button] {\n    background-color: transparent; }\n    .ios .toolbar[light] ion-segment[light] ion-segment-button[button][outline] {\n      border-color: #f4f4f4;\n      background: transparent;\n      color: #f4f4f4; }\n      .ios .toolbar[light] ion-segment[light] ion-segment-button[button][outline].segment-activated {\n        opacity: 1;\n        color: black;\n        background-color: #f4f4f4; }\n      .ios .toolbar[light] ion-segment[light] ion-segment-button[button][outline]:hover:not(.segment-activated) {\n        background-color: rgba(244, 244, 244, 0.16); }\n  .ios .toolbar[light] ion-segment[dark] ion-segment-button[button] {\n    background-color: transparent; }\n    .ios .toolbar[light] ion-segment[dark] ion-segment-button[button][outline] {\n      border-color: #222;\n      background: transparent;\n      color: #222; }\n      .ios .toolbar[light] ion-segment[dark] ion-segment-button[button][outline].segment-activated {\n        opacity: 1;\n        color: white;\n        background-color: #222; }\n      .ios .toolbar[light] ion-segment[dark] ion-segment-button[button][outline]:hover:not(.segment-activated) {\n        background-color: rgba(34, 34, 34, 0.16); }\n  .ios ion-segment[light] ion-segment-button[button] {\n    background-color: transparent; }\n    .ios ion-segment[light] ion-segment-button[button][outline] {\n      border-color: #f4f4f4;\n      background: transparent;\n      color: #f4f4f4; }\n      .ios ion-segment[light] ion-segment-button[button][outline].segment-activated {\n        opacity: 1;\n        color: white;\n        background-color: #f4f4f4; }\n      .ios ion-segment[light] ion-segment-button[button][outline]:hover:not(.segment-activated) {\n        background-color: rgba(244, 244, 244, 0.16); }\n  .ios .toolbar[dark] ion-segment ion-segment-button[button] {\n    background-color: transparent; }\n    .ios .toolbar[dark] ion-segment ion-segment-button[button][outline] {\n      border-color: white;\n      background: transparent;\n      color: white; }\n      .ios .toolbar[dark] ion-segment ion-segment-button[button][outline].segment-activated {\n        opacity: 1;\n        color: #222;\n        background-color: white; }\n      .ios .toolbar[dark] ion-segment ion-segment-button[button][outline]:hover:not(.segment-activated) {\n        background-color: rgba(255, 255, 255, 0.16); }\n  .ios .toolbar[dark] ion-segment[primary] ion-segment-button[button] {\n    background-color: transparent; }\n    .ios .toolbar[dark] ion-segment[primary] ion-segment-button[button][outline] {\n      border-color: #387ef5;\n      background: transparent;\n      color: #387ef5; }\n      .ios .toolbar[dark] ion-segment[primary] ion-segment-button[button][outline].segment-activated {\n        opacity: 1;\n        color: white;\n        background-color: #387ef5; }\n      .ios .toolbar[dark] ion-segment[primary] ion-segment-button[button][outline]:hover:not(.segment-activated) {\n        background-color: rgba(56, 126, 245, 0.16); }\n  .ios .toolbar[dark] ion-segment[secondary] ion-segment-button[button] {\n    background-color: transparent; }\n    .ios .toolbar[dark] ion-segment[secondary] ion-segment-button[button][outline] {\n      border-color: #32db64;\n      background: transparent;\n      color: #32db64; }\n      .ios .toolbar[dark] ion-segment[secondary] ion-segment-button[button][outline].segment-activated {\n        opacity: 1;\n        color: white;\n        background-color: #32db64; }\n      .ios .toolbar[dark] ion-segment[secondary] ion-segment-button[button][outline]:hover:not(.segment-activated) {\n        background-color: rgba(50, 219, 100, 0.16); }\n  .ios .toolbar[dark] ion-segment[danger] ion-segment-button[button] {\n    background-color: transparent; }\n    .ios .toolbar[dark] ion-segment[danger] ion-segment-button[button][outline] {\n      border-color: #f53d3d;\n      background: transparent;\n      color: #f53d3d; }\n      .ios .toolbar[dark] ion-segment[danger] ion-segment-button[button][outline].segment-activated {\n        opacity: 1;\n        color: white;\n        background-color: #f53d3d; }\n      .ios .toolbar[dark] ion-segment[danger] ion-segment-button[button][outline]:hover:not(.segment-activated) {\n        background-color: rgba(245, 61, 61, 0.16); }\n  .ios .toolbar[dark] ion-segment[light] ion-segment-button[button] {\n    background-color: transparent; }\n    .ios .toolbar[dark] ion-segment[light] ion-segment-button[button][outline] {\n      border-color: #f4f4f4;\n      background: transparent;\n      color: #f4f4f4; }\n      .ios .toolbar[dark] ion-segment[light] ion-segment-button[button][outline].segment-activated {\n        opacity: 1;\n        color: black;\n        background-color: #f4f4f4; }\n      .ios .toolbar[dark] ion-segment[light] ion-segment-button[button][outline]:hover:not(.segment-activated) {\n        background-color: rgba(244, 244, 244, 0.16); }\n  .ios .toolbar[dark] ion-segment[dark] ion-segment-button[button] {\n    background-color: transparent; }\n    .ios .toolbar[dark] ion-segment[dark] ion-segment-button[button][outline] {\n      border-color: #222;\n      background: transparent;\n      color: #222; }\n      .ios .toolbar[dark] ion-segment[dark] ion-segment-button[button][outline].segment-activated {\n        opacity: 1;\n        color: white;\n        background-color: #222; }\n      .ios .toolbar[dark] ion-segment[dark] ion-segment-button[button][outline]:hover:not(.segment-activated) {\n        background-color: rgba(34, 34, 34, 0.16); }\n  .ios ion-segment[dark] ion-segment-button[button] {\n    background-color: transparent; }\n    .ios ion-segment[dark] ion-segment-button[button][outline] {\n      border-color: #222;\n      background: transparent;\n      color: #222; }\n      .ios ion-segment[dark] ion-segment-button[button][outline].segment-activated {\n        opacity: 1;\n        color: white;\n        background-color: #222; }\n      .ios ion-segment[dark] ion-segment-button[button][outline]:hover:not(.segment-activated) {\n        background-color: rgba(34, 34, 34, 0.16); }\n  .ios ion-switch.item.activated {\n    background: #fff; }\n  .ios ion-switch media-switch {\n    padding: 6px 8px 5px 16px; }\n  .ios ion-switch switch-icon {\n    position: relative;\n    display: block;\n    width: 51px;\n    height: 32px;\n    border-radius: 16px;\n    pointer-events: none;\n    background-color: #e6e6e6;\n    will-change: background-color;\n    -webkit-transition: background-color 300ms;\n    transition: background-color 300ms; }\n  .ios ion-switch[aria-checked=true] switch-icon {\n    background-color: #387ef5; }\n  .ios ion-switch switch-icon:before {\n    content: '';\n    position: absolute;\n    top: 2px;\n    right: 2px;\n    left: 2px;\n    bottom: 2px;\n    border-radius: 16px;\n    background-color: #fff;\n    will-change: transform;\n    -webkit-transform: scale3d(1, 1, 1);\n    transform: scale3d(1, 1, 1);\n    -webkit-transition: -webkit-transform 300ms;\n    transition: transform 300ms; }\n  .ios ion-switch[aria-checked=true] switch-icon:before,\n  .ios ion-switch .switch-activated switch-icon:before {\n    -webkit-transform: scale3d(0, 0, 0);\n    transform: scale3d(0, 0, 0); }\n  .ios ion-switch switch-icon:after {\n    content: '';\n    position: absolute;\n    top: 2px;\n    left: 2px;\n    width: 28px;\n    height: 28px;\n    border-radius: 14px;\n    background-color: #fff;\n    box-shadow: 0 3px 12px rgba(0, 0, 0, 0.16), 0 3px 1px rgba(0, 0, 0, 0.1);\n    will-change: transform, width, left;\n    -webkit-transition: -webkit-transform 300ms, width 120ms ease-in-out 80ms, left 110ms ease-in-out 80ms;\n    transition: transform 300ms, width 120ms ease-in-out 80ms, left 110ms ease-in-out 80ms; }\n  .ios ion-switch[aria-checked=true] switch-icon:after {\n    -webkit-transform: translate3d(19px, 0, 0);\n    transform: translate3d(19px, 0, 0); }\n  .ios ion-switch .switch-activated switch-icon:after {\n    width: 34px; }\n  .ios ion-switch[aria-checked=true] .switch-activated switch-icon:after {\n    left: -4px; }\n  .ios ion-switch[secondary][aria-checked=true] switch-icon {\n    background-color: #32db64; }\n  .ios ion-switch[danger][aria-checked=true] switch-icon {\n    background-color: #f53d3d; }\n  .ios ion-switch[light][aria-checked=true] switch-icon {\n    background-color: #f4f4f4; }\n  .ios ion-switch[dark][aria-checked=true] switch-icon {\n    background-color: #222; }\n  .ios tabbar {\n    border-top: 1px solid #b2b2b2; }\n  .ios ion-tabs[tabbar-placement=top] tabbar {\n    border-top: none;\n    border-bottom: 1px solid #b2b2b2; }\n  .ios .tab-button {\n    padding: 0px 10px;\n    min-height: 49px; }\n  .ios .tab-button-text {\n    margin-bottom: 0;\n    min-height: 11px;\n    font-size: 10px; }\n  .ios .has-title-only .tab-button-text {\n    font-size: 12px; }\n  .ios .tab-button-icon {\n    font-size: 32px;\n    height: 32px;\n    min-width: 37px; }\n    .ios .tab-button-icon:before {\n      vertical-align: top; }\n  .ios [tabbar-icons=right] .tab-button .tab-button-text,\n  .ios [tabbar-icons=left] .tab-button .tab-button-text {\n    font-size: 1.4rem;\n    line-height: 1.1;\n    margin-top: 0;\n    margin-bottom: 0; }\n  .ios [tabbar-icons=right] .tab-button icon,\n  .ios [tabbar-icons=left] .tab-button icon {\n    min-width: 24px;\n    height: 26px;\n    font-size: 24px; }\n  .ios [tabbar-icons=hide] .tab-button-text {\n    font-size: 1.4rem;\n    line-height: 1.1; }\n  .ios .tab-button.has-title-only {\n    min-height: 41px; }\n    .ios .tab-button.has-title-only .tab-button-text {\n      font-size: 1.4rem;\n      line-height: 1.1; }\n  .ios .tab-button.icon-only {\n    min-height: 41px; }\n  .ios.hairlines ion-tabs tabbar {\n    border-top-width: 0.55px; }\n  .ios.hairlines ion-tabs[tabbar-placement=\"top\"] tabbar {\n    border-bottom-width: 0.55px; }\n  .ios tabbar[primary] {\n    border-color: #0c60ee; }\n  .ios tabbar[secondary] {\n    border-color: #21b94e; }\n  .ios tabbar[danger] {\n    border-color: #f30c0c; }\n  .ios tabbar[light] {\n    border-color: #dbdbdb; }\n  .ios tabbar[dark] {\n    border-color: #090909; }\n  .ios.platform-cordova.platform-ios ion-navbar-section {\n    min-height: 6.4rem;\n    height: 6.4rem; }\n  .ios.platform-cordova.platform-ios ion-navbar ion-title,\n  .ios.platform-cordova.platform-ios ion-navbar ion-segment {\n    padding-top: 2rem; }\n  .ios.platform-cordova.platform-ios ion-navbar,\n  .ios.platform-cordova.platform-ios ion-app > ion-toolbar:first-child,\n  .ios.platform-cordova.platform-ios ion-app > ion-toolbar:first-child ion-title,\n  .ios.platform-cordova.platform-ios ion-app > ion-toolbar:first-child ion-segment,\n  .ios.platform-cordova.platform-ios ion-menu > ion-toolbar:first-child,\n  .ios.platform-cordova.platform-ios ion-menu > ion-toolbar:first-child ion-title,\n  .ios.platform-cordova.platform-ios ion-menu > ion-toolbar:first-child ion-segment,\n  .ios.platform-cordova.platform-ios ion-page.modal > ion-toolbar:first-child,\n  .ios.platform-cordova.platform-ios ion-page.modal > ion-toolbar:first-child ion-title,\n  .ios.platform-cordova.platform-ios ion-page.modal > ion-toolbar:first-child ion-segment {\n    min-height: 6.4rem;\n    height: 6.4rem;\n    padding-top: 2rem; }\n\n.md {\n  /*! Ionic: Material Design */\n  /****************/\n  /* DEFAULT LIST */\n  /****************/\n  /**************/\n  /* INSET LIST */\n  /**************/\n  /*****************/\n  /* NO LINES LIST */\n  /*****************/ }\n  .md hr {\n    border-width: 0;\n    height: 1px;\n    background-color: rgba(0, 0, 0, 0.08); }\n  .md .toolbar {\n    min-height: 5.6rem; }\n    .md .toolbar button,\n    .md .toolbar [button],\n    .md .toolbar button.activated,\n    .md .toolbar [button].activated {\n      margin-top: 0;\n      margin-bottom: 0;\n      padding: 0 5px;\n      min-height: 32px;\n      box-shadow: none;\n      overflow: visible; }\n    .md .toolbar button.icon-only,\n    .md .toolbar [button].icon-only {\n      padding-right: 0;\n      padding-left: 0; }\n    .md .toolbar button icon,\n    .md .toolbar [button] icon {\n      padding: 0;\n      min-width: 28px; }\n    .md .toolbar [menu-toggle],\n    .md .toolbar [menu-toggle].activated {\n      padding: 0 2px;\n      min-width: 44px; }\n      .md .toolbar [menu-toggle] icon,\n      .md .toolbar [menu-toggle].activated icon {\n        font-size: 2.4rem; }\n    .md .toolbar [menu-toggle][secondary],\n    .md .toolbar [menu-toggle][secondary].activated {\n      margin: 0 2px;\n      min-width: 28px; }\n  .md ion-title {\n    padding: 0 12px;\n    font-size: 2rem;\n    font-weight: 500; }\n  .md ion-nav-items[primary] button:first-child {\n    margin-left: 0; }\n  .md ion-action-sheet {\n    margin: 0; }\n  .md .action-sheet-container {\n    margin: 0; }\n  .md .action-sheet-title,\n  .md .action-sheet-option,\n  .md .action-sheet-destructive,\n  .md .action-sheet-cancel button {\n    text-align: left;\n    border-color: transparent;\n    font-size: 1.6rem;\n    color: #222;\n    box-shadow: none;\n    text-transform: none; }\n  .md ion-action-sheet icon {\n    display: inline-block;\n    margin: 0 28px 0 0;\n    min-width: 24px;\n    text-align: center;\n    vertical-align: middle;\n    font-size: 2.4rem; }\n  .md .action-sheet-title {\n    padding: 1.9rem 1.6rem 1.7rem;\n    font-size: 1.6rem;\n    color: #757575; }\n  .md ion-action-sheet button {\n    font-weight: normal;\n    min-height: 4.8rem; }\n    .md ion-action-sheet button.activated {\n      background: #f1f1f1;\n      border-radius: 0;\n      box-shadow: none; }\n  .md .action-sheet-group {\n    margin: 0;\n    border-radius: 0;\n    background-color: #fafafa; }\n    .md .action-sheet-group:last-child button {\n      margin-bottom: 8px; }\n  .md .action-sheet-cancel {\n    background-color: #fafafa;\n    width: auto;\n    border: none; }\n  .md button,\n  .md [button] {\n    border-radius: 2px;\n    min-height: 3.6rem;\n    padding: 0 1.1em;\n    text-transform: uppercase;\n    font-weight: 500;\n    font-size: 1.4rem;\n    box-shadow: 0 2px 2px 0 rgba(0, 0, 0, 0.14), 0 3px 1px -2px rgba(0, 0, 0, 0.2), 0 1px 5px 0 rgba(0, 0, 0, 0.12);\n    -webkit-transition: box-shadow 300ms cubic-bezier(0.4, 0, 0.2, 1), background-color 300ms cubic-bezier(0.4, 0, 0.2, 1), color 300ms cubic-bezier(0.4, 0, 0.2, 1);\n    transition: box-shadow 300ms cubic-bezier(0.4, 0, 0.2, 1), background-color 300ms cubic-bezier(0.4, 0, 0.2, 1), color 300ms cubic-bezier(0.4, 0, 0.2, 1); }\n    .md button:hover:not(.disable-hover),\n    .md [button]:hover:not(.disable-hover) {\n      background-color: rgba(158, 158, 158, 0.1); }\n    .md button[full],\n    .md [button][full] {\n      border-radius: 0; }\n    .md button[round],\n    .md [button][round] {\n      border-radius: 64px;\n      padding: 0 2.6rem; }\n    .md button[large],\n    .md [button][large] {\n      padding: 0 1em;\n      min-height: 2.8em;\n      font-size: 2rem; }\n    .md button[small],\n    .md [button][small] {\n      padding: 0 0.9em;\n      min-height: 2.1em;\n      font-size: 1.3rem; }\n    .md button.activated,\n    .md [button].activated {\n      box-shadow: 0 3px 5px rgba(0, 0, 0, 0.14), 0 3px 5px rgba(0, 0, 0, 0.21); }\n    .md button[fab],\n    .md [button][fab] {\n      border-radius: 50%;\n      box-shadow: 0 4px 6px 0 rgba(0, 0, 0, 0.14), 0 4px 5px rgba(0, 0, 0, 0.1); }\n      .md button[fab].activated,\n      .md [button][fab].activated {\n        box-shadow: 0 5px 15px 0 rgba(0, 0, 0, 0.4), 0 4px 7px 0 rgba(0, 0, 0, 0.1); }\n    .md button.icon-only,\n    .md [button].icon-only {\n      padding: 0; }\n    .md button[outline],\n    .md [button][outline] {\n      box-shadow: none; }\n      .md button[outline].activated,\n      .md [button][outline].activated {\n        opacity: 1; }\n      .md button[outline] md-ripple,\n      .md [button][outline] md-ripple {\n        background: rgba(56, 126, 245, 0.1); }\n    .md button[clear], .ios .popup-buttons .md button, .md .ios .searchbar-cancel, .ios .md .searchbar-cancel, .md .popup-buttons button,\n    .md [button][clear] {\n      opacity: 1;\n      box-shadow: none; }\n      .md button[clear].activated, .ios .popup-buttons .md button.activated, .md .ios .activated.searchbar-cancel, .ios .md .activated.searchbar-cancel, .md .popup-buttons button.activated,\n      .md [button][clear].activated {\n        background-color: rgba(158, 158, 158, 0.2); }\n  .md button[secondary].activated,\n  .md [button][secondary].activated {\n    opacity: 1; }\n  .md button[secondary][outline] md-ripple,\n  .md [button][secondary][outline] md-ripple {\n    background: rgba(50, 219, 100, 0.2); }\n  .md button[secondary][outline].activated,\n  .md [button][secondary][outline].activated {\n    opacity: 1; }\n    .md button[secondary][outline].activated md-ripple,\n    .md [button][secondary][outline].activated md-ripple {\n      background: rgba(0, 0, 0, 0.1); }\n  .md button[danger].activated,\n  .md [button][danger].activated {\n    opacity: 1; }\n  .md button[danger][outline] md-ripple,\n  .md [button][danger][outline] md-ripple {\n    background: rgba(245, 61, 61, 0.2); }\n  .md button[danger][outline].activated,\n  .md [button][danger][outline].activated {\n    opacity: 1; }\n    .md button[danger][outline].activated md-ripple,\n    .md [button][danger][outline].activated md-ripple {\n      background: rgba(0, 0, 0, 0.1); }\n  .md button[light].activated,\n  .md [button][light].activated {\n    opacity: 1; }\n  .md button[light][outline] md-ripple,\n  .md [button][light][outline] md-ripple {\n    background: rgba(244, 244, 244, 0.2); }\n  .md button[light][outline].activated,\n  .md [button][light][outline].activated {\n    opacity: 1; }\n    .md button[light][outline].activated md-ripple,\n    .md [button][light][outline].activated md-ripple {\n      background: rgba(0, 0, 0, 0.1); }\n  .md button[dark].activated,\n  .md [button][dark].activated {\n    opacity: 1; }\n  .md button[dark][outline] md-ripple,\n  .md [button][dark][outline] md-ripple {\n    background: rgba(34, 34, 34, 0.2); }\n  .md button[dark][outline].activated,\n  .md [button][dark][outline].activated {\n    opacity: 1; }\n    .md button[dark][outline].activated md-ripple,\n    .md [button][dark][outline].activated md-ripple {\n      background: rgba(0, 0, 0, 0.1); }\n  .md [padding],\n  .md [padding] > scroll-content {\n    padding: 16px; }\n  .md [padding-top] {\n    padding-top: 16px; }\n  .md [padding-right] {\n    padding-right: 16px; }\n  .md [padding-bottom] {\n    padding-bottom: 16px; }\n  .md [padding-left] {\n    padding-left: 16px; }\n  .md [padding-vertical] {\n    padding-top: 16px;\n    padding-bottom: 16px; }\n  .md [padding-horizontal] {\n    padding-right: 16px;\n    padding-left: 16px; }\n  .md ion-item-divider {\n    padding: 13px 16px 13px 16px;\n    background-color: #fff;\n    color: #222; }\n  .md ion-note {\n    color: #c4c4c4; }\n  .md .item {\n    position: relative;\n    padding-right: 0;\n    padding-left: 16px;\n    font-size: 1.6rem;\n    text-transform: none;\n    font-weight: normal;\n    box-shadow: none; }\n    .md .item h1 {\n      margin: 0 0 2px;\n      font-size: 2.4rem;\n      font-weight: normal; }\n    .md .item h2 {\n      margin: 2px 0 2px;\n      font-size: 1.6rem;\n      font-weight: normal; }\n    .md .item h3,\n    .md .item h4,\n    .md .item h5,\n    .md .item h6 {\n      line-height: normal;\n      margin: 2px 0 2px;\n      font-size: 1.4rem;\n      font-weight: normal; }\n    .md .item p {\n      line-height: normal;\n      color: #666;\n      font-size: 1.4rem;\n      margin: 0 0 2px; }\n  .md .item-inner {\n    border-bottom: 1px solid #dedede;\n    padding-right: 8px; }\n  .md ion-item-content {\n    margin: 13px 8px 13px 0; }\n  .md button.item.activated {\n    box-shadow: none; }\n  .md [item-left],\n  .md [item-right] {\n    margin: 9px 8px 9px 0; }\n  .md icon[item-left],\n  .md icon[item-right] {\n    margin-top: 11px;\n    margin-left: 0;\n    margin-bottom: 10px; }\n  .md button[item-left],\n  .md button[item-right],\n  .md [button][item-left],\n  .md [button][item-right] {\n    padding: 0 0.6em;\n    min-height: 26px;\n    font-size: 1.2rem; }\n  .md [item-left].icon-only,\n  .md [item-right].icon-only,\n  .md [item-left].icon-only icon,\n  .md [item-right].icon-only icon {\n    padding: 0 1px; }\n  .md [item-left][clear],\n  .md [item-right][clear] {\n    padding: 0 8px; }\n  .md [item-left].icon-left icon,\n  .md [item-right].icon-left icon {\n    margin-left: 0;\n    margin-bottom: 1px;\n    padding-right: 0.3em; }\n  .md [item-left].icon-right icon,\n  .md [item-right].icon-right icon {\n    margin-right: 0;\n    margin-bottom: 1px; }\n  .md [text-wrap] ion-item-content {\n    font-size: 1.4rem;\n    line-height: 1.5; }\n  .md icon[item-left] + .item-inner,\n  .md icon[item-left] + [text-input] {\n    margin-left: 24px; }\n  .md ion-avatar[item-left],\n  .md ion-thumbnail[item-left] {\n    margin: 8px 16px 8px 0; }\n  .md ion-avatar[item-right],\n  .md ion-thumbnail[item-right] {\n    margin: 8px; }\n  .md ion-avatar {\n    min-width: 4rem;\n    min-height: 4rem; }\n    .md ion-avatar img {\n      max-width: 4rem;\n      max-height: 4rem;\n      border-radius: 2rem; }\n  .md ion-thumbnail {\n    min-width: 8rem;\n    min-height: 8rem; }\n    .md ion-thumbnail img {\n      max-width: 8rem;\n      max-height: 8rem; }\n  .md .item,\n  .md a.item,\n  .md button.item {\n    -webkit-transition: background-color 300ms cubic-bezier(0.4, 0, 0.2, 1), -webkit-transform 300ms;\n    transition: background-color 300ms cubic-bezier(0.4, 0, 0.2, 1), transform 300ms; }\n  .md .item.activated,\n  .md a.item.activated,\n  .md button.item.activated {\n    background-color: #f1f1f1;\n    box-shadow: none; }\n  .md .item[no-lines] {\n    border-width: 0; }\n  .md ion-list-header,\n  .md ion-item-divider {\n    border-bottom: 1px solid #dedede;\n    margin-left: 0;\n    padding: 16px 16px 16px 16px;\n    font-size: 1.4rem;\n    color: #858585; }\n  .md ion-list {\n    margin: 0 0 16px 0; }\n    .md ion-list .item-inner {\n      border-bottom: 1px solid #dedede; }\n    .md ion-list > .item:first-child,\n    .md ion-list > ion-item-sliding:first-child .item {\n      border-top: 1px solid #dedede; }\n    .md ion-list > .item:last-child,\n    .md ion-list > ion-item-sliding:last-child .item {\n      border-bottom: 1px solid #dedede; }\n      .md ion-list > .item:last-child .item-inner,\n      .md ion-list > .item:last-child ion-item-content,\n      .md ion-list > ion-item-sliding:last-child .item .item-inner,\n      .md ion-list > ion-item-sliding:last-child .item ion-item-content {\n        border-bottom: none; }\n    .md ion-list > ion-input:last-child:after {\n      left: 0; }\n    .md ion-list ion-item-options button, .md ion-list ion-item-options [button] {\n      height: calc(100% - 2px);\n      margin: 1px 0 1px 0;\n      box-shadow: none;\n      border: none;\n      border-radius: 0;\n      display: -webkit-inline-box;\n      display: -webkit-inline-flex;\n      display: -ms-inline-flexbox;\n      display: inline-flex;\n      -webkit-box-align: center;\n      -webkit-align-items: center;\n      -ms-flex-align: center;\n      align-items: center;\n      box-sizing: border-box; }\n      .md ion-list ion-item-options button:before, .md ion-list ion-item-options [button]:before {\n        margin: 0 auto; }\n    .md ion-list .item[no-lines],\n    .md ion-list .item[no-lines] .item-inner {\n      border-width: 0; }\n    .md ion-list + ion-list {\n      margin-top: 32px; }\n      .md ion-list + ion-list ion-list-header {\n        margin-top: -16px;\n        padding-top: 0; }\n  .md ion-list[inset] {\n    margin: 16px 16px 16px 16px;\n    border-radius: 2px; }\n    .md ion-list[inset] .item:first-child {\n      border-top-width: 0;\n      border-top-right-radius: 2px;\n      border-top-left-radius: 2px; }\n    .md ion-list[inset] .item:last-child {\n      border-bottom-width: 0;\n      border-bottom-right-radius: 2px;\n      border-bottom-left-radius: 2px; }\n    .md ion-list[inset] ion-input.item {\n      padding-right: 0;\n      padding-left: 0; }\n      .md ion-list[inset] ion-input.item:after {\n        left: 0; }\n    .md ion-list[inset] + ion-list[inset] {\n      margin-top: 0; }\n  .md ion-list[no-lines] .item,\n  .md ion-list[no-lines] .item .item-inner {\n    border-width: 0; }\n  .md ion-card {\n    margin: 10px 10px 10px 10px;\n    font-size: 1.4rem;\n    background: #fff;\n    box-shadow: 0 2px 2px 0 rgba(0, 0, 0, 0.14), 0 3px 1px -2px rgba(0, 0, 0, 0.2), 0 1px 5px 0 rgba(0, 0, 0, 0.12);\n    border-radius: 2px; }\n    .md ion-card ion-list {\n      margin-bottom: 0; }\n      .md ion-card ion-list ion-item-content {\n        padding: 0; }\n      .md ion-card ion-list .item-inner {\n        border-bottom: 1px solid #dedede; }\n      .md ion-card ion-list > .item:last-child,\n      .md ion-card ion-list > ion-item-sliding:last-child .item {\n        border-bottom: none; }\n    .md ion-card .item {\n      font-size: 1.6rem; }\n    .md ion-card .item-inner {\n      border: none; }\n    .md ion-card ion-card-content {\n      padding: 13px 16px 13px 16px;\n      font-size: 1.4rem;\n      line-height: 1.5; }\n    .md ion-card ion-card-header {\n      padding: 16px;\n      font-size: 1.6rem;\n      color: #222; }\n    .md ion-card ion-card-header + ion-card-content,\n    .md ion-card .item + ion-card-content {\n      padding-top: 0; }\n    .md ion-card ion-note[item-left],\n    .md ion-card ion-note[item-right] {\n      font-size: 1.3rem; }\n    .md ion-card .card-title {\n      padding: 8px 0 8px 0;\n      font-size: 2.4rem;\n      color: #222; }\n    .md ion-card h1 {\n      margin: 0 0 2px;\n      font-size: 2.4rem;\n      font-weight: normal;\n      color: #222; }\n    .md ion-card h2 {\n      margin: 2px 0 2px;\n      font-size: 1.6rem;\n      font-weight: normal;\n      color: #222; }\n    .md ion-card h3,\n    .md ion-card h4,\n    .md ion-card h5,\n    .md ion-card h6 {\n      margin: 2px 0 2px;\n      font-size: 1.4rem;\n      font-weight: normal;\n      color: #222; }\n    .md ion-card p {\n      font-size: 1.4rem;\n      margin: 0 0 2px;\n      line-height: 1.5;\n      font-weight: normal;\n      color: #222; }\n  .md ion-card + ion-card {\n    margin-top: 0; }\n  .md ion-checkbox.item .item-inner {\n    border: none;\n    padding-right: 0; }\n  .md ion-checkbox ion-item-content {\n    border-bottom: 1px solid #dedede;\n    margin: 0;\n    padding: 13px 8px 13px 0; }\n  .md ion-checkbox[aria-checked=true] checkbox-icon {\n    background-color: #387ef5;\n    border-color: #387ef5; }\n  .md ion-checkbox[aria-checked=true] checkbox-icon:after {\n    position: absolute;\n    border: 2px solid #fff;\n    top: 0;\n    left: 3px;\n    width: 4px;\n    height: 9px;\n    border-left: none;\n    border-top: none;\n    content: '';\n    -webkit-transform: rotate(45deg);\n    transform: rotate(45deg); }\n  .md media-checkbox {\n    display: block;\n    margin: 9px 36px 9px 4px; }\n  .md checkbox-icon {\n    position: relative;\n    display: block;\n    width: 16px;\n    height: 16px;\n    border-radius: 2px;\n    border: 2px solid #787878;\n    background-color: #fff; }\n  .md ion-checkbox[secondary][aria-checked=true] checkbox-icon {\n    background-color: #32db64;\n    border-color: #32db64; }\n  .md ion-checkbox[danger][aria-checked=true] checkbox-icon {\n    background-color: #f53d3d;\n    border-color: #f53d3d; }\n  .md ion-checkbox[light][aria-checked=true] checkbox-icon {\n    background-color: #f4f4f4;\n    border-color: #f4f4f4; }\n  .md ion-checkbox[dark][aria-checked=true] checkbox-icon {\n    background-color: #222;\n    border-color: #222; }\n  .md [text-input] {\n    margin: 13px 8px 13px 8px;\n    padding: 0; }\n  .md ion-input[inset] [text-input] {\n    margin: 6.5px 16px 6.5px 16px;\n    padding: 6.5px 8px 6.5px 8px; }\n  .md ion-label {\n    margin: 13px 8px 13px 8px;\n    color: #999; }\n  .md ion-input:after {\n    position: absolute;\n    bottom: 0;\n    right: 0;\n    left: 16px;\n    border-bottom: 2px solid transparent;\n    content: ''; }\n  .md ion-input.has-focus:after {\n    border-bottom: 2px solid #387ef5; }\n  .md ion-input.ng-valid.has-value:after {\n    border-bottom: 2px solid #32db64; }\n  .md ion-input.ng-invalid.ng-touched:after {\n    border-bottom: 2px solid #f53d3d; }\n  .md [stacked-label] ion-label {\n    font-size: 1.2rem;\n    margin-bottom: 0; }\n  .md [stacked-label] ion-label,\n  .md [floating-label] ion-label {\n    margin-left: 0; }\n  .md [stacked-label].has-focus ion-label,\n  .md [floating-label].has-focus ion-label {\n    color: #387ef5; }\n  .md [stacked-label] [text-input],\n  .md [floating-label] [text-input] {\n    margin-bottom: 8px;\n    margin-top: 8px;\n    margin-left: 0; }\n  .md [floating-label] ion-label {\n    margin-bottom: 0;\n    -webkit-transform-origin: left top;\n    transform-origin: left top;\n    -webkit-transform: translate3d(0, 27px, 0);\n    transform: translate3d(0, 27px, 0);\n    -webkit-transition: -webkit-transform 150ms ease-in-out;\n    transition: transform 150ms ease-in-out; }\n  .md [floating-label].has-focus ion-label,\n  .md [floating-label].has-value ion-label {\n    -webkit-transform: translate3d(0, 0, 0) scale(0.8);\n    transform: translate3d(0, 0, 0) scale(0.8); }\n  .md ion-navbar-section {\n    min-height: 5.6rem; }\n  .md .toolbar .back-button {\n    margin: 0 0 0 12px;\n    box-shadow: none; }\n  .md .toolbar .back-button-icon {\n    margin: 0;\n    min-width: 44px;\n    font-size: 2.4rem;\n    font-weight: normal;\n    text-align: left; }\n  .md ion-popup popup-wrapper {\n    max-width: 280px;\n    border-radius: 2px;\n    background-color: #fafafa;\n    box-shadow: 0px 16px 20px rgba(0, 0, 0, 0.4); }\n  .md .popup-head {\n    text-align: left;\n    padding: 24px 24px 10px 24px; }\n  .md .popup-title {\n    font-size: 20px; }\n  .md .popup-sub-title {\n    font-size: 15px; }\n  .md .popup-body {\n    padding: 10px 24px 24px 24px;\n    color: rgba(0, 0, 0, 0.5); }\n  .md .prompt-input {\n    border-bottom: 1px solid #dedede;\n    color: #000000;\n    margin: 5px 0 5px 0; }\n    .md .prompt-input:focus {\n      border-bottom: 2px solid #387ef5;\n      margin-bottom: 4px; }\n  .md .popup-buttons {\n    padding: 8px 8px 8px 24px;\n    -webkit-box-pack: end;\n    -webkit-justify-content: flex-end;\n    -ms-flex-pack: end;\n    justify-content: flex-end; }\n    .md .popup-buttons button {\n      min-height: 36px; }\n      .md .popup-buttons button.activated {\n        opacity: 1; }\n  .md ion-radio radio-icon {\n    position: relative;\n    top: 0;\n    left: 0;\n    display: block;\n    width: 16px;\n    height: 16px;\n    margin: 0;\n    border: 2px solid #787878;\n    border-radius: 50%; }\n  .md ion-radio[aria-checked=true] radio-icon {\n    border-color: #387ef5; }\n  .md ion-radio radio-icon:after {\n    position: absolute;\n    top: 2px;\n    left: 2px;\n    width: 8px;\n    height: 8px;\n    background: #387ef5;\n    border-radius: 50%;\n    content: '';\n    -webkit-transition: -webkit-transform 280ms cubic-bezier(0.4, 0, 0.2, 1);\n    transition: transform 280ms cubic-bezier(0.4, 0, 0.2, 1);\n    -webkit-transform: scale3d(0, 0, 0);\n    transform: scale3d(0, 0, 0); }\n  .md ion-radio[aria-checked=true] radio-icon:after {\n    -webkit-transform: scale3d(1, 1, 1);\n    transform: scale3d(1, 1, 1); }\n  .md ion-radio[aria-checked=true] {\n    color: #387ef5; }\n  .md media-radio {\n    display: block;\n    margin: 9px 8px 9px 8px; }\n  .md ion-radio[secondary][aria-checked=true] radio-icon {\n    border-color: #32db64; }\n  .md ion-radio[secondary][aria-checked=true] radio-icon:after {\n    background: #32db64; }\n  .md ion-radio[secondary][aria-checked=true] {\n    color: #32db64; }\n  .md ion-radio[danger][aria-checked=true] radio-icon {\n    border-color: #f53d3d; }\n  .md ion-radio[danger][aria-checked=true] radio-icon:after {\n    background: #f53d3d; }\n  .md ion-radio[danger][aria-checked=true] {\n    color: #f53d3d; }\n  .md ion-radio[light][aria-checked=true] radio-icon {\n    border-color: #f4f4f4; }\n  .md ion-radio[light][aria-checked=true] radio-icon:after {\n    background: #f4f4f4; }\n  .md ion-radio[light][aria-checked=true] {\n    color: #f4f4f4; }\n  .md ion-radio[dark][aria-checked=true] radio-icon {\n    border-color: #222; }\n  .md ion-radio[dark][aria-checked=true] radio-icon:after {\n    background: #222; }\n  .md ion-radio[dark][aria-checked=true] {\n    color: #222; }\n  .md ion-searchbar {\n    padding: 8px;\n    background: inherit; }\n  .md .searchbar-search-icon,\n  .md button.searchbar-cancel-icon {\n    width: 21px;\n    height: 21px;\n    background-size: 20px;\n    background-repeat: no-repeat;\n    position: absolute; }\n    .md .searchbar-search-icon.activated,\n    .md button.searchbar-cancel-icon.activated {\n      background-color: transparent; }\n  .md .searchbar-search-icon {\n    top: 11px;\n    left: 16px;\n    background-image: url(\"data:image/svg+xml;charset=utf-8,<svg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%20512%20512'><path%20fill='#5B5B5B'%20d='M337.509,305.372h-17.501l-6.571-5.486c20.791-25.232,33.922-57.054,33.922-93.257C347.358,127.632,283.896,64,205.135,64C127.452,64,64,127.632,64,206.629s63.452,142.628,142.225,142.628c35.011,0,67.831-13.167,92.991-34.008l6.561,5.487v17.551L415.18,448L448,415.086L337.509,305.372z%20M206.225,305.372c-54.702,0-98.463-43.887-98.463-98.743c0-54.858,43.761-98.742,98.463-98.742c54.7,0,98.462,43.884,98.462,98.742C304.687,261.485,260.925,305.372,206.225,305.372z'/></svg>\"); }\n  .md button.searchbar-cancel-icon {\n    display: none;\n    height: 100%;\n    margin: 0;\n    top: 0;\n    left: 10px; }\n  .md .searchbar-input {\n    padding: 6px 55px;\n    height: 28px;\n    box-shadow: 0 2px 2px 0 rgba(0, 0, 0, 0.14), 0 3px 1px -2px rgba(0, 0, 0, 0.2), 0 1px 5px 0 rgba(0, 0, 0, 0.12);\n    font-size: 1.6rem;\n    font-weight: 400;\n    border-radius: 2px;\n    color: #141414;\n    background-color: #FFFFFF;\n    background-position: 8px center; }\n    .md .searchbar-input::-moz-placeholder {\n      color: #AEAEAE; }\n    .md .searchbar-input:-ms-input-placeholder {\n      color: #AEAEAE; }\n    .md .searchbar-input::-webkit-input-placeholder {\n      color: #AEAEAE;\n      text-indent: 0; }\n  .md button.searchbar-close-icon {\n    width: 22px;\n    height: 100%;\n    padding: 0;\n    background-image: url(\"data:image/svg+xml;charset=utf-8,<svg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%20512%20512'><polygon%20fill='#5B5B5B'%20points='405,136.798%20375.202,107%20256,226.202%20136.798,107%20107,136.798%20226.202,256%20107,375.202%20136.798,405%20256,285.798%20375.202,405%20405,375.202%20285.798,256'/></svg>\");\n    background-size: 22px;\n    background-repeat: no-repeat;\n    background-position: center;\n    position: absolute;\n    right: 13px;\n    top: 0; }\n    .md button.searchbar-close-icon.activated {\n      background-color: transparent; }\n  .md .searchbar-cancel {\n    display: none; }\n  .md .focused .searchbar-search-icon {\n    display: none; }\n  .md .focused button.searchbar-cancel-icon {\n    display: -webkit-inline-box;\n    display: -webkit-inline-flex;\n    display: -ms-inline-flexbox;\n    display: inline-flex; }\n  .md .toolbar ion-searchbar {\n    padding: 3px; }\n  .md .toolbar button.searchbar-cancel-icon {\n    left: 14px; }\n  .md ion-segment button,\n  .md ion-segment [button] {\n    border-width: 0;\n    -webkit-transition: 100ms all linear;\n    transition: 100ms all linear;\n    font-size: 1.2rem;\n    opacity: 0.7;\n    min-height: 4rem;\n    line-height: 4rem;\n    border-radius: 0;\n    border-bottom: 2px solid rgba(0, 0, 0, 0.1); }\n    .md ion-segment button.activated, .md ion-segment button.segment-activated,\n    .md ion-segment [button].activated,\n    .md ion-segment [button].segment-activated {\n      color: #387ef5;\n      background-color: transparent;\n      border-color: #387ef5; }\n  .md .toolbar ion-segment {\n    margin: 0 auto; }\n    .md .toolbar ion-segment ion-segment-button[button][outline].activated,\n    .md .toolbar ion-segment ion-segment-button[button][outline].segment-activated {\n      background-color: transparent;\n      opacity: 1; }\n  .md .toolbar[primary] ion-segment ion-segment-button[button] {\n    background-color: transparent; }\n    .md .toolbar[primary] ion-segment ion-segment-button[button][outline] {\n      color: white; }\n      .md .toolbar[primary] ion-segment ion-segment-button[button][outline].activated, .md .toolbar[primary] ion-segment ion-segment-button[button][outline].segment-activated {\n        background-color: transparent;\n        color: white;\n        border-color: white;\n        opacity: 1; }\n  .md .toolbar[primary] ion-segment[primary] ion-segment-button[button] {\n    background-color: transparent; }\n    .md .toolbar[primary] ion-segment[primary] ion-segment-button[button][outline] {\n      color: #387ef5; }\n      .md .toolbar[primary] ion-segment[primary] ion-segment-button[button][outline].activated, .md .toolbar[primary] ion-segment[primary] ion-segment-button[button][outline].segment-activated {\n        background-color: transparent;\n        color: #387ef5;\n        border-color: #387ef5;\n        opacity: 1; }\n  .md .toolbar[primary] ion-segment[secondary] ion-segment-button[button] {\n    background-color: transparent; }\n    .md .toolbar[primary] ion-segment[secondary] ion-segment-button[button][outline] {\n      color: #32db64; }\n      .md .toolbar[primary] ion-segment[secondary] ion-segment-button[button][outline].activated, .md .toolbar[primary] ion-segment[secondary] ion-segment-button[button][outline].segment-activated {\n        background-color: transparent;\n        color: #32db64;\n        border-color: #32db64;\n        opacity: 1; }\n  .md .toolbar[primary] ion-segment[danger] ion-segment-button[button] {\n    background-color: transparent; }\n    .md .toolbar[primary] ion-segment[danger] ion-segment-button[button][outline] {\n      color: #f53d3d; }\n      .md .toolbar[primary] ion-segment[danger] ion-segment-button[button][outline].activated, .md .toolbar[primary] ion-segment[danger] ion-segment-button[button][outline].segment-activated {\n        background-color: transparent;\n        color: #f53d3d;\n        border-color: #f53d3d;\n        opacity: 1; }\n  .md .toolbar[primary] ion-segment[light] ion-segment-button[button] {\n    background-color: transparent; }\n    .md .toolbar[primary] ion-segment[light] ion-segment-button[button][outline] {\n      color: #f4f4f4; }\n      .md .toolbar[primary] ion-segment[light] ion-segment-button[button][outline].activated, .md .toolbar[primary] ion-segment[light] ion-segment-button[button][outline].segment-activated {\n        background-color: transparent;\n        color: #f4f4f4;\n        border-color: #f4f4f4;\n        opacity: 1; }\n  .md .toolbar[primary] ion-segment[dark] ion-segment-button[button] {\n    background-color: transparent; }\n    .md .toolbar[primary] ion-segment[dark] ion-segment-button[button][outline] {\n      color: #222; }\n      .md .toolbar[primary] ion-segment[dark] ion-segment-button[button][outline].activated, .md .toolbar[primary] ion-segment[dark] ion-segment-button[button][outline].segment-activated {\n        background-color: transparent;\n        color: #222;\n        border-color: #222;\n        opacity: 1; }\n  .md ion-segment[primary] ion-segment-button[button] {\n    background-color: transparent; }\n    .md ion-segment[primary] ion-segment-button[button][outline] {\n      color: #387ef5; }\n      .md ion-segment[primary] ion-segment-button[button][outline].activated, .md ion-segment[primary] ion-segment-button[button][outline].segment-activated {\n        background-color: transparent;\n        color: #387ef5;\n        border-color: #387ef5;\n        opacity: 1; }\n  .md .toolbar[secondary] ion-segment ion-segment-button[button] {\n    background-color: transparent; }\n    .md .toolbar[secondary] ion-segment ion-segment-button[button][outline] {\n      color: white; }\n      .md .toolbar[secondary] ion-segment ion-segment-button[button][outline].activated, .md .toolbar[secondary] ion-segment ion-segment-button[button][outline].segment-activated {\n        background-color: transparent;\n        color: white;\n        border-color: white;\n        opacity: 1; }\n  .md .toolbar[secondary] ion-segment[primary] ion-segment-button[button] {\n    background-color: transparent; }\n    .md .toolbar[secondary] ion-segment[primary] ion-segment-button[button][outline] {\n      color: #387ef5; }\n      .md .toolbar[secondary] ion-segment[primary] ion-segment-button[button][outline].activated, .md .toolbar[secondary] ion-segment[primary] ion-segment-button[button][outline].segment-activated {\n        background-color: transparent;\n        color: #387ef5;\n        border-color: #387ef5;\n        opacity: 1; }\n  .md .toolbar[secondary] ion-segment[secondary] ion-segment-button[button] {\n    background-color: transparent; }\n    .md .toolbar[secondary] ion-segment[secondary] ion-segment-button[button][outline] {\n      color: #32db64; }\n      .md .toolbar[secondary] ion-segment[secondary] ion-segment-button[button][outline].activated, .md .toolbar[secondary] ion-segment[secondary] ion-segment-button[button][outline].segment-activated {\n        background-color: transparent;\n        color: #32db64;\n        border-color: #32db64;\n        opacity: 1; }\n  .md .toolbar[secondary] ion-segment[danger] ion-segment-button[button] {\n    background-color: transparent; }\n    .md .toolbar[secondary] ion-segment[danger] ion-segment-button[button][outline] {\n      color: #f53d3d; }\n      .md .toolbar[secondary] ion-segment[danger] ion-segment-button[button][outline].activated, .md .toolbar[secondary] ion-segment[danger] ion-segment-button[button][outline].segment-activated {\n        background-color: transparent;\n        color: #f53d3d;\n        border-color: #f53d3d;\n        opacity: 1; }\n  .md .toolbar[secondary] ion-segment[light] ion-segment-button[button] {\n    background-color: transparent; }\n    .md .toolbar[secondary] ion-segment[light] ion-segment-button[button][outline] {\n      color: #f4f4f4; }\n      .md .toolbar[secondary] ion-segment[light] ion-segment-button[button][outline].activated, .md .toolbar[secondary] ion-segment[light] ion-segment-button[button][outline].segment-activated {\n        background-color: transparent;\n        color: #f4f4f4;\n        border-color: #f4f4f4;\n        opacity: 1; }\n  .md .toolbar[secondary] ion-segment[dark] ion-segment-button[button] {\n    background-color: transparent; }\n    .md .toolbar[secondary] ion-segment[dark] ion-segment-button[button][outline] {\n      color: #222; }\n      .md .toolbar[secondary] ion-segment[dark] ion-segment-button[button][outline].activated, .md .toolbar[secondary] ion-segment[dark] ion-segment-button[button][outline].segment-activated {\n        background-color: transparent;\n        color: #222;\n        border-color: #222;\n        opacity: 1; }\n  .md ion-segment[secondary] ion-segment-button[button] {\n    background-color: transparent; }\n    .md ion-segment[secondary] ion-segment-button[button][outline] {\n      color: #32db64; }\n      .md ion-segment[secondary] ion-segment-button[button][outline].activated, .md ion-segment[secondary] ion-segment-button[button][outline].segment-activated {\n        background-color: transparent;\n        color: #32db64;\n        border-color: #32db64;\n        opacity: 1; }\n  .md .toolbar[danger] ion-segment ion-segment-button[button] {\n    background-color: transparent; }\n    .md .toolbar[danger] ion-segment ion-segment-button[button][outline] {\n      color: white; }\n      .md .toolbar[danger] ion-segment ion-segment-button[button][outline].activated, .md .toolbar[danger] ion-segment ion-segment-button[button][outline].segment-activated {\n        background-color: transparent;\n        color: white;\n        border-color: white;\n        opacity: 1; }\n  .md .toolbar[danger] ion-segment[primary] ion-segment-button[button] {\n    background-color: transparent; }\n    .md .toolbar[danger] ion-segment[primary] ion-segment-button[button][outline] {\n      color: #387ef5; }\n      .md .toolbar[danger] ion-segment[primary] ion-segment-button[button][outline].activated, .md .toolbar[danger] ion-segment[primary] ion-segment-button[button][outline].segment-activated {\n        background-color: transparent;\n        color: #387ef5;\n        border-color: #387ef5;\n        opacity: 1; }\n  .md .toolbar[danger] ion-segment[secondary] ion-segment-button[button] {\n    background-color: transparent; }\n    .md .toolbar[danger] ion-segment[secondary] ion-segment-button[button][outline] {\n      color: #32db64; }\n      .md .toolbar[danger] ion-segment[secondary] ion-segment-button[button][outline].activated, .md .toolbar[danger] ion-segment[secondary] ion-segment-button[button][outline].segment-activated {\n        background-color: transparent;\n        color: #32db64;\n        border-color: #32db64;\n        opacity: 1; }\n  .md .toolbar[danger] ion-segment[danger] ion-segment-button[button] {\n    background-color: transparent; }\n    .md .toolbar[danger] ion-segment[danger] ion-segment-button[button][outline] {\n      color: #f53d3d; }\n      .md .toolbar[danger] ion-segment[danger] ion-segment-button[button][outline].activated, .md .toolbar[danger] ion-segment[danger] ion-segment-button[button][outline].segment-activated {\n        background-color: transparent;\n        color: #f53d3d;\n        border-color: #f53d3d;\n        opacity: 1; }\n  .md .toolbar[danger] ion-segment[light] ion-segment-button[button] {\n    background-color: transparent; }\n    .md .toolbar[danger] ion-segment[light] ion-segment-button[button][outline] {\n      color: #f4f4f4; }\n      .md .toolbar[danger] ion-segment[light] ion-segment-button[button][outline].activated, .md .toolbar[danger] ion-segment[light] ion-segment-button[button][outline].segment-activated {\n        background-color: transparent;\n        color: #f4f4f4;\n        border-color: #f4f4f4;\n        opacity: 1; }\n  .md .toolbar[danger] ion-segment[dark] ion-segment-button[button] {\n    background-color: transparent; }\n    .md .toolbar[danger] ion-segment[dark] ion-segment-button[button][outline] {\n      color: #222; }\n      .md .toolbar[danger] ion-segment[dark] ion-segment-button[button][outline].activated, .md .toolbar[danger] ion-segment[dark] ion-segment-button[button][outline].segment-activated {\n        background-color: transparent;\n        color: #222;\n        border-color: #222;\n        opacity: 1; }\n  .md ion-segment[danger] ion-segment-button[button] {\n    background-color: transparent; }\n    .md ion-segment[danger] ion-segment-button[button][outline] {\n      color: #f53d3d; }\n      .md ion-segment[danger] ion-segment-button[button][outline].activated, .md ion-segment[danger] ion-segment-button[button][outline].segment-activated {\n        background-color: transparent;\n        color: #f53d3d;\n        border-color: #f53d3d;\n        opacity: 1; }\n  .md .toolbar[light] ion-segment ion-segment-button[button] {\n    background-color: transparent; }\n    .md .toolbar[light] ion-segment ion-segment-button[button][outline] {\n      color: black; }\n      .md .toolbar[light] ion-segment ion-segment-button[button][outline].activated, .md .toolbar[light] ion-segment ion-segment-button[button][outline].segment-activated {\n        background-color: transparent;\n        color: black;\n        border-color: black;\n        opacity: 1; }\n  .md .toolbar[light] ion-segment[primary] ion-segment-button[button] {\n    background-color: transparent; }\n    .md .toolbar[light] ion-segment[primary] ion-segment-button[button][outline] {\n      color: #387ef5; }\n      .md .toolbar[light] ion-segment[primary] ion-segment-button[button][outline].activated, .md .toolbar[light] ion-segment[primary] ion-segment-button[button][outline].segment-activated {\n        background-color: transparent;\n        color: #387ef5;\n        border-color: #387ef5;\n        opacity: 1; }\n  .md .toolbar[light] ion-segment[secondary] ion-segment-button[button] {\n    background-color: transparent; }\n    .md .toolbar[light] ion-segment[secondary] ion-segment-button[button][outline] {\n      color: #32db64; }\n      .md .toolbar[light] ion-segment[secondary] ion-segment-button[button][outline].activated, .md .toolbar[light] ion-segment[secondary] ion-segment-button[button][outline].segment-activated {\n        background-color: transparent;\n        color: #32db64;\n        border-color: #32db64;\n        opacity: 1; }\n  .md .toolbar[light] ion-segment[danger] ion-segment-button[button] {\n    background-color: transparent; }\n    .md .toolbar[light] ion-segment[danger] ion-segment-button[button][outline] {\n      color: #f53d3d; }\n      .md .toolbar[light] ion-segment[danger] ion-segment-button[button][outline].activated, .md .toolbar[light] ion-segment[danger] ion-segment-button[button][outline].segment-activated {\n        background-color: transparent;\n        color: #f53d3d;\n        border-color: #f53d3d;\n        opacity: 1; }\n  .md .toolbar[light] ion-segment[light] ion-segment-button[button] {\n    background-color: transparent; }\n    .md .toolbar[light] ion-segment[light] ion-segment-button[button][outline] {\n      color: #f4f4f4; }\n      .md .toolbar[light] ion-segment[light] ion-segment-button[button][outline].activated, .md .toolbar[light] ion-segment[light] ion-segment-button[button][outline].segment-activated {\n        background-color: transparent;\n        color: #f4f4f4;\n        border-color: #f4f4f4;\n        opacity: 1; }\n  .md .toolbar[light] ion-segment[dark] ion-segment-button[button] {\n    background-color: transparent; }\n    .md .toolbar[light] ion-segment[dark] ion-segment-button[button][outline] {\n      color: #222; }\n      .md .toolbar[light] ion-segment[dark] ion-segment-button[button][outline].activated, .md .toolbar[light] ion-segment[dark] ion-segment-button[button][outline].segment-activated {\n        background-color: transparent;\n        color: #222;\n        border-color: #222;\n        opacity: 1; }\n  .md ion-segment[light] ion-segment-button[button] {\n    background-color: transparent; }\n    .md ion-segment[light] ion-segment-button[button][outline] {\n      color: #f4f4f4; }\n      .md ion-segment[light] ion-segment-button[button][outline].activated, .md ion-segment[light] ion-segment-button[button][outline].segment-activated {\n        background-color: transparent;\n        color: #f4f4f4;\n        border-color: #f4f4f4;\n        opacity: 1; }\n  .md .toolbar[dark] ion-segment ion-segment-button[button] {\n    background-color: transparent; }\n    .md .toolbar[dark] ion-segment ion-segment-button[button][outline] {\n      color: white; }\n      .md .toolbar[dark] ion-segment ion-segment-button[button][outline].activated, .md .toolbar[dark] ion-segment ion-segment-button[button][outline].segment-activated {\n        background-color: transparent;\n        color: white;\n        border-color: white;\n        opacity: 1; }\n  .md .toolbar[dark] ion-segment[primary] ion-segment-button[button] {\n    background-color: transparent; }\n    .md .toolbar[dark] ion-segment[primary] ion-segment-button[button][outline] {\n      color: #387ef5; }\n      .md .toolbar[dark] ion-segment[primary] ion-segment-button[button][outline].activated, .md .toolbar[dark] ion-segment[primary] ion-segment-button[button][outline].segment-activated {\n        background-color: transparent;\n        color: #387ef5;\n        border-color: #387ef5;\n        opacity: 1; }\n  .md .toolbar[dark] ion-segment[secondary] ion-segment-button[button] {\n    background-color: transparent; }\n    .md .toolbar[dark] ion-segment[secondary] ion-segment-button[button][outline] {\n      color: #32db64; }\n      .md .toolbar[dark] ion-segment[secondary] ion-segment-button[button][outline].activated, .md .toolbar[dark] ion-segment[secondary] ion-segment-button[button][outline].segment-activated {\n        background-color: transparent;\n        color: #32db64;\n        border-color: #32db64;\n        opacity: 1; }\n  .md .toolbar[dark] ion-segment[danger] ion-segment-button[button] {\n    background-color: transparent; }\n    .md .toolbar[dark] ion-segment[danger] ion-segment-button[button][outline] {\n      color: #f53d3d; }\n      .md .toolbar[dark] ion-segment[danger] ion-segment-button[button][outline].activated, .md .toolbar[dark] ion-segment[danger] ion-segment-button[button][outline].segment-activated {\n        background-color: transparent;\n        color: #f53d3d;\n        border-color: #f53d3d;\n        opacity: 1; }\n  .md .toolbar[dark] ion-segment[light] ion-segment-button[button] {\n    background-color: transparent; }\n    .md .toolbar[dark] ion-segment[light] ion-segment-button[button][outline] {\n      color: #f4f4f4; }\n      .md .toolbar[dark] ion-segment[light] ion-segment-button[button][outline].activated, .md .toolbar[dark] ion-segment[light] ion-segment-button[button][outline].segment-activated {\n        background-color: transparent;\n        color: #f4f4f4;\n        border-color: #f4f4f4;\n        opacity: 1; }\n  .md .toolbar[dark] ion-segment[dark] ion-segment-button[button] {\n    background-color: transparent; }\n    .md .toolbar[dark] ion-segment[dark] ion-segment-button[button][outline] {\n      color: #222; }\n      .md .toolbar[dark] ion-segment[dark] ion-segment-button[button][outline].activated, .md .toolbar[dark] ion-segment[dark] ion-segment-button[button][outline].segment-activated {\n        background-color: transparent;\n        color: #222;\n        border-color: #222;\n        opacity: 1; }\n  .md ion-segment[dark] ion-segment-button[button] {\n    background-color: transparent; }\n    .md ion-segment[dark] ion-segment-button[button][outline] {\n      color: #222; }\n      .md ion-segment[dark] ion-segment-button[button][outline].activated, .md ion-segment[dark] ion-segment-button[button][outline].segment-activated {\n        background-color: transparent;\n        color: #222;\n        border-color: #222;\n        opacity: 1; }\n  .md ion-switch media-switch {\n    padding: 12px 8px 12px 16px; }\n  .md ion-switch switch-icon {\n    position: relative;\n    display: block;\n    width: 36px;\n    height: 14px;\n    pointer-events: none;\n    border-radius: 14px;\n    background-color: #dedede;\n    will-change: background-color;\n    -webkit-transition: background-color 300ms;\n    transition: background-color 300ms; }\n  .md ion-switch[aria-checked=true] switch-icon {\n    background-color: #b1cdfb; }\n  .md ion-switch switch-icon:after {\n    content: '';\n    position: absolute;\n    top: -3px;\n    left: 0;\n    width: 20px;\n    height: 20px;\n    border-radius: 50%;\n    box-shadow: 0 2px 2px 0 rgba(0, 0, 0, 0.14), 0 3px 1px -2px rgba(0, 0, 0, 0.2), 0 1px 5px 0 rgba(0, 0, 0, 0.12);\n    background-color: #fff;\n    will-change: transform, background-color;\n    -webkit-transition-property: -webkit-transform, background-color;\n    transition-property: transform, background-color;\n    -webkit-transition-duration: 300ms;\n    transition-duration: 300ms; }\n  .md ion-switch[aria-checked=true] switch-icon:after {\n    background-color: #387ef5;\n    -webkit-transform: translate3d(16px, 0, 0);\n    transform: translate3d(16px, 0, 0); }\n  .md ion-switch[secondary][aria-checked=true] switch-icon {\n    background-color: #9eeeb6; }\n  .md ion-switch[secondary][aria-checked=true] switch-icon:after {\n    background-color: #32db64; }\n  .md ion-switch[danger][aria-checked=true] switch-icon {\n    background-color: #fbb6b6; }\n  .md ion-switch[danger][aria-checked=true] switch-icon:after {\n    background-color: #f53d3d; }\n  .md ion-switch[light][aria-checked=true] switch-icon {\n    background-color: white; }\n  .md ion-switch[light][aria-checked=true] switch-icon:after {\n    background-color: #f4f4f4; }\n  .md ion-switch[dark][aria-checked=true] switch-icon {\n    background-color: #626262; }\n  .md ion-switch[dark][aria-checked=true] switch-icon:after {\n    background-color: #222; }\n  .md .tab-button {\n    padding: 12px 10px 5px 10px;\n    min-height: 4.8rem;\n    font-size: 1.4rem;\n    font-weight: 500;\n    opacity: 0.7;\n    box-shadow: none;\n    border-radius: 0;\n    border-bottom: 2px solid transparent; }\n    .md .tab-button[aria-selected=true] {\n      opacity: 1.0; }\n  .md .tab-button-text {\n    margin-top: 5px;\n    margin-bottom: 5px;\n    text-transform: uppercase; }\n  .md .tab-button-icon {\n    font-size: 2.4rem;\n    min-width: 7.4rem; }\n  .md [tabbar-icons=bottom] .tab-button {\n    padding-top: 8px;\n    padding-bottom: 8px; }\n  .md [tabbar-icons=right] .tab-button,\n  .md [tabbar-icons=left] .tab-button {\n    padding-bottom: 10px; }\n    .md [tabbar-icons=right] .tab-button icon,\n    .md [tabbar-icons=left] .tab-button icon {\n      min-width: 24px; }\n  .md .tab-button.icon-only,\n  .md .tab-button.has-title-only {\n    padding: 6px 10px 6px 10px; }\n  .md tab-highlight {\n    position: absolute;\n    display: block;\n    height: 2px;\n    width: 1px;\n    bottom: 0;\n    left: 0;\n    background: #387ef5;\n    -webkit-transform-origin: 0 0;\n    transform-origin: 0 0;\n    -webkit-transform: translateZ(0);\n    transform: translateZ(0); }\n    .md tab-highlight.animate {\n      -webkit-transition-duration: 300ms;\n      transition-duration: 300ms; }\n  .md [tabbar-placement=bottom] tab-highlight {\n    top: 0; }\n  .md tabbar[primary] tab-highlight {\n    background: white; }\n  .md tabbar[secondary] tab-highlight {\n    background: white; }\n  .md tabbar[danger] tab-highlight {\n    background: white; }\n  .md tabbar[light] tab-highlight {\n    background: black; }\n  .md tabbar[dark] tab-highlight {\n    background: white; }\n  .md md-ripple {\n    position: absolute;\n    z-index: 0;\n    display: block;\n    border-radius: 50%;\n    background: rgba(0, 0, 0, 0.1);\n    overflow: hidden;\n    pointer-events: none;\n    -webkit-transform: scale(0.001) translateZ(0);\n    transform: scale(0.001) translateZ(0); }\n\n/**\n  Roboto Font\n  Google\n  Apache License, version 2.0\n  http://www.apache.org/licenses/LICENSE-2.0.html\n */\n@font-face {\n  font-family: 'Roboto';\n  font-style: normal;\n  font-weight: 300;\n  src: local(\"Roboto Light\"), local(\"Roboto-Light\"), url(\"../fonts/roboto-light.ttf\") format(\"truetype\"), url(\"../fonts/roboto-light.woff\") format(\"woff\"); }\n\n@font-face {\n  font-family: 'Roboto';\n  font-style: normal;\n  font-weight: 400;\n  src: local(\"Roboto\"), local(\"Roboto-Regular\"), url(\"../fonts/roboto-regular.ttf\") format(\"truetype\"), url(\"../fonts/roboto-regular.woff\") format(\"woff\"); }\n\n@font-face {\n  font-family: 'Roboto';\n  font-style: normal;\n  font-weight: 500;\n  src: local(\"Roboto Medium\"), local(\"Roboto-Medium\"), url(\"../fonts/roboto-medium.ttf\") format(\"truetype\"), url(\"../fonts/roboto-medium.woff\") format(\"woff\"); }\n\n@font-face {\n  font-family: 'Roboto';\n  font-style: normal;\n  font-weight: 700;\n  src: local(\"Roboto Bold\"), local(\"Roboto-Bold\"), url(\"../fonts/roboto-bold.ttf\") format(\"truetype\"), url(\"../fonts/roboto-bold.woff\") format(\"woff\"); }\n\n.md {\n  font-family: \"Roboto\", \"Helvetica Neue\", sans-serif; }\n"
  },
  {
    "path": "content/css/ionicons.css",
    "content": "/*!\n  Ionicons, v1.4.0\n  Created by Ben Sperry for the Ionic Framework, https://ionicons.com/\n  https://twitter.com/benjsperry  https://twitter.com/ionicframework\n  MIT License: https://github.com/ionic-team/ionicons\n*/\n@font-face {\n  font-family: \"Ionicons\";\n  src: url(\"../fonts/ionicons.eot?v=1.4.0\");\n  src: url(\"../fonts/ionicons.eot?v=1.4.0#iefix\") format(\"embedded-opentype\"), url(\"../fonts/ionicons.ttf?v=1.4.0\") format(\"truetype\"), url(\"../fonts/ionicons.woff?v=1.4.0\") format(\"woff\"), url(\"../fonts/ionicons.svg?v=1.4.0#Ionicons\") format(\"svg\");\n  font-weight: normal;\n  font-style: normal; }\n\n.ion, .ion-loading-a,\n.ion-loading-b,\n.ion-loading-c,\n.ion-loading-d,\n.ion-looping,\n.ion-refreshing,\n.ion-ios7-reloading, .ionicons,\n.ion-alert,\n.ion-alert-circled,\n.ion-android-add,\n.ion-android-add-contact,\n.ion-android-alarm,\n.ion-android-archive,\n.ion-android-arrow-back,\n.ion-android-arrow-down-left,\n.ion-android-arrow-down-right,\n.ion-android-arrow-up-left,\n.ion-android-arrow-up-right,\n.ion-android-battery,\n.ion-android-book,\n.ion-android-calendar,\n.ion-android-call,\n.ion-android-camera,\n.ion-android-chat,\n.ion-android-checkmark,\n.ion-android-clock,\n.ion-android-close,\n.ion-android-contact,\n.ion-android-contacts,\n.ion-android-data,\n.ion-android-developer,\n.ion-android-display,\n.ion-android-download,\n.ion-android-dropdown,\n.ion-android-earth,\n.ion-android-folder,\n.ion-android-forums,\n.ion-android-friends,\n.ion-android-hand,\n.ion-android-image,\n.ion-android-inbox,\n.ion-android-information,\n.ion-android-keypad,\n.ion-android-lightbulb,\n.ion-android-locate,\n.ion-android-location,\n.ion-android-mail,\n.ion-android-microphone,\n.ion-android-mixer,\n.ion-android-more,\n.ion-android-note,\n.ion-android-playstore,\n.ion-android-printer,\n.ion-android-promotion,\n.ion-android-reminder,\n.ion-android-remove,\n.ion-android-search,\n.ion-android-send,\n.ion-android-settings,\n.ion-android-share,\n.ion-android-social,\n.ion-android-social-user,\n.ion-android-sort,\n.ion-android-star,\n.ion-android-stopwatch,\n.ion-android-storage,\n.ion-android-system-back,\n.ion-android-system-home,\n.ion-android-system-windows,\n.ion-android-timer,\n.ion-android-trash,\n.ion-android-volume,\n.ion-android-wifi,\n.ion-archive,\n.ion-arrow-down-a,\n.ion-arrow-down-b,\n.ion-arrow-down-c,\n.ion-arrow-expand,\n.ion-arrow-graph-down-left,\n.ion-arrow-graph-down-right,\n.ion-arrow-graph-up-left,\n.ion-arrow-graph-up-right,\n.ion-arrow-left-a,\n.ion-arrow-left-b,\n.ion-arrow-left-c,\n.ion-arrow-move,\n.ion-arrow-resize,\n.ion-arrow-return-left,\n.ion-arrow-return-right,\n.ion-arrow-right-a,\n.ion-arrow-right-b,\n.ion-arrow-right-c,\n.ion-arrow-shrink,\n.ion-arrow-swap,\n.ion-arrow-up-a,\n.ion-arrow-up-b,\n.ion-arrow-up-c,\n.ion-at,\n.ion-bag,\n.ion-battery-charging,\n.ion-battery-empty,\n.ion-battery-full,\n.ion-battery-half,\n.ion-battery-low,\n.ion-beaker,\n.ion-beer,\n.ion-bluetooth,\n.ion-bookmark,\n.ion-briefcase,\n.ion-bug,\n.ion-calculator,\n.ion-calendar,\n.ion-camera,\n.ion-card,\n.ion-chatbox,\n.ion-chatbox-working,\n.ion-chatboxes,\n.ion-chatbubble,\n.ion-chatbubble-working,\n.ion-chatbubbles,\n.ion-checkmark,\n.ion-checkmark-circled,\n.ion-checkmark-round,\n.ion-chevron-down,\n.ion-chevron-left,\n.ion-chevron-right,\n.ion-chevron-up,\n.ion-clipboard,\n.ion-clock,\n.ion-close,\n.ion-close-circled,\n.ion-close-round,\n.ion-cloud,\n.ion-code,\n.ion-code-download,\n.ion-code-working,\n.ion-coffee,\n.ion-compass,\n.ion-compose,\n.ion-connection-bars,\n.ion-contrast,\n.ion-disc,\n.ion-document,\n.ion-document-text,\n.ion-drag,\n.ion-earth,\n.ion-edit,\n.ion-egg,\n.ion-eject,\n.ion-email,\n.ion-eye,\n.ion-eye-disabled,\n.ion-female,\n.ion-filing,\n.ion-film-marker,\n.ion-flag,\n.ion-flash,\n.ion-flash-off,\n.ion-flask,\n.ion-folder,\n.ion-fork,\n.ion-fork-repo,\n.ion-forward,\n.ion-game-controller-a,\n.ion-game-controller-b,\n.ion-gear-a,\n.ion-gear-b,\n.ion-grid,\n.ion-hammer,\n.ion-headphone,\n.ion-heart,\n.ion-help,\n.ion-help-buoy,\n.ion-help-circled,\n.ion-home,\n.ion-icecream,\n.ion-icon-social-google-plus,\n.ion-icon-social-google-plus-outline,\n.ion-image,\n.ion-images,\n.ion-information,\n.ion-information-circled,\n.ion-ionic,\n.ion-ios7-alarm,\n.ion-ios7-alarm-outline,\n.ion-ios7-albums,\n.ion-ios7-albums-outline,\n.ion-ios7-arrow-back,\n.ion-ios7-arrow-down,\n.ion-ios7-arrow-forward,\n.ion-ios7-arrow-left,\n.ion-ios7-arrow-right,\n.ion-ios7-arrow-thin-down,\n.ion-ios7-arrow-thin-left,\n.ion-ios7-arrow-thin-right,\n.ion-ios7-arrow-thin-up,\n.ion-ios7-arrow-up,\n.ion-ios7-at,\n.ion-ios7-at-outline,\n.ion-ios7-bell,\n.ion-ios7-bell-outline,\n.ion-ios7-bolt,\n.ion-ios7-bolt-outline,\n.ion-ios7-bookmarks,\n.ion-ios7-bookmarks-outline,\n.ion-ios7-box,\n.ion-ios7-box-outline,\n.ion-ios7-briefcase,\n.ion-ios7-briefcase-outline,\n.ion-ios7-browsers,\n.ion-ios7-browsers-outline,\n.ion-ios7-calculator,\n.ion-ios7-calculator-outline,\n.ion-ios7-calendar,\n.ion-ios7-calendar-outline,\n.ion-ios7-camera,\n.ion-ios7-camera-outline,\n.ion-ios7-cart,\n.ion-ios7-cart-outline,\n.ion-ios7-chatboxes,\n.ion-ios7-chatboxes-outline,\n.ion-ios7-chatbubble,\n.ion-ios7-chatbubble-outline,\n.ion-ios7-checkmark,\n.ion-ios7-checkmark-empty,\n.ion-ios7-checkmark-outline,\n.ion-ios7-circle-filled,\n.ion-ios7-circle-outline,\n.ion-ios7-clock,\n.ion-ios7-clock-outline,\n.ion-ios7-close,\n.ion-ios7-close-empty,\n.ion-ios7-close-outline,\n.ion-ios7-cloud,\n.ion-ios7-cloud-download,\n.ion-ios7-cloud-download-outline,\n.ion-ios7-cloud-outline,\n.ion-ios7-cloud-upload,\n.ion-ios7-cloud-upload-outline,\n.ion-ios7-cloudy,\n.ion-ios7-cloudy-night,\n.ion-ios7-cloudy-night-outline,\n.ion-ios7-cloudy-outline,\n.ion-ios7-cog,\n.ion-ios7-cog-outline,\n.ion-ios7-compose,\n.ion-ios7-compose-outline,\n.ion-ios7-contact,\n.ion-ios7-contact-outline,\n.ion-ios7-copy,\n.ion-ios7-copy-outline,\n.ion-ios7-download,\n.ion-ios7-download-outline,\n.ion-ios7-drag,\n.ion-ios7-email,\n.ion-ios7-email-outline,\n.ion-ios7-eye,\n.ion-ios7-eye-outline,\n.ion-ios7-fastforward,\n.ion-ios7-fastforward-outline,\n.ion-ios7-filing,\n.ion-ios7-filing-outline,\n.ion-ios7-film,\n.ion-ios7-film-outline,\n.ion-ios7-flag,\n.ion-ios7-flag-outline,\n.ion-ios7-folder,\n.ion-ios7-folder-outline,\n.ion-ios7-gear,\n.ion-ios7-gear-outline,\n.ion-ios7-glasses,\n.ion-ios7-glasses-outline,\n.ion-ios7-heart,\n.ion-ios7-heart-outline,\n.ion-ios7-help,\n.ion-ios7-help-empty,\n.ion-ios7-help-outline,\n.ion-ios7-infinite,\n.ion-ios7-infinite-outline,\n.ion-ios7-information,\n.ion-ios7-information-empty,\n.ion-ios7-information-outline,\n.ion-ios7-ionic-outline,\n.ion-ios7-keypad,\n.ion-ios7-keypad-outline,\n.ion-ios7-lightbulb,\n.ion-ios7-lightbulb-outline,\n.ion-ios7-location,\n.ion-ios7-location-outline,\n.ion-ios7-locked,\n.ion-ios7-locked-outline,\n.ion-ios7-medkit,\n.ion-ios7-medkit-outline,\n.ion-ios7-mic,\n.ion-ios7-mic-off,\n.ion-ios7-mic-outline,\n.ion-ios7-minus,\n.ion-ios7-minus-empty,\n.ion-ios7-minus-outline,\n.ion-ios7-monitor,\n.ion-ios7-monitor-outline,\n.ion-ios7-moon,\n.ion-ios7-moon-outline,\n.ion-ios7-more,\n.ion-ios7-more-outline,\n.ion-ios7-musical-note,\n.ion-ios7-musical-notes,\n.ion-ios7-navigate,\n.ion-ios7-navigate-outline,\n.ion-ios7-paperplane,\n.ion-ios7-paperplane-outline,\n.ion-ios7-partlysunny,\n.ion-ios7-partlysunny-outline,\n.ion-ios7-pause,\n.ion-ios7-pause-outline,\n.ion-ios7-people,\n.ion-ios7-people-outline,\n.ion-ios7-person,\n.ion-ios7-person-outline,\n.ion-ios7-personadd,\n.ion-ios7-personadd-outline,\n.ion-ios7-photos,\n.ion-ios7-photos-outline,\n.ion-ios7-pie,\n.ion-ios7-pie-outline,\n.ion-ios7-play,\n.ion-ios7-play-outline,\n.ion-ios7-plus,\n.ion-ios7-plus-empty,\n.ion-ios7-plus-outline,\n.ion-ios7-pricetag,\n.ion-ios7-pricetag-outline,\n.ion-ios7-printer,\n.ion-ios7-printer-outline,\n.ion-ios7-rainy,\n.ion-ios7-rainy-outline,\n.ion-ios7-recording,\n.ion-ios7-recording-outline,\n.ion-ios7-redo,\n.ion-ios7-redo-outline,\n.ion-ios7-refresh,\n.ion-ios7-refresh-empty,\n.ion-ios7-refresh-outline,\n.ion-ios7-reload,\n.ion-ios7-rewind,\n.ion-ios7-rewind-outline,\n.ion-ios7-search,\n.ion-ios7-search-strong,\n.ion-ios7-skipbackward,\n.ion-ios7-skipbackward-outline,\n.ion-ios7-skipforward,\n.ion-ios7-skipforward-outline,\n.ion-ios7-snowy,\n.ion-ios7-speedometer,\n.ion-ios7-speedometer-outline,\n.ion-ios7-star,\n.ion-ios7-star-outline,\n.ion-ios7-stopwatch,\n.ion-ios7-stopwatch-outline,\n.ion-ios7-sunny,\n.ion-ios7-sunny-outline,\n.ion-ios7-telephone,\n.ion-ios7-telephone-outline,\n.ion-ios7-thunderstorm,\n.ion-ios7-thunderstorm-outline,\n.ion-ios7-time,\n.ion-ios7-time-outline,\n.ion-ios7-timer,\n.ion-ios7-timer-outline,\n.ion-ios7-trash,\n.ion-ios7-trash-outline,\n.ion-ios7-undo,\n.ion-ios7-undo-outline,\n.ion-ios7-unlocked,\n.ion-ios7-unlocked-outline,\n.ion-ios7-upload,\n.ion-ios7-upload-outline,\n.ion-ios7-videocam,\n.ion-ios7-videocam-outline,\n.ion-ios7-volume-high,\n.ion-ios7-volume-low,\n.ion-ios7-wineglass,\n.ion-ios7-wineglass-outline,\n.ion-ios7-world,\n.ion-ios7-world-outline,\n.ion-ipad,\n.ion-iphone,\n.ion-ipod,\n.ion-jet,\n.ion-key,\n.ion-knife,\n.ion-laptop,\n.ion-leaf,\n.ion-levels,\n.ion-lightbulb,\n.ion-link,\n.ion-load-a,\n.ion-load-b,\n.ion-load-c,\n.ion-load-d,\n.ion-location,\n.ion-locked,\n.ion-log-in,\n.ion-log-out,\n.ion-loop,\n.ion-magnet,\n.ion-male,\n.ion-man,\n.ion-map,\n.ion-medkit,\n.ion-mic-a,\n.ion-mic-b,\n.ion-mic-c,\n.ion-minus,\n.ion-minus-circled,\n.ion-minus-round,\n.ion-model-s,\n.ion-monitor,\n.ion-more,\n.ion-music-note,\n.ion-navicon,\n.ion-navicon-round,\n.ion-navigate,\n.ion-no-smoking,\n.ion-nuclear,\n.ion-paper-airplane,\n.ion-paperclip,\n.ion-pause,\n.ion-person,\n.ion-person-add,\n.ion-person-stalker,\n.ion-pie-graph,\n.ion-pin,\n.ion-pinpoint,\n.ion-pizza,\n.ion-plane,\n.ion-play,\n.ion-playstation,\n.ion-plus,\n.ion-plus-circled,\n.ion-plus-round,\n.ion-pound,\n.ion-power,\n.ion-pricetag,\n.ion-pricetags,\n.ion-printer,\n.ion-radio-waves,\n.ion-record,\n.ion-refresh,\n.ion-reply,\n.ion-reply-all,\n.ion-search,\n.ion-settings,\n.ion-share,\n.ion-shuffle,\n.ion-skip-backward,\n.ion-skip-forward,\n.ion-social-android,\n.ion-social-android-outline,\n.ion-social-apple,\n.ion-social-apple-outline,\n.ion-social-bitcoin,\n.ion-social-bitcoin-outline,\n.ion-social-buffer,\n.ion-social-buffer-outline,\n.ion-social-designernews,\n.ion-social-designernews-outline,\n.ion-social-dribbble,\n.ion-social-dribbble-outline,\n.ion-social-dropbox,\n.ion-social-dropbox-outline,\n.ion-social-facebook,\n.ion-social-facebook-outline,\n.ion-social-freebsd-devil,\n.ion-social-github,\n.ion-social-github-outline,\n.ion-social-googleplus,\n.ion-social-googleplus-outline,\n.ion-social-hackernews,\n.ion-social-hackernews-outline,\n.ion-social-linkedin,\n.ion-social-linkedin-outline,\n.ion-social-pinterest,\n.ion-social-pinterest-outline,\n.ion-social-reddit,\n.ion-social-reddit-outline,\n.ion-social-rss,\n.ion-social-rss-outline,\n.ion-social-skype,\n.ion-social-skype-outline,\n.ion-social-tumblr,\n.ion-social-tumblr-outline,\n.ion-social-tux,\n.ion-social-twitter,\n.ion-social-twitter-outline,\n.ion-social-vimeo,\n.ion-social-vimeo-outline,\n.ion-social-windows,\n.ion-social-windows-outline,\n.ion-social-wordpress,\n.ion-social-wordpress-outline,\n.ion-social-yahoo,\n.ion-social-yahoo-outline,\n.ion-social-youtube,\n.ion-social-youtube-outline,\n.ion-speakerphone,\n.ion-speedometer,\n.ion-spoon,\n.ion-star,\n.ion-stats-bars,\n.ion-steam,\n.ion-stop,\n.ion-thermometer,\n.ion-thumbsdown,\n.ion-thumbsup,\n.ion-trash-a,\n.ion-trash-b,\n.ion-umbrella,\n.ion-unlocked,\n.ion-upload,\n.ion-usb,\n.ion-videocamera,\n.ion-volume-high,\n.ion-volume-low,\n.ion-volume-medium,\n.ion-volume-mute,\n.ion-waterdrop,\n.ion-wifi,\n.ion-wineglass,\n.ion-woman,\n.ion-wrench,\n.ion-xbox {\n  display: inline-block;\n  font-family: \"Ionicons\";\n  speak: none;\n  font-style: normal;\n  font-weight: normal;\n  font-variant: normal;\n  text-transform: none;\n  text-rendering: auto;\n  line-height: 1;\n  -webkit-font-smoothing: antialiased;\n  -moz-osx-font-smoothing: grayscale; }\n\n.ion-spin, .ion-loading-a,\n.ion-loading-b,\n.ion-loading-c,\n.ion-loading-d,\n.ion-looping,\n.ion-refreshing,\n.ion-ios7-reloading {\n  -webkit-animation: spin 1s infinite linear;\n  -moz-animation: spin 1s infinite linear;\n  -o-animation: spin 1s infinite linear;\n  animation: spin 1s infinite linear; }\n\n@-moz-keyframes spin {\n  0% {\n    -moz-transform: rotate(0deg); }\n\n  100% {\n    -moz-transform: rotate(359deg); } }\n\n@-webkit-keyframes spin {\n  0% {\n    -webkit-transform: rotate(0deg); }\n\n  100% {\n    -webkit-transform: rotate(359deg); } }\n\n@-o-keyframes spin {\n  0% {\n    -o-transform: rotate(0deg); }\n\n  100% {\n    -o-transform: rotate(359deg); } }\n\n@-ms-keyframes spin {\n  0% {\n    -ms-transform: rotate(0deg); }\n\n  100% {\n    -ms-transform: rotate(359deg); } }\n\n@keyframes spin {\n  0% {\n    transform: rotate(0deg); }\n\n  100% {\n    transform: rotate(359deg); } }\n\n.ion-loading-a {\n  -webkit-animation-timing-function: steps(8, start);\n  -moz-animation-timing-function: steps(8, start);\n  animation-timing-function: steps(8, start); }\n\n.ion-alert:before {\n  content: \"\\f101\"; }\n\n.ion-alert-circled:before {\n  content: \"\\f100\"; }\n\n.ion-android-add:before {\n  content: \"\\f2c7\"; }\n\n.ion-android-add-contact:before {\n  content: \"\\f2c6\"; }\n\n.ion-android-alarm:before {\n  content: \"\\f2c8\"; }\n\n.ion-android-archive:before {\n  content: \"\\f2c9\"; }\n\n.ion-android-arrow-back:before {\n  content: \"\\f2ca\"; }\n\n.ion-android-arrow-down-left:before {\n  content: \"\\f2cb\"; }\n\n.ion-android-arrow-down-right:before {\n  content: \"\\f2cc\"; }\n\n.ion-android-arrow-up-left:before {\n  content: \"\\f2cd\"; }\n\n.ion-android-arrow-up-right:before {\n  content: \"\\f2ce\"; }\n\n.ion-android-battery:before {\n  content: \"\\f2cf\"; }\n\n.ion-android-book:before {\n  content: \"\\f2d0\"; }\n\n.ion-android-calendar:before {\n  content: \"\\f2d1\"; }\n\n.ion-android-call:before {\n  content: \"\\f2d2\"; }\n\n.ion-android-camera:before {\n  content: \"\\f2d3\"; }\n\n.ion-android-chat:before {\n  content: \"\\f2d4\"; }\n\n.ion-android-checkmark:before {\n  content: \"\\f2d5\"; }\n\n.ion-android-clock:before {\n  content: \"\\f2d6\"; }\n\n.ion-android-close:before {\n  content: \"\\f2d7\"; }\n\n.ion-android-contact:before {\n  content: \"\\f2d8\"; }\n\n.ion-android-contacts:before {\n  content: \"\\f2d9\"; }\n\n.ion-android-data:before {\n  content: \"\\f2da\"; }\n\n.ion-android-developer:before {\n  content: \"\\f2db\"; }\n\n.ion-android-display:before {\n  content: \"\\f2dc\"; }\n\n.ion-android-download:before {\n  content: \"\\f2dd\"; }\n\n.ion-android-dropdown:before {\n  content: \"\\f2de\"; }\n\n.ion-android-earth:before {\n  content: \"\\f2df\"; }\n\n.ion-android-folder:before {\n  content: \"\\f2e0\"; }\n\n.ion-android-forums:before {\n  content: \"\\f2e1\"; }\n\n.ion-android-friends:before {\n  content: \"\\f2e2\"; }\n\n.ion-android-hand:before {\n  content: \"\\f2e3\"; }\n\n.ion-android-image:before {\n  content: \"\\f2e4\"; }\n\n.ion-android-inbox:before {\n  content: \"\\f2e5\"; }\n\n.ion-android-information:before {\n  content: \"\\f2e6\"; }\n\n.ion-android-keypad:before {\n  content: \"\\f2e7\"; }\n\n.ion-android-lightbulb:before {\n  content: \"\\f2e8\"; }\n\n.ion-android-locate:before {\n  content: \"\\f2e9\"; }\n\n.ion-android-location:before {\n  content: \"\\f2ea\"; }\n\n.ion-android-mail:before {\n  content: \"\\f2eb\"; }\n\n.ion-android-microphone:before {\n  content: \"\\f2ec\"; }\n\n.ion-android-mixer:before {\n  content: \"\\f2ed\"; }\n\n.ion-android-more:before {\n  content: \"\\f2ee\"; }\n\n.ion-android-note:before {\n  content: \"\\f2ef\"; }\n\n.ion-android-playstore:before {\n  content: \"\\f2f0\"; }\n\n.ion-android-printer:before {\n  content: \"\\f2f1\"; }\n\n.ion-android-promotion:before {\n  content: \"\\f2f2\"; }\n\n.ion-android-reminder:before {\n  content: \"\\f2f3\"; }\n\n.ion-android-remove:before {\n  content: \"\\f2f4\"; }\n\n.ion-android-search:before {\n  content: \"\\f2f5\"; }\n\n.ion-android-send:before {\n  content: \"\\f2f6\"; }\n\n.ion-android-settings:before {\n  content: \"\\f2f7\"; }\n\n.ion-android-share:before {\n  content: \"\\f2f8\"; }\n\n.ion-android-social:before {\n  content: \"\\f2fa\"; }\n\n.ion-android-social-user:before {\n  content: \"\\f2f9\"; }\n\n.ion-android-sort:before {\n  content: \"\\f2fb\"; }\n\n.ion-android-star:before {\n  content: \"\\f2fc\"; }\n\n.ion-android-stopwatch:before {\n  content: \"\\f2fd\"; }\n\n.ion-android-storage:before {\n  content: \"\\f2fe\"; }\n\n.ion-android-system-back:before {\n  content: \"\\f2ff\"; }\n\n.ion-android-system-home:before {\n  content: \"\\f300\"; }\n\n.ion-android-system-windows:before {\n  content: \"\\f301\"; }\n\n.ion-android-timer:before {\n  content: \"\\f302\"; }\n\n.ion-android-trash:before {\n  content: \"\\f303\"; }\n\n.ion-android-volume:before {\n  content: \"\\f304\"; }\n\n.ion-android-wifi:before {\n  content: \"\\f305\"; }\n\n.ion-archive:before {\n  content: \"\\f102\"; }\n\n.ion-arrow-down-a:before {\n  content: \"\\f103\"; }\n\n.ion-arrow-down-b:before {\n  content: \"\\f104\"; }\n\n.ion-arrow-down-c:before {\n  content: \"\\f105\"; }\n\n.ion-arrow-expand:before {\n  content: \"\\f25e\"; }\n\n.ion-arrow-graph-down-left:before {\n  content: \"\\f25f\"; }\n\n.ion-arrow-graph-down-right:before {\n  content: \"\\f260\"; }\n\n.ion-arrow-graph-up-left:before {\n  content: \"\\f261\"; }\n\n.ion-arrow-graph-up-right:before {\n  content: \"\\f262\"; }\n\n.ion-arrow-left-a:before {\n  content: \"\\f106\"; }\n\n.ion-arrow-left-b:before {\n  content: \"\\f107\"; }\n\n.ion-arrow-left-c:before {\n  content: \"\\f108\"; }\n\n.ion-arrow-move:before {\n  content: \"\\f263\"; }\n\n.ion-arrow-resize:before {\n  content: \"\\f264\"; }\n\n.ion-arrow-return-left:before {\n  content: \"\\f265\"; }\n\n.ion-arrow-return-right:before {\n  content: \"\\f266\"; }\n\n.ion-arrow-right-a:before {\n  content: \"\\f109\"; }\n\n.ion-arrow-right-b:before {\n  content: \"\\f10a\"; }\n\n.ion-arrow-right-c:before {\n  content: \"\\f10b\"; }\n\n.ion-arrow-shrink:before {\n  content: \"\\f267\"; }\n\n.ion-arrow-swap:before {\n  content: \"\\f268\"; }\n\n.ion-arrow-up-a:before {\n  content: \"\\f10c\"; }\n\n.ion-arrow-up-b:before {\n  content: \"\\f10d\"; }\n\n.ion-arrow-up-c:before {\n  content: \"\\f10e\"; }\n\n.ion-at:before {\n  content: \"\\f10f\"; }\n\n.ion-bag:before {\n  content: \"\\f110\"; }\n\n.ion-battery-charging:before {\n  content: \"\\f111\"; }\n\n.ion-battery-empty:before {\n  content: \"\\f112\"; }\n\n.ion-battery-full:before {\n  content: \"\\f113\"; }\n\n.ion-battery-half:before {\n  content: \"\\f114\"; }\n\n.ion-battery-low:before {\n  content: \"\\f115\"; }\n\n.ion-beaker:before {\n  content: \"\\f269\"; }\n\n.ion-beer:before {\n  content: \"\\f26a\"; }\n\n.ion-bluetooth:before {\n  content: \"\\f116\"; }\n\n.ion-bookmark:before {\n  content: \"\\f26b\"; }\n\n.ion-briefcase:before {\n  content: \"\\f26c\"; }\n\n.ion-bug:before {\n  content: \"\\f2be\"; }\n\n.ion-calculator:before {\n  content: \"\\f26d\"; }\n\n.ion-calendar:before {\n  content: \"\\f117\"; }\n\n.ion-camera:before {\n  content: \"\\f118\"; }\n\n.ion-card:before {\n  content: \"\\f119\"; }\n\n.ion-chatbox:before {\n  content: \"\\f11b\"; }\n\n.ion-chatbox-working:before {\n  content: \"\\f11a\"; }\n\n.ion-chatboxes:before {\n  content: \"\\f11c\"; }\n\n.ion-chatbubble:before {\n  content: \"\\f11e\"; }\n\n.ion-chatbubble-working:before {\n  content: \"\\f11d\"; }\n\n.ion-chatbubbles:before {\n  content: \"\\f11f\"; }\n\n.ion-checkmark:before {\n  content: \"\\f122\"; }\n\n.ion-checkmark-circled:before {\n  content: \"\\f120\"; }\n\n.ion-checkmark-round:before {\n  content: \"\\f121\"; }\n\n.ion-chevron-down:before {\n  content: \"\\f123\"; }\n\n.ion-chevron-left:before {\n  content: \"\\f124\"; }\n\n.ion-chevron-right:before {\n  content: \"\\f125\"; }\n\n.ion-chevron-up:before {\n  content: \"\\f126\"; }\n\n.ion-clipboard:before {\n  content: \"\\f127\"; }\n\n.ion-clock:before {\n  content: \"\\f26e\"; }\n\n.ion-close:before {\n  content: \"\\f12a\"; }\n\n.ion-close-circled:before {\n  content: \"\\f128\"; }\n\n.ion-close-round:before {\n  content: \"\\f129\"; }\n\n.ion-cloud:before {\n  content: \"\\f12b\"; }\n\n.ion-code:before {\n  content: \"\\f271\"; }\n\n.ion-code-download:before {\n  content: \"\\f26f\"; }\n\n.ion-code-working:before {\n  content: \"\\f270\"; }\n\n.ion-coffee:before {\n  content: \"\\f272\"; }\n\n.ion-compass:before {\n  content: \"\\f273\"; }\n\n.ion-compose:before {\n  content: \"\\f12c\"; }\n\n.ion-connection-bars:before {\n  content: \"\\f274\"; }\n\n.ion-contrast:before {\n  content: \"\\f275\"; }\n\n.ion-disc:before {\n  content: \"\\f12d\"; }\n\n.ion-document:before {\n  content: \"\\f12f\"; }\n\n.ion-document-text:before {\n  content: \"\\f12e\"; }\n\n.ion-drag:before {\n  content: \"\\f130\"; }\n\n.ion-earth:before {\n  content: \"\\f276\"; }\n\n.ion-edit:before {\n  content: \"\\f2bf\"; }\n\n.ion-egg:before {\n  content: \"\\f277\"; }\n\n.ion-eject:before {\n  content: \"\\f131\"; }\n\n.ion-email:before {\n  content: \"\\f132\"; }\n\n.ion-eye:before {\n  content: \"\\f133\"; }\n\n.ion-eye-disabled:before {\n  content: \"\\f306\"; }\n\n.ion-female:before {\n  content: \"\\f278\"; }\n\n.ion-filing:before {\n  content: \"\\f134\"; }\n\n.ion-film-marker:before {\n  content: \"\\f135\"; }\n\n.ion-flag:before {\n  content: \"\\f279\"; }\n\n.ion-flash:before {\n  content: \"\\f137\"; }\n\n.ion-flash-off:before {\n  content: \"\\f136\"; }\n\n.ion-flask:before {\n  content: \"\\f138\"; }\n\n.ion-folder:before {\n  content: \"\\f139\"; }\n\n.ion-fork:before {\n  content: \"\\f27a\"; }\n\n.ion-fork-repo:before {\n  content: \"\\f2c0\"; }\n\n.ion-forward:before {\n  content: \"\\f13a\"; }\n\n.ion-game-controller-a:before {\n  content: \"\\f13b\"; }\n\n.ion-game-controller-b:before {\n  content: \"\\f13c\"; }\n\n.ion-gear-a:before {\n  content: \"\\f13d\"; }\n\n.ion-gear-b:before {\n  content: \"\\f13e\"; }\n\n.ion-grid:before {\n  content: \"\\f13f\"; }\n\n.ion-hammer:before {\n  content: \"\\f27b\"; }\n\n.ion-headphone:before {\n  content: \"\\f140\"; }\n\n.ion-heart:before {\n  content: \"\\f141\"; }\n\n.ion-help:before {\n  content: \"\\f143\"; }\n\n.ion-help-buoy:before {\n  content: \"\\f27c\"; }\n\n.ion-help-circled:before {\n  content: \"\\f142\"; }\n\n.ion-home:before {\n  content: \"\\f144\"; }\n\n.ion-icecream:before {\n  content: \"\\f27d\"; }\n\n.ion-icon-social-google-plus:before {\n  content: \"\\f146\"; }\n\n.ion-icon-social-google-plus-outline:before {\n  content: \"\\f145\"; }\n\n.ion-image:before {\n  content: \"\\f147\"; }\n\n.ion-images:before {\n  content: \"\\f148\"; }\n\n.ion-information:before {\n  content: \"\\f14a\"; }\n\n.ion-information-circled:before {\n  content: \"\\f149\"; }\n\n.ion-ionic:before {\n  content: \"\\f14b\"; }\n\n.ion-ios7-alarm:before {\n  content: \"\\f14d\"; }\n\n.ion-ios7-alarm-outline:before {\n  content: \"\\f14c\"; }\n\n.ion-ios7-albums:before {\n  content: \"\\f14f\"; }\n\n.ion-ios7-albums-outline:before {\n  content: \"\\f14e\"; }\n\n.ion-ios7-arrow-back:before {\n  content: \"\\f150\"; }\n\n.ion-ios7-arrow-down:before {\n  content: \"\\f151\"; }\n\n.ion-ios7-arrow-forward:before {\n  content: \"\\f152\"; }\n\n.ion-ios7-arrow-left:before {\n  content: \"\\f153\"; }\n\n.ion-ios7-arrow-right:before {\n  content: \"\\f154\"; }\n\n.ion-ios7-arrow-thin-down:before {\n  content: \"\\f27e\"; }\n\n.ion-ios7-arrow-thin-left:before {\n  content: \"\\f27f\"; }\n\n.ion-ios7-arrow-thin-right:before {\n  content: \"\\f280\"; }\n\n.ion-ios7-arrow-thin-up:before {\n  content: \"\\f281\"; }\n\n.ion-ios7-arrow-up:before {\n  content: \"\\f155\"; }\n\n.ion-ios7-at:before {\n  content: \"\\f157\"; }\n\n.ion-ios7-at-outline:before {\n  content: \"\\f156\"; }\n\n.ion-ios7-bell:before {\n  content: \"\\f159\"; }\n\n.ion-ios7-bell-outline:before {\n  content: \"\\f158\"; }\n\n.ion-ios7-bolt:before {\n  content: \"\\f15b\"; }\n\n.ion-ios7-bolt-outline:before {\n  content: \"\\f15a\"; }\n\n.ion-ios7-bookmarks:before {\n  content: \"\\f15d\"; }\n\n.ion-ios7-bookmarks-outline:before {\n  content: \"\\f15c\"; }\n\n.ion-ios7-box:before {\n  content: \"\\f15f\"; }\n\n.ion-ios7-box-outline:before {\n  content: \"\\f15e\"; }\n\n.ion-ios7-briefcase:before {\n  content: \"\\f283\"; }\n\n.ion-ios7-briefcase-outline:before {\n  content: \"\\f282\"; }\n\n.ion-ios7-browsers:before {\n  content: \"\\f161\"; }\n\n.ion-ios7-browsers-outline:before {\n  content: \"\\f160\"; }\n\n.ion-ios7-calculator:before {\n  content: \"\\f285\"; }\n\n.ion-ios7-calculator-outline:before {\n  content: \"\\f284\"; }\n\n.ion-ios7-calendar:before {\n  content: \"\\f163\"; }\n\n.ion-ios7-calendar-outline:before {\n  content: \"\\f162\"; }\n\n.ion-ios7-camera:before {\n  content: \"\\f165\"; }\n\n.ion-ios7-camera-outline:before {\n  content: \"\\f164\"; }\n\n.ion-ios7-cart:before {\n  content: \"\\f167\"; }\n\n.ion-ios7-cart-outline:before {\n  content: \"\\f166\"; }\n\n.ion-ios7-chatboxes:before {\n  content: \"\\f169\"; }\n\n.ion-ios7-chatboxes-outline:before {\n  content: \"\\f168\"; }\n\n.ion-ios7-chatbubble:before {\n  content: \"\\f16b\"; }\n\n.ion-ios7-chatbubble-outline:before {\n  content: \"\\f16a\"; }\n\n.ion-ios7-checkmark:before {\n  content: \"\\f16e\"; }\n\n.ion-ios7-checkmark-empty:before {\n  content: \"\\f16c\"; }\n\n.ion-ios7-checkmark-outline:before {\n  content: \"\\f16d\"; }\n\n.ion-ios7-circle-filled:before {\n  content: \"\\f16f\"; }\n\n.ion-ios7-circle-outline:before {\n  content: \"\\f170\"; }\n\n.ion-ios7-clock:before {\n  content: \"\\f172\"; }\n\n.ion-ios7-clock-outline:before {\n  content: \"\\f171\"; }\n\n.ion-ios7-close:before {\n  content: \"\\f2bc\"; }\n\n.ion-ios7-close-empty:before {\n  content: \"\\f2bd\"; }\n\n.ion-ios7-close-outline:before {\n  content: \"\\f2bb\"; }\n\n.ion-ios7-cloud:before {\n  content: \"\\f178\"; }\n\n.ion-ios7-cloud-download:before {\n  content: \"\\f174\"; }\n\n.ion-ios7-cloud-download-outline:before {\n  content: \"\\f173\"; }\n\n.ion-ios7-cloud-outline:before {\n  content: \"\\f175\"; }\n\n.ion-ios7-cloud-upload:before {\n  content: \"\\f177\"; }\n\n.ion-ios7-cloud-upload-outline:before {\n  content: \"\\f176\"; }\n\n.ion-ios7-cloudy:before {\n  content: \"\\f17a\"; }\n\n.ion-ios7-cloudy-night:before {\n  content: \"\\f308\"; }\n\n.ion-ios7-cloudy-night-outline:before {\n  content: \"\\f307\"; }\n\n.ion-ios7-cloudy-outline:before {\n  content: \"\\f179\"; }\n\n.ion-ios7-cog:before {\n  content: \"\\f17c\"; }\n\n.ion-ios7-cog-outline:before {\n  content: \"\\f17b\"; }\n\n.ion-ios7-compose:before {\n  content: \"\\f17e\"; }\n\n.ion-ios7-compose-outline:before {\n  content: \"\\f17d\"; }\n\n.ion-ios7-contact:before {\n  content: \"\\f180\"; }\n\n.ion-ios7-contact-outline:before {\n  content: \"\\f17f\"; }\n\n.ion-ios7-copy:before {\n  content: \"\\f182\"; }\n\n.ion-ios7-copy-outline:before {\n  content: \"\\f181\"; }\n\n.ion-ios7-download:before {\n  content: \"\\f184\"; }\n\n.ion-ios7-download-outline:before {\n  content: \"\\f183\"; }\n\n.ion-ios7-drag:before {\n  content: \"\\f185\"; }\n\n.ion-ios7-email:before {\n  content: \"\\f187\"; }\n\n.ion-ios7-email-outline:before {\n  content: \"\\f186\"; }\n\n.ion-ios7-eye:before {\n  content: \"\\f189\"; }\n\n.ion-ios7-eye-outline:before {\n  content: \"\\f188\"; }\n\n.ion-ios7-fastforward:before {\n  content: \"\\f18b\"; }\n\n.ion-ios7-fastforward-outline:before {\n  content: \"\\f18a\"; }\n\n.ion-ios7-filing:before {\n  content: \"\\f18d\"; }\n\n.ion-ios7-filing-outline:before {\n  content: \"\\f18c\"; }\n\n.ion-ios7-film:before {\n  content: \"\\f18f\"; }\n\n.ion-ios7-film-outline:before {\n  content: \"\\f18e\"; }\n\n.ion-ios7-flag:before {\n  content: \"\\f191\"; }\n\n.ion-ios7-flag-outline:before {\n  content: \"\\f190\"; }\n\n.ion-ios7-folder:before {\n  content: \"\\f193\"; }\n\n.ion-ios7-folder-outline:before {\n  content: \"\\f192\"; }\n\n.ion-ios7-gear:before {\n  content: \"\\f195\"; }\n\n.ion-ios7-gear-outline:before {\n  content: \"\\f194\"; }\n\n.ion-ios7-glasses:before {\n  content: \"\\f197\"; }\n\n.ion-ios7-glasses-outline:before {\n  content: \"\\f196\"; }\n\n.ion-ios7-heart:before {\n  content: \"\\f199\"; }\n\n.ion-ios7-heart-outline:before {\n  content: \"\\f198\"; }\n\n.ion-ios7-help:before {\n  content: \"\\f19c\"; }\n\n.ion-ios7-help-empty:before {\n  content: \"\\f19a\"; }\n\n.ion-ios7-help-outline:before {\n  content: \"\\f19b\"; }\n\n.ion-ios7-infinite:before {\n  content: \"\\f19e\"; }\n\n.ion-ios7-infinite-outline:before {\n  content: \"\\f19d\"; }\n\n.ion-ios7-information:before {\n  content: \"\\f1a1\"; }\n\n.ion-ios7-information-empty:before {\n  content: \"\\f19f\"; }\n\n.ion-ios7-information-outline:before {\n  content: \"\\f1a0\"; }\n\n.ion-ios7-ionic-outline:before {\n  content: \"\\f1a2\"; }\n\n.ion-ios7-keypad:before {\n  content: \"\\f1a4\"; }\n\n.ion-ios7-keypad-outline:before {\n  content: \"\\f1a3\"; }\n\n.ion-ios7-lightbulb:before {\n  content: \"\\f287\"; }\n\n.ion-ios7-lightbulb-outline:before {\n  content: \"\\f286\"; }\n\n.ion-ios7-location:before {\n  content: \"\\f1a6\"; }\n\n.ion-ios7-location-outline:before {\n  content: \"\\f1a5\"; }\n\n.ion-ios7-locked:before {\n  content: \"\\f1a8\"; }\n\n.ion-ios7-locked-outline:before {\n  content: \"\\f1a7\"; }\n\n.ion-ios7-medkit:before {\n  content: \"\\f289\"; }\n\n.ion-ios7-medkit-outline:before {\n  content: \"\\f288\"; }\n\n.ion-ios7-mic:before {\n  content: \"\\f1ab\"; }\n\n.ion-ios7-mic-off:before {\n  content: \"\\f1a9\"; }\n\n.ion-ios7-mic-outline:before {\n  content: \"\\f1aa\"; }\n\n.ion-ios7-minus:before {\n  content: \"\\f1ae\"; }\n\n.ion-ios7-minus-empty:before {\n  content: \"\\f1ac\"; }\n\n.ion-ios7-minus-outline:before {\n  content: \"\\f1ad\"; }\n\n.ion-ios7-monitor:before {\n  content: \"\\f1b0\"; }\n\n.ion-ios7-monitor-outline:before {\n  content: \"\\f1af\"; }\n\n.ion-ios7-moon:before {\n  content: \"\\f1b2\"; }\n\n.ion-ios7-moon-outline:before {\n  content: \"\\f1b1\"; }\n\n.ion-ios7-more:before {\n  content: \"\\f1b4\"; }\n\n.ion-ios7-more-outline:before {\n  content: \"\\f1b3\"; }\n\n.ion-ios7-musical-note:before {\n  content: \"\\f1b5\"; }\n\n.ion-ios7-musical-notes:before {\n  content: \"\\f1b6\"; }\n\n.ion-ios7-navigate:before {\n  content: \"\\f1b8\"; }\n\n.ion-ios7-navigate-outline:before {\n  content: \"\\f1b7\"; }\n\n.ion-ios7-paperplane:before {\n  content: \"\\f1ba\"; }\n\n.ion-ios7-paperplane-outline:before {\n  content: \"\\f1b9\"; }\n\n.ion-ios7-partlysunny:before {\n  content: \"\\f1bc\"; }\n\n.ion-ios7-partlysunny-outline:before {\n  content: \"\\f1bb\"; }\n\n.ion-ios7-pause:before {\n  content: \"\\f1be\"; }\n\n.ion-ios7-pause-outline:before {\n  content: \"\\f1bd\"; }\n\n.ion-ios7-people:before {\n  content: \"\\f1c0\"; }\n\n.ion-ios7-people-outline:before {\n  content: \"\\f1bf\"; }\n\n.ion-ios7-person:before {\n  content: \"\\f1c2\"; }\n\n.ion-ios7-person-outline:before {\n  content: \"\\f1c1\"; }\n\n.ion-ios7-personadd:before {\n  content: \"\\f1c4\"; }\n\n.ion-ios7-personadd-outline:before {\n  content: \"\\f1c3\"; }\n\n.ion-ios7-photos:before {\n  content: \"\\f1c6\"; }\n\n.ion-ios7-photos-outline:before {\n  content: \"\\f1c5\"; }\n\n.ion-ios7-pie:before {\n  content: \"\\f28b\"; }\n\n.ion-ios7-pie-outline:before {\n  content: \"\\f28a\"; }\n\n.ion-ios7-play:before {\n  content: \"\\f1c8\"; }\n\n.ion-ios7-play-outline:before {\n  content: \"\\f1c7\"; }\n\n.ion-ios7-plus:before {\n  content: \"\\f1cb\"; }\n\n.ion-ios7-plus-empty:before {\n  content: \"\\f1c9\"; }\n\n.ion-ios7-plus-outline:before {\n  content: \"\\f1ca\"; }\n\n.ion-ios7-pricetag:before {\n  content: \"\\f28d\"; }\n\n.ion-ios7-pricetag-outline:before {\n  content: \"\\f28c\"; }\n\n.ion-ios7-printer:before {\n  content: \"\\f1cd\"; }\n\n.ion-ios7-printer-outline:before {\n  content: \"\\f1cc\"; }\n\n.ion-ios7-rainy:before {\n  content: \"\\f1cf\"; }\n\n.ion-ios7-rainy-outline:before {\n  content: \"\\f1ce\"; }\n\n.ion-ios7-recording:before {\n  content: \"\\f1d1\"; }\n\n.ion-ios7-recording-outline:before {\n  content: \"\\f1d0\"; }\n\n.ion-ios7-redo:before {\n  content: \"\\f1d3\"; }\n\n.ion-ios7-redo-outline:before {\n  content: \"\\f1d2\"; }\n\n.ion-ios7-refresh:before {\n  content: \"\\f1d6\"; }\n\n.ion-ios7-refresh-empty:before {\n  content: \"\\f1d4\"; }\n\n.ion-ios7-refresh-outline:before {\n  content: \"\\f1d5\"; }\n\n.ion-ios7-reload:before, .ion-ios7-reloading:before {\n  content: \"\\f28e\"; }\n\n.ion-ios7-rewind:before {\n  content: \"\\f1d8\"; }\n\n.ion-ios7-rewind-outline:before {\n  content: \"\\f1d7\"; }\n\n.ion-ios7-search:before {\n  content: \"\\f1da\"; }\n\n.ion-ios7-search-strong:before {\n  content: \"\\f1d9\"; }\n\n.ion-ios7-skipbackward:before {\n  content: \"\\f1dc\"; }\n\n.ion-ios7-skipbackward-outline:before {\n  content: \"\\f1db\"; }\n\n.ion-ios7-skipforward:before {\n  content: \"\\f1de\"; }\n\n.ion-ios7-skipforward-outline:before {\n  content: \"\\f1dd\"; }\n\n.ion-ios7-snowy:before {\n  content: \"\\f309\"; }\n\n.ion-ios7-speedometer:before {\n  content: \"\\f290\"; }\n\n.ion-ios7-speedometer-outline:before {\n  content: \"\\f28f\"; }\n\n.ion-ios7-star:before {\n  content: \"\\f1e0\"; }\n\n.ion-ios7-star-outline:before {\n  content: \"\\f1df\"; }\n\n.ion-ios7-stopwatch:before {\n  content: \"\\f1e2\"; }\n\n.ion-ios7-stopwatch-outline:before {\n  content: \"\\f1e1\"; }\n\n.ion-ios7-sunny:before {\n  content: \"\\f1e4\"; }\n\n.ion-ios7-sunny-outline:before {\n  content: \"\\f1e3\"; }\n\n.ion-ios7-telephone:before {\n  content: \"\\f1e6\"; }\n\n.ion-ios7-telephone-outline:before {\n  content: \"\\f1e5\"; }\n\n.ion-ios7-thunderstorm:before {\n  content: \"\\f1e8\"; }\n\n.ion-ios7-thunderstorm-outline:before {\n  content: \"\\f1e7\"; }\n\n.ion-ios7-time:before {\n  content: \"\\f292\"; }\n\n.ion-ios7-time-outline:before {\n  content: \"\\f291\"; }\n\n.ion-ios7-timer:before {\n  content: \"\\f1ea\"; }\n\n.ion-ios7-timer-outline:before {\n  content: \"\\f1e9\"; }\n\n.ion-ios7-trash:before {\n  content: \"\\f1ec\"; }\n\n.ion-ios7-trash-outline:before {\n  content: \"\\f1eb\"; }\n\n.ion-ios7-undo:before {\n  content: \"\\f1ee\"; }\n\n.ion-ios7-undo-outline:before {\n  content: \"\\f1ed\"; }\n\n.ion-ios7-unlocked:before {\n  content: \"\\f1f0\"; }\n\n.ion-ios7-unlocked-outline:before {\n  content: \"\\f1ef\"; }\n\n.ion-ios7-upload:before {\n  content: \"\\f1f2\"; }\n\n.ion-ios7-upload-outline:before {\n  content: \"\\f1f1\"; }\n\n.ion-ios7-videocam:before {\n  content: \"\\f1f4\"; }\n\n.ion-ios7-videocam-outline:before {\n  content: \"\\f1f3\"; }\n\n.ion-ios7-volume-high:before {\n  content: \"\\f1f5\"; }\n\n.ion-ios7-volume-low:before {\n  content: \"\\f1f6\"; }\n\n.ion-ios7-wineglass:before {\n  content: \"\\f294\"; }\n\n.ion-ios7-wineglass-outline:before {\n  content: \"\\f293\"; }\n\n.ion-ios7-world:before {\n  content: \"\\f1f8\"; }\n\n.ion-ios7-world-outline:before {\n  content: \"\\f1f7\"; }\n\n.ion-ipad:before {\n  content: \"\\f1f9\"; }\n\n.ion-iphone:before {\n  content: \"\\f1fa\"; }\n\n.ion-ipod:before {\n  content: \"\\f1fb\"; }\n\n.ion-jet:before {\n  content: \"\\f295\"; }\n\n.ion-key:before {\n  content: \"\\f296\"; }\n\n.ion-knife:before {\n  content: \"\\f297\"; }\n\n.ion-laptop:before {\n  content: \"\\f1fc\"; }\n\n.ion-leaf:before {\n  content: \"\\f1fd\"; }\n\n.ion-levels:before {\n  content: \"\\f298\"; }\n\n.ion-lightbulb:before {\n  content: \"\\f299\"; }\n\n.ion-link:before {\n  content: \"\\f1fe\"; }\n\n.ion-load-a:before, .ion-loading-a:before {\n  content: \"\\f29a\"; }\n\n.ion-load-b:before, .ion-loading-b:before {\n  content: \"\\f29b\"; }\n\n.ion-load-c:before, .ion-loading-c:before {\n  content: \"\\f29c\"; }\n\n.ion-load-d:before, .ion-loading-d:before {\n  content: \"\\f29d\"; }\n\n.ion-location:before {\n  content: \"\\f1ff\"; }\n\n.ion-locked:before {\n  content: \"\\f200\"; }\n\n.ion-log-in:before {\n  content: \"\\f29e\"; }\n\n.ion-log-out:before {\n  content: \"\\f29f\"; }\n\n.ion-loop:before, .ion-looping:before {\n  content: \"\\f201\"; }\n\n.ion-magnet:before {\n  content: \"\\f2a0\"; }\n\n.ion-male:before {\n  content: \"\\f2a1\"; }\n\n.ion-man:before {\n  content: \"\\f202\"; }\n\n.ion-map:before {\n  content: \"\\f203\"; }\n\n.ion-medkit:before {\n  content: \"\\f2a2\"; }\n\n.ion-mic-a:before {\n  content: \"\\f204\"; }\n\n.ion-mic-b:before {\n  content: \"\\f205\"; }\n\n.ion-mic-c:before {\n  content: \"\\f206\"; }\n\n.ion-minus:before {\n  content: \"\\f209\"; }\n\n.ion-minus-circled:before {\n  content: \"\\f207\"; }\n\n.ion-minus-round:before {\n  content: \"\\f208\"; }\n\n.ion-model-s:before {\n  content: \"\\f2c1\"; }\n\n.ion-monitor:before {\n  content: \"\\f20a\"; }\n\n.ion-more:before {\n  content: \"\\f20b\"; }\n\n.ion-music-note:before {\n  content: \"\\f20c\"; }\n\n.ion-navicon:before {\n  content: \"\\f20e\"; }\n\n.ion-navicon-round:before {\n  content: \"\\f20d\"; }\n\n.ion-navigate:before {\n  content: \"\\f2a3\"; }\n\n.ion-no-smoking:before {\n  content: \"\\f2c2\"; }\n\n.ion-nuclear:before {\n  content: \"\\f2a4\"; }\n\n.ion-paper-airplane:before {\n  content: \"\\f2c3\"; }\n\n.ion-paperclip:before {\n  content: \"\\f20f\"; }\n\n.ion-pause:before {\n  content: \"\\f210\"; }\n\n.ion-person:before {\n  content: \"\\f213\"; }\n\n.ion-person-add:before {\n  content: \"\\f211\"; }\n\n.ion-person-stalker:before {\n  content: \"\\f212\"; }\n\n.ion-pie-graph:before {\n  content: \"\\f2a5\"; }\n\n.ion-pin:before {\n  content: \"\\f2a6\"; }\n\n.ion-pinpoint:before {\n  content: \"\\f2a7\"; }\n\n.ion-pizza:before {\n  content: \"\\f2a8\"; }\n\n.ion-plane:before {\n  content: \"\\f214\"; }\n\n.ion-play:before {\n  content: \"\\f215\"; }\n\n.ion-playstation:before {\n  content: \"\\f30a\"; }\n\n.ion-plus:before {\n  content: \"\\f218\"; }\n\n.ion-plus-circled:before {\n  content: \"\\f216\"; }\n\n.ion-plus-round:before {\n  content: \"\\f217\"; }\n\n.ion-pound:before {\n  content: \"\\f219\"; }\n\n.ion-power:before {\n  content: \"\\f2a9\"; }\n\n.ion-pricetag:before {\n  content: \"\\f2aa\"; }\n\n.ion-pricetags:before {\n  content: \"\\f2ab\"; }\n\n.ion-printer:before {\n  content: \"\\f21a\"; }\n\n.ion-radio-waves:before {\n  content: \"\\f2ac\"; }\n\n.ion-record:before {\n  content: \"\\f21b\"; }\n\n.ion-refresh:before, .ion-refreshing:before {\n  content: \"\\f21c\"; }\n\n.ion-reply:before {\n  content: \"\\f21e\"; }\n\n.ion-reply-all:before {\n  content: \"\\f21d\"; }\n\n.ion-search:before {\n  content: \"\\f21f\"; }\n\n.ion-settings:before {\n  content: \"\\f2ad\"; }\n\n.ion-share:before {\n  content: \"\\f220\"; }\n\n.ion-shuffle:before {\n  content: \"\\f221\"; }\n\n.ion-skip-backward:before {\n  content: \"\\f222\"; }\n\n.ion-skip-forward:before {\n  content: \"\\f223\"; }\n\n.ion-social-android:before {\n  content: \"\\f225\"; }\n\n.ion-social-android-outline:before {\n  content: \"\\f224\"; }\n\n.ion-social-apple:before {\n  content: \"\\f227\"; }\n\n.ion-social-apple-outline:before {\n  content: \"\\f226\"; }\n\n.ion-social-bitcoin:before {\n  content: \"\\f2af\"; }\n\n.ion-social-bitcoin-outline:before {\n  content: \"\\f2ae\"; }\n\n.ion-social-buffer:before {\n  content: \"\\f229\"; }\n\n.ion-social-buffer-outline:before {\n  content: \"\\f228\"; }\n\n.ion-social-designernews:before {\n  content: \"\\f22b\"; }\n\n.ion-social-designernews-outline:before {\n  content: \"\\f22a\"; }\n\n.ion-social-dribbble:before {\n  content: \"\\f22d\"; }\n\n.ion-social-dribbble-outline:before {\n  content: \"\\f22c\"; }\n\n.ion-social-dropbox:before {\n  content: \"\\f22f\"; }\n\n.ion-social-dropbox-outline:before {\n  content: \"\\f22e\"; }\n\n.ion-social-facebook:before {\n  content: \"\\f231\"; }\n\n.ion-social-facebook-outline:before {\n  content: \"\\f230\"; }\n\n.ion-social-freebsd-devil:before {\n  content: \"\\f2c4\"; }\n\n.ion-social-github:before {\n  content: \"\\f233\"; }\n\n.ion-social-github-outline:before {\n  content: \"\\f232\"; }\n\n.ion-social-googleplus:before {\n  content: \"\\f235\"; }\n\n.ion-social-googleplus-outline:before {\n  content: \"\\f234\"; }\n\n.ion-social-hackernews:before {\n  content: \"\\f237\"; }\n\n.ion-social-hackernews-outline:before {\n  content: \"\\f236\"; }\n\n.ion-social-linkedin:before {\n  content: \"\\f239\"; }\n\n.ion-social-linkedin-outline:before {\n  content: \"\\f238\"; }\n\n.ion-social-pinterest:before {\n  content: \"\\f2b1\"; }\n\n.ion-social-pinterest-outline:before {\n  content: \"\\f2b0\"; }\n\n.ion-social-reddit:before {\n  content: \"\\f23b\"; }\n\n.ion-social-reddit-outline:before {\n  content: \"\\f23a\"; }\n\n.ion-social-rss:before {\n  content: \"\\f23d\"; }\n\n.ion-social-rss-outline:before {\n  content: \"\\f23c\"; }\n\n.ion-social-skype:before {\n  content: \"\\f23f\"; }\n\n.ion-social-skype-outline:before {\n  content: \"\\f23e\"; }\n\n.ion-social-tumblr:before {\n  content: \"\\f241\"; }\n\n.ion-social-tumblr-outline:before {\n  content: \"\\f240\"; }\n\n.ion-social-tux:before {\n  content: \"\\f2c5\"; }\n\n.ion-social-twitter:before {\n  content: \"\\f243\"; }\n\n.ion-social-twitter-outline:before {\n  content: \"\\f242\"; }\n\n.ion-social-vimeo:before {\n  content: \"\\f245\"; }\n\n.ion-social-vimeo-outline:before {\n  content: \"\\f244\"; }\n\n.ion-social-windows:before {\n  content: \"\\f247\"; }\n\n.ion-social-windows-outline:before {\n  content: \"\\f246\"; }\n\n.ion-social-wordpress:before {\n  content: \"\\f249\"; }\n\n.ion-social-wordpress-outline:before {\n  content: \"\\f248\"; }\n\n.ion-social-yahoo:before {\n  content: \"\\f24b\"; }\n\n.ion-social-yahoo-outline:before {\n  content: \"\\f24a\"; }\n\n.ion-social-youtube:before {\n  content: \"\\f24d\"; }\n\n.ion-social-youtube-outline:before {\n  content: \"\\f24c\"; }\n\n.ion-speakerphone:before {\n  content: \"\\f2b2\"; }\n\n.ion-speedometer:before {\n  content: \"\\f2b3\"; }\n\n.ion-spoon:before {\n  content: \"\\f2b4\"; }\n\n.ion-star:before {\n  content: \"\\f24e\"; }\n\n.ion-stats-bars:before {\n  content: \"\\f2b5\"; }\n\n.ion-steam:before {\n  content: \"\\f30b\"; }\n\n.ion-stop:before {\n  content: \"\\f24f\"; }\n\n.ion-thermometer:before {\n  content: \"\\f2b6\"; }\n\n.ion-thumbsdown:before {\n  content: \"\\f250\"; }\n\n.ion-thumbsup:before {\n  content: \"\\f251\"; }\n\n.ion-trash-a:before {\n  content: \"\\f252\"; }\n\n.ion-trash-b:before {\n  content: \"\\f253\"; }\n\n.ion-umbrella:before {\n  content: \"\\f2b7\"; }\n\n.ion-unlocked:before {\n  content: \"\\f254\"; }\n\n.ion-upload:before {\n  content: \"\\f255\"; }\n\n.ion-usb:before {\n  content: \"\\f2b8\"; }\n\n.ion-videocamera:before {\n  content: \"\\f256\"; }\n\n.ion-volume-high:before {\n  content: \"\\f257\"; }\n\n.ion-volume-low:before {\n  content: \"\\f258\"; }\n\n.ion-volume-medium:before {\n  content: \"\\f259\"; }\n\n.ion-volume-mute:before {\n  content: \"\\f25a\"; }\n\n.ion-waterdrop:before {\n  content: \"\\f25b\"; }\n\n.ion-wifi:before {\n  content: \"\\f25c\"; }\n\n.ion-wineglass:before {\n  content: \"\\f2b9\"; }\n\n.ion-woman:before {\n  content: \"\\f25d\"; }\n\n.ion-wrench:before {\n  content: \"\\f2ba\"; }\n\n.ion-xbox:before {\n  content: \"\\f30c\"; }\n"
  },
  {
    "path": "content/css/job.css",
    "content": "/* @license\n * MyFonts Webfont Build ID 2656303, 2013-10-02T11:03:28-0400\n * \n * The fonts listed in this notice are subject to the End User License\n * Agreement(s) entered into by the website owner. All other parties are \n * explicitly restricted from using the Licensed Webfonts(s).\n * \n * You may obtain a valid license at the URLs below.\n * \n * Webfont: Avenir Next Pro Regular by Linotype\n * URL: http://www.myfonts.com/fonts/linotype/avenir-next-pro/pro-regular/\n * \n * Webfont: Avenir Next Pro Medium by Linotype\n * URL: http://www.myfonts.com/fonts/linotype/avenir-next-pro/pro-medium/\n * \n * \n * License: http://www.myfonts.com/viewlicense?type=web&buildid=2656303\n * Licensed pageviews: 250,000\n * Webfonts copyright: Copyright &#x00A9; 2004 - 2007 Linotype GmbH, www.linotype.com. All rights reserved. This font software may not be reproduced, modified, disclosed or transferred without the express written approval of Linotype GmbH. Avenir is a trademark of Linotype GmbH\n * \n * © 2013 MyFonts Inc\n*/\n\n\n/* @import must be at top of file, otherwise CSS will not work \n@import url(\"//hello.myfonts.net/count/28882f\");*/\n\n\n\n/* Avenir Next Pro */ \n  \n@font-face {font-family: 'AvenirNextLTPro-Regular';src: url('https://code.ionicframework.com/assets/fonts/28882F_0_0.eot');src: url('https://code.ionicframework.com/assets/fonts/28882F_0_0.eot?#iefix') format('embedded-opentype'),url('https://code.ionicframework.com/assets/fonts/28882F_0_0.woff') format('woff'),url('https://code.ionicframework.com/assets/fonts/28882F_0_0.ttf') format('truetype');}\n \n  \n@font-face {font-family: 'AvenirNextLTPro-Medium';src: url('https://code.ionicframework.com/assets/fonts/28882F_1_0.eot');src: url('https://code.ionicframework.com/assets/fonts/28882F_1_0.eot?#iefix') format('embedded-opentype'),url('https://code.ionicframework.com/assets/fonts/28882F_1_0.woff') format('woff'),url('https://code.ionicframework.com/assets/fonts/28882F_1_0.ttf') format('truetype');}\n\n\n@font-face {font-family: 'AvenirNextLTPro-UltLt';src: url('https://code.ionicframework.com/assets/fonts/29CC36_0_0.eot');src: url('https://code.ionicframework.com/assets/fonts/29CC36_0_0.eot?#iefix') format('embedded-opentype'),url('https://code.ionicframework.com/assets/fonts/29CC36_0_0.woff') format('woff'),url('https://code.ionicframework.com/assets/fonts/29CC36_0_0.ttf') format('truetype');}\n\n \n#job {\n}\n\n#job h1 {\n  font-size: 40px;\n}\n\n#job h1, #job h2, #job h3, #job h4 {\n\n  font-family: \"AvenirNextLTPro-Medium\", \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n  color: #222;\n  font-weight: normal;\n  letter-spacing: -0.03rem;\n}\n\n#job-logo {\n  width: 100px;\n  display: block;\n  margin: 60px auto;\n}\n#job-apply {\n  margin: 30px 0px;\n}\n#office-shots img {\n  max-width: 100%;\n}\n#office-shots .row {\n  margin: 0;\n}\n#office-shots .row > * {\n  padding: 1px;\n}\n\n#office-sidebar {\n  padding-bottom: 40px;\n}\n"
  },
  {
    "path": "content/css/main.css",
    "content": "/*****************************************************************************/\n/*\n/* Common\n/*\n/*****************************************************************************/\n\n/* Global Reset */\n* {\n  margin: 0;\n  padding: 0;\n}\n\nhtml, body { height: 100%; }\n\nbody {\n  background-color: #FFF;\n  font: 13.34px Helvetica, Arial, sans-serif;\n  font-size: small;\n  text-align: center;\n}\n\nh1, h2, h3, h4, h5, h6 {\n  font-size: 100%; }\n\nh1 { margin-bottom: 1em; }\np { margin: 1em 0; }\n\na         { color: #00a; }\na:hover   { color: #000; }\na:visited { color: #a0a; }\n\n/*****************************************************************************/\n/*\n/* Home\n/*\n/*****************************************************************************/\nul.posts {\n  list-style-type: none;\n  margin-bottom: 2em;\n}\n\nul.posts li {\n  line-height: 1.75em;\n}\n\nul.posts span {\n  color: #aaa;\n  font-family: Monaco, \"Courier New\", monospace;\n  font-size: 80%;\n}\n\n/*****************************************************************************/\n/*\n/* Site\n/*\n/*****************************************************************************/\n\n.site {\n  font-size: 115%;\n  text-align: justify;\n  width: 42em;\n  margin: 3em auto 2em;\n  line-height: 1.5em;\n}\n\n.site .header a {\n  font-weight: bold;\n  text-decoration: none;\n}\n\n.site .header h1.title {\n  display: inline-block;\n  margin-bottom: 2em;\n}\n\n.site .header h1.title a {\n  color: #a00;\n}\n\n.site .header h1.title a:hover {\n  color: #000;\n}\n\n.site .header a.extra {\n  color: #aaa;\n  margin-left: 1em;\n}\n\n.site .header a.extra:hover {\n  color: #000;\n}\n\n.site .meta {\n  color: #aaa;\n}\n\n.site .footer {\n  font-size: 80%;\n  color: #666;\n  border-top: 4px solid #eee;\n  margin-top: 2em;\n  overflow: hidden;\n}\n\n.site .footer .contact {\n  float: left;\n  margin-right: 3em;\n}\n\n.site .footer .contact a {\n  color: #8085C1;\n}\n\n.site .footer .rss {\n  margin-top: 1.1em;\n  margin-right: -.2em;\n  float: right;\n}\n\n.site .footer .rss img {\n  border: 0;\n}\n\n/*****************************************************************************/\n/*\n/* Posts\n/*\n/*****************************************************************************/\n\n/* standard */\n.post pre {\n  border: 1px solid #ddd;\n  background-color: #eef;\n  padding: 0 .4em;\n}\n\n.post ul, .post ol {\n  margin-left: 1.35em;\n}\n\n.post code {\n  border: 1px solid #ddd;\n  background-color: #eef;\n  padding: 0 .2em;\n}\n\n.post pre code {\n  border: none;\n}\n\n/* terminal */\n.post pre.terminal {\n  border: 1px solid #000;\n  background-color: #333;\n  color: #FFF;\n}\n\n.post pre.terminal code {\n  background-color: #333;\n}\n"
  },
  {
    "path": "content/css/nprogress.css",
    "content": "/* Make clicks pass-through */\n#nprogress {\n  pointer-events: none;\n}\n\n#nprogress .bar {\n  background: #3777e1;\n\n  position: fixed;\n  z-index: 1031;\n  top: 0;\n  left: 0;\n\n  width: 100%;\n  height: 2px;\n}\n\n/* Fancy blur effect */\n#nprogress .peg {\n  display: block;\n  position: absolute;\n  right: 0px;\n  width: 100px;\n  height: 100%;\n  box-shadow: 0 0 10px #3777e1, 0 0 5px #3777e1;\n  opacity: 1.0;\n\n  -webkit-transform: rotate(3deg) translate(0px, -4px);\n      -ms-transform: rotate(3deg) translate(0px, -4px);\n          transform: rotate(3deg) translate(0px, -4px);\n}\n\n/* Remove these to get rid of the spinner */\n#nprogress .spinner {\n  display: block;\n  position: fixed;\n  z-index: 1031;\n  top: 15px;\n  right: 15px;\n}\n\n#nprogress .spinner-icon {\n  width: 18px;\n  height: 18px;\n  box-sizing: border-box;\n\n  border: solid 2px transparent;\n  border-top-color: #3777e1;\n  border-left-color: #3777e1;\n  border-radius: 50%;\n\n  -webkit-animation: nprogress-spinner 400ms linear infinite;\n          animation: nprogress-spinner 400ms linear infinite;\n}\n\n.nprogress-custom-parent {\n  overflow: hidden;\n  position: relative;\n}\n\n.nprogress-custom-parent #nprogress .spinner,\n.nprogress-custom-parent #nprogress .bar {\n  position: absolute;\n}\n\n@-webkit-keyframes nprogress-spinner {\n  0%   { -webkit-transform: rotate(0deg); }\n  100% { -webkit-transform: rotate(360deg); }\n}\n@keyframes nprogress-spinner {\n  0%   { transform: rotate(0deg); }\n  100% { transform: rotate(360deg); }\n}\n\n"
  },
  {
    "path": "content/css/pages/about.css",
    "content": "#page-about .navbar.transparent + .banner {\n  background: #181830 no-repeat center top url(\"/img/about-us/about-us-cta-bg.jpg\");\n  background-size: cover;\n  padding-top: 95px; }\n  #page-about .navbar.transparent + .banner p {\n    max-width: 655px;\n    margin: 0 auto; }\n\n#page-about .about-us .content p {\n  margin: 30px 0; }\n  #page-about .about-us .content p.lg {\n    font-size: 18px;\n    line-height: 32px; }\n    #page-about .about-us .content p.lg.light {\n      font-size: 16px; }\n\n#page-about .about-us .graphics {\n  background: no-repeat center top url(\"/img/about-us/story-graphic.png\");\n  background-size: 139px;\n  float: right;\n  position: relative;\n  top: 30px;\n  width: 500px; }\n  #page-about .about-us .graphics .period {\n    width: 190px;\n    position: relative;\n    margin-bottom: 40px;\n    opacity: 0;\n    transition: opacity 0.6s, -webkit-transform 0.3s cubic-bezier(0.155, 1.105, 0.295, 1.12);\n    transition: opacity 0.6s, transform 0.3s cubic-bezier(0.155, 1.105, 0.295, 1.12);\n    transition: opacity 0.6s, transform 0.3s cubic-bezier(0.155, 1.105, 0.295, 1.12), -webkit-transform 0.3s cubic-bezier(0.155, 1.105, 0.295, 1.12);\n    transition-delay: .4s; }\n    #page-about .about-us .graphics .period:nth-child(2) {\n      transition-delay: .8s; }\n    #page-about .about-us .graphics .period:nth-child(3) {\n      transition-delay: 1s; }\n    #page-about .about-us .graphics .period:nth-child(4) {\n      transition-delay: 1.2s; }\n    #page-about .about-us .graphics .period:nth-child(5) {\n      transition-delay: 1.4s; }\n    #page-about .about-us .graphics .period:nth-child(6) {\n      transition-delay: 1.6s; }\n    #page-about .about-us .graphics .period:nth-child(7) {\n      transition-delay: 1.8s; }\n    #page-about .about-us .graphics .period:nth-child(8) {\n      transition-delay: 2s; }\n    #page-about .about-us .graphics .period.right {\n      left: 325px; }\n    #page-about .about-us .graphics .period:first-child {\n      margin-top: -5px; }\n    #page-about .about-us .graphics .period h4 {\n      font-size: 14px;\n      font-weight: 600;\n      margin-bottom: 5px; }\n    #page-about .about-us .graphics .period p {\n      font-size: 12px;\n      line-height: 16px;\n      letter-spacing: 0;\n      color: #898989; }\n    #page-about .about-us .graphics .period strong {\n      font-weight: 500;\n      color: #4f545c; }\n  #page-about .about-us .graphics.active .period {\n    opacity: 1; }\n\n@media (max-width: 991px) {\n  #page-about .about-us .graphics {\n    float: none;\n    margin: 0 auto; }\n  #page-about .about-us .content {\n    width: 100%; } }\n\n@media (max-width: 525px) {\n  #page-about .about-us .graphics {\n    -webkit-transform: scale3d(0.6, 0.6, 1);\n            transform: scale3d(0.6, 0.6, 1);\n    width: 300px;\n    height: 720px;\n    margin-top: -180px;\n    left: -15px; }\n    #page-about .about-us .graphics .left {\n      left: -75px; }\n    #page-about .about-us .graphics .period.right {\n      left: 215px; } }\n\n#page-about section.our {\n  background: linear-gradient(to right, #4a7dff 0%, #4fb3ff 100%);\n  padding: 90px 0 40px; }\n  #page-about section.our .mission {\n    margin-left: 4.999%; }\n  #page-about section.our .mission,\n  #page-about section.our .philosophy {\n    margin-bottom: 50px;\n    width: 45%; }\n    @media (max-width: 767px) {\n      #page-about section.our .mission,\n      #page-about section.our .philosophy {\n        width: 100%;\n        margin-left: auto; } }\n  #page-about section.our h3 {\n    color: white; }\n  #page-about section.our p {\n    color: rgba(255, 255, 255, 0.7);\n    line-height: 1.8em;\n    font-size: 16px; }\n    #page-about section.our p strong,\n    #page-about section.our p a {\n      color: white;\n      font-weight: 500; }\n\n#page-about section.our-neck {\n  background: #f8fafe no-repeat center top;\n  background-image: url(\"/img/about-us/madison-map.jpg\"), linear-gradient(to right, #f8fafe 30%, #cad3e2 70%);\n  background-size: 1680px, 100%; }\n  #page-about section.our-neck .container {\n    padding-top: 64px;\n    height: 470px; }\n  #page-about section.our-neck h3 {\n    margin-bottom: 20px; }\n  #page-about section.our-neck p {\n    line-height: 28px;\n    font-size: 16px; }\n\n#page-about .hero.dark {\n  background: linear-gradient(to right, #31353d 0%, #404753 100%);\n  padding-top: 90px;\n  padding-bottom: 88px; }\n  #page-about .hero.dark h3 {\n    color: white;\n    font-weight: 600; }\n  #page-about .hero.dark p {\n    color: #4a8bfc;\n    font-weight: 500;\n    text-decoration: none; }\n    #page-about .hero.dark p a:hover {\n      color: #95bbfd;\n      text-decoration: none; }\n    #page-about .hero.dark p span {\n      font-size: 1.4em;\n      top: 3px;\n      position: relative;\n      right: -5px; }\n\n/*# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImFib3V0LmNzcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtFQUNFLGtGQUFrRjtFQUNsRix1QkFBdUI7RUFDdkIsa0JBQWtCLEVBQUU7RUFDcEI7SUFDRSxpQkFBaUI7SUFDakIsZUFBZSxFQUFFOztBQUVyQjtFQUNFLGVBQWUsRUFBRTtFQUNqQjtJQUNFLGdCQUFnQjtJQUNoQixrQkFBa0IsRUFBRTtJQUNwQjtNQUNFLGdCQUFnQixFQUFFOztBQUV4QjtFQUNFLHdFQUF3RTtFQUN4RSx1QkFBdUI7RUFDdkIsYUFBYTtFQUNiLG1CQUFtQjtFQUNuQixVQUFVO0VBQ1YsYUFBYSxFQUFFO0VBQ2Y7SUFDRSxhQUFhO0lBQ2IsbUJBQW1CO0lBQ25CLG9CQUFvQjtJQUNwQixXQUFXO0lBQ1gseUZBQWlGO0lBQWpGLGlGQUFpRjtJQUFqRixpSkFBaUY7SUFDakYsc0JBQXNCLEVBQUU7SUFDeEI7TUFDRSxzQkFBc0IsRUFBRTtJQUMxQjtNQUNFLHFCQUFxQixFQUFFO0lBQ3pCO01BQ0UsdUJBQXVCLEVBQUU7SUFDM0I7TUFDRSx1QkFBdUIsRUFBRTtJQUMzQjtNQUNFLHVCQUF1QixFQUFFO0lBQzNCO01BQ0UsdUJBQXVCLEVBQUU7SUFDM0I7TUFDRSxxQkFBcUIsRUFBRTtJQUN6QjtNQUNFLFlBQVksRUFBRTtJQUNoQjtNQUNFLGlCQUFpQixFQUFFO0lBQ3JCO01BQ0UsZ0JBQWdCO01BQ2hCLGlCQUFpQjtNQUNqQixtQkFBbUIsRUFBRTtJQUN2QjtNQUNFLGdCQUFnQjtNQUNoQixrQkFBa0I7TUFDbEIsa0JBQWtCO01BQ2xCLGVBQWUsRUFBRTtJQUNuQjtNQUNFLGlCQUFpQjtNQUNqQixlQUFlLEVBQUU7RUFDckI7SUFDRSxXQUFXLEVBQUU7O0FBRWpCO0VBQ0U7SUFDRSxZQUFZO0lBQ1osZUFBZSxFQUFFO0VBQ25CO0lBQ0UsWUFBWSxFQUFFLEVBQUU7O0FBRXBCO0VBQ0U7SUFDRSx3Q0FBZ0M7WUFBaEMsZ0NBQWdDO0lBQ2hDLGFBQWE7SUFDYixjQUFjO0lBQ2QsbUJBQW1CO0lBQ25CLFlBQVksRUFBRTtJQUNkO01BQ0UsWUFBWSxFQUFFO0lBQ2hCO01BQ0UsWUFBWSxFQUFFLEVBQUU7O0FBRXRCO0VBQ0UsZ0VBQWdFO0VBQ2hFLHFCQUFxQixFQUFFO0VBQ3ZCO0lBQ0Usb0JBQW9CLEVBQUU7RUFDeEI7O0lBRUUsb0JBQW9CO0lBQ3BCLFdBQVcsRUFBRTtJQUNiO01BQ0U7O1FBRUUsWUFBWTtRQUNaLGtCQUFrQixFQUFFLEVBQUU7RUFDNUI7SUFDRSxhQUFhLEVBQUU7RUFDakI7SUFDRSxnQ0FBZ0M7SUFDaEMsbUJBQW1CO0lBQ25CLGdCQUFnQixFQUFFO0lBQ2xCOztNQUVFLGFBQWE7TUFDYixpQkFBaUIsRUFBRTs7QUFFekI7RUFDRSx5Q0FBeUM7RUFDekMsNEdBQTRHO0VBQzVHLDhCQUE4QixFQUFFO0VBQ2hDO0lBQ0Usa0JBQWtCO0lBQ2xCLGNBQWMsRUFBRTtFQUNsQjtJQUNFLG9CQUFvQixFQUFFO0VBQ3hCO0lBQ0Usa0JBQWtCO0lBQ2xCLGdCQUFnQixFQUFFOztBQUV0QjtFQUNFLGdFQUFnRTtFQUNoRSxrQkFBa0I7RUFDbEIscUJBQXFCLEVBQUU7RUFDdkI7SUFDRSxhQUFhO0lBQ2IsaUJBQWlCLEVBQUU7RUFDckI7SUFDRSxlQUFlO0lBQ2YsaUJBQWlCO0lBQ2pCLHNCQUFzQixFQUFFO0lBQ3hCO01BQ0UsZUFBZTtNQUNmLHNCQUFzQixFQUFFO0lBQzFCO01BQ0UsaUJBQWlCO01BQ2pCLFNBQVM7TUFDVCxtQkFBbUI7TUFDbkIsWUFBWSxFQUFFIiwiZmlsZSI6InBhZ2VzL2Fib3V0LmNzcyIsInNvdXJjZXNDb250ZW50IjpbIiNwYWdlLWFib3V0IC5uYXZiYXIudHJhbnNwYXJlbnQgKyAuYmFubmVyIHtcbiAgYmFja2dyb3VuZDogIzE4MTgzMCBuby1yZXBlYXQgY2VudGVyIHRvcCB1cmwoXCIvaW1nL2Fib3V0LXVzL2Fib3V0LXVzLWN0YS1iZy5qcGdcIik7XG4gIGJhY2tncm91bmQtc2l6ZTogY292ZXI7XG4gIHBhZGRpbmctdG9wOiA5NXB4OyB9XG4gICNwYWdlLWFib3V0IC5uYXZiYXIudHJhbnNwYXJlbnQgKyAuYmFubmVyIHAge1xuICAgIG1heC13aWR0aDogNjU1cHg7XG4gICAgbWFyZ2luOiAwIGF1dG87IH1cblxuI3BhZ2UtYWJvdXQgLmFib3V0LXVzIC5jb250ZW50IHAge1xuICBtYXJnaW46IDMwcHggMDsgfVxuICAjcGFnZS1hYm91dCAuYWJvdXQtdXMgLmNvbnRlbnQgcC5sZyB7XG4gICAgZm9udC1zaXplOiAxOHB4O1xuICAgIGxpbmUtaGVpZ2h0OiAzMnB4OyB9XG4gICAgI3BhZ2UtYWJvdXQgLmFib3V0LXVzIC5jb250ZW50IHAubGcubGlnaHQge1xuICAgICAgZm9udC1zaXplOiAxNnB4OyB9XG5cbiNwYWdlLWFib3V0IC5hYm91dC11cyAuZ3JhcGhpY3Mge1xuICBiYWNrZ3JvdW5kOiBuby1yZXBlYXQgY2VudGVyIHRvcCB1cmwoXCIvaW1nL2Fib3V0LXVzL3N0b3J5LWdyYXBoaWMucG5nXCIpO1xuICBiYWNrZ3JvdW5kLXNpemU6IDEzOXB4O1xuICBmbG9hdDogcmlnaHQ7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgdG9wOiAzMHB4O1xuICB3aWR0aDogNTAwcHg7IH1cbiAgI3BhZ2UtYWJvdXQgLmFib3V0LXVzIC5ncmFwaGljcyAucGVyaW9kIHtcbiAgICB3aWR0aDogMTkwcHg7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIG1hcmdpbi1ib3R0b206IDQwcHg7XG4gICAgb3BhY2l0eTogMDtcbiAgICB0cmFuc2l0aW9uOiBvcGFjaXR5IDAuNnMsIHRyYW5zZm9ybSAwLjNzIGN1YmljLWJlemllcigwLjE1NSwgMS4xMDUsIDAuMjk1LCAxLjEyKTtcbiAgICB0cmFuc2l0aW9uLWRlbGF5OiAuNHM7IH1cbiAgICAjcGFnZS1hYm91dCAuYWJvdXQtdXMgLmdyYXBoaWNzIC5wZXJpb2Q6bnRoLWNoaWxkKDIpIHtcbiAgICAgIHRyYW5zaXRpb24tZGVsYXk6IC44czsgfVxuICAgICNwYWdlLWFib3V0IC5hYm91dC11cyAuZ3JhcGhpY3MgLnBlcmlvZDpudGgtY2hpbGQoMykge1xuICAgICAgdHJhbnNpdGlvbi1kZWxheTogMXM7IH1cbiAgICAjcGFnZS1hYm91dCAuYWJvdXQtdXMgLmdyYXBoaWNzIC5wZXJpb2Q6bnRoLWNoaWxkKDQpIHtcbiAgICAgIHRyYW5zaXRpb24tZGVsYXk6IDEuMnM7IH1cbiAgICAjcGFnZS1hYm91dCAuYWJvdXQtdXMgLmdyYXBoaWNzIC5wZXJpb2Q6bnRoLWNoaWxkKDUpIHtcbiAgICAgIHRyYW5zaXRpb24tZGVsYXk6IDEuNHM7IH1cbiAgICAjcGFnZS1hYm91dCAuYWJvdXQtdXMgLmdyYXBoaWNzIC5wZXJpb2Q6bnRoLWNoaWxkKDYpIHtcbiAgICAgIHRyYW5zaXRpb24tZGVsYXk6IDEuNnM7IH1cbiAgICAjcGFnZS1hYm91dCAuYWJvdXQtdXMgLmdyYXBoaWNzIC5wZXJpb2Q6bnRoLWNoaWxkKDcpIHtcbiAgICAgIHRyYW5zaXRpb24tZGVsYXk6IDEuOHM7IH1cbiAgICAjcGFnZS1hYm91dCAuYWJvdXQtdXMgLmdyYXBoaWNzIC5wZXJpb2Q6bnRoLWNoaWxkKDgpIHtcbiAgICAgIHRyYW5zaXRpb24tZGVsYXk6IDJzOyB9XG4gICAgI3BhZ2UtYWJvdXQgLmFib3V0LXVzIC5ncmFwaGljcyAucGVyaW9kLnJpZ2h0IHtcbiAgICAgIGxlZnQ6IDMyNXB4OyB9XG4gICAgI3BhZ2UtYWJvdXQgLmFib3V0LXVzIC5ncmFwaGljcyAucGVyaW9kOmZpcnN0LWNoaWxkIHtcbiAgICAgIG1hcmdpbi10b3A6IC01cHg7IH1cbiAgICAjcGFnZS1hYm91dCAuYWJvdXQtdXMgLmdyYXBoaWNzIC5wZXJpb2QgaDQge1xuICAgICAgZm9udC1zaXplOiAxNHB4O1xuICAgICAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgICAgIG1hcmdpbi1ib3R0b206IDVweDsgfVxuICAgICNwYWdlLWFib3V0IC5hYm91dC11cyAuZ3JhcGhpY3MgLnBlcmlvZCBwIHtcbiAgICAgIGZvbnQtc2l6ZTogMTJweDtcbiAgICAgIGxpbmUtaGVpZ2h0OiAxNnB4O1xuICAgICAgbGV0dGVyLXNwYWNpbmc6IDA7XG4gICAgICBjb2xvcjogIzg5ODk4OTsgfVxuICAgICNwYWdlLWFib3V0IC5hYm91dC11cyAuZ3JhcGhpY3MgLnBlcmlvZCBzdHJvbmcge1xuICAgICAgZm9udC13ZWlnaHQ6IDUwMDtcbiAgICAgIGNvbG9yOiAjNGY1NDVjOyB9XG4gICNwYWdlLWFib3V0IC5hYm91dC11cyAuZ3JhcGhpY3MuYWN0aXZlIC5wZXJpb2Qge1xuICAgIG9wYWNpdHk6IDE7IH1cblxuQG1lZGlhIChtYXgtd2lkdGg6IDk5MXB4KSB7XG4gICNwYWdlLWFib3V0IC5hYm91dC11cyAuZ3JhcGhpY3Mge1xuICAgIGZsb2F0OiBub25lO1xuICAgIG1hcmdpbjogMCBhdXRvOyB9XG4gICNwYWdlLWFib3V0IC5hYm91dC11cyAuY29udGVudCB7XG4gICAgd2lkdGg6IDEwMCU7IH0gfVxuXG5AbWVkaWEgKG1heC13aWR0aDogNTI1cHgpIHtcbiAgI3BhZ2UtYWJvdXQgLmFib3V0LXVzIC5ncmFwaGljcyB7XG4gICAgdHJhbnNmb3JtOiBzY2FsZTNkKDAuNiwgMC42LCAxKTtcbiAgICB3aWR0aDogMzAwcHg7XG4gICAgaGVpZ2h0OiA3MjBweDtcbiAgICBtYXJnaW4tdG9wOiAtMTgwcHg7XG4gICAgbGVmdDogLTE1cHg7IH1cbiAgICAjcGFnZS1hYm91dCAuYWJvdXQtdXMgLmdyYXBoaWNzIC5sZWZ0IHtcbiAgICAgIGxlZnQ6IC03NXB4OyB9XG4gICAgI3BhZ2UtYWJvdXQgLmFib3V0LXVzIC5ncmFwaGljcyAucGVyaW9kLnJpZ2h0IHtcbiAgICAgIGxlZnQ6IDIxNXB4OyB9IH1cblxuI3BhZ2UtYWJvdXQgc2VjdGlvbi5vdXIge1xuICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQodG8gcmlnaHQsICM0YTdkZmYgMCUsICM0ZmIzZmYgMTAwJSk7XG4gIHBhZGRpbmc6IDkwcHggMCA0MHB4OyB9XG4gICNwYWdlLWFib3V0IHNlY3Rpb24ub3VyIC5taXNzaW9uIHtcbiAgICBtYXJnaW4tbGVmdDogNC45OTklOyB9XG4gICNwYWdlLWFib3V0IHNlY3Rpb24ub3VyIC5taXNzaW9uLFxuICAjcGFnZS1hYm91dCBzZWN0aW9uLm91ciAucGhpbG9zb3BoeSB7XG4gICAgbWFyZ2luLWJvdHRvbTogNTBweDtcbiAgICB3aWR0aDogNDUlOyB9XG4gICAgQG1lZGlhIChtYXgtd2lkdGg6IDc2N3B4KSB7XG4gICAgICAjcGFnZS1hYm91dCBzZWN0aW9uLm91ciAubWlzc2lvbixcbiAgICAgICNwYWdlLWFib3V0IHNlY3Rpb24ub3VyIC5waGlsb3NvcGh5IHtcbiAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgIG1hcmdpbi1sZWZ0OiBhdXRvOyB9IH1cbiAgI3BhZ2UtYWJvdXQgc2VjdGlvbi5vdXIgaDMge1xuICAgIGNvbG9yOiB3aGl0ZTsgfVxuICAjcGFnZS1hYm91dCBzZWN0aW9uLm91ciBwIHtcbiAgICBjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjcpO1xuICAgIGxpbmUtaGVpZ2h0OiAxLjhlbTtcbiAgICBmb250LXNpemU6IDE2cHg7IH1cbiAgICAjcGFnZS1hYm91dCBzZWN0aW9uLm91ciBwIHN0cm9uZyxcbiAgICAjcGFnZS1hYm91dCBzZWN0aW9uLm91ciBwIGEge1xuICAgICAgY29sb3I6IHdoaXRlO1xuICAgICAgZm9udC13ZWlnaHQ6IDUwMDsgfVxuXG4jcGFnZS1hYm91dCBzZWN0aW9uLm91ci1uZWNrIHtcbiAgYmFja2dyb3VuZDogI2Y4ZmFmZSBuby1yZXBlYXQgY2VudGVyIHRvcDtcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFwiL2ltZy9hYm91dC11cy9tYWRpc29uLW1hcC5qcGdcIiksIGxpbmVhci1ncmFkaWVudCh0byByaWdodCwgI2Y4ZmFmZSAzMCUsICNjYWQzZTIgNzAlKTtcbiAgYmFja2dyb3VuZC1zaXplOiAxNjgwcHgsIDEwMCU7IH1cbiAgI3BhZ2UtYWJvdXQgc2VjdGlvbi5vdXItbmVjayAuY29udGFpbmVyIHtcbiAgICBwYWRkaW5nLXRvcDogNjRweDtcbiAgICBoZWlnaHQ6IDQ3MHB4OyB9XG4gICNwYWdlLWFib3V0IHNlY3Rpb24ub3VyLW5lY2sgaDMge1xuICAgIG1hcmdpbi1ib3R0b206IDIwcHg7IH1cbiAgI3BhZ2UtYWJvdXQgc2VjdGlvbi5vdXItbmVjayBwIHtcbiAgICBsaW5lLWhlaWdodDogMjhweDtcbiAgICBmb250LXNpemU6IDE2cHg7IH1cblxuI3BhZ2UtYWJvdXQgLmhlcm8uZGFyayB7XG4gIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCh0byByaWdodCwgIzMxMzUzZCAwJSwgIzQwNDc1MyAxMDAlKTtcbiAgcGFkZGluZy10b3A6IDkwcHg7XG4gIHBhZGRpbmctYm90dG9tOiA4OHB4OyB9XG4gICNwYWdlLWFib3V0IC5oZXJvLmRhcmsgaDMge1xuICAgIGNvbG9yOiB3aGl0ZTtcbiAgICBmb250LXdlaWdodDogNjAwOyB9XG4gICNwYWdlLWFib3V0IC5oZXJvLmRhcmsgcCB7XG4gICAgY29sb3I6ICM0YThiZmM7XG4gICAgZm9udC13ZWlnaHQ6IDUwMDtcbiAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7IH1cbiAgICAjcGFnZS1hYm91dCAuaGVyby5kYXJrIHAgYTpob3ZlciB7XG4gICAgICBjb2xvcjogIzk1YmJmZDtcbiAgICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTsgfVxuICAgICNwYWdlLWFib3V0IC5oZXJvLmRhcmsgcCBzcGFuIHtcbiAgICAgIGZvbnQtc2l6ZTogMS40ZW07XG4gICAgICB0b3A6IDNweDtcbiAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgIHJpZ2h0OiAtNXB4OyB9XG4iXX0= */\n"
  },
  {
    "path": "content/css/pages/case-studies.css",
    "content": "#page-case-studies .sub-header .download {\n  padding-right: 0;\n  text-transform: uppercase;\n  letter-spacing: .02em;\n  font-size: 12px; }\n\n#page-case-studies main hgroup {\n  margin-top: 24px;\n  margin-bottom: 53px; }\n  @media (max-width: 767px) {\n    #page-case-studies main hgroup {\n      margin-bottom: 0; } }\n  #page-case-studies main hgroup strong {\n    text-transform: uppercase;\n    font-size: 11px;\n    font-weight: 600;\n    color: #9cabc4;\n    font-family: \"Eina\", \"Helvetica Neue\", Helvetica, sans-serif; }\n  #page-case-studies main hgroup h4 {\n    margin-top: 62px;\n    font-size: 12px;\n    color: #92A1B3;\n    text-transform: uppercase;\n    letter-spacing: .14em; }\n  #page-case-studies main hgroup h1 {\n    font-size: 46px;\n    margin-top: 56px; }\n  #page-case-studies main hgroup p {\n    font-weight: 400;\n    color: #898989;\n    max-width: 750px;\n    margin: 13px auto;\n    font-size: 20px;\n    line-height: 1.8em;\n    letter-spacing: .01em; }\n  #page-case-studies main hgroup .byline {\n    font-style: normal;\n    font-weight: normal;\n    line-height: 29px;\n    font-size: 16px;\n    letter-spacing: -0.02em;\n    color: #92A1B3;\n    margin-bottom: 42px; }\n    #page-case-studies main hgroup .byline .avatar {\n      width: 28px;\n      height: 28px;\n      margin: 0 8px 0 0;\n      border-radius: 50%;\n      display: inline-block; }\n    #page-case-studies main hgroup .byline .tags {\n      padding: 0;\n      margin-left: 4px;\n      list-style: none;\n      vertical-align: 2px;\n      display: inline-block; }\n      #page-case-studies main hgroup .byline .tags li {\n        font-size: 10px;\n        color: #ced6e0;\n        background: transparent;\n        padding: 3px 5px 4px;\n        line-height: 1em;\n        margin-right: 2px;\n        font-weight: 600;\n        text-transform: uppercase;\n        border-radius: 4px;\n        letter-spacing: 0.08em;\n        vertical-align: 1px;\n        display: inline-block;\n        border: 1px solid #E9EDF3; }\n  #page-case-studies main hgroup img {\n    margin: 24px auto;\n    max-width: 100%; }\n\n#page-case-studies main {\n  display: -ms-flexbox;\n  display: flex;\n  overflow: visible;\n  padding-bottom: 160px; }\n  @media (max-width: 768px) {\n    #page-case-studies main {\n      padding-bottom: 80px; } }\n  @media (max-width: 767px) {\n    #page-case-studies main {\n      -ms-flex-direction: column;\n          flex-direction: column; } }\n\n#page-case-studies .sticky-wrapper {\n  position: -webkit-sticky;\n  position: sticky;\n  top: 128px; }\n\n#page-case-studies aside {\n  -ms-flex: 0 1 208px;\n      flex: 0 1 208px;\n  padding-right: 20px;\n  margin-bottom: 0;\n  margin-top: 52px; }\n  #page-case-studies aside h4 {\n    font-size: 10px;\n    text-transform: uppercase;\n    color: #a4b3cc;\n    font-weight: 600;\n    letter-spacing: .16em; }\n  #page-case-studies aside ul {\n    padding: 0;\n    font-size: 14px;\n    margin: 9px 0 30px;\n    list-style: none;\n    line-height: 1.4em; }\n    @media (max-width: 1219px) {\n      #page-case-studies aside ul {\n        font-size: 12px; } }\n  #page-case-studies aside li {\n    margin: 12px 0 13px; }\n  #page-case-studies aside a {\n    color: #52678c;\n    display: block;\n    transition: .2s transform ease, .2s color; }\n    #page-case-studies aside a:hover, #page-case-studies aside a:active, #page-case-studies aside a:focus, #page-case-studies aside a.active {\n      color: #4a8bfc;\n      text-decoration: none; }\n    #page-case-studies aside a.active {\n      -webkit-transform: translateX(8px);\n              transform: translateX(8px); }\n  #page-case-studies aside .btn {\n    margin: 0 0 32px; }\n  #page-case-studies aside .lightblue {\n    background: #e6f0f8;\n    color: #4a8bfc;\n    border-radius: 4px;\n    padding: 9px 16px;\n    display: inline-block;\n    font-size: 11px;\n    text-transform: uppercase;\n    font-weight: 700;\n    letter-spacing: .07em; }\n    #page-case-studies aside .lightblue ion-icon {\n      font-size: 18px;\n      vertical-align: -5px; }\n  #page-case-studies aside .sharing {\n    margin: 0;\n    border-top: 2px solid #f3f5f9;\n    padding-top: 26px; }\n    #page-case-studies aside .sharing li {\n      margin: 0;\n      margin-right: 6px;\n      display: inline-block; }\n    #page-case-studies aside .sharing a {\n      color: #CBD2DD;\n      font-size: 20px; }\n      #page-case-studies aside .sharing a:hover {\n        color: #4a8bfc; }\n    #page-case-studies aside .sharing #web-share {\n      display: none; }\n  @media (max-width: 768px) {\n    #page-case-studies aside {\n      display: none; } }\n\n#page-case-studies .main-col {\n  -ms-flex: 1;\n      flex: 1;\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-direction: column;\n      flex-direction: column;\n  -ms-flex-align: center;\n      align-items: center; }\n\n#page-case-studies .main-col__inner {\n  width: 100%;\n  max-width: 663px;\n  margin-left: 40px; }\n\n@media (max-width: 1219px) {\n  #page-case-studies .main-col {\n    -ms-flex-align: end;\n        align-items: flex-end; }\n  #page-case-studies .main-col__inner {\n    margin-left: 20px; } }\n\n@media (max-width: 768px) {\n  #page-case-studies .main-col {\n    -ms-flex-align: center;\n        align-items: center; }\n  #page-case-studies .main-col__inner {\n    margin-left: 0; } }\n\n#page-case-studies article {\n  padding-bottom: 58px;\n  border-bottom: 1px solid #edf0f6;\n  margin-bottom: 37px; }\n  #page-case-studies article h2 {\n    font-size: 30px;\n    margin-top: 2.65em;\n    margin-bottom: 0.8em;\n    font-weight: 600; }\n    #page-case-studies article h2 strong {\n      font-weight: 600; }\n  #page-case-studies article h3 {\n    font-size: 20px;\n    line-height: 1.3;\n    margin-top: 2.3em;\n    margin-bottom: 1.2em;\n    letter-spacing: -.014em;\n    font-weight: 600; }\n    #page-case-studies article h3 strong {\n      font-weight: 600; }\n  #page-case-studies article h4, #page-case-studies article h5, #page-case-studies article h6 {\n    margin: 1em 0; }\n  #page-case-studies article h4 {\n    text-transform: uppercase;\n    letter-spacing: 0.1em;\n    font-size: 14px; }\n  #page-case-studies article h5 {\n    font-size: 15px; }\n  #page-case-studies article h6 {\n    font-size: 11px;\n    text-transform: uppercase;\n    letter-spacing: 0.1em; }\n  #page-case-studies article p,\n  #page-case-studies article ul {\n    font-size: 16px;\n    letter-spacing: -.011em;\n    line-height: 1.75em;\n    margin-bottom: 1.8em;\n    color: #5B708B; }\n  #page-case-studies article ul {\n    padding-left: 0; }\n  #page-case-studies article ul li {\n    list-style-type: none;\n    position: relative;\n    padding-left: 18px; }\n    #page-case-studies article ul li:before {\n      content: '';\n      display: inline-block;\n      width: 6px;\n      height: 6px;\n      background: #B2BECD;\n      position: absolute;\n      top: 12px;\n      left: 0;\n      border-radius: 8px; }\n    #page-case-studies article ul li + li {\n      margin-top: 8px; }\n  #page-case-studies article b,\n  #page-case-studies article strong {\n    font-weight: 500; }\n  #page-case-studies article blockquote {\n    background: #f2f5f8;\n    border-radius: 4px;\n    position: relative;\n    padding: 64px 80px 68px 111px;\n    color: #5e749a;\n    font-family: \"Adobe Caslon\", Georgia, Times, \"Times New Roman\", serif;\n    font-style: italic;\n    border: none;\n    margin: 77px -16px 54px; }\n    #page-case-studies article blockquote::before {\n      position: absolute;\n      top: -6px;\n      left: 54px;\n      font-size: 180px;\n      content: '\\201C';\n      color: #e3e7ec; }\n    #page-case-studies article blockquote p {\n      font-size: 18px;\n      position: relative;\n      z-index: 1;\n      letter-spacing: .022em;\n      line-height: 1.8em; }\n      #page-case-studies article blockquote p:last-child {\n        margin-bottom: 0; }\n    #page-case-studies article blockquote cite {\n      font-size: 15px;\n      letter-spacing: .02em; }\n      #page-case-studies article blockquote cite span {\n        color: #9da9bd;\n        margin-left: 8px; }\n  #page-case-studies article img {\n    max-width: 100%; }\n  #page-case-studies article pre,\n  #page-case-studies article code {\n    border: none;\n    background: #f5f7fa; }\n  #page-case-studies article figure {\n    width: 295px;\n    float: right;\n    margin: 8px -20px 16px 74px; }\n    #page-case-studies article figure.left {\n      float: left;\n      margin-right: 74px;\n      margin-left: -20px; }\n    #page-case-studies article figure img {\n      box-shadow: 0 4px 48px rgba(0, 0, 0, 0.2); }\n    #page-case-studies article figure figcaption {\n      color: #a8b0be;\n      font-size: 11px;\n      margin-top: 13px; }\n    @media (max-width: 767px) {\n      #page-case-studies article figure {\n        margin-right: 0;\n        margin-left: 32px; }\n        #page-case-studies article figure.left {\n          margin-left: 0;\n          margin-right: 32px; } }\n    @media (max-width: 480px) {\n      #page-case-studies article figure {\n        width: 100%; } }\n  #page-case-studies article .table-wrap {\n    overflow-x: auto;\n    margin-right: -15px;\n    padding-right: 15px;\n    box-sizing: content-box;\n    font-size: 13px; }\n    #page-case-studies article .table-wrap td,\n    #page-case-studies article .table-wrap th {\n      min-width: 120px;\n      padding-right: 12px; }\n    #page-case-studies article .table-wrap table tbody tr td {\n      border-top-color: #DEE3EA; }\n    #page-case-studies article .table-wrap table > thead > tr > th {\n      border-bottom-color: #E9EDF3;\n      font-weight: 600; }\n\n#page-case-studies .resource-list {\n  margin-bottom: 0; }\n  #page-case-studies .resource-list__header .all {\n    float: right; }\n    #page-case-studies .resource-list__header .all ion-icon {\n      display: inline-block;\n      transition: .2s transform ease; }\n    #page-case-studies .resource-list__header .all:hover ion-icon {\n      -webkit-transform: translateX(2px);\n              transform: translateX(2px); }\n  #page-case-studies .resource-list__header h4 {\n    text-transform: uppercase;\n    font-size: 14px;\n    letter-spacing: .12em; }\n  #page-case-studies .resource-list .resource-card-list {\n    margin-left: -10px;\n    margin-right: -10px; }\n  #page-case-studies .resource-list .resource-card-list--third .resource-card {\n    padding: 5px;\n    height: 214px; }\n  #page-case-studies .resource-list .resource-card-list--third .resource-card a .title {\n    font-size: 18px; }\n\n/*# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImNhc2Utc3R1ZGllcy5jc3MiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7RUFDRSxpQkFBaUI7RUFDakIsMEJBQTBCO0VBQzFCLHNCQUFzQjtFQUN0QixnQkFBZ0IsRUFBRTs7QUFFcEI7RUFDRSxpQkFBaUI7RUFDakIsb0JBQW9CLEVBQUU7RUFDdEI7SUFDRTtNQUNFLGlCQUFpQixFQUFFLEVBQUU7RUFDekI7SUFDRSwwQkFBMEI7SUFDMUIsZ0JBQWdCO0lBQ2hCLGlCQUFpQjtJQUNqQixlQUFlO0lBQ2YsNkRBQTZELEVBQUU7RUFDakU7SUFDRSxpQkFBaUI7SUFDakIsZ0JBQWdCO0lBQ2hCLGVBQWU7SUFDZiwwQkFBMEI7SUFDMUIsc0JBQXNCLEVBQUU7RUFDMUI7SUFDRSxnQkFBZ0I7SUFDaEIsaUJBQWlCLEVBQUU7RUFDckI7SUFDRSxpQkFBaUI7SUFDakIsZUFBZTtJQUNmLGlCQUFpQjtJQUNqQixrQkFBa0I7SUFDbEIsZ0JBQWdCO0lBQ2hCLG1CQUFtQjtJQUNuQixzQkFBc0IsRUFBRTtFQUMxQjtJQUNFLG1CQUFtQjtJQUNuQixvQkFBb0I7SUFDcEIsa0JBQWtCO0lBQ2xCLGdCQUFnQjtJQUNoQix3QkFBd0I7SUFDeEIsZUFBZTtJQUNmLG9CQUFvQixFQUFFO0lBQ3RCO01BQ0UsWUFBWTtNQUNaLGFBQWE7TUFDYixrQkFBa0I7TUFDbEIsbUJBQW1CO01BQ25CLHNCQUFzQixFQUFFO0lBQzFCO01BQ0UsV0FBVztNQUNYLGlCQUFpQjtNQUNqQixpQkFBaUI7TUFDakIsb0JBQW9CO01BQ3BCLHNCQUFzQixFQUFFO01BQ3hCO1FBQ0UsZ0JBQWdCO1FBQ2hCLGVBQWU7UUFDZix3QkFBd0I7UUFDeEIscUJBQXFCO1FBQ3JCLGlCQUFpQjtRQUNqQixrQkFBa0I7UUFDbEIsaUJBQWlCO1FBQ2pCLDBCQUEwQjtRQUMxQixtQkFBbUI7UUFDbkIsdUJBQXVCO1FBQ3ZCLG9CQUFvQjtRQUNwQixzQkFBc0I7UUFDdEIsMEJBQTBCLEVBQUU7RUFDbEM7SUFDRSxrQkFBa0I7SUFDbEIsZ0JBQWdCLEVBQUU7O0FBRXRCO0VBQ0UscUJBQWM7RUFBZCxjQUFjO0VBQ2Qsa0JBQWtCO0VBQ2xCLHNCQUFzQixFQUFFO0VBQ3hCO0lBQ0U7TUFDRSxxQkFBcUIsRUFBRSxFQUFFO0VBQzdCO0lBQ0U7TUFDRSwyQkFBdUI7VUFBdkIsdUJBQXVCLEVBQUUsRUFBRTs7QUFFakM7RUFDRSx5QkFBaUI7RUFBakIsaUJBQWlCO0VBQ2pCLFdBQVcsRUFBRTs7QUFFZjtFQUNFLG9CQUFnQjtNQUFoQixnQkFBZ0I7RUFDaEIsb0JBQW9CO0VBQ3BCLGlCQUFpQjtFQUNqQixpQkFBaUIsRUFBRTtFQUNuQjtJQUNFLGdCQUFnQjtJQUNoQiwwQkFBMEI7SUFDMUIsZUFBZTtJQUNmLGlCQUFpQjtJQUNqQixzQkFBc0IsRUFBRTtFQUMxQjtJQUNFLFdBQVc7SUFDWCxnQkFBZ0I7SUFDaEIsbUJBQW1CO0lBQ25CLGlCQUFpQjtJQUNqQixtQkFBbUIsRUFBRTtJQUNyQjtNQUNFO1FBQ0UsZ0JBQWdCLEVBQUUsRUFBRTtFQUMxQjtJQUNFLG9CQUFvQixFQUFFO0VBQ3hCO0lBQ0UsZUFBZTtJQUNmLGVBQWU7SUFDZiwwQ0FBMEMsRUFBRTtJQUM1QztNQUNFLGVBQWU7TUFDZixzQkFBc0IsRUFBRTtJQUMxQjtNQUNFLG1DQUEyQjtjQUEzQiwyQkFBMkIsRUFBRTtFQUNqQztJQUNFLGlCQUFpQixFQUFFO0VBQ3JCO0lBQ0Usb0JBQW9CO0lBQ3BCLGVBQWU7SUFDZixtQkFBbUI7SUFDbkIsa0JBQWtCO0lBQ2xCLHNCQUFzQjtJQUN0QixnQkFBZ0I7SUFDaEIsMEJBQTBCO0lBQzFCLGlCQUFpQjtJQUNqQixzQkFBc0IsRUFBRTtJQUN4QjtNQUNFLGdCQUFnQjtNQUNoQixxQkFBcUIsRUFBRTtFQUMzQjtJQUNFLFVBQVU7SUFDViw4QkFBOEI7SUFDOUIsa0JBQWtCLEVBQUU7SUFDcEI7TUFDRSxVQUFVO01BQ1Ysa0JBQWtCO01BQ2xCLHNCQUFzQixFQUFFO0lBQzFCO01BQ0UsZUFBZTtNQUNmLGdCQUFnQixFQUFFO01BQ2xCO1FBQ0UsZUFBZSxFQUFFO0lBQ3JCO01BQ0UsY0FBYyxFQUFFO0VBQ3BCO0lBQ0U7TUFDRSxjQUFjLEVBQUUsRUFBRTs7QUFFeEI7RUFDRSxZQUFRO01BQVIsUUFBUTtFQUNSLHFCQUFjO0VBQWQsY0FBYztFQUNkLDJCQUF1QjtNQUF2Qix1QkFBdUI7RUFDdkIsdUJBQW9CO01BQXBCLG9CQUFvQixFQUFFOztBQUV4QjtFQUNFLFlBQVk7RUFDWixpQkFBaUI7RUFDakIsa0JBQWtCLEVBQUU7O0FBRXRCO0VBQ0U7SUFDRSxvQkFBc0I7UUFBdEIsc0JBQXNCLEVBQUU7RUFDMUI7SUFDRSxrQkFBa0IsRUFBRSxFQUFFOztBQUUxQjtFQUNFO0lBQ0UsdUJBQW9CO1FBQXBCLG9CQUFvQixFQUFFO0VBQ3hCO0lBQ0UsZUFBZSxFQUFFLEVBQUU7O0FBRXZCO0VBQ0UscUJBQXFCO0VBQ3JCLGlDQUFpQztFQUNqQyxvQkFBb0IsRUFBRTtFQUN0QjtJQUNFLGdCQUFnQjtJQUNoQixtQkFBbUI7SUFDbkIscUJBQXFCO0lBQ3JCLGlCQUFpQixFQUFFO0lBQ25CO01BQ0UsaUJBQWlCLEVBQUU7RUFDdkI7SUFDRSxnQkFBZ0I7SUFDaEIsaUJBQWlCO0lBQ2pCLGtCQUFrQjtJQUNsQixxQkFBcUI7SUFDckIsd0JBQXdCO0lBQ3hCLGlCQUFpQixFQUFFO0lBQ25CO01BQ0UsaUJBQWlCLEVBQUU7RUFDdkI7SUFDRSxjQUFjLEVBQUU7RUFDbEI7SUFDRSwwQkFBMEI7SUFDMUIsc0JBQXNCO0lBQ3RCLGdCQUFnQixFQUFFO0VBQ3BCO0lBQ0UsZ0JBQWdCLEVBQUU7RUFDcEI7SUFDRSxnQkFBZ0I7SUFDaEIsMEJBQTBCO0lBQzFCLHNCQUFzQixFQUFFO0VBQzFCOztJQUVFLGdCQUFnQjtJQUNoQix3QkFBd0I7SUFDeEIsb0JBQW9CO0lBQ3BCLHFCQUFxQjtJQUNyQixlQUFlLEVBQUU7RUFDbkI7SUFDRSxnQkFBZ0IsRUFBRTtFQUNwQjtJQUNFLHNCQUFzQjtJQUN0QixtQkFBbUI7SUFDbkIsbUJBQW1CLEVBQUU7SUFDckI7TUFDRSxZQUFZO01BQ1osc0JBQXNCO01BQ3RCLFdBQVc7TUFDWCxZQUFZO01BQ1osb0JBQW9CO01BQ3BCLG1CQUFtQjtNQUNuQixVQUFVO01BQ1YsUUFBUTtNQUNSLG1CQUFtQixFQUFFO0lBQ3ZCO01BQ0UsZ0JBQWdCLEVBQUU7RUFDdEI7O0lBRUUsaUJBQWlCLEVBQUU7RUFDckI7SUFDRSxvQkFBb0I7SUFDcEIsbUJBQW1CO0lBQ25CLG1CQUFtQjtJQUNuQiw4QkFBOEI7SUFDOUIsZUFBZTtJQUNmLHNFQUFzRTtJQUN0RSxtQkFBbUI7SUFDbkIsYUFBYTtJQUNiLHdCQUF3QixFQUFFO0lBQzFCO01BQ0UsbUJBQW1CO01BQ25CLFVBQVU7TUFDVixXQUFXO01BQ1gsaUJBQWlCO01BQ2pCLGlCQUFpQjtNQUNqQixlQUFlLEVBQUU7SUFDbkI7TUFDRSxnQkFBZ0I7TUFDaEIsbUJBQW1CO01BQ25CLFdBQVc7TUFDWCx1QkFBdUI7TUFDdkIsbUJBQW1CLEVBQUU7TUFDckI7UUFDRSxpQkFBaUIsRUFBRTtJQUN2QjtNQUNFLGdCQUFnQjtNQUNoQixzQkFBc0IsRUFBRTtNQUN4QjtRQUNFLGVBQWU7UUFDZixpQkFBaUIsRUFBRTtFQUN6QjtJQUNFLGdCQUFnQixFQUFFO0VBQ3BCOztJQUVFLGFBQWE7SUFDYixvQkFBb0IsRUFBRTtFQUN4QjtJQUNFLGFBQWE7SUFDYixhQUFhO0lBQ2IsNEJBQTRCLEVBQUU7SUFDOUI7TUFDRSxZQUFZO01BQ1osbUJBQW1CO01BQ25CLG1CQUFtQixFQUFFO0lBQ3ZCO01BQ0UsMENBQTBDLEVBQUU7SUFDOUM7TUFDRSxlQUFlO01BQ2YsZ0JBQWdCO01BQ2hCLGlCQUFpQixFQUFFO0lBQ3JCO01BQ0U7UUFDRSxnQkFBZ0I7UUFDaEIsa0JBQWtCLEVBQUU7UUFDcEI7VUFDRSxlQUFlO1VBQ2YsbUJBQW1CLEVBQUUsRUFBRTtJQUM3QjtNQUNFO1FBQ0UsWUFBWSxFQUFFLEVBQUU7RUFDdEI7SUFDRSxpQkFBaUI7SUFDakIsb0JBQW9CO0lBQ3BCLG9CQUFvQjtJQUNwQix3QkFBd0I7SUFDeEIsZ0JBQWdCLEVBQUU7SUFDbEI7O01BRUUsaUJBQWlCO01BQ2pCLG9CQUFvQixFQUFFO0lBQ3hCO01BQ0UsMEJBQTBCLEVBQUU7SUFDOUI7TUFDRSw2QkFBNkI7TUFDN0IsaUJBQWlCLEVBQUU7O0FBRXpCO0VBQ0UsaUJBQWlCLEVBQUU7RUFDbkI7SUFDRSxhQUFhLEVBQUU7SUFDZjtNQUNFLHNCQUFzQjtNQUN0QiwrQkFBK0IsRUFBRTtJQUNuQztNQUNFLG1DQUEyQjtjQUEzQiwyQkFBMkIsRUFBRTtFQUNqQztJQUNFLDBCQUEwQjtJQUMxQixnQkFBZ0I7SUFDaEIsc0JBQXNCLEVBQUU7RUFDMUI7SUFDRSxtQkFBbUI7SUFDbkIsb0JBQW9CLEVBQUU7RUFDeEI7SUFDRSxhQUFhO0lBQ2IsY0FBYyxFQUFFO0VBQ2xCO0lBQ0UsZ0JBQWdCLEVBQUUiLCJmaWxlIjoicGFnZXMvY2FzZS1zdHVkaWVzLmNzcyIsInNvdXJjZXNDb250ZW50IjpbIiNwYWdlLWNhc2Utc3R1ZGllcyAuc3ViLWhlYWRlciAuZG93bmxvYWQge1xuICBwYWRkaW5nLXJpZ2h0OiAwO1xuICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xuICBsZXR0ZXItc3BhY2luZzogLjAyZW07XG4gIGZvbnQtc2l6ZTogMTJweDsgfVxuXG4jcGFnZS1jYXNlLXN0dWRpZXMgbWFpbiBoZ3JvdXAge1xuICBtYXJnaW4tdG9wOiAyNHB4O1xuICBtYXJnaW4tYm90dG9tOiA1M3B4OyB9XG4gIEBtZWRpYSAobWF4LXdpZHRoOiA3NjdweCkge1xuICAgICNwYWdlLWNhc2Utc3R1ZGllcyBtYWluIGhncm91cCB7XG4gICAgICBtYXJnaW4tYm90dG9tOiAwOyB9IH1cbiAgI3BhZ2UtY2FzZS1zdHVkaWVzIG1haW4gaGdyb3VwIHN0cm9uZyB7XG4gICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcbiAgICBmb250LXNpemU6IDExcHg7XG4gICAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgICBjb2xvcjogIzljYWJjNDtcbiAgICBmb250LWZhbWlseTogXCJFaW5hXCIsIFwiSGVsdmV0aWNhIE5ldWVcIiwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmOyB9XG4gICNwYWdlLWNhc2Utc3R1ZGllcyBtYWluIGhncm91cCBoNCB7XG4gICAgbWFyZ2luLXRvcDogNjJweDtcbiAgICBmb250LXNpemU6IDEycHg7XG4gICAgY29sb3I6ICM5MkExQjM7XG4gICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcbiAgICBsZXR0ZXItc3BhY2luZzogLjE0ZW07IH1cbiAgI3BhZ2UtY2FzZS1zdHVkaWVzIG1haW4gaGdyb3VwIGgxIHtcbiAgICBmb250LXNpemU6IDQ2cHg7XG4gICAgbWFyZ2luLXRvcDogNTZweDsgfVxuICAjcGFnZS1jYXNlLXN0dWRpZXMgbWFpbiBoZ3JvdXAgcCB7XG4gICAgZm9udC13ZWlnaHQ6IDQwMDtcbiAgICBjb2xvcjogIzg5ODk4OTtcbiAgICBtYXgtd2lkdGg6IDc1MHB4O1xuICAgIG1hcmdpbjogMTNweCBhdXRvO1xuICAgIGZvbnQtc2l6ZTogMjBweDtcbiAgICBsaW5lLWhlaWdodDogMS44ZW07XG4gICAgbGV0dGVyLXNwYWNpbmc6IC4wMWVtOyB9XG4gICNwYWdlLWNhc2Utc3R1ZGllcyBtYWluIGhncm91cCAuYnlsaW5lIHtcbiAgICBmb250LXN0eWxlOiBub3JtYWw7XG4gICAgZm9udC13ZWlnaHQ6IG5vcm1hbDtcbiAgICBsaW5lLWhlaWdodDogMjlweDtcbiAgICBmb250LXNpemU6IDE2cHg7XG4gICAgbGV0dGVyLXNwYWNpbmc6IC0wLjAyZW07XG4gICAgY29sb3I6ICM5MkExQjM7XG4gICAgbWFyZ2luLWJvdHRvbTogNDJweDsgfVxuICAgICNwYWdlLWNhc2Utc3R1ZGllcyBtYWluIGhncm91cCAuYnlsaW5lIC5hdmF0YXIge1xuICAgICAgd2lkdGg6IDI4cHg7XG4gICAgICBoZWlnaHQ6IDI4cHg7XG4gICAgICBtYXJnaW46IDAgOHB4IDAgMDtcbiAgICAgIGJvcmRlci1yYWRpdXM6IDUwJTtcbiAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsgfVxuICAgICNwYWdlLWNhc2Utc3R1ZGllcyBtYWluIGhncm91cCAuYnlsaW5lIC50YWdzIHtcbiAgICAgIHBhZGRpbmc6IDA7XG4gICAgICBtYXJnaW4tbGVmdDogNHB4O1xuICAgICAgbGlzdC1zdHlsZTogbm9uZTtcbiAgICAgIHZlcnRpY2FsLWFsaWduOiAycHg7XG4gICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7IH1cbiAgICAgICNwYWdlLWNhc2Utc3R1ZGllcyBtYWluIGhncm91cCAuYnlsaW5lIC50YWdzIGxpIHtcbiAgICAgICAgZm9udC1zaXplOiAxMHB4O1xuICAgICAgICBjb2xvcjogI2NlZDZlMDtcbiAgICAgICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XG4gICAgICAgIHBhZGRpbmc6IDNweCA1cHggNHB4O1xuICAgICAgICBsaW5lLWhlaWdodDogMWVtO1xuICAgICAgICBtYXJnaW4tcmlnaHQ6IDJweDtcbiAgICAgICAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgICAgICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4O1xuICAgICAgICBsZXR0ZXItc3BhY2luZzogMC4wOGVtO1xuICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogMXB4O1xuICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICNFOUVERjM7IH1cbiAgI3BhZ2UtY2FzZS1zdHVkaWVzIG1haW4gaGdyb3VwIGltZyB7XG4gICAgbWFyZ2luOiAyNHB4IGF1dG87XG4gICAgbWF4LXdpZHRoOiAxMDAlOyB9XG5cbiNwYWdlLWNhc2Utc3R1ZGllcyBtYWluIHtcbiAgZGlzcGxheTogZmxleDtcbiAgb3ZlcmZsb3c6IHZpc2libGU7XG4gIHBhZGRpbmctYm90dG9tOiAxNjBweDsgfVxuICBAbWVkaWEgKG1heC13aWR0aDogNzY4cHgpIHtcbiAgICAjcGFnZS1jYXNlLXN0dWRpZXMgbWFpbiB7XG4gICAgICBwYWRkaW5nLWJvdHRvbTogODBweDsgfSB9XG4gIEBtZWRpYSAobWF4LXdpZHRoOiA3NjdweCkge1xuICAgICNwYWdlLWNhc2Utc3R1ZGllcyBtYWluIHtcbiAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47IH0gfVxuXG4jcGFnZS1jYXNlLXN0dWRpZXMgLnN0aWNreS13cmFwcGVyIHtcbiAgcG9zaXRpb246IHN0aWNreTtcbiAgdG9wOiAxMjhweDsgfVxuXG4jcGFnZS1jYXNlLXN0dWRpZXMgYXNpZGUge1xuICBmbGV4OiAwIDEgMjA4cHg7XG4gIHBhZGRpbmctcmlnaHQ6IDIwcHg7XG4gIG1hcmdpbi1ib3R0b206IDA7XG4gIG1hcmdpbi10b3A6IDUycHg7IH1cbiAgI3BhZ2UtY2FzZS1zdHVkaWVzIGFzaWRlIGg0IHtcbiAgICBmb250LXNpemU6IDEwcHg7XG4gICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcbiAgICBjb2xvcjogI2E0YjNjYztcbiAgICBmb250LXdlaWdodDogNjAwO1xuICAgIGxldHRlci1zcGFjaW5nOiAuMTZlbTsgfVxuICAjcGFnZS1jYXNlLXN0dWRpZXMgYXNpZGUgdWwge1xuICAgIHBhZGRpbmc6IDA7XG4gICAgZm9udC1zaXplOiAxNHB4O1xuICAgIG1hcmdpbjogOXB4IDAgMzBweDtcbiAgICBsaXN0LXN0eWxlOiBub25lO1xuICAgIGxpbmUtaGVpZ2h0OiAxLjRlbTsgfVxuICAgIEBtZWRpYSAobWF4LXdpZHRoOiAxMjE5cHgpIHtcbiAgICAgICNwYWdlLWNhc2Utc3R1ZGllcyBhc2lkZSB1bCB7XG4gICAgICAgIGZvbnQtc2l6ZTogMTJweDsgfSB9XG4gICNwYWdlLWNhc2Utc3R1ZGllcyBhc2lkZSBsaSB7XG4gICAgbWFyZ2luOiAxMnB4IDAgMTNweDsgfVxuICAjcGFnZS1jYXNlLXN0dWRpZXMgYXNpZGUgYSB7XG4gICAgY29sb3I6ICM1MjY3OGM7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgdHJhbnNpdGlvbjogLjJzIHRyYW5zZm9ybSBlYXNlLCAuMnMgY29sb3I7IH1cbiAgICAjcGFnZS1jYXNlLXN0dWRpZXMgYXNpZGUgYTpob3ZlciwgI3BhZ2UtY2FzZS1zdHVkaWVzIGFzaWRlIGE6YWN0aXZlLCAjcGFnZS1jYXNlLXN0dWRpZXMgYXNpZGUgYTpmb2N1cywgI3BhZ2UtY2FzZS1zdHVkaWVzIGFzaWRlIGEuYWN0aXZlIHtcbiAgICAgIGNvbG9yOiAjNGE4YmZjO1xuICAgICAgdGV4dC1kZWNvcmF0aW9uOiBub25lOyB9XG4gICAgI3BhZ2UtY2FzZS1zdHVkaWVzIGFzaWRlIGEuYWN0aXZlIHtcbiAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCg4cHgpOyB9XG4gICNwYWdlLWNhc2Utc3R1ZGllcyBhc2lkZSAuYnRuIHtcbiAgICBtYXJnaW46IDAgMCAzMnB4OyB9XG4gICNwYWdlLWNhc2Utc3R1ZGllcyBhc2lkZSAubGlnaHRibHVlIHtcbiAgICBiYWNrZ3JvdW5kOiAjZTZmMGY4O1xuICAgIGNvbG9yOiAjNGE4YmZjO1xuICAgIGJvcmRlci1yYWRpdXM6IDRweDtcbiAgICBwYWRkaW5nOiA5cHggMTZweDtcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgZm9udC1zaXplOiAxMXB4O1xuICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XG4gICAgZm9udC13ZWlnaHQ6IDcwMDtcbiAgICBsZXR0ZXItc3BhY2luZzogLjA3ZW07IH1cbiAgICAjcGFnZS1jYXNlLXN0dWRpZXMgYXNpZGUgLmxpZ2h0Ymx1ZSBpb24taWNvbiB7XG4gICAgICBmb250LXNpemU6IDE4cHg7XG4gICAgICB2ZXJ0aWNhbC1hbGlnbjogLTVweDsgfVxuICAjcGFnZS1jYXNlLXN0dWRpZXMgYXNpZGUgLnNoYXJpbmcge1xuICAgIG1hcmdpbjogMDtcbiAgICBib3JkZXItdG9wOiAycHggc29saWQgI2YzZjVmOTtcbiAgICBwYWRkaW5nLXRvcDogMjZweDsgfVxuICAgICNwYWdlLWNhc2Utc3R1ZGllcyBhc2lkZSAuc2hhcmluZyBsaSB7XG4gICAgICBtYXJnaW46IDA7XG4gICAgICBtYXJnaW4tcmlnaHQ6IDZweDtcbiAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsgfVxuICAgICNwYWdlLWNhc2Utc3R1ZGllcyBhc2lkZSAuc2hhcmluZyBhIHtcbiAgICAgIGNvbG9yOiAjQ0JEMkREO1xuICAgICAgZm9udC1zaXplOiAyMHB4OyB9XG4gICAgICAjcGFnZS1jYXNlLXN0dWRpZXMgYXNpZGUgLnNoYXJpbmcgYTpob3ZlciB7XG4gICAgICAgIGNvbG9yOiAjNGE4YmZjOyB9XG4gICAgI3BhZ2UtY2FzZS1zdHVkaWVzIGFzaWRlIC5zaGFyaW5nICN3ZWItc2hhcmUge1xuICAgICAgZGlzcGxheTogbm9uZTsgfVxuICBAbWVkaWEgKG1heC13aWR0aDogNzY4cHgpIHtcbiAgICAjcGFnZS1jYXNlLXN0dWRpZXMgYXNpZGUge1xuICAgICAgZGlzcGxheTogbm9uZTsgfSB9XG5cbiNwYWdlLWNhc2Utc3R1ZGllcyAubWFpbi1jb2wge1xuICBmbGV4OiAxO1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICBhbGlnbi1pdGVtczogY2VudGVyOyB9XG5cbiNwYWdlLWNhc2Utc3R1ZGllcyAubWFpbi1jb2xfX2lubmVyIHtcbiAgd2lkdGg6IDEwMCU7XG4gIG1heC13aWR0aDogNjYzcHg7XG4gIG1hcmdpbi1sZWZ0OiA0MHB4OyB9XG5cbkBtZWRpYSAobWF4LXdpZHRoOiAxMjE5cHgpIHtcbiAgI3BhZ2UtY2FzZS1zdHVkaWVzIC5tYWluLWNvbCB7XG4gICAgYWxpZ24taXRlbXM6IGZsZXgtZW5kOyB9XG4gICNwYWdlLWNhc2Utc3R1ZGllcyAubWFpbi1jb2xfX2lubmVyIHtcbiAgICBtYXJnaW4tbGVmdDogMjBweDsgfSB9XG5cbkBtZWRpYSAobWF4LXdpZHRoOiA3NjhweCkge1xuICAjcGFnZS1jYXNlLXN0dWRpZXMgLm1haW4tY29sIHtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyOyB9XG4gICNwYWdlLWNhc2Utc3R1ZGllcyAubWFpbi1jb2xfX2lubmVyIHtcbiAgICBtYXJnaW4tbGVmdDogMDsgfSB9XG5cbiNwYWdlLWNhc2Utc3R1ZGllcyBhcnRpY2xlIHtcbiAgcGFkZGluZy1ib3R0b206IDU4cHg7XG4gIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjZWRmMGY2O1xuICBtYXJnaW4tYm90dG9tOiAzN3B4OyB9XG4gICNwYWdlLWNhc2Utc3R1ZGllcyBhcnRpY2xlIGgyIHtcbiAgICBmb250LXNpemU6IDMwcHg7XG4gICAgbWFyZ2luLXRvcDogMi42NWVtO1xuICAgIG1hcmdpbi1ib3R0b206IDAuOGVtO1xuICAgIGZvbnQtd2VpZ2h0OiA2MDA7IH1cbiAgICAjcGFnZS1jYXNlLXN0dWRpZXMgYXJ0aWNsZSBoMiBzdHJvbmcge1xuICAgICAgZm9udC13ZWlnaHQ6IDYwMDsgfVxuICAjcGFnZS1jYXNlLXN0dWRpZXMgYXJ0aWNsZSBoMyB7XG4gICAgZm9udC1zaXplOiAyMHB4O1xuICAgIGxpbmUtaGVpZ2h0OiAxLjM7XG4gICAgbWFyZ2luLXRvcDogMi4zZW07XG4gICAgbWFyZ2luLWJvdHRvbTogMS4yZW07XG4gICAgbGV0dGVyLXNwYWNpbmc6IC0uMDE0ZW07XG4gICAgZm9udC13ZWlnaHQ6IDYwMDsgfVxuICAgICNwYWdlLWNhc2Utc3R1ZGllcyBhcnRpY2xlIGgzIHN0cm9uZyB7XG4gICAgICBmb250LXdlaWdodDogNjAwOyB9XG4gICNwYWdlLWNhc2Utc3R1ZGllcyBhcnRpY2xlIGg0LCAjcGFnZS1jYXNlLXN0dWRpZXMgYXJ0aWNsZSBoNSwgI3BhZ2UtY2FzZS1zdHVkaWVzIGFydGljbGUgaDYge1xuICAgIG1hcmdpbjogMWVtIDA7IH1cbiAgI3BhZ2UtY2FzZS1zdHVkaWVzIGFydGljbGUgaDQge1xuICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XG4gICAgbGV0dGVyLXNwYWNpbmc6IDAuMWVtO1xuICAgIGZvbnQtc2l6ZTogMTRweDsgfVxuICAjcGFnZS1jYXNlLXN0dWRpZXMgYXJ0aWNsZSBoNSB7XG4gICAgZm9udC1zaXplOiAxNXB4OyB9XG4gICNwYWdlLWNhc2Utc3R1ZGllcyBhcnRpY2xlIGg2IHtcbiAgICBmb250LXNpemU6IDExcHg7XG4gICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcbiAgICBsZXR0ZXItc3BhY2luZzogMC4xZW07IH1cbiAgI3BhZ2UtY2FzZS1zdHVkaWVzIGFydGljbGUgcCxcbiAgI3BhZ2UtY2FzZS1zdHVkaWVzIGFydGljbGUgdWwge1xuICAgIGZvbnQtc2l6ZTogMTZweDtcbiAgICBsZXR0ZXItc3BhY2luZzogLS4wMTFlbTtcbiAgICBsaW5lLWhlaWdodDogMS43NWVtO1xuICAgIG1hcmdpbi1ib3R0b206IDEuOGVtO1xuICAgIGNvbG9yOiAjNUI3MDhCOyB9XG4gICNwYWdlLWNhc2Utc3R1ZGllcyBhcnRpY2xlIHVsIHtcbiAgICBwYWRkaW5nLWxlZnQ6IDA7IH1cbiAgI3BhZ2UtY2FzZS1zdHVkaWVzIGFydGljbGUgdWwgbGkge1xuICAgIGxpc3Qtc3R5bGUtdHlwZTogbm9uZTtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgcGFkZGluZy1sZWZ0OiAxOHB4OyB9XG4gICAgI3BhZ2UtY2FzZS1zdHVkaWVzIGFydGljbGUgdWwgbGk6YmVmb3JlIHtcbiAgICAgIGNvbnRlbnQ6ICcnO1xuICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgICAgd2lkdGg6IDZweDtcbiAgICAgIGhlaWdodDogNnB4O1xuICAgICAgYmFja2dyb3VuZDogI0IyQkVDRDtcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgIHRvcDogMTJweDtcbiAgICAgIGxlZnQ6IDA7XG4gICAgICBib3JkZXItcmFkaXVzOiA4cHg7IH1cbiAgICAjcGFnZS1jYXNlLXN0dWRpZXMgYXJ0aWNsZSB1bCBsaSArIGxpIHtcbiAgICAgIG1hcmdpbi10b3A6IDhweDsgfVxuICAjcGFnZS1jYXNlLXN0dWRpZXMgYXJ0aWNsZSBiLFxuICAjcGFnZS1jYXNlLXN0dWRpZXMgYXJ0aWNsZSBzdHJvbmcge1xuICAgIGZvbnQtd2VpZ2h0OiA1MDA7IH1cbiAgI3BhZ2UtY2FzZS1zdHVkaWVzIGFydGljbGUgYmxvY2txdW90ZSB7XG4gICAgYmFja2dyb3VuZDogI2YyZjVmODtcbiAgICBib3JkZXItcmFkaXVzOiA0cHg7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIHBhZGRpbmc6IDY0cHggODBweCA2OHB4IDExMXB4O1xuICAgIGNvbG9yOiAjNWU3NDlhO1xuICAgIGZvbnQtZmFtaWx5OiBcIkFkb2JlIENhc2xvblwiLCBHZW9yZ2lhLCBUaW1lcywgXCJUaW1lcyBOZXcgUm9tYW5cIiwgc2VyaWY7XG4gICAgZm9udC1zdHlsZTogaXRhbGljO1xuICAgIGJvcmRlcjogbm9uZTtcbiAgICBtYXJnaW46IDc3cHggLTE2cHggNTRweDsgfVxuICAgICNwYWdlLWNhc2Utc3R1ZGllcyBhcnRpY2xlIGJsb2NrcXVvdGU6OmJlZm9yZSB7XG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICB0b3A6IC02cHg7XG4gICAgICBsZWZ0OiA1NHB4O1xuICAgICAgZm9udC1zaXplOiAxODBweDtcbiAgICAgIGNvbnRlbnQ6ICdcXDIwMUMnO1xuICAgICAgY29sb3I6ICNlM2U3ZWM7IH1cbiAgICAjcGFnZS1jYXNlLXN0dWRpZXMgYXJ0aWNsZSBibG9ja3F1b3RlIHAge1xuICAgICAgZm9udC1zaXplOiAxOHB4O1xuICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICAgei1pbmRleDogMTtcbiAgICAgIGxldHRlci1zcGFjaW5nOiAuMDIyZW07XG4gICAgICBsaW5lLWhlaWdodDogMS44ZW07IH1cbiAgICAgICNwYWdlLWNhc2Utc3R1ZGllcyBhcnRpY2xlIGJsb2NrcXVvdGUgcDpsYXN0LWNoaWxkIHtcbiAgICAgICAgbWFyZ2luLWJvdHRvbTogMDsgfVxuICAgICNwYWdlLWNhc2Utc3R1ZGllcyBhcnRpY2xlIGJsb2NrcXVvdGUgY2l0ZSB7XG4gICAgICBmb250LXNpemU6IDE1cHg7XG4gICAgICBsZXR0ZXItc3BhY2luZzogLjAyZW07IH1cbiAgICAgICNwYWdlLWNhc2Utc3R1ZGllcyBhcnRpY2xlIGJsb2NrcXVvdGUgY2l0ZSBzcGFuIHtcbiAgICAgICAgY29sb3I6ICM5ZGE5YmQ7XG4gICAgICAgIG1hcmdpbi1sZWZ0OiA4cHg7IH1cbiAgI3BhZ2UtY2FzZS1zdHVkaWVzIGFydGljbGUgaW1nIHtcbiAgICBtYXgtd2lkdGg6IDEwMCU7IH1cbiAgI3BhZ2UtY2FzZS1zdHVkaWVzIGFydGljbGUgcHJlLFxuICAjcGFnZS1jYXNlLXN0dWRpZXMgYXJ0aWNsZSBjb2RlIHtcbiAgICBib3JkZXI6IG5vbmU7XG4gICAgYmFja2dyb3VuZDogI2Y1ZjdmYTsgfVxuICAjcGFnZS1jYXNlLXN0dWRpZXMgYXJ0aWNsZSBmaWd1cmUge1xuICAgIHdpZHRoOiAyOTVweDtcbiAgICBmbG9hdDogcmlnaHQ7XG4gICAgbWFyZ2luOiA4cHggLTIwcHggMTZweCA3NHB4OyB9XG4gICAgI3BhZ2UtY2FzZS1zdHVkaWVzIGFydGljbGUgZmlndXJlLmxlZnQge1xuICAgICAgZmxvYXQ6IGxlZnQ7XG4gICAgICBtYXJnaW4tcmlnaHQ6IDc0cHg7XG4gICAgICBtYXJnaW4tbGVmdDogLTIwcHg7IH1cbiAgICAjcGFnZS1jYXNlLXN0dWRpZXMgYXJ0aWNsZSBmaWd1cmUgaW1nIHtcbiAgICAgIGJveC1zaGFkb3c6IDAgNHB4IDQ4cHggcmdiYSgwLCAwLCAwLCAwLjIpOyB9XG4gICAgI3BhZ2UtY2FzZS1zdHVkaWVzIGFydGljbGUgZmlndXJlIGZpZ2NhcHRpb24ge1xuICAgICAgY29sb3I6ICNhOGIwYmU7XG4gICAgICBmb250LXNpemU6IDExcHg7XG4gICAgICBtYXJnaW4tdG9wOiAxM3B4OyB9XG4gICAgQG1lZGlhIChtYXgtd2lkdGg6IDc2N3B4KSB7XG4gICAgICAjcGFnZS1jYXNlLXN0dWRpZXMgYXJ0aWNsZSBmaWd1cmUge1xuICAgICAgICBtYXJnaW4tcmlnaHQ6IDA7XG4gICAgICAgIG1hcmdpbi1sZWZ0OiAzMnB4OyB9XG4gICAgICAgICNwYWdlLWNhc2Utc3R1ZGllcyBhcnRpY2xlIGZpZ3VyZS5sZWZ0IHtcbiAgICAgICAgICBtYXJnaW4tbGVmdDogMDtcbiAgICAgICAgICBtYXJnaW4tcmlnaHQ6IDMycHg7IH0gfVxuICAgIEBtZWRpYSAobWF4LXdpZHRoOiA0ODBweCkge1xuICAgICAgI3BhZ2UtY2FzZS1zdHVkaWVzIGFydGljbGUgZmlndXJlIHtcbiAgICAgICAgd2lkdGg6IDEwMCU7IH0gfVxuICAjcGFnZS1jYXNlLXN0dWRpZXMgYXJ0aWNsZSAudGFibGUtd3JhcCB7XG4gICAgb3ZlcmZsb3cteDogYXV0bztcbiAgICBtYXJnaW4tcmlnaHQ6IC0xNXB4O1xuICAgIHBhZGRpbmctcmlnaHQ6IDE1cHg7XG4gICAgYm94LXNpemluZzogY29udGVudC1ib3g7XG4gICAgZm9udC1zaXplOiAxM3B4OyB9XG4gICAgI3BhZ2UtY2FzZS1zdHVkaWVzIGFydGljbGUgLnRhYmxlLXdyYXAgdGQsXG4gICAgI3BhZ2UtY2FzZS1zdHVkaWVzIGFydGljbGUgLnRhYmxlLXdyYXAgdGgge1xuICAgICAgbWluLXdpZHRoOiAxMjBweDtcbiAgICAgIHBhZGRpbmctcmlnaHQ6IDEycHg7IH1cbiAgICAjcGFnZS1jYXNlLXN0dWRpZXMgYXJ0aWNsZSAudGFibGUtd3JhcCB0YWJsZSB0Ym9keSB0ciB0ZCB7XG4gICAgICBib3JkZXItdG9wLWNvbG9yOiAjREVFM0VBOyB9XG4gICAgI3BhZ2UtY2FzZS1zdHVkaWVzIGFydGljbGUgLnRhYmxlLXdyYXAgdGFibGUgPiB0aGVhZCA+IHRyID4gdGgge1xuICAgICAgYm9yZGVyLWJvdHRvbS1jb2xvcjogI0U5RURGMztcbiAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7IH1cblxuI3BhZ2UtY2FzZS1zdHVkaWVzIC5yZXNvdXJjZS1saXN0IHtcbiAgbWFyZ2luLWJvdHRvbTogMDsgfVxuICAjcGFnZS1jYXNlLXN0dWRpZXMgLnJlc291cmNlLWxpc3RfX2hlYWRlciAuYWxsIHtcbiAgICBmbG9hdDogcmlnaHQ7IH1cbiAgICAjcGFnZS1jYXNlLXN0dWRpZXMgLnJlc291cmNlLWxpc3RfX2hlYWRlciAuYWxsIGlvbi1pY29uIHtcbiAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICAgIHRyYW5zaXRpb246IC4ycyB0cmFuc2Zvcm0gZWFzZTsgfVxuICAgICNwYWdlLWNhc2Utc3R1ZGllcyAucmVzb3VyY2UtbGlzdF9faGVhZGVyIC5hbGw6aG92ZXIgaW9uLWljb24ge1xuICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKDJweCk7IH1cbiAgI3BhZ2UtY2FzZS1zdHVkaWVzIC5yZXNvdXJjZS1saXN0X19oZWFkZXIgaDQge1xuICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XG4gICAgZm9udC1zaXplOiAxNHB4O1xuICAgIGxldHRlci1zcGFjaW5nOiAuMTJlbTsgfVxuICAjcGFnZS1jYXNlLXN0dWRpZXMgLnJlc291cmNlLWxpc3QgLnJlc291cmNlLWNhcmQtbGlzdCB7XG4gICAgbWFyZ2luLWxlZnQ6IC0xMHB4O1xuICAgIG1hcmdpbi1yaWdodDogLTEwcHg7IH1cbiAgI3BhZ2UtY2FzZS1zdHVkaWVzIC5yZXNvdXJjZS1saXN0IC5yZXNvdXJjZS1jYXJkLWxpc3QtLXRoaXJkIC5yZXNvdXJjZS1jYXJkIHtcbiAgICBwYWRkaW5nOiA1cHg7XG4gICAgaGVpZ2h0OiAyMTRweDsgfVxuICAjcGFnZS1jYXNlLXN0dWRpZXMgLnJlc291cmNlLWxpc3QgLnJlc291cmNlLWNhcmQtbGlzdC0tdGhpcmQgLnJlc291cmNlLWNhcmQgYSAudGl0bGUge1xuICAgIGZvbnQtc2l6ZTogMThweDsgfVxuIl19 */\n"
  },
  {
    "path": "content/css/pages/contact.css",
    "content": "#page-contact .navbar + .banner {\n  background: #6e4a71 no-repeat center top;\n  background-image: url(\"/img/contact/contact-cta-bg.jpg\"), linear-gradient(to right, #29477d 0%, #a8444e 100%);\n  background-size: cover, 100%;\n  height: 360px; }\n\n#page-contact .hero {\n  padding-top: 80px;\n  padding-bottom: 40px; }\n  #page-contact .hero p {\n    color: #5d636c;\n    font-size: 18px;\n    line-height: 28px;\n    font-weight: 400; }\n\n#page-contact .topics {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-wrap: wrap;\n      flex-wrap: wrap;\n  -ms-flex-pack: distribute;\n      justify-content: space-around; }\n  #page-contact .topics a {\n    -ms-flex: 0 1 255px;\n        flex: 0 1 255px;\n    padding: 150px 25px 15px;\n    margin: 0 auto 100px;\n    position: relative;\n    text-align: center;\n    min-height: 265px;\n    min-width: 160px; }\n    #page-contact .topics a:before {\n      background: no-repeat top left url(\"/img/contact/contact-icons.png\");\n      background-size: 140px;\n      width: 140px;\n      height: 140px;\n      content: '';\n      position: absolute;\n      top: 38px;\n      left: calc(50% - 75px);\n      transition: -webkit-transform 0.4s cubic-bezier(0.155, 1.105, 0.295, 1.12);\n      transition: transform 0.4s cubic-bezier(0.155, 1.105, 0.295, 1.12);\n      transition: transform 0.4s cubic-bezier(0.155, 1.105, 0.295, 1.12), -webkit-transform 0.4s cubic-bezier(0.155, 1.105, 0.295, 1.12); }\n    #page-contact .topics a:after {\n      position: absolute;\n      top: 0;\n      right: 0;\n      bottom: 0;\n      left: 0;\n      content: '';\n      border: 1px solid #e6ebf2;\n      border-radius: 4px;\n      box-shadow: 0 1px 3px 0 rgba(0, 0, 0, 0.06);\n      transition: all 0.4s cubic-bezier(0.155, 1.105, 0.295, 1.12); }\n    #page-contact .topics a:hover, #page-contact .topics a:active {\n      text-decoration: none; }\n      #page-contact .topics a:hover:before, #page-contact .topics a:active:before {\n        -webkit-transform: translate3d(0, -50px, 0) scale3d(0.5, 0.5, 1);\n                transform: translate3d(0, -50px, 0) scale3d(0.5, 0.5, 1); }\n      #page-contact .topics a:hover:after, #page-contact .topics a:active:after {\n        border-color: #dde3eb;\n        -webkit-transform: scale(1.05);\n                transform: scale(1.05); }\n      #page-contact .topics a:hover .detail, #page-contact .topics a:active .detail {\n        opacity: 1;\n        -webkit-transform: translate3d(0, 0, 0);\n                transform: translate3d(0, 0, 0);\n        transition-duration: .2s;\n        transition-timing-function: ease; }\n      #page-contact .topics a:hover h3, #page-contact .topics a:active h3 {\n        -webkit-transform: translate3d(0, -92px, 0);\n                transform: translate3d(0, -92px, 0); }\n    #page-contact .topics a h3 {\n      font-size: 18px;\n      position: absolute;\n      font-weight: 600;\n      top: 195px;\n      left: 0;\n      right: 0;\n      color: #4C555A;\n      transition: -webkit-transform 0.4s cubic-bezier(0.155, 1.105, 0.295, 1.12);\n      transition: transform 0.4s cubic-bezier(0.155, 1.105, 0.295, 1.12);\n      transition: transform 0.4s cubic-bezier(0.155, 1.105, 0.295, 1.12), -webkit-transform 0.4s cubic-bezier(0.155, 1.105, 0.295, 1.12); }\n    #page-contact .topics a .detail {\n      opacity: 0;\n      position: relative;\n      -webkit-transform: translate3d(0, 35px, 0);\n              transform: translate3d(0, 35px, 0);\n      transition: opacity .1s linear, -webkit-transform .1s linear;\n      transition: opacity .1s linear, transform .1s linear;\n      transition: opacity .1s linear, transform .1s linear, -webkit-transform .1s linear; }\n      #page-contact .topics a .detail p {\n        line-height: 20px;\n        font-size: 13px;\n        letter-spacing: -0.01em;\n        padding: 0 13px;\n        color: #576070; }\n    #page-contact .topics a.sales:before {\n      background-position: left -140px; }\n    #page-contact .topics a.press:before {\n      background-position: left -280px; }\n    #page-contact .topics a.partnerships:before {\n      background-position: left -420px; }\n\n#page-contact .other {\n  max-width: 875px;\n  padding-bottom: 100px; }\n  #page-contact .other hgroup {\n    width: 49.5%;\n    padding-right: 50px;\n    position: relative;\n    float: left; }\n    #page-contact .other hgroup:last-child {\n      padding-right: 0;\n      padding-left: 50px; }\n      #page-contact .other hgroup:last-child:before {\n        content: '';\n        position: absolute;\n        left: 0;\n        top: 15px;\n        bottom: 15px;\n        border-left: 1px solid #f9fafb; }\n    #page-contact .other hgroup h4 {\n      font-size: 16px; }\n    #page-contact .other hgroup p {\n      line-height: 22px;\n      margin-bottom: 3px;\n      color: #576070;\n      font-size: 14px; }\n    #page-contact .other hgroup:first-child a {\n      margin-right: 18px; }\n    #page-contact .other hgroup .icon {\n      font-size: 20px;\n      position: relative;\n      top: 2px; }\n    #page-contact .other hgroup .twitter {\n      color: #5ea9dc; }\n      #page-contact .other hgroup .twitter:hover {\n        color: #88bfe5; }\n    #page-contact .other hgroup .facebook {\n      color: #3b5998; }\n      #page-contact .other hgroup .facebook:hover {\n        color: #5f7ec1; }\n    #page-contact .other hgroup .goolge-plus {\n      color: #e94335; }\n      #page-contact .other hgroup .goolge-plus:hover {\n        color: #f1837a; }\n    #page-contact .other hgroup .github {\n      color: #000000; }\n      #page-contact .other hgroup .github:hover {\n        color: #4d4c4c; }\n\n/*# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImNvbnRhY3QuY3NzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0VBQ0UseUNBQXlDO0VBQ3pDLDhHQUE4RztFQUM5Ryw2QkFBNkI7RUFDN0IsY0FBYyxFQUFFOztBQUVsQjtFQUNFLGtCQUFrQjtFQUNsQixxQkFBcUIsRUFBRTtFQUN2QjtJQUNFLGVBQWU7SUFDZixnQkFBZ0I7SUFDaEIsa0JBQWtCO0lBQ2xCLGlCQUFpQixFQUFFOztBQUV2QjtFQUNFLHFCQUFjO0VBQWQsY0FBYztFQUNkLG9CQUFnQjtNQUFoQixnQkFBZ0I7RUFDaEIsMEJBQThCO01BQTlCLDhCQUE4QixFQUFFO0VBQ2hDO0lBQ0Usb0JBQWdCO1FBQWhCLGdCQUFnQjtJQUNoQix5QkFBeUI7SUFDekIscUJBQXFCO0lBQ3JCLG1CQUFtQjtJQUNuQixtQkFBbUI7SUFDbkIsa0JBQWtCO0lBQ2xCLGlCQUFpQixFQUFFO0lBQ25CO01BQ0UscUVBQXFFO01BQ3JFLHVCQUF1QjtNQUN2QixhQUFhO01BQ2IsY0FBYztNQUNkLFlBQVk7TUFDWixtQkFBbUI7TUFDbkIsVUFBVTtNQUNWLHVCQUF1QjtNQUN2QiwyRUFBbUU7TUFBbkUsbUVBQW1FO01BQW5FLG1JQUFtRSxFQUFFO0lBQ3ZFO01BQ0UsbUJBQW1CO01BQ25CLE9BQU87TUFDUCxTQUFTO01BQ1QsVUFBVTtNQUNWLFFBQVE7TUFDUixZQUFZO01BQ1osMEJBQTBCO01BQzFCLG1CQUFtQjtNQUNuQiw0Q0FBNEM7TUFDNUMsNkRBQTZELEVBQUU7SUFDakU7TUFDRSxzQkFBc0IsRUFBRTtNQUN4QjtRQUNFLGlFQUF5RDtnQkFBekQseURBQXlELEVBQUU7TUFDN0Q7UUFDRSxzQkFBc0I7UUFDdEIsK0JBQXVCO2dCQUF2Qix1QkFBdUIsRUFBRTtNQUMzQjtRQUNFLFdBQVc7UUFDWCx3Q0FBZ0M7Z0JBQWhDLGdDQUFnQztRQUNoQyx5QkFBeUI7UUFDekIsaUNBQWlDLEVBQUU7TUFDckM7UUFDRSw0Q0FBb0M7Z0JBQXBDLG9DQUFvQyxFQUFFO0lBQzFDO01BQ0UsZ0JBQWdCO01BQ2hCLG1CQUFtQjtNQUNuQixpQkFBaUI7TUFDakIsV0FBVztNQUNYLFFBQVE7TUFDUixTQUFTO01BQ1QsZUFBZTtNQUNmLDJFQUFtRTtNQUFuRSxtRUFBbUU7TUFBbkUsbUlBQW1FLEVBQUU7SUFDdkU7TUFDRSxXQUFXO01BQ1gsbUJBQW1CO01BQ25CLDJDQUFtQztjQUFuQyxtQ0FBbUM7TUFDbkMsNkRBQXFEO01BQXJELHFEQUFxRDtNQUFyRCxtRkFBcUQsRUFBRTtNQUN2RDtRQUNFLGtCQUFrQjtRQUNsQixnQkFBZ0I7UUFDaEIsd0JBQXdCO1FBQ3hCLGdCQUFnQjtRQUNoQixlQUFlLEVBQUU7SUFDckI7TUFDRSxpQ0FBaUMsRUFBRTtJQUNyQztNQUNFLGlDQUFpQyxFQUFFO0lBQ3JDO01BQ0UsaUNBQWlDLEVBQUU7O0FBRXpDO0VBQ0UsaUJBQWlCO0VBQ2pCLHNCQUFzQixFQUFFO0VBQ3hCO0lBQ0UsYUFBYTtJQUNiLG9CQUFvQjtJQUNwQixtQkFBbUI7SUFDbkIsWUFBWSxFQUFFO0lBQ2Q7TUFDRSxpQkFBaUI7TUFDakIsbUJBQW1CLEVBQUU7TUFDckI7UUFDRSxZQUFZO1FBQ1osbUJBQW1CO1FBQ25CLFFBQVE7UUFDUixVQUFVO1FBQ1YsYUFBYTtRQUNiLCtCQUErQixFQUFFO0lBQ3JDO01BQ0UsZ0JBQWdCLEVBQUU7SUFDcEI7TUFDRSxrQkFBa0I7TUFDbEIsbUJBQW1CO01BQ25CLGVBQWU7TUFDZixnQkFBZ0IsRUFBRTtJQUNwQjtNQUNFLG1CQUFtQixFQUFFO0lBQ3ZCO01BQ0UsZ0JBQWdCO01BQ2hCLG1CQUFtQjtNQUNuQixTQUFTLEVBQUU7SUFDYjtNQUNFLGVBQWUsRUFBRTtNQUNqQjtRQUNFLGVBQWUsRUFBRTtJQUNyQjtNQUNFLGVBQWUsRUFBRTtNQUNqQjtRQUNFLGVBQWUsRUFBRTtJQUNyQjtNQUNFLGVBQWUsRUFBRTtNQUNqQjtRQUNFLGVBQWUsRUFBRTtJQUNyQjtNQUNFLGVBQWUsRUFBRTtNQUNqQjtRQUNFLGVBQWUsRUFBRSIsImZpbGUiOiJwYWdlcy9jb250YWN0LmNzcyIsInNvdXJjZXNDb250ZW50IjpbIiNwYWdlLWNvbnRhY3QgLm5hdmJhciArIC5iYW5uZXIge1xuICBiYWNrZ3JvdW5kOiAjNmU0YTcxIG5vLXJlcGVhdCBjZW50ZXIgdG9wO1xuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXCIvaW1nL2NvbnRhY3QvY29udGFjdC1jdGEtYmcuanBnXCIpLCBsaW5lYXItZ3JhZGllbnQodG8gcmlnaHQsICMyOTQ3N2QgMCUsICNhODQ0NGUgMTAwJSk7XG4gIGJhY2tncm91bmQtc2l6ZTogY292ZXIsIDEwMCU7XG4gIGhlaWdodDogMzYwcHg7IH1cblxuI3BhZ2UtY29udGFjdCAuaGVybyB7XG4gIHBhZGRpbmctdG9wOiA4MHB4O1xuICBwYWRkaW5nLWJvdHRvbTogNDBweDsgfVxuICAjcGFnZS1jb250YWN0IC5oZXJvIHAge1xuICAgIGNvbG9yOiAjNWQ2MzZjO1xuICAgIGZvbnQtc2l6ZTogMThweDtcbiAgICBsaW5lLWhlaWdodDogMjhweDtcbiAgICBmb250LXdlaWdodDogNDAwOyB9XG5cbiNwYWdlLWNvbnRhY3QgLnRvcGljcyB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtd3JhcDogd3JhcDtcbiAganVzdGlmeS1jb250ZW50OiBzcGFjZS1hcm91bmQ7IH1cbiAgI3BhZ2UtY29udGFjdCAudG9waWNzIGEge1xuICAgIGZsZXg6IDAgMSAyNTVweDtcbiAgICBwYWRkaW5nOiAxNTBweCAyNXB4IDE1cHg7XG4gICAgbWFyZ2luOiAwIGF1dG8gMTAwcHg7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICBtaW4taGVpZ2h0OiAyNjVweDtcbiAgICBtaW4td2lkdGg6IDE2MHB4OyB9XG4gICAgI3BhZ2UtY29udGFjdCAudG9waWNzIGE6YmVmb3JlIHtcbiAgICAgIGJhY2tncm91bmQ6IG5vLXJlcGVhdCB0b3AgbGVmdCB1cmwoXCIvaW1nL2NvbnRhY3QvY29udGFjdC1pY29ucy5wbmdcIik7XG4gICAgICBiYWNrZ3JvdW5kLXNpemU6IDE0MHB4O1xuICAgICAgd2lkdGg6IDE0MHB4O1xuICAgICAgaGVpZ2h0OiAxNDBweDtcbiAgICAgIGNvbnRlbnQ6ICcnO1xuICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgdG9wOiAzOHB4O1xuICAgICAgbGVmdDogY2FsYyg1MCUgLSA3NXB4KTtcbiAgICAgIHRyYW5zaXRpb246IHRyYW5zZm9ybSAwLjRzIGN1YmljLWJlemllcigwLjE1NSwgMS4xMDUsIDAuMjk1LCAxLjEyKTsgfVxuICAgICNwYWdlLWNvbnRhY3QgLnRvcGljcyBhOmFmdGVyIHtcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgIHRvcDogMDtcbiAgICAgIHJpZ2h0OiAwO1xuICAgICAgYm90dG9tOiAwO1xuICAgICAgbGVmdDogMDtcbiAgICAgIGNvbnRlbnQ6ICcnO1xuICAgICAgYm9yZGVyOiAxcHggc29saWQgI2U2ZWJmMjtcbiAgICAgIGJvcmRlci1yYWRpdXM6IDRweDtcbiAgICAgIGJveC1zaGFkb3c6IDAgMXB4IDNweCAwIHJnYmEoMCwgMCwgMCwgMC4wNik7XG4gICAgICB0cmFuc2l0aW9uOiBhbGwgMC40cyBjdWJpYy1iZXppZXIoMC4xNTUsIDEuMTA1LCAwLjI5NSwgMS4xMik7IH1cbiAgICAjcGFnZS1jb250YWN0IC50b3BpY3MgYTpob3ZlciwgI3BhZ2UtY29udGFjdCAudG9waWNzIGE6YWN0aXZlIHtcbiAgICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTsgfVxuICAgICAgI3BhZ2UtY29udGFjdCAudG9waWNzIGE6aG92ZXI6YmVmb3JlLCAjcGFnZS1jb250YWN0IC50b3BpY3MgYTphY3RpdmU6YmVmb3JlIHtcbiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUzZCgwLCAtNTBweCwgMCkgc2NhbGUzZCgwLjUsIDAuNSwgMSk7IH1cbiAgICAgICNwYWdlLWNvbnRhY3QgLnRvcGljcyBhOmhvdmVyOmFmdGVyLCAjcGFnZS1jb250YWN0IC50b3BpY3MgYTphY3RpdmU6YWZ0ZXIge1xuICAgICAgICBib3JkZXItY29sb3I6ICNkZGUzZWI7XG4gICAgICAgIHRyYW5zZm9ybTogc2NhbGUoMS4wNSk7IH1cbiAgICAgICNwYWdlLWNvbnRhY3QgLnRvcGljcyBhOmhvdmVyIC5kZXRhaWwsICNwYWdlLWNvbnRhY3QgLnRvcGljcyBhOmFjdGl2ZSAuZGV0YWlsIHtcbiAgICAgICAgb3BhY2l0eTogMTtcbiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUzZCgwLCAwLCAwKTtcbiAgICAgICAgdHJhbnNpdGlvbi1kdXJhdGlvbjogLjJzO1xuICAgICAgICB0cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbjogZWFzZTsgfVxuICAgICAgI3BhZ2UtY29udGFjdCAudG9waWNzIGE6aG92ZXIgaDMsICNwYWdlLWNvbnRhY3QgLnRvcGljcyBhOmFjdGl2ZSBoMyB7XG4gICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlM2QoMCwgLTkycHgsIDApOyB9XG4gICAgI3BhZ2UtY29udGFjdCAudG9waWNzIGEgaDMge1xuICAgICAgZm9udC1zaXplOiAxOHB4O1xuICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgICAgIHRvcDogMTk1cHg7XG4gICAgICBsZWZ0OiAwO1xuICAgICAgcmlnaHQ6IDA7XG4gICAgICBjb2xvcjogIzRDNTU1QTtcbiAgICAgIHRyYW5zaXRpb246IHRyYW5zZm9ybSAwLjRzIGN1YmljLWJlemllcigwLjE1NSwgMS4xMDUsIDAuMjk1LCAxLjEyKTsgfVxuICAgICNwYWdlLWNvbnRhY3QgLnRvcGljcyBhIC5kZXRhaWwge1xuICAgICAgb3BhY2l0eTogMDtcbiAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlM2QoMCwgMzVweCwgMCk7XG4gICAgICB0cmFuc2l0aW9uOiBvcGFjaXR5IC4xcyBsaW5lYXIsIHRyYW5zZm9ybSAuMXMgbGluZWFyOyB9XG4gICAgICAjcGFnZS1jb250YWN0IC50b3BpY3MgYSAuZGV0YWlsIHAge1xuICAgICAgICBsaW5lLWhlaWdodDogMjBweDtcbiAgICAgICAgZm9udC1zaXplOiAxM3B4O1xuICAgICAgICBsZXR0ZXItc3BhY2luZzogLTAuMDFlbTtcbiAgICAgICAgcGFkZGluZzogMCAxM3B4O1xuICAgICAgICBjb2xvcjogIzU3NjA3MDsgfVxuICAgICNwYWdlLWNvbnRhY3QgLnRvcGljcyBhLnNhbGVzOmJlZm9yZSB7XG4gICAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiBsZWZ0IC0xNDBweDsgfVxuICAgICNwYWdlLWNvbnRhY3QgLnRvcGljcyBhLnByZXNzOmJlZm9yZSB7XG4gICAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiBsZWZ0IC0yODBweDsgfVxuICAgICNwYWdlLWNvbnRhY3QgLnRvcGljcyBhLnBhcnRuZXJzaGlwczpiZWZvcmUge1xuICAgICAgYmFja2dyb3VuZC1wb3NpdGlvbjogbGVmdCAtNDIwcHg7IH1cblxuI3BhZ2UtY29udGFjdCAub3RoZXIge1xuICBtYXgtd2lkdGg6IDg3NXB4O1xuICBwYWRkaW5nLWJvdHRvbTogMTAwcHg7IH1cbiAgI3BhZ2UtY29udGFjdCAub3RoZXIgaGdyb3VwIHtcbiAgICB3aWR0aDogNDkuNSU7XG4gICAgcGFkZGluZy1yaWdodDogNTBweDtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgZmxvYXQ6IGxlZnQ7IH1cbiAgICAjcGFnZS1jb250YWN0IC5vdGhlciBoZ3JvdXA6bGFzdC1jaGlsZCB7XG4gICAgICBwYWRkaW5nLXJpZ2h0OiAwO1xuICAgICAgcGFkZGluZy1sZWZ0OiA1MHB4OyB9XG4gICAgICAjcGFnZS1jb250YWN0IC5vdGhlciBoZ3JvdXA6bGFzdC1jaGlsZDpiZWZvcmUge1xuICAgICAgICBjb250ZW50OiAnJztcbiAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICBsZWZ0OiAwO1xuICAgICAgICB0b3A6IDE1cHg7XG4gICAgICAgIGJvdHRvbTogMTVweDtcbiAgICAgICAgYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjZjlmYWZiOyB9XG4gICAgI3BhZ2UtY29udGFjdCAub3RoZXIgaGdyb3VwIGg0IHtcbiAgICAgIGZvbnQtc2l6ZTogMTZweDsgfVxuICAgICNwYWdlLWNvbnRhY3QgLm90aGVyIGhncm91cCBwIHtcbiAgICAgIGxpbmUtaGVpZ2h0OiAyMnB4O1xuICAgICAgbWFyZ2luLWJvdHRvbTogM3B4O1xuICAgICAgY29sb3I6ICM1NzYwNzA7XG4gICAgICBmb250LXNpemU6IDE0cHg7IH1cbiAgICAjcGFnZS1jb250YWN0IC5vdGhlciBoZ3JvdXA6Zmlyc3QtY2hpbGQgYSB7XG4gICAgICBtYXJnaW4tcmlnaHQ6IDE4cHg7IH1cbiAgICAjcGFnZS1jb250YWN0IC5vdGhlciBoZ3JvdXAgLmljb24ge1xuICAgICAgZm9udC1zaXplOiAyMHB4O1xuICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICAgdG9wOiAycHg7IH1cbiAgICAjcGFnZS1jb250YWN0IC5vdGhlciBoZ3JvdXAgLnR3aXR0ZXIge1xuICAgICAgY29sb3I6ICM1ZWE5ZGM7IH1cbiAgICAgICNwYWdlLWNvbnRhY3QgLm90aGVyIGhncm91cCAudHdpdHRlcjpob3ZlciB7XG4gICAgICAgIGNvbG9yOiAjODhiZmU1OyB9XG4gICAgI3BhZ2UtY29udGFjdCAub3RoZXIgaGdyb3VwIC5mYWNlYm9vayB7XG4gICAgICBjb2xvcjogIzNiNTk5ODsgfVxuICAgICAgI3BhZ2UtY29udGFjdCAub3RoZXIgaGdyb3VwIC5mYWNlYm9vazpob3ZlciB7XG4gICAgICAgIGNvbG9yOiAjNWY3ZWMxOyB9XG4gICAgI3BhZ2UtY29udGFjdCAub3RoZXIgaGdyb3VwIC5nb29sZ2UtcGx1cyB7XG4gICAgICBjb2xvcjogI2U5NDMzNTsgfVxuICAgICAgI3BhZ2UtY29udGFjdCAub3RoZXIgaGdyb3VwIC5nb29sZ2UtcGx1czpob3ZlciB7XG4gICAgICAgIGNvbG9yOiAjZjE4MzdhOyB9XG4gICAgI3BhZ2UtY29udGFjdCAub3RoZXIgaGdyb3VwIC5naXRodWIge1xuICAgICAgY29sb3I6ICMwMDAwMDA7IH1cbiAgICAgICNwYWdlLWNvbnRhY3QgLm90aGVyIGhncm91cCAuZ2l0aHViOmhvdmVyIHtcbiAgICAgICAgY29sb3I6ICM0ZDRjNGM7IH1cbiJdfQ== */\n"
  },
  {
    "path": "content/css/pages/developers.css",
    "content": "#page-developers .cta {\n  background: #111c30 no-repeat center top;\n  background-image: url(\"/img/developers/cta-bg.png\");\n  background-size: cover;\n  margin-bottom: -106px; }\n  #page-developers .cta strong {\n    color: white; }\n  #page-developers .cta hgroup {\n    padding-bottom: 140px; }\n    #page-developers .cta hgroup h1 {\n      padding-left: 70px;\n      position: relative;\n      background: no-repeat left center url(\"/img/developers/heading-ionic-icon.png\");\n      background-size: 61px;\n      display: inline-block;\n      font-size: 33px;\n      font-weight: 700;\n      letter-spacing: 6px;\n      margin-bottom: 25px;\n      padding-top: 10px;\n      text-transform: uppercase; }\n    #page-developers .cta hgroup p {\n      font-size: 20px;\n      max-width: 660px;\n      margin: 0 auto; }\n\n#page-developers section.container {\n  padding-top: 42px;\n  overflow-x: hidden;\n  margin: 0 auto;\n  max-width: 1030px; }\n  #page-developers section.container h2 {\n    font-size: 20px;\n    font-weight: 700;\n    min-height: 24px;\n    margin-bottom: 11px;\n    color: #24282e;\n    margin-top: 0; }\n  #page-developers section.container .items {\n    display: -ms-flexbox;\n    display: flex;\n    -ms-flex-wrap: wrap;\n        flex-wrap: wrap; }\n    #page-developers section.container .items a {\n      -ms-flex: 1 1;\n          flex: 1 1;\n      padding: 182px 25px 48px;\n      margin-bottom: 35px;\n      position: relative;\n      text-align: center;\n      min-height: 238px;\n      min-width: 130px;\n      margin-right: 12px;\n      z-index: 1; }\n      #page-developers section.container .items a:last-child {\n        margin-right: 0; }\n      #page-developers section.container .items a::before {\n        position: absolute;\n        top: 0;\n        right: 0;\n        bottom: 0;\n        left: 0;\n        content: '';\n        background: white;\n        border-radius: 4px;\n        box-shadow: 0 2px 3px 0 rgba(0, 0, 0, 0.06), 0 0 0 1px rgba(0, 32, 88, 0.06);\n        transition: all 0.4s cubic-bezier(0.155, 1.105, 0.295, 1.12); }\n      #page-developers section.container .items a::after {\n        background: no-repeat top left url(\"/img/developers/ionic-framework-img.png\");\n        background-size: 200px;\n        width: 200px;\n        height: 128px;\n        content: '';\n        position: absolute;\n        top: 32px;\n        left: calc(50% - 100px);\n        transition: -webkit-transform 0.4s cubic-bezier(0.155, 1.105, 0.295, 1.12);\n        transition: transform 0.4s cubic-bezier(0.155, 1.105, 0.295, 1.12);\n        transition: transform 0.4s cubic-bezier(0.155, 1.105, 0.295, 1.12), -webkit-transform 0.4s cubic-bezier(0.155, 1.105, 0.295, 1.12); }\n      #page-developers section.container .items a.platform::after {\n        background-image: url(\"/img/developers/ionic-services-img.png\"); }\n      #page-developers section.container .items a:hover, #page-developers section.container .items a:active {\n        text-decoration: none; }\n        #page-developers section.container .items a:hover::before, #page-developers section.container .items a:active::before {\n          border-color: #dde3eb;\n          -webkit-transform: scale(1.03);\n                  transform: scale(1.03);\n          box-shadow: 0 2px 3px 0 rgba(0, 0, 0, 0.08), 0 0 0 1px rgba(0, 32, 88, 0.1); }\n      #page-developers section.container .items a hgroup {\n        position: relative;\n        z-index: 5; }\n      #page-developers section.container .items a p {\n        color: #727a87;\n        font-size: 15px;\n        line-height: 22px;\n        max-width: 410px;\n        margin: 0 auto; }\n  @media (max-width: 525px) {\n    #page-developers section.container.primary .items a,\n    #page-developers section.container .items a {\n      width: 100%;\n      -ms-flex: 1 1 100%;\n          flex: 1 1 100%;\n      margin-right: 0; } }\n\n/*# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImRldmVsb3BlcnMuY3NzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0VBQ0UseUNBQXlDO0VBQ3pDLG9EQUFvRDtFQUNwRCx1QkFBdUI7RUFDdkIsc0JBQXNCLEVBQUU7RUFDeEI7SUFDRSxhQUFhLEVBQUU7RUFDakI7SUFDRSxzQkFBc0IsRUFBRTtJQUN4QjtNQUNFLG1CQUFtQjtNQUNuQixtQkFBbUI7TUFDbkIsZ0ZBQWdGO01BQ2hGLHNCQUFzQjtNQUN0QixzQkFBc0I7TUFDdEIsZ0JBQWdCO01BQ2hCLGlCQUFpQjtNQUNqQixvQkFBb0I7TUFDcEIsb0JBQW9CO01BQ3BCLGtCQUFrQjtNQUNsQiwwQkFBMEIsRUFBRTtJQUM5QjtNQUNFLGdCQUFnQjtNQUNoQixpQkFBaUI7TUFDakIsZUFBZSxFQUFFOztBQUV2QjtFQUNFLGtCQUFrQjtFQUNsQixtQkFBbUI7RUFDbkIsZUFBZTtFQUNmLGtCQUFrQixFQUFFO0VBQ3BCO0lBQ0UsZ0JBQWdCO0lBQ2hCLGlCQUFpQjtJQUNqQixpQkFBaUI7SUFDakIsb0JBQW9CO0lBQ3BCLGVBQWU7SUFDZixjQUFjLEVBQUU7RUFDbEI7SUFDRSxxQkFBYztJQUFkLGNBQWM7SUFDZCxvQkFBZ0I7UUFBaEIsZ0JBQWdCLEVBQUU7SUFDbEI7TUFDRSxjQUFVO1VBQVYsVUFBVTtNQUNWLHlCQUF5QjtNQUN6QixvQkFBb0I7TUFDcEIsbUJBQW1CO01BQ25CLG1CQUFtQjtNQUNuQixrQkFBa0I7TUFDbEIsaUJBQWlCO01BQ2pCLG1CQUFtQjtNQUNuQixXQUFXLEVBQUU7TUFDYjtRQUNFLGdCQUFnQixFQUFFO01BQ3BCO1FBQ0UsbUJBQW1CO1FBQ25CLE9BQU87UUFDUCxTQUFTO1FBQ1QsVUFBVTtRQUNWLFFBQVE7UUFDUixZQUFZO1FBQ1osa0JBQWtCO1FBQ2xCLG1CQUFtQjtRQUNuQiw2RUFBNkU7UUFDN0UsNkRBQTZELEVBQUU7TUFDakU7UUFDRSw4RUFBOEU7UUFDOUUsdUJBQXVCO1FBQ3ZCLGFBQWE7UUFDYixjQUFjO1FBQ2QsWUFBWTtRQUNaLG1CQUFtQjtRQUNuQixVQUFVO1FBQ1Ysd0JBQXdCO1FBQ3hCLDJFQUFtRTtRQUFuRSxtRUFBbUU7UUFBbkUsbUlBQW1FLEVBQUU7TUFDdkU7UUFDRSxnRUFBZ0UsRUFBRTtNQUNwRTtRQUNFLHNCQUFzQixFQUFFO1FBQ3hCO1VBQ0Usc0JBQXNCO1VBQ3RCLCtCQUF1QjtrQkFBdkIsdUJBQXVCO1VBQ3ZCLDRFQUE0RSxFQUFFO01BQ2xGO1FBQ0UsbUJBQW1CO1FBQ25CLFdBQVcsRUFBRTtNQUNmO1FBQ0UsZUFBZTtRQUNmLGdCQUFnQjtRQUNoQixrQkFBa0I7UUFDbEIsaUJBQWlCO1FBQ2pCLGVBQWUsRUFBRTtFQUN2QjtJQUNFOztNQUVFLFlBQVk7TUFDWixtQkFBZTtVQUFmLGVBQWU7TUFDZixnQkFBZ0IsRUFBRSxFQUFFIiwiZmlsZSI6InBhZ2VzL2RldmVsb3BlcnMuY3NzIiwic291cmNlc0NvbnRlbnQiOlsiI3BhZ2UtZGV2ZWxvcGVycyAuY3RhIHtcbiAgYmFja2dyb3VuZDogIzExMWMzMCBuby1yZXBlYXQgY2VudGVyIHRvcDtcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFwiL2ltZy9kZXZlbG9wZXJzL2N0YS1iZy5wbmdcIik7XG4gIGJhY2tncm91bmQtc2l6ZTogY292ZXI7XG4gIG1hcmdpbi1ib3R0b206IC0xMDZweDsgfVxuICAjcGFnZS1kZXZlbG9wZXJzIC5jdGEgc3Ryb25nIHtcbiAgICBjb2xvcjogd2hpdGU7IH1cbiAgI3BhZ2UtZGV2ZWxvcGVycyAuY3RhIGhncm91cCB7XG4gICAgcGFkZGluZy1ib3R0b206IDE0MHB4OyB9XG4gICAgI3BhZ2UtZGV2ZWxvcGVycyAuY3RhIGhncm91cCBoMSB7XG4gICAgICBwYWRkaW5nLWxlZnQ6IDcwcHg7XG4gICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICBiYWNrZ3JvdW5kOiBuby1yZXBlYXQgbGVmdCBjZW50ZXIgdXJsKFwiL2ltZy9kZXZlbG9wZXJzL2hlYWRpbmctaW9uaWMtaWNvbi5wbmdcIik7XG4gICAgICBiYWNrZ3JvdW5kLXNpemU6IDYxcHg7XG4gICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgICBmb250LXNpemU6IDMzcHg7XG4gICAgICBmb250LXdlaWdodDogNzAwO1xuICAgICAgbGV0dGVyLXNwYWNpbmc6IDZweDtcbiAgICAgIG1hcmdpbi1ib3R0b206IDI1cHg7XG4gICAgICBwYWRkaW5nLXRvcDogMTBweDtcbiAgICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7IH1cbiAgICAjcGFnZS1kZXZlbG9wZXJzIC5jdGEgaGdyb3VwIHAge1xuICAgICAgZm9udC1zaXplOiAyMHB4O1xuICAgICAgbWF4LXdpZHRoOiA2NjBweDtcbiAgICAgIG1hcmdpbjogMCBhdXRvOyB9XG5cbiNwYWdlLWRldmVsb3BlcnMgc2VjdGlvbi5jb250YWluZXIge1xuICBwYWRkaW5nLXRvcDogNDJweDtcbiAgb3ZlcmZsb3cteDogaGlkZGVuO1xuICBtYXJnaW46IDAgYXV0bztcbiAgbWF4LXdpZHRoOiAxMDMwcHg7IH1cbiAgI3BhZ2UtZGV2ZWxvcGVycyBzZWN0aW9uLmNvbnRhaW5lciBoMiB7XG4gICAgZm9udC1zaXplOiAyMHB4O1xuICAgIGZvbnQtd2VpZ2h0OiA3MDA7XG4gICAgbWluLWhlaWdodDogMjRweDtcbiAgICBtYXJnaW4tYm90dG9tOiAxMXB4O1xuICAgIGNvbG9yOiAjMjQyODJlO1xuICAgIG1hcmdpbi10b3A6IDA7IH1cbiAgI3BhZ2UtZGV2ZWxvcGVycyBzZWN0aW9uLmNvbnRhaW5lciAuaXRlbXMge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgZmxleC13cmFwOiB3cmFwOyB9XG4gICAgI3BhZ2UtZGV2ZWxvcGVycyBzZWN0aW9uLmNvbnRhaW5lciAuaXRlbXMgYSB7XG4gICAgICBmbGV4OiAxIDE7XG4gICAgICBwYWRkaW5nOiAxODJweCAyNXB4IDQ4cHg7XG4gICAgICBtYXJnaW4tYm90dG9tOiAzNXB4O1xuICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgICAgbWluLWhlaWdodDogMjM4cHg7XG4gICAgICBtaW4td2lkdGg6IDEzMHB4O1xuICAgICAgbWFyZ2luLXJpZ2h0OiAxMnB4O1xuICAgICAgei1pbmRleDogMTsgfVxuICAgICAgI3BhZ2UtZGV2ZWxvcGVycyBzZWN0aW9uLmNvbnRhaW5lciAuaXRlbXMgYTpsYXN0LWNoaWxkIHtcbiAgICAgICAgbWFyZ2luLXJpZ2h0OiAwOyB9XG4gICAgICAjcGFnZS1kZXZlbG9wZXJzIHNlY3Rpb24uY29udGFpbmVyIC5pdGVtcyBhOjpiZWZvcmUge1xuICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgIHRvcDogMDtcbiAgICAgICAgcmlnaHQ6IDA7XG4gICAgICAgIGJvdHRvbTogMDtcbiAgICAgICAgbGVmdDogMDtcbiAgICAgICAgY29udGVudDogJyc7XG4gICAgICAgIGJhY2tncm91bmQ6IHdoaXRlO1xuICAgICAgICBib3JkZXItcmFkaXVzOiA0cHg7XG4gICAgICAgIGJveC1zaGFkb3c6IDAgMnB4IDNweCAwIHJnYmEoMCwgMCwgMCwgMC4wNiksIDAgMCAwIDFweCByZ2JhKDAsIDMyLCA4OCwgMC4wNik7XG4gICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjRzIGN1YmljLWJlemllcigwLjE1NSwgMS4xMDUsIDAuMjk1LCAxLjEyKTsgfVxuICAgICAgI3BhZ2UtZGV2ZWxvcGVycyBzZWN0aW9uLmNvbnRhaW5lciAuaXRlbXMgYTo6YWZ0ZXIge1xuICAgICAgICBiYWNrZ3JvdW5kOiBuby1yZXBlYXQgdG9wIGxlZnQgdXJsKFwiL2ltZy9kZXZlbG9wZXJzL2lvbmljLWZyYW1ld29yay1pbWcucG5nXCIpO1xuICAgICAgICBiYWNrZ3JvdW5kLXNpemU6IDIwMHB4O1xuICAgICAgICB3aWR0aDogMjAwcHg7XG4gICAgICAgIGhlaWdodDogMTI4cHg7XG4gICAgICAgIGNvbnRlbnQ6ICcnO1xuICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgIHRvcDogMzJweDtcbiAgICAgICAgbGVmdDogY2FsYyg1MCUgLSAxMDBweCk7XG4gICAgICAgIHRyYW5zaXRpb246IHRyYW5zZm9ybSAwLjRzIGN1YmljLWJlemllcigwLjE1NSwgMS4xMDUsIDAuMjk1LCAxLjEyKTsgfVxuICAgICAgI3BhZ2UtZGV2ZWxvcGVycyBzZWN0aW9uLmNvbnRhaW5lciAuaXRlbXMgYS5wbGF0Zm9ybTo6YWZ0ZXIge1xuICAgICAgICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXCIvaW1nL2RldmVsb3BlcnMvaW9uaWMtc2VydmljZXMtaW1nLnBuZ1wiKTsgfVxuICAgICAgI3BhZ2UtZGV2ZWxvcGVycyBzZWN0aW9uLmNvbnRhaW5lciAuaXRlbXMgYTpob3ZlciwgI3BhZ2UtZGV2ZWxvcGVycyBzZWN0aW9uLmNvbnRhaW5lciAuaXRlbXMgYTphY3RpdmUge1xuICAgICAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7IH1cbiAgICAgICAgI3BhZ2UtZGV2ZWxvcGVycyBzZWN0aW9uLmNvbnRhaW5lciAuaXRlbXMgYTpob3Zlcjo6YmVmb3JlLCAjcGFnZS1kZXZlbG9wZXJzIHNlY3Rpb24uY29udGFpbmVyIC5pdGVtcyBhOmFjdGl2ZTo6YmVmb3JlIHtcbiAgICAgICAgICBib3JkZXItY29sb3I6ICNkZGUzZWI7XG4gICAgICAgICAgdHJhbnNmb3JtOiBzY2FsZSgxLjAzKTtcbiAgICAgICAgICBib3gtc2hhZG93OiAwIDJweCAzcHggMCByZ2JhKDAsIDAsIDAsIDAuMDgpLCAwIDAgMCAxcHggcmdiYSgwLCAzMiwgODgsIDAuMSk7IH1cbiAgICAgICNwYWdlLWRldmVsb3BlcnMgc2VjdGlvbi5jb250YWluZXIgLml0ZW1zIGEgaGdyb3VwIHtcbiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICAgICB6LWluZGV4OiA1OyB9XG4gICAgICAjcGFnZS1kZXZlbG9wZXJzIHNlY3Rpb24uY29udGFpbmVyIC5pdGVtcyBhIHAge1xuICAgICAgICBjb2xvcjogIzcyN2E4NztcbiAgICAgICAgZm9udC1zaXplOiAxNXB4O1xuICAgICAgICBsaW5lLWhlaWdodDogMjJweDtcbiAgICAgICAgbWF4LXdpZHRoOiA0MTBweDtcbiAgICAgICAgbWFyZ2luOiAwIGF1dG87IH1cbiAgQG1lZGlhIChtYXgtd2lkdGg6IDUyNXB4KSB7XG4gICAgI3BhZ2UtZGV2ZWxvcGVycyBzZWN0aW9uLmNvbnRhaW5lci5wcmltYXJ5IC5pdGVtcyBhLFxuICAgICNwYWdlLWRldmVsb3BlcnMgc2VjdGlvbi5jb250YWluZXIgLml0ZW1zIGEge1xuICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICBmbGV4OiAxIDEgMTAwJTtcbiAgICAgIG1hcmdpbi1yaWdodDogMDsgfSB9XG4iXX0= */\n"
  },
  {
    "path": "content/css/pages/enterprise/contact.css",
    "content": ".ee-hero {\n  max-width: 640px;\n  padding-top: 130px;\n  padding-bottom: 160px; }\n  .ee-hero::before, .ee-hero::after {\n    display: none; }\n  .ee-hero h1 {\n    font-size: 52px;\n    line-height: 62px;\n    max-width: 930px;\n    letter-spacing: -0.03em;\n    color: #020814;\n    margin-top: 0;\n    margin-bottom: 16px; }\n  .ee-hero h4 {\n    font-family: \"Roboto Mono\", Menlo, Monaco, Consolas, \"Courier New\", monospace;\n    font-weight: bold;\n    font-size: 13px;\n    line-height: 26px;\n    letter-spacing: 0.14em;\n    text-transform: uppercase;\n    color: #92A1B3;\n    margin-bottom: 29px; }\n  .ee-hero p {\n    font-family: \"Eina\", \"Helvetica Neue\", Helvetica, sans-serif;\n    font-size: 24px;\n    font-weight: 400;\n    line-height: 36px;\n    letter-spacing: -0.04em;\n    color: rgba(39, 50, 63, 0.8); }\n  .ee-hero .btn {\n    padding-left: 24px;\n    padding-right: 20px;\n    padding-top: 18px;\n    padding-bottom: 18px;\n    font-size: 14px;\n    margin-top: 16px;\n    line-height: 20px;\n    letter-spacing: 0.08em;\n    color: white;\n    text-transform: uppercase;\n    font-weight: 700;\n    background: #3880FF;\n    box-shadow: 0px 2px 4px rgba(2, 8, 20, 0.1), 0px 1px 2px rgba(2, 8, 20, 0.08);\n    border-radius: 210px;\n    display: -ms-flexbox;\n    display: flex;\n    -ms-flex-align: center;\n        align-items: center; }\n    .ee-hero .btn::after {\n      background-image: url('data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"white\" viewBox=\"0 0 512 512\"><path d=\"M85 277.375h259.704L225.002 397.077 256 427l171-171L256 85l-29.922 29.924 118.626 119.701H85v42.75z\"/></svg>');\n      background-size: 100%;\n      content: '';\n      height: 20px;\n      width: 20px;\n      display: block;\n      margin-left: 8px;\n      -webkit-transform: translateY(-1px);\n              transform: translateY(-1px); }\n    .ee-hero .btn:hover {\n      background-color: #4f8bf5; }\n  .ee-hero--large h1 {\n    font-size: 62px;\n    line-height: 69px; }\n  .ee-hero--wide {\n    max-width: 960px; }\n  .ee-hero--centered {\n    display: -ms-flexbox;\n    display: flex;\n    -ms-flex-direction: column;\n        flex-direction: column;\n    -ms-flex-pack: center;\n        justify-content: center;\n    -ms-flex-align: center;\n        align-items: center;\n    text-align: center;\n    margin-left: auto;\n    margin-right: auto; }\n  @media (max-width: 767px) {\n    .ee-hero {\n      padding-top: 70px;\n      padding-bottom: 0; }\n      .ee-hero h1 {\n        font-size: 44px;\n        line-height: 52px; }\n      .ee-hero--large h1 {\n        font-size: 50px;\n        line-height: 60px; } }\n  @media (max-width: 480px) {\n    .ee-hero h1 {\n      font-size: 36px;\n      line-height: 44px;\n      margin-bottom: 6px; }\n    .ee-hero--large h1 {\n      font-size: 42px;\n      line-height: 52px; }\n    .ee-hero .btn {\n      margin-top: 8px; } }\n\n.ee-main {\n  margin-top: 0; }\n  .ee-main section {\n    margin-bottom: 200px; }\n  .ee-main .left,\n  .ee-main .right,\n  .ee-main .center {\n    display: -ms-flexbox;\n    display: flex; }\n    .ee-main .left::before, .ee-main .left::after,\n    .ee-main .right::before,\n    .ee-main .right::after,\n    .ee-main .center::before,\n    .ee-main .center::after {\n      display: none; }\n  .ee-main .left .content,\n  .ee-main .right .content {\n    max-width: 480px; }\n    @media (max-width: 767px) {\n      .ee-main .left .content,\n      .ee-main .right .content {\n        max-width: 100%;\n        text-align: center; }\n        .ee-main .left .content li,\n        .ee-main .right .content li {\n          text-align: left; } }\n  .ee-main .left {\n    -ms-flex-direction: row;\n        flex-direction: row; }\n    .ee-main .left .graphics {\n      margin-left: auto; }\n  .ee-main .right {\n    -ms-flex-direction: row-reverse;\n        flex-direction: row-reverse;\n    margin-left: auto; }\n    .ee-main .right .graphics {\n      margin-right: auto; }\n  .ee-main .center {\n    -ms-flex-direction: column;\n        flex-direction: column;\n    -ms-flex-align: center;\n        align-items: center;\n    text-align: center; }\n    .ee-main .center .content {\n      width: 894px;\n      max-width: 100%; }\n  .ee-main .full .content {\n    max-width: 568px; }\n  @media (max-width: 767px) {\n    .ee-main .right,\n    .ee-main .left {\n      -ms-flex-direction: column-reverse;\n          flex-direction: column-reverse;\n      -ms-flex-align: center;\n          align-items: center; }\n      .ee-main .right .graphics,\n      .ee-main .left .graphics {\n        margin-bottom: 24px;\n        margin-left: 0;\n        margin-right: 0; }\n    .ee-main section {\n      margin-bottom: 100px; } }\n  .ee-main .graphics {\n    -ms-flex-pack: end;\n        justify-content: flex-end; }\n    .ee-main .graphics img {\n      width: 100%; }\n  .ee-main h2 {\n    font-size: 44px;\n    line-height: 51px;\n    letter-spacing: -0.03em; }\n    .ee-main h2:first-child {\n      margin-top: 0; }\n  .ee-main .ee-section__title {\n    font-family: \"Roboto Mono\", Menlo, Monaco, Consolas, \"Courier New\", monospace;\n    font-style: normal;\n    font-weight: bold;\n    font-size: 12px;\n    line-height: 23px;\n    letter-spacing: 0.14em;\n    text-transform: uppercase;\n    color: #5B708B;\n    margin-top: 0; }\n  .ee-main .ee-section__cta {\n    display: inline-block;\n    font-size: 18px;\n    font-weight: 500;\n    margin-top: 16px; }\n  .ee-main p {\n    font-size: 20px;\n    line-height: 31px;\n    letter-spacing: -0.02em;\n    color: #5B708B;\n    margin-top: 18px; }\n    .ee-main p.sm {\n      font-size: 16px;\n      line-height: 29px;\n      letter-spacing: -0.01em; }\n  .ee-main ul:not(.frameworks) {\n    margin-top: 54px; }\n  .ee-main .content ul {\n    padding-left: 0; }\n  .ee-main .content li {\n    font-size: 16px;\n    line-height: 23px;\n    letter-spacing: -0.02em;\n    color: #1A232F;\n    margin-bottom: 40px;\n    padding-left: 30px;\n    list-style: none;\n    position: relative; }\n    .ee-main .content li::before {\n      background-image: url(\"/img/enterprise/check.svg\");\n      background-size: 100%;\n      content: '';\n      height: 10px;\n      width: 13px;\n      position: absolute;\n      left: 0;\n      top: 8px; }\n  .ee-main .features {\n    display: -ms-grid;\n    display: grid;\n    -ms-grid-columns: 1fr 1fr 1fr;\n        grid-template-columns: 1fr 1fr 1fr;\n    grid-column-gap: 64px;\n    grid-row-gap: 24px;\n    padding: 0; }\n    .ee-main .features li {\n      list-style: none; }\n    .ee-main .features .icon {\n      margin-bottom: 16px;\n      width: 48px; }\n    @media (max-width: 991px) {\n      .ee-main .features {\n        -ms-grid-columns: 1fr 1fr;\n            grid-template-columns: 1fr 1fr; } }\n    @media (max-width: 500px) {\n      .ee-main .features {\n        -ms-grid-columns: 1fr;\n            grid-template-columns: 1fr; } }\n  .ee-main .cta-card {\n    background: #4a8bfc;\n    border-radius: 12px;\n    padding: 72px 72px 60px;\n    background-size: cover;\n    color: white; }\n    .ee-main .cta-card .ee-section__title,\n    .ee-main .cta-card p {\n      color: #CED6E0; }\n\n#how-to {\n  margin-bottom: 0;\n  position: relative;\n  padding-top: 140px; }\n  #how-to::before {\n    position: absolute;\n    top: 0;\n    width: 100vw;\n    border-top: 1px solid rgba(146, 161, 179, 0.3);\n    content: '';\n    display: block; }\n\n.cards--red-v-blue {\n  display: -ms-flexbox;\n  display: flex;\n  text-align: left;\n  -ms-flex-pack: center;\n      justify-content: center;\n  margin-top: 38px; }\n  .cards--red-v-blue__card {\n    background: #7CABFF;\n    border-radius: 8px;\n    padding: 40px 40px 34px;\n    display: -ms-flexbox;\n    display: flex;\n    -ms-flex-direction: column;\n        flex-direction: column;\n    -ms-flex-align: start;\n        align-items: flex-start;\n    margin-right: 24px;\n    -ms-flex: 0 1 460px;\n        flex: 0 1 460px;\n    border-radius: 8px; }\n    .cards--red-v-blue__card:last-child {\n      margin-right: 0; }\n    .cards--red-v-blue__card:nth-child(2) {\n      background: #F88D8D; }\n      .cards--red-v-blue__card:nth-child(2) .btn {\n        background: rgba(244, 84, 84, 0.5); }\n  .cards--red-v-blue h3 {\n    font-size: 24px;\n    line-height: normal;\n    letter-spacing: -0.02em;\n    color: white;\n    margin-top: 0; }\n  .cards--red-v-blue p {\n    font-size: 18px;\n    line-height: 26px;\n    letter-spacing: -0.02em;\n    color: rgba(255, 255, 255, 0.7);\n    margin-top: 0;\n    margin-bottom: 22px; }\n  .cards--red-v-blue .btn {\n    margin-top: auto;\n    font-size: 14px;\n    line-height: 22px;\n    letter-spacing: 0.09em;\n    text-transform: uppercase;\n    padding: 10px 14px;\n    font-weight: 600;\n    border-radius: 8px;\n    background: rgba(56, 128, 255, 0.5); }\n    .cards--red-v-blue .btn ion-icon {\n      display: inline-block;\n      height: 14px;\n      width: 14px;\n      vertical-align: -2px; }\n  @media (max-width: 767px) {\n    .cards--red-v-blue {\n      -ms-flex-direction: column;\n          flex-direction: column;\n      -ms-flex-align: center;\n          align-items: center; }\n      .cards--red-v-blue__card {\n        -ms-flex: auto;\n            flex: auto;\n        margin-right: 0;\n        margin-top: 20px;\n        max-width: 460px; } }\n\naside {\n  background: linear-gradient(180deg, #F9FAFB 0%, #FFFFFF 100%);\n  margin-top: -60px;\n  padding-top: 200px;\n  padding-bottom: 120px; }\n  aside p {\n    color: #414D5C; }\n  aside .content {\n    max-width: 432px;\n    margin: 0 auto;\n    text-align: center;\n    display: block; }\n\n.ee-get-started {\n  max-width: 700px; }\n  .ee-get-started h3 {\n    color: #414D5C; }\n\n.resources {\n  padding-bottom: 120px; }\n  @media (max-width: 768px) {\n    .resources {\n      padding-bottom: 60px; } }\n  .resources .cards {\n    list-style-type: none;\n    margin: 0;\n    padding: 0;\n    display: -ms-flexbox;\n    display: flex;\n    margin-left: -24px;\n    margin-right: -24px; }\n  .resources hgroup {\n    display: -ms-flexbox;\n    display: flex;\n    -ms-flex-pack: justify;\n        justify-content: space-between;\n    -ms-flex-align: baseline;\n        align-items: baseline; }\n    .resources hgroup h3 {\n      font-weight: 600;\n      line-height: normal;\n      font-size: 28px;\n      letter-spacing: -0.02em;\n      color: #1A232F;\n      margin-bottom: 0; }\n    .resources hgroup h4 {\n      font-weight: 600;\n      font-size: 24px;\n      line-height: normal;\n      letter-spacing: -0.02em;\n      color: #1A232F; }\n    .resources hgroup h5 {\n      font-weight: 700;\n      line-height: 1;\n      font-size: 14px;\n      letter-spacing: 0.08em;\n      color: #3880FF;\n      text-transform: uppercase; }\n    .resources hgroup ion-icon {\n      -webkit-transform: translateY(2px);\n              transform: translateY(2px); }\n  .resources .cards li {\n    display: block;\n    -ms-flex: 0 0 33.33%;\n        flex: 0 0 33.33%;\n    padding: 24px; }\n    .resources .cards li a {\n      display: block;\n      width: 100%; }\n    .resources .cards li .img-wrapper {\n      overflow: hidden;\n      border-radius: 6px; }\n    .resources .cards li img {\n      width: 100%; }\n    .resources .cards li h6 {\n      line-height: 23px;\n      font-size: 12px;\n      letter-spacing: 0.12em;\n      text-transform: uppercase;\n      color: #B2BECD;\n      margin-bottom: 0;\n      margin-top: 16px; }\n    .resources .cards li h4 {\n      font-size: 20px;\n      margin-top: 10px;\n      color: #1A232F;\n      font-weight: 600; }\n    .resources .cards li p {\n      color: #5B708B;\n      line-height: 22px;\n      font-size: 14px;\n      letter-spacing: -0.02em; }\n  @media (max-width: 992px) {\n    .resources .cards {\n      margin-left: -12px;\n      margin-right: -12px; }\n    .resources .cards li {\n      padding: 12px; } }\n  @media (max-width: 768px) {\n    .resources .cards {\n      -ms-flex-wrap: wrap;\n          flex-wrap: wrap; }\n    .resources .cards li {\n      -ms-flex: 0 0 50%;\n          flex: 0 0 50%; } }\n  @media (max-width: 480px) {\n    .resources .cards li {\n      -ms-flex: 0 0 100%;\n          flex: 0 0 100%; }\n    .resources h5 {\n      display: none; } }\n\n.ee-main .features li p,\n.ee-main .cards li p,\n.resources .features li p,\n.resources .cards li p {\n  font-size: 16px;\n  line-height: 29px;\n  letter-spacing: -0.01em;\n  color: #73849A;\n  margin-top: 0; }\n\n.ee-main .features li h4,\n.ee-main .cards li h4,\n.resources .features li h4,\n.resources .cards li h4 {\n  font-size: 20px;\n  line-height: normal;\n  letter-spacing: -0.02em;\n  color: #020814;\n  font-weight: 600; }\n\n.resources .cards {\n  margin-top: 0 !important;\n  text-align: left;\n  -ms-flex-wrap: wrap;\n      flex-wrap: wrap; }\n  .resources .cards .img-wrapper {\n    border-radius: 6px; }\n    .resources .cards .img-wrapper + h4 {\n      margin-top: 24px; }\n  @media (min-width: 1220px) {\n    .resources .cards {\n      margin-left: -40px;\n      margin-right: -40px; }\n      .resources .cards li {\n        padding: 40px; } }\n\n.resources .resources__customer-logos {\n  display: -ms-flexbox;\n  display: flex;\n  margin: 26px auto 0;\n  padding: 0;\n  -ms-flex-pack: justify;\n      justify-content: space-between;\n  max-width: 780px;\n  width: 100%; }\n  .resources .resources__customer-logos li {\n    background: url(\"/img/enterprise/customer-logos.png\");\n    background-size: 428px 46px;\n    background-repeat: no-repeat;\n    display: block;\n    height: 46px; }\n  @media (max-width: 768px) {\n    .resources .resources__customer-logos {\n      -ms-flex-pack: center;\n          justify-content: center;\n      -ms-flex-wrap: wrap;\n          flex-wrap: wrap;\n      max-width: 460px; }\n      .resources .resources__customer-logos li {\n        margin: 20px; } }\n  .resources .resources__customer-logos .mastercard {\n    width: 58px; }\n  .resources .resources__customer-logos .nationwide {\n    background-position: -58px 0;\n    width: 33px; }\n  .resources .resources__customer-logos .uniqlo {\n    background-position: -91px 0;\n    width: 65px; }\n  .resources .resources__customer-logos .ibm {\n    background-position: -156px 0;\n    width: 64px; }\n  .resources .resources__customer-logos .ing {\n    background-position: -222px 0;\n    width: 103px; }\n  .resources .resources__customer-logos .sap {\n    background-position: -326px 0;\n    width: 56px; }\n  .resources .resources__customer-logos .nasa {\n    background-position: -380px 0;\n    width: 50px; }\n\n.ee-hero {\n  padding-bottom: 40px; }\n\nmain {\n  margin-top: 0;\n  margin-bottom: 140px; }\n\n/*# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImNvbnRhY3QuY3NzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0VBQ0UsaUJBQWlCO0VBQ2pCLG1CQUFtQjtFQUNuQixzQkFBc0IsRUFBRTtFQUN4QjtJQUNFLGNBQWMsRUFBRTtFQUNsQjtJQUNFLGdCQUFnQjtJQUNoQixrQkFBa0I7SUFDbEIsaUJBQWlCO0lBQ2pCLHdCQUF3QjtJQUN4QixlQUFlO0lBQ2YsY0FBYztJQUNkLG9CQUFvQixFQUFFO0VBQ3hCO0lBQ0UsOEVBQThFO0lBQzlFLGtCQUFrQjtJQUNsQixnQkFBZ0I7SUFDaEIsa0JBQWtCO0lBQ2xCLHVCQUF1QjtJQUN2QiwwQkFBMEI7SUFDMUIsZUFBZTtJQUNmLG9CQUFvQixFQUFFO0VBQ3hCO0lBQ0UsNkRBQTZEO0lBQzdELGdCQUFnQjtJQUNoQixpQkFBaUI7SUFDakIsa0JBQWtCO0lBQ2xCLHdCQUF3QjtJQUN4Qiw2QkFBNkIsRUFBRTtFQUNqQztJQUNFLG1CQUFtQjtJQUNuQixvQkFBb0I7SUFDcEIsa0JBQWtCO0lBQ2xCLHFCQUFxQjtJQUNyQixnQkFBZ0I7SUFDaEIsaUJBQWlCO0lBQ2pCLGtCQUFrQjtJQUNsQix1QkFBdUI7SUFDdkIsYUFBYTtJQUNiLDBCQUEwQjtJQUMxQixpQkFBaUI7SUFDakIsb0JBQW9CO0lBQ3BCLDhFQUE4RTtJQUM5RSxxQkFBcUI7SUFDckIscUJBQWM7SUFBZCxjQUFjO0lBQ2QsdUJBQW9CO1FBQXBCLG9CQUFvQixFQUFFO0lBQ3RCO01BQ0Usa1BBQWtQO01BQ2xQLHNCQUFzQjtNQUN0QixZQUFZO01BQ1osYUFBYTtNQUNiLFlBQVk7TUFDWixlQUFlO01BQ2YsaUJBQWlCO01BQ2pCLG9DQUE0QjtjQUE1Qiw0QkFBNEIsRUFBRTtJQUNoQztNQUNFLDBCQUEwQixFQUFFO0VBQ2hDO0lBQ0UsZ0JBQWdCO0lBQ2hCLGtCQUFrQixFQUFFO0VBQ3RCO0lBQ0UsaUJBQWlCLEVBQUU7RUFDckI7SUFDRSxxQkFBYztJQUFkLGNBQWM7SUFDZCwyQkFBdUI7UUFBdkIsdUJBQXVCO0lBQ3ZCLHNCQUF3QjtRQUF4Qix3QkFBd0I7SUFDeEIsdUJBQW9CO1FBQXBCLG9CQUFvQjtJQUNwQixtQkFBbUI7SUFDbkIsa0JBQWtCO0lBQ2xCLG1CQUFtQixFQUFFO0VBQ3ZCO0lBQ0U7TUFDRSxrQkFBa0I7TUFDbEIsa0JBQWtCLEVBQUU7TUFDcEI7UUFDRSxnQkFBZ0I7UUFDaEIsa0JBQWtCLEVBQUU7TUFDdEI7UUFDRSxnQkFBZ0I7UUFDaEIsa0JBQWtCLEVBQUUsRUFBRTtFQUM1QjtJQUNFO01BQ0UsZ0JBQWdCO01BQ2hCLGtCQUFrQjtNQUNsQixtQkFBbUIsRUFBRTtJQUN2QjtNQUNFLGdCQUFnQjtNQUNoQixrQkFBa0IsRUFBRTtJQUN0QjtNQUNFLGdCQUFnQixFQUFFLEVBQUU7O0FBRTFCO0VBQ0UsY0FBYyxFQUFFO0VBQ2hCO0lBQ0UscUJBQXFCLEVBQUU7RUFDekI7OztJQUdFLHFCQUFjO0lBQWQsY0FBYyxFQUFFO0lBQ2hCOzs7OztNQUtFLGNBQWMsRUFBRTtFQUNwQjs7SUFFRSxpQkFBaUIsRUFBRTtJQUNuQjtNQUNFOztRQUVFLGdCQUFnQjtRQUNoQixtQkFBbUIsRUFBRTtRQUNyQjs7VUFFRSxpQkFBaUIsRUFBRSxFQUFFO0VBQzdCO0lBQ0Usd0JBQW9CO1FBQXBCLG9CQUFvQixFQUFFO0lBQ3RCO01BQ0Usa0JBQWtCLEVBQUU7RUFDeEI7SUFDRSxnQ0FBNEI7UUFBNUIsNEJBQTRCO0lBQzVCLGtCQUFrQixFQUFFO0lBQ3BCO01BQ0UsbUJBQW1CLEVBQUU7RUFDekI7SUFDRSwyQkFBdUI7UUFBdkIsdUJBQXVCO0lBQ3ZCLHVCQUFvQjtRQUFwQixvQkFBb0I7SUFDcEIsbUJBQW1CLEVBQUU7SUFDckI7TUFDRSxhQUFhO01BQ2IsZ0JBQWdCLEVBQUU7RUFDdEI7SUFDRSxpQkFBaUIsRUFBRTtFQUNyQjtJQUNFOztNQUVFLG1DQUErQjtVQUEvQiwrQkFBK0I7TUFDL0IsdUJBQW9CO1VBQXBCLG9CQUFvQixFQUFFO01BQ3RCOztRQUVFLG9CQUFvQjtRQUNwQixlQUFlO1FBQ2YsZ0JBQWdCLEVBQUU7SUFDdEI7TUFDRSxxQkFBcUIsRUFBRSxFQUFFO0VBQzdCO0lBQ0UsbUJBQTBCO1FBQTFCLDBCQUEwQixFQUFFO0lBQzVCO01BQ0UsWUFBWSxFQUFFO0VBQ2xCO0lBQ0UsZ0JBQWdCO0lBQ2hCLGtCQUFrQjtJQUNsQix3QkFBd0IsRUFBRTtJQUMxQjtNQUNFLGNBQWMsRUFBRTtFQUNwQjtJQUNFLDhFQUE4RTtJQUM5RSxtQkFBbUI7SUFDbkIsa0JBQWtCO0lBQ2xCLGdCQUFnQjtJQUNoQixrQkFBa0I7SUFDbEIsdUJBQXVCO0lBQ3ZCLDBCQUEwQjtJQUMxQixlQUFlO0lBQ2YsY0FBYyxFQUFFO0VBQ2xCO0lBQ0Usc0JBQXNCO0lBQ3RCLGdCQUFnQjtJQUNoQixpQkFBaUI7SUFDakIsaUJBQWlCLEVBQUU7RUFDckI7SUFDRSxnQkFBZ0I7SUFDaEIsa0JBQWtCO0lBQ2xCLHdCQUF3QjtJQUN4QixlQUFlO0lBQ2YsaUJBQWlCLEVBQUU7SUFDbkI7TUFDRSxnQkFBZ0I7TUFDaEIsa0JBQWtCO01BQ2xCLHdCQUF3QixFQUFFO0VBQzlCO0lBQ0UsaUJBQWlCLEVBQUU7RUFDckI7SUFDRSxnQkFBZ0IsRUFBRTtFQUNwQjtJQUNFLGdCQUFnQjtJQUNoQixrQkFBa0I7SUFDbEIsd0JBQXdCO0lBQ3hCLGVBQWU7SUFDZixvQkFBb0I7SUFDcEIsbUJBQW1CO0lBQ25CLGlCQUFpQjtJQUNqQixtQkFBbUIsRUFBRTtJQUNyQjtNQUNFLG1EQUFtRDtNQUNuRCxzQkFBc0I7TUFDdEIsWUFBWTtNQUNaLGFBQWE7TUFDYixZQUFZO01BQ1osbUJBQW1CO01BQ25CLFFBQVE7TUFDUixTQUFTLEVBQUU7RUFDZjtJQUNFLGtCQUFjO0lBQWQsY0FBYztJQUNkLDhCQUFtQztRQUFuQyxtQ0FBbUM7SUFDbkMsc0JBQXNCO0lBQ3RCLG1CQUFtQjtJQUNuQixXQUFXLEVBQUU7SUFDYjtNQUNFLGlCQUFpQixFQUFFO0lBQ3JCO01BQ0Usb0JBQW9CO01BQ3BCLFlBQVksRUFBRTtJQUNoQjtNQUNFO1FBQ0UsMEJBQStCO1lBQS9CLCtCQUErQixFQUFFLEVBQUU7SUFDdkM7TUFDRTtRQUNFLHNCQUEyQjtZQUEzQiwyQkFBMkIsRUFBRSxFQUFFO0VBQ3JDO0lBQ0Usb0JBQW9CO0lBQ3BCLG9CQUFvQjtJQUNwQix3QkFBd0I7SUFDeEIsdUJBQXVCO0lBQ3ZCLGFBQWEsRUFBRTtJQUNmOztNQUVFLGVBQWUsRUFBRTs7QUFFdkI7RUFDRSxpQkFBaUI7RUFDakIsbUJBQW1CO0VBQ25CLG1CQUFtQixFQUFFO0VBQ3JCO0lBQ0UsbUJBQW1CO0lBQ25CLE9BQU87SUFDUCxhQUFhO0lBQ2IsK0NBQStDO0lBQy9DLFlBQVk7SUFDWixlQUFlLEVBQUU7O0FBRXJCO0VBQ0UscUJBQWM7RUFBZCxjQUFjO0VBQ2QsaUJBQWlCO0VBQ2pCLHNCQUF3QjtNQUF4Qix3QkFBd0I7RUFDeEIsaUJBQWlCLEVBQUU7RUFDbkI7SUFDRSxvQkFBb0I7SUFDcEIsbUJBQW1CO0lBQ25CLHdCQUF3QjtJQUN4QixxQkFBYztJQUFkLGNBQWM7SUFDZCwyQkFBdUI7UUFBdkIsdUJBQXVCO0lBQ3ZCLHNCQUF3QjtRQUF4Qix3QkFBd0I7SUFDeEIsbUJBQW1CO0lBQ25CLG9CQUFnQjtRQUFoQixnQkFBZ0I7SUFDaEIsbUJBQW1CLEVBQUU7SUFDckI7TUFDRSxnQkFBZ0IsRUFBRTtJQUNwQjtNQUNFLG9CQUFvQixFQUFFO01BQ3RCO1FBQ0UsbUNBQW1DLEVBQUU7RUFDM0M7SUFDRSxnQkFBZ0I7SUFDaEIsb0JBQW9CO0lBQ3BCLHdCQUF3QjtJQUN4QixhQUFhO0lBQ2IsY0FBYyxFQUFFO0VBQ2xCO0lBQ0UsZ0JBQWdCO0lBQ2hCLGtCQUFrQjtJQUNsQix3QkFBd0I7SUFDeEIsZ0NBQWdDO0lBQ2hDLGNBQWM7SUFDZCxvQkFBb0IsRUFBRTtFQUN4QjtJQUNFLGlCQUFpQjtJQUNqQixnQkFBZ0I7SUFDaEIsa0JBQWtCO0lBQ2xCLHVCQUF1QjtJQUN2QiwwQkFBMEI7SUFDMUIsbUJBQW1CO0lBQ25CLGlCQUFpQjtJQUNqQixtQkFBbUI7SUFDbkIsb0NBQW9DLEVBQUU7SUFDdEM7TUFDRSxzQkFBc0I7TUFDdEIsYUFBYTtNQUNiLFlBQVk7TUFDWixxQkFBcUIsRUFBRTtFQUMzQjtJQUNFO01BQ0UsMkJBQXVCO1VBQXZCLHVCQUF1QjtNQUN2Qix1QkFBb0I7VUFBcEIsb0JBQW9CLEVBQUU7TUFDdEI7UUFDRSxlQUFXO1lBQVgsV0FBVztRQUNYLGdCQUFnQjtRQUNoQixpQkFBaUI7UUFDakIsaUJBQWlCLEVBQUUsRUFBRTs7QUFFN0I7RUFDRSw4REFBOEQ7RUFDOUQsa0JBQWtCO0VBQ2xCLG1CQUFtQjtFQUNuQixzQkFBc0IsRUFBRTtFQUN4QjtJQUNFLGVBQWUsRUFBRTtFQUNuQjtJQUNFLGlCQUFpQjtJQUNqQixlQUFlO0lBQ2YsbUJBQW1CO0lBQ25CLGVBQWUsRUFBRTs7QUFFckI7RUFDRSxpQkFBaUIsRUFBRTtFQUNuQjtJQUNFLGVBQWUsRUFBRTs7QUFFckI7RUFDRSxzQkFBc0IsRUFBRTtFQUN4QjtJQUNFO01BQ0UscUJBQXFCLEVBQUUsRUFBRTtFQUM3QjtJQUNFLHNCQUFzQjtJQUN0QixVQUFVO0lBQ1YsV0FBVztJQUNYLHFCQUFjO0lBQWQsY0FBYztJQUNkLG1CQUFtQjtJQUNuQixvQkFBb0IsRUFBRTtFQUN4QjtJQUNFLHFCQUFjO0lBQWQsY0FBYztJQUNkLHVCQUErQjtRQUEvQiwrQkFBK0I7SUFDL0IseUJBQXNCO1FBQXRCLHNCQUFzQixFQUFFO0lBQ3hCO01BQ0UsaUJBQWlCO01BQ2pCLG9CQUFvQjtNQUNwQixnQkFBZ0I7TUFDaEIsd0JBQXdCO01BQ3hCLGVBQWU7TUFDZixpQkFBaUIsRUFBRTtJQUNyQjtNQUNFLGlCQUFpQjtNQUNqQixnQkFBZ0I7TUFDaEIsb0JBQW9CO01BQ3BCLHdCQUF3QjtNQUN4QixlQUFlLEVBQUU7SUFDbkI7TUFDRSxpQkFBaUI7TUFDakIsZUFBZTtNQUNmLGdCQUFnQjtNQUNoQix1QkFBdUI7TUFDdkIsZUFBZTtNQUNmLDBCQUEwQixFQUFFO0lBQzlCO01BQ0UsbUNBQTJCO2NBQTNCLDJCQUEyQixFQUFFO0VBQ2pDO0lBQ0UsZUFBZTtJQUNmLHFCQUFpQjtRQUFqQixpQkFBaUI7SUFDakIsY0FBYyxFQUFFO0lBQ2hCO01BQ0UsZUFBZTtNQUNmLFlBQVksRUFBRTtJQUNoQjtNQUNFLGlCQUFpQjtNQUNqQixtQkFBbUIsRUFBRTtJQUN2QjtNQUNFLFlBQVksRUFBRTtJQUNoQjtNQUNFLGtCQUFrQjtNQUNsQixnQkFBZ0I7TUFDaEIsdUJBQXVCO01BQ3ZCLDBCQUEwQjtNQUMxQixlQUFlO01BQ2YsaUJBQWlCO01BQ2pCLGlCQUFpQixFQUFFO0lBQ3JCO01BQ0UsZ0JBQWdCO01BQ2hCLGlCQUFpQjtNQUNqQixlQUFlO01BQ2YsaUJBQWlCLEVBQUU7SUFDckI7TUFDRSxlQUFlO01BQ2Ysa0JBQWtCO01BQ2xCLGdCQUFnQjtNQUNoQix3QkFBd0IsRUFBRTtFQUM5QjtJQUNFO01BQ0UsbUJBQW1CO01BQ25CLG9CQUFvQixFQUFFO0lBQ3hCO01BQ0UsY0FBYyxFQUFFLEVBQUU7RUFDdEI7SUFDRTtNQUNFLG9CQUFnQjtVQUFoQixnQkFBZ0IsRUFBRTtJQUNwQjtNQUNFLGtCQUFjO1VBQWQsY0FBYyxFQUFFLEVBQUU7RUFDdEI7SUFDRTtNQUNFLG1CQUFlO1VBQWYsZUFBZSxFQUFFO0lBQ25CO01BQ0UsY0FBYyxFQUFFLEVBQUU7O0FBRXhCOzs7O0VBSUUsZ0JBQWdCO0VBQ2hCLGtCQUFrQjtFQUNsQix3QkFBd0I7RUFDeEIsZUFBZTtFQUNmLGNBQWMsRUFBRTs7QUFFbEI7Ozs7RUFJRSxnQkFBZ0I7RUFDaEIsb0JBQW9CO0VBQ3BCLHdCQUF3QjtFQUN4QixlQUFlO0VBQ2YsaUJBQWlCLEVBQUU7O0FBRXJCO0VBQ0UseUJBQXlCO0VBQ3pCLGlCQUFpQjtFQUNqQixvQkFBZ0I7TUFBaEIsZ0JBQWdCLEVBQUU7RUFDbEI7SUFDRSxtQkFBbUIsRUFBRTtJQUNyQjtNQUNFLGlCQUFpQixFQUFFO0VBQ3ZCO0lBQ0U7TUFDRSxtQkFBbUI7TUFDbkIsb0JBQW9CLEVBQUU7TUFDdEI7UUFDRSxjQUFjLEVBQUUsRUFBRTs7QUFFMUI7RUFDRSxxQkFBYztFQUFkLGNBQWM7RUFDZCxvQkFBb0I7RUFDcEIsV0FBVztFQUNYLHVCQUErQjtNQUEvQiwrQkFBK0I7RUFDL0IsaUJBQWlCO0VBQ2pCLFlBQVksRUFBRTtFQUNkO0lBQ0Usc0RBQXNEO0lBQ3RELDRCQUE0QjtJQUM1Qiw2QkFBNkI7SUFDN0IsZUFBZTtJQUNmLGFBQWEsRUFBRTtFQUNqQjtJQUNFO01BQ0Usc0JBQXdCO1VBQXhCLHdCQUF3QjtNQUN4QixvQkFBZ0I7VUFBaEIsZ0JBQWdCO01BQ2hCLGlCQUFpQixFQUFFO01BQ25CO1FBQ0UsYUFBYSxFQUFFLEVBQUU7RUFDdkI7SUFDRSxZQUFZLEVBQUU7RUFDaEI7SUFDRSw2QkFBNkI7SUFDN0IsWUFBWSxFQUFFO0VBQ2hCO0lBQ0UsNkJBQTZCO0lBQzdCLFlBQVksRUFBRTtFQUNoQjtJQUNFLDhCQUE4QjtJQUM5QixZQUFZLEVBQUU7RUFDaEI7SUFDRSw4QkFBOEI7SUFDOUIsYUFBYSxFQUFFO0VBQ2pCO0lBQ0UsOEJBQThCO0lBQzlCLFlBQVksRUFBRTtFQUNoQjtJQUNFLDhCQUE4QjtJQUM5QixZQUFZLEVBQUU7O0FBRWxCO0VBQ0UscUJBQXFCLEVBQUU7O0FBRXpCO0VBQ0UsY0FBYztFQUNkLHFCQUFxQixFQUFFIiwiZmlsZSI6InBhZ2VzL2VudGVycHJpc2UvY29udGFjdC5jc3MiLCJzb3VyY2VzQ29udGVudCI6WyIuZWUtaGVybyB7XG4gIG1heC13aWR0aDogNjQwcHg7XG4gIHBhZGRpbmctdG9wOiAxMzBweDtcbiAgcGFkZGluZy1ib3R0b206IDE2MHB4OyB9XG4gIC5lZS1oZXJvOjpiZWZvcmUsIC5lZS1oZXJvOjphZnRlciB7XG4gICAgZGlzcGxheTogbm9uZTsgfVxuICAuZWUtaGVybyBoMSB7XG4gICAgZm9udC1zaXplOiA1MnB4O1xuICAgIGxpbmUtaGVpZ2h0OiA2MnB4O1xuICAgIG1heC13aWR0aDogOTMwcHg7XG4gICAgbGV0dGVyLXNwYWNpbmc6IC0wLjAzZW07XG4gICAgY29sb3I6ICMwMjA4MTQ7XG4gICAgbWFyZ2luLXRvcDogMDtcbiAgICBtYXJnaW4tYm90dG9tOiAxNnB4OyB9XG4gIC5lZS1oZXJvIGg0IHtcbiAgICBmb250LWZhbWlseTogXCJSb2JvdG8gTW9ub1wiLCBNZW5sbywgTW9uYWNvLCBDb25zb2xhcywgXCJDb3VyaWVyIE5ld1wiLCBtb25vc3BhY2U7XG4gICAgZm9udC13ZWlnaHQ6IGJvbGQ7XG4gICAgZm9udC1zaXplOiAxM3B4O1xuICAgIGxpbmUtaGVpZ2h0OiAyNnB4O1xuICAgIGxldHRlci1zcGFjaW5nOiAwLjE0ZW07XG4gICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcbiAgICBjb2xvcjogIzkyQTFCMztcbiAgICBtYXJnaW4tYm90dG9tOiAyOXB4OyB9XG4gIC5lZS1oZXJvIHAge1xuICAgIGZvbnQtZmFtaWx5OiBcIkVpbmFcIiwgXCJIZWx2ZXRpY2EgTmV1ZVwiLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7XG4gICAgZm9udC1zaXplOiAyNHB4O1xuICAgIGZvbnQtd2VpZ2h0OiA0MDA7XG4gICAgbGluZS1oZWlnaHQ6IDM2cHg7XG4gICAgbGV0dGVyLXNwYWNpbmc6IC0wLjA0ZW07XG4gICAgY29sb3I6IHJnYmEoMzksIDUwLCA2MywgMC44KTsgfVxuICAuZWUtaGVybyAuYnRuIHtcbiAgICBwYWRkaW5nLWxlZnQ6IDI0cHg7XG4gICAgcGFkZGluZy1yaWdodDogMjBweDtcbiAgICBwYWRkaW5nLXRvcDogMThweDtcbiAgICBwYWRkaW5nLWJvdHRvbTogMThweDtcbiAgICBmb250LXNpemU6IDE0cHg7XG4gICAgbWFyZ2luLXRvcDogMTZweDtcbiAgICBsaW5lLWhlaWdodDogMjBweDtcbiAgICBsZXR0ZXItc3BhY2luZzogMC4wOGVtO1xuICAgIGNvbG9yOiB3aGl0ZTtcbiAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xuICAgIGZvbnQtd2VpZ2h0OiA3MDA7XG4gICAgYmFja2dyb3VuZDogIzM4ODBGRjtcbiAgICBib3gtc2hhZG93OiAwcHggMnB4IDRweCByZ2JhKDIsIDgsIDIwLCAwLjEpLCAwcHggMXB4IDJweCByZ2JhKDIsIDgsIDIwLCAwLjA4KTtcbiAgICBib3JkZXItcmFkaXVzOiAyMTBweDtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7IH1cbiAgICAuZWUtaGVybyAuYnRuOjphZnRlciB7XG4gICAgICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoJ2RhdGE6aW1hZ2Uvc3ZnK3htbDt1dGY4LDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIGZpbGw9XCJ3aGl0ZVwiIHZpZXdCb3g9XCIwIDAgNTEyIDUxMlwiPjxwYXRoIGQ9XCJNODUgMjc3LjM3NWgyNTkuNzA0TDIyNS4wMDIgMzk3LjA3NyAyNTYgNDI3bDE3MS0xNzFMMjU2IDg1bC0yOS45MjIgMjkuOTI0IDExOC42MjYgMTE5LjcwMUg4NXY0Mi43NXpcIi8+PC9zdmc+Jyk7XG4gICAgICBiYWNrZ3JvdW5kLXNpemU6IDEwMCU7XG4gICAgICBjb250ZW50OiAnJztcbiAgICAgIGhlaWdodDogMjBweDtcbiAgICAgIHdpZHRoOiAyMHB4O1xuICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICBtYXJnaW4tbGVmdDogOHB4O1xuICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC0xcHgpOyB9XG4gICAgLmVlLWhlcm8gLmJ0bjpob3ZlciB7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjNGY4YmY1OyB9XG4gIC5lZS1oZXJvLS1sYXJnZSBoMSB7XG4gICAgZm9udC1zaXplOiA2MnB4O1xuICAgIGxpbmUtaGVpZ2h0OiA2OXB4OyB9XG4gIC5lZS1oZXJvLS13aWRlIHtcbiAgICBtYXgtd2lkdGg6IDk2MHB4OyB9XG4gIC5lZS1oZXJvLS1jZW50ZXJlZCB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgIG1hcmdpbi1sZWZ0OiBhdXRvO1xuICAgIG1hcmdpbi1yaWdodDogYXV0bzsgfVxuICBAbWVkaWEgKG1heC13aWR0aDogNzY3cHgpIHtcbiAgICAuZWUtaGVybyB7XG4gICAgICBwYWRkaW5nLXRvcDogNzBweDtcbiAgICAgIHBhZGRpbmctYm90dG9tOiAwOyB9XG4gICAgICAuZWUtaGVybyBoMSB7XG4gICAgICAgIGZvbnQtc2l6ZTogNDRweDtcbiAgICAgICAgbGluZS1oZWlnaHQ6IDUycHg7IH1cbiAgICAgIC5lZS1oZXJvLS1sYXJnZSBoMSB7XG4gICAgICAgIGZvbnQtc2l6ZTogNTBweDtcbiAgICAgICAgbGluZS1oZWlnaHQ6IDYwcHg7IH0gfVxuICBAbWVkaWEgKG1heC13aWR0aDogNDgwcHgpIHtcbiAgICAuZWUtaGVybyBoMSB7XG4gICAgICBmb250LXNpemU6IDM2cHg7XG4gICAgICBsaW5lLWhlaWdodDogNDRweDtcbiAgICAgIG1hcmdpbi1ib3R0b206IDZweDsgfVxuICAgIC5lZS1oZXJvLS1sYXJnZSBoMSB7XG4gICAgICBmb250LXNpemU6IDQycHg7XG4gICAgICBsaW5lLWhlaWdodDogNTJweDsgfVxuICAgIC5lZS1oZXJvIC5idG4ge1xuICAgICAgbWFyZ2luLXRvcDogOHB4OyB9IH1cblxuLmVlLW1haW4ge1xuICBtYXJnaW4tdG9wOiAwOyB9XG4gIC5lZS1tYWluIHNlY3Rpb24ge1xuICAgIG1hcmdpbi1ib3R0b206IDIwMHB4OyB9XG4gIC5lZS1tYWluIC5sZWZ0LFxuICAuZWUtbWFpbiAucmlnaHQsXG4gIC5lZS1tYWluIC5jZW50ZXIge1xuICAgIGRpc3BsYXk6IGZsZXg7IH1cbiAgICAuZWUtbWFpbiAubGVmdDo6YmVmb3JlLCAuZWUtbWFpbiAubGVmdDo6YWZ0ZXIsXG4gICAgLmVlLW1haW4gLnJpZ2h0OjpiZWZvcmUsXG4gICAgLmVlLW1haW4gLnJpZ2h0OjphZnRlcixcbiAgICAuZWUtbWFpbiAuY2VudGVyOjpiZWZvcmUsXG4gICAgLmVlLW1haW4gLmNlbnRlcjo6YWZ0ZXIge1xuICAgICAgZGlzcGxheTogbm9uZTsgfVxuICAuZWUtbWFpbiAubGVmdCAuY29udGVudCxcbiAgLmVlLW1haW4gLnJpZ2h0IC5jb250ZW50IHtcbiAgICBtYXgtd2lkdGg6IDQ4MHB4OyB9XG4gICAgQG1lZGlhIChtYXgtd2lkdGg6IDc2N3B4KSB7XG4gICAgICAuZWUtbWFpbiAubGVmdCAuY29udGVudCxcbiAgICAgIC5lZS1tYWluIC5yaWdodCAuY29udGVudCB7XG4gICAgICAgIG1heC13aWR0aDogMTAwJTtcbiAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyOyB9XG4gICAgICAgIC5lZS1tYWluIC5sZWZ0IC5jb250ZW50IGxpLFxuICAgICAgICAuZWUtbWFpbiAucmlnaHQgLmNvbnRlbnQgbGkge1xuICAgICAgICAgIHRleHQtYWxpZ246IGxlZnQ7IH0gfVxuICAuZWUtbWFpbiAubGVmdCB7XG4gICAgZmxleC1kaXJlY3Rpb246IHJvdzsgfVxuICAgIC5lZS1tYWluIC5sZWZ0IC5ncmFwaGljcyB7XG4gICAgICBtYXJnaW4tbGVmdDogYXV0bzsgfVxuICAuZWUtbWFpbiAucmlnaHQge1xuICAgIGZsZXgtZGlyZWN0aW9uOiByb3ctcmV2ZXJzZTtcbiAgICBtYXJnaW4tbGVmdDogYXV0bzsgfVxuICAgIC5lZS1tYWluIC5yaWdodCAuZ3JhcGhpY3Mge1xuICAgICAgbWFyZ2luLXJpZ2h0OiBhdXRvOyB9XG4gIC5lZS1tYWluIC5jZW50ZXIge1xuICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7IH1cbiAgICAuZWUtbWFpbiAuY2VudGVyIC5jb250ZW50IHtcbiAgICAgIHdpZHRoOiA4OTRweDtcbiAgICAgIG1heC13aWR0aDogMTAwJTsgfVxuICAuZWUtbWFpbiAuZnVsbCAuY29udGVudCB7XG4gICAgbWF4LXdpZHRoOiA1NjhweDsgfVxuICBAbWVkaWEgKG1heC13aWR0aDogNzY3cHgpIHtcbiAgICAuZWUtbWFpbiAucmlnaHQsXG4gICAgLmVlLW1haW4gLmxlZnQge1xuICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbi1yZXZlcnNlO1xuICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsgfVxuICAgICAgLmVlLW1haW4gLnJpZ2h0IC5ncmFwaGljcyxcbiAgICAgIC5lZS1tYWluIC5sZWZ0IC5ncmFwaGljcyB7XG4gICAgICAgIG1hcmdpbi1ib3R0b206IDI0cHg7XG4gICAgICAgIG1hcmdpbi1sZWZ0OiAwO1xuICAgICAgICBtYXJnaW4tcmlnaHQ6IDA7IH1cbiAgICAuZWUtbWFpbiBzZWN0aW9uIHtcbiAgICAgIG1hcmdpbi1ib3R0b206IDEwMHB4OyB9IH1cbiAgLmVlLW1haW4gLmdyYXBoaWNzIHtcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtZW5kOyB9XG4gICAgLmVlLW1haW4gLmdyYXBoaWNzIGltZyB7XG4gICAgICB3aWR0aDogMTAwJTsgfVxuICAuZWUtbWFpbiBoMiB7XG4gICAgZm9udC1zaXplOiA0NHB4O1xuICAgIGxpbmUtaGVpZ2h0OiA1MXB4O1xuICAgIGxldHRlci1zcGFjaW5nOiAtMC4wM2VtOyB9XG4gICAgLmVlLW1haW4gaDI6Zmlyc3QtY2hpbGQge1xuICAgICAgbWFyZ2luLXRvcDogMDsgfVxuICAuZWUtbWFpbiAuZWUtc2VjdGlvbl9fdGl0bGUge1xuICAgIGZvbnQtZmFtaWx5OiBcIlJvYm90byBNb25vXCIsIE1lbmxvLCBNb25hY28sIENvbnNvbGFzLCBcIkNvdXJpZXIgTmV3XCIsIG1vbm9zcGFjZTtcbiAgICBmb250LXN0eWxlOiBub3JtYWw7XG4gICAgZm9udC13ZWlnaHQ6IGJvbGQ7XG4gICAgZm9udC1zaXplOiAxMnB4O1xuICAgIGxpbmUtaGVpZ2h0OiAyM3B4O1xuICAgIGxldHRlci1zcGFjaW5nOiAwLjE0ZW07XG4gICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcbiAgICBjb2xvcjogIzVCNzA4QjtcbiAgICBtYXJnaW4tdG9wOiAwOyB9XG4gIC5lZS1tYWluIC5lZS1zZWN0aW9uX19jdGEge1xuICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICBmb250LXNpemU6IDE4cHg7XG4gICAgZm9udC13ZWlnaHQ6IDUwMDtcbiAgICBtYXJnaW4tdG9wOiAxNnB4OyB9XG4gIC5lZS1tYWluIHAge1xuICAgIGZvbnQtc2l6ZTogMjBweDtcbiAgICBsaW5lLWhlaWdodDogMzFweDtcbiAgICBsZXR0ZXItc3BhY2luZzogLTAuMDJlbTtcbiAgICBjb2xvcjogIzVCNzA4QjtcbiAgICBtYXJnaW4tdG9wOiAxOHB4OyB9XG4gICAgLmVlLW1haW4gcC5zbSB7XG4gICAgICBmb250LXNpemU6IDE2cHg7XG4gICAgICBsaW5lLWhlaWdodDogMjlweDtcbiAgICAgIGxldHRlci1zcGFjaW5nOiAtMC4wMWVtOyB9XG4gIC5lZS1tYWluIHVsOm5vdCguZnJhbWV3b3Jrcykge1xuICAgIG1hcmdpbi10b3A6IDU0cHg7IH1cbiAgLmVlLW1haW4gLmNvbnRlbnQgdWwge1xuICAgIHBhZGRpbmctbGVmdDogMDsgfVxuICAuZWUtbWFpbiAuY29udGVudCBsaSB7XG4gICAgZm9udC1zaXplOiAxNnB4O1xuICAgIGxpbmUtaGVpZ2h0OiAyM3B4O1xuICAgIGxldHRlci1zcGFjaW5nOiAtMC4wMmVtO1xuICAgIGNvbG9yOiAjMUEyMzJGO1xuICAgIG1hcmdpbi1ib3R0b206IDQwcHg7XG4gICAgcGFkZGluZy1sZWZ0OiAzMHB4O1xuICAgIGxpc3Qtc3R5bGU6IG5vbmU7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlOyB9XG4gICAgLmVlLW1haW4gLmNvbnRlbnQgbGk6OmJlZm9yZSB7XG4gICAgICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXCIvaW1nL2VudGVycHJpc2UvY2hlY2suc3ZnXCIpO1xuICAgICAgYmFja2dyb3VuZC1zaXplOiAxMDAlO1xuICAgICAgY29udGVudDogJyc7XG4gICAgICBoZWlnaHQ6IDEwcHg7XG4gICAgICB3aWR0aDogMTNweDtcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgIGxlZnQ6IDA7XG4gICAgICB0b3A6IDhweDsgfVxuICAuZWUtbWFpbiAuZmVhdHVyZXMge1xuICAgIGRpc3BsYXk6IGdyaWQ7XG4gICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiAxZnIgMWZyIDFmcjtcbiAgICBncmlkLWNvbHVtbi1nYXA6IDY0cHg7XG4gICAgZ3JpZC1yb3ctZ2FwOiAyNHB4O1xuICAgIHBhZGRpbmc6IDA7IH1cbiAgICAuZWUtbWFpbiAuZmVhdHVyZXMgbGkge1xuICAgICAgbGlzdC1zdHlsZTogbm9uZTsgfVxuICAgIC5lZS1tYWluIC5mZWF0dXJlcyAuaWNvbiB7XG4gICAgICBtYXJnaW4tYm90dG9tOiAxNnB4O1xuICAgICAgd2lkdGg6IDQ4cHg7IH1cbiAgICBAbWVkaWEgKG1heC13aWR0aDogOTkxcHgpIHtcbiAgICAgIC5lZS1tYWluIC5mZWF0dXJlcyB7XG4gICAgICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogMWZyIDFmcjsgfSB9XG4gICAgQG1lZGlhIChtYXgtd2lkdGg6IDUwMHB4KSB7XG4gICAgICAuZWUtbWFpbiAuZmVhdHVyZXMge1xuICAgICAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IDFmcjsgfSB9XG4gIC5lZS1tYWluIC5jdGEtY2FyZCB7XG4gICAgYmFja2dyb3VuZDogIzRhOGJmYztcbiAgICBib3JkZXItcmFkaXVzOiAxMnB4O1xuICAgIHBhZGRpbmc6IDcycHggNzJweCA2MHB4O1xuICAgIGJhY2tncm91bmQtc2l6ZTogY292ZXI7XG4gICAgY29sb3I6IHdoaXRlOyB9XG4gICAgLmVlLW1haW4gLmN0YS1jYXJkIC5lZS1zZWN0aW9uX190aXRsZSxcbiAgICAuZWUtbWFpbiAuY3RhLWNhcmQgcCB7XG4gICAgICBjb2xvcjogI0NFRDZFMDsgfVxuXG4jaG93LXRvIHtcbiAgbWFyZ2luLWJvdHRvbTogMDtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBwYWRkaW5nLXRvcDogMTQwcHg7IH1cbiAgI2hvdy10bzo6YmVmb3JlIHtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgdG9wOiAwO1xuICAgIHdpZHRoOiAxMDB2dztcbiAgICBib3JkZXItdG9wOiAxcHggc29saWQgcmdiYSgxNDYsIDE2MSwgMTc5LCAwLjMpO1xuICAgIGNvbnRlbnQ6ICcnO1xuICAgIGRpc3BsYXk6IGJsb2NrOyB9XG5cbi5jYXJkcy0tcmVkLXYtYmx1ZSB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIHRleHQtYWxpZ246IGxlZnQ7XG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICBtYXJnaW4tdG9wOiAzOHB4OyB9XG4gIC5jYXJkcy0tcmVkLXYtYmx1ZV9fY2FyZCB7XG4gICAgYmFja2dyb3VuZDogIzdDQUJGRjtcbiAgICBib3JkZXItcmFkaXVzOiA4cHg7XG4gICAgcGFkZGluZzogNDBweCA0MHB4IDM0cHg7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgIGFsaWduLWl0ZW1zOiBmbGV4LXN0YXJ0O1xuICAgIG1hcmdpbi1yaWdodDogMjRweDtcbiAgICBmbGV4OiAwIDEgNDYwcHg7XG4gICAgYm9yZGVyLXJhZGl1czogOHB4OyB9XG4gICAgLmNhcmRzLS1yZWQtdi1ibHVlX19jYXJkOmxhc3QtY2hpbGQge1xuICAgICAgbWFyZ2luLXJpZ2h0OiAwOyB9XG4gICAgLmNhcmRzLS1yZWQtdi1ibHVlX19jYXJkOm50aC1jaGlsZCgyKSB7XG4gICAgICBiYWNrZ3JvdW5kOiAjRjg4RDhEOyB9XG4gICAgICAuY2FyZHMtLXJlZC12LWJsdWVfX2NhcmQ6bnRoLWNoaWxkKDIpIC5idG4ge1xuICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDI0NCwgODQsIDg0LCAwLjUpOyB9XG4gIC5jYXJkcy0tcmVkLXYtYmx1ZSBoMyB7XG4gICAgZm9udC1zaXplOiAyNHB4O1xuICAgIGxpbmUtaGVpZ2h0OiBub3JtYWw7XG4gICAgbGV0dGVyLXNwYWNpbmc6IC0wLjAyZW07XG4gICAgY29sb3I6IHdoaXRlO1xuICAgIG1hcmdpbi10b3A6IDA7IH1cbiAgLmNhcmRzLS1yZWQtdi1ibHVlIHAge1xuICAgIGZvbnQtc2l6ZTogMThweDtcbiAgICBsaW5lLWhlaWdodDogMjZweDtcbiAgICBsZXR0ZXItc3BhY2luZzogLTAuMDJlbTtcbiAgICBjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjcpO1xuICAgIG1hcmdpbi10b3A6IDA7XG4gICAgbWFyZ2luLWJvdHRvbTogMjJweDsgfVxuICAuY2FyZHMtLXJlZC12LWJsdWUgLmJ0biB7XG4gICAgbWFyZ2luLXRvcDogYXV0bztcbiAgICBmb250LXNpemU6IDE0cHg7XG4gICAgbGluZS1oZWlnaHQ6IDIycHg7XG4gICAgbGV0dGVyLXNwYWNpbmc6IDAuMDllbTtcbiAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xuICAgIHBhZGRpbmc6IDEwcHggMTRweDtcbiAgICBmb250LXdlaWdodDogNjAwO1xuICAgIGJvcmRlci1yYWRpdXM6IDhweDtcbiAgICBiYWNrZ3JvdW5kOiByZ2JhKDU2LCAxMjgsIDI1NSwgMC41KTsgfVxuICAgIC5jYXJkcy0tcmVkLXYtYmx1ZSAuYnRuIGlvbi1pY29uIHtcbiAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICAgIGhlaWdodDogMTRweDtcbiAgICAgIHdpZHRoOiAxNHB4O1xuICAgICAgdmVydGljYWwtYWxpZ246IC0ycHg7IH1cbiAgQG1lZGlhIChtYXgtd2lkdGg6IDc2N3B4KSB7XG4gICAgLmNhcmRzLS1yZWQtdi1ibHVlIHtcbiAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICBhbGlnbi1pdGVtczogY2VudGVyOyB9XG4gICAgICAuY2FyZHMtLXJlZC12LWJsdWVfX2NhcmQge1xuICAgICAgICBmbGV4OiBhdXRvO1xuICAgICAgICBtYXJnaW4tcmlnaHQ6IDA7XG4gICAgICAgIG1hcmdpbi10b3A6IDIwcHg7XG4gICAgICAgIG1heC13aWR0aDogNDYwcHg7IH0gfVxuXG5hc2lkZSB7XG4gIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCgxODBkZWcsICNGOUZBRkIgMCUsICNGRkZGRkYgMTAwJSk7XG4gIG1hcmdpbi10b3A6IC02MHB4O1xuICBwYWRkaW5nLXRvcDogMjAwcHg7XG4gIHBhZGRpbmctYm90dG9tOiAxMjBweDsgfVxuICBhc2lkZSBwIHtcbiAgICBjb2xvcjogIzQxNEQ1QzsgfVxuICBhc2lkZSAuY29udGVudCB7XG4gICAgbWF4LXdpZHRoOiA0MzJweDtcbiAgICBtYXJnaW46IDAgYXV0bztcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgZGlzcGxheTogYmxvY2s7IH1cblxuLmVlLWdldC1zdGFydGVkIHtcbiAgbWF4LXdpZHRoOiA3MDBweDsgfVxuICAuZWUtZ2V0LXN0YXJ0ZWQgaDMge1xuICAgIGNvbG9yOiAjNDE0RDVDOyB9XG5cbi5yZXNvdXJjZXMge1xuICBwYWRkaW5nLWJvdHRvbTogMTIwcHg7IH1cbiAgQG1lZGlhIChtYXgtd2lkdGg6IDc2OHB4KSB7XG4gICAgLnJlc291cmNlcyB7XG4gICAgICBwYWRkaW5nLWJvdHRvbTogNjBweDsgfSB9XG4gIC5yZXNvdXJjZXMgLmNhcmRzIHtcbiAgICBsaXN0LXN0eWxlLXR5cGU6IG5vbmU7XG4gICAgbWFyZ2luOiAwO1xuICAgIHBhZGRpbmc6IDA7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBtYXJnaW4tbGVmdDogLTI0cHg7XG4gICAgbWFyZ2luLXJpZ2h0OiAtMjRweDsgfVxuICAucmVzb3VyY2VzIGhncm91cCB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG4gICAgYWxpZ24taXRlbXM6IGJhc2VsaW5lOyB9XG4gICAgLnJlc291cmNlcyBoZ3JvdXAgaDMge1xuICAgICAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgICAgIGxpbmUtaGVpZ2h0OiBub3JtYWw7XG4gICAgICBmb250LXNpemU6IDI4cHg7XG4gICAgICBsZXR0ZXItc3BhY2luZzogLTAuMDJlbTtcbiAgICAgIGNvbG9yOiAjMUEyMzJGO1xuICAgICAgbWFyZ2luLWJvdHRvbTogMDsgfVxuICAgIC5yZXNvdXJjZXMgaGdyb3VwIGg0IHtcbiAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7XG4gICAgICBmb250LXNpemU6IDI0cHg7XG4gICAgICBsaW5lLWhlaWdodDogbm9ybWFsO1xuICAgICAgbGV0dGVyLXNwYWNpbmc6IC0wLjAyZW07XG4gICAgICBjb2xvcjogIzFBMjMyRjsgfVxuICAgIC5yZXNvdXJjZXMgaGdyb3VwIGg1IHtcbiAgICAgIGZvbnQtd2VpZ2h0OiA3MDA7XG4gICAgICBsaW5lLWhlaWdodDogMTtcbiAgICAgIGZvbnQtc2l6ZTogMTRweDtcbiAgICAgIGxldHRlci1zcGFjaW5nOiAwLjA4ZW07XG4gICAgICBjb2xvcjogIzM4ODBGRjtcbiAgICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7IH1cbiAgICAucmVzb3VyY2VzIGhncm91cCBpb24taWNvbiB7XG4gICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMnB4KTsgfVxuICAucmVzb3VyY2VzIC5jYXJkcyBsaSB7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgZmxleDogMCAwIDMzLjMzJTtcbiAgICBwYWRkaW5nOiAyNHB4OyB9XG4gICAgLnJlc291cmNlcyAuY2FyZHMgbGkgYSB7XG4gICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgIHdpZHRoOiAxMDAlOyB9XG4gICAgLnJlc291cmNlcyAuY2FyZHMgbGkgLmltZy13cmFwcGVyIHtcbiAgICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgICBib3JkZXItcmFkaXVzOiA2cHg7IH1cbiAgICAucmVzb3VyY2VzIC5jYXJkcyBsaSBpbWcge1xuICAgICAgd2lkdGg6IDEwMCU7IH1cbiAgICAucmVzb3VyY2VzIC5jYXJkcyBsaSBoNiB7XG4gICAgICBsaW5lLWhlaWdodDogMjNweDtcbiAgICAgIGZvbnQtc2l6ZTogMTJweDtcbiAgICAgIGxldHRlci1zcGFjaW5nOiAwLjEyZW07XG4gICAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xuICAgICAgY29sb3I6ICNCMkJFQ0Q7XG4gICAgICBtYXJnaW4tYm90dG9tOiAwO1xuICAgICAgbWFyZ2luLXRvcDogMTZweDsgfVxuICAgIC5yZXNvdXJjZXMgLmNhcmRzIGxpIGg0IHtcbiAgICAgIGZvbnQtc2l6ZTogMjBweDtcbiAgICAgIG1hcmdpbi10b3A6IDEwcHg7XG4gICAgICBjb2xvcjogIzFBMjMyRjtcbiAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7IH1cbiAgICAucmVzb3VyY2VzIC5jYXJkcyBsaSBwIHtcbiAgICAgIGNvbG9yOiAjNUI3MDhCO1xuICAgICAgbGluZS1oZWlnaHQ6IDIycHg7XG4gICAgICBmb250LXNpemU6IDE0cHg7XG4gICAgICBsZXR0ZXItc3BhY2luZzogLTAuMDJlbTsgfVxuICBAbWVkaWEgKG1heC13aWR0aDogOTkycHgpIHtcbiAgICAucmVzb3VyY2VzIC5jYXJkcyB7XG4gICAgICBtYXJnaW4tbGVmdDogLTEycHg7XG4gICAgICBtYXJnaW4tcmlnaHQ6IC0xMnB4OyB9XG4gICAgLnJlc291cmNlcyAuY2FyZHMgbGkge1xuICAgICAgcGFkZGluZzogMTJweDsgfSB9XG4gIEBtZWRpYSAobWF4LXdpZHRoOiA3NjhweCkge1xuICAgIC5yZXNvdXJjZXMgLmNhcmRzIHtcbiAgICAgIGZsZXgtd3JhcDogd3JhcDsgfVxuICAgIC5yZXNvdXJjZXMgLmNhcmRzIGxpIHtcbiAgICAgIGZsZXg6IDAgMCA1MCU7IH0gfVxuICBAbWVkaWEgKG1heC13aWR0aDogNDgwcHgpIHtcbiAgICAucmVzb3VyY2VzIC5jYXJkcyBsaSB7XG4gICAgICBmbGV4OiAwIDAgMTAwJTsgfVxuICAgIC5yZXNvdXJjZXMgaDUge1xuICAgICAgZGlzcGxheTogbm9uZTsgfSB9XG5cbi5lZS1tYWluIC5mZWF0dXJlcyBsaSBwLFxuLmVlLW1haW4gLmNhcmRzIGxpIHAsXG4ucmVzb3VyY2VzIC5mZWF0dXJlcyBsaSBwLFxuLnJlc291cmNlcyAuY2FyZHMgbGkgcCB7XG4gIGZvbnQtc2l6ZTogMTZweDtcbiAgbGluZS1oZWlnaHQ6IDI5cHg7XG4gIGxldHRlci1zcGFjaW5nOiAtMC4wMWVtO1xuICBjb2xvcjogIzczODQ5QTtcbiAgbWFyZ2luLXRvcDogMDsgfVxuXG4uZWUtbWFpbiAuZmVhdHVyZXMgbGkgaDQsXG4uZWUtbWFpbiAuY2FyZHMgbGkgaDQsXG4ucmVzb3VyY2VzIC5mZWF0dXJlcyBsaSBoNCxcbi5yZXNvdXJjZXMgLmNhcmRzIGxpIGg0IHtcbiAgZm9udC1zaXplOiAyMHB4O1xuICBsaW5lLWhlaWdodDogbm9ybWFsO1xuICBsZXR0ZXItc3BhY2luZzogLTAuMDJlbTtcbiAgY29sb3I6ICMwMjA4MTQ7XG4gIGZvbnQtd2VpZ2h0OiA2MDA7IH1cblxuLnJlc291cmNlcyAuY2FyZHMge1xuICBtYXJnaW4tdG9wOiAwICFpbXBvcnRhbnQ7XG4gIHRleHQtYWxpZ246IGxlZnQ7XG4gIGZsZXgtd3JhcDogd3JhcDsgfVxuICAucmVzb3VyY2VzIC5jYXJkcyAuaW1nLXdyYXBwZXIge1xuICAgIGJvcmRlci1yYWRpdXM6IDZweDsgfVxuICAgIC5yZXNvdXJjZXMgLmNhcmRzIC5pbWctd3JhcHBlciArIGg0IHtcbiAgICAgIG1hcmdpbi10b3A6IDI0cHg7IH1cbiAgQG1lZGlhIChtaW4td2lkdGg6IDEyMjBweCkge1xuICAgIC5yZXNvdXJjZXMgLmNhcmRzIHtcbiAgICAgIG1hcmdpbi1sZWZ0OiAtNDBweDtcbiAgICAgIG1hcmdpbi1yaWdodDogLTQwcHg7IH1cbiAgICAgIC5yZXNvdXJjZXMgLmNhcmRzIGxpIHtcbiAgICAgICAgcGFkZGluZzogNDBweDsgfSB9XG5cbi5yZXNvdXJjZXMgLnJlc291cmNlc19fY3VzdG9tZXItbG9nb3Mge1xuICBkaXNwbGF5OiBmbGV4O1xuICBtYXJnaW46IDI2cHggYXV0byAwO1xuICBwYWRkaW5nOiAwO1xuICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG4gIG1heC13aWR0aDogNzgwcHg7XG4gIHdpZHRoOiAxMDAlOyB9XG4gIC5yZXNvdXJjZXMgLnJlc291cmNlc19fY3VzdG9tZXItbG9nb3MgbGkge1xuICAgIGJhY2tncm91bmQ6IHVybChcIi9pbWcvZW50ZXJwcmlzZS9jdXN0b21lci1sb2dvcy5wbmdcIik7XG4gICAgYmFja2dyb3VuZC1zaXplOiA0MjhweCA0NnB4O1xuICAgIGJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgaGVpZ2h0OiA0NnB4OyB9XG4gIEBtZWRpYSAobWF4LXdpZHRoOiA3NjhweCkge1xuICAgIC5yZXNvdXJjZXMgLnJlc291cmNlc19fY3VzdG9tZXItbG9nb3Mge1xuICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gICAgICBmbGV4LXdyYXA6IHdyYXA7XG4gICAgICBtYXgtd2lkdGg6IDQ2MHB4OyB9XG4gICAgICAucmVzb3VyY2VzIC5yZXNvdXJjZXNfX2N1c3RvbWVyLWxvZ29zIGxpIHtcbiAgICAgICAgbWFyZ2luOiAyMHB4OyB9IH1cbiAgLnJlc291cmNlcyAucmVzb3VyY2VzX19jdXN0b21lci1sb2dvcyAubWFzdGVyY2FyZCB7XG4gICAgd2lkdGg6IDU4cHg7IH1cbiAgLnJlc291cmNlcyAucmVzb3VyY2VzX19jdXN0b21lci1sb2dvcyAubmF0aW9ud2lkZSB7XG4gICAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTU4cHggMDtcbiAgICB3aWR0aDogMzNweDsgfVxuICAucmVzb3VyY2VzIC5yZXNvdXJjZXNfX2N1c3RvbWVyLWxvZ29zIC51bmlxbG8ge1xuICAgIGJhY2tncm91bmQtcG9zaXRpb246IC05MXB4IDA7XG4gICAgd2lkdGg6IDY1cHg7IH1cbiAgLnJlc291cmNlcyAucmVzb3VyY2VzX19jdXN0b21lci1sb2dvcyAuaWJtIHtcbiAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTU2cHggMDtcbiAgICB3aWR0aDogNjRweDsgfVxuICAucmVzb3VyY2VzIC5yZXNvdXJjZXNfX2N1c3RvbWVyLWxvZ29zIC5pbmcge1xuICAgIGJhY2tncm91bmQtcG9zaXRpb246IC0yMjJweCAwO1xuICAgIHdpZHRoOiAxMDNweDsgfVxuICAucmVzb3VyY2VzIC5yZXNvdXJjZXNfX2N1c3RvbWVyLWxvZ29zIC5zYXAge1xuICAgIGJhY2tncm91bmQtcG9zaXRpb246IC0zMjZweCAwO1xuICAgIHdpZHRoOiA1NnB4OyB9XG4gIC5yZXNvdXJjZXMgLnJlc291cmNlc19fY3VzdG9tZXItbG9nb3MgLm5hc2Ege1xuICAgIGJhY2tncm91bmQtcG9zaXRpb246IC0zODBweCAwO1xuICAgIHdpZHRoOiA1MHB4OyB9XG5cbi5lZS1oZXJvIHtcbiAgcGFkZGluZy1ib3R0b206IDQwcHg7IH1cblxubWFpbiB7XG4gIG1hcmdpbi10b3A6IDA7XG4gIG1hcmdpbi1ib3R0b206IDE0MHB4OyB9XG4iXX0= */\n"
  },
  {
    "path": "content/css/pages/enterprise/customers.css",
    "content": ".ee-hero {\n  max-width: 640px;\n  padding-top: 130px;\n  padding-bottom: 160px; }\n  .ee-hero::before, .ee-hero::after {\n    display: none; }\n  .ee-hero h1 {\n    font-size: 52px;\n    line-height: 62px;\n    max-width: 930px;\n    letter-spacing: -0.03em;\n    color: #020814;\n    margin-top: 0;\n    margin-bottom: 16px; }\n  .ee-hero h4 {\n    font-family: \"Roboto Mono\", Menlo, Monaco, Consolas, \"Courier New\", monospace;\n    font-weight: bold;\n    font-size: 13px;\n    line-height: 26px;\n    letter-spacing: 0.14em;\n    text-transform: uppercase;\n    color: #92A1B3;\n    margin-bottom: 29px; }\n  .ee-hero p {\n    font-family: \"Eina\", \"Helvetica Neue\", Helvetica, sans-serif;\n    font-size: 24px;\n    font-weight: 400;\n    line-height: 36px;\n    letter-spacing: -0.04em;\n    color: rgba(39, 50, 63, 0.8); }\n  .ee-hero .btn {\n    padding-left: 24px;\n    padding-right: 20px;\n    padding-top: 18px;\n    padding-bottom: 18px;\n    font-size: 14px;\n    margin-top: 16px;\n    line-height: 20px;\n    letter-spacing: 0.08em;\n    color: white;\n    text-transform: uppercase;\n    font-weight: 700;\n    background: #3880FF;\n    box-shadow: 0px 2px 4px rgba(2, 8, 20, 0.1), 0px 1px 2px rgba(2, 8, 20, 0.08);\n    border-radius: 210px;\n    display: -ms-flexbox;\n    display: flex;\n    -ms-flex-align: center;\n        align-items: center; }\n    .ee-hero .btn::after {\n      background-image: url('data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"white\" viewBox=\"0 0 512 512\"><path d=\"M85 277.375h259.704L225.002 397.077 256 427l171-171L256 85l-29.922 29.924 118.626 119.701H85v42.75z\"/></svg>');\n      background-size: 100%;\n      content: '';\n      height: 20px;\n      width: 20px;\n      display: block;\n      margin-left: 8px;\n      -webkit-transform: translateY(-1px);\n              transform: translateY(-1px); }\n    .ee-hero .btn:hover {\n      background-color: #4f8bf5; }\n  .ee-hero--large h1 {\n    font-size: 62px;\n    line-height: 69px; }\n  .ee-hero--wide {\n    max-width: 960px; }\n  .ee-hero--centered {\n    display: -ms-flexbox;\n    display: flex;\n    -ms-flex-direction: column;\n        flex-direction: column;\n    -ms-flex-pack: center;\n        justify-content: center;\n    -ms-flex-align: center;\n        align-items: center;\n    text-align: center;\n    margin-left: auto;\n    margin-right: auto; }\n  @media (max-width: 767px) {\n    .ee-hero {\n      padding-top: 70px;\n      padding-bottom: 0; }\n      .ee-hero h1 {\n        font-size: 44px;\n        line-height: 52px; }\n      .ee-hero--large h1 {\n        font-size: 50px;\n        line-height: 60px; } }\n  @media (max-width: 480px) {\n    .ee-hero h1 {\n      font-size: 36px;\n      line-height: 44px;\n      margin-bottom: 6px; }\n    .ee-hero--large h1 {\n      font-size: 42px;\n      line-height: 52px; }\n    .ee-hero .btn {\n      margin-top: 8px; } }\n\n.ee-main {\n  margin-top: 0; }\n  .ee-main section {\n    margin-bottom: 200px; }\n  .ee-main .left,\n  .ee-main .right,\n  .ee-main .center {\n    display: -ms-flexbox;\n    display: flex; }\n    .ee-main .left::before, .ee-main .left::after,\n    .ee-main .right::before,\n    .ee-main .right::after,\n    .ee-main .center::before,\n    .ee-main .center::after {\n      display: none; }\n  .ee-main .left .content,\n  .ee-main .right .content {\n    max-width: 480px; }\n    @media (max-width: 767px) {\n      .ee-main .left .content,\n      .ee-main .right .content {\n        max-width: 100%;\n        text-align: center; }\n        .ee-main .left .content li,\n        .ee-main .right .content li {\n          text-align: left; } }\n  .ee-main .left {\n    -ms-flex-direction: row;\n        flex-direction: row; }\n    .ee-main .left .graphics {\n      margin-left: auto; }\n  .ee-main .right {\n    -ms-flex-direction: row-reverse;\n        flex-direction: row-reverse;\n    margin-left: auto; }\n    .ee-main .right .graphics {\n      margin-right: auto; }\n  .ee-main .center {\n    -ms-flex-direction: column;\n        flex-direction: column;\n    -ms-flex-align: center;\n        align-items: center;\n    text-align: center; }\n    .ee-main .center .content {\n      width: 894px;\n      max-width: 100%; }\n  .ee-main .full .content {\n    max-width: 568px; }\n  @media (max-width: 767px) {\n    .ee-main .right,\n    .ee-main .left {\n      -ms-flex-direction: column-reverse;\n          flex-direction: column-reverse;\n      -ms-flex-align: center;\n          align-items: center; }\n      .ee-main .right .graphics,\n      .ee-main .left .graphics {\n        margin-bottom: 24px;\n        margin-left: 0;\n        margin-right: 0; }\n    .ee-main section {\n      margin-bottom: 100px; } }\n  .ee-main .graphics {\n    -ms-flex-pack: end;\n        justify-content: flex-end; }\n    .ee-main .graphics img {\n      width: 100%; }\n  .ee-main h2 {\n    font-size: 44px;\n    line-height: 51px;\n    letter-spacing: -0.03em; }\n    .ee-main h2:first-child {\n      margin-top: 0; }\n  .ee-main .ee-section__title {\n    font-family: \"Roboto Mono\", Menlo, Monaco, Consolas, \"Courier New\", monospace;\n    font-style: normal;\n    font-weight: bold;\n    font-size: 12px;\n    line-height: 23px;\n    letter-spacing: 0.14em;\n    text-transform: uppercase;\n    color: #5B708B;\n    margin-top: 0; }\n  .ee-main .ee-section__cta {\n    display: inline-block;\n    font-size: 18px;\n    font-weight: 500;\n    margin-top: 16px; }\n  .ee-main p {\n    font-size: 20px;\n    line-height: 31px;\n    letter-spacing: -0.02em;\n    color: #5B708B;\n    margin-top: 18px; }\n    .ee-main p.sm {\n      font-size: 16px;\n      line-height: 29px;\n      letter-spacing: -0.01em; }\n  .ee-main ul:not(.frameworks) {\n    margin-top: 54px; }\n  .ee-main .content ul {\n    padding-left: 0; }\n  .ee-main .content li {\n    font-size: 16px;\n    line-height: 23px;\n    letter-spacing: -0.02em;\n    color: #1A232F;\n    margin-bottom: 40px;\n    padding-left: 30px;\n    list-style: none;\n    position: relative; }\n    .ee-main .content li::before {\n      background-image: url(\"/img/enterprise/check.svg\");\n      background-size: 100%;\n      content: '';\n      height: 10px;\n      width: 13px;\n      position: absolute;\n      left: 0;\n      top: 8px; }\n  .ee-main .features {\n    display: -ms-grid;\n    display: grid;\n    -ms-grid-columns: 1fr 1fr 1fr;\n        grid-template-columns: 1fr 1fr 1fr;\n    grid-column-gap: 64px;\n    grid-row-gap: 24px;\n    padding: 0; }\n    .ee-main .features li {\n      list-style: none; }\n    .ee-main .features .icon {\n      margin-bottom: 16px;\n      width: 48px; }\n    @media (max-width: 991px) {\n      .ee-main .features {\n        -ms-grid-columns: 1fr 1fr;\n            grid-template-columns: 1fr 1fr; } }\n    @media (max-width: 500px) {\n      .ee-main .features {\n        -ms-grid-columns: 1fr;\n            grid-template-columns: 1fr; } }\n  .ee-main .cta-card {\n    background: #4a8bfc;\n    border-radius: 12px;\n    padding: 72px 72px 60px;\n    background-size: cover;\n    color: white; }\n    .ee-main .cta-card .ee-section__title,\n    .ee-main .cta-card p {\n      color: #CED6E0; }\n\n#how-to {\n  margin-bottom: 0;\n  position: relative;\n  padding-top: 140px; }\n  #how-to::before {\n    position: absolute;\n    top: 0;\n    width: 100vw;\n    border-top: 1px solid rgba(146, 161, 179, 0.3);\n    content: '';\n    display: block; }\n\n.cards--red-v-blue {\n  display: -ms-flexbox;\n  display: flex;\n  text-align: left;\n  -ms-flex-pack: center;\n      justify-content: center;\n  margin-top: 38px; }\n  .cards--red-v-blue__card {\n    background: #7CABFF;\n    border-radius: 8px;\n    padding: 40px 40px 34px;\n    display: -ms-flexbox;\n    display: flex;\n    -ms-flex-direction: column;\n        flex-direction: column;\n    -ms-flex-align: start;\n        align-items: flex-start;\n    margin-right: 24px;\n    -ms-flex: 0 1 460px;\n        flex: 0 1 460px;\n    border-radius: 8px; }\n    .cards--red-v-blue__card:last-child {\n      margin-right: 0; }\n    .cards--red-v-blue__card:nth-child(2) {\n      background: #F88D8D; }\n      .cards--red-v-blue__card:nth-child(2) .btn {\n        background: rgba(244, 84, 84, 0.5); }\n  .cards--red-v-blue h3 {\n    font-size: 24px;\n    line-height: normal;\n    letter-spacing: -0.02em;\n    color: white;\n    margin-top: 0; }\n  .cards--red-v-blue p {\n    font-size: 18px;\n    line-height: 26px;\n    letter-spacing: -0.02em;\n    color: rgba(255, 255, 255, 0.7);\n    margin-top: 0;\n    margin-bottom: 22px; }\n  .cards--red-v-blue .btn {\n    margin-top: auto;\n    font-size: 14px;\n    line-height: 22px;\n    letter-spacing: 0.09em;\n    text-transform: uppercase;\n    padding: 10px 14px;\n    font-weight: 600;\n    border-radius: 8px;\n    background: rgba(56, 128, 255, 0.5); }\n    .cards--red-v-blue .btn ion-icon {\n      display: inline-block;\n      height: 14px;\n      width: 14px;\n      vertical-align: -2px; }\n  @media (max-width: 767px) {\n    .cards--red-v-blue {\n      -ms-flex-direction: column;\n          flex-direction: column;\n      -ms-flex-align: center;\n          align-items: center; }\n      .cards--red-v-blue__card {\n        -ms-flex: auto;\n            flex: auto;\n        margin-right: 0;\n        margin-top: 20px;\n        max-width: 460px; } }\n\naside {\n  background: linear-gradient(180deg, #F9FAFB 0%, #FFFFFF 100%);\n  margin-top: -60px;\n  padding-top: 200px;\n  padding-bottom: 120px; }\n  aside p {\n    color: #414D5C; }\n  aside .content {\n    max-width: 432px;\n    margin: 0 auto;\n    text-align: center;\n    display: block; }\n\n.ee-get-started {\n  max-width: 700px; }\n  .ee-get-started h3 {\n    color: #414D5C; }\n\n.resources {\n  padding-bottom: 120px; }\n  @media (max-width: 768px) {\n    .resources {\n      padding-bottom: 60px; } }\n  .resources .cards {\n    list-style-type: none;\n    margin: 0;\n    padding: 0;\n    display: -ms-flexbox;\n    display: flex;\n    margin-left: -24px;\n    margin-right: -24px; }\n  .resources hgroup {\n    display: -ms-flexbox;\n    display: flex;\n    -ms-flex-pack: justify;\n        justify-content: space-between;\n    -ms-flex-align: baseline;\n        align-items: baseline; }\n    .resources hgroup h3 {\n      font-weight: 600;\n      line-height: normal;\n      font-size: 28px;\n      letter-spacing: -0.02em;\n      color: #1A232F;\n      margin-bottom: 0; }\n    .resources hgroup h4 {\n      font-weight: 600;\n      font-size: 24px;\n      line-height: normal;\n      letter-spacing: -0.02em;\n      color: #1A232F; }\n    .resources hgroup h5 {\n      font-weight: 700;\n      line-height: 1;\n      font-size: 14px;\n      letter-spacing: 0.08em;\n      color: #3880FF;\n      text-transform: uppercase; }\n    .resources hgroup ion-icon {\n      -webkit-transform: translateY(2px);\n              transform: translateY(2px); }\n  .resources .cards li {\n    display: block;\n    -ms-flex: 0 0 33.33%;\n        flex: 0 0 33.33%;\n    padding: 24px; }\n    .resources .cards li a {\n      display: block;\n      width: 100%; }\n    .resources .cards li .img-wrapper {\n      overflow: hidden;\n      border-radius: 6px; }\n    .resources .cards li img {\n      width: 100%; }\n    .resources .cards li h6 {\n      line-height: 23px;\n      font-size: 12px;\n      letter-spacing: 0.12em;\n      text-transform: uppercase;\n      color: #B2BECD;\n      margin-bottom: 0;\n      margin-top: 16px; }\n    .resources .cards li h4 {\n      font-size: 20px;\n      margin-top: 10px;\n      color: #1A232F;\n      font-weight: 600; }\n    .resources .cards li p {\n      color: #5B708B;\n      line-height: 22px;\n      font-size: 14px;\n      letter-spacing: -0.02em; }\n  @media (max-width: 992px) {\n    .resources .cards {\n      margin-left: -12px;\n      margin-right: -12px; }\n    .resources .cards li {\n      padding: 12px; } }\n  @media (max-width: 768px) {\n    .resources .cards {\n      -ms-flex-wrap: wrap;\n          flex-wrap: wrap; }\n    .resources .cards li {\n      -ms-flex: 0 0 50%;\n          flex: 0 0 50%; } }\n  @media (max-width: 480px) {\n    .resources .cards li {\n      -ms-flex: 0 0 100%;\n          flex: 0 0 100%; }\n    .resources h5 {\n      display: none; } }\n\n.ee-main .features li p,\n.ee-main .cards li p,\n.resources .features li p,\n.resources .cards li p {\n  font-size: 16px;\n  line-height: 29px;\n  letter-spacing: -0.01em;\n  color: #73849A;\n  margin-top: 0; }\n\n.ee-main .features li h4,\n.ee-main .cards li h4,\n.resources .features li h4,\n.resources .cards li h4 {\n  font-size: 20px;\n  line-height: normal;\n  letter-spacing: -0.02em;\n  color: #020814;\n  font-weight: 600; }\n\n.resources .cards {\n  margin-top: 0 !important;\n  text-align: left;\n  -ms-flex-wrap: wrap;\n      flex-wrap: wrap; }\n  .resources .cards .img-wrapper {\n    border-radius: 6px; }\n    .resources .cards .img-wrapper + h4 {\n      margin-top: 24px; }\n  @media (min-width: 1220px) {\n    .resources .cards {\n      margin-left: -40px;\n      margin-right: -40px; }\n      .resources .cards li {\n        padding: 40px; } }\n\n.resources .resources__customer-logos {\n  display: -ms-flexbox;\n  display: flex;\n  margin: 26px auto 0;\n  padding: 0;\n  -ms-flex-pack: justify;\n      justify-content: space-between;\n  max-width: 780px;\n  width: 100%; }\n  .resources .resources__customer-logos li {\n    background: url(\"/img/enterprise/customer-logos.png\");\n    background-size: 428px 46px;\n    background-repeat: no-repeat;\n    display: block;\n    height: 46px; }\n  @media (max-width: 768px) {\n    .resources .resources__customer-logos {\n      -ms-flex-pack: center;\n          justify-content: center;\n      -ms-flex-wrap: wrap;\n          flex-wrap: wrap;\n      max-width: 460px; }\n      .resources .resources__customer-logos li {\n        margin: 20px; } }\n  .resources .resources__customer-logos .mastercard {\n    width: 58px; }\n  .resources .resources__customer-logos .nationwide {\n    background-position: -58px 0;\n    width: 33px; }\n  .resources .resources__customer-logos .uniqlo {\n    background-position: -91px 0;\n    width: 65px; }\n  .resources .resources__customer-logos .ibm {\n    background-position: -156px 0;\n    width: 64px; }\n  .resources .resources__customer-logos .ing {\n    background-position: -222px 0;\n    width: 103px; }\n  .resources .resources__customer-logos .sap {\n    background-position: -326px 0;\n    width: 56px; }\n  .resources .resources__customer-logos .nasa {\n    background-position: -380px 0;\n    width: 50px; }\n\n.ee-main .left,\n.ee-main .right {\n  -ms-flex-align: center;\n      align-items: center; }\n  .ee-main .left .graphics,\n  .ee-main .right .graphics {\n    width: calc(100% - 520px);\n    max-width: 560px; }\n    .ee-main .left .graphics img,\n    .ee-main .right .graphics img {\n      max-width: 100%; }\n    @media (max-width: 767px) {\n      .ee-main .left .graphics,\n      .ee-main .right .graphics {\n        width: 320px;\n        max-width: 100%; } }\n\n.ee-main .ee-section-wrapper--gradient {\n  background: linear-gradient(180deg, #F9FAFB 0%, #FFFFFF 100%); }\n  .ee-main .ee-section-wrapper--gradient section {\n    padding-top: 150px;\n    margin-bottom: 120px; }\n  .ee-main .ee-section-wrapper--gradient aside {\n    padding-top: 150px;\n    background: none;\n    padding-bottom: 0px; }\n\n#marketwatch .logo {\n  width: 214px;\n  height: 32px; }\n\n#marketwatch .graphics img {\n  width: 546px; }\n\n#sworkit .logo {\n  width: 200px;\n  height: 34px; }\n\n#sworkit .graphics img {\n  width: 560px; }\n\n#instant-pot .logo {\n  width: 193px;\n  height: 36px; }\n\n#instant-pot .graphics img {\n  width: 546px; }\n\n#shipt .logo {\n  width: 192px;\n  height: 72px; }\n\n#shipt .graphics img {\n  width: 546px; }\n\n#untappd .logo {\n  width: 192px;\n  height: 32px; }\n\n#untappd .graphics img {\n  width: 560px; }\n\n/*# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImN1c3RvbWVycy5jc3MiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7RUFDRSxpQkFBaUI7RUFDakIsbUJBQW1CO0VBQ25CLHNCQUFzQixFQUFFO0VBQ3hCO0lBQ0UsY0FBYyxFQUFFO0VBQ2xCO0lBQ0UsZ0JBQWdCO0lBQ2hCLGtCQUFrQjtJQUNsQixpQkFBaUI7SUFDakIsd0JBQXdCO0lBQ3hCLGVBQWU7SUFDZixjQUFjO0lBQ2Qsb0JBQW9CLEVBQUU7RUFDeEI7SUFDRSw4RUFBOEU7SUFDOUUsa0JBQWtCO0lBQ2xCLGdCQUFnQjtJQUNoQixrQkFBa0I7SUFDbEIsdUJBQXVCO0lBQ3ZCLDBCQUEwQjtJQUMxQixlQUFlO0lBQ2Ysb0JBQW9CLEVBQUU7RUFDeEI7SUFDRSw2REFBNkQ7SUFDN0QsZ0JBQWdCO0lBQ2hCLGlCQUFpQjtJQUNqQixrQkFBa0I7SUFDbEIsd0JBQXdCO0lBQ3hCLDZCQUE2QixFQUFFO0VBQ2pDO0lBQ0UsbUJBQW1CO0lBQ25CLG9CQUFvQjtJQUNwQixrQkFBa0I7SUFDbEIscUJBQXFCO0lBQ3JCLGdCQUFnQjtJQUNoQixpQkFBaUI7SUFDakIsa0JBQWtCO0lBQ2xCLHVCQUF1QjtJQUN2QixhQUFhO0lBQ2IsMEJBQTBCO0lBQzFCLGlCQUFpQjtJQUNqQixvQkFBb0I7SUFDcEIsOEVBQThFO0lBQzlFLHFCQUFxQjtJQUNyQixxQkFBYztJQUFkLGNBQWM7SUFDZCx1QkFBb0I7UUFBcEIsb0JBQW9CLEVBQUU7SUFDdEI7TUFDRSxrUEFBa1A7TUFDbFAsc0JBQXNCO01BQ3RCLFlBQVk7TUFDWixhQUFhO01BQ2IsWUFBWTtNQUNaLGVBQWU7TUFDZixpQkFBaUI7TUFDakIsb0NBQTRCO2NBQTVCLDRCQUE0QixFQUFFO0lBQ2hDO01BQ0UsMEJBQTBCLEVBQUU7RUFDaEM7SUFDRSxnQkFBZ0I7SUFDaEIsa0JBQWtCLEVBQUU7RUFDdEI7SUFDRSxpQkFBaUIsRUFBRTtFQUNyQjtJQUNFLHFCQUFjO0lBQWQsY0FBYztJQUNkLDJCQUF1QjtRQUF2Qix1QkFBdUI7SUFDdkIsc0JBQXdCO1FBQXhCLHdCQUF3QjtJQUN4Qix1QkFBb0I7UUFBcEIsb0JBQW9CO0lBQ3BCLG1CQUFtQjtJQUNuQixrQkFBa0I7SUFDbEIsbUJBQW1CLEVBQUU7RUFDdkI7SUFDRTtNQUNFLGtCQUFrQjtNQUNsQixrQkFBa0IsRUFBRTtNQUNwQjtRQUNFLGdCQUFnQjtRQUNoQixrQkFBa0IsRUFBRTtNQUN0QjtRQUNFLGdCQUFnQjtRQUNoQixrQkFBa0IsRUFBRSxFQUFFO0VBQzVCO0lBQ0U7TUFDRSxnQkFBZ0I7TUFDaEIsa0JBQWtCO01BQ2xCLG1CQUFtQixFQUFFO0lBQ3ZCO01BQ0UsZ0JBQWdCO01BQ2hCLGtCQUFrQixFQUFFO0lBQ3RCO01BQ0UsZ0JBQWdCLEVBQUUsRUFBRTs7QUFFMUI7RUFDRSxjQUFjLEVBQUU7RUFDaEI7SUFDRSxxQkFBcUIsRUFBRTtFQUN6Qjs7O0lBR0UscUJBQWM7SUFBZCxjQUFjLEVBQUU7SUFDaEI7Ozs7O01BS0UsY0FBYyxFQUFFO0VBQ3BCOztJQUVFLGlCQUFpQixFQUFFO0lBQ25CO01BQ0U7O1FBRUUsZ0JBQWdCO1FBQ2hCLG1CQUFtQixFQUFFO1FBQ3JCOztVQUVFLGlCQUFpQixFQUFFLEVBQUU7RUFDN0I7SUFDRSx3QkFBb0I7UUFBcEIsb0JBQW9CLEVBQUU7SUFDdEI7TUFDRSxrQkFBa0IsRUFBRTtFQUN4QjtJQUNFLGdDQUE0QjtRQUE1Qiw0QkFBNEI7SUFDNUIsa0JBQWtCLEVBQUU7SUFDcEI7TUFDRSxtQkFBbUIsRUFBRTtFQUN6QjtJQUNFLDJCQUF1QjtRQUF2Qix1QkFBdUI7SUFDdkIsdUJBQW9CO1FBQXBCLG9CQUFvQjtJQUNwQixtQkFBbUIsRUFBRTtJQUNyQjtNQUNFLGFBQWE7TUFDYixnQkFBZ0IsRUFBRTtFQUN0QjtJQUNFLGlCQUFpQixFQUFFO0VBQ3JCO0lBQ0U7O01BRUUsbUNBQStCO1VBQS9CLCtCQUErQjtNQUMvQix1QkFBb0I7VUFBcEIsb0JBQW9CLEVBQUU7TUFDdEI7O1FBRUUsb0JBQW9CO1FBQ3BCLGVBQWU7UUFDZixnQkFBZ0IsRUFBRTtJQUN0QjtNQUNFLHFCQUFxQixFQUFFLEVBQUU7RUFDN0I7SUFDRSxtQkFBMEI7UUFBMUIsMEJBQTBCLEVBQUU7SUFDNUI7TUFDRSxZQUFZLEVBQUU7RUFDbEI7SUFDRSxnQkFBZ0I7SUFDaEIsa0JBQWtCO0lBQ2xCLHdCQUF3QixFQUFFO0lBQzFCO01BQ0UsY0FBYyxFQUFFO0VBQ3BCO0lBQ0UsOEVBQThFO0lBQzlFLG1CQUFtQjtJQUNuQixrQkFBa0I7SUFDbEIsZ0JBQWdCO0lBQ2hCLGtCQUFrQjtJQUNsQix1QkFBdUI7SUFDdkIsMEJBQTBCO0lBQzFCLGVBQWU7SUFDZixjQUFjLEVBQUU7RUFDbEI7SUFDRSxzQkFBc0I7SUFDdEIsZ0JBQWdCO0lBQ2hCLGlCQUFpQjtJQUNqQixpQkFBaUIsRUFBRTtFQUNyQjtJQUNFLGdCQUFnQjtJQUNoQixrQkFBa0I7SUFDbEIsd0JBQXdCO0lBQ3hCLGVBQWU7SUFDZixpQkFBaUIsRUFBRTtJQUNuQjtNQUNFLGdCQUFnQjtNQUNoQixrQkFBa0I7TUFDbEIsd0JBQXdCLEVBQUU7RUFDOUI7SUFDRSxpQkFBaUIsRUFBRTtFQUNyQjtJQUNFLGdCQUFnQixFQUFFO0VBQ3BCO0lBQ0UsZ0JBQWdCO0lBQ2hCLGtCQUFrQjtJQUNsQix3QkFBd0I7SUFDeEIsZUFBZTtJQUNmLG9CQUFvQjtJQUNwQixtQkFBbUI7SUFDbkIsaUJBQWlCO0lBQ2pCLG1CQUFtQixFQUFFO0lBQ3JCO01BQ0UsbURBQW1EO01BQ25ELHNCQUFzQjtNQUN0QixZQUFZO01BQ1osYUFBYTtNQUNiLFlBQVk7TUFDWixtQkFBbUI7TUFDbkIsUUFBUTtNQUNSLFNBQVMsRUFBRTtFQUNmO0lBQ0Usa0JBQWM7SUFBZCxjQUFjO0lBQ2QsOEJBQW1DO1FBQW5DLG1DQUFtQztJQUNuQyxzQkFBc0I7SUFDdEIsbUJBQW1CO0lBQ25CLFdBQVcsRUFBRTtJQUNiO01BQ0UsaUJBQWlCLEVBQUU7SUFDckI7TUFDRSxvQkFBb0I7TUFDcEIsWUFBWSxFQUFFO0lBQ2hCO01BQ0U7UUFDRSwwQkFBK0I7WUFBL0IsK0JBQStCLEVBQUUsRUFBRTtJQUN2QztNQUNFO1FBQ0Usc0JBQTJCO1lBQTNCLDJCQUEyQixFQUFFLEVBQUU7RUFDckM7SUFDRSxvQkFBb0I7SUFDcEIsb0JBQW9CO0lBQ3BCLHdCQUF3QjtJQUN4Qix1QkFBdUI7SUFDdkIsYUFBYSxFQUFFO0lBQ2Y7O01BRUUsZUFBZSxFQUFFOztBQUV2QjtFQUNFLGlCQUFpQjtFQUNqQixtQkFBbUI7RUFDbkIsbUJBQW1CLEVBQUU7RUFDckI7SUFDRSxtQkFBbUI7SUFDbkIsT0FBTztJQUNQLGFBQWE7SUFDYiwrQ0FBK0M7SUFDL0MsWUFBWTtJQUNaLGVBQWUsRUFBRTs7QUFFckI7RUFDRSxxQkFBYztFQUFkLGNBQWM7RUFDZCxpQkFBaUI7RUFDakIsc0JBQXdCO01BQXhCLHdCQUF3QjtFQUN4QixpQkFBaUIsRUFBRTtFQUNuQjtJQUNFLG9CQUFvQjtJQUNwQixtQkFBbUI7SUFDbkIsd0JBQXdCO0lBQ3hCLHFCQUFjO0lBQWQsY0FBYztJQUNkLDJCQUF1QjtRQUF2Qix1QkFBdUI7SUFDdkIsc0JBQXdCO1FBQXhCLHdCQUF3QjtJQUN4QixtQkFBbUI7SUFDbkIsb0JBQWdCO1FBQWhCLGdCQUFnQjtJQUNoQixtQkFBbUIsRUFBRTtJQUNyQjtNQUNFLGdCQUFnQixFQUFFO0lBQ3BCO01BQ0Usb0JBQW9CLEVBQUU7TUFDdEI7UUFDRSxtQ0FBbUMsRUFBRTtFQUMzQztJQUNFLGdCQUFnQjtJQUNoQixvQkFBb0I7SUFDcEIsd0JBQXdCO0lBQ3hCLGFBQWE7SUFDYixjQUFjLEVBQUU7RUFDbEI7SUFDRSxnQkFBZ0I7SUFDaEIsa0JBQWtCO0lBQ2xCLHdCQUF3QjtJQUN4QixnQ0FBZ0M7SUFDaEMsY0FBYztJQUNkLG9CQUFvQixFQUFFO0VBQ3hCO0lBQ0UsaUJBQWlCO0lBQ2pCLGdCQUFnQjtJQUNoQixrQkFBa0I7SUFDbEIsdUJBQXVCO0lBQ3ZCLDBCQUEwQjtJQUMxQixtQkFBbUI7SUFDbkIsaUJBQWlCO0lBQ2pCLG1CQUFtQjtJQUNuQixvQ0FBb0MsRUFBRTtJQUN0QztNQUNFLHNCQUFzQjtNQUN0QixhQUFhO01BQ2IsWUFBWTtNQUNaLHFCQUFxQixFQUFFO0VBQzNCO0lBQ0U7TUFDRSwyQkFBdUI7VUFBdkIsdUJBQXVCO01BQ3ZCLHVCQUFvQjtVQUFwQixvQkFBb0IsRUFBRTtNQUN0QjtRQUNFLGVBQVc7WUFBWCxXQUFXO1FBQ1gsZ0JBQWdCO1FBQ2hCLGlCQUFpQjtRQUNqQixpQkFBaUIsRUFBRSxFQUFFOztBQUU3QjtFQUNFLDhEQUE4RDtFQUM5RCxrQkFBa0I7RUFDbEIsbUJBQW1CO0VBQ25CLHNCQUFzQixFQUFFO0VBQ3hCO0lBQ0UsZUFBZSxFQUFFO0VBQ25CO0lBQ0UsaUJBQWlCO0lBQ2pCLGVBQWU7SUFDZixtQkFBbUI7SUFDbkIsZUFBZSxFQUFFOztBQUVyQjtFQUNFLGlCQUFpQixFQUFFO0VBQ25CO0lBQ0UsZUFBZSxFQUFFOztBQUVyQjtFQUNFLHNCQUFzQixFQUFFO0VBQ3hCO0lBQ0U7TUFDRSxxQkFBcUIsRUFBRSxFQUFFO0VBQzdCO0lBQ0Usc0JBQXNCO0lBQ3RCLFVBQVU7SUFDVixXQUFXO0lBQ1gscUJBQWM7SUFBZCxjQUFjO0lBQ2QsbUJBQW1CO0lBQ25CLG9CQUFvQixFQUFFO0VBQ3hCO0lBQ0UscUJBQWM7SUFBZCxjQUFjO0lBQ2QsdUJBQStCO1FBQS9CLCtCQUErQjtJQUMvQix5QkFBc0I7UUFBdEIsc0JBQXNCLEVBQUU7SUFDeEI7TUFDRSxpQkFBaUI7TUFDakIsb0JBQW9CO01BQ3BCLGdCQUFnQjtNQUNoQix3QkFBd0I7TUFDeEIsZUFBZTtNQUNmLGlCQUFpQixFQUFFO0lBQ3JCO01BQ0UsaUJBQWlCO01BQ2pCLGdCQUFnQjtNQUNoQixvQkFBb0I7TUFDcEIsd0JBQXdCO01BQ3hCLGVBQWUsRUFBRTtJQUNuQjtNQUNFLGlCQUFpQjtNQUNqQixlQUFlO01BQ2YsZ0JBQWdCO01BQ2hCLHVCQUF1QjtNQUN2QixlQUFlO01BQ2YsMEJBQTBCLEVBQUU7SUFDOUI7TUFDRSxtQ0FBMkI7Y0FBM0IsMkJBQTJCLEVBQUU7RUFDakM7SUFDRSxlQUFlO0lBQ2YscUJBQWlCO1FBQWpCLGlCQUFpQjtJQUNqQixjQUFjLEVBQUU7SUFDaEI7TUFDRSxlQUFlO01BQ2YsWUFBWSxFQUFFO0lBQ2hCO01BQ0UsaUJBQWlCO01BQ2pCLG1CQUFtQixFQUFFO0lBQ3ZCO01BQ0UsWUFBWSxFQUFFO0lBQ2hCO01BQ0Usa0JBQWtCO01BQ2xCLGdCQUFnQjtNQUNoQix1QkFBdUI7TUFDdkIsMEJBQTBCO01BQzFCLGVBQWU7TUFDZixpQkFBaUI7TUFDakIsaUJBQWlCLEVBQUU7SUFDckI7TUFDRSxnQkFBZ0I7TUFDaEIsaUJBQWlCO01BQ2pCLGVBQWU7TUFDZixpQkFBaUIsRUFBRTtJQUNyQjtNQUNFLGVBQWU7TUFDZixrQkFBa0I7TUFDbEIsZ0JBQWdCO01BQ2hCLHdCQUF3QixFQUFFO0VBQzlCO0lBQ0U7TUFDRSxtQkFBbUI7TUFDbkIsb0JBQW9CLEVBQUU7SUFDeEI7TUFDRSxjQUFjLEVBQUUsRUFBRTtFQUN0QjtJQUNFO01BQ0Usb0JBQWdCO1VBQWhCLGdCQUFnQixFQUFFO0lBQ3BCO01BQ0Usa0JBQWM7VUFBZCxjQUFjLEVBQUUsRUFBRTtFQUN0QjtJQUNFO01BQ0UsbUJBQWU7VUFBZixlQUFlLEVBQUU7SUFDbkI7TUFDRSxjQUFjLEVBQUUsRUFBRTs7QUFFeEI7Ozs7RUFJRSxnQkFBZ0I7RUFDaEIsa0JBQWtCO0VBQ2xCLHdCQUF3QjtFQUN4QixlQUFlO0VBQ2YsY0FBYyxFQUFFOztBQUVsQjs7OztFQUlFLGdCQUFnQjtFQUNoQixvQkFBb0I7RUFDcEIsd0JBQXdCO0VBQ3hCLGVBQWU7RUFDZixpQkFBaUIsRUFBRTs7QUFFckI7RUFDRSx5QkFBeUI7RUFDekIsaUJBQWlCO0VBQ2pCLG9CQUFnQjtNQUFoQixnQkFBZ0IsRUFBRTtFQUNsQjtJQUNFLG1CQUFtQixFQUFFO0lBQ3JCO01BQ0UsaUJBQWlCLEVBQUU7RUFDdkI7SUFDRTtNQUNFLG1CQUFtQjtNQUNuQixvQkFBb0IsRUFBRTtNQUN0QjtRQUNFLGNBQWMsRUFBRSxFQUFFOztBQUUxQjtFQUNFLHFCQUFjO0VBQWQsY0FBYztFQUNkLG9CQUFvQjtFQUNwQixXQUFXO0VBQ1gsdUJBQStCO01BQS9CLCtCQUErQjtFQUMvQixpQkFBaUI7RUFDakIsWUFBWSxFQUFFO0VBQ2Q7SUFDRSxzREFBc0Q7SUFDdEQsNEJBQTRCO0lBQzVCLDZCQUE2QjtJQUM3QixlQUFlO0lBQ2YsYUFBYSxFQUFFO0VBQ2pCO0lBQ0U7TUFDRSxzQkFBd0I7VUFBeEIsd0JBQXdCO01BQ3hCLG9CQUFnQjtVQUFoQixnQkFBZ0I7TUFDaEIsaUJBQWlCLEVBQUU7TUFDbkI7UUFDRSxhQUFhLEVBQUUsRUFBRTtFQUN2QjtJQUNFLFlBQVksRUFBRTtFQUNoQjtJQUNFLDZCQUE2QjtJQUM3QixZQUFZLEVBQUU7RUFDaEI7SUFDRSw2QkFBNkI7SUFDN0IsWUFBWSxFQUFFO0VBQ2hCO0lBQ0UsOEJBQThCO0lBQzlCLFlBQVksRUFBRTtFQUNoQjtJQUNFLDhCQUE4QjtJQUM5QixhQUFhLEVBQUU7RUFDakI7SUFDRSw4QkFBOEI7SUFDOUIsWUFBWSxFQUFFO0VBQ2hCO0lBQ0UsOEJBQThCO0lBQzlCLFlBQVksRUFBRTs7QUFFbEI7O0VBRUUsdUJBQW9CO01BQXBCLG9CQUFvQixFQUFFO0VBQ3RCOztJQUVFLDBCQUEwQjtJQUMxQixpQkFBaUIsRUFBRTtJQUNuQjs7TUFFRSxnQkFBZ0IsRUFBRTtJQUNwQjtNQUNFOztRQUVFLGFBQWE7UUFDYixnQkFBZ0IsRUFBRSxFQUFFOztBQUU1QjtFQUNFLDhEQUE4RCxFQUFFO0VBQ2hFO0lBQ0UsbUJBQW1CO0lBQ25CLHFCQUFxQixFQUFFO0VBQ3pCO0lBQ0UsbUJBQW1CO0lBQ25CLGlCQUFpQjtJQUNqQixvQkFBb0IsRUFBRTs7QUFFMUI7RUFDRSxhQUFhO0VBQ2IsYUFBYSxFQUFFOztBQUVqQjtFQUNFLGFBQWEsRUFBRTs7QUFFakI7RUFDRSxhQUFhO0VBQ2IsYUFBYSxFQUFFOztBQUVqQjtFQUNFLGFBQWEsRUFBRTs7QUFFakI7RUFDRSxhQUFhO0VBQ2IsYUFBYSxFQUFFOztBQUVqQjtFQUNFLGFBQWEsRUFBRTs7QUFFakI7RUFDRSxhQUFhO0VBQ2IsYUFBYSxFQUFFOztBQUVqQjtFQUNFLGFBQWEsRUFBRTs7QUFFakI7RUFDRSxhQUFhO0VBQ2IsYUFBYSxFQUFFOztBQUVqQjtFQUNFLGFBQWEsRUFBRSIsImZpbGUiOiJwYWdlcy9lbnRlcnByaXNlL2N1c3RvbWVycy5jc3MiLCJzb3VyY2VzQ29udGVudCI6WyIuZWUtaGVybyB7XG4gIG1heC13aWR0aDogNjQwcHg7XG4gIHBhZGRpbmctdG9wOiAxMzBweDtcbiAgcGFkZGluZy1ib3R0b206IDE2MHB4OyB9XG4gIC5lZS1oZXJvOjpiZWZvcmUsIC5lZS1oZXJvOjphZnRlciB7XG4gICAgZGlzcGxheTogbm9uZTsgfVxuICAuZWUtaGVybyBoMSB7XG4gICAgZm9udC1zaXplOiA1MnB4O1xuICAgIGxpbmUtaGVpZ2h0OiA2MnB4O1xuICAgIG1heC13aWR0aDogOTMwcHg7XG4gICAgbGV0dGVyLXNwYWNpbmc6IC0wLjAzZW07XG4gICAgY29sb3I6ICMwMjA4MTQ7XG4gICAgbWFyZ2luLXRvcDogMDtcbiAgICBtYXJnaW4tYm90dG9tOiAxNnB4OyB9XG4gIC5lZS1oZXJvIGg0IHtcbiAgICBmb250LWZhbWlseTogXCJSb2JvdG8gTW9ub1wiLCBNZW5sbywgTW9uYWNvLCBDb25zb2xhcywgXCJDb3VyaWVyIE5ld1wiLCBtb25vc3BhY2U7XG4gICAgZm9udC13ZWlnaHQ6IGJvbGQ7XG4gICAgZm9udC1zaXplOiAxM3B4O1xuICAgIGxpbmUtaGVpZ2h0OiAyNnB4O1xuICAgIGxldHRlci1zcGFjaW5nOiAwLjE0ZW07XG4gICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcbiAgICBjb2xvcjogIzkyQTFCMztcbiAgICBtYXJnaW4tYm90dG9tOiAyOXB4OyB9XG4gIC5lZS1oZXJvIHAge1xuICAgIGZvbnQtZmFtaWx5OiBcIkVpbmFcIiwgXCJIZWx2ZXRpY2EgTmV1ZVwiLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7XG4gICAgZm9udC1zaXplOiAyNHB4O1xuICAgIGZvbnQtd2VpZ2h0OiA0MDA7XG4gICAgbGluZS1oZWlnaHQ6IDM2cHg7XG4gICAgbGV0dGVyLXNwYWNpbmc6IC0wLjA0ZW07XG4gICAgY29sb3I6IHJnYmEoMzksIDUwLCA2MywgMC44KTsgfVxuICAuZWUtaGVybyAuYnRuIHtcbiAgICBwYWRkaW5nLWxlZnQ6IDI0cHg7XG4gICAgcGFkZGluZy1yaWdodDogMjBweDtcbiAgICBwYWRkaW5nLXRvcDogMThweDtcbiAgICBwYWRkaW5nLWJvdHRvbTogMThweDtcbiAgICBmb250LXNpemU6IDE0cHg7XG4gICAgbWFyZ2luLXRvcDogMTZweDtcbiAgICBsaW5lLWhlaWdodDogMjBweDtcbiAgICBsZXR0ZXItc3BhY2luZzogMC4wOGVtO1xuICAgIGNvbG9yOiB3aGl0ZTtcbiAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xuICAgIGZvbnQtd2VpZ2h0OiA3MDA7XG4gICAgYmFja2dyb3VuZDogIzM4ODBGRjtcbiAgICBib3gtc2hhZG93OiAwcHggMnB4IDRweCByZ2JhKDIsIDgsIDIwLCAwLjEpLCAwcHggMXB4IDJweCByZ2JhKDIsIDgsIDIwLCAwLjA4KTtcbiAgICBib3JkZXItcmFkaXVzOiAyMTBweDtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7IH1cbiAgICAuZWUtaGVybyAuYnRuOjphZnRlciB7XG4gICAgICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoJ2RhdGE6aW1hZ2Uvc3ZnK3htbDt1dGY4LDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIGZpbGw9XCJ3aGl0ZVwiIHZpZXdCb3g9XCIwIDAgNTEyIDUxMlwiPjxwYXRoIGQ9XCJNODUgMjc3LjM3NWgyNTkuNzA0TDIyNS4wMDIgMzk3LjA3NyAyNTYgNDI3bDE3MS0xNzFMMjU2IDg1bC0yOS45MjIgMjkuOTI0IDExOC42MjYgMTE5LjcwMUg4NXY0Mi43NXpcIi8+PC9zdmc+Jyk7XG4gICAgICBiYWNrZ3JvdW5kLXNpemU6IDEwMCU7XG4gICAgICBjb250ZW50OiAnJztcbiAgICAgIGhlaWdodDogMjBweDtcbiAgICAgIHdpZHRoOiAyMHB4O1xuICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICBtYXJnaW4tbGVmdDogOHB4O1xuICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC0xcHgpOyB9XG4gICAgLmVlLWhlcm8gLmJ0bjpob3ZlciB7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjNGY4YmY1OyB9XG4gIC5lZS1oZXJvLS1sYXJnZSBoMSB7XG4gICAgZm9udC1zaXplOiA2MnB4O1xuICAgIGxpbmUtaGVpZ2h0OiA2OXB4OyB9XG4gIC5lZS1oZXJvLS13aWRlIHtcbiAgICBtYXgtd2lkdGg6IDk2MHB4OyB9XG4gIC5lZS1oZXJvLS1jZW50ZXJlZCB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgIG1hcmdpbi1sZWZ0OiBhdXRvO1xuICAgIG1hcmdpbi1yaWdodDogYXV0bzsgfVxuICBAbWVkaWEgKG1heC13aWR0aDogNzY3cHgpIHtcbiAgICAuZWUtaGVybyB7XG4gICAgICBwYWRkaW5nLXRvcDogNzBweDtcbiAgICAgIHBhZGRpbmctYm90dG9tOiAwOyB9XG4gICAgICAuZWUtaGVybyBoMSB7XG4gICAgICAgIGZvbnQtc2l6ZTogNDRweDtcbiAgICAgICAgbGluZS1oZWlnaHQ6IDUycHg7IH1cbiAgICAgIC5lZS1oZXJvLS1sYXJnZSBoMSB7XG4gICAgICAgIGZvbnQtc2l6ZTogNTBweDtcbiAgICAgICAgbGluZS1oZWlnaHQ6IDYwcHg7IH0gfVxuICBAbWVkaWEgKG1heC13aWR0aDogNDgwcHgpIHtcbiAgICAuZWUtaGVybyBoMSB7XG4gICAgICBmb250LXNpemU6IDM2cHg7XG4gICAgICBsaW5lLWhlaWdodDogNDRweDtcbiAgICAgIG1hcmdpbi1ib3R0b206IDZweDsgfVxuICAgIC5lZS1oZXJvLS1sYXJnZSBoMSB7XG4gICAgICBmb250LXNpemU6IDQycHg7XG4gICAgICBsaW5lLWhlaWdodDogNTJweDsgfVxuICAgIC5lZS1oZXJvIC5idG4ge1xuICAgICAgbWFyZ2luLXRvcDogOHB4OyB9IH1cblxuLmVlLW1haW4ge1xuICBtYXJnaW4tdG9wOiAwOyB9XG4gIC5lZS1tYWluIHNlY3Rpb24ge1xuICAgIG1hcmdpbi1ib3R0b206IDIwMHB4OyB9XG4gIC5lZS1tYWluIC5sZWZ0LFxuICAuZWUtbWFpbiAucmlnaHQsXG4gIC5lZS1tYWluIC5jZW50ZXIge1xuICAgIGRpc3BsYXk6IGZsZXg7IH1cbiAgICAuZWUtbWFpbiAubGVmdDo6YmVmb3JlLCAuZWUtbWFpbiAubGVmdDo6YWZ0ZXIsXG4gICAgLmVlLW1haW4gLnJpZ2h0OjpiZWZvcmUsXG4gICAgLmVlLW1haW4gLnJpZ2h0OjphZnRlcixcbiAgICAuZWUtbWFpbiAuY2VudGVyOjpiZWZvcmUsXG4gICAgLmVlLW1haW4gLmNlbnRlcjo6YWZ0ZXIge1xuICAgICAgZGlzcGxheTogbm9uZTsgfVxuICAuZWUtbWFpbiAubGVmdCAuY29udGVudCxcbiAgLmVlLW1haW4gLnJpZ2h0IC5jb250ZW50IHtcbiAgICBtYXgtd2lkdGg6IDQ4MHB4OyB9XG4gICAgQG1lZGlhIChtYXgtd2lkdGg6IDc2N3B4KSB7XG4gICAgICAuZWUtbWFpbiAubGVmdCAuY29udGVudCxcbiAgICAgIC5lZS1tYWluIC5yaWdodCAuY29udGVudCB7XG4gICAgICAgIG1heC13aWR0aDogMTAwJTtcbiAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyOyB9XG4gICAgICAgIC5lZS1tYWluIC5sZWZ0IC5jb250ZW50IGxpLFxuICAgICAgICAuZWUtbWFpbiAucmlnaHQgLmNvbnRlbnQgbGkge1xuICAgICAgICAgIHRleHQtYWxpZ246IGxlZnQ7IH0gfVxuICAuZWUtbWFpbiAubGVmdCB7XG4gICAgZmxleC1kaXJlY3Rpb246IHJvdzsgfVxuICAgIC5lZS1tYWluIC5sZWZ0IC5ncmFwaGljcyB7XG4gICAgICBtYXJnaW4tbGVmdDogYXV0bzsgfVxuICAuZWUtbWFpbiAucmlnaHQge1xuICAgIGZsZXgtZGlyZWN0aW9uOiByb3ctcmV2ZXJzZTtcbiAgICBtYXJnaW4tbGVmdDogYXV0bzsgfVxuICAgIC5lZS1tYWluIC5yaWdodCAuZ3JhcGhpY3Mge1xuICAgICAgbWFyZ2luLXJpZ2h0OiBhdXRvOyB9XG4gIC5lZS1tYWluIC5jZW50ZXIge1xuICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7IH1cbiAgICAuZWUtbWFpbiAuY2VudGVyIC5jb250ZW50IHtcbiAgICAgIHdpZHRoOiA4OTRweDtcbiAgICAgIG1heC13aWR0aDogMTAwJTsgfVxuICAuZWUtbWFpbiAuZnVsbCAuY29udGVudCB7XG4gICAgbWF4LXdpZHRoOiA1NjhweDsgfVxuICBAbWVkaWEgKG1heC13aWR0aDogNzY3cHgpIHtcbiAgICAuZWUtbWFpbiAucmlnaHQsXG4gICAgLmVlLW1haW4gLmxlZnQge1xuICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbi1yZXZlcnNlO1xuICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsgfVxuICAgICAgLmVlLW1haW4gLnJpZ2h0IC5ncmFwaGljcyxcbiAgICAgIC5lZS1tYWluIC5sZWZ0IC5ncmFwaGljcyB7XG4gICAgICAgIG1hcmdpbi1ib3R0b206IDI0cHg7XG4gICAgICAgIG1hcmdpbi1sZWZ0OiAwO1xuICAgICAgICBtYXJnaW4tcmlnaHQ6IDA7IH1cbiAgICAuZWUtbWFpbiBzZWN0aW9uIHtcbiAgICAgIG1hcmdpbi1ib3R0b206IDEwMHB4OyB9IH1cbiAgLmVlLW1haW4gLmdyYXBoaWNzIHtcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtZW5kOyB9XG4gICAgLmVlLW1haW4gLmdyYXBoaWNzIGltZyB7XG4gICAgICB3aWR0aDogMTAwJTsgfVxuICAuZWUtbWFpbiBoMiB7XG4gICAgZm9udC1zaXplOiA0NHB4O1xuICAgIGxpbmUtaGVpZ2h0OiA1MXB4O1xuICAgIGxldHRlci1zcGFjaW5nOiAtMC4wM2VtOyB9XG4gICAgLmVlLW1haW4gaDI6Zmlyc3QtY2hpbGQge1xuICAgICAgbWFyZ2luLXRvcDogMDsgfVxuICAuZWUtbWFpbiAuZWUtc2VjdGlvbl9fdGl0bGUge1xuICAgIGZvbnQtZmFtaWx5OiBcIlJvYm90byBNb25vXCIsIE1lbmxvLCBNb25hY28sIENvbnNvbGFzLCBcIkNvdXJpZXIgTmV3XCIsIG1vbm9zcGFjZTtcbiAgICBmb250LXN0eWxlOiBub3JtYWw7XG4gICAgZm9udC13ZWlnaHQ6IGJvbGQ7XG4gICAgZm9udC1zaXplOiAxMnB4O1xuICAgIGxpbmUtaGVpZ2h0OiAyM3B4O1xuICAgIGxldHRlci1zcGFjaW5nOiAwLjE0ZW07XG4gICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcbiAgICBjb2xvcjogIzVCNzA4QjtcbiAgICBtYXJnaW4tdG9wOiAwOyB9XG4gIC5lZS1tYWluIC5lZS1zZWN0aW9uX19jdGEge1xuICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICBmb250LXNpemU6IDE4cHg7XG4gICAgZm9udC13ZWlnaHQ6IDUwMDtcbiAgICBtYXJnaW4tdG9wOiAxNnB4OyB9XG4gIC5lZS1tYWluIHAge1xuICAgIGZvbnQtc2l6ZTogMjBweDtcbiAgICBsaW5lLWhlaWdodDogMzFweDtcbiAgICBsZXR0ZXItc3BhY2luZzogLTAuMDJlbTtcbiAgICBjb2xvcjogIzVCNzA4QjtcbiAgICBtYXJnaW4tdG9wOiAxOHB4OyB9XG4gICAgLmVlLW1haW4gcC5zbSB7XG4gICAgICBmb250LXNpemU6IDE2cHg7XG4gICAgICBsaW5lLWhlaWdodDogMjlweDtcbiAgICAgIGxldHRlci1zcGFjaW5nOiAtMC4wMWVtOyB9XG4gIC5lZS1tYWluIHVsOm5vdCguZnJhbWV3b3Jrcykge1xuICAgIG1hcmdpbi10b3A6IDU0cHg7IH1cbiAgLmVlLW1haW4gLmNvbnRlbnQgdWwge1xuICAgIHBhZGRpbmctbGVmdDogMDsgfVxuICAuZWUtbWFpbiAuY29udGVudCBsaSB7XG4gICAgZm9udC1zaXplOiAxNnB4O1xuICAgIGxpbmUtaGVpZ2h0OiAyM3B4O1xuICAgIGxldHRlci1zcGFjaW5nOiAtMC4wMmVtO1xuICAgIGNvbG9yOiAjMUEyMzJGO1xuICAgIG1hcmdpbi1ib3R0b206IDQwcHg7XG4gICAgcGFkZGluZy1sZWZ0OiAzMHB4O1xuICAgIGxpc3Qtc3R5bGU6IG5vbmU7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlOyB9XG4gICAgLmVlLW1haW4gLmNvbnRlbnQgbGk6OmJlZm9yZSB7XG4gICAgICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXCIvaW1nL2VudGVycHJpc2UvY2hlY2suc3ZnXCIpO1xuICAgICAgYmFja2dyb3VuZC1zaXplOiAxMDAlO1xuICAgICAgY29udGVudDogJyc7XG4gICAgICBoZWlnaHQ6IDEwcHg7XG4gICAgICB3aWR0aDogMTNweDtcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgIGxlZnQ6IDA7XG4gICAgICB0b3A6IDhweDsgfVxuICAuZWUtbWFpbiAuZmVhdHVyZXMge1xuICAgIGRpc3BsYXk6IGdyaWQ7XG4gICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiAxZnIgMWZyIDFmcjtcbiAgICBncmlkLWNvbHVtbi1nYXA6IDY0cHg7XG4gICAgZ3JpZC1yb3ctZ2FwOiAyNHB4O1xuICAgIHBhZGRpbmc6IDA7IH1cbiAgICAuZWUtbWFpbiAuZmVhdHVyZXMgbGkge1xuICAgICAgbGlzdC1zdHlsZTogbm9uZTsgfVxuICAgIC5lZS1tYWluIC5mZWF0dXJlcyAuaWNvbiB7XG4gICAgICBtYXJnaW4tYm90dG9tOiAxNnB4O1xuICAgICAgd2lkdGg6IDQ4cHg7IH1cbiAgICBAbWVkaWEgKG1heC13aWR0aDogOTkxcHgpIHtcbiAgICAgIC5lZS1tYWluIC5mZWF0dXJlcyB7XG4gICAgICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogMWZyIDFmcjsgfSB9XG4gICAgQG1lZGlhIChtYXgtd2lkdGg6IDUwMHB4KSB7XG4gICAgICAuZWUtbWFpbiAuZmVhdHVyZXMge1xuICAgICAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IDFmcjsgfSB9XG4gIC5lZS1tYWluIC5jdGEtY2FyZCB7XG4gICAgYmFja2dyb3VuZDogIzRhOGJmYztcbiAgICBib3JkZXItcmFkaXVzOiAxMnB4O1xuICAgIHBhZGRpbmc6IDcycHggNzJweCA2MHB4O1xuICAgIGJhY2tncm91bmQtc2l6ZTogY292ZXI7XG4gICAgY29sb3I6IHdoaXRlOyB9XG4gICAgLmVlLW1haW4gLmN0YS1jYXJkIC5lZS1zZWN0aW9uX190aXRsZSxcbiAgICAuZWUtbWFpbiAuY3RhLWNhcmQgcCB7XG4gICAgICBjb2xvcjogI0NFRDZFMDsgfVxuXG4jaG93LXRvIHtcbiAgbWFyZ2luLWJvdHRvbTogMDtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBwYWRkaW5nLXRvcDogMTQwcHg7IH1cbiAgI2hvdy10bzo6YmVmb3JlIHtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgdG9wOiAwO1xuICAgIHdpZHRoOiAxMDB2dztcbiAgICBib3JkZXItdG9wOiAxcHggc29saWQgcmdiYSgxNDYsIDE2MSwgMTc5LCAwLjMpO1xuICAgIGNvbnRlbnQ6ICcnO1xuICAgIGRpc3BsYXk6IGJsb2NrOyB9XG5cbi5jYXJkcy0tcmVkLXYtYmx1ZSB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIHRleHQtYWxpZ246IGxlZnQ7XG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICBtYXJnaW4tdG9wOiAzOHB4OyB9XG4gIC5jYXJkcy0tcmVkLXYtYmx1ZV9fY2FyZCB7XG4gICAgYmFja2dyb3VuZDogIzdDQUJGRjtcbiAgICBib3JkZXItcmFkaXVzOiA4cHg7XG4gICAgcGFkZGluZzogNDBweCA0MHB4IDM0cHg7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgIGFsaWduLWl0ZW1zOiBmbGV4LXN0YXJ0O1xuICAgIG1hcmdpbi1yaWdodDogMjRweDtcbiAgICBmbGV4OiAwIDEgNDYwcHg7XG4gICAgYm9yZGVyLXJhZGl1czogOHB4OyB9XG4gICAgLmNhcmRzLS1yZWQtdi1ibHVlX19jYXJkOmxhc3QtY2hpbGQge1xuICAgICAgbWFyZ2luLXJpZ2h0OiAwOyB9XG4gICAgLmNhcmRzLS1yZWQtdi1ibHVlX19jYXJkOm50aC1jaGlsZCgyKSB7XG4gICAgICBiYWNrZ3JvdW5kOiAjRjg4RDhEOyB9XG4gICAgICAuY2FyZHMtLXJlZC12LWJsdWVfX2NhcmQ6bnRoLWNoaWxkKDIpIC5idG4ge1xuICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDI0NCwgODQsIDg0LCAwLjUpOyB9XG4gIC5jYXJkcy0tcmVkLXYtYmx1ZSBoMyB7XG4gICAgZm9udC1zaXplOiAyNHB4O1xuICAgIGxpbmUtaGVpZ2h0OiBub3JtYWw7XG4gICAgbGV0dGVyLXNwYWNpbmc6IC0wLjAyZW07XG4gICAgY29sb3I6IHdoaXRlO1xuICAgIG1hcmdpbi10b3A6IDA7IH1cbiAgLmNhcmRzLS1yZWQtdi1ibHVlIHAge1xuICAgIGZvbnQtc2l6ZTogMThweDtcbiAgICBsaW5lLWhlaWdodDogMjZweDtcbiAgICBsZXR0ZXItc3BhY2luZzogLTAuMDJlbTtcbiAgICBjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjcpO1xuICAgIG1hcmdpbi10b3A6IDA7XG4gICAgbWFyZ2luLWJvdHRvbTogMjJweDsgfVxuICAuY2FyZHMtLXJlZC12LWJsdWUgLmJ0biB7XG4gICAgbWFyZ2luLXRvcDogYXV0bztcbiAgICBmb250LXNpemU6IDE0cHg7XG4gICAgbGluZS1oZWlnaHQ6IDIycHg7XG4gICAgbGV0dGVyLXNwYWNpbmc6IDAuMDllbTtcbiAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xuICAgIHBhZGRpbmc6IDEwcHggMTRweDtcbiAgICBmb250LXdlaWdodDogNjAwO1xuICAgIGJvcmRlci1yYWRpdXM6IDhweDtcbiAgICBiYWNrZ3JvdW5kOiByZ2JhKDU2LCAxMjgsIDI1NSwgMC41KTsgfVxuICAgIC5jYXJkcy0tcmVkLXYtYmx1ZSAuYnRuIGlvbi1pY29uIHtcbiAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICAgIGhlaWdodDogMTRweDtcbiAgICAgIHdpZHRoOiAxNHB4O1xuICAgICAgdmVydGljYWwtYWxpZ246IC0ycHg7IH1cbiAgQG1lZGlhIChtYXgtd2lkdGg6IDc2N3B4KSB7XG4gICAgLmNhcmRzLS1yZWQtdi1ibHVlIHtcbiAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICBhbGlnbi1pdGVtczogY2VudGVyOyB9XG4gICAgICAuY2FyZHMtLXJlZC12LWJsdWVfX2NhcmQge1xuICAgICAgICBmbGV4OiBhdXRvO1xuICAgICAgICBtYXJnaW4tcmlnaHQ6IDA7XG4gICAgICAgIG1hcmdpbi10b3A6IDIwcHg7XG4gICAgICAgIG1heC13aWR0aDogNDYwcHg7IH0gfVxuXG5hc2lkZSB7XG4gIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCgxODBkZWcsICNGOUZBRkIgMCUsICNGRkZGRkYgMTAwJSk7XG4gIG1hcmdpbi10b3A6IC02MHB4O1xuICBwYWRkaW5nLXRvcDogMjAwcHg7XG4gIHBhZGRpbmctYm90dG9tOiAxMjBweDsgfVxuICBhc2lkZSBwIHtcbiAgICBjb2xvcjogIzQxNEQ1QzsgfVxuICBhc2lkZSAuY29udGVudCB7XG4gICAgbWF4LXdpZHRoOiA0MzJweDtcbiAgICBtYXJnaW46IDAgYXV0bztcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgZGlzcGxheTogYmxvY2s7IH1cblxuLmVlLWdldC1zdGFydGVkIHtcbiAgbWF4LXdpZHRoOiA3MDBweDsgfVxuICAuZWUtZ2V0LXN0YXJ0ZWQgaDMge1xuICAgIGNvbG9yOiAjNDE0RDVDOyB9XG5cbi5yZXNvdXJjZXMge1xuICBwYWRkaW5nLWJvdHRvbTogMTIwcHg7IH1cbiAgQG1lZGlhIChtYXgtd2lkdGg6IDc2OHB4KSB7XG4gICAgLnJlc291cmNlcyB7XG4gICAgICBwYWRkaW5nLWJvdHRvbTogNjBweDsgfSB9XG4gIC5yZXNvdXJjZXMgLmNhcmRzIHtcbiAgICBsaXN0LXN0eWxlLXR5cGU6IG5vbmU7XG4gICAgbWFyZ2luOiAwO1xuICAgIHBhZGRpbmc6IDA7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBtYXJnaW4tbGVmdDogLTI0cHg7XG4gICAgbWFyZ2luLXJpZ2h0OiAtMjRweDsgfVxuICAucmVzb3VyY2VzIGhncm91cCB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG4gICAgYWxpZ24taXRlbXM6IGJhc2VsaW5lOyB9XG4gICAgLnJlc291cmNlcyBoZ3JvdXAgaDMge1xuICAgICAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgICAgIGxpbmUtaGVpZ2h0OiBub3JtYWw7XG4gICAgICBmb250LXNpemU6IDI4cHg7XG4gICAgICBsZXR0ZXItc3BhY2luZzogLTAuMDJlbTtcbiAgICAgIGNvbG9yOiAjMUEyMzJGO1xuICAgICAgbWFyZ2luLWJvdHRvbTogMDsgfVxuICAgIC5yZXNvdXJjZXMgaGdyb3VwIGg0IHtcbiAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7XG4gICAgICBmb250LXNpemU6IDI0cHg7XG4gICAgICBsaW5lLWhlaWdodDogbm9ybWFsO1xuICAgICAgbGV0dGVyLXNwYWNpbmc6IC0wLjAyZW07XG4gICAgICBjb2xvcjogIzFBMjMyRjsgfVxuICAgIC5yZXNvdXJjZXMgaGdyb3VwIGg1IHtcbiAgICAgIGZvbnQtd2VpZ2h0OiA3MDA7XG4gICAgICBsaW5lLWhlaWdodDogMTtcbiAgICAgIGZvbnQtc2l6ZTogMTRweDtcbiAgICAgIGxldHRlci1zcGFjaW5nOiAwLjA4ZW07XG4gICAgICBjb2xvcjogIzM4ODBGRjtcbiAgICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7IH1cbiAgICAucmVzb3VyY2VzIGhncm91cCBpb24taWNvbiB7XG4gICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMnB4KTsgfVxuICAucmVzb3VyY2VzIC5jYXJkcyBsaSB7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgZmxleDogMCAwIDMzLjMzJTtcbiAgICBwYWRkaW5nOiAyNHB4OyB9XG4gICAgLnJlc291cmNlcyAuY2FyZHMgbGkgYSB7XG4gICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgIHdpZHRoOiAxMDAlOyB9XG4gICAgLnJlc291cmNlcyAuY2FyZHMgbGkgLmltZy13cmFwcGVyIHtcbiAgICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgICBib3JkZXItcmFkaXVzOiA2cHg7IH1cbiAgICAucmVzb3VyY2VzIC5jYXJkcyBsaSBpbWcge1xuICAgICAgd2lkdGg6IDEwMCU7IH1cbiAgICAucmVzb3VyY2VzIC5jYXJkcyBsaSBoNiB7XG4gICAgICBsaW5lLWhlaWdodDogMjNweDtcbiAgICAgIGZvbnQtc2l6ZTogMTJweDtcbiAgICAgIGxldHRlci1zcGFjaW5nOiAwLjEyZW07XG4gICAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xuICAgICAgY29sb3I6ICNCMkJFQ0Q7XG4gICAgICBtYXJnaW4tYm90dG9tOiAwO1xuICAgICAgbWFyZ2luLXRvcDogMTZweDsgfVxuICAgIC5yZXNvdXJjZXMgLmNhcmRzIGxpIGg0IHtcbiAgICAgIGZvbnQtc2l6ZTogMjBweDtcbiAgICAgIG1hcmdpbi10b3A6IDEwcHg7XG4gICAgICBjb2xvcjogIzFBMjMyRjtcbiAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7IH1cbiAgICAucmVzb3VyY2VzIC5jYXJkcyBsaSBwIHtcbiAgICAgIGNvbG9yOiAjNUI3MDhCO1xuICAgICAgbGluZS1oZWlnaHQ6IDIycHg7XG4gICAgICBmb250LXNpemU6IDE0cHg7XG4gICAgICBsZXR0ZXItc3BhY2luZzogLTAuMDJlbTsgfVxuICBAbWVkaWEgKG1heC13aWR0aDogOTkycHgpIHtcbiAgICAucmVzb3VyY2VzIC5jYXJkcyB7XG4gICAgICBtYXJnaW4tbGVmdDogLTEycHg7XG4gICAgICBtYXJnaW4tcmlnaHQ6IC0xMnB4OyB9XG4gICAgLnJlc291cmNlcyAuY2FyZHMgbGkge1xuICAgICAgcGFkZGluZzogMTJweDsgfSB9XG4gIEBtZWRpYSAobWF4LXdpZHRoOiA3NjhweCkge1xuICAgIC5yZXNvdXJjZXMgLmNhcmRzIHtcbiAgICAgIGZsZXgtd3JhcDogd3JhcDsgfVxuICAgIC5yZXNvdXJjZXMgLmNhcmRzIGxpIHtcbiAgICAgIGZsZXg6IDAgMCA1MCU7IH0gfVxuICBAbWVkaWEgKG1heC13aWR0aDogNDgwcHgpIHtcbiAgICAucmVzb3VyY2VzIC5jYXJkcyBsaSB7XG4gICAgICBmbGV4OiAwIDAgMTAwJTsgfVxuICAgIC5yZXNvdXJjZXMgaDUge1xuICAgICAgZGlzcGxheTogbm9uZTsgfSB9XG5cbi5lZS1tYWluIC5mZWF0dXJlcyBsaSBwLFxuLmVlLW1haW4gLmNhcmRzIGxpIHAsXG4ucmVzb3VyY2VzIC5mZWF0dXJlcyBsaSBwLFxuLnJlc291cmNlcyAuY2FyZHMgbGkgcCB7XG4gIGZvbnQtc2l6ZTogMTZweDtcbiAgbGluZS1oZWlnaHQ6IDI5cHg7XG4gIGxldHRlci1zcGFjaW5nOiAtMC4wMWVtO1xuICBjb2xvcjogIzczODQ5QTtcbiAgbWFyZ2luLXRvcDogMDsgfVxuXG4uZWUtbWFpbiAuZmVhdHVyZXMgbGkgaDQsXG4uZWUtbWFpbiAuY2FyZHMgbGkgaDQsXG4ucmVzb3VyY2VzIC5mZWF0dXJlcyBsaSBoNCxcbi5yZXNvdXJjZXMgLmNhcmRzIGxpIGg0IHtcbiAgZm9udC1zaXplOiAyMHB4O1xuICBsaW5lLWhlaWdodDogbm9ybWFsO1xuICBsZXR0ZXItc3BhY2luZzogLTAuMDJlbTtcbiAgY29sb3I6ICMwMjA4MTQ7XG4gIGZvbnQtd2VpZ2h0OiA2MDA7IH1cblxuLnJlc291cmNlcyAuY2FyZHMge1xuICBtYXJnaW4tdG9wOiAwICFpbXBvcnRhbnQ7XG4gIHRleHQtYWxpZ246IGxlZnQ7XG4gIGZsZXgtd3JhcDogd3JhcDsgfVxuICAucmVzb3VyY2VzIC5jYXJkcyAuaW1nLXdyYXBwZXIge1xuICAgIGJvcmRlci1yYWRpdXM6IDZweDsgfVxuICAgIC5yZXNvdXJjZXMgLmNhcmRzIC5pbWctd3JhcHBlciArIGg0IHtcbiAgICAgIG1hcmdpbi10b3A6IDI0cHg7IH1cbiAgQG1lZGlhIChtaW4td2lkdGg6IDEyMjBweCkge1xuICAgIC5yZXNvdXJjZXMgLmNhcmRzIHtcbiAgICAgIG1hcmdpbi1sZWZ0OiAtNDBweDtcbiAgICAgIG1hcmdpbi1yaWdodDogLTQwcHg7IH1cbiAgICAgIC5yZXNvdXJjZXMgLmNhcmRzIGxpIHtcbiAgICAgICAgcGFkZGluZzogNDBweDsgfSB9XG5cbi5yZXNvdXJjZXMgLnJlc291cmNlc19fY3VzdG9tZXItbG9nb3Mge1xuICBkaXNwbGF5OiBmbGV4O1xuICBtYXJnaW46IDI2cHggYXV0byAwO1xuICBwYWRkaW5nOiAwO1xuICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG4gIG1heC13aWR0aDogNzgwcHg7XG4gIHdpZHRoOiAxMDAlOyB9XG4gIC5yZXNvdXJjZXMgLnJlc291cmNlc19fY3VzdG9tZXItbG9nb3MgbGkge1xuICAgIGJhY2tncm91bmQ6IHVybChcIi9pbWcvZW50ZXJwcmlzZS9jdXN0b21lci1sb2dvcy5wbmdcIik7XG4gICAgYmFja2dyb3VuZC1zaXplOiA0MjhweCA0NnB4O1xuICAgIGJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgaGVpZ2h0OiA0NnB4OyB9XG4gIEBtZWRpYSAobWF4LXdpZHRoOiA3NjhweCkge1xuICAgIC5yZXNvdXJjZXMgLnJlc291cmNlc19fY3VzdG9tZXItbG9nb3Mge1xuICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gICAgICBmbGV4LXdyYXA6IHdyYXA7XG4gICAgICBtYXgtd2lkdGg6IDQ2MHB4OyB9XG4gICAgICAucmVzb3VyY2VzIC5yZXNvdXJjZXNfX2N1c3RvbWVyLWxvZ29zIGxpIHtcbiAgICAgICAgbWFyZ2luOiAyMHB4OyB9IH1cbiAgLnJlc291cmNlcyAucmVzb3VyY2VzX19jdXN0b21lci1sb2dvcyAubWFzdGVyY2FyZCB7XG4gICAgd2lkdGg6IDU4cHg7IH1cbiAgLnJlc291cmNlcyAucmVzb3VyY2VzX19jdXN0b21lci1sb2dvcyAubmF0aW9ud2lkZSB7XG4gICAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTU4cHggMDtcbiAgICB3aWR0aDogMzNweDsgfVxuICAucmVzb3VyY2VzIC5yZXNvdXJjZXNfX2N1c3RvbWVyLWxvZ29zIC51bmlxbG8ge1xuICAgIGJhY2tncm91bmQtcG9zaXRpb246IC05MXB4IDA7XG4gICAgd2lkdGg6IDY1cHg7IH1cbiAgLnJlc291cmNlcyAucmVzb3VyY2VzX19jdXN0b21lci1sb2dvcyAuaWJtIHtcbiAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTU2cHggMDtcbiAgICB3aWR0aDogNjRweDsgfVxuICAucmVzb3VyY2VzIC5yZXNvdXJjZXNfX2N1c3RvbWVyLWxvZ29zIC5pbmcge1xuICAgIGJhY2tncm91bmQtcG9zaXRpb246IC0yMjJweCAwO1xuICAgIHdpZHRoOiAxMDNweDsgfVxuICAucmVzb3VyY2VzIC5yZXNvdXJjZXNfX2N1c3RvbWVyLWxvZ29zIC5zYXAge1xuICAgIGJhY2tncm91bmQtcG9zaXRpb246IC0zMjZweCAwO1xuICAgIHdpZHRoOiA1NnB4OyB9XG4gIC5yZXNvdXJjZXMgLnJlc291cmNlc19fY3VzdG9tZXItbG9nb3MgLm5hc2Ege1xuICAgIGJhY2tncm91bmQtcG9zaXRpb246IC0zODBweCAwO1xuICAgIHdpZHRoOiA1MHB4OyB9XG5cbi5lZS1tYWluIC5sZWZ0LFxuLmVlLW1haW4gLnJpZ2h0IHtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjsgfVxuICAuZWUtbWFpbiAubGVmdCAuZ3JhcGhpY3MsXG4gIC5lZS1tYWluIC5yaWdodCAuZ3JhcGhpY3Mge1xuICAgIHdpZHRoOiBjYWxjKDEwMCUgLSA1MjBweCk7XG4gICAgbWF4LXdpZHRoOiA1NjBweDsgfVxuICAgIC5lZS1tYWluIC5sZWZ0IC5ncmFwaGljcyBpbWcsXG4gICAgLmVlLW1haW4gLnJpZ2h0IC5ncmFwaGljcyBpbWcge1xuICAgICAgbWF4LXdpZHRoOiAxMDAlOyB9XG4gICAgQG1lZGlhIChtYXgtd2lkdGg6IDc2N3B4KSB7XG4gICAgICAuZWUtbWFpbiAubGVmdCAuZ3JhcGhpY3MsXG4gICAgICAuZWUtbWFpbiAucmlnaHQgLmdyYXBoaWNzIHtcbiAgICAgICAgd2lkdGg6IDMyMHB4O1xuICAgICAgICBtYXgtd2lkdGg6IDEwMCU7IH0gfVxuXG4uZWUtbWFpbiAuZWUtc2VjdGlvbi13cmFwcGVyLS1ncmFkaWVudCB7XG4gIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCgxODBkZWcsICNGOUZBRkIgMCUsICNGRkZGRkYgMTAwJSk7IH1cbiAgLmVlLW1haW4gLmVlLXNlY3Rpb24td3JhcHBlci0tZ3JhZGllbnQgc2VjdGlvbiB7XG4gICAgcGFkZGluZy10b3A6IDE1MHB4O1xuICAgIG1hcmdpbi1ib3R0b206IDEyMHB4OyB9XG4gIC5lZS1tYWluIC5lZS1zZWN0aW9uLXdyYXBwZXItLWdyYWRpZW50IGFzaWRlIHtcbiAgICBwYWRkaW5nLXRvcDogMTUwcHg7XG4gICAgYmFja2dyb3VuZDogbm9uZTtcbiAgICBwYWRkaW5nLWJvdHRvbTogMHB4OyB9XG5cbiNtYXJrZXR3YXRjaCAubG9nbyB7XG4gIHdpZHRoOiAyMTRweDtcbiAgaGVpZ2h0OiAzMnB4OyB9XG5cbiNtYXJrZXR3YXRjaCAuZ3JhcGhpY3MgaW1nIHtcbiAgd2lkdGg6IDU0NnB4OyB9XG5cbiNzd29ya2l0IC5sb2dvIHtcbiAgd2lkdGg6IDIwMHB4O1xuICBoZWlnaHQ6IDM0cHg7IH1cblxuI3N3b3JraXQgLmdyYXBoaWNzIGltZyB7XG4gIHdpZHRoOiA1NjBweDsgfVxuXG4jaW5zdGFudC1wb3QgLmxvZ28ge1xuICB3aWR0aDogMTkzcHg7XG4gIGhlaWdodDogMzZweDsgfVxuXG4jaW5zdGFudC1wb3QgLmdyYXBoaWNzIGltZyB7XG4gIHdpZHRoOiA1NDZweDsgfVxuXG4jc2hpcHQgLmxvZ28ge1xuICB3aWR0aDogMTkycHg7XG4gIGhlaWdodDogNzJweDsgfVxuXG4jc2hpcHQgLmdyYXBoaWNzIGltZyB7XG4gIHdpZHRoOiA1NDZweDsgfVxuXG4jdW50YXBwZCAubG9nbyB7XG4gIHdpZHRoOiAxOTJweDtcbiAgaGVpZ2h0OiAzMnB4OyB9XG5cbiN1bnRhcHBkIC5ncmFwaGljcyBpbWcge1xuICB3aWR0aDogNTYwcHg7IH1cbiJdfQ== */\n"
  },
  {
    "path": "content/css/pages/enterprise/home.css",
    "content": ".ee-hero {\n  max-width: 640px;\n  padding-top: 130px;\n  padding-bottom: 160px; }\n  .ee-hero::before, .ee-hero::after {\n    display: none; }\n  .ee-hero h1 {\n    font-size: 52px;\n    line-height: 62px;\n    max-width: 930px;\n    letter-spacing: -0.03em;\n    color: #020814;\n    margin-top: 0;\n    margin-bottom: 16px; }\n  .ee-hero h4 {\n    font-family: \"Roboto Mono\", Menlo, Monaco, Consolas, \"Courier New\", monospace;\n    font-weight: bold;\n    font-size: 13px;\n    line-height: 26px;\n    letter-spacing: 0.14em;\n    text-transform: uppercase;\n    color: #92A1B3;\n    margin-bottom: 29px; }\n  .ee-hero p {\n    font-family: \"Eina\", \"Helvetica Neue\", Helvetica, sans-serif;\n    font-size: 24px;\n    font-weight: 400;\n    line-height: 36px;\n    letter-spacing: -0.04em;\n    color: rgba(39, 50, 63, 0.8); }\n  .ee-hero .btn {\n    padding-left: 24px;\n    padding-right: 20px;\n    padding-top: 18px;\n    padding-bottom: 18px;\n    font-size: 14px;\n    margin-top: 16px;\n    line-height: 20px;\n    letter-spacing: 0.08em;\n    color: white;\n    text-transform: uppercase;\n    font-weight: 700;\n    background: #3880FF;\n    box-shadow: 0px 2px 4px rgba(2, 8, 20, 0.1), 0px 1px 2px rgba(2, 8, 20, 0.08);\n    border-radius: 210px;\n    display: -ms-flexbox;\n    display: flex;\n    -ms-flex-align: center;\n        align-items: center; }\n    .ee-hero .btn::after {\n      background-image: url('data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"white\" viewBox=\"0 0 512 512\"><path d=\"M85 277.375h259.704L225.002 397.077 256 427l171-171L256 85l-29.922 29.924 118.626 119.701H85v42.75z\"/></svg>');\n      background-size: 100%;\n      content: '';\n      height: 20px;\n      width: 20px;\n      display: block;\n      margin-left: 8px;\n      -webkit-transform: translateY(-1px);\n              transform: translateY(-1px); }\n    .ee-hero .btn:hover {\n      background-color: #4f8bf5; }\n  .ee-hero--large h1 {\n    font-size: 62px;\n    line-height: 69px; }\n  .ee-hero--wide {\n    max-width: 960px; }\n  .ee-hero--centered {\n    display: -ms-flexbox;\n    display: flex;\n    -ms-flex-direction: column;\n        flex-direction: column;\n    -ms-flex-pack: center;\n        justify-content: center;\n    -ms-flex-align: center;\n        align-items: center;\n    text-align: center;\n    margin-left: auto;\n    margin-right: auto; }\n  @media (max-width: 767px) {\n    .ee-hero {\n      padding-top: 70px;\n      padding-bottom: 0; }\n      .ee-hero h1 {\n        font-size: 44px;\n        line-height: 52px; }\n      .ee-hero--large h1 {\n        font-size: 50px;\n        line-height: 60px; } }\n  @media (max-width: 480px) {\n    .ee-hero h1 {\n      font-size: 36px;\n      line-height: 44px;\n      margin-bottom: 6px; }\n    .ee-hero--large h1 {\n      font-size: 42px;\n      line-height: 52px; }\n    .ee-hero .btn {\n      margin-top: 8px; } }\n\n.ee-main {\n  margin-top: 0; }\n  .ee-main section {\n    margin-bottom: 200px; }\n  .ee-main .left,\n  .ee-main .right,\n  .ee-main .center {\n    display: -ms-flexbox;\n    display: flex; }\n    .ee-main .left::before, .ee-main .left::after,\n    .ee-main .right::before,\n    .ee-main .right::after,\n    .ee-main .center::before,\n    .ee-main .center::after {\n      display: none; }\n  .ee-main .left .content,\n  .ee-main .right .content {\n    max-width: 480px; }\n    @media (max-width: 767px) {\n      .ee-main .left .content,\n      .ee-main .right .content {\n        max-width: 100%;\n        text-align: center; }\n        .ee-main .left .content li,\n        .ee-main .right .content li {\n          text-align: left; } }\n  .ee-main .left {\n    -ms-flex-direction: row;\n        flex-direction: row; }\n    .ee-main .left .graphics {\n      margin-left: auto; }\n  .ee-main .right {\n    -ms-flex-direction: row-reverse;\n        flex-direction: row-reverse;\n    margin-left: auto; }\n    .ee-main .right .graphics {\n      margin-right: auto; }\n  .ee-main .center {\n    -ms-flex-direction: column;\n        flex-direction: column;\n    -ms-flex-align: center;\n        align-items: center;\n    text-align: center; }\n    .ee-main .center .content {\n      width: 894px;\n      max-width: 100%; }\n  .ee-main .full .content {\n    max-width: 568px; }\n  @media (max-width: 767px) {\n    .ee-main .right,\n    .ee-main .left {\n      -ms-flex-direction: column-reverse;\n          flex-direction: column-reverse;\n      -ms-flex-align: center;\n          align-items: center; }\n      .ee-main .right .graphics,\n      .ee-main .left .graphics {\n        margin-bottom: 24px;\n        margin-left: 0;\n        margin-right: 0; }\n    .ee-main section {\n      margin-bottom: 100px; } }\n  .ee-main .graphics {\n    -ms-flex-pack: end;\n        justify-content: flex-end; }\n    .ee-main .graphics img {\n      width: 100%; }\n  .ee-main h2 {\n    font-size: 44px;\n    line-height: 51px;\n    letter-spacing: -0.03em; }\n    .ee-main h2:first-child {\n      margin-top: 0; }\n  .ee-main .ee-section__title {\n    font-family: \"Roboto Mono\", Menlo, Monaco, Consolas, \"Courier New\", monospace;\n    font-style: normal;\n    font-weight: bold;\n    font-size: 12px;\n    line-height: 23px;\n    letter-spacing: 0.14em;\n    text-transform: uppercase;\n    color: #5B708B;\n    margin-top: 0; }\n  .ee-main .ee-section__cta {\n    display: inline-block;\n    font-size: 18px;\n    font-weight: 500;\n    margin-top: 16px; }\n  .ee-main p {\n    font-size: 20px;\n    line-height: 31px;\n    letter-spacing: -0.02em;\n    color: #5B708B;\n    margin-top: 18px; }\n    .ee-main p.sm {\n      font-size: 16px;\n      line-height: 29px;\n      letter-spacing: -0.01em; }\n  .ee-main ul:not(.frameworks) {\n    margin-top: 54px; }\n  .ee-main .content ul {\n    padding-left: 0; }\n  .ee-main .content li {\n    font-size: 16px;\n    line-height: 23px;\n    letter-spacing: -0.02em;\n    color: #1A232F;\n    margin-bottom: 40px;\n    padding-left: 30px;\n    list-style: none;\n    position: relative; }\n    .ee-main .content li::before {\n      background-image: url(\"/img/enterprise/check.svg\");\n      background-size: 100%;\n      content: '';\n      height: 10px;\n      width: 13px;\n      position: absolute;\n      left: 0;\n      top: 8px; }\n  .ee-main .features {\n    display: -ms-grid;\n    display: grid;\n    -ms-grid-columns: 1fr 1fr 1fr;\n        grid-template-columns: 1fr 1fr 1fr;\n    grid-column-gap: 64px;\n    grid-row-gap: 24px;\n    padding: 0; }\n    .ee-main .features li {\n      list-style: none; }\n    .ee-main .features .icon {\n      margin-bottom: 16px;\n      width: 48px; }\n    @media (max-width: 991px) {\n      .ee-main .features {\n        -ms-grid-columns: 1fr 1fr;\n            grid-template-columns: 1fr 1fr; } }\n    @media (max-width: 500px) {\n      .ee-main .features {\n        -ms-grid-columns: 1fr;\n            grid-template-columns: 1fr; } }\n  .ee-main .cta-card {\n    background: #4a8bfc;\n    border-radius: 12px;\n    padding: 72px 72px 60px;\n    background-size: cover;\n    color: white; }\n    .ee-main .cta-card .ee-section__title,\n    .ee-main .cta-card p {\n      color: #CED6E0; }\n\n#how-to {\n  margin-bottom: 0;\n  position: relative;\n  padding-top: 140px; }\n  #how-to::before {\n    position: absolute;\n    top: 0;\n    width: 100vw;\n    border-top: 1px solid rgba(146, 161, 179, 0.3);\n    content: '';\n    display: block; }\n\n.cards--red-v-blue {\n  display: -ms-flexbox;\n  display: flex;\n  text-align: left;\n  -ms-flex-pack: center;\n      justify-content: center;\n  margin-top: 38px; }\n  .cards--red-v-blue__card {\n    background: #7CABFF;\n    border-radius: 8px;\n    padding: 40px 40px 34px;\n    display: -ms-flexbox;\n    display: flex;\n    -ms-flex-direction: column;\n        flex-direction: column;\n    -ms-flex-align: start;\n        align-items: flex-start;\n    margin-right: 24px;\n    -ms-flex: 0 1 460px;\n        flex: 0 1 460px;\n    border-radius: 8px; }\n    .cards--red-v-blue__card:last-child {\n      margin-right: 0; }\n    .cards--red-v-blue__card:nth-child(2) {\n      background: #F88D8D; }\n      .cards--red-v-blue__card:nth-child(2) .btn {\n        background: rgba(244, 84, 84, 0.5); }\n  .cards--red-v-blue h3 {\n    font-size: 24px;\n    line-height: normal;\n    letter-spacing: -0.02em;\n    color: white;\n    margin-top: 0; }\n  .cards--red-v-blue p {\n    font-size: 18px;\n    line-height: 26px;\n    letter-spacing: -0.02em;\n    color: rgba(255, 255, 255, 0.7);\n    margin-top: 0;\n    margin-bottom: 22px; }\n  .cards--red-v-blue .btn {\n    margin-top: auto;\n    font-size: 14px;\n    line-height: 22px;\n    letter-spacing: 0.09em;\n    text-transform: uppercase;\n    padding: 10px 14px;\n    font-weight: 600;\n    border-radius: 8px;\n    background: rgba(56, 128, 255, 0.5); }\n    .cards--red-v-blue .btn ion-icon {\n      display: inline-block;\n      height: 14px;\n      width: 14px;\n      vertical-align: -2px; }\n  @media (max-width: 767px) {\n    .cards--red-v-blue {\n      -ms-flex-direction: column;\n          flex-direction: column;\n      -ms-flex-align: center;\n          align-items: center; }\n      .cards--red-v-blue__card {\n        -ms-flex: auto;\n            flex: auto;\n        margin-right: 0;\n        margin-top: 20px;\n        max-width: 460px; } }\n\naside {\n  background: linear-gradient(180deg, #F9FAFB 0%, #FFFFFF 100%);\n  margin-top: -60px;\n  padding-top: 200px;\n  padding-bottom: 120px; }\n  aside p {\n    color: #414D5C; }\n  aside .content {\n    max-width: 432px;\n    margin: 0 auto;\n    text-align: center;\n    display: block; }\n\n.ee-get-started {\n  max-width: 700px; }\n  .ee-get-started h3 {\n    color: #414D5C; }\n\n.resources {\n  padding-bottom: 120px; }\n  @media (max-width: 768px) {\n    .resources {\n      padding-bottom: 60px; } }\n  .resources .cards {\n    list-style-type: none;\n    margin: 0;\n    padding: 0;\n    display: -ms-flexbox;\n    display: flex;\n    margin-left: -24px;\n    margin-right: -24px; }\n  .resources hgroup {\n    display: -ms-flexbox;\n    display: flex;\n    -ms-flex-pack: justify;\n        justify-content: space-between;\n    -ms-flex-align: baseline;\n        align-items: baseline; }\n    .resources hgroup h3 {\n      font-weight: 600;\n      line-height: normal;\n      font-size: 28px;\n      letter-spacing: -0.02em;\n      color: #1A232F;\n      margin-bottom: 0; }\n    .resources hgroup h4 {\n      font-weight: 600;\n      font-size: 24px;\n      line-height: normal;\n      letter-spacing: -0.02em;\n      color: #1A232F; }\n    .resources hgroup h5 {\n      font-weight: 700;\n      line-height: 1;\n      font-size: 14px;\n      letter-spacing: 0.08em;\n      color: #3880FF;\n      text-transform: uppercase; }\n    .resources hgroup ion-icon {\n      -webkit-transform: translateY(2px);\n              transform: translateY(2px); }\n  .resources .cards li {\n    display: block;\n    -ms-flex: 0 0 33.33%;\n        flex: 0 0 33.33%;\n    padding: 24px; }\n    .resources .cards li a {\n      display: block;\n      width: 100%; }\n    .resources .cards li .img-wrapper {\n      overflow: hidden;\n      border-radius: 6px; }\n    .resources .cards li img {\n      width: 100%; }\n    .resources .cards li h6 {\n      line-height: 23px;\n      font-size: 12px;\n      letter-spacing: 0.12em;\n      text-transform: uppercase;\n      color: #B2BECD;\n      margin-bottom: 0;\n      margin-top: 16px; }\n    .resources .cards li h4 {\n      font-size: 20px;\n      margin-top: 10px;\n      color: #1A232F;\n      font-weight: 600; }\n    .resources .cards li p {\n      color: #5B708B;\n      line-height: 22px;\n      font-size: 14px;\n      letter-spacing: -0.02em; }\n  @media (max-width: 992px) {\n    .resources .cards {\n      margin-left: -12px;\n      margin-right: -12px; }\n    .resources .cards li {\n      padding: 12px; } }\n  @media (max-width: 768px) {\n    .resources .cards {\n      -ms-flex-wrap: wrap;\n          flex-wrap: wrap; }\n    .resources .cards li {\n      -ms-flex: 0 0 50%;\n          flex: 0 0 50%; } }\n  @media (max-width: 480px) {\n    .resources .cards li {\n      -ms-flex: 0 0 100%;\n          flex: 0 0 100%; }\n    .resources h5 {\n      display: none; } }\n\n.ee-main .features li p,\n.ee-main .cards li p,\n.resources .features li p,\n.resources .cards li p {\n  font-size: 16px;\n  line-height: 29px;\n  letter-spacing: -0.01em;\n  color: #73849A;\n  margin-top: 0; }\n\n.ee-main .features li h4,\n.ee-main .cards li h4,\n.resources .features li h4,\n.resources .cards li h4 {\n  font-size: 20px;\n  line-height: normal;\n  letter-spacing: -0.02em;\n  color: #020814;\n  font-weight: 600; }\n\n.resources .cards {\n  margin-top: 0 !important;\n  text-align: left;\n  -ms-flex-wrap: wrap;\n      flex-wrap: wrap; }\n  .resources .cards .img-wrapper {\n    border-radius: 6px; }\n    .resources .cards .img-wrapper + h4 {\n      margin-top: 24px; }\n  @media (min-width: 1220px) {\n    .resources .cards {\n      margin-left: -40px;\n      margin-right: -40px; }\n      .resources .cards li {\n        padding: 40px; } }\n\n.resources .resources__customer-logos {\n  display: -ms-flexbox;\n  display: flex;\n  margin: 26px auto 0;\n  padding: 0;\n  -ms-flex-pack: justify;\n      justify-content: space-between;\n  max-width: 780px;\n  width: 100%; }\n  .resources .resources__customer-logos li {\n    background: url(\"/img/enterprise/customer-logos.png\");\n    background-size: 428px 46px;\n    background-repeat: no-repeat;\n    display: block;\n    height: 46px; }\n  @media (max-width: 768px) {\n    .resources .resources__customer-logos {\n      -ms-flex-pack: center;\n          justify-content: center;\n      -ms-flex-wrap: wrap;\n          flex-wrap: wrap;\n      max-width: 460px; }\n      .resources .resources__customer-logos li {\n        margin: 20px; } }\n  .resources .resources__customer-logos .mastercard {\n    width: 58px; }\n  .resources .resources__customer-logos .nationwide {\n    background-position: -58px 0;\n    width: 33px; }\n  .resources .resources__customer-logos .uniqlo {\n    background-position: -91px 0;\n    width: 65px; }\n  .resources .resources__customer-logos .ibm {\n    background-position: -156px 0;\n    width: 64px; }\n  .resources .resources__customer-logos .ing {\n    background-position: -222px 0;\n    width: 103px; }\n  .resources .resources__customer-logos .sap {\n    background-position: -326px 0;\n    width: 56px; }\n  .resources .resources__customer-logos .nasa {\n    background-position: -380px 0;\n    width: 50px; }\n\n.ee-hero p {\n  max-width: 458px; }\n\n#difference {\n  display: -ms-flexbox;\n  display: flex;\n  padding-top: 60px;\n  padding-bottom: 69px;\n  margin-top: 20px;\n  border-top: 1px solid #eee;\n  border-bottom: 1px solid #eee; }\n  #difference .container {\n    position: relative; }\n    #difference .container::before {\n      background: url(\"/img/enterprise/ionic-enterprise-development-ebook.png\") 0 0 no-repeat;\n      background-size: 100%;\n      width: 424px;\n      height: 310px;\n      content: '';\n      position: absolute;\n      bottom: -69px;\n      left: 52px; }\n  #difference hgroup {\n    max-width: 550px;\n    margin-right: 50px;\n    margin-left: auto; }\n  #difference h5 {\n    font-size: 18px;\n    margin-bottom: 11px;\n    color: #1f3256; }\n  #difference p {\n    font-size: 16px;\n    font-weight: 400;\n    line-height: 1.6em;\n    letter-spacing: -.01em;\n    color: #6c81a6; }\n  #difference .btn {\n    padding: 12px 13px 10px;\n    font-size: 14px;\n    background-color: #668bff; }\n  @media (max-width: 1219px) {\n    #difference .container::before {\n      left: 0; }\n    #difference hgroup {\n      max-width: 500px; } }\n  @media (max-width: 991px) {\n    #difference hgroup {\n      margin: 0 auto;\n      max-width: 100%; }\n    #difference .container::before {\n      width: 212px;\n      height: 155px;\n      right: 0;\n      left: auto; } }\n  @media (max-width: 370px) {\n    #difference .container::before {\n      display: none; } }\n\n#best-way h2 {\n  max-width: 320px; }\n\n#best-way .graphics {\n  width: 640px;\n  min-height: 532px;\n  margin-left: auto; }\n  #best-way .graphics img {\n    width: 945px; }\n  @media (max-width: 991px) {\n    #best-way .graphics {\n      width: calc(100% - 300px); } }\n  @media (max-width: 767px) {\n    #best-way .graphics {\n      width: 100%; } }\n\n#friendly .graphics {\n  width: 560px;\n  margin-right: auto; }\n  #friendly .graphics img {\n    max-width: 560px; }\n  @media (max-width: 1219px) {\n    #friendly .graphics {\n      width: calc(100% - 300px); }\n      #friendly .graphics img {\n        max-width: calc(100% - 20px); } }\n  @media (max-width: 1219px) {\n    #friendly .graphics {\n      width: 373px;\n      max-width: 100%;\n      margin-left: auto;\n      margin-right: auto; }\n      #friendly .graphics img {\n        max-width: 100%; } }\n\n#supercharged figure {\n  width: 100%;\n  max-width: 800px; }\n\n#supercharged figcaption {\n  font-size: 13px;\n  line-height: 23px;\n  letter-spacing: -0.01em;\n  color: #73849A; }\n\n#supercharged ul {\n  padding: 0;\n  width: 100%;\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-pack: justify;\n      justify-content: space-between;\n  position: relative;\n  margin-bottom: 16px;\n  -ms-flex-wrap: wrap;\n      flex-wrap: wrap; }\n  @media (max-width: 1219px) {\n    #supercharged ul {\n      -ms-flex-pack: distribute;\n          justify-content: space-around; } }\n  #supercharged ul::after {\n    content: '';\n    position: absolute;\n    bottom: 0;\n    left: 0;\n    right: 0;\n    border: 2px solid #E3EDFF;\n    border-top: none;\n    border-bottom-left-radius: 8px;\n    border-bottom-right-radius: 8px;\n    height: 9px; }\n\n#supercharged li {\n  list-style: none;\n  display: inline-block;\n  font-family: \"Roboto Mono\", Menlo, Monaco, Consolas, \"Courier New\", monospace;\n  font-style: normal;\n  font-weight: bold;\n  font-size: 12px;\n  padding-bottom: 50px;\n  line-height: normal;\n  text-align: center;\n  letter-spacing: 0.14em;\n  text-transform: uppercase;\n  color: #5B708B; }\n\n#supercharged .icon {\n  background: #F0F6FF;\n  border-radius: 50%;\n  height: 172px;\n  width: 172px;\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-direction: column;\n      flex-direction: column;\n  -ms-flex-pack: center;\n      justify-content: center;\n  -ms-flex-align: center;\n      align-items: center;\n  margin-bottom: 11px; }\n  #supercharged .icon img {\n    margin: 0 auto; }\n\n#supercharged caption {\n  font-size: 13px;\n  line-height: 23px;\n  text-align: center;\n  letter-spacing: -0.01em;\n  color: #73849A; }\n\n/*# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImhvbWUuY3NzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0VBQ0UsaUJBQWlCO0VBQ2pCLG1CQUFtQjtFQUNuQixzQkFBc0IsRUFBRTtFQUN4QjtJQUNFLGNBQWMsRUFBRTtFQUNsQjtJQUNFLGdCQUFnQjtJQUNoQixrQkFBa0I7SUFDbEIsaUJBQWlCO0lBQ2pCLHdCQUF3QjtJQUN4QixlQUFlO0lBQ2YsY0FBYztJQUNkLG9CQUFvQixFQUFFO0VBQ3hCO0lBQ0UsOEVBQThFO0lBQzlFLGtCQUFrQjtJQUNsQixnQkFBZ0I7SUFDaEIsa0JBQWtCO0lBQ2xCLHVCQUF1QjtJQUN2QiwwQkFBMEI7SUFDMUIsZUFBZTtJQUNmLG9CQUFvQixFQUFFO0VBQ3hCO0lBQ0UsNkRBQTZEO0lBQzdELGdCQUFnQjtJQUNoQixpQkFBaUI7SUFDakIsa0JBQWtCO0lBQ2xCLHdCQUF3QjtJQUN4Qiw2QkFBNkIsRUFBRTtFQUNqQztJQUNFLG1CQUFtQjtJQUNuQixvQkFBb0I7SUFDcEIsa0JBQWtCO0lBQ2xCLHFCQUFxQjtJQUNyQixnQkFBZ0I7SUFDaEIsaUJBQWlCO0lBQ2pCLGtCQUFrQjtJQUNsQix1QkFBdUI7SUFDdkIsYUFBYTtJQUNiLDBCQUEwQjtJQUMxQixpQkFBaUI7SUFDakIsb0JBQW9CO0lBQ3BCLDhFQUE4RTtJQUM5RSxxQkFBcUI7SUFDckIscUJBQWM7SUFBZCxjQUFjO0lBQ2QsdUJBQW9CO1FBQXBCLG9CQUFvQixFQUFFO0lBQ3RCO01BQ0Usa1BBQWtQO01BQ2xQLHNCQUFzQjtNQUN0QixZQUFZO01BQ1osYUFBYTtNQUNiLFlBQVk7TUFDWixlQUFlO01BQ2YsaUJBQWlCO01BQ2pCLG9DQUE0QjtjQUE1Qiw0QkFBNEIsRUFBRTtJQUNoQztNQUNFLDBCQUEwQixFQUFFO0VBQ2hDO0lBQ0UsZ0JBQWdCO0lBQ2hCLGtCQUFrQixFQUFFO0VBQ3RCO0lBQ0UsaUJBQWlCLEVBQUU7RUFDckI7SUFDRSxxQkFBYztJQUFkLGNBQWM7SUFDZCwyQkFBdUI7UUFBdkIsdUJBQXVCO0lBQ3ZCLHNCQUF3QjtRQUF4Qix3QkFBd0I7SUFDeEIsdUJBQW9CO1FBQXBCLG9CQUFvQjtJQUNwQixtQkFBbUI7SUFDbkIsa0JBQWtCO0lBQ2xCLG1CQUFtQixFQUFFO0VBQ3ZCO0lBQ0U7TUFDRSxrQkFBa0I7TUFDbEIsa0JBQWtCLEVBQUU7TUFDcEI7UUFDRSxnQkFBZ0I7UUFDaEIsa0JBQWtCLEVBQUU7TUFDdEI7UUFDRSxnQkFBZ0I7UUFDaEIsa0JBQWtCLEVBQUUsRUFBRTtFQUM1QjtJQUNFO01BQ0UsZ0JBQWdCO01BQ2hCLGtCQUFrQjtNQUNsQixtQkFBbUIsRUFBRTtJQUN2QjtNQUNFLGdCQUFnQjtNQUNoQixrQkFBa0IsRUFBRTtJQUN0QjtNQUNFLGdCQUFnQixFQUFFLEVBQUU7O0FBRTFCO0VBQ0UsY0FBYyxFQUFFO0VBQ2hCO0lBQ0UscUJBQXFCLEVBQUU7RUFDekI7OztJQUdFLHFCQUFjO0lBQWQsY0FBYyxFQUFFO0lBQ2hCOzs7OztNQUtFLGNBQWMsRUFBRTtFQUNwQjs7SUFFRSxpQkFBaUIsRUFBRTtJQUNuQjtNQUNFOztRQUVFLGdCQUFnQjtRQUNoQixtQkFBbUIsRUFBRTtRQUNyQjs7VUFFRSxpQkFBaUIsRUFBRSxFQUFFO0VBQzdCO0lBQ0Usd0JBQW9CO1FBQXBCLG9CQUFvQixFQUFFO0lBQ3RCO01BQ0Usa0JBQWtCLEVBQUU7RUFDeEI7SUFDRSxnQ0FBNEI7UUFBNUIsNEJBQTRCO0lBQzVCLGtCQUFrQixFQUFFO0lBQ3BCO01BQ0UsbUJBQW1CLEVBQUU7RUFDekI7SUFDRSwyQkFBdUI7UUFBdkIsdUJBQXVCO0lBQ3ZCLHVCQUFvQjtRQUFwQixvQkFBb0I7SUFDcEIsbUJBQW1CLEVBQUU7SUFDckI7TUFDRSxhQUFhO01BQ2IsZ0JBQWdCLEVBQUU7RUFDdEI7SUFDRSxpQkFBaUIsRUFBRTtFQUNyQjtJQUNFOztNQUVFLG1DQUErQjtVQUEvQiwrQkFBK0I7TUFDL0IsdUJBQW9CO1VBQXBCLG9CQUFvQixFQUFFO01BQ3RCOztRQUVFLG9CQUFvQjtRQUNwQixlQUFlO1FBQ2YsZ0JBQWdCLEVBQUU7SUFDdEI7TUFDRSxxQkFBcUIsRUFBRSxFQUFFO0VBQzdCO0lBQ0UsbUJBQTBCO1FBQTFCLDBCQUEwQixFQUFFO0lBQzVCO01BQ0UsWUFBWSxFQUFFO0VBQ2xCO0lBQ0UsZ0JBQWdCO0lBQ2hCLGtCQUFrQjtJQUNsQix3QkFBd0IsRUFBRTtJQUMxQjtNQUNFLGNBQWMsRUFBRTtFQUNwQjtJQUNFLDhFQUE4RTtJQUM5RSxtQkFBbUI7SUFDbkIsa0JBQWtCO0lBQ2xCLGdCQUFnQjtJQUNoQixrQkFBa0I7SUFDbEIsdUJBQXVCO0lBQ3ZCLDBCQUEwQjtJQUMxQixlQUFlO0lBQ2YsY0FBYyxFQUFFO0VBQ2xCO0lBQ0Usc0JBQXNCO0lBQ3RCLGdCQUFnQjtJQUNoQixpQkFBaUI7SUFDakIsaUJBQWlCLEVBQUU7RUFDckI7SUFDRSxnQkFBZ0I7SUFDaEIsa0JBQWtCO0lBQ2xCLHdCQUF3QjtJQUN4QixlQUFlO0lBQ2YsaUJBQWlCLEVBQUU7SUFDbkI7TUFDRSxnQkFBZ0I7TUFDaEIsa0JBQWtCO01BQ2xCLHdCQUF3QixFQUFFO0VBQzlCO0lBQ0UsaUJBQWlCLEVBQUU7RUFDckI7SUFDRSxnQkFBZ0IsRUFBRTtFQUNwQjtJQUNFLGdCQUFnQjtJQUNoQixrQkFBa0I7SUFDbEIsd0JBQXdCO0lBQ3hCLGVBQWU7SUFDZixvQkFBb0I7SUFDcEIsbUJBQW1CO0lBQ25CLGlCQUFpQjtJQUNqQixtQkFBbUIsRUFBRTtJQUNyQjtNQUNFLG1EQUFtRDtNQUNuRCxzQkFBc0I7TUFDdEIsWUFBWTtNQUNaLGFBQWE7TUFDYixZQUFZO01BQ1osbUJBQW1CO01BQ25CLFFBQVE7TUFDUixTQUFTLEVBQUU7RUFDZjtJQUNFLGtCQUFjO0lBQWQsY0FBYztJQUNkLDhCQUFtQztRQUFuQyxtQ0FBbUM7SUFDbkMsc0JBQXNCO0lBQ3RCLG1CQUFtQjtJQUNuQixXQUFXLEVBQUU7SUFDYjtNQUNFLGlCQUFpQixFQUFFO0lBQ3JCO01BQ0Usb0JBQW9CO01BQ3BCLFlBQVksRUFBRTtJQUNoQjtNQUNFO1FBQ0UsMEJBQStCO1lBQS9CLCtCQUErQixFQUFFLEVBQUU7SUFDdkM7TUFDRTtRQUNFLHNCQUEyQjtZQUEzQiwyQkFBMkIsRUFBRSxFQUFFO0VBQ3JDO0lBQ0Usb0JBQW9CO0lBQ3BCLG9CQUFvQjtJQUNwQix3QkFBd0I7SUFDeEIsdUJBQXVCO0lBQ3ZCLGFBQWEsRUFBRTtJQUNmOztNQUVFLGVBQWUsRUFBRTs7QUFFdkI7RUFDRSxpQkFBaUI7RUFDakIsbUJBQW1CO0VBQ25CLG1CQUFtQixFQUFFO0VBQ3JCO0lBQ0UsbUJBQW1CO0lBQ25CLE9BQU87SUFDUCxhQUFhO0lBQ2IsK0NBQStDO0lBQy9DLFlBQVk7SUFDWixlQUFlLEVBQUU7O0FBRXJCO0VBQ0UscUJBQWM7RUFBZCxjQUFjO0VBQ2QsaUJBQWlCO0VBQ2pCLHNCQUF3QjtNQUF4Qix3QkFBd0I7RUFDeEIsaUJBQWlCLEVBQUU7RUFDbkI7SUFDRSxvQkFBb0I7SUFDcEIsbUJBQW1CO0lBQ25CLHdCQUF3QjtJQUN4QixxQkFBYztJQUFkLGNBQWM7SUFDZCwyQkFBdUI7UUFBdkIsdUJBQXVCO0lBQ3ZCLHNCQUF3QjtRQUF4Qix3QkFBd0I7SUFDeEIsbUJBQW1CO0lBQ25CLG9CQUFnQjtRQUFoQixnQkFBZ0I7SUFDaEIsbUJBQW1CLEVBQUU7SUFDckI7TUFDRSxnQkFBZ0IsRUFBRTtJQUNwQjtNQUNFLG9CQUFvQixFQUFFO01BQ3RCO1FBQ0UsbUNBQW1DLEVBQUU7RUFDM0M7SUFDRSxnQkFBZ0I7SUFDaEIsb0JBQW9CO0lBQ3BCLHdCQUF3QjtJQUN4QixhQUFhO0lBQ2IsY0FBYyxFQUFFO0VBQ2xCO0lBQ0UsZ0JBQWdCO0lBQ2hCLGtCQUFrQjtJQUNsQix3QkFBd0I7SUFDeEIsZ0NBQWdDO0lBQ2hDLGNBQWM7SUFDZCxvQkFBb0IsRUFBRTtFQUN4QjtJQUNFLGlCQUFpQjtJQUNqQixnQkFBZ0I7SUFDaEIsa0JBQWtCO0lBQ2xCLHVCQUF1QjtJQUN2QiwwQkFBMEI7SUFDMUIsbUJBQW1CO0lBQ25CLGlCQUFpQjtJQUNqQixtQkFBbUI7SUFDbkIsb0NBQW9DLEVBQUU7SUFDdEM7TUFDRSxzQkFBc0I7TUFDdEIsYUFBYTtNQUNiLFlBQVk7TUFDWixxQkFBcUIsRUFBRTtFQUMzQjtJQUNFO01BQ0UsMkJBQXVCO1VBQXZCLHVCQUF1QjtNQUN2Qix1QkFBb0I7VUFBcEIsb0JBQW9CLEVBQUU7TUFDdEI7UUFDRSxlQUFXO1lBQVgsV0FBVztRQUNYLGdCQUFnQjtRQUNoQixpQkFBaUI7UUFDakIsaUJBQWlCLEVBQUUsRUFBRTs7QUFFN0I7RUFDRSw4REFBOEQ7RUFDOUQsa0JBQWtCO0VBQ2xCLG1CQUFtQjtFQUNuQixzQkFBc0IsRUFBRTtFQUN4QjtJQUNFLGVBQWUsRUFBRTtFQUNuQjtJQUNFLGlCQUFpQjtJQUNqQixlQUFlO0lBQ2YsbUJBQW1CO0lBQ25CLGVBQWUsRUFBRTs7QUFFckI7RUFDRSxpQkFBaUIsRUFBRTtFQUNuQjtJQUNFLGVBQWUsRUFBRTs7QUFFckI7RUFDRSxzQkFBc0IsRUFBRTtFQUN4QjtJQUNFO01BQ0UscUJBQXFCLEVBQUUsRUFBRTtFQUM3QjtJQUNFLHNCQUFzQjtJQUN0QixVQUFVO0lBQ1YsV0FBVztJQUNYLHFCQUFjO0lBQWQsY0FBYztJQUNkLG1CQUFtQjtJQUNuQixvQkFBb0IsRUFBRTtFQUN4QjtJQUNFLHFCQUFjO0lBQWQsY0FBYztJQUNkLHVCQUErQjtRQUEvQiwrQkFBK0I7SUFDL0IseUJBQXNCO1FBQXRCLHNCQUFzQixFQUFFO0lBQ3hCO01BQ0UsaUJBQWlCO01BQ2pCLG9CQUFvQjtNQUNwQixnQkFBZ0I7TUFDaEIsd0JBQXdCO01BQ3hCLGVBQWU7TUFDZixpQkFBaUIsRUFBRTtJQUNyQjtNQUNFLGlCQUFpQjtNQUNqQixnQkFBZ0I7TUFDaEIsb0JBQW9CO01BQ3BCLHdCQUF3QjtNQUN4QixlQUFlLEVBQUU7SUFDbkI7TUFDRSxpQkFBaUI7TUFDakIsZUFBZTtNQUNmLGdCQUFnQjtNQUNoQix1QkFBdUI7TUFDdkIsZUFBZTtNQUNmLDBCQUEwQixFQUFFO0lBQzlCO01BQ0UsbUNBQTJCO2NBQTNCLDJCQUEyQixFQUFFO0VBQ2pDO0lBQ0UsZUFBZTtJQUNmLHFCQUFpQjtRQUFqQixpQkFBaUI7SUFDakIsY0FBYyxFQUFFO0lBQ2hCO01BQ0UsZUFBZTtNQUNmLFlBQVksRUFBRTtJQUNoQjtNQUNFLGlCQUFpQjtNQUNqQixtQkFBbUIsRUFBRTtJQUN2QjtNQUNFLFlBQVksRUFBRTtJQUNoQjtNQUNFLGtCQUFrQjtNQUNsQixnQkFBZ0I7TUFDaEIsdUJBQXVCO01BQ3ZCLDBCQUEwQjtNQUMxQixlQUFlO01BQ2YsaUJBQWlCO01BQ2pCLGlCQUFpQixFQUFFO0lBQ3JCO01BQ0UsZ0JBQWdCO01BQ2hCLGlCQUFpQjtNQUNqQixlQUFlO01BQ2YsaUJBQWlCLEVBQUU7SUFDckI7TUFDRSxlQUFlO01BQ2Ysa0JBQWtCO01BQ2xCLGdCQUFnQjtNQUNoQix3QkFBd0IsRUFBRTtFQUM5QjtJQUNFO01BQ0UsbUJBQW1CO01BQ25CLG9CQUFvQixFQUFFO0lBQ3hCO01BQ0UsY0FBYyxFQUFFLEVBQUU7RUFDdEI7SUFDRTtNQUNFLG9CQUFnQjtVQUFoQixnQkFBZ0IsRUFBRTtJQUNwQjtNQUNFLGtCQUFjO1VBQWQsY0FBYyxFQUFFLEVBQUU7RUFDdEI7SUFDRTtNQUNFLG1CQUFlO1VBQWYsZUFBZSxFQUFFO0lBQ25CO01BQ0UsY0FBYyxFQUFFLEVBQUU7O0FBRXhCOzs7O0VBSUUsZ0JBQWdCO0VBQ2hCLGtCQUFrQjtFQUNsQix3QkFBd0I7RUFDeEIsZUFBZTtFQUNmLGNBQWMsRUFBRTs7QUFFbEI7Ozs7RUFJRSxnQkFBZ0I7RUFDaEIsb0JBQW9CO0VBQ3BCLHdCQUF3QjtFQUN4QixlQUFlO0VBQ2YsaUJBQWlCLEVBQUU7O0FBRXJCO0VBQ0UseUJBQXlCO0VBQ3pCLGlCQUFpQjtFQUNqQixvQkFBZ0I7TUFBaEIsZ0JBQWdCLEVBQUU7RUFDbEI7SUFDRSxtQkFBbUIsRUFBRTtJQUNyQjtNQUNFLGlCQUFpQixFQUFFO0VBQ3ZCO0lBQ0U7TUFDRSxtQkFBbUI7TUFDbkIsb0JBQW9CLEVBQUU7TUFDdEI7UUFDRSxjQUFjLEVBQUUsRUFBRTs7QUFFMUI7RUFDRSxxQkFBYztFQUFkLGNBQWM7RUFDZCxvQkFBb0I7RUFDcEIsV0FBVztFQUNYLHVCQUErQjtNQUEvQiwrQkFBK0I7RUFDL0IsaUJBQWlCO0VBQ2pCLFlBQVksRUFBRTtFQUNkO0lBQ0Usc0RBQXNEO0lBQ3RELDRCQUE0QjtJQUM1Qiw2QkFBNkI7SUFDN0IsZUFBZTtJQUNmLGFBQWEsRUFBRTtFQUNqQjtJQUNFO01BQ0Usc0JBQXdCO1VBQXhCLHdCQUF3QjtNQUN4QixvQkFBZ0I7VUFBaEIsZ0JBQWdCO01BQ2hCLGlCQUFpQixFQUFFO01BQ25CO1FBQ0UsYUFBYSxFQUFFLEVBQUU7RUFDdkI7SUFDRSxZQUFZLEVBQUU7RUFDaEI7SUFDRSw2QkFBNkI7SUFDN0IsWUFBWSxFQUFFO0VBQ2hCO0lBQ0UsNkJBQTZCO0lBQzdCLFlBQVksRUFBRTtFQUNoQjtJQUNFLDhCQUE4QjtJQUM5QixZQUFZLEVBQUU7RUFDaEI7SUFDRSw4QkFBOEI7SUFDOUIsYUFBYSxFQUFFO0VBQ2pCO0lBQ0UsOEJBQThCO0lBQzlCLFlBQVksRUFBRTtFQUNoQjtJQUNFLDhCQUE4QjtJQUM5QixZQUFZLEVBQUU7O0FBRWxCO0VBQ0UsaUJBQWlCLEVBQUU7O0FBRXJCO0VBQ0UscUJBQWM7RUFBZCxjQUFjO0VBQ2Qsa0JBQWtCO0VBQ2xCLHFCQUFxQjtFQUNyQixpQkFBaUI7RUFDakIsMkJBQTJCO0VBQzNCLDhCQUE4QixFQUFFO0VBQ2hDO0lBQ0UsbUJBQW1CLEVBQUU7SUFDckI7TUFDRSx3RkFBd0Y7TUFDeEYsc0JBQXNCO01BQ3RCLGFBQWE7TUFDYixjQUFjO01BQ2QsWUFBWTtNQUNaLG1CQUFtQjtNQUNuQixjQUFjO01BQ2QsV0FBVyxFQUFFO0VBQ2pCO0lBQ0UsaUJBQWlCO0lBQ2pCLG1CQUFtQjtJQUNuQixrQkFBa0IsRUFBRTtFQUN0QjtJQUNFLGdCQUFnQjtJQUNoQixvQkFBb0I7SUFDcEIsZUFBZSxFQUFFO0VBQ25CO0lBQ0UsZ0JBQWdCO0lBQ2hCLGlCQUFpQjtJQUNqQixtQkFBbUI7SUFDbkIsdUJBQXVCO0lBQ3ZCLGVBQWUsRUFBRTtFQUNuQjtJQUNFLHdCQUF3QjtJQUN4QixnQkFBZ0I7SUFDaEIsMEJBQTBCLEVBQUU7RUFDOUI7SUFDRTtNQUNFLFFBQVEsRUFBRTtJQUNaO01BQ0UsaUJBQWlCLEVBQUUsRUFBRTtFQUN6QjtJQUNFO01BQ0UsZUFBZTtNQUNmLGdCQUFnQixFQUFFO0lBQ3BCO01BQ0UsYUFBYTtNQUNiLGNBQWM7TUFDZCxTQUFTO01BQ1QsV0FBVyxFQUFFLEVBQUU7RUFDbkI7SUFDRTtNQUNFLGNBQWMsRUFBRSxFQUFFOztBQUV4QjtFQUNFLGlCQUFpQixFQUFFOztBQUVyQjtFQUNFLGFBQWE7RUFDYixrQkFBa0I7RUFDbEIsa0JBQWtCLEVBQUU7RUFDcEI7SUFDRSxhQUFhLEVBQUU7RUFDakI7SUFDRTtNQUNFLDBCQUEwQixFQUFFLEVBQUU7RUFDbEM7SUFDRTtNQUNFLFlBQVksRUFBRSxFQUFFOztBQUV0QjtFQUNFLGFBQWE7RUFDYixtQkFBbUIsRUFBRTtFQUNyQjtJQUNFLGlCQUFpQixFQUFFO0VBQ3JCO0lBQ0U7TUFDRSwwQkFBMEIsRUFBRTtNQUM1QjtRQUNFLDZCQUE2QixFQUFFLEVBQUU7RUFDdkM7SUFDRTtNQUNFLGFBQWE7TUFDYixnQkFBZ0I7TUFDaEIsa0JBQWtCO01BQ2xCLG1CQUFtQixFQUFFO01BQ3JCO1FBQ0UsZ0JBQWdCLEVBQUUsRUFBRTs7QUFFNUI7RUFDRSxZQUFZO0VBQ1osaUJBQWlCLEVBQUU7O0FBRXJCO0VBQ0UsZ0JBQWdCO0VBQ2hCLGtCQUFrQjtFQUNsQix3QkFBd0I7RUFDeEIsZUFBZSxFQUFFOztBQUVuQjtFQUNFLFdBQVc7RUFDWCxZQUFZO0VBQ1oscUJBQWM7RUFBZCxjQUFjO0VBQ2QsdUJBQStCO01BQS9CLCtCQUErQjtFQUMvQixtQkFBbUI7RUFDbkIsb0JBQW9CO0VBQ3BCLG9CQUFnQjtNQUFoQixnQkFBZ0IsRUFBRTtFQUNsQjtJQUNFO01BQ0UsMEJBQThCO1VBQTlCLDhCQUE4QixFQUFFLEVBQUU7RUFDdEM7SUFDRSxZQUFZO0lBQ1osbUJBQW1CO0lBQ25CLFVBQVU7SUFDVixRQUFRO0lBQ1IsU0FBUztJQUNULDBCQUEwQjtJQUMxQixpQkFBaUI7SUFDakIsK0JBQStCO0lBQy9CLGdDQUFnQztJQUNoQyxZQUFZLEVBQUU7O0FBRWxCO0VBQ0UsaUJBQWlCO0VBQ2pCLHNCQUFzQjtFQUN0Qiw4RUFBOEU7RUFDOUUsbUJBQW1CO0VBQ25CLGtCQUFrQjtFQUNsQixnQkFBZ0I7RUFDaEIscUJBQXFCO0VBQ3JCLG9CQUFvQjtFQUNwQixtQkFBbUI7RUFDbkIsdUJBQXVCO0VBQ3ZCLDBCQUEwQjtFQUMxQixlQUFlLEVBQUU7O0FBRW5CO0VBQ0Usb0JBQW9CO0VBQ3BCLG1CQUFtQjtFQUNuQixjQUFjO0VBQ2QsYUFBYTtFQUNiLHFCQUFjO0VBQWQsY0FBYztFQUNkLDJCQUF1QjtNQUF2Qix1QkFBdUI7RUFDdkIsc0JBQXdCO01BQXhCLHdCQUF3QjtFQUN4Qix1QkFBb0I7TUFBcEIsb0JBQW9CO0VBQ3BCLG9CQUFvQixFQUFFO0VBQ3RCO0lBQ0UsZUFBZSxFQUFFOztBQUVyQjtFQUNFLGdCQUFnQjtFQUNoQixrQkFBa0I7RUFDbEIsbUJBQW1CO0VBQ25CLHdCQUF3QjtFQUN4QixlQUFlLEVBQUUiLCJmaWxlIjoicGFnZXMvZW50ZXJwcmlzZS9ob21lLmNzcyIsInNvdXJjZXNDb250ZW50IjpbIi5lZS1oZXJvIHtcbiAgbWF4LXdpZHRoOiA2NDBweDtcbiAgcGFkZGluZy10b3A6IDEzMHB4O1xuICBwYWRkaW5nLWJvdHRvbTogMTYwcHg7IH1cbiAgLmVlLWhlcm86OmJlZm9yZSwgLmVlLWhlcm86OmFmdGVyIHtcbiAgICBkaXNwbGF5OiBub25lOyB9XG4gIC5lZS1oZXJvIGgxIHtcbiAgICBmb250LXNpemU6IDUycHg7XG4gICAgbGluZS1oZWlnaHQ6IDYycHg7XG4gICAgbWF4LXdpZHRoOiA5MzBweDtcbiAgICBsZXR0ZXItc3BhY2luZzogLTAuMDNlbTtcbiAgICBjb2xvcjogIzAyMDgxNDtcbiAgICBtYXJnaW4tdG9wOiAwO1xuICAgIG1hcmdpbi1ib3R0b206IDE2cHg7IH1cbiAgLmVlLWhlcm8gaDQge1xuICAgIGZvbnQtZmFtaWx5OiBcIlJvYm90byBNb25vXCIsIE1lbmxvLCBNb25hY28sIENvbnNvbGFzLCBcIkNvdXJpZXIgTmV3XCIsIG1vbm9zcGFjZTtcbiAgICBmb250LXdlaWdodDogYm9sZDtcbiAgICBmb250LXNpemU6IDEzcHg7XG4gICAgbGluZS1oZWlnaHQ6IDI2cHg7XG4gICAgbGV0dGVyLXNwYWNpbmc6IDAuMTRlbTtcbiAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xuICAgIGNvbG9yOiAjOTJBMUIzO1xuICAgIG1hcmdpbi1ib3R0b206IDI5cHg7IH1cbiAgLmVlLWhlcm8gcCB7XG4gICAgZm9udC1mYW1pbHk6IFwiRWluYVwiLCBcIkhlbHZldGljYSBOZXVlXCIsIEhlbHZldGljYSwgc2Fucy1zZXJpZjtcbiAgICBmb250LXNpemU6IDI0cHg7XG4gICAgZm9udC13ZWlnaHQ6IDQwMDtcbiAgICBsaW5lLWhlaWdodDogMzZweDtcbiAgICBsZXR0ZXItc3BhY2luZzogLTAuMDRlbTtcbiAgICBjb2xvcjogcmdiYSgzOSwgNTAsIDYzLCAwLjgpOyB9XG4gIC5lZS1oZXJvIC5idG4ge1xuICAgIHBhZGRpbmctbGVmdDogMjRweDtcbiAgICBwYWRkaW5nLXJpZ2h0OiAyMHB4O1xuICAgIHBhZGRpbmctdG9wOiAxOHB4O1xuICAgIHBhZGRpbmctYm90dG9tOiAxOHB4O1xuICAgIGZvbnQtc2l6ZTogMTRweDtcbiAgICBtYXJnaW4tdG9wOiAxNnB4O1xuICAgIGxpbmUtaGVpZ2h0OiAyMHB4O1xuICAgIGxldHRlci1zcGFjaW5nOiAwLjA4ZW07XG4gICAgY29sb3I6IHdoaXRlO1xuICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XG4gICAgZm9udC13ZWlnaHQ6IDcwMDtcbiAgICBiYWNrZ3JvdW5kOiAjMzg4MEZGO1xuICAgIGJveC1zaGFkb3c6IDBweCAycHggNHB4IHJnYmEoMiwgOCwgMjAsIDAuMSksIDBweCAxcHggMnB4IHJnYmEoMiwgOCwgMjAsIDAuMDgpO1xuICAgIGJvcmRlci1yYWRpdXM6IDIxMHB4O1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjsgfVxuICAgIC5lZS1oZXJvIC5idG46OmFmdGVyIHtcbiAgICAgIGJhY2tncm91bmQtaW1hZ2U6IHVybCgnZGF0YTppbWFnZS9zdmcreG1sO3V0ZjgsPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgZmlsbD1cIndoaXRlXCIgdmlld0JveD1cIjAgMCA1MTIgNTEyXCI+PHBhdGggZD1cIk04NSAyNzcuMzc1aDI1OS43MDRMMjI1LjAwMiAzOTcuMDc3IDI1NiA0MjdsMTcxLTE3MUwyNTYgODVsLTI5LjkyMiAyOS45MjQgMTE4LjYyNiAxMTkuNzAxSDg1djQyLjc1elwiLz48L3N2Zz4nKTtcbiAgICAgIGJhY2tncm91bmQtc2l6ZTogMTAwJTtcbiAgICAgIGNvbnRlbnQ6ICcnO1xuICAgICAgaGVpZ2h0OiAyMHB4O1xuICAgICAgd2lkdGg6IDIwcHg7XG4gICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgIG1hcmdpbi1sZWZ0OiA4cHg7XG4gICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTFweCk7IH1cbiAgICAuZWUtaGVybyAuYnRuOmhvdmVyIHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6ICM0ZjhiZjU7IH1cbiAgLmVlLWhlcm8tLWxhcmdlIGgxIHtcbiAgICBmb250LXNpemU6IDYycHg7XG4gICAgbGluZS1oZWlnaHQ6IDY5cHg7IH1cbiAgLmVlLWhlcm8tLXdpZGUge1xuICAgIG1heC13aWR0aDogOTYwcHg7IH1cbiAgLmVlLWhlcm8tLWNlbnRlcmVkIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgbWFyZ2luLWxlZnQ6IGF1dG87XG4gICAgbWFyZ2luLXJpZ2h0OiBhdXRvOyB9XG4gIEBtZWRpYSAobWF4LXdpZHRoOiA3NjdweCkge1xuICAgIC5lZS1oZXJvIHtcbiAgICAgIHBhZGRpbmctdG9wOiA3MHB4O1xuICAgICAgcGFkZGluZy1ib3R0b206IDA7IH1cbiAgICAgIC5lZS1oZXJvIGgxIHtcbiAgICAgICAgZm9udC1zaXplOiA0NHB4O1xuICAgICAgICBsaW5lLWhlaWdodDogNTJweDsgfVxuICAgICAgLmVlLWhlcm8tLWxhcmdlIGgxIHtcbiAgICAgICAgZm9udC1zaXplOiA1MHB4O1xuICAgICAgICBsaW5lLWhlaWdodDogNjBweDsgfSB9XG4gIEBtZWRpYSAobWF4LXdpZHRoOiA0ODBweCkge1xuICAgIC5lZS1oZXJvIGgxIHtcbiAgICAgIGZvbnQtc2l6ZTogMzZweDtcbiAgICAgIGxpbmUtaGVpZ2h0OiA0NHB4O1xuICAgICAgbWFyZ2luLWJvdHRvbTogNnB4OyB9XG4gICAgLmVlLWhlcm8tLWxhcmdlIGgxIHtcbiAgICAgIGZvbnQtc2l6ZTogNDJweDtcbiAgICAgIGxpbmUtaGVpZ2h0OiA1MnB4OyB9XG4gICAgLmVlLWhlcm8gLmJ0biB7XG4gICAgICBtYXJnaW4tdG9wOiA4cHg7IH0gfVxuXG4uZWUtbWFpbiB7XG4gIG1hcmdpbi10b3A6IDA7IH1cbiAgLmVlLW1haW4gc2VjdGlvbiB7XG4gICAgbWFyZ2luLWJvdHRvbTogMjAwcHg7IH1cbiAgLmVlLW1haW4gLmxlZnQsXG4gIC5lZS1tYWluIC5yaWdodCxcbiAgLmVlLW1haW4gLmNlbnRlciB7XG4gICAgZGlzcGxheTogZmxleDsgfVxuICAgIC5lZS1tYWluIC5sZWZ0OjpiZWZvcmUsIC5lZS1tYWluIC5sZWZ0OjphZnRlcixcbiAgICAuZWUtbWFpbiAucmlnaHQ6OmJlZm9yZSxcbiAgICAuZWUtbWFpbiAucmlnaHQ6OmFmdGVyLFxuICAgIC5lZS1tYWluIC5jZW50ZXI6OmJlZm9yZSxcbiAgICAuZWUtbWFpbiAuY2VudGVyOjphZnRlciB7XG4gICAgICBkaXNwbGF5OiBub25lOyB9XG4gIC5lZS1tYWluIC5sZWZ0IC5jb250ZW50LFxuICAuZWUtbWFpbiAucmlnaHQgLmNvbnRlbnQge1xuICAgIG1heC13aWR0aDogNDgwcHg7IH1cbiAgICBAbWVkaWEgKG1heC13aWR0aDogNzY3cHgpIHtcbiAgICAgIC5lZS1tYWluIC5sZWZ0IC5jb250ZW50LFxuICAgICAgLmVlLW1haW4gLnJpZ2h0IC5jb250ZW50IHtcbiAgICAgICAgbWF4LXdpZHRoOiAxMDAlO1xuICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7IH1cbiAgICAgICAgLmVlLW1haW4gLmxlZnQgLmNvbnRlbnQgbGksXG4gICAgICAgIC5lZS1tYWluIC5yaWdodCAuY29udGVudCBsaSB7XG4gICAgICAgICAgdGV4dC1hbGlnbjogbGVmdDsgfSB9XG4gIC5lZS1tYWluIC5sZWZ0IHtcbiAgICBmbGV4LWRpcmVjdGlvbjogcm93OyB9XG4gICAgLmVlLW1haW4gLmxlZnQgLmdyYXBoaWNzIHtcbiAgICAgIG1hcmdpbi1sZWZ0OiBhdXRvOyB9XG4gIC5lZS1tYWluIC5yaWdodCB7XG4gICAgZmxleC1kaXJlY3Rpb246IHJvdy1yZXZlcnNlO1xuICAgIG1hcmdpbi1sZWZ0OiBhdXRvOyB9XG4gICAgLmVlLW1haW4gLnJpZ2h0IC5ncmFwaGljcyB7XG4gICAgICBtYXJnaW4tcmlnaHQ6IGF1dG87IH1cbiAgLmVlLW1haW4gLmNlbnRlciB7XG4gICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjsgfVxuICAgIC5lZS1tYWluIC5jZW50ZXIgLmNvbnRlbnQge1xuICAgICAgd2lkdGg6IDg5NHB4O1xuICAgICAgbWF4LXdpZHRoOiAxMDAlOyB9XG4gIC5lZS1tYWluIC5mdWxsIC5jb250ZW50IHtcbiAgICBtYXgtd2lkdGg6IDU2OHB4OyB9XG4gIEBtZWRpYSAobWF4LXdpZHRoOiA3NjdweCkge1xuICAgIC5lZS1tYWluIC5yaWdodCxcbiAgICAuZWUtbWFpbiAubGVmdCB7XG4gICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uLXJldmVyc2U7XG4gICAgICBhbGlnbi1pdGVtczogY2VudGVyOyB9XG4gICAgICAuZWUtbWFpbiAucmlnaHQgLmdyYXBoaWNzLFxuICAgICAgLmVlLW1haW4gLmxlZnQgLmdyYXBoaWNzIHtcbiAgICAgICAgbWFyZ2luLWJvdHRvbTogMjRweDtcbiAgICAgICAgbWFyZ2luLWxlZnQ6IDA7XG4gICAgICAgIG1hcmdpbi1yaWdodDogMDsgfVxuICAgIC5lZS1tYWluIHNlY3Rpb24ge1xuICAgICAgbWFyZ2luLWJvdHRvbTogMTAwcHg7IH0gfVxuICAuZWUtbWFpbiAuZ3JhcGhpY3Mge1xuICAgIGp1c3RpZnktY29udGVudDogZmxleC1lbmQ7IH1cbiAgICAuZWUtbWFpbiAuZ3JhcGhpY3MgaW1nIHtcbiAgICAgIHdpZHRoOiAxMDAlOyB9XG4gIC5lZS1tYWluIGgyIHtcbiAgICBmb250LXNpemU6IDQ0cHg7XG4gICAgbGluZS1oZWlnaHQ6IDUxcHg7XG4gICAgbGV0dGVyLXNwYWNpbmc6IC0wLjAzZW07IH1cbiAgICAuZWUtbWFpbiBoMjpmaXJzdC1jaGlsZCB7XG4gICAgICBtYXJnaW4tdG9wOiAwOyB9XG4gIC5lZS1tYWluIC5lZS1zZWN0aW9uX190aXRsZSB7XG4gICAgZm9udC1mYW1pbHk6IFwiUm9ib3RvIE1vbm9cIiwgTWVubG8sIE1vbmFjbywgQ29uc29sYXMsIFwiQ291cmllciBOZXdcIiwgbW9ub3NwYWNlO1xuICAgIGZvbnQtc3R5bGU6IG5vcm1hbDtcbiAgICBmb250LXdlaWdodDogYm9sZDtcbiAgICBmb250LXNpemU6IDEycHg7XG4gICAgbGluZS1oZWlnaHQ6IDIzcHg7XG4gICAgbGV0dGVyLXNwYWNpbmc6IDAuMTRlbTtcbiAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xuICAgIGNvbG9yOiAjNUI3MDhCO1xuICAgIG1hcmdpbi10b3A6IDA7IH1cbiAgLmVlLW1haW4gLmVlLXNlY3Rpb25fX2N0YSB7XG4gICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgIGZvbnQtc2l6ZTogMThweDtcbiAgICBmb250LXdlaWdodDogNTAwO1xuICAgIG1hcmdpbi10b3A6IDE2cHg7IH1cbiAgLmVlLW1haW4gcCB7XG4gICAgZm9udC1zaXplOiAyMHB4O1xuICAgIGxpbmUtaGVpZ2h0OiAzMXB4O1xuICAgIGxldHRlci1zcGFjaW5nOiAtMC4wMmVtO1xuICAgIGNvbG9yOiAjNUI3MDhCO1xuICAgIG1hcmdpbi10b3A6IDE4cHg7IH1cbiAgICAuZWUtbWFpbiBwLnNtIHtcbiAgICAgIGZvbnQtc2l6ZTogMTZweDtcbiAgICAgIGxpbmUtaGVpZ2h0OiAyOXB4O1xuICAgICAgbGV0dGVyLXNwYWNpbmc6IC0wLjAxZW07IH1cbiAgLmVlLW1haW4gdWw6bm90KC5mcmFtZXdvcmtzKSB7XG4gICAgbWFyZ2luLXRvcDogNTRweDsgfVxuICAuZWUtbWFpbiAuY29udGVudCB1bCB7XG4gICAgcGFkZGluZy1sZWZ0OiAwOyB9XG4gIC5lZS1tYWluIC5jb250ZW50IGxpIHtcbiAgICBmb250LXNpemU6IDE2cHg7XG4gICAgbGluZS1oZWlnaHQ6IDIzcHg7XG4gICAgbGV0dGVyLXNwYWNpbmc6IC0wLjAyZW07XG4gICAgY29sb3I6ICMxQTIzMkY7XG4gICAgbWFyZ2luLWJvdHRvbTogNDBweDtcbiAgICBwYWRkaW5nLWxlZnQ6IDMwcHg7XG4gICAgbGlzdC1zdHlsZTogbm9uZTtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7IH1cbiAgICAuZWUtbWFpbiAuY29udGVudCBsaTo6YmVmb3JlIHtcbiAgICAgIGJhY2tncm91bmQtaW1hZ2U6IHVybChcIi9pbWcvZW50ZXJwcmlzZS9jaGVjay5zdmdcIik7XG4gICAgICBiYWNrZ3JvdW5kLXNpemU6IDEwMCU7XG4gICAgICBjb250ZW50OiAnJztcbiAgICAgIGhlaWdodDogMTBweDtcbiAgICAgIHdpZHRoOiAxM3B4O1xuICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgbGVmdDogMDtcbiAgICAgIHRvcDogOHB4OyB9XG4gIC5lZS1tYWluIC5mZWF0dXJlcyB7XG4gICAgZGlzcGxheTogZ3JpZDtcbiAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IDFmciAxZnIgMWZyO1xuICAgIGdyaWQtY29sdW1uLWdhcDogNjRweDtcbiAgICBncmlkLXJvdy1nYXA6IDI0cHg7XG4gICAgcGFkZGluZzogMDsgfVxuICAgIC5lZS1tYWluIC5mZWF0dXJlcyBsaSB7XG4gICAgICBsaXN0LXN0eWxlOiBub25lOyB9XG4gICAgLmVlLW1haW4gLmZlYXR1cmVzIC5pY29uIHtcbiAgICAgIG1hcmdpbi1ib3R0b206IDE2cHg7XG4gICAgICB3aWR0aDogNDhweDsgfVxuICAgIEBtZWRpYSAobWF4LXdpZHRoOiA5OTFweCkge1xuICAgICAgLmVlLW1haW4gLmZlYXR1cmVzIHtcbiAgICAgICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiAxZnIgMWZyOyB9IH1cbiAgICBAbWVkaWEgKG1heC13aWR0aDogNTAwcHgpIHtcbiAgICAgIC5lZS1tYWluIC5mZWF0dXJlcyB7XG4gICAgICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogMWZyOyB9IH1cbiAgLmVlLW1haW4gLmN0YS1jYXJkIHtcbiAgICBiYWNrZ3JvdW5kOiAjNGE4YmZjO1xuICAgIGJvcmRlci1yYWRpdXM6IDEycHg7XG4gICAgcGFkZGluZzogNzJweCA3MnB4IDYwcHg7XG4gICAgYmFja2dyb3VuZC1zaXplOiBjb3ZlcjtcbiAgICBjb2xvcjogd2hpdGU7IH1cbiAgICAuZWUtbWFpbiAuY3RhLWNhcmQgLmVlLXNlY3Rpb25fX3RpdGxlLFxuICAgIC5lZS1tYWluIC5jdGEtY2FyZCBwIHtcbiAgICAgIGNvbG9yOiAjQ0VENkUwOyB9XG5cbiNob3ctdG8ge1xuICBtYXJnaW4tYm90dG9tOiAwO1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIHBhZGRpbmctdG9wOiAxNDBweDsgfVxuICAjaG93LXRvOjpiZWZvcmUge1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICB0b3A6IDA7XG4gICAgd2lkdGg6IDEwMHZ3O1xuICAgIGJvcmRlci10b3A6IDFweCBzb2xpZCByZ2JhKDE0NiwgMTYxLCAxNzksIDAuMyk7XG4gICAgY29udGVudDogJyc7XG4gICAgZGlzcGxheTogYmxvY2s7IH1cblxuLmNhcmRzLS1yZWQtdi1ibHVlIHtcbiAgZGlzcGxheTogZmxleDtcbiAgdGV4dC1hbGlnbjogbGVmdDtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gIG1hcmdpbi10b3A6IDM4cHg7IH1cbiAgLmNhcmRzLS1yZWQtdi1ibHVlX19jYXJkIHtcbiAgICBiYWNrZ3JvdW5kOiAjN0NBQkZGO1xuICAgIGJvcmRlci1yYWRpdXM6IDhweDtcbiAgICBwYWRkaW5nOiA0MHB4IDQwcHggMzRweDtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgYWxpZ24taXRlbXM6IGZsZXgtc3RhcnQ7XG4gICAgbWFyZ2luLXJpZ2h0OiAyNHB4O1xuICAgIGZsZXg6IDAgMSA0NjBweDtcbiAgICBib3JkZXItcmFkaXVzOiA4cHg7IH1cbiAgICAuY2FyZHMtLXJlZC12LWJsdWVfX2NhcmQ6bGFzdC1jaGlsZCB7XG4gICAgICBtYXJnaW4tcmlnaHQ6IDA7IH1cbiAgICAuY2FyZHMtLXJlZC12LWJsdWVfX2NhcmQ6bnRoLWNoaWxkKDIpIHtcbiAgICAgIGJhY2tncm91bmQ6ICNGODhEOEQ7IH1cbiAgICAgIC5jYXJkcy0tcmVkLXYtYmx1ZV9fY2FyZDpudGgtY2hpbGQoMikgLmJ0biB7XG4gICAgICAgIGJhY2tncm91bmQ6IHJnYmEoMjQ0LCA4NCwgODQsIDAuNSk7IH1cbiAgLmNhcmRzLS1yZWQtdi1ibHVlIGgzIHtcbiAgICBmb250LXNpemU6IDI0cHg7XG4gICAgbGluZS1oZWlnaHQ6IG5vcm1hbDtcbiAgICBsZXR0ZXItc3BhY2luZzogLTAuMDJlbTtcbiAgICBjb2xvcjogd2hpdGU7XG4gICAgbWFyZ2luLXRvcDogMDsgfVxuICAuY2FyZHMtLXJlZC12LWJsdWUgcCB7XG4gICAgZm9udC1zaXplOiAxOHB4O1xuICAgIGxpbmUtaGVpZ2h0OiAyNnB4O1xuICAgIGxldHRlci1zcGFjaW5nOiAtMC4wMmVtO1xuICAgIGNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNyk7XG4gICAgbWFyZ2luLXRvcDogMDtcbiAgICBtYXJnaW4tYm90dG9tOiAyMnB4OyB9XG4gIC5jYXJkcy0tcmVkLXYtYmx1ZSAuYnRuIHtcbiAgICBtYXJnaW4tdG9wOiBhdXRvO1xuICAgIGZvbnQtc2l6ZTogMTRweDtcbiAgICBsaW5lLWhlaWdodDogMjJweDtcbiAgICBsZXR0ZXItc3BhY2luZzogMC4wOWVtO1xuICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XG4gICAgcGFkZGluZzogMTBweCAxNHB4O1xuICAgIGZvbnQtd2VpZ2h0OiA2MDA7XG4gICAgYm9yZGVyLXJhZGl1czogOHB4O1xuICAgIGJhY2tncm91bmQ6IHJnYmEoNTYsIDEyOCwgMjU1LCAwLjUpOyB9XG4gICAgLmNhcmRzLS1yZWQtdi1ibHVlIC5idG4gaW9uLWljb24ge1xuICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgICAgaGVpZ2h0OiAxNHB4O1xuICAgICAgd2lkdGg6IDE0cHg7XG4gICAgICB2ZXJ0aWNhbC1hbGlnbjogLTJweDsgfVxuICBAbWVkaWEgKG1heC13aWR0aDogNzY3cHgpIHtcbiAgICAuY2FyZHMtLXJlZC12LWJsdWUge1xuICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7IH1cbiAgICAgIC5jYXJkcy0tcmVkLXYtYmx1ZV9fY2FyZCB7XG4gICAgICAgIGZsZXg6IGF1dG87XG4gICAgICAgIG1hcmdpbi1yaWdodDogMDtcbiAgICAgICAgbWFyZ2luLXRvcDogMjBweDtcbiAgICAgICAgbWF4LXdpZHRoOiA0NjBweDsgfSB9XG5cbmFzaWRlIHtcbiAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KDE4MGRlZywgI0Y5RkFGQiAwJSwgI0ZGRkZGRiAxMDAlKTtcbiAgbWFyZ2luLXRvcDogLTYwcHg7XG4gIHBhZGRpbmctdG9wOiAyMDBweDtcbiAgcGFkZGluZy1ib3R0b206IDEyMHB4OyB9XG4gIGFzaWRlIHAge1xuICAgIGNvbG9yOiAjNDE0RDVDOyB9XG4gIGFzaWRlIC5jb250ZW50IHtcbiAgICBtYXgtd2lkdGg6IDQzMnB4O1xuICAgIG1hcmdpbjogMCBhdXRvO1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICBkaXNwbGF5OiBibG9jazsgfVxuXG4uZWUtZ2V0LXN0YXJ0ZWQge1xuICBtYXgtd2lkdGg6IDcwMHB4OyB9XG4gIC5lZS1nZXQtc3RhcnRlZCBoMyB7XG4gICAgY29sb3I6ICM0MTRENUM7IH1cblxuLnJlc291cmNlcyB7XG4gIHBhZGRpbmctYm90dG9tOiAxMjBweDsgfVxuICBAbWVkaWEgKG1heC13aWR0aDogNzY4cHgpIHtcbiAgICAucmVzb3VyY2VzIHtcbiAgICAgIHBhZGRpbmctYm90dG9tOiA2MHB4OyB9IH1cbiAgLnJlc291cmNlcyAuY2FyZHMge1xuICAgIGxpc3Qtc3R5bGUtdHlwZTogbm9uZTtcbiAgICBtYXJnaW46IDA7XG4gICAgcGFkZGluZzogMDtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIG1hcmdpbi1sZWZ0OiAtMjRweDtcbiAgICBtYXJnaW4tcmlnaHQ6IC0yNHB4OyB9XG4gIC5yZXNvdXJjZXMgaGdyb3VwIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcbiAgICBhbGlnbi1pdGVtczogYmFzZWxpbmU7IH1cbiAgICAucmVzb3VyY2VzIGhncm91cCBoMyB7XG4gICAgICBmb250LXdlaWdodDogNjAwO1xuICAgICAgbGluZS1oZWlnaHQ6IG5vcm1hbDtcbiAgICAgIGZvbnQtc2l6ZTogMjhweDtcbiAgICAgIGxldHRlci1zcGFjaW5nOiAtMC4wMmVtO1xuICAgICAgY29sb3I6ICMxQTIzMkY7XG4gICAgICBtYXJnaW4tYm90dG9tOiAwOyB9XG4gICAgLnJlc291cmNlcyBoZ3JvdXAgaDQge1xuICAgICAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgICAgIGZvbnQtc2l6ZTogMjRweDtcbiAgICAgIGxpbmUtaGVpZ2h0OiBub3JtYWw7XG4gICAgICBsZXR0ZXItc3BhY2luZzogLTAuMDJlbTtcbiAgICAgIGNvbG9yOiAjMUEyMzJGOyB9XG4gICAgLnJlc291cmNlcyBoZ3JvdXAgaDUge1xuICAgICAgZm9udC13ZWlnaHQ6IDcwMDtcbiAgICAgIGxpbmUtaGVpZ2h0OiAxO1xuICAgICAgZm9udC1zaXplOiAxNHB4O1xuICAgICAgbGV0dGVyLXNwYWNpbmc6IDAuMDhlbTtcbiAgICAgIGNvbG9yOiAjMzg4MEZGO1xuICAgICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTsgfVxuICAgIC5yZXNvdXJjZXMgaGdyb3VwIGlvbi1pY29uIHtcbiAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgycHgpOyB9XG4gIC5yZXNvdXJjZXMgLmNhcmRzIGxpIHtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgICBmbGV4OiAwIDAgMzMuMzMlO1xuICAgIHBhZGRpbmc6IDI0cHg7IH1cbiAgICAucmVzb3VyY2VzIC5jYXJkcyBsaSBhIHtcbiAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgd2lkdGg6IDEwMCU7IH1cbiAgICAucmVzb3VyY2VzIC5jYXJkcyBsaSAuaW1nLXdyYXBwZXIge1xuICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICAgIGJvcmRlci1yYWRpdXM6IDZweDsgfVxuICAgIC5yZXNvdXJjZXMgLmNhcmRzIGxpIGltZyB7XG4gICAgICB3aWR0aDogMTAwJTsgfVxuICAgIC5yZXNvdXJjZXMgLmNhcmRzIGxpIGg2IHtcbiAgICAgIGxpbmUtaGVpZ2h0OiAyM3B4O1xuICAgICAgZm9udC1zaXplOiAxMnB4O1xuICAgICAgbGV0dGVyLXNwYWNpbmc6IDAuMTJlbTtcbiAgICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XG4gICAgICBjb2xvcjogI0IyQkVDRDtcbiAgICAgIG1hcmdpbi1ib3R0b206IDA7XG4gICAgICBtYXJnaW4tdG9wOiAxNnB4OyB9XG4gICAgLnJlc291cmNlcyAuY2FyZHMgbGkgaDQge1xuICAgICAgZm9udC1zaXplOiAyMHB4O1xuICAgICAgbWFyZ2luLXRvcDogMTBweDtcbiAgICAgIGNvbG9yOiAjMUEyMzJGO1xuICAgICAgZm9udC13ZWlnaHQ6IDYwMDsgfVxuICAgIC5yZXNvdXJjZXMgLmNhcmRzIGxpIHAge1xuICAgICAgY29sb3I6ICM1QjcwOEI7XG4gICAgICBsaW5lLWhlaWdodDogMjJweDtcbiAgICAgIGZvbnQtc2l6ZTogMTRweDtcbiAgICAgIGxldHRlci1zcGFjaW5nOiAtMC4wMmVtOyB9XG4gIEBtZWRpYSAobWF4LXdpZHRoOiA5OTJweCkge1xuICAgIC5yZXNvdXJjZXMgLmNhcmRzIHtcbiAgICAgIG1hcmdpbi1sZWZ0OiAtMTJweDtcbiAgICAgIG1hcmdpbi1yaWdodDogLTEycHg7IH1cbiAgICAucmVzb3VyY2VzIC5jYXJkcyBsaSB7XG4gICAgICBwYWRkaW5nOiAxMnB4OyB9IH1cbiAgQG1lZGlhIChtYXgtd2lkdGg6IDc2OHB4KSB7XG4gICAgLnJlc291cmNlcyAuY2FyZHMge1xuICAgICAgZmxleC13cmFwOiB3cmFwOyB9XG4gICAgLnJlc291cmNlcyAuY2FyZHMgbGkge1xuICAgICAgZmxleDogMCAwIDUwJTsgfSB9XG4gIEBtZWRpYSAobWF4LXdpZHRoOiA0ODBweCkge1xuICAgIC5yZXNvdXJjZXMgLmNhcmRzIGxpIHtcbiAgICAgIGZsZXg6IDAgMCAxMDAlOyB9XG4gICAgLnJlc291cmNlcyBoNSB7XG4gICAgICBkaXNwbGF5OiBub25lOyB9IH1cblxuLmVlLW1haW4gLmZlYXR1cmVzIGxpIHAsXG4uZWUtbWFpbiAuY2FyZHMgbGkgcCxcbi5yZXNvdXJjZXMgLmZlYXR1cmVzIGxpIHAsXG4ucmVzb3VyY2VzIC5jYXJkcyBsaSBwIHtcbiAgZm9udC1zaXplOiAxNnB4O1xuICBsaW5lLWhlaWdodDogMjlweDtcbiAgbGV0dGVyLXNwYWNpbmc6IC0wLjAxZW07XG4gIGNvbG9yOiAjNzM4NDlBO1xuICBtYXJnaW4tdG9wOiAwOyB9XG5cbi5lZS1tYWluIC5mZWF0dXJlcyBsaSBoNCxcbi5lZS1tYWluIC5jYXJkcyBsaSBoNCxcbi5yZXNvdXJjZXMgLmZlYXR1cmVzIGxpIGg0LFxuLnJlc291cmNlcyAuY2FyZHMgbGkgaDQge1xuICBmb250LXNpemU6IDIwcHg7XG4gIGxpbmUtaGVpZ2h0OiBub3JtYWw7XG4gIGxldHRlci1zcGFjaW5nOiAtMC4wMmVtO1xuICBjb2xvcjogIzAyMDgxNDtcbiAgZm9udC13ZWlnaHQ6IDYwMDsgfVxuXG4ucmVzb3VyY2VzIC5jYXJkcyB7XG4gIG1hcmdpbi10b3A6IDAgIWltcG9ydGFudDtcbiAgdGV4dC1hbGlnbjogbGVmdDtcbiAgZmxleC13cmFwOiB3cmFwOyB9XG4gIC5yZXNvdXJjZXMgLmNhcmRzIC5pbWctd3JhcHBlciB7XG4gICAgYm9yZGVyLXJhZGl1czogNnB4OyB9XG4gICAgLnJlc291cmNlcyAuY2FyZHMgLmltZy13cmFwcGVyICsgaDQge1xuICAgICAgbWFyZ2luLXRvcDogMjRweDsgfVxuICBAbWVkaWEgKG1pbi13aWR0aDogMTIyMHB4KSB7XG4gICAgLnJlc291cmNlcyAuY2FyZHMge1xuICAgICAgbWFyZ2luLWxlZnQ6IC00MHB4O1xuICAgICAgbWFyZ2luLXJpZ2h0OiAtNDBweDsgfVxuICAgICAgLnJlc291cmNlcyAuY2FyZHMgbGkge1xuICAgICAgICBwYWRkaW5nOiA0MHB4OyB9IH1cblxuLnJlc291cmNlcyAucmVzb3VyY2VzX19jdXN0b21lci1sb2dvcyB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIG1hcmdpbjogMjZweCBhdXRvIDA7XG4gIHBhZGRpbmc6IDA7XG4gIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcbiAgbWF4LXdpZHRoOiA3ODBweDtcbiAgd2lkdGg6IDEwMCU7IH1cbiAgLnJlc291cmNlcyAucmVzb3VyY2VzX19jdXN0b21lci1sb2dvcyBsaSB7XG4gICAgYmFja2dyb3VuZDogdXJsKFwiL2ltZy9lbnRlcnByaXNlL2N1c3RvbWVyLWxvZ29zLnBuZ1wiKTtcbiAgICBiYWNrZ3JvdW5kLXNpemU6IDQyOHB4IDQ2cHg7XG4gICAgYmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdDtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgICBoZWlnaHQ6IDQ2cHg7IH1cbiAgQG1lZGlhIChtYXgtd2lkdGg6IDc2OHB4KSB7XG4gICAgLnJlc291cmNlcyAucmVzb3VyY2VzX19jdXN0b21lci1sb2dvcyB7XG4gICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgICAgIGZsZXgtd3JhcDogd3JhcDtcbiAgICAgIG1heC13aWR0aDogNDYwcHg7IH1cbiAgICAgIC5yZXNvdXJjZXMgLnJlc291cmNlc19fY3VzdG9tZXItbG9nb3MgbGkge1xuICAgICAgICBtYXJnaW46IDIwcHg7IH0gfVxuICAucmVzb3VyY2VzIC5yZXNvdXJjZXNfX2N1c3RvbWVyLWxvZ29zIC5tYXN0ZXJjYXJkIHtcbiAgICB3aWR0aDogNThweDsgfVxuICAucmVzb3VyY2VzIC5yZXNvdXJjZXNfX2N1c3RvbWVyLWxvZ29zIC5uYXRpb253aWRlIHtcbiAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtNThweCAwO1xuICAgIHdpZHRoOiAzM3B4OyB9XG4gIC5yZXNvdXJjZXMgLnJlc291cmNlc19fY3VzdG9tZXItbG9nb3MgLnVuaXFsbyB7XG4gICAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTkxcHggMDtcbiAgICB3aWR0aDogNjVweDsgfVxuICAucmVzb3VyY2VzIC5yZXNvdXJjZXNfX2N1c3RvbWVyLWxvZ29zIC5pYm0ge1xuICAgIGJhY2tncm91bmQtcG9zaXRpb246IC0xNTZweCAwO1xuICAgIHdpZHRoOiA2NHB4OyB9XG4gIC5yZXNvdXJjZXMgLnJlc291cmNlc19fY3VzdG9tZXItbG9nb3MgLmluZyB7XG4gICAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTIyMnB4IDA7XG4gICAgd2lkdGg6IDEwM3B4OyB9XG4gIC5yZXNvdXJjZXMgLnJlc291cmNlc19fY3VzdG9tZXItbG9nb3MgLnNhcCB7XG4gICAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTMyNnB4IDA7XG4gICAgd2lkdGg6IDU2cHg7IH1cbiAgLnJlc291cmNlcyAucmVzb3VyY2VzX19jdXN0b21lci1sb2dvcyAubmFzYSB7XG4gICAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTM4MHB4IDA7XG4gICAgd2lkdGg6IDUwcHg7IH1cblxuLmVlLWhlcm8gcCB7XG4gIG1heC13aWR0aDogNDU4cHg7IH1cblxuI2RpZmZlcmVuY2Uge1xuICBkaXNwbGF5OiBmbGV4O1xuICBwYWRkaW5nLXRvcDogNjBweDtcbiAgcGFkZGluZy1ib3R0b206IDY5cHg7XG4gIG1hcmdpbi10b3A6IDIwcHg7XG4gIGJvcmRlci10b3A6IDFweCBzb2xpZCAjZWVlO1xuICBib3JkZXItYm90dG9tOiAxcHggc29saWQgI2VlZTsgfVxuICAjZGlmZmVyZW5jZSAuY29udGFpbmVyIHtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7IH1cbiAgICAjZGlmZmVyZW5jZSAuY29udGFpbmVyOjpiZWZvcmUge1xuICAgICAgYmFja2dyb3VuZDogdXJsKFwiL2ltZy9lbnRlcnByaXNlL2lvbmljLWVudGVycHJpc2UtZGV2ZWxvcG1lbnQtZWJvb2sucG5nXCIpIDAgMCBuby1yZXBlYXQ7XG4gICAgICBiYWNrZ3JvdW5kLXNpemU6IDEwMCU7XG4gICAgICB3aWR0aDogNDI0cHg7XG4gICAgICBoZWlnaHQ6IDMxMHB4O1xuICAgICAgY29udGVudDogJyc7XG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICBib3R0b206IC02OXB4O1xuICAgICAgbGVmdDogNTJweDsgfVxuICAjZGlmZmVyZW5jZSBoZ3JvdXAge1xuICAgIG1heC13aWR0aDogNTUwcHg7XG4gICAgbWFyZ2luLXJpZ2h0OiA1MHB4O1xuICAgIG1hcmdpbi1sZWZ0OiBhdXRvOyB9XG4gICNkaWZmZXJlbmNlIGg1IHtcbiAgICBmb250LXNpemU6IDE4cHg7XG4gICAgbWFyZ2luLWJvdHRvbTogMTFweDtcbiAgICBjb2xvcjogIzFmMzI1NjsgfVxuICAjZGlmZmVyZW5jZSBwIHtcbiAgICBmb250LXNpemU6IDE2cHg7XG4gICAgZm9udC13ZWlnaHQ6IDQwMDtcbiAgICBsaW5lLWhlaWdodDogMS42ZW07XG4gICAgbGV0dGVyLXNwYWNpbmc6IC0uMDFlbTtcbiAgICBjb2xvcjogIzZjODFhNjsgfVxuICAjZGlmZmVyZW5jZSAuYnRuIHtcbiAgICBwYWRkaW5nOiAxMnB4IDEzcHggMTBweDtcbiAgICBmb250LXNpemU6IDE0cHg7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogIzY2OGJmZjsgfVxuICBAbWVkaWEgKG1heC13aWR0aDogMTIxOXB4KSB7XG4gICAgI2RpZmZlcmVuY2UgLmNvbnRhaW5lcjo6YmVmb3JlIHtcbiAgICAgIGxlZnQ6IDA7IH1cbiAgICAjZGlmZmVyZW5jZSBoZ3JvdXAge1xuICAgICAgbWF4LXdpZHRoOiA1MDBweDsgfSB9XG4gIEBtZWRpYSAobWF4LXdpZHRoOiA5OTFweCkge1xuICAgICNkaWZmZXJlbmNlIGhncm91cCB7XG4gICAgICBtYXJnaW46IDAgYXV0bztcbiAgICAgIG1heC13aWR0aDogMTAwJTsgfVxuICAgICNkaWZmZXJlbmNlIC5jb250YWluZXI6OmJlZm9yZSB7XG4gICAgICB3aWR0aDogMjEycHg7XG4gICAgICBoZWlnaHQ6IDE1NXB4O1xuICAgICAgcmlnaHQ6IDA7XG4gICAgICBsZWZ0OiBhdXRvOyB9IH1cbiAgQG1lZGlhIChtYXgtd2lkdGg6IDM3MHB4KSB7XG4gICAgI2RpZmZlcmVuY2UgLmNvbnRhaW5lcjo6YmVmb3JlIHtcbiAgICAgIGRpc3BsYXk6IG5vbmU7IH0gfVxuXG4jYmVzdC13YXkgaDIge1xuICBtYXgtd2lkdGg6IDMyMHB4OyB9XG5cbiNiZXN0LXdheSAuZ3JhcGhpY3Mge1xuICB3aWR0aDogNjQwcHg7XG4gIG1pbi1oZWlnaHQ6IDUzMnB4O1xuICBtYXJnaW4tbGVmdDogYXV0bzsgfVxuICAjYmVzdC13YXkgLmdyYXBoaWNzIGltZyB7XG4gICAgd2lkdGg6IDk0NXB4OyB9XG4gIEBtZWRpYSAobWF4LXdpZHRoOiA5OTFweCkge1xuICAgICNiZXN0LXdheSAuZ3JhcGhpY3Mge1xuICAgICAgd2lkdGg6IGNhbGMoMTAwJSAtIDMwMHB4KTsgfSB9XG4gIEBtZWRpYSAobWF4LXdpZHRoOiA3NjdweCkge1xuICAgICNiZXN0LXdheSAuZ3JhcGhpY3Mge1xuICAgICAgd2lkdGg6IDEwMCU7IH0gfVxuXG4jZnJpZW5kbHkgLmdyYXBoaWNzIHtcbiAgd2lkdGg6IDU2MHB4O1xuICBtYXJnaW4tcmlnaHQ6IGF1dG87IH1cbiAgI2ZyaWVuZGx5IC5ncmFwaGljcyBpbWcge1xuICAgIG1heC13aWR0aDogNTYwcHg7IH1cbiAgQG1lZGlhIChtYXgtd2lkdGg6IDEyMTlweCkge1xuICAgICNmcmllbmRseSAuZ3JhcGhpY3Mge1xuICAgICAgd2lkdGg6IGNhbGMoMTAwJSAtIDMwMHB4KTsgfVxuICAgICAgI2ZyaWVuZGx5IC5ncmFwaGljcyBpbWcge1xuICAgICAgICBtYXgtd2lkdGg6IGNhbGMoMTAwJSAtIDIwcHgpOyB9IH1cbiAgQG1lZGlhIChtYXgtd2lkdGg6IDEyMTlweCkge1xuICAgICNmcmllbmRseSAuZ3JhcGhpY3Mge1xuICAgICAgd2lkdGg6IDM3M3B4O1xuICAgICAgbWF4LXdpZHRoOiAxMDAlO1xuICAgICAgbWFyZ2luLWxlZnQ6IGF1dG87XG4gICAgICBtYXJnaW4tcmlnaHQ6IGF1dG87IH1cbiAgICAgICNmcmllbmRseSAuZ3JhcGhpY3MgaW1nIHtcbiAgICAgICAgbWF4LXdpZHRoOiAxMDAlOyB9IH1cblxuI3N1cGVyY2hhcmdlZCBmaWd1cmUge1xuICB3aWR0aDogMTAwJTtcbiAgbWF4LXdpZHRoOiA4MDBweDsgfVxuXG4jc3VwZXJjaGFyZ2VkIGZpZ2NhcHRpb24ge1xuICBmb250LXNpemU6IDEzcHg7XG4gIGxpbmUtaGVpZ2h0OiAyM3B4O1xuICBsZXR0ZXItc3BhY2luZzogLTAuMDFlbTtcbiAgY29sb3I6ICM3Mzg0OUE7IH1cblxuI3N1cGVyY2hhcmdlZCB1bCB7XG4gIHBhZGRpbmc6IDA7XG4gIHdpZHRoOiAxMDAlO1xuICBkaXNwbGF5OiBmbGV4O1xuICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgbWFyZ2luLWJvdHRvbTogMTZweDtcbiAgZmxleC13cmFwOiB3cmFwOyB9XG4gIEBtZWRpYSAobWF4LXdpZHRoOiAxMjE5cHgpIHtcbiAgICAjc3VwZXJjaGFyZ2VkIHVsIHtcbiAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYXJvdW5kOyB9IH1cbiAgI3N1cGVyY2hhcmdlZCB1bDo6YWZ0ZXIge1xuICAgIGNvbnRlbnQ6ICcnO1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICBib3R0b206IDA7XG4gICAgbGVmdDogMDtcbiAgICByaWdodDogMDtcbiAgICBib3JkZXI6IDJweCBzb2xpZCAjRTNFREZGO1xuICAgIGJvcmRlci10b3A6IG5vbmU7XG4gICAgYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czogOHB4O1xuICAgIGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiA4cHg7XG4gICAgaGVpZ2h0OiA5cHg7IH1cblxuI3N1cGVyY2hhcmdlZCBsaSB7XG4gIGxpc3Qtc3R5bGU6IG5vbmU7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgZm9udC1mYW1pbHk6IFwiUm9ib3RvIE1vbm9cIiwgTWVubG8sIE1vbmFjbywgQ29uc29sYXMsIFwiQ291cmllciBOZXdcIiwgbW9ub3NwYWNlO1xuICBmb250LXN0eWxlOiBub3JtYWw7XG4gIGZvbnQtd2VpZ2h0OiBib2xkO1xuICBmb250LXNpemU6IDEycHg7XG4gIHBhZGRpbmctYm90dG9tOiA1MHB4O1xuICBsaW5lLWhlaWdodDogbm9ybWFsO1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIGxldHRlci1zcGFjaW5nOiAwLjE0ZW07XG4gIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XG4gIGNvbG9yOiAjNUI3MDhCOyB9XG5cbiNzdXBlcmNoYXJnZWQgLmljb24ge1xuICBiYWNrZ3JvdW5kOiAjRjBGNkZGO1xuICBib3JkZXItcmFkaXVzOiA1MCU7XG4gIGhlaWdodDogMTcycHg7XG4gIHdpZHRoOiAxNzJweDtcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIG1hcmdpbi1ib3R0b206IDExcHg7IH1cbiAgI3N1cGVyY2hhcmdlZCAuaWNvbiBpbWcge1xuICAgIG1hcmdpbjogMCBhdXRvOyB9XG5cbiNzdXBlcmNoYXJnZWQgY2FwdGlvbiB7XG4gIGZvbnQtc2l6ZTogMTNweDtcbiAgbGluZS1oZWlnaHQ6IDIzcHg7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgbGV0dGVyLXNwYWNpbmc6IC0wLjAxZW07XG4gIGNvbG9yOiAjNzM4NDlBOyB9XG4iXX0= */\n"
  },
  {
    "path": "content/css/pages/enterprise/index.css",
    "content": ".ee-hero {\n  max-width: 640px;\n  padding: 130px 0 80px; }\n  .ee-hero::before, .ee-hero::after {\n    display: none; }\n  .ee-hero h1 {\n    font-size: 62px;\n    line-height: 69px;\n    max-width: 930px;\n    letter-spacing: -0.03em;\n    color: #020814;\n    margin-top: 0;\n    margin-bottom: 16px; }\n  .ee-hero h4 {\n    font-family: \"Roboto Mono\", Menlo, Monaco, Consolas, \"Courier New\", monospace;\n    font-weight: bold;\n    font-size: 13px;\n    line-height: 26px;\n    letter-spacing: 0.14em;\n    text-transform: uppercase;\n    color: #92A1B3;\n    margin-bottom: 29px; }\n  .ee-hero p {\n    font-family: \"Eina\", \"Helvetica Neue\", Helvetica, sans-serif;\n    font-size: 24px;\n    font-weight: 400;\n    line-height: 36px;\n    letter-spacing: -0.04em;\n    color: rgba(39, 50, 63, 0.8); }\n  .ee-hero .btn {\n    font-size: 16px;\n    margin-top: 16px;\n    line-height: normal;\n    letter-spacing: 0.08em;\n    color: white;\n    text-transform: uppercase;\n    font-weight: 600;\n    background: #3880FF;\n    box-shadow: 0px 2px 4px rgba(2, 8, 20, 0.1), 0px 1px 2px rgba(2, 8, 20, 0.08);\n    border-radius: 210px;\n    min-width: 200px; }\n    .ee-hero .btn::after {\n      background-image: url('data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"white\" viewBox=\"0 0 512 512\"><path d=\"M85 277.375h259.704L225.002 397.077 256 427l171-171L256 85l-29.922 29.924 118.626 119.701H85v42.75z\"/></svg>');\n      background-size: 100%;\n      content: '';\n      height: 20px;\n      width: 20px;\n      float: right;\n      display: block; }\n  .ee-hero--secondary h1 {\n    font-size: 52px;\n    line-height: 62px; }\n  .ee-hero--wide {\n    max-width: 960px; }\n  .ee-hero--centered {\n    display: -ms-flexbox;\n    display: flex;\n    -ms-flex-direction: column;\n        flex-direction: column;\n    -ms-flex-pack: center;\n        justify-content: center;\n    -ms-flex-align: center;\n        align-items: center;\n    text-align: center;\n    margin-left: auto;\n    margin-right: auto; }\n\nmain {\n  margin-top: 128px; }\n  main section {\n    margin-bottom: 200px; }\n  main .left,\n  main .right,\n  main .center {\n    display: -ms-flexbox;\n    display: flex; }\n    main .left::before, main .left::after,\n    main .right::before,\n    main .right::after,\n    main .center::before,\n    main .center::after {\n      display: none; }\n  main .left .content,\n  main .right .content {\n    max-width: 480px; }\n    @media (max-width: 767px) {\n      main .left .content,\n      main .right .content {\n        max-width: 100%;\n        text-align: center; } }\n  main .left {\n    -ms-flex-direction: row;\n        flex-direction: row; }\n    main .left .graphics {\n      margin-left: auto; }\n  main .right {\n    -ms-flex-direction: row-reverse;\n        flex-direction: row-reverse;\n    margin-left: auto; }\n    main .right .graphics {\n      margin-right: auto; }\n  main .center {\n    -ms-flex-direction: column;\n        flex-direction: column;\n    -ms-flex-align: center;\n        align-items: center;\n    text-align: center; }\n    main .center .content {\n      width: 800px;\n      max-width: 100%; }\n  main .full .content {\n    max-width: 568px; }\n  @media (max-width: 767px) {\n    main .right,\n    main .left {\n      -ms-flex-direction: column-reverse;\n          flex-direction: column-reverse; }\n      main .right .graphics,\n      main .left .graphics {\n        margin-bottom: 24px; }\n    main section {\n      margin-bottom: 100px; } }\n  main .graphics {\n    -ms-flex-pack: end;\n        justify-content: flex-end; }\n    main .graphics img {\n      width: 100%; }\n  main h2 {\n    font-size: 44px;\n    line-height: 51px;\n    letter-spacing: -0.03em; }\n    main h2:first-child {\n      margin-top: 0; }\n  main p {\n    font-size: 20px;\n    line-height: 31px;\n    letter-spacing: -0.02em;\n    color: #5B708B;\n    margin-bottom: 54px; }\n  main .content li {\n    font-size: 16px;\n    line-height: 23px;\n    letter-spacing: -0.02em;\n    color: #1A232F;\n    margin-bottom: 40px;\n    padding-left: 30px;\n    list-style: none;\n    position: relative; }\n    main .content li::before {\n      background-image: url(\"/img/enterprise/check.svg\");\n      background-size: 100%;\n      content: '';\n      height: 10px;\n      width: 13px;\n      position: absolute;\n      left: 0;\n      top: 8px; }\n  main .features {\n    display: -ms-grid;\n    display: grid;\n    -ms-grid-columns: 1fr 1fr 1fr;\n        grid-template-columns: 1fr 1fr 1fr;\n    grid-column-gap: 64px;\n    grid-row-gap: 10px;\n    padding: 0; }\n    main .features li {\n      list-style: none; }\n    main .features .icon {\n      margin-bottom: 24px;\n      width: 48px; }\n    @media (max-width: 991px) {\n      main .features {\n        -ms-grid-columns: 1fr 1fr;\n            grid-template-columns: 1fr 1fr; } }\n    @media (max-width: 500px) {\n      main .features {\n        -ms-grid-columns: 1fr;\n            grid-template-columns: 1fr; } }\n\n.resources {\n  padding-bottom: 120px; }\n  @media (max-width: 768px) {\n    .resources {\n      padding-bottom: 60px; } }\n  .resources .cards {\n    list-style-type: none;\n    margin: 0;\n    padding: 0;\n    display: -ms-flexbox;\n    display: flex;\n    margin-left: -24px;\n    margin-right: -24px; }\n  .resources hgroup {\n    display: -ms-flexbox;\n    display: flex;\n    -ms-flex-pack: justify;\n        justify-content: space-between;\n    -ms-flex-align: baseline;\n        align-items: baseline; }\n    .resources hgroup h3 {\n      font-weight: 600;\n      line-height: normal;\n      font-size: 28px;\n      letter-spacing: -0.02em;\n      color: #1A232F;\n      margin-bottom: 0; }\n    .resources hgroup h5 {\n      font-weight: 700;\n      line-height: 1;\n      font-size: 14px;\n      letter-spacing: 0.08em;\n      color: #3880FF;\n      text-transform: uppercase; }\n    .resources hgroup ion-icon {\n      -webkit-transform: translateY(2px);\n              transform: translateY(2px); }\n  .resources .cards li {\n    display: block;\n    -ms-flex: 0 0 33.33%;\n        flex: 0 0 33.33%;\n    padding: 24px; }\n    .resources .cards li a {\n      display: block;\n      width: 100%; }\n    .resources .cards li .img-wrapper {\n      overflow: hidden;\n      border-radius: 6px; }\n    .resources .cards li img {\n      width: 100%; }\n    .resources .cards li h6 {\n      line-height: 23px;\n      font-size: 12px;\n      letter-spacing: 0.12em;\n      text-transform: uppercase;\n      color: #B2BECD;\n      margin-bottom: 0;\n      margin-top: 16px; }\n    .resources .cards li h4 {\n      font-size: 20px;\n      margin-top: 10px;\n      color: #1A232F;\n      font-weight: 600; }\n    .resources .cards li p {\n      color: #5B708B;\n      line-height: 22px;\n      font-size: 14px;\n      letter-spacing: -0.02em; }\n  @media (max-width: 992px) {\n    .resources .cards {\n      margin-left: -12px;\n      margin-right: -12px; }\n    .resources .cards li {\n      padding: 12px; } }\n  @media (max-width: 768px) {\n    .resources .cards {\n      -ms-flex-wrap: wrap;\n          flex-wrap: wrap; }\n    .resources .cards li {\n      -ms-flex: 0 0 50%;\n          flex: 0 0 50%; } }\n  @media (max-width: 480px) {\n    .resources .cards li {\n      -ms-flex: 0 0 100%;\n          flex: 0 0 100%; }\n    .resources h5 {\n      display: none; } }\n\n.resources .cards {\n  text-align: left; }\n  .resources .cards li p {\n    font-size: 16px;\n    line-height: 29px;\n    letter-spacing: -0.01em;\n    color: #73849A; }\n  .resources .cards .img-wrapper {\n    border-radius: 6px; }\n    .resources .cards .img-wrapper + h4 {\n      margin-top: 24px; }\n  @media (min-width: 1220px) {\n    .resources .cards {\n      margin-left: -40px;\n      margin-right: -40px; }\n      .resources .cards li {\n        padding: 40px; } }\n\n.resources img {\n  max-width: 100%; }\n\n#best-way .graphics {\n  width: 640px;\n  min-height: 532px;\n  margin-left: auto; }\n  #best-way .graphics img {\n    width: 945px; }\n  @media (max-width: 991px) {\n    #best-way .graphics {\n      width: calc(100% - 300px); } }\n  @media (max-width: 767px) {\n    #best-way .graphics {\n      width: 100%; } }\n\n#friendly .graphics {\n  width: 560px;\n  margin-right: auto; }\n  #friendly .graphics img {\n    max-width: 560px; }\n  @media (max-width: 1219px) {\n    #friendly .graphics {\n      width: calc(100% - 300px); }\n      #friendly .graphics img {\n        max-width: calc(100% - 20px); } }\n  @media (max-width: 1219px) {\n    #friendly .graphics {\n      width: 373px;\n      max-width: 100%;\n      margin-left: auto;\n      margin-right: auto; }\n      #friendly .graphics img {\n        max-width: 100%; } }\n\n#supercharged figure {\n  width: 100%;\n  max-width: 800px; }\n\n#supercharged figcaption {\n  font-size: 13px;\n  line-height: 23px;\n  letter-spacing: -0.01em;\n  color: #73849A; }\n\n#supercharged ul {\n  padding: 0;\n  width: 100%;\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-pack: justify;\n      justify-content: space-between;\n  position: relative;\n  margin-bottom: 16px;\n  -ms-flex-wrap: wrap;\n      flex-wrap: wrap; }\n  @media (max-width: 1219px) {\n    #supercharged ul {\n      -ms-flex-pack: distribute;\n          justify-content: space-around; } }\n  #supercharged ul::after {\n    content: '';\n    position: absolute;\n    bottom: 0;\n    left: 0;\n    right: 0;\n    border: 2px solid #E3EDFF;\n    border-top: none;\n    border-bottom-left-radius: 8px;\n    border-bottom-right-radius: 8px;\n    height: 9px; }\n\n#supercharged li {\n  list-style: none;\n  display: inline-block;\n  font-family: \"Roboto Mono\", Menlo, Monaco, Consolas, \"Courier New\", monospace;\n  font-style: normal;\n  font-weight: bold;\n  font-size: 12px;\n  padding-bottom: 50px;\n  line-height: normal;\n  text-align: center;\n  letter-spacing: 0.14em;\n  text-transform: uppercase;\n  color: #5B708B; }\n\n#supercharged .icon {\n  background: #F0F6FF;\n  border-radius: 50%;\n  height: 172px;\n  width: 172px;\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-direction: column;\n      flex-direction: column;\n  -ms-flex-pack: center;\n      justify-content: center;\n  -ms-flex-align: center;\n      align-items: center;\n  margin-bottom: 11px; }\n  #supercharged .icon img {\n    margin: 0 auto; }\n\n#supercharged caption {\n  font-size: 13px;\n  line-height: 23px;\n  text-align: center;\n  letter-spacing: -0.01em;\n  color: #73849A; }\n\n/*# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImluZGV4LmNzcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtFQUNFLGlCQUFpQjtFQUNqQixzQkFBc0IsRUFBRTtFQUN4QjtJQUNFLGNBQWMsRUFBRTtFQUNsQjtJQUNFLGdCQUFnQjtJQUNoQixrQkFBa0I7SUFDbEIsaUJBQWlCO0lBQ2pCLHdCQUF3QjtJQUN4QixlQUFlO0lBQ2YsY0FBYztJQUNkLG9CQUFvQixFQUFFO0VBQ3hCO0lBQ0UsOEVBQThFO0lBQzlFLGtCQUFrQjtJQUNsQixnQkFBZ0I7SUFDaEIsa0JBQWtCO0lBQ2xCLHVCQUF1QjtJQUN2QiwwQkFBMEI7SUFDMUIsZUFBZTtJQUNmLG9CQUFvQixFQUFFO0VBQ3hCO0lBQ0UsNkRBQTZEO0lBQzdELGdCQUFnQjtJQUNoQixpQkFBaUI7SUFDakIsa0JBQWtCO0lBQ2xCLHdCQUF3QjtJQUN4Qiw2QkFBNkIsRUFBRTtFQUNqQztJQUNFLGdCQUFnQjtJQUNoQixpQkFBaUI7SUFDakIsb0JBQW9CO0lBQ3BCLHVCQUF1QjtJQUN2QixhQUFhO0lBQ2IsMEJBQTBCO0lBQzFCLGlCQUFpQjtJQUNqQixvQkFBb0I7SUFDcEIsOEVBQThFO0lBQzlFLHFCQUFxQjtJQUNyQixpQkFBaUIsRUFBRTtJQUNuQjtNQUNFLGtQQUFrUDtNQUNsUCxzQkFBc0I7TUFDdEIsWUFBWTtNQUNaLGFBQWE7TUFDYixZQUFZO01BQ1osYUFBYTtNQUNiLGVBQWUsRUFBRTtFQUNyQjtJQUNFLGdCQUFnQjtJQUNoQixrQkFBa0IsRUFBRTtFQUN0QjtJQUNFLGlCQUFpQixFQUFFO0VBQ3JCO0lBQ0UscUJBQWM7SUFBZCxjQUFjO0lBQ2QsMkJBQXVCO1FBQXZCLHVCQUF1QjtJQUN2QixzQkFBd0I7UUFBeEIsd0JBQXdCO0lBQ3hCLHVCQUFvQjtRQUFwQixvQkFBb0I7SUFDcEIsbUJBQW1CO0lBQ25CLGtCQUFrQjtJQUNsQixtQkFBbUIsRUFBRTs7QUFFekI7RUFDRSxrQkFBa0IsRUFBRTtFQUNwQjtJQUNFLHFCQUFxQixFQUFFO0VBQ3pCOzs7SUFHRSxxQkFBYztJQUFkLGNBQWMsRUFBRTtJQUNoQjs7Ozs7TUFLRSxjQUFjLEVBQUU7RUFDcEI7O0lBRUUsaUJBQWlCLEVBQUU7SUFDbkI7TUFDRTs7UUFFRSxnQkFBZ0I7UUFDaEIsbUJBQW1CLEVBQUUsRUFBRTtFQUM3QjtJQUNFLHdCQUFvQjtRQUFwQixvQkFBb0IsRUFBRTtJQUN0QjtNQUNFLGtCQUFrQixFQUFFO0VBQ3hCO0lBQ0UsZ0NBQTRCO1FBQTVCLDRCQUE0QjtJQUM1QixrQkFBa0IsRUFBRTtJQUNwQjtNQUNFLG1CQUFtQixFQUFFO0VBQ3pCO0lBQ0UsMkJBQXVCO1FBQXZCLHVCQUF1QjtJQUN2Qix1QkFBb0I7UUFBcEIsb0JBQW9CO0lBQ3BCLG1CQUFtQixFQUFFO0lBQ3JCO01BQ0UsYUFBYTtNQUNiLGdCQUFnQixFQUFFO0VBQ3RCO0lBQ0UsaUJBQWlCLEVBQUU7RUFDckI7SUFDRTs7TUFFRSxtQ0FBK0I7VUFBL0IsK0JBQStCLEVBQUU7TUFDakM7O1FBRUUsb0JBQW9CLEVBQUU7SUFDMUI7TUFDRSxxQkFBcUIsRUFBRSxFQUFFO0VBQzdCO0lBQ0UsbUJBQTBCO1FBQTFCLDBCQUEwQixFQUFFO0lBQzVCO01BQ0UsWUFBWSxFQUFFO0VBQ2xCO0lBQ0UsZ0JBQWdCO0lBQ2hCLGtCQUFrQjtJQUNsQix3QkFBd0IsRUFBRTtJQUMxQjtNQUNFLGNBQWMsRUFBRTtFQUNwQjtJQUNFLGdCQUFnQjtJQUNoQixrQkFBa0I7SUFDbEIsd0JBQXdCO0lBQ3hCLGVBQWU7SUFDZixvQkFBb0IsRUFBRTtFQUN4QjtJQUNFLGdCQUFnQjtJQUNoQixrQkFBa0I7SUFDbEIsd0JBQXdCO0lBQ3hCLGVBQWU7SUFDZixvQkFBb0I7SUFDcEIsbUJBQW1CO0lBQ25CLGlCQUFpQjtJQUNqQixtQkFBbUIsRUFBRTtJQUNyQjtNQUNFLG1EQUFtRDtNQUNuRCxzQkFBc0I7TUFDdEIsWUFBWTtNQUNaLGFBQWE7TUFDYixZQUFZO01BQ1osbUJBQW1CO01BQ25CLFFBQVE7TUFDUixTQUFTLEVBQUU7RUFDZjtJQUNFLGtCQUFjO0lBQWQsY0FBYztJQUNkLDhCQUFtQztRQUFuQyxtQ0FBbUM7SUFDbkMsc0JBQXNCO0lBQ3RCLG1CQUFtQjtJQUNuQixXQUFXLEVBQUU7SUFDYjtNQUNFLGlCQUFpQixFQUFFO0lBQ3JCO01BQ0Usb0JBQW9CO01BQ3BCLFlBQVksRUFBRTtJQUNoQjtNQUNFO1FBQ0UsMEJBQStCO1lBQS9CLCtCQUErQixFQUFFLEVBQUU7SUFDdkM7TUFDRTtRQUNFLHNCQUEyQjtZQUEzQiwyQkFBMkIsRUFBRSxFQUFFOztBQUV2QztFQUNFLHNCQUFzQixFQUFFO0VBQ3hCO0lBQ0U7TUFDRSxxQkFBcUIsRUFBRSxFQUFFO0VBQzdCO0lBQ0Usc0JBQXNCO0lBQ3RCLFVBQVU7SUFDVixXQUFXO0lBQ1gscUJBQWM7SUFBZCxjQUFjO0lBQ2QsbUJBQW1CO0lBQ25CLG9CQUFvQixFQUFFO0VBQ3hCO0lBQ0UscUJBQWM7SUFBZCxjQUFjO0lBQ2QsdUJBQStCO1FBQS9CLCtCQUErQjtJQUMvQix5QkFBc0I7UUFBdEIsc0JBQXNCLEVBQUU7SUFDeEI7TUFDRSxpQkFBaUI7TUFDakIsb0JBQW9CO01BQ3BCLGdCQUFnQjtNQUNoQix3QkFBd0I7TUFDeEIsZUFBZTtNQUNmLGlCQUFpQixFQUFFO0lBQ3JCO01BQ0UsaUJBQWlCO01BQ2pCLGVBQWU7TUFDZixnQkFBZ0I7TUFDaEIsdUJBQXVCO01BQ3ZCLGVBQWU7TUFDZiwwQkFBMEIsRUFBRTtJQUM5QjtNQUNFLG1DQUEyQjtjQUEzQiwyQkFBMkIsRUFBRTtFQUNqQztJQUNFLGVBQWU7SUFDZixxQkFBaUI7UUFBakIsaUJBQWlCO0lBQ2pCLGNBQWMsRUFBRTtJQUNoQjtNQUNFLGVBQWU7TUFDZixZQUFZLEVBQUU7SUFDaEI7TUFDRSxpQkFBaUI7TUFDakIsbUJBQW1CLEVBQUU7SUFDdkI7TUFDRSxZQUFZLEVBQUU7SUFDaEI7TUFDRSxrQkFBa0I7TUFDbEIsZ0JBQWdCO01BQ2hCLHVCQUF1QjtNQUN2QiwwQkFBMEI7TUFDMUIsZUFBZTtNQUNmLGlCQUFpQjtNQUNqQixpQkFBaUIsRUFBRTtJQUNyQjtNQUNFLGdCQUFnQjtNQUNoQixpQkFBaUI7TUFDakIsZUFBZTtNQUNmLGlCQUFpQixFQUFFO0lBQ3JCO01BQ0UsZUFBZTtNQUNmLGtCQUFrQjtNQUNsQixnQkFBZ0I7TUFDaEIsd0JBQXdCLEVBQUU7RUFDOUI7SUFDRTtNQUNFLG1CQUFtQjtNQUNuQixvQkFBb0IsRUFBRTtJQUN4QjtNQUNFLGNBQWMsRUFBRSxFQUFFO0VBQ3RCO0lBQ0U7TUFDRSxvQkFBZ0I7VUFBaEIsZ0JBQWdCLEVBQUU7SUFDcEI7TUFDRSxrQkFBYztVQUFkLGNBQWMsRUFBRSxFQUFFO0VBQ3RCO0lBQ0U7TUFDRSxtQkFBZTtVQUFmLGVBQWUsRUFBRTtJQUNuQjtNQUNFLGNBQWMsRUFBRSxFQUFFOztBQUV4QjtFQUNFLGlCQUFpQixFQUFFO0VBQ25CO0lBQ0UsZ0JBQWdCO0lBQ2hCLGtCQUFrQjtJQUNsQix3QkFBd0I7SUFDeEIsZUFBZSxFQUFFO0VBQ25CO0lBQ0UsbUJBQW1CLEVBQUU7SUFDckI7TUFDRSxpQkFBaUIsRUFBRTtFQUN2QjtJQUNFO01BQ0UsbUJBQW1CO01BQ25CLG9CQUFvQixFQUFFO01BQ3RCO1FBQ0UsY0FBYyxFQUFFLEVBQUU7O0FBRTFCO0VBQ0UsZ0JBQWdCLEVBQUU7O0FBRXBCO0VBQ0UsYUFBYTtFQUNiLGtCQUFrQjtFQUNsQixrQkFBa0IsRUFBRTtFQUNwQjtJQUNFLGFBQWEsRUFBRTtFQUNqQjtJQUNFO01BQ0UsMEJBQTBCLEVBQUUsRUFBRTtFQUNsQztJQUNFO01BQ0UsWUFBWSxFQUFFLEVBQUU7O0FBRXRCO0VBQ0UsYUFBYTtFQUNiLG1CQUFtQixFQUFFO0VBQ3JCO0lBQ0UsaUJBQWlCLEVBQUU7RUFDckI7SUFDRTtNQUNFLDBCQUEwQixFQUFFO01BQzVCO1FBQ0UsNkJBQTZCLEVBQUUsRUFBRTtFQUN2QztJQUNFO01BQ0UsYUFBYTtNQUNiLGdCQUFnQjtNQUNoQixrQkFBa0I7TUFDbEIsbUJBQW1CLEVBQUU7TUFDckI7UUFDRSxnQkFBZ0IsRUFBRSxFQUFFOztBQUU1QjtFQUNFLFlBQVk7RUFDWixpQkFBaUIsRUFBRTs7QUFFckI7RUFDRSxnQkFBZ0I7RUFDaEIsa0JBQWtCO0VBQ2xCLHdCQUF3QjtFQUN4QixlQUFlLEVBQUU7O0FBRW5CO0VBQ0UsV0FBVztFQUNYLFlBQVk7RUFDWixxQkFBYztFQUFkLGNBQWM7RUFDZCx1QkFBK0I7TUFBL0IsK0JBQStCO0VBQy9CLG1CQUFtQjtFQUNuQixvQkFBb0I7RUFDcEIsb0JBQWdCO01BQWhCLGdCQUFnQixFQUFFO0VBQ2xCO0lBQ0U7TUFDRSwwQkFBOEI7VUFBOUIsOEJBQThCLEVBQUUsRUFBRTtFQUN0QztJQUNFLFlBQVk7SUFDWixtQkFBbUI7SUFDbkIsVUFBVTtJQUNWLFFBQVE7SUFDUixTQUFTO0lBQ1QsMEJBQTBCO0lBQzFCLGlCQUFpQjtJQUNqQiwrQkFBK0I7SUFDL0IsZ0NBQWdDO0lBQ2hDLFlBQVksRUFBRTs7QUFFbEI7RUFDRSxpQkFBaUI7RUFDakIsc0JBQXNCO0VBQ3RCLDhFQUE4RTtFQUM5RSxtQkFBbUI7RUFDbkIsa0JBQWtCO0VBQ2xCLGdCQUFnQjtFQUNoQixxQkFBcUI7RUFDckIsb0JBQW9CO0VBQ3BCLG1CQUFtQjtFQUNuQix1QkFBdUI7RUFDdkIsMEJBQTBCO0VBQzFCLGVBQWUsRUFBRTs7QUFFbkI7RUFDRSxvQkFBb0I7RUFDcEIsbUJBQW1CO0VBQ25CLGNBQWM7RUFDZCxhQUFhO0VBQ2IscUJBQWM7RUFBZCxjQUFjO0VBQ2QsMkJBQXVCO01BQXZCLHVCQUF1QjtFQUN2QixzQkFBd0I7TUFBeEIsd0JBQXdCO0VBQ3hCLHVCQUFvQjtNQUFwQixvQkFBb0I7RUFDcEIsb0JBQW9CLEVBQUU7RUFDdEI7SUFDRSxlQUFlLEVBQUU7O0FBRXJCO0VBQ0UsZ0JBQWdCO0VBQ2hCLGtCQUFrQjtFQUNsQixtQkFBbUI7RUFDbkIsd0JBQXdCO0VBQ3hCLGVBQWUsRUFBRSIsImZpbGUiOiJwYWdlcy9lbnRlcnByaXNlL2luZGV4LmNzcyIsInNvdXJjZXNDb250ZW50IjpbIi5lZS1oZXJvIHtcbiAgbWF4LXdpZHRoOiA2NDBweDtcbiAgcGFkZGluZzogMTMwcHggMCA4MHB4OyB9XG4gIC5lZS1oZXJvOjpiZWZvcmUsIC5lZS1oZXJvOjphZnRlciB7XG4gICAgZGlzcGxheTogbm9uZTsgfVxuICAuZWUtaGVybyBoMSB7XG4gICAgZm9udC1zaXplOiA2MnB4O1xuICAgIGxpbmUtaGVpZ2h0OiA2OXB4O1xuICAgIG1heC13aWR0aDogOTMwcHg7XG4gICAgbGV0dGVyLXNwYWNpbmc6IC0wLjAzZW07XG4gICAgY29sb3I6ICMwMjA4MTQ7XG4gICAgbWFyZ2luLXRvcDogMDtcbiAgICBtYXJnaW4tYm90dG9tOiAxNnB4OyB9XG4gIC5lZS1oZXJvIGg0IHtcbiAgICBmb250LWZhbWlseTogXCJSb2JvdG8gTW9ub1wiLCBNZW5sbywgTW9uYWNvLCBDb25zb2xhcywgXCJDb3VyaWVyIE5ld1wiLCBtb25vc3BhY2U7XG4gICAgZm9udC13ZWlnaHQ6IGJvbGQ7XG4gICAgZm9udC1zaXplOiAxM3B4O1xuICAgIGxpbmUtaGVpZ2h0OiAyNnB4O1xuICAgIGxldHRlci1zcGFjaW5nOiAwLjE0ZW07XG4gICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcbiAgICBjb2xvcjogIzkyQTFCMztcbiAgICBtYXJnaW4tYm90dG9tOiAyOXB4OyB9XG4gIC5lZS1oZXJvIHAge1xuICAgIGZvbnQtZmFtaWx5OiBcIkVpbmFcIiwgXCJIZWx2ZXRpY2EgTmV1ZVwiLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7XG4gICAgZm9udC1zaXplOiAyNHB4O1xuICAgIGZvbnQtd2VpZ2h0OiA0MDA7XG4gICAgbGluZS1oZWlnaHQ6IDM2cHg7XG4gICAgbGV0dGVyLXNwYWNpbmc6IC0wLjA0ZW07XG4gICAgY29sb3I6IHJnYmEoMzksIDUwLCA2MywgMC44KTsgfVxuICAuZWUtaGVybyAuYnRuIHtcbiAgICBmb250LXNpemU6IDE2cHg7XG4gICAgbWFyZ2luLXRvcDogMTZweDtcbiAgICBsaW5lLWhlaWdodDogbm9ybWFsO1xuICAgIGxldHRlci1zcGFjaW5nOiAwLjA4ZW07XG4gICAgY29sb3I6IHdoaXRlO1xuICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XG4gICAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgICBiYWNrZ3JvdW5kOiAjMzg4MEZGO1xuICAgIGJveC1zaGFkb3c6IDBweCAycHggNHB4IHJnYmEoMiwgOCwgMjAsIDAuMSksIDBweCAxcHggMnB4IHJnYmEoMiwgOCwgMjAsIDAuMDgpO1xuICAgIGJvcmRlci1yYWRpdXM6IDIxMHB4O1xuICAgIG1pbi13aWR0aDogMjAwcHg7IH1cbiAgICAuZWUtaGVybyAuYnRuOjphZnRlciB7XG4gICAgICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoJ2RhdGE6aW1hZ2Uvc3ZnK3htbDt1dGY4LDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIGZpbGw9XCJ3aGl0ZVwiIHZpZXdCb3g9XCIwIDAgNTEyIDUxMlwiPjxwYXRoIGQ9XCJNODUgMjc3LjM3NWgyNTkuNzA0TDIyNS4wMDIgMzk3LjA3NyAyNTYgNDI3bDE3MS0xNzFMMjU2IDg1bC0yOS45MjIgMjkuOTI0IDExOC42MjYgMTE5LjcwMUg4NXY0Mi43NXpcIi8+PC9zdmc+Jyk7XG4gICAgICBiYWNrZ3JvdW5kLXNpemU6IDEwMCU7XG4gICAgICBjb250ZW50OiAnJztcbiAgICAgIGhlaWdodDogMjBweDtcbiAgICAgIHdpZHRoOiAyMHB4O1xuICAgICAgZmxvYXQ6IHJpZ2h0O1xuICAgICAgZGlzcGxheTogYmxvY2s7IH1cbiAgLmVlLWhlcm8tLXNlY29uZGFyeSBoMSB7XG4gICAgZm9udC1zaXplOiA1MnB4O1xuICAgIGxpbmUtaGVpZ2h0OiA2MnB4OyB9XG4gIC5lZS1oZXJvLS13aWRlIHtcbiAgICBtYXgtd2lkdGg6IDk2MHB4OyB9XG4gIC5lZS1oZXJvLS1jZW50ZXJlZCB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgIG1hcmdpbi1sZWZ0OiBhdXRvO1xuICAgIG1hcmdpbi1yaWdodDogYXV0bzsgfVxuXG5tYWluIHtcbiAgbWFyZ2luLXRvcDogMTI4cHg7IH1cbiAgbWFpbiBzZWN0aW9uIHtcbiAgICBtYXJnaW4tYm90dG9tOiAyMDBweDsgfVxuICBtYWluIC5sZWZ0LFxuICBtYWluIC5yaWdodCxcbiAgbWFpbiAuY2VudGVyIHtcbiAgICBkaXNwbGF5OiBmbGV4OyB9XG4gICAgbWFpbiAubGVmdDo6YmVmb3JlLCBtYWluIC5sZWZ0OjphZnRlcixcbiAgICBtYWluIC5yaWdodDo6YmVmb3JlLFxuICAgIG1haW4gLnJpZ2h0OjphZnRlcixcbiAgICBtYWluIC5jZW50ZXI6OmJlZm9yZSxcbiAgICBtYWluIC5jZW50ZXI6OmFmdGVyIHtcbiAgICAgIGRpc3BsYXk6IG5vbmU7IH1cbiAgbWFpbiAubGVmdCAuY29udGVudCxcbiAgbWFpbiAucmlnaHQgLmNvbnRlbnQge1xuICAgIG1heC13aWR0aDogNDgwcHg7IH1cbiAgICBAbWVkaWEgKG1heC13aWR0aDogNzY3cHgpIHtcbiAgICAgIG1haW4gLmxlZnQgLmNvbnRlbnQsXG4gICAgICBtYWluIC5yaWdodCAuY29udGVudCB7XG4gICAgICAgIG1heC13aWR0aDogMTAwJTtcbiAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyOyB9IH1cbiAgbWFpbiAubGVmdCB7XG4gICAgZmxleC1kaXJlY3Rpb246IHJvdzsgfVxuICAgIG1haW4gLmxlZnQgLmdyYXBoaWNzIHtcbiAgICAgIG1hcmdpbi1sZWZ0OiBhdXRvOyB9XG4gIG1haW4gLnJpZ2h0IHtcbiAgICBmbGV4LWRpcmVjdGlvbjogcm93LXJldmVyc2U7XG4gICAgbWFyZ2luLWxlZnQ6IGF1dG87IH1cbiAgICBtYWluIC5yaWdodCAuZ3JhcGhpY3Mge1xuICAgICAgbWFyZ2luLXJpZ2h0OiBhdXRvOyB9XG4gIG1haW4gLmNlbnRlciB7XG4gICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjsgfVxuICAgIG1haW4gLmNlbnRlciAuY29udGVudCB7XG4gICAgICB3aWR0aDogODAwcHg7XG4gICAgICBtYXgtd2lkdGg6IDEwMCU7IH1cbiAgbWFpbiAuZnVsbCAuY29udGVudCB7XG4gICAgbWF4LXdpZHRoOiA1NjhweDsgfVxuICBAbWVkaWEgKG1heC13aWR0aDogNzY3cHgpIHtcbiAgICBtYWluIC5yaWdodCxcbiAgICBtYWluIC5sZWZ0IHtcbiAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW4tcmV2ZXJzZTsgfVxuICAgICAgbWFpbiAucmlnaHQgLmdyYXBoaWNzLFxuICAgICAgbWFpbiAubGVmdCAuZ3JhcGhpY3Mge1xuICAgICAgICBtYXJnaW4tYm90dG9tOiAyNHB4OyB9XG4gICAgbWFpbiBzZWN0aW9uIHtcbiAgICAgIG1hcmdpbi1ib3R0b206IDEwMHB4OyB9IH1cbiAgbWFpbiAuZ3JhcGhpY3Mge1xuICAgIGp1c3RpZnktY29udGVudDogZmxleC1lbmQ7IH1cbiAgICBtYWluIC5ncmFwaGljcyBpbWcge1xuICAgICAgd2lkdGg6IDEwMCU7IH1cbiAgbWFpbiBoMiB7XG4gICAgZm9udC1zaXplOiA0NHB4O1xuICAgIGxpbmUtaGVpZ2h0OiA1MXB4O1xuICAgIGxldHRlci1zcGFjaW5nOiAtMC4wM2VtOyB9XG4gICAgbWFpbiBoMjpmaXJzdC1jaGlsZCB7XG4gICAgICBtYXJnaW4tdG9wOiAwOyB9XG4gIG1haW4gcCB7XG4gICAgZm9udC1zaXplOiAyMHB4O1xuICAgIGxpbmUtaGVpZ2h0OiAzMXB4O1xuICAgIGxldHRlci1zcGFjaW5nOiAtMC4wMmVtO1xuICAgIGNvbG9yOiAjNUI3MDhCO1xuICAgIG1hcmdpbi1ib3R0b206IDU0cHg7IH1cbiAgbWFpbiAuY29udGVudCBsaSB7XG4gICAgZm9udC1zaXplOiAxNnB4O1xuICAgIGxpbmUtaGVpZ2h0OiAyM3B4O1xuICAgIGxldHRlci1zcGFjaW5nOiAtMC4wMmVtO1xuICAgIGNvbG9yOiAjMUEyMzJGO1xuICAgIG1hcmdpbi1ib3R0b206IDQwcHg7XG4gICAgcGFkZGluZy1sZWZ0OiAzMHB4O1xuICAgIGxpc3Qtc3R5bGU6IG5vbmU7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlOyB9XG4gICAgbWFpbiAuY29udGVudCBsaTo6YmVmb3JlIHtcbiAgICAgIGJhY2tncm91bmQtaW1hZ2U6IHVybChcIi9pbWcvZW50ZXJwcmlzZS9jaGVjay5zdmdcIik7XG4gICAgICBiYWNrZ3JvdW5kLXNpemU6IDEwMCU7XG4gICAgICBjb250ZW50OiAnJztcbiAgICAgIGhlaWdodDogMTBweDtcbiAgICAgIHdpZHRoOiAxM3B4O1xuICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgbGVmdDogMDtcbiAgICAgIHRvcDogOHB4OyB9XG4gIG1haW4gLmZlYXR1cmVzIHtcbiAgICBkaXNwbGF5OiBncmlkO1xuICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogMWZyIDFmciAxZnI7XG4gICAgZ3JpZC1jb2x1bW4tZ2FwOiA2NHB4O1xuICAgIGdyaWQtcm93LWdhcDogMTBweDtcbiAgICBwYWRkaW5nOiAwOyB9XG4gICAgbWFpbiAuZmVhdHVyZXMgbGkge1xuICAgICAgbGlzdC1zdHlsZTogbm9uZTsgfVxuICAgIG1haW4gLmZlYXR1cmVzIC5pY29uIHtcbiAgICAgIG1hcmdpbi1ib3R0b206IDI0cHg7XG4gICAgICB3aWR0aDogNDhweDsgfVxuICAgIEBtZWRpYSAobWF4LXdpZHRoOiA5OTFweCkge1xuICAgICAgbWFpbiAuZmVhdHVyZXMge1xuICAgICAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IDFmciAxZnI7IH0gfVxuICAgIEBtZWRpYSAobWF4LXdpZHRoOiA1MDBweCkge1xuICAgICAgbWFpbiAuZmVhdHVyZXMge1xuICAgICAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IDFmcjsgfSB9XG5cbi5yZXNvdXJjZXMge1xuICBwYWRkaW5nLWJvdHRvbTogMTIwcHg7IH1cbiAgQG1lZGlhIChtYXgtd2lkdGg6IDc2OHB4KSB7XG4gICAgLnJlc291cmNlcyB7XG4gICAgICBwYWRkaW5nLWJvdHRvbTogNjBweDsgfSB9XG4gIC5yZXNvdXJjZXMgLmNhcmRzIHtcbiAgICBsaXN0LXN0eWxlLXR5cGU6IG5vbmU7XG4gICAgbWFyZ2luOiAwO1xuICAgIHBhZGRpbmc6IDA7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBtYXJnaW4tbGVmdDogLTI0cHg7XG4gICAgbWFyZ2luLXJpZ2h0OiAtMjRweDsgfVxuICAucmVzb3VyY2VzIGhncm91cCB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG4gICAgYWxpZ24taXRlbXM6IGJhc2VsaW5lOyB9XG4gICAgLnJlc291cmNlcyBoZ3JvdXAgaDMge1xuICAgICAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgICAgIGxpbmUtaGVpZ2h0OiBub3JtYWw7XG4gICAgICBmb250LXNpemU6IDI4cHg7XG4gICAgICBsZXR0ZXItc3BhY2luZzogLTAuMDJlbTtcbiAgICAgIGNvbG9yOiAjMUEyMzJGO1xuICAgICAgbWFyZ2luLWJvdHRvbTogMDsgfVxuICAgIC5yZXNvdXJjZXMgaGdyb3VwIGg1IHtcbiAgICAgIGZvbnQtd2VpZ2h0OiA3MDA7XG4gICAgICBsaW5lLWhlaWdodDogMTtcbiAgICAgIGZvbnQtc2l6ZTogMTRweDtcbiAgICAgIGxldHRlci1zcGFjaW5nOiAwLjA4ZW07XG4gICAgICBjb2xvcjogIzM4ODBGRjtcbiAgICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7IH1cbiAgICAucmVzb3VyY2VzIGhncm91cCBpb24taWNvbiB7XG4gICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMnB4KTsgfVxuICAucmVzb3VyY2VzIC5jYXJkcyBsaSB7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgZmxleDogMCAwIDMzLjMzJTtcbiAgICBwYWRkaW5nOiAyNHB4OyB9XG4gICAgLnJlc291cmNlcyAuY2FyZHMgbGkgYSB7XG4gICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgIHdpZHRoOiAxMDAlOyB9XG4gICAgLnJlc291cmNlcyAuY2FyZHMgbGkgLmltZy13cmFwcGVyIHtcbiAgICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgICBib3JkZXItcmFkaXVzOiA2cHg7IH1cbiAgICAucmVzb3VyY2VzIC5jYXJkcyBsaSBpbWcge1xuICAgICAgd2lkdGg6IDEwMCU7IH1cbiAgICAucmVzb3VyY2VzIC5jYXJkcyBsaSBoNiB7XG4gICAgICBsaW5lLWhlaWdodDogMjNweDtcbiAgICAgIGZvbnQtc2l6ZTogMTJweDtcbiAgICAgIGxldHRlci1zcGFjaW5nOiAwLjEyZW07XG4gICAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xuICAgICAgY29sb3I6ICNCMkJFQ0Q7XG4gICAgICBtYXJnaW4tYm90dG9tOiAwO1xuICAgICAgbWFyZ2luLXRvcDogMTZweDsgfVxuICAgIC5yZXNvdXJjZXMgLmNhcmRzIGxpIGg0IHtcbiAgICAgIGZvbnQtc2l6ZTogMjBweDtcbiAgICAgIG1hcmdpbi10b3A6IDEwcHg7XG4gICAgICBjb2xvcjogIzFBMjMyRjtcbiAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7IH1cbiAgICAucmVzb3VyY2VzIC5jYXJkcyBsaSBwIHtcbiAgICAgIGNvbG9yOiAjNUI3MDhCO1xuICAgICAgbGluZS1oZWlnaHQ6IDIycHg7XG4gICAgICBmb250LXNpemU6IDE0cHg7XG4gICAgICBsZXR0ZXItc3BhY2luZzogLTAuMDJlbTsgfVxuICBAbWVkaWEgKG1heC13aWR0aDogOTkycHgpIHtcbiAgICAucmVzb3VyY2VzIC5jYXJkcyB7XG4gICAgICBtYXJnaW4tbGVmdDogLTEycHg7XG4gICAgICBtYXJnaW4tcmlnaHQ6IC0xMnB4OyB9XG4gICAgLnJlc291cmNlcyAuY2FyZHMgbGkge1xuICAgICAgcGFkZGluZzogMTJweDsgfSB9XG4gIEBtZWRpYSAobWF4LXdpZHRoOiA3NjhweCkge1xuICAgIC5yZXNvdXJjZXMgLmNhcmRzIHtcbiAgICAgIGZsZXgtd3JhcDogd3JhcDsgfVxuICAgIC5yZXNvdXJjZXMgLmNhcmRzIGxpIHtcbiAgICAgIGZsZXg6IDAgMCA1MCU7IH0gfVxuICBAbWVkaWEgKG1heC13aWR0aDogNDgwcHgpIHtcbiAgICAucmVzb3VyY2VzIC5jYXJkcyBsaSB7XG4gICAgICBmbGV4OiAwIDAgMTAwJTsgfVxuICAgIC5yZXNvdXJjZXMgaDUge1xuICAgICAgZGlzcGxheTogbm9uZTsgfSB9XG5cbi5yZXNvdXJjZXMgLmNhcmRzIHtcbiAgdGV4dC1hbGlnbjogbGVmdDsgfVxuICAucmVzb3VyY2VzIC5jYXJkcyBsaSBwIHtcbiAgICBmb250LXNpemU6IDE2cHg7XG4gICAgbGluZS1oZWlnaHQ6IDI5cHg7XG4gICAgbGV0dGVyLXNwYWNpbmc6IC0wLjAxZW07XG4gICAgY29sb3I6ICM3Mzg0OUE7IH1cbiAgLnJlc291cmNlcyAuY2FyZHMgLmltZy13cmFwcGVyIHtcbiAgICBib3JkZXItcmFkaXVzOiA2cHg7IH1cbiAgICAucmVzb3VyY2VzIC5jYXJkcyAuaW1nLXdyYXBwZXIgKyBoNCB7XG4gICAgICBtYXJnaW4tdG9wOiAyNHB4OyB9XG4gIEBtZWRpYSAobWluLXdpZHRoOiAxMjIwcHgpIHtcbiAgICAucmVzb3VyY2VzIC5jYXJkcyB7XG4gICAgICBtYXJnaW4tbGVmdDogLTQwcHg7XG4gICAgICBtYXJnaW4tcmlnaHQ6IC00MHB4OyB9XG4gICAgICAucmVzb3VyY2VzIC5jYXJkcyBsaSB7XG4gICAgICAgIHBhZGRpbmc6IDQwcHg7IH0gfVxuXG4ucmVzb3VyY2VzIGltZyB7XG4gIG1heC13aWR0aDogMTAwJTsgfVxuXG4jYmVzdC13YXkgLmdyYXBoaWNzIHtcbiAgd2lkdGg6IDY0MHB4O1xuICBtaW4taGVpZ2h0OiA1MzJweDtcbiAgbWFyZ2luLWxlZnQ6IGF1dG87IH1cbiAgI2Jlc3Qtd2F5IC5ncmFwaGljcyBpbWcge1xuICAgIHdpZHRoOiA5NDVweDsgfVxuICBAbWVkaWEgKG1heC13aWR0aDogOTkxcHgpIHtcbiAgICAjYmVzdC13YXkgLmdyYXBoaWNzIHtcbiAgICAgIHdpZHRoOiBjYWxjKDEwMCUgLSAzMDBweCk7IH0gfVxuICBAbWVkaWEgKG1heC13aWR0aDogNzY3cHgpIHtcbiAgICAjYmVzdC13YXkgLmdyYXBoaWNzIHtcbiAgICAgIHdpZHRoOiAxMDAlOyB9IH1cblxuI2ZyaWVuZGx5IC5ncmFwaGljcyB7XG4gIHdpZHRoOiA1NjBweDtcbiAgbWFyZ2luLXJpZ2h0OiBhdXRvOyB9XG4gICNmcmllbmRseSAuZ3JhcGhpY3MgaW1nIHtcbiAgICBtYXgtd2lkdGg6IDU2MHB4OyB9XG4gIEBtZWRpYSAobWF4LXdpZHRoOiAxMjE5cHgpIHtcbiAgICAjZnJpZW5kbHkgLmdyYXBoaWNzIHtcbiAgICAgIHdpZHRoOiBjYWxjKDEwMCUgLSAzMDBweCk7IH1cbiAgICAgICNmcmllbmRseSAuZ3JhcGhpY3MgaW1nIHtcbiAgICAgICAgbWF4LXdpZHRoOiBjYWxjKDEwMCUgLSAyMHB4KTsgfSB9XG4gIEBtZWRpYSAobWF4LXdpZHRoOiAxMjE5cHgpIHtcbiAgICAjZnJpZW5kbHkgLmdyYXBoaWNzIHtcbiAgICAgIHdpZHRoOiAzNzNweDtcbiAgICAgIG1heC13aWR0aDogMTAwJTtcbiAgICAgIG1hcmdpbi1sZWZ0OiBhdXRvO1xuICAgICAgbWFyZ2luLXJpZ2h0OiBhdXRvOyB9XG4gICAgICAjZnJpZW5kbHkgLmdyYXBoaWNzIGltZyB7XG4gICAgICAgIG1heC13aWR0aDogMTAwJTsgfSB9XG5cbiNzdXBlcmNoYXJnZWQgZmlndXJlIHtcbiAgd2lkdGg6IDEwMCU7XG4gIG1heC13aWR0aDogODAwcHg7IH1cblxuI3N1cGVyY2hhcmdlZCBmaWdjYXB0aW9uIHtcbiAgZm9udC1zaXplOiAxM3B4O1xuICBsaW5lLWhlaWdodDogMjNweDtcbiAgbGV0dGVyLXNwYWNpbmc6IC0wLjAxZW07XG4gIGNvbG9yOiAjNzM4NDlBOyB9XG5cbiNzdXBlcmNoYXJnZWQgdWwge1xuICBwYWRkaW5nOiAwO1xuICB3aWR0aDogMTAwJTtcbiAgZGlzcGxheTogZmxleDtcbiAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIG1hcmdpbi1ib3R0b206IDE2cHg7XG4gIGZsZXgtd3JhcDogd3JhcDsgfVxuICBAbWVkaWEgKG1heC13aWR0aDogMTIxOXB4KSB7XG4gICAgI3N1cGVyY2hhcmdlZCB1bCB7XG4gICAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWFyb3VuZDsgfSB9XG4gICNzdXBlcmNoYXJnZWQgdWw6OmFmdGVyIHtcbiAgICBjb250ZW50OiAnJztcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgYm90dG9tOiAwO1xuICAgIGxlZnQ6IDA7XG4gICAgcmlnaHQ6IDA7XG4gICAgYm9yZGVyOiAycHggc29saWQgI0UzRURGRjtcbiAgICBib3JkZXItdG9wOiBub25lO1xuICAgIGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6IDhweDtcbiAgICBib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czogOHB4O1xuICAgIGhlaWdodDogOXB4OyB9XG5cbiNzdXBlcmNoYXJnZWQgbGkge1xuICBsaXN0LXN0eWxlOiBub25lO1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIGZvbnQtZmFtaWx5OiBcIlJvYm90byBNb25vXCIsIE1lbmxvLCBNb25hY28sIENvbnNvbGFzLCBcIkNvdXJpZXIgTmV3XCIsIG1vbm9zcGFjZTtcbiAgZm9udC1zdHlsZTogbm9ybWFsO1xuICBmb250LXdlaWdodDogYm9sZDtcbiAgZm9udC1zaXplOiAxMnB4O1xuICBwYWRkaW5nLWJvdHRvbTogNTBweDtcbiAgbGluZS1oZWlnaHQ6IG5vcm1hbDtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICBsZXR0ZXItc3BhY2luZzogMC4xNGVtO1xuICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xuICBjb2xvcjogIzVCNzA4QjsgfVxuXG4jc3VwZXJjaGFyZ2VkIC5pY29uIHtcbiAgYmFja2dyb3VuZDogI0YwRjZGRjtcbiAgYm9yZGVyLXJhZGl1czogNTAlO1xuICBoZWlnaHQ6IDE3MnB4O1xuICB3aWR0aDogMTcycHg7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBtYXJnaW4tYm90dG9tOiAxMXB4OyB9XG4gICNzdXBlcmNoYXJnZWQgLmljb24gaW1nIHtcbiAgICBtYXJnaW46IDAgYXV0bzsgfVxuXG4jc3VwZXJjaGFyZ2VkIGNhcHRpb24ge1xuICBmb250LXNpemU6IDEzcHg7XG4gIGxpbmUtaGVpZ2h0OiAyM3B4O1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIGxldHRlci1zcGFjaW5nOiAtMC4wMWVtO1xuICBjb2xvcjogIzczODQ5QTsgfVxuIl19 */\n"
  },
  {
    "path": "content/css/pages/enterprise/platform.css",
    "content": ".ee-hero {\n  max-width: 640px;\n  padding-top: 130px;\n  padding-bottom: 160px; }\n  .ee-hero::before, .ee-hero::after {\n    display: none; }\n  .ee-hero h1 {\n    font-size: 52px;\n    line-height: 62px;\n    max-width: 930px;\n    letter-spacing: -0.03em;\n    color: #020814;\n    margin-top: 0;\n    margin-bottom: 16px; }\n  .ee-hero h4 {\n    font-family: \"Roboto Mono\", Menlo, Monaco, Consolas, \"Courier New\", monospace;\n    font-weight: bold;\n    font-size: 13px;\n    line-height: 26px;\n    letter-spacing: 0.14em;\n    text-transform: uppercase;\n    color: #92A1B3;\n    margin-bottom: 29px; }\n  .ee-hero p {\n    font-family: \"Eina\", \"Helvetica Neue\", Helvetica, sans-serif;\n    font-size: 24px;\n    font-weight: 400;\n    line-height: 36px;\n    letter-spacing: -0.04em;\n    color: rgba(39, 50, 63, 0.8); }\n  .ee-hero .btn {\n    padding-left: 24px;\n    padding-right: 20px;\n    padding-top: 18px;\n    padding-bottom: 18px;\n    font-size: 14px;\n    margin-top: 16px;\n    line-height: 20px;\n    letter-spacing: 0.08em;\n    color: white;\n    text-transform: uppercase;\n    font-weight: 700;\n    background: #3880FF;\n    box-shadow: 0px 2px 4px rgba(2, 8, 20, 0.1), 0px 1px 2px rgba(2, 8, 20, 0.08);\n    border-radius: 210px;\n    display: -ms-flexbox;\n    display: flex;\n    -ms-flex-align: center;\n        align-items: center; }\n    .ee-hero .btn::after {\n      background-image: url('data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"white\" viewBox=\"0 0 512 512\"><path d=\"M85 277.375h259.704L225.002 397.077 256 427l171-171L256 85l-29.922 29.924 118.626 119.701H85v42.75z\"/></svg>');\n      background-size: 100%;\n      content: '';\n      height: 20px;\n      width: 20px;\n      display: block;\n      margin-left: 8px;\n      -webkit-transform: translateY(-1px);\n              transform: translateY(-1px); }\n    .ee-hero .btn:hover {\n      background-color: #4f8bf5; }\n  .ee-hero--large h1 {\n    font-size: 62px;\n    line-height: 69px; }\n  .ee-hero--wide {\n    max-width: 960px; }\n  .ee-hero--centered {\n    display: -ms-flexbox;\n    display: flex;\n    -ms-flex-direction: column;\n        flex-direction: column;\n    -ms-flex-pack: center;\n        justify-content: center;\n    -ms-flex-align: center;\n        align-items: center;\n    text-align: center;\n    margin-left: auto;\n    margin-right: auto; }\n  @media (max-width: 767px) {\n    .ee-hero {\n      padding-top: 70px;\n      padding-bottom: 0; }\n      .ee-hero h1 {\n        font-size: 44px;\n        line-height: 52px; }\n      .ee-hero--large h1 {\n        font-size: 50px;\n        line-height: 60px; } }\n  @media (max-width: 480px) {\n    .ee-hero h1 {\n      font-size: 36px;\n      line-height: 44px;\n      margin-bottom: 6px; }\n    .ee-hero--large h1 {\n      font-size: 42px;\n      line-height: 52px; }\n    .ee-hero .btn {\n      margin-top: 8px; } }\n\n.ee-main {\n  margin-top: 0; }\n  .ee-main section {\n    margin-bottom: 200px; }\n  .ee-main .left,\n  .ee-main .right,\n  .ee-main .center {\n    display: -ms-flexbox;\n    display: flex; }\n    .ee-main .left::before, .ee-main .left::after,\n    .ee-main .right::before,\n    .ee-main .right::after,\n    .ee-main .center::before,\n    .ee-main .center::after {\n      display: none; }\n  .ee-main .left .content,\n  .ee-main .right .content {\n    max-width: 480px; }\n    @media (max-width: 767px) {\n      .ee-main .left .content,\n      .ee-main .right .content {\n        max-width: 100%;\n        text-align: center; }\n        .ee-main .left .content li,\n        .ee-main .right .content li {\n          text-align: left; } }\n  .ee-main .left {\n    -ms-flex-direction: row;\n        flex-direction: row; }\n    .ee-main .left .graphics {\n      margin-left: auto; }\n  .ee-main .right {\n    -ms-flex-direction: row-reverse;\n        flex-direction: row-reverse;\n    margin-left: auto; }\n    .ee-main .right .graphics {\n      margin-right: auto; }\n  .ee-main .center {\n    -ms-flex-direction: column;\n        flex-direction: column;\n    -ms-flex-align: center;\n        align-items: center;\n    text-align: center; }\n    .ee-main .center .content {\n      width: 894px;\n      max-width: 100%; }\n  .ee-main .full .content {\n    max-width: 568px; }\n  @media (max-width: 767px) {\n    .ee-main .right,\n    .ee-main .left {\n      -ms-flex-direction: column-reverse;\n          flex-direction: column-reverse;\n      -ms-flex-align: center;\n          align-items: center; }\n      .ee-main .right .graphics,\n      .ee-main .left .graphics {\n        margin-bottom: 24px;\n        margin-left: 0;\n        margin-right: 0; }\n    .ee-main section {\n      margin-bottom: 100px; } }\n  .ee-main .graphics {\n    -ms-flex-pack: end;\n        justify-content: flex-end; }\n    .ee-main .graphics img {\n      width: 100%; }\n  .ee-main h2 {\n    font-size: 44px;\n    line-height: 51px;\n    letter-spacing: -0.03em; }\n    .ee-main h2:first-child {\n      margin-top: 0; }\n  .ee-main .ee-section__title {\n    font-family: \"Roboto Mono\", Menlo, Monaco, Consolas, \"Courier New\", monospace;\n    font-style: normal;\n    font-weight: bold;\n    font-size: 12px;\n    line-height: 23px;\n    letter-spacing: 0.14em;\n    text-transform: uppercase;\n    color: #5B708B;\n    margin-top: 0; }\n  .ee-main .ee-section__cta {\n    display: inline-block;\n    font-size: 18px;\n    font-weight: 500;\n    margin-top: 16px; }\n  .ee-main p {\n    font-size: 20px;\n    line-height: 31px;\n    letter-spacing: -0.02em;\n    color: #5B708B;\n    margin-top: 18px; }\n    .ee-main p.sm {\n      font-size: 16px;\n      line-height: 29px;\n      letter-spacing: -0.01em; }\n  .ee-main ul:not(.frameworks) {\n    margin-top: 54px; }\n  .ee-main .content ul {\n    padding-left: 0; }\n  .ee-main .content li {\n    font-size: 16px;\n    line-height: 23px;\n    letter-spacing: -0.02em;\n    color: #1A232F;\n    margin-bottom: 40px;\n    padding-left: 30px;\n    list-style: none;\n    position: relative; }\n    .ee-main .content li::before {\n      background-image: url(\"/img/enterprise/check.svg\");\n      background-size: 100%;\n      content: '';\n      height: 10px;\n      width: 13px;\n      position: absolute;\n      left: 0;\n      top: 8px; }\n  .ee-main .features {\n    display: -ms-grid;\n    display: grid;\n    -ms-grid-columns: 1fr 1fr 1fr;\n        grid-template-columns: 1fr 1fr 1fr;\n    grid-column-gap: 64px;\n    grid-row-gap: 24px;\n    padding: 0; }\n    .ee-main .features li {\n      list-style: none; }\n    .ee-main .features .icon {\n      margin-bottom: 16px;\n      width: 48px; }\n    @media (max-width: 991px) {\n      .ee-main .features {\n        -ms-grid-columns: 1fr 1fr;\n            grid-template-columns: 1fr 1fr; } }\n    @media (max-width: 500px) {\n      .ee-main .features {\n        -ms-grid-columns: 1fr;\n            grid-template-columns: 1fr; } }\n  .ee-main .cta-card {\n    background: #4a8bfc;\n    border-radius: 12px;\n    padding: 72px 72px 60px;\n    background-size: cover;\n    color: white; }\n    .ee-main .cta-card .ee-section__title,\n    .ee-main .cta-card p {\n      color: #CED6E0; }\n\n#how-to {\n  margin-bottom: 0;\n  position: relative;\n  padding-top: 140px; }\n  #how-to::before {\n    position: absolute;\n    top: 0;\n    width: 100vw;\n    border-top: 1px solid rgba(146, 161, 179, 0.3);\n    content: '';\n    display: block; }\n\n.cards--red-v-blue {\n  display: -ms-flexbox;\n  display: flex;\n  text-align: left;\n  -ms-flex-pack: center;\n      justify-content: center;\n  margin-top: 38px; }\n  .cards--red-v-blue__card {\n    background: #7CABFF;\n    border-radius: 8px;\n    padding: 40px 40px 34px;\n    display: -ms-flexbox;\n    display: flex;\n    -ms-flex-direction: column;\n        flex-direction: column;\n    -ms-flex-align: start;\n        align-items: flex-start;\n    margin-right: 24px;\n    -ms-flex: 0 1 460px;\n        flex: 0 1 460px;\n    border-radius: 8px; }\n    .cards--red-v-blue__card:last-child {\n      margin-right: 0; }\n    .cards--red-v-blue__card:nth-child(2) {\n      background: #F88D8D; }\n      .cards--red-v-blue__card:nth-child(2) .btn {\n        background: rgba(244, 84, 84, 0.5); }\n  .cards--red-v-blue h3 {\n    font-size: 24px;\n    line-height: normal;\n    letter-spacing: -0.02em;\n    color: white;\n    margin-top: 0; }\n  .cards--red-v-blue p {\n    font-size: 18px;\n    line-height: 26px;\n    letter-spacing: -0.02em;\n    color: rgba(255, 255, 255, 0.7);\n    margin-top: 0;\n    margin-bottom: 22px; }\n  .cards--red-v-blue .btn {\n    margin-top: auto;\n    font-size: 14px;\n    line-height: 22px;\n    letter-spacing: 0.09em;\n    text-transform: uppercase;\n    padding: 10px 14px;\n    font-weight: 600;\n    border-radius: 8px;\n    background: rgba(56, 128, 255, 0.5); }\n    .cards--red-v-blue .btn ion-icon {\n      display: inline-block;\n      height: 14px;\n      width: 14px;\n      vertical-align: -2px; }\n  @media (max-width: 767px) {\n    .cards--red-v-blue {\n      -ms-flex-direction: column;\n          flex-direction: column;\n      -ms-flex-align: center;\n          align-items: center; }\n      .cards--red-v-blue__card {\n        -ms-flex: auto;\n            flex: auto;\n        margin-right: 0;\n        margin-top: 20px;\n        max-width: 460px; } }\n\naside {\n  background: linear-gradient(180deg, #F9FAFB 0%, #FFFFFF 100%);\n  margin-top: -60px;\n  padding-top: 200px;\n  padding-bottom: 120px; }\n  aside p {\n    color: #414D5C; }\n  aside .content {\n    max-width: 432px;\n    margin: 0 auto;\n    text-align: center;\n    display: block; }\n\n.ee-get-started {\n  max-width: 700px; }\n  .ee-get-started h3 {\n    color: #414D5C; }\n\n.resources {\n  padding-bottom: 120px; }\n  @media (max-width: 768px) {\n    .resources {\n      padding-bottom: 60px; } }\n  .resources .cards {\n    list-style-type: none;\n    margin: 0;\n    padding: 0;\n    display: -ms-flexbox;\n    display: flex;\n    margin-left: -24px;\n    margin-right: -24px; }\n  .resources hgroup {\n    display: -ms-flexbox;\n    display: flex;\n    -ms-flex-pack: justify;\n        justify-content: space-between;\n    -ms-flex-align: baseline;\n        align-items: baseline; }\n    .resources hgroup h3 {\n      font-weight: 600;\n      line-height: normal;\n      font-size: 28px;\n      letter-spacing: -0.02em;\n      color: #1A232F;\n      margin-bottom: 0; }\n    .resources hgroup h4 {\n      font-weight: 600;\n      font-size: 24px;\n      line-height: normal;\n      letter-spacing: -0.02em;\n      color: #1A232F; }\n    .resources hgroup h5 {\n      font-weight: 700;\n      line-height: 1;\n      font-size: 14px;\n      letter-spacing: 0.08em;\n      color: #3880FF;\n      text-transform: uppercase; }\n    .resources hgroup ion-icon {\n      -webkit-transform: translateY(2px);\n              transform: translateY(2px); }\n  .resources .cards li {\n    display: block;\n    -ms-flex: 0 0 33.33%;\n        flex: 0 0 33.33%;\n    padding: 24px; }\n    .resources .cards li a {\n      display: block;\n      width: 100%; }\n    .resources .cards li .img-wrapper {\n      overflow: hidden;\n      border-radius: 6px; }\n    .resources .cards li img {\n      width: 100%; }\n    .resources .cards li h6 {\n      line-height: 23px;\n      font-size: 12px;\n      letter-spacing: 0.12em;\n      text-transform: uppercase;\n      color: #B2BECD;\n      margin-bottom: 0;\n      margin-top: 16px; }\n    .resources .cards li h4 {\n      font-size: 20px;\n      margin-top: 10px;\n      color: #1A232F;\n      font-weight: 600; }\n    .resources .cards li p {\n      color: #5B708B;\n      line-height: 22px;\n      font-size: 14px;\n      letter-spacing: -0.02em; }\n  @media (max-width: 992px) {\n    .resources .cards {\n      margin-left: -12px;\n      margin-right: -12px; }\n    .resources .cards li {\n      padding: 12px; } }\n  @media (max-width: 768px) {\n    .resources .cards {\n      -ms-flex-wrap: wrap;\n          flex-wrap: wrap; }\n    .resources .cards li {\n      -ms-flex: 0 0 50%;\n          flex: 0 0 50%; } }\n  @media (max-width: 480px) {\n    .resources .cards li {\n      -ms-flex: 0 0 100%;\n          flex: 0 0 100%; }\n    .resources h5 {\n      display: none; } }\n\n.ee-main .features li p,\n.ee-main .cards li p,\n.resources .features li p,\n.resources .cards li p {\n  font-size: 16px;\n  line-height: 29px;\n  letter-spacing: -0.01em;\n  color: #73849A;\n  margin-top: 0; }\n\n.ee-main .features li h4,\n.ee-main .cards li h4,\n.resources .features li h4,\n.resources .cards li h4 {\n  font-size: 20px;\n  line-height: normal;\n  letter-spacing: -0.02em;\n  color: #020814;\n  font-weight: 600; }\n\n.resources .cards {\n  margin-top: 0 !important;\n  text-align: left;\n  -ms-flex-wrap: wrap;\n      flex-wrap: wrap; }\n  .resources .cards .img-wrapper {\n    border-radius: 6px; }\n    .resources .cards .img-wrapper + h4 {\n      margin-top: 24px; }\n  @media (min-width: 1220px) {\n    .resources .cards {\n      margin-left: -40px;\n      margin-right: -40px; }\n      .resources .cards li {\n        padding: 40px; } }\n\n.resources .resources__customer-logos {\n  display: -ms-flexbox;\n  display: flex;\n  margin: 26px auto 0;\n  padding: 0;\n  -ms-flex-pack: justify;\n      justify-content: space-between;\n  max-width: 780px;\n  width: 100%; }\n  .resources .resources__customer-logos li {\n    background: url(\"/img/enterprise/customer-logos.png\");\n    background-size: 428px 46px;\n    background-repeat: no-repeat;\n    display: block;\n    height: 46px; }\n  @media (max-width: 768px) {\n    .resources .resources__customer-logos {\n      -ms-flex-pack: center;\n          justify-content: center;\n      -ms-flex-wrap: wrap;\n          flex-wrap: wrap;\n      max-width: 460px; }\n      .resources .resources__customer-logos li {\n        margin: 20px; } }\n  .resources .resources__customer-logos .mastercard {\n    width: 58px; }\n  .resources .resources__customer-logos .nationwide {\n    background-position: -58px 0;\n    width: 33px; }\n  .resources .resources__customer-logos .uniqlo {\n    background-position: -91px 0;\n    width: 65px; }\n  .resources .resources__customer-logos .ibm {\n    background-position: -156px 0;\n    width: 64px; }\n  .resources .resources__customer-logos .ing {\n    background-position: -222px 0;\n    width: 103px; }\n  .resources .resources__customer-logos .sap {\n    background-position: -326px 0;\n    width: 56px; }\n  .resources .resources__customer-logos .nasa {\n    background-position: -380px 0;\n    width: 50px; }\n\nsection {\n  position: relative; }\n\n#app-builder .graphics {\n  margin-left: -86px;\n  padding-left: 0;\n  margin-right: -120px;\n  width: 897px; }\n  @media (max-width: 767px) {\n    #app-builder .graphics {\n      width: 100%;\n      margin-top: 100px;\n      margin-bottom: -60px; } }\n\n#oss .frameworks {\n  margin-bottom: 33px;\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-pack: start;\n      justify-content: start;\n  -ms-flex-wrap: wrap;\n      flex-wrap: wrap;\n  padding-left: 0; }\n  #oss .frameworks li {\n    margin-right: 1em;\n    list-style: none; }\n  #oss .frameworks li {\n    height: 32px;\n    width: 32px;\n    background-size: 100%;\n    display: inline-block;\n    margin-right: 12px; }\n    #oss .frameworks li.frameworks__angular {\n      background-image: url(\"/img/homepage/framework-support-angular.png\"); }\n    #oss .frameworks li.frameworks__react {\n      background-image: url(\"/img/homepage/framework-support-react.png\"); }\n    #oss .frameworks li.frameworks__vue {\n      background-image: url(\"/img/homepage/framework-support-vue.png\"); }\n    #oss .frameworks li.frameworks__js {\n      background-image: url(\"/img/homepage/framework-support-javascript.png\"); }\n    #oss .frameworks li::before {\n      display: none; }\n  @media (max-width: 767px) {\n    #oss .frameworks {\n      -ms-flex-pack: distribute;\n          justify-content: space-around;\n      width: 260px;\n      margin: 0 auto; }\n      #oss .frameworks li {\n        margin-right: 0; } }\n\n#oss .graphics {\n  padding-right: 0;\n  margin-left: -130px;\n  width: 789px; }\n  @media (max-width: 767px) {\n    #oss .graphics {\n      width: 100%;\n      max-width: 400px;\n      margin-left: -60px; } }\n\n#devops .graphics {\n  width: calc(100% - 480px);\n  margin-right: -20px;\n  margin-top: -40px; }\n  #devops .graphics img {\n    width: 1035px;\n    position: relative;\n    left: -380px; }\n\n#integrations .integration-list {\n  position: relative;\n  width: 100%;\n  height: 360px;\n  display: block;\n  margin: 0 0 48px;\n  padding: 0;\n  position: relative;\n  opacity: 0;\n  -webkit-animation: fadeIn 1s 1s forwards;\n          animation: fadeIn 1s 1s forwards; }\n  #integrations .integration-list li {\n    list-style: none;\n    position: absolute; }\n  #integrations .integration-list img {\n    position: absolute;\n    width: 128px;\n    border-radius: 50%;\n    box-shadow: 0 6px 24px rgba(0, 0, 0, 0.1); }\n    #integrations .integration-list img.m {\n      width: 64px; }\n    #integrations .integration-list img.m {\n      width: 96px; }\n\n#advisory {\n  background-image: url(\"/img/enterprise/platform/card-advisory.jpg\"); }\n\n/*# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInBsYXRmb3JtLmNzcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtFQUNFLGlCQUFpQjtFQUNqQixtQkFBbUI7RUFDbkIsc0JBQXNCLEVBQUU7RUFDeEI7SUFDRSxjQUFjLEVBQUU7RUFDbEI7SUFDRSxnQkFBZ0I7SUFDaEIsa0JBQWtCO0lBQ2xCLGlCQUFpQjtJQUNqQix3QkFBd0I7SUFDeEIsZUFBZTtJQUNmLGNBQWM7SUFDZCxvQkFBb0IsRUFBRTtFQUN4QjtJQUNFLDhFQUE4RTtJQUM5RSxrQkFBa0I7SUFDbEIsZ0JBQWdCO0lBQ2hCLGtCQUFrQjtJQUNsQix1QkFBdUI7SUFDdkIsMEJBQTBCO0lBQzFCLGVBQWU7SUFDZixvQkFBb0IsRUFBRTtFQUN4QjtJQUNFLDZEQUE2RDtJQUM3RCxnQkFBZ0I7SUFDaEIsaUJBQWlCO0lBQ2pCLGtCQUFrQjtJQUNsQix3QkFBd0I7SUFDeEIsNkJBQTZCLEVBQUU7RUFDakM7SUFDRSxtQkFBbUI7SUFDbkIsb0JBQW9CO0lBQ3BCLGtCQUFrQjtJQUNsQixxQkFBcUI7SUFDckIsZ0JBQWdCO0lBQ2hCLGlCQUFpQjtJQUNqQixrQkFBa0I7SUFDbEIsdUJBQXVCO0lBQ3ZCLGFBQWE7SUFDYiwwQkFBMEI7SUFDMUIsaUJBQWlCO0lBQ2pCLG9CQUFvQjtJQUNwQiw4RUFBOEU7SUFDOUUscUJBQXFCO0lBQ3JCLHFCQUFjO0lBQWQsY0FBYztJQUNkLHVCQUFvQjtRQUFwQixvQkFBb0IsRUFBRTtJQUN0QjtNQUNFLGtQQUFrUDtNQUNsUCxzQkFBc0I7TUFDdEIsWUFBWTtNQUNaLGFBQWE7TUFDYixZQUFZO01BQ1osZUFBZTtNQUNmLGlCQUFpQjtNQUNqQixvQ0FBNEI7Y0FBNUIsNEJBQTRCLEVBQUU7SUFDaEM7TUFDRSwwQkFBMEIsRUFBRTtFQUNoQztJQUNFLGdCQUFnQjtJQUNoQixrQkFBa0IsRUFBRTtFQUN0QjtJQUNFLGlCQUFpQixFQUFFO0VBQ3JCO0lBQ0UscUJBQWM7SUFBZCxjQUFjO0lBQ2QsMkJBQXVCO1FBQXZCLHVCQUF1QjtJQUN2QixzQkFBd0I7UUFBeEIsd0JBQXdCO0lBQ3hCLHVCQUFvQjtRQUFwQixvQkFBb0I7SUFDcEIsbUJBQW1CO0lBQ25CLGtCQUFrQjtJQUNsQixtQkFBbUIsRUFBRTtFQUN2QjtJQUNFO01BQ0Usa0JBQWtCO01BQ2xCLGtCQUFrQixFQUFFO01BQ3BCO1FBQ0UsZ0JBQWdCO1FBQ2hCLGtCQUFrQixFQUFFO01BQ3RCO1FBQ0UsZ0JBQWdCO1FBQ2hCLGtCQUFrQixFQUFFLEVBQUU7RUFDNUI7SUFDRTtNQUNFLGdCQUFnQjtNQUNoQixrQkFBa0I7TUFDbEIsbUJBQW1CLEVBQUU7SUFDdkI7TUFDRSxnQkFBZ0I7TUFDaEIsa0JBQWtCLEVBQUU7SUFDdEI7TUFDRSxnQkFBZ0IsRUFBRSxFQUFFOztBQUUxQjtFQUNFLGNBQWMsRUFBRTtFQUNoQjtJQUNFLHFCQUFxQixFQUFFO0VBQ3pCOzs7SUFHRSxxQkFBYztJQUFkLGNBQWMsRUFBRTtJQUNoQjs7Ozs7TUFLRSxjQUFjLEVBQUU7RUFDcEI7O0lBRUUsaUJBQWlCLEVBQUU7SUFDbkI7TUFDRTs7UUFFRSxnQkFBZ0I7UUFDaEIsbUJBQW1CLEVBQUU7UUFDckI7O1VBRUUsaUJBQWlCLEVBQUUsRUFBRTtFQUM3QjtJQUNFLHdCQUFvQjtRQUFwQixvQkFBb0IsRUFBRTtJQUN0QjtNQUNFLGtCQUFrQixFQUFFO0VBQ3hCO0lBQ0UsZ0NBQTRCO1FBQTVCLDRCQUE0QjtJQUM1QixrQkFBa0IsRUFBRTtJQUNwQjtNQUNFLG1CQUFtQixFQUFFO0VBQ3pCO0lBQ0UsMkJBQXVCO1FBQXZCLHVCQUF1QjtJQUN2Qix1QkFBb0I7UUFBcEIsb0JBQW9CO0lBQ3BCLG1CQUFtQixFQUFFO0lBQ3JCO01BQ0UsYUFBYTtNQUNiLGdCQUFnQixFQUFFO0VBQ3RCO0lBQ0UsaUJBQWlCLEVBQUU7RUFDckI7SUFDRTs7TUFFRSxtQ0FBK0I7VUFBL0IsK0JBQStCO01BQy9CLHVCQUFvQjtVQUFwQixvQkFBb0IsRUFBRTtNQUN0Qjs7UUFFRSxvQkFBb0I7UUFDcEIsZUFBZTtRQUNmLGdCQUFnQixFQUFFO0lBQ3RCO01BQ0UscUJBQXFCLEVBQUUsRUFBRTtFQUM3QjtJQUNFLG1CQUEwQjtRQUExQiwwQkFBMEIsRUFBRTtJQUM1QjtNQUNFLFlBQVksRUFBRTtFQUNsQjtJQUNFLGdCQUFnQjtJQUNoQixrQkFBa0I7SUFDbEIsd0JBQXdCLEVBQUU7SUFDMUI7TUFDRSxjQUFjLEVBQUU7RUFDcEI7SUFDRSw4RUFBOEU7SUFDOUUsbUJBQW1CO0lBQ25CLGtCQUFrQjtJQUNsQixnQkFBZ0I7SUFDaEIsa0JBQWtCO0lBQ2xCLHVCQUF1QjtJQUN2QiwwQkFBMEI7SUFDMUIsZUFBZTtJQUNmLGNBQWMsRUFBRTtFQUNsQjtJQUNFLHNCQUFzQjtJQUN0QixnQkFBZ0I7SUFDaEIsaUJBQWlCO0lBQ2pCLGlCQUFpQixFQUFFO0VBQ3JCO0lBQ0UsZ0JBQWdCO0lBQ2hCLGtCQUFrQjtJQUNsQix3QkFBd0I7SUFDeEIsZUFBZTtJQUNmLGlCQUFpQixFQUFFO0lBQ25CO01BQ0UsZ0JBQWdCO01BQ2hCLGtCQUFrQjtNQUNsQix3QkFBd0IsRUFBRTtFQUM5QjtJQUNFLGlCQUFpQixFQUFFO0VBQ3JCO0lBQ0UsZ0JBQWdCLEVBQUU7RUFDcEI7SUFDRSxnQkFBZ0I7SUFDaEIsa0JBQWtCO0lBQ2xCLHdCQUF3QjtJQUN4QixlQUFlO0lBQ2Ysb0JBQW9CO0lBQ3BCLG1CQUFtQjtJQUNuQixpQkFBaUI7SUFDakIsbUJBQW1CLEVBQUU7SUFDckI7TUFDRSxtREFBbUQ7TUFDbkQsc0JBQXNCO01BQ3RCLFlBQVk7TUFDWixhQUFhO01BQ2IsWUFBWTtNQUNaLG1CQUFtQjtNQUNuQixRQUFRO01BQ1IsU0FBUyxFQUFFO0VBQ2Y7SUFDRSxrQkFBYztJQUFkLGNBQWM7SUFDZCw4QkFBbUM7UUFBbkMsbUNBQW1DO0lBQ25DLHNCQUFzQjtJQUN0QixtQkFBbUI7SUFDbkIsV0FBVyxFQUFFO0lBQ2I7TUFDRSxpQkFBaUIsRUFBRTtJQUNyQjtNQUNFLG9CQUFvQjtNQUNwQixZQUFZLEVBQUU7SUFDaEI7TUFDRTtRQUNFLDBCQUErQjtZQUEvQiwrQkFBK0IsRUFBRSxFQUFFO0lBQ3ZDO01BQ0U7UUFDRSxzQkFBMkI7WUFBM0IsMkJBQTJCLEVBQUUsRUFBRTtFQUNyQztJQUNFLG9CQUFvQjtJQUNwQixvQkFBb0I7SUFDcEIsd0JBQXdCO0lBQ3hCLHVCQUF1QjtJQUN2QixhQUFhLEVBQUU7SUFDZjs7TUFFRSxlQUFlLEVBQUU7O0FBRXZCO0VBQ0UsaUJBQWlCO0VBQ2pCLG1CQUFtQjtFQUNuQixtQkFBbUIsRUFBRTtFQUNyQjtJQUNFLG1CQUFtQjtJQUNuQixPQUFPO0lBQ1AsYUFBYTtJQUNiLCtDQUErQztJQUMvQyxZQUFZO0lBQ1osZUFBZSxFQUFFOztBQUVyQjtFQUNFLHFCQUFjO0VBQWQsY0FBYztFQUNkLGlCQUFpQjtFQUNqQixzQkFBd0I7TUFBeEIsd0JBQXdCO0VBQ3hCLGlCQUFpQixFQUFFO0VBQ25CO0lBQ0Usb0JBQW9CO0lBQ3BCLG1CQUFtQjtJQUNuQix3QkFBd0I7SUFDeEIscUJBQWM7SUFBZCxjQUFjO0lBQ2QsMkJBQXVCO1FBQXZCLHVCQUF1QjtJQUN2QixzQkFBd0I7UUFBeEIsd0JBQXdCO0lBQ3hCLG1CQUFtQjtJQUNuQixvQkFBZ0I7UUFBaEIsZ0JBQWdCO0lBQ2hCLG1CQUFtQixFQUFFO0lBQ3JCO01BQ0UsZ0JBQWdCLEVBQUU7SUFDcEI7TUFDRSxvQkFBb0IsRUFBRTtNQUN0QjtRQUNFLG1DQUFtQyxFQUFFO0VBQzNDO0lBQ0UsZ0JBQWdCO0lBQ2hCLG9CQUFvQjtJQUNwQix3QkFBd0I7SUFDeEIsYUFBYTtJQUNiLGNBQWMsRUFBRTtFQUNsQjtJQUNFLGdCQUFnQjtJQUNoQixrQkFBa0I7SUFDbEIsd0JBQXdCO0lBQ3hCLGdDQUFnQztJQUNoQyxjQUFjO0lBQ2Qsb0JBQW9CLEVBQUU7RUFDeEI7SUFDRSxpQkFBaUI7SUFDakIsZ0JBQWdCO0lBQ2hCLGtCQUFrQjtJQUNsQix1QkFBdUI7SUFDdkIsMEJBQTBCO0lBQzFCLG1CQUFtQjtJQUNuQixpQkFBaUI7SUFDakIsbUJBQW1CO0lBQ25CLG9DQUFvQyxFQUFFO0lBQ3RDO01BQ0Usc0JBQXNCO01BQ3RCLGFBQWE7TUFDYixZQUFZO01BQ1oscUJBQXFCLEVBQUU7RUFDM0I7SUFDRTtNQUNFLDJCQUF1QjtVQUF2Qix1QkFBdUI7TUFDdkIsdUJBQW9CO1VBQXBCLG9CQUFvQixFQUFFO01BQ3RCO1FBQ0UsZUFBVztZQUFYLFdBQVc7UUFDWCxnQkFBZ0I7UUFDaEIsaUJBQWlCO1FBQ2pCLGlCQUFpQixFQUFFLEVBQUU7O0FBRTdCO0VBQ0UsOERBQThEO0VBQzlELGtCQUFrQjtFQUNsQixtQkFBbUI7RUFDbkIsc0JBQXNCLEVBQUU7RUFDeEI7SUFDRSxlQUFlLEVBQUU7RUFDbkI7SUFDRSxpQkFBaUI7SUFDakIsZUFBZTtJQUNmLG1CQUFtQjtJQUNuQixlQUFlLEVBQUU7O0FBRXJCO0VBQ0UsaUJBQWlCLEVBQUU7RUFDbkI7SUFDRSxlQUFlLEVBQUU7O0FBRXJCO0VBQ0Usc0JBQXNCLEVBQUU7RUFDeEI7SUFDRTtNQUNFLHFCQUFxQixFQUFFLEVBQUU7RUFDN0I7SUFDRSxzQkFBc0I7SUFDdEIsVUFBVTtJQUNWLFdBQVc7SUFDWCxxQkFBYztJQUFkLGNBQWM7SUFDZCxtQkFBbUI7SUFDbkIsb0JBQW9CLEVBQUU7RUFDeEI7SUFDRSxxQkFBYztJQUFkLGNBQWM7SUFDZCx1QkFBK0I7UUFBL0IsK0JBQStCO0lBQy9CLHlCQUFzQjtRQUF0QixzQkFBc0IsRUFBRTtJQUN4QjtNQUNFLGlCQUFpQjtNQUNqQixvQkFBb0I7TUFDcEIsZ0JBQWdCO01BQ2hCLHdCQUF3QjtNQUN4QixlQUFlO01BQ2YsaUJBQWlCLEVBQUU7SUFDckI7TUFDRSxpQkFBaUI7TUFDakIsZ0JBQWdCO01BQ2hCLG9CQUFvQjtNQUNwQix3QkFBd0I7TUFDeEIsZUFBZSxFQUFFO0lBQ25CO01BQ0UsaUJBQWlCO01BQ2pCLGVBQWU7TUFDZixnQkFBZ0I7TUFDaEIsdUJBQXVCO01BQ3ZCLGVBQWU7TUFDZiwwQkFBMEIsRUFBRTtJQUM5QjtNQUNFLG1DQUEyQjtjQUEzQiwyQkFBMkIsRUFBRTtFQUNqQztJQUNFLGVBQWU7SUFDZixxQkFBaUI7UUFBakIsaUJBQWlCO0lBQ2pCLGNBQWMsRUFBRTtJQUNoQjtNQUNFLGVBQWU7TUFDZixZQUFZLEVBQUU7SUFDaEI7TUFDRSxpQkFBaUI7TUFDakIsbUJBQW1CLEVBQUU7SUFDdkI7TUFDRSxZQUFZLEVBQUU7SUFDaEI7TUFDRSxrQkFBa0I7TUFDbEIsZ0JBQWdCO01BQ2hCLHVCQUF1QjtNQUN2QiwwQkFBMEI7TUFDMUIsZUFBZTtNQUNmLGlCQUFpQjtNQUNqQixpQkFBaUIsRUFBRTtJQUNyQjtNQUNFLGdCQUFnQjtNQUNoQixpQkFBaUI7TUFDakIsZUFBZTtNQUNmLGlCQUFpQixFQUFFO0lBQ3JCO01BQ0UsZUFBZTtNQUNmLGtCQUFrQjtNQUNsQixnQkFBZ0I7TUFDaEIsd0JBQXdCLEVBQUU7RUFDOUI7SUFDRTtNQUNFLG1CQUFtQjtNQUNuQixvQkFBb0IsRUFBRTtJQUN4QjtNQUNFLGNBQWMsRUFBRSxFQUFFO0VBQ3RCO0lBQ0U7TUFDRSxvQkFBZ0I7VUFBaEIsZ0JBQWdCLEVBQUU7SUFDcEI7TUFDRSxrQkFBYztVQUFkLGNBQWMsRUFBRSxFQUFFO0VBQ3RCO0lBQ0U7TUFDRSxtQkFBZTtVQUFmLGVBQWUsRUFBRTtJQUNuQjtNQUNFLGNBQWMsRUFBRSxFQUFFOztBQUV4Qjs7OztFQUlFLGdCQUFnQjtFQUNoQixrQkFBa0I7RUFDbEIsd0JBQXdCO0VBQ3hCLGVBQWU7RUFDZixjQUFjLEVBQUU7O0FBRWxCOzs7O0VBSUUsZ0JBQWdCO0VBQ2hCLG9CQUFvQjtFQUNwQix3QkFBd0I7RUFDeEIsZUFBZTtFQUNmLGlCQUFpQixFQUFFOztBQUVyQjtFQUNFLHlCQUF5QjtFQUN6QixpQkFBaUI7RUFDakIsb0JBQWdCO01BQWhCLGdCQUFnQixFQUFFO0VBQ2xCO0lBQ0UsbUJBQW1CLEVBQUU7SUFDckI7TUFDRSxpQkFBaUIsRUFBRTtFQUN2QjtJQUNFO01BQ0UsbUJBQW1CO01BQ25CLG9CQUFvQixFQUFFO01BQ3RCO1FBQ0UsY0FBYyxFQUFFLEVBQUU7O0FBRTFCO0VBQ0UscUJBQWM7RUFBZCxjQUFjO0VBQ2Qsb0JBQW9CO0VBQ3BCLFdBQVc7RUFDWCx1QkFBK0I7TUFBL0IsK0JBQStCO0VBQy9CLGlCQUFpQjtFQUNqQixZQUFZLEVBQUU7RUFDZDtJQUNFLHNEQUFzRDtJQUN0RCw0QkFBNEI7SUFDNUIsNkJBQTZCO0lBQzdCLGVBQWU7SUFDZixhQUFhLEVBQUU7RUFDakI7SUFDRTtNQUNFLHNCQUF3QjtVQUF4Qix3QkFBd0I7TUFDeEIsb0JBQWdCO1VBQWhCLGdCQUFnQjtNQUNoQixpQkFBaUIsRUFBRTtNQUNuQjtRQUNFLGFBQWEsRUFBRSxFQUFFO0VBQ3ZCO0lBQ0UsWUFBWSxFQUFFO0VBQ2hCO0lBQ0UsNkJBQTZCO0lBQzdCLFlBQVksRUFBRTtFQUNoQjtJQUNFLDZCQUE2QjtJQUM3QixZQUFZLEVBQUU7RUFDaEI7SUFDRSw4QkFBOEI7SUFDOUIsWUFBWSxFQUFFO0VBQ2hCO0lBQ0UsOEJBQThCO0lBQzlCLGFBQWEsRUFBRTtFQUNqQjtJQUNFLDhCQUE4QjtJQUM5QixZQUFZLEVBQUU7RUFDaEI7SUFDRSw4QkFBOEI7SUFDOUIsWUFBWSxFQUFFOztBQUVsQjtFQUNFLG1CQUFtQixFQUFFOztBQUV2QjtFQUNFLG1CQUFtQjtFQUNuQixnQkFBZ0I7RUFDaEIscUJBQXFCO0VBQ3JCLGFBQWEsRUFBRTtFQUNmO0lBQ0U7TUFDRSxZQUFZO01BQ1osa0JBQWtCO01BQ2xCLHFCQUFxQixFQUFFLEVBQUU7O0FBRS9CO0VBQ0Usb0JBQW9CO0VBQ3BCLHFCQUFjO0VBQWQsY0FBYztFQUNkLHFCQUF1QjtNQUF2Qix1QkFBdUI7RUFDdkIsb0JBQWdCO01BQWhCLGdCQUFnQjtFQUNoQixnQkFBZ0IsRUFBRTtFQUNsQjtJQUNFLGtCQUFrQjtJQUNsQixpQkFBaUIsRUFBRTtFQUNyQjtJQUNFLGFBQWE7SUFDYixZQUFZO0lBQ1osc0JBQXNCO0lBQ3RCLHNCQUFzQjtJQUN0QixtQkFBbUIsRUFBRTtJQUNyQjtNQUNFLHFFQUFxRSxFQUFFO0lBQ3pFO01BQ0UsbUVBQW1FLEVBQUU7SUFDdkU7TUFDRSxpRUFBaUUsRUFBRTtJQUNyRTtNQUNFLHdFQUF3RSxFQUFFO0lBQzVFO01BQ0UsY0FBYyxFQUFFO0VBQ3BCO0lBQ0U7TUFDRSwwQkFBOEI7VUFBOUIsOEJBQThCO01BQzlCLGFBQWE7TUFDYixlQUFlLEVBQUU7TUFDakI7UUFDRSxnQkFBZ0IsRUFBRSxFQUFFOztBQUU1QjtFQUNFLGlCQUFpQjtFQUNqQixvQkFBb0I7RUFDcEIsYUFBYSxFQUFFO0VBQ2Y7SUFDRTtNQUNFLFlBQVk7TUFDWixpQkFBaUI7TUFDakIsbUJBQW1CLEVBQUUsRUFBRTs7QUFFN0I7RUFDRSwwQkFBMEI7RUFDMUIsb0JBQW9CO0VBQ3BCLGtCQUFrQixFQUFFO0VBQ3BCO0lBQ0UsY0FBYztJQUNkLG1CQUFtQjtJQUNuQixhQUFhLEVBQUU7O0FBRW5CO0VBQ0UsbUJBQW1CO0VBQ25CLFlBQVk7RUFDWixjQUFjO0VBQ2QsZUFBZTtFQUNmLGlCQUFpQjtFQUNqQixXQUFXO0VBQ1gsbUJBQW1CO0VBQ25CLFdBQVc7RUFDWCx5Q0FBaUM7VUFBakMsaUNBQWlDLEVBQUU7RUFDbkM7SUFDRSxpQkFBaUI7SUFDakIsbUJBQW1CLEVBQUU7RUFDdkI7SUFDRSxtQkFBbUI7SUFDbkIsYUFBYTtJQUNiLG1CQUFtQjtJQUNuQiwwQ0FBMEMsRUFBRTtJQUM1QztNQUNFLFlBQVksRUFBRTtJQUNoQjtNQUNFLFlBQVksRUFBRTs7QUFFcEI7RUFDRSxvRUFBb0UsRUFBRSIsImZpbGUiOiJwYWdlcy9lbnRlcnByaXNlL3BsYXRmb3JtLmNzcyIsInNvdXJjZXNDb250ZW50IjpbIi5lZS1oZXJvIHtcbiAgbWF4LXdpZHRoOiA2NDBweDtcbiAgcGFkZGluZy10b3A6IDEzMHB4O1xuICBwYWRkaW5nLWJvdHRvbTogMTYwcHg7IH1cbiAgLmVlLWhlcm86OmJlZm9yZSwgLmVlLWhlcm86OmFmdGVyIHtcbiAgICBkaXNwbGF5OiBub25lOyB9XG4gIC5lZS1oZXJvIGgxIHtcbiAgICBmb250LXNpemU6IDUycHg7XG4gICAgbGluZS1oZWlnaHQ6IDYycHg7XG4gICAgbWF4LXdpZHRoOiA5MzBweDtcbiAgICBsZXR0ZXItc3BhY2luZzogLTAuMDNlbTtcbiAgICBjb2xvcjogIzAyMDgxNDtcbiAgICBtYXJnaW4tdG9wOiAwO1xuICAgIG1hcmdpbi1ib3R0b206IDE2cHg7IH1cbiAgLmVlLWhlcm8gaDQge1xuICAgIGZvbnQtZmFtaWx5OiBcIlJvYm90byBNb25vXCIsIE1lbmxvLCBNb25hY28sIENvbnNvbGFzLCBcIkNvdXJpZXIgTmV3XCIsIG1vbm9zcGFjZTtcbiAgICBmb250LXdlaWdodDogYm9sZDtcbiAgICBmb250LXNpemU6IDEzcHg7XG4gICAgbGluZS1oZWlnaHQ6IDI2cHg7XG4gICAgbGV0dGVyLXNwYWNpbmc6IDAuMTRlbTtcbiAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xuICAgIGNvbG9yOiAjOTJBMUIzO1xuICAgIG1hcmdpbi1ib3R0b206IDI5cHg7IH1cbiAgLmVlLWhlcm8gcCB7XG4gICAgZm9udC1mYW1pbHk6IFwiRWluYVwiLCBcIkhlbHZldGljYSBOZXVlXCIsIEhlbHZldGljYSwgc2Fucy1zZXJpZjtcbiAgICBmb250LXNpemU6IDI0cHg7XG4gICAgZm9udC13ZWlnaHQ6IDQwMDtcbiAgICBsaW5lLWhlaWdodDogMzZweDtcbiAgICBsZXR0ZXItc3BhY2luZzogLTAuMDRlbTtcbiAgICBjb2xvcjogcmdiYSgzOSwgNTAsIDYzLCAwLjgpOyB9XG4gIC5lZS1oZXJvIC5idG4ge1xuICAgIHBhZGRpbmctbGVmdDogMjRweDtcbiAgICBwYWRkaW5nLXJpZ2h0OiAyMHB4O1xuICAgIHBhZGRpbmctdG9wOiAxOHB4O1xuICAgIHBhZGRpbmctYm90dG9tOiAxOHB4O1xuICAgIGZvbnQtc2l6ZTogMTRweDtcbiAgICBtYXJnaW4tdG9wOiAxNnB4O1xuICAgIGxpbmUtaGVpZ2h0OiAyMHB4O1xuICAgIGxldHRlci1zcGFjaW5nOiAwLjA4ZW07XG4gICAgY29sb3I6IHdoaXRlO1xuICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XG4gICAgZm9udC13ZWlnaHQ6IDcwMDtcbiAgICBiYWNrZ3JvdW5kOiAjMzg4MEZGO1xuICAgIGJveC1zaGFkb3c6IDBweCAycHggNHB4IHJnYmEoMiwgOCwgMjAsIDAuMSksIDBweCAxcHggMnB4IHJnYmEoMiwgOCwgMjAsIDAuMDgpO1xuICAgIGJvcmRlci1yYWRpdXM6IDIxMHB4O1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjsgfVxuICAgIC5lZS1oZXJvIC5idG46OmFmdGVyIHtcbiAgICAgIGJhY2tncm91bmQtaW1hZ2U6IHVybCgnZGF0YTppbWFnZS9zdmcreG1sO3V0ZjgsPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgZmlsbD1cIndoaXRlXCIgdmlld0JveD1cIjAgMCA1MTIgNTEyXCI+PHBhdGggZD1cIk04NSAyNzcuMzc1aDI1OS43MDRMMjI1LjAwMiAzOTcuMDc3IDI1NiA0MjdsMTcxLTE3MUwyNTYgODVsLTI5LjkyMiAyOS45MjQgMTE4LjYyNiAxMTkuNzAxSDg1djQyLjc1elwiLz48L3N2Zz4nKTtcbiAgICAgIGJhY2tncm91bmQtc2l6ZTogMTAwJTtcbiAgICAgIGNvbnRlbnQ6ICcnO1xuICAgICAgaGVpZ2h0OiAyMHB4O1xuICAgICAgd2lkdGg6IDIwcHg7XG4gICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgIG1hcmdpbi1sZWZ0OiA4cHg7XG4gICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTFweCk7IH1cbiAgICAuZWUtaGVybyAuYnRuOmhvdmVyIHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6ICM0ZjhiZjU7IH1cbiAgLmVlLWhlcm8tLWxhcmdlIGgxIHtcbiAgICBmb250LXNpemU6IDYycHg7XG4gICAgbGluZS1oZWlnaHQ6IDY5cHg7IH1cbiAgLmVlLWhlcm8tLXdpZGUge1xuICAgIG1heC13aWR0aDogOTYwcHg7IH1cbiAgLmVlLWhlcm8tLWNlbnRlcmVkIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgbWFyZ2luLWxlZnQ6IGF1dG87XG4gICAgbWFyZ2luLXJpZ2h0OiBhdXRvOyB9XG4gIEBtZWRpYSAobWF4LXdpZHRoOiA3NjdweCkge1xuICAgIC5lZS1oZXJvIHtcbiAgICAgIHBhZGRpbmctdG9wOiA3MHB4O1xuICAgICAgcGFkZGluZy1ib3R0b206IDA7IH1cbiAgICAgIC5lZS1oZXJvIGgxIHtcbiAgICAgICAgZm9udC1zaXplOiA0NHB4O1xuICAgICAgICBsaW5lLWhlaWdodDogNTJweDsgfVxuICAgICAgLmVlLWhlcm8tLWxhcmdlIGgxIHtcbiAgICAgICAgZm9udC1zaXplOiA1MHB4O1xuICAgICAgICBsaW5lLWhlaWdodDogNjBweDsgfSB9XG4gIEBtZWRpYSAobWF4LXdpZHRoOiA0ODBweCkge1xuICAgIC5lZS1oZXJvIGgxIHtcbiAgICAgIGZvbnQtc2l6ZTogMzZweDtcbiAgICAgIGxpbmUtaGVpZ2h0OiA0NHB4O1xuICAgICAgbWFyZ2luLWJvdHRvbTogNnB4OyB9XG4gICAgLmVlLWhlcm8tLWxhcmdlIGgxIHtcbiAgICAgIGZvbnQtc2l6ZTogNDJweDtcbiAgICAgIGxpbmUtaGVpZ2h0OiA1MnB4OyB9XG4gICAgLmVlLWhlcm8gLmJ0biB7XG4gICAgICBtYXJnaW4tdG9wOiA4cHg7IH0gfVxuXG4uZWUtbWFpbiB7XG4gIG1hcmdpbi10b3A6IDA7IH1cbiAgLmVlLW1haW4gc2VjdGlvbiB7XG4gICAgbWFyZ2luLWJvdHRvbTogMjAwcHg7IH1cbiAgLmVlLW1haW4gLmxlZnQsXG4gIC5lZS1tYWluIC5yaWdodCxcbiAgLmVlLW1haW4gLmNlbnRlciB7XG4gICAgZGlzcGxheTogZmxleDsgfVxuICAgIC5lZS1tYWluIC5sZWZ0OjpiZWZvcmUsIC5lZS1tYWluIC5sZWZ0OjphZnRlcixcbiAgICAuZWUtbWFpbiAucmlnaHQ6OmJlZm9yZSxcbiAgICAuZWUtbWFpbiAucmlnaHQ6OmFmdGVyLFxuICAgIC5lZS1tYWluIC5jZW50ZXI6OmJlZm9yZSxcbiAgICAuZWUtbWFpbiAuY2VudGVyOjphZnRlciB7XG4gICAgICBkaXNwbGF5OiBub25lOyB9XG4gIC5lZS1tYWluIC5sZWZ0IC5jb250ZW50LFxuICAuZWUtbWFpbiAucmlnaHQgLmNvbnRlbnQge1xuICAgIG1heC13aWR0aDogNDgwcHg7IH1cbiAgICBAbWVkaWEgKG1heC13aWR0aDogNzY3cHgpIHtcbiAgICAgIC5lZS1tYWluIC5sZWZ0IC5jb250ZW50LFxuICAgICAgLmVlLW1haW4gLnJpZ2h0IC5jb250ZW50IHtcbiAgICAgICAgbWF4LXdpZHRoOiAxMDAlO1xuICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7IH1cbiAgICAgICAgLmVlLW1haW4gLmxlZnQgLmNvbnRlbnQgbGksXG4gICAgICAgIC5lZS1tYWluIC5yaWdodCAuY29udGVudCBsaSB7XG4gICAgICAgICAgdGV4dC1hbGlnbjogbGVmdDsgfSB9XG4gIC5lZS1tYWluIC5sZWZ0IHtcbiAgICBmbGV4LWRpcmVjdGlvbjogcm93OyB9XG4gICAgLmVlLW1haW4gLmxlZnQgLmdyYXBoaWNzIHtcbiAgICAgIG1hcmdpbi1sZWZ0OiBhdXRvOyB9XG4gIC5lZS1tYWluIC5yaWdodCB7XG4gICAgZmxleC1kaXJlY3Rpb246IHJvdy1yZXZlcnNlO1xuICAgIG1hcmdpbi1sZWZ0OiBhdXRvOyB9XG4gICAgLmVlLW1haW4gLnJpZ2h0IC5ncmFwaGljcyB7XG4gICAgICBtYXJnaW4tcmlnaHQ6IGF1dG87IH1cbiAgLmVlLW1haW4gLmNlbnRlciB7XG4gICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjsgfVxuICAgIC5lZS1tYWluIC5jZW50ZXIgLmNvbnRlbnQge1xuICAgICAgd2lkdGg6IDg5NHB4O1xuICAgICAgbWF4LXdpZHRoOiAxMDAlOyB9XG4gIC5lZS1tYWluIC5mdWxsIC5jb250ZW50IHtcbiAgICBtYXgtd2lkdGg6IDU2OHB4OyB9XG4gIEBtZWRpYSAobWF4LXdpZHRoOiA3NjdweCkge1xuICAgIC5lZS1tYWluIC5yaWdodCxcbiAgICAuZWUtbWFpbiAubGVmdCB7XG4gICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uLXJldmVyc2U7XG4gICAgICBhbGlnbi1pdGVtczogY2VudGVyOyB9XG4gICAgICAuZWUtbWFpbiAucmlnaHQgLmdyYXBoaWNzLFxuICAgICAgLmVlLW1haW4gLmxlZnQgLmdyYXBoaWNzIHtcbiAgICAgICAgbWFyZ2luLWJvdHRvbTogMjRweDtcbiAgICAgICAgbWFyZ2luLWxlZnQ6IDA7XG4gICAgICAgIG1hcmdpbi1yaWdodDogMDsgfVxuICAgIC5lZS1tYWluIHNlY3Rpb24ge1xuICAgICAgbWFyZ2luLWJvdHRvbTogMTAwcHg7IH0gfVxuICAuZWUtbWFpbiAuZ3JhcGhpY3Mge1xuICAgIGp1c3RpZnktY29udGVudDogZmxleC1lbmQ7IH1cbiAgICAuZWUtbWFpbiAuZ3JhcGhpY3MgaW1nIHtcbiAgICAgIHdpZHRoOiAxMDAlOyB9XG4gIC5lZS1tYWluIGgyIHtcbiAgICBmb250LXNpemU6IDQ0cHg7XG4gICAgbGluZS1oZWlnaHQ6IDUxcHg7XG4gICAgbGV0dGVyLXNwYWNpbmc6IC0wLjAzZW07IH1cbiAgICAuZWUtbWFpbiBoMjpmaXJzdC1jaGlsZCB7XG4gICAgICBtYXJnaW4tdG9wOiAwOyB9XG4gIC5lZS1tYWluIC5lZS1zZWN0aW9uX190aXRsZSB7XG4gICAgZm9udC1mYW1pbHk6IFwiUm9ib3RvIE1vbm9cIiwgTWVubG8sIE1vbmFjbywgQ29uc29sYXMsIFwiQ291cmllciBOZXdcIiwgbW9ub3NwYWNlO1xuICAgIGZvbnQtc3R5bGU6IG5vcm1hbDtcbiAgICBmb250LXdlaWdodDogYm9sZDtcbiAgICBmb250LXNpemU6IDEycHg7XG4gICAgbGluZS1oZWlnaHQ6IDIzcHg7XG4gICAgbGV0dGVyLXNwYWNpbmc6IDAuMTRlbTtcbiAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xuICAgIGNvbG9yOiAjNUI3MDhCO1xuICAgIG1hcmdpbi10b3A6IDA7IH1cbiAgLmVlLW1haW4gLmVlLXNlY3Rpb25fX2N0YSB7XG4gICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgIGZvbnQtc2l6ZTogMThweDtcbiAgICBmb250LXdlaWdodDogNTAwO1xuICAgIG1hcmdpbi10b3A6IDE2cHg7IH1cbiAgLmVlLW1haW4gcCB7XG4gICAgZm9udC1zaXplOiAyMHB4O1xuICAgIGxpbmUtaGVpZ2h0OiAzMXB4O1xuICAgIGxldHRlci1zcGFjaW5nOiAtMC4wMmVtO1xuICAgIGNvbG9yOiAjNUI3MDhCO1xuICAgIG1hcmdpbi10b3A6IDE4cHg7IH1cbiAgICAuZWUtbWFpbiBwLnNtIHtcbiAgICAgIGZvbnQtc2l6ZTogMTZweDtcbiAgICAgIGxpbmUtaGVpZ2h0OiAyOXB4O1xuICAgICAgbGV0dGVyLXNwYWNpbmc6IC0wLjAxZW07IH1cbiAgLmVlLW1haW4gdWw6bm90KC5mcmFtZXdvcmtzKSB7XG4gICAgbWFyZ2luLXRvcDogNTRweDsgfVxuICAuZWUtbWFpbiAuY29udGVudCB1bCB7XG4gICAgcGFkZGluZy1sZWZ0OiAwOyB9XG4gIC5lZS1tYWluIC5jb250ZW50IGxpIHtcbiAgICBmb250LXNpemU6IDE2cHg7XG4gICAgbGluZS1oZWlnaHQ6IDIzcHg7XG4gICAgbGV0dGVyLXNwYWNpbmc6IC0wLjAyZW07XG4gICAgY29sb3I6ICMxQTIzMkY7XG4gICAgbWFyZ2luLWJvdHRvbTogNDBweDtcbiAgICBwYWRkaW5nLWxlZnQ6IDMwcHg7XG4gICAgbGlzdC1zdHlsZTogbm9uZTtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7IH1cbiAgICAuZWUtbWFpbiAuY29udGVudCBsaTo6YmVmb3JlIHtcbiAgICAgIGJhY2tncm91bmQtaW1hZ2U6IHVybChcIi9pbWcvZW50ZXJwcmlzZS9jaGVjay5zdmdcIik7XG4gICAgICBiYWNrZ3JvdW5kLXNpemU6IDEwMCU7XG4gICAgICBjb250ZW50OiAnJztcbiAgICAgIGhlaWdodDogMTBweDtcbiAgICAgIHdpZHRoOiAxM3B4O1xuICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgbGVmdDogMDtcbiAgICAgIHRvcDogOHB4OyB9XG4gIC5lZS1tYWluIC5mZWF0dXJlcyB7XG4gICAgZGlzcGxheTogZ3JpZDtcbiAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IDFmciAxZnIgMWZyO1xuICAgIGdyaWQtY29sdW1uLWdhcDogNjRweDtcbiAgICBncmlkLXJvdy1nYXA6IDI0cHg7XG4gICAgcGFkZGluZzogMDsgfVxuICAgIC5lZS1tYWluIC5mZWF0dXJlcyBsaSB7XG4gICAgICBsaXN0LXN0eWxlOiBub25lOyB9XG4gICAgLmVlLW1haW4gLmZlYXR1cmVzIC5pY29uIHtcbiAgICAgIG1hcmdpbi1ib3R0b206IDE2cHg7XG4gICAgICB3aWR0aDogNDhweDsgfVxuICAgIEBtZWRpYSAobWF4LXdpZHRoOiA5OTFweCkge1xuICAgICAgLmVlLW1haW4gLmZlYXR1cmVzIHtcbiAgICAgICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiAxZnIgMWZyOyB9IH1cbiAgICBAbWVkaWEgKG1heC13aWR0aDogNTAwcHgpIHtcbiAgICAgIC5lZS1tYWluIC5mZWF0dXJlcyB7XG4gICAgICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogMWZyOyB9IH1cbiAgLmVlLW1haW4gLmN0YS1jYXJkIHtcbiAgICBiYWNrZ3JvdW5kOiAjNGE4YmZjO1xuICAgIGJvcmRlci1yYWRpdXM6IDEycHg7XG4gICAgcGFkZGluZzogNzJweCA3MnB4IDYwcHg7XG4gICAgYmFja2dyb3VuZC1zaXplOiBjb3ZlcjtcbiAgICBjb2xvcjogd2hpdGU7IH1cbiAgICAuZWUtbWFpbiAuY3RhLWNhcmQgLmVlLXNlY3Rpb25fX3RpdGxlLFxuICAgIC5lZS1tYWluIC5jdGEtY2FyZCBwIHtcbiAgICAgIGNvbG9yOiAjQ0VENkUwOyB9XG5cbiNob3ctdG8ge1xuICBtYXJnaW4tYm90dG9tOiAwO1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIHBhZGRpbmctdG9wOiAxNDBweDsgfVxuICAjaG93LXRvOjpiZWZvcmUge1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICB0b3A6IDA7XG4gICAgd2lkdGg6IDEwMHZ3O1xuICAgIGJvcmRlci10b3A6IDFweCBzb2xpZCByZ2JhKDE0NiwgMTYxLCAxNzksIDAuMyk7XG4gICAgY29udGVudDogJyc7XG4gICAgZGlzcGxheTogYmxvY2s7IH1cblxuLmNhcmRzLS1yZWQtdi1ibHVlIHtcbiAgZGlzcGxheTogZmxleDtcbiAgdGV4dC1hbGlnbjogbGVmdDtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gIG1hcmdpbi10b3A6IDM4cHg7IH1cbiAgLmNhcmRzLS1yZWQtdi1ibHVlX19jYXJkIHtcbiAgICBiYWNrZ3JvdW5kOiAjN0NBQkZGO1xuICAgIGJvcmRlci1yYWRpdXM6IDhweDtcbiAgICBwYWRkaW5nOiA0MHB4IDQwcHggMzRweDtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgYWxpZ24taXRlbXM6IGZsZXgtc3RhcnQ7XG4gICAgbWFyZ2luLXJpZ2h0OiAyNHB4O1xuICAgIGZsZXg6IDAgMSA0NjBweDtcbiAgICBib3JkZXItcmFkaXVzOiA4cHg7IH1cbiAgICAuY2FyZHMtLXJlZC12LWJsdWVfX2NhcmQ6bGFzdC1jaGlsZCB7XG4gICAgICBtYXJnaW4tcmlnaHQ6IDA7IH1cbiAgICAuY2FyZHMtLXJlZC12LWJsdWVfX2NhcmQ6bnRoLWNoaWxkKDIpIHtcbiAgICAgIGJhY2tncm91bmQ6ICNGODhEOEQ7IH1cbiAgICAgIC5jYXJkcy0tcmVkLXYtYmx1ZV9fY2FyZDpudGgtY2hpbGQoMikgLmJ0biB7XG4gICAgICAgIGJhY2tncm91bmQ6IHJnYmEoMjQ0LCA4NCwgODQsIDAuNSk7IH1cbiAgLmNhcmRzLS1yZWQtdi1ibHVlIGgzIHtcbiAgICBmb250LXNpemU6IDI0cHg7XG4gICAgbGluZS1oZWlnaHQ6IG5vcm1hbDtcbiAgICBsZXR0ZXItc3BhY2luZzogLTAuMDJlbTtcbiAgICBjb2xvcjogd2hpdGU7XG4gICAgbWFyZ2luLXRvcDogMDsgfVxuICAuY2FyZHMtLXJlZC12LWJsdWUgcCB7XG4gICAgZm9udC1zaXplOiAxOHB4O1xuICAgIGxpbmUtaGVpZ2h0OiAyNnB4O1xuICAgIGxldHRlci1zcGFjaW5nOiAtMC4wMmVtO1xuICAgIGNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNyk7XG4gICAgbWFyZ2luLXRvcDogMDtcbiAgICBtYXJnaW4tYm90dG9tOiAyMnB4OyB9XG4gIC5jYXJkcy0tcmVkLXYtYmx1ZSAuYnRuIHtcbiAgICBtYXJnaW4tdG9wOiBhdXRvO1xuICAgIGZvbnQtc2l6ZTogMTRweDtcbiAgICBsaW5lLWhlaWdodDogMjJweDtcbiAgICBsZXR0ZXItc3BhY2luZzogMC4wOWVtO1xuICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XG4gICAgcGFkZGluZzogMTBweCAxNHB4O1xuICAgIGZvbnQtd2VpZ2h0OiA2MDA7XG4gICAgYm9yZGVyLXJhZGl1czogOHB4O1xuICAgIGJhY2tncm91bmQ6IHJnYmEoNTYsIDEyOCwgMjU1LCAwLjUpOyB9XG4gICAgLmNhcmRzLS1yZWQtdi1ibHVlIC5idG4gaW9uLWljb24ge1xuICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgICAgaGVpZ2h0OiAxNHB4O1xuICAgICAgd2lkdGg6IDE0cHg7XG4gICAgICB2ZXJ0aWNhbC1hbGlnbjogLTJweDsgfVxuICBAbWVkaWEgKG1heC13aWR0aDogNzY3cHgpIHtcbiAgICAuY2FyZHMtLXJlZC12LWJsdWUge1xuICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7IH1cbiAgICAgIC5jYXJkcy0tcmVkLXYtYmx1ZV9fY2FyZCB7XG4gICAgICAgIGZsZXg6IGF1dG87XG4gICAgICAgIG1hcmdpbi1yaWdodDogMDtcbiAgICAgICAgbWFyZ2luLXRvcDogMjBweDtcbiAgICAgICAgbWF4LXdpZHRoOiA0NjBweDsgfSB9XG5cbmFzaWRlIHtcbiAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KDE4MGRlZywgI0Y5RkFGQiAwJSwgI0ZGRkZGRiAxMDAlKTtcbiAgbWFyZ2luLXRvcDogLTYwcHg7XG4gIHBhZGRpbmctdG9wOiAyMDBweDtcbiAgcGFkZGluZy1ib3R0b206IDEyMHB4OyB9XG4gIGFzaWRlIHAge1xuICAgIGNvbG9yOiAjNDE0RDVDOyB9XG4gIGFzaWRlIC5jb250ZW50IHtcbiAgICBtYXgtd2lkdGg6IDQzMnB4O1xuICAgIG1hcmdpbjogMCBhdXRvO1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICBkaXNwbGF5OiBibG9jazsgfVxuXG4uZWUtZ2V0LXN0YXJ0ZWQge1xuICBtYXgtd2lkdGg6IDcwMHB4OyB9XG4gIC5lZS1nZXQtc3RhcnRlZCBoMyB7XG4gICAgY29sb3I6ICM0MTRENUM7IH1cblxuLnJlc291cmNlcyB7XG4gIHBhZGRpbmctYm90dG9tOiAxMjBweDsgfVxuICBAbWVkaWEgKG1heC13aWR0aDogNzY4cHgpIHtcbiAgICAucmVzb3VyY2VzIHtcbiAgICAgIHBhZGRpbmctYm90dG9tOiA2MHB4OyB9IH1cbiAgLnJlc291cmNlcyAuY2FyZHMge1xuICAgIGxpc3Qtc3R5bGUtdHlwZTogbm9uZTtcbiAgICBtYXJnaW46IDA7XG4gICAgcGFkZGluZzogMDtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIG1hcmdpbi1sZWZ0OiAtMjRweDtcbiAgICBtYXJnaW4tcmlnaHQ6IC0yNHB4OyB9XG4gIC5yZXNvdXJjZXMgaGdyb3VwIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcbiAgICBhbGlnbi1pdGVtczogYmFzZWxpbmU7IH1cbiAgICAucmVzb3VyY2VzIGhncm91cCBoMyB7XG4gICAgICBmb250LXdlaWdodDogNjAwO1xuICAgICAgbGluZS1oZWlnaHQ6IG5vcm1hbDtcbiAgICAgIGZvbnQtc2l6ZTogMjhweDtcbiAgICAgIGxldHRlci1zcGFjaW5nOiAtMC4wMmVtO1xuICAgICAgY29sb3I6ICMxQTIzMkY7XG4gICAgICBtYXJnaW4tYm90dG9tOiAwOyB9XG4gICAgLnJlc291cmNlcyBoZ3JvdXAgaDQge1xuICAgICAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgICAgIGZvbnQtc2l6ZTogMjRweDtcbiAgICAgIGxpbmUtaGVpZ2h0OiBub3JtYWw7XG4gICAgICBsZXR0ZXItc3BhY2luZzogLTAuMDJlbTtcbiAgICAgIGNvbG9yOiAjMUEyMzJGOyB9XG4gICAgLnJlc291cmNlcyBoZ3JvdXAgaDUge1xuICAgICAgZm9udC13ZWlnaHQ6IDcwMDtcbiAgICAgIGxpbmUtaGVpZ2h0OiAxO1xuICAgICAgZm9udC1zaXplOiAxNHB4O1xuICAgICAgbGV0dGVyLXNwYWNpbmc6IDAuMDhlbTtcbiAgICAgIGNvbG9yOiAjMzg4MEZGO1xuICAgICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTsgfVxuICAgIC5yZXNvdXJjZXMgaGdyb3VwIGlvbi1pY29uIHtcbiAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgycHgpOyB9XG4gIC5yZXNvdXJjZXMgLmNhcmRzIGxpIHtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgICBmbGV4OiAwIDAgMzMuMzMlO1xuICAgIHBhZGRpbmc6IDI0cHg7IH1cbiAgICAucmVzb3VyY2VzIC5jYXJkcyBsaSBhIHtcbiAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgd2lkdGg6IDEwMCU7IH1cbiAgICAucmVzb3VyY2VzIC5jYXJkcyBsaSAuaW1nLXdyYXBwZXIge1xuICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICAgIGJvcmRlci1yYWRpdXM6IDZweDsgfVxuICAgIC5yZXNvdXJjZXMgLmNhcmRzIGxpIGltZyB7XG4gICAgICB3aWR0aDogMTAwJTsgfVxuICAgIC5yZXNvdXJjZXMgLmNhcmRzIGxpIGg2IHtcbiAgICAgIGxpbmUtaGVpZ2h0OiAyM3B4O1xuICAgICAgZm9udC1zaXplOiAxMnB4O1xuICAgICAgbGV0dGVyLXNwYWNpbmc6IDAuMTJlbTtcbiAgICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XG4gICAgICBjb2xvcjogI0IyQkVDRDtcbiAgICAgIG1hcmdpbi1ib3R0b206IDA7XG4gICAgICBtYXJnaW4tdG9wOiAxNnB4OyB9XG4gICAgLnJlc291cmNlcyAuY2FyZHMgbGkgaDQge1xuICAgICAgZm9udC1zaXplOiAyMHB4O1xuICAgICAgbWFyZ2luLXRvcDogMTBweDtcbiAgICAgIGNvbG9yOiAjMUEyMzJGO1xuICAgICAgZm9udC13ZWlnaHQ6IDYwMDsgfVxuICAgIC5yZXNvdXJjZXMgLmNhcmRzIGxpIHAge1xuICAgICAgY29sb3I6ICM1QjcwOEI7XG4gICAgICBsaW5lLWhlaWdodDogMjJweDtcbiAgICAgIGZvbnQtc2l6ZTogMTRweDtcbiAgICAgIGxldHRlci1zcGFjaW5nOiAtMC4wMmVtOyB9XG4gIEBtZWRpYSAobWF4LXdpZHRoOiA5OTJweCkge1xuICAgIC5yZXNvdXJjZXMgLmNhcmRzIHtcbiAgICAgIG1hcmdpbi1sZWZ0OiAtMTJweDtcbiAgICAgIG1hcmdpbi1yaWdodDogLTEycHg7IH1cbiAgICAucmVzb3VyY2VzIC5jYXJkcyBsaSB7XG4gICAgICBwYWRkaW5nOiAxMnB4OyB9IH1cbiAgQG1lZGlhIChtYXgtd2lkdGg6IDc2OHB4KSB7XG4gICAgLnJlc291cmNlcyAuY2FyZHMge1xuICAgICAgZmxleC13cmFwOiB3cmFwOyB9XG4gICAgLnJlc291cmNlcyAuY2FyZHMgbGkge1xuICAgICAgZmxleDogMCAwIDUwJTsgfSB9XG4gIEBtZWRpYSAobWF4LXdpZHRoOiA0ODBweCkge1xuICAgIC5yZXNvdXJjZXMgLmNhcmRzIGxpIHtcbiAgICAgIGZsZXg6IDAgMCAxMDAlOyB9XG4gICAgLnJlc291cmNlcyBoNSB7XG4gICAgICBkaXNwbGF5OiBub25lOyB9IH1cblxuLmVlLW1haW4gLmZlYXR1cmVzIGxpIHAsXG4uZWUtbWFpbiAuY2FyZHMgbGkgcCxcbi5yZXNvdXJjZXMgLmZlYXR1cmVzIGxpIHAsXG4ucmVzb3VyY2VzIC5jYXJkcyBsaSBwIHtcbiAgZm9udC1zaXplOiAxNnB4O1xuICBsaW5lLWhlaWdodDogMjlweDtcbiAgbGV0dGVyLXNwYWNpbmc6IC0wLjAxZW07XG4gIGNvbG9yOiAjNzM4NDlBO1xuICBtYXJnaW4tdG9wOiAwOyB9XG5cbi5lZS1tYWluIC5mZWF0dXJlcyBsaSBoNCxcbi5lZS1tYWluIC5jYXJkcyBsaSBoNCxcbi5yZXNvdXJjZXMgLmZlYXR1cmVzIGxpIGg0LFxuLnJlc291cmNlcyAuY2FyZHMgbGkgaDQge1xuICBmb250LXNpemU6IDIwcHg7XG4gIGxpbmUtaGVpZ2h0OiBub3JtYWw7XG4gIGxldHRlci1zcGFjaW5nOiAtMC4wMmVtO1xuICBjb2xvcjogIzAyMDgxNDtcbiAgZm9udC13ZWlnaHQ6IDYwMDsgfVxuXG4ucmVzb3VyY2VzIC5jYXJkcyB7XG4gIG1hcmdpbi10b3A6IDAgIWltcG9ydGFudDtcbiAgdGV4dC1hbGlnbjogbGVmdDtcbiAgZmxleC13cmFwOiB3cmFwOyB9XG4gIC5yZXNvdXJjZXMgLmNhcmRzIC5pbWctd3JhcHBlciB7XG4gICAgYm9yZGVyLXJhZGl1czogNnB4OyB9XG4gICAgLnJlc291cmNlcyAuY2FyZHMgLmltZy13cmFwcGVyICsgaDQge1xuICAgICAgbWFyZ2luLXRvcDogMjRweDsgfVxuICBAbWVkaWEgKG1pbi13aWR0aDogMTIyMHB4KSB7XG4gICAgLnJlc291cmNlcyAuY2FyZHMge1xuICAgICAgbWFyZ2luLWxlZnQ6IC00MHB4O1xuICAgICAgbWFyZ2luLXJpZ2h0OiAtNDBweDsgfVxuICAgICAgLnJlc291cmNlcyAuY2FyZHMgbGkge1xuICAgICAgICBwYWRkaW5nOiA0MHB4OyB9IH1cblxuLnJlc291cmNlcyAucmVzb3VyY2VzX19jdXN0b21lci1sb2dvcyB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIG1hcmdpbjogMjZweCBhdXRvIDA7XG4gIHBhZGRpbmc6IDA7XG4gIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcbiAgbWF4LXdpZHRoOiA3ODBweDtcbiAgd2lkdGg6IDEwMCU7IH1cbiAgLnJlc291cmNlcyAucmVzb3VyY2VzX19jdXN0b21lci1sb2dvcyBsaSB7XG4gICAgYmFja2dyb3VuZDogdXJsKFwiL2ltZy9lbnRlcnByaXNlL2N1c3RvbWVyLWxvZ29zLnBuZ1wiKTtcbiAgICBiYWNrZ3JvdW5kLXNpemU6IDQyOHB4IDQ2cHg7XG4gICAgYmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdDtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgICBoZWlnaHQ6IDQ2cHg7IH1cbiAgQG1lZGlhIChtYXgtd2lkdGg6IDc2OHB4KSB7XG4gICAgLnJlc291cmNlcyAucmVzb3VyY2VzX19jdXN0b21lci1sb2dvcyB7XG4gICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgICAgIGZsZXgtd3JhcDogd3JhcDtcbiAgICAgIG1heC13aWR0aDogNDYwcHg7IH1cbiAgICAgIC5yZXNvdXJjZXMgLnJlc291cmNlc19fY3VzdG9tZXItbG9nb3MgbGkge1xuICAgICAgICBtYXJnaW46IDIwcHg7IH0gfVxuICAucmVzb3VyY2VzIC5yZXNvdXJjZXNfX2N1c3RvbWVyLWxvZ29zIC5tYXN0ZXJjYXJkIHtcbiAgICB3aWR0aDogNThweDsgfVxuICAucmVzb3VyY2VzIC5yZXNvdXJjZXNfX2N1c3RvbWVyLWxvZ29zIC5uYXRpb253aWRlIHtcbiAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtNThweCAwO1xuICAgIHdpZHRoOiAzM3B4OyB9XG4gIC5yZXNvdXJjZXMgLnJlc291cmNlc19fY3VzdG9tZXItbG9nb3MgLnVuaXFsbyB7XG4gICAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTkxcHggMDtcbiAgICB3aWR0aDogNjVweDsgfVxuICAucmVzb3VyY2VzIC5yZXNvdXJjZXNfX2N1c3RvbWVyLWxvZ29zIC5pYm0ge1xuICAgIGJhY2tncm91bmQtcG9zaXRpb246IC0xNTZweCAwO1xuICAgIHdpZHRoOiA2NHB4OyB9XG4gIC5yZXNvdXJjZXMgLnJlc291cmNlc19fY3VzdG9tZXItbG9nb3MgLmluZyB7XG4gICAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTIyMnB4IDA7XG4gICAgd2lkdGg6IDEwM3B4OyB9XG4gIC5yZXNvdXJjZXMgLnJlc291cmNlc19fY3VzdG9tZXItbG9nb3MgLnNhcCB7XG4gICAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTMyNnB4IDA7XG4gICAgd2lkdGg6IDU2cHg7IH1cbiAgLnJlc291cmNlcyAucmVzb3VyY2VzX19jdXN0b21lci1sb2dvcyAubmFzYSB7XG4gICAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTM4MHB4IDA7XG4gICAgd2lkdGg6IDUwcHg7IH1cblxuc2VjdGlvbiB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTsgfVxuXG4jYXBwLWJ1aWxkZXIgLmdyYXBoaWNzIHtcbiAgbWFyZ2luLWxlZnQ6IC04NnB4O1xuICBwYWRkaW5nLWxlZnQ6IDA7XG4gIG1hcmdpbi1yaWdodDogLTEyMHB4O1xuICB3aWR0aDogODk3cHg7IH1cbiAgQG1lZGlhIChtYXgtd2lkdGg6IDc2N3B4KSB7XG4gICAgI2FwcC1idWlsZGVyIC5ncmFwaGljcyB7XG4gICAgICB3aWR0aDogMTAwJTtcbiAgICAgIG1hcmdpbi10b3A6IDEwMHB4O1xuICAgICAgbWFyZ2luLWJvdHRvbTogLTYwcHg7IH0gfVxuXG4jb3NzIC5mcmFtZXdvcmtzIHtcbiAgbWFyZ2luLWJvdHRvbTogMzNweDtcbiAgZGlzcGxheTogZmxleDtcbiAganVzdGlmeS1jb250ZW50OiBzdGFydDtcbiAgZmxleC13cmFwOiB3cmFwO1xuICBwYWRkaW5nLWxlZnQ6IDA7IH1cbiAgI29zcyAuZnJhbWV3b3JrcyBsaSB7XG4gICAgbWFyZ2luLXJpZ2h0OiAxZW07XG4gICAgbGlzdC1zdHlsZTogbm9uZTsgfVxuICAjb3NzIC5mcmFtZXdvcmtzIGxpIHtcbiAgICBoZWlnaHQ6IDMycHg7XG4gICAgd2lkdGg6IDMycHg7XG4gICAgYmFja2dyb3VuZC1zaXplOiAxMDAlO1xuICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICBtYXJnaW4tcmlnaHQ6IDEycHg7IH1cbiAgICAjb3NzIC5mcmFtZXdvcmtzIGxpLmZyYW1ld29ya3NfX2FuZ3VsYXIge1xuICAgICAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFwiL2ltZy9ob21lcGFnZS9mcmFtZXdvcmstc3VwcG9ydC1hbmd1bGFyLnBuZ1wiKTsgfVxuICAgICNvc3MgLmZyYW1ld29ya3MgbGkuZnJhbWV3b3Jrc19fcmVhY3Qge1xuICAgICAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFwiL2ltZy9ob21lcGFnZS9mcmFtZXdvcmstc3VwcG9ydC1yZWFjdC5wbmdcIik7IH1cbiAgICAjb3NzIC5mcmFtZXdvcmtzIGxpLmZyYW1ld29ya3NfX3Z1ZSB7XG4gICAgICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXCIvaW1nL2hvbWVwYWdlL2ZyYW1ld29yay1zdXBwb3J0LXZ1ZS5wbmdcIik7IH1cbiAgICAjb3NzIC5mcmFtZXdvcmtzIGxpLmZyYW1ld29ya3NfX2pzIHtcbiAgICAgIGJhY2tncm91bmQtaW1hZ2U6IHVybChcIi9pbWcvaG9tZXBhZ2UvZnJhbWV3b3JrLXN1cHBvcnQtamF2YXNjcmlwdC5wbmdcIik7IH1cbiAgICAjb3NzIC5mcmFtZXdvcmtzIGxpOjpiZWZvcmUge1xuICAgICAgZGlzcGxheTogbm9uZTsgfVxuICBAbWVkaWEgKG1heC13aWR0aDogNzY3cHgpIHtcbiAgICAjb3NzIC5mcmFtZXdvcmtzIHtcbiAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYXJvdW5kO1xuICAgICAgd2lkdGg6IDI2MHB4O1xuICAgICAgbWFyZ2luOiAwIGF1dG87IH1cbiAgICAgICNvc3MgLmZyYW1ld29ya3MgbGkge1xuICAgICAgICBtYXJnaW4tcmlnaHQ6IDA7IH0gfVxuXG4jb3NzIC5ncmFwaGljcyB7XG4gIHBhZGRpbmctcmlnaHQ6IDA7XG4gIG1hcmdpbi1sZWZ0OiAtMTMwcHg7XG4gIHdpZHRoOiA3ODlweDsgfVxuICBAbWVkaWEgKG1heC13aWR0aDogNzY3cHgpIHtcbiAgICAjb3NzIC5ncmFwaGljcyB7XG4gICAgICB3aWR0aDogMTAwJTtcbiAgICAgIG1heC13aWR0aDogNDAwcHg7XG4gICAgICBtYXJnaW4tbGVmdDogLTYwcHg7IH0gfVxuXG4jZGV2b3BzIC5ncmFwaGljcyB7XG4gIHdpZHRoOiBjYWxjKDEwMCUgLSA0ODBweCk7XG4gIG1hcmdpbi1yaWdodDogLTIwcHg7XG4gIG1hcmdpbi10b3A6IC00MHB4OyB9XG4gICNkZXZvcHMgLmdyYXBoaWNzIGltZyB7XG4gICAgd2lkdGg6IDEwMzVweDtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgbGVmdDogLTM4MHB4OyB9XG5cbiNpbnRlZ3JhdGlvbnMgLmludGVncmF0aW9uLWxpc3Qge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIHdpZHRoOiAxMDAlO1xuICBoZWlnaHQ6IDM2MHB4O1xuICBkaXNwbGF5OiBibG9jaztcbiAgbWFyZ2luOiAwIDAgNDhweDtcbiAgcGFkZGluZzogMDtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBvcGFjaXR5OiAwO1xuICBhbmltYXRpb246IGZhZGVJbiAxcyAxcyBmb3J3YXJkczsgfVxuICAjaW50ZWdyYXRpb25zIC5pbnRlZ3JhdGlvbi1saXN0IGxpIHtcbiAgICBsaXN0LXN0eWxlOiBub25lO1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsgfVxuICAjaW50ZWdyYXRpb25zIC5pbnRlZ3JhdGlvbi1saXN0IGltZyB7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIHdpZHRoOiAxMjhweDtcbiAgICBib3JkZXItcmFkaXVzOiA1MCU7XG4gICAgYm94LXNoYWRvdzogMCA2cHggMjRweCByZ2JhKDAsIDAsIDAsIDAuMSk7IH1cbiAgICAjaW50ZWdyYXRpb25zIC5pbnRlZ3JhdGlvbi1saXN0IGltZy5tIHtcbiAgICAgIHdpZHRoOiA2NHB4OyB9XG4gICAgI2ludGVncmF0aW9ucyAuaW50ZWdyYXRpb24tbGlzdCBpbWcubSB7XG4gICAgICB3aWR0aDogOTZweDsgfVxuXG4jYWR2aXNvcnkge1xuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXCIvaW1nL2VudGVycHJpc2UvcGxhdGZvcm0vY2FyZC1hZHZpc29yeS5qcGdcIik7IH1cbiJdfQ== */\n"
  },
  {
    "path": "content/css/pages/enterprise/resources/case-studies.css",
    "content": ".sub-header {\n  padding-top: 14px; }\n  .sub-header > .container::before {\n    border-top: 1px solid #E9EDF3; }\n  .sub-header .breadcrumbs li,\n  .sub-header .breadcrumbs li a {\n    font-family: \"Inter\", \"Inter UI\", Helvetica, Arial, sans-serif;\n    color: #52678c;\n    font-size: 13px;\n    font-weight: 400;\n    letter-spacing: -0.01em; }\n  .sub-header .breadcrumbs li a {\n    color: #8aa0bb; }\n    .sub-header .breadcrumbs li a:hover {\n      color: #52678c; }\n  .sub-header .breadcrumbs li::after {\n    color: #e1e4e8;\n    margin-left: 7px;\n    margin-right: 6px;\n    font-size: 14px; }\n  @media (max-width: 768px) {\n    .sub-header {\n      display: none; } }\n\n.sub-header .download {\n  padding-right: 0;\n  text-transform: uppercase;\n  letter-spacing: .02em;\n  font-size: 12px; }\n\nmain hgroup {\n  margin-top: 24px;\n  margin-bottom: 53px; }\n  @media (max-width: 767px) {\n    main hgroup {\n      margin-bottom: 0; } }\n  main hgroup strong {\n    text-transform: uppercase;\n    font-size: 11px;\n    font-weight: 600;\n    color: #9cabc4;\n    font-family: \"Eina\", \"Helvetica Neue\", Helvetica, sans-serif; }\n  main hgroup h4 {\n    margin-top: 62px;\n    font-size: 12px;\n    color: #92A1B3;\n    text-transform: uppercase;\n    letter-spacing: .14em; }\n  main hgroup h1 {\n    font-size: 46px;\n    margin-top: 56px; }\n  main hgroup p {\n    font-weight: 400;\n    color: #898989;\n    max-width: 750px;\n    margin: 13px auto;\n    font-size: 20px;\n    line-height: 1.8em;\n    letter-spacing: .01em; }\n  main hgroup .byline {\n    font-style: normal;\n    font-weight: normal;\n    line-height: 29px;\n    font-size: 16px;\n    letter-spacing: -0.02em;\n    color: #92A1B3;\n    margin-bottom: 42px; }\n    main hgroup .byline .avatar {\n      width: 28px;\n      height: 28px;\n      margin: 0 8px 0 0;\n      border-radius: 50%;\n      display: inline-block; }\n    main hgroup .byline .tags {\n      padding: 0;\n      margin-left: 4px;\n      list-style: none;\n      vertical-align: 2px;\n      display: inline-block; }\n      main hgroup .byline .tags li {\n        font-size: 10px;\n        color: #ced6e0;\n        background: transparent;\n        padding: 3px 5px 4px;\n        line-height: 1em;\n        margin-right: 2px;\n        font-weight: 600;\n        text-transform: uppercase;\n        border-radius: 4px;\n        letter-spacing: 0.08em;\n        vertical-align: 1px;\n        display: inline-block;\n        border: 1px solid #E9EDF3; }\n  main hgroup img {\n    margin: 24px auto;\n    max-width: 100%; }\n\nmain {\n  display: -ms-flexbox;\n  display: flex;\n  overflow: visible;\n  padding-bottom: 160px; }\n  @media (max-width: 768px) {\n    main {\n      padding-bottom: 80px; } }\n  @media (max-width: 767px) {\n    main {\n      -ms-flex-direction: column;\n          flex-direction: column; } }\n\n.sticky-wrapper {\n  position: -webkit-sticky;\n  position: sticky;\n  top: 128px; }\n\naside {\n  -ms-flex: 0 1 208px;\n      flex: 0 1 208px;\n  padding-right: 20px;\n  margin-bottom: 0;\n  margin-top: 52px; }\n  aside h4 {\n    font-size: 10px;\n    text-transform: uppercase;\n    color: #a4b3cc;\n    font-weight: 600;\n    letter-spacing: .16em; }\n  aside ul {\n    padding: 0;\n    font-size: 14px;\n    margin: 9px 0 30px;\n    list-style: none;\n    line-height: 1.4em; }\n    @media (max-width: 1219px) {\n      aside ul {\n        font-size: 12px; } }\n  aside li {\n    margin: 12px 0 13px; }\n  aside a {\n    color: #52678c;\n    display: block;\n    transition: .2s transform ease, .2s color; }\n    aside a:hover, aside a:active, aside a:focus, aside a.active {\n      color: #4a8bfc;\n      text-decoration: none; }\n    aside a.active {\n      -webkit-transform: translateX(8px);\n              transform: translateX(8px); }\n  aside .btn {\n    margin: 0 0 32px; }\n  aside .lightblue {\n    background: #e6f0f8;\n    color: #4a8bfc;\n    border-radius: 4px;\n    padding: 9px 16px;\n    display: inline-block;\n    font-size: 11px;\n    text-transform: uppercase;\n    font-weight: 700;\n    letter-spacing: .07em; }\n    aside .lightblue ion-icon {\n      font-size: 18px;\n      vertical-align: -5px; }\n  aside .sharing {\n    margin: 0;\n    border-top: 2px solid #f3f5f9;\n    padding-top: 26px; }\n    aside .sharing li {\n      margin: 0;\n      margin-right: 6px;\n      display: inline-block; }\n    aside .sharing a {\n      color: #CBD2DD;\n      font-size: 20px; }\n      aside .sharing a:hover {\n        color: #4a8bfc; }\n    aside .sharing #web-share {\n      display: none; }\n  @media (max-width: 768px) {\n    aside {\n      display: none; } }\n\n.main-col {\n  -ms-flex: 1;\n      flex: 1;\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-direction: column;\n      flex-direction: column;\n  -ms-flex-align: center;\n      align-items: center; }\n\n.main-col__inner {\n  width: 100%;\n  max-width: 663px;\n  margin-left: 40px; }\n\n@media (max-width: 1219px) {\n  .main-col {\n    -ms-flex-align: end;\n        align-items: flex-end; }\n  .main-col__inner {\n    margin-left: 20px; } }\n\n@media (max-width: 768px) {\n  .main-col {\n    -ms-flex-align: center;\n        align-items: center; }\n  .main-col__inner {\n    margin-left: 0; } }\n\narticle {\n  padding-bottom: 58px;\n  border-bottom: 1px solid #edf0f6;\n  margin-bottom: 37px; }\n  article h2 {\n    font-size: 30px;\n    margin-top: 2.65em;\n    margin-bottom: 0.8em;\n    font-weight: 600; }\n    article h2 strong {\n      font-weight: 600; }\n  article h3 {\n    font-size: 20px;\n    line-height: 1.3;\n    margin-top: 2.3em;\n    margin-bottom: 1.2em;\n    letter-spacing: -.014em;\n    font-weight: 600; }\n    article h3 strong {\n      font-weight: 600; }\n  article h4, article h5, article h6 {\n    margin: 1em 0; }\n  article h4 {\n    text-transform: uppercase;\n    letter-spacing: 0.1em;\n    font-size: 14px; }\n  article h5 {\n    font-size: 15px; }\n  article h6 {\n    font-size: 11px;\n    text-transform: uppercase;\n    letter-spacing: 0.1em; }\n  article p,\n  article ul,\n  article ol {\n    font-size: 16px;\n    letter-spacing: -.011em;\n    line-height: 1.75em;\n    margin-bottom: 1.8em;\n    color: #5B708B; }\n  article ul li + li,\n  article ol li + li {\n    margin-top: 8px; }\n  article ul {\n    padding-left: 0; }\n    article ul li {\n      list-style-type: none;\n      position: relative;\n      padding-left: 18px; }\n      article ul li:before {\n        content: '';\n        display: inline-block;\n        width: 6px;\n        height: 6px;\n        background: #B2BECD;\n        position: absolute;\n        top: 12px;\n        left: 0;\n        border-radius: 8px; }\n  article b,\n  article strong {\n    font-weight: 500; }\n  article blockquote {\n    background: #f2f5f8;\n    border-radius: 4px;\n    position: relative;\n    padding: 64px 80px 68px 111px;\n    color: #5e749a;\n    font-family: \"Adobe Caslon\", Georgia, Times, \"Times New Roman\", serif;\n    font-style: italic;\n    border: none;\n    margin: 77px -16px 54px; }\n    article blockquote::before {\n      position: absolute;\n      top: -6px;\n      left: 54px;\n      font-size: 180px;\n      content: '\\201C';\n      color: #e3e7ec; }\n    article blockquote p {\n      font-size: 18px;\n      position: relative;\n      z-index: 1;\n      letter-spacing: .022em;\n      line-height: 1.8em; }\n      article blockquote p:last-child {\n        margin-bottom: 0; }\n    article blockquote cite {\n      font-size: 15px;\n      letter-spacing: .02em; }\n      article blockquote cite span {\n        color: #9da9bd;\n        margin-left: 8px; }\n  article img {\n    max-width: 100%; }\n  article pre,\n  article code {\n    border: none;\n    background: #f5f7fa; }\n  article figure {\n    width: 295px;\n    float: right;\n    margin: 8px -20px 16px 74px; }\n    article figure.left {\n      float: left;\n      margin-right: 74px;\n      margin-left: -20px; }\n    article figure img {\n      box-shadow: 0 4px 48px rgba(0, 0, 0, 0.2); }\n    article figure figcaption {\n      color: #a8b0be;\n      font-size: 11px;\n      margin-top: 13px; }\n    @media (max-width: 767px) {\n      article figure {\n        margin-right: 0;\n        margin-left: 32px; }\n        article figure.left {\n          margin-left: 0;\n          margin-right: 32px; } }\n    @media (max-width: 480px) {\n      article figure {\n        width: 100%; } }\n  article .table-wrap {\n    overflow-x: auto;\n    margin-right: -15px;\n    padding-right: 15px;\n    box-sizing: content-box;\n    font-size: 13px; }\n    article .table-wrap td,\n    article .table-wrap th {\n      min-width: 120px;\n      padding-right: 12px; }\n    article .table-wrap table tbody tr td {\n      border-top-color: #DEE3EA; }\n    article .table-wrap table > thead > tr > th {\n      border-bottom-color: #E9EDF3;\n      font-weight: 600; }\n\n.resource-list {\n  margin-bottom: 0; }\n  .resource-list__header .all {\n    float: right; }\n    .resource-list__header .all ion-icon {\n      display: inline-block;\n      transition: .2s transform ease; }\n    .resource-list__header .all:hover ion-icon {\n      -webkit-transform: translateX(2px);\n              transform: translateX(2px); }\n  .resource-list__header h4 {\n    text-transform: uppercase;\n    font-size: 14px;\n    letter-spacing: .12em; }\n  .resource-list .resource-card-list {\n    margin-left: -10px;\n    margin-right: -10px; }\n  .resource-list .resource-card-list--third .resource-card {\n    padding: 5px;\n    height: 214px; }\n  .resource-list .resource-card-list--third .resource-card a .title {\n    font-size: 18px; }\n\n/*# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImNhc2Utc3R1ZGllcy5jc3MiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7RUFDRSxrQkFBa0IsRUFBRTtFQUNwQjtJQUNFLDhCQUE4QixFQUFFO0VBQ2xDOztJQUVFLCtEQUErRDtJQUMvRCxlQUFlO0lBQ2YsZ0JBQWdCO0lBQ2hCLGlCQUFpQjtJQUNqQix3QkFBd0IsRUFBRTtFQUM1QjtJQUNFLGVBQWUsRUFBRTtJQUNqQjtNQUNFLGVBQWUsRUFBRTtFQUNyQjtJQUNFLGVBQWU7SUFDZixpQkFBaUI7SUFDakIsa0JBQWtCO0lBQ2xCLGdCQUFnQixFQUFFO0VBQ3BCO0lBQ0U7TUFDRSxjQUFjLEVBQUUsRUFBRTs7QUFFeEI7RUFDRSxpQkFBaUI7RUFDakIsMEJBQTBCO0VBQzFCLHNCQUFzQjtFQUN0QixnQkFBZ0IsRUFBRTs7QUFFcEI7RUFDRSxpQkFBaUI7RUFDakIsb0JBQW9CLEVBQUU7RUFDdEI7SUFDRTtNQUNFLGlCQUFpQixFQUFFLEVBQUU7RUFDekI7SUFDRSwwQkFBMEI7SUFDMUIsZ0JBQWdCO0lBQ2hCLGlCQUFpQjtJQUNqQixlQUFlO0lBQ2YsNkRBQTZELEVBQUU7RUFDakU7SUFDRSxpQkFBaUI7SUFDakIsZ0JBQWdCO0lBQ2hCLGVBQWU7SUFDZiwwQkFBMEI7SUFDMUIsc0JBQXNCLEVBQUU7RUFDMUI7SUFDRSxnQkFBZ0I7SUFDaEIsaUJBQWlCLEVBQUU7RUFDckI7SUFDRSxpQkFBaUI7SUFDakIsZUFBZTtJQUNmLGlCQUFpQjtJQUNqQixrQkFBa0I7SUFDbEIsZ0JBQWdCO0lBQ2hCLG1CQUFtQjtJQUNuQixzQkFBc0IsRUFBRTtFQUMxQjtJQUNFLG1CQUFtQjtJQUNuQixvQkFBb0I7SUFDcEIsa0JBQWtCO0lBQ2xCLGdCQUFnQjtJQUNoQix3QkFBd0I7SUFDeEIsZUFBZTtJQUNmLG9CQUFvQixFQUFFO0lBQ3RCO01BQ0UsWUFBWTtNQUNaLGFBQWE7TUFDYixrQkFBa0I7TUFDbEIsbUJBQW1CO01BQ25CLHNCQUFzQixFQUFFO0lBQzFCO01BQ0UsV0FBVztNQUNYLGlCQUFpQjtNQUNqQixpQkFBaUI7TUFDakIsb0JBQW9CO01BQ3BCLHNCQUFzQixFQUFFO01BQ3hCO1FBQ0UsZ0JBQWdCO1FBQ2hCLGVBQWU7UUFDZix3QkFBd0I7UUFDeEIscUJBQXFCO1FBQ3JCLGlCQUFpQjtRQUNqQixrQkFBa0I7UUFDbEIsaUJBQWlCO1FBQ2pCLDBCQUEwQjtRQUMxQixtQkFBbUI7UUFDbkIsdUJBQXVCO1FBQ3ZCLG9CQUFvQjtRQUNwQixzQkFBc0I7UUFDdEIsMEJBQTBCLEVBQUU7RUFDbEM7SUFDRSxrQkFBa0I7SUFDbEIsZ0JBQWdCLEVBQUU7O0FBRXRCO0VBQ0UscUJBQWM7RUFBZCxjQUFjO0VBQ2Qsa0JBQWtCO0VBQ2xCLHNCQUFzQixFQUFFO0VBQ3hCO0lBQ0U7TUFDRSxxQkFBcUIsRUFBRSxFQUFFO0VBQzdCO0lBQ0U7TUFDRSwyQkFBdUI7VUFBdkIsdUJBQXVCLEVBQUUsRUFBRTs7QUFFakM7RUFDRSx5QkFBaUI7RUFBakIsaUJBQWlCO0VBQ2pCLFdBQVcsRUFBRTs7QUFFZjtFQUNFLG9CQUFnQjtNQUFoQixnQkFBZ0I7RUFDaEIsb0JBQW9CO0VBQ3BCLGlCQUFpQjtFQUNqQixpQkFBaUIsRUFBRTtFQUNuQjtJQUNFLGdCQUFnQjtJQUNoQiwwQkFBMEI7SUFDMUIsZUFBZTtJQUNmLGlCQUFpQjtJQUNqQixzQkFBc0IsRUFBRTtFQUMxQjtJQUNFLFdBQVc7SUFDWCxnQkFBZ0I7SUFDaEIsbUJBQW1CO0lBQ25CLGlCQUFpQjtJQUNqQixtQkFBbUIsRUFBRTtJQUNyQjtNQUNFO1FBQ0UsZ0JBQWdCLEVBQUUsRUFBRTtFQUMxQjtJQUNFLG9CQUFvQixFQUFFO0VBQ3hCO0lBQ0UsZUFBZTtJQUNmLGVBQWU7SUFDZiwwQ0FBMEMsRUFBRTtJQUM1QztNQUNFLGVBQWU7TUFDZixzQkFBc0IsRUFBRTtJQUMxQjtNQUNFLG1DQUEyQjtjQUEzQiwyQkFBMkIsRUFBRTtFQUNqQztJQUNFLGlCQUFpQixFQUFFO0VBQ3JCO0lBQ0Usb0JBQW9CO0lBQ3BCLGVBQWU7SUFDZixtQkFBbUI7SUFDbkIsa0JBQWtCO0lBQ2xCLHNCQUFzQjtJQUN0QixnQkFBZ0I7SUFDaEIsMEJBQTBCO0lBQzFCLGlCQUFpQjtJQUNqQixzQkFBc0IsRUFBRTtJQUN4QjtNQUNFLGdCQUFnQjtNQUNoQixxQkFBcUIsRUFBRTtFQUMzQjtJQUNFLFVBQVU7SUFDViw4QkFBOEI7SUFDOUIsa0JBQWtCLEVBQUU7SUFDcEI7TUFDRSxVQUFVO01BQ1Ysa0JBQWtCO01BQ2xCLHNCQUFzQixFQUFFO0lBQzFCO01BQ0UsZUFBZTtNQUNmLGdCQUFnQixFQUFFO01BQ2xCO1FBQ0UsZUFBZSxFQUFFO0lBQ3JCO01BQ0UsY0FBYyxFQUFFO0VBQ3BCO0lBQ0U7TUFDRSxjQUFjLEVBQUUsRUFBRTs7QUFFeEI7RUFDRSxZQUFRO01BQVIsUUFBUTtFQUNSLHFCQUFjO0VBQWQsY0FBYztFQUNkLDJCQUF1QjtNQUF2Qix1QkFBdUI7RUFDdkIsdUJBQW9CO01BQXBCLG9CQUFvQixFQUFFOztBQUV4QjtFQUNFLFlBQVk7RUFDWixpQkFBaUI7RUFDakIsa0JBQWtCLEVBQUU7O0FBRXRCO0VBQ0U7SUFDRSxvQkFBc0I7UUFBdEIsc0JBQXNCLEVBQUU7RUFDMUI7SUFDRSxrQkFBa0IsRUFBRSxFQUFFOztBQUUxQjtFQUNFO0lBQ0UsdUJBQW9CO1FBQXBCLG9CQUFvQixFQUFFO0VBQ3hCO0lBQ0UsZUFBZSxFQUFFLEVBQUU7O0FBRXZCO0VBQ0UscUJBQXFCO0VBQ3JCLGlDQUFpQztFQUNqQyxvQkFBb0IsRUFBRTtFQUN0QjtJQUNFLGdCQUFnQjtJQUNoQixtQkFBbUI7SUFDbkIscUJBQXFCO0lBQ3JCLGlCQUFpQixFQUFFO0lBQ25CO01BQ0UsaUJBQWlCLEVBQUU7RUFDdkI7SUFDRSxnQkFBZ0I7SUFDaEIsaUJBQWlCO0lBQ2pCLGtCQUFrQjtJQUNsQixxQkFBcUI7SUFDckIsd0JBQXdCO0lBQ3hCLGlCQUFpQixFQUFFO0lBQ25CO01BQ0UsaUJBQWlCLEVBQUU7RUFDdkI7SUFDRSxjQUFjLEVBQUU7RUFDbEI7SUFDRSwwQkFBMEI7SUFDMUIsc0JBQXNCO0lBQ3RCLGdCQUFnQixFQUFFO0VBQ3BCO0lBQ0UsZ0JBQWdCLEVBQUU7RUFDcEI7SUFDRSxnQkFBZ0I7SUFDaEIsMEJBQTBCO0lBQzFCLHNCQUFzQixFQUFFO0VBQzFCOzs7SUFHRSxnQkFBZ0I7SUFDaEIsd0JBQXdCO0lBQ3hCLG9CQUFvQjtJQUNwQixxQkFBcUI7SUFDckIsZUFBZSxFQUFFO0VBQ25COztJQUVFLGdCQUFnQixFQUFFO0VBQ3BCO0lBQ0UsZ0JBQWdCLEVBQUU7SUFDbEI7TUFDRSxzQkFBc0I7TUFDdEIsbUJBQW1CO01BQ25CLG1CQUFtQixFQUFFO01BQ3JCO1FBQ0UsWUFBWTtRQUNaLHNCQUFzQjtRQUN0QixXQUFXO1FBQ1gsWUFBWTtRQUNaLG9CQUFvQjtRQUNwQixtQkFBbUI7UUFDbkIsVUFBVTtRQUNWLFFBQVE7UUFDUixtQkFBbUIsRUFBRTtFQUMzQjs7SUFFRSxpQkFBaUIsRUFBRTtFQUNyQjtJQUNFLG9CQUFvQjtJQUNwQixtQkFBbUI7SUFDbkIsbUJBQW1CO0lBQ25CLDhCQUE4QjtJQUM5QixlQUFlO0lBQ2Ysc0VBQXNFO0lBQ3RFLG1CQUFtQjtJQUNuQixhQUFhO0lBQ2Isd0JBQXdCLEVBQUU7SUFDMUI7TUFDRSxtQkFBbUI7TUFDbkIsVUFBVTtNQUNWLFdBQVc7TUFDWCxpQkFBaUI7TUFDakIsaUJBQWlCO01BQ2pCLGVBQWUsRUFBRTtJQUNuQjtNQUNFLGdCQUFnQjtNQUNoQixtQkFBbUI7TUFDbkIsV0FBVztNQUNYLHVCQUF1QjtNQUN2QixtQkFBbUIsRUFBRTtNQUNyQjtRQUNFLGlCQUFpQixFQUFFO0lBQ3ZCO01BQ0UsZ0JBQWdCO01BQ2hCLHNCQUFzQixFQUFFO01BQ3hCO1FBQ0UsZUFBZTtRQUNmLGlCQUFpQixFQUFFO0VBQ3pCO0lBQ0UsZ0JBQWdCLEVBQUU7RUFDcEI7O0lBRUUsYUFBYTtJQUNiLG9CQUFvQixFQUFFO0VBQ3hCO0lBQ0UsYUFBYTtJQUNiLGFBQWE7SUFDYiw0QkFBNEIsRUFBRTtJQUM5QjtNQUNFLFlBQVk7TUFDWixtQkFBbUI7TUFDbkIsbUJBQW1CLEVBQUU7SUFDdkI7TUFDRSwwQ0FBMEMsRUFBRTtJQUM5QztNQUNFLGVBQWU7TUFDZixnQkFBZ0I7TUFDaEIsaUJBQWlCLEVBQUU7SUFDckI7TUFDRTtRQUNFLGdCQUFnQjtRQUNoQixrQkFBa0IsRUFBRTtRQUNwQjtVQUNFLGVBQWU7VUFDZixtQkFBbUIsRUFBRSxFQUFFO0lBQzdCO01BQ0U7UUFDRSxZQUFZLEVBQUUsRUFBRTtFQUN0QjtJQUNFLGlCQUFpQjtJQUNqQixvQkFBb0I7SUFDcEIsb0JBQW9CO0lBQ3BCLHdCQUF3QjtJQUN4QixnQkFBZ0IsRUFBRTtJQUNsQjs7TUFFRSxpQkFBaUI7TUFDakIsb0JBQW9CLEVBQUU7SUFDeEI7TUFDRSwwQkFBMEIsRUFBRTtJQUM5QjtNQUNFLDZCQUE2QjtNQUM3QixpQkFBaUIsRUFBRTs7QUFFekI7RUFDRSxpQkFBaUIsRUFBRTtFQUNuQjtJQUNFLGFBQWEsRUFBRTtJQUNmO01BQ0Usc0JBQXNCO01BQ3RCLCtCQUErQixFQUFFO0lBQ25DO01BQ0UsbUNBQTJCO2NBQTNCLDJCQUEyQixFQUFFO0VBQ2pDO0lBQ0UsMEJBQTBCO0lBQzFCLGdCQUFnQjtJQUNoQixzQkFBc0IsRUFBRTtFQUMxQjtJQUNFLG1CQUFtQjtJQUNuQixvQkFBb0IsRUFBRTtFQUN4QjtJQUNFLGFBQWE7SUFDYixjQUFjLEVBQUU7RUFDbEI7SUFDRSxnQkFBZ0IsRUFBRSIsImZpbGUiOiJwYWdlcy9lbnRlcnByaXNlL3Jlc291cmNlcy9jYXNlLXN0dWRpZXMuY3NzIiwic291cmNlc0NvbnRlbnQiOlsiLnN1Yi1oZWFkZXIge1xuICBwYWRkaW5nLXRvcDogMTRweDsgfVxuICAuc3ViLWhlYWRlciA+IC5jb250YWluZXI6OmJlZm9yZSB7XG4gICAgYm9yZGVyLXRvcDogMXB4IHNvbGlkICNFOUVERjM7IH1cbiAgLnN1Yi1oZWFkZXIgLmJyZWFkY3J1bWJzIGxpLFxuICAuc3ViLWhlYWRlciAuYnJlYWRjcnVtYnMgbGkgYSB7XG4gICAgZm9udC1mYW1pbHk6IFwiSW50ZXJcIiwgXCJJbnRlciBVSVwiLCBIZWx2ZXRpY2EsIEFyaWFsLCBzYW5zLXNlcmlmO1xuICAgIGNvbG9yOiAjNTI2NzhjO1xuICAgIGZvbnQtc2l6ZTogMTNweDtcbiAgICBmb250LXdlaWdodDogNDAwO1xuICAgIGxldHRlci1zcGFjaW5nOiAtMC4wMWVtOyB9XG4gIC5zdWItaGVhZGVyIC5icmVhZGNydW1icyBsaSBhIHtcbiAgICBjb2xvcjogIzhhYTBiYjsgfVxuICAgIC5zdWItaGVhZGVyIC5icmVhZGNydW1icyBsaSBhOmhvdmVyIHtcbiAgICAgIGNvbG9yOiAjNTI2NzhjOyB9XG4gIC5zdWItaGVhZGVyIC5icmVhZGNydW1icyBsaTo6YWZ0ZXIge1xuICAgIGNvbG9yOiAjZTFlNGU4O1xuICAgIG1hcmdpbi1sZWZ0OiA3cHg7XG4gICAgbWFyZ2luLXJpZ2h0OiA2cHg7XG4gICAgZm9udC1zaXplOiAxNHB4OyB9XG4gIEBtZWRpYSAobWF4LXdpZHRoOiA3NjhweCkge1xuICAgIC5zdWItaGVhZGVyIHtcbiAgICAgIGRpc3BsYXk6IG5vbmU7IH0gfVxuXG4uc3ViLWhlYWRlciAuZG93bmxvYWQge1xuICBwYWRkaW5nLXJpZ2h0OiAwO1xuICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xuICBsZXR0ZXItc3BhY2luZzogLjAyZW07XG4gIGZvbnQtc2l6ZTogMTJweDsgfVxuXG5tYWluIGhncm91cCB7XG4gIG1hcmdpbi10b3A6IDI0cHg7XG4gIG1hcmdpbi1ib3R0b206IDUzcHg7IH1cbiAgQG1lZGlhIChtYXgtd2lkdGg6IDc2N3B4KSB7XG4gICAgbWFpbiBoZ3JvdXAge1xuICAgICAgbWFyZ2luLWJvdHRvbTogMDsgfSB9XG4gIG1haW4gaGdyb3VwIHN0cm9uZyB7XG4gICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcbiAgICBmb250LXNpemU6IDExcHg7XG4gICAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgICBjb2xvcjogIzljYWJjNDtcbiAgICBmb250LWZhbWlseTogXCJFaW5hXCIsIFwiSGVsdmV0aWNhIE5ldWVcIiwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmOyB9XG4gIG1haW4gaGdyb3VwIGg0IHtcbiAgICBtYXJnaW4tdG9wOiA2MnB4O1xuICAgIGZvbnQtc2l6ZTogMTJweDtcbiAgICBjb2xvcjogIzkyQTFCMztcbiAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xuICAgIGxldHRlci1zcGFjaW5nOiAuMTRlbTsgfVxuICBtYWluIGhncm91cCBoMSB7XG4gICAgZm9udC1zaXplOiA0NnB4O1xuICAgIG1hcmdpbi10b3A6IDU2cHg7IH1cbiAgbWFpbiBoZ3JvdXAgcCB7XG4gICAgZm9udC13ZWlnaHQ6IDQwMDtcbiAgICBjb2xvcjogIzg5ODk4OTtcbiAgICBtYXgtd2lkdGg6IDc1MHB4O1xuICAgIG1hcmdpbjogMTNweCBhdXRvO1xuICAgIGZvbnQtc2l6ZTogMjBweDtcbiAgICBsaW5lLWhlaWdodDogMS44ZW07XG4gICAgbGV0dGVyLXNwYWNpbmc6IC4wMWVtOyB9XG4gIG1haW4gaGdyb3VwIC5ieWxpbmUge1xuICAgIGZvbnQtc3R5bGU6IG5vcm1hbDtcbiAgICBmb250LXdlaWdodDogbm9ybWFsO1xuICAgIGxpbmUtaGVpZ2h0OiAyOXB4O1xuICAgIGZvbnQtc2l6ZTogMTZweDtcbiAgICBsZXR0ZXItc3BhY2luZzogLTAuMDJlbTtcbiAgICBjb2xvcjogIzkyQTFCMztcbiAgICBtYXJnaW4tYm90dG9tOiA0MnB4OyB9XG4gICAgbWFpbiBoZ3JvdXAgLmJ5bGluZSAuYXZhdGFyIHtcbiAgICAgIHdpZHRoOiAyOHB4O1xuICAgICAgaGVpZ2h0OiAyOHB4O1xuICAgICAgbWFyZ2luOiAwIDhweCAwIDA7XG4gICAgICBib3JkZXItcmFkaXVzOiA1MCU7XG4gICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7IH1cbiAgICBtYWluIGhncm91cCAuYnlsaW5lIC50YWdzIHtcbiAgICAgIHBhZGRpbmc6IDA7XG4gICAgICBtYXJnaW4tbGVmdDogNHB4O1xuICAgICAgbGlzdC1zdHlsZTogbm9uZTtcbiAgICAgIHZlcnRpY2FsLWFsaWduOiAycHg7XG4gICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7IH1cbiAgICAgIG1haW4gaGdyb3VwIC5ieWxpbmUgLnRhZ3MgbGkge1xuICAgICAgICBmb250LXNpemU6IDEwcHg7XG4gICAgICAgIGNvbG9yOiAjY2VkNmUwO1xuICAgICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcbiAgICAgICAgcGFkZGluZzogM3B4IDVweCA0cHg7XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxZW07XG4gICAgICAgIG1hcmdpbi1yaWdodDogMnB4O1xuICAgICAgICBmb250LXdlaWdodDogNjAwO1xuICAgICAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xuICAgICAgICBib3JkZXItcmFkaXVzOiA0cHg7XG4gICAgICAgIGxldHRlci1zcGFjaW5nOiAwLjA4ZW07XG4gICAgICAgIHZlcnRpY2FsLWFsaWduOiAxcHg7XG4gICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgI0U5RURGMzsgfVxuICBtYWluIGhncm91cCBpbWcge1xuICAgIG1hcmdpbjogMjRweCBhdXRvO1xuICAgIG1heC13aWR0aDogMTAwJTsgfVxuXG5tYWluIHtcbiAgZGlzcGxheTogZmxleDtcbiAgb3ZlcmZsb3c6IHZpc2libGU7XG4gIHBhZGRpbmctYm90dG9tOiAxNjBweDsgfVxuICBAbWVkaWEgKG1heC13aWR0aDogNzY4cHgpIHtcbiAgICBtYWluIHtcbiAgICAgIHBhZGRpbmctYm90dG9tOiA4MHB4OyB9IH1cbiAgQG1lZGlhIChtYXgtd2lkdGg6IDc2N3B4KSB7XG4gICAgbWFpbiB7XG4gICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOyB9IH1cblxuLnN0aWNreS13cmFwcGVyIHtcbiAgcG9zaXRpb246IHN0aWNreTtcbiAgdG9wOiAxMjhweDsgfVxuXG5hc2lkZSB7XG4gIGZsZXg6IDAgMSAyMDhweDtcbiAgcGFkZGluZy1yaWdodDogMjBweDtcbiAgbWFyZ2luLWJvdHRvbTogMDtcbiAgbWFyZ2luLXRvcDogNTJweDsgfVxuICBhc2lkZSBoNCB7XG4gICAgZm9udC1zaXplOiAxMHB4O1xuICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XG4gICAgY29sb3I6ICNhNGIzY2M7XG4gICAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgICBsZXR0ZXItc3BhY2luZzogLjE2ZW07IH1cbiAgYXNpZGUgdWwge1xuICAgIHBhZGRpbmc6IDA7XG4gICAgZm9udC1zaXplOiAxNHB4O1xuICAgIG1hcmdpbjogOXB4IDAgMzBweDtcbiAgICBsaXN0LXN0eWxlOiBub25lO1xuICAgIGxpbmUtaGVpZ2h0OiAxLjRlbTsgfVxuICAgIEBtZWRpYSAobWF4LXdpZHRoOiAxMjE5cHgpIHtcbiAgICAgIGFzaWRlIHVsIHtcbiAgICAgICAgZm9udC1zaXplOiAxMnB4OyB9IH1cbiAgYXNpZGUgbGkge1xuICAgIG1hcmdpbjogMTJweCAwIDEzcHg7IH1cbiAgYXNpZGUgYSB7XG4gICAgY29sb3I6ICM1MjY3OGM7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgdHJhbnNpdGlvbjogLjJzIHRyYW5zZm9ybSBlYXNlLCAuMnMgY29sb3I7IH1cbiAgICBhc2lkZSBhOmhvdmVyLCBhc2lkZSBhOmFjdGl2ZSwgYXNpZGUgYTpmb2N1cywgYXNpZGUgYS5hY3RpdmUge1xuICAgICAgY29sb3I6ICM0YThiZmM7XG4gICAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7IH1cbiAgICBhc2lkZSBhLmFjdGl2ZSB7XG4gICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoOHB4KTsgfVxuICBhc2lkZSAuYnRuIHtcbiAgICBtYXJnaW46IDAgMCAzMnB4OyB9XG4gIGFzaWRlIC5saWdodGJsdWUge1xuICAgIGJhY2tncm91bmQ6ICNlNmYwZjg7XG4gICAgY29sb3I6ICM0YThiZmM7XG4gICAgYm9yZGVyLXJhZGl1czogNHB4O1xuICAgIHBhZGRpbmc6IDlweCAxNnB4O1xuICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICBmb250LXNpemU6IDExcHg7XG4gICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcbiAgICBmb250LXdlaWdodDogNzAwO1xuICAgIGxldHRlci1zcGFjaW5nOiAuMDdlbTsgfVxuICAgIGFzaWRlIC5saWdodGJsdWUgaW9uLWljb24ge1xuICAgICAgZm9udC1zaXplOiAxOHB4O1xuICAgICAgdmVydGljYWwtYWxpZ246IC01cHg7IH1cbiAgYXNpZGUgLnNoYXJpbmcge1xuICAgIG1hcmdpbjogMDtcbiAgICBib3JkZXItdG9wOiAycHggc29saWQgI2YzZjVmOTtcbiAgICBwYWRkaW5nLXRvcDogMjZweDsgfVxuICAgIGFzaWRlIC5zaGFyaW5nIGxpIHtcbiAgICAgIG1hcmdpbjogMDtcbiAgICAgIG1hcmdpbi1yaWdodDogNnB4O1xuICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOyB9XG4gICAgYXNpZGUgLnNoYXJpbmcgYSB7XG4gICAgICBjb2xvcjogI0NCRDJERDtcbiAgICAgIGZvbnQtc2l6ZTogMjBweDsgfVxuICAgICAgYXNpZGUgLnNoYXJpbmcgYTpob3ZlciB7XG4gICAgICAgIGNvbG9yOiAjNGE4YmZjOyB9XG4gICAgYXNpZGUgLnNoYXJpbmcgI3dlYi1zaGFyZSB7XG4gICAgICBkaXNwbGF5OiBub25lOyB9XG4gIEBtZWRpYSAobWF4LXdpZHRoOiA3NjhweCkge1xuICAgIGFzaWRlIHtcbiAgICAgIGRpc3BsYXk6IG5vbmU7IH0gfVxuXG4ubWFpbi1jb2wge1xuICBmbGV4OiAxO1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICBhbGlnbi1pdGVtczogY2VudGVyOyB9XG5cbi5tYWluLWNvbF9faW5uZXIge1xuICB3aWR0aDogMTAwJTtcbiAgbWF4LXdpZHRoOiA2NjNweDtcbiAgbWFyZ2luLWxlZnQ6IDQwcHg7IH1cblxuQG1lZGlhIChtYXgtd2lkdGg6IDEyMTlweCkge1xuICAubWFpbi1jb2wge1xuICAgIGFsaWduLWl0ZW1zOiBmbGV4LWVuZDsgfVxuICAubWFpbi1jb2xfX2lubmVyIHtcbiAgICBtYXJnaW4tbGVmdDogMjBweDsgfSB9XG5cbkBtZWRpYSAobWF4LXdpZHRoOiA3NjhweCkge1xuICAubWFpbi1jb2wge1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7IH1cbiAgLm1haW4tY29sX19pbm5lciB7XG4gICAgbWFyZ2luLWxlZnQ6IDA7IH0gfVxuXG5hcnRpY2xlIHtcbiAgcGFkZGluZy1ib3R0b206IDU4cHg7XG4gIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjZWRmMGY2O1xuICBtYXJnaW4tYm90dG9tOiAzN3B4OyB9XG4gIGFydGljbGUgaDIge1xuICAgIGZvbnQtc2l6ZTogMzBweDtcbiAgICBtYXJnaW4tdG9wOiAyLjY1ZW07XG4gICAgbWFyZ2luLWJvdHRvbTogMC44ZW07XG4gICAgZm9udC13ZWlnaHQ6IDYwMDsgfVxuICAgIGFydGljbGUgaDIgc3Ryb25nIHtcbiAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7IH1cbiAgYXJ0aWNsZSBoMyB7XG4gICAgZm9udC1zaXplOiAyMHB4O1xuICAgIGxpbmUtaGVpZ2h0OiAxLjM7XG4gICAgbWFyZ2luLXRvcDogMi4zZW07XG4gICAgbWFyZ2luLWJvdHRvbTogMS4yZW07XG4gICAgbGV0dGVyLXNwYWNpbmc6IC0uMDE0ZW07XG4gICAgZm9udC13ZWlnaHQ6IDYwMDsgfVxuICAgIGFydGljbGUgaDMgc3Ryb25nIHtcbiAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7IH1cbiAgYXJ0aWNsZSBoNCwgYXJ0aWNsZSBoNSwgYXJ0aWNsZSBoNiB7XG4gICAgbWFyZ2luOiAxZW0gMDsgfVxuICBhcnRpY2xlIGg0IHtcbiAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xuICAgIGxldHRlci1zcGFjaW5nOiAwLjFlbTtcbiAgICBmb250LXNpemU6IDE0cHg7IH1cbiAgYXJ0aWNsZSBoNSB7XG4gICAgZm9udC1zaXplOiAxNXB4OyB9XG4gIGFydGljbGUgaDYge1xuICAgIGZvbnQtc2l6ZTogMTFweDtcbiAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xuICAgIGxldHRlci1zcGFjaW5nOiAwLjFlbTsgfVxuICBhcnRpY2xlIHAsXG4gIGFydGljbGUgdWwsXG4gIGFydGljbGUgb2wge1xuICAgIGZvbnQtc2l6ZTogMTZweDtcbiAgICBsZXR0ZXItc3BhY2luZzogLS4wMTFlbTtcbiAgICBsaW5lLWhlaWdodDogMS43NWVtO1xuICAgIG1hcmdpbi1ib3R0b206IDEuOGVtO1xuICAgIGNvbG9yOiAjNUI3MDhCOyB9XG4gIGFydGljbGUgdWwgbGkgKyBsaSxcbiAgYXJ0aWNsZSBvbCBsaSArIGxpIHtcbiAgICBtYXJnaW4tdG9wOiA4cHg7IH1cbiAgYXJ0aWNsZSB1bCB7XG4gICAgcGFkZGluZy1sZWZ0OiAwOyB9XG4gICAgYXJ0aWNsZSB1bCBsaSB7XG4gICAgICBsaXN0LXN0eWxlLXR5cGU6IG5vbmU7XG4gICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICBwYWRkaW5nLWxlZnQ6IDE4cHg7IH1cbiAgICAgIGFydGljbGUgdWwgbGk6YmVmb3JlIHtcbiAgICAgICAgY29udGVudDogJyc7XG4gICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICAgICAgd2lkdGg6IDZweDtcbiAgICAgICAgaGVpZ2h0OiA2cHg7XG4gICAgICAgIGJhY2tncm91bmQ6ICNCMkJFQ0Q7XG4gICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgdG9wOiAxMnB4O1xuICAgICAgICBsZWZ0OiAwO1xuICAgICAgICBib3JkZXItcmFkaXVzOiA4cHg7IH1cbiAgYXJ0aWNsZSBiLFxuICBhcnRpY2xlIHN0cm9uZyB7XG4gICAgZm9udC13ZWlnaHQ6IDUwMDsgfVxuICBhcnRpY2xlIGJsb2NrcXVvdGUge1xuICAgIGJhY2tncm91bmQ6ICNmMmY1Zjg7XG4gICAgYm9yZGVyLXJhZGl1czogNHB4O1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICBwYWRkaW5nOiA2NHB4IDgwcHggNjhweCAxMTFweDtcbiAgICBjb2xvcjogIzVlNzQ5YTtcbiAgICBmb250LWZhbWlseTogXCJBZG9iZSBDYXNsb25cIiwgR2VvcmdpYSwgVGltZXMsIFwiVGltZXMgTmV3IFJvbWFuXCIsIHNlcmlmO1xuICAgIGZvbnQtc3R5bGU6IGl0YWxpYztcbiAgICBib3JkZXI6IG5vbmU7XG4gICAgbWFyZ2luOiA3N3B4IC0xNnB4IDU0cHg7IH1cbiAgICBhcnRpY2xlIGJsb2NrcXVvdGU6OmJlZm9yZSB7XG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICB0b3A6IC02cHg7XG4gICAgICBsZWZ0OiA1NHB4O1xuICAgICAgZm9udC1zaXplOiAxODBweDtcbiAgICAgIGNvbnRlbnQ6ICdcXDIwMUMnO1xuICAgICAgY29sb3I6ICNlM2U3ZWM7IH1cbiAgICBhcnRpY2xlIGJsb2NrcXVvdGUgcCB7XG4gICAgICBmb250LXNpemU6IDE4cHg7XG4gICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICB6LWluZGV4OiAxO1xuICAgICAgbGV0dGVyLXNwYWNpbmc6IC4wMjJlbTtcbiAgICAgIGxpbmUtaGVpZ2h0OiAxLjhlbTsgfVxuICAgICAgYXJ0aWNsZSBibG9ja3F1b3RlIHA6bGFzdC1jaGlsZCB7XG4gICAgICAgIG1hcmdpbi1ib3R0b206IDA7IH1cbiAgICBhcnRpY2xlIGJsb2NrcXVvdGUgY2l0ZSB7XG4gICAgICBmb250LXNpemU6IDE1cHg7XG4gICAgICBsZXR0ZXItc3BhY2luZzogLjAyZW07IH1cbiAgICAgIGFydGljbGUgYmxvY2txdW90ZSBjaXRlIHNwYW4ge1xuICAgICAgICBjb2xvcjogIzlkYTliZDtcbiAgICAgICAgbWFyZ2luLWxlZnQ6IDhweDsgfVxuICBhcnRpY2xlIGltZyB7XG4gICAgbWF4LXdpZHRoOiAxMDAlOyB9XG4gIGFydGljbGUgcHJlLFxuICBhcnRpY2xlIGNvZGUge1xuICAgIGJvcmRlcjogbm9uZTtcbiAgICBiYWNrZ3JvdW5kOiAjZjVmN2ZhOyB9XG4gIGFydGljbGUgZmlndXJlIHtcbiAgICB3aWR0aDogMjk1cHg7XG4gICAgZmxvYXQ6IHJpZ2h0O1xuICAgIG1hcmdpbjogOHB4IC0yMHB4IDE2cHggNzRweDsgfVxuICAgIGFydGljbGUgZmlndXJlLmxlZnQge1xuICAgICAgZmxvYXQ6IGxlZnQ7XG4gICAgICBtYXJnaW4tcmlnaHQ6IDc0cHg7XG4gICAgICBtYXJnaW4tbGVmdDogLTIwcHg7IH1cbiAgICBhcnRpY2xlIGZpZ3VyZSBpbWcge1xuICAgICAgYm94LXNoYWRvdzogMCA0cHggNDhweCByZ2JhKDAsIDAsIDAsIDAuMik7IH1cbiAgICBhcnRpY2xlIGZpZ3VyZSBmaWdjYXB0aW9uIHtcbiAgICAgIGNvbG9yOiAjYThiMGJlO1xuICAgICAgZm9udC1zaXplOiAxMXB4O1xuICAgICAgbWFyZ2luLXRvcDogMTNweDsgfVxuICAgIEBtZWRpYSAobWF4LXdpZHRoOiA3NjdweCkge1xuICAgICAgYXJ0aWNsZSBmaWd1cmUge1xuICAgICAgICBtYXJnaW4tcmlnaHQ6IDA7XG4gICAgICAgIG1hcmdpbi1sZWZ0OiAzMnB4OyB9XG4gICAgICAgIGFydGljbGUgZmlndXJlLmxlZnQge1xuICAgICAgICAgIG1hcmdpbi1sZWZ0OiAwO1xuICAgICAgICAgIG1hcmdpbi1yaWdodDogMzJweDsgfSB9XG4gICAgQG1lZGlhIChtYXgtd2lkdGg6IDQ4MHB4KSB7XG4gICAgICBhcnRpY2xlIGZpZ3VyZSB7XG4gICAgICAgIHdpZHRoOiAxMDAlOyB9IH1cbiAgYXJ0aWNsZSAudGFibGUtd3JhcCB7XG4gICAgb3ZlcmZsb3cteDogYXV0bztcbiAgICBtYXJnaW4tcmlnaHQ6IC0xNXB4O1xuICAgIHBhZGRpbmctcmlnaHQ6IDE1cHg7XG4gICAgYm94LXNpemluZzogY29udGVudC1ib3g7XG4gICAgZm9udC1zaXplOiAxM3B4OyB9XG4gICAgYXJ0aWNsZSAudGFibGUtd3JhcCB0ZCxcbiAgICBhcnRpY2xlIC50YWJsZS13cmFwIHRoIHtcbiAgICAgIG1pbi13aWR0aDogMTIwcHg7XG4gICAgICBwYWRkaW5nLXJpZ2h0OiAxMnB4OyB9XG4gICAgYXJ0aWNsZSAudGFibGUtd3JhcCB0YWJsZSB0Ym9keSB0ciB0ZCB7XG4gICAgICBib3JkZXItdG9wLWNvbG9yOiAjREVFM0VBOyB9XG4gICAgYXJ0aWNsZSAudGFibGUtd3JhcCB0YWJsZSA+IHRoZWFkID4gdHIgPiB0aCB7XG4gICAgICBib3JkZXItYm90dG9tLWNvbG9yOiAjRTlFREYzO1xuICAgICAgZm9udC13ZWlnaHQ6IDYwMDsgfVxuXG4ucmVzb3VyY2UtbGlzdCB7XG4gIG1hcmdpbi1ib3R0b206IDA7IH1cbiAgLnJlc291cmNlLWxpc3RfX2hlYWRlciAuYWxsIHtcbiAgICBmbG9hdDogcmlnaHQ7IH1cbiAgICAucmVzb3VyY2UtbGlzdF9faGVhZGVyIC5hbGwgaW9uLWljb24ge1xuICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgICAgdHJhbnNpdGlvbjogLjJzIHRyYW5zZm9ybSBlYXNlOyB9XG4gICAgLnJlc291cmNlLWxpc3RfX2hlYWRlciAuYWxsOmhvdmVyIGlvbi1pY29uIHtcbiAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgycHgpOyB9XG4gIC5yZXNvdXJjZS1saXN0X19oZWFkZXIgaDQge1xuICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XG4gICAgZm9udC1zaXplOiAxNHB4O1xuICAgIGxldHRlci1zcGFjaW5nOiAuMTJlbTsgfVxuICAucmVzb3VyY2UtbGlzdCAucmVzb3VyY2UtY2FyZC1saXN0IHtcbiAgICBtYXJnaW4tbGVmdDogLTEwcHg7XG4gICAgbWFyZ2luLXJpZ2h0OiAtMTBweDsgfVxuICAucmVzb3VyY2UtbGlzdCAucmVzb3VyY2UtY2FyZC1saXN0LS10aGlyZCAucmVzb3VyY2UtY2FyZCB7XG4gICAgcGFkZGluZzogNXB4O1xuICAgIGhlaWdodDogMjE0cHg7IH1cbiAgLnJlc291cmNlLWxpc3QgLnJlc291cmNlLWNhcmQtbGlzdC0tdGhpcmQgLnJlc291cmNlLWNhcmQgYSAudGl0bGUge1xuICAgIGZvbnQtc2l6ZTogMThweDsgfVxuIl19 */\n"
  },
  {
    "path": "content/css/pages/enterprise/resources/index.css",
    "content": ".ee-hero {\n  max-width: 640px;\n  padding-top: 130px;\n  padding-bottom: 160px; }\n  .ee-hero::before, .ee-hero::after {\n    display: none; }\n  .ee-hero h1 {\n    font-size: 52px;\n    line-height: 62px;\n    max-width: 930px;\n    letter-spacing: -0.03em;\n    color: #020814;\n    margin-top: 0;\n    margin-bottom: 16px; }\n  .ee-hero h4 {\n    font-family: \"Roboto Mono\", Menlo, Monaco, Consolas, \"Courier New\", monospace;\n    font-weight: bold;\n    font-size: 13px;\n    line-height: 26px;\n    letter-spacing: 0.14em;\n    text-transform: uppercase;\n    color: #92A1B3;\n    margin-bottom: 29px; }\n  .ee-hero p {\n    font-family: \"Eina\", \"Helvetica Neue\", Helvetica, sans-serif;\n    font-size: 24px;\n    font-weight: 400;\n    line-height: 36px;\n    letter-spacing: -0.04em;\n    color: rgba(39, 50, 63, 0.8); }\n  .ee-hero .btn {\n    padding-left: 24px;\n    padding-right: 20px;\n    padding-top: 18px;\n    padding-bottom: 18px;\n    font-size: 14px;\n    margin-top: 16px;\n    line-height: 20px;\n    letter-spacing: 0.08em;\n    color: white;\n    text-transform: uppercase;\n    font-weight: 700;\n    background: #3880FF;\n    box-shadow: 0px 2px 4px rgba(2, 8, 20, 0.1), 0px 1px 2px rgba(2, 8, 20, 0.08);\n    border-radius: 210px;\n    display: -ms-flexbox;\n    display: flex;\n    -ms-flex-align: center;\n        align-items: center; }\n    .ee-hero .btn::after {\n      background-image: url('data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"white\" viewBox=\"0 0 512 512\"><path d=\"M85 277.375h259.704L225.002 397.077 256 427l171-171L256 85l-29.922 29.924 118.626 119.701H85v42.75z\"/></svg>');\n      background-size: 100%;\n      content: '';\n      height: 20px;\n      width: 20px;\n      display: block;\n      margin-left: 8px;\n      -webkit-transform: translateY(-1px);\n              transform: translateY(-1px); }\n    .ee-hero .btn:hover {\n      background-color: #4f8bf5; }\n  .ee-hero--large h1 {\n    font-size: 62px;\n    line-height: 69px; }\n  .ee-hero--wide {\n    max-width: 960px; }\n  .ee-hero--centered {\n    display: -ms-flexbox;\n    display: flex;\n    -ms-flex-direction: column;\n        flex-direction: column;\n    -ms-flex-pack: center;\n        justify-content: center;\n    -ms-flex-align: center;\n        align-items: center;\n    text-align: center;\n    margin-left: auto;\n    margin-right: auto; }\n  @media (max-width: 767px) {\n    .ee-hero {\n      padding-top: 70px;\n      padding-bottom: 0; }\n      .ee-hero h1 {\n        font-size: 44px;\n        line-height: 52px; }\n      .ee-hero--large h1 {\n        font-size: 50px;\n        line-height: 60px; } }\n  @media (max-width: 480px) {\n    .ee-hero h1 {\n      font-size: 36px;\n      line-height: 44px;\n      margin-bottom: 6px; }\n    .ee-hero--large h1 {\n      font-size: 42px;\n      line-height: 52px; }\n    .ee-hero .btn {\n      margin-top: 8px; } }\n\n.ee-main {\n  margin-top: 0; }\n  .ee-main section {\n    margin-bottom: 200px; }\n  .ee-main .left,\n  .ee-main .right,\n  .ee-main .center {\n    display: -ms-flexbox;\n    display: flex; }\n    .ee-main .left::before, .ee-main .left::after,\n    .ee-main .right::before,\n    .ee-main .right::after,\n    .ee-main .center::before,\n    .ee-main .center::after {\n      display: none; }\n  .ee-main .left .content,\n  .ee-main .right .content {\n    max-width: 480px; }\n    @media (max-width: 767px) {\n      .ee-main .left .content,\n      .ee-main .right .content {\n        max-width: 100%;\n        text-align: center; }\n        .ee-main .left .content li,\n        .ee-main .right .content li {\n          text-align: left; } }\n  .ee-main .left {\n    -ms-flex-direction: row;\n        flex-direction: row; }\n    .ee-main .left .graphics {\n      margin-left: auto; }\n  .ee-main .right {\n    -ms-flex-direction: row-reverse;\n        flex-direction: row-reverse;\n    margin-left: auto; }\n    .ee-main .right .graphics {\n      margin-right: auto; }\n  .ee-main .center {\n    -ms-flex-direction: column;\n        flex-direction: column;\n    -ms-flex-align: center;\n        align-items: center;\n    text-align: center; }\n    .ee-main .center .content {\n      width: 894px;\n      max-width: 100%; }\n  .ee-main .full .content {\n    max-width: 568px; }\n  @media (max-width: 767px) {\n    .ee-main .right,\n    .ee-main .left {\n      -ms-flex-direction: column-reverse;\n          flex-direction: column-reverse;\n      -ms-flex-align: center;\n          align-items: center; }\n      .ee-main .right .graphics,\n      .ee-main .left .graphics {\n        margin-bottom: 24px;\n        margin-left: 0;\n        margin-right: 0; }\n    .ee-main section {\n      margin-bottom: 100px; } }\n  .ee-main .graphics {\n    -ms-flex-pack: end;\n        justify-content: flex-end; }\n    .ee-main .graphics img {\n      width: 100%; }\n  .ee-main h2 {\n    font-size: 44px;\n    line-height: 51px;\n    letter-spacing: -0.03em; }\n    .ee-main h2:first-child {\n      margin-top: 0; }\n  .ee-main .ee-section__title {\n    font-family: \"Roboto Mono\", Menlo, Monaco, Consolas, \"Courier New\", monospace;\n    font-style: normal;\n    font-weight: bold;\n    font-size: 12px;\n    line-height: 23px;\n    letter-spacing: 0.14em;\n    text-transform: uppercase;\n    color: #5B708B;\n    margin-top: 0; }\n  .ee-main .ee-section__cta {\n    display: inline-block;\n    font-size: 18px;\n    font-weight: 500;\n    margin-top: 16px; }\n  .ee-main p {\n    font-size: 20px;\n    line-height: 31px;\n    letter-spacing: -0.02em;\n    color: #5B708B;\n    margin-top: 18px; }\n    .ee-main p.sm {\n      font-size: 16px;\n      line-height: 29px;\n      letter-spacing: -0.01em; }\n  .ee-main ul:not(.frameworks) {\n    margin-top: 54px; }\n  .ee-main .content ul {\n    padding-left: 0; }\n  .ee-main .content li {\n    font-size: 16px;\n    line-height: 23px;\n    letter-spacing: -0.02em;\n    color: #1A232F;\n    margin-bottom: 40px;\n    padding-left: 30px;\n    list-style: none;\n    position: relative; }\n    .ee-main .content li::before {\n      background-image: url(\"/img/enterprise/check.svg\");\n      background-size: 100%;\n      content: '';\n      height: 10px;\n      width: 13px;\n      position: absolute;\n      left: 0;\n      top: 8px; }\n  .ee-main .features {\n    display: -ms-grid;\n    display: grid;\n    -ms-grid-columns: 1fr 1fr 1fr;\n        grid-template-columns: 1fr 1fr 1fr;\n    grid-column-gap: 64px;\n    grid-row-gap: 24px;\n    padding: 0; }\n    .ee-main .features li {\n      list-style: none; }\n    .ee-main .features .icon {\n      margin-bottom: 16px;\n      width: 48px; }\n    @media (max-width: 991px) {\n      .ee-main .features {\n        -ms-grid-columns: 1fr 1fr;\n            grid-template-columns: 1fr 1fr; } }\n    @media (max-width: 500px) {\n      .ee-main .features {\n        -ms-grid-columns: 1fr;\n            grid-template-columns: 1fr; } }\n  .ee-main .cta-card {\n    background: #4a8bfc;\n    border-radius: 12px;\n    padding: 72px 72px 60px;\n    background-size: cover;\n    color: white; }\n    .ee-main .cta-card .ee-section__title,\n    .ee-main .cta-card p {\n      color: #CED6E0; }\n\n#how-to {\n  margin-bottom: 0;\n  position: relative;\n  padding-top: 140px; }\n  #how-to::before {\n    position: absolute;\n    top: 0;\n    width: 100vw;\n    border-top: 1px solid rgba(146, 161, 179, 0.3);\n    content: '';\n    display: block; }\n\n.cards--red-v-blue {\n  display: -ms-flexbox;\n  display: flex;\n  text-align: left;\n  -ms-flex-pack: center;\n      justify-content: center;\n  margin-top: 38px; }\n  .cards--red-v-blue__card {\n    background: #7CABFF;\n    border-radius: 8px;\n    padding: 40px 40px 34px;\n    display: -ms-flexbox;\n    display: flex;\n    -ms-flex-direction: column;\n        flex-direction: column;\n    -ms-flex-align: start;\n        align-items: flex-start;\n    margin-right: 24px;\n    -ms-flex: 0 1 460px;\n        flex: 0 1 460px;\n    border-radius: 8px; }\n    .cards--red-v-blue__card:last-child {\n      margin-right: 0; }\n    .cards--red-v-blue__card:nth-child(2) {\n      background: #F88D8D; }\n      .cards--red-v-blue__card:nth-child(2) .btn {\n        background: rgba(244, 84, 84, 0.5); }\n  .cards--red-v-blue h3 {\n    font-size: 24px;\n    line-height: normal;\n    letter-spacing: -0.02em;\n    color: white;\n    margin-top: 0; }\n  .cards--red-v-blue p {\n    font-size: 18px;\n    line-height: 26px;\n    letter-spacing: -0.02em;\n    color: rgba(255, 255, 255, 0.7);\n    margin-top: 0;\n    margin-bottom: 22px; }\n  .cards--red-v-blue .btn {\n    margin-top: auto;\n    font-size: 14px;\n    line-height: 22px;\n    letter-spacing: 0.09em;\n    text-transform: uppercase;\n    padding: 10px 14px;\n    font-weight: 600;\n    border-radius: 8px;\n    background: rgba(56, 128, 255, 0.5); }\n    .cards--red-v-blue .btn ion-icon {\n      display: inline-block;\n      height: 14px;\n      width: 14px;\n      vertical-align: -2px; }\n  @media (max-width: 767px) {\n    .cards--red-v-blue {\n      -ms-flex-direction: column;\n          flex-direction: column;\n      -ms-flex-align: center;\n          align-items: center; }\n      .cards--red-v-blue__card {\n        -ms-flex: auto;\n            flex: auto;\n        margin-right: 0;\n        margin-top: 20px;\n        max-width: 460px; } }\n\naside {\n  background: linear-gradient(180deg, #F9FAFB 0%, #FFFFFF 100%);\n  margin-top: -60px;\n  padding-top: 200px;\n  padding-bottom: 120px; }\n  aside p {\n    color: #414D5C; }\n  aside .content {\n    max-width: 432px;\n    margin: 0 auto;\n    text-align: center;\n    display: block; }\n\n.ee-get-started {\n  max-width: 700px; }\n  .ee-get-started h3 {\n    color: #414D5C; }\n\n.resources {\n  padding-bottom: 120px; }\n  @media (max-width: 768px) {\n    .resources {\n      padding-bottom: 60px; } }\n  .resources .cards {\n    list-style-type: none;\n    margin: 0;\n    padding: 0;\n    display: -ms-flexbox;\n    display: flex;\n    margin-left: -24px;\n    margin-right: -24px; }\n  .resources hgroup {\n    display: -ms-flexbox;\n    display: flex;\n    -ms-flex-pack: justify;\n        justify-content: space-between;\n    -ms-flex-align: baseline;\n        align-items: baseline; }\n    .resources hgroup h3 {\n      font-weight: 600;\n      line-height: normal;\n      font-size: 28px;\n      letter-spacing: -0.02em;\n      color: #1A232F;\n      margin-bottom: 0; }\n    .resources hgroup h4 {\n      font-weight: 600;\n      font-size: 24px;\n      line-height: normal;\n      letter-spacing: -0.02em;\n      color: #1A232F; }\n    .resources hgroup h5 {\n      font-weight: 700;\n      line-height: 1;\n      font-size: 14px;\n      letter-spacing: 0.08em;\n      color: #3880FF;\n      text-transform: uppercase; }\n    .resources hgroup ion-icon {\n      -webkit-transform: translateY(2px);\n              transform: translateY(2px); }\n  .resources .cards li {\n    display: block;\n    -ms-flex: 0 0 33.33%;\n        flex: 0 0 33.33%;\n    padding: 24px; }\n    .resources .cards li a {\n      display: block;\n      width: 100%; }\n    .resources .cards li .img-wrapper {\n      overflow: hidden;\n      border-radius: 6px; }\n    .resources .cards li img {\n      width: 100%; }\n    .resources .cards li h6 {\n      line-height: 23px;\n      font-size: 12px;\n      letter-spacing: 0.12em;\n      text-transform: uppercase;\n      color: #B2BECD;\n      margin-bottom: 0;\n      margin-top: 16px; }\n    .resources .cards li h4 {\n      font-size: 20px;\n      margin-top: 10px;\n      color: #1A232F;\n      font-weight: 600; }\n    .resources .cards li p {\n      color: #5B708B;\n      line-height: 22px;\n      font-size: 14px;\n      letter-spacing: -0.02em; }\n  @media (max-width: 992px) {\n    .resources .cards {\n      margin-left: -12px;\n      margin-right: -12px; }\n    .resources .cards li {\n      padding: 12px; } }\n  @media (max-width: 768px) {\n    .resources .cards {\n      -ms-flex-wrap: wrap;\n          flex-wrap: wrap; }\n    .resources .cards li {\n      -ms-flex: 0 0 50%;\n          flex: 0 0 50%; } }\n  @media (max-width: 480px) {\n    .resources .cards li {\n      -ms-flex: 0 0 100%;\n          flex: 0 0 100%; }\n    .resources h5 {\n      display: none; } }\n\n.ee-main .features li p,\n.ee-main .cards li p,\n.resources .features li p,\n.resources .cards li p {\n  font-size: 16px;\n  line-height: 29px;\n  letter-spacing: -0.01em;\n  color: #73849A;\n  margin-top: 0; }\n\n.ee-main .features li h4,\n.ee-main .cards li h4,\n.resources .features li h4,\n.resources .cards li h4 {\n  font-size: 20px;\n  line-height: normal;\n  letter-spacing: -0.02em;\n  color: #020814;\n  font-weight: 600; }\n\n.resources .cards {\n  margin-top: 0 !important;\n  text-align: left;\n  -ms-flex-wrap: wrap;\n      flex-wrap: wrap; }\n  .resources .cards .img-wrapper {\n    border-radius: 6px; }\n    .resources .cards .img-wrapper + h4 {\n      margin-top: 24px; }\n  @media (min-width: 1220px) {\n    .resources .cards {\n      margin-left: -40px;\n      margin-right: -40px; }\n      .resources .cards li {\n        padding: 40px; } }\n\n.resources .resources__customer-logos {\n  display: -ms-flexbox;\n  display: flex;\n  margin: 26px auto 0;\n  padding: 0;\n  -ms-flex-pack: justify;\n      justify-content: space-between;\n  max-width: 780px;\n  width: 100%; }\n  .resources .resources__customer-logos li {\n    background: url(\"/img/enterprise/customer-logos.png\");\n    background-size: 428px 46px;\n    background-repeat: no-repeat;\n    display: block;\n    height: 46px; }\n  @media (max-width: 768px) {\n    .resources .resources__customer-logos {\n      -ms-flex-pack: center;\n          justify-content: center;\n      -ms-flex-wrap: wrap;\n          flex-wrap: wrap;\n      max-width: 460px; }\n      .resources .resources__customer-logos li {\n        margin: 20px; } }\n  .resources .resources__customer-logos .mastercard {\n    width: 58px; }\n  .resources .resources__customer-logos .nationwide {\n    background-position: -58px 0;\n    width: 33px; }\n  .resources .resources__customer-logos .uniqlo {\n    background-position: -91px 0;\n    width: 65px; }\n  .resources .resources__customer-logos .ibm {\n    background-position: -156px 0;\n    width: 64px; }\n  .resources .resources__customer-logos .ing {\n    background-position: -222px 0;\n    width: 103px; }\n  .resources .resources__customer-logos .sap {\n    background-position: -326px 0;\n    width: 56px; }\n  .resources .resources__customer-logos .nasa {\n    background-position: -380px 0;\n    width: 50px; }\n\nbody {\n  font-weight: 600;\n  letter-spacing: -0.015em; }\n\n.ee-hero {\n  padding-bottom: 24px; }\n\n.banner {\n  text-align: left;\n  border-bottom: 1px solid #e3e8f1; }\n  .banner .transitionTitle {\n    margin-bottom: 60px; }\n  .banner .hero-content {\n    display: -ms-flexbox;\n    display: flex;\n    -ms-flex-direction: column;\n        flex-direction: column; }\n  .banner .resource-card-list {\n    margin-bottom: 64px; }\n  @media (max-width: 992px) {\n    .banner .transitionTitle {\n      margin-bottom: 40px; } }\n  @media (max-width: 768px) {\n    .banner {\n      padding-top: 130px; }\n      .banner h1,\n      .banner p {\n        text-align: center; } }\n\n.resource-list {\n  margin-top: 70px; }\n  .resource-list:last-child {\n    margin-bottom: 100px; }\n  @media (max-width: 992px) {\n    .resource-list {\n      margin-top: 50px; } }\n\n.resource-list__header {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-pack: justify;\n      justify-content: space-between;\n  -ms-flex-align: baseline;\n      align-items: baseline; }\n  .resource-list__header h4 {\n    font-size: 18px;\n    font-weight: 700;\n    color: #24282e;\n    margin-bottom: 4px; }\n  .resource-list__header a {\n    font-size: 16px;\n    font-weight: 600; }\n    .resource-list__header a:after {\n      transition: -webkit-transform 0.3s;\n      transition: transform 0.3s;\n      transition: transform 0.3s, -webkit-transform 0.3s;\n      font-family: 'Ionicons';\n      content: '\\f287';\n      font-size: 16px;\n      margin-left: 6px;\n      display: inline-block; }\n    .resource-list__header a:hover {\n      color: #186bfb; }\n    .resource-list__header a:hover:after {\n      -webkit-transform: translate3d(3px, 0, 0);\n              transform: translate3d(3px, 0, 0); }\n\n.tabs__scroll {\n  position: relative; }\n  @media (max-width: 560px) {\n    .tabs__scroll:before, .tabs__scroll:after {\n      transition: opacity 0.3s;\n      pointer-events: none;\n      position: absolute;\n      right: 0;\n      top: 0;\n      opacity: 0; }\n    .tabs__scroll:before {\n      font-family: 'Ionicons';\n      content: '\\f3d1';\n      font-size: 14px;\n      color: #626c7d;\n      z-index: 3;\n      top: 50%;\n      -webkit-transform: translateY(-60%);\n              transform: translateY(-60%); }\n    .tabs__scroll:after {\n      content: '';\n      display: block;\n      width: 80px;\n      height: 100%;\n      z-index: 2;\n      background-image: linear-gradient(90deg, rgba(246, 248, 252, 0) 0%, #F6F8FC 75%); } }\n\n.tabs {\n  width: 100%;\n  max-width: 780px;\n  margin: 0 auto;\n  overflow-x: auto;\n  position: relative;\n  z-index: 1;\n  -webkit-overflow-scrolling: touch; }\n  .tabs ul {\n    margin: 0 auto;\n    padding: 0;\n    padding-left: 40px;\n    padding-right: 40px;\n    list-style-type: none;\n    display: -ms-flexbox;\n    display: flex;\n    -ms-flex-align: end;\n        align-items: flex-end;\n    -ms-flex-pack: justify;\n        justify-content: space-between;\n    min-width: 560px; }\n\n.tabs__scroll--hint:before,\n.tabs__scroll--hint:after {\n  opacity: 1; }\n\n.tabs__item + .tabs__item {\n  margin-left: 20px; }\n\n.tabs__item a {\n  position: relative;\n  transition: border 0.3s, color 0.3s;\n  text-decoration: none;\n  display: inline-block;\n  font-size: 14px;\n  color: #8e9bb1;\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-align: center;\n      align-items: center;\n  padding-bottom: 30px;\n  border-bottom: 2px solid transparent; }\n  .tabs__item a span {\n    display: block;\n    -ms-flex: 1 0 auto;\n        flex: 1 0 auto; }\n\n.tabs__item svg {\n  width: 20px;\n  height: 20px;\n  margin: 0 10px 0 0; }\n\n.tabs__item .highlight {\n  transition: fill 0.3s;\n  fill: #D8E0EF; }\n\n.tabs__item .bg {\n  transition: fill 0.3s;\n  fill: #A1AEC2; }\n\n.tabs__item a:hover,\n.tabs__item.active a {\n  color: #3880ff; }\n  .tabs__item a:hover .highlight,\n  .tabs__item.active a .highlight {\n    fill: #C1DBFF; }\n  .tabs__item a:hover .bg,\n  .tabs__item.active a .bg {\n    fill: #4D8CFD; }\n\n.tabs__item a:focus,\n.tabs__item a:active {\n  text-decoration: none;\n  outline: none; }\n\n.tabs__item.active a {\n  pointer-events: none;\n  cursor: default;\n  border-bottom-color: #3880ff; }\n\n@media (max-width: 992px) {\n  .tabs__item a {\n    padding-bottom: 8px;\n    -ms-flex-direction: column;\n        flex-direction: column; }\n    .tabs__item a svg {\n      margin: 0;\n      margin-bottom: 6px; } }\n\n/*# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImluZGV4LmNzcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtFQUNFLGlCQUFpQjtFQUNqQixtQkFBbUI7RUFDbkIsc0JBQXNCLEVBQUU7RUFDeEI7SUFDRSxjQUFjLEVBQUU7RUFDbEI7SUFDRSxnQkFBZ0I7SUFDaEIsa0JBQWtCO0lBQ2xCLGlCQUFpQjtJQUNqQix3QkFBd0I7SUFDeEIsZUFBZTtJQUNmLGNBQWM7SUFDZCxvQkFBb0IsRUFBRTtFQUN4QjtJQUNFLDhFQUE4RTtJQUM5RSxrQkFBa0I7SUFDbEIsZ0JBQWdCO0lBQ2hCLGtCQUFrQjtJQUNsQix1QkFBdUI7SUFDdkIsMEJBQTBCO0lBQzFCLGVBQWU7SUFDZixvQkFBb0IsRUFBRTtFQUN4QjtJQUNFLDZEQUE2RDtJQUM3RCxnQkFBZ0I7SUFDaEIsaUJBQWlCO0lBQ2pCLGtCQUFrQjtJQUNsQix3QkFBd0I7SUFDeEIsNkJBQTZCLEVBQUU7RUFDakM7SUFDRSxtQkFBbUI7SUFDbkIsb0JBQW9CO0lBQ3BCLGtCQUFrQjtJQUNsQixxQkFBcUI7SUFDckIsZ0JBQWdCO0lBQ2hCLGlCQUFpQjtJQUNqQixrQkFBa0I7SUFDbEIsdUJBQXVCO0lBQ3ZCLGFBQWE7SUFDYiwwQkFBMEI7SUFDMUIsaUJBQWlCO0lBQ2pCLG9CQUFvQjtJQUNwQiw4RUFBOEU7SUFDOUUscUJBQXFCO0lBQ3JCLHFCQUFjO0lBQWQsY0FBYztJQUNkLHVCQUFvQjtRQUFwQixvQkFBb0IsRUFBRTtJQUN0QjtNQUNFLGtQQUFrUDtNQUNsUCxzQkFBc0I7TUFDdEIsWUFBWTtNQUNaLGFBQWE7TUFDYixZQUFZO01BQ1osZUFBZTtNQUNmLGlCQUFpQjtNQUNqQixvQ0FBNEI7Y0FBNUIsNEJBQTRCLEVBQUU7SUFDaEM7TUFDRSwwQkFBMEIsRUFBRTtFQUNoQztJQUNFLGdCQUFnQjtJQUNoQixrQkFBa0IsRUFBRTtFQUN0QjtJQUNFLGlCQUFpQixFQUFFO0VBQ3JCO0lBQ0UscUJBQWM7SUFBZCxjQUFjO0lBQ2QsMkJBQXVCO1FBQXZCLHVCQUF1QjtJQUN2QixzQkFBd0I7UUFBeEIsd0JBQXdCO0lBQ3hCLHVCQUFvQjtRQUFwQixvQkFBb0I7SUFDcEIsbUJBQW1CO0lBQ25CLGtCQUFrQjtJQUNsQixtQkFBbUIsRUFBRTtFQUN2QjtJQUNFO01BQ0Usa0JBQWtCO01BQ2xCLGtCQUFrQixFQUFFO01BQ3BCO1FBQ0UsZ0JBQWdCO1FBQ2hCLGtCQUFrQixFQUFFO01BQ3RCO1FBQ0UsZ0JBQWdCO1FBQ2hCLGtCQUFrQixFQUFFLEVBQUU7RUFDNUI7SUFDRTtNQUNFLGdCQUFnQjtNQUNoQixrQkFBa0I7TUFDbEIsbUJBQW1CLEVBQUU7SUFDdkI7TUFDRSxnQkFBZ0I7TUFDaEIsa0JBQWtCLEVBQUU7SUFDdEI7TUFDRSxnQkFBZ0IsRUFBRSxFQUFFOztBQUUxQjtFQUNFLGNBQWMsRUFBRTtFQUNoQjtJQUNFLHFCQUFxQixFQUFFO0VBQ3pCOzs7SUFHRSxxQkFBYztJQUFkLGNBQWMsRUFBRTtJQUNoQjs7Ozs7TUFLRSxjQUFjLEVBQUU7RUFDcEI7O0lBRUUsaUJBQWlCLEVBQUU7SUFDbkI7TUFDRTs7UUFFRSxnQkFBZ0I7UUFDaEIsbUJBQW1CLEVBQUU7UUFDckI7O1VBRUUsaUJBQWlCLEVBQUUsRUFBRTtFQUM3QjtJQUNFLHdCQUFvQjtRQUFwQixvQkFBb0IsRUFBRTtJQUN0QjtNQUNFLGtCQUFrQixFQUFFO0VBQ3hCO0lBQ0UsZ0NBQTRCO1FBQTVCLDRCQUE0QjtJQUM1QixrQkFBa0IsRUFBRTtJQUNwQjtNQUNFLG1CQUFtQixFQUFFO0VBQ3pCO0lBQ0UsMkJBQXVCO1FBQXZCLHVCQUF1QjtJQUN2Qix1QkFBb0I7UUFBcEIsb0JBQW9CO0lBQ3BCLG1CQUFtQixFQUFFO0lBQ3JCO01BQ0UsYUFBYTtNQUNiLGdCQUFnQixFQUFFO0VBQ3RCO0lBQ0UsaUJBQWlCLEVBQUU7RUFDckI7SUFDRTs7TUFFRSxtQ0FBK0I7VUFBL0IsK0JBQStCO01BQy9CLHVCQUFvQjtVQUFwQixvQkFBb0IsRUFBRTtNQUN0Qjs7UUFFRSxvQkFBb0I7UUFDcEIsZUFBZTtRQUNmLGdCQUFnQixFQUFFO0lBQ3RCO01BQ0UscUJBQXFCLEVBQUUsRUFBRTtFQUM3QjtJQUNFLG1CQUEwQjtRQUExQiwwQkFBMEIsRUFBRTtJQUM1QjtNQUNFLFlBQVksRUFBRTtFQUNsQjtJQUNFLGdCQUFnQjtJQUNoQixrQkFBa0I7SUFDbEIsd0JBQXdCLEVBQUU7SUFDMUI7TUFDRSxjQUFjLEVBQUU7RUFDcEI7SUFDRSw4RUFBOEU7SUFDOUUsbUJBQW1CO0lBQ25CLGtCQUFrQjtJQUNsQixnQkFBZ0I7SUFDaEIsa0JBQWtCO0lBQ2xCLHVCQUF1QjtJQUN2QiwwQkFBMEI7SUFDMUIsZUFBZTtJQUNmLGNBQWMsRUFBRTtFQUNsQjtJQUNFLHNCQUFzQjtJQUN0QixnQkFBZ0I7SUFDaEIsaUJBQWlCO0lBQ2pCLGlCQUFpQixFQUFFO0VBQ3JCO0lBQ0UsZ0JBQWdCO0lBQ2hCLGtCQUFrQjtJQUNsQix3QkFBd0I7SUFDeEIsZUFBZTtJQUNmLGlCQUFpQixFQUFFO0lBQ25CO01BQ0UsZ0JBQWdCO01BQ2hCLGtCQUFrQjtNQUNsQix3QkFBd0IsRUFBRTtFQUM5QjtJQUNFLGlCQUFpQixFQUFFO0VBQ3JCO0lBQ0UsZ0JBQWdCLEVBQUU7RUFDcEI7SUFDRSxnQkFBZ0I7SUFDaEIsa0JBQWtCO0lBQ2xCLHdCQUF3QjtJQUN4QixlQUFlO0lBQ2Ysb0JBQW9CO0lBQ3BCLG1CQUFtQjtJQUNuQixpQkFBaUI7SUFDakIsbUJBQW1CLEVBQUU7SUFDckI7TUFDRSxtREFBbUQ7TUFDbkQsc0JBQXNCO01BQ3RCLFlBQVk7TUFDWixhQUFhO01BQ2IsWUFBWTtNQUNaLG1CQUFtQjtNQUNuQixRQUFRO01BQ1IsU0FBUyxFQUFFO0VBQ2Y7SUFDRSxrQkFBYztJQUFkLGNBQWM7SUFDZCw4QkFBbUM7UUFBbkMsbUNBQW1DO0lBQ25DLHNCQUFzQjtJQUN0QixtQkFBbUI7SUFDbkIsV0FBVyxFQUFFO0lBQ2I7TUFDRSxpQkFBaUIsRUFBRTtJQUNyQjtNQUNFLG9CQUFvQjtNQUNwQixZQUFZLEVBQUU7SUFDaEI7TUFDRTtRQUNFLDBCQUErQjtZQUEvQiwrQkFBK0IsRUFBRSxFQUFFO0lBQ3ZDO01BQ0U7UUFDRSxzQkFBMkI7WUFBM0IsMkJBQTJCLEVBQUUsRUFBRTtFQUNyQztJQUNFLG9CQUFvQjtJQUNwQixvQkFBb0I7SUFDcEIsd0JBQXdCO0lBQ3hCLHVCQUF1QjtJQUN2QixhQUFhLEVBQUU7SUFDZjs7TUFFRSxlQUFlLEVBQUU7O0FBRXZCO0VBQ0UsaUJBQWlCO0VBQ2pCLG1CQUFtQjtFQUNuQixtQkFBbUIsRUFBRTtFQUNyQjtJQUNFLG1CQUFtQjtJQUNuQixPQUFPO0lBQ1AsYUFBYTtJQUNiLCtDQUErQztJQUMvQyxZQUFZO0lBQ1osZUFBZSxFQUFFOztBQUVyQjtFQUNFLHFCQUFjO0VBQWQsY0FBYztFQUNkLGlCQUFpQjtFQUNqQixzQkFBd0I7TUFBeEIsd0JBQXdCO0VBQ3hCLGlCQUFpQixFQUFFO0VBQ25CO0lBQ0Usb0JBQW9CO0lBQ3BCLG1CQUFtQjtJQUNuQix3QkFBd0I7SUFDeEIscUJBQWM7SUFBZCxjQUFjO0lBQ2QsMkJBQXVCO1FBQXZCLHVCQUF1QjtJQUN2QixzQkFBd0I7UUFBeEIsd0JBQXdCO0lBQ3hCLG1CQUFtQjtJQUNuQixvQkFBZ0I7UUFBaEIsZ0JBQWdCO0lBQ2hCLG1CQUFtQixFQUFFO0lBQ3JCO01BQ0UsZ0JBQWdCLEVBQUU7SUFDcEI7TUFDRSxvQkFBb0IsRUFBRTtNQUN0QjtRQUNFLG1DQUFtQyxFQUFFO0VBQzNDO0lBQ0UsZ0JBQWdCO0lBQ2hCLG9CQUFvQjtJQUNwQix3QkFBd0I7SUFDeEIsYUFBYTtJQUNiLGNBQWMsRUFBRTtFQUNsQjtJQUNFLGdCQUFnQjtJQUNoQixrQkFBa0I7SUFDbEIsd0JBQXdCO0lBQ3hCLGdDQUFnQztJQUNoQyxjQUFjO0lBQ2Qsb0JBQW9CLEVBQUU7RUFDeEI7SUFDRSxpQkFBaUI7SUFDakIsZ0JBQWdCO0lBQ2hCLGtCQUFrQjtJQUNsQix1QkFBdUI7SUFDdkIsMEJBQTBCO0lBQzFCLG1CQUFtQjtJQUNuQixpQkFBaUI7SUFDakIsbUJBQW1CO0lBQ25CLG9DQUFvQyxFQUFFO0lBQ3RDO01BQ0Usc0JBQXNCO01BQ3RCLGFBQWE7TUFDYixZQUFZO01BQ1oscUJBQXFCLEVBQUU7RUFDM0I7SUFDRTtNQUNFLDJCQUF1QjtVQUF2Qix1QkFBdUI7TUFDdkIsdUJBQW9CO1VBQXBCLG9CQUFvQixFQUFFO01BQ3RCO1FBQ0UsZUFBVztZQUFYLFdBQVc7UUFDWCxnQkFBZ0I7UUFDaEIsaUJBQWlCO1FBQ2pCLGlCQUFpQixFQUFFLEVBQUU7O0FBRTdCO0VBQ0UsOERBQThEO0VBQzlELGtCQUFrQjtFQUNsQixtQkFBbUI7RUFDbkIsc0JBQXNCLEVBQUU7RUFDeEI7SUFDRSxlQUFlLEVBQUU7RUFDbkI7SUFDRSxpQkFBaUI7SUFDakIsZUFBZTtJQUNmLG1CQUFtQjtJQUNuQixlQUFlLEVBQUU7O0FBRXJCO0VBQ0UsaUJBQWlCLEVBQUU7RUFDbkI7SUFDRSxlQUFlLEVBQUU7O0FBRXJCO0VBQ0Usc0JBQXNCLEVBQUU7RUFDeEI7SUFDRTtNQUNFLHFCQUFxQixFQUFFLEVBQUU7RUFDN0I7SUFDRSxzQkFBc0I7SUFDdEIsVUFBVTtJQUNWLFdBQVc7SUFDWCxxQkFBYztJQUFkLGNBQWM7SUFDZCxtQkFBbUI7SUFDbkIsb0JBQW9CLEVBQUU7RUFDeEI7SUFDRSxxQkFBYztJQUFkLGNBQWM7SUFDZCx1QkFBK0I7UUFBL0IsK0JBQStCO0lBQy9CLHlCQUFzQjtRQUF0QixzQkFBc0IsRUFBRTtJQUN4QjtNQUNFLGlCQUFpQjtNQUNqQixvQkFBb0I7TUFDcEIsZ0JBQWdCO01BQ2hCLHdCQUF3QjtNQUN4QixlQUFlO01BQ2YsaUJBQWlCLEVBQUU7SUFDckI7TUFDRSxpQkFBaUI7TUFDakIsZ0JBQWdCO01BQ2hCLG9CQUFvQjtNQUNwQix3QkFBd0I7TUFDeEIsZUFBZSxFQUFFO0lBQ25CO01BQ0UsaUJBQWlCO01BQ2pCLGVBQWU7TUFDZixnQkFBZ0I7TUFDaEIsdUJBQXVCO01BQ3ZCLGVBQWU7TUFDZiwwQkFBMEIsRUFBRTtJQUM5QjtNQUNFLG1DQUEyQjtjQUEzQiwyQkFBMkIsRUFBRTtFQUNqQztJQUNFLGVBQWU7SUFDZixxQkFBaUI7UUFBakIsaUJBQWlCO0lBQ2pCLGNBQWMsRUFBRTtJQUNoQjtNQUNFLGVBQWU7TUFDZixZQUFZLEVBQUU7SUFDaEI7TUFDRSxpQkFBaUI7TUFDakIsbUJBQW1CLEVBQUU7SUFDdkI7TUFDRSxZQUFZLEVBQUU7SUFDaEI7TUFDRSxrQkFBa0I7TUFDbEIsZ0JBQWdCO01BQ2hCLHVCQUF1QjtNQUN2QiwwQkFBMEI7TUFDMUIsZUFBZTtNQUNmLGlCQUFpQjtNQUNqQixpQkFBaUIsRUFBRTtJQUNyQjtNQUNFLGdCQUFnQjtNQUNoQixpQkFBaUI7TUFDakIsZUFBZTtNQUNmLGlCQUFpQixFQUFFO0lBQ3JCO01BQ0UsZUFBZTtNQUNmLGtCQUFrQjtNQUNsQixnQkFBZ0I7TUFDaEIsd0JBQXdCLEVBQUU7RUFDOUI7SUFDRTtNQUNFLG1CQUFtQjtNQUNuQixvQkFBb0IsRUFBRTtJQUN4QjtNQUNFLGNBQWMsRUFBRSxFQUFFO0VBQ3RCO0lBQ0U7TUFDRSxvQkFBZ0I7VUFBaEIsZ0JBQWdCLEVBQUU7SUFDcEI7TUFDRSxrQkFBYztVQUFkLGNBQWMsRUFBRSxFQUFFO0VBQ3RCO0lBQ0U7TUFDRSxtQkFBZTtVQUFmLGVBQWUsRUFBRTtJQUNuQjtNQUNFLGNBQWMsRUFBRSxFQUFFOztBQUV4Qjs7OztFQUlFLGdCQUFnQjtFQUNoQixrQkFBa0I7RUFDbEIsd0JBQXdCO0VBQ3hCLGVBQWU7RUFDZixjQUFjLEVBQUU7O0FBRWxCOzs7O0VBSUUsZ0JBQWdCO0VBQ2hCLG9CQUFvQjtFQUNwQix3QkFBd0I7RUFDeEIsZUFBZTtFQUNmLGlCQUFpQixFQUFFOztBQUVyQjtFQUNFLHlCQUF5QjtFQUN6QixpQkFBaUI7RUFDakIsb0JBQWdCO01BQWhCLGdCQUFnQixFQUFFO0VBQ2xCO0lBQ0UsbUJBQW1CLEVBQUU7SUFDckI7TUFDRSxpQkFBaUIsRUFBRTtFQUN2QjtJQUNFO01BQ0UsbUJBQW1CO01BQ25CLG9CQUFvQixFQUFFO01BQ3RCO1FBQ0UsY0FBYyxFQUFFLEVBQUU7O0FBRTFCO0VBQ0UscUJBQWM7RUFBZCxjQUFjO0VBQ2Qsb0JBQW9CO0VBQ3BCLFdBQVc7RUFDWCx1QkFBK0I7TUFBL0IsK0JBQStCO0VBQy9CLGlCQUFpQjtFQUNqQixZQUFZLEVBQUU7RUFDZDtJQUNFLHNEQUFzRDtJQUN0RCw0QkFBNEI7SUFDNUIsNkJBQTZCO0lBQzdCLGVBQWU7SUFDZixhQUFhLEVBQUU7RUFDakI7SUFDRTtNQUNFLHNCQUF3QjtVQUF4Qix3QkFBd0I7TUFDeEIsb0JBQWdCO1VBQWhCLGdCQUFnQjtNQUNoQixpQkFBaUIsRUFBRTtNQUNuQjtRQUNFLGFBQWEsRUFBRSxFQUFFO0VBQ3ZCO0lBQ0UsWUFBWSxFQUFFO0VBQ2hCO0lBQ0UsNkJBQTZCO0lBQzdCLFlBQVksRUFBRTtFQUNoQjtJQUNFLDZCQUE2QjtJQUM3QixZQUFZLEVBQUU7RUFDaEI7SUFDRSw4QkFBOEI7SUFDOUIsWUFBWSxFQUFFO0VBQ2hCO0lBQ0UsOEJBQThCO0lBQzlCLGFBQWEsRUFBRTtFQUNqQjtJQUNFLDhCQUE4QjtJQUM5QixZQUFZLEVBQUU7RUFDaEI7SUFDRSw4QkFBOEI7SUFDOUIsWUFBWSxFQUFFOztBQUVsQjtFQUNFLGlCQUFpQjtFQUNqQix5QkFBeUIsRUFBRTs7QUFFN0I7RUFDRSxxQkFBcUIsRUFBRTs7QUFFekI7RUFDRSxpQkFBaUI7RUFDakIsaUNBQWlDLEVBQUU7RUFDbkM7SUFDRSxvQkFBb0IsRUFBRTtFQUN4QjtJQUNFLHFCQUFjO0lBQWQsY0FBYztJQUNkLDJCQUF1QjtRQUF2Qix1QkFBdUIsRUFBRTtFQUMzQjtJQUNFLG9CQUFvQixFQUFFO0VBQ3hCO0lBQ0U7TUFDRSxvQkFBb0IsRUFBRSxFQUFFO0VBQzVCO0lBQ0U7TUFDRSxtQkFBbUIsRUFBRTtNQUNyQjs7UUFFRSxtQkFBbUIsRUFBRSxFQUFFOztBQUUvQjtFQUNFLGlCQUFpQixFQUFFO0VBQ25CO0lBQ0UscUJBQXFCLEVBQUU7RUFDekI7SUFDRTtNQUNFLGlCQUFpQixFQUFFLEVBQUU7O0FBRTNCO0VBQ0UscUJBQWM7RUFBZCxjQUFjO0VBQ2QsdUJBQStCO01BQS9CLCtCQUErQjtFQUMvQix5QkFBc0I7TUFBdEIsc0JBQXNCLEVBQUU7RUFDeEI7SUFDRSxnQkFBZ0I7SUFDaEIsaUJBQWlCO0lBQ2pCLGVBQWU7SUFDZixtQkFBbUIsRUFBRTtFQUN2QjtJQUNFLGdCQUFnQjtJQUNoQixpQkFBaUIsRUFBRTtJQUNuQjtNQUNFLG1DQUEyQjtNQUEzQiwyQkFBMkI7TUFBM0IsbURBQTJCO01BQzNCLHdCQUF3QjtNQUN4QixpQkFBaUI7TUFDakIsZ0JBQWdCO01BQ2hCLGlCQUFpQjtNQUNqQixzQkFBc0IsRUFBRTtJQUMxQjtNQUNFLGVBQWUsRUFBRTtJQUNuQjtNQUNFLDBDQUFrQztjQUFsQyxrQ0FBa0MsRUFBRTs7QUFFMUM7RUFDRSxtQkFBbUIsRUFBRTtFQUNyQjtJQUNFO01BQ0UseUJBQXlCO01BQ3pCLHFCQUFxQjtNQUNyQixtQkFBbUI7TUFDbkIsU0FBUztNQUNULE9BQU87TUFDUCxXQUFXLEVBQUU7SUFDZjtNQUNFLHdCQUF3QjtNQUN4QixpQkFBaUI7TUFDakIsZ0JBQWdCO01BQ2hCLGVBQWU7TUFDZixXQUFXO01BQ1gsU0FBUztNQUNULG9DQUE0QjtjQUE1Qiw0QkFBNEIsRUFBRTtJQUNoQztNQUNFLFlBQVk7TUFDWixlQUFlO01BQ2YsWUFBWTtNQUNaLGFBQWE7TUFDYixXQUFXO01BQ1gsaUZBQWlGLEVBQUUsRUFBRTs7QUFFM0Y7RUFDRSxZQUFZO0VBQ1osaUJBQWlCO0VBQ2pCLGVBQWU7RUFDZixpQkFBaUI7RUFDakIsbUJBQW1CO0VBQ25CLFdBQVc7RUFDWCxrQ0FBa0MsRUFBRTtFQUNwQztJQUNFLGVBQWU7SUFDZixXQUFXO0lBQ1gsbUJBQW1CO0lBQ25CLG9CQUFvQjtJQUNwQixzQkFBc0I7SUFDdEIscUJBQWM7SUFBZCxjQUFjO0lBQ2Qsb0JBQXNCO1FBQXRCLHNCQUFzQjtJQUN0Qix1QkFBK0I7UUFBL0IsK0JBQStCO0lBQy9CLGlCQUFpQixFQUFFOztBQUV2Qjs7RUFFRSxXQUFXLEVBQUU7O0FBRWY7RUFDRSxrQkFBa0IsRUFBRTs7QUFFdEI7RUFDRSxtQkFBbUI7RUFDbkIsb0NBQW9DO0VBQ3BDLHNCQUFzQjtFQUN0QixzQkFBc0I7RUFDdEIsZ0JBQWdCO0VBQ2hCLGVBQWU7RUFDZixxQkFBYztFQUFkLGNBQWM7RUFDZCx1QkFBb0I7TUFBcEIsb0JBQW9CO0VBQ3BCLHFCQUFxQjtFQUNyQixxQ0FBcUMsRUFBRTtFQUN2QztJQUNFLGVBQWU7SUFDZixtQkFBZTtRQUFmLGVBQWUsRUFBRTs7QUFFckI7RUFDRSxZQUFZO0VBQ1osYUFBYTtFQUNiLG1CQUFtQixFQUFFOztBQUV2QjtFQUNFLHNCQUFzQjtFQUN0QixjQUFjLEVBQUU7O0FBRWxCO0VBQ0Usc0JBQXNCO0VBQ3RCLGNBQWMsRUFBRTs7QUFFbEI7O0VBRUUsZUFBZSxFQUFFO0VBQ2pCOztJQUVFLGNBQWMsRUFBRTtFQUNsQjs7SUFFRSxjQUFjLEVBQUU7O0FBRXBCOztFQUVFLHNCQUFzQjtFQUN0QixjQUFjLEVBQUU7O0FBRWxCO0VBQ0UscUJBQXFCO0VBQ3JCLGdCQUFnQjtFQUNoQiw2QkFBNkIsRUFBRTs7QUFFakM7RUFDRTtJQUNFLG9CQUFvQjtJQUNwQiwyQkFBdUI7UUFBdkIsdUJBQXVCLEVBQUU7SUFDekI7TUFDRSxVQUFVO01BQ1YsbUJBQW1CLEVBQUUsRUFBRSIsImZpbGUiOiJwYWdlcy9lbnRlcnByaXNlL3Jlc291cmNlcy9pbmRleC5jc3MiLCJzb3VyY2VzQ29udGVudCI6WyIuZWUtaGVybyB7XG4gIG1heC13aWR0aDogNjQwcHg7XG4gIHBhZGRpbmctdG9wOiAxMzBweDtcbiAgcGFkZGluZy1ib3R0b206IDE2MHB4OyB9XG4gIC5lZS1oZXJvOjpiZWZvcmUsIC5lZS1oZXJvOjphZnRlciB7XG4gICAgZGlzcGxheTogbm9uZTsgfVxuICAuZWUtaGVybyBoMSB7XG4gICAgZm9udC1zaXplOiA1MnB4O1xuICAgIGxpbmUtaGVpZ2h0OiA2MnB4O1xuICAgIG1heC13aWR0aDogOTMwcHg7XG4gICAgbGV0dGVyLXNwYWNpbmc6IC0wLjAzZW07XG4gICAgY29sb3I6ICMwMjA4MTQ7XG4gICAgbWFyZ2luLXRvcDogMDtcbiAgICBtYXJnaW4tYm90dG9tOiAxNnB4OyB9XG4gIC5lZS1oZXJvIGg0IHtcbiAgICBmb250LWZhbWlseTogXCJSb2JvdG8gTW9ub1wiLCBNZW5sbywgTW9uYWNvLCBDb25zb2xhcywgXCJDb3VyaWVyIE5ld1wiLCBtb25vc3BhY2U7XG4gICAgZm9udC13ZWlnaHQ6IGJvbGQ7XG4gICAgZm9udC1zaXplOiAxM3B4O1xuICAgIGxpbmUtaGVpZ2h0OiAyNnB4O1xuICAgIGxldHRlci1zcGFjaW5nOiAwLjE0ZW07XG4gICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcbiAgICBjb2xvcjogIzkyQTFCMztcbiAgICBtYXJnaW4tYm90dG9tOiAyOXB4OyB9XG4gIC5lZS1oZXJvIHAge1xuICAgIGZvbnQtZmFtaWx5OiBcIkVpbmFcIiwgXCJIZWx2ZXRpY2EgTmV1ZVwiLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7XG4gICAgZm9udC1zaXplOiAyNHB4O1xuICAgIGZvbnQtd2VpZ2h0OiA0MDA7XG4gICAgbGluZS1oZWlnaHQ6IDM2cHg7XG4gICAgbGV0dGVyLXNwYWNpbmc6IC0wLjA0ZW07XG4gICAgY29sb3I6IHJnYmEoMzksIDUwLCA2MywgMC44KTsgfVxuICAuZWUtaGVybyAuYnRuIHtcbiAgICBwYWRkaW5nLWxlZnQ6IDI0cHg7XG4gICAgcGFkZGluZy1yaWdodDogMjBweDtcbiAgICBwYWRkaW5nLXRvcDogMThweDtcbiAgICBwYWRkaW5nLWJvdHRvbTogMThweDtcbiAgICBmb250LXNpemU6IDE0cHg7XG4gICAgbWFyZ2luLXRvcDogMTZweDtcbiAgICBsaW5lLWhlaWdodDogMjBweDtcbiAgICBsZXR0ZXItc3BhY2luZzogMC4wOGVtO1xuICAgIGNvbG9yOiB3aGl0ZTtcbiAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xuICAgIGZvbnQtd2VpZ2h0OiA3MDA7XG4gICAgYmFja2dyb3VuZDogIzM4ODBGRjtcbiAgICBib3gtc2hhZG93OiAwcHggMnB4IDRweCByZ2JhKDIsIDgsIDIwLCAwLjEpLCAwcHggMXB4IDJweCByZ2JhKDIsIDgsIDIwLCAwLjA4KTtcbiAgICBib3JkZXItcmFkaXVzOiAyMTBweDtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7IH1cbiAgICAuZWUtaGVybyAuYnRuOjphZnRlciB7XG4gICAgICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoJ2RhdGE6aW1hZ2Uvc3ZnK3htbDt1dGY4LDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIGZpbGw9XCJ3aGl0ZVwiIHZpZXdCb3g9XCIwIDAgNTEyIDUxMlwiPjxwYXRoIGQ9XCJNODUgMjc3LjM3NWgyNTkuNzA0TDIyNS4wMDIgMzk3LjA3NyAyNTYgNDI3bDE3MS0xNzFMMjU2IDg1bC0yOS45MjIgMjkuOTI0IDExOC42MjYgMTE5LjcwMUg4NXY0Mi43NXpcIi8+PC9zdmc+Jyk7XG4gICAgICBiYWNrZ3JvdW5kLXNpemU6IDEwMCU7XG4gICAgICBjb250ZW50OiAnJztcbiAgICAgIGhlaWdodDogMjBweDtcbiAgICAgIHdpZHRoOiAyMHB4O1xuICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICBtYXJnaW4tbGVmdDogOHB4O1xuICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC0xcHgpOyB9XG4gICAgLmVlLWhlcm8gLmJ0bjpob3ZlciB7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjNGY4YmY1OyB9XG4gIC5lZS1oZXJvLS1sYXJnZSBoMSB7XG4gICAgZm9udC1zaXplOiA2MnB4O1xuICAgIGxpbmUtaGVpZ2h0OiA2OXB4OyB9XG4gIC5lZS1oZXJvLS13aWRlIHtcbiAgICBtYXgtd2lkdGg6IDk2MHB4OyB9XG4gIC5lZS1oZXJvLS1jZW50ZXJlZCB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgIG1hcmdpbi1sZWZ0OiBhdXRvO1xuICAgIG1hcmdpbi1yaWdodDogYXV0bzsgfVxuICBAbWVkaWEgKG1heC13aWR0aDogNzY3cHgpIHtcbiAgICAuZWUtaGVybyB7XG4gICAgICBwYWRkaW5nLXRvcDogNzBweDtcbiAgICAgIHBhZGRpbmctYm90dG9tOiAwOyB9XG4gICAgICAuZWUtaGVybyBoMSB7XG4gICAgICAgIGZvbnQtc2l6ZTogNDRweDtcbiAgICAgICAgbGluZS1oZWlnaHQ6IDUycHg7IH1cbiAgICAgIC5lZS1oZXJvLS1sYXJnZSBoMSB7XG4gICAgICAgIGZvbnQtc2l6ZTogNTBweDtcbiAgICAgICAgbGluZS1oZWlnaHQ6IDYwcHg7IH0gfVxuICBAbWVkaWEgKG1heC13aWR0aDogNDgwcHgpIHtcbiAgICAuZWUtaGVybyBoMSB7XG4gICAgICBmb250LXNpemU6IDM2cHg7XG4gICAgICBsaW5lLWhlaWdodDogNDRweDtcbiAgICAgIG1hcmdpbi1ib3R0b206IDZweDsgfVxuICAgIC5lZS1oZXJvLS1sYXJnZSBoMSB7XG4gICAgICBmb250LXNpemU6IDQycHg7XG4gICAgICBsaW5lLWhlaWdodDogNTJweDsgfVxuICAgIC5lZS1oZXJvIC5idG4ge1xuICAgICAgbWFyZ2luLXRvcDogOHB4OyB9IH1cblxuLmVlLW1haW4ge1xuICBtYXJnaW4tdG9wOiAwOyB9XG4gIC5lZS1tYWluIHNlY3Rpb24ge1xuICAgIG1hcmdpbi1ib3R0b206IDIwMHB4OyB9XG4gIC5lZS1tYWluIC5sZWZ0LFxuICAuZWUtbWFpbiAucmlnaHQsXG4gIC5lZS1tYWluIC5jZW50ZXIge1xuICAgIGRpc3BsYXk6IGZsZXg7IH1cbiAgICAuZWUtbWFpbiAubGVmdDo6YmVmb3JlLCAuZWUtbWFpbiAubGVmdDo6YWZ0ZXIsXG4gICAgLmVlLW1haW4gLnJpZ2h0OjpiZWZvcmUsXG4gICAgLmVlLW1haW4gLnJpZ2h0OjphZnRlcixcbiAgICAuZWUtbWFpbiAuY2VudGVyOjpiZWZvcmUsXG4gICAgLmVlLW1haW4gLmNlbnRlcjo6YWZ0ZXIge1xuICAgICAgZGlzcGxheTogbm9uZTsgfVxuICAuZWUtbWFpbiAubGVmdCAuY29udGVudCxcbiAgLmVlLW1haW4gLnJpZ2h0IC5jb250ZW50IHtcbiAgICBtYXgtd2lkdGg6IDQ4MHB4OyB9XG4gICAgQG1lZGlhIChtYXgtd2lkdGg6IDc2N3B4KSB7XG4gICAgICAuZWUtbWFpbiAubGVmdCAuY29udGVudCxcbiAgICAgIC5lZS1tYWluIC5yaWdodCAuY29udGVudCB7XG4gICAgICAgIG1heC13aWR0aDogMTAwJTtcbiAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyOyB9XG4gICAgICAgIC5lZS1tYWluIC5sZWZ0IC5jb250ZW50IGxpLFxuICAgICAgICAuZWUtbWFpbiAucmlnaHQgLmNvbnRlbnQgbGkge1xuICAgICAgICAgIHRleHQtYWxpZ246IGxlZnQ7IH0gfVxuICAuZWUtbWFpbiAubGVmdCB7XG4gICAgZmxleC1kaXJlY3Rpb246IHJvdzsgfVxuICAgIC5lZS1tYWluIC5sZWZ0IC5ncmFwaGljcyB7XG4gICAgICBtYXJnaW4tbGVmdDogYXV0bzsgfVxuICAuZWUtbWFpbiAucmlnaHQge1xuICAgIGZsZXgtZGlyZWN0aW9uOiByb3ctcmV2ZXJzZTtcbiAgICBtYXJnaW4tbGVmdDogYXV0bzsgfVxuICAgIC5lZS1tYWluIC5yaWdodCAuZ3JhcGhpY3Mge1xuICAgICAgbWFyZ2luLXJpZ2h0OiBhdXRvOyB9XG4gIC5lZS1tYWluIC5jZW50ZXIge1xuICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7IH1cbiAgICAuZWUtbWFpbiAuY2VudGVyIC5jb250ZW50IHtcbiAgICAgIHdpZHRoOiA4OTRweDtcbiAgICAgIG1heC13aWR0aDogMTAwJTsgfVxuICAuZWUtbWFpbiAuZnVsbCAuY29udGVudCB7XG4gICAgbWF4LXdpZHRoOiA1NjhweDsgfVxuICBAbWVkaWEgKG1heC13aWR0aDogNzY3cHgpIHtcbiAgICAuZWUtbWFpbiAucmlnaHQsXG4gICAgLmVlLW1haW4gLmxlZnQge1xuICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbi1yZXZlcnNlO1xuICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsgfVxuICAgICAgLmVlLW1haW4gLnJpZ2h0IC5ncmFwaGljcyxcbiAgICAgIC5lZS1tYWluIC5sZWZ0IC5ncmFwaGljcyB7XG4gICAgICAgIG1hcmdpbi1ib3R0b206IDI0cHg7XG4gICAgICAgIG1hcmdpbi1sZWZ0OiAwO1xuICAgICAgICBtYXJnaW4tcmlnaHQ6IDA7IH1cbiAgICAuZWUtbWFpbiBzZWN0aW9uIHtcbiAgICAgIG1hcmdpbi1ib3R0b206IDEwMHB4OyB9IH1cbiAgLmVlLW1haW4gLmdyYXBoaWNzIHtcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtZW5kOyB9XG4gICAgLmVlLW1haW4gLmdyYXBoaWNzIGltZyB7XG4gICAgICB3aWR0aDogMTAwJTsgfVxuICAuZWUtbWFpbiBoMiB7XG4gICAgZm9udC1zaXplOiA0NHB4O1xuICAgIGxpbmUtaGVpZ2h0OiA1MXB4O1xuICAgIGxldHRlci1zcGFjaW5nOiAtMC4wM2VtOyB9XG4gICAgLmVlLW1haW4gaDI6Zmlyc3QtY2hpbGQge1xuICAgICAgbWFyZ2luLXRvcDogMDsgfVxuICAuZWUtbWFpbiAuZWUtc2VjdGlvbl9fdGl0bGUge1xuICAgIGZvbnQtZmFtaWx5OiBcIlJvYm90byBNb25vXCIsIE1lbmxvLCBNb25hY28sIENvbnNvbGFzLCBcIkNvdXJpZXIgTmV3XCIsIG1vbm9zcGFjZTtcbiAgICBmb250LXN0eWxlOiBub3JtYWw7XG4gICAgZm9udC13ZWlnaHQ6IGJvbGQ7XG4gICAgZm9udC1zaXplOiAxMnB4O1xuICAgIGxpbmUtaGVpZ2h0OiAyM3B4O1xuICAgIGxldHRlci1zcGFjaW5nOiAwLjE0ZW07XG4gICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcbiAgICBjb2xvcjogIzVCNzA4QjtcbiAgICBtYXJnaW4tdG9wOiAwOyB9XG4gIC5lZS1tYWluIC5lZS1zZWN0aW9uX19jdGEge1xuICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICBmb250LXNpemU6IDE4cHg7XG4gICAgZm9udC13ZWlnaHQ6IDUwMDtcbiAgICBtYXJnaW4tdG9wOiAxNnB4OyB9XG4gIC5lZS1tYWluIHAge1xuICAgIGZvbnQtc2l6ZTogMjBweDtcbiAgICBsaW5lLWhlaWdodDogMzFweDtcbiAgICBsZXR0ZXItc3BhY2luZzogLTAuMDJlbTtcbiAgICBjb2xvcjogIzVCNzA4QjtcbiAgICBtYXJnaW4tdG9wOiAxOHB4OyB9XG4gICAgLmVlLW1haW4gcC5zbSB7XG4gICAgICBmb250LXNpemU6IDE2cHg7XG4gICAgICBsaW5lLWhlaWdodDogMjlweDtcbiAgICAgIGxldHRlci1zcGFjaW5nOiAtMC4wMWVtOyB9XG4gIC5lZS1tYWluIHVsOm5vdCguZnJhbWV3b3Jrcykge1xuICAgIG1hcmdpbi10b3A6IDU0cHg7IH1cbiAgLmVlLW1haW4gLmNvbnRlbnQgdWwge1xuICAgIHBhZGRpbmctbGVmdDogMDsgfVxuICAuZWUtbWFpbiAuY29udGVudCBsaSB7XG4gICAgZm9udC1zaXplOiAxNnB4O1xuICAgIGxpbmUtaGVpZ2h0OiAyM3B4O1xuICAgIGxldHRlci1zcGFjaW5nOiAtMC4wMmVtO1xuICAgIGNvbG9yOiAjMUEyMzJGO1xuICAgIG1hcmdpbi1ib3R0b206IDQwcHg7XG4gICAgcGFkZGluZy1sZWZ0OiAzMHB4O1xuICAgIGxpc3Qtc3R5bGU6IG5vbmU7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlOyB9XG4gICAgLmVlLW1haW4gLmNvbnRlbnQgbGk6OmJlZm9yZSB7XG4gICAgICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXCIvaW1nL2VudGVycHJpc2UvY2hlY2suc3ZnXCIpO1xuICAgICAgYmFja2dyb3VuZC1zaXplOiAxMDAlO1xuICAgICAgY29udGVudDogJyc7XG4gICAgICBoZWlnaHQ6IDEwcHg7XG4gICAgICB3aWR0aDogMTNweDtcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgIGxlZnQ6IDA7XG4gICAgICB0b3A6IDhweDsgfVxuICAuZWUtbWFpbiAuZmVhdHVyZXMge1xuICAgIGRpc3BsYXk6IGdyaWQ7XG4gICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiAxZnIgMWZyIDFmcjtcbiAgICBncmlkLWNvbHVtbi1nYXA6IDY0cHg7XG4gICAgZ3JpZC1yb3ctZ2FwOiAyNHB4O1xuICAgIHBhZGRpbmc6IDA7IH1cbiAgICAuZWUtbWFpbiAuZmVhdHVyZXMgbGkge1xuICAgICAgbGlzdC1zdHlsZTogbm9uZTsgfVxuICAgIC5lZS1tYWluIC5mZWF0dXJlcyAuaWNvbiB7XG4gICAgICBtYXJnaW4tYm90dG9tOiAxNnB4O1xuICAgICAgd2lkdGg6IDQ4cHg7IH1cbiAgICBAbWVkaWEgKG1heC13aWR0aDogOTkxcHgpIHtcbiAgICAgIC5lZS1tYWluIC5mZWF0dXJlcyB7XG4gICAgICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogMWZyIDFmcjsgfSB9XG4gICAgQG1lZGlhIChtYXgtd2lkdGg6IDUwMHB4KSB7XG4gICAgICAuZWUtbWFpbiAuZmVhdHVyZXMge1xuICAgICAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IDFmcjsgfSB9XG4gIC5lZS1tYWluIC5jdGEtY2FyZCB7XG4gICAgYmFja2dyb3VuZDogIzRhOGJmYztcbiAgICBib3JkZXItcmFkaXVzOiAxMnB4O1xuICAgIHBhZGRpbmc6IDcycHggNzJweCA2MHB4O1xuICAgIGJhY2tncm91bmQtc2l6ZTogY292ZXI7XG4gICAgY29sb3I6IHdoaXRlOyB9XG4gICAgLmVlLW1haW4gLmN0YS1jYXJkIC5lZS1zZWN0aW9uX190aXRsZSxcbiAgICAuZWUtbWFpbiAuY3RhLWNhcmQgcCB7XG4gICAgICBjb2xvcjogI0NFRDZFMDsgfVxuXG4jaG93LXRvIHtcbiAgbWFyZ2luLWJvdHRvbTogMDtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBwYWRkaW5nLXRvcDogMTQwcHg7IH1cbiAgI2hvdy10bzo6YmVmb3JlIHtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgdG9wOiAwO1xuICAgIHdpZHRoOiAxMDB2dztcbiAgICBib3JkZXItdG9wOiAxcHggc29saWQgcmdiYSgxNDYsIDE2MSwgMTc5LCAwLjMpO1xuICAgIGNvbnRlbnQ6ICcnO1xuICAgIGRpc3BsYXk6IGJsb2NrOyB9XG5cbi5jYXJkcy0tcmVkLXYtYmx1ZSB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIHRleHQtYWxpZ246IGxlZnQ7XG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICBtYXJnaW4tdG9wOiAzOHB4OyB9XG4gIC5jYXJkcy0tcmVkLXYtYmx1ZV9fY2FyZCB7XG4gICAgYmFja2dyb3VuZDogIzdDQUJGRjtcbiAgICBib3JkZXItcmFkaXVzOiA4cHg7XG4gICAgcGFkZGluZzogNDBweCA0MHB4IDM0cHg7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgIGFsaWduLWl0ZW1zOiBmbGV4LXN0YXJ0O1xuICAgIG1hcmdpbi1yaWdodDogMjRweDtcbiAgICBmbGV4OiAwIDEgNDYwcHg7XG4gICAgYm9yZGVyLXJhZGl1czogOHB4OyB9XG4gICAgLmNhcmRzLS1yZWQtdi1ibHVlX19jYXJkOmxhc3QtY2hpbGQge1xuICAgICAgbWFyZ2luLXJpZ2h0OiAwOyB9XG4gICAgLmNhcmRzLS1yZWQtdi1ibHVlX19jYXJkOm50aC1jaGlsZCgyKSB7XG4gICAgICBiYWNrZ3JvdW5kOiAjRjg4RDhEOyB9XG4gICAgICAuY2FyZHMtLXJlZC12LWJsdWVfX2NhcmQ6bnRoLWNoaWxkKDIpIC5idG4ge1xuICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDI0NCwgODQsIDg0LCAwLjUpOyB9XG4gIC5jYXJkcy0tcmVkLXYtYmx1ZSBoMyB7XG4gICAgZm9udC1zaXplOiAyNHB4O1xuICAgIGxpbmUtaGVpZ2h0OiBub3JtYWw7XG4gICAgbGV0dGVyLXNwYWNpbmc6IC0wLjAyZW07XG4gICAgY29sb3I6IHdoaXRlO1xuICAgIG1hcmdpbi10b3A6IDA7IH1cbiAgLmNhcmRzLS1yZWQtdi1ibHVlIHAge1xuICAgIGZvbnQtc2l6ZTogMThweDtcbiAgICBsaW5lLWhlaWdodDogMjZweDtcbiAgICBsZXR0ZXItc3BhY2luZzogLTAuMDJlbTtcbiAgICBjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjcpO1xuICAgIG1hcmdpbi10b3A6IDA7XG4gICAgbWFyZ2luLWJvdHRvbTogMjJweDsgfVxuICAuY2FyZHMtLXJlZC12LWJsdWUgLmJ0biB7XG4gICAgbWFyZ2luLXRvcDogYXV0bztcbiAgICBmb250LXNpemU6IDE0cHg7XG4gICAgbGluZS1oZWlnaHQ6IDIycHg7XG4gICAgbGV0dGVyLXNwYWNpbmc6IDAuMDllbTtcbiAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xuICAgIHBhZGRpbmc6IDEwcHggMTRweDtcbiAgICBmb250LXdlaWdodDogNjAwO1xuICAgIGJvcmRlci1yYWRpdXM6IDhweDtcbiAgICBiYWNrZ3JvdW5kOiByZ2JhKDU2LCAxMjgsIDI1NSwgMC41KTsgfVxuICAgIC5jYXJkcy0tcmVkLXYtYmx1ZSAuYnRuIGlvbi1pY29uIHtcbiAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICAgIGhlaWdodDogMTRweDtcbiAgICAgIHdpZHRoOiAxNHB4O1xuICAgICAgdmVydGljYWwtYWxpZ246IC0ycHg7IH1cbiAgQG1lZGlhIChtYXgtd2lkdGg6IDc2N3B4KSB7XG4gICAgLmNhcmRzLS1yZWQtdi1ibHVlIHtcbiAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICBhbGlnbi1pdGVtczogY2VudGVyOyB9XG4gICAgICAuY2FyZHMtLXJlZC12LWJsdWVfX2NhcmQge1xuICAgICAgICBmbGV4OiBhdXRvO1xuICAgICAgICBtYXJnaW4tcmlnaHQ6IDA7XG4gICAgICAgIG1hcmdpbi10b3A6IDIwcHg7XG4gICAgICAgIG1heC13aWR0aDogNDYwcHg7IH0gfVxuXG5hc2lkZSB7XG4gIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCgxODBkZWcsICNGOUZBRkIgMCUsICNGRkZGRkYgMTAwJSk7XG4gIG1hcmdpbi10b3A6IC02MHB4O1xuICBwYWRkaW5nLXRvcDogMjAwcHg7XG4gIHBhZGRpbmctYm90dG9tOiAxMjBweDsgfVxuICBhc2lkZSBwIHtcbiAgICBjb2xvcjogIzQxNEQ1QzsgfVxuICBhc2lkZSAuY29udGVudCB7XG4gICAgbWF4LXdpZHRoOiA0MzJweDtcbiAgICBtYXJnaW46IDAgYXV0bztcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgZGlzcGxheTogYmxvY2s7IH1cblxuLmVlLWdldC1zdGFydGVkIHtcbiAgbWF4LXdpZHRoOiA3MDBweDsgfVxuICAuZWUtZ2V0LXN0YXJ0ZWQgaDMge1xuICAgIGNvbG9yOiAjNDE0RDVDOyB9XG5cbi5yZXNvdXJjZXMge1xuICBwYWRkaW5nLWJvdHRvbTogMTIwcHg7IH1cbiAgQG1lZGlhIChtYXgtd2lkdGg6IDc2OHB4KSB7XG4gICAgLnJlc291cmNlcyB7XG4gICAgICBwYWRkaW5nLWJvdHRvbTogNjBweDsgfSB9XG4gIC5yZXNvdXJjZXMgLmNhcmRzIHtcbiAgICBsaXN0LXN0eWxlLXR5cGU6IG5vbmU7XG4gICAgbWFyZ2luOiAwO1xuICAgIHBhZGRpbmc6IDA7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBtYXJnaW4tbGVmdDogLTI0cHg7XG4gICAgbWFyZ2luLXJpZ2h0OiAtMjRweDsgfVxuICAucmVzb3VyY2VzIGhncm91cCB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG4gICAgYWxpZ24taXRlbXM6IGJhc2VsaW5lOyB9XG4gICAgLnJlc291cmNlcyBoZ3JvdXAgaDMge1xuICAgICAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgICAgIGxpbmUtaGVpZ2h0OiBub3JtYWw7XG4gICAgICBmb250LXNpemU6IDI4cHg7XG4gICAgICBsZXR0ZXItc3BhY2luZzogLTAuMDJlbTtcbiAgICAgIGNvbG9yOiAjMUEyMzJGO1xuICAgICAgbWFyZ2luLWJvdHRvbTogMDsgfVxuICAgIC5yZXNvdXJjZXMgaGdyb3VwIGg0IHtcbiAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7XG4gICAgICBmb250LXNpemU6IDI0cHg7XG4gICAgICBsaW5lLWhlaWdodDogbm9ybWFsO1xuICAgICAgbGV0dGVyLXNwYWNpbmc6IC0wLjAyZW07XG4gICAgICBjb2xvcjogIzFBMjMyRjsgfVxuICAgIC5yZXNvdXJjZXMgaGdyb3VwIGg1IHtcbiAgICAgIGZvbnQtd2VpZ2h0OiA3MDA7XG4gICAgICBsaW5lLWhlaWdodDogMTtcbiAgICAgIGZvbnQtc2l6ZTogMTRweDtcbiAgICAgIGxldHRlci1zcGFjaW5nOiAwLjA4ZW07XG4gICAgICBjb2xvcjogIzM4ODBGRjtcbiAgICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7IH1cbiAgICAucmVzb3VyY2VzIGhncm91cCBpb24taWNvbiB7XG4gICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMnB4KTsgfVxuICAucmVzb3VyY2VzIC5jYXJkcyBsaSB7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgZmxleDogMCAwIDMzLjMzJTtcbiAgICBwYWRkaW5nOiAyNHB4OyB9XG4gICAgLnJlc291cmNlcyAuY2FyZHMgbGkgYSB7XG4gICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgIHdpZHRoOiAxMDAlOyB9XG4gICAgLnJlc291cmNlcyAuY2FyZHMgbGkgLmltZy13cmFwcGVyIHtcbiAgICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgICBib3JkZXItcmFkaXVzOiA2cHg7IH1cbiAgICAucmVzb3VyY2VzIC5jYXJkcyBsaSBpbWcge1xuICAgICAgd2lkdGg6IDEwMCU7IH1cbiAgICAucmVzb3VyY2VzIC5jYXJkcyBsaSBoNiB7XG4gICAgICBsaW5lLWhlaWdodDogMjNweDtcbiAgICAgIGZvbnQtc2l6ZTogMTJweDtcbiAgICAgIGxldHRlci1zcGFjaW5nOiAwLjEyZW07XG4gICAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xuICAgICAgY29sb3I6ICNCMkJFQ0Q7XG4gICAgICBtYXJnaW4tYm90dG9tOiAwO1xuICAgICAgbWFyZ2luLXRvcDogMTZweDsgfVxuICAgIC5yZXNvdXJjZXMgLmNhcmRzIGxpIGg0IHtcbiAgICAgIGZvbnQtc2l6ZTogMjBweDtcbiAgICAgIG1hcmdpbi10b3A6IDEwcHg7XG4gICAgICBjb2xvcjogIzFBMjMyRjtcbiAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7IH1cbiAgICAucmVzb3VyY2VzIC5jYXJkcyBsaSBwIHtcbiAgICAgIGNvbG9yOiAjNUI3MDhCO1xuICAgICAgbGluZS1oZWlnaHQ6IDIycHg7XG4gICAgICBmb250LXNpemU6IDE0cHg7XG4gICAgICBsZXR0ZXItc3BhY2luZzogLTAuMDJlbTsgfVxuICBAbWVkaWEgKG1heC13aWR0aDogOTkycHgpIHtcbiAgICAucmVzb3VyY2VzIC5jYXJkcyB7XG4gICAgICBtYXJnaW4tbGVmdDogLTEycHg7XG4gICAgICBtYXJnaW4tcmlnaHQ6IC0xMnB4OyB9XG4gICAgLnJlc291cmNlcyAuY2FyZHMgbGkge1xuICAgICAgcGFkZGluZzogMTJweDsgfSB9XG4gIEBtZWRpYSAobWF4LXdpZHRoOiA3NjhweCkge1xuICAgIC5yZXNvdXJjZXMgLmNhcmRzIHtcbiAgICAgIGZsZXgtd3JhcDogd3JhcDsgfVxuICAgIC5yZXNvdXJjZXMgLmNhcmRzIGxpIHtcbiAgICAgIGZsZXg6IDAgMCA1MCU7IH0gfVxuICBAbWVkaWEgKG1heC13aWR0aDogNDgwcHgpIHtcbiAgICAucmVzb3VyY2VzIC5jYXJkcyBsaSB7XG4gICAgICBmbGV4OiAwIDAgMTAwJTsgfVxuICAgIC5yZXNvdXJjZXMgaDUge1xuICAgICAgZGlzcGxheTogbm9uZTsgfSB9XG5cbi5lZS1tYWluIC5mZWF0dXJlcyBsaSBwLFxuLmVlLW1haW4gLmNhcmRzIGxpIHAsXG4ucmVzb3VyY2VzIC5mZWF0dXJlcyBsaSBwLFxuLnJlc291cmNlcyAuY2FyZHMgbGkgcCB7XG4gIGZvbnQtc2l6ZTogMTZweDtcbiAgbGluZS1oZWlnaHQ6IDI5cHg7XG4gIGxldHRlci1zcGFjaW5nOiAtMC4wMWVtO1xuICBjb2xvcjogIzczODQ5QTtcbiAgbWFyZ2luLXRvcDogMDsgfVxuXG4uZWUtbWFpbiAuZmVhdHVyZXMgbGkgaDQsXG4uZWUtbWFpbiAuY2FyZHMgbGkgaDQsXG4ucmVzb3VyY2VzIC5mZWF0dXJlcyBsaSBoNCxcbi5yZXNvdXJjZXMgLmNhcmRzIGxpIGg0IHtcbiAgZm9udC1zaXplOiAyMHB4O1xuICBsaW5lLWhlaWdodDogbm9ybWFsO1xuICBsZXR0ZXItc3BhY2luZzogLTAuMDJlbTtcbiAgY29sb3I6ICMwMjA4MTQ7XG4gIGZvbnQtd2VpZ2h0OiA2MDA7IH1cblxuLnJlc291cmNlcyAuY2FyZHMge1xuICBtYXJnaW4tdG9wOiAwICFpbXBvcnRhbnQ7XG4gIHRleHQtYWxpZ246IGxlZnQ7XG4gIGZsZXgtd3JhcDogd3JhcDsgfVxuICAucmVzb3VyY2VzIC5jYXJkcyAuaW1nLXdyYXBwZXIge1xuICAgIGJvcmRlci1yYWRpdXM6IDZweDsgfVxuICAgIC5yZXNvdXJjZXMgLmNhcmRzIC5pbWctd3JhcHBlciArIGg0IHtcbiAgICAgIG1hcmdpbi10b3A6IDI0cHg7IH1cbiAgQG1lZGlhIChtaW4td2lkdGg6IDEyMjBweCkge1xuICAgIC5yZXNvdXJjZXMgLmNhcmRzIHtcbiAgICAgIG1hcmdpbi1sZWZ0OiAtNDBweDtcbiAgICAgIG1hcmdpbi1yaWdodDogLTQwcHg7IH1cbiAgICAgIC5yZXNvdXJjZXMgLmNhcmRzIGxpIHtcbiAgICAgICAgcGFkZGluZzogNDBweDsgfSB9XG5cbi5yZXNvdXJjZXMgLnJlc291cmNlc19fY3VzdG9tZXItbG9nb3Mge1xuICBkaXNwbGF5OiBmbGV4O1xuICBtYXJnaW46IDI2cHggYXV0byAwO1xuICBwYWRkaW5nOiAwO1xuICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG4gIG1heC13aWR0aDogNzgwcHg7XG4gIHdpZHRoOiAxMDAlOyB9XG4gIC5yZXNvdXJjZXMgLnJlc291cmNlc19fY3VzdG9tZXItbG9nb3MgbGkge1xuICAgIGJhY2tncm91bmQ6IHVybChcIi9pbWcvZW50ZXJwcmlzZS9jdXN0b21lci1sb2dvcy5wbmdcIik7XG4gICAgYmFja2dyb3VuZC1zaXplOiA0MjhweCA0NnB4O1xuICAgIGJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgaGVpZ2h0OiA0NnB4OyB9XG4gIEBtZWRpYSAobWF4LXdpZHRoOiA3NjhweCkge1xuICAgIC5yZXNvdXJjZXMgLnJlc291cmNlc19fY3VzdG9tZXItbG9nb3Mge1xuICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gICAgICBmbGV4LXdyYXA6IHdyYXA7XG4gICAgICBtYXgtd2lkdGg6IDQ2MHB4OyB9XG4gICAgICAucmVzb3VyY2VzIC5yZXNvdXJjZXNfX2N1c3RvbWVyLWxvZ29zIGxpIHtcbiAgICAgICAgbWFyZ2luOiAyMHB4OyB9IH1cbiAgLnJlc291cmNlcyAucmVzb3VyY2VzX19jdXN0b21lci1sb2dvcyAubWFzdGVyY2FyZCB7XG4gICAgd2lkdGg6IDU4cHg7IH1cbiAgLnJlc291cmNlcyAucmVzb3VyY2VzX19jdXN0b21lci1sb2dvcyAubmF0aW9ud2lkZSB7XG4gICAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTU4cHggMDtcbiAgICB3aWR0aDogMzNweDsgfVxuICAucmVzb3VyY2VzIC5yZXNvdXJjZXNfX2N1c3RvbWVyLWxvZ29zIC51bmlxbG8ge1xuICAgIGJhY2tncm91bmQtcG9zaXRpb246IC05MXB4IDA7XG4gICAgd2lkdGg6IDY1cHg7IH1cbiAgLnJlc291cmNlcyAucmVzb3VyY2VzX19jdXN0b21lci1sb2dvcyAuaWJtIHtcbiAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTU2cHggMDtcbiAgICB3aWR0aDogNjRweDsgfVxuICAucmVzb3VyY2VzIC5yZXNvdXJjZXNfX2N1c3RvbWVyLWxvZ29zIC5pbmcge1xuICAgIGJhY2tncm91bmQtcG9zaXRpb246IC0yMjJweCAwO1xuICAgIHdpZHRoOiAxMDNweDsgfVxuICAucmVzb3VyY2VzIC5yZXNvdXJjZXNfX2N1c3RvbWVyLWxvZ29zIC5zYXAge1xuICAgIGJhY2tncm91bmQtcG9zaXRpb246IC0zMjZweCAwO1xuICAgIHdpZHRoOiA1NnB4OyB9XG4gIC5yZXNvdXJjZXMgLnJlc291cmNlc19fY3VzdG9tZXItbG9nb3MgLm5hc2Ege1xuICAgIGJhY2tncm91bmQtcG9zaXRpb246IC0zODBweCAwO1xuICAgIHdpZHRoOiA1MHB4OyB9XG5cbmJvZHkge1xuICBmb250LXdlaWdodDogNjAwO1xuICBsZXR0ZXItc3BhY2luZzogLTAuMDE1ZW07IH1cblxuLmVlLWhlcm8ge1xuICBwYWRkaW5nLWJvdHRvbTogMjRweDsgfVxuXG4uYmFubmVyIHtcbiAgdGV4dC1hbGlnbjogbGVmdDtcbiAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNlM2U4ZjE7IH1cbiAgLmJhbm5lciAudHJhbnNpdGlvblRpdGxlIHtcbiAgICBtYXJnaW4tYm90dG9tOiA2MHB4OyB9XG4gIC5iYW5uZXIgLmhlcm8tY29udGVudCB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOyB9XG4gIC5iYW5uZXIgLnJlc291cmNlLWNhcmQtbGlzdCB7XG4gICAgbWFyZ2luLWJvdHRvbTogNjRweDsgfVxuICBAbWVkaWEgKG1heC13aWR0aDogOTkycHgpIHtcbiAgICAuYmFubmVyIC50cmFuc2l0aW9uVGl0bGUge1xuICAgICAgbWFyZ2luLWJvdHRvbTogNDBweDsgfSB9XG4gIEBtZWRpYSAobWF4LXdpZHRoOiA3NjhweCkge1xuICAgIC5iYW5uZXIge1xuICAgICAgcGFkZGluZy10b3A6IDEzMHB4OyB9XG4gICAgICAuYmFubmVyIGgxLFxuICAgICAgLmJhbm5lciBwIHtcbiAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyOyB9IH1cblxuLnJlc291cmNlLWxpc3Qge1xuICBtYXJnaW4tdG9wOiA3MHB4OyB9XG4gIC5yZXNvdXJjZS1saXN0Omxhc3QtY2hpbGQge1xuICAgIG1hcmdpbi1ib3R0b206IDEwMHB4OyB9XG4gIEBtZWRpYSAobWF4LXdpZHRoOiA5OTJweCkge1xuICAgIC5yZXNvdXJjZS1saXN0IHtcbiAgICAgIG1hcmdpbi10b3A6IDUwcHg7IH0gfVxuXG4ucmVzb3VyY2UtbGlzdF9faGVhZGVyIHtcbiAgZGlzcGxheTogZmxleDtcbiAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xuICBhbGlnbi1pdGVtczogYmFzZWxpbmU7IH1cbiAgLnJlc291cmNlLWxpc3RfX2hlYWRlciBoNCB7XG4gICAgZm9udC1zaXplOiAxOHB4O1xuICAgIGZvbnQtd2VpZ2h0OiA3MDA7XG4gICAgY29sb3I6ICMyNDI4MmU7XG4gICAgbWFyZ2luLWJvdHRvbTogNHB4OyB9XG4gIC5yZXNvdXJjZS1saXN0X19oZWFkZXIgYSB7XG4gICAgZm9udC1zaXplOiAxNnB4O1xuICAgIGZvbnQtd2VpZ2h0OiA2MDA7IH1cbiAgICAucmVzb3VyY2UtbGlzdF9faGVhZGVyIGE6YWZ0ZXIge1xuICAgICAgdHJhbnNpdGlvbjogdHJhbnNmb3JtIDAuM3M7XG4gICAgICBmb250LWZhbWlseTogJ0lvbmljb25zJztcbiAgICAgIGNvbnRlbnQ6ICdcXGYyODcnO1xuICAgICAgZm9udC1zaXplOiAxNnB4O1xuICAgICAgbWFyZ2luLWxlZnQ6IDZweDtcbiAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsgfVxuICAgIC5yZXNvdXJjZS1saXN0X19oZWFkZXIgYTpob3ZlciB7XG4gICAgICBjb2xvcjogIzE4NmJmYjsgfVxuICAgIC5yZXNvdXJjZS1saXN0X19oZWFkZXIgYTpob3ZlcjphZnRlciB7XG4gICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZTNkKDNweCwgMCwgMCk7IH1cblxuLnRhYnNfX3Njcm9sbCB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTsgfVxuICBAbWVkaWEgKG1heC13aWR0aDogNTYwcHgpIHtcbiAgICAudGFic19fc2Nyb2xsOmJlZm9yZSwgLnRhYnNfX3Njcm9sbDphZnRlciB7XG4gICAgICB0cmFuc2l0aW9uOiBvcGFjaXR5IDAuM3M7XG4gICAgICBwb2ludGVyLWV2ZW50czogbm9uZTtcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgIHJpZ2h0OiAwO1xuICAgICAgdG9wOiAwO1xuICAgICAgb3BhY2l0eTogMDsgfVxuICAgIC50YWJzX19zY3JvbGw6YmVmb3JlIHtcbiAgICAgIGZvbnQtZmFtaWx5OiAnSW9uaWNvbnMnO1xuICAgICAgY29udGVudDogJ1xcZjNkMSc7XG4gICAgICBmb250LXNpemU6IDE0cHg7XG4gICAgICBjb2xvcjogIzYyNmM3ZDtcbiAgICAgIHotaW5kZXg6IDM7XG4gICAgICB0b3A6IDUwJTtcbiAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtNjAlKTsgfVxuICAgIC50YWJzX19zY3JvbGw6YWZ0ZXIge1xuICAgICAgY29udGVudDogJyc7XG4gICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgIHdpZHRoOiA4MHB4O1xuICAgICAgaGVpZ2h0OiAxMDAlO1xuICAgICAgei1pbmRleDogMjtcbiAgICAgIGJhY2tncm91bmQtaW1hZ2U6IGxpbmVhci1ncmFkaWVudCg5MGRlZywgcmdiYSgyNDYsIDI0OCwgMjUyLCAwKSAwJSwgI0Y2RjhGQyA3NSUpOyB9IH1cblxuLnRhYnMge1xuICB3aWR0aDogMTAwJTtcbiAgbWF4LXdpZHRoOiA3ODBweDtcbiAgbWFyZ2luOiAwIGF1dG87XG4gIG92ZXJmbG93LXg6IGF1dG87XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgei1pbmRleDogMTtcbiAgLXdlYmtpdC1vdmVyZmxvdy1zY3JvbGxpbmc6IHRvdWNoOyB9XG4gIC50YWJzIHVsIHtcbiAgICBtYXJnaW46IDAgYXV0bztcbiAgICBwYWRkaW5nOiAwO1xuICAgIHBhZGRpbmctbGVmdDogNDBweDtcbiAgICBwYWRkaW5nLXJpZ2h0OiA0MHB4O1xuICAgIGxpc3Qtc3R5bGUtdHlwZTogbm9uZTtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGFsaWduLWl0ZW1zOiBmbGV4LWVuZDtcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG4gICAgbWluLXdpZHRoOiA1NjBweDsgfVxuXG4udGFic19fc2Nyb2xsLS1oaW50OmJlZm9yZSxcbi50YWJzX19zY3JvbGwtLWhpbnQ6YWZ0ZXIge1xuICBvcGFjaXR5OiAxOyB9XG5cbi50YWJzX19pdGVtICsgLnRhYnNfX2l0ZW0ge1xuICBtYXJnaW4tbGVmdDogMjBweDsgfVxuXG4udGFic19faXRlbSBhIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICB0cmFuc2l0aW9uOiBib3JkZXIgMC4zcywgY29sb3IgMC4zcztcbiAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIGZvbnQtc2l6ZTogMTRweDtcbiAgY29sb3I6ICM4ZTliYjE7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIHBhZGRpbmctYm90dG9tOiAzMHB4O1xuICBib3JkZXItYm90dG9tOiAycHggc29saWQgdHJhbnNwYXJlbnQ7IH1cbiAgLnRhYnNfX2l0ZW0gYSBzcGFuIHtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgICBmbGV4OiAxIDAgYXV0bzsgfVxuXG4udGFic19faXRlbSBzdmcge1xuICB3aWR0aDogMjBweDtcbiAgaGVpZ2h0OiAyMHB4O1xuICBtYXJnaW46IDAgMTBweCAwIDA7IH1cblxuLnRhYnNfX2l0ZW0gLmhpZ2hsaWdodCB7XG4gIHRyYW5zaXRpb246IGZpbGwgMC4zcztcbiAgZmlsbDogI0Q4RTBFRjsgfVxuXG4udGFic19faXRlbSAuYmcge1xuICB0cmFuc2l0aW9uOiBmaWxsIDAuM3M7XG4gIGZpbGw6ICNBMUFFQzI7IH1cblxuLnRhYnNfX2l0ZW0gYTpob3Zlcixcbi50YWJzX19pdGVtLmFjdGl2ZSBhIHtcbiAgY29sb3I6ICMzODgwZmY7IH1cbiAgLnRhYnNfX2l0ZW0gYTpob3ZlciAuaGlnaGxpZ2h0LFxuICAudGFic19faXRlbS5hY3RpdmUgYSAuaGlnaGxpZ2h0IHtcbiAgICBmaWxsOiAjQzFEQkZGOyB9XG4gIC50YWJzX19pdGVtIGE6aG92ZXIgLmJnLFxuICAudGFic19faXRlbS5hY3RpdmUgYSAuYmcge1xuICAgIGZpbGw6ICM0RDhDRkQ7IH1cblxuLnRhYnNfX2l0ZW0gYTpmb2N1cyxcbi50YWJzX19pdGVtIGE6YWN0aXZlIHtcbiAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xuICBvdXRsaW5lOiBub25lOyB9XG5cbi50YWJzX19pdGVtLmFjdGl2ZSBhIHtcbiAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG4gIGN1cnNvcjogZGVmYXVsdDtcbiAgYm9yZGVyLWJvdHRvbS1jb2xvcjogIzM4ODBmZjsgfVxuXG5AbWVkaWEgKG1heC13aWR0aDogOTkycHgpIHtcbiAgLnRhYnNfX2l0ZW0gYSB7XG4gICAgcGFkZGluZy1ib3R0b206IDhweDtcbiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOyB9XG4gICAgLnRhYnNfX2l0ZW0gYSBzdmcge1xuICAgICAgbWFyZ2luOiAwO1xuICAgICAgbWFyZ2luLWJvdHRvbTogNnB4OyB9IH1cbiJdfQ== */\n"
  },
  {
    "path": "content/css/pages/enterprise/resources/webinars.css",
    "content": "h1,\nh2,\nh3,\nh4,\n.btn {\n  font-family: \"Eina\", \"Helvetica Neue\", Helvetica, sans-serif; }\n\n.pre-header.back {\n  background: rgba(255, 255, 255, 0.2); }\n  .pre-header.back a,\n  .pre-header.back a ion-icon {\n    color: #fff; }\n\n.sub-header {\n  padding-top: 14px; }\n  .sub-header > .container::before {\n    border-top: 1px solid rgba(255, 255, 255, 0.2); }\n  .sub-header .breadcrumbs li,\n  .sub-header .breadcrumbs li a {\n    font-family: \"Inter\", \"Inter UI\", Helvetica, Arial, sans-serif;\n    font-size: 13px;\n    color: #fff;\n    font-weight: 400;\n    letter-spacing: -0.01em; }\n  .sub-header .breadcrumbs li a {\n    color: rgba(255, 255, 255, 0.6); }\n    .sub-header .breadcrumbs li a:hover {\n      color: white; }\n  .sub-header .breadcrumbs li::after {\n    color: rgba(255, 255, 255, 0.3);\n    margin-left: 7px;\n    margin-right: 6px;\n    font-size: 14px; }\n  @media (max-width: 768px) {\n    .sub-header {\n      display: none; } }\n\n.navbar-default.enterprise:not(.navbar-sticky) .navbar-brand svg {\n  fill: #fff; }\n  @media (max-width: 768px) {\n    .navbar-default.enterprise:not(.navbar-sticky) .navbar-brand svg {\n      fill: #000; } }\n\n.navbar-default.enterprise:not(.navbar-sticky) .navbar-nav > li:not(.header-btn-white) > a {\n  color: white; }\n  .navbar-default.enterprise:not(.navbar-sticky) .navbar-nav > li:not(.header-btn-white) > a:hover {\n    color: rgba(255, 255, 255, 0.6); }\n\n.navbar-default.enterprise:not(.navbar-sticky) #header-btn-outline {\n  color: #fff;\n  border: 1px solid rgba(255, 255, 255, 0.4); }\n  .navbar-default.enterprise:not(.navbar-sticky) #header-btn-outline:hover {\n    border: 1px solid white; }\n\n.transparent .cta {\n  margin-top: -200px;\n  padding-top: 200px; }\n\n.cta {\n  background-color: #12223a;\n  background-image: url(\"/img/resource-center/webinars/bg-header.jpg\"), linear-gradient(120deg, #4864ec, #84aff4);\n  background-size: cover, 100%;\n  background-position: 50% 50%;\n  margin-top: -138px;\n  padding-top: 138px; }\n  .cta.podcasts {\n    background-image: url(\"/img/resource-center/bg-header-podcasts.jpg?3\"), linear-gradient(to bottom, #010c29, #02133c);\n    background-size: cover, 100%;\n    background-position: 50% 50%; }\n  .cta.videos {\n    background-image: url(\"/img/resource-center/bg-header-videos.jpg\"), linear-gradient(to bottom, #010c29, #02133c);\n    background-size: cover, 100%;\n    background-position: 50% 50%; }\n  .cta hgroup {\n    padding-top: 76px;\n    max-width: 100%;\n    padding-bottom: 159px; }\n    .cta hgroup h1 {\n      font-size: 72px;\n      font-size: 56px;\n      margin-top: 22px;\n      max-width: 800px; }\n    .cta hgroup p {\n      color: #d9e9fe;\n      margin-top: 19px;\n      font-size: 16px; }\n  .cta strong {\n    text-transform: uppercase;\n    font-size: 13px;\n    letter-spacing: .12em; }\n  .cta .btn {\n    text-transform: uppercase;\n    margin-top: 41px;\n    padding: 15px 25px 16px;\n    font-size: 15px;\n    letter-spacing: .1em; }\n\n.card {\n  background-color: #fff;\n  border-radius: 6px;\n  box-shadow: 0 8px 32px rgba(0, 0, 0, 0.1), 0 2px 8px rgba(0, 0, 0, 0.1);\n  border-radius: 14px;\n  margin-top: -32px;\n  display: -ms-flexbox;\n  display: flex;\n  margin-bottom: 128px; }\n  @media (max-width: 991px) {\n    .card {\n      -ms-flex-direction: column;\n          flex-direction: column; } }\n\narticle {\n  -ms-flex-positive: 1;\n      flex-grow: 1;\n  padding: 42px 53px 66px;\n  color: #596a89; }\n  @media (max-width: 400px) {\n    article {\n      padding-right: 24px;\n      padding-left: 24px; } }\n  article h2 {\n    font-weight: 400;\n    font-size: 32px;\n    color: #5e79ff; }\n  article h4 {\n    font-weight: 400;\n    font-size: 22px;\n    letter-spacing: -.018em;\n    line-height: 1.46em;\n    color: #596a89; }\n    article h4 + h3 {\n      margin-top: 42px; }\n  article h3 {\n    font-weight: 600;\n    font-size: 20px;\n    margin-top: 42px;\n    margin-bottom: 15px; }\n  article strong {\n    font-weight: 600; }\n  article p {\n    font-size: 16px;\n    line-height: 1.8em;\n    letter-spacing: -.008em; }\n  article ul {\n    margin-top: 20px;\n    padding-left: 0;\n    padding-bottom: 6px; }\n  article li {\n    line-height: 1.8em;\n    font-size: 16px;\n    list-style: none;\n    margin-left: 4px;\n    letter-spacing: -.004em;\n    position: relative;\n    margin-left: 0;\n    padding-left: 44px;\n    margin-bottom: 20px; }\n    article li::before {\n      background: url(\"/img/resource-center/webinars/ico-check.png\") no-repeat 0 0;\n      background-size: 24px;\n      width: 24px;\n      height: 24px;\n      content: '';\n      position: absolute;\n      left: 0;\n      top: 0; }\n  article .btn {\n    margin-top: 30px;\n    text-transform: uppercase;\n    font-size: 15px;\n    padding: 17px 24px 14px;\n    letter-spacing: .1em; }\n\naside {\n  -ms-flex: 0 0 340px;\n      flex: 0 0 340px;\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-direction: column;\n      flex-direction: column;\n  padding: 54px 32px 32px;\n  background: #f6f9fc; }\n  aside h4 {\n    text-transform: uppercase;\n    font-size: 14px;\n    letter-spacing: .1em; }\n  aside .host {\n    margin-top: 16px;\n    margin-bottom: 24px; }\n    aside .host img {\n      border-radius: 50%;\n      float: left;\n      display: block; }\n    aside .host strong {\n      display: block;\n      margin-left: 63px;\n      margin-top: 6px;\n      font-size: 16px;\n      font-weight: 600;\n      color: #151d2b;\n      font-family: \"Eina\", \"Helvetica Neue\", Helvetica, sans-serif; }\n    aside .host span {\n      margin-left: 63px;\n      display: block;\n      line-height: 1.2em;\n      color: #6b82ac; }\n  aside .subscribe-cta {\n    margin-top: auto;\n    background-color: #fff;\n    border-radius: 6px;\n    box-shadow: 0 8px 32px rgba(0, 0, 0, 0.1), 0 2px 8px rgba(0, 0, 0, 0.1);\n    padding: 8px 28px 28px; }\n    @media (min-width: 992px) {\n      aside .subscribe-cta {\n        width: 327px; } }\n    aside .subscribe-cta h3 {\n      font-weight: 600;\n      font-size: 18px;\n      margin-bottom: 1px;\n      letter-spacing: -.01em; }\n    aside .subscribe-cta p {\n      margin-bottom: 16px;\n      line-height: 1.8em;\n      letter-spacing: -.008em; }\n    aside .subscribe-cta .btn {\n      width: 100%;\n      font-size: 16px;\n      background: #d6eeff;\n      color: #3880ff;\n      padding: 15px 10px 11px; }\n  aside ionic-newsletter-signup form {\n    max-width: 100%; }\n    aside ionic-newsletter-signup form input {\n      min-width: 0; }\n  @media (max-width: 991px) {\n    aside {\n      -ms-flex: 0 0 100%;\n          flex: 0 0 100%; } }\n\n.resource-list {\n  margin-bottom: 64px; }\n  .resource-list__header h4 {\n    font-size: 24px;\n    margin-bottom: 1px; }\n\n.scrollTopLink {\n  float: right;\n  font-size: 15px;\n  font-weight: 600; }\n\n.modal-body {\n  padding: 32px 48px; }\n  @media (max-width: 767px) {\n    .modal-body {\n      padding: 16px; } }\n  .modal-body form {\n    max-width: 100%; }\n\n#podcast-player {\n  width: 100%;\n  height: 180px;\n  margin: 22px 0 48px; }\n\n#youtube-responsive {\n  overflow: hidden;\n  padding-bottom: 56.25%;\n  position: relative;\n  height: 0;\n  margin: 22px 0 48px; }\n  #youtube-responsive iframe {\n    left: 0;\n    top: 0;\n    height: 100%;\n    width: 100%;\n    position: absolute; }\n\n#wistia_responsive_padding {\n  padding: 56.25% 0 0 0;\n  position: relative;\n  margin: 22px 0 48px; }\n  #wistia_responsive_padding .wistia_responsive_wrapper {\n    height: 100%;\n    left: 0;\n    position: absolute;\n    top: 0;\n    width: 100%; }\n  #wistia_responsive_padding .wistia_embed {\n    height: 100%;\n    position: relative;\n    width: 100%; }\n  #wistia_responsive_padding .wistia_swatch {\n    height: 100%;\n    left: 0;\n    opacity: 0;\n    overflow: hidden;\n    position: absolute;\n    top: 0;\n    transition: opacity 200ms;\n    width: 100%; }\n    #wistia_responsive_padding .wistia_swatch img {\n      -webkit-filter: blur(5px);\n              filter: blur(5px);\n      height: 100%;\n      object-fit: contain;\n      width: 100%; }\n\n/*# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYmluYXJzLmNzcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7RUFLRSw2REFBNkQsRUFBRTs7QUFFakU7RUFDRSxxQ0FBcUMsRUFBRTtFQUN2Qzs7SUFFRSxZQUFZLEVBQUU7O0FBRWxCO0VBQ0Usa0JBQWtCLEVBQUU7RUFDcEI7SUFDRSwrQ0FBK0MsRUFBRTtFQUNuRDs7SUFFRSwrREFBK0Q7SUFDL0QsZ0JBQWdCO0lBQ2hCLFlBQVk7SUFDWixpQkFBaUI7SUFDakIsd0JBQXdCLEVBQUU7RUFDNUI7SUFDRSxnQ0FBZ0MsRUFBRTtJQUNsQztNQUNFLGFBQWEsRUFBRTtFQUNuQjtJQUNFLGdDQUFnQztJQUNoQyxpQkFBaUI7SUFDakIsa0JBQWtCO0lBQ2xCLGdCQUFnQixFQUFFO0VBQ3BCO0lBQ0U7TUFDRSxjQUFjLEVBQUUsRUFBRTs7QUFFeEI7RUFDRSxXQUFXLEVBQUU7RUFDYjtJQUNFO01BQ0UsV0FBVyxFQUFFLEVBQUU7O0FBRXJCO0VBQ0UsYUFBYSxFQUFFO0VBQ2Y7SUFDRSxnQ0FBZ0MsRUFBRTs7QUFFdEM7RUFDRSxZQUFZO0VBQ1osMkNBQTJDLEVBQUU7RUFDN0M7SUFDRSx3QkFBd0IsRUFBRTs7QUFFOUI7RUFDRSxtQkFBbUI7RUFDbkIsbUJBQW1CLEVBQUU7O0FBRXZCO0VBQ0UsMEJBQTBCO0VBQzFCLGdIQUFnSDtFQUNoSCw2QkFBNkI7RUFDN0IsNkJBQTZCO0VBQzdCLG1CQUFtQjtFQUNuQixtQkFBbUIsRUFBRTtFQUNyQjtJQUNFLHFIQUFxSDtJQUNySCw2QkFBNkI7SUFDN0IsNkJBQTZCLEVBQUU7RUFDakM7SUFDRSxpSEFBaUg7SUFDakgsNkJBQTZCO0lBQzdCLDZCQUE2QixFQUFFO0VBQ2pDO0lBQ0Usa0JBQWtCO0lBQ2xCLGdCQUFnQjtJQUNoQixzQkFBc0IsRUFBRTtJQUN4QjtNQUNFLGdCQUFnQjtNQUNoQixnQkFBZ0I7TUFDaEIsaUJBQWlCO01BQ2pCLGlCQUFpQixFQUFFO0lBQ3JCO01BQ0UsZUFBZTtNQUNmLGlCQUFpQjtNQUNqQixnQkFBZ0IsRUFBRTtFQUN0QjtJQUNFLDBCQUEwQjtJQUMxQixnQkFBZ0I7SUFDaEIsc0JBQXNCLEVBQUU7RUFDMUI7SUFDRSwwQkFBMEI7SUFDMUIsaUJBQWlCO0lBQ2pCLHdCQUF3QjtJQUN4QixnQkFBZ0I7SUFDaEIscUJBQXFCLEVBQUU7O0FBRTNCO0VBQ0UsdUJBQXVCO0VBQ3ZCLG1CQUFtQjtFQUNuQix3RUFBd0U7RUFDeEUsb0JBQW9CO0VBQ3BCLGtCQUFrQjtFQUNsQixxQkFBYztFQUFkLGNBQWM7RUFDZCxxQkFBcUIsRUFBRTtFQUN2QjtJQUNFO01BQ0UsMkJBQXVCO1VBQXZCLHVCQUF1QixFQUFFLEVBQUU7O0FBRWpDO0VBQ0UscUJBQWE7TUFBYixhQUFhO0VBQ2Isd0JBQXdCO0VBQ3hCLGVBQWUsRUFBRTtFQUNqQjtJQUNFO01BQ0Usb0JBQW9CO01BQ3BCLG1CQUFtQixFQUFFLEVBQUU7RUFDM0I7SUFDRSxpQkFBaUI7SUFDakIsZ0JBQWdCO0lBQ2hCLGVBQWUsRUFBRTtFQUNuQjtJQUNFLGlCQUFpQjtJQUNqQixnQkFBZ0I7SUFDaEIsd0JBQXdCO0lBQ3hCLG9CQUFvQjtJQUNwQixlQUFlLEVBQUU7SUFDakI7TUFDRSxpQkFBaUIsRUFBRTtFQUN2QjtJQUNFLGlCQUFpQjtJQUNqQixnQkFBZ0I7SUFDaEIsaUJBQWlCO0lBQ2pCLG9CQUFvQixFQUFFO0VBQ3hCO0lBQ0UsaUJBQWlCLEVBQUU7RUFDckI7SUFDRSxnQkFBZ0I7SUFDaEIsbUJBQW1CO0lBQ25CLHdCQUF3QixFQUFFO0VBQzVCO0lBQ0UsaUJBQWlCO0lBQ2pCLGdCQUFnQjtJQUNoQixvQkFBb0IsRUFBRTtFQUN4QjtJQUNFLG1CQUFtQjtJQUNuQixnQkFBZ0I7SUFDaEIsaUJBQWlCO0lBQ2pCLGlCQUFpQjtJQUNqQix3QkFBd0I7SUFDeEIsbUJBQW1CO0lBQ25CLGVBQWU7SUFDZixtQkFBbUI7SUFDbkIsb0JBQW9CLEVBQUU7SUFDdEI7TUFDRSw2RUFBNkU7TUFDN0Usc0JBQXNCO01BQ3RCLFlBQVk7TUFDWixhQUFhO01BQ2IsWUFBWTtNQUNaLG1CQUFtQjtNQUNuQixRQUFRO01BQ1IsT0FBTyxFQUFFO0VBQ2I7SUFDRSxpQkFBaUI7SUFDakIsMEJBQTBCO0lBQzFCLGdCQUFnQjtJQUNoQix3QkFBd0I7SUFDeEIscUJBQXFCLEVBQUU7O0FBRTNCO0VBQ0Usb0JBQWdCO01BQWhCLGdCQUFnQjtFQUNoQixxQkFBYztFQUFkLGNBQWM7RUFDZCwyQkFBdUI7TUFBdkIsdUJBQXVCO0VBQ3ZCLHdCQUF3QjtFQUN4QixvQkFBb0IsRUFBRTtFQUN0QjtJQUNFLDBCQUEwQjtJQUMxQixnQkFBZ0I7SUFDaEIscUJBQXFCLEVBQUU7RUFDekI7SUFDRSxpQkFBaUI7SUFDakIsb0JBQW9CLEVBQUU7SUFDdEI7TUFDRSxtQkFBbUI7TUFDbkIsWUFBWTtNQUNaLGVBQWUsRUFBRTtJQUNuQjtNQUNFLGVBQWU7TUFDZixrQkFBa0I7TUFDbEIsZ0JBQWdCO01BQ2hCLGdCQUFnQjtNQUNoQixpQkFBaUI7TUFDakIsZUFBZTtNQUNmLDZEQUE2RCxFQUFFO0lBQ2pFO01BQ0Usa0JBQWtCO01BQ2xCLGVBQWU7TUFDZixtQkFBbUI7TUFDbkIsZUFBZSxFQUFFO0VBQ3JCO0lBQ0UsaUJBQWlCO0lBQ2pCLHVCQUF1QjtJQUN2QixtQkFBbUI7SUFDbkIsd0VBQXdFO0lBQ3hFLHVCQUF1QixFQUFFO0lBQ3pCO01BQ0U7UUFDRSxhQUFhLEVBQUUsRUFBRTtJQUNyQjtNQUNFLGlCQUFpQjtNQUNqQixnQkFBZ0I7TUFDaEIsbUJBQW1CO01BQ25CLHVCQUF1QixFQUFFO0lBQzNCO01BQ0Usb0JBQW9CO01BQ3BCLG1CQUFtQjtNQUNuQix3QkFBd0IsRUFBRTtJQUM1QjtNQUNFLFlBQVk7TUFDWixnQkFBZ0I7TUFDaEIsb0JBQW9CO01BQ3BCLGVBQWU7TUFDZix3QkFBd0IsRUFBRTtFQUM5QjtJQUNFLGdCQUFnQixFQUFFO0lBQ2xCO01BQ0UsYUFBYSxFQUFFO0VBQ25CO0lBQ0U7TUFDRSxtQkFBZTtVQUFmLGVBQWUsRUFBRSxFQUFFOztBQUV6QjtFQUNFLG9CQUFvQixFQUFFO0VBQ3RCO0lBQ0UsZ0JBQWdCO0lBQ2hCLG1CQUFtQixFQUFFOztBQUV6QjtFQUNFLGFBQWE7RUFDYixnQkFBZ0I7RUFDaEIsaUJBQWlCLEVBQUU7O0FBRXJCO0VBQ0UsbUJBQW1CLEVBQUU7RUFDckI7SUFDRTtNQUNFLGNBQWMsRUFBRSxFQUFFO0VBQ3RCO0lBQ0UsZ0JBQWdCLEVBQUU7O0FBRXRCO0VBQ0UsWUFBWTtFQUNaLGNBQWM7RUFDZCxvQkFBb0IsRUFBRTs7QUFFeEI7RUFDRSxpQkFBaUI7RUFDakIsdUJBQXVCO0VBQ3ZCLG1CQUFtQjtFQUNuQixVQUFVO0VBQ1Ysb0JBQW9CLEVBQUU7RUFDdEI7SUFDRSxRQUFRO0lBQ1IsT0FBTztJQUNQLGFBQWE7SUFDYixZQUFZO0lBQ1osbUJBQW1CLEVBQUU7O0FBRXpCO0VBQ0Usc0JBQXNCO0VBQ3RCLG1CQUFtQjtFQUNuQixvQkFBb0IsRUFBRTtFQUN0QjtJQUNFLGFBQWE7SUFDYixRQUFRO0lBQ1IsbUJBQW1CO0lBQ25CLE9BQU87SUFDUCxZQUFZLEVBQUU7RUFDaEI7SUFDRSxhQUFhO0lBQ2IsbUJBQW1CO0lBQ25CLFlBQVksRUFBRTtFQUNoQjtJQUNFLGFBQWE7SUFDYixRQUFRO0lBQ1IsV0FBVztJQUNYLGlCQUFpQjtJQUNqQixtQkFBbUI7SUFDbkIsT0FBTztJQUNQLDBCQUEwQjtJQUMxQixZQUFZLEVBQUU7SUFDZDtNQUNFLDBCQUFrQjtjQUFsQixrQkFBa0I7TUFDbEIsYUFBYTtNQUNiLG9CQUFvQjtNQUNwQixZQUFZLEVBQUUiLCJmaWxlIjoicGFnZXMvZW50ZXJwcmlzZS9yZXNvdXJjZXMvd2ViaW5hcnMuY3NzIiwic291cmNlc0NvbnRlbnQiOlsiaDEsXG5oMixcbmgzLFxuaDQsXG4uYnRuIHtcbiAgZm9udC1mYW1pbHk6IFwiRWluYVwiLCBcIkhlbHZldGljYSBOZXVlXCIsIEhlbHZldGljYSwgc2Fucy1zZXJpZjsgfVxuXG4ucHJlLWhlYWRlci5iYWNrIHtcbiAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjIpOyB9XG4gIC5wcmUtaGVhZGVyLmJhY2sgYSxcbiAgLnByZS1oZWFkZXIuYmFjayBhIGlvbi1pY29uIHtcbiAgICBjb2xvcjogI2ZmZjsgfVxuXG4uc3ViLWhlYWRlciB7XG4gIHBhZGRpbmctdG9wOiAxNHB4OyB9XG4gIC5zdWItaGVhZGVyID4gLmNvbnRhaW5lcjo6YmVmb3JlIHtcbiAgICBib3JkZXItdG9wOiAxcHggc29saWQgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjIpOyB9XG4gIC5zdWItaGVhZGVyIC5icmVhZGNydW1icyBsaSxcbiAgLnN1Yi1oZWFkZXIgLmJyZWFkY3J1bWJzIGxpIGEge1xuICAgIGZvbnQtZmFtaWx5OiBcIkludGVyXCIsIFwiSW50ZXIgVUlcIiwgSGVsdmV0aWNhLCBBcmlhbCwgc2Fucy1zZXJpZjtcbiAgICBmb250LXNpemU6IDEzcHg7XG4gICAgY29sb3I6ICNmZmY7XG4gICAgZm9udC13ZWlnaHQ6IDQwMDtcbiAgICBsZXR0ZXItc3BhY2luZzogLTAuMDFlbTsgfVxuICAuc3ViLWhlYWRlciAuYnJlYWRjcnVtYnMgbGkgYSB7XG4gICAgY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC42KTsgfVxuICAgIC5zdWItaGVhZGVyIC5icmVhZGNydW1icyBsaSBhOmhvdmVyIHtcbiAgICAgIGNvbG9yOiB3aGl0ZTsgfVxuICAuc3ViLWhlYWRlciAuYnJlYWRjcnVtYnMgbGk6OmFmdGVyIHtcbiAgICBjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjMpO1xuICAgIG1hcmdpbi1sZWZ0OiA3cHg7XG4gICAgbWFyZ2luLXJpZ2h0OiA2cHg7XG4gICAgZm9udC1zaXplOiAxNHB4OyB9XG4gIEBtZWRpYSAobWF4LXdpZHRoOiA3NjhweCkge1xuICAgIC5zdWItaGVhZGVyIHtcbiAgICAgIGRpc3BsYXk6IG5vbmU7IH0gfVxuXG4ubmF2YmFyLWRlZmF1bHQuZW50ZXJwcmlzZTpub3QoLm5hdmJhci1zdGlja3kpIC5uYXZiYXItYnJhbmQgc3ZnIHtcbiAgZmlsbDogI2ZmZjsgfVxuICBAbWVkaWEgKG1heC13aWR0aDogNzY4cHgpIHtcbiAgICAubmF2YmFyLWRlZmF1bHQuZW50ZXJwcmlzZTpub3QoLm5hdmJhci1zdGlja3kpIC5uYXZiYXItYnJhbmQgc3ZnIHtcbiAgICAgIGZpbGw6ICMwMDA7IH0gfVxuXG4ubmF2YmFyLWRlZmF1bHQuZW50ZXJwcmlzZTpub3QoLm5hdmJhci1zdGlja3kpIC5uYXZiYXItbmF2ID4gbGk6bm90KC5oZWFkZXItYnRuLXdoaXRlKSA+IGEge1xuICBjb2xvcjogd2hpdGU7IH1cbiAgLm5hdmJhci1kZWZhdWx0LmVudGVycHJpc2U6bm90KC5uYXZiYXItc3RpY2t5KSAubmF2YmFyLW5hdiA+IGxpOm5vdCguaGVhZGVyLWJ0bi13aGl0ZSkgPiBhOmhvdmVyIHtcbiAgICBjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjYpOyB9XG5cbi5uYXZiYXItZGVmYXVsdC5lbnRlcnByaXNlOm5vdCgubmF2YmFyLXN0aWNreSkgI2hlYWRlci1idG4tb3V0bGluZSB7XG4gIGNvbG9yOiAjZmZmO1xuICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNCk7IH1cbiAgLm5hdmJhci1kZWZhdWx0LmVudGVycHJpc2U6bm90KC5uYXZiYXItc3RpY2t5KSAjaGVhZGVyLWJ0bi1vdXRsaW5lOmhvdmVyIHtcbiAgICBib3JkZXI6IDFweCBzb2xpZCB3aGl0ZTsgfVxuXG4udHJhbnNwYXJlbnQgLmN0YSB7XG4gIG1hcmdpbi10b3A6IC0yMDBweDtcbiAgcGFkZGluZy10b3A6IDIwMHB4OyB9XG5cbi5jdGEge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMTIyMjNhO1xuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXCIvaW1nL3Jlc291cmNlLWNlbnRlci93ZWJpbmFycy9iZy1oZWFkZXIuanBnXCIpLCBsaW5lYXItZ3JhZGllbnQoMTIwZGVnLCAjNDg2NGVjLCAjODRhZmY0KTtcbiAgYmFja2dyb3VuZC1zaXplOiBjb3ZlciwgMTAwJTtcbiAgYmFja2dyb3VuZC1wb3NpdGlvbjogNTAlIDUwJTtcbiAgbWFyZ2luLXRvcDogLTEzOHB4O1xuICBwYWRkaW5nLXRvcDogMTM4cHg7IH1cbiAgLmN0YS5wb2RjYXN0cyB7XG4gICAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFwiL2ltZy9yZXNvdXJjZS1jZW50ZXIvYmctaGVhZGVyLXBvZGNhc3RzLmpwZz8zXCIpLCBsaW5lYXItZ3JhZGllbnQodG8gYm90dG9tLCAjMDEwYzI5LCAjMDIxMzNjKTtcbiAgICBiYWNrZ3JvdW5kLXNpemU6IGNvdmVyLCAxMDAlO1xuICAgIGJhY2tncm91bmQtcG9zaXRpb246IDUwJSA1MCU7IH1cbiAgLmN0YS52aWRlb3Mge1xuICAgIGJhY2tncm91bmQtaW1hZ2U6IHVybChcIi9pbWcvcmVzb3VyY2UtY2VudGVyL2JnLWhlYWRlci12aWRlb3MuanBnXCIpLCBsaW5lYXItZ3JhZGllbnQodG8gYm90dG9tLCAjMDEwYzI5LCAjMDIxMzNjKTtcbiAgICBiYWNrZ3JvdW5kLXNpemU6IGNvdmVyLCAxMDAlO1xuICAgIGJhY2tncm91bmQtcG9zaXRpb246IDUwJSA1MCU7IH1cbiAgLmN0YSBoZ3JvdXAge1xuICAgIHBhZGRpbmctdG9wOiA3NnB4O1xuICAgIG1heC13aWR0aDogMTAwJTtcbiAgICBwYWRkaW5nLWJvdHRvbTogMTU5cHg7IH1cbiAgICAuY3RhIGhncm91cCBoMSB7XG4gICAgICBmb250LXNpemU6IDcycHg7XG4gICAgICBmb250LXNpemU6IDU2cHg7XG4gICAgICBtYXJnaW4tdG9wOiAyMnB4O1xuICAgICAgbWF4LXdpZHRoOiA4MDBweDsgfVxuICAgIC5jdGEgaGdyb3VwIHAge1xuICAgICAgY29sb3I6ICNkOWU5ZmU7XG4gICAgICBtYXJnaW4tdG9wOiAxOXB4O1xuICAgICAgZm9udC1zaXplOiAxNnB4OyB9XG4gIC5jdGEgc3Ryb25nIHtcbiAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xuICAgIGZvbnQtc2l6ZTogMTNweDtcbiAgICBsZXR0ZXItc3BhY2luZzogLjEyZW07IH1cbiAgLmN0YSAuYnRuIHtcbiAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xuICAgIG1hcmdpbi10b3A6IDQxcHg7XG4gICAgcGFkZGluZzogMTVweCAyNXB4IDE2cHg7XG4gICAgZm9udC1zaXplOiAxNXB4O1xuICAgIGxldHRlci1zcGFjaW5nOiAuMWVtOyB9XG5cbi5jYXJkIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjtcbiAgYm9yZGVyLXJhZGl1czogNnB4O1xuICBib3gtc2hhZG93OiAwIDhweCAzMnB4IHJnYmEoMCwgMCwgMCwgMC4xKSwgMCAycHggOHB4IHJnYmEoMCwgMCwgMCwgMC4xKTtcbiAgYm9yZGVyLXJhZGl1czogMTRweDtcbiAgbWFyZ2luLXRvcDogLTMycHg7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIG1hcmdpbi1ib3R0b206IDEyOHB4OyB9XG4gIEBtZWRpYSAobWF4LXdpZHRoOiA5OTFweCkge1xuICAgIC5jYXJkIHtcbiAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47IH0gfVxuXG5hcnRpY2xlIHtcbiAgZmxleC1ncm93OiAxO1xuICBwYWRkaW5nOiA0MnB4IDUzcHggNjZweDtcbiAgY29sb3I6ICM1OTZhODk7IH1cbiAgQG1lZGlhIChtYXgtd2lkdGg6IDQwMHB4KSB7XG4gICAgYXJ0aWNsZSB7XG4gICAgICBwYWRkaW5nLXJpZ2h0OiAyNHB4O1xuICAgICAgcGFkZGluZy1sZWZ0OiAyNHB4OyB9IH1cbiAgYXJ0aWNsZSBoMiB7XG4gICAgZm9udC13ZWlnaHQ6IDQwMDtcbiAgICBmb250LXNpemU6IDMycHg7XG4gICAgY29sb3I6ICM1ZTc5ZmY7IH1cbiAgYXJ0aWNsZSBoNCB7XG4gICAgZm9udC13ZWlnaHQ6IDQwMDtcbiAgICBmb250LXNpemU6IDIycHg7XG4gICAgbGV0dGVyLXNwYWNpbmc6IC0uMDE4ZW07XG4gICAgbGluZS1oZWlnaHQ6IDEuNDZlbTtcbiAgICBjb2xvcjogIzU5NmE4OTsgfVxuICAgIGFydGljbGUgaDQgKyBoMyB7XG4gICAgICBtYXJnaW4tdG9wOiA0MnB4OyB9XG4gIGFydGljbGUgaDMge1xuICAgIGZvbnQtd2VpZ2h0OiA2MDA7XG4gICAgZm9udC1zaXplOiAyMHB4O1xuICAgIG1hcmdpbi10b3A6IDQycHg7XG4gICAgbWFyZ2luLWJvdHRvbTogMTVweDsgfVxuICBhcnRpY2xlIHN0cm9uZyB7XG4gICAgZm9udC13ZWlnaHQ6IDYwMDsgfVxuICBhcnRpY2xlIHAge1xuICAgIGZvbnQtc2l6ZTogMTZweDtcbiAgICBsaW5lLWhlaWdodDogMS44ZW07XG4gICAgbGV0dGVyLXNwYWNpbmc6IC0uMDA4ZW07IH1cbiAgYXJ0aWNsZSB1bCB7XG4gICAgbWFyZ2luLXRvcDogMjBweDtcbiAgICBwYWRkaW5nLWxlZnQ6IDA7XG4gICAgcGFkZGluZy1ib3R0b206IDZweDsgfVxuICBhcnRpY2xlIGxpIHtcbiAgICBsaW5lLWhlaWdodDogMS44ZW07XG4gICAgZm9udC1zaXplOiAxNnB4O1xuICAgIGxpc3Qtc3R5bGU6IG5vbmU7XG4gICAgbWFyZ2luLWxlZnQ6IDRweDtcbiAgICBsZXR0ZXItc3BhY2luZzogLS4wMDRlbTtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgbWFyZ2luLWxlZnQ6IDA7XG4gICAgcGFkZGluZy1sZWZ0OiA0NHB4O1xuICAgIG1hcmdpbi1ib3R0b206IDIwcHg7IH1cbiAgICBhcnRpY2xlIGxpOjpiZWZvcmUge1xuICAgICAgYmFja2dyb3VuZDogdXJsKFwiL2ltZy9yZXNvdXJjZS1jZW50ZXIvd2ViaW5hcnMvaWNvLWNoZWNrLnBuZ1wiKSBuby1yZXBlYXQgMCAwO1xuICAgICAgYmFja2dyb3VuZC1zaXplOiAyNHB4O1xuICAgICAgd2lkdGg6IDI0cHg7XG4gICAgICBoZWlnaHQ6IDI0cHg7XG4gICAgICBjb250ZW50OiAnJztcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgIGxlZnQ6IDA7XG4gICAgICB0b3A6IDA7IH1cbiAgYXJ0aWNsZSAuYnRuIHtcbiAgICBtYXJnaW4tdG9wOiAzMHB4O1xuICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XG4gICAgZm9udC1zaXplOiAxNXB4O1xuICAgIHBhZGRpbmc6IDE3cHggMjRweCAxNHB4O1xuICAgIGxldHRlci1zcGFjaW5nOiAuMWVtOyB9XG5cbmFzaWRlIHtcbiAgZmxleDogMCAwIDM0MHB4O1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICBwYWRkaW5nOiA1NHB4IDMycHggMzJweDtcbiAgYmFja2dyb3VuZDogI2Y2ZjlmYzsgfVxuICBhc2lkZSBoNCB7XG4gICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcbiAgICBmb250LXNpemU6IDE0cHg7XG4gICAgbGV0dGVyLXNwYWNpbmc6IC4xZW07IH1cbiAgYXNpZGUgLmhvc3Qge1xuICAgIG1hcmdpbi10b3A6IDE2cHg7XG4gICAgbWFyZ2luLWJvdHRvbTogMjRweDsgfVxuICAgIGFzaWRlIC5ob3N0IGltZyB7XG4gICAgICBib3JkZXItcmFkaXVzOiA1MCU7XG4gICAgICBmbG9hdDogbGVmdDtcbiAgICAgIGRpc3BsYXk6IGJsb2NrOyB9XG4gICAgYXNpZGUgLmhvc3Qgc3Ryb25nIHtcbiAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgbWFyZ2luLWxlZnQ6IDYzcHg7XG4gICAgICBtYXJnaW4tdG9wOiA2cHg7XG4gICAgICBmb250LXNpemU6IDE2cHg7XG4gICAgICBmb250LXdlaWdodDogNjAwO1xuICAgICAgY29sb3I6ICMxNTFkMmI7XG4gICAgICBmb250LWZhbWlseTogXCJFaW5hXCIsIFwiSGVsdmV0aWNhIE5ldWVcIiwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmOyB9XG4gICAgYXNpZGUgLmhvc3Qgc3BhbiB7XG4gICAgICBtYXJnaW4tbGVmdDogNjNweDtcbiAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgbGluZS1oZWlnaHQ6IDEuMmVtO1xuICAgICAgY29sb3I6ICM2YjgyYWM7IH1cbiAgYXNpZGUgLnN1YnNjcmliZS1jdGEge1xuICAgIG1hcmdpbi10b3A6IGF1dG87XG4gICAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjtcbiAgICBib3JkZXItcmFkaXVzOiA2cHg7XG4gICAgYm94LXNoYWRvdzogMCA4cHggMzJweCByZ2JhKDAsIDAsIDAsIDAuMSksIDAgMnB4IDhweCByZ2JhKDAsIDAsIDAsIDAuMSk7XG4gICAgcGFkZGluZzogOHB4IDI4cHggMjhweDsgfVxuICAgIEBtZWRpYSAobWluLXdpZHRoOiA5OTJweCkge1xuICAgICAgYXNpZGUgLnN1YnNjcmliZS1jdGEge1xuICAgICAgICB3aWR0aDogMzI3cHg7IH0gfVxuICAgIGFzaWRlIC5zdWJzY3JpYmUtY3RhIGgzIHtcbiAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7XG4gICAgICBmb250LXNpemU6IDE4cHg7XG4gICAgICBtYXJnaW4tYm90dG9tOiAxcHg7XG4gICAgICBsZXR0ZXItc3BhY2luZzogLS4wMWVtOyB9XG4gICAgYXNpZGUgLnN1YnNjcmliZS1jdGEgcCB7XG4gICAgICBtYXJnaW4tYm90dG9tOiAxNnB4O1xuICAgICAgbGluZS1oZWlnaHQ6IDEuOGVtO1xuICAgICAgbGV0dGVyLXNwYWNpbmc6IC0uMDA4ZW07IH1cbiAgICBhc2lkZSAuc3Vic2NyaWJlLWN0YSAuYnRuIHtcbiAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgZm9udC1zaXplOiAxNnB4O1xuICAgICAgYmFja2dyb3VuZDogI2Q2ZWVmZjtcbiAgICAgIGNvbG9yOiAjMzg4MGZmO1xuICAgICAgcGFkZGluZzogMTVweCAxMHB4IDExcHg7IH1cbiAgYXNpZGUgaW9uaWMtbmV3c2xldHRlci1zaWdudXAgZm9ybSB7XG4gICAgbWF4LXdpZHRoOiAxMDAlOyB9XG4gICAgYXNpZGUgaW9uaWMtbmV3c2xldHRlci1zaWdudXAgZm9ybSBpbnB1dCB7XG4gICAgICBtaW4td2lkdGg6IDA7IH1cbiAgQG1lZGlhIChtYXgtd2lkdGg6IDk5MXB4KSB7XG4gICAgYXNpZGUge1xuICAgICAgZmxleDogMCAwIDEwMCU7IH0gfVxuXG4ucmVzb3VyY2UtbGlzdCB7XG4gIG1hcmdpbi1ib3R0b206IDY0cHg7IH1cbiAgLnJlc291cmNlLWxpc3RfX2hlYWRlciBoNCB7XG4gICAgZm9udC1zaXplOiAyNHB4O1xuICAgIG1hcmdpbi1ib3R0b206IDFweDsgfVxuXG4uc2Nyb2xsVG9wTGluayB7XG4gIGZsb2F0OiByaWdodDtcbiAgZm9udC1zaXplOiAxNXB4O1xuICBmb250LXdlaWdodDogNjAwOyB9XG5cbi5tb2RhbC1ib2R5IHtcbiAgcGFkZGluZzogMzJweCA0OHB4OyB9XG4gIEBtZWRpYSAobWF4LXdpZHRoOiA3NjdweCkge1xuICAgIC5tb2RhbC1ib2R5IHtcbiAgICAgIHBhZGRpbmc6IDE2cHg7IH0gfVxuICAubW9kYWwtYm9keSBmb3JtIHtcbiAgICBtYXgtd2lkdGg6IDEwMCU7IH1cblxuI3BvZGNhc3QtcGxheWVyIHtcbiAgd2lkdGg6IDEwMCU7XG4gIGhlaWdodDogMTgwcHg7XG4gIG1hcmdpbjogMjJweCAwIDQ4cHg7IH1cblxuI3lvdXR1YmUtcmVzcG9uc2l2ZSB7XG4gIG92ZXJmbG93OiBoaWRkZW47XG4gIHBhZGRpbmctYm90dG9tOiA1Ni4yNSU7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgaGVpZ2h0OiAwO1xuICBtYXJnaW46IDIycHggMCA0OHB4OyB9XG4gICN5b3V0dWJlLXJlc3BvbnNpdmUgaWZyYW1lIHtcbiAgICBsZWZ0OiAwO1xuICAgIHRvcDogMDtcbiAgICBoZWlnaHQ6IDEwMCU7XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgcG9zaXRpb246IGFic29sdXRlOyB9XG5cbiN3aXN0aWFfcmVzcG9uc2l2ZV9wYWRkaW5nIHtcbiAgcGFkZGluZzogNTYuMjUlIDAgMCAwO1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIG1hcmdpbjogMjJweCAwIDQ4cHg7IH1cbiAgI3dpc3RpYV9yZXNwb25zaXZlX3BhZGRpbmcgLndpc3RpYV9yZXNwb25zaXZlX3dyYXBwZXIge1xuICAgIGhlaWdodDogMTAwJTtcbiAgICBsZWZ0OiAwO1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICB0b3A6IDA7XG4gICAgd2lkdGg6IDEwMCU7IH1cbiAgI3dpc3RpYV9yZXNwb25zaXZlX3BhZGRpbmcgLndpc3RpYV9lbWJlZCB7XG4gICAgaGVpZ2h0OiAxMDAlO1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICB3aWR0aDogMTAwJTsgfVxuICAjd2lzdGlhX3Jlc3BvbnNpdmVfcGFkZGluZyAud2lzdGlhX3N3YXRjaCB7XG4gICAgaGVpZ2h0OiAxMDAlO1xuICAgIGxlZnQ6IDA7XG4gICAgb3BhY2l0eTogMDtcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICB0b3A6IDA7XG4gICAgdHJhbnNpdGlvbjogb3BhY2l0eSAyMDBtcztcbiAgICB3aWR0aDogMTAwJTsgfVxuICAgICN3aXN0aWFfcmVzcG9uc2l2ZV9wYWRkaW5nIC53aXN0aWFfc3dhdGNoIGltZyB7XG4gICAgICBmaWx0ZXI6IGJsdXIoNXB4KTtcbiAgICAgIGhlaWdodDogMTAwJTtcbiAgICAgIG9iamVjdC1maXQ6IGNvbnRhaW47XG4gICAgICB3aWR0aDogMTAwJTsgfVxuIl19 */\n"
  },
  {
    "path": "content/css/pages/enterprise/resources/whitepapers.css",
    "content": "@charset \"UTF-8\";\nbody {\n  font-family: \"Eina\", \"Helvetica Neue\", Helvetica, sans-serif; }\n\n.cta {\n  background: linear-gradient(to bottom, white, #f6f8fc);\n  border-bottom: 1px solid #e5e7eb;\n  margin-top: -138px;\n  padding-top: 78px; }\n  .cta hgroup {\n    display: -ms-flexbox;\n    display: flex;\n    -ms-flex-direction: column;\n        flex-direction: column;\n    -ms-flex-align: center;\n        align-items: center;\n    text-align: center;\n    padding-top: 20px;\n    padding-bottom: 114px;\n    max-width: 840px; }\n    .cta hgroup h5 {\n      text-transform: uppercase;\n      font-weight: 700;\n      letter-spacing: 0.1em;\n      font-size: 12px;\n      color: #8e9aab; }\n    .cta hgroup h1 {\n      color: #24282e;\n      font-size: 40px;\n      font-weight: 700;\n      letter-spacing: -0.03em;\n      margin: 12px 0 24px; }\n    .cta hgroup p {\n      font-size: 18px;\n      line-height: 32px;\n      font-weight: 600;\n      letter-spacing: -0.02em;\n      color: #626c7d;\n      max-width: 800px; }\n\n.signup-form {\n  padding-top: 110px;\n  padding-bottom: 0px;\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-pack: justify;\n      justify-content: space-between;\n  max-width: 1000px;\n  margin-left: auto;\n  margin-right: auto; }\n  .signup-form .left-col,\n  .signup-form .right-col {\n    width: 100%;\n    max-width: 472px; }\n  .signup-form .left-col {\n    padding-right: 30px;\n    font-family: apple-system, BlinkMacSystemFont, Roboto, Helvetica, Arial, sans-serif;\n    font-size: 14px;\n    line-height: 1.6em;\n    color: #4e545e;\n    letter-spacing: -0.02em; }\n    .signup-form .left-col .illustration + p {\n      color: #6e7f99;\n      font-size: 18px;\n      line-height: 28px; }\n    .signup-form .left-col h5 {\n      font-size: 14px;\n      color: #4e545e;\n      letter-spacing: -0.02em;\n      font-weight: 400;\n      margin-top: 13px; }\n    .signup-form .left-col ul {\n      list-style-type: none;\n      padding: 0;\n      margin: 16px 0 32px;\n      line-height: 20px; }\n    .signup-form .left-col li {\n      padding-left: 20px;\n      position: relative; }\n      .signup-form .left-col li:before {\n        content: '•';\n        margin-right: 10px;\n        opacity: 0.8;\n        position: absolute;\n        left: 0; }\n      .signup-form .left-col li + li {\n        margin-top: 12px; }\n    .signup-form .left-col .p-bold {\n      font-weight: 600; }\n  .signup-form .right-col {\n    padding-left: 30px; }\n    .signup-form .right-col h3 {\n      margin-top: 0;\n      margin-bottom: 30px;\n      font-weight: 700;\n      font-size: 28px;\n      line-height: 36px;\n      letter-spacing: -0.03em; }\n  .signup-form .illustration {\n    position: relative;\n    width: 100%;\n    max-width: 430px;\n    margin-bottom: 30px; }\n    .signup-form .illustration img {\n      width: 100%;\n      border-radius: 8px;\n      box-shadow: 0 6px 12px rgba(0, 0, 0, 0.08), 0 2px 4px rgba(0, 0, 0, 0.08); }\n\n@media (max-width: 768px) {\n  .cta hgroup {\n    padding-bottom: 60px; }\n  .signup-form {\n    padding-top: 60px;\n    -ms-flex-direction: column;\n        flex-direction: column;\n    -ms-flex-align: center;\n        align-items: center;\n    padding-bottom: 0; }\n  .signup-form .left-col,\n  .signup-form .right-col {\n    padding-left: 0;\n    padding-right: 0; }\n  .signup-form .left-col {\n    margin-top: -80px; }\n  .signup-form .right-col {\n    margin-top: 50px; }\n  .signup-form .illustration {\n    margin-left: auto;\n    margin-right: auto; } }\n\n.company {\n  margin: 77px auto 68px; }\n  .company h2 {\n    color: #7f8fab;\n    margin: 0 auto;\n    font-size: 28px;\n    max-width: 760px;\n    text-align: center;\n    line-height: 1.4em;\n    letter-spacing: -.04em;\n    font-weight: 600; }\n    .company h2 strong {\n      color: #131924;\n      font-weight: 600; }\n  .company h3 {\n    color: #7f8fab;\n    font-weight: 600;\n    line-height: 1.4em;\n    letter-spacing: -.04em;\n    text-align: center;\n    font-size: 16px; }\n  .company .logos {\n    display: -ms-flexbox;\n    display: flex;\n    -ms-flex-wrap: wrap;\n        flex-wrap: wrap;\n    margin-top: 51px;\n    -ms-flex-pack: space-evenly;\n        justify-content: space-evenly; }\n    .company .logos::before, .company .logos::after {\n      background: url(\"/img/homepage/enterprise-logos.png\") 0 0 no-repeat;\n      background-size: 494px;\n      width: 494px;\n      height: 42px;\n      content: '';\n      max-width: 100%;\n      margin-bottom: 32px;\n      display: inline-block; }\n    .company .logos::after {\n      background-position: 0 bottom; }\n\n.get-started {\n  background: #f1f4f8;\n  overflow: auto; }\n  .get-started .container {\n    -ms-flex-align: center;\n        align-items: center;\n    display: -ms-flexbox;\n    display: flex;\n    margin-bottom: 110px;\n    margin-top: 110px; }\n  .get-started hgroup {\n    letter-spacing: -.025em;\n    -ms-flex-positive: 1;\n        flex-grow: 1; }\n  .get-started h2 {\n    color: #4a8bfc;\n    font-size: 28px;\n    font-weight: 700;\n    letter-spacing: inherit;\n    margin: 0 0 5px; }\n  .get-started p {\n    color: #24282e;\n    font-size: 20px;\n    font-weight: 600;\n    margin: 0; }\n  .get-started .btn {\n    font-size: 16px;\n    font-weight: 700; }\n  @media (max-width: 991px) {\n    .get-started .container {\n      display: block;\n      text-align: center; }\n    .get-started hgroup {\n      padding-bottom: 16px; }\n    .get-started .btn-group {\n      padding-bottom: 96px; } }\n\n/*# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndoaXRlcGFwZXJzLmNzcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxpQkFBaUI7QUFDakI7RUFDRSw2REFBNkQsRUFBRTs7QUFFakU7RUFDRSx1REFBdUQ7RUFDdkQsaUNBQWlDO0VBQ2pDLG1CQUFtQjtFQUNuQixrQkFBa0IsRUFBRTtFQUNwQjtJQUNFLHFCQUFjO0lBQWQsY0FBYztJQUNkLDJCQUF1QjtRQUF2Qix1QkFBdUI7SUFDdkIsdUJBQW9CO1FBQXBCLG9CQUFvQjtJQUNwQixtQkFBbUI7SUFDbkIsa0JBQWtCO0lBQ2xCLHNCQUFzQjtJQUN0QixpQkFBaUIsRUFBRTtJQUNuQjtNQUNFLDBCQUEwQjtNQUMxQixpQkFBaUI7TUFDakIsc0JBQXNCO01BQ3RCLGdCQUFnQjtNQUNoQixlQUFlLEVBQUU7SUFDbkI7TUFDRSxlQUFlO01BQ2YsZ0JBQWdCO01BQ2hCLGlCQUFpQjtNQUNqQix3QkFBd0I7TUFDeEIsb0JBQW9CLEVBQUU7SUFDeEI7TUFDRSxnQkFBZ0I7TUFDaEIsa0JBQWtCO01BQ2xCLGlCQUFpQjtNQUNqQix3QkFBd0I7TUFDeEIsZUFBZTtNQUNmLGlCQUFpQixFQUFFOztBQUV6QjtFQUNFLG1CQUFtQjtFQUNuQixvQkFBb0I7RUFDcEIscUJBQWM7RUFBZCxjQUFjO0VBQ2QsdUJBQStCO01BQS9CLCtCQUErQjtFQUMvQixrQkFBa0I7RUFDbEIsa0JBQWtCO0VBQ2xCLG1CQUFtQixFQUFFO0VBQ3JCOztJQUVFLFlBQVk7SUFDWixpQkFBaUIsRUFBRTtFQUNyQjtJQUNFLG9CQUFvQjtJQUNwQixvRkFBb0Y7SUFDcEYsZ0JBQWdCO0lBQ2hCLG1CQUFtQjtJQUNuQixlQUFlO0lBQ2Ysd0JBQXdCLEVBQUU7SUFDMUI7TUFDRSxlQUFlO01BQ2YsZ0JBQWdCO01BQ2hCLGtCQUFrQixFQUFFO0lBQ3RCO01BQ0UsZ0JBQWdCO01BQ2hCLGVBQWU7TUFDZix3QkFBd0I7TUFDeEIsaUJBQWlCO01BQ2pCLGlCQUFpQixFQUFFO0lBQ3JCO01BQ0Usc0JBQXNCO01BQ3RCLFdBQVc7TUFDWCxvQkFBb0I7TUFDcEIsa0JBQWtCLEVBQUU7SUFDdEI7TUFDRSxtQkFBbUI7TUFDbkIsbUJBQW1CLEVBQUU7TUFDckI7UUFDRSxhQUFhO1FBQ2IsbUJBQW1CO1FBQ25CLGFBQWE7UUFDYixtQkFBbUI7UUFDbkIsUUFBUSxFQUFFO01BQ1o7UUFDRSxpQkFBaUIsRUFBRTtJQUN2QjtNQUNFLGlCQUFpQixFQUFFO0VBQ3ZCO0lBQ0UsbUJBQW1CLEVBQUU7SUFDckI7TUFDRSxjQUFjO01BQ2Qsb0JBQW9CO01BQ3BCLGlCQUFpQjtNQUNqQixnQkFBZ0I7TUFDaEIsa0JBQWtCO01BQ2xCLHdCQUF3QixFQUFFO0VBQzlCO0lBQ0UsbUJBQW1CO0lBQ25CLFlBQVk7SUFDWixpQkFBaUI7SUFDakIsb0JBQW9CLEVBQUU7SUFDdEI7TUFDRSxZQUFZO01BQ1osbUJBQW1CO01BQ25CLDBFQUEwRSxFQUFFOztBQUVsRjtFQUNFO0lBQ0UscUJBQXFCLEVBQUU7RUFDekI7SUFDRSxrQkFBa0I7SUFDbEIsMkJBQXVCO1FBQXZCLHVCQUF1QjtJQUN2Qix1QkFBb0I7UUFBcEIsb0JBQW9CO0lBQ3BCLGtCQUFrQixFQUFFO0VBQ3RCOztJQUVFLGdCQUFnQjtJQUNoQixpQkFBaUIsRUFBRTtFQUNyQjtJQUNFLGtCQUFrQixFQUFFO0VBQ3RCO0lBQ0UsaUJBQWlCLEVBQUU7RUFDckI7SUFDRSxrQkFBa0I7SUFDbEIsbUJBQW1CLEVBQUUsRUFBRTs7QUFFM0I7RUFDRSx1QkFBdUIsRUFBRTtFQUN6QjtJQUNFLGVBQWU7SUFDZixlQUFlO0lBQ2YsZ0JBQWdCO0lBQ2hCLGlCQUFpQjtJQUNqQixtQkFBbUI7SUFDbkIsbUJBQW1CO0lBQ25CLHVCQUF1QjtJQUN2QixpQkFBaUIsRUFBRTtJQUNuQjtNQUNFLGVBQWU7TUFDZixpQkFBaUIsRUFBRTtFQUN2QjtJQUNFLGVBQWU7SUFDZixpQkFBaUI7SUFDakIsbUJBQW1CO0lBQ25CLHVCQUF1QjtJQUN2QixtQkFBbUI7SUFDbkIsZ0JBQWdCLEVBQUU7RUFDcEI7SUFDRSxxQkFBYztJQUFkLGNBQWM7SUFDZCxvQkFBZ0I7UUFBaEIsZ0JBQWdCO0lBQ2hCLGlCQUFpQjtJQUNqQiw0QkFBOEI7UUFBOUIsOEJBQThCLEVBQUU7SUFDaEM7TUFDRSxvRUFBb0U7TUFDcEUsdUJBQXVCO01BQ3ZCLGFBQWE7TUFDYixhQUFhO01BQ2IsWUFBWTtNQUNaLGdCQUFnQjtNQUNoQixvQkFBb0I7TUFDcEIsc0JBQXNCLEVBQUU7SUFDMUI7TUFDRSw4QkFBOEIsRUFBRTs7QUFFdEM7RUFDRSxvQkFBb0I7RUFDcEIsZUFBZSxFQUFFO0VBQ2pCO0lBQ0UsdUJBQW9CO1FBQXBCLG9CQUFvQjtJQUNwQixxQkFBYztJQUFkLGNBQWM7SUFDZCxxQkFBcUI7SUFDckIsa0JBQWtCLEVBQUU7RUFDdEI7SUFDRSx3QkFBd0I7SUFDeEIscUJBQWE7UUFBYixhQUFhLEVBQUU7RUFDakI7SUFDRSxlQUFlO0lBQ2YsZ0JBQWdCO0lBQ2hCLGlCQUFpQjtJQUNqQix3QkFBd0I7SUFDeEIsZ0JBQWdCLEVBQUU7RUFDcEI7SUFDRSxlQUFlO0lBQ2YsZ0JBQWdCO0lBQ2hCLGlCQUFpQjtJQUNqQixVQUFVLEVBQUU7RUFDZDtJQUNFLGdCQUFnQjtJQUNoQixpQkFBaUIsRUFBRTtFQUNyQjtJQUNFO01BQ0UsZUFBZTtNQUNmLG1CQUFtQixFQUFFO0lBQ3ZCO01BQ0UscUJBQXFCLEVBQUU7SUFDekI7TUFDRSxxQkFBcUIsRUFBRSxFQUFFIiwiZmlsZSI6InBhZ2VzL2VudGVycHJpc2UvcmVzb3VyY2VzL3doaXRlcGFwZXJzLmNzcyIsInNvdXJjZXNDb250ZW50IjpbIkBjaGFyc2V0IFwiVVRGLThcIjtcbmJvZHkge1xuICBmb250LWZhbWlseTogXCJFaW5hXCIsIFwiSGVsdmV0aWNhIE5ldWVcIiwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmOyB9XG5cbi5jdGEge1xuICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQodG8gYm90dG9tLCB3aGl0ZSwgI2Y2ZjhmYyk7XG4gIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjZTVlN2ViO1xuICBtYXJnaW4tdG9wOiAtMTM4cHg7XG4gIHBhZGRpbmctdG9wOiA3OHB4OyB9XG4gIC5jdGEgaGdyb3VwIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgcGFkZGluZy10b3A6IDIwcHg7XG4gICAgcGFkZGluZy1ib3R0b206IDExNHB4O1xuICAgIG1heC13aWR0aDogODQwcHg7IH1cbiAgICAuY3RhIGhncm91cCBoNSB7XG4gICAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xuICAgICAgZm9udC13ZWlnaHQ6IDcwMDtcbiAgICAgIGxldHRlci1zcGFjaW5nOiAwLjFlbTtcbiAgICAgIGZvbnQtc2l6ZTogMTJweDtcbiAgICAgIGNvbG9yOiAjOGU5YWFiOyB9XG4gICAgLmN0YSBoZ3JvdXAgaDEge1xuICAgICAgY29sb3I6ICMyNDI4MmU7XG4gICAgICBmb250LXNpemU6IDQwcHg7XG4gICAgICBmb250LXdlaWdodDogNzAwO1xuICAgICAgbGV0dGVyLXNwYWNpbmc6IC0wLjAzZW07XG4gICAgICBtYXJnaW46IDEycHggMCAyNHB4OyB9XG4gICAgLmN0YSBoZ3JvdXAgcCB7XG4gICAgICBmb250LXNpemU6IDE4cHg7XG4gICAgICBsaW5lLWhlaWdodDogMzJweDtcbiAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7XG4gICAgICBsZXR0ZXItc3BhY2luZzogLTAuMDJlbTtcbiAgICAgIGNvbG9yOiAjNjI2YzdkO1xuICAgICAgbWF4LXdpZHRoOiA4MDBweDsgfVxuXG4uc2lnbnVwLWZvcm0ge1xuICBwYWRkaW5nLXRvcDogMTEwcHg7XG4gIHBhZGRpbmctYm90dG9tOiAwcHg7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcbiAgbWF4LXdpZHRoOiAxMDAwcHg7XG4gIG1hcmdpbi1sZWZ0OiBhdXRvO1xuICBtYXJnaW4tcmlnaHQ6IGF1dG87IH1cbiAgLnNpZ251cC1mb3JtIC5sZWZ0LWNvbCxcbiAgLnNpZ251cC1mb3JtIC5yaWdodC1jb2wge1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIG1heC13aWR0aDogNDcycHg7IH1cbiAgLnNpZ251cC1mb3JtIC5sZWZ0LWNvbCB7XG4gICAgcGFkZGluZy1yaWdodDogMzBweDtcbiAgICBmb250LWZhbWlseTogYXBwbGUtc3lzdGVtLCBCbGlua01hY1N5c3RlbUZvbnQsIFJvYm90bywgSGVsdmV0aWNhLCBBcmlhbCwgc2Fucy1zZXJpZjtcbiAgICBmb250LXNpemU6IDE0cHg7XG4gICAgbGluZS1oZWlnaHQ6IDEuNmVtO1xuICAgIGNvbG9yOiAjNGU1NDVlO1xuICAgIGxldHRlci1zcGFjaW5nOiAtMC4wMmVtOyB9XG4gICAgLnNpZ251cC1mb3JtIC5sZWZ0LWNvbCAuaWxsdXN0cmF0aW9uICsgcCB7XG4gICAgICBjb2xvcjogIzZlN2Y5OTtcbiAgICAgIGZvbnQtc2l6ZTogMThweDtcbiAgICAgIGxpbmUtaGVpZ2h0OiAyOHB4OyB9XG4gICAgLnNpZ251cC1mb3JtIC5sZWZ0LWNvbCBoNSB7XG4gICAgICBmb250LXNpemU6IDE0cHg7XG4gICAgICBjb2xvcjogIzRlNTQ1ZTtcbiAgICAgIGxldHRlci1zcGFjaW5nOiAtMC4wMmVtO1xuICAgICAgZm9udC13ZWlnaHQ6IDQwMDtcbiAgICAgIG1hcmdpbi10b3A6IDEzcHg7IH1cbiAgICAuc2lnbnVwLWZvcm0gLmxlZnQtY29sIHVsIHtcbiAgICAgIGxpc3Qtc3R5bGUtdHlwZTogbm9uZTtcbiAgICAgIHBhZGRpbmc6IDA7XG4gICAgICBtYXJnaW46IDE2cHggMCAzMnB4O1xuICAgICAgbGluZS1oZWlnaHQ6IDIwcHg7IH1cbiAgICAuc2lnbnVwLWZvcm0gLmxlZnQtY29sIGxpIHtcbiAgICAgIHBhZGRpbmctbGVmdDogMjBweDtcbiAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsgfVxuICAgICAgLnNpZ251cC1mb3JtIC5sZWZ0LWNvbCBsaTpiZWZvcmUge1xuICAgICAgICBjb250ZW50OiAn4oCiJztcbiAgICAgICAgbWFyZ2luLXJpZ2h0OiAxMHB4O1xuICAgICAgICBvcGFjaXR5OiAwLjg7XG4gICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgbGVmdDogMDsgfVxuICAgICAgLnNpZ251cC1mb3JtIC5sZWZ0LWNvbCBsaSArIGxpIHtcbiAgICAgICAgbWFyZ2luLXRvcDogMTJweDsgfVxuICAgIC5zaWdudXAtZm9ybSAubGVmdC1jb2wgLnAtYm9sZCB7XG4gICAgICBmb250LXdlaWdodDogNjAwOyB9XG4gIC5zaWdudXAtZm9ybSAucmlnaHQtY29sIHtcbiAgICBwYWRkaW5nLWxlZnQ6IDMwcHg7IH1cbiAgICAuc2lnbnVwLWZvcm0gLnJpZ2h0LWNvbCBoMyB7XG4gICAgICBtYXJnaW4tdG9wOiAwO1xuICAgICAgbWFyZ2luLWJvdHRvbTogMzBweDtcbiAgICAgIGZvbnQtd2VpZ2h0OiA3MDA7XG4gICAgICBmb250LXNpemU6IDI4cHg7XG4gICAgICBsaW5lLWhlaWdodDogMzZweDtcbiAgICAgIGxldHRlci1zcGFjaW5nOiAtMC4wM2VtOyB9XG4gIC5zaWdudXAtZm9ybSAuaWxsdXN0cmF0aW9uIHtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgbWF4LXdpZHRoOiA0MzBweDtcbiAgICBtYXJnaW4tYm90dG9tOiAzMHB4OyB9XG4gICAgLnNpZ251cC1mb3JtIC5pbGx1c3RyYXRpb24gaW1nIHtcbiAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgYm9yZGVyLXJhZGl1czogOHB4O1xuICAgICAgYm94LXNoYWRvdzogMCA2cHggMTJweCByZ2JhKDAsIDAsIDAsIDAuMDgpLCAwIDJweCA0cHggcmdiYSgwLCAwLCAwLCAwLjA4KTsgfVxuXG5AbWVkaWEgKG1heC13aWR0aDogNzY4cHgpIHtcbiAgLmN0YSBoZ3JvdXAge1xuICAgIHBhZGRpbmctYm90dG9tOiA2MHB4OyB9XG4gIC5zaWdudXAtZm9ybSB7XG4gICAgcGFkZGluZy10b3A6IDYwcHg7XG4gICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgIHBhZGRpbmctYm90dG9tOiAwOyB9XG4gIC5zaWdudXAtZm9ybSAubGVmdC1jb2wsXG4gIC5zaWdudXAtZm9ybSAucmlnaHQtY29sIHtcbiAgICBwYWRkaW5nLWxlZnQ6IDA7XG4gICAgcGFkZGluZy1yaWdodDogMDsgfVxuICAuc2lnbnVwLWZvcm0gLmxlZnQtY29sIHtcbiAgICBtYXJnaW4tdG9wOiAtODBweDsgfVxuICAuc2lnbnVwLWZvcm0gLnJpZ2h0LWNvbCB7XG4gICAgbWFyZ2luLXRvcDogNTBweDsgfVxuICAuc2lnbnVwLWZvcm0gLmlsbHVzdHJhdGlvbiB7XG4gICAgbWFyZ2luLWxlZnQ6IGF1dG87XG4gICAgbWFyZ2luLXJpZ2h0OiBhdXRvOyB9IH1cblxuLmNvbXBhbnkge1xuICBtYXJnaW46IDc3cHggYXV0byA2OHB4OyB9XG4gIC5jb21wYW55IGgyIHtcbiAgICBjb2xvcjogIzdmOGZhYjtcbiAgICBtYXJnaW46IDAgYXV0bztcbiAgICBmb250LXNpemU6IDI4cHg7XG4gICAgbWF4LXdpZHRoOiA3NjBweDtcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgbGluZS1oZWlnaHQ6IDEuNGVtO1xuICAgIGxldHRlci1zcGFjaW5nOiAtLjA0ZW07XG4gICAgZm9udC13ZWlnaHQ6IDYwMDsgfVxuICAgIC5jb21wYW55IGgyIHN0cm9uZyB7XG4gICAgICBjb2xvcjogIzEzMTkyNDtcbiAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7IH1cbiAgLmNvbXBhbnkgaDMge1xuICAgIGNvbG9yOiAjN2Y4ZmFiO1xuICAgIGZvbnQtd2VpZ2h0OiA2MDA7XG4gICAgbGluZS1oZWlnaHQ6IDEuNGVtO1xuICAgIGxldHRlci1zcGFjaW5nOiAtLjA0ZW07XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgIGZvbnQtc2l6ZTogMTZweDsgfVxuICAuY29tcGFueSAubG9nb3Mge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgZmxleC13cmFwOiB3cmFwO1xuICAgIG1hcmdpbi10b3A6IDUxcHg7XG4gICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1ldmVubHk7IH1cbiAgICAuY29tcGFueSAubG9nb3M6OmJlZm9yZSwgLmNvbXBhbnkgLmxvZ29zOjphZnRlciB7XG4gICAgICBiYWNrZ3JvdW5kOiB1cmwoXCIvaW1nL2hvbWVwYWdlL2VudGVycHJpc2UtbG9nb3MucG5nXCIpIDAgMCBuby1yZXBlYXQ7XG4gICAgICBiYWNrZ3JvdW5kLXNpemU6IDQ5NHB4O1xuICAgICAgd2lkdGg6IDQ5NHB4O1xuICAgICAgaGVpZ2h0OiA0MnB4O1xuICAgICAgY29udGVudDogJyc7XG4gICAgICBtYXgtd2lkdGg6IDEwMCU7XG4gICAgICBtYXJnaW4tYm90dG9tOiAzMnB4O1xuICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOyB9XG4gICAgLmNvbXBhbnkgLmxvZ29zOjphZnRlciB7XG4gICAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwIGJvdHRvbTsgfVxuXG4uZ2V0LXN0YXJ0ZWQge1xuICBiYWNrZ3JvdW5kOiAjZjFmNGY4O1xuICBvdmVyZmxvdzogYXV0bzsgfVxuICAuZ2V0LXN0YXJ0ZWQgLmNvbnRhaW5lciB7XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIG1hcmdpbi1ib3R0b206IDExMHB4O1xuICAgIG1hcmdpbi10b3A6IDExMHB4OyB9XG4gIC5nZXQtc3RhcnRlZCBoZ3JvdXAge1xuICAgIGxldHRlci1zcGFjaW5nOiAtLjAyNWVtO1xuICAgIGZsZXgtZ3JvdzogMTsgfVxuICAuZ2V0LXN0YXJ0ZWQgaDIge1xuICAgIGNvbG9yOiAjNGE4YmZjO1xuICAgIGZvbnQtc2l6ZTogMjhweDtcbiAgICBmb250LXdlaWdodDogNzAwO1xuICAgIGxldHRlci1zcGFjaW5nOiBpbmhlcml0O1xuICAgIG1hcmdpbjogMCAwIDVweDsgfVxuICAuZ2V0LXN0YXJ0ZWQgcCB7XG4gICAgY29sb3I6ICMyNDI4MmU7XG4gICAgZm9udC1zaXplOiAyMHB4O1xuICAgIGZvbnQtd2VpZ2h0OiA2MDA7XG4gICAgbWFyZ2luOiAwOyB9XG4gIC5nZXQtc3RhcnRlZCAuYnRuIHtcbiAgICBmb250LXNpemU6IDE2cHg7XG4gICAgZm9udC13ZWlnaHQ6IDcwMDsgfVxuICBAbWVkaWEgKG1heC13aWR0aDogOTkxcHgpIHtcbiAgICAuZ2V0LXN0YXJ0ZWQgLmNvbnRhaW5lciB7XG4gICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsgfVxuICAgIC5nZXQtc3RhcnRlZCBoZ3JvdXAge1xuICAgICAgcGFkZGluZy1ib3R0b206IDE2cHg7IH1cbiAgICAuZ2V0LXN0YXJ0ZWQgLmJ0bi1ncm91cCB7XG4gICAgICBwYWRkaW5nLWJvdHRvbTogOTZweDsgfSB9XG4iXX0= */\n"
  },
  {
    "path": "content/css/pages/enterprise/solutions/cross-platform.css",
    "content": ".ee-hero {\n  max-width: 640px;\n  padding-top: 130px;\n  padding-bottom: 160px; }\n  .ee-hero::before, .ee-hero::after {\n    display: none; }\n  .ee-hero h1 {\n    font-size: 52px;\n    line-height: 62px;\n    max-width: 930px;\n    letter-spacing: -0.03em;\n    color: #020814;\n    margin-top: 0;\n    margin-bottom: 16px; }\n  .ee-hero h4 {\n    font-family: \"Roboto Mono\", Menlo, Monaco, Consolas, \"Courier New\", monospace;\n    font-weight: bold;\n    font-size: 13px;\n    line-height: 26px;\n    letter-spacing: 0.14em;\n    text-transform: uppercase;\n    color: #92A1B3;\n    margin-bottom: 29px; }\n  .ee-hero p {\n    font-family: \"Eina\", \"Helvetica Neue\", Helvetica, sans-serif;\n    font-size: 24px;\n    font-weight: 400;\n    line-height: 36px;\n    letter-spacing: -0.04em;\n    color: rgba(39, 50, 63, 0.8); }\n  .ee-hero .btn {\n    padding-left: 24px;\n    padding-right: 20px;\n    padding-top: 18px;\n    padding-bottom: 18px;\n    font-size: 14px;\n    margin-top: 16px;\n    line-height: 20px;\n    letter-spacing: 0.08em;\n    color: white;\n    text-transform: uppercase;\n    font-weight: 700;\n    background: #3880FF;\n    box-shadow: 0px 2px 4px rgba(2, 8, 20, 0.1), 0px 1px 2px rgba(2, 8, 20, 0.08);\n    border-radius: 210px;\n    display: -ms-flexbox;\n    display: flex;\n    -ms-flex-align: center;\n        align-items: center; }\n    .ee-hero .btn::after {\n      background-image: url('data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"white\" viewBox=\"0 0 512 512\"><path d=\"M85 277.375h259.704L225.002 397.077 256 427l171-171L256 85l-29.922 29.924 118.626 119.701H85v42.75z\"/></svg>');\n      background-size: 100%;\n      content: '';\n      height: 20px;\n      width: 20px;\n      display: block;\n      margin-left: 8px;\n      -webkit-transform: translateY(-1px);\n              transform: translateY(-1px); }\n    .ee-hero .btn:hover {\n      background-color: #4f8bf5; }\n  .ee-hero--large h1 {\n    font-size: 62px;\n    line-height: 69px; }\n  .ee-hero--wide {\n    max-width: 960px; }\n  .ee-hero--centered {\n    display: -ms-flexbox;\n    display: flex;\n    -ms-flex-direction: column;\n        flex-direction: column;\n    -ms-flex-pack: center;\n        justify-content: center;\n    -ms-flex-align: center;\n        align-items: center;\n    text-align: center;\n    margin-left: auto;\n    margin-right: auto; }\n  @media (max-width: 767px) {\n    .ee-hero {\n      padding-top: 70px;\n      padding-bottom: 0; }\n      .ee-hero h1 {\n        font-size: 44px;\n        line-height: 52px; }\n      .ee-hero--large h1 {\n        font-size: 50px;\n        line-height: 60px; } }\n  @media (max-width: 480px) {\n    .ee-hero h1 {\n      font-size: 36px;\n      line-height: 44px;\n      margin-bottom: 6px; }\n    .ee-hero--large h1 {\n      font-size: 42px;\n      line-height: 52px; }\n    .ee-hero .btn {\n      margin-top: 8px; } }\n\n.ee-main {\n  margin-top: 0; }\n  .ee-main section {\n    margin-bottom: 200px; }\n  .ee-main .left,\n  .ee-main .right,\n  .ee-main .center {\n    display: -ms-flexbox;\n    display: flex; }\n    .ee-main .left::before, .ee-main .left::after,\n    .ee-main .right::before,\n    .ee-main .right::after,\n    .ee-main .center::before,\n    .ee-main .center::after {\n      display: none; }\n  .ee-main .left .content,\n  .ee-main .right .content {\n    max-width: 480px; }\n    @media (max-width: 767px) {\n      .ee-main .left .content,\n      .ee-main .right .content {\n        max-width: 100%;\n        text-align: center; }\n        .ee-main .left .content li,\n        .ee-main .right .content li {\n          text-align: left; } }\n  .ee-main .left {\n    -ms-flex-direction: row;\n        flex-direction: row; }\n    .ee-main .left .graphics {\n      margin-left: auto; }\n  .ee-main .right {\n    -ms-flex-direction: row-reverse;\n        flex-direction: row-reverse;\n    margin-left: auto; }\n    .ee-main .right .graphics {\n      margin-right: auto; }\n  .ee-main .center {\n    -ms-flex-direction: column;\n        flex-direction: column;\n    -ms-flex-align: center;\n        align-items: center;\n    text-align: center; }\n    .ee-main .center .content {\n      width: 894px;\n      max-width: 100%; }\n  .ee-main .full .content {\n    max-width: 568px; }\n  @media (max-width: 767px) {\n    .ee-main .right,\n    .ee-main .left {\n      -ms-flex-direction: column-reverse;\n          flex-direction: column-reverse;\n      -ms-flex-align: center;\n          align-items: center; }\n      .ee-main .right .graphics,\n      .ee-main .left .graphics {\n        margin-bottom: 24px;\n        margin-left: 0;\n        margin-right: 0; }\n    .ee-main section {\n      margin-bottom: 100px; } }\n  .ee-main .graphics {\n    -ms-flex-pack: end;\n        justify-content: flex-end; }\n    .ee-main .graphics img {\n      width: 100%; }\n  .ee-main h2 {\n    font-size: 44px;\n    line-height: 51px;\n    letter-spacing: -0.03em; }\n    .ee-main h2:first-child {\n      margin-top: 0; }\n  .ee-main .ee-section__title {\n    font-family: \"Roboto Mono\", Menlo, Monaco, Consolas, \"Courier New\", monospace;\n    font-style: normal;\n    font-weight: bold;\n    font-size: 12px;\n    line-height: 23px;\n    letter-spacing: 0.14em;\n    text-transform: uppercase;\n    color: #5B708B;\n    margin-top: 0; }\n  .ee-main .ee-section__cta {\n    display: inline-block;\n    font-size: 18px;\n    font-weight: 500;\n    margin-top: 16px; }\n  .ee-main p {\n    font-size: 20px;\n    line-height: 31px;\n    letter-spacing: -0.02em;\n    color: #5B708B;\n    margin-top: 18px; }\n    .ee-main p.sm {\n      font-size: 16px;\n      line-height: 29px;\n      letter-spacing: -0.01em; }\n  .ee-main ul:not(.frameworks) {\n    margin-top: 54px; }\n  .ee-main .content ul {\n    padding-left: 0; }\n  .ee-main .content li {\n    font-size: 16px;\n    line-height: 23px;\n    letter-spacing: -0.02em;\n    color: #1A232F;\n    margin-bottom: 40px;\n    padding-left: 30px;\n    list-style: none;\n    position: relative; }\n    .ee-main .content li::before {\n      background-image: url(\"/img/enterprise/check.svg\");\n      background-size: 100%;\n      content: '';\n      height: 10px;\n      width: 13px;\n      position: absolute;\n      left: 0;\n      top: 8px; }\n  .ee-main .features {\n    display: -ms-grid;\n    display: grid;\n    -ms-grid-columns: 1fr 1fr 1fr;\n        grid-template-columns: 1fr 1fr 1fr;\n    grid-column-gap: 64px;\n    grid-row-gap: 24px;\n    padding: 0; }\n    .ee-main .features li {\n      list-style: none; }\n    .ee-main .features .icon {\n      margin-bottom: 16px;\n      width: 48px; }\n    @media (max-width: 991px) {\n      .ee-main .features {\n        -ms-grid-columns: 1fr 1fr;\n            grid-template-columns: 1fr 1fr; } }\n    @media (max-width: 500px) {\n      .ee-main .features {\n        -ms-grid-columns: 1fr;\n            grid-template-columns: 1fr; } }\n  .ee-main .cta-card {\n    background: #4a8bfc;\n    border-radius: 12px;\n    padding: 72px 72px 60px;\n    background-size: cover;\n    color: white; }\n    .ee-main .cta-card .ee-section__title,\n    .ee-main .cta-card p {\n      color: #CED6E0; }\n\n#how-to {\n  margin-bottom: 0;\n  position: relative;\n  padding-top: 140px; }\n  #how-to::before {\n    position: absolute;\n    top: 0;\n    width: 100vw;\n    border-top: 1px solid rgba(146, 161, 179, 0.3);\n    content: '';\n    display: block; }\n\n.cards--red-v-blue {\n  display: -ms-flexbox;\n  display: flex;\n  text-align: left;\n  -ms-flex-pack: center;\n      justify-content: center;\n  margin-top: 38px; }\n  .cards--red-v-blue__card {\n    background: #7CABFF;\n    border-radius: 8px;\n    padding: 40px 40px 34px;\n    display: -ms-flexbox;\n    display: flex;\n    -ms-flex-direction: column;\n        flex-direction: column;\n    -ms-flex-align: start;\n        align-items: flex-start;\n    margin-right: 24px;\n    -ms-flex: 0 1 460px;\n        flex: 0 1 460px;\n    border-radius: 8px; }\n    .cards--red-v-blue__card:last-child {\n      margin-right: 0; }\n    .cards--red-v-blue__card:nth-child(2) {\n      background: #F88D8D; }\n      .cards--red-v-blue__card:nth-child(2) .btn {\n        background: rgba(244, 84, 84, 0.5); }\n  .cards--red-v-blue h3 {\n    font-size: 24px;\n    line-height: normal;\n    letter-spacing: -0.02em;\n    color: white;\n    margin-top: 0; }\n  .cards--red-v-blue p {\n    font-size: 18px;\n    line-height: 26px;\n    letter-spacing: -0.02em;\n    color: rgba(255, 255, 255, 0.7);\n    margin-top: 0;\n    margin-bottom: 22px; }\n  .cards--red-v-blue .btn {\n    margin-top: auto;\n    font-size: 14px;\n    line-height: 22px;\n    letter-spacing: 0.09em;\n    text-transform: uppercase;\n    padding: 10px 14px;\n    font-weight: 600;\n    border-radius: 8px;\n    background: rgba(56, 128, 255, 0.5); }\n    .cards--red-v-blue .btn ion-icon {\n      display: inline-block;\n      height: 14px;\n      width: 14px;\n      vertical-align: -2px; }\n  @media (max-width: 767px) {\n    .cards--red-v-blue {\n      -ms-flex-direction: column;\n          flex-direction: column;\n      -ms-flex-align: center;\n          align-items: center; }\n      .cards--red-v-blue__card {\n        -ms-flex: auto;\n            flex: auto;\n        margin-right: 0;\n        margin-top: 20px;\n        max-width: 460px; } }\n\naside {\n  background: linear-gradient(180deg, #F9FAFB 0%, #FFFFFF 100%);\n  margin-top: -60px;\n  padding-top: 200px;\n  padding-bottom: 120px; }\n  aside p {\n    color: #414D5C; }\n  aside .content {\n    max-width: 432px;\n    margin: 0 auto;\n    text-align: center;\n    display: block; }\n\n.ee-get-started {\n  max-width: 700px; }\n  .ee-get-started h3 {\n    color: #414D5C; }\n\n.resources {\n  padding-bottom: 120px; }\n  @media (max-width: 768px) {\n    .resources {\n      padding-bottom: 60px; } }\n  .resources .cards {\n    list-style-type: none;\n    margin: 0;\n    padding: 0;\n    display: -ms-flexbox;\n    display: flex;\n    margin-left: -24px;\n    margin-right: -24px; }\n  .resources hgroup {\n    display: -ms-flexbox;\n    display: flex;\n    -ms-flex-pack: justify;\n        justify-content: space-between;\n    -ms-flex-align: baseline;\n        align-items: baseline; }\n    .resources hgroup h3 {\n      font-weight: 600;\n      line-height: normal;\n      font-size: 28px;\n      letter-spacing: -0.02em;\n      color: #1A232F;\n      margin-bottom: 0; }\n    .resources hgroup h4 {\n      font-weight: 600;\n      font-size: 24px;\n      line-height: normal;\n      letter-spacing: -0.02em;\n      color: #1A232F; }\n    .resources hgroup h5 {\n      font-weight: 700;\n      line-height: 1;\n      font-size: 14px;\n      letter-spacing: 0.08em;\n      color: #3880FF;\n      text-transform: uppercase; }\n    .resources hgroup ion-icon {\n      -webkit-transform: translateY(2px);\n              transform: translateY(2px); }\n  .resources .cards li {\n    display: block;\n    -ms-flex: 0 0 33.33%;\n        flex: 0 0 33.33%;\n    padding: 24px; }\n    .resources .cards li a {\n      display: block;\n      width: 100%; }\n    .resources .cards li .img-wrapper {\n      overflow: hidden;\n      border-radius: 6px; }\n    .resources .cards li img {\n      width: 100%; }\n    .resources .cards li h6 {\n      line-height: 23px;\n      font-size: 12px;\n      letter-spacing: 0.12em;\n      text-transform: uppercase;\n      color: #B2BECD;\n      margin-bottom: 0;\n      margin-top: 16px; }\n    .resources .cards li h4 {\n      font-size: 20px;\n      margin-top: 10px;\n      color: #1A232F;\n      font-weight: 600; }\n    .resources .cards li p {\n      color: #5B708B;\n      line-height: 22px;\n      font-size: 14px;\n      letter-spacing: -0.02em; }\n  @media (max-width: 992px) {\n    .resources .cards {\n      margin-left: -12px;\n      margin-right: -12px; }\n    .resources .cards li {\n      padding: 12px; } }\n  @media (max-width: 768px) {\n    .resources .cards {\n      -ms-flex-wrap: wrap;\n          flex-wrap: wrap; }\n    .resources .cards li {\n      -ms-flex: 0 0 50%;\n          flex: 0 0 50%; } }\n  @media (max-width: 480px) {\n    .resources .cards li {\n      -ms-flex: 0 0 100%;\n          flex: 0 0 100%; }\n    .resources h5 {\n      display: none; } }\n\n.ee-main .features li p,\n.ee-main .cards li p,\n.resources .features li p,\n.resources .cards li p {\n  font-size: 16px;\n  line-height: 29px;\n  letter-spacing: -0.01em;\n  color: #73849A;\n  margin-top: 0; }\n\n.ee-main .features li h4,\n.ee-main .cards li h4,\n.resources .features li h4,\n.resources .cards li h4 {\n  font-size: 20px;\n  line-height: normal;\n  letter-spacing: -0.02em;\n  color: #020814;\n  font-weight: 600; }\n\n.resources .cards {\n  margin-top: 0 !important;\n  text-align: left;\n  -ms-flex-wrap: wrap;\n      flex-wrap: wrap; }\n  .resources .cards .img-wrapper {\n    border-radius: 6px; }\n    .resources .cards .img-wrapper + h4 {\n      margin-top: 24px; }\n  @media (min-width: 1220px) {\n    .resources .cards {\n      margin-left: -40px;\n      margin-right: -40px; }\n      .resources .cards li {\n        padding: 40px; } }\n\n.resources .resources__customer-logos {\n  display: -ms-flexbox;\n  display: flex;\n  margin: 26px auto 0;\n  padding: 0;\n  -ms-flex-pack: justify;\n      justify-content: space-between;\n  max-width: 780px;\n  width: 100%; }\n  .resources .resources__customer-logos li {\n    background: url(\"/img/enterprise/customer-logos.png\");\n    background-size: 428px 46px;\n    background-repeat: no-repeat;\n    display: block;\n    height: 46px; }\n  @media (max-width: 768px) {\n    .resources .resources__customer-logos {\n      -ms-flex-pack: center;\n          justify-content: center;\n      -ms-flex-wrap: wrap;\n          flex-wrap: wrap;\n      max-width: 460px; }\n      .resources .resources__customer-logos li {\n        margin: 20px; } }\n  .resources .resources__customer-logos .mastercard {\n    width: 58px; }\n  .resources .resources__customer-logos .nationwide {\n    background-position: -58px 0;\n    width: 33px; }\n  .resources .resources__customer-logos .uniqlo {\n    background-position: -91px 0;\n    width: 65px; }\n  .resources .resources__customer-logos .ibm {\n    background-position: -156px 0;\n    width: 64px; }\n  .resources .resources__customer-logos .ing {\n    background-position: -222px 0;\n    width: 103px; }\n  .resources .resources__customer-logos .sap {\n    background-position: -326px 0;\n    width: 56px; }\n  .resources .resources__customer-logos .nasa {\n    background-position: -380px 0;\n    width: 50px; }\n\n.banner {\n  background: #fff;\n  text-align: left; }\n  .banner .container {\n    position: relative; }\n  .banner .ee-hero {\n    max-width: 480px; }\n  .banner .ee-hero h4,\n  .banner .ee-hero h1,\n  .banner .ee-hero p {\n    position: relative;\n    z-index: 2; }\n\n@media (max-width: 767px) {\n  .ee-hero {\n    padding-bottom: 80px; } }\n\n.solution-hero h4,\n.solution-hero h2,\n.solution-hero p,\n.solution-hero a {\n  position: relative;\n  z-index: 2; }\n\n.solution-hero::after {\n  background-size: cover;\n  position: absolute;\n  z-index: 1;\n  content: '';\n  display: block; }\n\n.solution-hero--cross-platform::after {\n  background: url(\"/img/solutions/bg-cross-platform-header.svg\");\n  width: 850px;\n  height: 431px;\n  right: calc(50% - 796px);\n  top: 138px; }\n\n.solution-hero--design-system::after {\n  background: url(\"/img/solutions/design-systems-banner.svg\");\n  width: 755px;\n  height: 593px;\n  right: -72px;\n  top: 74px; }\n\n.solution-hero--pwa::after {\n  background: url(\"/img/enterprise/pwa.png\");\n  width: 513px;\n  height: 520px;\n  background-size: 513px 520px;\n  right: 50px;\n  top: 74px; }\n\n.right .solution-hero--design-system::after {\n  right: auto;\n  left: -72px; }\n\n#sticky-bar {\n  box-shadow: 0px 1px 0px #E9EDF3, 0px -1px 0px #E9EDF3;\n  background: white;\n  position: -webkit-sticky;\n  position: sticky;\n  top: 0;\n  z-index: 1; }\n  #sticky-bar ul {\n    display: -ms-flexbox;\n    display: flex;\n    -ms-flex-pack: justify;\n        justify-content: space-between;\n    padding-top: 17px;\n    padding-bottom: 17px;\n    padding-left: 15px;\n    -ms-flex-wrap: wrap;\n        flex-wrap: wrap; }\n    @media (max-width: 991px) {\n      #sticky-bar ul {\n        -ms-flex-pack: distribute;\n            justify-content: space-around; } }\n    #sticky-bar ul::before, #sticky-bar ul::after {\n      display: none; }\n  #sticky-bar li {\n    list-style: none; }\n    #sticky-bar li.active a:not(.btn) {\n      color: #4a8bfc; }\n  #sticky-bar a {\n    padding: 10px 0;\n    font-size: 14px;\n    line-height: 22px;\n    text-align: center;\n    letter-spacing: 0.08em;\n    text-transform: uppercase;\n    display: block; }\n    #sticky-bar a:hover, #sticky-bar a:active, #sticky-bar a:focus {\n      background: transparent;\n      text-decoration: none; }\n    #sticky-bar a.btn {\n      padding: 11px 14px 8px;\n      margin-right: 3px;\n      border-radius: 10px;\n      color: white;\n      font-weight: 600; }\n      #sticky-bar a.btn:hover, #sticky-bar a.btn:active, #sticky-bar a.btn:focus {\n        color: white;\n        background: #317bfc; }\n  #sticky-bar .anchor {\n    color: #92A1B3;\n    font-weight: 500; }\n    #sticky-bar .anchor.active, #sticky-bar .anchor:hover {\n      color: #4D8DFF; }\n\nmain {\n  letter-spacing: -0.028em;\n  color: #2F3A48; }\n  main h2 {\n    font-size: 40px;\n    line-height: 50px;\n    letter-spacing: -0.03em;\n    color: #020814;\n    margin-bottom: 15px; }\n  main h3 {\n    color: #414D5C;\n    font-weight: 600;\n    margin-bottom: 4px; }\n    main h3 + h2 {\n      margin-top: 0; }\n  main p {\n    font-size: 20px;\n    line-height: 31px;\n    margin-bottom: 40px; }\n  main ul {\n    padding-left: 0; }\n  main li {\n    font-size: 16px;\n    line-height: 23px;\n    color: #1A232F;\n    margin-bottom: 32px;\n    position: relative;\n    list-style: none;\n    padding-left: 30px;\n    letter-spacing: -.016em; }\n    main li::before {\n      content: url('data:image/svg+xml,\\a         <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\">\\a           <path d=\"M186.301 339.893L96 249.461l-32 30.507L186.301 402 448 140.506 416 110z\"/>\\a         </svg>');\n      position: absolute;\n      left: 0;\n      top: 1px;\n      height: 15px;\n      width: 15px;\n      fill: #1A232F;\n      display: block; }\n  main section {\n    display: -ms-flexbox;\n    display: flex;\n    position: relative; }\n    main section.container::before, main section.container::after {\n      display: none; }\n    main section.right {\n      -ms-flex-direction: row-reverse;\n          flex-direction: row-reverse; }\n    main section.center {\n      -ms-flex-pack: center;\n          justify-content: center;\n      -ms-flex-direction: column;\n          flex-direction: column;\n      -ms-flex-align: center;\n          align-items: center; }\n      main section.center .content {\n        max-width: 798px;\n        text-align: center; }\n        main section.center .content ul {\n          display: -ms-flexbox;\n          display: flex;\n          -ms-flex-wrap: wrap;\n              flex-wrap: wrap;\n          -ms-flex-pack: justify;\n              justify-content: space-between; }\n          @media (max-width: 991px) {\n            main section.center .content ul {\n              -ms-flex-pack: start;\n                  justify-content: flex-start; } }\n        main section.center .content li {\n          max-width: 376px;\n          width: 100%; }\n  main .content {\n    max-width: 482px;\n    margin: 232px 0 184px; }\n    @media (max-width: 991px) {\n      main .content {\n        max-width: 100%;\n        margin: 60px auto; } }\n  main aside {\n    background: #F6F8FB;\n    padding-top: 114px;\n    padding-bottom: 120px; }\n    main aside p {\n      color: #414D5C; }\n    main aside .content {\n      max-width: 432px;\n      margin: 0 auto;\n      text-align: center;\n      display: block; }\n  main .get-started {\n    max-width: 700px; }\n  main .cards {\n    display: -ms-flexbox;\n    display: flex;\n    text-align: left;\n    -ms-flex-pack: center;\n        justify-content: center;\n    margin-top: 38px; }\n    main .cards .card {\n      background: #7CABFF;\n      border-radius: 8px;\n      padding: 40px 40px 34px;\n      display: -ms-flexbox;\n      display: flex;\n      -ms-flex-direction: column;\n          flex-direction: column;\n      -ms-flex-align: start;\n          align-items: flex-start;\n      margin-right: 24px;\n      -ms-flex: 0 1 460px;\n          flex: 0 1 460px;\n      border-radius: 8px; }\n      main .cards .card:last-child {\n        margin-right: 0; }\n      main .cards .card:nth-child(2) {\n        background: #F88D8D; }\n        main .cards .card:nth-child(2) .btn {\n          background: rgba(244, 84, 84, 0.5); }\n    main .cards h3 {\n      font-size: 24px;\n      line-height: normal;\n      letter-spacing: -0.02em;\n      color: white;\n      margin-top: 0; }\n    main .cards p {\n      font-size: 18px;\n      line-height: 26px;\n      letter-spacing: -0.02em;\n      color: rgba(255, 255, 255, 0.7); }\n    main .cards .btn {\n      margin-top: auto;\n      font-size: 14px;\n      line-height: 22px;\n      letter-spacing: 0.09em;\n      text-transform: uppercase;\n      padding: 10px 14px;\n      font-weight: 600;\n      border-radius: 8px;\n      background: rgba(56, 128, 255, 0.5); }\n      main .cards .btn ion-icon {\n        display: inline-block;\n        height: 14px;\n        width: 14px;\n        vertical-align: -2px; }\n    @media (max-width: 767px) {\n      main .cards {\n        -ms-flex-direction: column;\n            flex-direction: column; }\n        main .cards .card {\n          -ms-flex: auto;\n              flex: auto;\n          margin-right: 0;\n          margin-top: 20px; } }\n\n.resources {\n  margin-top: 96px; }\n\n.resources {\n  padding-bottom: 120px; }\n  @media (max-width: 768px) {\n    .resources {\n      padding-bottom: 60px; } }\n  .resources .cards {\n    list-style-type: none;\n    margin: 0;\n    padding: 0;\n    display: -ms-flexbox;\n    display: flex;\n    margin-left: -24px;\n    margin-right: -24px; }\n  .resources hgroup {\n    display: -ms-flexbox;\n    display: flex;\n    -ms-flex-pack: justify;\n        justify-content: space-between;\n    -ms-flex-align: baseline;\n        align-items: baseline; }\n    .resources hgroup h3 {\n      font-weight: 600;\n      line-height: normal;\n      font-size: 28px;\n      letter-spacing: -0.02em;\n      color: #1A232F;\n      margin-bottom: 0; }\n    .resources hgroup h4 {\n      font-weight: 600;\n      font-size: 24px;\n      line-height: normal;\n      letter-spacing: -0.02em;\n      color: #1A232F; }\n    .resources hgroup h5 {\n      font-weight: 700;\n      line-height: 1;\n      font-size: 14px;\n      letter-spacing: 0.08em;\n      color: #3880FF;\n      text-transform: uppercase; }\n    .resources hgroup ion-icon {\n      -webkit-transform: translateY(2px);\n              transform: translateY(2px); }\n  .resources .cards li {\n    display: block;\n    -ms-flex: 0 0 33.33%;\n        flex: 0 0 33.33%;\n    padding: 24px; }\n    .resources .cards li a {\n      display: block;\n      width: 100%; }\n    .resources .cards li .img-wrapper {\n      overflow: hidden;\n      border-radius: 6px; }\n    .resources .cards li img {\n      width: 100%; }\n    .resources .cards li h6 {\n      line-height: 23px;\n      font-size: 12px;\n      letter-spacing: 0.12em;\n      text-transform: uppercase;\n      color: #B2BECD;\n      margin-bottom: 0;\n      margin-top: 16px; }\n    .resources .cards li h4 {\n      font-size: 20px;\n      margin-top: 10px;\n      color: #1A232F;\n      font-weight: 600; }\n    .resources .cards li p {\n      color: #5B708B;\n      line-height: 22px;\n      font-size: 14px;\n      letter-spacing: -0.02em; }\n  @media (max-width: 992px) {\n    .resources .cards {\n      margin-left: -12px;\n      margin-right: -12px; }\n    .resources .cards li {\n      padding: 12px; } }\n  @media (max-width: 768px) {\n    .resources .cards {\n      -ms-flex-wrap: wrap;\n          flex-wrap: wrap; }\n    .resources .cards li {\n      -ms-flex: 0 0 50%;\n          flex: 0 0 50%; } }\n  @media (max-width: 480px) {\n    .resources .cards li {\n      -ms-flex: 0 0 100%;\n          flex: 0 0 100%; }\n    .resources h5 {\n      display: none; } }\n\n#more-than-mobile .content {\n  margin-top: 316px; }\n  #more-than-mobile .content::after {\n    background: url(\"/img/solutions/apple-devices.png\");\n    background-size: cover;\n    width: 982px;\n    height: 696px;\n    position: absolute;\n    right: calc(50% - 898px);\n    top: 174px;\n    content: ''; }\n  @media (max-width: 991px) {\n    #more-than-mobile .content {\n      margin-bottom: 200px; }\n      #more-than-mobile .content::after {\n        right: calc(100% - 906px);\n        width: 491px;\n        height: 348px;\n        top: auto;\n        bottom: 50px; } }\n\n#full-native-power .content {\n  margin-top: 373px; }\n  #full-native-power .content::after {\n    background: url(\"/img/solutions/iphone-parts.jpg\");\n    background-size: cover;\n    width: 594px;\n    height: 772px;\n    position: absolute;\n    left: -4px;\n    top: 207px;\n    content: ''; }\n  @media (max-width: 1219px) {\n    #full-native-power .content::after {\n      width: 396px;\n      height: 515px;\n      top: 328px; } }\n  @media (max-width: 1219px) {\n    #full-native-power .content {\n      margin-top: 400px; }\n      #full-native-power .content::after {\n        width: 297px;\n        height: 386px;\n        top: 0;\n        left: calc(50% - 150px); } }\n\n#future-proof .content {\n  margin-top: 431px; }\n  #future-proof .content::after {\n    background: url(\"/img/solutions/ionic-platforms.svg\");\n    background-size: cover;\n    width: 606px;\n    height: 672px;\n    position: absolute;\n    right: calc(50% - 632px);\n    top: 282px;\n    content: ''; }\n  @media (max-width: 1219px) {\n    #future-proof .content::after {\n      width: 303px;\n      height: 336px;\n      right: calc(50% - 150px);\n      top: 80px; } }\n\n#how-to .content {\n  margin-top: 146px;\n  max-width: 100%; }\n  #how-to .content h2 {\n    text-align: center; }\n\n#get-started {\n  margin-top: -225px;\n  padding-top: 134px; }\n  @media (max-width: 1219px) {\n    #get-started {\n      padding-top: 300px;\n      margin-top: -200px; } }\n\n/*# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImNyb3NzLXBsYXRmb3JtLmNzcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtFQUNFLGlCQUFpQjtFQUNqQixtQkFBbUI7RUFDbkIsc0JBQXNCLEVBQUU7RUFDeEI7SUFDRSxjQUFjLEVBQUU7RUFDbEI7SUFDRSxnQkFBZ0I7SUFDaEIsa0JBQWtCO0lBQ2xCLGlCQUFpQjtJQUNqQix3QkFBd0I7SUFDeEIsZUFBZTtJQUNmLGNBQWM7SUFDZCxvQkFBb0IsRUFBRTtFQUN4QjtJQUNFLDhFQUE4RTtJQUM5RSxrQkFBa0I7SUFDbEIsZ0JBQWdCO0lBQ2hCLGtCQUFrQjtJQUNsQix1QkFBdUI7SUFDdkIsMEJBQTBCO0lBQzFCLGVBQWU7SUFDZixvQkFBb0IsRUFBRTtFQUN4QjtJQUNFLDZEQUE2RDtJQUM3RCxnQkFBZ0I7SUFDaEIsaUJBQWlCO0lBQ2pCLGtCQUFrQjtJQUNsQix3QkFBd0I7SUFDeEIsNkJBQTZCLEVBQUU7RUFDakM7SUFDRSxtQkFBbUI7SUFDbkIsb0JBQW9CO0lBQ3BCLGtCQUFrQjtJQUNsQixxQkFBcUI7SUFDckIsZ0JBQWdCO0lBQ2hCLGlCQUFpQjtJQUNqQixrQkFBa0I7SUFDbEIsdUJBQXVCO0lBQ3ZCLGFBQWE7SUFDYiwwQkFBMEI7SUFDMUIsaUJBQWlCO0lBQ2pCLG9CQUFvQjtJQUNwQiw4RUFBOEU7SUFDOUUscUJBQXFCO0lBQ3JCLHFCQUFjO0lBQWQsY0FBYztJQUNkLHVCQUFvQjtRQUFwQixvQkFBb0IsRUFBRTtJQUN0QjtNQUNFLGtQQUFrUDtNQUNsUCxzQkFBc0I7TUFDdEIsWUFBWTtNQUNaLGFBQWE7TUFDYixZQUFZO01BQ1osZUFBZTtNQUNmLGlCQUFpQjtNQUNqQixvQ0FBNEI7Y0FBNUIsNEJBQTRCLEVBQUU7SUFDaEM7TUFDRSwwQkFBMEIsRUFBRTtFQUNoQztJQUNFLGdCQUFnQjtJQUNoQixrQkFBa0IsRUFBRTtFQUN0QjtJQUNFLGlCQUFpQixFQUFFO0VBQ3JCO0lBQ0UscUJBQWM7SUFBZCxjQUFjO0lBQ2QsMkJBQXVCO1FBQXZCLHVCQUF1QjtJQUN2QixzQkFBd0I7UUFBeEIsd0JBQXdCO0lBQ3hCLHVCQUFvQjtRQUFwQixvQkFBb0I7SUFDcEIsbUJBQW1CO0lBQ25CLGtCQUFrQjtJQUNsQixtQkFBbUIsRUFBRTtFQUN2QjtJQUNFO01BQ0Usa0JBQWtCO01BQ2xCLGtCQUFrQixFQUFFO01BQ3BCO1FBQ0UsZ0JBQWdCO1FBQ2hCLGtCQUFrQixFQUFFO01BQ3RCO1FBQ0UsZ0JBQWdCO1FBQ2hCLGtCQUFrQixFQUFFLEVBQUU7RUFDNUI7SUFDRTtNQUNFLGdCQUFnQjtNQUNoQixrQkFBa0I7TUFDbEIsbUJBQW1CLEVBQUU7SUFDdkI7TUFDRSxnQkFBZ0I7TUFDaEIsa0JBQWtCLEVBQUU7SUFDdEI7TUFDRSxnQkFBZ0IsRUFBRSxFQUFFOztBQUUxQjtFQUNFLGNBQWMsRUFBRTtFQUNoQjtJQUNFLHFCQUFxQixFQUFFO0VBQ3pCOzs7SUFHRSxxQkFBYztJQUFkLGNBQWMsRUFBRTtJQUNoQjs7Ozs7TUFLRSxjQUFjLEVBQUU7RUFDcEI7O0lBRUUsaUJBQWlCLEVBQUU7SUFDbkI7TUFDRTs7UUFFRSxnQkFBZ0I7UUFDaEIsbUJBQW1CLEVBQUU7UUFDckI7O1VBRUUsaUJBQWlCLEVBQUUsRUFBRTtFQUM3QjtJQUNFLHdCQUFvQjtRQUFwQixvQkFBb0IsRUFBRTtJQUN0QjtNQUNFLGtCQUFrQixFQUFFO0VBQ3hCO0lBQ0UsZ0NBQTRCO1FBQTVCLDRCQUE0QjtJQUM1QixrQkFBa0IsRUFBRTtJQUNwQjtNQUNFLG1CQUFtQixFQUFFO0VBQ3pCO0lBQ0UsMkJBQXVCO1FBQXZCLHVCQUF1QjtJQUN2Qix1QkFBb0I7UUFBcEIsb0JBQW9CO0lBQ3BCLG1CQUFtQixFQUFFO0lBQ3JCO01BQ0UsYUFBYTtNQUNiLGdCQUFnQixFQUFFO0VBQ3RCO0lBQ0UsaUJBQWlCLEVBQUU7RUFDckI7SUFDRTs7TUFFRSxtQ0FBK0I7VUFBL0IsK0JBQStCO01BQy9CLHVCQUFvQjtVQUFwQixvQkFBb0IsRUFBRTtNQUN0Qjs7UUFFRSxvQkFBb0I7UUFDcEIsZUFBZTtRQUNmLGdCQUFnQixFQUFFO0lBQ3RCO01BQ0UscUJBQXFCLEVBQUUsRUFBRTtFQUM3QjtJQUNFLG1CQUEwQjtRQUExQiwwQkFBMEIsRUFBRTtJQUM1QjtNQUNFLFlBQVksRUFBRTtFQUNsQjtJQUNFLGdCQUFnQjtJQUNoQixrQkFBa0I7SUFDbEIsd0JBQXdCLEVBQUU7SUFDMUI7TUFDRSxjQUFjLEVBQUU7RUFDcEI7SUFDRSw4RUFBOEU7SUFDOUUsbUJBQW1CO0lBQ25CLGtCQUFrQjtJQUNsQixnQkFBZ0I7SUFDaEIsa0JBQWtCO0lBQ2xCLHVCQUF1QjtJQUN2QiwwQkFBMEI7SUFDMUIsZUFBZTtJQUNmLGNBQWMsRUFBRTtFQUNsQjtJQUNFLHNCQUFzQjtJQUN0QixnQkFBZ0I7SUFDaEIsaUJBQWlCO0lBQ2pCLGlCQUFpQixFQUFFO0VBQ3JCO0lBQ0UsZ0JBQWdCO0lBQ2hCLGtCQUFrQjtJQUNsQix3QkFBd0I7SUFDeEIsZUFBZTtJQUNmLGlCQUFpQixFQUFFO0lBQ25CO01BQ0UsZ0JBQWdCO01BQ2hCLGtCQUFrQjtNQUNsQix3QkFBd0IsRUFBRTtFQUM5QjtJQUNFLGlCQUFpQixFQUFFO0VBQ3JCO0lBQ0UsZ0JBQWdCLEVBQUU7RUFDcEI7SUFDRSxnQkFBZ0I7SUFDaEIsa0JBQWtCO0lBQ2xCLHdCQUF3QjtJQUN4QixlQUFlO0lBQ2Ysb0JBQW9CO0lBQ3BCLG1CQUFtQjtJQUNuQixpQkFBaUI7SUFDakIsbUJBQW1CLEVBQUU7SUFDckI7TUFDRSxtREFBbUQ7TUFDbkQsc0JBQXNCO01BQ3RCLFlBQVk7TUFDWixhQUFhO01BQ2IsWUFBWTtNQUNaLG1CQUFtQjtNQUNuQixRQUFRO01BQ1IsU0FBUyxFQUFFO0VBQ2Y7SUFDRSxrQkFBYztJQUFkLGNBQWM7SUFDZCw4QkFBbUM7UUFBbkMsbUNBQW1DO0lBQ25DLHNCQUFzQjtJQUN0QixtQkFBbUI7SUFDbkIsV0FBVyxFQUFFO0lBQ2I7TUFDRSxpQkFBaUIsRUFBRTtJQUNyQjtNQUNFLG9CQUFvQjtNQUNwQixZQUFZLEVBQUU7SUFDaEI7TUFDRTtRQUNFLDBCQUErQjtZQUEvQiwrQkFBK0IsRUFBRSxFQUFFO0lBQ3ZDO01BQ0U7UUFDRSxzQkFBMkI7WUFBM0IsMkJBQTJCLEVBQUUsRUFBRTtFQUNyQztJQUNFLG9CQUFvQjtJQUNwQixvQkFBb0I7SUFDcEIsd0JBQXdCO0lBQ3hCLHVCQUF1QjtJQUN2QixhQUFhLEVBQUU7SUFDZjs7TUFFRSxlQUFlLEVBQUU7O0FBRXZCO0VBQ0UsaUJBQWlCO0VBQ2pCLG1CQUFtQjtFQUNuQixtQkFBbUIsRUFBRTtFQUNyQjtJQUNFLG1CQUFtQjtJQUNuQixPQUFPO0lBQ1AsYUFBYTtJQUNiLCtDQUErQztJQUMvQyxZQUFZO0lBQ1osZUFBZSxFQUFFOztBQUVyQjtFQUNFLHFCQUFjO0VBQWQsY0FBYztFQUNkLGlCQUFpQjtFQUNqQixzQkFBd0I7TUFBeEIsd0JBQXdCO0VBQ3hCLGlCQUFpQixFQUFFO0VBQ25CO0lBQ0Usb0JBQW9CO0lBQ3BCLG1CQUFtQjtJQUNuQix3QkFBd0I7SUFDeEIscUJBQWM7SUFBZCxjQUFjO0lBQ2QsMkJBQXVCO1FBQXZCLHVCQUF1QjtJQUN2QixzQkFBd0I7UUFBeEIsd0JBQXdCO0lBQ3hCLG1CQUFtQjtJQUNuQixvQkFBZ0I7UUFBaEIsZ0JBQWdCO0lBQ2hCLG1CQUFtQixFQUFFO0lBQ3JCO01BQ0UsZ0JBQWdCLEVBQUU7SUFDcEI7TUFDRSxvQkFBb0IsRUFBRTtNQUN0QjtRQUNFLG1DQUFtQyxFQUFFO0VBQzNDO0lBQ0UsZ0JBQWdCO0lBQ2hCLG9CQUFvQjtJQUNwQix3QkFBd0I7SUFDeEIsYUFBYTtJQUNiLGNBQWMsRUFBRTtFQUNsQjtJQUNFLGdCQUFnQjtJQUNoQixrQkFBa0I7SUFDbEIsd0JBQXdCO0lBQ3hCLGdDQUFnQztJQUNoQyxjQUFjO0lBQ2Qsb0JBQW9CLEVBQUU7RUFDeEI7SUFDRSxpQkFBaUI7SUFDakIsZ0JBQWdCO0lBQ2hCLGtCQUFrQjtJQUNsQix1QkFBdUI7SUFDdkIsMEJBQTBCO0lBQzFCLG1CQUFtQjtJQUNuQixpQkFBaUI7SUFDakIsbUJBQW1CO0lBQ25CLG9DQUFvQyxFQUFFO0lBQ3RDO01BQ0Usc0JBQXNCO01BQ3RCLGFBQWE7TUFDYixZQUFZO01BQ1oscUJBQXFCLEVBQUU7RUFDM0I7SUFDRTtNQUNFLDJCQUF1QjtVQUF2Qix1QkFBdUI7TUFDdkIsdUJBQW9CO1VBQXBCLG9CQUFvQixFQUFFO01BQ3RCO1FBQ0UsZUFBVztZQUFYLFdBQVc7UUFDWCxnQkFBZ0I7UUFDaEIsaUJBQWlCO1FBQ2pCLGlCQUFpQixFQUFFLEVBQUU7O0FBRTdCO0VBQ0UsOERBQThEO0VBQzlELGtCQUFrQjtFQUNsQixtQkFBbUI7RUFDbkIsc0JBQXNCLEVBQUU7RUFDeEI7SUFDRSxlQUFlLEVBQUU7RUFDbkI7SUFDRSxpQkFBaUI7SUFDakIsZUFBZTtJQUNmLG1CQUFtQjtJQUNuQixlQUFlLEVBQUU7O0FBRXJCO0VBQ0UsaUJBQWlCLEVBQUU7RUFDbkI7SUFDRSxlQUFlLEVBQUU7O0FBRXJCO0VBQ0Usc0JBQXNCLEVBQUU7RUFDeEI7SUFDRTtNQUNFLHFCQUFxQixFQUFFLEVBQUU7RUFDN0I7SUFDRSxzQkFBc0I7SUFDdEIsVUFBVTtJQUNWLFdBQVc7SUFDWCxxQkFBYztJQUFkLGNBQWM7SUFDZCxtQkFBbUI7SUFDbkIsb0JBQW9CLEVBQUU7RUFDeEI7SUFDRSxxQkFBYztJQUFkLGNBQWM7SUFDZCx1QkFBK0I7UUFBL0IsK0JBQStCO0lBQy9CLHlCQUFzQjtRQUF0QixzQkFBc0IsRUFBRTtJQUN4QjtNQUNFLGlCQUFpQjtNQUNqQixvQkFBb0I7TUFDcEIsZ0JBQWdCO01BQ2hCLHdCQUF3QjtNQUN4QixlQUFlO01BQ2YsaUJBQWlCLEVBQUU7SUFDckI7TUFDRSxpQkFBaUI7TUFDakIsZ0JBQWdCO01BQ2hCLG9CQUFvQjtNQUNwQix3QkFBd0I7TUFDeEIsZUFBZSxFQUFFO0lBQ25CO01BQ0UsaUJBQWlCO01BQ2pCLGVBQWU7TUFDZixnQkFBZ0I7TUFDaEIsdUJBQXVCO01BQ3ZCLGVBQWU7TUFDZiwwQkFBMEIsRUFBRTtJQUM5QjtNQUNFLG1DQUEyQjtjQUEzQiwyQkFBMkIsRUFBRTtFQUNqQztJQUNFLGVBQWU7SUFDZixxQkFBaUI7UUFBakIsaUJBQWlCO0lBQ2pCLGNBQWMsRUFBRTtJQUNoQjtNQUNFLGVBQWU7TUFDZixZQUFZLEVBQUU7SUFDaEI7TUFDRSxpQkFBaUI7TUFDakIsbUJBQW1CLEVBQUU7SUFDdkI7TUFDRSxZQUFZLEVBQUU7SUFDaEI7TUFDRSxrQkFBa0I7TUFDbEIsZ0JBQWdCO01BQ2hCLHVCQUF1QjtNQUN2QiwwQkFBMEI7TUFDMUIsZUFBZTtNQUNmLGlCQUFpQjtNQUNqQixpQkFBaUIsRUFBRTtJQUNyQjtNQUNFLGdCQUFnQjtNQUNoQixpQkFBaUI7TUFDakIsZUFBZTtNQUNmLGlCQUFpQixFQUFFO0lBQ3JCO01BQ0UsZUFBZTtNQUNmLGtCQUFrQjtNQUNsQixnQkFBZ0I7TUFDaEIsd0JBQXdCLEVBQUU7RUFDOUI7SUFDRTtNQUNFLG1CQUFtQjtNQUNuQixvQkFBb0IsRUFBRTtJQUN4QjtNQUNFLGNBQWMsRUFBRSxFQUFFO0VBQ3RCO0lBQ0U7TUFDRSxvQkFBZ0I7VUFBaEIsZ0JBQWdCLEVBQUU7SUFDcEI7TUFDRSxrQkFBYztVQUFkLGNBQWMsRUFBRSxFQUFFO0VBQ3RCO0lBQ0U7TUFDRSxtQkFBZTtVQUFmLGVBQWUsRUFBRTtJQUNuQjtNQUNFLGNBQWMsRUFBRSxFQUFFOztBQUV4Qjs7OztFQUlFLGdCQUFnQjtFQUNoQixrQkFBa0I7RUFDbEIsd0JBQXdCO0VBQ3hCLGVBQWU7RUFDZixjQUFjLEVBQUU7O0FBRWxCOzs7O0VBSUUsZ0JBQWdCO0VBQ2hCLG9CQUFvQjtFQUNwQix3QkFBd0I7RUFDeEIsZUFBZTtFQUNmLGlCQUFpQixFQUFFOztBQUVyQjtFQUNFLHlCQUF5QjtFQUN6QixpQkFBaUI7RUFDakIsb0JBQWdCO01BQWhCLGdCQUFnQixFQUFFO0VBQ2xCO0lBQ0UsbUJBQW1CLEVBQUU7SUFDckI7TUFDRSxpQkFBaUIsRUFBRTtFQUN2QjtJQUNFO01BQ0UsbUJBQW1CO01BQ25CLG9CQUFvQixFQUFFO01BQ3RCO1FBQ0UsY0FBYyxFQUFFLEVBQUU7O0FBRTFCO0VBQ0UscUJBQWM7RUFBZCxjQUFjO0VBQ2Qsb0JBQW9CO0VBQ3BCLFdBQVc7RUFDWCx1QkFBK0I7TUFBL0IsK0JBQStCO0VBQy9CLGlCQUFpQjtFQUNqQixZQUFZLEVBQUU7RUFDZDtJQUNFLHNEQUFzRDtJQUN0RCw0QkFBNEI7SUFDNUIsNkJBQTZCO0lBQzdCLGVBQWU7SUFDZixhQUFhLEVBQUU7RUFDakI7SUFDRTtNQUNFLHNCQUF3QjtVQUF4Qix3QkFBd0I7TUFDeEIsb0JBQWdCO1VBQWhCLGdCQUFnQjtNQUNoQixpQkFBaUIsRUFBRTtNQUNuQjtRQUNFLGFBQWEsRUFBRSxFQUFFO0VBQ3ZCO0lBQ0UsWUFBWSxFQUFFO0VBQ2hCO0lBQ0UsNkJBQTZCO0lBQzdCLFlBQVksRUFBRTtFQUNoQjtJQUNFLDZCQUE2QjtJQUM3QixZQUFZLEVBQUU7RUFDaEI7SUFDRSw4QkFBOEI7SUFDOUIsWUFBWSxFQUFFO0VBQ2hCO0lBQ0UsOEJBQThCO0lBQzlCLGFBQWEsRUFBRTtFQUNqQjtJQUNFLDhCQUE4QjtJQUM5QixZQUFZLEVBQUU7RUFDaEI7SUFDRSw4QkFBOEI7SUFDOUIsWUFBWSxFQUFFOztBQUVsQjtFQUNFLGlCQUFpQjtFQUNqQixpQkFBaUIsRUFBRTtFQUNuQjtJQUNFLG1CQUFtQixFQUFFO0VBQ3ZCO0lBQ0UsaUJBQWlCLEVBQUU7RUFDckI7OztJQUdFLG1CQUFtQjtJQUNuQixXQUFXLEVBQUU7O0FBRWpCO0VBQ0U7SUFDRSxxQkFBcUIsRUFBRSxFQUFFOztBQUU3Qjs7OztFQUlFLG1CQUFtQjtFQUNuQixXQUFXLEVBQUU7O0FBRWY7RUFDRSx1QkFBdUI7RUFDdkIsbUJBQW1CO0VBQ25CLFdBQVc7RUFDWCxZQUFZO0VBQ1osZUFBZSxFQUFFOztBQUVuQjtFQUNFLCtEQUErRDtFQUMvRCxhQUFhO0VBQ2IsY0FBYztFQUNkLHlCQUF5QjtFQUN6QixXQUFXLEVBQUU7O0FBRWY7RUFDRSw0REFBNEQ7RUFDNUQsYUFBYTtFQUNiLGNBQWM7RUFDZCxhQUFhO0VBQ2IsVUFBVSxFQUFFOztBQUVkO0VBQ0UsMkNBQTJDO0VBQzNDLGFBQWE7RUFDYixjQUFjO0VBQ2QsNkJBQTZCO0VBQzdCLFlBQVk7RUFDWixVQUFVLEVBQUU7O0FBRWQ7RUFDRSxZQUFZO0VBQ1osWUFBWSxFQUFFOztBQUVoQjtFQUNFLHNEQUFzRDtFQUN0RCxrQkFBa0I7RUFDbEIseUJBQWlCO0VBQWpCLGlCQUFpQjtFQUNqQixPQUFPO0VBQ1AsV0FBVyxFQUFFO0VBQ2I7SUFDRSxxQkFBYztJQUFkLGNBQWM7SUFDZCx1QkFBK0I7UUFBL0IsK0JBQStCO0lBQy9CLGtCQUFrQjtJQUNsQixxQkFBcUI7SUFDckIsbUJBQW1CO0lBQ25CLG9CQUFnQjtRQUFoQixnQkFBZ0IsRUFBRTtJQUNsQjtNQUNFO1FBQ0UsMEJBQThCO1lBQTlCLDhCQUE4QixFQUFFLEVBQUU7SUFDdEM7TUFDRSxjQUFjLEVBQUU7RUFDcEI7SUFDRSxpQkFBaUIsRUFBRTtJQUNuQjtNQUNFLGVBQWUsRUFBRTtFQUNyQjtJQUNFLGdCQUFnQjtJQUNoQixnQkFBZ0I7SUFDaEIsa0JBQWtCO0lBQ2xCLG1CQUFtQjtJQUNuQix1QkFBdUI7SUFDdkIsMEJBQTBCO0lBQzFCLGVBQWUsRUFBRTtJQUNqQjtNQUNFLHdCQUF3QjtNQUN4QixzQkFBc0IsRUFBRTtJQUMxQjtNQUNFLHVCQUF1QjtNQUN2QixrQkFBa0I7TUFDbEIsb0JBQW9CO01BQ3BCLGFBQWE7TUFDYixpQkFBaUIsRUFBRTtNQUNuQjtRQUNFLGFBQWE7UUFDYixvQkFBb0IsRUFBRTtFQUM1QjtJQUNFLGVBQWU7SUFDZixpQkFBaUIsRUFBRTtJQUNuQjtNQUNFLGVBQWUsRUFBRTs7QUFFdkI7RUFDRSx5QkFBeUI7RUFDekIsZUFBZSxFQUFFO0VBQ2pCO0lBQ0UsZ0JBQWdCO0lBQ2hCLGtCQUFrQjtJQUNsQix3QkFBd0I7SUFDeEIsZUFBZTtJQUNmLG9CQUFvQixFQUFFO0VBQ3hCO0lBQ0UsZUFBZTtJQUNmLGlCQUFpQjtJQUNqQixtQkFBbUIsRUFBRTtJQUNyQjtNQUNFLGNBQWMsRUFBRTtFQUNwQjtJQUNFLGdCQUFnQjtJQUNoQixrQkFBa0I7SUFDbEIsb0JBQW9CLEVBQUU7RUFDeEI7SUFDRSxnQkFBZ0IsRUFBRTtFQUNwQjtJQUNFLGdCQUFnQjtJQUNoQixrQkFBa0I7SUFDbEIsZUFBZTtJQUNmLG9CQUFvQjtJQUNwQixtQkFBbUI7SUFDbkIsaUJBQWlCO0lBQ2pCLG1CQUFtQjtJQUNuQix3QkFBd0IsRUFBRTtJQUMxQjtNQUNFLDhOQUE4TjtNQUM5TixtQkFBbUI7TUFDbkIsUUFBUTtNQUNSLFNBQVM7TUFDVCxhQUFhO01BQ2IsWUFBWTtNQUNaLGNBQWM7TUFDZCxlQUFlLEVBQUU7RUFDckI7SUFDRSxxQkFBYztJQUFkLGNBQWM7SUFDZCxtQkFBbUIsRUFBRTtJQUNyQjtNQUNFLGNBQWMsRUFBRTtJQUNsQjtNQUNFLGdDQUE0QjtVQUE1Qiw0QkFBNEIsRUFBRTtJQUNoQztNQUNFLHNCQUF3QjtVQUF4Qix3QkFBd0I7TUFDeEIsMkJBQXVCO1VBQXZCLHVCQUF1QjtNQUN2Qix1QkFBb0I7VUFBcEIsb0JBQW9CLEVBQUU7TUFDdEI7UUFDRSxpQkFBaUI7UUFDakIsbUJBQW1CLEVBQUU7UUFDckI7VUFDRSxxQkFBYztVQUFkLGNBQWM7VUFDZCxvQkFBZ0I7Y0FBaEIsZ0JBQWdCO1VBQ2hCLHVCQUErQjtjQUEvQiwrQkFBK0IsRUFBRTtVQUNqQztZQUNFO2NBQ0UscUJBQTRCO2tCQUE1Qiw0QkFBNEIsRUFBRSxFQUFFO1FBQ3RDO1VBQ0UsaUJBQWlCO1VBQ2pCLFlBQVksRUFBRTtFQUN0QjtJQUNFLGlCQUFpQjtJQUNqQixzQkFBc0IsRUFBRTtJQUN4QjtNQUNFO1FBQ0UsZ0JBQWdCO1FBQ2hCLGtCQUFrQixFQUFFLEVBQUU7RUFDNUI7SUFDRSxvQkFBb0I7SUFDcEIsbUJBQW1CO0lBQ25CLHNCQUFzQixFQUFFO0lBQ3hCO01BQ0UsZUFBZSxFQUFFO0lBQ25CO01BQ0UsaUJBQWlCO01BQ2pCLGVBQWU7TUFDZixtQkFBbUI7TUFDbkIsZUFBZSxFQUFFO0VBQ3JCO0lBQ0UsaUJBQWlCLEVBQUU7RUFDckI7SUFDRSxxQkFBYztJQUFkLGNBQWM7SUFDZCxpQkFBaUI7SUFDakIsc0JBQXdCO1FBQXhCLHdCQUF3QjtJQUN4QixpQkFBaUIsRUFBRTtJQUNuQjtNQUNFLG9CQUFvQjtNQUNwQixtQkFBbUI7TUFDbkIsd0JBQXdCO01BQ3hCLHFCQUFjO01BQWQsY0FBYztNQUNkLDJCQUF1QjtVQUF2Qix1QkFBdUI7TUFDdkIsc0JBQXdCO1VBQXhCLHdCQUF3QjtNQUN4QixtQkFBbUI7TUFDbkIsb0JBQWdCO1VBQWhCLGdCQUFnQjtNQUNoQixtQkFBbUIsRUFBRTtNQUNyQjtRQUNFLGdCQUFnQixFQUFFO01BQ3BCO1FBQ0Usb0JBQW9CLEVBQUU7UUFDdEI7VUFDRSxtQ0FBbUMsRUFBRTtJQUMzQztNQUNFLGdCQUFnQjtNQUNoQixvQkFBb0I7TUFDcEIsd0JBQXdCO01BQ3hCLGFBQWE7TUFDYixjQUFjLEVBQUU7SUFDbEI7TUFDRSxnQkFBZ0I7TUFDaEIsa0JBQWtCO01BQ2xCLHdCQUF3QjtNQUN4QixnQ0FBZ0MsRUFBRTtJQUNwQztNQUNFLGlCQUFpQjtNQUNqQixnQkFBZ0I7TUFDaEIsa0JBQWtCO01BQ2xCLHVCQUF1QjtNQUN2QiwwQkFBMEI7TUFDMUIsbUJBQW1CO01BQ25CLGlCQUFpQjtNQUNqQixtQkFBbUI7TUFDbkIsb0NBQW9DLEVBQUU7TUFDdEM7UUFDRSxzQkFBc0I7UUFDdEIsYUFBYTtRQUNiLFlBQVk7UUFDWixxQkFBcUIsRUFBRTtJQUMzQjtNQUNFO1FBQ0UsMkJBQXVCO1lBQXZCLHVCQUF1QixFQUFFO1FBQ3pCO1VBQ0UsZUFBVztjQUFYLFdBQVc7VUFDWCxnQkFBZ0I7VUFDaEIsaUJBQWlCLEVBQUUsRUFBRTs7QUFFL0I7RUFDRSxpQkFBaUIsRUFBRTs7QUFFckI7RUFDRSxzQkFBc0IsRUFBRTtFQUN4QjtJQUNFO01BQ0UscUJBQXFCLEVBQUUsRUFBRTtFQUM3QjtJQUNFLHNCQUFzQjtJQUN0QixVQUFVO0lBQ1YsV0FBVztJQUNYLHFCQUFjO0lBQWQsY0FBYztJQUNkLG1CQUFtQjtJQUNuQixvQkFBb0IsRUFBRTtFQUN4QjtJQUNFLHFCQUFjO0lBQWQsY0FBYztJQUNkLHVCQUErQjtRQUEvQiwrQkFBK0I7SUFDL0IseUJBQXNCO1FBQXRCLHNCQUFzQixFQUFFO0lBQ3hCO01BQ0UsaUJBQWlCO01BQ2pCLG9CQUFvQjtNQUNwQixnQkFBZ0I7TUFDaEIsd0JBQXdCO01BQ3hCLGVBQWU7TUFDZixpQkFBaUIsRUFBRTtJQUNyQjtNQUNFLGlCQUFpQjtNQUNqQixnQkFBZ0I7TUFDaEIsb0JBQW9CO01BQ3BCLHdCQUF3QjtNQUN4QixlQUFlLEVBQUU7SUFDbkI7TUFDRSxpQkFBaUI7TUFDakIsZUFBZTtNQUNmLGdCQUFnQjtNQUNoQix1QkFBdUI7TUFDdkIsZUFBZTtNQUNmLDBCQUEwQixFQUFFO0lBQzlCO01BQ0UsbUNBQTJCO2NBQTNCLDJCQUEyQixFQUFFO0VBQ2pDO0lBQ0UsZUFBZTtJQUNmLHFCQUFpQjtRQUFqQixpQkFBaUI7SUFDakIsY0FBYyxFQUFFO0lBQ2hCO01BQ0UsZUFBZTtNQUNmLFlBQVksRUFBRTtJQUNoQjtNQUNFLGlCQUFpQjtNQUNqQixtQkFBbUIsRUFBRTtJQUN2QjtNQUNFLFlBQVksRUFBRTtJQUNoQjtNQUNFLGtCQUFrQjtNQUNsQixnQkFBZ0I7TUFDaEIsdUJBQXVCO01BQ3ZCLDBCQUEwQjtNQUMxQixlQUFlO01BQ2YsaUJBQWlCO01BQ2pCLGlCQUFpQixFQUFFO0lBQ3JCO01BQ0UsZ0JBQWdCO01BQ2hCLGlCQUFpQjtNQUNqQixlQUFlO01BQ2YsaUJBQWlCLEVBQUU7SUFDckI7TUFDRSxlQUFlO01BQ2Ysa0JBQWtCO01BQ2xCLGdCQUFnQjtNQUNoQix3QkFBd0IsRUFBRTtFQUM5QjtJQUNFO01BQ0UsbUJBQW1CO01BQ25CLG9CQUFvQixFQUFFO0lBQ3hCO01BQ0UsY0FBYyxFQUFFLEVBQUU7RUFDdEI7SUFDRTtNQUNFLG9CQUFnQjtVQUFoQixnQkFBZ0IsRUFBRTtJQUNwQjtNQUNFLGtCQUFjO1VBQWQsY0FBYyxFQUFFLEVBQUU7RUFDdEI7SUFDRTtNQUNFLG1CQUFlO1VBQWYsZUFBZSxFQUFFO0lBQ25CO01BQ0UsY0FBYyxFQUFFLEVBQUU7O0FBRXhCO0VBQ0Usa0JBQWtCLEVBQUU7RUFDcEI7SUFDRSxvREFBb0Q7SUFDcEQsdUJBQXVCO0lBQ3ZCLGFBQWE7SUFDYixjQUFjO0lBQ2QsbUJBQW1CO0lBQ25CLHlCQUF5QjtJQUN6QixXQUFXO0lBQ1gsWUFBWSxFQUFFO0VBQ2hCO0lBQ0U7TUFDRSxxQkFBcUIsRUFBRTtNQUN2QjtRQUNFLDBCQUEwQjtRQUMxQixhQUFhO1FBQ2IsY0FBYztRQUNkLFVBQVU7UUFDVixhQUFhLEVBQUUsRUFBRTs7QUFFekI7RUFDRSxrQkFBa0IsRUFBRTtFQUNwQjtJQUNFLG1EQUFtRDtJQUNuRCx1QkFBdUI7SUFDdkIsYUFBYTtJQUNiLGNBQWM7SUFDZCxtQkFBbUI7SUFDbkIsV0FBVztJQUNYLFdBQVc7SUFDWCxZQUFZLEVBQUU7RUFDaEI7SUFDRTtNQUNFLGFBQWE7TUFDYixjQUFjO01BQ2QsV0FBVyxFQUFFLEVBQUU7RUFDbkI7SUFDRTtNQUNFLGtCQUFrQixFQUFFO01BQ3BCO1FBQ0UsYUFBYTtRQUNiLGNBQWM7UUFDZCxPQUFPO1FBQ1Asd0JBQXdCLEVBQUUsRUFBRTs7QUFFcEM7RUFDRSxrQkFBa0IsRUFBRTtFQUNwQjtJQUNFLHNEQUFzRDtJQUN0RCx1QkFBdUI7SUFDdkIsYUFBYTtJQUNiLGNBQWM7SUFDZCxtQkFBbUI7SUFDbkIseUJBQXlCO0lBQ3pCLFdBQVc7SUFDWCxZQUFZLEVBQUU7RUFDaEI7SUFDRTtNQUNFLGFBQWE7TUFDYixjQUFjO01BQ2QseUJBQXlCO01BQ3pCLFVBQVUsRUFBRSxFQUFFOztBQUVwQjtFQUNFLGtCQUFrQjtFQUNsQixnQkFBZ0IsRUFBRTtFQUNsQjtJQUNFLG1CQUFtQixFQUFFOztBQUV6QjtFQUNFLG1CQUFtQjtFQUNuQixtQkFBbUIsRUFBRTtFQUNyQjtJQUNFO01BQ0UsbUJBQW1CO01BQ25CLG1CQUFtQixFQUFFLEVBQUUiLCJmaWxlIjoicGFnZXMvZW50ZXJwcmlzZS9zb2x1dGlvbnMvY3Jvc3MtcGxhdGZvcm0uY3NzIiwic291cmNlc0NvbnRlbnQiOlsiLmVlLWhlcm8ge1xuICBtYXgtd2lkdGg6IDY0MHB4O1xuICBwYWRkaW5nLXRvcDogMTMwcHg7XG4gIHBhZGRpbmctYm90dG9tOiAxNjBweDsgfVxuICAuZWUtaGVybzo6YmVmb3JlLCAuZWUtaGVybzo6YWZ0ZXIge1xuICAgIGRpc3BsYXk6IG5vbmU7IH1cbiAgLmVlLWhlcm8gaDEge1xuICAgIGZvbnQtc2l6ZTogNTJweDtcbiAgICBsaW5lLWhlaWdodDogNjJweDtcbiAgICBtYXgtd2lkdGg6IDkzMHB4O1xuICAgIGxldHRlci1zcGFjaW5nOiAtMC4wM2VtO1xuICAgIGNvbG9yOiAjMDIwODE0O1xuICAgIG1hcmdpbi10b3A6IDA7XG4gICAgbWFyZ2luLWJvdHRvbTogMTZweDsgfVxuICAuZWUtaGVybyBoNCB7XG4gICAgZm9udC1mYW1pbHk6IFwiUm9ib3RvIE1vbm9cIiwgTWVubG8sIE1vbmFjbywgQ29uc29sYXMsIFwiQ291cmllciBOZXdcIiwgbW9ub3NwYWNlO1xuICAgIGZvbnQtd2VpZ2h0OiBib2xkO1xuICAgIGZvbnQtc2l6ZTogMTNweDtcbiAgICBsaW5lLWhlaWdodDogMjZweDtcbiAgICBsZXR0ZXItc3BhY2luZzogMC4xNGVtO1xuICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XG4gICAgY29sb3I6ICM5MkExQjM7XG4gICAgbWFyZ2luLWJvdHRvbTogMjlweDsgfVxuICAuZWUtaGVybyBwIHtcbiAgICBmb250LWZhbWlseTogXCJFaW5hXCIsIFwiSGVsdmV0aWNhIE5ldWVcIiwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmO1xuICAgIGZvbnQtc2l6ZTogMjRweDtcbiAgICBmb250LXdlaWdodDogNDAwO1xuICAgIGxpbmUtaGVpZ2h0OiAzNnB4O1xuICAgIGxldHRlci1zcGFjaW5nOiAtMC4wNGVtO1xuICAgIGNvbG9yOiByZ2JhKDM5LCA1MCwgNjMsIDAuOCk7IH1cbiAgLmVlLWhlcm8gLmJ0biB7XG4gICAgcGFkZGluZy1sZWZ0OiAyNHB4O1xuICAgIHBhZGRpbmctcmlnaHQ6IDIwcHg7XG4gICAgcGFkZGluZy10b3A6IDE4cHg7XG4gICAgcGFkZGluZy1ib3R0b206IDE4cHg7XG4gICAgZm9udC1zaXplOiAxNHB4O1xuICAgIG1hcmdpbi10b3A6IDE2cHg7XG4gICAgbGluZS1oZWlnaHQ6IDIwcHg7XG4gICAgbGV0dGVyLXNwYWNpbmc6IDAuMDhlbTtcbiAgICBjb2xvcjogd2hpdGU7XG4gICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcbiAgICBmb250LXdlaWdodDogNzAwO1xuICAgIGJhY2tncm91bmQ6ICMzODgwRkY7XG4gICAgYm94LXNoYWRvdzogMHB4IDJweCA0cHggcmdiYSgyLCA4LCAyMCwgMC4xKSwgMHB4IDFweCAycHggcmdiYSgyLCA4LCAyMCwgMC4wOCk7XG4gICAgYm9yZGVyLXJhZGl1czogMjEwcHg7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyOyB9XG4gICAgLmVlLWhlcm8gLmJ0bjo6YWZ0ZXIge1xuICAgICAgYmFja2dyb3VuZC1pbWFnZTogdXJsKCdkYXRhOmltYWdlL3N2Zyt4bWw7dXRmOCw8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiBmaWxsPVwid2hpdGVcIiB2aWV3Qm94PVwiMCAwIDUxMiA1MTJcIj48cGF0aCBkPVwiTTg1IDI3Ny4zNzVoMjU5LjcwNEwyMjUuMDAyIDM5Ny4wNzcgMjU2IDQyN2wxNzEtMTcxTDI1NiA4NWwtMjkuOTIyIDI5LjkyNCAxMTguNjI2IDExOS43MDFIODV2NDIuNzV6XCIvPjwvc3ZnPicpO1xuICAgICAgYmFja2dyb3VuZC1zaXplOiAxMDAlO1xuICAgICAgY29udGVudDogJyc7XG4gICAgICBoZWlnaHQ6IDIwcHg7XG4gICAgICB3aWR0aDogMjBweDtcbiAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgbWFyZ2luLWxlZnQ6IDhweDtcbiAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtMXB4KTsgfVxuICAgIC5lZS1oZXJvIC5idG46aG92ZXIge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogIzRmOGJmNTsgfVxuICAuZWUtaGVyby0tbGFyZ2UgaDEge1xuICAgIGZvbnQtc2l6ZTogNjJweDtcbiAgICBsaW5lLWhlaWdodDogNjlweDsgfVxuICAuZWUtaGVyby0td2lkZSB7XG4gICAgbWF4LXdpZHRoOiA5NjBweDsgfVxuICAuZWUtaGVyby0tY2VudGVyZWQge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICBtYXJnaW4tbGVmdDogYXV0bztcbiAgICBtYXJnaW4tcmlnaHQ6IGF1dG87IH1cbiAgQG1lZGlhIChtYXgtd2lkdGg6IDc2N3B4KSB7XG4gICAgLmVlLWhlcm8ge1xuICAgICAgcGFkZGluZy10b3A6IDcwcHg7XG4gICAgICBwYWRkaW5nLWJvdHRvbTogMDsgfVxuICAgICAgLmVlLWhlcm8gaDEge1xuICAgICAgICBmb250LXNpemU6IDQ0cHg7XG4gICAgICAgIGxpbmUtaGVpZ2h0OiA1MnB4OyB9XG4gICAgICAuZWUtaGVyby0tbGFyZ2UgaDEge1xuICAgICAgICBmb250LXNpemU6IDUwcHg7XG4gICAgICAgIGxpbmUtaGVpZ2h0OiA2MHB4OyB9IH1cbiAgQG1lZGlhIChtYXgtd2lkdGg6IDQ4MHB4KSB7XG4gICAgLmVlLWhlcm8gaDEge1xuICAgICAgZm9udC1zaXplOiAzNnB4O1xuICAgICAgbGluZS1oZWlnaHQ6IDQ0cHg7XG4gICAgICBtYXJnaW4tYm90dG9tOiA2cHg7IH1cbiAgICAuZWUtaGVyby0tbGFyZ2UgaDEge1xuICAgICAgZm9udC1zaXplOiA0MnB4O1xuICAgICAgbGluZS1oZWlnaHQ6IDUycHg7IH1cbiAgICAuZWUtaGVybyAuYnRuIHtcbiAgICAgIG1hcmdpbi10b3A6IDhweDsgfSB9XG5cbi5lZS1tYWluIHtcbiAgbWFyZ2luLXRvcDogMDsgfVxuICAuZWUtbWFpbiBzZWN0aW9uIHtcbiAgICBtYXJnaW4tYm90dG9tOiAyMDBweDsgfVxuICAuZWUtbWFpbiAubGVmdCxcbiAgLmVlLW1haW4gLnJpZ2h0LFxuICAuZWUtbWFpbiAuY2VudGVyIHtcbiAgICBkaXNwbGF5OiBmbGV4OyB9XG4gICAgLmVlLW1haW4gLmxlZnQ6OmJlZm9yZSwgLmVlLW1haW4gLmxlZnQ6OmFmdGVyLFxuICAgIC5lZS1tYWluIC5yaWdodDo6YmVmb3JlLFxuICAgIC5lZS1tYWluIC5yaWdodDo6YWZ0ZXIsXG4gICAgLmVlLW1haW4gLmNlbnRlcjo6YmVmb3JlLFxuICAgIC5lZS1tYWluIC5jZW50ZXI6OmFmdGVyIHtcbiAgICAgIGRpc3BsYXk6IG5vbmU7IH1cbiAgLmVlLW1haW4gLmxlZnQgLmNvbnRlbnQsXG4gIC5lZS1tYWluIC5yaWdodCAuY29udGVudCB7XG4gICAgbWF4LXdpZHRoOiA0ODBweDsgfVxuICAgIEBtZWRpYSAobWF4LXdpZHRoOiA3NjdweCkge1xuICAgICAgLmVlLW1haW4gLmxlZnQgLmNvbnRlbnQsXG4gICAgICAuZWUtbWFpbiAucmlnaHQgLmNvbnRlbnQge1xuICAgICAgICBtYXgtd2lkdGg6IDEwMCU7XG4gICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsgfVxuICAgICAgICAuZWUtbWFpbiAubGVmdCAuY29udGVudCBsaSxcbiAgICAgICAgLmVlLW1haW4gLnJpZ2h0IC5jb250ZW50IGxpIHtcbiAgICAgICAgICB0ZXh0LWFsaWduOiBsZWZ0OyB9IH1cbiAgLmVlLW1haW4gLmxlZnQge1xuICAgIGZsZXgtZGlyZWN0aW9uOiByb3c7IH1cbiAgICAuZWUtbWFpbiAubGVmdCAuZ3JhcGhpY3Mge1xuICAgICAgbWFyZ2luLWxlZnQ6IGF1dG87IH1cbiAgLmVlLW1haW4gLnJpZ2h0IHtcbiAgICBmbGV4LWRpcmVjdGlvbjogcm93LXJldmVyc2U7XG4gICAgbWFyZ2luLWxlZnQ6IGF1dG87IH1cbiAgICAuZWUtbWFpbiAucmlnaHQgLmdyYXBoaWNzIHtcbiAgICAgIG1hcmdpbi1yaWdodDogYXV0bzsgfVxuICAuZWUtbWFpbiAuY2VudGVyIHtcbiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgdGV4dC1hbGlnbjogY2VudGVyOyB9XG4gICAgLmVlLW1haW4gLmNlbnRlciAuY29udGVudCB7XG4gICAgICB3aWR0aDogODk0cHg7XG4gICAgICBtYXgtd2lkdGg6IDEwMCU7IH1cbiAgLmVlLW1haW4gLmZ1bGwgLmNvbnRlbnQge1xuICAgIG1heC13aWR0aDogNTY4cHg7IH1cbiAgQG1lZGlhIChtYXgtd2lkdGg6IDc2N3B4KSB7XG4gICAgLmVlLW1haW4gLnJpZ2h0LFxuICAgIC5lZS1tYWluIC5sZWZ0IHtcbiAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW4tcmV2ZXJzZTtcbiAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7IH1cbiAgICAgIC5lZS1tYWluIC5yaWdodCAuZ3JhcGhpY3MsXG4gICAgICAuZWUtbWFpbiAubGVmdCAuZ3JhcGhpY3Mge1xuICAgICAgICBtYXJnaW4tYm90dG9tOiAyNHB4O1xuICAgICAgICBtYXJnaW4tbGVmdDogMDtcbiAgICAgICAgbWFyZ2luLXJpZ2h0OiAwOyB9XG4gICAgLmVlLW1haW4gc2VjdGlvbiB7XG4gICAgICBtYXJnaW4tYm90dG9tOiAxMDBweDsgfSB9XG4gIC5lZS1tYWluIC5ncmFwaGljcyB7XG4gICAganVzdGlmeS1jb250ZW50OiBmbGV4LWVuZDsgfVxuICAgIC5lZS1tYWluIC5ncmFwaGljcyBpbWcge1xuICAgICAgd2lkdGg6IDEwMCU7IH1cbiAgLmVlLW1haW4gaDIge1xuICAgIGZvbnQtc2l6ZTogNDRweDtcbiAgICBsaW5lLWhlaWdodDogNTFweDtcbiAgICBsZXR0ZXItc3BhY2luZzogLTAuMDNlbTsgfVxuICAgIC5lZS1tYWluIGgyOmZpcnN0LWNoaWxkIHtcbiAgICAgIG1hcmdpbi10b3A6IDA7IH1cbiAgLmVlLW1haW4gLmVlLXNlY3Rpb25fX3RpdGxlIHtcbiAgICBmb250LWZhbWlseTogXCJSb2JvdG8gTW9ub1wiLCBNZW5sbywgTW9uYWNvLCBDb25zb2xhcywgXCJDb3VyaWVyIE5ld1wiLCBtb25vc3BhY2U7XG4gICAgZm9udC1zdHlsZTogbm9ybWFsO1xuICAgIGZvbnQtd2VpZ2h0OiBib2xkO1xuICAgIGZvbnQtc2l6ZTogMTJweDtcbiAgICBsaW5lLWhlaWdodDogMjNweDtcbiAgICBsZXR0ZXItc3BhY2luZzogMC4xNGVtO1xuICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XG4gICAgY29sb3I6ICM1QjcwOEI7XG4gICAgbWFyZ2luLXRvcDogMDsgfVxuICAuZWUtbWFpbiAuZWUtc2VjdGlvbl9fY3RhIHtcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgZm9udC1zaXplOiAxOHB4O1xuICAgIGZvbnQtd2VpZ2h0OiA1MDA7XG4gICAgbWFyZ2luLXRvcDogMTZweDsgfVxuICAuZWUtbWFpbiBwIHtcbiAgICBmb250LXNpemU6IDIwcHg7XG4gICAgbGluZS1oZWlnaHQ6IDMxcHg7XG4gICAgbGV0dGVyLXNwYWNpbmc6IC0wLjAyZW07XG4gICAgY29sb3I6ICM1QjcwOEI7XG4gICAgbWFyZ2luLXRvcDogMThweDsgfVxuICAgIC5lZS1tYWluIHAuc20ge1xuICAgICAgZm9udC1zaXplOiAxNnB4O1xuICAgICAgbGluZS1oZWlnaHQ6IDI5cHg7XG4gICAgICBsZXR0ZXItc3BhY2luZzogLTAuMDFlbTsgfVxuICAuZWUtbWFpbiB1bDpub3QoLmZyYW1ld29ya3MpIHtcbiAgICBtYXJnaW4tdG9wOiA1NHB4OyB9XG4gIC5lZS1tYWluIC5jb250ZW50IHVsIHtcbiAgICBwYWRkaW5nLWxlZnQ6IDA7IH1cbiAgLmVlLW1haW4gLmNvbnRlbnQgbGkge1xuICAgIGZvbnQtc2l6ZTogMTZweDtcbiAgICBsaW5lLWhlaWdodDogMjNweDtcbiAgICBsZXR0ZXItc3BhY2luZzogLTAuMDJlbTtcbiAgICBjb2xvcjogIzFBMjMyRjtcbiAgICBtYXJnaW4tYm90dG9tOiA0MHB4O1xuICAgIHBhZGRpbmctbGVmdDogMzBweDtcbiAgICBsaXN0LXN0eWxlOiBub25lO1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsgfVxuICAgIC5lZS1tYWluIC5jb250ZW50IGxpOjpiZWZvcmUge1xuICAgICAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFwiL2ltZy9lbnRlcnByaXNlL2NoZWNrLnN2Z1wiKTtcbiAgICAgIGJhY2tncm91bmQtc2l6ZTogMTAwJTtcbiAgICAgIGNvbnRlbnQ6ICcnO1xuICAgICAgaGVpZ2h0OiAxMHB4O1xuICAgICAgd2lkdGg6IDEzcHg7XG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICBsZWZ0OiAwO1xuICAgICAgdG9wOiA4cHg7IH1cbiAgLmVlLW1haW4gLmZlYXR1cmVzIHtcbiAgICBkaXNwbGF5OiBncmlkO1xuICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogMWZyIDFmciAxZnI7XG4gICAgZ3JpZC1jb2x1bW4tZ2FwOiA2NHB4O1xuICAgIGdyaWQtcm93LWdhcDogMjRweDtcbiAgICBwYWRkaW5nOiAwOyB9XG4gICAgLmVlLW1haW4gLmZlYXR1cmVzIGxpIHtcbiAgICAgIGxpc3Qtc3R5bGU6IG5vbmU7IH1cbiAgICAuZWUtbWFpbiAuZmVhdHVyZXMgLmljb24ge1xuICAgICAgbWFyZ2luLWJvdHRvbTogMTZweDtcbiAgICAgIHdpZHRoOiA0OHB4OyB9XG4gICAgQG1lZGlhIChtYXgtd2lkdGg6IDk5MXB4KSB7XG4gICAgICAuZWUtbWFpbiAuZmVhdHVyZXMge1xuICAgICAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IDFmciAxZnI7IH0gfVxuICAgIEBtZWRpYSAobWF4LXdpZHRoOiA1MDBweCkge1xuICAgICAgLmVlLW1haW4gLmZlYXR1cmVzIHtcbiAgICAgICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiAxZnI7IH0gfVxuICAuZWUtbWFpbiAuY3RhLWNhcmQge1xuICAgIGJhY2tncm91bmQ6ICM0YThiZmM7XG4gICAgYm9yZGVyLXJhZGl1czogMTJweDtcbiAgICBwYWRkaW5nOiA3MnB4IDcycHggNjBweDtcbiAgICBiYWNrZ3JvdW5kLXNpemU6IGNvdmVyO1xuICAgIGNvbG9yOiB3aGl0ZTsgfVxuICAgIC5lZS1tYWluIC5jdGEtY2FyZCAuZWUtc2VjdGlvbl9fdGl0bGUsXG4gICAgLmVlLW1haW4gLmN0YS1jYXJkIHAge1xuICAgICAgY29sb3I6ICNDRUQ2RTA7IH1cblxuI2hvdy10byB7XG4gIG1hcmdpbi1ib3R0b206IDA7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgcGFkZGluZy10b3A6IDE0MHB4OyB9XG4gICNob3ctdG86OmJlZm9yZSB7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIHRvcDogMDtcbiAgICB3aWR0aDogMTAwdnc7XG4gICAgYm9yZGVyLXRvcDogMXB4IHNvbGlkIHJnYmEoMTQ2LCAxNjEsIDE3OSwgMC4zKTtcbiAgICBjb250ZW50OiAnJztcbiAgICBkaXNwbGF5OiBibG9jazsgfVxuXG4uY2FyZHMtLXJlZC12LWJsdWUge1xuICBkaXNwbGF5OiBmbGV4O1xuICB0ZXh0LWFsaWduOiBsZWZ0O1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgbWFyZ2luLXRvcDogMzhweDsgfVxuICAuY2FyZHMtLXJlZC12LWJsdWVfX2NhcmQge1xuICAgIGJhY2tncm91bmQ6ICM3Q0FCRkY7XG4gICAgYm9yZGVyLXJhZGl1czogOHB4O1xuICAgIHBhZGRpbmc6IDQwcHggNDBweCAzNHB4O1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICBhbGlnbi1pdGVtczogZmxleC1zdGFydDtcbiAgICBtYXJnaW4tcmlnaHQ6IDI0cHg7XG4gICAgZmxleDogMCAxIDQ2MHB4O1xuICAgIGJvcmRlci1yYWRpdXM6IDhweDsgfVxuICAgIC5jYXJkcy0tcmVkLXYtYmx1ZV9fY2FyZDpsYXN0LWNoaWxkIHtcbiAgICAgIG1hcmdpbi1yaWdodDogMDsgfVxuICAgIC5jYXJkcy0tcmVkLXYtYmx1ZV9fY2FyZDpudGgtY2hpbGQoMikge1xuICAgICAgYmFja2dyb3VuZDogI0Y4OEQ4RDsgfVxuICAgICAgLmNhcmRzLS1yZWQtdi1ibHVlX19jYXJkOm50aC1jaGlsZCgyKSAuYnRuIHtcbiAgICAgICAgYmFja2dyb3VuZDogcmdiYSgyNDQsIDg0LCA4NCwgMC41KTsgfVxuICAuY2FyZHMtLXJlZC12LWJsdWUgaDMge1xuICAgIGZvbnQtc2l6ZTogMjRweDtcbiAgICBsaW5lLWhlaWdodDogbm9ybWFsO1xuICAgIGxldHRlci1zcGFjaW5nOiAtMC4wMmVtO1xuICAgIGNvbG9yOiB3aGl0ZTtcbiAgICBtYXJnaW4tdG9wOiAwOyB9XG4gIC5jYXJkcy0tcmVkLXYtYmx1ZSBwIHtcbiAgICBmb250LXNpemU6IDE4cHg7XG4gICAgbGluZS1oZWlnaHQ6IDI2cHg7XG4gICAgbGV0dGVyLXNwYWNpbmc6IC0wLjAyZW07XG4gICAgY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC43KTtcbiAgICBtYXJnaW4tdG9wOiAwO1xuICAgIG1hcmdpbi1ib3R0b206IDIycHg7IH1cbiAgLmNhcmRzLS1yZWQtdi1ibHVlIC5idG4ge1xuICAgIG1hcmdpbi10b3A6IGF1dG87XG4gICAgZm9udC1zaXplOiAxNHB4O1xuICAgIGxpbmUtaGVpZ2h0OiAyMnB4O1xuICAgIGxldHRlci1zcGFjaW5nOiAwLjA5ZW07XG4gICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcbiAgICBwYWRkaW5nOiAxMHB4IDE0cHg7XG4gICAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgICBib3JkZXItcmFkaXVzOiA4cHg7XG4gICAgYmFja2dyb3VuZDogcmdiYSg1NiwgMTI4LCAyNTUsIDAuNSk7IH1cbiAgICAuY2FyZHMtLXJlZC12LWJsdWUgLmJ0biBpb24taWNvbiB7XG4gICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgICBoZWlnaHQ6IDE0cHg7XG4gICAgICB3aWR0aDogMTRweDtcbiAgICAgIHZlcnRpY2FsLWFsaWduOiAtMnB4OyB9XG4gIEBtZWRpYSAobWF4LXdpZHRoOiA3NjdweCkge1xuICAgIC5jYXJkcy0tcmVkLXYtYmx1ZSB7XG4gICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsgfVxuICAgICAgLmNhcmRzLS1yZWQtdi1ibHVlX19jYXJkIHtcbiAgICAgICAgZmxleDogYXV0bztcbiAgICAgICAgbWFyZ2luLXJpZ2h0OiAwO1xuICAgICAgICBtYXJnaW4tdG9wOiAyMHB4O1xuICAgICAgICBtYXgtd2lkdGg6IDQ2MHB4OyB9IH1cblxuYXNpZGUge1xuICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoMTgwZGVnLCAjRjlGQUZCIDAlLCAjRkZGRkZGIDEwMCUpO1xuICBtYXJnaW4tdG9wOiAtNjBweDtcbiAgcGFkZGluZy10b3A6IDIwMHB4O1xuICBwYWRkaW5nLWJvdHRvbTogMTIwcHg7IH1cbiAgYXNpZGUgcCB7XG4gICAgY29sb3I6ICM0MTRENUM7IH1cbiAgYXNpZGUgLmNvbnRlbnQge1xuICAgIG1heC13aWR0aDogNDMycHg7XG4gICAgbWFyZ2luOiAwIGF1dG87XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgIGRpc3BsYXk6IGJsb2NrOyB9XG5cbi5lZS1nZXQtc3RhcnRlZCB7XG4gIG1heC13aWR0aDogNzAwcHg7IH1cbiAgLmVlLWdldC1zdGFydGVkIGgzIHtcbiAgICBjb2xvcjogIzQxNEQ1QzsgfVxuXG4ucmVzb3VyY2VzIHtcbiAgcGFkZGluZy1ib3R0b206IDEyMHB4OyB9XG4gIEBtZWRpYSAobWF4LXdpZHRoOiA3NjhweCkge1xuICAgIC5yZXNvdXJjZXMge1xuICAgICAgcGFkZGluZy1ib3R0b206IDYwcHg7IH0gfVxuICAucmVzb3VyY2VzIC5jYXJkcyB7XG4gICAgbGlzdC1zdHlsZS10eXBlOiBub25lO1xuICAgIG1hcmdpbjogMDtcbiAgICBwYWRkaW5nOiAwO1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgbWFyZ2luLWxlZnQ6IC0yNHB4O1xuICAgIG1hcmdpbi1yaWdodDogLTI0cHg7IH1cbiAgLnJlc291cmNlcyBoZ3JvdXAge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xuICAgIGFsaWduLWl0ZW1zOiBiYXNlbGluZTsgfVxuICAgIC5yZXNvdXJjZXMgaGdyb3VwIGgzIHtcbiAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7XG4gICAgICBsaW5lLWhlaWdodDogbm9ybWFsO1xuICAgICAgZm9udC1zaXplOiAyOHB4O1xuICAgICAgbGV0dGVyLXNwYWNpbmc6IC0wLjAyZW07XG4gICAgICBjb2xvcjogIzFBMjMyRjtcbiAgICAgIG1hcmdpbi1ib3R0b206IDA7IH1cbiAgICAucmVzb3VyY2VzIGhncm91cCBoNCB7XG4gICAgICBmb250LXdlaWdodDogNjAwO1xuICAgICAgZm9udC1zaXplOiAyNHB4O1xuICAgICAgbGluZS1oZWlnaHQ6IG5vcm1hbDtcbiAgICAgIGxldHRlci1zcGFjaW5nOiAtMC4wMmVtO1xuICAgICAgY29sb3I6ICMxQTIzMkY7IH1cbiAgICAucmVzb3VyY2VzIGhncm91cCBoNSB7XG4gICAgICBmb250LXdlaWdodDogNzAwO1xuICAgICAgbGluZS1oZWlnaHQ6IDE7XG4gICAgICBmb250LXNpemU6IDE0cHg7XG4gICAgICBsZXR0ZXItc3BhY2luZzogMC4wOGVtO1xuICAgICAgY29sb3I6ICMzODgwRkY7XG4gICAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlOyB9XG4gICAgLnJlc291cmNlcyBoZ3JvdXAgaW9uLWljb24ge1xuICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDJweCk7IH1cbiAgLnJlc291cmNlcyAuY2FyZHMgbGkge1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIGZsZXg6IDAgMCAzMy4zMyU7XG4gICAgcGFkZGluZzogMjRweDsgfVxuICAgIC5yZXNvdXJjZXMgLmNhcmRzIGxpIGEge1xuICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICB3aWR0aDogMTAwJTsgfVxuICAgIC5yZXNvdXJjZXMgLmNhcmRzIGxpIC5pbWctd3JhcHBlciB7XG4gICAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgICAgYm9yZGVyLXJhZGl1czogNnB4OyB9XG4gICAgLnJlc291cmNlcyAuY2FyZHMgbGkgaW1nIHtcbiAgICAgIHdpZHRoOiAxMDAlOyB9XG4gICAgLnJlc291cmNlcyAuY2FyZHMgbGkgaDYge1xuICAgICAgbGluZS1oZWlnaHQ6IDIzcHg7XG4gICAgICBmb250LXNpemU6IDEycHg7XG4gICAgICBsZXR0ZXItc3BhY2luZzogMC4xMmVtO1xuICAgICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcbiAgICAgIGNvbG9yOiAjQjJCRUNEO1xuICAgICAgbWFyZ2luLWJvdHRvbTogMDtcbiAgICAgIG1hcmdpbi10b3A6IDE2cHg7IH1cbiAgICAucmVzb3VyY2VzIC5jYXJkcyBsaSBoNCB7XG4gICAgICBmb250LXNpemU6IDIwcHg7XG4gICAgICBtYXJnaW4tdG9wOiAxMHB4O1xuICAgICAgY29sb3I6ICMxQTIzMkY7XG4gICAgICBmb250LXdlaWdodDogNjAwOyB9XG4gICAgLnJlc291cmNlcyAuY2FyZHMgbGkgcCB7XG4gICAgICBjb2xvcjogIzVCNzA4QjtcbiAgICAgIGxpbmUtaGVpZ2h0OiAyMnB4O1xuICAgICAgZm9udC1zaXplOiAxNHB4O1xuICAgICAgbGV0dGVyLXNwYWNpbmc6IC0wLjAyZW07IH1cbiAgQG1lZGlhIChtYXgtd2lkdGg6IDk5MnB4KSB7XG4gICAgLnJlc291cmNlcyAuY2FyZHMge1xuICAgICAgbWFyZ2luLWxlZnQ6IC0xMnB4O1xuICAgICAgbWFyZ2luLXJpZ2h0OiAtMTJweDsgfVxuICAgIC5yZXNvdXJjZXMgLmNhcmRzIGxpIHtcbiAgICAgIHBhZGRpbmc6IDEycHg7IH0gfVxuICBAbWVkaWEgKG1heC13aWR0aDogNzY4cHgpIHtcbiAgICAucmVzb3VyY2VzIC5jYXJkcyB7XG4gICAgICBmbGV4LXdyYXA6IHdyYXA7IH1cbiAgICAucmVzb3VyY2VzIC5jYXJkcyBsaSB7XG4gICAgICBmbGV4OiAwIDAgNTAlOyB9IH1cbiAgQG1lZGlhIChtYXgtd2lkdGg6IDQ4MHB4KSB7XG4gICAgLnJlc291cmNlcyAuY2FyZHMgbGkge1xuICAgICAgZmxleDogMCAwIDEwMCU7IH1cbiAgICAucmVzb3VyY2VzIGg1IHtcbiAgICAgIGRpc3BsYXk6IG5vbmU7IH0gfVxuXG4uZWUtbWFpbiAuZmVhdHVyZXMgbGkgcCxcbi5lZS1tYWluIC5jYXJkcyBsaSBwLFxuLnJlc291cmNlcyAuZmVhdHVyZXMgbGkgcCxcbi5yZXNvdXJjZXMgLmNhcmRzIGxpIHAge1xuICBmb250LXNpemU6IDE2cHg7XG4gIGxpbmUtaGVpZ2h0OiAyOXB4O1xuICBsZXR0ZXItc3BhY2luZzogLTAuMDFlbTtcbiAgY29sb3I6ICM3Mzg0OUE7XG4gIG1hcmdpbi10b3A6IDA7IH1cblxuLmVlLW1haW4gLmZlYXR1cmVzIGxpIGg0LFxuLmVlLW1haW4gLmNhcmRzIGxpIGg0LFxuLnJlc291cmNlcyAuZmVhdHVyZXMgbGkgaDQsXG4ucmVzb3VyY2VzIC5jYXJkcyBsaSBoNCB7XG4gIGZvbnQtc2l6ZTogMjBweDtcbiAgbGluZS1oZWlnaHQ6IG5vcm1hbDtcbiAgbGV0dGVyLXNwYWNpbmc6IC0wLjAyZW07XG4gIGNvbG9yOiAjMDIwODE0O1xuICBmb250LXdlaWdodDogNjAwOyB9XG5cbi5yZXNvdXJjZXMgLmNhcmRzIHtcbiAgbWFyZ2luLXRvcDogMCAhaW1wb3J0YW50O1xuICB0ZXh0LWFsaWduOiBsZWZ0O1xuICBmbGV4LXdyYXA6IHdyYXA7IH1cbiAgLnJlc291cmNlcyAuY2FyZHMgLmltZy13cmFwcGVyIHtcbiAgICBib3JkZXItcmFkaXVzOiA2cHg7IH1cbiAgICAucmVzb3VyY2VzIC5jYXJkcyAuaW1nLXdyYXBwZXIgKyBoNCB7XG4gICAgICBtYXJnaW4tdG9wOiAyNHB4OyB9XG4gIEBtZWRpYSAobWluLXdpZHRoOiAxMjIwcHgpIHtcbiAgICAucmVzb3VyY2VzIC5jYXJkcyB7XG4gICAgICBtYXJnaW4tbGVmdDogLTQwcHg7XG4gICAgICBtYXJnaW4tcmlnaHQ6IC00MHB4OyB9XG4gICAgICAucmVzb3VyY2VzIC5jYXJkcyBsaSB7XG4gICAgICAgIHBhZGRpbmc6IDQwcHg7IH0gfVxuXG4ucmVzb3VyY2VzIC5yZXNvdXJjZXNfX2N1c3RvbWVyLWxvZ29zIHtcbiAgZGlzcGxheTogZmxleDtcbiAgbWFyZ2luOiAyNnB4IGF1dG8gMDtcbiAgcGFkZGluZzogMDtcbiAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xuICBtYXgtd2lkdGg6IDc4MHB4O1xuICB3aWR0aDogMTAwJTsgfVxuICAucmVzb3VyY2VzIC5yZXNvdXJjZXNfX2N1c3RvbWVyLWxvZ29zIGxpIHtcbiAgICBiYWNrZ3JvdW5kOiB1cmwoXCIvaW1nL2VudGVycHJpc2UvY3VzdG9tZXItbG9nb3MucG5nXCIpO1xuICAgIGJhY2tncm91bmQtc2l6ZTogNDI4cHggNDZweDtcbiAgICBiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0O1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIGhlaWdodDogNDZweDsgfVxuICBAbWVkaWEgKG1heC13aWR0aDogNzY4cHgpIHtcbiAgICAucmVzb3VyY2VzIC5yZXNvdXJjZXNfX2N1c3RvbWVyLWxvZ29zIHtcbiAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICAgICAgZmxleC13cmFwOiB3cmFwO1xuICAgICAgbWF4LXdpZHRoOiA0NjBweDsgfVxuICAgICAgLnJlc291cmNlcyAucmVzb3VyY2VzX19jdXN0b21lci1sb2dvcyBsaSB7XG4gICAgICAgIG1hcmdpbjogMjBweDsgfSB9XG4gIC5yZXNvdXJjZXMgLnJlc291cmNlc19fY3VzdG9tZXItbG9nb3MgLm1hc3RlcmNhcmQge1xuICAgIHdpZHRoOiA1OHB4OyB9XG4gIC5yZXNvdXJjZXMgLnJlc291cmNlc19fY3VzdG9tZXItbG9nb3MgLm5hdGlvbndpZGUge1xuICAgIGJhY2tncm91bmQtcG9zaXRpb246IC01OHB4IDA7XG4gICAgd2lkdGg6IDMzcHg7IH1cbiAgLnJlc291cmNlcyAucmVzb3VyY2VzX19jdXN0b21lci1sb2dvcyAudW5pcWxvIHtcbiAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtOTFweCAwO1xuICAgIHdpZHRoOiA2NXB4OyB9XG4gIC5yZXNvdXJjZXMgLnJlc291cmNlc19fY3VzdG9tZXItbG9nb3MgLmlibSB7XG4gICAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTE1NnB4IDA7XG4gICAgd2lkdGg6IDY0cHg7IH1cbiAgLnJlc291cmNlcyAucmVzb3VyY2VzX19jdXN0b21lci1sb2dvcyAuaW5nIHtcbiAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMjIycHggMDtcbiAgICB3aWR0aDogMTAzcHg7IH1cbiAgLnJlc291cmNlcyAucmVzb3VyY2VzX19jdXN0b21lci1sb2dvcyAuc2FwIHtcbiAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMzI2cHggMDtcbiAgICB3aWR0aDogNTZweDsgfVxuICAucmVzb3VyY2VzIC5yZXNvdXJjZXNfX2N1c3RvbWVyLWxvZ29zIC5uYXNhIHtcbiAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMzgwcHggMDtcbiAgICB3aWR0aDogNTBweDsgfVxuXG4uYmFubmVyIHtcbiAgYmFja2dyb3VuZDogI2ZmZjtcbiAgdGV4dC1hbGlnbjogbGVmdDsgfVxuICAuYmFubmVyIC5jb250YWluZXIge1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsgfVxuICAuYmFubmVyIC5lZS1oZXJvIHtcbiAgICBtYXgtd2lkdGg6IDQ4MHB4OyB9XG4gIC5iYW5uZXIgLmVlLWhlcm8gaDQsXG4gIC5iYW5uZXIgLmVlLWhlcm8gaDEsXG4gIC5iYW5uZXIgLmVlLWhlcm8gcCB7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIHotaW5kZXg6IDI7IH1cblxuQG1lZGlhIChtYXgtd2lkdGg6IDc2N3B4KSB7XG4gIC5lZS1oZXJvIHtcbiAgICBwYWRkaW5nLWJvdHRvbTogODBweDsgfSB9XG5cbi5zb2x1dGlvbi1oZXJvIGg0LFxuLnNvbHV0aW9uLWhlcm8gaDIsXG4uc29sdXRpb24taGVybyBwLFxuLnNvbHV0aW9uLWhlcm8gYSB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgei1pbmRleDogMjsgfVxuXG4uc29sdXRpb24taGVybzo6YWZ0ZXIge1xuICBiYWNrZ3JvdW5kLXNpemU6IGNvdmVyO1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHotaW5kZXg6IDE7XG4gIGNvbnRlbnQ6ICcnO1xuICBkaXNwbGF5OiBibG9jazsgfVxuXG4uc29sdXRpb24taGVyby0tY3Jvc3MtcGxhdGZvcm06OmFmdGVyIHtcbiAgYmFja2dyb3VuZDogdXJsKFwiL2ltZy9zb2x1dGlvbnMvYmctY3Jvc3MtcGxhdGZvcm0taGVhZGVyLnN2Z1wiKTtcbiAgd2lkdGg6IDg1MHB4O1xuICBoZWlnaHQ6IDQzMXB4O1xuICByaWdodDogY2FsYyg1MCUgLSA3OTZweCk7XG4gIHRvcDogMTM4cHg7IH1cblxuLnNvbHV0aW9uLWhlcm8tLWRlc2lnbi1zeXN0ZW06OmFmdGVyIHtcbiAgYmFja2dyb3VuZDogdXJsKFwiL2ltZy9zb2x1dGlvbnMvZGVzaWduLXN5c3RlbXMtYmFubmVyLnN2Z1wiKTtcbiAgd2lkdGg6IDc1NXB4O1xuICBoZWlnaHQ6IDU5M3B4O1xuICByaWdodDogLTcycHg7XG4gIHRvcDogNzRweDsgfVxuXG4uc29sdXRpb24taGVyby0tcHdhOjphZnRlciB7XG4gIGJhY2tncm91bmQ6IHVybChcIi9pbWcvZW50ZXJwcmlzZS9wd2EucG5nXCIpO1xuICB3aWR0aDogNTEzcHg7XG4gIGhlaWdodDogNTIwcHg7XG4gIGJhY2tncm91bmQtc2l6ZTogNTEzcHggNTIwcHg7XG4gIHJpZ2h0OiA1MHB4O1xuICB0b3A6IDc0cHg7IH1cblxuLnJpZ2h0IC5zb2x1dGlvbi1oZXJvLS1kZXNpZ24tc3lzdGVtOjphZnRlciB7XG4gIHJpZ2h0OiBhdXRvO1xuICBsZWZ0OiAtNzJweDsgfVxuXG4jc3RpY2t5LWJhciB7XG4gIGJveC1zaGFkb3c6IDBweCAxcHggMHB4ICNFOUVERjMsIDBweCAtMXB4IDBweCAjRTlFREYzO1xuICBiYWNrZ3JvdW5kOiB3aGl0ZTtcbiAgcG9zaXRpb246IHN0aWNreTtcbiAgdG9wOiAwO1xuICB6LWluZGV4OiAxOyB9XG4gICNzdGlja3ktYmFyIHVsIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcbiAgICBwYWRkaW5nLXRvcDogMTdweDtcbiAgICBwYWRkaW5nLWJvdHRvbTogMTdweDtcbiAgICBwYWRkaW5nLWxlZnQ6IDE1cHg7XG4gICAgZmxleC13cmFwOiB3cmFwOyB9XG4gICAgQG1lZGlhIChtYXgtd2lkdGg6IDk5MXB4KSB7XG4gICAgICAjc3RpY2t5LWJhciB1bCB7XG4gICAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYXJvdW5kOyB9IH1cbiAgICAjc3RpY2t5LWJhciB1bDo6YmVmb3JlLCAjc3RpY2t5LWJhciB1bDo6YWZ0ZXIge1xuICAgICAgZGlzcGxheTogbm9uZTsgfVxuICAjc3RpY2t5LWJhciBsaSB7XG4gICAgbGlzdC1zdHlsZTogbm9uZTsgfVxuICAgICNzdGlja3ktYmFyIGxpLmFjdGl2ZSBhOm5vdCguYnRuKSB7XG4gICAgICBjb2xvcjogIzRhOGJmYzsgfVxuICAjc3RpY2t5LWJhciBhIHtcbiAgICBwYWRkaW5nOiAxMHB4IDA7XG4gICAgZm9udC1zaXplOiAxNHB4O1xuICAgIGxpbmUtaGVpZ2h0OiAyMnB4O1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICBsZXR0ZXItc3BhY2luZzogMC4wOGVtO1xuICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XG4gICAgZGlzcGxheTogYmxvY2s7IH1cbiAgICAjc3RpY2t5LWJhciBhOmhvdmVyLCAjc3RpY2t5LWJhciBhOmFjdGl2ZSwgI3N0aWNreS1iYXIgYTpmb2N1cyB7XG4gICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcbiAgICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTsgfVxuICAgICNzdGlja3ktYmFyIGEuYnRuIHtcbiAgICAgIHBhZGRpbmc6IDExcHggMTRweCA4cHg7XG4gICAgICBtYXJnaW4tcmlnaHQ6IDNweDtcbiAgICAgIGJvcmRlci1yYWRpdXM6IDEwcHg7XG4gICAgICBjb2xvcjogd2hpdGU7XG4gICAgICBmb250LXdlaWdodDogNjAwOyB9XG4gICAgICAjc3RpY2t5LWJhciBhLmJ0bjpob3ZlciwgI3N0aWNreS1iYXIgYS5idG46YWN0aXZlLCAjc3RpY2t5LWJhciBhLmJ0bjpmb2N1cyB7XG4gICAgICAgIGNvbG9yOiB3aGl0ZTtcbiAgICAgICAgYmFja2dyb3VuZDogIzMxN2JmYzsgfVxuICAjc3RpY2t5LWJhciAuYW5jaG9yIHtcbiAgICBjb2xvcjogIzkyQTFCMztcbiAgICBmb250LXdlaWdodDogNTAwOyB9XG4gICAgI3N0aWNreS1iYXIgLmFuY2hvci5hY3RpdmUsICNzdGlja3ktYmFyIC5hbmNob3I6aG92ZXIge1xuICAgICAgY29sb3I6ICM0RDhERkY7IH1cblxubWFpbiB7XG4gIGxldHRlci1zcGFjaW5nOiAtMC4wMjhlbTtcbiAgY29sb3I6ICMyRjNBNDg7IH1cbiAgbWFpbiBoMiB7XG4gICAgZm9udC1zaXplOiA0MHB4O1xuICAgIGxpbmUtaGVpZ2h0OiA1MHB4O1xuICAgIGxldHRlci1zcGFjaW5nOiAtMC4wM2VtO1xuICAgIGNvbG9yOiAjMDIwODE0O1xuICAgIG1hcmdpbi1ib3R0b206IDE1cHg7IH1cbiAgbWFpbiBoMyB7XG4gICAgY29sb3I6ICM0MTRENUM7XG4gICAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgICBtYXJnaW4tYm90dG9tOiA0cHg7IH1cbiAgICBtYWluIGgzICsgaDIge1xuICAgICAgbWFyZ2luLXRvcDogMDsgfVxuICBtYWluIHAge1xuICAgIGZvbnQtc2l6ZTogMjBweDtcbiAgICBsaW5lLWhlaWdodDogMzFweDtcbiAgICBtYXJnaW4tYm90dG9tOiA0MHB4OyB9XG4gIG1haW4gdWwge1xuICAgIHBhZGRpbmctbGVmdDogMDsgfVxuICBtYWluIGxpIHtcbiAgICBmb250LXNpemU6IDE2cHg7XG4gICAgbGluZS1oZWlnaHQ6IDIzcHg7XG4gICAgY29sb3I6ICMxQTIzMkY7XG4gICAgbWFyZ2luLWJvdHRvbTogMzJweDtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgbGlzdC1zdHlsZTogbm9uZTtcbiAgICBwYWRkaW5nLWxlZnQ6IDMwcHg7XG4gICAgbGV0dGVyLXNwYWNpbmc6IC0uMDE2ZW07IH1cbiAgICBtYWluIGxpOjpiZWZvcmUge1xuICAgICAgY29udGVudDogdXJsKCdkYXRhOmltYWdlL3N2Zyt4bWwsXFxhICAgICAgICAgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgdmlld0JveD1cIjAgMCA1MTIgNTEyXCI+XFxhICAgICAgICAgICA8cGF0aCBkPVwiTTE4Ni4zMDEgMzM5Ljg5M0w5NiAyNDkuNDYxbC0zMiAzMC41MDdMMTg2LjMwMSA0MDIgNDQ4IDE0MC41MDYgNDE2IDExMHpcIi8+XFxhICAgICAgICAgPC9zdmc+Jyk7XG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICBsZWZ0OiAwO1xuICAgICAgdG9wOiAxcHg7XG4gICAgICBoZWlnaHQ6IDE1cHg7XG4gICAgICB3aWR0aDogMTVweDtcbiAgICAgIGZpbGw6ICMxQTIzMkY7XG4gICAgICBkaXNwbGF5OiBibG9jazsgfVxuICBtYWluIHNlY3Rpb24ge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlOyB9XG4gICAgbWFpbiBzZWN0aW9uLmNvbnRhaW5lcjo6YmVmb3JlLCBtYWluIHNlY3Rpb24uY29udGFpbmVyOjphZnRlciB7XG4gICAgICBkaXNwbGF5OiBub25lOyB9XG4gICAgbWFpbiBzZWN0aW9uLnJpZ2h0IHtcbiAgICAgIGZsZXgtZGlyZWN0aW9uOiByb3ctcmV2ZXJzZTsgfVxuICAgIG1haW4gc2VjdGlvbi5jZW50ZXIge1xuICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsgfVxuICAgICAgbWFpbiBzZWN0aW9uLmNlbnRlciAuY29udGVudCB7XG4gICAgICAgIG1heC13aWR0aDogNzk4cHg7XG4gICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsgfVxuICAgICAgICBtYWluIHNlY3Rpb24uY2VudGVyIC5jb250ZW50IHVsIHtcbiAgICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICAgIGZsZXgtd3JhcDogd3JhcDtcbiAgICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47IH1cbiAgICAgICAgICBAbWVkaWEgKG1heC13aWR0aDogOTkxcHgpIHtcbiAgICAgICAgICAgIG1haW4gc2VjdGlvbi5jZW50ZXIgLmNvbnRlbnQgdWwge1xuICAgICAgICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtc3RhcnQ7IH0gfVxuICAgICAgICBtYWluIHNlY3Rpb24uY2VudGVyIC5jb250ZW50IGxpIHtcbiAgICAgICAgICBtYXgtd2lkdGg6IDM3NnB4O1xuICAgICAgICAgIHdpZHRoOiAxMDAlOyB9XG4gIG1haW4gLmNvbnRlbnQge1xuICAgIG1heC13aWR0aDogNDgycHg7XG4gICAgbWFyZ2luOiAyMzJweCAwIDE4NHB4OyB9XG4gICAgQG1lZGlhIChtYXgtd2lkdGg6IDk5MXB4KSB7XG4gICAgICBtYWluIC5jb250ZW50IHtcbiAgICAgICAgbWF4LXdpZHRoOiAxMDAlO1xuICAgICAgICBtYXJnaW46IDYwcHggYXV0bzsgfSB9XG4gIG1haW4gYXNpZGUge1xuICAgIGJhY2tncm91bmQ6ICNGNkY4RkI7XG4gICAgcGFkZGluZy10b3A6IDExNHB4O1xuICAgIHBhZGRpbmctYm90dG9tOiAxMjBweDsgfVxuICAgIG1haW4gYXNpZGUgcCB7XG4gICAgICBjb2xvcjogIzQxNEQ1QzsgfVxuICAgIG1haW4gYXNpZGUgLmNvbnRlbnQge1xuICAgICAgbWF4LXdpZHRoOiA0MzJweDtcbiAgICAgIG1hcmdpbjogMCBhdXRvO1xuICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgICAgZGlzcGxheTogYmxvY2s7IH1cbiAgbWFpbiAuZ2V0LXN0YXJ0ZWQge1xuICAgIG1heC13aWR0aDogNzAwcHg7IH1cbiAgbWFpbiAuY2FyZHMge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgdGV4dC1hbGlnbjogbGVmdDtcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgICBtYXJnaW4tdG9wOiAzOHB4OyB9XG4gICAgbWFpbiAuY2FyZHMgLmNhcmQge1xuICAgICAgYmFja2dyb3VuZDogIzdDQUJGRjtcbiAgICAgIGJvcmRlci1yYWRpdXM6IDhweDtcbiAgICAgIHBhZGRpbmc6IDQwcHggNDBweCAzNHB4O1xuICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICBhbGlnbi1pdGVtczogZmxleC1zdGFydDtcbiAgICAgIG1hcmdpbi1yaWdodDogMjRweDtcbiAgICAgIGZsZXg6IDAgMSA0NjBweDtcbiAgICAgIGJvcmRlci1yYWRpdXM6IDhweDsgfVxuICAgICAgbWFpbiAuY2FyZHMgLmNhcmQ6bGFzdC1jaGlsZCB7XG4gICAgICAgIG1hcmdpbi1yaWdodDogMDsgfVxuICAgICAgbWFpbiAuY2FyZHMgLmNhcmQ6bnRoLWNoaWxkKDIpIHtcbiAgICAgICAgYmFja2dyb3VuZDogI0Y4OEQ4RDsgfVxuICAgICAgICBtYWluIC5jYXJkcyAuY2FyZDpudGgtY2hpbGQoMikgLmJ0biB7XG4gICAgICAgICAgYmFja2dyb3VuZDogcmdiYSgyNDQsIDg0LCA4NCwgMC41KTsgfVxuICAgIG1haW4gLmNhcmRzIGgzIHtcbiAgICAgIGZvbnQtc2l6ZTogMjRweDtcbiAgICAgIGxpbmUtaGVpZ2h0OiBub3JtYWw7XG4gICAgICBsZXR0ZXItc3BhY2luZzogLTAuMDJlbTtcbiAgICAgIGNvbG9yOiB3aGl0ZTtcbiAgICAgIG1hcmdpbi10b3A6IDA7IH1cbiAgICBtYWluIC5jYXJkcyBwIHtcbiAgICAgIGZvbnQtc2l6ZTogMThweDtcbiAgICAgIGxpbmUtaGVpZ2h0OiAyNnB4O1xuICAgICAgbGV0dGVyLXNwYWNpbmc6IC0wLjAyZW07XG4gICAgICBjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjcpOyB9XG4gICAgbWFpbiAuY2FyZHMgLmJ0biB7XG4gICAgICBtYXJnaW4tdG9wOiBhdXRvO1xuICAgICAgZm9udC1zaXplOiAxNHB4O1xuICAgICAgbGluZS1oZWlnaHQ6IDIycHg7XG4gICAgICBsZXR0ZXItc3BhY2luZzogMC4wOWVtO1xuICAgICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcbiAgICAgIHBhZGRpbmc6IDEwcHggMTRweDtcbiAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7XG4gICAgICBib3JkZXItcmFkaXVzOiA4cHg7XG4gICAgICBiYWNrZ3JvdW5kOiByZ2JhKDU2LCAxMjgsIDI1NSwgMC41KTsgfVxuICAgICAgbWFpbiAuY2FyZHMgLmJ0biBpb24taWNvbiB7XG4gICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICAgICAgaGVpZ2h0OiAxNHB4O1xuICAgICAgICB3aWR0aDogMTRweDtcbiAgICAgICAgdmVydGljYWwtYWxpZ246IC0ycHg7IH1cbiAgICBAbWVkaWEgKG1heC13aWR0aDogNzY3cHgpIHtcbiAgICAgIG1haW4gLmNhcmRzIHtcbiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsgfVxuICAgICAgICBtYWluIC5jYXJkcyAuY2FyZCB7XG4gICAgICAgICAgZmxleDogYXV0bztcbiAgICAgICAgICBtYXJnaW4tcmlnaHQ6IDA7XG4gICAgICAgICAgbWFyZ2luLXRvcDogMjBweDsgfSB9XG5cbi5yZXNvdXJjZXMge1xuICBtYXJnaW4tdG9wOiA5NnB4OyB9XG5cbi5yZXNvdXJjZXMge1xuICBwYWRkaW5nLWJvdHRvbTogMTIwcHg7IH1cbiAgQG1lZGlhIChtYXgtd2lkdGg6IDc2OHB4KSB7XG4gICAgLnJlc291cmNlcyB7XG4gICAgICBwYWRkaW5nLWJvdHRvbTogNjBweDsgfSB9XG4gIC5yZXNvdXJjZXMgLmNhcmRzIHtcbiAgICBsaXN0LXN0eWxlLXR5cGU6IG5vbmU7XG4gICAgbWFyZ2luOiAwO1xuICAgIHBhZGRpbmc6IDA7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBtYXJnaW4tbGVmdDogLTI0cHg7XG4gICAgbWFyZ2luLXJpZ2h0OiAtMjRweDsgfVxuICAucmVzb3VyY2VzIGhncm91cCB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG4gICAgYWxpZ24taXRlbXM6IGJhc2VsaW5lOyB9XG4gICAgLnJlc291cmNlcyBoZ3JvdXAgaDMge1xuICAgICAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgICAgIGxpbmUtaGVpZ2h0OiBub3JtYWw7XG4gICAgICBmb250LXNpemU6IDI4cHg7XG4gICAgICBsZXR0ZXItc3BhY2luZzogLTAuMDJlbTtcbiAgICAgIGNvbG9yOiAjMUEyMzJGO1xuICAgICAgbWFyZ2luLWJvdHRvbTogMDsgfVxuICAgIC5yZXNvdXJjZXMgaGdyb3VwIGg0IHtcbiAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7XG4gICAgICBmb250LXNpemU6IDI0cHg7XG4gICAgICBsaW5lLWhlaWdodDogbm9ybWFsO1xuICAgICAgbGV0dGVyLXNwYWNpbmc6IC0wLjAyZW07XG4gICAgICBjb2xvcjogIzFBMjMyRjsgfVxuICAgIC5yZXNvdXJjZXMgaGdyb3VwIGg1IHtcbiAgICAgIGZvbnQtd2VpZ2h0OiA3MDA7XG4gICAgICBsaW5lLWhlaWdodDogMTtcbiAgICAgIGZvbnQtc2l6ZTogMTRweDtcbiAgICAgIGxldHRlci1zcGFjaW5nOiAwLjA4ZW07XG4gICAgICBjb2xvcjogIzM4ODBGRjtcbiAgICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7IH1cbiAgICAucmVzb3VyY2VzIGhncm91cCBpb24taWNvbiB7XG4gICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMnB4KTsgfVxuICAucmVzb3VyY2VzIC5jYXJkcyBsaSB7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgZmxleDogMCAwIDMzLjMzJTtcbiAgICBwYWRkaW5nOiAyNHB4OyB9XG4gICAgLnJlc291cmNlcyAuY2FyZHMgbGkgYSB7XG4gICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgIHdpZHRoOiAxMDAlOyB9XG4gICAgLnJlc291cmNlcyAuY2FyZHMgbGkgLmltZy13cmFwcGVyIHtcbiAgICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgICBib3JkZXItcmFkaXVzOiA2cHg7IH1cbiAgICAucmVzb3VyY2VzIC5jYXJkcyBsaSBpbWcge1xuICAgICAgd2lkdGg6IDEwMCU7IH1cbiAgICAucmVzb3VyY2VzIC5jYXJkcyBsaSBoNiB7XG4gICAgICBsaW5lLWhlaWdodDogMjNweDtcbiAgICAgIGZvbnQtc2l6ZTogMTJweDtcbiAgICAgIGxldHRlci1zcGFjaW5nOiAwLjEyZW07XG4gICAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xuICAgICAgY29sb3I6ICNCMkJFQ0Q7XG4gICAgICBtYXJnaW4tYm90dG9tOiAwO1xuICAgICAgbWFyZ2luLXRvcDogMTZweDsgfVxuICAgIC5yZXNvdXJjZXMgLmNhcmRzIGxpIGg0IHtcbiAgICAgIGZvbnQtc2l6ZTogMjBweDtcbiAgICAgIG1hcmdpbi10b3A6IDEwcHg7XG4gICAgICBjb2xvcjogIzFBMjMyRjtcbiAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7IH1cbiAgICAucmVzb3VyY2VzIC5jYXJkcyBsaSBwIHtcbiAgICAgIGNvbG9yOiAjNUI3MDhCO1xuICAgICAgbGluZS1oZWlnaHQ6IDIycHg7XG4gICAgICBmb250LXNpemU6IDE0cHg7XG4gICAgICBsZXR0ZXItc3BhY2luZzogLTAuMDJlbTsgfVxuICBAbWVkaWEgKG1heC13aWR0aDogOTkycHgpIHtcbiAgICAucmVzb3VyY2VzIC5jYXJkcyB7XG4gICAgICBtYXJnaW4tbGVmdDogLTEycHg7XG4gICAgICBtYXJnaW4tcmlnaHQ6IC0xMnB4OyB9XG4gICAgLnJlc291cmNlcyAuY2FyZHMgbGkge1xuICAgICAgcGFkZGluZzogMTJweDsgfSB9XG4gIEBtZWRpYSAobWF4LXdpZHRoOiA3NjhweCkge1xuICAgIC5yZXNvdXJjZXMgLmNhcmRzIHtcbiAgICAgIGZsZXgtd3JhcDogd3JhcDsgfVxuICAgIC5yZXNvdXJjZXMgLmNhcmRzIGxpIHtcbiAgICAgIGZsZXg6IDAgMCA1MCU7IH0gfVxuICBAbWVkaWEgKG1heC13aWR0aDogNDgwcHgpIHtcbiAgICAucmVzb3VyY2VzIC5jYXJkcyBsaSB7XG4gICAgICBmbGV4OiAwIDAgMTAwJTsgfVxuICAgIC5yZXNvdXJjZXMgaDUge1xuICAgICAgZGlzcGxheTogbm9uZTsgfSB9XG5cbiNtb3JlLXRoYW4tbW9iaWxlIC5jb250ZW50IHtcbiAgbWFyZ2luLXRvcDogMzE2cHg7IH1cbiAgI21vcmUtdGhhbi1tb2JpbGUgLmNvbnRlbnQ6OmFmdGVyIHtcbiAgICBiYWNrZ3JvdW5kOiB1cmwoXCIvaW1nL3NvbHV0aW9ucy9hcHBsZS1kZXZpY2VzLnBuZ1wiKTtcbiAgICBiYWNrZ3JvdW5kLXNpemU6IGNvdmVyO1xuICAgIHdpZHRoOiA5ODJweDtcbiAgICBoZWlnaHQ6IDY5NnB4O1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICByaWdodDogY2FsYyg1MCUgLSA4OThweCk7XG4gICAgdG9wOiAxNzRweDtcbiAgICBjb250ZW50OiAnJzsgfVxuICBAbWVkaWEgKG1heC13aWR0aDogOTkxcHgpIHtcbiAgICAjbW9yZS10aGFuLW1vYmlsZSAuY29udGVudCB7XG4gICAgICBtYXJnaW4tYm90dG9tOiAyMDBweDsgfVxuICAgICAgI21vcmUtdGhhbi1tb2JpbGUgLmNvbnRlbnQ6OmFmdGVyIHtcbiAgICAgICAgcmlnaHQ6IGNhbGMoMTAwJSAtIDkwNnB4KTtcbiAgICAgICAgd2lkdGg6IDQ5MXB4O1xuICAgICAgICBoZWlnaHQ6IDM0OHB4O1xuICAgICAgICB0b3A6IGF1dG87XG4gICAgICAgIGJvdHRvbTogNTBweDsgfSB9XG5cbiNmdWxsLW5hdGl2ZS1wb3dlciAuY29udGVudCB7XG4gIG1hcmdpbi10b3A6IDM3M3B4OyB9XG4gICNmdWxsLW5hdGl2ZS1wb3dlciAuY29udGVudDo6YWZ0ZXIge1xuICAgIGJhY2tncm91bmQ6IHVybChcIi9pbWcvc29sdXRpb25zL2lwaG9uZS1wYXJ0cy5qcGdcIik7XG4gICAgYmFja2dyb3VuZC1zaXplOiBjb3ZlcjtcbiAgICB3aWR0aDogNTk0cHg7XG4gICAgaGVpZ2h0OiA3NzJweDtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgbGVmdDogLTRweDtcbiAgICB0b3A6IDIwN3B4O1xuICAgIGNvbnRlbnQ6ICcnOyB9XG4gIEBtZWRpYSAobWF4LXdpZHRoOiAxMjE5cHgpIHtcbiAgICAjZnVsbC1uYXRpdmUtcG93ZXIgLmNvbnRlbnQ6OmFmdGVyIHtcbiAgICAgIHdpZHRoOiAzOTZweDtcbiAgICAgIGhlaWdodDogNTE1cHg7XG4gICAgICB0b3A6IDMyOHB4OyB9IH1cbiAgQG1lZGlhIChtYXgtd2lkdGg6IDEyMTlweCkge1xuICAgICNmdWxsLW5hdGl2ZS1wb3dlciAuY29udGVudCB7XG4gICAgICBtYXJnaW4tdG9wOiA0MDBweDsgfVxuICAgICAgI2Z1bGwtbmF0aXZlLXBvd2VyIC5jb250ZW50OjphZnRlciB7XG4gICAgICAgIHdpZHRoOiAyOTdweDtcbiAgICAgICAgaGVpZ2h0OiAzODZweDtcbiAgICAgICAgdG9wOiAwO1xuICAgICAgICBsZWZ0OiBjYWxjKDUwJSAtIDE1MHB4KTsgfSB9XG5cbiNmdXR1cmUtcHJvb2YgLmNvbnRlbnQge1xuICBtYXJnaW4tdG9wOiA0MzFweDsgfVxuICAjZnV0dXJlLXByb29mIC5jb250ZW50OjphZnRlciB7XG4gICAgYmFja2dyb3VuZDogdXJsKFwiL2ltZy9zb2x1dGlvbnMvaW9uaWMtcGxhdGZvcm1zLnN2Z1wiKTtcbiAgICBiYWNrZ3JvdW5kLXNpemU6IGNvdmVyO1xuICAgIHdpZHRoOiA2MDZweDtcbiAgICBoZWlnaHQ6IDY3MnB4O1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICByaWdodDogY2FsYyg1MCUgLSA2MzJweCk7XG4gICAgdG9wOiAyODJweDtcbiAgICBjb250ZW50OiAnJzsgfVxuICBAbWVkaWEgKG1heC13aWR0aDogMTIxOXB4KSB7XG4gICAgI2Z1dHVyZS1wcm9vZiAuY29udGVudDo6YWZ0ZXIge1xuICAgICAgd2lkdGg6IDMwM3B4O1xuICAgICAgaGVpZ2h0OiAzMzZweDtcbiAgICAgIHJpZ2h0OiBjYWxjKDUwJSAtIDE1MHB4KTtcbiAgICAgIHRvcDogODBweDsgfSB9XG5cbiNob3ctdG8gLmNvbnRlbnQge1xuICBtYXJnaW4tdG9wOiAxNDZweDtcbiAgbWF4LXdpZHRoOiAxMDAlOyB9XG4gICNob3ctdG8gLmNvbnRlbnQgaDIge1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjsgfVxuXG4jZ2V0LXN0YXJ0ZWQge1xuICBtYXJnaW4tdG9wOiAtMjI1cHg7XG4gIHBhZGRpbmctdG9wOiAxMzRweDsgfVxuICBAbWVkaWEgKG1heC13aWR0aDogMTIxOXB4KSB7XG4gICAgI2dldC1zdGFydGVkIHtcbiAgICAgIHBhZGRpbmctdG9wOiAzMDBweDtcbiAgICAgIG1hcmdpbi10b3A6IC0yMDBweDsgfSB9XG4iXX0= */\n"
  },
  {
    "path": "content/css/pages/enterprise/solutions/design.css",
    "content": ".ee-hero {\n  max-width: 640px;\n  padding-top: 130px;\n  padding-bottom: 160px; }\n  .ee-hero::before, .ee-hero::after {\n    display: none; }\n  .ee-hero h1 {\n    font-size: 52px;\n    line-height: 62px;\n    max-width: 930px;\n    letter-spacing: -0.03em;\n    color: #020814;\n    margin-top: 0;\n    margin-bottom: 16px; }\n  .ee-hero h4 {\n    font-family: \"Roboto Mono\", Menlo, Monaco, Consolas, \"Courier New\", monospace;\n    font-weight: bold;\n    font-size: 13px;\n    line-height: 26px;\n    letter-spacing: 0.14em;\n    text-transform: uppercase;\n    color: #92A1B3;\n    margin-bottom: 29px; }\n  .ee-hero p {\n    font-family: \"Eina\", \"Helvetica Neue\", Helvetica, sans-serif;\n    font-size: 24px;\n    font-weight: 400;\n    line-height: 36px;\n    letter-spacing: -0.04em;\n    color: rgba(39, 50, 63, 0.8); }\n  .ee-hero .btn {\n    padding-left: 24px;\n    padding-right: 20px;\n    padding-top: 18px;\n    padding-bottom: 18px;\n    font-size: 14px;\n    margin-top: 16px;\n    line-height: 20px;\n    letter-spacing: 0.08em;\n    color: white;\n    text-transform: uppercase;\n    font-weight: 700;\n    background: #3880FF;\n    box-shadow: 0px 2px 4px rgba(2, 8, 20, 0.1), 0px 1px 2px rgba(2, 8, 20, 0.08);\n    border-radius: 210px;\n    display: -ms-flexbox;\n    display: flex;\n    -ms-flex-align: center;\n        align-items: center; }\n    .ee-hero .btn::after {\n      background-image: url('data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"white\" viewBox=\"0 0 512 512\"><path d=\"M85 277.375h259.704L225.002 397.077 256 427l171-171L256 85l-29.922 29.924 118.626 119.701H85v42.75z\"/></svg>');\n      background-size: 100%;\n      content: '';\n      height: 20px;\n      width: 20px;\n      display: block;\n      margin-left: 8px;\n      -webkit-transform: translateY(-1px);\n              transform: translateY(-1px); }\n    .ee-hero .btn:hover {\n      background-color: #4f8bf5; }\n  .ee-hero--large h1 {\n    font-size: 62px;\n    line-height: 69px; }\n  .ee-hero--wide {\n    max-width: 960px; }\n  .ee-hero--centered {\n    display: -ms-flexbox;\n    display: flex;\n    -ms-flex-direction: column;\n        flex-direction: column;\n    -ms-flex-pack: center;\n        justify-content: center;\n    -ms-flex-align: center;\n        align-items: center;\n    text-align: center;\n    margin-left: auto;\n    margin-right: auto; }\n  @media (max-width: 767px) {\n    .ee-hero {\n      padding-top: 70px;\n      padding-bottom: 0; }\n      .ee-hero h1 {\n        font-size: 44px;\n        line-height: 52px; }\n      .ee-hero--large h1 {\n        font-size: 50px;\n        line-height: 60px; } }\n  @media (max-width: 480px) {\n    .ee-hero h1 {\n      font-size: 36px;\n      line-height: 44px;\n      margin-bottom: 6px; }\n    .ee-hero--large h1 {\n      font-size: 42px;\n      line-height: 52px; }\n    .ee-hero .btn {\n      margin-top: 8px; } }\n\n.ee-main {\n  margin-top: 0; }\n  .ee-main section {\n    margin-bottom: 200px; }\n  .ee-main .left,\n  .ee-main .right,\n  .ee-main .center {\n    display: -ms-flexbox;\n    display: flex; }\n    .ee-main .left::before, .ee-main .left::after,\n    .ee-main .right::before,\n    .ee-main .right::after,\n    .ee-main .center::before,\n    .ee-main .center::after {\n      display: none; }\n  .ee-main .left .content,\n  .ee-main .right .content {\n    max-width: 480px; }\n    @media (max-width: 767px) {\n      .ee-main .left .content,\n      .ee-main .right .content {\n        max-width: 100%;\n        text-align: center; }\n        .ee-main .left .content li,\n        .ee-main .right .content li {\n          text-align: left; } }\n  .ee-main .left {\n    -ms-flex-direction: row;\n        flex-direction: row; }\n    .ee-main .left .graphics {\n      margin-left: auto; }\n  .ee-main .right {\n    -ms-flex-direction: row-reverse;\n        flex-direction: row-reverse;\n    margin-left: auto; }\n    .ee-main .right .graphics {\n      margin-right: auto; }\n  .ee-main .center {\n    -ms-flex-direction: column;\n        flex-direction: column;\n    -ms-flex-align: center;\n        align-items: center;\n    text-align: center; }\n    .ee-main .center .content {\n      width: 894px;\n      max-width: 100%; }\n  .ee-main .full .content {\n    max-width: 568px; }\n  @media (max-width: 767px) {\n    .ee-main .right,\n    .ee-main .left {\n      -ms-flex-direction: column-reverse;\n          flex-direction: column-reverse;\n      -ms-flex-align: center;\n          align-items: center; }\n      .ee-main .right .graphics,\n      .ee-main .left .graphics {\n        margin-bottom: 24px;\n        margin-left: 0;\n        margin-right: 0; }\n    .ee-main section {\n      margin-bottom: 100px; } }\n  .ee-main .graphics {\n    -ms-flex-pack: end;\n        justify-content: flex-end; }\n    .ee-main .graphics img {\n      width: 100%; }\n  .ee-main h2 {\n    font-size: 44px;\n    line-height: 51px;\n    letter-spacing: -0.03em; }\n    .ee-main h2:first-child {\n      margin-top: 0; }\n  .ee-main .ee-section__title {\n    font-family: \"Roboto Mono\", Menlo, Monaco, Consolas, \"Courier New\", monospace;\n    font-style: normal;\n    font-weight: bold;\n    font-size: 12px;\n    line-height: 23px;\n    letter-spacing: 0.14em;\n    text-transform: uppercase;\n    color: #5B708B;\n    margin-top: 0; }\n  .ee-main .ee-section__cta {\n    display: inline-block;\n    font-size: 18px;\n    font-weight: 500;\n    margin-top: 16px; }\n  .ee-main p {\n    font-size: 20px;\n    line-height: 31px;\n    letter-spacing: -0.02em;\n    color: #5B708B;\n    margin-top: 18px; }\n    .ee-main p.sm {\n      font-size: 16px;\n      line-height: 29px;\n      letter-spacing: -0.01em; }\n  .ee-main ul:not(.frameworks) {\n    margin-top: 54px; }\n  .ee-main .content ul {\n    padding-left: 0; }\n  .ee-main .content li {\n    font-size: 16px;\n    line-height: 23px;\n    letter-spacing: -0.02em;\n    color: #1A232F;\n    margin-bottom: 40px;\n    padding-left: 30px;\n    list-style: none;\n    position: relative; }\n    .ee-main .content li::before {\n      background-image: url(\"/img/enterprise/check.svg\");\n      background-size: 100%;\n      content: '';\n      height: 10px;\n      width: 13px;\n      position: absolute;\n      left: 0;\n      top: 8px; }\n  .ee-main .features {\n    display: -ms-grid;\n    display: grid;\n    -ms-grid-columns: 1fr 1fr 1fr;\n        grid-template-columns: 1fr 1fr 1fr;\n    grid-column-gap: 64px;\n    grid-row-gap: 24px;\n    padding: 0; }\n    .ee-main .features li {\n      list-style: none; }\n    .ee-main .features .icon {\n      margin-bottom: 16px;\n      width: 48px; }\n    @media (max-width: 991px) {\n      .ee-main .features {\n        -ms-grid-columns: 1fr 1fr;\n            grid-template-columns: 1fr 1fr; } }\n    @media (max-width: 500px) {\n      .ee-main .features {\n        -ms-grid-columns: 1fr;\n            grid-template-columns: 1fr; } }\n  .ee-main .cta-card {\n    background: #4a8bfc;\n    border-radius: 12px;\n    padding: 72px 72px 60px;\n    background-size: cover;\n    color: white; }\n    .ee-main .cta-card .ee-section__title,\n    .ee-main .cta-card p {\n      color: #CED6E0; }\n\n#how-to {\n  margin-bottom: 0;\n  position: relative;\n  padding-top: 140px; }\n  #how-to::before {\n    position: absolute;\n    top: 0;\n    width: 100vw;\n    border-top: 1px solid rgba(146, 161, 179, 0.3);\n    content: '';\n    display: block; }\n\n.cards--red-v-blue {\n  display: -ms-flexbox;\n  display: flex;\n  text-align: left;\n  -ms-flex-pack: center;\n      justify-content: center;\n  margin-top: 38px; }\n  .cards--red-v-blue__card {\n    background: #7CABFF;\n    border-radius: 8px;\n    padding: 40px 40px 34px;\n    display: -ms-flexbox;\n    display: flex;\n    -ms-flex-direction: column;\n        flex-direction: column;\n    -ms-flex-align: start;\n        align-items: flex-start;\n    margin-right: 24px;\n    -ms-flex: 0 1 460px;\n        flex: 0 1 460px;\n    border-radius: 8px; }\n    .cards--red-v-blue__card:last-child {\n      margin-right: 0; }\n    .cards--red-v-blue__card:nth-child(2) {\n      background: #F88D8D; }\n      .cards--red-v-blue__card:nth-child(2) .btn {\n        background: rgba(244, 84, 84, 0.5); }\n  .cards--red-v-blue h3 {\n    font-size: 24px;\n    line-height: normal;\n    letter-spacing: -0.02em;\n    color: white;\n    margin-top: 0; }\n  .cards--red-v-blue p {\n    font-size: 18px;\n    line-height: 26px;\n    letter-spacing: -0.02em;\n    color: rgba(255, 255, 255, 0.7);\n    margin-top: 0;\n    margin-bottom: 22px; }\n  .cards--red-v-blue .btn {\n    margin-top: auto;\n    font-size: 14px;\n    line-height: 22px;\n    letter-spacing: 0.09em;\n    text-transform: uppercase;\n    padding: 10px 14px;\n    font-weight: 600;\n    border-radius: 8px;\n    background: rgba(56, 128, 255, 0.5); }\n    .cards--red-v-blue .btn ion-icon {\n      display: inline-block;\n      height: 14px;\n      width: 14px;\n      vertical-align: -2px; }\n  @media (max-width: 767px) {\n    .cards--red-v-blue {\n      -ms-flex-direction: column;\n          flex-direction: column;\n      -ms-flex-align: center;\n          align-items: center; }\n      .cards--red-v-blue__card {\n        -ms-flex: auto;\n            flex: auto;\n        margin-right: 0;\n        margin-top: 20px;\n        max-width: 460px; } }\n\naside {\n  background: linear-gradient(180deg, #F9FAFB 0%, #FFFFFF 100%);\n  margin-top: -60px;\n  padding-top: 200px;\n  padding-bottom: 120px; }\n  aside p {\n    color: #414D5C; }\n  aside .content {\n    max-width: 432px;\n    margin: 0 auto;\n    text-align: center;\n    display: block; }\n\n.ee-get-started {\n  max-width: 700px; }\n  .ee-get-started h3 {\n    color: #414D5C; }\n\n.resources {\n  padding-bottom: 120px; }\n  @media (max-width: 768px) {\n    .resources {\n      padding-bottom: 60px; } }\n  .resources .cards {\n    list-style-type: none;\n    margin: 0;\n    padding: 0;\n    display: -ms-flexbox;\n    display: flex;\n    margin-left: -24px;\n    margin-right: -24px; }\n  .resources hgroup {\n    display: -ms-flexbox;\n    display: flex;\n    -ms-flex-pack: justify;\n        justify-content: space-between;\n    -ms-flex-align: baseline;\n        align-items: baseline; }\n    .resources hgroup h3 {\n      font-weight: 600;\n      line-height: normal;\n      font-size: 28px;\n      letter-spacing: -0.02em;\n      color: #1A232F;\n      margin-bottom: 0; }\n    .resources hgroup h4 {\n      font-weight: 600;\n      font-size: 24px;\n      line-height: normal;\n      letter-spacing: -0.02em;\n      color: #1A232F; }\n    .resources hgroup h5 {\n      font-weight: 700;\n      line-height: 1;\n      font-size: 14px;\n      letter-spacing: 0.08em;\n      color: #3880FF;\n      text-transform: uppercase; }\n    .resources hgroup ion-icon {\n      -webkit-transform: translateY(2px);\n              transform: translateY(2px); }\n  .resources .cards li {\n    display: block;\n    -ms-flex: 0 0 33.33%;\n        flex: 0 0 33.33%;\n    padding: 24px; }\n    .resources .cards li a {\n      display: block;\n      width: 100%; }\n    .resources .cards li .img-wrapper {\n      overflow: hidden;\n      border-radius: 6px; }\n    .resources .cards li img {\n      width: 100%; }\n    .resources .cards li h6 {\n      line-height: 23px;\n      font-size: 12px;\n      letter-spacing: 0.12em;\n      text-transform: uppercase;\n      color: #B2BECD;\n      margin-bottom: 0;\n      margin-top: 16px; }\n    .resources .cards li h4 {\n      font-size: 20px;\n      margin-top: 10px;\n      color: #1A232F;\n      font-weight: 600; }\n    .resources .cards li p {\n      color: #5B708B;\n      line-height: 22px;\n      font-size: 14px;\n      letter-spacing: -0.02em; }\n  @media (max-width: 992px) {\n    .resources .cards {\n      margin-left: -12px;\n      margin-right: -12px; }\n    .resources .cards li {\n      padding: 12px; } }\n  @media (max-width: 768px) {\n    .resources .cards {\n      -ms-flex-wrap: wrap;\n          flex-wrap: wrap; }\n    .resources .cards li {\n      -ms-flex: 0 0 50%;\n          flex: 0 0 50%; } }\n  @media (max-width: 480px) {\n    .resources .cards li {\n      -ms-flex: 0 0 100%;\n          flex: 0 0 100%; }\n    .resources h5 {\n      display: none; } }\n\n.ee-main .features li p,\n.ee-main .cards li p,\n.resources .features li p,\n.resources .cards li p {\n  font-size: 16px;\n  line-height: 29px;\n  letter-spacing: -0.01em;\n  color: #73849A;\n  margin-top: 0; }\n\n.ee-main .features li h4,\n.ee-main .cards li h4,\n.resources .features li h4,\n.resources .cards li h4 {\n  font-size: 20px;\n  line-height: normal;\n  letter-spacing: -0.02em;\n  color: #020814;\n  font-weight: 600; }\n\n.resources .cards {\n  margin-top: 0 !important;\n  text-align: left;\n  -ms-flex-wrap: wrap;\n      flex-wrap: wrap; }\n  .resources .cards .img-wrapper {\n    border-radius: 6px; }\n    .resources .cards .img-wrapper + h4 {\n      margin-top: 24px; }\n  @media (min-width: 1220px) {\n    .resources .cards {\n      margin-left: -40px;\n      margin-right: -40px; }\n      .resources .cards li {\n        padding: 40px; } }\n\n.resources .resources__customer-logos {\n  display: -ms-flexbox;\n  display: flex;\n  margin: 26px auto 0;\n  padding: 0;\n  -ms-flex-pack: justify;\n      justify-content: space-between;\n  max-width: 780px;\n  width: 100%; }\n  .resources .resources__customer-logos li {\n    background: url(\"/img/enterprise/customer-logos.png\");\n    background-size: 428px 46px;\n    background-repeat: no-repeat;\n    display: block;\n    height: 46px; }\n  @media (max-width: 768px) {\n    .resources .resources__customer-logos {\n      -ms-flex-pack: center;\n          justify-content: center;\n      -ms-flex-wrap: wrap;\n          flex-wrap: wrap;\n      max-width: 460px; }\n      .resources .resources__customer-logos li {\n        margin: 20px; } }\n  .resources .resources__customer-logos .mastercard {\n    width: 58px; }\n  .resources .resources__customer-logos .nationwide {\n    background-position: -58px 0;\n    width: 33px; }\n  .resources .resources__customer-logos .uniqlo {\n    background-position: -91px 0;\n    width: 65px; }\n  .resources .resources__customer-logos .ibm {\n    background-position: -156px 0;\n    width: 64px; }\n  .resources .resources__customer-logos .ing {\n    background-position: -222px 0;\n    width: 103px; }\n  .resources .resources__customer-logos .sap {\n    background-position: -326px 0;\n    width: 56px; }\n  .resources .resources__customer-logos .nasa {\n    background-position: -380px 0;\n    width: 50px; }\n\n.banner {\n  background: #fff;\n  text-align: left; }\n  .banner .container {\n    position: relative; }\n  .banner .ee-hero {\n    max-width: 480px; }\n  .banner .ee-hero h4,\n  .banner .ee-hero h1,\n  .banner .ee-hero p {\n    position: relative;\n    z-index: 2; }\n\n@media (max-width: 767px) {\n  .ee-hero {\n    padding-bottom: 80px; } }\n\n.solution-hero h4,\n.solution-hero h2,\n.solution-hero p,\n.solution-hero a {\n  position: relative;\n  z-index: 2; }\n\n.solution-hero::after {\n  background-size: cover;\n  position: absolute;\n  z-index: 1;\n  content: '';\n  display: block; }\n\n.solution-hero--cross-platform::after {\n  background: url(\"/img/solutions/bg-cross-platform-header.svg\");\n  width: 850px;\n  height: 431px;\n  right: calc(50% - 796px);\n  top: 138px; }\n\n.solution-hero--design-system::after {\n  background: url(\"/img/solutions/design-systems-banner.svg\");\n  width: 755px;\n  height: 593px;\n  right: -72px;\n  top: 74px; }\n\n.solution-hero--pwa::after {\n  background: url(\"/img/enterprise/pwa.png\");\n  width: 513px;\n  height: 520px;\n  background-size: 513px 520px;\n  right: 50px;\n  top: 74px; }\n\n.right .solution-hero--design-system::after {\n  right: auto;\n  left: -72px; }\n\n#sticky-bar {\n  box-shadow: 0px 1px 0px #E9EDF3, 0px -1px 0px #E9EDF3;\n  background: white;\n  position: -webkit-sticky;\n  position: sticky;\n  top: 0;\n  z-index: 1; }\n  #sticky-bar ul {\n    display: -ms-flexbox;\n    display: flex;\n    -ms-flex-pack: justify;\n        justify-content: space-between;\n    padding-top: 17px;\n    padding-bottom: 17px;\n    padding-left: 15px;\n    -ms-flex-wrap: wrap;\n        flex-wrap: wrap; }\n    @media (max-width: 991px) {\n      #sticky-bar ul {\n        -ms-flex-pack: distribute;\n            justify-content: space-around; } }\n    #sticky-bar ul::before, #sticky-bar ul::after {\n      display: none; }\n  #sticky-bar li {\n    list-style: none; }\n    #sticky-bar li.active a:not(.btn) {\n      color: #4a8bfc; }\n  #sticky-bar a {\n    padding: 10px 0;\n    font-size: 14px;\n    line-height: 22px;\n    text-align: center;\n    letter-spacing: 0.08em;\n    text-transform: uppercase;\n    display: block; }\n    #sticky-bar a:hover, #sticky-bar a:active, #sticky-bar a:focus {\n      background: transparent;\n      text-decoration: none; }\n    #sticky-bar a.btn {\n      padding: 11px 14px 8px;\n      margin-right: 3px;\n      border-radius: 10px;\n      color: white;\n      font-weight: 600; }\n      #sticky-bar a.btn:hover, #sticky-bar a.btn:active, #sticky-bar a.btn:focus {\n        color: white;\n        background: #317bfc; }\n  #sticky-bar .anchor {\n    color: #92A1B3;\n    font-weight: 500; }\n    #sticky-bar .anchor.active, #sticky-bar .anchor:hover {\n      color: #4D8DFF; }\n\nmain {\n  letter-spacing: -0.028em;\n  color: #2F3A48; }\n  main h2 {\n    font-size: 40px;\n    line-height: 50px;\n    letter-spacing: -0.03em;\n    color: #020814;\n    margin-bottom: 15px; }\n  main h3 {\n    color: #414D5C;\n    font-weight: 600;\n    margin-bottom: 4px; }\n    main h3 + h2 {\n      margin-top: 0; }\n  main p {\n    font-size: 20px;\n    line-height: 31px;\n    margin-bottom: 40px; }\n  main ul {\n    padding-left: 0; }\n  main li {\n    font-size: 16px;\n    line-height: 23px;\n    color: #1A232F;\n    margin-bottom: 32px;\n    position: relative;\n    list-style: none;\n    padding-left: 30px;\n    letter-spacing: -.016em; }\n    main li::before {\n      content: url('data:image/svg+xml,\\a         <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\">\\a           <path d=\"M186.301 339.893L96 249.461l-32 30.507L186.301 402 448 140.506 416 110z\"/>\\a         </svg>');\n      position: absolute;\n      left: 0;\n      top: 1px;\n      height: 15px;\n      width: 15px;\n      fill: #1A232F;\n      display: block; }\n  main section {\n    display: -ms-flexbox;\n    display: flex;\n    position: relative; }\n    main section.container::before, main section.container::after {\n      display: none; }\n    main section.right {\n      -ms-flex-direction: row-reverse;\n          flex-direction: row-reverse; }\n    main section.center {\n      -ms-flex-pack: center;\n          justify-content: center;\n      -ms-flex-direction: column;\n          flex-direction: column;\n      -ms-flex-align: center;\n          align-items: center; }\n      main section.center .content {\n        max-width: 798px;\n        text-align: center; }\n        main section.center .content ul {\n          display: -ms-flexbox;\n          display: flex;\n          -ms-flex-wrap: wrap;\n              flex-wrap: wrap;\n          -ms-flex-pack: justify;\n              justify-content: space-between; }\n          @media (max-width: 991px) {\n            main section.center .content ul {\n              -ms-flex-pack: start;\n                  justify-content: flex-start; } }\n        main section.center .content li {\n          max-width: 376px;\n          width: 100%; }\n  main .content {\n    max-width: 482px;\n    margin: 232px 0 184px; }\n    @media (max-width: 991px) {\n      main .content {\n        max-width: 100%;\n        margin: 60px auto; } }\n  main aside {\n    background: #F6F8FB;\n    padding-top: 114px;\n    padding-bottom: 120px; }\n    main aside p {\n      color: #414D5C; }\n    main aside .content {\n      max-width: 432px;\n      margin: 0 auto;\n      text-align: center;\n      display: block; }\n  main .get-started {\n    max-width: 700px; }\n  main .cards {\n    display: -ms-flexbox;\n    display: flex;\n    text-align: left;\n    -ms-flex-pack: center;\n        justify-content: center;\n    margin-top: 38px; }\n    main .cards .card {\n      background: #7CABFF;\n      border-radius: 8px;\n      padding: 40px 40px 34px;\n      display: -ms-flexbox;\n      display: flex;\n      -ms-flex-direction: column;\n          flex-direction: column;\n      -ms-flex-align: start;\n          align-items: flex-start;\n      margin-right: 24px;\n      -ms-flex: 0 1 460px;\n          flex: 0 1 460px;\n      border-radius: 8px; }\n      main .cards .card:last-child {\n        margin-right: 0; }\n      main .cards .card:nth-child(2) {\n        background: #F88D8D; }\n        main .cards .card:nth-child(2) .btn {\n          background: rgba(244, 84, 84, 0.5); }\n    main .cards h3 {\n      font-size: 24px;\n      line-height: normal;\n      letter-spacing: -0.02em;\n      color: white;\n      margin-top: 0; }\n    main .cards p {\n      font-size: 18px;\n      line-height: 26px;\n      letter-spacing: -0.02em;\n      color: rgba(255, 255, 255, 0.7); }\n    main .cards .btn {\n      margin-top: auto;\n      font-size: 14px;\n      line-height: 22px;\n      letter-spacing: 0.09em;\n      text-transform: uppercase;\n      padding: 10px 14px;\n      font-weight: 600;\n      border-radius: 8px;\n      background: rgba(56, 128, 255, 0.5); }\n      main .cards .btn ion-icon {\n        display: inline-block;\n        height: 14px;\n        width: 14px;\n        vertical-align: -2px; }\n    @media (max-width: 767px) {\n      main .cards {\n        -ms-flex-direction: column;\n            flex-direction: column; }\n        main .cards .card {\n          -ms-flex: auto;\n              flex: auto;\n          margin-right: 0;\n          margin-top: 20px; } }\n\n.resources {\n  margin-top: 96px; }\n\n.resources {\n  padding-bottom: 120px; }\n  @media (max-width: 768px) {\n    .resources {\n      padding-bottom: 60px; } }\n  .resources .cards {\n    list-style-type: none;\n    margin: 0;\n    padding: 0;\n    display: -ms-flexbox;\n    display: flex;\n    margin-left: -24px;\n    margin-right: -24px; }\n  .resources hgroup {\n    display: -ms-flexbox;\n    display: flex;\n    -ms-flex-pack: justify;\n        justify-content: space-between;\n    -ms-flex-align: baseline;\n        align-items: baseline; }\n    .resources hgroup h3 {\n      font-weight: 600;\n      line-height: normal;\n      font-size: 28px;\n      letter-spacing: -0.02em;\n      color: #1A232F;\n      margin-bottom: 0; }\n    .resources hgroup h4 {\n      font-weight: 600;\n      font-size: 24px;\n      line-height: normal;\n      letter-spacing: -0.02em;\n      color: #1A232F; }\n    .resources hgroup h5 {\n      font-weight: 700;\n      line-height: 1;\n      font-size: 14px;\n      letter-spacing: 0.08em;\n      color: #3880FF;\n      text-transform: uppercase; }\n    .resources hgroup ion-icon {\n      -webkit-transform: translateY(2px);\n              transform: translateY(2px); }\n  .resources .cards li {\n    display: block;\n    -ms-flex: 0 0 33.33%;\n        flex: 0 0 33.33%;\n    padding: 24px; }\n    .resources .cards li a {\n      display: block;\n      width: 100%; }\n    .resources .cards li .img-wrapper {\n      overflow: hidden;\n      border-radius: 6px; }\n    .resources .cards li img {\n      width: 100%; }\n    .resources .cards li h6 {\n      line-height: 23px;\n      font-size: 12px;\n      letter-spacing: 0.12em;\n      text-transform: uppercase;\n      color: #B2BECD;\n      margin-bottom: 0;\n      margin-top: 16px; }\n    .resources .cards li h4 {\n      font-size: 20px;\n      margin-top: 10px;\n      color: #1A232F;\n      font-weight: 600; }\n    .resources .cards li p {\n      color: #5B708B;\n      line-height: 22px;\n      font-size: 14px;\n      letter-spacing: -0.02em; }\n  @media (max-width: 992px) {\n    .resources .cards {\n      margin-left: -12px;\n      margin-right: -12px; }\n    .resources .cards li {\n      padding: 12px; } }\n  @media (max-width: 768px) {\n    .resources .cards {\n      -ms-flex-wrap: wrap;\n          flex-wrap: wrap; }\n    .resources .cards li {\n      -ms-flex: 0 0 50%;\n          flex: 0 0 50%; } }\n  @media (max-width: 480px) {\n    .resources .cards li {\n      -ms-flex: 0 0 100%;\n          flex: 0 0 100%; }\n    .resources h5 {\n      display: none; } }\n\n#build-and-share .content::after {\n  background: url(\"/img/solutions/components.png\");\n  background-size: cover;\n  width: 881px;\n  height: 727px;\n  position: absolute;\n  right: calc(50% - 900px);\n  top: 112px;\n  content: ''; }\n\n@media (max-width: 991px) {\n  #build-and-share {\n    margin-bottom: 100px; }\n    #build-and-share .content::after {\n      width: 387px;\n      height: 363px;\n      top: auto;\n      right: calc(100% - 870px);\n      bottom: -95px; } }\n\n#one-design .content::after {\n  background: url(\"/img/solutions/everywhere.png\");\n  background-size: cover;\n  width: 762px;\n  height: 512px;\n  position: absolute;\n  left: -182px;\n  top: 214px;\n  content: ''; }\n  @media (max-width: 1219px) {\n    #one-design .content::after {\n      width: 508px;\n      height: 341px;\n      left: -70px;\n      top: 250px; } }\n\n@media (max-width: 991px) {\n  #one-design .content {\n    margin-bottom: 250px; }\n    #one-design .content::after {\n      width: 381px;\n      height: 256px;\n      left: calc(50% - 190px);\n      bottom: 0;\n      top: auto; } }\n\n#developer-adoption {\n  border-bottom: 1px solid rgba(146, 161, 179, 0.3);\n  position: relative; }\n  #developer-adoption .content {\n    margin-top: 222px;\n    margin-bottom: 198px;\n    position: static; }\n    #developer-adoption .content::after {\n      background: url(\"/img/solutions/design-system-dashboard.png\");\n      background-size: cover;\n      width: 942px;\n      height: 742px;\n      position: absolute;\n      right: calc(50% - 899px);\n      bottom: 0;\n      content: ''; }\n      @media (max-width: 1219px) {\n        #developer-adoption .content::after {\n          right: calc(50% - 950px); } }\n    @media (max-width: 991px) {\n      #developer-adoption .content {\n        margin-top: 100px;\n        margin-bottom: 180px; }\n        #developer-adoption .content::after {\n          right: calc(50% - 540px);\n          width: 471px;\n          height: 371px; } }\n    @media (max-width: 767px) {\n      #developer-adoption .content::after {\n        right: calc(100% - 920px); } }\n  @media (min-width: 1794px) {\n    #developer-adoption .content::after {\n      right: 0; } }\n\n#help .content {\n  text-align: left; }\n\n#help h2,\n#help p {\n  margin-right: 140px;\n  margin-left: 140px; }\n  @media (max-width: 991px) {\n    #help h2,\n    #help p {\n      margin-right: 0;\n      margin-left: 0; } }\n\n/*# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImRlc2lnbi5jc3MiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7RUFDRSxpQkFBaUI7RUFDakIsbUJBQW1CO0VBQ25CLHNCQUFzQixFQUFFO0VBQ3hCO0lBQ0UsY0FBYyxFQUFFO0VBQ2xCO0lBQ0UsZ0JBQWdCO0lBQ2hCLGtCQUFrQjtJQUNsQixpQkFBaUI7SUFDakIsd0JBQXdCO0lBQ3hCLGVBQWU7SUFDZixjQUFjO0lBQ2Qsb0JBQW9CLEVBQUU7RUFDeEI7SUFDRSw4RUFBOEU7SUFDOUUsa0JBQWtCO0lBQ2xCLGdCQUFnQjtJQUNoQixrQkFBa0I7SUFDbEIsdUJBQXVCO0lBQ3ZCLDBCQUEwQjtJQUMxQixlQUFlO0lBQ2Ysb0JBQW9CLEVBQUU7RUFDeEI7SUFDRSw2REFBNkQ7SUFDN0QsZ0JBQWdCO0lBQ2hCLGlCQUFpQjtJQUNqQixrQkFBa0I7SUFDbEIsd0JBQXdCO0lBQ3hCLDZCQUE2QixFQUFFO0VBQ2pDO0lBQ0UsbUJBQW1CO0lBQ25CLG9CQUFvQjtJQUNwQixrQkFBa0I7SUFDbEIscUJBQXFCO0lBQ3JCLGdCQUFnQjtJQUNoQixpQkFBaUI7SUFDakIsa0JBQWtCO0lBQ2xCLHVCQUF1QjtJQUN2QixhQUFhO0lBQ2IsMEJBQTBCO0lBQzFCLGlCQUFpQjtJQUNqQixvQkFBb0I7SUFDcEIsOEVBQThFO0lBQzlFLHFCQUFxQjtJQUNyQixxQkFBYztJQUFkLGNBQWM7SUFDZCx1QkFBb0I7UUFBcEIsb0JBQW9CLEVBQUU7SUFDdEI7TUFDRSxrUEFBa1A7TUFDbFAsc0JBQXNCO01BQ3RCLFlBQVk7TUFDWixhQUFhO01BQ2IsWUFBWTtNQUNaLGVBQWU7TUFDZixpQkFBaUI7TUFDakIsb0NBQTRCO2NBQTVCLDRCQUE0QixFQUFFO0lBQ2hDO01BQ0UsMEJBQTBCLEVBQUU7RUFDaEM7SUFDRSxnQkFBZ0I7SUFDaEIsa0JBQWtCLEVBQUU7RUFDdEI7SUFDRSxpQkFBaUIsRUFBRTtFQUNyQjtJQUNFLHFCQUFjO0lBQWQsY0FBYztJQUNkLDJCQUF1QjtRQUF2Qix1QkFBdUI7SUFDdkIsc0JBQXdCO1FBQXhCLHdCQUF3QjtJQUN4Qix1QkFBb0I7UUFBcEIsb0JBQW9CO0lBQ3BCLG1CQUFtQjtJQUNuQixrQkFBa0I7SUFDbEIsbUJBQW1CLEVBQUU7RUFDdkI7SUFDRTtNQUNFLGtCQUFrQjtNQUNsQixrQkFBa0IsRUFBRTtNQUNwQjtRQUNFLGdCQUFnQjtRQUNoQixrQkFBa0IsRUFBRTtNQUN0QjtRQUNFLGdCQUFnQjtRQUNoQixrQkFBa0IsRUFBRSxFQUFFO0VBQzVCO0lBQ0U7TUFDRSxnQkFBZ0I7TUFDaEIsa0JBQWtCO01BQ2xCLG1CQUFtQixFQUFFO0lBQ3ZCO01BQ0UsZ0JBQWdCO01BQ2hCLGtCQUFrQixFQUFFO0lBQ3RCO01BQ0UsZ0JBQWdCLEVBQUUsRUFBRTs7QUFFMUI7RUFDRSxjQUFjLEVBQUU7RUFDaEI7SUFDRSxxQkFBcUIsRUFBRTtFQUN6Qjs7O0lBR0UscUJBQWM7SUFBZCxjQUFjLEVBQUU7SUFDaEI7Ozs7O01BS0UsY0FBYyxFQUFFO0VBQ3BCOztJQUVFLGlCQUFpQixFQUFFO0lBQ25CO01BQ0U7O1FBRUUsZ0JBQWdCO1FBQ2hCLG1CQUFtQixFQUFFO1FBQ3JCOztVQUVFLGlCQUFpQixFQUFFLEVBQUU7RUFDN0I7SUFDRSx3QkFBb0I7UUFBcEIsb0JBQW9CLEVBQUU7SUFDdEI7TUFDRSxrQkFBa0IsRUFBRTtFQUN4QjtJQUNFLGdDQUE0QjtRQUE1Qiw0QkFBNEI7SUFDNUIsa0JBQWtCLEVBQUU7SUFDcEI7TUFDRSxtQkFBbUIsRUFBRTtFQUN6QjtJQUNFLDJCQUF1QjtRQUF2Qix1QkFBdUI7SUFDdkIsdUJBQW9CO1FBQXBCLG9CQUFvQjtJQUNwQixtQkFBbUIsRUFBRTtJQUNyQjtNQUNFLGFBQWE7TUFDYixnQkFBZ0IsRUFBRTtFQUN0QjtJQUNFLGlCQUFpQixFQUFFO0VBQ3JCO0lBQ0U7O01BRUUsbUNBQStCO1VBQS9CLCtCQUErQjtNQUMvQix1QkFBb0I7VUFBcEIsb0JBQW9CLEVBQUU7TUFDdEI7O1FBRUUsb0JBQW9CO1FBQ3BCLGVBQWU7UUFDZixnQkFBZ0IsRUFBRTtJQUN0QjtNQUNFLHFCQUFxQixFQUFFLEVBQUU7RUFDN0I7SUFDRSxtQkFBMEI7UUFBMUIsMEJBQTBCLEVBQUU7SUFDNUI7TUFDRSxZQUFZLEVBQUU7RUFDbEI7SUFDRSxnQkFBZ0I7SUFDaEIsa0JBQWtCO0lBQ2xCLHdCQUF3QixFQUFFO0lBQzFCO01BQ0UsY0FBYyxFQUFFO0VBQ3BCO0lBQ0UsOEVBQThFO0lBQzlFLG1CQUFtQjtJQUNuQixrQkFBa0I7SUFDbEIsZ0JBQWdCO0lBQ2hCLGtCQUFrQjtJQUNsQix1QkFBdUI7SUFDdkIsMEJBQTBCO0lBQzFCLGVBQWU7SUFDZixjQUFjLEVBQUU7RUFDbEI7SUFDRSxzQkFBc0I7SUFDdEIsZ0JBQWdCO0lBQ2hCLGlCQUFpQjtJQUNqQixpQkFBaUIsRUFBRTtFQUNyQjtJQUNFLGdCQUFnQjtJQUNoQixrQkFBa0I7SUFDbEIsd0JBQXdCO0lBQ3hCLGVBQWU7SUFDZixpQkFBaUIsRUFBRTtJQUNuQjtNQUNFLGdCQUFnQjtNQUNoQixrQkFBa0I7TUFDbEIsd0JBQXdCLEVBQUU7RUFDOUI7SUFDRSxpQkFBaUIsRUFBRTtFQUNyQjtJQUNFLGdCQUFnQixFQUFFO0VBQ3BCO0lBQ0UsZ0JBQWdCO0lBQ2hCLGtCQUFrQjtJQUNsQix3QkFBd0I7SUFDeEIsZUFBZTtJQUNmLG9CQUFvQjtJQUNwQixtQkFBbUI7SUFDbkIsaUJBQWlCO0lBQ2pCLG1CQUFtQixFQUFFO0lBQ3JCO01BQ0UsbURBQW1EO01BQ25ELHNCQUFzQjtNQUN0QixZQUFZO01BQ1osYUFBYTtNQUNiLFlBQVk7TUFDWixtQkFBbUI7TUFDbkIsUUFBUTtNQUNSLFNBQVMsRUFBRTtFQUNmO0lBQ0Usa0JBQWM7SUFBZCxjQUFjO0lBQ2QsOEJBQW1DO1FBQW5DLG1DQUFtQztJQUNuQyxzQkFBc0I7SUFDdEIsbUJBQW1CO0lBQ25CLFdBQVcsRUFBRTtJQUNiO01BQ0UsaUJBQWlCLEVBQUU7SUFDckI7TUFDRSxvQkFBb0I7TUFDcEIsWUFBWSxFQUFFO0lBQ2hCO01BQ0U7UUFDRSwwQkFBK0I7WUFBL0IsK0JBQStCLEVBQUUsRUFBRTtJQUN2QztNQUNFO1FBQ0Usc0JBQTJCO1lBQTNCLDJCQUEyQixFQUFFLEVBQUU7RUFDckM7SUFDRSxvQkFBb0I7SUFDcEIsb0JBQW9CO0lBQ3BCLHdCQUF3QjtJQUN4Qix1QkFBdUI7SUFDdkIsYUFBYSxFQUFFO0lBQ2Y7O01BRUUsZUFBZSxFQUFFOztBQUV2QjtFQUNFLGlCQUFpQjtFQUNqQixtQkFBbUI7RUFDbkIsbUJBQW1CLEVBQUU7RUFDckI7SUFDRSxtQkFBbUI7SUFDbkIsT0FBTztJQUNQLGFBQWE7SUFDYiwrQ0FBK0M7SUFDL0MsWUFBWTtJQUNaLGVBQWUsRUFBRTs7QUFFckI7RUFDRSxxQkFBYztFQUFkLGNBQWM7RUFDZCxpQkFBaUI7RUFDakIsc0JBQXdCO01BQXhCLHdCQUF3QjtFQUN4QixpQkFBaUIsRUFBRTtFQUNuQjtJQUNFLG9CQUFvQjtJQUNwQixtQkFBbUI7SUFDbkIsd0JBQXdCO0lBQ3hCLHFCQUFjO0lBQWQsY0FBYztJQUNkLDJCQUF1QjtRQUF2Qix1QkFBdUI7SUFDdkIsc0JBQXdCO1FBQXhCLHdCQUF3QjtJQUN4QixtQkFBbUI7SUFDbkIsb0JBQWdCO1FBQWhCLGdCQUFnQjtJQUNoQixtQkFBbUIsRUFBRTtJQUNyQjtNQUNFLGdCQUFnQixFQUFFO0lBQ3BCO01BQ0Usb0JBQW9CLEVBQUU7TUFDdEI7UUFDRSxtQ0FBbUMsRUFBRTtFQUMzQztJQUNFLGdCQUFnQjtJQUNoQixvQkFBb0I7SUFDcEIsd0JBQXdCO0lBQ3hCLGFBQWE7SUFDYixjQUFjLEVBQUU7RUFDbEI7SUFDRSxnQkFBZ0I7SUFDaEIsa0JBQWtCO0lBQ2xCLHdCQUF3QjtJQUN4QixnQ0FBZ0M7SUFDaEMsY0FBYztJQUNkLG9CQUFvQixFQUFFO0VBQ3hCO0lBQ0UsaUJBQWlCO0lBQ2pCLGdCQUFnQjtJQUNoQixrQkFBa0I7SUFDbEIsdUJBQXVCO0lBQ3ZCLDBCQUEwQjtJQUMxQixtQkFBbUI7SUFDbkIsaUJBQWlCO0lBQ2pCLG1CQUFtQjtJQUNuQixvQ0FBb0MsRUFBRTtJQUN0QztNQUNFLHNCQUFzQjtNQUN0QixhQUFhO01BQ2IsWUFBWTtNQUNaLHFCQUFxQixFQUFFO0VBQzNCO0lBQ0U7TUFDRSwyQkFBdUI7VUFBdkIsdUJBQXVCO01BQ3ZCLHVCQUFvQjtVQUFwQixvQkFBb0IsRUFBRTtNQUN0QjtRQUNFLGVBQVc7WUFBWCxXQUFXO1FBQ1gsZ0JBQWdCO1FBQ2hCLGlCQUFpQjtRQUNqQixpQkFBaUIsRUFBRSxFQUFFOztBQUU3QjtFQUNFLDhEQUE4RDtFQUM5RCxrQkFBa0I7RUFDbEIsbUJBQW1CO0VBQ25CLHNCQUFzQixFQUFFO0VBQ3hCO0lBQ0UsZUFBZSxFQUFFO0VBQ25CO0lBQ0UsaUJBQWlCO0lBQ2pCLGVBQWU7SUFDZixtQkFBbUI7SUFDbkIsZUFBZSxFQUFFOztBQUVyQjtFQUNFLGlCQUFpQixFQUFFO0VBQ25CO0lBQ0UsZUFBZSxFQUFFOztBQUVyQjtFQUNFLHNCQUFzQixFQUFFO0VBQ3hCO0lBQ0U7TUFDRSxxQkFBcUIsRUFBRSxFQUFFO0VBQzdCO0lBQ0Usc0JBQXNCO0lBQ3RCLFVBQVU7SUFDVixXQUFXO0lBQ1gscUJBQWM7SUFBZCxjQUFjO0lBQ2QsbUJBQW1CO0lBQ25CLG9CQUFvQixFQUFFO0VBQ3hCO0lBQ0UscUJBQWM7SUFBZCxjQUFjO0lBQ2QsdUJBQStCO1FBQS9CLCtCQUErQjtJQUMvQix5QkFBc0I7UUFBdEIsc0JBQXNCLEVBQUU7SUFDeEI7TUFDRSxpQkFBaUI7TUFDakIsb0JBQW9CO01BQ3BCLGdCQUFnQjtNQUNoQix3QkFBd0I7TUFDeEIsZUFBZTtNQUNmLGlCQUFpQixFQUFFO0lBQ3JCO01BQ0UsaUJBQWlCO01BQ2pCLGdCQUFnQjtNQUNoQixvQkFBb0I7TUFDcEIsd0JBQXdCO01BQ3hCLGVBQWUsRUFBRTtJQUNuQjtNQUNFLGlCQUFpQjtNQUNqQixlQUFlO01BQ2YsZ0JBQWdCO01BQ2hCLHVCQUF1QjtNQUN2QixlQUFlO01BQ2YsMEJBQTBCLEVBQUU7SUFDOUI7TUFDRSxtQ0FBMkI7Y0FBM0IsMkJBQTJCLEVBQUU7RUFDakM7SUFDRSxlQUFlO0lBQ2YscUJBQWlCO1FBQWpCLGlCQUFpQjtJQUNqQixjQUFjLEVBQUU7SUFDaEI7TUFDRSxlQUFlO01BQ2YsWUFBWSxFQUFFO0lBQ2hCO01BQ0UsaUJBQWlCO01BQ2pCLG1CQUFtQixFQUFFO0lBQ3ZCO01BQ0UsWUFBWSxFQUFFO0lBQ2hCO01BQ0Usa0JBQWtCO01BQ2xCLGdCQUFnQjtNQUNoQix1QkFBdUI7TUFDdkIsMEJBQTBCO01BQzFCLGVBQWU7TUFDZixpQkFBaUI7TUFDakIsaUJBQWlCLEVBQUU7SUFDckI7TUFDRSxnQkFBZ0I7TUFDaEIsaUJBQWlCO01BQ2pCLGVBQWU7TUFDZixpQkFBaUIsRUFBRTtJQUNyQjtNQUNFLGVBQWU7TUFDZixrQkFBa0I7TUFDbEIsZ0JBQWdCO01BQ2hCLHdCQUF3QixFQUFFO0VBQzlCO0lBQ0U7TUFDRSxtQkFBbUI7TUFDbkIsb0JBQW9CLEVBQUU7SUFDeEI7TUFDRSxjQUFjLEVBQUUsRUFBRTtFQUN0QjtJQUNFO01BQ0Usb0JBQWdCO1VBQWhCLGdCQUFnQixFQUFFO0lBQ3BCO01BQ0Usa0JBQWM7VUFBZCxjQUFjLEVBQUUsRUFBRTtFQUN0QjtJQUNFO01BQ0UsbUJBQWU7VUFBZixlQUFlLEVBQUU7SUFDbkI7TUFDRSxjQUFjLEVBQUUsRUFBRTs7QUFFeEI7Ozs7RUFJRSxnQkFBZ0I7RUFDaEIsa0JBQWtCO0VBQ2xCLHdCQUF3QjtFQUN4QixlQUFlO0VBQ2YsY0FBYyxFQUFFOztBQUVsQjs7OztFQUlFLGdCQUFnQjtFQUNoQixvQkFBb0I7RUFDcEIsd0JBQXdCO0VBQ3hCLGVBQWU7RUFDZixpQkFBaUIsRUFBRTs7QUFFckI7RUFDRSx5QkFBeUI7RUFDekIsaUJBQWlCO0VBQ2pCLG9CQUFnQjtNQUFoQixnQkFBZ0IsRUFBRTtFQUNsQjtJQUNFLG1CQUFtQixFQUFFO0lBQ3JCO01BQ0UsaUJBQWlCLEVBQUU7RUFDdkI7SUFDRTtNQUNFLG1CQUFtQjtNQUNuQixvQkFBb0IsRUFBRTtNQUN0QjtRQUNFLGNBQWMsRUFBRSxFQUFFOztBQUUxQjtFQUNFLHFCQUFjO0VBQWQsY0FBYztFQUNkLG9CQUFvQjtFQUNwQixXQUFXO0VBQ1gsdUJBQStCO01BQS9CLCtCQUErQjtFQUMvQixpQkFBaUI7RUFDakIsWUFBWSxFQUFFO0VBQ2Q7SUFDRSxzREFBc0Q7SUFDdEQsNEJBQTRCO0lBQzVCLDZCQUE2QjtJQUM3QixlQUFlO0lBQ2YsYUFBYSxFQUFFO0VBQ2pCO0lBQ0U7TUFDRSxzQkFBd0I7VUFBeEIsd0JBQXdCO01BQ3hCLG9CQUFnQjtVQUFoQixnQkFBZ0I7TUFDaEIsaUJBQWlCLEVBQUU7TUFDbkI7UUFDRSxhQUFhLEVBQUUsRUFBRTtFQUN2QjtJQUNFLFlBQVksRUFBRTtFQUNoQjtJQUNFLDZCQUE2QjtJQUM3QixZQUFZLEVBQUU7RUFDaEI7SUFDRSw2QkFBNkI7SUFDN0IsWUFBWSxFQUFFO0VBQ2hCO0lBQ0UsOEJBQThCO0lBQzlCLFlBQVksRUFBRTtFQUNoQjtJQUNFLDhCQUE4QjtJQUM5QixhQUFhLEVBQUU7RUFDakI7SUFDRSw4QkFBOEI7SUFDOUIsWUFBWSxFQUFFO0VBQ2hCO0lBQ0UsOEJBQThCO0lBQzlCLFlBQVksRUFBRTs7QUFFbEI7RUFDRSxpQkFBaUI7RUFDakIsaUJBQWlCLEVBQUU7RUFDbkI7SUFDRSxtQkFBbUIsRUFBRTtFQUN2QjtJQUNFLGlCQUFpQixFQUFFO0VBQ3JCOzs7SUFHRSxtQkFBbUI7SUFDbkIsV0FBVyxFQUFFOztBQUVqQjtFQUNFO0lBQ0UscUJBQXFCLEVBQUUsRUFBRTs7QUFFN0I7Ozs7RUFJRSxtQkFBbUI7RUFDbkIsV0FBVyxFQUFFOztBQUVmO0VBQ0UsdUJBQXVCO0VBQ3ZCLG1CQUFtQjtFQUNuQixXQUFXO0VBQ1gsWUFBWTtFQUNaLGVBQWUsRUFBRTs7QUFFbkI7RUFDRSwrREFBK0Q7RUFDL0QsYUFBYTtFQUNiLGNBQWM7RUFDZCx5QkFBeUI7RUFDekIsV0FBVyxFQUFFOztBQUVmO0VBQ0UsNERBQTREO0VBQzVELGFBQWE7RUFDYixjQUFjO0VBQ2QsYUFBYTtFQUNiLFVBQVUsRUFBRTs7QUFFZDtFQUNFLDJDQUEyQztFQUMzQyxhQUFhO0VBQ2IsY0FBYztFQUNkLDZCQUE2QjtFQUM3QixZQUFZO0VBQ1osVUFBVSxFQUFFOztBQUVkO0VBQ0UsWUFBWTtFQUNaLFlBQVksRUFBRTs7QUFFaEI7RUFDRSxzREFBc0Q7RUFDdEQsa0JBQWtCO0VBQ2xCLHlCQUFpQjtFQUFqQixpQkFBaUI7RUFDakIsT0FBTztFQUNQLFdBQVcsRUFBRTtFQUNiO0lBQ0UscUJBQWM7SUFBZCxjQUFjO0lBQ2QsdUJBQStCO1FBQS9CLCtCQUErQjtJQUMvQixrQkFBa0I7SUFDbEIscUJBQXFCO0lBQ3JCLG1CQUFtQjtJQUNuQixvQkFBZ0I7UUFBaEIsZ0JBQWdCLEVBQUU7SUFDbEI7TUFDRTtRQUNFLDBCQUE4QjtZQUE5Qiw4QkFBOEIsRUFBRSxFQUFFO0lBQ3RDO01BQ0UsY0FBYyxFQUFFO0VBQ3BCO0lBQ0UsaUJBQWlCLEVBQUU7SUFDbkI7TUFDRSxlQUFlLEVBQUU7RUFDckI7SUFDRSxnQkFBZ0I7SUFDaEIsZ0JBQWdCO0lBQ2hCLGtCQUFrQjtJQUNsQixtQkFBbUI7SUFDbkIsdUJBQXVCO0lBQ3ZCLDBCQUEwQjtJQUMxQixlQUFlLEVBQUU7SUFDakI7TUFDRSx3QkFBd0I7TUFDeEIsc0JBQXNCLEVBQUU7SUFDMUI7TUFDRSx1QkFBdUI7TUFDdkIsa0JBQWtCO01BQ2xCLG9CQUFvQjtNQUNwQixhQUFhO01BQ2IsaUJBQWlCLEVBQUU7TUFDbkI7UUFDRSxhQUFhO1FBQ2Isb0JBQW9CLEVBQUU7RUFDNUI7SUFDRSxlQUFlO0lBQ2YsaUJBQWlCLEVBQUU7SUFDbkI7TUFDRSxlQUFlLEVBQUU7O0FBRXZCO0VBQ0UseUJBQXlCO0VBQ3pCLGVBQWUsRUFBRTtFQUNqQjtJQUNFLGdCQUFnQjtJQUNoQixrQkFBa0I7SUFDbEIsd0JBQXdCO0lBQ3hCLGVBQWU7SUFDZixvQkFBb0IsRUFBRTtFQUN4QjtJQUNFLGVBQWU7SUFDZixpQkFBaUI7SUFDakIsbUJBQW1CLEVBQUU7SUFDckI7TUFDRSxjQUFjLEVBQUU7RUFDcEI7SUFDRSxnQkFBZ0I7SUFDaEIsa0JBQWtCO0lBQ2xCLG9CQUFvQixFQUFFO0VBQ3hCO0lBQ0UsZ0JBQWdCLEVBQUU7RUFDcEI7SUFDRSxnQkFBZ0I7SUFDaEIsa0JBQWtCO0lBQ2xCLGVBQWU7SUFDZixvQkFBb0I7SUFDcEIsbUJBQW1CO0lBQ25CLGlCQUFpQjtJQUNqQixtQkFBbUI7SUFDbkIsd0JBQXdCLEVBQUU7SUFDMUI7TUFDRSw4TkFBOE47TUFDOU4sbUJBQW1CO01BQ25CLFFBQVE7TUFDUixTQUFTO01BQ1QsYUFBYTtNQUNiLFlBQVk7TUFDWixjQUFjO01BQ2QsZUFBZSxFQUFFO0VBQ3JCO0lBQ0UscUJBQWM7SUFBZCxjQUFjO0lBQ2QsbUJBQW1CLEVBQUU7SUFDckI7TUFDRSxjQUFjLEVBQUU7SUFDbEI7TUFDRSxnQ0FBNEI7VUFBNUIsNEJBQTRCLEVBQUU7SUFDaEM7TUFDRSxzQkFBd0I7VUFBeEIsd0JBQXdCO01BQ3hCLDJCQUF1QjtVQUF2Qix1QkFBdUI7TUFDdkIsdUJBQW9CO1VBQXBCLG9CQUFvQixFQUFFO01BQ3RCO1FBQ0UsaUJBQWlCO1FBQ2pCLG1CQUFtQixFQUFFO1FBQ3JCO1VBQ0UscUJBQWM7VUFBZCxjQUFjO1VBQ2Qsb0JBQWdCO2NBQWhCLGdCQUFnQjtVQUNoQix1QkFBK0I7Y0FBL0IsK0JBQStCLEVBQUU7VUFDakM7WUFDRTtjQUNFLHFCQUE0QjtrQkFBNUIsNEJBQTRCLEVBQUUsRUFBRTtRQUN0QztVQUNFLGlCQUFpQjtVQUNqQixZQUFZLEVBQUU7RUFDdEI7SUFDRSxpQkFBaUI7SUFDakIsc0JBQXNCLEVBQUU7SUFDeEI7TUFDRTtRQUNFLGdCQUFnQjtRQUNoQixrQkFBa0IsRUFBRSxFQUFFO0VBQzVCO0lBQ0Usb0JBQW9CO0lBQ3BCLG1CQUFtQjtJQUNuQixzQkFBc0IsRUFBRTtJQUN4QjtNQUNFLGVBQWUsRUFBRTtJQUNuQjtNQUNFLGlCQUFpQjtNQUNqQixlQUFlO01BQ2YsbUJBQW1CO01BQ25CLGVBQWUsRUFBRTtFQUNyQjtJQUNFLGlCQUFpQixFQUFFO0VBQ3JCO0lBQ0UscUJBQWM7SUFBZCxjQUFjO0lBQ2QsaUJBQWlCO0lBQ2pCLHNCQUF3QjtRQUF4Qix3QkFBd0I7SUFDeEIsaUJBQWlCLEVBQUU7SUFDbkI7TUFDRSxvQkFBb0I7TUFDcEIsbUJBQW1CO01BQ25CLHdCQUF3QjtNQUN4QixxQkFBYztNQUFkLGNBQWM7TUFDZCwyQkFBdUI7VUFBdkIsdUJBQXVCO01BQ3ZCLHNCQUF3QjtVQUF4Qix3QkFBd0I7TUFDeEIsbUJBQW1CO01BQ25CLG9CQUFnQjtVQUFoQixnQkFBZ0I7TUFDaEIsbUJBQW1CLEVBQUU7TUFDckI7UUFDRSxnQkFBZ0IsRUFBRTtNQUNwQjtRQUNFLG9CQUFvQixFQUFFO1FBQ3RCO1VBQ0UsbUNBQW1DLEVBQUU7SUFDM0M7TUFDRSxnQkFBZ0I7TUFDaEIsb0JBQW9CO01BQ3BCLHdCQUF3QjtNQUN4QixhQUFhO01BQ2IsY0FBYyxFQUFFO0lBQ2xCO01BQ0UsZ0JBQWdCO01BQ2hCLGtCQUFrQjtNQUNsQix3QkFBd0I7TUFDeEIsZ0NBQWdDLEVBQUU7SUFDcEM7TUFDRSxpQkFBaUI7TUFDakIsZ0JBQWdCO01BQ2hCLGtCQUFrQjtNQUNsQix1QkFBdUI7TUFDdkIsMEJBQTBCO01BQzFCLG1CQUFtQjtNQUNuQixpQkFBaUI7TUFDakIsbUJBQW1CO01BQ25CLG9DQUFvQyxFQUFFO01BQ3RDO1FBQ0Usc0JBQXNCO1FBQ3RCLGFBQWE7UUFDYixZQUFZO1FBQ1oscUJBQXFCLEVBQUU7SUFDM0I7TUFDRTtRQUNFLDJCQUF1QjtZQUF2Qix1QkFBdUIsRUFBRTtRQUN6QjtVQUNFLGVBQVc7Y0FBWCxXQUFXO1VBQ1gsZ0JBQWdCO1VBQ2hCLGlCQUFpQixFQUFFLEVBQUU7O0FBRS9CO0VBQ0UsaUJBQWlCLEVBQUU7O0FBRXJCO0VBQ0Usc0JBQXNCLEVBQUU7RUFDeEI7SUFDRTtNQUNFLHFCQUFxQixFQUFFLEVBQUU7RUFDN0I7SUFDRSxzQkFBc0I7SUFDdEIsVUFBVTtJQUNWLFdBQVc7SUFDWCxxQkFBYztJQUFkLGNBQWM7SUFDZCxtQkFBbUI7SUFDbkIsb0JBQW9CLEVBQUU7RUFDeEI7SUFDRSxxQkFBYztJQUFkLGNBQWM7SUFDZCx1QkFBK0I7UUFBL0IsK0JBQStCO0lBQy9CLHlCQUFzQjtRQUF0QixzQkFBc0IsRUFBRTtJQUN4QjtNQUNFLGlCQUFpQjtNQUNqQixvQkFBb0I7TUFDcEIsZ0JBQWdCO01BQ2hCLHdCQUF3QjtNQUN4QixlQUFlO01BQ2YsaUJBQWlCLEVBQUU7SUFDckI7TUFDRSxpQkFBaUI7TUFDakIsZ0JBQWdCO01BQ2hCLG9CQUFvQjtNQUNwQix3QkFBd0I7TUFDeEIsZUFBZSxFQUFFO0lBQ25CO01BQ0UsaUJBQWlCO01BQ2pCLGVBQWU7TUFDZixnQkFBZ0I7TUFDaEIsdUJBQXVCO01BQ3ZCLGVBQWU7TUFDZiwwQkFBMEIsRUFBRTtJQUM5QjtNQUNFLG1DQUEyQjtjQUEzQiwyQkFBMkIsRUFBRTtFQUNqQztJQUNFLGVBQWU7SUFDZixxQkFBaUI7UUFBakIsaUJBQWlCO0lBQ2pCLGNBQWMsRUFBRTtJQUNoQjtNQUNFLGVBQWU7TUFDZixZQUFZLEVBQUU7SUFDaEI7TUFDRSxpQkFBaUI7TUFDakIsbUJBQW1CLEVBQUU7SUFDdkI7TUFDRSxZQUFZLEVBQUU7SUFDaEI7TUFDRSxrQkFBa0I7TUFDbEIsZ0JBQWdCO01BQ2hCLHVCQUF1QjtNQUN2QiwwQkFBMEI7TUFDMUIsZUFBZTtNQUNmLGlCQUFpQjtNQUNqQixpQkFBaUIsRUFBRTtJQUNyQjtNQUNFLGdCQUFnQjtNQUNoQixpQkFBaUI7TUFDakIsZUFBZTtNQUNmLGlCQUFpQixFQUFFO0lBQ3JCO01BQ0UsZUFBZTtNQUNmLGtCQUFrQjtNQUNsQixnQkFBZ0I7TUFDaEIsd0JBQXdCLEVBQUU7RUFDOUI7SUFDRTtNQUNFLG1CQUFtQjtNQUNuQixvQkFBb0IsRUFBRTtJQUN4QjtNQUNFLGNBQWMsRUFBRSxFQUFFO0VBQ3RCO0lBQ0U7TUFDRSxvQkFBZ0I7VUFBaEIsZ0JBQWdCLEVBQUU7SUFDcEI7TUFDRSxrQkFBYztVQUFkLGNBQWMsRUFBRSxFQUFFO0VBQ3RCO0lBQ0U7TUFDRSxtQkFBZTtVQUFmLGVBQWUsRUFBRTtJQUNuQjtNQUNFLGNBQWMsRUFBRSxFQUFFOztBQUV4QjtFQUNFLGlEQUFpRDtFQUNqRCx1QkFBdUI7RUFDdkIsYUFBYTtFQUNiLGNBQWM7RUFDZCxtQkFBbUI7RUFDbkIseUJBQXlCO0VBQ3pCLFdBQVc7RUFDWCxZQUFZLEVBQUU7O0FBRWhCO0VBQ0U7SUFDRSxxQkFBcUIsRUFBRTtJQUN2QjtNQUNFLGFBQWE7TUFDYixjQUFjO01BQ2QsVUFBVTtNQUNWLDBCQUEwQjtNQUMxQixjQUFjLEVBQUUsRUFBRTs7QUFFeEI7RUFDRSxpREFBaUQ7RUFDakQsdUJBQXVCO0VBQ3ZCLGFBQWE7RUFDYixjQUFjO0VBQ2QsbUJBQW1CO0VBQ25CLGFBQWE7RUFDYixXQUFXO0VBQ1gsWUFBWSxFQUFFO0VBQ2Q7SUFDRTtNQUNFLGFBQWE7TUFDYixjQUFjO01BQ2QsWUFBWTtNQUNaLFdBQVcsRUFBRSxFQUFFOztBQUVyQjtFQUNFO0lBQ0UscUJBQXFCLEVBQUU7SUFDdkI7TUFDRSxhQUFhO01BQ2IsY0FBYztNQUNkLHdCQUF3QjtNQUN4QixVQUFVO01BQ1YsVUFBVSxFQUFFLEVBQUU7O0FBRXBCO0VBQ0Usa0RBQWtEO0VBQ2xELG1CQUFtQixFQUFFO0VBQ3JCO0lBQ0Usa0JBQWtCO0lBQ2xCLHFCQUFxQjtJQUNyQixpQkFBaUIsRUFBRTtJQUNuQjtNQUNFLDhEQUE4RDtNQUM5RCx1QkFBdUI7TUFDdkIsYUFBYTtNQUNiLGNBQWM7TUFDZCxtQkFBbUI7TUFDbkIseUJBQXlCO01BQ3pCLFVBQVU7TUFDVixZQUFZLEVBQUU7TUFDZDtRQUNFO1VBQ0UseUJBQXlCLEVBQUUsRUFBRTtJQUNuQztNQUNFO1FBQ0Usa0JBQWtCO1FBQ2xCLHFCQUFxQixFQUFFO1FBQ3ZCO1VBQ0UseUJBQXlCO1VBQ3pCLGFBQWE7VUFDYixjQUFjLEVBQUUsRUFBRTtJQUN4QjtNQUNFO1FBQ0UsMEJBQTBCLEVBQUUsRUFBRTtFQUNwQztJQUNFO01BQ0UsU0FBUyxFQUFFLEVBQUU7O0FBRW5CO0VBQ0UsaUJBQWlCLEVBQUU7O0FBRXJCOztFQUVFLG9CQUFvQjtFQUNwQixtQkFBbUIsRUFBRTtFQUNyQjtJQUNFOztNQUVFLGdCQUFnQjtNQUNoQixlQUFlLEVBQUUsRUFBRSIsImZpbGUiOiJwYWdlcy9lbnRlcnByaXNlL3NvbHV0aW9ucy9kZXNpZ24uY3NzIiwic291cmNlc0NvbnRlbnQiOlsiLmVlLWhlcm8ge1xuICBtYXgtd2lkdGg6IDY0MHB4O1xuICBwYWRkaW5nLXRvcDogMTMwcHg7XG4gIHBhZGRpbmctYm90dG9tOiAxNjBweDsgfVxuICAuZWUtaGVybzo6YmVmb3JlLCAuZWUtaGVybzo6YWZ0ZXIge1xuICAgIGRpc3BsYXk6IG5vbmU7IH1cbiAgLmVlLWhlcm8gaDEge1xuICAgIGZvbnQtc2l6ZTogNTJweDtcbiAgICBsaW5lLWhlaWdodDogNjJweDtcbiAgICBtYXgtd2lkdGg6IDkzMHB4O1xuICAgIGxldHRlci1zcGFjaW5nOiAtMC4wM2VtO1xuICAgIGNvbG9yOiAjMDIwODE0O1xuICAgIG1hcmdpbi10b3A6IDA7XG4gICAgbWFyZ2luLWJvdHRvbTogMTZweDsgfVxuICAuZWUtaGVybyBoNCB7XG4gICAgZm9udC1mYW1pbHk6IFwiUm9ib3RvIE1vbm9cIiwgTWVubG8sIE1vbmFjbywgQ29uc29sYXMsIFwiQ291cmllciBOZXdcIiwgbW9ub3NwYWNlO1xuICAgIGZvbnQtd2VpZ2h0OiBib2xkO1xuICAgIGZvbnQtc2l6ZTogMTNweDtcbiAgICBsaW5lLWhlaWdodDogMjZweDtcbiAgICBsZXR0ZXItc3BhY2luZzogMC4xNGVtO1xuICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XG4gICAgY29sb3I6ICM5MkExQjM7XG4gICAgbWFyZ2luLWJvdHRvbTogMjlweDsgfVxuICAuZWUtaGVybyBwIHtcbiAgICBmb250LWZhbWlseTogXCJFaW5hXCIsIFwiSGVsdmV0aWNhIE5ldWVcIiwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmO1xuICAgIGZvbnQtc2l6ZTogMjRweDtcbiAgICBmb250LXdlaWdodDogNDAwO1xuICAgIGxpbmUtaGVpZ2h0OiAzNnB4O1xuICAgIGxldHRlci1zcGFjaW5nOiAtMC4wNGVtO1xuICAgIGNvbG9yOiByZ2JhKDM5LCA1MCwgNjMsIDAuOCk7IH1cbiAgLmVlLWhlcm8gLmJ0biB7XG4gICAgcGFkZGluZy1sZWZ0OiAyNHB4O1xuICAgIHBhZGRpbmctcmlnaHQ6IDIwcHg7XG4gICAgcGFkZGluZy10b3A6IDE4cHg7XG4gICAgcGFkZGluZy1ib3R0b206IDE4cHg7XG4gICAgZm9udC1zaXplOiAxNHB4O1xuICAgIG1hcmdpbi10b3A6IDE2cHg7XG4gICAgbGluZS1oZWlnaHQ6IDIwcHg7XG4gICAgbGV0dGVyLXNwYWNpbmc6IDAuMDhlbTtcbiAgICBjb2xvcjogd2hpdGU7XG4gICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcbiAgICBmb250LXdlaWdodDogNzAwO1xuICAgIGJhY2tncm91bmQ6ICMzODgwRkY7XG4gICAgYm94LXNoYWRvdzogMHB4IDJweCA0cHggcmdiYSgyLCA4LCAyMCwgMC4xKSwgMHB4IDFweCAycHggcmdiYSgyLCA4LCAyMCwgMC4wOCk7XG4gICAgYm9yZGVyLXJhZGl1czogMjEwcHg7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyOyB9XG4gICAgLmVlLWhlcm8gLmJ0bjo6YWZ0ZXIge1xuICAgICAgYmFja2dyb3VuZC1pbWFnZTogdXJsKCdkYXRhOmltYWdlL3N2Zyt4bWw7dXRmOCw8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiBmaWxsPVwid2hpdGVcIiB2aWV3Qm94PVwiMCAwIDUxMiA1MTJcIj48cGF0aCBkPVwiTTg1IDI3Ny4zNzVoMjU5LjcwNEwyMjUuMDAyIDM5Ny4wNzcgMjU2IDQyN2wxNzEtMTcxTDI1NiA4NWwtMjkuOTIyIDI5LjkyNCAxMTguNjI2IDExOS43MDFIODV2NDIuNzV6XCIvPjwvc3ZnPicpO1xuICAgICAgYmFja2dyb3VuZC1zaXplOiAxMDAlO1xuICAgICAgY29udGVudDogJyc7XG4gICAgICBoZWlnaHQ6IDIwcHg7XG4gICAgICB3aWR0aDogMjBweDtcbiAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgbWFyZ2luLWxlZnQ6IDhweDtcbiAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtMXB4KTsgfVxuICAgIC5lZS1oZXJvIC5idG46aG92ZXIge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogIzRmOGJmNTsgfVxuICAuZWUtaGVyby0tbGFyZ2UgaDEge1xuICAgIGZvbnQtc2l6ZTogNjJweDtcbiAgICBsaW5lLWhlaWdodDogNjlweDsgfVxuICAuZWUtaGVyby0td2lkZSB7XG4gICAgbWF4LXdpZHRoOiA5NjBweDsgfVxuICAuZWUtaGVyby0tY2VudGVyZWQge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICBtYXJnaW4tbGVmdDogYXV0bztcbiAgICBtYXJnaW4tcmlnaHQ6IGF1dG87IH1cbiAgQG1lZGlhIChtYXgtd2lkdGg6IDc2N3B4KSB7XG4gICAgLmVlLWhlcm8ge1xuICAgICAgcGFkZGluZy10b3A6IDcwcHg7XG4gICAgICBwYWRkaW5nLWJvdHRvbTogMDsgfVxuICAgICAgLmVlLWhlcm8gaDEge1xuICAgICAgICBmb250LXNpemU6IDQ0cHg7XG4gICAgICAgIGxpbmUtaGVpZ2h0OiA1MnB4OyB9XG4gICAgICAuZWUtaGVyby0tbGFyZ2UgaDEge1xuICAgICAgICBmb250LXNpemU6IDUwcHg7XG4gICAgICAgIGxpbmUtaGVpZ2h0OiA2MHB4OyB9IH1cbiAgQG1lZGlhIChtYXgtd2lkdGg6IDQ4MHB4KSB7XG4gICAgLmVlLWhlcm8gaDEge1xuICAgICAgZm9udC1zaXplOiAzNnB4O1xuICAgICAgbGluZS1oZWlnaHQ6IDQ0cHg7XG4gICAgICBtYXJnaW4tYm90dG9tOiA2cHg7IH1cbiAgICAuZWUtaGVyby0tbGFyZ2UgaDEge1xuICAgICAgZm9udC1zaXplOiA0MnB4O1xuICAgICAgbGluZS1oZWlnaHQ6IDUycHg7IH1cbiAgICAuZWUtaGVybyAuYnRuIHtcbiAgICAgIG1hcmdpbi10b3A6IDhweDsgfSB9XG5cbi5lZS1tYWluIHtcbiAgbWFyZ2luLXRvcDogMDsgfVxuICAuZWUtbWFpbiBzZWN0aW9uIHtcbiAgICBtYXJnaW4tYm90dG9tOiAyMDBweDsgfVxuICAuZWUtbWFpbiAubGVmdCxcbiAgLmVlLW1haW4gLnJpZ2h0LFxuICAuZWUtbWFpbiAuY2VudGVyIHtcbiAgICBkaXNwbGF5OiBmbGV4OyB9XG4gICAgLmVlLW1haW4gLmxlZnQ6OmJlZm9yZSwgLmVlLW1haW4gLmxlZnQ6OmFmdGVyLFxuICAgIC5lZS1tYWluIC5yaWdodDo6YmVmb3JlLFxuICAgIC5lZS1tYWluIC5yaWdodDo6YWZ0ZXIsXG4gICAgLmVlLW1haW4gLmNlbnRlcjo6YmVmb3JlLFxuICAgIC5lZS1tYWluIC5jZW50ZXI6OmFmdGVyIHtcbiAgICAgIGRpc3BsYXk6IG5vbmU7IH1cbiAgLmVlLW1haW4gLmxlZnQgLmNvbnRlbnQsXG4gIC5lZS1tYWluIC5yaWdodCAuY29udGVudCB7XG4gICAgbWF4LXdpZHRoOiA0ODBweDsgfVxuICAgIEBtZWRpYSAobWF4LXdpZHRoOiA3NjdweCkge1xuICAgICAgLmVlLW1haW4gLmxlZnQgLmNvbnRlbnQsXG4gICAgICAuZWUtbWFpbiAucmlnaHQgLmNvbnRlbnQge1xuICAgICAgICBtYXgtd2lkdGg6IDEwMCU7XG4gICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsgfVxuICAgICAgICAuZWUtbWFpbiAubGVmdCAuY29udGVudCBsaSxcbiAgICAgICAgLmVlLW1haW4gLnJpZ2h0IC5jb250ZW50IGxpIHtcbiAgICAgICAgICB0ZXh0LWFsaWduOiBsZWZ0OyB9IH1cbiAgLmVlLW1haW4gLmxlZnQge1xuICAgIGZsZXgtZGlyZWN0aW9uOiByb3c7IH1cbiAgICAuZWUtbWFpbiAubGVmdCAuZ3JhcGhpY3Mge1xuICAgICAgbWFyZ2luLWxlZnQ6IGF1dG87IH1cbiAgLmVlLW1haW4gLnJpZ2h0IHtcbiAgICBmbGV4LWRpcmVjdGlvbjogcm93LXJldmVyc2U7XG4gICAgbWFyZ2luLWxlZnQ6IGF1dG87IH1cbiAgICAuZWUtbWFpbiAucmlnaHQgLmdyYXBoaWNzIHtcbiAgICAgIG1hcmdpbi1yaWdodDogYXV0bzsgfVxuICAuZWUtbWFpbiAuY2VudGVyIHtcbiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgdGV4dC1hbGlnbjogY2VudGVyOyB9XG4gICAgLmVlLW1haW4gLmNlbnRlciAuY29udGVudCB7XG4gICAgICB3aWR0aDogODk0cHg7XG4gICAgICBtYXgtd2lkdGg6IDEwMCU7IH1cbiAgLmVlLW1haW4gLmZ1bGwgLmNvbnRlbnQge1xuICAgIG1heC13aWR0aDogNTY4cHg7IH1cbiAgQG1lZGlhIChtYXgtd2lkdGg6IDc2N3B4KSB7XG4gICAgLmVlLW1haW4gLnJpZ2h0LFxuICAgIC5lZS1tYWluIC5sZWZ0IHtcbiAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW4tcmV2ZXJzZTtcbiAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7IH1cbiAgICAgIC5lZS1tYWluIC5yaWdodCAuZ3JhcGhpY3MsXG4gICAgICAuZWUtbWFpbiAubGVmdCAuZ3JhcGhpY3Mge1xuICAgICAgICBtYXJnaW4tYm90dG9tOiAyNHB4O1xuICAgICAgICBtYXJnaW4tbGVmdDogMDtcbiAgICAgICAgbWFyZ2luLXJpZ2h0OiAwOyB9XG4gICAgLmVlLW1haW4gc2VjdGlvbiB7XG4gICAgICBtYXJnaW4tYm90dG9tOiAxMDBweDsgfSB9XG4gIC5lZS1tYWluIC5ncmFwaGljcyB7XG4gICAganVzdGlmeS1jb250ZW50OiBmbGV4LWVuZDsgfVxuICAgIC5lZS1tYWluIC5ncmFwaGljcyBpbWcge1xuICAgICAgd2lkdGg6IDEwMCU7IH1cbiAgLmVlLW1haW4gaDIge1xuICAgIGZvbnQtc2l6ZTogNDRweDtcbiAgICBsaW5lLWhlaWdodDogNTFweDtcbiAgICBsZXR0ZXItc3BhY2luZzogLTAuMDNlbTsgfVxuICAgIC5lZS1tYWluIGgyOmZpcnN0LWNoaWxkIHtcbiAgICAgIG1hcmdpbi10b3A6IDA7IH1cbiAgLmVlLW1haW4gLmVlLXNlY3Rpb25fX3RpdGxlIHtcbiAgICBmb250LWZhbWlseTogXCJSb2JvdG8gTW9ub1wiLCBNZW5sbywgTW9uYWNvLCBDb25zb2xhcywgXCJDb3VyaWVyIE5ld1wiLCBtb25vc3BhY2U7XG4gICAgZm9udC1zdHlsZTogbm9ybWFsO1xuICAgIGZvbnQtd2VpZ2h0OiBib2xkO1xuICAgIGZvbnQtc2l6ZTogMTJweDtcbiAgICBsaW5lLWhlaWdodDogMjNweDtcbiAgICBsZXR0ZXItc3BhY2luZzogMC4xNGVtO1xuICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XG4gICAgY29sb3I6ICM1QjcwOEI7XG4gICAgbWFyZ2luLXRvcDogMDsgfVxuICAuZWUtbWFpbiAuZWUtc2VjdGlvbl9fY3RhIHtcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgZm9udC1zaXplOiAxOHB4O1xuICAgIGZvbnQtd2VpZ2h0OiA1MDA7XG4gICAgbWFyZ2luLXRvcDogMTZweDsgfVxuICAuZWUtbWFpbiBwIHtcbiAgICBmb250LXNpemU6IDIwcHg7XG4gICAgbGluZS1oZWlnaHQ6IDMxcHg7XG4gICAgbGV0dGVyLXNwYWNpbmc6IC0wLjAyZW07XG4gICAgY29sb3I6ICM1QjcwOEI7XG4gICAgbWFyZ2luLXRvcDogMThweDsgfVxuICAgIC5lZS1tYWluIHAuc20ge1xuICAgICAgZm9udC1zaXplOiAxNnB4O1xuICAgICAgbGluZS1oZWlnaHQ6IDI5cHg7XG4gICAgICBsZXR0ZXItc3BhY2luZzogLTAuMDFlbTsgfVxuICAuZWUtbWFpbiB1bDpub3QoLmZyYW1ld29ya3MpIHtcbiAgICBtYXJnaW4tdG9wOiA1NHB4OyB9XG4gIC5lZS1tYWluIC5jb250ZW50IHVsIHtcbiAgICBwYWRkaW5nLWxlZnQ6IDA7IH1cbiAgLmVlLW1haW4gLmNvbnRlbnQgbGkge1xuICAgIGZvbnQtc2l6ZTogMTZweDtcbiAgICBsaW5lLWhlaWdodDogMjNweDtcbiAgICBsZXR0ZXItc3BhY2luZzogLTAuMDJlbTtcbiAgICBjb2xvcjogIzFBMjMyRjtcbiAgICBtYXJnaW4tYm90dG9tOiA0MHB4O1xuICAgIHBhZGRpbmctbGVmdDogMzBweDtcbiAgICBsaXN0LXN0eWxlOiBub25lO1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsgfVxuICAgIC5lZS1tYWluIC5jb250ZW50IGxpOjpiZWZvcmUge1xuICAgICAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFwiL2ltZy9lbnRlcnByaXNlL2NoZWNrLnN2Z1wiKTtcbiAgICAgIGJhY2tncm91bmQtc2l6ZTogMTAwJTtcbiAgICAgIGNvbnRlbnQ6ICcnO1xuICAgICAgaGVpZ2h0OiAxMHB4O1xuICAgICAgd2lkdGg6IDEzcHg7XG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICBsZWZ0OiAwO1xuICAgICAgdG9wOiA4cHg7IH1cbiAgLmVlLW1haW4gLmZlYXR1cmVzIHtcbiAgICBkaXNwbGF5OiBncmlkO1xuICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogMWZyIDFmciAxZnI7XG4gICAgZ3JpZC1jb2x1bW4tZ2FwOiA2NHB4O1xuICAgIGdyaWQtcm93LWdhcDogMjRweDtcbiAgICBwYWRkaW5nOiAwOyB9XG4gICAgLmVlLW1haW4gLmZlYXR1cmVzIGxpIHtcbiAgICAgIGxpc3Qtc3R5bGU6IG5vbmU7IH1cbiAgICAuZWUtbWFpbiAuZmVhdHVyZXMgLmljb24ge1xuICAgICAgbWFyZ2luLWJvdHRvbTogMTZweDtcbiAgICAgIHdpZHRoOiA0OHB4OyB9XG4gICAgQG1lZGlhIChtYXgtd2lkdGg6IDk5MXB4KSB7XG4gICAgICAuZWUtbWFpbiAuZmVhdHVyZXMge1xuICAgICAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IDFmciAxZnI7IH0gfVxuICAgIEBtZWRpYSAobWF4LXdpZHRoOiA1MDBweCkge1xuICAgICAgLmVlLW1haW4gLmZlYXR1cmVzIHtcbiAgICAgICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiAxZnI7IH0gfVxuICAuZWUtbWFpbiAuY3RhLWNhcmQge1xuICAgIGJhY2tncm91bmQ6ICM0YThiZmM7XG4gICAgYm9yZGVyLXJhZGl1czogMTJweDtcbiAgICBwYWRkaW5nOiA3MnB4IDcycHggNjBweDtcbiAgICBiYWNrZ3JvdW5kLXNpemU6IGNvdmVyO1xuICAgIGNvbG9yOiB3aGl0ZTsgfVxuICAgIC5lZS1tYWluIC5jdGEtY2FyZCAuZWUtc2VjdGlvbl9fdGl0bGUsXG4gICAgLmVlLW1haW4gLmN0YS1jYXJkIHAge1xuICAgICAgY29sb3I6ICNDRUQ2RTA7IH1cblxuI2hvdy10byB7XG4gIG1hcmdpbi1ib3R0b206IDA7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgcGFkZGluZy10b3A6IDE0MHB4OyB9XG4gICNob3ctdG86OmJlZm9yZSB7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIHRvcDogMDtcbiAgICB3aWR0aDogMTAwdnc7XG4gICAgYm9yZGVyLXRvcDogMXB4IHNvbGlkIHJnYmEoMTQ2LCAxNjEsIDE3OSwgMC4zKTtcbiAgICBjb250ZW50OiAnJztcbiAgICBkaXNwbGF5OiBibG9jazsgfVxuXG4uY2FyZHMtLXJlZC12LWJsdWUge1xuICBkaXNwbGF5OiBmbGV4O1xuICB0ZXh0LWFsaWduOiBsZWZ0O1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgbWFyZ2luLXRvcDogMzhweDsgfVxuICAuY2FyZHMtLXJlZC12LWJsdWVfX2NhcmQge1xuICAgIGJhY2tncm91bmQ6ICM3Q0FCRkY7XG4gICAgYm9yZGVyLXJhZGl1czogOHB4O1xuICAgIHBhZGRpbmc6IDQwcHggNDBweCAzNHB4O1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICBhbGlnbi1pdGVtczogZmxleC1zdGFydDtcbiAgICBtYXJnaW4tcmlnaHQ6IDI0cHg7XG4gICAgZmxleDogMCAxIDQ2MHB4O1xuICAgIGJvcmRlci1yYWRpdXM6IDhweDsgfVxuICAgIC5jYXJkcy0tcmVkLXYtYmx1ZV9fY2FyZDpsYXN0LWNoaWxkIHtcbiAgICAgIG1hcmdpbi1yaWdodDogMDsgfVxuICAgIC5jYXJkcy0tcmVkLXYtYmx1ZV9fY2FyZDpudGgtY2hpbGQoMikge1xuICAgICAgYmFja2dyb3VuZDogI0Y4OEQ4RDsgfVxuICAgICAgLmNhcmRzLS1yZWQtdi1ibHVlX19jYXJkOm50aC1jaGlsZCgyKSAuYnRuIHtcbiAgICAgICAgYmFja2dyb3VuZDogcmdiYSgyNDQsIDg0LCA4NCwgMC41KTsgfVxuICAuY2FyZHMtLXJlZC12LWJsdWUgaDMge1xuICAgIGZvbnQtc2l6ZTogMjRweDtcbiAgICBsaW5lLWhlaWdodDogbm9ybWFsO1xuICAgIGxldHRlci1zcGFjaW5nOiAtMC4wMmVtO1xuICAgIGNvbG9yOiB3aGl0ZTtcbiAgICBtYXJnaW4tdG9wOiAwOyB9XG4gIC5jYXJkcy0tcmVkLXYtYmx1ZSBwIHtcbiAgICBmb250LXNpemU6IDE4cHg7XG4gICAgbGluZS1oZWlnaHQ6IDI2cHg7XG4gICAgbGV0dGVyLXNwYWNpbmc6IC0wLjAyZW07XG4gICAgY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC43KTtcbiAgICBtYXJnaW4tdG9wOiAwO1xuICAgIG1hcmdpbi1ib3R0b206IDIycHg7IH1cbiAgLmNhcmRzLS1yZWQtdi1ibHVlIC5idG4ge1xuICAgIG1hcmdpbi10b3A6IGF1dG87XG4gICAgZm9udC1zaXplOiAxNHB4O1xuICAgIGxpbmUtaGVpZ2h0OiAyMnB4O1xuICAgIGxldHRlci1zcGFjaW5nOiAwLjA5ZW07XG4gICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcbiAgICBwYWRkaW5nOiAxMHB4IDE0cHg7XG4gICAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgICBib3JkZXItcmFkaXVzOiA4cHg7XG4gICAgYmFja2dyb3VuZDogcmdiYSg1NiwgMTI4LCAyNTUsIDAuNSk7IH1cbiAgICAuY2FyZHMtLXJlZC12LWJsdWUgLmJ0biBpb24taWNvbiB7XG4gICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgICBoZWlnaHQ6IDE0cHg7XG4gICAgICB3aWR0aDogMTRweDtcbiAgICAgIHZlcnRpY2FsLWFsaWduOiAtMnB4OyB9XG4gIEBtZWRpYSAobWF4LXdpZHRoOiA3NjdweCkge1xuICAgIC5jYXJkcy0tcmVkLXYtYmx1ZSB7XG4gICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsgfVxuICAgICAgLmNhcmRzLS1yZWQtdi1ibHVlX19jYXJkIHtcbiAgICAgICAgZmxleDogYXV0bztcbiAgICAgICAgbWFyZ2luLXJpZ2h0OiAwO1xuICAgICAgICBtYXJnaW4tdG9wOiAyMHB4O1xuICAgICAgICBtYXgtd2lkdGg6IDQ2MHB4OyB9IH1cblxuYXNpZGUge1xuICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoMTgwZGVnLCAjRjlGQUZCIDAlLCAjRkZGRkZGIDEwMCUpO1xuICBtYXJnaW4tdG9wOiAtNjBweDtcbiAgcGFkZGluZy10b3A6IDIwMHB4O1xuICBwYWRkaW5nLWJvdHRvbTogMTIwcHg7IH1cbiAgYXNpZGUgcCB7XG4gICAgY29sb3I6ICM0MTRENUM7IH1cbiAgYXNpZGUgLmNvbnRlbnQge1xuICAgIG1heC13aWR0aDogNDMycHg7XG4gICAgbWFyZ2luOiAwIGF1dG87XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgIGRpc3BsYXk6IGJsb2NrOyB9XG5cbi5lZS1nZXQtc3RhcnRlZCB7XG4gIG1heC13aWR0aDogNzAwcHg7IH1cbiAgLmVlLWdldC1zdGFydGVkIGgzIHtcbiAgICBjb2xvcjogIzQxNEQ1QzsgfVxuXG4ucmVzb3VyY2VzIHtcbiAgcGFkZGluZy1ib3R0b206IDEyMHB4OyB9XG4gIEBtZWRpYSAobWF4LXdpZHRoOiA3NjhweCkge1xuICAgIC5yZXNvdXJjZXMge1xuICAgICAgcGFkZGluZy1ib3R0b206IDYwcHg7IH0gfVxuICAucmVzb3VyY2VzIC5jYXJkcyB7XG4gICAgbGlzdC1zdHlsZS10eXBlOiBub25lO1xuICAgIG1hcmdpbjogMDtcbiAgICBwYWRkaW5nOiAwO1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgbWFyZ2luLWxlZnQ6IC0yNHB4O1xuICAgIG1hcmdpbi1yaWdodDogLTI0cHg7IH1cbiAgLnJlc291cmNlcyBoZ3JvdXAge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xuICAgIGFsaWduLWl0ZW1zOiBiYXNlbGluZTsgfVxuICAgIC5yZXNvdXJjZXMgaGdyb3VwIGgzIHtcbiAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7XG4gICAgICBsaW5lLWhlaWdodDogbm9ybWFsO1xuICAgICAgZm9udC1zaXplOiAyOHB4O1xuICAgICAgbGV0dGVyLXNwYWNpbmc6IC0wLjAyZW07XG4gICAgICBjb2xvcjogIzFBMjMyRjtcbiAgICAgIG1hcmdpbi1ib3R0b206IDA7IH1cbiAgICAucmVzb3VyY2VzIGhncm91cCBoNCB7XG4gICAgICBmb250LXdlaWdodDogNjAwO1xuICAgICAgZm9udC1zaXplOiAyNHB4O1xuICAgICAgbGluZS1oZWlnaHQ6IG5vcm1hbDtcbiAgICAgIGxldHRlci1zcGFjaW5nOiAtMC4wMmVtO1xuICAgICAgY29sb3I6ICMxQTIzMkY7IH1cbiAgICAucmVzb3VyY2VzIGhncm91cCBoNSB7XG4gICAgICBmb250LXdlaWdodDogNzAwO1xuICAgICAgbGluZS1oZWlnaHQ6IDE7XG4gICAgICBmb250LXNpemU6IDE0cHg7XG4gICAgICBsZXR0ZXItc3BhY2luZzogMC4wOGVtO1xuICAgICAgY29sb3I6ICMzODgwRkY7XG4gICAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlOyB9XG4gICAgLnJlc291cmNlcyBoZ3JvdXAgaW9uLWljb24ge1xuICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDJweCk7IH1cbiAgLnJlc291cmNlcyAuY2FyZHMgbGkge1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIGZsZXg6IDAgMCAzMy4zMyU7XG4gICAgcGFkZGluZzogMjRweDsgfVxuICAgIC5yZXNvdXJjZXMgLmNhcmRzIGxpIGEge1xuICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICB3aWR0aDogMTAwJTsgfVxuICAgIC5yZXNvdXJjZXMgLmNhcmRzIGxpIC5pbWctd3JhcHBlciB7XG4gICAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgICAgYm9yZGVyLXJhZGl1czogNnB4OyB9XG4gICAgLnJlc291cmNlcyAuY2FyZHMgbGkgaW1nIHtcbiAgICAgIHdpZHRoOiAxMDAlOyB9XG4gICAgLnJlc291cmNlcyAuY2FyZHMgbGkgaDYge1xuICAgICAgbGluZS1oZWlnaHQ6IDIzcHg7XG4gICAgICBmb250LXNpemU6IDEycHg7XG4gICAgICBsZXR0ZXItc3BhY2luZzogMC4xMmVtO1xuICAgICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcbiAgICAgIGNvbG9yOiAjQjJCRUNEO1xuICAgICAgbWFyZ2luLWJvdHRvbTogMDtcbiAgICAgIG1hcmdpbi10b3A6IDE2cHg7IH1cbiAgICAucmVzb3VyY2VzIC5jYXJkcyBsaSBoNCB7XG4gICAgICBmb250LXNpemU6IDIwcHg7XG4gICAgICBtYXJnaW4tdG9wOiAxMHB4O1xuICAgICAgY29sb3I6ICMxQTIzMkY7XG4gICAgICBmb250LXdlaWdodDogNjAwOyB9XG4gICAgLnJlc291cmNlcyAuY2FyZHMgbGkgcCB7XG4gICAgICBjb2xvcjogIzVCNzA4QjtcbiAgICAgIGxpbmUtaGVpZ2h0OiAyMnB4O1xuICAgICAgZm9udC1zaXplOiAxNHB4O1xuICAgICAgbGV0dGVyLXNwYWNpbmc6IC0wLjAyZW07IH1cbiAgQG1lZGlhIChtYXgtd2lkdGg6IDk5MnB4KSB7XG4gICAgLnJlc291cmNlcyAuY2FyZHMge1xuICAgICAgbWFyZ2luLWxlZnQ6IC0xMnB4O1xuICAgICAgbWFyZ2luLXJpZ2h0OiAtMTJweDsgfVxuICAgIC5yZXNvdXJjZXMgLmNhcmRzIGxpIHtcbiAgICAgIHBhZGRpbmc6IDEycHg7IH0gfVxuICBAbWVkaWEgKG1heC13aWR0aDogNzY4cHgpIHtcbiAgICAucmVzb3VyY2VzIC5jYXJkcyB7XG4gICAgICBmbGV4LXdyYXA6IHdyYXA7IH1cbiAgICAucmVzb3VyY2VzIC5jYXJkcyBsaSB7XG4gICAgICBmbGV4OiAwIDAgNTAlOyB9IH1cbiAgQG1lZGlhIChtYXgtd2lkdGg6IDQ4MHB4KSB7XG4gICAgLnJlc291cmNlcyAuY2FyZHMgbGkge1xuICAgICAgZmxleDogMCAwIDEwMCU7IH1cbiAgICAucmVzb3VyY2VzIGg1IHtcbiAgICAgIGRpc3BsYXk6IG5vbmU7IH0gfVxuXG4uZWUtbWFpbiAuZmVhdHVyZXMgbGkgcCxcbi5lZS1tYWluIC5jYXJkcyBsaSBwLFxuLnJlc291cmNlcyAuZmVhdHVyZXMgbGkgcCxcbi5yZXNvdXJjZXMgLmNhcmRzIGxpIHAge1xuICBmb250LXNpemU6IDE2cHg7XG4gIGxpbmUtaGVpZ2h0OiAyOXB4O1xuICBsZXR0ZXItc3BhY2luZzogLTAuMDFlbTtcbiAgY29sb3I6ICM3Mzg0OUE7XG4gIG1hcmdpbi10b3A6IDA7IH1cblxuLmVlLW1haW4gLmZlYXR1cmVzIGxpIGg0LFxuLmVlLW1haW4gLmNhcmRzIGxpIGg0LFxuLnJlc291cmNlcyAuZmVhdHVyZXMgbGkgaDQsXG4ucmVzb3VyY2VzIC5jYXJkcyBsaSBoNCB7XG4gIGZvbnQtc2l6ZTogMjBweDtcbiAgbGluZS1oZWlnaHQ6IG5vcm1hbDtcbiAgbGV0dGVyLXNwYWNpbmc6IC0wLjAyZW07XG4gIGNvbG9yOiAjMDIwODE0O1xuICBmb250LXdlaWdodDogNjAwOyB9XG5cbi5yZXNvdXJjZXMgLmNhcmRzIHtcbiAgbWFyZ2luLXRvcDogMCAhaW1wb3J0YW50O1xuICB0ZXh0LWFsaWduOiBsZWZ0O1xuICBmbGV4LXdyYXA6IHdyYXA7IH1cbiAgLnJlc291cmNlcyAuY2FyZHMgLmltZy13cmFwcGVyIHtcbiAgICBib3JkZXItcmFkaXVzOiA2cHg7IH1cbiAgICAucmVzb3VyY2VzIC5jYXJkcyAuaW1nLXdyYXBwZXIgKyBoNCB7XG4gICAgICBtYXJnaW4tdG9wOiAyNHB4OyB9XG4gIEBtZWRpYSAobWluLXdpZHRoOiAxMjIwcHgpIHtcbiAgICAucmVzb3VyY2VzIC5jYXJkcyB7XG4gICAgICBtYXJnaW4tbGVmdDogLTQwcHg7XG4gICAgICBtYXJnaW4tcmlnaHQ6IC00MHB4OyB9XG4gICAgICAucmVzb3VyY2VzIC5jYXJkcyBsaSB7XG4gICAgICAgIHBhZGRpbmc6IDQwcHg7IH0gfVxuXG4ucmVzb3VyY2VzIC5yZXNvdXJjZXNfX2N1c3RvbWVyLWxvZ29zIHtcbiAgZGlzcGxheTogZmxleDtcbiAgbWFyZ2luOiAyNnB4IGF1dG8gMDtcbiAgcGFkZGluZzogMDtcbiAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xuICBtYXgtd2lkdGg6IDc4MHB4O1xuICB3aWR0aDogMTAwJTsgfVxuICAucmVzb3VyY2VzIC5yZXNvdXJjZXNfX2N1c3RvbWVyLWxvZ29zIGxpIHtcbiAgICBiYWNrZ3JvdW5kOiB1cmwoXCIvaW1nL2VudGVycHJpc2UvY3VzdG9tZXItbG9nb3MucG5nXCIpO1xuICAgIGJhY2tncm91bmQtc2l6ZTogNDI4cHggNDZweDtcbiAgICBiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0O1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIGhlaWdodDogNDZweDsgfVxuICBAbWVkaWEgKG1heC13aWR0aDogNzY4cHgpIHtcbiAgICAucmVzb3VyY2VzIC5yZXNvdXJjZXNfX2N1c3RvbWVyLWxvZ29zIHtcbiAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICAgICAgZmxleC13cmFwOiB3cmFwO1xuICAgICAgbWF4LXdpZHRoOiA0NjBweDsgfVxuICAgICAgLnJlc291cmNlcyAucmVzb3VyY2VzX19jdXN0b21lci1sb2dvcyBsaSB7XG4gICAgICAgIG1hcmdpbjogMjBweDsgfSB9XG4gIC5yZXNvdXJjZXMgLnJlc291cmNlc19fY3VzdG9tZXItbG9nb3MgLm1hc3RlcmNhcmQge1xuICAgIHdpZHRoOiA1OHB4OyB9XG4gIC5yZXNvdXJjZXMgLnJlc291cmNlc19fY3VzdG9tZXItbG9nb3MgLm5hdGlvbndpZGUge1xuICAgIGJhY2tncm91bmQtcG9zaXRpb246IC01OHB4IDA7XG4gICAgd2lkdGg6IDMzcHg7IH1cbiAgLnJlc291cmNlcyAucmVzb3VyY2VzX19jdXN0b21lci1sb2dvcyAudW5pcWxvIHtcbiAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtOTFweCAwO1xuICAgIHdpZHRoOiA2NXB4OyB9XG4gIC5yZXNvdXJjZXMgLnJlc291cmNlc19fY3VzdG9tZXItbG9nb3MgLmlibSB7XG4gICAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTE1NnB4IDA7XG4gICAgd2lkdGg6IDY0cHg7IH1cbiAgLnJlc291cmNlcyAucmVzb3VyY2VzX19jdXN0b21lci1sb2dvcyAuaW5nIHtcbiAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMjIycHggMDtcbiAgICB3aWR0aDogMTAzcHg7IH1cbiAgLnJlc291cmNlcyAucmVzb3VyY2VzX19jdXN0b21lci1sb2dvcyAuc2FwIHtcbiAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMzI2cHggMDtcbiAgICB3aWR0aDogNTZweDsgfVxuICAucmVzb3VyY2VzIC5yZXNvdXJjZXNfX2N1c3RvbWVyLWxvZ29zIC5uYXNhIHtcbiAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMzgwcHggMDtcbiAgICB3aWR0aDogNTBweDsgfVxuXG4uYmFubmVyIHtcbiAgYmFja2dyb3VuZDogI2ZmZjtcbiAgdGV4dC1hbGlnbjogbGVmdDsgfVxuICAuYmFubmVyIC5jb250YWluZXIge1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsgfVxuICAuYmFubmVyIC5lZS1oZXJvIHtcbiAgICBtYXgtd2lkdGg6IDQ4MHB4OyB9XG4gIC5iYW5uZXIgLmVlLWhlcm8gaDQsXG4gIC5iYW5uZXIgLmVlLWhlcm8gaDEsXG4gIC5iYW5uZXIgLmVlLWhlcm8gcCB7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIHotaW5kZXg6IDI7IH1cblxuQG1lZGlhIChtYXgtd2lkdGg6IDc2N3B4KSB7XG4gIC5lZS1oZXJvIHtcbiAgICBwYWRkaW5nLWJvdHRvbTogODBweDsgfSB9XG5cbi5zb2x1dGlvbi1oZXJvIGg0LFxuLnNvbHV0aW9uLWhlcm8gaDIsXG4uc29sdXRpb24taGVybyBwLFxuLnNvbHV0aW9uLWhlcm8gYSB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgei1pbmRleDogMjsgfVxuXG4uc29sdXRpb24taGVybzo6YWZ0ZXIge1xuICBiYWNrZ3JvdW5kLXNpemU6IGNvdmVyO1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHotaW5kZXg6IDE7XG4gIGNvbnRlbnQ6ICcnO1xuICBkaXNwbGF5OiBibG9jazsgfVxuXG4uc29sdXRpb24taGVyby0tY3Jvc3MtcGxhdGZvcm06OmFmdGVyIHtcbiAgYmFja2dyb3VuZDogdXJsKFwiL2ltZy9zb2x1dGlvbnMvYmctY3Jvc3MtcGxhdGZvcm0taGVhZGVyLnN2Z1wiKTtcbiAgd2lkdGg6IDg1MHB4O1xuICBoZWlnaHQ6IDQzMXB4O1xuICByaWdodDogY2FsYyg1MCUgLSA3OTZweCk7XG4gIHRvcDogMTM4cHg7IH1cblxuLnNvbHV0aW9uLWhlcm8tLWRlc2lnbi1zeXN0ZW06OmFmdGVyIHtcbiAgYmFja2dyb3VuZDogdXJsKFwiL2ltZy9zb2x1dGlvbnMvZGVzaWduLXN5c3RlbXMtYmFubmVyLnN2Z1wiKTtcbiAgd2lkdGg6IDc1NXB4O1xuICBoZWlnaHQ6IDU5M3B4O1xuICByaWdodDogLTcycHg7XG4gIHRvcDogNzRweDsgfVxuXG4uc29sdXRpb24taGVyby0tcHdhOjphZnRlciB7XG4gIGJhY2tncm91bmQ6IHVybChcIi9pbWcvZW50ZXJwcmlzZS9wd2EucG5nXCIpO1xuICB3aWR0aDogNTEzcHg7XG4gIGhlaWdodDogNTIwcHg7XG4gIGJhY2tncm91bmQtc2l6ZTogNTEzcHggNTIwcHg7XG4gIHJpZ2h0OiA1MHB4O1xuICB0b3A6IDc0cHg7IH1cblxuLnJpZ2h0IC5zb2x1dGlvbi1oZXJvLS1kZXNpZ24tc3lzdGVtOjphZnRlciB7XG4gIHJpZ2h0OiBhdXRvO1xuICBsZWZ0OiAtNzJweDsgfVxuXG4jc3RpY2t5LWJhciB7XG4gIGJveC1zaGFkb3c6IDBweCAxcHggMHB4ICNFOUVERjMsIDBweCAtMXB4IDBweCAjRTlFREYzO1xuICBiYWNrZ3JvdW5kOiB3aGl0ZTtcbiAgcG9zaXRpb246IHN0aWNreTtcbiAgdG9wOiAwO1xuICB6LWluZGV4OiAxOyB9XG4gICNzdGlja3ktYmFyIHVsIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcbiAgICBwYWRkaW5nLXRvcDogMTdweDtcbiAgICBwYWRkaW5nLWJvdHRvbTogMTdweDtcbiAgICBwYWRkaW5nLWxlZnQ6IDE1cHg7XG4gICAgZmxleC13cmFwOiB3cmFwOyB9XG4gICAgQG1lZGlhIChtYXgtd2lkdGg6IDk5MXB4KSB7XG4gICAgICAjc3RpY2t5LWJhciB1bCB7XG4gICAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYXJvdW5kOyB9IH1cbiAgICAjc3RpY2t5LWJhciB1bDo6YmVmb3JlLCAjc3RpY2t5LWJhciB1bDo6YWZ0ZXIge1xuICAgICAgZGlzcGxheTogbm9uZTsgfVxuICAjc3RpY2t5LWJhciBsaSB7XG4gICAgbGlzdC1zdHlsZTogbm9uZTsgfVxuICAgICNzdGlja3ktYmFyIGxpLmFjdGl2ZSBhOm5vdCguYnRuKSB7XG4gICAgICBjb2xvcjogIzRhOGJmYzsgfVxuICAjc3RpY2t5LWJhciBhIHtcbiAgICBwYWRkaW5nOiAxMHB4IDA7XG4gICAgZm9udC1zaXplOiAxNHB4O1xuICAgIGxpbmUtaGVpZ2h0OiAyMnB4O1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICBsZXR0ZXItc3BhY2luZzogMC4wOGVtO1xuICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XG4gICAgZGlzcGxheTogYmxvY2s7IH1cbiAgICAjc3RpY2t5LWJhciBhOmhvdmVyLCAjc3RpY2t5LWJhciBhOmFjdGl2ZSwgI3N0aWNreS1iYXIgYTpmb2N1cyB7XG4gICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcbiAgICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTsgfVxuICAgICNzdGlja3ktYmFyIGEuYnRuIHtcbiAgICAgIHBhZGRpbmc6IDExcHggMTRweCA4cHg7XG4gICAgICBtYXJnaW4tcmlnaHQ6IDNweDtcbiAgICAgIGJvcmRlci1yYWRpdXM6IDEwcHg7XG4gICAgICBjb2xvcjogd2hpdGU7XG4gICAgICBmb250LXdlaWdodDogNjAwOyB9XG4gICAgICAjc3RpY2t5LWJhciBhLmJ0bjpob3ZlciwgI3N0aWNreS1iYXIgYS5idG46YWN0aXZlLCAjc3RpY2t5LWJhciBhLmJ0bjpmb2N1cyB7XG4gICAgICAgIGNvbG9yOiB3aGl0ZTtcbiAgICAgICAgYmFja2dyb3VuZDogIzMxN2JmYzsgfVxuICAjc3RpY2t5LWJhciAuYW5jaG9yIHtcbiAgICBjb2xvcjogIzkyQTFCMztcbiAgICBmb250LXdlaWdodDogNTAwOyB9XG4gICAgI3N0aWNreS1iYXIgLmFuY2hvci5hY3RpdmUsICNzdGlja3ktYmFyIC5hbmNob3I6aG92ZXIge1xuICAgICAgY29sb3I6ICM0RDhERkY7IH1cblxubWFpbiB7XG4gIGxldHRlci1zcGFjaW5nOiAtMC4wMjhlbTtcbiAgY29sb3I6ICMyRjNBNDg7IH1cbiAgbWFpbiBoMiB7XG4gICAgZm9udC1zaXplOiA0MHB4O1xuICAgIGxpbmUtaGVpZ2h0OiA1MHB4O1xuICAgIGxldHRlci1zcGFjaW5nOiAtMC4wM2VtO1xuICAgIGNvbG9yOiAjMDIwODE0O1xuICAgIG1hcmdpbi1ib3R0b206IDE1cHg7IH1cbiAgbWFpbiBoMyB7XG4gICAgY29sb3I6ICM0MTRENUM7XG4gICAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgICBtYXJnaW4tYm90dG9tOiA0cHg7IH1cbiAgICBtYWluIGgzICsgaDIge1xuICAgICAgbWFyZ2luLXRvcDogMDsgfVxuICBtYWluIHAge1xuICAgIGZvbnQtc2l6ZTogMjBweDtcbiAgICBsaW5lLWhlaWdodDogMzFweDtcbiAgICBtYXJnaW4tYm90dG9tOiA0MHB4OyB9XG4gIG1haW4gdWwge1xuICAgIHBhZGRpbmctbGVmdDogMDsgfVxuICBtYWluIGxpIHtcbiAgICBmb250LXNpemU6IDE2cHg7XG4gICAgbGluZS1oZWlnaHQ6IDIzcHg7XG4gICAgY29sb3I6ICMxQTIzMkY7XG4gICAgbWFyZ2luLWJvdHRvbTogMzJweDtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgbGlzdC1zdHlsZTogbm9uZTtcbiAgICBwYWRkaW5nLWxlZnQ6IDMwcHg7XG4gICAgbGV0dGVyLXNwYWNpbmc6IC0uMDE2ZW07IH1cbiAgICBtYWluIGxpOjpiZWZvcmUge1xuICAgICAgY29udGVudDogdXJsKCdkYXRhOmltYWdlL3N2Zyt4bWwsXFxhICAgICAgICAgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgdmlld0JveD1cIjAgMCA1MTIgNTEyXCI+XFxhICAgICAgICAgICA8cGF0aCBkPVwiTTE4Ni4zMDEgMzM5Ljg5M0w5NiAyNDkuNDYxbC0zMiAzMC41MDdMMTg2LjMwMSA0MDIgNDQ4IDE0MC41MDYgNDE2IDExMHpcIi8+XFxhICAgICAgICAgPC9zdmc+Jyk7XG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICBsZWZ0OiAwO1xuICAgICAgdG9wOiAxcHg7XG4gICAgICBoZWlnaHQ6IDE1cHg7XG4gICAgICB3aWR0aDogMTVweDtcbiAgICAgIGZpbGw6ICMxQTIzMkY7XG4gICAgICBkaXNwbGF5OiBibG9jazsgfVxuICBtYWluIHNlY3Rpb24ge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlOyB9XG4gICAgbWFpbiBzZWN0aW9uLmNvbnRhaW5lcjo6YmVmb3JlLCBtYWluIHNlY3Rpb24uY29udGFpbmVyOjphZnRlciB7XG4gICAgICBkaXNwbGF5OiBub25lOyB9XG4gICAgbWFpbiBzZWN0aW9uLnJpZ2h0IHtcbiAgICAgIGZsZXgtZGlyZWN0aW9uOiByb3ctcmV2ZXJzZTsgfVxuICAgIG1haW4gc2VjdGlvbi5jZW50ZXIge1xuICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsgfVxuICAgICAgbWFpbiBzZWN0aW9uLmNlbnRlciAuY29udGVudCB7XG4gICAgICAgIG1heC13aWR0aDogNzk4cHg7XG4gICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsgfVxuICAgICAgICBtYWluIHNlY3Rpb24uY2VudGVyIC5jb250ZW50IHVsIHtcbiAgICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICAgIGZsZXgtd3JhcDogd3JhcDtcbiAgICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47IH1cbiAgICAgICAgICBAbWVkaWEgKG1heC13aWR0aDogOTkxcHgpIHtcbiAgICAgICAgICAgIG1haW4gc2VjdGlvbi5jZW50ZXIgLmNvbnRlbnQgdWwge1xuICAgICAgICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtc3RhcnQ7IH0gfVxuICAgICAgICBtYWluIHNlY3Rpb24uY2VudGVyIC5jb250ZW50IGxpIHtcbiAgICAgICAgICBtYXgtd2lkdGg6IDM3NnB4O1xuICAgICAgICAgIHdpZHRoOiAxMDAlOyB9XG4gIG1haW4gLmNvbnRlbnQge1xuICAgIG1heC13aWR0aDogNDgycHg7XG4gICAgbWFyZ2luOiAyMzJweCAwIDE4NHB4OyB9XG4gICAgQG1lZGlhIChtYXgtd2lkdGg6IDk5MXB4KSB7XG4gICAgICBtYWluIC5jb250ZW50IHtcbiAgICAgICAgbWF4LXdpZHRoOiAxMDAlO1xuICAgICAgICBtYXJnaW46IDYwcHggYXV0bzsgfSB9XG4gIG1haW4gYXNpZGUge1xuICAgIGJhY2tncm91bmQ6ICNGNkY4RkI7XG4gICAgcGFkZGluZy10b3A6IDExNHB4O1xuICAgIHBhZGRpbmctYm90dG9tOiAxMjBweDsgfVxuICAgIG1haW4gYXNpZGUgcCB7XG4gICAgICBjb2xvcjogIzQxNEQ1QzsgfVxuICAgIG1haW4gYXNpZGUgLmNvbnRlbnQge1xuICAgICAgbWF4LXdpZHRoOiA0MzJweDtcbiAgICAgIG1hcmdpbjogMCBhdXRvO1xuICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgICAgZGlzcGxheTogYmxvY2s7IH1cbiAgbWFpbiAuZ2V0LXN0YXJ0ZWQge1xuICAgIG1heC13aWR0aDogNzAwcHg7IH1cbiAgbWFpbiAuY2FyZHMge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgdGV4dC1hbGlnbjogbGVmdDtcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgICBtYXJnaW4tdG9wOiAzOHB4OyB9XG4gICAgbWFpbiAuY2FyZHMgLmNhcmQge1xuICAgICAgYmFja2dyb3VuZDogIzdDQUJGRjtcbiAgICAgIGJvcmRlci1yYWRpdXM6IDhweDtcbiAgICAgIHBhZGRpbmc6IDQwcHggNDBweCAzNHB4O1xuICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICBhbGlnbi1pdGVtczogZmxleC1zdGFydDtcbiAgICAgIG1hcmdpbi1yaWdodDogMjRweDtcbiAgICAgIGZsZXg6IDAgMSA0NjBweDtcbiAgICAgIGJvcmRlci1yYWRpdXM6IDhweDsgfVxuICAgICAgbWFpbiAuY2FyZHMgLmNhcmQ6bGFzdC1jaGlsZCB7XG4gICAgICAgIG1hcmdpbi1yaWdodDogMDsgfVxuICAgICAgbWFpbiAuY2FyZHMgLmNhcmQ6bnRoLWNoaWxkKDIpIHtcbiAgICAgICAgYmFja2dyb3VuZDogI0Y4OEQ4RDsgfVxuICAgICAgICBtYWluIC5jYXJkcyAuY2FyZDpudGgtY2hpbGQoMikgLmJ0biB7XG4gICAgICAgICAgYmFja2dyb3VuZDogcmdiYSgyNDQsIDg0LCA4NCwgMC41KTsgfVxuICAgIG1haW4gLmNhcmRzIGgzIHtcbiAgICAgIGZvbnQtc2l6ZTogMjRweDtcbiAgICAgIGxpbmUtaGVpZ2h0OiBub3JtYWw7XG4gICAgICBsZXR0ZXItc3BhY2luZzogLTAuMDJlbTtcbiAgICAgIGNvbG9yOiB3aGl0ZTtcbiAgICAgIG1hcmdpbi10b3A6IDA7IH1cbiAgICBtYWluIC5jYXJkcyBwIHtcbiAgICAgIGZvbnQtc2l6ZTogMThweDtcbiAgICAgIGxpbmUtaGVpZ2h0OiAyNnB4O1xuICAgICAgbGV0dGVyLXNwYWNpbmc6IC0wLjAyZW07XG4gICAgICBjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjcpOyB9XG4gICAgbWFpbiAuY2FyZHMgLmJ0biB7XG4gICAgICBtYXJnaW4tdG9wOiBhdXRvO1xuICAgICAgZm9udC1zaXplOiAxNHB4O1xuICAgICAgbGluZS1oZWlnaHQ6IDIycHg7XG4gICAgICBsZXR0ZXItc3BhY2luZzogMC4wOWVtO1xuICAgICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcbiAgICAgIHBhZGRpbmc6IDEwcHggMTRweDtcbiAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7XG4gICAgICBib3JkZXItcmFkaXVzOiA4cHg7XG4gICAgICBiYWNrZ3JvdW5kOiByZ2JhKDU2LCAxMjgsIDI1NSwgMC41KTsgfVxuICAgICAgbWFpbiAuY2FyZHMgLmJ0biBpb24taWNvbiB7XG4gICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICAgICAgaGVpZ2h0OiAxNHB4O1xuICAgICAgICB3aWR0aDogMTRweDtcbiAgICAgICAgdmVydGljYWwtYWxpZ246IC0ycHg7IH1cbiAgICBAbWVkaWEgKG1heC13aWR0aDogNzY3cHgpIHtcbiAgICAgIG1haW4gLmNhcmRzIHtcbiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsgfVxuICAgICAgICBtYWluIC5jYXJkcyAuY2FyZCB7XG4gICAgICAgICAgZmxleDogYXV0bztcbiAgICAgICAgICBtYXJnaW4tcmlnaHQ6IDA7XG4gICAgICAgICAgbWFyZ2luLXRvcDogMjBweDsgfSB9XG5cbi5yZXNvdXJjZXMge1xuICBtYXJnaW4tdG9wOiA5NnB4OyB9XG5cbi5yZXNvdXJjZXMge1xuICBwYWRkaW5nLWJvdHRvbTogMTIwcHg7IH1cbiAgQG1lZGlhIChtYXgtd2lkdGg6IDc2OHB4KSB7XG4gICAgLnJlc291cmNlcyB7XG4gICAgICBwYWRkaW5nLWJvdHRvbTogNjBweDsgfSB9XG4gIC5yZXNvdXJjZXMgLmNhcmRzIHtcbiAgICBsaXN0LXN0eWxlLXR5cGU6IG5vbmU7XG4gICAgbWFyZ2luOiAwO1xuICAgIHBhZGRpbmc6IDA7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBtYXJnaW4tbGVmdDogLTI0cHg7XG4gICAgbWFyZ2luLXJpZ2h0OiAtMjRweDsgfVxuICAucmVzb3VyY2VzIGhncm91cCB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG4gICAgYWxpZ24taXRlbXM6IGJhc2VsaW5lOyB9XG4gICAgLnJlc291cmNlcyBoZ3JvdXAgaDMge1xuICAgICAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgICAgIGxpbmUtaGVpZ2h0OiBub3JtYWw7XG4gICAgICBmb250LXNpemU6IDI4cHg7XG4gICAgICBsZXR0ZXItc3BhY2luZzogLTAuMDJlbTtcbiAgICAgIGNvbG9yOiAjMUEyMzJGO1xuICAgICAgbWFyZ2luLWJvdHRvbTogMDsgfVxuICAgIC5yZXNvdXJjZXMgaGdyb3VwIGg0IHtcbiAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7XG4gICAgICBmb250LXNpemU6IDI0cHg7XG4gICAgICBsaW5lLWhlaWdodDogbm9ybWFsO1xuICAgICAgbGV0dGVyLXNwYWNpbmc6IC0wLjAyZW07XG4gICAgICBjb2xvcjogIzFBMjMyRjsgfVxuICAgIC5yZXNvdXJjZXMgaGdyb3VwIGg1IHtcbiAgICAgIGZvbnQtd2VpZ2h0OiA3MDA7XG4gICAgICBsaW5lLWhlaWdodDogMTtcbiAgICAgIGZvbnQtc2l6ZTogMTRweDtcbiAgICAgIGxldHRlci1zcGFjaW5nOiAwLjA4ZW07XG4gICAgICBjb2xvcjogIzM4ODBGRjtcbiAgICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7IH1cbiAgICAucmVzb3VyY2VzIGhncm91cCBpb24taWNvbiB7XG4gICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMnB4KTsgfVxuICAucmVzb3VyY2VzIC5jYXJkcyBsaSB7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgZmxleDogMCAwIDMzLjMzJTtcbiAgICBwYWRkaW5nOiAyNHB4OyB9XG4gICAgLnJlc291cmNlcyAuY2FyZHMgbGkgYSB7XG4gICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgIHdpZHRoOiAxMDAlOyB9XG4gICAgLnJlc291cmNlcyAuY2FyZHMgbGkgLmltZy13cmFwcGVyIHtcbiAgICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgICBib3JkZXItcmFkaXVzOiA2cHg7IH1cbiAgICAucmVzb3VyY2VzIC5jYXJkcyBsaSBpbWcge1xuICAgICAgd2lkdGg6IDEwMCU7IH1cbiAgICAucmVzb3VyY2VzIC5jYXJkcyBsaSBoNiB7XG4gICAgICBsaW5lLWhlaWdodDogMjNweDtcbiAgICAgIGZvbnQtc2l6ZTogMTJweDtcbiAgICAgIGxldHRlci1zcGFjaW5nOiAwLjEyZW07XG4gICAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xuICAgICAgY29sb3I6ICNCMkJFQ0Q7XG4gICAgICBtYXJnaW4tYm90dG9tOiAwO1xuICAgICAgbWFyZ2luLXRvcDogMTZweDsgfVxuICAgIC5yZXNvdXJjZXMgLmNhcmRzIGxpIGg0IHtcbiAgICAgIGZvbnQtc2l6ZTogMjBweDtcbiAgICAgIG1hcmdpbi10b3A6IDEwcHg7XG4gICAgICBjb2xvcjogIzFBMjMyRjtcbiAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7IH1cbiAgICAucmVzb3VyY2VzIC5jYXJkcyBsaSBwIHtcbiAgICAgIGNvbG9yOiAjNUI3MDhCO1xuICAgICAgbGluZS1oZWlnaHQ6IDIycHg7XG4gICAgICBmb250LXNpemU6IDE0cHg7XG4gICAgICBsZXR0ZXItc3BhY2luZzogLTAuMDJlbTsgfVxuICBAbWVkaWEgKG1heC13aWR0aDogOTkycHgpIHtcbiAgICAucmVzb3VyY2VzIC5jYXJkcyB7XG4gICAgICBtYXJnaW4tbGVmdDogLTEycHg7XG4gICAgICBtYXJnaW4tcmlnaHQ6IC0xMnB4OyB9XG4gICAgLnJlc291cmNlcyAuY2FyZHMgbGkge1xuICAgICAgcGFkZGluZzogMTJweDsgfSB9XG4gIEBtZWRpYSAobWF4LXdpZHRoOiA3NjhweCkge1xuICAgIC5yZXNvdXJjZXMgLmNhcmRzIHtcbiAgICAgIGZsZXgtd3JhcDogd3JhcDsgfVxuICAgIC5yZXNvdXJjZXMgLmNhcmRzIGxpIHtcbiAgICAgIGZsZXg6IDAgMCA1MCU7IH0gfVxuICBAbWVkaWEgKG1heC13aWR0aDogNDgwcHgpIHtcbiAgICAucmVzb3VyY2VzIC5jYXJkcyBsaSB7XG4gICAgICBmbGV4OiAwIDAgMTAwJTsgfVxuICAgIC5yZXNvdXJjZXMgaDUge1xuICAgICAgZGlzcGxheTogbm9uZTsgfSB9XG5cbiNidWlsZC1hbmQtc2hhcmUgLmNvbnRlbnQ6OmFmdGVyIHtcbiAgYmFja2dyb3VuZDogdXJsKFwiL2ltZy9zb2x1dGlvbnMvY29tcG9uZW50cy5wbmdcIik7XG4gIGJhY2tncm91bmQtc2l6ZTogY292ZXI7XG4gIHdpZHRoOiA4ODFweDtcbiAgaGVpZ2h0OiA3MjdweDtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICByaWdodDogY2FsYyg1MCUgLSA5MDBweCk7XG4gIHRvcDogMTEycHg7XG4gIGNvbnRlbnQ6ICcnOyB9XG5cbkBtZWRpYSAobWF4LXdpZHRoOiA5OTFweCkge1xuICAjYnVpbGQtYW5kLXNoYXJlIHtcbiAgICBtYXJnaW4tYm90dG9tOiAxMDBweDsgfVxuICAgICNidWlsZC1hbmQtc2hhcmUgLmNvbnRlbnQ6OmFmdGVyIHtcbiAgICAgIHdpZHRoOiAzODdweDtcbiAgICAgIGhlaWdodDogMzYzcHg7XG4gICAgICB0b3A6IGF1dG87XG4gICAgICByaWdodDogY2FsYygxMDAlIC0gODcwcHgpO1xuICAgICAgYm90dG9tOiAtOTVweDsgfSB9XG5cbiNvbmUtZGVzaWduIC5jb250ZW50OjphZnRlciB7XG4gIGJhY2tncm91bmQ6IHVybChcIi9pbWcvc29sdXRpb25zL2V2ZXJ5d2hlcmUucG5nXCIpO1xuICBiYWNrZ3JvdW5kLXNpemU6IGNvdmVyO1xuICB3aWR0aDogNzYycHg7XG4gIGhlaWdodDogNTEycHg7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgbGVmdDogLTE4MnB4O1xuICB0b3A6IDIxNHB4O1xuICBjb250ZW50OiAnJzsgfVxuICBAbWVkaWEgKG1heC13aWR0aDogMTIxOXB4KSB7XG4gICAgI29uZS1kZXNpZ24gLmNvbnRlbnQ6OmFmdGVyIHtcbiAgICAgIHdpZHRoOiA1MDhweDtcbiAgICAgIGhlaWdodDogMzQxcHg7XG4gICAgICBsZWZ0OiAtNzBweDtcbiAgICAgIHRvcDogMjUwcHg7IH0gfVxuXG5AbWVkaWEgKG1heC13aWR0aDogOTkxcHgpIHtcbiAgI29uZS1kZXNpZ24gLmNvbnRlbnQge1xuICAgIG1hcmdpbi1ib3R0b206IDI1MHB4OyB9XG4gICAgI29uZS1kZXNpZ24gLmNvbnRlbnQ6OmFmdGVyIHtcbiAgICAgIHdpZHRoOiAzODFweDtcbiAgICAgIGhlaWdodDogMjU2cHg7XG4gICAgICBsZWZ0OiBjYWxjKDUwJSAtIDE5MHB4KTtcbiAgICAgIGJvdHRvbTogMDtcbiAgICAgIHRvcDogYXV0bzsgfSB9XG5cbiNkZXZlbG9wZXItYWRvcHRpb24ge1xuICBib3JkZXItYm90dG9tOiAxcHggc29saWQgcmdiYSgxNDYsIDE2MSwgMTc5LCAwLjMpO1xuICBwb3NpdGlvbjogcmVsYXRpdmU7IH1cbiAgI2RldmVsb3Blci1hZG9wdGlvbiAuY29udGVudCB7XG4gICAgbWFyZ2luLXRvcDogMjIycHg7XG4gICAgbWFyZ2luLWJvdHRvbTogMTk4cHg7XG4gICAgcG9zaXRpb246IHN0YXRpYzsgfVxuICAgICNkZXZlbG9wZXItYWRvcHRpb24gLmNvbnRlbnQ6OmFmdGVyIHtcbiAgICAgIGJhY2tncm91bmQ6IHVybChcIi9pbWcvc29sdXRpb25zL2Rlc2lnbi1zeXN0ZW0tZGFzaGJvYXJkLnBuZ1wiKTtcbiAgICAgIGJhY2tncm91bmQtc2l6ZTogY292ZXI7XG4gICAgICB3aWR0aDogOTQycHg7XG4gICAgICBoZWlnaHQ6IDc0MnB4O1xuICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgcmlnaHQ6IGNhbGMoNTAlIC0gODk5cHgpO1xuICAgICAgYm90dG9tOiAwO1xuICAgICAgY29udGVudDogJyc7IH1cbiAgICAgIEBtZWRpYSAobWF4LXdpZHRoOiAxMjE5cHgpIHtcbiAgICAgICAgI2RldmVsb3Blci1hZG9wdGlvbiAuY29udGVudDo6YWZ0ZXIge1xuICAgICAgICAgIHJpZ2h0OiBjYWxjKDUwJSAtIDk1MHB4KTsgfSB9XG4gICAgQG1lZGlhIChtYXgtd2lkdGg6IDk5MXB4KSB7XG4gICAgICAjZGV2ZWxvcGVyLWFkb3B0aW9uIC5jb250ZW50IHtcbiAgICAgICAgbWFyZ2luLXRvcDogMTAwcHg7XG4gICAgICAgIG1hcmdpbi1ib3R0b206IDE4MHB4OyB9XG4gICAgICAgICNkZXZlbG9wZXItYWRvcHRpb24gLmNvbnRlbnQ6OmFmdGVyIHtcbiAgICAgICAgICByaWdodDogY2FsYyg1MCUgLSA1NDBweCk7XG4gICAgICAgICAgd2lkdGg6IDQ3MXB4O1xuICAgICAgICAgIGhlaWdodDogMzcxcHg7IH0gfVxuICAgIEBtZWRpYSAobWF4LXdpZHRoOiA3NjdweCkge1xuICAgICAgI2RldmVsb3Blci1hZG9wdGlvbiAuY29udGVudDo6YWZ0ZXIge1xuICAgICAgICByaWdodDogY2FsYygxMDAlIC0gOTIwcHgpOyB9IH1cbiAgQG1lZGlhIChtaW4td2lkdGg6IDE3OTRweCkge1xuICAgICNkZXZlbG9wZXItYWRvcHRpb24gLmNvbnRlbnQ6OmFmdGVyIHtcbiAgICAgIHJpZ2h0OiAwOyB9IH1cblxuI2hlbHAgLmNvbnRlbnQge1xuICB0ZXh0LWFsaWduOiBsZWZ0OyB9XG5cbiNoZWxwIGgyLFxuI2hlbHAgcCB7XG4gIG1hcmdpbi1yaWdodDogMTQwcHg7XG4gIG1hcmdpbi1sZWZ0OiAxNDBweDsgfVxuICBAbWVkaWEgKG1heC13aWR0aDogOTkxcHgpIHtcbiAgICAjaGVscCBoMixcbiAgICAjaGVscCBwIHtcbiAgICAgIG1hcmdpbi1yaWdodDogMDtcbiAgICAgIG1hcmdpbi1sZWZ0OiAwOyB9IH1cbiJdfQ== */\n"
  },
  {
    "path": "content/css/pages/enterprise/solutions/index.css",
    "content": ".ee-hero {\n  max-width: 640px;\n  padding-top: 130px;\n  padding-bottom: 160px; }\n  .ee-hero::before, .ee-hero::after {\n    display: none; }\n  .ee-hero h1 {\n    font-size: 52px;\n    line-height: 62px;\n    max-width: 930px;\n    letter-spacing: -0.03em;\n    color: #020814;\n    margin-top: 0;\n    margin-bottom: 16px; }\n  .ee-hero h4 {\n    font-family: \"Roboto Mono\", Menlo, Monaco, Consolas, \"Courier New\", monospace;\n    font-weight: bold;\n    font-size: 13px;\n    line-height: 26px;\n    letter-spacing: 0.14em;\n    text-transform: uppercase;\n    color: #92A1B3;\n    margin-bottom: 29px; }\n  .ee-hero p {\n    font-family: \"Eina\", \"Helvetica Neue\", Helvetica, sans-serif;\n    font-size: 24px;\n    font-weight: 400;\n    line-height: 36px;\n    letter-spacing: -0.04em;\n    color: rgba(39, 50, 63, 0.8); }\n  .ee-hero .btn {\n    padding-left: 24px;\n    padding-right: 20px;\n    padding-top: 18px;\n    padding-bottom: 18px;\n    font-size: 14px;\n    margin-top: 16px;\n    line-height: 20px;\n    letter-spacing: 0.08em;\n    color: white;\n    text-transform: uppercase;\n    font-weight: 700;\n    background: #3880FF;\n    box-shadow: 0px 2px 4px rgba(2, 8, 20, 0.1), 0px 1px 2px rgba(2, 8, 20, 0.08);\n    border-radius: 210px;\n    display: -ms-flexbox;\n    display: flex;\n    -ms-flex-align: center;\n        align-items: center; }\n    .ee-hero .btn::after {\n      background-image: url('data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"white\" viewBox=\"0 0 512 512\"><path d=\"M85 277.375h259.704L225.002 397.077 256 427l171-171L256 85l-29.922 29.924 118.626 119.701H85v42.75z\"/></svg>');\n      background-size: 100%;\n      content: '';\n      height: 20px;\n      width: 20px;\n      display: block;\n      margin-left: 8px;\n      -webkit-transform: translateY(-1px);\n              transform: translateY(-1px); }\n    .ee-hero .btn:hover {\n      background-color: #4f8bf5; }\n  .ee-hero--large h1 {\n    font-size: 62px;\n    line-height: 69px; }\n  .ee-hero--wide {\n    max-width: 960px; }\n  .ee-hero--centered {\n    display: -ms-flexbox;\n    display: flex;\n    -ms-flex-direction: column;\n        flex-direction: column;\n    -ms-flex-pack: center;\n        justify-content: center;\n    -ms-flex-align: center;\n        align-items: center;\n    text-align: center;\n    margin-left: auto;\n    margin-right: auto; }\n  @media (max-width: 767px) {\n    .ee-hero {\n      padding-top: 70px;\n      padding-bottom: 0; }\n      .ee-hero h1 {\n        font-size: 44px;\n        line-height: 52px; }\n      .ee-hero--large h1 {\n        font-size: 50px;\n        line-height: 60px; } }\n  @media (max-width: 480px) {\n    .ee-hero h1 {\n      font-size: 36px;\n      line-height: 44px;\n      margin-bottom: 6px; }\n    .ee-hero--large h1 {\n      font-size: 42px;\n      line-height: 52px; }\n    .ee-hero .btn {\n      margin-top: 8px; } }\n\n.ee-main {\n  margin-top: 0; }\n  .ee-main section {\n    margin-bottom: 200px; }\n  .ee-main .left,\n  .ee-main .right,\n  .ee-main .center {\n    display: -ms-flexbox;\n    display: flex; }\n    .ee-main .left::before, .ee-main .left::after,\n    .ee-main .right::before,\n    .ee-main .right::after,\n    .ee-main .center::before,\n    .ee-main .center::after {\n      display: none; }\n  .ee-main .left .content,\n  .ee-main .right .content {\n    max-width: 480px; }\n    @media (max-width: 767px) {\n      .ee-main .left .content,\n      .ee-main .right .content {\n        max-width: 100%;\n        text-align: center; }\n        .ee-main .left .content li,\n        .ee-main .right .content li {\n          text-align: left; } }\n  .ee-main .left {\n    -ms-flex-direction: row;\n        flex-direction: row; }\n    .ee-main .left .graphics {\n      margin-left: auto; }\n  .ee-main .right {\n    -ms-flex-direction: row-reverse;\n        flex-direction: row-reverse;\n    margin-left: auto; }\n    .ee-main .right .graphics {\n      margin-right: auto; }\n  .ee-main .center {\n    -ms-flex-direction: column;\n        flex-direction: column;\n    -ms-flex-align: center;\n        align-items: center;\n    text-align: center; }\n    .ee-main .center .content {\n      width: 894px;\n      max-width: 100%; }\n  .ee-main .full .content {\n    max-width: 568px; }\n  @media (max-width: 767px) {\n    .ee-main .right,\n    .ee-main .left {\n      -ms-flex-direction: column-reverse;\n          flex-direction: column-reverse;\n      -ms-flex-align: center;\n          align-items: center; }\n      .ee-main .right .graphics,\n      .ee-main .left .graphics {\n        margin-bottom: 24px;\n        margin-left: 0;\n        margin-right: 0; }\n    .ee-main section {\n      margin-bottom: 100px; } }\n  .ee-main .graphics {\n    -ms-flex-pack: end;\n        justify-content: flex-end; }\n    .ee-main .graphics img {\n      width: 100%; }\n  .ee-main h2 {\n    font-size: 44px;\n    line-height: 51px;\n    letter-spacing: -0.03em; }\n    .ee-main h2:first-child {\n      margin-top: 0; }\n  .ee-main .ee-section__title {\n    font-family: \"Roboto Mono\", Menlo, Monaco, Consolas, \"Courier New\", monospace;\n    font-style: normal;\n    font-weight: bold;\n    font-size: 12px;\n    line-height: 23px;\n    letter-spacing: 0.14em;\n    text-transform: uppercase;\n    color: #5B708B;\n    margin-top: 0; }\n  .ee-main .ee-section__cta {\n    display: inline-block;\n    font-size: 18px;\n    font-weight: 500;\n    margin-top: 16px; }\n  .ee-main p {\n    font-size: 20px;\n    line-height: 31px;\n    letter-spacing: -0.02em;\n    color: #5B708B;\n    margin-top: 18px; }\n    .ee-main p.sm {\n      font-size: 16px;\n      line-height: 29px;\n      letter-spacing: -0.01em; }\n  .ee-main ul:not(.frameworks) {\n    margin-top: 54px; }\n  .ee-main .content ul {\n    padding-left: 0; }\n  .ee-main .content li {\n    font-size: 16px;\n    line-height: 23px;\n    letter-spacing: -0.02em;\n    color: #1A232F;\n    margin-bottom: 40px;\n    padding-left: 30px;\n    list-style: none;\n    position: relative; }\n    .ee-main .content li::before {\n      background-image: url(\"/img/enterprise/check.svg\");\n      background-size: 100%;\n      content: '';\n      height: 10px;\n      width: 13px;\n      position: absolute;\n      left: 0;\n      top: 8px; }\n  .ee-main .features {\n    display: -ms-grid;\n    display: grid;\n    -ms-grid-columns: 1fr 1fr 1fr;\n        grid-template-columns: 1fr 1fr 1fr;\n    grid-column-gap: 64px;\n    grid-row-gap: 24px;\n    padding: 0; }\n    .ee-main .features li {\n      list-style: none; }\n    .ee-main .features .icon {\n      margin-bottom: 16px;\n      width: 48px; }\n    @media (max-width: 991px) {\n      .ee-main .features {\n        -ms-grid-columns: 1fr 1fr;\n            grid-template-columns: 1fr 1fr; } }\n    @media (max-width: 500px) {\n      .ee-main .features {\n        -ms-grid-columns: 1fr;\n            grid-template-columns: 1fr; } }\n  .ee-main .cta-card {\n    background: #4a8bfc;\n    border-radius: 12px;\n    padding: 72px 72px 60px;\n    background-size: cover;\n    color: white; }\n    .ee-main .cta-card .ee-section__title,\n    .ee-main .cta-card p {\n      color: #CED6E0; }\n\n#how-to {\n  margin-bottom: 0;\n  position: relative;\n  padding-top: 140px; }\n  #how-to::before {\n    position: absolute;\n    top: 0;\n    width: 100vw;\n    border-top: 1px solid rgba(146, 161, 179, 0.3);\n    content: '';\n    display: block; }\n\n.cards--red-v-blue {\n  display: -ms-flexbox;\n  display: flex;\n  text-align: left;\n  -ms-flex-pack: center;\n      justify-content: center;\n  margin-top: 38px; }\n  .cards--red-v-blue__card {\n    background: #7CABFF;\n    border-radius: 8px;\n    padding: 40px 40px 34px;\n    display: -ms-flexbox;\n    display: flex;\n    -ms-flex-direction: column;\n        flex-direction: column;\n    -ms-flex-align: start;\n        align-items: flex-start;\n    margin-right: 24px;\n    -ms-flex: 0 1 460px;\n        flex: 0 1 460px;\n    border-radius: 8px; }\n    .cards--red-v-blue__card:last-child {\n      margin-right: 0; }\n    .cards--red-v-blue__card:nth-child(2) {\n      background: #F88D8D; }\n      .cards--red-v-blue__card:nth-child(2) .btn {\n        background: rgba(244, 84, 84, 0.5); }\n  .cards--red-v-blue h3 {\n    font-size: 24px;\n    line-height: normal;\n    letter-spacing: -0.02em;\n    color: white;\n    margin-top: 0; }\n  .cards--red-v-blue p {\n    font-size: 18px;\n    line-height: 26px;\n    letter-spacing: -0.02em;\n    color: rgba(255, 255, 255, 0.7);\n    margin-top: 0;\n    margin-bottom: 22px; }\n  .cards--red-v-blue .btn {\n    margin-top: auto;\n    font-size: 14px;\n    line-height: 22px;\n    letter-spacing: 0.09em;\n    text-transform: uppercase;\n    padding: 10px 14px;\n    font-weight: 600;\n    border-radius: 8px;\n    background: rgba(56, 128, 255, 0.5); }\n    .cards--red-v-blue .btn ion-icon {\n      display: inline-block;\n      height: 14px;\n      width: 14px;\n      vertical-align: -2px; }\n  @media (max-width: 767px) {\n    .cards--red-v-blue {\n      -ms-flex-direction: column;\n          flex-direction: column;\n      -ms-flex-align: center;\n          align-items: center; }\n      .cards--red-v-blue__card {\n        -ms-flex: auto;\n            flex: auto;\n        margin-right: 0;\n        margin-top: 20px;\n        max-width: 460px; } }\n\naside {\n  background: linear-gradient(180deg, #F9FAFB 0%, #FFFFFF 100%);\n  margin-top: -60px;\n  padding-top: 200px;\n  padding-bottom: 120px; }\n  aside p {\n    color: #414D5C; }\n  aside .content {\n    max-width: 432px;\n    margin: 0 auto;\n    text-align: center;\n    display: block; }\n\n.ee-get-started {\n  max-width: 700px; }\n  .ee-get-started h3 {\n    color: #414D5C; }\n\n.resources {\n  padding-bottom: 120px; }\n  @media (max-width: 768px) {\n    .resources {\n      padding-bottom: 60px; } }\n  .resources .cards {\n    list-style-type: none;\n    margin: 0;\n    padding: 0;\n    display: -ms-flexbox;\n    display: flex;\n    margin-left: -24px;\n    margin-right: -24px; }\n  .resources hgroup {\n    display: -ms-flexbox;\n    display: flex;\n    -ms-flex-pack: justify;\n        justify-content: space-between;\n    -ms-flex-align: baseline;\n        align-items: baseline; }\n    .resources hgroup h3 {\n      font-weight: 600;\n      line-height: normal;\n      font-size: 28px;\n      letter-spacing: -0.02em;\n      color: #1A232F;\n      margin-bottom: 0; }\n    .resources hgroup h4 {\n      font-weight: 600;\n      font-size: 24px;\n      line-height: normal;\n      letter-spacing: -0.02em;\n      color: #1A232F; }\n    .resources hgroup h5 {\n      font-weight: 700;\n      line-height: 1;\n      font-size: 14px;\n      letter-spacing: 0.08em;\n      color: #3880FF;\n      text-transform: uppercase; }\n    .resources hgroup ion-icon {\n      -webkit-transform: translateY(2px);\n              transform: translateY(2px); }\n  .resources .cards li {\n    display: block;\n    -ms-flex: 0 0 33.33%;\n        flex: 0 0 33.33%;\n    padding: 24px; }\n    .resources .cards li a {\n      display: block;\n      width: 100%; }\n    .resources .cards li .img-wrapper {\n      overflow: hidden;\n      border-radius: 6px; }\n    .resources .cards li img {\n      width: 100%; }\n    .resources .cards li h6 {\n      line-height: 23px;\n      font-size: 12px;\n      letter-spacing: 0.12em;\n      text-transform: uppercase;\n      color: #B2BECD;\n      margin-bottom: 0;\n      margin-top: 16px; }\n    .resources .cards li h4 {\n      font-size: 20px;\n      margin-top: 10px;\n      color: #1A232F;\n      font-weight: 600; }\n    .resources .cards li p {\n      color: #5B708B;\n      line-height: 22px;\n      font-size: 14px;\n      letter-spacing: -0.02em; }\n  @media (max-width: 992px) {\n    .resources .cards {\n      margin-left: -12px;\n      margin-right: -12px; }\n    .resources .cards li {\n      padding: 12px; } }\n  @media (max-width: 768px) {\n    .resources .cards {\n      -ms-flex-wrap: wrap;\n          flex-wrap: wrap; }\n    .resources .cards li {\n      -ms-flex: 0 0 50%;\n          flex: 0 0 50%; } }\n  @media (max-width: 480px) {\n    .resources .cards li {\n      -ms-flex: 0 0 100%;\n          flex: 0 0 100%; }\n    .resources h5 {\n      display: none; } }\n\n.ee-main .features li p,\n.ee-main .cards li p,\n.resources .features li p,\n.resources .cards li p {\n  font-size: 16px;\n  line-height: 29px;\n  letter-spacing: -0.01em;\n  color: #73849A;\n  margin-top: 0; }\n\n.ee-main .features li h4,\n.ee-main .cards li h4,\n.resources .features li h4,\n.resources .cards li h4 {\n  font-size: 20px;\n  line-height: normal;\n  letter-spacing: -0.02em;\n  color: #020814;\n  font-weight: 600; }\n\n.resources .cards {\n  margin-top: 0 !important;\n  text-align: left;\n  -ms-flex-wrap: wrap;\n      flex-wrap: wrap; }\n  .resources .cards .img-wrapper {\n    border-radius: 6px; }\n    .resources .cards .img-wrapper + h4 {\n      margin-top: 24px; }\n  @media (min-width: 1220px) {\n    .resources .cards {\n      margin-left: -40px;\n      margin-right: -40px; }\n      .resources .cards li {\n        padding: 40px; } }\n\n.resources .resources__customer-logos {\n  display: -ms-flexbox;\n  display: flex;\n  margin: 26px auto 0;\n  padding: 0;\n  -ms-flex-pack: justify;\n      justify-content: space-between;\n  max-width: 780px;\n  width: 100%; }\n  .resources .resources__customer-logos li {\n    background: url(\"/img/enterprise/customer-logos.png\");\n    background-size: 428px 46px;\n    background-repeat: no-repeat;\n    display: block;\n    height: 46px; }\n  @media (max-width: 768px) {\n    .resources .resources__customer-logos {\n      -ms-flex-pack: center;\n          justify-content: center;\n      -ms-flex-wrap: wrap;\n          flex-wrap: wrap;\n      max-width: 460px; }\n      .resources .resources__customer-logos li {\n        margin: 20px; } }\n  .resources .resources__customer-logos .mastercard {\n    width: 58px; }\n  .resources .resources__customer-logos .nationwide {\n    background-position: -58px 0;\n    width: 33px; }\n  .resources .resources__customer-logos .uniqlo {\n    background-position: -91px 0;\n    width: 65px; }\n  .resources .resources__customer-logos .ibm {\n    background-position: -156px 0;\n    width: 64px; }\n  .resources .resources__customer-logos .ing {\n    background-position: -222px 0;\n    width: 103px; }\n  .resources .resources__customer-logos .sap {\n    background-position: -326px 0;\n    width: 56px; }\n  .resources .resources__customer-logos .nasa {\n    background-position: -380px 0;\n    width: 50px; }\n\n.banner {\n  background: #fff;\n  text-align: left; }\n  .banner .container {\n    position: relative; }\n  .banner .ee-hero {\n    max-width: 480px; }\n  .banner .ee-hero h4,\n  .banner .ee-hero h1,\n  .banner .ee-hero p {\n    position: relative;\n    z-index: 2; }\n\n@media (max-width: 767px) {\n  .ee-hero {\n    padding-bottom: 80px; } }\n\n.solution-hero h4,\n.solution-hero h2,\n.solution-hero p,\n.solution-hero a {\n  position: relative;\n  z-index: 2; }\n\n.solution-hero::after {\n  background-size: cover;\n  position: absolute;\n  z-index: 1;\n  content: '';\n  display: block; }\n\n.solution-hero--cross-platform::after {\n  background: url(\"/img/solutions/bg-cross-platform-header.svg\");\n  width: 850px;\n  height: 431px;\n  right: calc(50% - 796px);\n  top: 138px; }\n\n.solution-hero--design-system::after {\n  background: url(\"/img/solutions/design-systems-banner.svg\");\n  width: 755px;\n  height: 593px;\n  right: -72px;\n  top: 74px; }\n\n.solution-hero--pwa::after {\n  background: url(\"/img/enterprise/pwa.png\");\n  width: 513px;\n  height: 520px;\n  background-size: 513px 520px;\n  right: 50px;\n  top: 74px; }\n\n.right .solution-hero--design-system::after {\n  right: auto;\n  left: -72px; }\n\n#sticky-bar {\n  box-shadow: 0px 1px 0px #E9EDF3, 0px -1px 0px #E9EDF3;\n  background: white;\n  position: -webkit-sticky;\n  position: sticky;\n  top: 0;\n  z-index: 1; }\n  #sticky-bar ul {\n    display: -ms-flexbox;\n    display: flex;\n    -ms-flex-pack: justify;\n        justify-content: space-between;\n    padding-top: 17px;\n    padding-bottom: 17px;\n    padding-left: 15px;\n    -ms-flex-wrap: wrap;\n        flex-wrap: wrap; }\n    @media (max-width: 991px) {\n      #sticky-bar ul {\n        -ms-flex-pack: distribute;\n            justify-content: space-around; } }\n    #sticky-bar ul::before, #sticky-bar ul::after {\n      display: none; }\n  #sticky-bar li {\n    list-style: none; }\n    #sticky-bar li.active a:not(.btn) {\n      color: #4a8bfc; }\n  #sticky-bar a {\n    padding: 10px 0;\n    font-size: 14px;\n    line-height: 22px;\n    text-align: center;\n    letter-spacing: 0.08em;\n    text-transform: uppercase;\n    display: block; }\n    #sticky-bar a:hover, #sticky-bar a:active, #sticky-bar a:focus {\n      background: transparent;\n      text-decoration: none; }\n    #sticky-bar a.btn {\n      padding: 11px 14px 8px;\n      margin-right: 3px;\n      border-radius: 10px;\n      color: white;\n      font-weight: 600; }\n      #sticky-bar a.btn:hover, #sticky-bar a.btn:active, #sticky-bar a.btn:focus {\n        color: white;\n        background: #317bfc; }\n  #sticky-bar .anchor {\n    color: #92A1B3;\n    font-weight: 500; }\n    #sticky-bar .anchor.active, #sticky-bar .anchor:hover {\n      color: #4D8DFF; }\n\nmain {\n  letter-spacing: -0.028em;\n  color: #2F3A48; }\n  main h2 {\n    font-size: 40px;\n    line-height: 50px;\n    letter-spacing: -0.03em;\n    color: #020814;\n    margin-bottom: 15px; }\n  main h3 {\n    color: #414D5C;\n    font-weight: 600;\n    margin-bottom: 4px; }\n    main h3 + h2 {\n      margin-top: 0; }\n  main p {\n    font-size: 20px;\n    line-height: 31px;\n    margin-bottom: 40px; }\n  main ul {\n    padding-left: 0; }\n  main li {\n    font-size: 16px;\n    line-height: 23px;\n    color: #1A232F;\n    margin-bottom: 32px;\n    position: relative;\n    list-style: none;\n    padding-left: 30px;\n    letter-spacing: -.016em; }\n    main li::before {\n      content: url('data:image/svg+xml,\\a         <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\">\\a           <path d=\"M186.301 339.893L96 249.461l-32 30.507L186.301 402 448 140.506 416 110z\"/>\\a         </svg>');\n      position: absolute;\n      left: 0;\n      top: 1px;\n      height: 15px;\n      width: 15px;\n      fill: #1A232F;\n      display: block; }\n  main section {\n    display: -ms-flexbox;\n    display: flex;\n    position: relative; }\n    main section.container::before, main section.container::after {\n      display: none; }\n    main section.right {\n      -ms-flex-direction: row-reverse;\n          flex-direction: row-reverse; }\n    main section.center {\n      -ms-flex-pack: center;\n          justify-content: center;\n      -ms-flex-direction: column;\n          flex-direction: column;\n      -ms-flex-align: center;\n          align-items: center; }\n      main section.center .content {\n        max-width: 798px;\n        text-align: center; }\n        main section.center .content ul {\n          display: -ms-flexbox;\n          display: flex;\n          -ms-flex-wrap: wrap;\n              flex-wrap: wrap;\n          -ms-flex-pack: justify;\n              justify-content: space-between; }\n          @media (max-width: 991px) {\n            main section.center .content ul {\n              -ms-flex-pack: start;\n                  justify-content: flex-start; } }\n        main section.center .content li {\n          max-width: 376px;\n          width: 100%; }\n  main .content {\n    max-width: 482px;\n    margin: 232px 0 184px; }\n    @media (max-width: 991px) {\n      main .content {\n        max-width: 100%;\n        margin: 60px auto; } }\n  main aside {\n    background: #F6F8FB;\n    padding-top: 114px;\n    padding-bottom: 120px; }\n    main aside p {\n      color: #414D5C; }\n    main aside .content {\n      max-width: 432px;\n      margin: 0 auto;\n      text-align: center;\n      display: block; }\n  main .get-started {\n    max-width: 700px; }\n  main .cards {\n    display: -ms-flexbox;\n    display: flex;\n    text-align: left;\n    -ms-flex-pack: center;\n        justify-content: center;\n    margin-top: 38px; }\n    main .cards .card {\n      background: #7CABFF;\n      border-radius: 8px;\n      padding: 40px 40px 34px;\n      display: -ms-flexbox;\n      display: flex;\n      -ms-flex-direction: column;\n          flex-direction: column;\n      -ms-flex-align: start;\n          align-items: flex-start;\n      margin-right: 24px;\n      -ms-flex: 0 1 460px;\n          flex: 0 1 460px;\n      border-radius: 8px; }\n      main .cards .card:last-child {\n        margin-right: 0; }\n      main .cards .card:nth-child(2) {\n        background: #F88D8D; }\n        main .cards .card:nth-child(2) .btn {\n          background: rgba(244, 84, 84, 0.5); }\n    main .cards h3 {\n      font-size: 24px;\n      line-height: normal;\n      letter-spacing: -0.02em;\n      color: white;\n      margin-top: 0; }\n    main .cards p {\n      font-size: 18px;\n      line-height: 26px;\n      letter-spacing: -0.02em;\n      color: rgba(255, 255, 255, 0.7); }\n    main .cards .btn {\n      margin-top: auto;\n      font-size: 14px;\n      line-height: 22px;\n      letter-spacing: 0.09em;\n      text-transform: uppercase;\n      padding: 10px 14px;\n      font-weight: 600;\n      border-radius: 8px;\n      background: rgba(56, 128, 255, 0.5); }\n      main .cards .btn ion-icon {\n        display: inline-block;\n        height: 14px;\n        width: 14px;\n        vertical-align: -2px; }\n    @media (max-width: 767px) {\n      main .cards {\n        -ms-flex-direction: column;\n            flex-direction: column; }\n        main .cards .card {\n          -ms-flex: auto;\n              flex: auto;\n          margin-right: 0;\n          margin-top: 20px; } }\n\n.resources {\n  margin-top: 96px; }\n\n.resources {\n  padding-bottom: 120px; }\n  @media (max-width: 768px) {\n    .resources {\n      padding-bottom: 60px; } }\n  .resources .cards {\n    list-style-type: none;\n    margin: 0;\n    padding: 0;\n    display: -ms-flexbox;\n    display: flex;\n    margin-left: -24px;\n    margin-right: -24px; }\n  .resources hgroup {\n    display: -ms-flexbox;\n    display: flex;\n    -ms-flex-pack: justify;\n        justify-content: space-between;\n    -ms-flex-align: baseline;\n        align-items: baseline; }\n    .resources hgroup h3 {\n      font-weight: 600;\n      line-height: normal;\n      font-size: 28px;\n      letter-spacing: -0.02em;\n      color: #1A232F;\n      margin-bottom: 0; }\n    .resources hgroup h4 {\n      font-weight: 600;\n      font-size: 24px;\n      line-height: normal;\n      letter-spacing: -0.02em;\n      color: #1A232F; }\n    .resources hgroup h5 {\n      font-weight: 700;\n      line-height: 1;\n      font-size: 14px;\n      letter-spacing: 0.08em;\n      color: #3880FF;\n      text-transform: uppercase; }\n    .resources hgroup ion-icon {\n      -webkit-transform: translateY(2px);\n              transform: translateY(2px); }\n  .resources .cards li {\n    display: block;\n    -ms-flex: 0 0 33.33%;\n        flex: 0 0 33.33%;\n    padding: 24px; }\n    .resources .cards li a {\n      display: block;\n      width: 100%; }\n    .resources .cards li .img-wrapper {\n      overflow: hidden;\n      border-radius: 6px; }\n    .resources .cards li img {\n      width: 100%; }\n    .resources .cards li h6 {\n      line-height: 23px;\n      font-size: 12px;\n      letter-spacing: 0.12em;\n      text-transform: uppercase;\n      color: #B2BECD;\n      margin-bottom: 0;\n      margin-top: 16px; }\n    .resources .cards li h4 {\n      font-size: 20px;\n      margin-top: 10px;\n      color: #1A232F;\n      font-weight: 600; }\n    .resources .cards li p {\n      color: #5B708B;\n      line-height: 22px;\n      font-size: 14px;\n      letter-spacing: -0.02em; }\n  @media (max-width: 992px) {\n    .resources .cards {\n      margin-left: -12px;\n      margin-right: -12px; }\n    .resources .cards li {\n      padding: 12px; } }\n  @media (max-width: 768px) {\n    .resources .cards {\n      -ms-flex-wrap: wrap;\n          flex-wrap: wrap; }\n    .resources .cards li {\n      -ms-flex: 0 0 50%;\n          flex: 0 0 50%; } }\n  @media (max-width: 480px) {\n    .resources .cards li {\n      -ms-flex: 0 0 100%;\n          flex: 0 0 100%; }\n    .resources h5 {\n      display: none; } }\n\n.ee-hero {\n  padding-bottom: 0; }\n\n.ee-main section {\n  margin-bottom: 80px; }\n\nmain {\n  margin-bottom: 180px; }\n  main .content {\n    margin: 163px 0 184px; }\n  main p {\n    margin-bottom: 0; }\n\n@media (max-width: 767px) {\n  main .content {\n    margin: 80px 0 0; }\n  .solution-hero::after {\n    display: none; } }\n\n/*# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImluZGV4LmNzcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtFQUNFLGlCQUFpQjtFQUNqQixtQkFBbUI7RUFDbkIsc0JBQXNCLEVBQUU7RUFDeEI7SUFDRSxjQUFjLEVBQUU7RUFDbEI7SUFDRSxnQkFBZ0I7SUFDaEIsa0JBQWtCO0lBQ2xCLGlCQUFpQjtJQUNqQix3QkFBd0I7SUFDeEIsZUFBZTtJQUNmLGNBQWM7SUFDZCxvQkFBb0IsRUFBRTtFQUN4QjtJQUNFLDhFQUE4RTtJQUM5RSxrQkFBa0I7SUFDbEIsZ0JBQWdCO0lBQ2hCLGtCQUFrQjtJQUNsQix1QkFBdUI7SUFDdkIsMEJBQTBCO0lBQzFCLGVBQWU7SUFDZixvQkFBb0IsRUFBRTtFQUN4QjtJQUNFLDZEQUE2RDtJQUM3RCxnQkFBZ0I7SUFDaEIsaUJBQWlCO0lBQ2pCLGtCQUFrQjtJQUNsQix3QkFBd0I7SUFDeEIsNkJBQTZCLEVBQUU7RUFDakM7SUFDRSxtQkFBbUI7SUFDbkIsb0JBQW9CO0lBQ3BCLGtCQUFrQjtJQUNsQixxQkFBcUI7SUFDckIsZ0JBQWdCO0lBQ2hCLGlCQUFpQjtJQUNqQixrQkFBa0I7SUFDbEIsdUJBQXVCO0lBQ3ZCLGFBQWE7SUFDYiwwQkFBMEI7SUFDMUIsaUJBQWlCO0lBQ2pCLG9CQUFvQjtJQUNwQiw4RUFBOEU7SUFDOUUscUJBQXFCO0lBQ3JCLHFCQUFjO0lBQWQsY0FBYztJQUNkLHVCQUFvQjtRQUFwQixvQkFBb0IsRUFBRTtJQUN0QjtNQUNFLGtQQUFrUDtNQUNsUCxzQkFBc0I7TUFDdEIsWUFBWTtNQUNaLGFBQWE7TUFDYixZQUFZO01BQ1osZUFBZTtNQUNmLGlCQUFpQjtNQUNqQixvQ0FBNEI7Y0FBNUIsNEJBQTRCLEVBQUU7SUFDaEM7TUFDRSwwQkFBMEIsRUFBRTtFQUNoQztJQUNFLGdCQUFnQjtJQUNoQixrQkFBa0IsRUFBRTtFQUN0QjtJQUNFLGlCQUFpQixFQUFFO0VBQ3JCO0lBQ0UscUJBQWM7SUFBZCxjQUFjO0lBQ2QsMkJBQXVCO1FBQXZCLHVCQUF1QjtJQUN2QixzQkFBd0I7UUFBeEIsd0JBQXdCO0lBQ3hCLHVCQUFvQjtRQUFwQixvQkFBb0I7SUFDcEIsbUJBQW1CO0lBQ25CLGtCQUFrQjtJQUNsQixtQkFBbUIsRUFBRTtFQUN2QjtJQUNFO01BQ0Usa0JBQWtCO01BQ2xCLGtCQUFrQixFQUFFO01BQ3BCO1FBQ0UsZ0JBQWdCO1FBQ2hCLGtCQUFrQixFQUFFO01BQ3RCO1FBQ0UsZ0JBQWdCO1FBQ2hCLGtCQUFrQixFQUFFLEVBQUU7RUFDNUI7SUFDRTtNQUNFLGdCQUFnQjtNQUNoQixrQkFBa0I7TUFDbEIsbUJBQW1CLEVBQUU7SUFDdkI7TUFDRSxnQkFBZ0I7TUFDaEIsa0JBQWtCLEVBQUU7SUFDdEI7TUFDRSxnQkFBZ0IsRUFBRSxFQUFFOztBQUUxQjtFQUNFLGNBQWMsRUFBRTtFQUNoQjtJQUNFLHFCQUFxQixFQUFFO0VBQ3pCOzs7SUFHRSxxQkFBYztJQUFkLGNBQWMsRUFBRTtJQUNoQjs7Ozs7TUFLRSxjQUFjLEVBQUU7RUFDcEI7O0lBRUUsaUJBQWlCLEVBQUU7SUFDbkI7TUFDRTs7UUFFRSxnQkFBZ0I7UUFDaEIsbUJBQW1CLEVBQUU7UUFDckI7O1VBRUUsaUJBQWlCLEVBQUUsRUFBRTtFQUM3QjtJQUNFLHdCQUFvQjtRQUFwQixvQkFBb0IsRUFBRTtJQUN0QjtNQUNFLGtCQUFrQixFQUFFO0VBQ3hCO0lBQ0UsZ0NBQTRCO1FBQTVCLDRCQUE0QjtJQUM1QixrQkFBa0IsRUFBRTtJQUNwQjtNQUNFLG1CQUFtQixFQUFFO0VBQ3pCO0lBQ0UsMkJBQXVCO1FBQXZCLHVCQUF1QjtJQUN2Qix1QkFBb0I7UUFBcEIsb0JBQW9CO0lBQ3BCLG1CQUFtQixFQUFFO0lBQ3JCO01BQ0UsYUFBYTtNQUNiLGdCQUFnQixFQUFFO0VBQ3RCO0lBQ0UsaUJBQWlCLEVBQUU7RUFDckI7SUFDRTs7TUFFRSxtQ0FBK0I7VUFBL0IsK0JBQStCO01BQy9CLHVCQUFvQjtVQUFwQixvQkFBb0IsRUFBRTtNQUN0Qjs7UUFFRSxvQkFBb0I7UUFDcEIsZUFBZTtRQUNmLGdCQUFnQixFQUFFO0lBQ3RCO01BQ0UscUJBQXFCLEVBQUUsRUFBRTtFQUM3QjtJQUNFLG1CQUEwQjtRQUExQiwwQkFBMEIsRUFBRTtJQUM1QjtNQUNFLFlBQVksRUFBRTtFQUNsQjtJQUNFLGdCQUFnQjtJQUNoQixrQkFBa0I7SUFDbEIsd0JBQXdCLEVBQUU7SUFDMUI7TUFDRSxjQUFjLEVBQUU7RUFDcEI7SUFDRSw4RUFBOEU7SUFDOUUsbUJBQW1CO0lBQ25CLGtCQUFrQjtJQUNsQixnQkFBZ0I7SUFDaEIsa0JBQWtCO0lBQ2xCLHVCQUF1QjtJQUN2QiwwQkFBMEI7SUFDMUIsZUFBZTtJQUNmLGNBQWMsRUFBRTtFQUNsQjtJQUNFLHNCQUFzQjtJQUN0QixnQkFBZ0I7SUFDaEIsaUJBQWlCO0lBQ2pCLGlCQUFpQixFQUFFO0VBQ3JCO0lBQ0UsZ0JBQWdCO0lBQ2hCLGtCQUFrQjtJQUNsQix3QkFBd0I7SUFDeEIsZUFBZTtJQUNmLGlCQUFpQixFQUFFO0lBQ25CO01BQ0UsZ0JBQWdCO01BQ2hCLGtCQUFrQjtNQUNsQix3QkFBd0IsRUFBRTtFQUM5QjtJQUNFLGlCQUFpQixFQUFFO0VBQ3JCO0lBQ0UsZ0JBQWdCLEVBQUU7RUFDcEI7SUFDRSxnQkFBZ0I7SUFDaEIsa0JBQWtCO0lBQ2xCLHdCQUF3QjtJQUN4QixlQUFlO0lBQ2Ysb0JBQW9CO0lBQ3BCLG1CQUFtQjtJQUNuQixpQkFBaUI7SUFDakIsbUJBQW1CLEVBQUU7SUFDckI7TUFDRSxtREFBbUQ7TUFDbkQsc0JBQXNCO01BQ3RCLFlBQVk7TUFDWixhQUFhO01BQ2IsWUFBWTtNQUNaLG1CQUFtQjtNQUNuQixRQUFRO01BQ1IsU0FBUyxFQUFFO0VBQ2Y7SUFDRSxrQkFBYztJQUFkLGNBQWM7SUFDZCw4QkFBbUM7UUFBbkMsbUNBQW1DO0lBQ25DLHNCQUFzQjtJQUN0QixtQkFBbUI7SUFDbkIsV0FBVyxFQUFFO0lBQ2I7TUFDRSxpQkFBaUIsRUFBRTtJQUNyQjtNQUNFLG9CQUFvQjtNQUNwQixZQUFZLEVBQUU7SUFDaEI7TUFDRTtRQUNFLDBCQUErQjtZQUEvQiwrQkFBK0IsRUFBRSxFQUFFO0lBQ3ZDO01BQ0U7UUFDRSxzQkFBMkI7WUFBM0IsMkJBQTJCLEVBQUUsRUFBRTtFQUNyQztJQUNFLG9CQUFvQjtJQUNwQixvQkFBb0I7SUFDcEIsd0JBQXdCO0lBQ3hCLHVCQUF1QjtJQUN2QixhQUFhLEVBQUU7SUFDZjs7TUFFRSxlQUFlLEVBQUU7O0FBRXZCO0VBQ0UsaUJBQWlCO0VBQ2pCLG1CQUFtQjtFQUNuQixtQkFBbUIsRUFBRTtFQUNyQjtJQUNFLG1CQUFtQjtJQUNuQixPQUFPO0lBQ1AsYUFBYTtJQUNiLCtDQUErQztJQUMvQyxZQUFZO0lBQ1osZUFBZSxFQUFFOztBQUVyQjtFQUNFLHFCQUFjO0VBQWQsY0FBYztFQUNkLGlCQUFpQjtFQUNqQixzQkFBd0I7TUFBeEIsd0JBQXdCO0VBQ3hCLGlCQUFpQixFQUFFO0VBQ25CO0lBQ0Usb0JBQW9CO0lBQ3BCLG1CQUFtQjtJQUNuQix3QkFBd0I7SUFDeEIscUJBQWM7SUFBZCxjQUFjO0lBQ2QsMkJBQXVCO1FBQXZCLHVCQUF1QjtJQUN2QixzQkFBd0I7UUFBeEIsd0JBQXdCO0lBQ3hCLG1CQUFtQjtJQUNuQixvQkFBZ0I7UUFBaEIsZ0JBQWdCO0lBQ2hCLG1CQUFtQixFQUFFO0lBQ3JCO01BQ0UsZ0JBQWdCLEVBQUU7SUFDcEI7TUFDRSxvQkFBb0IsRUFBRTtNQUN0QjtRQUNFLG1DQUFtQyxFQUFFO0VBQzNDO0lBQ0UsZ0JBQWdCO0lBQ2hCLG9CQUFvQjtJQUNwQix3QkFBd0I7SUFDeEIsYUFBYTtJQUNiLGNBQWMsRUFBRTtFQUNsQjtJQUNFLGdCQUFnQjtJQUNoQixrQkFBa0I7SUFDbEIsd0JBQXdCO0lBQ3hCLGdDQUFnQztJQUNoQyxjQUFjO0lBQ2Qsb0JBQW9CLEVBQUU7RUFDeEI7SUFDRSxpQkFBaUI7SUFDakIsZ0JBQWdCO0lBQ2hCLGtCQUFrQjtJQUNsQix1QkFBdUI7SUFDdkIsMEJBQTBCO0lBQzFCLG1CQUFtQjtJQUNuQixpQkFBaUI7SUFDakIsbUJBQW1CO0lBQ25CLG9DQUFvQyxFQUFFO0lBQ3RDO01BQ0Usc0JBQXNCO01BQ3RCLGFBQWE7TUFDYixZQUFZO01BQ1oscUJBQXFCLEVBQUU7RUFDM0I7SUFDRTtNQUNFLDJCQUF1QjtVQUF2Qix1QkFBdUI7TUFDdkIsdUJBQW9CO1VBQXBCLG9CQUFvQixFQUFFO01BQ3RCO1FBQ0UsZUFBVztZQUFYLFdBQVc7UUFDWCxnQkFBZ0I7UUFDaEIsaUJBQWlCO1FBQ2pCLGlCQUFpQixFQUFFLEVBQUU7O0FBRTdCO0VBQ0UsOERBQThEO0VBQzlELGtCQUFrQjtFQUNsQixtQkFBbUI7RUFDbkIsc0JBQXNCLEVBQUU7RUFDeEI7SUFDRSxlQUFlLEVBQUU7RUFDbkI7SUFDRSxpQkFBaUI7SUFDakIsZUFBZTtJQUNmLG1CQUFtQjtJQUNuQixlQUFlLEVBQUU7O0FBRXJCO0VBQ0UsaUJBQWlCLEVBQUU7RUFDbkI7SUFDRSxlQUFlLEVBQUU7O0FBRXJCO0VBQ0Usc0JBQXNCLEVBQUU7RUFDeEI7SUFDRTtNQUNFLHFCQUFxQixFQUFFLEVBQUU7RUFDN0I7SUFDRSxzQkFBc0I7SUFDdEIsVUFBVTtJQUNWLFdBQVc7SUFDWCxxQkFBYztJQUFkLGNBQWM7SUFDZCxtQkFBbUI7SUFDbkIsb0JBQW9CLEVBQUU7RUFDeEI7SUFDRSxxQkFBYztJQUFkLGNBQWM7SUFDZCx1QkFBK0I7UUFBL0IsK0JBQStCO0lBQy9CLHlCQUFzQjtRQUF0QixzQkFBc0IsRUFBRTtJQUN4QjtNQUNFLGlCQUFpQjtNQUNqQixvQkFBb0I7TUFDcEIsZ0JBQWdCO01BQ2hCLHdCQUF3QjtNQUN4QixlQUFlO01BQ2YsaUJBQWlCLEVBQUU7SUFDckI7TUFDRSxpQkFBaUI7TUFDakIsZ0JBQWdCO01BQ2hCLG9CQUFvQjtNQUNwQix3QkFBd0I7TUFDeEIsZUFBZSxFQUFFO0lBQ25CO01BQ0UsaUJBQWlCO01BQ2pCLGVBQWU7TUFDZixnQkFBZ0I7TUFDaEIsdUJBQXVCO01BQ3ZCLGVBQWU7TUFDZiwwQkFBMEIsRUFBRTtJQUM5QjtNQUNFLG1DQUEyQjtjQUEzQiwyQkFBMkIsRUFBRTtFQUNqQztJQUNFLGVBQWU7SUFDZixxQkFBaUI7UUFBakIsaUJBQWlCO0lBQ2pCLGNBQWMsRUFBRTtJQUNoQjtNQUNFLGVBQWU7TUFDZixZQUFZLEVBQUU7SUFDaEI7TUFDRSxpQkFBaUI7TUFDakIsbUJBQW1CLEVBQUU7SUFDdkI7TUFDRSxZQUFZLEVBQUU7SUFDaEI7TUFDRSxrQkFBa0I7TUFDbEIsZ0JBQWdCO01BQ2hCLHVCQUF1QjtNQUN2QiwwQkFBMEI7TUFDMUIsZUFBZTtNQUNmLGlCQUFpQjtNQUNqQixpQkFBaUIsRUFBRTtJQUNyQjtNQUNFLGdCQUFnQjtNQUNoQixpQkFBaUI7TUFDakIsZUFBZTtNQUNmLGlCQUFpQixFQUFFO0lBQ3JCO01BQ0UsZUFBZTtNQUNmLGtCQUFrQjtNQUNsQixnQkFBZ0I7TUFDaEIsd0JBQXdCLEVBQUU7RUFDOUI7SUFDRTtNQUNFLG1CQUFtQjtNQUNuQixvQkFBb0IsRUFBRTtJQUN4QjtNQUNFLGNBQWMsRUFBRSxFQUFFO0VBQ3RCO0lBQ0U7TUFDRSxvQkFBZ0I7VUFBaEIsZ0JBQWdCLEVBQUU7SUFDcEI7TUFDRSxrQkFBYztVQUFkLGNBQWMsRUFBRSxFQUFFO0VBQ3RCO0lBQ0U7TUFDRSxtQkFBZTtVQUFmLGVBQWUsRUFBRTtJQUNuQjtNQUNFLGNBQWMsRUFBRSxFQUFFOztBQUV4Qjs7OztFQUlFLGdCQUFnQjtFQUNoQixrQkFBa0I7RUFDbEIsd0JBQXdCO0VBQ3hCLGVBQWU7RUFDZixjQUFjLEVBQUU7O0FBRWxCOzs7O0VBSUUsZ0JBQWdCO0VBQ2hCLG9CQUFvQjtFQUNwQix3QkFBd0I7RUFDeEIsZUFBZTtFQUNmLGlCQUFpQixFQUFFOztBQUVyQjtFQUNFLHlCQUF5QjtFQUN6QixpQkFBaUI7RUFDakIsb0JBQWdCO01BQWhCLGdCQUFnQixFQUFFO0VBQ2xCO0lBQ0UsbUJBQW1CLEVBQUU7SUFDckI7TUFDRSxpQkFBaUIsRUFBRTtFQUN2QjtJQUNFO01BQ0UsbUJBQW1CO01BQ25CLG9CQUFvQixFQUFFO01BQ3RCO1FBQ0UsY0FBYyxFQUFFLEVBQUU7O0FBRTFCO0VBQ0UscUJBQWM7RUFBZCxjQUFjO0VBQ2Qsb0JBQW9CO0VBQ3BCLFdBQVc7RUFDWCx1QkFBK0I7TUFBL0IsK0JBQStCO0VBQy9CLGlCQUFpQjtFQUNqQixZQUFZLEVBQUU7RUFDZDtJQUNFLHNEQUFzRDtJQUN0RCw0QkFBNEI7SUFDNUIsNkJBQTZCO0lBQzdCLGVBQWU7SUFDZixhQUFhLEVBQUU7RUFDakI7SUFDRTtNQUNFLHNCQUF3QjtVQUF4Qix3QkFBd0I7TUFDeEIsb0JBQWdCO1VBQWhCLGdCQUFnQjtNQUNoQixpQkFBaUIsRUFBRTtNQUNuQjtRQUNFLGFBQWEsRUFBRSxFQUFFO0VBQ3ZCO0lBQ0UsWUFBWSxFQUFFO0VBQ2hCO0lBQ0UsNkJBQTZCO0lBQzdCLFlBQVksRUFBRTtFQUNoQjtJQUNFLDZCQUE2QjtJQUM3QixZQUFZLEVBQUU7RUFDaEI7SUFDRSw4QkFBOEI7SUFDOUIsWUFBWSxFQUFFO0VBQ2hCO0lBQ0UsOEJBQThCO0lBQzlCLGFBQWEsRUFBRTtFQUNqQjtJQUNFLDhCQUE4QjtJQUM5QixZQUFZLEVBQUU7RUFDaEI7SUFDRSw4QkFBOEI7SUFDOUIsWUFBWSxFQUFFOztBQUVsQjtFQUNFLGlCQUFpQjtFQUNqQixpQkFBaUIsRUFBRTtFQUNuQjtJQUNFLG1CQUFtQixFQUFFO0VBQ3ZCO0lBQ0UsaUJBQWlCLEVBQUU7RUFDckI7OztJQUdFLG1CQUFtQjtJQUNuQixXQUFXLEVBQUU7O0FBRWpCO0VBQ0U7SUFDRSxxQkFBcUIsRUFBRSxFQUFFOztBQUU3Qjs7OztFQUlFLG1CQUFtQjtFQUNuQixXQUFXLEVBQUU7O0FBRWY7RUFDRSx1QkFBdUI7RUFDdkIsbUJBQW1CO0VBQ25CLFdBQVc7RUFDWCxZQUFZO0VBQ1osZUFBZSxFQUFFOztBQUVuQjtFQUNFLCtEQUErRDtFQUMvRCxhQUFhO0VBQ2IsY0FBYztFQUNkLHlCQUF5QjtFQUN6QixXQUFXLEVBQUU7O0FBRWY7RUFDRSw0REFBNEQ7RUFDNUQsYUFBYTtFQUNiLGNBQWM7RUFDZCxhQUFhO0VBQ2IsVUFBVSxFQUFFOztBQUVkO0VBQ0UsMkNBQTJDO0VBQzNDLGFBQWE7RUFDYixjQUFjO0VBQ2QsNkJBQTZCO0VBQzdCLFlBQVk7RUFDWixVQUFVLEVBQUU7O0FBRWQ7RUFDRSxZQUFZO0VBQ1osWUFBWSxFQUFFOztBQUVoQjtFQUNFLHNEQUFzRDtFQUN0RCxrQkFBa0I7RUFDbEIseUJBQWlCO0VBQWpCLGlCQUFpQjtFQUNqQixPQUFPO0VBQ1AsV0FBVyxFQUFFO0VBQ2I7SUFDRSxxQkFBYztJQUFkLGNBQWM7SUFDZCx1QkFBK0I7UUFBL0IsK0JBQStCO0lBQy9CLGtCQUFrQjtJQUNsQixxQkFBcUI7SUFDckIsbUJBQW1CO0lBQ25CLG9CQUFnQjtRQUFoQixnQkFBZ0IsRUFBRTtJQUNsQjtNQUNFO1FBQ0UsMEJBQThCO1lBQTlCLDhCQUE4QixFQUFFLEVBQUU7SUFDdEM7TUFDRSxjQUFjLEVBQUU7RUFDcEI7SUFDRSxpQkFBaUIsRUFBRTtJQUNuQjtNQUNFLGVBQWUsRUFBRTtFQUNyQjtJQUNFLGdCQUFnQjtJQUNoQixnQkFBZ0I7SUFDaEIsa0JBQWtCO0lBQ2xCLG1CQUFtQjtJQUNuQix1QkFBdUI7SUFDdkIsMEJBQTBCO0lBQzFCLGVBQWUsRUFBRTtJQUNqQjtNQUNFLHdCQUF3QjtNQUN4QixzQkFBc0IsRUFBRTtJQUMxQjtNQUNFLHVCQUF1QjtNQUN2QixrQkFBa0I7TUFDbEIsb0JBQW9CO01BQ3BCLGFBQWE7TUFDYixpQkFBaUIsRUFBRTtNQUNuQjtRQUNFLGFBQWE7UUFDYixvQkFBb0IsRUFBRTtFQUM1QjtJQUNFLGVBQWU7SUFDZixpQkFBaUIsRUFBRTtJQUNuQjtNQUNFLGVBQWUsRUFBRTs7QUFFdkI7RUFDRSx5QkFBeUI7RUFDekIsZUFBZSxFQUFFO0VBQ2pCO0lBQ0UsZ0JBQWdCO0lBQ2hCLGtCQUFrQjtJQUNsQix3QkFBd0I7SUFDeEIsZUFBZTtJQUNmLG9CQUFvQixFQUFFO0VBQ3hCO0lBQ0UsZUFBZTtJQUNmLGlCQUFpQjtJQUNqQixtQkFBbUIsRUFBRTtJQUNyQjtNQUNFLGNBQWMsRUFBRTtFQUNwQjtJQUNFLGdCQUFnQjtJQUNoQixrQkFBa0I7SUFDbEIsb0JBQW9CLEVBQUU7RUFDeEI7SUFDRSxnQkFBZ0IsRUFBRTtFQUNwQjtJQUNFLGdCQUFnQjtJQUNoQixrQkFBa0I7SUFDbEIsZUFBZTtJQUNmLG9CQUFvQjtJQUNwQixtQkFBbUI7SUFDbkIsaUJBQWlCO0lBQ2pCLG1CQUFtQjtJQUNuQix3QkFBd0IsRUFBRTtJQUMxQjtNQUNFLDhOQUE4TjtNQUM5TixtQkFBbUI7TUFDbkIsUUFBUTtNQUNSLFNBQVM7TUFDVCxhQUFhO01BQ2IsWUFBWTtNQUNaLGNBQWM7TUFDZCxlQUFlLEVBQUU7RUFDckI7SUFDRSxxQkFBYztJQUFkLGNBQWM7SUFDZCxtQkFBbUIsRUFBRTtJQUNyQjtNQUNFLGNBQWMsRUFBRTtJQUNsQjtNQUNFLGdDQUE0QjtVQUE1Qiw0QkFBNEIsRUFBRTtJQUNoQztNQUNFLHNCQUF3QjtVQUF4Qix3QkFBd0I7TUFDeEIsMkJBQXVCO1VBQXZCLHVCQUF1QjtNQUN2Qix1QkFBb0I7VUFBcEIsb0JBQW9CLEVBQUU7TUFDdEI7UUFDRSxpQkFBaUI7UUFDakIsbUJBQW1CLEVBQUU7UUFDckI7VUFDRSxxQkFBYztVQUFkLGNBQWM7VUFDZCxvQkFBZ0I7Y0FBaEIsZ0JBQWdCO1VBQ2hCLHVCQUErQjtjQUEvQiwrQkFBK0IsRUFBRTtVQUNqQztZQUNFO2NBQ0UscUJBQTRCO2tCQUE1Qiw0QkFBNEIsRUFBRSxFQUFFO1FBQ3RDO1VBQ0UsaUJBQWlCO1VBQ2pCLFlBQVksRUFBRTtFQUN0QjtJQUNFLGlCQUFpQjtJQUNqQixzQkFBc0IsRUFBRTtJQUN4QjtNQUNFO1FBQ0UsZ0JBQWdCO1FBQ2hCLGtCQUFrQixFQUFFLEVBQUU7RUFDNUI7SUFDRSxvQkFBb0I7SUFDcEIsbUJBQW1CO0lBQ25CLHNCQUFzQixFQUFFO0lBQ3hCO01BQ0UsZUFBZSxFQUFFO0lBQ25CO01BQ0UsaUJBQWlCO01BQ2pCLGVBQWU7TUFDZixtQkFBbUI7TUFDbkIsZUFBZSxFQUFFO0VBQ3JCO0lBQ0UsaUJBQWlCLEVBQUU7RUFDckI7SUFDRSxxQkFBYztJQUFkLGNBQWM7SUFDZCxpQkFBaUI7SUFDakIsc0JBQXdCO1FBQXhCLHdCQUF3QjtJQUN4QixpQkFBaUIsRUFBRTtJQUNuQjtNQUNFLG9CQUFvQjtNQUNwQixtQkFBbUI7TUFDbkIsd0JBQXdCO01BQ3hCLHFCQUFjO01BQWQsY0FBYztNQUNkLDJCQUF1QjtVQUF2Qix1QkFBdUI7TUFDdkIsc0JBQXdCO1VBQXhCLHdCQUF3QjtNQUN4QixtQkFBbUI7TUFDbkIsb0JBQWdCO1VBQWhCLGdCQUFnQjtNQUNoQixtQkFBbUIsRUFBRTtNQUNyQjtRQUNFLGdCQUFnQixFQUFFO01BQ3BCO1FBQ0Usb0JBQW9CLEVBQUU7UUFDdEI7VUFDRSxtQ0FBbUMsRUFBRTtJQUMzQztNQUNFLGdCQUFnQjtNQUNoQixvQkFBb0I7TUFDcEIsd0JBQXdCO01BQ3hCLGFBQWE7TUFDYixjQUFjLEVBQUU7SUFDbEI7TUFDRSxnQkFBZ0I7TUFDaEIsa0JBQWtCO01BQ2xCLHdCQUF3QjtNQUN4QixnQ0FBZ0MsRUFBRTtJQUNwQztNQUNFLGlCQUFpQjtNQUNqQixnQkFBZ0I7TUFDaEIsa0JBQWtCO01BQ2xCLHVCQUF1QjtNQUN2QiwwQkFBMEI7TUFDMUIsbUJBQW1CO01BQ25CLGlCQUFpQjtNQUNqQixtQkFBbUI7TUFDbkIsb0NBQW9DLEVBQUU7TUFDdEM7UUFDRSxzQkFBc0I7UUFDdEIsYUFBYTtRQUNiLFlBQVk7UUFDWixxQkFBcUIsRUFBRTtJQUMzQjtNQUNFO1FBQ0UsMkJBQXVCO1lBQXZCLHVCQUF1QixFQUFFO1FBQ3pCO1VBQ0UsZUFBVztjQUFYLFdBQVc7VUFDWCxnQkFBZ0I7VUFDaEIsaUJBQWlCLEVBQUUsRUFBRTs7QUFFL0I7RUFDRSxpQkFBaUIsRUFBRTs7QUFFckI7RUFDRSxzQkFBc0IsRUFBRTtFQUN4QjtJQUNFO01BQ0UscUJBQXFCLEVBQUUsRUFBRTtFQUM3QjtJQUNFLHNCQUFzQjtJQUN0QixVQUFVO0lBQ1YsV0FBVztJQUNYLHFCQUFjO0lBQWQsY0FBYztJQUNkLG1CQUFtQjtJQUNuQixvQkFBb0IsRUFBRTtFQUN4QjtJQUNFLHFCQUFjO0lBQWQsY0FBYztJQUNkLHVCQUErQjtRQUEvQiwrQkFBK0I7SUFDL0IseUJBQXNCO1FBQXRCLHNCQUFzQixFQUFFO0lBQ3hCO01BQ0UsaUJBQWlCO01BQ2pCLG9CQUFvQjtNQUNwQixnQkFBZ0I7TUFDaEIsd0JBQXdCO01BQ3hCLGVBQWU7TUFDZixpQkFBaUIsRUFBRTtJQUNyQjtNQUNFLGlCQUFpQjtNQUNqQixnQkFBZ0I7TUFDaEIsb0JBQW9CO01BQ3BCLHdCQUF3QjtNQUN4QixlQUFlLEVBQUU7SUFDbkI7TUFDRSxpQkFBaUI7TUFDakIsZUFBZTtNQUNmLGdCQUFnQjtNQUNoQix1QkFBdUI7TUFDdkIsZUFBZTtNQUNmLDBCQUEwQixFQUFFO0lBQzlCO01BQ0UsbUNBQTJCO2NBQTNCLDJCQUEyQixFQUFFO0VBQ2pDO0lBQ0UsZUFBZTtJQUNmLHFCQUFpQjtRQUFqQixpQkFBaUI7SUFDakIsY0FBYyxFQUFFO0lBQ2hCO01BQ0UsZUFBZTtNQUNmLFlBQVksRUFBRTtJQUNoQjtNQUNFLGlCQUFpQjtNQUNqQixtQkFBbUIsRUFBRTtJQUN2QjtNQUNFLFlBQVksRUFBRTtJQUNoQjtNQUNFLGtCQUFrQjtNQUNsQixnQkFBZ0I7TUFDaEIsdUJBQXVCO01BQ3ZCLDBCQUEwQjtNQUMxQixlQUFlO01BQ2YsaUJBQWlCO01BQ2pCLGlCQUFpQixFQUFFO0lBQ3JCO01BQ0UsZ0JBQWdCO01BQ2hCLGlCQUFpQjtNQUNqQixlQUFlO01BQ2YsaUJBQWlCLEVBQUU7SUFDckI7TUFDRSxlQUFlO01BQ2Ysa0JBQWtCO01BQ2xCLGdCQUFnQjtNQUNoQix3QkFBd0IsRUFBRTtFQUM5QjtJQUNFO01BQ0UsbUJBQW1CO01BQ25CLG9CQUFvQixFQUFFO0lBQ3hCO01BQ0UsY0FBYyxFQUFFLEVBQUU7RUFDdEI7SUFDRTtNQUNFLG9CQUFnQjtVQUFoQixnQkFBZ0IsRUFBRTtJQUNwQjtNQUNFLGtCQUFjO1VBQWQsY0FBYyxFQUFFLEVBQUU7RUFDdEI7SUFDRTtNQUNFLG1CQUFlO1VBQWYsZUFBZSxFQUFFO0lBQ25CO01BQ0UsY0FBYyxFQUFFLEVBQUU7O0FBRXhCO0VBQ0Usa0JBQWtCLEVBQUU7O0FBRXRCO0VBQ0Usb0JBQW9CLEVBQUU7O0FBRXhCO0VBQ0UscUJBQXFCLEVBQUU7RUFDdkI7SUFDRSxzQkFBc0IsRUFBRTtFQUMxQjtJQUNFLGlCQUFpQixFQUFFOztBQUV2QjtFQUNFO0lBQ0UsaUJBQWlCLEVBQUU7RUFDckI7SUFDRSxjQUFjLEVBQUUsRUFBRSIsImZpbGUiOiJwYWdlcy9lbnRlcnByaXNlL3NvbHV0aW9ucy9pbmRleC5jc3MiLCJzb3VyY2VzQ29udGVudCI6WyIuZWUtaGVybyB7XG4gIG1heC13aWR0aDogNjQwcHg7XG4gIHBhZGRpbmctdG9wOiAxMzBweDtcbiAgcGFkZGluZy1ib3R0b206IDE2MHB4OyB9XG4gIC5lZS1oZXJvOjpiZWZvcmUsIC5lZS1oZXJvOjphZnRlciB7XG4gICAgZGlzcGxheTogbm9uZTsgfVxuICAuZWUtaGVybyBoMSB7XG4gICAgZm9udC1zaXplOiA1MnB4O1xuICAgIGxpbmUtaGVpZ2h0OiA2MnB4O1xuICAgIG1heC13aWR0aDogOTMwcHg7XG4gICAgbGV0dGVyLXNwYWNpbmc6IC0wLjAzZW07XG4gICAgY29sb3I6ICMwMjA4MTQ7XG4gICAgbWFyZ2luLXRvcDogMDtcbiAgICBtYXJnaW4tYm90dG9tOiAxNnB4OyB9XG4gIC5lZS1oZXJvIGg0IHtcbiAgICBmb250LWZhbWlseTogXCJSb2JvdG8gTW9ub1wiLCBNZW5sbywgTW9uYWNvLCBDb25zb2xhcywgXCJDb3VyaWVyIE5ld1wiLCBtb25vc3BhY2U7XG4gICAgZm9udC13ZWlnaHQ6IGJvbGQ7XG4gICAgZm9udC1zaXplOiAxM3B4O1xuICAgIGxpbmUtaGVpZ2h0OiAyNnB4O1xuICAgIGxldHRlci1zcGFjaW5nOiAwLjE0ZW07XG4gICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcbiAgICBjb2xvcjogIzkyQTFCMztcbiAgICBtYXJnaW4tYm90dG9tOiAyOXB4OyB9XG4gIC5lZS1oZXJvIHAge1xuICAgIGZvbnQtZmFtaWx5OiBcIkVpbmFcIiwgXCJIZWx2ZXRpY2EgTmV1ZVwiLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7XG4gICAgZm9udC1zaXplOiAyNHB4O1xuICAgIGZvbnQtd2VpZ2h0OiA0MDA7XG4gICAgbGluZS1oZWlnaHQ6IDM2cHg7XG4gICAgbGV0dGVyLXNwYWNpbmc6IC0wLjA0ZW07XG4gICAgY29sb3I6IHJnYmEoMzksIDUwLCA2MywgMC44KTsgfVxuICAuZWUtaGVybyAuYnRuIHtcbiAgICBwYWRkaW5nLWxlZnQ6IDI0cHg7XG4gICAgcGFkZGluZy1yaWdodDogMjBweDtcbiAgICBwYWRkaW5nLXRvcDogMThweDtcbiAgICBwYWRkaW5nLWJvdHRvbTogMThweDtcbiAgICBmb250LXNpemU6IDE0cHg7XG4gICAgbWFyZ2luLXRvcDogMTZweDtcbiAgICBsaW5lLWhlaWdodDogMjBweDtcbiAgICBsZXR0ZXItc3BhY2luZzogMC4wOGVtO1xuICAgIGNvbG9yOiB3aGl0ZTtcbiAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xuICAgIGZvbnQtd2VpZ2h0OiA3MDA7XG4gICAgYmFja2dyb3VuZDogIzM4ODBGRjtcbiAgICBib3gtc2hhZG93OiAwcHggMnB4IDRweCByZ2JhKDIsIDgsIDIwLCAwLjEpLCAwcHggMXB4IDJweCByZ2JhKDIsIDgsIDIwLCAwLjA4KTtcbiAgICBib3JkZXItcmFkaXVzOiAyMTBweDtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7IH1cbiAgICAuZWUtaGVybyAuYnRuOjphZnRlciB7XG4gICAgICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoJ2RhdGE6aW1hZ2Uvc3ZnK3htbDt1dGY4LDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIGZpbGw9XCJ3aGl0ZVwiIHZpZXdCb3g9XCIwIDAgNTEyIDUxMlwiPjxwYXRoIGQ9XCJNODUgMjc3LjM3NWgyNTkuNzA0TDIyNS4wMDIgMzk3LjA3NyAyNTYgNDI3bDE3MS0xNzFMMjU2IDg1bC0yOS45MjIgMjkuOTI0IDExOC42MjYgMTE5LjcwMUg4NXY0Mi43NXpcIi8+PC9zdmc+Jyk7XG4gICAgICBiYWNrZ3JvdW5kLXNpemU6IDEwMCU7XG4gICAgICBjb250ZW50OiAnJztcbiAgICAgIGhlaWdodDogMjBweDtcbiAgICAgIHdpZHRoOiAyMHB4O1xuICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICBtYXJnaW4tbGVmdDogOHB4O1xuICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC0xcHgpOyB9XG4gICAgLmVlLWhlcm8gLmJ0bjpob3ZlciB7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjNGY4YmY1OyB9XG4gIC5lZS1oZXJvLS1sYXJnZSBoMSB7XG4gICAgZm9udC1zaXplOiA2MnB4O1xuICAgIGxpbmUtaGVpZ2h0OiA2OXB4OyB9XG4gIC5lZS1oZXJvLS13aWRlIHtcbiAgICBtYXgtd2lkdGg6IDk2MHB4OyB9XG4gIC5lZS1oZXJvLS1jZW50ZXJlZCB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgIG1hcmdpbi1sZWZ0OiBhdXRvO1xuICAgIG1hcmdpbi1yaWdodDogYXV0bzsgfVxuICBAbWVkaWEgKG1heC13aWR0aDogNzY3cHgpIHtcbiAgICAuZWUtaGVybyB7XG4gICAgICBwYWRkaW5nLXRvcDogNzBweDtcbiAgICAgIHBhZGRpbmctYm90dG9tOiAwOyB9XG4gICAgICAuZWUtaGVybyBoMSB7XG4gICAgICAgIGZvbnQtc2l6ZTogNDRweDtcbiAgICAgICAgbGluZS1oZWlnaHQ6IDUycHg7IH1cbiAgICAgIC5lZS1oZXJvLS1sYXJnZSBoMSB7XG4gICAgICAgIGZvbnQtc2l6ZTogNTBweDtcbiAgICAgICAgbGluZS1oZWlnaHQ6IDYwcHg7IH0gfVxuICBAbWVkaWEgKG1heC13aWR0aDogNDgwcHgpIHtcbiAgICAuZWUtaGVybyBoMSB7XG4gICAgICBmb250LXNpemU6IDM2cHg7XG4gICAgICBsaW5lLWhlaWdodDogNDRweDtcbiAgICAgIG1hcmdpbi1ib3R0b206IDZweDsgfVxuICAgIC5lZS1oZXJvLS1sYXJnZSBoMSB7XG4gICAgICBmb250LXNpemU6IDQycHg7XG4gICAgICBsaW5lLWhlaWdodDogNTJweDsgfVxuICAgIC5lZS1oZXJvIC5idG4ge1xuICAgICAgbWFyZ2luLXRvcDogOHB4OyB9IH1cblxuLmVlLW1haW4ge1xuICBtYXJnaW4tdG9wOiAwOyB9XG4gIC5lZS1tYWluIHNlY3Rpb24ge1xuICAgIG1hcmdpbi1ib3R0b206IDIwMHB4OyB9XG4gIC5lZS1tYWluIC5sZWZ0LFxuICAuZWUtbWFpbiAucmlnaHQsXG4gIC5lZS1tYWluIC5jZW50ZXIge1xuICAgIGRpc3BsYXk6IGZsZXg7IH1cbiAgICAuZWUtbWFpbiAubGVmdDo6YmVmb3JlLCAuZWUtbWFpbiAubGVmdDo6YWZ0ZXIsXG4gICAgLmVlLW1haW4gLnJpZ2h0OjpiZWZvcmUsXG4gICAgLmVlLW1haW4gLnJpZ2h0OjphZnRlcixcbiAgICAuZWUtbWFpbiAuY2VudGVyOjpiZWZvcmUsXG4gICAgLmVlLW1haW4gLmNlbnRlcjo6YWZ0ZXIge1xuICAgICAgZGlzcGxheTogbm9uZTsgfVxuICAuZWUtbWFpbiAubGVmdCAuY29udGVudCxcbiAgLmVlLW1haW4gLnJpZ2h0IC5jb250ZW50IHtcbiAgICBtYXgtd2lkdGg6IDQ4MHB4OyB9XG4gICAgQG1lZGlhIChtYXgtd2lkdGg6IDc2N3B4KSB7XG4gICAgICAuZWUtbWFpbiAubGVmdCAuY29udGVudCxcbiAgICAgIC5lZS1tYWluIC5yaWdodCAuY29udGVudCB7XG4gICAgICAgIG1heC13aWR0aDogMTAwJTtcbiAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyOyB9XG4gICAgICAgIC5lZS1tYWluIC5sZWZ0IC5jb250ZW50IGxpLFxuICAgICAgICAuZWUtbWFpbiAucmlnaHQgLmNvbnRlbnQgbGkge1xuICAgICAgICAgIHRleHQtYWxpZ246IGxlZnQ7IH0gfVxuICAuZWUtbWFpbiAubGVmdCB7XG4gICAgZmxleC1kaXJlY3Rpb246IHJvdzsgfVxuICAgIC5lZS1tYWluIC5sZWZ0IC5ncmFwaGljcyB7XG4gICAgICBtYXJnaW4tbGVmdDogYXV0bzsgfVxuICAuZWUtbWFpbiAucmlnaHQge1xuICAgIGZsZXgtZGlyZWN0aW9uOiByb3ctcmV2ZXJzZTtcbiAgICBtYXJnaW4tbGVmdDogYXV0bzsgfVxuICAgIC5lZS1tYWluIC5yaWdodCAuZ3JhcGhpY3Mge1xuICAgICAgbWFyZ2luLXJpZ2h0OiBhdXRvOyB9XG4gIC5lZS1tYWluIC5jZW50ZXIge1xuICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7IH1cbiAgICAuZWUtbWFpbiAuY2VudGVyIC5jb250ZW50IHtcbiAgICAgIHdpZHRoOiA4OTRweDtcbiAgICAgIG1heC13aWR0aDogMTAwJTsgfVxuICAuZWUtbWFpbiAuZnVsbCAuY29udGVudCB7XG4gICAgbWF4LXdpZHRoOiA1NjhweDsgfVxuICBAbWVkaWEgKG1heC13aWR0aDogNzY3cHgpIHtcbiAgICAuZWUtbWFpbiAucmlnaHQsXG4gICAgLmVlLW1haW4gLmxlZnQge1xuICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbi1yZXZlcnNlO1xuICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsgfVxuICAgICAgLmVlLW1haW4gLnJpZ2h0IC5ncmFwaGljcyxcbiAgICAgIC5lZS1tYWluIC5sZWZ0IC5ncmFwaGljcyB7XG4gICAgICAgIG1hcmdpbi1ib3R0b206IDI0cHg7XG4gICAgICAgIG1hcmdpbi1sZWZ0OiAwO1xuICAgICAgICBtYXJnaW4tcmlnaHQ6IDA7IH1cbiAgICAuZWUtbWFpbiBzZWN0aW9uIHtcbiAgICAgIG1hcmdpbi1ib3R0b206IDEwMHB4OyB9IH1cbiAgLmVlLW1haW4gLmdyYXBoaWNzIHtcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtZW5kOyB9XG4gICAgLmVlLW1haW4gLmdyYXBoaWNzIGltZyB7XG4gICAgICB3aWR0aDogMTAwJTsgfVxuICAuZWUtbWFpbiBoMiB7XG4gICAgZm9udC1zaXplOiA0NHB4O1xuICAgIGxpbmUtaGVpZ2h0OiA1MXB4O1xuICAgIGxldHRlci1zcGFjaW5nOiAtMC4wM2VtOyB9XG4gICAgLmVlLW1haW4gaDI6Zmlyc3QtY2hpbGQge1xuICAgICAgbWFyZ2luLXRvcDogMDsgfVxuICAuZWUtbWFpbiAuZWUtc2VjdGlvbl9fdGl0bGUge1xuICAgIGZvbnQtZmFtaWx5OiBcIlJvYm90byBNb25vXCIsIE1lbmxvLCBNb25hY28sIENvbnNvbGFzLCBcIkNvdXJpZXIgTmV3XCIsIG1vbm9zcGFjZTtcbiAgICBmb250LXN0eWxlOiBub3JtYWw7XG4gICAgZm9udC13ZWlnaHQ6IGJvbGQ7XG4gICAgZm9udC1zaXplOiAxMnB4O1xuICAgIGxpbmUtaGVpZ2h0OiAyM3B4O1xuICAgIGxldHRlci1zcGFjaW5nOiAwLjE0ZW07XG4gICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcbiAgICBjb2xvcjogIzVCNzA4QjtcbiAgICBtYXJnaW4tdG9wOiAwOyB9XG4gIC5lZS1tYWluIC5lZS1zZWN0aW9uX19jdGEge1xuICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICBmb250LXNpemU6IDE4cHg7XG4gICAgZm9udC13ZWlnaHQ6IDUwMDtcbiAgICBtYXJnaW4tdG9wOiAxNnB4OyB9XG4gIC5lZS1tYWluIHAge1xuICAgIGZvbnQtc2l6ZTogMjBweDtcbiAgICBsaW5lLWhlaWdodDogMzFweDtcbiAgICBsZXR0ZXItc3BhY2luZzogLTAuMDJlbTtcbiAgICBjb2xvcjogIzVCNzA4QjtcbiAgICBtYXJnaW4tdG9wOiAxOHB4OyB9XG4gICAgLmVlLW1haW4gcC5zbSB7XG4gICAgICBmb250LXNpemU6IDE2cHg7XG4gICAgICBsaW5lLWhlaWdodDogMjlweDtcbiAgICAgIGxldHRlci1zcGFjaW5nOiAtMC4wMWVtOyB9XG4gIC5lZS1tYWluIHVsOm5vdCguZnJhbWV3b3Jrcykge1xuICAgIG1hcmdpbi10b3A6IDU0cHg7IH1cbiAgLmVlLW1haW4gLmNvbnRlbnQgdWwge1xuICAgIHBhZGRpbmctbGVmdDogMDsgfVxuICAuZWUtbWFpbiAuY29udGVudCBsaSB7XG4gICAgZm9udC1zaXplOiAxNnB4O1xuICAgIGxpbmUtaGVpZ2h0OiAyM3B4O1xuICAgIGxldHRlci1zcGFjaW5nOiAtMC4wMmVtO1xuICAgIGNvbG9yOiAjMUEyMzJGO1xuICAgIG1hcmdpbi1ib3R0b206IDQwcHg7XG4gICAgcGFkZGluZy1sZWZ0OiAzMHB4O1xuICAgIGxpc3Qtc3R5bGU6IG5vbmU7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlOyB9XG4gICAgLmVlLW1haW4gLmNvbnRlbnQgbGk6OmJlZm9yZSB7XG4gICAgICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXCIvaW1nL2VudGVycHJpc2UvY2hlY2suc3ZnXCIpO1xuICAgICAgYmFja2dyb3VuZC1zaXplOiAxMDAlO1xuICAgICAgY29udGVudDogJyc7XG4gICAgICBoZWlnaHQ6IDEwcHg7XG4gICAgICB3aWR0aDogMTNweDtcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgIGxlZnQ6IDA7XG4gICAgICB0b3A6IDhweDsgfVxuICAuZWUtbWFpbiAuZmVhdHVyZXMge1xuICAgIGRpc3BsYXk6IGdyaWQ7XG4gICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiAxZnIgMWZyIDFmcjtcbiAgICBncmlkLWNvbHVtbi1nYXA6IDY0cHg7XG4gICAgZ3JpZC1yb3ctZ2FwOiAyNHB4O1xuICAgIHBhZGRpbmc6IDA7IH1cbiAgICAuZWUtbWFpbiAuZmVhdHVyZXMgbGkge1xuICAgICAgbGlzdC1zdHlsZTogbm9uZTsgfVxuICAgIC5lZS1tYWluIC5mZWF0dXJlcyAuaWNvbiB7XG4gICAgICBtYXJnaW4tYm90dG9tOiAxNnB4O1xuICAgICAgd2lkdGg6IDQ4cHg7IH1cbiAgICBAbWVkaWEgKG1heC13aWR0aDogOTkxcHgpIHtcbiAgICAgIC5lZS1tYWluIC5mZWF0dXJlcyB7XG4gICAgICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogMWZyIDFmcjsgfSB9XG4gICAgQG1lZGlhIChtYXgtd2lkdGg6IDUwMHB4KSB7XG4gICAgICAuZWUtbWFpbiAuZmVhdHVyZXMge1xuICAgICAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IDFmcjsgfSB9XG4gIC5lZS1tYWluIC5jdGEtY2FyZCB7XG4gICAgYmFja2dyb3VuZDogIzRhOGJmYztcbiAgICBib3JkZXItcmFkaXVzOiAxMnB4O1xuICAgIHBhZGRpbmc6IDcycHggNzJweCA2MHB4O1xuICAgIGJhY2tncm91bmQtc2l6ZTogY292ZXI7XG4gICAgY29sb3I6IHdoaXRlOyB9XG4gICAgLmVlLW1haW4gLmN0YS1jYXJkIC5lZS1zZWN0aW9uX190aXRsZSxcbiAgICAuZWUtbWFpbiAuY3RhLWNhcmQgcCB7XG4gICAgICBjb2xvcjogI0NFRDZFMDsgfVxuXG4jaG93LXRvIHtcbiAgbWFyZ2luLWJvdHRvbTogMDtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBwYWRkaW5nLXRvcDogMTQwcHg7IH1cbiAgI2hvdy10bzo6YmVmb3JlIHtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgdG9wOiAwO1xuICAgIHdpZHRoOiAxMDB2dztcbiAgICBib3JkZXItdG9wOiAxcHggc29saWQgcmdiYSgxNDYsIDE2MSwgMTc5LCAwLjMpO1xuICAgIGNvbnRlbnQ6ICcnO1xuICAgIGRpc3BsYXk6IGJsb2NrOyB9XG5cbi5jYXJkcy0tcmVkLXYtYmx1ZSB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIHRleHQtYWxpZ246IGxlZnQ7XG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICBtYXJnaW4tdG9wOiAzOHB4OyB9XG4gIC5jYXJkcy0tcmVkLXYtYmx1ZV9fY2FyZCB7XG4gICAgYmFja2dyb3VuZDogIzdDQUJGRjtcbiAgICBib3JkZXItcmFkaXVzOiA4cHg7XG4gICAgcGFkZGluZzogNDBweCA0MHB4IDM0cHg7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgIGFsaWduLWl0ZW1zOiBmbGV4LXN0YXJ0O1xuICAgIG1hcmdpbi1yaWdodDogMjRweDtcbiAgICBmbGV4OiAwIDEgNDYwcHg7XG4gICAgYm9yZGVyLXJhZGl1czogOHB4OyB9XG4gICAgLmNhcmRzLS1yZWQtdi1ibHVlX19jYXJkOmxhc3QtY2hpbGQge1xuICAgICAgbWFyZ2luLXJpZ2h0OiAwOyB9XG4gICAgLmNhcmRzLS1yZWQtdi1ibHVlX19jYXJkOm50aC1jaGlsZCgyKSB7XG4gICAgICBiYWNrZ3JvdW5kOiAjRjg4RDhEOyB9XG4gICAgICAuY2FyZHMtLXJlZC12LWJsdWVfX2NhcmQ6bnRoLWNoaWxkKDIpIC5idG4ge1xuICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDI0NCwgODQsIDg0LCAwLjUpOyB9XG4gIC5jYXJkcy0tcmVkLXYtYmx1ZSBoMyB7XG4gICAgZm9udC1zaXplOiAyNHB4O1xuICAgIGxpbmUtaGVpZ2h0OiBub3JtYWw7XG4gICAgbGV0dGVyLXNwYWNpbmc6IC0wLjAyZW07XG4gICAgY29sb3I6IHdoaXRlO1xuICAgIG1hcmdpbi10b3A6IDA7IH1cbiAgLmNhcmRzLS1yZWQtdi1ibHVlIHAge1xuICAgIGZvbnQtc2l6ZTogMThweDtcbiAgICBsaW5lLWhlaWdodDogMjZweDtcbiAgICBsZXR0ZXItc3BhY2luZzogLTAuMDJlbTtcbiAgICBjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjcpO1xuICAgIG1hcmdpbi10b3A6IDA7XG4gICAgbWFyZ2luLWJvdHRvbTogMjJweDsgfVxuICAuY2FyZHMtLXJlZC12LWJsdWUgLmJ0biB7XG4gICAgbWFyZ2luLXRvcDogYXV0bztcbiAgICBmb250LXNpemU6IDE0cHg7XG4gICAgbGluZS1oZWlnaHQ6IDIycHg7XG4gICAgbGV0dGVyLXNwYWNpbmc6IDAuMDllbTtcbiAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xuICAgIHBhZGRpbmc6IDEwcHggMTRweDtcbiAgICBmb250LXdlaWdodDogNjAwO1xuICAgIGJvcmRlci1yYWRpdXM6IDhweDtcbiAgICBiYWNrZ3JvdW5kOiByZ2JhKDU2LCAxMjgsIDI1NSwgMC41KTsgfVxuICAgIC5jYXJkcy0tcmVkLXYtYmx1ZSAuYnRuIGlvbi1pY29uIHtcbiAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICAgIGhlaWdodDogMTRweDtcbiAgICAgIHdpZHRoOiAxNHB4O1xuICAgICAgdmVydGljYWwtYWxpZ246IC0ycHg7IH1cbiAgQG1lZGlhIChtYXgtd2lkdGg6IDc2N3B4KSB7XG4gICAgLmNhcmRzLS1yZWQtdi1ibHVlIHtcbiAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICBhbGlnbi1pdGVtczogY2VudGVyOyB9XG4gICAgICAuY2FyZHMtLXJlZC12LWJsdWVfX2NhcmQge1xuICAgICAgICBmbGV4OiBhdXRvO1xuICAgICAgICBtYXJnaW4tcmlnaHQ6IDA7XG4gICAgICAgIG1hcmdpbi10b3A6IDIwcHg7XG4gICAgICAgIG1heC13aWR0aDogNDYwcHg7IH0gfVxuXG5hc2lkZSB7XG4gIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCgxODBkZWcsICNGOUZBRkIgMCUsICNGRkZGRkYgMTAwJSk7XG4gIG1hcmdpbi10b3A6IC02MHB4O1xuICBwYWRkaW5nLXRvcDogMjAwcHg7XG4gIHBhZGRpbmctYm90dG9tOiAxMjBweDsgfVxuICBhc2lkZSBwIHtcbiAgICBjb2xvcjogIzQxNEQ1QzsgfVxuICBhc2lkZSAuY29udGVudCB7XG4gICAgbWF4LXdpZHRoOiA0MzJweDtcbiAgICBtYXJnaW46IDAgYXV0bztcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgZGlzcGxheTogYmxvY2s7IH1cblxuLmVlLWdldC1zdGFydGVkIHtcbiAgbWF4LXdpZHRoOiA3MDBweDsgfVxuICAuZWUtZ2V0LXN0YXJ0ZWQgaDMge1xuICAgIGNvbG9yOiAjNDE0RDVDOyB9XG5cbi5yZXNvdXJjZXMge1xuICBwYWRkaW5nLWJvdHRvbTogMTIwcHg7IH1cbiAgQG1lZGlhIChtYXgtd2lkdGg6IDc2OHB4KSB7XG4gICAgLnJlc291cmNlcyB7XG4gICAgICBwYWRkaW5nLWJvdHRvbTogNjBweDsgfSB9XG4gIC5yZXNvdXJjZXMgLmNhcmRzIHtcbiAgICBsaXN0LXN0eWxlLXR5cGU6IG5vbmU7XG4gICAgbWFyZ2luOiAwO1xuICAgIHBhZGRpbmc6IDA7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBtYXJnaW4tbGVmdDogLTI0cHg7XG4gICAgbWFyZ2luLXJpZ2h0OiAtMjRweDsgfVxuICAucmVzb3VyY2VzIGhncm91cCB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG4gICAgYWxpZ24taXRlbXM6IGJhc2VsaW5lOyB9XG4gICAgLnJlc291cmNlcyBoZ3JvdXAgaDMge1xuICAgICAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgICAgIGxpbmUtaGVpZ2h0OiBub3JtYWw7XG4gICAgICBmb250LXNpemU6IDI4cHg7XG4gICAgICBsZXR0ZXItc3BhY2luZzogLTAuMDJlbTtcbiAgICAgIGNvbG9yOiAjMUEyMzJGO1xuICAgICAgbWFyZ2luLWJvdHRvbTogMDsgfVxuICAgIC5yZXNvdXJjZXMgaGdyb3VwIGg0IHtcbiAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7XG4gICAgICBmb250LXNpemU6IDI0cHg7XG4gICAgICBsaW5lLWhlaWdodDogbm9ybWFsO1xuICAgICAgbGV0dGVyLXNwYWNpbmc6IC0wLjAyZW07XG4gICAgICBjb2xvcjogIzFBMjMyRjsgfVxuICAgIC5yZXNvdXJjZXMgaGdyb3VwIGg1IHtcbiAgICAgIGZvbnQtd2VpZ2h0OiA3MDA7XG4gICAgICBsaW5lLWhlaWdodDogMTtcbiAgICAgIGZvbnQtc2l6ZTogMTRweDtcbiAgICAgIGxldHRlci1zcGFjaW5nOiAwLjA4ZW07XG4gICAgICBjb2xvcjogIzM4ODBGRjtcbiAgICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7IH1cbiAgICAucmVzb3VyY2VzIGhncm91cCBpb24taWNvbiB7XG4gICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMnB4KTsgfVxuICAucmVzb3VyY2VzIC5jYXJkcyBsaSB7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgZmxleDogMCAwIDMzLjMzJTtcbiAgICBwYWRkaW5nOiAyNHB4OyB9XG4gICAgLnJlc291cmNlcyAuY2FyZHMgbGkgYSB7XG4gICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgIHdpZHRoOiAxMDAlOyB9XG4gICAgLnJlc291cmNlcyAuY2FyZHMgbGkgLmltZy13cmFwcGVyIHtcbiAgICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgICBib3JkZXItcmFkaXVzOiA2cHg7IH1cbiAgICAucmVzb3VyY2VzIC5jYXJkcyBsaSBpbWcge1xuICAgICAgd2lkdGg6IDEwMCU7IH1cbiAgICAucmVzb3VyY2VzIC5jYXJkcyBsaSBoNiB7XG4gICAgICBsaW5lLWhlaWdodDogMjNweDtcbiAgICAgIGZvbnQtc2l6ZTogMTJweDtcbiAgICAgIGxldHRlci1zcGFjaW5nOiAwLjEyZW07XG4gICAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xuICAgICAgY29sb3I6ICNCMkJFQ0Q7XG4gICAgICBtYXJnaW4tYm90dG9tOiAwO1xuICAgICAgbWFyZ2luLXRvcDogMTZweDsgfVxuICAgIC5yZXNvdXJjZXMgLmNhcmRzIGxpIGg0IHtcbiAgICAgIGZvbnQtc2l6ZTogMjBweDtcbiAgICAgIG1hcmdpbi10b3A6IDEwcHg7XG4gICAgICBjb2xvcjogIzFBMjMyRjtcbiAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7IH1cbiAgICAucmVzb3VyY2VzIC5jYXJkcyBsaSBwIHtcbiAgICAgIGNvbG9yOiAjNUI3MDhCO1xuICAgICAgbGluZS1oZWlnaHQ6IDIycHg7XG4gICAgICBmb250LXNpemU6IDE0cHg7XG4gICAgICBsZXR0ZXItc3BhY2luZzogLTAuMDJlbTsgfVxuICBAbWVkaWEgKG1heC13aWR0aDogOTkycHgpIHtcbiAgICAucmVzb3VyY2VzIC5jYXJkcyB7XG4gICAgICBtYXJnaW4tbGVmdDogLTEycHg7XG4gICAgICBtYXJnaW4tcmlnaHQ6IC0xMnB4OyB9XG4gICAgLnJlc291cmNlcyAuY2FyZHMgbGkge1xuICAgICAgcGFkZGluZzogMTJweDsgfSB9XG4gIEBtZWRpYSAobWF4LXdpZHRoOiA3NjhweCkge1xuICAgIC5yZXNvdXJjZXMgLmNhcmRzIHtcbiAgICAgIGZsZXgtd3JhcDogd3JhcDsgfVxuICAgIC5yZXNvdXJjZXMgLmNhcmRzIGxpIHtcbiAgICAgIGZsZXg6IDAgMCA1MCU7IH0gfVxuICBAbWVkaWEgKG1heC13aWR0aDogNDgwcHgpIHtcbiAgICAucmVzb3VyY2VzIC5jYXJkcyBsaSB7XG4gICAgICBmbGV4OiAwIDAgMTAwJTsgfVxuICAgIC5yZXNvdXJjZXMgaDUge1xuICAgICAgZGlzcGxheTogbm9uZTsgfSB9XG5cbi5lZS1tYWluIC5mZWF0dXJlcyBsaSBwLFxuLmVlLW1haW4gLmNhcmRzIGxpIHAsXG4ucmVzb3VyY2VzIC5mZWF0dXJlcyBsaSBwLFxuLnJlc291cmNlcyAuY2FyZHMgbGkgcCB7XG4gIGZvbnQtc2l6ZTogMTZweDtcbiAgbGluZS1oZWlnaHQ6IDI5cHg7XG4gIGxldHRlci1zcGFjaW5nOiAtMC4wMWVtO1xuICBjb2xvcjogIzczODQ5QTtcbiAgbWFyZ2luLXRvcDogMDsgfVxuXG4uZWUtbWFpbiAuZmVhdHVyZXMgbGkgaDQsXG4uZWUtbWFpbiAuY2FyZHMgbGkgaDQsXG4ucmVzb3VyY2VzIC5mZWF0dXJlcyBsaSBoNCxcbi5yZXNvdXJjZXMgLmNhcmRzIGxpIGg0IHtcbiAgZm9udC1zaXplOiAyMHB4O1xuICBsaW5lLWhlaWdodDogbm9ybWFsO1xuICBsZXR0ZXItc3BhY2luZzogLTAuMDJlbTtcbiAgY29sb3I6ICMwMjA4MTQ7XG4gIGZvbnQtd2VpZ2h0OiA2MDA7IH1cblxuLnJlc291cmNlcyAuY2FyZHMge1xuICBtYXJnaW4tdG9wOiAwICFpbXBvcnRhbnQ7XG4gIHRleHQtYWxpZ246IGxlZnQ7XG4gIGZsZXgtd3JhcDogd3JhcDsgfVxuICAucmVzb3VyY2VzIC5jYXJkcyAuaW1nLXdyYXBwZXIge1xuICAgIGJvcmRlci1yYWRpdXM6IDZweDsgfVxuICAgIC5yZXNvdXJjZXMgLmNhcmRzIC5pbWctd3JhcHBlciArIGg0IHtcbiAgICAgIG1hcmdpbi10b3A6IDI0cHg7IH1cbiAgQG1lZGlhIChtaW4td2lkdGg6IDEyMjBweCkge1xuICAgIC5yZXNvdXJjZXMgLmNhcmRzIHtcbiAgICAgIG1hcmdpbi1sZWZ0OiAtNDBweDtcbiAgICAgIG1hcmdpbi1yaWdodDogLTQwcHg7IH1cbiAgICAgIC5yZXNvdXJjZXMgLmNhcmRzIGxpIHtcbiAgICAgICAgcGFkZGluZzogNDBweDsgfSB9XG5cbi5yZXNvdXJjZXMgLnJlc291cmNlc19fY3VzdG9tZXItbG9nb3Mge1xuICBkaXNwbGF5OiBmbGV4O1xuICBtYXJnaW46IDI2cHggYXV0byAwO1xuICBwYWRkaW5nOiAwO1xuICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG4gIG1heC13aWR0aDogNzgwcHg7XG4gIHdpZHRoOiAxMDAlOyB9XG4gIC5yZXNvdXJjZXMgLnJlc291cmNlc19fY3VzdG9tZXItbG9nb3MgbGkge1xuICAgIGJhY2tncm91bmQ6IHVybChcIi9pbWcvZW50ZXJwcmlzZS9jdXN0b21lci1sb2dvcy5wbmdcIik7XG4gICAgYmFja2dyb3VuZC1zaXplOiA0MjhweCA0NnB4O1xuICAgIGJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgaGVpZ2h0OiA0NnB4OyB9XG4gIEBtZWRpYSAobWF4LXdpZHRoOiA3NjhweCkge1xuICAgIC5yZXNvdXJjZXMgLnJlc291cmNlc19fY3VzdG9tZXItbG9nb3Mge1xuICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gICAgICBmbGV4LXdyYXA6IHdyYXA7XG4gICAgICBtYXgtd2lkdGg6IDQ2MHB4OyB9XG4gICAgICAucmVzb3VyY2VzIC5yZXNvdXJjZXNfX2N1c3RvbWVyLWxvZ29zIGxpIHtcbiAgICAgICAgbWFyZ2luOiAyMHB4OyB9IH1cbiAgLnJlc291cmNlcyAucmVzb3VyY2VzX19jdXN0b21lci1sb2dvcyAubWFzdGVyY2FyZCB7XG4gICAgd2lkdGg6IDU4cHg7IH1cbiAgLnJlc291cmNlcyAucmVzb3VyY2VzX19jdXN0b21lci1sb2dvcyAubmF0aW9ud2lkZSB7XG4gICAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTU4cHggMDtcbiAgICB3aWR0aDogMzNweDsgfVxuICAucmVzb3VyY2VzIC5yZXNvdXJjZXNfX2N1c3RvbWVyLWxvZ29zIC51bmlxbG8ge1xuICAgIGJhY2tncm91bmQtcG9zaXRpb246IC05MXB4IDA7XG4gICAgd2lkdGg6IDY1cHg7IH1cbiAgLnJlc291cmNlcyAucmVzb3VyY2VzX19jdXN0b21lci1sb2dvcyAuaWJtIHtcbiAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTU2cHggMDtcbiAgICB3aWR0aDogNjRweDsgfVxuICAucmVzb3VyY2VzIC5yZXNvdXJjZXNfX2N1c3RvbWVyLWxvZ29zIC5pbmcge1xuICAgIGJhY2tncm91bmQtcG9zaXRpb246IC0yMjJweCAwO1xuICAgIHdpZHRoOiAxMDNweDsgfVxuICAucmVzb3VyY2VzIC5yZXNvdXJjZXNfX2N1c3RvbWVyLWxvZ29zIC5zYXAge1xuICAgIGJhY2tncm91bmQtcG9zaXRpb246IC0zMjZweCAwO1xuICAgIHdpZHRoOiA1NnB4OyB9XG4gIC5yZXNvdXJjZXMgLnJlc291cmNlc19fY3VzdG9tZXItbG9nb3MgLm5hc2Ege1xuICAgIGJhY2tncm91bmQtcG9zaXRpb246IC0zODBweCAwO1xuICAgIHdpZHRoOiA1MHB4OyB9XG5cbi5iYW5uZXIge1xuICBiYWNrZ3JvdW5kOiAjZmZmO1xuICB0ZXh0LWFsaWduOiBsZWZ0OyB9XG4gIC5iYW5uZXIgLmNvbnRhaW5lciB7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlOyB9XG4gIC5iYW5uZXIgLmVlLWhlcm8ge1xuICAgIG1heC13aWR0aDogNDgwcHg7IH1cbiAgLmJhbm5lciAuZWUtaGVybyBoNCxcbiAgLmJhbm5lciAuZWUtaGVybyBoMSxcbiAgLmJhbm5lciAuZWUtaGVybyBwIHtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgei1pbmRleDogMjsgfVxuXG5AbWVkaWEgKG1heC13aWR0aDogNzY3cHgpIHtcbiAgLmVlLWhlcm8ge1xuICAgIHBhZGRpbmctYm90dG9tOiA4MHB4OyB9IH1cblxuLnNvbHV0aW9uLWhlcm8gaDQsXG4uc29sdXRpb24taGVybyBoMixcbi5zb2x1dGlvbi1oZXJvIHAsXG4uc29sdXRpb24taGVybyBhIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICB6LWluZGV4OiAyOyB9XG5cbi5zb2x1dGlvbi1oZXJvOjphZnRlciB7XG4gIGJhY2tncm91bmQtc2l6ZTogY292ZXI7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgei1pbmRleDogMTtcbiAgY29udGVudDogJyc7XG4gIGRpc3BsYXk6IGJsb2NrOyB9XG5cbi5zb2x1dGlvbi1oZXJvLS1jcm9zcy1wbGF0Zm9ybTo6YWZ0ZXIge1xuICBiYWNrZ3JvdW5kOiB1cmwoXCIvaW1nL3NvbHV0aW9ucy9iZy1jcm9zcy1wbGF0Zm9ybS1oZWFkZXIuc3ZnXCIpO1xuICB3aWR0aDogODUwcHg7XG4gIGhlaWdodDogNDMxcHg7XG4gIHJpZ2h0OiBjYWxjKDUwJSAtIDc5NnB4KTtcbiAgdG9wOiAxMzhweDsgfVxuXG4uc29sdXRpb24taGVyby0tZGVzaWduLXN5c3RlbTo6YWZ0ZXIge1xuICBiYWNrZ3JvdW5kOiB1cmwoXCIvaW1nL3NvbHV0aW9ucy9kZXNpZ24tc3lzdGVtcy1iYW5uZXIuc3ZnXCIpO1xuICB3aWR0aDogNzU1cHg7XG4gIGhlaWdodDogNTkzcHg7XG4gIHJpZ2h0OiAtNzJweDtcbiAgdG9wOiA3NHB4OyB9XG5cbi5zb2x1dGlvbi1oZXJvLS1wd2E6OmFmdGVyIHtcbiAgYmFja2dyb3VuZDogdXJsKFwiL2ltZy9lbnRlcnByaXNlL3B3YS5wbmdcIik7XG4gIHdpZHRoOiA1MTNweDtcbiAgaGVpZ2h0OiA1MjBweDtcbiAgYmFja2dyb3VuZC1zaXplOiA1MTNweCA1MjBweDtcbiAgcmlnaHQ6IDUwcHg7XG4gIHRvcDogNzRweDsgfVxuXG4ucmlnaHQgLnNvbHV0aW9uLWhlcm8tLWRlc2lnbi1zeXN0ZW06OmFmdGVyIHtcbiAgcmlnaHQ6IGF1dG87XG4gIGxlZnQ6IC03MnB4OyB9XG5cbiNzdGlja3ktYmFyIHtcbiAgYm94LXNoYWRvdzogMHB4IDFweCAwcHggI0U5RURGMywgMHB4IC0xcHggMHB4ICNFOUVERjM7XG4gIGJhY2tncm91bmQ6IHdoaXRlO1xuICBwb3NpdGlvbjogc3RpY2t5O1xuICB0b3A6IDA7XG4gIHotaW5kZXg6IDE7IH1cbiAgI3N0aWNreS1iYXIgdWwge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xuICAgIHBhZGRpbmctdG9wOiAxN3B4O1xuICAgIHBhZGRpbmctYm90dG9tOiAxN3B4O1xuICAgIHBhZGRpbmctbGVmdDogMTVweDtcbiAgICBmbGV4LXdyYXA6IHdyYXA7IH1cbiAgICBAbWVkaWEgKG1heC13aWR0aDogOTkxcHgpIHtcbiAgICAgICNzdGlja3ktYmFyIHVsIHtcbiAgICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1hcm91bmQ7IH0gfVxuICAgICNzdGlja3ktYmFyIHVsOjpiZWZvcmUsICNzdGlja3ktYmFyIHVsOjphZnRlciB7XG4gICAgICBkaXNwbGF5OiBub25lOyB9XG4gICNzdGlja3ktYmFyIGxpIHtcbiAgICBsaXN0LXN0eWxlOiBub25lOyB9XG4gICAgI3N0aWNreS1iYXIgbGkuYWN0aXZlIGE6bm90KC5idG4pIHtcbiAgICAgIGNvbG9yOiAjNGE4YmZjOyB9XG4gICNzdGlja3ktYmFyIGEge1xuICAgIHBhZGRpbmc6IDEwcHggMDtcbiAgICBmb250LXNpemU6IDE0cHg7XG4gICAgbGluZS1oZWlnaHQ6IDIycHg7XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgIGxldHRlci1zcGFjaW5nOiAwLjA4ZW07XG4gICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcbiAgICBkaXNwbGF5OiBibG9jazsgfVxuICAgICNzdGlja3ktYmFyIGE6aG92ZXIsICNzdGlja3ktYmFyIGE6YWN0aXZlLCAjc3RpY2t5LWJhciBhOmZvY3VzIHtcbiAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xuICAgICAgdGV4dC1kZWNvcmF0aW9uOiBub25lOyB9XG4gICAgI3N0aWNreS1iYXIgYS5idG4ge1xuICAgICAgcGFkZGluZzogMTFweCAxNHB4IDhweDtcbiAgICAgIG1hcmdpbi1yaWdodDogM3B4O1xuICAgICAgYm9yZGVyLXJhZGl1czogMTBweDtcbiAgICAgIGNvbG9yOiB3aGl0ZTtcbiAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7IH1cbiAgICAgICNzdGlja3ktYmFyIGEuYnRuOmhvdmVyLCAjc3RpY2t5LWJhciBhLmJ0bjphY3RpdmUsICNzdGlja3ktYmFyIGEuYnRuOmZvY3VzIHtcbiAgICAgICAgY29sb3I6IHdoaXRlO1xuICAgICAgICBiYWNrZ3JvdW5kOiAjMzE3YmZjOyB9XG4gICNzdGlja3ktYmFyIC5hbmNob3Ige1xuICAgIGNvbG9yOiAjOTJBMUIzO1xuICAgIGZvbnQtd2VpZ2h0OiA1MDA7IH1cbiAgICAjc3RpY2t5LWJhciAuYW5jaG9yLmFjdGl2ZSwgI3N0aWNreS1iYXIgLmFuY2hvcjpob3ZlciB7XG4gICAgICBjb2xvcjogIzREOERGRjsgfVxuXG5tYWluIHtcbiAgbGV0dGVyLXNwYWNpbmc6IC0wLjAyOGVtO1xuICBjb2xvcjogIzJGM0E0ODsgfVxuICBtYWluIGgyIHtcbiAgICBmb250LXNpemU6IDQwcHg7XG4gICAgbGluZS1oZWlnaHQ6IDUwcHg7XG4gICAgbGV0dGVyLXNwYWNpbmc6IC0wLjAzZW07XG4gICAgY29sb3I6ICMwMjA4MTQ7XG4gICAgbWFyZ2luLWJvdHRvbTogMTVweDsgfVxuICBtYWluIGgzIHtcbiAgICBjb2xvcjogIzQxNEQ1QztcbiAgICBmb250LXdlaWdodDogNjAwO1xuICAgIG1hcmdpbi1ib3R0b206IDRweDsgfVxuICAgIG1haW4gaDMgKyBoMiB7XG4gICAgICBtYXJnaW4tdG9wOiAwOyB9XG4gIG1haW4gcCB7XG4gICAgZm9udC1zaXplOiAyMHB4O1xuICAgIGxpbmUtaGVpZ2h0OiAzMXB4O1xuICAgIG1hcmdpbi1ib3R0b206IDQwcHg7IH1cbiAgbWFpbiB1bCB7XG4gICAgcGFkZGluZy1sZWZ0OiAwOyB9XG4gIG1haW4gbGkge1xuICAgIGZvbnQtc2l6ZTogMTZweDtcbiAgICBsaW5lLWhlaWdodDogMjNweDtcbiAgICBjb2xvcjogIzFBMjMyRjtcbiAgICBtYXJnaW4tYm90dG9tOiAzMnB4O1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICBsaXN0LXN0eWxlOiBub25lO1xuICAgIHBhZGRpbmctbGVmdDogMzBweDtcbiAgICBsZXR0ZXItc3BhY2luZzogLS4wMTZlbTsgfVxuICAgIG1haW4gbGk6OmJlZm9yZSB7XG4gICAgICBjb250ZW50OiB1cmwoJ2RhdGE6aW1hZ2Uvc3ZnK3htbCxcXGEgICAgICAgICA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB2aWV3Qm94PVwiMCAwIDUxMiA1MTJcIj5cXGEgICAgICAgICAgIDxwYXRoIGQ9XCJNMTg2LjMwMSAzMzkuODkzTDk2IDI0OS40NjFsLTMyIDMwLjUwN0wxODYuMzAxIDQwMiA0NDggMTQwLjUwNiA0MTYgMTEwelwiLz5cXGEgICAgICAgICA8L3N2Zz4nKTtcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgIGxlZnQ6IDA7XG4gICAgICB0b3A6IDFweDtcbiAgICAgIGhlaWdodDogMTVweDtcbiAgICAgIHdpZHRoOiAxNXB4O1xuICAgICAgZmlsbDogIzFBMjMyRjtcbiAgICAgIGRpc3BsYXk6IGJsb2NrOyB9XG4gIG1haW4gc2VjdGlvbiB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7IH1cbiAgICBtYWluIHNlY3Rpb24uY29udGFpbmVyOjpiZWZvcmUsIG1haW4gc2VjdGlvbi5jb250YWluZXI6OmFmdGVyIHtcbiAgICAgIGRpc3BsYXk6IG5vbmU7IH1cbiAgICBtYWluIHNlY3Rpb24ucmlnaHQge1xuICAgICAgZmxleC1kaXJlY3Rpb246IHJvdy1yZXZlcnNlOyB9XG4gICAgbWFpbiBzZWN0aW9uLmNlbnRlciB7XG4gICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICBhbGlnbi1pdGVtczogY2VudGVyOyB9XG4gICAgICBtYWluIHNlY3Rpb24uY2VudGVyIC5jb250ZW50IHtcbiAgICAgICAgbWF4LXdpZHRoOiA3OThweDtcbiAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyOyB9XG4gICAgICAgIG1haW4gc2VjdGlvbi5jZW50ZXIgLmNvbnRlbnQgdWwge1xuICAgICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgICAgZmxleC13cmFwOiB3cmFwO1xuICAgICAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjsgfVxuICAgICAgICAgIEBtZWRpYSAobWF4LXdpZHRoOiA5OTFweCkge1xuICAgICAgICAgICAgbWFpbiBzZWN0aW9uLmNlbnRlciAuY29udGVudCB1bCB7XG4gICAgICAgICAgICAgIGp1c3RpZnktY29udGVudDogZmxleC1zdGFydDsgfSB9XG4gICAgICAgIG1haW4gc2VjdGlvbi5jZW50ZXIgLmNvbnRlbnQgbGkge1xuICAgICAgICAgIG1heC13aWR0aDogMzc2cHg7XG4gICAgICAgICAgd2lkdGg6IDEwMCU7IH1cbiAgbWFpbiAuY29udGVudCB7XG4gICAgbWF4LXdpZHRoOiA0ODJweDtcbiAgICBtYXJnaW46IDIzMnB4IDAgMTg0cHg7IH1cbiAgICBAbWVkaWEgKG1heC13aWR0aDogOTkxcHgpIHtcbiAgICAgIG1haW4gLmNvbnRlbnQge1xuICAgICAgICBtYXgtd2lkdGg6IDEwMCU7XG4gICAgICAgIG1hcmdpbjogNjBweCBhdXRvOyB9IH1cbiAgbWFpbiBhc2lkZSB7XG4gICAgYmFja2dyb3VuZDogI0Y2RjhGQjtcbiAgICBwYWRkaW5nLXRvcDogMTE0cHg7XG4gICAgcGFkZGluZy1ib3R0b206IDEyMHB4OyB9XG4gICAgbWFpbiBhc2lkZSBwIHtcbiAgICAgIGNvbG9yOiAjNDE0RDVDOyB9XG4gICAgbWFpbiBhc2lkZSAuY29udGVudCB7XG4gICAgICBtYXgtd2lkdGg6IDQzMnB4O1xuICAgICAgbWFyZ2luOiAwIGF1dG87XG4gICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgICBkaXNwbGF5OiBibG9jazsgfVxuICBtYWluIC5nZXQtc3RhcnRlZCB7XG4gICAgbWF4LXdpZHRoOiA3MDBweDsgfVxuICBtYWluIC5jYXJkcyB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICB0ZXh0LWFsaWduOiBsZWZ0O1xuICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICAgIG1hcmdpbi10b3A6IDM4cHg7IH1cbiAgICBtYWluIC5jYXJkcyAuY2FyZCB7XG4gICAgICBiYWNrZ3JvdW5kOiAjN0NBQkZGO1xuICAgICAgYm9yZGVyLXJhZGl1czogOHB4O1xuICAgICAgcGFkZGluZzogNDBweCA0MHB4IDM0cHg7XG4gICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICAgIGFsaWduLWl0ZW1zOiBmbGV4LXN0YXJ0O1xuICAgICAgbWFyZ2luLXJpZ2h0OiAyNHB4O1xuICAgICAgZmxleDogMCAxIDQ2MHB4O1xuICAgICAgYm9yZGVyLXJhZGl1czogOHB4OyB9XG4gICAgICBtYWluIC5jYXJkcyAuY2FyZDpsYXN0LWNoaWxkIHtcbiAgICAgICAgbWFyZ2luLXJpZ2h0OiAwOyB9XG4gICAgICBtYWluIC5jYXJkcyAuY2FyZDpudGgtY2hpbGQoMikge1xuICAgICAgICBiYWNrZ3JvdW5kOiAjRjg4RDhEOyB9XG4gICAgICAgIG1haW4gLmNhcmRzIC5jYXJkOm50aC1jaGlsZCgyKSAuYnRuIHtcbiAgICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDI0NCwgODQsIDg0LCAwLjUpOyB9XG4gICAgbWFpbiAuY2FyZHMgaDMge1xuICAgICAgZm9udC1zaXplOiAyNHB4O1xuICAgICAgbGluZS1oZWlnaHQ6IG5vcm1hbDtcbiAgICAgIGxldHRlci1zcGFjaW5nOiAtMC4wMmVtO1xuICAgICAgY29sb3I6IHdoaXRlO1xuICAgICAgbWFyZ2luLXRvcDogMDsgfVxuICAgIG1haW4gLmNhcmRzIHAge1xuICAgICAgZm9udC1zaXplOiAxOHB4O1xuICAgICAgbGluZS1oZWlnaHQ6IDI2cHg7XG4gICAgICBsZXR0ZXItc3BhY2luZzogLTAuMDJlbTtcbiAgICAgIGNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNyk7IH1cbiAgICBtYWluIC5jYXJkcyAuYnRuIHtcbiAgICAgIG1hcmdpbi10b3A6IGF1dG87XG4gICAgICBmb250LXNpemU6IDE0cHg7XG4gICAgICBsaW5lLWhlaWdodDogMjJweDtcbiAgICAgIGxldHRlci1zcGFjaW5nOiAwLjA5ZW07XG4gICAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xuICAgICAgcGFkZGluZzogMTBweCAxNHB4O1xuICAgICAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgICAgIGJvcmRlci1yYWRpdXM6IDhweDtcbiAgICAgIGJhY2tncm91bmQ6IHJnYmEoNTYsIDEyOCwgMjU1LCAwLjUpOyB9XG4gICAgICBtYWluIC5jYXJkcyAuYnRuIGlvbi1pY29uIHtcbiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgICAgICBoZWlnaHQ6IDE0cHg7XG4gICAgICAgIHdpZHRoOiAxNHB4O1xuICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogLTJweDsgfVxuICAgIEBtZWRpYSAobWF4LXdpZHRoOiA3NjdweCkge1xuICAgICAgbWFpbiAuY2FyZHMge1xuICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOyB9XG4gICAgICAgIG1haW4gLmNhcmRzIC5jYXJkIHtcbiAgICAgICAgICBmbGV4OiBhdXRvO1xuICAgICAgICAgIG1hcmdpbi1yaWdodDogMDtcbiAgICAgICAgICBtYXJnaW4tdG9wOiAyMHB4OyB9IH1cblxuLnJlc291cmNlcyB7XG4gIG1hcmdpbi10b3A6IDk2cHg7IH1cblxuLnJlc291cmNlcyB7XG4gIHBhZGRpbmctYm90dG9tOiAxMjBweDsgfVxuICBAbWVkaWEgKG1heC13aWR0aDogNzY4cHgpIHtcbiAgICAucmVzb3VyY2VzIHtcbiAgICAgIHBhZGRpbmctYm90dG9tOiA2MHB4OyB9IH1cbiAgLnJlc291cmNlcyAuY2FyZHMge1xuICAgIGxpc3Qtc3R5bGUtdHlwZTogbm9uZTtcbiAgICBtYXJnaW46IDA7XG4gICAgcGFkZGluZzogMDtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIG1hcmdpbi1sZWZ0OiAtMjRweDtcbiAgICBtYXJnaW4tcmlnaHQ6IC0yNHB4OyB9XG4gIC5yZXNvdXJjZXMgaGdyb3VwIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcbiAgICBhbGlnbi1pdGVtczogYmFzZWxpbmU7IH1cbiAgICAucmVzb3VyY2VzIGhncm91cCBoMyB7XG4gICAgICBmb250LXdlaWdodDogNjAwO1xuICAgICAgbGluZS1oZWlnaHQ6IG5vcm1hbDtcbiAgICAgIGZvbnQtc2l6ZTogMjhweDtcbiAgICAgIGxldHRlci1zcGFjaW5nOiAtMC4wMmVtO1xuICAgICAgY29sb3I6ICMxQTIzMkY7XG4gICAgICBtYXJnaW4tYm90dG9tOiAwOyB9XG4gICAgLnJlc291cmNlcyBoZ3JvdXAgaDQge1xuICAgICAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgICAgIGZvbnQtc2l6ZTogMjRweDtcbiAgICAgIGxpbmUtaGVpZ2h0OiBub3JtYWw7XG4gICAgICBsZXR0ZXItc3BhY2luZzogLTAuMDJlbTtcbiAgICAgIGNvbG9yOiAjMUEyMzJGOyB9XG4gICAgLnJlc291cmNlcyBoZ3JvdXAgaDUge1xuICAgICAgZm9udC13ZWlnaHQ6IDcwMDtcbiAgICAgIGxpbmUtaGVpZ2h0OiAxO1xuICAgICAgZm9udC1zaXplOiAxNHB4O1xuICAgICAgbGV0dGVyLXNwYWNpbmc6IDAuMDhlbTtcbiAgICAgIGNvbG9yOiAjMzg4MEZGO1xuICAgICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTsgfVxuICAgIC5yZXNvdXJjZXMgaGdyb3VwIGlvbi1pY29uIHtcbiAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgycHgpOyB9XG4gIC5yZXNvdXJjZXMgLmNhcmRzIGxpIHtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgICBmbGV4OiAwIDAgMzMuMzMlO1xuICAgIHBhZGRpbmc6IDI0cHg7IH1cbiAgICAucmVzb3VyY2VzIC5jYXJkcyBsaSBhIHtcbiAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgd2lkdGg6IDEwMCU7IH1cbiAgICAucmVzb3VyY2VzIC5jYXJkcyBsaSAuaW1nLXdyYXBwZXIge1xuICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICAgIGJvcmRlci1yYWRpdXM6IDZweDsgfVxuICAgIC5yZXNvdXJjZXMgLmNhcmRzIGxpIGltZyB7XG4gICAgICB3aWR0aDogMTAwJTsgfVxuICAgIC5yZXNvdXJjZXMgLmNhcmRzIGxpIGg2IHtcbiAgICAgIGxpbmUtaGVpZ2h0OiAyM3B4O1xuICAgICAgZm9udC1zaXplOiAxMnB4O1xuICAgICAgbGV0dGVyLXNwYWNpbmc6IDAuMTJlbTtcbiAgICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XG4gICAgICBjb2xvcjogI0IyQkVDRDtcbiAgICAgIG1hcmdpbi1ib3R0b206IDA7XG4gICAgICBtYXJnaW4tdG9wOiAxNnB4OyB9XG4gICAgLnJlc291cmNlcyAuY2FyZHMgbGkgaDQge1xuICAgICAgZm9udC1zaXplOiAyMHB4O1xuICAgICAgbWFyZ2luLXRvcDogMTBweDtcbiAgICAgIGNvbG9yOiAjMUEyMzJGO1xuICAgICAgZm9udC13ZWlnaHQ6IDYwMDsgfVxuICAgIC5yZXNvdXJjZXMgLmNhcmRzIGxpIHAge1xuICAgICAgY29sb3I6ICM1QjcwOEI7XG4gICAgICBsaW5lLWhlaWdodDogMjJweDtcbiAgICAgIGZvbnQtc2l6ZTogMTRweDtcbiAgICAgIGxldHRlci1zcGFjaW5nOiAtMC4wMmVtOyB9XG4gIEBtZWRpYSAobWF4LXdpZHRoOiA5OTJweCkge1xuICAgIC5yZXNvdXJjZXMgLmNhcmRzIHtcbiAgICAgIG1hcmdpbi1sZWZ0OiAtMTJweDtcbiAgICAgIG1hcmdpbi1yaWdodDogLTEycHg7IH1cbiAgICAucmVzb3VyY2VzIC5jYXJkcyBsaSB7XG4gICAgICBwYWRkaW5nOiAxMnB4OyB9IH1cbiAgQG1lZGlhIChtYXgtd2lkdGg6IDc2OHB4KSB7XG4gICAgLnJlc291cmNlcyAuY2FyZHMge1xuICAgICAgZmxleC13cmFwOiB3cmFwOyB9XG4gICAgLnJlc291cmNlcyAuY2FyZHMgbGkge1xuICAgICAgZmxleDogMCAwIDUwJTsgfSB9XG4gIEBtZWRpYSAobWF4LXdpZHRoOiA0ODBweCkge1xuICAgIC5yZXNvdXJjZXMgLmNhcmRzIGxpIHtcbiAgICAgIGZsZXg6IDAgMCAxMDAlOyB9XG4gICAgLnJlc291cmNlcyBoNSB7XG4gICAgICBkaXNwbGF5OiBub25lOyB9IH1cblxuLmVlLWhlcm8ge1xuICBwYWRkaW5nLWJvdHRvbTogMDsgfVxuXG4uZWUtbWFpbiBzZWN0aW9uIHtcbiAgbWFyZ2luLWJvdHRvbTogODBweDsgfVxuXG5tYWluIHtcbiAgbWFyZ2luLWJvdHRvbTogMTgwcHg7IH1cbiAgbWFpbiAuY29udGVudCB7XG4gICAgbWFyZ2luOiAxNjNweCAwIDE4NHB4OyB9XG4gIG1haW4gcCB7XG4gICAgbWFyZ2luLWJvdHRvbTogMDsgfVxuXG5AbWVkaWEgKG1heC13aWR0aDogNzY3cHgpIHtcbiAgbWFpbiAuY29udGVudCB7XG4gICAgbWFyZ2luOiA4MHB4IDAgMDsgfVxuICAuc29sdXRpb24taGVybzo6YWZ0ZXIge1xuICAgIGRpc3BsYXk6IG5vbmU7IH0gfVxuIl19 */\n"
  },
  {
    "path": "content/css/pages/enterprise/solutions/toolkit.css",
    "content": ".ee-hero {\n  max-width: 640px;\n  padding-top: 130px;\n  padding-bottom: 160px; }\n  .ee-hero::before, .ee-hero::after {\n    display: none; }\n  .ee-hero h1 {\n    font-size: 52px;\n    line-height: 62px;\n    max-width: 930px;\n    letter-spacing: -0.03em;\n    color: #020814;\n    margin-top: 0;\n    margin-bottom: 16px; }\n  .ee-hero h4 {\n    font-family: \"Roboto Mono\", Menlo, Monaco, Consolas, \"Courier New\", monospace;\n    font-weight: bold;\n    font-size: 13px;\n    line-height: 26px;\n    letter-spacing: 0.14em;\n    text-transform: uppercase;\n    color: #92A1B3;\n    margin-bottom: 29px; }\n  .ee-hero p {\n    font-family: \"Eina\", \"Helvetica Neue\", Helvetica, sans-serif;\n    font-size: 24px;\n    font-weight: 400;\n    line-height: 36px;\n    letter-spacing: -0.04em;\n    color: rgba(39, 50, 63, 0.8); }\n  .ee-hero .btn {\n    padding-left: 24px;\n    padding-right: 20px;\n    padding-top: 18px;\n    padding-bottom: 18px;\n    font-size: 14px;\n    margin-top: 16px;\n    line-height: 20px;\n    letter-spacing: 0.08em;\n    color: white;\n    text-transform: uppercase;\n    font-weight: 700;\n    background: #3880FF;\n    box-shadow: 0px 2px 4px rgba(2, 8, 20, 0.1), 0px 1px 2px rgba(2, 8, 20, 0.08);\n    border-radius: 210px;\n    display: -ms-flexbox;\n    display: flex;\n    -ms-flex-align: center;\n        align-items: center; }\n    .ee-hero .btn::after {\n      background-image: url('data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"white\" viewBox=\"0 0 512 512\"><path d=\"M85 277.375h259.704L225.002 397.077 256 427l171-171L256 85l-29.922 29.924 118.626 119.701H85v42.75z\"/></svg>');\n      background-size: 100%;\n      content: '';\n      height: 20px;\n      width: 20px;\n      display: block;\n      margin-left: 8px;\n      -webkit-transform: translateY(-1px);\n              transform: translateY(-1px); }\n    .ee-hero .btn:hover {\n      background-color: #4f8bf5; }\n  .ee-hero--large h1 {\n    font-size: 62px;\n    line-height: 69px; }\n  .ee-hero--wide {\n    max-width: 960px; }\n  .ee-hero--centered {\n    display: -ms-flexbox;\n    display: flex;\n    -ms-flex-direction: column;\n        flex-direction: column;\n    -ms-flex-pack: center;\n        justify-content: center;\n    -ms-flex-align: center;\n        align-items: center;\n    text-align: center;\n    margin-left: auto;\n    margin-right: auto; }\n  @media (max-width: 767px) {\n    .ee-hero {\n      padding-top: 70px;\n      padding-bottom: 0; }\n      .ee-hero h1 {\n        font-size: 44px;\n        line-height: 52px; }\n      .ee-hero--large h1 {\n        font-size: 50px;\n        line-height: 60px; } }\n  @media (max-width: 480px) {\n    .ee-hero h1 {\n      font-size: 36px;\n      line-height: 44px;\n      margin-bottom: 6px; }\n    .ee-hero--large h1 {\n      font-size: 42px;\n      line-height: 52px; }\n    .ee-hero .btn {\n      margin-top: 8px; } }\n\n.ee-main {\n  margin-top: 0; }\n  .ee-main section {\n    margin-bottom: 200px; }\n  .ee-main .left,\n  .ee-main .right,\n  .ee-main .center {\n    display: -ms-flexbox;\n    display: flex; }\n    .ee-main .left::before, .ee-main .left::after,\n    .ee-main .right::before,\n    .ee-main .right::after,\n    .ee-main .center::before,\n    .ee-main .center::after {\n      display: none; }\n  .ee-main .left .content,\n  .ee-main .right .content {\n    max-width: 480px; }\n    @media (max-width: 767px) {\n      .ee-main .left .content,\n      .ee-main .right .content {\n        max-width: 100%;\n        text-align: center; }\n        .ee-main .left .content li,\n        .ee-main .right .content li {\n          text-align: left; } }\n  .ee-main .left {\n    -ms-flex-direction: row;\n        flex-direction: row; }\n    .ee-main .left .graphics {\n      margin-left: auto; }\n  .ee-main .right {\n    -ms-flex-direction: row-reverse;\n        flex-direction: row-reverse;\n    margin-left: auto; }\n    .ee-main .right .graphics {\n      margin-right: auto; }\n  .ee-main .center {\n    -ms-flex-direction: column;\n        flex-direction: column;\n    -ms-flex-align: center;\n        align-items: center;\n    text-align: center; }\n    .ee-main .center .content {\n      width: 894px;\n      max-width: 100%; }\n  .ee-main .full .content {\n    max-width: 568px; }\n  @media (max-width: 767px) {\n    .ee-main .right,\n    .ee-main .left {\n      -ms-flex-direction: column-reverse;\n          flex-direction: column-reverse;\n      -ms-flex-align: center;\n          align-items: center; }\n      .ee-main .right .graphics,\n      .ee-main .left .graphics {\n        margin-bottom: 24px;\n        margin-left: 0;\n        margin-right: 0; }\n    .ee-main section {\n      margin-bottom: 100px; } }\n  .ee-main .graphics {\n    -ms-flex-pack: end;\n        justify-content: flex-end; }\n    .ee-main .graphics img {\n      width: 100%; }\n  .ee-main h2 {\n    font-size: 44px;\n    line-height: 51px;\n    letter-spacing: -0.03em; }\n    .ee-main h2:first-child {\n      margin-top: 0; }\n  .ee-main .ee-section__title {\n    font-family: \"Roboto Mono\", Menlo, Monaco, Consolas, \"Courier New\", monospace;\n    font-style: normal;\n    font-weight: bold;\n    font-size: 12px;\n    line-height: 23px;\n    letter-spacing: 0.14em;\n    text-transform: uppercase;\n    color: #5B708B;\n    margin-top: 0; }\n  .ee-main .ee-section__cta {\n    display: inline-block;\n    font-size: 18px;\n    font-weight: 500;\n    margin-top: 16px; }\n  .ee-main p {\n    font-size: 20px;\n    line-height: 31px;\n    letter-spacing: -0.02em;\n    color: #5B708B;\n    margin-top: 18px; }\n    .ee-main p.sm {\n      font-size: 16px;\n      line-height: 29px;\n      letter-spacing: -0.01em; }\n  .ee-main ul:not(.frameworks) {\n    margin-top: 54px; }\n  .ee-main .content ul {\n    padding-left: 0; }\n  .ee-main .content li {\n    font-size: 16px;\n    line-height: 23px;\n    letter-spacing: -0.02em;\n    color: #1A232F;\n    margin-bottom: 40px;\n    padding-left: 30px;\n    list-style: none;\n    position: relative; }\n    .ee-main .content li::before {\n      background-image: url(\"/img/enterprise/check.svg\");\n      background-size: 100%;\n      content: '';\n      height: 10px;\n      width: 13px;\n      position: absolute;\n      left: 0;\n      top: 8px; }\n  .ee-main .features {\n    display: -ms-grid;\n    display: grid;\n    -ms-grid-columns: 1fr 1fr 1fr;\n        grid-template-columns: 1fr 1fr 1fr;\n    grid-column-gap: 64px;\n    grid-row-gap: 24px;\n    padding: 0; }\n    .ee-main .features li {\n      list-style: none; }\n    .ee-main .features .icon {\n      margin-bottom: 16px;\n      width: 48px; }\n    @media (max-width: 991px) {\n      .ee-main .features {\n        -ms-grid-columns: 1fr 1fr;\n            grid-template-columns: 1fr 1fr; } }\n    @media (max-width: 500px) {\n      .ee-main .features {\n        -ms-grid-columns: 1fr;\n            grid-template-columns: 1fr; } }\n  .ee-main .cta-card {\n    background: #4a8bfc;\n    border-radius: 12px;\n    padding: 72px 72px 60px;\n    background-size: cover;\n    color: white; }\n    .ee-main .cta-card .ee-section__title,\n    .ee-main .cta-card p {\n      color: #CED6E0; }\n\n#how-to {\n  margin-bottom: 0;\n  position: relative;\n  padding-top: 140px; }\n  #how-to::before {\n    position: absolute;\n    top: 0;\n    width: 100vw;\n    border-top: 1px solid rgba(146, 161, 179, 0.3);\n    content: '';\n    display: block; }\n\n.cards--red-v-blue {\n  display: -ms-flexbox;\n  display: flex;\n  text-align: left;\n  -ms-flex-pack: center;\n      justify-content: center;\n  margin-top: 38px; }\n  .cards--red-v-blue__card {\n    background: #7CABFF;\n    border-radius: 8px;\n    padding: 40px 40px 34px;\n    display: -ms-flexbox;\n    display: flex;\n    -ms-flex-direction: column;\n        flex-direction: column;\n    -ms-flex-align: start;\n        align-items: flex-start;\n    margin-right: 24px;\n    -ms-flex: 0 1 460px;\n        flex: 0 1 460px;\n    border-radius: 8px; }\n    .cards--red-v-blue__card:last-child {\n      margin-right: 0; }\n    .cards--red-v-blue__card:nth-child(2) {\n      background: #F88D8D; }\n      .cards--red-v-blue__card:nth-child(2) .btn {\n        background: rgba(244, 84, 84, 0.5); }\n  .cards--red-v-blue h3 {\n    font-size: 24px;\n    line-height: normal;\n    letter-spacing: -0.02em;\n    color: white;\n    margin-top: 0; }\n  .cards--red-v-blue p {\n    font-size: 18px;\n    line-height: 26px;\n    letter-spacing: -0.02em;\n    color: rgba(255, 255, 255, 0.7);\n    margin-top: 0;\n    margin-bottom: 22px; }\n  .cards--red-v-blue .btn {\n    margin-top: auto;\n    font-size: 14px;\n    line-height: 22px;\n    letter-spacing: 0.09em;\n    text-transform: uppercase;\n    padding: 10px 14px;\n    font-weight: 600;\n    border-radius: 8px;\n    background: rgba(56, 128, 255, 0.5); }\n    .cards--red-v-blue .btn ion-icon {\n      display: inline-block;\n      height: 14px;\n      width: 14px;\n      vertical-align: -2px; }\n  @media (max-width: 767px) {\n    .cards--red-v-blue {\n      -ms-flex-direction: column;\n          flex-direction: column;\n      -ms-flex-align: center;\n          align-items: center; }\n      .cards--red-v-blue__card {\n        -ms-flex: auto;\n            flex: auto;\n        margin-right: 0;\n        margin-top: 20px;\n        max-width: 460px; } }\n\naside {\n  background: linear-gradient(180deg, #F9FAFB 0%, #FFFFFF 100%);\n  margin-top: -60px;\n  padding-top: 200px;\n  padding-bottom: 120px; }\n  aside p {\n    color: #414D5C; }\n  aside .content {\n    max-width: 432px;\n    margin: 0 auto;\n    text-align: center;\n    display: block; }\n\n.ee-get-started {\n  max-width: 700px; }\n  .ee-get-started h3 {\n    color: #414D5C; }\n\n.resources {\n  padding-bottom: 120px; }\n  @media (max-width: 768px) {\n    .resources {\n      padding-bottom: 60px; } }\n  .resources .cards {\n    list-style-type: none;\n    margin: 0;\n    padding: 0;\n    display: -ms-flexbox;\n    display: flex;\n    margin-left: -24px;\n    margin-right: -24px; }\n  .resources hgroup {\n    display: -ms-flexbox;\n    display: flex;\n    -ms-flex-pack: justify;\n        justify-content: space-between;\n    -ms-flex-align: baseline;\n        align-items: baseline; }\n    .resources hgroup h3 {\n      font-weight: 600;\n      line-height: normal;\n      font-size: 28px;\n      letter-spacing: -0.02em;\n      color: #1A232F;\n      margin-bottom: 0; }\n    .resources hgroup h4 {\n      font-weight: 600;\n      font-size: 24px;\n      line-height: normal;\n      letter-spacing: -0.02em;\n      color: #1A232F; }\n    .resources hgroup h5 {\n      font-weight: 700;\n      line-height: 1;\n      font-size: 14px;\n      letter-spacing: 0.08em;\n      color: #3880FF;\n      text-transform: uppercase; }\n    .resources hgroup ion-icon {\n      -webkit-transform: translateY(2px);\n              transform: translateY(2px); }\n  .resources .cards li {\n    display: block;\n    -ms-flex: 0 0 33.33%;\n        flex: 0 0 33.33%;\n    padding: 24px; }\n    .resources .cards li a {\n      display: block;\n      width: 100%; }\n    .resources .cards li .img-wrapper {\n      overflow: hidden;\n      border-radius: 6px; }\n    .resources .cards li img {\n      width: 100%; }\n    .resources .cards li h6 {\n      line-height: 23px;\n      font-size: 12px;\n      letter-spacing: 0.12em;\n      text-transform: uppercase;\n      color: #B2BECD;\n      margin-bottom: 0;\n      margin-top: 16px; }\n    .resources .cards li h4 {\n      font-size: 20px;\n      margin-top: 10px;\n      color: #1A232F;\n      font-weight: 600; }\n    .resources .cards li p {\n      color: #5B708B;\n      line-height: 22px;\n      font-size: 14px;\n      letter-spacing: -0.02em; }\n  @media (max-width: 992px) {\n    .resources .cards {\n      margin-left: -12px;\n      margin-right: -12px; }\n    .resources .cards li {\n      padding: 12px; } }\n  @media (max-width: 768px) {\n    .resources .cards {\n      -ms-flex-wrap: wrap;\n          flex-wrap: wrap; }\n    .resources .cards li {\n      -ms-flex: 0 0 50%;\n          flex: 0 0 50%; } }\n  @media (max-width: 480px) {\n    .resources .cards li {\n      -ms-flex: 0 0 100%;\n          flex: 0 0 100%; }\n    .resources h5 {\n      display: none; } }\n\n.ee-main .features li p,\n.ee-main .cards li p,\n.resources .features li p,\n.resources .cards li p {\n  font-size: 16px;\n  line-height: 29px;\n  letter-spacing: -0.01em;\n  color: #73849A;\n  margin-top: 0; }\n\n.ee-main .features li h4,\n.ee-main .cards li h4,\n.resources .features li h4,\n.resources .cards li h4 {\n  font-size: 20px;\n  line-height: normal;\n  letter-spacing: -0.02em;\n  color: #020814;\n  font-weight: 600; }\n\n.resources .cards {\n  margin-top: 0 !important;\n  text-align: left;\n  -ms-flex-wrap: wrap;\n      flex-wrap: wrap; }\n  .resources .cards .img-wrapper {\n    border-radius: 6px; }\n    .resources .cards .img-wrapper + h4 {\n      margin-top: 24px; }\n  @media (min-width: 1220px) {\n    .resources .cards {\n      margin-left: -40px;\n      margin-right: -40px; }\n      .resources .cards li {\n        padding: 40px; } }\n\n.resources .resources__customer-logos {\n  display: -ms-flexbox;\n  display: flex;\n  margin: 26px auto 0;\n  padding: 0;\n  -ms-flex-pack: justify;\n      justify-content: space-between;\n  max-width: 780px;\n  width: 100%; }\n  .resources .resources__customer-logos li {\n    background: url(\"/img/enterprise/customer-logos.png\");\n    background-size: 428px 46px;\n    background-repeat: no-repeat;\n    display: block;\n    height: 46px; }\n  @media (max-width: 768px) {\n    .resources .resources__customer-logos {\n      -ms-flex-pack: center;\n          justify-content: center;\n      -ms-flex-wrap: wrap;\n          flex-wrap: wrap;\n      max-width: 460px; }\n      .resources .resources__customer-logos li {\n        margin: 20px; } }\n  .resources .resources__customer-logos .mastercard {\n    width: 58px; }\n  .resources .resources__customer-logos .nationwide {\n    background-position: -58px 0;\n    width: 33px; }\n  .resources .resources__customer-logos .uniqlo {\n    background-position: -91px 0;\n    width: 65px; }\n  .resources .resources__customer-logos .ibm {\n    background-position: -156px 0;\n    width: 64px; }\n  .resources .resources__customer-logos .ing {\n    background-position: -222px 0;\n    width: 103px; }\n  .resources .resources__customer-logos .sap {\n    background-position: -326px 0;\n    width: 56px; }\n  .resources .resources__customer-logos .nasa {\n    background-position: -380px 0;\n    width: 50px; }\n\n.banner {\n  background: #fff;\n  text-align: left; }\n  .banner .container {\n    position: relative; }\n  .banner .ee-hero {\n    max-width: 480px; }\n  .banner .ee-hero h4,\n  .banner .ee-hero h1,\n  .banner .ee-hero p {\n    position: relative;\n    z-index: 2; }\n\n@media (max-width: 767px) {\n  .ee-hero {\n    padding-bottom: 80px; } }\n\n.solution-hero h4,\n.solution-hero h2,\n.solution-hero p,\n.solution-hero a {\n  position: relative;\n  z-index: 2; }\n\n.solution-hero::after {\n  background-size: cover;\n  position: absolute;\n  z-index: 1;\n  content: '';\n  display: block; }\n\n.solution-hero--cross-platform::after {\n  background: url(\"/img/solutions/bg-cross-platform-header.svg\");\n  width: 850px;\n  height: 431px;\n  right: calc(50% - 796px);\n  top: 138px; }\n\n.solution-hero--design-system::after {\n  background: url(\"/img/solutions/design-systems-banner.svg\");\n  width: 755px;\n  height: 593px;\n  right: -72px;\n  top: 74px; }\n\n.solution-hero--pwa::after {\n  background: url(\"/img/enterprise/pwa.png\");\n  width: 513px;\n  height: 520px;\n  background-size: 513px 520px;\n  right: 50px;\n  top: 74px; }\n\n.right .solution-hero--design-system::after {\n  right: auto;\n  left: -72px; }\n\n#sticky-bar {\n  box-shadow: 0px 1px 0px #E9EDF3, 0px -1px 0px #E9EDF3;\n  background: white;\n  position: -webkit-sticky;\n  position: sticky;\n  top: 0;\n  z-index: 1; }\n  #sticky-bar ul {\n    display: -ms-flexbox;\n    display: flex;\n    -ms-flex-pack: justify;\n        justify-content: space-between;\n    padding-top: 17px;\n    padding-bottom: 17px;\n    padding-left: 15px;\n    -ms-flex-wrap: wrap;\n        flex-wrap: wrap; }\n    @media (max-width: 991px) {\n      #sticky-bar ul {\n        -ms-flex-pack: distribute;\n            justify-content: space-around; } }\n    #sticky-bar ul::before, #sticky-bar ul::after {\n      display: none; }\n  #sticky-bar li {\n    list-style: none; }\n    #sticky-bar li.active a:not(.btn) {\n      color: #4a8bfc; }\n  #sticky-bar a {\n    padding: 10px 0;\n    font-size: 14px;\n    line-height: 22px;\n    text-align: center;\n    letter-spacing: 0.08em;\n    text-transform: uppercase;\n    display: block; }\n    #sticky-bar a:hover, #sticky-bar a:active, #sticky-bar a:focus {\n      background: transparent;\n      text-decoration: none; }\n    #sticky-bar a.btn {\n      padding: 11px 14px 8px;\n      margin-right: 3px;\n      border-radius: 10px;\n      color: white;\n      font-weight: 600; }\n      #sticky-bar a.btn:hover, #sticky-bar a.btn:active, #sticky-bar a.btn:focus {\n        color: white;\n        background: #317bfc; }\n  #sticky-bar .anchor {\n    color: #92A1B3;\n    font-weight: 500; }\n    #sticky-bar .anchor.active, #sticky-bar .anchor:hover {\n      color: #4D8DFF; }\n\nmain {\n  letter-spacing: -0.028em;\n  color: #2F3A48; }\n  main h2 {\n    font-size: 40px;\n    line-height: 50px;\n    letter-spacing: -0.03em;\n    color: #020814;\n    margin-bottom: 15px; }\n  main h3 {\n    color: #414D5C;\n    font-weight: 600;\n    margin-bottom: 4px; }\n    main h3 + h2 {\n      margin-top: 0; }\n  main p {\n    font-size: 20px;\n    line-height: 31px;\n    margin-bottom: 40px; }\n  main ul {\n    padding-left: 0; }\n  main li {\n    font-size: 16px;\n    line-height: 23px;\n    color: #1A232F;\n    margin-bottom: 32px;\n    position: relative;\n    list-style: none;\n    padding-left: 30px;\n    letter-spacing: -.016em; }\n    main li::before {\n      content: url('data:image/svg+xml,\\a         <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\">\\a           <path d=\"M186.301 339.893L96 249.461l-32 30.507L186.301 402 448 140.506 416 110z\"/>\\a         </svg>');\n      position: absolute;\n      left: 0;\n      top: 1px;\n      height: 15px;\n      width: 15px;\n      fill: #1A232F;\n      display: block; }\n  main section {\n    display: -ms-flexbox;\n    display: flex;\n    position: relative; }\n    main section.container::before, main section.container::after {\n      display: none; }\n    main section.right {\n      -ms-flex-direction: row-reverse;\n          flex-direction: row-reverse; }\n    main section.center {\n      -ms-flex-pack: center;\n          justify-content: center;\n      -ms-flex-direction: column;\n          flex-direction: column;\n      -ms-flex-align: center;\n          align-items: center; }\n      main section.center .content {\n        max-width: 798px;\n        text-align: center; }\n        main section.center .content ul {\n          display: -ms-flexbox;\n          display: flex;\n          -ms-flex-wrap: wrap;\n              flex-wrap: wrap;\n          -ms-flex-pack: justify;\n              justify-content: space-between; }\n          @media (max-width: 991px) {\n            main section.center .content ul {\n              -ms-flex-pack: start;\n                  justify-content: flex-start; } }\n        main section.center .content li {\n          max-width: 376px;\n          width: 100%; }\n  main .content {\n    max-width: 482px;\n    margin: 232px 0 184px; }\n    @media (max-width: 991px) {\n      main .content {\n        max-width: 100%;\n        margin: 60px auto; } }\n  main aside {\n    background: #F6F8FB;\n    padding-top: 114px;\n    padding-bottom: 120px; }\n    main aside p {\n      color: #414D5C; }\n    main aside .content {\n      max-width: 432px;\n      margin: 0 auto;\n      text-align: center;\n      display: block; }\n  main .get-started {\n    max-width: 700px; }\n  main .cards {\n    display: -ms-flexbox;\n    display: flex;\n    text-align: left;\n    -ms-flex-pack: center;\n        justify-content: center;\n    margin-top: 38px; }\n    main .cards .card {\n      background: #7CABFF;\n      border-radius: 8px;\n      padding: 40px 40px 34px;\n      display: -ms-flexbox;\n      display: flex;\n      -ms-flex-direction: column;\n          flex-direction: column;\n      -ms-flex-align: start;\n          align-items: flex-start;\n      margin-right: 24px;\n      -ms-flex: 0 1 460px;\n          flex: 0 1 460px;\n      border-radius: 8px; }\n      main .cards .card:last-child {\n        margin-right: 0; }\n      main .cards .card:nth-child(2) {\n        background: #F88D8D; }\n        main .cards .card:nth-child(2) .btn {\n          background: rgba(244, 84, 84, 0.5); }\n    main .cards h3 {\n      font-size: 24px;\n      line-height: normal;\n      letter-spacing: -0.02em;\n      color: white;\n      margin-top: 0; }\n    main .cards p {\n      font-size: 18px;\n      line-height: 26px;\n      letter-spacing: -0.02em;\n      color: rgba(255, 255, 255, 0.7); }\n    main .cards .btn {\n      margin-top: auto;\n      font-size: 14px;\n      line-height: 22px;\n      letter-spacing: 0.09em;\n      text-transform: uppercase;\n      padding: 10px 14px;\n      font-weight: 600;\n      border-radius: 8px;\n      background: rgba(56, 128, 255, 0.5); }\n      main .cards .btn ion-icon {\n        display: inline-block;\n        height: 14px;\n        width: 14px;\n        vertical-align: -2px; }\n    @media (max-width: 767px) {\n      main .cards {\n        -ms-flex-direction: column;\n            flex-direction: column; }\n        main .cards .card {\n          -ms-flex: auto;\n              flex: auto;\n          margin-right: 0;\n          margin-top: 20px; } }\n\n.resources {\n  margin-top: 96px; }\n\n.resources {\n  padding-bottom: 120px; }\n  @media (max-width: 768px) {\n    .resources {\n      padding-bottom: 60px; } }\n  .resources .cards {\n    list-style-type: none;\n    margin: 0;\n    padding: 0;\n    display: -ms-flexbox;\n    display: flex;\n    margin-left: -24px;\n    margin-right: -24px; }\n  .resources hgroup {\n    display: -ms-flexbox;\n    display: flex;\n    -ms-flex-pack: justify;\n        justify-content: space-between;\n    -ms-flex-align: baseline;\n        align-items: baseline; }\n    .resources hgroup h3 {\n      font-weight: 600;\n      line-height: normal;\n      font-size: 28px;\n      letter-spacing: -0.02em;\n      color: #1A232F;\n      margin-bottom: 0; }\n    .resources hgroup h4 {\n      font-weight: 600;\n      font-size: 24px;\n      line-height: normal;\n      letter-spacing: -0.02em;\n      color: #1A232F; }\n    .resources hgroup h5 {\n      font-weight: 700;\n      line-height: 1;\n      font-size: 14px;\n      letter-spacing: 0.08em;\n      color: #3880FF;\n      text-transform: uppercase; }\n    .resources hgroup ion-icon {\n      -webkit-transform: translateY(2px);\n              transform: translateY(2px); }\n  .resources .cards li {\n    display: block;\n    -ms-flex: 0 0 33.33%;\n        flex: 0 0 33.33%;\n    padding: 24px; }\n    .resources .cards li a {\n      display: block;\n      width: 100%; }\n    .resources .cards li .img-wrapper {\n      overflow: hidden;\n      border-radius: 6px; }\n    .resources .cards li img {\n      width: 100%; }\n    .resources .cards li h6 {\n      line-height: 23px;\n      font-size: 12px;\n      letter-spacing: 0.12em;\n      text-transform: uppercase;\n      color: #B2BECD;\n      margin-bottom: 0;\n      margin-top: 16px; }\n    .resources .cards li h4 {\n      font-size: 20px;\n      margin-top: 10px;\n      color: #1A232F;\n      font-weight: 600; }\n    .resources .cards li p {\n      color: #5B708B;\n      line-height: 22px;\n      font-size: 14px;\n      letter-spacing: -0.02em; }\n  @media (max-width: 992px) {\n    .resources .cards {\n      margin-left: -12px;\n      margin-right: -12px; }\n    .resources .cards li {\n      padding: 12px; } }\n  @media (max-width: 768px) {\n    .resources .cards {\n      -ms-flex-wrap: wrap;\n          flex-wrap: wrap; }\n    .resources .cards li {\n      -ms-flex: 0 0 50%;\n          flex: 0 0 50%; } }\n  @media (max-width: 480px) {\n    .resources .cards li {\n      -ms-flex: 0 0 100%;\n          flex: 0 0 100%; }\n    .resources h5 {\n      display: none; } }\n\n.banner hgroup {\n  padding-top: 75px;\n  max-width: 700px;\n  text-align: center; }\n\n.banner img {\n  max-width: 100%; }\n\n.banner p {\n  margin-top: 61px;\n  font-size: 32px;\n  font-weight: 600;\n  letter-spacing: -.008em;\n  color: #0f151f; }\n\n.banner ul {\n  max-width: 978px;\n  padding-top: 51px;\n  padding-bottom: 95px;\n  list-style: none;\n  text-align: left;\n  display: -ms-grid;\n  display: grid;\n  -ms-grid-columns: auto auto auto auto;\n      grid-template-columns: auto auto auto auto; }\n  @media (max-width: 991px) {\n    .banner ul {\n      display: -ms-flexbox;\n      display: flex;\n      -ms-flex-wrap: wrap;\n          flex-wrap: wrap;\n      -ms-flex-pack: distribute;\n          justify-content: space-around; }\n      .banner ul li {\n        -ms-flex: 0 0 234px;\n            flex: 0 0 234px; } }\n  .banner ul::before, .banner ul::after {\n    content: none; }\n\n.banner li {\n  padding: 13px 0 13px 28px;\n  position: relative;\n  font-weight: 600;\n  font-size: 16px;\n  letter-spacing: -.02em; }\n  .banner li::before {\n    font-family: 'Ionicons';\n    content: '\\f2bc';\n    color: #5c77ff;\n    position: absolute;\n    left: 0;\n    top: 10px;\n    font-size: 18px;\n    font-weight: 400; }\n\nmain {\n  font-family: \"Inter\", \"Inter UI\", Helvetica, Arial, sans-serif;\n  max-width: 674px;\n  margin-bottom: 118px; }\n  main h1,\n  main h2,\n  main h3 {\n    font-family: \"Eina\", \"Helvetica Neue\", Helvetica, sans-serif;\n    font-weight: 700;\n    letter-spacing: -.008em;\n    color: #0f1620; }\n  main h2 {\n    margin-bottom: 5px; }\n  main h3 {\n    font-size: 18px;\n    margin-top: 56px;\n    margin-bottom: 16px; }\n  main img {\n    max-width: 100%;\n    margin-top: 1px; }\n  main p {\n    letter-spacing: -.01em;\n    margin-bottom: 22px;\n    line-height: 2em; }\n    main p code {\n      color: #7058fd;\n      background: #eff2f7;\n      padding: 2px 8px;\n      letter-spacing: .02em; }\n  main ol {\n    padding-left: 42px;\n    margin-top: 25px;\n    margin-bottom: 24px; }\n    main ol li {\n      padding: 4px 0px; }\n  main hgroup {\n    margin-top: 144px;\n    margin-bottom: 52px; }\n    main hgroup:first-child {\n      margin-top: 108px;\n      margin-bottom: 59px; }\n    main hgroup p {\n      line-height: 1.64em;\n      font-size: 18px;\n      letter-spacing: -.03em; }\n  main + footer {\n    border-top: 1px solid #eee; }\n\n.steps {\n  list-style: none;\n  padding-left: 0;\n  margin-bottom: 65px; }\n  .steps li {\n    margin-bottom: 62px; }\n  .steps p {\n    letter-spacing: -.01em;\n    margin-bottom: 17px; }\n  .steps strong {\n    font-weight: 500;\n    margin-right: 29px; }\n  .steps code {\n    background: none; }\n  .steps pre {\n    border: none;\n    background: #f5f7fa;\n    font-size: 12px;\n    font-weight: 500;\n    padding: 15px 14px;\n    position: relative; }\n    .steps pre .hljs {\n      background: none; }\n    .steps pre .hljs-built_in {\n      color: inherit; }\n    .steps pre::before {\n      position: absolute;\n      content: 'shell';\n      text-transform: uppercase;\n      font-size: 11px;\n      font-weight: 500;\n      top: .2em;\n      right: 1em;\n      color: #cdd4de; }\n\n/*# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInRvb2xraXQuY3NzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0VBQ0UsaUJBQWlCO0VBQ2pCLG1CQUFtQjtFQUNuQixzQkFBc0IsRUFBRTtFQUN4QjtJQUNFLGNBQWMsRUFBRTtFQUNsQjtJQUNFLGdCQUFnQjtJQUNoQixrQkFBa0I7SUFDbEIsaUJBQWlCO0lBQ2pCLHdCQUF3QjtJQUN4QixlQUFlO0lBQ2YsY0FBYztJQUNkLG9CQUFvQixFQUFFO0VBQ3hCO0lBQ0UsOEVBQThFO0lBQzlFLGtCQUFrQjtJQUNsQixnQkFBZ0I7SUFDaEIsa0JBQWtCO0lBQ2xCLHVCQUF1QjtJQUN2QiwwQkFBMEI7SUFDMUIsZUFBZTtJQUNmLG9CQUFvQixFQUFFO0VBQ3hCO0lBQ0UsNkRBQTZEO0lBQzdELGdCQUFnQjtJQUNoQixpQkFBaUI7SUFDakIsa0JBQWtCO0lBQ2xCLHdCQUF3QjtJQUN4Qiw2QkFBNkIsRUFBRTtFQUNqQztJQUNFLG1CQUFtQjtJQUNuQixvQkFBb0I7SUFDcEIsa0JBQWtCO0lBQ2xCLHFCQUFxQjtJQUNyQixnQkFBZ0I7SUFDaEIsaUJBQWlCO0lBQ2pCLGtCQUFrQjtJQUNsQix1QkFBdUI7SUFDdkIsYUFBYTtJQUNiLDBCQUEwQjtJQUMxQixpQkFBaUI7SUFDakIsb0JBQW9CO0lBQ3BCLDhFQUE4RTtJQUM5RSxxQkFBcUI7SUFDckIscUJBQWM7SUFBZCxjQUFjO0lBQ2QsdUJBQW9CO1FBQXBCLG9CQUFvQixFQUFFO0lBQ3RCO01BQ0Usa1BBQWtQO01BQ2xQLHNCQUFzQjtNQUN0QixZQUFZO01BQ1osYUFBYTtNQUNiLFlBQVk7TUFDWixlQUFlO01BQ2YsaUJBQWlCO01BQ2pCLG9DQUE0QjtjQUE1Qiw0QkFBNEIsRUFBRTtJQUNoQztNQUNFLDBCQUEwQixFQUFFO0VBQ2hDO0lBQ0UsZ0JBQWdCO0lBQ2hCLGtCQUFrQixFQUFFO0VBQ3RCO0lBQ0UsaUJBQWlCLEVBQUU7RUFDckI7SUFDRSxxQkFBYztJQUFkLGNBQWM7SUFDZCwyQkFBdUI7UUFBdkIsdUJBQXVCO0lBQ3ZCLHNCQUF3QjtRQUF4Qix3QkFBd0I7SUFDeEIsdUJBQW9CO1FBQXBCLG9CQUFvQjtJQUNwQixtQkFBbUI7SUFDbkIsa0JBQWtCO0lBQ2xCLG1CQUFtQixFQUFFO0VBQ3ZCO0lBQ0U7TUFDRSxrQkFBa0I7TUFDbEIsa0JBQWtCLEVBQUU7TUFDcEI7UUFDRSxnQkFBZ0I7UUFDaEIsa0JBQWtCLEVBQUU7TUFDdEI7UUFDRSxnQkFBZ0I7UUFDaEIsa0JBQWtCLEVBQUUsRUFBRTtFQUM1QjtJQUNFO01BQ0UsZ0JBQWdCO01BQ2hCLGtCQUFrQjtNQUNsQixtQkFBbUIsRUFBRTtJQUN2QjtNQUNFLGdCQUFnQjtNQUNoQixrQkFBa0IsRUFBRTtJQUN0QjtNQUNFLGdCQUFnQixFQUFFLEVBQUU7O0FBRTFCO0VBQ0UsY0FBYyxFQUFFO0VBQ2hCO0lBQ0UscUJBQXFCLEVBQUU7RUFDekI7OztJQUdFLHFCQUFjO0lBQWQsY0FBYyxFQUFFO0lBQ2hCOzs7OztNQUtFLGNBQWMsRUFBRTtFQUNwQjs7SUFFRSxpQkFBaUIsRUFBRTtJQUNuQjtNQUNFOztRQUVFLGdCQUFnQjtRQUNoQixtQkFBbUIsRUFBRTtRQUNyQjs7VUFFRSxpQkFBaUIsRUFBRSxFQUFFO0VBQzdCO0lBQ0Usd0JBQW9CO1FBQXBCLG9CQUFvQixFQUFFO0lBQ3RCO01BQ0Usa0JBQWtCLEVBQUU7RUFDeEI7SUFDRSxnQ0FBNEI7UUFBNUIsNEJBQTRCO0lBQzVCLGtCQUFrQixFQUFFO0lBQ3BCO01BQ0UsbUJBQW1CLEVBQUU7RUFDekI7SUFDRSwyQkFBdUI7UUFBdkIsdUJBQXVCO0lBQ3ZCLHVCQUFvQjtRQUFwQixvQkFBb0I7SUFDcEIsbUJBQW1CLEVBQUU7SUFDckI7TUFDRSxhQUFhO01BQ2IsZ0JBQWdCLEVBQUU7RUFDdEI7SUFDRSxpQkFBaUIsRUFBRTtFQUNyQjtJQUNFOztNQUVFLG1DQUErQjtVQUEvQiwrQkFBK0I7TUFDL0IsdUJBQW9CO1VBQXBCLG9CQUFvQixFQUFFO01BQ3RCOztRQUVFLG9CQUFvQjtRQUNwQixlQUFlO1FBQ2YsZ0JBQWdCLEVBQUU7SUFDdEI7TUFDRSxxQkFBcUIsRUFBRSxFQUFFO0VBQzdCO0lBQ0UsbUJBQTBCO1FBQTFCLDBCQUEwQixFQUFFO0lBQzVCO01BQ0UsWUFBWSxFQUFFO0VBQ2xCO0lBQ0UsZ0JBQWdCO0lBQ2hCLGtCQUFrQjtJQUNsQix3QkFBd0IsRUFBRTtJQUMxQjtNQUNFLGNBQWMsRUFBRTtFQUNwQjtJQUNFLDhFQUE4RTtJQUM5RSxtQkFBbUI7SUFDbkIsa0JBQWtCO0lBQ2xCLGdCQUFnQjtJQUNoQixrQkFBa0I7SUFDbEIsdUJBQXVCO0lBQ3ZCLDBCQUEwQjtJQUMxQixlQUFlO0lBQ2YsY0FBYyxFQUFFO0VBQ2xCO0lBQ0Usc0JBQXNCO0lBQ3RCLGdCQUFnQjtJQUNoQixpQkFBaUI7SUFDakIsaUJBQWlCLEVBQUU7RUFDckI7SUFDRSxnQkFBZ0I7SUFDaEIsa0JBQWtCO0lBQ2xCLHdCQUF3QjtJQUN4QixlQUFlO0lBQ2YsaUJBQWlCLEVBQUU7SUFDbkI7TUFDRSxnQkFBZ0I7TUFDaEIsa0JBQWtCO01BQ2xCLHdCQUF3QixFQUFFO0VBQzlCO0lBQ0UsaUJBQWlCLEVBQUU7RUFDckI7SUFDRSxnQkFBZ0IsRUFBRTtFQUNwQjtJQUNFLGdCQUFnQjtJQUNoQixrQkFBa0I7SUFDbEIsd0JBQXdCO0lBQ3hCLGVBQWU7SUFDZixvQkFBb0I7SUFDcEIsbUJBQW1CO0lBQ25CLGlCQUFpQjtJQUNqQixtQkFBbUIsRUFBRTtJQUNyQjtNQUNFLG1EQUFtRDtNQUNuRCxzQkFBc0I7TUFDdEIsWUFBWTtNQUNaLGFBQWE7TUFDYixZQUFZO01BQ1osbUJBQW1CO01BQ25CLFFBQVE7TUFDUixTQUFTLEVBQUU7RUFDZjtJQUNFLGtCQUFjO0lBQWQsY0FBYztJQUNkLDhCQUFtQztRQUFuQyxtQ0FBbUM7SUFDbkMsc0JBQXNCO0lBQ3RCLG1CQUFtQjtJQUNuQixXQUFXLEVBQUU7SUFDYjtNQUNFLGlCQUFpQixFQUFFO0lBQ3JCO01BQ0Usb0JBQW9CO01BQ3BCLFlBQVksRUFBRTtJQUNoQjtNQUNFO1FBQ0UsMEJBQStCO1lBQS9CLCtCQUErQixFQUFFLEVBQUU7SUFDdkM7TUFDRTtRQUNFLHNCQUEyQjtZQUEzQiwyQkFBMkIsRUFBRSxFQUFFO0VBQ3JDO0lBQ0Usb0JBQW9CO0lBQ3BCLG9CQUFvQjtJQUNwQix3QkFBd0I7SUFDeEIsdUJBQXVCO0lBQ3ZCLGFBQWEsRUFBRTtJQUNmOztNQUVFLGVBQWUsRUFBRTs7QUFFdkI7RUFDRSxpQkFBaUI7RUFDakIsbUJBQW1CO0VBQ25CLG1CQUFtQixFQUFFO0VBQ3JCO0lBQ0UsbUJBQW1CO0lBQ25CLE9BQU87SUFDUCxhQUFhO0lBQ2IsK0NBQStDO0lBQy9DLFlBQVk7SUFDWixlQUFlLEVBQUU7O0FBRXJCO0VBQ0UscUJBQWM7RUFBZCxjQUFjO0VBQ2QsaUJBQWlCO0VBQ2pCLHNCQUF3QjtNQUF4Qix3QkFBd0I7RUFDeEIsaUJBQWlCLEVBQUU7RUFDbkI7SUFDRSxvQkFBb0I7SUFDcEIsbUJBQW1CO0lBQ25CLHdCQUF3QjtJQUN4QixxQkFBYztJQUFkLGNBQWM7SUFDZCwyQkFBdUI7UUFBdkIsdUJBQXVCO0lBQ3ZCLHNCQUF3QjtRQUF4Qix3QkFBd0I7SUFDeEIsbUJBQW1CO0lBQ25CLG9CQUFnQjtRQUFoQixnQkFBZ0I7SUFDaEIsbUJBQW1CLEVBQUU7SUFDckI7TUFDRSxnQkFBZ0IsRUFBRTtJQUNwQjtNQUNFLG9CQUFvQixFQUFFO01BQ3RCO1FBQ0UsbUNBQW1DLEVBQUU7RUFDM0M7SUFDRSxnQkFBZ0I7SUFDaEIsb0JBQW9CO0lBQ3BCLHdCQUF3QjtJQUN4QixhQUFhO0lBQ2IsY0FBYyxFQUFFO0VBQ2xCO0lBQ0UsZ0JBQWdCO0lBQ2hCLGtCQUFrQjtJQUNsQix3QkFBd0I7SUFDeEIsZ0NBQWdDO0lBQ2hDLGNBQWM7SUFDZCxvQkFBb0IsRUFBRTtFQUN4QjtJQUNFLGlCQUFpQjtJQUNqQixnQkFBZ0I7SUFDaEIsa0JBQWtCO0lBQ2xCLHVCQUF1QjtJQUN2QiwwQkFBMEI7SUFDMUIsbUJBQW1CO0lBQ25CLGlCQUFpQjtJQUNqQixtQkFBbUI7SUFDbkIsb0NBQW9DLEVBQUU7SUFDdEM7TUFDRSxzQkFBc0I7TUFDdEIsYUFBYTtNQUNiLFlBQVk7TUFDWixxQkFBcUIsRUFBRTtFQUMzQjtJQUNFO01BQ0UsMkJBQXVCO1VBQXZCLHVCQUF1QjtNQUN2Qix1QkFBb0I7VUFBcEIsb0JBQW9CLEVBQUU7TUFDdEI7UUFDRSxlQUFXO1lBQVgsV0FBVztRQUNYLGdCQUFnQjtRQUNoQixpQkFBaUI7UUFDakIsaUJBQWlCLEVBQUUsRUFBRTs7QUFFN0I7RUFDRSw4REFBOEQ7RUFDOUQsa0JBQWtCO0VBQ2xCLG1CQUFtQjtFQUNuQixzQkFBc0IsRUFBRTtFQUN4QjtJQUNFLGVBQWUsRUFBRTtFQUNuQjtJQUNFLGlCQUFpQjtJQUNqQixlQUFlO0lBQ2YsbUJBQW1CO0lBQ25CLGVBQWUsRUFBRTs7QUFFckI7RUFDRSxpQkFBaUIsRUFBRTtFQUNuQjtJQUNFLGVBQWUsRUFBRTs7QUFFckI7RUFDRSxzQkFBc0IsRUFBRTtFQUN4QjtJQUNFO01BQ0UscUJBQXFCLEVBQUUsRUFBRTtFQUM3QjtJQUNFLHNCQUFzQjtJQUN0QixVQUFVO0lBQ1YsV0FBVztJQUNYLHFCQUFjO0lBQWQsY0FBYztJQUNkLG1CQUFtQjtJQUNuQixvQkFBb0IsRUFBRTtFQUN4QjtJQUNFLHFCQUFjO0lBQWQsY0FBYztJQUNkLHVCQUErQjtRQUEvQiwrQkFBK0I7SUFDL0IseUJBQXNCO1FBQXRCLHNCQUFzQixFQUFFO0lBQ3hCO01BQ0UsaUJBQWlCO01BQ2pCLG9CQUFvQjtNQUNwQixnQkFBZ0I7TUFDaEIsd0JBQXdCO01BQ3hCLGVBQWU7TUFDZixpQkFBaUIsRUFBRTtJQUNyQjtNQUNFLGlCQUFpQjtNQUNqQixnQkFBZ0I7TUFDaEIsb0JBQW9CO01BQ3BCLHdCQUF3QjtNQUN4QixlQUFlLEVBQUU7SUFDbkI7TUFDRSxpQkFBaUI7TUFDakIsZUFBZTtNQUNmLGdCQUFnQjtNQUNoQix1QkFBdUI7TUFDdkIsZUFBZTtNQUNmLDBCQUEwQixFQUFFO0lBQzlCO01BQ0UsbUNBQTJCO2NBQTNCLDJCQUEyQixFQUFFO0VBQ2pDO0lBQ0UsZUFBZTtJQUNmLHFCQUFpQjtRQUFqQixpQkFBaUI7SUFDakIsY0FBYyxFQUFFO0lBQ2hCO01BQ0UsZUFBZTtNQUNmLFlBQVksRUFBRTtJQUNoQjtNQUNFLGlCQUFpQjtNQUNqQixtQkFBbUIsRUFBRTtJQUN2QjtNQUNFLFlBQVksRUFBRTtJQUNoQjtNQUNFLGtCQUFrQjtNQUNsQixnQkFBZ0I7TUFDaEIsdUJBQXVCO01BQ3ZCLDBCQUEwQjtNQUMxQixlQUFlO01BQ2YsaUJBQWlCO01BQ2pCLGlCQUFpQixFQUFFO0lBQ3JCO01BQ0UsZ0JBQWdCO01BQ2hCLGlCQUFpQjtNQUNqQixlQUFlO01BQ2YsaUJBQWlCLEVBQUU7SUFDckI7TUFDRSxlQUFlO01BQ2Ysa0JBQWtCO01BQ2xCLGdCQUFnQjtNQUNoQix3QkFBd0IsRUFBRTtFQUM5QjtJQUNFO01BQ0UsbUJBQW1CO01BQ25CLG9CQUFvQixFQUFFO0lBQ3hCO01BQ0UsY0FBYyxFQUFFLEVBQUU7RUFDdEI7SUFDRTtNQUNFLG9CQUFnQjtVQUFoQixnQkFBZ0IsRUFBRTtJQUNwQjtNQUNFLGtCQUFjO1VBQWQsY0FBYyxFQUFFLEVBQUU7RUFDdEI7SUFDRTtNQUNFLG1CQUFlO1VBQWYsZUFBZSxFQUFFO0lBQ25CO01BQ0UsY0FBYyxFQUFFLEVBQUU7O0FBRXhCOzs7O0VBSUUsZ0JBQWdCO0VBQ2hCLGtCQUFrQjtFQUNsQix3QkFBd0I7RUFDeEIsZUFBZTtFQUNmLGNBQWMsRUFBRTs7QUFFbEI7Ozs7RUFJRSxnQkFBZ0I7RUFDaEIsb0JBQW9CO0VBQ3BCLHdCQUF3QjtFQUN4QixlQUFlO0VBQ2YsaUJBQWlCLEVBQUU7O0FBRXJCO0VBQ0UseUJBQXlCO0VBQ3pCLGlCQUFpQjtFQUNqQixvQkFBZ0I7TUFBaEIsZ0JBQWdCLEVBQUU7RUFDbEI7SUFDRSxtQkFBbUIsRUFBRTtJQUNyQjtNQUNFLGlCQUFpQixFQUFFO0VBQ3ZCO0lBQ0U7TUFDRSxtQkFBbUI7TUFDbkIsb0JBQW9CLEVBQUU7TUFDdEI7UUFDRSxjQUFjLEVBQUUsRUFBRTs7QUFFMUI7RUFDRSxxQkFBYztFQUFkLGNBQWM7RUFDZCxvQkFBb0I7RUFDcEIsV0FBVztFQUNYLHVCQUErQjtNQUEvQiwrQkFBK0I7RUFDL0IsaUJBQWlCO0VBQ2pCLFlBQVksRUFBRTtFQUNkO0lBQ0Usc0RBQXNEO0lBQ3RELDRCQUE0QjtJQUM1Qiw2QkFBNkI7SUFDN0IsZUFBZTtJQUNmLGFBQWEsRUFBRTtFQUNqQjtJQUNFO01BQ0Usc0JBQXdCO1VBQXhCLHdCQUF3QjtNQUN4QixvQkFBZ0I7VUFBaEIsZ0JBQWdCO01BQ2hCLGlCQUFpQixFQUFFO01BQ25CO1FBQ0UsYUFBYSxFQUFFLEVBQUU7RUFDdkI7SUFDRSxZQUFZLEVBQUU7RUFDaEI7SUFDRSw2QkFBNkI7SUFDN0IsWUFBWSxFQUFFO0VBQ2hCO0lBQ0UsNkJBQTZCO0lBQzdCLFlBQVksRUFBRTtFQUNoQjtJQUNFLDhCQUE4QjtJQUM5QixZQUFZLEVBQUU7RUFDaEI7SUFDRSw4QkFBOEI7SUFDOUIsYUFBYSxFQUFFO0VBQ2pCO0lBQ0UsOEJBQThCO0lBQzlCLFlBQVksRUFBRTtFQUNoQjtJQUNFLDhCQUE4QjtJQUM5QixZQUFZLEVBQUU7O0FBRWxCO0VBQ0UsaUJBQWlCO0VBQ2pCLGlCQUFpQixFQUFFO0VBQ25CO0lBQ0UsbUJBQW1CLEVBQUU7RUFDdkI7SUFDRSxpQkFBaUIsRUFBRTtFQUNyQjs7O0lBR0UsbUJBQW1CO0lBQ25CLFdBQVcsRUFBRTs7QUFFakI7RUFDRTtJQUNFLHFCQUFxQixFQUFFLEVBQUU7O0FBRTdCOzs7O0VBSUUsbUJBQW1CO0VBQ25CLFdBQVcsRUFBRTs7QUFFZjtFQUNFLHVCQUF1QjtFQUN2QixtQkFBbUI7RUFDbkIsV0FBVztFQUNYLFlBQVk7RUFDWixlQUFlLEVBQUU7O0FBRW5CO0VBQ0UsK0RBQStEO0VBQy9ELGFBQWE7RUFDYixjQUFjO0VBQ2QseUJBQXlCO0VBQ3pCLFdBQVcsRUFBRTs7QUFFZjtFQUNFLDREQUE0RDtFQUM1RCxhQUFhO0VBQ2IsY0FBYztFQUNkLGFBQWE7RUFDYixVQUFVLEVBQUU7O0FBRWQ7RUFDRSwyQ0FBMkM7RUFDM0MsYUFBYTtFQUNiLGNBQWM7RUFDZCw2QkFBNkI7RUFDN0IsWUFBWTtFQUNaLFVBQVUsRUFBRTs7QUFFZDtFQUNFLFlBQVk7RUFDWixZQUFZLEVBQUU7O0FBRWhCO0VBQ0Usc0RBQXNEO0VBQ3RELGtCQUFrQjtFQUNsQix5QkFBaUI7RUFBakIsaUJBQWlCO0VBQ2pCLE9BQU87RUFDUCxXQUFXLEVBQUU7RUFDYjtJQUNFLHFCQUFjO0lBQWQsY0FBYztJQUNkLHVCQUErQjtRQUEvQiwrQkFBK0I7SUFDL0Isa0JBQWtCO0lBQ2xCLHFCQUFxQjtJQUNyQixtQkFBbUI7SUFDbkIsb0JBQWdCO1FBQWhCLGdCQUFnQixFQUFFO0lBQ2xCO01BQ0U7UUFDRSwwQkFBOEI7WUFBOUIsOEJBQThCLEVBQUUsRUFBRTtJQUN0QztNQUNFLGNBQWMsRUFBRTtFQUNwQjtJQUNFLGlCQUFpQixFQUFFO0lBQ25CO01BQ0UsZUFBZSxFQUFFO0VBQ3JCO0lBQ0UsZ0JBQWdCO0lBQ2hCLGdCQUFnQjtJQUNoQixrQkFBa0I7SUFDbEIsbUJBQW1CO0lBQ25CLHVCQUF1QjtJQUN2QiwwQkFBMEI7SUFDMUIsZUFBZSxFQUFFO0lBQ2pCO01BQ0Usd0JBQXdCO01BQ3hCLHNCQUFzQixFQUFFO0lBQzFCO01BQ0UsdUJBQXVCO01BQ3ZCLGtCQUFrQjtNQUNsQixvQkFBb0I7TUFDcEIsYUFBYTtNQUNiLGlCQUFpQixFQUFFO01BQ25CO1FBQ0UsYUFBYTtRQUNiLG9CQUFvQixFQUFFO0VBQzVCO0lBQ0UsZUFBZTtJQUNmLGlCQUFpQixFQUFFO0lBQ25CO01BQ0UsZUFBZSxFQUFFOztBQUV2QjtFQUNFLHlCQUF5QjtFQUN6QixlQUFlLEVBQUU7RUFDakI7SUFDRSxnQkFBZ0I7SUFDaEIsa0JBQWtCO0lBQ2xCLHdCQUF3QjtJQUN4QixlQUFlO0lBQ2Ysb0JBQW9CLEVBQUU7RUFDeEI7SUFDRSxlQUFlO0lBQ2YsaUJBQWlCO0lBQ2pCLG1CQUFtQixFQUFFO0lBQ3JCO01BQ0UsY0FBYyxFQUFFO0VBQ3BCO0lBQ0UsZ0JBQWdCO0lBQ2hCLGtCQUFrQjtJQUNsQixvQkFBb0IsRUFBRTtFQUN4QjtJQUNFLGdCQUFnQixFQUFFO0VBQ3BCO0lBQ0UsZ0JBQWdCO0lBQ2hCLGtCQUFrQjtJQUNsQixlQUFlO0lBQ2Ysb0JBQW9CO0lBQ3BCLG1CQUFtQjtJQUNuQixpQkFBaUI7SUFDakIsbUJBQW1CO0lBQ25CLHdCQUF3QixFQUFFO0lBQzFCO01BQ0UsOE5BQThOO01BQzlOLG1CQUFtQjtNQUNuQixRQUFRO01BQ1IsU0FBUztNQUNULGFBQWE7TUFDYixZQUFZO01BQ1osY0FBYztNQUNkLGVBQWUsRUFBRTtFQUNyQjtJQUNFLHFCQUFjO0lBQWQsY0FBYztJQUNkLG1CQUFtQixFQUFFO0lBQ3JCO01BQ0UsY0FBYyxFQUFFO0lBQ2xCO01BQ0UsZ0NBQTRCO1VBQTVCLDRCQUE0QixFQUFFO0lBQ2hDO01BQ0Usc0JBQXdCO1VBQXhCLHdCQUF3QjtNQUN4QiwyQkFBdUI7VUFBdkIsdUJBQXVCO01BQ3ZCLHVCQUFvQjtVQUFwQixvQkFBb0IsRUFBRTtNQUN0QjtRQUNFLGlCQUFpQjtRQUNqQixtQkFBbUIsRUFBRTtRQUNyQjtVQUNFLHFCQUFjO1VBQWQsY0FBYztVQUNkLG9CQUFnQjtjQUFoQixnQkFBZ0I7VUFDaEIsdUJBQStCO2NBQS9CLCtCQUErQixFQUFFO1VBQ2pDO1lBQ0U7Y0FDRSxxQkFBNEI7a0JBQTVCLDRCQUE0QixFQUFFLEVBQUU7UUFDdEM7VUFDRSxpQkFBaUI7VUFDakIsWUFBWSxFQUFFO0VBQ3RCO0lBQ0UsaUJBQWlCO0lBQ2pCLHNCQUFzQixFQUFFO0lBQ3hCO01BQ0U7UUFDRSxnQkFBZ0I7UUFDaEIsa0JBQWtCLEVBQUUsRUFBRTtFQUM1QjtJQUNFLG9CQUFvQjtJQUNwQixtQkFBbUI7SUFDbkIsc0JBQXNCLEVBQUU7SUFDeEI7TUFDRSxlQUFlLEVBQUU7SUFDbkI7TUFDRSxpQkFBaUI7TUFDakIsZUFBZTtNQUNmLG1CQUFtQjtNQUNuQixlQUFlLEVBQUU7RUFDckI7SUFDRSxpQkFBaUIsRUFBRTtFQUNyQjtJQUNFLHFCQUFjO0lBQWQsY0FBYztJQUNkLGlCQUFpQjtJQUNqQixzQkFBd0I7UUFBeEIsd0JBQXdCO0lBQ3hCLGlCQUFpQixFQUFFO0lBQ25CO01BQ0Usb0JBQW9CO01BQ3BCLG1CQUFtQjtNQUNuQix3QkFBd0I7TUFDeEIscUJBQWM7TUFBZCxjQUFjO01BQ2QsMkJBQXVCO1VBQXZCLHVCQUF1QjtNQUN2QixzQkFBd0I7VUFBeEIsd0JBQXdCO01BQ3hCLG1CQUFtQjtNQUNuQixvQkFBZ0I7VUFBaEIsZ0JBQWdCO01BQ2hCLG1CQUFtQixFQUFFO01BQ3JCO1FBQ0UsZ0JBQWdCLEVBQUU7TUFDcEI7UUFDRSxvQkFBb0IsRUFBRTtRQUN0QjtVQUNFLG1DQUFtQyxFQUFFO0lBQzNDO01BQ0UsZ0JBQWdCO01BQ2hCLG9CQUFvQjtNQUNwQix3QkFBd0I7TUFDeEIsYUFBYTtNQUNiLGNBQWMsRUFBRTtJQUNsQjtNQUNFLGdCQUFnQjtNQUNoQixrQkFBa0I7TUFDbEIsd0JBQXdCO01BQ3hCLGdDQUFnQyxFQUFFO0lBQ3BDO01BQ0UsaUJBQWlCO01BQ2pCLGdCQUFnQjtNQUNoQixrQkFBa0I7TUFDbEIsdUJBQXVCO01BQ3ZCLDBCQUEwQjtNQUMxQixtQkFBbUI7TUFDbkIsaUJBQWlCO01BQ2pCLG1CQUFtQjtNQUNuQixvQ0FBb0MsRUFBRTtNQUN0QztRQUNFLHNCQUFzQjtRQUN0QixhQUFhO1FBQ2IsWUFBWTtRQUNaLHFCQUFxQixFQUFFO0lBQzNCO01BQ0U7UUFDRSwyQkFBdUI7WUFBdkIsdUJBQXVCLEVBQUU7UUFDekI7VUFDRSxlQUFXO2NBQVgsV0FBVztVQUNYLGdCQUFnQjtVQUNoQixpQkFBaUIsRUFBRSxFQUFFOztBQUUvQjtFQUNFLGlCQUFpQixFQUFFOztBQUVyQjtFQUNFLHNCQUFzQixFQUFFO0VBQ3hCO0lBQ0U7TUFDRSxxQkFBcUIsRUFBRSxFQUFFO0VBQzdCO0lBQ0Usc0JBQXNCO0lBQ3RCLFVBQVU7SUFDVixXQUFXO0lBQ1gscUJBQWM7SUFBZCxjQUFjO0lBQ2QsbUJBQW1CO0lBQ25CLG9CQUFvQixFQUFFO0VBQ3hCO0lBQ0UscUJBQWM7SUFBZCxjQUFjO0lBQ2QsdUJBQStCO1FBQS9CLCtCQUErQjtJQUMvQix5QkFBc0I7UUFBdEIsc0JBQXNCLEVBQUU7SUFDeEI7TUFDRSxpQkFBaUI7TUFDakIsb0JBQW9CO01BQ3BCLGdCQUFnQjtNQUNoQix3QkFBd0I7TUFDeEIsZUFBZTtNQUNmLGlCQUFpQixFQUFFO0lBQ3JCO01BQ0UsaUJBQWlCO01BQ2pCLGdCQUFnQjtNQUNoQixvQkFBb0I7TUFDcEIsd0JBQXdCO01BQ3hCLGVBQWUsRUFBRTtJQUNuQjtNQUNFLGlCQUFpQjtNQUNqQixlQUFlO01BQ2YsZ0JBQWdCO01BQ2hCLHVCQUF1QjtNQUN2QixlQUFlO01BQ2YsMEJBQTBCLEVBQUU7SUFDOUI7TUFDRSxtQ0FBMkI7Y0FBM0IsMkJBQTJCLEVBQUU7RUFDakM7SUFDRSxlQUFlO0lBQ2YscUJBQWlCO1FBQWpCLGlCQUFpQjtJQUNqQixjQUFjLEVBQUU7SUFDaEI7TUFDRSxlQUFlO01BQ2YsWUFBWSxFQUFFO0lBQ2hCO01BQ0UsaUJBQWlCO01BQ2pCLG1CQUFtQixFQUFFO0lBQ3ZCO01BQ0UsWUFBWSxFQUFFO0lBQ2hCO01BQ0Usa0JBQWtCO01BQ2xCLGdCQUFnQjtNQUNoQix1QkFBdUI7TUFDdkIsMEJBQTBCO01BQzFCLGVBQWU7TUFDZixpQkFBaUI7TUFDakIsaUJBQWlCLEVBQUU7SUFDckI7TUFDRSxnQkFBZ0I7TUFDaEIsaUJBQWlCO01BQ2pCLGVBQWU7TUFDZixpQkFBaUIsRUFBRTtJQUNyQjtNQUNFLGVBQWU7TUFDZixrQkFBa0I7TUFDbEIsZ0JBQWdCO01BQ2hCLHdCQUF3QixFQUFFO0VBQzlCO0lBQ0U7TUFDRSxtQkFBbUI7TUFDbkIsb0JBQW9CLEVBQUU7SUFDeEI7TUFDRSxjQUFjLEVBQUUsRUFBRTtFQUN0QjtJQUNFO01BQ0Usb0JBQWdCO1VBQWhCLGdCQUFnQixFQUFFO0lBQ3BCO01BQ0Usa0JBQWM7VUFBZCxjQUFjLEVBQUUsRUFBRTtFQUN0QjtJQUNFO01BQ0UsbUJBQWU7VUFBZixlQUFlLEVBQUU7SUFDbkI7TUFDRSxjQUFjLEVBQUUsRUFBRTs7QUFFeEI7RUFDRSxrQkFBa0I7RUFDbEIsaUJBQWlCO0VBQ2pCLG1CQUFtQixFQUFFOztBQUV2QjtFQUNFLGdCQUFnQixFQUFFOztBQUVwQjtFQUNFLGlCQUFpQjtFQUNqQixnQkFBZ0I7RUFDaEIsaUJBQWlCO0VBQ2pCLHdCQUF3QjtFQUN4QixlQUFlLEVBQUU7O0FBRW5CO0VBQ0UsaUJBQWlCO0VBQ2pCLGtCQUFrQjtFQUNsQixxQkFBcUI7RUFDckIsaUJBQWlCO0VBQ2pCLGlCQUFpQjtFQUNqQixrQkFBYztFQUFkLGNBQWM7RUFDZCxzQ0FBMkM7TUFBM0MsMkNBQTJDLEVBQUU7RUFDN0M7SUFDRTtNQUNFLHFCQUFjO01BQWQsY0FBYztNQUNkLG9CQUFnQjtVQUFoQixnQkFBZ0I7TUFDaEIsMEJBQThCO1VBQTlCLDhCQUE4QixFQUFFO01BQ2hDO1FBQ0Usb0JBQWdCO1lBQWhCLGdCQUFnQixFQUFFLEVBQUU7RUFDMUI7SUFDRSxjQUFjLEVBQUU7O0FBRXBCO0VBQ0UsMEJBQTBCO0VBQzFCLG1CQUFtQjtFQUNuQixpQkFBaUI7RUFDakIsZ0JBQWdCO0VBQ2hCLHVCQUF1QixFQUFFO0VBQ3pCO0lBQ0Usd0JBQXdCO0lBQ3hCLGlCQUFpQjtJQUNqQixlQUFlO0lBQ2YsbUJBQW1CO0lBQ25CLFFBQVE7SUFDUixVQUFVO0lBQ1YsZ0JBQWdCO0lBQ2hCLGlCQUFpQixFQUFFOztBQUV2QjtFQUNFLCtEQUErRDtFQUMvRCxpQkFBaUI7RUFDakIscUJBQXFCLEVBQUU7RUFDdkI7OztJQUdFLDZEQUE2RDtJQUM3RCxpQkFBaUI7SUFDakIsd0JBQXdCO0lBQ3hCLGVBQWUsRUFBRTtFQUNuQjtJQUNFLG1CQUFtQixFQUFFO0VBQ3ZCO0lBQ0UsZ0JBQWdCO0lBQ2hCLGlCQUFpQjtJQUNqQixvQkFBb0IsRUFBRTtFQUN4QjtJQUNFLGdCQUFnQjtJQUNoQixnQkFBZ0IsRUFBRTtFQUNwQjtJQUNFLHVCQUF1QjtJQUN2QixvQkFBb0I7SUFDcEIsaUJBQWlCLEVBQUU7SUFDbkI7TUFDRSxlQUFlO01BQ2Ysb0JBQW9CO01BQ3BCLGlCQUFpQjtNQUNqQixzQkFBc0IsRUFBRTtFQUM1QjtJQUNFLG1CQUFtQjtJQUNuQixpQkFBaUI7SUFDakIsb0JBQW9CLEVBQUU7SUFDdEI7TUFDRSxpQkFBaUIsRUFBRTtFQUN2QjtJQUNFLGtCQUFrQjtJQUNsQixvQkFBb0IsRUFBRTtJQUN0QjtNQUNFLGtCQUFrQjtNQUNsQixvQkFBb0IsRUFBRTtJQUN4QjtNQUNFLG9CQUFvQjtNQUNwQixnQkFBZ0I7TUFDaEIsdUJBQXVCLEVBQUU7RUFDN0I7SUFDRSwyQkFBMkIsRUFBRTs7QUFFakM7RUFDRSxpQkFBaUI7RUFDakIsZ0JBQWdCO0VBQ2hCLG9CQUFvQixFQUFFO0VBQ3RCO0lBQ0Usb0JBQW9CLEVBQUU7RUFDeEI7SUFDRSx1QkFBdUI7SUFDdkIsb0JBQW9CLEVBQUU7RUFDeEI7SUFDRSxpQkFBaUI7SUFDakIsbUJBQW1CLEVBQUU7RUFDdkI7SUFDRSxpQkFBaUIsRUFBRTtFQUNyQjtJQUNFLGFBQWE7SUFDYixvQkFBb0I7SUFDcEIsZ0JBQWdCO0lBQ2hCLGlCQUFpQjtJQUNqQixtQkFBbUI7SUFDbkIsbUJBQW1CLEVBQUU7SUFDckI7TUFDRSxpQkFBaUIsRUFBRTtJQUNyQjtNQUNFLGVBQWUsRUFBRTtJQUNuQjtNQUNFLG1CQUFtQjtNQUNuQixpQkFBaUI7TUFDakIsMEJBQTBCO01BQzFCLGdCQUFnQjtNQUNoQixpQkFBaUI7TUFDakIsVUFBVTtNQUNWLFdBQVc7TUFDWCxlQUFlLEVBQUUiLCJmaWxlIjoicGFnZXMvZW50ZXJwcmlzZS9zb2x1dGlvbnMvdG9vbGtpdC5jc3MiLCJzb3VyY2VzQ29udGVudCI6WyIuZWUtaGVybyB7XG4gIG1heC13aWR0aDogNjQwcHg7XG4gIHBhZGRpbmctdG9wOiAxMzBweDtcbiAgcGFkZGluZy1ib3R0b206IDE2MHB4OyB9XG4gIC5lZS1oZXJvOjpiZWZvcmUsIC5lZS1oZXJvOjphZnRlciB7XG4gICAgZGlzcGxheTogbm9uZTsgfVxuICAuZWUtaGVybyBoMSB7XG4gICAgZm9udC1zaXplOiA1MnB4O1xuICAgIGxpbmUtaGVpZ2h0OiA2MnB4O1xuICAgIG1heC13aWR0aDogOTMwcHg7XG4gICAgbGV0dGVyLXNwYWNpbmc6IC0wLjAzZW07XG4gICAgY29sb3I6ICMwMjA4MTQ7XG4gICAgbWFyZ2luLXRvcDogMDtcbiAgICBtYXJnaW4tYm90dG9tOiAxNnB4OyB9XG4gIC5lZS1oZXJvIGg0IHtcbiAgICBmb250LWZhbWlseTogXCJSb2JvdG8gTW9ub1wiLCBNZW5sbywgTW9uYWNvLCBDb25zb2xhcywgXCJDb3VyaWVyIE5ld1wiLCBtb25vc3BhY2U7XG4gICAgZm9udC13ZWlnaHQ6IGJvbGQ7XG4gICAgZm9udC1zaXplOiAxM3B4O1xuICAgIGxpbmUtaGVpZ2h0OiAyNnB4O1xuICAgIGxldHRlci1zcGFjaW5nOiAwLjE0ZW07XG4gICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcbiAgICBjb2xvcjogIzkyQTFCMztcbiAgICBtYXJnaW4tYm90dG9tOiAyOXB4OyB9XG4gIC5lZS1oZXJvIHAge1xuICAgIGZvbnQtZmFtaWx5OiBcIkVpbmFcIiwgXCJIZWx2ZXRpY2EgTmV1ZVwiLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7XG4gICAgZm9udC1zaXplOiAyNHB4O1xuICAgIGZvbnQtd2VpZ2h0OiA0MDA7XG4gICAgbGluZS1oZWlnaHQ6IDM2cHg7XG4gICAgbGV0dGVyLXNwYWNpbmc6IC0wLjA0ZW07XG4gICAgY29sb3I6IHJnYmEoMzksIDUwLCA2MywgMC44KTsgfVxuICAuZWUtaGVybyAuYnRuIHtcbiAgICBwYWRkaW5nLWxlZnQ6IDI0cHg7XG4gICAgcGFkZGluZy1yaWdodDogMjBweDtcbiAgICBwYWRkaW5nLXRvcDogMThweDtcbiAgICBwYWRkaW5nLWJvdHRvbTogMThweDtcbiAgICBmb250LXNpemU6IDE0cHg7XG4gICAgbWFyZ2luLXRvcDogMTZweDtcbiAgICBsaW5lLWhlaWdodDogMjBweDtcbiAgICBsZXR0ZXItc3BhY2luZzogMC4wOGVtO1xuICAgIGNvbG9yOiB3aGl0ZTtcbiAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xuICAgIGZvbnQtd2VpZ2h0OiA3MDA7XG4gICAgYmFja2dyb3VuZDogIzM4ODBGRjtcbiAgICBib3gtc2hhZG93OiAwcHggMnB4IDRweCByZ2JhKDIsIDgsIDIwLCAwLjEpLCAwcHggMXB4IDJweCByZ2JhKDIsIDgsIDIwLCAwLjA4KTtcbiAgICBib3JkZXItcmFkaXVzOiAyMTBweDtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7IH1cbiAgICAuZWUtaGVybyAuYnRuOjphZnRlciB7XG4gICAgICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoJ2RhdGE6aW1hZ2Uvc3ZnK3htbDt1dGY4LDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIGZpbGw9XCJ3aGl0ZVwiIHZpZXdCb3g9XCIwIDAgNTEyIDUxMlwiPjxwYXRoIGQ9XCJNODUgMjc3LjM3NWgyNTkuNzA0TDIyNS4wMDIgMzk3LjA3NyAyNTYgNDI3bDE3MS0xNzFMMjU2IDg1bC0yOS45MjIgMjkuOTI0IDExOC42MjYgMTE5LjcwMUg4NXY0Mi43NXpcIi8+PC9zdmc+Jyk7XG4gICAgICBiYWNrZ3JvdW5kLXNpemU6IDEwMCU7XG4gICAgICBjb250ZW50OiAnJztcbiAgICAgIGhlaWdodDogMjBweDtcbiAgICAgIHdpZHRoOiAyMHB4O1xuICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICBtYXJnaW4tbGVmdDogOHB4O1xuICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC0xcHgpOyB9XG4gICAgLmVlLWhlcm8gLmJ0bjpob3ZlciB7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjNGY4YmY1OyB9XG4gIC5lZS1oZXJvLS1sYXJnZSBoMSB7XG4gICAgZm9udC1zaXplOiA2MnB4O1xuICAgIGxpbmUtaGVpZ2h0OiA2OXB4OyB9XG4gIC5lZS1oZXJvLS13aWRlIHtcbiAgICBtYXgtd2lkdGg6IDk2MHB4OyB9XG4gIC5lZS1oZXJvLS1jZW50ZXJlZCB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgIG1hcmdpbi1sZWZ0OiBhdXRvO1xuICAgIG1hcmdpbi1yaWdodDogYXV0bzsgfVxuICBAbWVkaWEgKG1heC13aWR0aDogNzY3cHgpIHtcbiAgICAuZWUtaGVybyB7XG4gICAgICBwYWRkaW5nLXRvcDogNzBweDtcbiAgICAgIHBhZGRpbmctYm90dG9tOiAwOyB9XG4gICAgICAuZWUtaGVybyBoMSB7XG4gICAgICAgIGZvbnQtc2l6ZTogNDRweDtcbiAgICAgICAgbGluZS1oZWlnaHQ6IDUycHg7IH1cbiAgICAgIC5lZS1oZXJvLS1sYXJnZSBoMSB7XG4gICAgICAgIGZvbnQtc2l6ZTogNTBweDtcbiAgICAgICAgbGluZS1oZWlnaHQ6IDYwcHg7IH0gfVxuICBAbWVkaWEgKG1heC13aWR0aDogNDgwcHgpIHtcbiAgICAuZWUtaGVybyBoMSB7XG4gICAgICBmb250LXNpemU6IDM2cHg7XG4gICAgICBsaW5lLWhlaWdodDogNDRweDtcbiAgICAgIG1hcmdpbi1ib3R0b206IDZweDsgfVxuICAgIC5lZS1oZXJvLS1sYXJnZSBoMSB7XG4gICAgICBmb250LXNpemU6IDQycHg7XG4gICAgICBsaW5lLWhlaWdodDogNTJweDsgfVxuICAgIC5lZS1oZXJvIC5idG4ge1xuICAgICAgbWFyZ2luLXRvcDogOHB4OyB9IH1cblxuLmVlLW1haW4ge1xuICBtYXJnaW4tdG9wOiAwOyB9XG4gIC5lZS1tYWluIHNlY3Rpb24ge1xuICAgIG1hcmdpbi1ib3R0b206IDIwMHB4OyB9XG4gIC5lZS1tYWluIC5sZWZ0LFxuICAuZWUtbWFpbiAucmlnaHQsXG4gIC5lZS1tYWluIC5jZW50ZXIge1xuICAgIGRpc3BsYXk6IGZsZXg7IH1cbiAgICAuZWUtbWFpbiAubGVmdDo6YmVmb3JlLCAuZWUtbWFpbiAubGVmdDo6YWZ0ZXIsXG4gICAgLmVlLW1haW4gLnJpZ2h0OjpiZWZvcmUsXG4gICAgLmVlLW1haW4gLnJpZ2h0OjphZnRlcixcbiAgICAuZWUtbWFpbiAuY2VudGVyOjpiZWZvcmUsXG4gICAgLmVlLW1haW4gLmNlbnRlcjo6YWZ0ZXIge1xuICAgICAgZGlzcGxheTogbm9uZTsgfVxuICAuZWUtbWFpbiAubGVmdCAuY29udGVudCxcbiAgLmVlLW1haW4gLnJpZ2h0IC5jb250ZW50IHtcbiAgICBtYXgtd2lkdGg6IDQ4MHB4OyB9XG4gICAgQG1lZGlhIChtYXgtd2lkdGg6IDc2N3B4KSB7XG4gICAgICAuZWUtbWFpbiAubGVmdCAuY29udGVudCxcbiAgICAgIC5lZS1tYWluIC5yaWdodCAuY29udGVudCB7XG4gICAgICAgIG1heC13aWR0aDogMTAwJTtcbiAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyOyB9XG4gICAgICAgIC5lZS1tYWluIC5sZWZ0IC5jb250ZW50IGxpLFxuICAgICAgICAuZWUtbWFpbiAucmlnaHQgLmNvbnRlbnQgbGkge1xuICAgICAgICAgIHRleHQtYWxpZ246IGxlZnQ7IH0gfVxuICAuZWUtbWFpbiAubGVmdCB7XG4gICAgZmxleC1kaXJlY3Rpb246IHJvdzsgfVxuICAgIC5lZS1tYWluIC5sZWZ0IC5ncmFwaGljcyB7XG4gICAgICBtYXJnaW4tbGVmdDogYXV0bzsgfVxuICAuZWUtbWFpbiAucmlnaHQge1xuICAgIGZsZXgtZGlyZWN0aW9uOiByb3ctcmV2ZXJzZTtcbiAgICBtYXJnaW4tbGVmdDogYXV0bzsgfVxuICAgIC5lZS1tYWluIC5yaWdodCAuZ3JhcGhpY3Mge1xuICAgICAgbWFyZ2luLXJpZ2h0OiBhdXRvOyB9XG4gIC5lZS1tYWluIC5jZW50ZXIge1xuICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7IH1cbiAgICAuZWUtbWFpbiAuY2VudGVyIC5jb250ZW50IHtcbiAgICAgIHdpZHRoOiA4OTRweDtcbiAgICAgIG1heC13aWR0aDogMTAwJTsgfVxuICAuZWUtbWFpbiAuZnVsbCAuY29udGVudCB7XG4gICAgbWF4LXdpZHRoOiA1NjhweDsgfVxuICBAbWVkaWEgKG1heC13aWR0aDogNzY3cHgpIHtcbiAgICAuZWUtbWFpbiAucmlnaHQsXG4gICAgLmVlLW1haW4gLmxlZnQge1xuICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbi1yZXZlcnNlO1xuICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsgfVxuICAgICAgLmVlLW1haW4gLnJpZ2h0IC5ncmFwaGljcyxcbiAgICAgIC5lZS1tYWluIC5sZWZ0IC5ncmFwaGljcyB7XG4gICAgICAgIG1hcmdpbi1ib3R0b206IDI0cHg7XG4gICAgICAgIG1hcmdpbi1sZWZ0OiAwO1xuICAgICAgICBtYXJnaW4tcmlnaHQ6IDA7IH1cbiAgICAuZWUtbWFpbiBzZWN0aW9uIHtcbiAgICAgIG1hcmdpbi1ib3R0b206IDEwMHB4OyB9IH1cbiAgLmVlLW1haW4gLmdyYXBoaWNzIHtcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtZW5kOyB9XG4gICAgLmVlLW1haW4gLmdyYXBoaWNzIGltZyB7XG4gICAgICB3aWR0aDogMTAwJTsgfVxuICAuZWUtbWFpbiBoMiB7XG4gICAgZm9udC1zaXplOiA0NHB4O1xuICAgIGxpbmUtaGVpZ2h0OiA1MXB4O1xuICAgIGxldHRlci1zcGFjaW5nOiAtMC4wM2VtOyB9XG4gICAgLmVlLW1haW4gaDI6Zmlyc3QtY2hpbGQge1xuICAgICAgbWFyZ2luLXRvcDogMDsgfVxuICAuZWUtbWFpbiAuZWUtc2VjdGlvbl9fdGl0bGUge1xuICAgIGZvbnQtZmFtaWx5OiBcIlJvYm90byBNb25vXCIsIE1lbmxvLCBNb25hY28sIENvbnNvbGFzLCBcIkNvdXJpZXIgTmV3XCIsIG1vbm9zcGFjZTtcbiAgICBmb250LXN0eWxlOiBub3JtYWw7XG4gICAgZm9udC13ZWlnaHQ6IGJvbGQ7XG4gICAgZm9udC1zaXplOiAxMnB4O1xuICAgIGxpbmUtaGVpZ2h0OiAyM3B4O1xuICAgIGxldHRlci1zcGFjaW5nOiAwLjE0ZW07XG4gICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcbiAgICBjb2xvcjogIzVCNzA4QjtcbiAgICBtYXJnaW4tdG9wOiAwOyB9XG4gIC5lZS1tYWluIC5lZS1zZWN0aW9uX19jdGEge1xuICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICBmb250LXNpemU6IDE4cHg7XG4gICAgZm9udC13ZWlnaHQ6IDUwMDtcbiAgICBtYXJnaW4tdG9wOiAxNnB4OyB9XG4gIC5lZS1tYWluIHAge1xuICAgIGZvbnQtc2l6ZTogMjBweDtcbiAgICBsaW5lLWhlaWdodDogMzFweDtcbiAgICBsZXR0ZXItc3BhY2luZzogLTAuMDJlbTtcbiAgICBjb2xvcjogIzVCNzA4QjtcbiAgICBtYXJnaW4tdG9wOiAxOHB4OyB9XG4gICAgLmVlLW1haW4gcC5zbSB7XG4gICAgICBmb250LXNpemU6IDE2cHg7XG4gICAgICBsaW5lLWhlaWdodDogMjlweDtcbiAgICAgIGxldHRlci1zcGFjaW5nOiAtMC4wMWVtOyB9XG4gIC5lZS1tYWluIHVsOm5vdCguZnJhbWV3b3Jrcykge1xuICAgIG1hcmdpbi10b3A6IDU0cHg7IH1cbiAgLmVlLW1haW4gLmNvbnRlbnQgdWwge1xuICAgIHBhZGRpbmctbGVmdDogMDsgfVxuICAuZWUtbWFpbiAuY29udGVudCBsaSB7XG4gICAgZm9udC1zaXplOiAxNnB4O1xuICAgIGxpbmUtaGVpZ2h0OiAyM3B4O1xuICAgIGxldHRlci1zcGFjaW5nOiAtMC4wMmVtO1xuICAgIGNvbG9yOiAjMUEyMzJGO1xuICAgIG1hcmdpbi1ib3R0b206IDQwcHg7XG4gICAgcGFkZGluZy1sZWZ0OiAzMHB4O1xuICAgIGxpc3Qtc3R5bGU6IG5vbmU7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlOyB9XG4gICAgLmVlLW1haW4gLmNvbnRlbnQgbGk6OmJlZm9yZSB7XG4gICAgICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXCIvaW1nL2VudGVycHJpc2UvY2hlY2suc3ZnXCIpO1xuICAgICAgYmFja2dyb3VuZC1zaXplOiAxMDAlO1xuICAgICAgY29udGVudDogJyc7XG4gICAgICBoZWlnaHQ6IDEwcHg7XG4gICAgICB3aWR0aDogMTNweDtcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgIGxlZnQ6IDA7XG4gICAgICB0b3A6IDhweDsgfVxuICAuZWUtbWFpbiAuZmVhdHVyZXMge1xuICAgIGRpc3BsYXk6IGdyaWQ7XG4gICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiAxZnIgMWZyIDFmcjtcbiAgICBncmlkLWNvbHVtbi1nYXA6IDY0cHg7XG4gICAgZ3JpZC1yb3ctZ2FwOiAyNHB4O1xuICAgIHBhZGRpbmc6IDA7IH1cbiAgICAuZWUtbWFpbiAuZmVhdHVyZXMgbGkge1xuICAgICAgbGlzdC1zdHlsZTogbm9uZTsgfVxuICAgIC5lZS1tYWluIC5mZWF0dXJlcyAuaWNvbiB7XG4gICAgICBtYXJnaW4tYm90dG9tOiAxNnB4O1xuICAgICAgd2lkdGg6IDQ4cHg7IH1cbiAgICBAbWVkaWEgKG1heC13aWR0aDogOTkxcHgpIHtcbiAgICAgIC5lZS1tYWluIC5mZWF0dXJlcyB7XG4gICAgICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogMWZyIDFmcjsgfSB9XG4gICAgQG1lZGlhIChtYXgtd2lkdGg6IDUwMHB4KSB7XG4gICAgICAuZWUtbWFpbiAuZmVhdHVyZXMge1xuICAgICAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IDFmcjsgfSB9XG4gIC5lZS1tYWluIC5jdGEtY2FyZCB7XG4gICAgYmFja2dyb3VuZDogIzRhOGJmYztcbiAgICBib3JkZXItcmFkaXVzOiAxMnB4O1xuICAgIHBhZGRpbmc6IDcycHggNzJweCA2MHB4O1xuICAgIGJhY2tncm91bmQtc2l6ZTogY292ZXI7XG4gICAgY29sb3I6IHdoaXRlOyB9XG4gICAgLmVlLW1haW4gLmN0YS1jYXJkIC5lZS1zZWN0aW9uX190aXRsZSxcbiAgICAuZWUtbWFpbiAuY3RhLWNhcmQgcCB7XG4gICAgICBjb2xvcjogI0NFRDZFMDsgfVxuXG4jaG93LXRvIHtcbiAgbWFyZ2luLWJvdHRvbTogMDtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBwYWRkaW5nLXRvcDogMTQwcHg7IH1cbiAgI2hvdy10bzo6YmVmb3JlIHtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgdG9wOiAwO1xuICAgIHdpZHRoOiAxMDB2dztcbiAgICBib3JkZXItdG9wOiAxcHggc29saWQgcmdiYSgxNDYsIDE2MSwgMTc5LCAwLjMpO1xuICAgIGNvbnRlbnQ6ICcnO1xuICAgIGRpc3BsYXk6IGJsb2NrOyB9XG5cbi5jYXJkcy0tcmVkLXYtYmx1ZSB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIHRleHQtYWxpZ246IGxlZnQ7XG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICBtYXJnaW4tdG9wOiAzOHB4OyB9XG4gIC5jYXJkcy0tcmVkLXYtYmx1ZV9fY2FyZCB7XG4gICAgYmFja2dyb3VuZDogIzdDQUJGRjtcbiAgICBib3JkZXItcmFkaXVzOiA4cHg7XG4gICAgcGFkZGluZzogNDBweCA0MHB4IDM0cHg7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgIGFsaWduLWl0ZW1zOiBmbGV4LXN0YXJ0O1xuICAgIG1hcmdpbi1yaWdodDogMjRweDtcbiAgICBmbGV4OiAwIDEgNDYwcHg7XG4gICAgYm9yZGVyLXJhZGl1czogOHB4OyB9XG4gICAgLmNhcmRzLS1yZWQtdi1ibHVlX19jYXJkOmxhc3QtY2hpbGQge1xuICAgICAgbWFyZ2luLXJpZ2h0OiAwOyB9XG4gICAgLmNhcmRzLS1yZWQtdi1ibHVlX19jYXJkOm50aC1jaGlsZCgyKSB7XG4gICAgICBiYWNrZ3JvdW5kOiAjRjg4RDhEOyB9XG4gICAgICAuY2FyZHMtLXJlZC12LWJsdWVfX2NhcmQ6bnRoLWNoaWxkKDIpIC5idG4ge1xuICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDI0NCwgODQsIDg0LCAwLjUpOyB9XG4gIC5jYXJkcy0tcmVkLXYtYmx1ZSBoMyB7XG4gICAgZm9udC1zaXplOiAyNHB4O1xuICAgIGxpbmUtaGVpZ2h0OiBub3JtYWw7XG4gICAgbGV0dGVyLXNwYWNpbmc6IC0wLjAyZW07XG4gICAgY29sb3I6IHdoaXRlO1xuICAgIG1hcmdpbi10b3A6IDA7IH1cbiAgLmNhcmRzLS1yZWQtdi1ibHVlIHAge1xuICAgIGZvbnQtc2l6ZTogMThweDtcbiAgICBsaW5lLWhlaWdodDogMjZweDtcbiAgICBsZXR0ZXItc3BhY2luZzogLTAuMDJlbTtcbiAgICBjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjcpO1xuICAgIG1hcmdpbi10b3A6IDA7XG4gICAgbWFyZ2luLWJvdHRvbTogMjJweDsgfVxuICAuY2FyZHMtLXJlZC12LWJsdWUgLmJ0biB7XG4gICAgbWFyZ2luLXRvcDogYXV0bztcbiAgICBmb250LXNpemU6IDE0cHg7XG4gICAgbGluZS1oZWlnaHQ6IDIycHg7XG4gICAgbGV0dGVyLXNwYWNpbmc6IDAuMDllbTtcbiAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xuICAgIHBhZGRpbmc6IDEwcHggMTRweDtcbiAgICBmb250LXdlaWdodDogNjAwO1xuICAgIGJvcmRlci1yYWRpdXM6IDhweDtcbiAgICBiYWNrZ3JvdW5kOiByZ2JhKDU2LCAxMjgsIDI1NSwgMC41KTsgfVxuICAgIC5jYXJkcy0tcmVkLXYtYmx1ZSAuYnRuIGlvbi1pY29uIHtcbiAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICAgIGhlaWdodDogMTRweDtcbiAgICAgIHdpZHRoOiAxNHB4O1xuICAgICAgdmVydGljYWwtYWxpZ246IC0ycHg7IH1cbiAgQG1lZGlhIChtYXgtd2lkdGg6IDc2N3B4KSB7XG4gICAgLmNhcmRzLS1yZWQtdi1ibHVlIHtcbiAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICBhbGlnbi1pdGVtczogY2VudGVyOyB9XG4gICAgICAuY2FyZHMtLXJlZC12LWJsdWVfX2NhcmQge1xuICAgICAgICBmbGV4OiBhdXRvO1xuICAgICAgICBtYXJnaW4tcmlnaHQ6IDA7XG4gICAgICAgIG1hcmdpbi10b3A6IDIwcHg7XG4gICAgICAgIG1heC13aWR0aDogNDYwcHg7IH0gfVxuXG5hc2lkZSB7XG4gIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCgxODBkZWcsICNGOUZBRkIgMCUsICNGRkZGRkYgMTAwJSk7XG4gIG1hcmdpbi10b3A6IC02MHB4O1xuICBwYWRkaW5nLXRvcDogMjAwcHg7XG4gIHBhZGRpbmctYm90dG9tOiAxMjBweDsgfVxuICBhc2lkZSBwIHtcbiAgICBjb2xvcjogIzQxNEQ1QzsgfVxuICBhc2lkZSAuY29udGVudCB7XG4gICAgbWF4LXdpZHRoOiA0MzJweDtcbiAgICBtYXJnaW46IDAgYXV0bztcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgZGlzcGxheTogYmxvY2s7IH1cblxuLmVlLWdldC1zdGFydGVkIHtcbiAgbWF4LXdpZHRoOiA3MDBweDsgfVxuICAuZWUtZ2V0LXN0YXJ0ZWQgaDMge1xuICAgIGNvbG9yOiAjNDE0RDVDOyB9XG5cbi5yZXNvdXJjZXMge1xuICBwYWRkaW5nLWJvdHRvbTogMTIwcHg7IH1cbiAgQG1lZGlhIChtYXgtd2lkdGg6IDc2OHB4KSB7XG4gICAgLnJlc291cmNlcyB7XG4gICAgICBwYWRkaW5nLWJvdHRvbTogNjBweDsgfSB9XG4gIC5yZXNvdXJjZXMgLmNhcmRzIHtcbiAgICBsaXN0LXN0eWxlLXR5cGU6IG5vbmU7XG4gICAgbWFyZ2luOiAwO1xuICAgIHBhZGRpbmc6IDA7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBtYXJnaW4tbGVmdDogLTI0cHg7XG4gICAgbWFyZ2luLXJpZ2h0OiAtMjRweDsgfVxuICAucmVzb3VyY2VzIGhncm91cCB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG4gICAgYWxpZ24taXRlbXM6IGJhc2VsaW5lOyB9XG4gICAgLnJlc291cmNlcyBoZ3JvdXAgaDMge1xuICAgICAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgICAgIGxpbmUtaGVpZ2h0OiBub3JtYWw7XG4gICAgICBmb250LXNpemU6IDI4cHg7XG4gICAgICBsZXR0ZXItc3BhY2luZzogLTAuMDJlbTtcbiAgICAgIGNvbG9yOiAjMUEyMzJGO1xuICAgICAgbWFyZ2luLWJvdHRvbTogMDsgfVxuICAgIC5yZXNvdXJjZXMgaGdyb3VwIGg0IHtcbiAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7XG4gICAgICBmb250LXNpemU6IDI0cHg7XG4gICAgICBsaW5lLWhlaWdodDogbm9ybWFsO1xuICAgICAgbGV0dGVyLXNwYWNpbmc6IC0wLjAyZW07XG4gICAgICBjb2xvcjogIzFBMjMyRjsgfVxuICAgIC5yZXNvdXJjZXMgaGdyb3VwIGg1IHtcbiAgICAgIGZvbnQtd2VpZ2h0OiA3MDA7XG4gICAgICBsaW5lLWhlaWdodDogMTtcbiAgICAgIGZvbnQtc2l6ZTogMTRweDtcbiAgICAgIGxldHRlci1zcGFjaW5nOiAwLjA4ZW07XG4gICAgICBjb2xvcjogIzM4ODBGRjtcbiAgICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7IH1cbiAgICAucmVzb3VyY2VzIGhncm91cCBpb24taWNvbiB7XG4gICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMnB4KTsgfVxuICAucmVzb3VyY2VzIC5jYXJkcyBsaSB7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgZmxleDogMCAwIDMzLjMzJTtcbiAgICBwYWRkaW5nOiAyNHB4OyB9XG4gICAgLnJlc291cmNlcyAuY2FyZHMgbGkgYSB7XG4gICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgIHdpZHRoOiAxMDAlOyB9XG4gICAgLnJlc291cmNlcyAuY2FyZHMgbGkgLmltZy13cmFwcGVyIHtcbiAgICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgICBib3JkZXItcmFkaXVzOiA2cHg7IH1cbiAgICAucmVzb3VyY2VzIC5jYXJkcyBsaSBpbWcge1xuICAgICAgd2lkdGg6IDEwMCU7IH1cbiAgICAucmVzb3VyY2VzIC5jYXJkcyBsaSBoNiB7XG4gICAgICBsaW5lLWhlaWdodDogMjNweDtcbiAgICAgIGZvbnQtc2l6ZTogMTJweDtcbiAgICAgIGxldHRlci1zcGFjaW5nOiAwLjEyZW07XG4gICAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xuICAgICAgY29sb3I6ICNCMkJFQ0Q7XG4gICAgICBtYXJnaW4tYm90dG9tOiAwO1xuICAgICAgbWFyZ2luLXRvcDogMTZweDsgfVxuICAgIC5yZXNvdXJjZXMgLmNhcmRzIGxpIGg0IHtcbiAgICAgIGZvbnQtc2l6ZTogMjBweDtcbiAgICAgIG1hcmdpbi10b3A6IDEwcHg7XG4gICAgICBjb2xvcjogIzFBMjMyRjtcbiAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7IH1cbiAgICAucmVzb3VyY2VzIC5jYXJkcyBsaSBwIHtcbiAgICAgIGNvbG9yOiAjNUI3MDhCO1xuICAgICAgbGluZS1oZWlnaHQ6IDIycHg7XG4gICAgICBmb250LXNpemU6IDE0cHg7XG4gICAgICBsZXR0ZXItc3BhY2luZzogLTAuMDJlbTsgfVxuICBAbWVkaWEgKG1heC13aWR0aDogOTkycHgpIHtcbiAgICAucmVzb3VyY2VzIC5jYXJkcyB7XG4gICAgICBtYXJnaW4tbGVmdDogLTEycHg7XG4gICAgICBtYXJnaW4tcmlnaHQ6IC0xMnB4OyB9XG4gICAgLnJlc291cmNlcyAuY2FyZHMgbGkge1xuICAgICAgcGFkZGluZzogMTJweDsgfSB9XG4gIEBtZWRpYSAobWF4LXdpZHRoOiA3NjhweCkge1xuICAgIC5yZXNvdXJjZXMgLmNhcmRzIHtcbiAgICAgIGZsZXgtd3JhcDogd3JhcDsgfVxuICAgIC5yZXNvdXJjZXMgLmNhcmRzIGxpIHtcbiAgICAgIGZsZXg6IDAgMCA1MCU7IH0gfVxuICBAbWVkaWEgKG1heC13aWR0aDogNDgwcHgpIHtcbiAgICAucmVzb3VyY2VzIC5jYXJkcyBsaSB7XG4gICAgICBmbGV4OiAwIDAgMTAwJTsgfVxuICAgIC5yZXNvdXJjZXMgaDUge1xuICAgICAgZGlzcGxheTogbm9uZTsgfSB9XG5cbi5lZS1tYWluIC5mZWF0dXJlcyBsaSBwLFxuLmVlLW1haW4gLmNhcmRzIGxpIHAsXG4ucmVzb3VyY2VzIC5mZWF0dXJlcyBsaSBwLFxuLnJlc291cmNlcyAuY2FyZHMgbGkgcCB7XG4gIGZvbnQtc2l6ZTogMTZweDtcbiAgbGluZS1oZWlnaHQ6IDI5cHg7XG4gIGxldHRlci1zcGFjaW5nOiAtMC4wMWVtO1xuICBjb2xvcjogIzczODQ5QTtcbiAgbWFyZ2luLXRvcDogMDsgfVxuXG4uZWUtbWFpbiAuZmVhdHVyZXMgbGkgaDQsXG4uZWUtbWFpbiAuY2FyZHMgbGkgaDQsXG4ucmVzb3VyY2VzIC5mZWF0dXJlcyBsaSBoNCxcbi5yZXNvdXJjZXMgLmNhcmRzIGxpIGg0IHtcbiAgZm9udC1zaXplOiAyMHB4O1xuICBsaW5lLWhlaWdodDogbm9ybWFsO1xuICBsZXR0ZXItc3BhY2luZzogLTAuMDJlbTtcbiAgY29sb3I6ICMwMjA4MTQ7XG4gIGZvbnQtd2VpZ2h0OiA2MDA7IH1cblxuLnJlc291cmNlcyAuY2FyZHMge1xuICBtYXJnaW4tdG9wOiAwICFpbXBvcnRhbnQ7XG4gIHRleHQtYWxpZ246IGxlZnQ7XG4gIGZsZXgtd3JhcDogd3JhcDsgfVxuICAucmVzb3VyY2VzIC5jYXJkcyAuaW1nLXdyYXBwZXIge1xuICAgIGJvcmRlci1yYWRpdXM6IDZweDsgfVxuICAgIC5yZXNvdXJjZXMgLmNhcmRzIC5pbWctd3JhcHBlciArIGg0IHtcbiAgICAgIG1hcmdpbi10b3A6IDI0cHg7IH1cbiAgQG1lZGlhIChtaW4td2lkdGg6IDEyMjBweCkge1xuICAgIC5yZXNvdXJjZXMgLmNhcmRzIHtcbiAgICAgIG1hcmdpbi1sZWZ0OiAtNDBweDtcbiAgICAgIG1hcmdpbi1yaWdodDogLTQwcHg7IH1cbiAgICAgIC5yZXNvdXJjZXMgLmNhcmRzIGxpIHtcbiAgICAgICAgcGFkZGluZzogNDBweDsgfSB9XG5cbi5yZXNvdXJjZXMgLnJlc291cmNlc19fY3VzdG9tZXItbG9nb3Mge1xuICBkaXNwbGF5OiBmbGV4O1xuICBtYXJnaW46IDI2cHggYXV0byAwO1xuICBwYWRkaW5nOiAwO1xuICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG4gIG1heC13aWR0aDogNzgwcHg7XG4gIHdpZHRoOiAxMDAlOyB9XG4gIC5yZXNvdXJjZXMgLnJlc291cmNlc19fY3VzdG9tZXItbG9nb3MgbGkge1xuICAgIGJhY2tncm91bmQ6IHVybChcIi9pbWcvZW50ZXJwcmlzZS9jdXN0b21lci1sb2dvcy5wbmdcIik7XG4gICAgYmFja2dyb3VuZC1zaXplOiA0MjhweCA0NnB4O1xuICAgIGJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgaGVpZ2h0OiA0NnB4OyB9XG4gIEBtZWRpYSAobWF4LXdpZHRoOiA3NjhweCkge1xuICAgIC5yZXNvdXJjZXMgLnJlc291cmNlc19fY3VzdG9tZXItbG9nb3Mge1xuICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gICAgICBmbGV4LXdyYXA6IHdyYXA7XG4gICAgICBtYXgtd2lkdGg6IDQ2MHB4OyB9XG4gICAgICAucmVzb3VyY2VzIC5yZXNvdXJjZXNfX2N1c3RvbWVyLWxvZ29zIGxpIHtcbiAgICAgICAgbWFyZ2luOiAyMHB4OyB9IH1cbiAgLnJlc291cmNlcyAucmVzb3VyY2VzX19jdXN0b21lci1sb2dvcyAubWFzdGVyY2FyZCB7XG4gICAgd2lkdGg6IDU4cHg7IH1cbiAgLnJlc291cmNlcyAucmVzb3VyY2VzX19jdXN0b21lci1sb2dvcyAubmF0aW9ud2lkZSB7XG4gICAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTU4cHggMDtcbiAgICB3aWR0aDogMzNweDsgfVxuICAucmVzb3VyY2VzIC5yZXNvdXJjZXNfX2N1c3RvbWVyLWxvZ29zIC51bmlxbG8ge1xuICAgIGJhY2tncm91bmQtcG9zaXRpb246IC05MXB4IDA7XG4gICAgd2lkdGg6IDY1cHg7IH1cbiAgLnJlc291cmNlcyAucmVzb3VyY2VzX19jdXN0b21lci1sb2dvcyAuaWJtIHtcbiAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTU2cHggMDtcbiAgICB3aWR0aDogNjRweDsgfVxuICAucmVzb3VyY2VzIC5yZXNvdXJjZXNfX2N1c3RvbWVyLWxvZ29zIC5pbmcge1xuICAgIGJhY2tncm91bmQtcG9zaXRpb246IC0yMjJweCAwO1xuICAgIHdpZHRoOiAxMDNweDsgfVxuICAucmVzb3VyY2VzIC5yZXNvdXJjZXNfX2N1c3RvbWVyLWxvZ29zIC5zYXAge1xuICAgIGJhY2tncm91bmQtcG9zaXRpb246IC0zMjZweCAwO1xuICAgIHdpZHRoOiA1NnB4OyB9XG4gIC5yZXNvdXJjZXMgLnJlc291cmNlc19fY3VzdG9tZXItbG9nb3MgLm5hc2Ege1xuICAgIGJhY2tncm91bmQtcG9zaXRpb246IC0zODBweCAwO1xuICAgIHdpZHRoOiA1MHB4OyB9XG5cbi5iYW5uZXIge1xuICBiYWNrZ3JvdW5kOiAjZmZmO1xuICB0ZXh0LWFsaWduOiBsZWZ0OyB9XG4gIC5iYW5uZXIgLmNvbnRhaW5lciB7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlOyB9XG4gIC5iYW5uZXIgLmVlLWhlcm8ge1xuICAgIG1heC13aWR0aDogNDgwcHg7IH1cbiAgLmJhbm5lciAuZWUtaGVybyBoNCxcbiAgLmJhbm5lciAuZWUtaGVybyBoMSxcbiAgLmJhbm5lciAuZWUtaGVybyBwIHtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgei1pbmRleDogMjsgfVxuXG5AbWVkaWEgKG1heC13aWR0aDogNzY3cHgpIHtcbiAgLmVlLWhlcm8ge1xuICAgIHBhZGRpbmctYm90dG9tOiA4MHB4OyB9IH1cblxuLnNvbHV0aW9uLWhlcm8gaDQsXG4uc29sdXRpb24taGVybyBoMixcbi5zb2x1dGlvbi1oZXJvIHAsXG4uc29sdXRpb24taGVybyBhIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICB6LWluZGV4OiAyOyB9XG5cbi5zb2x1dGlvbi1oZXJvOjphZnRlciB7XG4gIGJhY2tncm91bmQtc2l6ZTogY292ZXI7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgei1pbmRleDogMTtcbiAgY29udGVudDogJyc7XG4gIGRpc3BsYXk6IGJsb2NrOyB9XG5cbi5zb2x1dGlvbi1oZXJvLS1jcm9zcy1wbGF0Zm9ybTo6YWZ0ZXIge1xuICBiYWNrZ3JvdW5kOiB1cmwoXCIvaW1nL3NvbHV0aW9ucy9iZy1jcm9zcy1wbGF0Zm9ybS1oZWFkZXIuc3ZnXCIpO1xuICB3aWR0aDogODUwcHg7XG4gIGhlaWdodDogNDMxcHg7XG4gIHJpZ2h0OiBjYWxjKDUwJSAtIDc5NnB4KTtcbiAgdG9wOiAxMzhweDsgfVxuXG4uc29sdXRpb24taGVyby0tZGVzaWduLXN5c3RlbTo6YWZ0ZXIge1xuICBiYWNrZ3JvdW5kOiB1cmwoXCIvaW1nL3NvbHV0aW9ucy9kZXNpZ24tc3lzdGVtcy1iYW5uZXIuc3ZnXCIpO1xuICB3aWR0aDogNzU1cHg7XG4gIGhlaWdodDogNTkzcHg7XG4gIHJpZ2h0OiAtNzJweDtcbiAgdG9wOiA3NHB4OyB9XG5cbi5zb2x1dGlvbi1oZXJvLS1wd2E6OmFmdGVyIHtcbiAgYmFja2dyb3VuZDogdXJsKFwiL2ltZy9lbnRlcnByaXNlL3B3YS5wbmdcIik7XG4gIHdpZHRoOiA1MTNweDtcbiAgaGVpZ2h0OiA1MjBweDtcbiAgYmFja2dyb3VuZC1zaXplOiA1MTNweCA1MjBweDtcbiAgcmlnaHQ6IDUwcHg7XG4gIHRvcDogNzRweDsgfVxuXG4ucmlnaHQgLnNvbHV0aW9uLWhlcm8tLWRlc2lnbi1zeXN0ZW06OmFmdGVyIHtcbiAgcmlnaHQ6IGF1dG87XG4gIGxlZnQ6IC03MnB4OyB9XG5cbiNzdGlja3ktYmFyIHtcbiAgYm94LXNoYWRvdzogMHB4IDFweCAwcHggI0U5RURGMywgMHB4IC0xcHggMHB4ICNFOUVERjM7XG4gIGJhY2tncm91bmQ6IHdoaXRlO1xuICBwb3NpdGlvbjogc3RpY2t5O1xuICB0b3A6IDA7XG4gIHotaW5kZXg6IDE7IH1cbiAgI3N0aWNreS1iYXIgdWwge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xuICAgIHBhZGRpbmctdG9wOiAxN3B4O1xuICAgIHBhZGRpbmctYm90dG9tOiAxN3B4O1xuICAgIHBhZGRpbmctbGVmdDogMTVweDtcbiAgICBmbGV4LXdyYXA6IHdyYXA7IH1cbiAgICBAbWVkaWEgKG1heC13aWR0aDogOTkxcHgpIHtcbiAgICAgICNzdGlja3ktYmFyIHVsIHtcbiAgICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1hcm91bmQ7IH0gfVxuICAgICNzdGlja3ktYmFyIHVsOjpiZWZvcmUsICNzdGlja3ktYmFyIHVsOjphZnRlciB7XG4gICAgICBkaXNwbGF5OiBub25lOyB9XG4gICNzdGlja3ktYmFyIGxpIHtcbiAgICBsaXN0LXN0eWxlOiBub25lOyB9XG4gICAgI3N0aWNreS1iYXIgbGkuYWN0aXZlIGE6bm90KC5idG4pIHtcbiAgICAgIGNvbG9yOiAjNGE4YmZjOyB9XG4gICNzdGlja3ktYmFyIGEge1xuICAgIHBhZGRpbmc6IDEwcHggMDtcbiAgICBmb250LXNpemU6IDE0cHg7XG4gICAgbGluZS1oZWlnaHQ6IDIycHg7XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgIGxldHRlci1zcGFjaW5nOiAwLjA4ZW07XG4gICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcbiAgICBkaXNwbGF5OiBibG9jazsgfVxuICAgICNzdGlja3ktYmFyIGE6aG92ZXIsICNzdGlja3ktYmFyIGE6YWN0aXZlLCAjc3RpY2t5LWJhciBhOmZvY3VzIHtcbiAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xuICAgICAgdGV4dC1kZWNvcmF0aW9uOiBub25lOyB9XG4gICAgI3N0aWNreS1iYXIgYS5idG4ge1xuICAgICAgcGFkZGluZzogMTFweCAxNHB4IDhweDtcbiAgICAgIG1hcmdpbi1yaWdodDogM3B4O1xuICAgICAgYm9yZGVyLXJhZGl1czogMTBweDtcbiAgICAgIGNvbG9yOiB3aGl0ZTtcbiAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7IH1cbiAgICAgICNzdGlja3ktYmFyIGEuYnRuOmhvdmVyLCAjc3RpY2t5LWJhciBhLmJ0bjphY3RpdmUsICNzdGlja3ktYmFyIGEuYnRuOmZvY3VzIHtcbiAgICAgICAgY29sb3I6IHdoaXRlO1xuICAgICAgICBiYWNrZ3JvdW5kOiAjMzE3YmZjOyB9XG4gICNzdGlja3ktYmFyIC5hbmNob3Ige1xuICAgIGNvbG9yOiAjOTJBMUIzO1xuICAgIGZvbnQtd2VpZ2h0OiA1MDA7IH1cbiAgICAjc3RpY2t5LWJhciAuYW5jaG9yLmFjdGl2ZSwgI3N0aWNreS1iYXIgLmFuY2hvcjpob3ZlciB7XG4gICAgICBjb2xvcjogIzREOERGRjsgfVxuXG5tYWluIHtcbiAgbGV0dGVyLXNwYWNpbmc6IC0wLjAyOGVtO1xuICBjb2xvcjogIzJGM0E0ODsgfVxuICBtYWluIGgyIHtcbiAgICBmb250LXNpemU6IDQwcHg7XG4gICAgbGluZS1oZWlnaHQ6IDUwcHg7XG4gICAgbGV0dGVyLXNwYWNpbmc6IC0wLjAzZW07XG4gICAgY29sb3I6ICMwMjA4MTQ7XG4gICAgbWFyZ2luLWJvdHRvbTogMTVweDsgfVxuICBtYWluIGgzIHtcbiAgICBjb2xvcjogIzQxNEQ1QztcbiAgICBmb250LXdlaWdodDogNjAwO1xuICAgIG1hcmdpbi1ib3R0b206IDRweDsgfVxuICAgIG1haW4gaDMgKyBoMiB7XG4gICAgICBtYXJnaW4tdG9wOiAwOyB9XG4gIG1haW4gcCB7XG4gICAgZm9udC1zaXplOiAyMHB4O1xuICAgIGxpbmUtaGVpZ2h0OiAzMXB4O1xuICAgIG1hcmdpbi1ib3R0b206IDQwcHg7IH1cbiAgbWFpbiB1bCB7XG4gICAgcGFkZGluZy1sZWZ0OiAwOyB9XG4gIG1haW4gbGkge1xuICAgIGZvbnQtc2l6ZTogMTZweDtcbiAgICBsaW5lLWhlaWdodDogMjNweDtcbiAgICBjb2xvcjogIzFBMjMyRjtcbiAgICBtYXJnaW4tYm90dG9tOiAzMnB4O1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICBsaXN0LXN0eWxlOiBub25lO1xuICAgIHBhZGRpbmctbGVmdDogMzBweDtcbiAgICBsZXR0ZXItc3BhY2luZzogLS4wMTZlbTsgfVxuICAgIG1haW4gbGk6OmJlZm9yZSB7XG4gICAgICBjb250ZW50OiB1cmwoJ2RhdGE6aW1hZ2Uvc3ZnK3htbCxcXGEgICAgICAgICA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB2aWV3Qm94PVwiMCAwIDUxMiA1MTJcIj5cXGEgICAgICAgICAgIDxwYXRoIGQ9XCJNMTg2LjMwMSAzMzkuODkzTDk2IDI0OS40NjFsLTMyIDMwLjUwN0wxODYuMzAxIDQwMiA0NDggMTQwLjUwNiA0MTYgMTEwelwiLz5cXGEgICAgICAgICA8L3N2Zz4nKTtcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgIGxlZnQ6IDA7XG4gICAgICB0b3A6IDFweDtcbiAgICAgIGhlaWdodDogMTVweDtcbiAgICAgIHdpZHRoOiAxNXB4O1xuICAgICAgZmlsbDogIzFBMjMyRjtcbiAgICAgIGRpc3BsYXk6IGJsb2NrOyB9XG4gIG1haW4gc2VjdGlvbiB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7IH1cbiAgICBtYWluIHNlY3Rpb24uY29udGFpbmVyOjpiZWZvcmUsIG1haW4gc2VjdGlvbi5jb250YWluZXI6OmFmdGVyIHtcbiAgICAgIGRpc3BsYXk6IG5vbmU7IH1cbiAgICBtYWluIHNlY3Rpb24ucmlnaHQge1xuICAgICAgZmxleC1kaXJlY3Rpb246IHJvdy1yZXZlcnNlOyB9XG4gICAgbWFpbiBzZWN0aW9uLmNlbnRlciB7XG4gICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICBhbGlnbi1pdGVtczogY2VudGVyOyB9XG4gICAgICBtYWluIHNlY3Rpb24uY2VudGVyIC5jb250ZW50IHtcbiAgICAgICAgbWF4LXdpZHRoOiA3OThweDtcbiAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyOyB9XG4gICAgICAgIG1haW4gc2VjdGlvbi5jZW50ZXIgLmNvbnRlbnQgdWwge1xuICAgICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgICAgZmxleC13cmFwOiB3cmFwO1xuICAgICAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjsgfVxuICAgICAgICAgIEBtZWRpYSAobWF4LXdpZHRoOiA5OTFweCkge1xuICAgICAgICAgICAgbWFpbiBzZWN0aW9uLmNlbnRlciAuY29udGVudCB1bCB7XG4gICAgICAgICAgICAgIGp1c3RpZnktY29udGVudDogZmxleC1zdGFydDsgfSB9XG4gICAgICAgIG1haW4gc2VjdGlvbi5jZW50ZXIgLmNvbnRlbnQgbGkge1xuICAgICAgICAgIG1heC13aWR0aDogMzc2cHg7XG4gICAgICAgICAgd2lkdGg6IDEwMCU7IH1cbiAgbWFpbiAuY29udGVudCB7XG4gICAgbWF4LXdpZHRoOiA0ODJweDtcbiAgICBtYXJnaW46IDIzMnB4IDAgMTg0cHg7IH1cbiAgICBAbWVkaWEgKG1heC13aWR0aDogOTkxcHgpIHtcbiAgICAgIG1haW4gLmNvbnRlbnQge1xuICAgICAgICBtYXgtd2lkdGg6IDEwMCU7XG4gICAgICAgIG1hcmdpbjogNjBweCBhdXRvOyB9IH1cbiAgbWFpbiBhc2lkZSB7XG4gICAgYmFja2dyb3VuZDogI0Y2RjhGQjtcbiAgICBwYWRkaW5nLXRvcDogMTE0cHg7XG4gICAgcGFkZGluZy1ib3R0b206IDEyMHB4OyB9XG4gICAgbWFpbiBhc2lkZSBwIHtcbiAgICAgIGNvbG9yOiAjNDE0RDVDOyB9XG4gICAgbWFpbiBhc2lkZSAuY29udGVudCB7XG4gICAgICBtYXgtd2lkdGg6IDQzMnB4O1xuICAgICAgbWFyZ2luOiAwIGF1dG87XG4gICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgICBkaXNwbGF5OiBibG9jazsgfVxuICBtYWluIC5nZXQtc3RhcnRlZCB7XG4gICAgbWF4LXdpZHRoOiA3MDBweDsgfVxuICBtYWluIC5jYXJkcyB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICB0ZXh0LWFsaWduOiBsZWZ0O1xuICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICAgIG1hcmdpbi10b3A6IDM4cHg7IH1cbiAgICBtYWluIC5jYXJkcyAuY2FyZCB7XG4gICAgICBiYWNrZ3JvdW5kOiAjN0NBQkZGO1xuICAgICAgYm9yZGVyLXJhZGl1czogOHB4O1xuICAgICAgcGFkZGluZzogNDBweCA0MHB4IDM0cHg7XG4gICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICAgIGFsaWduLWl0ZW1zOiBmbGV4LXN0YXJ0O1xuICAgICAgbWFyZ2luLXJpZ2h0OiAyNHB4O1xuICAgICAgZmxleDogMCAxIDQ2MHB4O1xuICAgICAgYm9yZGVyLXJhZGl1czogOHB4OyB9XG4gICAgICBtYWluIC5jYXJkcyAuY2FyZDpsYXN0LWNoaWxkIHtcbiAgICAgICAgbWFyZ2luLXJpZ2h0OiAwOyB9XG4gICAgICBtYWluIC5jYXJkcyAuY2FyZDpudGgtY2hpbGQoMikge1xuICAgICAgICBiYWNrZ3JvdW5kOiAjRjg4RDhEOyB9XG4gICAgICAgIG1haW4gLmNhcmRzIC5jYXJkOm50aC1jaGlsZCgyKSAuYnRuIHtcbiAgICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDI0NCwgODQsIDg0LCAwLjUpOyB9XG4gICAgbWFpbiAuY2FyZHMgaDMge1xuICAgICAgZm9udC1zaXplOiAyNHB4O1xuICAgICAgbGluZS1oZWlnaHQ6IG5vcm1hbDtcbiAgICAgIGxldHRlci1zcGFjaW5nOiAtMC4wMmVtO1xuICAgICAgY29sb3I6IHdoaXRlO1xuICAgICAgbWFyZ2luLXRvcDogMDsgfVxuICAgIG1haW4gLmNhcmRzIHAge1xuICAgICAgZm9udC1zaXplOiAxOHB4O1xuICAgICAgbGluZS1oZWlnaHQ6IDI2cHg7XG4gICAgICBsZXR0ZXItc3BhY2luZzogLTAuMDJlbTtcbiAgICAgIGNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNyk7IH1cbiAgICBtYWluIC5jYXJkcyAuYnRuIHtcbiAgICAgIG1hcmdpbi10b3A6IGF1dG87XG4gICAgICBmb250LXNpemU6IDE0cHg7XG4gICAgICBsaW5lLWhlaWdodDogMjJweDtcbiAgICAgIGxldHRlci1zcGFjaW5nOiAwLjA5ZW07XG4gICAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xuICAgICAgcGFkZGluZzogMTBweCAxNHB4O1xuICAgICAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgICAgIGJvcmRlci1yYWRpdXM6IDhweDtcbiAgICAgIGJhY2tncm91bmQ6IHJnYmEoNTYsIDEyOCwgMjU1LCAwLjUpOyB9XG4gICAgICBtYWluIC5jYXJkcyAuYnRuIGlvbi1pY29uIHtcbiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgICAgICBoZWlnaHQ6IDE0cHg7XG4gICAgICAgIHdpZHRoOiAxNHB4O1xuICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogLTJweDsgfVxuICAgIEBtZWRpYSAobWF4LXdpZHRoOiA3NjdweCkge1xuICAgICAgbWFpbiAuY2FyZHMge1xuICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOyB9XG4gICAgICAgIG1haW4gLmNhcmRzIC5jYXJkIHtcbiAgICAgICAgICBmbGV4OiBhdXRvO1xuICAgICAgICAgIG1hcmdpbi1yaWdodDogMDtcbiAgICAgICAgICBtYXJnaW4tdG9wOiAyMHB4OyB9IH1cblxuLnJlc291cmNlcyB7XG4gIG1hcmdpbi10b3A6IDk2cHg7IH1cblxuLnJlc291cmNlcyB7XG4gIHBhZGRpbmctYm90dG9tOiAxMjBweDsgfVxuICBAbWVkaWEgKG1heC13aWR0aDogNzY4cHgpIHtcbiAgICAucmVzb3VyY2VzIHtcbiAgICAgIHBhZGRpbmctYm90dG9tOiA2MHB4OyB9IH1cbiAgLnJlc291cmNlcyAuY2FyZHMge1xuICAgIGxpc3Qtc3R5bGUtdHlwZTogbm9uZTtcbiAgICBtYXJnaW46IDA7XG4gICAgcGFkZGluZzogMDtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIG1hcmdpbi1sZWZ0OiAtMjRweDtcbiAgICBtYXJnaW4tcmlnaHQ6IC0yNHB4OyB9XG4gIC5yZXNvdXJjZXMgaGdyb3VwIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcbiAgICBhbGlnbi1pdGVtczogYmFzZWxpbmU7IH1cbiAgICAucmVzb3VyY2VzIGhncm91cCBoMyB7XG4gICAgICBmb250LXdlaWdodDogNjAwO1xuICAgICAgbGluZS1oZWlnaHQ6IG5vcm1hbDtcbiAgICAgIGZvbnQtc2l6ZTogMjhweDtcbiAgICAgIGxldHRlci1zcGFjaW5nOiAtMC4wMmVtO1xuICAgICAgY29sb3I6ICMxQTIzMkY7XG4gICAgICBtYXJnaW4tYm90dG9tOiAwOyB9XG4gICAgLnJlc291cmNlcyBoZ3JvdXAgaDQge1xuICAgICAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgICAgIGZvbnQtc2l6ZTogMjRweDtcbiAgICAgIGxpbmUtaGVpZ2h0OiBub3JtYWw7XG4gICAgICBsZXR0ZXItc3BhY2luZzogLTAuMDJlbTtcbiAgICAgIGNvbG9yOiAjMUEyMzJGOyB9XG4gICAgLnJlc291cmNlcyBoZ3JvdXAgaDUge1xuICAgICAgZm9udC13ZWlnaHQ6IDcwMDtcbiAgICAgIGxpbmUtaGVpZ2h0OiAxO1xuICAgICAgZm9udC1zaXplOiAxNHB4O1xuICAgICAgbGV0dGVyLXNwYWNpbmc6IDAuMDhlbTtcbiAgICAgIGNvbG9yOiAjMzg4MEZGO1xuICAgICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTsgfVxuICAgIC5yZXNvdXJjZXMgaGdyb3VwIGlvbi1pY29uIHtcbiAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgycHgpOyB9XG4gIC5yZXNvdXJjZXMgLmNhcmRzIGxpIHtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgICBmbGV4OiAwIDAgMzMuMzMlO1xuICAgIHBhZGRpbmc6IDI0cHg7IH1cbiAgICAucmVzb3VyY2VzIC5jYXJkcyBsaSBhIHtcbiAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgd2lkdGg6IDEwMCU7IH1cbiAgICAucmVzb3VyY2VzIC5jYXJkcyBsaSAuaW1nLXdyYXBwZXIge1xuICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICAgIGJvcmRlci1yYWRpdXM6IDZweDsgfVxuICAgIC5yZXNvdXJjZXMgLmNhcmRzIGxpIGltZyB7XG4gICAgICB3aWR0aDogMTAwJTsgfVxuICAgIC5yZXNvdXJjZXMgLmNhcmRzIGxpIGg2IHtcbiAgICAgIGxpbmUtaGVpZ2h0OiAyM3B4O1xuICAgICAgZm9udC1zaXplOiAxMnB4O1xuICAgICAgbGV0dGVyLXNwYWNpbmc6IDAuMTJlbTtcbiAgICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XG4gICAgICBjb2xvcjogI0IyQkVDRDtcbiAgICAgIG1hcmdpbi1ib3R0b206IDA7XG4gICAgICBtYXJnaW4tdG9wOiAxNnB4OyB9XG4gICAgLnJlc291cmNlcyAuY2FyZHMgbGkgaDQge1xuICAgICAgZm9udC1zaXplOiAyMHB4O1xuICAgICAgbWFyZ2luLXRvcDogMTBweDtcbiAgICAgIGNvbG9yOiAjMUEyMzJGO1xuICAgICAgZm9udC13ZWlnaHQ6IDYwMDsgfVxuICAgIC5yZXNvdXJjZXMgLmNhcmRzIGxpIHAge1xuICAgICAgY29sb3I6ICM1QjcwOEI7XG4gICAgICBsaW5lLWhlaWdodDogMjJweDtcbiAgICAgIGZvbnQtc2l6ZTogMTRweDtcbiAgICAgIGxldHRlci1zcGFjaW5nOiAtMC4wMmVtOyB9XG4gIEBtZWRpYSAobWF4LXdpZHRoOiA5OTJweCkge1xuICAgIC5yZXNvdXJjZXMgLmNhcmRzIHtcbiAgICAgIG1hcmdpbi1sZWZ0OiAtMTJweDtcbiAgICAgIG1hcmdpbi1yaWdodDogLTEycHg7IH1cbiAgICAucmVzb3VyY2VzIC5jYXJkcyBsaSB7XG4gICAgICBwYWRkaW5nOiAxMnB4OyB9IH1cbiAgQG1lZGlhIChtYXgtd2lkdGg6IDc2OHB4KSB7XG4gICAgLnJlc291cmNlcyAuY2FyZHMge1xuICAgICAgZmxleC13cmFwOiB3cmFwOyB9XG4gICAgLnJlc291cmNlcyAuY2FyZHMgbGkge1xuICAgICAgZmxleDogMCAwIDUwJTsgfSB9XG4gIEBtZWRpYSAobWF4LXdpZHRoOiA0ODBweCkge1xuICAgIC5yZXNvdXJjZXMgLmNhcmRzIGxpIHtcbiAgICAgIGZsZXg6IDAgMCAxMDAlOyB9XG4gICAgLnJlc291cmNlcyBoNSB7XG4gICAgICBkaXNwbGF5OiBub25lOyB9IH1cblxuLmJhbm5lciBoZ3JvdXAge1xuICBwYWRkaW5nLXRvcDogNzVweDtcbiAgbWF4LXdpZHRoOiA3MDBweDtcbiAgdGV4dC1hbGlnbjogY2VudGVyOyB9XG5cbi5iYW5uZXIgaW1nIHtcbiAgbWF4LXdpZHRoOiAxMDAlOyB9XG5cbi5iYW5uZXIgcCB7XG4gIG1hcmdpbi10b3A6IDYxcHg7XG4gIGZvbnQtc2l6ZTogMzJweDtcbiAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgbGV0dGVyLXNwYWNpbmc6IC0uMDA4ZW07XG4gIGNvbG9yOiAjMGYxNTFmOyB9XG5cbi5iYW5uZXIgdWwge1xuICBtYXgtd2lkdGg6IDk3OHB4O1xuICBwYWRkaW5nLXRvcDogNTFweDtcbiAgcGFkZGluZy1ib3R0b206IDk1cHg7XG4gIGxpc3Qtc3R5bGU6IG5vbmU7XG4gIHRleHQtYWxpZ246IGxlZnQ7XG4gIGRpc3BsYXk6IGdyaWQ7XG4gIGdyaWQtdGVtcGxhdGUtY29sdW1uczogYXV0byBhdXRvIGF1dG8gYXV0bzsgfVxuICBAbWVkaWEgKG1heC13aWR0aDogOTkxcHgpIHtcbiAgICAuYmFubmVyIHVsIHtcbiAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICBmbGV4LXdyYXA6IHdyYXA7XG4gICAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWFyb3VuZDsgfVxuICAgICAgLmJhbm5lciB1bCBsaSB7XG4gICAgICAgIGZsZXg6IDAgMCAyMzRweDsgfSB9XG4gIC5iYW5uZXIgdWw6OmJlZm9yZSwgLmJhbm5lciB1bDo6YWZ0ZXIge1xuICAgIGNvbnRlbnQ6IG5vbmU7IH1cblxuLmJhbm5lciBsaSB7XG4gIHBhZGRpbmc6IDEzcHggMCAxM3B4IDI4cHg7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgZm9udC1zaXplOiAxNnB4O1xuICBsZXR0ZXItc3BhY2luZzogLS4wMmVtOyB9XG4gIC5iYW5uZXIgbGk6OmJlZm9yZSB7XG4gICAgZm9udC1mYW1pbHk6ICdJb25pY29ucyc7XG4gICAgY29udGVudDogJ1xcZjJiYyc7XG4gICAgY29sb3I6ICM1Yzc3ZmY7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIGxlZnQ6IDA7XG4gICAgdG9wOiAxMHB4O1xuICAgIGZvbnQtc2l6ZTogMThweDtcbiAgICBmb250LXdlaWdodDogNDAwOyB9XG5cbm1haW4ge1xuICBmb250LWZhbWlseTogXCJJbnRlclwiLCBcIkludGVyIFVJXCIsIEhlbHZldGljYSwgQXJpYWwsIHNhbnMtc2VyaWY7XG4gIG1heC13aWR0aDogNjc0cHg7XG4gIG1hcmdpbi1ib3R0b206IDExOHB4OyB9XG4gIG1haW4gaDEsXG4gIG1haW4gaDIsXG4gIG1haW4gaDMge1xuICAgIGZvbnQtZmFtaWx5OiBcIkVpbmFcIiwgXCJIZWx2ZXRpY2EgTmV1ZVwiLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7XG4gICAgZm9udC13ZWlnaHQ6IDcwMDtcbiAgICBsZXR0ZXItc3BhY2luZzogLS4wMDhlbTtcbiAgICBjb2xvcjogIzBmMTYyMDsgfVxuICBtYWluIGgyIHtcbiAgICBtYXJnaW4tYm90dG9tOiA1cHg7IH1cbiAgbWFpbiBoMyB7XG4gICAgZm9udC1zaXplOiAxOHB4O1xuICAgIG1hcmdpbi10b3A6IDU2cHg7XG4gICAgbWFyZ2luLWJvdHRvbTogMTZweDsgfVxuICBtYWluIGltZyB7XG4gICAgbWF4LXdpZHRoOiAxMDAlO1xuICAgIG1hcmdpbi10b3A6IDFweDsgfVxuICBtYWluIHAge1xuICAgIGxldHRlci1zcGFjaW5nOiAtLjAxZW07XG4gICAgbWFyZ2luLWJvdHRvbTogMjJweDtcbiAgICBsaW5lLWhlaWdodDogMmVtOyB9XG4gICAgbWFpbiBwIGNvZGUge1xuICAgICAgY29sb3I6ICM3MDU4ZmQ7XG4gICAgICBiYWNrZ3JvdW5kOiAjZWZmMmY3O1xuICAgICAgcGFkZGluZzogMnB4IDhweDtcbiAgICAgIGxldHRlci1zcGFjaW5nOiAuMDJlbTsgfVxuICBtYWluIG9sIHtcbiAgICBwYWRkaW5nLWxlZnQ6IDQycHg7XG4gICAgbWFyZ2luLXRvcDogMjVweDtcbiAgICBtYXJnaW4tYm90dG9tOiAyNHB4OyB9XG4gICAgbWFpbiBvbCBsaSB7XG4gICAgICBwYWRkaW5nOiA0cHggMHB4OyB9XG4gIG1haW4gaGdyb3VwIHtcbiAgICBtYXJnaW4tdG9wOiAxNDRweDtcbiAgICBtYXJnaW4tYm90dG9tOiA1MnB4OyB9XG4gICAgbWFpbiBoZ3JvdXA6Zmlyc3QtY2hpbGQge1xuICAgICAgbWFyZ2luLXRvcDogMTA4cHg7XG4gICAgICBtYXJnaW4tYm90dG9tOiA1OXB4OyB9XG4gICAgbWFpbiBoZ3JvdXAgcCB7XG4gICAgICBsaW5lLWhlaWdodDogMS42NGVtO1xuICAgICAgZm9udC1zaXplOiAxOHB4O1xuICAgICAgbGV0dGVyLXNwYWNpbmc6IC0uMDNlbTsgfVxuICBtYWluICsgZm9vdGVyIHtcbiAgICBib3JkZXItdG9wOiAxcHggc29saWQgI2VlZTsgfVxuXG4uc3RlcHMge1xuICBsaXN0LXN0eWxlOiBub25lO1xuICBwYWRkaW5nLWxlZnQ6IDA7XG4gIG1hcmdpbi1ib3R0b206IDY1cHg7IH1cbiAgLnN0ZXBzIGxpIHtcbiAgICBtYXJnaW4tYm90dG9tOiA2MnB4OyB9XG4gIC5zdGVwcyBwIHtcbiAgICBsZXR0ZXItc3BhY2luZzogLS4wMWVtO1xuICAgIG1hcmdpbi1ib3R0b206IDE3cHg7IH1cbiAgLnN0ZXBzIHN0cm9uZyB7XG4gICAgZm9udC13ZWlnaHQ6IDUwMDtcbiAgICBtYXJnaW4tcmlnaHQ6IDI5cHg7IH1cbiAgLnN0ZXBzIGNvZGUge1xuICAgIGJhY2tncm91bmQ6IG5vbmU7IH1cbiAgLnN0ZXBzIHByZSB7XG4gICAgYm9yZGVyOiBub25lO1xuICAgIGJhY2tncm91bmQ6ICNmNWY3ZmE7XG4gICAgZm9udC1zaXplOiAxMnB4O1xuICAgIGZvbnQtd2VpZ2h0OiA1MDA7XG4gICAgcGFkZGluZzogMTVweCAxNHB4O1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsgfVxuICAgIC5zdGVwcyBwcmUgLmhsanMge1xuICAgICAgYmFja2dyb3VuZDogbm9uZTsgfVxuICAgIC5zdGVwcyBwcmUgLmhsanMtYnVpbHRfaW4ge1xuICAgICAgY29sb3I6IGluaGVyaXQ7IH1cbiAgICAuc3RlcHMgcHJlOjpiZWZvcmUge1xuICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgY29udGVudDogJ3NoZWxsJztcbiAgICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XG4gICAgICBmb250LXNpemU6IDExcHg7XG4gICAgICBmb250LXdlaWdodDogNTAwO1xuICAgICAgdG9wOiAuMmVtO1xuICAgICAgcmlnaHQ6IDFlbTtcbiAgICAgIGNvbG9yOiAjY2RkNGRlOyB9XG4iXX0= */\n"
  },
  {
    "path": "content/css/pages/enterprise/support.css",
    "content": "#page-enterprise-support .navbar.transparent + .banner {\n  background: #00295b no-repeat center bottom url(\"/img/enterprise/support/enterprise-support-hero-bg.jpg\");\n  background-size: cover;\n  padding-bottom: 118px;\n  padding-top: 135px;\n  color: white; }\n  #page-enterprise-support .navbar.transparent + .banner hgroup {\n    padding-top: 0;\n    padding-bottom: 0; }\n  #page-enterprise-support .navbar.transparent + .banner h1 {\n    font-weight: 700;\n    font-size: 50px;\n    font-family: \"Eina\", \"Helvetica Neue\", Helvetica, sans-serif; }\n  #page-enterprise-support .navbar.transparent + .banner p {\n    font-size: 20px;\n    font-weight: 500;\n    color: #bccce4; }\n\n#page-enterprise-support .btn {\n  font-size: 15px;\n  font-weight: 700; }\n\n#page-enterprise-support section.help hgroup {\n  padding-top: 64px;\n  padding-bottom: 64px; }\n  #page-enterprise-support section.help hgroup h2 {\n    font-weight: 700;\n    font-size: 34px;\n    letter-spacing: -.04em; }\n  #page-enterprise-support section.help hgroup p {\n    font-size: 18px;\n    font-weight: 500; }\n\n#page-enterprise-support section.help .features {\n  padding: 0;\n  list-style: none;\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-wrap: wrap;\n      flex-wrap: wrap;\n  -ms-flex-pack: justify;\n      justify-content: space-between;\n  max-width: 850px;\n  margin: 16px auto 16px; }\n  @media (max-width: 767px) {\n    #page-enterprise-support section.help .features {\n      -ms-flex-pack: center;\n          justify-content: center; } }\n  #page-enterprise-support section.help .features li {\n    -ms-flex: 0 0 240px;\n        flex: 0 0 240px;\n    padding-top: 80px;\n    position: relative;\n    margin-bottom: 64px; }\n    #page-enterprise-support section.help .features li::before {\n      background: url(\"/img/enterprise/support/enterprise-support-icons.png\") no-repeat 0 0;\n      background-size: 48px;\n      width: 48px;\n      height: 48px;\n      content: '';\n      position: absolute;\n      top: 0; }\n    @media (max-width: 767px) {\n      #page-enterprise-support section.help .features li {\n        -ms-flex: 0 0 100%;\n            flex: 0 0 100%;\n        text-align: center; }\n        #page-enterprise-support section.help .features li::before {\n          left: calc(50% - 24px); } }\n    #page-enterprise-support section.help .features li.reviews::before {\n      background-position: 0 -48px; }\n    #page-enterprise-support section.help .features li.sla::before {\n      background-position: 0 -96px; }\n    #page-enterprise-support section.help .features li.training::before {\n      background-position: 0 -144px; }\n    #page-enterprise-support section.help .features li.contact::before {\n      background-position: 0 -192px; }\n    #page-enterprise-support section.help .features li.slack::before {\n      background-position: 0 -240px; }\n    #page-enterprise-support section.help .features li h4 {\n      font-weight: 600;\n      font-size: 20px;\n      margin-bottom: 16px; }\n    #page-enterprise-support section.help .features li p {\n      font-size: 16px;\n      font-weight: 400;\n      color: #727a87; }\n\n#page-enterprise-support section.plan {\n  background: #f5f7fb;\n  padding-top: 64px;\n  padding-bottom: 64px; }\n  #page-enterprise-support section.plan .container {\n    max-width: 768px; }\n  #page-enterprise-support section.plan hgroup h2 {\n    font-weight: 700;\n    font-size: 34px;\n    letter-spacing: -.04em; }\n  #page-enterprise-support section.plan hgroup p {\n    margin-top: 16px;\n    color: #626a77;\n    font-weight: 500;\n    margin-bottom: 64px; }\n\n#page-enterprise-support section.get-in-touch {\n  margin-top: 0;\n  padding-top: 60px;\n  padding-bottom: 60px;\n  background: linear-gradient(to right, #4c8cff 0%, #76c6ff 100%); }\n  #page-enterprise-support section.get-in-touch .container {\n    display: -ms-flexbox;\n    display: flex;\n    -ms-flex-align: center;\n        align-items: center; }\n    @media (max-width: 767px) {\n      #page-enterprise-support section.get-in-touch .container {\n        display: block;\n        text-align: center; } }\n  #page-enterprise-support section.get-in-touch hgroup {\n    padding-bottom: 33px; }\n  #page-enterprise-support section.get-in-touch h2 {\n    font-size: 28px;\n    letter-spacing: -.02em;\n    font-weight: 600;\n    display: inline-block; }\n  #page-enterprise-support section.get-in-touch p {\n    color: #003e82;\n    font-size: 18px;\n    font-weight: 500;\n    display: inline-block; }\n  #page-enterprise-support section.get-in-touch .btn-group {\n    text-align: right; }\n  #page-enterprise-support section.get-in-touch .btn {\n    margin-bottom: 8px; }\n\n/*# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInN1cHBvcnQuY3NzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0VBQ0UsMEdBQTBHO0VBQzFHLHVCQUF1QjtFQUN2QixzQkFBc0I7RUFDdEIsbUJBQW1CO0VBQ25CLGFBQWEsRUFBRTtFQUNmO0lBQ0UsZUFBZTtJQUNmLGtCQUFrQixFQUFFO0VBQ3RCO0lBQ0UsaUJBQWlCO0lBQ2pCLGdCQUFnQjtJQUNoQiw2REFBNkQsRUFBRTtFQUNqRTtJQUNFLGdCQUFnQjtJQUNoQixpQkFBaUI7SUFDakIsZUFBZSxFQUFFOztBQUVyQjtFQUNFLGdCQUFnQjtFQUNoQixpQkFBaUIsRUFBRTs7QUFFckI7RUFDRSxrQkFBa0I7RUFDbEIscUJBQXFCLEVBQUU7RUFDdkI7SUFDRSxpQkFBaUI7SUFDakIsZ0JBQWdCO0lBQ2hCLHVCQUF1QixFQUFFO0VBQzNCO0lBQ0UsZ0JBQWdCO0lBQ2hCLGlCQUFpQixFQUFFOztBQUV2QjtFQUNFLFdBQVc7RUFDWCxpQkFBaUI7RUFDakIscUJBQWM7RUFBZCxjQUFjO0VBQ2Qsb0JBQWdCO01BQWhCLGdCQUFnQjtFQUNoQix1QkFBK0I7TUFBL0IsK0JBQStCO0VBQy9CLGlCQUFpQjtFQUNqQix1QkFBdUIsRUFBRTtFQUN6QjtJQUNFO01BQ0Usc0JBQXdCO1VBQXhCLHdCQUF3QixFQUFFLEVBQUU7RUFDaEM7SUFDRSxvQkFBZ0I7UUFBaEIsZ0JBQWdCO0lBQ2hCLGtCQUFrQjtJQUNsQixtQkFBbUI7SUFDbkIsb0JBQW9CLEVBQUU7SUFDdEI7TUFDRSxzRkFBc0Y7TUFDdEYsc0JBQXNCO01BQ3RCLFlBQVk7TUFDWixhQUFhO01BQ2IsWUFBWTtNQUNaLG1CQUFtQjtNQUNuQixPQUFPLEVBQUU7SUFDWDtNQUNFO1FBQ0UsbUJBQWU7WUFBZixlQUFlO1FBQ2YsbUJBQW1CLEVBQUU7UUFDckI7VUFDRSx1QkFBdUIsRUFBRSxFQUFFO0lBQ2pDO01BQ0UsNkJBQTZCLEVBQUU7SUFDakM7TUFDRSw2QkFBNkIsRUFBRTtJQUNqQztNQUNFLDhCQUE4QixFQUFFO0lBQ2xDO01BQ0UsOEJBQThCLEVBQUU7SUFDbEM7TUFDRSw4QkFBOEIsRUFBRTtJQUNsQztNQUNFLGlCQUFpQjtNQUNqQixnQkFBZ0I7TUFDaEIsb0JBQW9CLEVBQUU7SUFDeEI7TUFDRSxnQkFBZ0I7TUFDaEIsaUJBQWlCO01BQ2pCLGVBQWUsRUFBRTs7QUFFdkI7RUFDRSxvQkFBb0I7RUFDcEIsa0JBQWtCO0VBQ2xCLHFCQUFxQixFQUFFO0VBQ3ZCO0lBQ0UsaUJBQWlCLEVBQUU7RUFDckI7SUFDRSxpQkFBaUI7SUFDakIsZ0JBQWdCO0lBQ2hCLHVCQUF1QixFQUFFO0VBQzNCO0lBQ0UsaUJBQWlCO0lBQ2pCLGVBQWU7SUFDZixpQkFBaUI7SUFDakIsb0JBQW9CLEVBQUU7O0FBRTFCO0VBQ0UsY0FBYztFQUNkLGtCQUFrQjtFQUNsQixxQkFBcUI7RUFDckIsZ0VBQWdFLEVBQUU7RUFDbEU7SUFDRSxxQkFBYztJQUFkLGNBQWM7SUFDZCx1QkFBb0I7UUFBcEIsb0JBQW9CLEVBQUU7SUFDdEI7TUFDRTtRQUNFLGVBQWU7UUFDZixtQkFBbUIsRUFBRSxFQUFFO0VBQzdCO0lBQ0UscUJBQXFCLEVBQUU7RUFDekI7SUFDRSxnQkFBZ0I7SUFDaEIsdUJBQXVCO0lBQ3ZCLGlCQUFpQjtJQUNqQixzQkFBc0IsRUFBRTtFQUMxQjtJQUNFLGVBQWU7SUFDZixnQkFBZ0I7SUFDaEIsaUJBQWlCO0lBQ2pCLHNCQUFzQixFQUFFO0VBQzFCO0lBQ0Usa0JBQWtCLEVBQUU7RUFDdEI7SUFDRSxtQkFBbUIsRUFBRSIsImZpbGUiOiJwYWdlcy9lbnRlcnByaXNlL3N1cHBvcnQuY3NzIiwic291cmNlc0NvbnRlbnQiOlsiI3BhZ2UtZW50ZXJwcmlzZS1zdXBwb3J0IC5uYXZiYXIudHJhbnNwYXJlbnQgKyAuYmFubmVyIHtcbiAgYmFja2dyb3VuZDogIzAwMjk1YiBuby1yZXBlYXQgY2VudGVyIGJvdHRvbSB1cmwoXCIvaW1nL2VudGVycHJpc2Uvc3VwcG9ydC9lbnRlcnByaXNlLXN1cHBvcnQtaGVyby1iZy5qcGdcIik7XG4gIGJhY2tncm91bmQtc2l6ZTogY292ZXI7XG4gIHBhZGRpbmctYm90dG9tOiAxMThweDtcbiAgcGFkZGluZy10b3A6IDEzNXB4O1xuICBjb2xvcjogd2hpdGU7IH1cbiAgI3BhZ2UtZW50ZXJwcmlzZS1zdXBwb3J0IC5uYXZiYXIudHJhbnNwYXJlbnQgKyAuYmFubmVyIGhncm91cCB7XG4gICAgcGFkZGluZy10b3A6IDA7XG4gICAgcGFkZGluZy1ib3R0b206IDA7IH1cbiAgI3BhZ2UtZW50ZXJwcmlzZS1zdXBwb3J0IC5uYXZiYXIudHJhbnNwYXJlbnQgKyAuYmFubmVyIGgxIHtcbiAgICBmb250LXdlaWdodDogNzAwO1xuICAgIGZvbnQtc2l6ZTogNTBweDtcbiAgICBmb250LWZhbWlseTogXCJFaW5hXCIsIFwiSGVsdmV0aWNhIE5ldWVcIiwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmOyB9XG4gICNwYWdlLWVudGVycHJpc2Utc3VwcG9ydCAubmF2YmFyLnRyYW5zcGFyZW50ICsgLmJhbm5lciBwIHtcbiAgICBmb250LXNpemU6IDIwcHg7XG4gICAgZm9udC13ZWlnaHQ6IDUwMDtcbiAgICBjb2xvcjogI2JjY2NlNDsgfVxuXG4jcGFnZS1lbnRlcnByaXNlLXN1cHBvcnQgLmJ0biB7XG4gIGZvbnQtc2l6ZTogMTVweDtcbiAgZm9udC13ZWlnaHQ6IDcwMDsgfVxuXG4jcGFnZS1lbnRlcnByaXNlLXN1cHBvcnQgc2VjdGlvbi5oZWxwIGhncm91cCB7XG4gIHBhZGRpbmctdG9wOiA2NHB4O1xuICBwYWRkaW5nLWJvdHRvbTogNjRweDsgfVxuICAjcGFnZS1lbnRlcnByaXNlLXN1cHBvcnQgc2VjdGlvbi5oZWxwIGhncm91cCBoMiB7XG4gICAgZm9udC13ZWlnaHQ6IDcwMDtcbiAgICBmb250LXNpemU6IDM0cHg7XG4gICAgbGV0dGVyLXNwYWNpbmc6IC0uMDRlbTsgfVxuICAjcGFnZS1lbnRlcnByaXNlLXN1cHBvcnQgc2VjdGlvbi5oZWxwIGhncm91cCBwIHtcbiAgICBmb250LXNpemU6IDE4cHg7XG4gICAgZm9udC13ZWlnaHQ6IDUwMDsgfVxuXG4jcGFnZS1lbnRlcnByaXNlLXN1cHBvcnQgc2VjdGlvbi5oZWxwIC5mZWF0dXJlcyB7XG4gIHBhZGRpbmc6IDA7XG4gIGxpc3Qtc3R5bGU6IG5vbmU7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtd3JhcDogd3JhcDtcbiAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xuICBtYXgtd2lkdGg6IDg1MHB4O1xuICBtYXJnaW46IDE2cHggYXV0byAxNnB4OyB9XG4gIEBtZWRpYSAobWF4LXdpZHRoOiA3NjdweCkge1xuICAgICNwYWdlLWVudGVycHJpc2Utc3VwcG9ydCBzZWN0aW9uLmhlbHAgLmZlYXR1cmVzIHtcbiAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOyB9IH1cbiAgI3BhZ2UtZW50ZXJwcmlzZS1zdXBwb3J0IHNlY3Rpb24uaGVscCAuZmVhdHVyZXMgbGkge1xuICAgIGZsZXg6IDAgMCAyNDBweDtcbiAgICBwYWRkaW5nLXRvcDogODBweDtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgbWFyZ2luLWJvdHRvbTogNjRweDsgfVxuICAgICNwYWdlLWVudGVycHJpc2Utc3VwcG9ydCBzZWN0aW9uLmhlbHAgLmZlYXR1cmVzIGxpOjpiZWZvcmUge1xuICAgICAgYmFja2dyb3VuZDogdXJsKFwiL2ltZy9lbnRlcnByaXNlL3N1cHBvcnQvZW50ZXJwcmlzZS1zdXBwb3J0LWljb25zLnBuZ1wiKSBuby1yZXBlYXQgMCAwO1xuICAgICAgYmFja2dyb3VuZC1zaXplOiA0OHB4O1xuICAgICAgd2lkdGg6IDQ4cHg7XG4gICAgICBoZWlnaHQ6IDQ4cHg7XG4gICAgICBjb250ZW50OiAnJztcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgIHRvcDogMDsgfVxuICAgIEBtZWRpYSAobWF4LXdpZHRoOiA3NjdweCkge1xuICAgICAgI3BhZ2UtZW50ZXJwcmlzZS1zdXBwb3J0IHNlY3Rpb24uaGVscCAuZmVhdHVyZXMgbGkge1xuICAgICAgICBmbGV4OiAwIDAgMTAwJTtcbiAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyOyB9XG4gICAgICAgICNwYWdlLWVudGVycHJpc2Utc3VwcG9ydCBzZWN0aW9uLmhlbHAgLmZlYXR1cmVzIGxpOjpiZWZvcmUge1xuICAgICAgICAgIGxlZnQ6IGNhbGMoNTAlIC0gMjRweCk7IH0gfVxuICAgICNwYWdlLWVudGVycHJpc2Utc3VwcG9ydCBzZWN0aW9uLmhlbHAgLmZlYXR1cmVzIGxpLnJldmlld3M6OmJlZm9yZSB7XG4gICAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwIC00OHB4OyB9XG4gICAgI3BhZ2UtZW50ZXJwcmlzZS1zdXBwb3J0IHNlY3Rpb24uaGVscCAuZmVhdHVyZXMgbGkuc2xhOjpiZWZvcmUge1xuICAgICAgYmFja2dyb3VuZC1wb3NpdGlvbjogMCAtOTZweDsgfVxuICAgICNwYWdlLWVudGVycHJpc2Utc3VwcG9ydCBzZWN0aW9uLmhlbHAgLmZlYXR1cmVzIGxpLnRyYWluaW5nOjpiZWZvcmUge1xuICAgICAgYmFja2dyb3VuZC1wb3NpdGlvbjogMCAtMTQ0cHg7IH1cbiAgICAjcGFnZS1lbnRlcnByaXNlLXN1cHBvcnQgc2VjdGlvbi5oZWxwIC5mZWF0dXJlcyBsaS5jb250YWN0OjpiZWZvcmUge1xuICAgICAgYmFja2dyb3VuZC1wb3NpdGlvbjogMCAtMTkycHg7IH1cbiAgICAjcGFnZS1lbnRlcnByaXNlLXN1cHBvcnQgc2VjdGlvbi5oZWxwIC5mZWF0dXJlcyBsaS5zbGFjazo6YmVmb3JlIHtcbiAgICAgIGJhY2tncm91bmQtcG9zaXRpb246IDAgLTI0MHB4OyB9XG4gICAgI3BhZ2UtZW50ZXJwcmlzZS1zdXBwb3J0IHNlY3Rpb24uaGVscCAuZmVhdHVyZXMgbGkgaDQge1xuICAgICAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgICAgIGZvbnQtc2l6ZTogMjBweDtcbiAgICAgIG1hcmdpbi1ib3R0b206IDE2cHg7IH1cbiAgICAjcGFnZS1lbnRlcnByaXNlLXN1cHBvcnQgc2VjdGlvbi5oZWxwIC5mZWF0dXJlcyBsaSBwIHtcbiAgICAgIGZvbnQtc2l6ZTogMTZweDtcbiAgICAgIGZvbnQtd2VpZ2h0OiA0MDA7XG4gICAgICBjb2xvcjogIzcyN2E4NzsgfVxuXG4jcGFnZS1lbnRlcnByaXNlLXN1cHBvcnQgc2VjdGlvbi5wbGFuIHtcbiAgYmFja2dyb3VuZDogI2Y1ZjdmYjtcbiAgcGFkZGluZy10b3A6IDY0cHg7XG4gIHBhZGRpbmctYm90dG9tOiA2NHB4OyB9XG4gICNwYWdlLWVudGVycHJpc2Utc3VwcG9ydCBzZWN0aW9uLnBsYW4gLmNvbnRhaW5lciB7XG4gICAgbWF4LXdpZHRoOiA3NjhweDsgfVxuICAjcGFnZS1lbnRlcnByaXNlLXN1cHBvcnQgc2VjdGlvbi5wbGFuIGhncm91cCBoMiB7XG4gICAgZm9udC13ZWlnaHQ6IDcwMDtcbiAgICBmb250LXNpemU6IDM0cHg7XG4gICAgbGV0dGVyLXNwYWNpbmc6IC0uMDRlbTsgfVxuICAjcGFnZS1lbnRlcnByaXNlLXN1cHBvcnQgc2VjdGlvbi5wbGFuIGhncm91cCBwIHtcbiAgICBtYXJnaW4tdG9wOiAxNnB4O1xuICAgIGNvbG9yOiAjNjI2YTc3O1xuICAgIGZvbnQtd2VpZ2h0OiA1MDA7XG4gICAgbWFyZ2luLWJvdHRvbTogNjRweDsgfVxuXG4jcGFnZS1lbnRlcnByaXNlLXN1cHBvcnQgc2VjdGlvbi5nZXQtaW4tdG91Y2gge1xuICBtYXJnaW4tdG9wOiAwO1xuICBwYWRkaW5nLXRvcDogNjBweDtcbiAgcGFkZGluZy1ib3R0b206IDYwcHg7XG4gIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCh0byByaWdodCwgIzRjOGNmZiAwJSwgIzc2YzZmZiAxMDAlKTsgfVxuICAjcGFnZS1lbnRlcnByaXNlLXN1cHBvcnQgc2VjdGlvbi5nZXQtaW4tdG91Y2ggLmNvbnRhaW5lciB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyOyB9XG4gICAgQG1lZGlhIChtYXgtd2lkdGg6IDc2N3B4KSB7XG4gICAgICAjcGFnZS1lbnRlcnByaXNlLXN1cHBvcnQgc2VjdGlvbi5nZXQtaW4tdG91Y2ggLmNvbnRhaW5lciB7XG4gICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7IH0gfVxuICAjcGFnZS1lbnRlcnByaXNlLXN1cHBvcnQgc2VjdGlvbi5nZXQtaW4tdG91Y2ggaGdyb3VwIHtcbiAgICBwYWRkaW5nLWJvdHRvbTogMzNweDsgfVxuICAjcGFnZS1lbnRlcnByaXNlLXN1cHBvcnQgc2VjdGlvbi5nZXQtaW4tdG91Y2ggaDIge1xuICAgIGZvbnQtc2l6ZTogMjhweDtcbiAgICBsZXR0ZXItc3BhY2luZzogLS4wMmVtO1xuICAgIGZvbnQtd2VpZ2h0OiA2MDA7XG4gICAgZGlzcGxheTogaW5saW5lLWJsb2NrOyB9XG4gICNwYWdlLWVudGVycHJpc2Utc3VwcG9ydCBzZWN0aW9uLmdldC1pbi10b3VjaCBwIHtcbiAgICBjb2xvcjogIzAwM2U4MjtcbiAgICBmb250LXNpemU6IDE4cHg7XG4gICAgZm9udC13ZWlnaHQ6IDUwMDtcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7IH1cbiAgI3BhZ2UtZW50ZXJwcmlzZS1zdXBwb3J0IHNlY3Rpb24uZ2V0LWluLXRvdWNoIC5idG4tZ3JvdXAge1xuICAgIHRleHQtYWxpZ246IHJpZ2h0OyB9XG4gICNwYWdlLWVudGVycHJpc2Utc3VwcG9ydCBzZWN0aW9uLmdldC1pbi10b3VjaCAuYnRuIHtcbiAgICBtYXJnaW4tYm90dG9tOiA4cHg7IH1cbiJdfQ== */\n"
  },
  {
    "path": "content/css/pages/enterprise/why-ionic.css",
    "content": ".ee-hero {\n  max-width: 640px;\n  padding-top: 130px;\n  padding-bottom: 160px; }\n  .ee-hero::before, .ee-hero::after {\n    display: none; }\n  .ee-hero h1 {\n    font-size: 52px;\n    line-height: 62px;\n    max-width: 930px;\n    letter-spacing: -0.03em;\n    color: #020814;\n    margin-top: 0;\n    margin-bottom: 16px; }\n  .ee-hero h4 {\n    font-family: \"Roboto Mono\", Menlo, Monaco, Consolas, \"Courier New\", monospace;\n    font-weight: bold;\n    font-size: 13px;\n    line-height: 26px;\n    letter-spacing: 0.14em;\n    text-transform: uppercase;\n    color: #92A1B3;\n    margin-bottom: 29px; }\n  .ee-hero p {\n    font-family: \"Eina\", \"Helvetica Neue\", Helvetica, sans-serif;\n    font-size: 24px;\n    font-weight: 400;\n    line-height: 36px;\n    letter-spacing: -0.04em;\n    color: rgba(39, 50, 63, 0.8); }\n  .ee-hero .btn {\n    padding-left: 24px;\n    padding-right: 20px;\n    padding-top: 18px;\n    padding-bottom: 18px;\n    font-size: 14px;\n    margin-top: 16px;\n    line-height: 20px;\n    letter-spacing: 0.08em;\n    color: white;\n    text-transform: uppercase;\n    font-weight: 700;\n    background: #3880FF;\n    box-shadow: 0px 2px 4px rgba(2, 8, 20, 0.1), 0px 1px 2px rgba(2, 8, 20, 0.08);\n    border-radius: 210px;\n    display: -ms-flexbox;\n    display: flex;\n    -ms-flex-align: center;\n        align-items: center; }\n    .ee-hero .btn::after {\n      background-image: url('data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"white\" viewBox=\"0 0 512 512\"><path d=\"M85 277.375h259.704L225.002 397.077 256 427l171-171L256 85l-29.922 29.924 118.626 119.701H85v42.75z\"/></svg>');\n      background-size: 100%;\n      content: '';\n      height: 20px;\n      width: 20px;\n      display: block;\n      margin-left: 8px;\n      -webkit-transform: translateY(-1px);\n              transform: translateY(-1px); }\n    .ee-hero .btn:hover {\n      background-color: #4f8bf5; }\n  .ee-hero--large h1 {\n    font-size: 62px;\n    line-height: 69px; }\n  .ee-hero--wide {\n    max-width: 960px; }\n  .ee-hero--centered {\n    display: -ms-flexbox;\n    display: flex;\n    -ms-flex-direction: column;\n        flex-direction: column;\n    -ms-flex-pack: center;\n        justify-content: center;\n    -ms-flex-align: center;\n        align-items: center;\n    text-align: center;\n    margin-left: auto;\n    margin-right: auto; }\n  @media (max-width: 767px) {\n    .ee-hero {\n      padding-top: 70px;\n      padding-bottom: 0; }\n      .ee-hero h1 {\n        font-size: 44px;\n        line-height: 52px; }\n      .ee-hero--large h1 {\n        font-size: 50px;\n        line-height: 60px; } }\n  @media (max-width: 480px) {\n    .ee-hero h1 {\n      font-size: 36px;\n      line-height: 44px;\n      margin-bottom: 6px; }\n    .ee-hero--large h1 {\n      font-size: 42px;\n      line-height: 52px; }\n    .ee-hero .btn {\n      margin-top: 8px; } }\n\n.ee-main {\n  margin-top: 0; }\n  .ee-main section {\n    margin-bottom: 200px; }\n  .ee-main .left,\n  .ee-main .right,\n  .ee-main .center {\n    display: -ms-flexbox;\n    display: flex; }\n    .ee-main .left::before, .ee-main .left::after,\n    .ee-main .right::before,\n    .ee-main .right::after,\n    .ee-main .center::before,\n    .ee-main .center::after {\n      display: none; }\n  .ee-main .left .content,\n  .ee-main .right .content {\n    max-width: 480px; }\n    @media (max-width: 767px) {\n      .ee-main .left .content,\n      .ee-main .right .content {\n        max-width: 100%;\n        text-align: center; }\n        .ee-main .left .content li,\n        .ee-main .right .content li {\n          text-align: left; } }\n  .ee-main .left {\n    -ms-flex-direction: row;\n        flex-direction: row; }\n    .ee-main .left .graphics {\n      margin-left: auto; }\n  .ee-main .right {\n    -ms-flex-direction: row-reverse;\n        flex-direction: row-reverse;\n    margin-left: auto; }\n    .ee-main .right .graphics {\n      margin-right: auto; }\n  .ee-main .center {\n    -ms-flex-direction: column;\n        flex-direction: column;\n    -ms-flex-align: center;\n        align-items: center;\n    text-align: center; }\n    .ee-main .center .content {\n      width: 894px;\n      max-width: 100%; }\n  .ee-main .full .content {\n    max-width: 568px; }\n  @media (max-width: 767px) {\n    .ee-main .right,\n    .ee-main .left {\n      -ms-flex-direction: column-reverse;\n          flex-direction: column-reverse;\n      -ms-flex-align: center;\n          align-items: center; }\n      .ee-main .right .graphics,\n      .ee-main .left .graphics {\n        margin-bottom: 24px;\n        margin-left: 0;\n        margin-right: 0; }\n    .ee-main section {\n      margin-bottom: 100px; } }\n  .ee-main .graphics {\n    -ms-flex-pack: end;\n        justify-content: flex-end; }\n    .ee-main .graphics img {\n      width: 100%; }\n  .ee-main h2 {\n    font-size: 44px;\n    line-height: 51px;\n    letter-spacing: -0.03em; }\n    .ee-main h2:first-child {\n      margin-top: 0; }\n  .ee-main .ee-section__title {\n    font-family: \"Roboto Mono\", Menlo, Monaco, Consolas, \"Courier New\", monospace;\n    font-style: normal;\n    font-weight: bold;\n    font-size: 12px;\n    line-height: 23px;\n    letter-spacing: 0.14em;\n    text-transform: uppercase;\n    color: #5B708B;\n    margin-top: 0; }\n  .ee-main .ee-section__cta {\n    display: inline-block;\n    font-size: 18px;\n    font-weight: 500;\n    margin-top: 16px; }\n  .ee-main p {\n    font-size: 20px;\n    line-height: 31px;\n    letter-spacing: -0.02em;\n    color: #5B708B;\n    margin-top: 18px; }\n    .ee-main p.sm {\n      font-size: 16px;\n      line-height: 29px;\n      letter-spacing: -0.01em; }\n  .ee-main ul:not(.frameworks) {\n    margin-top: 54px; }\n  .ee-main .content ul {\n    padding-left: 0; }\n  .ee-main .content li {\n    font-size: 16px;\n    line-height: 23px;\n    letter-spacing: -0.02em;\n    color: #1A232F;\n    margin-bottom: 40px;\n    padding-left: 30px;\n    list-style: none;\n    position: relative; }\n    .ee-main .content li::before {\n      background-image: url(\"/img/enterprise/check.svg\");\n      background-size: 100%;\n      content: '';\n      height: 10px;\n      width: 13px;\n      position: absolute;\n      left: 0;\n      top: 8px; }\n  .ee-main .features {\n    display: -ms-grid;\n    display: grid;\n    -ms-grid-columns: 1fr 1fr 1fr;\n        grid-template-columns: 1fr 1fr 1fr;\n    grid-column-gap: 64px;\n    grid-row-gap: 24px;\n    padding: 0; }\n    .ee-main .features li {\n      list-style: none; }\n    .ee-main .features .icon {\n      margin-bottom: 16px;\n      width: 48px; }\n    @media (max-width: 991px) {\n      .ee-main .features {\n        -ms-grid-columns: 1fr 1fr;\n            grid-template-columns: 1fr 1fr; } }\n    @media (max-width: 500px) {\n      .ee-main .features {\n        -ms-grid-columns: 1fr;\n            grid-template-columns: 1fr; } }\n  .ee-main .cta-card {\n    background: #4a8bfc;\n    border-radius: 12px;\n    padding: 72px 72px 60px;\n    background-size: cover;\n    color: white; }\n    .ee-main .cta-card .ee-section__title,\n    .ee-main .cta-card p {\n      color: #CED6E0; }\n\n#how-to {\n  margin-bottom: 0;\n  position: relative;\n  padding-top: 140px; }\n  #how-to::before {\n    position: absolute;\n    top: 0;\n    width: 100vw;\n    border-top: 1px solid rgba(146, 161, 179, 0.3);\n    content: '';\n    display: block; }\n\n.cards--red-v-blue {\n  display: -ms-flexbox;\n  display: flex;\n  text-align: left;\n  -ms-flex-pack: center;\n      justify-content: center;\n  margin-top: 38px; }\n  .cards--red-v-blue__card {\n    background: #7CABFF;\n    border-radius: 8px;\n    padding: 40px 40px 34px;\n    display: -ms-flexbox;\n    display: flex;\n    -ms-flex-direction: column;\n        flex-direction: column;\n    -ms-flex-align: start;\n        align-items: flex-start;\n    margin-right: 24px;\n    -ms-flex: 0 1 460px;\n        flex: 0 1 460px;\n    border-radius: 8px; }\n    .cards--red-v-blue__card:last-child {\n      margin-right: 0; }\n    .cards--red-v-blue__card:nth-child(2) {\n      background: #F88D8D; }\n      .cards--red-v-blue__card:nth-child(2) .btn {\n        background: rgba(244, 84, 84, 0.5); }\n  .cards--red-v-blue h3 {\n    font-size: 24px;\n    line-height: normal;\n    letter-spacing: -0.02em;\n    color: white;\n    margin-top: 0; }\n  .cards--red-v-blue p {\n    font-size: 18px;\n    line-height: 26px;\n    letter-spacing: -0.02em;\n    color: rgba(255, 255, 255, 0.7);\n    margin-top: 0;\n    margin-bottom: 22px; }\n  .cards--red-v-blue .btn {\n    margin-top: auto;\n    font-size: 14px;\n    line-height: 22px;\n    letter-spacing: 0.09em;\n    text-transform: uppercase;\n    padding: 10px 14px;\n    font-weight: 600;\n    border-radius: 8px;\n    background: rgba(56, 128, 255, 0.5); }\n    .cards--red-v-blue .btn ion-icon {\n      display: inline-block;\n      height: 14px;\n      width: 14px;\n      vertical-align: -2px; }\n  @media (max-width: 767px) {\n    .cards--red-v-blue {\n      -ms-flex-direction: column;\n          flex-direction: column;\n      -ms-flex-align: center;\n          align-items: center; }\n      .cards--red-v-blue__card {\n        -ms-flex: auto;\n            flex: auto;\n        margin-right: 0;\n        margin-top: 20px;\n        max-width: 460px; } }\n\naside {\n  background: linear-gradient(180deg, #F9FAFB 0%, #FFFFFF 100%);\n  margin-top: -60px;\n  padding-top: 200px;\n  padding-bottom: 120px; }\n  aside p {\n    color: #414D5C; }\n  aside .content {\n    max-width: 432px;\n    margin: 0 auto;\n    text-align: center;\n    display: block; }\n\n.ee-get-started {\n  max-width: 700px; }\n  .ee-get-started h3 {\n    color: #414D5C; }\n\n.resources {\n  padding-bottom: 120px; }\n  @media (max-width: 768px) {\n    .resources {\n      padding-bottom: 60px; } }\n  .resources .cards {\n    list-style-type: none;\n    margin: 0;\n    padding: 0;\n    display: -ms-flexbox;\n    display: flex;\n    margin-left: -24px;\n    margin-right: -24px; }\n  .resources hgroup {\n    display: -ms-flexbox;\n    display: flex;\n    -ms-flex-pack: justify;\n        justify-content: space-between;\n    -ms-flex-align: baseline;\n        align-items: baseline; }\n    .resources hgroup h3 {\n      font-weight: 600;\n      line-height: normal;\n      font-size: 28px;\n      letter-spacing: -0.02em;\n      color: #1A232F;\n      margin-bottom: 0; }\n    .resources hgroup h4 {\n      font-weight: 600;\n      font-size: 24px;\n      line-height: normal;\n      letter-spacing: -0.02em;\n      color: #1A232F; }\n    .resources hgroup h5 {\n      font-weight: 700;\n      line-height: 1;\n      font-size: 14px;\n      letter-spacing: 0.08em;\n      color: #3880FF;\n      text-transform: uppercase; }\n    .resources hgroup ion-icon {\n      -webkit-transform: translateY(2px);\n              transform: translateY(2px); }\n  .resources .cards li {\n    display: block;\n    -ms-flex: 0 0 33.33%;\n        flex: 0 0 33.33%;\n    padding: 24px; }\n    .resources .cards li a {\n      display: block;\n      width: 100%; }\n    .resources .cards li .img-wrapper {\n      overflow: hidden;\n      border-radius: 6px; }\n    .resources .cards li img {\n      width: 100%; }\n    .resources .cards li h6 {\n      line-height: 23px;\n      font-size: 12px;\n      letter-spacing: 0.12em;\n      text-transform: uppercase;\n      color: #B2BECD;\n      margin-bottom: 0;\n      margin-top: 16px; }\n    .resources .cards li h4 {\n      font-size: 20px;\n      margin-top: 10px;\n      color: #1A232F;\n      font-weight: 600; }\n    .resources .cards li p {\n      color: #5B708B;\n      line-height: 22px;\n      font-size: 14px;\n      letter-spacing: -0.02em; }\n  @media (max-width: 992px) {\n    .resources .cards {\n      margin-left: -12px;\n      margin-right: -12px; }\n    .resources .cards li {\n      padding: 12px; } }\n  @media (max-width: 768px) {\n    .resources .cards {\n      -ms-flex-wrap: wrap;\n          flex-wrap: wrap; }\n    .resources .cards li {\n      -ms-flex: 0 0 50%;\n          flex: 0 0 50%; } }\n  @media (max-width: 480px) {\n    .resources .cards li {\n      -ms-flex: 0 0 100%;\n          flex: 0 0 100%; }\n    .resources h5 {\n      display: none; } }\n\n.ee-main .features li p,\n.ee-main .cards li p,\n.resources .features li p,\n.resources .cards li p {\n  font-size: 16px;\n  line-height: 29px;\n  letter-spacing: -0.01em;\n  color: #73849A;\n  margin-top: 0; }\n\n.ee-main .features li h4,\n.ee-main .cards li h4,\n.resources .features li h4,\n.resources .cards li h4 {\n  font-size: 20px;\n  line-height: normal;\n  letter-spacing: -0.02em;\n  color: #020814;\n  font-weight: 600; }\n\n.resources .cards {\n  margin-top: 0 !important;\n  text-align: left;\n  -ms-flex-wrap: wrap;\n      flex-wrap: wrap; }\n  .resources .cards .img-wrapper {\n    border-radius: 6px; }\n    .resources .cards .img-wrapper + h4 {\n      margin-top: 24px; }\n  @media (min-width: 1220px) {\n    .resources .cards {\n      margin-left: -40px;\n      margin-right: -40px; }\n      .resources .cards li {\n        padding: 40px; } }\n\n.resources .resources__customer-logos {\n  display: -ms-flexbox;\n  display: flex;\n  margin: 26px auto 0;\n  padding: 0;\n  -ms-flex-pack: justify;\n      justify-content: space-between;\n  max-width: 780px;\n  width: 100%; }\n  .resources .resources__customer-logos li {\n    background: url(\"/img/enterprise/customer-logos.png\");\n    background-size: 428px 46px;\n    background-repeat: no-repeat;\n    display: block;\n    height: 46px; }\n  @media (max-width: 768px) {\n    .resources .resources__customer-logos {\n      -ms-flex-pack: center;\n          justify-content: center;\n      -ms-flex-wrap: wrap;\n          flex-wrap: wrap;\n      max-width: 460px; }\n      .resources .resources__customer-logos li {\n        margin: 20px; } }\n  .resources .resources__customer-logos .mastercard {\n    width: 58px; }\n  .resources .resources__customer-logos .nationwide {\n    background-position: -58px 0;\n    width: 33px; }\n  .resources .resources__customer-logos .uniqlo {\n    background-position: -91px 0;\n    width: 65px; }\n  .resources .resources__customer-logos .ibm {\n    background-position: -156px 0;\n    width: 64px; }\n  .resources .resources__customer-logos .ing {\n    background-position: -222px 0;\n    width: 103px; }\n  .resources .resources__customer-logos .sap {\n    background-position: -326px 0;\n    width: 56px; }\n  .resources .resources__customer-logos .nasa {\n    background-position: -380px 0;\n    width: 50px; }\n\n#experiences .content {\n  max-width: 500px; }\n\n#experiences .graphics {\n  width: 580px;\n  margin-right: 28px; }\n  #experiences .graphics img {\n    width: 757px;\n    float: right; }\n  @media (max-width: 1219px) {\n    #experiences .graphics {\n      width: 320px;\n      padding-right: 20px; } }\n  @media (max-width: 767px) {\n    #experiences .graphics {\n      width: 100%;\n      margin-right: 0; }\n      #experiences .graphics img {\n        width: 100%;\n        float: none;\n        max-width: 757px; } }\n\n#streamline .graphics {\n  padding-left: 20px; }\n\n#talent .graphics {\n  width: 560px; }\n  @media (max-width: 1219px) {\n    #talent .graphics {\n      width: calc(100% - 520px); } }\n  @media (max-width: 767px) {\n    #talent .graphics {\n      width: 100%;\n      max-width: 560px;\n      margin: 0 auto 20px; } }\n\n#create .graphics {\n  width: 593px;\n  padding-left: 20px;\n  max-width: 100%; }\n\n#developers .graphics {\n  padding-right: 20px; }\n\n/*# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndoeS1pb25pYy5jc3MiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7RUFDRSxpQkFBaUI7RUFDakIsbUJBQW1CO0VBQ25CLHNCQUFzQixFQUFFO0VBQ3hCO0lBQ0UsY0FBYyxFQUFFO0VBQ2xCO0lBQ0UsZ0JBQWdCO0lBQ2hCLGtCQUFrQjtJQUNsQixpQkFBaUI7SUFDakIsd0JBQXdCO0lBQ3hCLGVBQWU7SUFDZixjQUFjO0lBQ2Qsb0JBQW9CLEVBQUU7RUFDeEI7SUFDRSw4RUFBOEU7SUFDOUUsa0JBQWtCO0lBQ2xCLGdCQUFnQjtJQUNoQixrQkFBa0I7SUFDbEIsdUJBQXVCO0lBQ3ZCLDBCQUEwQjtJQUMxQixlQUFlO0lBQ2Ysb0JBQW9CLEVBQUU7RUFDeEI7SUFDRSw2REFBNkQ7SUFDN0QsZ0JBQWdCO0lBQ2hCLGlCQUFpQjtJQUNqQixrQkFBa0I7SUFDbEIsd0JBQXdCO0lBQ3hCLDZCQUE2QixFQUFFO0VBQ2pDO0lBQ0UsbUJBQW1CO0lBQ25CLG9CQUFvQjtJQUNwQixrQkFBa0I7SUFDbEIscUJBQXFCO0lBQ3JCLGdCQUFnQjtJQUNoQixpQkFBaUI7SUFDakIsa0JBQWtCO0lBQ2xCLHVCQUF1QjtJQUN2QixhQUFhO0lBQ2IsMEJBQTBCO0lBQzFCLGlCQUFpQjtJQUNqQixvQkFBb0I7SUFDcEIsOEVBQThFO0lBQzlFLHFCQUFxQjtJQUNyQixxQkFBYztJQUFkLGNBQWM7SUFDZCx1QkFBb0I7UUFBcEIsb0JBQW9CLEVBQUU7SUFDdEI7TUFDRSxrUEFBa1A7TUFDbFAsc0JBQXNCO01BQ3RCLFlBQVk7TUFDWixhQUFhO01BQ2IsWUFBWTtNQUNaLGVBQWU7TUFDZixpQkFBaUI7TUFDakIsb0NBQTRCO2NBQTVCLDRCQUE0QixFQUFFO0lBQ2hDO01BQ0UsMEJBQTBCLEVBQUU7RUFDaEM7SUFDRSxnQkFBZ0I7SUFDaEIsa0JBQWtCLEVBQUU7RUFDdEI7SUFDRSxpQkFBaUIsRUFBRTtFQUNyQjtJQUNFLHFCQUFjO0lBQWQsY0FBYztJQUNkLDJCQUF1QjtRQUF2Qix1QkFBdUI7SUFDdkIsc0JBQXdCO1FBQXhCLHdCQUF3QjtJQUN4Qix1QkFBb0I7UUFBcEIsb0JBQW9CO0lBQ3BCLG1CQUFtQjtJQUNuQixrQkFBa0I7SUFDbEIsbUJBQW1CLEVBQUU7RUFDdkI7SUFDRTtNQUNFLGtCQUFrQjtNQUNsQixrQkFBa0IsRUFBRTtNQUNwQjtRQUNFLGdCQUFnQjtRQUNoQixrQkFBa0IsRUFBRTtNQUN0QjtRQUNFLGdCQUFnQjtRQUNoQixrQkFBa0IsRUFBRSxFQUFFO0VBQzVCO0lBQ0U7TUFDRSxnQkFBZ0I7TUFDaEIsa0JBQWtCO01BQ2xCLG1CQUFtQixFQUFFO0lBQ3ZCO01BQ0UsZ0JBQWdCO01BQ2hCLGtCQUFrQixFQUFFO0lBQ3RCO01BQ0UsZ0JBQWdCLEVBQUUsRUFBRTs7QUFFMUI7RUFDRSxjQUFjLEVBQUU7RUFDaEI7SUFDRSxxQkFBcUIsRUFBRTtFQUN6Qjs7O0lBR0UscUJBQWM7SUFBZCxjQUFjLEVBQUU7SUFDaEI7Ozs7O01BS0UsY0FBYyxFQUFFO0VBQ3BCOztJQUVFLGlCQUFpQixFQUFFO0lBQ25CO01BQ0U7O1FBRUUsZ0JBQWdCO1FBQ2hCLG1CQUFtQixFQUFFO1FBQ3JCOztVQUVFLGlCQUFpQixFQUFFLEVBQUU7RUFDN0I7SUFDRSx3QkFBb0I7UUFBcEIsb0JBQW9CLEVBQUU7SUFDdEI7TUFDRSxrQkFBa0IsRUFBRTtFQUN4QjtJQUNFLGdDQUE0QjtRQUE1Qiw0QkFBNEI7SUFDNUIsa0JBQWtCLEVBQUU7SUFDcEI7TUFDRSxtQkFBbUIsRUFBRTtFQUN6QjtJQUNFLDJCQUF1QjtRQUF2Qix1QkFBdUI7SUFDdkIsdUJBQW9CO1FBQXBCLG9CQUFvQjtJQUNwQixtQkFBbUIsRUFBRTtJQUNyQjtNQUNFLGFBQWE7TUFDYixnQkFBZ0IsRUFBRTtFQUN0QjtJQUNFLGlCQUFpQixFQUFFO0VBQ3JCO0lBQ0U7O01BRUUsbUNBQStCO1VBQS9CLCtCQUErQjtNQUMvQix1QkFBb0I7VUFBcEIsb0JBQW9CLEVBQUU7TUFDdEI7O1FBRUUsb0JBQW9CO1FBQ3BCLGVBQWU7UUFDZixnQkFBZ0IsRUFBRTtJQUN0QjtNQUNFLHFCQUFxQixFQUFFLEVBQUU7RUFDN0I7SUFDRSxtQkFBMEI7UUFBMUIsMEJBQTBCLEVBQUU7SUFDNUI7TUFDRSxZQUFZLEVBQUU7RUFDbEI7SUFDRSxnQkFBZ0I7SUFDaEIsa0JBQWtCO0lBQ2xCLHdCQUF3QixFQUFFO0lBQzFCO01BQ0UsY0FBYyxFQUFFO0VBQ3BCO0lBQ0UsOEVBQThFO0lBQzlFLG1CQUFtQjtJQUNuQixrQkFBa0I7SUFDbEIsZ0JBQWdCO0lBQ2hCLGtCQUFrQjtJQUNsQix1QkFBdUI7SUFDdkIsMEJBQTBCO0lBQzFCLGVBQWU7SUFDZixjQUFjLEVBQUU7RUFDbEI7SUFDRSxzQkFBc0I7SUFDdEIsZ0JBQWdCO0lBQ2hCLGlCQUFpQjtJQUNqQixpQkFBaUIsRUFBRTtFQUNyQjtJQUNFLGdCQUFnQjtJQUNoQixrQkFBa0I7SUFDbEIsd0JBQXdCO0lBQ3hCLGVBQWU7SUFDZixpQkFBaUIsRUFBRTtJQUNuQjtNQUNFLGdCQUFnQjtNQUNoQixrQkFBa0I7TUFDbEIsd0JBQXdCLEVBQUU7RUFDOUI7SUFDRSxpQkFBaUIsRUFBRTtFQUNyQjtJQUNFLGdCQUFnQixFQUFFO0VBQ3BCO0lBQ0UsZ0JBQWdCO0lBQ2hCLGtCQUFrQjtJQUNsQix3QkFBd0I7SUFDeEIsZUFBZTtJQUNmLG9CQUFvQjtJQUNwQixtQkFBbUI7SUFDbkIsaUJBQWlCO0lBQ2pCLG1CQUFtQixFQUFFO0lBQ3JCO01BQ0UsbURBQW1EO01BQ25ELHNCQUFzQjtNQUN0QixZQUFZO01BQ1osYUFBYTtNQUNiLFlBQVk7TUFDWixtQkFBbUI7TUFDbkIsUUFBUTtNQUNSLFNBQVMsRUFBRTtFQUNmO0lBQ0Usa0JBQWM7SUFBZCxjQUFjO0lBQ2QsOEJBQW1DO1FBQW5DLG1DQUFtQztJQUNuQyxzQkFBc0I7SUFDdEIsbUJBQW1CO0lBQ25CLFdBQVcsRUFBRTtJQUNiO01BQ0UsaUJBQWlCLEVBQUU7SUFDckI7TUFDRSxvQkFBb0I7TUFDcEIsWUFBWSxFQUFFO0lBQ2hCO01BQ0U7UUFDRSwwQkFBK0I7WUFBL0IsK0JBQStCLEVBQUUsRUFBRTtJQUN2QztNQUNFO1FBQ0Usc0JBQTJCO1lBQTNCLDJCQUEyQixFQUFFLEVBQUU7RUFDckM7SUFDRSxvQkFBb0I7SUFDcEIsb0JBQW9CO0lBQ3BCLHdCQUF3QjtJQUN4Qix1QkFBdUI7SUFDdkIsYUFBYSxFQUFFO0lBQ2Y7O01BRUUsZUFBZSxFQUFFOztBQUV2QjtFQUNFLGlCQUFpQjtFQUNqQixtQkFBbUI7RUFDbkIsbUJBQW1CLEVBQUU7RUFDckI7SUFDRSxtQkFBbUI7SUFDbkIsT0FBTztJQUNQLGFBQWE7SUFDYiwrQ0FBK0M7SUFDL0MsWUFBWTtJQUNaLGVBQWUsRUFBRTs7QUFFckI7RUFDRSxxQkFBYztFQUFkLGNBQWM7RUFDZCxpQkFBaUI7RUFDakIsc0JBQXdCO01BQXhCLHdCQUF3QjtFQUN4QixpQkFBaUIsRUFBRTtFQUNuQjtJQUNFLG9CQUFvQjtJQUNwQixtQkFBbUI7SUFDbkIsd0JBQXdCO0lBQ3hCLHFCQUFjO0lBQWQsY0FBYztJQUNkLDJCQUF1QjtRQUF2Qix1QkFBdUI7SUFDdkIsc0JBQXdCO1FBQXhCLHdCQUF3QjtJQUN4QixtQkFBbUI7SUFDbkIsb0JBQWdCO1FBQWhCLGdCQUFnQjtJQUNoQixtQkFBbUIsRUFBRTtJQUNyQjtNQUNFLGdCQUFnQixFQUFFO0lBQ3BCO01BQ0Usb0JBQW9CLEVBQUU7TUFDdEI7UUFDRSxtQ0FBbUMsRUFBRTtFQUMzQztJQUNFLGdCQUFnQjtJQUNoQixvQkFBb0I7SUFDcEIsd0JBQXdCO0lBQ3hCLGFBQWE7SUFDYixjQUFjLEVBQUU7RUFDbEI7SUFDRSxnQkFBZ0I7SUFDaEIsa0JBQWtCO0lBQ2xCLHdCQUF3QjtJQUN4QixnQ0FBZ0M7SUFDaEMsY0FBYztJQUNkLG9CQUFvQixFQUFFO0VBQ3hCO0lBQ0UsaUJBQWlCO0lBQ2pCLGdCQUFnQjtJQUNoQixrQkFBa0I7SUFDbEIsdUJBQXVCO0lBQ3ZCLDBCQUEwQjtJQUMxQixtQkFBbUI7SUFDbkIsaUJBQWlCO0lBQ2pCLG1CQUFtQjtJQUNuQixvQ0FBb0MsRUFBRTtJQUN0QztNQUNFLHNCQUFzQjtNQUN0QixhQUFhO01BQ2IsWUFBWTtNQUNaLHFCQUFxQixFQUFFO0VBQzNCO0lBQ0U7TUFDRSwyQkFBdUI7VUFBdkIsdUJBQXVCO01BQ3ZCLHVCQUFvQjtVQUFwQixvQkFBb0IsRUFBRTtNQUN0QjtRQUNFLGVBQVc7WUFBWCxXQUFXO1FBQ1gsZ0JBQWdCO1FBQ2hCLGlCQUFpQjtRQUNqQixpQkFBaUIsRUFBRSxFQUFFOztBQUU3QjtFQUNFLDhEQUE4RDtFQUM5RCxrQkFBa0I7RUFDbEIsbUJBQW1CO0VBQ25CLHNCQUFzQixFQUFFO0VBQ3hCO0lBQ0UsZUFBZSxFQUFFO0VBQ25CO0lBQ0UsaUJBQWlCO0lBQ2pCLGVBQWU7SUFDZixtQkFBbUI7SUFDbkIsZUFBZSxFQUFFOztBQUVyQjtFQUNFLGlCQUFpQixFQUFFO0VBQ25CO0lBQ0UsZUFBZSxFQUFFOztBQUVyQjtFQUNFLHNCQUFzQixFQUFFO0VBQ3hCO0lBQ0U7TUFDRSxxQkFBcUIsRUFBRSxFQUFFO0VBQzdCO0lBQ0Usc0JBQXNCO0lBQ3RCLFVBQVU7SUFDVixXQUFXO0lBQ1gscUJBQWM7SUFBZCxjQUFjO0lBQ2QsbUJBQW1CO0lBQ25CLG9CQUFvQixFQUFFO0VBQ3hCO0lBQ0UscUJBQWM7SUFBZCxjQUFjO0lBQ2QsdUJBQStCO1FBQS9CLCtCQUErQjtJQUMvQix5QkFBc0I7UUFBdEIsc0JBQXNCLEVBQUU7SUFDeEI7TUFDRSxpQkFBaUI7TUFDakIsb0JBQW9CO01BQ3BCLGdCQUFnQjtNQUNoQix3QkFBd0I7TUFDeEIsZUFBZTtNQUNmLGlCQUFpQixFQUFFO0lBQ3JCO01BQ0UsaUJBQWlCO01BQ2pCLGdCQUFnQjtNQUNoQixvQkFBb0I7TUFDcEIsd0JBQXdCO01BQ3hCLGVBQWUsRUFBRTtJQUNuQjtNQUNFLGlCQUFpQjtNQUNqQixlQUFlO01BQ2YsZ0JBQWdCO01BQ2hCLHVCQUF1QjtNQUN2QixlQUFlO01BQ2YsMEJBQTBCLEVBQUU7SUFDOUI7TUFDRSxtQ0FBMkI7Y0FBM0IsMkJBQTJCLEVBQUU7RUFDakM7SUFDRSxlQUFlO0lBQ2YscUJBQWlCO1FBQWpCLGlCQUFpQjtJQUNqQixjQUFjLEVBQUU7SUFDaEI7TUFDRSxlQUFlO01BQ2YsWUFBWSxFQUFFO0lBQ2hCO01BQ0UsaUJBQWlCO01BQ2pCLG1CQUFtQixFQUFFO0lBQ3ZCO01BQ0UsWUFBWSxFQUFFO0lBQ2hCO01BQ0Usa0JBQWtCO01BQ2xCLGdCQUFnQjtNQUNoQix1QkFBdUI7TUFDdkIsMEJBQTBCO01BQzFCLGVBQWU7TUFDZixpQkFBaUI7TUFDakIsaUJBQWlCLEVBQUU7SUFDckI7TUFDRSxnQkFBZ0I7TUFDaEIsaUJBQWlCO01BQ2pCLGVBQWU7TUFDZixpQkFBaUIsRUFBRTtJQUNyQjtNQUNFLGVBQWU7TUFDZixrQkFBa0I7TUFDbEIsZ0JBQWdCO01BQ2hCLHdCQUF3QixFQUFFO0VBQzlCO0lBQ0U7TUFDRSxtQkFBbUI7TUFDbkIsb0JBQW9CLEVBQUU7SUFDeEI7TUFDRSxjQUFjLEVBQUUsRUFBRTtFQUN0QjtJQUNFO01BQ0Usb0JBQWdCO1VBQWhCLGdCQUFnQixFQUFFO0lBQ3BCO01BQ0Usa0JBQWM7VUFBZCxjQUFjLEVBQUUsRUFBRTtFQUN0QjtJQUNFO01BQ0UsbUJBQWU7VUFBZixlQUFlLEVBQUU7SUFDbkI7TUFDRSxjQUFjLEVBQUUsRUFBRTs7QUFFeEI7Ozs7RUFJRSxnQkFBZ0I7RUFDaEIsa0JBQWtCO0VBQ2xCLHdCQUF3QjtFQUN4QixlQUFlO0VBQ2YsY0FBYyxFQUFFOztBQUVsQjs7OztFQUlFLGdCQUFnQjtFQUNoQixvQkFBb0I7RUFDcEIsd0JBQXdCO0VBQ3hCLGVBQWU7RUFDZixpQkFBaUIsRUFBRTs7QUFFckI7RUFDRSx5QkFBeUI7RUFDekIsaUJBQWlCO0VBQ2pCLG9CQUFnQjtNQUFoQixnQkFBZ0IsRUFBRTtFQUNsQjtJQUNFLG1CQUFtQixFQUFFO0lBQ3JCO01BQ0UsaUJBQWlCLEVBQUU7RUFDdkI7SUFDRTtNQUNFLG1CQUFtQjtNQUNuQixvQkFBb0IsRUFBRTtNQUN0QjtRQUNFLGNBQWMsRUFBRSxFQUFFOztBQUUxQjtFQUNFLHFCQUFjO0VBQWQsY0FBYztFQUNkLG9CQUFvQjtFQUNwQixXQUFXO0VBQ1gsdUJBQStCO01BQS9CLCtCQUErQjtFQUMvQixpQkFBaUI7RUFDakIsWUFBWSxFQUFFO0VBQ2Q7SUFDRSxzREFBc0Q7SUFDdEQsNEJBQTRCO0lBQzVCLDZCQUE2QjtJQUM3QixlQUFlO0lBQ2YsYUFBYSxFQUFFO0VBQ2pCO0lBQ0U7TUFDRSxzQkFBd0I7VUFBeEIsd0JBQXdCO01BQ3hCLG9CQUFnQjtVQUFoQixnQkFBZ0I7TUFDaEIsaUJBQWlCLEVBQUU7TUFDbkI7UUFDRSxhQUFhLEVBQUUsRUFBRTtFQUN2QjtJQUNFLFlBQVksRUFBRTtFQUNoQjtJQUNFLDZCQUE2QjtJQUM3QixZQUFZLEVBQUU7RUFDaEI7SUFDRSw2QkFBNkI7SUFDN0IsWUFBWSxFQUFFO0VBQ2hCO0lBQ0UsOEJBQThCO0lBQzlCLFlBQVksRUFBRTtFQUNoQjtJQUNFLDhCQUE4QjtJQUM5QixhQUFhLEVBQUU7RUFDakI7SUFDRSw4QkFBOEI7SUFDOUIsWUFBWSxFQUFFO0VBQ2hCO0lBQ0UsOEJBQThCO0lBQzlCLFlBQVksRUFBRTs7QUFFbEI7RUFDRSxpQkFBaUIsRUFBRTs7QUFFckI7RUFDRSxhQUFhO0VBQ2IsbUJBQW1CLEVBQUU7RUFDckI7SUFDRSxhQUFhO0lBQ2IsYUFBYSxFQUFFO0VBQ2pCO0lBQ0U7TUFDRSxhQUFhO01BQ2Isb0JBQW9CLEVBQUUsRUFBRTtFQUM1QjtJQUNFO01BQ0UsWUFBWTtNQUNaLGdCQUFnQixFQUFFO01BQ2xCO1FBQ0UsWUFBWTtRQUNaLFlBQVk7UUFDWixpQkFBaUIsRUFBRSxFQUFFOztBQUU3QjtFQUNFLG1CQUFtQixFQUFFOztBQUV2QjtFQUNFLGFBQWEsRUFBRTtFQUNmO0lBQ0U7TUFDRSwwQkFBMEIsRUFBRSxFQUFFO0VBQ2xDO0lBQ0U7TUFDRSxZQUFZO01BQ1osaUJBQWlCO01BQ2pCLG9CQUFvQixFQUFFLEVBQUU7O0FBRTlCO0VBQ0UsYUFBYTtFQUNiLG1CQUFtQjtFQUNuQixnQkFBZ0IsRUFBRTs7QUFFcEI7RUFDRSxvQkFBb0IsRUFBRSIsImZpbGUiOiJwYWdlcy9lbnRlcnByaXNlL3doeS1pb25pYy5jc3MiLCJzb3VyY2VzQ29udGVudCI6WyIuZWUtaGVybyB7XG4gIG1heC13aWR0aDogNjQwcHg7XG4gIHBhZGRpbmctdG9wOiAxMzBweDtcbiAgcGFkZGluZy1ib3R0b206IDE2MHB4OyB9XG4gIC5lZS1oZXJvOjpiZWZvcmUsIC5lZS1oZXJvOjphZnRlciB7XG4gICAgZGlzcGxheTogbm9uZTsgfVxuICAuZWUtaGVybyBoMSB7XG4gICAgZm9udC1zaXplOiA1MnB4O1xuICAgIGxpbmUtaGVpZ2h0OiA2MnB4O1xuICAgIG1heC13aWR0aDogOTMwcHg7XG4gICAgbGV0dGVyLXNwYWNpbmc6IC0wLjAzZW07XG4gICAgY29sb3I6ICMwMjA4MTQ7XG4gICAgbWFyZ2luLXRvcDogMDtcbiAgICBtYXJnaW4tYm90dG9tOiAxNnB4OyB9XG4gIC5lZS1oZXJvIGg0IHtcbiAgICBmb250LWZhbWlseTogXCJSb2JvdG8gTW9ub1wiLCBNZW5sbywgTW9uYWNvLCBDb25zb2xhcywgXCJDb3VyaWVyIE5ld1wiLCBtb25vc3BhY2U7XG4gICAgZm9udC13ZWlnaHQ6IGJvbGQ7XG4gICAgZm9udC1zaXplOiAxM3B4O1xuICAgIGxpbmUtaGVpZ2h0OiAyNnB4O1xuICAgIGxldHRlci1zcGFjaW5nOiAwLjE0ZW07XG4gICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcbiAgICBjb2xvcjogIzkyQTFCMztcbiAgICBtYXJnaW4tYm90dG9tOiAyOXB4OyB9XG4gIC5lZS1oZXJvIHAge1xuICAgIGZvbnQtZmFtaWx5OiBcIkVpbmFcIiwgXCJIZWx2ZXRpY2EgTmV1ZVwiLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7XG4gICAgZm9udC1zaXplOiAyNHB4O1xuICAgIGZvbnQtd2VpZ2h0OiA0MDA7XG4gICAgbGluZS1oZWlnaHQ6IDM2cHg7XG4gICAgbGV0dGVyLXNwYWNpbmc6IC0wLjA0ZW07XG4gICAgY29sb3I6IHJnYmEoMzksIDUwLCA2MywgMC44KTsgfVxuICAuZWUtaGVybyAuYnRuIHtcbiAgICBwYWRkaW5nLWxlZnQ6IDI0cHg7XG4gICAgcGFkZGluZy1yaWdodDogMjBweDtcbiAgICBwYWRkaW5nLXRvcDogMThweDtcbiAgICBwYWRkaW5nLWJvdHRvbTogMThweDtcbiAgICBmb250LXNpemU6IDE0cHg7XG4gICAgbWFyZ2luLXRvcDogMTZweDtcbiAgICBsaW5lLWhlaWdodDogMjBweDtcbiAgICBsZXR0ZXItc3BhY2luZzogMC4wOGVtO1xuICAgIGNvbG9yOiB3aGl0ZTtcbiAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xuICAgIGZvbnQtd2VpZ2h0OiA3MDA7XG4gICAgYmFja2dyb3VuZDogIzM4ODBGRjtcbiAgICBib3gtc2hhZG93OiAwcHggMnB4IDRweCByZ2JhKDIsIDgsIDIwLCAwLjEpLCAwcHggMXB4IDJweCByZ2JhKDIsIDgsIDIwLCAwLjA4KTtcbiAgICBib3JkZXItcmFkaXVzOiAyMTBweDtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7IH1cbiAgICAuZWUtaGVybyAuYnRuOjphZnRlciB7XG4gICAgICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoJ2RhdGE6aW1hZ2Uvc3ZnK3htbDt1dGY4LDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIGZpbGw9XCJ3aGl0ZVwiIHZpZXdCb3g9XCIwIDAgNTEyIDUxMlwiPjxwYXRoIGQ9XCJNODUgMjc3LjM3NWgyNTkuNzA0TDIyNS4wMDIgMzk3LjA3NyAyNTYgNDI3bDE3MS0xNzFMMjU2IDg1bC0yOS45MjIgMjkuOTI0IDExOC42MjYgMTE5LjcwMUg4NXY0Mi43NXpcIi8+PC9zdmc+Jyk7XG4gICAgICBiYWNrZ3JvdW5kLXNpemU6IDEwMCU7XG4gICAgICBjb250ZW50OiAnJztcbiAgICAgIGhlaWdodDogMjBweDtcbiAgICAgIHdpZHRoOiAyMHB4O1xuICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICBtYXJnaW4tbGVmdDogOHB4O1xuICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC0xcHgpOyB9XG4gICAgLmVlLWhlcm8gLmJ0bjpob3ZlciB7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjNGY4YmY1OyB9XG4gIC5lZS1oZXJvLS1sYXJnZSBoMSB7XG4gICAgZm9udC1zaXplOiA2MnB4O1xuICAgIGxpbmUtaGVpZ2h0OiA2OXB4OyB9XG4gIC5lZS1oZXJvLS13aWRlIHtcbiAgICBtYXgtd2lkdGg6IDk2MHB4OyB9XG4gIC5lZS1oZXJvLS1jZW50ZXJlZCB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgIG1hcmdpbi1sZWZ0OiBhdXRvO1xuICAgIG1hcmdpbi1yaWdodDogYXV0bzsgfVxuICBAbWVkaWEgKG1heC13aWR0aDogNzY3cHgpIHtcbiAgICAuZWUtaGVybyB7XG4gICAgICBwYWRkaW5nLXRvcDogNzBweDtcbiAgICAgIHBhZGRpbmctYm90dG9tOiAwOyB9XG4gICAgICAuZWUtaGVybyBoMSB7XG4gICAgICAgIGZvbnQtc2l6ZTogNDRweDtcbiAgICAgICAgbGluZS1oZWlnaHQ6IDUycHg7IH1cbiAgICAgIC5lZS1oZXJvLS1sYXJnZSBoMSB7XG4gICAgICAgIGZvbnQtc2l6ZTogNTBweDtcbiAgICAgICAgbGluZS1oZWlnaHQ6IDYwcHg7IH0gfVxuICBAbWVkaWEgKG1heC13aWR0aDogNDgwcHgpIHtcbiAgICAuZWUtaGVybyBoMSB7XG4gICAgICBmb250LXNpemU6IDM2cHg7XG4gICAgICBsaW5lLWhlaWdodDogNDRweDtcbiAgICAgIG1hcmdpbi1ib3R0b206IDZweDsgfVxuICAgIC5lZS1oZXJvLS1sYXJnZSBoMSB7XG4gICAgICBmb250LXNpemU6IDQycHg7XG4gICAgICBsaW5lLWhlaWdodDogNTJweDsgfVxuICAgIC5lZS1oZXJvIC5idG4ge1xuICAgICAgbWFyZ2luLXRvcDogOHB4OyB9IH1cblxuLmVlLW1haW4ge1xuICBtYXJnaW4tdG9wOiAwOyB9XG4gIC5lZS1tYWluIHNlY3Rpb24ge1xuICAgIG1hcmdpbi1ib3R0b206IDIwMHB4OyB9XG4gIC5lZS1tYWluIC5sZWZ0LFxuICAuZWUtbWFpbiAucmlnaHQsXG4gIC5lZS1tYWluIC5jZW50ZXIge1xuICAgIGRpc3BsYXk6IGZsZXg7IH1cbiAgICAuZWUtbWFpbiAubGVmdDo6YmVmb3JlLCAuZWUtbWFpbiAubGVmdDo6YWZ0ZXIsXG4gICAgLmVlLW1haW4gLnJpZ2h0OjpiZWZvcmUsXG4gICAgLmVlLW1haW4gLnJpZ2h0OjphZnRlcixcbiAgICAuZWUtbWFpbiAuY2VudGVyOjpiZWZvcmUsXG4gICAgLmVlLW1haW4gLmNlbnRlcjo6YWZ0ZXIge1xuICAgICAgZGlzcGxheTogbm9uZTsgfVxuICAuZWUtbWFpbiAubGVmdCAuY29udGVudCxcbiAgLmVlLW1haW4gLnJpZ2h0IC5jb250ZW50IHtcbiAgICBtYXgtd2lkdGg6IDQ4MHB4OyB9XG4gICAgQG1lZGlhIChtYXgtd2lkdGg6IDc2N3B4KSB7XG4gICAgICAuZWUtbWFpbiAubGVmdCAuY29udGVudCxcbiAgICAgIC5lZS1tYWluIC5yaWdodCAuY29udGVudCB7XG4gICAgICAgIG1heC13aWR0aDogMTAwJTtcbiAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyOyB9XG4gICAgICAgIC5lZS1tYWluIC5sZWZ0IC5jb250ZW50IGxpLFxuICAgICAgICAuZWUtbWFpbiAucmlnaHQgLmNvbnRlbnQgbGkge1xuICAgICAgICAgIHRleHQtYWxpZ246IGxlZnQ7IH0gfVxuICAuZWUtbWFpbiAubGVmdCB7XG4gICAgZmxleC1kaXJlY3Rpb246IHJvdzsgfVxuICAgIC5lZS1tYWluIC5sZWZ0IC5ncmFwaGljcyB7XG4gICAgICBtYXJnaW4tbGVmdDogYXV0bzsgfVxuICAuZWUtbWFpbiAucmlnaHQge1xuICAgIGZsZXgtZGlyZWN0aW9uOiByb3ctcmV2ZXJzZTtcbiAgICBtYXJnaW4tbGVmdDogYXV0bzsgfVxuICAgIC5lZS1tYWluIC5yaWdodCAuZ3JhcGhpY3Mge1xuICAgICAgbWFyZ2luLXJpZ2h0OiBhdXRvOyB9XG4gIC5lZS1tYWluIC5jZW50ZXIge1xuICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7IH1cbiAgICAuZWUtbWFpbiAuY2VudGVyIC5jb250ZW50IHtcbiAgICAgIHdpZHRoOiA4OTRweDtcbiAgICAgIG1heC13aWR0aDogMTAwJTsgfVxuICAuZWUtbWFpbiAuZnVsbCAuY29udGVudCB7XG4gICAgbWF4LXdpZHRoOiA1NjhweDsgfVxuICBAbWVkaWEgKG1heC13aWR0aDogNzY3cHgpIHtcbiAgICAuZWUtbWFpbiAucmlnaHQsXG4gICAgLmVlLW1haW4gLmxlZnQge1xuICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbi1yZXZlcnNlO1xuICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsgfVxuICAgICAgLmVlLW1haW4gLnJpZ2h0IC5ncmFwaGljcyxcbiAgICAgIC5lZS1tYWluIC5sZWZ0IC5ncmFwaGljcyB7XG4gICAgICAgIG1hcmdpbi1ib3R0b206IDI0cHg7XG4gICAgICAgIG1hcmdpbi1sZWZ0OiAwO1xuICAgICAgICBtYXJnaW4tcmlnaHQ6IDA7IH1cbiAgICAuZWUtbWFpbiBzZWN0aW9uIHtcbiAgICAgIG1hcmdpbi1ib3R0b206IDEwMHB4OyB9IH1cbiAgLmVlLW1haW4gLmdyYXBoaWNzIHtcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtZW5kOyB9XG4gICAgLmVlLW1haW4gLmdyYXBoaWNzIGltZyB7XG4gICAgICB3aWR0aDogMTAwJTsgfVxuICAuZWUtbWFpbiBoMiB7XG4gICAgZm9udC1zaXplOiA0NHB4O1xuICAgIGxpbmUtaGVpZ2h0OiA1MXB4O1xuICAgIGxldHRlci1zcGFjaW5nOiAtMC4wM2VtOyB9XG4gICAgLmVlLW1haW4gaDI6Zmlyc3QtY2hpbGQge1xuICAgICAgbWFyZ2luLXRvcDogMDsgfVxuICAuZWUtbWFpbiAuZWUtc2VjdGlvbl9fdGl0bGUge1xuICAgIGZvbnQtZmFtaWx5OiBcIlJvYm90byBNb25vXCIsIE1lbmxvLCBNb25hY28sIENvbnNvbGFzLCBcIkNvdXJpZXIgTmV3XCIsIG1vbm9zcGFjZTtcbiAgICBmb250LXN0eWxlOiBub3JtYWw7XG4gICAgZm9udC13ZWlnaHQ6IGJvbGQ7XG4gICAgZm9udC1zaXplOiAxMnB4O1xuICAgIGxpbmUtaGVpZ2h0OiAyM3B4O1xuICAgIGxldHRlci1zcGFjaW5nOiAwLjE0ZW07XG4gICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcbiAgICBjb2xvcjogIzVCNzA4QjtcbiAgICBtYXJnaW4tdG9wOiAwOyB9XG4gIC5lZS1tYWluIC5lZS1zZWN0aW9uX19jdGEge1xuICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICBmb250LXNpemU6IDE4cHg7XG4gICAgZm9udC13ZWlnaHQ6IDUwMDtcbiAgICBtYXJnaW4tdG9wOiAxNnB4OyB9XG4gIC5lZS1tYWluIHAge1xuICAgIGZvbnQtc2l6ZTogMjBweDtcbiAgICBsaW5lLWhlaWdodDogMzFweDtcbiAgICBsZXR0ZXItc3BhY2luZzogLTAuMDJlbTtcbiAgICBjb2xvcjogIzVCNzA4QjtcbiAgICBtYXJnaW4tdG9wOiAxOHB4OyB9XG4gICAgLmVlLW1haW4gcC5zbSB7XG4gICAgICBmb250LXNpemU6IDE2cHg7XG4gICAgICBsaW5lLWhlaWdodDogMjlweDtcbiAgICAgIGxldHRlci1zcGFjaW5nOiAtMC4wMWVtOyB9XG4gIC5lZS1tYWluIHVsOm5vdCguZnJhbWV3b3Jrcykge1xuICAgIG1hcmdpbi10b3A6IDU0cHg7IH1cbiAgLmVlLW1haW4gLmNvbnRlbnQgdWwge1xuICAgIHBhZGRpbmctbGVmdDogMDsgfVxuICAuZWUtbWFpbiAuY29udGVudCBsaSB7XG4gICAgZm9udC1zaXplOiAxNnB4O1xuICAgIGxpbmUtaGVpZ2h0OiAyM3B4O1xuICAgIGxldHRlci1zcGFjaW5nOiAtMC4wMmVtO1xuICAgIGNvbG9yOiAjMUEyMzJGO1xuICAgIG1hcmdpbi1ib3R0b206IDQwcHg7XG4gICAgcGFkZGluZy1sZWZ0OiAzMHB4O1xuICAgIGxpc3Qtc3R5bGU6IG5vbmU7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlOyB9XG4gICAgLmVlLW1haW4gLmNvbnRlbnQgbGk6OmJlZm9yZSB7XG4gICAgICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXCIvaW1nL2VudGVycHJpc2UvY2hlY2suc3ZnXCIpO1xuICAgICAgYmFja2dyb3VuZC1zaXplOiAxMDAlO1xuICAgICAgY29udGVudDogJyc7XG4gICAgICBoZWlnaHQ6IDEwcHg7XG4gICAgICB3aWR0aDogMTNweDtcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgIGxlZnQ6IDA7XG4gICAgICB0b3A6IDhweDsgfVxuICAuZWUtbWFpbiAuZmVhdHVyZXMge1xuICAgIGRpc3BsYXk6IGdyaWQ7XG4gICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiAxZnIgMWZyIDFmcjtcbiAgICBncmlkLWNvbHVtbi1nYXA6IDY0cHg7XG4gICAgZ3JpZC1yb3ctZ2FwOiAyNHB4O1xuICAgIHBhZGRpbmc6IDA7IH1cbiAgICAuZWUtbWFpbiAuZmVhdHVyZXMgbGkge1xuICAgICAgbGlzdC1zdHlsZTogbm9uZTsgfVxuICAgIC5lZS1tYWluIC5mZWF0dXJlcyAuaWNvbiB7XG4gICAgICBtYXJnaW4tYm90dG9tOiAxNnB4O1xuICAgICAgd2lkdGg6IDQ4cHg7IH1cbiAgICBAbWVkaWEgKG1heC13aWR0aDogOTkxcHgpIHtcbiAgICAgIC5lZS1tYWluIC5mZWF0dXJlcyB7XG4gICAgICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogMWZyIDFmcjsgfSB9XG4gICAgQG1lZGlhIChtYXgtd2lkdGg6IDUwMHB4KSB7XG4gICAgICAuZWUtbWFpbiAuZmVhdHVyZXMge1xuICAgICAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IDFmcjsgfSB9XG4gIC5lZS1tYWluIC5jdGEtY2FyZCB7XG4gICAgYmFja2dyb3VuZDogIzRhOGJmYztcbiAgICBib3JkZXItcmFkaXVzOiAxMnB4O1xuICAgIHBhZGRpbmc6IDcycHggNzJweCA2MHB4O1xuICAgIGJhY2tncm91bmQtc2l6ZTogY292ZXI7XG4gICAgY29sb3I6IHdoaXRlOyB9XG4gICAgLmVlLW1haW4gLmN0YS1jYXJkIC5lZS1zZWN0aW9uX190aXRsZSxcbiAgICAuZWUtbWFpbiAuY3RhLWNhcmQgcCB7XG4gICAgICBjb2xvcjogI0NFRDZFMDsgfVxuXG4jaG93LXRvIHtcbiAgbWFyZ2luLWJvdHRvbTogMDtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBwYWRkaW5nLXRvcDogMTQwcHg7IH1cbiAgI2hvdy10bzo6YmVmb3JlIHtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgdG9wOiAwO1xuICAgIHdpZHRoOiAxMDB2dztcbiAgICBib3JkZXItdG9wOiAxcHggc29saWQgcmdiYSgxNDYsIDE2MSwgMTc5LCAwLjMpO1xuICAgIGNvbnRlbnQ6ICcnO1xuICAgIGRpc3BsYXk6IGJsb2NrOyB9XG5cbi5jYXJkcy0tcmVkLXYtYmx1ZSB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIHRleHQtYWxpZ246IGxlZnQ7XG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICBtYXJnaW4tdG9wOiAzOHB4OyB9XG4gIC5jYXJkcy0tcmVkLXYtYmx1ZV9fY2FyZCB7XG4gICAgYmFja2dyb3VuZDogIzdDQUJGRjtcbiAgICBib3JkZXItcmFkaXVzOiA4cHg7XG4gICAgcGFkZGluZzogNDBweCA0MHB4IDM0cHg7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgIGFsaWduLWl0ZW1zOiBmbGV4LXN0YXJ0O1xuICAgIG1hcmdpbi1yaWdodDogMjRweDtcbiAgICBmbGV4OiAwIDEgNDYwcHg7XG4gICAgYm9yZGVyLXJhZGl1czogOHB4OyB9XG4gICAgLmNhcmRzLS1yZWQtdi1ibHVlX19jYXJkOmxhc3QtY2hpbGQge1xuICAgICAgbWFyZ2luLXJpZ2h0OiAwOyB9XG4gICAgLmNhcmRzLS1yZWQtdi1ibHVlX19jYXJkOm50aC1jaGlsZCgyKSB7XG4gICAgICBiYWNrZ3JvdW5kOiAjRjg4RDhEOyB9XG4gICAgICAuY2FyZHMtLXJlZC12LWJsdWVfX2NhcmQ6bnRoLWNoaWxkKDIpIC5idG4ge1xuICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDI0NCwgODQsIDg0LCAwLjUpOyB9XG4gIC5jYXJkcy0tcmVkLXYtYmx1ZSBoMyB7XG4gICAgZm9udC1zaXplOiAyNHB4O1xuICAgIGxpbmUtaGVpZ2h0OiBub3JtYWw7XG4gICAgbGV0dGVyLXNwYWNpbmc6IC0wLjAyZW07XG4gICAgY29sb3I6IHdoaXRlO1xuICAgIG1hcmdpbi10b3A6IDA7IH1cbiAgLmNhcmRzLS1yZWQtdi1ibHVlIHAge1xuICAgIGZvbnQtc2l6ZTogMThweDtcbiAgICBsaW5lLWhlaWdodDogMjZweDtcbiAgICBsZXR0ZXItc3BhY2luZzogLTAuMDJlbTtcbiAgICBjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjcpO1xuICAgIG1hcmdpbi10b3A6IDA7XG4gICAgbWFyZ2luLWJvdHRvbTogMjJweDsgfVxuICAuY2FyZHMtLXJlZC12LWJsdWUgLmJ0biB7XG4gICAgbWFyZ2luLXRvcDogYXV0bztcbiAgICBmb250LXNpemU6IDE0cHg7XG4gICAgbGluZS1oZWlnaHQ6IDIycHg7XG4gICAgbGV0dGVyLXNwYWNpbmc6IDAuMDllbTtcbiAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xuICAgIHBhZGRpbmc6IDEwcHggMTRweDtcbiAgICBmb250LXdlaWdodDogNjAwO1xuICAgIGJvcmRlci1yYWRpdXM6IDhweDtcbiAgICBiYWNrZ3JvdW5kOiByZ2JhKDU2LCAxMjgsIDI1NSwgMC41KTsgfVxuICAgIC5jYXJkcy0tcmVkLXYtYmx1ZSAuYnRuIGlvbi1pY29uIHtcbiAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICAgIGhlaWdodDogMTRweDtcbiAgICAgIHdpZHRoOiAxNHB4O1xuICAgICAgdmVydGljYWwtYWxpZ246IC0ycHg7IH1cbiAgQG1lZGlhIChtYXgtd2lkdGg6IDc2N3B4KSB7XG4gICAgLmNhcmRzLS1yZWQtdi1ibHVlIHtcbiAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICBhbGlnbi1pdGVtczogY2VudGVyOyB9XG4gICAgICAuY2FyZHMtLXJlZC12LWJsdWVfX2NhcmQge1xuICAgICAgICBmbGV4OiBhdXRvO1xuICAgICAgICBtYXJnaW4tcmlnaHQ6IDA7XG4gICAgICAgIG1hcmdpbi10b3A6IDIwcHg7XG4gICAgICAgIG1heC13aWR0aDogNDYwcHg7IH0gfVxuXG5hc2lkZSB7XG4gIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCgxODBkZWcsICNGOUZBRkIgMCUsICNGRkZGRkYgMTAwJSk7XG4gIG1hcmdpbi10b3A6IC02MHB4O1xuICBwYWRkaW5nLXRvcDogMjAwcHg7XG4gIHBhZGRpbmctYm90dG9tOiAxMjBweDsgfVxuICBhc2lkZSBwIHtcbiAgICBjb2xvcjogIzQxNEQ1QzsgfVxuICBhc2lkZSAuY29udGVudCB7XG4gICAgbWF4LXdpZHRoOiA0MzJweDtcbiAgICBtYXJnaW46IDAgYXV0bztcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgZGlzcGxheTogYmxvY2s7IH1cblxuLmVlLWdldC1zdGFydGVkIHtcbiAgbWF4LXdpZHRoOiA3MDBweDsgfVxuICAuZWUtZ2V0LXN0YXJ0ZWQgaDMge1xuICAgIGNvbG9yOiAjNDE0RDVDOyB9XG5cbi5yZXNvdXJjZXMge1xuICBwYWRkaW5nLWJvdHRvbTogMTIwcHg7IH1cbiAgQG1lZGlhIChtYXgtd2lkdGg6IDc2OHB4KSB7XG4gICAgLnJlc291cmNlcyB7XG4gICAgICBwYWRkaW5nLWJvdHRvbTogNjBweDsgfSB9XG4gIC5yZXNvdXJjZXMgLmNhcmRzIHtcbiAgICBsaXN0LXN0eWxlLXR5cGU6IG5vbmU7XG4gICAgbWFyZ2luOiAwO1xuICAgIHBhZGRpbmc6IDA7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBtYXJnaW4tbGVmdDogLTI0cHg7XG4gICAgbWFyZ2luLXJpZ2h0OiAtMjRweDsgfVxuICAucmVzb3VyY2VzIGhncm91cCB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG4gICAgYWxpZ24taXRlbXM6IGJhc2VsaW5lOyB9XG4gICAgLnJlc291cmNlcyBoZ3JvdXAgaDMge1xuICAgICAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgICAgIGxpbmUtaGVpZ2h0OiBub3JtYWw7XG4gICAgICBmb250LXNpemU6IDI4cHg7XG4gICAgICBsZXR0ZXItc3BhY2luZzogLTAuMDJlbTtcbiAgICAgIGNvbG9yOiAjMUEyMzJGO1xuICAgICAgbWFyZ2luLWJvdHRvbTogMDsgfVxuICAgIC5yZXNvdXJjZXMgaGdyb3VwIGg0IHtcbiAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7XG4gICAgICBmb250LXNpemU6IDI0cHg7XG4gICAgICBsaW5lLWhlaWdodDogbm9ybWFsO1xuICAgICAgbGV0dGVyLXNwYWNpbmc6IC0wLjAyZW07XG4gICAgICBjb2xvcjogIzFBMjMyRjsgfVxuICAgIC5yZXNvdXJjZXMgaGdyb3VwIGg1IHtcbiAgICAgIGZvbnQtd2VpZ2h0OiA3MDA7XG4gICAgICBsaW5lLWhlaWdodDogMTtcbiAgICAgIGZvbnQtc2l6ZTogMTRweDtcbiAgICAgIGxldHRlci1zcGFjaW5nOiAwLjA4ZW07XG4gICAgICBjb2xvcjogIzM4ODBGRjtcbiAgICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7IH1cbiAgICAucmVzb3VyY2VzIGhncm91cCBpb24taWNvbiB7XG4gICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMnB4KTsgfVxuICAucmVzb3VyY2VzIC5jYXJkcyBsaSB7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgZmxleDogMCAwIDMzLjMzJTtcbiAgICBwYWRkaW5nOiAyNHB4OyB9XG4gICAgLnJlc291cmNlcyAuY2FyZHMgbGkgYSB7XG4gICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgIHdpZHRoOiAxMDAlOyB9XG4gICAgLnJlc291cmNlcyAuY2FyZHMgbGkgLmltZy13cmFwcGVyIHtcbiAgICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgICBib3JkZXItcmFkaXVzOiA2cHg7IH1cbiAgICAucmVzb3VyY2VzIC5jYXJkcyBsaSBpbWcge1xuICAgICAgd2lkdGg6IDEwMCU7IH1cbiAgICAucmVzb3VyY2VzIC5jYXJkcyBsaSBoNiB7XG4gICAgICBsaW5lLWhlaWdodDogMjNweDtcbiAgICAgIGZvbnQtc2l6ZTogMTJweDtcbiAgICAgIGxldHRlci1zcGFjaW5nOiAwLjEyZW07XG4gICAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xuICAgICAgY29sb3I6ICNCMkJFQ0Q7XG4gICAgICBtYXJnaW4tYm90dG9tOiAwO1xuICAgICAgbWFyZ2luLXRvcDogMTZweDsgfVxuICAgIC5yZXNvdXJjZXMgLmNhcmRzIGxpIGg0IHtcbiAgICAgIGZvbnQtc2l6ZTogMjBweDtcbiAgICAgIG1hcmdpbi10b3A6IDEwcHg7XG4gICAgICBjb2xvcjogIzFBMjMyRjtcbiAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7IH1cbiAgICAucmVzb3VyY2VzIC5jYXJkcyBsaSBwIHtcbiAgICAgIGNvbG9yOiAjNUI3MDhCO1xuICAgICAgbGluZS1oZWlnaHQ6IDIycHg7XG4gICAgICBmb250LXNpemU6IDE0cHg7XG4gICAgICBsZXR0ZXItc3BhY2luZzogLTAuMDJlbTsgfVxuICBAbWVkaWEgKG1heC13aWR0aDogOTkycHgpIHtcbiAgICAucmVzb3VyY2VzIC5jYXJkcyB7XG4gICAgICBtYXJnaW4tbGVmdDogLTEycHg7XG4gICAgICBtYXJnaW4tcmlnaHQ6IC0xMnB4OyB9XG4gICAgLnJlc291cmNlcyAuY2FyZHMgbGkge1xuICAgICAgcGFkZGluZzogMTJweDsgfSB9XG4gIEBtZWRpYSAobWF4LXdpZHRoOiA3NjhweCkge1xuICAgIC5yZXNvdXJjZXMgLmNhcmRzIHtcbiAgICAgIGZsZXgtd3JhcDogd3JhcDsgfVxuICAgIC5yZXNvdXJjZXMgLmNhcmRzIGxpIHtcbiAgICAgIGZsZXg6IDAgMCA1MCU7IH0gfVxuICBAbWVkaWEgKG1heC13aWR0aDogNDgwcHgpIHtcbiAgICAucmVzb3VyY2VzIC5jYXJkcyBsaSB7XG4gICAgICBmbGV4OiAwIDAgMTAwJTsgfVxuICAgIC5yZXNvdXJjZXMgaDUge1xuICAgICAgZGlzcGxheTogbm9uZTsgfSB9XG5cbi5lZS1tYWluIC5mZWF0dXJlcyBsaSBwLFxuLmVlLW1haW4gLmNhcmRzIGxpIHAsXG4ucmVzb3VyY2VzIC5mZWF0dXJlcyBsaSBwLFxuLnJlc291cmNlcyAuY2FyZHMgbGkgcCB7XG4gIGZvbnQtc2l6ZTogMTZweDtcbiAgbGluZS1oZWlnaHQ6IDI5cHg7XG4gIGxldHRlci1zcGFjaW5nOiAtMC4wMWVtO1xuICBjb2xvcjogIzczODQ5QTtcbiAgbWFyZ2luLXRvcDogMDsgfVxuXG4uZWUtbWFpbiAuZmVhdHVyZXMgbGkgaDQsXG4uZWUtbWFpbiAuY2FyZHMgbGkgaDQsXG4ucmVzb3VyY2VzIC5mZWF0dXJlcyBsaSBoNCxcbi5yZXNvdXJjZXMgLmNhcmRzIGxpIGg0IHtcbiAgZm9udC1zaXplOiAyMHB4O1xuICBsaW5lLWhlaWdodDogbm9ybWFsO1xuICBsZXR0ZXItc3BhY2luZzogLTAuMDJlbTtcbiAgY29sb3I6ICMwMjA4MTQ7XG4gIGZvbnQtd2VpZ2h0OiA2MDA7IH1cblxuLnJlc291cmNlcyAuY2FyZHMge1xuICBtYXJnaW4tdG9wOiAwICFpbXBvcnRhbnQ7XG4gIHRleHQtYWxpZ246IGxlZnQ7XG4gIGZsZXgtd3JhcDogd3JhcDsgfVxuICAucmVzb3VyY2VzIC5jYXJkcyAuaW1nLXdyYXBwZXIge1xuICAgIGJvcmRlci1yYWRpdXM6IDZweDsgfVxuICAgIC5yZXNvdXJjZXMgLmNhcmRzIC5pbWctd3JhcHBlciArIGg0IHtcbiAgICAgIG1hcmdpbi10b3A6IDI0cHg7IH1cbiAgQG1lZGlhIChtaW4td2lkdGg6IDEyMjBweCkge1xuICAgIC5yZXNvdXJjZXMgLmNhcmRzIHtcbiAgICAgIG1hcmdpbi1sZWZ0OiAtNDBweDtcbiAgICAgIG1hcmdpbi1yaWdodDogLTQwcHg7IH1cbiAgICAgIC5yZXNvdXJjZXMgLmNhcmRzIGxpIHtcbiAgICAgICAgcGFkZGluZzogNDBweDsgfSB9XG5cbi5yZXNvdXJjZXMgLnJlc291cmNlc19fY3VzdG9tZXItbG9nb3Mge1xuICBkaXNwbGF5OiBmbGV4O1xuICBtYXJnaW46IDI2cHggYXV0byAwO1xuICBwYWRkaW5nOiAwO1xuICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG4gIG1heC13aWR0aDogNzgwcHg7XG4gIHdpZHRoOiAxMDAlOyB9XG4gIC5yZXNvdXJjZXMgLnJlc291cmNlc19fY3VzdG9tZXItbG9nb3MgbGkge1xuICAgIGJhY2tncm91bmQ6IHVybChcIi9pbWcvZW50ZXJwcmlzZS9jdXN0b21lci1sb2dvcy5wbmdcIik7XG4gICAgYmFja2dyb3VuZC1zaXplOiA0MjhweCA0NnB4O1xuICAgIGJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgaGVpZ2h0OiA0NnB4OyB9XG4gIEBtZWRpYSAobWF4LXdpZHRoOiA3NjhweCkge1xuICAgIC5yZXNvdXJjZXMgLnJlc291cmNlc19fY3VzdG9tZXItbG9nb3Mge1xuICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gICAgICBmbGV4LXdyYXA6IHdyYXA7XG4gICAgICBtYXgtd2lkdGg6IDQ2MHB4OyB9XG4gICAgICAucmVzb3VyY2VzIC5yZXNvdXJjZXNfX2N1c3RvbWVyLWxvZ29zIGxpIHtcbiAgICAgICAgbWFyZ2luOiAyMHB4OyB9IH1cbiAgLnJlc291cmNlcyAucmVzb3VyY2VzX19jdXN0b21lci1sb2dvcyAubWFzdGVyY2FyZCB7XG4gICAgd2lkdGg6IDU4cHg7IH1cbiAgLnJlc291cmNlcyAucmVzb3VyY2VzX19jdXN0b21lci1sb2dvcyAubmF0aW9ud2lkZSB7XG4gICAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTU4cHggMDtcbiAgICB3aWR0aDogMzNweDsgfVxuICAucmVzb3VyY2VzIC5yZXNvdXJjZXNfX2N1c3RvbWVyLWxvZ29zIC51bmlxbG8ge1xuICAgIGJhY2tncm91bmQtcG9zaXRpb246IC05MXB4IDA7XG4gICAgd2lkdGg6IDY1cHg7IH1cbiAgLnJlc291cmNlcyAucmVzb3VyY2VzX19jdXN0b21lci1sb2dvcyAuaWJtIHtcbiAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTU2cHggMDtcbiAgICB3aWR0aDogNjRweDsgfVxuICAucmVzb3VyY2VzIC5yZXNvdXJjZXNfX2N1c3RvbWVyLWxvZ29zIC5pbmcge1xuICAgIGJhY2tncm91bmQtcG9zaXRpb246IC0yMjJweCAwO1xuICAgIHdpZHRoOiAxMDNweDsgfVxuICAucmVzb3VyY2VzIC5yZXNvdXJjZXNfX2N1c3RvbWVyLWxvZ29zIC5zYXAge1xuICAgIGJhY2tncm91bmQtcG9zaXRpb246IC0zMjZweCAwO1xuICAgIHdpZHRoOiA1NnB4OyB9XG4gIC5yZXNvdXJjZXMgLnJlc291cmNlc19fY3VzdG9tZXItbG9nb3MgLm5hc2Ege1xuICAgIGJhY2tncm91bmQtcG9zaXRpb246IC0zODBweCAwO1xuICAgIHdpZHRoOiA1MHB4OyB9XG5cbiNleHBlcmllbmNlcyAuY29udGVudCB7XG4gIG1heC13aWR0aDogNTAwcHg7IH1cblxuI2V4cGVyaWVuY2VzIC5ncmFwaGljcyB7XG4gIHdpZHRoOiA1ODBweDtcbiAgbWFyZ2luLXJpZ2h0OiAyOHB4OyB9XG4gICNleHBlcmllbmNlcyAuZ3JhcGhpY3MgaW1nIHtcbiAgICB3aWR0aDogNzU3cHg7XG4gICAgZmxvYXQ6IHJpZ2h0OyB9XG4gIEBtZWRpYSAobWF4LXdpZHRoOiAxMjE5cHgpIHtcbiAgICAjZXhwZXJpZW5jZXMgLmdyYXBoaWNzIHtcbiAgICAgIHdpZHRoOiAzMjBweDtcbiAgICAgIHBhZGRpbmctcmlnaHQ6IDIwcHg7IH0gfVxuICBAbWVkaWEgKG1heC13aWR0aDogNzY3cHgpIHtcbiAgICAjZXhwZXJpZW5jZXMgLmdyYXBoaWNzIHtcbiAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgbWFyZ2luLXJpZ2h0OiAwOyB9XG4gICAgICAjZXhwZXJpZW5jZXMgLmdyYXBoaWNzIGltZyB7XG4gICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgICBmbG9hdDogbm9uZTtcbiAgICAgICAgbWF4LXdpZHRoOiA3NTdweDsgfSB9XG5cbiNzdHJlYW1saW5lIC5ncmFwaGljcyB7XG4gIHBhZGRpbmctbGVmdDogMjBweDsgfVxuXG4jdGFsZW50IC5ncmFwaGljcyB7XG4gIHdpZHRoOiA1NjBweDsgfVxuICBAbWVkaWEgKG1heC13aWR0aDogMTIxOXB4KSB7XG4gICAgI3RhbGVudCAuZ3JhcGhpY3Mge1xuICAgICAgd2lkdGg6IGNhbGMoMTAwJSAtIDUyMHB4KTsgfSB9XG4gIEBtZWRpYSAobWF4LXdpZHRoOiA3NjdweCkge1xuICAgICN0YWxlbnQgLmdyYXBoaWNzIHtcbiAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgbWF4LXdpZHRoOiA1NjBweDtcbiAgICAgIG1hcmdpbjogMCBhdXRvIDIwcHg7IH0gfVxuXG4jY3JlYXRlIC5ncmFwaGljcyB7XG4gIHdpZHRoOiA1OTNweDtcbiAgcGFkZGluZy1sZWZ0OiAyMHB4O1xuICBtYXgtd2lkdGg6IDEwMCU7IH1cblxuI2RldmVsb3BlcnMgLmdyYXBoaWNzIHtcbiAgcGFkZGluZy1yaWdodDogMjBweDsgfVxuIl19 */\n"
  },
  {
    "path": "content/css/pages/framework.css",
    "content": "@charset \"UTF-8\";\n.page-framework .primary-row {\n  text-align: center; }\n  .page-framework .primary-row h1,\n  .page-framework .primary-row h2 {\n    border: none;\n    font-weight: normal; }\n  .page-framework .primary-row h1 {\n    margin: 10px 0 0 0;\n    color: #ebf3ff;\n    font-size: 49px; }\n  .page-framework .primary-row h2 {\n    margin: 5px 0 0 0;\n    color: #A8C7FF;\n    font-size: 16px;\n    line-height: 28px;\n    font-weight: 600;\n    cursor: default;\n    text-shadow: 0 1px 2px rgba(0, 0, 0, 0.1); }\n  .page-framework .primary-row .desktop-btn {\n    display: none; }\n\n.page-framework .btn-row {\n  padding: 0; }\n\n.page-framework .version-text {\n  color: rgba(255, 255, 255, 0.4);\n  font-weight: 500;\n  font-size: 11px; }\n  .page-framework .version-text a {\n    color: rgba(255, 255, 255, 0.4); }\n    .page-framework .version-text a:hover {\n      color: rgba(255, 255, 255, 0.7);\n      text-decoration: none; }\n\n.page-framework .feature-img {\n  height: 175px; }\n  @media (max-width: 767px) {\n    .page-framework .feature-img {\n      display: none; } }\n  .page-framework .feature-img .demo-link {\n    visibility: visible; }\n  .page-framework .feature-img .app-icon {\n    visibility: visible; }\n  .page-framework .feature-img .device.iphone {\n    width: 544px;\n    position: relative;\n    left: 46px;\n    top: 36px; }\n  .page-framework .feature-img .device.pixel {\n    width: 430px;\n    position: absolute;\n    top: 64px;\n    right: 110px; }\n    @media (max-width: 991px) {\n      .page-framework .feature-img .device.pixel {\n        right: 0; } }\n  .page-framework .feature-img .one,\n  .page-framework .feature-img .two {\n    opacity: 0;\n    -webkit-animation: fadeInDown .7s;\n            animation: fadeInDown .7s;\n    -webkit-animation-fill-mode: forwards;\n            animation-fill-mode: forwards; }\n  .page-framework .feature-img .one {\n    -webkit-animation-delay: .5s;\n            animation-delay: .5s; }\n  .page-framework .feature-img .two {\n    -webkit-animation-delay: .7s;\n            animation-delay: .7s; }\n  .page-framework .feature-img .three {\n    opacity: 0;\n    -webkit-animation: fadeIn .7s;\n            animation: fadeIn .7s;\n    -webkit-animation-fill-mode: forwards;\n            animation-fill-mode: forwards;\n    -webkit-animation-delay: 1s;\n            animation-delay: 1s; }\n  .page-framework .feature-img .app-icon {\n    background-image: url(\"/img/frameworkpage/ionicview-icon_2x.png\");\n    background-size: 84px 84px;\n    background-repeat: no-repeat;\n    display: none;\n    height: 84px;\n    width: 84px;\n    position: absolute;\n    right: 0;\n    bottom: 0; }\n    @media (max-width: 991px) {\n      .page-framework .feature-img .app-icon {\n        bottom: -60px; } }\n  .page-framework .feature-img a {\n    opacity: 1; }\n    .page-framework .feature-img a img {\n      opacity: .9;\n      transition: opacity 0.1s linear;\n      -webkit-animation-delay: .5s;\n              animation-delay: .5s; }\n    .page-framework .feature-img a span {\n      opacity: .7;\n      transition: opacity .1s linear;\n      -webkit-animation-delay: .5s;\n              animation-delay: .5s; }\n    .page-framework .feature-img a:hover img,\n    .page-framework .feature-img a:hover span {\n      opacity: 1; }\n  .page-framework .feature-img .demo-link {\n    position: absolute;\n    right: 6px;\n    bottom: -20px;\n    display: none;\n    color: white;\n    text-decoration: underline;\n    font-weight: 500;\n    font-size: 10px;\n    text-decoration: none;\n    text-shadow: 0px 1px 6px rgba(0, 0, 0, 0.2); }\n    @media (max-width: 991px) {\n      .page-framework .feature-img .demo-link {\n        bottom: -75px; } }\n\n@media (min-width: 768px) {\n  .page-framework {\n    /* TABLET/Phone */ }\n    .page-framework .primary-row {\n      text-align: left; }\n      .page-framework .primary-row h1 {\n        font-size: 34px; }\n      .page-framework .primary-row h2 {\n        font-size: 20px; }\n      .page-framework .primary-row .desktop-btn {\n        display: inline-block; }\n      .page-framework .primary-row .mobile-btn {\n        display: none; }\n      .page-framework .primary-row .demo-link {\n        display: block; }\n      .page-framework .primary-row .app-icon {\n        display: block; }\n    .page-framework .feature-img {\n      background-size: 420px 393px;\n      min-height: 405px; } }\n\n.page-framework .utility-bar {\n  margin-top: -160px;\n  position: relative;\n  padding: 20px 0 22px;\n  width: 100%;\n  background: rgba(0, 0, 0, 0.15); }\n  @media (max-width: 991px) {\n    .page-framework .utility-bar {\n      margin-top: -216px; } }\n  @media (max-width: 767px) {\n    .page-framework .utility-bar {\n      margin-top: -528px; } }\n  .page-framework .utility-bar .container {\n    overflow: hidden;\n    color: #DAE7FD;\n    text-overflow: ellipsis;\n    white-space: nowrap; }\n  .page-framework .utility-bar form {\n    max-width: 458px;\n    float: right; }\n    @media (max-width: 991px) {\n      .page-framework .utility-bar form {\n        max-width: calc(100% - 340px); } }\n    @media (max-width: 767px) {\n      .page-framework .utility-bar form {\n        float: none;\n        max-width: 100%;\n        margin-top: 15px; } }\n  .page-framework .utility-bar button {\n    padding: 10px 13px; }\n\n.page-framework #promo-ionicu {\n  background: url(\"/img/promos/university.jpg\") no-repeat transparent;\n  background-size: cover;\n  text-align: center;\n  padding-top: 100px;\n  height: 450px;\n  box-sizing: border-box; }\n  .page-framework #promo-ionicu h2, .page-framework #promo-ionicu h4 {\n    color: #fff;\n    text-shadow: 0px 1px 2px rgba(0, 0, 0, 0.5); }\n  .page-framework #promo-ionicu h2 {\n    font-weight: 400; }\n    .page-framework #promo-ionicu h2 b {\n      font-weight: 600; }\n  .page-framework #promo-ionicu h4 {\n    font-weight: 400;\n    margin-bottom: 50px; }\n  .page-framework #promo-ionicu .btn {\n    background-color: white;\n    color: #397FF2;\n    box-shadow: 0px 1px 3px rgba(0, 0, 0, 0.15); }\n\n.page-framework #promo-snapshot {\n  position: relative;\n  text-align: center;\n  background: linear-gradient(to right, #06558e 0%, #006e89 100%);\n  padding-top: 60px; }\n  .page-framework #promo-snapshot .container {\n    max-width: 975px; }\n  .page-framework #promo-snapshot h2 {\n    font-weight: 300;\n    margin-top: 0;\n    margin-bottom: 20px;\n    color: #fff; }\n    .page-framework #promo-snapshot h2 a {\n      font-weight: 500;\n      color: #fff;\n      box-shadow: inset 0 0px 0 white, inset 0 -1px 0 white;\n      transition: .3s box-shadow; }\n      .page-framework #promo-snapshot h2 a:hover, .page-framework #promo-snapshot h2 a:active, .page-framework #promo-snapshot h2 a:focus {\n        text-decoration: none;\n        box-shadow: inset 0 0px 0 white, inset 0 -2px 0 white; }\n  .page-framework #promo-snapshot h4 {\n    color: #fff;\n    margin-bottom: 50px; }\n  .page-framework #promo-snapshot img {\n    max-width: 100%; }\n  .page-framework #promo-snapshot #promo-bar {\n    width: 100%;\n    position: absolute;\n    bottom: 0;\n    z-index: 1;\n    background-color: rgba(255, 255, 255, 0.95);\n    -webkit-backdrop-filter: blur(10px);\n    backdrop-filter: blur(10px);\n    padding: 10px 0;\n    overflow: auto; }\n    .page-framework #promo-snapshot #promo-bar .left-text {\n      float: left;\n      line-height: 60px;\n      vertical-align: middle;\n      font-weight: 500;\n      margin-left: 15px; }\n    .page-framework #promo-snapshot #promo-bar .right-text {\n      float: right;\n      line-height: 60px;\n      vertical-align: middle;\n      margin-right: 15px; }\n\n.page-framework .banner-cta {\n  background: #f6f7fa;\n  padding-top: 80px;\n  margin-bottom: -32px; }\n  .page-framework .banner-cta .box {\n    background: url(\"/img/framework/2018-framework-card-bg.png\") 50% 50% no-repeat;\n    background-size: cover;\n    display: -ms-flexbox;\n    display: flex;\n    -ms-flex-align: center;\n        align-items: center;\n    border-radius: 8px;\n    box-shadow: 0 2px 16px rgba(0, 0, 0, 0.3);\n    padding: 37px 69px 38px 54px;\n    position: relative;\n    min-height: 160px; }\n    @media (max-width: 767px) {\n      .page-framework .banner-cta .box {\n        display: block;\n        padding-left: 32px;\n        padding-right: 32px;\n        text-align: center; }\n        .page-framework .banner-cta .box::before {\n          display: none; }\n        .page-framework .banner-cta .box .btn {\n          margin-left: 0;\n          margin-top: 24px; } }\n  .page-framework .banner-cta hgroup {\n    -ms-flex-positive: 1;\n        flex-grow: 1;\n    color: white;\n    position: relative;\n    z-index: 1;\n    margin-top: 8px; }\n  .page-framework .banner-cta .orange {\n    color: #fcb52c;\n    font-size: 18px;\n    letter-spacing: .015em;\n    margin-bottom: 12px;\n    line-height: 1em; }\n  .page-framework .banner-cta h2 {\n    font-weight: 700;\n    margin-top: 0;\n    font-size: 38px;\n    letter-spacing: -.045em;\n    margin-bottom: 5px; }\n  .page-framework .banner-cta .lg {\n    font-size: 22px;\n    letter-spacing: -.019em;\n    margin-bottom: 0;\n    color: white;\n    font-family: \"Eina\", \"Helvetica Neue\", Helvetica, sans-serif; }\n  .page-framework .banner-cta .btn {\n    margin-left: 8px;\n    font-size: 16px;\n    letter-spacing: .055em;\n    padding: 19px 21px 14px;\n    font-weight: 600;\n    position: relative;\n    z-index: 1;\n    text-transform: uppercase; }\n\n.page-framework .built-with {\n  background: #f6f7fa;\n  padding-bottom: 100px; }\n  @media (max-width: 991px) {\n    .page-framework .built-with {\n      padding-bottom: 40px; } }\n  .page-framework .built-with hgroup {\n    position: relative;\n    padding-top: 103px; }\n    @media (max-width: 991px) {\n      .page-framework .built-with hgroup {\n        padding-top: 280px; } }\n    @media (max-width: 767px) {\n      .page-framework .built-with hgroup {\n        padding-top: 153px; } }\n    .page-framework .built-with hgroup h2,\n    .page-framework .built-with hgroup h4 {\n      width: 48%; }\n      @media (max-width: 991px) {\n        .page-framework .built-with hgroup h2,\n        .page-framework .built-with hgroup h4 {\n          width: 100%;\n          text-align: center; } }\n    .page-framework .built-with hgroup h2 {\n      font-size: 28px;\n      font-weight: 500;\n      letter-spacing: -.02em; }\n    .page-framework .built-with hgroup h4 {\n      font-size: 20px;\n      font-weight: 400;\n      color: #4a566b;\n      line-height: 1.8em;\n      margin-top: 16px;\n      letter-spacing: -.02em; }\n  .page-framework .built-with .techs {\n    list-style: none;\n    position: absolute;\n    right: 0;\n    top: 123px;\n    width: 48%; }\n    @media (max-width: 991px) {\n      .page-framework .built-with .techs {\n        top: 50px;\n        left: 0;\n        margin: 0 auto;\n        width: 600px; } }\n    @media (max-width: 767px) {\n      .page-framework .built-with .techs {\n        -webkit-transform: scale(0.5, 0.5);\n                transform: scale(0.5, 0.5);\n        top: 50px;\n        width: 600px; } }\n    @media (max-width: 600px) {\n      .page-framework .built-with .techs {\n        margin-left: calc(50% - 300px); } }\n    .page-framework .built-with .techs li {\n      background: url(\"/img/framework/web-icons.png\") no-repeat 0 0;\n      background-size: 200px;\n      height: 200px;\n      width: 200px;\n      position: absolute;\n      opacity: 0;\n      -webkit-animation: fadeIn 1s;\n              animation: fadeIn 1s;\n      -webkit-animation-fill-mode: forwards;\n              animation-fill-mode: forwards; }\n      .page-framework .built-with .techs li.angular {\n        right: 64.5%;\n        -webkit-animation-delay: 1.4s;\n                animation-delay: 1.4s; }\n      .page-framework .built-with .techs li.js {\n        right: 43%;\n        background-position: 0 -200px;\n        -webkit-animation-delay: 1.6s;\n                animation-delay: 1.6s; }\n      .page-framework .built-with .techs li.ts {\n        right: 21.5%;\n        background-position: 0 -400px;\n        -webkit-animation-delay: 1.8s;\n                animation-delay: 1.8s; }\n      .page-framework .built-with .techs li.html {\n        right: 0%;\n        background-position: 0 -600px;\n        -webkit-animation-delay: 2s;\n                animation-delay: 2s; }\n  .page-framework .built-with .features {\n    margin-top: 75px; }\n    @media (max-width: 991px) {\n      .page-framework .built-with .features {\n        display: -ms-flexbox;\n        display: flex;\n        -ms-flex-wrap: wrap;\n            flex-wrap: wrap;\n        margin-top: 45px; } }\n    .page-framework .built-with .features li {\n      width: calc(25% + 2px);\n      display: inline-block;\n      padding-left: 37px;\n      padding-right: 20px;\n      vertical-align: top;\n      background: url(\"/img/framework/checkmark-icon.png\") no-repeat 0 0;\n      background-size: 24px; }\n      @media (max-width: 991px) {\n        .page-framework .built-with .features li {\n          width: auto;\n          -ms-flex: 1 0 320px;\n              flex: 1 0 320px;\n          margin-bottom: 15px; } }\n      .page-framework .built-with .features li h3 {\n        font-size: 17px;\n        font-weight: 500;\n        margin-top: 4px;\n        margin-bottom: 5px; }\n      .page-framework .built-with .features li p {\n        font-size: 16px;\n        font-weight: 400;\n        color: #5c6a81;\n        line-height: 1.7em;\n        letter-spacing: -.02em; }\n      .page-framework .built-with .features li:last-child {\n        padding-right: 0;\n        width: calc(25% - 19px); }\n\n.page-framework .about-code {\n  position: relative; }\n  .page-framework .about-code .code-box {\n    width: 545px;\n    box-shadow: 0 8px 16px rgba(0, 0, 0, 0.08), 0 2px 6px rgba(0, 0, 0, 0.04);\n    border-radius: 4px;\n    position: absolute;\n    top: -20px;\n    background: white; }\n    @media (max-width: 626px) {\n      .page-framework .about-code .code-box {\n        display: none; } }\n    .page-framework .about-code .code-box .app,\n    .page-framework .about-code .code-box .toggle {\n      transition: 0.7s right cubic-bezier(0.49, 1.65, 0.73, 1.13); }\n    .page-framework .about-code .code-box.done .app,\n    .page-framework .about-code .code-box.done .toggle {\n      transition: none; }\n    .page-framework .about-code .code-box.active .app,\n    .page-framework .about-code .code-box.active .toggle {\n      right: 65%; }\n    .page-framework .about-code .code-box header {\n      padding: 24px 38px 28px;\n      position: relative;\n      z-index: 5; }\n      .page-framework .about-code .code-box header::after {\n        position: absolute;\n        bottom: -5px;\n        background: linear-gradient(to bottom, rgba(200, 200, 200, 0.3) 0%, rgba(200, 200, 200, 0) 100%);\n        left: 0;\n        right: 0;\n        height: 5px;\n        content: '';\n        display: block; }\n      .page-framework .about-code .code-box header h3 {\n        font-weight: 700;\n        font-size: 11px;\n        letter-spacing: .2em;\n        text-transform: uppercase;\n        display: inline-block; }\n      .page-framework .about-code .code-box header .platforms {\n        list-style: none;\n        position: absolute;\n        right: 26px;\n        top: 37px; }\n        .page-framework .about-code .code-box header .platforms li {\n          background: url(\"/img/framework/icons-sm.png\") no-repeat 0 0;\n          background-size: 24px;\n          height: 24px;\n          width: 24px;\n          display: inline-block;\n          margin-right: 9px; }\n          .page-framework .about-code .code-box header .platforms li.android {\n            background-position: 0 -24px; }\n          .page-framework .about-code .code-box header .platforms li.windows {\n            background-position: 0 -48px; }\n          .page-framework .about-code .code-box header .platforms li.chrome {\n            background-position: 0 -72px; }\n          .page-framework .about-code .code-box header .platforms li.electron {\n            background-position: 0 -96px; }\n  .page-framework .about-code hgroup {\n    min-height: 469px;\n    margin-left: 625px; }\n    @media (max-width: 991px) {\n      .page-framework .about-code hgroup {\n        margin-left: 0;\n        margin-top: 400px;\n        text-align: center;\n        min-height: 0;\n        margin-bottom: 40px; } }\n    @media (max-width: 626px) {\n      .page-framework .about-code hgroup {\n        margin-top: 0; } }\n    .page-framework .about-code hgroup h2 {\n      padding-top: 72px;\n      font-size: 28px;\n      line-height: 1.6em;\n      font-weight: 500;\n      letter-spacing: -.02em; }\n    .page-framework .about-code hgroup h4 {\n      font-size: 20px;\n      font-weight: 400;\n      color: #4a566b;\n      line-height: 1.8em;\n      margin-top: 16px;\n      letter-spacing: -0.02em; }\n      .page-framework .about-code hgroup h4 strong {\n        color: black;\n        font-weight: 400; }\n  .page-framework .about-code .features {\n    list-style: none;\n    padding: 0 0 109px; }\n    @media (max-width: 991px) {\n      .page-framework .about-code .features {\n        padding-bottom: 50px; } }\n    .page-framework .about-code .features li {\n      display: inline-block;\n      padding-top: 93px;\n      position: relative;\n      width: 29.7%;\n      vertical-align: top;\n      padding-right: 5%;\n      box-sizing: content-box; }\n      @media (max-width: 991px) {\n        .page-framework .about-code .features li {\n          width: 100%;\n          text-align: center;\n          margin-bottom: 40px;\n          padding-right: 0; } }\n      .page-framework .about-code .features li::before {\n        background: url(\"/img/framework/icons-lg.png\") no-repeat 0 0;\n        background-size: 93px;\n        height: 93px;\n        width: 93px;\n        content: '';\n        top: 0;\n        left: -7px;\n        position: absolute; }\n        @media (max-width: 991px) {\n          .page-framework .about-code .features li::before {\n            left: calc(50% - 47px); } }\n      .page-framework .about-code .features li.beautiful::before {\n        background-position: 0 -93px; }\n      .page-framework .about-code .features li.optimized::before {\n        background-position: 0 -186px; }\n      .page-framework .about-code .features li:last-child {\n        padding-right: 0; }\n      .page-framework .about-code .features li h3 {\n        font-size: 22px;\n        font-weight: 500;\n        margin-bottom: 16px;\n        letter-spacing: -0.02em; }\n      .page-framework .about-code .features li p,\n      .page-framework .about-code .features li a {\n        font-size: 16px;\n        color: #5c6a81;\n        line-height: 2em;\n        letter-spacing: -0.02em; }\n      .page-framework .about-code .features li a {\n        color: #4a8bfc;\n        font-weight: 500; }\n        .page-framework .about-code .features li a span {\n          position: relative;\n          right: -2px;\n          top: 2px; }\n        .page-framework .about-code .features li a:hover {\n          color: #317bfc;\n          text-decoration: none; }\n\n.page-framework .about-toolkit {\n  background: #09224d;\n  background: linear-gradient(to right, #051d46 0%, #1d3f6f 100%);\n  padding-top: 109px;\n  padding-bottom: 36px;\n  color: #9fb0cb; }\n  .page-framework .about-toolkit hgroup {\n    text-align: center;\n    margin-bottom: 96px; }\n    .page-framework .about-toolkit hgroup h2 {\n      color: white;\n      font-size: 27px;\n      font-weight: 500;\n      margin-bottom: 27px;\n      letter-spacing: -.01em; }\n    .page-framework .about-toolkit hgroup h4 {\n      font-weight: 500;\n      font-size: 20px;\n      letter-spacing: -.02em; }\n  .page-framework .about-toolkit .features {\n    list-style: none;\n    padding: 0; }\n    @media (max-width: 1219px) {\n      .page-framework .about-toolkit .features {\n        display: -ms-flexbox;\n        display: flex;\n        -ms-flex-wrap: wrap;\n            flex-wrap: wrap; } }\n    .page-framework .about-toolkit .features li {\n      width: calc(33% + 22px);\n      display: inline-block;\n      padding-left: 83px;\n      margin-bottom: 54px;\n      font-weight: 500;\n      font-size: 16px;\n      padding-right: 55px;\n      line-height: 1.8em;\n      vertical-align: top;\n      position: relative;\n      letter-spacing: -0.02em; }\n      .page-framework .about-toolkit .features li:nth-child(3), .page-framework .about-toolkit .features li:last-child {\n        width: calc(33% - 40px);\n        padding-right: 0; }\n      @media (max-width: 1219px) {\n        .page-framework .about-toolkit .features li {\n          width: auto;\n          -ms-flex: 1 0 350px;\n              flex: 1 0 350px; }\n          .page-framework .about-toolkit .features li:nth-child(3), .page-framework .about-toolkit .features li:last-child {\n            width: auto; } }\n      .page-framework .about-toolkit .features li::before {\n        background: url(\"/img/framework/icons-md.png\") no-repeat 0 0;\n        background-size: 80px;\n        height: 80px;\n        width: 80px;\n        content: '';\n        position: absolute;\n        left: 0;\n        top: 0; }\n      .page-framework .about-toolkit .features li.cli::before {\n        background-position: 0 -320px; }\n      .page-framework .about-toolkit .features li.native::before {\n        background-position: 0 -400px; }\n      .page-framework .about-toolkit .features li.reload::before {\n        background-position: 0 -480px; }\n      .page-framework .about-toolkit .features li.zionicons::before {\n        background-position: 0 -560px; }\n      .page-framework .about-toolkit .features li.deeplinking::before {\n        background-position: 0 -640px; }\n      .page-framework .about-toolkit .features li.aot::before {\n        background-position: 0 -720px; }\n      .page-framework .about-toolkit .features li a {\n        color: white; }\n        .page-framework .about-toolkit .features li a:hover {\n          text-decoration: none;\n          color: rgba(255, 255, 255, 0.7); }\n\n.page-framework .about-community {\n  background: #09172e;\n  background: url(\"/img/framework/map.png\") no-repeat center center, linear-gradient(to right, #050f23 0%, #13233f 100%);\n  background-size: cover, 100%;\n  color: #909ebb;\n  padding-bottom: 44px; }\n  .page-framework .about-community .container {\n    position: relative; }\n  .page-framework .about-community .stats {\n    background: white;\n    border-radius: 4px;\n    color: #529eff;\n    width: 412px;\n    text-transform: uppercase;\n    position: absolute;\n    right: 15px;\n    top: -19px;\n    padding: 55px 85px 52px;\n    text-align: center;\n    box-shadow: 0 8px 16px rgba(0, 0, 0, 0.2); }\n    @media (max-width: 767px) {\n      .page-framework .about-community .stats {\n        position: relative;\n        right: 0;\n        width: 100%; } }\n    @media (max-width: 420px) {\n      .page-framework .about-community .stats {\n        padding-right: 15px;\n        padding-left: 15px; } }\n    .page-framework .about-community .stats h5 {\n      background: #fff;\n      color: #b8c1cf;\n      font-size: 11px;\n      position: relative;\n      padding: 0 10px;\n      font-weight: 700;\n      letter-spacing: .2em; }\n      .page-framework .about-community .stats h5::before, .page-framework .about-community .stats h5::after {\n        content: '';\n        left: 0;\n        right: 73%;\n        border-bottom: 1px solid #d0d6e0;\n        display: block;\n        top: 4px;\n        position: absolute; }\n      .page-framework .about-community .stats h5::after {\n        left: 73%;\n        right: 0; }\n    .page-framework .about-community .stats h1 {\n      font-weight: 600;\n      font-size: 78px;\n      letter-spacing: -3px;\n      margin-bottom: 0;\n      margin-top: 36px; }\n    .page-framework .about-community .stats h4 {\n      margin-top: -3px;\n      font-size: 13px;\n      color: #272a2f;\n      font-weight: 700;\n      letter-spacing: 5px; }\n    .page-framework .about-community .stats ul {\n      list-style: none;\n      padding: 33px 0 0; }\n      @media (max-width: 767px) {\n        .page-framework .about-community .stats ul {\n          max-width: 250px;\n          margin: 0 auto; } }\n    .page-framework .about-community .stats li {\n      font-weight: 700;\n      text-align: left;\n      position: relative;\n      letter-spacing: .15em;\n      padding: 12px 0 16px 37px;\n      font-size: 13px; }\n      .page-framework .about-community .stats li::before {\n        background: url(\"/img/framework/icons-sm.png\") no-repeat 0 0;\n        background-size: 24px;\n        height: 24px;\n        width: 24px;\n        content: '';\n        display: block;\n        position: absolute;\n        left: -4px;\n        top: 10px; }\n      .page-framework .about-community .stats li.devs::before {\n        background-position: 0 -120px; }\n      .page-framework .about-community .stats li.meetups::before {\n        background-position: 0 -144px; }\n      .page-framework .about-community .stats li.github::before {\n        background-position: 0 -168px; }\n      .page-framework .about-community .stats li.so::before {\n        background-position: 0 -192px; }\n  .page-framework .about-community hgroup {\n    padding-top: 108px;\n    margin-right: 425px;\n    padding-bottom: 76px; }\n    @media (max-width: 991px) {\n      .page-framework .about-community hgroup {\n        padding-top: 20px;\n        padding-bottom: 46px; } }\n    @media (max-width: 767px) {\n      .page-framework .about-community hgroup {\n        margin-right: 0;\n        text-align: center; } }\n    .page-framework .about-community hgroup h2 {\n      color: white;\n      font-weight: 400;\n      margin-bottom: 16px;\n      font-size: 27px;\n      margin-bottom: 28px; }\n    .page-framework .about-community hgroup h4 {\n      font-weight: 500;\n      font-size: 19px; }\n  .page-framework .about-community .features {\n    list-style: none;\n    margin-right: 420px;\n    padding: 0; }\n    @media (max-width: 767px) {\n      .page-framework .about-community .features {\n        margin-right: 0; } }\n    .page-framework .about-community .features li {\n      padding: 0 64px 83px 78px;\n      display: inline-block;\n      position: relative;\n      width: 49%;\n      font-weight: 500;\n      font-size: 16px; }\n      @media (max-width: 991px) {\n        .page-framework .about-community .features li {\n          width: 100%;\n          padding-right: 5px;\n          padding-bottom: 50px; } }\n      .page-framework .about-community .features li::before {\n        background: url(\"/img/framework/icons-md.png\") no-repeat 0 0;\n        background-size: 80px;\n        height: 80px;\n        width: 80px;\n        content: '';\n        display: block;\n        position: absolute;\n        left: -11px;\n        top: -11px; }\n      .page-framework .about-community .features li.so::before {\n        background-position: 0 -80px; }\n      .page-framework .about-community .features li.slack::before {\n        background-position: 0 -160px; }\n      .page-framework .about-community .features li.forum::before {\n        background-position: 0 -240px; }\n  .page-framework .about-community a {\n    color: white; }\n    .page-framework .about-community a:hover {\n      text-decoration: none;\n      color: rgba(255, 255, 255, 0.7); }\n\n.page-framework .loved-by {\n  text-align: center;\n  position: relative; }\n  .page-framework .loved-by h2 {\n    margin-top: 125px;\n    padding-top: 58px;\n    margin-bottom: 67px;\n    font-size: 22px;\n    font-weight: 500;\n    color: #4a566b;\n    position: relative;\n    letter-spacing: -.03em; }\n    .page-framework .loved-by h2::before {\n      background: url(\"/img/framework/heart-icon.png\") no-repeat center top;\n      background-size: 48px;\n      height: 43px;\n      width: 48px;\n      content: '';\n      display: block;\n      position: absolute;\n      top: 0;\n      left: calc(50% - 24px);\n      -webkit-animation: pulse 3.5s infinite;\n              animation: pulse 3.5s infinite; }\n    .page-framework .loved-by h2 strong {\n      font-weight: 500;\n      color: #272a2f; }\n  .page-framework .loved-by h3 {\n    font-family: 'Georgia', sans-serif;\n    font-size: 22px;\n    margin: 0 auto;\n    display: inline-block;\n    max-width: 900px;\n    color: #727a87;\n    line-height: 2.2em;\n    position: relative;\n    font-weight: 300;\n    position: absolute;\n    left: 0;\n    right: 0;\n    opacity: 0; }\n    .page-framework .loved-by h3.active {\n      position: relative;\n      opacity: 1; }\n      .page-framework .loved-by h3.active::before {\n        background: url(\"/img/quote.png\") no-repeat;\n        background-size: 50px 50px;\n        height: 50px;\n        width: 50px;\n        content: '';\n        position: absolute;\n        left: -50px;\n        top: -5px;\n        opacity: .7; }\n  .page-framework .loved-by .quotees {\n    list-style: none;\n    padding: 36px 0 44px; }\n    @media (max-width: 991px) {\n      .page-framework .loved-by .quotees {\n        display: -ms-flexbox;\n        display: flex;\n        -ms-flex-wrap: wrap;\n            flex-wrap: wrap;\n        -ms-flex-pack: distribute;\n            justify-content: space-around; } }\n    .page-framework .loved-by .quotees li {\n      list-style: none;\n      text-align: left;\n      display: inline-block;\n      position: relative;\n      padding-left: 90px;\n      padding-right: 40px;\n      vertical-align: top;\n      min-width: 23%;\n      min-height: 80px;\n      margin-bottom: 20px;\n      opacity: .3;\n      transition: .3s opacity;\n      cursor: pointer; }\n      @media (max-width: 991px) {\n        .page-framework .loved-by .quotees li {\n          -ms-flex: 0 0 240px;\n              flex: 0 0 240px;\n          padding-right: 20px; } }\n      .page-framework .loved-by .quotees li.active {\n        opacity: 1; }\n      .page-framework .loved-by .quotees li img {\n        position: absolute;\n        left: 0;\n        width: 88px;\n        height: 80px; }\n      .page-framework .loved-by .quotees li strong {\n        display: block;\n        font-weight: 500;\n        font-size: 16px;\n        margin-top: 27px; }\n      .page-framework .loved-by .quotees li span {\n        color: #727a87;\n        font-size: 14px; }\n        .page-framework .loved-by .quotees li span a {\n          color: #4a8bfc; }\n          .page-framework .loved-by .quotees li span a:hover {\n            color: #317bfc;\n            text-decoration: none; }\n  .page-framework .loved-by .companies {\n    width: 100%;\n    max-width: 977px;\n    margin: 10px auto 123px; }\n\n.fadeInDown {\n  -webkit-animation-name: fadeInDown;\n          animation-name: fadeInDown; }\n\n#slider {\n  margin: 0 auto;\n  padding: 0;\n  position: relative;\n  top: -78px;\n  width: 100%;\n  overflow-x: hidden; }\n  #slider .slick-prev,\n  #slider .slick-next {\n    left: 10px;\n    top: 40%; }\n    #slider .slick-prev:before,\n    #slider .slick-next:before {\n      content: ' ';\n      display: block;\n      position: relative;\n      background: no-repeat url(\"/img/slider-arrow-left.png\");\n      background-size: 19px;\n      width: 19px;\n      height: 42px;\n      z-index: 1000;\n      opacity: .4;\n      transition: .3s opacity; }\n    #slider .slick-prev:hover:before,\n    #slider .slick-next:hover:before {\n      opacity: 1; }\n  #slider .slick-next {\n    left: auto;\n    right: 10px; }\n    #slider .slick-next:before {\n      background: no-repeat url(\"/img/slider-arrow-right.png\");\n      background-size: 19px; }\n  #slider .slick-fade-out {\n    opacity: 1 !important; }\n  #slider .slide {\n    padding: 100px 0 100px;\n    width: 100%;\n    outline: none; }\n  #slider .feature-img {\n    min-height: 502px; }\n  #slider .slick-dots {\n    bottom: 97px; }\n    #slider .slick-dots li button:before {\n      color: white;\n      font-size: 22px;\n      transition: opacity .2s, -webkit-transform .2s;\n      transition: transform .2s, opacity .2s;\n      transition: transform .2s, opacity .2s, -webkit-transform .2s; }\n    #slider .slick-dots li.slick-active button:before {\n      -webkit-transform: scale(1.3);\n              transform: scale(1.3); }\n  #slider .col-sm-6:first-child {\n    padding-left: 0;\n    min-height: 604px; }\n    @media (max-width: 767px) {\n      #slider .col-sm-6:first-child {\n        min-height: 304px; } }\n  #slider h1 {\n    margin: 50px 0 0 0;\n    font-size: 48px;\n    font-weight: 400;\n    color: white;\n    letter-spacing: -0.05em;\n    text-shadow: 0 1px 2px rgba(0, 0, 0, 0.07);\n    cursor: default;\n    line-height: 64px; }\n    #slider h1 strong {\n      font-weight: 600; }\n  #slider h2 {\n    font-size: 32px;\n    color: white; }\n  #slider h3 {\n    color: #d8e8ff;\n    font-size: 18px;\n    font-weight: 500;\n    cursor: default;\n    margin: 20px 0px 32px;\n    line-height: 1.6;\n    letter-spacing: -0.02em;\n    max-width: 500px;\n    text-shadow: 0 1px 2px rgba(0, 0, 0, 0.07); }\n  #slider .btn-row {\n    margin-top: 66px; }\n  #slider .ion-chevron-right {\n    font-size: 16px;\n    margin-left: 4px; }\n\n.home .navbar {\n  background: none;\n  background: #4E8EF7�/; }\n\n@media screen and (-ms-high-contrast: active), (-ms-high-contrast: none) {\n  .home .navbar {\n    background: #4E8EF7; } }\n\n@media (max-width: 991px) {\n  #slider {\n    top: -134px; }\n    #slider .slide {\n      padding: 125px 0 50px; }\n    #slider .slick-dots {\n      bottom: 172px; }\n    #slider .feature-img {\n      min-height: 455px; }\n    #slider h1 {\n      font-size: 32px;\n      line-height: 48px;\n      margin-top: 84px; }\n    #slider h3 {\n      font-size: 18px; } }\n\n@media (max-width: 767px) {\n  #slider {\n    top: -392px; }\n    #slider .slide {\n      padding: 472px 0 188px; }\n    #slider .slick-dots {\n      bottom: 229px; }\n    #slider .feature-img {\n      min-height: 305px; }\n    #slider .logo,\n    #slider .slide-creator .logo {\n      margin: -15px auto 15px;\n      text-align: center; }\n    #slider h1 {\n      font-size: 30px;\n      margin: 0 auto;\n      text-align: center; }\n    #slider h3 {\n      font-size: 14px;\n      margin: 0 auto;\n      text-align: center; }\n    #slider .logo {\n      margin: 0 auto 15px; }\n  .home .utility-bar {\n    margin-top: -628px; } }\n\n.slide-home {\n  background: #298fff;\n  background: linear-gradient(to right, #347eff 0%, #1ea3ff 100%); }\n\n.social-row {\n  margin: 12px 0 0 0;\n  font-weight: 500;\n  padding-left: 0;\n  display: inline-block;\n  float: left; }\n  @media (max-width: 767px) {\n    .social-row {\n      float: none; } }\n  .social-row li {\n    display: inline-block;\n    height: 27px;\n    margin-right: 22px;\n    font-size: 14px; }\n    .social-row li i {\n      padding-right: 2px;\n      display: inline; }\n    @media (max-width: 991px) {\n      .social-row li {\n        font-size: 14px;\n        margin-right: 15px; }\n        .social-row li i {\n          padding-right: 4px; } }\n    @media (max-width: 360px) {\n      .social-row li:nth-child(2) {\n        display: none; } }\n  .social-row a {\n    text-decoration: none;\n    opacity: .6;\n    color: white;\n    letter-spacing: -.02em;\n    transition: .3s opacity; }\n    .social-row a:hover {\n      opacity: 1; }\n\n/*# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImZyYW1ld29yay5jc3MiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsaUJBQWlCO0FBQ2pCO0VBQ0UsbUJBQW1CLEVBQUU7RUFDckI7O0lBRUUsYUFBYTtJQUNiLG9CQUFvQixFQUFFO0VBQ3hCO0lBQ0UsbUJBQW1CO0lBQ25CLGVBQWU7SUFDZixnQkFBZ0IsRUFBRTtFQUNwQjtJQUNFLGtCQUFrQjtJQUNsQixlQUFlO0lBQ2YsZ0JBQWdCO0lBQ2hCLGtCQUFrQjtJQUNsQixpQkFBaUI7SUFDakIsZ0JBQWdCO0lBQ2hCLDBDQUEwQyxFQUFFO0VBQzlDO0lBQ0UsY0FBYyxFQUFFOztBQUVwQjtFQUNFLFdBQVcsRUFBRTs7QUFFZjtFQUNFLGdDQUFnQztFQUNoQyxpQkFBaUI7RUFDakIsZ0JBQWdCLEVBQUU7RUFDbEI7SUFDRSxnQ0FBZ0MsRUFBRTtJQUNsQztNQUNFLGdDQUFnQztNQUNoQyxzQkFBc0IsRUFBRTs7QUFFOUI7RUFDRSxjQUFjLEVBQUU7RUFDaEI7SUFDRTtNQUNFLGNBQWMsRUFBRSxFQUFFO0VBQ3RCO0lBQ0Usb0JBQW9CLEVBQUU7RUFDeEI7SUFDRSxvQkFBb0IsRUFBRTtFQUN4QjtJQUNFLGFBQWE7SUFDYixtQkFBbUI7SUFDbkIsV0FBVztJQUNYLFVBQVUsRUFBRTtFQUNkO0lBQ0UsYUFBYTtJQUNiLG1CQUFtQjtJQUNuQixVQUFVO0lBQ1YsYUFBYSxFQUFFO0lBQ2Y7TUFDRTtRQUNFLFNBQVMsRUFBRSxFQUFFO0VBQ25COztJQUVFLFdBQVc7SUFDWCxrQ0FBMEI7WUFBMUIsMEJBQTBCO0lBQzFCLHNDQUE4QjtZQUE5Qiw4QkFBOEIsRUFBRTtFQUNsQztJQUNFLDZCQUFxQjtZQUFyQixxQkFBcUIsRUFBRTtFQUN6QjtJQUNFLDZCQUFxQjtZQUFyQixxQkFBcUIsRUFBRTtFQUN6QjtJQUNFLFdBQVc7SUFDWCw4QkFBc0I7WUFBdEIsc0JBQXNCO0lBQ3RCLHNDQUE4QjtZQUE5Qiw4QkFBOEI7SUFDOUIsNEJBQW9CO1lBQXBCLG9CQUFvQixFQUFFO0VBQ3hCO0lBQ0Usa0VBQWtFO0lBQ2xFLDJCQUEyQjtJQUMzQiw2QkFBNkI7SUFDN0IsY0FBYztJQUNkLGFBQWE7SUFDYixZQUFZO0lBQ1osbUJBQW1CO0lBQ25CLFNBQVM7SUFDVCxVQUFVLEVBQUU7SUFDWjtNQUNFO1FBQ0UsY0FBYyxFQUFFLEVBQUU7RUFDeEI7SUFDRSxXQUFXLEVBQUU7SUFDYjtNQUNFLFlBQVk7TUFDWixnQ0FBZ0M7TUFDaEMsNkJBQXFCO2NBQXJCLHFCQUFxQixFQUFFO0lBQ3pCO01BQ0UsWUFBWTtNQUNaLCtCQUErQjtNQUMvQiw2QkFBcUI7Y0FBckIscUJBQXFCLEVBQUU7SUFDekI7O01BRUUsV0FBVyxFQUFFO0VBQ2pCO0lBQ0UsbUJBQW1CO0lBQ25CLFdBQVc7SUFDWCxjQUFjO0lBQ2QsY0FBYztJQUNkLGFBQWE7SUFDYiwyQkFBMkI7SUFDM0IsaUJBQWlCO0lBQ2pCLGdCQUFnQjtJQUNoQixzQkFBc0I7SUFDdEIsNENBQTRDLEVBQUU7SUFDOUM7TUFDRTtRQUNFLGNBQWMsRUFBRSxFQUFFOztBQUUxQjtFQUNFO0lBQ0Usa0JBQWtCLEVBQUU7SUFDcEI7TUFDRSxpQkFBaUIsRUFBRTtNQUNuQjtRQUNFLGdCQUFnQixFQUFFO01BQ3BCO1FBQ0UsZ0JBQWdCLEVBQUU7TUFDcEI7UUFDRSxzQkFBc0IsRUFBRTtNQUMxQjtRQUNFLGNBQWMsRUFBRTtNQUNsQjtRQUNFLGVBQWUsRUFBRTtNQUNuQjtRQUNFLGVBQWUsRUFBRTtJQUNyQjtNQUNFLDZCQUE2QjtNQUM3QixrQkFBa0IsRUFBRSxFQUFFOztBQUU1QjtFQUNFLG1CQUFtQjtFQUNuQixtQkFBbUI7RUFDbkIscUJBQXFCO0VBQ3JCLFlBQVk7RUFDWixnQ0FBZ0MsRUFBRTtFQUNsQztJQUNFO01BQ0UsbUJBQW1CLEVBQUUsRUFBRTtFQUMzQjtJQUNFO01BQ0UsbUJBQW1CLEVBQUUsRUFBRTtFQUMzQjtJQUNFLGlCQUFpQjtJQUNqQixlQUFlO0lBQ2Ysd0JBQXdCO0lBQ3hCLG9CQUFvQixFQUFFO0VBQ3hCO0lBQ0UsaUJBQWlCO0lBQ2pCLGFBQWEsRUFBRTtJQUNmO01BQ0U7UUFDRSw4QkFBOEIsRUFBRSxFQUFFO0lBQ3RDO01BQ0U7UUFDRSxZQUFZO1FBQ1osZ0JBQWdCO1FBQ2hCLGlCQUFpQixFQUFFLEVBQUU7RUFDM0I7SUFDRSxtQkFBbUIsRUFBRTs7QUFFekI7RUFDRSxvRUFBb0U7RUFDcEUsdUJBQXVCO0VBQ3ZCLG1CQUFtQjtFQUNuQixtQkFBbUI7RUFDbkIsY0FBYztFQUNkLHVCQUF1QixFQUFFO0VBQ3pCO0lBQ0UsWUFBWTtJQUNaLDRDQUE0QyxFQUFFO0VBQ2hEO0lBQ0UsaUJBQWlCLEVBQUU7SUFDbkI7TUFDRSxpQkFBaUIsRUFBRTtFQUN2QjtJQUNFLGlCQUFpQjtJQUNqQixvQkFBb0IsRUFBRTtFQUN4QjtJQUNFLHdCQUF3QjtJQUN4QixlQUFlO0lBQ2YsNENBQTRDLEVBQUU7O0FBRWxEO0VBQ0UsbUJBQW1CO0VBQ25CLG1CQUFtQjtFQUNuQixnRUFBZ0U7RUFDaEUsa0JBQWtCLEVBQUU7RUFDcEI7SUFDRSxpQkFBaUIsRUFBRTtFQUNyQjtJQUNFLGlCQUFpQjtJQUNqQixjQUFjO0lBQ2Qsb0JBQW9CO0lBQ3BCLFlBQVksRUFBRTtJQUNkO01BQ0UsaUJBQWlCO01BQ2pCLFlBQVk7TUFDWixzREFBc0Q7TUFDdEQsMkJBQTJCLEVBQUU7TUFDN0I7UUFDRSxzQkFBc0I7UUFDdEIsc0RBQXNELEVBQUU7RUFDOUQ7SUFDRSxZQUFZO0lBQ1osb0JBQW9CLEVBQUU7RUFDeEI7SUFDRSxnQkFBZ0IsRUFBRTtFQUNwQjtJQUNFLFlBQVk7SUFDWixtQkFBbUI7SUFDbkIsVUFBVTtJQUNWLFdBQVc7SUFDWCw0Q0FBNEM7SUFDNUMsb0NBQW9DO0lBQ3BDLDRCQUE0QjtJQUM1QixnQkFBZ0I7SUFDaEIsZUFBZSxFQUFFO0lBQ2pCO01BQ0UsWUFBWTtNQUNaLGtCQUFrQjtNQUNsQix1QkFBdUI7TUFDdkIsaUJBQWlCO01BQ2pCLGtCQUFrQixFQUFFO0lBQ3RCO01BQ0UsYUFBYTtNQUNiLGtCQUFrQjtNQUNsQix1QkFBdUI7TUFDdkIsbUJBQW1CLEVBQUU7O0FBRTNCO0VBQ0Usb0JBQW9CO0VBQ3BCLGtCQUFrQjtFQUNsQixxQkFBcUIsRUFBRTtFQUN2QjtJQUNFLCtFQUErRTtJQUMvRSx1QkFBdUI7SUFDdkIscUJBQWM7SUFBZCxjQUFjO0lBQ2QsdUJBQW9CO1FBQXBCLG9CQUFvQjtJQUNwQixtQkFBbUI7SUFDbkIsMENBQTBDO0lBQzFDLDZCQUE2QjtJQUM3QixtQkFBbUI7SUFDbkIsa0JBQWtCLEVBQUU7SUFDcEI7TUFDRTtRQUNFLGVBQWU7UUFDZixtQkFBbUI7UUFDbkIsb0JBQW9CO1FBQ3BCLG1CQUFtQixFQUFFO1FBQ3JCO1VBQ0UsY0FBYyxFQUFFO1FBQ2xCO1VBQ0UsZUFBZTtVQUNmLGlCQUFpQixFQUFFLEVBQUU7RUFDN0I7SUFDRSxxQkFBYTtRQUFiLGFBQWE7SUFDYixhQUFhO0lBQ2IsbUJBQW1CO0lBQ25CLFdBQVc7SUFDWCxnQkFBZ0IsRUFBRTtFQUNwQjtJQUNFLGVBQWU7SUFDZixnQkFBZ0I7SUFDaEIsdUJBQXVCO0lBQ3ZCLG9CQUFvQjtJQUNwQixpQkFBaUIsRUFBRTtFQUNyQjtJQUNFLGlCQUFpQjtJQUNqQixjQUFjO0lBQ2QsZ0JBQWdCO0lBQ2hCLHdCQUF3QjtJQUN4QixtQkFBbUIsRUFBRTtFQUN2QjtJQUNFLGdCQUFnQjtJQUNoQix3QkFBd0I7SUFDeEIsaUJBQWlCO0lBQ2pCLGFBQWE7SUFDYiw2REFBNkQsRUFBRTtFQUNqRTtJQUNFLGlCQUFpQjtJQUNqQixnQkFBZ0I7SUFDaEIsdUJBQXVCO0lBQ3ZCLHdCQUF3QjtJQUN4QixpQkFBaUI7SUFDakIsbUJBQW1CO0lBQ25CLFdBQVc7SUFDWCwwQkFBMEIsRUFBRTs7QUFFaEM7RUFDRSxvQkFBb0I7RUFDcEIsc0JBQXNCLEVBQUU7RUFDeEI7SUFDRTtNQUNFLHFCQUFxQixFQUFFLEVBQUU7RUFDN0I7SUFDRSxtQkFBbUI7SUFDbkIsbUJBQW1CLEVBQUU7SUFDckI7TUFDRTtRQUNFLG1CQUFtQixFQUFFLEVBQUU7SUFDM0I7TUFDRTtRQUNFLG1CQUFtQixFQUFFLEVBQUU7SUFDM0I7O01BRUUsV0FBVyxFQUFFO01BQ2I7UUFDRTs7VUFFRSxZQUFZO1VBQ1osbUJBQW1CLEVBQUUsRUFBRTtJQUM3QjtNQUNFLGdCQUFnQjtNQUNoQixpQkFBaUI7TUFDakIsdUJBQXVCLEVBQUU7SUFDM0I7TUFDRSxnQkFBZ0I7TUFDaEIsaUJBQWlCO01BQ2pCLGVBQWU7TUFDZixtQkFBbUI7TUFDbkIsaUJBQWlCO01BQ2pCLHVCQUF1QixFQUFFO0VBQzdCO0lBQ0UsaUJBQWlCO0lBQ2pCLG1CQUFtQjtJQUNuQixTQUFTO0lBQ1QsV0FBVztJQUNYLFdBQVcsRUFBRTtJQUNiO01BQ0U7UUFDRSxVQUFVO1FBQ1YsUUFBUTtRQUNSLGVBQWU7UUFDZixhQUFhLEVBQUUsRUFBRTtJQUNyQjtNQUNFO1FBQ0UsbUNBQTJCO2dCQUEzQiwyQkFBMkI7UUFDM0IsVUFBVTtRQUNWLGFBQWEsRUFBRSxFQUFFO0lBQ3JCO01BQ0U7UUFDRSwrQkFBK0IsRUFBRSxFQUFFO0lBQ3ZDO01BQ0UsOERBQThEO01BQzlELHVCQUF1QjtNQUN2QixjQUFjO01BQ2QsYUFBYTtNQUNiLG1CQUFtQjtNQUNuQixXQUFXO01BQ1gsNkJBQXFCO2NBQXJCLHFCQUFxQjtNQUNyQixzQ0FBOEI7Y0FBOUIsOEJBQThCLEVBQUU7TUFDaEM7UUFDRSxhQUFhO1FBQ2IsOEJBQXNCO2dCQUF0QixzQkFBc0IsRUFBRTtNQUMxQjtRQUNFLFdBQVc7UUFDWCw4QkFBOEI7UUFDOUIsOEJBQXNCO2dCQUF0QixzQkFBc0IsRUFBRTtNQUMxQjtRQUNFLGFBQWE7UUFDYiw4QkFBOEI7UUFDOUIsOEJBQXNCO2dCQUF0QixzQkFBc0IsRUFBRTtNQUMxQjtRQUNFLFVBQVU7UUFDViw4QkFBOEI7UUFDOUIsNEJBQW9CO2dCQUFwQixvQkFBb0IsRUFBRTtFQUM1QjtJQUNFLGlCQUFpQixFQUFFO0lBQ25CO01BQ0U7UUFDRSxxQkFBYztRQUFkLGNBQWM7UUFDZCxvQkFBZ0I7WUFBaEIsZ0JBQWdCO1FBQ2hCLGlCQUFpQixFQUFFLEVBQUU7SUFDekI7TUFDRSx1QkFBdUI7TUFDdkIsc0JBQXNCO01BQ3RCLG1CQUFtQjtNQUNuQixvQkFBb0I7TUFDcEIsb0JBQW9CO01BQ3BCLG1FQUFtRTtNQUNuRSxzQkFBc0IsRUFBRTtNQUN4QjtRQUNFO1VBQ0UsWUFBWTtVQUNaLG9CQUFnQjtjQUFoQixnQkFBZ0I7VUFDaEIsb0JBQW9CLEVBQUUsRUFBRTtNQUM1QjtRQUNFLGdCQUFnQjtRQUNoQixpQkFBaUI7UUFDakIsZ0JBQWdCO1FBQ2hCLG1CQUFtQixFQUFFO01BQ3ZCO1FBQ0UsZ0JBQWdCO1FBQ2hCLGlCQUFpQjtRQUNqQixlQUFlO1FBQ2YsbUJBQW1CO1FBQ25CLHVCQUF1QixFQUFFO01BQzNCO1FBQ0UsaUJBQWlCO1FBQ2pCLHdCQUF3QixFQUFFOztBQUVsQztFQUNFLG1CQUFtQixFQUFFO0VBQ3JCO0lBQ0UsYUFBYTtJQUNiLDBFQUEwRTtJQUMxRSxtQkFBbUI7SUFDbkIsbUJBQW1CO0lBQ25CLFdBQVc7SUFDWCxrQkFBa0IsRUFBRTtJQUNwQjtNQUNFO1FBQ0UsY0FBYyxFQUFFLEVBQUU7SUFDdEI7O01BRUUsNERBQTRELEVBQUU7SUFDaEU7O01BRUUsaUJBQWlCLEVBQUU7SUFDckI7O01BRUUsV0FBVyxFQUFFO0lBQ2Y7TUFDRSx3QkFBd0I7TUFDeEIsbUJBQW1CO01BQ25CLFdBQVcsRUFBRTtNQUNiO1FBQ0UsbUJBQW1CO1FBQ25CLGFBQWE7UUFDYixpR0FBaUc7UUFDakcsUUFBUTtRQUNSLFNBQVM7UUFDVCxZQUFZO1FBQ1osWUFBWTtRQUNaLGVBQWUsRUFBRTtNQUNuQjtRQUNFLGlCQUFpQjtRQUNqQixnQkFBZ0I7UUFDaEIscUJBQXFCO1FBQ3JCLDBCQUEwQjtRQUMxQixzQkFBc0IsRUFBRTtNQUMxQjtRQUNFLGlCQUFpQjtRQUNqQixtQkFBbUI7UUFDbkIsWUFBWTtRQUNaLFVBQVUsRUFBRTtRQUNaO1VBQ0UsNkRBQTZEO1VBQzdELHNCQUFzQjtVQUN0QixhQUFhO1VBQ2IsWUFBWTtVQUNaLHNCQUFzQjtVQUN0QixrQkFBa0IsRUFBRTtVQUNwQjtZQUNFLDZCQUE2QixFQUFFO1VBQ2pDO1lBQ0UsNkJBQTZCLEVBQUU7VUFDakM7WUFDRSw2QkFBNkIsRUFBRTtVQUNqQztZQUNFLDZCQUE2QixFQUFFO0VBQ3pDO0lBQ0Usa0JBQWtCO0lBQ2xCLG1CQUFtQixFQUFFO0lBQ3JCO01BQ0U7UUFDRSxlQUFlO1FBQ2Ysa0JBQWtCO1FBQ2xCLG1CQUFtQjtRQUNuQixjQUFjO1FBQ2Qsb0JBQW9CLEVBQUUsRUFBRTtJQUM1QjtNQUNFO1FBQ0UsY0FBYyxFQUFFLEVBQUU7SUFDdEI7TUFDRSxrQkFBa0I7TUFDbEIsZ0JBQWdCO01BQ2hCLG1CQUFtQjtNQUNuQixpQkFBaUI7TUFDakIsdUJBQXVCLEVBQUU7SUFDM0I7TUFDRSxnQkFBZ0I7TUFDaEIsaUJBQWlCO01BQ2pCLGVBQWU7TUFDZixtQkFBbUI7TUFDbkIsaUJBQWlCO01BQ2pCLHdCQUF3QixFQUFFO01BQzFCO1FBQ0UsYUFBYTtRQUNiLGlCQUFpQixFQUFFO0VBQ3pCO0lBQ0UsaUJBQWlCO0lBQ2pCLG1CQUFtQixFQUFFO0lBQ3JCO01BQ0U7UUFDRSxxQkFBcUIsRUFBRSxFQUFFO0lBQzdCO01BQ0Usc0JBQXNCO01BQ3RCLGtCQUFrQjtNQUNsQixtQkFBbUI7TUFDbkIsYUFBYTtNQUNiLG9CQUFvQjtNQUNwQixrQkFBa0I7TUFDbEIsd0JBQXdCLEVBQUU7TUFDMUI7UUFDRTtVQUNFLFlBQVk7VUFDWixtQkFBbUI7VUFDbkIsb0JBQW9CO1VBQ3BCLGlCQUFpQixFQUFFLEVBQUU7TUFDekI7UUFDRSw2REFBNkQ7UUFDN0Qsc0JBQXNCO1FBQ3RCLGFBQWE7UUFDYixZQUFZO1FBQ1osWUFBWTtRQUNaLE9BQU87UUFDUCxXQUFXO1FBQ1gsbUJBQW1CLEVBQUU7UUFDckI7VUFDRTtZQUNFLHVCQUF1QixFQUFFLEVBQUU7TUFDakM7UUFDRSw2QkFBNkIsRUFBRTtNQUNqQztRQUNFLDhCQUE4QixFQUFFO01BQ2xDO1FBQ0UsaUJBQWlCLEVBQUU7TUFDckI7UUFDRSxnQkFBZ0I7UUFDaEIsaUJBQWlCO1FBQ2pCLG9CQUFvQjtRQUNwQix3QkFBd0IsRUFBRTtNQUM1Qjs7UUFFRSxnQkFBZ0I7UUFDaEIsZUFBZTtRQUNmLGlCQUFpQjtRQUNqQix3QkFBd0IsRUFBRTtNQUM1QjtRQUNFLGVBQWU7UUFDZixpQkFBaUIsRUFBRTtRQUNuQjtVQUNFLG1CQUFtQjtVQUNuQixZQUFZO1VBQ1osU0FBUyxFQUFFO1FBQ2I7VUFDRSxlQUFlO1VBQ2Ysc0JBQXNCLEVBQUU7O0FBRWxDO0VBQ0Usb0JBQW9CO0VBQ3BCLGdFQUFnRTtFQUNoRSxtQkFBbUI7RUFDbkIscUJBQXFCO0VBQ3JCLGVBQWUsRUFBRTtFQUNqQjtJQUNFLG1CQUFtQjtJQUNuQixvQkFBb0IsRUFBRTtJQUN0QjtNQUNFLGFBQWE7TUFDYixnQkFBZ0I7TUFDaEIsaUJBQWlCO01BQ2pCLG9CQUFvQjtNQUNwQix1QkFBdUIsRUFBRTtJQUMzQjtNQUNFLGlCQUFpQjtNQUNqQixnQkFBZ0I7TUFDaEIsdUJBQXVCLEVBQUU7RUFDN0I7SUFDRSxpQkFBaUI7SUFDakIsV0FBVyxFQUFFO0lBQ2I7TUFDRTtRQUNFLHFCQUFjO1FBQWQsY0FBYztRQUNkLG9CQUFnQjtZQUFoQixnQkFBZ0IsRUFBRSxFQUFFO0lBQ3hCO01BQ0Usd0JBQXdCO01BQ3hCLHNCQUFzQjtNQUN0QixtQkFBbUI7TUFDbkIsb0JBQW9CO01BQ3BCLGlCQUFpQjtNQUNqQixnQkFBZ0I7TUFDaEIsb0JBQW9CO01BQ3BCLG1CQUFtQjtNQUNuQixvQkFBb0I7TUFDcEIsbUJBQW1CO01BQ25CLHdCQUF3QixFQUFFO01BQzFCO1FBQ0Usd0JBQXdCO1FBQ3hCLGlCQUFpQixFQUFFO01BQ3JCO1FBQ0U7VUFDRSxZQUFZO1VBQ1osb0JBQWdCO2NBQWhCLGdCQUFnQixFQUFFO1VBQ2xCO1lBQ0UsWUFBWSxFQUFFLEVBQUU7TUFDdEI7UUFDRSw2REFBNkQ7UUFDN0Qsc0JBQXNCO1FBQ3RCLGFBQWE7UUFDYixZQUFZO1FBQ1osWUFBWTtRQUNaLG1CQUFtQjtRQUNuQixRQUFRO1FBQ1IsT0FBTyxFQUFFO01BQ1g7UUFDRSw4QkFBOEIsRUFBRTtNQUNsQztRQUNFLDhCQUE4QixFQUFFO01BQ2xDO1FBQ0UsOEJBQThCLEVBQUU7TUFDbEM7UUFDRSw4QkFBOEIsRUFBRTtNQUNsQztRQUNFLDhCQUE4QixFQUFFO01BQ2xDO1FBQ0UsOEJBQThCLEVBQUU7TUFDbEM7UUFDRSxhQUFhLEVBQUU7UUFDZjtVQUNFLHNCQUFzQjtVQUN0QixnQ0FBZ0MsRUFBRTs7QUFFNUM7RUFDRSxvQkFBb0I7RUFDcEIsdUhBQXVIO0VBQ3ZILDZCQUE2QjtFQUM3QixlQUFlO0VBQ2YscUJBQXFCLEVBQUU7RUFDdkI7SUFDRSxtQkFBbUIsRUFBRTtFQUN2QjtJQUNFLGtCQUFrQjtJQUNsQixtQkFBbUI7SUFDbkIsZUFBZTtJQUNmLGFBQWE7SUFDYiwwQkFBMEI7SUFDMUIsbUJBQW1CO0lBQ25CLFlBQVk7SUFDWixXQUFXO0lBQ1gsd0JBQXdCO0lBQ3hCLG1CQUFtQjtJQUNuQiwwQ0FBMEMsRUFBRTtJQUM1QztNQUNFO1FBQ0UsbUJBQW1CO1FBQ25CLFNBQVM7UUFDVCxZQUFZLEVBQUUsRUFBRTtJQUNwQjtNQUNFO1FBQ0Usb0JBQW9CO1FBQ3BCLG1CQUFtQixFQUFFLEVBQUU7SUFDM0I7TUFDRSxpQkFBaUI7TUFDakIsZUFBZTtNQUNmLGdCQUFnQjtNQUNoQixtQkFBbUI7TUFDbkIsZ0JBQWdCO01BQ2hCLGlCQUFpQjtNQUNqQixxQkFBcUIsRUFBRTtNQUN2QjtRQUNFLFlBQVk7UUFDWixRQUFRO1FBQ1IsV0FBVztRQUNYLGlDQUFpQztRQUNqQyxlQUFlO1FBQ2YsU0FBUztRQUNULG1CQUFtQixFQUFFO01BQ3ZCO1FBQ0UsVUFBVTtRQUNWLFNBQVMsRUFBRTtJQUNmO01BQ0UsaUJBQWlCO01BQ2pCLGdCQUFnQjtNQUNoQixxQkFBcUI7TUFDckIsaUJBQWlCO01BQ2pCLGlCQUFpQixFQUFFO0lBQ3JCO01BQ0UsaUJBQWlCO01BQ2pCLGdCQUFnQjtNQUNoQixlQUFlO01BQ2YsaUJBQWlCO01BQ2pCLG9CQUFvQixFQUFFO0lBQ3hCO01BQ0UsaUJBQWlCO01BQ2pCLGtCQUFrQixFQUFFO01BQ3BCO1FBQ0U7VUFDRSxpQkFBaUI7VUFDakIsZUFBZSxFQUFFLEVBQUU7SUFDekI7TUFDRSxpQkFBaUI7TUFDakIsaUJBQWlCO01BQ2pCLG1CQUFtQjtNQUNuQixzQkFBc0I7TUFDdEIsMEJBQTBCO01BQzFCLGdCQUFnQixFQUFFO01BQ2xCO1FBQ0UsNkRBQTZEO1FBQzdELHNCQUFzQjtRQUN0QixhQUFhO1FBQ2IsWUFBWTtRQUNaLFlBQVk7UUFDWixlQUFlO1FBQ2YsbUJBQW1CO1FBQ25CLFdBQVc7UUFDWCxVQUFVLEVBQUU7TUFDZDtRQUNFLDhCQUE4QixFQUFFO01BQ2xDO1FBQ0UsOEJBQThCLEVBQUU7TUFDbEM7UUFDRSw4QkFBOEIsRUFBRTtNQUNsQztRQUNFLDhCQUE4QixFQUFFO0VBQ3RDO0lBQ0UsbUJBQW1CO0lBQ25CLG9CQUFvQjtJQUNwQixxQkFBcUIsRUFBRTtJQUN2QjtNQUNFO1FBQ0Usa0JBQWtCO1FBQ2xCLHFCQUFxQixFQUFFLEVBQUU7SUFDN0I7TUFDRTtRQUNFLGdCQUFnQjtRQUNoQixtQkFBbUIsRUFBRSxFQUFFO0lBQzNCO01BQ0UsYUFBYTtNQUNiLGlCQUFpQjtNQUNqQixvQkFBb0I7TUFDcEIsZ0JBQWdCO01BQ2hCLG9CQUFvQixFQUFFO0lBQ3hCO01BQ0UsaUJBQWlCO01BQ2pCLGdCQUFnQixFQUFFO0VBQ3RCO0lBQ0UsaUJBQWlCO0lBQ2pCLG9CQUFvQjtJQUNwQixXQUFXLEVBQUU7SUFDYjtNQUNFO1FBQ0UsZ0JBQWdCLEVBQUUsRUFBRTtJQUN4QjtNQUNFLDBCQUEwQjtNQUMxQixzQkFBc0I7TUFDdEIsbUJBQW1CO01BQ25CLFdBQVc7TUFDWCxpQkFBaUI7TUFDakIsZ0JBQWdCLEVBQUU7TUFDbEI7UUFDRTtVQUNFLFlBQVk7VUFDWixtQkFBbUI7VUFDbkIscUJBQXFCLEVBQUUsRUFBRTtNQUM3QjtRQUNFLDZEQUE2RDtRQUM3RCxzQkFBc0I7UUFDdEIsYUFBYTtRQUNiLFlBQVk7UUFDWixZQUFZO1FBQ1osZUFBZTtRQUNmLG1CQUFtQjtRQUNuQixZQUFZO1FBQ1osV0FBVyxFQUFFO01BQ2Y7UUFDRSw2QkFBNkIsRUFBRTtNQUNqQztRQUNFLDhCQUE4QixFQUFFO01BQ2xDO1FBQ0UsOEJBQThCLEVBQUU7RUFDdEM7SUFDRSxhQUFhLEVBQUU7SUFDZjtNQUNFLHNCQUFzQjtNQUN0QixnQ0FBZ0MsRUFBRTs7QUFFeEM7RUFDRSxtQkFBbUI7RUFDbkIsbUJBQW1CLEVBQUU7RUFDckI7SUFDRSxrQkFBa0I7SUFDbEIsa0JBQWtCO0lBQ2xCLG9CQUFvQjtJQUNwQixnQkFBZ0I7SUFDaEIsaUJBQWlCO0lBQ2pCLGVBQWU7SUFDZixtQkFBbUI7SUFDbkIsdUJBQXVCLEVBQUU7SUFDekI7TUFDRSxzRUFBc0U7TUFDdEUsc0JBQXNCO01BQ3RCLGFBQWE7TUFDYixZQUFZO01BQ1osWUFBWTtNQUNaLGVBQWU7TUFDZixtQkFBbUI7TUFDbkIsT0FBTztNQUNQLHVCQUF1QjtNQUN2Qix1Q0FBK0I7Y0FBL0IsK0JBQStCLEVBQUU7SUFDbkM7TUFDRSxpQkFBaUI7TUFDakIsZUFBZSxFQUFFO0VBQ3JCO0lBQ0UsbUNBQW1DO0lBQ25DLGdCQUFnQjtJQUNoQixlQUFlO0lBQ2Ysc0JBQXNCO0lBQ3RCLGlCQUFpQjtJQUNqQixlQUFlO0lBQ2YsbUJBQW1CO0lBQ25CLG1CQUFtQjtJQUNuQixpQkFBaUI7SUFDakIsbUJBQW1CO0lBQ25CLFFBQVE7SUFDUixTQUFTO0lBQ1QsV0FBVyxFQUFFO0lBQ2I7TUFDRSxtQkFBbUI7TUFDbkIsV0FBVyxFQUFFO01BQ2I7UUFDRSw0Q0FBNEM7UUFDNUMsMkJBQTJCO1FBQzNCLGFBQWE7UUFDYixZQUFZO1FBQ1osWUFBWTtRQUNaLG1CQUFtQjtRQUNuQixZQUFZO1FBQ1osVUFBVTtRQUNWLFlBQVksRUFBRTtFQUNwQjtJQUNFLGlCQUFpQjtJQUNqQixxQkFBcUIsRUFBRTtJQUN2QjtNQUNFO1FBQ0UscUJBQWM7UUFBZCxjQUFjO1FBQ2Qsb0JBQWdCO1lBQWhCLGdCQUFnQjtRQUNoQiwwQkFBOEI7WUFBOUIsOEJBQThCLEVBQUUsRUFBRTtJQUN0QztNQUNFLGlCQUFpQjtNQUNqQixpQkFBaUI7TUFDakIsc0JBQXNCO01BQ3RCLG1CQUFtQjtNQUNuQixtQkFBbUI7TUFDbkIsb0JBQW9CO01BQ3BCLG9CQUFvQjtNQUNwQixlQUFlO01BQ2YsaUJBQWlCO01BQ2pCLG9CQUFvQjtNQUNwQixZQUFZO01BQ1osd0JBQXdCO01BQ3hCLGdCQUFnQixFQUFFO01BQ2xCO1FBQ0U7VUFDRSxvQkFBZ0I7Y0FBaEIsZ0JBQWdCO1VBQ2hCLG9CQUFvQixFQUFFLEVBQUU7TUFDNUI7UUFDRSxXQUFXLEVBQUU7TUFDZjtRQUNFLG1CQUFtQjtRQUNuQixRQUFRO1FBQ1IsWUFBWTtRQUNaLGFBQWEsRUFBRTtNQUNqQjtRQUNFLGVBQWU7UUFDZixpQkFBaUI7UUFDakIsZ0JBQWdCO1FBQ2hCLGlCQUFpQixFQUFFO01BQ3JCO1FBQ0UsZUFBZTtRQUNmLGdCQUFnQixFQUFFO1FBQ2xCO1VBQ0UsZUFBZSxFQUFFO1VBQ2pCO1lBQ0UsZUFBZTtZQUNmLHNCQUFzQixFQUFFO0VBQ2xDO0lBQ0UsWUFBWTtJQUNaLGlCQUFpQjtJQUNqQix3QkFBd0IsRUFBRTs7QUFFOUI7RUFDRSxtQ0FBMkI7VUFBM0IsMkJBQTJCLEVBQUU7O0FBRS9CO0VBQ0UsZUFBZTtFQUNmLFdBQVc7RUFDWCxtQkFBbUI7RUFDbkIsV0FBVztFQUNYLFlBQVk7RUFDWixtQkFBbUIsRUFBRTtFQUNyQjs7SUFFRSxXQUFXO0lBQ1gsU0FBUyxFQUFFO0lBQ1g7O01BRUUsYUFBYTtNQUNiLGVBQWU7TUFDZixtQkFBbUI7TUFDbkIsd0RBQXdEO01BQ3hELHNCQUFzQjtNQUN0QixZQUFZO01BQ1osYUFBYTtNQUNiLGNBQWM7TUFDZCxZQUFZO01BQ1osd0JBQXdCLEVBQUU7SUFDNUI7O01BRUUsV0FBVyxFQUFFO0VBQ2pCO0lBQ0UsV0FBVztJQUNYLFlBQVksRUFBRTtJQUNkO01BQ0UseURBQXlEO01BQ3pELHNCQUFzQixFQUFFO0VBQzVCO0lBQ0Usc0JBQXNCLEVBQUU7RUFDMUI7SUFDRSx1QkFBdUI7SUFDdkIsWUFBWTtJQUNaLGNBQWMsRUFBRTtFQUNsQjtJQUNFLGtCQUFrQixFQUFFO0VBQ3RCO0lBQ0UsYUFBYSxFQUFFO0lBQ2Y7TUFDRSxhQUFhO01BQ2IsZ0JBQWdCO01BQ2hCLCtDQUF1QztNQUF2Qyx1Q0FBdUM7TUFBdkMsOERBQXVDLEVBQUU7SUFDM0M7TUFDRSw4QkFBc0I7Y0FBdEIsc0JBQXNCLEVBQUU7RUFDNUI7SUFDRSxnQkFBZ0I7SUFDaEIsa0JBQWtCLEVBQUU7SUFDcEI7TUFDRTtRQUNFLGtCQUFrQixFQUFFLEVBQUU7RUFDNUI7SUFDRSxtQkFBbUI7SUFDbkIsZ0JBQWdCO0lBQ2hCLGlCQUFpQjtJQUNqQixhQUFhO0lBQ2Isd0JBQXdCO0lBQ3hCLDJDQUEyQztJQUMzQyxnQkFBZ0I7SUFDaEIsa0JBQWtCLEVBQUU7SUFDcEI7TUFDRSxpQkFBaUIsRUFBRTtFQUN2QjtJQUNFLGdCQUFnQjtJQUNoQixhQUFhLEVBQUU7RUFDakI7SUFDRSxlQUFlO0lBQ2YsZ0JBQWdCO0lBQ2hCLGlCQUFpQjtJQUNqQixnQkFBZ0I7SUFDaEIsc0JBQXNCO0lBQ3RCLGlCQUFpQjtJQUNqQix3QkFBd0I7SUFDeEIsaUJBQWlCO0lBQ2pCLDJDQUEyQyxFQUFFO0VBQy9DO0lBQ0UsaUJBQWlCLEVBQUU7RUFDckI7SUFDRSxnQkFBZ0I7SUFDaEIsaUJBQWlCLEVBQUU7O0FBRXZCO0VBQ0UsaUJBQWlCO0VBQ2pCLHNCQUFzQixFQUFFOztBQUUxQjtFQUNFO0lBQ0Usb0JBQW9CLEVBQUUsRUFBRTs7QUFFNUI7RUFDRTtJQUNFLFlBQVksRUFBRTtJQUNkO01BQ0Usc0JBQXNCLEVBQUU7SUFDMUI7TUFDRSxjQUFjLEVBQUU7SUFDbEI7TUFDRSxrQkFBa0IsRUFBRTtJQUN0QjtNQUNFLGdCQUFnQjtNQUNoQixrQkFBa0I7TUFDbEIsaUJBQWlCLEVBQUU7SUFDckI7TUFDRSxnQkFBZ0IsRUFBRSxFQUFFOztBQUUxQjtFQUNFO0lBQ0UsWUFBWSxFQUFFO0lBQ2Q7TUFDRSx1QkFBdUIsRUFBRTtJQUMzQjtNQUNFLGNBQWMsRUFBRTtJQUNsQjtNQUNFLGtCQUFrQixFQUFFO0lBQ3RCOztNQUVFLHdCQUF3QjtNQUN4QixtQkFBbUIsRUFBRTtJQUN2QjtNQUNFLGdCQUFnQjtNQUNoQixlQUFlO01BQ2YsbUJBQW1CLEVBQUU7SUFDdkI7TUFDRSxnQkFBZ0I7TUFDaEIsZUFBZTtNQUNmLG1CQUFtQixFQUFFO0lBQ3ZCO01BQ0Usb0JBQW9CLEVBQUU7RUFDMUI7SUFDRSxtQkFBbUIsRUFBRSxFQUFFOztBQUUzQjtFQUNFLG9CQUFvQjtFQUNwQixnRUFBZ0UsRUFBRTs7QUFFcEU7RUFDRSxtQkFBbUI7RUFDbkIsaUJBQWlCO0VBQ2pCLGdCQUFnQjtFQUNoQixzQkFBc0I7RUFDdEIsWUFBWSxFQUFFO0VBQ2Q7SUFDRTtNQUNFLFlBQVksRUFBRSxFQUFFO0VBQ3BCO0lBQ0Usc0JBQXNCO0lBQ3RCLGFBQWE7SUFDYixtQkFBbUI7SUFDbkIsZ0JBQWdCLEVBQUU7SUFDbEI7TUFDRSxtQkFBbUI7TUFDbkIsZ0JBQWdCLEVBQUU7SUFDcEI7TUFDRTtRQUNFLGdCQUFnQjtRQUNoQixtQkFBbUIsRUFBRTtRQUNyQjtVQUNFLG1CQUFtQixFQUFFLEVBQUU7SUFDN0I7TUFDRTtRQUNFLGNBQWMsRUFBRSxFQUFFO0VBQ3hCO0lBQ0Usc0JBQXNCO0lBQ3RCLFlBQVk7SUFDWixhQUFhO0lBQ2IsdUJBQXVCO0lBQ3ZCLHdCQUF3QixFQUFFO0lBQzFCO01BQ0UsV0FBVyxFQUFFIiwiZmlsZSI6InBhZ2VzL2ZyYW1ld29yay5jc3MiLCJzb3VyY2VzQ29udGVudCI6WyJAY2hhcnNldCBcIlVURi04XCI7XG4ucGFnZS1mcmFtZXdvcmsgLnByaW1hcnktcm93IHtcbiAgdGV4dC1hbGlnbjogY2VudGVyOyB9XG4gIC5wYWdlLWZyYW1ld29yayAucHJpbWFyeS1yb3cgaDEsXG4gIC5wYWdlLWZyYW1ld29yayAucHJpbWFyeS1yb3cgaDIge1xuICAgIGJvcmRlcjogbm9uZTtcbiAgICBmb250LXdlaWdodDogbm9ybWFsOyB9XG4gIC5wYWdlLWZyYW1ld29yayAucHJpbWFyeS1yb3cgaDEge1xuICAgIG1hcmdpbjogMTBweCAwIDAgMDtcbiAgICBjb2xvcjogI2ViZjNmZjtcbiAgICBmb250LXNpemU6IDQ5cHg7IH1cbiAgLnBhZ2UtZnJhbWV3b3JrIC5wcmltYXJ5LXJvdyBoMiB7XG4gICAgbWFyZ2luOiA1cHggMCAwIDA7XG4gICAgY29sb3I6ICNBOEM3RkY7XG4gICAgZm9udC1zaXplOiAxNnB4O1xuICAgIGxpbmUtaGVpZ2h0OiAyOHB4O1xuICAgIGZvbnQtd2VpZ2h0OiA2MDA7XG4gICAgY3Vyc29yOiBkZWZhdWx0O1xuICAgIHRleHQtc2hhZG93OiAwIDFweCAycHggcmdiYSgwLCAwLCAwLCAwLjEpOyB9XG4gIC5wYWdlLWZyYW1ld29yayAucHJpbWFyeS1yb3cgLmRlc2t0b3AtYnRuIHtcbiAgICBkaXNwbGF5OiBub25lOyB9XG5cbi5wYWdlLWZyYW1ld29yayAuYnRuLXJvdyB7XG4gIHBhZGRpbmc6IDA7IH1cblxuLnBhZ2UtZnJhbWV3b3JrIC52ZXJzaW9uLXRleHQge1xuICBjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjQpO1xuICBmb250LXdlaWdodDogNTAwO1xuICBmb250LXNpemU6IDExcHg7IH1cbiAgLnBhZ2UtZnJhbWV3b3JrIC52ZXJzaW9uLXRleHQgYSB7XG4gICAgY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC40KTsgfVxuICAgIC5wYWdlLWZyYW1ld29yayAudmVyc2lvbi10ZXh0IGE6aG92ZXIge1xuICAgICAgY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC43KTtcbiAgICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTsgfVxuXG4ucGFnZS1mcmFtZXdvcmsgLmZlYXR1cmUtaW1nIHtcbiAgaGVpZ2h0OiAxNzVweDsgfVxuICBAbWVkaWEgKG1heC13aWR0aDogNzY3cHgpIHtcbiAgICAucGFnZS1mcmFtZXdvcmsgLmZlYXR1cmUtaW1nIHtcbiAgICAgIGRpc3BsYXk6IG5vbmU7IH0gfVxuICAucGFnZS1mcmFtZXdvcmsgLmZlYXR1cmUtaW1nIC5kZW1vLWxpbmsge1xuICAgIHZpc2liaWxpdHk6IHZpc2libGU7IH1cbiAgLnBhZ2UtZnJhbWV3b3JrIC5mZWF0dXJlLWltZyAuYXBwLWljb24ge1xuICAgIHZpc2liaWxpdHk6IHZpc2libGU7IH1cbiAgLnBhZ2UtZnJhbWV3b3JrIC5mZWF0dXJlLWltZyAuZGV2aWNlLmlwaG9uZSB7XG4gICAgd2lkdGg6IDU0NHB4O1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICBsZWZ0OiA0NnB4O1xuICAgIHRvcDogMzZweDsgfVxuICAucGFnZS1mcmFtZXdvcmsgLmZlYXR1cmUtaW1nIC5kZXZpY2UucGl4ZWwge1xuICAgIHdpZHRoOiA0MzBweDtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgdG9wOiA2NHB4O1xuICAgIHJpZ2h0OiAxMTBweDsgfVxuICAgIEBtZWRpYSAobWF4LXdpZHRoOiA5OTFweCkge1xuICAgICAgLnBhZ2UtZnJhbWV3b3JrIC5mZWF0dXJlLWltZyAuZGV2aWNlLnBpeGVsIHtcbiAgICAgICAgcmlnaHQ6IDA7IH0gfVxuICAucGFnZS1mcmFtZXdvcmsgLmZlYXR1cmUtaW1nIC5vbmUsXG4gIC5wYWdlLWZyYW1ld29yayAuZmVhdHVyZS1pbWcgLnR3byB7XG4gICAgb3BhY2l0eTogMDtcbiAgICBhbmltYXRpb246IGZhZGVJbkRvd24gLjdzO1xuICAgIGFuaW1hdGlvbi1maWxsLW1vZGU6IGZvcndhcmRzOyB9XG4gIC5wYWdlLWZyYW1ld29yayAuZmVhdHVyZS1pbWcgLm9uZSB7XG4gICAgYW5pbWF0aW9uLWRlbGF5OiAuNXM7IH1cbiAgLnBhZ2UtZnJhbWV3b3JrIC5mZWF0dXJlLWltZyAudHdvIHtcbiAgICBhbmltYXRpb24tZGVsYXk6IC43czsgfVxuICAucGFnZS1mcmFtZXdvcmsgLmZlYXR1cmUtaW1nIC50aHJlZSB7XG4gICAgb3BhY2l0eTogMDtcbiAgICBhbmltYXRpb246IGZhZGVJbiAuN3M7XG4gICAgYW5pbWF0aW9uLWZpbGwtbW9kZTogZm9yd2FyZHM7XG4gICAgYW5pbWF0aW9uLWRlbGF5OiAxczsgfVxuICAucGFnZS1mcmFtZXdvcmsgLmZlYXR1cmUtaW1nIC5hcHAtaWNvbiB7XG4gICAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFwiL2ltZy9mcmFtZXdvcmtwYWdlL2lvbmljdmlldy1pY29uXzJ4LnBuZ1wiKTtcbiAgICBiYWNrZ3JvdW5kLXNpemU6IDg0cHggODRweDtcbiAgICBiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0O1xuICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgaGVpZ2h0OiA4NHB4O1xuICAgIHdpZHRoOiA4NHB4O1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICByaWdodDogMDtcbiAgICBib3R0b206IDA7IH1cbiAgICBAbWVkaWEgKG1heC13aWR0aDogOTkxcHgpIHtcbiAgICAgIC5wYWdlLWZyYW1ld29yayAuZmVhdHVyZS1pbWcgLmFwcC1pY29uIHtcbiAgICAgICAgYm90dG9tOiAtNjBweDsgfSB9XG4gIC5wYWdlLWZyYW1ld29yayAuZmVhdHVyZS1pbWcgYSB7XG4gICAgb3BhY2l0eTogMTsgfVxuICAgIC5wYWdlLWZyYW1ld29yayAuZmVhdHVyZS1pbWcgYSBpbWcge1xuICAgICAgb3BhY2l0eTogLjk7XG4gICAgICB0cmFuc2l0aW9uOiBvcGFjaXR5IDAuMXMgbGluZWFyO1xuICAgICAgYW5pbWF0aW9uLWRlbGF5OiAuNXM7IH1cbiAgICAucGFnZS1mcmFtZXdvcmsgLmZlYXR1cmUtaW1nIGEgc3BhbiB7XG4gICAgICBvcGFjaXR5OiAuNztcbiAgICAgIHRyYW5zaXRpb246IG9wYWNpdHkgLjFzIGxpbmVhcjtcbiAgICAgIGFuaW1hdGlvbi1kZWxheTogLjVzOyB9XG4gICAgLnBhZ2UtZnJhbWV3b3JrIC5mZWF0dXJlLWltZyBhOmhvdmVyIGltZyxcbiAgICAucGFnZS1mcmFtZXdvcmsgLmZlYXR1cmUtaW1nIGE6aG92ZXIgc3BhbiB7XG4gICAgICBvcGFjaXR5OiAxOyB9XG4gIC5wYWdlLWZyYW1ld29yayAuZmVhdHVyZS1pbWcgLmRlbW8tbGluayB7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIHJpZ2h0OiA2cHg7XG4gICAgYm90dG9tOiAtMjBweDtcbiAgICBkaXNwbGF5OiBub25lO1xuICAgIGNvbG9yOiB3aGl0ZTtcbiAgICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTtcbiAgICBmb250LXdlaWdodDogNTAwO1xuICAgIGZvbnQtc2l6ZTogMTBweDtcbiAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG4gICAgdGV4dC1zaGFkb3c6IDBweCAxcHggNnB4IHJnYmEoMCwgMCwgMCwgMC4yKTsgfVxuICAgIEBtZWRpYSAobWF4LXdpZHRoOiA5OTFweCkge1xuICAgICAgLnBhZ2UtZnJhbWV3b3JrIC5mZWF0dXJlLWltZyAuZGVtby1saW5rIHtcbiAgICAgICAgYm90dG9tOiAtNzVweDsgfSB9XG5cbkBtZWRpYSAobWluLXdpZHRoOiA3NjhweCkge1xuICAucGFnZS1mcmFtZXdvcmsge1xuICAgIC8qIFRBQkxFVC9QaG9uZSAqLyB9XG4gICAgLnBhZ2UtZnJhbWV3b3JrIC5wcmltYXJ5LXJvdyB7XG4gICAgICB0ZXh0LWFsaWduOiBsZWZ0OyB9XG4gICAgICAucGFnZS1mcmFtZXdvcmsgLnByaW1hcnktcm93IGgxIHtcbiAgICAgICAgZm9udC1zaXplOiAzNHB4OyB9XG4gICAgICAucGFnZS1mcmFtZXdvcmsgLnByaW1hcnktcm93IGgyIHtcbiAgICAgICAgZm9udC1zaXplOiAyMHB4OyB9XG4gICAgICAucGFnZS1mcmFtZXdvcmsgLnByaW1hcnktcm93IC5kZXNrdG9wLWJ0biB7XG4gICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsgfVxuICAgICAgLnBhZ2UtZnJhbWV3b3JrIC5wcmltYXJ5LXJvdyAubW9iaWxlLWJ0biB7XG4gICAgICAgIGRpc3BsYXk6IG5vbmU7IH1cbiAgICAgIC5wYWdlLWZyYW1ld29yayAucHJpbWFyeS1yb3cgLmRlbW8tbGluayB7XG4gICAgICAgIGRpc3BsYXk6IGJsb2NrOyB9XG4gICAgICAucGFnZS1mcmFtZXdvcmsgLnByaW1hcnktcm93IC5hcHAtaWNvbiB7XG4gICAgICAgIGRpc3BsYXk6IGJsb2NrOyB9XG4gICAgLnBhZ2UtZnJhbWV3b3JrIC5mZWF0dXJlLWltZyB7XG4gICAgICBiYWNrZ3JvdW5kLXNpemU6IDQyMHB4IDM5M3B4O1xuICAgICAgbWluLWhlaWdodDogNDA1cHg7IH0gfVxuXG4ucGFnZS1mcmFtZXdvcmsgLnV0aWxpdHktYmFyIHtcbiAgbWFyZ2luLXRvcDogLTE2MHB4O1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIHBhZGRpbmc6IDIwcHggMCAyMnB4O1xuICB3aWR0aDogMTAwJTtcbiAgYmFja2dyb3VuZDogcmdiYSgwLCAwLCAwLCAwLjE1KTsgfVxuICBAbWVkaWEgKG1heC13aWR0aDogOTkxcHgpIHtcbiAgICAucGFnZS1mcmFtZXdvcmsgLnV0aWxpdHktYmFyIHtcbiAgICAgIG1hcmdpbi10b3A6IC0yMTZweDsgfSB9XG4gIEBtZWRpYSAobWF4LXdpZHRoOiA3NjdweCkge1xuICAgIC5wYWdlLWZyYW1ld29yayAudXRpbGl0eS1iYXIge1xuICAgICAgbWFyZ2luLXRvcDogLTUyOHB4OyB9IH1cbiAgLnBhZ2UtZnJhbWV3b3JrIC51dGlsaXR5LWJhciAuY29udGFpbmVyIHtcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgIGNvbG9yOiAjREFFN0ZEO1xuICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzO1xuICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7IH1cbiAgLnBhZ2UtZnJhbWV3b3JrIC51dGlsaXR5LWJhciBmb3JtIHtcbiAgICBtYXgtd2lkdGg6IDQ1OHB4O1xuICAgIGZsb2F0OiByaWdodDsgfVxuICAgIEBtZWRpYSAobWF4LXdpZHRoOiA5OTFweCkge1xuICAgICAgLnBhZ2UtZnJhbWV3b3JrIC51dGlsaXR5LWJhciBmb3JtIHtcbiAgICAgICAgbWF4LXdpZHRoOiBjYWxjKDEwMCUgLSAzNDBweCk7IH0gfVxuICAgIEBtZWRpYSAobWF4LXdpZHRoOiA3NjdweCkge1xuICAgICAgLnBhZ2UtZnJhbWV3b3JrIC51dGlsaXR5LWJhciBmb3JtIHtcbiAgICAgICAgZmxvYXQ6IG5vbmU7XG4gICAgICAgIG1heC13aWR0aDogMTAwJTtcbiAgICAgICAgbWFyZ2luLXRvcDogMTVweDsgfSB9XG4gIC5wYWdlLWZyYW1ld29yayAudXRpbGl0eS1iYXIgYnV0dG9uIHtcbiAgICBwYWRkaW5nOiAxMHB4IDEzcHg7IH1cblxuLnBhZ2UtZnJhbWV3b3JrICNwcm9tby1pb25pY3Uge1xuICBiYWNrZ3JvdW5kOiB1cmwoXCIvaW1nL3Byb21vcy91bml2ZXJzaXR5LmpwZ1wiKSBuby1yZXBlYXQgdHJhbnNwYXJlbnQ7XG4gIGJhY2tncm91bmQtc2l6ZTogY292ZXI7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgcGFkZGluZy10b3A6IDEwMHB4O1xuICBoZWlnaHQ6IDQ1MHB4O1xuICBib3gtc2l6aW5nOiBib3JkZXItYm94OyB9XG4gIC5wYWdlLWZyYW1ld29yayAjcHJvbW8taW9uaWN1IGgyLCAucGFnZS1mcmFtZXdvcmsgI3Byb21vLWlvbmljdSBoNCB7XG4gICAgY29sb3I6ICNmZmY7XG4gICAgdGV4dC1zaGFkb3c6IDBweCAxcHggMnB4IHJnYmEoMCwgMCwgMCwgMC41KTsgfVxuICAucGFnZS1mcmFtZXdvcmsgI3Byb21vLWlvbmljdSBoMiB7XG4gICAgZm9udC13ZWlnaHQ6IDQwMDsgfVxuICAgIC5wYWdlLWZyYW1ld29yayAjcHJvbW8taW9uaWN1IGgyIGIge1xuICAgICAgZm9udC13ZWlnaHQ6IDYwMDsgfVxuICAucGFnZS1mcmFtZXdvcmsgI3Byb21vLWlvbmljdSBoNCB7XG4gICAgZm9udC13ZWlnaHQ6IDQwMDtcbiAgICBtYXJnaW4tYm90dG9tOiA1MHB4OyB9XG4gIC5wYWdlLWZyYW1ld29yayAjcHJvbW8taW9uaWN1IC5idG4ge1xuICAgIGJhY2tncm91bmQtY29sb3I6IHdoaXRlO1xuICAgIGNvbG9yOiAjMzk3RkYyO1xuICAgIGJveC1zaGFkb3c6IDBweCAxcHggM3B4IHJnYmEoMCwgMCwgMCwgMC4xNSk7IH1cblxuLnBhZ2UtZnJhbWV3b3JrICNwcm9tby1zbmFwc2hvdCB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQodG8gcmlnaHQsICMwNjU1OGUgMCUsICMwMDZlODkgMTAwJSk7XG4gIHBhZGRpbmctdG9wOiA2MHB4OyB9XG4gIC5wYWdlLWZyYW1ld29yayAjcHJvbW8tc25hcHNob3QgLmNvbnRhaW5lciB7XG4gICAgbWF4LXdpZHRoOiA5NzVweDsgfVxuICAucGFnZS1mcmFtZXdvcmsgI3Byb21vLXNuYXBzaG90IGgyIHtcbiAgICBmb250LXdlaWdodDogMzAwO1xuICAgIG1hcmdpbi10b3A6IDA7XG4gICAgbWFyZ2luLWJvdHRvbTogMjBweDtcbiAgICBjb2xvcjogI2ZmZjsgfVxuICAgIC5wYWdlLWZyYW1ld29yayAjcHJvbW8tc25hcHNob3QgaDIgYSB7XG4gICAgICBmb250LXdlaWdodDogNTAwO1xuICAgICAgY29sb3I6ICNmZmY7XG4gICAgICBib3gtc2hhZG93OiBpbnNldCAwIDBweCAwIHdoaXRlLCBpbnNldCAwIC0xcHggMCB3aGl0ZTtcbiAgICAgIHRyYW5zaXRpb246IC4zcyBib3gtc2hhZG93OyB9XG4gICAgICAucGFnZS1mcmFtZXdvcmsgI3Byb21vLXNuYXBzaG90IGgyIGE6aG92ZXIsIC5wYWdlLWZyYW1ld29yayAjcHJvbW8tc25hcHNob3QgaDIgYTphY3RpdmUsIC5wYWdlLWZyYW1ld29yayAjcHJvbW8tc25hcHNob3QgaDIgYTpmb2N1cyB7XG4gICAgICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbiAgICAgICAgYm94LXNoYWRvdzogaW5zZXQgMCAwcHggMCB3aGl0ZSwgaW5zZXQgMCAtMnB4IDAgd2hpdGU7IH1cbiAgLnBhZ2UtZnJhbWV3b3JrICNwcm9tby1zbmFwc2hvdCBoNCB7XG4gICAgY29sb3I6ICNmZmY7XG4gICAgbWFyZ2luLWJvdHRvbTogNTBweDsgfVxuICAucGFnZS1mcmFtZXdvcmsgI3Byb21vLXNuYXBzaG90IGltZyB7XG4gICAgbWF4LXdpZHRoOiAxMDAlOyB9XG4gIC5wYWdlLWZyYW1ld29yayAjcHJvbW8tc25hcHNob3QgI3Byb21vLWJhciB7XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIGJvdHRvbTogMDtcbiAgICB6LWluZGV4OiAxO1xuICAgIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC45NSk7XG4gICAgLXdlYmtpdC1iYWNrZHJvcC1maWx0ZXI6IGJsdXIoMTBweCk7XG4gICAgYmFja2Ryb3AtZmlsdGVyOiBibHVyKDEwcHgpO1xuICAgIHBhZGRpbmc6IDEwcHggMDtcbiAgICBvdmVyZmxvdzogYXV0bzsgfVxuICAgIC5wYWdlLWZyYW1ld29yayAjcHJvbW8tc25hcHNob3QgI3Byb21vLWJhciAubGVmdC10ZXh0IHtcbiAgICAgIGZsb2F0OiBsZWZ0O1xuICAgICAgbGluZS1oZWlnaHQ6IDYwcHg7XG4gICAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xuICAgICAgZm9udC13ZWlnaHQ6IDUwMDtcbiAgICAgIG1hcmdpbi1sZWZ0OiAxNXB4OyB9XG4gICAgLnBhZ2UtZnJhbWV3b3JrICNwcm9tby1zbmFwc2hvdCAjcHJvbW8tYmFyIC5yaWdodC10ZXh0IHtcbiAgICAgIGZsb2F0OiByaWdodDtcbiAgICAgIGxpbmUtaGVpZ2h0OiA2MHB4O1xuICAgICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbiAgICAgIG1hcmdpbi1yaWdodDogMTVweDsgfVxuXG4ucGFnZS1mcmFtZXdvcmsgLmJhbm5lci1jdGEge1xuICBiYWNrZ3JvdW5kOiAjZjZmN2ZhO1xuICBwYWRkaW5nLXRvcDogODBweDtcbiAgbWFyZ2luLWJvdHRvbTogLTMycHg7IH1cbiAgLnBhZ2UtZnJhbWV3b3JrIC5iYW5uZXItY3RhIC5ib3gge1xuICAgIGJhY2tncm91bmQ6IHVybChcIi9pbWcvZnJhbWV3b3JrLzIwMTgtZnJhbWV3b3JrLWNhcmQtYmcucG5nXCIpIDUwJSA1MCUgbm8tcmVwZWF0O1xuICAgIGJhY2tncm91bmQtc2l6ZTogY292ZXI7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgIGJvcmRlci1yYWRpdXM6IDhweDtcbiAgICBib3gtc2hhZG93OiAwIDJweCAxNnB4IHJnYmEoMCwgMCwgMCwgMC4zKTtcbiAgICBwYWRkaW5nOiAzN3B4IDY5cHggMzhweCA1NHB4O1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICBtaW4taGVpZ2h0OiAxNjBweDsgfVxuICAgIEBtZWRpYSAobWF4LXdpZHRoOiA3NjdweCkge1xuICAgICAgLnBhZ2UtZnJhbWV3b3JrIC5iYW5uZXItY3RhIC5ib3gge1xuICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgICAgcGFkZGluZy1sZWZ0OiAzMnB4O1xuICAgICAgICBwYWRkaW5nLXJpZ2h0OiAzMnB4O1xuICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7IH1cbiAgICAgICAgLnBhZ2UtZnJhbWV3b3JrIC5iYW5uZXItY3RhIC5ib3g6OmJlZm9yZSB7XG4gICAgICAgICAgZGlzcGxheTogbm9uZTsgfVxuICAgICAgICAucGFnZS1mcmFtZXdvcmsgLmJhbm5lci1jdGEgLmJveCAuYnRuIHtcbiAgICAgICAgICBtYXJnaW4tbGVmdDogMDtcbiAgICAgICAgICBtYXJnaW4tdG9wOiAyNHB4OyB9IH1cbiAgLnBhZ2UtZnJhbWV3b3JrIC5iYW5uZXItY3RhIGhncm91cCB7XG4gICAgZmxleC1ncm93OiAxO1xuICAgIGNvbG9yOiB3aGl0ZTtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgei1pbmRleDogMTtcbiAgICBtYXJnaW4tdG9wOiA4cHg7IH1cbiAgLnBhZ2UtZnJhbWV3b3JrIC5iYW5uZXItY3RhIC5vcmFuZ2Uge1xuICAgIGNvbG9yOiAjZmNiNTJjO1xuICAgIGZvbnQtc2l6ZTogMThweDtcbiAgICBsZXR0ZXItc3BhY2luZzogLjAxNWVtO1xuICAgIG1hcmdpbi1ib3R0b206IDEycHg7XG4gICAgbGluZS1oZWlnaHQ6IDFlbTsgfVxuICAucGFnZS1mcmFtZXdvcmsgLmJhbm5lci1jdGEgaDIge1xuICAgIGZvbnQtd2VpZ2h0OiA3MDA7XG4gICAgbWFyZ2luLXRvcDogMDtcbiAgICBmb250LXNpemU6IDM4cHg7XG4gICAgbGV0dGVyLXNwYWNpbmc6IC0uMDQ1ZW07XG4gICAgbWFyZ2luLWJvdHRvbTogNXB4OyB9XG4gIC5wYWdlLWZyYW1ld29yayAuYmFubmVyLWN0YSAubGcge1xuICAgIGZvbnQtc2l6ZTogMjJweDtcbiAgICBsZXR0ZXItc3BhY2luZzogLS4wMTllbTtcbiAgICBtYXJnaW4tYm90dG9tOiAwO1xuICAgIGNvbG9yOiB3aGl0ZTtcbiAgICBmb250LWZhbWlseTogXCJFaW5hXCIsIFwiSGVsdmV0aWNhIE5ldWVcIiwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmOyB9XG4gIC5wYWdlLWZyYW1ld29yayAuYmFubmVyLWN0YSAuYnRuIHtcbiAgICBtYXJnaW4tbGVmdDogOHB4O1xuICAgIGZvbnQtc2l6ZTogMTZweDtcbiAgICBsZXR0ZXItc3BhY2luZzogLjA1NWVtO1xuICAgIHBhZGRpbmc6IDE5cHggMjFweCAxNHB4O1xuICAgIGZvbnQtd2VpZ2h0OiA2MDA7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIHotaW5kZXg6IDE7XG4gICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTsgfVxuXG4ucGFnZS1mcmFtZXdvcmsgLmJ1aWx0LXdpdGgge1xuICBiYWNrZ3JvdW5kOiAjZjZmN2ZhO1xuICBwYWRkaW5nLWJvdHRvbTogMTAwcHg7IH1cbiAgQG1lZGlhIChtYXgtd2lkdGg6IDk5MXB4KSB7XG4gICAgLnBhZ2UtZnJhbWV3b3JrIC5idWlsdC13aXRoIHtcbiAgICAgIHBhZGRpbmctYm90dG9tOiA0MHB4OyB9IH1cbiAgLnBhZ2UtZnJhbWV3b3JrIC5idWlsdC13aXRoIGhncm91cCB7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIHBhZGRpbmctdG9wOiAxMDNweDsgfVxuICAgIEBtZWRpYSAobWF4LXdpZHRoOiA5OTFweCkge1xuICAgICAgLnBhZ2UtZnJhbWV3b3JrIC5idWlsdC13aXRoIGhncm91cCB7XG4gICAgICAgIHBhZGRpbmctdG9wOiAyODBweDsgfSB9XG4gICAgQG1lZGlhIChtYXgtd2lkdGg6IDc2N3B4KSB7XG4gICAgICAucGFnZS1mcmFtZXdvcmsgLmJ1aWx0LXdpdGggaGdyb3VwIHtcbiAgICAgICAgcGFkZGluZy10b3A6IDE1M3B4OyB9IH1cbiAgICAucGFnZS1mcmFtZXdvcmsgLmJ1aWx0LXdpdGggaGdyb3VwIGgyLFxuICAgIC5wYWdlLWZyYW1ld29yayAuYnVpbHQtd2l0aCBoZ3JvdXAgaDQge1xuICAgICAgd2lkdGg6IDQ4JTsgfVxuICAgICAgQG1lZGlhIChtYXgtd2lkdGg6IDk5MXB4KSB7XG4gICAgICAgIC5wYWdlLWZyYW1ld29yayAuYnVpbHQtd2l0aCBoZ3JvdXAgaDIsXG4gICAgICAgIC5wYWdlLWZyYW1ld29yayAuYnVpbHQtd2l0aCBoZ3JvdXAgaDQge1xuICAgICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsgfSB9XG4gICAgLnBhZ2UtZnJhbWV3b3JrIC5idWlsdC13aXRoIGhncm91cCBoMiB7XG4gICAgICBmb250LXNpemU6IDI4cHg7XG4gICAgICBmb250LXdlaWdodDogNTAwO1xuICAgICAgbGV0dGVyLXNwYWNpbmc6IC0uMDJlbTsgfVxuICAgIC5wYWdlLWZyYW1ld29yayAuYnVpbHQtd2l0aCBoZ3JvdXAgaDQge1xuICAgICAgZm9udC1zaXplOiAyMHB4O1xuICAgICAgZm9udC13ZWlnaHQ6IDQwMDtcbiAgICAgIGNvbG9yOiAjNGE1NjZiO1xuICAgICAgbGluZS1oZWlnaHQ6IDEuOGVtO1xuICAgICAgbWFyZ2luLXRvcDogMTZweDtcbiAgICAgIGxldHRlci1zcGFjaW5nOiAtLjAyZW07IH1cbiAgLnBhZ2UtZnJhbWV3b3JrIC5idWlsdC13aXRoIC50ZWNocyB7XG4gICAgbGlzdC1zdHlsZTogbm9uZTtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgcmlnaHQ6IDA7XG4gICAgdG9wOiAxMjNweDtcbiAgICB3aWR0aDogNDglOyB9XG4gICAgQG1lZGlhIChtYXgtd2lkdGg6IDk5MXB4KSB7XG4gICAgICAucGFnZS1mcmFtZXdvcmsgLmJ1aWx0LXdpdGggLnRlY2hzIHtcbiAgICAgICAgdG9wOiA1MHB4O1xuICAgICAgICBsZWZ0OiAwO1xuICAgICAgICBtYXJnaW46IDAgYXV0bztcbiAgICAgICAgd2lkdGg6IDYwMHB4OyB9IH1cbiAgICBAbWVkaWEgKG1heC13aWR0aDogNzY3cHgpIHtcbiAgICAgIC5wYWdlLWZyYW1ld29yayAuYnVpbHQtd2l0aCAudGVjaHMge1xuICAgICAgICB0cmFuc2Zvcm06IHNjYWxlKDAuNSwgMC41KTtcbiAgICAgICAgdG9wOiA1MHB4O1xuICAgICAgICB3aWR0aDogNjAwcHg7IH0gfVxuICAgIEBtZWRpYSAobWF4LXdpZHRoOiA2MDBweCkge1xuICAgICAgLnBhZ2UtZnJhbWV3b3JrIC5idWlsdC13aXRoIC50ZWNocyB7XG4gICAgICAgIG1hcmdpbi1sZWZ0OiBjYWxjKDUwJSAtIDMwMHB4KTsgfSB9XG4gICAgLnBhZ2UtZnJhbWV3b3JrIC5idWlsdC13aXRoIC50ZWNocyBsaSB7XG4gICAgICBiYWNrZ3JvdW5kOiB1cmwoXCIvaW1nL2ZyYW1ld29yay93ZWItaWNvbnMucG5nXCIpIG5vLXJlcGVhdCAwIDA7XG4gICAgICBiYWNrZ3JvdW5kLXNpemU6IDIwMHB4O1xuICAgICAgaGVpZ2h0OiAyMDBweDtcbiAgICAgIHdpZHRoOiAyMDBweDtcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgIG9wYWNpdHk6IDA7XG4gICAgICBhbmltYXRpb246IGZhZGVJbiAxcztcbiAgICAgIGFuaW1hdGlvbi1maWxsLW1vZGU6IGZvcndhcmRzOyB9XG4gICAgICAucGFnZS1mcmFtZXdvcmsgLmJ1aWx0LXdpdGggLnRlY2hzIGxpLmFuZ3VsYXIge1xuICAgICAgICByaWdodDogNjQuNSU7XG4gICAgICAgIGFuaW1hdGlvbi1kZWxheTogMS40czsgfVxuICAgICAgLnBhZ2UtZnJhbWV3b3JrIC5idWlsdC13aXRoIC50ZWNocyBsaS5qcyB7XG4gICAgICAgIHJpZ2h0OiA0MyU7XG4gICAgICAgIGJhY2tncm91bmQtcG9zaXRpb246IDAgLTIwMHB4O1xuICAgICAgICBhbmltYXRpb24tZGVsYXk6IDEuNnM7IH1cbiAgICAgIC5wYWdlLWZyYW1ld29yayAuYnVpbHQtd2l0aCAudGVjaHMgbGkudHMge1xuICAgICAgICByaWdodDogMjEuNSU7XG4gICAgICAgIGJhY2tncm91bmQtcG9zaXRpb246IDAgLTQwMHB4O1xuICAgICAgICBhbmltYXRpb24tZGVsYXk6IDEuOHM7IH1cbiAgICAgIC5wYWdlLWZyYW1ld29yayAuYnVpbHQtd2l0aCAudGVjaHMgbGkuaHRtbCB7XG4gICAgICAgIHJpZ2h0OiAwJTtcbiAgICAgICAgYmFja2dyb3VuZC1wb3NpdGlvbjogMCAtNjAwcHg7XG4gICAgICAgIGFuaW1hdGlvbi1kZWxheTogMnM7IH1cbiAgLnBhZ2UtZnJhbWV3b3JrIC5idWlsdC13aXRoIC5mZWF0dXJlcyB7XG4gICAgbWFyZ2luLXRvcDogNzVweDsgfVxuICAgIEBtZWRpYSAobWF4LXdpZHRoOiA5OTFweCkge1xuICAgICAgLnBhZ2UtZnJhbWV3b3JrIC5idWlsdC13aXRoIC5mZWF0dXJlcyB7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIGZsZXgtd3JhcDogd3JhcDtcbiAgICAgICAgbWFyZ2luLXRvcDogNDVweDsgfSB9XG4gICAgLnBhZ2UtZnJhbWV3b3JrIC5idWlsdC13aXRoIC5mZWF0dXJlcyBsaSB7XG4gICAgICB3aWR0aDogY2FsYygyNSUgKyAycHgpO1xuICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgICAgcGFkZGluZy1sZWZ0OiAzN3B4O1xuICAgICAgcGFkZGluZy1yaWdodDogMjBweDtcbiAgICAgIHZlcnRpY2FsLWFsaWduOiB0b3A7XG4gICAgICBiYWNrZ3JvdW5kOiB1cmwoXCIvaW1nL2ZyYW1ld29yay9jaGVja21hcmstaWNvbi5wbmdcIikgbm8tcmVwZWF0IDAgMDtcbiAgICAgIGJhY2tncm91bmQtc2l6ZTogMjRweDsgfVxuICAgICAgQG1lZGlhIChtYXgtd2lkdGg6IDk5MXB4KSB7XG4gICAgICAgIC5wYWdlLWZyYW1ld29yayAuYnVpbHQtd2l0aCAuZmVhdHVyZXMgbGkge1xuICAgICAgICAgIHdpZHRoOiBhdXRvO1xuICAgICAgICAgIGZsZXg6IDEgMCAzMjBweDtcbiAgICAgICAgICBtYXJnaW4tYm90dG9tOiAxNXB4OyB9IH1cbiAgICAgIC5wYWdlLWZyYW1ld29yayAuYnVpbHQtd2l0aCAuZmVhdHVyZXMgbGkgaDMge1xuICAgICAgICBmb250LXNpemU6IDE3cHg7XG4gICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7XG4gICAgICAgIG1hcmdpbi10b3A6IDRweDtcbiAgICAgICAgbWFyZ2luLWJvdHRvbTogNXB4OyB9XG4gICAgICAucGFnZS1mcmFtZXdvcmsgLmJ1aWx0LXdpdGggLmZlYXR1cmVzIGxpIHAge1xuICAgICAgICBmb250LXNpemU6IDE2cHg7XG4gICAgICAgIGZvbnQtd2VpZ2h0OiA0MDA7XG4gICAgICAgIGNvbG9yOiAjNWM2YTgxO1xuICAgICAgICBsaW5lLWhlaWdodDogMS43ZW07XG4gICAgICAgIGxldHRlci1zcGFjaW5nOiAtLjAyZW07IH1cbiAgICAgIC5wYWdlLWZyYW1ld29yayAuYnVpbHQtd2l0aCAuZmVhdHVyZXMgbGk6bGFzdC1jaGlsZCB7XG4gICAgICAgIHBhZGRpbmctcmlnaHQ6IDA7XG4gICAgICAgIHdpZHRoOiBjYWxjKDI1JSAtIDE5cHgpOyB9XG5cbi5wYWdlLWZyYW1ld29yayAuYWJvdXQtY29kZSB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTsgfVxuICAucGFnZS1mcmFtZXdvcmsgLmFib3V0LWNvZGUgLmNvZGUtYm94IHtcbiAgICB3aWR0aDogNTQ1cHg7XG4gICAgYm94LXNoYWRvdzogMCA4cHggMTZweCByZ2JhKDAsIDAsIDAsIDAuMDgpLCAwIDJweCA2cHggcmdiYSgwLCAwLCAwLCAwLjA0KTtcbiAgICBib3JkZXItcmFkaXVzOiA0cHg7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIHRvcDogLTIwcHg7XG4gICAgYmFja2dyb3VuZDogd2hpdGU7IH1cbiAgICBAbWVkaWEgKG1heC13aWR0aDogNjI2cHgpIHtcbiAgICAgIC5wYWdlLWZyYW1ld29yayAuYWJvdXQtY29kZSAuY29kZS1ib3gge1xuICAgICAgICBkaXNwbGF5OiBub25lOyB9IH1cbiAgICAucGFnZS1mcmFtZXdvcmsgLmFib3V0LWNvZGUgLmNvZGUtYm94IC5hcHAsXG4gICAgLnBhZ2UtZnJhbWV3b3JrIC5hYm91dC1jb2RlIC5jb2RlLWJveCAudG9nZ2xlIHtcbiAgICAgIHRyYW5zaXRpb246IDAuN3MgcmlnaHQgY3ViaWMtYmV6aWVyKDAuNDksIDEuNjUsIDAuNzMsIDEuMTMpOyB9XG4gICAgLnBhZ2UtZnJhbWV3b3JrIC5hYm91dC1jb2RlIC5jb2RlLWJveC5kb25lIC5hcHAsXG4gICAgLnBhZ2UtZnJhbWV3b3JrIC5hYm91dC1jb2RlIC5jb2RlLWJveC5kb25lIC50b2dnbGUge1xuICAgICAgdHJhbnNpdGlvbjogbm9uZTsgfVxuICAgIC5wYWdlLWZyYW1ld29yayAuYWJvdXQtY29kZSAuY29kZS1ib3guYWN0aXZlIC5hcHAsXG4gICAgLnBhZ2UtZnJhbWV3b3JrIC5hYm91dC1jb2RlIC5jb2RlLWJveC5hY3RpdmUgLnRvZ2dsZSB7XG4gICAgICByaWdodDogNjUlOyB9XG4gICAgLnBhZ2UtZnJhbWV3b3JrIC5hYm91dC1jb2RlIC5jb2RlLWJveCBoZWFkZXIge1xuICAgICAgcGFkZGluZzogMjRweCAzOHB4IDI4cHg7XG4gICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICB6LWluZGV4OiA1OyB9XG4gICAgICAucGFnZS1mcmFtZXdvcmsgLmFib3V0LWNvZGUgLmNvZGUtYm94IGhlYWRlcjo6YWZ0ZXIge1xuICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgIGJvdHRvbTogLTVweDtcbiAgICAgICAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KHRvIGJvdHRvbSwgcmdiYSgyMDAsIDIwMCwgMjAwLCAwLjMpIDAlLCByZ2JhKDIwMCwgMjAwLCAyMDAsIDApIDEwMCUpO1xuICAgICAgICBsZWZ0OiAwO1xuICAgICAgICByaWdodDogMDtcbiAgICAgICAgaGVpZ2h0OiA1cHg7XG4gICAgICAgIGNvbnRlbnQ6ICcnO1xuICAgICAgICBkaXNwbGF5OiBibG9jazsgfVxuICAgICAgLnBhZ2UtZnJhbWV3b3JrIC5hYm91dC1jb2RlIC5jb2RlLWJveCBoZWFkZXIgaDMge1xuICAgICAgICBmb250LXdlaWdodDogNzAwO1xuICAgICAgICBmb250LXNpemU6IDExcHg7XG4gICAgICAgIGxldHRlci1zcGFjaW5nOiAuMmVtO1xuICAgICAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xuICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7IH1cbiAgICAgIC5wYWdlLWZyYW1ld29yayAuYWJvdXQtY29kZSAuY29kZS1ib3ggaGVhZGVyIC5wbGF0Zm9ybXMge1xuICAgICAgICBsaXN0LXN0eWxlOiBub25lO1xuICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgIHJpZ2h0OiAyNnB4O1xuICAgICAgICB0b3A6IDM3cHg7IH1cbiAgICAgICAgLnBhZ2UtZnJhbWV3b3JrIC5hYm91dC1jb2RlIC5jb2RlLWJveCBoZWFkZXIgLnBsYXRmb3JtcyBsaSB7XG4gICAgICAgICAgYmFja2dyb3VuZDogdXJsKFwiL2ltZy9mcmFtZXdvcmsvaWNvbnMtc20ucG5nXCIpIG5vLXJlcGVhdCAwIDA7XG4gICAgICAgICAgYmFja2dyb3VuZC1zaXplOiAyNHB4O1xuICAgICAgICAgIGhlaWdodDogMjRweDtcbiAgICAgICAgICB3aWR0aDogMjRweDtcbiAgICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgICAgICAgbWFyZ2luLXJpZ2h0OiA5cHg7IH1cbiAgICAgICAgICAucGFnZS1mcmFtZXdvcmsgLmFib3V0LWNvZGUgLmNvZGUtYm94IGhlYWRlciAucGxhdGZvcm1zIGxpLmFuZHJvaWQge1xuICAgICAgICAgICAgYmFja2dyb3VuZC1wb3NpdGlvbjogMCAtMjRweDsgfVxuICAgICAgICAgIC5wYWdlLWZyYW1ld29yayAuYWJvdXQtY29kZSAuY29kZS1ib3ggaGVhZGVyIC5wbGF0Zm9ybXMgbGkud2luZG93cyB7XG4gICAgICAgICAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwIC00OHB4OyB9XG4gICAgICAgICAgLnBhZ2UtZnJhbWV3b3JrIC5hYm91dC1jb2RlIC5jb2RlLWJveCBoZWFkZXIgLnBsYXRmb3JtcyBsaS5jaHJvbWUge1xuICAgICAgICAgICAgYmFja2dyb3VuZC1wb3NpdGlvbjogMCAtNzJweDsgfVxuICAgICAgICAgIC5wYWdlLWZyYW1ld29yayAuYWJvdXQtY29kZSAuY29kZS1ib3ggaGVhZGVyIC5wbGF0Zm9ybXMgbGkuZWxlY3Ryb24ge1xuICAgICAgICAgICAgYmFja2dyb3VuZC1wb3NpdGlvbjogMCAtOTZweDsgfVxuICAucGFnZS1mcmFtZXdvcmsgLmFib3V0LWNvZGUgaGdyb3VwIHtcbiAgICBtaW4taGVpZ2h0OiA0NjlweDtcbiAgICBtYXJnaW4tbGVmdDogNjI1cHg7IH1cbiAgICBAbWVkaWEgKG1heC13aWR0aDogOTkxcHgpIHtcbiAgICAgIC5wYWdlLWZyYW1ld29yayAuYWJvdXQtY29kZSBoZ3JvdXAge1xuICAgICAgICBtYXJnaW4tbGVmdDogMDtcbiAgICAgICAgbWFyZ2luLXRvcDogNDAwcHg7XG4gICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICAgICAgbWluLWhlaWdodDogMDtcbiAgICAgICAgbWFyZ2luLWJvdHRvbTogNDBweDsgfSB9XG4gICAgQG1lZGlhIChtYXgtd2lkdGg6IDYyNnB4KSB7XG4gICAgICAucGFnZS1mcmFtZXdvcmsgLmFib3V0LWNvZGUgaGdyb3VwIHtcbiAgICAgICAgbWFyZ2luLXRvcDogMDsgfSB9XG4gICAgLnBhZ2UtZnJhbWV3b3JrIC5hYm91dC1jb2RlIGhncm91cCBoMiB7XG4gICAgICBwYWRkaW5nLXRvcDogNzJweDtcbiAgICAgIGZvbnQtc2l6ZTogMjhweDtcbiAgICAgIGxpbmUtaGVpZ2h0OiAxLjZlbTtcbiAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7XG4gICAgICBsZXR0ZXItc3BhY2luZzogLS4wMmVtOyB9XG4gICAgLnBhZ2UtZnJhbWV3b3JrIC5hYm91dC1jb2RlIGhncm91cCBoNCB7XG4gICAgICBmb250LXNpemU6IDIwcHg7XG4gICAgICBmb250LXdlaWdodDogNDAwO1xuICAgICAgY29sb3I6ICM0YTU2NmI7XG4gICAgICBsaW5lLWhlaWdodDogMS44ZW07XG4gICAgICBtYXJnaW4tdG9wOiAxNnB4O1xuICAgICAgbGV0dGVyLXNwYWNpbmc6IC0wLjAyZW07IH1cbiAgICAgIC5wYWdlLWZyYW1ld29yayAuYWJvdXQtY29kZSBoZ3JvdXAgaDQgc3Ryb25nIHtcbiAgICAgICAgY29sb3I6IGJsYWNrO1xuICAgICAgICBmb250LXdlaWdodDogNDAwOyB9XG4gIC5wYWdlLWZyYW1ld29yayAuYWJvdXQtY29kZSAuZmVhdHVyZXMge1xuICAgIGxpc3Qtc3R5bGU6IG5vbmU7XG4gICAgcGFkZGluZzogMCAwIDEwOXB4OyB9XG4gICAgQG1lZGlhIChtYXgtd2lkdGg6IDk5MXB4KSB7XG4gICAgICAucGFnZS1mcmFtZXdvcmsgLmFib3V0LWNvZGUgLmZlYXR1cmVzIHtcbiAgICAgICAgcGFkZGluZy1ib3R0b206IDUwcHg7IH0gfVxuICAgIC5wYWdlLWZyYW1ld29yayAuYWJvdXQtY29kZSAuZmVhdHVyZXMgbGkge1xuICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgICAgcGFkZGluZy10b3A6IDkzcHg7XG4gICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICB3aWR0aDogMjkuNyU7XG4gICAgICB2ZXJ0aWNhbC1hbGlnbjogdG9wO1xuICAgICAgcGFkZGluZy1yaWdodDogNSU7XG4gICAgICBib3gtc2l6aW5nOiBjb250ZW50LWJveDsgfVxuICAgICAgQG1lZGlhIChtYXgtd2lkdGg6IDk5MXB4KSB7XG4gICAgICAgIC5wYWdlLWZyYW1ld29yayAuYWJvdXQtY29kZSAuZmVhdHVyZXMgbGkge1xuICAgICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICAgICAgICBtYXJnaW4tYm90dG9tOiA0MHB4O1xuICAgICAgICAgIHBhZGRpbmctcmlnaHQ6IDA7IH0gfVxuICAgICAgLnBhZ2UtZnJhbWV3b3JrIC5hYm91dC1jb2RlIC5mZWF0dXJlcyBsaTo6YmVmb3JlIHtcbiAgICAgICAgYmFja2dyb3VuZDogdXJsKFwiL2ltZy9mcmFtZXdvcmsvaWNvbnMtbGcucG5nXCIpIG5vLXJlcGVhdCAwIDA7XG4gICAgICAgIGJhY2tncm91bmQtc2l6ZTogOTNweDtcbiAgICAgICAgaGVpZ2h0OiA5M3B4O1xuICAgICAgICB3aWR0aDogOTNweDtcbiAgICAgICAgY29udGVudDogJyc7XG4gICAgICAgIHRvcDogMDtcbiAgICAgICAgbGVmdDogLTdweDtcbiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOyB9XG4gICAgICAgIEBtZWRpYSAobWF4LXdpZHRoOiA5OTFweCkge1xuICAgICAgICAgIC5wYWdlLWZyYW1ld29yayAuYWJvdXQtY29kZSAuZmVhdHVyZXMgbGk6OmJlZm9yZSB7XG4gICAgICAgICAgICBsZWZ0OiBjYWxjKDUwJSAtIDQ3cHgpOyB9IH1cbiAgICAgIC5wYWdlLWZyYW1ld29yayAuYWJvdXQtY29kZSAuZmVhdHVyZXMgbGkuYmVhdXRpZnVsOjpiZWZvcmUge1xuICAgICAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwIC05M3B4OyB9XG4gICAgICAucGFnZS1mcmFtZXdvcmsgLmFib3V0LWNvZGUgLmZlYXR1cmVzIGxpLm9wdGltaXplZDo6YmVmb3JlIHtcbiAgICAgICAgYmFja2dyb3VuZC1wb3NpdGlvbjogMCAtMTg2cHg7IH1cbiAgICAgIC5wYWdlLWZyYW1ld29yayAuYWJvdXQtY29kZSAuZmVhdHVyZXMgbGk6bGFzdC1jaGlsZCB7XG4gICAgICAgIHBhZGRpbmctcmlnaHQ6IDA7IH1cbiAgICAgIC5wYWdlLWZyYW1ld29yayAuYWJvdXQtY29kZSAuZmVhdHVyZXMgbGkgaDMge1xuICAgICAgICBmb250LXNpemU6IDIycHg7XG4gICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7XG4gICAgICAgIG1hcmdpbi1ib3R0b206IDE2cHg7XG4gICAgICAgIGxldHRlci1zcGFjaW5nOiAtMC4wMmVtOyB9XG4gICAgICAucGFnZS1mcmFtZXdvcmsgLmFib3V0LWNvZGUgLmZlYXR1cmVzIGxpIHAsXG4gICAgICAucGFnZS1mcmFtZXdvcmsgLmFib3V0LWNvZGUgLmZlYXR1cmVzIGxpIGEge1xuICAgICAgICBmb250LXNpemU6IDE2cHg7XG4gICAgICAgIGNvbG9yOiAjNWM2YTgxO1xuICAgICAgICBsaW5lLWhlaWdodDogMmVtO1xuICAgICAgICBsZXR0ZXItc3BhY2luZzogLTAuMDJlbTsgfVxuICAgICAgLnBhZ2UtZnJhbWV3b3JrIC5hYm91dC1jb2RlIC5mZWF0dXJlcyBsaSBhIHtcbiAgICAgICAgY29sb3I6ICM0YThiZmM7XG4gICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7IH1cbiAgICAgICAgLnBhZ2UtZnJhbWV3b3JrIC5hYm91dC1jb2RlIC5mZWF0dXJlcyBsaSBhIHNwYW4ge1xuICAgICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgICAgICByaWdodDogLTJweDtcbiAgICAgICAgICB0b3A6IDJweDsgfVxuICAgICAgICAucGFnZS1mcmFtZXdvcmsgLmFib3V0LWNvZGUgLmZlYXR1cmVzIGxpIGE6aG92ZXIge1xuICAgICAgICAgIGNvbG9yOiAjMzE3YmZjO1xuICAgICAgICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTsgfVxuXG4ucGFnZS1mcmFtZXdvcmsgLmFib3V0LXRvb2xraXQge1xuICBiYWNrZ3JvdW5kOiAjMDkyMjRkO1xuICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQodG8gcmlnaHQsICMwNTFkNDYgMCUsICMxZDNmNmYgMTAwJSk7XG4gIHBhZGRpbmctdG9wOiAxMDlweDtcbiAgcGFkZGluZy1ib3R0b206IDM2cHg7XG4gIGNvbG9yOiAjOWZiMGNiOyB9XG4gIC5wYWdlLWZyYW1ld29yayAuYWJvdXQtdG9vbGtpdCBoZ3JvdXAge1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICBtYXJnaW4tYm90dG9tOiA5NnB4OyB9XG4gICAgLnBhZ2UtZnJhbWV3b3JrIC5hYm91dC10b29sa2l0IGhncm91cCBoMiB7XG4gICAgICBjb2xvcjogd2hpdGU7XG4gICAgICBmb250LXNpemU6IDI3cHg7XG4gICAgICBmb250LXdlaWdodDogNTAwO1xuICAgICAgbWFyZ2luLWJvdHRvbTogMjdweDtcbiAgICAgIGxldHRlci1zcGFjaW5nOiAtLjAxZW07IH1cbiAgICAucGFnZS1mcmFtZXdvcmsgLmFib3V0LXRvb2xraXQgaGdyb3VwIGg0IHtcbiAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7XG4gICAgICBmb250LXNpemU6IDIwcHg7XG4gICAgICBsZXR0ZXItc3BhY2luZzogLS4wMmVtOyB9XG4gIC5wYWdlLWZyYW1ld29yayAuYWJvdXQtdG9vbGtpdCAuZmVhdHVyZXMge1xuICAgIGxpc3Qtc3R5bGU6IG5vbmU7XG4gICAgcGFkZGluZzogMDsgfVxuICAgIEBtZWRpYSAobWF4LXdpZHRoOiAxMjE5cHgpIHtcbiAgICAgIC5wYWdlLWZyYW1ld29yayAuYWJvdXQtdG9vbGtpdCAuZmVhdHVyZXMge1xuICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICBmbGV4LXdyYXA6IHdyYXA7IH0gfVxuICAgIC5wYWdlLWZyYW1ld29yayAuYWJvdXQtdG9vbGtpdCAuZmVhdHVyZXMgbGkge1xuICAgICAgd2lkdGg6IGNhbGMoMzMlICsgMjJweCk7XG4gICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgICBwYWRkaW5nLWxlZnQ6IDgzcHg7XG4gICAgICBtYXJnaW4tYm90dG9tOiA1NHB4O1xuICAgICAgZm9udC13ZWlnaHQ6IDUwMDtcbiAgICAgIGZvbnQtc2l6ZTogMTZweDtcbiAgICAgIHBhZGRpbmctcmlnaHQ6IDU1cHg7XG4gICAgICBsaW5lLWhlaWdodDogMS44ZW07XG4gICAgICB2ZXJ0aWNhbC1hbGlnbjogdG9wO1xuICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICAgbGV0dGVyLXNwYWNpbmc6IC0wLjAyZW07IH1cbiAgICAgIC5wYWdlLWZyYW1ld29yayAuYWJvdXQtdG9vbGtpdCAuZmVhdHVyZXMgbGk6bnRoLWNoaWxkKDMpLCAucGFnZS1mcmFtZXdvcmsgLmFib3V0LXRvb2xraXQgLmZlYXR1cmVzIGxpOmxhc3QtY2hpbGQge1xuICAgICAgICB3aWR0aDogY2FsYygzMyUgLSA0MHB4KTtcbiAgICAgICAgcGFkZGluZy1yaWdodDogMDsgfVxuICAgICAgQG1lZGlhIChtYXgtd2lkdGg6IDEyMTlweCkge1xuICAgICAgICAucGFnZS1mcmFtZXdvcmsgLmFib3V0LXRvb2xraXQgLmZlYXR1cmVzIGxpIHtcbiAgICAgICAgICB3aWR0aDogYXV0bztcbiAgICAgICAgICBmbGV4OiAxIDAgMzUwcHg7IH1cbiAgICAgICAgICAucGFnZS1mcmFtZXdvcmsgLmFib3V0LXRvb2xraXQgLmZlYXR1cmVzIGxpOm50aC1jaGlsZCgzKSwgLnBhZ2UtZnJhbWV3b3JrIC5hYm91dC10b29sa2l0IC5mZWF0dXJlcyBsaTpsYXN0LWNoaWxkIHtcbiAgICAgICAgICAgIHdpZHRoOiBhdXRvOyB9IH1cbiAgICAgIC5wYWdlLWZyYW1ld29yayAuYWJvdXQtdG9vbGtpdCAuZmVhdHVyZXMgbGk6OmJlZm9yZSB7XG4gICAgICAgIGJhY2tncm91bmQ6IHVybChcIi9pbWcvZnJhbWV3b3JrL2ljb25zLW1kLnBuZ1wiKSBuby1yZXBlYXQgMCAwO1xuICAgICAgICBiYWNrZ3JvdW5kLXNpemU6IDgwcHg7XG4gICAgICAgIGhlaWdodDogODBweDtcbiAgICAgICAgd2lkdGg6IDgwcHg7XG4gICAgICAgIGNvbnRlbnQ6ICcnO1xuICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgIGxlZnQ6IDA7XG4gICAgICAgIHRvcDogMDsgfVxuICAgICAgLnBhZ2UtZnJhbWV3b3JrIC5hYm91dC10b29sa2l0IC5mZWF0dXJlcyBsaS5jbGk6OmJlZm9yZSB7XG4gICAgICAgIGJhY2tncm91bmQtcG9zaXRpb246IDAgLTMyMHB4OyB9XG4gICAgICAucGFnZS1mcmFtZXdvcmsgLmFib3V0LXRvb2xraXQgLmZlYXR1cmVzIGxpLm5hdGl2ZTo6YmVmb3JlIHtcbiAgICAgICAgYmFja2dyb3VuZC1wb3NpdGlvbjogMCAtNDAwcHg7IH1cbiAgICAgIC5wYWdlLWZyYW1ld29yayAuYWJvdXQtdG9vbGtpdCAuZmVhdHVyZXMgbGkucmVsb2FkOjpiZWZvcmUge1xuICAgICAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwIC00ODBweDsgfVxuICAgICAgLnBhZ2UtZnJhbWV3b3JrIC5hYm91dC10b29sa2l0IC5mZWF0dXJlcyBsaS56aW9uaWNvbnM6OmJlZm9yZSB7XG4gICAgICAgIGJhY2tncm91bmQtcG9zaXRpb246IDAgLTU2MHB4OyB9XG4gICAgICAucGFnZS1mcmFtZXdvcmsgLmFib3V0LXRvb2xraXQgLmZlYXR1cmVzIGxpLmRlZXBsaW5raW5nOjpiZWZvcmUge1xuICAgICAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwIC02NDBweDsgfVxuICAgICAgLnBhZ2UtZnJhbWV3b3JrIC5hYm91dC10b29sa2l0IC5mZWF0dXJlcyBsaS5hb3Q6OmJlZm9yZSB7XG4gICAgICAgIGJhY2tncm91bmQtcG9zaXRpb246IDAgLTcyMHB4OyB9XG4gICAgICAucGFnZS1mcmFtZXdvcmsgLmFib3V0LXRvb2xraXQgLmZlYXR1cmVzIGxpIGEge1xuICAgICAgICBjb2xvcjogd2hpdGU7IH1cbiAgICAgICAgLnBhZ2UtZnJhbWV3b3JrIC5hYm91dC10b29sa2l0IC5mZWF0dXJlcyBsaSBhOmhvdmVyIHtcbiAgICAgICAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG4gICAgICAgICAgY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC43KTsgfVxuXG4ucGFnZS1mcmFtZXdvcmsgLmFib3V0LWNvbW11bml0eSB7XG4gIGJhY2tncm91bmQ6ICMwOTE3MmU7XG4gIGJhY2tncm91bmQ6IHVybChcIi9pbWcvZnJhbWV3b3JrL21hcC5wbmdcIikgbm8tcmVwZWF0IGNlbnRlciBjZW50ZXIsIGxpbmVhci1ncmFkaWVudCh0byByaWdodCwgIzA1MGYyMyAwJSwgIzEzMjMzZiAxMDAlKTtcbiAgYmFja2dyb3VuZC1zaXplOiBjb3ZlciwgMTAwJTtcbiAgY29sb3I6ICM5MDllYmI7XG4gIHBhZGRpbmctYm90dG9tOiA0NHB4OyB9XG4gIC5wYWdlLWZyYW1ld29yayAuYWJvdXQtY29tbXVuaXR5IC5jb250YWluZXIge1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsgfVxuICAucGFnZS1mcmFtZXdvcmsgLmFib3V0LWNvbW11bml0eSAuc3RhdHMge1xuICAgIGJhY2tncm91bmQ6IHdoaXRlO1xuICAgIGJvcmRlci1yYWRpdXM6IDRweDtcbiAgICBjb2xvcjogIzUyOWVmZjtcbiAgICB3aWR0aDogNDEycHg7XG4gICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgcmlnaHQ6IDE1cHg7XG4gICAgdG9wOiAtMTlweDtcbiAgICBwYWRkaW5nOiA1NXB4IDg1cHggNTJweDtcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgYm94LXNoYWRvdzogMCA4cHggMTZweCByZ2JhKDAsIDAsIDAsIDAuMik7IH1cbiAgICBAbWVkaWEgKG1heC13aWR0aDogNzY3cHgpIHtcbiAgICAgIC5wYWdlLWZyYW1ld29yayAuYWJvdXQtY29tbXVuaXR5IC5zdGF0cyB7XG4gICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgICAgcmlnaHQ6IDA7XG4gICAgICAgIHdpZHRoOiAxMDAlOyB9IH1cbiAgICBAbWVkaWEgKG1heC13aWR0aDogNDIwcHgpIHtcbiAgICAgIC5wYWdlLWZyYW1ld29yayAuYWJvdXQtY29tbXVuaXR5IC5zdGF0cyB7XG4gICAgICAgIHBhZGRpbmctcmlnaHQ6IDE1cHg7XG4gICAgICAgIHBhZGRpbmctbGVmdDogMTVweDsgfSB9XG4gICAgLnBhZ2UtZnJhbWV3b3JrIC5hYm91dC1jb21tdW5pdHkgLnN0YXRzIGg1IHtcbiAgICAgIGJhY2tncm91bmQ6ICNmZmY7XG4gICAgICBjb2xvcjogI2I4YzFjZjtcbiAgICAgIGZvbnQtc2l6ZTogMTFweDtcbiAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgIHBhZGRpbmc6IDAgMTBweDtcbiAgICAgIGZvbnQtd2VpZ2h0OiA3MDA7XG4gICAgICBsZXR0ZXItc3BhY2luZzogLjJlbTsgfVxuICAgICAgLnBhZ2UtZnJhbWV3b3JrIC5hYm91dC1jb21tdW5pdHkgLnN0YXRzIGg1OjpiZWZvcmUsIC5wYWdlLWZyYW1ld29yayAuYWJvdXQtY29tbXVuaXR5IC5zdGF0cyBoNTo6YWZ0ZXIge1xuICAgICAgICBjb250ZW50OiAnJztcbiAgICAgICAgbGVmdDogMDtcbiAgICAgICAgcmlnaHQ6IDczJTtcbiAgICAgICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNkMGQ2ZTA7XG4gICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICB0b3A6IDRweDtcbiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOyB9XG4gICAgICAucGFnZS1mcmFtZXdvcmsgLmFib3V0LWNvbW11bml0eSAuc3RhdHMgaDU6OmFmdGVyIHtcbiAgICAgICAgbGVmdDogNzMlO1xuICAgICAgICByaWdodDogMDsgfVxuICAgIC5wYWdlLWZyYW1ld29yayAuYWJvdXQtY29tbXVuaXR5IC5zdGF0cyBoMSB7XG4gICAgICBmb250LXdlaWdodDogNjAwO1xuICAgICAgZm9udC1zaXplOiA3OHB4O1xuICAgICAgbGV0dGVyLXNwYWNpbmc6IC0zcHg7XG4gICAgICBtYXJnaW4tYm90dG9tOiAwO1xuICAgICAgbWFyZ2luLXRvcDogMzZweDsgfVxuICAgIC5wYWdlLWZyYW1ld29yayAuYWJvdXQtY29tbXVuaXR5IC5zdGF0cyBoNCB7XG4gICAgICBtYXJnaW4tdG9wOiAtM3B4O1xuICAgICAgZm9udC1zaXplOiAxM3B4O1xuICAgICAgY29sb3I6ICMyNzJhMmY7XG4gICAgICBmb250LXdlaWdodDogNzAwO1xuICAgICAgbGV0dGVyLXNwYWNpbmc6IDVweDsgfVxuICAgIC5wYWdlLWZyYW1ld29yayAuYWJvdXQtY29tbXVuaXR5IC5zdGF0cyB1bCB7XG4gICAgICBsaXN0LXN0eWxlOiBub25lO1xuICAgICAgcGFkZGluZzogMzNweCAwIDA7IH1cbiAgICAgIEBtZWRpYSAobWF4LXdpZHRoOiA3NjdweCkge1xuICAgICAgICAucGFnZS1mcmFtZXdvcmsgLmFib3V0LWNvbW11bml0eSAuc3RhdHMgdWwge1xuICAgICAgICAgIG1heC13aWR0aDogMjUwcHg7XG4gICAgICAgICAgbWFyZ2luOiAwIGF1dG87IH0gfVxuICAgIC5wYWdlLWZyYW1ld29yayAuYWJvdXQtY29tbXVuaXR5IC5zdGF0cyBsaSB7XG4gICAgICBmb250LXdlaWdodDogNzAwO1xuICAgICAgdGV4dC1hbGlnbjogbGVmdDtcbiAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgIGxldHRlci1zcGFjaW5nOiAuMTVlbTtcbiAgICAgIHBhZGRpbmc6IDEycHggMCAxNnB4IDM3cHg7XG4gICAgICBmb250LXNpemU6IDEzcHg7IH1cbiAgICAgIC5wYWdlLWZyYW1ld29yayAuYWJvdXQtY29tbXVuaXR5IC5zdGF0cyBsaTo6YmVmb3JlIHtcbiAgICAgICAgYmFja2dyb3VuZDogdXJsKFwiL2ltZy9mcmFtZXdvcmsvaWNvbnMtc20ucG5nXCIpIG5vLXJlcGVhdCAwIDA7XG4gICAgICAgIGJhY2tncm91bmQtc2l6ZTogMjRweDtcbiAgICAgICAgaGVpZ2h0OiAyNHB4O1xuICAgICAgICB3aWR0aDogMjRweDtcbiAgICAgICAgY29udGVudDogJyc7XG4gICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgIGxlZnQ6IC00cHg7XG4gICAgICAgIHRvcDogMTBweDsgfVxuICAgICAgLnBhZ2UtZnJhbWV3b3JrIC5hYm91dC1jb21tdW5pdHkgLnN0YXRzIGxpLmRldnM6OmJlZm9yZSB7XG4gICAgICAgIGJhY2tncm91bmQtcG9zaXRpb246IDAgLTEyMHB4OyB9XG4gICAgICAucGFnZS1mcmFtZXdvcmsgLmFib3V0LWNvbW11bml0eSAuc3RhdHMgbGkubWVldHVwczo6YmVmb3JlIHtcbiAgICAgICAgYmFja2dyb3VuZC1wb3NpdGlvbjogMCAtMTQ0cHg7IH1cbiAgICAgIC5wYWdlLWZyYW1ld29yayAuYWJvdXQtY29tbXVuaXR5IC5zdGF0cyBsaS5naXRodWI6OmJlZm9yZSB7XG4gICAgICAgIGJhY2tncm91bmQtcG9zaXRpb246IDAgLTE2OHB4OyB9XG4gICAgICAucGFnZS1mcmFtZXdvcmsgLmFib3V0LWNvbW11bml0eSAuc3RhdHMgbGkuc286OmJlZm9yZSB7XG4gICAgICAgIGJhY2tncm91bmQtcG9zaXRpb246IDAgLTE5MnB4OyB9XG4gIC5wYWdlLWZyYW1ld29yayAuYWJvdXQtY29tbXVuaXR5IGhncm91cCB7XG4gICAgcGFkZGluZy10b3A6IDEwOHB4O1xuICAgIG1hcmdpbi1yaWdodDogNDI1cHg7XG4gICAgcGFkZGluZy1ib3R0b206IDc2cHg7IH1cbiAgICBAbWVkaWEgKG1heC13aWR0aDogOTkxcHgpIHtcbiAgICAgIC5wYWdlLWZyYW1ld29yayAuYWJvdXQtY29tbXVuaXR5IGhncm91cCB7XG4gICAgICAgIHBhZGRpbmctdG9wOiAyMHB4O1xuICAgICAgICBwYWRkaW5nLWJvdHRvbTogNDZweDsgfSB9XG4gICAgQG1lZGlhIChtYXgtd2lkdGg6IDc2N3B4KSB7XG4gICAgICAucGFnZS1mcmFtZXdvcmsgLmFib3V0LWNvbW11bml0eSBoZ3JvdXAge1xuICAgICAgICBtYXJnaW4tcmlnaHQ6IDA7XG4gICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsgfSB9XG4gICAgLnBhZ2UtZnJhbWV3b3JrIC5hYm91dC1jb21tdW5pdHkgaGdyb3VwIGgyIHtcbiAgICAgIGNvbG9yOiB3aGl0ZTtcbiAgICAgIGZvbnQtd2VpZ2h0OiA0MDA7XG4gICAgICBtYXJnaW4tYm90dG9tOiAxNnB4O1xuICAgICAgZm9udC1zaXplOiAyN3B4O1xuICAgICAgbWFyZ2luLWJvdHRvbTogMjhweDsgfVxuICAgIC5wYWdlLWZyYW1ld29yayAuYWJvdXQtY29tbXVuaXR5IGhncm91cCBoNCB7XG4gICAgICBmb250LXdlaWdodDogNTAwO1xuICAgICAgZm9udC1zaXplOiAxOXB4OyB9XG4gIC5wYWdlLWZyYW1ld29yayAuYWJvdXQtY29tbXVuaXR5IC5mZWF0dXJlcyB7XG4gICAgbGlzdC1zdHlsZTogbm9uZTtcbiAgICBtYXJnaW4tcmlnaHQ6IDQyMHB4O1xuICAgIHBhZGRpbmc6IDA7IH1cbiAgICBAbWVkaWEgKG1heC13aWR0aDogNzY3cHgpIHtcbiAgICAgIC5wYWdlLWZyYW1ld29yayAuYWJvdXQtY29tbXVuaXR5IC5mZWF0dXJlcyB7XG4gICAgICAgIG1hcmdpbi1yaWdodDogMDsgfSB9XG4gICAgLnBhZ2UtZnJhbWV3b3JrIC5hYm91dC1jb21tdW5pdHkgLmZlYXR1cmVzIGxpIHtcbiAgICAgIHBhZGRpbmc6IDAgNjRweCA4M3B4IDc4cHg7XG4gICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICB3aWR0aDogNDklO1xuICAgICAgZm9udC13ZWlnaHQ6IDUwMDtcbiAgICAgIGZvbnQtc2l6ZTogMTZweDsgfVxuICAgICAgQG1lZGlhIChtYXgtd2lkdGg6IDk5MXB4KSB7XG4gICAgICAgIC5wYWdlLWZyYW1ld29yayAuYWJvdXQtY29tbXVuaXR5IC5mZWF0dXJlcyBsaSB7XG4gICAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgICAgcGFkZGluZy1yaWdodDogNXB4O1xuICAgICAgICAgIHBhZGRpbmctYm90dG9tOiA1MHB4OyB9IH1cbiAgICAgIC5wYWdlLWZyYW1ld29yayAuYWJvdXQtY29tbXVuaXR5IC5mZWF0dXJlcyBsaTo6YmVmb3JlIHtcbiAgICAgICAgYmFja2dyb3VuZDogdXJsKFwiL2ltZy9mcmFtZXdvcmsvaWNvbnMtbWQucG5nXCIpIG5vLXJlcGVhdCAwIDA7XG4gICAgICAgIGJhY2tncm91bmQtc2l6ZTogODBweDtcbiAgICAgICAgaGVpZ2h0OiA4MHB4O1xuICAgICAgICB3aWR0aDogODBweDtcbiAgICAgICAgY29udGVudDogJyc7XG4gICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgIGxlZnQ6IC0xMXB4O1xuICAgICAgICB0b3A6IC0xMXB4OyB9XG4gICAgICAucGFnZS1mcmFtZXdvcmsgLmFib3V0LWNvbW11bml0eSAuZmVhdHVyZXMgbGkuc286OmJlZm9yZSB7XG4gICAgICAgIGJhY2tncm91bmQtcG9zaXRpb246IDAgLTgwcHg7IH1cbiAgICAgIC5wYWdlLWZyYW1ld29yayAuYWJvdXQtY29tbXVuaXR5IC5mZWF0dXJlcyBsaS5zbGFjazo6YmVmb3JlIHtcbiAgICAgICAgYmFja2dyb3VuZC1wb3NpdGlvbjogMCAtMTYwcHg7IH1cbiAgICAgIC5wYWdlLWZyYW1ld29yayAuYWJvdXQtY29tbXVuaXR5IC5mZWF0dXJlcyBsaS5mb3J1bTo6YmVmb3JlIHtcbiAgICAgICAgYmFja2dyb3VuZC1wb3NpdGlvbjogMCAtMjQwcHg7IH1cbiAgLnBhZ2UtZnJhbWV3b3JrIC5hYm91dC1jb21tdW5pdHkgYSB7XG4gICAgY29sb3I6IHdoaXRlOyB9XG4gICAgLnBhZ2UtZnJhbWV3b3JrIC5hYm91dC1jb21tdW5pdHkgYTpob3ZlciB7XG4gICAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG4gICAgICBjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjcpOyB9XG5cbi5wYWdlLWZyYW1ld29yayAubG92ZWQtYnkge1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTsgfVxuICAucGFnZS1mcmFtZXdvcmsgLmxvdmVkLWJ5IGgyIHtcbiAgICBtYXJnaW4tdG9wOiAxMjVweDtcbiAgICBwYWRkaW5nLXRvcDogNThweDtcbiAgICBtYXJnaW4tYm90dG9tOiA2N3B4O1xuICAgIGZvbnQtc2l6ZTogMjJweDtcbiAgICBmb250LXdlaWdodDogNTAwO1xuICAgIGNvbG9yOiAjNGE1NjZiO1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICBsZXR0ZXItc3BhY2luZzogLS4wM2VtOyB9XG4gICAgLnBhZ2UtZnJhbWV3b3JrIC5sb3ZlZC1ieSBoMjo6YmVmb3JlIHtcbiAgICAgIGJhY2tncm91bmQ6IHVybChcIi9pbWcvZnJhbWV3b3JrL2hlYXJ0LWljb24ucG5nXCIpIG5vLXJlcGVhdCBjZW50ZXIgdG9wO1xuICAgICAgYmFja2dyb3VuZC1zaXplOiA0OHB4O1xuICAgICAgaGVpZ2h0OiA0M3B4O1xuICAgICAgd2lkdGg6IDQ4cHg7XG4gICAgICBjb250ZW50OiAnJztcbiAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgdG9wOiAwO1xuICAgICAgbGVmdDogY2FsYyg1MCUgLSAyNHB4KTtcbiAgICAgIGFuaW1hdGlvbjogcHVsc2UgMy41cyBpbmZpbml0ZTsgfVxuICAgIC5wYWdlLWZyYW1ld29yayAubG92ZWQtYnkgaDIgc3Ryb25nIHtcbiAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7XG4gICAgICBjb2xvcjogIzI3MmEyZjsgfVxuICAucGFnZS1mcmFtZXdvcmsgLmxvdmVkLWJ5IGgzIHtcbiAgICBmb250LWZhbWlseTogJ0dlb3JnaWEnLCBzYW5zLXNlcmlmO1xuICAgIGZvbnQtc2l6ZTogMjJweDtcbiAgICBtYXJnaW46IDAgYXV0bztcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgbWF4LXdpZHRoOiA5MDBweDtcbiAgICBjb2xvcjogIzcyN2E4NztcbiAgICBsaW5lLWhlaWdodDogMi4yZW07XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIGZvbnQtd2VpZ2h0OiAzMDA7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIGxlZnQ6IDA7XG4gICAgcmlnaHQ6IDA7XG4gICAgb3BhY2l0eTogMDsgfVxuICAgIC5wYWdlLWZyYW1ld29yayAubG92ZWQtYnkgaDMuYWN0aXZlIHtcbiAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgIG9wYWNpdHk6IDE7IH1cbiAgICAgIC5wYWdlLWZyYW1ld29yayAubG92ZWQtYnkgaDMuYWN0aXZlOjpiZWZvcmUge1xuICAgICAgICBiYWNrZ3JvdW5kOiB1cmwoXCIvaW1nL3F1b3RlLnBuZ1wiKSBuby1yZXBlYXQ7XG4gICAgICAgIGJhY2tncm91bmQtc2l6ZTogNTBweCA1MHB4O1xuICAgICAgICBoZWlnaHQ6IDUwcHg7XG4gICAgICAgIHdpZHRoOiA1MHB4O1xuICAgICAgICBjb250ZW50OiAnJztcbiAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICBsZWZ0OiAtNTBweDtcbiAgICAgICAgdG9wOiAtNXB4O1xuICAgICAgICBvcGFjaXR5OiAuNzsgfVxuICAucGFnZS1mcmFtZXdvcmsgLmxvdmVkLWJ5IC5xdW90ZWVzIHtcbiAgICBsaXN0LXN0eWxlOiBub25lO1xuICAgIHBhZGRpbmc6IDM2cHggMCA0NHB4OyB9XG4gICAgQG1lZGlhIChtYXgtd2lkdGg6IDk5MXB4KSB7XG4gICAgICAucGFnZS1mcmFtZXdvcmsgLmxvdmVkLWJ5IC5xdW90ZWVzIHtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgZmxleC13cmFwOiB3cmFwO1xuICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWFyb3VuZDsgfSB9XG4gICAgLnBhZ2UtZnJhbWV3b3JrIC5sb3ZlZC1ieSAucXVvdGVlcyBsaSB7XG4gICAgICBsaXN0LXN0eWxlOiBub25lO1xuICAgICAgdGV4dC1hbGlnbjogbGVmdDtcbiAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgIHBhZGRpbmctbGVmdDogOTBweDtcbiAgICAgIHBhZGRpbmctcmlnaHQ6IDQwcHg7XG4gICAgICB2ZXJ0aWNhbC1hbGlnbjogdG9wO1xuICAgICAgbWluLXdpZHRoOiAyMyU7XG4gICAgICBtaW4taGVpZ2h0OiA4MHB4O1xuICAgICAgbWFyZ2luLWJvdHRvbTogMjBweDtcbiAgICAgIG9wYWNpdHk6IC4zO1xuICAgICAgdHJhbnNpdGlvbjogLjNzIG9wYWNpdHk7XG4gICAgICBjdXJzb3I6IHBvaW50ZXI7IH1cbiAgICAgIEBtZWRpYSAobWF4LXdpZHRoOiA5OTFweCkge1xuICAgICAgICAucGFnZS1mcmFtZXdvcmsgLmxvdmVkLWJ5IC5xdW90ZWVzIGxpIHtcbiAgICAgICAgICBmbGV4OiAwIDAgMjQwcHg7XG4gICAgICAgICAgcGFkZGluZy1yaWdodDogMjBweDsgfSB9XG4gICAgICAucGFnZS1mcmFtZXdvcmsgLmxvdmVkLWJ5IC5xdW90ZWVzIGxpLmFjdGl2ZSB7XG4gICAgICAgIG9wYWNpdHk6IDE7IH1cbiAgICAgIC5wYWdlLWZyYW1ld29yayAubG92ZWQtYnkgLnF1b3RlZXMgbGkgaW1nIHtcbiAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICBsZWZ0OiAwO1xuICAgICAgICB3aWR0aDogODhweDtcbiAgICAgICAgaGVpZ2h0OiA4MHB4OyB9XG4gICAgICAucGFnZS1mcmFtZXdvcmsgLmxvdmVkLWJ5IC5xdW90ZWVzIGxpIHN0cm9uZyB7XG4gICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICBmb250LXdlaWdodDogNTAwO1xuICAgICAgICBmb250LXNpemU6IDE2cHg7XG4gICAgICAgIG1hcmdpbi10b3A6IDI3cHg7IH1cbiAgICAgIC5wYWdlLWZyYW1ld29yayAubG92ZWQtYnkgLnF1b3RlZXMgbGkgc3BhbiB7XG4gICAgICAgIGNvbG9yOiAjNzI3YTg3O1xuICAgICAgICBmb250LXNpemU6IDE0cHg7IH1cbiAgICAgICAgLnBhZ2UtZnJhbWV3b3JrIC5sb3ZlZC1ieSAucXVvdGVlcyBsaSBzcGFuIGEge1xuICAgICAgICAgIGNvbG9yOiAjNGE4YmZjOyB9XG4gICAgICAgICAgLnBhZ2UtZnJhbWV3b3JrIC5sb3ZlZC1ieSAucXVvdGVlcyBsaSBzcGFuIGE6aG92ZXIge1xuICAgICAgICAgICAgY29sb3I6ICMzMTdiZmM7XG4gICAgICAgICAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7IH1cbiAgLnBhZ2UtZnJhbWV3b3JrIC5sb3ZlZC1ieSAuY29tcGFuaWVzIHtcbiAgICB3aWR0aDogMTAwJTtcbiAgICBtYXgtd2lkdGg6IDk3N3B4O1xuICAgIG1hcmdpbjogMTBweCBhdXRvIDEyM3B4OyB9XG5cbi5mYWRlSW5Eb3duIHtcbiAgYW5pbWF0aW9uLW5hbWU6IGZhZGVJbkRvd247IH1cblxuI3NsaWRlciB7XG4gIG1hcmdpbjogMCBhdXRvO1xuICBwYWRkaW5nOiAwO1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIHRvcDogLTc4cHg7XG4gIHdpZHRoOiAxMDAlO1xuICBvdmVyZmxvdy14OiBoaWRkZW47IH1cbiAgI3NsaWRlciAuc2xpY2stcHJldixcbiAgI3NsaWRlciAuc2xpY2stbmV4dCB7XG4gICAgbGVmdDogMTBweDtcbiAgICB0b3A6IDQwJTsgfVxuICAgICNzbGlkZXIgLnNsaWNrLXByZXY6YmVmb3JlLFxuICAgICNzbGlkZXIgLnNsaWNrLW5leHQ6YmVmb3JlIHtcbiAgICAgIGNvbnRlbnQ6ICcgJztcbiAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICAgYmFja2dyb3VuZDogbm8tcmVwZWF0IHVybChcIi9pbWcvc2xpZGVyLWFycm93LWxlZnQucG5nXCIpO1xuICAgICAgYmFja2dyb3VuZC1zaXplOiAxOXB4O1xuICAgICAgd2lkdGg6IDE5cHg7XG4gICAgICBoZWlnaHQ6IDQycHg7XG4gICAgICB6LWluZGV4OiAxMDAwO1xuICAgICAgb3BhY2l0eTogLjQ7XG4gICAgICB0cmFuc2l0aW9uOiAuM3Mgb3BhY2l0eTsgfVxuICAgICNzbGlkZXIgLnNsaWNrLXByZXY6aG92ZXI6YmVmb3JlLFxuICAgICNzbGlkZXIgLnNsaWNrLW5leHQ6aG92ZXI6YmVmb3JlIHtcbiAgICAgIG9wYWNpdHk6IDE7IH1cbiAgI3NsaWRlciAuc2xpY2stbmV4dCB7XG4gICAgbGVmdDogYXV0bztcbiAgICByaWdodDogMTBweDsgfVxuICAgICNzbGlkZXIgLnNsaWNrLW5leHQ6YmVmb3JlIHtcbiAgICAgIGJhY2tncm91bmQ6IG5vLXJlcGVhdCB1cmwoXCIvaW1nL3NsaWRlci1hcnJvdy1yaWdodC5wbmdcIik7XG4gICAgICBiYWNrZ3JvdW5kLXNpemU6IDE5cHg7IH1cbiAgI3NsaWRlciAuc2xpY2stZmFkZS1vdXQge1xuICAgIG9wYWNpdHk6IDEgIWltcG9ydGFudDsgfVxuICAjc2xpZGVyIC5zbGlkZSB7XG4gICAgcGFkZGluZzogMTAwcHggMCAxMDBweDtcbiAgICB3aWR0aDogMTAwJTtcbiAgICBvdXRsaW5lOiBub25lOyB9XG4gICNzbGlkZXIgLmZlYXR1cmUtaW1nIHtcbiAgICBtaW4taGVpZ2h0OiA1MDJweDsgfVxuICAjc2xpZGVyIC5zbGljay1kb3RzIHtcbiAgICBib3R0b206IDk3cHg7IH1cbiAgICAjc2xpZGVyIC5zbGljay1kb3RzIGxpIGJ1dHRvbjpiZWZvcmUge1xuICAgICAgY29sb3I6IHdoaXRlO1xuICAgICAgZm9udC1zaXplOiAyMnB4O1xuICAgICAgdHJhbnNpdGlvbjogdHJhbnNmb3JtIC4ycywgb3BhY2l0eSAuMnM7IH1cbiAgICAjc2xpZGVyIC5zbGljay1kb3RzIGxpLnNsaWNrLWFjdGl2ZSBidXR0b246YmVmb3JlIHtcbiAgICAgIHRyYW5zZm9ybTogc2NhbGUoMS4zKTsgfVxuICAjc2xpZGVyIC5jb2wtc20tNjpmaXJzdC1jaGlsZCB7XG4gICAgcGFkZGluZy1sZWZ0OiAwO1xuICAgIG1pbi1oZWlnaHQ6IDYwNHB4OyB9XG4gICAgQG1lZGlhIChtYXgtd2lkdGg6IDc2N3B4KSB7XG4gICAgICAjc2xpZGVyIC5jb2wtc20tNjpmaXJzdC1jaGlsZCB7XG4gICAgICAgIG1pbi1oZWlnaHQ6IDMwNHB4OyB9IH1cbiAgI3NsaWRlciBoMSB7XG4gICAgbWFyZ2luOiA1MHB4IDAgMCAwO1xuICAgIGZvbnQtc2l6ZTogNDhweDtcbiAgICBmb250LXdlaWdodDogNDAwO1xuICAgIGNvbG9yOiB3aGl0ZTtcbiAgICBsZXR0ZXItc3BhY2luZzogLTAuMDVlbTtcbiAgICB0ZXh0LXNoYWRvdzogMCAxcHggMnB4IHJnYmEoMCwgMCwgMCwgMC4wNyk7XG4gICAgY3Vyc29yOiBkZWZhdWx0O1xuICAgIGxpbmUtaGVpZ2h0OiA2NHB4OyB9XG4gICAgI3NsaWRlciBoMSBzdHJvbmcge1xuICAgICAgZm9udC13ZWlnaHQ6IDYwMDsgfVxuICAjc2xpZGVyIGgyIHtcbiAgICBmb250LXNpemU6IDMycHg7XG4gICAgY29sb3I6IHdoaXRlOyB9XG4gICNzbGlkZXIgaDMge1xuICAgIGNvbG9yOiAjZDhlOGZmO1xuICAgIGZvbnQtc2l6ZTogMThweDtcbiAgICBmb250LXdlaWdodDogNTAwO1xuICAgIGN1cnNvcjogZGVmYXVsdDtcbiAgICBtYXJnaW46IDIwcHggMHB4IDMycHg7XG4gICAgbGluZS1oZWlnaHQ6IDEuNjtcbiAgICBsZXR0ZXItc3BhY2luZzogLTAuMDJlbTtcbiAgICBtYXgtd2lkdGg6IDUwMHB4O1xuICAgIHRleHQtc2hhZG93OiAwIDFweCAycHggcmdiYSgwLCAwLCAwLCAwLjA3KTsgfVxuICAjc2xpZGVyIC5idG4tcm93IHtcbiAgICBtYXJnaW4tdG9wOiA2NnB4OyB9XG4gICNzbGlkZXIgLmlvbi1jaGV2cm9uLXJpZ2h0IHtcbiAgICBmb250LXNpemU6IDE2cHg7XG4gICAgbWFyZ2luLWxlZnQ6IDRweDsgfVxuXG4uaG9tZSAubmF2YmFyIHtcbiAgYmFja2dyb3VuZDogbm9uZTtcbiAgYmFja2dyb3VuZDogIzRFOEVGN++/vS87IH1cblxuQG1lZGlhIHNjcmVlbiBhbmQgKC1tcy1oaWdoLWNvbnRyYXN0OiBhY3RpdmUpLCAoLW1zLWhpZ2gtY29udHJhc3Q6IG5vbmUpIHtcbiAgLmhvbWUgLm5hdmJhciB7XG4gICAgYmFja2dyb3VuZDogIzRFOEVGNzsgfSB9XG5cbkBtZWRpYSAobWF4LXdpZHRoOiA5OTFweCkge1xuICAjc2xpZGVyIHtcbiAgICB0b3A6IC0xMzRweDsgfVxuICAgICNzbGlkZXIgLnNsaWRlIHtcbiAgICAgIHBhZGRpbmc6IDEyNXB4IDAgNTBweDsgfVxuICAgICNzbGlkZXIgLnNsaWNrLWRvdHMge1xuICAgICAgYm90dG9tOiAxNzJweDsgfVxuICAgICNzbGlkZXIgLmZlYXR1cmUtaW1nIHtcbiAgICAgIG1pbi1oZWlnaHQ6IDQ1NXB4OyB9XG4gICAgI3NsaWRlciBoMSB7XG4gICAgICBmb250LXNpemU6IDMycHg7XG4gICAgICBsaW5lLWhlaWdodDogNDhweDtcbiAgICAgIG1hcmdpbi10b3A6IDg0cHg7IH1cbiAgICAjc2xpZGVyIGgzIHtcbiAgICAgIGZvbnQtc2l6ZTogMThweDsgfSB9XG5cbkBtZWRpYSAobWF4LXdpZHRoOiA3NjdweCkge1xuICAjc2xpZGVyIHtcbiAgICB0b3A6IC0zOTJweDsgfVxuICAgICNzbGlkZXIgLnNsaWRlIHtcbiAgICAgIHBhZGRpbmc6IDQ3MnB4IDAgMTg4cHg7IH1cbiAgICAjc2xpZGVyIC5zbGljay1kb3RzIHtcbiAgICAgIGJvdHRvbTogMjI5cHg7IH1cbiAgICAjc2xpZGVyIC5mZWF0dXJlLWltZyB7XG4gICAgICBtaW4taGVpZ2h0OiAzMDVweDsgfVxuICAgICNzbGlkZXIgLmxvZ28sXG4gICAgI3NsaWRlciAuc2xpZGUtY3JlYXRvciAubG9nbyB7XG4gICAgICBtYXJnaW46IC0xNXB4IGF1dG8gMTVweDtcbiAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsgfVxuICAgICNzbGlkZXIgaDEge1xuICAgICAgZm9udC1zaXplOiAzMHB4O1xuICAgICAgbWFyZ2luOiAwIGF1dG87XG4gICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7IH1cbiAgICAjc2xpZGVyIGgzIHtcbiAgICAgIGZvbnQtc2l6ZTogMTRweDtcbiAgICAgIG1hcmdpbjogMCBhdXRvO1xuICAgICAgdGV4dC1hbGlnbjogY2VudGVyOyB9XG4gICAgI3NsaWRlciAubG9nbyB7XG4gICAgICBtYXJnaW46IDAgYXV0byAxNXB4OyB9XG4gIC5ob21lIC51dGlsaXR5LWJhciB7XG4gICAgbWFyZ2luLXRvcDogLTYyOHB4OyB9IH1cblxuLnNsaWRlLWhvbWUge1xuICBiYWNrZ3JvdW5kOiAjMjk4ZmZmO1xuICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQodG8gcmlnaHQsICMzNDdlZmYgMCUsICMxZWEzZmYgMTAwJSk7IH1cblxuLnNvY2lhbC1yb3cge1xuICBtYXJnaW46IDEycHggMCAwIDA7XG4gIGZvbnQtd2VpZ2h0OiA1MDA7XG4gIHBhZGRpbmctbGVmdDogMDtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICBmbG9hdDogbGVmdDsgfVxuICBAbWVkaWEgKG1heC13aWR0aDogNzY3cHgpIHtcbiAgICAuc29jaWFsLXJvdyB7XG4gICAgICBmbG9hdDogbm9uZTsgfSB9XG4gIC5zb2NpYWwtcm93IGxpIHtcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgaGVpZ2h0OiAyN3B4O1xuICAgIG1hcmdpbi1yaWdodDogMjJweDtcbiAgICBmb250LXNpemU6IDE0cHg7IH1cbiAgICAuc29jaWFsLXJvdyBsaSBpIHtcbiAgICAgIHBhZGRpbmctcmlnaHQ6IDJweDtcbiAgICAgIGRpc3BsYXk6IGlubGluZTsgfVxuICAgIEBtZWRpYSAobWF4LXdpZHRoOiA5OTFweCkge1xuICAgICAgLnNvY2lhbC1yb3cgbGkge1xuICAgICAgICBmb250LXNpemU6IDE0cHg7XG4gICAgICAgIG1hcmdpbi1yaWdodDogMTVweDsgfVxuICAgICAgICAuc29jaWFsLXJvdyBsaSBpIHtcbiAgICAgICAgICBwYWRkaW5nLXJpZ2h0OiA0cHg7IH0gfVxuICAgIEBtZWRpYSAobWF4LXdpZHRoOiAzNjBweCkge1xuICAgICAgLnNvY2lhbC1yb3cgbGk6bnRoLWNoaWxkKDIpIHtcbiAgICAgICAgZGlzcGxheTogbm9uZTsgfSB9XG4gIC5zb2NpYWwtcm93IGEge1xuICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbiAgICBvcGFjaXR5OiAuNjtcbiAgICBjb2xvcjogd2hpdGU7XG4gICAgbGV0dGVyLXNwYWNpbmc6IC0uMDJlbTtcbiAgICB0cmFuc2l0aW9uOiAuM3Mgb3BhY2l0eTsgfVxuICAgIC5zb2NpYWwtcm93IGE6aG92ZXIge1xuICAgICAgb3BhY2l0eTogMTsgfVxuIl19 */\n"
  },
  {
    "path": "content/css/pages/home.css",
    "content": "#ionic-slider {\n  margin-top: -72px;\n  display: block;\n  min-height: 860px;\n  position: relative; }\n  #ionic-slider [slot=\"slide-0\"] {\n    display: block; }\n  #ionic-slider [slot^=\"slide-\"] {\n    padding-top: 100px;\n    position: absolute;\n    top: 0;\n    right: 0;\n    bottom: 0;\n    left: 0;\n    overflow: hidden; }\n    #ionic-slider [slot^=\"slide-\"] hgroup {\n      color: white;\n      max-width: 500px;\n      margin-top: 13px;\n      text-align: center;\n      position: relative; }\n    #ionic-slider [slot^=\"slide-\"] h1 {\n      font-size: 64px;\n      line-height: 74px;\n      margin-bottom: 16px;\n      letter-spacing: -.03em; }\n    #ionic-slider [slot^=\"slide-\"] p {\n      font-size: 24px;\n      line-height: 36px;\n      font-family: \"Eina\", \"Helvetica Neue\", Helvetica, sans-serif;\n      letter-spacing: -0.03em;\n      color: #e4f1ff; }\n    #ionic-slider [slot^=\"slide-\"] .btn {\n      font-size: 15px;\n      font-weight: 700;\n      margin-top: 18px;\n      padding: 20px 22px;\n      margin-right: -4px;\n      letter-spacing: .1em;\n      text-transform: uppercase; }\n      #ionic-slider [slot^=\"slide-\"] .btn ion-icon {\n        font-size: 16px;\n        margin-left: -4px;\n        vertical-align: -2px;\n        width: 16px;\n        height: 16px;\n        display: inline-block; }\n    #ionic-slider [slot^=\"slide-\"] .version-text {\n      color: rgba(255, 255, 255, 0.6);\n      font-weight: 500;\n      font-size: 11px; }\n      #ionic-slider [slot^=\"slide-\"] .version-text a {\n        color: rgba(255, 255, 255, 0.6); }\n        #ionic-slider [slot^=\"slide-\"] .version-text a:hover {\n          color: rgba(255, 255, 255, 0.8);\n          text-decoration: none; }\n  #ionic-slider #slide-limitless {\n    background: #548fff linear-gradient(to right, #4278ff, #67a7ff);\n    background-size: 100%; }\n    #ionic-slider #slide-limitless .btn {\n      color: #3880ff; }\n    #ionic-slider #slide-limitless ul {\n      padding: 0;\n      margin-top: 8px;\n      list-style: none; }\n    #ionic-slider #slide-limitless li {\n      display: inline-block;\n      margin-right: 8px; }\n      #ionic-slider #slide-limitless li:last-child {\n        margin-right: 0; }\n        #ionic-slider #slide-limitless li:last-child img {\n          height: 23px;\n          vertical-align: -8px; }\n      #ionic-slider #slide-limitless li img {\n        height: 13px;\n        opacity: .6; }\n    #ionic-slider #slide-limitless .graphics {\n      position: absolute;\n      bottom: 0;\n      width: 100%;\n      left: 0;\n      padding: 0;\n      margin: 0; }\n      #ionic-slider #slide-limitless .graphics li {\n        position: absolute;\n        opacity: 0;\n        -webkit-animation: fadeInUp 1s ease forwards;\n                animation: fadeInUp 1s ease forwards; }\n        #ionic-slider #slide-limitless .graphics li.iphone-x {\n          background: url(\"/img/homepage/hero-iphone-x.png\") 0 0 no-repeat;\n          background-size: 100%;\n          bottom: -63px;\n          left: -191px;\n          width: 400px;\n          height: 306px;\n          -webkit-animation-delay: .8s;\n                  animation-delay: .8s; }\n        #ionic-slider #slide-limitless .graphics li.iphone-xs-max {\n          background: url(\"/img/homepage/hero-iphone-xs-max.png\") 0 0 no-repeat;\n          background-size: 100%;\n          bottom: -39px;\n          left: 170px;\n          width: 490px;\n          height: 378px;\n          -webkit-animation-delay: .9s;\n                  animation-delay: .9s; }\n        #ionic-slider #slide-limitless .graphics li.pixel-3 {\n          background: url(\"/img/homepage/hero-google-pixel3.png\") 0 0 no-repeat;\n          background-size: 100%;\n          bottom: -40px;\n          left: 607px;\n          width: 490px;\n          height: 400px;\n          -webkit-animation-delay: 1s;\n                  animation-delay: 1s; }\n        #ionic-slider #slide-limitless .graphics li.galaxy {\n          background: url(\"/img/homepage/hero-android-galaxy.png\") 0 0 no-repeat;\n          background-size: 100%;\n          bottom: -41px;\n          left: 1063px;\n          width: 450px;\n          height: 356px;\n          -webkit-animation-delay: 1.1s;\n                  animation-delay: 1.1s; }\n        #ionic-slider #slide-limitless .graphics li.ipad {\n          background: url(\"/img/homepage/hero-ipad.png\") 0 0 no-repeat;\n          background-size: 100%;\n          bottom: -44px;\n          left: 1484px;\n          width: 610px;\n          height: 524px;\n          -webkit-animation-delay: 1.2s;\n                  animation-delay: 1.2s; }\n        #ionic-slider #slide-limitless .graphics li.macbook {\n          background: url(\"/img/homepage/hero-macbook.png\") 0 0 no-repeat;\n          background-size: 100%;\n          bottom: -63px;\n          left: 2061px;\n          width: 1470px;\n          height: 570px;\n          -webkit-animation-delay: 1.3s;\n                  animation-delay: 1.3s; }\n  #ionic-slider #slide-v4 {\n    background: #01050c; }\n    #ionic-slider #slide-v4::before {\n      background: url(\"/img/homepage/bg-phone.png\") no-repeat 50% 50%;\n      background-size: cover;\n      position: absolute;\n      top: 0;\n      right: 0;\n      bottom: 0;\n      left: 0;\n      opacity: 0;\n      content: ''; }\n    #ionic-slider #slide-v4 hgroup {\n      padding-top: 58px;\n      position: relative;\n      max-width: 620px; }\n      #ionic-slider #slide-v4 hgroup img {\n        display: inline-block;\n        width: 48px;\n        height: 48px; }\n      #ionic-slider #slide-v4 hgroup h4 {\n        text-transform: uppercase;\n        letter-spacing: .1em;\n        font-family: \"Roboto Mono\", Menlo, Monaco, Consolas, \"Courier New\", monospace;\n        font-size: 12px;\n        font-weight: 400;\n        margin-top: 15px;\n        margin-bottom: 33px; }\n      #ionic-slider #slide-v4 hgroup h1 {\n        letter-spacing: -.02em; }\n      #ionic-slider #slide-v4 hgroup p {\n        line-height: 32px;\n        margin-top: 18px; }\n      #ionic-slider #slide-v4 hgroup .btn {\n        margin-top: 27px;\n        letter-spacing: .08em; }\n        #ionic-slider #slide-v4 hgroup .btn.white {\n          color: #131a26;\n          margin-right: 8px; }\n        #ionic-slider #slide-v4 hgroup .btn.dark {\n          background: #343d4d; }\n          #ionic-slider #slide-v4 hgroup .btn.dark:hover {\n            background: #3e495c; }\n        #ionic-slider #slide-v4 hgroup .btn ion-icon {\n          width: 16px;\n          height: 16px;\n          margin-left: 8px; }\n    #ionic-slider #slide-v4 .features {\n      position: absolute;\n      bottom: 35px;\n      width: 100%;\n      left: 0; }\n      #ionic-slider #slide-v4 .features ul {\n        display: -ms-flexbox;\n        display: flex;\n        -ms-flex-pack: start;\n            justify-content: start;\n        -ms-flex-wrap: wrap;\n            flex-wrap: wrap;\n        padding-left: 0;\n        -ms-flex-pack: justify;\n            justify-content: space-between;\n        padding: 0; }\n        #ionic-slider #slide-v4 .features ul li {\n          margin-right: 1em;\n          list-style: none; }\n        #ionic-slider #slide-v4 .features ul::before, #ionic-slider #slide-v4 .features ul::after {\n          display: none; }\n      #ionic-slider #slide-v4 .features li {\n        position: relative;\n        padding-top: 65px;\n        width: 145px;\n        color: #8a94a3;\n        text-align: center;\n        background: transparent;\n        font-size: 12px;\n        line-height: 20px;\n        margin-bottom: 32px;\n        opacity: 0; }\n        #ionic-slider #slide-v4 .features li::before {\n          background: url(\"/img/homepage/v4-feature-icons.png\") 0 0 no-repeat;\n          background-size: cover;\n          position: absolute;\n          top: 0;\n          left: calc(50% - 24px);\n          height: 48px;\n          width: 48px;\n          content: ''; }\n        #ionic-slider #slide-v4 .features li.performance::before {\n          background-position: 0 0px; }\n        #ionic-slider #slide-v4 .features li.theming::before {\n          background-position: 0 -48px; }\n        #ionic-slider #slide-v4 .features li.standards::before {\n          background-position: 0 -96px; }\n        #ionic-slider #slide-v4 .features li.compatible::before {\n          background-position: 0 -144px; }\n        #ionic-slider #slide-v4 .features li.docs::before {\n          background-position: 0 -192px; }\n      @media (max-width: 991px) {\n        #ionic-slider #slide-v4 .features {\n          bottom: 0; }\n          #ionic-slider #slide-v4 .features ul {\n            max-width: 600px;\n            margin: 0 auto;\n            -ms-flex-pack: distribute;\n                justify-content: space-around; } }\n      @media (max-width: 570px) {\n        #ionic-slider #slide-v4 .features {\n          display: none; } }\n    #ionic-slider #slide-v4::before {\n      -webkit-animation: fadeInUp 1.6s .8s ease forwards;\n              animation: fadeInUp 1.6s .8s ease forwards; }\n    #ionic-slider #slide-v4 .features li {\n      -webkit-animation: fadeInUp 1s .1s ease forwards;\n              animation: fadeInUp 1s .1s ease forwards; }\n      #ionic-slider #slide-v4 .features li:nth-child(2) {\n        -webkit-animation-delay: .2s;\n                animation-delay: .2s; }\n      #ionic-slider #slide-v4 .features li:nth-child(3) {\n        -webkit-animation-delay: .3s;\n                animation-delay: .3s; }\n      #ionic-slider #slide-v4 .features li:nth-child(4) {\n        -webkit-animation-delay: .4s;\n                animation-delay: .4s; }\n      #ionic-slider #slide-v4 .features li:nth-child(5) {\n        -webkit-animation-delay: .5s;\n                animation-delay: .5s; }\n  #ionic-slider #slide-one-any {\n    background: white;\n    position: relative;\n    min-height: 840px; }\n    #ionic-slider #slide-one-any .notification {\n      display: inline-block;\n      background: #F6F8FB;\n      font-size: 11px;\n      line-height: 16px;\n      text-align: center;\n      letter-spacing: 0.1em;\n      padding: 7px 15px 7px; }\n      #ionic-slider #slide-one-any .notification strong {\n        color: #1A232F; }\n      #ionic-slider #slide-one-any .notification::after {\n        content: '>'; }\n      @media (max-width: 767px) {\n        #ionic-slider #slide-one-any .notification {\n          display: none; } }\n    #ionic-slider #slide-one-any hgroup {\n      max-width: 464px;\n      display: block;\n      margin-top: 56px;\n      position: relative;\n      z-index: 1; }\n      #ionic-slider #slide-one-any hgroup h1 {\n        font-size: 64px;\n        line-height: 64px;\n        color: #020814;\n        letter-spacing: -.04em;\n        margin-bottom: 7px; }\n      #ionic-slider #slide-one-any hgroup p {\n        font-size: 22px;\n        line-height: 37px;\n        color: rgba(91, 112, 139, 0.9);\n        letter-spacing: -.04em; }\n      #ionic-slider #slide-one-any hgroup .btn {\n        background: #4D8DFF;\n        border-radius: 10px;\n        text-transform: uppercase;\n        margin-top: 12px;\n        font-size: 15px;\n        line-height: 21px;\n        padding: 16px 16px 12px;\n        letter-spacing: 0.08em; }\n        #ionic-slider #slide-one-any hgroup .btn:hover {\n          background: #679dff; }\n        #ionic-slider #slide-one-any hgroup .btn:active {\n          background: #4D8DFF; }\n        #ionic-slider #slide-one-any hgroup .btn img {\n          margin-left: 2px;\n          vertical-align: 0;\n          margin-right: 2px; }\n      #ionic-slider #slide-one-any hgroup small {\n        font-size: 11px;\n        line-height: 21px;\n        letter-spacing: -0.02em;\n        color: #B2BECD; }\n        #ionic-slider #slide-one-any hgroup small a {\n          position: relative;\n          color: #92a0b3; }\n          #ionic-slider #slide-one-any hgroup small a::after {\n            content: '';\n            position: absolute;\n            left: 0;\n            right: 0;\n            bottom: -2px;\n            border-bottom: 1px solid #dee3ea; }\n          #ionic-slider #slide-one-any hgroup small a:hover {\n            color: #4a8bfc; }\n            #ionic-slider #slide-one-any hgroup small a:hover::after {\n              border-bottom-color: #4a8bfc; }\n      @media (max-width: 767px) {\n        #ionic-slider #slide-one-any hgroup {\n          max-width: 100%;\n          text-align: center;\n          margin-top: 64px; } }\n    #ionic-slider #slide-one-any .graphic {\n      position: absolute;\n      right: 20px;\n      top: 120px;\n      height: 563px;\n      width: 590px; }\n      @media (max-width: 1219px) {\n        #ionic-slider #slide-one-any .graphic {\n          top: 128px;\n          right: -64px; } }\n      @media (max-width: 991px) {\n        #ionic-slider #slide-one-any .graphic {\n          width: 302px;\n          height: auto;\n          top: 180px; } }\n      @media (max-width: 767px) {\n        #ionic-slider #slide-one-any .graphic {\n          display: none; } }\n    #ionic-slider #slide-one-any .stats {\n      padding: 0;\n      position: absolute;\n      bottom: 21px;\n      left: 0;\n      list-style: none;\n      display: -ms-flexbox;\n      display: flex;\n      -ms-flex-wrap: wrap;\n          flex-wrap: wrap; }\n      #ionic-slider #slide-one-any .stats a {\n        font-size: 14px;\n        line-height: 17px;\n        letter-spacing: -0.02em;\n        color: #92A1B3;\n        padding: 0 18px;\n        transition: .3s color; }\n        #ionic-slider #slide-one-any .stats a svg {\n          vertical-align: -3px; }\n          #ionic-slider #slide-one-any .stats a svg path {\n            transition: .3s fill; }\n        #ionic-slider #slide-one-any .stats a:hover {\n          color: #74879e; }\n          #ionic-slider #slide-one-any .stats a:hover svg path {\n            fill: #74879e; }\n      @media (max-width: 767px) {\n        #ionic-slider #slide-one-any .stats {\n          left: calc(50% - 140px); } }\n    #ionic-slider #slide-one-any ionic-newsletter-signup {\n      width: 400px;\n      position: absolute;\n      bottom: 29px;\n      right: 20px;\n      max-width: calc(100% - 30px); }\n      @media (max-width: 767px) {\n        #ionic-slider #slide-one-any ionic-newsletter-signup {\n          bottom: -26px;\n          right: auto;\n          left: calc(50% - 200px); } }\n      @media (max-width: 460px) {\n        #ionic-slider #slide-one-any ionic-newsletter-signup {\n          left: 15px; } }\n    @media (max-width: 991px) {\n      #ionic-slider #slide-one-any {\n        padding-top: 100px;\n        padding-bottom: 100px;\n        min-height: 0; } }\n    @media (max-width: 767px) {\n      #ionic-slider #slide-one-any {\n        padding-top: 100px;\n        padding-bottom: 100px;\n        min-height: 0; } }\n  @media (max-width: 991px) {\n    #ionic-slider {\n      min-height: 0; } }\n\n#page-home #used-by {\n  border-top: 1px #EFF3F8 solid;\n  padding-top: 60px;\n  padding-bottom: 58px;\n  border-bottom: 1px solid #EFF3F8; }\n  #page-home #used-by .container {\n    display: block;\n    max-width: 950px; }\n    @media (max-width: 991px) {\n      #page-home #used-by .container {\n        width: 100%; } }\n  @media (max-width: 991px) {\n    #page-home #used-by {\n      display: none; } }\n\n#page-home section {\n  padding-top: 170px;\n  line-height: 1.75em;\n  padding-bottom: 170px;\n  position: relative; }\n  #page-home section.center {\n    text-align: center; }\n  #page-home section.left, #page-home section.right {\n    display: -ms-flexbox;\n    display: flex; }\n    #page-home section.left .content, #page-home section.right .content {\n      width: 470px; }\n  #page-home section.right .content {\n    margin-left: auto; }\n  #page-home section h2 {\n    font-size: 47px;\n    margin-bottom: 15px;\n    letter-spacing: -.02em;\n    color: #0d121c; }\n  #page-home section h3 {\n    font-size: 35px;\n    letter-spacing: -0.016em; }\n  #page-home section h4 {\n    font-size: 12px;\n    color: #808fa7;\n    letter-spacing: .14em;\n    text-transform: uppercase;\n    font-family: \"Roboto Mono\", Menlo, Monaco, Consolas, \"Courier New\", monospace; }\n    #page-home section h4 + h2 {\n      margin-top: 36px; }\n  #page-home section h5 {\n    font-size: 20px;\n    margin-bottom: 16px;\n    font-weight: 600; }\n  #page-home section p {\n    font-size: 16px;\n    color: #8c9bb9;\n    margin-bottom: 8px;\n    line-height: 1.78em;\n    letter-spacing: -.028em; }\n  #page-home section hgroup p,\n  #page-home section p.lg {\n    color: #596a89;\n    font-size: 22px;\n    line-height: 36px;\n    margin-bottom: 23px;\n    letter-spacing: -.02em;\n    font-family: \"Eina\", \"Helvetica Neue\", Helvetica, sans-serif; }\n    #page-home section hgroup p strong,\n    #page-home section p.lg strong {\n      font-weight: 600; }\n  #page-home section .cta {\n    font-size: 20px;\n    margin-top: 11px;\n    padding-top: 0;\n    color: #5a98ff;\n    display: inline-block;\n    position: relative;\n    background: none;\n    letter-spacing: -.02em;\n    font-weight: 600;\n    font-family: \"Eina\", \"Helvetica Neue\", Helvetica, sans-serif;\n    position: relative;\n    transition: .3s opacity; }\n    #page-home section .cta:hover {\n      opacity: .6; }\n    #page-home section .cta:hover, #page-home section .cta:active, #page-home section .cta:focus {\n      text-decoration: none; }\n    #page-home section .cta::after {\n      content: '';\n      position: absolute;\n      bottom: -1px;\n      left: 0;\n      right: 0;\n      border-bottom: 2px solid #dbe6ff;\n      border-radius: 2px; }\n  @media (max-width: 991px) {\n    #page-home section .content {\n      width: 100%;\n      text-align: center; } }\n\n#page-home #for-devs {\n  padding-bottom: 87px; }\n  #page-home #for-devs hgroup {\n    max-width: 740px; }\n  #page-home #for-devs ul {\n    display: -ms-flexbox;\n    display: flex;\n    -ms-flex-wrap: wrap;\n        flex-wrap: wrap;\n    margin-top: 46px;\n    -ms-flex-pack: distribute;\n        justify-content: space-around;\n    max-width: 1064px;\n    font-family: \"Eina\", \"Helvetica Neue\", Helvetica, sans-serif; }\n    #page-home #for-devs ul::before, #page-home #for-devs ul::after {\n      display: none; }\n  #page-home #for-devs li {\n    list-style: none; }\n    #page-home #for-devs li a {\n      color: #798fb8;\n      font-weight: 700;\n      padding-top: 73px;\n      text-align: center;\n      text-transform: uppercase;\n      position: relative;\n      width: 130px;\n      display: block;\n      letter-spacing: .08em;\n      transition: .2s color;\n      font-size: 13px; }\n      #page-home #for-devs li a::before, #page-home #for-devs li a::after {\n        background: url(\"/img/homepage/offering-icons.png\") 0 0 no-repeat;\n        background-size: 56px;\n        height: 56px;\n        width: 56px;\n        content: '';\n        position: absolute;\n        top: 0;\n        left: calc(50% - 28px); }\n      #page-home #for-devs li a:hover {\n        color: #4a8bfc; }\n      @media (max-width: 560px) {\n        #page-home #for-devs li a {\n          line-height: 1.6em;\n          margin-bottom: 48px; } }\n    #page-home #for-devs li a::before,\n    #page-home #for-devs li a::after {\n      transition: .2s opacity; }\n    #page-home #for-devs li a::after {\n      opacity: 0; }\n    #page-home #for-devs li:hover a::after {\n      opacity: 1; }\n    #page-home #for-devs li.oss a::before {\n      background-position: 0 0px; }\n    #page-home #for-devs li.oss a::after {\n      background-position: 0 -56px; }\n    #page-home #for-devs li.devops a::before {\n      background-position: 0 -112px; }\n    #page-home #for-devs li.devops a::after {\n      background-position: 0 -168px; }\n    #page-home #for-devs li.ide a::before {\n      background-position: 0 -224px; }\n    #page-home #for-devs li.ide a::after {\n      background-position: 0 -280px; }\n    #page-home #for-devs li.integration a::before {\n      background-position: 0 -336px; }\n    #page-home #for-devs li.integration a::after {\n      background-position: 0 -392px; }\n\n#page-home #oss {\n  padding-top: 176px;\n  padding-bottom: 400px;\n  margin-top: 100px; }\n  #page-home #oss .frameworks {\n    margin-bottom: 33px;\n    display: -ms-flexbox;\n    display: flex;\n    -ms-flex-pack: start;\n        justify-content: start;\n    -ms-flex-wrap: wrap;\n        flex-wrap: wrap;\n    padding-left: 0; }\n    #page-home #oss .frameworks li {\n      margin-right: 1em;\n      list-style: none; }\n    #page-home #oss .frameworks li {\n      height: 32px;\n      width: 32px;\n      background-size: 100%;\n      display: inline-block;\n      margin-right: 12px; }\n      #page-home #oss .frameworks li.frameworks__angular {\n        background-image: url(\"/img/homepage/framework-support-angular.png\"); }\n      #page-home #oss .frameworks li.frameworks__react {\n        background-image: url(\"/img/homepage/framework-support-react.png\"); }\n      #page-home #oss .frameworks li.frameworks__vue {\n        background-image: url(\"/img/homepage/framework-support-vue.png\"); }\n      #page-home #oss .frameworks li.frameworks__js {\n        background-image: url(\"/img/homepage/framework-support-javascript.png\"); }\n  #page-home #oss .graphics {\n    position: absolute;\n    top: 25px;\n    right: 15px;\n    height: 500px; }\n    #page-home #oss .graphics.active::before, #page-home #oss .graphics.active::after {\n      -webkit-animation: fadeInUp 1s .8s ease forwards;\n              animation: fadeInUp 1s .8s ease forwards; }\n    #page-home #oss .graphics.active::after {\n      -webkit-animation-delay: .4s;\n              animation-delay: .4s; }\n    #page-home #oss .graphics.active .shadow {\n      -webkit-animation: fadeIn 2s .2s ease forwards;\n              animation: fadeIn 2s .2s ease forwards; }\n    #page-home #oss .graphics::before, #page-home #oss .graphics::after,\n    #page-home #oss .graphics .shadow {\n      position: absolute;\n      content: '';\n      opacity: 0;\n      background: url(\"/img/homepage/framework-device-android.jpg\") 0 0 no-repeat;\n      background-size: 100%;\n      top: 78px;\n      right: 99px;\n      width: 470px;\n      height: 624px; }\n    #page-home #oss .graphics::after {\n      background-image: url(\"/img/homepage/framework-device-iphone.png\");\n      background-size: 100%;\n      width: 490px;\n      height: 790px;\n      top: 0px;\n      right: 0px; }\n    #page-home #oss .graphics .shadow {\n      background-image: url(\"/img/homepage/framework-devices-shadow.png\");\n      background-size: 100%;\n      width: 1266px;\n      height: 214px;\n      top: 654px;\n      right: -200px; }\n  @media (max-width: 1219px) {\n    #page-home #oss {\n      padding-top: 120px; }\n      #page-home #oss .content {\n        width: 380px; } }\n  @media (max-width: 991px) {\n    #page-home #oss .graphics {\n      -webkit-transform: scale(0.5, 0.5);\n              transform: scale(0.5, 0.5);\n      top: 200px; } }\n  @media (max-width: 767px) {\n    #page-home #oss {\n      padding-top: 0px;\n      padding-bottom: 328px; }\n      #page-home #oss .content {\n        width: 100%;\n        text-align: center; }\n        #page-home #oss .content .frameworks {\n          -ms-flex-pack: center;\n              justify-content: center; }\n      #page-home #oss .graphics {\n        right: calc(50% - 60px);\n        bottom: -101px;\n        top: auto; }\n        #page-home #oss .graphics::before {\n          top: 39px;\n          right: 50px;\n          width: 235px;\n          height: 312px; }\n        #page-home #oss .graphics::after {\n          width: 245px;\n          height: 395px; }\n        #page-home #oss .graphics .shadow {\n          width: 633px;\n          height: 107px;\n          top: 327px;\n          right: -100px; } }\n\n#page-home #devops {\n  padding-top: 204px;\n  padding-bottom: 252px; }\n  #page-home #devops .content {\n    position: relative; }\n  #page-home #devops .git-hosts {\n    margin-bottom: 42px;\n    display: -ms-flexbox;\n    display: flex;\n    -ms-flex-pack: start;\n        justify-content: start;\n    -ms-flex-wrap: wrap;\n        flex-wrap: wrap;\n    padding-left: 0; }\n    #page-home #devops .git-hosts li {\n      margin-right: 1em;\n      list-style: none; }\n    #page-home #devops .git-hosts li {\n      margin-right: 19px; }\n    #page-home #devops .git-hosts img {\n      height: 20px; }\n  #page-home #devops .graphics {\n    background: url(\"/img/homepage/devops-appflow-preview.png\") 0 0 no-repeat;\n    background-size: 100%;\n    width: 1324px;\n    height: 812px;\n    position: absolute;\n    top: 14px;\n    left: -227px;\n    opacity: 0; }\n    #page-home #devops .graphics.active {\n      -webkit-animation: fadeInUp 1s ease forwards;\n              animation: fadeInUp 1s ease forwards; }\n  @media (max-width: 1219px) {\n    #page-home #devops {\n      padding-top: 60px; }\n      #page-home #devops .graphics {\n        width: 933px; } }\n  @media (max-width: 991px) {\n    #page-home #devops .graphics {\n      width: 662px;\n      top: 180px; } }\n  @media (max-width: 767px) {\n    #page-home #devops {\n      padding-top: 160px;\n      padding-bottom: 420px; }\n      #page-home #devops .content {\n        width: 100%; }\n      #page-home #devops .git-hosts {\n        -ms-flex-pack: center;\n            justify-content: center; }\n      #page-home #devops .graphics {\n        left: calc(50% - 150px);\n        width: 331px;\n        top: auto;\n        height: 203px;\n        bottom: 170px; } }\n\n#page-home #studio {\n  padding-bottom: 54px;\n  margin-bottom: 150px;\n  padding-top: 20px;\n  margin-top: 150px; }\n  #page-home #studio .content {\n    max-width: 720px; }\n  #page-home #studio .graphics {\n    background: url(\"/img/homepage/studio-desktop-bg.jpg\") 50% 0 no-repeat;\n    background-size: cover;\n    width: 100%;\n    padding-top: 100px;\n    padding-bottom: 100px;\n    margin-top: 58px; }\n    #page-home #studio .graphics video {\n      margin: 0 auto;\n      padding: 0;\n      border-radius: 6px;\n      box-shadow: 0 22px 70px 4px rgba(0, 0, 0, 0.56); }\n  @media (max-width: 767px) {\n    #page-home #studio {\n      padding-top: 80px;\n      margin-top: 0; }\n      #page-home #studio .graphics video {\n        width: 100%; } }\n\n#page-home #integrations {\n  padding-top: 20px;\n  padding-bottom: 4px; }\n  #page-home #integrations .content {\n    max-width: 894px; }\n  #page-home #integrations .integration-list {\n    position: relative;\n    height: 360px;\n    display: block;\n    margin: 0 0 48px;\n    padding: 0;\n    position: relative;\n    opacity: 0;\n    -webkit-animation: fadeIn 1s 1s forwards;\n            animation: fadeIn 1s 1s forwards; }\n    #page-home #integrations .integration-list li {\n      list-style: none;\n      position: absolute; }\n    #page-home #integrations .integration-list img {\n      position: absolute;\n      width: 128px;\n      border-radius: 50%;\n      box-shadow: 0 6px 24px rgba(0, 0, 0, 0.1); }\n      #page-home #integrations .integration-list img.m {\n        width: 64px; }\n      #page-home #integrations .integration-list img.m {\n        width: 96px; }\n\n#page-home #why-build {\n  padding-bottom: 90px; }\n  #page-home #why-build .why {\n    display: -ms-flexbox;\n    display: flex;\n    -ms-flex-pack: start;\n        justify-content: start;\n    -ms-flex-wrap: wrap;\n        flex-wrap: wrap;\n    padding-left: 0;\n    -ms-flex-pack: justify;\n        justify-content: space-between;\n    margin-top: 75px;\n    margin-bottom: 75px; }\n    #page-home #why-build .why li {\n      margin-right: 1em;\n      list-style: none; }\n    #page-home #why-build .why li {\n      padding-top: 61px;\n      max-width: 310px;\n      position: relative; }\n      #page-home #why-build .why li.why__future-proof::before {\n        background-position: 0 0px; }\n      #page-home #why-build .why li.why__community::before {\n        background-position: 0 -48px; }\n      #page-home #why-build .why li.why__os::before {\n        background-position: 0 -96px; }\n      #page-home #why-build .why li::before {\n        background: url(\"/img/homepage/why-build-icons.png\") 0 0 no-repeat;\n        background-size: 100%;\n        position: absolute;\n        top: 0;\n        left: 0;\n        height: 48px;\n        width: 48px;\n        content: ''; }\n      #page-home #why-build .why li p {\n        letter-spacing: -.01em; }\n  @media (max-width: 1219px) {\n    #page-home #why-build .why li {\n      max-width: 280px; } }\n  @media (max-width: 991px) {\n    #page-home #why-build .why li {\n      max-width: 210px; } }\n  @media (max-width: 767px) {\n    #page-home #why-build {\n      text-align: center; }\n      #page-home #why-build .why {\n        -ms-flex-pack: distribute;\n            justify-content: space-around; }\n        #page-home #why-build .why li {\n          max-width: 100%; }\n          #page-home #why-build .why li::before {\n            left: calc(50% - 24px); } }\n\n#page-home #difference {\n  display: -ms-flexbox;\n  display: flex;\n  padding-top: 60px;\n  padding-bottom: 69px;\n  margin-top: 16px;\n  border-bottom: 1px solid #eee; }\n  #page-home #difference .container {\n    position: relative; }\n    #page-home #difference .container::before {\n      background: url(\"/img/homepage/hybrid-vs-native-ionic-ebook.png\") 0 0 no-repeat;\n      background-size: 100%;\n      width: 424px;\n      height: 310px;\n      content: '';\n      position: absolute;\n      bottom: -69px;\n      left: 52px; }\n  #page-home #difference hgroup {\n    max-width: 550px;\n    margin-right: 50px;\n    margin-left: auto; }\n  #page-home #difference h5 {\n    font-size: 18px;\n    margin-bottom: 11px;\n    color: #1f3256; }\n  #page-home #difference p {\n    font-size: 16px;\n    font-weight: 400;\n    line-height: 1.6em;\n    letter-spacing: -.01em;\n    color: #6c81a6; }\n  #page-home #difference .btn {\n    padding: 12px 13px 10px;\n    font-size: 14px;\n    background-color: #668bff; }\n  @media (max-width: 1219px) {\n    #page-home #difference .container::before {\n      left: 0; }\n    #page-home #difference hgroup {\n      max-width: 500px; } }\n  @media (max-width: 991px) {\n    #page-home #difference hgroup {\n      margin: 0 auto;\n      max-width: 100%; }\n    #page-home #difference .container::before {\n      width: 212px;\n      height: 155px;\n      right: 0;\n      left: auto; } }\n  @media (max-width: 370px) {\n    #page-home #difference .container::before {\n      display: none; } }\n\n#page-home #good-company {\n  padding-top: 159px;\n  padding-bottom: 202px; }\n  #page-home #good-company hgroup {\n    max-width: 732px;\n    margin: 0 auto; }\n    #page-home #good-company hgroup p {\n      line-height: 32px;\n      margin-top: 15px; }\n  #page-home #good-company .case-studies {\n    display: -ms-flexbox;\n    display: flex;\n    -ms-flex-pack: start;\n        justify-content: start;\n    -ms-flex-wrap: wrap;\n        flex-wrap: wrap;\n    padding-left: 0;\n    -ms-flex-pack: justify;\n        justify-content: space-between;\n    margin-top: 54px; }\n    #page-home #good-company .case-studies li {\n      margin-right: 1em;\n      list-style: none; }\n    #page-home #good-company .case-studies li {\n      -ms-flex: 0 0 270px;\n          flex: 0 0 270px;\n      margin-right: 0;\n      margin-bottom: 32px; }\n    #page-home #good-company .case-studies a {\n      text-align: left;\n      position: relative;\n      display: block;\n      border-radius: 8px;\n      padding: 236px 27px 23px;\n      box-shadow: 0 4px 8px rgba(0, 30, 84, 0.12), 0 1px 3px rgba(0, 30, 84, 0.08);\n      transition: .15s box-shadow ease, .15s color, .15s transform; }\n      #page-home #good-company .case-studies a:hover {\n        -webkit-transform: translateY(-1px);\n                transform: translateY(-1px);\n        box-shadow: 0 8px 16px rgba(0, 30, 84, 0.1), 0 3px 6px rgba(0, 30, 84, 0.08); }\n    #page-home #good-company .case-studies img {\n      position: absolute;\n      top: 0;\n      left: 0;\n      right: 0;\n      width: 100%;\n      display: block;\n      border-top-right-radius: 8px;\n      border-top-left-radius: 8px; }\n    #page-home #good-company .case-studies strong {\n      font-weight: 400;\n      color: #253950; }\n    #page-home #good-company .case-studies p {\n      font-size: 14px;\n      letter-spacing: -.01em; }\n    #page-home #good-company .case-studies .cta {\n      font-size: 15px;\n      font-family: Eina;\n      font-weight: 600;\n      margin-top: 10px;\n      letter-spacing: .03em; }\n      #page-home #good-company .case-studies .cta::after {\n        display: none; }\n  #page-home #good-company .others {\n    width: 807px;\n    display: block;\n    margin: 49px auto 35px; }\n  #page-home #good-company .cta::after {\n    color: #dbe6ff; }\n  @media (max-width: 1219px) {\n    #page-home #good-company .case-studies li {\n      -ms-flex: 0 0 220px;\n          flex: 0 0 220px; } }\n  @media (max-width: 767px) {\n    #page-home #good-company .case-studies {\n      -ms-flex-pack: distribute;\n          justify-content: space-around; }\n      #page-home #good-company .case-studies li {\n        -ms-flex: 0 0 280px;\n            flex: 0 0 280px; }\n    #page-home #good-company .others {\n      width: 100%; } }\n\n#page-home #join {\n  background: linear-gradient(to right, #4f74fe, #70aafb);\n  padding-top: 132px;\n  padding-bottom: 160px;\n  color: white;\n  text-align: center; }\n  #page-home #join hgroup {\n    font-size: 23px;\n    max-width: 790px; }\n  #page-home #join h1 {\n    font-weight: 400;\n    color: white;\n    font-size: 46px;\n    line-height: 64px; }\n  #page-home #join .btns {\n    margin-top: 44px; }\n  #page-home #join .btn {\n    text-transform: uppercase;\n    font-weight: 700;\n    font-size: 15px;\n    padding: 21px 24px 19px;\n    letter-spacing: .096em;\n    margin-bottom: 16px; }\n    #page-home #join .btn ion-icon {\n      vertical-align: -2px;\n      display: inline-block;\n      width: 15px;\n      height: 15px; }\n    #page-home #join .btn.light {\n      background: #7bb3ff; }\n      #page-home #join .btn.light:hover {\n        background: #95c2ff; }\n    #page-home #join .btn:not(:hover):not(:active) {\n      box-shadow: none; }\n\n/*# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImhvbWUuY3NzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0VBQ0Usa0JBQWtCO0VBQ2xCLGVBQWU7RUFDZixrQkFBa0I7RUFDbEIsbUJBQW1CLEVBQUU7RUFDckI7SUFDRSxlQUFlLEVBQUU7RUFDbkI7SUFDRSxtQkFBbUI7SUFDbkIsbUJBQW1CO0lBQ25CLE9BQU87SUFDUCxTQUFTO0lBQ1QsVUFBVTtJQUNWLFFBQVE7SUFDUixpQkFBaUIsRUFBRTtJQUNuQjtNQUNFLGFBQWE7TUFDYixpQkFBaUI7TUFDakIsaUJBQWlCO01BQ2pCLG1CQUFtQjtNQUNuQixtQkFBbUIsRUFBRTtJQUN2QjtNQUNFLGdCQUFnQjtNQUNoQixrQkFBa0I7TUFDbEIsb0JBQW9CO01BQ3BCLHVCQUF1QixFQUFFO0lBQzNCO01BQ0UsZ0JBQWdCO01BQ2hCLGtCQUFrQjtNQUNsQiw2REFBNkQ7TUFDN0Qsd0JBQXdCO01BQ3hCLGVBQWUsRUFBRTtJQUNuQjtNQUNFLGdCQUFnQjtNQUNoQixpQkFBaUI7TUFDakIsaUJBQWlCO01BQ2pCLG1CQUFtQjtNQUNuQixtQkFBbUI7TUFDbkIscUJBQXFCO01BQ3JCLDBCQUEwQixFQUFFO01BQzVCO1FBQ0UsZ0JBQWdCO1FBQ2hCLGtCQUFrQjtRQUNsQixxQkFBcUI7UUFDckIsWUFBWTtRQUNaLGFBQWE7UUFDYixzQkFBc0IsRUFBRTtJQUM1QjtNQUNFLGdDQUFnQztNQUNoQyxpQkFBaUI7TUFDakIsZ0JBQWdCLEVBQUU7TUFDbEI7UUFDRSxnQ0FBZ0MsRUFBRTtRQUNsQztVQUNFLGdDQUFnQztVQUNoQyxzQkFBc0IsRUFBRTtFQUNoQztJQUNFLGdFQUFnRTtJQUNoRSxzQkFBc0IsRUFBRTtJQUN4QjtNQUNFLGVBQWUsRUFBRTtJQUNuQjtNQUNFLFdBQVc7TUFDWCxnQkFBZ0I7TUFDaEIsaUJBQWlCLEVBQUU7SUFDckI7TUFDRSxzQkFBc0I7TUFDdEIsa0JBQWtCLEVBQUU7TUFDcEI7UUFDRSxnQkFBZ0IsRUFBRTtRQUNsQjtVQUNFLGFBQWE7VUFDYixxQkFBcUIsRUFBRTtNQUMzQjtRQUNFLGFBQWE7UUFDYixZQUFZLEVBQUU7SUFDbEI7TUFDRSxtQkFBbUI7TUFDbkIsVUFBVTtNQUNWLFlBQVk7TUFDWixRQUFRO01BQ1IsV0FBVztNQUNYLFVBQVUsRUFBRTtNQUNaO1FBQ0UsbUJBQW1CO1FBQ25CLFdBQVc7UUFDWCw2Q0FBcUM7Z0JBQXJDLHFDQUFxQyxFQUFFO1FBQ3ZDO1VBQ0UsaUVBQWlFO1VBQ2pFLHNCQUFzQjtVQUN0QixjQUFjO1VBQ2QsYUFBYTtVQUNiLGFBQWE7VUFDYixjQUFjO1VBQ2QsNkJBQXFCO2tCQUFyQixxQkFBcUIsRUFBRTtRQUN6QjtVQUNFLHNFQUFzRTtVQUN0RSxzQkFBc0I7VUFDdEIsY0FBYztVQUNkLFlBQVk7VUFDWixhQUFhO1VBQ2IsY0FBYztVQUNkLDZCQUFxQjtrQkFBckIscUJBQXFCLEVBQUU7UUFDekI7VUFDRSxzRUFBc0U7VUFDdEUsc0JBQXNCO1VBQ3RCLGNBQWM7VUFDZCxZQUFZO1VBQ1osYUFBYTtVQUNiLGNBQWM7VUFDZCw0QkFBb0I7a0JBQXBCLG9CQUFvQixFQUFFO1FBQ3hCO1VBQ0UsdUVBQXVFO1VBQ3ZFLHNCQUFzQjtVQUN0QixjQUFjO1VBQ2QsYUFBYTtVQUNiLGFBQWE7VUFDYixjQUFjO1VBQ2QsOEJBQXNCO2tCQUF0QixzQkFBc0IsRUFBRTtRQUMxQjtVQUNFLDZEQUE2RDtVQUM3RCxzQkFBc0I7VUFDdEIsY0FBYztVQUNkLGFBQWE7VUFDYixhQUFhO1VBQ2IsY0FBYztVQUNkLDhCQUFzQjtrQkFBdEIsc0JBQXNCLEVBQUU7UUFDMUI7VUFDRSxnRUFBZ0U7VUFDaEUsc0JBQXNCO1VBQ3RCLGNBQWM7VUFDZCxhQUFhO1VBQ2IsY0FBYztVQUNkLGNBQWM7VUFDZCw4QkFBc0I7a0JBQXRCLHNCQUFzQixFQUFFO0VBQ2hDO0lBQ0Usb0JBQW9CLEVBQUU7SUFDdEI7TUFDRSxnRUFBZ0U7TUFDaEUsdUJBQXVCO01BQ3ZCLG1CQUFtQjtNQUNuQixPQUFPO01BQ1AsU0FBUztNQUNULFVBQVU7TUFDVixRQUFRO01BQ1IsV0FBVztNQUNYLFlBQVksRUFBRTtJQUNoQjtNQUNFLGtCQUFrQjtNQUNsQixtQkFBbUI7TUFDbkIsaUJBQWlCLEVBQUU7TUFDbkI7UUFDRSxzQkFBc0I7UUFDdEIsWUFBWTtRQUNaLGFBQWEsRUFBRTtNQUNqQjtRQUNFLDBCQUEwQjtRQUMxQixxQkFBcUI7UUFDckIsOEVBQThFO1FBQzlFLGdCQUFnQjtRQUNoQixpQkFBaUI7UUFDakIsaUJBQWlCO1FBQ2pCLG9CQUFvQixFQUFFO01BQ3hCO1FBQ0UsdUJBQXVCLEVBQUU7TUFDM0I7UUFDRSxrQkFBa0I7UUFDbEIsaUJBQWlCLEVBQUU7TUFDckI7UUFDRSxpQkFBaUI7UUFDakIsc0JBQXNCLEVBQUU7UUFDeEI7VUFDRSxlQUFlO1VBQ2Ysa0JBQWtCLEVBQUU7UUFDdEI7VUFDRSxvQkFBb0IsRUFBRTtVQUN0QjtZQUNFLG9CQUFvQixFQUFFO1FBQzFCO1VBQ0UsWUFBWTtVQUNaLGFBQWE7VUFDYixpQkFBaUIsRUFBRTtJQUN6QjtNQUNFLG1CQUFtQjtNQUNuQixhQUFhO01BQ2IsWUFBWTtNQUNaLFFBQVEsRUFBRTtNQUNWO1FBQ0UscUJBQWM7UUFBZCxjQUFjO1FBQ2QscUJBQXVCO1lBQXZCLHVCQUF1QjtRQUN2QixvQkFBZ0I7WUFBaEIsZ0JBQWdCO1FBQ2hCLGdCQUFnQjtRQUNoQix1QkFBK0I7WUFBL0IsK0JBQStCO1FBQy9CLFdBQVcsRUFBRTtRQUNiO1VBQ0Usa0JBQWtCO1VBQ2xCLGlCQUFpQixFQUFFO1FBQ3JCO1VBQ0UsY0FBYyxFQUFFO01BQ3BCO1FBQ0UsbUJBQW1CO1FBQ25CLGtCQUFrQjtRQUNsQixhQUFhO1FBQ2IsZUFBZTtRQUNmLG1CQUFtQjtRQUNuQix3QkFBd0I7UUFDeEIsZ0JBQWdCO1FBQ2hCLGtCQUFrQjtRQUNsQixvQkFBb0I7UUFDcEIsV0FBVyxFQUFFO1FBQ2I7VUFDRSxvRUFBb0U7VUFDcEUsdUJBQXVCO1VBQ3ZCLG1CQUFtQjtVQUNuQixPQUFPO1VBQ1AsdUJBQXVCO1VBQ3ZCLGFBQWE7VUFDYixZQUFZO1VBQ1osWUFBWSxFQUFFO1FBQ2hCO1VBQ0UsMkJBQTJCLEVBQUU7UUFDL0I7VUFDRSw2QkFBNkIsRUFBRTtRQUNqQztVQUNFLDZCQUE2QixFQUFFO1FBQ2pDO1VBQ0UsOEJBQThCLEVBQUU7UUFDbEM7VUFDRSw4QkFBOEIsRUFBRTtNQUNwQztRQUNFO1VBQ0UsVUFBVSxFQUFFO1VBQ1o7WUFDRSxpQkFBaUI7WUFDakIsZUFBZTtZQUNmLDBCQUE4QjtnQkFBOUIsOEJBQThCLEVBQUUsRUFBRTtNQUN4QztRQUNFO1VBQ0UsY0FBYyxFQUFFLEVBQUU7SUFDeEI7TUFDRSxtREFBMkM7Y0FBM0MsMkNBQTJDLEVBQUU7SUFDL0M7TUFDRSxpREFBeUM7Y0FBekMseUNBQXlDLEVBQUU7TUFDM0M7UUFDRSw2QkFBcUI7Z0JBQXJCLHFCQUFxQixFQUFFO01BQ3pCO1FBQ0UsNkJBQXFCO2dCQUFyQixxQkFBcUIsRUFBRTtNQUN6QjtRQUNFLDZCQUFxQjtnQkFBckIscUJBQXFCLEVBQUU7TUFDekI7UUFDRSw2QkFBcUI7Z0JBQXJCLHFCQUFxQixFQUFFO0VBQzdCO0lBQ0Usa0JBQWtCO0lBQ2xCLG1CQUFtQjtJQUNuQixrQkFBa0IsRUFBRTtJQUNwQjtNQUNFLHNCQUFzQjtNQUN0QixvQkFBb0I7TUFDcEIsZ0JBQWdCO01BQ2hCLGtCQUFrQjtNQUNsQixtQkFBbUI7TUFDbkIsc0JBQXNCO01BQ3RCLHNCQUFzQixFQUFFO01BQ3hCO1FBQ0UsZUFBZSxFQUFFO01BQ25CO1FBQ0UsYUFBYSxFQUFFO01BQ2pCO1FBQ0U7VUFDRSxjQUFjLEVBQUUsRUFBRTtJQUN4QjtNQUNFLGlCQUFpQjtNQUNqQixlQUFlO01BQ2YsaUJBQWlCO01BQ2pCLG1CQUFtQjtNQUNuQixXQUFXLEVBQUU7TUFDYjtRQUNFLGdCQUFnQjtRQUNoQixrQkFBa0I7UUFDbEIsZUFBZTtRQUNmLHVCQUF1QjtRQUN2QixtQkFBbUIsRUFBRTtNQUN2QjtRQUNFLGdCQUFnQjtRQUNoQixrQkFBa0I7UUFDbEIsK0JBQStCO1FBQy9CLHVCQUF1QixFQUFFO01BQzNCO1FBQ0Usb0JBQW9CO1FBQ3BCLG9CQUFvQjtRQUNwQiwwQkFBMEI7UUFDMUIsaUJBQWlCO1FBQ2pCLGdCQUFnQjtRQUNoQixrQkFBa0I7UUFDbEIsd0JBQXdCO1FBQ3hCLHVCQUF1QixFQUFFO1FBQ3pCO1VBQ0Usb0JBQW9CLEVBQUU7UUFDeEI7VUFDRSxvQkFBb0IsRUFBRTtRQUN4QjtVQUNFLGlCQUFpQjtVQUNqQixrQkFBa0I7VUFDbEIsa0JBQWtCLEVBQUU7TUFDeEI7UUFDRSxnQkFBZ0I7UUFDaEIsa0JBQWtCO1FBQ2xCLHdCQUF3QjtRQUN4QixlQUFlLEVBQUU7UUFDakI7VUFDRSxtQkFBbUI7VUFDbkIsZUFBZSxFQUFFO1VBQ2pCO1lBQ0UsWUFBWTtZQUNaLG1CQUFtQjtZQUNuQixRQUFRO1lBQ1IsU0FBUztZQUNULGFBQWE7WUFDYixpQ0FBaUMsRUFBRTtVQUNyQztZQUNFLGVBQWUsRUFBRTtZQUNqQjtjQUNFLDZCQUE2QixFQUFFO01BQ3ZDO1FBQ0U7VUFDRSxnQkFBZ0I7VUFDaEIsbUJBQW1CO1VBQ25CLGlCQUFpQixFQUFFLEVBQUU7SUFDM0I7TUFDRSxtQkFBbUI7TUFDbkIsWUFBWTtNQUNaLFdBQVc7TUFDWCxjQUFjO01BQ2QsYUFBYSxFQUFFO01BQ2Y7UUFDRTtVQUNFLFdBQVc7VUFDWCxhQUFhLEVBQUUsRUFBRTtNQUNyQjtRQUNFO1VBQ0UsYUFBYTtVQUNiLGFBQWE7VUFDYixXQUFXLEVBQUUsRUFBRTtNQUNuQjtRQUNFO1VBQ0UsY0FBYyxFQUFFLEVBQUU7SUFDeEI7TUFDRSxXQUFXO01BQ1gsbUJBQW1CO01BQ25CLGFBQWE7TUFDYixRQUFRO01BQ1IsaUJBQWlCO01BQ2pCLHFCQUFjO01BQWQsY0FBYztNQUNkLG9CQUFnQjtVQUFoQixnQkFBZ0IsRUFBRTtNQUNsQjtRQUNFLGdCQUFnQjtRQUNoQixrQkFBa0I7UUFDbEIsd0JBQXdCO1FBQ3hCLGVBQWU7UUFDZixnQkFBZ0I7UUFDaEIsc0JBQXNCLEVBQUU7UUFDeEI7VUFDRSxxQkFBcUIsRUFBRTtVQUN2QjtZQUNFLHFCQUFxQixFQUFFO1FBQzNCO1VBQ0UsZUFBZSxFQUFFO1VBQ2pCO1lBQ0UsY0FBYyxFQUFFO01BQ3RCO1FBQ0U7VUFDRSx3QkFBd0IsRUFBRSxFQUFFO0lBQ2xDO01BQ0UsYUFBYTtNQUNiLG1CQUFtQjtNQUNuQixhQUFhO01BQ2IsWUFBWTtNQUNaLDZCQUE2QixFQUFFO01BQy9CO1FBQ0U7VUFDRSxjQUFjO1VBQ2QsWUFBWTtVQUNaLHdCQUF3QixFQUFFLEVBQUU7TUFDaEM7UUFDRTtVQUNFLFdBQVcsRUFBRSxFQUFFO0lBQ3JCO01BQ0U7UUFDRSxtQkFBbUI7UUFDbkIsc0JBQXNCO1FBQ3RCLGNBQWMsRUFBRSxFQUFFO0lBQ3RCO01BQ0U7UUFDRSxtQkFBbUI7UUFDbkIsc0JBQXNCO1FBQ3RCLGNBQWMsRUFBRSxFQUFFO0VBQ3hCO0lBQ0U7TUFDRSxjQUFjLEVBQUUsRUFBRTs7QUFFeEI7RUFDRSw4QkFBOEI7RUFDOUIsa0JBQWtCO0VBQ2xCLHFCQUFxQjtFQUNyQixpQ0FBaUMsRUFBRTtFQUNuQztJQUNFLGVBQWU7SUFDZixpQkFBaUIsRUFBRTtJQUNuQjtNQUNFO1FBQ0UsWUFBWSxFQUFFLEVBQUU7RUFDdEI7SUFDRTtNQUNFLGNBQWMsRUFBRSxFQUFFOztBQUV4QjtFQUNFLG1CQUFtQjtFQUNuQixvQkFBb0I7RUFDcEIsc0JBQXNCO0VBQ3RCLG1CQUFtQixFQUFFO0VBQ3JCO0lBQ0UsbUJBQW1CLEVBQUU7RUFDdkI7SUFDRSxxQkFBYztJQUFkLGNBQWMsRUFBRTtJQUNoQjtNQUNFLGFBQWEsRUFBRTtFQUNuQjtJQUNFLGtCQUFrQixFQUFFO0VBQ3RCO0lBQ0UsZ0JBQWdCO0lBQ2hCLG9CQUFvQjtJQUNwQix1QkFBdUI7SUFDdkIsZUFBZSxFQUFFO0VBQ25CO0lBQ0UsZ0JBQWdCO0lBQ2hCLHlCQUF5QixFQUFFO0VBQzdCO0lBQ0UsZ0JBQWdCO0lBQ2hCLGVBQWU7SUFDZixzQkFBc0I7SUFDdEIsMEJBQTBCO0lBQzFCLDhFQUE4RSxFQUFFO0lBQ2hGO01BQ0UsaUJBQWlCLEVBQUU7RUFDdkI7SUFDRSxnQkFBZ0I7SUFDaEIsb0JBQW9CO0lBQ3BCLGlCQUFpQixFQUFFO0VBQ3JCO0lBQ0UsZ0JBQWdCO0lBQ2hCLGVBQWU7SUFDZixtQkFBbUI7SUFDbkIsb0JBQW9CO0lBQ3BCLHdCQUF3QixFQUFFO0VBQzVCOztJQUVFLGVBQWU7SUFDZixnQkFBZ0I7SUFDaEIsa0JBQWtCO0lBQ2xCLG9CQUFvQjtJQUNwQix1QkFBdUI7SUFDdkIsNkRBQTZELEVBQUU7SUFDL0Q7O01BRUUsaUJBQWlCLEVBQUU7RUFDdkI7SUFDRSxnQkFBZ0I7SUFDaEIsaUJBQWlCO0lBQ2pCLGVBQWU7SUFDZixlQUFlO0lBQ2Ysc0JBQXNCO0lBQ3RCLG1CQUFtQjtJQUNuQixpQkFBaUI7SUFDakIsdUJBQXVCO0lBQ3ZCLGlCQUFpQjtJQUNqQiw2REFBNkQ7SUFDN0QsbUJBQW1CO0lBQ25CLHdCQUF3QixFQUFFO0lBQzFCO01BQ0UsWUFBWSxFQUFFO0lBQ2hCO01BQ0Usc0JBQXNCLEVBQUU7SUFDMUI7TUFDRSxZQUFZO01BQ1osbUJBQW1CO01BQ25CLGFBQWE7TUFDYixRQUFRO01BQ1IsU0FBUztNQUNULGlDQUFpQztNQUNqQyxtQkFBbUIsRUFBRTtFQUN6QjtJQUNFO01BQ0UsWUFBWTtNQUNaLG1CQUFtQixFQUFFLEVBQUU7O0FBRTdCO0VBQ0UscUJBQXFCLEVBQUU7RUFDdkI7SUFDRSxpQkFBaUIsRUFBRTtFQUNyQjtJQUNFLHFCQUFjO0lBQWQsY0FBYztJQUNkLG9CQUFnQjtRQUFoQixnQkFBZ0I7SUFDaEIsaUJBQWlCO0lBQ2pCLDBCQUE4QjtRQUE5Qiw4QkFBOEI7SUFDOUIsa0JBQWtCO0lBQ2xCLDZEQUE2RCxFQUFFO0lBQy9EO01BQ0UsY0FBYyxFQUFFO0VBQ3BCO0lBQ0UsaUJBQWlCLEVBQUU7SUFDbkI7TUFDRSxlQUFlO01BQ2YsaUJBQWlCO01BQ2pCLGtCQUFrQjtNQUNsQixtQkFBbUI7TUFDbkIsMEJBQTBCO01BQzFCLG1CQUFtQjtNQUNuQixhQUFhO01BQ2IsZUFBZTtNQUNmLHNCQUFzQjtNQUN0QixzQkFBc0I7TUFDdEIsZ0JBQWdCLEVBQUU7TUFDbEI7UUFDRSxrRUFBa0U7UUFDbEUsc0JBQXNCO1FBQ3RCLGFBQWE7UUFDYixZQUFZO1FBQ1osWUFBWTtRQUNaLG1CQUFtQjtRQUNuQixPQUFPO1FBQ1AsdUJBQXVCLEVBQUU7TUFDM0I7UUFDRSxlQUFlLEVBQUU7TUFDbkI7UUFDRTtVQUNFLG1CQUFtQjtVQUNuQixvQkFBb0IsRUFBRSxFQUFFO0lBQzlCOztNQUVFLHdCQUF3QixFQUFFO0lBQzVCO01BQ0UsV0FBVyxFQUFFO0lBQ2Y7TUFDRSxXQUFXLEVBQUU7SUFDZjtNQUNFLDJCQUEyQixFQUFFO0lBQy9CO01BQ0UsNkJBQTZCLEVBQUU7SUFDakM7TUFDRSw4QkFBOEIsRUFBRTtJQUNsQztNQUNFLDhCQUE4QixFQUFFO0lBQ2xDO01BQ0UsOEJBQThCLEVBQUU7SUFDbEM7TUFDRSw4QkFBOEIsRUFBRTtJQUNsQztNQUNFLDhCQUE4QixFQUFFO0lBQ2xDO01BQ0UsOEJBQThCLEVBQUU7O0FBRXRDO0VBQ0UsbUJBQW1CO0VBQ25CLHNCQUFzQjtFQUN0QixrQkFBa0IsRUFBRTtFQUNwQjtJQUNFLG9CQUFvQjtJQUNwQixxQkFBYztJQUFkLGNBQWM7SUFDZCxxQkFBdUI7UUFBdkIsdUJBQXVCO0lBQ3ZCLG9CQUFnQjtRQUFoQixnQkFBZ0I7SUFDaEIsZ0JBQWdCLEVBQUU7SUFDbEI7TUFDRSxrQkFBa0I7TUFDbEIsaUJBQWlCLEVBQUU7SUFDckI7TUFDRSxhQUFhO01BQ2IsWUFBWTtNQUNaLHNCQUFzQjtNQUN0QixzQkFBc0I7TUFDdEIsbUJBQW1CLEVBQUU7TUFDckI7UUFDRSxxRUFBcUUsRUFBRTtNQUN6RTtRQUNFLG1FQUFtRSxFQUFFO01BQ3ZFO1FBQ0UsaUVBQWlFLEVBQUU7TUFDckU7UUFDRSx3RUFBd0UsRUFBRTtFQUNoRjtJQUNFLG1CQUFtQjtJQUNuQixVQUFVO0lBQ1YsWUFBWTtJQUNaLGNBQWMsRUFBRTtJQUNoQjtNQUNFLGlEQUF5QztjQUF6Qyx5Q0FBeUMsRUFBRTtJQUM3QztNQUNFLDZCQUFxQjtjQUFyQixxQkFBcUIsRUFBRTtJQUN6QjtNQUNFLCtDQUF1QztjQUF2Qyx1Q0FBdUMsRUFBRTtJQUMzQzs7TUFFRSxtQkFBbUI7TUFDbkIsWUFBWTtNQUNaLFdBQVc7TUFDWCw0RUFBNEU7TUFDNUUsc0JBQXNCO01BQ3RCLFVBQVU7TUFDVixZQUFZO01BQ1osYUFBYTtNQUNiLGNBQWMsRUFBRTtJQUNsQjtNQUNFLG1FQUFtRTtNQUNuRSxzQkFBc0I7TUFDdEIsYUFBYTtNQUNiLGNBQWM7TUFDZCxTQUFTO01BQ1QsV0FBVyxFQUFFO0lBQ2Y7TUFDRSxvRUFBb0U7TUFDcEUsc0JBQXNCO01BQ3RCLGNBQWM7TUFDZCxjQUFjO01BQ2QsV0FBVztNQUNYLGNBQWMsRUFBRTtFQUNwQjtJQUNFO01BQ0UsbUJBQW1CLEVBQUU7TUFDckI7UUFDRSxhQUFhLEVBQUUsRUFBRTtFQUN2QjtJQUNFO01BQ0UsbUNBQTJCO2NBQTNCLDJCQUEyQjtNQUMzQixXQUFXLEVBQUUsRUFBRTtFQUNuQjtJQUNFO01BQ0UsaUJBQWlCO01BQ2pCLHNCQUFzQixFQUFFO01BQ3hCO1FBQ0UsWUFBWTtRQUNaLG1CQUFtQixFQUFFO1FBQ3JCO1VBQ0Usc0JBQXdCO2NBQXhCLHdCQUF3QixFQUFFO01BQzlCO1FBQ0Usd0JBQXdCO1FBQ3hCLGVBQWU7UUFDZixVQUFVLEVBQUU7UUFDWjtVQUNFLFVBQVU7VUFDVixZQUFZO1VBQ1osYUFBYTtVQUNiLGNBQWMsRUFBRTtRQUNsQjtVQUNFLGFBQWE7VUFDYixjQUFjLEVBQUU7UUFDbEI7VUFDRSxhQUFhO1VBQ2IsY0FBYztVQUNkLFdBQVc7VUFDWCxjQUFjLEVBQUUsRUFBRTs7QUFFNUI7RUFDRSxtQkFBbUI7RUFDbkIsc0JBQXNCLEVBQUU7RUFDeEI7SUFDRSxtQkFBbUIsRUFBRTtFQUN2QjtJQUNFLG9CQUFvQjtJQUNwQixxQkFBYztJQUFkLGNBQWM7SUFDZCxxQkFBdUI7UUFBdkIsdUJBQXVCO0lBQ3ZCLG9CQUFnQjtRQUFoQixnQkFBZ0I7SUFDaEIsZ0JBQWdCLEVBQUU7SUFDbEI7TUFDRSxrQkFBa0I7TUFDbEIsaUJBQWlCLEVBQUU7SUFDckI7TUFDRSxtQkFBbUIsRUFBRTtJQUN2QjtNQUNFLGFBQWEsRUFBRTtFQUNuQjtJQUNFLDBFQUEwRTtJQUMxRSxzQkFBc0I7SUFDdEIsY0FBYztJQUNkLGNBQWM7SUFDZCxtQkFBbUI7SUFDbkIsVUFBVTtJQUNWLGFBQWE7SUFDYixXQUFXLEVBQUU7SUFDYjtNQUNFLDZDQUFxQztjQUFyQyxxQ0FBcUMsRUFBRTtFQUMzQztJQUNFO01BQ0Usa0JBQWtCLEVBQUU7TUFDcEI7UUFDRSxhQUFhLEVBQUUsRUFBRTtFQUN2QjtJQUNFO01BQ0UsYUFBYTtNQUNiLFdBQVcsRUFBRSxFQUFFO0VBQ25CO0lBQ0U7TUFDRSxtQkFBbUI7TUFDbkIsc0JBQXNCLEVBQUU7TUFDeEI7UUFDRSxZQUFZLEVBQUU7TUFDaEI7UUFDRSxzQkFBd0I7WUFBeEIsd0JBQXdCLEVBQUU7TUFDNUI7UUFDRSx3QkFBd0I7UUFDeEIsYUFBYTtRQUNiLFVBQVU7UUFDVixjQUFjO1FBQ2QsY0FBYyxFQUFFLEVBQUU7O0FBRTFCO0VBQ0UscUJBQXFCO0VBQ3JCLHFCQUFxQjtFQUNyQixrQkFBa0I7RUFDbEIsa0JBQWtCLEVBQUU7RUFDcEI7SUFDRSxpQkFBaUIsRUFBRTtFQUNyQjtJQUNFLHVFQUF1RTtJQUN2RSx1QkFBdUI7SUFDdkIsWUFBWTtJQUNaLG1CQUFtQjtJQUNuQixzQkFBc0I7SUFDdEIsaUJBQWlCLEVBQUU7SUFDbkI7TUFDRSxlQUFlO01BQ2YsV0FBVztNQUNYLG1CQUFtQjtNQUNuQixnREFBZ0QsRUFBRTtFQUN0RDtJQUNFO01BQ0Usa0JBQWtCO01BQ2xCLGNBQWMsRUFBRTtNQUNoQjtRQUNFLFlBQVksRUFBRSxFQUFFOztBQUV4QjtFQUNFLGtCQUFrQjtFQUNsQixvQkFBb0IsRUFBRTtFQUN0QjtJQUNFLGlCQUFpQixFQUFFO0VBQ3JCO0lBQ0UsbUJBQW1CO0lBQ25CLGNBQWM7SUFDZCxlQUFlO0lBQ2YsaUJBQWlCO0lBQ2pCLFdBQVc7SUFDWCxtQkFBbUI7SUFDbkIsV0FBVztJQUNYLHlDQUFpQztZQUFqQyxpQ0FBaUMsRUFBRTtJQUNuQztNQUNFLGlCQUFpQjtNQUNqQixtQkFBbUIsRUFBRTtJQUN2QjtNQUNFLG1CQUFtQjtNQUNuQixhQUFhO01BQ2IsbUJBQW1CO01BQ25CLDBDQUEwQyxFQUFFO01BQzVDO1FBQ0UsWUFBWSxFQUFFO01BQ2hCO1FBQ0UsWUFBWSxFQUFFOztBQUV0QjtFQUNFLHFCQUFxQixFQUFFO0VBQ3ZCO0lBQ0UscUJBQWM7SUFBZCxjQUFjO0lBQ2QscUJBQXVCO1FBQXZCLHVCQUF1QjtJQUN2QixvQkFBZ0I7UUFBaEIsZ0JBQWdCO0lBQ2hCLGdCQUFnQjtJQUNoQix1QkFBK0I7UUFBL0IsK0JBQStCO0lBQy9CLGlCQUFpQjtJQUNqQixvQkFBb0IsRUFBRTtJQUN0QjtNQUNFLGtCQUFrQjtNQUNsQixpQkFBaUIsRUFBRTtJQUNyQjtNQUNFLGtCQUFrQjtNQUNsQixpQkFBaUI7TUFDakIsbUJBQW1CLEVBQUU7TUFDckI7UUFDRSwyQkFBMkIsRUFBRTtNQUMvQjtRQUNFLDZCQUE2QixFQUFFO01BQ2pDO1FBQ0UsNkJBQTZCLEVBQUU7TUFDakM7UUFDRSxtRUFBbUU7UUFDbkUsc0JBQXNCO1FBQ3RCLG1CQUFtQjtRQUNuQixPQUFPO1FBQ1AsUUFBUTtRQUNSLGFBQWE7UUFDYixZQUFZO1FBQ1osWUFBWSxFQUFFO01BQ2hCO1FBQ0UsdUJBQXVCLEVBQUU7RUFDL0I7SUFDRTtNQUNFLGlCQUFpQixFQUFFLEVBQUU7RUFDekI7SUFDRTtNQUNFLGlCQUFpQixFQUFFLEVBQUU7RUFDekI7SUFDRTtNQUNFLG1CQUFtQixFQUFFO01BQ3JCO1FBQ0UsMEJBQThCO1lBQTlCLDhCQUE4QixFQUFFO1FBQ2hDO1VBQ0UsZ0JBQWdCLEVBQUU7VUFDbEI7WUFDRSx1QkFBdUIsRUFBRSxFQUFFOztBQUV2QztFQUNFLHFCQUFjO0VBQWQsY0FBYztFQUNkLGtCQUFrQjtFQUNsQixxQkFBcUI7RUFDckIsaUJBQWlCO0VBQ2pCLDhCQUE4QixFQUFFO0VBQ2hDO0lBQ0UsbUJBQW1CLEVBQUU7SUFDckI7TUFDRSxnRkFBZ0Y7TUFDaEYsc0JBQXNCO01BQ3RCLGFBQWE7TUFDYixjQUFjO01BQ2QsWUFBWTtNQUNaLG1CQUFtQjtNQUNuQixjQUFjO01BQ2QsV0FBVyxFQUFFO0VBQ2pCO0lBQ0UsaUJBQWlCO0lBQ2pCLG1CQUFtQjtJQUNuQixrQkFBa0IsRUFBRTtFQUN0QjtJQUNFLGdCQUFnQjtJQUNoQixvQkFBb0I7SUFDcEIsZUFBZSxFQUFFO0VBQ25CO0lBQ0UsZ0JBQWdCO0lBQ2hCLGlCQUFpQjtJQUNqQixtQkFBbUI7SUFDbkIsdUJBQXVCO0lBQ3ZCLGVBQWUsRUFBRTtFQUNuQjtJQUNFLHdCQUF3QjtJQUN4QixnQkFBZ0I7SUFDaEIsMEJBQTBCLEVBQUU7RUFDOUI7SUFDRTtNQUNFLFFBQVEsRUFBRTtJQUNaO01BQ0UsaUJBQWlCLEVBQUUsRUFBRTtFQUN6QjtJQUNFO01BQ0UsZUFBZTtNQUNmLGdCQUFnQixFQUFFO0lBQ3BCO01BQ0UsYUFBYTtNQUNiLGNBQWM7TUFDZCxTQUFTO01BQ1QsV0FBVyxFQUFFLEVBQUU7RUFDbkI7SUFDRTtNQUNFLGNBQWMsRUFBRSxFQUFFOztBQUV4QjtFQUNFLG1CQUFtQjtFQUNuQixzQkFBc0IsRUFBRTtFQUN4QjtJQUNFLGlCQUFpQjtJQUNqQixlQUFlLEVBQUU7SUFDakI7TUFDRSxrQkFBa0I7TUFDbEIsaUJBQWlCLEVBQUU7RUFDdkI7SUFDRSxxQkFBYztJQUFkLGNBQWM7SUFDZCxxQkFBdUI7UUFBdkIsdUJBQXVCO0lBQ3ZCLG9CQUFnQjtRQUFoQixnQkFBZ0I7SUFDaEIsZ0JBQWdCO0lBQ2hCLHVCQUErQjtRQUEvQiwrQkFBK0I7SUFDL0IsaUJBQWlCLEVBQUU7SUFDbkI7TUFDRSxrQkFBa0I7TUFDbEIsaUJBQWlCLEVBQUU7SUFDckI7TUFDRSxvQkFBZ0I7VUFBaEIsZ0JBQWdCO01BQ2hCLGdCQUFnQjtNQUNoQixvQkFBb0IsRUFBRTtJQUN4QjtNQUNFLGlCQUFpQjtNQUNqQixtQkFBbUI7TUFDbkIsZUFBZTtNQUNmLG1CQUFtQjtNQUNuQix5QkFBeUI7TUFDekIsNkVBQTZFO01BQzdFLDZEQUE2RCxFQUFFO01BQy9EO1FBQ0Usb0NBQTRCO2dCQUE1Qiw0QkFBNEI7UUFDNUIsNkVBQTZFLEVBQUU7SUFDbkY7TUFDRSxtQkFBbUI7TUFDbkIsT0FBTztNQUNQLFFBQVE7TUFDUixTQUFTO01BQ1QsWUFBWTtNQUNaLGVBQWU7TUFDZiw2QkFBNkI7TUFDN0IsNEJBQTRCLEVBQUU7SUFDaEM7TUFDRSxpQkFBaUI7TUFDakIsZUFBZSxFQUFFO0lBQ25CO01BQ0UsZ0JBQWdCO01BQ2hCLHVCQUF1QixFQUFFO0lBQzNCO01BQ0UsZ0JBQWdCO01BQ2hCLGtCQUFrQjtNQUNsQixpQkFBaUI7TUFDakIsaUJBQWlCO01BQ2pCLHNCQUFzQixFQUFFO01BQ3hCO1FBQ0UsY0FBYyxFQUFFO0VBQ3RCO0lBQ0UsYUFBYTtJQUNiLGVBQWU7SUFDZix1QkFBdUIsRUFBRTtFQUMzQjtJQUNFLGVBQWUsRUFBRTtFQUNuQjtJQUNFO01BQ0Usb0JBQWdCO1VBQWhCLGdCQUFnQixFQUFFLEVBQUU7RUFDeEI7SUFDRTtNQUNFLDBCQUE4QjtVQUE5Qiw4QkFBOEIsRUFBRTtNQUNoQztRQUNFLG9CQUFnQjtZQUFoQixnQkFBZ0IsRUFBRTtJQUN0QjtNQUNFLFlBQVksRUFBRSxFQUFFOztBQUV0QjtFQUNFLHdEQUF3RDtFQUN4RCxtQkFBbUI7RUFDbkIsc0JBQXNCO0VBQ3RCLGFBQWE7RUFDYixtQkFBbUIsRUFBRTtFQUNyQjtJQUNFLGdCQUFnQjtJQUNoQixpQkFBaUIsRUFBRTtFQUNyQjtJQUNFLGlCQUFpQjtJQUNqQixhQUFhO0lBQ2IsZ0JBQWdCO0lBQ2hCLGtCQUFrQixFQUFFO0VBQ3RCO0lBQ0UsaUJBQWlCLEVBQUU7RUFDckI7SUFDRSwwQkFBMEI7SUFDMUIsaUJBQWlCO0lBQ2pCLGdCQUFnQjtJQUNoQix3QkFBd0I7SUFDeEIsdUJBQXVCO0lBQ3ZCLG9CQUFvQixFQUFFO0lBQ3RCO01BQ0UscUJBQXFCO01BQ3JCLHNCQUFzQjtNQUN0QixZQUFZO01BQ1osYUFBYSxFQUFFO0lBQ2pCO01BQ0Usb0JBQW9CLEVBQUU7TUFDdEI7UUFDRSxvQkFBb0IsRUFBRTtJQUMxQjtNQUNFLGlCQUFpQixFQUFFIiwiZmlsZSI6InBhZ2VzL2hvbWUuY3NzIiwic291cmNlc0NvbnRlbnQiOlsiI2lvbmljLXNsaWRlciB7XG4gIG1hcmdpbi10b3A6IC03MnB4O1xuICBkaXNwbGF5OiBibG9jaztcbiAgbWluLWhlaWdodDogODYwcHg7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTsgfVxuICAjaW9uaWMtc2xpZGVyIFtzbG90PVwic2xpZGUtMFwiXSB7XG4gICAgZGlzcGxheTogYmxvY2s7IH1cbiAgI2lvbmljLXNsaWRlciBbc2xvdF49XCJzbGlkZS1cIl0ge1xuICAgIHBhZGRpbmctdG9wOiAxMDBweDtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgdG9wOiAwO1xuICAgIHJpZ2h0OiAwO1xuICAgIGJvdHRvbTogMDtcbiAgICBsZWZ0OiAwO1xuICAgIG92ZXJmbG93OiBoaWRkZW47IH1cbiAgICAjaW9uaWMtc2xpZGVyIFtzbG90Xj1cInNsaWRlLVwiXSBoZ3JvdXAge1xuICAgICAgY29sb3I6IHdoaXRlO1xuICAgICAgbWF4LXdpZHRoOiA1MDBweDtcbiAgICAgIG1hcmdpbi10b3A6IDEzcHg7XG4gICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgICBwb3NpdGlvbjogcmVsYXRpdmU7IH1cbiAgICAjaW9uaWMtc2xpZGVyIFtzbG90Xj1cInNsaWRlLVwiXSBoMSB7XG4gICAgICBmb250LXNpemU6IDY0cHg7XG4gICAgICBsaW5lLWhlaWdodDogNzRweDtcbiAgICAgIG1hcmdpbi1ib3R0b206IDE2cHg7XG4gICAgICBsZXR0ZXItc3BhY2luZzogLS4wM2VtOyB9XG4gICAgI2lvbmljLXNsaWRlciBbc2xvdF49XCJzbGlkZS1cIl0gcCB7XG4gICAgICBmb250LXNpemU6IDI0cHg7XG4gICAgICBsaW5lLWhlaWdodDogMzZweDtcbiAgICAgIGZvbnQtZmFtaWx5OiBcIkVpbmFcIiwgXCJIZWx2ZXRpY2EgTmV1ZVwiLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7XG4gICAgICBsZXR0ZXItc3BhY2luZzogLTAuMDNlbTtcbiAgICAgIGNvbG9yOiAjZTRmMWZmOyB9XG4gICAgI2lvbmljLXNsaWRlciBbc2xvdF49XCJzbGlkZS1cIl0gLmJ0biB7XG4gICAgICBmb250LXNpemU6IDE1cHg7XG4gICAgICBmb250LXdlaWdodDogNzAwO1xuICAgICAgbWFyZ2luLXRvcDogMThweDtcbiAgICAgIHBhZGRpbmc6IDIwcHggMjJweDtcbiAgICAgIG1hcmdpbi1yaWdodDogLTRweDtcbiAgICAgIGxldHRlci1zcGFjaW5nOiAuMWVtO1xuICAgICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTsgfVxuICAgICAgI2lvbmljLXNsaWRlciBbc2xvdF49XCJzbGlkZS1cIl0gLmJ0biBpb24taWNvbiB7XG4gICAgICAgIGZvbnQtc2l6ZTogMTZweDtcbiAgICAgICAgbWFyZ2luLWxlZnQ6IC00cHg7XG4gICAgICAgIHZlcnRpY2FsLWFsaWduOiAtMnB4O1xuICAgICAgICB3aWR0aDogMTZweDtcbiAgICAgICAgaGVpZ2h0OiAxNnB4O1xuICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7IH1cbiAgICAjaW9uaWMtc2xpZGVyIFtzbG90Xj1cInNsaWRlLVwiXSAudmVyc2lvbi10ZXh0IHtcbiAgICAgIGNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNik7XG4gICAgICBmb250LXdlaWdodDogNTAwO1xuICAgICAgZm9udC1zaXplOiAxMXB4OyB9XG4gICAgICAjaW9uaWMtc2xpZGVyIFtzbG90Xj1cInNsaWRlLVwiXSAudmVyc2lvbi10ZXh0IGEge1xuICAgICAgICBjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjYpOyB9XG4gICAgICAgICNpb25pYy1zbGlkZXIgW3Nsb3RePVwic2xpZGUtXCJdIC52ZXJzaW9uLXRleHQgYTpob3ZlciB7XG4gICAgICAgICAgY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC44KTtcbiAgICAgICAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7IH1cbiAgI2lvbmljLXNsaWRlciAjc2xpZGUtbGltaXRsZXNzIHtcbiAgICBiYWNrZ3JvdW5kOiAjNTQ4ZmZmIGxpbmVhci1ncmFkaWVudCh0byByaWdodCwgIzQyNzhmZiwgIzY3YTdmZik7XG4gICAgYmFja2dyb3VuZC1zaXplOiAxMDAlOyB9XG4gICAgI2lvbmljLXNsaWRlciAjc2xpZGUtbGltaXRsZXNzIC5idG4ge1xuICAgICAgY29sb3I6ICMzODgwZmY7IH1cbiAgICAjaW9uaWMtc2xpZGVyICNzbGlkZS1saW1pdGxlc3MgdWwge1xuICAgICAgcGFkZGluZzogMDtcbiAgICAgIG1hcmdpbi10b3A6IDhweDtcbiAgICAgIGxpc3Qtc3R5bGU6IG5vbmU7IH1cbiAgICAjaW9uaWMtc2xpZGVyICNzbGlkZS1saW1pdGxlc3MgbGkge1xuICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgICAgbWFyZ2luLXJpZ2h0OiA4cHg7IH1cbiAgICAgICNpb25pYy1zbGlkZXIgI3NsaWRlLWxpbWl0bGVzcyBsaTpsYXN0LWNoaWxkIHtcbiAgICAgICAgbWFyZ2luLXJpZ2h0OiAwOyB9XG4gICAgICAgICNpb25pYy1zbGlkZXIgI3NsaWRlLWxpbWl0bGVzcyBsaTpsYXN0LWNoaWxkIGltZyB7XG4gICAgICAgICAgaGVpZ2h0OiAyM3B4O1xuICAgICAgICAgIHZlcnRpY2FsLWFsaWduOiAtOHB4OyB9XG4gICAgICAjaW9uaWMtc2xpZGVyICNzbGlkZS1saW1pdGxlc3MgbGkgaW1nIHtcbiAgICAgICAgaGVpZ2h0OiAxM3B4O1xuICAgICAgICBvcGFjaXR5OiAuNjsgfVxuICAgICNpb25pYy1zbGlkZXIgI3NsaWRlLWxpbWl0bGVzcyAuZ3JhcGhpY3Mge1xuICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgYm90dG9tOiAwO1xuICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICBsZWZ0OiAwO1xuICAgICAgcGFkZGluZzogMDtcbiAgICAgIG1hcmdpbjogMDsgfVxuICAgICAgI2lvbmljLXNsaWRlciAjc2xpZGUtbGltaXRsZXNzIC5ncmFwaGljcyBsaSB7XG4gICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgb3BhY2l0eTogMDtcbiAgICAgICAgYW5pbWF0aW9uOiBmYWRlSW5VcCAxcyBlYXNlIGZvcndhcmRzOyB9XG4gICAgICAgICNpb25pYy1zbGlkZXIgI3NsaWRlLWxpbWl0bGVzcyAuZ3JhcGhpY3MgbGkuaXBob25lLXgge1xuICAgICAgICAgIGJhY2tncm91bmQ6IHVybChcIi9pbWcvaG9tZXBhZ2UvaGVyby1pcGhvbmUteC5wbmdcIikgMCAwIG5vLXJlcGVhdDtcbiAgICAgICAgICBiYWNrZ3JvdW5kLXNpemU6IDEwMCU7XG4gICAgICAgICAgYm90dG9tOiAtNjNweDtcbiAgICAgICAgICBsZWZ0OiAtMTkxcHg7XG4gICAgICAgICAgd2lkdGg6IDQwMHB4O1xuICAgICAgICAgIGhlaWdodDogMzA2cHg7XG4gICAgICAgICAgYW5pbWF0aW9uLWRlbGF5OiAuOHM7IH1cbiAgICAgICAgI2lvbmljLXNsaWRlciAjc2xpZGUtbGltaXRsZXNzIC5ncmFwaGljcyBsaS5pcGhvbmUteHMtbWF4IHtcbiAgICAgICAgICBiYWNrZ3JvdW5kOiB1cmwoXCIvaW1nL2hvbWVwYWdlL2hlcm8taXBob25lLXhzLW1heC5wbmdcIikgMCAwIG5vLXJlcGVhdDtcbiAgICAgICAgICBiYWNrZ3JvdW5kLXNpemU6IDEwMCU7XG4gICAgICAgICAgYm90dG9tOiAtMzlweDtcbiAgICAgICAgICBsZWZ0OiAxNzBweDtcbiAgICAgICAgICB3aWR0aDogNDkwcHg7XG4gICAgICAgICAgaGVpZ2h0OiAzNzhweDtcbiAgICAgICAgICBhbmltYXRpb24tZGVsYXk6IC45czsgfVxuICAgICAgICAjaW9uaWMtc2xpZGVyICNzbGlkZS1saW1pdGxlc3MgLmdyYXBoaWNzIGxpLnBpeGVsLTMge1xuICAgICAgICAgIGJhY2tncm91bmQ6IHVybChcIi9pbWcvaG9tZXBhZ2UvaGVyby1nb29nbGUtcGl4ZWwzLnBuZ1wiKSAwIDAgbm8tcmVwZWF0O1xuICAgICAgICAgIGJhY2tncm91bmQtc2l6ZTogMTAwJTtcbiAgICAgICAgICBib3R0b206IC00MHB4O1xuICAgICAgICAgIGxlZnQ6IDYwN3B4O1xuICAgICAgICAgIHdpZHRoOiA0OTBweDtcbiAgICAgICAgICBoZWlnaHQ6IDQwMHB4O1xuICAgICAgICAgIGFuaW1hdGlvbi1kZWxheTogMXM7IH1cbiAgICAgICAgI2lvbmljLXNsaWRlciAjc2xpZGUtbGltaXRsZXNzIC5ncmFwaGljcyBsaS5nYWxheHkge1xuICAgICAgICAgIGJhY2tncm91bmQ6IHVybChcIi9pbWcvaG9tZXBhZ2UvaGVyby1hbmRyb2lkLWdhbGF4eS5wbmdcIikgMCAwIG5vLXJlcGVhdDtcbiAgICAgICAgICBiYWNrZ3JvdW5kLXNpemU6IDEwMCU7XG4gICAgICAgICAgYm90dG9tOiAtNDFweDtcbiAgICAgICAgICBsZWZ0OiAxMDYzcHg7XG4gICAgICAgICAgd2lkdGg6IDQ1MHB4O1xuICAgICAgICAgIGhlaWdodDogMzU2cHg7XG4gICAgICAgICAgYW5pbWF0aW9uLWRlbGF5OiAxLjFzOyB9XG4gICAgICAgICNpb25pYy1zbGlkZXIgI3NsaWRlLWxpbWl0bGVzcyAuZ3JhcGhpY3MgbGkuaXBhZCB7XG4gICAgICAgICAgYmFja2dyb3VuZDogdXJsKFwiL2ltZy9ob21lcGFnZS9oZXJvLWlwYWQucG5nXCIpIDAgMCBuby1yZXBlYXQ7XG4gICAgICAgICAgYmFja2dyb3VuZC1zaXplOiAxMDAlO1xuICAgICAgICAgIGJvdHRvbTogLTQ0cHg7XG4gICAgICAgICAgbGVmdDogMTQ4NHB4O1xuICAgICAgICAgIHdpZHRoOiA2MTBweDtcbiAgICAgICAgICBoZWlnaHQ6IDUyNHB4O1xuICAgICAgICAgIGFuaW1hdGlvbi1kZWxheTogMS4yczsgfVxuICAgICAgICAjaW9uaWMtc2xpZGVyICNzbGlkZS1saW1pdGxlc3MgLmdyYXBoaWNzIGxpLm1hY2Jvb2sge1xuICAgICAgICAgIGJhY2tncm91bmQ6IHVybChcIi9pbWcvaG9tZXBhZ2UvaGVyby1tYWNib29rLnBuZ1wiKSAwIDAgbm8tcmVwZWF0O1xuICAgICAgICAgIGJhY2tncm91bmQtc2l6ZTogMTAwJTtcbiAgICAgICAgICBib3R0b206IC02M3B4O1xuICAgICAgICAgIGxlZnQ6IDIwNjFweDtcbiAgICAgICAgICB3aWR0aDogMTQ3MHB4O1xuICAgICAgICAgIGhlaWdodDogNTcwcHg7XG4gICAgICAgICAgYW5pbWF0aW9uLWRlbGF5OiAxLjNzOyB9XG4gICNpb25pYy1zbGlkZXIgI3NsaWRlLXY0IHtcbiAgICBiYWNrZ3JvdW5kOiAjMDEwNTBjOyB9XG4gICAgI2lvbmljLXNsaWRlciAjc2xpZGUtdjQ6OmJlZm9yZSB7XG4gICAgICBiYWNrZ3JvdW5kOiB1cmwoXCIvaW1nL2hvbWVwYWdlL2JnLXBob25lLnBuZ1wiKSBuby1yZXBlYXQgNTAlIDUwJTtcbiAgICAgIGJhY2tncm91bmQtc2l6ZTogY292ZXI7XG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICB0b3A6IDA7XG4gICAgICByaWdodDogMDtcbiAgICAgIGJvdHRvbTogMDtcbiAgICAgIGxlZnQ6IDA7XG4gICAgICBvcGFjaXR5OiAwO1xuICAgICAgY29udGVudDogJyc7IH1cbiAgICAjaW9uaWMtc2xpZGVyICNzbGlkZS12NCBoZ3JvdXAge1xuICAgICAgcGFkZGluZy10b3A6IDU4cHg7XG4gICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICBtYXgtd2lkdGg6IDYyMHB4OyB9XG4gICAgICAjaW9uaWMtc2xpZGVyICNzbGlkZS12NCBoZ3JvdXAgaW1nIHtcbiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgICAgICB3aWR0aDogNDhweDtcbiAgICAgICAgaGVpZ2h0OiA0OHB4OyB9XG4gICAgICAjaW9uaWMtc2xpZGVyICNzbGlkZS12NCBoZ3JvdXAgaDQge1xuICAgICAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xuICAgICAgICBsZXR0ZXItc3BhY2luZzogLjFlbTtcbiAgICAgICAgZm9udC1mYW1pbHk6IFwiUm9ib3RvIE1vbm9cIiwgTWVubG8sIE1vbmFjbywgQ29uc29sYXMsIFwiQ291cmllciBOZXdcIiwgbW9ub3NwYWNlO1xuICAgICAgICBmb250LXNpemU6IDEycHg7XG4gICAgICAgIGZvbnQtd2VpZ2h0OiA0MDA7XG4gICAgICAgIG1hcmdpbi10b3A6IDE1cHg7XG4gICAgICAgIG1hcmdpbi1ib3R0b206IDMzcHg7IH1cbiAgICAgICNpb25pYy1zbGlkZXIgI3NsaWRlLXY0IGhncm91cCBoMSB7XG4gICAgICAgIGxldHRlci1zcGFjaW5nOiAtLjAyZW07IH1cbiAgICAgICNpb25pYy1zbGlkZXIgI3NsaWRlLXY0IGhncm91cCBwIHtcbiAgICAgICAgbGluZS1oZWlnaHQ6IDMycHg7XG4gICAgICAgIG1hcmdpbi10b3A6IDE4cHg7IH1cbiAgICAgICNpb25pYy1zbGlkZXIgI3NsaWRlLXY0IGhncm91cCAuYnRuIHtcbiAgICAgICAgbWFyZ2luLXRvcDogMjdweDtcbiAgICAgICAgbGV0dGVyLXNwYWNpbmc6IC4wOGVtOyB9XG4gICAgICAgICNpb25pYy1zbGlkZXIgI3NsaWRlLXY0IGhncm91cCAuYnRuLndoaXRlIHtcbiAgICAgICAgICBjb2xvcjogIzEzMWEyNjtcbiAgICAgICAgICBtYXJnaW4tcmlnaHQ6IDhweDsgfVxuICAgICAgICAjaW9uaWMtc2xpZGVyICNzbGlkZS12NCBoZ3JvdXAgLmJ0bi5kYXJrIHtcbiAgICAgICAgICBiYWNrZ3JvdW5kOiAjMzQzZDRkOyB9XG4gICAgICAgICAgI2lvbmljLXNsaWRlciAjc2xpZGUtdjQgaGdyb3VwIC5idG4uZGFyazpob3ZlciB7XG4gICAgICAgICAgICBiYWNrZ3JvdW5kOiAjM2U0OTVjOyB9XG4gICAgICAgICNpb25pYy1zbGlkZXIgI3NsaWRlLXY0IGhncm91cCAuYnRuIGlvbi1pY29uIHtcbiAgICAgICAgICB3aWR0aDogMTZweDtcbiAgICAgICAgICBoZWlnaHQ6IDE2cHg7XG4gICAgICAgICAgbWFyZ2luLWxlZnQ6IDhweDsgfVxuICAgICNpb25pYy1zbGlkZXIgI3NsaWRlLXY0IC5mZWF0dXJlcyB7XG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICBib3R0b206IDM1cHg7XG4gICAgICB3aWR0aDogMTAwJTtcbiAgICAgIGxlZnQ6IDA7IH1cbiAgICAgICNpb25pYy1zbGlkZXIgI3NsaWRlLXY0IC5mZWF0dXJlcyB1bCB7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIGp1c3RpZnktY29udGVudDogc3RhcnQ7XG4gICAgICAgIGZsZXgtd3JhcDogd3JhcDtcbiAgICAgICAgcGFkZGluZy1sZWZ0OiAwO1xuICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG4gICAgICAgIHBhZGRpbmc6IDA7IH1cbiAgICAgICAgI2lvbmljLXNsaWRlciAjc2xpZGUtdjQgLmZlYXR1cmVzIHVsIGxpIHtcbiAgICAgICAgICBtYXJnaW4tcmlnaHQ6IDFlbTtcbiAgICAgICAgICBsaXN0LXN0eWxlOiBub25lOyB9XG4gICAgICAgICNpb25pYy1zbGlkZXIgI3NsaWRlLXY0IC5mZWF0dXJlcyB1bDo6YmVmb3JlLCAjaW9uaWMtc2xpZGVyICNzbGlkZS12NCAuZmVhdHVyZXMgdWw6OmFmdGVyIHtcbiAgICAgICAgICBkaXNwbGF5OiBub25lOyB9XG4gICAgICAjaW9uaWMtc2xpZGVyICNzbGlkZS12NCAuZmVhdHVyZXMgbGkge1xuICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICAgIHBhZGRpbmctdG9wOiA2NXB4O1xuICAgICAgICB3aWR0aDogMTQ1cHg7XG4gICAgICAgIGNvbG9yOiAjOGE5NGEzO1xuICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xuICAgICAgICBmb250LXNpemU6IDEycHg7XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAyMHB4O1xuICAgICAgICBtYXJnaW4tYm90dG9tOiAzMnB4O1xuICAgICAgICBvcGFjaXR5OiAwOyB9XG4gICAgICAgICNpb25pYy1zbGlkZXIgI3NsaWRlLXY0IC5mZWF0dXJlcyBsaTo6YmVmb3JlIHtcbiAgICAgICAgICBiYWNrZ3JvdW5kOiB1cmwoXCIvaW1nL2hvbWVwYWdlL3Y0LWZlYXR1cmUtaWNvbnMucG5nXCIpIDAgMCBuby1yZXBlYXQ7XG4gICAgICAgICAgYmFja2dyb3VuZC1zaXplOiBjb3ZlcjtcbiAgICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgICAgdG9wOiAwO1xuICAgICAgICAgIGxlZnQ6IGNhbGMoNTAlIC0gMjRweCk7XG4gICAgICAgICAgaGVpZ2h0OiA0OHB4O1xuICAgICAgICAgIHdpZHRoOiA0OHB4O1xuICAgICAgICAgIGNvbnRlbnQ6ICcnOyB9XG4gICAgICAgICNpb25pYy1zbGlkZXIgI3NsaWRlLXY0IC5mZWF0dXJlcyBsaS5wZXJmb3JtYW5jZTo6YmVmb3JlIHtcbiAgICAgICAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwIDBweDsgfVxuICAgICAgICAjaW9uaWMtc2xpZGVyICNzbGlkZS12NCAuZmVhdHVyZXMgbGkudGhlbWluZzo6YmVmb3JlIHtcbiAgICAgICAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwIC00OHB4OyB9XG4gICAgICAgICNpb25pYy1zbGlkZXIgI3NsaWRlLXY0IC5mZWF0dXJlcyBsaS5zdGFuZGFyZHM6OmJlZm9yZSB7XG4gICAgICAgICAgYmFja2dyb3VuZC1wb3NpdGlvbjogMCAtOTZweDsgfVxuICAgICAgICAjaW9uaWMtc2xpZGVyICNzbGlkZS12NCAuZmVhdHVyZXMgbGkuY29tcGF0aWJsZTo6YmVmb3JlIHtcbiAgICAgICAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwIC0xNDRweDsgfVxuICAgICAgICAjaW9uaWMtc2xpZGVyICNzbGlkZS12NCAuZmVhdHVyZXMgbGkuZG9jczo6YmVmb3JlIHtcbiAgICAgICAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwIC0xOTJweDsgfVxuICAgICAgQG1lZGlhIChtYXgtd2lkdGg6IDk5MXB4KSB7XG4gICAgICAgICNpb25pYy1zbGlkZXIgI3NsaWRlLXY0IC5mZWF0dXJlcyB7XG4gICAgICAgICAgYm90dG9tOiAwOyB9XG4gICAgICAgICAgI2lvbmljLXNsaWRlciAjc2xpZGUtdjQgLmZlYXR1cmVzIHVsIHtcbiAgICAgICAgICAgIG1heC13aWR0aDogNjAwcHg7XG4gICAgICAgICAgICBtYXJnaW46IDAgYXV0bztcbiAgICAgICAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYXJvdW5kOyB9IH1cbiAgICAgIEBtZWRpYSAobWF4LXdpZHRoOiA1NzBweCkge1xuICAgICAgICAjaW9uaWMtc2xpZGVyICNzbGlkZS12NCAuZmVhdHVyZXMge1xuICAgICAgICAgIGRpc3BsYXk6IG5vbmU7IH0gfVxuICAgICNpb25pYy1zbGlkZXIgI3NsaWRlLXY0OjpiZWZvcmUge1xuICAgICAgYW5pbWF0aW9uOiBmYWRlSW5VcCAxLjZzIC44cyBlYXNlIGZvcndhcmRzOyB9XG4gICAgI2lvbmljLXNsaWRlciAjc2xpZGUtdjQgLmZlYXR1cmVzIGxpIHtcbiAgICAgIGFuaW1hdGlvbjogZmFkZUluVXAgMXMgLjFzIGVhc2UgZm9yd2FyZHM7IH1cbiAgICAgICNpb25pYy1zbGlkZXIgI3NsaWRlLXY0IC5mZWF0dXJlcyBsaTpudGgtY2hpbGQoMikge1xuICAgICAgICBhbmltYXRpb24tZGVsYXk6IC4yczsgfVxuICAgICAgI2lvbmljLXNsaWRlciAjc2xpZGUtdjQgLmZlYXR1cmVzIGxpOm50aC1jaGlsZCgzKSB7XG4gICAgICAgIGFuaW1hdGlvbi1kZWxheTogLjNzOyB9XG4gICAgICAjaW9uaWMtc2xpZGVyICNzbGlkZS12NCAuZmVhdHVyZXMgbGk6bnRoLWNoaWxkKDQpIHtcbiAgICAgICAgYW5pbWF0aW9uLWRlbGF5OiAuNHM7IH1cbiAgICAgICNpb25pYy1zbGlkZXIgI3NsaWRlLXY0IC5mZWF0dXJlcyBsaTpudGgtY2hpbGQoNSkge1xuICAgICAgICBhbmltYXRpb24tZGVsYXk6IC41czsgfVxuICAjaW9uaWMtc2xpZGVyICNzbGlkZS1vbmUtYW55IHtcbiAgICBiYWNrZ3JvdW5kOiB3aGl0ZTtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgbWluLWhlaWdodDogODQwcHg7IH1cbiAgICAjaW9uaWMtc2xpZGVyICNzbGlkZS1vbmUtYW55IC5ub3RpZmljYXRpb24ge1xuICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgICAgYmFja2dyb3VuZDogI0Y2RjhGQjtcbiAgICAgIGZvbnQtc2l6ZTogMTFweDtcbiAgICAgIGxpbmUtaGVpZ2h0OiAxNnB4O1xuICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgICAgbGV0dGVyLXNwYWNpbmc6IDAuMWVtO1xuICAgICAgcGFkZGluZzogN3B4IDE1cHggN3B4OyB9XG4gICAgICAjaW9uaWMtc2xpZGVyICNzbGlkZS1vbmUtYW55IC5ub3RpZmljYXRpb24gc3Ryb25nIHtcbiAgICAgICAgY29sb3I6ICMxQTIzMkY7IH1cbiAgICAgICNpb25pYy1zbGlkZXIgI3NsaWRlLW9uZS1hbnkgLm5vdGlmaWNhdGlvbjo6YWZ0ZXIge1xuICAgICAgICBjb250ZW50OiAnPic7IH1cbiAgICAgIEBtZWRpYSAobWF4LXdpZHRoOiA3NjdweCkge1xuICAgICAgICAjaW9uaWMtc2xpZGVyICNzbGlkZS1vbmUtYW55IC5ub3RpZmljYXRpb24ge1xuICAgICAgICAgIGRpc3BsYXk6IG5vbmU7IH0gfVxuICAgICNpb25pYy1zbGlkZXIgI3NsaWRlLW9uZS1hbnkgaGdyb3VwIHtcbiAgICAgIG1heC13aWR0aDogNDY0cHg7XG4gICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgIG1hcmdpbi10b3A6IDU2cHg7XG4gICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICB6LWluZGV4OiAxOyB9XG4gICAgICAjaW9uaWMtc2xpZGVyICNzbGlkZS1vbmUtYW55IGhncm91cCBoMSB7XG4gICAgICAgIGZvbnQtc2l6ZTogNjRweDtcbiAgICAgICAgbGluZS1oZWlnaHQ6IDY0cHg7XG4gICAgICAgIGNvbG9yOiAjMDIwODE0O1xuICAgICAgICBsZXR0ZXItc3BhY2luZzogLS4wNGVtO1xuICAgICAgICBtYXJnaW4tYm90dG9tOiA3cHg7IH1cbiAgICAgICNpb25pYy1zbGlkZXIgI3NsaWRlLW9uZS1hbnkgaGdyb3VwIHAge1xuICAgICAgICBmb250LXNpemU6IDIycHg7XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAzN3B4O1xuICAgICAgICBjb2xvcjogcmdiYSg5MSwgMTEyLCAxMzksIDAuOSk7XG4gICAgICAgIGxldHRlci1zcGFjaW5nOiAtLjA0ZW07IH1cbiAgICAgICNpb25pYy1zbGlkZXIgI3NsaWRlLW9uZS1hbnkgaGdyb3VwIC5idG4ge1xuICAgICAgICBiYWNrZ3JvdW5kOiAjNEQ4REZGO1xuICAgICAgICBib3JkZXItcmFkaXVzOiAxMHB4O1xuICAgICAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xuICAgICAgICBtYXJnaW4tdG9wOiAxMnB4O1xuICAgICAgICBmb250LXNpemU6IDE1cHg7XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAyMXB4O1xuICAgICAgICBwYWRkaW5nOiAxNnB4IDE2cHggMTJweDtcbiAgICAgICAgbGV0dGVyLXNwYWNpbmc6IDAuMDhlbTsgfVxuICAgICAgICAjaW9uaWMtc2xpZGVyICNzbGlkZS1vbmUtYW55IGhncm91cCAuYnRuOmhvdmVyIHtcbiAgICAgICAgICBiYWNrZ3JvdW5kOiAjNjc5ZGZmOyB9XG4gICAgICAgICNpb25pYy1zbGlkZXIgI3NsaWRlLW9uZS1hbnkgaGdyb3VwIC5idG46YWN0aXZlIHtcbiAgICAgICAgICBiYWNrZ3JvdW5kOiAjNEQ4REZGOyB9XG4gICAgICAgICNpb25pYy1zbGlkZXIgI3NsaWRlLW9uZS1hbnkgaGdyb3VwIC5idG4gaW1nIHtcbiAgICAgICAgICBtYXJnaW4tbGVmdDogMnB4O1xuICAgICAgICAgIHZlcnRpY2FsLWFsaWduOiAwO1xuICAgICAgICAgIG1hcmdpbi1yaWdodDogMnB4OyB9XG4gICAgICAjaW9uaWMtc2xpZGVyICNzbGlkZS1vbmUtYW55IGhncm91cCBzbWFsbCB7XG4gICAgICAgIGZvbnQtc2l6ZTogMTFweDtcbiAgICAgICAgbGluZS1oZWlnaHQ6IDIxcHg7XG4gICAgICAgIGxldHRlci1zcGFjaW5nOiAtMC4wMmVtO1xuICAgICAgICBjb2xvcjogI0IyQkVDRDsgfVxuICAgICAgICAjaW9uaWMtc2xpZGVyICNzbGlkZS1vbmUtYW55IGhncm91cCBzbWFsbCBhIHtcbiAgICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICAgICAgY29sb3I6ICM5MmEwYjM7IH1cbiAgICAgICAgICAjaW9uaWMtc2xpZGVyICNzbGlkZS1vbmUtYW55IGhncm91cCBzbWFsbCBhOjphZnRlciB7XG4gICAgICAgICAgICBjb250ZW50OiAnJztcbiAgICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgICAgIGxlZnQ6IDA7XG4gICAgICAgICAgICByaWdodDogMDtcbiAgICAgICAgICAgIGJvdHRvbTogLTJweDtcbiAgICAgICAgICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjZGVlM2VhOyB9XG4gICAgICAgICAgI2lvbmljLXNsaWRlciAjc2xpZGUtb25lLWFueSBoZ3JvdXAgc21hbGwgYTpob3ZlciB7XG4gICAgICAgICAgICBjb2xvcjogIzRhOGJmYzsgfVxuICAgICAgICAgICAgI2lvbmljLXNsaWRlciAjc2xpZGUtb25lLWFueSBoZ3JvdXAgc21hbGwgYTpob3Zlcjo6YWZ0ZXIge1xuICAgICAgICAgICAgICBib3JkZXItYm90dG9tLWNvbG9yOiAjNGE4YmZjOyB9XG4gICAgICBAbWVkaWEgKG1heC13aWR0aDogNzY3cHgpIHtcbiAgICAgICAgI2lvbmljLXNsaWRlciAjc2xpZGUtb25lLWFueSBoZ3JvdXAge1xuICAgICAgICAgIG1heC13aWR0aDogMTAwJTtcbiAgICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgICAgICAgbWFyZ2luLXRvcDogNjRweDsgfSB9XG4gICAgI2lvbmljLXNsaWRlciAjc2xpZGUtb25lLWFueSAuZ3JhcGhpYyB7XG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICByaWdodDogMjBweDtcbiAgICAgIHRvcDogMTIwcHg7XG4gICAgICBoZWlnaHQ6IDU2M3B4O1xuICAgICAgd2lkdGg6IDU5MHB4OyB9XG4gICAgICBAbWVkaWEgKG1heC13aWR0aDogMTIxOXB4KSB7XG4gICAgICAgICNpb25pYy1zbGlkZXIgI3NsaWRlLW9uZS1hbnkgLmdyYXBoaWMge1xuICAgICAgICAgIHRvcDogMTI4cHg7XG4gICAgICAgICAgcmlnaHQ6IC02NHB4OyB9IH1cbiAgICAgIEBtZWRpYSAobWF4LXdpZHRoOiA5OTFweCkge1xuICAgICAgICAjaW9uaWMtc2xpZGVyICNzbGlkZS1vbmUtYW55IC5ncmFwaGljIHtcbiAgICAgICAgICB3aWR0aDogMzAycHg7XG4gICAgICAgICAgaGVpZ2h0OiBhdXRvO1xuICAgICAgICAgIHRvcDogMTgwcHg7IH0gfVxuICAgICAgQG1lZGlhIChtYXgtd2lkdGg6IDc2N3B4KSB7XG4gICAgICAgICNpb25pYy1zbGlkZXIgI3NsaWRlLW9uZS1hbnkgLmdyYXBoaWMge1xuICAgICAgICAgIGRpc3BsYXk6IG5vbmU7IH0gfVxuICAgICNpb25pYy1zbGlkZXIgI3NsaWRlLW9uZS1hbnkgLnN0YXRzIHtcbiAgICAgIHBhZGRpbmc6IDA7XG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICBib3R0b206IDIxcHg7XG4gICAgICBsZWZ0OiAwO1xuICAgICAgbGlzdC1zdHlsZTogbm9uZTtcbiAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICBmbGV4LXdyYXA6IHdyYXA7IH1cbiAgICAgICNpb25pYy1zbGlkZXIgI3NsaWRlLW9uZS1hbnkgLnN0YXRzIGEge1xuICAgICAgICBmb250LXNpemU6IDE0cHg7XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxN3B4O1xuICAgICAgICBsZXR0ZXItc3BhY2luZzogLTAuMDJlbTtcbiAgICAgICAgY29sb3I6ICM5MkExQjM7XG4gICAgICAgIHBhZGRpbmc6IDAgMThweDtcbiAgICAgICAgdHJhbnNpdGlvbjogLjNzIGNvbG9yOyB9XG4gICAgICAgICNpb25pYy1zbGlkZXIgI3NsaWRlLW9uZS1hbnkgLnN0YXRzIGEgc3ZnIHtcbiAgICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogLTNweDsgfVxuICAgICAgICAgICNpb25pYy1zbGlkZXIgI3NsaWRlLW9uZS1hbnkgLnN0YXRzIGEgc3ZnIHBhdGgge1xuICAgICAgICAgICAgdHJhbnNpdGlvbjogLjNzIGZpbGw7IH1cbiAgICAgICAgI2lvbmljLXNsaWRlciAjc2xpZGUtb25lLWFueSAuc3RhdHMgYTpob3ZlciB7XG4gICAgICAgICAgY29sb3I6ICM3NDg3OWU7IH1cbiAgICAgICAgICAjaW9uaWMtc2xpZGVyICNzbGlkZS1vbmUtYW55IC5zdGF0cyBhOmhvdmVyIHN2ZyBwYXRoIHtcbiAgICAgICAgICAgIGZpbGw6ICM3NDg3OWU7IH1cbiAgICAgIEBtZWRpYSAobWF4LXdpZHRoOiA3NjdweCkge1xuICAgICAgICAjaW9uaWMtc2xpZGVyICNzbGlkZS1vbmUtYW55IC5zdGF0cyB7XG4gICAgICAgICAgbGVmdDogY2FsYyg1MCUgLSAxNDBweCk7IH0gfVxuICAgICNpb25pYy1zbGlkZXIgI3NsaWRlLW9uZS1hbnkgaW9uaWMtbmV3c2xldHRlci1zaWdudXAge1xuICAgICAgd2lkdGg6IDQwMHB4O1xuICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgYm90dG9tOiAyOXB4O1xuICAgICAgcmlnaHQ6IDIwcHg7XG4gICAgICBtYXgtd2lkdGg6IGNhbGMoMTAwJSAtIDMwcHgpOyB9XG4gICAgICBAbWVkaWEgKG1heC13aWR0aDogNzY3cHgpIHtcbiAgICAgICAgI2lvbmljLXNsaWRlciAjc2xpZGUtb25lLWFueSBpb25pYy1uZXdzbGV0dGVyLXNpZ251cCB7XG4gICAgICAgICAgYm90dG9tOiAtMjZweDtcbiAgICAgICAgICByaWdodDogYXV0bztcbiAgICAgICAgICBsZWZ0OiBjYWxjKDUwJSAtIDIwMHB4KTsgfSB9XG4gICAgICBAbWVkaWEgKG1heC13aWR0aDogNDYwcHgpIHtcbiAgICAgICAgI2lvbmljLXNsaWRlciAjc2xpZGUtb25lLWFueSBpb25pYy1uZXdzbGV0dGVyLXNpZ251cCB7XG4gICAgICAgICAgbGVmdDogMTVweDsgfSB9XG4gICAgQG1lZGlhIChtYXgtd2lkdGg6IDk5MXB4KSB7XG4gICAgICAjaW9uaWMtc2xpZGVyICNzbGlkZS1vbmUtYW55IHtcbiAgICAgICAgcGFkZGluZy10b3A6IDEwMHB4O1xuICAgICAgICBwYWRkaW5nLWJvdHRvbTogMTAwcHg7XG4gICAgICAgIG1pbi1oZWlnaHQ6IDA7IH0gfVxuICAgIEBtZWRpYSAobWF4LXdpZHRoOiA3NjdweCkge1xuICAgICAgI2lvbmljLXNsaWRlciAjc2xpZGUtb25lLWFueSB7XG4gICAgICAgIHBhZGRpbmctdG9wOiAxMDBweDtcbiAgICAgICAgcGFkZGluZy1ib3R0b206IDEwMHB4O1xuICAgICAgICBtaW4taGVpZ2h0OiAwOyB9IH1cbiAgQG1lZGlhIChtYXgtd2lkdGg6IDk5MXB4KSB7XG4gICAgI2lvbmljLXNsaWRlciB7XG4gICAgICBtaW4taGVpZ2h0OiAwOyB9IH1cblxuI3BhZ2UtaG9tZSAjdXNlZC1ieSB7XG4gIGJvcmRlci10b3A6IDFweCAjRUZGM0Y4IHNvbGlkO1xuICBwYWRkaW5nLXRvcDogNjBweDtcbiAgcGFkZGluZy1ib3R0b206IDU4cHg7XG4gIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjRUZGM0Y4OyB9XG4gICNwYWdlLWhvbWUgI3VzZWQtYnkgLmNvbnRhaW5lciB7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgbWF4LXdpZHRoOiA5NTBweDsgfVxuICAgIEBtZWRpYSAobWF4LXdpZHRoOiA5OTFweCkge1xuICAgICAgI3BhZ2UtaG9tZSAjdXNlZC1ieSAuY29udGFpbmVyIHtcbiAgICAgICAgd2lkdGg6IDEwMCU7IH0gfVxuICBAbWVkaWEgKG1heC13aWR0aDogOTkxcHgpIHtcbiAgICAjcGFnZS1ob21lICN1c2VkLWJ5IHtcbiAgICAgIGRpc3BsYXk6IG5vbmU7IH0gfVxuXG4jcGFnZS1ob21lIHNlY3Rpb24ge1xuICBwYWRkaW5nLXRvcDogMTcwcHg7XG4gIGxpbmUtaGVpZ2h0OiAxLjc1ZW07XG4gIHBhZGRpbmctYm90dG9tOiAxNzBweDtcbiAgcG9zaXRpb246IHJlbGF0aXZlOyB9XG4gICNwYWdlLWhvbWUgc2VjdGlvbi5jZW50ZXIge1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjsgfVxuICAjcGFnZS1ob21lIHNlY3Rpb24ubGVmdCwgI3BhZ2UtaG9tZSBzZWN0aW9uLnJpZ2h0IHtcbiAgICBkaXNwbGF5OiBmbGV4OyB9XG4gICAgI3BhZ2UtaG9tZSBzZWN0aW9uLmxlZnQgLmNvbnRlbnQsICNwYWdlLWhvbWUgc2VjdGlvbi5yaWdodCAuY29udGVudCB7XG4gICAgICB3aWR0aDogNDcwcHg7IH1cbiAgI3BhZ2UtaG9tZSBzZWN0aW9uLnJpZ2h0IC5jb250ZW50IHtcbiAgICBtYXJnaW4tbGVmdDogYXV0bzsgfVxuICAjcGFnZS1ob21lIHNlY3Rpb24gaDIge1xuICAgIGZvbnQtc2l6ZTogNDdweDtcbiAgICBtYXJnaW4tYm90dG9tOiAxNXB4O1xuICAgIGxldHRlci1zcGFjaW5nOiAtLjAyZW07XG4gICAgY29sb3I6ICMwZDEyMWM7IH1cbiAgI3BhZ2UtaG9tZSBzZWN0aW9uIGgzIHtcbiAgICBmb250LXNpemU6IDM1cHg7XG4gICAgbGV0dGVyLXNwYWNpbmc6IC0wLjAxNmVtOyB9XG4gICNwYWdlLWhvbWUgc2VjdGlvbiBoNCB7XG4gICAgZm9udC1zaXplOiAxMnB4O1xuICAgIGNvbG9yOiAjODA4ZmE3O1xuICAgIGxldHRlci1zcGFjaW5nOiAuMTRlbTtcbiAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xuICAgIGZvbnQtZmFtaWx5OiBcIlJvYm90byBNb25vXCIsIE1lbmxvLCBNb25hY28sIENvbnNvbGFzLCBcIkNvdXJpZXIgTmV3XCIsIG1vbm9zcGFjZTsgfVxuICAgICNwYWdlLWhvbWUgc2VjdGlvbiBoNCArIGgyIHtcbiAgICAgIG1hcmdpbi10b3A6IDM2cHg7IH1cbiAgI3BhZ2UtaG9tZSBzZWN0aW9uIGg1IHtcbiAgICBmb250LXNpemU6IDIwcHg7XG4gICAgbWFyZ2luLWJvdHRvbTogMTZweDtcbiAgICBmb250LXdlaWdodDogNjAwOyB9XG4gICNwYWdlLWhvbWUgc2VjdGlvbiBwIHtcbiAgICBmb250LXNpemU6IDE2cHg7XG4gICAgY29sb3I6ICM4YzliYjk7XG4gICAgbWFyZ2luLWJvdHRvbTogOHB4O1xuICAgIGxpbmUtaGVpZ2h0OiAxLjc4ZW07XG4gICAgbGV0dGVyLXNwYWNpbmc6IC0uMDI4ZW07IH1cbiAgI3BhZ2UtaG9tZSBzZWN0aW9uIGhncm91cCBwLFxuICAjcGFnZS1ob21lIHNlY3Rpb24gcC5sZyB7XG4gICAgY29sb3I6ICM1OTZhODk7XG4gICAgZm9udC1zaXplOiAyMnB4O1xuICAgIGxpbmUtaGVpZ2h0OiAzNnB4O1xuICAgIG1hcmdpbi1ib3R0b206IDIzcHg7XG4gICAgbGV0dGVyLXNwYWNpbmc6IC0uMDJlbTtcbiAgICBmb250LWZhbWlseTogXCJFaW5hXCIsIFwiSGVsdmV0aWNhIE5ldWVcIiwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmOyB9XG4gICAgI3BhZ2UtaG9tZSBzZWN0aW9uIGhncm91cCBwIHN0cm9uZyxcbiAgICAjcGFnZS1ob21lIHNlY3Rpb24gcC5sZyBzdHJvbmcge1xuICAgICAgZm9udC13ZWlnaHQ6IDYwMDsgfVxuICAjcGFnZS1ob21lIHNlY3Rpb24gLmN0YSB7XG4gICAgZm9udC1zaXplOiAyMHB4O1xuICAgIG1hcmdpbi10b3A6IDExcHg7XG4gICAgcGFkZGluZy10b3A6IDA7XG4gICAgY29sb3I6ICM1YTk4ZmY7XG4gICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICBiYWNrZ3JvdW5kOiBub25lO1xuICAgIGxldHRlci1zcGFjaW5nOiAtLjAyZW07XG4gICAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgICBmb250LWZhbWlseTogXCJFaW5hXCIsIFwiSGVsdmV0aWNhIE5ldWVcIiwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmO1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICB0cmFuc2l0aW9uOiAuM3Mgb3BhY2l0eTsgfVxuICAgICNwYWdlLWhvbWUgc2VjdGlvbiAuY3RhOmhvdmVyIHtcbiAgICAgIG9wYWNpdHk6IC42OyB9XG4gICAgI3BhZ2UtaG9tZSBzZWN0aW9uIC5jdGE6aG92ZXIsICNwYWdlLWhvbWUgc2VjdGlvbiAuY3RhOmFjdGl2ZSwgI3BhZ2UtaG9tZSBzZWN0aW9uIC5jdGE6Zm9jdXMge1xuICAgICAgdGV4dC1kZWNvcmF0aW9uOiBub25lOyB9XG4gICAgI3BhZ2UtaG9tZSBzZWN0aW9uIC5jdGE6OmFmdGVyIHtcbiAgICAgIGNvbnRlbnQ6ICcnO1xuICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgYm90dG9tOiAtMXB4O1xuICAgICAgbGVmdDogMDtcbiAgICAgIHJpZ2h0OiAwO1xuICAgICAgYm9yZGVyLWJvdHRvbTogMnB4IHNvbGlkICNkYmU2ZmY7XG4gICAgICBib3JkZXItcmFkaXVzOiAycHg7IH1cbiAgQG1lZGlhIChtYXgtd2lkdGg6IDk5MXB4KSB7XG4gICAgI3BhZ2UtaG9tZSBzZWN0aW9uIC5jb250ZW50IHtcbiAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgdGV4dC1hbGlnbjogY2VudGVyOyB9IH1cblxuI3BhZ2UtaG9tZSAjZm9yLWRldnMge1xuICBwYWRkaW5nLWJvdHRvbTogODdweDsgfVxuICAjcGFnZS1ob21lICNmb3ItZGV2cyBoZ3JvdXAge1xuICAgIG1heC13aWR0aDogNzQwcHg7IH1cbiAgI3BhZ2UtaG9tZSAjZm9yLWRldnMgdWwge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgZmxleC13cmFwOiB3cmFwO1xuICAgIG1hcmdpbi10b3A6IDQ2cHg7XG4gICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1hcm91bmQ7XG4gICAgbWF4LXdpZHRoOiAxMDY0cHg7XG4gICAgZm9udC1mYW1pbHk6IFwiRWluYVwiLCBcIkhlbHZldGljYSBOZXVlXCIsIEhlbHZldGljYSwgc2Fucy1zZXJpZjsgfVxuICAgICNwYWdlLWhvbWUgI2Zvci1kZXZzIHVsOjpiZWZvcmUsICNwYWdlLWhvbWUgI2Zvci1kZXZzIHVsOjphZnRlciB7XG4gICAgICBkaXNwbGF5OiBub25lOyB9XG4gICNwYWdlLWhvbWUgI2Zvci1kZXZzIGxpIHtcbiAgICBsaXN0LXN0eWxlOiBub25lOyB9XG4gICAgI3BhZ2UtaG9tZSAjZm9yLWRldnMgbGkgYSB7XG4gICAgICBjb2xvcjogIzc5OGZiODtcbiAgICAgIGZvbnQtd2VpZ2h0OiA3MDA7XG4gICAgICBwYWRkaW5nLXRvcDogNzNweDtcbiAgICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XG4gICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICB3aWR0aDogMTMwcHg7XG4gICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgIGxldHRlci1zcGFjaW5nOiAuMDhlbTtcbiAgICAgIHRyYW5zaXRpb246IC4ycyBjb2xvcjtcbiAgICAgIGZvbnQtc2l6ZTogMTNweDsgfVxuICAgICAgI3BhZ2UtaG9tZSAjZm9yLWRldnMgbGkgYTo6YmVmb3JlLCAjcGFnZS1ob21lICNmb3ItZGV2cyBsaSBhOjphZnRlciB7XG4gICAgICAgIGJhY2tncm91bmQ6IHVybChcIi9pbWcvaG9tZXBhZ2Uvb2ZmZXJpbmctaWNvbnMucG5nXCIpIDAgMCBuby1yZXBlYXQ7XG4gICAgICAgIGJhY2tncm91bmQtc2l6ZTogNTZweDtcbiAgICAgICAgaGVpZ2h0OiA1NnB4O1xuICAgICAgICB3aWR0aDogNTZweDtcbiAgICAgICAgY29udGVudDogJyc7XG4gICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgdG9wOiAwO1xuICAgICAgICBsZWZ0OiBjYWxjKDUwJSAtIDI4cHgpOyB9XG4gICAgICAjcGFnZS1ob21lICNmb3ItZGV2cyBsaSBhOmhvdmVyIHtcbiAgICAgICAgY29sb3I6ICM0YThiZmM7IH1cbiAgICAgIEBtZWRpYSAobWF4LXdpZHRoOiA1NjBweCkge1xuICAgICAgICAjcGFnZS1ob21lICNmb3ItZGV2cyBsaSBhIHtcbiAgICAgICAgICBsaW5lLWhlaWdodDogMS42ZW07XG4gICAgICAgICAgbWFyZ2luLWJvdHRvbTogNDhweDsgfSB9XG4gICAgI3BhZ2UtaG9tZSAjZm9yLWRldnMgbGkgYTo6YmVmb3JlLFxuICAgICNwYWdlLWhvbWUgI2Zvci1kZXZzIGxpIGE6OmFmdGVyIHtcbiAgICAgIHRyYW5zaXRpb246IC4ycyBvcGFjaXR5OyB9XG4gICAgI3BhZ2UtaG9tZSAjZm9yLWRldnMgbGkgYTo6YWZ0ZXIge1xuICAgICAgb3BhY2l0eTogMDsgfVxuICAgICNwYWdlLWhvbWUgI2Zvci1kZXZzIGxpOmhvdmVyIGE6OmFmdGVyIHtcbiAgICAgIG9wYWNpdHk6IDE7IH1cbiAgICAjcGFnZS1ob21lICNmb3ItZGV2cyBsaS5vc3MgYTo6YmVmb3JlIHtcbiAgICAgIGJhY2tncm91bmQtcG9zaXRpb246IDAgMHB4OyB9XG4gICAgI3BhZ2UtaG9tZSAjZm9yLWRldnMgbGkub3NzIGE6OmFmdGVyIHtcbiAgICAgIGJhY2tncm91bmQtcG9zaXRpb246IDAgLTU2cHg7IH1cbiAgICAjcGFnZS1ob21lICNmb3ItZGV2cyBsaS5kZXZvcHMgYTo6YmVmb3JlIHtcbiAgICAgIGJhY2tncm91bmQtcG9zaXRpb246IDAgLTExMnB4OyB9XG4gICAgI3BhZ2UtaG9tZSAjZm9yLWRldnMgbGkuZGV2b3BzIGE6OmFmdGVyIHtcbiAgICAgIGJhY2tncm91bmQtcG9zaXRpb246IDAgLTE2OHB4OyB9XG4gICAgI3BhZ2UtaG9tZSAjZm9yLWRldnMgbGkuaWRlIGE6OmJlZm9yZSB7XG4gICAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwIC0yMjRweDsgfVxuICAgICNwYWdlLWhvbWUgI2Zvci1kZXZzIGxpLmlkZSBhOjphZnRlciB7XG4gICAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwIC0yODBweDsgfVxuICAgICNwYWdlLWhvbWUgI2Zvci1kZXZzIGxpLmludGVncmF0aW9uIGE6OmJlZm9yZSB7XG4gICAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwIC0zMzZweDsgfVxuICAgICNwYWdlLWhvbWUgI2Zvci1kZXZzIGxpLmludGVncmF0aW9uIGE6OmFmdGVyIHtcbiAgICAgIGJhY2tncm91bmQtcG9zaXRpb246IDAgLTM5MnB4OyB9XG5cbiNwYWdlLWhvbWUgI29zcyB7XG4gIHBhZGRpbmctdG9wOiAxNzZweDtcbiAgcGFkZGluZy1ib3R0b206IDQwMHB4O1xuICBtYXJnaW4tdG9wOiAxMDBweDsgfVxuICAjcGFnZS1ob21lICNvc3MgLmZyYW1ld29ya3Mge1xuICAgIG1hcmdpbi1ib3R0b206IDMzcHg7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IHN0YXJ0O1xuICAgIGZsZXgtd3JhcDogd3JhcDtcbiAgICBwYWRkaW5nLWxlZnQ6IDA7IH1cbiAgICAjcGFnZS1ob21lICNvc3MgLmZyYW1ld29ya3MgbGkge1xuICAgICAgbWFyZ2luLXJpZ2h0OiAxZW07XG4gICAgICBsaXN0LXN0eWxlOiBub25lOyB9XG4gICAgI3BhZ2UtaG9tZSAjb3NzIC5mcmFtZXdvcmtzIGxpIHtcbiAgICAgIGhlaWdodDogMzJweDtcbiAgICAgIHdpZHRoOiAzMnB4O1xuICAgICAgYmFja2dyb3VuZC1zaXplOiAxMDAlO1xuICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgICAgbWFyZ2luLXJpZ2h0OiAxMnB4OyB9XG4gICAgICAjcGFnZS1ob21lICNvc3MgLmZyYW1ld29ya3MgbGkuZnJhbWV3b3Jrc19fYW5ndWxhciB7XG4gICAgICAgIGJhY2tncm91bmQtaW1hZ2U6IHVybChcIi9pbWcvaG9tZXBhZ2UvZnJhbWV3b3JrLXN1cHBvcnQtYW5ndWxhci5wbmdcIik7IH1cbiAgICAgICNwYWdlLWhvbWUgI29zcyAuZnJhbWV3b3JrcyBsaS5mcmFtZXdvcmtzX19yZWFjdCB7XG4gICAgICAgIGJhY2tncm91bmQtaW1hZ2U6IHVybChcIi9pbWcvaG9tZXBhZ2UvZnJhbWV3b3JrLXN1cHBvcnQtcmVhY3QucG5nXCIpOyB9XG4gICAgICAjcGFnZS1ob21lICNvc3MgLmZyYW1ld29ya3MgbGkuZnJhbWV3b3Jrc19fdnVlIHtcbiAgICAgICAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFwiL2ltZy9ob21lcGFnZS9mcmFtZXdvcmstc3VwcG9ydC12dWUucG5nXCIpOyB9XG4gICAgICAjcGFnZS1ob21lICNvc3MgLmZyYW1ld29ya3MgbGkuZnJhbWV3b3Jrc19fanMge1xuICAgICAgICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXCIvaW1nL2hvbWVwYWdlL2ZyYW1ld29yay1zdXBwb3J0LWphdmFzY3JpcHQucG5nXCIpOyB9XG4gICNwYWdlLWhvbWUgI29zcyAuZ3JhcGhpY3Mge1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICB0b3A6IDI1cHg7XG4gICAgcmlnaHQ6IDE1cHg7XG4gICAgaGVpZ2h0OiA1MDBweDsgfVxuICAgICNwYWdlLWhvbWUgI29zcyAuZ3JhcGhpY3MuYWN0aXZlOjpiZWZvcmUsICNwYWdlLWhvbWUgI29zcyAuZ3JhcGhpY3MuYWN0aXZlOjphZnRlciB7XG4gICAgICBhbmltYXRpb246IGZhZGVJblVwIDFzIC44cyBlYXNlIGZvcndhcmRzOyB9XG4gICAgI3BhZ2UtaG9tZSAjb3NzIC5ncmFwaGljcy5hY3RpdmU6OmFmdGVyIHtcbiAgICAgIGFuaW1hdGlvbi1kZWxheTogLjRzOyB9XG4gICAgI3BhZ2UtaG9tZSAjb3NzIC5ncmFwaGljcy5hY3RpdmUgLnNoYWRvdyB7XG4gICAgICBhbmltYXRpb246IGZhZGVJbiAycyAuMnMgZWFzZSBmb3J3YXJkczsgfVxuICAgICNwYWdlLWhvbWUgI29zcyAuZ3JhcGhpY3M6OmJlZm9yZSwgI3BhZ2UtaG9tZSAjb3NzIC5ncmFwaGljczo6YWZ0ZXIsXG4gICAgI3BhZ2UtaG9tZSAjb3NzIC5ncmFwaGljcyAuc2hhZG93IHtcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgIGNvbnRlbnQ6ICcnO1xuICAgICAgb3BhY2l0eTogMDtcbiAgICAgIGJhY2tncm91bmQ6IHVybChcIi9pbWcvaG9tZXBhZ2UvZnJhbWV3b3JrLWRldmljZS1hbmRyb2lkLmpwZ1wiKSAwIDAgbm8tcmVwZWF0O1xuICAgICAgYmFja2dyb3VuZC1zaXplOiAxMDAlO1xuICAgICAgdG9wOiA3OHB4O1xuICAgICAgcmlnaHQ6IDk5cHg7XG4gICAgICB3aWR0aDogNDcwcHg7XG4gICAgICBoZWlnaHQ6IDYyNHB4OyB9XG4gICAgI3BhZ2UtaG9tZSAjb3NzIC5ncmFwaGljczo6YWZ0ZXIge1xuICAgICAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFwiL2ltZy9ob21lcGFnZS9mcmFtZXdvcmstZGV2aWNlLWlwaG9uZS5wbmdcIik7XG4gICAgICBiYWNrZ3JvdW5kLXNpemU6IDEwMCU7XG4gICAgICB3aWR0aDogNDkwcHg7XG4gICAgICBoZWlnaHQ6IDc5MHB4O1xuICAgICAgdG9wOiAwcHg7XG4gICAgICByaWdodDogMHB4OyB9XG4gICAgI3BhZ2UtaG9tZSAjb3NzIC5ncmFwaGljcyAuc2hhZG93IHtcbiAgICAgIGJhY2tncm91bmQtaW1hZ2U6IHVybChcIi9pbWcvaG9tZXBhZ2UvZnJhbWV3b3JrLWRldmljZXMtc2hhZG93LnBuZ1wiKTtcbiAgICAgIGJhY2tncm91bmQtc2l6ZTogMTAwJTtcbiAgICAgIHdpZHRoOiAxMjY2cHg7XG4gICAgICBoZWlnaHQ6IDIxNHB4O1xuICAgICAgdG9wOiA2NTRweDtcbiAgICAgIHJpZ2h0OiAtMjAwcHg7IH1cbiAgQG1lZGlhIChtYXgtd2lkdGg6IDEyMTlweCkge1xuICAgICNwYWdlLWhvbWUgI29zcyB7XG4gICAgICBwYWRkaW5nLXRvcDogMTIwcHg7IH1cbiAgICAgICNwYWdlLWhvbWUgI29zcyAuY29udGVudCB7XG4gICAgICAgIHdpZHRoOiAzODBweDsgfSB9XG4gIEBtZWRpYSAobWF4LXdpZHRoOiA5OTFweCkge1xuICAgICNwYWdlLWhvbWUgI29zcyAuZ3JhcGhpY3Mge1xuICAgICAgdHJhbnNmb3JtOiBzY2FsZSgwLjUsIDAuNSk7XG4gICAgICB0b3A6IDIwMHB4OyB9IH1cbiAgQG1lZGlhIChtYXgtd2lkdGg6IDc2N3B4KSB7XG4gICAgI3BhZ2UtaG9tZSAjb3NzIHtcbiAgICAgIHBhZGRpbmctdG9wOiAwcHg7XG4gICAgICBwYWRkaW5nLWJvdHRvbTogMzI4cHg7IH1cbiAgICAgICNwYWdlLWhvbWUgI29zcyAuY29udGVudCB7XG4gICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7IH1cbiAgICAgICAgI3BhZ2UtaG9tZSAjb3NzIC5jb250ZW50IC5mcmFtZXdvcmtzIHtcbiAgICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsgfVxuICAgICAgI3BhZ2UtaG9tZSAjb3NzIC5ncmFwaGljcyB7XG4gICAgICAgIHJpZ2h0OiBjYWxjKDUwJSAtIDYwcHgpO1xuICAgICAgICBib3R0b206IC0xMDFweDtcbiAgICAgICAgdG9wOiBhdXRvOyB9XG4gICAgICAgICNwYWdlLWhvbWUgI29zcyAuZ3JhcGhpY3M6OmJlZm9yZSB7XG4gICAgICAgICAgdG9wOiAzOXB4O1xuICAgICAgICAgIHJpZ2h0OiA1MHB4O1xuICAgICAgICAgIHdpZHRoOiAyMzVweDtcbiAgICAgICAgICBoZWlnaHQ6IDMxMnB4OyB9XG4gICAgICAgICNwYWdlLWhvbWUgI29zcyAuZ3JhcGhpY3M6OmFmdGVyIHtcbiAgICAgICAgICB3aWR0aDogMjQ1cHg7XG4gICAgICAgICAgaGVpZ2h0OiAzOTVweDsgfVxuICAgICAgICAjcGFnZS1ob21lICNvc3MgLmdyYXBoaWNzIC5zaGFkb3cge1xuICAgICAgICAgIHdpZHRoOiA2MzNweDtcbiAgICAgICAgICBoZWlnaHQ6IDEwN3B4O1xuICAgICAgICAgIHRvcDogMzI3cHg7XG4gICAgICAgICAgcmlnaHQ6IC0xMDBweDsgfSB9XG5cbiNwYWdlLWhvbWUgI2Rldm9wcyB7XG4gIHBhZGRpbmctdG9wOiAyMDRweDtcbiAgcGFkZGluZy1ib3R0b206IDI1MnB4OyB9XG4gICNwYWdlLWhvbWUgI2Rldm9wcyAuY29udGVudCB7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlOyB9XG4gICNwYWdlLWhvbWUgI2Rldm9wcyAuZ2l0LWhvc3RzIHtcbiAgICBtYXJnaW4tYm90dG9tOiA0MnB4O1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAganVzdGlmeS1jb250ZW50OiBzdGFydDtcbiAgICBmbGV4LXdyYXA6IHdyYXA7XG4gICAgcGFkZGluZy1sZWZ0OiAwOyB9XG4gICAgI3BhZ2UtaG9tZSAjZGV2b3BzIC5naXQtaG9zdHMgbGkge1xuICAgICAgbWFyZ2luLXJpZ2h0OiAxZW07XG4gICAgICBsaXN0LXN0eWxlOiBub25lOyB9XG4gICAgI3BhZ2UtaG9tZSAjZGV2b3BzIC5naXQtaG9zdHMgbGkge1xuICAgICAgbWFyZ2luLXJpZ2h0OiAxOXB4OyB9XG4gICAgI3BhZ2UtaG9tZSAjZGV2b3BzIC5naXQtaG9zdHMgaW1nIHtcbiAgICAgIGhlaWdodDogMjBweDsgfVxuICAjcGFnZS1ob21lICNkZXZvcHMgLmdyYXBoaWNzIHtcbiAgICBiYWNrZ3JvdW5kOiB1cmwoXCIvaW1nL2hvbWVwYWdlL2Rldm9wcy1hcHBmbG93LXByZXZpZXcucG5nXCIpIDAgMCBuby1yZXBlYXQ7XG4gICAgYmFja2dyb3VuZC1zaXplOiAxMDAlO1xuICAgIHdpZHRoOiAxMzI0cHg7XG4gICAgaGVpZ2h0OiA4MTJweDtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgdG9wOiAxNHB4O1xuICAgIGxlZnQ6IC0yMjdweDtcbiAgICBvcGFjaXR5OiAwOyB9XG4gICAgI3BhZ2UtaG9tZSAjZGV2b3BzIC5ncmFwaGljcy5hY3RpdmUge1xuICAgICAgYW5pbWF0aW9uOiBmYWRlSW5VcCAxcyBlYXNlIGZvcndhcmRzOyB9XG4gIEBtZWRpYSAobWF4LXdpZHRoOiAxMjE5cHgpIHtcbiAgICAjcGFnZS1ob21lICNkZXZvcHMge1xuICAgICAgcGFkZGluZy10b3A6IDYwcHg7IH1cbiAgICAgICNwYWdlLWhvbWUgI2Rldm9wcyAuZ3JhcGhpY3Mge1xuICAgICAgICB3aWR0aDogOTMzcHg7IH0gfVxuICBAbWVkaWEgKG1heC13aWR0aDogOTkxcHgpIHtcbiAgICAjcGFnZS1ob21lICNkZXZvcHMgLmdyYXBoaWNzIHtcbiAgICAgIHdpZHRoOiA2NjJweDtcbiAgICAgIHRvcDogMTgwcHg7IH0gfVxuICBAbWVkaWEgKG1heC13aWR0aDogNzY3cHgpIHtcbiAgICAjcGFnZS1ob21lICNkZXZvcHMge1xuICAgICAgcGFkZGluZy10b3A6IDE2MHB4O1xuICAgICAgcGFkZGluZy1ib3R0b206IDQyMHB4OyB9XG4gICAgICAjcGFnZS1ob21lICNkZXZvcHMgLmNvbnRlbnQge1xuICAgICAgICB3aWR0aDogMTAwJTsgfVxuICAgICAgI3BhZ2UtaG9tZSAjZGV2b3BzIC5naXQtaG9zdHMge1xuICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsgfVxuICAgICAgI3BhZ2UtaG9tZSAjZGV2b3BzIC5ncmFwaGljcyB7XG4gICAgICAgIGxlZnQ6IGNhbGMoNTAlIC0gMTUwcHgpO1xuICAgICAgICB3aWR0aDogMzMxcHg7XG4gICAgICAgIHRvcDogYXV0bztcbiAgICAgICAgaGVpZ2h0OiAyMDNweDtcbiAgICAgICAgYm90dG9tOiAxNzBweDsgfSB9XG5cbiNwYWdlLWhvbWUgI3N0dWRpbyB7XG4gIHBhZGRpbmctYm90dG9tOiA1NHB4O1xuICBtYXJnaW4tYm90dG9tOiAxNTBweDtcbiAgcGFkZGluZy10b3A6IDIwcHg7XG4gIG1hcmdpbi10b3A6IDE1MHB4OyB9XG4gICNwYWdlLWhvbWUgI3N0dWRpbyAuY29udGVudCB7XG4gICAgbWF4LXdpZHRoOiA3MjBweDsgfVxuICAjcGFnZS1ob21lICNzdHVkaW8gLmdyYXBoaWNzIHtcbiAgICBiYWNrZ3JvdW5kOiB1cmwoXCIvaW1nL2hvbWVwYWdlL3N0dWRpby1kZXNrdG9wLWJnLmpwZ1wiKSA1MCUgMCBuby1yZXBlYXQ7XG4gICAgYmFja2dyb3VuZC1zaXplOiBjb3ZlcjtcbiAgICB3aWR0aDogMTAwJTtcbiAgICBwYWRkaW5nLXRvcDogMTAwcHg7XG4gICAgcGFkZGluZy1ib3R0b206IDEwMHB4O1xuICAgIG1hcmdpbi10b3A6IDU4cHg7IH1cbiAgICAjcGFnZS1ob21lICNzdHVkaW8gLmdyYXBoaWNzIHZpZGVvIHtcbiAgICAgIG1hcmdpbjogMCBhdXRvO1xuICAgICAgcGFkZGluZzogMDtcbiAgICAgIGJvcmRlci1yYWRpdXM6IDZweDtcbiAgICAgIGJveC1zaGFkb3c6IDAgMjJweCA3MHB4IDRweCByZ2JhKDAsIDAsIDAsIDAuNTYpOyB9XG4gIEBtZWRpYSAobWF4LXdpZHRoOiA3NjdweCkge1xuICAgICNwYWdlLWhvbWUgI3N0dWRpbyB7XG4gICAgICBwYWRkaW5nLXRvcDogODBweDtcbiAgICAgIG1hcmdpbi10b3A6IDA7IH1cbiAgICAgICNwYWdlLWhvbWUgI3N0dWRpbyAuZ3JhcGhpY3MgdmlkZW8ge1xuICAgICAgICB3aWR0aDogMTAwJTsgfSB9XG5cbiNwYWdlLWhvbWUgI2ludGVncmF0aW9ucyB7XG4gIHBhZGRpbmctdG9wOiAyMHB4O1xuICBwYWRkaW5nLWJvdHRvbTogNHB4OyB9XG4gICNwYWdlLWhvbWUgI2ludGVncmF0aW9ucyAuY29udGVudCB7XG4gICAgbWF4LXdpZHRoOiA4OTRweDsgfVxuICAjcGFnZS1ob21lICNpbnRlZ3JhdGlvbnMgLmludGVncmF0aW9uLWxpc3Qge1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICBoZWlnaHQ6IDM2MHB4O1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIG1hcmdpbjogMCAwIDQ4cHg7XG4gICAgcGFkZGluZzogMDtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgb3BhY2l0eTogMDtcbiAgICBhbmltYXRpb246IGZhZGVJbiAxcyAxcyBmb3J3YXJkczsgfVxuICAgICNwYWdlLWhvbWUgI2ludGVncmF0aW9ucyAuaW50ZWdyYXRpb24tbGlzdCBsaSB7XG4gICAgICBsaXN0LXN0eWxlOiBub25lO1xuICAgICAgcG9zaXRpb246IGFic29sdXRlOyB9XG4gICAgI3BhZ2UtaG9tZSAjaW50ZWdyYXRpb25zIC5pbnRlZ3JhdGlvbi1saXN0IGltZyB7XG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICB3aWR0aDogMTI4cHg7XG4gICAgICBib3JkZXItcmFkaXVzOiA1MCU7XG4gICAgICBib3gtc2hhZG93OiAwIDZweCAyNHB4IHJnYmEoMCwgMCwgMCwgMC4xKTsgfVxuICAgICAgI3BhZ2UtaG9tZSAjaW50ZWdyYXRpb25zIC5pbnRlZ3JhdGlvbi1saXN0IGltZy5tIHtcbiAgICAgICAgd2lkdGg6IDY0cHg7IH1cbiAgICAgICNwYWdlLWhvbWUgI2ludGVncmF0aW9ucyAuaW50ZWdyYXRpb24tbGlzdCBpbWcubSB7XG4gICAgICAgIHdpZHRoOiA5NnB4OyB9XG5cbiNwYWdlLWhvbWUgI3doeS1idWlsZCB7XG4gIHBhZGRpbmctYm90dG9tOiA5MHB4OyB9XG4gICNwYWdlLWhvbWUgI3doeS1idWlsZCAud2h5IHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGp1c3RpZnktY29udGVudDogc3RhcnQ7XG4gICAgZmxleC13cmFwOiB3cmFwO1xuICAgIHBhZGRpbmctbGVmdDogMDtcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG4gICAgbWFyZ2luLXRvcDogNzVweDtcbiAgICBtYXJnaW4tYm90dG9tOiA3NXB4OyB9XG4gICAgI3BhZ2UtaG9tZSAjd2h5LWJ1aWxkIC53aHkgbGkge1xuICAgICAgbWFyZ2luLXJpZ2h0OiAxZW07XG4gICAgICBsaXN0LXN0eWxlOiBub25lOyB9XG4gICAgI3BhZ2UtaG9tZSAjd2h5LWJ1aWxkIC53aHkgbGkge1xuICAgICAgcGFkZGluZy10b3A6IDYxcHg7XG4gICAgICBtYXgtd2lkdGg6IDMxMHB4O1xuICAgICAgcG9zaXRpb246IHJlbGF0aXZlOyB9XG4gICAgICAjcGFnZS1ob21lICN3aHktYnVpbGQgLndoeSBsaS53aHlfX2Z1dHVyZS1wcm9vZjo6YmVmb3JlIHtcbiAgICAgICAgYmFja2dyb3VuZC1wb3NpdGlvbjogMCAwcHg7IH1cbiAgICAgICNwYWdlLWhvbWUgI3doeS1idWlsZCAud2h5IGxpLndoeV9fY29tbXVuaXR5OjpiZWZvcmUge1xuICAgICAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwIC00OHB4OyB9XG4gICAgICAjcGFnZS1ob21lICN3aHktYnVpbGQgLndoeSBsaS53aHlfX29zOjpiZWZvcmUge1xuICAgICAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwIC05NnB4OyB9XG4gICAgICAjcGFnZS1ob21lICN3aHktYnVpbGQgLndoeSBsaTo6YmVmb3JlIHtcbiAgICAgICAgYmFja2dyb3VuZDogdXJsKFwiL2ltZy9ob21lcGFnZS93aHktYnVpbGQtaWNvbnMucG5nXCIpIDAgMCBuby1yZXBlYXQ7XG4gICAgICAgIGJhY2tncm91bmQtc2l6ZTogMTAwJTtcbiAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICB0b3A6IDA7XG4gICAgICAgIGxlZnQ6IDA7XG4gICAgICAgIGhlaWdodDogNDhweDtcbiAgICAgICAgd2lkdGg6IDQ4cHg7XG4gICAgICAgIGNvbnRlbnQ6ICcnOyB9XG4gICAgICAjcGFnZS1ob21lICN3aHktYnVpbGQgLndoeSBsaSBwIHtcbiAgICAgICAgbGV0dGVyLXNwYWNpbmc6IC0uMDFlbTsgfVxuICBAbWVkaWEgKG1heC13aWR0aDogMTIxOXB4KSB7XG4gICAgI3BhZ2UtaG9tZSAjd2h5LWJ1aWxkIC53aHkgbGkge1xuICAgICAgbWF4LXdpZHRoOiAyODBweDsgfSB9XG4gIEBtZWRpYSAobWF4LXdpZHRoOiA5OTFweCkge1xuICAgICNwYWdlLWhvbWUgI3doeS1idWlsZCAud2h5IGxpIHtcbiAgICAgIG1heC13aWR0aDogMjEwcHg7IH0gfVxuICBAbWVkaWEgKG1heC13aWR0aDogNzY3cHgpIHtcbiAgICAjcGFnZS1ob21lICN3aHktYnVpbGQge1xuICAgICAgdGV4dC1hbGlnbjogY2VudGVyOyB9XG4gICAgICAjcGFnZS1ob21lICN3aHktYnVpbGQgLndoeSB7XG4gICAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYXJvdW5kOyB9XG4gICAgICAgICNwYWdlLWhvbWUgI3doeS1idWlsZCAud2h5IGxpIHtcbiAgICAgICAgICBtYXgtd2lkdGg6IDEwMCU7IH1cbiAgICAgICAgICAjcGFnZS1ob21lICN3aHktYnVpbGQgLndoeSBsaTo6YmVmb3JlIHtcbiAgICAgICAgICAgIGxlZnQ6IGNhbGMoNTAlIC0gMjRweCk7IH0gfVxuXG4jcGFnZS1ob21lICNkaWZmZXJlbmNlIHtcbiAgZGlzcGxheTogZmxleDtcbiAgcGFkZGluZy10b3A6IDYwcHg7XG4gIHBhZGRpbmctYm90dG9tOiA2OXB4O1xuICBtYXJnaW4tdG9wOiAxNnB4O1xuICBib3JkZXItYm90dG9tOiAxcHggc29saWQgI2VlZTsgfVxuICAjcGFnZS1ob21lICNkaWZmZXJlbmNlIC5jb250YWluZXIge1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsgfVxuICAgICNwYWdlLWhvbWUgI2RpZmZlcmVuY2UgLmNvbnRhaW5lcjo6YmVmb3JlIHtcbiAgICAgIGJhY2tncm91bmQ6IHVybChcIi9pbWcvaG9tZXBhZ2UvaHlicmlkLXZzLW5hdGl2ZS1pb25pYy1lYm9vay5wbmdcIikgMCAwIG5vLXJlcGVhdDtcbiAgICAgIGJhY2tncm91bmQtc2l6ZTogMTAwJTtcbiAgICAgIHdpZHRoOiA0MjRweDtcbiAgICAgIGhlaWdodDogMzEwcHg7XG4gICAgICBjb250ZW50OiAnJztcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgIGJvdHRvbTogLTY5cHg7XG4gICAgICBsZWZ0OiA1MnB4OyB9XG4gICNwYWdlLWhvbWUgI2RpZmZlcmVuY2UgaGdyb3VwIHtcbiAgICBtYXgtd2lkdGg6IDU1MHB4O1xuICAgIG1hcmdpbi1yaWdodDogNTBweDtcbiAgICBtYXJnaW4tbGVmdDogYXV0bzsgfVxuICAjcGFnZS1ob21lICNkaWZmZXJlbmNlIGg1IHtcbiAgICBmb250LXNpemU6IDE4cHg7XG4gICAgbWFyZ2luLWJvdHRvbTogMTFweDtcbiAgICBjb2xvcjogIzFmMzI1NjsgfVxuICAjcGFnZS1ob21lICNkaWZmZXJlbmNlIHAge1xuICAgIGZvbnQtc2l6ZTogMTZweDtcbiAgICBmb250LXdlaWdodDogNDAwO1xuICAgIGxpbmUtaGVpZ2h0OiAxLjZlbTtcbiAgICBsZXR0ZXItc3BhY2luZzogLS4wMWVtO1xuICAgIGNvbG9yOiAjNmM4MWE2OyB9XG4gICNwYWdlLWhvbWUgI2RpZmZlcmVuY2UgLmJ0biB7XG4gICAgcGFkZGluZzogMTJweCAxM3B4IDEwcHg7XG4gICAgZm9udC1zaXplOiAxNHB4O1xuICAgIGJhY2tncm91bmQtY29sb3I6ICM2NjhiZmY7IH1cbiAgQG1lZGlhIChtYXgtd2lkdGg6IDEyMTlweCkge1xuICAgICNwYWdlLWhvbWUgI2RpZmZlcmVuY2UgLmNvbnRhaW5lcjo6YmVmb3JlIHtcbiAgICAgIGxlZnQ6IDA7IH1cbiAgICAjcGFnZS1ob21lICNkaWZmZXJlbmNlIGhncm91cCB7XG4gICAgICBtYXgtd2lkdGg6IDUwMHB4OyB9IH1cbiAgQG1lZGlhIChtYXgtd2lkdGg6IDk5MXB4KSB7XG4gICAgI3BhZ2UtaG9tZSAjZGlmZmVyZW5jZSBoZ3JvdXAge1xuICAgICAgbWFyZ2luOiAwIGF1dG87XG4gICAgICBtYXgtd2lkdGg6IDEwMCU7IH1cbiAgICAjcGFnZS1ob21lICNkaWZmZXJlbmNlIC5jb250YWluZXI6OmJlZm9yZSB7XG4gICAgICB3aWR0aDogMjEycHg7XG4gICAgICBoZWlnaHQ6IDE1NXB4O1xuICAgICAgcmlnaHQ6IDA7XG4gICAgICBsZWZ0OiBhdXRvOyB9IH1cbiAgQG1lZGlhIChtYXgtd2lkdGg6IDM3MHB4KSB7XG4gICAgI3BhZ2UtaG9tZSAjZGlmZmVyZW5jZSAuY29udGFpbmVyOjpiZWZvcmUge1xuICAgICAgZGlzcGxheTogbm9uZTsgfSB9XG5cbiNwYWdlLWhvbWUgI2dvb2QtY29tcGFueSB7XG4gIHBhZGRpbmctdG9wOiAxNTlweDtcbiAgcGFkZGluZy1ib3R0b206IDIwMnB4OyB9XG4gICNwYWdlLWhvbWUgI2dvb2QtY29tcGFueSBoZ3JvdXAge1xuICAgIG1heC13aWR0aDogNzMycHg7XG4gICAgbWFyZ2luOiAwIGF1dG87IH1cbiAgICAjcGFnZS1ob21lICNnb29kLWNvbXBhbnkgaGdyb3VwIHAge1xuICAgICAgbGluZS1oZWlnaHQ6IDMycHg7XG4gICAgICBtYXJnaW4tdG9wOiAxNXB4OyB9XG4gICNwYWdlLWhvbWUgI2dvb2QtY29tcGFueSAuY2FzZS1zdHVkaWVzIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGp1c3RpZnktY29udGVudDogc3RhcnQ7XG4gICAgZmxleC13cmFwOiB3cmFwO1xuICAgIHBhZGRpbmctbGVmdDogMDtcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG4gICAgbWFyZ2luLXRvcDogNTRweDsgfVxuICAgICNwYWdlLWhvbWUgI2dvb2QtY29tcGFueSAuY2FzZS1zdHVkaWVzIGxpIHtcbiAgICAgIG1hcmdpbi1yaWdodDogMWVtO1xuICAgICAgbGlzdC1zdHlsZTogbm9uZTsgfVxuICAgICNwYWdlLWhvbWUgI2dvb2QtY29tcGFueSAuY2FzZS1zdHVkaWVzIGxpIHtcbiAgICAgIGZsZXg6IDAgMCAyNzBweDtcbiAgICAgIG1hcmdpbi1yaWdodDogMDtcbiAgICAgIG1hcmdpbi1ib3R0b206IDMycHg7IH1cbiAgICAjcGFnZS1ob21lICNnb29kLWNvbXBhbnkgLmNhc2Utc3R1ZGllcyBhIHtcbiAgICAgIHRleHQtYWxpZ246IGxlZnQ7XG4gICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgIGJvcmRlci1yYWRpdXM6IDhweDtcbiAgICAgIHBhZGRpbmc6IDIzNnB4IDI3cHggMjNweDtcbiAgICAgIGJveC1zaGFkb3c6IDAgNHB4IDhweCByZ2JhKDAsIDMwLCA4NCwgMC4xMiksIDAgMXB4IDNweCByZ2JhKDAsIDMwLCA4NCwgMC4wOCk7XG4gICAgICB0cmFuc2l0aW9uOiAuMTVzIGJveC1zaGFkb3cgZWFzZSwgLjE1cyBjb2xvciwgLjE1cyB0cmFuc2Zvcm07IH1cbiAgICAgICNwYWdlLWhvbWUgI2dvb2QtY29tcGFueSAuY2FzZS1zdHVkaWVzIGE6aG92ZXIge1xuICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTFweCk7XG4gICAgICAgIGJveC1zaGFkb3c6IDAgOHB4IDE2cHggcmdiYSgwLCAzMCwgODQsIDAuMSksIDAgM3B4IDZweCByZ2JhKDAsIDMwLCA4NCwgMC4wOCk7IH1cbiAgICAjcGFnZS1ob21lICNnb29kLWNvbXBhbnkgLmNhc2Utc3R1ZGllcyBpbWcge1xuICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgdG9wOiAwO1xuICAgICAgbGVmdDogMDtcbiAgICAgIHJpZ2h0OiAwO1xuICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgIGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiA4cHg7XG4gICAgICBib3JkZXItdG9wLWxlZnQtcmFkaXVzOiA4cHg7IH1cbiAgICAjcGFnZS1ob21lICNnb29kLWNvbXBhbnkgLmNhc2Utc3R1ZGllcyBzdHJvbmcge1xuICAgICAgZm9udC13ZWlnaHQ6IDQwMDtcbiAgICAgIGNvbG9yOiAjMjUzOTUwOyB9XG4gICAgI3BhZ2UtaG9tZSAjZ29vZC1jb21wYW55IC5jYXNlLXN0dWRpZXMgcCB7XG4gICAgICBmb250LXNpemU6IDE0cHg7XG4gICAgICBsZXR0ZXItc3BhY2luZzogLS4wMWVtOyB9XG4gICAgI3BhZ2UtaG9tZSAjZ29vZC1jb21wYW55IC5jYXNlLXN0dWRpZXMgLmN0YSB7XG4gICAgICBmb250LXNpemU6IDE1cHg7XG4gICAgICBmb250LWZhbWlseTogRWluYTtcbiAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7XG4gICAgICBtYXJnaW4tdG9wOiAxMHB4O1xuICAgICAgbGV0dGVyLXNwYWNpbmc6IC4wM2VtOyB9XG4gICAgICAjcGFnZS1ob21lICNnb29kLWNvbXBhbnkgLmNhc2Utc3R1ZGllcyAuY3RhOjphZnRlciB7XG4gICAgICAgIGRpc3BsYXk6IG5vbmU7IH1cbiAgI3BhZ2UtaG9tZSAjZ29vZC1jb21wYW55IC5vdGhlcnMge1xuICAgIHdpZHRoOiA4MDdweDtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgICBtYXJnaW46IDQ5cHggYXV0byAzNXB4OyB9XG4gICNwYWdlLWhvbWUgI2dvb2QtY29tcGFueSAuY3RhOjphZnRlciB7XG4gICAgY29sb3I6ICNkYmU2ZmY7IH1cbiAgQG1lZGlhIChtYXgtd2lkdGg6IDEyMTlweCkge1xuICAgICNwYWdlLWhvbWUgI2dvb2QtY29tcGFueSAuY2FzZS1zdHVkaWVzIGxpIHtcbiAgICAgIGZsZXg6IDAgMCAyMjBweDsgfSB9XG4gIEBtZWRpYSAobWF4LXdpZHRoOiA3NjdweCkge1xuICAgICNwYWdlLWhvbWUgI2dvb2QtY29tcGFueSAuY2FzZS1zdHVkaWVzIHtcbiAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYXJvdW5kOyB9XG4gICAgICAjcGFnZS1ob21lICNnb29kLWNvbXBhbnkgLmNhc2Utc3R1ZGllcyBsaSB7XG4gICAgICAgIGZsZXg6IDAgMCAyODBweDsgfVxuICAgICNwYWdlLWhvbWUgI2dvb2QtY29tcGFueSAub3RoZXJzIHtcbiAgICAgIHdpZHRoOiAxMDAlOyB9IH1cblxuI3BhZ2UtaG9tZSAjam9pbiB7XG4gIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCh0byByaWdodCwgIzRmNzRmZSwgIzcwYWFmYik7XG4gIHBhZGRpbmctdG9wOiAxMzJweDtcbiAgcGFkZGluZy1ib3R0b206IDE2MHB4O1xuICBjb2xvcjogd2hpdGU7XG4gIHRleHQtYWxpZ246IGNlbnRlcjsgfVxuICAjcGFnZS1ob21lICNqb2luIGhncm91cCB7XG4gICAgZm9udC1zaXplOiAyM3B4O1xuICAgIG1heC13aWR0aDogNzkwcHg7IH1cbiAgI3BhZ2UtaG9tZSAjam9pbiBoMSB7XG4gICAgZm9udC13ZWlnaHQ6IDQwMDtcbiAgICBjb2xvcjogd2hpdGU7XG4gICAgZm9udC1zaXplOiA0NnB4O1xuICAgIGxpbmUtaGVpZ2h0OiA2NHB4OyB9XG4gICNwYWdlLWhvbWUgI2pvaW4gLmJ0bnMge1xuICAgIG1hcmdpbi10b3A6IDQ0cHg7IH1cbiAgI3BhZ2UtaG9tZSAjam9pbiAuYnRuIHtcbiAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xuICAgIGZvbnQtd2VpZ2h0OiA3MDA7XG4gICAgZm9udC1zaXplOiAxNXB4O1xuICAgIHBhZGRpbmc6IDIxcHggMjRweCAxOXB4O1xuICAgIGxldHRlci1zcGFjaW5nOiAuMDk2ZW07XG4gICAgbWFyZ2luLWJvdHRvbTogMTZweDsgfVxuICAgICNwYWdlLWhvbWUgI2pvaW4gLmJ0biBpb24taWNvbiB7XG4gICAgICB2ZXJ0aWNhbC1hbGlnbjogLTJweDtcbiAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICAgIHdpZHRoOiAxNXB4O1xuICAgICAgaGVpZ2h0OiAxNXB4OyB9XG4gICAgI3BhZ2UtaG9tZSAjam9pbiAuYnRuLmxpZ2h0IHtcbiAgICAgIGJhY2tncm91bmQ6ICM3YmIzZmY7IH1cbiAgICAgICNwYWdlLWhvbWUgI2pvaW4gLmJ0bi5saWdodDpob3ZlciB7XG4gICAgICAgIGJhY2tncm91bmQ6ICM5NWMyZmY7IH1cbiAgICAjcGFnZS1ob21lICNqb2luIC5idG46bm90KDpob3Zlcik6bm90KDphY3RpdmUpIHtcbiAgICAgIGJveC1zaGFkb3c6IG5vbmU7IH1cbiJdfQ== */\n"
  },
  {
    "path": "content/css/pages/integrations/detail.css",
    "content": "\n/*# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsImZpbGUiOiJwYWdlcy9pbnRlZ3JhdGlvbnMvZGV0YWlsLmNzcyIsInNvdXJjZXNDb250ZW50IjpbXX0= */\n"
  },
  {
    "path": "content/css/pages/integrations/index.css",
    "content": ".integrations-card {\n  transition: all 0.3s;\n  display: block;\n  position: relative;\n  -ms-flex: 0 0 calc(25% - 16px);\n      flex: 0 0 calc(25% - 16px);\n  margin: 0 8px 16px;\n  background: #FFFFFF;\n  box-shadow: 0 3px 13px rgba(0, 0, 0, 0.08), 0 2px 4px rgba(0, 0, 0, 0.08);\n  border-radius: 8px; }\n  .integrations-card h2 {\n    font-size: 16px;\n    font-weight: 600;\n    color: #000; }\n  .integrations-card:hover {\n    box-shadow: 0 8px 24px rgba(0, 0, 0, 0.08), 0 6px 12px rgba(0, 0, 0, 0.08); }\n  .integrations-card--premier:after {\n    content: url(\"data:image/svg+xml,%3csvg width='52' height='50' viewBox='0 0 52 50' fill='none' xmlns='http://www.w3.org/2000/svg'%3e%3cpath d='M52 43L5 0H44C48.4183 0 52 3.58172 52 8V43Z' fill='%2387B1F7'/%3e%3cpath d='M41 13.6464L44.9009 16L43.869 11.5604L47.3125 8.57528L42.7729 8.18544L41 4L39.2268 8.18544L34.6875 8.57528L38.131 11.5604L37.0988 16L41 13.6464Z' fill='white'/%3e%3c/svg%3e\");\n    position: absolute;\n    top: 0;\n    right: 0; }\n  .integrations-card--featured {\n    -ms-flex: 0 0 calc(33% - 10px);\n        flex: 0 0 calc(33% - 10px);\n    padding: 24px; }\n    .integrations-card--featured h1 {\n      font-size: 18px;\n      line-height: 25px;\n      font-weight: 600;\n      color: #000000;\n      margin-bottom: 6px; }\n    .integrations-card--featured p {\n      font-size: 14px;\n      line-height: 22px;\n      color: #637696;\n      margin-bottom: 0; }\n    .integrations-card--featured ul {\n      list-style-type: none;\n      margin-top: 0;\n      padding: 0;\n      position: absolute;\n      top: 26px;\n      right: 26px;\n      text-align: right; }\n    .integrations-card--featured .integrations-tag {\n      margin-bottom: 2px; }\n    .integrations-card--featured .integrations-card__image {\n      height: 70px;\n      display: -ms-flexbox;\n      display: flex;\n      -ms-flex-direction: column;\n          flex-direction: column;\n      -ms-flex-pack: center;\n          justify-content: center;\n      -ms-flex-align: start;\n          align-items: flex-start; }\n      .integrations-card--featured .integrations-card__image img {\n        max-height: 70px;\n        max-width: 180px; }\n  .integrations-card--small h2 {\n    margin-top: 0;\n    margin-bottom: 0;\n    padding: 14px 18px; }\n  .integrations-card--small .integrations-card__image {\n    height: 116px;\n    width: 100%;\n    display: -ms-flexbox;\n    display: flex;\n    -ms-flex-pack: center;\n        justify-content: center;\n    -ms-flex-align: center;\n        align-items: center;\n    border-bottom: 1px solid #ECF0F5; }\n    .integrations-card--small .integrations-card__image img {\n      max-height: 50px;\n      max-width: 140px; }\n\n.integrations-tag {\n  font-weight: 500;\n  line-height: 1;\n  font-size: 9px;\n  letter-spacing: 0.03em;\n  text-transform: uppercase;\n  color: #9FABBE;\n  border: 1px solid #E2E9F3;\n  border-radius: 100px;\n  padding: 3px 6px;\n  display: -ms-inline-flexbox;\n  display: inline-flex;\n  -ms-flex-align: center;\n      align-items: center; }\n  .integrations-tag--premier {\n    background-color: #87B1F7;\n    position: relative;\n    color: #fff;\n    border: none;\n    padding-left: 22px; }\n    .integrations-tag--premier ion-icon {\n      position: absolute;\n      top: 50%;\n      -webkit-transform: translateY(-50%);\n              transform: translateY(-50%);\n      left: 6px;\n      width: 13px;\n      height: 13px;\n      fill: #fff; }\n\n#page-integrations {\n  position: relative; }\n  #page-integrations::before {\n    content: '';\n    display: block;\n    position: absolute;\n    top: 0;\n    left: 0;\n    width: 100%;\n    height: 564px;\n    z-index: -1;\n    background: url(\"/img/integrations/integrations-hero-bg.png\");\n    background-repeat: repeat-x;\n    background-size: 1680px;\n    background-position: center -20px;\n    opacity: 0.60; }\n  #page-integrations.show {\n    display: block; }\n  #page-integrations.hide {\n    display: none; }\n  #page-integrations .integrations-hero {\n    text-align: center;\n    margin: 100px 0; }\n    #page-integrations .integrations-hero h1 {\n      font-size: 48px;\n      letter-spacing: -0.02em;\n      color: #000000; }\n    #page-integrations .integrations-hero p {\n      font-size: 24px;\n      letter-spacing: -0.02em;\n      color: #394D71;\n      font-family: \"Eina\", \"Helvetica Neue\", Helvetica, sans-serif; }\n  #page-integrations .integrations-featured__list {\n    display: -ms-flexbox;\n    display: flex;\n    margin-left: -8px; }\n  #page-integrations .integrations-list {\n    margin: 100px 0 140px; }\n  #page-integrations .integrations-list__inner {\n    display: -ms-flexbox;\n    display: flex;\n    -ms-flex-pack: justify;\n        justify-content: space-between; }\n  #page-integrations .integrations-list__filter {\n    -ms-flex: 0 0 194px;\n        flex: 0 0 194px; }\n    #page-integrations .integrations-list__filter h4 {\n      font-weight: 600;\n      font-size: 11px;\n      letter-spacing: 0.05em;\n      text-transform: uppercase;\n      color: #92A0B9;\n      margin-bottom: 14px; }\n  #page-integrations .integrations-list__filter-close {\n    display: none; }\n  #page-integrations .integrations-searchbox {\n    position: relative; }\n    #page-integrations .integrations-searchbox ion-icon {\n      position: absolute;\n      top: 50%;\n      -webkit-transform: translateY(-50%);\n              transform: translateY(-50%); }\n      #page-integrations .integrations-searchbox ion-icon[name=\"search\"] {\n        color: #3880FF;\n        left: 11px; }\n      #page-integrations .integrations-searchbox ion-icon[name=\"close\"] {\n        transition: opacity 0.3s;\n        right: 11px;\n        pointer-events: none;\n        color: rgba(69, 88, 121, 0.75);\n        opacity: 0; }\n    #page-integrations .integrations-searchbox input {\n      border-radius: 100px;\n      border: none;\n      outline: none;\n      background: #F5F8FC;\n      font-size: 14px;\n      padding: 8px 30px;\n      color: #455879;\n      width: 100%; }\n      #page-integrations .integrations-searchbox input::-webkit-input-placeholder {\n        color: #8E9FBC; }\n      #page-integrations .integrations-searchbox input::-moz-placeholder {\n        color: #8E9FBC; }\n      #page-integrations .integrations-searchbox input::placeholder {\n        color: #8E9FBC; }\n    #page-integrations .integrations-searchbox.active ion-icon[name=\"close\"] {\n      opacity: 1;\n      pointer-events: all;\n      cursor: pointer; }\n  #page-integrations .integrations-filter-toggle {\n    display: none;\n    font-size: 20px;\n    -ms-flex: 0 0 36px;\n        flex: 0 0 36px;\n    -ms-flex-align: center;\n        align-items: center;\n    -ms-flex-pack: end;\n        justify-content: flex-end;\n    color: #3880FF;\n    cursor: pointer; }\n  #page-integrations .integrations-category-filter a,\n  #page-integrations .integrations-check__label {\n    font-family: \"Eina\", \"Helvetica Neue\", Helvetica, sans-serif;\n    font-weight: 600;\n    line-height: 1;\n    font-size: 14px;\n    color: #2C3B55; }\n  #page-integrations .integrations-toggles {\n    margin: 36px 0; }\n    #page-integrations .integrations-toggles .integrations-check,\n    #page-integrations .integrations-toggles .integrations-check__label,\n    #page-integrations .integrations-toggles .integrations-check__input {\n      cursor: pointer; }\n    #page-integrations .integrations-toggles .integrations-check + .integrations-check {\n      margin-top: 6px; }\n    #page-integrations .integrations-toggles .integrations-check__label,\n    #page-integrations .integrations-toggles tippy {\n      margin-left: 6px; }\n  #page-integrations .integrations-category-filter {\n    list-style-type: none;\n    margin: 0;\n    padding: 0;\n    transition: opacity 0.3s;\n    display: block; }\n    #page-integrations .integrations-category-filter li a {\n      transition: color 0.3s;\n      height: 20px;\n      display: -ms-flexbox;\n      display: flex;\n      -ms-flex-align: center;\n          align-items: center;\n      outline: none;\n      text-decoration: none; }\n      #page-integrations .integrations-category-filter li a:hover {\n        color: #3880FF; }\n    #page-integrations .integrations-category-filter li + li {\n      margin-top: 12px; }\n    #page-integrations .integrations-category-filter:not(.disable) li.active a {\n      pointer-events: none;\n      color: #3880FF;\n      padding-left: 8px;\n      border-left: 2px solid rgba(56, 128, 255, 0.4); }\n    #page-integrations .integrations-category-filter.disable {\n      cursor: not-allowed;\n      opacity: 0.4; }\n      #page-integrations .integrations-category-filter.disable a {\n        pointer-events: none; }\n  #page-integrations .integrations-category-select {\n    display: none; }\n  #page-integrations .integrations-list__results {\n    margin-left: 40px;\n    -ms-flex: 1 0 0px;\n        flex: 1 0 0;\n    max-width: 864px; }\n    #page-integrations .integrations-list__results .loader {\n      display: none; }\n  #page-integrations .integrations-list__results-category:not(:last-child) {\n    margin-bottom: 46px; }\n  #page-integrations .integrations-list__results-header {\n    display: -ms-flexbox;\n    display: flex;\n    -ms-flex-pack: justify;\n        justify-content: space-between;\n    -ms-flex-align: baseline;\n        align-items: baseline;\n    margin-bottom: 8px; }\n    #page-integrations .integrations-list__results-header h4 {\n      font-size: 20px;\n      font-weight: 600;\n      margin-top: 0;\n      margin-bottom: 4px; }\n    #page-integrations .integrations-list__results-header a {\n      font-weight: 600;\n      font-size: 16px;\n      font-family: \"Eina\", \"Helvetica Neue\", Helvetica, sans-serif; }\n      #page-integrations .integrations-list__results-header a ion-icon {\n        transition: -webkit-transform 0.3s;\n        transition: transform 0.3s;\n        transition: transform 0.3s, -webkit-transform 0.3s;\n        -webkit-transform: translate(0, 1px);\n                transform: translate(0, 1px); }\n      #page-integrations .integrations-list__results-header a:hover ion-icon {\n        -webkit-transform: translate(2px, 1px);\n                transform: translate(2px, 1px); }\n    #page-integrations .integrations-list__results-header h4 > a {\n      margin-right: 8px;\n      font-size: 18px;\n      display: none; }\n  #page-integrations .integrations-list__results-row {\n    display: -ms-flexbox;\n    display: flex;\n    -ms-flex-wrap: wrap;\n        flex-wrap: wrap;\n    margin-left: -8px; }\n  #page-integrations .integrations-list__results-grid {\n    display: -ms-flexbox;\n    display: flex;\n    -ms-flex-wrap: wrap;\n        flex-wrap: wrap;\n    margin-left: -8px;\n    margin-right: -8px; }\n  #page-integrations .integrations-list__empty-row {\n    opacity: 0.5;\n    margin-left: 8px; }\n  #page-integrations .integrations-list__results-form {\n    display: none;\n    background: #F6F8FB;\n    border-radius: 16px;\n    -ms-flex-direction: column;\n        flex-direction: column;\n    -ms-flex-pack: center;\n        justify-content: center;\n    padding: 32px;\n    max-width: 600px;\n    margin-left: auto;\n    margin-right: auto; }\n    #page-integrations .integrations-list__results-form h3 {\n      text-align: center;\n      max-width: 400px;\n      margin-top: 10px;\n      margin-left: auto;\n      margin-right: auto;\n      font-size: 22px;\n      font-weight: 600;\n      line-height: 30px;\n      color: #000; }\n    #page-integrations .integrations-list__results-form.show {\n      display: -ms-flexbox;\n      display: flex; }\n    #page-integrations .integrations-list__results-form .hs_submit {\n      text-align: center; }\n  #page-integrations .integrations-list__results-search {\n    display: none; }\n  #page-integrations .integrations-list__empty-message {\n    text-align: center;\n    display: block;\n    margin-bottom: 48px;\n    font-size: 16px;\n    width: 100%; }\n    #page-integrations .integrations-list__empty-message b {\n      font-weight: 600; }\n  #page-integrations tippy .tip.top {\n    left: -100px;\n    padding: 10px 12px 12px;\n    font-size: 12px;\n    line-height: 16px;\n    font-weight: 400;\n    font-family: \"Inter\", \"Inter UI\", Helvetica, Arial, sans-serif; }\n    #page-integrations tippy .tip.top::after {\n      right: 87px; }\n\n#page-integrations-detail {\n  background: url(\"/img/integrations/integrations-hero-bg.png\");\n  background-repeat: repeat-x;\n  background-size: 1680px;\n  background-position: center -300px; }\n  #page-integrations-detail .integrations-detail__nav {\n    margin-top: 20px;\n    margin-bottom: 80px; }\n    #page-integrations-detail .integrations-detail__nav a {\n      font-family: \"Eina\", \"Helvetica Neue\", Helvetica, sans-serif;\n      font-size: 16px;\n      font-weight: 600;\n      display: -ms-flexbox;\n      display: flex;\n      -ms-flex-align: center;\n          align-items: center; }\n      #page-integrations-detail .integrations-detail__nav a ion-icon {\n        transition: -webkit-transform 0.3s;\n        transition: transform 0.3s;\n        transition: transform 0.3s, -webkit-transform 0.3s;\n        -webkit-transform: translateY(-2px);\n                transform: translateY(-2px);\n        margin-right: 8px; }\n      #page-integrations-detail .integrations-detail__nav a:hover ion-icon {\n        -webkit-transform: translate(-2px, -2px);\n                transform: translate(-2px, -2px); }\n  #page-integrations-detail .integrations-detail__wrapper {\n    max-width: 748px;\n    margin-left: auto;\n    margin-right: auto;\n    margin-bottom: 140px; }\n  #page-integrations-detail .integrations-detail__header {\n    padding-bottom: 38px;\n    margin-bottom: 38px;\n    border-bottom: 1px solid #EDF2F7;\n    display: -ms-flexbox;\n    display: flex; }\n    #page-integrations-detail .integrations-detail__header h1 {\n      margin: 0;\n      font-size: 32px;\n      font-weight: 600; }\n    #page-integrations-detail .integrations-detail__header p {\n      line-height: 28px;\n      font-size: 18px;\n      letter-spacing: -0.02em;\n      color: #637696;\n      max-width: 400px;\n      padding: 5px 0 6px; }\n    #page-integrations-detail .integrations-detail__header ul {\n      margin: 0;\n      padding: 0;\n      list-style-type: none;\n      display: -ms-flexbox;\n      display: flex; }\n    #page-integrations-detail .integrations-detail__header .integrations-tag {\n      font-size: 10px;\n      padding: 3px 7px 4px; }\n      #page-integrations-detail .integrations-detail__header .integrations-tag + .integrations-tag {\n        margin-left: 6px; }\n      #page-integrations-detail .integrations-detail__header .integrations-tag--premier {\n        padding-left: 22px; }\n  #page-integrations-detail .integrations-detail__logo {\n    background: #FFFFFF;\n    box-shadow: 0px 0px 3px rgba(0, 0, 0, 0.08), 0px 3px 6px rgba(0, 0, 0, 0.1);\n    border-radius: 8px;\n    width: 200px;\n    height: 180px;\n    -ms-flex: 0 0 200px;\n        flex: 0 0 200px;\n    margin-right: 38px;\n    display: -ms-flexbox;\n    display: flex;\n    -ms-flex-pack: center;\n        justify-content: center;\n    -ms-flex-align: center;\n        align-items: center; }\n    #page-integrations-detail .integrations-detail__logo img {\n      max-height: 70px;\n      max-width: 140px; }\n  #page-integrations-detail .integrations-detail__logo + div {\n    -ms-flex: 1 0 0px;\n        flex: 1 0 0;\n    display: -ms-flexbox;\n    display: flex;\n    -ms-flex-direction: column;\n        flex-direction: column;\n    -ms-flex-pack: center;\n        justify-content: center; }\n  #page-integrations-detail .integrations-detail__body {\n    display: -ms-flexbox;\n    display: flex; }\n  #page-integrations-detail .integrations-detail__content {\n    -ms-flex: 1 0 0px;\n        flex: 1 0 0; }\n    #page-integrations-detail .integrations-detail__content h1,\n    #page-integrations-detail .integrations-detail__content h2,\n    #page-integrations-detail .integrations-detail__content h3,\n    #page-integrations-detail .integrations-detail__content h4,\n    #page-integrations-detail .integrations-detail__content h5,\n    #page-integrations-detail .integrations-detail__content h6 {\n      font-size: 16px;\n      font-weight: 600; }\n    #page-integrations-detail .integrations-detail__content p,\n    #page-integrations-detail .integrations-detail__content ul {\n      font-size: 14px;\n      line-height: 1.6;\n      color: #637696;\n      margin-bottom: 40px; }\n      #page-integrations-detail .integrations-detail__content p:last-child,\n      #page-integrations-detail .integrations-detail__content ul:last-child {\n        margin-bottom: 0; }\n    #page-integrations-detail .integrations-detail__content ul {\n      margin-left: 0;\n      padding: 0; }\n    #page-integrations-detail .integrations-detail__content ul li {\n      list-style-type: none;\n      position: relative;\n      padding-left: 22px; }\n      #page-integrations-detail .integrations-detail__content ul li + li {\n        margin-top: 12px; }\n      #page-integrations-detail .integrations-detail__content ul li:before {\n        position: absolute;\n        top: 3px;\n        left: 0;\n        content: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16px' height='16px' fill='%2362C67B' viewBox='0 0 512 512'%3E%3Cpath d='M170.718 216.482L141.6 245.6l93.6 93.6 208-208-29.118-29.118L235.2 279.918l-64.482-63.436zM422.4 256c0 91.518-74.883 166.4-166.4 166.4S89.6 347.518 89.6 256 164.482 89.6 256 89.6c15.6 0 31.2 2.082 45.764 6.241L334 63.6C310.082 53.2 284.082 48 256 48 141.6 48 48 141.6 48 256s93.6 208 208 208 208-93.6 208-208h-41.6z'/%3E%3C/svg%3E\");\n        width: 16px;\n        heoght: 16px;\n        fill: #62C67B; }\n  #page-integrations-detail .integrations-detail__actions {\n    -ms-flex: 0 0 192px;\n        flex: 0 0 192px;\n    margin-left: 46px; }\n  #page-integrations-detail .integrations-detail__actions-inner {\n    position: -webkit-sticky;\n    position: sticky;\n    top: 20px; }\n    #page-integrations-detail .integrations-detail__actions-inner h5 {\n      margin-top: 38px;\n      color: #73849A;\n      font-size: 10px;\n      text-transform: uppercase;\n      letter-spacing: 0.08em;\n      font-weight: 700;\n      margin-bottom: 4px; }\n    #page-integrations-detail .integrations-detail__actions-inner ul {\n      list-style-type: none;\n      margin: 0;\n      padding: 0; }\n    #page-integrations-detail .integrations-detail__actions-inner li + li {\n      margin-top: 4px; }\n    #page-integrations-detail .integrations-detail__actions-inner li a {\n      transition: 0.3s all;\n      border-bottom: 1px solid #B2CEFF; }\n      #page-integrations-detail .integrations-detail__actions-inner li a:hover {\n        border-bottom: 1px solid #5b768e; }\n  #page-integrations-detail .integrations-detail__cta {\n    background: #F3F7FF;\n    border-radius: 8px;\n    text-align: center;\n    padding: 16px; }\n    #page-integrations-detail .integrations-detail__cta span {\n      font-size: 13px;\n      line-height: 1.3;\n      display: block;\n      margin-bottom: 12px;\n      color: #637696; }\n    #page-integrations-detail .integrations-detail__cta .btn {\n      display: block;\n      width: 100%;\n      font-weight: 700;\n      font-size: 15px; }\n  #page-integrations-detail .integrations-detail__cta-secondary {\n    margin-top: 26px; }\n    #page-integrations-detail .integrations-detail__cta-secondary p {\n      font-weight: 500;\n      line-height: 17px;\n      font-size: 13px;\n      color: #637696; }\n    #page-integrations-detail .integrations-detail__cta-secondary .btn {\n      font-size: 13px;\n      font-weight: 700;\n      padding: 8px 13px 7px; }\n  #page-integrations-detail ul + .integrations-detail__cta-secondary {\n    border-top: 1px solid #EDF2F7;\n    padding-top: 26px; }\n  #page-integrations-detail .integrations-detail__form {\n    border-top: 1px solid #EDF2F7;\n    padding-top: 60px;\n    margin-top: 38px; }\n    #page-integrations-detail .integrations-detail__form h1 {\n      margin: 0 0 4px;\n      font-size: 26px;\n      font-weight: 600;\n      text-align: center; }\n    #page-integrations-detail .integrations-detail__form > p {\n      line-height: 28px;\n      font-size: 18px;\n      letter-spacing: -0.02em;\n      color: #637696;\n      max-width: 400px;\n      margin-left: auto;\n      margin-right: auto;\n      margin-bottom: 26px;\n      text-align: center; }\n    #page-integrations-detail .integrations-detail__form .hs_submit {\n      text-align: center; }\n\n@media (max-width: 1220px) {\n  .integrations-card--featured ul {\n    display: -ms-flexbox;\n    display: flex;\n    -ms-flex-wrap: wrap;\n        flex-wrap: wrap;\n    position: relative;\n    top: 0;\n    right: 0;\n    text-align: left;\n    margin: 8px 0 0; }\n  .integrations-card--featured li {\n    margin-right: 4px; }\n  .integrations-featured .container,\n  .integrations-list .container {\n    width: 100%; } }\n\n@media (max-width: 992px) {\n  .integrations-card:not(.integrations-card--featured) {\n    -ms-flex: 0 0 calc(50% - 16px);\n        flex: 0 0 calc(50% - 16px); } }\n\n@media (min-width: 768px) {\n  .integrations-list__filter-inner {\n    position: -webkit-sticky;\n    position: sticky;\n    top: 38px; } }\n\n@media (max-width: 768px) {\n  .integrations-card--featured {\n    -ms-flex: 0 0 86%;\n        flex: 0 0 86%;\n    max-width: 420px; }\n    .integrations-card--featured:last-child {\n      margin-right: 18px; }\n    .integrations-card--featured p {\n      font-size: 13px;\n      line-height: 18px; }\n  #page-integrations {\n    background-size: 1160px; }\n    #page-integrations .integrations-featured {\n      padding: 0 16px 0;\n      overflow-x: auto;\n      -webkit-overflow-scrolling: touch;\n      -ms-overflow-style: -ms-autohiding-scrollbar; }\n      #page-integrations .integrations-featured .container {\n        padding: 0; }\n      #page-integrations .integrations-featured__list:after {\n        content: '';\n        display: block;\n        height: 10px;\n        -ms-flex: 0 0 1px;\n            flex: 0 0 1px; }\n      #page-integrations .integrations-featured::-webkit-scrollbar {\n        display: none; }\n    #page-integrations .integrations-hero {\n      margin: 60px 0; }\n      #page-integrations .integrations-hero h1 {\n        font-size: 38px; }\n      #page-integrations .integrations-hero p {\n        font-size: 20px;\n        max-width: 340px;\n        margin-left: auto;\n        margin-right: auto; }\n    #page-integrations .integrations-list {\n      margin: 136px 0 80px; }\n    #page-integrations .integrations-list__results-header h4 > a {\n      display: inline-block; }\n    #page-integrations .integrations-list__results-category .integrations-list__results-row {\n      -ms-flex-wrap: nowrap;\n          flex-wrap: nowrap;\n      width: 100vw;\n      margin-left: -18px;\n      margin-right: -16px;\n      overflow-x: auto;\n      -webkit-overflow-scrolling: touch;\n      -ms-overflow-style: -ms-autohiding-scrollbar; }\n      #page-integrations .integrations-list__results-category .integrations-list__results-row::-webkit-scrollbar {\n        display: none; }\n      #page-integrations .integrations-list__results-category .integrations-list__results-row .integrations-card:first-child {\n        margin-left: 16px; }\n      #page-integrations .integrations-list__results-category .integrations-list__results-row .integrations-card:last-child {\n        margin-right: 16px; }\n      #page-integrations .integrations-list__results-category .integrations-list__results-row .integrations-card {\n        -ms-flex: 0 0 40%;\n            flex: 0 0 40%;\n        max-width: 420px; }\n      #page-integrations .integrations-list__results-category .integrations-list__results-row:after {\n        content: '';\n        display: block;\n        height: 10px;\n        -ms-flex: 0 0 1px;\n            flex: 0 0 1px; }\n    #page-integrations .integrations-list__filter {\n      padding-bottom: 46px;\n      position: relative;\n      -ms-flex: 0;\n          flex: 0; }\n    #page-integrations .integrations-list__filter-inner {\n      height: 100%; }\n    #page-integrations .integrations-list__filter-menu {\n      display: -ms-flexbox;\n      display: flex;\n      position: absolute;\n      top: -90px;\n      width: calc(100vw - 32px); }\n    #page-integrations .integrations-searchbox {\n      -ms-flex: 1;\n          flex: 1; }\n      #page-integrations .integrations-searchbox input {\n        font-size: 16px; }\n    #page-integrations .integrations-filter-toggle {\n      display: -ms-flexbox;\n      display: flex; }\n    #page-integrations .integrations-toggles {\n      margin-top: 0; }\n    #page-integrations .integrations-list__filter-facets {\n      position: relative;\n      top: 0;\n      height: 100%;\n      width: 200px;\n      transition: -webkit-transform 0.3s;\n      transition: transform 0.3s;\n      transition: transform 0.3s, -webkit-transform 0.3s;\n      -webkit-transform: translateX(-200px);\n              transform: translateX(-200px); }\n      #page-integrations .integrations-list__filter-facets > div + div {\n        margin-top: 20px; }\n    #page-integrations .integrations-list__filter-facets-inner {\n      position: -webkit-sticky;\n      position: sticky;\n      top: 72px; }\n    #page-integrations .show-mobile-filters .integrations-list__filter-facets {\n      -webkit-transform: translateX(0);\n              transform: translateX(0); }\n    #page-integrations .integrations-list__results {\n      margin-left: -196px;\n      transition: -webkit-transform 0.3s;\n      transition: transform 0.3s;\n      transition: transform 0.3s, -webkit-transform 0.3s;\n      -webkit-transform: translateX(0);\n              transform: translateX(0);\n      position: relative; }\n      #page-integrations .integrations-list__results .click-region {\n        display: none; }\n    #page-integrations .integrations-list__results.loading > *:not(.loader) {\n      transition: opacity 0.3s;\n      opacity: 0 !important; }\n    #page-integrations .integrations-list__results.loading .loader {\n      display: block;\n      position: absolute;\n      top: 0;\n      left: 50%;\n      margin-left: -15px;\n      width: 30px; }\n      #page-integrations .integrations-list__results.loading .loader:before {\n        content: '';\n        display: block;\n        padding-top: 100%; }\n    #page-integrations .integrations-list__results.loading .circular {\n      -webkit-animation: rotate 2s linear infinite;\n              animation: rotate 2s linear infinite;\n      height: 100%;\n      -webkit-transform-origin: center center;\n              transform-origin: center center;\n      width: 100%;\n      position: absolute;\n      top: 0;\n      bottom: 0;\n      left: 0;\n      right: 0;\n      margin: auto; }\n    #page-integrations .integrations-list__results.loading .path {\n      stroke-dasharray: 1, 200;\n      stroke-dashoffset: 0;\n      -webkit-animation: dash 1.5s ease-in-out infinite;\n              animation: dash 1.5s ease-in-out infinite;\n      stroke-linecap: round;\n      stroke: #3880FF;\n      stroke-width: 4px; }\n  @-webkit-keyframes rotate {\n    100% {\n      -webkit-transform: rotate(360deg);\n              transform: rotate(360deg); } }\n  @keyframes rotate {\n    100% {\n      -webkit-transform: rotate(360deg);\n              transform: rotate(360deg); } }\n  @-webkit-keyframes dash {\n    0% {\n      stroke-dasharray: 1, 200;\n      stroke-dashoffset: 0; }\n    50% {\n      stroke-dasharray: 89, 200;\n      stroke-dashoffset: -35px; }\n    100% {\n      stroke-dasharray: 89, 200;\n      stroke-dashoffset: -124px; } }\n  @keyframes dash {\n    0% {\n      stroke-dasharray: 1, 200;\n      stroke-dashoffset: 0; }\n    50% {\n      stroke-dasharray: 89, 200;\n      stroke-dashoffset: -35px; }\n    100% {\n      stroke-dasharray: 89, 200;\n      stroke-dashoffset: -124px; } }\n    #page-integrations .show-mobile-filters .integrations-list__results {\n      -webkit-transform: translateX(200px);\n              transform: translateX(200px); }\n      #page-integrations .show-mobile-filters .integrations-list__results .click-region {\n        display: block;\n        width: 100%;\n        height: 100%;\n        z-index: 999;\n        position: absolute;\n        top: 0;\n        left: 0; }\n  #page-integrations-detail .integrations-detail__wrapper {\n    margin-bottom: 90px;\n    max-width: 500px; }\n  #page-integrations-detail .integrations-detail__nav {\n    margin-bottom: 30px; }\n  #page-integrations-detail .integrations-detail__header {\n    -ms-flex-direction: column;\n        flex-direction: column;\n    -ms-flex-align: center;\n        align-items: center;\n    text-align: center;\n    padding-bottom: 0;\n    border-bottom: 0; }\n    #page-integrations-detail .integrations-detail__header p {\n      max-width: 500px; }\n    #page-integrations-detail .integrations-detail__header ul {\n      -ms-flex-pack: center;\n          justify-content: center; }\n  #page-integrations-detail .integrations-detail__logo {\n    margin-right: 0;\n    margin-bottom: 40px;\n    width: 132px;\n    height: 118px;\n    -ms-flex: 0 0 118px;\n        flex: 0 0 118px; }\n    #page-integrations-detail .integrations-detail__logo img {\n      max-height: 50px;\n      max-width: 120px; }\n  #page-integrations-detail .integrations-detail__logo + div {\n    -ms-flex: 0;\n        flex: 0; }\n  #page-integrations-detail .integrations-detail__body {\n    position: relative;\n    padding-top: 140px;\n    -ms-flex-direction: column;\n        flex-direction: column; }\n  #page-integrations-detail .integrations-detail__actions {\n    margin-left: 0;\n    -ms-flex: none;\n        flex: none; }\n  #page-integrations-detail .integrations-detail__cta {\n    position: absolute;\n    top: 0;\n    left: 0;\n    width: 100%; }\n  #page-integrations-detail .integrations-detail__actions-inner {\n    position: static; }\n  #page-integrations-detail .integrations-detail__cta-secondary {\n    display: none; } }\n\n/*# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImluZGV4LmNzcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtFQUNFLHFCQUFxQjtFQUNyQixlQUFlO0VBQ2YsbUJBQW1CO0VBQ25CLCtCQUEyQjtNQUEzQiwyQkFBMkI7RUFDM0IsbUJBQW1CO0VBQ25CLG9CQUFvQjtFQUNwQiwwRUFBMEU7RUFDMUUsbUJBQW1CLEVBQUU7RUFDckI7SUFDRSxnQkFBZ0I7SUFDaEIsaUJBQWlCO0lBQ2pCLFlBQVksRUFBRTtFQUNoQjtJQUNFLDJFQUEyRSxFQUFFO0VBQy9FO0lBQ0UsMFlBQTBZO0lBQzFZLG1CQUFtQjtJQUNuQixPQUFPO0lBQ1AsU0FBUyxFQUFFO0VBQ2I7SUFDRSwrQkFBMkI7UUFBM0IsMkJBQTJCO0lBQzNCLGNBQWMsRUFBRTtJQUNoQjtNQUNFLGdCQUFnQjtNQUNoQixrQkFBa0I7TUFDbEIsaUJBQWlCO01BQ2pCLGVBQWU7TUFDZixtQkFBbUIsRUFBRTtJQUN2QjtNQUNFLGdCQUFnQjtNQUNoQixrQkFBa0I7TUFDbEIsZUFBZTtNQUNmLGlCQUFpQixFQUFFO0lBQ3JCO01BQ0Usc0JBQXNCO01BQ3RCLGNBQWM7TUFDZCxXQUFXO01BQ1gsbUJBQW1CO01BQ25CLFVBQVU7TUFDVixZQUFZO01BQ1osa0JBQWtCLEVBQUU7SUFDdEI7TUFDRSxtQkFBbUIsRUFBRTtJQUN2QjtNQUNFLGFBQWE7TUFDYixxQkFBYztNQUFkLGNBQWM7TUFDZCwyQkFBdUI7VUFBdkIsdUJBQXVCO01BQ3ZCLHNCQUF3QjtVQUF4Qix3QkFBd0I7TUFDeEIsc0JBQXdCO1VBQXhCLHdCQUF3QixFQUFFO01BQzFCO1FBQ0UsaUJBQWlCO1FBQ2pCLGlCQUFpQixFQUFFO0VBQ3pCO0lBQ0UsY0FBYztJQUNkLGlCQUFpQjtJQUNqQixtQkFBbUIsRUFBRTtFQUN2QjtJQUNFLGNBQWM7SUFDZCxZQUFZO0lBQ1oscUJBQWM7SUFBZCxjQUFjO0lBQ2Qsc0JBQXdCO1FBQXhCLHdCQUF3QjtJQUN4Qix1QkFBb0I7UUFBcEIsb0JBQW9CO0lBQ3BCLGlDQUFpQyxFQUFFO0lBQ25DO01BQ0UsaUJBQWlCO01BQ2pCLGlCQUFpQixFQUFFOztBQUV6QjtFQUNFLGlCQUFpQjtFQUNqQixlQUFlO0VBQ2YsZUFBZTtFQUNmLHVCQUF1QjtFQUN2QiwwQkFBMEI7RUFDMUIsZUFBZTtFQUNmLDBCQUEwQjtFQUMxQixxQkFBcUI7RUFDckIsaUJBQWlCO0VBQ2pCLDRCQUFxQjtFQUFyQixxQkFBcUI7RUFDckIsdUJBQW9CO01BQXBCLG9CQUFvQixFQUFFO0VBQ3RCO0lBQ0UsMEJBQTBCO0lBQzFCLG1CQUFtQjtJQUNuQixZQUFZO0lBQ1osYUFBYTtJQUNiLG1CQUFtQixFQUFFO0lBQ3JCO01BQ0UsbUJBQW1CO01BQ25CLFNBQVM7TUFDVCxvQ0FBNEI7Y0FBNUIsNEJBQTRCO01BQzVCLFVBQVU7TUFDVixZQUFZO01BQ1osYUFBYTtNQUNiLFdBQVcsRUFBRTs7QUFFbkI7RUFDRSxtQkFBbUIsRUFBRTtFQUNyQjtJQUNFLFlBQVk7SUFDWixlQUFlO0lBQ2YsbUJBQW1CO0lBQ25CLE9BQU87SUFDUCxRQUFRO0lBQ1IsWUFBWTtJQUNaLGNBQWM7SUFDZCxZQUFZO0lBQ1osOERBQThEO0lBQzlELDRCQUE0QjtJQUM1Qix3QkFBd0I7SUFDeEIsa0NBQWtDO0lBQ2xDLGNBQWMsRUFBRTtFQUNsQjtJQUNFLGVBQWUsRUFBRTtFQUNuQjtJQUNFLGNBQWMsRUFBRTtFQUNsQjtJQUNFLG1CQUFtQjtJQUNuQixnQkFBZ0IsRUFBRTtJQUNsQjtNQUNFLGdCQUFnQjtNQUNoQix3QkFBd0I7TUFDeEIsZUFBZSxFQUFFO0lBQ25CO01BQ0UsZ0JBQWdCO01BQ2hCLHdCQUF3QjtNQUN4QixlQUFlO01BQ2YsNkRBQTZELEVBQUU7RUFDbkU7SUFDRSxxQkFBYztJQUFkLGNBQWM7SUFDZCxrQkFBa0IsRUFBRTtFQUN0QjtJQUNFLHNCQUFzQixFQUFFO0VBQzFCO0lBQ0UscUJBQWM7SUFBZCxjQUFjO0lBQ2QsdUJBQStCO1FBQS9CLCtCQUErQixFQUFFO0VBQ25DO0lBQ0Usb0JBQWdCO1FBQWhCLGdCQUFnQixFQUFFO0lBQ2xCO01BQ0UsaUJBQWlCO01BQ2pCLGdCQUFnQjtNQUNoQix1QkFBdUI7TUFDdkIsMEJBQTBCO01BQzFCLGVBQWU7TUFDZixvQkFBb0IsRUFBRTtFQUMxQjtJQUNFLGNBQWMsRUFBRTtFQUNsQjtJQUNFLG1CQUFtQixFQUFFO0lBQ3JCO01BQ0UsbUJBQW1CO01BQ25CLFNBQVM7TUFDVCxvQ0FBNEI7Y0FBNUIsNEJBQTRCLEVBQUU7TUFDOUI7UUFDRSxlQUFlO1FBQ2YsV0FBVyxFQUFFO01BQ2Y7UUFDRSx5QkFBeUI7UUFDekIsWUFBWTtRQUNaLHFCQUFxQjtRQUNyQiwrQkFBK0I7UUFDL0IsV0FBVyxFQUFFO0lBQ2pCO01BQ0UscUJBQXFCO01BQ3JCLGFBQWE7TUFDYixjQUFjO01BQ2Qsb0JBQW9CO01BQ3BCLGdCQUFnQjtNQUNoQixrQkFBa0I7TUFDbEIsZUFBZTtNQUNmLFlBQVksRUFBRTtNQUNkO1FBQ0UsZUFBZSxFQUFFO01BRG5CO1FBQ0UsZUFBZSxFQUFFO01BRG5CO1FBQ0UsZUFBZSxFQUFFO0lBQ3JCO01BQ0UsV0FBVztNQUNYLG9CQUFvQjtNQUNwQixnQkFBZ0IsRUFBRTtFQUN0QjtJQUNFLGNBQWM7SUFDZCxnQkFBZ0I7SUFDaEIsbUJBQWU7UUFBZixlQUFlO0lBQ2YsdUJBQW9CO1FBQXBCLG9CQUFvQjtJQUNwQixtQkFBMEI7UUFBMUIsMEJBQTBCO0lBQzFCLGVBQWU7SUFDZixnQkFBZ0IsRUFBRTtFQUNwQjs7SUFFRSw2REFBNkQ7SUFDN0QsaUJBQWlCO0lBQ2pCLGVBQWU7SUFDZixnQkFBZ0I7SUFDaEIsZUFBZSxFQUFFO0VBQ25CO0lBQ0UsZUFBZSxFQUFFO0lBQ2pCOzs7TUFHRSxnQkFBZ0IsRUFBRTtJQUNwQjtNQUNFLGdCQUFnQixFQUFFO0lBQ3BCOztNQUVFLGlCQUFpQixFQUFFO0VBQ3ZCO0lBQ0Usc0JBQXNCO0lBQ3RCLFVBQVU7SUFDVixXQUFXO0lBQ1gseUJBQXlCO0lBQ3pCLGVBQWUsRUFBRTtJQUNqQjtNQUNFLHVCQUF1QjtNQUN2QixhQUFhO01BQ2IscUJBQWM7TUFBZCxjQUFjO01BQ2QsdUJBQW9CO1VBQXBCLG9CQUFvQjtNQUNwQixjQUFjO01BQ2Qsc0JBQXNCLEVBQUU7TUFDeEI7UUFDRSxlQUFlLEVBQUU7SUFDckI7TUFDRSxpQkFBaUIsRUFBRTtJQUNyQjtNQUNFLHFCQUFxQjtNQUNyQixlQUFlO01BQ2Ysa0JBQWtCO01BQ2xCLCtDQUErQyxFQUFFO0lBQ25EO01BQ0Usb0JBQW9CO01BQ3BCLGFBQWEsRUFBRTtNQUNmO1FBQ0UscUJBQXFCLEVBQUU7RUFDN0I7SUFDRSxjQUFjLEVBQUU7RUFDbEI7SUFDRSxrQkFBa0I7SUFDbEIsa0JBQVk7UUFBWixZQUFZO0lBQ1osaUJBQWlCLEVBQUU7SUFDbkI7TUFDRSxjQUFjLEVBQUU7RUFDcEI7SUFDRSxvQkFBb0IsRUFBRTtFQUN4QjtJQUNFLHFCQUFjO0lBQWQsY0FBYztJQUNkLHVCQUErQjtRQUEvQiwrQkFBK0I7SUFDL0IseUJBQXNCO1FBQXRCLHNCQUFzQjtJQUN0QixtQkFBbUIsRUFBRTtJQUNyQjtNQUNFLGdCQUFnQjtNQUNoQixpQkFBaUI7TUFDakIsY0FBYztNQUNkLG1CQUFtQixFQUFFO0lBQ3ZCO01BQ0UsaUJBQWlCO01BQ2pCLGdCQUFnQjtNQUNoQiw2REFBNkQsRUFBRTtNQUMvRDtRQUNFLG1DQUEyQjtRQUEzQiwyQkFBMkI7UUFBM0IsbURBQTJCO1FBQzNCLHFDQUE2QjtnQkFBN0IsNkJBQTZCLEVBQUU7TUFDakM7UUFDRSx1Q0FBK0I7Z0JBQS9CLCtCQUErQixFQUFFO0lBQ3JDO01BQ0Usa0JBQWtCO01BQ2xCLGdCQUFnQjtNQUNoQixjQUFjLEVBQUU7RUFDcEI7SUFDRSxxQkFBYztJQUFkLGNBQWM7SUFDZCxvQkFBZ0I7UUFBaEIsZ0JBQWdCO0lBQ2hCLGtCQUFrQixFQUFFO0VBQ3RCO0lBQ0UscUJBQWM7SUFBZCxjQUFjO0lBQ2Qsb0JBQWdCO1FBQWhCLGdCQUFnQjtJQUNoQixrQkFBa0I7SUFDbEIsbUJBQW1CLEVBQUU7RUFDdkI7SUFDRSxhQUFhO0lBQ2IsaUJBQWlCLEVBQUU7RUFDckI7SUFDRSxjQUFjO0lBQ2Qsb0JBQW9CO0lBQ3BCLG9CQUFvQjtJQUNwQiwyQkFBdUI7UUFBdkIsdUJBQXVCO0lBQ3ZCLHNCQUF3QjtRQUF4Qix3QkFBd0I7SUFDeEIsY0FBYztJQUNkLGlCQUFpQjtJQUNqQixrQkFBa0I7SUFDbEIsbUJBQW1CLEVBQUU7SUFDckI7TUFDRSxtQkFBbUI7TUFDbkIsaUJBQWlCO01BQ2pCLGlCQUFpQjtNQUNqQixrQkFBa0I7TUFDbEIsbUJBQW1CO01BQ25CLGdCQUFnQjtNQUNoQixpQkFBaUI7TUFDakIsa0JBQWtCO01BQ2xCLFlBQVksRUFBRTtJQUNoQjtNQUNFLHFCQUFjO01BQWQsY0FBYyxFQUFFO0lBQ2xCO01BQ0UsbUJBQW1CLEVBQUU7RUFDekI7SUFDRSxjQUFjLEVBQUU7RUFDbEI7SUFDRSxtQkFBbUI7SUFDbkIsZUFBZTtJQUNmLG9CQUFvQjtJQUNwQixnQkFBZ0I7SUFDaEIsWUFBWSxFQUFFO0lBQ2Q7TUFDRSxpQkFBaUIsRUFBRTtFQUN2QjtJQUNFLGFBQWE7SUFDYix3QkFBd0I7SUFDeEIsZ0JBQWdCO0lBQ2hCLGtCQUFrQjtJQUNsQixpQkFBaUI7SUFDakIsK0RBQStELEVBQUU7SUFDakU7TUFDRSxZQUFZLEVBQUU7O0FBRXBCO0VBQ0UsOERBQThEO0VBQzlELDRCQUE0QjtFQUM1Qix3QkFBd0I7RUFDeEIsbUNBQW1DLEVBQUU7RUFDckM7SUFDRSxpQkFBaUI7SUFDakIsb0JBQW9CLEVBQUU7SUFDdEI7TUFDRSw2REFBNkQ7TUFDN0QsZ0JBQWdCO01BQ2hCLGlCQUFpQjtNQUNqQixxQkFBYztNQUFkLGNBQWM7TUFDZCx1QkFBb0I7VUFBcEIsb0JBQW9CLEVBQUU7TUFDdEI7UUFDRSxtQ0FBMkI7UUFBM0IsMkJBQTJCO1FBQTNCLG1EQUEyQjtRQUMzQixvQ0FBNEI7Z0JBQTVCLDRCQUE0QjtRQUM1QixrQkFBa0IsRUFBRTtNQUN0QjtRQUNFLHlDQUFpQztnQkFBakMsaUNBQWlDLEVBQUU7RUFDekM7SUFDRSxpQkFBaUI7SUFDakIsa0JBQWtCO0lBQ2xCLG1CQUFtQjtJQUNuQixxQkFBcUIsRUFBRTtFQUN6QjtJQUNFLHFCQUFxQjtJQUNyQixvQkFBb0I7SUFDcEIsaUNBQWlDO0lBQ2pDLHFCQUFjO0lBQWQsY0FBYyxFQUFFO0lBQ2hCO01BQ0UsVUFBVTtNQUNWLGdCQUFnQjtNQUNoQixpQkFBaUIsRUFBRTtJQUNyQjtNQUNFLGtCQUFrQjtNQUNsQixnQkFBZ0I7TUFDaEIsd0JBQXdCO01BQ3hCLGVBQWU7TUFDZixpQkFBaUI7TUFDakIsbUJBQW1CLEVBQUU7SUFDdkI7TUFDRSxVQUFVO01BQ1YsV0FBVztNQUNYLHNCQUFzQjtNQUN0QixxQkFBYztNQUFkLGNBQWMsRUFBRTtJQUNsQjtNQUNFLGdCQUFnQjtNQUNoQixxQkFBcUIsRUFBRTtNQUN2QjtRQUNFLGlCQUFpQixFQUFFO01BQ3JCO1FBQ0UsbUJBQW1CLEVBQUU7RUFDM0I7SUFDRSxvQkFBb0I7SUFDcEIsNEVBQTRFO0lBQzVFLG1CQUFtQjtJQUNuQixhQUFhO0lBQ2IsY0FBYztJQUNkLG9CQUFnQjtRQUFoQixnQkFBZ0I7SUFDaEIsbUJBQW1CO0lBQ25CLHFCQUFjO0lBQWQsY0FBYztJQUNkLHNCQUF3QjtRQUF4Qix3QkFBd0I7SUFDeEIsdUJBQW9CO1FBQXBCLG9CQUFvQixFQUFFO0lBQ3RCO01BQ0UsaUJBQWlCO01BQ2pCLGlCQUFpQixFQUFFO0VBQ3ZCO0lBQ0Usa0JBQVk7UUFBWixZQUFZO0lBQ1oscUJBQWM7SUFBZCxjQUFjO0lBQ2QsMkJBQXVCO1FBQXZCLHVCQUF1QjtJQUN2QixzQkFBd0I7UUFBeEIsd0JBQXdCLEVBQUU7RUFDNUI7SUFDRSxxQkFBYztJQUFkLGNBQWMsRUFBRTtFQUNsQjtJQUNFLGtCQUFZO1FBQVosWUFBWSxFQUFFO0lBQ2Q7Ozs7OztNQU1FLGdCQUFnQjtNQUNoQixpQkFBaUIsRUFBRTtJQUNyQjs7TUFFRSxnQkFBZ0I7TUFDaEIsaUJBQWlCO01BQ2pCLGVBQWU7TUFDZixvQkFBb0IsRUFBRTtNQUN0Qjs7UUFFRSxpQkFBaUIsRUFBRTtJQUN2QjtNQUNFLGVBQWU7TUFDZixXQUFXLEVBQUU7SUFDZjtNQUNFLHNCQUFzQjtNQUN0QixtQkFBbUI7TUFDbkIsbUJBQW1CLEVBQUU7TUFDckI7UUFDRSxpQkFBaUIsRUFBRTtNQUNyQjtRQUNFLG1CQUFtQjtRQUNuQixTQUFTO1FBQ1QsUUFBUTtRQUNSLHVlQUF1ZTtRQUN2ZSxZQUFZO1FBQ1osYUFBYTtRQUNiLGNBQWMsRUFBRTtFQUN0QjtJQUNFLG9CQUFnQjtRQUFoQixnQkFBZ0I7SUFDaEIsa0JBQWtCLEVBQUU7RUFDdEI7SUFDRSx5QkFBaUI7SUFBakIsaUJBQWlCO0lBQ2pCLFVBQVUsRUFBRTtJQUNaO01BQ0UsaUJBQWlCO01BQ2pCLGVBQWU7TUFDZixnQkFBZ0I7TUFDaEIsMEJBQTBCO01BQzFCLHVCQUF1QjtNQUN2QixpQkFBaUI7TUFDakIsbUJBQW1CLEVBQUU7SUFDdkI7TUFDRSxzQkFBc0I7TUFDdEIsVUFBVTtNQUNWLFdBQVcsRUFBRTtJQUNmO01BQ0UsZ0JBQWdCLEVBQUU7SUFDcEI7TUFDRSxxQkFBcUI7TUFDckIsaUNBQWlDLEVBQUU7TUFDbkM7UUFDRSxpQ0FBaUMsRUFBRTtFQUN6QztJQUNFLG9CQUFvQjtJQUNwQixtQkFBbUI7SUFDbkIsbUJBQW1CO0lBQ25CLGNBQWMsRUFBRTtJQUNoQjtNQUNFLGdCQUFnQjtNQUNoQixpQkFBaUI7TUFDakIsZUFBZTtNQUNmLG9CQUFvQjtNQUNwQixlQUFlLEVBQUU7SUFDbkI7TUFDRSxlQUFlO01BQ2YsWUFBWTtNQUNaLGlCQUFpQjtNQUNqQixnQkFBZ0IsRUFBRTtFQUN0QjtJQUNFLGlCQUFpQixFQUFFO0lBQ25CO01BQ0UsaUJBQWlCO01BQ2pCLGtCQUFrQjtNQUNsQixnQkFBZ0I7TUFDaEIsZUFBZSxFQUFFO0lBQ25CO01BQ0UsZ0JBQWdCO01BQ2hCLGlCQUFpQjtNQUNqQixzQkFBc0IsRUFBRTtFQUM1QjtJQUNFLDhCQUE4QjtJQUM5QixrQkFBa0IsRUFBRTtFQUN0QjtJQUNFLDhCQUE4QjtJQUM5QixrQkFBa0I7SUFDbEIsaUJBQWlCLEVBQUU7SUFDbkI7TUFDRSxnQkFBZ0I7TUFDaEIsZ0JBQWdCO01BQ2hCLGlCQUFpQjtNQUNqQixtQkFBbUIsRUFBRTtJQUN2QjtNQUNFLGtCQUFrQjtNQUNsQixnQkFBZ0I7TUFDaEIsd0JBQXdCO01BQ3hCLGVBQWU7TUFDZixpQkFBaUI7TUFDakIsa0JBQWtCO01BQ2xCLG1CQUFtQjtNQUNuQixvQkFBb0I7TUFDcEIsbUJBQW1CLEVBQUU7SUFDdkI7TUFDRSxtQkFBbUIsRUFBRTs7QUFFM0I7RUFDRTtJQUNFLHFCQUFjO0lBQWQsY0FBYztJQUNkLG9CQUFnQjtRQUFoQixnQkFBZ0I7SUFDaEIsbUJBQW1CO0lBQ25CLE9BQU87SUFDUCxTQUFTO0lBQ1QsaUJBQWlCO0lBQ2pCLGdCQUFnQixFQUFFO0VBQ3BCO0lBQ0Usa0JBQWtCLEVBQUU7RUFDdEI7O0lBRUUsWUFBWSxFQUFFLEVBQUU7O0FBRXBCO0VBQ0U7SUFDRSwrQkFBMkI7UUFBM0IsMkJBQTJCLEVBQUUsRUFBRTs7QUFFbkM7RUFDRTtJQUNFLHlCQUFpQjtJQUFqQixpQkFBaUI7SUFDakIsVUFBVSxFQUFFLEVBQUU7O0FBRWxCO0VBQ0U7SUFDRSxrQkFBYztRQUFkLGNBQWM7SUFDZCxpQkFBaUIsRUFBRTtJQUNuQjtNQUNFLG1CQUFtQixFQUFFO0lBQ3ZCO01BQ0UsZ0JBQWdCO01BQ2hCLGtCQUFrQixFQUFFO0VBQ3hCO0lBQ0Usd0JBQXdCLEVBQUU7SUFDMUI7TUFDRSxrQkFBa0I7TUFDbEIsaUJBQWlCO01BQ2pCLGtDQUFrQztNQUNsQyw2Q0FBNkMsRUFBRTtNQUMvQztRQUNFLFdBQVcsRUFBRTtNQUNmO1FBQ0UsWUFBWTtRQUNaLGVBQWU7UUFDZixhQUFhO1FBQ2Isa0JBQWM7WUFBZCxjQUFjLEVBQUU7TUFDbEI7UUFDRSxjQUFjLEVBQUU7SUFDcEI7TUFDRSxlQUFlLEVBQUU7TUFDakI7UUFDRSxnQkFBZ0IsRUFBRTtNQUNwQjtRQUNFLGdCQUFnQjtRQUNoQixpQkFBaUI7UUFDakIsa0JBQWtCO1FBQ2xCLG1CQUFtQixFQUFFO0lBQ3pCO01BQ0UscUJBQXFCLEVBQUU7SUFDekI7TUFDRSxzQkFBc0IsRUFBRTtJQUMxQjtNQUNFLHNCQUFrQjtVQUFsQixrQkFBa0I7TUFDbEIsYUFBYTtNQUNiLG1CQUFtQjtNQUNuQixvQkFBb0I7TUFDcEIsaUJBQWlCO01BQ2pCLGtDQUFrQztNQUNsQyw2Q0FBNkMsRUFBRTtNQUMvQztRQUNFLGNBQWMsRUFBRTtNQUNsQjtRQUNFLGtCQUFrQixFQUFFO01BQ3RCO1FBQ0UsbUJBQW1CLEVBQUU7TUFDdkI7UUFDRSxrQkFBYztZQUFkLGNBQWM7UUFDZCxpQkFBaUIsRUFBRTtNQUNyQjtRQUNFLFlBQVk7UUFDWixlQUFlO1FBQ2YsYUFBYTtRQUNiLGtCQUFjO1lBQWQsY0FBYyxFQUFFO0lBQ3BCO01BQ0UscUJBQXFCO01BQ3JCLG1CQUFtQjtNQUNuQixZQUFRO1VBQVIsUUFBUSxFQUFFO0lBQ1o7TUFDRSxhQUFhLEVBQUU7SUFDakI7TUFDRSxxQkFBYztNQUFkLGNBQWM7TUFDZCxtQkFBbUI7TUFDbkIsV0FBVztNQUNYLDBCQUEwQixFQUFFO0lBQzlCO01BQ0UsWUFBUTtVQUFSLFFBQVEsRUFBRTtNQUNWO1FBQ0UsZ0JBQWdCLEVBQUU7SUFDdEI7TUFDRSxxQkFBYztNQUFkLGNBQWMsRUFBRTtJQUNsQjtNQUNFLGNBQWMsRUFBRTtJQUNsQjtNQUNFLG1CQUFtQjtNQUNuQixPQUFPO01BQ1AsYUFBYTtNQUNiLGFBQWE7TUFDYixtQ0FBMkI7TUFBM0IsMkJBQTJCO01BQTNCLG1EQUEyQjtNQUMzQixzQ0FBOEI7Y0FBOUIsOEJBQThCLEVBQUU7TUFDaEM7UUFDRSxpQkFBaUIsRUFBRTtJQUN2QjtNQUNFLHlCQUFpQjtNQUFqQixpQkFBaUI7TUFDakIsVUFBVSxFQUFFO0lBQ2Q7TUFDRSxpQ0FBeUI7Y0FBekIseUJBQXlCLEVBQUU7SUFDN0I7TUFDRSxvQkFBb0I7TUFDcEIsbUNBQTJCO01BQTNCLDJCQUEyQjtNQUEzQixtREFBMkI7TUFDM0IsaUNBQXlCO2NBQXpCLHlCQUF5QjtNQUN6QixtQkFBbUIsRUFBRTtNQUNyQjtRQUNFLGNBQWMsRUFBRTtJQUNwQjtNQUNFLHlCQUF5QjtNQUN6QixzQkFBc0IsRUFBRTtJQUMxQjtNQUNFLGVBQWU7TUFDZixtQkFBbUI7TUFDbkIsT0FBTztNQUNQLFVBQVU7TUFDVixtQkFBbUI7TUFDbkIsWUFBWSxFQUFFO01BQ2Q7UUFDRSxZQUFZO1FBQ1osZUFBZTtRQUNmLGtCQUFrQixFQUFFO0lBQ3hCO01BQ0UsNkNBQXFDO2NBQXJDLHFDQUFxQztNQUNyQyxhQUFhO01BQ2Isd0NBQWdDO2NBQWhDLGdDQUFnQztNQUNoQyxZQUFZO01BQ1osbUJBQW1CO01BQ25CLE9BQU87TUFDUCxVQUFVO01BQ1YsUUFBUTtNQUNSLFNBQVM7TUFDVCxhQUFhLEVBQUU7SUFDakI7TUFDRSx5QkFBeUI7TUFDekIscUJBQXFCO01BQ3JCLGtEQUEwQztjQUExQywwQ0FBMEM7TUFDMUMsc0JBQXNCO01BQ3RCLGdCQUFnQjtNQUNoQixrQkFBa0IsRUFBRTtFQUN4QjtJQUNFO01BQ0Usa0NBQTBCO2NBQTFCLDBCQUEwQixFQUFFLEVBQUU7RUFGbEM7SUFDRTtNQUNFLGtDQUEwQjtjQUExQiwwQkFBMEIsRUFBRSxFQUFFO0VBQ2xDO0lBQ0U7TUFDRSx5QkFBeUI7TUFDekIscUJBQXFCLEVBQUU7SUFDekI7TUFDRSwwQkFBMEI7TUFDMUIseUJBQXlCLEVBQUU7SUFDN0I7TUFDRSwwQkFBMEI7TUFDMUIsMEJBQTBCLEVBQUUsRUFBRTtFQVRsQztJQUNFO01BQ0UseUJBQXlCO01BQ3pCLHFCQUFxQixFQUFFO0lBQ3pCO01BQ0UsMEJBQTBCO01BQzFCLHlCQUF5QixFQUFFO0lBQzdCO01BQ0UsMEJBQTBCO01BQzFCLDBCQUEwQixFQUFFLEVBQUU7SUFDaEM7TUFDRSxxQ0FBNkI7Y0FBN0IsNkJBQTZCLEVBQUU7TUFDL0I7UUFDRSxlQUFlO1FBQ2YsWUFBWTtRQUNaLGFBQWE7UUFDYixhQUFhO1FBQ2IsbUJBQW1CO1FBQ25CLE9BQU87UUFDUCxRQUFRLEVBQUU7RUFDaEI7SUFDRSxvQkFBb0I7SUFDcEIsaUJBQWlCLEVBQUU7RUFDckI7SUFDRSxvQkFBb0IsRUFBRTtFQUN4QjtJQUNFLDJCQUF1QjtRQUF2Qix1QkFBdUI7SUFDdkIsdUJBQW9CO1FBQXBCLG9CQUFvQjtJQUNwQixtQkFBbUI7SUFDbkIsa0JBQWtCO0lBQ2xCLGlCQUFpQixFQUFFO0lBQ25CO01BQ0UsaUJBQWlCLEVBQUU7SUFDckI7TUFDRSxzQkFBd0I7VUFBeEIsd0JBQXdCLEVBQUU7RUFDOUI7SUFDRSxnQkFBZ0I7SUFDaEIsb0JBQW9CO0lBQ3BCLGFBQWE7SUFDYixjQUFjO0lBQ2Qsb0JBQWdCO1FBQWhCLGdCQUFnQixFQUFFO0lBQ2xCO01BQ0UsaUJBQWlCO01BQ2pCLGlCQUFpQixFQUFFO0VBQ3ZCO0lBQ0UsWUFBUTtRQUFSLFFBQVEsRUFBRTtFQUNaO0lBQ0UsbUJBQW1CO0lBQ25CLG1CQUFtQjtJQUNuQiwyQkFBdUI7UUFBdkIsdUJBQXVCLEVBQUU7RUFDM0I7SUFDRSxlQUFlO0lBQ2YsZUFBVztRQUFYLFdBQVcsRUFBRTtFQUNmO0lBQ0UsbUJBQW1CO0lBQ25CLE9BQU87SUFDUCxRQUFRO0lBQ1IsWUFBWSxFQUFFO0VBQ2hCO0lBQ0UsaUJBQWlCLEVBQUU7RUFDckI7SUFDRSxjQUFjLEVBQUUsRUFBRSIsImZpbGUiOiJwYWdlcy9pbnRlZ3JhdGlvbnMvaW5kZXguY3NzIiwic291cmNlc0NvbnRlbnQiOlsiLmludGVncmF0aW9ucy1jYXJkIHtcbiAgdHJhbnNpdGlvbjogYWxsIDAuM3M7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIGZsZXg6IDAgMCBjYWxjKDI1JSAtIDE2cHgpO1xuICBtYXJnaW46IDAgOHB4IDE2cHg7XG4gIGJhY2tncm91bmQ6ICNGRkZGRkY7XG4gIGJveC1zaGFkb3c6IDAgM3B4IDEzcHggcmdiYSgwLCAwLCAwLCAwLjA4KSwgMCAycHggNHB4IHJnYmEoMCwgMCwgMCwgMC4wOCk7XG4gIGJvcmRlci1yYWRpdXM6IDhweDsgfVxuICAuaW50ZWdyYXRpb25zLWNhcmQgaDIge1xuICAgIGZvbnQtc2l6ZTogMTZweDtcbiAgICBmb250LXdlaWdodDogNjAwO1xuICAgIGNvbG9yOiAjMDAwOyB9XG4gIC5pbnRlZ3JhdGlvbnMtY2FyZDpob3ZlciB7XG4gICAgYm94LXNoYWRvdzogMCA4cHggMjRweCByZ2JhKDAsIDAsIDAsIDAuMDgpLCAwIDZweCAxMnB4IHJnYmEoMCwgMCwgMCwgMC4wOCk7IH1cbiAgLmludGVncmF0aW9ucy1jYXJkLS1wcmVtaWVyOmFmdGVyIHtcbiAgICBjb250ZW50OiB1cmwoXCJkYXRhOmltYWdlL3N2Zyt4bWwsJTNjc3ZnIHdpZHRoPSc1MicgaGVpZ2h0PSc1MCcgdmlld0JveD0nMCAwIDUyIDUwJyBmaWxsPSdub25lJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNlJTNjcGF0aCBkPSdNNTIgNDNMNSAwSDQ0QzQ4LjQxODMgMCA1MiAzLjU4MTcyIDUyIDhWNDNaJyBmaWxsPSclMjM4N0IxRjcnLyUzZSUzY3BhdGggZD0nTTQxIDEzLjY0NjRMNDQuOTAwOSAxNkw0My44NjkgMTEuNTYwNEw0Ny4zMTI1IDguNTc1MjhMNDIuNzcyOSA4LjE4NTQ0TDQxIDRMMzkuMjI2OCA4LjE4NTQ0TDM0LjY4NzUgOC41NzUyOEwzOC4xMzEgMTEuNTYwNEwzNy4wOTg4IDE2TDQxIDEzLjY0NjRaJyBmaWxsPSd3aGl0ZScvJTNlJTNjL3N2ZyUzZVwiKTtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgdG9wOiAwO1xuICAgIHJpZ2h0OiAwOyB9XG4gIC5pbnRlZ3JhdGlvbnMtY2FyZC0tZmVhdHVyZWQge1xuICAgIGZsZXg6IDAgMCBjYWxjKDMzJSAtIDEwcHgpO1xuICAgIHBhZGRpbmc6IDI0cHg7IH1cbiAgICAuaW50ZWdyYXRpb25zLWNhcmQtLWZlYXR1cmVkIGgxIHtcbiAgICAgIGZvbnQtc2l6ZTogMThweDtcbiAgICAgIGxpbmUtaGVpZ2h0OiAyNXB4O1xuICAgICAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgICAgIGNvbG9yOiAjMDAwMDAwO1xuICAgICAgbWFyZ2luLWJvdHRvbTogNnB4OyB9XG4gICAgLmludGVncmF0aW9ucy1jYXJkLS1mZWF0dXJlZCBwIHtcbiAgICAgIGZvbnQtc2l6ZTogMTRweDtcbiAgICAgIGxpbmUtaGVpZ2h0OiAyMnB4O1xuICAgICAgY29sb3I6ICM2Mzc2OTY7XG4gICAgICBtYXJnaW4tYm90dG9tOiAwOyB9XG4gICAgLmludGVncmF0aW9ucy1jYXJkLS1mZWF0dXJlZCB1bCB7XG4gICAgICBsaXN0LXN0eWxlLXR5cGU6IG5vbmU7XG4gICAgICBtYXJnaW4tdG9wOiAwO1xuICAgICAgcGFkZGluZzogMDtcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgIHRvcDogMjZweDtcbiAgICAgIHJpZ2h0OiAyNnB4O1xuICAgICAgdGV4dC1hbGlnbjogcmlnaHQ7IH1cbiAgICAuaW50ZWdyYXRpb25zLWNhcmQtLWZlYXR1cmVkIC5pbnRlZ3JhdGlvbnMtdGFnIHtcbiAgICAgIG1hcmdpbi1ib3R0b206IDJweDsgfVxuICAgIC5pbnRlZ3JhdGlvbnMtY2FyZC0tZmVhdHVyZWQgLmludGVncmF0aW9ucy1jYXJkX19pbWFnZSB7XG4gICAgICBoZWlnaHQ6IDcwcHg7XG4gICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICAgICAgYWxpZ24taXRlbXM6IGZsZXgtc3RhcnQ7IH1cbiAgICAgIC5pbnRlZ3JhdGlvbnMtY2FyZC0tZmVhdHVyZWQgLmludGVncmF0aW9ucy1jYXJkX19pbWFnZSBpbWcge1xuICAgICAgICBtYXgtaGVpZ2h0OiA3MHB4O1xuICAgICAgICBtYXgtd2lkdGg6IDE4MHB4OyB9XG4gIC5pbnRlZ3JhdGlvbnMtY2FyZC0tc21hbGwgaDIge1xuICAgIG1hcmdpbi10b3A6IDA7XG4gICAgbWFyZ2luLWJvdHRvbTogMDtcbiAgICBwYWRkaW5nOiAxNHB4IDE4cHg7IH1cbiAgLmludGVncmF0aW9ucy1jYXJkLS1zbWFsbCAuaW50ZWdyYXRpb25zLWNhcmRfX2ltYWdlIHtcbiAgICBoZWlnaHQ6IDExNnB4O1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgI0VDRjBGNTsgfVxuICAgIC5pbnRlZ3JhdGlvbnMtY2FyZC0tc21hbGwgLmludGVncmF0aW9ucy1jYXJkX19pbWFnZSBpbWcge1xuICAgICAgbWF4LWhlaWdodDogNTBweDtcbiAgICAgIG1heC13aWR0aDogMTQwcHg7IH1cblxuLmludGVncmF0aW9ucy10YWcge1xuICBmb250LXdlaWdodDogNTAwO1xuICBsaW5lLWhlaWdodDogMTtcbiAgZm9udC1zaXplOiA5cHg7XG4gIGxldHRlci1zcGFjaW5nOiAwLjAzZW07XG4gIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XG4gIGNvbG9yOiAjOUZBQkJFO1xuICBib3JkZXI6IDFweCBzb2xpZCAjRTJFOUYzO1xuICBib3JkZXItcmFkaXVzOiAxMDBweDtcbiAgcGFkZGluZzogM3B4IDZweDtcbiAgZGlzcGxheTogaW5saW5lLWZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7IH1cbiAgLmludGVncmF0aW9ucy10YWctLXByZW1pZXIge1xuICAgIGJhY2tncm91bmQtY29sb3I6ICM4N0IxRjc7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIGNvbG9yOiAjZmZmO1xuICAgIGJvcmRlcjogbm9uZTtcbiAgICBwYWRkaW5nLWxlZnQ6IDIycHg7IH1cbiAgICAuaW50ZWdyYXRpb25zLXRhZy0tcHJlbWllciBpb24taWNvbiB7XG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICB0b3A6IDUwJTtcbiAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtNTAlKTtcbiAgICAgIGxlZnQ6IDZweDtcbiAgICAgIHdpZHRoOiAxM3B4O1xuICAgICAgaGVpZ2h0OiAxM3B4O1xuICAgICAgZmlsbDogI2ZmZjsgfVxuXG4jcGFnZS1pbnRlZ3JhdGlvbnMge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7IH1cbiAgI3BhZ2UtaW50ZWdyYXRpb25zOjpiZWZvcmUge1xuICAgIGNvbnRlbnQ6ICcnO1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICB0b3A6IDA7XG4gICAgbGVmdDogMDtcbiAgICB3aWR0aDogMTAwJTtcbiAgICBoZWlnaHQ6IDU2NHB4O1xuICAgIHotaW5kZXg6IC0xO1xuICAgIGJhY2tncm91bmQ6IHVybChcIi9pbWcvaW50ZWdyYXRpb25zL2ludGVncmF0aW9ucy1oZXJvLWJnLnBuZ1wiKTtcbiAgICBiYWNrZ3JvdW5kLXJlcGVhdDogcmVwZWF0LXg7XG4gICAgYmFja2dyb3VuZC1zaXplOiAxNjgwcHg7XG4gICAgYmFja2dyb3VuZC1wb3NpdGlvbjogY2VudGVyIC0yMHB4O1xuICAgIG9wYWNpdHk6IDAuNjA7IH1cbiAgI3BhZ2UtaW50ZWdyYXRpb25zLnNob3cge1xuICAgIGRpc3BsYXk6IGJsb2NrOyB9XG4gICNwYWdlLWludGVncmF0aW9ucy5oaWRlIHtcbiAgICBkaXNwbGF5OiBub25lOyB9XG4gICNwYWdlLWludGVncmF0aW9ucyAuaW50ZWdyYXRpb25zLWhlcm8ge1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICBtYXJnaW46IDEwMHB4IDA7IH1cbiAgICAjcGFnZS1pbnRlZ3JhdGlvbnMgLmludGVncmF0aW9ucy1oZXJvIGgxIHtcbiAgICAgIGZvbnQtc2l6ZTogNDhweDtcbiAgICAgIGxldHRlci1zcGFjaW5nOiAtMC4wMmVtO1xuICAgICAgY29sb3I6ICMwMDAwMDA7IH1cbiAgICAjcGFnZS1pbnRlZ3JhdGlvbnMgLmludGVncmF0aW9ucy1oZXJvIHAge1xuICAgICAgZm9udC1zaXplOiAyNHB4O1xuICAgICAgbGV0dGVyLXNwYWNpbmc6IC0wLjAyZW07XG4gICAgICBjb2xvcjogIzM5NEQ3MTtcbiAgICAgIGZvbnQtZmFtaWx5OiBcIkVpbmFcIiwgXCJIZWx2ZXRpY2EgTmV1ZVwiLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7IH1cbiAgI3BhZ2UtaW50ZWdyYXRpb25zIC5pbnRlZ3JhdGlvbnMtZmVhdHVyZWRfX2xpc3Qge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgbWFyZ2luLWxlZnQ6IC04cHg7IH1cbiAgI3BhZ2UtaW50ZWdyYXRpb25zIC5pbnRlZ3JhdGlvbnMtbGlzdCB7XG4gICAgbWFyZ2luOiAxMDBweCAwIDE0MHB4OyB9XG4gICNwYWdlLWludGVncmF0aW9ucyAuaW50ZWdyYXRpb25zLWxpc3RfX2lubmVyIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjsgfVxuICAjcGFnZS1pbnRlZ3JhdGlvbnMgLmludGVncmF0aW9ucy1saXN0X19maWx0ZXIge1xuICAgIGZsZXg6IDAgMCAxOTRweDsgfVxuICAgICNwYWdlLWludGVncmF0aW9ucyAuaW50ZWdyYXRpb25zLWxpc3RfX2ZpbHRlciBoNCB7XG4gICAgICBmb250LXdlaWdodDogNjAwO1xuICAgICAgZm9udC1zaXplOiAxMXB4O1xuICAgICAgbGV0dGVyLXNwYWNpbmc6IDAuMDVlbTtcbiAgICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XG4gICAgICBjb2xvcjogIzkyQTBCOTtcbiAgICAgIG1hcmdpbi1ib3R0b206IDE0cHg7IH1cbiAgI3BhZ2UtaW50ZWdyYXRpb25zIC5pbnRlZ3JhdGlvbnMtbGlzdF9fZmlsdGVyLWNsb3NlIHtcbiAgICBkaXNwbGF5OiBub25lOyB9XG4gICNwYWdlLWludGVncmF0aW9ucyAuaW50ZWdyYXRpb25zLXNlYXJjaGJveCB7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlOyB9XG4gICAgI3BhZ2UtaW50ZWdyYXRpb25zIC5pbnRlZ3JhdGlvbnMtc2VhcmNoYm94IGlvbi1pY29uIHtcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgIHRvcDogNTAlO1xuICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC01MCUpOyB9XG4gICAgICAjcGFnZS1pbnRlZ3JhdGlvbnMgLmludGVncmF0aW9ucy1zZWFyY2hib3ggaW9uLWljb25bbmFtZT1cInNlYXJjaFwiXSB7XG4gICAgICAgIGNvbG9yOiAjMzg4MEZGO1xuICAgICAgICBsZWZ0OiAxMXB4OyB9XG4gICAgICAjcGFnZS1pbnRlZ3JhdGlvbnMgLmludGVncmF0aW9ucy1zZWFyY2hib3ggaW9uLWljb25bbmFtZT1cImNsb3NlXCJdIHtcbiAgICAgICAgdHJhbnNpdGlvbjogb3BhY2l0eSAwLjNzO1xuICAgICAgICByaWdodDogMTFweDtcbiAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG4gICAgICAgIGNvbG9yOiByZ2JhKDY5LCA4OCwgMTIxLCAwLjc1KTtcbiAgICAgICAgb3BhY2l0eTogMDsgfVxuICAgICNwYWdlLWludGVncmF0aW9ucyAuaW50ZWdyYXRpb25zLXNlYXJjaGJveCBpbnB1dCB7XG4gICAgICBib3JkZXItcmFkaXVzOiAxMDBweDtcbiAgICAgIGJvcmRlcjogbm9uZTtcbiAgICAgIG91dGxpbmU6IG5vbmU7XG4gICAgICBiYWNrZ3JvdW5kOiAjRjVGOEZDO1xuICAgICAgZm9udC1zaXplOiAxNHB4O1xuICAgICAgcGFkZGluZzogOHB4IDMwcHg7XG4gICAgICBjb2xvcjogIzQ1NTg3OTtcbiAgICAgIHdpZHRoOiAxMDAlOyB9XG4gICAgICAjcGFnZS1pbnRlZ3JhdGlvbnMgLmludGVncmF0aW9ucy1zZWFyY2hib3ggaW5wdXQ6OnBsYWNlaG9sZGVyIHtcbiAgICAgICAgY29sb3I6ICM4RTlGQkM7IH1cbiAgICAjcGFnZS1pbnRlZ3JhdGlvbnMgLmludGVncmF0aW9ucy1zZWFyY2hib3guYWN0aXZlIGlvbi1pY29uW25hbWU9XCJjbG9zZVwiXSB7XG4gICAgICBvcGFjaXR5OiAxO1xuICAgICAgcG9pbnRlci1ldmVudHM6IGFsbDtcbiAgICAgIGN1cnNvcjogcG9pbnRlcjsgfVxuICAjcGFnZS1pbnRlZ3JhdGlvbnMgLmludGVncmF0aW9ucy1maWx0ZXItdG9nZ2xlIHtcbiAgICBkaXNwbGF5OiBub25lO1xuICAgIGZvbnQtc2l6ZTogMjBweDtcbiAgICBmbGV4OiAwIDAgMzZweDtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgIGp1c3RpZnktY29udGVudDogZmxleC1lbmQ7XG4gICAgY29sb3I6ICMzODgwRkY7XG4gICAgY3Vyc29yOiBwb2ludGVyOyB9XG4gICNwYWdlLWludGVncmF0aW9ucyAuaW50ZWdyYXRpb25zLWNhdGVnb3J5LWZpbHRlciBhLFxuICAjcGFnZS1pbnRlZ3JhdGlvbnMgLmludGVncmF0aW9ucy1jaGVja19fbGFiZWwge1xuICAgIGZvbnQtZmFtaWx5OiBcIkVpbmFcIiwgXCJIZWx2ZXRpY2EgTmV1ZVwiLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7XG4gICAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgICBsaW5lLWhlaWdodDogMTtcbiAgICBmb250LXNpemU6IDE0cHg7XG4gICAgY29sb3I6ICMyQzNCNTU7IH1cbiAgI3BhZ2UtaW50ZWdyYXRpb25zIC5pbnRlZ3JhdGlvbnMtdG9nZ2xlcyB7XG4gICAgbWFyZ2luOiAzNnB4IDA7IH1cbiAgICAjcGFnZS1pbnRlZ3JhdGlvbnMgLmludGVncmF0aW9ucy10b2dnbGVzIC5pbnRlZ3JhdGlvbnMtY2hlY2ssXG4gICAgI3BhZ2UtaW50ZWdyYXRpb25zIC5pbnRlZ3JhdGlvbnMtdG9nZ2xlcyAuaW50ZWdyYXRpb25zLWNoZWNrX19sYWJlbCxcbiAgICAjcGFnZS1pbnRlZ3JhdGlvbnMgLmludGVncmF0aW9ucy10b2dnbGVzIC5pbnRlZ3JhdGlvbnMtY2hlY2tfX2lucHV0IHtcbiAgICAgIGN1cnNvcjogcG9pbnRlcjsgfVxuICAgICNwYWdlLWludGVncmF0aW9ucyAuaW50ZWdyYXRpb25zLXRvZ2dsZXMgLmludGVncmF0aW9ucy1jaGVjayArIC5pbnRlZ3JhdGlvbnMtY2hlY2sge1xuICAgICAgbWFyZ2luLXRvcDogNnB4OyB9XG4gICAgI3BhZ2UtaW50ZWdyYXRpb25zIC5pbnRlZ3JhdGlvbnMtdG9nZ2xlcyAuaW50ZWdyYXRpb25zLWNoZWNrX19sYWJlbCxcbiAgICAjcGFnZS1pbnRlZ3JhdGlvbnMgLmludGVncmF0aW9ucy10b2dnbGVzIHRpcHB5IHtcbiAgICAgIG1hcmdpbi1sZWZ0OiA2cHg7IH1cbiAgI3BhZ2UtaW50ZWdyYXRpb25zIC5pbnRlZ3JhdGlvbnMtY2F0ZWdvcnktZmlsdGVyIHtcbiAgICBsaXN0LXN0eWxlLXR5cGU6IG5vbmU7XG4gICAgbWFyZ2luOiAwO1xuICAgIHBhZGRpbmc6IDA7XG4gICAgdHJhbnNpdGlvbjogb3BhY2l0eSAwLjNzO1xuICAgIGRpc3BsYXk6IGJsb2NrOyB9XG4gICAgI3BhZ2UtaW50ZWdyYXRpb25zIC5pbnRlZ3JhdGlvbnMtY2F0ZWdvcnktZmlsdGVyIGxpIGEge1xuICAgICAgdHJhbnNpdGlvbjogY29sb3IgMC4zcztcbiAgICAgIGhlaWdodDogMjBweDtcbiAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgb3V0bGluZTogbm9uZTtcbiAgICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTsgfVxuICAgICAgI3BhZ2UtaW50ZWdyYXRpb25zIC5pbnRlZ3JhdGlvbnMtY2F0ZWdvcnktZmlsdGVyIGxpIGE6aG92ZXIge1xuICAgICAgICBjb2xvcjogIzM4ODBGRjsgfVxuICAgICNwYWdlLWludGVncmF0aW9ucyAuaW50ZWdyYXRpb25zLWNhdGVnb3J5LWZpbHRlciBsaSArIGxpIHtcbiAgICAgIG1hcmdpbi10b3A6IDEycHg7IH1cbiAgICAjcGFnZS1pbnRlZ3JhdGlvbnMgLmludGVncmF0aW9ucy1jYXRlZ29yeS1maWx0ZXI6bm90KC5kaXNhYmxlKSBsaS5hY3RpdmUgYSB7XG4gICAgICBwb2ludGVyLWV2ZW50czogbm9uZTtcbiAgICAgIGNvbG9yOiAjMzg4MEZGO1xuICAgICAgcGFkZGluZy1sZWZ0OiA4cHg7XG4gICAgICBib3JkZXItbGVmdDogMnB4IHNvbGlkIHJnYmEoNTYsIDEyOCwgMjU1LCAwLjQpOyB9XG4gICAgI3BhZ2UtaW50ZWdyYXRpb25zIC5pbnRlZ3JhdGlvbnMtY2F0ZWdvcnktZmlsdGVyLmRpc2FibGUge1xuICAgICAgY3Vyc29yOiBub3QtYWxsb3dlZDtcbiAgICAgIG9wYWNpdHk6IDAuNDsgfVxuICAgICAgI3BhZ2UtaW50ZWdyYXRpb25zIC5pbnRlZ3JhdGlvbnMtY2F0ZWdvcnktZmlsdGVyLmRpc2FibGUgYSB7XG4gICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOyB9XG4gICNwYWdlLWludGVncmF0aW9ucyAuaW50ZWdyYXRpb25zLWNhdGVnb3J5LXNlbGVjdCB7XG4gICAgZGlzcGxheTogbm9uZTsgfVxuICAjcGFnZS1pbnRlZ3JhdGlvbnMgLmludGVncmF0aW9ucy1saXN0X19yZXN1bHRzIHtcbiAgICBtYXJnaW4tbGVmdDogNDBweDtcbiAgICBmbGV4OiAxIDAgMDtcbiAgICBtYXgtd2lkdGg6IDg2NHB4OyB9XG4gICAgI3BhZ2UtaW50ZWdyYXRpb25zIC5pbnRlZ3JhdGlvbnMtbGlzdF9fcmVzdWx0cyAubG9hZGVyIHtcbiAgICAgIGRpc3BsYXk6IG5vbmU7IH1cbiAgI3BhZ2UtaW50ZWdyYXRpb25zIC5pbnRlZ3JhdGlvbnMtbGlzdF9fcmVzdWx0cy1jYXRlZ29yeTpub3QoOmxhc3QtY2hpbGQpIHtcbiAgICBtYXJnaW4tYm90dG9tOiA0NnB4OyB9XG4gICNwYWdlLWludGVncmF0aW9ucyAuaW50ZWdyYXRpb25zLWxpc3RfX3Jlc3VsdHMtaGVhZGVyIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcbiAgICBhbGlnbi1pdGVtczogYmFzZWxpbmU7XG4gICAgbWFyZ2luLWJvdHRvbTogOHB4OyB9XG4gICAgI3BhZ2UtaW50ZWdyYXRpb25zIC5pbnRlZ3JhdGlvbnMtbGlzdF9fcmVzdWx0cy1oZWFkZXIgaDQge1xuICAgICAgZm9udC1zaXplOiAyMHB4O1xuICAgICAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgICAgIG1hcmdpbi10b3A6IDA7XG4gICAgICBtYXJnaW4tYm90dG9tOiA0cHg7IH1cbiAgICAjcGFnZS1pbnRlZ3JhdGlvbnMgLmludGVncmF0aW9ucy1saXN0X19yZXN1bHRzLWhlYWRlciBhIHtcbiAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7XG4gICAgICBmb250LXNpemU6IDE2cHg7XG4gICAgICBmb250LWZhbWlseTogXCJFaW5hXCIsIFwiSGVsdmV0aWNhIE5ldWVcIiwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmOyB9XG4gICAgICAjcGFnZS1pbnRlZ3JhdGlvbnMgLmludGVncmF0aW9ucy1saXN0X19yZXN1bHRzLWhlYWRlciBhIGlvbi1pY29uIHtcbiAgICAgICAgdHJhbnNpdGlvbjogdHJhbnNmb3JtIDAuM3M7XG4gICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlKDAsIDFweCk7IH1cbiAgICAgICNwYWdlLWludGVncmF0aW9ucyAuaW50ZWdyYXRpb25zLWxpc3RfX3Jlc3VsdHMtaGVhZGVyIGE6aG92ZXIgaW9uLWljb24ge1xuICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgycHgsIDFweCk7IH1cbiAgICAjcGFnZS1pbnRlZ3JhdGlvbnMgLmludGVncmF0aW9ucy1saXN0X19yZXN1bHRzLWhlYWRlciBoNCA+IGEge1xuICAgICAgbWFyZ2luLXJpZ2h0OiA4cHg7XG4gICAgICBmb250LXNpemU6IDE4cHg7XG4gICAgICBkaXNwbGF5OiBub25lOyB9XG4gICNwYWdlLWludGVncmF0aW9ucyAuaW50ZWdyYXRpb25zLWxpc3RfX3Jlc3VsdHMtcm93IHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGZsZXgtd3JhcDogd3JhcDtcbiAgICBtYXJnaW4tbGVmdDogLThweDsgfVxuICAjcGFnZS1pbnRlZ3JhdGlvbnMgLmludGVncmF0aW9ucy1saXN0X19yZXN1bHRzLWdyaWQge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgZmxleC13cmFwOiB3cmFwO1xuICAgIG1hcmdpbi1sZWZ0OiAtOHB4O1xuICAgIG1hcmdpbi1yaWdodDogLThweDsgfVxuICAjcGFnZS1pbnRlZ3JhdGlvbnMgLmludGVncmF0aW9ucy1saXN0X19lbXB0eS1yb3cge1xuICAgIG9wYWNpdHk6IDAuNTtcbiAgICBtYXJnaW4tbGVmdDogOHB4OyB9XG4gICNwYWdlLWludGVncmF0aW9ucyAuaW50ZWdyYXRpb25zLWxpc3RfX3Jlc3VsdHMtZm9ybSB7XG4gICAgZGlzcGxheTogbm9uZTtcbiAgICBiYWNrZ3JvdW5kOiAjRjZGOEZCO1xuICAgIGJvcmRlci1yYWRpdXM6IDE2cHg7XG4gICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgICBwYWRkaW5nOiAzMnB4O1xuICAgIG1heC13aWR0aDogNjAwcHg7XG4gICAgbWFyZ2luLWxlZnQ6IGF1dG87XG4gICAgbWFyZ2luLXJpZ2h0OiBhdXRvOyB9XG4gICAgI3BhZ2UtaW50ZWdyYXRpb25zIC5pbnRlZ3JhdGlvbnMtbGlzdF9fcmVzdWx0cy1mb3JtIGgzIHtcbiAgICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICAgIG1heC13aWR0aDogNDAwcHg7XG4gICAgICBtYXJnaW4tdG9wOiAxMHB4O1xuICAgICAgbWFyZ2luLWxlZnQ6IGF1dG87XG4gICAgICBtYXJnaW4tcmlnaHQ6IGF1dG87XG4gICAgICBmb250LXNpemU6IDIycHg7XG4gICAgICBmb250LXdlaWdodDogNjAwO1xuICAgICAgbGluZS1oZWlnaHQ6IDMwcHg7XG4gICAgICBjb2xvcjogIzAwMDsgfVxuICAgICNwYWdlLWludGVncmF0aW9ucyAuaW50ZWdyYXRpb25zLWxpc3RfX3Jlc3VsdHMtZm9ybS5zaG93IHtcbiAgICAgIGRpc3BsYXk6IGZsZXg7IH1cbiAgICAjcGFnZS1pbnRlZ3JhdGlvbnMgLmludGVncmF0aW9ucy1saXN0X19yZXN1bHRzLWZvcm0gLmhzX3N1Ym1pdCB7XG4gICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7IH1cbiAgI3BhZ2UtaW50ZWdyYXRpb25zIC5pbnRlZ3JhdGlvbnMtbGlzdF9fcmVzdWx0cy1zZWFyY2gge1xuICAgIGRpc3BsYXk6IG5vbmU7IH1cbiAgI3BhZ2UtaW50ZWdyYXRpb25zIC5pbnRlZ3JhdGlvbnMtbGlzdF9fZW1wdHktbWVzc2FnZSB7XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIG1hcmdpbi1ib3R0b206IDQ4cHg7XG4gICAgZm9udC1zaXplOiAxNnB4O1xuICAgIHdpZHRoOiAxMDAlOyB9XG4gICAgI3BhZ2UtaW50ZWdyYXRpb25zIC5pbnRlZ3JhdGlvbnMtbGlzdF9fZW1wdHktbWVzc2FnZSBiIHtcbiAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7IH1cbiAgI3BhZ2UtaW50ZWdyYXRpb25zIHRpcHB5IC50aXAudG9wIHtcbiAgICBsZWZ0OiAtMTAwcHg7XG4gICAgcGFkZGluZzogMTBweCAxMnB4IDEycHg7XG4gICAgZm9udC1zaXplOiAxMnB4O1xuICAgIGxpbmUtaGVpZ2h0OiAxNnB4O1xuICAgIGZvbnQtd2VpZ2h0OiA0MDA7XG4gICAgZm9udC1mYW1pbHk6IFwiSW50ZXJcIiwgXCJJbnRlciBVSVwiLCBIZWx2ZXRpY2EsIEFyaWFsLCBzYW5zLXNlcmlmOyB9XG4gICAgI3BhZ2UtaW50ZWdyYXRpb25zIHRpcHB5IC50aXAudG9wOjphZnRlciB7XG4gICAgICByaWdodDogODdweDsgfVxuXG4jcGFnZS1pbnRlZ3JhdGlvbnMtZGV0YWlsIHtcbiAgYmFja2dyb3VuZDogdXJsKFwiL2ltZy9pbnRlZ3JhdGlvbnMvaW50ZWdyYXRpb25zLWhlcm8tYmcucG5nXCIpO1xuICBiYWNrZ3JvdW5kLXJlcGVhdDogcmVwZWF0LXg7XG4gIGJhY2tncm91bmQtc2l6ZTogMTY4MHB4O1xuICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiBjZW50ZXIgLTMwMHB4OyB9XG4gICNwYWdlLWludGVncmF0aW9ucy1kZXRhaWwgLmludGVncmF0aW9ucy1kZXRhaWxfX25hdiB7XG4gICAgbWFyZ2luLXRvcDogMjBweDtcbiAgICBtYXJnaW4tYm90dG9tOiA4MHB4OyB9XG4gICAgI3BhZ2UtaW50ZWdyYXRpb25zLWRldGFpbCAuaW50ZWdyYXRpb25zLWRldGFpbF9fbmF2IGEge1xuICAgICAgZm9udC1mYW1pbHk6IFwiRWluYVwiLCBcIkhlbHZldGljYSBOZXVlXCIsIEhlbHZldGljYSwgc2Fucy1zZXJpZjtcbiAgICAgIGZvbnQtc2l6ZTogMTZweDtcbiAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7XG4gICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsgfVxuICAgICAgI3BhZ2UtaW50ZWdyYXRpb25zLWRldGFpbCAuaW50ZWdyYXRpb25zLWRldGFpbF9fbmF2IGEgaW9uLWljb24ge1xuICAgICAgICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gMC4zcztcbiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC0ycHgpO1xuICAgICAgICBtYXJnaW4tcmlnaHQ6IDhweDsgfVxuICAgICAgI3BhZ2UtaW50ZWdyYXRpb25zLWRldGFpbCAuaW50ZWdyYXRpb25zLWRldGFpbF9fbmF2IGE6aG92ZXIgaW9uLWljb24ge1xuICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtMnB4LCAtMnB4KTsgfVxuICAjcGFnZS1pbnRlZ3JhdGlvbnMtZGV0YWlsIC5pbnRlZ3JhdGlvbnMtZGV0YWlsX193cmFwcGVyIHtcbiAgICBtYXgtd2lkdGg6IDc0OHB4O1xuICAgIG1hcmdpbi1sZWZ0OiBhdXRvO1xuICAgIG1hcmdpbi1yaWdodDogYXV0bztcbiAgICBtYXJnaW4tYm90dG9tOiAxNDBweDsgfVxuICAjcGFnZS1pbnRlZ3JhdGlvbnMtZGV0YWlsIC5pbnRlZ3JhdGlvbnMtZGV0YWlsX19oZWFkZXIge1xuICAgIHBhZGRpbmctYm90dG9tOiAzOHB4O1xuICAgIG1hcmdpbi1ib3R0b206IDM4cHg7XG4gICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNFREYyRjc7XG4gICAgZGlzcGxheTogZmxleDsgfVxuICAgICNwYWdlLWludGVncmF0aW9ucy1kZXRhaWwgLmludGVncmF0aW9ucy1kZXRhaWxfX2hlYWRlciBoMSB7XG4gICAgICBtYXJnaW46IDA7XG4gICAgICBmb250LXNpemU6IDMycHg7XG4gICAgICBmb250LXdlaWdodDogNjAwOyB9XG4gICAgI3BhZ2UtaW50ZWdyYXRpb25zLWRldGFpbCAuaW50ZWdyYXRpb25zLWRldGFpbF9faGVhZGVyIHAge1xuICAgICAgbGluZS1oZWlnaHQ6IDI4cHg7XG4gICAgICBmb250LXNpemU6IDE4cHg7XG4gICAgICBsZXR0ZXItc3BhY2luZzogLTAuMDJlbTtcbiAgICAgIGNvbG9yOiAjNjM3Njk2O1xuICAgICAgbWF4LXdpZHRoOiA0MDBweDtcbiAgICAgIHBhZGRpbmc6IDVweCAwIDZweDsgfVxuICAgICNwYWdlLWludGVncmF0aW9ucy1kZXRhaWwgLmludGVncmF0aW9ucy1kZXRhaWxfX2hlYWRlciB1bCB7XG4gICAgICBtYXJnaW46IDA7XG4gICAgICBwYWRkaW5nOiAwO1xuICAgICAgbGlzdC1zdHlsZS10eXBlOiBub25lO1xuICAgICAgZGlzcGxheTogZmxleDsgfVxuICAgICNwYWdlLWludGVncmF0aW9ucy1kZXRhaWwgLmludGVncmF0aW9ucy1kZXRhaWxfX2hlYWRlciAuaW50ZWdyYXRpb25zLXRhZyB7XG4gICAgICBmb250LXNpemU6IDEwcHg7XG4gICAgICBwYWRkaW5nOiAzcHggN3B4IDRweDsgfVxuICAgICAgI3BhZ2UtaW50ZWdyYXRpb25zLWRldGFpbCAuaW50ZWdyYXRpb25zLWRldGFpbF9faGVhZGVyIC5pbnRlZ3JhdGlvbnMtdGFnICsgLmludGVncmF0aW9ucy10YWcge1xuICAgICAgICBtYXJnaW4tbGVmdDogNnB4OyB9XG4gICAgICAjcGFnZS1pbnRlZ3JhdGlvbnMtZGV0YWlsIC5pbnRlZ3JhdGlvbnMtZGV0YWlsX19oZWFkZXIgLmludGVncmF0aW9ucy10YWctLXByZW1pZXIge1xuICAgICAgICBwYWRkaW5nLWxlZnQ6IDIycHg7IH1cbiAgI3BhZ2UtaW50ZWdyYXRpb25zLWRldGFpbCAuaW50ZWdyYXRpb25zLWRldGFpbF9fbG9nbyB7XG4gICAgYmFja2dyb3VuZDogI0ZGRkZGRjtcbiAgICBib3gtc2hhZG93OiAwcHggMHB4IDNweCByZ2JhKDAsIDAsIDAsIDAuMDgpLCAwcHggM3B4IDZweCByZ2JhKDAsIDAsIDAsIDAuMSk7XG4gICAgYm9yZGVyLXJhZGl1czogOHB4O1xuICAgIHdpZHRoOiAyMDBweDtcbiAgICBoZWlnaHQ6IDE4MHB4O1xuICAgIGZsZXg6IDAgMCAyMDBweDtcbiAgICBtYXJnaW4tcmlnaHQ6IDM4cHg7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyOyB9XG4gICAgI3BhZ2UtaW50ZWdyYXRpb25zLWRldGFpbCAuaW50ZWdyYXRpb25zLWRldGFpbF9fbG9nbyBpbWcge1xuICAgICAgbWF4LWhlaWdodDogNzBweDtcbiAgICAgIG1heC13aWR0aDogMTQwcHg7IH1cbiAgI3BhZ2UtaW50ZWdyYXRpb25zLWRldGFpbCAuaW50ZWdyYXRpb25zLWRldGFpbF9fbG9nbyArIGRpdiB7XG4gICAgZmxleDogMSAwIDA7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOyB9XG4gICNwYWdlLWludGVncmF0aW9ucy1kZXRhaWwgLmludGVncmF0aW9ucy1kZXRhaWxfX2JvZHkge1xuICAgIGRpc3BsYXk6IGZsZXg7IH1cbiAgI3BhZ2UtaW50ZWdyYXRpb25zLWRldGFpbCAuaW50ZWdyYXRpb25zLWRldGFpbF9fY29udGVudCB7XG4gICAgZmxleDogMSAwIDA7IH1cbiAgICAjcGFnZS1pbnRlZ3JhdGlvbnMtZGV0YWlsIC5pbnRlZ3JhdGlvbnMtZGV0YWlsX19jb250ZW50IGgxLFxuICAgICNwYWdlLWludGVncmF0aW9ucy1kZXRhaWwgLmludGVncmF0aW9ucy1kZXRhaWxfX2NvbnRlbnQgaDIsXG4gICAgI3BhZ2UtaW50ZWdyYXRpb25zLWRldGFpbCAuaW50ZWdyYXRpb25zLWRldGFpbF9fY29udGVudCBoMyxcbiAgICAjcGFnZS1pbnRlZ3JhdGlvbnMtZGV0YWlsIC5pbnRlZ3JhdGlvbnMtZGV0YWlsX19jb250ZW50IGg0LFxuICAgICNwYWdlLWludGVncmF0aW9ucy1kZXRhaWwgLmludGVncmF0aW9ucy1kZXRhaWxfX2NvbnRlbnQgaDUsXG4gICAgI3BhZ2UtaW50ZWdyYXRpb25zLWRldGFpbCAuaW50ZWdyYXRpb25zLWRldGFpbF9fY29udGVudCBoNiB7XG4gICAgICBmb250LXNpemU6IDE2cHg7XG4gICAgICBmb250LXdlaWdodDogNjAwOyB9XG4gICAgI3BhZ2UtaW50ZWdyYXRpb25zLWRldGFpbCAuaW50ZWdyYXRpb25zLWRldGFpbF9fY29udGVudCBwLFxuICAgICNwYWdlLWludGVncmF0aW9ucy1kZXRhaWwgLmludGVncmF0aW9ucy1kZXRhaWxfX2NvbnRlbnQgdWwge1xuICAgICAgZm9udC1zaXplOiAxNHB4O1xuICAgICAgbGluZS1oZWlnaHQ6IDEuNjtcbiAgICAgIGNvbG9yOiAjNjM3Njk2O1xuICAgICAgbWFyZ2luLWJvdHRvbTogNDBweDsgfVxuICAgICAgI3BhZ2UtaW50ZWdyYXRpb25zLWRldGFpbCAuaW50ZWdyYXRpb25zLWRldGFpbF9fY29udGVudCBwOmxhc3QtY2hpbGQsXG4gICAgICAjcGFnZS1pbnRlZ3JhdGlvbnMtZGV0YWlsIC5pbnRlZ3JhdGlvbnMtZGV0YWlsX19jb250ZW50IHVsOmxhc3QtY2hpbGQge1xuICAgICAgICBtYXJnaW4tYm90dG9tOiAwOyB9XG4gICAgI3BhZ2UtaW50ZWdyYXRpb25zLWRldGFpbCAuaW50ZWdyYXRpb25zLWRldGFpbF9fY29udGVudCB1bCB7XG4gICAgICBtYXJnaW4tbGVmdDogMDtcbiAgICAgIHBhZGRpbmc6IDA7IH1cbiAgICAjcGFnZS1pbnRlZ3JhdGlvbnMtZGV0YWlsIC5pbnRlZ3JhdGlvbnMtZGV0YWlsX19jb250ZW50IHVsIGxpIHtcbiAgICAgIGxpc3Qtc3R5bGUtdHlwZTogbm9uZTtcbiAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgIHBhZGRpbmctbGVmdDogMjJweDsgfVxuICAgICAgI3BhZ2UtaW50ZWdyYXRpb25zLWRldGFpbCAuaW50ZWdyYXRpb25zLWRldGFpbF9fY29udGVudCB1bCBsaSArIGxpIHtcbiAgICAgICAgbWFyZ2luLXRvcDogMTJweDsgfVxuICAgICAgI3BhZ2UtaW50ZWdyYXRpb25zLWRldGFpbCAuaW50ZWdyYXRpb25zLWRldGFpbF9fY29udGVudCB1bCBsaTpiZWZvcmUge1xuICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgIHRvcDogM3B4O1xuICAgICAgICBsZWZ0OiAwO1xuICAgICAgICBjb250ZW50OiB1cmwoXCJkYXRhOmltYWdlL3N2Zyt4bWwsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzE2cHgnIGhlaWdodD0nMTZweCcgZmlsbD0nJTIzNjJDNjdCJyB2aWV3Qm94PScwIDAgNTEyIDUxMiclM0UlM0NwYXRoIGQ9J00xNzAuNzE4IDIxNi40ODJMMTQxLjYgMjQ1LjZsOTMuNiA5My42IDIwOC0yMDgtMjkuMTE4LTI5LjExOEwyMzUuMiAyNzkuOTE4bC02NC40ODItNjMuNDM2ek00MjIuNCAyNTZjMCA5MS41MTgtNzQuODgzIDE2Ni40LTE2Ni40IDE2Ni40Uzg5LjYgMzQ3LjUxOCA4OS42IDI1NiAxNjQuNDgyIDg5LjYgMjU2IDg5LjZjMTUuNiAwIDMxLjIgMi4wODIgNDUuNzY0IDYuMjQxTDMzNCA2My42QzMxMC4wODIgNTMuMiAyODQuMDgyIDQ4IDI1NiA0OCAxNDEuNiA0OCA0OCAxNDEuNiA0OCAyNTZzOTMuNiAyMDggMjA4IDIwOCAyMDgtOTMuNiAyMDgtMjA4aC00MS42eicvJTNFJTNDL3N2ZyUzRVwiKTtcbiAgICAgICAgd2lkdGg6IDE2cHg7XG4gICAgICAgIGhlb2dodDogMTZweDtcbiAgICAgICAgZmlsbDogIzYyQzY3QjsgfVxuICAjcGFnZS1pbnRlZ3JhdGlvbnMtZGV0YWlsIC5pbnRlZ3JhdGlvbnMtZGV0YWlsX19hY3Rpb25zIHtcbiAgICBmbGV4OiAwIDAgMTkycHg7XG4gICAgbWFyZ2luLWxlZnQ6IDQ2cHg7IH1cbiAgI3BhZ2UtaW50ZWdyYXRpb25zLWRldGFpbCAuaW50ZWdyYXRpb25zLWRldGFpbF9fYWN0aW9ucy1pbm5lciB7XG4gICAgcG9zaXRpb246IHN0aWNreTtcbiAgICB0b3A6IDIwcHg7IH1cbiAgICAjcGFnZS1pbnRlZ3JhdGlvbnMtZGV0YWlsIC5pbnRlZ3JhdGlvbnMtZGV0YWlsX19hY3Rpb25zLWlubmVyIGg1IHtcbiAgICAgIG1hcmdpbi10b3A6IDM4cHg7XG4gICAgICBjb2xvcjogIzczODQ5QTtcbiAgICAgIGZvbnQtc2l6ZTogMTBweDtcbiAgICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XG4gICAgICBsZXR0ZXItc3BhY2luZzogMC4wOGVtO1xuICAgICAgZm9udC13ZWlnaHQ6IDcwMDtcbiAgICAgIG1hcmdpbi1ib3R0b206IDRweDsgfVxuICAgICNwYWdlLWludGVncmF0aW9ucy1kZXRhaWwgLmludGVncmF0aW9ucy1kZXRhaWxfX2FjdGlvbnMtaW5uZXIgdWwge1xuICAgICAgbGlzdC1zdHlsZS10eXBlOiBub25lO1xuICAgICAgbWFyZ2luOiAwO1xuICAgICAgcGFkZGluZzogMDsgfVxuICAgICNwYWdlLWludGVncmF0aW9ucy1kZXRhaWwgLmludGVncmF0aW9ucy1kZXRhaWxfX2FjdGlvbnMtaW5uZXIgbGkgKyBsaSB7XG4gICAgICBtYXJnaW4tdG9wOiA0cHg7IH1cbiAgICAjcGFnZS1pbnRlZ3JhdGlvbnMtZGV0YWlsIC5pbnRlZ3JhdGlvbnMtZGV0YWlsX19hY3Rpb25zLWlubmVyIGxpIGEge1xuICAgICAgdHJhbnNpdGlvbjogMC4zcyBhbGw7XG4gICAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgI0IyQ0VGRjsgfVxuICAgICAgI3BhZ2UtaW50ZWdyYXRpb25zLWRldGFpbCAuaW50ZWdyYXRpb25zLWRldGFpbF9fYWN0aW9ucy1pbm5lciBsaSBhOmhvdmVyIHtcbiAgICAgICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICM1Yjc2OGU7IH1cbiAgI3BhZ2UtaW50ZWdyYXRpb25zLWRldGFpbCAuaW50ZWdyYXRpb25zLWRldGFpbF9fY3RhIHtcbiAgICBiYWNrZ3JvdW5kOiAjRjNGN0ZGO1xuICAgIGJvcmRlci1yYWRpdXM6IDhweDtcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgcGFkZGluZzogMTZweDsgfVxuICAgICNwYWdlLWludGVncmF0aW9ucy1kZXRhaWwgLmludGVncmF0aW9ucy1kZXRhaWxfX2N0YSBzcGFuIHtcbiAgICAgIGZvbnQtc2l6ZTogMTNweDtcbiAgICAgIGxpbmUtaGVpZ2h0OiAxLjM7XG4gICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgIG1hcmdpbi1ib3R0b206IDEycHg7XG4gICAgICBjb2xvcjogIzYzNzY5NjsgfVxuICAgICNwYWdlLWludGVncmF0aW9ucy1kZXRhaWwgLmludGVncmF0aW9ucy1kZXRhaWxfX2N0YSAuYnRuIHtcbiAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICBmb250LXdlaWdodDogNzAwO1xuICAgICAgZm9udC1zaXplOiAxNXB4OyB9XG4gICNwYWdlLWludGVncmF0aW9ucy1kZXRhaWwgLmludGVncmF0aW9ucy1kZXRhaWxfX2N0YS1zZWNvbmRhcnkge1xuICAgIG1hcmdpbi10b3A6IDI2cHg7IH1cbiAgICAjcGFnZS1pbnRlZ3JhdGlvbnMtZGV0YWlsIC5pbnRlZ3JhdGlvbnMtZGV0YWlsX19jdGEtc2Vjb25kYXJ5IHAge1xuICAgICAgZm9udC13ZWlnaHQ6IDUwMDtcbiAgICAgIGxpbmUtaGVpZ2h0OiAxN3B4O1xuICAgICAgZm9udC1zaXplOiAxM3B4O1xuICAgICAgY29sb3I6ICM2Mzc2OTY7IH1cbiAgICAjcGFnZS1pbnRlZ3JhdGlvbnMtZGV0YWlsIC5pbnRlZ3JhdGlvbnMtZGV0YWlsX19jdGEtc2Vjb25kYXJ5IC5idG4ge1xuICAgICAgZm9udC1zaXplOiAxM3B4O1xuICAgICAgZm9udC13ZWlnaHQ6IDcwMDtcbiAgICAgIHBhZGRpbmc6IDhweCAxM3B4IDdweDsgfVxuICAjcGFnZS1pbnRlZ3JhdGlvbnMtZGV0YWlsIHVsICsgLmludGVncmF0aW9ucy1kZXRhaWxfX2N0YS1zZWNvbmRhcnkge1xuICAgIGJvcmRlci10b3A6IDFweCBzb2xpZCAjRURGMkY3O1xuICAgIHBhZGRpbmctdG9wOiAyNnB4OyB9XG4gICNwYWdlLWludGVncmF0aW9ucy1kZXRhaWwgLmludGVncmF0aW9ucy1kZXRhaWxfX2Zvcm0ge1xuICAgIGJvcmRlci10b3A6IDFweCBzb2xpZCAjRURGMkY3O1xuICAgIHBhZGRpbmctdG9wOiA2MHB4O1xuICAgIG1hcmdpbi10b3A6IDM4cHg7IH1cbiAgICAjcGFnZS1pbnRlZ3JhdGlvbnMtZGV0YWlsIC5pbnRlZ3JhdGlvbnMtZGV0YWlsX19mb3JtIGgxIHtcbiAgICAgIG1hcmdpbjogMCAwIDRweDtcbiAgICAgIGZvbnQtc2l6ZTogMjZweDtcbiAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7XG4gICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7IH1cbiAgICAjcGFnZS1pbnRlZ3JhdGlvbnMtZGV0YWlsIC5pbnRlZ3JhdGlvbnMtZGV0YWlsX19mb3JtID4gcCB7XG4gICAgICBsaW5lLWhlaWdodDogMjhweDtcbiAgICAgIGZvbnQtc2l6ZTogMThweDtcbiAgICAgIGxldHRlci1zcGFjaW5nOiAtMC4wMmVtO1xuICAgICAgY29sb3I6ICM2Mzc2OTY7XG4gICAgICBtYXgtd2lkdGg6IDQwMHB4O1xuICAgICAgbWFyZ2luLWxlZnQ6IGF1dG87XG4gICAgICBtYXJnaW4tcmlnaHQ6IGF1dG87XG4gICAgICBtYXJnaW4tYm90dG9tOiAyNnB4O1xuICAgICAgdGV4dC1hbGlnbjogY2VudGVyOyB9XG4gICAgI3BhZ2UtaW50ZWdyYXRpb25zLWRldGFpbCAuaW50ZWdyYXRpb25zLWRldGFpbF9fZm9ybSAuaHNfc3VibWl0IHtcbiAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsgfVxuXG5AbWVkaWEgKG1heC13aWR0aDogMTIyMHB4KSB7XG4gIC5pbnRlZ3JhdGlvbnMtY2FyZC0tZmVhdHVyZWQgdWwge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgZmxleC13cmFwOiB3cmFwO1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICB0b3A6IDA7XG4gICAgcmlnaHQ6IDA7XG4gICAgdGV4dC1hbGlnbjogbGVmdDtcbiAgICBtYXJnaW46IDhweCAwIDA7IH1cbiAgLmludGVncmF0aW9ucy1jYXJkLS1mZWF0dXJlZCBsaSB7XG4gICAgbWFyZ2luLXJpZ2h0OiA0cHg7IH1cbiAgLmludGVncmF0aW9ucy1mZWF0dXJlZCAuY29udGFpbmVyLFxuICAuaW50ZWdyYXRpb25zLWxpc3QgLmNvbnRhaW5lciB7XG4gICAgd2lkdGg6IDEwMCU7IH0gfVxuXG5AbWVkaWEgKG1heC13aWR0aDogOTkycHgpIHtcbiAgLmludGVncmF0aW9ucy1jYXJkOm5vdCguaW50ZWdyYXRpb25zLWNhcmQtLWZlYXR1cmVkKSB7XG4gICAgZmxleDogMCAwIGNhbGMoNTAlIC0gMTZweCk7IH0gfVxuXG5AbWVkaWEgKG1pbi13aWR0aDogNzY4cHgpIHtcbiAgLmludGVncmF0aW9ucy1saXN0X19maWx0ZXItaW5uZXIge1xuICAgIHBvc2l0aW9uOiBzdGlja3k7XG4gICAgdG9wOiAzOHB4OyB9IH1cblxuQG1lZGlhIChtYXgtd2lkdGg6IDc2OHB4KSB7XG4gIC5pbnRlZ3JhdGlvbnMtY2FyZC0tZmVhdHVyZWQge1xuICAgIGZsZXg6IDAgMCA4NiU7XG4gICAgbWF4LXdpZHRoOiA0MjBweDsgfVxuICAgIC5pbnRlZ3JhdGlvbnMtY2FyZC0tZmVhdHVyZWQ6bGFzdC1jaGlsZCB7XG4gICAgICBtYXJnaW4tcmlnaHQ6IDE4cHg7IH1cbiAgICAuaW50ZWdyYXRpb25zLWNhcmQtLWZlYXR1cmVkIHAge1xuICAgICAgZm9udC1zaXplOiAxM3B4O1xuICAgICAgbGluZS1oZWlnaHQ6IDE4cHg7IH1cbiAgI3BhZ2UtaW50ZWdyYXRpb25zIHtcbiAgICBiYWNrZ3JvdW5kLXNpemU6IDExNjBweDsgfVxuICAgICNwYWdlLWludGVncmF0aW9ucyAuaW50ZWdyYXRpb25zLWZlYXR1cmVkIHtcbiAgICAgIHBhZGRpbmc6IDAgMTZweCAwO1xuICAgICAgb3ZlcmZsb3cteDogYXV0bztcbiAgICAgIC13ZWJraXQtb3ZlcmZsb3ctc2Nyb2xsaW5nOiB0b3VjaDtcbiAgICAgIC1tcy1vdmVyZmxvdy1zdHlsZTogLW1zLWF1dG9oaWRpbmctc2Nyb2xsYmFyOyB9XG4gICAgICAjcGFnZS1pbnRlZ3JhdGlvbnMgLmludGVncmF0aW9ucy1mZWF0dXJlZCAuY29udGFpbmVyIHtcbiAgICAgICAgcGFkZGluZzogMDsgfVxuICAgICAgI3BhZ2UtaW50ZWdyYXRpb25zIC5pbnRlZ3JhdGlvbnMtZmVhdHVyZWRfX2xpc3Q6YWZ0ZXIge1xuICAgICAgICBjb250ZW50OiAnJztcbiAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgIGhlaWdodDogMTBweDtcbiAgICAgICAgZmxleDogMCAwIDFweDsgfVxuICAgICAgI3BhZ2UtaW50ZWdyYXRpb25zIC5pbnRlZ3JhdGlvbnMtZmVhdHVyZWQ6Oi13ZWJraXQtc2Nyb2xsYmFyIHtcbiAgICAgICAgZGlzcGxheTogbm9uZTsgfVxuICAgICNwYWdlLWludGVncmF0aW9ucyAuaW50ZWdyYXRpb25zLWhlcm8ge1xuICAgICAgbWFyZ2luOiA2MHB4IDA7IH1cbiAgICAgICNwYWdlLWludGVncmF0aW9ucyAuaW50ZWdyYXRpb25zLWhlcm8gaDEge1xuICAgICAgICBmb250LXNpemU6IDM4cHg7IH1cbiAgICAgICNwYWdlLWludGVncmF0aW9ucyAuaW50ZWdyYXRpb25zLWhlcm8gcCB7XG4gICAgICAgIGZvbnQtc2l6ZTogMjBweDtcbiAgICAgICAgbWF4LXdpZHRoOiAzNDBweDtcbiAgICAgICAgbWFyZ2luLWxlZnQ6IGF1dG87XG4gICAgICAgIG1hcmdpbi1yaWdodDogYXV0bzsgfVxuICAgICNwYWdlLWludGVncmF0aW9ucyAuaW50ZWdyYXRpb25zLWxpc3Qge1xuICAgICAgbWFyZ2luOiAxMzZweCAwIDgwcHg7IH1cbiAgICAjcGFnZS1pbnRlZ3JhdGlvbnMgLmludGVncmF0aW9ucy1saXN0X19yZXN1bHRzLWhlYWRlciBoNCA+IGEge1xuICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOyB9XG4gICAgI3BhZ2UtaW50ZWdyYXRpb25zIC5pbnRlZ3JhdGlvbnMtbGlzdF9fcmVzdWx0cy1jYXRlZ29yeSAuaW50ZWdyYXRpb25zLWxpc3RfX3Jlc3VsdHMtcm93IHtcbiAgICAgIGZsZXgtd3JhcDogbm93cmFwO1xuICAgICAgd2lkdGg6IDEwMHZ3O1xuICAgICAgbWFyZ2luLWxlZnQ6IC0xOHB4O1xuICAgICAgbWFyZ2luLXJpZ2h0OiAtMTZweDtcbiAgICAgIG92ZXJmbG93LXg6IGF1dG87XG4gICAgICAtd2Via2l0LW92ZXJmbG93LXNjcm9sbGluZzogdG91Y2g7XG4gICAgICAtbXMtb3ZlcmZsb3ctc3R5bGU6IC1tcy1hdXRvaGlkaW5nLXNjcm9sbGJhcjsgfVxuICAgICAgI3BhZ2UtaW50ZWdyYXRpb25zIC5pbnRlZ3JhdGlvbnMtbGlzdF9fcmVzdWx0cy1jYXRlZ29yeSAuaW50ZWdyYXRpb25zLWxpc3RfX3Jlc3VsdHMtcm93Ojotd2Via2l0LXNjcm9sbGJhciB7XG4gICAgICAgIGRpc3BsYXk6IG5vbmU7IH1cbiAgICAgICNwYWdlLWludGVncmF0aW9ucyAuaW50ZWdyYXRpb25zLWxpc3RfX3Jlc3VsdHMtY2F0ZWdvcnkgLmludGVncmF0aW9ucy1saXN0X19yZXN1bHRzLXJvdyAuaW50ZWdyYXRpb25zLWNhcmQ6Zmlyc3QtY2hpbGQge1xuICAgICAgICBtYXJnaW4tbGVmdDogMTZweDsgfVxuICAgICAgI3BhZ2UtaW50ZWdyYXRpb25zIC5pbnRlZ3JhdGlvbnMtbGlzdF9fcmVzdWx0cy1jYXRlZ29yeSAuaW50ZWdyYXRpb25zLWxpc3RfX3Jlc3VsdHMtcm93IC5pbnRlZ3JhdGlvbnMtY2FyZDpsYXN0LWNoaWxkIHtcbiAgICAgICAgbWFyZ2luLXJpZ2h0OiAxNnB4OyB9XG4gICAgICAjcGFnZS1pbnRlZ3JhdGlvbnMgLmludGVncmF0aW9ucy1saXN0X19yZXN1bHRzLWNhdGVnb3J5IC5pbnRlZ3JhdGlvbnMtbGlzdF9fcmVzdWx0cy1yb3cgLmludGVncmF0aW9ucy1jYXJkIHtcbiAgICAgICAgZmxleDogMCAwIDQwJTtcbiAgICAgICAgbWF4LXdpZHRoOiA0MjBweDsgfVxuICAgICAgI3BhZ2UtaW50ZWdyYXRpb25zIC5pbnRlZ3JhdGlvbnMtbGlzdF9fcmVzdWx0cy1jYXRlZ29yeSAuaW50ZWdyYXRpb25zLWxpc3RfX3Jlc3VsdHMtcm93OmFmdGVyIHtcbiAgICAgICAgY29udGVudDogJyc7XG4gICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICBoZWlnaHQ6IDEwcHg7XG4gICAgICAgIGZsZXg6IDAgMCAxcHg7IH1cbiAgICAjcGFnZS1pbnRlZ3JhdGlvbnMgLmludGVncmF0aW9ucy1saXN0X19maWx0ZXIge1xuICAgICAgcGFkZGluZy1ib3R0b206IDQ2cHg7XG4gICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICBmbGV4OiAwOyB9XG4gICAgI3BhZ2UtaW50ZWdyYXRpb25zIC5pbnRlZ3JhdGlvbnMtbGlzdF9fZmlsdGVyLWlubmVyIHtcbiAgICAgIGhlaWdodDogMTAwJTsgfVxuICAgICNwYWdlLWludGVncmF0aW9ucyAuaW50ZWdyYXRpb25zLWxpc3RfX2ZpbHRlci1tZW51IHtcbiAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICB0b3A6IC05MHB4O1xuICAgICAgd2lkdGg6IGNhbGMoMTAwdncgLSAzMnB4KTsgfVxuICAgICNwYWdlLWludGVncmF0aW9ucyAuaW50ZWdyYXRpb25zLXNlYXJjaGJveCB7XG4gICAgICBmbGV4OiAxOyB9XG4gICAgICAjcGFnZS1pbnRlZ3JhdGlvbnMgLmludGVncmF0aW9ucy1zZWFyY2hib3ggaW5wdXQge1xuICAgICAgICBmb250LXNpemU6IDE2cHg7IH1cbiAgICAjcGFnZS1pbnRlZ3JhdGlvbnMgLmludGVncmF0aW9ucy1maWx0ZXItdG9nZ2xlIHtcbiAgICAgIGRpc3BsYXk6IGZsZXg7IH1cbiAgICAjcGFnZS1pbnRlZ3JhdGlvbnMgLmludGVncmF0aW9ucy10b2dnbGVzIHtcbiAgICAgIG1hcmdpbi10b3A6IDA7IH1cbiAgICAjcGFnZS1pbnRlZ3JhdGlvbnMgLmludGVncmF0aW9ucy1saXN0X19maWx0ZXItZmFjZXRzIHtcbiAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgIHRvcDogMDtcbiAgICAgIGhlaWdodDogMTAwJTtcbiAgICAgIHdpZHRoOiAyMDBweDtcbiAgICAgIHRyYW5zaXRpb246IHRyYW5zZm9ybSAwLjNzO1xuICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC0yMDBweCk7IH1cbiAgICAgICNwYWdlLWludGVncmF0aW9ucyAuaW50ZWdyYXRpb25zLWxpc3RfX2ZpbHRlci1mYWNldHMgPiBkaXYgKyBkaXYge1xuICAgICAgICBtYXJnaW4tdG9wOiAyMHB4OyB9XG4gICAgI3BhZ2UtaW50ZWdyYXRpb25zIC5pbnRlZ3JhdGlvbnMtbGlzdF9fZmlsdGVyLWZhY2V0cy1pbm5lciB7XG4gICAgICBwb3NpdGlvbjogc3RpY2t5O1xuICAgICAgdG9wOiA3MnB4OyB9XG4gICAgI3BhZ2UtaW50ZWdyYXRpb25zIC5zaG93LW1vYmlsZS1maWx0ZXJzIC5pbnRlZ3JhdGlvbnMtbGlzdF9fZmlsdGVyLWZhY2V0cyB7XG4gICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoMCk7IH1cbiAgICAjcGFnZS1pbnRlZ3JhdGlvbnMgLmludGVncmF0aW9ucy1saXN0X19yZXN1bHRzIHtcbiAgICAgIG1hcmdpbi1sZWZ0OiAtMTk2cHg7XG4gICAgICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gMC4zcztcbiAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgwKTtcbiAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsgfVxuICAgICAgI3BhZ2UtaW50ZWdyYXRpb25zIC5pbnRlZ3JhdGlvbnMtbGlzdF9fcmVzdWx0cyAuY2xpY2stcmVnaW9uIHtcbiAgICAgICAgZGlzcGxheTogbm9uZTsgfVxuICAgICNwYWdlLWludGVncmF0aW9ucyAuaW50ZWdyYXRpb25zLWxpc3RfX3Jlc3VsdHMubG9hZGluZyA+ICo6bm90KC5sb2FkZXIpIHtcbiAgICAgIHRyYW5zaXRpb246IG9wYWNpdHkgMC4zcztcbiAgICAgIG9wYWNpdHk6IDAgIWltcG9ydGFudDsgfVxuICAgICNwYWdlLWludGVncmF0aW9ucyAuaW50ZWdyYXRpb25zLWxpc3RfX3Jlc3VsdHMubG9hZGluZyAubG9hZGVyIHtcbiAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgdG9wOiAwO1xuICAgICAgbGVmdDogNTAlO1xuICAgICAgbWFyZ2luLWxlZnQ6IC0xNXB4O1xuICAgICAgd2lkdGg6IDMwcHg7IH1cbiAgICAgICNwYWdlLWludGVncmF0aW9ucyAuaW50ZWdyYXRpb25zLWxpc3RfX3Jlc3VsdHMubG9hZGluZyAubG9hZGVyOmJlZm9yZSB7XG4gICAgICAgIGNvbnRlbnQ6ICcnO1xuICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgICAgcGFkZGluZy10b3A6IDEwMCU7IH1cbiAgICAjcGFnZS1pbnRlZ3JhdGlvbnMgLmludGVncmF0aW9ucy1saXN0X19yZXN1bHRzLmxvYWRpbmcgLmNpcmN1bGFyIHtcbiAgICAgIGFuaW1hdGlvbjogcm90YXRlIDJzIGxpbmVhciBpbmZpbml0ZTtcbiAgICAgIGhlaWdodDogMTAwJTtcbiAgICAgIHRyYW5zZm9ybS1vcmlnaW46IGNlbnRlciBjZW50ZXI7XG4gICAgICB3aWR0aDogMTAwJTtcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgIHRvcDogMDtcbiAgICAgIGJvdHRvbTogMDtcbiAgICAgIGxlZnQ6IDA7XG4gICAgICByaWdodDogMDtcbiAgICAgIG1hcmdpbjogYXV0bzsgfVxuICAgICNwYWdlLWludGVncmF0aW9ucyAuaW50ZWdyYXRpb25zLWxpc3RfX3Jlc3VsdHMubG9hZGluZyAucGF0aCB7XG4gICAgICBzdHJva2UtZGFzaGFycmF5OiAxLCAyMDA7XG4gICAgICBzdHJva2UtZGFzaG9mZnNldDogMDtcbiAgICAgIGFuaW1hdGlvbjogZGFzaCAxLjVzIGVhc2UtaW4tb3V0IGluZmluaXRlO1xuICAgICAgc3Ryb2tlLWxpbmVjYXA6IHJvdW5kO1xuICAgICAgc3Ryb2tlOiAjMzg4MEZGO1xuICAgICAgc3Ryb2tlLXdpZHRoOiA0cHg7IH1cbiAgQGtleWZyYW1lcyByb3RhdGUge1xuICAgIDEwMCUge1xuICAgICAgdHJhbnNmb3JtOiByb3RhdGUoMzYwZGVnKTsgfSB9XG4gIEBrZXlmcmFtZXMgZGFzaCB7XG4gICAgMCUge1xuICAgICAgc3Ryb2tlLWRhc2hhcnJheTogMSwgMjAwO1xuICAgICAgc3Ryb2tlLWRhc2hvZmZzZXQ6IDA7IH1cbiAgICA1MCUge1xuICAgICAgc3Ryb2tlLWRhc2hhcnJheTogODksIDIwMDtcbiAgICAgIHN0cm9rZS1kYXNob2Zmc2V0OiAtMzVweDsgfVxuICAgIDEwMCUge1xuICAgICAgc3Ryb2tlLWRhc2hhcnJheTogODksIDIwMDtcbiAgICAgIHN0cm9rZS1kYXNob2Zmc2V0OiAtMTI0cHg7IH0gfVxuICAgICNwYWdlLWludGVncmF0aW9ucyAuc2hvdy1tb2JpbGUtZmlsdGVycyAuaW50ZWdyYXRpb25zLWxpc3RfX3Jlc3VsdHMge1xuICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKDIwMHB4KTsgfVxuICAgICAgI3BhZ2UtaW50ZWdyYXRpb25zIC5zaG93LW1vYmlsZS1maWx0ZXJzIC5pbnRlZ3JhdGlvbnMtbGlzdF9fcmVzdWx0cyAuY2xpY2stcmVnaW9uIHtcbiAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgICBoZWlnaHQ6IDEwMCU7XG4gICAgICAgIHotaW5kZXg6IDk5OTtcbiAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICB0b3A6IDA7XG4gICAgICAgIGxlZnQ6IDA7IH1cbiAgI3BhZ2UtaW50ZWdyYXRpb25zLWRldGFpbCAuaW50ZWdyYXRpb25zLWRldGFpbF9fd3JhcHBlciB7XG4gICAgbWFyZ2luLWJvdHRvbTogOTBweDtcbiAgICBtYXgtd2lkdGg6IDUwMHB4OyB9XG4gICNwYWdlLWludGVncmF0aW9ucy1kZXRhaWwgLmludGVncmF0aW9ucy1kZXRhaWxfX25hdiB7XG4gICAgbWFyZ2luLWJvdHRvbTogMzBweDsgfVxuICAjcGFnZS1pbnRlZ3JhdGlvbnMtZGV0YWlsIC5pbnRlZ3JhdGlvbnMtZGV0YWlsX19oZWFkZXIge1xuICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgcGFkZGluZy1ib3R0b206IDA7XG4gICAgYm9yZGVyLWJvdHRvbTogMDsgfVxuICAgICNwYWdlLWludGVncmF0aW9ucy1kZXRhaWwgLmludGVncmF0aW9ucy1kZXRhaWxfX2hlYWRlciBwIHtcbiAgICAgIG1heC13aWR0aDogNTAwcHg7IH1cbiAgICAjcGFnZS1pbnRlZ3JhdGlvbnMtZGV0YWlsIC5pbnRlZ3JhdGlvbnMtZGV0YWlsX19oZWFkZXIgdWwge1xuICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7IH1cbiAgI3BhZ2UtaW50ZWdyYXRpb25zLWRldGFpbCAuaW50ZWdyYXRpb25zLWRldGFpbF9fbG9nbyB7XG4gICAgbWFyZ2luLXJpZ2h0OiAwO1xuICAgIG1hcmdpbi1ib3R0b206IDQwcHg7XG4gICAgd2lkdGg6IDEzMnB4O1xuICAgIGhlaWdodDogMTE4cHg7XG4gICAgZmxleDogMCAwIDExOHB4OyB9XG4gICAgI3BhZ2UtaW50ZWdyYXRpb25zLWRldGFpbCAuaW50ZWdyYXRpb25zLWRldGFpbF9fbG9nbyBpbWcge1xuICAgICAgbWF4LWhlaWdodDogNTBweDtcbiAgICAgIG1heC13aWR0aDogMTIwcHg7IH1cbiAgI3BhZ2UtaW50ZWdyYXRpb25zLWRldGFpbCAuaW50ZWdyYXRpb25zLWRldGFpbF9fbG9nbyArIGRpdiB7XG4gICAgZmxleDogMDsgfVxuICAjcGFnZS1pbnRlZ3JhdGlvbnMtZGV0YWlsIC5pbnRlZ3JhdGlvbnMtZGV0YWlsX19ib2R5IHtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgcGFkZGluZy10b3A6IDE0MHB4O1xuICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47IH1cbiAgI3BhZ2UtaW50ZWdyYXRpb25zLWRldGFpbCAuaW50ZWdyYXRpb25zLWRldGFpbF9fYWN0aW9ucyB7XG4gICAgbWFyZ2luLWxlZnQ6IDA7XG4gICAgZmxleDogbm9uZTsgfVxuICAjcGFnZS1pbnRlZ3JhdGlvbnMtZGV0YWlsIC5pbnRlZ3JhdGlvbnMtZGV0YWlsX19jdGEge1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICB0b3A6IDA7XG4gICAgbGVmdDogMDtcbiAgICB3aWR0aDogMTAwJTsgfVxuICAjcGFnZS1pbnRlZ3JhdGlvbnMtZGV0YWlsIC5pbnRlZ3JhdGlvbnMtZGV0YWlsX19hY3Rpb25zLWlubmVyIHtcbiAgICBwb3NpdGlvbjogc3RhdGljOyB9XG4gICNwYWdlLWludGVncmF0aW9ucy1kZXRhaWwgLmludGVncmF0aW9ucy1kZXRhaWxfX2N0YS1zZWNvbmRhcnkge1xuICAgIGRpc3BsYXk6IG5vbmU7IH0gfVxuIl19 */\n"
  },
  {
    "path": "content/css/pages/integrations.css",
    "content": ".integrations-card {\n  transition: all 0.3s;\n  display: block;\n  position: relative;\n  -ms-flex: 0 0 calc(25% - 16px);\n      flex: 0 0 calc(25% - 16px);\n  margin: 0 8px;\n  background: #FFFFFF;\n  box-shadow: 0 3px 13px rgba(0, 0, 0, 0.08), 0 2px 4px rgba(0, 0, 0, 0.08);\n  border-radius: 16px; }\n  .integrations-card h2 {\n    font-size: 16px;\n    font-weight: 600;\n    color: #000; }\n  .integrations-card:hover {\n    box-shadow: 0 8px 24px rgba(0, 0, 0, 0.08), 0 6px 12px rgba(0, 0, 0, 0.08); }\n  .integrations-card--premier:after {\n    content: url(\"data:image/svg+xml,%3csvg width='52' height='50' viewBox='0 0 52 50' fill='none' xmlns='http://www.w3.org/2000/svg'%3e%3cpath d='M52 43L5 0H44C48.4183 0 52 3.58172 52 8V43Z' fill='%2387B1F7'/%3e%3cpath d='M41 13.6464L44.9009 16L43.869 11.5604L47.3125 8.57528L42.7729 8.18544L41 4L39.2268 8.18544L34.6875 8.57528L38.131 11.5604L37.0988 16L41 13.6464Z' fill='white'/%3e%3c/svg%3e\");\n    position: absolute;\n    top: 0;\n    right: 0; }\n  .integrations-card--featured {\n    -ms-flex: 0 0 calc(33% - 10px);\n        flex: 0 0 calc(33% - 10px);\n    padding: 24px; }\n    .integrations-card--featured h1 {\n      font-size: 18px;\n      line-height: 25px;\n      font-weight: 600;\n      color: #000000;\n      margin-bottom: 6px; }\n    .integrations-card--featured p {\n      font-size: 14px;\n      line-height: 22px;\n      color: #637696;\n      margin-bottom: 0; }\n    .integrations-card--featured ul {\n      list-style-type: none;\n      margin-top: 0;\n      padding: 0;\n      position: absolute;\n      top: 26px;\n      right: 26px;\n      text-align: right; }\n    .integrations-card--featured .integrations-tag {\n      margin-bottom: 2px; }\n    .integrations-card--featured .integrations-card__image {\n      height: 70px;\n      display: -ms-flexbox;\n      display: flex;\n      -ms-flex-direction: column;\n          flex-direction: column;\n      -ms-flex-pack: center;\n          justify-content: center;\n      -ms-flex-align: start;\n          align-items: flex-start; }\n      .integrations-card--featured .integrations-card__image img {\n        max-height: 70px;\n        max-width: 180px; }\n  .integrations-card--small h2 {\n    margin-top: 0;\n    margin-bottom: 0;\n    padding: 14px 18px; }\n  .integrations-card--small .integrations-card__image {\n    height: 116px;\n    width: 100%;\n    display: -ms-flexbox;\n    display: flex;\n    -ms-flex-pack: center;\n        justify-content: center;\n    -ms-flex-align: center;\n        align-items: center;\n    border-bottom: 1px solid #ECF0F5; }\n    .integrations-card--small .integrations-card__image img {\n      max-height: 50px;\n      max-width: 140px; }\n\n.integrations-tag {\n  font-weight: 500;\n  line-height: 1;\n  font-size: 9px;\n  letter-spacing: 0.03em;\n  text-transform: uppercase;\n  color: #9FABBE;\n  border: 1px solid #E2E9F3;\n  border-radius: 100px;\n  padding: 3px 6px;\n  display: -ms-inline-flexbox;\n  display: inline-flex;\n  -ms-flex-align: center;\n      align-items: center; }\n  .integrations-tag--premier {\n    background-color: #87B1F7;\n    position: relative;\n    color: #fff;\n    border: none;\n    padding-left: 22px; }\n    .integrations-tag--premier ion-icon {\n      position: absolute;\n      top: 50%;\n      -webkit-transform: translateY(-50%);\n              transform: translateY(-50%);\n      left: 6px;\n      width: 13px;\n      height: 13px;\n      fill: #fff; }\n\n#page-integrations.show {\n  display: block; }\n\n#page-integrations.hide {\n  display: none; }\n\n#page-integrations .integrations-hero {\n  text-align: center;\n  margin: 100px 0; }\n  #page-integrations .integrations-hero h1 {\n    font-size: 48px;\n    letter-spacing: -0.02em;\n    color: #000000; }\n  #page-integrations .integrations-hero p {\n    font-size: 24px;\n    letter-spacing: -0.02em;\n    color: #394D71; }\n\n#page-integrations .integrations-featured {\n  display: -ms-flexbox;\n  display: flex;\n  margin-left: -8px; }\n\n#page-integrations .integrations-list {\n  display: -ms-flexbox;\n  display: flex;\n  margin: 100px 0 140px; }\n\n#page-integrations .integrations-list__filter {\n  -ms-flex: 0 0 200px;\n      flex: 0 0 200px; }\n  #page-integrations .integrations-list__filter h4 {\n    font-weight: 600;\n    font-size: 11px;\n    letter-spacing: 0.05em;\n    text-transform: uppercase;\n    color: #92A0B9;\n    margin-bottom: 14px; }\n\n#page-integrations .integrations-searchbox {\n  position: relative; }\n  #page-integrations .integrations-searchbox ion-icon {\n    position: absolute;\n    top: 50%;\n    -webkit-transform: translateY(-50%);\n            transform: translateY(-50%); }\n    #page-integrations .integrations-searchbox ion-icon[name=\"search\"] {\n      color: #3880FF;\n      left: 11px; }\n    #page-integrations .integrations-searchbox ion-icon[name=\"close\"] {\n      transition: opacity 0.3s;\n      right: 11px;\n      pointer-events: none;\n      color: rgba(69, 88, 121, 0.75);\n      opacity: 0; }\n  #page-integrations .integrations-searchbox input {\n    border-radius: 100px;\n    border: none;\n    outline: none;\n    background: #F5F8FC;\n    font-size: 14px;\n    padding: 8px 30px;\n    color: #455879; }\n    #page-integrations .integrations-searchbox input::-webkit-input-placeholder {\n      color: #8E9FBC; }\n    #page-integrations .integrations-searchbox input::-moz-placeholder {\n      color: #8E9FBC; }\n    #page-integrations .integrations-searchbox input:-ms-input-placeholder {\n      color: #8E9FBC; }\n    #page-integrations .integrations-searchbox input::placeholder {\n      color: #8E9FBC; }\n  #page-integrations .integrations-searchbox.active ion-icon[name=\"close\"] {\n    opacity: 1;\n    pointer-events: all;\n    cursor: pointer; }\n\n#page-integrations .integrations-category-filter a,\n#page-integrations .integrations-check__label {\n  font-family: \"Eina\", \"Helvetica Neue\", Helvetica, sans-serif;\n  font-weight: 600;\n  line-height: 1;\n  font-size: 14px;\n  color: #2C3B55; }\n\n#page-integrations .integrations-toggles {\n  margin: 36px 0; }\n  #page-integrations .integrations-toggles .integrations-check,\n  #page-integrations .integrations-toggles .integrations-check__label,\n  #page-integrations .integrations-toggles .integrations-check__input {\n    cursor: pointer; }\n  #page-integrations .integrations-toggles .integrations-check + .integrations-check {\n    margin-top: 6px; }\n  #page-integrations .integrations-toggles .integrations-check__label {\n    margin-left: 6px; }\n\n#page-integrations .integrations-category-filter {\n  list-style-type: none;\n  margin: 0;\n  padding: 0;\n  transition: opacity 0.3s; }\n  #page-integrations .integrations-category-filter li a {\n    transition: color 0.3s;\n    height: 20px;\n    display: -ms-flexbox;\n    display: flex;\n    -ms-flex-align: center;\n        align-items: center;\n    outline: none;\n    text-decoration: none; }\n    #page-integrations .integrations-category-filter li a:hover {\n      color: #3880FF; }\n  #page-integrations .integrations-category-filter li + li {\n    margin-top: 12px; }\n  #page-integrations .integrations-category-filter:not(.disable) li.active a {\n    pointer-events: none;\n    color: #3880FF;\n    padding-left: 8px;\n    border-left: 2px solid rgba(56, 128, 255, 0.4); }\n  #page-integrations .integrations-category-filter.disable {\n    cursor: not-allowed;\n    opacity: 0.4; }\n    #page-integrations .integrations-category-filter.disable a {\n      pointer-events: none; }\n\n#page-integrations .integrations-list__results {\n  margin-left: 80px;\n  -ms-flex: 1 0 auto;\n      flex: 1 0 auto; }\n\n#page-integrations .integrations-list__results-category:not(:first-child) {\n  margin-top: 64px; }\n\n#page-integrations .integrations-list__results-header {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-pack: justify;\n      justify-content: space-between;\n  -ms-flex-align: baseline;\n      align-items: baseline;\n  margin-bottom: 8px; }\n  #page-integrations .integrations-list__results-header h4 {\n    font-size: 20px;\n    font-weight: 600; }\n  #page-integrations .integrations-list__results-header a {\n    font-weight: 600;\n    font-size: 16px;\n    font-family: \"Eina\", \"Helvetica Neue\", Helvetica, sans-serif; }\n    #page-integrations .integrations-list__results-header a ion-icon {\n      transition: -webkit-transform 0.3s;\n      transition: transform 0.3s;\n      transition: transform 0.3s, -webkit-transform 0.3s;\n      -webkit-transform: translate(0, 1px);\n              transform: translate(0, 1px); }\n    #page-integrations .integrations-list__results-header a:hover ion-icon {\n      -webkit-transform: translate(2px, 1px);\n              transform: translate(2px, 1px); }\n\n#page-integrations .integrations-list__results-row {\n  display: -ms-flexbox;\n  display: flex;\n  margin-left: -8px; }\n\n#page-integrations .integrations-list__results-grid {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-wrap: wrap;\n      flex-wrap: wrap;\n  margin-left: -8px;\n  margin-right: -8px; }\n  #page-integrations .integrations-list__results-grid .integrations-card {\n    margin-bottom: 16px; }\n\n#page-integrations .integrations-list__empty-row {\n  opacity: 0.5;\n  margin-left: 8px; }\n\n#page-integrations .integrations-list__results-form {\n  display: none;\n  background: #F6F8FB;\n  border-radius: 16px;\n  -ms-flex-direction: column;\n      flex-direction: column;\n  -ms-flex-pack: center;\n      justify-content: center;\n  padding: 32px;\n  max-width: 600px;\n  margin-left: auto;\n  margin-right: auto; }\n  #page-integrations .integrations-list__results-form h3 {\n    text-align: center;\n    max-width: 400px;\n    margin-top: 10px;\n    margin-left: auto;\n    margin-right: auto;\n    font-size: 22px;\n    font-weight: 600;\n    line-height: 30px;\n    color: #000; }\n  #page-integrations .integrations-list__results-form.show {\n    display: -ms-flexbox;\n    display: flex; }\n  #page-integrations .integrations-list__results-form .hs_submit {\n    text-align: center; }\n\n#page-integrations .integrations-list__results-search {\n  display: none; }\n\n#page-integrations .integrations-list__empty-message {\n  text-align: center;\n  display: block;\n  margin-bottom: 48px;\n  font-size: 16px;\n  width: 100%; }\n  #page-integrations .integrations-list__empty-message b {\n    font-weight: 600; }\n\n#page-integrations-detail .integrations-detail__nav {\n  margin-top: 20px;\n  margin-bottom: 80px; }\n  #page-integrations-detail .integrations-detail__nav a {\n    font-family: \"Eina\", \"Helvetica Neue\", Helvetica, sans-serif;\n    font-size: 16px;\n    font-weight: 600;\n    display: -ms-flexbox;\n    display: flex;\n    -ms-flex-align: center;\n        align-items: center; }\n    #page-integrations-detail .integrations-detail__nav a ion-icon {\n      transition: -webkit-transform 0.3s;\n      transition: transform 0.3s;\n      transition: transform 0.3s, -webkit-transform 0.3s;\n      -webkit-transform: translateY(-2px);\n              transform: translateY(-2px);\n      margin-right: 8px; }\n    #page-integrations-detail .integrations-detail__nav a:hover ion-icon {\n      -webkit-transform: translate(-2px, -2px);\n              transform: translate(-2px, -2px); }\n\n#page-integrations-detail .integrations-detail__wrapper {\n  max-width: 748px;\n  margin-left: auto;\n  margin-right: auto;\n  margin-bottom: 140px; }\n\n#page-integrations-detail .integrations-detail__header {\n  padding-bottom: 38px;\n  margin-bottom: 38px;\n  border-bottom: 1px solid #EDF2F7;\n  display: -ms-flexbox;\n  display: flex; }\n  #page-integrations-detail .integrations-detail__header h1 {\n    margin: 0;\n    font-size: 32px;\n    font-weight: 600; }\n  #page-integrations-detail .integrations-detail__header p {\n    line-height: 28px;\n    font-size: 18px;\n    letter-spacing: -0.02em;\n    color: #637696;\n    max-width: 400px;\n    padding: 5px 0 6px; }\n  #page-integrations-detail .integrations-detail__header ul {\n    margin: 0;\n    padding: 0;\n    list-style-type: none;\n    display: -ms-flexbox;\n    display: flex; }\n  #page-integrations-detail .integrations-detail__header .integrations-tag {\n    font-size: 10px;\n    padding: 3px 7px 4px; }\n    #page-integrations-detail .integrations-detail__header .integrations-tag + .integrations-tag {\n      margin-left: 6px; }\n    #page-integrations-detail .integrations-detail__header .integrations-tag--premier {\n      padding-left: 22px; }\n\n#page-integrations-detail .integrations-detail__logo {\n  background: #FFFFFF;\n  box-shadow: 0px 0px 3px rgba(0, 0, 0, 0.08), 0px 3px 6px rgba(0, 0, 0, 0.1);\n  border-radius: 8px;\n  width: 200px;\n  height: 180px;\n  -ms-flex: 0 0 200px;\n      flex: 0 0 200px;\n  margin-right: 38px;\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-pack: center;\n      justify-content: center;\n  -ms-flex-align: center;\n      align-items: center; }\n  #page-integrations-detail .integrations-detail__logo img {\n    max-height: 70px;\n    max-width: 140px; }\n\n#page-integrations-detail .integrations-detail__logo + div {\n  -ms-flex: 1 0 0px;\n      flex: 1 0 0;\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-direction: column;\n      flex-direction: column;\n  -ms-flex-pack: center;\n      justify-content: center; }\n\n#page-integrations-detail .integrations-detail__body {\n  display: -ms-flexbox;\n  display: flex; }\n\n#page-integrations-detail .integrations-detail__content {\n  -ms-flex: 1 0 0px;\n      flex: 1 0 0; }\n  #page-integrations-detail .integrations-detail__content h1,\n  #page-integrations-detail .integrations-detail__content h2,\n  #page-integrations-detail .integrations-detail__content h3,\n  #page-integrations-detail .integrations-detail__content h4,\n  #page-integrations-detail .integrations-detail__content h5,\n  #page-integrations-detail .integrations-detail__content h6 {\n    font-size: 16px;\n    font-weight: 600; }\n  #page-integrations-detail .integrations-detail__content p,\n  #page-integrations-detail .integrations-detail__content ul {\n    font-size: 14px;\n    line-height: 1.6;\n    color: #637696;\n    margin-bottom: 40px; }\n    #page-integrations-detail .integrations-detail__content p:last-child,\n    #page-integrations-detail .integrations-detail__content ul:last-child {\n      margin-bottom: 0; }\n  #page-integrations-detail .integrations-detail__content ul {\n    margin-left: 0;\n    padding: 0; }\n  #page-integrations-detail .integrations-detail__content ul li {\n    list-style-type: none;\n    position: relative;\n    padding-left: 22px; }\n    #page-integrations-detail .integrations-detail__content ul li + li {\n      margin-top: 12px; }\n    #page-integrations-detail .integrations-detail__content ul li:before {\n      position: absolute;\n      top: 3px;\n      left: 0;\n      content: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16px' height='16px' fill='%2362C67B' viewBox='0 0 512 512'%3E%3Cpath d='M170.718 216.482L141.6 245.6l93.6 93.6 208-208-29.118-29.118L235.2 279.918l-64.482-63.436zM422.4 256c0 91.518-74.883 166.4-166.4 166.4S89.6 347.518 89.6 256 164.482 89.6 256 89.6c15.6 0 31.2 2.082 45.764 6.241L334 63.6C310.082 53.2 284.082 48 256 48 141.6 48 48 141.6 48 256s93.6 208 208 208 208-93.6 208-208h-41.6z'/%3E%3C/svg%3E\");\n      width: 16px;\n      heoght: 16px;\n      fill: #62C67B; }\n\n#page-integrations-detail .integrations-detail__actions {\n  -ms-flex: 0 0 192px;\n      flex: 0 0 192px;\n  margin-left: 46px; }\n\n#page-integrations-detail .integrations-detail__actions-inner {\n  position: -webkit-sticky;\n  position: sticky;\n  top: 20px; }\n  #page-integrations-detail .integrations-detail__actions-inner h5 {\n    margin-top: 38px;\n    color: #73849A;\n    font-size: 10px;\n    text-transform: uppercase;\n    letter-spacing: 0.08em;\n    font-weight: 700;\n    margin-bottom: 4px; }\n  #page-integrations-detail .integrations-detail__actions-inner ul {\n    list-style-type: none;\n    margin: 0;\n    padding: 0; }\n  #page-integrations-detail .integrations-detail__actions-inner li + li {\n    margin-top: 4px; }\n  #page-integrations-detail .integrations-detail__actions-inner li a {\n    transition: 0.3s all;\n    border-bottom: 1px solid #B2CEFF; }\n    #page-integrations-detail .integrations-detail__actions-inner li a:hover {\n      border-bottom: 1px solid #5b768e; }\n\n#page-integrations-detail .integrations-detail__cta {\n  background: #F3F7FF;\n  border-radius: 8px;\n  text-align: center;\n  padding: 16px; }\n  #page-integrations-detail .integrations-detail__cta span {\n    font-size: 13px;\n    line-height: 1.3;\n    display: block;\n    margin-bottom: 12px;\n    color: #637696; }\n  #page-integrations-detail .integrations-detail__cta .btn {\n    display: block;\n    width: 100%;\n    font-weight: 700;\n    font-size: 15px; }\n\n#page-integrations-detail .integrations-detail__cta-secondary {\n  border-top: 1px solid #EDF2F7;\n  padding-top: 26px;\n  margin-top: 26px; }\n  #page-integrations-detail .integrations-detail__cta-secondary p {\n    font-weight: 500;\n    line-height: 17px;\n    font-size: 13px;\n    color: #637696; }\n  #page-integrations-detail .integrations-detail__cta-secondary .btn {\n    font-size: 13px;\n    font-weight: 700;\n    padding: 8px 13px 7px; }\n\n#page-integrations-detail .integrations-detail__form {\n  border-top: 1px solid #EDF2F7;\n  padding-top: 60px;\n  margin-top: 38px; }\n  #page-integrations-detail .integrations-detail__form h1 {\n    margin: 0 0 4px;\n    font-size: 26px;\n    font-weight: 600;\n    text-align: center; }\n  #page-integrations-detail .integrations-detail__form > p {\n    line-height: 28px;\n    font-size: 18px;\n    letter-spacing: -0.02em;\n    color: #637696;\n    max-width: 400px;\n    margin-left: auto;\n    margin-right: auto;\n    margin-bottom: 26px;\n    text-align: center; }\n  #page-integrations-detail .integrations-detail__form .hs_submit {\n    text-align: center; }\n\n/*# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImludGVncmF0aW9ucy5jc3MiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7RUFDRSxxQkFBcUI7RUFDckIsZUFBZTtFQUNmLG1CQUFtQjtFQUNuQiwrQkFBMkI7TUFBM0IsMkJBQTJCO0VBQzNCLGNBQWM7RUFDZCxvQkFBb0I7RUFDcEIsMEVBQTBFO0VBQzFFLG9CQUFvQixFQUFFO0VBQ3RCO0lBQ0UsZ0JBQWdCO0lBQ2hCLGlCQUFpQjtJQUNqQixZQUFZLEVBQUU7RUFDaEI7SUFDRSwyRUFBMkUsRUFBRTtFQUMvRTtJQUNFLDBZQUEwWTtJQUMxWSxtQkFBbUI7SUFDbkIsT0FBTztJQUNQLFNBQVMsRUFBRTtFQUNiO0lBQ0UsK0JBQTJCO1FBQTNCLDJCQUEyQjtJQUMzQixjQUFjLEVBQUU7SUFDaEI7TUFDRSxnQkFBZ0I7TUFDaEIsa0JBQWtCO01BQ2xCLGlCQUFpQjtNQUNqQixlQUFlO01BQ2YsbUJBQW1CLEVBQUU7SUFDdkI7TUFDRSxnQkFBZ0I7TUFDaEIsa0JBQWtCO01BQ2xCLGVBQWU7TUFDZixpQkFBaUIsRUFBRTtJQUNyQjtNQUNFLHNCQUFzQjtNQUN0QixjQUFjO01BQ2QsV0FBVztNQUNYLG1CQUFtQjtNQUNuQixVQUFVO01BQ1YsWUFBWTtNQUNaLGtCQUFrQixFQUFFO0lBQ3RCO01BQ0UsbUJBQW1CLEVBQUU7SUFDdkI7TUFDRSxhQUFhO01BQ2IscUJBQWM7TUFBZCxjQUFjO01BQ2QsMkJBQXVCO1VBQXZCLHVCQUF1QjtNQUN2QixzQkFBd0I7VUFBeEIsd0JBQXdCO01BQ3hCLHNCQUF3QjtVQUF4Qix3QkFBd0IsRUFBRTtNQUMxQjtRQUNFLGlCQUFpQjtRQUNqQixpQkFBaUIsRUFBRTtFQUN6QjtJQUNFLGNBQWM7SUFDZCxpQkFBaUI7SUFDakIsbUJBQW1CLEVBQUU7RUFDdkI7SUFDRSxjQUFjO0lBQ2QsWUFBWTtJQUNaLHFCQUFjO0lBQWQsY0FBYztJQUNkLHNCQUF3QjtRQUF4Qix3QkFBd0I7SUFDeEIsdUJBQW9CO1FBQXBCLG9CQUFvQjtJQUNwQixpQ0FBaUMsRUFBRTtJQUNuQztNQUNFLGlCQUFpQjtNQUNqQixpQkFBaUIsRUFBRTs7QUFFekI7RUFDRSxpQkFBaUI7RUFDakIsZUFBZTtFQUNmLGVBQWU7RUFDZix1QkFBdUI7RUFDdkIsMEJBQTBCO0VBQzFCLGVBQWU7RUFDZiwwQkFBMEI7RUFDMUIscUJBQXFCO0VBQ3JCLGlCQUFpQjtFQUNqQiw0QkFBcUI7RUFBckIscUJBQXFCO0VBQ3JCLHVCQUFvQjtNQUFwQixvQkFBb0IsRUFBRTtFQUN0QjtJQUNFLDBCQUEwQjtJQUMxQixtQkFBbUI7SUFDbkIsWUFBWTtJQUNaLGFBQWE7SUFDYixtQkFBbUIsRUFBRTtJQUNyQjtNQUNFLG1CQUFtQjtNQUNuQixTQUFTO01BQ1Qsb0NBQTRCO2NBQTVCLDRCQUE0QjtNQUM1QixVQUFVO01BQ1YsWUFBWTtNQUNaLGFBQWE7TUFDYixXQUFXLEVBQUU7O0FBRW5CO0VBQ0UsZUFBZSxFQUFFOztBQUVuQjtFQUNFLGNBQWMsRUFBRTs7QUFFbEI7RUFDRSxtQkFBbUI7RUFDbkIsZ0JBQWdCLEVBQUU7RUFDbEI7SUFDRSxnQkFBZ0I7SUFDaEIsd0JBQXdCO0lBQ3hCLGVBQWUsRUFBRTtFQUNuQjtJQUNFLGdCQUFnQjtJQUNoQix3QkFBd0I7SUFDeEIsZUFBZSxFQUFFOztBQUVyQjtFQUNFLHFCQUFjO0VBQWQsY0FBYztFQUNkLGtCQUFrQixFQUFFOztBQUV0QjtFQUNFLHFCQUFjO0VBQWQsY0FBYztFQUNkLHNCQUFzQixFQUFFOztBQUUxQjtFQUNFLG9CQUFnQjtNQUFoQixnQkFBZ0IsRUFBRTtFQUNsQjtJQUNFLGlCQUFpQjtJQUNqQixnQkFBZ0I7SUFDaEIsdUJBQXVCO0lBQ3ZCLDBCQUEwQjtJQUMxQixlQUFlO0lBQ2Ysb0JBQW9CLEVBQUU7O0FBRTFCO0VBQ0UsbUJBQW1CLEVBQUU7RUFDckI7SUFDRSxtQkFBbUI7SUFDbkIsU0FBUztJQUNULG9DQUE0QjtZQUE1Qiw0QkFBNEIsRUFBRTtJQUM5QjtNQUNFLGVBQWU7TUFDZixXQUFXLEVBQUU7SUFDZjtNQUNFLHlCQUF5QjtNQUN6QixZQUFZO01BQ1oscUJBQXFCO01BQ3JCLCtCQUErQjtNQUMvQixXQUFXLEVBQUU7RUFDakI7SUFDRSxxQkFBcUI7SUFDckIsYUFBYTtJQUNiLGNBQWM7SUFDZCxvQkFBb0I7SUFDcEIsZ0JBQWdCO0lBQ2hCLGtCQUFrQjtJQUNsQixlQUFlLEVBQUU7SUFDakI7TUFDRSxlQUFlLEVBQUU7SUFEbkI7TUFDRSxlQUFlLEVBQUU7SUFEbkI7TUFDRSxlQUFlLEVBQUU7SUFEbkI7TUFDRSxlQUFlLEVBQUU7RUFDckI7SUFDRSxXQUFXO0lBQ1gsb0JBQW9CO0lBQ3BCLGdCQUFnQixFQUFFOztBQUV0Qjs7RUFFRSw2REFBNkQ7RUFDN0QsaUJBQWlCO0VBQ2pCLGVBQWU7RUFDZixnQkFBZ0I7RUFDaEIsZUFBZSxFQUFFOztBQUVuQjtFQUNFLGVBQWUsRUFBRTtFQUNqQjs7O0lBR0UsZ0JBQWdCLEVBQUU7RUFDcEI7SUFDRSxnQkFBZ0IsRUFBRTtFQUNwQjtJQUNFLGlCQUFpQixFQUFFOztBQUV2QjtFQUNFLHNCQUFzQjtFQUN0QixVQUFVO0VBQ1YsV0FBVztFQUNYLHlCQUF5QixFQUFFO0VBQzNCO0lBQ0UsdUJBQXVCO0lBQ3ZCLGFBQWE7SUFDYixxQkFBYztJQUFkLGNBQWM7SUFDZCx1QkFBb0I7UUFBcEIsb0JBQW9CO0lBQ3BCLGNBQWM7SUFDZCxzQkFBc0IsRUFBRTtJQUN4QjtNQUNFLGVBQWUsRUFBRTtFQUNyQjtJQUNFLGlCQUFpQixFQUFFO0VBQ3JCO0lBQ0UscUJBQXFCO0lBQ3JCLGVBQWU7SUFDZixrQkFBa0I7SUFDbEIsK0NBQStDLEVBQUU7RUFDbkQ7SUFDRSxvQkFBb0I7SUFDcEIsYUFBYSxFQUFFO0lBQ2Y7TUFDRSxxQkFBcUIsRUFBRTs7QUFFN0I7RUFDRSxrQkFBa0I7RUFDbEIsbUJBQWU7TUFBZixlQUFlLEVBQUU7O0FBRW5CO0VBQ0UsaUJBQWlCLEVBQUU7O0FBRXJCO0VBQ0UscUJBQWM7RUFBZCxjQUFjO0VBQ2QsdUJBQStCO01BQS9CLCtCQUErQjtFQUMvQix5QkFBc0I7TUFBdEIsc0JBQXNCO0VBQ3RCLG1CQUFtQixFQUFFO0VBQ3JCO0lBQ0UsZ0JBQWdCO0lBQ2hCLGlCQUFpQixFQUFFO0VBQ3JCO0lBQ0UsaUJBQWlCO0lBQ2pCLGdCQUFnQjtJQUNoQiw2REFBNkQsRUFBRTtJQUMvRDtNQUNFLG1DQUEyQjtNQUEzQiwyQkFBMkI7TUFBM0IsbURBQTJCO01BQzNCLHFDQUE2QjtjQUE3Qiw2QkFBNkIsRUFBRTtJQUNqQztNQUNFLHVDQUErQjtjQUEvQiwrQkFBK0IsRUFBRTs7QUFFdkM7RUFDRSxxQkFBYztFQUFkLGNBQWM7RUFDZCxrQkFBa0IsRUFBRTs7QUFFdEI7RUFDRSxxQkFBYztFQUFkLGNBQWM7RUFDZCxvQkFBZ0I7TUFBaEIsZ0JBQWdCO0VBQ2hCLGtCQUFrQjtFQUNsQixtQkFBbUIsRUFBRTtFQUNyQjtJQUNFLG9CQUFvQixFQUFFOztBQUUxQjtFQUNFLGFBQWE7RUFDYixpQkFBaUIsRUFBRTs7QUFFckI7RUFDRSxjQUFjO0VBQ2Qsb0JBQW9CO0VBQ3BCLG9CQUFvQjtFQUNwQiwyQkFBdUI7TUFBdkIsdUJBQXVCO0VBQ3ZCLHNCQUF3QjtNQUF4Qix3QkFBd0I7RUFDeEIsY0FBYztFQUNkLGlCQUFpQjtFQUNqQixrQkFBa0I7RUFDbEIsbUJBQW1CLEVBQUU7RUFDckI7SUFDRSxtQkFBbUI7SUFDbkIsaUJBQWlCO0lBQ2pCLGlCQUFpQjtJQUNqQixrQkFBa0I7SUFDbEIsbUJBQW1CO0lBQ25CLGdCQUFnQjtJQUNoQixpQkFBaUI7SUFDakIsa0JBQWtCO0lBQ2xCLFlBQVksRUFBRTtFQUNoQjtJQUNFLHFCQUFjO0lBQWQsY0FBYyxFQUFFO0VBQ2xCO0lBQ0UsbUJBQW1CLEVBQUU7O0FBRXpCO0VBQ0UsY0FBYyxFQUFFOztBQUVsQjtFQUNFLG1CQUFtQjtFQUNuQixlQUFlO0VBQ2Ysb0JBQW9CO0VBQ3BCLGdCQUFnQjtFQUNoQixZQUFZLEVBQUU7RUFDZDtJQUNFLGlCQUFpQixFQUFFOztBQUV2QjtFQUNFLGlCQUFpQjtFQUNqQixvQkFBb0IsRUFBRTtFQUN0QjtJQUNFLDZEQUE2RDtJQUM3RCxnQkFBZ0I7SUFDaEIsaUJBQWlCO0lBQ2pCLHFCQUFjO0lBQWQsY0FBYztJQUNkLHVCQUFvQjtRQUFwQixvQkFBb0IsRUFBRTtJQUN0QjtNQUNFLG1DQUEyQjtNQUEzQiwyQkFBMkI7TUFBM0IsbURBQTJCO01BQzNCLG9DQUE0QjtjQUE1Qiw0QkFBNEI7TUFDNUIsa0JBQWtCLEVBQUU7SUFDdEI7TUFDRSx5Q0FBaUM7Y0FBakMsaUNBQWlDLEVBQUU7O0FBRXpDO0VBQ0UsaUJBQWlCO0VBQ2pCLGtCQUFrQjtFQUNsQixtQkFBbUI7RUFDbkIscUJBQXFCLEVBQUU7O0FBRXpCO0VBQ0UscUJBQXFCO0VBQ3JCLG9CQUFvQjtFQUNwQixpQ0FBaUM7RUFDakMscUJBQWM7RUFBZCxjQUFjLEVBQUU7RUFDaEI7SUFDRSxVQUFVO0lBQ1YsZ0JBQWdCO0lBQ2hCLGlCQUFpQixFQUFFO0VBQ3JCO0lBQ0Usa0JBQWtCO0lBQ2xCLGdCQUFnQjtJQUNoQix3QkFBd0I7SUFDeEIsZUFBZTtJQUNmLGlCQUFpQjtJQUNqQixtQkFBbUIsRUFBRTtFQUN2QjtJQUNFLFVBQVU7SUFDVixXQUFXO0lBQ1gsc0JBQXNCO0lBQ3RCLHFCQUFjO0lBQWQsY0FBYyxFQUFFO0VBQ2xCO0lBQ0UsZ0JBQWdCO0lBQ2hCLHFCQUFxQixFQUFFO0lBQ3ZCO01BQ0UsaUJBQWlCLEVBQUU7SUFDckI7TUFDRSxtQkFBbUIsRUFBRTs7QUFFM0I7RUFDRSxvQkFBb0I7RUFDcEIsNEVBQTRFO0VBQzVFLG1CQUFtQjtFQUNuQixhQUFhO0VBQ2IsY0FBYztFQUNkLG9CQUFnQjtNQUFoQixnQkFBZ0I7RUFDaEIsbUJBQW1CO0VBQ25CLHFCQUFjO0VBQWQsY0FBYztFQUNkLHNCQUF3QjtNQUF4Qix3QkFBd0I7RUFDeEIsdUJBQW9CO01BQXBCLG9CQUFvQixFQUFFO0VBQ3RCO0lBQ0UsaUJBQWlCO0lBQ2pCLGlCQUFpQixFQUFFOztBQUV2QjtFQUNFLGtCQUFZO01BQVosWUFBWTtFQUNaLHFCQUFjO0VBQWQsY0FBYztFQUNkLDJCQUF1QjtNQUF2Qix1QkFBdUI7RUFDdkIsc0JBQXdCO01BQXhCLHdCQUF3QixFQUFFOztBQUU1QjtFQUNFLHFCQUFjO0VBQWQsY0FBYyxFQUFFOztBQUVsQjtFQUNFLGtCQUFZO01BQVosWUFBWSxFQUFFO0VBQ2Q7Ozs7OztJQU1FLGdCQUFnQjtJQUNoQixpQkFBaUIsRUFBRTtFQUNyQjs7SUFFRSxnQkFBZ0I7SUFDaEIsaUJBQWlCO0lBQ2pCLGVBQWU7SUFDZixvQkFBb0IsRUFBRTtJQUN0Qjs7TUFFRSxpQkFBaUIsRUFBRTtFQUN2QjtJQUNFLGVBQWU7SUFDZixXQUFXLEVBQUU7RUFDZjtJQUNFLHNCQUFzQjtJQUN0QixtQkFBbUI7SUFDbkIsbUJBQW1CLEVBQUU7SUFDckI7TUFDRSxpQkFBaUIsRUFBRTtJQUNyQjtNQUNFLG1CQUFtQjtNQUNuQixTQUFTO01BQ1QsUUFBUTtNQUNSLHVlQUF1ZTtNQUN2ZSxZQUFZO01BQ1osYUFBYTtNQUNiLGNBQWMsRUFBRTs7QUFFdEI7RUFDRSxvQkFBZ0I7TUFBaEIsZ0JBQWdCO0VBQ2hCLGtCQUFrQixFQUFFOztBQUV0QjtFQUNFLHlCQUFpQjtFQUFqQixpQkFBaUI7RUFDakIsVUFBVSxFQUFFO0VBQ1o7SUFDRSxpQkFBaUI7SUFDakIsZUFBZTtJQUNmLGdCQUFnQjtJQUNoQiwwQkFBMEI7SUFDMUIsdUJBQXVCO0lBQ3ZCLGlCQUFpQjtJQUNqQixtQkFBbUIsRUFBRTtFQUN2QjtJQUNFLHNCQUFzQjtJQUN0QixVQUFVO0lBQ1YsV0FBVyxFQUFFO0VBQ2Y7SUFDRSxnQkFBZ0IsRUFBRTtFQUNwQjtJQUNFLHFCQUFxQjtJQUNyQixpQ0FBaUMsRUFBRTtJQUNuQztNQUNFLGlDQUFpQyxFQUFFOztBQUV6QztFQUNFLG9CQUFvQjtFQUNwQixtQkFBbUI7RUFDbkIsbUJBQW1CO0VBQ25CLGNBQWMsRUFBRTtFQUNoQjtJQUNFLGdCQUFnQjtJQUNoQixpQkFBaUI7SUFDakIsZUFBZTtJQUNmLG9CQUFvQjtJQUNwQixlQUFlLEVBQUU7RUFDbkI7SUFDRSxlQUFlO0lBQ2YsWUFBWTtJQUNaLGlCQUFpQjtJQUNqQixnQkFBZ0IsRUFBRTs7QUFFdEI7RUFDRSw4QkFBOEI7RUFDOUIsa0JBQWtCO0VBQ2xCLGlCQUFpQixFQUFFO0VBQ25CO0lBQ0UsaUJBQWlCO0lBQ2pCLGtCQUFrQjtJQUNsQixnQkFBZ0I7SUFDaEIsZUFBZSxFQUFFO0VBQ25CO0lBQ0UsZ0JBQWdCO0lBQ2hCLGlCQUFpQjtJQUNqQixzQkFBc0IsRUFBRTs7QUFFNUI7RUFDRSw4QkFBOEI7RUFDOUIsa0JBQWtCO0VBQ2xCLGlCQUFpQixFQUFFO0VBQ25CO0lBQ0UsZ0JBQWdCO0lBQ2hCLGdCQUFnQjtJQUNoQixpQkFBaUI7SUFDakIsbUJBQW1CLEVBQUU7RUFDdkI7SUFDRSxrQkFBa0I7SUFDbEIsZ0JBQWdCO0lBQ2hCLHdCQUF3QjtJQUN4QixlQUFlO0lBQ2YsaUJBQWlCO0lBQ2pCLGtCQUFrQjtJQUNsQixtQkFBbUI7SUFDbkIsb0JBQW9CO0lBQ3BCLG1CQUFtQixFQUFFO0VBQ3ZCO0lBQ0UsbUJBQW1CLEVBQUUiLCJmaWxlIjoicGFnZXMvaW50ZWdyYXRpb25zLmNzcyIsInNvdXJjZXNDb250ZW50IjpbIi5pbnRlZ3JhdGlvbnMtY2FyZCB7XG4gIHRyYW5zaXRpb246IGFsbCAwLjNzO1xuICBkaXNwbGF5OiBibG9jaztcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBmbGV4OiAwIDAgY2FsYygyNSUgLSAxNnB4KTtcbiAgbWFyZ2luOiAwIDhweDtcbiAgYmFja2dyb3VuZDogI0ZGRkZGRjtcbiAgYm94LXNoYWRvdzogMCAzcHggMTNweCByZ2JhKDAsIDAsIDAsIDAuMDgpLCAwIDJweCA0cHggcmdiYSgwLCAwLCAwLCAwLjA4KTtcbiAgYm9yZGVyLXJhZGl1czogMTZweDsgfVxuICAuaW50ZWdyYXRpb25zLWNhcmQgaDIge1xuICAgIGZvbnQtc2l6ZTogMTZweDtcbiAgICBmb250LXdlaWdodDogNjAwO1xuICAgIGNvbG9yOiAjMDAwOyB9XG4gIC5pbnRlZ3JhdGlvbnMtY2FyZDpob3ZlciB7XG4gICAgYm94LXNoYWRvdzogMCA4cHggMjRweCByZ2JhKDAsIDAsIDAsIDAuMDgpLCAwIDZweCAxMnB4IHJnYmEoMCwgMCwgMCwgMC4wOCk7IH1cbiAgLmludGVncmF0aW9ucy1jYXJkLS1wcmVtaWVyOmFmdGVyIHtcbiAgICBjb250ZW50OiB1cmwoXCJkYXRhOmltYWdlL3N2Zyt4bWwsJTNjc3ZnIHdpZHRoPSc1MicgaGVpZ2h0PSc1MCcgdmlld0JveD0nMCAwIDUyIDUwJyBmaWxsPSdub25lJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNlJTNjcGF0aCBkPSdNNTIgNDNMNSAwSDQ0QzQ4LjQxODMgMCA1MiAzLjU4MTcyIDUyIDhWNDNaJyBmaWxsPSclMjM4N0IxRjcnLyUzZSUzY3BhdGggZD0nTTQxIDEzLjY0NjRMNDQuOTAwOSAxNkw0My44NjkgMTEuNTYwNEw0Ny4zMTI1IDguNTc1MjhMNDIuNzcyOSA4LjE4NTQ0TDQxIDRMMzkuMjI2OCA4LjE4NTQ0TDM0LjY4NzUgOC41NzUyOEwzOC4xMzEgMTEuNTYwNEwzNy4wOTg4IDE2TDQxIDEzLjY0NjRaJyBmaWxsPSd3aGl0ZScvJTNlJTNjL3N2ZyUzZVwiKTtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgdG9wOiAwO1xuICAgIHJpZ2h0OiAwOyB9XG4gIC5pbnRlZ3JhdGlvbnMtY2FyZC0tZmVhdHVyZWQge1xuICAgIGZsZXg6IDAgMCBjYWxjKDMzJSAtIDEwcHgpO1xuICAgIHBhZGRpbmc6IDI0cHg7IH1cbiAgICAuaW50ZWdyYXRpb25zLWNhcmQtLWZlYXR1cmVkIGgxIHtcbiAgICAgIGZvbnQtc2l6ZTogMThweDtcbiAgICAgIGxpbmUtaGVpZ2h0OiAyNXB4O1xuICAgICAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgICAgIGNvbG9yOiAjMDAwMDAwO1xuICAgICAgbWFyZ2luLWJvdHRvbTogNnB4OyB9XG4gICAgLmludGVncmF0aW9ucy1jYXJkLS1mZWF0dXJlZCBwIHtcbiAgICAgIGZvbnQtc2l6ZTogMTRweDtcbiAgICAgIGxpbmUtaGVpZ2h0OiAyMnB4O1xuICAgICAgY29sb3I6ICM2Mzc2OTY7XG4gICAgICBtYXJnaW4tYm90dG9tOiAwOyB9XG4gICAgLmludGVncmF0aW9ucy1jYXJkLS1mZWF0dXJlZCB1bCB7XG4gICAgICBsaXN0LXN0eWxlLXR5cGU6IG5vbmU7XG4gICAgICBtYXJnaW4tdG9wOiAwO1xuICAgICAgcGFkZGluZzogMDtcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgIHRvcDogMjZweDtcbiAgICAgIHJpZ2h0OiAyNnB4O1xuICAgICAgdGV4dC1hbGlnbjogcmlnaHQ7IH1cbiAgICAuaW50ZWdyYXRpb25zLWNhcmQtLWZlYXR1cmVkIC5pbnRlZ3JhdGlvbnMtdGFnIHtcbiAgICAgIG1hcmdpbi1ib3R0b206IDJweDsgfVxuICAgIC5pbnRlZ3JhdGlvbnMtY2FyZC0tZmVhdHVyZWQgLmludGVncmF0aW9ucy1jYXJkX19pbWFnZSB7XG4gICAgICBoZWlnaHQ6IDcwcHg7XG4gICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICAgICAgYWxpZ24taXRlbXM6IGZsZXgtc3RhcnQ7IH1cbiAgICAgIC5pbnRlZ3JhdGlvbnMtY2FyZC0tZmVhdHVyZWQgLmludGVncmF0aW9ucy1jYXJkX19pbWFnZSBpbWcge1xuICAgICAgICBtYXgtaGVpZ2h0OiA3MHB4O1xuICAgICAgICBtYXgtd2lkdGg6IDE4MHB4OyB9XG4gIC5pbnRlZ3JhdGlvbnMtY2FyZC0tc21hbGwgaDIge1xuICAgIG1hcmdpbi10b3A6IDA7XG4gICAgbWFyZ2luLWJvdHRvbTogMDtcbiAgICBwYWRkaW5nOiAxNHB4IDE4cHg7IH1cbiAgLmludGVncmF0aW9ucy1jYXJkLS1zbWFsbCAuaW50ZWdyYXRpb25zLWNhcmRfX2ltYWdlIHtcbiAgICBoZWlnaHQ6IDExNnB4O1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgI0VDRjBGNTsgfVxuICAgIC5pbnRlZ3JhdGlvbnMtY2FyZC0tc21hbGwgLmludGVncmF0aW9ucy1jYXJkX19pbWFnZSBpbWcge1xuICAgICAgbWF4LWhlaWdodDogNTBweDtcbiAgICAgIG1heC13aWR0aDogMTQwcHg7IH1cblxuLmludGVncmF0aW9ucy10YWcge1xuICBmb250LXdlaWdodDogNTAwO1xuICBsaW5lLWhlaWdodDogMTtcbiAgZm9udC1zaXplOiA5cHg7XG4gIGxldHRlci1zcGFjaW5nOiAwLjAzZW07XG4gIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XG4gIGNvbG9yOiAjOUZBQkJFO1xuICBib3JkZXI6IDFweCBzb2xpZCAjRTJFOUYzO1xuICBib3JkZXItcmFkaXVzOiAxMDBweDtcbiAgcGFkZGluZzogM3B4IDZweDtcbiAgZGlzcGxheTogaW5saW5lLWZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7IH1cbiAgLmludGVncmF0aW9ucy10YWctLXByZW1pZXIge1xuICAgIGJhY2tncm91bmQtY29sb3I6ICM4N0IxRjc7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIGNvbG9yOiAjZmZmO1xuICAgIGJvcmRlcjogbm9uZTtcbiAgICBwYWRkaW5nLWxlZnQ6IDIycHg7IH1cbiAgICAuaW50ZWdyYXRpb25zLXRhZy0tcHJlbWllciBpb24taWNvbiB7XG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICB0b3A6IDUwJTtcbiAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtNTAlKTtcbiAgICAgIGxlZnQ6IDZweDtcbiAgICAgIHdpZHRoOiAxM3B4O1xuICAgICAgaGVpZ2h0OiAxM3B4O1xuICAgICAgZmlsbDogI2ZmZjsgfVxuXG4jcGFnZS1pbnRlZ3JhdGlvbnMuc2hvdyB7XG4gIGRpc3BsYXk6IGJsb2NrOyB9XG5cbiNwYWdlLWludGVncmF0aW9ucy5oaWRlIHtcbiAgZGlzcGxheTogbm9uZTsgfVxuXG4jcGFnZS1pbnRlZ3JhdGlvbnMgLmludGVncmF0aW9ucy1oZXJvIHtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICBtYXJnaW46IDEwMHB4IDA7IH1cbiAgI3BhZ2UtaW50ZWdyYXRpb25zIC5pbnRlZ3JhdGlvbnMtaGVybyBoMSB7XG4gICAgZm9udC1zaXplOiA0OHB4O1xuICAgIGxldHRlci1zcGFjaW5nOiAtMC4wMmVtO1xuICAgIGNvbG9yOiAjMDAwMDAwOyB9XG4gICNwYWdlLWludGVncmF0aW9ucyAuaW50ZWdyYXRpb25zLWhlcm8gcCB7XG4gICAgZm9udC1zaXplOiAyNHB4O1xuICAgIGxldHRlci1zcGFjaW5nOiAtMC4wMmVtO1xuICAgIGNvbG9yOiAjMzk0RDcxOyB9XG5cbiNwYWdlLWludGVncmF0aW9ucyAuaW50ZWdyYXRpb25zLWZlYXR1cmVkIHtcbiAgZGlzcGxheTogZmxleDtcbiAgbWFyZ2luLWxlZnQ6IC04cHg7IH1cblxuI3BhZ2UtaW50ZWdyYXRpb25zIC5pbnRlZ3JhdGlvbnMtbGlzdCB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIG1hcmdpbjogMTAwcHggMCAxNDBweDsgfVxuXG4jcGFnZS1pbnRlZ3JhdGlvbnMgLmludGVncmF0aW9ucy1saXN0X19maWx0ZXIge1xuICBmbGV4OiAwIDAgMjAwcHg7IH1cbiAgI3BhZ2UtaW50ZWdyYXRpb25zIC5pbnRlZ3JhdGlvbnMtbGlzdF9fZmlsdGVyIGg0IHtcbiAgICBmb250LXdlaWdodDogNjAwO1xuICAgIGZvbnQtc2l6ZTogMTFweDtcbiAgICBsZXR0ZXItc3BhY2luZzogMC4wNWVtO1xuICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XG4gICAgY29sb3I6ICM5MkEwQjk7XG4gICAgbWFyZ2luLWJvdHRvbTogMTRweDsgfVxuXG4jcGFnZS1pbnRlZ3JhdGlvbnMgLmludGVncmF0aW9ucy1zZWFyY2hib3gge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7IH1cbiAgI3BhZ2UtaW50ZWdyYXRpb25zIC5pbnRlZ3JhdGlvbnMtc2VhcmNoYm94IGlvbi1pY29uIHtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgdG9wOiA1MCU7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC01MCUpOyB9XG4gICAgI3BhZ2UtaW50ZWdyYXRpb25zIC5pbnRlZ3JhdGlvbnMtc2VhcmNoYm94IGlvbi1pY29uW25hbWU9XCJzZWFyY2hcIl0ge1xuICAgICAgY29sb3I6ICMzODgwRkY7XG4gICAgICBsZWZ0OiAxMXB4OyB9XG4gICAgI3BhZ2UtaW50ZWdyYXRpb25zIC5pbnRlZ3JhdGlvbnMtc2VhcmNoYm94IGlvbi1pY29uW25hbWU9XCJjbG9zZVwiXSB7XG4gICAgICB0cmFuc2l0aW9uOiBvcGFjaXR5IDAuM3M7XG4gICAgICByaWdodDogMTFweDtcbiAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lO1xuICAgICAgY29sb3I6IHJnYmEoNjksIDg4LCAxMjEsIDAuNzUpO1xuICAgICAgb3BhY2l0eTogMDsgfVxuICAjcGFnZS1pbnRlZ3JhdGlvbnMgLmludGVncmF0aW9ucy1zZWFyY2hib3ggaW5wdXQge1xuICAgIGJvcmRlci1yYWRpdXM6IDEwMHB4O1xuICAgIGJvcmRlcjogbm9uZTtcbiAgICBvdXRsaW5lOiBub25lO1xuICAgIGJhY2tncm91bmQ6ICNGNUY4RkM7XG4gICAgZm9udC1zaXplOiAxNHB4O1xuICAgIHBhZGRpbmc6IDhweCAzMHB4O1xuICAgIGNvbG9yOiAjNDU1ODc5OyB9XG4gICAgI3BhZ2UtaW50ZWdyYXRpb25zIC5pbnRlZ3JhdGlvbnMtc2VhcmNoYm94IGlucHV0OjpwbGFjZWhvbGRlciB7XG4gICAgICBjb2xvcjogIzhFOUZCQzsgfVxuICAjcGFnZS1pbnRlZ3JhdGlvbnMgLmludGVncmF0aW9ucy1zZWFyY2hib3guYWN0aXZlIGlvbi1pY29uW25hbWU9XCJjbG9zZVwiXSB7XG4gICAgb3BhY2l0eTogMTtcbiAgICBwb2ludGVyLWV2ZW50czogYWxsO1xuICAgIGN1cnNvcjogcG9pbnRlcjsgfVxuXG4jcGFnZS1pbnRlZ3JhdGlvbnMgLmludGVncmF0aW9ucy1jYXRlZ29yeS1maWx0ZXIgYSxcbiNwYWdlLWludGVncmF0aW9ucyAuaW50ZWdyYXRpb25zLWNoZWNrX19sYWJlbCB7XG4gIGZvbnQtZmFtaWx5OiBcIkVpbmFcIiwgXCJIZWx2ZXRpY2EgTmV1ZVwiLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7XG4gIGZvbnQtd2VpZ2h0OiA2MDA7XG4gIGxpbmUtaGVpZ2h0OiAxO1xuICBmb250LXNpemU6IDE0cHg7XG4gIGNvbG9yOiAjMkMzQjU1OyB9XG5cbiNwYWdlLWludGVncmF0aW9ucyAuaW50ZWdyYXRpb25zLXRvZ2dsZXMge1xuICBtYXJnaW46IDM2cHggMDsgfVxuICAjcGFnZS1pbnRlZ3JhdGlvbnMgLmludGVncmF0aW9ucy10b2dnbGVzIC5pbnRlZ3JhdGlvbnMtY2hlY2ssXG4gICNwYWdlLWludGVncmF0aW9ucyAuaW50ZWdyYXRpb25zLXRvZ2dsZXMgLmludGVncmF0aW9ucy1jaGVja19fbGFiZWwsXG4gICNwYWdlLWludGVncmF0aW9ucyAuaW50ZWdyYXRpb25zLXRvZ2dsZXMgLmludGVncmF0aW9ucy1jaGVja19faW5wdXQge1xuICAgIGN1cnNvcjogcG9pbnRlcjsgfVxuICAjcGFnZS1pbnRlZ3JhdGlvbnMgLmludGVncmF0aW9ucy10b2dnbGVzIC5pbnRlZ3JhdGlvbnMtY2hlY2sgKyAuaW50ZWdyYXRpb25zLWNoZWNrIHtcbiAgICBtYXJnaW4tdG9wOiA2cHg7IH1cbiAgI3BhZ2UtaW50ZWdyYXRpb25zIC5pbnRlZ3JhdGlvbnMtdG9nZ2xlcyAuaW50ZWdyYXRpb25zLWNoZWNrX19sYWJlbCB7XG4gICAgbWFyZ2luLWxlZnQ6IDZweDsgfVxuXG4jcGFnZS1pbnRlZ3JhdGlvbnMgLmludGVncmF0aW9ucy1jYXRlZ29yeS1maWx0ZXIge1xuICBsaXN0LXN0eWxlLXR5cGU6IG5vbmU7XG4gIG1hcmdpbjogMDtcbiAgcGFkZGluZzogMDtcbiAgdHJhbnNpdGlvbjogb3BhY2l0eSAwLjNzOyB9XG4gICNwYWdlLWludGVncmF0aW9ucyAuaW50ZWdyYXRpb25zLWNhdGVnb3J5LWZpbHRlciBsaSBhIHtcbiAgICB0cmFuc2l0aW9uOiBjb2xvciAwLjNzO1xuICAgIGhlaWdodDogMjBweDtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgb3V0bGluZTogbm9uZTtcbiAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7IH1cbiAgICAjcGFnZS1pbnRlZ3JhdGlvbnMgLmludGVncmF0aW9ucy1jYXRlZ29yeS1maWx0ZXIgbGkgYTpob3ZlciB7XG4gICAgICBjb2xvcjogIzM4ODBGRjsgfVxuICAjcGFnZS1pbnRlZ3JhdGlvbnMgLmludGVncmF0aW9ucy1jYXRlZ29yeS1maWx0ZXIgbGkgKyBsaSB7XG4gICAgbWFyZ2luLXRvcDogMTJweDsgfVxuICAjcGFnZS1pbnRlZ3JhdGlvbnMgLmludGVncmF0aW9ucy1jYXRlZ29yeS1maWx0ZXI6bm90KC5kaXNhYmxlKSBsaS5hY3RpdmUgYSB7XG4gICAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG4gICAgY29sb3I6ICMzODgwRkY7XG4gICAgcGFkZGluZy1sZWZ0OiA4cHg7XG4gICAgYm9yZGVyLWxlZnQ6IDJweCBzb2xpZCByZ2JhKDU2LCAxMjgsIDI1NSwgMC40KTsgfVxuICAjcGFnZS1pbnRlZ3JhdGlvbnMgLmludGVncmF0aW9ucy1jYXRlZ29yeS1maWx0ZXIuZGlzYWJsZSB7XG4gICAgY3Vyc29yOiBub3QtYWxsb3dlZDtcbiAgICBvcGFjaXR5OiAwLjQ7IH1cbiAgICAjcGFnZS1pbnRlZ3JhdGlvbnMgLmludGVncmF0aW9ucy1jYXRlZ29yeS1maWx0ZXIuZGlzYWJsZSBhIHtcbiAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOyB9XG5cbiNwYWdlLWludGVncmF0aW9ucyAuaW50ZWdyYXRpb25zLWxpc3RfX3Jlc3VsdHMge1xuICBtYXJnaW4tbGVmdDogODBweDtcbiAgZmxleDogMSAwIGF1dG87IH1cblxuI3BhZ2UtaW50ZWdyYXRpb25zIC5pbnRlZ3JhdGlvbnMtbGlzdF9fcmVzdWx0cy1jYXRlZ29yeTpub3QoOmZpcnN0LWNoaWxkKSB7XG4gIG1hcmdpbi10b3A6IDY0cHg7IH1cblxuI3BhZ2UtaW50ZWdyYXRpb25zIC5pbnRlZ3JhdGlvbnMtbGlzdF9fcmVzdWx0cy1oZWFkZXIge1xuICBkaXNwbGF5OiBmbGV4O1xuICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG4gIGFsaWduLWl0ZW1zOiBiYXNlbGluZTtcbiAgbWFyZ2luLWJvdHRvbTogOHB4OyB9XG4gICNwYWdlLWludGVncmF0aW9ucyAuaW50ZWdyYXRpb25zLWxpc3RfX3Jlc3VsdHMtaGVhZGVyIGg0IHtcbiAgICBmb250LXNpemU6IDIwcHg7XG4gICAgZm9udC13ZWlnaHQ6IDYwMDsgfVxuICAjcGFnZS1pbnRlZ3JhdGlvbnMgLmludGVncmF0aW9ucy1saXN0X19yZXN1bHRzLWhlYWRlciBhIHtcbiAgICBmb250LXdlaWdodDogNjAwO1xuICAgIGZvbnQtc2l6ZTogMTZweDtcbiAgICBmb250LWZhbWlseTogXCJFaW5hXCIsIFwiSGVsdmV0aWNhIE5ldWVcIiwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmOyB9XG4gICAgI3BhZ2UtaW50ZWdyYXRpb25zIC5pbnRlZ3JhdGlvbnMtbGlzdF9fcmVzdWx0cy1oZWFkZXIgYSBpb24taWNvbiB7XG4gICAgICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gMC4zcztcbiAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlKDAsIDFweCk7IH1cbiAgICAjcGFnZS1pbnRlZ3JhdGlvbnMgLmludGVncmF0aW9ucy1saXN0X19yZXN1bHRzLWhlYWRlciBhOmhvdmVyIGlvbi1pY29uIHtcbiAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlKDJweCwgMXB4KTsgfVxuXG4jcGFnZS1pbnRlZ3JhdGlvbnMgLmludGVncmF0aW9ucy1saXN0X19yZXN1bHRzLXJvdyB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIG1hcmdpbi1sZWZ0OiAtOHB4OyB9XG5cbiNwYWdlLWludGVncmF0aW9ucyAuaW50ZWdyYXRpb25zLWxpc3RfX3Jlc3VsdHMtZ3JpZCB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtd3JhcDogd3JhcDtcbiAgbWFyZ2luLWxlZnQ6IC04cHg7XG4gIG1hcmdpbi1yaWdodDogLThweDsgfVxuICAjcGFnZS1pbnRlZ3JhdGlvbnMgLmludGVncmF0aW9ucy1saXN0X19yZXN1bHRzLWdyaWQgLmludGVncmF0aW9ucy1jYXJkIHtcbiAgICBtYXJnaW4tYm90dG9tOiAxNnB4OyB9XG5cbiNwYWdlLWludGVncmF0aW9ucyAuaW50ZWdyYXRpb25zLWxpc3RfX2VtcHR5LXJvdyB7XG4gIG9wYWNpdHk6IDAuNTtcbiAgbWFyZ2luLWxlZnQ6IDhweDsgfVxuXG4jcGFnZS1pbnRlZ3JhdGlvbnMgLmludGVncmF0aW9ucy1saXN0X19yZXN1bHRzLWZvcm0ge1xuICBkaXNwbGF5OiBub25lO1xuICBiYWNrZ3JvdW5kOiAjRjZGOEZCO1xuICBib3JkZXItcmFkaXVzOiAxNnB4O1xuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgcGFkZGluZzogMzJweDtcbiAgbWF4LXdpZHRoOiA2MDBweDtcbiAgbWFyZ2luLWxlZnQ6IGF1dG87XG4gIG1hcmdpbi1yaWdodDogYXV0bzsgfVxuICAjcGFnZS1pbnRlZ3JhdGlvbnMgLmludGVncmF0aW9ucy1saXN0X19yZXN1bHRzLWZvcm0gaDMge1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICBtYXgtd2lkdGg6IDQwMHB4O1xuICAgIG1hcmdpbi10b3A6IDEwcHg7XG4gICAgbWFyZ2luLWxlZnQ6IGF1dG87XG4gICAgbWFyZ2luLXJpZ2h0OiBhdXRvO1xuICAgIGZvbnQtc2l6ZTogMjJweDtcbiAgICBmb250LXdlaWdodDogNjAwO1xuICAgIGxpbmUtaGVpZ2h0OiAzMHB4O1xuICAgIGNvbG9yOiAjMDAwOyB9XG4gICNwYWdlLWludGVncmF0aW9ucyAuaW50ZWdyYXRpb25zLWxpc3RfX3Jlc3VsdHMtZm9ybS5zaG93IHtcbiAgICBkaXNwbGF5OiBmbGV4OyB9XG4gICNwYWdlLWludGVncmF0aW9ucyAuaW50ZWdyYXRpb25zLWxpc3RfX3Jlc3VsdHMtZm9ybSAuaHNfc3VibWl0IHtcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7IH1cblxuI3BhZ2UtaW50ZWdyYXRpb25zIC5pbnRlZ3JhdGlvbnMtbGlzdF9fcmVzdWx0cy1zZWFyY2gge1xuICBkaXNwbGF5OiBub25lOyB9XG5cbiNwYWdlLWludGVncmF0aW9ucyAuaW50ZWdyYXRpb25zLWxpc3RfX2VtcHR5LW1lc3NhZ2Uge1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICBtYXJnaW4tYm90dG9tOiA0OHB4O1xuICBmb250LXNpemU6IDE2cHg7XG4gIHdpZHRoOiAxMDAlOyB9XG4gICNwYWdlLWludGVncmF0aW9ucyAuaW50ZWdyYXRpb25zLWxpc3RfX2VtcHR5LW1lc3NhZ2UgYiB7XG4gICAgZm9udC13ZWlnaHQ6IDYwMDsgfVxuXG4jcGFnZS1pbnRlZ3JhdGlvbnMtZGV0YWlsIC5pbnRlZ3JhdGlvbnMtZGV0YWlsX19uYXYge1xuICBtYXJnaW4tdG9wOiAyMHB4O1xuICBtYXJnaW4tYm90dG9tOiA4MHB4OyB9XG4gICNwYWdlLWludGVncmF0aW9ucy1kZXRhaWwgLmludGVncmF0aW9ucy1kZXRhaWxfX25hdiBhIHtcbiAgICBmb250LWZhbWlseTogXCJFaW5hXCIsIFwiSGVsdmV0aWNhIE5ldWVcIiwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmO1xuICAgIGZvbnQtc2l6ZTogMTZweDtcbiAgICBmb250LXdlaWdodDogNjAwO1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjsgfVxuICAgICNwYWdlLWludGVncmF0aW9ucy1kZXRhaWwgLmludGVncmF0aW9ucy1kZXRhaWxfX25hdiBhIGlvbi1pY29uIHtcbiAgICAgIHRyYW5zaXRpb246IHRyYW5zZm9ybSAwLjNzO1xuICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC0ycHgpO1xuICAgICAgbWFyZ2luLXJpZ2h0OiA4cHg7IH1cbiAgICAjcGFnZS1pbnRlZ3JhdGlvbnMtZGV0YWlsIC5pbnRlZ3JhdGlvbnMtZGV0YWlsX19uYXYgYTpob3ZlciBpb24taWNvbiB7XG4gICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtMnB4LCAtMnB4KTsgfVxuXG4jcGFnZS1pbnRlZ3JhdGlvbnMtZGV0YWlsIC5pbnRlZ3JhdGlvbnMtZGV0YWlsX193cmFwcGVyIHtcbiAgbWF4LXdpZHRoOiA3NDhweDtcbiAgbWFyZ2luLWxlZnQ6IGF1dG87XG4gIG1hcmdpbi1yaWdodDogYXV0bztcbiAgbWFyZ2luLWJvdHRvbTogMTQwcHg7IH1cblxuI3BhZ2UtaW50ZWdyYXRpb25zLWRldGFpbCAuaW50ZWdyYXRpb25zLWRldGFpbF9faGVhZGVyIHtcbiAgcGFkZGluZy1ib3R0b206IDM4cHg7XG4gIG1hcmdpbi1ib3R0b206IDM4cHg7XG4gIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjRURGMkY3O1xuICBkaXNwbGF5OiBmbGV4OyB9XG4gICNwYWdlLWludGVncmF0aW9ucy1kZXRhaWwgLmludGVncmF0aW9ucy1kZXRhaWxfX2hlYWRlciBoMSB7XG4gICAgbWFyZ2luOiAwO1xuICAgIGZvbnQtc2l6ZTogMzJweDtcbiAgICBmb250LXdlaWdodDogNjAwOyB9XG4gICNwYWdlLWludGVncmF0aW9ucy1kZXRhaWwgLmludGVncmF0aW9ucy1kZXRhaWxfX2hlYWRlciBwIHtcbiAgICBsaW5lLWhlaWdodDogMjhweDtcbiAgICBmb250LXNpemU6IDE4cHg7XG4gICAgbGV0dGVyLXNwYWNpbmc6IC0wLjAyZW07XG4gICAgY29sb3I6ICM2Mzc2OTY7XG4gICAgbWF4LXdpZHRoOiA0MDBweDtcbiAgICBwYWRkaW5nOiA1cHggMCA2cHg7IH1cbiAgI3BhZ2UtaW50ZWdyYXRpb25zLWRldGFpbCAuaW50ZWdyYXRpb25zLWRldGFpbF9faGVhZGVyIHVsIHtcbiAgICBtYXJnaW46IDA7XG4gICAgcGFkZGluZzogMDtcbiAgICBsaXN0LXN0eWxlLXR5cGU6IG5vbmU7XG4gICAgZGlzcGxheTogZmxleDsgfVxuICAjcGFnZS1pbnRlZ3JhdGlvbnMtZGV0YWlsIC5pbnRlZ3JhdGlvbnMtZGV0YWlsX19oZWFkZXIgLmludGVncmF0aW9ucy10YWcge1xuICAgIGZvbnQtc2l6ZTogMTBweDtcbiAgICBwYWRkaW5nOiAzcHggN3B4IDRweDsgfVxuICAgICNwYWdlLWludGVncmF0aW9ucy1kZXRhaWwgLmludGVncmF0aW9ucy1kZXRhaWxfX2hlYWRlciAuaW50ZWdyYXRpb25zLXRhZyArIC5pbnRlZ3JhdGlvbnMtdGFnIHtcbiAgICAgIG1hcmdpbi1sZWZ0OiA2cHg7IH1cbiAgICAjcGFnZS1pbnRlZ3JhdGlvbnMtZGV0YWlsIC5pbnRlZ3JhdGlvbnMtZGV0YWlsX19oZWFkZXIgLmludGVncmF0aW9ucy10YWctLXByZW1pZXIge1xuICAgICAgcGFkZGluZy1sZWZ0OiAyMnB4OyB9XG5cbiNwYWdlLWludGVncmF0aW9ucy1kZXRhaWwgLmludGVncmF0aW9ucy1kZXRhaWxfX2xvZ28ge1xuICBiYWNrZ3JvdW5kOiAjRkZGRkZGO1xuICBib3gtc2hhZG93OiAwcHggMHB4IDNweCByZ2JhKDAsIDAsIDAsIDAuMDgpLCAwcHggM3B4IDZweCByZ2JhKDAsIDAsIDAsIDAuMSk7XG4gIGJvcmRlci1yYWRpdXM6IDhweDtcbiAgd2lkdGg6IDIwMHB4O1xuICBoZWlnaHQ6IDE4MHB4O1xuICBmbGV4OiAwIDAgMjAwcHg7XG4gIG1hcmdpbi1yaWdodDogMzhweDtcbiAgZGlzcGxheTogZmxleDtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7IH1cbiAgI3BhZ2UtaW50ZWdyYXRpb25zLWRldGFpbCAuaW50ZWdyYXRpb25zLWRldGFpbF9fbG9nbyBpbWcge1xuICAgIG1heC1oZWlnaHQ6IDcwcHg7XG4gICAgbWF4LXdpZHRoOiAxNDBweDsgfVxuXG4jcGFnZS1pbnRlZ3JhdGlvbnMtZGV0YWlsIC5pbnRlZ3JhdGlvbnMtZGV0YWlsX19sb2dvICsgZGl2IHtcbiAgZmxleDogMSAwIDA7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gIGp1c3RpZnktY29udGVudDogY2VudGVyOyB9XG5cbiNwYWdlLWludGVncmF0aW9ucy1kZXRhaWwgLmludGVncmF0aW9ucy1kZXRhaWxfX2JvZHkge1xuICBkaXNwbGF5OiBmbGV4OyB9XG5cbiNwYWdlLWludGVncmF0aW9ucy1kZXRhaWwgLmludGVncmF0aW9ucy1kZXRhaWxfX2NvbnRlbnQge1xuICBmbGV4OiAxIDAgMDsgfVxuICAjcGFnZS1pbnRlZ3JhdGlvbnMtZGV0YWlsIC5pbnRlZ3JhdGlvbnMtZGV0YWlsX19jb250ZW50IGgxLFxuICAjcGFnZS1pbnRlZ3JhdGlvbnMtZGV0YWlsIC5pbnRlZ3JhdGlvbnMtZGV0YWlsX19jb250ZW50IGgyLFxuICAjcGFnZS1pbnRlZ3JhdGlvbnMtZGV0YWlsIC5pbnRlZ3JhdGlvbnMtZGV0YWlsX19jb250ZW50IGgzLFxuICAjcGFnZS1pbnRlZ3JhdGlvbnMtZGV0YWlsIC5pbnRlZ3JhdGlvbnMtZGV0YWlsX19jb250ZW50IGg0LFxuICAjcGFnZS1pbnRlZ3JhdGlvbnMtZGV0YWlsIC5pbnRlZ3JhdGlvbnMtZGV0YWlsX19jb250ZW50IGg1LFxuICAjcGFnZS1pbnRlZ3JhdGlvbnMtZGV0YWlsIC5pbnRlZ3JhdGlvbnMtZGV0YWlsX19jb250ZW50IGg2IHtcbiAgICBmb250LXNpemU6IDE2cHg7XG4gICAgZm9udC13ZWlnaHQ6IDYwMDsgfVxuICAjcGFnZS1pbnRlZ3JhdGlvbnMtZGV0YWlsIC5pbnRlZ3JhdGlvbnMtZGV0YWlsX19jb250ZW50IHAsXG4gICNwYWdlLWludGVncmF0aW9ucy1kZXRhaWwgLmludGVncmF0aW9ucy1kZXRhaWxfX2NvbnRlbnQgdWwge1xuICAgIGZvbnQtc2l6ZTogMTRweDtcbiAgICBsaW5lLWhlaWdodDogMS42O1xuICAgIGNvbG9yOiAjNjM3Njk2O1xuICAgIG1hcmdpbi1ib3R0b206IDQwcHg7IH1cbiAgICAjcGFnZS1pbnRlZ3JhdGlvbnMtZGV0YWlsIC5pbnRlZ3JhdGlvbnMtZGV0YWlsX19jb250ZW50IHA6bGFzdC1jaGlsZCxcbiAgICAjcGFnZS1pbnRlZ3JhdGlvbnMtZGV0YWlsIC5pbnRlZ3JhdGlvbnMtZGV0YWlsX19jb250ZW50IHVsOmxhc3QtY2hpbGQge1xuICAgICAgbWFyZ2luLWJvdHRvbTogMDsgfVxuICAjcGFnZS1pbnRlZ3JhdGlvbnMtZGV0YWlsIC5pbnRlZ3JhdGlvbnMtZGV0YWlsX19jb250ZW50IHVsIHtcbiAgICBtYXJnaW4tbGVmdDogMDtcbiAgICBwYWRkaW5nOiAwOyB9XG4gICNwYWdlLWludGVncmF0aW9ucy1kZXRhaWwgLmludGVncmF0aW9ucy1kZXRhaWxfX2NvbnRlbnQgdWwgbGkge1xuICAgIGxpc3Qtc3R5bGUtdHlwZTogbm9uZTtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgcGFkZGluZy1sZWZ0OiAyMnB4OyB9XG4gICAgI3BhZ2UtaW50ZWdyYXRpb25zLWRldGFpbCAuaW50ZWdyYXRpb25zLWRldGFpbF9fY29udGVudCB1bCBsaSArIGxpIHtcbiAgICAgIG1hcmdpbi10b3A6IDEycHg7IH1cbiAgICAjcGFnZS1pbnRlZ3JhdGlvbnMtZGV0YWlsIC5pbnRlZ3JhdGlvbnMtZGV0YWlsX19jb250ZW50IHVsIGxpOmJlZm9yZSB7XG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICB0b3A6IDNweDtcbiAgICAgIGxlZnQ6IDA7XG4gICAgICBjb250ZW50OiB1cmwoXCJkYXRhOmltYWdlL3N2Zyt4bWwsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzE2cHgnIGhlaWdodD0nMTZweCcgZmlsbD0nJTIzNjJDNjdCJyB2aWV3Qm94PScwIDAgNTEyIDUxMiclM0UlM0NwYXRoIGQ9J00xNzAuNzE4IDIxNi40ODJMMTQxLjYgMjQ1LjZsOTMuNiA5My42IDIwOC0yMDgtMjkuMTE4LTI5LjExOEwyMzUuMiAyNzkuOTE4bC02NC40ODItNjMuNDM2ek00MjIuNCAyNTZjMCA5MS41MTgtNzQuODgzIDE2Ni40LTE2Ni40IDE2Ni40Uzg5LjYgMzQ3LjUxOCA4OS42IDI1NiAxNjQuNDgyIDg5LjYgMjU2IDg5LjZjMTUuNiAwIDMxLjIgMi4wODIgNDUuNzY0IDYuMjQxTDMzNCA2My42QzMxMC4wODIgNTMuMiAyODQuMDgyIDQ4IDI1NiA0OCAxNDEuNiA0OCA0OCAxNDEuNiA0OCAyNTZzOTMuNiAyMDggMjA4IDIwOCAyMDgtOTMuNiAyMDgtMjA4aC00MS42eicvJTNFJTNDL3N2ZyUzRVwiKTtcbiAgICAgIHdpZHRoOiAxNnB4O1xuICAgICAgaGVvZ2h0OiAxNnB4O1xuICAgICAgZmlsbDogIzYyQzY3QjsgfVxuXG4jcGFnZS1pbnRlZ3JhdGlvbnMtZGV0YWlsIC5pbnRlZ3JhdGlvbnMtZGV0YWlsX19hY3Rpb25zIHtcbiAgZmxleDogMCAwIDE5MnB4O1xuICBtYXJnaW4tbGVmdDogNDZweDsgfVxuXG4jcGFnZS1pbnRlZ3JhdGlvbnMtZGV0YWlsIC5pbnRlZ3JhdGlvbnMtZGV0YWlsX19hY3Rpb25zLWlubmVyIHtcbiAgcG9zaXRpb246IHN0aWNreTtcbiAgdG9wOiAyMHB4OyB9XG4gICNwYWdlLWludGVncmF0aW9ucy1kZXRhaWwgLmludGVncmF0aW9ucy1kZXRhaWxfX2FjdGlvbnMtaW5uZXIgaDUge1xuICAgIG1hcmdpbi10b3A6IDM4cHg7XG4gICAgY29sb3I6ICM3Mzg0OUE7XG4gICAgZm9udC1zaXplOiAxMHB4O1xuICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XG4gICAgbGV0dGVyLXNwYWNpbmc6IDAuMDhlbTtcbiAgICBmb250LXdlaWdodDogNzAwO1xuICAgIG1hcmdpbi1ib3R0b206IDRweDsgfVxuICAjcGFnZS1pbnRlZ3JhdGlvbnMtZGV0YWlsIC5pbnRlZ3JhdGlvbnMtZGV0YWlsX19hY3Rpb25zLWlubmVyIHVsIHtcbiAgICBsaXN0LXN0eWxlLXR5cGU6IG5vbmU7XG4gICAgbWFyZ2luOiAwO1xuICAgIHBhZGRpbmc6IDA7IH1cbiAgI3BhZ2UtaW50ZWdyYXRpb25zLWRldGFpbCAuaW50ZWdyYXRpb25zLWRldGFpbF9fYWN0aW9ucy1pbm5lciBsaSArIGxpIHtcbiAgICBtYXJnaW4tdG9wOiA0cHg7IH1cbiAgI3BhZ2UtaW50ZWdyYXRpb25zLWRldGFpbCAuaW50ZWdyYXRpb25zLWRldGFpbF9fYWN0aW9ucy1pbm5lciBsaSBhIHtcbiAgICB0cmFuc2l0aW9uOiAwLjNzIGFsbDtcbiAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgI0IyQ0VGRjsgfVxuICAgICNwYWdlLWludGVncmF0aW9ucy1kZXRhaWwgLmludGVncmF0aW9ucy1kZXRhaWxfX2FjdGlvbnMtaW5uZXIgbGkgYTpob3ZlciB7XG4gICAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgIzViNzY4ZTsgfVxuXG4jcGFnZS1pbnRlZ3JhdGlvbnMtZGV0YWlsIC5pbnRlZ3JhdGlvbnMtZGV0YWlsX19jdGEge1xuICBiYWNrZ3JvdW5kOiAjRjNGN0ZGO1xuICBib3JkZXItcmFkaXVzOiA4cHg7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgcGFkZGluZzogMTZweDsgfVxuICAjcGFnZS1pbnRlZ3JhdGlvbnMtZGV0YWlsIC5pbnRlZ3JhdGlvbnMtZGV0YWlsX19jdGEgc3BhbiB7XG4gICAgZm9udC1zaXplOiAxM3B4O1xuICAgIGxpbmUtaGVpZ2h0OiAxLjM7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgbWFyZ2luLWJvdHRvbTogMTJweDtcbiAgICBjb2xvcjogIzYzNzY5NjsgfVxuICAjcGFnZS1pbnRlZ3JhdGlvbnMtZGV0YWlsIC5pbnRlZ3JhdGlvbnMtZGV0YWlsX19jdGEgLmJ0biB7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgZm9udC13ZWlnaHQ6IDcwMDtcbiAgICBmb250LXNpemU6IDE1cHg7IH1cblxuI3BhZ2UtaW50ZWdyYXRpb25zLWRldGFpbCAuaW50ZWdyYXRpb25zLWRldGFpbF9fY3RhLXNlY29uZGFyeSB7XG4gIGJvcmRlci10b3A6IDFweCBzb2xpZCAjRURGMkY3O1xuICBwYWRkaW5nLXRvcDogMjZweDtcbiAgbWFyZ2luLXRvcDogMjZweDsgfVxuICAjcGFnZS1pbnRlZ3JhdGlvbnMtZGV0YWlsIC5pbnRlZ3JhdGlvbnMtZGV0YWlsX19jdGEtc2Vjb25kYXJ5IHAge1xuICAgIGZvbnQtd2VpZ2h0OiA1MDA7XG4gICAgbGluZS1oZWlnaHQ6IDE3cHg7XG4gICAgZm9udC1zaXplOiAxM3B4O1xuICAgIGNvbG9yOiAjNjM3Njk2OyB9XG4gICNwYWdlLWludGVncmF0aW9ucy1kZXRhaWwgLmludGVncmF0aW9ucy1kZXRhaWxfX2N0YS1zZWNvbmRhcnkgLmJ0biB7XG4gICAgZm9udC1zaXplOiAxM3B4O1xuICAgIGZvbnQtd2VpZ2h0OiA3MDA7XG4gICAgcGFkZGluZzogOHB4IDEzcHggN3B4OyB9XG5cbiNwYWdlLWludGVncmF0aW9ucy1kZXRhaWwgLmludGVncmF0aW9ucy1kZXRhaWxfX2Zvcm0ge1xuICBib3JkZXItdG9wOiAxcHggc29saWQgI0VERjJGNztcbiAgcGFkZGluZy10b3A6IDYwcHg7XG4gIG1hcmdpbi10b3A6IDM4cHg7IH1cbiAgI3BhZ2UtaW50ZWdyYXRpb25zLWRldGFpbCAuaW50ZWdyYXRpb25zLWRldGFpbF9fZm9ybSBoMSB7XG4gICAgbWFyZ2luOiAwIDAgNHB4O1xuICAgIGZvbnQtc2l6ZTogMjZweDtcbiAgICBmb250LXdlaWdodDogNjAwO1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjsgfVxuICAjcGFnZS1pbnRlZ3JhdGlvbnMtZGV0YWlsIC5pbnRlZ3JhdGlvbnMtZGV0YWlsX19mb3JtID4gcCB7XG4gICAgbGluZS1oZWlnaHQ6IDI4cHg7XG4gICAgZm9udC1zaXplOiAxOHB4O1xuICAgIGxldHRlci1zcGFjaW5nOiAtMC4wMmVtO1xuICAgIGNvbG9yOiAjNjM3Njk2O1xuICAgIG1heC13aWR0aDogNDAwcHg7XG4gICAgbWFyZ2luLWxlZnQ6IGF1dG87XG4gICAgbWFyZ2luLXJpZ2h0OiBhdXRvO1xuICAgIG1hcmdpbi1ib3R0b206IDI2cHg7XG4gICAgdGV4dC1hbGlnbjogY2VudGVyOyB9XG4gICNwYWdlLWludGVncmF0aW9ucy1kZXRhaWwgLmludGVncmF0aW9ucy1kZXRhaWxfX2Zvcm0gLmhzX3N1Ym1pdCB7XG4gICAgdGV4dC1hbGlnbjogY2VudGVyOyB9XG4iXX0= */\n"
  },
  {
    "path": "content/css/pages/jobs.css",
    "content": "#page-jobs .navbar + .banner {\n  background: #26708a no-repeat center top;\n  background-image: url(\"/img/jobs/jobs-cta-bg.jpg\"), linear-gradient(to right, #1e4e8b 0%, #298776 100%);\n  background-size: cover;\n  height: 360px; }\n\n#page-jobs .what-we {\n  padding-top: 100px; }\n  #page-jobs .what-we .content {\n    padding: 95px 50px 75px; }\n  #page-jobs .what-we .graphics {\n    width: 100%; }\n  #page-jobs .what-we .col {\n    width: 49.9%;\n    padding-right: 35px;\n    float: left; }\n    #page-jobs .what-we .col + .col {\n      padding-right: 0;\n      padding-left: 35px; }\n    #page-jobs .what-we .col p {\n      font-size: 18px;\n      line-height: 32px;\n      font-weight: 400; }\n  @media (max-width: 767px) {\n    #page-jobs .what-we .col,\n    #page-jobs .what-we .col + .col {\n      width: 100%;\n      padding: 0 0 50px; } }\n\n#page-jobs .why.hero.top {\n  padding-top: 0; }\n  #page-jobs .why.hero.top .content {\n    max-width: 675px;\n    margin: 95px auto 55px; }\n    #page-jobs .why.hero.top .content p {\n      color: #5d636c;\n      font-size: 18px;\n      line-height: 28px;\n      font-weight: 400; }\n  #page-jobs .why.hero.top .graphics {\n    width: 100%; }\n\n#page-jobs .reasons {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-wrap: wrap;\n      flex-wrap: wrap;\n  -ms-flex-pack: justify;\n      justify-content: space-between; }\n  #page-jobs .reasons .reason {\n    padding-left: 72px;\n    padding-right: 10px;\n    padding-bottom: 70px;\n    -ms-flex: 1 0 290px;\n        flex: 1 0 290px;\n    max-width: 350px;\n    position: relative;\n    margin: 0 auto; }\n    #page-jobs .reasons .reason:before {\n      background: no-repeat center top url(\"/img/jobs/jobs-perks-icons.png\");\n      background-size: 48px;\n      height: 48px;\n      width: 48px;\n      content: '';\n      position: absolute;\n      left: 0;\n      top: 0; }\n    #page-jobs .reasons .reason:nth-child(2):before {\n      background-position: center -48px; }\n    #page-jobs .reasons .reason:nth-child(3):before {\n      background-position: center -96px; }\n    #page-jobs .reasons .reason:nth-child(4):before {\n      background-position: center -144px; }\n    #page-jobs .reasons .reason:nth-child(5):before {\n      background-position: center -192px; }\n    #page-jobs .reasons .reason:nth-child(6):before {\n      background-position: center -240px; }\n    #page-jobs .reasons .reason h4 {\n      font-size: 16px;\n      line-height: 24px; }\n    #page-jobs .reasons .reason p {\n      font-size: 14px;\n      line-height: 24px; }\n\n#page-jobs .bennefits {\n  background: #2466d2;\n  background: linear-gradient(to right, #4688f4 0%, #1e60cc 100%);\n  position: relative;\n  overflow: hidden; }\n  #page-jobs .bennefits .content {\n    padding-top: 90px;\n    padding-bottom: 72px; }\n    #page-jobs .bennefits .content:before {\n      background: no-repeat left top url(\"/img/jobs/ionic-photos-3.jpg\");\n      background-size: cover;\n      width: 1000px;\n      content: '';\n      position: absolute;\n      bottom: 0;\n      top: 0;\n      display: block;\n      left: 45%; }\n      @media (max-width: 991px) {\n        #page-jobs .bennefits .content:before {\n          left: 60%;\n          background-position: left -340px; } }\n      @media (max-width: 767px) {\n        #page-jobs .bennefits .content:before {\n          display: none; } }\n      @media (min-width: 1820px) {\n        #page-jobs .bennefits .content:before {\n          width: 924px;\n          height: 700px;\n          left: auto;\n          right: 0; } }\n  #page-jobs .bennefits h3 {\n    color: white;\n    padding-left: 72px;\n    position: relative; }\n    #page-jobs .bennefits h3:before {\n      background: no-repeat center -288px url(\"/img/jobs/jobs-perks-icons.png\");\n      background-size: 48px;\n      height: 48px;\n      width: 48px;\n      content: '';\n      position: absolute;\n      left: 0;\n      top: 0; }\n  #page-jobs .bennefits ul {\n    list-style: none;\n    padding-left: 72px; }\n    #page-jobs .bennefits ul li {\n      color: white;\n      opacity: .8;\n      position: relative;\n      line-height: 1em;\n      padding: 15px 0 15px 23px;\n      font-weight: 400;\n      font-size: 16px; }\n      #page-jobs .bennefits ul li:before {\n        background: no-repeat center center url(\"/img/jobs/job-perks-checkmark.png\");\n        background-size: 12px;\n        height: 12px;\n        width: 12px;\n        content: '';\n        position: absolute;\n        left: 0;\n        top: 16px; }\n\n#page-jobs .open-positions {\n  max-width: 690px;\n  margin: 0 auto; }\n  #page-jobs .open-positions hgroup {\n    padding: 90px 25px 70px; }\n  #page-jobs .open-positions hgroup p {\n    color: #5d636c;\n    font-size: 18px;\n    line-height: 28px;\n    font-weight: 400; }\n  #page-jobs .open-positions ul,\n  #page-jobs .open-positions .rbox-opening-list {\n    padding: 0; }\n    #page-jobs .open-positions ul li,\n    #page-jobs .open-positions ul .rbox-opening-li,\n    #page-jobs .open-positions .rbox-opening-list li,\n    #page-jobs .open-positions .rbox-opening-list .rbox-opening-li {\n      list-style: none;\n      padding: 29px 0 5px;\n      border-top: 1px solid #ebeef2;\n      position: relative; }\n      #page-jobs .open-positions ul li:last-child,\n      #page-jobs .open-positions ul .rbox-opening-li:last-child,\n      #page-jobs .open-positions .rbox-opening-list li:last-child,\n      #page-jobs .open-positions .rbox-opening-list .rbox-opening-li:last-child {\n        border-bottom: 1px solid #ebeef2; }\n      #page-jobs .open-positions ul li strong,\n      #page-jobs .open-positions ul li .rbox-opening-li-title,\n      #page-jobs .open-positions ul .rbox-opening-li strong,\n      #page-jobs .open-positions ul .rbox-opening-li .rbox-opening-li-title,\n      #page-jobs .open-positions .rbox-opening-list li strong,\n      #page-jobs .open-positions .rbox-opening-list li .rbox-opening-li-title,\n      #page-jobs .open-positions .rbox-opening-list .rbox-opening-li strong,\n      #page-jobs .open-positions .rbox-opening-list .rbox-opening-li .rbox-opening-li-title {\n        font-size: 18px;\n        line-height: 1.4em;\n        color: #4C555A; }\n      #page-jobs .open-positions ul li .location,\n      #page-jobs .open-positions ul li .rbox-job-shortdesc,\n      #page-jobs .open-positions ul .rbox-opening-li .location,\n      #page-jobs .open-positions ul .rbox-opening-li .rbox-job-shortdesc,\n      #page-jobs .open-positions .rbox-opening-list li .location,\n      #page-jobs .open-positions .rbox-opening-list li .rbox-job-shortdesc,\n      #page-jobs .open-positions .rbox-opening-list .rbox-opening-li .location,\n      #page-jobs .open-positions .rbox-opening-list .rbox-opening-li .rbox-job-shortdesc {\n        font-weight: 400;\n        font-size: 16px; }\n      #page-jobs .open-positions ul li .learn-more,\n      #page-jobs .open-positions ul .rbox-opening-li .learn-more,\n      #page-jobs .open-positions .rbox-opening-list li .learn-more,\n      #page-jobs .open-positions .rbox-opening-list .rbox-opening-li .learn-more {\n        float: right;\n        margin-top: 18px;\n        font-weight: 500;\n        cursor: pointer; }\n      #page-jobs .open-positions ul li .rbox-opening-position-info,\n      #page-jobs .open-positions ul .rbox-opening-li .rbox-opening-position-info,\n      #page-jobs .open-positions .rbox-opening-list li .rbox-opening-position-info,\n      #page-jobs .open-positions .rbox-opening-list .rbox-opening-li .rbox-opening-position-info {\n        position: absolute;\n        right: 0;\n        top: 20px; }\n      #page-jobs .open-positions ul li.active .details,\n      #page-jobs .open-positions ul .rbox-opening-li.active .details,\n      #page-jobs .open-positions .rbox-opening-list li.active .details,\n      #page-jobs .open-positions .rbox-opening-list .rbox-opening-li.active .details {\n        -webkit-transform: scale3d(1, 1, 1);\n                transform: scale3d(1, 1, 1);\n        max-height: 800px;\n        opacity: 1; }\n    #page-jobs .open-positions ul .rbox-opening-li,\n    #page-jobs .open-positions .rbox-opening-list .rbox-opening-li {\n      padding-bottom: 29px; }\n  #page-jobs .open-positions .details {\n    -webkit-transform: scale3d(1, 0, 1);\n            transform: scale3d(1, 0, 1);\n    max-height: 0;\n    opacity: 0;\n    -webkit-transform-origin: top;\n            transform-origin: top;\n    transition: opacity 0.5s, max-height 0.5s, -webkit-transform 0.5s cubic-bezier(0.155, 1.105, 0.295, 1.12);\n    transition: opacity 0.5s, max-height 0.5s, transform 0.5s cubic-bezier(0.155, 1.105, 0.295, 1.12);\n    transition: opacity 0.5s, max-height 0.5s, transform 0.5s cubic-bezier(0.155, 1.105, 0.295, 1.12), -webkit-transform 0.5s cubic-bezier(0.155, 1.105, 0.295, 1.12); }\n  #page-jobs .open-positions .rbox-application-form input {\n    float: none;\n    width: 100%; }\n    #page-jobs .open-positions .rbox-application-form input[type='file'] {\n      border: 0; }\n\n/*# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpvYnMuY3NzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0VBQ0UseUNBQXlDO0VBQ3pDLHdHQUF3RztFQUN4Ryx1QkFBdUI7RUFDdkIsY0FBYyxFQUFFOztBQUVsQjtFQUNFLG1CQUFtQixFQUFFO0VBQ3JCO0lBQ0Usd0JBQXdCLEVBQUU7RUFDNUI7SUFDRSxZQUFZLEVBQUU7RUFDaEI7SUFDRSxhQUFhO0lBQ2Isb0JBQW9CO0lBQ3BCLFlBQVksRUFBRTtJQUNkO01BQ0UsaUJBQWlCO01BQ2pCLG1CQUFtQixFQUFFO0lBQ3ZCO01BQ0UsZ0JBQWdCO01BQ2hCLGtCQUFrQjtNQUNsQixpQkFBaUIsRUFBRTtFQUN2QjtJQUNFOztNQUVFLFlBQVk7TUFDWixrQkFBa0IsRUFBRSxFQUFFOztBQUU1QjtFQUNFLGVBQWUsRUFBRTtFQUNqQjtJQUNFLGlCQUFpQjtJQUNqQix1QkFBdUIsRUFBRTtJQUN6QjtNQUNFLGVBQWU7TUFDZixnQkFBZ0I7TUFDaEIsa0JBQWtCO01BQ2xCLGlCQUFpQixFQUFFO0VBQ3ZCO0lBQ0UsWUFBWSxFQUFFOztBQUVsQjtFQUNFLHFCQUFjO0VBQWQsY0FBYztFQUNkLG9CQUFnQjtNQUFoQixnQkFBZ0I7RUFDaEIsdUJBQStCO01BQS9CLCtCQUErQixFQUFFO0VBQ2pDO0lBQ0UsbUJBQW1CO0lBQ25CLG9CQUFvQjtJQUNwQixxQkFBcUI7SUFDckIsb0JBQWdCO1FBQWhCLGdCQUFnQjtJQUNoQixpQkFBaUI7SUFDakIsbUJBQW1CO0lBQ25CLGVBQWUsRUFBRTtJQUNqQjtNQUNFLHVFQUF1RTtNQUN2RSxzQkFBc0I7TUFDdEIsYUFBYTtNQUNiLFlBQVk7TUFDWixZQUFZO01BQ1osbUJBQW1CO01BQ25CLFFBQVE7TUFDUixPQUFPLEVBQUU7SUFDWDtNQUNFLGtDQUFrQyxFQUFFO0lBQ3RDO01BQ0Usa0NBQWtDLEVBQUU7SUFDdEM7TUFDRSxtQ0FBbUMsRUFBRTtJQUN2QztNQUNFLG1DQUFtQyxFQUFFO0lBQ3ZDO01BQ0UsbUNBQW1DLEVBQUU7SUFDdkM7TUFDRSxnQkFBZ0I7TUFDaEIsa0JBQWtCLEVBQUU7SUFDdEI7TUFDRSxnQkFBZ0I7TUFDaEIsa0JBQWtCLEVBQUU7O0FBRTFCO0VBQ0Usb0JBQW9CO0VBQ3BCLGdFQUFnRTtFQUNoRSxtQkFBbUI7RUFDbkIsaUJBQWlCLEVBQUU7RUFDbkI7SUFDRSxrQkFBa0I7SUFDbEIscUJBQXFCLEVBQUU7SUFDdkI7TUFDRSxtRUFBbUU7TUFDbkUsdUJBQXVCO01BQ3ZCLGNBQWM7TUFDZCxZQUFZO01BQ1osbUJBQW1CO01BQ25CLFVBQVU7TUFDVixPQUFPO01BQ1AsZUFBZTtNQUNmLFVBQVUsRUFBRTtNQUNaO1FBQ0U7VUFDRSxVQUFVO1VBQ1YsaUNBQWlDLEVBQUUsRUFBRTtNQUN6QztRQUNFO1VBQ0UsY0FBYyxFQUFFLEVBQUU7TUFDdEI7UUFDRTtVQUNFLGFBQWE7VUFDYixjQUFjO1VBQ2QsV0FBVztVQUNYLFNBQVMsRUFBRSxFQUFFO0VBQ3JCO0lBQ0UsYUFBYTtJQUNiLG1CQUFtQjtJQUNuQixtQkFBbUIsRUFBRTtJQUNyQjtNQUNFLDBFQUEwRTtNQUMxRSxzQkFBc0I7TUFDdEIsYUFBYTtNQUNiLFlBQVk7TUFDWixZQUFZO01BQ1osbUJBQW1CO01BQ25CLFFBQVE7TUFDUixPQUFPLEVBQUU7RUFDYjtJQUNFLGlCQUFpQjtJQUNqQixtQkFBbUIsRUFBRTtJQUNyQjtNQUNFLGFBQWE7TUFDYixZQUFZO01BQ1osbUJBQW1CO01BQ25CLGlCQUFpQjtNQUNqQiwwQkFBMEI7TUFDMUIsaUJBQWlCO01BQ2pCLGdCQUFnQixFQUFFO01BQ2xCO1FBQ0UsNkVBQTZFO1FBQzdFLHNCQUFzQjtRQUN0QixhQUFhO1FBQ2IsWUFBWTtRQUNaLFlBQVk7UUFDWixtQkFBbUI7UUFDbkIsUUFBUTtRQUNSLFVBQVUsRUFBRTs7QUFFcEI7RUFDRSxpQkFBaUI7RUFDakIsZUFBZSxFQUFFO0VBQ2pCO0lBQ0Usd0JBQXdCLEVBQUU7RUFDNUI7SUFDRSxlQUFlO0lBQ2YsZ0JBQWdCO0lBQ2hCLGtCQUFrQjtJQUNsQixpQkFBaUIsRUFBRTtFQUNyQjs7SUFFRSxXQUFXLEVBQUU7SUFDYjs7OztNQUlFLGlCQUFpQjtNQUNqQixvQkFBb0I7TUFDcEIsOEJBQThCO01BQzlCLG1CQUFtQixFQUFFO01BQ3JCOzs7O1FBSUUsaUNBQWlDLEVBQUU7TUFDckM7Ozs7Ozs7O1FBUUUsZ0JBQWdCO1FBQ2hCLG1CQUFtQjtRQUNuQixlQUFlLEVBQUU7TUFDbkI7Ozs7Ozs7O1FBUUUsaUJBQWlCO1FBQ2pCLGdCQUFnQixFQUFFO01BQ3BCOzs7O1FBSUUsYUFBYTtRQUNiLGlCQUFpQjtRQUNqQixpQkFBaUI7UUFDakIsZ0JBQWdCLEVBQUU7TUFDcEI7Ozs7UUFJRSxtQkFBbUI7UUFDbkIsU0FBUztRQUNULFVBQVUsRUFBRTtNQUNkOzs7O1FBSUUsb0NBQTRCO2dCQUE1Qiw0QkFBNEI7UUFDNUIsa0JBQWtCO1FBQ2xCLFdBQVcsRUFBRTtJQUNqQjs7TUFFRSxxQkFBcUIsRUFBRTtFQUMzQjtJQUNFLG9DQUE0QjtZQUE1Qiw0QkFBNEI7SUFDNUIsY0FBYztJQUNkLFdBQVc7SUFDWCw4QkFBc0I7WUFBdEIsc0JBQXNCO0lBQ3RCLDBHQUFrRztJQUFsRyxrR0FBa0c7SUFBbEcsa0tBQWtHLEVBQUU7RUFDdEc7SUFDRSxZQUFZO0lBQ1osWUFBWSxFQUFFO0lBQ2Q7TUFDRSxVQUFVLEVBQUUiLCJmaWxlIjoicGFnZXMvam9icy5jc3MiLCJzb3VyY2VzQ29udGVudCI6WyIjcGFnZS1qb2JzIC5uYXZiYXIgKyAuYmFubmVyIHtcbiAgYmFja2dyb3VuZDogIzI2NzA4YSBuby1yZXBlYXQgY2VudGVyIHRvcDtcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFwiL2ltZy9qb2JzL2pvYnMtY3RhLWJnLmpwZ1wiKSwgbGluZWFyLWdyYWRpZW50KHRvIHJpZ2h0LCAjMWU0ZThiIDAlLCAjMjk4Nzc2IDEwMCUpO1xuICBiYWNrZ3JvdW5kLXNpemU6IGNvdmVyO1xuICBoZWlnaHQ6IDM2MHB4OyB9XG5cbiNwYWdlLWpvYnMgLndoYXQtd2Uge1xuICBwYWRkaW5nLXRvcDogMTAwcHg7IH1cbiAgI3BhZ2Utam9icyAud2hhdC13ZSAuY29udGVudCB7XG4gICAgcGFkZGluZzogOTVweCA1MHB4IDc1cHg7IH1cbiAgI3BhZ2Utam9icyAud2hhdC13ZSAuZ3JhcGhpY3Mge1xuICAgIHdpZHRoOiAxMDAlOyB9XG4gICNwYWdlLWpvYnMgLndoYXQtd2UgLmNvbCB7XG4gICAgd2lkdGg6IDQ5LjklO1xuICAgIHBhZGRpbmctcmlnaHQ6IDM1cHg7XG4gICAgZmxvYXQ6IGxlZnQ7IH1cbiAgICAjcGFnZS1qb2JzIC53aGF0LXdlIC5jb2wgKyAuY29sIHtcbiAgICAgIHBhZGRpbmctcmlnaHQ6IDA7XG4gICAgICBwYWRkaW5nLWxlZnQ6IDM1cHg7IH1cbiAgICAjcGFnZS1qb2JzIC53aGF0LXdlIC5jb2wgcCB7XG4gICAgICBmb250LXNpemU6IDE4cHg7XG4gICAgICBsaW5lLWhlaWdodDogMzJweDtcbiAgICAgIGZvbnQtd2VpZ2h0OiA0MDA7IH1cbiAgQG1lZGlhIChtYXgtd2lkdGg6IDc2N3B4KSB7XG4gICAgI3BhZ2Utam9icyAud2hhdC13ZSAuY29sLFxuICAgICNwYWdlLWpvYnMgLndoYXQtd2UgLmNvbCArIC5jb2wge1xuICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICBwYWRkaW5nOiAwIDAgNTBweDsgfSB9XG5cbiNwYWdlLWpvYnMgLndoeS5oZXJvLnRvcCB7XG4gIHBhZGRpbmctdG9wOiAwOyB9XG4gICNwYWdlLWpvYnMgLndoeS5oZXJvLnRvcCAuY29udGVudCB7XG4gICAgbWF4LXdpZHRoOiA2NzVweDtcbiAgICBtYXJnaW46IDk1cHggYXV0byA1NXB4OyB9XG4gICAgI3BhZ2Utam9icyAud2h5Lmhlcm8udG9wIC5jb250ZW50IHAge1xuICAgICAgY29sb3I6ICM1ZDYzNmM7XG4gICAgICBmb250LXNpemU6IDE4cHg7XG4gICAgICBsaW5lLWhlaWdodDogMjhweDtcbiAgICAgIGZvbnQtd2VpZ2h0OiA0MDA7IH1cbiAgI3BhZ2Utam9icyAud2h5Lmhlcm8udG9wIC5ncmFwaGljcyB7XG4gICAgd2lkdGg6IDEwMCU7IH1cblxuI3BhZ2Utam9icyAucmVhc29ucyB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtd3JhcDogd3JhcDtcbiAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOyB9XG4gICNwYWdlLWpvYnMgLnJlYXNvbnMgLnJlYXNvbiB7XG4gICAgcGFkZGluZy1sZWZ0OiA3MnB4O1xuICAgIHBhZGRpbmctcmlnaHQ6IDEwcHg7XG4gICAgcGFkZGluZy1ib3R0b206IDcwcHg7XG4gICAgZmxleDogMSAwIDI5MHB4O1xuICAgIG1heC13aWR0aDogMzUwcHg7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIG1hcmdpbjogMCBhdXRvOyB9XG4gICAgI3BhZ2Utam9icyAucmVhc29ucyAucmVhc29uOmJlZm9yZSB7XG4gICAgICBiYWNrZ3JvdW5kOiBuby1yZXBlYXQgY2VudGVyIHRvcCB1cmwoXCIvaW1nL2pvYnMvam9icy1wZXJrcy1pY29ucy5wbmdcIik7XG4gICAgICBiYWNrZ3JvdW5kLXNpemU6IDQ4cHg7XG4gICAgICBoZWlnaHQ6IDQ4cHg7XG4gICAgICB3aWR0aDogNDhweDtcbiAgICAgIGNvbnRlbnQ6ICcnO1xuICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgbGVmdDogMDtcbiAgICAgIHRvcDogMDsgfVxuICAgICNwYWdlLWpvYnMgLnJlYXNvbnMgLnJlYXNvbjpudGgtY2hpbGQoMik6YmVmb3JlIHtcbiAgICAgIGJhY2tncm91bmQtcG9zaXRpb246IGNlbnRlciAtNDhweDsgfVxuICAgICNwYWdlLWpvYnMgLnJlYXNvbnMgLnJlYXNvbjpudGgtY2hpbGQoMyk6YmVmb3JlIHtcbiAgICAgIGJhY2tncm91bmQtcG9zaXRpb246IGNlbnRlciAtOTZweDsgfVxuICAgICNwYWdlLWpvYnMgLnJlYXNvbnMgLnJlYXNvbjpudGgtY2hpbGQoNCk6YmVmb3JlIHtcbiAgICAgIGJhY2tncm91bmQtcG9zaXRpb246IGNlbnRlciAtMTQ0cHg7IH1cbiAgICAjcGFnZS1qb2JzIC5yZWFzb25zIC5yZWFzb246bnRoLWNoaWxkKDUpOmJlZm9yZSB7XG4gICAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiBjZW50ZXIgLTE5MnB4OyB9XG4gICAgI3BhZ2Utam9icyAucmVhc29ucyAucmVhc29uOm50aC1jaGlsZCg2KTpiZWZvcmUge1xuICAgICAgYmFja2dyb3VuZC1wb3NpdGlvbjogY2VudGVyIC0yNDBweDsgfVxuICAgICNwYWdlLWpvYnMgLnJlYXNvbnMgLnJlYXNvbiBoNCB7XG4gICAgICBmb250LXNpemU6IDE2cHg7XG4gICAgICBsaW5lLWhlaWdodDogMjRweDsgfVxuICAgICNwYWdlLWpvYnMgLnJlYXNvbnMgLnJlYXNvbiBwIHtcbiAgICAgIGZvbnQtc2l6ZTogMTRweDtcbiAgICAgIGxpbmUtaGVpZ2h0OiAyNHB4OyB9XG5cbiNwYWdlLWpvYnMgLmJlbm5lZml0cyB7XG4gIGJhY2tncm91bmQ6ICMyNDY2ZDI7XG4gIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCh0byByaWdodCwgIzQ2ODhmNCAwJSwgIzFlNjBjYyAxMDAlKTtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBvdmVyZmxvdzogaGlkZGVuOyB9XG4gICNwYWdlLWpvYnMgLmJlbm5lZml0cyAuY29udGVudCB7XG4gICAgcGFkZGluZy10b3A6IDkwcHg7XG4gICAgcGFkZGluZy1ib3R0b206IDcycHg7IH1cbiAgICAjcGFnZS1qb2JzIC5iZW5uZWZpdHMgLmNvbnRlbnQ6YmVmb3JlIHtcbiAgICAgIGJhY2tncm91bmQ6IG5vLXJlcGVhdCBsZWZ0IHRvcCB1cmwoXCIvaW1nL2pvYnMvaW9uaWMtcGhvdG9zLTMuanBnXCIpO1xuICAgICAgYmFja2dyb3VuZC1zaXplOiBjb3ZlcjtcbiAgICAgIHdpZHRoOiAxMDAwcHg7XG4gICAgICBjb250ZW50OiAnJztcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgIGJvdHRvbTogMDtcbiAgICAgIHRvcDogMDtcbiAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgbGVmdDogNDUlOyB9XG4gICAgICBAbWVkaWEgKG1heC13aWR0aDogOTkxcHgpIHtcbiAgICAgICAgI3BhZ2Utam9icyAuYmVubmVmaXRzIC5jb250ZW50OmJlZm9yZSB7XG4gICAgICAgICAgbGVmdDogNjAlO1xuICAgICAgICAgIGJhY2tncm91bmQtcG9zaXRpb246IGxlZnQgLTM0MHB4OyB9IH1cbiAgICAgIEBtZWRpYSAobWF4LXdpZHRoOiA3NjdweCkge1xuICAgICAgICAjcGFnZS1qb2JzIC5iZW5uZWZpdHMgLmNvbnRlbnQ6YmVmb3JlIHtcbiAgICAgICAgICBkaXNwbGF5OiBub25lOyB9IH1cbiAgICAgIEBtZWRpYSAobWluLXdpZHRoOiAxODIwcHgpIHtcbiAgICAgICAgI3BhZ2Utam9icyAuYmVubmVmaXRzIC5jb250ZW50OmJlZm9yZSB7XG4gICAgICAgICAgd2lkdGg6IDkyNHB4O1xuICAgICAgICAgIGhlaWdodDogNzAwcHg7XG4gICAgICAgICAgbGVmdDogYXV0bztcbiAgICAgICAgICByaWdodDogMDsgfSB9XG4gICNwYWdlLWpvYnMgLmJlbm5lZml0cyBoMyB7XG4gICAgY29sb3I6IHdoaXRlO1xuICAgIHBhZGRpbmctbGVmdDogNzJweDtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7IH1cbiAgICAjcGFnZS1qb2JzIC5iZW5uZWZpdHMgaDM6YmVmb3JlIHtcbiAgICAgIGJhY2tncm91bmQ6IG5vLXJlcGVhdCBjZW50ZXIgLTI4OHB4IHVybChcIi9pbWcvam9icy9qb2JzLXBlcmtzLWljb25zLnBuZ1wiKTtcbiAgICAgIGJhY2tncm91bmQtc2l6ZTogNDhweDtcbiAgICAgIGhlaWdodDogNDhweDtcbiAgICAgIHdpZHRoOiA0OHB4O1xuICAgICAgY29udGVudDogJyc7XG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICBsZWZ0OiAwO1xuICAgICAgdG9wOiAwOyB9XG4gICNwYWdlLWpvYnMgLmJlbm5lZml0cyB1bCB7XG4gICAgbGlzdC1zdHlsZTogbm9uZTtcbiAgICBwYWRkaW5nLWxlZnQ6IDcycHg7IH1cbiAgICAjcGFnZS1qb2JzIC5iZW5uZWZpdHMgdWwgbGkge1xuICAgICAgY29sb3I6IHdoaXRlO1xuICAgICAgb3BhY2l0eTogLjg7XG4gICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICBsaW5lLWhlaWdodDogMWVtO1xuICAgICAgcGFkZGluZzogMTVweCAwIDE1cHggMjNweDtcbiAgICAgIGZvbnQtd2VpZ2h0OiA0MDA7XG4gICAgICBmb250LXNpemU6IDE2cHg7IH1cbiAgICAgICNwYWdlLWpvYnMgLmJlbm5lZml0cyB1bCBsaTpiZWZvcmUge1xuICAgICAgICBiYWNrZ3JvdW5kOiBuby1yZXBlYXQgY2VudGVyIGNlbnRlciB1cmwoXCIvaW1nL2pvYnMvam9iLXBlcmtzLWNoZWNrbWFyay5wbmdcIik7XG4gICAgICAgIGJhY2tncm91bmQtc2l6ZTogMTJweDtcbiAgICAgICAgaGVpZ2h0OiAxMnB4O1xuICAgICAgICB3aWR0aDogMTJweDtcbiAgICAgICAgY29udGVudDogJyc7XG4gICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgbGVmdDogMDtcbiAgICAgICAgdG9wOiAxNnB4OyB9XG5cbiNwYWdlLWpvYnMgLm9wZW4tcG9zaXRpb25zIHtcbiAgbWF4LXdpZHRoOiA2OTBweDtcbiAgbWFyZ2luOiAwIGF1dG87IH1cbiAgI3BhZ2Utam9icyAub3Blbi1wb3NpdGlvbnMgaGdyb3VwIHtcbiAgICBwYWRkaW5nOiA5MHB4IDI1cHggNzBweDsgfVxuICAjcGFnZS1qb2JzIC5vcGVuLXBvc2l0aW9ucyBoZ3JvdXAgcCB7XG4gICAgY29sb3I6ICM1ZDYzNmM7XG4gICAgZm9udC1zaXplOiAxOHB4O1xuICAgIGxpbmUtaGVpZ2h0OiAyOHB4O1xuICAgIGZvbnQtd2VpZ2h0OiA0MDA7IH1cbiAgI3BhZ2Utam9icyAub3Blbi1wb3NpdGlvbnMgdWwsXG4gICNwYWdlLWpvYnMgLm9wZW4tcG9zaXRpb25zIC5yYm94LW9wZW5pbmctbGlzdCB7XG4gICAgcGFkZGluZzogMDsgfVxuICAgICNwYWdlLWpvYnMgLm9wZW4tcG9zaXRpb25zIHVsIGxpLFxuICAgICNwYWdlLWpvYnMgLm9wZW4tcG9zaXRpb25zIHVsIC5yYm94LW9wZW5pbmctbGksXG4gICAgI3BhZ2Utam9icyAub3Blbi1wb3NpdGlvbnMgLnJib3gtb3BlbmluZy1saXN0IGxpLFxuICAgICNwYWdlLWpvYnMgLm9wZW4tcG9zaXRpb25zIC5yYm94LW9wZW5pbmctbGlzdCAucmJveC1vcGVuaW5nLWxpIHtcbiAgICAgIGxpc3Qtc3R5bGU6IG5vbmU7XG4gICAgICBwYWRkaW5nOiAyOXB4IDAgNXB4O1xuICAgICAgYm9yZGVyLXRvcDogMXB4IHNvbGlkICNlYmVlZjI7XG4gICAgICBwb3NpdGlvbjogcmVsYXRpdmU7IH1cbiAgICAgICNwYWdlLWpvYnMgLm9wZW4tcG9zaXRpb25zIHVsIGxpOmxhc3QtY2hpbGQsXG4gICAgICAjcGFnZS1qb2JzIC5vcGVuLXBvc2l0aW9ucyB1bCAucmJveC1vcGVuaW5nLWxpOmxhc3QtY2hpbGQsXG4gICAgICAjcGFnZS1qb2JzIC5vcGVuLXBvc2l0aW9ucyAucmJveC1vcGVuaW5nLWxpc3QgbGk6bGFzdC1jaGlsZCxcbiAgICAgICNwYWdlLWpvYnMgLm9wZW4tcG9zaXRpb25zIC5yYm94LW9wZW5pbmctbGlzdCAucmJveC1vcGVuaW5nLWxpOmxhc3QtY2hpbGQge1xuICAgICAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgI2ViZWVmMjsgfVxuICAgICAgI3BhZ2Utam9icyAub3Blbi1wb3NpdGlvbnMgdWwgbGkgc3Ryb25nLFxuICAgICAgI3BhZ2Utam9icyAub3Blbi1wb3NpdGlvbnMgdWwgbGkgLnJib3gtb3BlbmluZy1saS10aXRsZSxcbiAgICAgICNwYWdlLWpvYnMgLm9wZW4tcG9zaXRpb25zIHVsIC5yYm94LW9wZW5pbmctbGkgc3Ryb25nLFxuICAgICAgI3BhZ2Utam9icyAub3Blbi1wb3NpdGlvbnMgdWwgLnJib3gtb3BlbmluZy1saSAucmJveC1vcGVuaW5nLWxpLXRpdGxlLFxuICAgICAgI3BhZ2Utam9icyAub3Blbi1wb3NpdGlvbnMgLnJib3gtb3BlbmluZy1saXN0IGxpIHN0cm9uZyxcbiAgICAgICNwYWdlLWpvYnMgLm9wZW4tcG9zaXRpb25zIC5yYm94LW9wZW5pbmctbGlzdCBsaSAucmJveC1vcGVuaW5nLWxpLXRpdGxlLFxuICAgICAgI3BhZ2Utam9icyAub3Blbi1wb3NpdGlvbnMgLnJib3gtb3BlbmluZy1saXN0IC5yYm94LW9wZW5pbmctbGkgc3Ryb25nLFxuICAgICAgI3BhZ2Utam9icyAub3Blbi1wb3NpdGlvbnMgLnJib3gtb3BlbmluZy1saXN0IC5yYm94LW9wZW5pbmctbGkgLnJib3gtb3BlbmluZy1saS10aXRsZSB7XG4gICAgICAgIGZvbnQtc2l6ZTogMThweDtcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuNGVtO1xuICAgICAgICBjb2xvcjogIzRDNTU1QTsgfVxuICAgICAgI3BhZ2Utam9icyAub3Blbi1wb3NpdGlvbnMgdWwgbGkgLmxvY2F0aW9uLFxuICAgICAgI3BhZ2Utam9icyAub3Blbi1wb3NpdGlvbnMgdWwgbGkgLnJib3gtam9iLXNob3J0ZGVzYyxcbiAgICAgICNwYWdlLWpvYnMgLm9wZW4tcG9zaXRpb25zIHVsIC5yYm94LW9wZW5pbmctbGkgLmxvY2F0aW9uLFxuICAgICAgI3BhZ2Utam9icyAub3Blbi1wb3NpdGlvbnMgdWwgLnJib3gtb3BlbmluZy1saSAucmJveC1qb2Itc2hvcnRkZXNjLFxuICAgICAgI3BhZ2Utam9icyAub3Blbi1wb3NpdGlvbnMgLnJib3gtb3BlbmluZy1saXN0IGxpIC5sb2NhdGlvbixcbiAgICAgICNwYWdlLWpvYnMgLm9wZW4tcG9zaXRpb25zIC5yYm94LW9wZW5pbmctbGlzdCBsaSAucmJveC1qb2Itc2hvcnRkZXNjLFxuICAgICAgI3BhZ2Utam9icyAub3Blbi1wb3NpdGlvbnMgLnJib3gtb3BlbmluZy1saXN0IC5yYm94LW9wZW5pbmctbGkgLmxvY2F0aW9uLFxuICAgICAgI3BhZ2Utam9icyAub3Blbi1wb3NpdGlvbnMgLnJib3gtb3BlbmluZy1saXN0IC5yYm94LW9wZW5pbmctbGkgLnJib3gtam9iLXNob3J0ZGVzYyB7XG4gICAgICAgIGZvbnQtd2VpZ2h0OiA0MDA7XG4gICAgICAgIGZvbnQtc2l6ZTogMTZweDsgfVxuICAgICAgI3BhZ2Utam9icyAub3Blbi1wb3NpdGlvbnMgdWwgbGkgLmxlYXJuLW1vcmUsXG4gICAgICAjcGFnZS1qb2JzIC5vcGVuLXBvc2l0aW9ucyB1bCAucmJveC1vcGVuaW5nLWxpIC5sZWFybi1tb3JlLFxuICAgICAgI3BhZ2Utam9icyAub3Blbi1wb3NpdGlvbnMgLnJib3gtb3BlbmluZy1saXN0IGxpIC5sZWFybi1tb3JlLFxuICAgICAgI3BhZ2Utam9icyAub3Blbi1wb3NpdGlvbnMgLnJib3gtb3BlbmluZy1saXN0IC5yYm94LW9wZW5pbmctbGkgLmxlYXJuLW1vcmUge1xuICAgICAgICBmbG9hdDogcmlnaHQ7XG4gICAgICAgIG1hcmdpbi10b3A6IDE4cHg7XG4gICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7XG4gICAgICAgIGN1cnNvcjogcG9pbnRlcjsgfVxuICAgICAgI3BhZ2Utam9icyAub3Blbi1wb3NpdGlvbnMgdWwgbGkgLnJib3gtb3BlbmluZy1wb3NpdGlvbi1pbmZvLFxuICAgICAgI3BhZ2Utam9icyAub3Blbi1wb3NpdGlvbnMgdWwgLnJib3gtb3BlbmluZy1saSAucmJveC1vcGVuaW5nLXBvc2l0aW9uLWluZm8sXG4gICAgICAjcGFnZS1qb2JzIC5vcGVuLXBvc2l0aW9ucyAucmJveC1vcGVuaW5nLWxpc3QgbGkgLnJib3gtb3BlbmluZy1wb3NpdGlvbi1pbmZvLFxuICAgICAgI3BhZ2Utam9icyAub3Blbi1wb3NpdGlvbnMgLnJib3gtb3BlbmluZy1saXN0IC5yYm94LW9wZW5pbmctbGkgLnJib3gtb3BlbmluZy1wb3NpdGlvbi1pbmZvIHtcbiAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICByaWdodDogMDtcbiAgICAgICAgdG9wOiAyMHB4OyB9XG4gICAgICAjcGFnZS1qb2JzIC5vcGVuLXBvc2l0aW9ucyB1bCBsaS5hY3RpdmUgLmRldGFpbHMsXG4gICAgICAjcGFnZS1qb2JzIC5vcGVuLXBvc2l0aW9ucyB1bCAucmJveC1vcGVuaW5nLWxpLmFjdGl2ZSAuZGV0YWlscyxcbiAgICAgICNwYWdlLWpvYnMgLm9wZW4tcG9zaXRpb25zIC5yYm94LW9wZW5pbmctbGlzdCBsaS5hY3RpdmUgLmRldGFpbHMsXG4gICAgICAjcGFnZS1qb2JzIC5vcGVuLXBvc2l0aW9ucyAucmJveC1vcGVuaW5nLWxpc3QgLnJib3gtb3BlbmluZy1saS5hY3RpdmUgLmRldGFpbHMge1xuICAgICAgICB0cmFuc2Zvcm06IHNjYWxlM2QoMSwgMSwgMSk7XG4gICAgICAgIG1heC1oZWlnaHQ6IDgwMHB4O1xuICAgICAgICBvcGFjaXR5OiAxOyB9XG4gICAgI3BhZ2Utam9icyAub3Blbi1wb3NpdGlvbnMgdWwgLnJib3gtb3BlbmluZy1saSxcbiAgICAjcGFnZS1qb2JzIC5vcGVuLXBvc2l0aW9ucyAucmJveC1vcGVuaW5nLWxpc3QgLnJib3gtb3BlbmluZy1saSB7XG4gICAgICBwYWRkaW5nLWJvdHRvbTogMjlweDsgfVxuICAjcGFnZS1qb2JzIC5vcGVuLXBvc2l0aW9ucyAuZGV0YWlscyB7XG4gICAgdHJhbnNmb3JtOiBzY2FsZTNkKDEsIDAsIDEpO1xuICAgIG1heC1oZWlnaHQ6IDA7XG4gICAgb3BhY2l0eTogMDtcbiAgICB0cmFuc2Zvcm0tb3JpZ2luOiB0b3A7XG4gICAgdHJhbnNpdGlvbjogb3BhY2l0eSAwLjVzLCBtYXgtaGVpZ2h0IDAuNXMsIHRyYW5zZm9ybSAwLjVzIGN1YmljLWJlemllcigwLjE1NSwgMS4xMDUsIDAuMjk1LCAxLjEyKTsgfVxuICAjcGFnZS1qb2JzIC5vcGVuLXBvc2l0aW9ucyAucmJveC1hcHBsaWNhdGlvbi1mb3JtIGlucHV0IHtcbiAgICBmbG9hdDogbm9uZTtcbiAgICB3aWR0aDogMTAwJTsgfVxuICAgICNwYWdlLWpvYnMgLm9wZW4tcG9zaXRpb25zIC5yYm94LWFwcGxpY2F0aW9uLWZvcm0gaW5wdXRbdHlwZT0nZmlsZSddIHtcbiAgICAgIGJvcmRlcjogMDsgfVxuIl19 */\n"
  },
  {
    "path": "content/css/pages/press/index.css",
    "content": "#page-press .navbar + .banner {\n  background: #182949 no-repeat center top;\n  background-image: url(\"/img/press/press-cta-bg.jpg\"), linear-gradient(to right, #1f3253 0%, #39485d 100%);\n  background-size: cover, 100%; }\n  #page-press .navbar + .banner hgroup {\n    text-align: left;\n    max-width: 100%;\n    padding-top: 16px;\n    padding-left: 99px;\n    padding-bottom: 98px;\n    position: relative; }\n    #page-press .navbar + .banner hgroup::before {\n      background: url(\"/img/press/press-hero-icon.png\") 0 0 no-repeat;\n      background-size: 64px;\n      width: 64px;\n      height: 64px;\n      content: '';\n      position: absolute;\n      left: 14px;\n      top: 36px; }\n    @media (max-width: 767px) {\n      #page-press .navbar + .banner hgroup {\n        margin-top: 100px; } }\n  #page-press .navbar + .banner h1 {\n    font-family: \"Eina\", \"Helvetica Neue\", Helvetica, sans-serif;\n    font-weight: 700;\n    font-size: 33px;\n    margin-bottom: 4px;\n    letter-spacing: -.037em; }\n  #page-press .navbar + .banner a {\n    color: white;\n    text-decoration: none; }\n  #page-press .navbar + .banner p {\n    font-size: 17px;\n    letter-spacing: -.005em; }\n\n#page-press .cards {\n  margin-top: -41px;\n  list-style: none;\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-pack: justify;\n      justify-content: space-between;\n  padding-right: 0;\n  padding-left: 0; }\n  @media (max-width: 767px) {\n    #page-press .cards {\n      -ms-flex-wrap: wrap;\n          flex-wrap: wrap;\n      -ms-flex-pack: center;\n          justify-content: center; } }\n  #page-press .cards li {\n    background-color: #fff;\n    border-radius: 6px;\n    box-shadow: 0 8px 32px rgba(0, 0, 0, 0.1), 0 2px 8px rgba(0, 0, 0, 0.1);\n    padding: 82px 24px 38px;\n    -ms-flex: 0 1 370px;\n        flex: 0 1 370px;\n    text-align: center;\n    position: relative;\n    margin-bottom: 32px; }\n    #page-press .cards li::before {\n      background: url(\"/img/press/brand-asset-icons.png\") 0 0 no-repeat;\n      background-size: 114px;\n      width: 114px;\n      height: 114px;\n      position: absolute;\n      content: '';\n      top: -31px;\n      left: calc(50% - 57px); }\n    #page-press .cards li.primary-logo::before {\n      background-position: 0 0; }\n    #page-press .cards li.light-logo::before {\n      background-position: 0 -114px; }\n    #page-press .cards li.all::before {\n      background-position: 0 -224px; }\n    @media (max-width: 1219px) {\n      #page-press .cards li {\n        -ms-flex-preferred-size: 300px;\n            flex-basis: 300px; } }\n    @media (max-width: 991px) {\n      #page-press .cards li {\n        -ms-flex-preferred-size: 230px;\n            flex-basis: 230px; } }\n    @media (max-width: 767px) {\n      #page-press .cards li {\n        -ms-flex-preferred-size: 90%;\n            flex-basis: 90%; } }\n  #page-press .cards h3 {\n    font-size: 16px;\n    text-transform: uppercase;\n    font-weight: 700;\n    margin-bottom: 12px;\n    letter-spacing: .1em;\n    color: #272a2f; }\n  #page-press .cards p {\n    font-size: 15px; }\n  #page-press .cards .btn {\n    padding: 12px 16px 9px;\n    font-size: 14px;\n    margin-top: 16px; }\n\n#page-press .tabs {\n  margin-top: 47px;\n  padding-top: 8px;\n  margin-bottom: 50px;\n  position: relative;\n  display: -ms-flexbox;\n  display: flex; }\n  #page-press .tabs .tab-menu {\n    -ms-flex: 0 1 237px;\n        flex: 0 1 237px;\n    min-width: 140px; }\n  #page-press .tabs .nav-stacked h4 {\n    font-size: 14px;\n    text-transform: uppercase;\n    letter-spacing: .08em;\n    font-weight: 700;\n    margin-top: 13px; }\n  #page-press .tabs .nav-stacked a {\n    font-weight: 500;\n    color: #4C555A;\n    font-size: 15px;\n    padding: 0 0 0 8px;\n    margin: 19px 0 19px -10px;\n    border-left: 2px solid transparent;\n    background: transparent !important;\n    transition: color .2s, border-color .2s; }\n  #page-press .tabs .nav-stacked li.active a,\n  #page-press .tabs .nav-stacked li a:hover,\n  #page-press .tabs .nav-stacked li a:active {\n    color: #4a8bfc;\n    border-color: rgba(74, 139, 252, 0.6); }\n  #page-press .tabs .tab-content {\n    -ms-flex: 1 0 300px;\n        flex: 1 0 300px;\n    padding-left: 87px; }\n    #page-press .tabs .tab-content ul {\n      padding-left: 0; }\n    #page-press .tabs .tab-content li {\n      list-style: none; }\n      #page-press .tabs .tab-content li a {\n        position: relative;\n        display: block;\n        padding-left: 102px;\n        margin-top: 12px;\n        margin-bottom: 43px; }\n        #page-press .tabs .tab-content li a::before, #page-press .tabs .tab-content li a::after {\n          background: url(\"/img/press/press-thumbnail.png\") 0 0 no-repeat;\n          background-size: 72px;\n          width: 72px;\n          height: 72px;\n          content: '';\n          position: absolute;\n          left: 0;\n          top: 0;\n          transition: .3s opacity; }\n        #page-press .tabs .tab-content li a::after {\n          opacity: 0;\n          background-position: 0 -72px; }\n        #page-press .tabs .tab-content li a:hover::after {\n          opacity: 1; }\n        #page-press .tabs .tab-content li a:hover strong {\n          color: #4a8bfc; }\n        #page-press .tabs .tab-content li a strong {\n          color: #272a2f;\n          font-size: 16px;\n          font-weight: 700;\n          font-family: \"Eina\", \"Helvetica Neue\", Helvetica, sans-serif;\n          transition: .3s color; }\n        #page-press .tabs .tab-content li a time {\n          color: #727a87;\n          display: block;\n          line-height: 24px;\n          letter-spacing: -.03em;\n          font-weight: 500;\n          transition: .3s color; }\n        #page-press .tabs .tab-content li a span {\n          color: #727a87;\n          display: block;\n          font-size: 15px;\n          font-weight: 400;\n          line-height: 28px;\n          letter-spacing: -.004em;\n          transition: .3s color; }\n  @media (max-width: 767px) {\n    #page-press .tabs {\n      -ms-flex-direction: column;\n          flex-direction: column; }\n      #page-press .tabs .tab-menu {\n        -ms-flex-preferred-size: 32px;\n            flex-basis: 32px; }\n        #page-press .tabs .tab-menu .nav-stacked {\n          display: -ms-flexbox;\n          display: flex;\n          -ms-flex-pack: distribute;\n              justify-content: space-around; }\n          #page-press .tabs .tab-menu .nav-stacked h4 {\n            margin-top: 25px; }\n          #page-press .tabs .tab-menu .nav-stacked li.active a,\n          #page-press .tabs .tab-menu .nav-stacked li a:hover,\n          #page-press .tabs .tab-menu .nav-stacked li a:active {\n            border-right-color: transparent;\n            border-bottom: 2px solid #4a8bfc; }\n      #page-press .tabs .tab-content {\n        padding-left: 32px; } }\n\n/*# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImluZGV4LmNzcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtFQUNFLHlDQUF5QztFQUN6QywwR0FBMEc7RUFDMUcsNkJBQTZCLEVBQUU7RUFDL0I7SUFDRSxpQkFBaUI7SUFDakIsZ0JBQWdCO0lBQ2hCLGtCQUFrQjtJQUNsQixtQkFBbUI7SUFDbkIscUJBQXFCO0lBQ3JCLG1CQUFtQixFQUFFO0lBQ3JCO01BQ0UsZ0VBQWdFO01BQ2hFLHNCQUFzQjtNQUN0QixZQUFZO01BQ1osYUFBYTtNQUNiLFlBQVk7TUFDWixtQkFBbUI7TUFDbkIsV0FBVztNQUNYLFVBQVUsRUFBRTtJQUNkO01BQ0U7UUFDRSxrQkFBa0IsRUFBRSxFQUFFO0VBQzVCO0lBQ0UsNkRBQTZEO0lBQzdELGlCQUFpQjtJQUNqQixnQkFBZ0I7SUFDaEIsbUJBQW1CO0lBQ25CLHdCQUF3QixFQUFFO0VBQzVCO0lBQ0UsYUFBYTtJQUNiLHNCQUFzQixFQUFFO0VBQzFCO0lBQ0UsZ0JBQWdCO0lBQ2hCLHdCQUF3QixFQUFFOztBQUU5QjtFQUNFLGtCQUFrQjtFQUNsQixpQkFBaUI7RUFDakIscUJBQWM7RUFBZCxjQUFjO0VBQ2QsdUJBQStCO01BQS9CLCtCQUErQjtFQUMvQixpQkFBaUI7RUFDakIsZ0JBQWdCLEVBQUU7RUFDbEI7SUFDRTtNQUNFLG9CQUFnQjtVQUFoQixnQkFBZ0I7TUFDaEIsc0JBQXdCO1VBQXhCLHdCQUF3QixFQUFFLEVBQUU7RUFDaEM7SUFDRSx1QkFBdUI7SUFDdkIsbUJBQW1CO0lBQ25CLHdFQUF3RTtJQUN4RSx3QkFBd0I7SUFDeEIsb0JBQWdCO1FBQWhCLGdCQUFnQjtJQUNoQixtQkFBbUI7SUFDbkIsbUJBQW1CO0lBQ25CLG9CQUFvQixFQUFFO0lBQ3RCO01BQ0Usa0VBQWtFO01BQ2xFLHVCQUF1QjtNQUN2QixhQUFhO01BQ2IsY0FBYztNQUNkLG1CQUFtQjtNQUNuQixZQUFZO01BQ1osV0FBVztNQUNYLHVCQUF1QixFQUFFO0lBQzNCO01BQ0UseUJBQXlCLEVBQUU7SUFDN0I7TUFDRSw4QkFBOEIsRUFBRTtJQUNsQztNQUNFLDhCQUE4QixFQUFFO0lBQ2xDO01BQ0U7UUFDRSwrQkFBa0I7WUFBbEIsa0JBQWtCLEVBQUUsRUFBRTtJQUMxQjtNQUNFO1FBQ0UsK0JBQWtCO1lBQWxCLGtCQUFrQixFQUFFLEVBQUU7SUFDMUI7TUFDRTtRQUNFLDZCQUFnQjtZQUFoQixnQkFBZ0IsRUFBRSxFQUFFO0VBQzFCO0lBQ0UsZ0JBQWdCO0lBQ2hCLDBCQUEwQjtJQUMxQixpQkFBaUI7SUFDakIsb0JBQW9CO0lBQ3BCLHFCQUFxQjtJQUNyQixlQUFlLEVBQUU7RUFDbkI7SUFDRSxnQkFBZ0IsRUFBRTtFQUNwQjtJQUNFLHVCQUF1QjtJQUN2QixnQkFBZ0I7SUFDaEIsaUJBQWlCLEVBQUU7O0FBRXZCO0VBQ0UsaUJBQWlCO0VBQ2pCLGlCQUFpQjtFQUNqQixvQkFBb0I7RUFDcEIsbUJBQW1CO0VBQ25CLHFCQUFjO0VBQWQsY0FBYyxFQUFFO0VBQ2hCO0lBQ0Usb0JBQWdCO1FBQWhCLGdCQUFnQjtJQUNoQixpQkFBaUIsRUFBRTtFQUNyQjtJQUNFLGdCQUFnQjtJQUNoQiwwQkFBMEI7SUFDMUIsc0JBQXNCO0lBQ3RCLGlCQUFpQjtJQUNqQixpQkFBaUIsRUFBRTtFQUNyQjtJQUNFLGlCQUFpQjtJQUNqQixlQUFlO0lBQ2YsZ0JBQWdCO0lBQ2hCLG1CQUFtQjtJQUNuQiwwQkFBMEI7SUFDMUIsbUNBQW1DO0lBQ25DLG1DQUFtQztJQUNuQyx3Q0FBd0MsRUFBRTtFQUM1Qzs7O0lBR0UsZUFBZTtJQUNmLHNDQUFzQyxFQUFFO0VBQzFDO0lBQ0Usb0JBQWdCO1FBQWhCLGdCQUFnQjtJQUNoQixtQkFBbUIsRUFBRTtJQUNyQjtNQUNFLGdCQUFnQixFQUFFO0lBQ3BCO01BQ0UsaUJBQWlCLEVBQUU7TUFDbkI7UUFDRSxtQkFBbUI7UUFDbkIsZUFBZTtRQUNmLG9CQUFvQjtRQUNwQixpQkFBaUI7UUFDakIsb0JBQW9CLEVBQUU7UUFDdEI7VUFDRSxnRUFBZ0U7VUFDaEUsc0JBQXNCO1VBQ3RCLFlBQVk7VUFDWixhQUFhO1VBQ2IsWUFBWTtVQUNaLG1CQUFtQjtVQUNuQixRQUFRO1VBQ1IsT0FBTztVQUNQLHdCQUF3QixFQUFFO1FBQzVCO1VBQ0UsV0FBVztVQUNYLDZCQUE2QixFQUFFO1FBQ2pDO1VBQ0UsV0FBVyxFQUFFO1FBQ2Y7VUFDRSxlQUFlLEVBQUU7UUFDbkI7VUFDRSxlQUFlO1VBQ2YsZ0JBQWdCO1VBQ2hCLGlCQUFpQjtVQUNqQiw2REFBNkQ7VUFDN0Qsc0JBQXNCLEVBQUU7UUFDMUI7VUFDRSxlQUFlO1VBQ2YsZUFBZTtVQUNmLGtCQUFrQjtVQUNsQix1QkFBdUI7VUFDdkIsaUJBQWlCO1VBQ2pCLHNCQUFzQixFQUFFO1FBQzFCO1VBQ0UsZUFBZTtVQUNmLGVBQWU7VUFDZixnQkFBZ0I7VUFDaEIsaUJBQWlCO1VBQ2pCLGtCQUFrQjtVQUNsQix3QkFBd0I7VUFDeEIsc0JBQXNCLEVBQUU7RUFDaEM7SUFDRTtNQUNFLDJCQUF1QjtVQUF2Qix1QkFBdUIsRUFBRTtNQUN6QjtRQUNFLDhCQUFpQjtZQUFqQixpQkFBaUIsRUFBRTtRQUNuQjtVQUNFLHFCQUFjO1VBQWQsY0FBYztVQUNkLDBCQUE4QjtjQUE5Qiw4QkFBOEIsRUFBRTtVQUNoQztZQUNFLGlCQUFpQixFQUFFO1VBQ3JCOzs7WUFHRSxnQ0FBZ0M7WUFDaEMsaUNBQWlDLEVBQUU7TUFDekM7UUFDRSxtQkFBbUIsRUFBRSxFQUFFIiwiZmlsZSI6InBhZ2VzL3ByZXNzL2luZGV4LmNzcyIsInNvdXJjZXNDb250ZW50IjpbIiNwYWdlLXByZXNzIC5uYXZiYXIgKyAuYmFubmVyIHtcbiAgYmFja2dyb3VuZDogIzE4Mjk0OSBuby1yZXBlYXQgY2VudGVyIHRvcDtcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFwiL2ltZy9wcmVzcy9wcmVzcy1jdGEtYmcuanBnXCIpLCBsaW5lYXItZ3JhZGllbnQodG8gcmlnaHQsICMxZjMyNTMgMCUsICMzOTQ4NWQgMTAwJSk7XG4gIGJhY2tncm91bmQtc2l6ZTogY292ZXIsIDEwMCU7IH1cbiAgI3BhZ2UtcHJlc3MgLm5hdmJhciArIC5iYW5uZXIgaGdyb3VwIHtcbiAgICB0ZXh0LWFsaWduOiBsZWZ0O1xuICAgIG1heC13aWR0aDogMTAwJTtcbiAgICBwYWRkaW5nLXRvcDogMTZweDtcbiAgICBwYWRkaW5nLWxlZnQ6IDk5cHg7XG4gICAgcGFkZGluZy1ib3R0b206IDk4cHg7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlOyB9XG4gICAgI3BhZ2UtcHJlc3MgLm5hdmJhciArIC5iYW5uZXIgaGdyb3VwOjpiZWZvcmUge1xuICAgICAgYmFja2dyb3VuZDogdXJsKFwiL2ltZy9wcmVzcy9wcmVzcy1oZXJvLWljb24ucG5nXCIpIDAgMCBuby1yZXBlYXQ7XG4gICAgICBiYWNrZ3JvdW5kLXNpemU6IDY0cHg7XG4gICAgICB3aWR0aDogNjRweDtcbiAgICAgIGhlaWdodDogNjRweDtcbiAgICAgIGNvbnRlbnQ6ICcnO1xuICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgbGVmdDogMTRweDtcbiAgICAgIHRvcDogMzZweDsgfVxuICAgIEBtZWRpYSAobWF4LXdpZHRoOiA3NjdweCkge1xuICAgICAgI3BhZ2UtcHJlc3MgLm5hdmJhciArIC5iYW5uZXIgaGdyb3VwIHtcbiAgICAgICAgbWFyZ2luLXRvcDogMTAwcHg7IH0gfVxuICAjcGFnZS1wcmVzcyAubmF2YmFyICsgLmJhbm5lciBoMSB7XG4gICAgZm9udC1mYW1pbHk6IFwiRWluYVwiLCBcIkhlbHZldGljYSBOZXVlXCIsIEhlbHZldGljYSwgc2Fucy1zZXJpZjtcbiAgICBmb250LXdlaWdodDogNzAwO1xuICAgIGZvbnQtc2l6ZTogMzNweDtcbiAgICBtYXJnaW4tYm90dG9tOiA0cHg7XG4gICAgbGV0dGVyLXNwYWNpbmc6IC0uMDM3ZW07IH1cbiAgI3BhZ2UtcHJlc3MgLm5hdmJhciArIC5iYW5uZXIgYSB7XG4gICAgY29sb3I6IHdoaXRlO1xuICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTsgfVxuICAjcGFnZS1wcmVzcyAubmF2YmFyICsgLmJhbm5lciBwIHtcbiAgICBmb250LXNpemU6IDE3cHg7XG4gICAgbGV0dGVyLXNwYWNpbmc6IC0uMDA1ZW07IH1cblxuI3BhZ2UtcHJlc3MgLmNhcmRzIHtcbiAgbWFyZ2luLXRvcDogLTQxcHg7XG4gIGxpc3Qtc3R5bGU6IG5vbmU7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcbiAgcGFkZGluZy1yaWdodDogMDtcbiAgcGFkZGluZy1sZWZ0OiAwOyB9XG4gIEBtZWRpYSAobWF4LXdpZHRoOiA3NjdweCkge1xuICAgICNwYWdlLXByZXNzIC5jYXJkcyB7XG4gICAgICBmbGV4LXdyYXA6IHdyYXA7XG4gICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsgfSB9XG4gICNwYWdlLXByZXNzIC5jYXJkcyBsaSB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjtcbiAgICBib3JkZXItcmFkaXVzOiA2cHg7XG4gICAgYm94LXNoYWRvdzogMCA4cHggMzJweCByZ2JhKDAsIDAsIDAsIDAuMSksIDAgMnB4IDhweCByZ2JhKDAsIDAsIDAsIDAuMSk7XG4gICAgcGFkZGluZzogODJweCAyNHB4IDM4cHg7XG4gICAgZmxleDogMCAxIDM3MHB4O1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgbWFyZ2luLWJvdHRvbTogMzJweDsgfVxuICAgICNwYWdlLXByZXNzIC5jYXJkcyBsaTo6YmVmb3JlIHtcbiAgICAgIGJhY2tncm91bmQ6IHVybChcIi9pbWcvcHJlc3MvYnJhbmQtYXNzZXQtaWNvbnMucG5nXCIpIDAgMCBuby1yZXBlYXQ7XG4gICAgICBiYWNrZ3JvdW5kLXNpemU6IDExNHB4O1xuICAgICAgd2lkdGg6IDExNHB4O1xuICAgICAgaGVpZ2h0OiAxMTRweDtcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgIGNvbnRlbnQ6ICcnO1xuICAgICAgdG9wOiAtMzFweDtcbiAgICAgIGxlZnQ6IGNhbGMoNTAlIC0gNTdweCk7IH1cbiAgICAjcGFnZS1wcmVzcyAuY2FyZHMgbGkucHJpbWFyeS1sb2dvOjpiZWZvcmUge1xuICAgICAgYmFja2dyb3VuZC1wb3NpdGlvbjogMCAwOyB9XG4gICAgI3BhZ2UtcHJlc3MgLmNhcmRzIGxpLmxpZ2h0LWxvZ286OmJlZm9yZSB7XG4gICAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwIC0xMTRweDsgfVxuICAgICNwYWdlLXByZXNzIC5jYXJkcyBsaS5hbGw6OmJlZm9yZSB7XG4gICAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwIC0yMjRweDsgfVxuICAgIEBtZWRpYSAobWF4LXdpZHRoOiAxMjE5cHgpIHtcbiAgICAgICNwYWdlLXByZXNzIC5jYXJkcyBsaSB7XG4gICAgICAgIGZsZXgtYmFzaXM6IDMwMHB4OyB9IH1cbiAgICBAbWVkaWEgKG1heC13aWR0aDogOTkxcHgpIHtcbiAgICAgICNwYWdlLXByZXNzIC5jYXJkcyBsaSB7XG4gICAgICAgIGZsZXgtYmFzaXM6IDIzMHB4OyB9IH1cbiAgICBAbWVkaWEgKG1heC13aWR0aDogNzY3cHgpIHtcbiAgICAgICNwYWdlLXByZXNzIC5jYXJkcyBsaSB7XG4gICAgICAgIGZsZXgtYmFzaXM6IDkwJTsgfSB9XG4gICNwYWdlLXByZXNzIC5jYXJkcyBoMyB7XG4gICAgZm9udC1zaXplOiAxNnB4O1xuICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XG4gICAgZm9udC13ZWlnaHQ6IDcwMDtcbiAgICBtYXJnaW4tYm90dG9tOiAxMnB4O1xuICAgIGxldHRlci1zcGFjaW5nOiAuMWVtO1xuICAgIGNvbG9yOiAjMjcyYTJmOyB9XG4gICNwYWdlLXByZXNzIC5jYXJkcyBwIHtcbiAgICBmb250LXNpemU6IDE1cHg7IH1cbiAgI3BhZ2UtcHJlc3MgLmNhcmRzIC5idG4ge1xuICAgIHBhZGRpbmc6IDEycHggMTZweCA5cHg7XG4gICAgZm9udC1zaXplOiAxNHB4O1xuICAgIG1hcmdpbi10b3A6IDE2cHg7IH1cblxuI3BhZ2UtcHJlc3MgLnRhYnMge1xuICBtYXJnaW4tdG9wOiA0N3B4O1xuICBwYWRkaW5nLXRvcDogOHB4O1xuICBtYXJnaW4tYm90dG9tOiA1MHB4O1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIGRpc3BsYXk6IGZsZXg7IH1cbiAgI3BhZ2UtcHJlc3MgLnRhYnMgLnRhYi1tZW51IHtcbiAgICBmbGV4OiAwIDEgMjM3cHg7XG4gICAgbWluLXdpZHRoOiAxNDBweDsgfVxuICAjcGFnZS1wcmVzcyAudGFicyAubmF2LXN0YWNrZWQgaDQge1xuICAgIGZvbnQtc2l6ZTogMTRweDtcbiAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xuICAgIGxldHRlci1zcGFjaW5nOiAuMDhlbTtcbiAgICBmb250LXdlaWdodDogNzAwO1xuICAgIG1hcmdpbi10b3A6IDEzcHg7IH1cbiAgI3BhZ2UtcHJlc3MgLnRhYnMgLm5hdi1zdGFja2VkIGEge1xuICAgIGZvbnQtd2VpZ2h0OiA1MDA7XG4gICAgY29sb3I6ICM0QzU1NUE7XG4gICAgZm9udC1zaXplOiAxNXB4O1xuICAgIHBhZGRpbmc6IDAgMCAwIDhweDtcbiAgICBtYXJnaW46IDE5cHggMCAxOXB4IC0xMHB4O1xuICAgIGJvcmRlci1sZWZ0OiAycHggc29saWQgdHJhbnNwYXJlbnQ7XG4gICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQgIWltcG9ydGFudDtcbiAgICB0cmFuc2l0aW9uOiBjb2xvciAuMnMsIGJvcmRlci1jb2xvciAuMnM7IH1cbiAgI3BhZ2UtcHJlc3MgLnRhYnMgLm5hdi1zdGFja2VkIGxpLmFjdGl2ZSBhLFxuICAjcGFnZS1wcmVzcyAudGFicyAubmF2LXN0YWNrZWQgbGkgYTpob3ZlcixcbiAgI3BhZ2UtcHJlc3MgLnRhYnMgLm5hdi1zdGFja2VkIGxpIGE6YWN0aXZlIHtcbiAgICBjb2xvcjogIzRhOGJmYztcbiAgICBib3JkZXItY29sb3I6IHJnYmEoNzQsIDEzOSwgMjUyLCAwLjYpOyB9XG4gICNwYWdlLXByZXNzIC50YWJzIC50YWItY29udGVudCB7XG4gICAgZmxleDogMSAwIDMwMHB4O1xuICAgIHBhZGRpbmctbGVmdDogODdweDsgfVxuICAgICNwYWdlLXByZXNzIC50YWJzIC50YWItY29udGVudCB1bCB7XG4gICAgICBwYWRkaW5nLWxlZnQ6IDA7IH1cbiAgICAjcGFnZS1wcmVzcyAudGFicyAudGFiLWNvbnRlbnQgbGkge1xuICAgICAgbGlzdC1zdHlsZTogbm9uZTsgfVxuICAgICAgI3BhZ2UtcHJlc3MgLnRhYnMgLnRhYi1jb250ZW50IGxpIGEge1xuICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICBwYWRkaW5nLWxlZnQ6IDEwMnB4O1xuICAgICAgICBtYXJnaW4tdG9wOiAxMnB4O1xuICAgICAgICBtYXJnaW4tYm90dG9tOiA0M3B4OyB9XG4gICAgICAgICNwYWdlLXByZXNzIC50YWJzIC50YWItY29udGVudCBsaSBhOjpiZWZvcmUsICNwYWdlLXByZXNzIC50YWJzIC50YWItY29udGVudCBsaSBhOjphZnRlciB7XG4gICAgICAgICAgYmFja2dyb3VuZDogdXJsKFwiL2ltZy9wcmVzcy9wcmVzcy10aHVtYm5haWwucG5nXCIpIDAgMCBuby1yZXBlYXQ7XG4gICAgICAgICAgYmFja2dyb3VuZC1zaXplOiA3MnB4O1xuICAgICAgICAgIHdpZHRoOiA3MnB4O1xuICAgICAgICAgIGhlaWdodDogNzJweDtcbiAgICAgICAgICBjb250ZW50OiAnJztcbiAgICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgICAgbGVmdDogMDtcbiAgICAgICAgICB0b3A6IDA7XG4gICAgICAgICAgdHJhbnNpdGlvbjogLjNzIG9wYWNpdHk7IH1cbiAgICAgICAgI3BhZ2UtcHJlc3MgLnRhYnMgLnRhYi1jb250ZW50IGxpIGE6OmFmdGVyIHtcbiAgICAgICAgICBvcGFjaXR5OiAwO1xuICAgICAgICAgIGJhY2tncm91bmQtcG9zaXRpb246IDAgLTcycHg7IH1cbiAgICAgICAgI3BhZ2UtcHJlc3MgLnRhYnMgLnRhYi1jb250ZW50IGxpIGE6aG92ZXI6OmFmdGVyIHtcbiAgICAgICAgICBvcGFjaXR5OiAxOyB9XG4gICAgICAgICNwYWdlLXByZXNzIC50YWJzIC50YWItY29udGVudCBsaSBhOmhvdmVyIHN0cm9uZyB7XG4gICAgICAgICAgY29sb3I6ICM0YThiZmM7IH1cbiAgICAgICAgI3BhZ2UtcHJlc3MgLnRhYnMgLnRhYi1jb250ZW50IGxpIGEgc3Ryb25nIHtcbiAgICAgICAgICBjb2xvcjogIzI3MmEyZjtcbiAgICAgICAgICBmb250LXNpemU6IDE2cHg7XG4gICAgICAgICAgZm9udC13ZWlnaHQ6IDcwMDtcbiAgICAgICAgICBmb250LWZhbWlseTogXCJFaW5hXCIsIFwiSGVsdmV0aWNhIE5ldWVcIiwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmO1xuICAgICAgICAgIHRyYW5zaXRpb246IC4zcyBjb2xvcjsgfVxuICAgICAgICAjcGFnZS1wcmVzcyAudGFicyAudGFiLWNvbnRlbnQgbGkgYSB0aW1lIHtcbiAgICAgICAgICBjb2xvcjogIzcyN2E4NztcbiAgICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgICAgICBsaW5lLWhlaWdodDogMjRweDtcbiAgICAgICAgICBsZXR0ZXItc3BhY2luZzogLS4wM2VtO1xuICAgICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7XG4gICAgICAgICAgdHJhbnNpdGlvbjogLjNzIGNvbG9yOyB9XG4gICAgICAgICNwYWdlLXByZXNzIC50YWJzIC50YWItY29udGVudCBsaSBhIHNwYW4ge1xuICAgICAgICAgIGNvbG9yOiAjNzI3YTg3O1xuICAgICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICAgIGZvbnQtc2l6ZTogMTVweDtcbiAgICAgICAgICBmb250LXdlaWdodDogNDAwO1xuICAgICAgICAgIGxpbmUtaGVpZ2h0OiAyOHB4O1xuICAgICAgICAgIGxldHRlci1zcGFjaW5nOiAtLjAwNGVtO1xuICAgICAgICAgIHRyYW5zaXRpb246IC4zcyBjb2xvcjsgfVxuICBAbWVkaWEgKG1heC13aWR0aDogNzY3cHgpIHtcbiAgICAjcGFnZS1wcmVzcyAudGFicyB7XG4gICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOyB9XG4gICAgICAjcGFnZS1wcmVzcyAudGFicyAudGFiLW1lbnUge1xuICAgICAgICBmbGV4LWJhc2lzOiAzMnB4OyB9XG4gICAgICAgICNwYWdlLXByZXNzIC50YWJzIC50YWItbWVudSAubmF2LXN0YWNrZWQge1xuICAgICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1hcm91bmQ7IH1cbiAgICAgICAgICAjcGFnZS1wcmVzcyAudGFicyAudGFiLW1lbnUgLm5hdi1zdGFja2VkIGg0IHtcbiAgICAgICAgICAgIG1hcmdpbi10b3A6IDI1cHg7IH1cbiAgICAgICAgICAjcGFnZS1wcmVzcyAudGFicyAudGFiLW1lbnUgLm5hdi1zdGFja2VkIGxpLmFjdGl2ZSBhLFxuICAgICAgICAgICNwYWdlLXByZXNzIC50YWJzIC50YWItbWVudSAubmF2LXN0YWNrZWQgbGkgYTpob3ZlcixcbiAgICAgICAgICAjcGFnZS1wcmVzcyAudGFicyAudGFiLW1lbnUgLm5hdi1zdGFja2VkIGxpIGE6YWN0aXZlIHtcbiAgICAgICAgICAgIGJvcmRlci1yaWdodC1jb2xvcjogdHJhbnNwYXJlbnQ7XG4gICAgICAgICAgICBib3JkZXItYm90dG9tOiAycHggc29saWQgIzRhOGJmYzsgfVxuICAgICAgI3BhZ2UtcHJlc3MgLnRhYnMgLnRhYi1jb250ZW50IHtcbiAgICAgICAgcGFkZGluZy1sZWZ0OiAzMnB4OyB9IH1cbiJdfQ== */\n"
  },
  {
    "path": "content/css/pages/pricing/index.css",
    "content": ".feature-lists {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-pack: center;\n      justify-content: center;\n  -ms-flex-wrap: wrap;\n      flex-wrap: wrap; }\n  .feature-lists::before, .feature-lists::after {\n    display: none; }\n  .feature-lists__product {\n    -ms-flex: 0 1 380px;\n        flex: 0 1 380px;\n    display: -ms-flexbox;\n    display: flex;\n    -ms-flex-direction: column;\n        flex-direction: column; }\n  .feature-lists__heading {\n    text-align: left;\n    margin-bottom: 48px;\n    padding-right: 15px; }\n    .feature-lists__heading h2 {\n      font-size: 26px;\n      line-height: 36px;\n      letter-spacing: -0.03em;\n      color: #1A232F; }\n    .feature-lists__heading p {\n      font-size: 20px;\n      line-height: 24px;\n      letter-spacing: -0.03em;\n      color: #616E7E; }\n      .feature-lists__heading p span {\n        color: #d0d5db; }\n  .feature-lists__features {\n    list-style: none;\n    padding: 0 0 24px; }\n    .feature-lists__features li {\n      font-size: 14px;\n      line-height: 23px;\n      letter-spacing: -0.02em;\n      color: #414D5C;\n      position: relative;\n      padding: 18px 0 18px 22px;\n      border-bottom: 1px solid #E9EDF3; }\n      .feature-lists__features li:last-child {\n        border-bottom: none; }\n      .feature-lists__features li::before {\n        content: url('data:image/svg+xml,\\a           <svg viewBox=\"0 0 14 11\" xmlns=\"http://www.w3.org/2000/svg\">\\a             <path d=\"M4.45889 8.66035L1.16667 5.25367L0 6.4029L4.45889 11L14 1.1492L12.8333 0L4.45889 8.66035Z\"/>\\a           </svg>');\n        position: absolute;\n        left: 0;\n        top: calc(50% - 11px);\n        height: 11px;\n        width: 14px;\n        opacity: .5;\n        fill: #73849A; }\n      .feature-lists__features li a {\n        margin-left: 3px;\n        text-decoration: underline; }\n  .feature-lists__cta {\n    -ms-flex-item-align: start;\n        -ms-grid-row-align: start;\n        align-self: start;\n    margin-top: auto; }\n\n#page-pricing .plan-cards {\n  display: -ms-flexbox;\n  display: flex; }\n  #page-pricing .plan-cards .plan-card:not(.plan-card--emphasize) {\n    margin: 20px 0; }\n    @media (max-width: 768px) {\n      #page-pricing .plan-cards .plan-card:not(.plan-card--emphasize) {\n        margin: 0; } }\n  #page-pricing .plan-cards .plan-card + .plan-card {\n    margin-left: 26px; }\n  @media (max-width: 1220px) {\n    #page-pricing .plan-cards .plan-card + .plan-card {\n      margin-left: 14px; } }\n  @media (max-width: 768px) {\n    #page-pricing .plan-cards {\n      -ms-flex-direction: column;\n          flex-direction: column;\n      -ms-flex-align: center;\n          align-items: center; }\n      #page-pricing .plan-cards .plan-card {\n        width: 100%;\n        max-width: 500px; }\n      #page-pricing .plan-cards .plan-card + .plan-card {\n        margin-left: 0;\n        margin-top: 20px; } }\n\n#page-pricing .plan-card {\n  -ms-flex: 1;\n      flex: 1;\n  border-radius: 12px;\n  background: white;\n  box-shadow: 0px 2px 8px rgba(2, 8, 20, 0.08), 0px 8px 16px rgba(0, 0, 0, 0.1);\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-direction: column;\n      flex-direction: column;\n  -ms-flex-pack: justify;\n      justify-content: space-between; }\n  #page-pricing .plan-card + .plan-card {\n    border-left: 1px solid #eee; }\n  #page-pricing .plan-card .plan-card-header,\n  #page-pricing .plan-card .plan-card-body {\n    padding: 32px 28px; }\n  #page-pricing .plan-card .plan-card-body {\n    padding-bottom: 6px; }\n  #page-pricing .plan-card .plan-card-header {\n    letter-spacing: -0.02em; }\n    #page-pricing .plan-card .plan-card-header h3 {\n      margin-top: 0;\n      margin-bottom: 26px;\n      font-size: 24px;\n      color: #020814; }\n    #page-pricing .plan-card .plan-card-header .price {\n      color: #2E4C73;\n      font-size: 20px;\n      line-height: 1;\n      margin-bottom: 2px; }\n    #page-pricing .plan-card .plan-card-header .price strong {\n      font-size: 48px;\n      color: #020814;\n      font-weight: 400;\n      margin-right: -4px; }\n    #page-pricing .plan-card .plan-card-header .price strong,\n    #page-pricing .plan-card .plan-card-header .price span {\n      display: inline-block; }\n    #page-pricing .plan-card .plan-card-header .price h6 {\n      text-transform: uppercase;\n      letter-spacing: 0.08em;\n      font-size: 11px; }\n    #page-pricing .plan-card .plan-card-header .type {\n      font-size: 14px;\n      letter-spacing: -0.01em;\n      color: #73849A; }\n  #page-pricing .plan-card .plan-card-header--double {\n    display: -ms-flexbox;\n    display: flex;\n    -ms-flex-pack: justify;\n        justify-content: space-between; }\n    #page-pricing .plan-card .plan-card-header--double h3,\n    #page-pricing .plan-card .plan-card-header--double h4 {\n      margin-bottom: 0; }\n    #page-pricing .plan-card .plan-card-header--double h3 {\n      margin-top: 10px; }\n    #page-pricing .plan-card .plan-card-header--double h4 {\n      margin-top: 0;\n      font-size: 16px;\n      letter-spacing: -0.01em;\n      font-weight: 700;\n      color: #92A1B3; }\n    #page-pricing .plan-card .plan-card-header--double .right {\n      display: -ms-flexbox;\n      display: flex;\n      -ms-flex-align: end;\n          align-items: flex-end; }\n    #page-pricing .plan-card .plan-card-header--double .price {\n      font-size: 22px;\n      letter-spacing: -0.02em;\n      font-weight: 400;\n      color: #5B708B; }\n    @media (max-width: 768px) {\n      #page-pricing .plan-card .plan-card-header--double {\n        -ms-flex-direction: column;\n            flex-direction: column; }\n        #page-pricing .plan-card .plan-card-header--double .right {\n          margin-top: 8px; } }\n  #page-pricing .plan-card .plan-card-body {\n    border-top: 2px solid #F3F5F9; }\n    #page-pricing .plan-card .plan-card-body ul {\n      margin: 0;\n      padding: 0;\n      list-style-type: none; }\n    #page-pricing .plan-card .plan-card-body h4 {\n      font-weight: 600;\n      line-height: 1;\n      font-size: 14px;\n      letter-spacing: -0.01em;\n      color: #020814;\n      margin-bottom: 12px;\n      margin-top: 0; }\n  #page-pricing .plan-card .addon {\n    transition: 0.2s background, 0.2s border;\n    display: block;\n    border: 1px solid #DEE3EA;\n    border-radius: 6px;\n    padding: 16px;\n    margin-top: 32px;\n    cursor: pointer; }\n    #page-pricing .plan-card .addon li {\n      display: -ms-flexbox;\n      display: flex;\n      -ms-flex-align: center;\n          align-items: center;\n      color: #73849A;\n      font-weight: 400;\n      font-familt: \"Inter\", \"Inter UI\", Helvetica, Arial, sans-serif; }\n      #page-pricing .plan-card .addon li + li {\n        margin-top: 6px; }\n      #page-pricing .plan-card .addon li::before {\n        content: '';\n        display: block;\n        background-image: url(\"/img/checkmark.svg\");\n        background-repeat: no-repeat;\n        background-size: 100%;\n        width: 10px;\n        height: 8px;\n        -ms-flex: 0 0 10px;\n            flex: 0 0 10px;\n        margin-right: 8px;\n        opacity: 0.5; }\n    #page-pricing .plan-card .addon.selected {\n      background-color: #F0F6FF;\n      border: 1px solid #CDDFFF; }\n  #page-pricing .plan-card .addon-header {\n    display: -ms-flexbox;\n    display: flex;\n    -ms-flex-pack: justify;\n        justify-content: space-between;\n    margin-bottom: 8px; }\n  #page-pricing .plan-card .checkbox-group {\n    font-size: 12px;\n    letter-spacing: 0.08em;\n    text-transform: uppercase;\n    color: #27323F;\n    font-weight: 700; }\n    #page-pricing .plan-card .checkbox-group input {\n      margin-right: 8px; }\n  #page-pricing .plan-card .price--small {\n    font-size: 12px;\n    letter-spacing: -0.01em;\n    color: #92A1B3; }\n    #page-pricing .plan-card .price--small strong {\n      font-size: 16px;\n      font-weight: 600;\n      letter-spacing: -0.01em;\n      color: #2F3A48; }\n  #page-pricing .plan-card .plan-card-clause {\n    padding: 0 28px 28px;\n    color: #73849a;\n    font-size: 13px;\n    letter-spacing: -.01em;\n    margin-top: 20px; }\n    #page-pricing .plan-card .plan-card-clause h5 {\n      font-size: 13px;\n      font-weight: 600;\n      margin-bottom: 2px;\n      margin-top: 0; }\n    #page-pricing .plan-card .plan-card-clause p {\n      margin: 0; }\n    #page-pricing .plan-card .plan-card-clause.highlight {\n      margin-top: 0px; }\n    #page-pricing .plan-card .plan-card-clause.highlight .plan-card-clause__inner {\n      background: #FFF8E2;\n      color: #977300;\n      padding: 17px 18px 14px;\n      border-radius: 8px; }\n  #page-pricing .plan-card--dark .plan-card-clause {\n    color: #ced6e0; }\n  #page-pricing .plan-card .plan-card-btn {\n    transition: background 0.2s;\n    display: block;\n    width: 100%;\n    text-align: center;\n    font-size: 12px;\n    text-align: center;\n    letter-spacing: 0.1em;\n    text-transform: uppercase;\n    font-weight: 700;\n    border-radius: 0px 0px 12px 12px;\n    padding: 24px 0;\n    background-color: #F3F6FC;\n    color: #4D8DFF; }\n    #page-pricing .plan-card .plan-card-btn:hover {\n      background: #e7edf9; }\n    #page-pricing .plan-card .plan-card-btn--primary {\n      color: #fff;\n      background: #3880FF; }\n      #page-pricing .plan-card .plan-card-btn--primary:hover {\n        background: #5290ff; }\n    #page-pricing .plan-card .plan-card-btn--dark {\n      color: #CDDFFF;\n      background: #3D5275; }\n      #page-pricing .plan-card .plan-card-btn--dark:hover {\n        background: #465e86; }\n  #page-pricing .plan-card .addon-cta-toggle {\n    display: none; }\n  #page-pricing .plan-card .addon-cta-toggle--active {\n    display: block; }\n  #page-pricing .plan-card .plan-card-highlight {\n    background: #FFE5DC;\n    border-radius: 8px 8px 0px 0px;\n    font-size: 10px;\n    text-align: center;\n    letter-spacing: 0.16em;\n    text-transform: uppercase;\n    color: #FF9982;\n    font-weight: 700;\n    padding: 4px 0; }\n  #page-pricing .plan-card--dark {\n    background: linear-gradient(180deg, #2B3C5A 0%, #1B2A45 100%);\n    color: #f6f8fb; }\n    #page-pricing .plan-card--dark .plan-card-header h3 {\n      color: #fff; }\n    #page-pricing .plan-card--dark .plan-card-header .price strong,\n    #page-pricing .plan-card--dark .plan-card-body h4 {\n      color: #f6f8fb; }\n    #page-pricing .plan-card--dark .plan-card-header .price {\n      color: #bac9d6; }\n    #page-pricing .plan-card--dark .plan-card-body .features li {\n      color: #E9EDF3; }\n    #page-pricing .plan-card--dark .plan-card-header .type {\n      color: #CED6E0; }\n    #page-pricing .plan-card--dark .plan-card-body .features li::before {\n      background-image: url(\"/img/checkmark-dark-gray.svg\"); }\n    #page-pricing .plan-card--dark .plan-card-body {\n      border-top-color: #334666; }\n\n#page-pricing .plan-cards--studio {\n  max-width: 976px;\n  margin-left: auto;\n  margin-right: auto;\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-pack: center;\n      justify-content: center; }\n  #page-pricing .plan-cards--studio .plan-card h2 {\n    margin-bottom: 0;\n    margin-top: 0;\n    font-size: 28px;\n    line-height: 34px;\n    letter-spacing: -0.02em;\n    color: #020814;\n    font-weight: 600; }\n  #page-pricing .plan-cards--studio .plan-card h4 {\n    color: #020814; }\n  #page-pricing .plan-cards--studio .plan-card p {\n    font-family: \"Inter\", \"Inter UI\", Helvetica, Arial, sans-serif;\n    font-size: 14px;\n    line-height: 24px;\n    letter-spacing: -0.01em;\n    color: #73849A;\n    margin-bottom: 20px; }\n  #page-pricing .plan-cards--studio .plan-card .price {\n    color: #E9EDF3; }\n  #page-pricing .plan-cards--studio .plan-card .plan-card-header {\n    padding-top: 42px;\n    padding-left: 42px;\n    padding-right: 42px; }\n  #page-pricing .plan-cards--studio .plan-card .plan-card-body {\n    padding: 42px 42px 0; }\n    #page-pricing .plan-cards--studio .plan-card .plan-card-body li a {\n      transition: 0.2s opacity;\n      font-weight: 600;\n      color: #fff; }\n      #page-pricing .plan-cards--studio .plan-card .plan-card-body li a:hover {\n        opacity: .8; }\n  #page-pricing .plan-cards--studio .plan-card .plan-card-cta {\n    padding: 42px;\n    text-align: center; }\n  #page-pricing .plan-cards--studio .plan-card .plan-card-cta .btn {\n    transition: 0.2s background;\n    text-transform: uppercase;\n    letter-spacing: 0.08em;\n    font-weight: 700;\n    font-size: 16px;\n    box-shadow: none;\n    border-radius: 8px;\n    padding: 22px 34px 20px; }\n  #page-pricing .plan-cards--studio .plan-card--dark {\n    background: linear-gradient(180deg, #2B3C5A 0%, #1B2A45 100%); }\n    #page-pricing .plan-cards--studio .plan-card--dark h4 {\n      color: #C3D0E0;\n      font-weight: 600; }\n    #page-pricing .plan-cards--studio .plan-card--dark .pill {\n      margin-left: 6px;\n      position: relative;\n      top: -2px; }\n  #page-pricing .plan-cards--studio .plan-card {\n    max-width: 848px; }\n    #page-pricing .plan-cards--studio .plan-card .plan-card-header,\n    #page-pricing .plan-cards--studio .plan-card .plan-card-body {\n      display: -ms-flexbox;\n      display: flex; }\n    #page-pricing .plan-cards--studio .plan-card .plan-card-body ul {\n      -ms-flex: 1;\n          flex: 1; }\n    #page-pricing .plan-cards--studio .plan-card .plan-card-body ul + ul {\n      margin-left: 34px; }\n    #page-pricing .plan-cards--studio .plan-card .plan-card-cta .btn {\n      background: #293D5E;\n      border: 2px solid rgba(152, 172, 207, 0.3);\n      box-shadow: 0px 2px 4px rgba(2, 8, 20, 0.1), 0px 1px 2px rgba(2, 8, 20, 0.08);\n      color: #fff; }\n      #page-pricing .plan-cards--studio .plan-card .plan-card-cta .btn:hover {\n        background: #2e4469; }\n  @media (max-width: 991px) {\n    #page-pricing .plan-cards--studio {\n      -ms-flex-direction: column;\n          flex-direction: column;\n      -ms-flex-align: center;\n          align-items: center; }\n      #page-pricing .plan-cards--studio .plan-card {\n        width: 100%;\n        max-width: 660px !important; }\n      #page-pricing .plan-cards--studio .plan-card:first-child {\n        margin: 0 0 16px;\n        border-top-right-radius: 12px;\n        border-bottom-right-radius: 12px; }\n      #page-pricing .plan-cards--studio .plan-card-cta .btn {\n        display: block;\n        width: 100%; } }\n  @media (max-width: 768px) {\n    #page-pricing .plan-cards--studio .plan-card {\n      max-width: 500px !important; }\n    #page-pricing .plan-cards--studio .plan-card:last-child .plan-card-body {\n      -ms-flex-direction: column;\n          flex-direction: column; }\n      #page-pricing .plan-cards--studio .plan-card:last-child .plan-card-body ul + ul {\n        margin-left: 0;\n        margin-top: 12px; }\n    #page-pricing .plan-cards--studio .plan-card .plan-card-header,\n    #page-pricing .plan-cards--studio .plan-card .plan-card-cta {\n      padding: 32px 28px; }\n    #page-pricing .plan-cards--studio .plan-card .plan-card-body {\n      padding: 32px 28px 0; } }\n\n#page-pricing .plan-card--enterprise,\n#page-pricing .plan-card--community,\n#page-pricing .plan-cards-addons .plan-card > div:first-child {\n  position: relative;\n  overflow: hidden; }\n  #page-pricing .plan-card--enterprise::before,\n  #page-pricing .plan-card--community::before,\n  #page-pricing .plan-cards-addons .plan-card > div:first-child::before {\n    content: '';\n    display: block;\n    width: 100%;\n    height: 8px;\n    top: 0;\n    left: 0; }\n\n#page-pricing .plan-card--community .plan-card-cta {\n  margin-top: 21px; }\n\n#page-pricing .plan-card--community::before {\n  background-color: #4B80F7; }\n\n#page-pricing .plan-card--enterprise::before {\n  background-color: #FF9982; }\n\n#page-pricing .plan-card--enterprise .plan-card-header,\n#page-pricing .plan-card--enterprise .plan-card-body, #page-pricing .plan-card--community .plan-card-header,\n#page-pricing .plan-card--community .plan-card-body {\n  padding: 36px 54px; }\n\n#page-pricing .plan-card--enterprise .plan-card-body, #page-pricing .plan-card--community .plan-card-body {\n  display: -ms-flexbox;\n  display: flex; }\n\n#page-pricing .plan-card--enterprise .plan-card-body ul, #page-pricing .plan-card--community .plan-card-body ul {\n  -ms-flex: 1;\n      flex: 1; }\n  #page-pricing .plan-card--enterprise .plan-card-body ul + ul, #page-pricing .plan-card--community .plan-card-body ul + ul {\n    margin-left: 76px;\n    position: relative; }\n  #page-pricing .plan-card--enterprise .plan-card-body ul + ul::before, #page-pricing .plan-card--community .plan-card-body ul + ul::before {\n    content: '';\n    display: block;\n    position: absolute;\n    top: 40px;\n    left: -39px;\n    width: 2px;\n    height: 336px;\n    background: linear-gradient(270deg, rgba(233, 237, 243, 0) 0%, rgba(233, 237, 243, 0) 0%, rgba(233, 237, 243, 0.8) 51.93%, rgba(233, 237, 243, 0) 100%);\n    opacity: 0.8; }\n  #page-pricing .plan-card--enterprise .plan-card-body ul h5, #page-pricing .plan-card--community .plan-card-body ul h5 {\n    color: #020814; }\n\n#page-pricing .plan-card--enterprise .plan-card-cta, #page-pricing .plan-card--community .plan-card-cta {\n  text-align: center;\n  padding-bottom: 46px;\n  padding-top: 12px; }\n\n#page-pricing .plan-card--enterprise .btn, #page-pricing .plan-card--community .btn {\n  text-transform: uppercase;\n  font-size: 16px;\n  letter-spacing: 0.08em;\n  font-weight: 700;\n  padding: 22px 32px 20px;\n  border-radius: 8px; }\n\n@media (max-width: 768px) {\n  #page-pricing .plan-card--enterprise, #page-pricing .plan-card--community {\n    max-width: 500px;\n    margin-left: auto;\n    margin-right: auto; }\n    #page-pricing .plan-card--enterprise .plan-card-body ul + ul, #page-pricing .plan-card--community .plan-card-body ul + ul {\n      margin-left: 0;\n      margin-top: 24px; }\n      #page-pricing .plan-card--enterprise .plan-card-body ul + ul::before, #page-pricing .plan-card--community .plan-card-body ul + ul::before {\n        display: none; }\n    #page-pricing .plan-card--enterprise .plan-card-header,\n    #page-pricing .plan-card--enterprise .plan-card-cta, #page-pricing .plan-card--community .plan-card-header,\n    #page-pricing .plan-card--community .plan-card-cta {\n      padding: 32px 28px; }\n    #page-pricing .plan-card--enterprise .plan-card-body, #page-pricing .plan-card--community .plan-card-body {\n      -ms-flex-direction: column;\n          flex-direction: column;\n      padding: 32px 28px 0; }\n    #page-pricing .plan-card--enterprise .btn, #page-pricing .plan-card--community .btn {\n      display: block;\n      width: 100%; } }\n\n#page-pricing .addons-header {\n  margin: 160px 0 54px; }\n  #page-pricing .addons-header h2 {\n    font-weight: 600;\n    font-size: 28px;\n    letter-spacing: -0.01em; }\n  @media (max-width: 768px) {\n    #page-pricing .addons-header {\n      margin: 80px 0 36px; } }\n\n#page-pricing .plan-cards-addons {\n  margin-bottom: 180px;\n  display: -ms-flexbox;\n  display: flex; }\n  #page-pricing .plan-cards-addons .plan-card {\n    overflow: hidden;\n    border-radius: 12px;\n    -ms-flex: 1;\n        flex: 1;\n    -ms-flex-align: start;\n        align-items: flex-start;\n    -ms-flex-pack: justify;\n        justify-content: space-between; }\n  #page-pricing .plan-cards-addons .plan-card-header {\n    display: -ms-flexbox;\n    display: flex; }\n    #page-pricing .plan-cards-addons .plan-card-header div {\n      -ms-flex-pack: justify;\n          justify-content: space-between; }\n    #page-pricing .plan-cards-addons .plan-card-header div:first-child {\n      max-width: 316px; }\n    #page-pricing .plan-cards-addons .plan-card-header div + div {\n      margin-left: 72px;\n      -ms-flex: 0 0 auto;\n          flex: 0 0 auto; }\n    #page-pricing .plan-cards-addons .plan-card-header h3 {\n      margin-bottom: 12px; }\n    #page-pricing .plan-cards-addons .plan-card-header h5 {\n      font-size: 12px;\n      letter-spacing: 0.1em;\n      text-transform: uppercase;\n      color: #92A1B3; }\n    #page-pricing .plan-cards-addons .plan-card-header p {\n      line-height: 25px;\n      font-size: 16px;\n      letter-spacing: -0.01em;\n      font-family: \"Inter\", \"Inter UI\", Helvetica, Arial, sans-serif;\n      color: #414D5C; }\n    #page-pricing .plan-cards-addons .plan-card-header .price {\n      font-size: 10px;\n      font-weight: 600;\n      color: #92A1B3; }\n      #page-pricing .plan-cards-addons .plan-card-header .price b {\n        font-size: 20px;\n        letter-spacing: -0.02em;\n        color: #020814;\n        font-weight: 600; }\n  #page-pricing .plan-cards-addons .plan-card-body h6 {\n    font-size: 14px;\n    font-weight: 600;\n    letter-spacing: -0.01em;\n    color: #020814; }\n  #page-pricing .plan-cards-addons .plan-card-cta {\n    text-align: center;\n    padding: 12px 32px 46px;\n    width: 100%; }\n  #page-pricing .plan-cards-addons .btn {\n    text-transform: uppercase;\n    font-size: 12px;\n    letter-spacing: 0.1em;\n    font-weight: 700;\n    padding: 16px 22px 14px;\n    border-radius: 8px; }\n  #page-pricing .plan-cards-addons .plan-card + .plan-card {\n    margin-left: 40px; }\n  #page-pricing .plan-cards-addons .plan-card:first-child > div::before {\n    background-color: #7E87E9; }\n  #page-pricing .plan-cards-addons .plan-card:last-child > div::before {\n    background-color: #88D99E; }\n  @media (max-width: 992px) {\n    #page-pricing .plan-cards-addons .plan-card-header {\n      -ms-flex-direction: column;\n          flex-direction: column;\n      -ms-flex-pack: start;\n          justify-content: flex-start; }\n    #page-pricing .plan-cards-addons .plan-card-header > div + div {\n      margin-left: 0; }\n    #page-pricing .plan-cards-addons .plan-card + .plan-card {\n      margin-left: 20px; } }\n  @media (max-width: 768px) {\n    #page-pricing .plan-cards-addons {\n      margin-bottom: 80px;\n      -ms-flex-direction: column;\n          flex-direction: column; }\n      #page-pricing .plan-cards-addons .plan-card {\n        max-width: 500px;\n        width: 100%;\n        margin-left: auto !important;\n        margin-right: auto !important; }\n      #page-pricing .plan-cards-addons .plan-card + .plan-card {\n        margin-left: 0px;\n        margin-top: 20px; }\n      #page-pricing .plan-cards-addons .plan-card-cta {\n        padding: 12px 32px 32px; }\n      #page-pricing .plan-cards-addons .plan-card .btn {\n        display: block;\n        width: 100%; } }\n\n#page-pricing table,\n#page-pricing .table {\n  margin-bottom: 0;\n  min-width: 800px; }\n\n#page-pricing thead tr td:first-child,\n#page-pricing thead tr th:first-child,\n#page-pricing tbody tr td:first-child,\n#page-pricing tbody tr th:first-child {\n  padding-left: 36px; }\n\n#page-pricing thead tr td:last-child,\n#page-pricing thead tr th:last-child,\n#page-pricing tbody tr td:last-child,\n#page-pricing tbody tr th:last-child {\n  padding-right: 36px; }\n\n#page-pricing thead th,\n#page-pricing tbody td {\n  width: 20%; }\n\n#page-pricing thead th, #page-pricing thead td {\n  background: #fff;\n  border-bottom: 1px solid rgba(232, 235, 241, 0.6);\n  padding-top: 32px;\n  padding-bottom: 30px;\n  vertical-align: bottom; }\n\n#page-pricing thead th {\n  text-align: center; }\n  #page-pricing thead th h2 {\n    margin-bottom: 3px; }\n\n#page-pricing thead .eyebrow {\n  font-size: 10px;\n  color: #94a0b7;\n  text-transform: uppercase;\n  letter-spacing: 0.05em;\n  font-weight: 700;\n  margin-bottom: 4px;\n  display: inline-block; }\n\n#page-pricing thead h2 {\n  font-size: 20px;\n  font-weight: 700;\n  margin: 0;\n  letter-spacing: -0.01em;\n  color: #020814; }\n\n#page-pricing thead .price {\n  font-weight: 600;\n  font-size: 12px;\n  line-height: 20px;\n  color: #5B708B; }\n  #page-pricing thead .price strong {\n    font-size: 16px;\n    font-weight: 600; }\n\n#page-pricing thead .btn {\n  margin-top: 8px; }\n\n#page-pricing thead .btn--primary {\n  background: #3880FF;\n  color: #fff; }\n  #page-pricing thead .btn--primary:hover {\n    background: #478aff; }\n\n#page-pricing thead .btn--dark {\n  background: #213049;\n  color: #CDDFFF;\n  border: 0; }\n  #page-pricing thead .btn--dark:hover {\n    background: #31476c; }\n\n#page-pricing thead .plan-wrap {\n  display: inline-block;\n  text-align: left;\n  border: 0; }\n\n#page-pricing tbody th,\n#page-pricing tbody td {\n  padding-top: 14px;\n  padding-bottom: 14px;\n  padding-left: 16px;\n  padding-right: 16px; }\n\n#page-pricing tbody .pill {\n  margin-top: -2px;\n  margin-left: 2px;\n  background: none; }\n  #page-pricing tbody .pill--blue {\n    margin-left: 8px; }\n\n#page-pricing tbody tr.combined th, #page-pricing tbody tr.combined td {\n  padding-top: 45px;\n  padding-bottom: 22px; }\n\n#page-pricing tbody tr.combined th {\n  font-size: 16px;\n  line-height: 22px;\n  font-weight: 700;\n  color: #333; }\n\n#page-pricing tbody th {\n  font-weight: 400;\n  vertical-align: middle;\n  border: 0; }\n  #page-pricing tbody th[colspan=\"4\"] span {\n    display: inline-block;\n    font-size: 16px;\n    line-height: 22px;\n    font-weight: 600;\n    color: #020814;\n    border-top: none;\n    padding-top: 30px;\n    padding-bottom: 8px; }\n  #page-pricing tbody th:not([colspan=\"4\"]) {\n    font-family: \"Inter\", \"Inter UI\", Helvetica, Arial, sans-serif;\n    color: #4E5B6A; }\n  #page-pricing tbody th strong {\n    font-size: 14px;\n    font-weight: 600;\n    display: block;\n    color: #565c67; }\n    #page-pricing tbody th strong b {\n      font-weight: 600;\n      color: #171a20; }\n    #page-pricing tbody th strong b a {\n      transition: border 0.3s;\n      display: inline-block;\n      color: #171a20;\n      border-bottom: 1px solid rgba(23, 26, 32, 0.2);\n      line-height: 1; }\n    #page-pricing tbody th strong b a:hover {\n      border-bottom: 1px solid rgba(23, 26, 32, 0.7); }\n  #page-pricing tbody th a {\n    display: block;\n    font-weight: 600; }\n  #page-pricing tbody th span {\n    font-size: 12px;\n    font-weight: 500;\n    color: #999; }\n\n#page-pricing tbody td,\n#page-pricing tbody th {\n  background: #fff; }\n\n#page-pricing tbody .stripe td,\n#page-pricing tbody .stripe th {\n  background: #f8f9fb; }\n\n#page-pricing tbody .small td,\n#page-pricing tbody .small th {\n  border-bottom: 1px solid #E9EDF3;\n  padding-top: 6px;\n  padding-bottom: 6px; }\n\n#page-pricing tbody .small th:first-child {\n  color: #73849A;\n  position: relative; }\n\n#page-pricing tbody .small .check:before {\n  font-size: 12px; }\n\n#page-pricing tbody td {\n  vertical-align: middle;\n  text-align: center;\n  font-weight: 400;\n  border: 0;\n  font-size: 13px;\n  color: #4E5B6A;\n  font-family: \"Inter\", \"Inter UI\", Helvetica, Arial, sans-serif; }\n\n#page-pricing tbody .dash:before {\n  content: '\\2014';\n  color: #c3ccdb; }\n\n#page-pricing tbody .check:before {\n  font-family: 'Ionicons';\n  content: \"\\f2bc\";\n  color: #00d287;\n  font-size: 16px;\n  line-height: 1em; }\n\n#page-pricing tbody tr:last-child td {\n  padding-top: 36px;\n  padding-bottom: 36px; }\n\n#page-pricing tbody .btn {\n  width: 100%; }\n\n#page-pricing tbody .btn.sm {\n  font-size: 12px;\n  letter-spacing: 0.1em; }\n\n#page-pricing tbody .btn.dark {\n  background-color: #213049;\n  color: #CDDFFF; }\n  #page-pricing tbody .btn.dark:hover {\n    background-color: #293c5b; }\n\n#page-pricing .btn-secondary {\n  background-color: #e1efff;\n  color: #3880ff;\n  box-shadow: none; }\n  #page-pricing .btn-secondary:hover {\n    background-color: #eaf3fd; }\n  #page-pricing .btn-secondary:active, #page-pricing .btn-secondary:active:focus, #page-pricing .btn-secondary:active:hover {\n    background-color: #d8eafe; }\n\n#page-pricing .pinned table {\n  padding-top: 140px;\n  display: block; }\n\n#page-pricing .pinned thead {\n  position: fixed;\n  top: 0;\n  left: 0;\n  width: 100%;\n  z-index: 1000; }\n  #page-pricing .pinned thead tr {\n    display: -ms-flexbox;\n    display: flex;\n    width: 100%;\n    max-width: 1110px;\n    margin: 0 auto;\n    padding: 0 15px;\n    position: relative; }\n  #page-pricing .pinned thead td {\n    -ms-flex: 1 0 auto;\n        flex: 1 0 auto;\n    display: -ms-flexbox;\n    display: flex;\n    -ms-flex-direction: column;\n        flex-direction: column;\n    -ms-flex-pack: end;\n        justify-content: flex-end; }\n\n#page-pricing .pinned tbody {\n  display: block; }\n  #page-pricing .pinned tbody tr {\n    display: -ms-flexbox;\n    display: flex;\n    width: 100%; }\n  #page-pricing .pinned tbody th {\n    -ms-flex: 1 0 auto;\n        flex: 1 0 auto; }\n\n#page-pricing .pinned-at-point thead {\n  position: absolute; }\n  #page-pricing .pinned-at-point thead tr {\n    padding: 0; }\n\n@media (max-width: 830px) {\n  #page-pricing thead tr td:first-child,\n  #page-pricing thead tr th:first-child,\n  #page-pricing tbody tr td:first-child,\n  #page-pricing tbody tr th:first-child {\n    padding-left: 16px; }\n  #page-pricing thead tr td:last-child,\n  #page-pricing thead tr th:last-child,\n  #page-pricing tbody tr td:last-child,\n  #page-pricing tbody tr th:last-child {\n    padding-right: 16px; }\n  #page-pricing .btn.sm {\n    font-size: 12px; }\n  #page-pricing thead th,\n  #page-pricing thead td {\n    padding-top: 24px;\n    padding-bottom: 18px; }\n  #page-pricing tbody th[colspan=\"4\"] span {\n    padding-top: 8px;\n    padding-bottom: 0; }\n  #page-pricing .box,\n  #page-pricing .table-wrap,\n  #page-pricing table,\n  #page-pricing .table {\n    overflow: hidden; }\n  #page-pricing thead {\n    position: relative;\n    display: block;\n    /*seperates the header from the body allowing it to be positioned*/\n    width: 800px;\n    overflow: visible; }\n    #page-pricing thead td,\n    #page-pricing thead th {\n      height: 118px;\n      padding-left: 16px;\n      padding-right: 16px; }\n    #page-pricing thead td {\n      /*first cell in the header*/\n      position: relative;\n      display: block;\n      /*seperates the first cell in the header from the header*/\n      display: -ms-flexbox;\n      display: flex;\n      -ms-flex-direction: column;\n          flex-direction: column;\n      -ms-flex-pack: end;\n          justify-content: flex-end; }\n  #page-pricing tbody {\n    height: calc(100vh - 100px - 118px);\n    position: relative;\n    display: block;\n    /*seperates the tbody from the header*/\n    width: calc(100vw);\n    overflow: scroll;\n    -webkit-overflow-scrolling: touch; }\n  #page-pricing thead tr,\n  #page-pricing tbody tr {\n    display: -ms-flexbox;\n    display: flex; }\n  #page-pricing thead th,\n  #page-pricing tbody td {\n    -ms-flex: 0 0 204px;\n        flex: 0 0 204px; }\n  #page-pricing thead td,\n  #page-pricing tbody th {\n    -ms-flex: 0 0 120px;\n        flex: 0 0 120px;\n    border-right: 1px solid rgba(232, 235, 241, 0.6); }\n  #page-pricing tbody th[colspan=\"4\"] span,\n  #page-pricing tbody th strong,\n  #page-pricing tbody tr.combined th {\n    font-size: 13px;\n    line-height: 18px; }\n  #page-pricing tbody tr.combined th, #page-pricing tbody tr.combined td {\n    padding-top: 22px;\n    padding-bottom: 14px; }\n  #page-pricing tbody tr th {\n    /*the first cell in each tr*/\n    position: relative;\n    display: block;\n    /*seperates the first column from the tbody*/ }\n  #page-pricing tbody tr:last-child th {\n    height: 110px; } }\n\n#page-pricing {\n  font-family: \"Eina\", \"Helvetica Neue\", Helvetica, sans-serif;\n  padding-top: 0; }\n  #page-pricing .navbar {\n    position: relative; }\n  #page-pricing main {\n    padding: 30px 0; }\n  #page-pricing .promo-simple {\n    font-family: \"Eina\", \"Helvetica Neue\", Helvetica, sans-serif;\n    padding-top: 64px;\n    padding-bottom: 64px;\n    background-color: #f3f5f9;\n    position: relative;\n    text-align: center; }\n    #page-pricing .promo-simple .container ionic-quick-signup {\n      margin: auto;\n      width: 480px; }\n  #page-pricing .cta {\n    background-color: #F6F8FB;\n    box-shadow: inset 0px -2px 9px rgba(0, 0, 0, 0.02); }\n    #page-pricing .cta .container {\n      padding-bottom: 15px; }\n    #page-pricing .cta hgroup {\n      padding-top: 54px;\n      max-width: 720px; }\n    #page-pricing .cta h5 {\n      line-height: 25px;\n      font-size: 12px;\n      font-family: \"Roboto Mono\", Menlo, Monaco, Consolas, \"Courier New\", monospace;\n      color: #92A1B3;\n      text-transform: uppercase;\n      letter-spacing: 0.14em;\n      margin-bottom: 28px; }\n    #page-pricing .cta h1 {\n      font-size: 56px;\n      font-weight: 700;\n      color: #171a20;\n      margin-bottom: 8px;\n      letter-spacing: -0.02em; }\n    #page-pricing .cta p {\n      line-height: 32px;\n      font-size: 22px;\n      color: #5B708B;\n      font-weight: 400;\n      letter-spacing: -0.01em;\n      margin-bottom: 64px; }\n    #page-pricing .cta p b {\n      font-weight: 700;\n      color: #272a2f; }\n  #page-pricing .rounded-tabs {\n    -ms-flex-pack: center;\n        justify-content: center; }\n    #page-pricing .rounded-tabs .rounded-tabs__tab-inner {\n      color: #92A1B3;\n      transition: color 0.2s; }\n    #page-pricing .rounded-tabs .rounded-tabs__tab:hover .rounded-tabs__tab-inner {\n      color: #2E4C73; }\n    #page-pricing .rounded-tabs .rounded-tabs__tab--active .rounded-tabs__tab-inner {\n      color: #4D8DFF; }\n  @media (max-width: 767px) {\n    #page-pricing .rounded-tabs__tab--active {\n      border-bottom-color: rgba(46, 76, 115, 0.6); } }\n  #page-pricing .section-header {\n    font-size: 26px;\n    line-height: 38px;\n    text-align: center;\n    letter-spacing: -0.01em;\n    font-weight: 400;\n    color: #5B708B;\n    text-align: center;\n    margin: 74px 0 74px; }\n    @media (max-width: 768px) {\n      #page-pricing .section-header {\n        margin: 60px auto 60px;\n        max-width: 500px; } }\n    #page-pricing .section-header a {\n      color: #4D8DFF;\n      transition: border 0.3s;\n      border-bottom: 1px solid transparent; }\n    #page-pricing .section-header a:hover {\n      color: #4D8DFF;\n      border-bottom: 1px solid rgba(77, 141, 255, 0.5); }\n  #page-pricing .container {\n    max-width: 1110px;\n    width: 100% !important; }\n  #page-pricing main {\n    padding-bottom: 170px; }\n    @media (max-width: 768px) {\n      #page-pricing main {\n        padding-bottom: 90px; } }\n    #page-pricing main .toggle {\n      display: -ms-flexbox;\n      display: flex;\n      -ms-flex-align: center;\n          align-items: center;\n      -ms-flex-pack: center;\n          justify-content: center;\n      padding-bottom: 40px; }\n      #page-pricing main .toggle span {\n        transition: color 0.3s, background 0.3s;\n        font-size: 10px;\n        text-transform: uppercase;\n        color: #97a4ba;\n        background-color: #fff;\n        letter-spacing: 0.08em;\n        font-weight: 700;\n        border-radius: 30px;\n        padding: 5px 13px;\n        display: inline-block;\n        text-align: center; }\n      #page-pricing main .toggle span:hover {\n        cursor: pointer;\n        background-color: #ecf1fb;\n        color: #7398d8; }\n      #page-pricing main .toggle span + span {\n        margin-left: 6px; }\n      #page-pricing main .toggle span b {\n        opacity: 0.5; }\n      #page-pricing main .toggle .active,\n      #page-pricing main .toggle .active:hover {\n        cursor: default;\n        background-color: #fff;\n        box-shadow: 0px 2px 4px rgba(2, 8, 20, 0.1), 0px 0px 3px rgba(2, 8, 20, 0.08);\n        color: #639CFF; }\n  #page-pricing .logos {\n    display: -ms-flexbox;\n    display: flex;\n    -ms-flex-pack: justify;\n        justify-content: space-between;\n    -ms-flex-align: center;\n        align-items: center;\n    margin-top: 60px; }\n    #page-pricing .logos [class^=\"logo\"] {\n      background-image: url(\"/img/pricing/enterprise-logos-v3.png\");\n      background-size: 76px 198px;\n      background-repeat: no-repeat;\n      -ms-flex: 0 0 auto;\n          flex: 0 0 auto; }\n    #page-pricing .logos .logo--ge {\n      background-position: -1px -1px;\n      width: 34px;\n      height: 34px; }\n    #page-pricing .logos .logo--verizon {\n      background-position: 0 -37px;\n      width: 74px;\n      height: 16px; }\n    #page-pricing .logos .logo--comcast {\n      background-position: 0 -55px;\n      width: 76px;\n      height: 20px; }\n    #page-pricing .logos .logo--panera {\n      background-position: 0 -77px;\n      width: 76px;\n      height: 26px; }\n    #page-pricing .logos .logo--mastercard {\n      background-position: 0 -105px;\n      width: 52px;\n      height: 30px; }\n    #page-pricing .logos .logo--usaa {\n      background-position: 0 -137px;\n      width: 30px;\n      height: 34px; }\n    #page-pricing .logos .logo--amtrak {\n      background-position: 0 -173px;\n      width: 62px;\n      height: 25px; }\n    @media (max-width: 768px) {\n      #page-pricing .logos {\n        -ms-flex-pack: center;\n            justify-content: center;\n        -ms-flex-wrap: wrap;\n            flex-wrap: wrap;\n        margin-top: 40px;\n        margin-bottom: -20px; }\n        #page-pricing .logos [class^=\"logo\"] {\n          margin: 20px; } }\n  #page-pricing .soon {\n    margin-bottom: 6px;\n    text-align: center;\n    border-bottom: 1px solid #eee;\n    padding-top: 0; }\n    #page-pricing .soon .badge {\n      position: relative;\n      display: inline-block;\n      bottom: -14px; }\n  #page-pricing .pill {\n    font-family: \"Inter\", \"Inter UI\", Helvetica, Arial, sans-serif;\n    font-weight: 600;\n    border: 1px solid #DEE3EA;\n    border-radius: 24px;\n    font-size: 8px !important;\n    text-align: center;\n    letter-spacing: 0.1em;\n    text-transform: uppercase;\n    padding: 4px 5px 3px;\n    background: #FAFBFD;\n    color: #B2BECD; }\n    #page-pricing .pill--indigo {\n      background: none;\n      color: #7CABFF;\n      border: 1px solid #B2CEFF;\n      padding: 4px 7px 3px; }\n    #page-pricing .pill--aqua {\n      background: none;\n      color: #ACD8FB;\n      border: 1px solid #78B8F8;\n      padding: 4px 7px 3px; }\n  #page-pricing .badge {\n    background: #4a8bfc;\n    color: white;\n    font-size: 80%;\n    font-weight: 600;\n    padding-top: 5px;\n    vertical-align: 2px; }\n  #page-pricing .box {\n    margin-top: 30px;\n    border-radius: 16px;\n    background-color: white;\n    font-family: \"Eina\", \"Helvetica Neue\", Helvetica, sans-serif;\n    overflow: hidden; }\n  #page-pricing .table-wrap {\n    position: relative;\n    overflow-x: auto; }\n    #page-pricing .table-wrap tippy .tip.right {\n      top: -60px; }\n  #page-pricing .features h5 {\n    font-weight: bold;\n    font-size: 14px;\n    letter-spacing: 0.1em;\n    text-transform: uppercase;\n    color: #FFFFFF; }\n  #page-pricing .features li {\n    font-family: \"Inter\", \"Inter UI\", Helvetica, Arial, sans-serif;\n    font-size: 16px;\n    letter-spacing: -0.01em;\n    color: #414D5C;\n    padding: 10px 0; }\n    #page-pricing .features li:before {\n      content: '';\n      display: inline-block;\n      background-image: url(\"/img/checkmark-light-gray.svg\");\n      background-repeat: no-repeat;\n      background-size: 100%;\n      width: 24px;\n      height: 24px;\n      margin-right: 12px;\n      margin-bottom: -6px; }\n    @media (max-width: 992px) {\n      #page-pricing .features li::before {\n        position: relative;\n        top: 2px;\n        width: 18px;\n        height: 18px;\n        -ms-flex: 0 0 18px;\n            flex: 0 0 18px; } }\n  #page-pricing main hgroup:not(.feature-lists__heading) {\n    text-align: center; }\n    #page-pricing main hgroup:not(.feature-lists__heading) h4 {\n      text-transform: uppercase;\n      font-weight: 700;\n      font-size: 16px;\n      letter-spacing: .1em;\n      margin-top: 32px;\n      color: #999; }\n    #page-pricing main hgroup:not(.feature-lists__heading) h3 {\n      font-weight: 600;\n      max-width: 975px;\n      margin: 32px auto 16px;\n      font-size: 24px;\n      line-height: 1.8em; }\n  #page-pricing .btn.sm {\n    text-transform: uppercase;\n    font-size: 13px;\n    letter-spacing: 0.05em;\n    font-weight: 700; }\n  #page-pricing .comparison {\n    padding-top: 115px; }\n    @media (max-width: 768px) {\n      #page-pricing .comparison {\n        padding-top: 100px; } }\n    @media (max-width: 830px) {\n      #page-pricing .comparison {\n        padding-left: 0;\n        padding-right: 0; }\n        #page-pricing .comparison h3 {\n          padding: 0 16px; } }\n  #page-pricing .faq .container > h3,\n  #page-pricing .comparison > h3 {\n    font-weight: 600;\n    letter-spacing: -0.03em;\n    font-size: 28px; }\n  #page-pricing .also .container > h3 {\n    font-weight: 600;\n    letter-spacing: -0.03em;\n    font-size: 36px; }\n  #page-pricing .offwhite-bg {\n    background: linear-gradient(180deg, #F6F8FB 0%, #FFFFFF 100%); }\n  #page-pricing .also h4,\n  #page-pricing .faq h4,\n  #page-pricing .benefits h4 {\n    font-weight: 600;\n    line-height: 28px;\n    font-size: 20px;\n    letter-spacing: -0.01em;\n    margin-bottom: 8px;\n    color: #000000; }\n  #page-pricing .also p,\n  #page-pricing .faq p,\n  #page-pricing .benefits p {\n    font-family: \"Inter\", \"Inter UI\", Helvetica, Arial, sans-serif;\n    line-height: 26px;\n    font-size: 16px;\n    letter-spacing: -0.01em;\n    color: #73849A;\n    font-weight: 400; }\n    #page-pricing .also p strong,\n    #page-pricing .faq p strong,\n    #page-pricing .benefits p strong {\n      color: #24282e; }\n    #page-pricing .also p code,\n    #page-pricing .faq p code,\n    #page-pricing .benefits p code {\n      font-family: \"Roboto Mono\", Menlo, Monaco, Consolas, \"Courier New\", monospace;\n      background: none;\n      color: #8582FB;\n      padding: 0;\n      font-size: 14px;\n      border-radius: 0;\n      font-weight: 700; }\n  #page-pricing .also {\n    border-left: 0;\n    border-right: 0;\n    padding: 0 0 200px; }\n    #page-pricing .also ul {\n      padding: 0;\n      list-style-type: none;\n      display: -ms-flexbox;\n      display: flex;\n      -ms-flex-wrap: wrap;\n          flex-wrap: wrap;\n      margin: 48px -48px -48px; }\n    #page-pricing .also li {\n      -ms-flex: 0 0 33%;\n          flex: 0 0 33%;\n      padding: 0 48px 48px; }\n    #page-pricing .also .pill {\n      position: relative;\n      top: -3px;\n      margin-left: 5px; }\n    @media (max-width: 992px) {\n      #page-pricing .also {\n        padding-bottom: 100px; }\n        #page-pricing .also li {\n          -ms-flex: 0 0 50%;\n              flex: 0 0 50%; } }\n    @media (max-width: 768px) {\n      #page-pricing .also ul {\n        margin: 24px -24px -24px; }\n      #page-pricing .also li {\n        padding: 0 24px 24px; } }\n    @media (max-width: 480px) {\n      #page-pricing .also li {\n        -ms-flex: 0 0 100%;\n            flex: 0 0 100%; } }\n  #page-pricing .faq {\n    padding-top: 200px;\n    padding-bottom: 200px; }\n    #page-pricing .faq .items {\n      display: -ms-flexbox;\n      display: flex; }\n    #page-pricing .faq ul {\n      -ms-flex: 1;\n          flex: 1;\n      margin: 0 auto;\n      padding-top: 49px;\n      padding-left: 0; }\n    #page-pricing .faq ul + ul {\n      padding-left: 100px; }\n    #page-pricing .faq li {\n      display: block;\n      list-style: none; }\n    #page-pricing .faq li + li {\n      padding-top: 40px; }\n    #page-pricing .faq h4 {\n      line-height: 28px; }\n    #page-pricing .faq p {\n      line-height: 28px; }\n    @media (max-width: 992px) {\n      #page-pricing .faq {\n        padding-top: 100px;\n        padding-bottom: 100px; } }\n    @media (max-width: 768px) {\n      #page-pricing .faq li + li {\n        padding-top: 40px; } }\n    @media (max-width: 768px) {\n      #page-pricing .faq .items {\n        -ms-flex-direction: column;\n            flex-direction: column; }\n      #page-pricing .faq ul + ul {\n        padding-left: 0; }\n      #page-pricing .faq ul,\n      #page-pricing .faq li + li {\n        padding-top: 24px; } }\n  #page-pricing .benefits {\n    margin: 100px 0 160px; }\n    #page-pricing .benefits ul {\n      list-style-type: none;\n      margin: 0;\n      padding: 0;\n      display: -ms-flexbox;\n      display: flex; }\n    #page-pricing .benefits li {\n      -ms-flex: 1;\n          flex: 1; }\n    #page-pricing .benefits li + li {\n      margin-left: 76px; }\n    #page-pricing .benefits svg {\n      margin-bottom: 8px; }\n    @media (max-width: 768px) {\n      #page-pricing .benefits {\n        margin: 80px 0 80px; }\n        #page-pricing .benefits ul {\n          -ms-flex-direction: column;\n              flex-direction: column;\n          -ms-flex-align: center;\n              align-items: center; }\n        #page-pricing .benefits li {\n          text-align: center;\n          max-width: 540px; }\n        #page-pricing .benefits li + li {\n          margin-left: 0;\n          margin-top: 36px; } }\n  #page-pricing .form-wrapper.offwhite-bg {\n    padding-top: 160px; }\n  #page-pricing .form-wrapper .container {\n    max-width: 756px; }\n  #page-pricing .form-wrapper hgroup {\n    margin-bottom: 20px; }\n    #page-pricing .form-wrapper hgroup h2 {\n      font-weight: 600;\n      line-height: 1.2;\n      font-size: 28px;\n      letter-spacing: -0.01em;\n      color: #000000;\n      margin-bottom: 0; }\n    #page-pricing .form-wrapper hgroup p {\n      margin-top: 6px;\n      line-height: 28px;\n      font-size: 22px;\n      text-align: center;\n      letter-spacing: -0.01em;\n      font-weight: 400;\n      color: #5B708B; }\n  @media (max-width: 768px) {\n    #page-pricing .form-wrapper.offwhite-bg {\n      padding-top: 80px; } }\n  #page-pricing .modal hgroup {\n    padding-top: 18px;\n    padding-bottom: 32px; }\n  #page-pricing .modal h3 {\n    font-size: 29px;\n    font-weight: 600;\n    color: #171a20;\n    margin: 18px 0 8px;\n    letter-spacing: -0.03em; }\n  #page-pricing .modal p {\n    font-size: 18px;\n    line-height: 28px;\n    color: #4c576c;\n    max-width: 400px;\n    margin: 0 auto; }\n  #page-pricing .modal form {\n    max-width: 100%;\n    padding: 0 15px 15px; }\n  #page-pricing .modal .hs_submit {\n    text-align: center;\n    font-weight: 600; }\n\n/*# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImluZGV4LmNzcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtFQUNFLHFCQUFjO0VBQWQsY0FBYztFQUNkLHNCQUF3QjtNQUF4Qix3QkFBd0I7RUFDeEIsb0JBQWdCO01BQWhCLGdCQUFnQixFQUFFO0VBQ2xCO0lBQ0UsY0FBYyxFQUFFO0VBQ2xCO0lBQ0Usb0JBQWdCO1FBQWhCLGdCQUFnQjtJQUNoQixxQkFBYztJQUFkLGNBQWM7SUFDZCwyQkFBdUI7UUFBdkIsdUJBQXVCLEVBQUU7RUFDM0I7SUFDRSxpQkFBaUI7SUFDakIsb0JBQW9CO0lBQ3BCLG9CQUFvQixFQUFFO0lBQ3RCO01BQ0UsZ0JBQWdCO01BQ2hCLGtCQUFrQjtNQUNsQix3QkFBd0I7TUFDeEIsZUFBZSxFQUFFO0lBQ25CO01BQ0UsZ0JBQWdCO01BQ2hCLGtCQUFrQjtNQUNsQix3QkFBd0I7TUFDeEIsZUFBZSxFQUFFO01BQ2pCO1FBQ0UsZUFBZSxFQUFFO0VBQ3ZCO0lBQ0UsaUJBQWlCO0lBQ2pCLGtCQUFrQixFQUFFO0lBQ3BCO01BQ0UsZ0JBQWdCO01BQ2hCLGtCQUFrQjtNQUNsQix3QkFBd0I7TUFDeEIsZUFBZTtNQUNmLG1CQUFtQjtNQUNuQiwwQkFBMEI7TUFDMUIsaUNBQWlDLEVBQUU7TUFDbkM7UUFDRSxvQkFBb0IsRUFBRTtNQUN4QjtRQUNFLG9QQUFvUDtRQUNwUCxtQkFBbUI7UUFDbkIsUUFBUTtRQUNSLHNCQUFzQjtRQUN0QixhQUFhO1FBQ2IsWUFBWTtRQUNaLFlBQVk7UUFDWixjQUFjLEVBQUU7TUFDbEI7UUFDRSxpQkFBaUI7UUFDakIsMkJBQTJCLEVBQUU7RUFDbkM7SUFDRSwyQkFBa0I7UUFBbEIsMEJBQWtCO1FBQWxCLGtCQUFrQjtJQUNsQixpQkFBaUIsRUFBRTs7QUFFdkI7RUFDRSxxQkFBYztFQUFkLGNBQWMsRUFBRTtFQUNoQjtJQUNFLGVBQWUsRUFBRTtJQUNqQjtNQUNFO1FBQ0UsVUFBVSxFQUFFLEVBQUU7RUFDcEI7SUFDRSxrQkFBa0IsRUFBRTtFQUN0QjtJQUNFO01BQ0Usa0JBQWtCLEVBQUUsRUFBRTtFQUMxQjtJQUNFO01BQ0UsMkJBQXVCO1VBQXZCLHVCQUF1QjtNQUN2Qix1QkFBb0I7VUFBcEIsb0JBQW9CLEVBQUU7TUFDdEI7UUFDRSxZQUFZO1FBQ1osaUJBQWlCLEVBQUU7TUFDckI7UUFDRSxlQUFlO1FBQ2YsaUJBQWlCLEVBQUUsRUFBRTs7QUFFN0I7RUFDRSxZQUFRO01BQVIsUUFBUTtFQUNSLG9CQUFvQjtFQUNwQixrQkFBa0I7RUFDbEIsOEVBQThFO0VBQzlFLHFCQUFjO0VBQWQsY0FBYztFQUNkLDJCQUF1QjtNQUF2Qix1QkFBdUI7RUFDdkIsdUJBQStCO01BQS9CLCtCQUErQixFQUFFO0VBQ2pDO0lBQ0UsNEJBQTRCLEVBQUU7RUFDaEM7O0lBRUUsbUJBQW1CLEVBQUU7RUFDdkI7SUFDRSxvQkFBb0IsRUFBRTtFQUN4QjtJQUNFLHdCQUF3QixFQUFFO0lBQzFCO01BQ0UsY0FBYztNQUNkLG9CQUFvQjtNQUNwQixnQkFBZ0I7TUFDaEIsZUFBZSxFQUFFO0lBQ25CO01BQ0UsZUFBZTtNQUNmLGdCQUFnQjtNQUNoQixlQUFlO01BQ2YsbUJBQW1CLEVBQUU7SUFDdkI7TUFDRSxnQkFBZ0I7TUFDaEIsZUFBZTtNQUNmLGlCQUFpQjtNQUNqQixtQkFBbUIsRUFBRTtJQUN2Qjs7TUFFRSxzQkFBc0IsRUFBRTtJQUMxQjtNQUNFLDBCQUEwQjtNQUMxQix1QkFBdUI7TUFDdkIsZ0JBQWdCLEVBQUU7SUFDcEI7TUFDRSxnQkFBZ0I7TUFDaEIsd0JBQXdCO01BQ3hCLGVBQWUsRUFBRTtFQUNyQjtJQUNFLHFCQUFjO0lBQWQsY0FBYztJQUNkLHVCQUErQjtRQUEvQiwrQkFBK0IsRUFBRTtJQUNqQzs7TUFFRSxpQkFBaUIsRUFBRTtJQUNyQjtNQUNFLGlCQUFpQixFQUFFO0lBQ3JCO01BQ0UsY0FBYztNQUNkLGdCQUFnQjtNQUNoQix3QkFBd0I7TUFDeEIsaUJBQWlCO01BQ2pCLGVBQWUsRUFBRTtJQUNuQjtNQUNFLHFCQUFjO01BQWQsY0FBYztNQUNkLG9CQUFzQjtVQUF0QixzQkFBc0IsRUFBRTtJQUMxQjtNQUNFLGdCQUFnQjtNQUNoQix3QkFBd0I7TUFDeEIsaUJBQWlCO01BQ2pCLGVBQWUsRUFBRTtJQUNuQjtNQUNFO1FBQ0UsMkJBQXVCO1lBQXZCLHVCQUF1QixFQUFFO1FBQ3pCO1VBQ0UsZ0JBQWdCLEVBQUUsRUFBRTtFQUM1QjtJQUNFLDhCQUE4QixFQUFFO0lBQ2hDO01BQ0UsVUFBVTtNQUNWLFdBQVc7TUFDWCxzQkFBc0IsRUFBRTtJQUMxQjtNQUNFLGlCQUFpQjtNQUNqQixlQUFlO01BQ2YsZ0JBQWdCO01BQ2hCLHdCQUF3QjtNQUN4QixlQUFlO01BQ2Ysb0JBQW9CO01BQ3BCLGNBQWMsRUFBRTtFQUNwQjtJQUNFLHlDQUF5QztJQUN6QyxlQUFlO0lBQ2YsMEJBQTBCO0lBQzFCLG1CQUFtQjtJQUNuQixjQUFjO0lBQ2QsaUJBQWlCO0lBQ2pCLGdCQUFnQixFQUFFO0lBQ2xCO01BQ0UscUJBQWM7TUFBZCxjQUFjO01BQ2QsdUJBQW9CO1VBQXBCLG9CQUFvQjtNQUNwQixlQUFlO01BQ2YsaUJBQWlCO01BQ2pCLCtEQUErRCxFQUFFO01BQ2pFO1FBQ0UsZ0JBQWdCLEVBQUU7TUFDcEI7UUFDRSxZQUFZO1FBQ1osZUFBZTtRQUNmLDRDQUE0QztRQUM1Qyw2QkFBNkI7UUFDN0Isc0JBQXNCO1FBQ3RCLFlBQVk7UUFDWixZQUFZO1FBQ1osbUJBQWU7WUFBZixlQUFlO1FBQ2Ysa0JBQWtCO1FBQ2xCLGFBQWEsRUFBRTtJQUNuQjtNQUNFLDBCQUEwQjtNQUMxQiwwQkFBMEIsRUFBRTtFQUNoQztJQUNFLHFCQUFjO0lBQWQsY0FBYztJQUNkLHVCQUErQjtRQUEvQiwrQkFBK0I7SUFDL0IsbUJBQW1CLEVBQUU7RUFDdkI7SUFDRSxnQkFBZ0I7SUFDaEIsdUJBQXVCO0lBQ3ZCLDBCQUEwQjtJQUMxQixlQUFlO0lBQ2YsaUJBQWlCLEVBQUU7SUFDbkI7TUFDRSxrQkFBa0IsRUFBRTtFQUN4QjtJQUNFLGdCQUFnQjtJQUNoQix3QkFBd0I7SUFDeEIsZUFBZSxFQUFFO0lBQ2pCO01BQ0UsZ0JBQWdCO01BQ2hCLGlCQUFpQjtNQUNqQix3QkFBd0I7TUFDeEIsZUFBZSxFQUFFO0VBQ3JCO0lBQ0UscUJBQXFCO0lBQ3JCLGVBQWU7SUFDZixnQkFBZ0I7SUFDaEIsdUJBQXVCO0lBQ3ZCLGlCQUFpQixFQUFFO0lBQ25CO01BQ0UsZ0JBQWdCO01BQ2hCLGlCQUFpQjtNQUNqQixtQkFBbUI7TUFDbkIsY0FBYyxFQUFFO0lBQ2xCO01BQ0UsVUFBVSxFQUFFO0lBQ2Q7TUFDRSxnQkFBZ0IsRUFBRTtJQUNwQjtNQUNFLG9CQUFvQjtNQUNwQixlQUFlO01BQ2Ysd0JBQXdCO01BQ3hCLG1CQUFtQixFQUFFO0VBQ3pCO0lBQ0UsZUFBZSxFQUFFO0VBQ25CO0lBQ0UsNEJBQTRCO0lBQzVCLGVBQWU7SUFDZixZQUFZO0lBQ1osbUJBQW1CO0lBQ25CLGdCQUFnQjtJQUNoQixtQkFBbUI7SUFDbkIsc0JBQXNCO0lBQ3RCLDBCQUEwQjtJQUMxQixpQkFBaUI7SUFDakIsaUNBQWlDO0lBQ2pDLGdCQUFnQjtJQUNoQiwwQkFBMEI7SUFDMUIsZUFBZSxFQUFFO0lBQ2pCO01BQ0Usb0JBQW9CLEVBQUU7SUFDeEI7TUFDRSxZQUFZO01BQ1osb0JBQW9CLEVBQUU7TUFDdEI7UUFDRSxvQkFBb0IsRUFBRTtJQUMxQjtNQUNFLGVBQWU7TUFDZixvQkFBb0IsRUFBRTtNQUN0QjtRQUNFLG9CQUFvQixFQUFFO0VBQzVCO0lBQ0UsY0FBYyxFQUFFO0VBQ2xCO0lBQ0UsZUFBZSxFQUFFO0VBQ25CO0lBQ0Usb0JBQW9CO0lBQ3BCLCtCQUErQjtJQUMvQixnQkFBZ0I7SUFDaEIsbUJBQW1CO0lBQ25CLHVCQUF1QjtJQUN2QiwwQkFBMEI7SUFDMUIsZUFBZTtJQUNmLGlCQUFpQjtJQUNqQixlQUFlLEVBQUU7RUFDbkI7SUFDRSw4REFBOEQ7SUFDOUQsZUFBZSxFQUFFO0lBQ2pCO01BQ0UsWUFBWSxFQUFFO0lBQ2hCOztNQUVFLGVBQWUsRUFBRTtJQUNuQjtNQUNFLGVBQWUsRUFBRTtJQUNuQjtNQUNFLGVBQWUsRUFBRTtJQUNuQjtNQUNFLGVBQWUsRUFBRTtJQUNuQjtNQUNFLHNEQUFzRCxFQUFFO0lBQzFEO01BQ0UsMEJBQTBCLEVBQUU7O0FBRWxDO0VBQ0UsaUJBQWlCO0VBQ2pCLGtCQUFrQjtFQUNsQixtQkFBbUI7RUFDbkIscUJBQWM7RUFBZCxjQUFjO0VBQ2Qsc0JBQXdCO01BQXhCLHdCQUF3QixFQUFFO0VBQzFCO0lBQ0UsaUJBQWlCO0lBQ2pCLGNBQWM7SUFDZCxnQkFBZ0I7SUFDaEIsa0JBQWtCO0lBQ2xCLHdCQUF3QjtJQUN4QixlQUFlO0lBQ2YsaUJBQWlCLEVBQUU7RUFDckI7SUFDRSxlQUFlLEVBQUU7RUFDbkI7SUFDRSwrREFBK0Q7SUFDL0QsZ0JBQWdCO0lBQ2hCLGtCQUFrQjtJQUNsQix3QkFBd0I7SUFDeEIsZUFBZTtJQUNmLG9CQUFvQixFQUFFO0VBQ3hCO0lBQ0UsZUFBZSxFQUFFO0VBQ25CO0lBQ0Usa0JBQWtCO0lBQ2xCLG1CQUFtQjtJQUNuQixvQkFBb0IsRUFBRTtFQUN4QjtJQUNFLHFCQUFxQixFQUFFO0lBQ3ZCO01BQ0UseUJBQXlCO01BQ3pCLGlCQUFpQjtNQUNqQixZQUFZLEVBQUU7TUFDZDtRQUNFLFlBQVksRUFBRTtFQUNwQjtJQUNFLGNBQWM7SUFDZCxtQkFBbUIsRUFBRTtFQUN2QjtJQUNFLDRCQUE0QjtJQUM1QiwwQkFBMEI7SUFDMUIsdUJBQXVCO0lBQ3ZCLGlCQUFpQjtJQUNqQixnQkFBZ0I7SUFDaEIsaUJBQWlCO0lBQ2pCLG1CQUFtQjtJQUNuQix3QkFBd0IsRUFBRTtFQUM1QjtJQUNFLDhEQUE4RCxFQUFFO0lBQ2hFO01BQ0UsZUFBZTtNQUNmLGlCQUFpQixFQUFFO0lBQ3JCO01BQ0UsaUJBQWlCO01BQ2pCLG1CQUFtQjtNQUNuQixVQUFVLEVBQUU7RUFDaEI7SUFDRSxpQkFBaUIsRUFBRTtJQUNuQjs7TUFFRSxxQkFBYztNQUFkLGNBQWMsRUFBRTtJQUNsQjtNQUNFLFlBQVE7VUFBUixRQUFRLEVBQUU7SUFDWjtNQUNFLGtCQUFrQixFQUFFO0lBQ3RCO01BQ0Usb0JBQW9CO01BQ3BCLDJDQUEyQztNQUMzQyw4RUFBOEU7TUFDOUUsWUFBWSxFQUFFO01BQ2Q7UUFDRSxvQkFBb0IsRUFBRTtFQUM1QjtJQUNFO01BQ0UsMkJBQXVCO1VBQXZCLHVCQUF1QjtNQUN2Qix1QkFBb0I7VUFBcEIsb0JBQW9CLEVBQUU7TUFDdEI7UUFDRSxZQUFZO1FBQ1osNEJBQTRCLEVBQUU7TUFDaEM7UUFDRSxpQkFBaUI7UUFDakIsOEJBQThCO1FBQzlCLGlDQUFpQyxFQUFFO01BQ3JDO1FBQ0UsZUFBZTtRQUNmLFlBQVksRUFBRSxFQUFFO0VBQ3RCO0lBQ0U7TUFDRSw0QkFBNEIsRUFBRTtJQUNoQztNQUNFLDJCQUF1QjtVQUF2Qix1QkFBdUIsRUFBRTtNQUN6QjtRQUNFLGVBQWU7UUFDZixpQkFBaUIsRUFBRTtJQUN2Qjs7TUFFRSxtQkFBbUIsRUFBRTtJQUN2QjtNQUNFLHFCQUFxQixFQUFFLEVBQUU7O0FBRS9COzs7RUFHRSxtQkFBbUI7RUFDbkIsaUJBQWlCLEVBQUU7RUFDbkI7OztJQUdFLFlBQVk7SUFDWixlQUFlO0lBQ2YsWUFBWTtJQUNaLFlBQVk7SUFDWixPQUFPO0lBQ1AsUUFBUSxFQUFFOztBQUVkO0VBQ0UsaUJBQWlCLEVBQUU7O0FBRXJCO0VBQ0UsMEJBQTBCLEVBQUU7O0FBRTlCO0VBQ0UsMEJBQTBCLEVBQUU7O0FBRTlCOzs7RUFHRSxtQkFBbUIsRUFBRTs7QUFFdkI7RUFDRSxxQkFBYztFQUFkLGNBQWMsRUFBRTs7QUFFbEI7RUFDRSxZQUFRO01BQVIsUUFBUSxFQUFFO0VBQ1Y7SUFDRSxrQkFBa0I7SUFDbEIsbUJBQW1CLEVBQUU7RUFDdkI7SUFDRSxZQUFZO0lBQ1osZUFBZTtJQUNmLG1CQUFtQjtJQUNuQixVQUFVO0lBQ1YsWUFBWTtJQUNaLFdBQVc7SUFDWCxjQUFjO0lBQ2Qsd0pBQXdKO0lBQ3hKLGFBQWEsRUFBRTtFQUNqQjtJQUNFLGVBQWUsRUFBRTs7QUFFckI7RUFDRSxtQkFBbUI7RUFDbkIscUJBQXFCO0VBQ3JCLGtCQUFrQixFQUFFOztBQUV0QjtFQUNFLDBCQUEwQjtFQUMxQixnQkFBZ0I7RUFDaEIsdUJBQXVCO0VBQ3ZCLGlCQUFpQjtFQUNqQix3QkFBd0I7RUFDeEIsbUJBQW1CLEVBQUU7O0FBRXZCO0VBQ0U7SUFDRSxpQkFBaUI7SUFDakIsa0JBQWtCO0lBQ2xCLG1CQUFtQixFQUFFO0lBQ3JCO01BQ0UsZUFBZTtNQUNmLGlCQUFpQixFQUFFO01BQ25CO1FBQ0UsY0FBYyxFQUFFO0lBQ3BCOzs7TUFHRSxtQkFBbUIsRUFBRTtJQUN2QjtNQUNFLDJCQUF1QjtVQUF2Qix1QkFBdUI7TUFDdkIscUJBQXFCLEVBQUU7SUFDekI7TUFDRSxlQUFlO01BQ2YsWUFBWSxFQUFFLEVBQUU7O0FBRXRCO0VBQ0UscUJBQXFCLEVBQUU7RUFDdkI7SUFDRSxpQkFBaUI7SUFDakIsZ0JBQWdCO0lBQ2hCLHdCQUF3QixFQUFFO0VBQzVCO0lBQ0U7TUFDRSxvQkFBb0IsRUFBRSxFQUFFOztBQUU5QjtFQUNFLHFCQUFxQjtFQUNyQixxQkFBYztFQUFkLGNBQWMsRUFBRTtFQUNoQjtJQUNFLGlCQUFpQjtJQUNqQixvQkFBb0I7SUFDcEIsWUFBUTtRQUFSLFFBQVE7SUFDUixzQkFBd0I7UUFBeEIsd0JBQXdCO0lBQ3hCLHVCQUErQjtRQUEvQiwrQkFBK0IsRUFBRTtFQUNuQztJQUNFLHFCQUFjO0lBQWQsY0FBYyxFQUFFO0lBQ2hCO01BQ0UsdUJBQStCO1VBQS9CLCtCQUErQixFQUFFO0lBQ25DO01BQ0UsaUJBQWlCLEVBQUU7SUFDckI7TUFDRSxrQkFBa0I7TUFDbEIsbUJBQWU7VUFBZixlQUFlLEVBQUU7SUFDbkI7TUFDRSxvQkFBb0IsRUFBRTtJQUN4QjtNQUNFLGdCQUFnQjtNQUNoQixzQkFBc0I7TUFDdEIsMEJBQTBCO01BQzFCLGVBQWUsRUFBRTtJQUNuQjtNQUNFLGtCQUFrQjtNQUNsQixnQkFBZ0I7TUFDaEIsd0JBQXdCO01BQ3hCLCtEQUErRDtNQUMvRCxlQUFlLEVBQUU7SUFDbkI7TUFDRSxnQkFBZ0I7TUFDaEIsaUJBQWlCO01BQ2pCLGVBQWUsRUFBRTtNQUNqQjtRQUNFLGdCQUFnQjtRQUNoQix3QkFBd0I7UUFDeEIsZUFBZTtRQUNmLGlCQUFpQixFQUFFO0VBQ3pCO0lBQ0UsZ0JBQWdCO0lBQ2hCLGlCQUFpQjtJQUNqQix3QkFBd0I7SUFDeEIsZUFBZSxFQUFFO0VBQ25CO0lBQ0UsbUJBQW1CO0lBQ25CLHdCQUF3QjtJQUN4QixZQUFZLEVBQUU7RUFDaEI7SUFDRSwwQkFBMEI7SUFDMUIsZ0JBQWdCO0lBQ2hCLHNCQUFzQjtJQUN0QixpQkFBaUI7SUFDakIsd0JBQXdCO0lBQ3hCLG1CQUFtQixFQUFFO0VBQ3ZCO0lBQ0Usa0JBQWtCLEVBQUU7RUFDdEI7SUFDRSwwQkFBMEIsRUFBRTtFQUM5QjtJQUNFLDBCQUEwQixFQUFFO0VBQzlCO0lBQ0U7TUFDRSwyQkFBdUI7VUFBdkIsdUJBQXVCO01BQ3ZCLHFCQUE0QjtVQUE1Qiw0QkFBNEIsRUFBRTtJQUNoQztNQUNFLGVBQWUsRUFBRTtJQUNuQjtNQUNFLGtCQUFrQixFQUFFLEVBQUU7RUFDMUI7SUFDRTtNQUNFLG9CQUFvQjtNQUNwQiwyQkFBdUI7VUFBdkIsdUJBQXVCLEVBQUU7TUFDekI7UUFDRSxpQkFBaUI7UUFDakIsWUFBWTtRQUNaLDZCQUE2QjtRQUM3Qiw4QkFBOEIsRUFBRTtNQUNsQztRQUNFLGlCQUFpQjtRQUNqQixpQkFBaUIsRUFBRTtNQUNyQjtRQUNFLHdCQUF3QixFQUFFO01BQzVCO1FBQ0UsZUFBZTtRQUNmLFlBQVksRUFBRSxFQUFFOztBQUV4Qjs7RUFFRSxpQkFBaUI7RUFDakIsaUJBQWlCLEVBQUU7O0FBRXJCOzs7O0VBSUUsbUJBQW1CLEVBQUU7O0FBRXZCOzs7O0VBSUUsb0JBQW9CLEVBQUU7O0FBRXhCOztFQUVFLFdBQVcsRUFBRTs7QUFFZjtFQUNFLGlCQUFpQjtFQUNqQixrREFBa0Q7RUFDbEQsa0JBQWtCO0VBQ2xCLHFCQUFxQjtFQUNyQix1QkFBdUIsRUFBRTs7QUFFM0I7RUFDRSxtQkFBbUIsRUFBRTtFQUNyQjtJQUNFLG1CQUFtQixFQUFFOztBQUV6QjtFQUNFLGdCQUFnQjtFQUNoQixlQUFlO0VBQ2YsMEJBQTBCO0VBQzFCLHVCQUF1QjtFQUN2QixpQkFBaUI7RUFDakIsbUJBQW1CO0VBQ25CLHNCQUFzQixFQUFFOztBQUUxQjtFQUNFLGdCQUFnQjtFQUNoQixpQkFBaUI7RUFDakIsVUFBVTtFQUNWLHdCQUF3QjtFQUN4QixlQUFlLEVBQUU7O0FBRW5CO0VBQ0UsaUJBQWlCO0VBQ2pCLGdCQUFnQjtFQUNoQixrQkFBa0I7RUFDbEIsZUFBZSxFQUFFO0VBQ2pCO0lBQ0UsZ0JBQWdCO0lBQ2hCLGlCQUFpQixFQUFFOztBQUV2QjtFQUNFLGdCQUFnQixFQUFFOztBQUVwQjtFQUNFLG9CQUFvQjtFQUNwQixZQUFZLEVBQUU7RUFDZDtJQUNFLG9CQUFvQixFQUFFOztBQUUxQjtFQUNFLG9CQUFvQjtFQUNwQixlQUFlO0VBQ2YsVUFBVSxFQUFFO0VBQ1o7SUFDRSxvQkFBb0IsRUFBRTs7QUFFMUI7RUFDRSxzQkFBc0I7RUFDdEIsaUJBQWlCO0VBQ2pCLFVBQVUsRUFBRTs7QUFFZDs7RUFFRSxrQkFBa0I7RUFDbEIscUJBQXFCO0VBQ3JCLG1CQUFtQjtFQUNuQixvQkFBb0IsRUFBRTs7QUFFeEI7RUFDRSxpQkFBaUI7RUFDakIsaUJBQWlCO0VBQ2pCLGlCQUFpQixFQUFFO0VBQ25CO0lBQ0UsaUJBQWlCLEVBQUU7O0FBRXZCO0VBQ0Usa0JBQWtCO0VBQ2xCLHFCQUFxQixFQUFFOztBQUV6QjtFQUNFLGdCQUFnQjtFQUNoQixrQkFBa0I7RUFDbEIsaUJBQWlCO0VBQ2pCLFlBQVksRUFBRTs7QUFFaEI7RUFDRSxpQkFBaUI7RUFDakIsdUJBQXVCO0VBQ3ZCLFVBQVUsRUFBRTtFQUNaO0lBQ0Usc0JBQXNCO0lBQ3RCLGdCQUFnQjtJQUNoQixrQkFBa0I7SUFDbEIsaUJBQWlCO0lBQ2pCLGVBQWU7SUFDZixpQkFBaUI7SUFDakIsa0JBQWtCO0lBQ2xCLG9CQUFvQixFQUFFO0VBQ3hCO0lBQ0UsK0RBQStEO0lBQy9ELGVBQWUsRUFBRTtFQUNuQjtJQUNFLGdCQUFnQjtJQUNoQixpQkFBaUI7SUFDakIsZUFBZTtJQUNmLGVBQWUsRUFBRTtJQUNqQjtNQUNFLGlCQUFpQjtNQUNqQixlQUFlLEVBQUU7SUFDbkI7TUFDRSx3QkFBd0I7TUFDeEIsc0JBQXNCO01BQ3RCLGVBQWU7TUFDZiwrQ0FBK0M7TUFDL0MsZUFBZSxFQUFFO0lBQ25CO01BQ0UsK0NBQStDLEVBQUU7RUFDckQ7SUFDRSxlQUFlO0lBQ2YsaUJBQWlCLEVBQUU7RUFDckI7SUFDRSxnQkFBZ0I7SUFDaEIsaUJBQWlCO0lBQ2pCLFlBQVksRUFBRTs7QUFFbEI7O0VBRUUsaUJBQWlCLEVBQUU7O0FBRXJCOztFQUVFLG9CQUFvQixFQUFFOztBQUV4Qjs7RUFFRSxpQ0FBaUM7RUFDakMsaUJBQWlCO0VBQ2pCLG9CQUFvQixFQUFFOztBQUV4QjtFQUNFLGVBQWU7RUFDZixtQkFBbUIsRUFBRTs7QUFFdkI7RUFDRSxnQkFBZ0IsRUFBRTs7QUFFcEI7RUFDRSx1QkFBdUI7RUFDdkIsbUJBQW1CO0VBQ25CLGlCQUFpQjtFQUNqQixVQUFVO0VBQ1YsZ0JBQWdCO0VBQ2hCLGVBQWU7RUFDZiwrREFBK0QsRUFBRTs7QUFFbkU7RUFDRSxpQkFBaUI7RUFDakIsZUFBZSxFQUFFOztBQUVuQjtFQUNFLHdCQUF3QjtFQUN4QixpQkFBaUI7RUFDakIsZUFBZTtFQUNmLGdCQUFnQjtFQUNoQixpQkFBaUIsRUFBRTs7QUFFckI7RUFDRSxrQkFBa0I7RUFDbEIscUJBQXFCLEVBQUU7O0FBRXpCO0VBQ0UsWUFBWSxFQUFFOztBQUVoQjtFQUNFLGdCQUFnQjtFQUNoQixzQkFBc0IsRUFBRTs7QUFFMUI7RUFDRSwwQkFBMEI7RUFDMUIsZUFBZSxFQUFFO0VBQ2pCO0lBQ0UsMEJBQTBCLEVBQUU7O0FBRWhDO0VBQ0UsMEJBQTBCO0VBQzFCLGVBQWU7RUFDZixpQkFBaUIsRUFBRTtFQUNuQjtJQUNFLDBCQUEwQixFQUFFO0VBQzlCO0lBQ0UsMEJBQTBCLEVBQUU7O0FBRWhDO0VBQ0UsbUJBQW1CO0VBQ25CLGVBQWUsRUFBRTs7QUFFbkI7RUFDRSxnQkFBZ0I7RUFDaEIsT0FBTztFQUNQLFFBQVE7RUFDUixZQUFZO0VBQ1osY0FBYyxFQUFFO0VBQ2hCO0lBQ0UscUJBQWM7SUFBZCxjQUFjO0lBQ2QsWUFBWTtJQUNaLGtCQUFrQjtJQUNsQixlQUFlO0lBQ2YsZ0JBQWdCO0lBQ2hCLG1CQUFtQixFQUFFO0VBQ3ZCO0lBQ0UsbUJBQWU7UUFBZixlQUFlO0lBQ2YscUJBQWM7SUFBZCxjQUFjO0lBQ2QsMkJBQXVCO1FBQXZCLHVCQUF1QjtJQUN2QixtQkFBMEI7UUFBMUIsMEJBQTBCLEVBQUU7O0FBRWhDO0VBQ0UsZUFBZSxFQUFFO0VBQ2pCO0lBQ0UscUJBQWM7SUFBZCxjQUFjO0lBQ2QsWUFBWSxFQUFFO0VBQ2hCO0lBQ0UsbUJBQWU7UUFBZixlQUFlLEVBQUU7O0FBRXJCO0VBQ0UsbUJBQW1CLEVBQUU7RUFDckI7SUFDRSxXQUFXLEVBQUU7O0FBRWpCO0VBQ0U7Ozs7SUFJRSxtQkFBbUIsRUFBRTtFQUN2Qjs7OztJQUlFLG9CQUFvQixFQUFFO0VBQ3hCO0lBQ0UsZ0JBQWdCLEVBQUU7RUFDcEI7O0lBRUUsa0JBQWtCO0lBQ2xCLHFCQUFxQixFQUFFO0VBQ3pCO0lBQ0UsaUJBQWlCO0lBQ2pCLGtCQUFrQixFQUFFO0VBQ3RCOzs7O0lBSUUsaUJBQWlCLEVBQUU7RUFDckI7SUFDRSxtQkFBbUI7SUFDbkIsZUFBZTtJQUNmLG1FQUFtRTtJQUNuRSxhQUFhO0lBQ2Isa0JBQWtCLEVBQUU7SUFDcEI7O01BRUUsY0FBYztNQUNkLG1CQUFtQjtNQUNuQixvQkFBb0IsRUFBRTtJQUN4QjtNQUNFLDRCQUE0QjtNQUM1QixtQkFBbUI7TUFDbkIsZUFBZTtNQUNmLDBEQUEwRDtNQUMxRCxxQkFBYztNQUFkLGNBQWM7TUFDZCwyQkFBdUI7VUFBdkIsdUJBQXVCO01BQ3ZCLG1CQUEwQjtVQUExQiwwQkFBMEIsRUFBRTtFQUNoQztJQUNFLG9DQUFvQztJQUNwQyxtQkFBbUI7SUFDbkIsZUFBZTtJQUNmLHVDQUF1QztJQUN2QyxtQkFBbUI7SUFDbkIsaUJBQWlCO0lBQ2pCLGtDQUFrQyxFQUFFO0VBQ3RDOztJQUVFLHFCQUFjO0lBQWQsY0FBYyxFQUFFO0VBQ2xCOztJQUVFLG9CQUFnQjtRQUFoQixnQkFBZ0IsRUFBRTtFQUNwQjs7SUFFRSxvQkFBZ0I7UUFBaEIsZ0JBQWdCO0lBQ2hCLGlEQUFpRCxFQUFFO0VBQ3JEOzs7SUFHRSxnQkFBZ0I7SUFDaEIsa0JBQWtCLEVBQUU7RUFDdEI7SUFDRSxrQkFBa0I7SUFDbEIscUJBQXFCLEVBQUU7RUFDekI7SUFDRSw2QkFBNkI7SUFDN0IsbUJBQW1CO0lBQ25CLGVBQWU7SUFDZiw2Q0FBNkMsRUFBRTtFQUNqRDtJQUNFLGNBQWMsRUFBRSxFQUFFOztBQUV0QjtFQUNFLDZEQUE2RDtFQUM3RCxlQUFlLEVBQUU7RUFDakI7SUFDRSxtQkFBbUIsRUFBRTtFQUN2QjtJQUNFLGdCQUFnQixFQUFFO0VBQ3BCO0lBQ0UsNkRBQTZEO0lBQzdELGtCQUFrQjtJQUNsQixxQkFBcUI7SUFDckIsMEJBQTBCO0lBQzFCLG1CQUFtQjtJQUNuQixtQkFBbUIsRUFBRTtJQUNyQjtNQUNFLGFBQWE7TUFDYixhQUFhLEVBQUU7RUFDbkI7SUFDRSwwQkFBMEI7SUFDMUIsbURBQW1ELEVBQUU7SUFDckQ7TUFDRSxxQkFBcUIsRUFBRTtJQUN6QjtNQUNFLGtCQUFrQjtNQUNsQixpQkFBaUIsRUFBRTtJQUNyQjtNQUNFLGtCQUFrQjtNQUNsQixnQkFBZ0I7TUFDaEIsOEVBQThFO01BQzlFLGVBQWU7TUFDZiwwQkFBMEI7TUFDMUIsdUJBQXVCO01BQ3ZCLG9CQUFvQixFQUFFO0lBQ3hCO01BQ0UsZ0JBQWdCO01BQ2hCLGlCQUFpQjtNQUNqQixlQUFlO01BQ2YsbUJBQW1CO01BQ25CLHdCQUF3QixFQUFFO0lBQzVCO01BQ0Usa0JBQWtCO01BQ2xCLGdCQUFnQjtNQUNoQixlQUFlO01BQ2YsaUJBQWlCO01BQ2pCLHdCQUF3QjtNQUN4QixvQkFBb0IsRUFBRTtJQUN4QjtNQUNFLGlCQUFpQjtNQUNqQixlQUFlLEVBQUU7RUFDckI7SUFDRSxzQkFBd0I7UUFBeEIsd0JBQXdCLEVBQUU7SUFDMUI7TUFDRSxlQUFlO01BQ2YsdUJBQXVCLEVBQUU7SUFDM0I7TUFDRSxlQUFlLEVBQUU7SUFDbkI7TUFDRSxlQUFlLEVBQUU7RUFDckI7SUFDRTtNQUNFLDRDQUE0QyxFQUFFLEVBQUU7RUFDcEQ7SUFDRSxnQkFBZ0I7SUFDaEIsa0JBQWtCO0lBQ2xCLG1CQUFtQjtJQUNuQix3QkFBd0I7SUFDeEIsaUJBQWlCO0lBQ2pCLGVBQWU7SUFDZixtQkFBbUI7SUFDbkIsb0JBQW9CLEVBQUU7SUFDdEI7TUFDRTtRQUNFLHVCQUF1QjtRQUN2QixpQkFBaUIsRUFBRSxFQUFFO0lBQ3pCO01BQ0UsZUFBZTtNQUNmLHdCQUF3QjtNQUN4QixxQ0FBcUMsRUFBRTtJQUN6QztNQUNFLGVBQWU7TUFDZixpREFBaUQsRUFBRTtFQUN2RDtJQUNFLGtCQUFrQjtJQUNsQix1QkFBdUIsRUFBRTtFQUMzQjtJQUNFLHNCQUFzQixFQUFFO0lBQ3hCO01BQ0U7UUFDRSxxQkFBcUIsRUFBRSxFQUFFO0lBQzdCO01BQ0UscUJBQWM7TUFBZCxjQUFjO01BQ2QsdUJBQW9CO1VBQXBCLG9CQUFvQjtNQUNwQixzQkFBd0I7VUFBeEIsd0JBQXdCO01BQ3hCLHFCQUFxQixFQUFFO01BQ3ZCO1FBQ0Usd0NBQXdDO1FBQ3hDLGdCQUFnQjtRQUNoQiwwQkFBMEI7UUFDMUIsZUFBZTtRQUNmLHVCQUF1QjtRQUN2Qix1QkFBdUI7UUFDdkIsaUJBQWlCO1FBQ2pCLG9CQUFvQjtRQUNwQixrQkFBa0I7UUFDbEIsc0JBQXNCO1FBQ3RCLG1CQUFtQixFQUFFO01BQ3ZCO1FBQ0UsZ0JBQWdCO1FBQ2hCLDBCQUEwQjtRQUMxQixlQUFlLEVBQUU7TUFDbkI7UUFDRSxpQkFBaUIsRUFBRTtNQUNyQjtRQUNFLGFBQWEsRUFBRTtNQUNqQjs7UUFFRSxnQkFBZ0I7UUFDaEIsdUJBQXVCO1FBQ3ZCLDhFQUE4RTtRQUM5RSxlQUFlLEVBQUU7RUFDdkI7SUFDRSxxQkFBYztJQUFkLGNBQWM7SUFDZCx1QkFBK0I7UUFBL0IsK0JBQStCO0lBQy9CLHVCQUFvQjtRQUFwQixvQkFBb0I7SUFDcEIsaUJBQWlCLEVBQUU7SUFDbkI7TUFDRSw4REFBOEQ7TUFDOUQsNEJBQTRCO01BQzVCLDZCQUE2QjtNQUM3QixtQkFBZTtVQUFmLGVBQWUsRUFBRTtJQUNuQjtNQUNFLCtCQUErQjtNQUMvQixZQUFZO01BQ1osYUFBYSxFQUFFO0lBQ2pCO01BQ0UsNkJBQTZCO01BQzdCLFlBQVk7TUFDWixhQUFhLEVBQUU7SUFDakI7TUFDRSw2QkFBNkI7TUFDN0IsWUFBWTtNQUNaLGFBQWEsRUFBRTtJQUNqQjtNQUNFLDZCQUE2QjtNQUM3QixZQUFZO01BQ1osYUFBYSxFQUFFO0lBQ2pCO01BQ0UsOEJBQThCO01BQzlCLFlBQVk7TUFDWixhQUFhLEVBQUU7SUFDakI7TUFDRSw4QkFBOEI7TUFDOUIsWUFBWTtNQUNaLGFBQWEsRUFBRTtJQUNqQjtNQUNFLDhCQUE4QjtNQUM5QixZQUFZO01BQ1osYUFBYSxFQUFFO0lBQ2pCO01BQ0U7UUFDRSxzQkFBd0I7WUFBeEIsd0JBQXdCO1FBQ3hCLG9CQUFnQjtZQUFoQixnQkFBZ0I7UUFDaEIsaUJBQWlCO1FBQ2pCLHFCQUFxQixFQUFFO1FBQ3ZCO1VBQ0UsYUFBYSxFQUFFLEVBQUU7RUFDekI7SUFDRSxtQkFBbUI7SUFDbkIsbUJBQW1CO0lBQ25CLDhCQUE4QjtJQUM5QixlQUFlLEVBQUU7SUFDakI7TUFDRSxtQkFBbUI7TUFDbkIsc0JBQXNCO01BQ3RCLGNBQWMsRUFBRTtFQUNwQjtJQUNFLCtEQUErRDtJQUMvRCxpQkFBaUI7SUFDakIsMEJBQTBCO0lBQzFCLG9CQUFvQjtJQUNwQiwwQkFBMEI7SUFDMUIsbUJBQW1CO0lBQ25CLHNCQUFzQjtJQUN0QiwwQkFBMEI7SUFDMUIscUJBQXFCO0lBQ3JCLG9CQUFvQjtJQUNwQixlQUFlLEVBQUU7SUFDakI7TUFDRSxpQkFBaUI7TUFDakIsZUFBZTtNQUNmLDBCQUEwQjtNQUMxQixxQkFBcUIsRUFBRTtJQUN6QjtNQUNFLGlCQUFpQjtNQUNqQixlQUFlO01BQ2YsMEJBQTBCO01BQzFCLHFCQUFxQixFQUFFO0VBQzNCO0lBQ0Usb0JBQW9CO0lBQ3BCLGFBQWE7SUFDYixlQUFlO0lBQ2YsaUJBQWlCO0lBQ2pCLGlCQUFpQjtJQUNqQixvQkFBb0IsRUFBRTtFQUN4QjtJQUNFLGlCQUFpQjtJQUNqQixvQkFBb0I7SUFDcEIsd0JBQXdCO0lBQ3hCLDZEQUE2RDtJQUM3RCxpQkFBaUIsRUFBRTtFQUNyQjtJQUNFLG1CQUFtQjtJQUNuQixpQkFBaUIsRUFBRTtJQUNuQjtNQUNFLFdBQVcsRUFBRTtFQUNqQjtJQUNFLGtCQUFrQjtJQUNsQixnQkFBZ0I7SUFDaEIsc0JBQXNCO0lBQ3RCLDBCQUEwQjtJQUMxQixlQUFlLEVBQUU7RUFDbkI7SUFDRSwrREFBK0Q7SUFDL0QsZ0JBQWdCO0lBQ2hCLHdCQUF3QjtJQUN4QixlQUFlO0lBQ2YsZ0JBQWdCLEVBQUU7SUFDbEI7TUFDRSxZQUFZO01BQ1osc0JBQXNCO01BQ3RCLHVEQUF1RDtNQUN2RCw2QkFBNkI7TUFDN0Isc0JBQXNCO01BQ3RCLFlBQVk7TUFDWixhQUFhO01BQ2IsbUJBQW1CO01BQ25CLG9CQUFvQixFQUFFO0lBQ3hCO01BQ0U7UUFDRSxtQkFBbUI7UUFDbkIsU0FBUztRQUNULFlBQVk7UUFDWixhQUFhO1FBQ2IsbUJBQWU7WUFBZixlQUFlLEVBQUUsRUFBRTtFQUN6QjtJQUNFLG1CQUFtQixFQUFFO0lBQ3JCO01BQ0UsMEJBQTBCO01BQzFCLGlCQUFpQjtNQUNqQixnQkFBZ0I7TUFDaEIscUJBQXFCO01BQ3JCLGlCQUFpQjtNQUNqQixZQUFZLEVBQUU7SUFDaEI7TUFDRSxpQkFBaUI7TUFDakIsaUJBQWlCO01BQ2pCLHVCQUF1QjtNQUN2QixnQkFBZ0I7TUFDaEIsbUJBQW1CLEVBQUU7RUFDekI7SUFDRSwwQkFBMEI7SUFDMUIsZ0JBQWdCO0lBQ2hCLHVCQUF1QjtJQUN2QixpQkFBaUIsRUFBRTtFQUNyQjtJQUNFLG1CQUFtQixFQUFFO0lBQ3JCO01BQ0U7UUFDRSxtQkFBbUIsRUFBRSxFQUFFO0lBQzNCO01BQ0U7UUFDRSxnQkFBZ0I7UUFDaEIsaUJBQWlCLEVBQUU7UUFDbkI7VUFDRSxnQkFBZ0IsRUFBRSxFQUFFO0VBQzVCOztJQUVFLGlCQUFpQjtJQUNqQix3QkFBd0I7SUFDeEIsZ0JBQWdCLEVBQUU7RUFDcEI7SUFDRSxpQkFBaUI7SUFDakIsd0JBQXdCO0lBQ3hCLGdCQUFnQixFQUFFO0VBQ3BCO0lBQ0UsOERBQThELEVBQUU7RUFDbEU7OztJQUdFLGlCQUFpQjtJQUNqQixrQkFBa0I7SUFDbEIsZ0JBQWdCO0lBQ2hCLHdCQUF3QjtJQUN4QixtQkFBbUI7SUFDbkIsZUFBZSxFQUFFO0VBQ25COzs7SUFHRSwrREFBK0Q7SUFDL0Qsa0JBQWtCO0lBQ2xCLGdCQUFnQjtJQUNoQix3QkFBd0I7SUFDeEIsZUFBZTtJQUNmLGlCQUFpQixFQUFFO0lBQ25COzs7TUFHRSxlQUFlLEVBQUU7SUFDbkI7OztNQUdFLDhFQUE4RTtNQUM5RSxpQkFBaUI7TUFDakIsZUFBZTtNQUNmLFdBQVc7TUFDWCxnQkFBZ0I7TUFDaEIsaUJBQWlCO01BQ2pCLGlCQUFpQixFQUFFO0VBQ3ZCO0lBQ0UsZUFBZTtJQUNmLGdCQUFnQjtJQUNoQixtQkFBbUIsRUFBRTtJQUNyQjtNQUNFLFdBQVc7TUFDWCxzQkFBc0I7TUFDdEIscUJBQWM7TUFBZCxjQUFjO01BQ2Qsb0JBQWdCO1VBQWhCLGdCQUFnQjtNQUNoQix5QkFBeUIsRUFBRTtJQUM3QjtNQUNFLGtCQUFjO1VBQWQsY0FBYztNQUNkLHFCQUFxQixFQUFFO0lBQ3pCO01BQ0UsbUJBQW1CO01BQ25CLFVBQVU7TUFDVixpQkFBaUIsRUFBRTtJQUNyQjtNQUNFO1FBQ0Usc0JBQXNCLEVBQUU7UUFDeEI7VUFDRSxrQkFBYztjQUFkLGNBQWMsRUFBRSxFQUFFO0lBQ3hCO01BQ0U7UUFDRSx5QkFBeUIsRUFBRTtNQUM3QjtRQUNFLHFCQUFxQixFQUFFLEVBQUU7SUFDN0I7TUFDRTtRQUNFLG1CQUFlO1lBQWYsZUFBZSxFQUFFLEVBQUU7RUFDekI7SUFDRSxtQkFBbUI7SUFDbkIsc0JBQXNCLEVBQUU7SUFDeEI7TUFDRSxxQkFBYztNQUFkLGNBQWMsRUFBRTtJQUNsQjtNQUNFLFlBQVE7VUFBUixRQUFRO01BQ1IsZUFBZTtNQUNmLGtCQUFrQjtNQUNsQixnQkFBZ0IsRUFBRTtJQUNwQjtNQUNFLG9CQUFvQixFQUFFO0lBQ3hCO01BQ0UsZUFBZTtNQUNmLGlCQUFpQixFQUFFO0lBQ3JCO01BQ0Usa0JBQWtCLEVBQUU7SUFDdEI7TUFDRSxrQkFBa0IsRUFBRTtJQUN0QjtNQUNFLGtCQUFrQixFQUFFO0lBQ3RCO01BQ0U7UUFDRSxtQkFBbUI7UUFDbkIsc0JBQXNCLEVBQUUsRUFBRTtJQUM5QjtNQUNFO1FBQ0Usa0JBQWtCLEVBQUUsRUFBRTtJQUMxQjtNQUNFO1FBQ0UsMkJBQXVCO1lBQXZCLHVCQUF1QixFQUFFO01BQzNCO1FBQ0UsZ0JBQWdCLEVBQUU7TUFDcEI7O1FBRUUsa0JBQWtCLEVBQUUsRUFBRTtFQUM1QjtJQUNFLHNCQUFzQixFQUFFO0lBQ3hCO01BQ0Usc0JBQXNCO01BQ3RCLFVBQVU7TUFDVixXQUFXO01BQ1gscUJBQWM7TUFBZCxjQUFjLEVBQUU7SUFDbEI7TUFDRSxZQUFRO1VBQVIsUUFBUSxFQUFFO0lBQ1o7TUFDRSxrQkFBa0IsRUFBRTtJQUN0QjtNQUNFLG1CQUFtQixFQUFFO0lBQ3ZCO01BQ0U7UUFDRSxvQkFBb0IsRUFBRTtRQUN0QjtVQUNFLDJCQUF1QjtjQUF2Qix1QkFBdUI7VUFDdkIsdUJBQW9CO2NBQXBCLG9CQUFvQixFQUFFO1FBQ3hCO1VBQ0UsbUJBQW1CO1VBQ25CLGlCQUFpQixFQUFFO1FBQ3JCO1VBQ0UsZUFBZTtVQUNmLGlCQUFpQixFQUFFLEVBQUU7RUFDN0I7SUFDRSxtQkFBbUIsRUFBRTtFQUN2QjtJQUNFLGlCQUFpQixFQUFFO0VBQ3JCO0lBQ0Usb0JBQW9CLEVBQUU7SUFDdEI7TUFDRSxpQkFBaUI7TUFDakIsaUJBQWlCO01BQ2pCLGdCQUFnQjtNQUNoQix3QkFBd0I7TUFDeEIsZUFBZTtNQUNmLGlCQUFpQixFQUFFO0lBQ3JCO01BQ0UsZ0JBQWdCO01BQ2hCLGtCQUFrQjtNQUNsQixnQkFBZ0I7TUFDaEIsbUJBQW1CO01BQ25CLHdCQUF3QjtNQUN4QixpQkFBaUI7TUFDakIsZUFBZSxFQUFFO0VBQ3JCO0lBQ0U7TUFDRSxrQkFBa0IsRUFBRSxFQUFFO0VBQzFCO0lBQ0Usa0JBQWtCO0lBQ2xCLHFCQUFxQixFQUFFO0VBQ3pCO0lBQ0UsZ0JBQWdCO0lBQ2hCLGlCQUFpQjtJQUNqQixlQUFlO0lBQ2YsbUJBQW1CO0lBQ25CLHdCQUF3QixFQUFFO0VBQzVCO0lBQ0UsZ0JBQWdCO0lBQ2hCLGtCQUFrQjtJQUNsQixlQUFlO0lBQ2YsaUJBQWlCO0lBQ2pCLGVBQWUsRUFBRTtFQUNuQjtJQUNFLGdCQUFnQjtJQUNoQixxQkFBcUIsRUFBRTtFQUN6QjtJQUNFLG1CQUFtQjtJQUNuQixpQkFBaUIsRUFBRSIsImZpbGUiOiJwYWdlcy9wcmljaW5nL2luZGV4LmNzcyIsInNvdXJjZXNDb250ZW50IjpbIi5mZWF0dXJlLWxpc3RzIHtcbiAgZGlzcGxheTogZmxleDtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gIGZsZXgtd3JhcDogd3JhcDsgfVxuICAuZmVhdHVyZS1saXN0czo6YmVmb3JlLCAuZmVhdHVyZS1saXN0czo6YWZ0ZXIge1xuICAgIGRpc3BsYXk6IG5vbmU7IH1cbiAgLmZlYXR1cmUtbGlzdHNfX3Byb2R1Y3Qge1xuICAgIGZsZXg6IDAgMSAzODBweDtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47IH1cbiAgLmZlYXR1cmUtbGlzdHNfX2hlYWRpbmcge1xuICAgIHRleHQtYWxpZ246IGxlZnQ7XG4gICAgbWFyZ2luLWJvdHRvbTogNDhweDtcbiAgICBwYWRkaW5nLXJpZ2h0OiAxNXB4OyB9XG4gICAgLmZlYXR1cmUtbGlzdHNfX2hlYWRpbmcgaDIge1xuICAgICAgZm9udC1zaXplOiAyNnB4O1xuICAgICAgbGluZS1oZWlnaHQ6IDM2cHg7XG4gICAgICBsZXR0ZXItc3BhY2luZzogLTAuMDNlbTtcbiAgICAgIGNvbG9yOiAjMUEyMzJGOyB9XG4gICAgLmZlYXR1cmUtbGlzdHNfX2hlYWRpbmcgcCB7XG4gICAgICBmb250LXNpemU6IDIwcHg7XG4gICAgICBsaW5lLWhlaWdodDogMjRweDtcbiAgICAgIGxldHRlci1zcGFjaW5nOiAtMC4wM2VtO1xuICAgICAgY29sb3I6ICM2MTZFN0U7IH1cbiAgICAgIC5mZWF0dXJlLWxpc3RzX19oZWFkaW5nIHAgc3BhbiB7XG4gICAgICAgIGNvbG9yOiAjZDBkNWRiOyB9XG4gIC5mZWF0dXJlLWxpc3RzX19mZWF0dXJlcyB7XG4gICAgbGlzdC1zdHlsZTogbm9uZTtcbiAgICBwYWRkaW5nOiAwIDAgMjRweDsgfVxuICAgIC5mZWF0dXJlLWxpc3RzX19mZWF0dXJlcyBsaSB7XG4gICAgICBmb250LXNpemU6IDE0cHg7XG4gICAgICBsaW5lLWhlaWdodDogMjNweDtcbiAgICAgIGxldHRlci1zcGFjaW5nOiAtMC4wMmVtO1xuICAgICAgY29sb3I6ICM0MTRENUM7XG4gICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICBwYWRkaW5nOiAxOHB4IDAgMThweCAyMnB4O1xuICAgICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNFOUVERjM7IH1cbiAgICAgIC5mZWF0dXJlLWxpc3RzX19mZWF0dXJlcyBsaTpsYXN0LWNoaWxkIHtcbiAgICAgICAgYm9yZGVyLWJvdHRvbTogbm9uZTsgfVxuICAgICAgLmZlYXR1cmUtbGlzdHNfX2ZlYXR1cmVzIGxpOjpiZWZvcmUge1xuICAgICAgICBjb250ZW50OiB1cmwoJ2RhdGE6aW1hZ2Uvc3ZnK3htbCxcXGEgICAgICAgICAgIDxzdmcgdmlld0JveD1cIjAgMCAxNCAxMVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cXGEgICAgICAgICAgICAgPHBhdGggZD1cIk00LjQ1ODg5IDguNjYwMzVMMS4xNjY2NyA1LjI1MzY3TDAgNi40MDI5TDQuNDU4ODkgMTFMMTQgMS4xNDkyTDEyLjgzMzMgMEw0LjQ1ODg5IDguNjYwMzVaXCIvPlxcYSAgICAgICAgICAgPC9zdmc+Jyk7XG4gICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgbGVmdDogMDtcbiAgICAgICAgdG9wOiBjYWxjKDUwJSAtIDExcHgpO1xuICAgICAgICBoZWlnaHQ6IDExcHg7XG4gICAgICAgIHdpZHRoOiAxNHB4O1xuICAgICAgICBvcGFjaXR5OiAuNTtcbiAgICAgICAgZmlsbDogIzczODQ5QTsgfVxuICAgICAgLmZlYXR1cmUtbGlzdHNfX2ZlYXR1cmVzIGxpIGEge1xuICAgICAgICBtYXJnaW4tbGVmdDogM3B4O1xuICAgICAgICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsgfVxuICAuZmVhdHVyZS1saXN0c19fY3RhIHtcbiAgICBhbGlnbi1zZWxmOiBzdGFydDtcbiAgICBtYXJnaW4tdG9wOiBhdXRvOyB9XG5cbiNwYWdlLXByaWNpbmcgLnBsYW4tY2FyZHMge1xuICBkaXNwbGF5OiBmbGV4OyB9XG4gICNwYWdlLXByaWNpbmcgLnBsYW4tY2FyZHMgLnBsYW4tY2FyZDpub3QoLnBsYW4tY2FyZC0tZW1waGFzaXplKSB7XG4gICAgbWFyZ2luOiAyMHB4IDA7IH1cbiAgICBAbWVkaWEgKG1heC13aWR0aDogNzY4cHgpIHtcbiAgICAgICNwYWdlLXByaWNpbmcgLnBsYW4tY2FyZHMgLnBsYW4tY2FyZDpub3QoLnBsYW4tY2FyZC0tZW1waGFzaXplKSB7XG4gICAgICAgIG1hcmdpbjogMDsgfSB9XG4gICNwYWdlLXByaWNpbmcgLnBsYW4tY2FyZHMgLnBsYW4tY2FyZCArIC5wbGFuLWNhcmQge1xuICAgIG1hcmdpbi1sZWZ0OiAyNnB4OyB9XG4gIEBtZWRpYSAobWF4LXdpZHRoOiAxMjIwcHgpIHtcbiAgICAjcGFnZS1wcmljaW5nIC5wbGFuLWNhcmRzIC5wbGFuLWNhcmQgKyAucGxhbi1jYXJkIHtcbiAgICAgIG1hcmdpbi1sZWZ0OiAxNHB4OyB9IH1cbiAgQG1lZGlhIChtYXgtd2lkdGg6IDc2OHB4KSB7XG4gICAgI3BhZ2UtcHJpY2luZyAucGxhbi1jYXJkcyB7XG4gICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsgfVxuICAgICAgI3BhZ2UtcHJpY2luZyAucGxhbi1jYXJkcyAucGxhbi1jYXJkIHtcbiAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgIG1heC13aWR0aDogNTAwcHg7IH1cbiAgICAgICNwYWdlLXByaWNpbmcgLnBsYW4tY2FyZHMgLnBsYW4tY2FyZCArIC5wbGFuLWNhcmQge1xuICAgICAgICBtYXJnaW4tbGVmdDogMDtcbiAgICAgICAgbWFyZ2luLXRvcDogMjBweDsgfSB9XG5cbiNwYWdlLXByaWNpbmcgLnBsYW4tY2FyZCB7XG4gIGZsZXg6IDE7XG4gIGJvcmRlci1yYWRpdXM6IDEycHg7XG4gIGJhY2tncm91bmQ6IHdoaXRlO1xuICBib3gtc2hhZG93OiAwcHggMnB4IDhweCByZ2JhKDIsIDgsIDIwLCAwLjA4KSwgMHB4IDhweCAxNnB4IHJnYmEoMCwgMCwgMCwgMC4xKTtcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOyB9XG4gICNwYWdlLXByaWNpbmcgLnBsYW4tY2FyZCArIC5wbGFuLWNhcmQge1xuICAgIGJvcmRlci1sZWZ0OiAxcHggc29saWQgI2VlZTsgfVxuICAjcGFnZS1wcmljaW5nIC5wbGFuLWNhcmQgLnBsYW4tY2FyZC1oZWFkZXIsXG4gICNwYWdlLXByaWNpbmcgLnBsYW4tY2FyZCAucGxhbi1jYXJkLWJvZHkge1xuICAgIHBhZGRpbmc6IDMycHggMjhweDsgfVxuICAjcGFnZS1wcmljaW5nIC5wbGFuLWNhcmQgLnBsYW4tY2FyZC1ib2R5IHtcbiAgICBwYWRkaW5nLWJvdHRvbTogNnB4OyB9XG4gICNwYWdlLXByaWNpbmcgLnBsYW4tY2FyZCAucGxhbi1jYXJkLWhlYWRlciB7XG4gICAgbGV0dGVyLXNwYWNpbmc6IC0wLjAyZW07IH1cbiAgICAjcGFnZS1wcmljaW5nIC5wbGFuLWNhcmQgLnBsYW4tY2FyZC1oZWFkZXIgaDMge1xuICAgICAgbWFyZ2luLXRvcDogMDtcbiAgICAgIG1hcmdpbi1ib3R0b206IDI2cHg7XG4gICAgICBmb250LXNpemU6IDI0cHg7XG4gICAgICBjb2xvcjogIzAyMDgxNDsgfVxuICAgICNwYWdlLXByaWNpbmcgLnBsYW4tY2FyZCAucGxhbi1jYXJkLWhlYWRlciAucHJpY2Uge1xuICAgICAgY29sb3I6ICMyRTRDNzM7XG4gICAgICBmb250LXNpemU6IDIwcHg7XG4gICAgICBsaW5lLWhlaWdodDogMTtcbiAgICAgIG1hcmdpbi1ib3R0b206IDJweDsgfVxuICAgICNwYWdlLXByaWNpbmcgLnBsYW4tY2FyZCAucGxhbi1jYXJkLWhlYWRlciAucHJpY2Ugc3Ryb25nIHtcbiAgICAgIGZvbnQtc2l6ZTogNDhweDtcbiAgICAgIGNvbG9yOiAjMDIwODE0O1xuICAgICAgZm9udC13ZWlnaHQ6IDQwMDtcbiAgICAgIG1hcmdpbi1yaWdodDogLTRweDsgfVxuICAgICNwYWdlLXByaWNpbmcgLnBsYW4tY2FyZCAucGxhbi1jYXJkLWhlYWRlciAucHJpY2Ugc3Ryb25nLFxuICAgICNwYWdlLXByaWNpbmcgLnBsYW4tY2FyZCAucGxhbi1jYXJkLWhlYWRlciAucHJpY2Ugc3BhbiB7XG4gICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7IH1cbiAgICAjcGFnZS1wcmljaW5nIC5wbGFuLWNhcmQgLnBsYW4tY2FyZC1oZWFkZXIgLnByaWNlIGg2IHtcbiAgICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XG4gICAgICBsZXR0ZXItc3BhY2luZzogMC4wOGVtO1xuICAgICAgZm9udC1zaXplOiAxMXB4OyB9XG4gICAgI3BhZ2UtcHJpY2luZyAucGxhbi1jYXJkIC5wbGFuLWNhcmQtaGVhZGVyIC50eXBlIHtcbiAgICAgIGZvbnQtc2l6ZTogMTRweDtcbiAgICAgIGxldHRlci1zcGFjaW5nOiAtMC4wMWVtO1xuICAgICAgY29sb3I6ICM3Mzg0OUE7IH1cbiAgI3BhZ2UtcHJpY2luZyAucGxhbi1jYXJkIC5wbGFuLWNhcmQtaGVhZGVyLS1kb3VibGUge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOyB9XG4gICAgI3BhZ2UtcHJpY2luZyAucGxhbi1jYXJkIC5wbGFuLWNhcmQtaGVhZGVyLS1kb3VibGUgaDMsXG4gICAgI3BhZ2UtcHJpY2luZyAucGxhbi1jYXJkIC5wbGFuLWNhcmQtaGVhZGVyLS1kb3VibGUgaDQge1xuICAgICAgbWFyZ2luLWJvdHRvbTogMDsgfVxuICAgICNwYWdlLXByaWNpbmcgLnBsYW4tY2FyZCAucGxhbi1jYXJkLWhlYWRlci0tZG91YmxlIGgzIHtcbiAgICAgIG1hcmdpbi10b3A6IDEwcHg7IH1cbiAgICAjcGFnZS1wcmljaW5nIC5wbGFuLWNhcmQgLnBsYW4tY2FyZC1oZWFkZXItLWRvdWJsZSBoNCB7XG4gICAgICBtYXJnaW4tdG9wOiAwO1xuICAgICAgZm9udC1zaXplOiAxNnB4O1xuICAgICAgbGV0dGVyLXNwYWNpbmc6IC0wLjAxZW07XG4gICAgICBmb250LXdlaWdodDogNzAwO1xuICAgICAgY29sb3I6ICM5MkExQjM7IH1cbiAgICAjcGFnZS1wcmljaW5nIC5wbGFuLWNhcmQgLnBsYW4tY2FyZC1oZWFkZXItLWRvdWJsZSAucmlnaHQge1xuICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgIGFsaWduLWl0ZW1zOiBmbGV4LWVuZDsgfVxuICAgICNwYWdlLXByaWNpbmcgLnBsYW4tY2FyZCAucGxhbi1jYXJkLWhlYWRlci0tZG91YmxlIC5wcmljZSB7XG4gICAgICBmb250LXNpemU6IDIycHg7XG4gICAgICBsZXR0ZXItc3BhY2luZzogLTAuMDJlbTtcbiAgICAgIGZvbnQtd2VpZ2h0OiA0MDA7XG4gICAgICBjb2xvcjogIzVCNzA4QjsgfVxuICAgIEBtZWRpYSAobWF4LXdpZHRoOiA3NjhweCkge1xuICAgICAgI3BhZ2UtcHJpY2luZyAucGxhbi1jYXJkIC5wbGFuLWNhcmQtaGVhZGVyLS1kb3VibGUge1xuICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOyB9XG4gICAgICAgICNwYWdlLXByaWNpbmcgLnBsYW4tY2FyZCAucGxhbi1jYXJkLWhlYWRlci0tZG91YmxlIC5yaWdodCB7XG4gICAgICAgICAgbWFyZ2luLXRvcDogOHB4OyB9IH1cbiAgI3BhZ2UtcHJpY2luZyAucGxhbi1jYXJkIC5wbGFuLWNhcmQtYm9keSB7XG4gICAgYm9yZGVyLXRvcDogMnB4IHNvbGlkICNGM0Y1Rjk7IH1cbiAgICAjcGFnZS1wcmljaW5nIC5wbGFuLWNhcmQgLnBsYW4tY2FyZC1ib2R5IHVsIHtcbiAgICAgIG1hcmdpbjogMDtcbiAgICAgIHBhZGRpbmc6IDA7XG4gICAgICBsaXN0LXN0eWxlLXR5cGU6IG5vbmU7IH1cbiAgICAjcGFnZS1wcmljaW5nIC5wbGFuLWNhcmQgLnBsYW4tY2FyZC1ib2R5IGg0IHtcbiAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7XG4gICAgICBsaW5lLWhlaWdodDogMTtcbiAgICAgIGZvbnQtc2l6ZTogMTRweDtcbiAgICAgIGxldHRlci1zcGFjaW5nOiAtMC4wMWVtO1xuICAgICAgY29sb3I6ICMwMjA4MTQ7XG4gICAgICBtYXJnaW4tYm90dG9tOiAxMnB4O1xuICAgICAgbWFyZ2luLXRvcDogMDsgfVxuICAjcGFnZS1wcmljaW5nIC5wbGFuLWNhcmQgLmFkZG9uIHtcbiAgICB0cmFuc2l0aW9uOiAwLjJzIGJhY2tncm91bmQsIDAuMnMgYm9yZGVyO1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIGJvcmRlcjogMXB4IHNvbGlkICNERUUzRUE7XG4gICAgYm9yZGVyLXJhZGl1czogNnB4O1xuICAgIHBhZGRpbmc6IDE2cHg7XG4gICAgbWFyZ2luLXRvcDogMzJweDtcbiAgICBjdXJzb3I6IHBvaW50ZXI7IH1cbiAgICAjcGFnZS1wcmljaW5nIC5wbGFuLWNhcmQgLmFkZG9uIGxpIHtcbiAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgY29sb3I6ICM3Mzg0OUE7XG4gICAgICBmb250LXdlaWdodDogNDAwO1xuICAgICAgZm9udC1mYW1pbHQ6IFwiSW50ZXJcIiwgXCJJbnRlciBVSVwiLCBIZWx2ZXRpY2EsIEFyaWFsLCBzYW5zLXNlcmlmOyB9XG4gICAgICAjcGFnZS1wcmljaW5nIC5wbGFuLWNhcmQgLmFkZG9uIGxpICsgbGkge1xuICAgICAgICBtYXJnaW4tdG9wOiA2cHg7IH1cbiAgICAgICNwYWdlLXByaWNpbmcgLnBsYW4tY2FyZCAuYWRkb24gbGk6OmJlZm9yZSB7XG4gICAgICAgIGNvbnRlbnQ6ICcnO1xuICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgICAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFwiL2ltZy9jaGVja21hcmsuc3ZnXCIpO1xuICAgICAgICBiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0O1xuICAgICAgICBiYWNrZ3JvdW5kLXNpemU6IDEwMCU7XG4gICAgICAgIHdpZHRoOiAxMHB4O1xuICAgICAgICBoZWlnaHQ6IDhweDtcbiAgICAgICAgZmxleDogMCAwIDEwcHg7XG4gICAgICAgIG1hcmdpbi1yaWdodDogOHB4O1xuICAgICAgICBvcGFjaXR5OiAwLjU7IH1cbiAgICAjcGFnZS1wcmljaW5nIC5wbGFuLWNhcmQgLmFkZG9uLnNlbGVjdGVkIHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6ICNGMEY2RkY7XG4gICAgICBib3JkZXI6IDFweCBzb2xpZCAjQ0RERkZGOyB9XG4gICNwYWdlLXByaWNpbmcgLnBsYW4tY2FyZCAuYWRkb24taGVhZGVyIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcbiAgICBtYXJnaW4tYm90dG9tOiA4cHg7IH1cbiAgI3BhZ2UtcHJpY2luZyAucGxhbi1jYXJkIC5jaGVja2JveC1ncm91cCB7XG4gICAgZm9udC1zaXplOiAxMnB4O1xuICAgIGxldHRlci1zcGFjaW5nOiAwLjA4ZW07XG4gICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcbiAgICBjb2xvcjogIzI3MzIzRjtcbiAgICBmb250LXdlaWdodDogNzAwOyB9XG4gICAgI3BhZ2UtcHJpY2luZyAucGxhbi1jYXJkIC5jaGVja2JveC1ncm91cCBpbnB1dCB7XG4gICAgICBtYXJnaW4tcmlnaHQ6IDhweDsgfVxuICAjcGFnZS1wcmljaW5nIC5wbGFuLWNhcmQgLnByaWNlLS1zbWFsbCB7XG4gICAgZm9udC1zaXplOiAxMnB4O1xuICAgIGxldHRlci1zcGFjaW5nOiAtMC4wMWVtO1xuICAgIGNvbG9yOiAjOTJBMUIzOyB9XG4gICAgI3BhZ2UtcHJpY2luZyAucGxhbi1jYXJkIC5wcmljZS0tc21hbGwgc3Ryb25nIHtcbiAgICAgIGZvbnQtc2l6ZTogMTZweDtcbiAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7XG4gICAgICBsZXR0ZXItc3BhY2luZzogLTAuMDFlbTtcbiAgICAgIGNvbG9yOiAjMkYzQTQ4OyB9XG4gICNwYWdlLXByaWNpbmcgLnBsYW4tY2FyZCAucGxhbi1jYXJkLWNsYXVzZSB7XG4gICAgcGFkZGluZzogMCAyOHB4IDI4cHg7XG4gICAgY29sb3I6ICM3Mzg0OWE7XG4gICAgZm9udC1zaXplOiAxM3B4O1xuICAgIGxldHRlci1zcGFjaW5nOiAtLjAxZW07XG4gICAgbWFyZ2luLXRvcDogMjBweDsgfVxuICAgICNwYWdlLXByaWNpbmcgLnBsYW4tY2FyZCAucGxhbi1jYXJkLWNsYXVzZSBoNSB7XG4gICAgICBmb250LXNpemU6IDEzcHg7XG4gICAgICBmb250LXdlaWdodDogNjAwO1xuICAgICAgbWFyZ2luLWJvdHRvbTogMnB4O1xuICAgICAgbWFyZ2luLXRvcDogMDsgfVxuICAgICNwYWdlLXByaWNpbmcgLnBsYW4tY2FyZCAucGxhbi1jYXJkLWNsYXVzZSBwIHtcbiAgICAgIG1hcmdpbjogMDsgfVxuICAgICNwYWdlLXByaWNpbmcgLnBsYW4tY2FyZCAucGxhbi1jYXJkLWNsYXVzZS5oaWdobGlnaHQge1xuICAgICAgbWFyZ2luLXRvcDogMHB4OyB9XG4gICAgI3BhZ2UtcHJpY2luZyAucGxhbi1jYXJkIC5wbGFuLWNhcmQtY2xhdXNlLmhpZ2hsaWdodCAucGxhbi1jYXJkLWNsYXVzZV9faW5uZXIge1xuICAgICAgYmFja2dyb3VuZDogI0ZGRjhFMjtcbiAgICAgIGNvbG9yOiAjOTc3MzAwO1xuICAgICAgcGFkZGluZzogMTdweCAxOHB4IDE0cHg7XG4gICAgICBib3JkZXItcmFkaXVzOiA4cHg7IH1cbiAgI3BhZ2UtcHJpY2luZyAucGxhbi1jYXJkLS1kYXJrIC5wbGFuLWNhcmQtY2xhdXNlIHtcbiAgICBjb2xvcjogI2NlZDZlMDsgfVxuICAjcGFnZS1wcmljaW5nIC5wbGFuLWNhcmQgLnBsYW4tY2FyZC1idG4ge1xuICAgIHRyYW5zaXRpb246IGJhY2tncm91bmQgMC4ycztcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgICB3aWR0aDogMTAwJTtcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgZm9udC1zaXplOiAxMnB4O1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICBsZXR0ZXItc3BhY2luZzogMC4xZW07XG4gICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcbiAgICBmb250LXdlaWdodDogNzAwO1xuICAgIGJvcmRlci1yYWRpdXM6IDBweCAwcHggMTJweCAxMnB4O1xuICAgIHBhZGRpbmc6IDI0cHggMDtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjRjNGNkZDO1xuICAgIGNvbG9yOiAjNEQ4REZGOyB9XG4gICAgI3BhZ2UtcHJpY2luZyAucGxhbi1jYXJkIC5wbGFuLWNhcmQtYnRuOmhvdmVyIHtcbiAgICAgIGJhY2tncm91bmQ6ICNlN2VkZjk7IH1cbiAgICAjcGFnZS1wcmljaW5nIC5wbGFuLWNhcmQgLnBsYW4tY2FyZC1idG4tLXByaW1hcnkge1xuICAgICAgY29sb3I6ICNmZmY7XG4gICAgICBiYWNrZ3JvdW5kOiAjMzg4MEZGOyB9XG4gICAgICAjcGFnZS1wcmljaW5nIC5wbGFuLWNhcmQgLnBsYW4tY2FyZC1idG4tLXByaW1hcnk6aG92ZXIge1xuICAgICAgICBiYWNrZ3JvdW5kOiAjNTI5MGZmOyB9XG4gICAgI3BhZ2UtcHJpY2luZyAucGxhbi1jYXJkIC5wbGFuLWNhcmQtYnRuLS1kYXJrIHtcbiAgICAgIGNvbG9yOiAjQ0RERkZGO1xuICAgICAgYmFja2dyb3VuZDogIzNENTI3NTsgfVxuICAgICAgI3BhZ2UtcHJpY2luZyAucGxhbi1jYXJkIC5wbGFuLWNhcmQtYnRuLS1kYXJrOmhvdmVyIHtcbiAgICAgICAgYmFja2dyb3VuZDogIzQ2NWU4NjsgfVxuICAjcGFnZS1wcmljaW5nIC5wbGFuLWNhcmQgLmFkZG9uLWN0YS10b2dnbGUge1xuICAgIGRpc3BsYXk6IG5vbmU7IH1cbiAgI3BhZ2UtcHJpY2luZyAucGxhbi1jYXJkIC5hZGRvbi1jdGEtdG9nZ2xlLS1hY3RpdmUge1xuICAgIGRpc3BsYXk6IGJsb2NrOyB9XG4gICNwYWdlLXByaWNpbmcgLnBsYW4tY2FyZCAucGxhbi1jYXJkLWhpZ2hsaWdodCB7XG4gICAgYmFja2dyb3VuZDogI0ZGRTVEQztcbiAgICBib3JkZXItcmFkaXVzOiA4cHggOHB4IDBweCAwcHg7XG4gICAgZm9udC1zaXplOiAxMHB4O1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICBsZXR0ZXItc3BhY2luZzogMC4xNmVtO1xuICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XG4gICAgY29sb3I6ICNGRjk5ODI7XG4gICAgZm9udC13ZWlnaHQ6IDcwMDtcbiAgICBwYWRkaW5nOiA0cHggMDsgfVxuICAjcGFnZS1wcmljaW5nIC5wbGFuLWNhcmQtLWRhcmsge1xuICAgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCgxODBkZWcsICMyQjNDNUEgMCUsICMxQjJBNDUgMTAwJSk7XG4gICAgY29sb3I6ICNmNmY4ZmI7IH1cbiAgICAjcGFnZS1wcmljaW5nIC5wbGFuLWNhcmQtLWRhcmsgLnBsYW4tY2FyZC1oZWFkZXIgaDMge1xuICAgICAgY29sb3I6ICNmZmY7IH1cbiAgICAjcGFnZS1wcmljaW5nIC5wbGFuLWNhcmQtLWRhcmsgLnBsYW4tY2FyZC1oZWFkZXIgLnByaWNlIHN0cm9uZyxcbiAgICAjcGFnZS1wcmljaW5nIC5wbGFuLWNhcmQtLWRhcmsgLnBsYW4tY2FyZC1ib2R5IGg0IHtcbiAgICAgIGNvbG9yOiAjZjZmOGZiOyB9XG4gICAgI3BhZ2UtcHJpY2luZyAucGxhbi1jYXJkLS1kYXJrIC5wbGFuLWNhcmQtaGVhZGVyIC5wcmljZSB7XG4gICAgICBjb2xvcjogI2JhYzlkNjsgfVxuICAgICNwYWdlLXByaWNpbmcgLnBsYW4tY2FyZC0tZGFyayAucGxhbi1jYXJkLWJvZHkgLmZlYXR1cmVzIGxpIHtcbiAgICAgIGNvbG9yOiAjRTlFREYzOyB9XG4gICAgI3BhZ2UtcHJpY2luZyAucGxhbi1jYXJkLS1kYXJrIC5wbGFuLWNhcmQtaGVhZGVyIC50eXBlIHtcbiAgICAgIGNvbG9yOiAjQ0VENkUwOyB9XG4gICAgI3BhZ2UtcHJpY2luZyAucGxhbi1jYXJkLS1kYXJrIC5wbGFuLWNhcmQtYm9keSAuZmVhdHVyZXMgbGk6OmJlZm9yZSB7XG4gICAgICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXCIvaW1nL2NoZWNrbWFyay1kYXJrLWdyYXkuc3ZnXCIpOyB9XG4gICAgI3BhZ2UtcHJpY2luZyAucGxhbi1jYXJkLS1kYXJrIC5wbGFuLWNhcmQtYm9keSB7XG4gICAgICBib3JkZXItdG9wLWNvbG9yOiAjMzM0NjY2OyB9XG5cbiNwYWdlLXByaWNpbmcgLnBsYW4tY2FyZHMtLXN0dWRpbyB7XG4gIG1heC13aWR0aDogOTc2cHg7XG4gIG1hcmdpbi1sZWZ0OiBhdXRvO1xuICBtYXJnaW4tcmlnaHQ6IGF1dG87XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGp1c3RpZnktY29udGVudDogY2VudGVyOyB9XG4gICNwYWdlLXByaWNpbmcgLnBsYW4tY2FyZHMtLXN0dWRpbyAucGxhbi1jYXJkIGgyIHtcbiAgICBtYXJnaW4tYm90dG9tOiAwO1xuICAgIG1hcmdpbi10b3A6IDA7XG4gICAgZm9udC1zaXplOiAyOHB4O1xuICAgIGxpbmUtaGVpZ2h0OiAzNHB4O1xuICAgIGxldHRlci1zcGFjaW5nOiAtMC4wMmVtO1xuICAgIGNvbG9yOiAjMDIwODE0O1xuICAgIGZvbnQtd2VpZ2h0OiA2MDA7IH1cbiAgI3BhZ2UtcHJpY2luZyAucGxhbi1jYXJkcy0tc3R1ZGlvIC5wbGFuLWNhcmQgaDQge1xuICAgIGNvbG9yOiAjMDIwODE0OyB9XG4gICNwYWdlLXByaWNpbmcgLnBsYW4tY2FyZHMtLXN0dWRpbyAucGxhbi1jYXJkIHAge1xuICAgIGZvbnQtZmFtaWx5OiBcIkludGVyXCIsIFwiSW50ZXIgVUlcIiwgSGVsdmV0aWNhLCBBcmlhbCwgc2Fucy1zZXJpZjtcbiAgICBmb250LXNpemU6IDE0cHg7XG4gICAgbGluZS1oZWlnaHQ6IDI0cHg7XG4gICAgbGV0dGVyLXNwYWNpbmc6IC0wLjAxZW07XG4gICAgY29sb3I6ICM3Mzg0OUE7XG4gICAgbWFyZ2luLWJvdHRvbTogMjBweDsgfVxuICAjcGFnZS1wcmljaW5nIC5wbGFuLWNhcmRzLS1zdHVkaW8gLnBsYW4tY2FyZCAucHJpY2Uge1xuICAgIGNvbG9yOiAjRTlFREYzOyB9XG4gICNwYWdlLXByaWNpbmcgLnBsYW4tY2FyZHMtLXN0dWRpbyAucGxhbi1jYXJkIC5wbGFuLWNhcmQtaGVhZGVyIHtcbiAgICBwYWRkaW5nLXRvcDogNDJweDtcbiAgICBwYWRkaW5nLWxlZnQ6IDQycHg7XG4gICAgcGFkZGluZy1yaWdodDogNDJweDsgfVxuICAjcGFnZS1wcmljaW5nIC5wbGFuLWNhcmRzLS1zdHVkaW8gLnBsYW4tY2FyZCAucGxhbi1jYXJkLWJvZHkge1xuICAgIHBhZGRpbmc6IDQycHggNDJweCAwOyB9XG4gICAgI3BhZ2UtcHJpY2luZyAucGxhbi1jYXJkcy0tc3R1ZGlvIC5wbGFuLWNhcmQgLnBsYW4tY2FyZC1ib2R5IGxpIGEge1xuICAgICAgdHJhbnNpdGlvbjogMC4ycyBvcGFjaXR5O1xuICAgICAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgICAgIGNvbG9yOiAjZmZmOyB9XG4gICAgICAjcGFnZS1wcmljaW5nIC5wbGFuLWNhcmRzLS1zdHVkaW8gLnBsYW4tY2FyZCAucGxhbi1jYXJkLWJvZHkgbGkgYTpob3ZlciB7XG4gICAgICAgIG9wYWNpdHk6IC44OyB9XG4gICNwYWdlLXByaWNpbmcgLnBsYW4tY2FyZHMtLXN0dWRpbyAucGxhbi1jYXJkIC5wbGFuLWNhcmQtY3RhIHtcbiAgICBwYWRkaW5nOiA0MnB4O1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjsgfVxuICAjcGFnZS1wcmljaW5nIC5wbGFuLWNhcmRzLS1zdHVkaW8gLnBsYW4tY2FyZCAucGxhbi1jYXJkLWN0YSAuYnRuIHtcbiAgICB0cmFuc2l0aW9uOiAwLjJzIGJhY2tncm91bmQ7XG4gICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcbiAgICBsZXR0ZXItc3BhY2luZzogMC4wOGVtO1xuICAgIGZvbnQtd2VpZ2h0OiA3MDA7XG4gICAgZm9udC1zaXplOiAxNnB4O1xuICAgIGJveC1zaGFkb3c6IG5vbmU7XG4gICAgYm9yZGVyLXJhZGl1czogOHB4O1xuICAgIHBhZGRpbmc6IDIycHggMzRweCAyMHB4OyB9XG4gICNwYWdlLXByaWNpbmcgLnBsYW4tY2FyZHMtLXN0dWRpbyAucGxhbi1jYXJkLS1kYXJrIHtcbiAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoMTgwZGVnLCAjMkIzQzVBIDAlLCAjMUIyQTQ1IDEwMCUpOyB9XG4gICAgI3BhZ2UtcHJpY2luZyAucGxhbi1jYXJkcy0tc3R1ZGlvIC5wbGFuLWNhcmQtLWRhcmsgaDQge1xuICAgICAgY29sb3I6ICNDM0QwRTA7XG4gICAgICBmb250LXdlaWdodDogNjAwOyB9XG4gICAgI3BhZ2UtcHJpY2luZyAucGxhbi1jYXJkcy0tc3R1ZGlvIC5wbGFuLWNhcmQtLWRhcmsgLnBpbGwge1xuICAgICAgbWFyZ2luLWxlZnQ6IDZweDtcbiAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgIHRvcDogLTJweDsgfVxuICAjcGFnZS1wcmljaW5nIC5wbGFuLWNhcmRzLS1zdHVkaW8gLnBsYW4tY2FyZCB7XG4gICAgbWF4LXdpZHRoOiA4NDhweDsgfVxuICAgICNwYWdlLXByaWNpbmcgLnBsYW4tY2FyZHMtLXN0dWRpbyAucGxhbi1jYXJkIC5wbGFuLWNhcmQtaGVhZGVyLFxuICAgICNwYWdlLXByaWNpbmcgLnBsYW4tY2FyZHMtLXN0dWRpbyAucGxhbi1jYXJkIC5wbGFuLWNhcmQtYm9keSB7XG4gICAgICBkaXNwbGF5OiBmbGV4OyB9XG4gICAgI3BhZ2UtcHJpY2luZyAucGxhbi1jYXJkcy0tc3R1ZGlvIC5wbGFuLWNhcmQgLnBsYW4tY2FyZC1ib2R5IHVsIHtcbiAgICAgIGZsZXg6IDE7IH1cbiAgICAjcGFnZS1wcmljaW5nIC5wbGFuLWNhcmRzLS1zdHVkaW8gLnBsYW4tY2FyZCAucGxhbi1jYXJkLWJvZHkgdWwgKyB1bCB7XG4gICAgICBtYXJnaW4tbGVmdDogMzRweDsgfVxuICAgICNwYWdlLXByaWNpbmcgLnBsYW4tY2FyZHMtLXN0dWRpbyAucGxhbi1jYXJkIC5wbGFuLWNhcmQtY3RhIC5idG4ge1xuICAgICAgYmFja2dyb3VuZDogIzI5M0Q1RTtcbiAgICAgIGJvcmRlcjogMnB4IHNvbGlkIHJnYmEoMTUyLCAxNzIsIDIwNywgMC4zKTtcbiAgICAgIGJveC1zaGFkb3c6IDBweCAycHggNHB4IHJnYmEoMiwgOCwgMjAsIDAuMSksIDBweCAxcHggMnB4IHJnYmEoMiwgOCwgMjAsIDAuMDgpO1xuICAgICAgY29sb3I6ICNmZmY7IH1cbiAgICAgICNwYWdlLXByaWNpbmcgLnBsYW4tY2FyZHMtLXN0dWRpbyAucGxhbi1jYXJkIC5wbGFuLWNhcmQtY3RhIC5idG46aG92ZXIge1xuICAgICAgICBiYWNrZ3JvdW5kOiAjMmU0NDY5OyB9XG4gIEBtZWRpYSAobWF4LXdpZHRoOiA5OTFweCkge1xuICAgICNwYWdlLXByaWNpbmcgLnBsYW4tY2FyZHMtLXN0dWRpbyB7XG4gICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsgfVxuICAgICAgI3BhZ2UtcHJpY2luZyAucGxhbi1jYXJkcy0tc3R1ZGlvIC5wbGFuLWNhcmQge1xuICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgICAgbWF4LXdpZHRoOiA2NjBweCAhaW1wb3J0YW50OyB9XG4gICAgICAjcGFnZS1wcmljaW5nIC5wbGFuLWNhcmRzLS1zdHVkaW8gLnBsYW4tY2FyZDpmaXJzdC1jaGlsZCB7XG4gICAgICAgIG1hcmdpbjogMCAwIDE2cHg7XG4gICAgICAgIGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiAxMnB4O1xuICAgICAgICBib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czogMTJweDsgfVxuICAgICAgI3BhZ2UtcHJpY2luZyAucGxhbi1jYXJkcy0tc3R1ZGlvIC5wbGFuLWNhcmQtY3RhIC5idG4ge1xuICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgICAgd2lkdGg6IDEwMCU7IH0gfVxuICBAbWVkaWEgKG1heC13aWR0aDogNzY4cHgpIHtcbiAgICAjcGFnZS1wcmljaW5nIC5wbGFuLWNhcmRzLS1zdHVkaW8gLnBsYW4tY2FyZCB7XG4gICAgICBtYXgtd2lkdGg6IDUwMHB4ICFpbXBvcnRhbnQ7IH1cbiAgICAjcGFnZS1wcmljaW5nIC5wbGFuLWNhcmRzLS1zdHVkaW8gLnBsYW4tY2FyZDpsYXN0LWNoaWxkIC5wbGFuLWNhcmQtYm9keSB7XG4gICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOyB9XG4gICAgICAjcGFnZS1wcmljaW5nIC5wbGFuLWNhcmRzLS1zdHVkaW8gLnBsYW4tY2FyZDpsYXN0LWNoaWxkIC5wbGFuLWNhcmQtYm9keSB1bCArIHVsIHtcbiAgICAgICAgbWFyZ2luLWxlZnQ6IDA7XG4gICAgICAgIG1hcmdpbi10b3A6IDEycHg7IH1cbiAgICAjcGFnZS1wcmljaW5nIC5wbGFuLWNhcmRzLS1zdHVkaW8gLnBsYW4tY2FyZCAucGxhbi1jYXJkLWhlYWRlcixcbiAgICAjcGFnZS1wcmljaW5nIC5wbGFuLWNhcmRzLS1zdHVkaW8gLnBsYW4tY2FyZCAucGxhbi1jYXJkLWN0YSB7XG4gICAgICBwYWRkaW5nOiAzMnB4IDI4cHg7IH1cbiAgICAjcGFnZS1wcmljaW5nIC5wbGFuLWNhcmRzLS1zdHVkaW8gLnBsYW4tY2FyZCAucGxhbi1jYXJkLWJvZHkge1xuICAgICAgcGFkZGluZzogMzJweCAyOHB4IDA7IH0gfVxuXG4jcGFnZS1wcmljaW5nIC5wbGFuLWNhcmQtLWVudGVycHJpc2UsXG4jcGFnZS1wcmljaW5nIC5wbGFuLWNhcmQtLWNvbW11bml0eSxcbiNwYWdlLXByaWNpbmcgLnBsYW4tY2FyZHMtYWRkb25zIC5wbGFuLWNhcmQgPiBkaXY6Zmlyc3QtY2hpbGQge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIG92ZXJmbG93OiBoaWRkZW47IH1cbiAgI3BhZ2UtcHJpY2luZyAucGxhbi1jYXJkLS1lbnRlcnByaXNlOjpiZWZvcmUsXG4gICNwYWdlLXByaWNpbmcgLnBsYW4tY2FyZC0tY29tbXVuaXR5OjpiZWZvcmUsXG4gICNwYWdlLXByaWNpbmcgLnBsYW4tY2FyZHMtYWRkb25zIC5wbGFuLWNhcmQgPiBkaXY6Zmlyc3QtY2hpbGQ6OmJlZm9yZSB7XG4gICAgY29udGVudDogJyc7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgaGVpZ2h0OiA4cHg7XG4gICAgdG9wOiAwO1xuICAgIGxlZnQ6IDA7IH1cblxuI3BhZ2UtcHJpY2luZyAucGxhbi1jYXJkLS1jb21tdW5pdHkgLnBsYW4tY2FyZC1jdGEge1xuICBtYXJnaW4tdG9wOiAyMXB4OyB9XG5cbiNwYWdlLXByaWNpbmcgLnBsYW4tY2FyZC0tY29tbXVuaXR5OjpiZWZvcmUge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjNEI4MEY3OyB9XG5cbiNwYWdlLXByaWNpbmcgLnBsYW4tY2FyZC0tZW50ZXJwcmlzZTo6YmVmb3JlIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI0ZGOTk4MjsgfVxuXG4jcGFnZS1wcmljaW5nIC5wbGFuLWNhcmQtLWVudGVycHJpc2UgLnBsYW4tY2FyZC1oZWFkZXIsXG4jcGFnZS1wcmljaW5nIC5wbGFuLWNhcmQtLWVudGVycHJpc2UgLnBsYW4tY2FyZC1ib2R5LCAjcGFnZS1wcmljaW5nIC5wbGFuLWNhcmQtLWNvbW11bml0eSAucGxhbi1jYXJkLWhlYWRlcixcbiNwYWdlLXByaWNpbmcgLnBsYW4tY2FyZC0tY29tbXVuaXR5IC5wbGFuLWNhcmQtYm9keSB7XG4gIHBhZGRpbmc6IDM2cHggNTRweDsgfVxuXG4jcGFnZS1wcmljaW5nIC5wbGFuLWNhcmQtLWVudGVycHJpc2UgLnBsYW4tY2FyZC1ib2R5LCAjcGFnZS1wcmljaW5nIC5wbGFuLWNhcmQtLWNvbW11bml0eSAucGxhbi1jYXJkLWJvZHkge1xuICBkaXNwbGF5OiBmbGV4OyB9XG5cbiNwYWdlLXByaWNpbmcgLnBsYW4tY2FyZC0tZW50ZXJwcmlzZSAucGxhbi1jYXJkLWJvZHkgdWwsICNwYWdlLXByaWNpbmcgLnBsYW4tY2FyZC0tY29tbXVuaXR5IC5wbGFuLWNhcmQtYm9keSB1bCB7XG4gIGZsZXg6IDE7IH1cbiAgI3BhZ2UtcHJpY2luZyAucGxhbi1jYXJkLS1lbnRlcnByaXNlIC5wbGFuLWNhcmQtYm9keSB1bCArIHVsLCAjcGFnZS1wcmljaW5nIC5wbGFuLWNhcmQtLWNvbW11bml0eSAucGxhbi1jYXJkLWJvZHkgdWwgKyB1bCB7XG4gICAgbWFyZ2luLWxlZnQ6IDc2cHg7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlOyB9XG4gICNwYWdlLXByaWNpbmcgLnBsYW4tY2FyZC0tZW50ZXJwcmlzZSAucGxhbi1jYXJkLWJvZHkgdWwgKyB1bDo6YmVmb3JlLCAjcGFnZS1wcmljaW5nIC5wbGFuLWNhcmQtLWNvbW11bml0eSAucGxhbi1jYXJkLWJvZHkgdWwgKyB1bDo6YmVmb3JlIHtcbiAgICBjb250ZW50OiAnJztcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgdG9wOiA0MHB4O1xuICAgIGxlZnQ6IC0zOXB4O1xuICAgIHdpZHRoOiAycHg7XG4gICAgaGVpZ2h0OiAzMzZweDtcbiAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoMjcwZGVnLCByZ2JhKDIzMywgMjM3LCAyNDMsIDApIDAlLCByZ2JhKDIzMywgMjM3LCAyNDMsIDApIDAlLCByZ2JhKDIzMywgMjM3LCAyNDMsIDAuOCkgNTEuOTMlLCByZ2JhKDIzMywgMjM3LCAyNDMsIDApIDEwMCUpO1xuICAgIG9wYWNpdHk6IDAuODsgfVxuICAjcGFnZS1wcmljaW5nIC5wbGFuLWNhcmQtLWVudGVycHJpc2UgLnBsYW4tY2FyZC1ib2R5IHVsIGg1LCAjcGFnZS1wcmljaW5nIC5wbGFuLWNhcmQtLWNvbW11bml0eSAucGxhbi1jYXJkLWJvZHkgdWwgaDUge1xuICAgIGNvbG9yOiAjMDIwODE0OyB9XG5cbiNwYWdlLXByaWNpbmcgLnBsYW4tY2FyZC0tZW50ZXJwcmlzZSAucGxhbi1jYXJkLWN0YSwgI3BhZ2UtcHJpY2luZyAucGxhbi1jYXJkLS1jb21tdW5pdHkgLnBsYW4tY2FyZC1jdGEge1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIHBhZGRpbmctYm90dG9tOiA0NnB4O1xuICBwYWRkaW5nLXRvcDogMTJweDsgfVxuXG4jcGFnZS1wcmljaW5nIC5wbGFuLWNhcmQtLWVudGVycHJpc2UgLmJ0biwgI3BhZ2UtcHJpY2luZyAucGxhbi1jYXJkLS1jb21tdW5pdHkgLmJ0biB7XG4gIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XG4gIGZvbnQtc2l6ZTogMTZweDtcbiAgbGV0dGVyLXNwYWNpbmc6IDAuMDhlbTtcbiAgZm9udC13ZWlnaHQ6IDcwMDtcbiAgcGFkZGluZzogMjJweCAzMnB4IDIwcHg7XG4gIGJvcmRlci1yYWRpdXM6IDhweDsgfVxuXG5AbWVkaWEgKG1heC13aWR0aDogNzY4cHgpIHtcbiAgI3BhZ2UtcHJpY2luZyAucGxhbi1jYXJkLS1lbnRlcnByaXNlLCAjcGFnZS1wcmljaW5nIC5wbGFuLWNhcmQtLWNvbW11bml0eSB7XG4gICAgbWF4LXdpZHRoOiA1MDBweDtcbiAgICBtYXJnaW4tbGVmdDogYXV0bztcbiAgICBtYXJnaW4tcmlnaHQ6IGF1dG87IH1cbiAgICAjcGFnZS1wcmljaW5nIC5wbGFuLWNhcmQtLWVudGVycHJpc2UgLnBsYW4tY2FyZC1ib2R5IHVsICsgdWwsICNwYWdlLXByaWNpbmcgLnBsYW4tY2FyZC0tY29tbXVuaXR5IC5wbGFuLWNhcmQtYm9keSB1bCArIHVsIHtcbiAgICAgIG1hcmdpbi1sZWZ0OiAwO1xuICAgICAgbWFyZ2luLXRvcDogMjRweDsgfVxuICAgICAgI3BhZ2UtcHJpY2luZyAucGxhbi1jYXJkLS1lbnRlcnByaXNlIC5wbGFuLWNhcmQtYm9keSB1bCArIHVsOjpiZWZvcmUsICNwYWdlLXByaWNpbmcgLnBsYW4tY2FyZC0tY29tbXVuaXR5IC5wbGFuLWNhcmQtYm9keSB1bCArIHVsOjpiZWZvcmUge1xuICAgICAgICBkaXNwbGF5OiBub25lOyB9XG4gICAgI3BhZ2UtcHJpY2luZyAucGxhbi1jYXJkLS1lbnRlcnByaXNlIC5wbGFuLWNhcmQtaGVhZGVyLFxuICAgICNwYWdlLXByaWNpbmcgLnBsYW4tY2FyZC0tZW50ZXJwcmlzZSAucGxhbi1jYXJkLWN0YSwgI3BhZ2UtcHJpY2luZyAucGxhbi1jYXJkLS1jb21tdW5pdHkgLnBsYW4tY2FyZC1oZWFkZXIsXG4gICAgI3BhZ2UtcHJpY2luZyAucGxhbi1jYXJkLS1jb21tdW5pdHkgLnBsYW4tY2FyZC1jdGEge1xuICAgICAgcGFkZGluZzogMzJweCAyOHB4OyB9XG4gICAgI3BhZ2UtcHJpY2luZyAucGxhbi1jYXJkLS1lbnRlcnByaXNlIC5wbGFuLWNhcmQtYm9keSwgI3BhZ2UtcHJpY2luZyAucGxhbi1jYXJkLS1jb21tdW5pdHkgLnBsYW4tY2FyZC1ib2R5IHtcbiAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICBwYWRkaW5nOiAzMnB4IDI4cHggMDsgfVxuICAgICNwYWdlLXByaWNpbmcgLnBsYW4tY2FyZC0tZW50ZXJwcmlzZSAuYnRuLCAjcGFnZS1wcmljaW5nIC5wbGFuLWNhcmQtLWNvbW11bml0eSAuYnRuIHtcbiAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgd2lkdGg6IDEwMCU7IH0gfVxuXG4jcGFnZS1wcmljaW5nIC5hZGRvbnMtaGVhZGVyIHtcbiAgbWFyZ2luOiAxNjBweCAwIDU0cHg7IH1cbiAgI3BhZ2UtcHJpY2luZyAuYWRkb25zLWhlYWRlciBoMiB7XG4gICAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgICBmb250LXNpemU6IDI4cHg7XG4gICAgbGV0dGVyLXNwYWNpbmc6IC0wLjAxZW07IH1cbiAgQG1lZGlhIChtYXgtd2lkdGg6IDc2OHB4KSB7XG4gICAgI3BhZ2UtcHJpY2luZyAuYWRkb25zLWhlYWRlciB7XG4gICAgICBtYXJnaW46IDgwcHggMCAzNnB4OyB9IH1cblxuI3BhZ2UtcHJpY2luZyAucGxhbi1jYXJkcy1hZGRvbnMge1xuICBtYXJnaW4tYm90dG9tOiAxODBweDtcbiAgZGlzcGxheTogZmxleDsgfVxuICAjcGFnZS1wcmljaW5nIC5wbGFuLWNhcmRzLWFkZG9ucyAucGxhbi1jYXJkIHtcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgIGJvcmRlci1yYWRpdXM6IDEycHg7XG4gICAgZmxleDogMTtcbiAgICBhbGlnbi1pdGVtczogZmxleC1zdGFydDtcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47IH1cbiAgI3BhZ2UtcHJpY2luZyAucGxhbi1jYXJkcy1hZGRvbnMgLnBsYW4tY2FyZC1oZWFkZXIge1xuICAgIGRpc3BsYXk6IGZsZXg7IH1cbiAgICAjcGFnZS1wcmljaW5nIC5wbGFuLWNhcmRzLWFkZG9ucyAucGxhbi1jYXJkLWhlYWRlciBkaXYge1xuICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOyB9XG4gICAgI3BhZ2UtcHJpY2luZyAucGxhbi1jYXJkcy1hZGRvbnMgLnBsYW4tY2FyZC1oZWFkZXIgZGl2OmZpcnN0LWNoaWxkIHtcbiAgICAgIG1heC13aWR0aDogMzE2cHg7IH1cbiAgICAjcGFnZS1wcmljaW5nIC5wbGFuLWNhcmRzLWFkZG9ucyAucGxhbi1jYXJkLWhlYWRlciBkaXYgKyBkaXYge1xuICAgICAgbWFyZ2luLWxlZnQ6IDcycHg7XG4gICAgICBmbGV4OiAwIDAgYXV0bzsgfVxuICAgICNwYWdlLXByaWNpbmcgLnBsYW4tY2FyZHMtYWRkb25zIC5wbGFuLWNhcmQtaGVhZGVyIGgzIHtcbiAgICAgIG1hcmdpbi1ib3R0b206IDEycHg7IH1cbiAgICAjcGFnZS1wcmljaW5nIC5wbGFuLWNhcmRzLWFkZG9ucyAucGxhbi1jYXJkLWhlYWRlciBoNSB7XG4gICAgICBmb250LXNpemU6IDEycHg7XG4gICAgICBsZXR0ZXItc3BhY2luZzogMC4xZW07XG4gICAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xuICAgICAgY29sb3I6ICM5MkExQjM7IH1cbiAgICAjcGFnZS1wcmljaW5nIC5wbGFuLWNhcmRzLWFkZG9ucyAucGxhbi1jYXJkLWhlYWRlciBwIHtcbiAgICAgIGxpbmUtaGVpZ2h0OiAyNXB4O1xuICAgICAgZm9udC1zaXplOiAxNnB4O1xuICAgICAgbGV0dGVyLXNwYWNpbmc6IC0wLjAxZW07XG4gICAgICBmb250LWZhbWlseTogXCJJbnRlclwiLCBcIkludGVyIFVJXCIsIEhlbHZldGljYSwgQXJpYWwsIHNhbnMtc2VyaWY7XG4gICAgICBjb2xvcjogIzQxNEQ1QzsgfVxuICAgICNwYWdlLXByaWNpbmcgLnBsYW4tY2FyZHMtYWRkb25zIC5wbGFuLWNhcmQtaGVhZGVyIC5wcmljZSB7XG4gICAgICBmb250LXNpemU6IDEwcHg7XG4gICAgICBmb250LXdlaWdodDogNjAwO1xuICAgICAgY29sb3I6ICM5MkExQjM7IH1cbiAgICAgICNwYWdlLXByaWNpbmcgLnBsYW4tY2FyZHMtYWRkb25zIC5wbGFuLWNhcmQtaGVhZGVyIC5wcmljZSBiIHtcbiAgICAgICAgZm9udC1zaXplOiAyMHB4O1xuICAgICAgICBsZXR0ZXItc3BhY2luZzogLTAuMDJlbTtcbiAgICAgICAgY29sb3I6ICMwMjA4MTQ7XG4gICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7IH1cbiAgI3BhZ2UtcHJpY2luZyAucGxhbi1jYXJkcy1hZGRvbnMgLnBsYW4tY2FyZC1ib2R5IGg2IHtcbiAgICBmb250LXNpemU6IDE0cHg7XG4gICAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgICBsZXR0ZXItc3BhY2luZzogLTAuMDFlbTtcbiAgICBjb2xvcjogIzAyMDgxNDsgfVxuICAjcGFnZS1wcmljaW5nIC5wbGFuLWNhcmRzLWFkZG9ucyAucGxhbi1jYXJkLWN0YSB7XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgIHBhZGRpbmc6IDEycHggMzJweCA0NnB4O1xuICAgIHdpZHRoOiAxMDAlOyB9XG4gICNwYWdlLXByaWNpbmcgLnBsYW4tY2FyZHMtYWRkb25zIC5idG4ge1xuICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XG4gICAgZm9udC1zaXplOiAxMnB4O1xuICAgIGxldHRlci1zcGFjaW5nOiAwLjFlbTtcbiAgICBmb250LXdlaWdodDogNzAwO1xuICAgIHBhZGRpbmc6IDE2cHggMjJweCAxNHB4O1xuICAgIGJvcmRlci1yYWRpdXM6IDhweDsgfVxuICAjcGFnZS1wcmljaW5nIC5wbGFuLWNhcmRzLWFkZG9ucyAucGxhbi1jYXJkICsgLnBsYW4tY2FyZCB7XG4gICAgbWFyZ2luLWxlZnQ6IDQwcHg7IH1cbiAgI3BhZ2UtcHJpY2luZyAucGxhbi1jYXJkcy1hZGRvbnMgLnBsYW4tY2FyZDpmaXJzdC1jaGlsZCA+IGRpdjo6YmVmb3JlIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjN0U4N0U5OyB9XG4gICNwYWdlLXByaWNpbmcgLnBsYW4tY2FyZHMtYWRkb25zIC5wbGFuLWNhcmQ6bGFzdC1jaGlsZCA+IGRpdjo6YmVmb3JlIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjODhEOTlFOyB9XG4gIEBtZWRpYSAobWF4LXdpZHRoOiA5OTJweCkge1xuICAgICNwYWdlLXByaWNpbmcgLnBsYW4tY2FyZHMtYWRkb25zIC5wbGFuLWNhcmQtaGVhZGVyIHtcbiAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtc3RhcnQ7IH1cbiAgICAjcGFnZS1wcmljaW5nIC5wbGFuLWNhcmRzLWFkZG9ucyAucGxhbi1jYXJkLWhlYWRlciA+IGRpdiArIGRpdiB7XG4gICAgICBtYXJnaW4tbGVmdDogMDsgfVxuICAgICNwYWdlLXByaWNpbmcgLnBsYW4tY2FyZHMtYWRkb25zIC5wbGFuLWNhcmQgKyAucGxhbi1jYXJkIHtcbiAgICAgIG1hcmdpbi1sZWZ0OiAyMHB4OyB9IH1cbiAgQG1lZGlhIChtYXgtd2lkdGg6IDc2OHB4KSB7XG4gICAgI3BhZ2UtcHJpY2luZyAucGxhbi1jYXJkcy1hZGRvbnMge1xuICAgICAgbWFyZ2luLWJvdHRvbTogODBweDtcbiAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47IH1cbiAgICAgICNwYWdlLXByaWNpbmcgLnBsYW4tY2FyZHMtYWRkb25zIC5wbGFuLWNhcmQge1xuICAgICAgICBtYXgtd2lkdGg6IDUwMHB4O1xuICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgICAgbWFyZ2luLWxlZnQ6IGF1dG8gIWltcG9ydGFudDtcbiAgICAgICAgbWFyZ2luLXJpZ2h0OiBhdXRvICFpbXBvcnRhbnQ7IH1cbiAgICAgICNwYWdlLXByaWNpbmcgLnBsYW4tY2FyZHMtYWRkb25zIC5wbGFuLWNhcmQgKyAucGxhbi1jYXJkIHtcbiAgICAgICAgbWFyZ2luLWxlZnQ6IDBweDtcbiAgICAgICAgbWFyZ2luLXRvcDogMjBweDsgfVxuICAgICAgI3BhZ2UtcHJpY2luZyAucGxhbi1jYXJkcy1hZGRvbnMgLnBsYW4tY2FyZC1jdGEge1xuICAgICAgICBwYWRkaW5nOiAxMnB4IDMycHggMzJweDsgfVxuICAgICAgI3BhZ2UtcHJpY2luZyAucGxhbi1jYXJkcy1hZGRvbnMgLnBsYW4tY2FyZCAuYnRuIHtcbiAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgIHdpZHRoOiAxMDAlOyB9IH1cblxuI3BhZ2UtcHJpY2luZyB0YWJsZSxcbiNwYWdlLXByaWNpbmcgLnRhYmxlIHtcbiAgbWFyZ2luLWJvdHRvbTogMDtcbiAgbWluLXdpZHRoOiA4MDBweDsgfVxuXG4jcGFnZS1wcmljaW5nIHRoZWFkIHRyIHRkOmZpcnN0LWNoaWxkLFxuI3BhZ2UtcHJpY2luZyB0aGVhZCB0ciB0aDpmaXJzdC1jaGlsZCxcbiNwYWdlLXByaWNpbmcgdGJvZHkgdHIgdGQ6Zmlyc3QtY2hpbGQsXG4jcGFnZS1wcmljaW5nIHRib2R5IHRyIHRoOmZpcnN0LWNoaWxkIHtcbiAgcGFkZGluZy1sZWZ0OiAzNnB4OyB9XG5cbiNwYWdlLXByaWNpbmcgdGhlYWQgdHIgdGQ6bGFzdC1jaGlsZCxcbiNwYWdlLXByaWNpbmcgdGhlYWQgdHIgdGg6bGFzdC1jaGlsZCxcbiNwYWdlLXByaWNpbmcgdGJvZHkgdHIgdGQ6bGFzdC1jaGlsZCxcbiNwYWdlLXByaWNpbmcgdGJvZHkgdHIgdGg6bGFzdC1jaGlsZCB7XG4gIHBhZGRpbmctcmlnaHQ6IDM2cHg7IH1cblxuI3BhZ2UtcHJpY2luZyB0aGVhZCB0aCxcbiNwYWdlLXByaWNpbmcgdGJvZHkgdGQge1xuICB3aWR0aDogMjAlOyB9XG5cbiNwYWdlLXByaWNpbmcgdGhlYWQgdGgsICNwYWdlLXByaWNpbmcgdGhlYWQgdGQge1xuICBiYWNrZ3JvdW5kOiAjZmZmO1xuICBib3JkZXItYm90dG9tOiAxcHggc29saWQgcmdiYSgyMzIsIDIzNSwgMjQxLCAwLjYpO1xuICBwYWRkaW5nLXRvcDogMzJweDtcbiAgcGFkZGluZy1ib3R0b206IDMwcHg7XG4gIHZlcnRpY2FsLWFsaWduOiBib3R0b207IH1cblxuI3BhZ2UtcHJpY2luZyB0aGVhZCB0aCB7XG4gIHRleHQtYWxpZ246IGNlbnRlcjsgfVxuICAjcGFnZS1wcmljaW5nIHRoZWFkIHRoIGgyIHtcbiAgICBtYXJnaW4tYm90dG9tOiAzcHg7IH1cblxuI3BhZ2UtcHJpY2luZyB0aGVhZCAuZXllYnJvdyB7XG4gIGZvbnQtc2l6ZTogMTBweDtcbiAgY29sb3I6ICM5NGEwYjc7XG4gIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XG4gIGxldHRlci1zcGFjaW5nOiAwLjA1ZW07XG4gIGZvbnQtd2VpZ2h0OiA3MDA7XG4gIG1hcmdpbi1ib3R0b206IDRweDtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrOyB9XG5cbiNwYWdlLXByaWNpbmcgdGhlYWQgaDIge1xuICBmb250LXNpemU6IDIwcHg7XG4gIGZvbnQtd2VpZ2h0OiA3MDA7XG4gIG1hcmdpbjogMDtcbiAgbGV0dGVyLXNwYWNpbmc6IC0wLjAxZW07XG4gIGNvbG9yOiAjMDIwODE0OyB9XG5cbiNwYWdlLXByaWNpbmcgdGhlYWQgLnByaWNlIHtcbiAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgZm9udC1zaXplOiAxMnB4O1xuICBsaW5lLWhlaWdodDogMjBweDtcbiAgY29sb3I6ICM1QjcwOEI7IH1cbiAgI3BhZ2UtcHJpY2luZyB0aGVhZCAucHJpY2Ugc3Ryb25nIHtcbiAgICBmb250LXNpemU6IDE2cHg7XG4gICAgZm9udC13ZWlnaHQ6IDYwMDsgfVxuXG4jcGFnZS1wcmljaW5nIHRoZWFkIC5idG4ge1xuICBtYXJnaW4tdG9wOiA4cHg7IH1cblxuI3BhZ2UtcHJpY2luZyB0aGVhZCAuYnRuLS1wcmltYXJ5IHtcbiAgYmFja2dyb3VuZDogIzM4ODBGRjtcbiAgY29sb3I6ICNmZmY7IH1cbiAgI3BhZ2UtcHJpY2luZyB0aGVhZCAuYnRuLS1wcmltYXJ5OmhvdmVyIHtcbiAgICBiYWNrZ3JvdW5kOiAjNDc4YWZmOyB9XG5cbiNwYWdlLXByaWNpbmcgdGhlYWQgLmJ0bi0tZGFyayB7XG4gIGJhY2tncm91bmQ6ICMyMTMwNDk7XG4gIGNvbG9yOiAjQ0RERkZGO1xuICBib3JkZXI6IDA7IH1cbiAgI3BhZ2UtcHJpY2luZyB0aGVhZCAuYnRuLS1kYXJrOmhvdmVyIHtcbiAgICBiYWNrZ3JvdW5kOiAjMzE0NzZjOyB9XG5cbiNwYWdlLXByaWNpbmcgdGhlYWQgLnBsYW4td3JhcCB7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgdGV4dC1hbGlnbjogbGVmdDtcbiAgYm9yZGVyOiAwOyB9XG5cbiNwYWdlLXByaWNpbmcgdGJvZHkgdGgsXG4jcGFnZS1wcmljaW5nIHRib2R5IHRkIHtcbiAgcGFkZGluZy10b3A6IDE0cHg7XG4gIHBhZGRpbmctYm90dG9tOiAxNHB4O1xuICBwYWRkaW5nLWxlZnQ6IDE2cHg7XG4gIHBhZGRpbmctcmlnaHQ6IDE2cHg7IH1cblxuI3BhZ2UtcHJpY2luZyB0Ym9keSAucGlsbCB7XG4gIG1hcmdpbi10b3A6IC0ycHg7XG4gIG1hcmdpbi1sZWZ0OiAycHg7XG4gIGJhY2tncm91bmQ6IG5vbmU7IH1cbiAgI3BhZ2UtcHJpY2luZyB0Ym9keSAucGlsbC0tYmx1ZSB7XG4gICAgbWFyZ2luLWxlZnQ6IDhweDsgfVxuXG4jcGFnZS1wcmljaW5nIHRib2R5IHRyLmNvbWJpbmVkIHRoLCAjcGFnZS1wcmljaW5nIHRib2R5IHRyLmNvbWJpbmVkIHRkIHtcbiAgcGFkZGluZy10b3A6IDQ1cHg7XG4gIHBhZGRpbmctYm90dG9tOiAyMnB4OyB9XG5cbiNwYWdlLXByaWNpbmcgdGJvZHkgdHIuY29tYmluZWQgdGgge1xuICBmb250LXNpemU6IDE2cHg7XG4gIGxpbmUtaGVpZ2h0OiAyMnB4O1xuICBmb250LXdlaWdodDogNzAwO1xuICBjb2xvcjogIzMzMzsgfVxuXG4jcGFnZS1wcmljaW5nIHRib2R5IHRoIHtcbiAgZm9udC13ZWlnaHQ6IDQwMDtcbiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbiAgYm9yZGVyOiAwOyB9XG4gICNwYWdlLXByaWNpbmcgdGJvZHkgdGhbY29sc3Bhbj1cIjRcIl0gc3BhbiB7XG4gICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgIGZvbnQtc2l6ZTogMTZweDtcbiAgICBsaW5lLWhlaWdodDogMjJweDtcbiAgICBmb250LXdlaWdodDogNjAwO1xuICAgIGNvbG9yOiAjMDIwODE0O1xuICAgIGJvcmRlci10b3A6IG5vbmU7XG4gICAgcGFkZGluZy10b3A6IDMwcHg7XG4gICAgcGFkZGluZy1ib3R0b206IDhweDsgfVxuICAjcGFnZS1wcmljaW5nIHRib2R5IHRoOm5vdChbY29sc3Bhbj1cIjRcIl0pIHtcbiAgICBmb250LWZhbWlseTogXCJJbnRlclwiLCBcIkludGVyIFVJXCIsIEhlbHZldGljYSwgQXJpYWwsIHNhbnMtc2VyaWY7XG4gICAgY29sb3I6ICM0RTVCNkE7IH1cbiAgI3BhZ2UtcHJpY2luZyB0Ym9keSB0aCBzdHJvbmcge1xuICAgIGZvbnQtc2l6ZTogMTRweDtcbiAgICBmb250LXdlaWdodDogNjAwO1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIGNvbG9yOiAjNTY1YzY3OyB9XG4gICAgI3BhZ2UtcHJpY2luZyB0Ym9keSB0aCBzdHJvbmcgYiB7XG4gICAgICBmb250LXdlaWdodDogNjAwO1xuICAgICAgY29sb3I6ICMxNzFhMjA7IH1cbiAgICAjcGFnZS1wcmljaW5nIHRib2R5IHRoIHN0cm9uZyBiIGEge1xuICAgICAgdHJhbnNpdGlvbjogYm9yZGVyIDAuM3M7XG4gICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgICBjb2xvcjogIzE3MWEyMDtcbiAgICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCByZ2JhKDIzLCAyNiwgMzIsIDAuMik7XG4gICAgICBsaW5lLWhlaWdodDogMTsgfVxuICAgICNwYWdlLXByaWNpbmcgdGJvZHkgdGggc3Ryb25nIGIgYTpob3ZlciB7XG4gICAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgcmdiYSgyMywgMjYsIDMyLCAwLjcpOyB9XG4gICNwYWdlLXByaWNpbmcgdGJvZHkgdGggYSB7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgZm9udC13ZWlnaHQ6IDYwMDsgfVxuICAjcGFnZS1wcmljaW5nIHRib2R5IHRoIHNwYW4ge1xuICAgIGZvbnQtc2l6ZTogMTJweDtcbiAgICBmb250LXdlaWdodDogNTAwO1xuICAgIGNvbG9yOiAjOTk5OyB9XG5cbiNwYWdlLXByaWNpbmcgdGJvZHkgdGQsXG4jcGFnZS1wcmljaW5nIHRib2R5IHRoIHtcbiAgYmFja2dyb3VuZDogI2ZmZjsgfVxuXG4jcGFnZS1wcmljaW5nIHRib2R5IC5zdHJpcGUgdGQsXG4jcGFnZS1wcmljaW5nIHRib2R5IC5zdHJpcGUgdGgge1xuICBiYWNrZ3JvdW5kOiAjZjhmOWZiOyB9XG5cbiNwYWdlLXByaWNpbmcgdGJvZHkgLnNtYWxsIHRkLFxuI3BhZ2UtcHJpY2luZyB0Ym9keSAuc21hbGwgdGgge1xuICBib3JkZXItYm90dG9tOiAxcHggc29saWQgI0U5RURGMztcbiAgcGFkZGluZy10b3A6IDZweDtcbiAgcGFkZGluZy1ib3R0b206IDZweDsgfVxuXG4jcGFnZS1wcmljaW5nIHRib2R5IC5zbWFsbCB0aDpmaXJzdC1jaGlsZCB7XG4gIGNvbG9yOiAjNzM4NDlBO1xuICBwb3NpdGlvbjogcmVsYXRpdmU7IH1cblxuI3BhZ2UtcHJpY2luZyB0Ym9keSAuc21hbGwgLmNoZWNrOmJlZm9yZSB7XG4gIGZvbnQtc2l6ZTogMTJweDsgfVxuXG4jcGFnZS1wcmljaW5nIHRib2R5IHRkIHtcbiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICBmb250LXdlaWdodDogNDAwO1xuICBib3JkZXI6IDA7XG4gIGZvbnQtc2l6ZTogMTNweDtcbiAgY29sb3I6ICM0RTVCNkE7XG4gIGZvbnQtZmFtaWx5OiBcIkludGVyXCIsIFwiSW50ZXIgVUlcIiwgSGVsdmV0aWNhLCBBcmlhbCwgc2Fucy1zZXJpZjsgfVxuXG4jcGFnZS1wcmljaW5nIHRib2R5IC5kYXNoOmJlZm9yZSB7XG4gIGNvbnRlbnQ6ICdcXDIwMTQnO1xuICBjb2xvcjogI2MzY2NkYjsgfVxuXG4jcGFnZS1wcmljaW5nIHRib2R5IC5jaGVjazpiZWZvcmUge1xuICBmb250LWZhbWlseTogJ0lvbmljb25zJztcbiAgY29udGVudDogXCJcXGYyYmNcIjtcbiAgY29sb3I6ICMwMGQyODc7XG4gIGZvbnQtc2l6ZTogMTZweDtcbiAgbGluZS1oZWlnaHQ6IDFlbTsgfVxuXG4jcGFnZS1wcmljaW5nIHRib2R5IHRyOmxhc3QtY2hpbGQgdGQge1xuICBwYWRkaW5nLXRvcDogMzZweDtcbiAgcGFkZGluZy1ib3R0b206IDM2cHg7IH1cblxuI3BhZ2UtcHJpY2luZyB0Ym9keSAuYnRuIHtcbiAgd2lkdGg6IDEwMCU7IH1cblxuI3BhZ2UtcHJpY2luZyB0Ym9keSAuYnRuLnNtIHtcbiAgZm9udC1zaXplOiAxMnB4O1xuICBsZXR0ZXItc3BhY2luZzogMC4xZW07IH1cblxuI3BhZ2UtcHJpY2luZyB0Ym9keSAuYnRuLmRhcmsge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMjEzMDQ5O1xuICBjb2xvcjogI0NEREZGRjsgfVxuICAjcGFnZS1wcmljaW5nIHRib2R5IC5idG4uZGFyazpob3ZlciB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogIzI5M2M1YjsgfVxuXG4jcGFnZS1wcmljaW5nIC5idG4tc2Vjb25kYXJ5IHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2UxZWZmZjtcbiAgY29sb3I6ICMzODgwZmY7XG4gIGJveC1zaGFkb3c6IG5vbmU7IH1cbiAgI3BhZ2UtcHJpY2luZyAuYnRuLXNlY29uZGFyeTpob3ZlciB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogI2VhZjNmZDsgfVxuICAjcGFnZS1wcmljaW5nIC5idG4tc2Vjb25kYXJ5OmFjdGl2ZSwgI3BhZ2UtcHJpY2luZyAuYnRuLXNlY29uZGFyeTphY3RpdmU6Zm9jdXMsICNwYWdlLXByaWNpbmcgLmJ0bi1zZWNvbmRhcnk6YWN0aXZlOmhvdmVyIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZDhlYWZlOyB9XG5cbiNwYWdlLXByaWNpbmcgLnBpbm5lZCB0YWJsZSB7XG4gIHBhZGRpbmctdG9wOiAxNDBweDtcbiAgZGlzcGxheTogYmxvY2s7IH1cblxuI3BhZ2UtcHJpY2luZyAucGlubmVkIHRoZWFkIHtcbiAgcG9zaXRpb246IGZpeGVkO1xuICB0b3A6IDA7XG4gIGxlZnQ6IDA7XG4gIHdpZHRoOiAxMDAlO1xuICB6LWluZGV4OiAxMDAwOyB9XG4gICNwYWdlLXByaWNpbmcgLnBpbm5lZCB0aGVhZCB0ciB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICB3aWR0aDogMTAwJTtcbiAgICBtYXgtd2lkdGg6IDExMTBweDtcbiAgICBtYXJnaW46IDAgYXV0bztcbiAgICBwYWRkaW5nOiAwIDE1cHg7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlOyB9XG4gICNwYWdlLXByaWNpbmcgLnBpbm5lZCB0aGVhZCB0ZCB7XG4gICAgZmxleDogMSAwIGF1dG87XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgIGp1c3RpZnktY29udGVudDogZmxleC1lbmQ7IH1cblxuI3BhZ2UtcHJpY2luZyAucGlubmVkIHRib2R5IHtcbiAgZGlzcGxheTogYmxvY2s7IH1cbiAgI3BhZ2UtcHJpY2luZyAucGlubmVkIHRib2R5IHRyIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIHdpZHRoOiAxMDAlOyB9XG4gICNwYWdlLXByaWNpbmcgLnBpbm5lZCB0Ym9keSB0aCB7XG4gICAgZmxleDogMSAwIGF1dG87IH1cblxuI3BhZ2UtcHJpY2luZyAucGlubmVkLWF0LXBvaW50IHRoZWFkIHtcbiAgcG9zaXRpb246IGFic29sdXRlOyB9XG4gICNwYWdlLXByaWNpbmcgLnBpbm5lZC1hdC1wb2ludCB0aGVhZCB0ciB7XG4gICAgcGFkZGluZzogMDsgfVxuXG5AbWVkaWEgKG1heC13aWR0aDogODMwcHgpIHtcbiAgI3BhZ2UtcHJpY2luZyB0aGVhZCB0ciB0ZDpmaXJzdC1jaGlsZCxcbiAgI3BhZ2UtcHJpY2luZyB0aGVhZCB0ciB0aDpmaXJzdC1jaGlsZCxcbiAgI3BhZ2UtcHJpY2luZyB0Ym9keSB0ciB0ZDpmaXJzdC1jaGlsZCxcbiAgI3BhZ2UtcHJpY2luZyB0Ym9keSB0ciB0aDpmaXJzdC1jaGlsZCB7XG4gICAgcGFkZGluZy1sZWZ0OiAxNnB4OyB9XG4gICNwYWdlLXByaWNpbmcgdGhlYWQgdHIgdGQ6bGFzdC1jaGlsZCxcbiAgI3BhZ2UtcHJpY2luZyB0aGVhZCB0ciB0aDpsYXN0LWNoaWxkLFxuICAjcGFnZS1wcmljaW5nIHRib2R5IHRyIHRkOmxhc3QtY2hpbGQsXG4gICNwYWdlLXByaWNpbmcgdGJvZHkgdHIgdGg6bGFzdC1jaGlsZCB7XG4gICAgcGFkZGluZy1yaWdodDogMTZweDsgfVxuICAjcGFnZS1wcmljaW5nIC5idG4uc20ge1xuICAgIGZvbnQtc2l6ZTogMTJweDsgfVxuICAjcGFnZS1wcmljaW5nIHRoZWFkIHRoLFxuICAjcGFnZS1wcmljaW5nIHRoZWFkIHRkIHtcbiAgICBwYWRkaW5nLXRvcDogMjRweDtcbiAgICBwYWRkaW5nLWJvdHRvbTogMThweDsgfVxuICAjcGFnZS1wcmljaW5nIHRib2R5IHRoW2NvbHNwYW49XCI0XCJdIHNwYW4ge1xuICAgIHBhZGRpbmctdG9wOiA4cHg7XG4gICAgcGFkZGluZy1ib3R0b206IDA7IH1cbiAgI3BhZ2UtcHJpY2luZyAuYm94LFxuICAjcGFnZS1wcmljaW5nIC50YWJsZS13cmFwLFxuICAjcGFnZS1wcmljaW5nIHRhYmxlLFxuICAjcGFnZS1wcmljaW5nIC50YWJsZSB7XG4gICAgb3ZlcmZsb3c6IGhpZGRlbjsgfVxuICAjcGFnZS1wcmljaW5nIHRoZWFkIHtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgLypzZXBlcmF0ZXMgdGhlIGhlYWRlciBmcm9tIHRoZSBib2R5IGFsbG93aW5nIGl0IHRvIGJlIHBvc2l0aW9uZWQqL1xuICAgIHdpZHRoOiA4MDBweDtcbiAgICBvdmVyZmxvdzogdmlzaWJsZTsgfVxuICAgICNwYWdlLXByaWNpbmcgdGhlYWQgdGQsXG4gICAgI3BhZ2UtcHJpY2luZyB0aGVhZCB0aCB7XG4gICAgICBoZWlnaHQ6IDExOHB4O1xuICAgICAgcGFkZGluZy1sZWZ0OiAxNnB4O1xuICAgICAgcGFkZGluZy1yaWdodDogMTZweDsgfVxuICAgICNwYWdlLXByaWNpbmcgdGhlYWQgdGQge1xuICAgICAgLypmaXJzdCBjZWxsIGluIHRoZSBoZWFkZXIqL1xuICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAvKnNlcGVyYXRlcyB0aGUgZmlyc3QgY2VsbCBpbiB0aGUgaGVhZGVyIGZyb20gdGhlIGhlYWRlciovXG4gICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICAgIGp1c3RpZnktY29udGVudDogZmxleC1lbmQ7IH1cbiAgI3BhZ2UtcHJpY2luZyB0Ym9keSB7XG4gICAgaGVpZ2h0OiBjYWxjKDEwMHZoIC0gMTAwcHggLSAxMThweCk7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIC8qc2VwZXJhdGVzIHRoZSB0Ym9keSBmcm9tIHRoZSBoZWFkZXIqL1xuICAgIHdpZHRoOiBjYWxjKDEwMHZ3KTtcbiAgICBvdmVyZmxvdzogc2Nyb2xsO1xuICAgIC13ZWJraXQtb3ZlcmZsb3ctc2Nyb2xsaW5nOiB0b3VjaDsgfVxuICAjcGFnZS1wcmljaW5nIHRoZWFkIHRyLFxuICAjcGFnZS1wcmljaW5nIHRib2R5IHRyIHtcbiAgICBkaXNwbGF5OiBmbGV4OyB9XG4gICNwYWdlLXByaWNpbmcgdGhlYWQgdGgsXG4gICNwYWdlLXByaWNpbmcgdGJvZHkgdGQge1xuICAgIGZsZXg6IDAgMCAyMDRweDsgfVxuICAjcGFnZS1wcmljaW5nIHRoZWFkIHRkLFxuICAjcGFnZS1wcmljaW5nIHRib2R5IHRoIHtcbiAgICBmbGV4OiAwIDAgMTIwcHg7XG4gICAgYm9yZGVyLXJpZ2h0OiAxcHggc29saWQgcmdiYSgyMzIsIDIzNSwgMjQxLCAwLjYpOyB9XG4gICNwYWdlLXByaWNpbmcgdGJvZHkgdGhbY29sc3Bhbj1cIjRcIl0gc3BhbixcbiAgI3BhZ2UtcHJpY2luZyB0Ym9keSB0aCBzdHJvbmcsXG4gICNwYWdlLXByaWNpbmcgdGJvZHkgdHIuY29tYmluZWQgdGgge1xuICAgIGZvbnQtc2l6ZTogMTNweDtcbiAgICBsaW5lLWhlaWdodDogMThweDsgfVxuICAjcGFnZS1wcmljaW5nIHRib2R5IHRyLmNvbWJpbmVkIHRoLCAjcGFnZS1wcmljaW5nIHRib2R5IHRyLmNvbWJpbmVkIHRkIHtcbiAgICBwYWRkaW5nLXRvcDogMjJweDtcbiAgICBwYWRkaW5nLWJvdHRvbTogMTRweDsgfVxuICAjcGFnZS1wcmljaW5nIHRib2R5IHRyIHRoIHtcbiAgICAvKnRoZSBmaXJzdCBjZWxsIGluIGVhY2ggdHIqL1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgICAvKnNlcGVyYXRlcyB0aGUgZmlyc3QgY29sdW1uIGZyb20gdGhlIHRib2R5Ki8gfVxuICAjcGFnZS1wcmljaW5nIHRib2R5IHRyOmxhc3QtY2hpbGQgdGgge1xuICAgIGhlaWdodDogMTEwcHg7IH0gfVxuXG4jcGFnZS1wcmljaW5nIHtcbiAgZm9udC1mYW1pbHk6IFwiRWluYVwiLCBcIkhlbHZldGljYSBOZXVlXCIsIEhlbHZldGljYSwgc2Fucy1zZXJpZjtcbiAgcGFkZGluZy10b3A6IDA7IH1cbiAgI3BhZ2UtcHJpY2luZyAubmF2YmFyIHtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7IH1cbiAgI3BhZ2UtcHJpY2luZyBtYWluIHtcbiAgICBwYWRkaW5nOiAzMHB4IDA7IH1cbiAgI3BhZ2UtcHJpY2luZyAucHJvbW8tc2ltcGxlIHtcbiAgICBmb250LWZhbWlseTogXCJFaW5hXCIsIFwiSGVsdmV0aWNhIE5ldWVcIiwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmO1xuICAgIHBhZGRpbmctdG9wOiA2NHB4O1xuICAgIHBhZGRpbmctYm90dG9tOiA2NHB4O1xuICAgIGJhY2tncm91bmQtY29sb3I6ICNmM2Y1Zjk7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjsgfVxuICAgICNwYWdlLXByaWNpbmcgLnByb21vLXNpbXBsZSAuY29udGFpbmVyIGlvbmljLXF1aWNrLXNpZ251cCB7XG4gICAgICBtYXJnaW46IGF1dG87XG4gICAgICB3aWR0aDogNDgwcHg7IH1cbiAgI3BhZ2UtcHJpY2luZyAuY3RhIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjRjZGOEZCO1xuICAgIGJveC1zaGFkb3c6IGluc2V0IDBweCAtMnB4IDlweCByZ2JhKDAsIDAsIDAsIDAuMDIpOyB9XG4gICAgI3BhZ2UtcHJpY2luZyAuY3RhIC5jb250YWluZXIge1xuICAgICAgcGFkZGluZy1ib3R0b206IDE1cHg7IH1cbiAgICAjcGFnZS1wcmljaW5nIC5jdGEgaGdyb3VwIHtcbiAgICAgIHBhZGRpbmctdG9wOiA1NHB4O1xuICAgICAgbWF4LXdpZHRoOiA3MjBweDsgfVxuICAgICNwYWdlLXByaWNpbmcgLmN0YSBoNSB7XG4gICAgICBsaW5lLWhlaWdodDogMjVweDtcbiAgICAgIGZvbnQtc2l6ZTogMTJweDtcbiAgICAgIGZvbnQtZmFtaWx5OiBcIlJvYm90byBNb25vXCIsIE1lbmxvLCBNb25hY28sIENvbnNvbGFzLCBcIkNvdXJpZXIgTmV3XCIsIG1vbm9zcGFjZTtcbiAgICAgIGNvbG9yOiAjOTJBMUIzO1xuICAgICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcbiAgICAgIGxldHRlci1zcGFjaW5nOiAwLjE0ZW07XG4gICAgICBtYXJnaW4tYm90dG9tOiAyOHB4OyB9XG4gICAgI3BhZ2UtcHJpY2luZyAuY3RhIGgxIHtcbiAgICAgIGZvbnQtc2l6ZTogNTZweDtcbiAgICAgIGZvbnQtd2VpZ2h0OiA3MDA7XG4gICAgICBjb2xvcjogIzE3MWEyMDtcbiAgICAgIG1hcmdpbi1ib3R0b206IDhweDtcbiAgICAgIGxldHRlci1zcGFjaW5nOiAtMC4wMmVtOyB9XG4gICAgI3BhZ2UtcHJpY2luZyAuY3RhIHAge1xuICAgICAgbGluZS1oZWlnaHQ6IDMycHg7XG4gICAgICBmb250LXNpemU6IDIycHg7XG4gICAgICBjb2xvcjogIzVCNzA4QjtcbiAgICAgIGZvbnQtd2VpZ2h0OiA0MDA7XG4gICAgICBsZXR0ZXItc3BhY2luZzogLTAuMDFlbTtcbiAgICAgIG1hcmdpbi1ib3R0b206IDY0cHg7IH1cbiAgICAjcGFnZS1wcmljaW5nIC5jdGEgcCBiIHtcbiAgICAgIGZvbnQtd2VpZ2h0OiA3MDA7XG4gICAgICBjb2xvcjogIzI3MmEyZjsgfVxuICAjcGFnZS1wcmljaW5nIC5yb3VuZGVkLXRhYnMge1xuICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOyB9XG4gICAgI3BhZ2UtcHJpY2luZyAucm91bmRlZC10YWJzIC5yb3VuZGVkLXRhYnNfX3RhYi1pbm5lciB7XG4gICAgICBjb2xvcjogIzkyQTFCMztcbiAgICAgIHRyYW5zaXRpb246IGNvbG9yIDAuMnM7IH1cbiAgICAjcGFnZS1wcmljaW5nIC5yb3VuZGVkLXRhYnMgLnJvdW5kZWQtdGFic19fdGFiOmhvdmVyIC5yb3VuZGVkLXRhYnNfX3RhYi1pbm5lciB7XG4gICAgICBjb2xvcjogIzJFNEM3MzsgfVxuICAgICNwYWdlLXByaWNpbmcgLnJvdW5kZWQtdGFicyAucm91bmRlZC10YWJzX190YWItLWFjdGl2ZSAucm91bmRlZC10YWJzX190YWItaW5uZXIge1xuICAgICAgY29sb3I6ICM0RDhERkY7IH1cbiAgQG1lZGlhIChtYXgtd2lkdGg6IDc2N3B4KSB7XG4gICAgI3BhZ2UtcHJpY2luZyAucm91bmRlZC10YWJzX190YWItLWFjdGl2ZSB7XG4gICAgICBib3JkZXItYm90dG9tLWNvbG9yOiByZ2JhKDQ2LCA3NiwgMTE1LCAwLjYpOyB9IH1cbiAgI3BhZ2UtcHJpY2luZyAuc2VjdGlvbi1oZWFkZXIge1xuICAgIGZvbnQtc2l6ZTogMjZweDtcbiAgICBsaW5lLWhlaWdodDogMzhweDtcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgbGV0dGVyLXNwYWNpbmc6IC0wLjAxZW07XG4gICAgZm9udC13ZWlnaHQ6IDQwMDtcbiAgICBjb2xvcjogIzVCNzA4QjtcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgbWFyZ2luOiA3NHB4IDAgNzRweDsgfVxuICAgIEBtZWRpYSAobWF4LXdpZHRoOiA3NjhweCkge1xuICAgICAgI3BhZ2UtcHJpY2luZyAuc2VjdGlvbi1oZWFkZXIge1xuICAgICAgICBtYXJnaW46IDYwcHggYXV0byA2MHB4O1xuICAgICAgICBtYXgtd2lkdGg6IDUwMHB4OyB9IH1cbiAgICAjcGFnZS1wcmljaW5nIC5zZWN0aW9uLWhlYWRlciBhIHtcbiAgICAgIGNvbG9yOiAjNEQ4REZGO1xuICAgICAgdHJhbnNpdGlvbjogYm9yZGVyIDAuM3M7XG4gICAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgdHJhbnNwYXJlbnQ7IH1cbiAgICAjcGFnZS1wcmljaW5nIC5zZWN0aW9uLWhlYWRlciBhOmhvdmVyIHtcbiAgICAgIGNvbG9yOiAjNEQ4REZGO1xuICAgICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIHJnYmEoNzcsIDE0MSwgMjU1LCAwLjUpOyB9XG4gICNwYWdlLXByaWNpbmcgLmNvbnRhaW5lciB7XG4gICAgbWF4LXdpZHRoOiAxMTEwcHg7XG4gICAgd2lkdGg6IDEwMCUgIWltcG9ydGFudDsgfVxuICAjcGFnZS1wcmljaW5nIG1haW4ge1xuICAgIHBhZGRpbmctYm90dG9tOiAxNzBweDsgfVxuICAgIEBtZWRpYSAobWF4LXdpZHRoOiA3NjhweCkge1xuICAgICAgI3BhZ2UtcHJpY2luZyBtYWluIHtcbiAgICAgICAgcGFkZGluZy1ib3R0b206IDkwcHg7IH0gfVxuICAgICNwYWdlLXByaWNpbmcgbWFpbiAudG9nZ2xlIHtcbiAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gICAgICBwYWRkaW5nLWJvdHRvbTogNDBweDsgfVxuICAgICAgI3BhZ2UtcHJpY2luZyBtYWluIC50b2dnbGUgc3BhbiB7XG4gICAgICAgIHRyYW5zaXRpb246IGNvbG9yIDAuM3MsIGJhY2tncm91bmQgMC4zcztcbiAgICAgICAgZm9udC1zaXplOiAxMHB4O1xuICAgICAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xuICAgICAgICBjb2xvcjogIzk3YTRiYTtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjtcbiAgICAgICAgbGV0dGVyLXNwYWNpbmc6IDAuMDhlbTtcbiAgICAgICAgZm9udC13ZWlnaHQ6IDcwMDtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogMzBweDtcbiAgICAgICAgcGFkZGluZzogNXB4IDEzcHg7XG4gICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyOyB9XG4gICAgICAjcGFnZS1wcmljaW5nIG1haW4gLnRvZ2dsZSBzcGFuOmhvdmVyIHtcbiAgICAgICAgY3Vyc29yOiBwb2ludGVyO1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZWNmMWZiO1xuICAgICAgICBjb2xvcjogIzczOThkODsgfVxuICAgICAgI3BhZ2UtcHJpY2luZyBtYWluIC50b2dnbGUgc3BhbiArIHNwYW4ge1xuICAgICAgICBtYXJnaW4tbGVmdDogNnB4OyB9XG4gICAgICAjcGFnZS1wcmljaW5nIG1haW4gLnRvZ2dsZSBzcGFuIGIge1xuICAgICAgICBvcGFjaXR5OiAwLjU7IH1cbiAgICAgICNwYWdlLXByaWNpbmcgbWFpbiAudG9nZ2xlIC5hY3RpdmUsXG4gICAgICAjcGFnZS1wcmljaW5nIG1haW4gLnRvZ2dsZSAuYWN0aXZlOmhvdmVyIHtcbiAgICAgICAgY3Vyc29yOiBkZWZhdWx0O1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xuICAgICAgICBib3gtc2hhZG93OiAwcHggMnB4IDRweCByZ2JhKDIsIDgsIDIwLCAwLjEpLCAwcHggMHB4IDNweCByZ2JhKDIsIDgsIDIwLCAwLjA4KTtcbiAgICAgICAgY29sb3I6ICM2MzlDRkY7IH1cbiAgI3BhZ2UtcHJpY2luZyAubG9nb3Mge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgbWFyZ2luLXRvcDogNjBweDsgfVxuICAgICNwYWdlLXByaWNpbmcgLmxvZ29zIFtjbGFzc149XCJsb2dvXCJdIHtcbiAgICAgIGJhY2tncm91bmQtaW1hZ2U6IHVybChcIi9pbWcvcHJpY2luZy9lbnRlcnByaXNlLWxvZ29zLXYzLnBuZ1wiKTtcbiAgICAgIGJhY2tncm91bmQtc2l6ZTogNzZweCAxOThweDtcbiAgICAgIGJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7XG4gICAgICBmbGV4OiAwIDAgYXV0bzsgfVxuICAgICNwYWdlLXByaWNpbmcgLmxvZ29zIC5sb2dvLS1nZSB7XG4gICAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMXB4IC0xcHg7XG4gICAgICB3aWR0aDogMzRweDtcbiAgICAgIGhlaWdodDogMzRweDsgfVxuICAgICNwYWdlLXByaWNpbmcgLmxvZ29zIC5sb2dvLS12ZXJpem9uIHtcbiAgICAgIGJhY2tncm91bmQtcG9zaXRpb246IDAgLTM3cHg7XG4gICAgICB3aWR0aDogNzRweDtcbiAgICAgIGhlaWdodDogMTZweDsgfVxuICAgICNwYWdlLXByaWNpbmcgLmxvZ29zIC5sb2dvLS1jb21jYXN0IHtcbiAgICAgIGJhY2tncm91bmQtcG9zaXRpb246IDAgLTU1cHg7XG4gICAgICB3aWR0aDogNzZweDtcbiAgICAgIGhlaWdodDogMjBweDsgfVxuICAgICNwYWdlLXByaWNpbmcgLmxvZ29zIC5sb2dvLS1wYW5lcmEge1xuICAgICAgYmFja2dyb3VuZC1wb3NpdGlvbjogMCAtNzdweDtcbiAgICAgIHdpZHRoOiA3NnB4O1xuICAgICAgaGVpZ2h0OiAyNnB4OyB9XG4gICAgI3BhZ2UtcHJpY2luZyAubG9nb3MgLmxvZ28tLW1hc3RlcmNhcmQge1xuICAgICAgYmFja2dyb3VuZC1wb3NpdGlvbjogMCAtMTA1cHg7XG4gICAgICB3aWR0aDogNTJweDtcbiAgICAgIGhlaWdodDogMzBweDsgfVxuICAgICNwYWdlLXByaWNpbmcgLmxvZ29zIC5sb2dvLS11c2FhIHtcbiAgICAgIGJhY2tncm91bmQtcG9zaXRpb246IDAgLTEzN3B4O1xuICAgICAgd2lkdGg6IDMwcHg7XG4gICAgICBoZWlnaHQ6IDM0cHg7IH1cbiAgICAjcGFnZS1wcmljaW5nIC5sb2dvcyAubG9nby0tYW10cmFrIHtcbiAgICAgIGJhY2tncm91bmQtcG9zaXRpb246IDAgLTE3M3B4O1xuICAgICAgd2lkdGg6IDYycHg7XG4gICAgICBoZWlnaHQ6IDI1cHg7IH1cbiAgICBAbWVkaWEgKG1heC13aWR0aDogNzY4cHgpIHtcbiAgICAgICNwYWdlLXByaWNpbmcgLmxvZ29zIHtcbiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gICAgICAgIGZsZXgtd3JhcDogd3JhcDtcbiAgICAgICAgbWFyZ2luLXRvcDogNDBweDtcbiAgICAgICAgbWFyZ2luLWJvdHRvbTogLTIwcHg7IH1cbiAgICAgICAgI3BhZ2UtcHJpY2luZyAubG9nb3MgW2NsYXNzXj1cImxvZ29cIl0ge1xuICAgICAgICAgIG1hcmdpbjogMjBweDsgfSB9XG4gICNwYWdlLXByaWNpbmcgLnNvb24ge1xuICAgIG1hcmdpbi1ib3R0b206IDZweDtcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNlZWU7XG4gICAgcGFkZGluZy10b3A6IDA7IH1cbiAgICAjcGFnZS1wcmljaW5nIC5zb29uIC5iYWRnZSB7XG4gICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgICBib3R0b206IC0xNHB4OyB9XG4gICNwYWdlLXByaWNpbmcgLnBpbGwge1xuICAgIGZvbnQtZmFtaWx5OiBcIkludGVyXCIsIFwiSW50ZXIgVUlcIiwgSGVsdmV0aWNhLCBBcmlhbCwgc2Fucy1zZXJpZjtcbiAgICBmb250LXdlaWdodDogNjAwO1xuICAgIGJvcmRlcjogMXB4IHNvbGlkICNERUUzRUE7XG4gICAgYm9yZGVyLXJhZGl1czogMjRweDtcbiAgICBmb250LXNpemU6IDhweCAhaW1wb3J0YW50O1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICBsZXR0ZXItc3BhY2luZzogMC4xZW07XG4gICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcbiAgICBwYWRkaW5nOiA0cHggNXB4IDNweDtcbiAgICBiYWNrZ3JvdW5kOiAjRkFGQkZEO1xuICAgIGNvbG9yOiAjQjJCRUNEOyB9XG4gICAgI3BhZ2UtcHJpY2luZyAucGlsbC0taW5kaWdvIHtcbiAgICAgIGJhY2tncm91bmQ6IG5vbmU7XG4gICAgICBjb2xvcjogIzdDQUJGRjtcbiAgICAgIGJvcmRlcjogMXB4IHNvbGlkICNCMkNFRkY7XG4gICAgICBwYWRkaW5nOiA0cHggN3B4IDNweDsgfVxuICAgICNwYWdlLXByaWNpbmcgLnBpbGwtLWFxdWEge1xuICAgICAgYmFja2dyb3VuZDogbm9uZTtcbiAgICAgIGNvbG9yOiAjQUNEOEZCO1xuICAgICAgYm9yZGVyOiAxcHggc29saWQgIzc4QjhGODtcbiAgICAgIHBhZGRpbmc6IDRweCA3cHggM3B4OyB9XG4gICNwYWdlLXByaWNpbmcgLmJhZGdlIHtcbiAgICBiYWNrZ3JvdW5kOiAjNGE4YmZjO1xuICAgIGNvbG9yOiB3aGl0ZTtcbiAgICBmb250LXNpemU6IDgwJTtcbiAgICBmb250LXdlaWdodDogNjAwO1xuICAgIHBhZGRpbmctdG9wOiA1cHg7XG4gICAgdmVydGljYWwtYWxpZ246IDJweDsgfVxuICAjcGFnZS1wcmljaW5nIC5ib3gge1xuICAgIG1hcmdpbi10b3A6IDMwcHg7XG4gICAgYm9yZGVyLXJhZGl1czogMTZweDtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTtcbiAgICBmb250LWZhbWlseTogXCJFaW5hXCIsIFwiSGVsdmV0aWNhIE5ldWVcIiwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmO1xuICAgIG92ZXJmbG93OiBoaWRkZW47IH1cbiAgI3BhZ2UtcHJpY2luZyAudGFibGUtd3JhcCB7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIG92ZXJmbG93LXg6IGF1dG87IH1cbiAgICAjcGFnZS1wcmljaW5nIC50YWJsZS13cmFwIHRpcHB5IC50aXAucmlnaHQge1xuICAgICAgdG9wOiAtNjBweDsgfVxuICAjcGFnZS1wcmljaW5nIC5mZWF0dXJlcyBoNSB7XG4gICAgZm9udC13ZWlnaHQ6IGJvbGQ7XG4gICAgZm9udC1zaXplOiAxNHB4O1xuICAgIGxldHRlci1zcGFjaW5nOiAwLjFlbTtcbiAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xuICAgIGNvbG9yOiAjRkZGRkZGOyB9XG4gICNwYWdlLXByaWNpbmcgLmZlYXR1cmVzIGxpIHtcbiAgICBmb250LWZhbWlseTogXCJJbnRlclwiLCBcIkludGVyIFVJXCIsIEhlbHZldGljYSwgQXJpYWwsIHNhbnMtc2VyaWY7XG4gICAgZm9udC1zaXplOiAxNnB4O1xuICAgIGxldHRlci1zcGFjaW5nOiAtMC4wMWVtO1xuICAgIGNvbG9yOiAjNDE0RDVDO1xuICAgIHBhZGRpbmc6IDEwcHggMDsgfVxuICAgICNwYWdlLXByaWNpbmcgLmZlYXR1cmVzIGxpOmJlZm9yZSB7XG4gICAgICBjb250ZW50OiAnJztcbiAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICAgIGJhY2tncm91bmQtaW1hZ2U6IHVybChcIi9pbWcvY2hlY2ttYXJrLWxpZ2h0LWdyYXkuc3ZnXCIpO1xuICAgICAgYmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdDtcbiAgICAgIGJhY2tncm91bmQtc2l6ZTogMTAwJTtcbiAgICAgIHdpZHRoOiAyNHB4O1xuICAgICAgaGVpZ2h0OiAyNHB4O1xuICAgICAgbWFyZ2luLXJpZ2h0OiAxMnB4O1xuICAgICAgbWFyZ2luLWJvdHRvbTogLTZweDsgfVxuICAgIEBtZWRpYSAobWF4LXdpZHRoOiA5OTJweCkge1xuICAgICAgI3BhZ2UtcHJpY2luZyAuZmVhdHVyZXMgbGk6OmJlZm9yZSB7XG4gICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgICAgdG9wOiAycHg7XG4gICAgICAgIHdpZHRoOiAxOHB4O1xuICAgICAgICBoZWlnaHQ6IDE4cHg7XG4gICAgICAgIGZsZXg6IDAgMCAxOHB4OyB9IH1cbiAgI3BhZ2UtcHJpY2luZyBtYWluIGhncm91cDpub3QoLmZlYXR1cmUtbGlzdHNfX2hlYWRpbmcpIHtcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7IH1cbiAgICAjcGFnZS1wcmljaW5nIG1haW4gaGdyb3VwOm5vdCguZmVhdHVyZS1saXN0c19faGVhZGluZykgaDQge1xuICAgICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcbiAgICAgIGZvbnQtd2VpZ2h0OiA3MDA7XG4gICAgICBmb250LXNpemU6IDE2cHg7XG4gICAgICBsZXR0ZXItc3BhY2luZzogLjFlbTtcbiAgICAgIG1hcmdpbi10b3A6IDMycHg7XG4gICAgICBjb2xvcjogIzk5OTsgfVxuICAgICNwYWdlLXByaWNpbmcgbWFpbiBoZ3JvdXA6bm90KC5mZWF0dXJlLWxpc3RzX19oZWFkaW5nKSBoMyB7XG4gICAgICBmb250LXdlaWdodDogNjAwO1xuICAgICAgbWF4LXdpZHRoOiA5NzVweDtcbiAgICAgIG1hcmdpbjogMzJweCBhdXRvIDE2cHg7XG4gICAgICBmb250LXNpemU6IDI0cHg7XG4gICAgICBsaW5lLWhlaWdodDogMS44ZW07IH1cbiAgI3BhZ2UtcHJpY2luZyAuYnRuLnNtIHtcbiAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xuICAgIGZvbnQtc2l6ZTogMTNweDtcbiAgICBsZXR0ZXItc3BhY2luZzogMC4wNWVtO1xuICAgIGZvbnQtd2VpZ2h0OiA3MDA7IH1cbiAgI3BhZ2UtcHJpY2luZyAuY29tcGFyaXNvbiB7XG4gICAgcGFkZGluZy10b3A6IDExNXB4OyB9XG4gICAgQG1lZGlhIChtYXgtd2lkdGg6IDc2OHB4KSB7XG4gICAgICAjcGFnZS1wcmljaW5nIC5jb21wYXJpc29uIHtcbiAgICAgICAgcGFkZGluZy10b3A6IDEwMHB4OyB9IH1cbiAgICBAbWVkaWEgKG1heC13aWR0aDogODMwcHgpIHtcbiAgICAgICNwYWdlLXByaWNpbmcgLmNvbXBhcmlzb24ge1xuICAgICAgICBwYWRkaW5nLWxlZnQ6IDA7XG4gICAgICAgIHBhZGRpbmctcmlnaHQ6IDA7IH1cbiAgICAgICAgI3BhZ2UtcHJpY2luZyAuY29tcGFyaXNvbiBoMyB7XG4gICAgICAgICAgcGFkZGluZzogMCAxNnB4OyB9IH1cbiAgI3BhZ2UtcHJpY2luZyAuZmFxIC5jb250YWluZXIgPiBoMyxcbiAgI3BhZ2UtcHJpY2luZyAuY29tcGFyaXNvbiA+IGgzIHtcbiAgICBmb250LXdlaWdodDogNjAwO1xuICAgIGxldHRlci1zcGFjaW5nOiAtMC4wM2VtO1xuICAgIGZvbnQtc2l6ZTogMjhweDsgfVxuICAjcGFnZS1wcmljaW5nIC5hbHNvIC5jb250YWluZXIgPiBoMyB7XG4gICAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgICBsZXR0ZXItc3BhY2luZzogLTAuMDNlbTtcbiAgICBmb250LXNpemU6IDM2cHg7IH1cbiAgI3BhZ2UtcHJpY2luZyAub2Zmd2hpdGUtYmcge1xuICAgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCgxODBkZWcsICNGNkY4RkIgMCUsICNGRkZGRkYgMTAwJSk7IH1cbiAgI3BhZ2UtcHJpY2luZyAuYWxzbyBoNCxcbiAgI3BhZ2UtcHJpY2luZyAuZmFxIGg0LFxuICAjcGFnZS1wcmljaW5nIC5iZW5lZml0cyBoNCB7XG4gICAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgICBsaW5lLWhlaWdodDogMjhweDtcbiAgICBmb250LXNpemU6IDIwcHg7XG4gICAgbGV0dGVyLXNwYWNpbmc6IC0wLjAxZW07XG4gICAgbWFyZ2luLWJvdHRvbTogOHB4O1xuICAgIGNvbG9yOiAjMDAwMDAwOyB9XG4gICNwYWdlLXByaWNpbmcgLmFsc28gcCxcbiAgI3BhZ2UtcHJpY2luZyAuZmFxIHAsXG4gICNwYWdlLXByaWNpbmcgLmJlbmVmaXRzIHAge1xuICAgIGZvbnQtZmFtaWx5OiBcIkludGVyXCIsIFwiSW50ZXIgVUlcIiwgSGVsdmV0aWNhLCBBcmlhbCwgc2Fucy1zZXJpZjtcbiAgICBsaW5lLWhlaWdodDogMjZweDtcbiAgICBmb250LXNpemU6IDE2cHg7XG4gICAgbGV0dGVyLXNwYWNpbmc6IC0wLjAxZW07XG4gICAgY29sb3I6ICM3Mzg0OUE7XG4gICAgZm9udC13ZWlnaHQ6IDQwMDsgfVxuICAgICNwYWdlLXByaWNpbmcgLmFsc28gcCBzdHJvbmcsXG4gICAgI3BhZ2UtcHJpY2luZyAuZmFxIHAgc3Ryb25nLFxuICAgICNwYWdlLXByaWNpbmcgLmJlbmVmaXRzIHAgc3Ryb25nIHtcbiAgICAgIGNvbG9yOiAjMjQyODJlOyB9XG4gICAgI3BhZ2UtcHJpY2luZyAuYWxzbyBwIGNvZGUsXG4gICAgI3BhZ2UtcHJpY2luZyAuZmFxIHAgY29kZSxcbiAgICAjcGFnZS1wcmljaW5nIC5iZW5lZml0cyBwIGNvZGUge1xuICAgICAgZm9udC1mYW1pbHk6IFwiUm9ib3RvIE1vbm9cIiwgTWVubG8sIE1vbmFjbywgQ29uc29sYXMsIFwiQ291cmllciBOZXdcIiwgbW9ub3NwYWNlO1xuICAgICAgYmFja2dyb3VuZDogbm9uZTtcbiAgICAgIGNvbG9yOiAjODU4MkZCO1xuICAgICAgcGFkZGluZzogMDtcbiAgICAgIGZvbnQtc2l6ZTogMTRweDtcbiAgICAgIGJvcmRlci1yYWRpdXM6IDA7XG4gICAgICBmb250LXdlaWdodDogNzAwOyB9XG4gICNwYWdlLXByaWNpbmcgLmFsc28ge1xuICAgIGJvcmRlci1sZWZ0OiAwO1xuICAgIGJvcmRlci1yaWdodDogMDtcbiAgICBwYWRkaW5nOiAwIDAgMjAwcHg7IH1cbiAgICAjcGFnZS1wcmljaW5nIC5hbHNvIHVsIHtcbiAgICAgIHBhZGRpbmc6IDA7XG4gICAgICBsaXN0LXN0eWxlLXR5cGU6IG5vbmU7XG4gICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgZmxleC13cmFwOiB3cmFwO1xuICAgICAgbWFyZ2luOiA0OHB4IC00OHB4IC00OHB4OyB9XG4gICAgI3BhZ2UtcHJpY2luZyAuYWxzbyBsaSB7XG4gICAgICBmbGV4OiAwIDAgMzMlO1xuICAgICAgcGFkZGluZzogMCA0OHB4IDQ4cHg7IH1cbiAgICAjcGFnZS1wcmljaW5nIC5hbHNvIC5waWxsIHtcbiAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgIHRvcDogLTNweDtcbiAgICAgIG1hcmdpbi1sZWZ0OiA1cHg7IH1cbiAgICBAbWVkaWEgKG1heC13aWR0aDogOTkycHgpIHtcbiAgICAgICNwYWdlLXByaWNpbmcgLmFsc28ge1xuICAgICAgICBwYWRkaW5nLWJvdHRvbTogMTAwcHg7IH1cbiAgICAgICAgI3BhZ2UtcHJpY2luZyAuYWxzbyBsaSB7XG4gICAgICAgICAgZmxleDogMCAwIDUwJTsgfSB9XG4gICAgQG1lZGlhIChtYXgtd2lkdGg6IDc2OHB4KSB7XG4gICAgICAjcGFnZS1wcmljaW5nIC5hbHNvIHVsIHtcbiAgICAgICAgbWFyZ2luOiAyNHB4IC0yNHB4IC0yNHB4OyB9XG4gICAgICAjcGFnZS1wcmljaW5nIC5hbHNvIGxpIHtcbiAgICAgICAgcGFkZGluZzogMCAyNHB4IDI0cHg7IH0gfVxuICAgIEBtZWRpYSAobWF4LXdpZHRoOiA0ODBweCkge1xuICAgICAgI3BhZ2UtcHJpY2luZyAuYWxzbyBsaSB7XG4gICAgICAgIGZsZXg6IDAgMCAxMDAlOyB9IH1cbiAgI3BhZ2UtcHJpY2luZyAuZmFxIHtcbiAgICBwYWRkaW5nLXRvcDogMjAwcHg7XG4gICAgcGFkZGluZy1ib3R0b206IDIwMHB4OyB9XG4gICAgI3BhZ2UtcHJpY2luZyAuZmFxIC5pdGVtcyB7XG4gICAgICBkaXNwbGF5OiBmbGV4OyB9XG4gICAgI3BhZ2UtcHJpY2luZyAuZmFxIHVsIHtcbiAgICAgIGZsZXg6IDE7XG4gICAgICBtYXJnaW46IDAgYXV0bztcbiAgICAgIHBhZGRpbmctdG9wOiA0OXB4O1xuICAgICAgcGFkZGluZy1sZWZ0OiAwOyB9XG4gICAgI3BhZ2UtcHJpY2luZyAuZmFxIHVsICsgdWwge1xuICAgICAgcGFkZGluZy1sZWZ0OiAxMDBweDsgfVxuICAgICNwYWdlLXByaWNpbmcgLmZhcSBsaSB7XG4gICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgIGxpc3Qtc3R5bGU6IG5vbmU7IH1cbiAgICAjcGFnZS1wcmljaW5nIC5mYXEgbGkgKyBsaSB7XG4gICAgICBwYWRkaW5nLXRvcDogNDBweDsgfVxuICAgICNwYWdlLXByaWNpbmcgLmZhcSBoNCB7XG4gICAgICBsaW5lLWhlaWdodDogMjhweDsgfVxuICAgICNwYWdlLXByaWNpbmcgLmZhcSBwIHtcbiAgICAgIGxpbmUtaGVpZ2h0OiAyOHB4OyB9XG4gICAgQG1lZGlhIChtYXgtd2lkdGg6IDk5MnB4KSB7XG4gICAgICAjcGFnZS1wcmljaW5nIC5mYXEge1xuICAgICAgICBwYWRkaW5nLXRvcDogMTAwcHg7XG4gICAgICAgIHBhZGRpbmctYm90dG9tOiAxMDBweDsgfSB9XG4gICAgQG1lZGlhIChtYXgtd2lkdGg6IDc2OHB4KSB7XG4gICAgICAjcGFnZS1wcmljaW5nIC5mYXEgbGkgKyBsaSB7XG4gICAgICAgIHBhZGRpbmctdG9wOiA0MHB4OyB9IH1cbiAgICBAbWVkaWEgKG1heC13aWR0aDogNzY4cHgpIHtcbiAgICAgICNwYWdlLXByaWNpbmcgLmZhcSAuaXRlbXMge1xuICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOyB9XG4gICAgICAjcGFnZS1wcmljaW5nIC5mYXEgdWwgKyB1bCB7XG4gICAgICAgIHBhZGRpbmctbGVmdDogMDsgfVxuICAgICAgI3BhZ2UtcHJpY2luZyAuZmFxIHVsLFxuICAgICAgI3BhZ2UtcHJpY2luZyAuZmFxIGxpICsgbGkge1xuICAgICAgICBwYWRkaW5nLXRvcDogMjRweDsgfSB9XG4gICNwYWdlLXByaWNpbmcgLmJlbmVmaXRzIHtcbiAgICBtYXJnaW46IDEwMHB4IDAgMTYwcHg7IH1cbiAgICAjcGFnZS1wcmljaW5nIC5iZW5lZml0cyB1bCB7XG4gICAgICBsaXN0LXN0eWxlLXR5cGU6IG5vbmU7XG4gICAgICBtYXJnaW46IDA7XG4gICAgICBwYWRkaW5nOiAwO1xuICAgICAgZGlzcGxheTogZmxleDsgfVxuICAgICNwYWdlLXByaWNpbmcgLmJlbmVmaXRzIGxpIHtcbiAgICAgIGZsZXg6IDE7IH1cbiAgICAjcGFnZS1wcmljaW5nIC5iZW5lZml0cyBsaSArIGxpIHtcbiAgICAgIG1hcmdpbi1sZWZ0OiA3NnB4OyB9XG4gICAgI3BhZ2UtcHJpY2luZyAuYmVuZWZpdHMgc3ZnIHtcbiAgICAgIG1hcmdpbi1ib3R0b206IDhweDsgfVxuICAgIEBtZWRpYSAobWF4LXdpZHRoOiA3NjhweCkge1xuICAgICAgI3BhZ2UtcHJpY2luZyAuYmVuZWZpdHMge1xuICAgICAgICBtYXJnaW46IDgwcHggMCA4MHB4OyB9XG4gICAgICAgICNwYWdlLXByaWNpbmcgLmJlbmVmaXRzIHVsIHtcbiAgICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7IH1cbiAgICAgICAgI3BhZ2UtcHJpY2luZyAuYmVuZWZpdHMgbGkge1xuICAgICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICAgICAgICBtYXgtd2lkdGg6IDU0MHB4OyB9XG4gICAgICAgICNwYWdlLXByaWNpbmcgLmJlbmVmaXRzIGxpICsgbGkge1xuICAgICAgICAgIG1hcmdpbi1sZWZ0OiAwO1xuICAgICAgICAgIG1hcmdpbi10b3A6IDM2cHg7IH0gfVxuICAjcGFnZS1wcmljaW5nIC5mb3JtLXdyYXBwZXIub2Zmd2hpdGUtYmcge1xuICAgIHBhZGRpbmctdG9wOiAxNjBweDsgfVxuICAjcGFnZS1wcmljaW5nIC5mb3JtLXdyYXBwZXIgLmNvbnRhaW5lciB7XG4gICAgbWF4LXdpZHRoOiA3NTZweDsgfVxuICAjcGFnZS1wcmljaW5nIC5mb3JtLXdyYXBwZXIgaGdyb3VwIHtcbiAgICBtYXJnaW4tYm90dG9tOiAyMHB4OyB9XG4gICAgI3BhZ2UtcHJpY2luZyAuZm9ybS13cmFwcGVyIGhncm91cCBoMiB7XG4gICAgICBmb250LXdlaWdodDogNjAwO1xuICAgICAgbGluZS1oZWlnaHQ6IDEuMjtcbiAgICAgIGZvbnQtc2l6ZTogMjhweDtcbiAgICAgIGxldHRlci1zcGFjaW5nOiAtMC4wMWVtO1xuICAgICAgY29sb3I6ICMwMDAwMDA7XG4gICAgICBtYXJnaW4tYm90dG9tOiAwOyB9XG4gICAgI3BhZ2UtcHJpY2luZyAuZm9ybS13cmFwcGVyIGhncm91cCBwIHtcbiAgICAgIG1hcmdpbi10b3A6IDZweDtcbiAgICAgIGxpbmUtaGVpZ2h0OiAyOHB4O1xuICAgICAgZm9udC1zaXplOiAyMnB4O1xuICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgICAgbGV0dGVyLXNwYWNpbmc6IC0wLjAxZW07XG4gICAgICBmb250LXdlaWdodDogNDAwO1xuICAgICAgY29sb3I6ICM1QjcwOEI7IH1cbiAgQG1lZGlhIChtYXgtd2lkdGg6IDc2OHB4KSB7XG4gICAgI3BhZ2UtcHJpY2luZyAuZm9ybS13cmFwcGVyLm9mZndoaXRlLWJnIHtcbiAgICAgIHBhZGRpbmctdG9wOiA4MHB4OyB9IH1cbiAgI3BhZ2UtcHJpY2luZyAubW9kYWwgaGdyb3VwIHtcbiAgICBwYWRkaW5nLXRvcDogMThweDtcbiAgICBwYWRkaW5nLWJvdHRvbTogMzJweDsgfVxuICAjcGFnZS1wcmljaW5nIC5tb2RhbCBoMyB7XG4gICAgZm9udC1zaXplOiAyOXB4O1xuICAgIGZvbnQtd2VpZ2h0OiA2MDA7XG4gICAgY29sb3I6ICMxNzFhMjA7XG4gICAgbWFyZ2luOiAxOHB4IDAgOHB4O1xuICAgIGxldHRlci1zcGFjaW5nOiAtMC4wM2VtOyB9XG4gICNwYWdlLXByaWNpbmcgLm1vZGFsIHAge1xuICAgIGZvbnQtc2l6ZTogMThweDtcbiAgICBsaW5lLWhlaWdodDogMjhweDtcbiAgICBjb2xvcjogIzRjNTc2YztcbiAgICBtYXgtd2lkdGg6IDQwMHB4O1xuICAgIG1hcmdpbjogMCBhdXRvOyB9XG4gICNwYWdlLXByaWNpbmcgLm1vZGFsIGZvcm0ge1xuICAgIG1heC13aWR0aDogMTAwJTtcbiAgICBwYWRkaW5nOiAwIDE1cHggMTVweDsgfVxuICAjcGFnZS1wcmljaW5nIC5tb2RhbCAuaHNfc3VibWl0IHtcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgZm9udC13ZWlnaHQ6IDYwMDsgfVxuIl19 */\n"
  },
  {
    "path": "content/css/pages/pro/index.css",
    "content": "#page-products {\n  background-color: #fff; }\n  #page-products .pre-header {\n    margin-bottom: 0px; }\n  #page-products .cta,\n  #page-products .pro-nav,\n  #page-products .pro-video,\n  #page-products .sub-header,\n  #page-products main {\n    font-family: \"Eina\", \"Helvetica Neue\", Helvetica, sans-serif; }\n  #page-products .sub-header > .container {\n    -ms-flex-align: center;\n        align-items: center; }\n    #page-products .sub-header > .container:before {\n      border-top-color: rgba(255, 255, 255, 0.1); }\n  #page-products > .cta {\n    position: relative;\n    background-image: linear-gradient(90deg, #6521fc 0%, #389fff 100%);\n    margin-top: -140px;\n    padding-top: 140px; }\n    #page-products > .cta .cta__background {\n      content: '';\n      background-position: center center;\n      background-size: cover;\n      display: block;\n      width: 100%;\n      height: 100%;\n      position: absolute;\n      z-index: 0;\n      top: -4px;\n      left: 0;\n      background-image: linear-gradient(90deg, #6030fc 0%, #5fa2fe 100%);\n      background-size: cover;\n      opacity: 0.5;\n      overflow: hidden; }\n      #page-products > .cta .cta__background > div {\n        width: 100%;\n        height: 100%;\n        position: absolute;\n        background-image: linear-gradient(90deg, #fff 0%, rgba(255, 255, 255, 0) 75%);\n        -webkit-transform: translate(-20px, 0) rotate(-3deg) skew(16deg, 0deg) scale(1, 1.5);\n                transform: translate(-20px, 0) rotate(-3deg) skew(16deg, 0deg) scale(1, 1.5);\n        -webkit-transform-origin: top;\n                transform-origin: top; }\n        #page-products > .cta .cta__background > div:nth-child(1) {\n          opacity: 0.05;\n          top: 75%;\n          left: 0%; }\n        #page-products > .cta .cta__background > div:nth-child(2) {\n          opacity: 0.10;\n          top: 50%;\n          left: 15.3846153846%; }\n        #page-products > .cta .cta__background > div:nth-child(3) {\n          opacity: 0.09;\n          top: 25%;\n          left: 30.7692307692%; }\n        #page-products > .cta .cta__background > div:nth-child(4) {\n          opacity: 0.15;\n          top: 0%;\n          left: 46.1538461538%; }\n        #page-products > .cta .cta__background > div:nth-child(5) {\n          opacity: 0.16;\n          top: -25%;\n          left: 61.5384615385%; }\n        #page-products > .cta .cta__background > div:nth-child(6) {\n          opacity: 0.08;\n          top: -50%;\n          left: 76.9230769231%; }\n        @media (max-width: 768px) {\n          #page-products > .cta .cta__background > div:nth-child(1) {\n            opacity: 0.05;\n            top: 60%;\n            left: 0%; }\n          #page-products > .cta .cta__background > div:nth-child(2) {\n            opacity: 0.10;\n            top: 45%;\n            left: 25%; }\n          #page-products > .cta .cta__background > div:nth-child(3) {\n            opacity: 0.09;\n            top: 30%;\n            left: 50%; }\n          #page-products > .cta .cta__background > div:nth-child(4) {\n            opacity: 0.15;\n            top: 15%;\n            left: 75%; }\n          #page-products > .cta .cta__background > div:nth-child(5) {\n            opacity: 0.16;\n            top: 0%;\n            left: 100%; }\n          #page-products > .cta .cta__background > div:nth-child(6) {\n            opacity: 0.08;\n            top: -15%;\n            left: 125%; } }\n    #page-products > .cta hgroup {\n      text-align: center;\n      position: relative;\n      max-width: 830px;\n      padding-bottom: 354px;\n      padding-top: 54px; }\n      #page-products > .cta hgroup h3 {\n        font-family: \"Roboto Mono\", Menlo, Monaco, Consolas, \"Courier New\", monospace;\n        text-transform: uppercase;\n        letter-spacing: 0.18em;\n        font-size: 12px;\n        line-height: 18px;\n        font-weight: 600;\n        color: #e3e6ff; }\n      #page-products > .cta hgroup h1 {\n        margin-top: 36px;\n        font-size: 56px;\n        line-height: 60px;\n        font-weight: 700;\n        letter-spacing: -.038em;\n        margin-bottom: 264x; }\n      #page-products > .cta hgroup p {\n        letter-spacing: -.03em;\n        max-width: 724px;\n        line-height: 1.8em;\n        margin: 0 auto;\n        font-size: 22px;\n        font-weight: 400;\n        color: #fff;\n        font-family: \"Inter\", \"Inter UI\", Helvetica, Arial, sans-serif; }\n      #page-products > .cta hgroup .cta-buttons {\n        margin-top: 30px;\n        padding-left: 24px;\n        padding-right: 24px;\n        color: white;\n        letter-spacing: -.02em; }\n        #page-products > .cta hgroup .cta-buttons > .btn {\n          -ms-flex-align: center;\n              align-items: center;\n          background-color: #7898ff;\n          border-radius: 2em;\n          display: -ms-inline-flexbox;\n          display: inline-flex;\n          font-size: 15px;\n          font-weight: 700;\n          text-transform: uppercase;\n          letter-spacing: 0.10em;\n          padding: 14px 26px; }\n          #page-products > .cta hgroup .cta-buttons > .btn:not(:hover) {\n            box-shadow: none; }\n        #page-products > .cta hgroup .cta-buttons > .btn--primary {\n          background-color: #fff;\n          color: #4a68ff; }\n          #page-products > .cta hgroup .cta-buttons > .btn--primary:after {\n            transition: -webkit-transform 0.3s;\n            transition: transform 0.3s;\n            transition: transform 0.3s, -webkit-transform 0.3s;\n            content: '\\f287';\n            font-family: 'Ionicons';\n            font-size: 15px;\n            margin-left: 8px; }\n          #page-products > .cta hgroup .cta-buttons > .btn--primary:hover:after {\n            -webkit-transform: translateX(2px);\n                    transform: translateX(2px); }\n        #page-products > .cta hgroup .cta-buttons .sales {\n          color: rgba(255, 255, 255, 0.5);\n          margin-top: 6px;\n          display: inline-block;\n          text-decoration: underline;\n          transition: .2s color; }\n          #page-products > .cta hgroup .cta-buttons .sales:hover {\n            color: rgba(255, 255, 255, 0.8); }\n      @media (max-width: 768px) {\n        #page-products > .cta hgroup {\n          padding-bottom: 140px; } }\n      @media (max-width: 480px) {\n        #page-products > .cta hgroup {\n          padding-top: 14px; }\n          #page-products > .cta hgroup h1 {\n            font-size: 40px;\n            line-height: 46px; }\n          #page-products > .cta hgroup h3 {\n            max-width: 246px;\n            margin-left: auto;\n            margin-right: auto; }\n          #page-products > .cta hgroup p {\n            font-size: 18px;\n            line-height: 1.6em; }\n          #page-products > .cta hgroup .btn {\n            width: 100%;\n            margin-right: 0;\n            -ms-flex-pack: center;\n                justify-content: center;\n            margin-bottom: 8px; } }\n  #page-products .cta-overlay {\n    margin-top: -239px;\n    position: relative;\n    z-index: 1;\n    overflow: hidden;\n    display: -ms-flexbox;\n    display: flex;\n    -ms-flex-direction: column;\n        flex-direction: column;\n    -ms-flex-align: center;\n        align-items: center;\n    width: 100%;\n    padding: 0 20px; }\n    #page-products .cta-overlay .app-screenshot {\n      overflow: hidden;\n      width: 100%;\n      max-width: 960px;\n      background-color: #fff;\n      background-repeat: no-repeat;\n      background-size: cover;\n      border-radius: 16px;\n      box-shadow: 0 8px 16px rgba(0, 14, 41, 0.08), 0 30px 60px rgba(0, 11, 34, 0.15); }\n      #page-products .cta-overlay .app-screenshot img {\n        width: 100%; }\n    @media (max-width: 768px) {\n      #page-products .cta-overlay {\n        margin-top: -76px; } }\n  #page-products .customer-logos {\n    padding: 0;\n    width: 100%;\n    max-width: 1024px;\n    margin-top: 30px;\n    display: -ms-flexbox;\n    display: flex;\n    -ms-flex-wrap: wrap;\n        flex-wrap: wrap;\n    -ms-flex-align: center;\n        align-items: center;\n    -ms-flex-pack: justify;\n        justify-content: space-between; }\n    #page-products .customer-logos [class^=\"customer-logo\"] {\n      background-image: url(\"/img/pro/pro-customer-sprite.png\");\n      background-repeat: no-repeat;\n      background-size: 121px 256px;\n      margin: 34px 42px; }\n    @media (max-width: 991px) {\n      #page-products .customer-logos {\n        -ms-flex-pack: center;\n            justify-content: center; }\n        #page-products .customer-logos [class^=\"customer-logo\"] {\n          margin: 22px 34px; } }\n    @media (max-width: 768px) {\n      #page-products .customer-logos {\n        padding: 8px; }\n        #page-products .customer-logos [class^=\"customer-logo\"] {\n          margin: 16px 18px; } }\n    #page-products .customer-logos .customer-logo--lendingclub {\n      width: 121px;\n      height: 18px;\n      background-position: 0 0; }\n    #page-products .customer-logos .customer-logo--mcdonalds {\n      background-position: 0 -19px;\n      width: 24px;\n      height: 20px; }\n    #page-products .customer-logos .customer-logo--study {\n      background-position: 0 -40px;\n      width: 118px;\n      height: 18px; }\n    #page-products .customer-logos .customer-logo--cat {\n      background-position: 0 -59px;\n      width: 34px;\n      height: 20px; }\n    #page-products .customer-logos .customer-logo--ge {\n      background-position: 0 -80px;\n      width: 24px;\n      height: 24px; }\n    #page-products .customer-logos .customer-logo--comcast {\n      background-position: 0 -105px;\n      width: 73px;\n      height: 20px; }\n    #page-products .customer-logos .customer-logo--amtrak {\n      background-position: 0 -126px;\n      width: 47px;\n      height: 20px; }\n    #page-products .customer-logos .customer-logo--airbus {\n      background-position: 0 -147px;\n      width: 107px;\n      height: 20px; }\n    #page-products .customer-logos .customer-logo--aaa {\n      background-position: 0 -168px;\n      width: 45px;\n      height: 27px; }\n    #page-products .customer-logos .customer-logo--deloitte {\n      background-position: 0 -195px;\n      width: 87px;\n      height: 16px; }\n    #page-products .customer-logos .customer-logo--usaa {\n      background-position: 0 -212px;\n      width: 21px;\n      height: 24px; }\n    #page-products .customer-logos .customer-logo--ing {\n      background-position: 0 -237px;\n      width: 73px;\n      height: 19px; }\n  #page-products .pro-video {\n    -ms-flex-align: center;\n        align-items: center;\n    display: -ms-flexbox;\n    display: flex;\n    -ms-flex-pack: center;\n        justify-content: center;\n    position: relative;\n    z-index: 1; }\n    #page-products .pro-video:before {\n      content: \"\";\n      display: block;\n      height: 50%;\n      left: 0;\n      position: absolute;\n      top: 0;\n      width: 100%;\n      z-index: 1; }\n    #page-products .pro-video .video-player {\n      max-width: 900px;\n      width: 100%;\n      position: relative;\n      z-index: 2; }\n      #page-products .pro-video .video-player:hover {\n        cursor: pointer; }\n      #page-products .pro-video .video-player:not(.is-playing):hover .video-player-frame {\n        -webkit-transform: scale(0.99);\n                transform: scale(0.99); }\n      #page-products .pro-video .video-player:not(.is-playing):hover .video-player-button {\n        -webkit-transform: translate(-50%, -50%) scale(1.05);\n                transform: translate(-50%, -50%) scale(1.05); }\n      #page-products .pro-video .video-player.is-ready .video-player-button {\n        display: block; }\n      #page-products .pro-video .video-player.is-playing .video-player-button {\n        display: none; }\n    #page-products .pro-video .video-player-button {\n      display: none;\n      left: 50%;\n      position: absolute;\n      top: 50%;\n      -webkit-transform: translate(-50%, -50%) scale(1);\n              transform: translate(-50%, -50%) scale(1);\n      transition: -webkit-transform 400ms cubic-bezier(0.175, 0.885, 0.32, 1.275);\n      transition: transform 400ms cubic-bezier(0.175, 0.885, 0.32, 1.275);\n      transition: transform 400ms cubic-bezier(0.175, 0.885, 0.32, 1.275), -webkit-transform 400ms cubic-bezier(0.175, 0.885, 0.32, 1.275);\n      width: 80px;\n      z-index: 1; }\n    #page-products .pro-video .video-player-frame {\n      background-image: url(\"/img/pro/pro-dash-video-screenshot.png\");\n      background-position: center center;\n      background-repeat: no-repeat;\n      background-size: contain;\n      border-radius: 8px;\n      height: 0;\n      overflow: hidden;\n      padding-bottom: 64.67%;\n      position: relative;\n      -webkit-transform: scale(1);\n              transform: scale(1);\n      transition: -webkit-transform 400ms cubic-bezier(0.19, 1, 0.22, 1);\n      transition: transform 400ms cubic-bezier(0.19, 1, 0.22, 1);\n      transition: transform 400ms cubic-bezier(0.19, 1, 0.22, 1), -webkit-transform 400ms cubic-bezier(0.19, 1, 0.22, 1); }\n      #page-products .pro-video .video-player-frame > iframe {\n        height: 100%;\n        left: 0;\n        position: absolute;\n        top: 0;\n        width: 100%; }\n  #page-products .pro-benefits {\n    padding-left: 60px; }\n    #page-products .pro-benefits ul {\n      list-style-type: none;\n      margin: 0;\n      padding: 0; }\n    #page-products .pro-benefits li {\n      position: relative;\n      padding-left: 40px; }\n      #page-products .pro-benefits li + li {\n        margin-top: 22px; }\n      #page-products .pro-benefits li::before {\n        display: block;\n        content: '';\n        width: 24px;\n        height: 24px;\n        background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADEAAAAwCAYAAAC4wJK5AAAD/ElEQVRogc3a24tVZRzG8c9ac9jOOOjIMGoMSXQxRBc16UWS4YVikBKKUGTEUF35BwjhX5BCF0EXRhcVU0QUCBYR5AESJIkwu4kYL4JA85A56dC4Z2xWF+8a3TOzD2vtw5oeWOzN3uv9/Z4v73G974qSJHHwY+1QH7ZhK0bTaxAD6f/TmMJkep3HOcy0mri7xfJ92Itx7EApQ5mnK76XcQYTOKFJoGYhBnEQhzDUZAwC9PPpdRNv4z2hxjIrzpk0wutCc3hLawBLNZTGnExzRFkL5oHYiJP4AMN53OXUcJrjZJqzobJCbMdF7GzOV1Pamebc3ujG+Oc/Ggbbj2+xoWVb+bUhzb2/3k2NamI/vpBt1OmUSqmHmiD1ILbj0wb3FKVY8FK1adUyuBGfW9kaWKqS4GlZZ68GEeETK9MHGmmD4G3R8FsN4jXFjkJ5tVPweF9LIQZxtCg3Leio4BXLIQ7q7ETWLg0LXrEYok9YC62IhtewOt8wckjwvAhir/auhTJrZB37trB3Sy6QIcHzIojxNnvLpJF17B6ju4u1/ex5ilL2tfU4DyD6hOeBQlUJsKD+XnqzQ+xAXwxx5FkFT2zVAGZm+fICd+5mDlPCtlATkWfa7LGu6gH8NZ073NYYIh5rm8MG2jjYVgAYjREl4aG+41q/hj3tBWABImJd6xbra/0aXti8uNO2AQAGQ00kVuct2V8KE1QWdRAABkJNRNkfygkT0r4t4RppUIcdBkA6T0RR9v2evt4ws67tD21791htkCIAMB0jiSN3spboiuiq6Ji1QAoCgKkYSXfst6wlpsuc+DF8LmgpSIEAMBkj6epyKU+p2zO1QZ7YVCgACxCrenyft2QtkG2jhQLA+RgeXe9MFJnLW7oaSKXuznUcoIxzMWx+xFRvtx+aiVILZPYeX//UUQDCjvpMDMdO+bfUbaLZSPdB0tVneY6vLnD9dluM1tMERBevJI6d4vERa3+94vf5RMZ5eLlKPWwa4vIt/qnRxNqom3jYQk3AL5f9XerxbitRy3NculoIAOEsY4Ylux0Dq7wTR24VYqE13RAOY7AE4sZtf3Z3OVy4pfx6U8Vp0rIdwNl73o8j3xVqKZ9O46PKH6ptYybziZdxvQhHOXUNryKp/LHWrvhVvChMJv8XlfGS4G2R6p09nMUrmO+QqTyaF7ycrfZnowOU41a+Rsqph+O1bshyCnQczwntsWhdS3PXBCD7UdZZjAkjQ1E6neas2oQqFT/5UOagV7ELbwiTTad0I82xS5VOXE15DxUTfCjsUx0W1i/t0s005miaI6l/+wM1ezI6hSPCAuwAvtFc5y+nZQ+ksY7I+V4Hrb9lM4PP0mvFXhX6D3mVKTX2fENsAAAAAElFTkSuQmCC\");\n        background-repeat: no-repeat;\n        background-size: 100%;\n        position: absolute;\n        top: 0;\n        left: 0; }\n      #page-products .pro-benefits li h4 {\n        margin: 0;\n        font-weight: 600;\n        font-size: 16px;\n        line-height: 20px; }\n      #page-products .pro-benefits li p {\n        color: #545c6a;\n        font-size: 15px;\n        line-height: 24px; }\n  #page-products .hero {\n    background: no-repeat center center;\n    background-size: cover;\n    overflow: hidden;\n    padding-top: 0;\n    padding-bottom: 0; }\n    #page-products .hero .content {\n      width: 39%;\n      text-align: left;\n      padding-top: 200px;\n      padding-bottom: 220px;\n      color: #070f1a;\n      min-height: 724px;\n      position: relative; }\n      #page-products .hero .content.dark {\n        color: rgba(255, 255, 255, 0.8); }\n        #page-products .hero .content.dark h2,\n        #page-products .hero .content.dark .hero__cta {\n          color: #151d2b; }\n        #page-products .hero .content.dark p {\n          color: #596a89; }\n      #page-products .hero .content h2 {\n        font-size: 36px;\n        letter-spacing: -0.03em;\n        font-weight: 600;\n        margin-bottom: 12px; }\n      #page-products .hero .content p {\n        font-size: 20px;\n        line-height: 32px;\n        font-family: \"Inter\", \"Inter UI\", Helvetica, Arial, sans-serif;\n        font-weight: 400; }\n      #page-products .hero .content h4 {\n        font-family: \"Roboto Mono\", Menlo, Monaco, Consolas, \"Courier New\", monospace;\n        padding-top: 100px;\n        position: relative;\n        color: #808fa7; }\n        #page-products .hero .content h4::before {\n          background: url(\"/img/pro/product-header-icons.png\") 0 0 no-repeat;\n          background-size: 64px;\n          width: 64px;\n          height: 64px;\n          content: '';\n          position: absolute;\n          top: 0; }\n    #page-products .hero__cta-bar {\n      display: -ms-flexbox;\n      display: flex;\n      -ms-flex-align: center;\n          align-items: center; }\n      #page-products .hero__cta-bar a + a {\n        margin-left: 20px; }\n    #page-products .hero__cta-bar-secondary {\n      margin-left: 30px; }\n    @media (max-width: 767px) {\n      #page-products .hero__cta-bar {\n        -ms-flex-direction: column;\n            flex-direction: column; }\n      #page-products .hero__cta-bar-secondary {\n        margin-left: 0;\n        margin-top: 24px; } }\n    #page-products .hero__cta {\n      border-bottom-style: solid;\n      border-bottom-width: 2px;\n      color: inherit;\n      font-size: 18px;\n      font-weight: 700;\n      padding-bottom: 4px;\n      transition: border-bottom-color 100ms ease-in-out; }\n      #page-products .hero__cta:after {\n        content: '\\f287';\n        font-family: 'Ionicons';\n        font-size: 16px;\n        margin-left: 5px; }\n      #page-products .hero__cta:hover {\n        border-bottom-color: transparent; }\n    #page-products .hero__icon-link {\n      transition: opacity 0.3s;\n      display: inline-block;\n      opacity: 0.7; }\n      #page-products .hero__icon-link i {\n        font-size: 30px;\n        color: #fff; }\n      #page-products .hero__icon-link:hover {\n        opacity: 1; }\n    #page-products .hero .container {\n      position: relative; }\n      #page-products .hero .container::before {\n        background-repeat: no-repeat;\n        background-position: right 0;\n        background-size: contain;\n        top: 0;\n        right: 0;\n        left: 0;\n        bottom: 0;\n        content: '';\n        display: block;\n        position: absolute;\n        opacity: 0;\n        transition: .2s opacity; }\n    #page-products .hero.active .container::before {\n      opacity: 1; }\n    #page-products .hero h4 {\n      font-size: 11px;\n      font-weight: 700;\n      letter-spacing: 0.2em;\n      color: #272a2f;\n      text-transform: uppercase;\n      margin-bottom: 30px; }\n    #page-products .hero h3 {\n      font-size: 36px;\n      font-weight: 700;\n      letter-spacing: -.02em;\n      margin-bottom: 30px; }\n    #page-products .hero h2 {\n      color: #272a2f;\n      font-size: 36px;\n      margin-bottom: 23px;\n      margin-top: 14px;\n      font-weight: 700;\n      letter-spacing: -.015em; }\n    #page-products .hero p {\n      font-size: 16px;\n      font-weight: 600;\n      letter-spacing: -.026em;\n      line-height: 1.8em;\n      margin-bottom: 30px;\n      color: #5e6777; }\n      #page-products .hero p strong {\n        color: #272a2f;\n        font-weight: 700; }\n      #page-products .hero p a:hover {\n        color: #4a8bfc; }\n    #page-products .hero .btn {\n      padding: 13px 15px;\n      font-size: 14px;\n      font-weight: 600; }\n      #page-products .hero .btn strong {\n        font-weight: 700; }\n      #page-products .hero .btn::after {\n        font-family: 'Ionicons';\n        content: '\\f287';\n        font-size: 15px;\n        line-height: 10px;\n        vertical-align: -1px;\n        margin-left: 8px;\n        font-weight: 600;\n        display: inline-block;\n        transition: .2s transform; }\n      #page-products .hero .btn:hover::after {\n        -webkit-transform: translate3d(2px, 0, 0);\n                transform: translate3d(2px, 0, 0); }\n    @media (max-width: 480px) {\n      #page-products .hero .content h2 {\n        font-size: 30px; }\n      #page-products .hero .content p {\n        font-size: 18px;\n        line-height: 1.6em; } }\n  #page-products #overview {\n    background-color: #fff;\n    color: #272a2f;\n    padding-bottom: 180px;\n    padding-top: 140px; }\n    #page-products #overview hgroup {\n      max-width: 740px;\n      margin: 0 auto 68px; }\n      #page-products #overview hgroup h3 {\n        font-weight: 600;\n        color: #070f1a;\n        margin-bottom: 14px; }\n      #page-products #overview hgroup p {\n        font-size: 22px;\n        line-height: 36px;\n        color: #43546f;\n        font-weight: 400; }\n    #page-products #overview .features {\n      padding: 0;\n      list-style: none;\n      display: -ms-flexbox;\n      display: flex;\n      -ms-flex-pack: justify;\n          justify-content: space-between;\n      max-width: 960px;\n      margin: 0 auto; }\n      #page-products #overview .features h4 {\n        font-size: 20px;\n        text-transform: none;\n        letter-spacing: -.02em;\n        margin-top: 5px;\n        margin-bottom: 13px;\n        font-weight: 600; }\n      #page-products #overview .features p {\n        font-family: \"Inter\", \"Inter UI\", Helvetica, Arial, sans-serif;\n        font-size: 16px;\n        line-height: 28px;\n        color: #687e99;\n        letter-spacing: -.015em;\n        font-weight: 400; }\n    #page-products #overview li {\n      padding-top: 68px;\n      -ms-flex: 0 1 320px;\n          flex: 0 1 320px;\n      position: relative; }\n      #page-products #overview li::before {\n        background: url(\"/img/pro/pro-feature-icons.png\") 0 0 no-repeat;\n        background-size: 48px;\n        height: 48px;\n        width: 48px;\n        content: '';\n        position: absolute;\n        top: 0; }\n      #page-products #overview li.faster::before {\n        background-position: 0 -48px; }\n      #page-products #overview li.happier::before {\n        background-position: 0 -96px; }\n      #page-products #overview li + li {\n        margin-left: 24px; }\n    @media (max-width: 520px) {\n      #page-products #overview .features {\n        display: block; }\n      #page-products #overview li {\n        text-align: center; }\n        #page-products #overview li::before {\n          left: calc( 50% - 24px); }\n        #page-products #overview li + li {\n          margin-left: 0; } }\n    @media (max-width: 768px) {\n      #page-products #overview {\n        padding-bottom: 68px;\n        padding-top: 102px; } }\n    @media (max-width: 480px) {\n      #page-products #overview {\n        padding-bottom: 48px;\n        padding-top: 72px; }\n        #page-products #overview hgroup {\n          margin-bottom: 42px; }\n          #page-products #overview hgroup h3 {\n            font-size: 30px; }\n          #page-products #overview hgroup p {\n            font-size: 18px;\n            line-height: 1.6em; } }\n  #page-products #updates {\n    background-image: linear-gradient(0deg, white 0%, #f6f8fb 100%);\n    background-size: 100%; }\n    #page-products #updates h4::before {\n      background-position: 0 0; }\n    #page-products #updates .content {\n      padding-top: 179px;\n      position: relative;\n      z-index: 10; }\n      @media (max-width: 1219px) {\n        #page-products #updates .content {\n          padding-top: 148px; } }\n    #page-products #updates .anim-updates {\n      position: absolute;\n      z-index: 4;\n      top: 0;\n      bottom: 0;\n      left: 50%;\n      -webkit-transform: translateX(-100px);\n              transform: translateX(-100px);\n      display: -ms-flexbox;\n      display: flex;\n      -ms-flex-align: center;\n          align-items: center; }\n    #page-products #updates .anim-updates__root {\n      width: 726px;\n      height: 437px;\n      position: relative; }\n    #page-products #updates .anim-updates__foreground,\n    #page-products #updates .anim-updates__background {\n      width: 100%;\n      height: 100%;\n      position: absolute;\n      top: 0;\n      left: 0; }\n    #page-products #updates .anim-updates__foreground {\n      z-index: 10;\n      -webkit-transform: translateZ(1000px);\n              transform: translateZ(1000px); }\n    #page-products #updates .anim-updates__background {\n      z-index: 1;\n      -webkit-transform: translateZ(100px);\n              transform: translateZ(100px); }\n    #page-products #updates .anim-updates__device {\n      width: 726px;\n      height: 437px;\n      background-image: url(\"/img/pro/updates-illustration-device.png\");\n      background-repeat: no-repeat;\n      background-size: 726px 437px;\n      position: absolute;\n      top: 0;\n      left: 0;\n      z-index: 5;\n      -webkit-transform: translateZ(500px);\n              transform: translateZ(500px); }\n    #page-products #updates .anim-updates__screen {\n      width: 308px;\n      height: 554px;\n      background: #5d37ff;\n      position: absolute;\n      top: 28px;\n      left: 406px;\n      -webkit-transform-origin: top left;\n              transform-origin: top left;\n      -webkit-transform: rotateX(60deg) rotateY(0.7deg) rotateZ(36.5deg) skew(2deg, -1.5deg);\n              transform: rotateX(60deg) rotateY(0.7deg) rotateZ(36.5deg) skew(2deg, -1.5deg); }\n    @media (max-width: 991px) {\n      #page-products #updates .anim-updates {\n        display: none; }\n      #page-products #updates .content {\n        min-height: 0;\n        padding-top: 64px;\n        padding-bottom: 64px;\n        width: 100%;\n        text-align: center; }\n        #page-products #updates .content h4::before {\n          left: calc(50% - 32px); } }\n  #page-products #build {\n    background-image: linear-gradient(0deg, white 0%, #f6f8fb 100%);\n    padding: 100px 0; }\n    #page-products #build h4::before {\n      background-position: 0 -64px; }\n    #page-products #build .anim-build {\n      position: absolute;\n      left: 0;\n      top: 0;\n      bottom: 0;\n      width: 39%;\n      display: -ms-flexbox;\n      display: flex;\n      -ms-flex-pack: center;\n          justify-content: center;\n      -ms-flex-align: center;\n          align-items: center; }\n    #page-products #build .anim-build__text {\n      fill: #5d37ff;\n      text-transform: uppercase;\n      font-size: 12px;\n      font-weight: 700;\n      letter-spacing: 0.05em; }\n    #page-products #build .content {\n      padding-top: 140px; }\n    @media (max-width: 991px) {\n      #page-products #build .container::before {\n        background-size: 40%;\n        top: 128px;\n        bottom: 128px; }\n      #page-products #build .content {\n        padding-top: 64px;\n        min-height: 0;\n        width: 40%; } }\n    @media (max-width: 767px) {\n      #page-products #build {\n        background-image: none;\n        padding: 0; }\n        #page-products #build .anim-build {\n          display: none; }\n        #page-products #build .content {\n          min-height: 0;\n          padding-top: 64px;\n          padding-bottom: 64px;\n          width: 100%;\n          text-align: center; }\n          #page-products #build .content h4::before {\n            left: calc(50% - 32px); } }\n  #page-products #reporting {\n    background: #081b17;\n    padding: 50px 0; }\n    #page-products #reporting h4,\n    #page-products #reporting .btn {\n      color: #607d79; }\n      #page-products #reporting h4::before,\n      #page-products #reporting .btn::before {\n        background-position: 0 -256px; }\n    #page-products #reporting .anim-reporting {\n      width: 1084px;\n      height: 100%;\n      display: -ms-flexbox;\n      display: flex;\n      overflow: hidden;\n      position: absolute;\n      top: 0;\n      left: 50%;\n      -webkit-transform: translateX(-240px);\n              transform: translateX(-240px);\n      bottom: 0;\n      z-index: 1; }\n    #page-products #reporting #anim-reporting__svg {\n      width: 100%;\n      height: 100%; }\n    #page-products #reporting .anim-reporting__bg {\n      fill: #0d2b25; }\n    #page-products #reporting .anim-reporting__scan {\n      -webkit-animation-name: cycle-fade;\n              animation-name: cycle-fade;\n      -webkit-animation-duration: 2s;\n              animation-duration: 2s;\n      -webkit-animation-direction: alternate;\n              animation-direction: alternate;\n      -webkit-animation-iteration-count: infinite;\n              animation-iteration-count: infinite;\n      -webkit-animation-timing-function: ease;\n              animation-timing-function: ease; }\n\n@-webkit-keyframes cycle-fade {\n  from {\n    opacity: 0.4; }\n  to {\n    opacity: 1; } }\n\n@keyframes cycle-fade {\n  from {\n    opacity: 0.4; }\n  to {\n    opacity: 1; } }\n    #page-products #reporting .anim-reporting__bug {\n      fill: #ff3267;\n      -webkit-transform-origin: center center;\n              transform-origin: center center; }\n    #page-products #reporting .content {\n      padding-top: 172px;\n      width: 40%;\n      z-index: 5; }\n    @media (max-width: 991px) {\n      #page-products #reporting .content {\n        min-height: 0;\n        padding-top: 64px;\n        width: 100%; }\n      #page-products #reporting .anim-reporting {\n        opacity: 0.7; }\n      #page-products #reporting .anim-reporting__clipped {\n        -webkit-transform: scale(0.8);\n                transform: scale(0.8); } }\n    @media (max-width: 991px) {\n      #page-products #reporting {\n        padding: 0; }\n        #page-products #reporting .anim-reporting {\n          display: none; }\n        #page-products #reporting .content {\n          min-height: 0;\n          padding-top: 64px;\n          padding-bottom: 64px;\n          width: 100%;\n          text-align: center; }\n          #page-products #reporting .content h4::before {\n            left: calc(50% - 32px); } }\n  #page-products #push {\n    background: #ffbc2a no-repeat center bottom;\n    background-image: linear-gradient(to right, #ffce39 0%, #ffad20 100%);\n    background-size: 100%; }\n    #page-products #push h4 {\n      color: #d26d00; }\n      #page-products #push h4::before {\n        background-position: 0 -320px; }\n    #page-products #push .container::before {\n      background-image: url(\"/img/pro/product-push-img.png\");\n      background-position: left 0;\n      top: 80px;\n      bottom: 80px; }\n      @media (max-width: 1219px) {\n        #page-products #push .container::before {\n          top: 130px;\n          bottom: 130px; } }\n    #page-products #push .content {\n      padding-top: 172px;\n      width: 35%; }\n    @media (max-width: 991px) {\n      #page-products #push .container::before {\n        display: none; }\n      #page-products #push .content {\n        min-height: 0;\n        padding-top: 64px;\n        padding-bottom: 64px;\n        width: 100%;\n        text-align: center; }\n        #page-products #push .content h4::before {\n          left: calc(50% - 32px); } }\n  #page-products #automate {\n    background-color: #f9fafc;\n    background-image: linear-gradient(0deg, white 0%, #f6f8fb 100%);\n    background-size: 100%;\n    position: relative;\n    padding-bottom: 160px; }\n    #page-products #automate h4::before {\n      background-position: 0 -128px; }\n    #page-products #automate .anim-automate {\n      position: absolute;\n      top: 220px;\n      left: 50%;\n      margin-left: -400px; }\n      #page-products #automate .anim-automate svg .connector {\n        opacity: 0;\n        stroke-dasharray: 80px; }\n      #page-products #automate .anim-automate svg rect.four {\n        opacity: 0.6; }\n      #page-products #automate .anim-automate svg #top,\n      #page-products #automate .anim-automate svg #bottom {\n        position: relative; }\n      #page-products #automate .anim-automate svg #bottom {\n        z-index: 1; }\n      #page-products #automate .anim-automate svg #top {\n        z-index: 2; }\n      #page-products #automate .anim-automate svg > g {\n        -webkit-transform: translateY(50px);\n                transform: translateY(50px); }\n    @media (max-width: 1219px) {\n      #page-products #automate {\n        padding-bottom: 390px; }\n        #page-products #automate .content {\n          width: 100%;\n          max-width: 500px;\n          text-align: center;\n          margin-left: auto;\n          margin-right: auto; }\n        #page-products #automate .content h4::before {\n          left: calc(50% - 32px); }\n        #page-products #automate .anim-automate {\n          -webkit-transform: scale(0.8);\n                  transform: scale(0.8);\n          top: 470px;\n          margin-left: -670px; } }\n    @media (max-width: 768px) {\n      #page-products #automate {\n        padding: 0; }\n        #page-products #automate .anim-automate {\n          display: none; }\n        #page-products #automate .content {\n          min-height: 0;\n          padding-top: 64px;\n          padding-bottom: 64px;\n          width: 100%;\n          text-align: center; }\n          #page-products #automate .content h4::before {\n            left: calc(50% - 32px); } }\n    #page-products #automate .anim-automate_ui {\n      position: absolute;\n      width: 100%;\n      height: 100%; }\n      #page-products #automate .anim-automate_ui > div {\n        position: absolute;\n        -webkit-transform: translate(-50%, -50%);\n                transform: translate(-50%, -50%);\n        max-width: 114px;\n        text-align: center;\n        display: -ms-flexbox;\n        display: flex;\n        -ms-flex-direction: column;\n            flex-direction: column;\n        -ms-flex-align: center;\n            align-items: center;\n        opacity: 0; }\n        #page-products #automate .anim-automate_ui > div p {\n          font-family: \"Inter\", \"Inter UI\", Helvetica, Arial, sans-serif;\n          margin: 0;\n          color: #fff;\n          font-size: 13px;\n          line-height: 17px; }\n        #page-products #automate .anim-automate_ui > div span {\n          display: block;\n          opacity: 0.6;\n          font-family: 12px; }\n        #page-products #automate .anim-automate_ui > div:before {\n          content: '';\n          display: block;\n          width: 20px;\n          height: 50px;\n          margin-bottom: 12px;\n          background-repeat: no-repeat;\n          background-size: 100%; }\n      #page-products #automate .anim-automate_ui .master:before {\n        background-image: url(\"/img/pro/pro-automate-animation/master.png\");\n        width: 100px;\n        height: 30px;\n        background-size: 100px 30px; }\n      #page-products #automate .anim-automate_ui .staging:before {\n        background-image: url(\"/img/pro/pro-automate-animation/staging.png\");\n        width: 110px;\n        height: 30px;\n        background-size: 110px 30px; }\n      #page-products #automate .anim-automate_ui .qa:before {\n        background-image: url(\"/img/pro/pro-automate-animation/qa.png\");\n        width: 61px;\n        height: 30px;\n        background-size: 61px 30px; }\n      #page-products #automate .anim-automate_ui .android:before,\n      #page-products #automate .anim-automate_ui .ios:before,\n      #page-products #automate .anim-automate_ui .web:before {\n        width: 62px;\n        height: 62px;\n        background-size: 62px 62px; }\n      #page-products #automate .anim-automate_ui .android:before {\n        background-image: url(\"/img/pro/pro-automate-animation/android.png\"); }\n      #page-products #automate .anim-automate_ui .ios:before {\n        background-image: url(\"/img/pro/pro-automate-animation/ios.png\"); }\n      #page-products #automate .anim-automate_ui .web:before {\n        background-image: url(\"/img/pro/pro-automate-animation/js.png\"); }\n      #page-products #automate .anim-automate_ui .testflight:before {\n        background-image: url(\"/img/pro/pro-automate-animation/testflight.png\");\n        width: 53px;\n        height: 53px;\n        background-size: 53px 53px; }\n      #page-products #automate .anim-automate_ui .playstore:before {\n        background-image: url(\"/img/pro/pro-automate-animation/playstore.png\");\n        width: 50px;\n        height: 55px;\n        background-size: 50px 55px; }\n      #page-products #automate .anim-automate_ui .webhook:before {\n        background-image: url(\"/img/pro/pro-automate-animation/webhook.png\");\n        width: 58px;\n        height: 54px;\n        background-size: 58px 54px; }\n      #page-products #automate .anim-automate_ui .master,\n      #page-products #automate .anim-automate_ui .staging,\n      #page-products #automate .anim-automate_ui .qa {\n        left: 50%;\n        top: 195px; }\n      #page-products #automate .anim-automate_ui .android,\n      #page-products #automate .anim-automate_ui .ios,\n      #page-products #automate .anim-automate_ui .web {\n        left: 50%;\n        top: 368px; }\n      #page-products #automate .anim-automate_ui .android,\n      #page-products #automate .anim-automate_ui .web {\n        margin-left: 174px; }\n      #page-products #automate .anim-automate_ui .ios {\n        margin-left: -178px; }\n      #page-products #automate .anim-automate_ui .testflight,\n      #page-products #automate .anim-automate_ui .playstore,\n      #page-products #automate .anim-automate_ui .webhook {\n        left: 50%;\n        top: 540px; }\n      #page-products #automate .anim-automate_ui .testflight {\n        margin-left: -352px; }\n      #page-products #automate .anim-automate_ui .playstore {\n        margin-left: 352px; }\n  #page-products .pro-features {\n    padding: 196px 0;\n    background-color: #394072; }\n    #page-products .pro-features hgroup {\n      text-align: center;\n      max-width: 560px;\n      margin-left: auto;\n      margin-right: auto; }\n      #page-products .pro-features hgroup h3 {\n        color: #fff;\n        font-size: 36px;\n        font-weight: 600;\n        line-height: 40px;\n        margin-top: 0; }\n      #page-products .pro-features hgroup p {\n        color: #d7d9eb;\n        font-family: \"Inter\", \"Inter UI\", Helvetica, Arial, sans-serif;\n        font-size: 20px;\n        line-height: 32px; }\n    #page-products .pro-features ul {\n      margin: 0 -24px 0;\n      padding: 0;\n      display: -ms-flexbox;\n      display: flex;\n      -ms-flex-wrap: wrap;\n          flex-wrap: wrap;\n      list-style-type: none; }\n    #page-products .pro-features li {\n      -ms-flex: 0 0 25%;\n          flex: 0 0 25%;\n      margin-top: 86px;\n      padding: 0 24px; }\n      #page-products .pro-features li h5 {\n        color: #fff;\n        font-size: 20px;\n        font-weight: 600;\n        margin-bottom: 18px;\n        margin-top: 0;\n        display: -ms-flexbox;\n        display: flex;\n        -ms-flex-align: center;\n            align-items: center; }\n      #page-products .pro-features li p {\n        color: #b9bcd8;\n        font-family: \"Inter\", \"Inter UI\", Helvetica, Arial, sans-serif;\n        font-size: 16px;\n        line-height: 28px; }\n    #page-products .pro-features [class^=\"pro-feature--\"] h5::before {\n      display: block;\n      content: '';\n      width: 24px;\n      height: 24px;\n      background-image: url(\"/img/pro/pro-feature-sprite.png\");\n      background-repeat: no-repeat;\n      background-size: 24px 192px;\n      margin-right: 12px; }\n    #page-products .pro-features .pro-feature--app-dashboard h5::before {\n      background-position: 0 0; }\n    #page-products .pro-features .pro-feature--configurable h5::before {\n      background-position: 0 calc(-1 * 24px); }\n    #page-products .pro-features .pro-feature--clean-builds h5::before {\n      background-position: 0 calc(-2 * 24px); }\n    #page-products .pro-features .pro-feature--mobile-ci-cd h5::before {\n      background-position: 0 calc(-3 * 24px); }\n    #page-products .pro-features .pro-feature--git-integrations h5::before {\n      background-position: 0 calc(-4 * 24px); }\n    #page-products .pro-features .pro-feature--connected-services h5::before {\n      background-position: 0 calc(-5 * 24px); }\n    #page-products .pro-features .pro-feature--live-app-updating h5::before {\n      background-position: 0 calc(-6 * 24px); }\n    #page-products .pro-features .pro-feature--role-based-controls h5::before {\n      background-position: 0 calc(-7 * 24px); }\n    @media (max-width: 1219px) {\n      #page-products .pro-features li {\n        -ms-flex: 0 0 33%;\n            flex: 0 0 33%; } }\n    @media (max-width: 991px) {\n      #page-products .pro-features {\n        padding: 90px 0;\n        text-align: center; }\n        #page-products .pro-features h5 {\n          -ms-flex-pack: center;\n              justify-content: center; }\n        #page-products .pro-features li {\n          -ms-flex: 0 0 50%;\n              flex: 0 0 50%; } }\n    @media (max-width: 767px) {\n      #page-products .pro-features hgroup h3 {\n        font-size: 30px; }\n      #page-products .pro-features li {\n        -ms-flex: 0 0 100%;\n            flex: 0 0 100%;\n        margin-top: 36px; } }\n  #page-products .get-started {\n    background: linear-gradient(45deg, #1b1f3a 0%, #292f52 100%);\n    overflow: auto; }\n    #page-products .get-started .container {\n      -ms-flex-align: center;\n          align-items: center;\n      display: -ms-flexbox;\n      display: flex;\n      margin-bottom: 120px;\n      margin-top: 120px; }\n    #page-products .get-started hgroup {\n      letter-spacing: -.025em;\n      -ms-flex-positive: 1;\n          flex-grow: 1; }\n    #page-products .get-started h2 {\n      color: #e0e3f6;\n      font-size: 28px;\n      line-height: 36px;\n      font-weight: 400;\n      letter-spacing: -0.02em;\n      margin: 0;\n      max-width: 680px; }\n      #page-products .get-started h2 strong {\n        font-weight: 600;\n        color: #fff; }\n    #page-products .get-started h3 {\n      color: #8aa6ff;\n      font-size: 24px;\n      line-height: 36px;\n      font-weight: 400;\n      margin: 0; }\n    #page-products .get-started .btn {\n      font-size: 15px;\n      text-transform: uppercase;\n      letter-spacing: 0.10em;\n      font-weight: 700;\n      border-radius: 100px;\n      background-color: #5fa3ff;\n      padding: 16px 28px 14px; }\n      #page-products .get-started .btn:hover {\n        background-color: #4895fc; }\n    @media (max-width: 991px) {\n      #page-products .get-started .container {\n        display: block;\n        text-align: center; }\n      #page-products .get-started hgroup {\n        padding-bottom: 16px; }\n      #page-products .get-started .btn-group {\n        padding-bottom: 96px; } }\n\n/*# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImluZGV4LmNzcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtFQUNFLHVCQUF1QixFQUFFO0VBQ3pCO0lBQ0UsbUJBQW1CLEVBQUU7RUFDdkI7Ozs7O0lBS0UsNkRBQTZELEVBQUU7RUFDakU7SUFDRSx1QkFBb0I7UUFBcEIsb0JBQW9CLEVBQUU7SUFDdEI7TUFDRSwyQ0FBMkMsRUFBRTtFQUNqRDtJQUNFLG1CQUFtQjtJQUNuQixtRUFBbUU7SUFDbkUsbUJBQW1CO0lBQ25CLG1CQUFtQixFQUFFO0lBQ3JCO01BQ0UsWUFBWTtNQUNaLG1DQUFtQztNQUNuQyx1QkFBdUI7TUFDdkIsZUFBZTtNQUNmLFlBQVk7TUFDWixhQUFhO01BQ2IsbUJBQW1CO01BQ25CLFdBQVc7TUFDWCxVQUFVO01BQ1YsUUFBUTtNQUNSLG1FQUFtRTtNQUNuRSx1QkFBdUI7TUFDdkIsYUFBYTtNQUNiLGlCQUFpQixFQUFFO01BQ25CO1FBQ0UsWUFBWTtRQUNaLGFBQWE7UUFDYixtQkFBbUI7UUFDbkIsOEVBQThFO1FBQzlFLHFGQUE2RTtnQkFBN0UsNkVBQTZFO1FBQzdFLDhCQUFzQjtnQkFBdEIsc0JBQXNCLEVBQUU7UUFDeEI7VUFDRSxjQUFjO1VBQ2QsU0FBUztVQUNULFNBQVMsRUFBRTtRQUNiO1VBQ0UsY0FBYztVQUNkLFNBQVM7VUFDVCxxQkFBcUIsRUFBRTtRQUN6QjtVQUNFLGNBQWM7VUFDZCxTQUFTO1VBQ1QscUJBQXFCLEVBQUU7UUFDekI7VUFDRSxjQUFjO1VBQ2QsUUFBUTtVQUNSLHFCQUFxQixFQUFFO1FBQ3pCO1VBQ0UsY0FBYztVQUNkLFVBQVU7VUFDVixxQkFBcUIsRUFBRTtRQUN6QjtVQUNFLGNBQWM7VUFDZCxVQUFVO1VBQ1YscUJBQXFCLEVBQUU7UUFDekI7VUFDRTtZQUNFLGNBQWM7WUFDZCxTQUFTO1lBQ1QsU0FBUyxFQUFFO1VBQ2I7WUFDRSxjQUFjO1lBQ2QsU0FBUztZQUNULFVBQVUsRUFBRTtVQUNkO1lBQ0UsY0FBYztZQUNkLFNBQVM7WUFDVCxVQUFVLEVBQUU7VUFDZDtZQUNFLGNBQWM7WUFDZCxTQUFTO1lBQ1QsVUFBVSxFQUFFO1VBQ2Q7WUFDRSxjQUFjO1lBQ2QsUUFBUTtZQUNSLFdBQVcsRUFBRTtVQUNmO1lBQ0UsY0FBYztZQUNkLFVBQVU7WUFDVixXQUFXLEVBQUUsRUFBRTtJQUN2QjtNQUNFLG1CQUFtQjtNQUNuQixtQkFBbUI7TUFDbkIsaUJBQWlCO01BQ2pCLHNCQUFzQjtNQUN0QixrQkFBa0IsRUFBRTtNQUNwQjtRQUNFLDhFQUE4RTtRQUM5RSwwQkFBMEI7UUFDMUIsdUJBQXVCO1FBQ3ZCLGdCQUFnQjtRQUNoQixrQkFBa0I7UUFDbEIsaUJBQWlCO1FBQ2pCLGVBQWUsRUFBRTtNQUNuQjtRQUNFLGlCQUFpQjtRQUNqQixnQkFBZ0I7UUFDaEIsa0JBQWtCO1FBQ2xCLGlCQUFpQjtRQUNqQix3QkFBd0I7UUFDeEIsb0JBQW9CLEVBQUU7TUFDeEI7UUFDRSx1QkFBdUI7UUFDdkIsaUJBQWlCO1FBQ2pCLG1CQUFtQjtRQUNuQixlQUFlO1FBQ2YsZ0JBQWdCO1FBQ2hCLGlCQUFpQjtRQUNqQixZQUFZO1FBQ1osK0RBQStELEVBQUU7TUFDbkU7UUFDRSxpQkFBaUI7UUFDakIsbUJBQW1CO1FBQ25CLG9CQUFvQjtRQUNwQixhQUFhO1FBQ2IsdUJBQXVCLEVBQUU7UUFDekI7VUFDRSx1QkFBb0I7Y0FBcEIsb0JBQW9CO1VBQ3BCLDBCQUEwQjtVQUMxQixtQkFBbUI7VUFDbkIsNEJBQXFCO1VBQXJCLHFCQUFxQjtVQUNyQixnQkFBZ0I7VUFDaEIsaUJBQWlCO1VBQ2pCLDBCQUEwQjtVQUMxQix1QkFBdUI7VUFDdkIsbUJBQW1CLEVBQUU7VUFDckI7WUFDRSxpQkFBaUIsRUFBRTtRQUN2QjtVQUNFLHVCQUF1QjtVQUN2QixlQUFlLEVBQUU7VUFDakI7WUFDRSxtQ0FBMkI7WUFBM0IsMkJBQTJCO1lBQTNCLG1EQUEyQjtZQUMzQixpQkFBaUI7WUFDakIsd0JBQXdCO1lBQ3hCLGdCQUFnQjtZQUNoQixpQkFBaUIsRUFBRTtVQUNyQjtZQUNFLG1DQUEyQjtvQkFBM0IsMkJBQTJCLEVBQUU7UUFDakM7VUFDRSxnQ0FBZ0M7VUFDaEMsZ0JBQWdCO1VBQ2hCLHNCQUFzQjtVQUN0QiwyQkFBMkI7VUFDM0Isc0JBQXNCLEVBQUU7VUFDeEI7WUFDRSxnQ0FBZ0MsRUFBRTtNQUN4QztRQUNFO1VBQ0Usc0JBQXNCLEVBQUUsRUFBRTtNQUM5QjtRQUNFO1VBQ0Usa0JBQWtCLEVBQUU7VUFDcEI7WUFDRSxnQkFBZ0I7WUFDaEIsa0JBQWtCLEVBQUU7VUFDdEI7WUFDRSxpQkFBaUI7WUFDakIsa0JBQWtCO1lBQ2xCLG1CQUFtQixFQUFFO1VBQ3ZCO1lBQ0UsZ0JBQWdCO1lBQ2hCLG1CQUFtQixFQUFFO1VBQ3ZCO1lBQ0UsWUFBWTtZQUNaLGdCQUFnQjtZQUNoQixzQkFBd0I7Z0JBQXhCLHdCQUF3QjtZQUN4QixtQkFBbUIsRUFBRSxFQUFFO0VBQ2pDO0lBQ0UsbUJBQW1CO0lBQ25CLG1CQUFtQjtJQUNuQixXQUFXO0lBQ1gsaUJBQWlCO0lBQ2pCLHFCQUFjO0lBQWQsY0FBYztJQUNkLDJCQUF1QjtRQUF2Qix1QkFBdUI7SUFDdkIsdUJBQW9CO1FBQXBCLG9CQUFvQjtJQUNwQixZQUFZO0lBQ1osZ0JBQWdCLEVBQUU7SUFDbEI7TUFDRSxpQkFBaUI7TUFDakIsWUFBWTtNQUNaLGlCQUFpQjtNQUNqQix1QkFBdUI7TUFDdkIsNkJBQTZCO01BQzdCLHVCQUF1QjtNQUN2QixvQkFBb0I7TUFDcEIsZ0ZBQWdGLEVBQUU7TUFDbEY7UUFDRSxZQUFZLEVBQUU7SUFDbEI7TUFDRTtRQUNFLGtCQUFrQixFQUFFLEVBQUU7RUFDNUI7SUFDRSxXQUFXO0lBQ1gsWUFBWTtJQUNaLGtCQUFrQjtJQUNsQixpQkFBaUI7SUFDakIscUJBQWM7SUFBZCxjQUFjO0lBQ2Qsb0JBQWdCO1FBQWhCLGdCQUFnQjtJQUNoQix1QkFBb0I7UUFBcEIsb0JBQW9CO0lBQ3BCLHVCQUErQjtRQUEvQiwrQkFBK0IsRUFBRTtJQUNqQztNQUNFLDBEQUEwRDtNQUMxRCw2QkFBNkI7TUFDN0IsNkJBQTZCO01BQzdCLGtCQUFrQixFQUFFO0lBQ3RCO01BQ0U7UUFDRSxzQkFBd0I7WUFBeEIsd0JBQXdCLEVBQUU7UUFDMUI7VUFDRSxrQkFBa0IsRUFBRSxFQUFFO0lBQzVCO01BQ0U7UUFDRSxhQUFhLEVBQUU7UUFDZjtVQUNFLGtCQUFrQixFQUFFLEVBQUU7SUFDNUI7TUFDRSxhQUFhO01BQ2IsYUFBYTtNQUNiLHlCQUF5QixFQUFFO0lBQzdCO01BQ0UsNkJBQTZCO01BQzdCLFlBQVk7TUFDWixhQUFhLEVBQUU7SUFDakI7TUFDRSw2QkFBNkI7TUFDN0IsYUFBYTtNQUNiLGFBQWEsRUFBRTtJQUNqQjtNQUNFLDZCQUE2QjtNQUM3QixZQUFZO01BQ1osYUFBYSxFQUFFO0lBQ2pCO01BQ0UsNkJBQTZCO01BQzdCLFlBQVk7TUFDWixhQUFhLEVBQUU7SUFDakI7TUFDRSw4QkFBOEI7TUFDOUIsWUFBWTtNQUNaLGFBQWEsRUFBRTtJQUNqQjtNQUNFLDhCQUE4QjtNQUM5QixZQUFZO01BQ1osYUFBYSxFQUFFO0lBQ2pCO01BQ0UsOEJBQThCO01BQzlCLGFBQWE7TUFDYixhQUFhLEVBQUU7SUFDakI7TUFDRSw4QkFBOEI7TUFDOUIsWUFBWTtNQUNaLGFBQWEsRUFBRTtJQUNqQjtNQUNFLDhCQUE4QjtNQUM5QixZQUFZO01BQ1osYUFBYSxFQUFFO0lBQ2pCO01BQ0UsOEJBQThCO01BQzlCLFlBQVk7TUFDWixhQUFhLEVBQUU7SUFDakI7TUFDRSw4QkFBOEI7TUFDOUIsWUFBWTtNQUNaLGFBQWEsRUFBRTtFQUNuQjtJQUNFLHVCQUFvQjtRQUFwQixvQkFBb0I7SUFDcEIscUJBQWM7SUFBZCxjQUFjO0lBQ2Qsc0JBQXdCO1FBQXhCLHdCQUF3QjtJQUN4QixtQkFBbUI7SUFDbkIsV0FBVyxFQUFFO0lBQ2I7TUFDRSxZQUFZO01BQ1osZUFBZTtNQUNmLFlBQVk7TUFDWixRQUFRO01BQ1IsbUJBQW1CO01BQ25CLE9BQU87TUFDUCxZQUFZO01BQ1osV0FBVyxFQUFFO0lBQ2Y7TUFDRSxpQkFBaUI7TUFDakIsWUFBWTtNQUNaLG1CQUFtQjtNQUNuQixXQUFXLEVBQUU7TUFDYjtRQUNFLGdCQUFnQixFQUFFO01BQ3BCO1FBQ0UsK0JBQXVCO2dCQUF2Qix1QkFBdUIsRUFBRTtNQUMzQjtRQUNFLHFEQUE2QztnQkFBN0MsNkNBQTZDLEVBQUU7TUFDakQ7UUFDRSxlQUFlLEVBQUU7TUFDbkI7UUFDRSxjQUFjLEVBQUU7SUFDcEI7TUFDRSxjQUFjO01BQ2QsVUFBVTtNQUNWLG1CQUFtQjtNQUNuQixTQUFTO01BQ1Qsa0RBQTBDO2NBQTFDLDBDQUEwQztNQUMxQyw0RUFBb0U7TUFBcEUsb0VBQW9FO01BQXBFLHFJQUFvRTtNQUNwRSxZQUFZO01BQ1osV0FBVyxFQUFFO0lBQ2Y7TUFDRSxnRUFBZ0U7TUFDaEUsbUNBQW1DO01BQ25DLDZCQUE2QjtNQUM3Qix5QkFBeUI7TUFDekIsbUJBQW1CO01BQ25CLFVBQVU7TUFDVixpQkFBaUI7TUFDakIsdUJBQXVCO01BQ3ZCLG1CQUFtQjtNQUNuQiw0QkFBb0I7Y0FBcEIsb0JBQW9CO01BQ3BCLG1FQUEyRDtNQUEzRCwyREFBMkQ7TUFBM0QsbUhBQTJELEVBQUU7TUFDN0Q7UUFDRSxhQUFhO1FBQ2IsUUFBUTtRQUNSLG1CQUFtQjtRQUNuQixPQUFPO1FBQ1AsWUFBWSxFQUFFO0VBQ3BCO0lBQ0UsbUJBQW1CLEVBQUU7SUFDckI7TUFDRSxzQkFBc0I7TUFDdEIsVUFBVTtNQUNWLFdBQVcsRUFBRTtJQUNmO01BQ0UsbUJBQW1CO01BQ25CLG1CQUFtQixFQUFFO01BQ3JCO1FBQ0UsaUJBQWlCLEVBQUU7TUFDckI7UUFDRSxlQUFlO1FBQ2YsWUFBWTtRQUNaLFlBQVk7UUFDWixhQUFhO1FBQ2IsNDhDQUE0OEM7UUFDNThDLDZCQUE2QjtRQUM3QixzQkFBc0I7UUFDdEIsbUJBQW1CO1FBQ25CLE9BQU87UUFDUCxRQUFRLEVBQUU7TUFDWjtRQUNFLFVBQVU7UUFDVixpQkFBaUI7UUFDakIsZ0JBQWdCO1FBQ2hCLGtCQUFrQixFQUFFO01BQ3RCO1FBQ0UsZUFBZTtRQUNmLGdCQUFnQjtRQUNoQixrQkFBa0IsRUFBRTtFQUMxQjtJQUNFLG9DQUFvQztJQUNwQyx1QkFBdUI7SUFDdkIsaUJBQWlCO0lBQ2pCLGVBQWU7SUFDZixrQkFBa0IsRUFBRTtJQUNwQjtNQUNFLFdBQVc7TUFDWCxpQkFBaUI7TUFDakIsbUJBQW1CO01BQ25CLHNCQUFzQjtNQUN0QixlQUFlO01BQ2Ysa0JBQWtCO01BQ2xCLG1CQUFtQixFQUFFO01BQ3JCO1FBQ0UsZ0NBQWdDLEVBQUU7UUFDbEM7O1VBRUUsZUFBZSxFQUFFO1FBQ25CO1VBQ0UsZUFBZSxFQUFFO01BQ3JCO1FBQ0UsZ0JBQWdCO1FBQ2hCLHdCQUF3QjtRQUN4QixpQkFBaUI7UUFDakIsb0JBQW9CLEVBQUU7TUFDeEI7UUFDRSxnQkFBZ0I7UUFDaEIsa0JBQWtCO1FBQ2xCLCtEQUErRDtRQUMvRCxpQkFBaUIsRUFBRTtNQUNyQjtRQUNFLDhFQUE4RTtRQUM5RSxtQkFBbUI7UUFDbkIsbUJBQW1CO1FBQ25CLGVBQWUsRUFBRTtRQUNqQjtVQUNFLG1FQUFtRTtVQUNuRSxzQkFBc0I7VUFDdEIsWUFBWTtVQUNaLGFBQWE7VUFDYixZQUFZO1VBQ1osbUJBQW1CO1VBQ25CLE9BQU8sRUFBRTtJQUNmO01BQ0UscUJBQWM7TUFBZCxjQUFjO01BQ2QsdUJBQW9CO1VBQXBCLG9CQUFvQixFQUFFO01BQ3RCO1FBQ0Usa0JBQWtCLEVBQUU7SUFDeEI7TUFDRSxrQkFBa0IsRUFBRTtJQUN0QjtNQUNFO1FBQ0UsMkJBQXVCO1lBQXZCLHVCQUF1QixFQUFFO01BQzNCO1FBQ0UsZUFBZTtRQUNmLGlCQUFpQixFQUFFLEVBQUU7SUFDekI7TUFDRSwyQkFBMkI7TUFDM0IseUJBQXlCO01BQ3pCLGVBQWU7TUFDZixnQkFBZ0I7TUFDaEIsaUJBQWlCO01BQ2pCLG9CQUFvQjtNQUNwQixrREFBa0QsRUFBRTtNQUNwRDtRQUNFLGlCQUFpQjtRQUNqQix3QkFBd0I7UUFDeEIsZ0JBQWdCO1FBQ2hCLGlCQUFpQixFQUFFO01BQ3JCO1FBQ0UsaUNBQWlDLEVBQUU7SUFDdkM7TUFDRSx5QkFBeUI7TUFDekIsc0JBQXNCO01BQ3RCLGFBQWEsRUFBRTtNQUNmO1FBQ0UsZ0JBQWdCO1FBQ2hCLFlBQVksRUFBRTtNQUNoQjtRQUNFLFdBQVcsRUFBRTtJQUNqQjtNQUNFLG1CQUFtQixFQUFFO01BQ3JCO1FBQ0UsNkJBQTZCO1FBQzdCLDZCQUE2QjtRQUM3Qix5QkFBeUI7UUFDekIsT0FBTztRQUNQLFNBQVM7UUFDVCxRQUFRO1FBQ1IsVUFBVTtRQUNWLFlBQVk7UUFDWixlQUFlO1FBQ2YsbUJBQW1CO1FBQ25CLFdBQVc7UUFDWCx3QkFBd0IsRUFBRTtJQUM5QjtNQUNFLFdBQVcsRUFBRTtJQUNmO01BQ0UsZ0JBQWdCO01BQ2hCLGlCQUFpQjtNQUNqQixzQkFBc0I7TUFDdEIsZUFBZTtNQUNmLDBCQUEwQjtNQUMxQixvQkFBb0IsRUFBRTtJQUN4QjtNQUNFLGdCQUFnQjtNQUNoQixpQkFBaUI7TUFDakIsdUJBQXVCO01BQ3ZCLG9CQUFvQixFQUFFO0lBQ3hCO01BQ0UsZUFBZTtNQUNmLGdCQUFnQjtNQUNoQixvQkFBb0I7TUFDcEIsaUJBQWlCO01BQ2pCLGlCQUFpQjtNQUNqQix3QkFBd0IsRUFBRTtJQUM1QjtNQUNFLGdCQUFnQjtNQUNoQixpQkFBaUI7TUFDakIsd0JBQXdCO01BQ3hCLG1CQUFtQjtNQUNuQixvQkFBb0I7TUFDcEIsZUFBZSxFQUFFO01BQ2pCO1FBQ0UsZUFBZTtRQUNmLGlCQUFpQixFQUFFO01BQ3JCO1FBQ0UsZUFBZSxFQUFFO0lBQ3JCO01BQ0UsbUJBQW1CO01BQ25CLGdCQUFnQjtNQUNoQixpQkFBaUIsRUFBRTtNQUNuQjtRQUNFLGlCQUFpQixFQUFFO01BQ3JCO1FBQ0Usd0JBQXdCO1FBQ3hCLGlCQUFpQjtRQUNqQixnQkFBZ0I7UUFDaEIsa0JBQWtCO1FBQ2xCLHFCQUFxQjtRQUNyQixpQkFBaUI7UUFDakIsaUJBQWlCO1FBQ2pCLHNCQUFzQjtRQUN0QiwwQkFBMEIsRUFBRTtNQUM5QjtRQUNFLDBDQUFrQztnQkFBbEMsa0NBQWtDLEVBQUU7SUFDeEM7TUFDRTtRQUNFLGdCQUFnQixFQUFFO01BQ3BCO1FBQ0UsZ0JBQWdCO1FBQ2hCLG1CQUFtQixFQUFFLEVBQUU7RUFDN0I7SUFDRSx1QkFBdUI7SUFDdkIsZUFBZTtJQUNmLHNCQUFzQjtJQUN0QixtQkFBbUIsRUFBRTtJQUNyQjtNQUNFLGlCQUFpQjtNQUNqQixvQkFBb0IsRUFBRTtNQUN0QjtRQUNFLGlCQUFpQjtRQUNqQixlQUFlO1FBQ2Ysb0JBQW9CLEVBQUU7TUFDeEI7UUFDRSxnQkFBZ0I7UUFDaEIsa0JBQWtCO1FBQ2xCLGVBQWU7UUFDZixpQkFBaUIsRUFBRTtJQUN2QjtNQUNFLFdBQVc7TUFDWCxpQkFBaUI7TUFDakIscUJBQWM7TUFBZCxjQUFjO01BQ2QsdUJBQStCO1VBQS9CLCtCQUErQjtNQUMvQixpQkFBaUI7TUFDakIsZUFBZSxFQUFFO01BQ2pCO1FBQ0UsZ0JBQWdCO1FBQ2hCLHFCQUFxQjtRQUNyQix1QkFBdUI7UUFDdkIsZ0JBQWdCO1FBQ2hCLG9CQUFvQjtRQUNwQixpQkFBaUIsRUFBRTtNQUNyQjtRQUNFLCtEQUErRDtRQUMvRCxnQkFBZ0I7UUFDaEIsa0JBQWtCO1FBQ2xCLGVBQWU7UUFDZix3QkFBd0I7UUFDeEIsaUJBQWlCLEVBQUU7SUFDdkI7TUFDRSxrQkFBa0I7TUFDbEIsb0JBQWdCO1VBQWhCLGdCQUFnQjtNQUNoQixtQkFBbUIsRUFBRTtNQUNyQjtRQUNFLGdFQUFnRTtRQUNoRSxzQkFBc0I7UUFDdEIsYUFBYTtRQUNiLFlBQVk7UUFDWixZQUFZO1FBQ1osbUJBQW1CO1FBQ25CLE9BQU8sRUFBRTtNQUNYO1FBQ0UsNkJBQTZCLEVBQUU7TUFDakM7UUFDRSw2QkFBNkIsRUFBRTtNQUNqQztRQUNFLGtCQUFrQixFQUFFO0lBQ3hCO01BQ0U7UUFDRSxlQUFlLEVBQUU7TUFDbkI7UUFDRSxtQkFBbUIsRUFBRTtRQUNyQjtVQUNFLHdCQUF3QixFQUFFO1FBQzVCO1VBQ0UsZUFBZSxFQUFFLEVBQUU7SUFDekI7TUFDRTtRQUNFLHFCQUFxQjtRQUNyQixtQkFBbUIsRUFBRSxFQUFFO0lBQzNCO01BQ0U7UUFDRSxxQkFBcUI7UUFDckIsa0JBQWtCLEVBQUU7UUFDcEI7VUFDRSxvQkFBb0IsRUFBRTtVQUN0QjtZQUNFLGdCQUFnQixFQUFFO1VBQ3BCO1lBQ0UsZ0JBQWdCO1lBQ2hCLG1CQUFtQixFQUFFLEVBQUU7RUFDakM7SUFDRSxnRUFBZ0U7SUFDaEUsc0JBQXNCLEVBQUU7SUFDeEI7TUFDRSx5QkFBeUIsRUFBRTtJQUM3QjtNQUNFLG1CQUFtQjtNQUNuQixtQkFBbUI7TUFDbkIsWUFBWSxFQUFFO01BQ2Q7UUFDRTtVQUNFLG1CQUFtQixFQUFFLEVBQUU7SUFDN0I7TUFDRSxtQkFBbUI7TUFDbkIsV0FBVztNQUNYLE9BQU87TUFDUCxVQUFVO01BQ1YsVUFBVTtNQUNWLHNDQUE4QjtjQUE5Qiw4QkFBOEI7TUFDOUIscUJBQWM7TUFBZCxjQUFjO01BQ2QsdUJBQW9CO1VBQXBCLG9CQUFvQixFQUFFO0lBQ3hCO01BQ0UsYUFBYTtNQUNiLGNBQWM7TUFDZCxtQkFBbUIsRUFBRTtJQUN2Qjs7TUFFRSxZQUFZO01BQ1osYUFBYTtNQUNiLG1CQUFtQjtNQUNuQixPQUFPO01BQ1AsUUFBUSxFQUFFO0lBQ1o7TUFDRSxZQUFZO01BQ1osc0NBQThCO2NBQTlCLDhCQUE4QixFQUFFO0lBQ2xDO01BQ0UsV0FBVztNQUNYLHFDQUE2QjtjQUE3Qiw2QkFBNkIsRUFBRTtJQUNqQztNQUNFLGFBQWE7TUFDYixjQUFjO01BQ2Qsa0VBQWtFO01BQ2xFLDZCQUE2QjtNQUM3Qiw2QkFBNkI7TUFDN0IsbUJBQW1CO01BQ25CLE9BQU87TUFDUCxRQUFRO01BQ1IsV0FBVztNQUNYLHFDQUE2QjtjQUE3Qiw2QkFBNkIsRUFBRTtJQUNqQztNQUNFLGFBQWE7TUFDYixjQUFjO01BQ2Qsb0JBQW9CO01BQ3BCLG1CQUFtQjtNQUNuQixVQUFVO01BQ1YsWUFBWTtNQUNaLG1DQUEyQjtjQUEzQiwyQkFBMkI7TUFDM0IsdUZBQStFO2NBQS9FLCtFQUErRSxFQUFFO0lBQ25GO01BQ0U7UUFDRSxjQUFjLEVBQUU7TUFDbEI7UUFDRSxjQUFjO1FBQ2Qsa0JBQWtCO1FBQ2xCLHFCQUFxQjtRQUNyQixZQUFZO1FBQ1osbUJBQW1CLEVBQUU7UUFDckI7VUFDRSx1QkFBdUIsRUFBRSxFQUFFO0VBQ25DO0lBQ0UsZ0VBQWdFO0lBQ2hFLGlCQUFpQixFQUFFO0lBQ25CO01BQ0UsNkJBQTZCLEVBQUU7SUFDakM7TUFDRSxtQkFBbUI7TUFDbkIsUUFBUTtNQUNSLE9BQU87TUFDUCxVQUFVO01BQ1YsV0FBVztNQUNYLHFCQUFjO01BQWQsY0FBYztNQUNkLHNCQUF3QjtVQUF4Qix3QkFBd0I7TUFDeEIsdUJBQW9CO1VBQXBCLG9CQUFvQixFQUFFO0lBQ3hCO01BQ0UsY0FBYztNQUNkLDBCQUEwQjtNQUMxQixnQkFBZ0I7TUFDaEIsaUJBQWlCO01BQ2pCLHVCQUF1QixFQUFFO0lBQzNCO01BQ0UsbUJBQW1CLEVBQUU7SUFDdkI7TUFDRTtRQUNFLHFCQUFxQjtRQUNyQixXQUFXO1FBQ1gsY0FBYyxFQUFFO01BQ2xCO1FBQ0Usa0JBQWtCO1FBQ2xCLGNBQWM7UUFDZCxXQUFXLEVBQUUsRUFBRTtJQUNuQjtNQUNFO1FBQ0UsdUJBQXVCO1FBQ3ZCLFdBQVcsRUFBRTtRQUNiO1VBQ0UsY0FBYyxFQUFFO1FBQ2xCO1VBQ0UsY0FBYztVQUNkLGtCQUFrQjtVQUNsQixxQkFBcUI7VUFDckIsWUFBWTtVQUNaLG1CQUFtQixFQUFFO1VBQ3JCO1lBQ0UsdUJBQXVCLEVBQUUsRUFBRTtFQUNyQztJQUNFLG9CQUFvQjtJQUNwQixnQkFBZ0IsRUFBRTtJQUNsQjs7TUFFRSxlQUFlLEVBQUU7TUFDakI7O1FBRUUsOEJBQThCLEVBQUU7SUFDcEM7TUFDRSxjQUFjO01BQ2QsYUFBYTtNQUNiLHFCQUFjO01BQWQsY0FBYztNQUNkLGlCQUFpQjtNQUNqQixtQkFBbUI7TUFDbkIsT0FBTztNQUNQLFVBQVU7TUFDVixzQ0FBOEI7Y0FBOUIsOEJBQThCO01BQzlCLFVBQVU7TUFDVixXQUFXLEVBQUU7SUFDZjtNQUNFLFlBQVk7TUFDWixhQUFhLEVBQUU7SUFDakI7TUFDRSxjQUFjLEVBQUU7SUFDbEI7TUFDRSxtQ0FBMkI7Y0FBM0IsMkJBQTJCO01BQzNCLCtCQUF1QjtjQUF2Qix1QkFBdUI7TUFDdkIsdUNBQStCO2NBQS9CLCtCQUErQjtNQUMvQiw0Q0FBb0M7Y0FBcEMsb0NBQW9DO01BQ3BDLHdDQUFnQztjQUFoQyxnQ0FBZ0MsRUFBRTs7QUFFeEM7RUFDRTtJQUNFLGFBQWEsRUFBRTtFQUNqQjtJQUNFLFdBQVcsRUFBRSxFQUFFOztBQUpuQjtFQUNFO0lBQ0UsYUFBYSxFQUFFO0VBQ2pCO0lBQ0UsV0FBVyxFQUFFLEVBQUU7SUFDZjtNQUNFLGNBQWM7TUFDZCx3Q0FBZ0M7Y0FBaEMsZ0NBQWdDLEVBQUU7SUFDcEM7TUFDRSxtQkFBbUI7TUFDbkIsV0FBVztNQUNYLFdBQVcsRUFBRTtJQUNmO01BQ0U7UUFDRSxjQUFjO1FBQ2Qsa0JBQWtCO1FBQ2xCLFlBQVksRUFBRTtNQUNoQjtRQUNFLGFBQWEsRUFBRTtNQUNqQjtRQUNFLDhCQUFzQjtnQkFBdEIsc0JBQXNCLEVBQUUsRUFBRTtJQUM5QjtNQUNFO1FBQ0UsV0FBVyxFQUFFO1FBQ2I7VUFDRSxjQUFjLEVBQUU7UUFDbEI7VUFDRSxjQUFjO1VBQ2Qsa0JBQWtCO1VBQ2xCLHFCQUFxQjtVQUNyQixZQUFZO1VBQ1osbUJBQW1CLEVBQUU7VUFDckI7WUFDRSx1QkFBdUIsRUFBRSxFQUFFO0VBQ3JDO0lBQ0UsNENBQTRDO0lBQzVDLHNFQUFzRTtJQUN0RSxzQkFBc0IsRUFBRTtJQUN4QjtNQUNFLGVBQWUsRUFBRTtNQUNqQjtRQUNFLDhCQUE4QixFQUFFO0lBQ3BDO01BQ0UsdURBQXVEO01BQ3ZELDRCQUE0QjtNQUM1QixVQUFVO01BQ1YsYUFBYSxFQUFFO01BQ2Y7UUFDRTtVQUNFLFdBQVc7VUFDWCxjQUFjLEVBQUUsRUFBRTtJQUN4QjtNQUNFLG1CQUFtQjtNQUNuQixXQUFXLEVBQUU7SUFDZjtNQUNFO1FBQ0UsY0FBYyxFQUFFO01BQ2xCO1FBQ0UsY0FBYztRQUNkLGtCQUFrQjtRQUNsQixxQkFBcUI7UUFDckIsWUFBWTtRQUNaLG1CQUFtQixFQUFFO1FBQ3JCO1VBQ0UsdUJBQXVCLEVBQUUsRUFBRTtFQUNuQztJQUNFLDBCQUEwQjtJQUMxQixnRUFBZ0U7SUFDaEUsc0JBQXNCO0lBQ3RCLG1CQUFtQjtJQUNuQixzQkFBc0IsRUFBRTtJQUN4QjtNQUNFLDhCQUE4QixFQUFFO0lBQ2xDO01BQ0UsbUJBQW1CO01BQ25CLFdBQVc7TUFDWCxVQUFVO01BQ1Ysb0JBQW9CLEVBQUU7TUFDdEI7UUFDRSxXQUFXO1FBQ1gsdUJBQXVCLEVBQUU7TUFDM0I7UUFDRSxhQUFhLEVBQUU7TUFDakI7O1FBRUUsbUJBQW1CLEVBQUU7TUFDdkI7UUFDRSxXQUFXLEVBQUU7TUFDZjtRQUNFLFdBQVcsRUFBRTtNQUNmO1FBQ0Usb0NBQTRCO2dCQUE1Qiw0QkFBNEIsRUFBRTtJQUNsQztNQUNFO1FBQ0Usc0JBQXNCLEVBQUU7UUFDeEI7VUFDRSxZQUFZO1VBQ1osaUJBQWlCO1VBQ2pCLG1CQUFtQjtVQUNuQixrQkFBa0I7VUFDbEIsbUJBQW1CLEVBQUU7UUFDdkI7VUFDRSx1QkFBdUIsRUFBRTtRQUMzQjtVQUNFLDhCQUFzQjtrQkFBdEIsc0JBQXNCO1VBQ3RCLFdBQVc7VUFDWCxvQkFBb0IsRUFBRSxFQUFFO0lBQzlCO01BQ0U7UUFDRSxXQUFXLEVBQUU7UUFDYjtVQUNFLGNBQWMsRUFBRTtRQUNsQjtVQUNFLGNBQWM7VUFDZCxrQkFBa0I7VUFDbEIscUJBQXFCO1VBQ3JCLFlBQVk7VUFDWixtQkFBbUIsRUFBRTtVQUNyQjtZQUNFLHVCQUF1QixFQUFFLEVBQUU7SUFDbkM7TUFDRSxtQkFBbUI7TUFDbkIsWUFBWTtNQUNaLGFBQWEsRUFBRTtNQUNmO1FBQ0UsbUJBQW1CO1FBQ25CLHlDQUFpQztnQkFBakMsaUNBQWlDO1FBQ2pDLGlCQUFpQjtRQUNqQixtQkFBbUI7UUFDbkIscUJBQWM7UUFBZCxjQUFjO1FBQ2QsMkJBQXVCO1lBQXZCLHVCQUF1QjtRQUN2Qix1QkFBb0I7WUFBcEIsb0JBQW9CO1FBQ3BCLFdBQVcsRUFBRTtRQUNiO1VBQ0UsK0RBQStEO1VBQy9ELFVBQVU7VUFDVixZQUFZO1VBQ1osZ0JBQWdCO1VBQ2hCLGtCQUFrQixFQUFFO1FBQ3RCO1VBQ0UsZUFBZTtVQUNmLGFBQWE7VUFDYixrQkFBa0IsRUFBRTtRQUN0QjtVQUNFLFlBQVk7VUFDWixlQUFlO1VBQ2YsWUFBWTtVQUNaLGFBQWE7VUFDYixvQkFBb0I7VUFDcEIsNkJBQTZCO1VBQzdCLHNCQUFzQixFQUFFO01BQzVCO1FBQ0Usb0VBQW9FO1FBQ3BFLGFBQWE7UUFDYixhQUFhO1FBQ2IsNEJBQTRCLEVBQUU7TUFDaEM7UUFDRSxxRUFBcUU7UUFDckUsYUFBYTtRQUNiLGFBQWE7UUFDYiw0QkFBNEIsRUFBRTtNQUNoQztRQUNFLGdFQUFnRTtRQUNoRSxZQUFZO1FBQ1osYUFBYTtRQUNiLDJCQUEyQixFQUFFO01BQy9COzs7UUFHRSxZQUFZO1FBQ1osYUFBYTtRQUNiLDJCQUEyQixFQUFFO01BQy9CO1FBQ0UscUVBQXFFLEVBQUU7TUFDekU7UUFDRSxpRUFBaUUsRUFBRTtNQUNyRTtRQUNFLGdFQUFnRSxFQUFFO01BQ3BFO1FBQ0Usd0VBQXdFO1FBQ3hFLFlBQVk7UUFDWixhQUFhO1FBQ2IsMkJBQTJCLEVBQUU7TUFDL0I7UUFDRSx1RUFBdUU7UUFDdkUsWUFBWTtRQUNaLGFBQWE7UUFDYiwyQkFBMkIsRUFBRTtNQUMvQjtRQUNFLHFFQUFxRTtRQUNyRSxZQUFZO1FBQ1osYUFBYTtRQUNiLDJCQUEyQixFQUFFO01BQy9COzs7UUFHRSxVQUFVO1FBQ1YsV0FBVyxFQUFFO01BQ2Y7OztRQUdFLFVBQVU7UUFDVixXQUFXLEVBQUU7TUFDZjs7UUFFRSxtQkFBbUIsRUFBRTtNQUN2QjtRQUNFLG9CQUFvQixFQUFFO01BQ3hCOzs7UUFHRSxVQUFVO1FBQ1YsV0FBVyxFQUFFO01BQ2Y7UUFDRSxvQkFBb0IsRUFBRTtNQUN4QjtRQUNFLG1CQUFtQixFQUFFO0VBQzNCO0lBQ0UsaUJBQWlCO0lBQ2pCLDBCQUEwQixFQUFFO0lBQzVCO01BQ0UsbUJBQW1CO01BQ25CLGlCQUFpQjtNQUNqQixrQkFBa0I7TUFDbEIsbUJBQW1CLEVBQUU7TUFDckI7UUFDRSxZQUFZO1FBQ1osZ0JBQWdCO1FBQ2hCLGlCQUFpQjtRQUNqQixrQkFBa0I7UUFDbEIsY0FBYyxFQUFFO01BQ2xCO1FBQ0UsZUFBZTtRQUNmLCtEQUErRDtRQUMvRCxnQkFBZ0I7UUFDaEIsa0JBQWtCLEVBQUU7SUFDeEI7TUFDRSxrQkFBa0I7TUFDbEIsV0FBVztNQUNYLHFCQUFjO01BQWQsY0FBYztNQUNkLG9CQUFnQjtVQUFoQixnQkFBZ0I7TUFDaEIsc0JBQXNCLEVBQUU7SUFDMUI7TUFDRSxrQkFBYztVQUFkLGNBQWM7TUFDZCxpQkFBaUI7TUFDakIsZ0JBQWdCLEVBQUU7TUFDbEI7UUFDRSxZQUFZO1FBQ1osZ0JBQWdCO1FBQ2hCLGlCQUFpQjtRQUNqQixvQkFBb0I7UUFDcEIsY0FBYztRQUNkLHFCQUFjO1FBQWQsY0FBYztRQUNkLHVCQUFvQjtZQUFwQixvQkFBb0IsRUFBRTtNQUN4QjtRQUNFLGVBQWU7UUFDZiwrREFBK0Q7UUFDL0QsZ0JBQWdCO1FBQ2hCLGtCQUFrQixFQUFFO0lBQ3hCO01BQ0UsZUFBZTtNQUNmLFlBQVk7TUFDWixZQUFZO01BQ1osYUFBYTtNQUNiLHlEQUF5RDtNQUN6RCw2QkFBNkI7TUFDN0IsNEJBQTRCO01BQzVCLG1CQUFtQixFQUFFO0lBQ3ZCO01BQ0UseUJBQXlCLEVBQUU7SUFDN0I7TUFDRSx1Q0FBdUMsRUFBRTtJQUMzQztNQUNFLHVDQUF1QyxFQUFFO0lBQzNDO01BQ0UsdUNBQXVDLEVBQUU7SUFDM0M7TUFDRSx1Q0FBdUMsRUFBRTtJQUMzQztNQUNFLHVDQUF1QyxFQUFFO0lBQzNDO01BQ0UsdUNBQXVDLEVBQUU7SUFDM0M7TUFDRSx1Q0FBdUMsRUFBRTtJQUMzQztNQUNFO1FBQ0Usa0JBQWM7WUFBZCxjQUFjLEVBQUUsRUFBRTtJQUN0QjtNQUNFO1FBQ0UsZ0JBQWdCO1FBQ2hCLG1CQUFtQixFQUFFO1FBQ3JCO1VBQ0Usc0JBQXdCO2NBQXhCLHdCQUF3QixFQUFFO1FBQzVCO1VBQ0Usa0JBQWM7Y0FBZCxjQUFjLEVBQUUsRUFBRTtJQUN4QjtNQUNFO1FBQ0UsZ0JBQWdCLEVBQUU7TUFDcEI7UUFDRSxtQkFBZTtZQUFmLGVBQWU7UUFDZixpQkFBaUIsRUFBRSxFQUFFO0VBQzNCO0lBQ0UsNkRBQTZEO0lBQzdELGVBQWUsRUFBRTtJQUNqQjtNQUNFLHVCQUFvQjtVQUFwQixvQkFBb0I7TUFDcEIscUJBQWM7TUFBZCxjQUFjO01BQ2QscUJBQXFCO01BQ3JCLGtCQUFrQixFQUFFO0lBQ3RCO01BQ0Usd0JBQXdCO01BQ3hCLHFCQUFhO1VBQWIsYUFBYSxFQUFFO0lBQ2pCO01BQ0UsZUFBZTtNQUNmLGdCQUFnQjtNQUNoQixrQkFBa0I7TUFDbEIsaUJBQWlCO01BQ2pCLHdCQUF3QjtNQUN4QixVQUFVO01BQ1YsaUJBQWlCLEVBQUU7TUFDbkI7UUFDRSxpQkFBaUI7UUFDakIsWUFBWSxFQUFFO0lBQ2xCO01BQ0UsZUFBZTtNQUNmLGdCQUFnQjtNQUNoQixrQkFBa0I7TUFDbEIsaUJBQWlCO01BQ2pCLFVBQVUsRUFBRTtJQUNkO01BQ0UsZ0JBQWdCO01BQ2hCLDBCQUEwQjtNQUMxQix1QkFBdUI7TUFDdkIsaUJBQWlCO01BQ2pCLHFCQUFxQjtNQUNyQiwwQkFBMEI7TUFDMUIsd0JBQXdCLEVBQUU7TUFDMUI7UUFDRSwwQkFBMEIsRUFBRTtJQUNoQztNQUNFO1FBQ0UsZUFBZTtRQUNmLG1CQUFtQixFQUFFO01BQ3ZCO1FBQ0UscUJBQXFCLEVBQUU7TUFDekI7UUFDRSxxQkFBcUIsRUFBRSxFQUFFIiwiZmlsZSI6InBhZ2VzL3Byby9pbmRleC5jc3MiLCJzb3VyY2VzQ29udGVudCI6WyIjcGFnZS1wcm9kdWN0cyB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmY7IH1cbiAgI3BhZ2UtcHJvZHVjdHMgLnByZS1oZWFkZXIge1xuICAgIG1hcmdpbi1ib3R0b206IDBweDsgfVxuICAjcGFnZS1wcm9kdWN0cyAuY3RhLFxuICAjcGFnZS1wcm9kdWN0cyAucHJvLW5hdixcbiAgI3BhZ2UtcHJvZHVjdHMgLnByby12aWRlbyxcbiAgI3BhZ2UtcHJvZHVjdHMgLnN1Yi1oZWFkZXIsXG4gICNwYWdlLXByb2R1Y3RzIG1haW4ge1xuICAgIGZvbnQtZmFtaWx5OiBcIkVpbmFcIiwgXCJIZWx2ZXRpY2EgTmV1ZVwiLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7IH1cbiAgI3BhZ2UtcHJvZHVjdHMgLnN1Yi1oZWFkZXIgPiAuY29udGFpbmVyIHtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyOyB9XG4gICAgI3BhZ2UtcHJvZHVjdHMgLnN1Yi1oZWFkZXIgPiAuY29udGFpbmVyOmJlZm9yZSB7XG4gICAgICBib3JkZXItdG9wLWNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMSk7IH1cbiAgI3BhZ2UtcHJvZHVjdHMgPiAuY3RhIHtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgYmFja2dyb3VuZC1pbWFnZTogbGluZWFyLWdyYWRpZW50KDkwZGVnLCAjNjUyMWZjIDAlLCAjMzg5ZmZmIDEwMCUpO1xuICAgIG1hcmdpbi10b3A6IC0xNDBweDtcbiAgICBwYWRkaW5nLXRvcDogMTQwcHg7IH1cbiAgICAjcGFnZS1wcm9kdWN0cyA+IC5jdGEgLmN0YV9fYmFja2dyb3VuZCB7XG4gICAgICBjb250ZW50OiAnJztcbiAgICAgIGJhY2tncm91bmQtcG9zaXRpb246IGNlbnRlciBjZW50ZXI7XG4gICAgICBiYWNrZ3JvdW5kLXNpemU6IGNvdmVyO1xuICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICB3aWR0aDogMTAwJTtcbiAgICAgIGhlaWdodDogMTAwJTtcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgIHotaW5kZXg6IDA7XG4gICAgICB0b3A6IC00cHg7XG4gICAgICBsZWZ0OiAwO1xuICAgICAgYmFja2dyb3VuZC1pbWFnZTogbGluZWFyLWdyYWRpZW50KDkwZGVnLCAjNjAzMGZjIDAlLCAjNWZhMmZlIDEwMCUpO1xuICAgICAgYmFja2dyb3VuZC1zaXplOiBjb3ZlcjtcbiAgICAgIG9wYWNpdHk6IDAuNTtcbiAgICAgIG92ZXJmbG93OiBoaWRkZW47IH1cbiAgICAgICNwYWdlLXByb2R1Y3RzID4gLmN0YSAuY3RhX19iYWNrZ3JvdW5kID4gZGl2IHtcbiAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgIGhlaWdodDogMTAwJTtcbiAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICBiYWNrZ3JvdW5kLWltYWdlOiBsaW5lYXItZ3JhZGllbnQoOTBkZWcsICNmZmYgMCUsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMCkgNzUlKTtcbiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoLTIwcHgsIDApIHJvdGF0ZSgtM2RlZykgc2tldygxNmRlZywgMGRlZykgc2NhbGUoMSwgMS41KTtcbiAgICAgICAgdHJhbnNmb3JtLW9yaWdpbjogdG9wOyB9XG4gICAgICAgICNwYWdlLXByb2R1Y3RzID4gLmN0YSAuY3RhX19iYWNrZ3JvdW5kID4gZGl2Om50aC1jaGlsZCgxKSB7XG4gICAgICAgICAgb3BhY2l0eTogMC4wNTtcbiAgICAgICAgICB0b3A6IDc1JTtcbiAgICAgICAgICBsZWZ0OiAwJTsgfVxuICAgICAgICAjcGFnZS1wcm9kdWN0cyA+IC5jdGEgLmN0YV9fYmFja2dyb3VuZCA+IGRpdjpudGgtY2hpbGQoMikge1xuICAgICAgICAgIG9wYWNpdHk6IDAuMTA7XG4gICAgICAgICAgdG9wOiA1MCU7XG4gICAgICAgICAgbGVmdDogMTUuMzg0NjE1Mzg0NiU7IH1cbiAgICAgICAgI3BhZ2UtcHJvZHVjdHMgPiAuY3RhIC5jdGFfX2JhY2tncm91bmQgPiBkaXY6bnRoLWNoaWxkKDMpIHtcbiAgICAgICAgICBvcGFjaXR5OiAwLjA5O1xuICAgICAgICAgIHRvcDogMjUlO1xuICAgICAgICAgIGxlZnQ6IDMwLjc2OTIzMDc2OTIlOyB9XG4gICAgICAgICNwYWdlLXByb2R1Y3RzID4gLmN0YSAuY3RhX19iYWNrZ3JvdW5kID4gZGl2Om50aC1jaGlsZCg0KSB7XG4gICAgICAgICAgb3BhY2l0eTogMC4xNTtcbiAgICAgICAgICB0b3A6IDAlO1xuICAgICAgICAgIGxlZnQ6IDQ2LjE1Mzg0NjE1MzglOyB9XG4gICAgICAgICNwYWdlLXByb2R1Y3RzID4gLmN0YSAuY3RhX19iYWNrZ3JvdW5kID4gZGl2Om50aC1jaGlsZCg1KSB7XG4gICAgICAgICAgb3BhY2l0eTogMC4xNjtcbiAgICAgICAgICB0b3A6IC0yNSU7XG4gICAgICAgICAgbGVmdDogNjEuNTM4NDYxNTM4NSU7IH1cbiAgICAgICAgI3BhZ2UtcHJvZHVjdHMgPiAuY3RhIC5jdGFfX2JhY2tncm91bmQgPiBkaXY6bnRoLWNoaWxkKDYpIHtcbiAgICAgICAgICBvcGFjaXR5OiAwLjA4O1xuICAgICAgICAgIHRvcDogLTUwJTtcbiAgICAgICAgICBsZWZ0OiA3Ni45MjMwNzY5MjMxJTsgfVxuICAgICAgICBAbWVkaWEgKG1heC13aWR0aDogNzY4cHgpIHtcbiAgICAgICAgICAjcGFnZS1wcm9kdWN0cyA+IC5jdGEgLmN0YV9fYmFja2dyb3VuZCA+IGRpdjpudGgtY2hpbGQoMSkge1xuICAgICAgICAgICAgb3BhY2l0eTogMC4wNTtcbiAgICAgICAgICAgIHRvcDogNjAlO1xuICAgICAgICAgICAgbGVmdDogMCU7IH1cbiAgICAgICAgICAjcGFnZS1wcm9kdWN0cyA+IC5jdGEgLmN0YV9fYmFja2dyb3VuZCA+IGRpdjpudGgtY2hpbGQoMikge1xuICAgICAgICAgICAgb3BhY2l0eTogMC4xMDtcbiAgICAgICAgICAgIHRvcDogNDUlO1xuICAgICAgICAgICAgbGVmdDogMjUlOyB9XG4gICAgICAgICAgI3BhZ2UtcHJvZHVjdHMgPiAuY3RhIC5jdGFfX2JhY2tncm91bmQgPiBkaXY6bnRoLWNoaWxkKDMpIHtcbiAgICAgICAgICAgIG9wYWNpdHk6IDAuMDk7XG4gICAgICAgICAgICB0b3A6IDMwJTtcbiAgICAgICAgICAgIGxlZnQ6IDUwJTsgfVxuICAgICAgICAgICNwYWdlLXByb2R1Y3RzID4gLmN0YSAuY3RhX19iYWNrZ3JvdW5kID4gZGl2Om50aC1jaGlsZCg0KSB7XG4gICAgICAgICAgICBvcGFjaXR5OiAwLjE1O1xuICAgICAgICAgICAgdG9wOiAxNSU7XG4gICAgICAgICAgICBsZWZ0OiA3NSU7IH1cbiAgICAgICAgICAjcGFnZS1wcm9kdWN0cyA+IC5jdGEgLmN0YV9fYmFja2dyb3VuZCA+IGRpdjpudGgtY2hpbGQoNSkge1xuICAgICAgICAgICAgb3BhY2l0eTogMC4xNjtcbiAgICAgICAgICAgIHRvcDogMCU7XG4gICAgICAgICAgICBsZWZ0OiAxMDAlOyB9XG4gICAgICAgICAgI3BhZ2UtcHJvZHVjdHMgPiAuY3RhIC5jdGFfX2JhY2tncm91bmQgPiBkaXY6bnRoLWNoaWxkKDYpIHtcbiAgICAgICAgICAgIG9wYWNpdHk6IDAuMDg7XG4gICAgICAgICAgICB0b3A6IC0xNSU7XG4gICAgICAgICAgICBsZWZ0OiAxMjUlOyB9IH1cbiAgICAjcGFnZS1wcm9kdWN0cyA+IC5jdGEgaGdyb3VwIHtcbiAgICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgIG1heC13aWR0aDogODMwcHg7XG4gICAgICBwYWRkaW5nLWJvdHRvbTogMzU0cHg7XG4gICAgICBwYWRkaW5nLXRvcDogNTRweDsgfVxuICAgICAgI3BhZ2UtcHJvZHVjdHMgPiAuY3RhIGhncm91cCBoMyB7XG4gICAgICAgIGZvbnQtZmFtaWx5OiBcIlJvYm90byBNb25vXCIsIE1lbmxvLCBNb25hY28sIENvbnNvbGFzLCBcIkNvdXJpZXIgTmV3XCIsIG1vbm9zcGFjZTtcbiAgICAgICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcbiAgICAgICAgbGV0dGVyLXNwYWNpbmc6IDAuMThlbTtcbiAgICAgICAgZm9udC1zaXplOiAxMnB4O1xuICAgICAgICBsaW5lLWhlaWdodDogMThweDtcbiAgICAgICAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgICAgICAgY29sb3I6ICNlM2U2ZmY7IH1cbiAgICAgICNwYWdlLXByb2R1Y3RzID4gLmN0YSBoZ3JvdXAgaDEge1xuICAgICAgICBtYXJnaW4tdG9wOiAzNnB4O1xuICAgICAgICBmb250LXNpemU6IDU2cHg7XG4gICAgICAgIGxpbmUtaGVpZ2h0OiA2MHB4O1xuICAgICAgICBmb250LXdlaWdodDogNzAwO1xuICAgICAgICBsZXR0ZXItc3BhY2luZzogLS4wMzhlbTtcbiAgICAgICAgbWFyZ2luLWJvdHRvbTogMjY0eDsgfVxuICAgICAgI3BhZ2UtcHJvZHVjdHMgPiAuY3RhIGhncm91cCBwIHtcbiAgICAgICAgbGV0dGVyLXNwYWNpbmc6IC0uMDNlbTtcbiAgICAgICAgbWF4LXdpZHRoOiA3MjRweDtcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuOGVtO1xuICAgICAgICBtYXJnaW46IDAgYXV0bztcbiAgICAgICAgZm9udC1zaXplOiAyMnB4O1xuICAgICAgICBmb250LXdlaWdodDogNDAwO1xuICAgICAgICBjb2xvcjogI2ZmZjtcbiAgICAgICAgZm9udC1mYW1pbHk6IFwiSW50ZXJcIiwgXCJJbnRlciBVSVwiLCBIZWx2ZXRpY2EsIEFyaWFsLCBzYW5zLXNlcmlmOyB9XG4gICAgICAjcGFnZS1wcm9kdWN0cyA+IC5jdGEgaGdyb3VwIC5jdGEtYnV0dG9ucyB7XG4gICAgICAgIG1hcmdpbi10b3A6IDMwcHg7XG4gICAgICAgIHBhZGRpbmctbGVmdDogMjRweDtcbiAgICAgICAgcGFkZGluZy1yaWdodDogMjRweDtcbiAgICAgICAgY29sb3I6IHdoaXRlO1xuICAgICAgICBsZXR0ZXItc3BhY2luZzogLS4wMmVtOyB9XG4gICAgICAgICNwYWdlLXByb2R1Y3RzID4gLmN0YSBoZ3JvdXAgLmN0YS1idXR0b25zID4gLmJ0biB7XG4gICAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjNzg5OGZmO1xuICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDJlbTtcbiAgICAgICAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDtcbiAgICAgICAgICBmb250LXNpemU6IDE1cHg7XG4gICAgICAgICAgZm9udC13ZWlnaHQ6IDcwMDtcbiAgICAgICAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xuICAgICAgICAgIGxldHRlci1zcGFjaW5nOiAwLjEwZW07XG4gICAgICAgICAgcGFkZGluZzogMTRweCAyNnB4OyB9XG4gICAgICAgICAgI3BhZ2UtcHJvZHVjdHMgPiAuY3RhIGhncm91cCAuY3RhLWJ1dHRvbnMgPiAuYnRuOm5vdCg6aG92ZXIpIHtcbiAgICAgICAgICAgIGJveC1zaGFkb3c6IG5vbmU7IH1cbiAgICAgICAgI3BhZ2UtcHJvZHVjdHMgPiAuY3RhIGhncm91cCAuY3RhLWJ1dHRvbnMgPiAuYnRuLS1wcmltYXJ5IHtcbiAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xuICAgICAgICAgIGNvbG9yOiAjNGE2OGZmOyB9XG4gICAgICAgICAgI3BhZ2UtcHJvZHVjdHMgPiAuY3RhIGhncm91cCAuY3RhLWJ1dHRvbnMgPiAuYnRuLS1wcmltYXJ5OmFmdGVyIHtcbiAgICAgICAgICAgIHRyYW5zaXRpb246IHRyYW5zZm9ybSAwLjNzO1xuICAgICAgICAgICAgY29udGVudDogJ1xcZjI4Nyc7XG4gICAgICAgICAgICBmb250LWZhbWlseTogJ0lvbmljb25zJztcbiAgICAgICAgICAgIGZvbnQtc2l6ZTogMTVweDtcbiAgICAgICAgICAgIG1hcmdpbi1sZWZ0OiA4cHg7IH1cbiAgICAgICAgICAjcGFnZS1wcm9kdWN0cyA+IC5jdGEgaGdyb3VwIC5jdGEtYnV0dG9ucyA+IC5idG4tLXByaW1hcnk6aG92ZXI6YWZ0ZXIge1xuICAgICAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKDJweCk7IH1cbiAgICAgICAgI3BhZ2UtcHJvZHVjdHMgPiAuY3RhIGhncm91cCAuY3RhLWJ1dHRvbnMgLnNhbGVzIHtcbiAgICAgICAgICBjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjUpO1xuICAgICAgICAgIG1hcmdpbi10b3A6IDZweDtcbiAgICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgICAgICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XG4gICAgICAgICAgdHJhbnNpdGlvbjogLjJzIGNvbG9yOyB9XG4gICAgICAgICAgI3BhZ2UtcHJvZHVjdHMgPiAuY3RhIGhncm91cCAuY3RhLWJ1dHRvbnMgLnNhbGVzOmhvdmVyIHtcbiAgICAgICAgICAgIGNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuOCk7IH1cbiAgICAgIEBtZWRpYSAobWF4LXdpZHRoOiA3NjhweCkge1xuICAgICAgICAjcGFnZS1wcm9kdWN0cyA+IC5jdGEgaGdyb3VwIHtcbiAgICAgICAgICBwYWRkaW5nLWJvdHRvbTogMTQwcHg7IH0gfVxuICAgICAgQG1lZGlhIChtYXgtd2lkdGg6IDQ4MHB4KSB7XG4gICAgICAgICNwYWdlLXByb2R1Y3RzID4gLmN0YSBoZ3JvdXAge1xuICAgICAgICAgIHBhZGRpbmctdG9wOiAxNHB4OyB9XG4gICAgICAgICAgI3BhZ2UtcHJvZHVjdHMgPiAuY3RhIGhncm91cCBoMSB7XG4gICAgICAgICAgICBmb250LXNpemU6IDQwcHg7XG4gICAgICAgICAgICBsaW5lLWhlaWdodDogNDZweDsgfVxuICAgICAgICAgICNwYWdlLXByb2R1Y3RzID4gLmN0YSBoZ3JvdXAgaDMge1xuICAgICAgICAgICAgbWF4LXdpZHRoOiAyNDZweDtcbiAgICAgICAgICAgIG1hcmdpbi1sZWZ0OiBhdXRvO1xuICAgICAgICAgICAgbWFyZ2luLXJpZ2h0OiBhdXRvOyB9XG4gICAgICAgICAgI3BhZ2UtcHJvZHVjdHMgPiAuY3RhIGhncm91cCBwIHtcbiAgICAgICAgICAgIGZvbnQtc2l6ZTogMThweDtcbiAgICAgICAgICAgIGxpbmUtaGVpZ2h0OiAxLjZlbTsgfVxuICAgICAgICAgICNwYWdlLXByb2R1Y3RzID4gLmN0YSBoZ3JvdXAgLmJ0biB7XG4gICAgICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgICAgICAgIG1hcmdpbi1yaWdodDogMDtcbiAgICAgICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICAgICAgICAgICAgbWFyZ2luLWJvdHRvbTogOHB4OyB9IH1cbiAgI3BhZ2UtcHJvZHVjdHMgLmN0YS1vdmVybGF5IHtcbiAgICBtYXJnaW4tdG9wOiAtMjM5cHg7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIHotaW5kZXg6IDE7XG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICB3aWR0aDogMTAwJTtcbiAgICBwYWRkaW5nOiAwIDIwcHg7IH1cbiAgICAjcGFnZS1wcm9kdWN0cyAuY3RhLW92ZXJsYXkgLmFwcC1zY3JlZW5zaG90IHtcbiAgICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgICB3aWR0aDogMTAwJTtcbiAgICAgIG1heC13aWR0aDogOTYwcHg7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xuICAgICAgYmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdDtcbiAgICAgIGJhY2tncm91bmQtc2l6ZTogY292ZXI7XG4gICAgICBib3JkZXItcmFkaXVzOiAxNnB4O1xuICAgICAgYm94LXNoYWRvdzogMCA4cHggMTZweCByZ2JhKDAsIDE0LCA0MSwgMC4wOCksIDAgMzBweCA2MHB4IHJnYmEoMCwgMTEsIDM0LCAwLjE1KTsgfVxuICAgICAgI3BhZ2UtcHJvZHVjdHMgLmN0YS1vdmVybGF5IC5hcHAtc2NyZWVuc2hvdCBpbWcge1xuICAgICAgICB3aWR0aDogMTAwJTsgfVxuICAgIEBtZWRpYSAobWF4LXdpZHRoOiA3NjhweCkge1xuICAgICAgI3BhZ2UtcHJvZHVjdHMgLmN0YS1vdmVybGF5IHtcbiAgICAgICAgbWFyZ2luLXRvcDogLTc2cHg7IH0gfVxuICAjcGFnZS1wcm9kdWN0cyAuY3VzdG9tZXItbG9nb3Mge1xuICAgIHBhZGRpbmc6IDA7XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgbWF4LXdpZHRoOiAxMDI0cHg7XG4gICAgbWFyZ2luLXRvcDogMzBweDtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGZsZXgtd3JhcDogd3JhcDtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjsgfVxuICAgICNwYWdlLXByb2R1Y3RzIC5jdXN0b21lci1sb2dvcyBbY2xhc3NePVwiY3VzdG9tZXItbG9nb1wiXSB7XG4gICAgICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXCIvaW1nL3Byby9wcm8tY3VzdG9tZXItc3ByaXRlLnBuZ1wiKTtcbiAgICAgIGJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7XG4gICAgICBiYWNrZ3JvdW5kLXNpemU6IDEyMXB4IDI1NnB4O1xuICAgICAgbWFyZ2luOiAzNHB4IDQycHg7IH1cbiAgICBAbWVkaWEgKG1heC13aWR0aDogOTkxcHgpIHtcbiAgICAgICNwYWdlLXByb2R1Y3RzIC5jdXN0b21lci1sb2dvcyB7XG4gICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOyB9XG4gICAgICAgICNwYWdlLXByb2R1Y3RzIC5jdXN0b21lci1sb2dvcyBbY2xhc3NePVwiY3VzdG9tZXItbG9nb1wiXSB7XG4gICAgICAgICAgbWFyZ2luOiAyMnB4IDM0cHg7IH0gfVxuICAgIEBtZWRpYSAobWF4LXdpZHRoOiA3NjhweCkge1xuICAgICAgI3BhZ2UtcHJvZHVjdHMgLmN1c3RvbWVyLWxvZ29zIHtcbiAgICAgICAgcGFkZGluZzogOHB4OyB9XG4gICAgICAgICNwYWdlLXByb2R1Y3RzIC5jdXN0b21lci1sb2dvcyBbY2xhc3NePVwiY3VzdG9tZXItbG9nb1wiXSB7XG4gICAgICAgICAgbWFyZ2luOiAxNnB4IDE4cHg7IH0gfVxuICAgICNwYWdlLXByb2R1Y3RzIC5jdXN0b21lci1sb2dvcyAuY3VzdG9tZXItbG9nby0tbGVuZGluZ2NsdWIge1xuICAgICAgd2lkdGg6IDEyMXB4O1xuICAgICAgaGVpZ2h0OiAxOHB4O1xuICAgICAgYmFja2dyb3VuZC1wb3NpdGlvbjogMCAwOyB9XG4gICAgI3BhZ2UtcHJvZHVjdHMgLmN1c3RvbWVyLWxvZ29zIC5jdXN0b21lci1sb2dvLS1tY2RvbmFsZHMge1xuICAgICAgYmFja2dyb3VuZC1wb3NpdGlvbjogMCAtMTlweDtcbiAgICAgIHdpZHRoOiAyNHB4O1xuICAgICAgaGVpZ2h0OiAyMHB4OyB9XG4gICAgI3BhZ2UtcHJvZHVjdHMgLmN1c3RvbWVyLWxvZ29zIC5jdXN0b21lci1sb2dvLS1zdHVkeSB7XG4gICAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwIC00MHB4O1xuICAgICAgd2lkdGg6IDExOHB4O1xuICAgICAgaGVpZ2h0OiAxOHB4OyB9XG4gICAgI3BhZ2UtcHJvZHVjdHMgLmN1c3RvbWVyLWxvZ29zIC5jdXN0b21lci1sb2dvLS1jYXQge1xuICAgICAgYmFja2dyb3VuZC1wb3NpdGlvbjogMCAtNTlweDtcbiAgICAgIHdpZHRoOiAzNHB4O1xuICAgICAgaGVpZ2h0OiAyMHB4OyB9XG4gICAgI3BhZ2UtcHJvZHVjdHMgLmN1c3RvbWVyLWxvZ29zIC5jdXN0b21lci1sb2dvLS1nZSB7XG4gICAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwIC04MHB4O1xuICAgICAgd2lkdGg6IDI0cHg7XG4gICAgICBoZWlnaHQ6IDI0cHg7IH1cbiAgICAjcGFnZS1wcm9kdWN0cyAuY3VzdG9tZXItbG9nb3MgLmN1c3RvbWVyLWxvZ28tLWNvbWNhc3Qge1xuICAgICAgYmFja2dyb3VuZC1wb3NpdGlvbjogMCAtMTA1cHg7XG4gICAgICB3aWR0aDogNzNweDtcbiAgICAgIGhlaWdodDogMjBweDsgfVxuICAgICNwYWdlLXByb2R1Y3RzIC5jdXN0b21lci1sb2dvcyAuY3VzdG9tZXItbG9nby0tYW10cmFrIHtcbiAgICAgIGJhY2tncm91bmQtcG9zaXRpb246IDAgLTEyNnB4O1xuICAgICAgd2lkdGg6IDQ3cHg7XG4gICAgICBoZWlnaHQ6IDIwcHg7IH1cbiAgICAjcGFnZS1wcm9kdWN0cyAuY3VzdG9tZXItbG9nb3MgLmN1c3RvbWVyLWxvZ28tLWFpcmJ1cyB7XG4gICAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwIC0xNDdweDtcbiAgICAgIHdpZHRoOiAxMDdweDtcbiAgICAgIGhlaWdodDogMjBweDsgfVxuICAgICNwYWdlLXByb2R1Y3RzIC5jdXN0b21lci1sb2dvcyAuY3VzdG9tZXItbG9nby0tYWFhIHtcbiAgICAgIGJhY2tncm91bmQtcG9zaXRpb246IDAgLTE2OHB4O1xuICAgICAgd2lkdGg6IDQ1cHg7XG4gICAgICBoZWlnaHQ6IDI3cHg7IH1cbiAgICAjcGFnZS1wcm9kdWN0cyAuY3VzdG9tZXItbG9nb3MgLmN1c3RvbWVyLWxvZ28tLWRlbG9pdHRlIHtcbiAgICAgIGJhY2tncm91bmQtcG9zaXRpb246IDAgLTE5NXB4O1xuICAgICAgd2lkdGg6IDg3cHg7XG4gICAgICBoZWlnaHQ6IDE2cHg7IH1cbiAgICAjcGFnZS1wcm9kdWN0cyAuY3VzdG9tZXItbG9nb3MgLmN1c3RvbWVyLWxvZ28tLXVzYWEge1xuICAgICAgYmFja2dyb3VuZC1wb3NpdGlvbjogMCAtMjEycHg7XG4gICAgICB3aWR0aDogMjFweDtcbiAgICAgIGhlaWdodDogMjRweDsgfVxuICAgICNwYWdlLXByb2R1Y3RzIC5jdXN0b21lci1sb2dvcyAuY3VzdG9tZXItbG9nby0taW5nIHtcbiAgICAgIGJhY2tncm91bmQtcG9zaXRpb246IDAgLTIzN3B4O1xuICAgICAgd2lkdGg6IDczcHg7XG4gICAgICBoZWlnaHQ6IDE5cHg7IH1cbiAgI3BhZ2UtcHJvZHVjdHMgLnByby12aWRlbyB7XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICB6LWluZGV4OiAxOyB9XG4gICAgI3BhZ2UtcHJvZHVjdHMgLnByby12aWRlbzpiZWZvcmUge1xuICAgICAgY29udGVudDogXCJcIjtcbiAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgaGVpZ2h0OiA1MCU7XG4gICAgICBsZWZ0OiAwO1xuICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgdG9wOiAwO1xuICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICB6LWluZGV4OiAxOyB9XG4gICAgI3BhZ2UtcHJvZHVjdHMgLnByby12aWRlbyAudmlkZW8tcGxheWVyIHtcbiAgICAgIG1heC13aWR0aDogOTAwcHg7XG4gICAgICB3aWR0aDogMTAwJTtcbiAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgIHotaW5kZXg6IDI7IH1cbiAgICAgICNwYWdlLXByb2R1Y3RzIC5wcm8tdmlkZW8gLnZpZGVvLXBsYXllcjpob3ZlciB7XG4gICAgICAgIGN1cnNvcjogcG9pbnRlcjsgfVxuICAgICAgI3BhZ2UtcHJvZHVjdHMgLnByby12aWRlbyAudmlkZW8tcGxheWVyOm5vdCguaXMtcGxheWluZyk6aG92ZXIgLnZpZGVvLXBsYXllci1mcmFtZSB7XG4gICAgICAgIHRyYW5zZm9ybTogc2NhbGUoMC45OSk7IH1cbiAgICAgICNwYWdlLXByb2R1Y3RzIC5wcm8tdmlkZW8gLnZpZGVvLXBsYXllcjpub3QoLmlzLXBsYXlpbmcpOmhvdmVyIC52aWRlby1wbGF5ZXItYnV0dG9uIHtcbiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoLTUwJSwgLTUwJSkgc2NhbGUoMS4wNSk7IH1cbiAgICAgICNwYWdlLXByb2R1Y3RzIC5wcm8tdmlkZW8gLnZpZGVvLXBsYXllci5pcy1yZWFkeSAudmlkZW8tcGxheWVyLWJ1dHRvbiB7XG4gICAgICAgIGRpc3BsYXk6IGJsb2NrOyB9XG4gICAgICAjcGFnZS1wcm9kdWN0cyAucHJvLXZpZGVvIC52aWRlby1wbGF5ZXIuaXMtcGxheWluZyAudmlkZW8tcGxheWVyLWJ1dHRvbiB7XG4gICAgICAgIGRpc3BsYXk6IG5vbmU7IH1cbiAgICAjcGFnZS1wcm9kdWN0cyAucHJvLXZpZGVvIC52aWRlby1wbGF5ZXItYnV0dG9uIHtcbiAgICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgICBsZWZ0OiA1MCU7XG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICB0b3A6IDUwJTtcbiAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsIC01MCUpIHNjYWxlKDEpO1xuICAgICAgdHJhbnNpdGlvbjogdHJhbnNmb3JtIDQwMG1zIGN1YmljLWJlemllcigwLjE3NSwgMC44ODUsIDAuMzIsIDEuMjc1KTtcbiAgICAgIHdpZHRoOiA4MHB4O1xuICAgICAgei1pbmRleDogMTsgfVxuICAgICNwYWdlLXByb2R1Y3RzIC5wcm8tdmlkZW8gLnZpZGVvLXBsYXllci1mcmFtZSB7XG4gICAgICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXCIvaW1nL3Byby9wcm8tZGFzaC12aWRlby1zY3JlZW5zaG90LnBuZ1wiKTtcbiAgICAgIGJhY2tncm91bmQtcG9zaXRpb246IGNlbnRlciBjZW50ZXI7XG4gICAgICBiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0O1xuICAgICAgYmFja2dyb3VuZC1zaXplOiBjb250YWluO1xuICAgICAgYm9yZGVyLXJhZGl1czogOHB4O1xuICAgICAgaGVpZ2h0OiAwO1xuICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICAgIHBhZGRpbmctYm90dG9tOiA2NC42NyU7XG4gICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICB0cmFuc2Zvcm06IHNjYWxlKDEpO1xuICAgICAgdHJhbnNpdGlvbjogdHJhbnNmb3JtIDQwMG1zIGN1YmljLWJlemllcigwLjE5LCAxLCAwLjIyLCAxKTsgfVxuICAgICAgI3BhZ2UtcHJvZHVjdHMgLnByby12aWRlbyAudmlkZW8tcGxheWVyLWZyYW1lID4gaWZyYW1lIHtcbiAgICAgICAgaGVpZ2h0OiAxMDAlO1xuICAgICAgICBsZWZ0OiAwO1xuICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgIHRvcDogMDtcbiAgICAgICAgd2lkdGg6IDEwMCU7IH1cbiAgI3BhZ2UtcHJvZHVjdHMgLnByby1iZW5lZml0cyB7XG4gICAgcGFkZGluZy1sZWZ0OiA2MHB4OyB9XG4gICAgI3BhZ2UtcHJvZHVjdHMgLnByby1iZW5lZml0cyB1bCB7XG4gICAgICBsaXN0LXN0eWxlLXR5cGU6IG5vbmU7XG4gICAgICBtYXJnaW46IDA7XG4gICAgICBwYWRkaW5nOiAwOyB9XG4gICAgI3BhZ2UtcHJvZHVjdHMgLnByby1iZW5lZml0cyBsaSB7XG4gICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICBwYWRkaW5nLWxlZnQ6IDQwcHg7IH1cbiAgICAgICNwYWdlLXByb2R1Y3RzIC5wcm8tYmVuZWZpdHMgbGkgKyBsaSB7XG4gICAgICAgIG1hcmdpbi10b3A6IDIycHg7IH1cbiAgICAgICNwYWdlLXByb2R1Y3RzIC5wcm8tYmVuZWZpdHMgbGk6OmJlZm9yZSB7XG4gICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICBjb250ZW50OiAnJztcbiAgICAgICAgd2lkdGg6IDI0cHg7XG4gICAgICAgIGhlaWdodDogMjRweDtcbiAgICAgICAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFwiZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFERUFBQUF3Q0FZQUFBQzR3Sks1QUFBRC9FbEVRVlJvZ2MzYTI0dFZaUnpHOGM5YWM5ak9PT2pJTUdvTVNYUXhSQmMxNlVXUzRZVmlrQktLVUdURVVGMzVCd2poWDVCQ0YwRVhSaGNWVTBRVUNCWVI1QUVTSklrd3U0a1lMNEpBODVBNTZkQzRaMnhXRis4YTNUT3pEMnZ0dzVvZVdPek4zdXY5L1o0djczRzk3NHFTSkhId1krMVFIN1poSzBiVGF4QUQ2Zi9UbU1Ka2VwM0hPY3kwbXJpN3hmSjkySXR4N0VBcFE1bW5LNzZYY1FZVE9LRkpvR1loQm5FUWh6RFVaQXdDOVBQcGRSTnY0ejJoeGpJcnpwazB3dXRDYzNoTGF3QkxOWlRHbkV4elJGa0w1b0hZaUpQNEFNTjUzT1hVY0pyalpKcXpvYkpDYk1kRjdHek9WMVBhbWViYzN1akcrT2MvR2diYmoyK3hvV1ZiK2JVaHpiMi8zazJOYW1JL3ZwQnQxT21VU3FtSG1pRDFJTGJqMHdiM0ZLVlk4RksxYWRVeXVCR2ZXOWthV0txUzRHbFpaNjhHRWVFVEs5TUhHbW1ENEczUjhGc040alhGamtKNXRWUHdlRjlMSVFaeHRDZzNMZWlvNEJYTElRN3E3RVRXTGcwTFhyRVlvazlZQzYySWh0ZXdPdDh3Y2tqd3ZBaGlyL2F1aFRKclpCMzd0ckIzU3k2UUljSHpJb2p4Tm52THBKRjE3QjZqdTR1MS9leDVpbEwydGZVNER5RDZoT2VCUWxVSnNLRCtYbnF6USt4QVh3eHg1RmtGVDJ6VkFHWm0rZklDZCs1bURsUEN0bEFUa1dmYTdMR3U2Z0g4TlowNzNOWVlJaDVybThNRzJqallWZ0FZalJFbDRhRys0MXEvaGozdEJXQUJJbUpkNnhicmEvMGFYdGk4dU5PMkFRQUdRMDBrVnVjdDJWOEtFMVFXZFJBQUJrSk5STmtmeWdrVDByNHQ0UnBwVUljZEJrQTZUMFJSOXYyZXZ0NHdzNjd0RDIxNzkxaHRrQ0lBTUIwamlTTjNzcGJvaXVpcTZKaTFRQW9DZ0trWVNYZnN0NndscHN1YytERjhMbWdwU0lFQU1Ca2o2ZXB5S1UrcDJ6TzFRWjdZVkNnQUN4Q3JlbnlmdDJRdGtHMmpoUUxBK1JnZVhlOU1GSm5MVzdvYVNLWHV6blVjb0l4ek1XeCt4RlJ2dHgrYWlWSUxaUFllWC8vVVVRRENqdnBNRE1kTytiZlViYUxaU1BkQjB0Vm5lWTZ2TG5EOWRsdU0xdE1FUkJldkpJNmQ0dkVSYTMrOTR2ZjVSTVo1ZUxsS1BXd2E0dkl0L3FuUnhOcW9tM2pZUWszQUw1ZjlYZXJ4Yml0UnkzTmN1bG9JQU9Fc1k0WWx1eDBEcTd3VFIyNFZZcUUxM1JBT1k3QUU0c1p0ZjNaM09WeTRwZng2VThWcDBySWR3Tmw3M284ajN4VnFLWjlPNDZQS0g2cHRZeWJ6aVpkeHZRaEhPWFVOcnlLcC9MSFdydmhWdkNoTUp2OFhsZkdTNEcyUjZwMDluTVVybU8rUXFUeWFGN3ljcmZabm93T1U0MWErUnNxcGgrTzFic2h5Q25RY3p3bnRzV2hkUzNQWEJDRDdVZFpaakFralExRTZuZWFzMm9RcUZULzVVT2FnVjdFTGJ3aVRUYWQwSTgyeFM1Vk9YRTE1RHhVVGZDanNVeDBXMWkvdDBzMDA1bWlhSTZsLyt3TTFlekk2aFNQQ0F1d0F2dEZjNXkrblpRK2tzWTdJK1Y0SHJiOWxNNFBQMG12RlhoWDZEM21WS1RYMmZFTnNBQUFBQUVsRlRrU3VRbUNDXCIpO1xuICAgICAgICBiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0O1xuICAgICAgICBiYWNrZ3JvdW5kLXNpemU6IDEwMCU7XG4gICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgdG9wOiAwO1xuICAgICAgICBsZWZ0OiAwOyB9XG4gICAgICAjcGFnZS1wcm9kdWN0cyAucHJvLWJlbmVmaXRzIGxpIGg0IHtcbiAgICAgICAgbWFyZ2luOiAwO1xuICAgICAgICBmb250LXdlaWdodDogNjAwO1xuICAgICAgICBmb250LXNpemU6IDE2cHg7XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAyMHB4OyB9XG4gICAgICAjcGFnZS1wcm9kdWN0cyAucHJvLWJlbmVmaXRzIGxpIHAge1xuICAgICAgICBjb2xvcjogIzU0NWM2YTtcbiAgICAgICAgZm9udC1zaXplOiAxNXB4O1xuICAgICAgICBsaW5lLWhlaWdodDogMjRweDsgfVxuICAjcGFnZS1wcm9kdWN0cyAuaGVybyB7XG4gICAgYmFja2dyb3VuZDogbm8tcmVwZWF0IGNlbnRlciBjZW50ZXI7XG4gICAgYmFja2dyb3VuZC1zaXplOiBjb3ZlcjtcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgIHBhZGRpbmctdG9wOiAwO1xuICAgIHBhZGRpbmctYm90dG9tOiAwOyB9XG4gICAgI3BhZ2UtcHJvZHVjdHMgLmhlcm8gLmNvbnRlbnQge1xuICAgICAgd2lkdGg6IDM5JTtcbiAgICAgIHRleHQtYWxpZ246IGxlZnQ7XG4gICAgICBwYWRkaW5nLXRvcDogMjAwcHg7XG4gICAgICBwYWRkaW5nLWJvdHRvbTogMjIwcHg7XG4gICAgICBjb2xvcjogIzA3MGYxYTtcbiAgICAgIG1pbi1oZWlnaHQ6IDcyNHB4O1xuICAgICAgcG9zaXRpb246IHJlbGF0aXZlOyB9XG4gICAgICAjcGFnZS1wcm9kdWN0cyAuaGVybyAuY29udGVudC5kYXJrIHtcbiAgICAgICAgY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC44KTsgfVxuICAgICAgICAjcGFnZS1wcm9kdWN0cyAuaGVybyAuY29udGVudC5kYXJrIGgyLFxuICAgICAgICAjcGFnZS1wcm9kdWN0cyAuaGVybyAuY29udGVudC5kYXJrIC5oZXJvX19jdGEge1xuICAgICAgICAgIGNvbG9yOiAjMTUxZDJiOyB9XG4gICAgICAgICNwYWdlLXByb2R1Y3RzIC5oZXJvIC5jb250ZW50LmRhcmsgcCB7XG4gICAgICAgICAgY29sb3I6ICM1OTZhODk7IH1cbiAgICAgICNwYWdlLXByb2R1Y3RzIC5oZXJvIC5jb250ZW50IGgyIHtcbiAgICAgICAgZm9udC1zaXplOiAzNnB4O1xuICAgICAgICBsZXR0ZXItc3BhY2luZzogLTAuMDNlbTtcbiAgICAgICAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgICAgICAgbWFyZ2luLWJvdHRvbTogMTJweDsgfVxuICAgICAgI3BhZ2UtcHJvZHVjdHMgLmhlcm8gLmNvbnRlbnQgcCB7XG4gICAgICAgIGZvbnQtc2l6ZTogMjBweDtcbiAgICAgICAgbGluZS1oZWlnaHQ6IDMycHg7XG4gICAgICAgIGZvbnQtZmFtaWx5OiBcIkludGVyXCIsIFwiSW50ZXIgVUlcIiwgSGVsdmV0aWNhLCBBcmlhbCwgc2Fucy1zZXJpZjtcbiAgICAgICAgZm9udC13ZWlnaHQ6IDQwMDsgfVxuICAgICAgI3BhZ2UtcHJvZHVjdHMgLmhlcm8gLmNvbnRlbnQgaDQge1xuICAgICAgICBmb250LWZhbWlseTogXCJSb2JvdG8gTW9ub1wiLCBNZW5sbywgTW9uYWNvLCBDb25zb2xhcywgXCJDb3VyaWVyIE5ld1wiLCBtb25vc3BhY2U7XG4gICAgICAgIHBhZGRpbmctdG9wOiAxMDBweDtcbiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICAgICBjb2xvcjogIzgwOGZhNzsgfVxuICAgICAgICAjcGFnZS1wcm9kdWN0cyAuaGVybyAuY29udGVudCBoNDo6YmVmb3JlIHtcbiAgICAgICAgICBiYWNrZ3JvdW5kOiB1cmwoXCIvaW1nL3Byby9wcm9kdWN0LWhlYWRlci1pY29ucy5wbmdcIikgMCAwIG5vLXJlcGVhdDtcbiAgICAgICAgICBiYWNrZ3JvdW5kLXNpemU6IDY0cHg7XG4gICAgICAgICAgd2lkdGg6IDY0cHg7XG4gICAgICAgICAgaGVpZ2h0OiA2NHB4O1xuICAgICAgICAgIGNvbnRlbnQ6ICcnO1xuICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgICB0b3A6IDA7IH1cbiAgICAjcGFnZS1wcm9kdWN0cyAuaGVyb19fY3RhLWJhciB7XG4gICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsgfVxuICAgICAgI3BhZ2UtcHJvZHVjdHMgLmhlcm9fX2N0YS1iYXIgYSArIGEge1xuICAgICAgICBtYXJnaW4tbGVmdDogMjBweDsgfVxuICAgICNwYWdlLXByb2R1Y3RzIC5oZXJvX19jdGEtYmFyLXNlY29uZGFyeSB7XG4gICAgICBtYXJnaW4tbGVmdDogMzBweDsgfVxuICAgIEBtZWRpYSAobWF4LXdpZHRoOiA3NjdweCkge1xuICAgICAgI3BhZ2UtcHJvZHVjdHMgLmhlcm9fX2N0YS1iYXIge1xuICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOyB9XG4gICAgICAjcGFnZS1wcm9kdWN0cyAuaGVyb19fY3RhLWJhci1zZWNvbmRhcnkge1xuICAgICAgICBtYXJnaW4tbGVmdDogMDtcbiAgICAgICAgbWFyZ2luLXRvcDogMjRweDsgfSB9XG4gICAgI3BhZ2UtcHJvZHVjdHMgLmhlcm9fX2N0YSB7XG4gICAgICBib3JkZXItYm90dG9tLXN0eWxlOiBzb2xpZDtcbiAgICAgIGJvcmRlci1ib3R0b20td2lkdGg6IDJweDtcbiAgICAgIGNvbG9yOiBpbmhlcml0O1xuICAgICAgZm9udC1zaXplOiAxOHB4O1xuICAgICAgZm9udC13ZWlnaHQ6IDcwMDtcbiAgICAgIHBhZGRpbmctYm90dG9tOiA0cHg7XG4gICAgICB0cmFuc2l0aW9uOiBib3JkZXItYm90dG9tLWNvbG9yIDEwMG1zIGVhc2UtaW4tb3V0OyB9XG4gICAgICAjcGFnZS1wcm9kdWN0cyAuaGVyb19fY3RhOmFmdGVyIHtcbiAgICAgICAgY29udGVudDogJ1xcZjI4Nyc7XG4gICAgICAgIGZvbnQtZmFtaWx5OiAnSW9uaWNvbnMnO1xuICAgICAgICBmb250LXNpemU6IDE2cHg7XG4gICAgICAgIG1hcmdpbi1sZWZ0OiA1cHg7IH1cbiAgICAgICNwYWdlLXByb2R1Y3RzIC5oZXJvX19jdGE6aG92ZXIge1xuICAgICAgICBib3JkZXItYm90dG9tLWNvbG9yOiB0cmFuc3BhcmVudDsgfVxuICAgICNwYWdlLXByb2R1Y3RzIC5oZXJvX19pY29uLWxpbmsge1xuICAgICAgdHJhbnNpdGlvbjogb3BhY2l0eSAwLjNzO1xuICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgICAgb3BhY2l0eTogMC43OyB9XG4gICAgICAjcGFnZS1wcm9kdWN0cyAuaGVyb19faWNvbi1saW5rIGkge1xuICAgICAgICBmb250LXNpemU6IDMwcHg7XG4gICAgICAgIGNvbG9yOiAjZmZmOyB9XG4gICAgICAjcGFnZS1wcm9kdWN0cyAuaGVyb19faWNvbi1saW5rOmhvdmVyIHtcbiAgICAgICAgb3BhY2l0eTogMTsgfVxuICAgICNwYWdlLXByb2R1Y3RzIC5oZXJvIC5jb250YWluZXIge1xuICAgICAgcG9zaXRpb246IHJlbGF0aXZlOyB9XG4gICAgICAjcGFnZS1wcm9kdWN0cyAuaGVybyAuY29udGFpbmVyOjpiZWZvcmUge1xuICAgICAgICBiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0O1xuICAgICAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiByaWdodCAwO1xuICAgICAgICBiYWNrZ3JvdW5kLXNpemU6IGNvbnRhaW47XG4gICAgICAgIHRvcDogMDtcbiAgICAgICAgcmlnaHQ6IDA7XG4gICAgICAgIGxlZnQ6IDA7XG4gICAgICAgIGJvdHRvbTogMDtcbiAgICAgICAgY29udGVudDogJyc7XG4gICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgIG9wYWNpdHk6IDA7XG4gICAgICAgIHRyYW5zaXRpb246IC4ycyBvcGFjaXR5OyB9XG4gICAgI3BhZ2UtcHJvZHVjdHMgLmhlcm8uYWN0aXZlIC5jb250YWluZXI6OmJlZm9yZSB7XG4gICAgICBvcGFjaXR5OiAxOyB9XG4gICAgI3BhZ2UtcHJvZHVjdHMgLmhlcm8gaDQge1xuICAgICAgZm9udC1zaXplOiAxMXB4O1xuICAgICAgZm9udC13ZWlnaHQ6IDcwMDtcbiAgICAgIGxldHRlci1zcGFjaW5nOiAwLjJlbTtcbiAgICAgIGNvbG9yOiAjMjcyYTJmO1xuICAgICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcbiAgICAgIG1hcmdpbi1ib3R0b206IDMwcHg7IH1cbiAgICAjcGFnZS1wcm9kdWN0cyAuaGVybyBoMyB7XG4gICAgICBmb250LXNpemU6IDM2cHg7XG4gICAgICBmb250LXdlaWdodDogNzAwO1xuICAgICAgbGV0dGVyLXNwYWNpbmc6IC0uMDJlbTtcbiAgICAgIG1hcmdpbi1ib3R0b206IDMwcHg7IH1cbiAgICAjcGFnZS1wcm9kdWN0cyAuaGVybyBoMiB7XG4gICAgICBjb2xvcjogIzI3MmEyZjtcbiAgICAgIGZvbnQtc2l6ZTogMzZweDtcbiAgICAgIG1hcmdpbi1ib3R0b206IDIzcHg7XG4gICAgICBtYXJnaW4tdG9wOiAxNHB4O1xuICAgICAgZm9udC13ZWlnaHQ6IDcwMDtcbiAgICAgIGxldHRlci1zcGFjaW5nOiAtLjAxNWVtOyB9XG4gICAgI3BhZ2UtcHJvZHVjdHMgLmhlcm8gcCB7XG4gICAgICBmb250LXNpemU6IDE2cHg7XG4gICAgICBmb250LXdlaWdodDogNjAwO1xuICAgICAgbGV0dGVyLXNwYWNpbmc6IC0uMDI2ZW07XG4gICAgICBsaW5lLWhlaWdodDogMS44ZW07XG4gICAgICBtYXJnaW4tYm90dG9tOiAzMHB4O1xuICAgICAgY29sb3I6ICM1ZTY3Nzc7IH1cbiAgICAgICNwYWdlLXByb2R1Y3RzIC5oZXJvIHAgc3Ryb25nIHtcbiAgICAgICAgY29sb3I6ICMyNzJhMmY7XG4gICAgICAgIGZvbnQtd2VpZ2h0OiA3MDA7IH1cbiAgICAgICNwYWdlLXByb2R1Y3RzIC5oZXJvIHAgYTpob3ZlciB7XG4gICAgICAgIGNvbG9yOiAjNGE4YmZjOyB9XG4gICAgI3BhZ2UtcHJvZHVjdHMgLmhlcm8gLmJ0biB7XG4gICAgICBwYWRkaW5nOiAxM3B4IDE1cHg7XG4gICAgICBmb250LXNpemU6IDE0cHg7XG4gICAgICBmb250LXdlaWdodDogNjAwOyB9XG4gICAgICAjcGFnZS1wcm9kdWN0cyAuaGVybyAuYnRuIHN0cm9uZyB7XG4gICAgICAgIGZvbnQtd2VpZ2h0OiA3MDA7IH1cbiAgICAgICNwYWdlLXByb2R1Y3RzIC5oZXJvIC5idG46OmFmdGVyIHtcbiAgICAgICAgZm9udC1mYW1pbHk6ICdJb25pY29ucyc7XG4gICAgICAgIGNvbnRlbnQ6ICdcXGYyODcnO1xuICAgICAgICBmb250LXNpemU6IDE1cHg7XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxMHB4O1xuICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogLTFweDtcbiAgICAgICAgbWFyZ2luLWxlZnQ6IDhweDtcbiAgICAgICAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgICAgICB0cmFuc2l0aW9uOiAuMnMgdHJhbnNmb3JtOyB9XG4gICAgICAjcGFnZS1wcm9kdWN0cyAuaGVybyAuYnRuOmhvdmVyOjphZnRlciB7XG4gICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlM2QoMnB4LCAwLCAwKTsgfVxuICAgIEBtZWRpYSAobWF4LXdpZHRoOiA0ODBweCkge1xuICAgICAgI3BhZ2UtcHJvZHVjdHMgLmhlcm8gLmNvbnRlbnQgaDIge1xuICAgICAgICBmb250LXNpemU6IDMwcHg7IH1cbiAgICAgICNwYWdlLXByb2R1Y3RzIC5oZXJvIC5jb250ZW50IHAge1xuICAgICAgICBmb250LXNpemU6IDE4cHg7XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjZlbTsgfSB9XG4gICNwYWdlLXByb2R1Y3RzICNvdmVydmlldyB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjtcbiAgICBjb2xvcjogIzI3MmEyZjtcbiAgICBwYWRkaW5nLWJvdHRvbTogMTgwcHg7XG4gICAgcGFkZGluZy10b3A6IDE0MHB4OyB9XG4gICAgI3BhZ2UtcHJvZHVjdHMgI292ZXJ2aWV3IGhncm91cCB7XG4gICAgICBtYXgtd2lkdGg6IDc0MHB4O1xuICAgICAgbWFyZ2luOiAwIGF1dG8gNjhweDsgfVxuICAgICAgI3BhZ2UtcHJvZHVjdHMgI292ZXJ2aWV3IGhncm91cCBoMyB7XG4gICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7XG4gICAgICAgIGNvbG9yOiAjMDcwZjFhO1xuICAgICAgICBtYXJnaW4tYm90dG9tOiAxNHB4OyB9XG4gICAgICAjcGFnZS1wcm9kdWN0cyAjb3ZlcnZpZXcgaGdyb3VwIHAge1xuICAgICAgICBmb250LXNpemU6IDIycHg7XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAzNnB4O1xuICAgICAgICBjb2xvcjogIzQzNTQ2ZjtcbiAgICAgICAgZm9udC13ZWlnaHQ6IDQwMDsgfVxuICAgICNwYWdlLXByb2R1Y3RzICNvdmVydmlldyAuZmVhdHVyZXMge1xuICAgICAgcGFkZGluZzogMDtcbiAgICAgIGxpc3Qtc3R5bGU6IG5vbmU7XG4gICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xuICAgICAgbWF4LXdpZHRoOiA5NjBweDtcbiAgICAgIG1hcmdpbjogMCBhdXRvOyB9XG4gICAgICAjcGFnZS1wcm9kdWN0cyAjb3ZlcnZpZXcgLmZlYXR1cmVzIGg0IHtcbiAgICAgICAgZm9udC1zaXplOiAyMHB4O1xuICAgICAgICB0ZXh0LXRyYW5zZm9ybTogbm9uZTtcbiAgICAgICAgbGV0dGVyLXNwYWNpbmc6IC0uMDJlbTtcbiAgICAgICAgbWFyZ2luLXRvcDogNXB4O1xuICAgICAgICBtYXJnaW4tYm90dG9tOiAxM3B4O1xuICAgICAgICBmb250LXdlaWdodDogNjAwOyB9XG4gICAgICAjcGFnZS1wcm9kdWN0cyAjb3ZlcnZpZXcgLmZlYXR1cmVzIHAge1xuICAgICAgICBmb250LWZhbWlseTogXCJJbnRlclwiLCBcIkludGVyIFVJXCIsIEhlbHZldGljYSwgQXJpYWwsIHNhbnMtc2VyaWY7XG4gICAgICAgIGZvbnQtc2l6ZTogMTZweDtcbiAgICAgICAgbGluZS1oZWlnaHQ6IDI4cHg7XG4gICAgICAgIGNvbG9yOiAjNjg3ZTk5O1xuICAgICAgICBsZXR0ZXItc3BhY2luZzogLS4wMTVlbTtcbiAgICAgICAgZm9udC13ZWlnaHQ6IDQwMDsgfVxuICAgICNwYWdlLXByb2R1Y3RzICNvdmVydmlldyBsaSB7XG4gICAgICBwYWRkaW5nLXRvcDogNjhweDtcbiAgICAgIGZsZXg6IDAgMSAzMjBweDtcbiAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsgfVxuICAgICAgI3BhZ2UtcHJvZHVjdHMgI292ZXJ2aWV3IGxpOjpiZWZvcmUge1xuICAgICAgICBiYWNrZ3JvdW5kOiB1cmwoXCIvaW1nL3Byby9wcm8tZmVhdHVyZS1pY29ucy5wbmdcIikgMCAwIG5vLXJlcGVhdDtcbiAgICAgICAgYmFja2dyb3VuZC1zaXplOiA0OHB4O1xuICAgICAgICBoZWlnaHQ6IDQ4cHg7XG4gICAgICAgIHdpZHRoOiA0OHB4O1xuICAgICAgICBjb250ZW50OiAnJztcbiAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICB0b3A6IDA7IH1cbiAgICAgICNwYWdlLXByb2R1Y3RzICNvdmVydmlldyBsaS5mYXN0ZXI6OmJlZm9yZSB7XG4gICAgICAgIGJhY2tncm91bmQtcG9zaXRpb246IDAgLTQ4cHg7IH1cbiAgICAgICNwYWdlLXByb2R1Y3RzICNvdmVydmlldyBsaS5oYXBwaWVyOjpiZWZvcmUge1xuICAgICAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwIC05NnB4OyB9XG4gICAgICAjcGFnZS1wcm9kdWN0cyAjb3ZlcnZpZXcgbGkgKyBsaSB7XG4gICAgICAgIG1hcmdpbi1sZWZ0OiAyNHB4OyB9XG4gICAgQG1lZGlhIChtYXgtd2lkdGg6IDUyMHB4KSB7XG4gICAgICAjcGFnZS1wcm9kdWN0cyAjb3ZlcnZpZXcgLmZlYXR1cmVzIHtcbiAgICAgICAgZGlzcGxheTogYmxvY2s7IH1cbiAgICAgICNwYWdlLXByb2R1Y3RzICNvdmVydmlldyBsaSB7XG4gICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsgfVxuICAgICAgICAjcGFnZS1wcm9kdWN0cyAjb3ZlcnZpZXcgbGk6OmJlZm9yZSB7XG4gICAgICAgICAgbGVmdDogY2FsYyggNTAlIC0gMjRweCk7IH1cbiAgICAgICAgI3BhZ2UtcHJvZHVjdHMgI292ZXJ2aWV3IGxpICsgbGkge1xuICAgICAgICAgIG1hcmdpbi1sZWZ0OiAwOyB9IH1cbiAgICBAbWVkaWEgKG1heC13aWR0aDogNzY4cHgpIHtcbiAgICAgICNwYWdlLXByb2R1Y3RzICNvdmVydmlldyB7XG4gICAgICAgIHBhZGRpbmctYm90dG9tOiA2OHB4O1xuICAgICAgICBwYWRkaW5nLXRvcDogMTAycHg7IH0gfVxuICAgIEBtZWRpYSAobWF4LXdpZHRoOiA0ODBweCkge1xuICAgICAgI3BhZ2UtcHJvZHVjdHMgI292ZXJ2aWV3IHtcbiAgICAgICAgcGFkZGluZy1ib3R0b206IDQ4cHg7XG4gICAgICAgIHBhZGRpbmctdG9wOiA3MnB4OyB9XG4gICAgICAgICNwYWdlLXByb2R1Y3RzICNvdmVydmlldyBoZ3JvdXAge1xuICAgICAgICAgIG1hcmdpbi1ib3R0b206IDQycHg7IH1cbiAgICAgICAgICAjcGFnZS1wcm9kdWN0cyAjb3ZlcnZpZXcgaGdyb3VwIGgzIHtcbiAgICAgICAgICAgIGZvbnQtc2l6ZTogMzBweDsgfVxuICAgICAgICAgICNwYWdlLXByb2R1Y3RzICNvdmVydmlldyBoZ3JvdXAgcCB7XG4gICAgICAgICAgICBmb250LXNpemU6IDE4cHg7XG4gICAgICAgICAgICBsaW5lLWhlaWdodDogMS42ZW07IH0gfVxuICAjcGFnZS1wcm9kdWN0cyAjdXBkYXRlcyB7XG4gICAgYmFja2dyb3VuZC1pbWFnZTogbGluZWFyLWdyYWRpZW50KDBkZWcsIHdoaXRlIDAlLCAjZjZmOGZiIDEwMCUpO1xuICAgIGJhY2tncm91bmQtc2l6ZTogMTAwJTsgfVxuICAgICNwYWdlLXByb2R1Y3RzICN1cGRhdGVzIGg0OjpiZWZvcmUge1xuICAgICAgYmFja2dyb3VuZC1wb3NpdGlvbjogMCAwOyB9XG4gICAgI3BhZ2UtcHJvZHVjdHMgI3VwZGF0ZXMgLmNvbnRlbnQge1xuICAgICAgcGFkZGluZy10b3A6IDE3OXB4O1xuICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICAgei1pbmRleDogMTA7IH1cbiAgICAgIEBtZWRpYSAobWF4LXdpZHRoOiAxMjE5cHgpIHtcbiAgICAgICAgI3BhZ2UtcHJvZHVjdHMgI3VwZGF0ZXMgLmNvbnRlbnQge1xuICAgICAgICAgIHBhZGRpbmctdG9wOiAxNDhweDsgfSB9XG4gICAgI3BhZ2UtcHJvZHVjdHMgI3VwZGF0ZXMgLmFuaW0tdXBkYXRlcyB7XG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICB6LWluZGV4OiA0O1xuICAgICAgdG9wOiAwO1xuICAgICAgYm90dG9tOiAwO1xuICAgICAgbGVmdDogNTAlO1xuICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC0xMDBweCk7XG4gICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsgfVxuICAgICNwYWdlLXByb2R1Y3RzICN1cGRhdGVzIC5hbmltLXVwZGF0ZXNfX3Jvb3Qge1xuICAgICAgd2lkdGg6IDcyNnB4O1xuICAgICAgaGVpZ2h0OiA0MzdweDtcbiAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsgfVxuICAgICNwYWdlLXByb2R1Y3RzICN1cGRhdGVzIC5hbmltLXVwZGF0ZXNfX2ZvcmVncm91bmQsXG4gICAgI3BhZ2UtcHJvZHVjdHMgI3VwZGF0ZXMgLmFuaW0tdXBkYXRlc19fYmFja2dyb3VuZCB7XG4gICAgICB3aWR0aDogMTAwJTtcbiAgICAgIGhlaWdodDogMTAwJTtcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgIHRvcDogMDtcbiAgICAgIGxlZnQ6IDA7IH1cbiAgICAjcGFnZS1wcm9kdWN0cyAjdXBkYXRlcyAuYW5pbS11cGRhdGVzX19mb3JlZ3JvdW5kIHtcbiAgICAgIHotaW5kZXg6IDEwO1xuICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVaKDEwMDBweCk7IH1cbiAgICAjcGFnZS1wcm9kdWN0cyAjdXBkYXRlcyAuYW5pbS11cGRhdGVzX19iYWNrZ3JvdW5kIHtcbiAgICAgIHotaW5kZXg6IDE7XG4gICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVooMTAwcHgpOyB9XG4gICAgI3BhZ2UtcHJvZHVjdHMgI3VwZGF0ZXMgLmFuaW0tdXBkYXRlc19fZGV2aWNlIHtcbiAgICAgIHdpZHRoOiA3MjZweDtcbiAgICAgIGhlaWdodDogNDM3cHg7XG4gICAgICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXCIvaW1nL3Byby91cGRhdGVzLWlsbHVzdHJhdGlvbi1kZXZpY2UucG5nXCIpO1xuICAgICAgYmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdDtcbiAgICAgIGJhY2tncm91bmQtc2l6ZTogNzI2cHggNDM3cHg7XG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICB0b3A6IDA7XG4gICAgICBsZWZ0OiAwO1xuICAgICAgei1pbmRleDogNTtcbiAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWig1MDBweCk7IH1cbiAgICAjcGFnZS1wcm9kdWN0cyAjdXBkYXRlcyAuYW5pbS11cGRhdGVzX19zY3JlZW4ge1xuICAgICAgd2lkdGg6IDMwOHB4O1xuICAgICAgaGVpZ2h0OiA1NTRweDtcbiAgICAgIGJhY2tncm91bmQ6ICM1ZDM3ZmY7XG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICB0b3A6IDI4cHg7XG4gICAgICBsZWZ0OiA0MDZweDtcbiAgICAgIHRyYW5zZm9ybS1vcmlnaW46IHRvcCBsZWZ0O1xuICAgICAgdHJhbnNmb3JtOiByb3RhdGVYKDYwZGVnKSByb3RhdGVZKDAuN2RlZykgcm90YXRlWigzNi41ZGVnKSBza2V3KDJkZWcsIC0xLjVkZWcpOyB9XG4gICAgQG1lZGlhIChtYXgtd2lkdGg6IDk5MXB4KSB7XG4gICAgICAjcGFnZS1wcm9kdWN0cyAjdXBkYXRlcyAuYW5pbS11cGRhdGVzIHtcbiAgICAgICAgZGlzcGxheTogbm9uZTsgfVxuICAgICAgI3BhZ2UtcHJvZHVjdHMgI3VwZGF0ZXMgLmNvbnRlbnQge1xuICAgICAgICBtaW4taGVpZ2h0OiAwO1xuICAgICAgICBwYWRkaW5nLXRvcDogNjRweDtcbiAgICAgICAgcGFkZGluZy1ib3R0b206IDY0cHg7XG4gICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7IH1cbiAgICAgICAgI3BhZ2UtcHJvZHVjdHMgI3VwZGF0ZXMgLmNvbnRlbnQgaDQ6OmJlZm9yZSB7XG4gICAgICAgICAgbGVmdDogY2FsYyg1MCUgLSAzMnB4KTsgfSB9XG4gICNwYWdlLXByb2R1Y3RzICNidWlsZCB7XG4gICAgYmFja2dyb3VuZC1pbWFnZTogbGluZWFyLWdyYWRpZW50KDBkZWcsIHdoaXRlIDAlLCAjZjZmOGZiIDEwMCUpO1xuICAgIHBhZGRpbmc6IDEwMHB4IDA7IH1cbiAgICAjcGFnZS1wcm9kdWN0cyAjYnVpbGQgaDQ6OmJlZm9yZSB7XG4gICAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwIC02NHB4OyB9XG4gICAgI3BhZ2UtcHJvZHVjdHMgI2J1aWxkIC5hbmltLWJ1aWxkIHtcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgIGxlZnQ6IDA7XG4gICAgICB0b3A6IDA7XG4gICAgICBib3R0b206IDA7XG4gICAgICB3aWR0aDogMzklO1xuICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsgfVxuICAgICNwYWdlLXByb2R1Y3RzICNidWlsZCAuYW5pbS1idWlsZF9fdGV4dCB7XG4gICAgICBmaWxsOiAjNWQzN2ZmO1xuICAgICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcbiAgICAgIGZvbnQtc2l6ZTogMTJweDtcbiAgICAgIGZvbnQtd2VpZ2h0OiA3MDA7XG4gICAgICBsZXR0ZXItc3BhY2luZzogMC4wNWVtOyB9XG4gICAgI3BhZ2UtcHJvZHVjdHMgI2J1aWxkIC5jb250ZW50IHtcbiAgICAgIHBhZGRpbmctdG9wOiAxNDBweDsgfVxuICAgIEBtZWRpYSAobWF4LXdpZHRoOiA5OTFweCkge1xuICAgICAgI3BhZ2UtcHJvZHVjdHMgI2J1aWxkIC5jb250YWluZXI6OmJlZm9yZSB7XG4gICAgICAgIGJhY2tncm91bmQtc2l6ZTogNDAlO1xuICAgICAgICB0b3A6IDEyOHB4O1xuICAgICAgICBib3R0b206IDEyOHB4OyB9XG4gICAgICAjcGFnZS1wcm9kdWN0cyAjYnVpbGQgLmNvbnRlbnQge1xuICAgICAgICBwYWRkaW5nLXRvcDogNjRweDtcbiAgICAgICAgbWluLWhlaWdodDogMDtcbiAgICAgICAgd2lkdGg6IDQwJTsgfSB9XG4gICAgQG1lZGlhIChtYXgtd2lkdGg6IDc2N3B4KSB7XG4gICAgICAjcGFnZS1wcm9kdWN0cyAjYnVpbGQge1xuICAgICAgICBiYWNrZ3JvdW5kLWltYWdlOiBub25lO1xuICAgICAgICBwYWRkaW5nOiAwOyB9XG4gICAgICAgICNwYWdlLXByb2R1Y3RzICNidWlsZCAuYW5pbS1idWlsZCB7XG4gICAgICAgICAgZGlzcGxheTogbm9uZTsgfVxuICAgICAgICAjcGFnZS1wcm9kdWN0cyAjYnVpbGQgLmNvbnRlbnQge1xuICAgICAgICAgIG1pbi1oZWlnaHQ6IDA7XG4gICAgICAgICAgcGFkZGluZy10b3A6IDY0cHg7XG4gICAgICAgICAgcGFkZGluZy1ib3R0b206IDY0cHg7XG4gICAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyOyB9XG4gICAgICAgICAgI3BhZ2UtcHJvZHVjdHMgI2J1aWxkIC5jb250ZW50IGg0OjpiZWZvcmUge1xuICAgICAgICAgICAgbGVmdDogY2FsYyg1MCUgLSAzMnB4KTsgfSB9XG4gICNwYWdlLXByb2R1Y3RzICNyZXBvcnRpbmcge1xuICAgIGJhY2tncm91bmQ6ICMwODFiMTc7XG4gICAgcGFkZGluZzogNTBweCAwOyB9XG4gICAgI3BhZ2UtcHJvZHVjdHMgI3JlcG9ydGluZyBoNCxcbiAgICAjcGFnZS1wcm9kdWN0cyAjcmVwb3J0aW5nIC5idG4ge1xuICAgICAgY29sb3I6ICM2MDdkNzk7IH1cbiAgICAgICNwYWdlLXByb2R1Y3RzICNyZXBvcnRpbmcgaDQ6OmJlZm9yZSxcbiAgICAgICNwYWdlLXByb2R1Y3RzICNyZXBvcnRpbmcgLmJ0bjo6YmVmb3JlIHtcbiAgICAgICAgYmFja2dyb3VuZC1wb3NpdGlvbjogMCAtMjU2cHg7IH1cbiAgICAjcGFnZS1wcm9kdWN0cyAjcmVwb3J0aW5nIC5hbmltLXJlcG9ydGluZyB7XG4gICAgICB3aWR0aDogMTA4NHB4O1xuICAgICAgaGVpZ2h0OiAxMDAlO1xuICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICB0b3A6IDA7XG4gICAgICBsZWZ0OiA1MCU7XG4gICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTI0MHB4KTtcbiAgICAgIGJvdHRvbTogMDtcbiAgICAgIHotaW5kZXg6IDE7IH1cbiAgICAjcGFnZS1wcm9kdWN0cyAjcmVwb3J0aW5nICNhbmltLXJlcG9ydGluZ19fc3ZnIHtcbiAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgaGVpZ2h0OiAxMDAlOyB9XG4gICAgI3BhZ2UtcHJvZHVjdHMgI3JlcG9ydGluZyAuYW5pbS1yZXBvcnRpbmdfX2JnIHtcbiAgICAgIGZpbGw6ICMwZDJiMjU7IH1cbiAgICAjcGFnZS1wcm9kdWN0cyAjcmVwb3J0aW5nIC5hbmltLXJlcG9ydGluZ19fc2NhbiB7XG4gICAgICBhbmltYXRpb24tbmFtZTogY3ljbGUtZmFkZTtcbiAgICAgIGFuaW1hdGlvbi1kdXJhdGlvbjogMnM7XG4gICAgICBhbmltYXRpb24tZGlyZWN0aW9uOiBhbHRlcm5hdGU7XG4gICAgICBhbmltYXRpb24taXRlcmF0aW9uLWNvdW50OiBpbmZpbml0ZTtcbiAgICAgIGFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IGVhc2U7IH1cblxuQGtleWZyYW1lcyBjeWNsZS1mYWRlIHtcbiAgZnJvbSB7XG4gICAgb3BhY2l0eTogMC40OyB9XG4gIHRvIHtcbiAgICBvcGFjaXR5OiAxOyB9IH1cbiAgICAjcGFnZS1wcm9kdWN0cyAjcmVwb3J0aW5nIC5hbmltLXJlcG9ydGluZ19fYnVnIHtcbiAgICAgIGZpbGw6ICNmZjMyNjc7XG4gICAgICB0cmFuc2Zvcm0tb3JpZ2luOiBjZW50ZXIgY2VudGVyOyB9XG4gICAgI3BhZ2UtcHJvZHVjdHMgI3JlcG9ydGluZyAuY29udGVudCB7XG4gICAgICBwYWRkaW5nLXRvcDogMTcycHg7XG4gICAgICB3aWR0aDogNDAlO1xuICAgICAgei1pbmRleDogNTsgfVxuICAgIEBtZWRpYSAobWF4LXdpZHRoOiA5OTFweCkge1xuICAgICAgI3BhZ2UtcHJvZHVjdHMgI3JlcG9ydGluZyAuY29udGVudCB7XG4gICAgICAgIG1pbi1oZWlnaHQ6IDA7XG4gICAgICAgIHBhZGRpbmctdG9wOiA2NHB4O1xuICAgICAgICB3aWR0aDogMTAwJTsgfVxuICAgICAgI3BhZ2UtcHJvZHVjdHMgI3JlcG9ydGluZyAuYW5pbS1yZXBvcnRpbmcge1xuICAgICAgICBvcGFjaXR5OiAwLjc7IH1cbiAgICAgICNwYWdlLXByb2R1Y3RzICNyZXBvcnRpbmcgLmFuaW0tcmVwb3J0aW5nX19jbGlwcGVkIHtcbiAgICAgICAgdHJhbnNmb3JtOiBzY2FsZSgwLjgpOyB9IH1cbiAgICBAbWVkaWEgKG1heC13aWR0aDogOTkxcHgpIHtcbiAgICAgICNwYWdlLXByb2R1Y3RzICNyZXBvcnRpbmcge1xuICAgICAgICBwYWRkaW5nOiAwOyB9XG4gICAgICAgICNwYWdlLXByb2R1Y3RzICNyZXBvcnRpbmcgLmFuaW0tcmVwb3J0aW5nIHtcbiAgICAgICAgICBkaXNwbGF5OiBub25lOyB9XG4gICAgICAgICNwYWdlLXByb2R1Y3RzICNyZXBvcnRpbmcgLmNvbnRlbnQge1xuICAgICAgICAgIG1pbi1oZWlnaHQ6IDA7XG4gICAgICAgICAgcGFkZGluZy10b3A6IDY0cHg7XG4gICAgICAgICAgcGFkZGluZy1ib3R0b206IDY0cHg7XG4gICAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyOyB9XG4gICAgICAgICAgI3BhZ2UtcHJvZHVjdHMgI3JlcG9ydGluZyAuY29udGVudCBoNDo6YmVmb3JlIHtcbiAgICAgICAgICAgIGxlZnQ6IGNhbGMoNTAlIC0gMzJweCk7IH0gfVxuICAjcGFnZS1wcm9kdWN0cyAjcHVzaCB7XG4gICAgYmFja2dyb3VuZDogI2ZmYmMyYSBuby1yZXBlYXQgY2VudGVyIGJvdHRvbTtcbiAgICBiYWNrZ3JvdW5kLWltYWdlOiBsaW5lYXItZ3JhZGllbnQodG8gcmlnaHQsICNmZmNlMzkgMCUsICNmZmFkMjAgMTAwJSk7XG4gICAgYmFja2dyb3VuZC1zaXplOiAxMDAlOyB9XG4gICAgI3BhZ2UtcHJvZHVjdHMgI3B1c2ggaDQge1xuICAgICAgY29sb3I6ICNkMjZkMDA7IH1cbiAgICAgICNwYWdlLXByb2R1Y3RzICNwdXNoIGg0OjpiZWZvcmUge1xuICAgICAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwIC0zMjBweDsgfVxuICAgICNwYWdlLXByb2R1Y3RzICNwdXNoIC5jb250YWluZXI6OmJlZm9yZSB7XG4gICAgICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXCIvaW1nL3Byby9wcm9kdWN0LXB1c2gtaW1nLnBuZ1wiKTtcbiAgICAgIGJhY2tncm91bmQtcG9zaXRpb246IGxlZnQgMDtcbiAgICAgIHRvcDogODBweDtcbiAgICAgIGJvdHRvbTogODBweDsgfVxuICAgICAgQG1lZGlhIChtYXgtd2lkdGg6IDEyMTlweCkge1xuICAgICAgICAjcGFnZS1wcm9kdWN0cyAjcHVzaCAuY29udGFpbmVyOjpiZWZvcmUge1xuICAgICAgICAgIHRvcDogMTMwcHg7XG4gICAgICAgICAgYm90dG9tOiAxMzBweDsgfSB9XG4gICAgI3BhZ2UtcHJvZHVjdHMgI3B1c2ggLmNvbnRlbnQge1xuICAgICAgcGFkZGluZy10b3A6IDE3MnB4O1xuICAgICAgd2lkdGg6IDM1JTsgfVxuICAgIEBtZWRpYSAobWF4LXdpZHRoOiA5OTFweCkge1xuICAgICAgI3BhZ2UtcHJvZHVjdHMgI3B1c2ggLmNvbnRhaW5lcjo6YmVmb3JlIHtcbiAgICAgICAgZGlzcGxheTogbm9uZTsgfVxuICAgICAgI3BhZ2UtcHJvZHVjdHMgI3B1c2ggLmNvbnRlbnQge1xuICAgICAgICBtaW4taGVpZ2h0OiAwO1xuICAgICAgICBwYWRkaW5nLXRvcDogNjRweDtcbiAgICAgICAgcGFkZGluZy1ib3R0b206IDY0cHg7XG4gICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7IH1cbiAgICAgICAgI3BhZ2UtcHJvZHVjdHMgI3B1c2ggLmNvbnRlbnQgaDQ6OmJlZm9yZSB7XG4gICAgICAgICAgbGVmdDogY2FsYyg1MCUgLSAzMnB4KTsgfSB9XG4gICNwYWdlLXByb2R1Y3RzICNhdXRvbWF0ZSB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogI2Y5ZmFmYztcbiAgICBiYWNrZ3JvdW5kLWltYWdlOiBsaW5lYXItZ3JhZGllbnQoMGRlZywgd2hpdGUgMCUsICNmNmY4ZmIgMTAwJSk7XG4gICAgYmFja2dyb3VuZC1zaXplOiAxMDAlO1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICBwYWRkaW5nLWJvdHRvbTogMTYwcHg7IH1cbiAgICAjcGFnZS1wcm9kdWN0cyAjYXV0b21hdGUgaDQ6OmJlZm9yZSB7XG4gICAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwIC0xMjhweDsgfVxuICAgICNwYWdlLXByb2R1Y3RzICNhdXRvbWF0ZSAuYW5pbS1hdXRvbWF0ZSB7XG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICB0b3A6IDIyMHB4O1xuICAgICAgbGVmdDogNTAlO1xuICAgICAgbWFyZ2luLWxlZnQ6IC00MDBweDsgfVxuICAgICAgI3BhZ2UtcHJvZHVjdHMgI2F1dG9tYXRlIC5hbmltLWF1dG9tYXRlIHN2ZyAuY29ubmVjdG9yIHtcbiAgICAgICAgb3BhY2l0eTogMDtcbiAgICAgICAgc3Ryb2tlLWRhc2hhcnJheTogODBweDsgfVxuICAgICAgI3BhZ2UtcHJvZHVjdHMgI2F1dG9tYXRlIC5hbmltLWF1dG9tYXRlIHN2ZyByZWN0LmZvdXIge1xuICAgICAgICBvcGFjaXR5OiAwLjY7IH1cbiAgICAgICNwYWdlLXByb2R1Y3RzICNhdXRvbWF0ZSAuYW5pbS1hdXRvbWF0ZSBzdmcgI3RvcCxcbiAgICAgICNwYWdlLXByb2R1Y3RzICNhdXRvbWF0ZSAuYW5pbS1hdXRvbWF0ZSBzdmcgI2JvdHRvbSB7XG4gICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsgfVxuICAgICAgI3BhZ2UtcHJvZHVjdHMgI2F1dG9tYXRlIC5hbmltLWF1dG9tYXRlIHN2ZyAjYm90dG9tIHtcbiAgICAgICAgei1pbmRleDogMTsgfVxuICAgICAgI3BhZ2UtcHJvZHVjdHMgI2F1dG9tYXRlIC5hbmltLWF1dG9tYXRlIHN2ZyAjdG9wIHtcbiAgICAgICAgei1pbmRleDogMjsgfVxuICAgICAgI3BhZ2UtcHJvZHVjdHMgI2F1dG9tYXRlIC5hbmltLWF1dG9tYXRlIHN2ZyA+IGcge1xuICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoNTBweCk7IH1cbiAgICBAbWVkaWEgKG1heC13aWR0aDogMTIxOXB4KSB7XG4gICAgICAjcGFnZS1wcm9kdWN0cyAjYXV0b21hdGUge1xuICAgICAgICBwYWRkaW5nLWJvdHRvbTogMzkwcHg7IH1cbiAgICAgICAgI3BhZ2UtcHJvZHVjdHMgI2F1dG9tYXRlIC5jb250ZW50IHtcbiAgICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgICAgICBtYXgtd2lkdGg6IDUwMHB4O1xuICAgICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICAgICAgICBtYXJnaW4tbGVmdDogYXV0bztcbiAgICAgICAgICBtYXJnaW4tcmlnaHQ6IGF1dG87IH1cbiAgICAgICAgI3BhZ2UtcHJvZHVjdHMgI2F1dG9tYXRlIC5jb250ZW50IGg0OjpiZWZvcmUge1xuICAgICAgICAgIGxlZnQ6IGNhbGMoNTAlIC0gMzJweCk7IH1cbiAgICAgICAgI3BhZ2UtcHJvZHVjdHMgI2F1dG9tYXRlIC5hbmltLWF1dG9tYXRlIHtcbiAgICAgICAgICB0cmFuc2Zvcm06IHNjYWxlKDAuOCk7XG4gICAgICAgICAgdG9wOiA0NzBweDtcbiAgICAgICAgICBtYXJnaW4tbGVmdDogLTY3MHB4OyB9IH1cbiAgICBAbWVkaWEgKG1heC13aWR0aDogNzY4cHgpIHtcbiAgICAgICNwYWdlLXByb2R1Y3RzICNhdXRvbWF0ZSB7XG4gICAgICAgIHBhZGRpbmc6IDA7IH1cbiAgICAgICAgI3BhZ2UtcHJvZHVjdHMgI2F1dG9tYXRlIC5hbmltLWF1dG9tYXRlIHtcbiAgICAgICAgICBkaXNwbGF5OiBub25lOyB9XG4gICAgICAgICNwYWdlLXByb2R1Y3RzICNhdXRvbWF0ZSAuY29udGVudCB7XG4gICAgICAgICAgbWluLWhlaWdodDogMDtcbiAgICAgICAgICBwYWRkaW5nLXRvcDogNjRweDtcbiAgICAgICAgICBwYWRkaW5nLWJvdHRvbTogNjRweDtcbiAgICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7IH1cbiAgICAgICAgICAjcGFnZS1wcm9kdWN0cyAjYXV0b21hdGUgLmNvbnRlbnQgaDQ6OmJlZm9yZSB7XG4gICAgICAgICAgICBsZWZ0OiBjYWxjKDUwJSAtIDMycHgpOyB9IH1cbiAgICAjcGFnZS1wcm9kdWN0cyAjYXV0b21hdGUgLmFuaW0tYXV0b21hdGVfdWkge1xuICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICBoZWlnaHQ6IDEwMCU7IH1cbiAgICAgICNwYWdlLXByb2R1Y3RzICNhdXRvbWF0ZSAuYW5pbS1hdXRvbWF0ZV91aSA+IGRpdiB7XG4gICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoLTUwJSwgLTUwJSk7XG4gICAgICAgIG1heC13aWR0aDogMTE0cHg7XG4gICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgICAgb3BhY2l0eTogMDsgfVxuICAgICAgICAjcGFnZS1wcm9kdWN0cyAjYXV0b21hdGUgLmFuaW0tYXV0b21hdGVfdWkgPiBkaXYgcCB7XG4gICAgICAgICAgZm9udC1mYW1pbHk6IFwiSW50ZXJcIiwgXCJJbnRlciBVSVwiLCBIZWx2ZXRpY2EsIEFyaWFsLCBzYW5zLXNlcmlmO1xuICAgICAgICAgIG1hcmdpbjogMDtcbiAgICAgICAgICBjb2xvcjogI2ZmZjtcbiAgICAgICAgICBmb250LXNpemU6IDEzcHg7XG4gICAgICAgICAgbGluZS1oZWlnaHQ6IDE3cHg7IH1cbiAgICAgICAgI3BhZ2UtcHJvZHVjdHMgI2F1dG9tYXRlIC5hbmltLWF1dG9tYXRlX3VpID4gZGl2IHNwYW4ge1xuICAgICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICAgIG9wYWNpdHk6IDAuNjtcbiAgICAgICAgICBmb250LWZhbWlseTogMTJweDsgfVxuICAgICAgICAjcGFnZS1wcm9kdWN0cyAjYXV0b21hdGUgLmFuaW0tYXV0b21hdGVfdWkgPiBkaXY6YmVmb3JlIHtcbiAgICAgICAgICBjb250ZW50OiAnJztcbiAgICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgICAgICB3aWR0aDogMjBweDtcbiAgICAgICAgICBoZWlnaHQ6IDUwcHg7XG4gICAgICAgICAgbWFyZ2luLWJvdHRvbTogMTJweDtcbiAgICAgICAgICBiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0O1xuICAgICAgICAgIGJhY2tncm91bmQtc2l6ZTogMTAwJTsgfVxuICAgICAgI3BhZ2UtcHJvZHVjdHMgI2F1dG9tYXRlIC5hbmltLWF1dG9tYXRlX3VpIC5tYXN0ZXI6YmVmb3JlIHtcbiAgICAgICAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFwiL2ltZy9wcm8vcHJvLWF1dG9tYXRlLWFuaW1hdGlvbi9tYXN0ZXIucG5nXCIpO1xuICAgICAgICB3aWR0aDogMTAwcHg7XG4gICAgICAgIGhlaWdodDogMzBweDtcbiAgICAgICAgYmFja2dyb3VuZC1zaXplOiAxMDBweCAzMHB4OyB9XG4gICAgICAjcGFnZS1wcm9kdWN0cyAjYXV0b21hdGUgLmFuaW0tYXV0b21hdGVfdWkgLnN0YWdpbmc6YmVmb3JlIHtcbiAgICAgICAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFwiL2ltZy9wcm8vcHJvLWF1dG9tYXRlLWFuaW1hdGlvbi9zdGFnaW5nLnBuZ1wiKTtcbiAgICAgICAgd2lkdGg6IDExMHB4O1xuICAgICAgICBoZWlnaHQ6IDMwcHg7XG4gICAgICAgIGJhY2tncm91bmQtc2l6ZTogMTEwcHggMzBweDsgfVxuICAgICAgI3BhZ2UtcHJvZHVjdHMgI2F1dG9tYXRlIC5hbmltLWF1dG9tYXRlX3VpIC5xYTpiZWZvcmUge1xuICAgICAgICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXCIvaW1nL3Byby9wcm8tYXV0b21hdGUtYW5pbWF0aW9uL3FhLnBuZ1wiKTtcbiAgICAgICAgd2lkdGg6IDYxcHg7XG4gICAgICAgIGhlaWdodDogMzBweDtcbiAgICAgICAgYmFja2dyb3VuZC1zaXplOiA2MXB4IDMwcHg7IH1cbiAgICAgICNwYWdlLXByb2R1Y3RzICNhdXRvbWF0ZSAuYW5pbS1hdXRvbWF0ZV91aSAuYW5kcm9pZDpiZWZvcmUsXG4gICAgICAjcGFnZS1wcm9kdWN0cyAjYXV0b21hdGUgLmFuaW0tYXV0b21hdGVfdWkgLmlvczpiZWZvcmUsXG4gICAgICAjcGFnZS1wcm9kdWN0cyAjYXV0b21hdGUgLmFuaW0tYXV0b21hdGVfdWkgLndlYjpiZWZvcmUge1xuICAgICAgICB3aWR0aDogNjJweDtcbiAgICAgICAgaGVpZ2h0OiA2MnB4O1xuICAgICAgICBiYWNrZ3JvdW5kLXNpemU6IDYycHggNjJweDsgfVxuICAgICAgI3BhZ2UtcHJvZHVjdHMgI2F1dG9tYXRlIC5hbmltLWF1dG9tYXRlX3VpIC5hbmRyb2lkOmJlZm9yZSB7XG4gICAgICAgIGJhY2tncm91bmQtaW1hZ2U6IHVybChcIi9pbWcvcHJvL3Byby1hdXRvbWF0ZS1hbmltYXRpb24vYW5kcm9pZC5wbmdcIik7IH1cbiAgICAgICNwYWdlLXByb2R1Y3RzICNhdXRvbWF0ZSAuYW5pbS1hdXRvbWF0ZV91aSAuaW9zOmJlZm9yZSB7XG4gICAgICAgIGJhY2tncm91bmQtaW1hZ2U6IHVybChcIi9pbWcvcHJvL3Byby1hdXRvbWF0ZS1hbmltYXRpb24vaW9zLnBuZ1wiKTsgfVxuICAgICAgI3BhZ2UtcHJvZHVjdHMgI2F1dG9tYXRlIC5hbmltLWF1dG9tYXRlX3VpIC53ZWI6YmVmb3JlIHtcbiAgICAgICAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFwiL2ltZy9wcm8vcHJvLWF1dG9tYXRlLWFuaW1hdGlvbi9qcy5wbmdcIik7IH1cbiAgICAgICNwYWdlLXByb2R1Y3RzICNhdXRvbWF0ZSAuYW5pbS1hdXRvbWF0ZV91aSAudGVzdGZsaWdodDpiZWZvcmUge1xuICAgICAgICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXCIvaW1nL3Byby9wcm8tYXV0b21hdGUtYW5pbWF0aW9uL3Rlc3RmbGlnaHQucG5nXCIpO1xuICAgICAgICB3aWR0aDogNTNweDtcbiAgICAgICAgaGVpZ2h0OiA1M3B4O1xuICAgICAgICBiYWNrZ3JvdW5kLXNpemU6IDUzcHggNTNweDsgfVxuICAgICAgI3BhZ2UtcHJvZHVjdHMgI2F1dG9tYXRlIC5hbmltLWF1dG9tYXRlX3VpIC5wbGF5c3RvcmU6YmVmb3JlIHtcbiAgICAgICAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFwiL2ltZy9wcm8vcHJvLWF1dG9tYXRlLWFuaW1hdGlvbi9wbGF5c3RvcmUucG5nXCIpO1xuICAgICAgICB3aWR0aDogNTBweDtcbiAgICAgICAgaGVpZ2h0OiA1NXB4O1xuICAgICAgICBiYWNrZ3JvdW5kLXNpemU6IDUwcHggNTVweDsgfVxuICAgICAgI3BhZ2UtcHJvZHVjdHMgI2F1dG9tYXRlIC5hbmltLWF1dG9tYXRlX3VpIC53ZWJob29rOmJlZm9yZSB7XG4gICAgICAgIGJhY2tncm91bmQtaW1hZ2U6IHVybChcIi9pbWcvcHJvL3Byby1hdXRvbWF0ZS1hbmltYXRpb24vd2ViaG9vay5wbmdcIik7XG4gICAgICAgIHdpZHRoOiA1OHB4O1xuICAgICAgICBoZWlnaHQ6IDU0cHg7XG4gICAgICAgIGJhY2tncm91bmQtc2l6ZTogNThweCA1NHB4OyB9XG4gICAgICAjcGFnZS1wcm9kdWN0cyAjYXV0b21hdGUgLmFuaW0tYXV0b21hdGVfdWkgLm1hc3RlcixcbiAgICAgICNwYWdlLXByb2R1Y3RzICNhdXRvbWF0ZSAuYW5pbS1hdXRvbWF0ZV91aSAuc3RhZ2luZyxcbiAgICAgICNwYWdlLXByb2R1Y3RzICNhdXRvbWF0ZSAuYW5pbS1hdXRvbWF0ZV91aSAucWEge1xuICAgICAgICBsZWZ0OiA1MCU7XG4gICAgICAgIHRvcDogMTk1cHg7IH1cbiAgICAgICNwYWdlLXByb2R1Y3RzICNhdXRvbWF0ZSAuYW5pbS1hdXRvbWF0ZV91aSAuYW5kcm9pZCxcbiAgICAgICNwYWdlLXByb2R1Y3RzICNhdXRvbWF0ZSAuYW5pbS1hdXRvbWF0ZV91aSAuaW9zLFxuICAgICAgI3BhZ2UtcHJvZHVjdHMgI2F1dG9tYXRlIC5hbmltLWF1dG9tYXRlX3VpIC53ZWIge1xuICAgICAgICBsZWZ0OiA1MCU7XG4gICAgICAgIHRvcDogMzY4cHg7IH1cbiAgICAgICNwYWdlLXByb2R1Y3RzICNhdXRvbWF0ZSAuYW5pbS1hdXRvbWF0ZV91aSAuYW5kcm9pZCxcbiAgICAgICNwYWdlLXByb2R1Y3RzICNhdXRvbWF0ZSAuYW5pbS1hdXRvbWF0ZV91aSAud2ViIHtcbiAgICAgICAgbWFyZ2luLWxlZnQ6IDE3NHB4OyB9XG4gICAgICAjcGFnZS1wcm9kdWN0cyAjYXV0b21hdGUgLmFuaW0tYXV0b21hdGVfdWkgLmlvcyB7XG4gICAgICAgIG1hcmdpbi1sZWZ0OiAtMTc4cHg7IH1cbiAgICAgICNwYWdlLXByb2R1Y3RzICNhdXRvbWF0ZSAuYW5pbS1hdXRvbWF0ZV91aSAudGVzdGZsaWdodCxcbiAgICAgICNwYWdlLXByb2R1Y3RzICNhdXRvbWF0ZSAuYW5pbS1hdXRvbWF0ZV91aSAucGxheXN0b3JlLFxuICAgICAgI3BhZ2UtcHJvZHVjdHMgI2F1dG9tYXRlIC5hbmltLWF1dG9tYXRlX3VpIC53ZWJob29rIHtcbiAgICAgICAgbGVmdDogNTAlO1xuICAgICAgICB0b3A6IDU0MHB4OyB9XG4gICAgICAjcGFnZS1wcm9kdWN0cyAjYXV0b21hdGUgLmFuaW0tYXV0b21hdGVfdWkgLnRlc3RmbGlnaHQge1xuICAgICAgICBtYXJnaW4tbGVmdDogLTM1MnB4OyB9XG4gICAgICAjcGFnZS1wcm9kdWN0cyAjYXV0b21hdGUgLmFuaW0tYXV0b21hdGVfdWkgLnBsYXlzdG9yZSB7XG4gICAgICAgIG1hcmdpbi1sZWZ0OiAzNTJweDsgfVxuICAjcGFnZS1wcm9kdWN0cyAucHJvLWZlYXR1cmVzIHtcbiAgICBwYWRkaW5nOiAxOTZweCAwO1xuICAgIGJhY2tncm91bmQtY29sb3I6ICMzOTQwNzI7IH1cbiAgICAjcGFnZS1wcm9kdWN0cyAucHJvLWZlYXR1cmVzIGhncm91cCB7XG4gICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgICBtYXgtd2lkdGg6IDU2MHB4O1xuICAgICAgbWFyZ2luLWxlZnQ6IGF1dG87XG4gICAgICBtYXJnaW4tcmlnaHQ6IGF1dG87IH1cbiAgICAgICNwYWdlLXByb2R1Y3RzIC5wcm8tZmVhdHVyZXMgaGdyb3VwIGgzIHtcbiAgICAgICAgY29sb3I6ICNmZmY7XG4gICAgICAgIGZvbnQtc2l6ZTogMzZweDtcbiAgICAgICAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgICAgICAgbGluZS1oZWlnaHQ6IDQwcHg7XG4gICAgICAgIG1hcmdpbi10b3A6IDA7IH1cbiAgICAgICNwYWdlLXByb2R1Y3RzIC5wcm8tZmVhdHVyZXMgaGdyb3VwIHAge1xuICAgICAgICBjb2xvcjogI2Q3ZDllYjtcbiAgICAgICAgZm9udC1mYW1pbHk6IFwiSW50ZXJcIiwgXCJJbnRlciBVSVwiLCBIZWx2ZXRpY2EsIEFyaWFsLCBzYW5zLXNlcmlmO1xuICAgICAgICBmb250LXNpemU6IDIwcHg7XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAzMnB4OyB9XG4gICAgI3BhZ2UtcHJvZHVjdHMgLnByby1mZWF0dXJlcyB1bCB7XG4gICAgICBtYXJnaW46IDAgLTI0cHggMDtcbiAgICAgIHBhZGRpbmc6IDA7XG4gICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgZmxleC13cmFwOiB3cmFwO1xuICAgICAgbGlzdC1zdHlsZS10eXBlOiBub25lOyB9XG4gICAgI3BhZ2UtcHJvZHVjdHMgLnByby1mZWF0dXJlcyBsaSB7XG4gICAgICBmbGV4OiAwIDAgMjUlO1xuICAgICAgbWFyZ2luLXRvcDogODZweDtcbiAgICAgIHBhZGRpbmc6IDAgMjRweDsgfVxuICAgICAgI3BhZ2UtcHJvZHVjdHMgLnByby1mZWF0dXJlcyBsaSBoNSB7XG4gICAgICAgIGNvbG9yOiAjZmZmO1xuICAgICAgICBmb250LXNpemU6IDIwcHg7XG4gICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7XG4gICAgICAgIG1hcmdpbi1ib3R0b206IDE4cHg7XG4gICAgICAgIG1hcmdpbi10b3A6IDA7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7IH1cbiAgICAgICNwYWdlLXByb2R1Y3RzIC5wcm8tZmVhdHVyZXMgbGkgcCB7XG4gICAgICAgIGNvbG9yOiAjYjliY2Q4O1xuICAgICAgICBmb250LWZhbWlseTogXCJJbnRlclwiLCBcIkludGVyIFVJXCIsIEhlbHZldGljYSwgQXJpYWwsIHNhbnMtc2VyaWY7XG4gICAgICAgIGZvbnQtc2l6ZTogMTZweDtcbiAgICAgICAgbGluZS1oZWlnaHQ6IDI4cHg7IH1cbiAgICAjcGFnZS1wcm9kdWN0cyAucHJvLWZlYXR1cmVzIFtjbGFzc149XCJwcm8tZmVhdHVyZS0tXCJdIGg1OjpiZWZvcmUge1xuICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICBjb250ZW50OiAnJztcbiAgICAgIHdpZHRoOiAyNHB4O1xuICAgICAgaGVpZ2h0OiAyNHB4O1xuICAgICAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFwiL2ltZy9wcm8vcHJvLWZlYXR1cmUtc3ByaXRlLnBuZ1wiKTtcbiAgICAgIGJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7XG4gICAgICBiYWNrZ3JvdW5kLXNpemU6IDI0cHggMTkycHg7XG4gICAgICBtYXJnaW4tcmlnaHQ6IDEycHg7IH1cbiAgICAjcGFnZS1wcm9kdWN0cyAucHJvLWZlYXR1cmVzIC5wcm8tZmVhdHVyZS0tYXBwLWRhc2hib2FyZCBoNTo6YmVmb3JlIHtcbiAgICAgIGJhY2tncm91bmQtcG9zaXRpb246IDAgMDsgfVxuICAgICNwYWdlLXByb2R1Y3RzIC5wcm8tZmVhdHVyZXMgLnByby1mZWF0dXJlLS1jb25maWd1cmFibGUgaDU6OmJlZm9yZSB7XG4gICAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwIGNhbGMoLTEgKiAyNHB4KTsgfVxuICAgICNwYWdlLXByb2R1Y3RzIC5wcm8tZmVhdHVyZXMgLnByby1mZWF0dXJlLS1jbGVhbi1idWlsZHMgaDU6OmJlZm9yZSB7XG4gICAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwIGNhbGMoLTIgKiAyNHB4KTsgfVxuICAgICNwYWdlLXByb2R1Y3RzIC5wcm8tZmVhdHVyZXMgLnByby1mZWF0dXJlLS1tb2JpbGUtY2ktY2QgaDU6OmJlZm9yZSB7XG4gICAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwIGNhbGMoLTMgKiAyNHB4KTsgfVxuICAgICNwYWdlLXByb2R1Y3RzIC5wcm8tZmVhdHVyZXMgLnByby1mZWF0dXJlLS1naXQtaW50ZWdyYXRpb25zIGg1OjpiZWZvcmUge1xuICAgICAgYmFja2dyb3VuZC1wb3NpdGlvbjogMCBjYWxjKC00ICogMjRweCk7IH1cbiAgICAjcGFnZS1wcm9kdWN0cyAucHJvLWZlYXR1cmVzIC5wcm8tZmVhdHVyZS0tY29ubmVjdGVkLXNlcnZpY2VzIGg1OjpiZWZvcmUge1xuICAgICAgYmFja2dyb3VuZC1wb3NpdGlvbjogMCBjYWxjKC01ICogMjRweCk7IH1cbiAgICAjcGFnZS1wcm9kdWN0cyAucHJvLWZlYXR1cmVzIC5wcm8tZmVhdHVyZS0tbGl2ZS1hcHAtdXBkYXRpbmcgaDU6OmJlZm9yZSB7XG4gICAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwIGNhbGMoLTYgKiAyNHB4KTsgfVxuICAgICNwYWdlLXByb2R1Y3RzIC5wcm8tZmVhdHVyZXMgLnByby1mZWF0dXJlLS1yb2xlLWJhc2VkLWNvbnRyb2xzIGg1OjpiZWZvcmUge1xuICAgICAgYmFja2dyb3VuZC1wb3NpdGlvbjogMCBjYWxjKC03ICogMjRweCk7IH1cbiAgICBAbWVkaWEgKG1heC13aWR0aDogMTIxOXB4KSB7XG4gICAgICAjcGFnZS1wcm9kdWN0cyAucHJvLWZlYXR1cmVzIGxpIHtcbiAgICAgICAgZmxleDogMCAwIDMzJTsgfSB9XG4gICAgQG1lZGlhIChtYXgtd2lkdGg6IDk5MXB4KSB7XG4gICAgICAjcGFnZS1wcm9kdWN0cyAucHJvLWZlYXR1cmVzIHtcbiAgICAgICAgcGFkZGluZzogOTBweCAwO1xuICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7IH1cbiAgICAgICAgI3BhZ2UtcHJvZHVjdHMgLnByby1mZWF0dXJlcyBoNSB7XG4gICAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7IH1cbiAgICAgICAgI3BhZ2UtcHJvZHVjdHMgLnByby1mZWF0dXJlcyBsaSB7XG4gICAgICAgICAgZmxleDogMCAwIDUwJTsgfSB9XG4gICAgQG1lZGlhIChtYXgtd2lkdGg6IDc2N3B4KSB7XG4gICAgICAjcGFnZS1wcm9kdWN0cyAucHJvLWZlYXR1cmVzIGhncm91cCBoMyB7XG4gICAgICAgIGZvbnQtc2l6ZTogMzBweDsgfVxuICAgICAgI3BhZ2UtcHJvZHVjdHMgLnByby1mZWF0dXJlcyBsaSB7XG4gICAgICAgIGZsZXg6IDAgMCAxMDAlO1xuICAgICAgICBtYXJnaW4tdG9wOiAzNnB4OyB9IH1cbiAgI3BhZ2UtcHJvZHVjdHMgLmdldC1zdGFydGVkIHtcbiAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoNDVkZWcsICMxYjFmM2EgMCUsICMyOTJmNTIgMTAwJSk7XG4gICAgb3ZlcmZsb3c6IGF1dG87IH1cbiAgICAjcGFnZS1wcm9kdWN0cyAuZ2V0LXN0YXJ0ZWQgLmNvbnRhaW5lciB7XG4gICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgIG1hcmdpbi1ib3R0b206IDEyMHB4O1xuICAgICAgbWFyZ2luLXRvcDogMTIwcHg7IH1cbiAgICAjcGFnZS1wcm9kdWN0cyAuZ2V0LXN0YXJ0ZWQgaGdyb3VwIHtcbiAgICAgIGxldHRlci1zcGFjaW5nOiAtLjAyNWVtO1xuICAgICAgZmxleC1ncm93OiAxOyB9XG4gICAgI3BhZ2UtcHJvZHVjdHMgLmdldC1zdGFydGVkIGgyIHtcbiAgICAgIGNvbG9yOiAjZTBlM2Y2O1xuICAgICAgZm9udC1zaXplOiAyOHB4O1xuICAgICAgbGluZS1oZWlnaHQ6IDM2cHg7XG4gICAgICBmb250LXdlaWdodDogNDAwO1xuICAgICAgbGV0dGVyLXNwYWNpbmc6IC0wLjAyZW07XG4gICAgICBtYXJnaW46IDA7XG4gICAgICBtYXgtd2lkdGg6IDY4MHB4OyB9XG4gICAgICAjcGFnZS1wcm9kdWN0cyAuZ2V0LXN0YXJ0ZWQgaDIgc3Ryb25nIHtcbiAgICAgICAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgICAgICAgY29sb3I6ICNmZmY7IH1cbiAgICAjcGFnZS1wcm9kdWN0cyAuZ2V0LXN0YXJ0ZWQgaDMge1xuICAgICAgY29sb3I6ICM4YWE2ZmY7XG4gICAgICBmb250LXNpemU6IDI0cHg7XG4gICAgICBsaW5lLWhlaWdodDogMzZweDtcbiAgICAgIGZvbnQtd2VpZ2h0OiA0MDA7XG4gICAgICBtYXJnaW46IDA7IH1cbiAgICAjcGFnZS1wcm9kdWN0cyAuZ2V0LXN0YXJ0ZWQgLmJ0biB7XG4gICAgICBmb250LXNpemU6IDE1cHg7XG4gICAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xuICAgICAgbGV0dGVyLXNwYWNpbmc6IDAuMTBlbTtcbiAgICAgIGZvbnQtd2VpZ2h0OiA3MDA7XG4gICAgICBib3JkZXItcmFkaXVzOiAxMDBweDtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6ICM1ZmEzZmY7XG4gICAgICBwYWRkaW5nOiAxNnB4IDI4cHggMTRweDsgfVxuICAgICAgI3BhZ2UtcHJvZHVjdHMgLmdldC1zdGFydGVkIC5idG46aG92ZXIge1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjNDg5NWZjOyB9XG4gICAgQG1lZGlhIChtYXgtd2lkdGg6IDk5MXB4KSB7XG4gICAgICAjcGFnZS1wcm9kdWN0cyAuZ2V0LXN0YXJ0ZWQgLmNvbnRhaW5lciB7XG4gICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7IH1cbiAgICAgICNwYWdlLXByb2R1Y3RzIC5nZXQtc3RhcnRlZCBoZ3JvdXAge1xuICAgICAgICBwYWRkaW5nLWJvdHRvbTogMTZweDsgfVxuICAgICAgI3BhZ2UtcHJvZHVjdHMgLmdldC1zdGFydGVkIC5idG4tZ3JvdXAge1xuICAgICAgICBwYWRkaW5nLWJvdHRvbTogOTZweDsgfSB9XG4iXX0= */\n"
  },
  {
    "path": "content/css/pages/products/advisory.css",
    "content": "#page-products-advisory .top {\n  text-align: center;\n  background-color: #171E2A;\n  margin-top: -148px;\n  padding-top: 235px;\n  padding-bottom: 140px;\n  background-image: url(\"/img/products/advisory/advisory-hero-bg.png\");\n  background-repeat: no-repeat;\n  background-size: cover;\n  background-position: center center; }\n  #page-products-advisory .top hgroup {\n    color: #fff; }\n    #page-products-advisory .top hgroup h4 {\n      line-height: 25px;\n      font-size: 12px;\n      letter-spacing: 0.14em;\n      text-transform: uppercase;\n      color: #B2BECD;\n      font-family: \"Roboto Mono\", Menlo, Monaco, Consolas, \"Courier New\", monospace;\n      margin-bottom: 0; }\n    #page-products-advisory .top hgroup h1,\n    #page-products-advisory .top hgroup p {\n      margin-left: auto;\n      margin-right: auto; }\n    #page-products-advisory .top hgroup h1 {\n      line-height: 63px;\n      font-size: 56px;\n      letter-spacing: -0.02em;\n      margin-top: 14px;\n      max-width: 600px; }\n    #page-products-advisory .top hgroup p {\n      font-family: \"Eina\", \"Helvetica Neue\", Helvetica, sans-serif;\n      font-size: 22px;\n      line-height: 30px;\n      max-width: 540px;\n      color: #DEE3EA; }\n    #page-products-advisory .top hgroup .btn {\n      margin-top: 24px;\n      font-weight: 700;\n      font-size: 14px;\n      letter-spacing: 0.06em; }\n    @media (max-width: 768px) {\n      #page-products-advisory .top hgroup h1 {\n        font-size: 48px;\n        line-height: 54px; } }\n    @media (max-width: 480px) {\n      #page-products-advisory .top hgroup h1 {\n        font-size: 40px;\n        line-height: 44px; }\n      #page-products-advisory .top hgroup p {\n        line-height: 28px;\n        font-size: 18px; } }\n  @media (max-width: 768px) {\n    #page-products-advisory .top {\n      margin-top: 0;\n      padding-top: 54px;\n      padding-bottom: 78px; } }\n\n#page-products-advisory main section {\n  padding: 72px 0; }\n  #page-products-advisory main section h2 {\n    font-size: 32px;\n    line-height: 42px;\n    letter-spacing: -0.03em;\n    color: #1A232F;\n    margin-bottom: 20px; }\n  #page-products-advisory main section h4 {\n    font-weight: 600;\n    font-size: 18px;\n    line-height: 24px;\n    letter-spacing: -0.02em;\n    color: #1A232F;\n    margin-top: 16px;\n    margin-bottom: 6px; }\n  #page-products-advisory main section p {\n    color: #4E5B6A;\n    line-height: 26px;\n    font-size: 16px;\n    letter-spacing: -0.01em;\n    font-family: \"Inter\", \"Inter UI\", Helvetica, Arial, sans-serif; }\n  #page-products-advisory main section p.large {\n    color: #27323F;\n    line-height: 39px;\n    font-size: 22px;\n    letter-spacing: -0.02em;\n    font-family: \"Eina\", \"Helvetica Neue\", Helvetica, sans-serif;\n    margin-bottom: 24px; }\n  #page-products-advisory main section p.small {\n    line-height: 22px;\n    font-size: 14px;\n    letter-spacing: -0.02em;\n    color: #5B708B; }\n  #page-products-advisory main section .btn {\n    color: #fff;\n    background: #3880FF;\n    box-shadow: 0px 0px 2px rgba(0, 20, 56, 0.14), 0px 2px 3px rgba(0, 20, 56, 0.08);\n    border-radius: 84px;\n    font-weight: 700;\n    font-size: 14px;\n    letter-spacing: 0.06em;\n    padding: 19px 25px 19px;\n    height: 52px;\n    display: -ms-flexbox;\n    display: flex;\n    -ms-flex-align: center;\n        align-items: center; }\n    #page-products-advisory main section .btn ion-icon {\n      font-size: 18px;\n      margin-left: 4px;\n      -webkit-transform: translate(0, -1px);\n              transform: translate(0, -1px); }\n    #page-products-advisory main section .btn:hover {\n      background-color: #4287ff; }\n      #page-products-advisory main section .btn:hover ion-icon {\n        -webkit-transform: translate(1px, -1px);\n                transform: translate(1px, -1px); }\n  @media (max-width: 768px) {\n    #page-products-advisory main section {\n      padding: 60px 0; } }\n  @media (max-width: 480px) {\n    #page-products-advisory main section {\n      padding: 40px 0; } }\n\n#page-products-advisory .flex {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-pack: justify;\n      justify-content: space-between; }\n\n#page-products-advisory .measure {\n  max-width: 560px; }\n  #page-products-advisory .measure-lg {\n    max-width: 720px; }\n\n#page-products-advisory .customer-logos {\n  padding: 0; }\n  #page-products-advisory .customer-logos ul {\n    padding: 32px 0;\n    list-style-type: none;\n    display: -ms-flexbox;\n    display: flex;\n    -ms-flex-pack: justify;\n        justify-content: space-between;\n    -ms-flex-align: center;\n        align-items: center; }\n  #page-products-advisory .customer-logos [class^='customer-logo'] {\n    display: block;\n    background-image: url(\"/img/products/advisory/advisory-logo-sprite.png\");\n    background-repeat: no-repeat;\n    background-size: 176px 193px; }\n  #page-products-advisory .customer-logos .customer-logo--aaa {\n    width: 72px;\n    height: 42px;\n    background-position: 0 0; }\n  #page-products-advisory .customer-logos .customer-logo--amtrak {\n    width: 176px;\n    height: 20px;\n    background-position: 0 -43px; }\n  #page-products-advisory .customer-logos .customer-logo--panera {\n    width: 112px;\n    height: 39px;\n    background-position: 0 -64px; }\n  #page-products-advisory .customer-logos .customer-logo--ge {\n    width: 48px;\n    height: 49px;\n    background-position: 0 -103px; }\n  #page-products-advisory .customer-logos .customer-logo--rbi {\n    width: 62px;\n    height: 41px;\n    background-position: 0 -152px; }\n  #page-products-advisory .customer-logos img {\n    height: 48px;\n    margin-left: auto;\n    margin-right: auto; }\n  @media (max-width: 992px) {\n    #page-products-advisory .customer-logos [class^='customer-logo'] {\n      -webkit-transform: scale(0.75);\n              transform: scale(0.75); } }\n  @media (max-width: 768px) {\n    #page-products-advisory .customer-logos ul {\n      padding-bottom: 0;\n      padding-bottom: 0; } }\n  @media (max-width: 480px) {\n    #page-products-advisory .customer-logos ul {\n      -ms-flex-pack: center;\n          justify-content: center;\n      -ms-flex-wrap: wrap;\n          flex-wrap: wrap;\n      margin: -10px auto;\n      max-width: 460px; }\n    #page-products-advisory .customer-logos [class^='customer-logo'] {\n      -webkit-transform: scale(0.7);\n              transform: scale(0.7);\n      margin: 3px; } }\n\n@media (max-width: 992px) {\n  #page-products-advisory .goals .flex {\n    -ms-flex-direction: column;\n        flex-direction: column; }\n  #page-products-advisory .goals .checkmark-list--large {\n    padding-left: 0;\n    padding-top: 24px;\n    max-width: 460px; } }\n\n#page-products-advisory .lifecycle .flex {\n  width: 100%; }\n\n#page-products-advisory .lifecycle .illustration,\n#page-products-advisory .lifecycle hgroup {\n  -ms-flex: 0 0 50%;\n      flex: 0 0 50%; }\n\n#page-products-advisory .lifecycle .illustration img {\n  width: 100%;\n  max-width: 430px;\n  margin-top: 44px; }\n\n#page-products-advisory .lifecycle ul {\n  list-style: none;\n  margin: 0;\n  padding: 0;\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-wrap: wrap;\n      flex-wrap: wrap; }\n\n#page-products-advisory .lifecycle li {\n  -ms-flex: 0 0 50%;\n      flex: 0 0 50%;\n  padding-right: 50px;\n  margin-bottom: 12px; }\n\n#page-products-advisory .lifecycle h5 {\n  text-transform: uppercase;\n  letter-spacing: 0.08em;\n  font-size: 13px; }\n  #page-products-advisory .lifecycle h5.blue {\n    color: #3880FF; }\n  #page-products-advisory .lifecycle h5.purple {\n    color: #6030FF; }\n  #page-products-advisory .lifecycle h5.green {\n    color: #43C465; }\n  #page-products-advisory .lifecycle h5.gray {\n    color: #5B708B; }\n\n@media (max-width: 992px) {\n  #page-products-advisory .lifecycle .flex {\n    -ms-flex-direction: column;\n        flex-direction: column; }\n  #page-products-advisory .lifecycle .illustration {\n    text-align: center; }\n  #page-products-advisory .lifecycle .illustration img {\n    margin-top: 0;\n    margin-bottom: 44px; }\n  #page-products-advisory .lifecycle h2,\n  #page-products-advisory .lifecycle hgroup > p {\n    text-align: center; } }\n\n@media (max-width: 480px) {\n  #page-products-advisory .lifecycle li {\n    -ms-flex: 0 0 100%;\n        flex: 0 0 100%; }\n  #page-products-advisory .lifecycle h2,\n  #page-products-advisory .lifecycle hgroup > p {\n    text-align: left; } }\n\n#page-products-advisory .book-a-session .well {\n  padding: 54px 54px 48px;\n  border-radius: 8px;\n  background-color: #F4F6FC;\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-align: end;\n      align-items: flex-end;\n  -ms-flex-pack: justify;\n      justify-content: space-between; }\n\n#page-products-advisory .book-a-session h3 {\n  margin-top: 0;\n  font-size: 26px;\n  letter-spacing: -0.02em;\n  color: #020814;\n  font-weight: 600; }\n\n#page-products-advisory .book-a-session p.large {\n  line-height: 32px;\n  font-size: 20px;\n  letter-spacing: -0.02em;\n  color: #73849A;\n  margin-bottom: 0; }\n  #page-products-advisory .book-a-session p.large strong {\n    font-weight: 400;\n    color: #020814; }\n\n#page-products-advisory .book-a-session .btn {\n  margin-left: 40px; }\n\n@media (max-width: 1220px) {\n  #page-products-advisory .book-a-session p.large {\n    font-size: 18px;\n    line-height: 30px;\n    letter-spacing: -0.01em; } }\n\n@media (max-width: 992px) {\n  #page-products-advisory .book-a-session .well {\n    -ms-flex-direction: column;\n        flex-direction: column;\n    text-align: center;\n    -ms-flex-align: center;\n        align-items: center; }\n  #page-products-advisory .book-a-session .btn {\n    margin-left: 0px;\n    margin-top: 18px; } }\n\n@media (max-width: 480px) {\n  #page-products-advisory .book-a-session .well {\n    padding: 32px; } }\n\n#page-products-advisory .what-you-get .checkmark-list--large {\n  max-width: 100%;\n  padding: 0;\n  margin: 38px 0 0;\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-wrap: wrap;\n      flex-wrap: wrap; }\n\n#page-products-advisory .what-you-get .checkmark-list--large li {\n  -ms-flex-direction: column;\n      flex-direction: column;\n  -ms-flex: 0 0 25%;\n      flex: 0 0 25%;\n  padding-right: 24px;\n  margin-bottom: 24px; }\n  #page-products-advisory .what-you-get .checkmark-list--large li + li {\n    margin-top: 0; }\n\n@media (max-width: 992px) {\n  #page-products-advisory .what-you-get .checkmark-list--large li {\n    -ms-flex: 0 0 33.33%;\n        flex: 0 0 33.33%; } }\n\n@media (max-width: 768px) {\n  #page-products-advisory .what-you-get .checkmark-list--large li {\n    -ms-flex: 0 0 50%;\n        flex: 0 0 50%; } }\n\n@media (max-width: 480px) {\n  #page-products-advisory .what-you-get .checkmark-list--large li {\n    -ms-flex: 0 0 100%;\n        flex: 0 0 100%; } }\n\n#page-products-advisory .use-cases hgroup h2 {\n  margin-bottom: 4px; }\n\n#page-products-advisory .use-cases hgroup p.large {\n  margin-bottom: 28px; }\n\n#page-products-advisory .use-cases .row-list {\n  list-style-type: none;\n  margin: 0;\n  padding: 0; }\n  #page-products-advisory .use-cases .row-list > li {\n    display: block;\n    border-top: 1px solid #DEE3EA;\n    display: -ms-flexbox;\n    display: flex;\n    padding-top: 32px; }\n  #page-products-advisory .use-cases .row-list h4 {\n    margin-top: 4px;\n    font-size: 20px; }\n  #page-products-advisory .use-cases .row-list h5 {\n    margin-top: 7px;\n    font-size: 16px;\n    font-weight: 600; }\n  #page-products-advisory .use-cases .row-list > li + li {\n    margin-top: 32px; }\n  #page-products-advisory .use-cases .row-list .col {\n    -ms-flex: 0 0 50%;\n        flex: 0 0 50%; }\n  #page-products-advisory .use-cases .row-list .measure {\n    max-width: 440px; }\n  #page-products-advisory .use-cases .row-list hgroup {\n    margin-right: 60px; }\n\n@media (max-width: 768px) {\n  #page-products-advisory .use-cases .row-list > li {\n    -ms-flex-direction: column;\n        flex-direction: column; }\n  #page-products-advisory .use-cases .row-list hgroup {\n    margin-right: 0;\n    margin-bottom: 20px; }\n  #page-products-advisory .use-cases .row-list .measure {\n    max-width: 580px; } }\n\n#page-products-advisory .resources {\n  padding-bottom: 120px; }\n  @media (max-width: 768px) {\n    #page-products-advisory .resources {\n      padding-bottom: 60px; } }\n  #page-products-advisory .resources .cards {\n    list-style-type: none;\n    margin: 0;\n    padding: 0;\n    display: -ms-flexbox;\n    display: flex;\n    margin-left: -24px;\n    margin-right: -24px; }\n  #page-products-advisory .resources hgroup {\n    display: -ms-flexbox;\n    display: flex;\n    -ms-flex-pack: justify;\n        justify-content: space-between;\n    -ms-flex-align: baseline;\n        align-items: baseline; }\n    #page-products-advisory .resources hgroup h3 {\n      font-weight: 600;\n      line-height: normal;\n      font-size: 28px;\n      letter-spacing: -0.02em;\n      color: #1A232F;\n      margin-bottom: 0; }\n    #page-products-advisory .resources hgroup h4 {\n      font-weight: 600;\n      font-size: 24px;\n      line-height: normal;\n      letter-spacing: -0.02em;\n      color: #1A232F; }\n    #page-products-advisory .resources hgroup h5 {\n      font-weight: 700;\n      line-height: 1;\n      font-size: 14px;\n      letter-spacing: 0.08em;\n      color: #3880FF;\n      text-transform: uppercase; }\n    #page-products-advisory .resources hgroup ion-icon {\n      -webkit-transform: translateY(2px);\n              transform: translateY(2px); }\n  #page-products-advisory .resources .cards li {\n    display: block;\n    -ms-flex: 0 0 33.33%;\n        flex: 0 0 33.33%;\n    padding: 24px; }\n    #page-products-advisory .resources .cards li a {\n      display: block;\n      width: 100%; }\n    #page-products-advisory .resources .cards li .img-wrapper {\n      overflow: hidden;\n      border-radius: 6px; }\n    #page-products-advisory .resources .cards li img {\n      width: 100%; }\n    #page-products-advisory .resources .cards li h6 {\n      line-height: 23px;\n      font-size: 12px;\n      letter-spacing: 0.12em;\n      text-transform: uppercase;\n      color: #B2BECD;\n      margin-bottom: 0;\n      margin-top: 16px; }\n    #page-products-advisory .resources .cards li h4 {\n      font-size: 20px;\n      margin-top: 10px;\n      color: #1A232F;\n      font-weight: 600; }\n    #page-products-advisory .resources .cards li p {\n      color: #5B708B;\n      line-height: 22px;\n      font-size: 14px;\n      letter-spacing: -0.02em; }\n  @media (max-width: 992px) {\n    #page-products-advisory .resources .cards {\n      margin-left: -12px;\n      margin-right: -12px; }\n    #page-products-advisory .resources .cards li {\n      padding: 12px; } }\n  @media (max-width: 768px) {\n    #page-products-advisory .resources .cards {\n      -ms-flex-wrap: wrap;\n          flex-wrap: wrap; }\n    #page-products-advisory .resources .cards li {\n      -ms-flex: 0 0 50%;\n          flex: 0 0 50%; } }\n  @media (max-width: 480px) {\n    #page-products-advisory .resources .cards li {\n      -ms-flex: 0 0 100%;\n          flex: 0 0 100%; }\n    #page-products-advisory .resources h5 {\n      display: none; } }\n\n#page-products-advisory .modal form {\n  max-width: 100%; }\n\n#page-products-advisory .modal-body {\n  padding: 32px 48px 48px; }\n\n#page-products-advisory .call-to-action {\n  background-color: #F6F8FB;\n  padding-top: 140px;\n  padding-bottom: 100px; }\n  #page-products-advisory .call-to-action .container {\n    max-width: 768px; }\n  #page-products-advisory .call-to-action hgroup {\n    text-align: center;\n    margin-bottom: 40px; }\n    #page-products-advisory .call-to-action hgroup h3 {\n      font-size: 28px;\n      font-weight: 600;\n      text-align: center;\n      letter-spacing: -0.02em;\n      color: #616E7E;\n      margin-bottom: 4px; }\n      #page-products-advisory .call-to-action hgroup h3 em {\n        font-style: normal;\n        color: #1A232F; }\n    #page-products-advisory .call-to-action hgroup p {\n      line-height: 32px;\n      font-size: 18px;\n      text-align: center;\n      letter-spacing: -0.01em;\n      color: #5B708B; }\n      #page-products-advisory .call-to-action hgroup p b {\n        font-weight: 500; }\n  @media (max-width: 768px) {\n    #page-products-advisory .call-to-action {\n      padding-top: 80px; } }\n\n/*# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImFkdmlzb3J5LmNzcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtFQUNFLG1CQUFtQjtFQUNuQiwwQkFBMEI7RUFDMUIsbUJBQW1CO0VBQ25CLG1CQUFtQjtFQUNuQixzQkFBc0I7RUFDdEIscUVBQXFFO0VBQ3JFLDZCQUE2QjtFQUM3Qix1QkFBdUI7RUFDdkIsbUNBQW1DLEVBQUU7RUFDckM7SUFDRSxZQUFZLEVBQUU7SUFDZDtNQUNFLGtCQUFrQjtNQUNsQixnQkFBZ0I7TUFDaEIsdUJBQXVCO01BQ3ZCLDBCQUEwQjtNQUMxQixlQUFlO01BQ2YsOEVBQThFO01BQzlFLGlCQUFpQixFQUFFO0lBQ3JCOztNQUVFLGtCQUFrQjtNQUNsQixtQkFBbUIsRUFBRTtJQUN2QjtNQUNFLGtCQUFrQjtNQUNsQixnQkFBZ0I7TUFDaEIsd0JBQXdCO01BQ3hCLGlCQUFpQjtNQUNqQixpQkFBaUIsRUFBRTtJQUNyQjtNQUNFLDZEQUE2RDtNQUM3RCxnQkFBZ0I7TUFDaEIsa0JBQWtCO01BQ2xCLGlCQUFpQjtNQUNqQixlQUFlLEVBQUU7SUFDbkI7TUFDRSxpQkFBaUI7TUFDakIsaUJBQWlCO01BQ2pCLGdCQUFnQjtNQUNoQix1QkFBdUIsRUFBRTtJQUMzQjtNQUNFO1FBQ0UsZ0JBQWdCO1FBQ2hCLGtCQUFrQixFQUFFLEVBQUU7SUFDMUI7TUFDRTtRQUNFLGdCQUFnQjtRQUNoQixrQkFBa0IsRUFBRTtNQUN0QjtRQUNFLGtCQUFrQjtRQUNsQixnQkFBZ0IsRUFBRSxFQUFFO0VBQzFCO0lBQ0U7TUFDRSxjQUFjO01BQ2Qsa0JBQWtCO01BQ2xCLHFCQUFxQixFQUFFLEVBQUU7O0FBRS9CO0VBQ0UsZ0JBQWdCLEVBQUU7RUFDbEI7SUFDRSxnQkFBZ0I7SUFDaEIsa0JBQWtCO0lBQ2xCLHdCQUF3QjtJQUN4QixlQUFlO0lBQ2Ysb0JBQW9CLEVBQUU7RUFDeEI7SUFDRSxpQkFBaUI7SUFDakIsZ0JBQWdCO0lBQ2hCLGtCQUFrQjtJQUNsQix3QkFBd0I7SUFDeEIsZUFBZTtJQUNmLGlCQUFpQjtJQUNqQixtQkFBbUIsRUFBRTtFQUN2QjtJQUNFLGVBQWU7SUFDZixrQkFBa0I7SUFDbEIsZ0JBQWdCO0lBQ2hCLHdCQUF3QjtJQUN4QiwrREFBK0QsRUFBRTtFQUNuRTtJQUNFLGVBQWU7SUFDZixrQkFBa0I7SUFDbEIsZ0JBQWdCO0lBQ2hCLHdCQUF3QjtJQUN4Qiw2REFBNkQ7SUFDN0Qsb0JBQW9CLEVBQUU7RUFDeEI7SUFDRSxrQkFBa0I7SUFDbEIsZ0JBQWdCO0lBQ2hCLHdCQUF3QjtJQUN4QixlQUFlLEVBQUU7RUFDbkI7SUFDRSxZQUFZO0lBQ1osb0JBQW9CO0lBQ3BCLGlGQUFpRjtJQUNqRixvQkFBb0I7SUFDcEIsaUJBQWlCO0lBQ2pCLGdCQUFnQjtJQUNoQix1QkFBdUI7SUFDdkIsd0JBQXdCO0lBQ3hCLGFBQWE7SUFDYixxQkFBYztJQUFkLGNBQWM7SUFDZCx1QkFBb0I7UUFBcEIsb0JBQW9CLEVBQUU7SUFDdEI7TUFDRSxnQkFBZ0I7TUFDaEIsaUJBQWlCO01BQ2pCLHNDQUE4QjtjQUE5Qiw4QkFBOEIsRUFBRTtJQUNsQztNQUNFLDBCQUEwQixFQUFFO01BQzVCO1FBQ0Usd0NBQWdDO2dCQUFoQyxnQ0FBZ0MsRUFBRTtFQUN4QztJQUNFO01BQ0UsZ0JBQWdCLEVBQUUsRUFBRTtFQUN4QjtJQUNFO01BQ0UsZ0JBQWdCLEVBQUUsRUFBRTs7QUFFMUI7RUFDRSxxQkFBYztFQUFkLGNBQWM7RUFDZCx1QkFBK0I7TUFBL0IsK0JBQStCLEVBQUU7O0FBRW5DO0VBQ0UsaUJBQWlCLEVBQUU7RUFDbkI7SUFDRSxpQkFBaUIsRUFBRTs7QUFFdkI7RUFDRSxXQUFXLEVBQUU7RUFDYjtJQUNFLGdCQUFnQjtJQUNoQixzQkFBc0I7SUFDdEIscUJBQWM7SUFBZCxjQUFjO0lBQ2QsdUJBQStCO1FBQS9CLCtCQUErQjtJQUMvQix1QkFBb0I7UUFBcEIsb0JBQW9CLEVBQUU7RUFDeEI7SUFDRSxlQUFlO0lBQ2YseUVBQXlFO0lBQ3pFLDZCQUE2QjtJQUM3Qiw2QkFBNkIsRUFBRTtFQUNqQztJQUNFLFlBQVk7SUFDWixhQUFhO0lBQ2IseUJBQXlCLEVBQUU7RUFDN0I7SUFDRSxhQUFhO0lBQ2IsYUFBYTtJQUNiLDZCQUE2QixFQUFFO0VBQ2pDO0lBQ0UsYUFBYTtJQUNiLGFBQWE7SUFDYiw2QkFBNkIsRUFBRTtFQUNqQztJQUNFLFlBQVk7SUFDWixhQUFhO0lBQ2IsOEJBQThCLEVBQUU7RUFDbEM7SUFDRSxZQUFZO0lBQ1osYUFBYTtJQUNiLDhCQUE4QixFQUFFO0VBQ2xDO0lBQ0UsYUFBYTtJQUNiLGtCQUFrQjtJQUNsQixtQkFBbUIsRUFBRTtFQUN2QjtJQUNFO01BQ0UsK0JBQXVCO2NBQXZCLHVCQUF1QixFQUFFLEVBQUU7RUFDL0I7SUFDRTtNQUNFLGtCQUFrQjtNQUNsQixrQkFBa0IsRUFBRSxFQUFFO0VBQzFCO0lBQ0U7TUFDRSxzQkFBd0I7VUFBeEIsd0JBQXdCO01BQ3hCLG9CQUFnQjtVQUFoQixnQkFBZ0I7TUFDaEIsbUJBQW1CO01BQ25CLGlCQUFpQixFQUFFO0lBQ3JCO01BQ0UsOEJBQXNCO2NBQXRCLHNCQUFzQjtNQUN0QixZQUFZLEVBQUUsRUFBRTs7QUFFdEI7RUFDRTtJQUNFLDJCQUF1QjtRQUF2Qix1QkFBdUIsRUFBRTtFQUMzQjtJQUNFLGdCQUFnQjtJQUNoQixrQkFBa0I7SUFDbEIsaUJBQWlCLEVBQUUsRUFBRTs7QUFFekI7RUFDRSxZQUFZLEVBQUU7O0FBRWhCOztFQUVFLGtCQUFjO01BQWQsY0FBYyxFQUFFOztBQUVsQjtFQUNFLFlBQVk7RUFDWixpQkFBaUI7RUFDakIsaUJBQWlCLEVBQUU7O0FBRXJCO0VBQ0UsaUJBQWlCO0VBQ2pCLFVBQVU7RUFDVixXQUFXO0VBQ1gscUJBQWM7RUFBZCxjQUFjO0VBQ2Qsb0JBQWdCO01BQWhCLGdCQUFnQixFQUFFOztBQUVwQjtFQUNFLGtCQUFjO01BQWQsY0FBYztFQUNkLG9CQUFvQjtFQUNwQixvQkFBb0IsRUFBRTs7QUFFeEI7RUFDRSwwQkFBMEI7RUFDMUIsdUJBQXVCO0VBQ3ZCLGdCQUFnQixFQUFFO0VBQ2xCO0lBQ0UsZUFBZSxFQUFFO0VBQ25CO0lBQ0UsZUFBZSxFQUFFO0VBQ25CO0lBQ0UsZUFBZSxFQUFFO0VBQ25CO0lBQ0UsZUFBZSxFQUFFOztBQUVyQjtFQUNFO0lBQ0UsMkJBQXVCO1FBQXZCLHVCQUF1QixFQUFFO0VBQzNCO0lBQ0UsbUJBQW1CLEVBQUU7RUFDdkI7SUFDRSxjQUFjO0lBQ2Qsb0JBQW9CLEVBQUU7RUFDeEI7O0lBRUUsbUJBQW1CLEVBQUUsRUFBRTs7QUFFM0I7RUFDRTtJQUNFLG1CQUFlO1FBQWYsZUFBZSxFQUFFO0VBQ25COztJQUVFLGlCQUFpQixFQUFFLEVBQUU7O0FBRXpCO0VBQ0Usd0JBQXdCO0VBQ3hCLG1CQUFtQjtFQUNuQiwwQkFBMEI7RUFDMUIscUJBQWM7RUFBZCxjQUFjO0VBQ2Qsb0JBQXNCO01BQXRCLHNCQUFzQjtFQUN0Qix1QkFBK0I7TUFBL0IsK0JBQStCLEVBQUU7O0FBRW5DO0VBQ0UsY0FBYztFQUNkLGdCQUFnQjtFQUNoQix3QkFBd0I7RUFDeEIsZUFBZTtFQUNmLGlCQUFpQixFQUFFOztBQUVyQjtFQUNFLGtCQUFrQjtFQUNsQixnQkFBZ0I7RUFDaEIsd0JBQXdCO0VBQ3hCLGVBQWU7RUFDZixpQkFBaUIsRUFBRTtFQUNuQjtJQUNFLGlCQUFpQjtJQUNqQixlQUFlLEVBQUU7O0FBRXJCO0VBQ0Usa0JBQWtCLEVBQUU7O0FBRXRCO0VBQ0U7SUFDRSxnQkFBZ0I7SUFDaEIsa0JBQWtCO0lBQ2xCLHdCQUF3QixFQUFFLEVBQUU7O0FBRWhDO0VBQ0U7SUFDRSwyQkFBdUI7UUFBdkIsdUJBQXVCO0lBQ3ZCLG1CQUFtQjtJQUNuQix1QkFBb0I7UUFBcEIsb0JBQW9CLEVBQUU7RUFDeEI7SUFDRSxpQkFBaUI7SUFDakIsaUJBQWlCLEVBQUUsRUFBRTs7QUFFekI7RUFDRTtJQUNFLGNBQWMsRUFBRSxFQUFFOztBQUV0QjtFQUNFLGdCQUFnQjtFQUNoQixXQUFXO0VBQ1gsaUJBQWlCO0VBQ2pCLHFCQUFjO0VBQWQsY0FBYztFQUNkLG9CQUFnQjtNQUFoQixnQkFBZ0IsRUFBRTs7QUFFcEI7RUFDRSwyQkFBdUI7TUFBdkIsdUJBQXVCO0VBQ3ZCLGtCQUFjO01BQWQsY0FBYztFQUNkLG9CQUFvQjtFQUNwQixvQkFBb0IsRUFBRTtFQUN0QjtJQUNFLGNBQWMsRUFBRTs7QUFFcEI7RUFDRTtJQUNFLHFCQUFpQjtRQUFqQixpQkFBaUIsRUFBRSxFQUFFOztBQUV6QjtFQUNFO0lBQ0Usa0JBQWM7UUFBZCxjQUFjLEVBQUUsRUFBRTs7QUFFdEI7RUFDRTtJQUNFLG1CQUFlO1FBQWYsZUFBZSxFQUFFLEVBQUU7O0FBRXZCO0VBQ0UsbUJBQW1CLEVBQUU7O0FBRXZCO0VBQ0Usb0JBQW9CLEVBQUU7O0FBRXhCO0VBQ0Usc0JBQXNCO0VBQ3RCLFVBQVU7RUFDVixXQUFXLEVBQUU7RUFDYjtJQUNFLGVBQWU7SUFDZiw4QkFBOEI7SUFDOUIscUJBQWM7SUFBZCxjQUFjO0lBQ2Qsa0JBQWtCLEVBQUU7RUFDdEI7SUFDRSxnQkFBZ0I7SUFDaEIsZ0JBQWdCLEVBQUU7RUFDcEI7SUFDRSxnQkFBZ0I7SUFDaEIsZ0JBQWdCO0lBQ2hCLGlCQUFpQixFQUFFO0VBQ3JCO0lBQ0UsaUJBQWlCLEVBQUU7RUFDckI7SUFDRSxrQkFBYztRQUFkLGNBQWMsRUFBRTtFQUNsQjtJQUNFLGlCQUFpQixFQUFFO0VBQ3JCO0lBQ0UsbUJBQW1CLEVBQUU7O0FBRXpCO0VBQ0U7SUFDRSwyQkFBdUI7UUFBdkIsdUJBQXVCLEVBQUU7RUFDM0I7SUFDRSxnQkFBZ0I7SUFDaEIsb0JBQW9CLEVBQUU7RUFDeEI7SUFDRSxpQkFBaUIsRUFBRSxFQUFFOztBQUV6QjtFQUNFLHNCQUFzQixFQUFFO0VBQ3hCO0lBQ0U7TUFDRSxxQkFBcUIsRUFBRSxFQUFFO0VBQzdCO0lBQ0Usc0JBQXNCO0lBQ3RCLFVBQVU7SUFDVixXQUFXO0lBQ1gscUJBQWM7SUFBZCxjQUFjO0lBQ2QsbUJBQW1CO0lBQ25CLG9CQUFvQixFQUFFO0VBQ3hCO0lBQ0UscUJBQWM7SUFBZCxjQUFjO0lBQ2QsdUJBQStCO1FBQS9CLCtCQUErQjtJQUMvQix5QkFBc0I7UUFBdEIsc0JBQXNCLEVBQUU7SUFDeEI7TUFDRSxpQkFBaUI7TUFDakIsb0JBQW9CO01BQ3BCLGdCQUFnQjtNQUNoQix3QkFBd0I7TUFDeEIsZUFBZTtNQUNmLGlCQUFpQixFQUFFO0lBQ3JCO01BQ0UsaUJBQWlCO01BQ2pCLGdCQUFnQjtNQUNoQixvQkFBb0I7TUFDcEIsd0JBQXdCO01BQ3hCLGVBQWUsRUFBRTtJQUNuQjtNQUNFLGlCQUFpQjtNQUNqQixlQUFlO01BQ2YsZ0JBQWdCO01BQ2hCLHVCQUF1QjtNQUN2QixlQUFlO01BQ2YsMEJBQTBCLEVBQUU7SUFDOUI7TUFDRSxtQ0FBMkI7Y0FBM0IsMkJBQTJCLEVBQUU7RUFDakM7SUFDRSxlQUFlO0lBQ2YscUJBQWlCO1FBQWpCLGlCQUFpQjtJQUNqQixjQUFjLEVBQUU7SUFDaEI7TUFDRSxlQUFlO01BQ2YsWUFBWSxFQUFFO0lBQ2hCO01BQ0UsaUJBQWlCO01BQ2pCLG1CQUFtQixFQUFFO0lBQ3ZCO01BQ0UsWUFBWSxFQUFFO0lBQ2hCO01BQ0Usa0JBQWtCO01BQ2xCLGdCQUFnQjtNQUNoQix1QkFBdUI7TUFDdkIsMEJBQTBCO01BQzFCLGVBQWU7TUFDZixpQkFBaUI7TUFDakIsaUJBQWlCLEVBQUU7SUFDckI7TUFDRSxnQkFBZ0I7TUFDaEIsaUJBQWlCO01BQ2pCLGVBQWU7TUFDZixpQkFBaUIsRUFBRTtJQUNyQjtNQUNFLGVBQWU7TUFDZixrQkFBa0I7TUFDbEIsZ0JBQWdCO01BQ2hCLHdCQUF3QixFQUFFO0VBQzlCO0lBQ0U7TUFDRSxtQkFBbUI7TUFDbkIsb0JBQW9CLEVBQUU7SUFDeEI7TUFDRSxjQUFjLEVBQUUsRUFBRTtFQUN0QjtJQUNFO01BQ0Usb0JBQWdCO1VBQWhCLGdCQUFnQixFQUFFO0lBQ3BCO01BQ0Usa0JBQWM7VUFBZCxjQUFjLEVBQUUsRUFBRTtFQUN0QjtJQUNFO01BQ0UsbUJBQWU7VUFBZixlQUFlLEVBQUU7SUFDbkI7TUFDRSxjQUFjLEVBQUUsRUFBRTs7QUFFeEI7RUFDRSxnQkFBZ0IsRUFBRTs7QUFFcEI7RUFDRSx3QkFBd0IsRUFBRTs7QUFFNUI7RUFDRSwwQkFBMEI7RUFDMUIsbUJBQW1CO0VBQ25CLHNCQUFzQixFQUFFO0VBQ3hCO0lBQ0UsaUJBQWlCLEVBQUU7RUFDckI7SUFDRSxtQkFBbUI7SUFDbkIsb0JBQW9CLEVBQUU7SUFDdEI7TUFDRSxnQkFBZ0I7TUFDaEIsaUJBQWlCO01BQ2pCLG1CQUFtQjtNQUNuQix3QkFBd0I7TUFDeEIsZUFBZTtNQUNmLG1CQUFtQixFQUFFO01BQ3JCO1FBQ0UsbUJBQW1CO1FBQ25CLGVBQWUsRUFBRTtJQUNyQjtNQUNFLGtCQUFrQjtNQUNsQixnQkFBZ0I7TUFDaEIsbUJBQW1CO01BQ25CLHdCQUF3QjtNQUN4QixlQUFlLEVBQUU7TUFDakI7UUFDRSxpQkFBaUIsRUFBRTtFQUN6QjtJQUNFO01BQ0Usa0JBQWtCLEVBQUUsRUFBRSIsImZpbGUiOiJwYWdlcy9wcm9kdWN0cy9hZHZpc29yeS5jc3MiLCJzb3VyY2VzQ29udGVudCI6WyIjcGFnZS1wcm9kdWN0cy1hZHZpc29yeSAudG9wIHtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMTcxRTJBO1xuICBtYXJnaW4tdG9wOiAtMTQ4cHg7XG4gIHBhZGRpbmctdG9wOiAyMzVweDtcbiAgcGFkZGluZy1ib3R0b206IDE0MHB4O1xuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXCIvaW1nL3Byb2R1Y3RzL2Fkdmlzb3J5L2Fkdmlzb3J5LWhlcm8tYmcucG5nXCIpO1xuICBiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0O1xuICBiYWNrZ3JvdW5kLXNpemU6IGNvdmVyO1xuICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiBjZW50ZXIgY2VudGVyOyB9XG4gICNwYWdlLXByb2R1Y3RzLWFkdmlzb3J5IC50b3AgaGdyb3VwIHtcbiAgICBjb2xvcjogI2ZmZjsgfVxuICAgICNwYWdlLXByb2R1Y3RzLWFkdmlzb3J5IC50b3AgaGdyb3VwIGg0IHtcbiAgICAgIGxpbmUtaGVpZ2h0OiAyNXB4O1xuICAgICAgZm9udC1zaXplOiAxMnB4O1xuICAgICAgbGV0dGVyLXNwYWNpbmc6IDAuMTRlbTtcbiAgICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XG4gICAgICBjb2xvcjogI0IyQkVDRDtcbiAgICAgIGZvbnQtZmFtaWx5OiBcIlJvYm90byBNb25vXCIsIE1lbmxvLCBNb25hY28sIENvbnNvbGFzLCBcIkNvdXJpZXIgTmV3XCIsIG1vbm9zcGFjZTtcbiAgICAgIG1hcmdpbi1ib3R0b206IDA7IH1cbiAgICAjcGFnZS1wcm9kdWN0cy1hZHZpc29yeSAudG9wIGhncm91cCBoMSxcbiAgICAjcGFnZS1wcm9kdWN0cy1hZHZpc29yeSAudG9wIGhncm91cCBwIHtcbiAgICAgIG1hcmdpbi1sZWZ0OiBhdXRvO1xuICAgICAgbWFyZ2luLXJpZ2h0OiBhdXRvOyB9XG4gICAgI3BhZ2UtcHJvZHVjdHMtYWR2aXNvcnkgLnRvcCBoZ3JvdXAgaDEge1xuICAgICAgbGluZS1oZWlnaHQ6IDYzcHg7XG4gICAgICBmb250LXNpemU6IDU2cHg7XG4gICAgICBsZXR0ZXItc3BhY2luZzogLTAuMDJlbTtcbiAgICAgIG1hcmdpbi10b3A6IDE0cHg7XG4gICAgICBtYXgtd2lkdGg6IDYwMHB4OyB9XG4gICAgI3BhZ2UtcHJvZHVjdHMtYWR2aXNvcnkgLnRvcCBoZ3JvdXAgcCB7XG4gICAgICBmb250LWZhbWlseTogXCJFaW5hXCIsIFwiSGVsdmV0aWNhIE5ldWVcIiwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmO1xuICAgICAgZm9udC1zaXplOiAyMnB4O1xuICAgICAgbGluZS1oZWlnaHQ6IDMwcHg7XG4gICAgICBtYXgtd2lkdGg6IDU0MHB4O1xuICAgICAgY29sb3I6ICNERUUzRUE7IH1cbiAgICAjcGFnZS1wcm9kdWN0cy1hZHZpc29yeSAudG9wIGhncm91cCAuYnRuIHtcbiAgICAgIG1hcmdpbi10b3A6IDI0cHg7XG4gICAgICBmb250LXdlaWdodDogNzAwO1xuICAgICAgZm9udC1zaXplOiAxNHB4O1xuICAgICAgbGV0dGVyLXNwYWNpbmc6IDAuMDZlbTsgfVxuICAgIEBtZWRpYSAobWF4LXdpZHRoOiA3NjhweCkge1xuICAgICAgI3BhZ2UtcHJvZHVjdHMtYWR2aXNvcnkgLnRvcCBoZ3JvdXAgaDEge1xuICAgICAgICBmb250LXNpemU6IDQ4cHg7XG4gICAgICAgIGxpbmUtaGVpZ2h0OiA1NHB4OyB9IH1cbiAgICBAbWVkaWEgKG1heC13aWR0aDogNDgwcHgpIHtcbiAgICAgICNwYWdlLXByb2R1Y3RzLWFkdmlzb3J5IC50b3AgaGdyb3VwIGgxIHtcbiAgICAgICAgZm9udC1zaXplOiA0MHB4O1xuICAgICAgICBsaW5lLWhlaWdodDogNDRweDsgfVxuICAgICAgI3BhZ2UtcHJvZHVjdHMtYWR2aXNvcnkgLnRvcCBoZ3JvdXAgcCB7XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAyOHB4O1xuICAgICAgICBmb250LXNpemU6IDE4cHg7IH0gfVxuICBAbWVkaWEgKG1heC13aWR0aDogNzY4cHgpIHtcbiAgICAjcGFnZS1wcm9kdWN0cy1hZHZpc29yeSAudG9wIHtcbiAgICAgIG1hcmdpbi10b3A6IDA7XG4gICAgICBwYWRkaW5nLXRvcDogNTRweDtcbiAgICAgIHBhZGRpbmctYm90dG9tOiA3OHB4OyB9IH1cblxuI3BhZ2UtcHJvZHVjdHMtYWR2aXNvcnkgbWFpbiBzZWN0aW9uIHtcbiAgcGFkZGluZzogNzJweCAwOyB9XG4gICNwYWdlLXByb2R1Y3RzLWFkdmlzb3J5IG1haW4gc2VjdGlvbiBoMiB7XG4gICAgZm9udC1zaXplOiAzMnB4O1xuICAgIGxpbmUtaGVpZ2h0OiA0MnB4O1xuICAgIGxldHRlci1zcGFjaW5nOiAtMC4wM2VtO1xuICAgIGNvbG9yOiAjMUEyMzJGO1xuICAgIG1hcmdpbi1ib3R0b206IDIwcHg7IH1cbiAgI3BhZ2UtcHJvZHVjdHMtYWR2aXNvcnkgbWFpbiBzZWN0aW9uIGg0IHtcbiAgICBmb250LXdlaWdodDogNjAwO1xuICAgIGZvbnQtc2l6ZTogMThweDtcbiAgICBsaW5lLWhlaWdodDogMjRweDtcbiAgICBsZXR0ZXItc3BhY2luZzogLTAuMDJlbTtcbiAgICBjb2xvcjogIzFBMjMyRjtcbiAgICBtYXJnaW4tdG9wOiAxNnB4O1xuICAgIG1hcmdpbi1ib3R0b206IDZweDsgfVxuICAjcGFnZS1wcm9kdWN0cy1hZHZpc29yeSBtYWluIHNlY3Rpb24gcCB7XG4gICAgY29sb3I6ICM0RTVCNkE7XG4gICAgbGluZS1oZWlnaHQ6IDI2cHg7XG4gICAgZm9udC1zaXplOiAxNnB4O1xuICAgIGxldHRlci1zcGFjaW5nOiAtMC4wMWVtO1xuICAgIGZvbnQtZmFtaWx5OiBcIkludGVyXCIsIFwiSW50ZXIgVUlcIiwgSGVsdmV0aWNhLCBBcmlhbCwgc2Fucy1zZXJpZjsgfVxuICAjcGFnZS1wcm9kdWN0cy1hZHZpc29yeSBtYWluIHNlY3Rpb24gcC5sYXJnZSB7XG4gICAgY29sb3I6ICMyNzMyM0Y7XG4gICAgbGluZS1oZWlnaHQ6IDM5cHg7XG4gICAgZm9udC1zaXplOiAyMnB4O1xuICAgIGxldHRlci1zcGFjaW5nOiAtMC4wMmVtO1xuICAgIGZvbnQtZmFtaWx5OiBcIkVpbmFcIiwgXCJIZWx2ZXRpY2EgTmV1ZVwiLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7XG4gICAgbWFyZ2luLWJvdHRvbTogMjRweDsgfVxuICAjcGFnZS1wcm9kdWN0cy1hZHZpc29yeSBtYWluIHNlY3Rpb24gcC5zbWFsbCB7XG4gICAgbGluZS1oZWlnaHQ6IDIycHg7XG4gICAgZm9udC1zaXplOiAxNHB4O1xuICAgIGxldHRlci1zcGFjaW5nOiAtMC4wMmVtO1xuICAgIGNvbG9yOiAjNUI3MDhCOyB9XG4gICNwYWdlLXByb2R1Y3RzLWFkdmlzb3J5IG1haW4gc2VjdGlvbiAuYnRuIHtcbiAgICBjb2xvcjogI2ZmZjtcbiAgICBiYWNrZ3JvdW5kOiAjMzg4MEZGO1xuICAgIGJveC1zaGFkb3c6IDBweCAwcHggMnB4IHJnYmEoMCwgMjAsIDU2LCAwLjE0KSwgMHB4IDJweCAzcHggcmdiYSgwLCAyMCwgNTYsIDAuMDgpO1xuICAgIGJvcmRlci1yYWRpdXM6IDg0cHg7XG4gICAgZm9udC13ZWlnaHQ6IDcwMDtcbiAgICBmb250LXNpemU6IDE0cHg7XG4gICAgbGV0dGVyLXNwYWNpbmc6IDAuMDZlbTtcbiAgICBwYWRkaW5nOiAxOXB4IDI1cHggMTlweDtcbiAgICBoZWlnaHQ6IDUycHg7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyOyB9XG4gICAgI3BhZ2UtcHJvZHVjdHMtYWR2aXNvcnkgbWFpbiBzZWN0aW9uIC5idG4gaW9uLWljb24ge1xuICAgICAgZm9udC1zaXplOiAxOHB4O1xuICAgICAgbWFyZ2luLWxlZnQ6IDRweDtcbiAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlKDAsIC0xcHgpOyB9XG4gICAgI3BhZ2UtcHJvZHVjdHMtYWR2aXNvcnkgbWFpbiBzZWN0aW9uIC5idG46aG92ZXIge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogIzQyODdmZjsgfVxuICAgICAgI3BhZ2UtcHJvZHVjdHMtYWR2aXNvcnkgbWFpbiBzZWN0aW9uIC5idG46aG92ZXIgaW9uLWljb24ge1xuICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgxcHgsIC0xcHgpOyB9XG4gIEBtZWRpYSAobWF4LXdpZHRoOiA3NjhweCkge1xuICAgICNwYWdlLXByb2R1Y3RzLWFkdmlzb3J5IG1haW4gc2VjdGlvbiB7XG4gICAgICBwYWRkaW5nOiA2MHB4IDA7IH0gfVxuICBAbWVkaWEgKG1heC13aWR0aDogNDgwcHgpIHtcbiAgICAjcGFnZS1wcm9kdWN0cy1hZHZpc29yeSBtYWluIHNlY3Rpb24ge1xuICAgICAgcGFkZGluZzogNDBweCAwOyB9IH1cblxuI3BhZ2UtcHJvZHVjdHMtYWR2aXNvcnkgLmZsZXgge1xuICBkaXNwbGF5OiBmbGV4O1xuICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47IH1cblxuI3BhZ2UtcHJvZHVjdHMtYWR2aXNvcnkgLm1lYXN1cmUge1xuICBtYXgtd2lkdGg6IDU2MHB4OyB9XG4gICNwYWdlLXByb2R1Y3RzLWFkdmlzb3J5IC5tZWFzdXJlLWxnIHtcbiAgICBtYXgtd2lkdGg6IDcyMHB4OyB9XG5cbiNwYWdlLXByb2R1Y3RzLWFkdmlzb3J5IC5jdXN0b21lci1sb2dvcyB7XG4gIHBhZGRpbmc6IDA7IH1cbiAgI3BhZ2UtcHJvZHVjdHMtYWR2aXNvcnkgLmN1c3RvbWVyLWxvZ29zIHVsIHtcbiAgICBwYWRkaW5nOiAzMnB4IDA7XG4gICAgbGlzdC1zdHlsZS10eXBlOiBub25lO1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7IH1cbiAgI3BhZ2UtcHJvZHVjdHMtYWR2aXNvcnkgLmN1c3RvbWVyLWxvZ29zIFtjbGFzc149J2N1c3RvbWVyLWxvZ28nXSB7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFwiL2ltZy9wcm9kdWN0cy9hZHZpc29yeS9hZHZpc29yeS1sb2dvLXNwcml0ZS5wbmdcIik7XG4gICAgYmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdDtcbiAgICBiYWNrZ3JvdW5kLXNpemU6IDE3NnB4IDE5M3B4OyB9XG4gICNwYWdlLXByb2R1Y3RzLWFkdmlzb3J5IC5jdXN0b21lci1sb2dvcyAuY3VzdG9tZXItbG9nby0tYWFhIHtcbiAgICB3aWR0aDogNzJweDtcbiAgICBoZWlnaHQ6IDQycHg7XG4gICAgYmFja2dyb3VuZC1wb3NpdGlvbjogMCAwOyB9XG4gICNwYWdlLXByb2R1Y3RzLWFkdmlzb3J5IC5jdXN0b21lci1sb2dvcyAuY3VzdG9tZXItbG9nby0tYW10cmFrIHtcbiAgICB3aWR0aDogMTc2cHg7XG4gICAgaGVpZ2h0OiAyMHB4O1xuICAgIGJhY2tncm91bmQtcG9zaXRpb246IDAgLTQzcHg7IH1cbiAgI3BhZ2UtcHJvZHVjdHMtYWR2aXNvcnkgLmN1c3RvbWVyLWxvZ29zIC5jdXN0b21lci1sb2dvLS1wYW5lcmEge1xuICAgIHdpZHRoOiAxMTJweDtcbiAgICBoZWlnaHQ6IDM5cHg7XG4gICAgYmFja2dyb3VuZC1wb3NpdGlvbjogMCAtNjRweDsgfVxuICAjcGFnZS1wcm9kdWN0cy1hZHZpc29yeSAuY3VzdG9tZXItbG9nb3MgLmN1c3RvbWVyLWxvZ28tLWdlIHtcbiAgICB3aWR0aDogNDhweDtcbiAgICBoZWlnaHQ6IDQ5cHg7XG4gICAgYmFja2dyb3VuZC1wb3NpdGlvbjogMCAtMTAzcHg7IH1cbiAgI3BhZ2UtcHJvZHVjdHMtYWR2aXNvcnkgLmN1c3RvbWVyLWxvZ29zIC5jdXN0b21lci1sb2dvLS1yYmkge1xuICAgIHdpZHRoOiA2MnB4O1xuICAgIGhlaWdodDogNDFweDtcbiAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwIC0xNTJweDsgfVxuICAjcGFnZS1wcm9kdWN0cy1hZHZpc29yeSAuY3VzdG9tZXItbG9nb3MgaW1nIHtcbiAgICBoZWlnaHQ6IDQ4cHg7XG4gICAgbWFyZ2luLWxlZnQ6IGF1dG87XG4gICAgbWFyZ2luLXJpZ2h0OiBhdXRvOyB9XG4gIEBtZWRpYSAobWF4LXdpZHRoOiA5OTJweCkge1xuICAgICNwYWdlLXByb2R1Y3RzLWFkdmlzb3J5IC5jdXN0b21lci1sb2dvcyBbY2xhc3NePSdjdXN0b21lci1sb2dvJ10ge1xuICAgICAgdHJhbnNmb3JtOiBzY2FsZSgwLjc1KTsgfSB9XG4gIEBtZWRpYSAobWF4LXdpZHRoOiA3NjhweCkge1xuICAgICNwYWdlLXByb2R1Y3RzLWFkdmlzb3J5IC5jdXN0b21lci1sb2dvcyB1bCB7XG4gICAgICBwYWRkaW5nLWJvdHRvbTogMDtcbiAgICAgIHBhZGRpbmctYm90dG9tOiAwOyB9IH1cbiAgQG1lZGlhIChtYXgtd2lkdGg6IDQ4MHB4KSB7XG4gICAgI3BhZ2UtcHJvZHVjdHMtYWR2aXNvcnkgLmN1c3RvbWVyLWxvZ29zIHVsIHtcbiAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICAgICAgZmxleC13cmFwOiB3cmFwO1xuICAgICAgbWFyZ2luOiAtMTBweCBhdXRvO1xuICAgICAgbWF4LXdpZHRoOiA0NjBweDsgfVxuICAgICNwYWdlLXByb2R1Y3RzLWFkdmlzb3J5IC5jdXN0b21lci1sb2dvcyBbY2xhc3NePSdjdXN0b21lci1sb2dvJ10ge1xuICAgICAgdHJhbnNmb3JtOiBzY2FsZSgwLjcpO1xuICAgICAgbWFyZ2luOiAzcHg7IH0gfVxuXG5AbWVkaWEgKG1heC13aWR0aDogOTkycHgpIHtcbiAgI3BhZ2UtcHJvZHVjdHMtYWR2aXNvcnkgLmdvYWxzIC5mbGV4IHtcbiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOyB9XG4gICNwYWdlLXByb2R1Y3RzLWFkdmlzb3J5IC5nb2FscyAuY2hlY2ttYXJrLWxpc3QtLWxhcmdlIHtcbiAgICBwYWRkaW5nLWxlZnQ6IDA7XG4gICAgcGFkZGluZy10b3A6IDI0cHg7XG4gICAgbWF4LXdpZHRoOiA0NjBweDsgfSB9XG5cbiNwYWdlLXByb2R1Y3RzLWFkdmlzb3J5IC5saWZlY3ljbGUgLmZsZXgge1xuICB3aWR0aDogMTAwJTsgfVxuXG4jcGFnZS1wcm9kdWN0cy1hZHZpc29yeSAubGlmZWN5Y2xlIC5pbGx1c3RyYXRpb24sXG4jcGFnZS1wcm9kdWN0cy1hZHZpc29yeSAubGlmZWN5Y2xlIGhncm91cCB7XG4gIGZsZXg6IDAgMCA1MCU7IH1cblxuI3BhZ2UtcHJvZHVjdHMtYWR2aXNvcnkgLmxpZmVjeWNsZSAuaWxsdXN0cmF0aW9uIGltZyB7XG4gIHdpZHRoOiAxMDAlO1xuICBtYXgtd2lkdGg6IDQzMHB4O1xuICBtYXJnaW4tdG9wOiA0NHB4OyB9XG5cbiNwYWdlLXByb2R1Y3RzLWFkdmlzb3J5IC5saWZlY3ljbGUgdWwge1xuICBsaXN0LXN0eWxlOiBub25lO1xuICBtYXJnaW46IDA7XG4gIHBhZGRpbmc6IDA7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtd3JhcDogd3JhcDsgfVxuXG4jcGFnZS1wcm9kdWN0cy1hZHZpc29yeSAubGlmZWN5Y2xlIGxpIHtcbiAgZmxleDogMCAwIDUwJTtcbiAgcGFkZGluZy1yaWdodDogNTBweDtcbiAgbWFyZ2luLWJvdHRvbTogMTJweDsgfVxuXG4jcGFnZS1wcm9kdWN0cy1hZHZpc29yeSAubGlmZWN5Y2xlIGg1IHtcbiAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcbiAgbGV0dGVyLXNwYWNpbmc6IDAuMDhlbTtcbiAgZm9udC1zaXplOiAxM3B4OyB9XG4gICNwYWdlLXByb2R1Y3RzLWFkdmlzb3J5IC5saWZlY3ljbGUgaDUuYmx1ZSB7XG4gICAgY29sb3I6ICMzODgwRkY7IH1cbiAgI3BhZ2UtcHJvZHVjdHMtYWR2aXNvcnkgLmxpZmVjeWNsZSBoNS5wdXJwbGUge1xuICAgIGNvbG9yOiAjNjAzMEZGOyB9XG4gICNwYWdlLXByb2R1Y3RzLWFkdmlzb3J5IC5saWZlY3ljbGUgaDUuZ3JlZW4ge1xuICAgIGNvbG9yOiAjNDNDNDY1OyB9XG4gICNwYWdlLXByb2R1Y3RzLWFkdmlzb3J5IC5saWZlY3ljbGUgaDUuZ3JheSB7XG4gICAgY29sb3I6ICM1QjcwOEI7IH1cblxuQG1lZGlhIChtYXgtd2lkdGg6IDk5MnB4KSB7XG4gICNwYWdlLXByb2R1Y3RzLWFkdmlzb3J5IC5saWZlY3ljbGUgLmZsZXgge1xuICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47IH1cbiAgI3BhZ2UtcHJvZHVjdHMtYWR2aXNvcnkgLmxpZmVjeWNsZSAuaWxsdXN0cmF0aW9uIHtcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7IH1cbiAgI3BhZ2UtcHJvZHVjdHMtYWR2aXNvcnkgLmxpZmVjeWNsZSAuaWxsdXN0cmF0aW9uIGltZyB7XG4gICAgbWFyZ2luLXRvcDogMDtcbiAgICBtYXJnaW4tYm90dG9tOiA0NHB4OyB9XG4gICNwYWdlLXByb2R1Y3RzLWFkdmlzb3J5IC5saWZlY3ljbGUgaDIsXG4gICNwYWdlLXByb2R1Y3RzLWFkdmlzb3J5IC5saWZlY3ljbGUgaGdyb3VwID4gcCB7XG4gICAgdGV4dC1hbGlnbjogY2VudGVyOyB9IH1cblxuQG1lZGlhIChtYXgtd2lkdGg6IDQ4MHB4KSB7XG4gICNwYWdlLXByb2R1Y3RzLWFkdmlzb3J5IC5saWZlY3ljbGUgbGkge1xuICAgIGZsZXg6IDAgMCAxMDAlOyB9XG4gICNwYWdlLXByb2R1Y3RzLWFkdmlzb3J5IC5saWZlY3ljbGUgaDIsXG4gICNwYWdlLXByb2R1Y3RzLWFkdmlzb3J5IC5saWZlY3ljbGUgaGdyb3VwID4gcCB7XG4gICAgdGV4dC1hbGlnbjogbGVmdDsgfSB9XG5cbiNwYWdlLXByb2R1Y3RzLWFkdmlzb3J5IC5ib29rLWEtc2Vzc2lvbiAud2VsbCB7XG4gIHBhZGRpbmc6IDU0cHggNTRweCA0OHB4O1xuICBib3JkZXItcmFkaXVzOiA4cHg7XG4gIGJhY2tncm91bmQtY29sb3I6ICNGNEY2RkM7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGFsaWduLWl0ZW1zOiBmbGV4LWVuZDtcbiAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOyB9XG5cbiNwYWdlLXByb2R1Y3RzLWFkdmlzb3J5IC5ib29rLWEtc2Vzc2lvbiBoMyB7XG4gIG1hcmdpbi10b3A6IDA7XG4gIGZvbnQtc2l6ZTogMjZweDtcbiAgbGV0dGVyLXNwYWNpbmc6IC0wLjAyZW07XG4gIGNvbG9yOiAjMDIwODE0O1xuICBmb250LXdlaWdodDogNjAwOyB9XG5cbiNwYWdlLXByb2R1Y3RzLWFkdmlzb3J5IC5ib29rLWEtc2Vzc2lvbiBwLmxhcmdlIHtcbiAgbGluZS1oZWlnaHQ6IDMycHg7XG4gIGZvbnQtc2l6ZTogMjBweDtcbiAgbGV0dGVyLXNwYWNpbmc6IC0wLjAyZW07XG4gIGNvbG9yOiAjNzM4NDlBO1xuICBtYXJnaW4tYm90dG9tOiAwOyB9XG4gICNwYWdlLXByb2R1Y3RzLWFkdmlzb3J5IC5ib29rLWEtc2Vzc2lvbiBwLmxhcmdlIHN0cm9uZyB7XG4gICAgZm9udC13ZWlnaHQ6IDQwMDtcbiAgICBjb2xvcjogIzAyMDgxNDsgfVxuXG4jcGFnZS1wcm9kdWN0cy1hZHZpc29yeSAuYm9vay1hLXNlc3Npb24gLmJ0biB7XG4gIG1hcmdpbi1sZWZ0OiA0MHB4OyB9XG5cbkBtZWRpYSAobWF4LXdpZHRoOiAxMjIwcHgpIHtcbiAgI3BhZ2UtcHJvZHVjdHMtYWR2aXNvcnkgLmJvb2stYS1zZXNzaW9uIHAubGFyZ2Uge1xuICAgIGZvbnQtc2l6ZTogMThweDtcbiAgICBsaW5lLWhlaWdodDogMzBweDtcbiAgICBsZXR0ZXItc3BhY2luZzogLTAuMDFlbTsgfSB9XG5cbkBtZWRpYSAobWF4LXdpZHRoOiA5OTJweCkge1xuICAjcGFnZS1wcm9kdWN0cy1hZHZpc29yeSAuYm9vay1hLXNlc3Npb24gLndlbGwge1xuICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7IH1cbiAgI3BhZ2UtcHJvZHVjdHMtYWR2aXNvcnkgLmJvb2stYS1zZXNzaW9uIC5idG4ge1xuICAgIG1hcmdpbi1sZWZ0OiAwcHg7XG4gICAgbWFyZ2luLXRvcDogMThweDsgfSB9XG5cbkBtZWRpYSAobWF4LXdpZHRoOiA0ODBweCkge1xuICAjcGFnZS1wcm9kdWN0cy1hZHZpc29yeSAuYm9vay1hLXNlc3Npb24gLndlbGwge1xuICAgIHBhZGRpbmc6IDMycHg7IH0gfVxuXG4jcGFnZS1wcm9kdWN0cy1hZHZpc29yeSAud2hhdC15b3UtZ2V0IC5jaGVja21hcmstbGlzdC0tbGFyZ2Uge1xuICBtYXgtd2lkdGg6IDEwMCU7XG4gIHBhZGRpbmc6IDA7XG4gIG1hcmdpbjogMzhweCAwIDA7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtd3JhcDogd3JhcDsgfVxuXG4jcGFnZS1wcm9kdWN0cy1hZHZpc29yeSAud2hhdC15b3UtZ2V0IC5jaGVja21hcmstbGlzdC0tbGFyZ2UgbGkge1xuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICBmbGV4OiAwIDAgMjUlO1xuICBwYWRkaW5nLXJpZ2h0OiAyNHB4O1xuICBtYXJnaW4tYm90dG9tOiAyNHB4OyB9XG4gICNwYWdlLXByb2R1Y3RzLWFkdmlzb3J5IC53aGF0LXlvdS1nZXQgLmNoZWNrbWFyay1saXN0LS1sYXJnZSBsaSArIGxpIHtcbiAgICBtYXJnaW4tdG9wOiAwOyB9XG5cbkBtZWRpYSAobWF4LXdpZHRoOiA5OTJweCkge1xuICAjcGFnZS1wcm9kdWN0cy1hZHZpc29yeSAud2hhdC15b3UtZ2V0IC5jaGVja21hcmstbGlzdC0tbGFyZ2UgbGkge1xuICAgIGZsZXg6IDAgMCAzMy4zMyU7IH0gfVxuXG5AbWVkaWEgKG1heC13aWR0aDogNzY4cHgpIHtcbiAgI3BhZ2UtcHJvZHVjdHMtYWR2aXNvcnkgLndoYXQteW91LWdldCAuY2hlY2ttYXJrLWxpc3QtLWxhcmdlIGxpIHtcbiAgICBmbGV4OiAwIDAgNTAlOyB9IH1cblxuQG1lZGlhIChtYXgtd2lkdGg6IDQ4MHB4KSB7XG4gICNwYWdlLXByb2R1Y3RzLWFkdmlzb3J5IC53aGF0LXlvdS1nZXQgLmNoZWNrbWFyay1saXN0LS1sYXJnZSBsaSB7XG4gICAgZmxleDogMCAwIDEwMCU7IH0gfVxuXG4jcGFnZS1wcm9kdWN0cy1hZHZpc29yeSAudXNlLWNhc2VzIGhncm91cCBoMiB7XG4gIG1hcmdpbi1ib3R0b206IDRweDsgfVxuXG4jcGFnZS1wcm9kdWN0cy1hZHZpc29yeSAudXNlLWNhc2VzIGhncm91cCBwLmxhcmdlIHtcbiAgbWFyZ2luLWJvdHRvbTogMjhweDsgfVxuXG4jcGFnZS1wcm9kdWN0cy1hZHZpc29yeSAudXNlLWNhc2VzIC5yb3ctbGlzdCB7XG4gIGxpc3Qtc3R5bGUtdHlwZTogbm9uZTtcbiAgbWFyZ2luOiAwO1xuICBwYWRkaW5nOiAwOyB9XG4gICNwYWdlLXByb2R1Y3RzLWFkdmlzb3J5IC51c2UtY2FzZXMgLnJvdy1saXN0ID4gbGkge1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIGJvcmRlci10b3A6IDFweCBzb2xpZCAjREVFM0VBO1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgcGFkZGluZy10b3A6IDMycHg7IH1cbiAgI3BhZ2UtcHJvZHVjdHMtYWR2aXNvcnkgLnVzZS1jYXNlcyAucm93LWxpc3QgaDQge1xuICAgIG1hcmdpbi10b3A6IDRweDtcbiAgICBmb250LXNpemU6IDIwcHg7IH1cbiAgI3BhZ2UtcHJvZHVjdHMtYWR2aXNvcnkgLnVzZS1jYXNlcyAucm93LWxpc3QgaDUge1xuICAgIG1hcmdpbi10b3A6IDdweDtcbiAgICBmb250LXNpemU6IDE2cHg7XG4gICAgZm9udC13ZWlnaHQ6IDYwMDsgfVxuICAjcGFnZS1wcm9kdWN0cy1hZHZpc29yeSAudXNlLWNhc2VzIC5yb3ctbGlzdCA+IGxpICsgbGkge1xuICAgIG1hcmdpbi10b3A6IDMycHg7IH1cbiAgI3BhZ2UtcHJvZHVjdHMtYWR2aXNvcnkgLnVzZS1jYXNlcyAucm93LWxpc3QgLmNvbCB7XG4gICAgZmxleDogMCAwIDUwJTsgfVxuICAjcGFnZS1wcm9kdWN0cy1hZHZpc29yeSAudXNlLWNhc2VzIC5yb3ctbGlzdCAubWVhc3VyZSB7XG4gICAgbWF4LXdpZHRoOiA0NDBweDsgfVxuICAjcGFnZS1wcm9kdWN0cy1hZHZpc29yeSAudXNlLWNhc2VzIC5yb3ctbGlzdCBoZ3JvdXAge1xuICAgIG1hcmdpbi1yaWdodDogNjBweDsgfVxuXG5AbWVkaWEgKG1heC13aWR0aDogNzY4cHgpIHtcbiAgI3BhZ2UtcHJvZHVjdHMtYWR2aXNvcnkgLnVzZS1jYXNlcyAucm93LWxpc3QgPiBsaSB7XG4gICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsgfVxuICAjcGFnZS1wcm9kdWN0cy1hZHZpc29yeSAudXNlLWNhc2VzIC5yb3ctbGlzdCBoZ3JvdXAge1xuICAgIG1hcmdpbi1yaWdodDogMDtcbiAgICBtYXJnaW4tYm90dG9tOiAyMHB4OyB9XG4gICNwYWdlLXByb2R1Y3RzLWFkdmlzb3J5IC51c2UtY2FzZXMgLnJvdy1saXN0IC5tZWFzdXJlIHtcbiAgICBtYXgtd2lkdGg6IDU4MHB4OyB9IH1cblxuI3BhZ2UtcHJvZHVjdHMtYWR2aXNvcnkgLnJlc291cmNlcyB7XG4gIHBhZGRpbmctYm90dG9tOiAxMjBweDsgfVxuICBAbWVkaWEgKG1heC13aWR0aDogNzY4cHgpIHtcbiAgICAjcGFnZS1wcm9kdWN0cy1hZHZpc29yeSAucmVzb3VyY2VzIHtcbiAgICAgIHBhZGRpbmctYm90dG9tOiA2MHB4OyB9IH1cbiAgI3BhZ2UtcHJvZHVjdHMtYWR2aXNvcnkgLnJlc291cmNlcyAuY2FyZHMge1xuICAgIGxpc3Qtc3R5bGUtdHlwZTogbm9uZTtcbiAgICBtYXJnaW46IDA7XG4gICAgcGFkZGluZzogMDtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIG1hcmdpbi1sZWZ0OiAtMjRweDtcbiAgICBtYXJnaW4tcmlnaHQ6IC0yNHB4OyB9XG4gICNwYWdlLXByb2R1Y3RzLWFkdmlzb3J5IC5yZXNvdXJjZXMgaGdyb3VwIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcbiAgICBhbGlnbi1pdGVtczogYmFzZWxpbmU7IH1cbiAgICAjcGFnZS1wcm9kdWN0cy1hZHZpc29yeSAucmVzb3VyY2VzIGhncm91cCBoMyB7XG4gICAgICBmb250LXdlaWdodDogNjAwO1xuICAgICAgbGluZS1oZWlnaHQ6IG5vcm1hbDtcbiAgICAgIGZvbnQtc2l6ZTogMjhweDtcbiAgICAgIGxldHRlci1zcGFjaW5nOiAtMC4wMmVtO1xuICAgICAgY29sb3I6ICMxQTIzMkY7XG4gICAgICBtYXJnaW4tYm90dG9tOiAwOyB9XG4gICAgI3BhZ2UtcHJvZHVjdHMtYWR2aXNvcnkgLnJlc291cmNlcyBoZ3JvdXAgaDQge1xuICAgICAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgICAgIGZvbnQtc2l6ZTogMjRweDtcbiAgICAgIGxpbmUtaGVpZ2h0OiBub3JtYWw7XG4gICAgICBsZXR0ZXItc3BhY2luZzogLTAuMDJlbTtcbiAgICAgIGNvbG9yOiAjMUEyMzJGOyB9XG4gICAgI3BhZ2UtcHJvZHVjdHMtYWR2aXNvcnkgLnJlc291cmNlcyBoZ3JvdXAgaDUge1xuICAgICAgZm9udC13ZWlnaHQ6IDcwMDtcbiAgICAgIGxpbmUtaGVpZ2h0OiAxO1xuICAgICAgZm9udC1zaXplOiAxNHB4O1xuICAgICAgbGV0dGVyLXNwYWNpbmc6IDAuMDhlbTtcbiAgICAgIGNvbG9yOiAjMzg4MEZGO1xuICAgICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTsgfVxuICAgICNwYWdlLXByb2R1Y3RzLWFkdmlzb3J5IC5yZXNvdXJjZXMgaGdyb3VwIGlvbi1pY29uIHtcbiAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgycHgpOyB9XG4gICNwYWdlLXByb2R1Y3RzLWFkdmlzb3J5IC5yZXNvdXJjZXMgLmNhcmRzIGxpIHtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgICBmbGV4OiAwIDAgMzMuMzMlO1xuICAgIHBhZGRpbmc6IDI0cHg7IH1cbiAgICAjcGFnZS1wcm9kdWN0cy1hZHZpc29yeSAucmVzb3VyY2VzIC5jYXJkcyBsaSBhIHtcbiAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgd2lkdGg6IDEwMCU7IH1cbiAgICAjcGFnZS1wcm9kdWN0cy1hZHZpc29yeSAucmVzb3VyY2VzIC5jYXJkcyBsaSAuaW1nLXdyYXBwZXIge1xuICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICAgIGJvcmRlci1yYWRpdXM6IDZweDsgfVxuICAgICNwYWdlLXByb2R1Y3RzLWFkdmlzb3J5IC5yZXNvdXJjZXMgLmNhcmRzIGxpIGltZyB7XG4gICAgICB3aWR0aDogMTAwJTsgfVxuICAgICNwYWdlLXByb2R1Y3RzLWFkdmlzb3J5IC5yZXNvdXJjZXMgLmNhcmRzIGxpIGg2IHtcbiAgICAgIGxpbmUtaGVpZ2h0OiAyM3B4O1xuICAgICAgZm9udC1zaXplOiAxMnB4O1xuICAgICAgbGV0dGVyLXNwYWNpbmc6IDAuMTJlbTtcbiAgICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XG4gICAgICBjb2xvcjogI0IyQkVDRDtcbiAgICAgIG1hcmdpbi1ib3R0b206IDA7XG4gICAgICBtYXJnaW4tdG9wOiAxNnB4OyB9XG4gICAgI3BhZ2UtcHJvZHVjdHMtYWR2aXNvcnkgLnJlc291cmNlcyAuY2FyZHMgbGkgaDQge1xuICAgICAgZm9udC1zaXplOiAyMHB4O1xuICAgICAgbWFyZ2luLXRvcDogMTBweDtcbiAgICAgIGNvbG9yOiAjMUEyMzJGO1xuICAgICAgZm9udC13ZWlnaHQ6IDYwMDsgfVxuICAgICNwYWdlLXByb2R1Y3RzLWFkdmlzb3J5IC5yZXNvdXJjZXMgLmNhcmRzIGxpIHAge1xuICAgICAgY29sb3I6ICM1QjcwOEI7XG4gICAgICBsaW5lLWhlaWdodDogMjJweDtcbiAgICAgIGZvbnQtc2l6ZTogMTRweDtcbiAgICAgIGxldHRlci1zcGFjaW5nOiAtMC4wMmVtOyB9XG4gIEBtZWRpYSAobWF4LXdpZHRoOiA5OTJweCkge1xuICAgICNwYWdlLXByb2R1Y3RzLWFkdmlzb3J5IC5yZXNvdXJjZXMgLmNhcmRzIHtcbiAgICAgIG1hcmdpbi1sZWZ0OiAtMTJweDtcbiAgICAgIG1hcmdpbi1yaWdodDogLTEycHg7IH1cbiAgICAjcGFnZS1wcm9kdWN0cy1hZHZpc29yeSAucmVzb3VyY2VzIC5jYXJkcyBsaSB7XG4gICAgICBwYWRkaW5nOiAxMnB4OyB9IH1cbiAgQG1lZGlhIChtYXgtd2lkdGg6IDc2OHB4KSB7XG4gICAgI3BhZ2UtcHJvZHVjdHMtYWR2aXNvcnkgLnJlc291cmNlcyAuY2FyZHMge1xuICAgICAgZmxleC13cmFwOiB3cmFwOyB9XG4gICAgI3BhZ2UtcHJvZHVjdHMtYWR2aXNvcnkgLnJlc291cmNlcyAuY2FyZHMgbGkge1xuICAgICAgZmxleDogMCAwIDUwJTsgfSB9XG4gIEBtZWRpYSAobWF4LXdpZHRoOiA0ODBweCkge1xuICAgICNwYWdlLXByb2R1Y3RzLWFkdmlzb3J5IC5yZXNvdXJjZXMgLmNhcmRzIGxpIHtcbiAgICAgIGZsZXg6IDAgMCAxMDAlOyB9XG4gICAgI3BhZ2UtcHJvZHVjdHMtYWR2aXNvcnkgLnJlc291cmNlcyBoNSB7XG4gICAgICBkaXNwbGF5OiBub25lOyB9IH1cblxuI3BhZ2UtcHJvZHVjdHMtYWR2aXNvcnkgLm1vZGFsIGZvcm0ge1xuICBtYXgtd2lkdGg6IDEwMCU7IH1cblxuI3BhZ2UtcHJvZHVjdHMtYWR2aXNvcnkgLm1vZGFsLWJvZHkge1xuICBwYWRkaW5nOiAzMnB4IDQ4cHggNDhweDsgfVxuXG4jcGFnZS1wcm9kdWN0cy1hZHZpc29yeSAuY2FsbC10by1hY3Rpb24ge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjRjZGOEZCO1xuICBwYWRkaW5nLXRvcDogMTQwcHg7XG4gIHBhZGRpbmctYm90dG9tOiAxMDBweDsgfVxuICAjcGFnZS1wcm9kdWN0cy1hZHZpc29yeSAuY2FsbC10by1hY3Rpb24gLmNvbnRhaW5lciB7XG4gICAgbWF4LXdpZHRoOiA3NjhweDsgfVxuICAjcGFnZS1wcm9kdWN0cy1hZHZpc29yeSAuY2FsbC10by1hY3Rpb24gaGdyb3VwIHtcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgbWFyZ2luLWJvdHRvbTogNDBweDsgfVxuICAgICNwYWdlLXByb2R1Y3RzLWFkdmlzb3J5IC5jYWxsLXRvLWFjdGlvbiBoZ3JvdXAgaDMge1xuICAgICAgZm9udC1zaXplOiAyOHB4O1xuICAgICAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICAgIGxldHRlci1zcGFjaW5nOiAtMC4wMmVtO1xuICAgICAgY29sb3I6ICM2MTZFN0U7XG4gICAgICBtYXJnaW4tYm90dG9tOiA0cHg7IH1cbiAgICAgICNwYWdlLXByb2R1Y3RzLWFkdmlzb3J5IC5jYWxsLXRvLWFjdGlvbiBoZ3JvdXAgaDMgZW0ge1xuICAgICAgICBmb250LXN0eWxlOiBub3JtYWw7XG4gICAgICAgIGNvbG9yOiAjMUEyMzJGOyB9XG4gICAgI3BhZ2UtcHJvZHVjdHMtYWR2aXNvcnkgLmNhbGwtdG8tYWN0aW9uIGhncm91cCBwIHtcbiAgICAgIGxpbmUtaGVpZ2h0OiAzMnB4O1xuICAgICAgZm9udC1zaXplOiAxOHB4O1xuICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgICAgbGV0dGVyLXNwYWNpbmc6IC0wLjAxZW07XG4gICAgICBjb2xvcjogIzVCNzA4QjsgfVxuICAgICAgI3BhZ2UtcHJvZHVjdHMtYWR2aXNvcnkgLmNhbGwtdG8tYWN0aW9uIGhncm91cCBwIGIge1xuICAgICAgICBmb250LXdlaWdodDogNTAwOyB9XG4gIEBtZWRpYSAobWF4LXdpZHRoOiA3NjhweCkge1xuICAgICNwYWdlLXByb2R1Y3RzLWFkdmlzb3J5IC5jYWxsLXRvLWFjdGlvbiB7XG4gICAgICBwYWRkaW5nLXRvcDogODBweDsgfSB9XG4iXX0= */\n"
  },
  {
    "path": "content/css/pages/products/appflow.css",
    "content": "#page-products {\n  background-color: #fff;\n  height: auto !important;\n  min-height: auto; }\n  #page-products .pre-header {\n    margin-bottom: 0px; }\n  #page-products .cta,\n  #page-products .pro-nav,\n  #page-products .pro-video,\n  #page-products .sub-header,\n  #page-products main {\n    font-family: \"Eina\", \"Helvetica Neue\", Helvetica, sans-serif; }\n  #page-products .sub-header > .container {\n    -ms-flex-align: center;\n        align-items: center; }\n    #page-products .sub-header > .container:before {\n      border-top-color: rgba(255, 255, 255, 0.1); }\n  #page-products > .cta {\n    position: relative;\n    background-image: linear-gradient(90deg, #6521fc 0%, #389fff 100%);\n    margin-top: -140px;\n    padding-top: 140px; }\n    #page-products > .cta .cta__background {\n      content: '';\n      background-position: center center;\n      background-size: cover;\n      display: block;\n      width: 100%;\n      height: 100%;\n      position: absolute;\n      z-index: 0;\n      top: -4px;\n      left: 0;\n      background-image: linear-gradient(90deg, #6030fc 0%, #5fa2fe 100%);\n      background-size: cover;\n      opacity: 0.5;\n      overflow: hidden; }\n      #page-products > .cta .cta__background > div {\n        width: 100%;\n        height: 100%;\n        position: absolute;\n        background-image: linear-gradient(90deg, #fff 0%, rgba(255, 255, 255, 0) 75%);\n        -webkit-transform: translate(-20px, 0) rotate(-3deg) skew(16deg, 0deg) scale(1, 1.5);\n                transform: translate(-20px, 0) rotate(-3deg) skew(16deg, 0deg) scale(1, 1.5);\n        -webkit-transform-origin: top;\n                transform-origin: top; }\n        #page-products > .cta .cta__background > div:nth-child(1) {\n          opacity: 0.05;\n          top: 75%;\n          left: 0%; }\n        #page-products > .cta .cta__background > div:nth-child(2) {\n          opacity: 0.10;\n          top: 50%;\n          left: 15.3846153846%; }\n        #page-products > .cta .cta__background > div:nth-child(3) {\n          opacity: 0.09;\n          top: 25%;\n          left: 30.7692307692%; }\n        #page-products > .cta .cta__background > div:nth-child(4) {\n          opacity: 0.15;\n          top: 0%;\n          left: 46.1538461538%; }\n        #page-products > .cta .cta__background > div:nth-child(5) {\n          opacity: 0.16;\n          top: -25%;\n          left: 61.5384615385%; }\n        #page-products > .cta .cta__background > div:nth-child(6) {\n          opacity: 0.08;\n          top: -50%;\n          left: 76.9230769231%; }\n        @media (max-width: 768px) {\n          #page-products > .cta .cta__background > div:nth-child(1) {\n            opacity: 0.05;\n            top: 60%;\n            left: 0%; }\n          #page-products > .cta .cta__background > div:nth-child(2) {\n            opacity: 0.10;\n            top: 45%;\n            left: 25%; }\n          #page-products > .cta .cta__background > div:nth-child(3) {\n            opacity: 0.09;\n            top: 30%;\n            left: 50%; }\n          #page-products > .cta .cta__background > div:nth-child(4) {\n            opacity: 0.15;\n            top: 15%;\n            left: 75%; }\n          #page-products > .cta .cta__background > div:nth-child(5) {\n            opacity: 0.16;\n            top: 0%;\n            left: 100%; }\n          #page-products > .cta .cta__background > div:nth-child(6) {\n            opacity: 0.08;\n            top: -15%;\n            left: 125%; } }\n    #page-products > .cta hgroup {\n      text-align: center;\n      position: relative;\n      max-width: 830px;\n      padding-bottom: 376px;\n      padding-top: 54px; }\n      #page-products > .cta hgroup h3 {\n        font-family: \"Roboto Mono\", Menlo, Monaco, Consolas, \"Courier New\", monospace;\n        text-transform: uppercase;\n        letter-spacing: 0.18em;\n        font-size: 12px;\n        line-height: 18px;\n        font-weight: 600;\n        color: #e3e6ff; }\n      #page-products > .cta hgroup h1 {\n        margin-top: 36px;\n        font-size: 56px;\n        line-height: 60px;\n        font-weight: 700;\n        letter-spacing: -.038em;\n        margin-bottom: 264x; }\n      #page-products > .cta hgroup p {\n        letter-spacing: -.03em;\n        max-width: 724px;\n        line-height: 1.8em;\n        margin: 0 auto;\n        font-size: 22px;\n        font-weight: 400;\n        color: #fff;\n        font-family: \"Eina\", \"Helvetica Neue\", Helvetica, sans-serif; }\n      #page-products > .cta hgroup .cta-buttons {\n        margin-top: 30px;\n        padding-left: 24px;\n        padding-right: 24px;\n        color: white;\n        letter-spacing: -.02em; }\n        #page-products > .cta hgroup .cta-buttons > .btn {\n          -ms-flex-align: center;\n              align-items: center;\n          background-color: #7898ff;\n          border-radius: 2em;\n          display: -ms-inline-flexbox;\n          display: inline-flex;\n          font-size: 15px;\n          font-weight: 700;\n          text-transform: uppercase;\n          letter-spacing: 0.10em;\n          padding: 14px 26px; }\n          #page-products > .cta hgroup .cta-buttons > .btn:not(:hover) {\n            box-shadow: none; }\n        #page-products > .cta hgroup .cta-buttons > .btn--primary {\n          background-color: #fff;\n          color: #4a68ff; }\n          #page-products > .cta hgroup .cta-buttons > .btn--primary:after {\n            transition: -webkit-transform 0.3s;\n            transition: transform 0.3s;\n            transition: transform 0.3s, -webkit-transform 0.3s;\n            content: '\\f287';\n            font-family: 'Ionicons';\n            font-size: 15px;\n            margin-left: 8px; }\n          #page-products > .cta hgroup .cta-buttons > .btn--primary:hover:after {\n            -webkit-transform: translateX(2px);\n                    transform: translateX(2px); }\n        #page-products > .cta hgroup .cta-buttons .sales {\n          color: rgba(255, 255, 255, 0.5);\n          margin-top: 6px;\n          display: inline-block;\n          text-decoration: underline;\n          transition: .2s color; }\n          #page-products > .cta hgroup .cta-buttons .sales:hover {\n            color: rgba(255, 255, 255, 0.8); }\n      @media (max-width: 768px) {\n        #page-products > .cta hgroup {\n          padding-bottom: 140px; } }\n      @media (max-width: 480px) {\n        #page-products > .cta hgroup {\n          padding-top: 14px; }\n          #page-products > .cta hgroup h1 {\n            font-size: 40px;\n            line-height: 46px; }\n          #page-products > .cta hgroup h3 {\n            max-width: 246px;\n            margin-left: auto;\n            margin-right: auto; }\n          #page-products > .cta hgroup p {\n            font-size: 18px;\n            line-height: 1.6em; }\n          #page-products > .cta hgroup .btn {\n            width: 100%;\n            margin-right: 0;\n            -ms-flex-pack: center;\n                justify-content: center;\n            margin-bottom: 8px; } }\n      #page-products > .cta hgroup h3,\n      #page-products > .cta hgroup h1,\n      #page-products > .cta hgroup p,\n      #page-products > .cta hgroup .cta-buttons .btn {\n        -webkit-animation: 1s fadeInUp forwards;\n                animation: 1s fadeInUp forwards;\n        opacity: 0; }\n      #page-products > .cta hgroup h3 {\n        -webkit-animation-delay: .4s;\n                animation-delay: .4s; }\n      #page-products > .cta hgroup h1 {\n        -webkit-animation-delay: .6s;\n                animation-delay: .6s; }\n      #page-products > .cta hgroup p {\n        -webkit-animation-delay: .9s;\n                animation-delay: .9s; }\n      #page-products > .cta hgroup .cta-buttons .btn {\n        -webkit-animation-delay: 1.1s;\n                animation-delay: 1.1s; }\n      #page-products > .cta hgroup .cta-buttons .btn:last-child {\n        -webkit-animation-delay: 1.2s;\n                animation-delay: 1.2s; }\n  #page-products ionic-appflow-activator {\n    position: -webkit-sticky;\n    position: sticky;\n    top: -247px;\n    z-index: 1000;\n    display: -ms-flexbox;\n    display: flex;\n    -ms-flex-direction: column;\n        flex-direction: column;\n    -ms-flex-align: center;\n        align-items: center;\n    width: 100%;\n    background: white; }\n    #page-products ionic-appflow-activator .app-screenshot {\n      position: relative;\n      background: white;\n      height: 507px;\n      width: 960px;\n      margin-top: -300px;\n      border-radius: 12px;\n      opacity: 0;\n      -webkit-animation: fadeIn 1s 1.8s forwards;\n              animation: fadeIn 1s 1.8s forwards; }\n      #page-products ionic-appflow-activator .app-screenshot img {\n        width: 100%;\n        border-radius: 12px;\n        box-shadow: 0 8px 16px rgba(0, 14, 41, 0.08), 0 30px 60px rgba(0, 11, 34, 0.15); }\n      @media (max-width: 992px) {\n        #page-products ionic-appflow-activator .app-screenshot {\n          height: 338px;\n          width: 640px; } }\n      @media (max-width: 768px) {\n        #page-products ionic-appflow-activator .app-screenshot {\n          height: 169px;\n          width: 320px;\n          margin-top: -84px; } }\n    @media (max-width: 992px) {\n      #page-products ionic-appflow-activator {\n        top: -84px; } }\n    @media (max-width: 768px) {\n      #page-products ionic-appflow-activator {\n        position: relative;\n        z-index: 1;\n        top: 0; } }\n  #page-products .customer-logos {\n    padding: 0;\n    width: 100%;\n    max-width: 1024px;\n    margin: 64px auto 0;\n    display: -ms-flexbox;\n    display: flex;\n    -ms-flex-wrap: wrap;\n        flex-wrap: wrap;\n    -ms-flex-align: center;\n        align-items: center;\n    -ms-flex-pack: justify;\n        justify-content: space-between; }\n    #page-products .customer-logos [class^=\"customer-logo\"] {\n      background-image: url(\"/img/pro/pro-customer-sprite.png\");\n      background-repeat: no-repeat;\n      background-size: 121px 256px;\n      margin: 34px 42px; }\n    @media (max-width: 991px) {\n      #page-products .customer-logos {\n        -ms-flex-pack: center;\n            justify-content: center; }\n        #page-products .customer-logos [class^=\"customer-logo\"] {\n          margin: 22px 34px; } }\n    @media (max-width: 768px) {\n      #page-products .customer-logos {\n        padding: 8px; }\n        #page-products .customer-logos [class^=\"customer-logo\"] {\n          margin: 16px 18px; } }\n    #page-products .customer-logos .customer-logo--lendingclub {\n      width: 121px;\n      height: 18px;\n      background-position: 0 0; }\n    #page-products .customer-logos .customer-logo--mcdonalds {\n      background-position: 0 -19px;\n      width: 24px;\n      height: 20px; }\n    #page-products .customer-logos .customer-logo--study {\n      background-position: 0 -40px;\n      width: 118px;\n      height: 18px; }\n    #page-products .customer-logos .customer-logo--cat {\n      background-position: 0 -59px;\n      width: 34px;\n      height: 20px; }\n    #page-products .customer-logos .customer-logo--ge {\n      background-position: 0 -80px;\n      width: 24px;\n      height: 24px; }\n    #page-products .customer-logos .customer-logo--comcast {\n      background-position: 0 -105px;\n      width: 73px;\n      height: 20px; }\n    #page-products .customer-logos .customer-logo--amtrak {\n      background-position: 0 -126px;\n      width: 47px;\n      height: 20px; }\n    #page-products .customer-logos .customer-logo--airbus {\n      background-position: 0 -147px;\n      width: 107px;\n      height: 20px; }\n    #page-products .customer-logos .customer-logo--aaa {\n      background-position: 0 -168px;\n      width: 45px;\n      height: 27px; }\n    #page-products .customer-logos .customer-logo--deloitte {\n      background-position: 0 -195px;\n      width: 87px;\n      height: 16px; }\n    #page-products .customer-logos .customer-logo--usaa {\n      background-position: 0 -212px;\n      width: 21px;\n      height: 24px; }\n    #page-products .customer-logos .customer-logo--ing {\n      background-position: 0 -237px;\n      width: 73px;\n      height: 19px; }\n  #page-products .pro-video {\n    -ms-flex-align: center;\n        align-items: center;\n    display: -ms-flexbox;\n    display: flex;\n    -ms-flex-pack: center;\n        justify-content: center;\n    position: relative;\n    z-index: 1; }\n    #page-products .pro-video:before {\n      content: \"\";\n      display: block;\n      height: 50%;\n      left: 0;\n      position: absolute;\n      top: 0;\n      width: 100%;\n      z-index: 1; }\n    #page-products .pro-video .video-player {\n      max-width: 900px;\n      width: 100%;\n      position: relative;\n      z-index: 2; }\n      #page-products .pro-video .video-player:hover {\n        cursor: pointer; }\n      #page-products .pro-video .video-player:not(.is-playing):hover .video-player-frame {\n        -webkit-transform: scale(0.99);\n                transform: scale(0.99); }\n      #page-products .pro-video .video-player:not(.is-playing):hover .video-player-button {\n        -webkit-transform: translate(-50%, -50%) scale(1.05);\n                transform: translate(-50%, -50%) scale(1.05); }\n      #page-products .pro-video .video-player.is-ready .video-player-button {\n        display: block; }\n      #page-products .pro-video .video-player.is-playing .video-player-button {\n        display: none; }\n    #page-products .pro-video .video-player-button {\n      display: none;\n      left: 50%;\n      position: absolute;\n      top: 50%;\n      -webkit-transform: translate(-50%, -50%) scale(1);\n              transform: translate(-50%, -50%) scale(1);\n      transition: -webkit-transform 400ms cubic-bezier(0.175, 0.885, 0.32, 1.275);\n      transition: transform 400ms cubic-bezier(0.175, 0.885, 0.32, 1.275);\n      transition: transform 400ms cubic-bezier(0.175, 0.885, 0.32, 1.275), -webkit-transform 400ms cubic-bezier(0.175, 0.885, 0.32, 1.275);\n      width: 80px;\n      z-index: 1; }\n    #page-products .pro-video .video-player-frame {\n      background-image: url(\"/img/pro/pro-dash-video-screenshot.png\");\n      background-position: center center;\n      background-repeat: no-repeat;\n      background-size: contain;\n      border-radius: 8px;\n      height: 0;\n      overflow: hidden;\n      padding-bottom: 64.67%;\n      position: relative;\n      -webkit-transform: scale(1);\n              transform: scale(1);\n      transition: -webkit-transform 400ms cubic-bezier(0.19, 1, 0.22, 1);\n      transition: transform 400ms cubic-bezier(0.19, 1, 0.22, 1);\n      transition: transform 400ms cubic-bezier(0.19, 1, 0.22, 1), -webkit-transform 400ms cubic-bezier(0.19, 1, 0.22, 1); }\n      #page-products .pro-video .video-player-frame > iframe {\n        height: 100%;\n        left: 0;\n        position: absolute;\n        top: 0;\n        width: 100%; }\n  #page-products .pro-benefits {\n    padding-left: 60px; }\n    #page-products .pro-benefits ul {\n      list-style-type: none;\n      margin: 0;\n      padding: 0; }\n    #page-products .pro-benefits li {\n      position: relative;\n      padding-left: 40px; }\n      #page-products .pro-benefits li + li {\n        margin-top: 22px; }\n      #page-products .pro-benefits li::before {\n        display: block;\n        content: '';\n        width: 24px;\n        height: 24px;\n        background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADEAAAAwCAYAAAC4wJK5AAAD/ElEQVRogc3a24tVZRzG8c9ac9jOOOjIMGoMSXQxRBc16UWS4YVikBKKUGTEUF35BwjhX5BCF0EXRhcVU0QUCBYR5AESJIkwu4kYL4JA85A56dC4Z2xWF+8a3TOzD2vtw5oeWOzN3uv9/Z4v73G974qSJHHwY+1QH7ZhK0bTaxAD6f/TmMJkep3HOcy0mri7xfJ92Itx7EApQ5mnK76XcQYTOKFJoGYhBnEQhzDUZAwC9PPpdRNv4z2hxjIrzpk0wutCc3hLawBLNZTGnExzRFkL5oHYiJP4AMN53OXUcJrjZJqzobJCbMdF7GzOV1Pamebc3ujG+Oc/Ggbbj2+xoWVb+bUhzb2/3k2NamI/vpBt1OmUSqmHmiD1ILbj0wb3FKVY8FK1adUyuBGfW9kaWKqS4GlZZ68GEeETK9MHGmmD4G3R8FsN4jXFjkJ5tVPweF9LIQZxtCg3Leio4BXLIQ7q7ETWLg0LXrEYok9YC62IhtewOt8wckjwvAhir/auhTJrZB37trB3Sy6QIcHzIojxNnvLpJF17B6ju4u1/ex5ilL2tfU4DyD6hOeBQlUJsKD+XnqzQ+xAXwxx5FkFT2zVAGZm+fICd+5mDlPCtlATkWfa7LGu6gH8NZ073NYYIh5rm8MG2jjYVgAYjREl4aG+41q/hj3tBWABImJd6xbra/0aXti8uNO2AQAGQ00kVuct2V8KE1QWdRAABkJNRNkfygkT0r4t4RppUIcdBkA6T0RR9v2evt4ws67tD21791htkCIAMB0jiSN3spboiuiq6Ji1QAoCgKkYSXfst6wlpsuc+DF8LmgpSIEAMBkj6epyKU+p2zO1QZ7YVCgACxCrenyft2QtkG2jhQLA+RgeXe9MFJnLW7oaSKXuznUcoIxzMWx+xFRvtx+aiVILZPYeX//UUQDCjvpMDMdO+bfUbaLZSPdB0tVneY6vLnD9dluM1tMERBevJI6d4vERa3+94vf5RMZ5eLlKPWwa4vIt/qnRxNqom3jYQk3AL5f9XerxbitRy3NculoIAOEsY4Ylux0Dq7wTR24VYqE13RAOY7AE4sZtf3Z3OVy4pfx6U8Vp0rIdwNl73o8j3xVqKZ9O46PKH6ptYybziZdxvQhHOXUNryKp/LHWrvhVvChMJv8XlfGS4G2R6p09nMUrmO+QqTyaF7ycrfZnowOU41a+Rsqph+O1bshyCnQczwntsWhdS3PXBCD7UdZZjAkjQ1E6neas2oQqFT/5UOagV7ELbwiTTad0I82xS5VOXE15DxUTfCjsUx0W1i/t0s005miaI6l/+wM1ezI6hSPCAuwAvtFc5y+nZQ+ksY7I+V4Hrb9lM4PP0mvFXhX6D3mVKTX2fENsAAAAAElFTkSuQmCC\");\n        background-repeat: no-repeat;\n        background-size: 100%;\n        position: absolute;\n        top: 0;\n        left: 0; }\n      #page-products .pro-benefits li h4 {\n        margin: 0;\n        font-weight: 600;\n        font-size: 16px;\n        line-height: 20px; }\n      #page-products .pro-benefits li p {\n        color: #545c6a;\n        font-size: 15px;\n        line-height: 24px; }\n  #page-products .hero {\n    background: no-repeat center center;\n    background-size: cover;\n    overflow: hidden;\n    padding-top: 0;\n    padding-bottom: 0; }\n    #page-products .hero .content {\n      width: 39%;\n      text-align: left;\n      padding-top: 200px;\n      padding-bottom: 220px;\n      color: #070f1a;\n      min-height: 724px;\n      position: relative; }\n      #page-products .hero .content.dark {\n        color: rgba(255, 255, 255, 0.8); }\n        #page-products .hero .content.dark h2,\n        #page-products .hero .content.dark .hero__cta {\n          color: #151d2b; }\n        #page-products .hero .content.dark p {\n          color: #596a89; }\n      #page-products .hero .content h2 {\n        font-size: 36px;\n        letter-spacing: -0.03em;\n        font-weight: 600;\n        margin-bottom: 12px; }\n      #page-products .hero .content p {\n        font-size: 20px;\n        line-height: 32px;\n        font-family: \"Eina\", \"Helvetica Neue\", Helvetica, sans-serif;\n        font-weight: 400; }\n      #page-products .hero .content h4 {\n        font-family: \"Roboto Mono\", Menlo, Monaco, Consolas, \"Courier New\", monospace;\n        padding-top: 100px;\n        position: relative;\n        color: #808fa7; }\n        #page-products .hero .content h4::before {\n          background: url(\"/img/pro/product-header-icons.png\") 0 0 no-repeat;\n          background-size: 64px;\n          width: 64px;\n          height: 64px;\n          content: '';\n          position: absolute;\n          top: 0; }\n    #page-products .hero__cta-bar {\n      display: -ms-flexbox;\n      display: flex;\n      -ms-flex-align: center;\n          align-items: center; }\n      #page-products .hero__cta-bar a + a {\n        margin-left: 20px; }\n    #page-products .hero__cta-bar-secondary {\n      margin-left: 30px; }\n    @media (max-width: 767px) {\n      #page-products .hero__cta-bar {\n        -ms-flex-direction: column;\n            flex-direction: column; }\n      #page-products .hero__cta-bar-secondary {\n        margin-left: 0;\n        margin-top: 24px; } }\n    #page-products .hero__cta {\n      border-bottom-style: solid;\n      border-bottom-width: 2px;\n      color: inherit;\n      font-size: 18px;\n      font-weight: 700;\n      padding-bottom: 4px;\n      transition: border-bottom-color 100ms ease-in-out; }\n      #page-products .hero__cta:after {\n        content: '\\f287';\n        font-family: 'Ionicons';\n        font-size: 16px;\n        margin-left: 5px; }\n      #page-products .hero__cta:hover {\n        border-bottom-color: transparent; }\n    #page-products .hero__icon-link {\n      transition: opacity 0.3s;\n      display: inline-block;\n      opacity: 0.7; }\n      #page-products .hero__icon-link i {\n        font-size: 30px;\n        color: #fff; }\n      #page-products .hero__icon-link:hover {\n        opacity: 1; }\n    #page-products .hero .container {\n      position: relative; }\n      #page-products .hero .container::before {\n        background-repeat: no-repeat;\n        background-position: right 0;\n        background-size: contain;\n        top: 0;\n        right: 0;\n        left: 0;\n        bottom: 0;\n        content: '';\n        display: block;\n        position: absolute;\n        opacity: 0;\n        transition: .2s opacity; }\n    #page-products .hero.active .container::before {\n      opacity: 1; }\n    #page-products .hero h4 {\n      font-size: 11px;\n      font-weight: 700;\n      letter-spacing: 0.2em;\n      color: #272a2f;\n      text-transform: uppercase;\n      margin-bottom: 30px; }\n    #page-products .hero h3 {\n      font-size: 36px;\n      font-weight: 700;\n      letter-spacing: -.02em;\n      margin-bottom: 30px; }\n    #page-products .hero h2 {\n      color: #272a2f;\n      font-size: 36px;\n      margin-bottom: 23px;\n      margin-top: 14px;\n      font-weight: 700;\n      letter-spacing: -.015em; }\n    #page-products .hero p {\n      font-size: 16px;\n      font-weight: 600;\n      letter-spacing: -.026em;\n      line-height: 1.8em;\n      margin-bottom: 30px;\n      color: #5e6777; }\n      #page-products .hero p strong {\n        color: #272a2f;\n        font-weight: 700; }\n      #page-products .hero p a:hover {\n        color: #4a8bfc; }\n    #page-products .hero .btn {\n      padding: 13px 15px;\n      font-size: 14px;\n      font-weight: 600; }\n      #page-products .hero .btn strong {\n        font-weight: 700; }\n      #page-products .hero .btn::after {\n        font-family: 'Ionicons';\n        content: '\\f287';\n        font-size: 15px;\n        line-height: 10px;\n        vertical-align: -1px;\n        margin-left: 8px;\n        font-weight: 600;\n        display: inline-block;\n        transition: .2s transform; }\n      #page-products .hero .btn:hover::after {\n        -webkit-transform: translate3d(2px, 0, 0);\n                transform: translate3d(2px, 0, 0); }\n    @media (max-width: 480px) {\n      #page-products .hero .content h2 {\n        font-size: 30px; }\n      #page-products .hero .content p {\n        font-size: 18px;\n        line-height: 1.6em; } }\n  #page-products #overview {\n    background-color: #fff;\n    color: #272a2f;\n    padding-bottom: 180px;\n    padding-top: 140px; }\n    #page-products #overview hgroup {\n      max-width: 740px;\n      margin: 0 auto 68px; }\n      #page-products #overview hgroup h3 {\n        font-weight: 600;\n        color: #070f1a;\n        margin-bottom: 14px; }\n      #page-products #overview hgroup p {\n        font-size: 22px;\n        line-height: 36px;\n        color: #43546f;\n        font-weight: 400; }\n    #page-products #overview .features {\n      padding: 0;\n      list-style: none;\n      display: -ms-flexbox;\n      display: flex;\n      -ms-flex-pack: justify;\n          justify-content: space-between;\n      margin: 0 auto; }\n      #page-products #overview .features h4 {\n        font-size: 20px;\n        text-transform: none;\n        letter-spacing: -.02em;\n        margin-top: 5px;\n        margin-bottom: 13px;\n        font-weight: 600; }\n      #page-products #overview .features p {\n        font-family: \"Inter\", \"Inter UI\", Helvetica, Arial, sans-serif;\n        font-size: 16px;\n        line-height: 28px;\n        color: #687e99;\n        letter-spacing: -.015em;\n        font-weight: 400; }\n    #page-products #overview li {\n      padding-top: 68px;\n      -ms-flex: 0 1 340px;\n          flex: 0 1 340px;\n      position: relative; }\n      #page-products #overview li::before {\n        background: url(\"/img/pro/pro-feature-icons.png\") 0 0 no-repeat;\n        background-size: 48px;\n        height: 48px;\n        width: 48px;\n        content: '';\n        position: absolute;\n        top: 0; }\n      #page-products #overview li.faster::before {\n        background-position: 0 -48px; }\n      #page-products #overview li.happier::before {\n        background-position: 0 -96px; }\n      #page-products #overview li + li {\n        margin-left: 24px; }\n    @media (max-width: 520px) {\n      #page-products #overview .features {\n        display: block; }\n      #page-products #overview li {\n        text-align: center; }\n        #page-products #overview li::before {\n          left: calc( 50% - 24px); }\n        #page-products #overview li + li {\n          margin-left: 0; } }\n    @media (max-width: 768px) {\n      #page-products #overview {\n        padding-bottom: 68px;\n        padding-top: 102px; } }\n    @media (max-width: 480px) {\n      #page-products #overview {\n        padding-bottom: 48px;\n        padding-top: 72px; }\n        #page-products #overview hgroup {\n          margin-bottom: 42px; }\n          #page-products #overview hgroup h3 {\n            font-size: 30px; }\n          #page-products #overview hgroup p {\n            font-size: 18px;\n            line-height: 1.6em; } }\n  #page-products #updates {\n    background-image: linear-gradient(0deg, white 0%, #f6f8fb 100%);\n    background-size: 100%; }\n    #page-products #updates h4::before {\n      background-position: 0 0; }\n    #page-products #updates .content {\n      padding-top: 179px;\n      position: relative;\n      z-index: 10; }\n      @media (max-width: 1219px) {\n        #page-products #updates .content {\n          padding-top: 148px; } }\n    #page-products #updates .anim-updates {\n      position: absolute;\n      z-index: 4;\n      top: 0;\n      bottom: 0;\n      left: 50%;\n      -webkit-transform: translateX(-100px);\n              transform: translateX(-100px);\n      display: -ms-flexbox;\n      display: flex;\n      -ms-flex-align: center;\n          align-items: center; }\n    #page-products #updates .anim-updates__root {\n      width: 726px;\n      height: 437px;\n      position: relative; }\n    #page-products #updates .anim-updates__foreground,\n    #page-products #updates .anim-updates__background {\n      width: 100%;\n      height: 100%;\n      position: absolute;\n      top: 0;\n      left: 0; }\n    #page-products #updates .anim-updates__foreground {\n      z-index: 10;\n      -webkit-transform: translateZ(1000px);\n              transform: translateZ(1000px); }\n    #page-products #updates .anim-updates__background {\n      z-index: 1;\n      -webkit-transform: translateZ(100px);\n              transform: translateZ(100px); }\n    #page-products #updates .anim-updates__device {\n      width: 726px;\n      height: 437px;\n      background-image: url(\"/img/pro/updates-illustration-device.png\");\n      background-repeat: no-repeat;\n      background-size: 726px 437px;\n      position: absolute;\n      top: 0;\n      left: 0;\n      z-index: 5;\n      -webkit-transform: translateZ(500px);\n              transform: translateZ(500px); }\n    #page-products #updates .anim-updates__screen {\n      width: 308px;\n      height: 554px;\n      background: #5d37ff;\n      position: absolute;\n      top: 28px;\n      left: 406px;\n      -webkit-transform-origin: top left;\n              transform-origin: top left;\n      -webkit-transform: rotateX(60deg) rotateY(0.7deg) rotateZ(36.5deg) skew(2deg, -1.5deg);\n              transform: rotateX(60deg) rotateY(0.7deg) rotateZ(36.5deg) skew(2deg, -1.5deg); }\n    @media (max-width: 991px) {\n      #page-products #updates .anim-updates {\n        display: none; }\n      #page-products #updates .content {\n        min-height: 0;\n        padding-top: 64px;\n        padding-bottom: 64px;\n        width: 100%;\n        text-align: center; }\n        #page-products #updates .content h4::before {\n          left: calc(50% - 32px); } }\n  #page-products #build {\n    background-image: linear-gradient(0deg, white 0%, #f6f8fb 100%);\n    padding: 100px 0; }\n    #page-products #build h4::before {\n      background-position: 0 -64px; }\n    #page-products #build .anim-build {\n      position: absolute;\n      left: 0;\n      top: 0;\n      bottom: 0;\n      width: 39%;\n      display: -ms-flexbox;\n      display: flex;\n      -ms-flex-pack: center;\n          justify-content: center;\n      -ms-flex-align: center;\n          align-items: center; }\n    #page-products #build .anim-build__text {\n      fill: #5d37ff;\n      text-transform: uppercase;\n      font-size: 12px;\n      font-weight: 700;\n      letter-spacing: 0.05em; }\n    #page-products #build .content {\n      padding-top: 140px; }\n    @media (max-width: 991px) {\n      #page-products #build .container::before {\n        background-size: 40%;\n        top: 128px;\n        bottom: 128px; }\n      #page-products #build .content {\n        padding-top: 64px;\n        min-height: 0;\n        width: 40%; } }\n    @media (max-width: 767px) {\n      #page-products #build {\n        background-image: none;\n        padding: 0; }\n        #page-products #build .anim-build {\n          display: none; }\n        #page-products #build .content {\n          min-height: 0;\n          padding-top: 64px;\n          padding-bottom: 64px;\n          width: 100%;\n          text-align: center; }\n          #page-products #build .content h4::before {\n            left: calc(50% - 32px); } }\n  #page-products #reporting {\n    background: #081b17;\n    padding: 50px 0; }\n    #page-products #reporting h4,\n    #page-products #reporting .btn {\n      color: #607d79; }\n      #page-products #reporting h4::before,\n      #page-products #reporting .btn::before {\n        background-position: 0 -256px; }\n    #page-products #reporting .anim-reporting {\n      width: 1084px;\n      height: 100%;\n      display: -ms-flexbox;\n      display: flex;\n      overflow: hidden;\n      position: absolute;\n      top: 0;\n      left: 50%;\n      -webkit-transform: translateX(-240px);\n              transform: translateX(-240px);\n      bottom: 0;\n      z-index: 1; }\n    #page-products #reporting #anim-reporting__svg {\n      width: 100%;\n      height: 100%; }\n    #page-products #reporting .anim-reporting__bg {\n      fill: #0d2b25; }\n    #page-products #reporting .anim-reporting__scan {\n      -webkit-animation-name: cycle-fade;\n              animation-name: cycle-fade;\n      -webkit-animation-duration: 2s;\n              animation-duration: 2s;\n      -webkit-animation-direction: alternate;\n              animation-direction: alternate;\n      -webkit-animation-iteration-count: infinite;\n              animation-iteration-count: infinite;\n      -webkit-animation-timing-function: ease;\n              animation-timing-function: ease; }\n\n@-webkit-keyframes cycle-fade {\n  from {\n    opacity: 0.4; }\n  to {\n    opacity: 1; } }\n\n@keyframes cycle-fade {\n  from {\n    opacity: 0.4; }\n  to {\n    opacity: 1; } }\n    #page-products #reporting .anim-reporting__bug {\n      fill: #ff3267;\n      -webkit-transform-origin: center center;\n              transform-origin: center center; }\n    #page-products #reporting .content {\n      padding-top: 172px;\n      width: 40%;\n      z-index: 5; }\n    @media (max-width: 991px) {\n      #page-products #reporting .content {\n        min-height: 0;\n        padding-top: 64px;\n        width: 100%; }\n      #page-products #reporting .anim-reporting {\n        opacity: 0.7; }\n      #page-products #reporting .anim-reporting__clipped {\n        -webkit-transform: scale(0.8);\n                transform: scale(0.8); } }\n    @media (max-width: 991px) {\n      #page-products #reporting {\n        padding: 0; }\n        #page-products #reporting .anim-reporting {\n          display: none; }\n        #page-products #reporting .content {\n          min-height: 0;\n          padding-top: 64px;\n          padding-bottom: 64px;\n          width: 100%;\n          text-align: center; }\n          #page-products #reporting .content h4::before {\n            left: calc(50% - 32px); } }\n  #page-products #push {\n    background: #ffbc2a no-repeat center bottom;\n    background-image: linear-gradient(to right, #ffce39 0%, #ffad20 100%);\n    background-size: 100%; }\n    #page-products #push h4 {\n      color: #d26d00; }\n      #page-products #push h4::before {\n        background-position: 0 -320px; }\n    #page-products #push .container::before {\n      background-image: url(\"/img/pro/product-push-img.png\");\n      background-position: left 0;\n      top: 80px;\n      bottom: 80px; }\n      @media (max-width: 1219px) {\n        #page-products #push .container::before {\n          top: 130px;\n          bottom: 130px; } }\n    #page-products #push .content {\n      padding-top: 172px;\n      width: 35%; }\n    @media (max-width: 991px) {\n      #page-products #push .container::before {\n        display: none; }\n      #page-products #push .content {\n        min-height: 0;\n        padding-top: 64px;\n        padding-bottom: 64px;\n        width: 100%;\n        text-align: center; }\n        #page-products #push .content h4::before {\n          left: calc(50% - 32px); } }\n  #page-products #automate {\n    background-color: #f9fafc;\n    background-image: linear-gradient(0deg, white 0%, #f6f8fb 100%);\n    background-size: 100%;\n    position: relative;\n    padding-bottom: 160px; }\n    #page-products #automate h4::before {\n      background-position: 0 -128px; }\n    #page-products #automate .anim-automate {\n      position: absolute;\n      top: 220px;\n      left: 50%;\n      margin-left: -400px; }\n      #page-products #automate .anim-automate svg .connector {\n        opacity: 0;\n        stroke-dasharray: 80px; }\n      #page-products #automate .anim-automate svg rect.four {\n        opacity: 0.6; }\n      #page-products #automate .anim-automate svg #top,\n      #page-products #automate .anim-automate svg #bottom {\n        position: relative; }\n      #page-products #automate .anim-automate svg #bottom {\n        z-index: 1; }\n      #page-products #automate .anim-automate svg #top {\n        z-index: 2; }\n      #page-products #automate .anim-automate svg > g {\n        -webkit-transform: translateY(50px);\n                transform: translateY(50px); }\n    @media (max-width: 1219px) {\n      #page-products #automate {\n        padding-bottom: 390px; }\n        #page-products #automate .content {\n          width: 100%;\n          max-width: 500px;\n          text-align: center;\n          margin-left: auto;\n          margin-right: auto; }\n        #page-products #automate .content h4::before {\n          left: calc(50% - 32px); }\n        #page-products #automate .anim-automate {\n          -webkit-transform: scale(0.8);\n                  transform: scale(0.8);\n          top: 470px;\n          margin-left: -670px; } }\n    @media (max-width: 768px) {\n      #page-products #automate {\n        padding: 0; }\n        #page-products #automate .anim-automate {\n          display: none; }\n        #page-products #automate .content {\n          min-height: 0;\n          padding-top: 64px;\n          padding-bottom: 64px;\n          width: 100%;\n          text-align: center; }\n          #page-products #automate .content h4::before {\n            left: calc(50% - 32px); } }\n    #page-products #automate .anim-automate_ui {\n      position: absolute;\n      width: 100%;\n      height: 100%; }\n      #page-products #automate .anim-automate_ui > div {\n        position: absolute;\n        -webkit-transform: translate(-50%, -50%);\n                transform: translate(-50%, -50%);\n        max-width: 114px;\n        text-align: center;\n        display: -ms-flexbox;\n        display: flex;\n        -ms-flex-direction: column;\n            flex-direction: column;\n        -ms-flex-align: center;\n            align-items: center;\n        opacity: 0; }\n        #page-products #automate .anim-automate_ui > div p {\n          font-family: \"Inter\", \"Inter UI\", Helvetica, Arial, sans-serif;\n          margin: 0;\n          color: #fff;\n          font-size: 13px;\n          line-height: 17px; }\n        #page-products #automate .anim-automate_ui > div span {\n          display: block;\n          opacity: 0.6;\n          font-family: 12px; }\n        #page-products #automate .anim-automate_ui > div:before {\n          content: '';\n          display: block;\n          width: 20px;\n          height: 50px;\n          margin-bottom: 12px;\n          background-repeat: no-repeat;\n          background-size: 100%; }\n      #page-products #automate .anim-automate_ui .master:before {\n        background-image: url(\"/img/pro/pro-automate-animation/master.png\");\n        width: 100px;\n        height: 30px;\n        background-size: 100px 30px; }\n      #page-products #automate .anim-automate_ui .staging:before {\n        background-image: url(\"/img/pro/pro-automate-animation/staging.png\");\n        width: 110px;\n        height: 30px;\n        background-size: 110px 30px; }\n      #page-products #automate .anim-automate_ui .qa:before {\n        background-image: url(\"/img/pro/pro-automate-animation/qa.png\");\n        width: 61px;\n        height: 30px;\n        background-size: 61px 30px; }\n      #page-products #automate .anim-automate_ui .android:before,\n      #page-products #automate .anim-automate_ui .ios:before,\n      #page-products #automate .anim-automate_ui .web:before {\n        width: 62px;\n        height: 62px;\n        background-size: 62px 62px; }\n      #page-products #automate .anim-automate_ui .android:before {\n        background-image: url(\"/img/pro/pro-automate-animation/android.png\"); }\n      #page-products #automate .anim-automate_ui .ios:before {\n        background-image: url(\"/img/pro/pro-automate-animation/ios.png\"); }\n      #page-products #automate .anim-automate_ui .web:before {\n        background-image: url(\"/img/pro/pro-automate-animation/js.png\"); }\n      #page-products #automate .anim-automate_ui .testflight:before {\n        background-image: url(\"/img/pro/pro-automate-animation/testflight.png\");\n        width: 53px;\n        height: 53px;\n        background-size: 53px 53px; }\n      #page-products #automate .anim-automate_ui .playstore:before {\n        background-image: url(\"/img/pro/pro-automate-animation/playstore.png\");\n        width: 50px;\n        height: 55px;\n        background-size: 50px 55px; }\n      #page-products #automate .anim-automate_ui .webhook:before {\n        background-image: url(\"/img/pro/pro-automate-animation/webhook.png\");\n        width: 58px;\n        height: 54px;\n        background-size: 58px 54px; }\n      #page-products #automate .anim-automate_ui .master,\n      #page-products #automate .anim-automate_ui .staging,\n      #page-products #automate .anim-automate_ui .qa {\n        left: 50%;\n        top: 195px; }\n      #page-products #automate .anim-automate_ui .android,\n      #page-products #automate .anim-automate_ui .ios,\n      #page-products #automate .anim-automate_ui .web {\n        left: 50%;\n        top: 368px; }\n      #page-products #automate .anim-automate_ui .android,\n      #page-products #automate .anim-automate_ui .web {\n        margin-left: 174px; }\n      #page-products #automate .anim-automate_ui .ios {\n        margin-left: -178px; }\n      #page-products #automate .anim-automate_ui .testflight,\n      #page-products #automate .anim-automate_ui .playstore,\n      #page-products #automate .anim-automate_ui .webhook {\n        left: 50%;\n        top: 540px; }\n      #page-products #automate .anim-automate_ui .testflight {\n        margin-left: -352px; }\n      #page-products #automate .anim-automate_ui .playstore {\n        margin-left: 352px; }\n  #page-products .pro-features {\n    padding: 196px 0;\n    background-color: #394072; }\n    #page-products .pro-features hgroup {\n      text-align: center;\n      max-width: 560px;\n      margin-left: auto;\n      margin-right: auto; }\n      #page-products .pro-features hgroup h3 {\n        color: #fff;\n        font-size: 36px;\n        font-weight: 600;\n        line-height: 40px;\n        margin-top: 0; }\n      #page-products .pro-features hgroup p {\n        color: #d7d9eb;\n        font-family: \"Inter\", \"Inter UI\", Helvetica, Arial, sans-serif;\n        font-size: 20px;\n        line-height: 32px; }\n    #page-products .pro-features ul {\n      margin: 0 -24px 0;\n      padding: 0;\n      display: -ms-flexbox;\n      display: flex;\n      -ms-flex-wrap: wrap;\n          flex-wrap: wrap;\n      list-style-type: none; }\n    #page-products .pro-features li {\n      -ms-flex: 0 0 25%;\n          flex: 0 0 25%;\n      margin-top: 86px;\n      padding: 0 24px; }\n      #page-products .pro-features li h5 {\n        color: #fff;\n        font-size: 20px;\n        font-weight: 600;\n        margin-bottom: 18px;\n        margin-top: 0;\n        display: -ms-flexbox;\n        display: flex;\n        -ms-flex-align: center;\n            align-items: center; }\n      #page-products .pro-features li p {\n        color: #b9bcd8;\n        font-family: \"Inter\", \"Inter UI\", Helvetica, Arial, sans-serif;\n        font-size: 16px;\n        line-height: 28px; }\n      #page-products .pro-features li:nth-child(2) {\n        transition-delay: .1s !important; }\n      #page-products .pro-features li:nth-child(3) {\n        transition-delay: .2s !important; }\n      #page-products .pro-features li:nth-child(4) {\n        transition-delay: .3s !important; }\n      #page-products .pro-features li:nth-child(5) {\n        transition-delay: .4s !important; }\n      #page-products .pro-features li:nth-child(6) {\n        transition-delay: .5s !important; }\n      #page-products .pro-features li:nth-child(7) {\n        transition-delay: .6s !important; }\n      #page-products .pro-features li:nth-child(8) {\n        transition-delay: .7s !important; }\n    #page-products .pro-features [class^=\"pro-feature--\"] h5::before {\n      display: block;\n      content: '';\n      width: 24px;\n      height: 24px;\n      background-image: url(\"/img/pro/pro-feature-sprite.png\");\n      background-repeat: no-repeat;\n      background-size: 24px 192px;\n      margin-right: 12px; }\n    #page-products .pro-features .pro-feature--app-dashboard h5::before {\n      background-position: 0 0; }\n    #page-products .pro-features .pro-feature--configurable h5::before {\n      background-position: 0 calc(-1 * 24px); }\n    #page-products .pro-features .pro-feature--clean-builds h5::before {\n      background-position: 0 calc(-2 * 24px); }\n    #page-products .pro-features .pro-feature--mobile-ci-cd h5::before {\n      background-position: 0 calc(-3 * 24px); }\n    #page-products .pro-features .pro-feature--git-integrations h5::before {\n      background-position: 0 calc(-4 * 24px); }\n    #page-products .pro-features .pro-feature--connected-services h5::before {\n      background-position: 0 calc(-5 * 24px); }\n    #page-products .pro-features .pro-feature--live-app-updating h5::before {\n      background-position: 0 calc(-6 * 24px); }\n    #page-products .pro-features .pro-feature--role-based-controls h5::before {\n      background-position: 0 calc(-7 * 24px); }\n    @media (max-width: 1219px) {\n      #page-products .pro-features li {\n        -ms-flex: 0 0 33%;\n            flex: 0 0 33%; } }\n    @media (max-width: 991px) {\n      #page-products .pro-features {\n        padding: 90px 0;\n        text-align: center; }\n        #page-products .pro-features h5 {\n          -ms-flex-pack: center;\n              justify-content: center; }\n        #page-products .pro-features li {\n          -ms-flex: 0 0 50%;\n              flex: 0 0 50%; } }\n    @media (max-width: 767px) {\n      #page-products .pro-features hgroup h3 {\n        font-size: 30px; }\n      #page-products .pro-features li {\n        -ms-flex: 0 0 100%;\n            flex: 0 0 100%;\n        margin-top: 36px; } }\n  #page-products .get-started {\n    background: linear-gradient(45deg, #1b1f3a 0%, #292f52 100%);\n    overflow: auto; }\n    #page-products .get-started .container {\n      -ms-flex-align: center;\n          align-items: center;\n      display: -ms-flexbox;\n      display: flex;\n      margin-bottom: 120px;\n      margin-top: 120px; }\n    #page-products .get-started hgroup {\n      letter-spacing: -.025em;\n      -ms-flex-positive: 1;\n          flex-grow: 1; }\n    #page-products .get-started h2 {\n      color: #e0e3f6;\n      font-size: 28px;\n      line-height: 36px;\n      font-weight: 400;\n      letter-spacing: -0.02em;\n      margin: 0;\n      max-width: 680px; }\n      #page-products .get-started h2 strong {\n        font-weight: 600;\n        color: #fff; }\n    #page-products .get-started h3 {\n      color: #8aa6ff;\n      font-size: 24px;\n      line-height: 36px;\n      font-weight: 400;\n      margin: 0; }\n    #page-products .get-started .btn {\n      font-size: 15px;\n      text-transform: uppercase;\n      letter-spacing: 0.10em;\n      font-weight: 700;\n      border-radius: 100px;\n      background-color: #5fa3ff;\n      padding: 16px 28px 14px; }\n      #page-products .get-started .btn:hover {\n        background-color: #4895fc; }\n    @media (max-width: 991px) {\n      #page-products .get-started .container {\n        display: block;\n        text-align: center; }\n      #page-products .get-started hgroup {\n        padding-bottom: 16px; }\n      #page-products .get-started .btn-group {\n        padding-bottom: 96px; } }\n\n/*# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImFwcGZsb3cuY3NzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0VBQ0UsdUJBQXVCO0VBQ3ZCLHdCQUF3QjtFQUN4QixpQkFBaUIsRUFBRTtFQUNuQjtJQUNFLG1CQUFtQixFQUFFO0VBQ3ZCOzs7OztJQUtFLDZEQUE2RCxFQUFFO0VBQ2pFO0lBQ0UsdUJBQW9CO1FBQXBCLG9CQUFvQixFQUFFO0lBQ3RCO01BQ0UsMkNBQTJDLEVBQUU7RUFDakQ7SUFDRSxtQkFBbUI7SUFDbkIsbUVBQW1FO0lBQ25FLG1CQUFtQjtJQUNuQixtQkFBbUIsRUFBRTtJQUNyQjtNQUNFLFlBQVk7TUFDWixtQ0FBbUM7TUFDbkMsdUJBQXVCO01BQ3ZCLGVBQWU7TUFDZixZQUFZO01BQ1osYUFBYTtNQUNiLG1CQUFtQjtNQUNuQixXQUFXO01BQ1gsVUFBVTtNQUNWLFFBQVE7TUFDUixtRUFBbUU7TUFDbkUsdUJBQXVCO01BQ3ZCLGFBQWE7TUFDYixpQkFBaUIsRUFBRTtNQUNuQjtRQUNFLFlBQVk7UUFDWixhQUFhO1FBQ2IsbUJBQW1CO1FBQ25CLDhFQUE4RTtRQUM5RSxxRkFBNkU7Z0JBQTdFLDZFQUE2RTtRQUM3RSw4QkFBc0I7Z0JBQXRCLHNCQUFzQixFQUFFO1FBQ3hCO1VBQ0UsY0FBYztVQUNkLFNBQVM7VUFDVCxTQUFTLEVBQUU7UUFDYjtVQUNFLGNBQWM7VUFDZCxTQUFTO1VBQ1QscUJBQXFCLEVBQUU7UUFDekI7VUFDRSxjQUFjO1VBQ2QsU0FBUztVQUNULHFCQUFxQixFQUFFO1FBQ3pCO1VBQ0UsY0FBYztVQUNkLFFBQVE7VUFDUixxQkFBcUIsRUFBRTtRQUN6QjtVQUNFLGNBQWM7VUFDZCxVQUFVO1VBQ1YscUJBQXFCLEVBQUU7UUFDekI7VUFDRSxjQUFjO1VBQ2QsVUFBVTtVQUNWLHFCQUFxQixFQUFFO1FBQ3pCO1VBQ0U7WUFDRSxjQUFjO1lBQ2QsU0FBUztZQUNULFNBQVMsRUFBRTtVQUNiO1lBQ0UsY0FBYztZQUNkLFNBQVM7WUFDVCxVQUFVLEVBQUU7VUFDZDtZQUNFLGNBQWM7WUFDZCxTQUFTO1lBQ1QsVUFBVSxFQUFFO1VBQ2Q7WUFDRSxjQUFjO1lBQ2QsU0FBUztZQUNULFVBQVUsRUFBRTtVQUNkO1lBQ0UsY0FBYztZQUNkLFFBQVE7WUFDUixXQUFXLEVBQUU7VUFDZjtZQUNFLGNBQWM7WUFDZCxVQUFVO1lBQ1YsV0FBVyxFQUFFLEVBQUU7SUFDdkI7TUFDRSxtQkFBbUI7TUFDbkIsbUJBQW1CO01BQ25CLGlCQUFpQjtNQUNqQixzQkFBc0I7TUFDdEIsa0JBQWtCLEVBQUU7TUFDcEI7UUFDRSw4RUFBOEU7UUFDOUUsMEJBQTBCO1FBQzFCLHVCQUF1QjtRQUN2QixnQkFBZ0I7UUFDaEIsa0JBQWtCO1FBQ2xCLGlCQUFpQjtRQUNqQixlQUFlLEVBQUU7TUFDbkI7UUFDRSxpQkFBaUI7UUFDakIsZ0JBQWdCO1FBQ2hCLGtCQUFrQjtRQUNsQixpQkFBaUI7UUFDakIsd0JBQXdCO1FBQ3hCLG9CQUFvQixFQUFFO01BQ3hCO1FBQ0UsdUJBQXVCO1FBQ3ZCLGlCQUFpQjtRQUNqQixtQkFBbUI7UUFDbkIsZUFBZTtRQUNmLGdCQUFnQjtRQUNoQixpQkFBaUI7UUFDakIsWUFBWTtRQUNaLDZEQUE2RCxFQUFFO01BQ2pFO1FBQ0UsaUJBQWlCO1FBQ2pCLG1CQUFtQjtRQUNuQixvQkFBb0I7UUFDcEIsYUFBYTtRQUNiLHVCQUF1QixFQUFFO1FBQ3pCO1VBQ0UsdUJBQW9CO2NBQXBCLG9CQUFvQjtVQUNwQiwwQkFBMEI7VUFDMUIsbUJBQW1CO1VBQ25CLDRCQUFxQjtVQUFyQixxQkFBcUI7VUFDckIsZ0JBQWdCO1VBQ2hCLGlCQUFpQjtVQUNqQiwwQkFBMEI7VUFDMUIsdUJBQXVCO1VBQ3ZCLG1CQUFtQixFQUFFO1VBQ3JCO1lBQ0UsaUJBQWlCLEVBQUU7UUFDdkI7VUFDRSx1QkFBdUI7VUFDdkIsZUFBZSxFQUFFO1VBQ2pCO1lBQ0UsbUNBQTJCO1lBQTNCLDJCQUEyQjtZQUEzQixtREFBMkI7WUFDM0IsaUJBQWlCO1lBQ2pCLHdCQUF3QjtZQUN4QixnQkFBZ0I7WUFDaEIsaUJBQWlCLEVBQUU7VUFDckI7WUFDRSxtQ0FBMkI7b0JBQTNCLDJCQUEyQixFQUFFO1FBQ2pDO1VBQ0UsZ0NBQWdDO1VBQ2hDLGdCQUFnQjtVQUNoQixzQkFBc0I7VUFDdEIsMkJBQTJCO1VBQzNCLHNCQUFzQixFQUFFO1VBQ3hCO1lBQ0UsZ0NBQWdDLEVBQUU7TUFDeEM7UUFDRTtVQUNFLHNCQUFzQixFQUFFLEVBQUU7TUFDOUI7UUFDRTtVQUNFLGtCQUFrQixFQUFFO1VBQ3BCO1lBQ0UsZ0JBQWdCO1lBQ2hCLGtCQUFrQixFQUFFO1VBQ3RCO1lBQ0UsaUJBQWlCO1lBQ2pCLGtCQUFrQjtZQUNsQixtQkFBbUIsRUFBRTtVQUN2QjtZQUNFLGdCQUFnQjtZQUNoQixtQkFBbUIsRUFBRTtVQUN2QjtZQUNFLFlBQVk7WUFDWixnQkFBZ0I7WUFDaEIsc0JBQXdCO2dCQUF4Qix3QkFBd0I7WUFDeEIsbUJBQW1CLEVBQUUsRUFBRTtNQUM3Qjs7OztRQUlFLHdDQUFnQztnQkFBaEMsZ0NBQWdDO1FBQ2hDLFdBQVcsRUFBRTtNQUNmO1FBQ0UsNkJBQXFCO2dCQUFyQixxQkFBcUIsRUFBRTtNQUN6QjtRQUNFLDZCQUFxQjtnQkFBckIscUJBQXFCLEVBQUU7TUFDekI7UUFDRSw2QkFBcUI7Z0JBQXJCLHFCQUFxQixFQUFFO01BQ3pCO1FBQ0UsOEJBQXNCO2dCQUF0QixzQkFBc0IsRUFBRTtNQUMxQjtRQUNFLDhCQUFzQjtnQkFBdEIsc0JBQXNCLEVBQUU7RUFDOUI7SUFDRSx5QkFBaUI7SUFBakIsaUJBQWlCO0lBQ2pCLFlBQVk7SUFDWixjQUFjO0lBQ2QscUJBQWM7SUFBZCxjQUFjO0lBQ2QsMkJBQXVCO1FBQXZCLHVCQUF1QjtJQUN2Qix1QkFBb0I7UUFBcEIsb0JBQW9CO0lBQ3BCLFlBQVk7SUFDWixrQkFBa0IsRUFBRTtJQUNwQjtNQUNFLG1CQUFtQjtNQUNuQixrQkFBa0I7TUFDbEIsY0FBYztNQUNkLGFBQWE7TUFDYixtQkFBbUI7TUFDbkIsb0JBQW9CO01BQ3BCLFdBQVc7TUFDWCwyQ0FBbUM7Y0FBbkMsbUNBQW1DLEVBQUU7TUFDckM7UUFDRSxZQUFZO1FBQ1osb0JBQW9CO1FBQ3BCLGdGQUFnRixFQUFFO01BQ3BGO1FBQ0U7VUFDRSxjQUFjO1VBQ2QsYUFBYSxFQUFFLEVBQUU7TUFDckI7UUFDRTtVQUNFLGNBQWM7VUFDZCxhQUFhO1VBQ2Isa0JBQWtCLEVBQUUsRUFBRTtJQUM1QjtNQUNFO1FBQ0UsV0FBVyxFQUFFLEVBQUU7SUFDbkI7TUFDRTtRQUNFLG1CQUFtQjtRQUNuQixXQUFXO1FBQ1gsT0FBTyxFQUFFLEVBQUU7RUFDakI7SUFDRSxXQUFXO0lBQ1gsWUFBWTtJQUNaLGtCQUFrQjtJQUNsQixvQkFBb0I7SUFDcEIscUJBQWM7SUFBZCxjQUFjO0lBQ2Qsb0JBQWdCO1FBQWhCLGdCQUFnQjtJQUNoQix1QkFBb0I7UUFBcEIsb0JBQW9CO0lBQ3BCLHVCQUErQjtRQUEvQiwrQkFBK0IsRUFBRTtJQUNqQztNQUNFLDBEQUEwRDtNQUMxRCw2QkFBNkI7TUFDN0IsNkJBQTZCO01BQzdCLGtCQUFrQixFQUFFO0lBQ3RCO01BQ0U7UUFDRSxzQkFBd0I7WUFBeEIsd0JBQXdCLEVBQUU7UUFDMUI7VUFDRSxrQkFBa0IsRUFBRSxFQUFFO0lBQzVCO01BQ0U7UUFDRSxhQUFhLEVBQUU7UUFDZjtVQUNFLGtCQUFrQixFQUFFLEVBQUU7SUFDNUI7TUFDRSxhQUFhO01BQ2IsYUFBYTtNQUNiLHlCQUF5QixFQUFFO0lBQzdCO01BQ0UsNkJBQTZCO01BQzdCLFlBQVk7TUFDWixhQUFhLEVBQUU7SUFDakI7TUFDRSw2QkFBNkI7TUFDN0IsYUFBYTtNQUNiLGFBQWEsRUFBRTtJQUNqQjtNQUNFLDZCQUE2QjtNQUM3QixZQUFZO01BQ1osYUFBYSxFQUFFO0lBQ2pCO01BQ0UsNkJBQTZCO01BQzdCLFlBQVk7TUFDWixhQUFhLEVBQUU7SUFDakI7TUFDRSw4QkFBOEI7TUFDOUIsWUFBWTtNQUNaLGFBQWEsRUFBRTtJQUNqQjtNQUNFLDhCQUE4QjtNQUM5QixZQUFZO01BQ1osYUFBYSxFQUFFO0lBQ2pCO01BQ0UsOEJBQThCO01BQzlCLGFBQWE7TUFDYixhQUFhLEVBQUU7SUFDakI7TUFDRSw4QkFBOEI7TUFDOUIsWUFBWTtNQUNaLGFBQWEsRUFBRTtJQUNqQjtNQUNFLDhCQUE4QjtNQUM5QixZQUFZO01BQ1osYUFBYSxFQUFFO0lBQ2pCO01BQ0UsOEJBQThCO01BQzlCLFlBQVk7TUFDWixhQUFhLEVBQUU7SUFDakI7TUFDRSw4QkFBOEI7TUFDOUIsWUFBWTtNQUNaLGFBQWEsRUFBRTtFQUNuQjtJQUNFLHVCQUFvQjtRQUFwQixvQkFBb0I7SUFDcEIscUJBQWM7SUFBZCxjQUFjO0lBQ2Qsc0JBQXdCO1FBQXhCLHdCQUF3QjtJQUN4QixtQkFBbUI7SUFDbkIsV0FBVyxFQUFFO0lBQ2I7TUFDRSxZQUFZO01BQ1osZUFBZTtNQUNmLFlBQVk7TUFDWixRQUFRO01BQ1IsbUJBQW1CO01BQ25CLE9BQU87TUFDUCxZQUFZO01BQ1osV0FBVyxFQUFFO0lBQ2Y7TUFDRSxpQkFBaUI7TUFDakIsWUFBWTtNQUNaLG1CQUFtQjtNQUNuQixXQUFXLEVBQUU7TUFDYjtRQUNFLGdCQUFnQixFQUFFO01BQ3BCO1FBQ0UsK0JBQXVCO2dCQUF2Qix1QkFBdUIsRUFBRTtNQUMzQjtRQUNFLHFEQUE2QztnQkFBN0MsNkNBQTZDLEVBQUU7TUFDakQ7UUFDRSxlQUFlLEVBQUU7TUFDbkI7UUFDRSxjQUFjLEVBQUU7SUFDcEI7TUFDRSxjQUFjO01BQ2QsVUFBVTtNQUNWLG1CQUFtQjtNQUNuQixTQUFTO01BQ1Qsa0RBQTBDO2NBQTFDLDBDQUEwQztNQUMxQyw0RUFBb0U7TUFBcEUsb0VBQW9FO01BQXBFLHFJQUFvRTtNQUNwRSxZQUFZO01BQ1osV0FBVyxFQUFFO0lBQ2Y7TUFDRSxnRUFBZ0U7TUFDaEUsbUNBQW1DO01BQ25DLDZCQUE2QjtNQUM3Qix5QkFBeUI7TUFDekIsbUJBQW1CO01BQ25CLFVBQVU7TUFDVixpQkFBaUI7TUFDakIsdUJBQXVCO01BQ3ZCLG1CQUFtQjtNQUNuQiw0QkFBb0I7Y0FBcEIsb0JBQW9CO01BQ3BCLG1FQUEyRDtNQUEzRCwyREFBMkQ7TUFBM0QsbUhBQTJELEVBQUU7TUFDN0Q7UUFDRSxhQUFhO1FBQ2IsUUFBUTtRQUNSLG1CQUFtQjtRQUNuQixPQUFPO1FBQ1AsWUFBWSxFQUFFO0VBQ3BCO0lBQ0UsbUJBQW1CLEVBQUU7SUFDckI7TUFDRSxzQkFBc0I7TUFDdEIsVUFBVTtNQUNWLFdBQVcsRUFBRTtJQUNmO01BQ0UsbUJBQW1CO01BQ25CLG1CQUFtQixFQUFFO01BQ3JCO1FBQ0UsaUJBQWlCLEVBQUU7TUFDckI7UUFDRSxlQUFlO1FBQ2YsWUFBWTtRQUNaLFlBQVk7UUFDWixhQUFhO1FBQ2IsNDhDQUE0OEM7UUFDNThDLDZCQUE2QjtRQUM3QixzQkFBc0I7UUFDdEIsbUJBQW1CO1FBQ25CLE9BQU87UUFDUCxRQUFRLEVBQUU7TUFDWjtRQUNFLFVBQVU7UUFDVixpQkFBaUI7UUFDakIsZ0JBQWdCO1FBQ2hCLGtCQUFrQixFQUFFO01BQ3RCO1FBQ0UsZUFBZTtRQUNmLGdCQUFnQjtRQUNoQixrQkFBa0IsRUFBRTtFQUMxQjtJQUNFLG9DQUFvQztJQUNwQyx1QkFBdUI7SUFDdkIsaUJBQWlCO0lBQ2pCLGVBQWU7SUFDZixrQkFBa0IsRUFBRTtJQUNwQjtNQUNFLFdBQVc7TUFDWCxpQkFBaUI7TUFDakIsbUJBQW1CO01BQ25CLHNCQUFzQjtNQUN0QixlQUFlO01BQ2Ysa0JBQWtCO01BQ2xCLG1CQUFtQixFQUFFO01BQ3JCO1FBQ0UsZ0NBQWdDLEVBQUU7UUFDbEM7O1VBRUUsZUFBZSxFQUFFO1FBQ25CO1VBQ0UsZUFBZSxFQUFFO01BQ3JCO1FBQ0UsZ0JBQWdCO1FBQ2hCLHdCQUF3QjtRQUN4QixpQkFBaUI7UUFDakIsb0JBQW9CLEVBQUU7TUFDeEI7UUFDRSxnQkFBZ0I7UUFDaEIsa0JBQWtCO1FBQ2xCLDZEQUE2RDtRQUM3RCxpQkFBaUIsRUFBRTtNQUNyQjtRQUNFLDhFQUE4RTtRQUM5RSxtQkFBbUI7UUFDbkIsbUJBQW1CO1FBQ25CLGVBQWUsRUFBRTtRQUNqQjtVQUNFLG1FQUFtRTtVQUNuRSxzQkFBc0I7VUFDdEIsWUFBWTtVQUNaLGFBQWE7VUFDYixZQUFZO1VBQ1osbUJBQW1CO1VBQ25CLE9BQU8sRUFBRTtJQUNmO01BQ0UscUJBQWM7TUFBZCxjQUFjO01BQ2QsdUJBQW9CO1VBQXBCLG9CQUFvQixFQUFFO01BQ3RCO1FBQ0Usa0JBQWtCLEVBQUU7SUFDeEI7TUFDRSxrQkFBa0IsRUFBRTtJQUN0QjtNQUNFO1FBQ0UsMkJBQXVCO1lBQXZCLHVCQUF1QixFQUFFO01BQzNCO1FBQ0UsZUFBZTtRQUNmLGlCQUFpQixFQUFFLEVBQUU7SUFDekI7TUFDRSwyQkFBMkI7TUFDM0IseUJBQXlCO01BQ3pCLGVBQWU7TUFDZixnQkFBZ0I7TUFDaEIsaUJBQWlCO01BQ2pCLG9CQUFvQjtNQUNwQixrREFBa0QsRUFBRTtNQUNwRDtRQUNFLGlCQUFpQjtRQUNqQix3QkFBd0I7UUFDeEIsZ0JBQWdCO1FBQ2hCLGlCQUFpQixFQUFFO01BQ3JCO1FBQ0UsaUNBQWlDLEVBQUU7SUFDdkM7TUFDRSx5QkFBeUI7TUFDekIsc0JBQXNCO01BQ3RCLGFBQWEsRUFBRTtNQUNmO1FBQ0UsZ0JBQWdCO1FBQ2hCLFlBQVksRUFBRTtNQUNoQjtRQUNFLFdBQVcsRUFBRTtJQUNqQjtNQUNFLG1CQUFtQixFQUFFO01BQ3JCO1FBQ0UsNkJBQTZCO1FBQzdCLDZCQUE2QjtRQUM3Qix5QkFBeUI7UUFDekIsT0FBTztRQUNQLFNBQVM7UUFDVCxRQUFRO1FBQ1IsVUFBVTtRQUNWLFlBQVk7UUFDWixlQUFlO1FBQ2YsbUJBQW1CO1FBQ25CLFdBQVc7UUFDWCx3QkFBd0IsRUFBRTtJQUM5QjtNQUNFLFdBQVcsRUFBRTtJQUNmO01BQ0UsZ0JBQWdCO01BQ2hCLGlCQUFpQjtNQUNqQixzQkFBc0I7TUFDdEIsZUFBZTtNQUNmLDBCQUEwQjtNQUMxQixvQkFBb0IsRUFBRTtJQUN4QjtNQUNFLGdCQUFnQjtNQUNoQixpQkFBaUI7TUFDakIsdUJBQXVCO01BQ3ZCLG9CQUFvQixFQUFFO0lBQ3hCO01BQ0UsZUFBZTtNQUNmLGdCQUFnQjtNQUNoQixvQkFBb0I7TUFDcEIsaUJBQWlCO01BQ2pCLGlCQUFpQjtNQUNqQix3QkFBd0IsRUFBRTtJQUM1QjtNQUNFLGdCQUFnQjtNQUNoQixpQkFBaUI7TUFDakIsd0JBQXdCO01BQ3hCLG1CQUFtQjtNQUNuQixvQkFBb0I7TUFDcEIsZUFBZSxFQUFFO01BQ2pCO1FBQ0UsZUFBZTtRQUNmLGlCQUFpQixFQUFFO01BQ3JCO1FBQ0UsZUFBZSxFQUFFO0lBQ3JCO01BQ0UsbUJBQW1CO01BQ25CLGdCQUFnQjtNQUNoQixpQkFBaUIsRUFBRTtNQUNuQjtRQUNFLGlCQUFpQixFQUFFO01BQ3JCO1FBQ0Usd0JBQXdCO1FBQ3hCLGlCQUFpQjtRQUNqQixnQkFBZ0I7UUFDaEIsa0JBQWtCO1FBQ2xCLHFCQUFxQjtRQUNyQixpQkFBaUI7UUFDakIsaUJBQWlCO1FBQ2pCLHNCQUFzQjtRQUN0QiwwQkFBMEIsRUFBRTtNQUM5QjtRQUNFLDBDQUFrQztnQkFBbEMsa0NBQWtDLEVBQUU7SUFDeEM7TUFDRTtRQUNFLGdCQUFnQixFQUFFO01BQ3BCO1FBQ0UsZ0JBQWdCO1FBQ2hCLG1CQUFtQixFQUFFLEVBQUU7RUFDN0I7SUFDRSx1QkFBdUI7SUFDdkIsZUFBZTtJQUNmLHNCQUFzQjtJQUN0QixtQkFBbUIsRUFBRTtJQUNyQjtNQUNFLGlCQUFpQjtNQUNqQixvQkFBb0IsRUFBRTtNQUN0QjtRQUNFLGlCQUFpQjtRQUNqQixlQUFlO1FBQ2Ysb0JBQW9CLEVBQUU7TUFDeEI7UUFDRSxnQkFBZ0I7UUFDaEIsa0JBQWtCO1FBQ2xCLGVBQWU7UUFDZixpQkFBaUIsRUFBRTtJQUN2QjtNQUNFLFdBQVc7TUFDWCxpQkFBaUI7TUFDakIscUJBQWM7TUFBZCxjQUFjO01BQ2QsdUJBQStCO1VBQS9CLCtCQUErQjtNQUMvQixlQUFlLEVBQUU7TUFDakI7UUFDRSxnQkFBZ0I7UUFDaEIscUJBQXFCO1FBQ3JCLHVCQUF1QjtRQUN2QixnQkFBZ0I7UUFDaEIsb0JBQW9CO1FBQ3BCLGlCQUFpQixFQUFFO01BQ3JCO1FBQ0UsK0RBQStEO1FBQy9ELGdCQUFnQjtRQUNoQixrQkFBa0I7UUFDbEIsZUFBZTtRQUNmLHdCQUF3QjtRQUN4QixpQkFBaUIsRUFBRTtJQUN2QjtNQUNFLGtCQUFrQjtNQUNsQixvQkFBZ0I7VUFBaEIsZ0JBQWdCO01BQ2hCLG1CQUFtQixFQUFFO01BQ3JCO1FBQ0UsZ0VBQWdFO1FBQ2hFLHNCQUFzQjtRQUN0QixhQUFhO1FBQ2IsWUFBWTtRQUNaLFlBQVk7UUFDWixtQkFBbUI7UUFDbkIsT0FBTyxFQUFFO01BQ1g7UUFDRSw2QkFBNkIsRUFBRTtNQUNqQztRQUNFLDZCQUE2QixFQUFFO01BQ2pDO1FBQ0Usa0JBQWtCLEVBQUU7SUFDeEI7TUFDRTtRQUNFLGVBQWUsRUFBRTtNQUNuQjtRQUNFLG1CQUFtQixFQUFFO1FBQ3JCO1VBQ0Usd0JBQXdCLEVBQUU7UUFDNUI7VUFDRSxlQUFlLEVBQUUsRUFBRTtJQUN6QjtNQUNFO1FBQ0UscUJBQXFCO1FBQ3JCLG1CQUFtQixFQUFFLEVBQUU7SUFDM0I7TUFDRTtRQUNFLHFCQUFxQjtRQUNyQixrQkFBa0IsRUFBRTtRQUNwQjtVQUNFLG9CQUFvQixFQUFFO1VBQ3RCO1lBQ0UsZ0JBQWdCLEVBQUU7VUFDcEI7WUFDRSxnQkFBZ0I7WUFDaEIsbUJBQW1CLEVBQUUsRUFBRTtFQUNqQztJQUNFLGdFQUFnRTtJQUNoRSxzQkFBc0IsRUFBRTtJQUN4QjtNQUNFLHlCQUF5QixFQUFFO0lBQzdCO01BQ0UsbUJBQW1CO01BQ25CLG1CQUFtQjtNQUNuQixZQUFZLEVBQUU7TUFDZDtRQUNFO1VBQ0UsbUJBQW1CLEVBQUUsRUFBRTtJQUM3QjtNQUNFLG1CQUFtQjtNQUNuQixXQUFXO01BQ1gsT0FBTztNQUNQLFVBQVU7TUFDVixVQUFVO01BQ1Ysc0NBQThCO2NBQTlCLDhCQUE4QjtNQUM5QixxQkFBYztNQUFkLGNBQWM7TUFDZCx1QkFBb0I7VUFBcEIsb0JBQW9CLEVBQUU7SUFDeEI7TUFDRSxhQUFhO01BQ2IsY0FBYztNQUNkLG1CQUFtQixFQUFFO0lBQ3ZCOztNQUVFLFlBQVk7TUFDWixhQUFhO01BQ2IsbUJBQW1CO01BQ25CLE9BQU87TUFDUCxRQUFRLEVBQUU7SUFDWjtNQUNFLFlBQVk7TUFDWixzQ0FBOEI7Y0FBOUIsOEJBQThCLEVBQUU7SUFDbEM7TUFDRSxXQUFXO01BQ1gscUNBQTZCO2NBQTdCLDZCQUE2QixFQUFFO0lBQ2pDO01BQ0UsYUFBYTtNQUNiLGNBQWM7TUFDZCxrRUFBa0U7TUFDbEUsNkJBQTZCO01BQzdCLDZCQUE2QjtNQUM3QixtQkFBbUI7TUFDbkIsT0FBTztNQUNQLFFBQVE7TUFDUixXQUFXO01BQ1gscUNBQTZCO2NBQTdCLDZCQUE2QixFQUFFO0lBQ2pDO01BQ0UsYUFBYTtNQUNiLGNBQWM7TUFDZCxvQkFBb0I7TUFDcEIsbUJBQW1CO01BQ25CLFVBQVU7TUFDVixZQUFZO01BQ1osbUNBQTJCO2NBQTNCLDJCQUEyQjtNQUMzQix1RkFBK0U7Y0FBL0UsK0VBQStFLEVBQUU7SUFDbkY7TUFDRTtRQUNFLGNBQWMsRUFBRTtNQUNsQjtRQUNFLGNBQWM7UUFDZCxrQkFBa0I7UUFDbEIscUJBQXFCO1FBQ3JCLFlBQVk7UUFDWixtQkFBbUIsRUFBRTtRQUNyQjtVQUNFLHVCQUF1QixFQUFFLEVBQUU7RUFDbkM7SUFDRSxnRUFBZ0U7SUFDaEUsaUJBQWlCLEVBQUU7SUFDbkI7TUFDRSw2QkFBNkIsRUFBRTtJQUNqQztNQUNFLG1CQUFtQjtNQUNuQixRQUFRO01BQ1IsT0FBTztNQUNQLFVBQVU7TUFDVixXQUFXO01BQ1gscUJBQWM7TUFBZCxjQUFjO01BQ2Qsc0JBQXdCO1VBQXhCLHdCQUF3QjtNQUN4Qix1QkFBb0I7VUFBcEIsb0JBQW9CLEVBQUU7SUFDeEI7TUFDRSxjQUFjO01BQ2QsMEJBQTBCO01BQzFCLGdCQUFnQjtNQUNoQixpQkFBaUI7TUFDakIsdUJBQXVCLEVBQUU7SUFDM0I7TUFDRSxtQkFBbUIsRUFBRTtJQUN2QjtNQUNFO1FBQ0UscUJBQXFCO1FBQ3JCLFdBQVc7UUFDWCxjQUFjLEVBQUU7TUFDbEI7UUFDRSxrQkFBa0I7UUFDbEIsY0FBYztRQUNkLFdBQVcsRUFBRSxFQUFFO0lBQ25CO01BQ0U7UUFDRSx1QkFBdUI7UUFDdkIsV0FBVyxFQUFFO1FBQ2I7VUFDRSxjQUFjLEVBQUU7UUFDbEI7VUFDRSxjQUFjO1VBQ2Qsa0JBQWtCO1VBQ2xCLHFCQUFxQjtVQUNyQixZQUFZO1VBQ1osbUJBQW1CLEVBQUU7VUFDckI7WUFDRSx1QkFBdUIsRUFBRSxFQUFFO0VBQ3JDO0lBQ0Usb0JBQW9CO0lBQ3BCLGdCQUFnQixFQUFFO0lBQ2xCOztNQUVFLGVBQWUsRUFBRTtNQUNqQjs7UUFFRSw4QkFBOEIsRUFBRTtJQUNwQztNQUNFLGNBQWM7TUFDZCxhQUFhO01BQ2IscUJBQWM7TUFBZCxjQUFjO01BQ2QsaUJBQWlCO01BQ2pCLG1CQUFtQjtNQUNuQixPQUFPO01BQ1AsVUFBVTtNQUNWLHNDQUE4QjtjQUE5Qiw4QkFBOEI7TUFDOUIsVUFBVTtNQUNWLFdBQVcsRUFBRTtJQUNmO01BQ0UsWUFBWTtNQUNaLGFBQWEsRUFBRTtJQUNqQjtNQUNFLGNBQWMsRUFBRTtJQUNsQjtNQUNFLG1DQUEyQjtjQUEzQiwyQkFBMkI7TUFDM0IsK0JBQXVCO2NBQXZCLHVCQUF1QjtNQUN2Qix1Q0FBK0I7Y0FBL0IsK0JBQStCO01BQy9CLDRDQUFvQztjQUFwQyxvQ0FBb0M7TUFDcEMsd0NBQWdDO2NBQWhDLGdDQUFnQyxFQUFFOztBQUV4QztFQUNFO0lBQ0UsYUFBYSxFQUFFO0VBQ2pCO0lBQ0UsV0FBVyxFQUFFLEVBQUU7O0FBSm5CO0VBQ0U7SUFDRSxhQUFhLEVBQUU7RUFDakI7SUFDRSxXQUFXLEVBQUUsRUFBRTtJQUNmO01BQ0UsY0FBYztNQUNkLHdDQUFnQztjQUFoQyxnQ0FBZ0MsRUFBRTtJQUNwQztNQUNFLG1CQUFtQjtNQUNuQixXQUFXO01BQ1gsV0FBVyxFQUFFO0lBQ2Y7TUFDRTtRQUNFLGNBQWM7UUFDZCxrQkFBa0I7UUFDbEIsWUFBWSxFQUFFO01BQ2hCO1FBQ0UsYUFBYSxFQUFFO01BQ2pCO1FBQ0UsOEJBQXNCO2dCQUF0QixzQkFBc0IsRUFBRSxFQUFFO0lBQzlCO01BQ0U7UUFDRSxXQUFXLEVBQUU7UUFDYjtVQUNFLGNBQWMsRUFBRTtRQUNsQjtVQUNFLGNBQWM7VUFDZCxrQkFBa0I7VUFDbEIscUJBQXFCO1VBQ3JCLFlBQVk7VUFDWixtQkFBbUIsRUFBRTtVQUNyQjtZQUNFLHVCQUF1QixFQUFFLEVBQUU7RUFDckM7SUFDRSw0Q0FBNEM7SUFDNUMsc0VBQXNFO0lBQ3RFLHNCQUFzQixFQUFFO0lBQ3hCO01BQ0UsZUFBZSxFQUFFO01BQ2pCO1FBQ0UsOEJBQThCLEVBQUU7SUFDcEM7TUFDRSx1REFBdUQ7TUFDdkQsNEJBQTRCO01BQzVCLFVBQVU7TUFDVixhQUFhLEVBQUU7TUFDZjtRQUNFO1VBQ0UsV0FBVztVQUNYLGNBQWMsRUFBRSxFQUFFO0lBQ3hCO01BQ0UsbUJBQW1CO01BQ25CLFdBQVcsRUFBRTtJQUNmO01BQ0U7UUFDRSxjQUFjLEVBQUU7TUFDbEI7UUFDRSxjQUFjO1FBQ2Qsa0JBQWtCO1FBQ2xCLHFCQUFxQjtRQUNyQixZQUFZO1FBQ1osbUJBQW1CLEVBQUU7UUFDckI7VUFDRSx1QkFBdUIsRUFBRSxFQUFFO0VBQ25DO0lBQ0UsMEJBQTBCO0lBQzFCLGdFQUFnRTtJQUNoRSxzQkFBc0I7SUFDdEIsbUJBQW1CO0lBQ25CLHNCQUFzQixFQUFFO0lBQ3hCO01BQ0UsOEJBQThCLEVBQUU7SUFDbEM7TUFDRSxtQkFBbUI7TUFDbkIsV0FBVztNQUNYLFVBQVU7TUFDVixvQkFBb0IsRUFBRTtNQUN0QjtRQUNFLFdBQVc7UUFDWCx1QkFBdUIsRUFBRTtNQUMzQjtRQUNFLGFBQWEsRUFBRTtNQUNqQjs7UUFFRSxtQkFBbUIsRUFBRTtNQUN2QjtRQUNFLFdBQVcsRUFBRTtNQUNmO1FBQ0UsV0FBVyxFQUFFO01BQ2Y7UUFDRSxvQ0FBNEI7Z0JBQTVCLDRCQUE0QixFQUFFO0lBQ2xDO01BQ0U7UUFDRSxzQkFBc0IsRUFBRTtRQUN4QjtVQUNFLFlBQVk7VUFDWixpQkFBaUI7VUFDakIsbUJBQW1CO1VBQ25CLGtCQUFrQjtVQUNsQixtQkFBbUIsRUFBRTtRQUN2QjtVQUNFLHVCQUF1QixFQUFFO1FBQzNCO1VBQ0UsOEJBQXNCO2tCQUF0QixzQkFBc0I7VUFDdEIsV0FBVztVQUNYLG9CQUFvQixFQUFFLEVBQUU7SUFDOUI7TUFDRTtRQUNFLFdBQVcsRUFBRTtRQUNiO1VBQ0UsY0FBYyxFQUFFO1FBQ2xCO1VBQ0UsY0FBYztVQUNkLGtCQUFrQjtVQUNsQixxQkFBcUI7VUFDckIsWUFBWTtVQUNaLG1CQUFtQixFQUFFO1VBQ3JCO1lBQ0UsdUJBQXVCLEVBQUUsRUFBRTtJQUNuQztNQUNFLG1CQUFtQjtNQUNuQixZQUFZO01BQ1osYUFBYSxFQUFFO01BQ2Y7UUFDRSxtQkFBbUI7UUFDbkIseUNBQWlDO2dCQUFqQyxpQ0FBaUM7UUFDakMsaUJBQWlCO1FBQ2pCLG1CQUFtQjtRQUNuQixxQkFBYztRQUFkLGNBQWM7UUFDZCwyQkFBdUI7WUFBdkIsdUJBQXVCO1FBQ3ZCLHVCQUFvQjtZQUFwQixvQkFBb0I7UUFDcEIsV0FBVyxFQUFFO1FBQ2I7VUFDRSwrREFBK0Q7VUFDL0QsVUFBVTtVQUNWLFlBQVk7VUFDWixnQkFBZ0I7VUFDaEIsa0JBQWtCLEVBQUU7UUFDdEI7VUFDRSxlQUFlO1VBQ2YsYUFBYTtVQUNiLGtCQUFrQixFQUFFO1FBQ3RCO1VBQ0UsWUFBWTtVQUNaLGVBQWU7VUFDZixZQUFZO1VBQ1osYUFBYTtVQUNiLG9CQUFvQjtVQUNwQiw2QkFBNkI7VUFDN0Isc0JBQXNCLEVBQUU7TUFDNUI7UUFDRSxvRUFBb0U7UUFDcEUsYUFBYTtRQUNiLGFBQWE7UUFDYiw0QkFBNEIsRUFBRTtNQUNoQztRQUNFLHFFQUFxRTtRQUNyRSxhQUFhO1FBQ2IsYUFBYTtRQUNiLDRCQUE0QixFQUFFO01BQ2hDO1FBQ0UsZ0VBQWdFO1FBQ2hFLFlBQVk7UUFDWixhQUFhO1FBQ2IsMkJBQTJCLEVBQUU7TUFDL0I7OztRQUdFLFlBQVk7UUFDWixhQUFhO1FBQ2IsMkJBQTJCLEVBQUU7TUFDL0I7UUFDRSxxRUFBcUUsRUFBRTtNQUN6RTtRQUNFLGlFQUFpRSxFQUFFO01BQ3JFO1FBQ0UsZ0VBQWdFLEVBQUU7TUFDcEU7UUFDRSx3RUFBd0U7UUFDeEUsWUFBWTtRQUNaLGFBQWE7UUFDYiwyQkFBMkIsRUFBRTtNQUMvQjtRQUNFLHVFQUF1RTtRQUN2RSxZQUFZO1FBQ1osYUFBYTtRQUNiLDJCQUEyQixFQUFFO01BQy9CO1FBQ0UscUVBQXFFO1FBQ3JFLFlBQVk7UUFDWixhQUFhO1FBQ2IsMkJBQTJCLEVBQUU7TUFDL0I7OztRQUdFLFVBQVU7UUFDVixXQUFXLEVBQUU7TUFDZjs7O1FBR0UsVUFBVTtRQUNWLFdBQVcsRUFBRTtNQUNmOztRQUVFLG1CQUFtQixFQUFFO01BQ3ZCO1FBQ0Usb0JBQW9CLEVBQUU7TUFDeEI7OztRQUdFLFVBQVU7UUFDVixXQUFXLEVBQUU7TUFDZjtRQUNFLG9CQUFvQixFQUFFO01BQ3hCO1FBQ0UsbUJBQW1CLEVBQUU7RUFDM0I7SUFDRSxpQkFBaUI7SUFDakIsMEJBQTBCLEVBQUU7SUFDNUI7TUFDRSxtQkFBbUI7TUFDbkIsaUJBQWlCO01BQ2pCLGtCQUFrQjtNQUNsQixtQkFBbUIsRUFBRTtNQUNyQjtRQUNFLFlBQVk7UUFDWixnQkFBZ0I7UUFDaEIsaUJBQWlCO1FBQ2pCLGtCQUFrQjtRQUNsQixjQUFjLEVBQUU7TUFDbEI7UUFDRSxlQUFlO1FBQ2YsK0RBQStEO1FBQy9ELGdCQUFnQjtRQUNoQixrQkFBa0IsRUFBRTtJQUN4QjtNQUNFLGtCQUFrQjtNQUNsQixXQUFXO01BQ1gscUJBQWM7TUFBZCxjQUFjO01BQ2Qsb0JBQWdCO1VBQWhCLGdCQUFnQjtNQUNoQixzQkFBc0IsRUFBRTtJQUMxQjtNQUNFLGtCQUFjO1VBQWQsY0FBYztNQUNkLGlCQUFpQjtNQUNqQixnQkFBZ0IsRUFBRTtNQUNsQjtRQUNFLFlBQVk7UUFDWixnQkFBZ0I7UUFDaEIsaUJBQWlCO1FBQ2pCLG9CQUFvQjtRQUNwQixjQUFjO1FBQ2QscUJBQWM7UUFBZCxjQUFjO1FBQ2QsdUJBQW9CO1lBQXBCLG9CQUFvQixFQUFFO01BQ3hCO1FBQ0UsZUFBZTtRQUNmLCtEQUErRDtRQUMvRCxnQkFBZ0I7UUFDaEIsa0JBQWtCLEVBQUU7TUFDdEI7UUFDRSxpQ0FBaUMsRUFBRTtNQUNyQztRQUNFLGlDQUFpQyxFQUFFO01BQ3JDO1FBQ0UsaUNBQWlDLEVBQUU7TUFDckM7UUFDRSxpQ0FBaUMsRUFBRTtNQUNyQztRQUNFLGlDQUFpQyxFQUFFO01BQ3JDO1FBQ0UsaUNBQWlDLEVBQUU7TUFDckM7UUFDRSxpQ0FBaUMsRUFBRTtJQUN2QztNQUNFLGVBQWU7TUFDZixZQUFZO01BQ1osWUFBWTtNQUNaLGFBQWE7TUFDYix5REFBeUQ7TUFDekQsNkJBQTZCO01BQzdCLDRCQUE0QjtNQUM1QixtQkFBbUIsRUFBRTtJQUN2QjtNQUNFLHlCQUF5QixFQUFFO0lBQzdCO01BQ0UsdUNBQXVDLEVBQUU7SUFDM0M7TUFDRSx1Q0FBdUMsRUFBRTtJQUMzQztNQUNFLHVDQUF1QyxFQUFFO0lBQzNDO01BQ0UsdUNBQXVDLEVBQUU7SUFDM0M7TUFDRSx1Q0FBdUMsRUFBRTtJQUMzQztNQUNFLHVDQUF1QyxFQUFFO0lBQzNDO01BQ0UsdUNBQXVDLEVBQUU7SUFDM0M7TUFDRTtRQUNFLGtCQUFjO1lBQWQsY0FBYyxFQUFFLEVBQUU7SUFDdEI7TUFDRTtRQUNFLGdCQUFnQjtRQUNoQixtQkFBbUIsRUFBRTtRQUNyQjtVQUNFLHNCQUF3QjtjQUF4Qix3QkFBd0IsRUFBRTtRQUM1QjtVQUNFLGtCQUFjO2NBQWQsY0FBYyxFQUFFLEVBQUU7SUFDeEI7TUFDRTtRQUNFLGdCQUFnQixFQUFFO01BQ3BCO1FBQ0UsbUJBQWU7WUFBZixlQUFlO1FBQ2YsaUJBQWlCLEVBQUUsRUFBRTtFQUMzQjtJQUNFLDZEQUE2RDtJQUM3RCxlQUFlLEVBQUU7SUFDakI7TUFDRSx1QkFBb0I7VUFBcEIsb0JBQW9CO01BQ3BCLHFCQUFjO01BQWQsY0FBYztNQUNkLHFCQUFxQjtNQUNyQixrQkFBa0IsRUFBRTtJQUN0QjtNQUNFLHdCQUF3QjtNQUN4QixxQkFBYTtVQUFiLGFBQWEsRUFBRTtJQUNqQjtNQUNFLGVBQWU7TUFDZixnQkFBZ0I7TUFDaEIsa0JBQWtCO01BQ2xCLGlCQUFpQjtNQUNqQix3QkFBd0I7TUFDeEIsVUFBVTtNQUNWLGlCQUFpQixFQUFFO01BQ25CO1FBQ0UsaUJBQWlCO1FBQ2pCLFlBQVksRUFBRTtJQUNsQjtNQUNFLGVBQWU7TUFDZixnQkFBZ0I7TUFDaEIsa0JBQWtCO01BQ2xCLGlCQUFpQjtNQUNqQixVQUFVLEVBQUU7SUFDZDtNQUNFLGdCQUFnQjtNQUNoQiwwQkFBMEI7TUFDMUIsdUJBQXVCO01BQ3ZCLGlCQUFpQjtNQUNqQixxQkFBcUI7TUFDckIsMEJBQTBCO01BQzFCLHdCQUF3QixFQUFFO01BQzFCO1FBQ0UsMEJBQTBCLEVBQUU7SUFDaEM7TUFDRTtRQUNFLGVBQWU7UUFDZixtQkFBbUIsRUFBRTtNQUN2QjtRQUNFLHFCQUFxQixFQUFFO01BQ3pCO1FBQ0UscUJBQXFCLEVBQUUsRUFBRSIsImZpbGUiOiJwYWdlcy9wcm9kdWN0cy9hcHBmbG93LmNzcyIsInNvdXJjZXNDb250ZW50IjpbIiNwYWdlLXByb2R1Y3RzIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjtcbiAgaGVpZ2h0OiBhdXRvICFpbXBvcnRhbnQ7XG4gIG1pbi1oZWlnaHQ6IGF1dG87IH1cbiAgI3BhZ2UtcHJvZHVjdHMgLnByZS1oZWFkZXIge1xuICAgIG1hcmdpbi1ib3R0b206IDBweDsgfVxuICAjcGFnZS1wcm9kdWN0cyAuY3RhLFxuICAjcGFnZS1wcm9kdWN0cyAucHJvLW5hdixcbiAgI3BhZ2UtcHJvZHVjdHMgLnByby12aWRlbyxcbiAgI3BhZ2UtcHJvZHVjdHMgLnN1Yi1oZWFkZXIsXG4gICNwYWdlLXByb2R1Y3RzIG1haW4ge1xuICAgIGZvbnQtZmFtaWx5OiBcIkVpbmFcIiwgXCJIZWx2ZXRpY2EgTmV1ZVwiLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7IH1cbiAgI3BhZ2UtcHJvZHVjdHMgLnN1Yi1oZWFkZXIgPiAuY29udGFpbmVyIHtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyOyB9XG4gICAgI3BhZ2UtcHJvZHVjdHMgLnN1Yi1oZWFkZXIgPiAuY29udGFpbmVyOmJlZm9yZSB7XG4gICAgICBib3JkZXItdG9wLWNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMSk7IH1cbiAgI3BhZ2UtcHJvZHVjdHMgPiAuY3RhIHtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgYmFja2dyb3VuZC1pbWFnZTogbGluZWFyLWdyYWRpZW50KDkwZGVnLCAjNjUyMWZjIDAlLCAjMzg5ZmZmIDEwMCUpO1xuICAgIG1hcmdpbi10b3A6IC0xNDBweDtcbiAgICBwYWRkaW5nLXRvcDogMTQwcHg7IH1cbiAgICAjcGFnZS1wcm9kdWN0cyA+IC5jdGEgLmN0YV9fYmFja2dyb3VuZCB7XG4gICAgICBjb250ZW50OiAnJztcbiAgICAgIGJhY2tncm91bmQtcG9zaXRpb246IGNlbnRlciBjZW50ZXI7XG4gICAgICBiYWNrZ3JvdW5kLXNpemU6IGNvdmVyO1xuICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICB3aWR0aDogMTAwJTtcbiAgICAgIGhlaWdodDogMTAwJTtcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgIHotaW5kZXg6IDA7XG4gICAgICB0b3A6IC00cHg7XG4gICAgICBsZWZ0OiAwO1xuICAgICAgYmFja2dyb3VuZC1pbWFnZTogbGluZWFyLWdyYWRpZW50KDkwZGVnLCAjNjAzMGZjIDAlLCAjNWZhMmZlIDEwMCUpO1xuICAgICAgYmFja2dyb3VuZC1zaXplOiBjb3ZlcjtcbiAgICAgIG9wYWNpdHk6IDAuNTtcbiAgICAgIG92ZXJmbG93OiBoaWRkZW47IH1cbiAgICAgICNwYWdlLXByb2R1Y3RzID4gLmN0YSAuY3RhX19iYWNrZ3JvdW5kID4gZGl2IHtcbiAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgIGhlaWdodDogMTAwJTtcbiAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICBiYWNrZ3JvdW5kLWltYWdlOiBsaW5lYXItZ3JhZGllbnQoOTBkZWcsICNmZmYgMCUsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMCkgNzUlKTtcbiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoLTIwcHgsIDApIHJvdGF0ZSgtM2RlZykgc2tldygxNmRlZywgMGRlZykgc2NhbGUoMSwgMS41KTtcbiAgICAgICAgdHJhbnNmb3JtLW9yaWdpbjogdG9wOyB9XG4gICAgICAgICNwYWdlLXByb2R1Y3RzID4gLmN0YSAuY3RhX19iYWNrZ3JvdW5kID4gZGl2Om50aC1jaGlsZCgxKSB7XG4gICAgICAgICAgb3BhY2l0eTogMC4wNTtcbiAgICAgICAgICB0b3A6IDc1JTtcbiAgICAgICAgICBsZWZ0OiAwJTsgfVxuICAgICAgICAjcGFnZS1wcm9kdWN0cyA+IC5jdGEgLmN0YV9fYmFja2dyb3VuZCA+IGRpdjpudGgtY2hpbGQoMikge1xuICAgICAgICAgIG9wYWNpdHk6IDAuMTA7XG4gICAgICAgICAgdG9wOiA1MCU7XG4gICAgICAgICAgbGVmdDogMTUuMzg0NjE1Mzg0NiU7IH1cbiAgICAgICAgI3BhZ2UtcHJvZHVjdHMgPiAuY3RhIC5jdGFfX2JhY2tncm91bmQgPiBkaXY6bnRoLWNoaWxkKDMpIHtcbiAgICAgICAgICBvcGFjaXR5OiAwLjA5O1xuICAgICAgICAgIHRvcDogMjUlO1xuICAgICAgICAgIGxlZnQ6IDMwLjc2OTIzMDc2OTIlOyB9XG4gICAgICAgICNwYWdlLXByb2R1Y3RzID4gLmN0YSAuY3RhX19iYWNrZ3JvdW5kID4gZGl2Om50aC1jaGlsZCg0KSB7XG4gICAgICAgICAgb3BhY2l0eTogMC4xNTtcbiAgICAgICAgICB0b3A6IDAlO1xuICAgICAgICAgIGxlZnQ6IDQ2LjE1Mzg0NjE1MzglOyB9XG4gICAgICAgICNwYWdlLXByb2R1Y3RzID4gLmN0YSAuY3RhX19iYWNrZ3JvdW5kID4gZGl2Om50aC1jaGlsZCg1KSB7XG4gICAgICAgICAgb3BhY2l0eTogMC4xNjtcbiAgICAgICAgICB0b3A6IC0yNSU7XG4gICAgICAgICAgbGVmdDogNjEuNTM4NDYxNTM4NSU7IH1cbiAgICAgICAgI3BhZ2UtcHJvZHVjdHMgPiAuY3RhIC5jdGFfX2JhY2tncm91bmQgPiBkaXY6bnRoLWNoaWxkKDYpIHtcbiAgICAgICAgICBvcGFjaXR5OiAwLjA4O1xuICAgICAgICAgIHRvcDogLTUwJTtcbiAgICAgICAgICBsZWZ0OiA3Ni45MjMwNzY5MjMxJTsgfVxuICAgICAgICBAbWVkaWEgKG1heC13aWR0aDogNzY4cHgpIHtcbiAgICAgICAgICAjcGFnZS1wcm9kdWN0cyA+IC5jdGEgLmN0YV9fYmFja2dyb3VuZCA+IGRpdjpudGgtY2hpbGQoMSkge1xuICAgICAgICAgICAgb3BhY2l0eTogMC4wNTtcbiAgICAgICAgICAgIHRvcDogNjAlO1xuICAgICAgICAgICAgbGVmdDogMCU7IH1cbiAgICAgICAgICAjcGFnZS1wcm9kdWN0cyA+IC5jdGEgLmN0YV9fYmFja2dyb3VuZCA+IGRpdjpudGgtY2hpbGQoMikge1xuICAgICAgICAgICAgb3BhY2l0eTogMC4xMDtcbiAgICAgICAgICAgIHRvcDogNDUlO1xuICAgICAgICAgICAgbGVmdDogMjUlOyB9XG4gICAgICAgICAgI3BhZ2UtcHJvZHVjdHMgPiAuY3RhIC5jdGFfX2JhY2tncm91bmQgPiBkaXY6bnRoLWNoaWxkKDMpIHtcbiAgICAgICAgICAgIG9wYWNpdHk6IDAuMDk7XG4gICAgICAgICAgICB0b3A6IDMwJTtcbiAgICAgICAgICAgIGxlZnQ6IDUwJTsgfVxuICAgICAgICAgICNwYWdlLXByb2R1Y3RzID4gLmN0YSAuY3RhX19iYWNrZ3JvdW5kID4gZGl2Om50aC1jaGlsZCg0KSB7XG4gICAgICAgICAgICBvcGFjaXR5OiAwLjE1O1xuICAgICAgICAgICAgdG9wOiAxNSU7XG4gICAgICAgICAgICBsZWZ0OiA3NSU7IH1cbiAgICAgICAgICAjcGFnZS1wcm9kdWN0cyA+IC5jdGEgLmN0YV9fYmFja2dyb3VuZCA+IGRpdjpudGgtY2hpbGQoNSkge1xuICAgICAgICAgICAgb3BhY2l0eTogMC4xNjtcbiAgICAgICAgICAgIHRvcDogMCU7XG4gICAgICAgICAgICBsZWZ0OiAxMDAlOyB9XG4gICAgICAgICAgI3BhZ2UtcHJvZHVjdHMgPiAuY3RhIC5jdGFfX2JhY2tncm91bmQgPiBkaXY6bnRoLWNoaWxkKDYpIHtcbiAgICAgICAgICAgIG9wYWNpdHk6IDAuMDg7XG4gICAgICAgICAgICB0b3A6IC0xNSU7XG4gICAgICAgICAgICBsZWZ0OiAxMjUlOyB9IH1cbiAgICAjcGFnZS1wcm9kdWN0cyA+IC5jdGEgaGdyb3VwIHtcbiAgICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgIG1heC13aWR0aDogODMwcHg7XG4gICAgICBwYWRkaW5nLWJvdHRvbTogMzc2cHg7XG4gICAgICBwYWRkaW5nLXRvcDogNTRweDsgfVxuICAgICAgI3BhZ2UtcHJvZHVjdHMgPiAuY3RhIGhncm91cCBoMyB7XG4gICAgICAgIGZvbnQtZmFtaWx5OiBcIlJvYm90byBNb25vXCIsIE1lbmxvLCBNb25hY28sIENvbnNvbGFzLCBcIkNvdXJpZXIgTmV3XCIsIG1vbm9zcGFjZTtcbiAgICAgICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcbiAgICAgICAgbGV0dGVyLXNwYWNpbmc6IDAuMThlbTtcbiAgICAgICAgZm9udC1zaXplOiAxMnB4O1xuICAgICAgICBsaW5lLWhlaWdodDogMThweDtcbiAgICAgICAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgICAgICAgY29sb3I6ICNlM2U2ZmY7IH1cbiAgICAgICNwYWdlLXByb2R1Y3RzID4gLmN0YSBoZ3JvdXAgaDEge1xuICAgICAgICBtYXJnaW4tdG9wOiAzNnB4O1xuICAgICAgICBmb250LXNpemU6IDU2cHg7XG4gICAgICAgIGxpbmUtaGVpZ2h0OiA2MHB4O1xuICAgICAgICBmb250LXdlaWdodDogNzAwO1xuICAgICAgICBsZXR0ZXItc3BhY2luZzogLS4wMzhlbTtcbiAgICAgICAgbWFyZ2luLWJvdHRvbTogMjY0eDsgfVxuICAgICAgI3BhZ2UtcHJvZHVjdHMgPiAuY3RhIGhncm91cCBwIHtcbiAgICAgICAgbGV0dGVyLXNwYWNpbmc6IC0uMDNlbTtcbiAgICAgICAgbWF4LXdpZHRoOiA3MjRweDtcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuOGVtO1xuICAgICAgICBtYXJnaW46IDAgYXV0bztcbiAgICAgICAgZm9udC1zaXplOiAyMnB4O1xuICAgICAgICBmb250LXdlaWdodDogNDAwO1xuICAgICAgICBjb2xvcjogI2ZmZjtcbiAgICAgICAgZm9udC1mYW1pbHk6IFwiRWluYVwiLCBcIkhlbHZldGljYSBOZXVlXCIsIEhlbHZldGljYSwgc2Fucy1zZXJpZjsgfVxuICAgICAgI3BhZ2UtcHJvZHVjdHMgPiAuY3RhIGhncm91cCAuY3RhLWJ1dHRvbnMge1xuICAgICAgICBtYXJnaW4tdG9wOiAzMHB4O1xuICAgICAgICBwYWRkaW5nLWxlZnQ6IDI0cHg7XG4gICAgICAgIHBhZGRpbmctcmlnaHQ6IDI0cHg7XG4gICAgICAgIGNvbG9yOiB3aGl0ZTtcbiAgICAgICAgbGV0dGVyLXNwYWNpbmc6IC0uMDJlbTsgfVxuICAgICAgICAjcGFnZS1wcm9kdWN0cyA+IC5jdGEgaGdyb3VwIC5jdGEtYnV0dG9ucyA+IC5idG4ge1xuICAgICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogIzc4OThmZjtcbiAgICAgICAgICBib3JkZXItcmFkaXVzOiAyZW07XG4gICAgICAgICAgZGlzcGxheTogaW5saW5lLWZsZXg7XG4gICAgICAgICAgZm9udC1zaXplOiAxNXB4O1xuICAgICAgICAgIGZvbnQtd2VpZ2h0OiA3MDA7XG4gICAgICAgICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcbiAgICAgICAgICBsZXR0ZXItc3BhY2luZzogMC4xMGVtO1xuICAgICAgICAgIHBhZGRpbmc6IDE0cHggMjZweDsgfVxuICAgICAgICAgICNwYWdlLXByb2R1Y3RzID4gLmN0YSBoZ3JvdXAgLmN0YS1idXR0b25zID4gLmJ0bjpub3QoOmhvdmVyKSB7XG4gICAgICAgICAgICBib3gtc2hhZG93OiBub25lOyB9XG4gICAgICAgICNwYWdlLXByb2R1Y3RzID4gLmN0YSBoZ3JvdXAgLmN0YS1idXR0b25zID4gLmJ0bi0tcHJpbWFyeSB7XG4gICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjtcbiAgICAgICAgICBjb2xvcjogIzRhNjhmZjsgfVxuICAgICAgICAgICNwYWdlLXByb2R1Y3RzID4gLmN0YSBoZ3JvdXAgLmN0YS1idXR0b25zID4gLmJ0bi0tcHJpbWFyeTphZnRlciB7XG4gICAgICAgICAgICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gMC4zcztcbiAgICAgICAgICAgIGNvbnRlbnQ6ICdcXGYyODcnO1xuICAgICAgICAgICAgZm9udC1mYW1pbHk6ICdJb25pY29ucyc7XG4gICAgICAgICAgICBmb250LXNpemU6IDE1cHg7XG4gICAgICAgICAgICBtYXJnaW4tbGVmdDogOHB4OyB9XG4gICAgICAgICAgI3BhZ2UtcHJvZHVjdHMgPiAuY3RhIGhncm91cCAuY3RhLWJ1dHRvbnMgPiAuYnRuLS1wcmltYXJ5OmhvdmVyOmFmdGVyIHtcbiAgICAgICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgycHgpOyB9XG4gICAgICAgICNwYWdlLXByb2R1Y3RzID4gLmN0YSBoZ3JvdXAgLmN0YS1idXR0b25zIC5zYWxlcyB7XG4gICAgICAgICAgY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC41KTtcbiAgICAgICAgICBtYXJnaW4tdG9wOiA2cHg7XG4gICAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgICAgICAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1xuICAgICAgICAgIHRyYW5zaXRpb246IC4ycyBjb2xvcjsgfVxuICAgICAgICAgICNwYWdlLXByb2R1Y3RzID4gLmN0YSBoZ3JvdXAgLmN0YS1idXR0b25zIC5zYWxlczpob3ZlciB7XG4gICAgICAgICAgICBjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjgpOyB9XG4gICAgICBAbWVkaWEgKG1heC13aWR0aDogNzY4cHgpIHtcbiAgICAgICAgI3BhZ2UtcHJvZHVjdHMgPiAuY3RhIGhncm91cCB7XG4gICAgICAgICAgcGFkZGluZy1ib3R0b206IDE0MHB4OyB9IH1cbiAgICAgIEBtZWRpYSAobWF4LXdpZHRoOiA0ODBweCkge1xuICAgICAgICAjcGFnZS1wcm9kdWN0cyA+IC5jdGEgaGdyb3VwIHtcbiAgICAgICAgICBwYWRkaW5nLXRvcDogMTRweDsgfVxuICAgICAgICAgICNwYWdlLXByb2R1Y3RzID4gLmN0YSBoZ3JvdXAgaDEge1xuICAgICAgICAgICAgZm9udC1zaXplOiA0MHB4O1xuICAgICAgICAgICAgbGluZS1oZWlnaHQ6IDQ2cHg7IH1cbiAgICAgICAgICAjcGFnZS1wcm9kdWN0cyA+IC5jdGEgaGdyb3VwIGgzIHtcbiAgICAgICAgICAgIG1heC13aWR0aDogMjQ2cHg7XG4gICAgICAgICAgICBtYXJnaW4tbGVmdDogYXV0bztcbiAgICAgICAgICAgIG1hcmdpbi1yaWdodDogYXV0bzsgfVxuICAgICAgICAgICNwYWdlLXByb2R1Y3RzID4gLmN0YSBoZ3JvdXAgcCB7XG4gICAgICAgICAgICBmb250LXNpemU6IDE4cHg7XG4gICAgICAgICAgICBsaW5lLWhlaWdodDogMS42ZW07IH1cbiAgICAgICAgICAjcGFnZS1wcm9kdWN0cyA+IC5jdGEgaGdyb3VwIC5idG4ge1xuICAgICAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgICAgICBtYXJnaW4tcmlnaHQ6IDA7XG4gICAgICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgICAgICAgICAgIG1hcmdpbi1ib3R0b206IDhweDsgfSB9XG4gICAgICAjcGFnZS1wcm9kdWN0cyA+IC5jdGEgaGdyb3VwIGgzLFxuICAgICAgI3BhZ2UtcHJvZHVjdHMgPiAuY3RhIGhncm91cCBoMSxcbiAgICAgICNwYWdlLXByb2R1Y3RzID4gLmN0YSBoZ3JvdXAgcCxcbiAgICAgICNwYWdlLXByb2R1Y3RzID4gLmN0YSBoZ3JvdXAgLmN0YS1idXR0b25zIC5idG4ge1xuICAgICAgICBhbmltYXRpb246IDFzIGZhZGVJblVwIGZvcndhcmRzO1xuICAgICAgICBvcGFjaXR5OiAwOyB9XG4gICAgICAjcGFnZS1wcm9kdWN0cyA+IC5jdGEgaGdyb3VwIGgzIHtcbiAgICAgICAgYW5pbWF0aW9uLWRlbGF5OiAuNHM7IH1cbiAgICAgICNwYWdlLXByb2R1Y3RzID4gLmN0YSBoZ3JvdXAgaDEge1xuICAgICAgICBhbmltYXRpb24tZGVsYXk6IC42czsgfVxuICAgICAgI3BhZ2UtcHJvZHVjdHMgPiAuY3RhIGhncm91cCBwIHtcbiAgICAgICAgYW5pbWF0aW9uLWRlbGF5OiAuOXM7IH1cbiAgICAgICNwYWdlLXByb2R1Y3RzID4gLmN0YSBoZ3JvdXAgLmN0YS1idXR0b25zIC5idG4ge1xuICAgICAgICBhbmltYXRpb24tZGVsYXk6IDEuMXM7IH1cbiAgICAgICNwYWdlLXByb2R1Y3RzID4gLmN0YSBoZ3JvdXAgLmN0YS1idXR0b25zIC5idG46bGFzdC1jaGlsZCB7XG4gICAgICAgIGFuaW1hdGlvbi1kZWxheTogMS4yczsgfVxuICAjcGFnZS1wcm9kdWN0cyBpb25pYy1hcHBmbG93LWFjdGl2YXRvciB7XG4gICAgcG9zaXRpb246IHN0aWNreTtcbiAgICB0b3A6IC0yNDdweDtcbiAgICB6LWluZGV4OiAxMDAwO1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIGJhY2tncm91bmQ6IHdoaXRlOyB9XG4gICAgI3BhZ2UtcHJvZHVjdHMgaW9uaWMtYXBwZmxvdy1hY3RpdmF0b3IgLmFwcC1zY3JlZW5zaG90IHtcbiAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgIGJhY2tncm91bmQ6IHdoaXRlO1xuICAgICAgaGVpZ2h0OiA1MDdweDtcbiAgICAgIHdpZHRoOiA5NjBweDtcbiAgICAgIG1hcmdpbi10b3A6IC0zMDBweDtcbiAgICAgIGJvcmRlci1yYWRpdXM6IDEycHg7XG4gICAgICBvcGFjaXR5OiAwO1xuICAgICAgYW5pbWF0aW9uOiBmYWRlSW4gMXMgMS44cyBmb3J3YXJkczsgfVxuICAgICAgI3BhZ2UtcHJvZHVjdHMgaW9uaWMtYXBwZmxvdy1hY3RpdmF0b3IgLmFwcC1zY3JlZW5zaG90IGltZyB7XG4gICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgICBib3JkZXItcmFkaXVzOiAxMnB4O1xuICAgICAgICBib3gtc2hhZG93OiAwIDhweCAxNnB4IHJnYmEoMCwgMTQsIDQxLCAwLjA4KSwgMCAzMHB4IDYwcHggcmdiYSgwLCAxMSwgMzQsIDAuMTUpOyB9XG4gICAgICBAbWVkaWEgKG1heC13aWR0aDogOTkycHgpIHtcbiAgICAgICAgI3BhZ2UtcHJvZHVjdHMgaW9uaWMtYXBwZmxvdy1hY3RpdmF0b3IgLmFwcC1zY3JlZW5zaG90IHtcbiAgICAgICAgICBoZWlnaHQ6IDMzOHB4O1xuICAgICAgICAgIHdpZHRoOiA2NDBweDsgfSB9XG4gICAgICBAbWVkaWEgKG1heC13aWR0aDogNzY4cHgpIHtcbiAgICAgICAgI3BhZ2UtcHJvZHVjdHMgaW9uaWMtYXBwZmxvdy1hY3RpdmF0b3IgLmFwcC1zY3JlZW5zaG90IHtcbiAgICAgICAgICBoZWlnaHQ6IDE2OXB4O1xuICAgICAgICAgIHdpZHRoOiAzMjBweDtcbiAgICAgICAgICBtYXJnaW4tdG9wOiAtODRweDsgfSB9XG4gICAgQG1lZGlhIChtYXgtd2lkdGg6IDk5MnB4KSB7XG4gICAgICAjcGFnZS1wcm9kdWN0cyBpb25pYy1hcHBmbG93LWFjdGl2YXRvciB7XG4gICAgICAgIHRvcDogLTg0cHg7IH0gfVxuICAgIEBtZWRpYSAobWF4LXdpZHRoOiA3NjhweCkge1xuICAgICAgI3BhZ2UtcHJvZHVjdHMgaW9uaWMtYXBwZmxvdy1hY3RpdmF0b3Ige1xuICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICAgIHotaW5kZXg6IDE7XG4gICAgICAgIHRvcDogMDsgfSB9XG4gICNwYWdlLXByb2R1Y3RzIC5jdXN0b21lci1sb2dvcyB7XG4gICAgcGFkZGluZzogMDtcbiAgICB3aWR0aDogMTAwJTtcbiAgICBtYXgtd2lkdGg6IDEwMjRweDtcbiAgICBtYXJnaW46IDY0cHggYXV0byAwO1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgZmxleC13cmFwOiB3cmFwO1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOyB9XG4gICAgI3BhZ2UtcHJvZHVjdHMgLmN1c3RvbWVyLWxvZ29zIFtjbGFzc149XCJjdXN0b21lci1sb2dvXCJdIHtcbiAgICAgIGJhY2tncm91bmQtaW1hZ2U6IHVybChcIi9pbWcvcHJvL3Byby1jdXN0b21lci1zcHJpdGUucG5nXCIpO1xuICAgICAgYmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdDtcbiAgICAgIGJhY2tncm91bmQtc2l6ZTogMTIxcHggMjU2cHg7XG4gICAgICBtYXJnaW46IDM0cHggNDJweDsgfVxuICAgIEBtZWRpYSAobWF4LXdpZHRoOiA5OTFweCkge1xuICAgICAgI3BhZ2UtcHJvZHVjdHMgLmN1c3RvbWVyLWxvZ29zIHtcbiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7IH1cbiAgICAgICAgI3BhZ2UtcHJvZHVjdHMgLmN1c3RvbWVyLWxvZ29zIFtjbGFzc149XCJjdXN0b21lci1sb2dvXCJdIHtcbiAgICAgICAgICBtYXJnaW46IDIycHggMzRweDsgfSB9XG4gICAgQG1lZGlhIChtYXgtd2lkdGg6IDc2OHB4KSB7XG4gICAgICAjcGFnZS1wcm9kdWN0cyAuY3VzdG9tZXItbG9nb3Mge1xuICAgICAgICBwYWRkaW5nOiA4cHg7IH1cbiAgICAgICAgI3BhZ2UtcHJvZHVjdHMgLmN1c3RvbWVyLWxvZ29zIFtjbGFzc149XCJjdXN0b21lci1sb2dvXCJdIHtcbiAgICAgICAgICBtYXJnaW46IDE2cHggMThweDsgfSB9XG4gICAgI3BhZ2UtcHJvZHVjdHMgLmN1c3RvbWVyLWxvZ29zIC5jdXN0b21lci1sb2dvLS1sZW5kaW5nY2x1YiB7XG4gICAgICB3aWR0aDogMTIxcHg7XG4gICAgICBoZWlnaHQ6IDE4cHg7XG4gICAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwIDA7IH1cbiAgICAjcGFnZS1wcm9kdWN0cyAuY3VzdG9tZXItbG9nb3MgLmN1c3RvbWVyLWxvZ28tLW1jZG9uYWxkcyB7XG4gICAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwIC0xOXB4O1xuICAgICAgd2lkdGg6IDI0cHg7XG4gICAgICBoZWlnaHQ6IDIwcHg7IH1cbiAgICAjcGFnZS1wcm9kdWN0cyAuY3VzdG9tZXItbG9nb3MgLmN1c3RvbWVyLWxvZ28tLXN0dWR5IHtcbiAgICAgIGJhY2tncm91bmQtcG9zaXRpb246IDAgLTQwcHg7XG4gICAgICB3aWR0aDogMTE4cHg7XG4gICAgICBoZWlnaHQ6IDE4cHg7IH1cbiAgICAjcGFnZS1wcm9kdWN0cyAuY3VzdG9tZXItbG9nb3MgLmN1c3RvbWVyLWxvZ28tLWNhdCB7XG4gICAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwIC01OXB4O1xuICAgICAgd2lkdGg6IDM0cHg7XG4gICAgICBoZWlnaHQ6IDIwcHg7IH1cbiAgICAjcGFnZS1wcm9kdWN0cyAuY3VzdG9tZXItbG9nb3MgLmN1c3RvbWVyLWxvZ28tLWdlIHtcbiAgICAgIGJhY2tncm91bmQtcG9zaXRpb246IDAgLTgwcHg7XG4gICAgICB3aWR0aDogMjRweDtcbiAgICAgIGhlaWdodDogMjRweDsgfVxuICAgICNwYWdlLXByb2R1Y3RzIC5jdXN0b21lci1sb2dvcyAuY3VzdG9tZXItbG9nby0tY29tY2FzdCB7XG4gICAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwIC0xMDVweDtcbiAgICAgIHdpZHRoOiA3M3B4O1xuICAgICAgaGVpZ2h0OiAyMHB4OyB9XG4gICAgI3BhZ2UtcHJvZHVjdHMgLmN1c3RvbWVyLWxvZ29zIC5jdXN0b21lci1sb2dvLS1hbXRyYWsge1xuICAgICAgYmFja2dyb3VuZC1wb3NpdGlvbjogMCAtMTI2cHg7XG4gICAgICB3aWR0aDogNDdweDtcbiAgICAgIGhlaWdodDogMjBweDsgfVxuICAgICNwYWdlLXByb2R1Y3RzIC5jdXN0b21lci1sb2dvcyAuY3VzdG9tZXItbG9nby0tYWlyYnVzIHtcbiAgICAgIGJhY2tncm91bmQtcG9zaXRpb246IDAgLTE0N3B4O1xuICAgICAgd2lkdGg6IDEwN3B4O1xuICAgICAgaGVpZ2h0OiAyMHB4OyB9XG4gICAgI3BhZ2UtcHJvZHVjdHMgLmN1c3RvbWVyLWxvZ29zIC5jdXN0b21lci1sb2dvLS1hYWEge1xuICAgICAgYmFja2dyb3VuZC1wb3NpdGlvbjogMCAtMTY4cHg7XG4gICAgICB3aWR0aDogNDVweDtcbiAgICAgIGhlaWdodDogMjdweDsgfVxuICAgICNwYWdlLXByb2R1Y3RzIC5jdXN0b21lci1sb2dvcyAuY3VzdG9tZXItbG9nby0tZGVsb2l0dGUge1xuICAgICAgYmFja2dyb3VuZC1wb3NpdGlvbjogMCAtMTk1cHg7XG4gICAgICB3aWR0aDogODdweDtcbiAgICAgIGhlaWdodDogMTZweDsgfVxuICAgICNwYWdlLXByb2R1Y3RzIC5jdXN0b21lci1sb2dvcyAuY3VzdG9tZXItbG9nby0tdXNhYSB7XG4gICAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwIC0yMTJweDtcbiAgICAgIHdpZHRoOiAyMXB4O1xuICAgICAgaGVpZ2h0OiAyNHB4OyB9XG4gICAgI3BhZ2UtcHJvZHVjdHMgLmN1c3RvbWVyLWxvZ29zIC5jdXN0b21lci1sb2dvLS1pbmcge1xuICAgICAgYmFja2dyb3VuZC1wb3NpdGlvbjogMCAtMjM3cHg7XG4gICAgICB3aWR0aDogNzNweDtcbiAgICAgIGhlaWdodDogMTlweDsgfVxuICAjcGFnZS1wcm9kdWN0cyAucHJvLXZpZGVvIHtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIHotaW5kZXg6IDE7IH1cbiAgICAjcGFnZS1wcm9kdWN0cyAucHJvLXZpZGVvOmJlZm9yZSB7XG4gICAgICBjb250ZW50OiBcIlwiO1xuICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICBoZWlnaHQ6IDUwJTtcbiAgICAgIGxlZnQ6IDA7XG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICB0b3A6IDA7XG4gICAgICB3aWR0aDogMTAwJTtcbiAgICAgIHotaW5kZXg6IDE7IH1cbiAgICAjcGFnZS1wcm9kdWN0cyAucHJvLXZpZGVvIC52aWRlby1wbGF5ZXIge1xuICAgICAgbWF4LXdpZHRoOiA5MDBweDtcbiAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICAgei1pbmRleDogMjsgfVxuICAgICAgI3BhZ2UtcHJvZHVjdHMgLnByby12aWRlbyAudmlkZW8tcGxheWVyOmhvdmVyIHtcbiAgICAgICAgY3Vyc29yOiBwb2ludGVyOyB9XG4gICAgICAjcGFnZS1wcm9kdWN0cyAucHJvLXZpZGVvIC52aWRlby1wbGF5ZXI6bm90KC5pcy1wbGF5aW5nKTpob3ZlciAudmlkZW8tcGxheWVyLWZyYW1lIHtcbiAgICAgICAgdHJhbnNmb3JtOiBzY2FsZSgwLjk5KTsgfVxuICAgICAgI3BhZ2UtcHJvZHVjdHMgLnByby12aWRlbyAudmlkZW8tcGxheWVyOm5vdCguaXMtcGxheWluZyk6aG92ZXIgLnZpZGVvLXBsYXllci1idXR0b24ge1xuICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlLCAtNTAlKSBzY2FsZSgxLjA1KTsgfVxuICAgICAgI3BhZ2UtcHJvZHVjdHMgLnByby12aWRlbyAudmlkZW8tcGxheWVyLmlzLXJlYWR5IC52aWRlby1wbGF5ZXItYnV0dG9uIHtcbiAgICAgICAgZGlzcGxheTogYmxvY2s7IH1cbiAgICAgICNwYWdlLXByb2R1Y3RzIC5wcm8tdmlkZW8gLnZpZGVvLXBsYXllci5pcy1wbGF5aW5nIC52aWRlby1wbGF5ZXItYnV0dG9uIHtcbiAgICAgICAgZGlzcGxheTogbm9uZTsgfVxuICAgICNwYWdlLXByb2R1Y3RzIC5wcm8tdmlkZW8gLnZpZGVvLXBsYXllci1idXR0b24ge1xuICAgICAgZGlzcGxheTogbm9uZTtcbiAgICAgIGxlZnQ6IDUwJTtcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgIHRvcDogNTAlO1xuICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoLTUwJSwgLTUwJSkgc2NhbGUoMSk7XG4gICAgICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gNDAwbXMgY3ViaWMtYmV6aWVyKDAuMTc1LCAwLjg4NSwgMC4zMiwgMS4yNzUpO1xuICAgICAgd2lkdGg6IDgwcHg7XG4gICAgICB6LWluZGV4OiAxOyB9XG4gICAgI3BhZ2UtcHJvZHVjdHMgLnByby12aWRlbyAudmlkZW8tcGxheWVyLWZyYW1lIHtcbiAgICAgIGJhY2tncm91bmQtaW1hZ2U6IHVybChcIi9pbWcvcHJvL3Byby1kYXNoLXZpZGVvLXNjcmVlbnNob3QucG5nXCIpO1xuICAgICAgYmFja2dyb3VuZC1wb3NpdGlvbjogY2VudGVyIGNlbnRlcjtcbiAgICAgIGJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7XG4gICAgICBiYWNrZ3JvdW5kLXNpemU6IGNvbnRhaW47XG4gICAgICBib3JkZXItcmFkaXVzOiA4cHg7XG4gICAgICBoZWlnaHQ6IDA7XG4gICAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgICAgcGFkZGluZy1ib3R0b206IDY0LjY3JTtcbiAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgIHRyYW5zZm9ybTogc2NhbGUoMSk7XG4gICAgICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gNDAwbXMgY3ViaWMtYmV6aWVyKDAuMTksIDEsIDAuMjIsIDEpOyB9XG4gICAgICAjcGFnZS1wcm9kdWN0cyAucHJvLXZpZGVvIC52aWRlby1wbGF5ZXItZnJhbWUgPiBpZnJhbWUge1xuICAgICAgICBoZWlnaHQ6IDEwMCU7XG4gICAgICAgIGxlZnQ6IDA7XG4gICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgdG9wOiAwO1xuICAgICAgICB3aWR0aDogMTAwJTsgfVxuICAjcGFnZS1wcm9kdWN0cyAucHJvLWJlbmVmaXRzIHtcbiAgICBwYWRkaW5nLWxlZnQ6IDYwcHg7IH1cbiAgICAjcGFnZS1wcm9kdWN0cyAucHJvLWJlbmVmaXRzIHVsIHtcbiAgICAgIGxpc3Qtc3R5bGUtdHlwZTogbm9uZTtcbiAgICAgIG1hcmdpbjogMDtcbiAgICAgIHBhZGRpbmc6IDA7IH1cbiAgICAjcGFnZS1wcm9kdWN0cyAucHJvLWJlbmVmaXRzIGxpIHtcbiAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgIHBhZGRpbmctbGVmdDogNDBweDsgfVxuICAgICAgI3BhZ2UtcHJvZHVjdHMgLnByby1iZW5lZml0cyBsaSArIGxpIHtcbiAgICAgICAgbWFyZ2luLXRvcDogMjJweDsgfVxuICAgICAgI3BhZ2UtcHJvZHVjdHMgLnByby1iZW5lZml0cyBsaTo6YmVmb3JlIHtcbiAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgIGNvbnRlbnQ6ICcnO1xuICAgICAgICB3aWR0aDogMjRweDtcbiAgICAgICAgaGVpZ2h0OiAyNHB4O1xuICAgICAgICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXCJkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQURFQUFBQXdDQVlBQUFDNHdKSzVBQUFEL0VsRVFWUm9nYzNhMjR0VlpSekc4YzlhYzlqT09PaklNR29NU1hReFJCYzE2VVdTNFlWaWtCS0tVR1RFVUYzNUJ3amhYNUJDRjBFWFJoY1ZVMFFVQ0JZUjVBRVNKSWt3dTRrWUw0SkE4NUE1NmRDNFoyeFdGKzhhM1RPekQydnR3NW9lV096TjN1djkvWjR2NzNHOTc0cVNKSEh3WSsxUUg3WmhLMGJUYXhBRDZmL1RtTUprZXAzSE9jeTBtcmk3eGZKOTJJdHg3RUFwUTVtbks3NlhjUVlUT0tGSm9HWWhCbkVRaHpEVVpBd0M5UFBwZFJOdjR6Mmh4aklyenBrMHd1dENjM2hMYXdCTE5aVEduRXh6UkZrTDVvSFlpSlA0QU1ONTNPWFVjSnJqWkpxem9iSkNiTWRGN0d6T1YxUGFtZWJjM3VqRytPYy9HZ2JiajIreG9XVmIrYlVoemIyLzNrMk5hbUkvdnBCdDFPbVVTcW1IbWlEMUlMYmowd2IzRktWWThGSzFhZFV5dUJHZlc5a2FXS3FTNEdsWlo2OEdFZUVUSzlNSEdtbUQ0RzNSOEZzTjRqWEZqa0o1dFZQd2VGOUxJUVp4dENnM0xlaW80QlhMSVE3cTdFVFdMZzBMWHJFWW9rOVlDNjJJaHRld090OHdja2p3dkFoaXIvYXVoVEpyWkIzN3RyQjNTeTZRSWNIeklvanhObnZMcEpGMTdCNmp1NHUxL2V4NWlsTDJ0ZlU0RHlENmhPZUJRbFVKc0tEK1hucXpRK3hBWHd4eDVGa0ZUMnpWQUdabStmSUNkKzVtRGxQQ3RsQVRrV2ZhN0xHdTZnSDhOWjA3M05ZWUloNXJtOE1HMmpqWVZnQVlqUkVsNGFHKzQxcS9oajN0QldBQkltSmQ2eGJyYS8wYVh0aTh1Tk8yQVFBR1EwMGtWdWN0MlY4S0UxUVdkUkFBQmtKTlJOa2Z5Z2tUMHI0dDRScHBVSWNkQmtBNlQwUlI5djJldnQ0d3M2N3REMjE3OTFodGtDSUFNQjBqaVNOM3NwYm9pdWlxNkppMVFBb0NnS2tZU1hmc3Q2d2xwc3VjK0RGOExtZ3BTSUVBTUJrajZlcHlLVStwMnpPMVFaN1lWQ2dBQ3hDcmVueWZ0MlF0a0cyamhRTEErUmdlWGU5TUZKbkxXN29hU0tYdXpuVWNvSXh6TVd4K3hGUnZ0eCthaVZJTFpQWWVYLy9VVVFEQ2p2cE1ETWRPK2JmVWJhTFpTUGRCMHRWbmVZNnZMbkQ5ZGx1TTF0TUVSQmV2Skk2ZDR2RVJhMys5NHZmNVJNWjVlTGxLUFd3YTR2SXQvcW5SeE5xb20zallRazNBTDVmOVhlcnhiaXRSeTNOY3Vsb0lBT0VzWTRZbHV4MERxN3dUUjI0VllxRTEzUkFPWTdBRTRzWnRmM1ozT1Z5NHBmeDZVOFZwMHJJZHdObDczbzhqM3hWcUtaOU80NlBLSDZwdFl5YnppWmR4dlFoSE9YVU5yeUtwL0xIV3J2aFZ2Q2hNSnY4WGxmR1M0RzJSNnAwOW5NVXJtTytRcVR5YUY3eWNyZlpub3dPVTQxYStSc3FwaCtPMWJzaHlDblFjendudHNXaGRTM1BYQkNEN1VkWlpqQWtqUTFFNm5lYXMyb1FxRlQvNVVPYWdWN0VMYndpVFRhZDBJODJ4UzVWT1hFMTVEeFVUZkNqc1V4MFcxaS90MHMwMDVtaWFJNmwvK3dNMWV6STZoU1BDQXV3QXZ0RmM1eStuWlEra3NZN0krVjRIcmI5bE00UFAwbXZGWGhYNkQzbVZLVFgyZkVOc0FBQUFBRWxGVGtTdVFtQ0NcIik7XG4gICAgICAgIGJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7XG4gICAgICAgIGJhY2tncm91bmQtc2l6ZTogMTAwJTtcbiAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICB0b3A6IDA7XG4gICAgICAgIGxlZnQ6IDA7IH1cbiAgICAgICNwYWdlLXByb2R1Y3RzIC5wcm8tYmVuZWZpdHMgbGkgaDQge1xuICAgICAgICBtYXJnaW46IDA7XG4gICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7XG4gICAgICAgIGZvbnQtc2l6ZTogMTZweDtcbiAgICAgICAgbGluZS1oZWlnaHQ6IDIwcHg7IH1cbiAgICAgICNwYWdlLXByb2R1Y3RzIC5wcm8tYmVuZWZpdHMgbGkgcCB7XG4gICAgICAgIGNvbG9yOiAjNTQ1YzZhO1xuICAgICAgICBmb250LXNpemU6IDE1cHg7XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAyNHB4OyB9XG4gICNwYWdlLXByb2R1Y3RzIC5oZXJvIHtcbiAgICBiYWNrZ3JvdW5kOiBuby1yZXBlYXQgY2VudGVyIGNlbnRlcjtcbiAgICBiYWNrZ3JvdW5kLXNpemU6IGNvdmVyO1xuICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgcGFkZGluZy10b3A6IDA7XG4gICAgcGFkZGluZy1ib3R0b206IDA7IH1cbiAgICAjcGFnZS1wcm9kdWN0cyAuaGVybyAuY29udGVudCB7XG4gICAgICB3aWR0aDogMzklO1xuICAgICAgdGV4dC1hbGlnbjogbGVmdDtcbiAgICAgIHBhZGRpbmctdG9wOiAyMDBweDtcbiAgICAgIHBhZGRpbmctYm90dG9tOiAyMjBweDtcbiAgICAgIGNvbG9yOiAjMDcwZjFhO1xuICAgICAgbWluLWhlaWdodDogNzI0cHg7XG4gICAgICBwb3NpdGlvbjogcmVsYXRpdmU7IH1cbiAgICAgICNwYWdlLXByb2R1Y3RzIC5oZXJvIC5jb250ZW50LmRhcmsge1xuICAgICAgICBjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjgpOyB9XG4gICAgICAgICNwYWdlLXByb2R1Y3RzIC5oZXJvIC5jb250ZW50LmRhcmsgaDIsXG4gICAgICAgICNwYWdlLXByb2R1Y3RzIC5oZXJvIC5jb250ZW50LmRhcmsgLmhlcm9fX2N0YSB7XG4gICAgICAgICAgY29sb3I6ICMxNTFkMmI7IH1cbiAgICAgICAgI3BhZ2UtcHJvZHVjdHMgLmhlcm8gLmNvbnRlbnQuZGFyayBwIHtcbiAgICAgICAgICBjb2xvcjogIzU5NmE4OTsgfVxuICAgICAgI3BhZ2UtcHJvZHVjdHMgLmhlcm8gLmNvbnRlbnQgaDIge1xuICAgICAgICBmb250LXNpemU6IDM2cHg7XG4gICAgICAgIGxldHRlci1zcGFjaW5nOiAtMC4wM2VtO1xuICAgICAgICBmb250LXdlaWdodDogNjAwO1xuICAgICAgICBtYXJnaW4tYm90dG9tOiAxMnB4OyB9XG4gICAgICAjcGFnZS1wcm9kdWN0cyAuaGVybyAuY29udGVudCBwIHtcbiAgICAgICAgZm9udC1zaXplOiAyMHB4O1xuICAgICAgICBsaW5lLWhlaWdodDogMzJweDtcbiAgICAgICAgZm9udC1mYW1pbHk6IFwiRWluYVwiLCBcIkhlbHZldGljYSBOZXVlXCIsIEhlbHZldGljYSwgc2Fucy1zZXJpZjtcbiAgICAgICAgZm9udC13ZWlnaHQ6IDQwMDsgfVxuICAgICAgI3BhZ2UtcHJvZHVjdHMgLmhlcm8gLmNvbnRlbnQgaDQge1xuICAgICAgICBmb250LWZhbWlseTogXCJSb2JvdG8gTW9ub1wiLCBNZW5sbywgTW9uYWNvLCBDb25zb2xhcywgXCJDb3VyaWVyIE5ld1wiLCBtb25vc3BhY2U7XG4gICAgICAgIHBhZGRpbmctdG9wOiAxMDBweDtcbiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICAgICBjb2xvcjogIzgwOGZhNzsgfVxuICAgICAgICAjcGFnZS1wcm9kdWN0cyAuaGVybyAuY29udGVudCBoNDo6YmVmb3JlIHtcbiAgICAgICAgICBiYWNrZ3JvdW5kOiB1cmwoXCIvaW1nL3Byby9wcm9kdWN0LWhlYWRlci1pY29ucy5wbmdcIikgMCAwIG5vLXJlcGVhdDtcbiAgICAgICAgICBiYWNrZ3JvdW5kLXNpemU6IDY0cHg7XG4gICAgICAgICAgd2lkdGg6IDY0cHg7XG4gICAgICAgICAgaGVpZ2h0OiA2NHB4O1xuICAgICAgICAgIGNvbnRlbnQ6ICcnO1xuICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgICB0b3A6IDA7IH1cbiAgICAjcGFnZS1wcm9kdWN0cyAuaGVyb19fY3RhLWJhciB7XG4gICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsgfVxuICAgICAgI3BhZ2UtcHJvZHVjdHMgLmhlcm9fX2N0YS1iYXIgYSArIGEge1xuICAgICAgICBtYXJnaW4tbGVmdDogMjBweDsgfVxuICAgICNwYWdlLXByb2R1Y3RzIC5oZXJvX19jdGEtYmFyLXNlY29uZGFyeSB7XG4gICAgICBtYXJnaW4tbGVmdDogMzBweDsgfVxuICAgIEBtZWRpYSAobWF4LXdpZHRoOiA3NjdweCkge1xuICAgICAgI3BhZ2UtcHJvZHVjdHMgLmhlcm9fX2N0YS1iYXIge1xuICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOyB9XG4gICAgICAjcGFnZS1wcm9kdWN0cyAuaGVyb19fY3RhLWJhci1zZWNvbmRhcnkge1xuICAgICAgICBtYXJnaW4tbGVmdDogMDtcbiAgICAgICAgbWFyZ2luLXRvcDogMjRweDsgfSB9XG4gICAgI3BhZ2UtcHJvZHVjdHMgLmhlcm9fX2N0YSB7XG4gICAgICBib3JkZXItYm90dG9tLXN0eWxlOiBzb2xpZDtcbiAgICAgIGJvcmRlci1ib3R0b20td2lkdGg6IDJweDtcbiAgICAgIGNvbG9yOiBpbmhlcml0O1xuICAgICAgZm9udC1zaXplOiAxOHB4O1xuICAgICAgZm9udC13ZWlnaHQ6IDcwMDtcbiAgICAgIHBhZGRpbmctYm90dG9tOiA0cHg7XG4gICAgICB0cmFuc2l0aW9uOiBib3JkZXItYm90dG9tLWNvbG9yIDEwMG1zIGVhc2UtaW4tb3V0OyB9XG4gICAgICAjcGFnZS1wcm9kdWN0cyAuaGVyb19fY3RhOmFmdGVyIHtcbiAgICAgICAgY29udGVudDogJ1xcZjI4Nyc7XG4gICAgICAgIGZvbnQtZmFtaWx5OiAnSW9uaWNvbnMnO1xuICAgICAgICBmb250LXNpemU6IDE2cHg7XG4gICAgICAgIG1hcmdpbi1sZWZ0OiA1cHg7IH1cbiAgICAgICNwYWdlLXByb2R1Y3RzIC5oZXJvX19jdGE6aG92ZXIge1xuICAgICAgICBib3JkZXItYm90dG9tLWNvbG9yOiB0cmFuc3BhcmVudDsgfVxuICAgICNwYWdlLXByb2R1Y3RzIC5oZXJvX19pY29uLWxpbmsge1xuICAgICAgdHJhbnNpdGlvbjogb3BhY2l0eSAwLjNzO1xuICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgICAgb3BhY2l0eTogMC43OyB9XG4gICAgICAjcGFnZS1wcm9kdWN0cyAuaGVyb19faWNvbi1saW5rIGkge1xuICAgICAgICBmb250LXNpemU6IDMwcHg7XG4gICAgICAgIGNvbG9yOiAjZmZmOyB9XG4gICAgICAjcGFnZS1wcm9kdWN0cyAuaGVyb19faWNvbi1saW5rOmhvdmVyIHtcbiAgICAgICAgb3BhY2l0eTogMTsgfVxuICAgICNwYWdlLXByb2R1Y3RzIC5oZXJvIC5jb250YWluZXIge1xuICAgICAgcG9zaXRpb246IHJlbGF0aXZlOyB9XG4gICAgICAjcGFnZS1wcm9kdWN0cyAuaGVybyAuY29udGFpbmVyOjpiZWZvcmUge1xuICAgICAgICBiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0O1xuICAgICAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiByaWdodCAwO1xuICAgICAgICBiYWNrZ3JvdW5kLXNpemU6IGNvbnRhaW47XG4gICAgICAgIHRvcDogMDtcbiAgICAgICAgcmlnaHQ6IDA7XG4gICAgICAgIGxlZnQ6IDA7XG4gICAgICAgIGJvdHRvbTogMDtcbiAgICAgICAgY29udGVudDogJyc7XG4gICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgIG9wYWNpdHk6IDA7XG4gICAgICAgIHRyYW5zaXRpb246IC4ycyBvcGFjaXR5OyB9XG4gICAgI3BhZ2UtcHJvZHVjdHMgLmhlcm8uYWN0aXZlIC5jb250YWluZXI6OmJlZm9yZSB7XG4gICAgICBvcGFjaXR5OiAxOyB9XG4gICAgI3BhZ2UtcHJvZHVjdHMgLmhlcm8gaDQge1xuICAgICAgZm9udC1zaXplOiAxMXB4O1xuICAgICAgZm9udC13ZWlnaHQ6IDcwMDtcbiAgICAgIGxldHRlci1zcGFjaW5nOiAwLjJlbTtcbiAgICAgIGNvbG9yOiAjMjcyYTJmO1xuICAgICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcbiAgICAgIG1hcmdpbi1ib3R0b206IDMwcHg7IH1cbiAgICAjcGFnZS1wcm9kdWN0cyAuaGVybyBoMyB7XG4gICAgICBmb250LXNpemU6IDM2cHg7XG4gICAgICBmb250LXdlaWdodDogNzAwO1xuICAgICAgbGV0dGVyLXNwYWNpbmc6IC0uMDJlbTtcbiAgICAgIG1hcmdpbi1ib3R0b206IDMwcHg7IH1cbiAgICAjcGFnZS1wcm9kdWN0cyAuaGVybyBoMiB7XG4gICAgICBjb2xvcjogIzI3MmEyZjtcbiAgICAgIGZvbnQtc2l6ZTogMzZweDtcbiAgICAgIG1hcmdpbi1ib3R0b206IDIzcHg7XG4gICAgICBtYXJnaW4tdG9wOiAxNHB4O1xuICAgICAgZm9udC13ZWlnaHQ6IDcwMDtcbiAgICAgIGxldHRlci1zcGFjaW5nOiAtLjAxNWVtOyB9XG4gICAgI3BhZ2UtcHJvZHVjdHMgLmhlcm8gcCB7XG4gICAgICBmb250LXNpemU6IDE2cHg7XG4gICAgICBmb250LXdlaWdodDogNjAwO1xuICAgICAgbGV0dGVyLXNwYWNpbmc6IC0uMDI2ZW07XG4gICAgICBsaW5lLWhlaWdodDogMS44ZW07XG4gICAgICBtYXJnaW4tYm90dG9tOiAzMHB4O1xuICAgICAgY29sb3I6ICM1ZTY3Nzc7IH1cbiAgICAgICNwYWdlLXByb2R1Y3RzIC5oZXJvIHAgc3Ryb25nIHtcbiAgICAgICAgY29sb3I6ICMyNzJhMmY7XG4gICAgICAgIGZvbnQtd2VpZ2h0OiA3MDA7IH1cbiAgICAgICNwYWdlLXByb2R1Y3RzIC5oZXJvIHAgYTpob3ZlciB7XG4gICAgICAgIGNvbG9yOiAjNGE4YmZjOyB9XG4gICAgI3BhZ2UtcHJvZHVjdHMgLmhlcm8gLmJ0biB7XG4gICAgICBwYWRkaW5nOiAxM3B4IDE1cHg7XG4gICAgICBmb250LXNpemU6IDE0cHg7XG4gICAgICBmb250LXdlaWdodDogNjAwOyB9XG4gICAgICAjcGFnZS1wcm9kdWN0cyAuaGVybyAuYnRuIHN0cm9uZyB7XG4gICAgICAgIGZvbnQtd2VpZ2h0OiA3MDA7IH1cbiAgICAgICNwYWdlLXByb2R1Y3RzIC5oZXJvIC5idG46OmFmdGVyIHtcbiAgICAgICAgZm9udC1mYW1pbHk6ICdJb25pY29ucyc7XG4gICAgICAgIGNvbnRlbnQ6ICdcXGYyODcnO1xuICAgICAgICBmb250LXNpemU6IDE1cHg7XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxMHB4O1xuICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogLTFweDtcbiAgICAgICAgbWFyZ2luLWxlZnQ6IDhweDtcbiAgICAgICAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgICAgICB0cmFuc2l0aW9uOiAuMnMgdHJhbnNmb3JtOyB9XG4gICAgICAjcGFnZS1wcm9kdWN0cyAuaGVybyAuYnRuOmhvdmVyOjphZnRlciB7XG4gICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlM2QoMnB4LCAwLCAwKTsgfVxuICAgIEBtZWRpYSAobWF4LXdpZHRoOiA0ODBweCkge1xuICAgICAgI3BhZ2UtcHJvZHVjdHMgLmhlcm8gLmNvbnRlbnQgaDIge1xuICAgICAgICBmb250LXNpemU6IDMwcHg7IH1cbiAgICAgICNwYWdlLXByb2R1Y3RzIC5oZXJvIC5jb250ZW50IHAge1xuICAgICAgICBmb250LXNpemU6IDE4cHg7XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjZlbTsgfSB9XG4gICNwYWdlLXByb2R1Y3RzICNvdmVydmlldyB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjtcbiAgICBjb2xvcjogIzI3MmEyZjtcbiAgICBwYWRkaW5nLWJvdHRvbTogMTgwcHg7XG4gICAgcGFkZGluZy10b3A6IDE0MHB4OyB9XG4gICAgI3BhZ2UtcHJvZHVjdHMgI292ZXJ2aWV3IGhncm91cCB7XG4gICAgICBtYXgtd2lkdGg6IDc0MHB4O1xuICAgICAgbWFyZ2luOiAwIGF1dG8gNjhweDsgfVxuICAgICAgI3BhZ2UtcHJvZHVjdHMgI292ZXJ2aWV3IGhncm91cCBoMyB7XG4gICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7XG4gICAgICAgIGNvbG9yOiAjMDcwZjFhO1xuICAgICAgICBtYXJnaW4tYm90dG9tOiAxNHB4OyB9XG4gICAgICAjcGFnZS1wcm9kdWN0cyAjb3ZlcnZpZXcgaGdyb3VwIHAge1xuICAgICAgICBmb250LXNpemU6IDIycHg7XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAzNnB4O1xuICAgICAgICBjb2xvcjogIzQzNTQ2ZjtcbiAgICAgICAgZm9udC13ZWlnaHQ6IDQwMDsgfVxuICAgICNwYWdlLXByb2R1Y3RzICNvdmVydmlldyAuZmVhdHVyZXMge1xuICAgICAgcGFkZGluZzogMDtcbiAgICAgIGxpc3Qtc3R5bGU6IG5vbmU7XG4gICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xuICAgICAgbWFyZ2luOiAwIGF1dG87IH1cbiAgICAgICNwYWdlLXByb2R1Y3RzICNvdmVydmlldyAuZmVhdHVyZXMgaDQge1xuICAgICAgICBmb250LXNpemU6IDIwcHg7XG4gICAgICAgIHRleHQtdHJhbnNmb3JtOiBub25lO1xuICAgICAgICBsZXR0ZXItc3BhY2luZzogLS4wMmVtO1xuICAgICAgICBtYXJnaW4tdG9wOiA1cHg7XG4gICAgICAgIG1hcmdpbi1ib3R0b206IDEzcHg7XG4gICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7IH1cbiAgICAgICNwYWdlLXByb2R1Y3RzICNvdmVydmlldyAuZmVhdHVyZXMgcCB7XG4gICAgICAgIGZvbnQtZmFtaWx5OiBcIkludGVyXCIsIFwiSW50ZXIgVUlcIiwgSGVsdmV0aWNhLCBBcmlhbCwgc2Fucy1zZXJpZjtcbiAgICAgICAgZm9udC1zaXplOiAxNnB4O1xuICAgICAgICBsaW5lLWhlaWdodDogMjhweDtcbiAgICAgICAgY29sb3I6ICM2ODdlOTk7XG4gICAgICAgIGxldHRlci1zcGFjaW5nOiAtLjAxNWVtO1xuICAgICAgICBmb250LXdlaWdodDogNDAwOyB9XG4gICAgI3BhZ2UtcHJvZHVjdHMgI292ZXJ2aWV3IGxpIHtcbiAgICAgIHBhZGRpbmctdG9wOiA2OHB4O1xuICAgICAgZmxleDogMCAxIDM0MHB4O1xuICAgICAgcG9zaXRpb246IHJlbGF0aXZlOyB9XG4gICAgICAjcGFnZS1wcm9kdWN0cyAjb3ZlcnZpZXcgbGk6OmJlZm9yZSB7XG4gICAgICAgIGJhY2tncm91bmQ6IHVybChcIi9pbWcvcHJvL3Byby1mZWF0dXJlLWljb25zLnBuZ1wiKSAwIDAgbm8tcmVwZWF0O1xuICAgICAgICBiYWNrZ3JvdW5kLXNpemU6IDQ4cHg7XG4gICAgICAgIGhlaWdodDogNDhweDtcbiAgICAgICAgd2lkdGg6IDQ4cHg7XG4gICAgICAgIGNvbnRlbnQ6ICcnO1xuICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgIHRvcDogMDsgfVxuICAgICAgI3BhZ2UtcHJvZHVjdHMgI292ZXJ2aWV3IGxpLmZhc3Rlcjo6YmVmb3JlIHtcbiAgICAgICAgYmFja2dyb3VuZC1wb3NpdGlvbjogMCAtNDhweDsgfVxuICAgICAgI3BhZ2UtcHJvZHVjdHMgI292ZXJ2aWV3IGxpLmhhcHBpZXI6OmJlZm9yZSB7XG4gICAgICAgIGJhY2tncm91bmQtcG9zaXRpb246IDAgLTk2cHg7IH1cbiAgICAgICNwYWdlLXByb2R1Y3RzICNvdmVydmlldyBsaSArIGxpIHtcbiAgICAgICAgbWFyZ2luLWxlZnQ6IDI0cHg7IH1cbiAgICBAbWVkaWEgKG1heC13aWR0aDogNTIwcHgpIHtcbiAgICAgICNwYWdlLXByb2R1Y3RzICNvdmVydmlldyAuZmVhdHVyZXMge1xuICAgICAgICBkaXNwbGF5OiBibG9jazsgfVxuICAgICAgI3BhZ2UtcHJvZHVjdHMgI292ZXJ2aWV3IGxpIHtcbiAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyOyB9XG4gICAgICAgICNwYWdlLXByb2R1Y3RzICNvdmVydmlldyBsaTo6YmVmb3JlIHtcbiAgICAgICAgICBsZWZ0OiBjYWxjKCA1MCUgLSAyNHB4KTsgfVxuICAgICAgICAjcGFnZS1wcm9kdWN0cyAjb3ZlcnZpZXcgbGkgKyBsaSB7XG4gICAgICAgICAgbWFyZ2luLWxlZnQ6IDA7IH0gfVxuICAgIEBtZWRpYSAobWF4LXdpZHRoOiA3NjhweCkge1xuICAgICAgI3BhZ2UtcHJvZHVjdHMgI292ZXJ2aWV3IHtcbiAgICAgICAgcGFkZGluZy1ib3R0b206IDY4cHg7XG4gICAgICAgIHBhZGRpbmctdG9wOiAxMDJweDsgfSB9XG4gICAgQG1lZGlhIChtYXgtd2lkdGg6IDQ4MHB4KSB7XG4gICAgICAjcGFnZS1wcm9kdWN0cyAjb3ZlcnZpZXcge1xuICAgICAgICBwYWRkaW5nLWJvdHRvbTogNDhweDtcbiAgICAgICAgcGFkZGluZy10b3A6IDcycHg7IH1cbiAgICAgICAgI3BhZ2UtcHJvZHVjdHMgI292ZXJ2aWV3IGhncm91cCB7XG4gICAgICAgICAgbWFyZ2luLWJvdHRvbTogNDJweDsgfVxuICAgICAgICAgICNwYWdlLXByb2R1Y3RzICNvdmVydmlldyBoZ3JvdXAgaDMge1xuICAgICAgICAgICAgZm9udC1zaXplOiAzMHB4OyB9XG4gICAgICAgICAgI3BhZ2UtcHJvZHVjdHMgI292ZXJ2aWV3IGhncm91cCBwIHtcbiAgICAgICAgICAgIGZvbnQtc2l6ZTogMThweDtcbiAgICAgICAgICAgIGxpbmUtaGVpZ2h0OiAxLjZlbTsgfSB9XG4gICNwYWdlLXByb2R1Y3RzICN1cGRhdGVzIHtcbiAgICBiYWNrZ3JvdW5kLWltYWdlOiBsaW5lYXItZ3JhZGllbnQoMGRlZywgd2hpdGUgMCUsICNmNmY4ZmIgMTAwJSk7XG4gICAgYmFja2dyb3VuZC1zaXplOiAxMDAlOyB9XG4gICAgI3BhZ2UtcHJvZHVjdHMgI3VwZGF0ZXMgaDQ6OmJlZm9yZSB7XG4gICAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwIDA7IH1cbiAgICAjcGFnZS1wcm9kdWN0cyAjdXBkYXRlcyAuY29udGVudCB7XG4gICAgICBwYWRkaW5nLXRvcDogMTc5cHg7XG4gICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICB6LWluZGV4OiAxMDsgfVxuICAgICAgQG1lZGlhIChtYXgtd2lkdGg6IDEyMTlweCkge1xuICAgICAgICAjcGFnZS1wcm9kdWN0cyAjdXBkYXRlcyAuY29udGVudCB7XG4gICAgICAgICAgcGFkZGluZy10b3A6IDE0OHB4OyB9IH1cbiAgICAjcGFnZS1wcm9kdWN0cyAjdXBkYXRlcyAuYW5pbS11cGRhdGVzIHtcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgIHotaW5kZXg6IDQ7XG4gICAgICB0b3A6IDA7XG4gICAgICBib3R0b206IDA7XG4gICAgICBsZWZ0OiA1MCU7XG4gICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTEwMHB4KTtcbiAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICBhbGlnbi1pdGVtczogY2VudGVyOyB9XG4gICAgI3BhZ2UtcHJvZHVjdHMgI3VwZGF0ZXMgLmFuaW0tdXBkYXRlc19fcm9vdCB7XG4gICAgICB3aWR0aDogNzI2cHg7XG4gICAgICBoZWlnaHQ6IDQzN3B4O1xuICAgICAgcG9zaXRpb246IHJlbGF0aXZlOyB9XG4gICAgI3BhZ2UtcHJvZHVjdHMgI3VwZGF0ZXMgLmFuaW0tdXBkYXRlc19fZm9yZWdyb3VuZCxcbiAgICAjcGFnZS1wcm9kdWN0cyAjdXBkYXRlcyAuYW5pbS11cGRhdGVzX19iYWNrZ3JvdW5kIHtcbiAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgaGVpZ2h0OiAxMDAlO1xuICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgdG9wOiAwO1xuICAgICAgbGVmdDogMDsgfVxuICAgICNwYWdlLXByb2R1Y3RzICN1cGRhdGVzIC5hbmltLXVwZGF0ZXNfX2ZvcmVncm91bmQge1xuICAgICAgei1pbmRleDogMTA7XG4gICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVooMTAwMHB4KTsgfVxuICAgICNwYWdlLXByb2R1Y3RzICN1cGRhdGVzIC5hbmltLXVwZGF0ZXNfX2JhY2tncm91bmQge1xuICAgICAgei1pbmRleDogMTtcbiAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWigxMDBweCk7IH1cbiAgICAjcGFnZS1wcm9kdWN0cyAjdXBkYXRlcyAuYW5pbS11cGRhdGVzX19kZXZpY2Uge1xuICAgICAgd2lkdGg6IDcyNnB4O1xuICAgICAgaGVpZ2h0OiA0MzdweDtcbiAgICAgIGJhY2tncm91bmQtaW1hZ2U6IHVybChcIi9pbWcvcHJvL3VwZGF0ZXMtaWxsdXN0cmF0aW9uLWRldmljZS5wbmdcIik7XG4gICAgICBiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0O1xuICAgICAgYmFja2dyb3VuZC1zaXplOiA3MjZweCA0MzdweDtcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgIHRvcDogMDtcbiAgICAgIGxlZnQ6IDA7XG4gICAgICB6LWluZGV4OiA1O1xuICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVaKDUwMHB4KTsgfVxuICAgICNwYWdlLXByb2R1Y3RzICN1cGRhdGVzIC5hbmltLXVwZGF0ZXNfX3NjcmVlbiB7XG4gICAgICB3aWR0aDogMzA4cHg7XG4gICAgICBoZWlnaHQ6IDU1NHB4O1xuICAgICAgYmFja2dyb3VuZDogIzVkMzdmZjtcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgIHRvcDogMjhweDtcbiAgICAgIGxlZnQ6IDQwNnB4O1xuICAgICAgdHJhbnNmb3JtLW9yaWdpbjogdG9wIGxlZnQ7XG4gICAgICB0cmFuc2Zvcm06IHJvdGF0ZVgoNjBkZWcpIHJvdGF0ZVkoMC43ZGVnKSByb3RhdGVaKDM2LjVkZWcpIHNrZXcoMmRlZywgLTEuNWRlZyk7IH1cbiAgICBAbWVkaWEgKG1heC13aWR0aDogOTkxcHgpIHtcbiAgICAgICNwYWdlLXByb2R1Y3RzICN1cGRhdGVzIC5hbmltLXVwZGF0ZXMge1xuICAgICAgICBkaXNwbGF5OiBub25lOyB9XG4gICAgICAjcGFnZS1wcm9kdWN0cyAjdXBkYXRlcyAuY29udGVudCB7XG4gICAgICAgIG1pbi1oZWlnaHQ6IDA7XG4gICAgICAgIHBhZGRpbmctdG9wOiA2NHB4O1xuICAgICAgICBwYWRkaW5nLWJvdHRvbTogNjRweDtcbiAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsgfVxuICAgICAgICAjcGFnZS1wcm9kdWN0cyAjdXBkYXRlcyAuY29udGVudCBoNDo6YmVmb3JlIHtcbiAgICAgICAgICBsZWZ0OiBjYWxjKDUwJSAtIDMycHgpOyB9IH1cbiAgI3BhZ2UtcHJvZHVjdHMgI2J1aWxkIHtcbiAgICBiYWNrZ3JvdW5kLWltYWdlOiBsaW5lYXItZ3JhZGllbnQoMGRlZywgd2hpdGUgMCUsICNmNmY4ZmIgMTAwJSk7XG4gICAgcGFkZGluZzogMTAwcHggMDsgfVxuICAgICNwYWdlLXByb2R1Y3RzICNidWlsZCBoNDo6YmVmb3JlIHtcbiAgICAgIGJhY2tncm91bmQtcG9zaXRpb246IDAgLTY0cHg7IH1cbiAgICAjcGFnZS1wcm9kdWN0cyAjYnVpbGQgLmFuaW0tYnVpbGQge1xuICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgbGVmdDogMDtcbiAgICAgIHRvcDogMDtcbiAgICAgIGJvdHRvbTogMDtcbiAgICAgIHdpZHRoOiAzOSU7XG4gICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gICAgICBhbGlnbi1pdGVtczogY2VudGVyOyB9XG4gICAgI3BhZ2UtcHJvZHVjdHMgI2J1aWxkIC5hbmltLWJ1aWxkX190ZXh0IHtcbiAgICAgIGZpbGw6ICM1ZDM3ZmY7XG4gICAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xuICAgICAgZm9udC1zaXplOiAxMnB4O1xuICAgICAgZm9udC13ZWlnaHQ6IDcwMDtcbiAgICAgIGxldHRlci1zcGFjaW5nOiAwLjA1ZW07IH1cbiAgICAjcGFnZS1wcm9kdWN0cyAjYnVpbGQgLmNvbnRlbnQge1xuICAgICAgcGFkZGluZy10b3A6IDE0MHB4OyB9XG4gICAgQG1lZGlhIChtYXgtd2lkdGg6IDk5MXB4KSB7XG4gICAgICAjcGFnZS1wcm9kdWN0cyAjYnVpbGQgLmNvbnRhaW5lcjo6YmVmb3JlIHtcbiAgICAgICAgYmFja2dyb3VuZC1zaXplOiA0MCU7XG4gICAgICAgIHRvcDogMTI4cHg7XG4gICAgICAgIGJvdHRvbTogMTI4cHg7IH1cbiAgICAgICNwYWdlLXByb2R1Y3RzICNidWlsZCAuY29udGVudCB7XG4gICAgICAgIHBhZGRpbmctdG9wOiA2NHB4O1xuICAgICAgICBtaW4taGVpZ2h0OiAwO1xuICAgICAgICB3aWR0aDogNDAlOyB9IH1cbiAgICBAbWVkaWEgKG1heC13aWR0aDogNzY3cHgpIHtcbiAgICAgICNwYWdlLXByb2R1Y3RzICNidWlsZCB7XG4gICAgICAgIGJhY2tncm91bmQtaW1hZ2U6IG5vbmU7XG4gICAgICAgIHBhZGRpbmc6IDA7IH1cbiAgICAgICAgI3BhZ2UtcHJvZHVjdHMgI2J1aWxkIC5hbmltLWJ1aWxkIHtcbiAgICAgICAgICBkaXNwbGF5OiBub25lOyB9XG4gICAgICAgICNwYWdlLXByb2R1Y3RzICNidWlsZCAuY29udGVudCB7XG4gICAgICAgICAgbWluLWhlaWdodDogMDtcbiAgICAgICAgICBwYWRkaW5nLXRvcDogNjRweDtcbiAgICAgICAgICBwYWRkaW5nLWJvdHRvbTogNjRweDtcbiAgICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7IH1cbiAgICAgICAgICAjcGFnZS1wcm9kdWN0cyAjYnVpbGQgLmNvbnRlbnQgaDQ6OmJlZm9yZSB7XG4gICAgICAgICAgICBsZWZ0OiBjYWxjKDUwJSAtIDMycHgpOyB9IH1cbiAgI3BhZ2UtcHJvZHVjdHMgI3JlcG9ydGluZyB7XG4gICAgYmFja2dyb3VuZDogIzA4MWIxNztcbiAgICBwYWRkaW5nOiA1MHB4IDA7IH1cbiAgICAjcGFnZS1wcm9kdWN0cyAjcmVwb3J0aW5nIGg0LFxuICAgICNwYWdlLXByb2R1Y3RzICNyZXBvcnRpbmcgLmJ0biB7XG4gICAgICBjb2xvcjogIzYwN2Q3OTsgfVxuICAgICAgI3BhZ2UtcHJvZHVjdHMgI3JlcG9ydGluZyBoNDo6YmVmb3JlLFxuICAgICAgI3BhZ2UtcHJvZHVjdHMgI3JlcG9ydGluZyAuYnRuOjpiZWZvcmUge1xuICAgICAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwIC0yNTZweDsgfVxuICAgICNwYWdlLXByb2R1Y3RzICNyZXBvcnRpbmcgLmFuaW0tcmVwb3J0aW5nIHtcbiAgICAgIHdpZHRoOiAxMDg0cHg7XG4gICAgICBoZWlnaHQ6IDEwMCU7XG4gICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgIHRvcDogMDtcbiAgICAgIGxlZnQ6IDUwJTtcbiAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgtMjQwcHgpO1xuICAgICAgYm90dG9tOiAwO1xuICAgICAgei1pbmRleDogMTsgfVxuICAgICNwYWdlLXByb2R1Y3RzICNyZXBvcnRpbmcgI2FuaW0tcmVwb3J0aW5nX19zdmcge1xuICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICBoZWlnaHQ6IDEwMCU7IH1cbiAgICAjcGFnZS1wcm9kdWN0cyAjcmVwb3J0aW5nIC5hbmltLXJlcG9ydGluZ19fYmcge1xuICAgICAgZmlsbDogIzBkMmIyNTsgfVxuICAgICNwYWdlLXByb2R1Y3RzICNyZXBvcnRpbmcgLmFuaW0tcmVwb3J0aW5nX19zY2FuIHtcbiAgICAgIGFuaW1hdGlvbi1uYW1lOiBjeWNsZS1mYWRlO1xuICAgICAgYW5pbWF0aW9uLWR1cmF0aW9uOiAycztcbiAgICAgIGFuaW1hdGlvbi1kaXJlY3Rpb246IGFsdGVybmF0ZTtcbiAgICAgIGFuaW1hdGlvbi1pdGVyYXRpb24tY291bnQ6IGluZmluaXRlO1xuICAgICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogZWFzZTsgfVxuXG5Aa2V5ZnJhbWVzIGN5Y2xlLWZhZGUge1xuICBmcm9tIHtcbiAgICBvcGFjaXR5OiAwLjQ7IH1cbiAgdG8ge1xuICAgIG9wYWNpdHk6IDE7IH0gfVxuICAgICNwYWdlLXByb2R1Y3RzICNyZXBvcnRpbmcgLmFuaW0tcmVwb3J0aW5nX19idWcge1xuICAgICAgZmlsbDogI2ZmMzI2NztcbiAgICAgIHRyYW5zZm9ybS1vcmlnaW46IGNlbnRlciBjZW50ZXI7IH1cbiAgICAjcGFnZS1wcm9kdWN0cyAjcmVwb3J0aW5nIC5jb250ZW50IHtcbiAgICAgIHBhZGRpbmctdG9wOiAxNzJweDtcbiAgICAgIHdpZHRoOiA0MCU7XG4gICAgICB6LWluZGV4OiA1OyB9XG4gICAgQG1lZGlhIChtYXgtd2lkdGg6IDk5MXB4KSB7XG4gICAgICAjcGFnZS1wcm9kdWN0cyAjcmVwb3J0aW5nIC5jb250ZW50IHtcbiAgICAgICAgbWluLWhlaWdodDogMDtcbiAgICAgICAgcGFkZGluZy10b3A6IDY0cHg7XG4gICAgICAgIHdpZHRoOiAxMDAlOyB9XG4gICAgICAjcGFnZS1wcm9kdWN0cyAjcmVwb3J0aW5nIC5hbmltLXJlcG9ydGluZyB7XG4gICAgICAgIG9wYWNpdHk6IDAuNzsgfVxuICAgICAgI3BhZ2UtcHJvZHVjdHMgI3JlcG9ydGluZyAuYW5pbS1yZXBvcnRpbmdfX2NsaXBwZWQge1xuICAgICAgICB0cmFuc2Zvcm06IHNjYWxlKDAuOCk7IH0gfVxuICAgIEBtZWRpYSAobWF4LXdpZHRoOiA5OTFweCkge1xuICAgICAgI3BhZ2UtcHJvZHVjdHMgI3JlcG9ydGluZyB7XG4gICAgICAgIHBhZGRpbmc6IDA7IH1cbiAgICAgICAgI3BhZ2UtcHJvZHVjdHMgI3JlcG9ydGluZyAuYW5pbS1yZXBvcnRpbmcge1xuICAgICAgICAgIGRpc3BsYXk6IG5vbmU7IH1cbiAgICAgICAgI3BhZ2UtcHJvZHVjdHMgI3JlcG9ydGluZyAuY29udGVudCB7XG4gICAgICAgICAgbWluLWhlaWdodDogMDtcbiAgICAgICAgICBwYWRkaW5nLXRvcDogNjRweDtcbiAgICAgICAgICBwYWRkaW5nLWJvdHRvbTogNjRweDtcbiAgICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7IH1cbiAgICAgICAgICAjcGFnZS1wcm9kdWN0cyAjcmVwb3J0aW5nIC5jb250ZW50IGg0OjpiZWZvcmUge1xuICAgICAgICAgICAgbGVmdDogY2FsYyg1MCUgLSAzMnB4KTsgfSB9XG4gICNwYWdlLXByb2R1Y3RzICNwdXNoIHtcbiAgICBiYWNrZ3JvdW5kOiAjZmZiYzJhIG5vLXJlcGVhdCBjZW50ZXIgYm90dG9tO1xuICAgIGJhY2tncm91bmQtaW1hZ2U6IGxpbmVhci1ncmFkaWVudCh0byByaWdodCwgI2ZmY2UzOSAwJSwgI2ZmYWQyMCAxMDAlKTtcbiAgICBiYWNrZ3JvdW5kLXNpemU6IDEwMCU7IH1cbiAgICAjcGFnZS1wcm9kdWN0cyAjcHVzaCBoNCB7XG4gICAgICBjb2xvcjogI2QyNmQwMDsgfVxuICAgICAgI3BhZ2UtcHJvZHVjdHMgI3B1c2ggaDQ6OmJlZm9yZSB7XG4gICAgICAgIGJhY2tncm91bmQtcG9zaXRpb246IDAgLTMyMHB4OyB9XG4gICAgI3BhZ2UtcHJvZHVjdHMgI3B1c2ggLmNvbnRhaW5lcjo6YmVmb3JlIHtcbiAgICAgIGJhY2tncm91bmQtaW1hZ2U6IHVybChcIi9pbWcvcHJvL3Byb2R1Y3QtcHVzaC1pbWcucG5nXCIpO1xuICAgICAgYmFja2dyb3VuZC1wb3NpdGlvbjogbGVmdCAwO1xuICAgICAgdG9wOiA4MHB4O1xuICAgICAgYm90dG9tOiA4MHB4OyB9XG4gICAgICBAbWVkaWEgKG1heC13aWR0aDogMTIxOXB4KSB7XG4gICAgICAgICNwYWdlLXByb2R1Y3RzICNwdXNoIC5jb250YWluZXI6OmJlZm9yZSB7XG4gICAgICAgICAgdG9wOiAxMzBweDtcbiAgICAgICAgICBib3R0b206IDEzMHB4OyB9IH1cbiAgICAjcGFnZS1wcm9kdWN0cyAjcHVzaCAuY29udGVudCB7XG4gICAgICBwYWRkaW5nLXRvcDogMTcycHg7XG4gICAgICB3aWR0aDogMzUlOyB9XG4gICAgQG1lZGlhIChtYXgtd2lkdGg6IDk5MXB4KSB7XG4gICAgICAjcGFnZS1wcm9kdWN0cyAjcHVzaCAuY29udGFpbmVyOjpiZWZvcmUge1xuICAgICAgICBkaXNwbGF5OiBub25lOyB9XG4gICAgICAjcGFnZS1wcm9kdWN0cyAjcHVzaCAuY29udGVudCB7XG4gICAgICAgIG1pbi1oZWlnaHQ6IDA7XG4gICAgICAgIHBhZGRpbmctdG9wOiA2NHB4O1xuICAgICAgICBwYWRkaW5nLWJvdHRvbTogNjRweDtcbiAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsgfVxuICAgICAgICAjcGFnZS1wcm9kdWN0cyAjcHVzaCAuY29udGVudCBoNDo6YmVmb3JlIHtcbiAgICAgICAgICBsZWZ0OiBjYWxjKDUwJSAtIDMycHgpOyB9IH1cbiAgI3BhZ2UtcHJvZHVjdHMgI2F1dG9tYXRlIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjlmYWZjO1xuICAgIGJhY2tncm91bmQtaW1hZ2U6IGxpbmVhci1ncmFkaWVudCgwZGVnLCB3aGl0ZSAwJSwgI2Y2ZjhmYiAxMDAlKTtcbiAgICBiYWNrZ3JvdW5kLXNpemU6IDEwMCU7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIHBhZGRpbmctYm90dG9tOiAxNjBweDsgfVxuICAgICNwYWdlLXByb2R1Y3RzICNhdXRvbWF0ZSBoNDo6YmVmb3JlIHtcbiAgICAgIGJhY2tncm91bmQtcG9zaXRpb246IDAgLTEyOHB4OyB9XG4gICAgI3BhZ2UtcHJvZHVjdHMgI2F1dG9tYXRlIC5hbmltLWF1dG9tYXRlIHtcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgIHRvcDogMjIwcHg7XG4gICAgICBsZWZ0OiA1MCU7XG4gICAgICBtYXJnaW4tbGVmdDogLTQwMHB4OyB9XG4gICAgICAjcGFnZS1wcm9kdWN0cyAjYXV0b21hdGUgLmFuaW0tYXV0b21hdGUgc3ZnIC5jb25uZWN0b3Ige1xuICAgICAgICBvcGFjaXR5OiAwO1xuICAgICAgICBzdHJva2UtZGFzaGFycmF5OiA4MHB4OyB9XG4gICAgICAjcGFnZS1wcm9kdWN0cyAjYXV0b21hdGUgLmFuaW0tYXV0b21hdGUgc3ZnIHJlY3QuZm91ciB7XG4gICAgICAgIG9wYWNpdHk6IDAuNjsgfVxuICAgICAgI3BhZ2UtcHJvZHVjdHMgI2F1dG9tYXRlIC5hbmltLWF1dG9tYXRlIHN2ZyAjdG9wLFxuICAgICAgI3BhZ2UtcHJvZHVjdHMgI2F1dG9tYXRlIC5hbmltLWF1dG9tYXRlIHN2ZyAjYm90dG9tIHtcbiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOyB9XG4gICAgICAjcGFnZS1wcm9kdWN0cyAjYXV0b21hdGUgLmFuaW0tYXV0b21hdGUgc3ZnICNib3R0b20ge1xuICAgICAgICB6LWluZGV4OiAxOyB9XG4gICAgICAjcGFnZS1wcm9kdWN0cyAjYXV0b21hdGUgLmFuaW0tYXV0b21hdGUgc3ZnICN0b3Age1xuICAgICAgICB6LWluZGV4OiAyOyB9XG4gICAgICAjcGFnZS1wcm9kdWN0cyAjYXV0b21hdGUgLmFuaW0tYXV0b21hdGUgc3ZnID4gZyB7XG4gICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSg1MHB4KTsgfVxuICAgIEBtZWRpYSAobWF4LXdpZHRoOiAxMjE5cHgpIHtcbiAgICAgICNwYWdlLXByb2R1Y3RzICNhdXRvbWF0ZSB7XG4gICAgICAgIHBhZGRpbmctYm90dG9tOiAzOTBweDsgfVxuICAgICAgICAjcGFnZS1wcm9kdWN0cyAjYXV0b21hdGUgLmNvbnRlbnQge1xuICAgICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgICAgIG1heC13aWR0aDogNTAwcHg7XG4gICAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgICAgICAgIG1hcmdpbi1sZWZ0OiBhdXRvO1xuICAgICAgICAgIG1hcmdpbi1yaWdodDogYXV0bzsgfVxuICAgICAgICAjcGFnZS1wcm9kdWN0cyAjYXV0b21hdGUgLmNvbnRlbnQgaDQ6OmJlZm9yZSB7XG4gICAgICAgICAgbGVmdDogY2FsYyg1MCUgLSAzMnB4KTsgfVxuICAgICAgICAjcGFnZS1wcm9kdWN0cyAjYXV0b21hdGUgLmFuaW0tYXV0b21hdGUge1xuICAgICAgICAgIHRyYW5zZm9ybTogc2NhbGUoMC44KTtcbiAgICAgICAgICB0b3A6IDQ3MHB4O1xuICAgICAgICAgIG1hcmdpbi1sZWZ0OiAtNjcwcHg7IH0gfVxuICAgIEBtZWRpYSAobWF4LXdpZHRoOiA3NjhweCkge1xuICAgICAgI3BhZ2UtcHJvZHVjdHMgI2F1dG9tYXRlIHtcbiAgICAgICAgcGFkZGluZzogMDsgfVxuICAgICAgICAjcGFnZS1wcm9kdWN0cyAjYXV0b21hdGUgLmFuaW0tYXV0b21hdGUge1xuICAgICAgICAgIGRpc3BsYXk6IG5vbmU7IH1cbiAgICAgICAgI3BhZ2UtcHJvZHVjdHMgI2F1dG9tYXRlIC5jb250ZW50IHtcbiAgICAgICAgICBtaW4taGVpZ2h0OiAwO1xuICAgICAgICAgIHBhZGRpbmctdG9wOiA2NHB4O1xuICAgICAgICAgIHBhZGRpbmctYm90dG9tOiA2NHB4O1xuICAgICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsgfVxuICAgICAgICAgICNwYWdlLXByb2R1Y3RzICNhdXRvbWF0ZSAuY29udGVudCBoNDo6YmVmb3JlIHtcbiAgICAgICAgICAgIGxlZnQ6IGNhbGMoNTAlIC0gMzJweCk7IH0gfVxuICAgICNwYWdlLXByb2R1Y3RzICNhdXRvbWF0ZSAuYW5pbS1hdXRvbWF0ZV91aSB7XG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICB3aWR0aDogMTAwJTtcbiAgICAgIGhlaWdodDogMTAwJTsgfVxuICAgICAgI3BhZ2UtcHJvZHVjdHMgI2F1dG9tYXRlIC5hbmltLWF1dG9tYXRlX3VpID4gZGl2IHtcbiAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlLCAtNTAlKTtcbiAgICAgICAgbWF4LXdpZHRoOiAxMTRweDtcbiAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgICBvcGFjaXR5OiAwOyB9XG4gICAgICAgICNwYWdlLXByb2R1Y3RzICNhdXRvbWF0ZSAuYW5pbS1hdXRvbWF0ZV91aSA+IGRpdiBwIHtcbiAgICAgICAgICBmb250LWZhbWlseTogXCJJbnRlclwiLCBcIkludGVyIFVJXCIsIEhlbHZldGljYSwgQXJpYWwsIHNhbnMtc2VyaWY7XG4gICAgICAgICAgbWFyZ2luOiAwO1xuICAgICAgICAgIGNvbG9yOiAjZmZmO1xuICAgICAgICAgIGZvbnQtc2l6ZTogMTNweDtcbiAgICAgICAgICBsaW5lLWhlaWdodDogMTdweDsgfVxuICAgICAgICAjcGFnZS1wcm9kdWN0cyAjYXV0b21hdGUgLmFuaW0tYXV0b21hdGVfdWkgPiBkaXYgc3BhbiB7XG4gICAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgICAgb3BhY2l0eTogMC42O1xuICAgICAgICAgIGZvbnQtZmFtaWx5OiAxMnB4OyB9XG4gICAgICAgICNwYWdlLXByb2R1Y3RzICNhdXRvbWF0ZSAuYW5pbS1hdXRvbWF0ZV91aSA+IGRpdjpiZWZvcmUge1xuICAgICAgICAgIGNvbnRlbnQ6ICcnO1xuICAgICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICAgIHdpZHRoOiAyMHB4O1xuICAgICAgICAgIGhlaWdodDogNTBweDtcbiAgICAgICAgICBtYXJnaW4tYm90dG9tOiAxMnB4O1xuICAgICAgICAgIGJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7XG4gICAgICAgICAgYmFja2dyb3VuZC1zaXplOiAxMDAlOyB9XG4gICAgICAjcGFnZS1wcm9kdWN0cyAjYXV0b21hdGUgLmFuaW0tYXV0b21hdGVfdWkgLm1hc3RlcjpiZWZvcmUge1xuICAgICAgICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXCIvaW1nL3Byby9wcm8tYXV0b21hdGUtYW5pbWF0aW9uL21hc3Rlci5wbmdcIik7XG4gICAgICAgIHdpZHRoOiAxMDBweDtcbiAgICAgICAgaGVpZ2h0OiAzMHB4O1xuICAgICAgICBiYWNrZ3JvdW5kLXNpemU6IDEwMHB4IDMwcHg7IH1cbiAgICAgICNwYWdlLXByb2R1Y3RzICNhdXRvbWF0ZSAuYW5pbS1hdXRvbWF0ZV91aSAuc3RhZ2luZzpiZWZvcmUge1xuICAgICAgICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXCIvaW1nL3Byby9wcm8tYXV0b21hdGUtYW5pbWF0aW9uL3N0YWdpbmcucG5nXCIpO1xuICAgICAgICB3aWR0aDogMTEwcHg7XG4gICAgICAgIGhlaWdodDogMzBweDtcbiAgICAgICAgYmFja2dyb3VuZC1zaXplOiAxMTBweCAzMHB4OyB9XG4gICAgICAjcGFnZS1wcm9kdWN0cyAjYXV0b21hdGUgLmFuaW0tYXV0b21hdGVfdWkgLnFhOmJlZm9yZSB7XG4gICAgICAgIGJhY2tncm91bmQtaW1hZ2U6IHVybChcIi9pbWcvcHJvL3Byby1hdXRvbWF0ZS1hbmltYXRpb24vcWEucG5nXCIpO1xuICAgICAgICB3aWR0aDogNjFweDtcbiAgICAgICAgaGVpZ2h0OiAzMHB4O1xuICAgICAgICBiYWNrZ3JvdW5kLXNpemU6IDYxcHggMzBweDsgfVxuICAgICAgI3BhZ2UtcHJvZHVjdHMgI2F1dG9tYXRlIC5hbmltLWF1dG9tYXRlX3VpIC5hbmRyb2lkOmJlZm9yZSxcbiAgICAgICNwYWdlLXByb2R1Y3RzICNhdXRvbWF0ZSAuYW5pbS1hdXRvbWF0ZV91aSAuaW9zOmJlZm9yZSxcbiAgICAgICNwYWdlLXByb2R1Y3RzICNhdXRvbWF0ZSAuYW5pbS1hdXRvbWF0ZV91aSAud2ViOmJlZm9yZSB7XG4gICAgICAgIHdpZHRoOiA2MnB4O1xuICAgICAgICBoZWlnaHQ6IDYycHg7XG4gICAgICAgIGJhY2tncm91bmQtc2l6ZTogNjJweCA2MnB4OyB9XG4gICAgICAjcGFnZS1wcm9kdWN0cyAjYXV0b21hdGUgLmFuaW0tYXV0b21hdGVfdWkgLmFuZHJvaWQ6YmVmb3JlIHtcbiAgICAgICAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFwiL2ltZy9wcm8vcHJvLWF1dG9tYXRlLWFuaW1hdGlvbi9hbmRyb2lkLnBuZ1wiKTsgfVxuICAgICAgI3BhZ2UtcHJvZHVjdHMgI2F1dG9tYXRlIC5hbmltLWF1dG9tYXRlX3VpIC5pb3M6YmVmb3JlIHtcbiAgICAgICAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFwiL2ltZy9wcm8vcHJvLWF1dG9tYXRlLWFuaW1hdGlvbi9pb3MucG5nXCIpOyB9XG4gICAgICAjcGFnZS1wcm9kdWN0cyAjYXV0b21hdGUgLmFuaW0tYXV0b21hdGVfdWkgLndlYjpiZWZvcmUge1xuICAgICAgICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXCIvaW1nL3Byby9wcm8tYXV0b21hdGUtYW5pbWF0aW9uL2pzLnBuZ1wiKTsgfVxuICAgICAgI3BhZ2UtcHJvZHVjdHMgI2F1dG9tYXRlIC5hbmltLWF1dG9tYXRlX3VpIC50ZXN0ZmxpZ2h0OmJlZm9yZSB7XG4gICAgICAgIGJhY2tncm91bmQtaW1hZ2U6IHVybChcIi9pbWcvcHJvL3Byby1hdXRvbWF0ZS1hbmltYXRpb24vdGVzdGZsaWdodC5wbmdcIik7XG4gICAgICAgIHdpZHRoOiA1M3B4O1xuICAgICAgICBoZWlnaHQ6IDUzcHg7XG4gICAgICAgIGJhY2tncm91bmQtc2l6ZTogNTNweCA1M3B4OyB9XG4gICAgICAjcGFnZS1wcm9kdWN0cyAjYXV0b21hdGUgLmFuaW0tYXV0b21hdGVfdWkgLnBsYXlzdG9yZTpiZWZvcmUge1xuICAgICAgICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXCIvaW1nL3Byby9wcm8tYXV0b21hdGUtYW5pbWF0aW9uL3BsYXlzdG9yZS5wbmdcIik7XG4gICAgICAgIHdpZHRoOiA1MHB4O1xuICAgICAgICBoZWlnaHQ6IDU1cHg7XG4gICAgICAgIGJhY2tncm91bmQtc2l6ZTogNTBweCA1NXB4OyB9XG4gICAgICAjcGFnZS1wcm9kdWN0cyAjYXV0b21hdGUgLmFuaW0tYXV0b21hdGVfdWkgLndlYmhvb2s6YmVmb3JlIHtcbiAgICAgICAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFwiL2ltZy9wcm8vcHJvLWF1dG9tYXRlLWFuaW1hdGlvbi93ZWJob29rLnBuZ1wiKTtcbiAgICAgICAgd2lkdGg6IDU4cHg7XG4gICAgICAgIGhlaWdodDogNTRweDtcbiAgICAgICAgYmFja2dyb3VuZC1zaXplOiA1OHB4IDU0cHg7IH1cbiAgICAgICNwYWdlLXByb2R1Y3RzICNhdXRvbWF0ZSAuYW5pbS1hdXRvbWF0ZV91aSAubWFzdGVyLFxuICAgICAgI3BhZ2UtcHJvZHVjdHMgI2F1dG9tYXRlIC5hbmltLWF1dG9tYXRlX3VpIC5zdGFnaW5nLFxuICAgICAgI3BhZ2UtcHJvZHVjdHMgI2F1dG9tYXRlIC5hbmltLWF1dG9tYXRlX3VpIC5xYSB7XG4gICAgICAgIGxlZnQ6IDUwJTtcbiAgICAgICAgdG9wOiAxOTVweDsgfVxuICAgICAgI3BhZ2UtcHJvZHVjdHMgI2F1dG9tYXRlIC5hbmltLWF1dG9tYXRlX3VpIC5hbmRyb2lkLFxuICAgICAgI3BhZ2UtcHJvZHVjdHMgI2F1dG9tYXRlIC5hbmltLWF1dG9tYXRlX3VpIC5pb3MsXG4gICAgICAjcGFnZS1wcm9kdWN0cyAjYXV0b21hdGUgLmFuaW0tYXV0b21hdGVfdWkgLndlYiB7XG4gICAgICAgIGxlZnQ6IDUwJTtcbiAgICAgICAgdG9wOiAzNjhweDsgfVxuICAgICAgI3BhZ2UtcHJvZHVjdHMgI2F1dG9tYXRlIC5hbmltLWF1dG9tYXRlX3VpIC5hbmRyb2lkLFxuICAgICAgI3BhZ2UtcHJvZHVjdHMgI2F1dG9tYXRlIC5hbmltLWF1dG9tYXRlX3VpIC53ZWIge1xuICAgICAgICBtYXJnaW4tbGVmdDogMTc0cHg7IH1cbiAgICAgICNwYWdlLXByb2R1Y3RzICNhdXRvbWF0ZSAuYW5pbS1hdXRvbWF0ZV91aSAuaW9zIHtcbiAgICAgICAgbWFyZ2luLWxlZnQ6IC0xNzhweDsgfVxuICAgICAgI3BhZ2UtcHJvZHVjdHMgI2F1dG9tYXRlIC5hbmltLWF1dG9tYXRlX3VpIC50ZXN0ZmxpZ2h0LFxuICAgICAgI3BhZ2UtcHJvZHVjdHMgI2F1dG9tYXRlIC5hbmltLWF1dG9tYXRlX3VpIC5wbGF5c3RvcmUsXG4gICAgICAjcGFnZS1wcm9kdWN0cyAjYXV0b21hdGUgLmFuaW0tYXV0b21hdGVfdWkgLndlYmhvb2sge1xuICAgICAgICBsZWZ0OiA1MCU7XG4gICAgICAgIHRvcDogNTQwcHg7IH1cbiAgICAgICNwYWdlLXByb2R1Y3RzICNhdXRvbWF0ZSAuYW5pbS1hdXRvbWF0ZV91aSAudGVzdGZsaWdodCB7XG4gICAgICAgIG1hcmdpbi1sZWZ0OiAtMzUycHg7IH1cbiAgICAgICNwYWdlLXByb2R1Y3RzICNhdXRvbWF0ZSAuYW5pbS1hdXRvbWF0ZV91aSAucGxheXN0b3JlIHtcbiAgICAgICAgbWFyZ2luLWxlZnQ6IDM1MnB4OyB9XG4gICNwYWdlLXByb2R1Y3RzIC5wcm8tZmVhdHVyZXMge1xuICAgIHBhZGRpbmc6IDE5NnB4IDA7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogIzM5NDA3MjsgfVxuICAgICNwYWdlLXByb2R1Y3RzIC5wcm8tZmVhdHVyZXMgaGdyb3VwIHtcbiAgICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICAgIG1heC13aWR0aDogNTYwcHg7XG4gICAgICBtYXJnaW4tbGVmdDogYXV0bztcbiAgICAgIG1hcmdpbi1yaWdodDogYXV0bzsgfVxuICAgICAgI3BhZ2UtcHJvZHVjdHMgLnByby1mZWF0dXJlcyBoZ3JvdXAgaDMge1xuICAgICAgICBjb2xvcjogI2ZmZjtcbiAgICAgICAgZm9udC1zaXplOiAzNnB4O1xuICAgICAgICBmb250LXdlaWdodDogNjAwO1xuICAgICAgICBsaW5lLWhlaWdodDogNDBweDtcbiAgICAgICAgbWFyZ2luLXRvcDogMDsgfVxuICAgICAgI3BhZ2UtcHJvZHVjdHMgLnByby1mZWF0dXJlcyBoZ3JvdXAgcCB7XG4gICAgICAgIGNvbG9yOiAjZDdkOWViO1xuICAgICAgICBmb250LWZhbWlseTogXCJJbnRlclwiLCBcIkludGVyIFVJXCIsIEhlbHZldGljYSwgQXJpYWwsIHNhbnMtc2VyaWY7XG4gICAgICAgIGZvbnQtc2l6ZTogMjBweDtcbiAgICAgICAgbGluZS1oZWlnaHQ6IDMycHg7IH1cbiAgICAjcGFnZS1wcm9kdWN0cyAucHJvLWZlYXR1cmVzIHVsIHtcbiAgICAgIG1hcmdpbjogMCAtMjRweCAwO1xuICAgICAgcGFkZGluZzogMDtcbiAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICBmbGV4LXdyYXA6IHdyYXA7XG4gICAgICBsaXN0LXN0eWxlLXR5cGU6IG5vbmU7IH1cbiAgICAjcGFnZS1wcm9kdWN0cyAucHJvLWZlYXR1cmVzIGxpIHtcbiAgICAgIGZsZXg6IDAgMCAyNSU7XG4gICAgICBtYXJnaW4tdG9wOiA4NnB4O1xuICAgICAgcGFkZGluZzogMCAyNHB4OyB9XG4gICAgICAjcGFnZS1wcm9kdWN0cyAucHJvLWZlYXR1cmVzIGxpIGg1IHtcbiAgICAgICAgY29sb3I6ICNmZmY7XG4gICAgICAgIGZvbnQtc2l6ZTogMjBweDtcbiAgICAgICAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgICAgICAgbWFyZ2luLWJvdHRvbTogMThweDtcbiAgICAgICAgbWFyZ2luLXRvcDogMDtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsgfVxuICAgICAgI3BhZ2UtcHJvZHVjdHMgLnByby1mZWF0dXJlcyBsaSBwIHtcbiAgICAgICAgY29sb3I6ICNiOWJjZDg7XG4gICAgICAgIGZvbnQtZmFtaWx5OiBcIkludGVyXCIsIFwiSW50ZXIgVUlcIiwgSGVsdmV0aWNhLCBBcmlhbCwgc2Fucy1zZXJpZjtcbiAgICAgICAgZm9udC1zaXplOiAxNnB4O1xuICAgICAgICBsaW5lLWhlaWdodDogMjhweDsgfVxuICAgICAgI3BhZ2UtcHJvZHVjdHMgLnByby1mZWF0dXJlcyBsaTpudGgtY2hpbGQoMikge1xuICAgICAgICB0cmFuc2l0aW9uLWRlbGF5OiAuMXMgIWltcG9ydGFudDsgfVxuICAgICAgI3BhZ2UtcHJvZHVjdHMgLnByby1mZWF0dXJlcyBsaTpudGgtY2hpbGQoMykge1xuICAgICAgICB0cmFuc2l0aW9uLWRlbGF5OiAuMnMgIWltcG9ydGFudDsgfVxuICAgICAgI3BhZ2UtcHJvZHVjdHMgLnByby1mZWF0dXJlcyBsaTpudGgtY2hpbGQoNCkge1xuICAgICAgICB0cmFuc2l0aW9uLWRlbGF5OiAuM3MgIWltcG9ydGFudDsgfVxuICAgICAgI3BhZ2UtcHJvZHVjdHMgLnByby1mZWF0dXJlcyBsaTpudGgtY2hpbGQoNSkge1xuICAgICAgICB0cmFuc2l0aW9uLWRlbGF5OiAuNHMgIWltcG9ydGFudDsgfVxuICAgICAgI3BhZ2UtcHJvZHVjdHMgLnByby1mZWF0dXJlcyBsaTpudGgtY2hpbGQoNikge1xuICAgICAgICB0cmFuc2l0aW9uLWRlbGF5OiAuNXMgIWltcG9ydGFudDsgfVxuICAgICAgI3BhZ2UtcHJvZHVjdHMgLnByby1mZWF0dXJlcyBsaTpudGgtY2hpbGQoNykge1xuICAgICAgICB0cmFuc2l0aW9uLWRlbGF5OiAuNnMgIWltcG9ydGFudDsgfVxuICAgICAgI3BhZ2UtcHJvZHVjdHMgLnByby1mZWF0dXJlcyBsaTpudGgtY2hpbGQoOCkge1xuICAgICAgICB0cmFuc2l0aW9uLWRlbGF5OiAuN3MgIWltcG9ydGFudDsgfVxuICAgICNwYWdlLXByb2R1Y3RzIC5wcm8tZmVhdHVyZXMgW2NsYXNzXj1cInByby1mZWF0dXJlLS1cIl0gaDU6OmJlZm9yZSB7XG4gICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgIGNvbnRlbnQ6ICcnO1xuICAgICAgd2lkdGg6IDI0cHg7XG4gICAgICBoZWlnaHQ6IDI0cHg7XG4gICAgICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXCIvaW1nL3Byby9wcm8tZmVhdHVyZS1zcHJpdGUucG5nXCIpO1xuICAgICAgYmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdDtcbiAgICAgIGJhY2tncm91bmQtc2l6ZTogMjRweCAxOTJweDtcbiAgICAgIG1hcmdpbi1yaWdodDogMTJweDsgfVxuICAgICNwYWdlLXByb2R1Y3RzIC5wcm8tZmVhdHVyZXMgLnByby1mZWF0dXJlLS1hcHAtZGFzaGJvYXJkIGg1OjpiZWZvcmUge1xuICAgICAgYmFja2dyb3VuZC1wb3NpdGlvbjogMCAwOyB9XG4gICAgI3BhZ2UtcHJvZHVjdHMgLnByby1mZWF0dXJlcyAucHJvLWZlYXR1cmUtLWNvbmZpZ3VyYWJsZSBoNTo6YmVmb3JlIHtcbiAgICAgIGJhY2tncm91bmQtcG9zaXRpb246IDAgY2FsYygtMSAqIDI0cHgpOyB9XG4gICAgI3BhZ2UtcHJvZHVjdHMgLnByby1mZWF0dXJlcyAucHJvLWZlYXR1cmUtLWNsZWFuLWJ1aWxkcyBoNTo6YmVmb3JlIHtcbiAgICAgIGJhY2tncm91bmQtcG9zaXRpb246IDAgY2FsYygtMiAqIDI0cHgpOyB9XG4gICAgI3BhZ2UtcHJvZHVjdHMgLnByby1mZWF0dXJlcyAucHJvLWZlYXR1cmUtLW1vYmlsZS1jaS1jZCBoNTo6YmVmb3JlIHtcbiAgICAgIGJhY2tncm91bmQtcG9zaXRpb246IDAgY2FsYygtMyAqIDI0cHgpOyB9XG4gICAgI3BhZ2UtcHJvZHVjdHMgLnByby1mZWF0dXJlcyAucHJvLWZlYXR1cmUtLWdpdC1pbnRlZ3JhdGlvbnMgaDU6OmJlZm9yZSB7XG4gICAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwIGNhbGMoLTQgKiAyNHB4KTsgfVxuICAgICNwYWdlLXByb2R1Y3RzIC5wcm8tZmVhdHVyZXMgLnByby1mZWF0dXJlLS1jb25uZWN0ZWQtc2VydmljZXMgaDU6OmJlZm9yZSB7XG4gICAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwIGNhbGMoLTUgKiAyNHB4KTsgfVxuICAgICNwYWdlLXByb2R1Y3RzIC5wcm8tZmVhdHVyZXMgLnByby1mZWF0dXJlLS1saXZlLWFwcC11cGRhdGluZyBoNTo6YmVmb3JlIHtcbiAgICAgIGJhY2tncm91bmQtcG9zaXRpb246IDAgY2FsYygtNiAqIDI0cHgpOyB9XG4gICAgI3BhZ2UtcHJvZHVjdHMgLnByby1mZWF0dXJlcyAucHJvLWZlYXR1cmUtLXJvbGUtYmFzZWQtY29udHJvbHMgaDU6OmJlZm9yZSB7XG4gICAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwIGNhbGMoLTcgKiAyNHB4KTsgfVxuICAgIEBtZWRpYSAobWF4LXdpZHRoOiAxMjE5cHgpIHtcbiAgICAgICNwYWdlLXByb2R1Y3RzIC5wcm8tZmVhdHVyZXMgbGkge1xuICAgICAgICBmbGV4OiAwIDAgMzMlOyB9IH1cbiAgICBAbWVkaWEgKG1heC13aWR0aDogOTkxcHgpIHtcbiAgICAgICNwYWdlLXByb2R1Y3RzIC5wcm8tZmVhdHVyZXMge1xuICAgICAgICBwYWRkaW5nOiA5MHB4IDA7XG4gICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsgfVxuICAgICAgICAjcGFnZS1wcm9kdWN0cyAucHJvLWZlYXR1cmVzIGg1IHtcbiAgICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsgfVxuICAgICAgICAjcGFnZS1wcm9kdWN0cyAucHJvLWZlYXR1cmVzIGxpIHtcbiAgICAgICAgICBmbGV4OiAwIDAgNTAlOyB9IH1cbiAgICBAbWVkaWEgKG1heC13aWR0aDogNzY3cHgpIHtcbiAgICAgICNwYWdlLXByb2R1Y3RzIC5wcm8tZmVhdHVyZXMgaGdyb3VwIGgzIHtcbiAgICAgICAgZm9udC1zaXplOiAzMHB4OyB9XG4gICAgICAjcGFnZS1wcm9kdWN0cyAucHJvLWZlYXR1cmVzIGxpIHtcbiAgICAgICAgZmxleDogMCAwIDEwMCU7XG4gICAgICAgIG1hcmdpbi10b3A6IDM2cHg7IH0gfVxuICAjcGFnZS1wcm9kdWN0cyAuZ2V0LXN0YXJ0ZWQge1xuICAgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCg0NWRlZywgIzFiMWYzYSAwJSwgIzI5MmY1MiAxMDAlKTtcbiAgICBvdmVyZmxvdzogYXV0bzsgfVxuICAgICNwYWdlLXByb2R1Y3RzIC5nZXQtc3RhcnRlZCAuY29udGFpbmVyIHtcbiAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgbWFyZ2luLWJvdHRvbTogMTIwcHg7XG4gICAgICBtYXJnaW4tdG9wOiAxMjBweDsgfVxuICAgICNwYWdlLXByb2R1Y3RzIC5nZXQtc3RhcnRlZCBoZ3JvdXAge1xuICAgICAgbGV0dGVyLXNwYWNpbmc6IC0uMDI1ZW07XG4gICAgICBmbGV4LWdyb3c6IDE7IH1cbiAgICAjcGFnZS1wcm9kdWN0cyAuZ2V0LXN0YXJ0ZWQgaDIge1xuICAgICAgY29sb3I6ICNlMGUzZjY7XG4gICAgICBmb250LXNpemU6IDI4cHg7XG4gICAgICBsaW5lLWhlaWdodDogMzZweDtcbiAgICAgIGZvbnQtd2VpZ2h0OiA0MDA7XG4gICAgICBsZXR0ZXItc3BhY2luZzogLTAuMDJlbTtcbiAgICAgIG1hcmdpbjogMDtcbiAgICAgIG1heC13aWR0aDogNjgwcHg7IH1cbiAgICAgICNwYWdlLXByb2R1Y3RzIC5nZXQtc3RhcnRlZCBoMiBzdHJvbmcge1xuICAgICAgICBmb250LXdlaWdodDogNjAwO1xuICAgICAgICBjb2xvcjogI2ZmZjsgfVxuICAgICNwYWdlLXByb2R1Y3RzIC5nZXQtc3RhcnRlZCBoMyB7XG4gICAgICBjb2xvcjogIzhhYTZmZjtcbiAgICAgIGZvbnQtc2l6ZTogMjRweDtcbiAgICAgIGxpbmUtaGVpZ2h0OiAzNnB4O1xuICAgICAgZm9udC13ZWlnaHQ6IDQwMDtcbiAgICAgIG1hcmdpbjogMDsgfVxuICAgICNwYWdlLXByb2R1Y3RzIC5nZXQtc3RhcnRlZCAuYnRuIHtcbiAgICAgIGZvbnQtc2l6ZTogMTVweDtcbiAgICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XG4gICAgICBsZXR0ZXItc3BhY2luZzogMC4xMGVtO1xuICAgICAgZm9udC13ZWlnaHQ6IDcwMDtcbiAgICAgIGJvcmRlci1yYWRpdXM6IDEwMHB4O1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogIzVmYTNmZjtcbiAgICAgIHBhZGRpbmc6IDE2cHggMjhweCAxNHB4OyB9XG4gICAgICAjcGFnZS1wcm9kdWN0cyAuZ2V0LXN0YXJ0ZWQgLmJ0bjpob3ZlciB7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6ICM0ODk1ZmM7IH1cbiAgICBAbWVkaWEgKG1heC13aWR0aDogOTkxcHgpIHtcbiAgICAgICNwYWdlLXByb2R1Y3RzIC5nZXQtc3RhcnRlZCAuY29udGFpbmVyIHtcbiAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsgfVxuICAgICAgI3BhZ2UtcHJvZHVjdHMgLmdldC1zdGFydGVkIGhncm91cCB7XG4gICAgICAgIHBhZGRpbmctYm90dG9tOiAxNnB4OyB9XG4gICAgICAjcGFnZS1wcm9kdWN0cyAuZ2V0LXN0YXJ0ZWQgLmJ0bi1ncm91cCB7XG4gICAgICAgIHBhZGRpbmctYm90dG9tOiA5NnB4OyB9IH1cbiJdfQ== */\n"
  },
  {
    "path": "content/css/pages/products/enterprise-core.css",
    "content": "#page-products-enterprise-core .sub-header .btn {\n  color: #1A232F;\n  background-color: #FF9982;\n  font-weight: bold;\n  line-height: normal;\n  font-size: 11px;\n  text-align: center;\n  letter-spacing: 0.08em;\n  text-transform: uppercase;\n  padding-left: 15px;\n  padding-right: 15px; }\n  #page-products-enterprise-core .sub-header .btn:hover {\n    background-color: #ffbaab; }\n\n#page-products-enterprise-core h3,\n#page-products-enterprise-core h2,\n#page-products-enterprise-core p.large {\n  letter-spacing: -0.01em; }\n\n#page-products-enterprise-core p {\n  font-weight: 400; }\n  #page-products-enterprise-core p:not(.large) {\n    font-family: \"Graphik\", \"Avenir Next\", \"Helvetica Neue\", Helvetica, sans-serif; }\n\n#page-products-enterprise-core main ul {\n  list-style-type: none;\n  margin: 0;\n  padding: 0; }\n\n#page-products-enterprise-core .top {\n  margin-top: -148px;\n  padding-top: 260px;\n  padding-bottom: 180px;\n  background: #182434;\n  position: relative;\n  z-index: 0; }\n  #page-products-enterprise-core .top:before {\n    content: '';\n    display: block;\n    background-image: url(\"/img/products/enterprise-core/enterprise-core-hero-bg.png\");\n    background-repeat: no-repeat;\n    background-size: 1096px 760px;\n    width: 1096px;\n    height: 760px;\n    position: absolute;\n    bottom: 0;\n    right: 50%;\n    margin-right: -820px;\n    z-index: 1; }\n  #page-products-enterprise-core .top hgroup {\n    position: relative;\n    z-index: 2;\n    color: #fff;\n    max-width: 624px; }\n    #page-products-enterprise-core .top hgroup h4 {\n      line-height: 25px;\n      font-size: 12px;\n      letter-spacing: 0.14em;\n      text-transform: uppercase;\n      color: #CED6E0;\n      font-family: \"Roboto Mono\", Menlo, Monaco, Consolas, \"Courier New\", monospace; }\n    #page-products-enterprise-core .top hgroup h1 {\n      font-size: 48px;\n      letter-spacing: -0.03em; }\n    #page-products-enterprise-core .top hgroup p {\n      line-height: 39px;\n      font-size: 22px;\n      color: #CED6E0; }\n    @media (max-width: 768px) {\n      #page-products-enterprise-core .top hgroup {\n        text-align: center;\n        margin-left: auto;\n        margin-right: auto; } }\n    @media (max-width: 480px) {\n      #page-products-enterprise-core .top hgroup h1 {\n        font-size: 40px; }\n      #page-products-enterprise-core .top hgroup p {\n        line-height: 30px;\n        font-size: 20px; } }\n  @media (max-width: 768px) {\n    #page-products-enterprise-core .top {\n      padding-top: 190px;\n      padding-bottom: 94px; } }\n\n#page-products-enterprise-core main section {\n  padding-top: 200px;\n  padding-bottom: 200px; }\n  #page-products-enterprise-core main section:first-child {\n    padding-bottom: 50px; }\n  #page-products-enterprise-core main section.offwhite {\n    background-color: #F6F8FB; }\n\n#page-products-enterprise-core main .container {\n  position: relative; }\n\n#page-products-enterprise-core main .container + .container {\n  margin-top: 260px; }\n\n#page-products-enterprise-core main hgroup {\n  margin-bottom: 100px; }\n\n#page-products-enterprise-core main .measure {\n  max-width: 600px; }\n\n#page-products-enterprise-core main .center {\n  text-align: center; }\n\n#page-products-enterprise-core main h3 {\n  color: #FF9982;\n  font-size: 32px;\n  margin-bottom: 0;\n  margin-top: 0;\n  font-weight: 600; }\n\n#page-products-enterprise-core main h2 {\n  color: #020814;\n  font-size: 36px;\n  margin-top: 10px;\n  margin-bottom: 16px;\n  font-weight: 700; }\n\n#page-products-enterprise-core main p.large {\n  line-height: 39px;\n  font-size: 22px;\n  color: #5B708B; }\n  #page-products-enterprise-core main p.large em {\n    font-style: normal;\n    color: #2F3A48; }\n\n@media (max-width: 992px) {\n  #page-products-enterprise-core main section {\n    padding-top: 112px;\n    padding-bottom: 130px; }\n  #page-products-enterprise-core main hgroup {\n    margin-bottom: 0; }\n  #page-products-enterprise-core main h3 {\n    font-size: 28px; }\n  #page-products-enterprise-core main h2 {\n    font-size: 32px; }\n  #page-products-enterprise-core main .container + .container {\n    margin-top: 200px; } }\n\n@media (max-width: 768px) {\n  #page-products-enterprise-core main hgroup {\n    text-align: center;\n    margin-left: auto;\n    margin-right: auto; }\n  #page-products-enterprise-core main .container + .container {\n    margin-top: 144px; } }\n\n@media (max-width: 480px) {\n  #page-products-enterprise-core main section {\n    padding-top: 82px;\n    padding-bottom: 90px; } }\n\n#page-products-enterprise-core .feature-table {\n  width: 100%; }\n  #page-products-enterprise-core .feature-table tr td {\n    border-top: 2px solid #F2F5FA; }\n  #page-products-enterprise-core .feature-table tr:first-child td {\n    border-top: 0; }\n  #page-products-enterprise-core .feature-table tr td:nth-child(1) {\n    font-size: 20px;\n    letter-spacing: 0.08em;\n    text-transform: uppercase;\n    font-weight: 600;\n    display: -ms-flexbox;\n    display: flex; }\n    #page-products-enterprise-core .feature-table tr td:nth-child(1) svg {\n      margin-right: 16px; }\n  #page-products-enterprise-core .feature-table tr td:nth-child(2) {\n    font-size: 18px;\n    color: #5B708B; }\n  #page-products-enterprise-core .feature-table tr td:nth-child(3) {\n    color: #5B708B; }\n  #page-products-enterprise-core .feature-table tr td {\n    padding: 32px 48px; }\n    #page-products-enterprise-core .feature-table tr td:first-child {\n      padding-left: 0; }\n    #page-products-enterprise-core .feature-table tr td:last-child {\n      padding-right: 0; }\n  @media (max-width: 992px) {\n    #page-products-enterprise-core .feature-table tr {\n      display: -ms-flexbox;\n      display: flex;\n      -ms-flex-wrap: wrap;\n          flex-wrap: wrap;\n      padding-bottom: 18px; }\n    #page-products-enterprise-core .feature-table tr td:first-child {\n      -ms-flex: 0 0 100%;\n          flex: 0 0 100%;\n      padding-top: 48px; }\n    #page-products-enterprise-core .feature-table tr td:not(:first-child) {\n      -ms-flex: 0 0 100%;\n          flex: 0 0 100%;\n      border-top: 0;\n      padding-top: 0;\n      padding-left: 0;\n      max-width: 420px; } }\n  @media (max-width: 768px) {\n    #page-products-enterprise-core .feature-table tr {\n      max-width: 420px;\n      margin-left: auto;\n      margin-right: auto; } }\n\n#page-products-enterprise-core .checkmark-list {\n  margin-bottom: -26px; }\n  #page-products-enterprise-core .checkmark-list li {\n    position: relative;\n    display: -ms-flexbox;\n    display: flex; }\n  #page-products-enterprise-core .checkmark-list li:before {\n    position: relative;\n    display: block;\n    content: ''; }\n  #page-products-enterprise-core .checkmark-list > li {\n    margin-bottom: 26px; }\n  #page-products-enterprise-core .checkmark-list > li:before {\n    background-image: url(\"/img/checkmark-salmon.svg\");\n    background-size: 20px 20px;\n    height: 20px;\n    width: 20px;\n    -ms-flex: 0 0 20px;\n        flex: 0 0 20px;\n    margin-right: 16px; }\n  #page-products-enterprise-core .checkmark-list li ul {\n    margin-top: 20px; }\n  #page-products-enterprise-core .checkmark-list li ul > li {\n    line-height: 17px;\n    font-size: 12px;\n    position: relative; }\n    #page-products-enterprise-core .checkmark-list li ul > li:before {\n      background-image: url(\"/img/checkmark.svg\");\n      background-size: 10px 8px;\n      height: 8px;\n      width: 10px;\n      -ms-flex: 0 0 10px;\n          flex: 0 0 10px;\n      top: 2px;\n      margin-right: 8px; }\n    #page-products-enterprise-core .checkmark-list li ul > li + li {\n      margin-top: 14px; }\n  #page-products-enterprise-core .checkmark-list.large {\n    line-height: 33px;\n    font-size: 20px;\n    color: #5B708B; }\n  #page-products-enterprise-core .checkmark-list.large li:before {\n    top: 4px; }\n  #page-products-enterprise-core .checkmark-list--large li:before {\n    width: 24px;\n    height: 24px;\n    -ms-flex: 0 0 24px;\n        flex: 0 0 24px;\n    background-size: 24px 24px;\n    margin-right: 20px; }\n  #page-products-enterprise-core .checkmark-list.two-col {\n    display: -ms-flexbox;\n    display: flex;\n    -ms-flex-wrap: wrap;\n        flex-wrap: wrap;\n    margin-left: -30px;\n    margin-right: -30px; }\n    #page-products-enterprise-core .checkmark-list.two-col li {\n      -ms-flex: 0 0 50%;\n          flex: 0 0 50%;\n      padding-left: 30px;\n      padding-right: 30px; }\n  #page-products-enterprise-core .checkmark-list hgroup {\n    margin: 0 0 16px; }\n    #page-products-enterprise-core .checkmark-list hgroup h5 {\n      margin: 0;\n      font-weight: 600;\n      line-height: 20px;\n      font-size: 16px;\n      color: #3C536F; }\n    #page-products-enterprise-core .checkmark-list hgroup p {\n      line-height: 23px;\n      font-size: 14px;\n      color: #92A1B3; }\n  @media (max-width: 992px) {\n    #page-products-enterprise-core .checkmark-list.large {\n      line-height: 30px;\n      font-size: 18px;\n      margin-top: 60px; } }\n  @media (max-width: 768px) {\n    #page-products-enterprise-core .checkmark-list.two-col {\n      max-width: 420px;\n      margin-left: auto;\n      margin-right: auto; }\n      #page-products-enterprise-core .checkmark-list.two-col li {\n        -ms-flex: 0 0 100%;\n            flex: 0 0 100%; }\n    #page-products-enterprise-core .checkmark-list hgroup {\n      text-align: left;\n      margin-bottom: 0; }\n      #page-products-enterprise-core .checkmark-list hgroup p {\n        margin-bottom: 0; } }\n\n#page-products-enterprise-core .two-col {\n  display: -ms-flexbox;\n  display: flex; }\n  #page-products-enterprise-core .two-col > div {\n    -ms-flex: 0 0 50%;\n        flex: 0 0 50%; }\n  #page-products-enterprise-core .two-col .feature-list {\n    -ms-flex: 0 0 55%;\n        flex: 0 0 55%;\n    padding-right: 50px; }\n  #page-products-enterprise-core .two-col .checkmark-list {\n    -ms-flex: 0 0 45%;\n        flex: 0 0 45%;\n    padding-left: 50px; }\n  @media (max-width: 992px) {\n    #page-products-enterprise-core .two-col .checkmark-list {\n      margin-top: 40px; } }\n  @media (max-width: 768px) {\n    #page-products-enterprise-core .two-col .feature-list {\n      padding-right: 0; }\n    #page-products-enterprise-core .two-col .checkmark-list {\n      padding-left: 0;\n      max-width: 480px;\n      margin-left: auto;\n      margin-right: auto; } }\n\n@media (max-width: 992px) {\n  #page-products-enterprise-core .two-col:not(.checkmark-list) {\n    -ms-flex-direction: column;\n        flex-direction: column; }\n    #page-products-enterprise-core .two-col:not(.checkmark-list) > div {\n      -ms-flex: 0 0 100%;\n          flex: 0 0 100%; } }\n\n#page-products-enterprise-core .feature-list li {\n  display: -ms-flexbox;\n  display: flex; }\n\n#page-products-enterprise-core .feature-list svg {\n  -ms-flex: 0 0 48px;\n      flex: 0 0 48px;\n  margin-right: 36px; }\n\n#page-products-enterprise-core .feature-list hgroup {\n  margin: 0; }\n\n#page-products-enterprise-core .feature-list h4 {\n  font-size: 24px;\n  line-height: 1.2;\n  font-weight: 600;\n  margin-bottom: 18px; }\n\n#page-products-enterprise-core .feature-list p {\n  margin: 0 0 6px;\n  line-height: 32px;\n  font-size: 18px;\n  color: #5B708B; }\n\n#page-products-enterprise-core .feature-list li + li {\n  margin-top: 68px; }\n\n@media (max-width: 992px) {\n  #page-products-enterprise-core .feature-list {\n    margin-top: 60px; }\n    #page-products-enterprise-core .feature-list li + li {\n      margin-top: 50px; } }\n\n@media (max-width: 768px) {\n  #page-products-enterprise-core .feature-list {\n    padding-right: 0;\n    margin-top: 30px;\n    max-width: 480px;\n    margin-left: auto;\n    margin-right: auto; }\n    #page-products-enterprise-core .feature-list svg {\n      margin-right: 0;\n      margin-bottom: 15px; }\n    #page-products-enterprise-core .feature-list li {\n      -ms-flex-align: center;\n          align-items: center;\n      display: -ms-flexbox;\n      display: flex;\n      -ms-flex-direction: column;\n          flex-direction: column; } }\n\n@media (max-width: 480px) {\n  #page-products-enterprise-core .feature-list h4 {\n    font-size: 20px; }\n  #page-products-enterprise-core .feature-list p {\n    line-height: 28px;\n    font-size: 16px; } }\n\n#page-products-enterprise-core .feature-list--small li {\n  -ms-flex-direction: column;\n      flex-direction: column; }\n\n#page-products-enterprise-core .feature-list--small svg {\n  margin-bottom: 20px; }\n\n#page-products-enterprise-core .feature-list--small h4 {\n  font-size: 20px;\n  color: #020814; }\n\n#page-products-enterprise-core .feature-list--small p {\n  line-height: 26px;\n  font-size: 16px;\n  color: #5B708B; }\n\n#page-products-enterprise-core .three-col {\n  display: -ms-flexbox;\n  display: flex; }\n  #page-products-enterprise-core .three-col li {\n    -ms-flex: 0 0 33%;\n        flex: 0 0 33%;\n    margin: 0;\n    padding: 0 32px; }\n  #page-products-enterprise-core .three-col li + li {\n    margin-top: 0; }\n  #page-products-enterprise-core .three-col li:first-child {\n    padding-left: 0; }\n  #page-products-enterprise-core .three-col li:last-child {\n    padding-right: 0; }\n  @media (max-width: 768px) {\n    #page-products-enterprise-core .three-col {\n      -ms-flex-direction: column;\n          flex-direction: column; }\n      #page-products-enterprise-core .three-col li {\n        -ms-flex: 0 0 100%;\n            flex: 0 0 100%;\n        padding: 0; }\n      #page-products-enterprise-core .three-col li + li {\n        margin-top: 30px; } }\n\n#page-products-enterprise-core .integrations {\n  position: relative; }\n\n#page-products-enterprise-core .integrations__identity-vault,\n#page-products-enterprise-core .integrations__aws-amplify,\n#page-products-enterprise-core .integrations__couchbase,\n#page-products-enterprise-core .integrations__active-directory {\n  position: absolute;\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-direction: column;\n      flex-direction: column;\n  -ms-flex-align: center;\n      align-items: center;\n  font-size: 13px;\n  text-align: center;\n  font-weight: 600;\n  color: #5B708B; }\n  #page-products-enterprise-core .integrations__identity-vault i,\n  #page-products-enterprise-core .integrations__aws-amplify i,\n  #page-products-enterprise-core .integrations__couchbase i,\n  #page-products-enterprise-core .integrations__active-directory i {\n    border-radius: 999px;\n    display: -ms-inline-flexbox;\n    display: inline-flex;\n    -ms-flex-pack: center;\n        justify-content: center;\n    -ms-flex-align: center;\n        align-items: center;\n    box-shadow: 0px 2px 8px rgba(2, 8, 20, 0.1), 0px 8px 16px rgba(2, 8, 20, 0.08);\n    background-color: #fff;\n    margin-bottom: 14px; }\n  #page-products-enterprise-core .integrations__identity-vault i::before,\n  #page-products-enterprise-core .integrations__aws-amplify i::before,\n  #page-products-enterprise-core .integrations__couchbase i::before,\n  #page-products-enterprise-core .integrations__active-directory i::before {\n    content: '';\n    display: block;\n    background-image: url(\"/img/products/enterprise-core/enterprise-core-integrations-sprite.png\");\n    background-repeat: no-repeat;\n    background-size: 112px 294px;\n    background-position: center center; }\n\n#page-products-enterprise-core .integrations__identity-vault {\n  top: 0;\n  left: 242px; }\n  #page-products-enterprise-core .integrations__identity-vault i {\n    width: 124px;\n    height: 124px; }\n  #page-products-enterprise-core .integrations__identity-vault i::before {\n    width: 56px;\n    height: 56px;\n    background-position: 0 -151px; }\n\n#page-products-enterprise-core .integrations__aws-amplify {\n  top: 172px;\n  left: 0; }\n  #page-products-enterprise-core .integrations__aws-amplify i {\n    width: 192px;\n    height: 192px; }\n  #page-products-enterprise-core .integrations__aws-amplify i::before {\n    width: 112px;\n    height: 84px;\n    background-position: 0 0; }\n\n#page-products-enterprise-core .integrations__couchbase {\n  top: 290px;\n  left: 354px; }\n  #page-products-enterprise-core .integrations__couchbase i {\n    width: 124px;\n    height: 124px; }\n  #page-products-enterprise-core .integrations__couchbase i::before {\n    width: 64px;\n    height: 65px;\n    background-position: 0 -85px; }\n\n#page-products-enterprise-core .integrations__active-directory {\n  top: 500px;\n  left: 172px; }\n  #page-products-enterprise-core .integrations__active-directory i {\n    width: 160px;\n    height: 160px; }\n  #page-products-enterprise-core .integrations__active-directory i::before {\n    width: 83px;\n    height: 84px;\n    background-position: 0 -210px; }\n\n@media (max-width: 1220px) {\n  #page-products-enterprise-core .integrations__identity-vault {\n    left: 212px; }\n  #page-products-enterprise-core .integrations__couchbase {\n    left: 284px; }\n  #page-products-enterprise-core .integrations__active-directory {\n    left: 119px; } }\n\n@media (max-width: 992px) {\n  #page-products-enterprise-core .integrations {\n    -ms-flex: none;\n        flex: none;\n    height: 362px;\n    width: 586px;\n    margin-bottom: 40px; }\n  #page-products-enterprise-core .integrations__identity-vault {\n    left: 232px; }\n  #page-products-enterprise-core .integrations__aws-amplify {\n    top: 82px; }\n  #page-products-enterprise-core .integrations__couchbase {\n    left: 251px;\n    top: 188px; }\n  #page-products-enterprise-core .integrations__active-directory {\n    left: 416px;\n    top: 70px; } }\n\n@media (max-width: 768px) {\n  #page-products-enterprise-core .integrations {\n    position: absolute;\n    top: -70px;\n    left: 50%;\n    -webkit-transform-origin: center center;\n            transform-origin: center center;\n    -webkit-transform: translateX(-50%) scale(0.8);\n            transform: translateX(-50%) scale(0.8); }\n  #page-products-enterprise-core .integrations + div {\n    margin-top: 300px; } }\n\n@media (max-width: 768px) {\n  #page-products-enterprise-core .integrations {\n    top: -90px;\n    -webkit-transform: translateX(-50%) scale(0.6);\n            transform: translateX(-50%) scale(0.6); }\n  #page-products-enterprise-core .integrations + div {\n    margin-top: 260px; } }\n\n#page-products-enterprise-core .call-to-action {\n  padding-top: 140px; }\n  #page-products-enterprise-core .call-to-action .container {\n    max-width: 748px; }\n  #page-products-enterprise-core .call-to-action hgroup {\n    margin: 0;\n    padding: 0; }\n    #page-products-enterprise-core .call-to-action hgroup p {\n      font-weight: 400;\n      font-size: 28px;\n      text-align: center;\n      color: #5B708B; }\n    #page-products-enterprise-core .call-to-action hgroup strong {\n      color: #2F3A48;\n      font-weight: 600; }\n    #page-products-enterprise-core .call-to-action hgroup h4 {\n      font-weight: 600;\n      font-size: 24px;\n      color: #FF9982;\n      margin: 60px 0; }\n  @media (max-width: 768px) {\n    #page-products-enterprise-core .call-to-action hgroup p {\n      font-size: 24px; } }\n  @media (max-width: 480px) {\n    #page-products-enterprise-core .call-to-action {\n      padding-top: 82px; } }\n\n/*# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImVudGVycHJpc2UtY29yZS5jc3MiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7RUFDRSxlQUFlO0VBQ2YsMEJBQTBCO0VBQzFCLGtCQUFrQjtFQUNsQixvQkFBb0I7RUFDcEIsZ0JBQWdCO0VBQ2hCLG1CQUFtQjtFQUNuQix1QkFBdUI7RUFDdkIsMEJBQTBCO0VBQzFCLG1CQUFtQjtFQUNuQixvQkFBb0IsRUFBRTtFQUN0QjtJQUNFLDBCQUEwQixFQUFFOztBQUVoQzs7O0VBR0Usd0JBQXdCLEVBQUU7O0FBRTVCO0VBQ0UsaUJBQWlCLEVBQUU7RUFDbkI7SUFDRSwrRUFBK0UsRUFBRTs7QUFFckY7RUFDRSxzQkFBc0I7RUFDdEIsVUFBVTtFQUNWLFdBQVcsRUFBRTs7QUFFZjtFQUNFLG1CQUFtQjtFQUNuQixtQkFBbUI7RUFDbkIsc0JBQXNCO0VBQ3RCLG9CQUFvQjtFQUNwQixtQkFBbUI7RUFDbkIsV0FBVyxFQUFFO0VBQ2I7SUFDRSxZQUFZO0lBQ1osZUFBZTtJQUNmLG1GQUFtRjtJQUNuRiw2QkFBNkI7SUFDN0IsOEJBQThCO0lBQzlCLGNBQWM7SUFDZCxjQUFjO0lBQ2QsbUJBQW1CO0lBQ25CLFVBQVU7SUFDVixXQUFXO0lBQ1gscUJBQXFCO0lBQ3JCLFdBQVcsRUFBRTtFQUNmO0lBQ0UsbUJBQW1CO0lBQ25CLFdBQVc7SUFDWCxZQUFZO0lBQ1osaUJBQWlCLEVBQUU7SUFDbkI7TUFDRSxrQkFBa0I7TUFDbEIsZ0JBQWdCO01BQ2hCLHVCQUF1QjtNQUN2QiwwQkFBMEI7TUFDMUIsZUFBZTtNQUNmLDhFQUE4RSxFQUFFO0lBQ2xGO01BQ0UsZ0JBQWdCO01BQ2hCLHdCQUF3QixFQUFFO0lBQzVCO01BQ0Usa0JBQWtCO01BQ2xCLGdCQUFnQjtNQUNoQixlQUFlLEVBQUU7SUFDbkI7TUFDRTtRQUNFLG1CQUFtQjtRQUNuQixrQkFBa0I7UUFDbEIsbUJBQW1CLEVBQUUsRUFBRTtJQUMzQjtNQUNFO1FBQ0UsZ0JBQWdCLEVBQUU7TUFDcEI7UUFDRSxrQkFBa0I7UUFDbEIsZ0JBQWdCLEVBQUUsRUFBRTtFQUMxQjtJQUNFO01BQ0UsbUJBQW1CO01BQ25CLHFCQUFxQixFQUFFLEVBQUU7O0FBRS9CO0VBQ0UsbUJBQW1CO0VBQ25CLHNCQUFzQixFQUFFO0VBQ3hCO0lBQ0UscUJBQXFCLEVBQUU7RUFDekI7SUFDRSwwQkFBMEIsRUFBRTs7QUFFaEM7RUFDRSxtQkFBbUIsRUFBRTs7QUFFdkI7RUFDRSxrQkFBa0IsRUFBRTs7QUFFdEI7RUFDRSxxQkFBcUIsRUFBRTs7QUFFekI7RUFDRSxpQkFBaUIsRUFBRTs7QUFFckI7RUFDRSxtQkFBbUIsRUFBRTs7QUFFdkI7RUFDRSxlQUFlO0VBQ2YsZ0JBQWdCO0VBQ2hCLGlCQUFpQjtFQUNqQixjQUFjO0VBQ2QsaUJBQWlCLEVBQUU7O0FBRXJCO0VBQ0UsZUFBZTtFQUNmLGdCQUFnQjtFQUNoQixpQkFBaUI7RUFDakIsb0JBQW9CO0VBQ3BCLGlCQUFpQixFQUFFOztBQUVyQjtFQUNFLGtCQUFrQjtFQUNsQixnQkFBZ0I7RUFDaEIsZUFBZSxFQUFFO0VBQ2pCO0lBQ0UsbUJBQW1CO0lBQ25CLGVBQWUsRUFBRTs7QUFFckI7RUFDRTtJQUNFLG1CQUFtQjtJQUNuQixzQkFBc0IsRUFBRTtFQUMxQjtJQUNFLGlCQUFpQixFQUFFO0VBQ3JCO0lBQ0UsZ0JBQWdCLEVBQUU7RUFDcEI7SUFDRSxnQkFBZ0IsRUFBRTtFQUNwQjtJQUNFLGtCQUFrQixFQUFFLEVBQUU7O0FBRTFCO0VBQ0U7SUFDRSxtQkFBbUI7SUFDbkIsa0JBQWtCO0lBQ2xCLG1CQUFtQixFQUFFO0VBQ3ZCO0lBQ0Usa0JBQWtCLEVBQUUsRUFBRTs7QUFFMUI7RUFDRTtJQUNFLGtCQUFrQjtJQUNsQixxQkFBcUIsRUFBRSxFQUFFOztBQUU3QjtFQUNFLFlBQVksRUFBRTtFQUNkO0lBQ0UsOEJBQThCLEVBQUU7RUFDbEM7SUFDRSxjQUFjLEVBQUU7RUFDbEI7SUFDRSxnQkFBZ0I7SUFDaEIsdUJBQXVCO0lBQ3ZCLDBCQUEwQjtJQUMxQixpQkFBaUI7SUFDakIscUJBQWM7SUFBZCxjQUFjLEVBQUU7SUFDaEI7TUFDRSxtQkFBbUIsRUFBRTtFQUN6QjtJQUNFLGdCQUFnQjtJQUNoQixlQUFlLEVBQUU7RUFDbkI7SUFDRSxlQUFlLEVBQUU7RUFDbkI7SUFDRSxtQkFBbUIsRUFBRTtJQUNyQjtNQUNFLGdCQUFnQixFQUFFO0lBQ3BCO01BQ0UsaUJBQWlCLEVBQUU7RUFDdkI7SUFDRTtNQUNFLHFCQUFjO01BQWQsY0FBYztNQUNkLG9CQUFnQjtVQUFoQixnQkFBZ0I7TUFDaEIscUJBQXFCLEVBQUU7SUFDekI7TUFDRSxtQkFBZTtVQUFmLGVBQWU7TUFDZixrQkFBa0IsRUFBRTtJQUN0QjtNQUNFLG1CQUFlO1VBQWYsZUFBZTtNQUNmLGNBQWM7TUFDZCxlQUFlO01BQ2YsZ0JBQWdCO01BQ2hCLGlCQUFpQixFQUFFLEVBQUU7RUFDekI7SUFDRTtNQUNFLGlCQUFpQjtNQUNqQixrQkFBa0I7TUFDbEIsbUJBQW1CLEVBQUUsRUFBRTs7QUFFN0I7RUFDRSxxQkFBcUIsRUFBRTtFQUN2QjtJQUNFLG1CQUFtQjtJQUNuQixxQkFBYztJQUFkLGNBQWMsRUFBRTtFQUNsQjtJQUNFLG1CQUFtQjtJQUNuQixlQUFlO0lBQ2YsWUFBWSxFQUFFO0VBQ2hCO0lBQ0Usb0JBQW9CLEVBQUU7RUFDeEI7SUFDRSxtREFBbUQ7SUFDbkQsMkJBQTJCO0lBQzNCLGFBQWE7SUFDYixZQUFZO0lBQ1osbUJBQWU7UUFBZixlQUFlO0lBQ2YsbUJBQW1CLEVBQUU7RUFDdkI7SUFDRSxpQkFBaUIsRUFBRTtFQUNyQjtJQUNFLGtCQUFrQjtJQUNsQixnQkFBZ0I7SUFDaEIsbUJBQW1CLEVBQUU7SUFDckI7TUFDRSw0Q0FBNEM7TUFDNUMsMEJBQTBCO01BQzFCLFlBQVk7TUFDWixZQUFZO01BQ1osbUJBQWU7VUFBZixlQUFlO01BQ2YsU0FBUztNQUNULGtCQUFrQixFQUFFO0lBQ3RCO01BQ0UsaUJBQWlCLEVBQUU7RUFDdkI7SUFDRSxrQkFBa0I7SUFDbEIsZ0JBQWdCO0lBQ2hCLGVBQWUsRUFBRTtFQUNuQjtJQUNFLFNBQVMsRUFBRTtFQUNiO0lBQ0UsWUFBWTtJQUNaLGFBQWE7SUFDYixtQkFBZTtRQUFmLGVBQWU7SUFDZiwyQkFBMkI7SUFDM0IsbUJBQW1CLEVBQUU7RUFDdkI7SUFDRSxxQkFBYztJQUFkLGNBQWM7SUFDZCxvQkFBZ0I7UUFBaEIsZ0JBQWdCO0lBQ2hCLG1CQUFtQjtJQUNuQixvQkFBb0IsRUFBRTtJQUN0QjtNQUNFLGtCQUFjO1VBQWQsY0FBYztNQUNkLG1CQUFtQjtNQUNuQixvQkFBb0IsRUFBRTtFQUMxQjtJQUNFLGlCQUFpQixFQUFFO0lBQ25CO01BQ0UsVUFBVTtNQUNWLGlCQUFpQjtNQUNqQixrQkFBa0I7TUFDbEIsZ0JBQWdCO01BQ2hCLGVBQWUsRUFBRTtJQUNuQjtNQUNFLGtCQUFrQjtNQUNsQixnQkFBZ0I7TUFDaEIsZUFBZSxFQUFFO0VBQ3JCO0lBQ0U7TUFDRSxrQkFBa0I7TUFDbEIsZ0JBQWdCO01BQ2hCLGlCQUFpQixFQUFFLEVBQUU7RUFDekI7SUFDRTtNQUNFLGlCQUFpQjtNQUNqQixrQkFBa0I7TUFDbEIsbUJBQW1CLEVBQUU7TUFDckI7UUFDRSxtQkFBZTtZQUFmLGVBQWUsRUFBRTtJQUNyQjtNQUNFLGlCQUFpQjtNQUNqQixpQkFBaUIsRUFBRTtNQUNuQjtRQUNFLGlCQUFpQixFQUFFLEVBQUU7O0FBRTdCO0VBQ0UscUJBQWM7RUFBZCxjQUFjLEVBQUU7RUFDaEI7SUFDRSxrQkFBYztRQUFkLGNBQWMsRUFBRTtFQUNsQjtJQUNFLGtCQUFjO1FBQWQsY0FBYztJQUNkLG9CQUFvQixFQUFFO0VBQ3hCO0lBQ0Usa0JBQWM7UUFBZCxjQUFjO0lBQ2QsbUJBQW1CLEVBQUU7RUFDdkI7SUFDRTtNQUNFLGlCQUFpQixFQUFFLEVBQUU7RUFDekI7SUFDRTtNQUNFLGlCQUFpQixFQUFFO0lBQ3JCO01BQ0UsZ0JBQWdCO01BQ2hCLGlCQUFpQjtNQUNqQixrQkFBa0I7TUFDbEIsbUJBQW1CLEVBQUUsRUFBRTs7QUFFN0I7RUFDRTtJQUNFLDJCQUF1QjtRQUF2Qix1QkFBdUIsRUFBRTtJQUN6QjtNQUNFLG1CQUFlO1VBQWYsZUFBZSxFQUFFLEVBQUU7O0FBRXpCO0VBQ0UscUJBQWM7RUFBZCxjQUFjLEVBQUU7O0FBRWxCO0VBQ0UsbUJBQWU7TUFBZixlQUFlO0VBQ2YsbUJBQW1CLEVBQUU7O0FBRXZCO0VBQ0UsVUFBVSxFQUFFOztBQUVkO0VBQ0UsZ0JBQWdCO0VBQ2hCLGlCQUFpQjtFQUNqQixpQkFBaUI7RUFDakIsb0JBQW9CLEVBQUU7O0FBRXhCO0VBQ0UsZ0JBQWdCO0VBQ2hCLGtCQUFrQjtFQUNsQixnQkFBZ0I7RUFDaEIsZUFBZSxFQUFFOztBQUVuQjtFQUNFLGlCQUFpQixFQUFFOztBQUVyQjtFQUNFO0lBQ0UsaUJBQWlCLEVBQUU7SUFDbkI7TUFDRSxpQkFBaUIsRUFBRSxFQUFFOztBQUUzQjtFQUNFO0lBQ0UsaUJBQWlCO0lBQ2pCLGlCQUFpQjtJQUNqQixpQkFBaUI7SUFDakIsa0JBQWtCO0lBQ2xCLG1CQUFtQixFQUFFO0lBQ3JCO01BQ0UsZ0JBQWdCO01BQ2hCLG9CQUFvQixFQUFFO0lBQ3hCO01BQ0UsdUJBQW9CO1VBQXBCLG9CQUFvQjtNQUNwQixxQkFBYztNQUFkLGNBQWM7TUFDZCwyQkFBdUI7VUFBdkIsdUJBQXVCLEVBQUUsRUFBRTs7QUFFakM7RUFDRTtJQUNFLGdCQUFnQixFQUFFO0VBQ3BCO0lBQ0Usa0JBQWtCO0lBQ2xCLGdCQUFnQixFQUFFLEVBQUU7O0FBRXhCO0VBQ0UsMkJBQXVCO01BQXZCLHVCQUF1QixFQUFFOztBQUUzQjtFQUNFLG9CQUFvQixFQUFFOztBQUV4QjtFQUNFLGdCQUFnQjtFQUNoQixlQUFlLEVBQUU7O0FBRW5CO0VBQ0Usa0JBQWtCO0VBQ2xCLGdCQUFnQjtFQUNoQixlQUFlLEVBQUU7O0FBRW5CO0VBQ0UscUJBQWM7RUFBZCxjQUFjLEVBQUU7RUFDaEI7SUFDRSxrQkFBYztRQUFkLGNBQWM7SUFDZCxVQUFVO0lBQ1YsZ0JBQWdCLEVBQUU7RUFDcEI7SUFDRSxjQUFjLEVBQUU7RUFDbEI7SUFDRSxnQkFBZ0IsRUFBRTtFQUNwQjtJQUNFLGlCQUFpQixFQUFFO0VBQ3JCO0lBQ0U7TUFDRSwyQkFBdUI7VUFBdkIsdUJBQXVCLEVBQUU7TUFDekI7UUFDRSxtQkFBZTtZQUFmLGVBQWU7UUFDZixXQUFXLEVBQUU7TUFDZjtRQUNFLGlCQUFpQixFQUFFLEVBQUU7O0FBRTdCO0VBQ0UsbUJBQW1CLEVBQUU7O0FBRXZCOzs7O0VBSUUsbUJBQW1CO0VBQ25CLHFCQUFjO0VBQWQsY0FBYztFQUNkLDJCQUF1QjtNQUF2Qix1QkFBdUI7RUFDdkIsdUJBQW9CO01BQXBCLG9CQUFvQjtFQUNwQixnQkFBZ0I7RUFDaEIsbUJBQW1CO0VBQ25CLGlCQUFpQjtFQUNqQixlQUFlLEVBQUU7RUFDakI7Ozs7SUFJRSxxQkFBcUI7SUFDckIsNEJBQXFCO0lBQXJCLHFCQUFxQjtJQUNyQixzQkFBd0I7UUFBeEIsd0JBQXdCO0lBQ3hCLHVCQUFvQjtRQUFwQixvQkFBb0I7SUFDcEIsK0VBQStFO0lBQy9FLHVCQUF1QjtJQUN2QixvQkFBb0IsRUFBRTtFQUN4Qjs7OztJQUlFLFlBQVk7SUFDWixlQUFlO0lBQ2YsK0ZBQStGO0lBQy9GLDZCQUE2QjtJQUM3Qiw2QkFBNkI7SUFDN0IsbUNBQW1DLEVBQUU7O0FBRXpDO0VBQ0UsT0FBTztFQUNQLFlBQVksRUFBRTtFQUNkO0lBQ0UsYUFBYTtJQUNiLGNBQWMsRUFBRTtFQUNsQjtJQUNFLFlBQVk7SUFDWixhQUFhO0lBQ2IsOEJBQThCLEVBQUU7O0FBRXBDO0VBQ0UsV0FBVztFQUNYLFFBQVEsRUFBRTtFQUNWO0lBQ0UsYUFBYTtJQUNiLGNBQWMsRUFBRTtFQUNsQjtJQUNFLGFBQWE7SUFDYixhQUFhO0lBQ2IseUJBQXlCLEVBQUU7O0FBRS9CO0VBQ0UsV0FBVztFQUNYLFlBQVksRUFBRTtFQUNkO0lBQ0UsYUFBYTtJQUNiLGNBQWMsRUFBRTtFQUNsQjtJQUNFLFlBQVk7SUFDWixhQUFhO0lBQ2IsNkJBQTZCLEVBQUU7O0FBRW5DO0VBQ0UsV0FBVztFQUNYLFlBQVksRUFBRTtFQUNkO0lBQ0UsYUFBYTtJQUNiLGNBQWMsRUFBRTtFQUNsQjtJQUNFLFlBQVk7SUFDWixhQUFhO0lBQ2IsOEJBQThCLEVBQUU7O0FBRXBDO0VBQ0U7SUFDRSxZQUFZLEVBQUU7RUFDaEI7SUFDRSxZQUFZLEVBQUU7RUFDaEI7SUFDRSxZQUFZLEVBQUUsRUFBRTs7QUFFcEI7RUFDRTtJQUNFLGVBQVc7UUFBWCxXQUFXO0lBQ1gsY0FBYztJQUNkLGFBQWE7SUFDYixvQkFBb0IsRUFBRTtFQUN4QjtJQUNFLFlBQVksRUFBRTtFQUNoQjtJQUNFLFVBQVUsRUFBRTtFQUNkO0lBQ0UsWUFBWTtJQUNaLFdBQVcsRUFBRTtFQUNmO0lBQ0UsWUFBWTtJQUNaLFVBQVUsRUFBRSxFQUFFOztBQUVsQjtFQUNFO0lBQ0UsbUJBQW1CO0lBQ25CLFdBQVc7SUFDWCxVQUFVO0lBQ1Ysd0NBQWdDO1lBQWhDLGdDQUFnQztJQUNoQywrQ0FBdUM7WUFBdkMsdUNBQXVDLEVBQUU7RUFDM0M7SUFDRSxrQkFBa0IsRUFBRSxFQUFFOztBQUUxQjtFQUNFO0lBQ0UsV0FBVztJQUNYLCtDQUF1QztZQUF2Qyx1Q0FBdUMsRUFBRTtFQUMzQztJQUNFLGtCQUFrQixFQUFFLEVBQUU7O0FBRTFCO0VBQ0UsbUJBQW1CLEVBQUU7RUFDckI7SUFDRSxpQkFBaUIsRUFBRTtFQUNyQjtJQUNFLFVBQVU7SUFDVixXQUFXLEVBQUU7SUFDYjtNQUNFLGlCQUFpQjtNQUNqQixnQkFBZ0I7TUFDaEIsbUJBQW1CO01BQ25CLGVBQWUsRUFBRTtJQUNuQjtNQUNFLGVBQWU7TUFDZixpQkFBaUIsRUFBRTtJQUNyQjtNQUNFLGlCQUFpQjtNQUNqQixnQkFBZ0I7TUFDaEIsZUFBZTtNQUNmLGVBQWUsRUFBRTtFQUNyQjtJQUNFO01BQ0UsZ0JBQWdCLEVBQUUsRUFBRTtFQUN4QjtJQUNFO01BQ0Usa0JBQWtCLEVBQUUsRUFBRSIsImZpbGUiOiJwYWdlcy9wcm9kdWN0cy9lbnRlcnByaXNlLWNvcmUuY3NzIiwic291cmNlc0NvbnRlbnQiOlsiI3BhZ2UtcHJvZHVjdHMtZW50ZXJwcmlzZS1jb3JlIC5zdWItaGVhZGVyIC5idG4ge1xuICBjb2xvcjogIzFBMjMyRjtcbiAgYmFja2dyb3VuZC1jb2xvcjogI0ZGOTk4MjtcbiAgZm9udC13ZWlnaHQ6IGJvbGQ7XG4gIGxpbmUtaGVpZ2h0OiBub3JtYWw7XG4gIGZvbnQtc2l6ZTogMTFweDtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICBsZXR0ZXItc3BhY2luZzogMC4wOGVtO1xuICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xuICBwYWRkaW5nLWxlZnQ6IDE1cHg7XG4gIHBhZGRpbmctcmlnaHQ6IDE1cHg7IH1cbiAgI3BhZ2UtcHJvZHVjdHMtZW50ZXJwcmlzZS1jb3JlIC5zdWItaGVhZGVyIC5idG46aG92ZXIge1xuICAgIGJhY2tncm91bmQtY29sb3I6ICNmZmJhYWI7IH1cblxuI3BhZ2UtcHJvZHVjdHMtZW50ZXJwcmlzZS1jb3JlIGgzLFxuI3BhZ2UtcHJvZHVjdHMtZW50ZXJwcmlzZS1jb3JlIGgyLFxuI3BhZ2UtcHJvZHVjdHMtZW50ZXJwcmlzZS1jb3JlIHAubGFyZ2Uge1xuICBsZXR0ZXItc3BhY2luZzogLTAuMDFlbTsgfVxuXG4jcGFnZS1wcm9kdWN0cy1lbnRlcnByaXNlLWNvcmUgcCB7XG4gIGZvbnQtd2VpZ2h0OiA0MDA7IH1cbiAgI3BhZ2UtcHJvZHVjdHMtZW50ZXJwcmlzZS1jb3JlIHA6bm90KC5sYXJnZSkge1xuICAgIGZvbnQtZmFtaWx5OiBcIkdyYXBoaWtcIiwgXCJBdmVuaXIgTmV4dFwiLCBcIkhlbHZldGljYSBOZXVlXCIsIEhlbHZldGljYSwgc2Fucy1zZXJpZjsgfVxuXG4jcGFnZS1wcm9kdWN0cy1lbnRlcnByaXNlLWNvcmUgbWFpbiB1bCB7XG4gIGxpc3Qtc3R5bGUtdHlwZTogbm9uZTtcbiAgbWFyZ2luOiAwO1xuICBwYWRkaW5nOiAwOyB9XG5cbiNwYWdlLXByb2R1Y3RzLWVudGVycHJpc2UtY29yZSAudG9wIHtcbiAgbWFyZ2luLXRvcDogLTE0OHB4O1xuICBwYWRkaW5nLXRvcDogMjYwcHg7XG4gIHBhZGRpbmctYm90dG9tOiAxODBweDtcbiAgYmFja2dyb3VuZDogIzE4MjQzNDtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICB6LWluZGV4OiAwOyB9XG4gICNwYWdlLXByb2R1Y3RzLWVudGVycHJpc2UtY29yZSAudG9wOmJlZm9yZSB7XG4gICAgY29udGVudDogJyc7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFwiL2ltZy9wcm9kdWN0cy9lbnRlcnByaXNlLWNvcmUvZW50ZXJwcmlzZS1jb3JlLWhlcm8tYmcucG5nXCIpO1xuICAgIGJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7XG4gICAgYmFja2dyb3VuZC1zaXplOiAxMDk2cHggNzYwcHg7XG4gICAgd2lkdGg6IDEwOTZweDtcbiAgICBoZWlnaHQ6IDc2MHB4O1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICBib3R0b206IDA7XG4gICAgcmlnaHQ6IDUwJTtcbiAgICBtYXJnaW4tcmlnaHQ6IC04MjBweDtcbiAgICB6LWluZGV4OiAxOyB9XG4gICNwYWdlLXByb2R1Y3RzLWVudGVycHJpc2UtY29yZSAudG9wIGhncm91cCB7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIHotaW5kZXg6IDI7XG4gICAgY29sb3I6ICNmZmY7XG4gICAgbWF4LXdpZHRoOiA2MjRweDsgfVxuICAgICNwYWdlLXByb2R1Y3RzLWVudGVycHJpc2UtY29yZSAudG9wIGhncm91cCBoNCB7XG4gICAgICBsaW5lLWhlaWdodDogMjVweDtcbiAgICAgIGZvbnQtc2l6ZTogMTJweDtcbiAgICAgIGxldHRlci1zcGFjaW5nOiAwLjE0ZW07XG4gICAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xuICAgICAgY29sb3I6ICNDRUQ2RTA7XG4gICAgICBmb250LWZhbWlseTogXCJSb2JvdG8gTW9ub1wiLCBNZW5sbywgTW9uYWNvLCBDb25zb2xhcywgXCJDb3VyaWVyIE5ld1wiLCBtb25vc3BhY2U7IH1cbiAgICAjcGFnZS1wcm9kdWN0cy1lbnRlcnByaXNlLWNvcmUgLnRvcCBoZ3JvdXAgaDEge1xuICAgICAgZm9udC1zaXplOiA0OHB4O1xuICAgICAgbGV0dGVyLXNwYWNpbmc6IC0wLjAzZW07IH1cbiAgICAjcGFnZS1wcm9kdWN0cy1lbnRlcnByaXNlLWNvcmUgLnRvcCBoZ3JvdXAgcCB7XG4gICAgICBsaW5lLWhlaWdodDogMzlweDtcbiAgICAgIGZvbnQtc2l6ZTogMjJweDtcbiAgICAgIGNvbG9yOiAjQ0VENkUwOyB9XG4gICAgQG1lZGlhIChtYXgtd2lkdGg6IDc2OHB4KSB7XG4gICAgICAjcGFnZS1wcm9kdWN0cy1lbnRlcnByaXNlLWNvcmUgLnRvcCBoZ3JvdXAge1xuICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgICAgIG1hcmdpbi1sZWZ0OiBhdXRvO1xuICAgICAgICBtYXJnaW4tcmlnaHQ6IGF1dG87IH0gfVxuICAgIEBtZWRpYSAobWF4LXdpZHRoOiA0ODBweCkge1xuICAgICAgI3BhZ2UtcHJvZHVjdHMtZW50ZXJwcmlzZS1jb3JlIC50b3AgaGdyb3VwIGgxIHtcbiAgICAgICAgZm9udC1zaXplOiA0MHB4OyB9XG4gICAgICAjcGFnZS1wcm9kdWN0cy1lbnRlcnByaXNlLWNvcmUgLnRvcCBoZ3JvdXAgcCB7XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAzMHB4O1xuICAgICAgICBmb250LXNpemU6IDIwcHg7IH0gfVxuICBAbWVkaWEgKG1heC13aWR0aDogNzY4cHgpIHtcbiAgICAjcGFnZS1wcm9kdWN0cy1lbnRlcnByaXNlLWNvcmUgLnRvcCB7XG4gICAgICBwYWRkaW5nLXRvcDogMTkwcHg7XG4gICAgICBwYWRkaW5nLWJvdHRvbTogOTRweDsgfSB9XG5cbiNwYWdlLXByb2R1Y3RzLWVudGVycHJpc2UtY29yZSBtYWluIHNlY3Rpb24ge1xuICBwYWRkaW5nLXRvcDogMjAwcHg7XG4gIHBhZGRpbmctYm90dG9tOiAyMDBweDsgfVxuICAjcGFnZS1wcm9kdWN0cy1lbnRlcnByaXNlLWNvcmUgbWFpbiBzZWN0aW9uOmZpcnN0LWNoaWxkIHtcbiAgICBwYWRkaW5nLWJvdHRvbTogNTBweDsgfVxuICAjcGFnZS1wcm9kdWN0cy1lbnRlcnByaXNlLWNvcmUgbWFpbiBzZWN0aW9uLm9mZndoaXRlIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjRjZGOEZCOyB9XG5cbiNwYWdlLXByb2R1Y3RzLWVudGVycHJpc2UtY29yZSBtYWluIC5jb250YWluZXIge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7IH1cblxuI3BhZ2UtcHJvZHVjdHMtZW50ZXJwcmlzZS1jb3JlIG1haW4gLmNvbnRhaW5lciArIC5jb250YWluZXIge1xuICBtYXJnaW4tdG9wOiAyNjBweDsgfVxuXG4jcGFnZS1wcm9kdWN0cy1lbnRlcnByaXNlLWNvcmUgbWFpbiBoZ3JvdXAge1xuICBtYXJnaW4tYm90dG9tOiAxMDBweDsgfVxuXG4jcGFnZS1wcm9kdWN0cy1lbnRlcnByaXNlLWNvcmUgbWFpbiAubWVhc3VyZSB7XG4gIG1heC13aWR0aDogNjAwcHg7IH1cblxuI3BhZ2UtcHJvZHVjdHMtZW50ZXJwcmlzZS1jb3JlIG1haW4gLmNlbnRlciB7XG4gIHRleHQtYWxpZ246IGNlbnRlcjsgfVxuXG4jcGFnZS1wcm9kdWN0cy1lbnRlcnByaXNlLWNvcmUgbWFpbiBoMyB7XG4gIGNvbG9yOiAjRkY5OTgyO1xuICBmb250LXNpemU6IDMycHg7XG4gIG1hcmdpbi1ib3R0b206IDA7XG4gIG1hcmdpbi10b3A6IDA7XG4gIGZvbnQtd2VpZ2h0OiA2MDA7IH1cblxuI3BhZ2UtcHJvZHVjdHMtZW50ZXJwcmlzZS1jb3JlIG1haW4gaDIge1xuICBjb2xvcjogIzAyMDgxNDtcbiAgZm9udC1zaXplOiAzNnB4O1xuICBtYXJnaW4tdG9wOiAxMHB4O1xuICBtYXJnaW4tYm90dG9tOiAxNnB4O1xuICBmb250LXdlaWdodDogNzAwOyB9XG5cbiNwYWdlLXByb2R1Y3RzLWVudGVycHJpc2UtY29yZSBtYWluIHAubGFyZ2Uge1xuICBsaW5lLWhlaWdodDogMzlweDtcbiAgZm9udC1zaXplOiAyMnB4O1xuICBjb2xvcjogIzVCNzA4QjsgfVxuICAjcGFnZS1wcm9kdWN0cy1lbnRlcnByaXNlLWNvcmUgbWFpbiBwLmxhcmdlIGVtIHtcbiAgICBmb250LXN0eWxlOiBub3JtYWw7XG4gICAgY29sb3I6ICMyRjNBNDg7IH1cblxuQG1lZGlhIChtYXgtd2lkdGg6IDk5MnB4KSB7XG4gICNwYWdlLXByb2R1Y3RzLWVudGVycHJpc2UtY29yZSBtYWluIHNlY3Rpb24ge1xuICAgIHBhZGRpbmctdG9wOiAxMTJweDtcbiAgICBwYWRkaW5nLWJvdHRvbTogMTMwcHg7IH1cbiAgI3BhZ2UtcHJvZHVjdHMtZW50ZXJwcmlzZS1jb3JlIG1haW4gaGdyb3VwIHtcbiAgICBtYXJnaW4tYm90dG9tOiAwOyB9XG4gICNwYWdlLXByb2R1Y3RzLWVudGVycHJpc2UtY29yZSBtYWluIGgzIHtcbiAgICBmb250LXNpemU6IDI4cHg7IH1cbiAgI3BhZ2UtcHJvZHVjdHMtZW50ZXJwcmlzZS1jb3JlIG1haW4gaDIge1xuICAgIGZvbnQtc2l6ZTogMzJweDsgfVxuICAjcGFnZS1wcm9kdWN0cy1lbnRlcnByaXNlLWNvcmUgbWFpbiAuY29udGFpbmVyICsgLmNvbnRhaW5lciB7XG4gICAgbWFyZ2luLXRvcDogMjAwcHg7IH0gfVxuXG5AbWVkaWEgKG1heC13aWR0aDogNzY4cHgpIHtcbiAgI3BhZ2UtcHJvZHVjdHMtZW50ZXJwcmlzZS1jb3JlIG1haW4gaGdyb3VwIHtcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgbWFyZ2luLWxlZnQ6IGF1dG87XG4gICAgbWFyZ2luLXJpZ2h0OiBhdXRvOyB9XG4gICNwYWdlLXByb2R1Y3RzLWVudGVycHJpc2UtY29yZSBtYWluIC5jb250YWluZXIgKyAuY29udGFpbmVyIHtcbiAgICBtYXJnaW4tdG9wOiAxNDRweDsgfSB9XG5cbkBtZWRpYSAobWF4LXdpZHRoOiA0ODBweCkge1xuICAjcGFnZS1wcm9kdWN0cy1lbnRlcnByaXNlLWNvcmUgbWFpbiBzZWN0aW9uIHtcbiAgICBwYWRkaW5nLXRvcDogODJweDtcbiAgICBwYWRkaW5nLWJvdHRvbTogOTBweDsgfSB9XG5cbiNwYWdlLXByb2R1Y3RzLWVudGVycHJpc2UtY29yZSAuZmVhdHVyZS10YWJsZSB7XG4gIHdpZHRoOiAxMDAlOyB9XG4gICNwYWdlLXByb2R1Y3RzLWVudGVycHJpc2UtY29yZSAuZmVhdHVyZS10YWJsZSB0ciB0ZCB7XG4gICAgYm9yZGVyLXRvcDogMnB4IHNvbGlkICNGMkY1RkE7IH1cbiAgI3BhZ2UtcHJvZHVjdHMtZW50ZXJwcmlzZS1jb3JlIC5mZWF0dXJlLXRhYmxlIHRyOmZpcnN0LWNoaWxkIHRkIHtcbiAgICBib3JkZXItdG9wOiAwOyB9XG4gICNwYWdlLXByb2R1Y3RzLWVudGVycHJpc2UtY29yZSAuZmVhdHVyZS10YWJsZSB0ciB0ZDpudGgtY2hpbGQoMSkge1xuICAgIGZvbnQtc2l6ZTogMjBweDtcbiAgICBsZXR0ZXItc3BhY2luZzogMC4wOGVtO1xuICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XG4gICAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgICBkaXNwbGF5OiBmbGV4OyB9XG4gICAgI3BhZ2UtcHJvZHVjdHMtZW50ZXJwcmlzZS1jb3JlIC5mZWF0dXJlLXRhYmxlIHRyIHRkOm50aC1jaGlsZCgxKSBzdmcge1xuICAgICAgbWFyZ2luLXJpZ2h0OiAxNnB4OyB9XG4gICNwYWdlLXByb2R1Y3RzLWVudGVycHJpc2UtY29yZSAuZmVhdHVyZS10YWJsZSB0ciB0ZDpudGgtY2hpbGQoMikge1xuICAgIGZvbnQtc2l6ZTogMThweDtcbiAgICBjb2xvcjogIzVCNzA4QjsgfVxuICAjcGFnZS1wcm9kdWN0cy1lbnRlcnByaXNlLWNvcmUgLmZlYXR1cmUtdGFibGUgdHIgdGQ6bnRoLWNoaWxkKDMpIHtcbiAgICBjb2xvcjogIzVCNzA4QjsgfVxuICAjcGFnZS1wcm9kdWN0cy1lbnRlcnByaXNlLWNvcmUgLmZlYXR1cmUtdGFibGUgdHIgdGQge1xuICAgIHBhZGRpbmc6IDMycHggNDhweDsgfVxuICAgICNwYWdlLXByb2R1Y3RzLWVudGVycHJpc2UtY29yZSAuZmVhdHVyZS10YWJsZSB0ciB0ZDpmaXJzdC1jaGlsZCB7XG4gICAgICBwYWRkaW5nLWxlZnQ6IDA7IH1cbiAgICAjcGFnZS1wcm9kdWN0cy1lbnRlcnByaXNlLWNvcmUgLmZlYXR1cmUtdGFibGUgdHIgdGQ6bGFzdC1jaGlsZCB7XG4gICAgICBwYWRkaW5nLXJpZ2h0OiAwOyB9XG4gIEBtZWRpYSAobWF4LXdpZHRoOiA5OTJweCkge1xuICAgICNwYWdlLXByb2R1Y3RzLWVudGVycHJpc2UtY29yZSAuZmVhdHVyZS10YWJsZSB0ciB7XG4gICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgZmxleC13cmFwOiB3cmFwO1xuICAgICAgcGFkZGluZy1ib3R0b206IDE4cHg7IH1cbiAgICAjcGFnZS1wcm9kdWN0cy1lbnRlcnByaXNlLWNvcmUgLmZlYXR1cmUtdGFibGUgdHIgdGQ6Zmlyc3QtY2hpbGQge1xuICAgICAgZmxleDogMCAwIDEwMCU7XG4gICAgICBwYWRkaW5nLXRvcDogNDhweDsgfVxuICAgICNwYWdlLXByb2R1Y3RzLWVudGVycHJpc2UtY29yZSAuZmVhdHVyZS10YWJsZSB0ciB0ZDpub3QoOmZpcnN0LWNoaWxkKSB7XG4gICAgICBmbGV4OiAwIDAgMTAwJTtcbiAgICAgIGJvcmRlci10b3A6IDA7XG4gICAgICBwYWRkaW5nLXRvcDogMDtcbiAgICAgIHBhZGRpbmctbGVmdDogMDtcbiAgICAgIG1heC13aWR0aDogNDIwcHg7IH0gfVxuICBAbWVkaWEgKG1heC13aWR0aDogNzY4cHgpIHtcbiAgICAjcGFnZS1wcm9kdWN0cy1lbnRlcnByaXNlLWNvcmUgLmZlYXR1cmUtdGFibGUgdHIge1xuICAgICAgbWF4LXdpZHRoOiA0MjBweDtcbiAgICAgIG1hcmdpbi1sZWZ0OiBhdXRvO1xuICAgICAgbWFyZ2luLXJpZ2h0OiBhdXRvOyB9IH1cblxuI3BhZ2UtcHJvZHVjdHMtZW50ZXJwcmlzZS1jb3JlIC5jaGVja21hcmstbGlzdCB7XG4gIG1hcmdpbi1ib3R0b206IC0yNnB4OyB9XG4gICNwYWdlLXByb2R1Y3RzLWVudGVycHJpc2UtY29yZSAuY2hlY2ttYXJrLWxpc3QgbGkge1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICBkaXNwbGF5OiBmbGV4OyB9XG4gICNwYWdlLXByb2R1Y3RzLWVudGVycHJpc2UtY29yZSAuY2hlY2ttYXJrLWxpc3QgbGk6YmVmb3JlIHtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgY29udGVudDogJyc7IH1cbiAgI3BhZ2UtcHJvZHVjdHMtZW50ZXJwcmlzZS1jb3JlIC5jaGVja21hcmstbGlzdCA+IGxpIHtcbiAgICBtYXJnaW4tYm90dG9tOiAyNnB4OyB9XG4gICNwYWdlLXByb2R1Y3RzLWVudGVycHJpc2UtY29yZSAuY2hlY2ttYXJrLWxpc3QgPiBsaTpiZWZvcmUge1xuICAgIGJhY2tncm91bmQtaW1hZ2U6IHVybChcIi9pbWcvY2hlY2ttYXJrLXNhbG1vbi5zdmdcIik7XG4gICAgYmFja2dyb3VuZC1zaXplOiAyMHB4IDIwcHg7XG4gICAgaGVpZ2h0OiAyMHB4O1xuICAgIHdpZHRoOiAyMHB4O1xuICAgIGZsZXg6IDAgMCAyMHB4O1xuICAgIG1hcmdpbi1yaWdodDogMTZweDsgfVxuICAjcGFnZS1wcm9kdWN0cy1lbnRlcnByaXNlLWNvcmUgLmNoZWNrbWFyay1saXN0IGxpIHVsIHtcbiAgICBtYXJnaW4tdG9wOiAyMHB4OyB9XG4gICNwYWdlLXByb2R1Y3RzLWVudGVycHJpc2UtY29yZSAuY2hlY2ttYXJrLWxpc3QgbGkgdWwgPiBsaSB7XG4gICAgbGluZS1oZWlnaHQ6IDE3cHg7XG4gICAgZm9udC1zaXplOiAxMnB4O1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsgfVxuICAgICNwYWdlLXByb2R1Y3RzLWVudGVycHJpc2UtY29yZSAuY2hlY2ttYXJrLWxpc3QgbGkgdWwgPiBsaTpiZWZvcmUge1xuICAgICAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFwiL2ltZy9jaGVja21hcmsuc3ZnXCIpO1xuICAgICAgYmFja2dyb3VuZC1zaXplOiAxMHB4IDhweDtcbiAgICAgIGhlaWdodDogOHB4O1xuICAgICAgd2lkdGg6IDEwcHg7XG4gICAgICBmbGV4OiAwIDAgMTBweDtcbiAgICAgIHRvcDogMnB4O1xuICAgICAgbWFyZ2luLXJpZ2h0OiA4cHg7IH1cbiAgICAjcGFnZS1wcm9kdWN0cy1lbnRlcnByaXNlLWNvcmUgLmNoZWNrbWFyay1saXN0IGxpIHVsID4gbGkgKyBsaSB7XG4gICAgICBtYXJnaW4tdG9wOiAxNHB4OyB9XG4gICNwYWdlLXByb2R1Y3RzLWVudGVycHJpc2UtY29yZSAuY2hlY2ttYXJrLWxpc3QubGFyZ2Uge1xuICAgIGxpbmUtaGVpZ2h0OiAzM3B4O1xuICAgIGZvbnQtc2l6ZTogMjBweDtcbiAgICBjb2xvcjogIzVCNzA4QjsgfVxuICAjcGFnZS1wcm9kdWN0cy1lbnRlcnByaXNlLWNvcmUgLmNoZWNrbWFyay1saXN0LmxhcmdlIGxpOmJlZm9yZSB7XG4gICAgdG9wOiA0cHg7IH1cbiAgI3BhZ2UtcHJvZHVjdHMtZW50ZXJwcmlzZS1jb3JlIC5jaGVja21hcmstbGlzdC0tbGFyZ2UgbGk6YmVmb3JlIHtcbiAgICB3aWR0aDogMjRweDtcbiAgICBoZWlnaHQ6IDI0cHg7XG4gICAgZmxleDogMCAwIDI0cHg7XG4gICAgYmFja2dyb3VuZC1zaXplOiAyNHB4IDI0cHg7XG4gICAgbWFyZ2luLXJpZ2h0OiAyMHB4OyB9XG4gICNwYWdlLXByb2R1Y3RzLWVudGVycHJpc2UtY29yZSAuY2hlY2ttYXJrLWxpc3QudHdvLWNvbCB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBmbGV4LXdyYXA6IHdyYXA7XG4gICAgbWFyZ2luLWxlZnQ6IC0zMHB4O1xuICAgIG1hcmdpbi1yaWdodDogLTMwcHg7IH1cbiAgICAjcGFnZS1wcm9kdWN0cy1lbnRlcnByaXNlLWNvcmUgLmNoZWNrbWFyay1saXN0LnR3by1jb2wgbGkge1xuICAgICAgZmxleDogMCAwIDUwJTtcbiAgICAgIHBhZGRpbmctbGVmdDogMzBweDtcbiAgICAgIHBhZGRpbmctcmlnaHQ6IDMwcHg7IH1cbiAgI3BhZ2UtcHJvZHVjdHMtZW50ZXJwcmlzZS1jb3JlIC5jaGVja21hcmstbGlzdCBoZ3JvdXAge1xuICAgIG1hcmdpbjogMCAwIDE2cHg7IH1cbiAgICAjcGFnZS1wcm9kdWN0cy1lbnRlcnByaXNlLWNvcmUgLmNoZWNrbWFyay1saXN0IGhncm91cCBoNSB7XG4gICAgICBtYXJnaW46IDA7XG4gICAgICBmb250LXdlaWdodDogNjAwO1xuICAgICAgbGluZS1oZWlnaHQ6IDIwcHg7XG4gICAgICBmb250LXNpemU6IDE2cHg7XG4gICAgICBjb2xvcjogIzNDNTM2RjsgfVxuICAgICNwYWdlLXByb2R1Y3RzLWVudGVycHJpc2UtY29yZSAuY2hlY2ttYXJrLWxpc3QgaGdyb3VwIHAge1xuICAgICAgbGluZS1oZWlnaHQ6IDIzcHg7XG4gICAgICBmb250LXNpemU6IDE0cHg7XG4gICAgICBjb2xvcjogIzkyQTFCMzsgfVxuICBAbWVkaWEgKG1heC13aWR0aDogOTkycHgpIHtcbiAgICAjcGFnZS1wcm9kdWN0cy1lbnRlcnByaXNlLWNvcmUgLmNoZWNrbWFyay1saXN0LmxhcmdlIHtcbiAgICAgIGxpbmUtaGVpZ2h0OiAzMHB4O1xuICAgICAgZm9udC1zaXplOiAxOHB4O1xuICAgICAgbWFyZ2luLXRvcDogNjBweDsgfSB9XG4gIEBtZWRpYSAobWF4LXdpZHRoOiA3NjhweCkge1xuICAgICNwYWdlLXByb2R1Y3RzLWVudGVycHJpc2UtY29yZSAuY2hlY2ttYXJrLWxpc3QudHdvLWNvbCB7XG4gICAgICBtYXgtd2lkdGg6IDQyMHB4O1xuICAgICAgbWFyZ2luLWxlZnQ6IGF1dG87XG4gICAgICBtYXJnaW4tcmlnaHQ6IGF1dG87IH1cbiAgICAgICNwYWdlLXByb2R1Y3RzLWVudGVycHJpc2UtY29yZSAuY2hlY2ttYXJrLWxpc3QudHdvLWNvbCBsaSB7XG4gICAgICAgIGZsZXg6IDAgMCAxMDAlOyB9XG4gICAgI3BhZ2UtcHJvZHVjdHMtZW50ZXJwcmlzZS1jb3JlIC5jaGVja21hcmstbGlzdCBoZ3JvdXAge1xuICAgICAgdGV4dC1hbGlnbjogbGVmdDtcbiAgICAgIG1hcmdpbi1ib3R0b206IDA7IH1cbiAgICAgICNwYWdlLXByb2R1Y3RzLWVudGVycHJpc2UtY29yZSAuY2hlY2ttYXJrLWxpc3QgaGdyb3VwIHAge1xuICAgICAgICBtYXJnaW4tYm90dG9tOiAwOyB9IH1cblxuI3BhZ2UtcHJvZHVjdHMtZW50ZXJwcmlzZS1jb3JlIC50d28tY29sIHtcbiAgZGlzcGxheTogZmxleDsgfVxuICAjcGFnZS1wcm9kdWN0cy1lbnRlcnByaXNlLWNvcmUgLnR3by1jb2wgPiBkaXYge1xuICAgIGZsZXg6IDAgMCA1MCU7IH1cbiAgI3BhZ2UtcHJvZHVjdHMtZW50ZXJwcmlzZS1jb3JlIC50d28tY29sIC5mZWF0dXJlLWxpc3Qge1xuICAgIGZsZXg6IDAgMCA1NSU7XG4gICAgcGFkZGluZy1yaWdodDogNTBweDsgfVxuICAjcGFnZS1wcm9kdWN0cy1lbnRlcnByaXNlLWNvcmUgLnR3by1jb2wgLmNoZWNrbWFyay1saXN0IHtcbiAgICBmbGV4OiAwIDAgNDUlO1xuICAgIHBhZGRpbmctbGVmdDogNTBweDsgfVxuICBAbWVkaWEgKG1heC13aWR0aDogOTkycHgpIHtcbiAgICAjcGFnZS1wcm9kdWN0cy1lbnRlcnByaXNlLWNvcmUgLnR3by1jb2wgLmNoZWNrbWFyay1saXN0IHtcbiAgICAgIG1hcmdpbi10b3A6IDQwcHg7IH0gfVxuICBAbWVkaWEgKG1heC13aWR0aDogNzY4cHgpIHtcbiAgICAjcGFnZS1wcm9kdWN0cy1lbnRlcnByaXNlLWNvcmUgLnR3by1jb2wgLmZlYXR1cmUtbGlzdCB7XG4gICAgICBwYWRkaW5nLXJpZ2h0OiAwOyB9XG4gICAgI3BhZ2UtcHJvZHVjdHMtZW50ZXJwcmlzZS1jb3JlIC50d28tY29sIC5jaGVja21hcmstbGlzdCB7XG4gICAgICBwYWRkaW5nLWxlZnQ6IDA7XG4gICAgICBtYXgtd2lkdGg6IDQ4MHB4O1xuICAgICAgbWFyZ2luLWxlZnQ6IGF1dG87XG4gICAgICBtYXJnaW4tcmlnaHQ6IGF1dG87IH0gfVxuXG5AbWVkaWEgKG1heC13aWR0aDogOTkycHgpIHtcbiAgI3BhZ2UtcHJvZHVjdHMtZW50ZXJwcmlzZS1jb3JlIC50d28tY29sOm5vdCguY2hlY2ttYXJrLWxpc3QpIHtcbiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOyB9XG4gICAgI3BhZ2UtcHJvZHVjdHMtZW50ZXJwcmlzZS1jb3JlIC50d28tY29sOm5vdCguY2hlY2ttYXJrLWxpc3QpID4gZGl2IHtcbiAgICAgIGZsZXg6IDAgMCAxMDAlOyB9IH1cblxuI3BhZ2UtcHJvZHVjdHMtZW50ZXJwcmlzZS1jb3JlIC5mZWF0dXJlLWxpc3QgbGkge1xuICBkaXNwbGF5OiBmbGV4OyB9XG5cbiNwYWdlLXByb2R1Y3RzLWVudGVycHJpc2UtY29yZSAuZmVhdHVyZS1saXN0IHN2ZyB7XG4gIGZsZXg6IDAgMCA0OHB4O1xuICBtYXJnaW4tcmlnaHQ6IDM2cHg7IH1cblxuI3BhZ2UtcHJvZHVjdHMtZW50ZXJwcmlzZS1jb3JlIC5mZWF0dXJlLWxpc3QgaGdyb3VwIHtcbiAgbWFyZ2luOiAwOyB9XG5cbiNwYWdlLXByb2R1Y3RzLWVudGVycHJpc2UtY29yZSAuZmVhdHVyZS1saXN0IGg0IHtcbiAgZm9udC1zaXplOiAyNHB4O1xuICBsaW5lLWhlaWdodDogMS4yO1xuICBmb250LXdlaWdodDogNjAwO1xuICBtYXJnaW4tYm90dG9tOiAxOHB4OyB9XG5cbiNwYWdlLXByb2R1Y3RzLWVudGVycHJpc2UtY29yZSAuZmVhdHVyZS1saXN0IHAge1xuICBtYXJnaW46IDAgMCA2cHg7XG4gIGxpbmUtaGVpZ2h0OiAzMnB4O1xuICBmb250LXNpemU6IDE4cHg7XG4gIGNvbG9yOiAjNUI3MDhCOyB9XG5cbiNwYWdlLXByb2R1Y3RzLWVudGVycHJpc2UtY29yZSAuZmVhdHVyZS1saXN0IGxpICsgbGkge1xuICBtYXJnaW4tdG9wOiA2OHB4OyB9XG5cbkBtZWRpYSAobWF4LXdpZHRoOiA5OTJweCkge1xuICAjcGFnZS1wcm9kdWN0cy1lbnRlcnByaXNlLWNvcmUgLmZlYXR1cmUtbGlzdCB7XG4gICAgbWFyZ2luLXRvcDogNjBweDsgfVxuICAgICNwYWdlLXByb2R1Y3RzLWVudGVycHJpc2UtY29yZSAuZmVhdHVyZS1saXN0IGxpICsgbGkge1xuICAgICAgbWFyZ2luLXRvcDogNTBweDsgfSB9XG5cbkBtZWRpYSAobWF4LXdpZHRoOiA3NjhweCkge1xuICAjcGFnZS1wcm9kdWN0cy1lbnRlcnByaXNlLWNvcmUgLmZlYXR1cmUtbGlzdCB7XG4gICAgcGFkZGluZy1yaWdodDogMDtcbiAgICBtYXJnaW4tdG9wOiAzMHB4O1xuICAgIG1heC13aWR0aDogNDgwcHg7XG4gICAgbWFyZ2luLWxlZnQ6IGF1dG87XG4gICAgbWFyZ2luLXJpZ2h0OiBhdXRvOyB9XG4gICAgI3BhZ2UtcHJvZHVjdHMtZW50ZXJwcmlzZS1jb3JlIC5mZWF0dXJlLWxpc3Qgc3ZnIHtcbiAgICAgIG1hcmdpbi1yaWdodDogMDtcbiAgICAgIG1hcmdpbi1ib3R0b206IDE1cHg7IH1cbiAgICAjcGFnZS1wcm9kdWN0cy1lbnRlcnByaXNlLWNvcmUgLmZlYXR1cmUtbGlzdCBsaSB7XG4gICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47IH0gfVxuXG5AbWVkaWEgKG1heC13aWR0aDogNDgwcHgpIHtcbiAgI3BhZ2UtcHJvZHVjdHMtZW50ZXJwcmlzZS1jb3JlIC5mZWF0dXJlLWxpc3QgaDQge1xuICAgIGZvbnQtc2l6ZTogMjBweDsgfVxuICAjcGFnZS1wcm9kdWN0cy1lbnRlcnByaXNlLWNvcmUgLmZlYXR1cmUtbGlzdCBwIHtcbiAgICBsaW5lLWhlaWdodDogMjhweDtcbiAgICBmb250LXNpemU6IDE2cHg7IH0gfVxuXG4jcGFnZS1wcm9kdWN0cy1lbnRlcnByaXNlLWNvcmUgLmZlYXR1cmUtbGlzdC0tc21hbGwgbGkge1xuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOyB9XG5cbiNwYWdlLXByb2R1Y3RzLWVudGVycHJpc2UtY29yZSAuZmVhdHVyZS1saXN0LS1zbWFsbCBzdmcge1xuICBtYXJnaW4tYm90dG9tOiAyMHB4OyB9XG5cbiNwYWdlLXByb2R1Y3RzLWVudGVycHJpc2UtY29yZSAuZmVhdHVyZS1saXN0LS1zbWFsbCBoNCB7XG4gIGZvbnQtc2l6ZTogMjBweDtcbiAgY29sb3I6ICMwMjA4MTQ7IH1cblxuI3BhZ2UtcHJvZHVjdHMtZW50ZXJwcmlzZS1jb3JlIC5mZWF0dXJlLWxpc3QtLXNtYWxsIHAge1xuICBsaW5lLWhlaWdodDogMjZweDtcbiAgZm9udC1zaXplOiAxNnB4O1xuICBjb2xvcjogIzVCNzA4QjsgfVxuXG4jcGFnZS1wcm9kdWN0cy1lbnRlcnByaXNlLWNvcmUgLnRocmVlLWNvbCB7XG4gIGRpc3BsYXk6IGZsZXg7IH1cbiAgI3BhZ2UtcHJvZHVjdHMtZW50ZXJwcmlzZS1jb3JlIC50aHJlZS1jb2wgbGkge1xuICAgIGZsZXg6IDAgMCAzMyU7XG4gICAgbWFyZ2luOiAwO1xuICAgIHBhZGRpbmc6IDAgMzJweDsgfVxuICAjcGFnZS1wcm9kdWN0cy1lbnRlcnByaXNlLWNvcmUgLnRocmVlLWNvbCBsaSArIGxpIHtcbiAgICBtYXJnaW4tdG9wOiAwOyB9XG4gICNwYWdlLXByb2R1Y3RzLWVudGVycHJpc2UtY29yZSAudGhyZWUtY29sIGxpOmZpcnN0LWNoaWxkIHtcbiAgICBwYWRkaW5nLWxlZnQ6IDA7IH1cbiAgI3BhZ2UtcHJvZHVjdHMtZW50ZXJwcmlzZS1jb3JlIC50aHJlZS1jb2wgbGk6bGFzdC1jaGlsZCB7XG4gICAgcGFkZGluZy1yaWdodDogMDsgfVxuICBAbWVkaWEgKG1heC13aWR0aDogNzY4cHgpIHtcbiAgICAjcGFnZS1wcm9kdWN0cy1lbnRlcnByaXNlLWNvcmUgLnRocmVlLWNvbCB7XG4gICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOyB9XG4gICAgICAjcGFnZS1wcm9kdWN0cy1lbnRlcnByaXNlLWNvcmUgLnRocmVlLWNvbCBsaSB7XG4gICAgICAgIGZsZXg6IDAgMCAxMDAlO1xuICAgICAgICBwYWRkaW5nOiAwOyB9XG4gICAgICAjcGFnZS1wcm9kdWN0cy1lbnRlcnByaXNlLWNvcmUgLnRocmVlLWNvbCBsaSArIGxpIHtcbiAgICAgICAgbWFyZ2luLXRvcDogMzBweDsgfSB9XG5cbiNwYWdlLXByb2R1Y3RzLWVudGVycHJpc2UtY29yZSAuaW50ZWdyYXRpb25zIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlOyB9XG5cbiNwYWdlLXByb2R1Y3RzLWVudGVycHJpc2UtY29yZSAuaW50ZWdyYXRpb25zX19pZGVudGl0eS12YXVsdCxcbiNwYWdlLXByb2R1Y3RzLWVudGVycHJpc2UtY29yZSAuaW50ZWdyYXRpb25zX19hd3MtYW1wbGlmeSxcbiNwYWdlLXByb2R1Y3RzLWVudGVycHJpc2UtY29yZSAuaW50ZWdyYXRpb25zX19jb3VjaGJhc2UsXG4jcGFnZS1wcm9kdWN0cy1lbnRlcnByaXNlLWNvcmUgLmludGVncmF0aW9uc19fYWN0aXZlLWRpcmVjdG9yeSB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgZm9udC1zaXplOiAxM3B4O1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIGZvbnQtd2VpZ2h0OiA2MDA7XG4gIGNvbG9yOiAjNUI3MDhCOyB9XG4gICNwYWdlLXByb2R1Y3RzLWVudGVycHJpc2UtY29yZSAuaW50ZWdyYXRpb25zX19pZGVudGl0eS12YXVsdCBpLFxuICAjcGFnZS1wcm9kdWN0cy1lbnRlcnByaXNlLWNvcmUgLmludGVncmF0aW9uc19fYXdzLWFtcGxpZnkgaSxcbiAgI3BhZ2UtcHJvZHVjdHMtZW50ZXJwcmlzZS1jb3JlIC5pbnRlZ3JhdGlvbnNfX2NvdWNoYmFzZSBpLFxuICAjcGFnZS1wcm9kdWN0cy1lbnRlcnByaXNlLWNvcmUgLmludGVncmF0aW9uc19fYWN0aXZlLWRpcmVjdG9yeSBpIHtcbiAgICBib3JkZXItcmFkaXVzOiA5OTlweDtcbiAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDtcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgIGJveC1zaGFkb3c6IDBweCAycHggOHB4IHJnYmEoMiwgOCwgMjAsIDAuMSksIDBweCA4cHggMTZweCByZ2JhKDIsIDgsIDIwLCAwLjA4KTtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xuICAgIG1hcmdpbi1ib3R0b206IDE0cHg7IH1cbiAgI3BhZ2UtcHJvZHVjdHMtZW50ZXJwcmlzZS1jb3JlIC5pbnRlZ3JhdGlvbnNfX2lkZW50aXR5LXZhdWx0IGk6OmJlZm9yZSxcbiAgI3BhZ2UtcHJvZHVjdHMtZW50ZXJwcmlzZS1jb3JlIC5pbnRlZ3JhdGlvbnNfX2F3cy1hbXBsaWZ5IGk6OmJlZm9yZSxcbiAgI3BhZ2UtcHJvZHVjdHMtZW50ZXJwcmlzZS1jb3JlIC5pbnRlZ3JhdGlvbnNfX2NvdWNoYmFzZSBpOjpiZWZvcmUsXG4gICNwYWdlLXByb2R1Y3RzLWVudGVycHJpc2UtY29yZSAuaW50ZWdyYXRpb25zX19hY3RpdmUtZGlyZWN0b3J5IGk6OmJlZm9yZSB7XG4gICAgY29udGVudDogJyc7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFwiL2ltZy9wcm9kdWN0cy9lbnRlcnByaXNlLWNvcmUvZW50ZXJwcmlzZS1jb3JlLWludGVncmF0aW9ucy1zcHJpdGUucG5nXCIpO1xuICAgIGJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7XG4gICAgYmFja2dyb3VuZC1zaXplOiAxMTJweCAyOTRweDtcbiAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiBjZW50ZXIgY2VudGVyOyB9XG5cbiNwYWdlLXByb2R1Y3RzLWVudGVycHJpc2UtY29yZSAuaW50ZWdyYXRpb25zX19pZGVudGl0eS12YXVsdCB7XG4gIHRvcDogMDtcbiAgbGVmdDogMjQycHg7IH1cbiAgI3BhZ2UtcHJvZHVjdHMtZW50ZXJwcmlzZS1jb3JlIC5pbnRlZ3JhdGlvbnNfX2lkZW50aXR5LXZhdWx0IGkge1xuICAgIHdpZHRoOiAxMjRweDtcbiAgICBoZWlnaHQ6IDEyNHB4OyB9XG4gICNwYWdlLXByb2R1Y3RzLWVudGVycHJpc2UtY29yZSAuaW50ZWdyYXRpb25zX19pZGVudGl0eS12YXVsdCBpOjpiZWZvcmUge1xuICAgIHdpZHRoOiA1NnB4O1xuICAgIGhlaWdodDogNTZweDtcbiAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwIC0xNTFweDsgfVxuXG4jcGFnZS1wcm9kdWN0cy1lbnRlcnByaXNlLWNvcmUgLmludGVncmF0aW9uc19fYXdzLWFtcGxpZnkge1xuICB0b3A6IDE3MnB4O1xuICBsZWZ0OiAwOyB9XG4gICNwYWdlLXByb2R1Y3RzLWVudGVycHJpc2UtY29yZSAuaW50ZWdyYXRpb25zX19hd3MtYW1wbGlmeSBpIHtcbiAgICB3aWR0aDogMTkycHg7XG4gICAgaGVpZ2h0OiAxOTJweDsgfVxuICAjcGFnZS1wcm9kdWN0cy1lbnRlcnByaXNlLWNvcmUgLmludGVncmF0aW9uc19fYXdzLWFtcGxpZnkgaTo6YmVmb3JlIHtcbiAgICB3aWR0aDogMTEycHg7XG4gICAgaGVpZ2h0OiA4NHB4O1xuICAgIGJhY2tncm91bmQtcG9zaXRpb246IDAgMDsgfVxuXG4jcGFnZS1wcm9kdWN0cy1lbnRlcnByaXNlLWNvcmUgLmludGVncmF0aW9uc19fY291Y2hiYXNlIHtcbiAgdG9wOiAyOTBweDtcbiAgbGVmdDogMzU0cHg7IH1cbiAgI3BhZ2UtcHJvZHVjdHMtZW50ZXJwcmlzZS1jb3JlIC5pbnRlZ3JhdGlvbnNfX2NvdWNoYmFzZSBpIHtcbiAgICB3aWR0aDogMTI0cHg7XG4gICAgaGVpZ2h0OiAxMjRweDsgfVxuICAjcGFnZS1wcm9kdWN0cy1lbnRlcnByaXNlLWNvcmUgLmludGVncmF0aW9uc19fY291Y2hiYXNlIGk6OmJlZm9yZSB7XG4gICAgd2lkdGg6IDY0cHg7XG4gICAgaGVpZ2h0OiA2NXB4O1xuICAgIGJhY2tncm91bmQtcG9zaXRpb246IDAgLTg1cHg7IH1cblxuI3BhZ2UtcHJvZHVjdHMtZW50ZXJwcmlzZS1jb3JlIC5pbnRlZ3JhdGlvbnNfX2FjdGl2ZS1kaXJlY3Rvcnkge1xuICB0b3A6IDUwMHB4O1xuICBsZWZ0OiAxNzJweDsgfVxuICAjcGFnZS1wcm9kdWN0cy1lbnRlcnByaXNlLWNvcmUgLmludGVncmF0aW9uc19fYWN0aXZlLWRpcmVjdG9yeSBpIHtcbiAgICB3aWR0aDogMTYwcHg7XG4gICAgaGVpZ2h0OiAxNjBweDsgfVxuICAjcGFnZS1wcm9kdWN0cy1lbnRlcnByaXNlLWNvcmUgLmludGVncmF0aW9uc19fYWN0aXZlLWRpcmVjdG9yeSBpOjpiZWZvcmUge1xuICAgIHdpZHRoOiA4M3B4O1xuICAgIGhlaWdodDogODRweDtcbiAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwIC0yMTBweDsgfVxuXG5AbWVkaWEgKG1heC13aWR0aDogMTIyMHB4KSB7XG4gICNwYWdlLXByb2R1Y3RzLWVudGVycHJpc2UtY29yZSAuaW50ZWdyYXRpb25zX19pZGVudGl0eS12YXVsdCB7XG4gICAgbGVmdDogMjEycHg7IH1cbiAgI3BhZ2UtcHJvZHVjdHMtZW50ZXJwcmlzZS1jb3JlIC5pbnRlZ3JhdGlvbnNfX2NvdWNoYmFzZSB7XG4gICAgbGVmdDogMjg0cHg7IH1cbiAgI3BhZ2UtcHJvZHVjdHMtZW50ZXJwcmlzZS1jb3JlIC5pbnRlZ3JhdGlvbnNfX2FjdGl2ZS1kaXJlY3Rvcnkge1xuICAgIGxlZnQ6IDExOXB4OyB9IH1cblxuQG1lZGlhIChtYXgtd2lkdGg6IDk5MnB4KSB7XG4gICNwYWdlLXByb2R1Y3RzLWVudGVycHJpc2UtY29yZSAuaW50ZWdyYXRpb25zIHtcbiAgICBmbGV4OiBub25lO1xuICAgIGhlaWdodDogMzYycHg7XG4gICAgd2lkdGg6IDU4NnB4O1xuICAgIG1hcmdpbi1ib3R0b206IDQwcHg7IH1cbiAgI3BhZ2UtcHJvZHVjdHMtZW50ZXJwcmlzZS1jb3JlIC5pbnRlZ3JhdGlvbnNfX2lkZW50aXR5LXZhdWx0IHtcbiAgICBsZWZ0OiAyMzJweDsgfVxuICAjcGFnZS1wcm9kdWN0cy1lbnRlcnByaXNlLWNvcmUgLmludGVncmF0aW9uc19fYXdzLWFtcGxpZnkge1xuICAgIHRvcDogODJweDsgfVxuICAjcGFnZS1wcm9kdWN0cy1lbnRlcnByaXNlLWNvcmUgLmludGVncmF0aW9uc19fY291Y2hiYXNlIHtcbiAgICBsZWZ0OiAyNTFweDtcbiAgICB0b3A6IDE4OHB4OyB9XG4gICNwYWdlLXByb2R1Y3RzLWVudGVycHJpc2UtY29yZSAuaW50ZWdyYXRpb25zX19hY3RpdmUtZGlyZWN0b3J5IHtcbiAgICBsZWZ0OiA0MTZweDtcbiAgICB0b3A6IDcwcHg7IH0gfVxuXG5AbWVkaWEgKG1heC13aWR0aDogNzY4cHgpIHtcbiAgI3BhZ2UtcHJvZHVjdHMtZW50ZXJwcmlzZS1jb3JlIC5pbnRlZ3JhdGlvbnMge1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICB0b3A6IC03MHB4O1xuICAgIGxlZnQ6IDUwJTtcbiAgICB0cmFuc2Zvcm0tb3JpZ2luOiBjZW50ZXIgY2VudGVyO1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgtNTAlKSBzY2FsZSgwLjgpOyB9XG4gICNwYWdlLXByb2R1Y3RzLWVudGVycHJpc2UtY29yZSAuaW50ZWdyYXRpb25zICsgZGl2IHtcbiAgICBtYXJnaW4tdG9wOiAzMDBweDsgfSB9XG5cbkBtZWRpYSAobWF4LXdpZHRoOiA3NjhweCkge1xuICAjcGFnZS1wcm9kdWN0cy1lbnRlcnByaXNlLWNvcmUgLmludGVncmF0aW9ucyB7XG4gICAgdG9wOiAtOTBweDtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTUwJSkgc2NhbGUoMC42KTsgfVxuICAjcGFnZS1wcm9kdWN0cy1lbnRlcnByaXNlLWNvcmUgLmludGVncmF0aW9ucyArIGRpdiB7XG4gICAgbWFyZ2luLXRvcDogMjYwcHg7IH0gfVxuXG4jcGFnZS1wcm9kdWN0cy1lbnRlcnByaXNlLWNvcmUgLmNhbGwtdG8tYWN0aW9uIHtcbiAgcGFkZGluZy10b3A6IDE0MHB4OyB9XG4gICNwYWdlLXByb2R1Y3RzLWVudGVycHJpc2UtY29yZSAuY2FsbC10by1hY3Rpb24gLmNvbnRhaW5lciB7XG4gICAgbWF4LXdpZHRoOiA3NDhweDsgfVxuICAjcGFnZS1wcm9kdWN0cy1lbnRlcnByaXNlLWNvcmUgLmNhbGwtdG8tYWN0aW9uIGhncm91cCB7XG4gICAgbWFyZ2luOiAwO1xuICAgIHBhZGRpbmc6IDA7IH1cbiAgICAjcGFnZS1wcm9kdWN0cy1lbnRlcnByaXNlLWNvcmUgLmNhbGwtdG8tYWN0aW9uIGhncm91cCBwIHtcbiAgICAgIGZvbnQtd2VpZ2h0OiA0MDA7XG4gICAgICBmb250LXNpemU6IDI4cHg7XG4gICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgICBjb2xvcjogIzVCNzA4QjsgfVxuICAgICNwYWdlLXByb2R1Y3RzLWVudGVycHJpc2UtY29yZSAuY2FsbC10by1hY3Rpb24gaGdyb3VwIHN0cm9uZyB7XG4gICAgICBjb2xvcjogIzJGM0E0ODtcbiAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7IH1cbiAgICAjcGFnZS1wcm9kdWN0cy1lbnRlcnByaXNlLWNvcmUgLmNhbGwtdG8tYWN0aW9uIGhncm91cCBoNCB7XG4gICAgICBmb250LXdlaWdodDogNjAwO1xuICAgICAgZm9udC1zaXplOiAyNHB4O1xuICAgICAgY29sb3I6ICNGRjk5ODI7XG4gICAgICBtYXJnaW46IDYwcHggMDsgfVxuICBAbWVkaWEgKG1heC13aWR0aDogNzY4cHgpIHtcbiAgICAjcGFnZS1wcm9kdWN0cy1lbnRlcnByaXNlLWNvcmUgLmNhbGwtdG8tYWN0aW9uIGhncm91cCBwIHtcbiAgICAgIGZvbnQtc2l6ZTogMjRweDsgfSB9XG4gIEBtZWRpYSAobWF4LXdpZHRoOiA0ODBweCkge1xuICAgICNwYWdlLXByb2R1Y3RzLWVudGVycHJpc2UtY29yZSAuY2FsbC10by1hY3Rpb24ge1xuICAgICAgcGFkZGluZy10b3A6IDgycHg7IH0gfVxuIl19 */\n"
  },
  {
    "path": "content/css/pages/products/enterprise-edition.css",
    "content": "#page-products-enterprise-engine .sub-header .btn {\n  color: #1A232F;\n  background-color: #FF9982;\n  font-weight: bold;\n  line-height: normal;\n  font-size: 11px;\n  text-align: center;\n  letter-spacing: 0.08em;\n  text-transform: uppercase;\n  padding-left: 15px;\n  padding-right: 15px; }\n  #page-products-enterprise-engine .sub-header .btn:hover {\n    background-color: #ffbaab; }\n\n#page-products-enterprise-engine h3,\n#page-products-enterprise-engine h2,\n#page-products-enterprise-engine p.large {\n  letter-spacing: -0.01em; }\n\n#page-products-enterprise-engine p {\n  font-weight: 400; }\n  #page-products-enterprise-engine p:not(.large) {\n    font-family: \"Inter\", \"Inter UI\", Helvetica, Arial, sans-serif; }\n\n#page-products-enterprise-engine main {\n  overflow: visible; }\n\n#page-products-enterprise-engine main ul {\n  list-style-type: none;\n  margin: 0;\n  padding: 0; }\n\n#page-products-enterprise-engine .page-nav {\n  display: -ms-flexbox;\n  display: flex;\n  top: 0;\n  position: -webkit-sticky;\n  position: sticky;\n  display: flex;\n  -ms-flex-pack: center;\n      justify-content: center;\n  margin-top: -40px;\n  padding-top: 8px;\n  z-index: 29; }\n  #page-products-enterprise-engine .page-nav__inner {\n    background: #fff;\n    box-shadow: 0px 8px 16px rgba(2, 8, 20, 0.1), 0px 8px 32px rgba(2, 8, 20, 0.08);\n    border-radius: 8px;\n    max-width: 1000px;\n    width: 100%;\n    overflow: hidden; }\n    #page-products-enterprise-engine .page-nav__inner ul {\n      display: -ms-flexbox;\n      display: flex; }\n    #page-products-enterprise-engine .page-nav__inner li {\n      -ms-flex: 1;\n          flex: 1;\n      display: inline-block; }\n    #page-products-enterprise-engine .page-nav__inner li + li {\n      border-left: 1px solid #E9EDF3; }\n    #page-products-enterprise-engine .page-nav__inner a {\n      transition: 0.3s border;\n      width: 100%;\n      height: 100%;\n      transition: color 0.2s;\n      display: -ms-inline-flexbox;\n      display: inline-flex;\n      -ms-flex-pack: center;\n          justify-content: center;\n      -ms-flex-align: center;\n          align-items: center;\n      padding: 20px 40px 16px;\n      color: #4E5B6A;\n      font-size: 12px;\n      letter-spacing: 0.06em;\n      text-transform: uppercase;\n      font-weight: 600;\n      font-family: \"Eina\", \"Helvetica Neue\", Helvetica, sans-serif;\n      text-decoration: none;\n      border-bottom: 2px solid transparent;\n      outline: none; }\n    #page-products-enterprise-engine .page-nav__inner a:hover,\n    #page-products-enterprise-engine .page-nav__inner a.active {\n      color: #000; }\n    #page-products-enterprise-engine .page-nav__inner a.active {\n      border-bottom: 2px solid #FF9982; }\n  #page-products-enterprise-engine .page-nav.active .page-nav__inner a:not(.active) {\n    opacity: 0.7; }\n    #page-products-enterprise-engine .page-nav.active .page-nav__inner a:not(.active):hover {\n      opacity: 1; }\n  @media (max-width: 1000px) {\n    #page-products-enterprise-engine .page-nav {\n      padding-top: 0; }\n      #page-products-enterprise-engine .page-nav__inner {\n        border-radius: 0; } }\n  @media (max-width: 992px) {\n    #page-products-enterprise-engine .page-nav__inner a {\n      padding: 14px 20px 12px;\n      font-size: 11px; } }\n  @media (max-width: 768px) {\n    #page-products-enterprise-engine .page-nav {\n      display: none; } }\n\n#page-products-enterprise-engine .page-nav__icon {\n  display: -ms-inline-flexbox;\n  display: inline-flex; }\n  #page-products-enterprise-engine .page-nav__icon::before {\n    content: '';\n    display: block;\n    -ms-flex: 0 0 29px;\n        flex: 0 0 29px;\n    height: 29px;\n    background-image: url(\"/img/products/enterprise-engine/enterprise-engine-nav-sprite.png\");\n    background-repeat: no-repeat;\n    background-size: 29px 116px;\n    margin-right: 16px;\n    position: relative;\n    top: -3px; }\n  #page-products-enterprise-engine .page-nav__icon--framework::before {\n    background-position: 0 0; }\n  #page-products-enterprise-engine .page-nav__icon--native::before {\n    background-position: 0 -29px; }\n  #page-products-enterprise-engine .page-nav__icon--solutions::before {\n    background-position: 0 -58px; }\n  #page-products-enterprise-engine .page-nav__icon--services::before {\n    background-position: 0 -87px; }\n\n#page-products-enterprise-engine .top {\n  margin-top: -218px;\n  padding-top: 280px;\n  padding-bottom: 152px;\n  background: #F8FAFD;\n  position: relative;\n  z-index: 0;\n  background-image: url(\"/img/products/enterprise-engine/enterprise-edition-hero-bg.png\");\n  background-repeat: no-repeat;\n  background-size: cover;\n  background-position: center bottom; }\n  #page-products-enterprise-engine .top hgroup {\n    position: relative;\n    z-index: 2;\n    text-align: center;\n    display: -ms-flexbox;\n    display: flex;\n    -ms-flex-direction: column;\n        flex-direction: column;\n    -ms-flex-align: center;\n        align-items: center; }\n    #page-products-enterprise-engine .top hgroup h4 {\n      line-height: 25px;\n      font-size: 12px;\n      letter-spacing: 0.14em;\n      text-transform: uppercase;\n      color: #5B708B;\n      font-family: \"Roboto Mono\", Menlo, Monaco, Consolas, \"Courier New\", monospace;\n      margin-bottom: 0; }\n    #page-products-enterprise-engine .top hgroup h1 {\n      line-height: 63px;\n      font-size: 56px;\n      letter-spacing: -0.02em;\n      color: #000000;\n      max-width: 420px;\n      margin-top: 14px; }\n    #page-products-enterprise-engine .top hgroup p {\n      font-family: \"Eina\", \"Helvetica Neue\", Helvetica, sans-serif;\n      font-size: 22px;\n      color: #5B708B;\n      line-height: 30px;\n      margin: 0;\n      max-width: 572px; }\n    #page-products-enterprise-engine .top hgroup .btn {\n      margin-top: 24px;\n      color: #fff;\n      background: #3880FF;\n      box-shadow: 0px 0px 2px rgba(0, 20, 56, 0.14), 0px 2px 3px rgba(0, 20, 56, 0.08);\n      border-radius: 84px;\n      font-weight: 700;\n      font-size: 14px;\n      letter-spacing: 0.06em;\n      padding: 19px 25px 16px; }\n      #page-products-enterprise-engine .top hgroup .btn:hover {\n        background-color: #4287ff; }\n    @media (max-width: 480px) {\n      #page-products-enterprise-engine .top hgroup h1 {\n        font-size: 40px;\n        line-height: 44px; }\n      #page-products-enterprise-engine .top hgroup p {\n        line-height: 30px;\n        font-size: 20px; } }\n  @media (max-width: 768px) {\n    #page-products-enterprise-engine .top {\n      padding-top: 264px;\n      padding-bottom: 78px; } }\n\n#page-products-enterprise-engine main section {\n  padding-top: 100px;\n  padding-bottom: 140px; }\n\n#page-products-enterprise-engine main section.divider {\n  border-top: 1px solid #E9EDF3;\n  padding-top: 140px; }\n\n#page-products-enterprise-engine main .container {\n  position: relative; }\n\n#page-products-enterprise-engine main .two-col {\n  display: -ms-flexbox;\n  display: flex; }\n  #page-products-enterprise-engine main .two-col > * {\n    -ms-flex: 0 0 50%;\n        flex: 0 0 50%; }\n\n#page-products-enterprise-engine main .measure {\n  max-width: 558px; }\n\n#page-products-enterprise-engine main h3 {\n  color: #616E7E;\n  font-size: 20px;\n  line-height: 1;\n  margin-bottom: 28px;\n  margin-top: 0;\n  font-weight: 600; }\n\n#page-products-enterprise-engine main h2 {\n  color: #020814;\n  line-height: 63px;\n  font-size: 56px;\n  margin-top: 0;\n  margin-bottom: 30px;\n  font-weight: 600;\n  letter-spacing: -0.04em; }\n\n#page-products-enterprise-engine main h3.large {\n  font-size: 32px;\n  color: #1A232F;\n  letter-spacing: -0.03em;\n  margin-bottom: 38px; }\n\n#page-products-enterprise-engine main p.large {\n  font-family: \"Eina\", \"Helvetica Neue\", Helvetica, sans-serif;\n  line-height: 33px;\n  font-size: 20px;\n  letter-spacing: -0.01em;\n  color: #020814; }\n  #page-products-enterprise-engine main p.large em {\n    font-style: normal;\n    color: #2F3A48; }\n\n@media (max-width: 992px) {\n  #page-products-enterprise-engine main h2 {\n    line-height: 52px;\n    font-size: 48px; } }\n\n@media (max-width: 768px) {\n  #page-products-enterprise-engine main section {\n    padding-top: 80px;\n    padding-bottom: 80px; }\n  #page-products-enterprise-engine main h3,\n  #page-products-enterprise-engine main h2,\n  #page-products-enterprise-engine main p.large {\n    text-align: center;\n    margin-left: auto;\n    margin-right: auto; }\n  #page-products-enterprise-engine main h3 {\n    margin-bottom: 16px; }\n  #page-products-enterprise-engine main h3.large {\n    font-size: 28px;\n    line-height: 34px; }\n  #page-products-enterprise-engine main h2 {\n    line-height: 48px;\n    font-size: 42px;\n    max-width: 100% !important;\n    margin-bottom: 16px; }\n  #page-products-enterprise-engine main .two-col {\n    -ms-flex-direction: column;\n        flex-direction: column; }\n    #page-products-enterprise-engine main .two-col > * {\n      -ms-flex: 0 0 100%;\n          flex: 0 0 100%; } }\n\n@media (max-width: 480px) {\n  #page-products-enterprise-engine main h3.large {\n    font-size: 24px;\n    line-height: 30px; } }\n\n#page-products-enterprise-engine .overview .container {\n  display: -ms-flexbox;\n  display: flex; }\n  #page-products-enterprise-engine .overview .container h3 {\n    line-height: 40px;\n    font-size: 28px;\n    letter-spacing: -0.02em;\n    color: #616E7E; }\n    #page-products-enterprise-engine .overview .container h3 em {\n      font-style: normal;\n      color: #020814; }\n  #page-products-enterprise-engine .overview .container img {\n    width: 100%;\n    height: auto;\n    margin-top: 40px;\n    max-width: 420px; }\n  #page-products-enterprise-engine .overview .container > div:first-child {\n    -ms-flex: 0 0 50%;\n        flex: 0 0 50%;\n    padding-right: 90px; }\n  #page-products-enterprise-engine .overview .container > div:last-child {\n    -ms-flex: 0 0 50%;\n        flex: 0 0 50%; }\n  @media (max-width: 992px) {\n    #page-products-enterprise-engine .overview .container {\n      -ms-flex-direction: column;\n          flex-direction: column; }\n      #page-products-enterprise-engine .overview .container > div {\n        max-width: 624px;\n        margin-left: auto;\n        margin-right: auto; }\n      #page-products-enterprise-engine .overview .container > div:first-child {\n        -ms-flex: 0 0 100%;\n            flex: 0 0 100%;\n        padding-right: 0px;\n        text-align: center; }\n        #page-products-enterprise-engine .overview .container > div:first-child img {\n          max-width: 400px;\n          margin-left: auto;\n          margin-right: auto; }\n      #page-products-enterprise-engine .overview .container > div:last-child {\n        margin-top: 40px;\n        -ms-flex: 0 0 100%;\n            flex: 0 0 100%; } }\n\n#page-products-enterprise-engine .chart {\n  margin-top: -8px; }\n  #page-products-enterprise-engine .chart h5 {\n    text-align: center;\n    font-family: \"Roboto Mono\", Menlo, Monaco, Consolas, \"Courier New\", monospace;\n    color: #020814;\n    line-height: 25px;\n    font-size: 12px;\n    text-align: center;\n    letter-spacing: 0.14em;\n    text-transform: uppercase;\n    position: relative; }\n    #page-products-enterprise-engine .chart h5 span {\n      z-index: 2;\n      position: relative;\n      background: #fff;\n      padding: 0 12px;\n      display: inline-block; }\n    #page-products-enterprise-engine .chart h5:before {\n      width: 100%;\n      height: 12px;\n      display: block;\n      content: '';\n      border-top: 1px solid #D2DBE6;\n      border-left: 1px solid #D2DBE6;\n      border-right: 1px solid #D2DBE6;\n      border-top-left-radius: 8px;\n      border-top-right-radius: 8px;\n      position: absolute;\n      top: 50%;\n      left: 0;\n      z-index: 1; }\n  #page-products-enterprise-engine .chart h6 {\n    font-weight: 600;\n    margin-top: 18px;\n    font-size: 13px;\n    color: #414D5C; }\n  #page-products-enterprise-engine .chart .checkmark-list {\n    display: -ms-flexbox;\n    display: flex;\n    -ms-flex-wrap: wrap;\n        flex-wrap: wrap;\n    width: 100%;\n    margin-bottom: -8px; }\n    #page-products-enterprise-engine .chart .checkmark-list li {\n      -ms-flex: 0 0 33%;\n          flex: 0 0 33%;\n      margin-bottom: 8px; }\n  @media (max-width: 1220px) {\n    #page-products-enterprise-engine .chart .checkmark-list li {\n      -ms-flex: 0 0 50%;\n          flex: 0 0 50%; } }\n  @media (max-width: 1220px) {\n    #page-products-enterprise-engine .chart h5 {\n      font-size: 11px; } }\n\n#page-products-enterprise-engine .chart__box {\n  padding: 20px;\n  border: 1px solid #D2DBE6;\n  border-radius: 8px;\n  margin-top: 16px;\n  margin-bottom: 32px; }\n\n#page-products-enterprise-engine .chart__card-list {\n  display: -ms-flexbox;\n  display: flex;\n  margin-left: -8px;\n  margin-right: -8px;\n  margin-top: -8px; }\n  @media (max-width: 480px) {\n    #page-products-enterprise-engine .chart__card-list {\n      -ms-flex-direction: column;\n          flex-direction: column; } }\n\n#page-products-enterprise-engine .chart__card {\n  -ms-flex: 1;\n      flex: 1;\n  min-height: 140px;\n  margin: 8px;\n  padding: 20px 16px;\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-align: center;\n      align-items: center;\n  -ms-flex-pack: center;\n      justify-content: center;\n  text-align: center;\n  background: #FFFFFF;\n  box-shadow: 0px 3px 8px rgba(2, 8, 20, 0.06), 0px 0px 2px rgba(2, 8, 20, 0.08);\n  border-radius: 8px;\n  color: #020814;\n  font-weight: 600;\n  line-height: 17px;\n  font-size: 14px;\n  font-family: \"Eina\", \"Helvetica Neue\", Helvetica, sans-serif; }\n  @media (max-width: 480px) {\n    #page-products-enterprise-engine .chart__card {\n      min-height: 0; } }\n\n#page-products-enterprise-engine .platform-list {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-direction: row;\n      flex-direction: row;\n  -ms-flex-pack: justify;\n      justify-content: space-between;\n  padding: 0 16px; }\n  #page-products-enterprise-engine .platform-list li {\n    font-weight: 500;\n    line-height: normal;\n    font-size: 9px;\n    text-align: center;\n    letter-spacing: 0.08em;\n    text-transform: uppercase;\n    color: #92A1B3; }\n  #page-products-enterprise-engine .platform-list .platform {\n    display: -ms-flexbox;\n    display: flex;\n    -ms-flex-direction: column;\n        flex-direction: column;\n    -ms-flex-align: center;\n        align-items: center; }\n    #page-products-enterprise-engine .platform-list .platform::before {\n      display: inline-block;\n      content: '';\n      height: 32px;\n      width: 32px;\n      background-image: url(\"/img/products/enterprise-engine/enterprise-engine-platform-sprite.png\");\n      background-repeat: no-repeat;\n      background-size: 32px 160px;\n      margin-bottom: 4px; }\n    #page-products-enterprise-engine .platform-list .platform--ios::before {\n      background-position: 0 0; }\n    #page-products-enterprise-engine .platform-list .platform--android::before {\n      background-position: 0 -32px; }\n    #page-products-enterprise-engine .platform-list .platform--electron::before {\n      background-position: 0 -64px; }\n    #page-products-enterprise-engine .platform-list .platform--pwa::before {\n      background-position: 0 -96px; }\n    #page-products-enterprise-engine .platform-list .platform--browser::before {\n      background-position: 0 -128px; }\n\n#page-products-enterprise-engine .checkmark-list--large {\n  margin-top: 48px; }\n\n#page-products-enterprise-engine .graphics--framework {\n  position: relative;\n  top: 0;\n  right: -40px;\n  height: 500px;\n  z-index: 0; }\n  #page-products-enterprise-engine .graphics--framework.active::before, #page-products-enterprise-engine .graphics--framework.active::after {\n    -webkit-animation: fadeInUp 1s .8s ease forwards;\n            animation: fadeInUp 1s .8s ease forwards; }\n  #page-products-enterprise-engine .graphics--framework.active::after {\n    -webkit-animation-delay: .4s;\n            animation-delay: .4s; }\n  #page-products-enterprise-engine .graphics--framework.active .shadow {\n    -webkit-animation: fadeIn 2s .2s ease forwards;\n            animation: fadeIn 2s .2s ease forwards; }\n  #page-products-enterprise-engine .graphics--framework::before, #page-products-enterprise-engine .graphics--framework::after,\n  #page-products-enterprise-engine .graphics--framework .shadow {\n    position: absolute;\n    content: '';\n    opacity: 0;\n    background: url(\"/img/homepage/framework-device-android.jpg\") 0 0 no-repeat;\n    background-size: 100%;\n    top: 78px;\n    right: 99px;\n    width: 470px;\n    height: 624px; }\n  #page-products-enterprise-engine .graphics--framework::after {\n    background-image: url(\"/img/homepage/framework-device-iphone.png\");\n    background-size: 100%;\n    width: 490px;\n    height: 790px;\n    top: 0px;\n    right: 0px; }\n  #page-products-enterprise-engine .graphics--framework .shadow {\n    background-image: url(\"/img/homepage/framework-devices-shadow.png\");\n    background-size: 100%;\n    width: 1266px;\n    height: 214px;\n    top: 654px;\n    right: -200px; }\n  @media (max-width: 1220px) {\n    #page-products-enterprise-engine .graphics--framework {\n      -webkit-transform: scale(0.75, 0.75);\n              transform: scale(0.75, 0.75);\n      top: -60px;\n      right: -80px; } }\n  @media (max-width: 992px) {\n    #page-products-enterprise-engine .graphics--framework {\n      -webkit-transform: scale(0.6, 0.6);\n              transform: scale(0.6, 0.6);\n      right: -100px; } }\n  @media (max-width: 768px) {\n    #page-products-enterprise-engine .graphics--framework {\n      height: 440px;\n      -webkit-transform: scale(0.4, 0.4);\n              transform: scale(0.4, 0.4);\n      right: -40px;\n      top: -90px; } }\n\n@media (max-width: 768px) {\n  #page-products-enterprise-engine #front-end-framework {\n    padding-top: 0; }\n    #page-products-enterprise-engine #front-end-framework .two-col {\n      -ms-flex-direction: column-reverse;\n          flex-direction: column-reverse; }\n    #page-products-enterprise-engine #front-end-framework .checkmark-list {\n      margin-left: auto;\n      margin-right: auto; } }\n\n#page-products-enterprise-engine #native-device-features hgroup.two-col {\n  margin-bottom: 100px; }\n\n#page-products-enterprise-engine #native-device-features hgroup h2 {\n  max-width: 382px; }\n\n@media (max-width: 768px) {\n  #page-products-enterprise-engine #native-device-features hgroup.two-col {\n    margin-bottom: 60px; } }\n\n#page-products-enterprise-engine .feature-list {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-direction: row;\n      flex-direction: row;\n  -ms-flex-wrap: wrap;\n      flex-wrap: wrap;\n  margin-left: -16px;\n  margin-right: -16px; }\n  #page-products-enterprise-engine .feature-list li {\n    -ms-flex: 0 0 25%;\n        flex: 0 0 25%;\n    padding: 16px; }\n  #page-products-enterprise-engine .feature-list h4 {\n    font-size: 20px;\n    line-height: 1.4;\n    letter-spacing: -0.02em;\n    color: #2F3A48;\n    font-weight: 600;\n    margin-bottom: 4px;\n    padding-right: 28px; }\n  #page-products-enterprise-engine .feature-list p {\n    font-size: 14px;\n    line-height: 25px;\n    letter-spacing: -0.02em;\n    color: #5B708B; }\n  #page-products-enterprise-engine .feature-list--large {\n    -ms-flex-direction: column;\n        flex-direction: column;\n    margin: 0; }\n    #page-products-enterprise-engine .feature-list--large li {\n      display: -ms-flexbox;\n      display: flex;\n      -ms-flex: none;\n          flex: none;\n      padding: 0; }\n    #page-products-enterprise-engine .feature-list--large li + li {\n      margin-top: 24px; }\n    #page-products-enterprise-engine .feature-list--large h4 {\n      margin-top: 0; }\n    #page-products-enterprise-engine .feature-list--large p {\n      line-height: 29px;\n      font-size: 16px;\n      letter-spacing: -0.02em;\n      color: #5B708B; }\n    #page-products-enterprise-engine .feature-list--large i {\n      margin-right: 24px;\n      margin-bottom: 18px; }\n  @media (max-width: 992px) {\n    #page-products-enterprise-engine .feature-list li {\n      -ms-flex: 0 0 33%;\n          flex: 0 0 33%; }\n    #page-products-enterprise-engine .feature-list--large li {\n      -ms-flex: none;\n          flex: none; } }\n  @media (max-width: 768px) {\n    #page-products-enterprise-engine .feature-list li {\n      -ms-flex: 0 0 50%;\n          flex: 0 0 50%; } }\n  @media (max-width: 480px) {\n    #page-products-enterprise-engine .feature-list li {\n      -ms-flex: 0 0 100%;\n          flex: 0 0 100%; }\n    #page-products-enterprise-engine .feature-list li,\n    #page-products-enterprise-engine .feature-list li hgroup {\n      display: -ms-flexbox;\n      display: flex;\n      -ms-flex-direction: column;\n          flex-direction: column;\n      -ms-flex-align: center;\n          align-items: center;\n      text-align: center; }\n    #page-products-enterprise-engine .feature-list--large i {\n      margin-right: 0; }\n    #page-products-enterprise-engine .feature-list h4 {\n      padding-right: 0; } }\n\n#page-products-enterprise-engine .feature-icon::before {\n  display: block;\n  content: '';\n  height: 32px;\n  width: 32px;\n  background-image: url(\"/img/products/enterprise-engine/enterprise-engine-native-feature-sprite.png\");\n  background-repeat: no-repeat;\n  background-size: 32px 256px;\n  margin-bottom: 14px; }\n\n#page-products-enterprise-engine .feature-icon--updates::before {\n  background-position: 0 0; }\n\n#page-products-enterprise-engine .feature-icon--sla::before {\n  background-position: 0 -32px; }\n\n#page-products-enterprise-engine .feature-icon--advisory::before {\n  background-position: 0 -64px; }\n\n#page-products-enterprise-engine .feature-icon--security::before {\n  background-position: 0 -96px; }\n\n#page-products-enterprise-engine .feature-icon--issues::before {\n  background-position: 0 -128px; }\n\n#page-products-enterprise-engine .feature-icon--guaranteed::before {\n  background-position: 0 -160px; }\n\n#page-products-enterprise-engine .feature-icon--discussions::before {\n  background-position: 0 -192px; }\n\n#page-products-enterprise-engine .feature-icon--protection::before {\n  background-position: 0 -224px; }\n\n#page-products-enterprise-engine .feature-list--large .feature-icon::before {\n  height: 48px;\n  width: 48px;\n  background-image: url(\"/img/products/enterprise-engine/enterprise-engine-partner-icon-sprite.png\");\n  background-size: 48px 96px;\n  margin-bottom: 0; }\n\n#page-products-enterprise-engine .feature-list--large .feature-icon--training::before {\n  background-position: 0 0; }\n\n#page-products-enterprise-engine .feature-list--large .feature-icon--advisory::before {\n  background-position: 0 -48px; }\n\n#page-products-enterprise-engine #pre-built-solutions h2 {\n  max-width: 500px; }\n\n#page-products-enterprise-engine #pre-built-solutions .checkmark-list {\n  max-width: none;\n  -webkit-columns: 2 auto;\n     -moz-columns: 2 auto;\n          columns: 2 auto;\n  -webkit-column-gap: 8px;\n     -moz-column-gap: 8px;\n          column-gap: 8px;\n  width: 108%; }\n\n@media (max-width: 992px) {\n  #page-products-enterprise-engine #pre-built-solutions .two-col {\n    display: block; } }\n\n@media (max-width: 480px) {\n  #page-products-enterprise-engine #pre-built-solutions .checkmark-list {\n    max-width: none;\n    -webkit-columns: 1 auto;\n       -moz-columns: 1 auto;\n            columns: 1 auto;\n    -webkit-column-gap: 8px;\n       -moz-column-gap: 8px;\n            column-gap: 8px;\n    width: 100%; } }\n\n#page-products-enterprise-engine .integrations {\n  position: relative;\n  height: 660px; }\n\n#page-products-enterprise-engine .integrations__identity-vault,\n#page-products-enterprise-engine .integrations__aws-amplify,\n#page-products-enterprise-engine .integrations__couchbase,\n#page-products-enterprise-engine .integrations__active-directory {\n  position: absolute;\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-direction: column;\n      flex-direction: column;\n  -ms-flex-align: center;\n      align-items: center;\n  font-size: 13px;\n  text-align: center;\n  font-weight: 500;\n  color: #5B708B; }\n  #page-products-enterprise-engine .integrations__identity-vault i,\n  #page-products-enterprise-engine .integrations__aws-amplify i,\n  #page-products-enterprise-engine .integrations__couchbase i,\n  #page-products-enterprise-engine .integrations__active-directory i {\n    border-radius: 999px;\n    display: -ms-inline-flexbox;\n    display: inline-flex;\n    -ms-flex-pack: center;\n        justify-content: center;\n    -ms-flex-align: center;\n        align-items: center;\n    box-shadow: 0px 2px 8px rgba(2, 8, 20, 0.1), 0px 8px 16px rgba(2, 8, 20, 0.08);\n    background-color: #fff;\n    margin-bottom: 14px; }\n  #page-products-enterprise-engine .integrations__identity-vault i::before,\n  #page-products-enterprise-engine .integrations__aws-amplify i::before,\n  #page-products-enterprise-engine .integrations__couchbase i::before,\n  #page-products-enterprise-engine .integrations__active-directory i::before {\n    content: '';\n    display: block;\n    background-image: url(\"/img/products/enterprise-engine/enterprise-engine-integrations-sprite.png\");\n    background-repeat: no-repeat;\n    background-size: 112px 294px;\n    background-position: center center; }\n\n#page-products-enterprise-engine .integrations__identity-vault {\n  top: 0;\n  left: 242px; }\n  #page-products-enterprise-engine .integrations__identity-vault i {\n    width: 124px;\n    height: 124px; }\n  #page-products-enterprise-engine .integrations__identity-vault i::before {\n    width: 56px;\n    height: 56px;\n    background-position: 0 -151px; }\n\n#page-products-enterprise-engine .integrations__aws-amplify {\n  top: 172px;\n  left: 0; }\n  #page-products-enterprise-engine .integrations__aws-amplify i {\n    width: 192px;\n    height: 192px; }\n  #page-products-enterprise-engine .integrations__aws-amplify i::before {\n    width: 112px;\n    height: 84px;\n    background-position: 0 0; }\n\n#page-products-enterprise-engine .integrations__couchbase {\n  top: 260px;\n  left: 324px; }\n  #page-products-enterprise-engine .integrations__couchbase i {\n    width: 124px;\n    height: 124px; }\n  #page-products-enterprise-engine .integrations__couchbase i::before {\n    width: 64px;\n    height: 65px;\n    background-position: 0 -85px; }\n\n#page-products-enterprise-engine .integrations__active-directory {\n  top: 460px;\n  left: 172px; }\n  #page-products-enterprise-engine .integrations__active-directory i {\n    width: 160px;\n    height: 160px; }\n  #page-products-enterprise-engine .integrations__active-directory i::before {\n    width: 83px;\n    height: 84px;\n    background-position: 0 -210px; }\n\n@media (max-width: 1220px) {\n  #page-products-enterprise-engine .integrations__identity-vault {\n    left: 212px; }\n  #page-products-enterprise-engine .integrations__couchbase {\n    left: 284px; }\n  #page-products-enterprise-engine .integrations__active-directory {\n    left: 119px; } }\n\n@media (max-width: 992px) {\n  #page-products-enterprise-engine .integrations {\n    -ms-flex: none;\n        flex: none;\n    height: 362px;\n    width: 586px;\n    margin-bottom: 40px; }\n  #page-products-enterprise-engine .integrations__identity-vault {\n    left: 232px; }\n  #page-products-enterprise-engine .integrations__aws-amplify {\n    top: 82px; }\n  #page-products-enterprise-engine .integrations__couchbase {\n    left: 251px;\n    top: 188px; }\n  #page-products-enterprise-engine .integrations__active-directory {\n    left: 416px;\n    top: 70px; } }\n\n@media (max-width: 768px) {\n  #page-products-enterprise-engine .integrations {\n    position: absolute;\n    top: -90px;\n    left: 50%;\n    -webkit-transform-origin: center center;\n            transform-origin: center center;\n    -webkit-transform: translateX(-50%) scale(0.7);\n            transform: translateX(-50%) scale(0.7); }\n  #page-products-enterprise-engine .integrations + div {\n    margin-top: 260px; } }\n\n@media (max-width: 480px) {\n  #page-products-enterprise-engine .integrations {\n    -webkit-transform: translateX(-50%) scale(0.6);\n            transform: translateX(-50%) scale(0.6); } }\n\n#page-products-enterprise-engine #expert-services hgroup + .two-col {\n  margin-top: 80px; }\n\n#page-products-enterprise-engine #expert-services .checkmark-list--large {\n  max-width: none;\n  padding-left: 116px;\n  margin-top: 0; }\n\n@media (max-width: 768px) {\n  #page-products-enterprise-engine #expert-services .feature-list,\n  #page-products-enterprise-engine #expert-services .checkmark-list {\n    margin-left: auto;\n    margin-right: auto;\n    max-width: 420px; }\n  #page-products-enterprise-engine #expert-services .checkmark-list--large {\n    padding-left: 0;\n    margin-top: 30px; } }\n\n#page-products-enterprise-engine #comparison-table {\n  margin-top: 8px; }\n  #page-products-enterprise-engine #comparison-table .container {\n    max-width: 960px; }\n  #page-products-enterprise-engine #comparison-table hgroup {\n    max-width: 540px;\n    margin-bottom: 60px; }\n    #page-products-enterprise-engine #comparison-table hgroup h2 {\n      color: #616E7E; }\n      #page-products-enterprise-engine #comparison-table hgroup h2 em {\n        font-style: normal;\n        color: #020814; }\n  @media (max-width: 768px) {\n    #page-products-enterprise-engine #comparison-table {\n      padding-top: 100px; }\n      #page-products-enterprise-engine #comparison-table hgroup {\n        margin-bottom: 30px; }\n      #page-products-enterprise-engine #comparison-table h2 {\n        text-align: left; } }\n  @media (max-width: 480px) {\n    #page-products-enterprise-engine #comparison-table h2 {\n      line-height: 38px;\n      font-size: 32px; } }\n\n#page-products-enterprise-engine .comp-table-wrapper {\n  overflow-x: auto;\n  -webkit-overflow-scrolling: touch;\n  margin-right: -15px;\n  padding-right: 15px; }\n\n#page-products-enterprise-engine .comp-table {\n  min-width: 546px; }\n  #page-products-enterprise-engine .comp-table th, #page-products-enterprise-engine .comp-table td {\n    width: 33%; }\n    #page-products-enterprise-engine .comp-table th:not(:first-child), #page-products-enterprise-engine .comp-table td:not(:first-child) {\n      text-align: center;\n      vertical-align: middle; }\n    #page-products-enterprise-engine .comp-table th:first-child, #page-products-enterprise-engine .comp-table td:first-child {\n      width: 40%; }\n    #page-products-enterprise-engine .comp-table th:last-child, #page-products-enterprise-engine .comp-table td:last-child {\n      background: #FFF7F5; }\n  #page-products-enterprise-engine .comp-table th {\n    padding: 20px;\n    border-bottom: 0;\n    font-family: \"Eina\", \"Helvetica Neue\", Helvetica, sans-serif;\n    font-size: 16px;\n    color: #5B708B;\n    font-weight: 600; }\n    #page-products-enterprise-engine .comp-table th:last-child {\n      border-top-right-radius: 8px;\n      border-top-left-radius: 8px;\n      color: #FF7B5E; }\n  #page-products-enterprise-engine .comp-table td {\n    font-size: 13px;\n    letter-spacing: -0.01em;\n    color: #73849A;\n    padding: 14px 20px;\n    border: 0; }\n    #page-products-enterprise-engine .comp-table td:first-child {\n      font-size: 14px;\n      color: #4E5B6A; }\n    #page-products-enterprise-engine .comp-table td ion-icon[name=\"checkmark\"] {\n      font-size: 18px;\n      color: #5B708B; }\n    #page-products-enterprise-engine .comp-table td:last-child ion-icon[name=\"checkmark\"] {\n      color: #FF7B5E; }\n    #page-products-enterprise-engine .comp-table td .dash {\n      width: 10px;\n      height: 2px;\n      background: #CED6E0;\n      display: inline-block;\n      -webkit-transform: translateY(-2px);\n              transform: translateY(-2px); }\n    #page-products-enterprise-engine .comp-table td .pill {\n      display: inline-block;\n      line-height: 1.2;\n      font-size: 8px;\n      text-align: center;\n      letter-spacing: 0.1em;\n      text-transform: uppercase;\n      color: #fff;\n      font-weight: 600;\n      background: #FF9982;\n      border-radius: 20px;\n      padding: 5px 10px; }\n  #page-products-enterprise-engine .comp-table .stripe td {\n    background: #F6F8FB; }\n    #page-products-enterprise-engine .comp-table .stripe td:last-child {\n      background: #FCE8E1; }\n  #page-products-enterprise-engine .comp-table__section td {\n    padding: 20px 20px 12px;\n    border-top: 1px solid #E9EDF3; }\n    #page-products-enterprise-engine .comp-table__section td:first-child {\n      font-family: \"Eina\", \"Helvetica Neue\", Helvetica, sans-serif;\n      font-size: 16px;\n      color: #020814;\n      font-weight: 600; }\n  #page-products-enterprise-engine .comp-table__section td:last-child {\n    border-top-color: #EEDCD6; }\n  #page-products-enterprise-engine .comp-table__section--pad td {\n    padding-bottom: 20px; }\n  #page-products-enterprise-engine .comp-table tr:last-child td:last-child {\n    border-bottom-right-radius: 8px;\n    border-bottom-left-radius: 8px; }\n\n#page-products-enterprise-engine .call-to-action {\n  background-color: #F6F8FB;\n  padding-top: 140px;\n  padding-bottom: 100px; }\n  #page-products-enterprise-engine .call-to-action .container {\n    max-width: 768px; }\n  #page-products-enterprise-engine .call-to-action hgroup {\n    margin-bottom: 40px; }\n    #page-products-enterprise-engine .call-to-action hgroup h3 {\n      font-size: 28px;\n      text-align: center;\n      letter-spacing: -0.01em;\n      color: #1A232F;\n      margin-bottom: 4px; }\n    #page-products-enterprise-engine .call-to-action hgroup p {\n      line-height: 32px;\n      font-size: 18px;\n      text-align: center;\n      letter-spacing: -0.01em;\n      color: #5B708B; }\n      #page-products-enterprise-engine .call-to-action hgroup p b {\n        font-weight: 500; }\n\n/*# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImVudGVycHJpc2UtZWRpdGlvbi5jc3MiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7RUFDRSxlQUFlO0VBQ2YsMEJBQTBCO0VBQzFCLGtCQUFrQjtFQUNsQixvQkFBb0I7RUFDcEIsZ0JBQWdCO0VBQ2hCLG1CQUFtQjtFQUNuQix1QkFBdUI7RUFDdkIsMEJBQTBCO0VBQzFCLG1CQUFtQjtFQUNuQixvQkFBb0IsRUFBRTtFQUN0QjtJQUNFLDBCQUEwQixFQUFFOztBQUVoQzs7O0VBR0Usd0JBQXdCLEVBQUU7O0FBRTVCO0VBQ0UsaUJBQWlCLEVBQUU7RUFDbkI7SUFDRSwrREFBK0QsRUFBRTs7QUFFckU7RUFDRSxrQkFBa0IsRUFBRTs7QUFFdEI7RUFDRSxzQkFBc0I7RUFDdEIsVUFBVTtFQUNWLFdBQVcsRUFBRTs7QUFFZjtFQUNFLHFCQUFjO0VBQWQsY0FBYztFQUNkLE9BQU87RUFDUCx5QkFBaUI7RUFBakIsaUJBQWlCO0VBQ2pCLGNBQWM7RUFDZCxzQkFBd0I7TUFBeEIsd0JBQXdCO0VBQ3hCLGtCQUFrQjtFQUNsQixpQkFBaUI7RUFDakIsWUFBWSxFQUFFO0VBQ2Q7SUFDRSxpQkFBaUI7SUFDakIsZ0ZBQWdGO0lBQ2hGLG1CQUFtQjtJQUNuQixrQkFBa0I7SUFDbEIsWUFBWTtJQUNaLGlCQUFpQixFQUFFO0lBQ25CO01BQ0UscUJBQWM7TUFBZCxjQUFjLEVBQUU7SUFDbEI7TUFDRSxZQUFRO1VBQVIsUUFBUTtNQUNSLHNCQUFzQixFQUFFO0lBQzFCO01BQ0UsK0JBQStCLEVBQUU7SUFDbkM7TUFDRSx3QkFBd0I7TUFDeEIsWUFBWTtNQUNaLGFBQWE7TUFDYix1QkFBdUI7TUFDdkIsNEJBQXFCO01BQXJCLHFCQUFxQjtNQUNyQixzQkFBd0I7VUFBeEIsd0JBQXdCO01BQ3hCLHVCQUFvQjtVQUFwQixvQkFBb0I7TUFDcEIsd0JBQXdCO01BQ3hCLGVBQWU7TUFDZixnQkFBZ0I7TUFDaEIsdUJBQXVCO01BQ3ZCLDBCQUEwQjtNQUMxQixpQkFBaUI7TUFDakIsNkRBQTZEO01BQzdELHNCQUFzQjtNQUN0QixxQ0FBcUM7TUFDckMsY0FBYyxFQUFFO0lBQ2xCOztNQUVFLFlBQVksRUFBRTtJQUNoQjtNQUNFLGlDQUFpQyxFQUFFO0VBQ3ZDO0lBQ0UsYUFBYSxFQUFFO0lBQ2Y7TUFDRSxXQUFXLEVBQUU7RUFDakI7SUFDRTtNQUNFLGVBQWUsRUFBRTtNQUNqQjtRQUNFLGlCQUFpQixFQUFFLEVBQUU7RUFDM0I7SUFDRTtNQUNFLHdCQUF3QjtNQUN4QixnQkFBZ0IsRUFBRSxFQUFFO0VBQ3hCO0lBQ0U7TUFDRSxjQUFjLEVBQUUsRUFBRTs7QUFFeEI7RUFDRSw0QkFBcUI7RUFBckIscUJBQXFCLEVBQUU7RUFDdkI7SUFDRSxZQUFZO0lBQ1osZUFBZTtJQUNmLG1CQUFlO1FBQWYsZUFBZTtJQUNmLGFBQWE7SUFDYiwwRkFBMEY7SUFDMUYsNkJBQTZCO0lBQzdCLDRCQUE0QjtJQUM1QixtQkFBbUI7SUFDbkIsbUJBQW1CO0lBQ25CLFVBQVUsRUFBRTtFQUNkO0lBQ0UseUJBQXlCLEVBQUU7RUFDN0I7SUFDRSw2QkFBNkIsRUFBRTtFQUNqQztJQUNFLDZCQUE2QixFQUFFO0VBQ2pDO0lBQ0UsNkJBQTZCLEVBQUU7O0FBRW5DO0VBQ0UsbUJBQW1CO0VBQ25CLG1CQUFtQjtFQUNuQixzQkFBc0I7RUFDdEIsb0JBQW9CO0VBQ3BCLG1CQUFtQjtFQUNuQixXQUFXO0VBQ1gsd0ZBQXdGO0VBQ3hGLDZCQUE2QjtFQUM3Qix1QkFBdUI7RUFDdkIsbUNBQW1DLEVBQUU7RUFDckM7SUFDRSxtQkFBbUI7SUFDbkIsV0FBVztJQUNYLG1CQUFtQjtJQUNuQixxQkFBYztJQUFkLGNBQWM7SUFDZCwyQkFBdUI7UUFBdkIsdUJBQXVCO0lBQ3ZCLHVCQUFvQjtRQUFwQixvQkFBb0IsRUFBRTtJQUN0QjtNQUNFLGtCQUFrQjtNQUNsQixnQkFBZ0I7TUFDaEIsdUJBQXVCO01BQ3ZCLDBCQUEwQjtNQUMxQixlQUFlO01BQ2YsOEVBQThFO01BQzlFLGlCQUFpQixFQUFFO0lBQ3JCO01BQ0Usa0JBQWtCO01BQ2xCLGdCQUFnQjtNQUNoQix3QkFBd0I7TUFDeEIsZUFBZTtNQUNmLGlCQUFpQjtNQUNqQixpQkFBaUIsRUFBRTtJQUNyQjtNQUNFLDZEQUE2RDtNQUM3RCxnQkFBZ0I7TUFDaEIsZUFBZTtNQUNmLGtCQUFrQjtNQUNsQixVQUFVO01BQ1YsaUJBQWlCLEVBQUU7SUFDckI7TUFDRSxpQkFBaUI7TUFDakIsWUFBWTtNQUNaLG9CQUFvQjtNQUNwQixpRkFBaUY7TUFDakYsb0JBQW9CO01BQ3BCLGlCQUFpQjtNQUNqQixnQkFBZ0I7TUFDaEIsdUJBQXVCO01BQ3ZCLHdCQUF3QixFQUFFO01BQzFCO1FBQ0UsMEJBQTBCLEVBQUU7SUFDaEM7TUFDRTtRQUNFLGdCQUFnQjtRQUNoQixrQkFBa0IsRUFBRTtNQUN0QjtRQUNFLGtCQUFrQjtRQUNsQixnQkFBZ0IsRUFBRSxFQUFFO0VBQzFCO0lBQ0U7TUFDRSxtQkFBbUI7TUFDbkIscUJBQXFCLEVBQUUsRUFBRTs7QUFFL0I7RUFDRSxtQkFBbUI7RUFDbkIsc0JBQXNCLEVBQUU7O0FBRTFCO0VBQ0UsOEJBQThCO0VBQzlCLG1CQUFtQixFQUFFOztBQUV2QjtFQUNFLG1CQUFtQixFQUFFOztBQUV2QjtFQUNFLHFCQUFjO0VBQWQsY0FBYyxFQUFFO0VBQ2hCO0lBQ0Usa0JBQWM7UUFBZCxjQUFjLEVBQUU7O0FBRXBCO0VBQ0UsaUJBQWlCLEVBQUU7O0FBRXJCO0VBQ0UsZUFBZTtFQUNmLGdCQUFnQjtFQUNoQixlQUFlO0VBQ2Ysb0JBQW9CO0VBQ3BCLGNBQWM7RUFDZCxpQkFBaUIsRUFBRTs7QUFFckI7RUFDRSxlQUFlO0VBQ2Ysa0JBQWtCO0VBQ2xCLGdCQUFnQjtFQUNoQixjQUFjO0VBQ2Qsb0JBQW9CO0VBQ3BCLGlCQUFpQjtFQUNqQix3QkFBd0IsRUFBRTs7QUFFNUI7RUFDRSxnQkFBZ0I7RUFDaEIsZUFBZTtFQUNmLHdCQUF3QjtFQUN4QixvQkFBb0IsRUFBRTs7QUFFeEI7RUFDRSw2REFBNkQ7RUFDN0Qsa0JBQWtCO0VBQ2xCLGdCQUFnQjtFQUNoQix3QkFBd0I7RUFDeEIsZUFBZSxFQUFFO0VBQ2pCO0lBQ0UsbUJBQW1CO0lBQ25CLGVBQWUsRUFBRTs7QUFFckI7RUFDRTtJQUNFLGtCQUFrQjtJQUNsQixnQkFBZ0IsRUFBRSxFQUFFOztBQUV4QjtFQUNFO0lBQ0Usa0JBQWtCO0lBQ2xCLHFCQUFxQixFQUFFO0VBQ3pCOzs7SUFHRSxtQkFBbUI7SUFDbkIsa0JBQWtCO0lBQ2xCLG1CQUFtQixFQUFFO0VBQ3ZCO0lBQ0Usb0JBQW9CLEVBQUU7RUFDeEI7SUFDRSxnQkFBZ0I7SUFDaEIsa0JBQWtCLEVBQUU7RUFDdEI7SUFDRSxrQkFBa0I7SUFDbEIsZ0JBQWdCO0lBQ2hCLDJCQUEyQjtJQUMzQixvQkFBb0IsRUFBRTtFQUN4QjtJQUNFLDJCQUF1QjtRQUF2Qix1QkFBdUIsRUFBRTtJQUN6QjtNQUNFLG1CQUFlO1VBQWYsZUFBZSxFQUFFLEVBQUU7O0FBRXpCO0VBQ0U7SUFDRSxnQkFBZ0I7SUFDaEIsa0JBQWtCLEVBQUUsRUFBRTs7QUFFMUI7RUFDRSxxQkFBYztFQUFkLGNBQWMsRUFBRTtFQUNoQjtJQUNFLGtCQUFrQjtJQUNsQixnQkFBZ0I7SUFDaEIsd0JBQXdCO0lBQ3hCLGVBQWUsRUFBRTtJQUNqQjtNQUNFLG1CQUFtQjtNQUNuQixlQUFlLEVBQUU7RUFDckI7SUFDRSxZQUFZO0lBQ1osYUFBYTtJQUNiLGlCQUFpQjtJQUNqQixpQkFBaUIsRUFBRTtFQUNyQjtJQUNFLGtCQUFjO1FBQWQsY0FBYztJQUNkLG9CQUFvQixFQUFFO0VBQ3hCO0lBQ0Usa0JBQWM7UUFBZCxjQUFjLEVBQUU7RUFDbEI7SUFDRTtNQUNFLDJCQUF1QjtVQUF2Qix1QkFBdUIsRUFBRTtNQUN6QjtRQUNFLGlCQUFpQjtRQUNqQixrQkFBa0I7UUFDbEIsbUJBQW1CLEVBQUU7TUFDdkI7UUFDRSxtQkFBZTtZQUFmLGVBQWU7UUFDZixtQkFBbUI7UUFDbkIsbUJBQW1CLEVBQUU7UUFDckI7VUFDRSxpQkFBaUI7VUFDakIsa0JBQWtCO1VBQ2xCLG1CQUFtQixFQUFFO01BQ3pCO1FBQ0UsaUJBQWlCO1FBQ2pCLG1CQUFlO1lBQWYsZUFBZSxFQUFFLEVBQUU7O0FBRTNCO0VBQ0UsaUJBQWlCLEVBQUU7RUFDbkI7SUFDRSxtQkFBbUI7SUFDbkIsOEVBQThFO0lBQzlFLGVBQWU7SUFDZixrQkFBa0I7SUFDbEIsZ0JBQWdCO0lBQ2hCLG1CQUFtQjtJQUNuQix1QkFBdUI7SUFDdkIsMEJBQTBCO0lBQzFCLG1CQUFtQixFQUFFO0lBQ3JCO01BQ0UsV0FBVztNQUNYLG1CQUFtQjtNQUNuQixpQkFBaUI7TUFDakIsZ0JBQWdCO01BQ2hCLHNCQUFzQixFQUFFO0lBQzFCO01BQ0UsWUFBWTtNQUNaLGFBQWE7TUFDYixlQUFlO01BQ2YsWUFBWTtNQUNaLDhCQUE4QjtNQUM5QiwrQkFBK0I7TUFDL0IsZ0NBQWdDO01BQ2hDLDRCQUE0QjtNQUM1Qiw2QkFBNkI7TUFDN0IsbUJBQW1CO01BQ25CLFNBQVM7TUFDVCxRQUFRO01BQ1IsV0FBVyxFQUFFO0VBQ2pCO0lBQ0UsaUJBQWlCO0lBQ2pCLGlCQUFpQjtJQUNqQixnQkFBZ0I7SUFDaEIsZUFBZSxFQUFFO0VBQ25CO0lBQ0UscUJBQWM7SUFBZCxjQUFjO0lBQ2Qsb0JBQWdCO1FBQWhCLGdCQUFnQjtJQUNoQixZQUFZO0lBQ1osb0JBQW9CLEVBQUU7SUFDdEI7TUFDRSxrQkFBYztVQUFkLGNBQWM7TUFDZCxtQkFBbUIsRUFBRTtFQUN6QjtJQUNFO01BQ0Usa0JBQWM7VUFBZCxjQUFjLEVBQUUsRUFBRTtFQUN0QjtJQUNFO01BQ0UsZ0JBQWdCLEVBQUUsRUFBRTs7QUFFMUI7RUFDRSxjQUFjO0VBQ2QsMEJBQTBCO0VBQzFCLG1CQUFtQjtFQUNuQixpQkFBaUI7RUFDakIsb0JBQW9CLEVBQUU7O0FBRXhCO0VBQ0UscUJBQWM7RUFBZCxjQUFjO0VBQ2Qsa0JBQWtCO0VBQ2xCLG1CQUFtQjtFQUNuQixpQkFBaUIsRUFBRTtFQUNuQjtJQUNFO01BQ0UsMkJBQXVCO1VBQXZCLHVCQUF1QixFQUFFLEVBQUU7O0FBRWpDO0VBQ0UsWUFBUTtNQUFSLFFBQVE7RUFDUixrQkFBa0I7RUFDbEIsWUFBWTtFQUNaLG1CQUFtQjtFQUNuQixxQkFBYztFQUFkLGNBQWM7RUFDZCx1QkFBb0I7TUFBcEIsb0JBQW9CO0VBQ3BCLHNCQUF3QjtNQUF4Qix3QkFBd0I7RUFDeEIsbUJBQW1CO0VBQ25CLG9CQUFvQjtFQUNwQiwrRUFBK0U7RUFDL0UsbUJBQW1CO0VBQ25CLGVBQWU7RUFDZixpQkFBaUI7RUFDakIsa0JBQWtCO0VBQ2xCLGdCQUFnQjtFQUNoQiw2REFBNkQsRUFBRTtFQUMvRDtJQUNFO01BQ0UsY0FBYyxFQUFFLEVBQUU7O0FBRXhCO0VBQ0UscUJBQWM7RUFBZCxjQUFjO0VBQ2Qsd0JBQW9CO01BQXBCLG9CQUFvQjtFQUNwQix1QkFBK0I7TUFBL0IsK0JBQStCO0VBQy9CLGdCQUFnQixFQUFFO0VBQ2xCO0lBQ0UsaUJBQWlCO0lBQ2pCLG9CQUFvQjtJQUNwQixlQUFlO0lBQ2YsbUJBQW1CO0lBQ25CLHVCQUF1QjtJQUN2QiwwQkFBMEI7SUFDMUIsZUFBZSxFQUFFO0VBQ25CO0lBQ0UscUJBQWM7SUFBZCxjQUFjO0lBQ2QsMkJBQXVCO1FBQXZCLHVCQUF1QjtJQUN2Qix1QkFBb0I7UUFBcEIsb0JBQW9CLEVBQUU7SUFDdEI7TUFDRSxzQkFBc0I7TUFDdEIsWUFBWTtNQUNaLGFBQWE7TUFDYixZQUFZO01BQ1osK0ZBQStGO01BQy9GLDZCQUE2QjtNQUM3Qiw0QkFBNEI7TUFDNUIsbUJBQW1CLEVBQUU7SUFDdkI7TUFDRSx5QkFBeUIsRUFBRTtJQUM3QjtNQUNFLDZCQUE2QixFQUFFO0lBQ2pDO01BQ0UsNkJBQTZCLEVBQUU7SUFDakM7TUFDRSw2QkFBNkIsRUFBRTtJQUNqQztNQUNFLDhCQUE4QixFQUFFOztBQUV0QztFQUNFLGlCQUFpQixFQUFFOztBQUVyQjtFQUNFLG1CQUFtQjtFQUNuQixPQUFPO0VBQ1AsYUFBYTtFQUNiLGNBQWM7RUFDZCxXQUFXLEVBQUU7RUFDYjtJQUNFLGlEQUF5QztZQUF6Qyx5Q0FBeUMsRUFBRTtFQUM3QztJQUNFLDZCQUFxQjtZQUFyQixxQkFBcUIsRUFBRTtFQUN6QjtJQUNFLCtDQUF1QztZQUF2Qyx1Q0FBdUMsRUFBRTtFQUMzQzs7SUFFRSxtQkFBbUI7SUFDbkIsWUFBWTtJQUNaLFdBQVc7SUFDWCw0RUFBNEU7SUFDNUUsc0JBQXNCO0lBQ3RCLFVBQVU7SUFDVixZQUFZO0lBQ1osYUFBYTtJQUNiLGNBQWMsRUFBRTtFQUNsQjtJQUNFLG1FQUFtRTtJQUNuRSxzQkFBc0I7SUFDdEIsYUFBYTtJQUNiLGNBQWM7SUFDZCxTQUFTO0lBQ1QsV0FBVyxFQUFFO0VBQ2Y7SUFDRSxvRUFBb0U7SUFDcEUsc0JBQXNCO0lBQ3RCLGNBQWM7SUFDZCxjQUFjO0lBQ2QsV0FBVztJQUNYLGNBQWMsRUFBRTtFQUNsQjtJQUNFO01BQ0UscUNBQTZCO2NBQTdCLDZCQUE2QjtNQUM3QixXQUFXO01BQ1gsYUFBYSxFQUFFLEVBQUU7RUFDckI7SUFDRTtNQUNFLG1DQUEyQjtjQUEzQiwyQkFBMkI7TUFDM0IsY0FBYyxFQUFFLEVBQUU7RUFDdEI7SUFDRTtNQUNFLGNBQWM7TUFDZCxtQ0FBMkI7Y0FBM0IsMkJBQTJCO01BQzNCLGFBQWE7TUFDYixXQUFXLEVBQUUsRUFBRTs7QUFFckI7RUFDRTtJQUNFLGVBQWUsRUFBRTtJQUNqQjtNQUNFLG1DQUErQjtVQUEvQiwrQkFBK0IsRUFBRTtJQUNuQztNQUNFLGtCQUFrQjtNQUNsQixtQkFBbUIsRUFBRSxFQUFFOztBQUU3QjtFQUNFLHFCQUFxQixFQUFFOztBQUV6QjtFQUNFLGlCQUFpQixFQUFFOztBQUVyQjtFQUNFO0lBQ0Usb0JBQW9CLEVBQUUsRUFBRTs7QUFFNUI7RUFDRSxxQkFBYztFQUFkLGNBQWM7RUFDZCx3QkFBb0I7TUFBcEIsb0JBQW9CO0VBQ3BCLG9CQUFnQjtNQUFoQixnQkFBZ0I7RUFDaEIsbUJBQW1CO0VBQ25CLG9CQUFvQixFQUFFO0VBQ3RCO0lBQ0Usa0JBQWM7UUFBZCxjQUFjO0lBQ2QsY0FBYyxFQUFFO0VBQ2xCO0lBQ0UsZ0JBQWdCO0lBQ2hCLGlCQUFpQjtJQUNqQix3QkFBd0I7SUFDeEIsZUFBZTtJQUNmLGlCQUFpQjtJQUNqQixtQkFBbUI7SUFDbkIsb0JBQW9CLEVBQUU7RUFDeEI7SUFDRSxnQkFBZ0I7SUFDaEIsa0JBQWtCO0lBQ2xCLHdCQUF3QjtJQUN4QixlQUFlLEVBQUU7RUFDbkI7SUFDRSwyQkFBdUI7UUFBdkIsdUJBQXVCO0lBQ3ZCLFVBQVUsRUFBRTtJQUNaO01BQ0UscUJBQWM7TUFBZCxjQUFjO01BQ2QsZUFBVztVQUFYLFdBQVc7TUFDWCxXQUFXLEVBQUU7SUFDZjtNQUNFLGlCQUFpQixFQUFFO0lBQ3JCO01BQ0UsY0FBYyxFQUFFO0lBQ2xCO01BQ0Usa0JBQWtCO01BQ2xCLGdCQUFnQjtNQUNoQix3QkFBd0I7TUFDeEIsZUFBZSxFQUFFO0lBQ25CO01BQ0UsbUJBQW1CO01BQ25CLG9CQUFvQixFQUFFO0VBQzFCO0lBQ0U7TUFDRSxrQkFBYztVQUFkLGNBQWMsRUFBRTtJQUNsQjtNQUNFLGVBQVc7VUFBWCxXQUFXLEVBQUUsRUFBRTtFQUNuQjtJQUNFO01BQ0Usa0JBQWM7VUFBZCxjQUFjLEVBQUUsRUFBRTtFQUN0QjtJQUNFO01BQ0UsbUJBQWU7VUFBZixlQUFlLEVBQUU7SUFDbkI7O01BRUUscUJBQWM7TUFBZCxjQUFjO01BQ2QsMkJBQXVCO1VBQXZCLHVCQUF1QjtNQUN2Qix1QkFBb0I7VUFBcEIsb0JBQW9CO01BQ3BCLG1CQUFtQixFQUFFO0lBQ3ZCO01BQ0UsZ0JBQWdCLEVBQUU7SUFDcEI7TUFDRSxpQkFBaUIsRUFBRSxFQUFFOztBQUUzQjtFQUNFLGVBQWU7RUFDZixZQUFZO0VBQ1osYUFBYTtFQUNiLFlBQVk7RUFDWixxR0FBcUc7RUFDckcsNkJBQTZCO0VBQzdCLDRCQUE0QjtFQUM1QixvQkFBb0IsRUFBRTs7QUFFeEI7RUFDRSx5QkFBeUIsRUFBRTs7QUFFN0I7RUFDRSw2QkFBNkIsRUFBRTs7QUFFakM7RUFDRSw2QkFBNkIsRUFBRTs7QUFFakM7RUFDRSw2QkFBNkIsRUFBRTs7QUFFakM7RUFDRSw4QkFBOEIsRUFBRTs7QUFFbEM7RUFDRSw4QkFBOEIsRUFBRTs7QUFFbEM7RUFDRSw4QkFBOEIsRUFBRTs7QUFFbEM7RUFDRSw4QkFBOEIsRUFBRTs7QUFFbEM7RUFDRSxhQUFhO0VBQ2IsWUFBWTtFQUNaLG1HQUFtRztFQUNuRywyQkFBMkI7RUFDM0IsaUJBQWlCLEVBQUU7O0FBRXJCO0VBQ0UseUJBQXlCLEVBQUU7O0FBRTdCO0VBQ0UsNkJBQTZCLEVBQUU7O0FBRWpDO0VBQ0UsaUJBQWlCLEVBQUU7O0FBRXJCO0VBQ0UsZ0JBQWdCO0VBQ2hCLHdCQUFnQjtLQUFoQixxQkFBZ0I7VUFBaEIsZ0JBQWdCO0VBQ2hCLHdCQUFnQjtLQUFoQixxQkFBZ0I7VUFBaEIsZ0JBQWdCO0VBQ2hCLFlBQVksRUFBRTs7QUFFaEI7RUFDRTtJQUNFLGVBQWUsRUFBRSxFQUFFOztBQUV2QjtFQUNFO0lBQ0UsZ0JBQWdCO0lBQ2hCLHdCQUFnQjtPQUFoQixxQkFBZ0I7WUFBaEIsZ0JBQWdCO0lBQ2hCLHdCQUFnQjtPQUFoQixxQkFBZ0I7WUFBaEIsZ0JBQWdCO0lBQ2hCLFlBQVksRUFBRSxFQUFFOztBQUVwQjtFQUNFLG1CQUFtQjtFQUNuQixjQUFjLEVBQUU7O0FBRWxCOzs7O0VBSUUsbUJBQW1CO0VBQ25CLHFCQUFjO0VBQWQsY0FBYztFQUNkLDJCQUF1QjtNQUF2Qix1QkFBdUI7RUFDdkIsdUJBQW9CO01BQXBCLG9CQUFvQjtFQUNwQixnQkFBZ0I7RUFDaEIsbUJBQW1CO0VBQ25CLGlCQUFpQjtFQUNqQixlQUFlLEVBQUU7RUFDakI7Ozs7SUFJRSxxQkFBcUI7SUFDckIsNEJBQXFCO0lBQXJCLHFCQUFxQjtJQUNyQixzQkFBd0I7UUFBeEIsd0JBQXdCO0lBQ3hCLHVCQUFvQjtRQUFwQixvQkFBb0I7SUFDcEIsK0VBQStFO0lBQy9FLHVCQUF1QjtJQUN2QixvQkFBb0IsRUFBRTtFQUN4Qjs7OztJQUlFLFlBQVk7SUFDWixlQUFlO0lBQ2YsbUdBQW1HO0lBQ25HLDZCQUE2QjtJQUM3Qiw2QkFBNkI7SUFDN0IsbUNBQW1DLEVBQUU7O0FBRXpDO0VBQ0UsT0FBTztFQUNQLFlBQVksRUFBRTtFQUNkO0lBQ0UsYUFBYTtJQUNiLGNBQWMsRUFBRTtFQUNsQjtJQUNFLFlBQVk7SUFDWixhQUFhO0lBQ2IsOEJBQThCLEVBQUU7O0FBRXBDO0VBQ0UsV0FBVztFQUNYLFFBQVEsRUFBRTtFQUNWO0lBQ0UsYUFBYTtJQUNiLGNBQWMsRUFBRTtFQUNsQjtJQUNFLGFBQWE7SUFDYixhQUFhO0lBQ2IseUJBQXlCLEVBQUU7O0FBRS9CO0VBQ0UsV0FBVztFQUNYLFlBQVksRUFBRTtFQUNkO0lBQ0UsYUFBYTtJQUNiLGNBQWMsRUFBRTtFQUNsQjtJQUNFLFlBQVk7SUFDWixhQUFhO0lBQ2IsNkJBQTZCLEVBQUU7O0FBRW5DO0VBQ0UsV0FBVztFQUNYLFlBQVksRUFBRTtFQUNkO0lBQ0UsYUFBYTtJQUNiLGNBQWMsRUFBRTtFQUNsQjtJQUNFLFlBQVk7SUFDWixhQUFhO0lBQ2IsOEJBQThCLEVBQUU7O0FBRXBDO0VBQ0U7SUFDRSxZQUFZLEVBQUU7RUFDaEI7SUFDRSxZQUFZLEVBQUU7RUFDaEI7SUFDRSxZQUFZLEVBQUUsRUFBRTs7QUFFcEI7RUFDRTtJQUNFLGVBQVc7UUFBWCxXQUFXO0lBQ1gsY0FBYztJQUNkLGFBQWE7SUFDYixvQkFBb0IsRUFBRTtFQUN4QjtJQUNFLFlBQVksRUFBRTtFQUNoQjtJQUNFLFVBQVUsRUFBRTtFQUNkO0lBQ0UsWUFBWTtJQUNaLFdBQVcsRUFBRTtFQUNmO0lBQ0UsWUFBWTtJQUNaLFVBQVUsRUFBRSxFQUFFOztBQUVsQjtFQUNFO0lBQ0UsbUJBQW1CO0lBQ25CLFdBQVc7SUFDWCxVQUFVO0lBQ1Ysd0NBQWdDO1lBQWhDLGdDQUFnQztJQUNoQywrQ0FBdUM7WUFBdkMsdUNBQXVDLEVBQUU7RUFDM0M7SUFDRSxrQkFBa0IsRUFBRSxFQUFFOztBQUUxQjtFQUNFO0lBQ0UsK0NBQXVDO1lBQXZDLHVDQUF1QyxFQUFFLEVBQUU7O0FBRS9DO0VBQ0UsaUJBQWlCLEVBQUU7O0FBRXJCO0VBQ0UsZ0JBQWdCO0VBQ2hCLG9CQUFvQjtFQUNwQixjQUFjLEVBQUU7O0FBRWxCO0VBQ0U7O0lBRUUsa0JBQWtCO0lBQ2xCLG1CQUFtQjtJQUNuQixpQkFBaUIsRUFBRTtFQUNyQjtJQUNFLGdCQUFnQjtJQUNoQixpQkFBaUIsRUFBRSxFQUFFOztBQUV6QjtFQUNFLGdCQUFnQixFQUFFO0VBQ2xCO0lBQ0UsaUJBQWlCLEVBQUU7RUFDckI7SUFDRSxpQkFBaUI7SUFDakIsb0JBQW9CLEVBQUU7SUFDdEI7TUFDRSxlQUFlLEVBQUU7TUFDakI7UUFDRSxtQkFBbUI7UUFDbkIsZUFBZSxFQUFFO0VBQ3ZCO0lBQ0U7TUFDRSxtQkFBbUIsRUFBRTtNQUNyQjtRQUNFLG9CQUFvQixFQUFFO01BQ3hCO1FBQ0UsaUJBQWlCLEVBQUUsRUFBRTtFQUMzQjtJQUNFO01BQ0Usa0JBQWtCO01BQ2xCLGdCQUFnQixFQUFFLEVBQUU7O0FBRTFCO0VBQ0UsaUJBQWlCO0VBQ2pCLGtDQUFrQztFQUNsQyxvQkFBb0I7RUFDcEIsb0JBQW9CLEVBQUU7O0FBRXhCO0VBQ0UsaUJBQWlCLEVBQUU7RUFDbkI7SUFDRSxXQUFXLEVBQUU7SUFDYjtNQUNFLG1CQUFtQjtNQUNuQix1QkFBdUIsRUFBRTtJQUMzQjtNQUNFLFdBQVcsRUFBRTtJQUNmO01BQ0Usb0JBQW9CLEVBQUU7RUFDMUI7SUFDRSxjQUFjO0lBQ2QsaUJBQWlCO0lBQ2pCLDZEQUE2RDtJQUM3RCxnQkFBZ0I7SUFDaEIsZUFBZTtJQUNmLGlCQUFpQixFQUFFO0lBQ25CO01BQ0UsNkJBQTZCO01BQzdCLDRCQUE0QjtNQUM1QixlQUFlLEVBQUU7RUFDckI7SUFDRSxnQkFBZ0I7SUFDaEIsd0JBQXdCO0lBQ3hCLGVBQWU7SUFDZixtQkFBbUI7SUFDbkIsVUFBVSxFQUFFO0lBQ1o7TUFDRSxnQkFBZ0I7TUFDaEIsZUFBZSxFQUFFO0lBQ25CO01BQ0UsZ0JBQWdCO01BQ2hCLGVBQWUsRUFBRTtJQUNuQjtNQUNFLGVBQWUsRUFBRTtJQUNuQjtNQUNFLFlBQVk7TUFDWixZQUFZO01BQ1osb0JBQW9CO01BQ3BCLHNCQUFzQjtNQUN0QixvQ0FBNEI7Y0FBNUIsNEJBQTRCLEVBQUU7SUFDaEM7TUFDRSxzQkFBc0I7TUFDdEIsaUJBQWlCO01BQ2pCLGVBQWU7TUFDZixtQkFBbUI7TUFDbkIsc0JBQXNCO01BQ3RCLDBCQUEwQjtNQUMxQixZQUFZO01BQ1osaUJBQWlCO01BQ2pCLG9CQUFvQjtNQUNwQixvQkFBb0I7TUFDcEIsa0JBQWtCLEVBQUU7RUFDeEI7SUFDRSxvQkFBb0IsRUFBRTtJQUN0QjtNQUNFLG9CQUFvQixFQUFFO0VBQzFCO0lBQ0Usd0JBQXdCO0lBQ3hCLDhCQUE4QixFQUFFO0lBQ2hDO01BQ0UsNkRBQTZEO01BQzdELGdCQUFnQjtNQUNoQixlQUFlO01BQ2YsaUJBQWlCLEVBQUU7RUFDdkI7SUFDRSwwQkFBMEIsRUFBRTtFQUM5QjtJQUNFLHFCQUFxQixFQUFFO0VBQ3pCO0lBQ0UsZ0NBQWdDO0lBQ2hDLCtCQUErQixFQUFFOztBQUVyQztFQUNFLDBCQUEwQjtFQUMxQixtQkFBbUI7RUFDbkIsc0JBQXNCLEVBQUU7RUFDeEI7SUFDRSxpQkFBaUIsRUFBRTtFQUNyQjtJQUNFLG9CQUFvQixFQUFFO0lBQ3RCO01BQ0UsZ0JBQWdCO01BQ2hCLG1CQUFtQjtNQUNuQix3QkFBd0I7TUFDeEIsZUFBZTtNQUNmLG1CQUFtQixFQUFFO0lBQ3ZCO01BQ0Usa0JBQWtCO01BQ2xCLGdCQUFnQjtNQUNoQixtQkFBbUI7TUFDbkIsd0JBQXdCO01BQ3hCLGVBQWUsRUFBRTtNQUNqQjtRQUNFLGlCQUFpQixFQUFFIiwiZmlsZSI6InBhZ2VzL3Byb2R1Y3RzL2VudGVycHJpc2UtZWRpdGlvbi5jc3MiLCJzb3VyY2VzQ29udGVudCI6WyIjcGFnZS1wcm9kdWN0cy1lbnRlcnByaXNlLWVuZ2luZSAuc3ViLWhlYWRlciAuYnRuIHtcbiAgY29sb3I6ICMxQTIzMkY7XG4gIGJhY2tncm91bmQtY29sb3I6ICNGRjk5ODI7XG4gIGZvbnQtd2VpZ2h0OiBib2xkO1xuICBsaW5lLWhlaWdodDogbm9ybWFsO1xuICBmb250LXNpemU6IDExcHg7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgbGV0dGVyLXNwYWNpbmc6IDAuMDhlbTtcbiAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcbiAgcGFkZGluZy1sZWZ0OiAxNXB4O1xuICBwYWRkaW5nLXJpZ2h0OiAxNXB4OyB9XG4gICNwYWdlLXByb2R1Y3RzLWVudGVycHJpc2UtZW5naW5lIC5zdWItaGVhZGVyIC5idG46aG92ZXIge1xuICAgIGJhY2tncm91bmQtY29sb3I6ICNmZmJhYWI7IH1cblxuI3BhZ2UtcHJvZHVjdHMtZW50ZXJwcmlzZS1lbmdpbmUgaDMsXG4jcGFnZS1wcm9kdWN0cy1lbnRlcnByaXNlLWVuZ2luZSBoMixcbiNwYWdlLXByb2R1Y3RzLWVudGVycHJpc2UtZW5naW5lIHAubGFyZ2Uge1xuICBsZXR0ZXItc3BhY2luZzogLTAuMDFlbTsgfVxuXG4jcGFnZS1wcm9kdWN0cy1lbnRlcnByaXNlLWVuZ2luZSBwIHtcbiAgZm9udC13ZWlnaHQ6IDQwMDsgfVxuICAjcGFnZS1wcm9kdWN0cy1lbnRlcnByaXNlLWVuZ2luZSBwOm5vdCgubGFyZ2UpIHtcbiAgICBmb250LWZhbWlseTogXCJJbnRlclwiLCBcIkludGVyIFVJXCIsIEhlbHZldGljYSwgQXJpYWwsIHNhbnMtc2VyaWY7IH1cblxuI3BhZ2UtcHJvZHVjdHMtZW50ZXJwcmlzZS1lbmdpbmUgbWFpbiB7XG4gIG92ZXJmbG93OiB2aXNpYmxlOyB9XG5cbiNwYWdlLXByb2R1Y3RzLWVudGVycHJpc2UtZW5naW5lIG1haW4gdWwge1xuICBsaXN0LXN0eWxlLXR5cGU6IG5vbmU7XG4gIG1hcmdpbjogMDtcbiAgcGFkZGluZzogMDsgfVxuXG4jcGFnZS1wcm9kdWN0cy1lbnRlcnByaXNlLWVuZ2luZSAucGFnZS1uYXYge1xuICBkaXNwbGF5OiBmbGV4O1xuICB0b3A6IDA7XG4gIHBvc2l0aW9uOiBzdGlja3k7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICBtYXJnaW4tdG9wOiAtNDBweDtcbiAgcGFkZGluZy10b3A6IDhweDtcbiAgei1pbmRleDogMjk7IH1cbiAgI3BhZ2UtcHJvZHVjdHMtZW50ZXJwcmlzZS1lbmdpbmUgLnBhZ2UtbmF2X19pbm5lciB7XG4gICAgYmFja2dyb3VuZDogI2ZmZjtcbiAgICBib3gtc2hhZG93OiAwcHggOHB4IDE2cHggcmdiYSgyLCA4LCAyMCwgMC4xKSwgMHB4IDhweCAzMnB4IHJnYmEoMiwgOCwgMjAsIDAuMDgpO1xuICAgIGJvcmRlci1yYWRpdXM6IDhweDtcbiAgICBtYXgtd2lkdGg6IDEwMDBweDtcbiAgICB3aWR0aDogMTAwJTtcbiAgICBvdmVyZmxvdzogaGlkZGVuOyB9XG4gICAgI3BhZ2UtcHJvZHVjdHMtZW50ZXJwcmlzZS1lbmdpbmUgLnBhZ2UtbmF2X19pbm5lciB1bCB7XG4gICAgICBkaXNwbGF5OiBmbGV4OyB9XG4gICAgI3BhZ2UtcHJvZHVjdHMtZW50ZXJwcmlzZS1lbmdpbmUgLnBhZ2UtbmF2X19pbm5lciBsaSB7XG4gICAgICBmbGV4OiAxO1xuICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOyB9XG4gICAgI3BhZ2UtcHJvZHVjdHMtZW50ZXJwcmlzZS1lbmdpbmUgLnBhZ2UtbmF2X19pbm5lciBsaSArIGxpIHtcbiAgICAgIGJvcmRlci1sZWZ0OiAxcHggc29saWQgI0U5RURGMzsgfVxuICAgICNwYWdlLXByb2R1Y3RzLWVudGVycHJpc2UtZW5naW5lIC5wYWdlLW5hdl9faW5uZXIgYSB7XG4gICAgICB0cmFuc2l0aW9uOiAwLjNzIGJvcmRlcjtcbiAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgaGVpZ2h0OiAxMDAlO1xuICAgICAgdHJhbnNpdGlvbjogY29sb3IgMC4ycztcbiAgICAgIGRpc3BsYXk6IGlubGluZS1mbGV4O1xuICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgcGFkZGluZzogMjBweCA0MHB4IDE2cHg7XG4gICAgICBjb2xvcjogIzRFNUI2QTtcbiAgICAgIGZvbnQtc2l6ZTogMTJweDtcbiAgICAgIGxldHRlci1zcGFjaW5nOiAwLjA2ZW07XG4gICAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xuICAgICAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgICAgIGZvbnQtZmFtaWx5OiBcIkVpbmFcIiwgXCJIZWx2ZXRpY2EgTmV1ZVwiLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7XG4gICAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG4gICAgICBib3JkZXItYm90dG9tOiAycHggc29saWQgdHJhbnNwYXJlbnQ7XG4gICAgICBvdXRsaW5lOiBub25lOyB9XG4gICAgI3BhZ2UtcHJvZHVjdHMtZW50ZXJwcmlzZS1lbmdpbmUgLnBhZ2UtbmF2X19pbm5lciBhOmhvdmVyLFxuICAgICNwYWdlLXByb2R1Y3RzLWVudGVycHJpc2UtZW5naW5lIC5wYWdlLW5hdl9faW5uZXIgYS5hY3RpdmUge1xuICAgICAgY29sb3I6ICMwMDA7IH1cbiAgICAjcGFnZS1wcm9kdWN0cy1lbnRlcnByaXNlLWVuZ2luZSAucGFnZS1uYXZfX2lubmVyIGEuYWN0aXZlIHtcbiAgICAgIGJvcmRlci1ib3R0b206IDJweCBzb2xpZCAjRkY5OTgyOyB9XG4gICNwYWdlLXByb2R1Y3RzLWVudGVycHJpc2UtZW5naW5lIC5wYWdlLW5hdi5hY3RpdmUgLnBhZ2UtbmF2X19pbm5lciBhOm5vdCguYWN0aXZlKSB7XG4gICAgb3BhY2l0eTogMC43OyB9XG4gICAgI3BhZ2UtcHJvZHVjdHMtZW50ZXJwcmlzZS1lbmdpbmUgLnBhZ2UtbmF2LmFjdGl2ZSAucGFnZS1uYXZfX2lubmVyIGE6bm90KC5hY3RpdmUpOmhvdmVyIHtcbiAgICAgIG9wYWNpdHk6IDE7IH1cbiAgQG1lZGlhIChtYXgtd2lkdGg6IDEwMDBweCkge1xuICAgICNwYWdlLXByb2R1Y3RzLWVudGVycHJpc2UtZW5naW5lIC5wYWdlLW5hdiB7XG4gICAgICBwYWRkaW5nLXRvcDogMDsgfVxuICAgICAgI3BhZ2UtcHJvZHVjdHMtZW50ZXJwcmlzZS1lbmdpbmUgLnBhZ2UtbmF2X19pbm5lciB7XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDA7IH0gfVxuICBAbWVkaWEgKG1heC13aWR0aDogOTkycHgpIHtcbiAgICAjcGFnZS1wcm9kdWN0cy1lbnRlcnByaXNlLWVuZ2luZSAucGFnZS1uYXZfX2lubmVyIGEge1xuICAgICAgcGFkZGluZzogMTRweCAyMHB4IDEycHg7XG4gICAgICBmb250LXNpemU6IDExcHg7IH0gfVxuICBAbWVkaWEgKG1heC13aWR0aDogNzY4cHgpIHtcbiAgICAjcGFnZS1wcm9kdWN0cy1lbnRlcnByaXNlLWVuZ2luZSAucGFnZS1uYXYge1xuICAgICAgZGlzcGxheTogbm9uZTsgfSB9XG5cbiNwYWdlLXByb2R1Y3RzLWVudGVycHJpc2UtZW5naW5lIC5wYWdlLW5hdl9faWNvbiB7XG4gIGRpc3BsYXk6IGlubGluZS1mbGV4OyB9XG4gICNwYWdlLXByb2R1Y3RzLWVudGVycHJpc2UtZW5naW5lIC5wYWdlLW5hdl9faWNvbjo6YmVmb3JlIHtcbiAgICBjb250ZW50OiAnJztcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgICBmbGV4OiAwIDAgMjlweDtcbiAgICBoZWlnaHQ6IDI5cHg7XG4gICAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFwiL2ltZy9wcm9kdWN0cy9lbnRlcnByaXNlLWVuZ2luZS9lbnRlcnByaXNlLWVuZ2luZS1uYXYtc3ByaXRlLnBuZ1wiKTtcbiAgICBiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0O1xuICAgIGJhY2tncm91bmQtc2l6ZTogMjlweCAxMTZweDtcbiAgICBtYXJnaW4tcmlnaHQ6IDE2cHg7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIHRvcDogLTNweDsgfVxuICAjcGFnZS1wcm9kdWN0cy1lbnRlcnByaXNlLWVuZ2luZSAucGFnZS1uYXZfX2ljb24tLWZyYW1ld29yazo6YmVmb3JlIHtcbiAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwIDA7IH1cbiAgI3BhZ2UtcHJvZHVjdHMtZW50ZXJwcmlzZS1lbmdpbmUgLnBhZ2UtbmF2X19pY29uLS1uYXRpdmU6OmJlZm9yZSB7XG4gICAgYmFja2dyb3VuZC1wb3NpdGlvbjogMCAtMjlweDsgfVxuICAjcGFnZS1wcm9kdWN0cy1lbnRlcnByaXNlLWVuZ2luZSAucGFnZS1uYXZfX2ljb24tLXNvbHV0aW9uczo6YmVmb3JlIHtcbiAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwIC01OHB4OyB9XG4gICNwYWdlLXByb2R1Y3RzLWVudGVycHJpc2UtZW5naW5lIC5wYWdlLW5hdl9faWNvbi0tc2VydmljZXM6OmJlZm9yZSB7XG4gICAgYmFja2dyb3VuZC1wb3NpdGlvbjogMCAtODdweDsgfVxuXG4jcGFnZS1wcm9kdWN0cy1lbnRlcnByaXNlLWVuZ2luZSAudG9wIHtcbiAgbWFyZ2luLXRvcDogLTIxOHB4O1xuICBwYWRkaW5nLXRvcDogMjgwcHg7XG4gIHBhZGRpbmctYm90dG9tOiAxNTJweDtcbiAgYmFja2dyb3VuZDogI0Y4RkFGRDtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICB6LWluZGV4OiAwO1xuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXCIvaW1nL3Byb2R1Y3RzL2VudGVycHJpc2UtZW5naW5lL2VudGVycHJpc2UtZWRpdGlvbi1oZXJvLWJnLnBuZ1wiKTtcbiAgYmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdDtcbiAgYmFja2dyb3VuZC1zaXplOiBjb3ZlcjtcbiAgYmFja2dyb3VuZC1wb3NpdGlvbjogY2VudGVyIGJvdHRvbTsgfVxuICAjcGFnZS1wcm9kdWN0cy1lbnRlcnByaXNlLWVuZ2luZSAudG9wIGhncm91cCB7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIHotaW5kZXg6IDI7XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyOyB9XG4gICAgI3BhZ2UtcHJvZHVjdHMtZW50ZXJwcmlzZS1lbmdpbmUgLnRvcCBoZ3JvdXAgaDQge1xuICAgICAgbGluZS1oZWlnaHQ6IDI1cHg7XG4gICAgICBmb250LXNpemU6IDEycHg7XG4gICAgICBsZXR0ZXItc3BhY2luZzogMC4xNGVtO1xuICAgICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcbiAgICAgIGNvbG9yOiAjNUI3MDhCO1xuICAgICAgZm9udC1mYW1pbHk6IFwiUm9ib3RvIE1vbm9cIiwgTWVubG8sIE1vbmFjbywgQ29uc29sYXMsIFwiQ291cmllciBOZXdcIiwgbW9ub3NwYWNlO1xuICAgICAgbWFyZ2luLWJvdHRvbTogMDsgfVxuICAgICNwYWdlLXByb2R1Y3RzLWVudGVycHJpc2UtZW5naW5lIC50b3AgaGdyb3VwIGgxIHtcbiAgICAgIGxpbmUtaGVpZ2h0OiA2M3B4O1xuICAgICAgZm9udC1zaXplOiA1NnB4O1xuICAgICAgbGV0dGVyLXNwYWNpbmc6IC0wLjAyZW07XG4gICAgICBjb2xvcjogIzAwMDAwMDtcbiAgICAgIG1heC13aWR0aDogNDIwcHg7XG4gICAgICBtYXJnaW4tdG9wOiAxNHB4OyB9XG4gICAgI3BhZ2UtcHJvZHVjdHMtZW50ZXJwcmlzZS1lbmdpbmUgLnRvcCBoZ3JvdXAgcCB7XG4gICAgICBmb250LWZhbWlseTogXCJFaW5hXCIsIFwiSGVsdmV0aWNhIE5ldWVcIiwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmO1xuICAgICAgZm9udC1zaXplOiAyMnB4O1xuICAgICAgY29sb3I6ICM1QjcwOEI7XG4gICAgICBsaW5lLWhlaWdodDogMzBweDtcbiAgICAgIG1hcmdpbjogMDtcbiAgICAgIG1heC13aWR0aDogNTcycHg7IH1cbiAgICAjcGFnZS1wcm9kdWN0cy1lbnRlcnByaXNlLWVuZ2luZSAudG9wIGhncm91cCAuYnRuIHtcbiAgICAgIG1hcmdpbi10b3A6IDI0cHg7XG4gICAgICBjb2xvcjogI2ZmZjtcbiAgICAgIGJhY2tncm91bmQ6ICMzODgwRkY7XG4gICAgICBib3gtc2hhZG93OiAwcHggMHB4IDJweCByZ2JhKDAsIDIwLCA1NiwgMC4xNCksIDBweCAycHggM3B4IHJnYmEoMCwgMjAsIDU2LCAwLjA4KTtcbiAgICAgIGJvcmRlci1yYWRpdXM6IDg0cHg7XG4gICAgICBmb250LXdlaWdodDogNzAwO1xuICAgICAgZm9udC1zaXplOiAxNHB4O1xuICAgICAgbGV0dGVyLXNwYWNpbmc6IDAuMDZlbTtcbiAgICAgIHBhZGRpbmc6IDE5cHggMjVweCAxNnB4OyB9XG4gICAgICAjcGFnZS1wcm9kdWN0cy1lbnRlcnByaXNlLWVuZ2luZSAudG9wIGhncm91cCAuYnRuOmhvdmVyIHtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogIzQyODdmZjsgfVxuICAgIEBtZWRpYSAobWF4LXdpZHRoOiA0ODBweCkge1xuICAgICAgI3BhZ2UtcHJvZHVjdHMtZW50ZXJwcmlzZS1lbmdpbmUgLnRvcCBoZ3JvdXAgaDEge1xuICAgICAgICBmb250LXNpemU6IDQwcHg7XG4gICAgICAgIGxpbmUtaGVpZ2h0OiA0NHB4OyB9XG4gICAgICAjcGFnZS1wcm9kdWN0cy1lbnRlcnByaXNlLWVuZ2luZSAudG9wIGhncm91cCBwIHtcbiAgICAgICAgbGluZS1oZWlnaHQ6IDMwcHg7XG4gICAgICAgIGZvbnQtc2l6ZTogMjBweDsgfSB9XG4gIEBtZWRpYSAobWF4LXdpZHRoOiA3NjhweCkge1xuICAgICNwYWdlLXByb2R1Y3RzLWVudGVycHJpc2UtZW5naW5lIC50b3Age1xuICAgICAgcGFkZGluZy10b3A6IDI2NHB4O1xuICAgICAgcGFkZGluZy1ib3R0b206IDc4cHg7IH0gfVxuXG4jcGFnZS1wcm9kdWN0cy1lbnRlcnByaXNlLWVuZ2luZSBtYWluIHNlY3Rpb24ge1xuICBwYWRkaW5nLXRvcDogMTAwcHg7XG4gIHBhZGRpbmctYm90dG9tOiAxNDBweDsgfVxuXG4jcGFnZS1wcm9kdWN0cy1lbnRlcnByaXNlLWVuZ2luZSBtYWluIHNlY3Rpb24uZGl2aWRlciB7XG4gIGJvcmRlci10b3A6IDFweCBzb2xpZCAjRTlFREYzO1xuICBwYWRkaW5nLXRvcDogMTQwcHg7IH1cblxuI3BhZ2UtcHJvZHVjdHMtZW50ZXJwcmlzZS1lbmdpbmUgbWFpbiAuY29udGFpbmVyIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlOyB9XG5cbiNwYWdlLXByb2R1Y3RzLWVudGVycHJpc2UtZW5naW5lIG1haW4gLnR3by1jb2wge1xuICBkaXNwbGF5OiBmbGV4OyB9XG4gICNwYWdlLXByb2R1Y3RzLWVudGVycHJpc2UtZW5naW5lIG1haW4gLnR3by1jb2wgPiAqIHtcbiAgICBmbGV4OiAwIDAgNTAlOyB9XG5cbiNwYWdlLXByb2R1Y3RzLWVudGVycHJpc2UtZW5naW5lIG1haW4gLm1lYXN1cmUge1xuICBtYXgtd2lkdGg6IDU1OHB4OyB9XG5cbiNwYWdlLXByb2R1Y3RzLWVudGVycHJpc2UtZW5naW5lIG1haW4gaDMge1xuICBjb2xvcjogIzYxNkU3RTtcbiAgZm9udC1zaXplOiAyMHB4O1xuICBsaW5lLWhlaWdodDogMTtcbiAgbWFyZ2luLWJvdHRvbTogMjhweDtcbiAgbWFyZ2luLXRvcDogMDtcbiAgZm9udC13ZWlnaHQ6IDYwMDsgfVxuXG4jcGFnZS1wcm9kdWN0cy1lbnRlcnByaXNlLWVuZ2luZSBtYWluIGgyIHtcbiAgY29sb3I6ICMwMjA4MTQ7XG4gIGxpbmUtaGVpZ2h0OiA2M3B4O1xuICBmb250LXNpemU6IDU2cHg7XG4gIG1hcmdpbi10b3A6IDA7XG4gIG1hcmdpbi1ib3R0b206IDMwcHg7XG4gIGZvbnQtd2VpZ2h0OiA2MDA7XG4gIGxldHRlci1zcGFjaW5nOiAtMC4wNGVtOyB9XG5cbiNwYWdlLXByb2R1Y3RzLWVudGVycHJpc2UtZW5naW5lIG1haW4gaDMubGFyZ2Uge1xuICBmb250LXNpemU6IDMycHg7XG4gIGNvbG9yOiAjMUEyMzJGO1xuICBsZXR0ZXItc3BhY2luZzogLTAuMDNlbTtcbiAgbWFyZ2luLWJvdHRvbTogMzhweDsgfVxuXG4jcGFnZS1wcm9kdWN0cy1lbnRlcnByaXNlLWVuZ2luZSBtYWluIHAubGFyZ2Uge1xuICBmb250LWZhbWlseTogXCJFaW5hXCIsIFwiSGVsdmV0aWNhIE5ldWVcIiwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmO1xuICBsaW5lLWhlaWdodDogMzNweDtcbiAgZm9udC1zaXplOiAyMHB4O1xuICBsZXR0ZXItc3BhY2luZzogLTAuMDFlbTtcbiAgY29sb3I6ICMwMjA4MTQ7IH1cbiAgI3BhZ2UtcHJvZHVjdHMtZW50ZXJwcmlzZS1lbmdpbmUgbWFpbiBwLmxhcmdlIGVtIHtcbiAgICBmb250LXN0eWxlOiBub3JtYWw7XG4gICAgY29sb3I6ICMyRjNBNDg7IH1cblxuQG1lZGlhIChtYXgtd2lkdGg6IDk5MnB4KSB7XG4gICNwYWdlLXByb2R1Y3RzLWVudGVycHJpc2UtZW5naW5lIG1haW4gaDIge1xuICAgIGxpbmUtaGVpZ2h0OiA1MnB4O1xuICAgIGZvbnQtc2l6ZTogNDhweDsgfSB9XG5cbkBtZWRpYSAobWF4LXdpZHRoOiA3NjhweCkge1xuICAjcGFnZS1wcm9kdWN0cy1lbnRlcnByaXNlLWVuZ2luZSBtYWluIHNlY3Rpb24ge1xuICAgIHBhZGRpbmctdG9wOiA4MHB4O1xuICAgIHBhZGRpbmctYm90dG9tOiA4MHB4OyB9XG4gICNwYWdlLXByb2R1Y3RzLWVudGVycHJpc2UtZW5naW5lIG1haW4gaDMsXG4gICNwYWdlLXByb2R1Y3RzLWVudGVycHJpc2UtZW5naW5lIG1haW4gaDIsXG4gICNwYWdlLXByb2R1Y3RzLWVudGVycHJpc2UtZW5naW5lIG1haW4gcC5sYXJnZSB7XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgIG1hcmdpbi1sZWZ0OiBhdXRvO1xuICAgIG1hcmdpbi1yaWdodDogYXV0bzsgfVxuICAjcGFnZS1wcm9kdWN0cy1lbnRlcnByaXNlLWVuZ2luZSBtYWluIGgzIHtcbiAgICBtYXJnaW4tYm90dG9tOiAxNnB4OyB9XG4gICNwYWdlLXByb2R1Y3RzLWVudGVycHJpc2UtZW5naW5lIG1haW4gaDMubGFyZ2Uge1xuICAgIGZvbnQtc2l6ZTogMjhweDtcbiAgICBsaW5lLWhlaWdodDogMzRweDsgfVxuICAjcGFnZS1wcm9kdWN0cy1lbnRlcnByaXNlLWVuZ2luZSBtYWluIGgyIHtcbiAgICBsaW5lLWhlaWdodDogNDhweDtcbiAgICBmb250LXNpemU6IDQycHg7XG4gICAgbWF4LXdpZHRoOiAxMDAlICFpbXBvcnRhbnQ7XG4gICAgbWFyZ2luLWJvdHRvbTogMTZweDsgfVxuICAjcGFnZS1wcm9kdWN0cy1lbnRlcnByaXNlLWVuZ2luZSBtYWluIC50d28tY29sIHtcbiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOyB9XG4gICAgI3BhZ2UtcHJvZHVjdHMtZW50ZXJwcmlzZS1lbmdpbmUgbWFpbiAudHdvLWNvbCA+ICoge1xuICAgICAgZmxleDogMCAwIDEwMCU7IH0gfVxuXG5AbWVkaWEgKG1heC13aWR0aDogNDgwcHgpIHtcbiAgI3BhZ2UtcHJvZHVjdHMtZW50ZXJwcmlzZS1lbmdpbmUgbWFpbiBoMy5sYXJnZSB7XG4gICAgZm9udC1zaXplOiAyNHB4O1xuICAgIGxpbmUtaGVpZ2h0OiAzMHB4OyB9IH1cblxuI3BhZ2UtcHJvZHVjdHMtZW50ZXJwcmlzZS1lbmdpbmUgLm92ZXJ2aWV3IC5jb250YWluZXIge1xuICBkaXNwbGF5OiBmbGV4OyB9XG4gICNwYWdlLXByb2R1Y3RzLWVudGVycHJpc2UtZW5naW5lIC5vdmVydmlldyAuY29udGFpbmVyIGgzIHtcbiAgICBsaW5lLWhlaWdodDogNDBweDtcbiAgICBmb250LXNpemU6IDI4cHg7XG4gICAgbGV0dGVyLXNwYWNpbmc6IC0wLjAyZW07XG4gICAgY29sb3I6ICM2MTZFN0U7IH1cbiAgICAjcGFnZS1wcm9kdWN0cy1lbnRlcnByaXNlLWVuZ2luZSAub3ZlcnZpZXcgLmNvbnRhaW5lciBoMyBlbSB7XG4gICAgICBmb250LXN0eWxlOiBub3JtYWw7XG4gICAgICBjb2xvcjogIzAyMDgxNDsgfVxuICAjcGFnZS1wcm9kdWN0cy1lbnRlcnByaXNlLWVuZ2luZSAub3ZlcnZpZXcgLmNvbnRhaW5lciBpbWcge1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIGhlaWdodDogYXV0bztcbiAgICBtYXJnaW4tdG9wOiA0MHB4O1xuICAgIG1heC13aWR0aDogNDIwcHg7IH1cbiAgI3BhZ2UtcHJvZHVjdHMtZW50ZXJwcmlzZS1lbmdpbmUgLm92ZXJ2aWV3IC5jb250YWluZXIgPiBkaXY6Zmlyc3QtY2hpbGQge1xuICAgIGZsZXg6IDAgMCA1MCU7XG4gICAgcGFkZGluZy1yaWdodDogOTBweDsgfVxuICAjcGFnZS1wcm9kdWN0cy1lbnRlcnByaXNlLWVuZ2luZSAub3ZlcnZpZXcgLmNvbnRhaW5lciA+IGRpdjpsYXN0LWNoaWxkIHtcbiAgICBmbGV4OiAwIDAgNTAlOyB9XG4gIEBtZWRpYSAobWF4LXdpZHRoOiA5OTJweCkge1xuICAgICNwYWdlLXByb2R1Y3RzLWVudGVycHJpc2UtZW5naW5lIC5vdmVydmlldyAuY29udGFpbmVyIHtcbiAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47IH1cbiAgICAgICNwYWdlLXByb2R1Y3RzLWVudGVycHJpc2UtZW5naW5lIC5vdmVydmlldyAuY29udGFpbmVyID4gZGl2IHtcbiAgICAgICAgbWF4LXdpZHRoOiA2MjRweDtcbiAgICAgICAgbWFyZ2luLWxlZnQ6IGF1dG87XG4gICAgICAgIG1hcmdpbi1yaWdodDogYXV0bzsgfVxuICAgICAgI3BhZ2UtcHJvZHVjdHMtZW50ZXJwcmlzZS1lbmdpbmUgLm92ZXJ2aWV3IC5jb250YWluZXIgPiBkaXY6Zmlyc3QtY2hpbGQge1xuICAgICAgICBmbGV4OiAwIDAgMTAwJTtcbiAgICAgICAgcGFkZGluZy1yaWdodDogMHB4O1xuICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7IH1cbiAgICAgICAgI3BhZ2UtcHJvZHVjdHMtZW50ZXJwcmlzZS1lbmdpbmUgLm92ZXJ2aWV3IC5jb250YWluZXIgPiBkaXY6Zmlyc3QtY2hpbGQgaW1nIHtcbiAgICAgICAgICBtYXgtd2lkdGg6IDQwMHB4O1xuICAgICAgICAgIG1hcmdpbi1sZWZ0OiBhdXRvO1xuICAgICAgICAgIG1hcmdpbi1yaWdodDogYXV0bzsgfVxuICAgICAgI3BhZ2UtcHJvZHVjdHMtZW50ZXJwcmlzZS1lbmdpbmUgLm92ZXJ2aWV3IC5jb250YWluZXIgPiBkaXY6bGFzdC1jaGlsZCB7XG4gICAgICAgIG1hcmdpbi10b3A6IDQwcHg7XG4gICAgICAgIGZsZXg6IDAgMCAxMDAlOyB9IH1cblxuI3BhZ2UtcHJvZHVjdHMtZW50ZXJwcmlzZS1lbmdpbmUgLmNoYXJ0IHtcbiAgbWFyZ2luLXRvcDogLThweDsgfVxuICAjcGFnZS1wcm9kdWN0cy1lbnRlcnByaXNlLWVuZ2luZSAuY2hhcnQgaDUge1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICBmb250LWZhbWlseTogXCJSb2JvdG8gTW9ub1wiLCBNZW5sbywgTW9uYWNvLCBDb25zb2xhcywgXCJDb3VyaWVyIE5ld1wiLCBtb25vc3BhY2U7XG4gICAgY29sb3I6ICMwMjA4MTQ7XG4gICAgbGluZS1oZWlnaHQ6IDI1cHg7XG4gICAgZm9udC1zaXplOiAxMnB4O1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICBsZXR0ZXItc3BhY2luZzogMC4xNGVtO1xuICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlOyB9XG4gICAgI3BhZ2UtcHJvZHVjdHMtZW50ZXJwcmlzZS1lbmdpbmUgLmNoYXJ0IGg1IHNwYW4ge1xuICAgICAgei1pbmRleDogMjtcbiAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgIGJhY2tncm91bmQ6ICNmZmY7XG4gICAgICBwYWRkaW5nOiAwIDEycHg7XG4gICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7IH1cbiAgICAjcGFnZS1wcm9kdWN0cy1lbnRlcnByaXNlLWVuZ2luZSAuY2hhcnQgaDU6YmVmb3JlIHtcbiAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgaGVpZ2h0OiAxMnB4O1xuICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICBjb250ZW50OiAnJztcbiAgICAgIGJvcmRlci10b3A6IDFweCBzb2xpZCAjRDJEQkU2O1xuICAgICAgYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjRDJEQkU2O1xuICAgICAgYm9yZGVyLXJpZ2h0OiAxcHggc29saWQgI0QyREJFNjtcbiAgICAgIGJvcmRlci10b3AtbGVmdC1yYWRpdXM6IDhweDtcbiAgICAgIGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiA4cHg7XG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICB0b3A6IDUwJTtcbiAgICAgIGxlZnQ6IDA7XG4gICAgICB6LWluZGV4OiAxOyB9XG4gICNwYWdlLXByb2R1Y3RzLWVudGVycHJpc2UtZW5naW5lIC5jaGFydCBoNiB7XG4gICAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgICBtYXJnaW4tdG9wOiAxOHB4O1xuICAgIGZvbnQtc2l6ZTogMTNweDtcbiAgICBjb2xvcjogIzQxNEQ1QzsgfVxuICAjcGFnZS1wcm9kdWN0cy1lbnRlcnByaXNlLWVuZ2luZSAuY2hhcnQgLmNoZWNrbWFyay1saXN0IHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGZsZXgtd3JhcDogd3JhcDtcbiAgICB3aWR0aDogMTAwJTtcbiAgICBtYXJnaW4tYm90dG9tOiAtOHB4OyB9XG4gICAgI3BhZ2UtcHJvZHVjdHMtZW50ZXJwcmlzZS1lbmdpbmUgLmNoYXJ0IC5jaGVja21hcmstbGlzdCBsaSB7XG4gICAgICBmbGV4OiAwIDAgMzMlO1xuICAgICAgbWFyZ2luLWJvdHRvbTogOHB4OyB9XG4gIEBtZWRpYSAobWF4LXdpZHRoOiAxMjIwcHgpIHtcbiAgICAjcGFnZS1wcm9kdWN0cy1lbnRlcnByaXNlLWVuZ2luZSAuY2hhcnQgLmNoZWNrbWFyay1saXN0IGxpIHtcbiAgICAgIGZsZXg6IDAgMCA1MCU7IH0gfVxuICBAbWVkaWEgKG1heC13aWR0aDogMTIyMHB4KSB7XG4gICAgI3BhZ2UtcHJvZHVjdHMtZW50ZXJwcmlzZS1lbmdpbmUgLmNoYXJ0IGg1IHtcbiAgICAgIGZvbnQtc2l6ZTogMTFweDsgfSB9XG5cbiNwYWdlLXByb2R1Y3RzLWVudGVycHJpc2UtZW5naW5lIC5jaGFydF9fYm94IHtcbiAgcGFkZGluZzogMjBweDtcbiAgYm9yZGVyOiAxcHggc29saWQgI0QyREJFNjtcbiAgYm9yZGVyLXJhZGl1czogOHB4O1xuICBtYXJnaW4tdG9wOiAxNnB4O1xuICBtYXJnaW4tYm90dG9tOiAzMnB4OyB9XG5cbiNwYWdlLXByb2R1Y3RzLWVudGVycHJpc2UtZW5naW5lIC5jaGFydF9fY2FyZC1saXN0IHtcbiAgZGlzcGxheTogZmxleDtcbiAgbWFyZ2luLWxlZnQ6IC04cHg7XG4gIG1hcmdpbi1yaWdodDogLThweDtcbiAgbWFyZ2luLXRvcDogLThweDsgfVxuICBAbWVkaWEgKG1heC13aWR0aDogNDgwcHgpIHtcbiAgICAjcGFnZS1wcm9kdWN0cy1lbnRlcnByaXNlLWVuZ2luZSAuY2hhcnRfX2NhcmQtbGlzdCB7XG4gICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOyB9IH1cblxuI3BhZ2UtcHJvZHVjdHMtZW50ZXJwcmlzZS1lbmdpbmUgLmNoYXJ0X19jYXJkIHtcbiAgZmxleDogMTtcbiAgbWluLWhlaWdodDogMTQwcHg7XG4gIG1hcmdpbjogOHB4O1xuICBwYWRkaW5nOiAyMHB4IDE2cHg7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIGJhY2tncm91bmQ6ICNGRkZGRkY7XG4gIGJveC1zaGFkb3c6IDBweCAzcHggOHB4IHJnYmEoMiwgOCwgMjAsIDAuMDYpLCAwcHggMHB4IDJweCByZ2JhKDIsIDgsIDIwLCAwLjA4KTtcbiAgYm9yZGVyLXJhZGl1czogOHB4O1xuICBjb2xvcjogIzAyMDgxNDtcbiAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgbGluZS1oZWlnaHQ6IDE3cHg7XG4gIGZvbnQtc2l6ZTogMTRweDtcbiAgZm9udC1mYW1pbHk6IFwiRWluYVwiLCBcIkhlbHZldGljYSBOZXVlXCIsIEhlbHZldGljYSwgc2Fucy1zZXJpZjsgfVxuICBAbWVkaWEgKG1heC13aWR0aDogNDgwcHgpIHtcbiAgICAjcGFnZS1wcm9kdWN0cy1lbnRlcnByaXNlLWVuZ2luZSAuY2hhcnRfX2NhcmQge1xuICAgICAgbWluLWhlaWdodDogMDsgfSB9XG5cbiNwYWdlLXByb2R1Y3RzLWVudGVycHJpc2UtZW5naW5lIC5wbGF0Zm9ybS1saXN0IHtcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246IHJvdztcbiAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xuICBwYWRkaW5nOiAwIDE2cHg7IH1cbiAgI3BhZ2UtcHJvZHVjdHMtZW50ZXJwcmlzZS1lbmdpbmUgLnBsYXRmb3JtLWxpc3QgbGkge1xuICAgIGZvbnQtd2VpZ2h0OiA1MDA7XG4gICAgbGluZS1oZWlnaHQ6IG5vcm1hbDtcbiAgICBmb250LXNpemU6IDlweDtcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgbGV0dGVyLXNwYWNpbmc6IDAuMDhlbTtcbiAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xuICAgIGNvbG9yOiAjOTJBMUIzOyB9XG4gICNwYWdlLXByb2R1Y3RzLWVudGVycHJpc2UtZW5naW5lIC5wbGF0Zm9ybS1saXN0IC5wbGF0Zm9ybSB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7IH1cbiAgICAjcGFnZS1wcm9kdWN0cy1lbnRlcnByaXNlLWVuZ2luZSAucGxhdGZvcm0tbGlzdCAucGxhdGZvcm06OmJlZm9yZSB7XG4gICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgICBjb250ZW50OiAnJztcbiAgICAgIGhlaWdodDogMzJweDtcbiAgICAgIHdpZHRoOiAzMnB4O1xuICAgICAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFwiL2ltZy9wcm9kdWN0cy9lbnRlcnByaXNlLWVuZ2luZS9lbnRlcnByaXNlLWVuZ2luZS1wbGF0Zm9ybS1zcHJpdGUucG5nXCIpO1xuICAgICAgYmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdDtcbiAgICAgIGJhY2tncm91bmQtc2l6ZTogMzJweCAxNjBweDtcbiAgICAgIG1hcmdpbi1ib3R0b206IDRweDsgfVxuICAgICNwYWdlLXByb2R1Y3RzLWVudGVycHJpc2UtZW5naW5lIC5wbGF0Zm9ybS1saXN0IC5wbGF0Zm9ybS0taW9zOjpiZWZvcmUge1xuICAgICAgYmFja2dyb3VuZC1wb3NpdGlvbjogMCAwOyB9XG4gICAgI3BhZ2UtcHJvZHVjdHMtZW50ZXJwcmlzZS1lbmdpbmUgLnBsYXRmb3JtLWxpc3QgLnBsYXRmb3JtLS1hbmRyb2lkOjpiZWZvcmUge1xuICAgICAgYmFja2dyb3VuZC1wb3NpdGlvbjogMCAtMzJweDsgfVxuICAgICNwYWdlLXByb2R1Y3RzLWVudGVycHJpc2UtZW5naW5lIC5wbGF0Zm9ybS1saXN0IC5wbGF0Zm9ybS0tZWxlY3Ryb246OmJlZm9yZSB7XG4gICAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwIC02NHB4OyB9XG4gICAgI3BhZ2UtcHJvZHVjdHMtZW50ZXJwcmlzZS1lbmdpbmUgLnBsYXRmb3JtLWxpc3QgLnBsYXRmb3JtLS1wd2E6OmJlZm9yZSB7XG4gICAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwIC05NnB4OyB9XG4gICAgI3BhZ2UtcHJvZHVjdHMtZW50ZXJwcmlzZS1lbmdpbmUgLnBsYXRmb3JtLWxpc3QgLnBsYXRmb3JtLS1icm93c2VyOjpiZWZvcmUge1xuICAgICAgYmFja2dyb3VuZC1wb3NpdGlvbjogMCAtMTI4cHg7IH1cblxuI3BhZ2UtcHJvZHVjdHMtZW50ZXJwcmlzZS1lbmdpbmUgLmNoZWNrbWFyay1saXN0LS1sYXJnZSB7XG4gIG1hcmdpbi10b3A6IDQ4cHg7IH1cblxuI3BhZ2UtcHJvZHVjdHMtZW50ZXJwcmlzZS1lbmdpbmUgLmdyYXBoaWNzLS1mcmFtZXdvcmsge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIHRvcDogMDtcbiAgcmlnaHQ6IC00MHB4O1xuICBoZWlnaHQ6IDUwMHB4O1xuICB6LWluZGV4OiAwOyB9XG4gICNwYWdlLXByb2R1Y3RzLWVudGVycHJpc2UtZW5naW5lIC5ncmFwaGljcy0tZnJhbWV3b3JrLmFjdGl2ZTo6YmVmb3JlLCAjcGFnZS1wcm9kdWN0cy1lbnRlcnByaXNlLWVuZ2luZSAuZ3JhcGhpY3MtLWZyYW1ld29yay5hY3RpdmU6OmFmdGVyIHtcbiAgICBhbmltYXRpb246IGZhZGVJblVwIDFzIC44cyBlYXNlIGZvcndhcmRzOyB9XG4gICNwYWdlLXByb2R1Y3RzLWVudGVycHJpc2UtZW5naW5lIC5ncmFwaGljcy0tZnJhbWV3b3JrLmFjdGl2ZTo6YWZ0ZXIge1xuICAgIGFuaW1hdGlvbi1kZWxheTogLjRzOyB9XG4gICNwYWdlLXByb2R1Y3RzLWVudGVycHJpc2UtZW5naW5lIC5ncmFwaGljcy0tZnJhbWV3b3JrLmFjdGl2ZSAuc2hhZG93IHtcbiAgICBhbmltYXRpb246IGZhZGVJbiAycyAuMnMgZWFzZSBmb3J3YXJkczsgfVxuICAjcGFnZS1wcm9kdWN0cy1lbnRlcnByaXNlLWVuZ2luZSAuZ3JhcGhpY3MtLWZyYW1ld29yazo6YmVmb3JlLCAjcGFnZS1wcm9kdWN0cy1lbnRlcnByaXNlLWVuZ2luZSAuZ3JhcGhpY3MtLWZyYW1ld29yazo6YWZ0ZXIsXG4gICNwYWdlLXByb2R1Y3RzLWVudGVycHJpc2UtZW5naW5lIC5ncmFwaGljcy0tZnJhbWV3b3JrIC5zaGFkb3cge1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICBjb250ZW50OiAnJztcbiAgICBvcGFjaXR5OiAwO1xuICAgIGJhY2tncm91bmQ6IHVybChcIi9pbWcvaG9tZXBhZ2UvZnJhbWV3b3JrLWRldmljZS1hbmRyb2lkLmpwZ1wiKSAwIDAgbm8tcmVwZWF0O1xuICAgIGJhY2tncm91bmQtc2l6ZTogMTAwJTtcbiAgICB0b3A6IDc4cHg7XG4gICAgcmlnaHQ6IDk5cHg7XG4gICAgd2lkdGg6IDQ3MHB4O1xuICAgIGhlaWdodDogNjI0cHg7IH1cbiAgI3BhZ2UtcHJvZHVjdHMtZW50ZXJwcmlzZS1lbmdpbmUgLmdyYXBoaWNzLS1mcmFtZXdvcms6OmFmdGVyIHtcbiAgICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXCIvaW1nL2hvbWVwYWdlL2ZyYW1ld29yay1kZXZpY2UtaXBob25lLnBuZ1wiKTtcbiAgICBiYWNrZ3JvdW5kLXNpemU6IDEwMCU7XG4gICAgd2lkdGg6IDQ5MHB4O1xuICAgIGhlaWdodDogNzkwcHg7XG4gICAgdG9wOiAwcHg7XG4gICAgcmlnaHQ6IDBweDsgfVxuICAjcGFnZS1wcm9kdWN0cy1lbnRlcnByaXNlLWVuZ2luZSAuZ3JhcGhpY3MtLWZyYW1ld29yayAuc2hhZG93IHtcbiAgICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXCIvaW1nL2hvbWVwYWdlL2ZyYW1ld29yay1kZXZpY2VzLXNoYWRvdy5wbmdcIik7XG4gICAgYmFja2dyb3VuZC1zaXplOiAxMDAlO1xuICAgIHdpZHRoOiAxMjY2cHg7XG4gICAgaGVpZ2h0OiAyMTRweDtcbiAgICB0b3A6IDY1NHB4O1xuICAgIHJpZ2h0OiAtMjAwcHg7IH1cbiAgQG1lZGlhIChtYXgtd2lkdGg6IDEyMjBweCkge1xuICAgICNwYWdlLXByb2R1Y3RzLWVudGVycHJpc2UtZW5naW5lIC5ncmFwaGljcy0tZnJhbWV3b3JrIHtcbiAgICAgIHRyYW5zZm9ybTogc2NhbGUoMC43NSwgMC43NSk7XG4gICAgICB0b3A6IC02MHB4O1xuICAgICAgcmlnaHQ6IC04MHB4OyB9IH1cbiAgQG1lZGlhIChtYXgtd2lkdGg6IDk5MnB4KSB7XG4gICAgI3BhZ2UtcHJvZHVjdHMtZW50ZXJwcmlzZS1lbmdpbmUgLmdyYXBoaWNzLS1mcmFtZXdvcmsge1xuICAgICAgdHJhbnNmb3JtOiBzY2FsZSgwLjYsIDAuNik7XG4gICAgICByaWdodDogLTEwMHB4OyB9IH1cbiAgQG1lZGlhIChtYXgtd2lkdGg6IDc2OHB4KSB7XG4gICAgI3BhZ2UtcHJvZHVjdHMtZW50ZXJwcmlzZS1lbmdpbmUgLmdyYXBoaWNzLS1mcmFtZXdvcmsge1xuICAgICAgaGVpZ2h0OiA0NDBweDtcbiAgICAgIHRyYW5zZm9ybTogc2NhbGUoMC40LCAwLjQpO1xuICAgICAgcmlnaHQ6IC00MHB4O1xuICAgICAgdG9wOiAtOTBweDsgfSB9XG5cbkBtZWRpYSAobWF4LXdpZHRoOiA3NjhweCkge1xuICAjcGFnZS1wcm9kdWN0cy1lbnRlcnByaXNlLWVuZ2luZSAjZnJvbnQtZW5kLWZyYW1ld29yayB7XG4gICAgcGFkZGluZy10b3A6IDA7IH1cbiAgICAjcGFnZS1wcm9kdWN0cy1lbnRlcnByaXNlLWVuZ2luZSAjZnJvbnQtZW5kLWZyYW1ld29yayAudHdvLWNvbCB7XG4gICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uLXJldmVyc2U7IH1cbiAgICAjcGFnZS1wcm9kdWN0cy1lbnRlcnByaXNlLWVuZ2luZSAjZnJvbnQtZW5kLWZyYW1ld29yayAuY2hlY2ttYXJrLWxpc3Qge1xuICAgICAgbWFyZ2luLWxlZnQ6IGF1dG87XG4gICAgICBtYXJnaW4tcmlnaHQ6IGF1dG87IH0gfVxuXG4jcGFnZS1wcm9kdWN0cy1lbnRlcnByaXNlLWVuZ2luZSAjbmF0aXZlLWRldmljZS1mZWF0dXJlcyBoZ3JvdXAudHdvLWNvbCB7XG4gIG1hcmdpbi1ib3R0b206IDEwMHB4OyB9XG5cbiNwYWdlLXByb2R1Y3RzLWVudGVycHJpc2UtZW5naW5lICNuYXRpdmUtZGV2aWNlLWZlYXR1cmVzIGhncm91cCBoMiB7XG4gIG1heC13aWR0aDogMzgycHg7IH1cblxuQG1lZGlhIChtYXgtd2lkdGg6IDc2OHB4KSB7XG4gICNwYWdlLXByb2R1Y3RzLWVudGVycHJpc2UtZW5naW5lICNuYXRpdmUtZGV2aWNlLWZlYXR1cmVzIGhncm91cC50d28tY29sIHtcbiAgICBtYXJnaW4tYm90dG9tOiA2MHB4OyB9IH1cblxuI3BhZ2UtcHJvZHVjdHMtZW50ZXJwcmlzZS1lbmdpbmUgLmZlYXR1cmUtbGlzdCB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtZGlyZWN0aW9uOiByb3c7XG4gIGZsZXgtd3JhcDogd3JhcDtcbiAgbWFyZ2luLWxlZnQ6IC0xNnB4O1xuICBtYXJnaW4tcmlnaHQ6IC0xNnB4OyB9XG4gICNwYWdlLXByb2R1Y3RzLWVudGVycHJpc2UtZW5naW5lIC5mZWF0dXJlLWxpc3QgbGkge1xuICAgIGZsZXg6IDAgMCAyNSU7XG4gICAgcGFkZGluZzogMTZweDsgfVxuICAjcGFnZS1wcm9kdWN0cy1lbnRlcnByaXNlLWVuZ2luZSAuZmVhdHVyZS1saXN0IGg0IHtcbiAgICBmb250LXNpemU6IDIwcHg7XG4gICAgbGluZS1oZWlnaHQ6IDEuNDtcbiAgICBsZXR0ZXItc3BhY2luZzogLTAuMDJlbTtcbiAgICBjb2xvcjogIzJGM0E0ODtcbiAgICBmb250LXdlaWdodDogNjAwO1xuICAgIG1hcmdpbi1ib3R0b206IDRweDtcbiAgICBwYWRkaW5nLXJpZ2h0OiAyOHB4OyB9XG4gICNwYWdlLXByb2R1Y3RzLWVudGVycHJpc2UtZW5naW5lIC5mZWF0dXJlLWxpc3QgcCB7XG4gICAgZm9udC1zaXplOiAxNHB4O1xuICAgIGxpbmUtaGVpZ2h0OiAyNXB4O1xuICAgIGxldHRlci1zcGFjaW5nOiAtMC4wMmVtO1xuICAgIGNvbG9yOiAjNUI3MDhCOyB9XG4gICNwYWdlLXByb2R1Y3RzLWVudGVycHJpc2UtZW5naW5lIC5mZWF0dXJlLWxpc3QtLWxhcmdlIHtcbiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgIG1hcmdpbjogMDsgfVxuICAgICNwYWdlLXByb2R1Y3RzLWVudGVycHJpc2UtZW5naW5lIC5mZWF0dXJlLWxpc3QtLWxhcmdlIGxpIHtcbiAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICBmbGV4OiBub25lO1xuICAgICAgcGFkZGluZzogMDsgfVxuICAgICNwYWdlLXByb2R1Y3RzLWVudGVycHJpc2UtZW5naW5lIC5mZWF0dXJlLWxpc3QtLWxhcmdlIGxpICsgbGkge1xuICAgICAgbWFyZ2luLXRvcDogMjRweDsgfVxuICAgICNwYWdlLXByb2R1Y3RzLWVudGVycHJpc2UtZW5naW5lIC5mZWF0dXJlLWxpc3QtLWxhcmdlIGg0IHtcbiAgICAgIG1hcmdpbi10b3A6IDA7IH1cbiAgICAjcGFnZS1wcm9kdWN0cy1lbnRlcnByaXNlLWVuZ2luZSAuZmVhdHVyZS1saXN0LS1sYXJnZSBwIHtcbiAgICAgIGxpbmUtaGVpZ2h0OiAyOXB4O1xuICAgICAgZm9udC1zaXplOiAxNnB4O1xuICAgICAgbGV0dGVyLXNwYWNpbmc6IC0wLjAyZW07XG4gICAgICBjb2xvcjogIzVCNzA4QjsgfVxuICAgICNwYWdlLXByb2R1Y3RzLWVudGVycHJpc2UtZW5naW5lIC5mZWF0dXJlLWxpc3QtLWxhcmdlIGkge1xuICAgICAgbWFyZ2luLXJpZ2h0OiAyNHB4O1xuICAgICAgbWFyZ2luLWJvdHRvbTogMThweDsgfVxuICBAbWVkaWEgKG1heC13aWR0aDogOTkycHgpIHtcbiAgICAjcGFnZS1wcm9kdWN0cy1lbnRlcnByaXNlLWVuZ2luZSAuZmVhdHVyZS1saXN0IGxpIHtcbiAgICAgIGZsZXg6IDAgMCAzMyU7IH1cbiAgICAjcGFnZS1wcm9kdWN0cy1lbnRlcnByaXNlLWVuZ2luZSAuZmVhdHVyZS1saXN0LS1sYXJnZSBsaSB7XG4gICAgICBmbGV4OiBub25lOyB9IH1cbiAgQG1lZGlhIChtYXgtd2lkdGg6IDc2OHB4KSB7XG4gICAgI3BhZ2UtcHJvZHVjdHMtZW50ZXJwcmlzZS1lbmdpbmUgLmZlYXR1cmUtbGlzdCBsaSB7XG4gICAgICBmbGV4OiAwIDAgNTAlOyB9IH1cbiAgQG1lZGlhIChtYXgtd2lkdGg6IDQ4MHB4KSB7XG4gICAgI3BhZ2UtcHJvZHVjdHMtZW50ZXJwcmlzZS1lbmdpbmUgLmZlYXR1cmUtbGlzdCBsaSB7XG4gICAgICBmbGV4OiAwIDAgMTAwJTsgfVxuICAgICNwYWdlLXByb2R1Y3RzLWVudGVycHJpc2UtZW5naW5lIC5mZWF0dXJlLWxpc3QgbGksXG4gICAgI3BhZ2UtcHJvZHVjdHMtZW50ZXJwcmlzZS1lbmdpbmUgLmZlYXR1cmUtbGlzdCBsaSBoZ3JvdXAge1xuICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgdGV4dC1hbGlnbjogY2VudGVyOyB9XG4gICAgI3BhZ2UtcHJvZHVjdHMtZW50ZXJwcmlzZS1lbmdpbmUgLmZlYXR1cmUtbGlzdC0tbGFyZ2UgaSB7XG4gICAgICBtYXJnaW4tcmlnaHQ6IDA7IH1cbiAgICAjcGFnZS1wcm9kdWN0cy1lbnRlcnByaXNlLWVuZ2luZSAuZmVhdHVyZS1saXN0IGg0IHtcbiAgICAgIHBhZGRpbmctcmlnaHQ6IDA7IH0gfVxuXG4jcGFnZS1wcm9kdWN0cy1lbnRlcnByaXNlLWVuZ2luZSAuZmVhdHVyZS1pY29uOjpiZWZvcmUge1xuICBkaXNwbGF5OiBibG9jaztcbiAgY29udGVudDogJyc7XG4gIGhlaWdodDogMzJweDtcbiAgd2lkdGg6IDMycHg7XG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcIi9pbWcvcHJvZHVjdHMvZW50ZXJwcmlzZS1lbmdpbmUvZW50ZXJwcmlzZS1lbmdpbmUtbmF0aXZlLWZlYXR1cmUtc3ByaXRlLnBuZ1wiKTtcbiAgYmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdDtcbiAgYmFja2dyb3VuZC1zaXplOiAzMnB4IDI1NnB4O1xuICBtYXJnaW4tYm90dG9tOiAxNHB4OyB9XG5cbiNwYWdlLXByb2R1Y3RzLWVudGVycHJpc2UtZW5naW5lIC5mZWF0dXJlLWljb24tLXVwZGF0ZXM6OmJlZm9yZSB7XG4gIGJhY2tncm91bmQtcG9zaXRpb246IDAgMDsgfVxuXG4jcGFnZS1wcm9kdWN0cy1lbnRlcnByaXNlLWVuZ2luZSAuZmVhdHVyZS1pY29uLS1zbGE6OmJlZm9yZSB7XG4gIGJhY2tncm91bmQtcG9zaXRpb246IDAgLTMycHg7IH1cblxuI3BhZ2UtcHJvZHVjdHMtZW50ZXJwcmlzZS1lbmdpbmUgLmZlYXR1cmUtaWNvbi0tYWR2aXNvcnk6OmJlZm9yZSB7XG4gIGJhY2tncm91bmQtcG9zaXRpb246IDAgLTY0cHg7IH1cblxuI3BhZ2UtcHJvZHVjdHMtZW50ZXJwcmlzZS1lbmdpbmUgLmZlYXR1cmUtaWNvbi0tc2VjdXJpdHk6OmJlZm9yZSB7XG4gIGJhY2tncm91bmQtcG9zaXRpb246IDAgLTk2cHg7IH1cblxuI3BhZ2UtcHJvZHVjdHMtZW50ZXJwcmlzZS1lbmdpbmUgLmZlYXR1cmUtaWNvbi0taXNzdWVzOjpiZWZvcmUge1xuICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwIC0xMjhweDsgfVxuXG4jcGFnZS1wcm9kdWN0cy1lbnRlcnByaXNlLWVuZ2luZSAuZmVhdHVyZS1pY29uLS1ndWFyYW50ZWVkOjpiZWZvcmUge1xuICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwIC0xNjBweDsgfVxuXG4jcGFnZS1wcm9kdWN0cy1lbnRlcnByaXNlLWVuZ2luZSAuZmVhdHVyZS1pY29uLS1kaXNjdXNzaW9uczo6YmVmb3JlIHtcbiAgYmFja2dyb3VuZC1wb3NpdGlvbjogMCAtMTkycHg7IH1cblxuI3BhZ2UtcHJvZHVjdHMtZW50ZXJwcmlzZS1lbmdpbmUgLmZlYXR1cmUtaWNvbi0tcHJvdGVjdGlvbjo6YmVmb3JlIHtcbiAgYmFja2dyb3VuZC1wb3NpdGlvbjogMCAtMjI0cHg7IH1cblxuI3BhZ2UtcHJvZHVjdHMtZW50ZXJwcmlzZS1lbmdpbmUgLmZlYXR1cmUtbGlzdC0tbGFyZ2UgLmZlYXR1cmUtaWNvbjo6YmVmb3JlIHtcbiAgaGVpZ2h0OiA0OHB4O1xuICB3aWR0aDogNDhweDtcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFwiL2ltZy9wcm9kdWN0cy9lbnRlcnByaXNlLWVuZ2luZS9lbnRlcnByaXNlLWVuZ2luZS1wYXJ0bmVyLWljb24tc3ByaXRlLnBuZ1wiKTtcbiAgYmFja2dyb3VuZC1zaXplOiA0OHB4IDk2cHg7XG4gIG1hcmdpbi1ib3R0b206IDA7IH1cblxuI3BhZ2UtcHJvZHVjdHMtZW50ZXJwcmlzZS1lbmdpbmUgLmZlYXR1cmUtbGlzdC0tbGFyZ2UgLmZlYXR1cmUtaWNvbi0tdHJhaW5pbmc6OmJlZm9yZSB7XG4gIGJhY2tncm91bmQtcG9zaXRpb246IDAgMDsgfVxuXG4jcGFnZS1wcm9kdWN0cy1lbnRlcnByaXNlLWVuZ2luZSAuZmVhdHVyZS1saXN0LS1sYXJnZSAuZmVhdHVyZS1pY29uLS1hZHZpc29yeTo6YmVmb3JlIHtcbiAgYmFja2dyb3VuZC1wb3NpdGlvbjogMCAtNDhweDsgfVxuXG4jcGFnZS1wcm9kdWN0cy1lbnRlcnByaXNlLWVuZ2luZSAjcHJlLWJ1aWx0LXNvbHV0aW9ucyBoMiB7XG4gIG1heC13aWR0aDogNTAwcHg7IH1cblxuI3BhZ2UtcHJvZHVjdHMtZW50ZXJwcmlzZS1lbmdpbmUgI3ByZS1idWlsdC1zb2x1dGlvbnMgLmNoZWNrbWFyay1saXN0IHtcbiAgbWF4LXdpZHRoOiBub25lO1xuICBjb2x1bW5zOiAyIGF1dG87XG4gIGNvbHVtbi1nYXA6IDhweDtcbiAgd2lkdGg6IDEwOCU7IH1cblxuQG1lZGlhIChtYXgtd2lkdGg6IDk5MnB4KSB7XG4gICNwYWdlLXByb2R1Y3RzLWVudGVycHJpc2UtZW5naW5lICNwcmUtYnVpbHQtc29sdXRpb25zIC50d28tY29sIHtcbiAgICBkaXNwbGF5OiBibG9jazsgfSB9XG5cbkBtZWRpYSAobWF4LXdpZHRoOiA0ODBweCkge1xuICAjcGFnZS1wcm9kdWN0cy1lbnRlcnByaXNlLWVuZ2luZSAjcHJlLWJ1aWx0LXNvbHV0aW9ucyAuY2hlY2ttYXJrLWxpc3Qge1xuICAgIG1heC13aWR0aDogbm9uZTtcbiAgICBjb2x1bW5zOiAxIGF1dG87XG4gICAgY29sdW1uLWdhcDogOHB4O1xuICAgIHdpZHRoOiAxMDAlOyB9IH1cblxuI3BhZ2UtcHJvZHVjdHMtZW50ZXJwcmlzZS1lbmdpbmUgLmludGVncmF0aW9ucyB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgaGVpZ2h0OiA2NjBweDsgfVxuXG4jcGFnZS1wcm9kdWN0cy1lbnRlcnByaXNlLWVuZ2luZSAuaW50ZWdyYXRpb25zX19pZGVudGl0eS12YXVsdCxcbiNwYWdlLXByb2R1Y3RzLWVudGVycHJpc2UtZW5naW5lIC5pbnRlZ3JhdGlvbnNfX2F3cy1hbXBsaWZ5LFxuI3BhZ2UtcHJvZHVjdHMtZW50ZXJwcmlzZS1lbmdpbmUgLmludGVncmF0aW9uc19fY291Y2hiYXNlLFxuI3BhZ2UtcHJvZHVjdHMtZW50ZXJwcmlzZS1lbmdpbmUgLmludGVncmF0aW9uc19fYWN0aXZlLWRpcmVjdG9yeSB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgZm9udC1zaXplOiAxM3B4O1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIGZvbnQtd2VpZ2h0OiA1MDA7XG4gIGNvbG9yOiAjNUI3MDhCOyB9XG4gICNwYWdlLXByb2R1Y3RzLWVudGVycHJpc2UtZW5naW5lIC5pbnRlZ3JhdGlvbnNfX2lkZW50aXR5LXZhdWx0IGksXG4gICNwYWdlLXByb2R1Y3RzLWVudGVycHJpc2UtZW5naW5lIC5pbnRlZ3JhdGlvbnNfX2F3cy1hbXBsaWZ5IGksXG4gICNwYWdlLXByb2R1Y3RzLWVudGVycHJpc2UtZW5naW5lIC5pbnRlZ3JhdGlvbnNfX2NvdWNoYmFzZSBpLFxuICAjcGFnZS1wcm9kdWN0cy1lbnRlcnByaXNlLWVuZ2luZSAuaW50ZWdyYXRpb25zX19hY3RpdmUtZGlyZWN0b3J5IGkge1xuICAgIGJvcmRlci1yYWRpdXM6IDk5OXB4O1xuICAgIGRpc3BsYXk6IGlubGluZS1mbGV4O1xuICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgYm94LXNoYWRvdzogMHB4IDJweCA4cHggcmdiYSgyLCA4LCAyMCwgMC4xKSwgMHB4IDhweCAxNnB4IHJnYmEoMiwgOCwgMjAsIDAuMDgpO1xuICAgIGJhY2tncm91bmQtY29sb3I6ICNmZmY7XG4gICAgbWFyZ2luLWJvdHRvbTogMTRweDsgfVxuICAjcGFnZS1wcm9kdWN0cy1lbnRlcnByaXNlLWVuZ2luZSAuaW50ZWdyYXRpb25zX19pZGVudGl0eS12YXVsdCBpOjpiZWZvcmUsXG4gICNwYWdlLXByb2R1Y3RzLWVudGVycHJpc2UtZW5naW5lIC5pbnRlZ3JhdGlvbnNfX2F3cy1hbXBsaWZ5IGk6OmJlZm9yZSxcbiAgI3BhZ2UtcHJvZHVjdHMtZW50ZXJwcmlzZS1lbmdpbmUgLmludGVncmF0aW9uc19fY291Y2hiYXNlIGk6OmJlZm9yZSxcbiAgI3BhZ2UtcHJvZHVjdHMtZW50ZXJwcmlzZS1lbmdpbmUgLmludGVncmF0aW9uc19fYWN0aXZlLWRpcmVjdG9yeSBpOjpiZWZvcmUge1xuICAgIGNvbnRlbnQ6ICcnO1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIGJhY2tncm91bmQtaW1hZ2U6IHVybChcIi9pbWcvcHJvZHVjdHMvZW50ZXJwcmlzZS1lbmdpbmUvZW50ZXJwcmlzZS1lbmdpbmUtaW50ZWdyYXRpb25zLXNwcml0ZS5wbmdcIik7XG4gICAgYmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdDtcbiAgICBiYWNrZ3JvdW5kLXNpemU6IDExMnB4IDI5NHB4O1xuICAgIGJhY2tncm91bmQtcG9zaXRpb246IGNlbnRlciBjZW50ZXI7IH1cblxuI3BhZ2UtcHJvZHVjdHMtZW50ZXJwcmlzZS1lbmdpbmUgLmludGVncmF0aW9uc19faWRlbnRpdHktdmF1bHQge1xuICB0b3A6IDA7XG4gIGxlZnQ6IDI0MnB4OyB9XG4gICNwYWdlLXByb2R1Y3RzLWVudGVycHJpc2UtZW5naW5lIC5pbnRlZ3JhdGlvbnNfX2lkZW50aXR5LXZhdWx0IGkge1xuICAgIHdpZHRoOiAxMjRweDtcbiAgICBoZWlnaHQ6IDEyNHB4OyB9XG4gICNwYWdlLXByb2R1Y3RzLWVudGVycHJpc2UtZW5naW5lIC5pbnRlZ3JhdGlvbnNfX2lkZW50aXR5LXZhdWx0IGk6OmJlZm9yZSB7XG4gICAgd2lkdGg6IDU2cHg7XG4gICAgaGVpZ2h0OiA1NnB4O1xuICAgIGJhY2tncm91bmQtcG9zaXRpb246IDAgLTE1MXB4OyB9XG5cbiNwYWdlLXByb2R1Y3RzLWVudGVycHJpc2UtZW5naW5lIC5pbnRlZ3JhdGlvbnNfX2F3cy1hbXBsaWZ5IHtcbiAgdG9wOiAxNzJweDtcbiAgbGVmdDogMDsgfVxuICAjcGFnZS1wcm9kdWN0cy1lbnRlcnByaXNlLWVuZ2luZSAuaW50ZWdyYXRpb25zX19hd3MtYW1wbGlmeSBpIHtcbiAgICB3aWR0aDogMTkycHg7XG4gICAgaGVpZ2h0OiAxOTJweDsgfVxuICAjcGFnZS1wcm9kdWN0cy1lbnRlcnByaXNlLWVuZ2luZSAuaW50ZWdyYXRpb25zX19hd3MtYW1wbGlmeSBpOjpiZWZvcmUge1xuICAgIHdpZHRoOiAxMTJweDtcbiAgICBoZWlnaHQ6IDg0cHg7XG4gICAgYmFja2dyb3VuZC1wb3NpdGlvbjogMCAwOyB9XG5cbiNwYWdlLXByb2R1Y3RzLWVudGVycHJpc2UtZW5naW5lIC5pbnRlZ3JhdGlvbnNfX2NvdWNoYmFzZSB7XG4gIHRvcDogMjYwcHg7XG4gIGxlZnQ6IDMyNHB4OyB9XG4gICNwYWdlLXByb2R1Y3RzLWVudGVycHJpc2UtZW5naW5lIC5pbnRlZ3JhdGlvbnNfX2NvdWNoYmFzZSBpIHtcbiAgICB3aWR0aDogMTI0cHg7XG4gICAgaGVpZ2h0OiAxMjRweDsgfVxuICAjcGFnZS1wcm9kdWN0cy1lbnRlcnByaXNlLWVuZ2luZSAuaW50ZWdyYXRpb25zX19jb3VjaGJhc2UgaTo6YmVmb3JlIHtcbiAgICB3aWR0aDogNjRweDtcbiAgICBoZWlnaHQ6IDY1cHg7XG4gICAgYmFja2dyb3VuZC1wb3NpdGlvbjogMCAtODVweDsgfVxuXG4jcGFnZS1wcm9kdWN0cy1lbnRlcnByaXNlLWVuZ2luZSAuaW50ZWdyYXRpb25zX19hY3RpdmUtZGlyZWN0b3J5IHtcbiAgdG9wOiA0NjBweDtcbiAgbGVmdDogMTcycHg7IH1cbiAgI3BhZ2UtcHJvZHVjdHMtZW50ZXJwcmlzZS1lbmdpbmUgLmludGVncmF0aW9uc19fYWN0aXZlLWRpcmVjdG9yeSBpIHtcbiAgICB3aWR0aDogMTYwcHg7XG4gICAgaGVpZ2h0OiAxNjBweDsgfVxuICAjcGFnZS1wcm9kdWN0cy1lbnRlcnByaXNlLWVuZ2luZSAuaW50ZWdyYXRpb25zX19hY3RpdmUtZGlyZWN0b3J5IGk6OmJlZm9yZSB7XG4gICAgd2lkdGg6IDgzcHg7XG4gICAgaGVpZ2h0OiA4NHB4O1xuICAgIGJhY2tncm91bmQtcG9zaXRpb246IDAgLTIxMHB4OyB9XG5cbkBtZWRpYSAobWF4LXdpZHRoOiAxMjIwcHgpIHtcbiAgI3BhZ2UtcHJvZHVjdHMtZW50ZXJwcmlzZS1lbmdpbmUgLmludGVncmF0aW9uc19faWRlbnRpdHktdmF1bHQge1xuICAgIGxlZnQ6IDIxMnB4OyB9XG4gICNwYWdlLXByb2R1Y3RzLWVudGVycHJpc2UtZW5naW5lIC5pbnRlZ3JhdGlvbnNfX2NvdWNoYmFzZSB7XG4gICAgbGVmdDogMjg0cHg7IH1cbiAgI3BhZ2UtcHJvZHVjdHMtZW50ZXJwcmlzZS1lbmdpbmUgLmludGVncmF0aW9uc19fYWN0aXZlLWRpcmVjdG9yeSB7XG4gICAgbGVmdDogMTE5cHg7IH0gfVxuXG5AbWVkaWEgKG1heC13aWR0aDogOTkycHgpIHtcbiAgI3BhZ2UtcHJvZHVjdHMtZW50ZXJwcmlzZS1lbmdpbmUgLmludGVncmF0aW9ucyB7XG4gICAgZmxleDogbm9uZTtcbiAgICBoZWlnaHQ6IDM2MnB4O1xuICAgIHdpZHRoOiA1ODZweDtcbiAgICBtYXJnaW4tYm90dG9tOiA0MHB4OyB9XG4gICNwYWdlLXByb2R1Y3RzLWVudGVycHJpc2UtZW5naW5lIC5pbnRlZ3JhdGlvbnNfX2lkZW50aXR5LXZhdWx0IHtcbiAgICBsZWZ0OiAyMzJweDsgfVxuICAjcGFnZS1wcm9kdWN0cy1lbnRlcnByaXNlLWVuZ2luZSAuaW50ZWdyYXRpb25zX19hd3MtYW1wbGlmeSB7XG4gICAgdG9wOiA4MnB4OyB9XG4gICNwYWdlLXByb2R1Y3RzLWVudGVycHJpc2UtZW5naW5lIC5pbnRlZ3JhdGlvbnNfX2NvdWNoYmFzZSB7XG4gICAgbGVmdDogMjUxcHg7XG4gICAgdG9wOiAxODhweDsgfVxuICAjcGFnZS1wcm9kdWN0cy1lbnRlcnByaXNlLWVuZ2luZSAuaW50ZWdyYXRpb25zX19hY3RpdmUtZGlyZWN0b3J5IHtcbiAgICBsZWZ0OiA0MTZweDtcbiAgICB0b3A6IDcwcHg7IH0gfVxuXG5AbWVkaWEgKG1heC13aWR0aDogNzY4cHgpIHtcbiAgI3BhZ2UtcHJvZHVjdHMtZW50ZXJwcmlzZS1lbmdpbmUgLmludGVncmF0aW9ucyB7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIHRvcDogLTkwcHg7XG4gICAgbGVmdDogNTAlO1xuICAgIHRyYW5zZm9ybS1vcmlnaW46IGNlbnRlciBjZW50ZXI7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC01MCUpIHNjYWxlKDAuNyk7IH1cbiAgI3BhZ2UtcHJvZHVjdHMtZW50ZXJwcmlzZS1lbmdpbmUgLmludGVncmF0aW9ucyArIGRpdiB7XG4gICAgbWFyZ2luLXRvcDogMjYwcHg7IH0gfVxuXG5AbWVkaWEgKG1heC13aWR0aDogNDgwcHgpIHtcbiAgI3BhZ2UtcHJvZHVjdHMtZW50ZXJwcmlzZS1lbmdpbmUgLmludGVncmF0aW9ucyB7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC01MCUpIHNjYWxlKDAuNik7IH0gfVxuXG4jcGFnZS1wcm9kdWN0cy1lbnRlcnByaXNlLWVuZ2luZSAjZXhwZXJ0LXNlcnZpY2VzIGhncm91cCArIC50d28tY29sIHtcbiAgbWFyZ2luLXRvcDogODBweDsgfVxuXG4jcGFnZS1wcm9kdWN0cy1lbnRlcnByaXNlLWVuZ2luZSAjZXhwZXJ0LXNlcnZpY2VzIC5jaGVja21hcmstbGlzdC0tbGFyZ2Uge1xuICBtYXgtd2lkdGg6IG5vbmU7XG4gIHBhZGRpbmctbGVmdDogMTE2cHg7XG4gIG1hcmdpbi10b3A6IDA7IH1cblxuQG1lZGlhIChtYXgtd2lkdGg6IDc2OHB4KSB7XG4gICNwYWdlLXByb2R1Y3RzLWVudGVycHJpc2UtZW5naW5lICNleHBlcnQtc2VydmljZXMgLmZlYXR1cmUtbGlzdCxcbiAgI3BhZ2UtcHJvZHVjdHMtZW50ZXJwcmlzZS1lbmdpbmUgI2V4cGVydC1zZXJ2aWNlcyAuY2hlY2ttYXJrLWxpc3Qge1xuICAgIG1hcmdpbi1sZWZ0OiBhdXRvO1xuICAgIG1hcmdpbi1yaWdodDogYXV0bztcbiAgICBtYXgtd2lkdGg6IDQyMHB4OyB9XG4gICNwYWdlLXByb2R1Y3RzLWVudGVycHJpc2UtZW5naW5lICNleHBlcnQtc2VydmljZXMgLmNoZWNrbWFyay1saXN0LS1sYXJnZSB7XG4gICAgcGFkZGluZy1sZWZ0OiAwO1xuICAgIG1hcmdpbi10b3A6IDMwcHg7IH0gfVxuXG4jcGFnZS1wcm9kdWN0cy1lbnRlcnByaXNlLWVuZ2luZSAjY29tcGFyaXNvbi10YWJsZSB7XG4gIG1hcmdpbi10b3A6IDhweDsgfVxuICAjcGFnZS1wcm9kdWN0cy1lbnRlcnByaXNlLWVuZ2luZSAjY29tcGFyaXNvbi10YWJsZSAuY29udGFpbmVyIHtcbiAgICBtYXgtd2lkdGg6IDk2MHB4OyB9XG4gICNwYWdlLXByb2R1Y3RzLWVudGVycHJpc2UtZW5naW5lICNjb21wYXJpc29uLXRhYmxlIGhncm91cCB7XG4gICAgbWF4LXdpZHRoOiA1NDBweDtcbiAgICBtYXJnaW4tYm90dG9tOiA2MHB4OyB9XG4gICAgI3BhZ2UtcHJvZHVjdHMtZW50ZXJwcmlzZS1lbmdpbmUgI2NvbXBhcmlzb24tdGFibGUgaGdyb3VwIGgyIHtcbiAgICAgIGNvbG9yOiAjNjE2RTdFOyB9XG4gICAgICAjcGFnZS1wcm9kdWN0cy1lbnRlcnByaXNlLWVuZ2luZSAjY29tcGFyaXNvbi10YWJsZSBoZ3JvdXAgaDIgZW0ge1xuICAgICAgICBmb250LXN0eWxlOiBub3JtYWw7XG4gICAgICAgIGNvbG9yOiAjMDIwODE0OyB9XG4gIEBtZWRpYSAobWF4LXdpZHRoOiA3NjhweCkge1xuICAgICNwYWdlLXByb2R1Y3RzLWVudGVycHJpc2UtZW5naW5lICNjb21wYXJpc29uLXRhYmxlIHtcbiAgICAgIHBhZGRpbmctdG9wOiAxMDBweDsgfVxuICAgICAgI3BhZ2UtcHJvZHVjdHMtZW50ZXJwcmlzZS1lbmdpbmUgI2NvbXBhcmlzb24tdGFibGUgaGdyb3VwIHtcbiAgICAgICAgbWFyZ2luLWJvdHRvbTogMzBweDsgfVxuICAgICAgI3BhZ2UtcHJvZHVjdHMtZW50ZXJwcmlzZS1lbmdpbmUgI2NvbXBhcmlzb24tdGFibGUgaDIge1xuICAgICAgICB0ZXh0LWFsaWduOiBsZWZ0OyB9IH1cbiAgQG1lZGlhIChtYXgtd2lkdGg6IDQ4MHB4KSB7XG4gICAgI3BhZ2UtcHJvZHVjdHMtZW50ZXJwcmlzZS1lbmdpbmUgI2NvbXBhcmlzb24tdGFibGUgaDIge1xuICAgICAgbGluZS1oZWlnaHQ6IDM4cHg7XG4gICAgICBmb250LXNpemU6IDMycHg7IH0gfVxuXG4jcGFnZS1wcm9kdWN0cy1lbnRlcnByaXNlLWVuZ2luZSAuY29tcC10YWJsZS13cmFwcGVyIHtcbiAgb3ZlcmZsb3cteDogYXV0bztcbiAgLXdlYmtpdC1vdmVyZmxvdy1zY3JvbGxpbmc6IHRvdWNoO1xuICBtYXJnaW4tcmlnaHQ6IC0xNXB4O1xuICBwYWRkaW5nLXJpZ2h0OiAxNXB4OyB9XG5cbiNwYWdlLXByb2R1Y3RzLWVudGVycHJpc2UtZW5naW5lIC5jb21wLXRhYmxlIHtcbiAgbWluLXdpZHRoOiA1NDZweDsgfVxuICAjcGFnZS1wcm9kdWN0cy1lbnRlcnByaXNlLWVuZ2luZSAuY29tcC10YWJsZSB0aCwgI3BhZ2UtcHJvZHVjdHMtZW50ZXJwcmlzZS1lbmdpbmUgLmNvbXAtdGFibGUgdGQge1xuICAgIHdpZHRoOiAzMyU7IH1cbiAgICAjcGFnZS1wcm9kdWN0cy1lbnRlcnByaXNlLWVuZ2luZSAuY29tcC10YWJsZSB0aDpub3QoOmZpcnN0LWNoaWxkKSwgI3BhZ2UtcHJvZHVjdHMtZW50ZXJwcmlzZS1lbmdpbmUgLmNvbXAtdGFibGUgdGQ6bm90KDpmaXJzdC1jaGlsZCkge1xuICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTsgfVxuICAgICNwYWdlLXByb2R1Y3RzLWVudGVycHJpc2UtZW5naW5lIC5jb21wLXRhYmxlIHRoOmZpcnN0LWNoaWxkLCAjcGFnZS1wcm9kdWN0cy1lbnRlcnByaXNlLWVuZ2luZSAuY29tcC10YWJsZSB0ZDpmaXJzdC1jaGlsZCB7XG4gICAgICB3aWR0aDogNDAlOyB9XG4gICAgI3BhZ2UtcHJvZHVjdHMtZW50ZXJwcmlzZS1lbmdpbmUgLmNvbXAtdGFibGUgdGg6bGFzdC1jaGlsZCwgI3BhZ2UtcHJvZHVjdHMtZW50ZXJwcmlzZS1lbmdpbmUgLmNvbXAtdGFibGUgdGQ6bGFzdC1jaGlsZCB7XG4gICAgICBiYWNrZ3JvdW5kOiAjRkZGN0Y1OyB9XG4gICNwYWdlLXByb2R1Y3RzLWVudGVycHJpc2UtZW5naW5lIC5jb21wLXRhYmxlIHRoIHtcbiAgICBwYWRkaW5nOiAyMHB4O1xuICAgIGJvcmRlci1ib3R0b206IDA7XG4gICAgZm9udC1mYW1pbHk6IFwiRWluYVwiLCBcIkhlbHZldGljYSBOZXVlXCIsIEhlbHZldGljYSwgc2Fucy1zZXJpZjtcbiAgICBmb250LXNpemU6IDE2cHg7XG4gICAgY29sb3I6ICM1QjcwOEI7XG4gICAgZm9udC13ZWlnaHQ6IDYwMDsgfVxuICAgICNwYWdlLXByb2R1Y3RzLWVudGVycHJpc2UtZW5naW5lIC5jb21wLXRhYmxlIHRoOmxhc3QtY2hpbGQge1xuICAgICAgYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6IDhweDtcbiAgICAgIGJvcmRlci10b3AtbGVmdC1yYWRpdXM6IDhweDtcbiAgICAgIGNvbG9yOiAjRkY3QjVFOyB9XG4gICNwYWdlLXByb2R1Y3RzLWVudGVycHJpc2UtZW5naW5lIC5jb21wLXRhYmxlIHRkIHtcbiAgICBmb250LXNpemU6IDEzcHg7XG4gICAgbGV0dGVyLXNwYWNpbmc6IC0wLjAxZW07XG4gICAgY29sb3I6ICM3Mzg0OUE7XG4gICAgcGFkZGluZzogMTRweCAyMHB4O1xuICAgIGJvcmRlcjogMDsgfVxuICAgICNwYWdlLXByb2R1Y3RzLWVudGVycHJpc2UtZW5naW5lIC5jb21wLXRhYmxlIHRkOmZpcnN0LWNoaWxkIHtcbiAgICAgIGZvbnQtc2l6ZTogMTRweDtcbiAgICAgIGNvbG9yOiAjNEU1QjZBOyB9XG4gICAgI3BhZ2UtcHJvZHVjdHMtZW50ZXJwcmlzZS1lbmdpbmUgLmNvbXAtdGFibGUgdGQgaW9uLWljb25bbmFtZT1cImNoZWNrbWFya1wiXSB7XG4gICAgICBmb250LXNpemU6IDE4cHg7XG4gICAgICBjb2xvcjogIzVCNzA4QjsgfVxuICAgICNwYWdlLXByb2R1Y3RzLWVudGVycHJpc2UtZW5naW5lIC5jb21wLXRhYmxlIHRkOmxhc3QtY2hpbGQgaW9uLWljb25bbmFtZT1cImNoZWNrbWFya1wiXSB7XG4gICAgICBjb2xvcjogI0ZGN0I1RTsgfVxuICAgICNwYWdlLXByb2R1Y3RzLWVudGVycHJpc2UtZW5naW5lIC5jb21wLXRhYmxlIHRkIC5kYXNoIHtcbiAgICAgIHdpZHRoOiAxMHB4O1xuICAgICAgaGVpZ2h0OiAycHg7XG4gICAgICBiYWNrZ3JvdW5kOiAjQ0VENkUwO1xuICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC0ycHgpOyB9XG4gICAgI3BhZ2UtcHJvZHVjdHMtZW50ZXJwcmlzZS1lbmdpbmUgLmNvbXAtdGFibGUgdGQgLnBpbGwge1xuICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgICAgbGluZS1oZWlnaHQ6IDEuMjtcbiAgICAgIGZvbnQtc2l6ZTogOHB4O1xuICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgICAgbGV0dGVyLXNwYWNpbmc6IDAuMWVtO1xuICAgICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcbiAgICAgIGNvbG9yOiAjZmZmO1xuICAgICAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgICAgIGJhY2tncm91bmQ6ICNGRjk5ODI7XG4gICAgICBib3JkZXItcmFkaXVzOiAyMHB4O1xuICAgICAgcGFkZGluZzogNXB4IDEwcHg7IH1cbiAgI3BhZ2UtcHJvZHVjdHMtZW50ZXJwcmlzZS1lbmdpbmUgLmNvbXAtdGFibGUgLnN0cmlwZSB0ZCB7XG4gICAgYmFja2dyb3VuZDogI0Y2RjhGQjsgfVxuICAgICNwYWdlLXByb2R1Y3RzLWVudGVycHJpc2UtZW5naW5lIC5jb21wLXRhYmxlIC5zdHJpcGUgdGQ6bGFzdC1jaGlsZCB7XG4gICAgICBiYWNrZ3JvdW5kOiAjRkNFOEUxOyB9XG4gICNwYWdlLXByb2R1Y3RzLWVudGVycHJpc2UtZW5naW5lIC5jb21wLXRhYmxlX19zZWN0aW9uIHRkIHtcbiAgICBwYWRkaW5nOiAyMHB4IDIwcHggMTJweDtcbiAgICBib3JkZXItdG9wOiAxcHggc29saWQgI0U5RURGMzsgfVxuICAgICNwYWdlLXByb2R1Y3RzLWVudGVycHJpc2UtZW5naW5lIC5jb21wLXRhYmxlX19zZWN0aW9uIHRkOmZpcnN0LWNoaWxkIHtcbiAgICAgIGZvbnQtZmFtaWx5OiBcIkVpbmFcIiwgXCJIZWx2ZXRpY2EgTmV1ZVwiLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7XG4gICAgICBmb250LXNpemU6IDE2cHg7XG4gICAgICBjb2xvcjogIzAyMDgxNDtcbiAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7IH1cbiAgI3BhZ2UtcHJvZHVjdHMtZW50ZXJwcmlzZS1lbmdpbmUgLmNvbXAtdGFibGVfX3NlY3Rpb24gdGQ6bGFzdC1jaGlsZCB7XG4gICAgYm9yZGVyLXRvcC1jb2xvcjogI0VFRENENjsgfVxuICAjcGFnZS1wcm9kdWN0cy1lbnRlcnByaXNlLWVuZ2luZSAuY29tcC10YWJsZV9fc2VjdGlvbi0tcGFkIHRkIHtcbiAgICBwYWRkaW5nLWJvdHRvbTogMjBweDsgfVxuICAjcGFnZS1wcm9kdWN0cy1lbnRlcnByaXNlLWVuZ2luZSAuY29tcC10YWJsZSB0cjpsYXN0LWNoaWxkIHRkOmxhc3QtY2hpbGQge1xuICAgIGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiA4cHg7XG4gICAgYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czogOHB4OyB9XG5cbiNwYWdlLXByb2R1Y3RzLWVudGVycHJpc2UtZW5naW5lIC5jYWxsLXRvLWFjdGlvbiB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNGNkY4RkI7XG4gIHBhZGRpbmctdG9wOiAxNDBweDtcbiAgcGFkZGluZy1ib3R0b206IDEwMHB4OyB9XG4gICNwYWdlLXByb2R1Y3RzLWVudGVycHJpc2UtZW5naW5lIC5jYWxsLXRvLWFjdGlvbiAuY29udGFpbmVyIHtcbiAgICBtYXgtd2lkdGg6IDc2OHB4OyB9XG4gICNwYWdlLXByb2R1Y3RzLWVudGVycHJpc2UtZW5naW5lIC5jYWxsLXRvLWFjdGlvbiBoZ3JvdXAge1xuICAgIG1hcmdpbi1ib3R0b206IDQwcHg7IH1cbiAgICAjcGFnZS1wcm9kdWN0cy1lbnRlcnByaXNlLWVuZ2luZSAuY2FsbC10by1hY3Rpb24gaGdyb3VwIGgzIHtcbiAgICAgIGZvbnQtc2l6ZTogMjhweDtcbiAgICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICAgIGxldHRlci1zcGFjaW5nOiAtMC4wMWVtO1xuICAgICAgY29sb3I6ICMxQTIzMkY7XG4gICAgICBtYXJnaW4tYm90dG9tOiA0cHg7IH1cbiAgICAjcGFnZS1wcm9kdWN0cy1lbnRlcnByaXNlLWVuZ2luZSAuY2FsbC10by1hY3Rpb24gaGdyb3VwIHAge1xuICAgICAgbGluZS1oZWlnaHQ6IDMycHg7XG4gICAgICBmb250LXNpemU6IDE4cHg7XG4gICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgICBsZXR0ZXItc3BhY2luZzogLTAuMDFlbTtcbiAgICAgIGNvbG9yOiAjNUI3MDhCOyB9XG4gICAgICAjcGFnZS1wcm9kdWN0cy1lbnRlcnByaXNlLWVuZ2luZSAuY2FsbC10by1hY3Rpb24gaGdyb3VwIHAgYiB7XG4gICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7IH1cbiJdfQ== */\n"
  },
  {
    "path": "content/css/pages/products/enterprise-engine.css",
    "content": "#page-products-enterprise-engine .sub-header .btn {\n  color: #1A232F;\n  background-color: #FF9982;\n  font-weight: bold;\n  line-height: normal;\n  font-size: 11px;\n  text-align: center;\n  letter-spacing: 0.08em;\n  text-transform: uppercase;\n  padding-left: 15px;\n  padding-right: 15px; }\n  #page-products-enterprise-engine .sub-header .btn:hover {\n    background-color: #ffbaab; }\n\n#page-products-enterprise-engine h3,\n#page-products-enterprise-engine h2,\n#page-products-enterprise-engine p.large {\n  letter-spacing: -0.01em; }\n\n#page-products-enterprise-engine p {\n  font-weight: 400; }\n  #page-products-enterprise-engine p:not(.large) {\n    font-family: \"Graphik\", \"Avenir Next\", \"Helvetica Neue\", Helvetica, sans-serif; }\n\n#page-products-enterprise-engine main ul {\n  list-style-type: none;\n  margin: 0;\n  padding: 0; }\n\n#page-products-enterprise-engine .top {\n  margin-top: -148px;\n  padding-top: 260px;\n  padding-bottom: 180px;\n  background: #182434;\n  position: relative;\n  z-index: 0; }\n  #page-products-enterprise-engine .top:before {\n    content: '';\n    display: block;\n    background-image: url(\"/img/products/enterprise-engine/enterprise-engine-hero-bg.png\");\n    background-repeat: no-repeat;\n    background-size: 1096px 760px;\n    width: 1096px;\n    height: 760px;\n    position: absolute;\n    bottom: 0;\n    right: 50%;\n    margin-right: -820px;\n    z-index: 1; }\n  #page-products-enterprise-engine .top hgroup {\n    position: relative;\n    z-index: 2;\n    color: #fff;\n    max-width: 624px; }\n    #page-products-enterprise-engine .top hgroup h4 {\n      line-height: 25px;\n      font-size: 12px;\n      letter-spacing: 0.14em;\n      text-transform: uppercase;\n      color: #CED6E0;\n      font-family: \"Roboto Mono\", Menlo, Monaco, Consolas, \"Courier New\", monospace; }\n    #page-products-enterprise-engine .top hgroup h1 {\n      font-size: 48px;\n      letter-spacing: -0.03em; }\n    #page-products-enterprise-engine .top hgroup p {\n      line-height: 39px;\n      font-size: 22px;\n      color: #CED6E0; }\n    #page-products-enterprise-engine .top hgroup .btn {\n      margin-top: 24px;\n      color: #182434;\n      background-color: #FF9982;\n      font-weight: 700;\n      font-size: 16px;\n      letter-spacing: 0.06em;\n      padding: 19px 25px 16px; }\n      #page-products-enterprise-engine .top hgroup .btn:hover {\n        background-color: #ffbaab; }\n    @media (max-width: 768px) {\n      #page-products-enterprise-engine .top hgroup {\n        text-align: center;\n        margin-left: auto;\n        margin-right: auto;\n        overflow: hidden; } }\n    @media (max-width: 480px) {\n      #page-products-enterprise-engine .top hgroup h1 {\n        font-size: 40px; }\n      #page-products-enterprise-engine .top hgroup p {\n        line-height: 30px;\n        font-size: 20px; } }\n  @media (max-width: 768px) {\n    #page-products-enterprise-engine .top {\n      padding-top: 190px;\n      padding-bottom: 94px; } }\n\n#page-products-enterprise-engine main section {\n  padding-top: 180px;\n  padding-bottom: 180px; }\n  #page-products-enterprise-engine main section:nth-child(1) {\n    border-bottom: 2px solid #EEF2F7; }\n  #page-products-enterprise-engine main section.offwhite {\n    background-color: #F6F8FB; }\n\n#page-products-enterprise-engine main .container {\n  position: relative; }\n\n#page-products-enterprise-engine main .container + .container {\n  margin-top: 240px; }\n\n#page-products-enterprise-engine main hgroup {\n  margin-bottom: 100px; }\n\n#page-products-enterprise-engine main .measure {\n  max-width: 612px; }\n\n#page-products-enterprise-engine main .center {\n  text-align: center; }\n\n#page-products-enterprise-engine main h3 {\n  color: #92A1B3;\n  font-size: 24px;\n  margin-bottom: 0;\n  margin-top: 0;\n  font-weight: 600; }\n\n#page-products-enterprise-engine main h2 {\n  color: #020814;\n  font-size: 36px;\n  margin-top: 10px;\n  margin-bottom: 16px;\n  font-weight: 700; }\n\n#page-products-enterprise-engine main p.large {\n  line-height: 39px;\n  font-size: 22px;\n  color: #5B708B; }\n  #page-products-enterprise-engine main p.large em {\n    font-style: normal;\n    color: #2F3A48; }\n\n@media (max-width: 992px) {\n  #page-products-enterprise-engine main section {\n    padding-top: 112px;\n    padding-bottom: 130px; }\n  #page-products-enterprise-engine main hgroup {\n    margin-bottom: 0; }\n  #page-products-enterprise-engine main h3 {\n    font-size: 28px; }\n  #page-products-enterprise-engine main h2 {\n    font-size: 32px; }\n  #page-products-enterprise-engine main .container + .container {\n    margin-top: 200px; } }\n\n@media (max-width: 768px) {\n  #page-products-enterprise-engine main hgroup {\n    text-align: center;\n    margin-left: auto;\n    margin-right: auto; }\n  #page-products-enterprise-engine main .container + .container {\n    margin-top: 144px; } }\n\n@media (max-width: 480px) {\n  #page-products-enterprise-engine main section {\n    padding-top: 82px;\n    padding-bottom: 90px; } }\n\n#page-products-enterprise-engine .feature-table {\n  width: 100%; }\n  #page-products-enterprise-engine .feature-table tr td {\n    border-top: 2px solid #F2F5FA; }\n  #page-products-enterprise-engine .feature-table tr:first-child td {\n    border-top: 0; }\n  #page-products-enterprise-engine .feature-table tr td:nth-child(1) {\n    font-size: 20px;\n    letter-spacing: 0.08em;\n    text-transform: uppercase;\n    font-weight: 600;\n    display: -ms-flexbox;\n    display: flex; }\n    #page-products-enterprise-engine .feature-table tr td:nth-child(1) svg {\n      margin-right: 16px; }\n  #page-products-enterprise-engine .feature-table tr td:nth-child(2) {\n    font-size: 18px;\n    color: #5B708B; }\n  #page-products-enterprise-engine .feature-table tr td:nth-child(3) {\n    color: #5B708B; }\n  #page-products-enterprise-engine .feature-table tr td {\n    padding: 32px 48px; }\n    #page-products-enterprise-engine .feature-table tr td:first-child {\n      padding-left: 0; }\n    #page-products-enterprise-engine .feature-table tr td:last-child {\n      padding-right: 0; }\n  @media (max-width: 992px) {\n    #page-products-enterprise-engine .feature-table tr {\n      display: -ms-flexbox;\n      display: flex;\n      -ms-flex-wrap: wrap;\n          flex-wrap: wrap;\n      padding-bottom: 18px; }\n    #page-products-enterprise-engine .feature-table tr td:first-child {\n      -ms-flex: 0 0 100%;\n          flex: 0 0 100%;\n      padding-top: 48px; }\n    #page-products-enterprise-engine .feature-table tr td:not(:first-child) {\n      -ms-flex: 0 0 100%;\n          flex: 0 0 100%;\n      border-top: 0;\n      padding-top: 0;\n      padding-left: 0;\n      max-width: 420px; } }\n  @media (max-width: 768px) {\n    #page-products-enterprise-engine .feature-table tr {\n      max-width: 420px;\n      margin-left: auto;\n      margin-right: auto; } }\n\n#page-products-enterprise-engine .checkmark-list {\n  margin-bottom: -26px; }\n  #page-products-enterprise-engine .checkmark-list li {\n    position: relative;\n    display: -ms-flexbox;\n    display: flex; }\n  #page-products-enterprise-engine .checkmark-list li:before {\n    position: relative;\n    display: block;\n    content: ''; }\n  #page-products-enterprise-engine .checkmark-list > li {\n    margin-bottom: 26px; }\n  #page-products-enterprise-engine .checkmark-list > li:before {\n    background-image: url(\"/img/checkmark-medium-gray.svg\");\n    background-size: 20px 20px;\n    height: 20px;\n    width: 20px;\n    -ms-flex: 0 0 20px;\n        flex: 0 0 20px;\n    margin-right: 16px; }\n  #page-products-enterprise-engine .checkmark-list li ul {\n    margin-top: 20px; }\n  #page-products-enterprise-engine .checkmark-list li ul > li {\n    line-height: 17px;\n    font-size: 12px;\n    position: relative; }\n    #page-products-enterprise-engine .checkmark-list li ul > li:before {\n      background-image: url(\"/img/checkmark.svg\");\n      background-size: 10px 8px;\n      height: 8px;\n      width: 10px;\n      -ms-flex: 0 0 10px;\n          flex: 0 0 10px;\n      top: 2px;\n      margin-right: 8px;\n      opacity: 0.6; }\n    #page-products-enterprise-engine .checkmark-list li ul > li + li {\n      margin-top: 14px; }\n  #page-products-enterprise-engine .checkmark-list.large {\n    line-height: 33px;\n    font-size: 20px;\n    color: #5B708B; }\n  #page-products-enterprise-engine .checkmark-list.large li:before {\n    top: 4px; }\n  #page-products-enterprise-engine .checkmark-list--large li:before {\n    width: 24px;\n    height: 24px;\n    -ms-flex: 0 0 24px;\n        flex: 0 0 24px;\n    background-size: 24px 24px;\n    margin-right: 20px; }\n  #page-products-enterprise-engine .checkmark-list.two-col {\n    display: -ms-flexbox;\n    display: flex;\n    -ms-flex-wrap: wrap;\n        flex-wrap: wrap;\n    margin-left: -30px;\n    margin-right: -30px; }\n    #page-products-enterprise-engine .checkmark-list.two-col li {\n      -ms-flex: 0 0 50%;\n          flex: 0 0 50%;\n      padding-left: 30px;\n      padding-right: 30px; }\n  #page-products-enterprise-engine .checkmark-list hgroup {\n    margin: 0 0 16px; }\n    #page-products-enterprise-engine .checkmark-list hgroup h5 {\n      margin: 0;\n      font-weight: 600;\n      line-height: 20px;\n      font-size: 16px;\n      color: #3C536F; }\n    #page-products-enterprise-engine .checkmark-list hgroup p {\n      line-height: 23px;\n      font-size: 14px;\n      color: #92A1B3; }\n  @media (max-width: 992px) {\n    #page-products-enterprise-engine .checkmark-list.large {\n      line-height: 30px;\n      font-size: 18px;\n      margin-top: 60px; } }\n  @media (max-width: 768px) {\n    #page-products-enterprise-engine .checkmark-list.two-col {\n      max-width: 420px;\n      margin-left: auto;\n      margin-right: auto; }\n      #page-products-enterprise-engine .checkmark-list.two-col li {\n        -ms-flex: 0 0 100%;\n            flex: 0 0 100%; }\n    #page-products-enterprise-engine .checkmark-list hgroup {\n      text-align: left;\n      margin-bottom: 0; }\n      #page-products-enterprise-engine .checkmark-list hgroup p {\n        margin-bottom: 0; } }\n\n#page-products-enterprise-engine .two-col {\n  display: -ms-flexbox;\n  display: flex; }\n  #page-products-enterprise-engine .two-col > div {\n    -ms-flex: 0 0 50%;\n        flex: 0 0 50%; }\n  #page-products-enterprise-engine .two-col .feature-list {\n    -ms-flex: 0 0 55%;\n        flex: 0 0 55%;\n    padding-right: 50px; }\n  #page-products-enterprise-engine .two-col .checkmark-list {\n    -ms-flex: 0 0 45%;\n        flex: 0 0 45%;\n    padding-left: 50px; }\n  @media (max-width: 992px) {\n    #page-products-enterprise-engine .two-col .checkmark-list {\n      margin-top: 40px; } }\n  @media (max-width: 768px) {\n    #page-products-enterprise-engine .two-col .feature-list {\n      padding-right: 0; }\n    #page-products-enterprise-engine .two-col .checkmark-list {\n      padding-left: 0;\n      max-width: 480px;\n      margin-left: auto;\n      margin-right: auto; } }\n\n@media (max-width: 992px) {\n  #page-products-enterprise-engine .two-col:not(.checkmark-list) {\n    -ms-flex-direction: column;\n        flex-direction: column; }\n    #page-products-enterprise-engine .two-col:not(.checkmark-list) > div {\n      -ms-flex: 0 0 100%;\n          flex: 0 0 100%; } }\n\n#page-products-enterprise-engine .feature-list li {\n  display: -ms-flexbox;\n  display: flex; }\n\n#page-products-enterprise-engine .feature-list .feature-icon {\n  -ms-flex: 0 0 48px;\n      flex: 0 0 48px;\n  margin-right: 36px; }\n\n#page-products-enterprise-engine .feature-list hgroup {\n  margin: 0; }\n\n#page-products-enterprise-engine .feature-list h4 {\n  font-size: 24px;\n  line-height: 1.2;\n  font-weight: 600;\n  margin-bottom: 18px; }\n\n#page-products-enterprise-engine .feature-list p {\n  margin: 0 0 6px;\n  line-height: 32px;\n  font-size: 18px;\n  color: #5B708B; }\n\n#page-products-enterprise-engine .feature-list li + li {\n  margin-top: 68px; }\n\n@media (max-width: 992px) {\n  #page-products-enterprise-engine .feature-list {\n    margin-top: 60px; }\n    #page-products-enterprise-engine .feature-list li + li {\n      margin-top: 50px; } }\n\n@media (max-width: 768px) {\n  #page-products-enterprise-engine .feature-list {\n    padding-right: 0;\n    margin-top: 30px;\n    max-width: 480px;\n    margin-left: auto;\n    margin-right: auto; }\n    #page-products-enterprise-engine .feature-list .feature-icon {\n      margin-right: 0;\n      margin-bottom: 15px; }\n    #page-products-enterprise-engine .feature-list li {\n      -ms-flex-align: center;\n          align-items: center;\n      display: -ms-flexbox;\n      display: flex;\n      -ms-flex-direction: column;\n          flex-direction: column; } }\n\n@media (max-width: 480px) {\n  #page-products-enterprise-engine .feature-list h4 {\n    font-size: 20px; }\n  #page-products-enterprise-engine .feature-list p {\n    line-height: 28px;\n    font-size: 16px; } }\n\n#page-products-enterprise-engine .feature-list--small li {\n  -ms-flex-direction: column;\n      flex-direction: column; }\n\n#page-products-enterprise-engine .feature-list--small .feature-icon {\n  margin-bottom: 20px; }\n\n#page-products-enterprise-engine .feature-list--small h4 {\n  font-size: 20px;\n  color: #020814; }\n\n#page-products-enterprise-engine .feature-list--small p {\n  line-height: 26px;\n  font-size: 16px;\n  color: #5B708B; }\n\n#page-products-enterprise-engine .three-col {\n  display: -ms-flexbox;\n  display: flex; }\n  #page-products-enterprise-engine .three-col li {\n    -ms-flex: 0 0 33%;\n        flex: 0 0 33%;\n    margin: 0;\n    padding: 0 32px; }\n  #page-products-enterprise-engine .three-col li + li {\n    margin-top: 0; }\n  #page-products-enterprise-engine .three-col li:first-child {\n    padding-left: 0; }\n  #page-products-enterprise-engine .three-col li:last-child {\n    padding-right: 0; }\n  @media (max-width: 768px) {\n    #page-products-enterprise-engine .three-col {\n      -ms-flex-direction: column;\n          flex-direction: column; }\n      #page-products-enterprise-engine .three-col li {\n        -ms-flex: 0 0 100%;\n            flex: 0 0 100%;\n        padding: 0; }\n      #page-products-enterprise-engine .three-col li + li {\n        margin-top: 30px; } }\n\n#page-products-enterprise-engine .integrations {\n  position: relative;\n  height: 660px; }\n\n#page-products-enterprise-engine .integrations__identity-vault,\n#page-products-enterprise-engine .integrations__aws-amplify,\n#page-products-enterprise-engine .integrations__couchbase,\n#page-products-enterprise-engine .integrations__active-directory {\n  position: absolute;\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-direction: column;\n      flex-direction: column;\n  -ms-flex-align: center;\n      align-items: center;\n  font-size: 13px;\n  text-align: center;\n  font-weight: 600;\n  color: #5B708B; }\n  #page-products-enterprise-engine .integrations__identity-vault i,\n  #page-products-enterprise-engine .integrations__aws-amplify i,\n  #page-products-enterprise-engine .integrations__couchbase i,\n  #page-products-enterprise-engine .integrations__active-directory i {\n    border-radius: 999px;\n    display: -ms-inline-flexbox;\n    display: inline-flex;\n    -ms-flex-pack: center;\n        justify-content: center;\n    -ms-flex-align: center;\n        align-items: center;\n    box-shadow: 0px 2px 8px rgba(2, 8, 20, 0.1), 0px 8px 16px rgba(2, 8, 20, 0.08);\n    background-color: #fff;\n    margin-bottom: 14px; }\n  #page-products-enterprise-engine .integrations__identity-vault i::before,\n  #page-products-enterprise-engine .integrations__aws-amplify i::before,\n  #page-products-enterprise-engine .integrations__couchbase i::before,\n  #page-products-enterprise-engine .integrations__active-directory i::before {\n    content: '';\n    display: block;\n    background-image: url(\"/img/products/enterprise-engine/enterprise-engine-integrations-sprite.png\");\n    background-repeat: no-repeat;\n    background-size: 112px 294px;\n    background-position: center center; }\n\n#page-products-enterprise-engine .integrations__identity-vault {\n  top: 0;\n  left: 242px; }\n  #page-products-enterprise-engine .integrations__identity-vault i {\n    width: 124px;\n    height: 124px; }\n  #page-products-enterprise-engine .integrations__identity-vault i::before {\n    width: 56px;\n    height: 56px;\n    background-position: 0 -151px; }\n\n#page-products-enterprise-engine .integrations__aws-amplify {\n  top: 172px;\n  left: 0; }\n  #page-products-enterprise-engine .integrations__aws-amplify i {\n    width: 192px;\n    height: 192px; }\n  #page-products-enterprise-engine .integrations__aws-amplify i::before {\n    width: 112px;\n    height: 84px;\n    background-position: 0 0; }\n\n#page-products-enterprise-engine .integrations__couchbase {\n  top: 290px;\n  left: 354px; }\n  #page-products-enterprise-engine .integrations__couchbase i {\n    width: 124px;\n    height: 124px; }\n  #page-products-enterprise-engine .integrations__couchbase i::before {\n    width: 64px;\n    height: 65px;\n    background-position: 0 -85px; }\n\n#page-products-enterprise-engine .integrations__active-directory {\n  top: 500px;\n  left: 172px; }\n  #page-products-enterprise-engine .integrations__active-directory i {\n    width: 160px;\n    height: 160px; }\n  #page-products-enterprise-engine .integrations__active-directory i::before {\n    width: 83px;\n    height: 84px;\n    background-position: 0 -210px; }\n\n@media (max-width: 1220px) {\n  #page-products-enterprise-engine .integrations__identity-vault {\n    left: 212px; }\n  #page-products-enterprise-engine .integrations__couchbase {\n    left: 284px; }\n  #page-products-enterprise-engine .integrations__active-directory {\n    left: 119px; } }\n\n@media (max-width: 992px) {\n  #page-products-enterprise-engine .integrations {\n    -ms-flex: none;\n        flex: none;\n    height: 362px;\n    width: 586px;\n    margin-bottom: 40px; }\n  #page-products-enterprise-engine .integrations__identity-vault {\n    left: 232px; }\n  #page-products-enterprise-engine .integrations__aws-amplify {\n    top: 82px; }\n  #page-products-enterprise-engine .integrations__couchbase {\n    left: 251px;\n    top: 188px; }\n  #page-products-enterprise-engine .integrations__active-directory {\n    left: 416px;\n    top: 70px; } }\n\n@media (max-width: 768px) {\n  #page-products-enterprise-engine .integrations {\n    position: absolute;\n    top: -70px;\n    left: 50%;\n    -webkit-transform-origin: center center;\n            transform-origin: center center;\n    -webkit-transform: translateX(-50%) scale(0.8);\n            transform: translateX(-50%) scale(0.8); }\n  #page-products-enterprise-engine .integrations + div {\n    margin-top: 300px; } }\n\n@media (max-width: 768px) {\n  #page-products-enterprise-engine .integrations {\n    top: -90px;\n    -webkit-transform: translateX(-50%) scale(0.6);\n            transform: translateX(-50%) scale(0.6); }\n  #page-products-enterprise-engine .integrations + div {\n    margin-top: 260px; } }\n\n#page-products-enterprise-engine .call-to-action {\n  padding-top: 140px; }\n  #page-products-enterprise-engine .call-to-action .container {\n    max-width: 748px; }\n  #page-products-enterprise-engine .call-to-action hgroup {\n    margin: 0;\n    padding: 0; }\n    #page-products-enterprise-engine .call-to-action hgroup p {\n      font-weight: 400;\n      font-size: 28px;\n      text-align: center;\n      color: #5B708B; }\n    #page-products-enterprise-engine .call-to-action hgroup strong {\n      color: #2F3A48;\n      font-weight: 600; }\n    #page-products-enterprise-engine .call-to-action hgroup h4 {\n      font-weight: 600;\n      font-size: 24px;\n      color: #FF9982;\n      margin: 60px 0; }\n  @media (max-width: 768px) {\n    #page-products-enterprise-engine .call-to-action hgroup p {\n      font-size: 24px; } }\n  @media (max-width: 480px) {\n    #page-products-enterprise-engine .call-to-action {\n      padding-top: 82px; } }\n\n#page-products-enterprise-engine .feature-icon {\n  width: 48px;\n  height: 48px;\n  display: block;\n  background-image: url(\"/img/products/enterprise-engine/enterprise-engine-icon-sprite.png\");\n  background-repeat: no-repeat;\n  background-size: 48px 480px; }\n  #page-products-enterprise-engine .feature-icon--go-to-market {\n    background-position: 0 0; }\n  #page-products-enterprise-engine .feature-icon--cross-platform {\n    background-position: 0 -48px; }\n  #page-products-enterprise-engine .feature-icon--future-proofed {\n    background-position: 0 -96px; }\n  #page-products-enterprise-engine .feature-icon--native-power {\n    background-position: 0 -144px; }\n  #page-products-enterprise-engine .feature-icon--integrations {\n    background-position: 0 -192px; }\n  #page-products-enterprise-engine .feature-icon--advisory {\n    background-position: 0 -240px; }\n  #page-products-enterprise-engine .feature-icon--training {\n    background-position: 0 -288px; }\n  #page-products-enterprise-engine .feature-icon--stability {\n    background-position: 0 -336px; }\n  #page-products-enterprise-engine .feature-icon--complete-native {\n    background-position: 0 -384px; }\n  #page-products-enterprise-engine .feature-icon--help {\n    background-position: 0 -432px; }\n\n#page-products-enterprise-engine .logos {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-pack: justify;\n      justify-content: space-between;\n  -ms-flex-align: center;\n      align-items: center;\n  margin-top: 160px;\n  margin-left: -24px;\n  margin-right: -24px; }\n  #page-products-enterprise-engine .logos .logo {\n    -ms-flex: 0 0 auto;\n        flex: 0 0 auto;\n    margin: 0 24px 30px;\n    background-image: url(\"/img/products/enterprise-engine/enterprise-engine-logo-sprite.png\");\n    background-repeat: no-repeat;\n    background-size: 176px 168px; }\n    #page-products-enterprise-engine .logos .logo--aaa {\n      background-position: 0 0;\n      width: 72px;\n      height: 42px; }\n    #page-products-enterprise-engine .logos .logo--amtrak {\n      background-position: 0 -44px;\n      width: 176px;\n      height: 20px; }\n    #page-products-enterprise-engine .logos .logo--ge {\n      background-position: 0 -66px;\n      width: 48px;\n      height: 48px; }\n    #page-products-enterprise-engine .logos .logo--worldpay {\n      background-position: 0 -116px;\n      width: 132px;\n      height: 30px; }\n    #page-products-enterprise-engine .logos .logo--mapfre {\n      background-position: 0 -148px;\n      width: 136px;\n      height: 20px; }\n  @media (max-width: 768px) {\n    #page-products-enterprise-engine .logos {\n      margin-top: 80px;\n      max-width: 570px;\n      margin-left: auto;\n      margin-right: auto;\n      -ms-flex-wrap: wrap;\n          flex-wrap: wrap;\n      -ms-flex-pack: center;\n          justify-content: center; } }\n  @media (max-width: 480px) {\n    #page-products-enterprise-engine .logos {\n      -ms-flex-direction: column;\n          flex-direction: column; } }\n\n/*# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImVudGVycHJpc2UtZW5naW5lLmNzcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtFQUNFLGVBQWU7RUFDZiwwQkFBMEI7RUFDMUIsa0JBQWtCO0VBQ2xCLG9CQUFvQjtFQUNwQixnQkFBZ0I7RUFDaEIsbUJBQW1CO0VBQ25CLHVCQUF1QjtFQUN2QiwwQkFBMEI7RUFDMUIsbUJBQW1CO0VBQ25CLG9CQUFvQixFQUFFO0VBQ3RCO0lBQ0UsMEJBQTBCLEVBQUU7O0FBRWhDOzs7RUFHRSx3QkFBd0IsRUFBRTs7QUFFNUI7RUFDRSxpQkFBaUIsRUFBRTtFQUNuQjtJQUNFLCtFQUErRSxFQUFFOztBQUVyRjtFQUNFLHNCQUFzQjtFQUN0QixVQUFVO0VBQ1YsV0FBVyxFQUFFOztBQUVmO0VBQ0UsbUJBQW1CO0VBQ25CLG1CQUFtQjtFQUNuQixzQkFBc0I7RUFDdEIsb0JBQW9CO0VBQ3BCLG1CQUFtQjtFQUNuQixXQUFXLEVBQUU7RUFDYjtJQUNFLFlBQVk7SUFDWixlQUFlO0lBQ2YsdUZBQXVGO0lBQ3ZGLDZCQUE2QjtJQUM3Qiw4QkFBOEI7SUFDOUIsY0FBYztJQUNkLGNBQWM7SUFDZCxtQkFBbUI7SUFDbkIsVUFBVTtJQUNWLFdBQVc7SUFDWCxxQkFBcUI7SUFDckIsV0FBVyxFQUFFO0VBQ2Y7SUFDRSxtQkFBbUI7SUFDbkIsV0FBVztJQUNYLFlBQVk7SUFDWixpQkFBaUIsRUFBRTtJQUNuQjtNQUNFLGtCQUFrQjtNQUNsQixnQkFBZ0I7TUFDaEIsdUJBQXVCO01BQ3ZCLDBCQUEwQjtNQUMxQixlQUFlO01BQ2YsOEVBQThFLEVBQUU7SUFDbEY7TUFDRSxnQkFBZ0I7TUFDaEIsd0JBQXdCLEVBQUU7SUFDNUI7TUFDRSxrQkFBa0I7TUFDbEIsZ0JBQWdCO01BQ2hCLGVBQWUsRUFBRTtJQUNuQjtNQUNFLGlCQUFpQjtNQUNqQixlQUFlO01BQ2YsMEJBQTBCO01BQzFCLGlCQUFpQjtNQUNqQixnQkFBZ0I7TUFDaEIsdUJBQXVCO01BQ3ZCLHdCQUF3QixFQUFFO01BQzFCO1FBQ0UsMEJBQTBCLEVBQUU7SUFDaEM7TUFDRTtRQUNFLG1CQUFtQjtRQUNuQixrQkFBa0I7UUFDbEIsbUJBQW1CO1FBQ25CLGlCQUFpQixFQUFFLEVBQUU7SUFDekI7TUFDRTtRQUNFLGdCQUFnQixFQUFFO01BQ3BCO1FBQ0Usa0JBQWtCO1FBQ2xCLGdCQUFnQixFQUFFLEVBQUU7RUFDMUI7SUFDRTtNQUNFLG1CQUFtQjtNQUNuQixxQkFBcUIsRUFBRSxFQUFFOztBQUUvQjtFQUNFLG1CQUFtQjtFQUNuQixzQkFBc0IsRUFBRTtFQUN4QjtJQUNFLGlDQUFpQyxFQUFFO0VBQ3JDO0lBQ0UsMEJBQTBCLEVBQUU7O0FBRWhDO0VBQ0UsbUJBQW1CLEVBQUU7O0FBRXZCO0VBQ0Usa0JBQWtCLEVBQUU7O0FBRXRCO0VBQ0UscUJBQXFCLEVBQUU7O0FBRXpCO0VBQ0UsaUJBQWlCLEVBQUU7O0FBRXJCO0VBQ0UsbUJBQW1CLEVBQUU7O0FBRXZCO0VBQ0UsZUFBZTtFQUNmLGdCQUFnQjtFQUNoQixpQkFBaUI7RUFDakIsY0FBYztFQUNkLGlCQUFpQixFQUFFOztBQUVyQjtFQUNFLGVBQWU7RUFDZixnQkFBZ0I7RUFDaEIsaUJBQWlCO0VBQ2pCLG9CQUFvQjtFQUNwQixpQkFBaUIsRUFBRTs7QUFFckI7RUFDRSxrQkFBa0I7RUFDbEIsZ0JBQWdCO0VBQ2hCLGVBQWUsRUFBRTtFQUNqQjtJQUNFLG1CQUFtQjtJQUNuQixlQUFlLEVBQUU7O0FBRXJCO0VBQ0U7SUFDRSxtQkFBbUI7SUFDbkIsc0JBQXNCLEVBQUU7RUFDMUI7SUFDRSxpQkFBaUIsRUFBRTtFQUNyQjtJQUNFLGdCQUFnQixFQUFFO0VBQ3BCO0lBQ0UsZ0JBQWdCLEVBQUU7RUFDcEI7SUFDRSxrQkFBa0IsRUFBRSxFQUFFOztBQUUxQjtFQUNFO0lBQ0UsbUJBQW1CO0lBQ25CLGtCQUFrQjtJQUNsQixtQkFBbUIsRUFBRTtFQUN2QjtJQUNFLGtCQUFrQixFQUFFLEVBQUU7O0FBRTFCO0VBQ0U7SUFDRSxrQkFBa0I7SUFDbEIscUJBQXFCLEVBQUUsRUFBRTs7QUFFN0I7RUFDRSxZQUFZLEVBQUU7RUFDZDtJQUNFLDhCQUE4QixFQUFFO0VBQ2xDO0lBQ0UsY0FBYyxFQUFFO0VBQ2xCO0lBQ0UsZ0JBQWdCO0lBQ2hCLHVCQUF1QjtJQUN2QiwwQkFBMEI7SUFDMUIsaUJBQWlCO0lBQ2pCLHFCQUFjO0lBQWQsY0FBYyxFQUFFO0lBQ2hCO01BQ0UsbUJBQW1CLEVBQUU7RUFDekI7SUFDRSxnQkFBZ0I7SUFDaEIsZUFBZSxFQUFFO0VBQ25CO0lBQ0UsZUFBZSxFQUFFO0VBQ25CO0lBQ0UsbUJBQW1CLEVBQUU7SUFDckI7TUFDRSxnQkFBZ0IsRUFBRTtJQUNwQjtNQUNFLGlCQUFpQixFQUFFO0VBQ3ZCO0lBQ0U7TUFDRSxxQkFBYztNQUFkLGNBQWM7TUFDZCxvQkFBZ0I7VUFBaEIsZ0JBQWdCO01BQ2hCLHFCQUFxQixFQUFFO0lBQ3pCO01BQ0UsbUJBQWU7VUFBZixlQUFlO01BQ2Ysa0JBQWtCLEVBQUU7SUFDdEI7TUFDRSxtQkFBZTtVQUFmLGVBQWU7TUFDZixjQUFjO01BQ2QsZUFBZTtNQUNmLGdCQUFnQjtNQUNoQixpQkFBaUIsRUFBRSxFQUFFO0VBQ3pCO0lBQ0U7TUFDRSxpQkFBaUI7TUFDakIsa0JBQWtCO01BQ2xCLG1CQUFtQixFQUFFLEVBQUU7O0FBRTdCO0VBQ0UscUJBQXFCLEVBQUU7RUFDdkI7SUFDRSxtQkFBbUI7SUFDbkIscUJBQWM7SUFBZCxjQUFjLEVBQUU7RUFDbEI7SUFDRSxtQkFBbUI7SUFDbkIsZUFBZTtJQUNmLFlBQVksRUFBRTtFQUNoQjtJQUNFLG9CQUFvQixFQUFFO0VBQ3hCO0lBQ0Usd0RBQXdEO0lBQ3hELDJCQUEyQjtJQUMzQixhQUFhO0lBQ2IsWUFBWTtJQUNaLG1CQUFlO1FBQWYsZUFBZTtJQUNmLG1CQUFtQixFQUFFO0VBQ3ZCO0lBQ0UsaUJBQWlCLEVBQUU7RUFDckI7SUFDRSxrQkFBa0I7SUFDbEIsZ0JBQWdCO0lBQ2hCLG1CQUFtQixFQUFFO0lBQ3JCO01BQ0UsNENBQTRDO01BQzVDLDBCQUEwQjtNQUMxQixZQUFZO01BQ1osWUFBWTtNQUNaLG1CQUFlO1VBQWYsZUFBZTtNQUNmLFNBQVM7TUFDVCxrQkFBa0I7TUFDbEIsYUFBYSxFQUFFO0lBQ2pCO01BQ0UsaUJBQWlCLEVBQUU7RUFDdkI7SUFDRSxrQkFBa0I7SUFDbEIsZ0JBQWdCO0lBQ2hCLGVBQWUsRUFBRTtFQUNuQjtJQUNFLFNBQVMsRUFBRTtFQUNiO0lBQ0UsWUFBWTtJQUNaLGFBQWE7SUFDYixtQkFBZTtRQUFmLGVBQWU7SUFDZiwyQkFBMkI7SUFDM0IsbUJBQW1CLEVBQUU7RUFDdkI7SUFDRSxxQkFBYztJQUFkLGNBQWM7SUFDZCxvQkFBZ0I7UUFBaEIsZ0JBQWdCO0lBQ2hCLG1CQUFtQjtJQUNuQixvQkFBb0IsRUFBRTtJQUN0QjtNQUNFLGtCQUFjO1VBQWQsY0FBYztNQUNkLG1CQUFtQjtNQUNuQixvQkFBb0IsRUFBRTtFQUMxQjtJQUNFLGlCQUFpQixFQUFFO0lBQ25CO01BQ0UsVUFBVTtNQUNWLGlCQUFpQjtNQUNqQixrQkFBa0I7TUFDbEIsZ0JBQWdCO01BQ2hCLGVBQWUsRUFBRTtJQUNuQjtNQUNFLGtCQUFrQjtNQUNsQixnQkFBZ0I7TUFDaEIsZUFBZSxFQUFFO0VBQ3JCO0lBQ0U7TUFDRSxrQkFBa0I7TUFDbEIsZ0JBQWdCO01BQ2hCLGlCQUFpQixFQUFFLEVBQUU7RUFDekI7SUFDRTtNQUNFLGlCQUFpQjtNQUNqQixrQkFBa0I7TUFDbEIsbUJBQW1CLEVBQUU7TUFDckI7UUFDRSxtQkFBZTtZQUFmLGVBQWUsRUFBRTtJQUNyQjtNQUNFLGlCQUFpQjtNQUNqQixpQkFBaUIsRUFBRTtNQUNuQjtRQUNFLGlCQUFpQixFQUFFLEVBQUU7O0FBRTdCO0VBQ0UscUJBQWM7RUFBZCxjQUFjLEVBQUU7RUFDaEI7SUFDRSxrQkFBYztRQUFkLGNBQWMsRUFBRTtFQUNsQjtJQUNFLGtCQUFjO1FBQWQsY0FBYztJQUNkLG9CQUFvQixFQUFFO0VBQ3hCO0lBQ0Usa0JBQWM7UUFBZCxjQUFjO0lBQ2QsbUJBQW1CLEVBQUU7RUFDdkI7SUFDRTtNQUNFLGlCQUFpQixFQUFFLEVBQUU7RUFDekI7SUFDRTtNQUNFLGlCQUFpQixFQUFFO0lBQ3JCO01BQ0UsZ0JBQWdCO01BQ2hCLGlCQUFpQjtNQUNqQixrQkFBa0I7TUFDbEIsbUJBQW1CLEVBQUUsRUFBRTs7QUFFN0I7RUFDRTtJQUNFLDJCQUF1QjtRQUF2Qix1QkFBdUIsRUFBRTtJQUN6QjtNQUNFLG1CQUFlO1VBQWYsZUFBZSxFQUFFLEVBQUU7O0FBRXpCO0VBQ0UscUJBQWM7RUFBZCxjQUFjLEVBQUU7O0FBRWxCO0VBQ0UsbUJBQWU7TUFBZixlQUFlO0VBQ2YsbUJBQW1CLEVBQUU7O0FBRXZCO0VBQ0UsVUFBVSxFQUFFOztBQUVkO0VBQ0UsZ0JBQWdCO0VBQ2hCLGlCQUFpQjtFQUNqQixpQkFBaUI7RUFDakIsb0JBQW9CLEVBQUU7O0FBRXhCO0VBQ0UsZ0JBQWdCO0VBQ2hCLGtCQUFrQjtFQUNsQixnQkFBZ0I7RUFDaEIsZUFBZSxFQUFFOztBQUVuQjtFQUNFLGlCQUFpQixFQUFFOztBQUVyQjtFQUNFO0lBQ0UsaUJBQWlCLEVBQUU7SUFDbkI7TUFDRSxpQkFBaUIsRUFBRSxFQUFFOztBQUUzQjtFQUNFO0lBQ0UsaUJBQWlCO0lBQ2pCLGlCQUFpQjtJQUNqQixpQkFBaUI7SUFDakIsa0JBQWtCO0lBQ2xCLG1CQUFtQixFQUFFO0lBQ3JCO01BQ0UsZ0JBQWdCO01BQ2hCLG9CQUFvQixFQUFFO0lBQ3hCO01BQ0UsdUJBQW9CO1VBQXBCLG9CQUFvQjtNQUNwQixxQkFBYztNQUFkLGNBQWM7TUFDZCwyQkFBdUI7VUFBdkIsdUJBQXVCLEVBQUUsRUFBRTs7QUFFakM7RUFDRTtJQUNFLGdCQUFnQixFQUFFO0VBQ3BCO0lBQ0Usa0JBQWtCO0lBQ2xCLGdCQUFnQixFQUFFLEVBQUU7O0FBRXhCO0VBQ0UsMkJBQXVCO01BQXZCLHVCQUF1QixFQUFFOztBQUUzQjtFQUNFLG9CQUFvQixFQUFFOztBQUV4QjtFQUNFLGdCQUFnQjtFQUNoQixlQUFlLEVBQUU7O0FBRW5CO0VBQ0Usa0JBQWtCO0VBQ2xCLGdCQUFnQjtFQUNoQixlQUFlLEVBQUU7O0FBRW5CO0VBQ0UscUJBQWM7RUFBZCxjQUFjLEVBQUU7RUFDaEI7SUFDRSxrQkFBYztRQUFkLGNBQWM7SUFDZCxVQUFVO0lBQ1YsZ0JBQWdCLEVBQUU7RUFDcEI7SUFDRSxjQUFjLEVBQUU7RUFDbEI7SUFDRSxnQkFBZ0IsRUFBRTtFQUNwQjtJQUNFLGlCQUFpQixFQUFFO0VBQ3JCO0lBQ0U7TUFDRSwyQkFBdUI7VUFBdkIsdUJBQXVCLEVBQUU7TUFDekI7UUFDRSxtQkFBZTtZQUFmLGVBQWU7UUFDZixXQUFXLEVBQUU7TUFDZjtRQUNFLGlCQUFpQixFQUFFLEVBQUU7O0FBRTdCO0VBQ0UsbUJBQW1CO0VBQ25CLGNBQWMsRUFBRTs7QUFFbEI7Ozs7RUFJRSxtQkFBbUI7RUFDbkIscUJBQWM7RUFBZCxjQUFjO0VBQ2QsMkJBQXVCO01BQXZCLHVCQUF1QjtFQUN2Qix1QkFBb0I7TUFBcEIsb0JBQW9CO0VBQ3BCLGdCQUFnQjtFQUNoQixtQkFBbUI7RUFDbkIsaUJBQWlCO0VBQ2pCLGVBQWUsRUFBRTtFQUNqQjs7OztJQUlFLHFCQUFxQjtJQUNyQiw0QkFBcUI7SUFBckIscUJBQXFCO0lBQ3JCLHNCQUF3QjtRQUF4Qix3QkFBd0I7SUFDeEIsdUJBQW9CO1FBQXBCLG9CQUFvQjtJQUNwQiwrRUFBK0U7SUFDL0UsdUJBQXVCO0lBQ3ZCLG9CQUFvQixFQUFFO0VBQ3hCOzs7O0lBSUUsWUFBWTtJQUNaLGVBQWU7SUFDZixtR0FBbUc7SUFDbkcsNkJBQTZCO0lBQzdCLDZCQUE2QjtJQUM3QixtQ0FBbUMsRUFBRTs7QUFFekM7RUFDRSxPQUFPO0VBQ1AsWUFBWSxFQUFFO0VBQ2Q7SUFDRSxhQUFhO0lBQ2IsY0FBYyxFQUFFO0VBQ2xCO0lBQ0UsWUFBWTtJQUNaLGFBQWE7SUFDYiw4QkFBOEIsRUFBRTs7QUFFcEM7RUFDRSxXQUFXO0VBQ1gsUUFBUSxFQUFFO0VBQ1Y7SUFDRSxhQUFhO0lBQ2IsY0FBYyxFQUFFO0VBQ2xCO0lBQ0UsYUFBYTtJQUNiLGFBQWE7SUFDYix5QkFBeUIsRUFBRTs7QUFFL0I7RUFDRSxXQUFXO0VBQ1gsWUFBWSxFQUFFO0VBQ2Q7SUFDRSxhQUFhO0lBQ2IsY0FBYyxFQUFFO0VBQ2xCO0lBQ0UsWUFBWTtJQUNaLGFBQWE7SUFDYiw2QkFBNkIsRUFBRTs7QUFFbkM7RUFDRSxXQUFXO0VBQ1gsWUFBWSxFQUFFO0VBQ2Q7SUFDRSxhQUFhO0lBQ2IsY0FBYyxFQUFFO0VBQ2xCO0lBQ0UsWUFBWTtJQUNaLGFBQWE7SUFDYiw4QkFBOEIsRUFBRTs7QUFFcEM7RUFDRTtJQUNFLFlBQVksRUFBRTtFQUNoQjtJQUNFLFlBQVksRUFBRTtFQUNoQjtJQUNFLFlBQVksRUFBRSxFQUFFOztBQUVwQjtFQUNFO0lBQ0UsZUFBVztRQUFYLFdBQVc7SUFDWCxjQUFjO0lBQ2QsYUFBYTtJQUNiLG9CQUFvQixFQUFFO0VBQ3hCO0lBQ0UsWUFBWSxFQUFFO0VBQ2hCO0lBQ0UsVUFBVSxFQUFFO0VBQ2Q7SUFDRSxZQUFZO0lBQ1osV0FBVyxFQUFFO0VBQ2Y7SUFDRSxZQUFZO0lBQ1osVUFBVSxFQUFFLEVBQUU7O0FBRWxCO0VBQ0U7SUFDRSxtQkFBbUI7SUFDbkIsV0FBVztJQUNYLFVBQVU7SUFDVix3Q0FBZ0M7WUFBaEMsZ0NBQWdDO0lBQ2hDLCtDQUF1QztZQUF2Qyx1Q0FBdUMsRUFBRTtFQUMzQztJQUNFLGtCQUFrQixFQUFFLEVBQUU7O0FBRTFCO0VBQ0U7SUFDRSxXQUFXO0lBQ1gsK0NBQXVDO1lBQXZDLHVDQUF1QyxFQUFFO0VBQzNDO0lBQ0Usa0JBQWtCLEVBQUUsRUFBRTs7QUFFMUI7RUFDRSxtQkFBbUIsRUFBRTtFQUNyQjtJQUNFLGlCQUFpQixFQUFFO0VBQ3JCO0lBQ0UsVUFBVTtJQUNWLFdBQVcsRUFBRTtJQUNiO01BQ0UsaUJBQWlCO01BQ2pCLGdCQUFnQjtNQUNoQixtQkFBbUI7TUFDbkIsZUFBZSxFQUFFO0lBQ25CO01BQ0UsZUFBZTtNQUNmLGlCQUFpQixFQUFFO0lBQ3JCO01BQ0UsaUJBQWlCO01BQ2pCLGdCQUFnQjtNQUNoQixlQUFlO01BQ2YsZUFBZSxFQUFFO0VBQ3JCO0lBQ0U7TUFDRSxnQkFBZ0IsRUFBRSxFQUFFO0VBQ3hCO0lBQ0U7TUFDRSxrQkFBa0IsRUFBRSxFQUFFOztBQUU1QjtFQUNFLFlBQVk7RUFDWixhQUFhO0VBQ2IsZUFBZTtFQUNmLDJGQUEyRjtFQUMzRiw2QkFBNkI7RUFDN0IsNEJBQTRCLEVBQUU7RUFDOUI7SUFDRSx5QkFBeUIsRUFBRTtFQUM3QjtJQUNFLDZCQUE2QixFQUFFO0VBQ2pDO0lBQ0UsNkJBQTZCLEVBQUU7RUFDakM7SUFDRSw4QkFBOEIsRUFBRTtFQUNsQztJQUNFLDhCQUE4QixFQUFFO0VBQ2xDO0lBQ0UsOEJBQThCLEVBQUU7RUFDbEM7SUFDRSw4QkFBOEIsRUFBRTtFQUNsQztJQUNFLDhCQUE4QixFQUFFO0VBQ2xDO0lBQ0UsOEJBQThCLEVBQUU7RUFDbEM7SUFDRSw4QkFBOEIsRUFBRTs7QUFFcEM7RUFDRSxxQkFBYztFQUFkLGNBQWM7RUFDZCx1QkFBK0I7TUFBL0IsK0JBQStCO0VBQy9CLHVCQUFvQjtNQUFwQixvQkFBb0I7RUFDcEIsa0JBQWtCO0VBQ2xCLG1CQUFtQjtFQUNuQixvQkFBb0IsRUFBRTtFQUN0QjtJQUNFLG1CQUFlO1FBQWYsZUFBZTtJQUNmLG9CQUFvQjtJQUNwQiwyRkFBMkY7SUFDM0YsNkJBQTZCO0lBQzdCLDZCQUE2QixFQUFFO0lBQy9CO01BQ0UseUJBQXlCO01BQ3pCLFlBQVk7TUFDWixhQUFhLEVBQUU7SUFDakI7TUFDRSw2QkFBNkI7TUFDN0IsYUFBYTtNQUNiLGFBQWEsRUFBRTtJQUNqQjtNQUNFLDZCQUE2QjtNQUM3QixZQUFZO01BQ1osYUFBYSxFQUFFO0lBQ2pCO01BQ0UsOEJBQThCO01BQzlCLGFBQWE7TUFDYixhQUFhLEVBQUU7SUFDakI7TUFDRSw4QkFBOEI7TUFDOUIsYUFBYTtNQUNiLGFBQWEsRUFBRTtFQUNuQjtJQUNFO01BQ0UsaUJBQWlCO01BQ2pCLGlCQUFpQjtNQUNqQixrQkFBa0I7TUFDbEIsbUJBQW1CO01BQ25CLG9CQUFnQjtVQUFoQixnQkFBZ0I7TUFDaEIsc0JBQXdCO1VBQXhCLHdCQUF3QixFQUFFLEVBQUU7RUFDaEM7SUFDRTtNQUNFLDJCQUF1QjtVQUF2Qix1QkFBdUIsRUFBRSxFQUFFIiwiZmlsZSI6InBhZ2VzL3Byb2R1Y3RzL2VudGVycHJpc2UtZW5naW5lLmNzcyIsInNvdXJjZXNDb250ZW50IjpbIiNwYWdlLXByb2R1Y3RzLWVudGVycHJpc2UtZW5naW5lIC5zdWItaGVhZGVyIC5idG4ge1xuICBjb2xvcjogIzFBMjMyRjtcbiAgYmFja2dyb3VuZC1jb2xvcjogI0ZGOTk4MjtcbiAgZm9udC13ZWlnaHQ6IGJvbGQ7XG4gIGxpbmUtaGVpZ2h0OiBub3JtYWw7XG4gIGZvbnQtc2l6ZTogMTFweDtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICBsZXR0ZXItc3BhY2luZzogMC4wOGVtO1xuICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xuICBwYWRkaW5nLWxlZnQ6IDE1cHg7XG4gIHBhZGRpbmctcmlnaHQ6IDE1cHg7IH1cbiAgI3BhZ2UtcHJvZHVjdHMtZW50ZXJwcmlzZS1lbmdpbmUgLnN1Yi1oZWFkZXIgLmJ0bjpob3ZlciB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogI2ZmYmFhYjsgfVxuXG4jcGFnZS1wcm9kdWN0cy1lbnRlcnByaXNlLWVuZ2luZSBoMyxcbiNwYWdlLXByb2R1Y3RzLWVudGVycHJpc2UtZW5naW5lIGgyLFxuI3BhZ2UtcHJvZHVjdHMtZW50ZXJwcmlzZS1lbmdpbmUgcC5sYXJnZSB7XG4gIGxldHRlci1zcGFjaW5nOiAtMC4wMWVtOyB9XG5cbiNwYWdlLXByb2R1Y3RzLWVudGVycHJpc2UtZW5naW5lIHAge1xuICBmb250LXdlaWdodDogNDAwOyB9XG4gICNwYWdlLXByb2R1Y3RzLWVudGVycHJpc2UtZW5naW5lIHA6bm90KC5sYXJnZSkge1xuICAgIGZvbnQtZmFtaWx5OiBcIkdyYXBoaWtcIiwgXCJBdmVuaXIgTmV4dFwiLCBcIkhlbHZldGljYSBOZXVlXCIsIEhlbHZldGljYSwgc2Fucy1zZXJpZjsgfVxuXG4jcGFnZS1wcm9kdWN0cy1lbnRlcnByaXNlLWVuZ2luZSBtYWluIHVsIHtcbiAgbGlzdC1zdHlsZS10eXBlOiBub25lO1xuICBtYXJnaW46IDA7XG4gIHBhZGRpbmc6IDA7IH1cblxuI3BhZ2UtcHJvZHVjdHMtZW50ZXJwcmlzZS1lbmdpbmUgLnRvcCB7XG4gIG1hcmdpbi10b3A6IC0xNDhweDtcbiAgcGFkZGluZy10b3A6IDI2MHB4O1xuICBwYWRkaW5nLWJvdHRvbTogMTgwcHg7XG4gIGJhY2tncm91bmQ6ICMxODI0MzQ7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgei1pbmRleDogMDsgfVxuICAjcGFnZS1wcm9kdWN0cy1lbnRlcnByaXNlLWVuZ2luZSAudG9wOmJlZm9yZSB7XG4gICAgY29udGVudDogJyc7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFwiL2ltZy9wcm9kdWN0cy9lbnRlcnByaXNlLWVuZ2luZS9lbnRlcnByaXNlLWVuZ2luZS1oZXJvLWJnLnBuZ1wiKTtcbiAgICBiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0O1xuICAgIGJhY2tncm91bmQtc2l6ZTogMTA5NnB4IDc2MHB4O1xuICAgIHdpZHRoOiAxMDk2cHg7XG4gICAgaGVpZ2h0OiA3NjBweDtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgYm90dG9tOiAwO1xuICAgIHJpZ2h0OiA1MCU7XG4gICAgbWFyZ2luLXJpZ2h0OiAtODIwcHg7XG4gICAgei1pbmRleDogMTsgfVxuICAjcGFnZS1wcm9kdWN0cy1lbnRlcnByaXNlLWVuZ2luZSAudG9wIGhncm91cCB7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIHotaW5kZXg6IDI7XG4gICAgY29sb3I6ICNmZmY7XG4gICAgbWF4LXdpZHRoOiA2MjRweDsgfVxuICAgICNwYWdlLXByb2R1Y3RzLWVudGVycHJpc2UtZW5naW5lIC50b3AgaGdyb3VwIGg0IHtcbiAgICAgIGxpbmUtaGVpZ2h0OiAyNXB4O1xuICAgICAgZm9udC1zaXplOiAxMnB4O1xuICAgICAgbGV0dGVyLXNwYWNpbmc6IDAuMTRlbTtcbiAgICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XG4gICAgICBjb2xvcjogI0NFRDZFMDtcbiAgICAgIGZvbnQtZmFtaWx5OiBcIlJvYm90byBNb25vXCIsIE1lbmxvLCBNb25hY28sIENvbnNvbGFzLCBcIkNvdXJpZXIgTmV3XCIsIG1vbm9zcGFjZTsgfVxuICAgICNwYWdlLXByb2R1Y3RzLWVudGVycHJpc2UtZW5naW5lIC50b3AgaGdyb3VwIGgxIHtcbiAgICAgIGZvbnQtc2l6ZTogNDhweDtcbiAgICAgIGxldHRlci1zcGFjaW5nOiAtMC4wM2VtOyB9XG4gICAgI3BhZ2UtcHJvZHVjdHMtZW50ZXJwcmlzZS1lbmdpbmUgLnRvcCBoZ3JvdXAgcCB7XG4gICAgICBsaW5lLWhlaWdodDogMzlweDtcbiAgICAgIGZvbnQtc2l6ZTogMjJweDtcbiAgICAgIGNvbG9yOiAjQ0VENkUwOyB9XG4gICAgI3BhZ2UtcHJvZHVjdHMtZW50ZXJwcmlzZS1lbmdpbmUgLnRvcCBoZ3JvdXAgLmJ0biB7XG4gICAgICBtYXJnaW4tdG9wOiAyNHB4O1xuICAgICAgY29sb3I6ICMxODI0MzQ7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjRkY5OTgyO1xuICAgICAgZm9udC13ZWlnaHQ6IDcwMDtcbiAgICAgIGZvbnQtc2l6ZTogMTZweDtcbiAgICAgIGxldHRlci1zcGFjaW5nOiAwLjA2ZW07XG4gICAgICBwYWRkaW5nOiAxOXB4IDI1cHggMTZweDsgfVxuICAgICAgI3BhZ2UtcHJvZHVjdHMtZW50ZXJwcmlzZS1lbmdpbmUgLnRvcCBoZ3JvdXAgLmJ0bjpob3ZlciB7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6ICNmZmJhYWI7IH1cbiAgICBAbWVkaWEgKG1heC13aWR0aDogNzY4cHgpIHtcbiAgICAgICNwYWdlLXByb2R1Y3RzLWVudGVycHJpc2UtZW5naW5lIC50b3AgaGdyb3VwIHtcbiAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgICAgICBtYXJnaW4tbGVmdDogYXV0bztcbiAgICAgICAgbWFyZ2luLXJpZ2h0OiBhdXRvO1xuICAgICAgICBvdmVyZmxvdzogaGlkZGVuOyB9IH1cbiAgICBAbWVkaWEgKG1heC13aWR0aDogNDgwcHgpIHtcbiAgICAgICNwYWdlLXByb2R1Y3RzLWVudGVycHJpc2UtZW5naW5lIC50b3AgaGdyb3VwIGgxIHtcbiAgICAgICAgZm9udC1zaXplOiA0MHB4OyB9XG4gICAgICAjcGFnZS1wcm9kdWN0cy1lbnRlcnByaXNlLWVuZ2luZSAudG9wIGhncm91cCBwIHtcbiAgICAgICAgbGluZS1oZWlnaHQ6IDMwcHg7XG4gICAgICAgIGZvbnQtc2l6ZTogMjBweDsgfSB9XG4gIEBtZWRpYSAobWF4LXdpZHRoOiA3NjhweCkge1xuICAgICNwYWdlLXByb2R1Y3RzLWVudGVycHJpc2UtZW5naW5lIC50b3Age1xuICAgICAgcGFkZGluZy10b3A6IDE5MHB4O1xuICAgICAgcGFkZGluZy1ib3R0b206IDk0cHg7IH0gfVxuXG4jcGFnZS1wcm9kdWN0cy1lbnRlcnByaXNlLWVuZ2luZSBtYWluIHNlY3Rpb24ge1xuICBwYWRkaW5nLXRvcDogMTgwcHg7XG4gIHBhZGRpbmctYm90dG9tOiAxODBweDsgfVxuICAjcGFnZS1wcm9kdWN0cy1lbnRlcnByaXNlLWVuZ2luZSBtYWluIHNlY3Rpb246bnRoLWNoaWxkKDEpIHtcbiAgICBib3JkZXItYm90dG9tOiAycHggc29saWQgI0VFRjJGNzsgfVxuICAjcGFnZS1wcm9kdWN0cy1lbnRlcnByaXNlLWVuZ2luZSBtYWluIHNlY3Rpb24ub2Zmd2hpdGUge1xuICAgIGJhY2tncm91bmQtY29sb3I6ICNGNkY4RkI7IH1cblxuI3BhZ2UtcHJvZHVjdHMtZW50ZXJwcmlzZS1lbmdpbmUgbWFpbiAuY29udGFpbmVyIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlOyB9XG5cbiNwYWdlLXByb2R1Y3RzLWVudGVycHJpc2UtZW5naW5lIG1haW4gLmNvbnRhaW5lciArIC5jb250YWluZXIge1xuICBtYXJnaW4tdG9wOiAyNDBweDsgfVxuXG4jcGFnZS1wcm9kdWN0cy1lbnRlcnByaXNlLWVuZ2luZSBtYWluIGhncm91cCB7XG4gIG1hcmdpbi1ib3R0b206IDEwMHB4OyB9XG5cbiNwYWdlLXByb2R1Y3RzLWVudGVycHJpc2UtZW5naW5lIG1haW4gLm1lYXN1cmUge1xuICBtYXgtd2lkdGg6IDYxMnB4OyB9XG5cbiNwYWdlLXByb2R1Y3RzLWVudGVycHJpc2UtZW5naW5lIG1haW4gLmNlbnRlciB7XG4gIHRleHQtYWxpZ246IGNlbnRlcjsgfVxuXG4jcGFnZS1wcm9kdWN0cy1lbnRlcnByaXNlLWVuZ2luZSBtYWluIGgzIHtcbiAgY29sb3I6ICM5MkExQjM7XG4gIGZvbnQtc2l6ZTogMjRweDtcbiAgbWFyZ2luLWJvdHRvbTogMDtcbiAgbWFyZ2luLXRvcDogMDtcbiAgZm9udC13ZWlnaHQ6IDYwMDsgfVxuXG4jcGFnZS1wcm9kdWN0cy1lbnRlcnByaXNlLWVuZ2luZSBtYWluIGgyIHtcbiAgY29sb3I6ICMwMjA4MTQ7XG4gIGZvbnQtc2l6ZTogMzZweDtcbiAgbWFyZ2luLXRvcDogMTBweDtcbiAgbWFyZ2luLWJvdHRvbTogMTZweDtcbiAgZm9udC13ZWlnaHQ6IDcwMDsgfVxuXG4jcGFnZS1wcm9kdWN0cy1lbnRlcnByaXNlLWVuZ2luZSBtYWluIHAubGFyZ2Uge1xuICBsaW5lLWhlaWdodDogMzlweDtcbiAgZm9udC1zaXplOiAyMnB4O1xuICBjb2xvcjogIzVCNzA4QjsgfVxuICAjcGFnZS1wcm9kdWN0cy1lbnRlcnByaXNlLWVuZ2luZSBtYWluIHAubGFyZ2UgZW0ge1xuICAgIGZvbnQtc3R5bGU6IG5vcm1hbDtcbiAgICBjb2xvcjogIzJGM0E0ODsgfVxuXG5AbWVkaWEgKG1heC13aWR0aDogOTkycHgpIHtcbiAgI3BhZ2UtcHJvZHVjdHMtZW50ZXJwcmlzZS1lbmdpbmUgbWFpbiBzZWN0aW9uIHtcbiAgICBwYWRkaW5nLXRvcDogMTEycHg7XG4gICAgcGFkZGluZy1ib3R0b206IDEzMHB4OyB9XG4gICNwYWdlLXByb2R1Y3RzLWVudGVycHJpc2UtZW5naW5lIG1haW4gaGdyb3VwIHtcbiAgICBtYXJnaW4tYm90dG9tOiAwOyB9XG4gICNwYWdlLXByb2R1Y3RzLWVudGVycHJpc2UtZW5naW5lIG1haW4gaDMge1xuICAgIGZvbnQtc2l6ZTogMjhweDsgfVxuICAjcGFnZS1wcm9kdWN0cy1lbnRlcnByaXNlLWVuZ2luZSBtYWluIGgyIHtcbiAgICBmb250LXNpemU6IDMycHg7IH1cbiAgI3BhZ2UtcHJvZHVjdHMtZW50ZXJwcmlzZS1lbmdpbmUgbWFpbiAuY29udGFpbmVyICsgLmNvbnRhaW5lciB7XG4gICAgbWFyZ2luLXRvcDogMjAwcHg7IH0gfVxuXG5AbWVkaWEgKG1heC13aWR0aDogNzY4cHgpIHtcbiAgI3BhZ2UtcHJvZHVjdHMtZW50ZXJwcmlzZS1lbmdpbmUgbWFpbiBoZ3JvdXAge1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICBtYXJnaW4tbGVmdDogYXV0bztcbiAgICBtYXJnaW4tcmlnaHQ6IGF1dG87IH1cbiAgI3BhZ2UtcHJvZHVjdHMtZW50ZXJwcmlzZS1lbmdpbmUgbWFpbiAuY29udGFpbmVyICsgLmNvbnRhaW5lciB7XG4gICAgbWFyZ2luLXRvcDogMTQ0cHg7IH0gfVxuXG5AbWVkaWEgKG1heC13aWR0aDogNDgwcHgpIHtcbiAgI3BhZ2UtcHJvZHVjdHMtZW50ZXJwcmlzZS1lbmdpbmUgbWFpbiBzZWN0aW9uIHtcbiAgICBwYWRkaW5nLXRvcDogODJweDtcbiAgICBwYWRkaW5nLWJvdHRvbTogOTBweDsgfSB9XG5cbiNwYWdlLXByb2R1Y3RzLWVudGVycHJpc2UtZW5naW5lIC5mZWF0dXJlLXRhYmxlIHtcbiAgd2lkdGg6IDEwMCU7IH1cbiAgI3BhZ2UtcHJvZHVjdHMtZW50ZXJwcmlzZS1lbmdpbmUgLmZlYXR1cmUtdGFibGUgdHIgdGQge1xuICAgIGJvcmRlci10b3A6IDJweCBzb2xpZCAjRjJGNUZBOyB9XG4gICNwYWdlLXByb2R1Y3RzLWVudGVycHJpc2UtZW5naW5lIC5mZWF0dXJlLXRhYmxlIHRyOmZpcnN0LWNoaWxkIHRkIHtcbiAgICBib3JkZXItdG9wOiAwOyB9XG4gICNwYWdlLXByb2R1Y3RzLWVudGVycHJpc2UtZW5naW5lIC5mZWF0dXJlLXRhYmxlIHRyIHRkOm50aC1jaGlsZCgxKSB7XG4gICAgZm9udC1zaXplOiAyMHB4O1xuICAgIGxldHRlci1zcGFjaW5nOiAwLjA4ZW07XG4gICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcbiAgICBmb250LXdlaWdodDogNjAwO1xuICAgIGRpc3BsYXk6IGZsZXg7IH1cbiAgICAjcGFnZS1wcm9kdWN0cy1lbnRlcnByaXNlLWVuZ2luZSAuZmVhdHVyZS10YWJsZSB0ciB0ZDpudGgtY2hpbGQoMSkgc3ZnIHtcbiAgICAgIG1hcmdpbi1yaWdodDogMTZweDsgfVxuICAjcGFnZS1wcm9kdWN0cy1lbnRlcnByaXNlLWVuZ2luZSAuZmVhdHVyZS10YWJsZSB0ciB0ZDpudGgtY2hpbGQoMikge1xuICAgIGZvbnQtc2l6ZTogMThweDtcbiAgICBjb2xvcjogIzVCNzA4QjsgfVxuICAjcGFnZS1wcm9kdWN0cy1lbnRlcnByaXNlLWVuZ2luZSAuZmVhdHVyZS10YWJsZSB0ciB0ZDpudGgtY2hpbGQoMykge1xuICAgIGNvbG9yOiAjNUI3MDhCOyB9XG4gICNwYWdlLXByb2R1Y3RzLWVudGVycHJpc2UtZW5naW5lIC5mZWF0dXJlLXRhYmxlIHRyIHRkIHtcbiAgICBwYWRkaW5nOiAzMnB4IDQ4cHg7IH1cbiAgICAjcGFnZS1wcm9kdWN0cy1lbnRlcnByaXNlLWVuZ2luZSAuZmVhdHVyZS10YWJsZSB0ciB0ZDpmaXJzdC1jaGlsZCB7XG4gICAgICBwYWRkaW5nLWxlZnQ6IDA7IH1cbiAgICAjcGFnZS1wcm9kdWN0cy1lbnRlcnByaXNlLWVuZ2luZSAuZmVhdHVyZS10YWJsZSB0ciB0ZDpsYXN0LWNoaWxkIHtcbiAgICAgIHBhZGRpbmctcmlnaHQ6IDA7IH1cbiAgQG1lZGlhIChtYXgtd2lkdGg6IDk5MnB4KSB7XG4gICAgI3BhZ2UtcHJvZHVjdHMtZW50ZXJwcmlzZS1lbmdpbmUgLmZlYXR1cmUtdGFibGUgdHIge1xuICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgIGZsZXgtd3JhcDogd3JhcDtcbiAgICAgIHBhZGRpbmctYm90dG9tOiAxOHB4OyB9XG4gICAgI3BhZ2UtcHJvZHVjdHMtZW50ZXJwcmlzZS1lbmdpbmUgLmZlYXR1cmUtdGFibGUgdHIgdGQ6Zmlyc3QtY2hpbGQge1xuICAgICAgZmxleDogMCAwIDEwMCU7XG4gICAgICBwYWRkaW5nLXRvcDogNDhweDsgfVxuICAgICNwYWdlLXByb2R1Y3RzLWVudGVycHJpc2UtZW5naW5lIC5mZWF0dXJlLXRhYmxlIHRyIHRkOm5vdCg6Zmlyc3QtY2hpbGQpIHtcbiAgICAgIGZsZXg6IDAgMCAxMDAlO1xuICAgICAgYm9yZGVyLXRvcDogMDtcbiAgICAgIHBhZGRpbmctdG9wOiAwO1xuICAgICAgcGFkZGluZy1sZWZ0OiAwO1xuICAgICAgbWF4LXdpZHRoOiA0MjBweDsgfSB9XG4gIEBtZWRpYSAobWF4LXdpZHRoOiA3NjhweCkge1xuICAgICNwYWdlLXByb2R1Y3RzLWVudGVycHJpc2UtZW5naW5lIC5mZWF0dXJlLXRhYmxlIHRyIHtcbiAgICAgIG1heC13aWR0aDogNDIwcHg7XG4gICAgICBtYXJnaW4tbGVmdDogYXV0bztcbiAgICAgIG1hcmdpbi1yaWdodDogYXV0bzsgfSB9XG5cbiNwYWdlLXByb2R1Y3RzLWVudGVycHJpc2UtZW5naW5lIC5jaGVja21hcmstbGlzdCB7XG4gIG1hcmdpbi1ib3R0b206IC0yNnB4OyB9XG4gICNwYWdlLXByb2R1Y3RzLWVudGVycHJpc2UtZW5naW5lIC5jaGVja21hcmstbGlzdCBsaSB7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIGRpc3BsYXk6IGZsZXg7IH1cbiAgI3BhZ2UtcHJvZHVjdHMtZW50ZXJwcmlzZS1lbmdpbmUgLmNoZWNrbWFyay1saXN0IGxpOmJlZm9yZSB7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIGNvbnRlbnQ6ICcnOyB9XG4gICNwYWdlLXByb2R1Y3RzLWVudGVycHJpc2UtZW5naW5lIC5jaGVja21hcmstbGlzdCA+IGxpIHtcbiAgICBtYXJnaW4tYm90dG9tOiAyNnB4OyB9XG4gICNwYWdlLXByb2R1Y3RzLWVudGVycHJpc2UtZW5naW5lIC5jaGVja21hcmstbGlzdCA+IGxpOmJlZm9yZSB7XG4gICAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFwiL2ltZy9jaGVja21hcmstbWVkaXVtLWdyYXkuc3ZnXCIpO1xuICAgIGJhY2tncm91bmQtc2l6ZTogMjBweCAyMHB4O1xuICAgIGhlaWdodDogMjBweDtcbiAgICB3aWR0aDogMjBweDtcbiAgICBmbGV4OiAwIDAgMjBweDtcbiAgICBtYXJnaW4tcmlnaHQ6IDE2cHg7IH1cbiAgI3BhZ2UtcHJvZHVjdHMtZW50ZXJwcmlzZS1lbmdpbmUgLmNoZWNrbWFyay1saXN0IGxpIHVsIHtcbiAgICBtYXJnaW4tdG9wOiAyMHB4OyB9XG4gICNwYWdlLXByb2R1Y3RzLWVudGVycHJpc2UtZW5naW5lIC5jaGVja21hcmstbGlzdCBsaSB1bCA+IGxpIHtcbiAgICBsaW5lLWhlaWdodDogMTdweDtcbiAgICBmb250LXNpemU6IDEycHg7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlOyB9XG4gICAgI3BhZ2UtcHJvZHVjdHMtZW50ZXJwcmlzZS1lbmdpbmUgLmNoZWNrbWFyay1saXN0IGxpIHVsID4gbGk6YmVmb3JlIHtcbiAgICAgIGJhY2tncm91bmQtaW1hZ2U6IHVybChcIi9pbWcvY2hlY2ttYXJrLnN2Z1wiKTtcbiAgICAgIGJhY2tncm91bmQtc2l6ZTogMTBweCA4cHg7XG4gICAgICBoZWlnaHQ6IDhweDtcbiAgICAgIHdpZHRoOiAxMHB4O1xuICAgICAgZmxleDogMCAwIDEwcHg7XG4gICAgICB0b3A6IDJweDtcbiAgICAgIG1hcmdpbi1yaWdodDogOHB4O1xuICAgICAgb3BhY2l0eTogMC42OyB9XG4gICAgI3BhZ2UtcHJvZHVjdHMtZW50ZXJwcmlzZS1lbmdpbmUgLmNoZWNrbWFyay1saXN0IGxpIHVsID4gbGkgKyBsaSB7XG4gICAgICBtYXJnaW4tdG9wOiAxNHB4OyB9XG4gICNwYWdlLXByb2R1Y3RzLWVudGVycHJpc2UtZW5naW5lIC5jaGVja21hcmstbGlzdC5sYXJnZSB7XG4gICAgbGluZS1oZWlnaHQ6IDMzcHg7XG4gICAgZm9udC1zaXplOiAyMHB4O1xuICAgIGNvbG9yOiAjNUI3MDhCOyB9XG4gICNwYWdlLXByb2R1Y3RzLWVudGVycHJpc2UtZW5naW5lIC5jaGVja21hcmstbGlzdC5sYXJnZSBsaTpiZWZvcmUge1xuICAgIHRvcDogNHB4OyB9XG4gICNwYWdlLXByb2R1Y3RzLWVudGVycHJpc2UtZW5naW5lIC5jaGVja21hcmstbGlzdC0tbGFyZ2UgbGk6YmVmb3JlIHtcbiAgICB3aWR0aDogMjRweDtcbiAgICBoZWlnaHQ6IDI0cHg7XG4gICAgZmxleDogMCAwIDI0cHg7XG4gICAgYmFja2dyb3VuZC1zaXplOiAyNHB4IDI0cHg7XG4gICAgbWFyZ2luLXJpZ2h0OiAyMHB4OyB9XG4gICNwYWdlLXByb2R1Y3RzLWVudGVycHJpc2UtZW5naW5lIC5jaGVja21hcmstbGlzdC50d28tY29sIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGZsZXgtd3JhcDogd3JhcDtcbiAgICBtYXJnaW4tbGVmdDogLTMwcHg7XG4gICAgbWFyZ2luLXJpZ2h0OiAtMzBweDsgfVxuICAgICNwYWdlLXByb2R1Y3RzLWVudGVycHJpc2UtZW5naW5lIC5jaGVja21hcmstbGlzdC50d28tY29sIGxpIHtcbiAgICAgIGZsZXg6IDAgMCA1MCU7XG4gICAgICBwYWRkaW5nLWxlZnQ6IDMwcHg7XG4gICAgICBwYWRkaW5nLXJpZ2h0OiAzMHB4OyB9XG4gICNwYWdlLXByb2R1Y3RzLWVudGVycHJpc2UtZW5naW5lIC5jaGVja21hcmstbGlzdCBoZ3JvdXAge1xuICAgIG1hcmdpbjogMCAwIDE2cHg7IH1cbiAgICAjcGFnZS1wcm9kdWN0cy1lbnRlcnByaXNlLWVuZ2luZSAuY2hlY2ttYXJrLWxpc3QgaGdyb3VwIGg1IHtcbiAgICAgIG1hcmdpbjogMDtcbiAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7XG4gICAgICBsaW5lLWhlaWdodDogMjBweDtcbiAgICAgIGZvbnQtc2l6ZTogMTZweDtcbiAgICAgIGNvbG9yOiAjM0M1MzZGOyB9XG4gICAgI3BhZ2UtcHJvZHVjdHMtZW50ZXJwcmlzZS1lbmdpbmUgLmNoZWNrbWFyay1saXN0IGhncm91cCBwIHtcbiAgICAgIGxpbmUtaGVpZ2h0OiAyM3B4O1xuICAgICAgZm9udC1zaXplOiAxNHB4O1xuICAgICAgY29sb3I6ICM5MkExQjM7IH1cbiAgQG1lZGlhIChtYXgtd2lkdGg6IDk5MnB4KSB7XG4gICAgI3BhZ2UtcHJvZHVjdHMtZW50ZXJwcmlzZS1lbmdpbmUgLmNoZWNrbWFyay1saXN0LmxhcmdlIHtcbiAgICAgIGxpbmUtaGVpZ2h0OiAzMHB4O1xuICAgICAgZm9udC1zaXplOiAxOHB4O1xuICAgICAgbWFyZ2luLXRvcDogNjBweDsgfSB9XG4gIEBtZWRpYSAobWF4LXdpZHRoOiA3NjhweCkge1xuICAgICNwYWdlLXByb2R1Y3RzLWVudGVycHJpc2UtZW5naW5lIC5jaGVja21hcmstbGlzdC50d28tY29sIHtcbiAgICAgIG1heC13aWR0aDogNDIwcHg7XG4gICAgICBtYXJnaW4tbGVmdDogYXV0bztcbiAgICAgIG1hcmdpbi1yaWdodDogYXV0bzsgfVxuICAgICAgI3BhZ2UtcHJvZHVjdHMtZW50ZXJwcmlzZS1lbmdpbmUgLmNoZWNrbWFyay1saXN0LnR3by1jb2wgbGkge1xuICAgICAgICBmbGV4OiAwIDAgMTAwJTsgfVxuICAgICNwYWdlLXByb2R1Y3RzLWVudGVycHJpc2UtZW5naW5lIC5jaGVja21hcmstbGlzdCBoZ3JvdXAge1xuICAgICAgdGV4dC1hbGlnbjogbGVmdDtcbiAgICAgIG1hcmdpbi1ib3R0b206IDA7IH1cbiAgICAgICNwYWdlLXByb2R1Y3RzLWVudGVycHJpc2UtZW5naW5lIC5jaGVja21hcmstbGlzdCBoZ3JvdXAgcCB7XG4gICAgICAgIG1hcmdpbi1ib3R0b206IDA7IH0gfVxuXG4jcGFnZS1wcm9kdWN0cy1lbnRlcnByaXNlLWVuZ2luZSAudHdvLWNvbCB7XG4gIGRpc3BsYXk6IGZsZXg7IH1cbiAgI3BhZ2UtcHJvZHVjdHMtZW50ZXJwcmlzZS1lbmdpbmUgLnR3by1jb2wgPiBkaXYge1xuICAgIGZsZXg6IDAgMCA1MCU7IH1cbiAgI3BhZ2UtcHJvZHVjdHMtZW50ZXJwcmlzZS1lbmdpbmUgLnR3by1jb2wgLmZlYXR1cmUtbGlzdCB7XG4gICAgZmxleDogMCAwIDU1JTtcbiAgICBwYWRkaW5nLXJpZ2h0OiA1MHB4OyB9XG4gICNwYWdlLXByb2R1Y3RzLWVudGVycHJpc2UtZW5naW5lIC50d28tY29sIC5jaGVja21hcmstbGlzdCB7XG4gICAgZmxleDogMCAwIDQ1JTtcbiAgICBwYWRkaW5nLWxlZnQ6IDUwcHg7IH1cbiAgQG1lZGlhIChtYXgtd2lkdGg6IDk5MnB4KSB7XG4gICAgI3BhZ2UtcHJvZHVjdHMtZW50ZXJwcmlzZS1lbmdpbmUgLnR3by1jb2wgLmNoZWNrbWFyay1saXN0IHtcbiAgICAgIG1hcmdpbi10b3A6IDQwcHg7IH0gfVxuICBAbWVkaWEgKG1heC13aWR0aDogNzY4cHgpIHtcbiAgICAjcGFnZS1wcm9kdWN0cy1lbnRlcnByaXNlLWVuZ2luZSAudHdvLWNvbCAuZmVhdHVyZS1saXN0IHtcbiAgICAgIHBhZGRpbmctcmlnaHQ6IDA7IH1cbiAgICAjcGFnZS1wcm9kdWN0cy1lbnRlcnByaXNlLWVuZ2luZSAudHdvLWNvbCAuY2hlY2ttYXJrLWxpc3Qge1xuICAgICAgcGFkZGluZy1sZWZ0OiAwO1xuICAgICAgbWF4LXdpZHRoOiA0ODBweDtcbiAgICAgIG1hcmdpbi1sZWZ0OiBhdXRvO1xuICAgICAgbWFyZ2luLXJpZ2h0OiBhdXRvOyB9IH1cblxuQG1lZGlhIChtYXgtd2lkdGg6IDk5MnB4KSB7XG4gICNwYWdlLXByb2R1Y3RzLWVudGVycHJpc2UtZW5naW5lIC50d28tY29sOm5vdCguY2hlY2ttYXJrLWxpc3QpIHtcbiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOyB9XG4gICAgI3BhZ2UtcHJvZHVjdHMtZW50ZXJwcmlzZS1lbmdpbmUgLnR3by1jb2w6bm90KC5jaGVja21hcmstbGlzdCkgPiBkaXYge1xuICAgICAgZmxleDogMCAwIDEwMCU7IH0gfVxuXG4jcGFnZS1wcm9kdWN0cy1lbnRlcnByaXNlLWVuZ2luZSAuZmVhdHVyZS1saXN0IGxpIHtcbiAgZGlzcGxheTogZmxleDsgfVxuXG4jcGFnZS1wcm9kdWN0cy1lbnRlcnByaXNlLWVuZ2luZSAuZmVhdHVyZS1saXN0IC5mZWF0dXJlLWljb24ge1xuICBmbGV4OiAwIDAgNDhweDtcbiAgbWFyZ2luLXJpZ2h0OiAzNnB4OyB9XG5cbiNwYWdlLXByb2R1Y3RzLWVudGVycHJpc2UtZW5naW5lIC5mZWF0dXJlLWxpc3QgaGdyb3VwIHtcbiAgbWFyZ2luOiAwOyB9XG5cbiNwYWdlLXByb2R1Y3RzLWVudGVycHJpc2UtZW5naW5lIC5mZWF0dXJlLWxpc3QgaDQge1xuICBmb250LXNpemU6IDI0cHg7XG4gIGxpbmUtaGVpZ2h0OiAxLjI7XG4gIGZvbnQtd2VpZ2h0OiA2MDA7XG4gIG1hcmdpbi1ib3R0b206IDE4cHg7IH1cblxuI3BhZ2UtcHJvZHVjdHMtZW50ZXJwcmlzZS1lbmdpbmUgLmZlYXR1cmUtbGlzdCBwIHtcbiAgbWFyZ2luOiAwIDAgNnB4O1xuICBsaW5lLWhlaWdodDogMzJweDtcbiAgZm9udC1zaXplOiAxOHB4O1xuICBjb2xvcjogIzVCNzA4QjsgfVxuXG4jcGFnZS1wcm9kdWN0cy1lbnRlcnByaXNlLWVuZ2luZSAuZmVhdHVyZS1saXN0IGxpICsgbGkge1xuICBtYXJnaW4tdG9wOiA2OHB4OyB9XG5cbkBtZWRpYSAobWF4LXdpZHRoOiA5OTJweCkge1xuICAjcGFnZS1wcm9kdWN0cy1lbnRlcnByaXNlLWVuZ2luZSAuZmVhdHVyZS1saXN0IHtcbiAgICBtYXJnaW4tdG9wOiA2MHB4OyB9XG4gICAgI3BhZ2UtcHJvZHVjdHMtZW50ZXJwcmlzZS1lbmdpbmUgLmZlYXR1cmUtbGlzdCBsaSArIGxpIHtcbiAgICAgIG1hcmdpbi10b3A6IDUwcHg7IH0gfVxuXG5AbWVkaWEgKG1heC13aWR0aDogNzY4cHgpIHtcbiAgI3BhZ2UtcHJvZHVjdHMtZW50ZXJwcmlzZS1lbmdpbmUgLmZlYXR1cmUtbGlzdCB7XG4gICAgcGFkZGluZy1yaWdodDogMDtcbiAgICBtYXJnaW4tdG9wOiAzMHB4O1xuICAgIG1heC13aWR0aDogNDgwcHg7XG4gICAgbWFyZ2luLWxlZnQ6IGF1dG87XG4gICAgbWFyZ2luLXJpZ2h0OiBhdXRvOyB9XG4gICAgI3BhZ2UtcHJvZHVjdHMtZW50ZXJwcmlzZS1lbmdpbmUgLmZlYXR1cmUtbGlzdCAuZmVhdHVyZS1pY29uIHtcbiAgICAgIG1hcmdpbi1yaWdodDogMDtcbiAgICAgIG1hcmdpbi1ib3R0b206IDE1cHg7IH1cbiAgICAjcGFnZS1wcm9kdWN0cy1lbnRlcnByaXNlLWVuZ2luZSAuZmVhdHVyZS1saXN0IGxpIHtcbiAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsgfSB9XG5cbkBtZWRpYSAobWF4LXdpZHRoOiA0ODBweCkge1xuICAjcGFnZS1wcm9kdWN0cy1lbnRlcnByaXNlLWVuZ2luZSAuZmVhdHVyZS1saXN0IGg0IHtcbiAgICBmb250LXNpemU6IDIwcHg7IH1cbiAgI3BhZ2UtcHJvZHVjdHMtZW50ZXJwcmlzZS1lbmdpbmUgLmZlYXR1cmUtbGlzdCBwIHtcbiAgICBsaW5lLWhlaWdodDogMjhweDtcbiAgICBmb250LXNpemU6IDE2cHg7IH0gfVxuXG4jcGFnZS1wcm9kdWN0cy1lbnRlcnByaXNlLWVuZ2luZSAuZmVhdHVyZS1saXN0LS1zbWFsbCBsaSB7XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47IH1cblxuI3BhZ2UtcHJvZHVjdHMtZW50ZXJwcmlzZS1lbmdpbmUgLmZlYXR1cmUtbGlzdC0tc21hbGwgLmZlYXR1cmUtaWNvbiB7XG4gIG1hcmdpbi1ib3R0b206IDIwcHg7IH1cblxuI3BhZ2UtcHJvZHVjdHMtZW50ZXJwcmlzZS1lbmdpbmUgLmZlYXR1cmUtbGlzdC0tc21hbGwgaDQge1xuICBmb250LXNpemU6IDIwcHg7XG4gIGNvbG9yOiAjMDIwODE0OyB9XG5cbiNwYWdlLXByb2R1Y3RzLWVudGVycHJpc2UtZW5naW5lIC5mZWF0dXJlLWxpc3QtLXNtYWxsIHAge1xuICBsaW5lLWhlaWdodDogMjZweDtcbiAgZm9udC1zaXplOiAxNnB4O1xuICBjb2xvcjogIzVCNzA4QjsgfVxuXG4jcGFnZS1wcm9kdWN0cy1lbnRlcnByaXNlLWVuZ2luZSAudGhyZWUtY29sIHtcbiAgZGlzcGxheTogZmxleDsgfVxuICAjcGFnZS1wcm9kdWN0cy1lbnRlcnByaXNlLWVuZ2luZSAudGhyZWUtY29sIGxpIHtcbiAgICBmbGV4OiAwIDAgMzMlO1xuICAgIG1hcmdpbjogMDtcbiAgICBwYWRkaW5nOiAwIDMycHg7IH1cbiAgI3BhZ2UtcHJvZHVjdHMtZW50ZXJwcmlzZS1lbmdpbmUgLnRocmVlLWNvbCBsaSArIGxpIHtcbiAgICBtYXJnaW4tdG9wOiAwOyB9XG4gICNwYWdlLXByb2R1Y3RzLWVudGVycHJpc2UtZW5naW5lIC50aHJlZS1jb2wgbGk6Zmlyc3QtY2hpbGQge1xuICAgIHBhZGRpbmctbGVmdDogMDsgfVxuICAjcGFnZS1wcm9kdWN0cy1lbnRlcnByaXNlLWVuZ2luZSAudGhyZWUtY29sIGxpOmxhc3QtY2hpbGQge1xuICAgIHBhZGRpbmctcmlnaHQ6IDA7IH1cbiAgQG1lZGlhIChtYXgtd2lkdGg6IDc2OHB4KSB7XG4gICAgI3BhZ2UtcHJvZHVjdHMtZW50ZXJwcmlzZS1lbmdpbmUgLnRocmVlLWNvbCB7XG4gICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOyB9XG4gICAgICAjcGFnZS1wcm9kdWN0cy1lbnRlcnByaXNlLWVuZ2luZSAudGhyZWUtY29sIGxpIHtcbiAgICAgICAgZmxleDogMCAwIDEwMCU7XG4gICAgICAgIHBhZGRpbmc6IDA7IH1cbiAgICAgICNwYWdlLXByb2R1Y3RzLWVudGVycHJpc2UtZW5naW5lIC50aHJlZS1jb2wgbGkgKyBsaSB7XG4gICAgICAgIG1hcmdpbi10b3A6IDMwcHg7IH0gfVxuXG4jcGFnZS1wcm9kdWN0cy1lbnRlcnByaXNlLWVuZ2luZSAuaW50ZWdyYXRpb25zIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBoZWlnaHQ6IDY2MHB4OyB9XG5cbiNwYWdlLXByb2R1Y3RzLWVudGVycHJpc2UtZW5naW5lIC5pbnRlZ3JhdGlvbnNfX2lkZW50aXR5LXZhdWx0LFxuI3BhZ2UtcHJvZHVjdHMtZW50ZXJwcmlzZS1lbmdpbmUgLmludGVncmF0aW9uc19fYXdzLWFtcGxpZnksXG4jcGFnZS1wcm9kdWN0cy1lbnRlcnByaXNlLWVuZ2luZSAuaW50ZWdyYXRpb25zX19jb3VjaGJhc2UsXG4jcGFnZS1wcm9kdWN0cy1lbnRlcnByaXNlLWVuZ2luZSAuaW50ZWdyYXRpb25zX19hY3RpdmUtZGlyZWN0b3J5IHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBmb250LXNpemU6IDEzcHg7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgY29sb3I6ICM1QjcwOEI7IH1cbiAgI3BhZ2UtcHJvZHVjdHMtZW50ZXJwcmlzZS1lbmdpbmUgLmludGVncmF0aW9uc19faWRlbnRpdHktdmF1bHQgaSxcbiAgI3BhZ2UtcHJvZHVjdHMtZW50ZXJwcmlzZS1lbmdpbmUgLmludGVncmF0aW9uc19fYXdzLWFtcGxpZnkgaSxcbiAgI3BhZ2UtcHJvZHVjdHMtZW50ZXJwcmlzZS1lbmdpbmUgLmludGVncmF0aW9uc19fY291Y2hiYXNlIGksXG4gICNwYWdlLXByb2R1Y3RzLWVudGVycHJpc2UtZW5naW5lIC5pbnRlZ3JhdGlvbnNfX2FjdGl2ZS1kaXJlY3RvcnkgaSB7XG4gICAgYm9yZGVyLXJhZGl1czogOTk5cHg7XG4gICAgZGlzcGxheTogaW5saW5lLWZsZXg7XG4gICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICBib3gtc2hhZG93OiAwcHggMnB4IDhweCByZ2JhKDIsIDgsIDIwLCAwLjEpLCAwcHggOHB4IDE2cHggcmdiYSgyLCA4LCAyMCwgMC4wOCk7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjtcbiAgICBtYXJnaW4tYm90dG9tOiAxNHB4OyB9XG4gICNwYWdlLXByb2R1Y3RzLWVudGVycHJpc2UtZW5naW5lIC5pbnRlZ3JhdGlvbnNfX2lkZW50aXR5LXZhdWx0IGk6OmJlZm9yZSxcbiAgI3BhZ2UtcHJvZHVjdHMtZW50ZXJwcmlzZS1lbmdpbmUgLmludGVncmF0aW9uc19fYXdzLWFtcGxpZnkgaTo6YmVmb3JlLFxuICAjcGFnZS1wcm9kdWN0cy1lbnRlcnByaXNlLWVuZ2luZSAuaW50ZWdyYXRpb25zX19jb3VjaGJhc2UgaTo6YmVmb3JlLFxuICAjcGFnZS1wcm9kdWN0cy1lbnRlcnByaXNlLWVuZ2luZSAuaW50ZWdyYXRpb25zX19hY3RpdmUtZGlyZWN0b3J5IGk6OmJlZm9yZSB7XG4gICAgY29udGVudDogJyc7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFwiL2ltZy9wcm9kdWN0cy9lbnRlcnByaXNlLWVuZ2luZS9lbnRlcnByaXNlLWVuZ2luZS1pbnRlZ3JhdGlvbnMtc3ByaXRlLnBuZ1wiKTtcbiAgICBiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0O1xuICAgIGJhY2tncm91bmQtc2l6ZTogMTEycHggMjk0cHg7XG4gICAgYmFja2dyb3VuZC1wb3NpdGlvbjogY2VudGVyIGNlbnRlcjsgfVxuXG4jcGFnZS1wcm9kdWN0cy1lbnRlcnByaXNlLWVuZ2luZSAuaW50ZWdyYXRpb25zX19pZGVudGl0eS12YXVsdCB7XG4gIHRvcDogMDtcbiAgbGVmdDogMjQycHg7IH1cbiAgI3BhZ2UtcHJvZHVjdHMtZW50ZXJwcmlzZS1lbmdpbmUgLmludGVncmF0aW9uc19faWRlbnRpdHktdmF1bHQgaSB7XG4gICAgd2lkdGg6IDEyNHB4O1xuICAgIGhlaWdodDogMTI0cHg7IH1cbiAgI3BhZ2UtcHJvZHVjdHMtZW50ZXJwcmlzZS1lbmdpbmUgLmludGVncmF0aW9uc19faWRlbnRpdHktdmF1bHQgaTo6YmVmb3JlIHtcbiAgICB3aWR0aDogNTZweDtcbiAgICBoZWlnaHQ6IDU2cHg7XG4gICAgYmFja2dyb3VuZC1wb3NpdGlvbjogMCAtMTUxcHg7IH1cblxuI3BhZ2UtcHJvZHVjdHMtZW50ZXJwcmlzZS1lbmdpbmUgLmludGVncmF0aW9uc19fYXdzLWFtcGxpZnkge1xuICB0b3A6IDE3MnB4O1xuICBsZWZ0OiAwOyB9XG4gICNwYWdlLXByb2R1Y3RzLWVudGVycHJpc2UtZW5naW5lIC5pbnRlZ3JhdGlvbnNfX2F3cy1hbXBsaWZ5IGkge1xuICAgIHdpZHRoOiAxOTJweDtcbiAgICBoZWlnaHQ6IDE5MnB4OyB9XG4gICNwYWdlLXByb2R1Y3RzLWVudGVycHJpc2UtZW5naW5lIC5pbnRlZ3JhdGlvbnNfX2F3cy1hbXBsaWZ5IGk6OmJlZm9yZSB7XG4gICAgd2lkdGg6IDExMnB4O1xuICAgIGhlaWdodDogODRweDtcbiAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwIDA7IH1cblxuI3BhZ2UtcHJvZHVjdHMtZW50ZXJwcmlzZS1lbmdpbmUgLmludGVncmF0aW9uc19fY291Y2hiYXNlIHtcbiAgdG9wOiAyOTBweDtcbiAgbGVmdDogMzU0cHg7IH1cbiAgI3BhZ2UtcHJvZHVjdHMtZW50ZXJwcmlzZS1lbmdpbmUgLmludGVncmF0aW9uc19fY291Y2hiYXNlIGkge1xuICAgIHdpZHRoOiAxMjRweDtcbiAgICBoZWlnaHQ6IDEyNHB4OyB9XG4gICNwYWdlLXByb2R1Y3RzLWVudGVycHJpc2UtZW5naW5lIC5pbnRlZ3JhdGlvbnNfX2NvdWNoYmFzZSBpOjpiZWZvcmUge1xuICAgIHdpZHRoOiA2NHB4O1xuICAgIGhlaWdodDogNjVweDtcbiAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwIC04NXB4OyB9XG5cbiNwYWdlLXByb2R1Y3RzLWVudGVycHJpc2UtZW5naW5lIC5pbnRlZ3JhdGlvbnNfX2FjdGl2ZS1kaXJlY3Rvcnkge1xuICB0b3A6IDUwMHB4O1xuICBsZWZ0OiAxNzJweDsgfVxuICAjcGFnZS1wcm9kdWN0cy1lbnRlcnByaXNlLWVuZ2luZSAuaW50ZWdyYXRpb25zX19hY3RpdmUtZGlyZWN0b3J5IGkge1xuICAgIHdpZHRoOiAxNjBweDtcbiAgICBoZWlnaHQ6IDE2MHB4OyB9XG4gICNwYWdlLXByb2R1Y3RzLWVudGVycHJpc2UtZW5naW5lIC5pbnRlZ3JhdGlvbnNfX2FjdGl2ZS1kaXJlY3RvcnkgaTo6YmVmb3JlIHtcbiAgICB3aWR0aDogODNweDtcbiAgICBoZWlnaHQ6IDg0cHg7XG4gICAgYmFja2dyb3VuZC1wb3NpdGlvbjogMCAtMjEwcHg7IH1cblxuQG1lZGlhIChtYXgtd2lkdGg6IDEyMjBweCkge1xuICAjcGFnZS1wcm9kdWN0cy1lbnRlcnByaXNlLWVuZ2luZSAuaW50ZWdyYXRpb25zX19pZGVudGl0eS12YXVsdCB7XG4gICAgbGVmdDogMjEycHg7IH1cbiAgI3BhZ2UtcHJvZHVjdHMtZW50ZXJwcmlzZS1lbmdpbmUgLmludGVncmF0aW9uc19fY291Y2hiYXNlIHtcbiAgICBsZWZ0OiAyODRweDsgfVxuICAjcGFnZS1wcm9kdWN0cy1lbnRlcnByaXNlLWVuZ2luZSAuaW50ZWdyYXRpb25zX19hY3RpdmUtZGlyZWN0b3J5IHtcbiAgICBsZWZ0OiAxMTlweDsgfSB9XG5cbkBtZWRpYSAobWF4LXdpZHRoOiA5OTJweCkge1xuICAjcGFnZS1wcm9kdWN0cy1lbnRlcnByaXNlLWVuZ2luZSAuaW50ZWdyYXRpb25zIHtcbiAgICBmbGV4OiBub25lO1xuICAgIGhlaWdodDogMzYycHg7XG4gICAgd2lkdGg6IDU4NnB4O1xuICAgIG1hcmdpbi1ib3R0b206IDQwcHg7IH1cbiAgI3BhZ2UtcHJvZHVjdHMtZW50ZXJwcmlzZS1lbmdpbmUgLmludGVncmF0aW9uc19faWRlbnRpdHktdmF1bHQge1xuICAgIGxlZnQ6IDIzMnB4OyB9XG4gICNwYWdlLXByb2R1Y3RzLWVudGVycHJpc2UtZW5naW5lIC5pbnRlZ3JhdGlvbnNfX2F3cy1hbXBsaWZ5IHtcbiAgICB0b3A6IDgycHg7IH1cbiAgI3BhZ2UtcHJvZHVjdHMtZW50ZXJwcmlzZS1lbmdpbmUgLmludGVncmF0aW9uc19fY291Y2hiYXNlIHtcbiAgICBsZWZ0OiAyNTFweDtcbiAgICB0b3A6IDE4OHB4OyB9XG4gICNwYWdlLXByb2R1Y3RzLWVudGVycHJpc2UtZW5naW5lIC5pbnRlZ3JhdGlvbnNfX2FjdGl2ZS1kaXJlY3Rvcnkge1xuICAgIGxlZnQ6IDQxNnB4O1xuICAgIHRvcDogNzBweDsgfSB9XG5cbkBtZWRpYSAobWF4LXdpZHRoOiA3NjhweCkge1xuICAjcGFnZS1wcm9kdWN0cy1lbnRlcnByaXNlLWVuZ2luZSAuaW50ZWdyYXRpb25zIHtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgdG9wOiAtNzBweDtcbiAgICBsZWZ0OiA1MCU7XG4gICAgdHJhbnNmb3JtLW9yaWdpbjogY2VudGVyIGNlbnRlcjtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTUwJSkgc2NhbGUoMC44KTsgfVxuICAjcGFnZS1wcm9kdWN0cy1lbnRlcnByaXNlLWVuZ2luZSAuaW50ZWdyYXRpb25zICsgZGl2IHtcbiAgICBtYXJnaW4tdG9wOiAzMDBweDsgfSB9XG5cbkBtZWRpYSAobWF4LXdpZHRoOiA3NjhweCkge1xuICAjcGFnZS1wcm9kdWN0cy1lbnRlcnByaXNlLWVuZ2luZSAuaW50ZWdyYXRpb25zIHtcbiAgICB0b3A6IC05MHB4O1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgtNTAlKSBzY2FsZSgwLjYpOyB9XG4gICNwYWdlLXByb2R1Y3RzLWVudGVycHJpc2UtZW5naW5lIC5pbnRlZ3JhdGlvbnMgKyBkaXYge1xuICAgIG1hcmdpbi10b3A6IDI2MHB4OyB9IH1cblxuI3BhZ2UtcHJvZHVjdHMtZW50ZXJwcmlzZS1lbmdpbmUgLmNhbGwtdG8tYWN0aW9uIHtcbiAgcGFkZGluZy10b3A6IDE0MHB4OyB9XG4gICNwYWdlLXByb2R1Y3RzLWVudGVycHJpc2UtZW5naW5lIC5jYWxsLXRvLWFjdGlvbiAuY29udGFpbmVyIHtcbiAgICBtYXgtd2lkdGg6IDc0OHB4OyB9XG4gICNwYWdlLXByb2R1Y3RzLWVudGVycHJpc2UtZW5naW5lIC5jYWxsLXRvLWFjdGlvbiBoZ3JvdXAge1xuICAgIG1hcmdpbjogMDtcbiAgICBwYWRkaW5nOiAwOyB9XG4gICAgI3BhZ2UtcHJvZHVjdHMtZW50ZXJwcmlzZS1lbmdpbmUgLmNhbGwtdG8tYWN0aW9uIGhncm91cCBwIHtcbiAgICAgIGZvbnQtd2VpZ2h0OiA0MDA7XG4gICAgICBmb250LXNpemU6IDI4cHg7XG4gICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgICBjb2xvcjogIzVCNzA4QjsgfVxuICAgICNwYWdlLXByb2R1Y3RzLWVudGVycHJpc2UtZW5naW5lIC5jYWxsLXRvLWFjdGlvbiBoZ3JvdXAgc3Ryb25nIHtcbiAgICAgIGNvbG9yOiAjMkYzQTQ4O1xuICAgICAgZm9udC13ZWlnaHQ6IDYwMDsgfVxuICAgICNwYWdlLXByb2R1Y3RzLWVudGVycHJpc2UtZW5naW5lIC5jYWxsLXRvLWFjdGlvbiBoZ3JvdXAgaDQge1xuICAgICAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgICAgIGZvbnQtc2l6ZTogMjRweDtcbiAgICAgIGNvbG9yOiAjRkY5OTgyO1xuICAgICAgbWFyZ2luOiA2MHB4IDA7IH1cbiAgQG1lZGlhIChtYXgtd2lkdGg6IDc2OHB4KSB7XG4gICAgI3BhZ2UtcHJvZHVjdHMtZW50ZXJwcmlzZS1lbmdpbmUgLmNhbGwtdG8tYWN0aW9uIGhncm91cCBwIHtcbiAgICAgIGZvbnQtc2l6ZTogMjRweDsgfSB9XG4gIEBtZWRpYSAobWF4LXdpZHRoOiA0ODBweCkge1xuICAgICNwYWdlLXByb2R1Y3RzLWVudGVycHJpc2UtZW5naW5lIC5jYWxsLXRvLWFjdGlvbiB7XG4gICAgICBwYWRkaW5nLXRvcDogODJweDsgfSB9XG5cbiNwYWdlLXByb2R1Y3RzLWVudGVycHJpc2UtZW5naW5lIC5mZWF0dXJlLWljb24ge1xuICB3aWR0aDogNDhweDtcbiAgaGVpZ2h0OiA0OHB4O1xuICBkaXNwbGF5OiBibG9jaztcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFwiL2ltZy9wcm9kdWN0cy9lbnRlcnByaXNlLWVuZ2luZS9lbnRlcnByaXNlLWVuZ2luZS1pY29uLXNwcml0ZS5wbmdcIik7XG4gIGJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7XG4gIGJhY2tncm91bmQtc2l6ZTogNDhweCA0ODBweDsgfVxuICAjcGFnZS1wcm9kdWN0cy1lbnRlcnByaXNlLWVuZ2luZSAuZmVhdHVyZS1pY29uLS1nby10by1tYXJrZXQge1xuICAgIGJhY2tncm91bmQtcG9zaXRpb246IDAgMDsgfVxuICAjcGFnZS1wcm9kdWN0cy1lbnRlcnByaXNlLWVuZ2luZSAuZmVhdHVyZS1pY29uLS1jcm9zcy1wbGF0Zm9ybSB7XG4gICAgYmFja2dyb3VuZC1wb3NpdGlvbjogMCAtNDhweDsgfVxuICAjcGFnZS1wcm9kdWN0cy1lbnRlcnByaXNlLWVuZ2luZSAuZmVhdHVyZS1pY29uLS1mdXR1cmUtcHJvb2ZlZCB7XG4gICAgYmFja2dyb3VuZC1wb3NpdGlvbjogMCAtOTZweDsgfVxuICAjcGFnZS1wcm9kdWN0cy1lbnRlcnByaXNlLWVuZ2luZSAuZmVhdHVyZS1pY29uLS1uYXRpdmUtcG93ZXIge1xuICAgIGJhY2tncm91bmQtcG9zaXRpb246IDAgLTE0NHB4OyB9XG4gICNwYWdlLXByb2R1Y3RzLWVudGVycHJpc2UtZW5naW5lIC5mZWF0dXJlLWljb24tLWludGVncmF0aW9ucyB7XG4gICAgYmFja2dyb3VuZC1wb3NpdGlvbjogMCAtMTkycHg7IH1cbiAgI3BhZ2UtcHJvZHVjdHMtZW50ZXJwcmlzZS1lbmdpbmUgLmZlYXR1cmUtaWNvbi0tYWR2aXNvcnkge1xuICAgIGJhY2tncm91bmQtcG9zaXRpb246IDAgLTI0MHB4OyB9XG4gICNwYWdlLXByb2R1Y3RzLWVudGVycHJpc2UtZW5naW5lIC5mZWF0dXJlLWljb24tLXRyYWluaW5nIHtcbiAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwIC0yODhweDsgfVxuICAjcGFnZS1wcm9kdWN0cy1lbnRlcnByaXNlLWVuZ2luZSAuZmVhdHVyZS1pY29uLS1zdGFiaWxpdHkge1xuICAgIGJhY2tncm91bmQtcG9zaXRpb246IDAgLTMzNnB4OyB9XG4gICNwYWdlLXByb2R1Y3RzLWVudGVycHJpc2UtZW5naW5lIC5mZWF0dXJlLWljb24tLWNvbXBsZXRlLW5hdGl2ZSB7XG4gICAgYmFja2dyb3VuZC1wb3NpdGlvbjogMCAtMzg0cHg7IH1cbiAgI3BhZ2UtcHJvZHVjdHMtZW50ZXJwcmlzZS1lbmdpbmUgLmZlYXR1cmUtaWNvbi0taGVscCB7XG4gICAgYmFja2dyb3VuZC1wb3NpdGlvbjogMCAtNDMycHg7IH1cblxuI3BhZ2UtcHJvZHVjdHMtZW50ZXJwcmlzZS1lbmdpbmUgLmxvZ29zIHtcbiAgZGlzcGxheTogZmxleDtcbiAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBtYXJnaW4tdG9wOiAxNjBweDtcbiAgbWFyZ2luLWxlZnQ6IC0yNHB4O1xuICBtYXJnaW4tcmlnaHQ6IC0yNHB4OyB9XG4gICNwYWdlLXByb2R1Y3RzLWVudGVycHJpc2UtZW5naW5lIC5sb2dvcyAubG9nbyB7XG4gICAgZmxleDogMCAwIGF1dG87XG4gICAgbWFyZ2luOiAwIDI0cHggMzBweDtcbiAgICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXCIvaW1nL3Byb2R1Y3RzL2VudGVycHJpc2UtZW5naW5lL2VudGVycHJpc2UtZW5naW5lLWxvZ28tc3ByaXRlLnBuZ1wiKTtcbiAgICBiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0O1xuICAgIGJhY2tncm91bmQtc2l6ZTogMTc2cHggMTY4cHg7IH1cbiAgICAjcGFnZS1wcm9kdWN0cy1lbnRlcnByaXNlLWVuZ2luZSAubG9nb3MgLmxvZ28tLWFhYSB7XG4gICAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwIDA7XG4gICAgICB3aWR0aDogNzJweDtcbiAgICAgIGhlaWdodDogNDJweDsgfVxuICAgICNwYWdlLXByb2R1Y3RzLWVudGVycHJpc2UtZW5naW5lIC5sb2dvcyAubG9nby0tYW10cmFrIHtcbiAgICAgIGJhY2tncm91bmQtcG9zaXRpb246IDAgLTQ0cHg7XG4gICAgICB3aWR0aDogMTc2cHg7XG4gICAgICBoZWlnaHQ6IDIwcHg7IH1cbiAgICAjcGFnZS1wcm9kdWN0cy1lbnRlcnByaXNlLWVuZ2luZSAubG9nb3MgLmxvZ28tLWdlIHtcbiAgICAgIGJhY2tncm91bmQtcG9zaXRpb246IDAgLTY2cHg7XG4gICAgICB3aWR0aDogNDhweDtcbiAgICAgIGhlaWdodDogNDhweDsgfVxuICAgICNwYWdlLXByb2R1Y3RzLWVudGVycHJpc2UtZW5naW5lIC5sb2dvcyAubG9nby0td29ybGRwYXkge1xuICAgICAgYmFja2dyb3VuZC1wb3NpdGlvbjogMCAtMTE2cHg7XG4gICAgICB3aWR0aDogMTMycHg7XG4gICAgICBoZWlnaHQ6IDMwcHg7IH1cbiAgICAjcGFnZS1wcm9kdWN0cy1lbnRlcnByaXNlLWVuZ2luZSAubG9nb3MgLmxvZ28tLW1hcGZyZSB7XG4gICAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwIC0xNDhweDtcbiAgICAgIHdpZHRoOiAxMzZweDtcbiAgICAgIGhlaWdodDogMjBweDsgfVxuICBAbWVkaWEgKG1heC13aWR0aDogNzY4cHgpIHtcbiAgICAjcGFnZS1wcm9kdWN0cy1lbnRlcnByaXNlLWVuZ2luZSAubG9nb3Mge1xuICAgICAgbWFyZ2luLXRvcDogODBweDtcbiAgICAgIG1heC13aWR0aDogNTcwcHg7XG4gICAgICBtYXJnaW4tbGVmdDogYXV0bztcbiAgICAgIG1hcmdpbi1yaWdodDogYXV0bztcbiAgICAgIGZsZXgtd3JhcDogd3JhcDtcbiAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOyB9IH1cbiAgQG1lZGlhIChtYXgtd2lkdGg6IDQ4MHB4KSB7XG4gICAgI3BhZ2UtcHJvZHVjdHMtZW50ZXJwcmlzZS1lbmdpbmUgLmxvZ29zIHtcbiAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47IH0gfVxuIl19 */\n"
  },
  {
    "path": "content/css/pages/products/index.css",
    "content": "#page-products {\n  background-color: #fff; }\n  #page-products .pre-header {\n    margin-bottom: 0px; }\n  #page-products .cta,\n  #page-products .pro-nav,\n  #page-products .pro-video,\n  #page-products .sub-header,\n  #page-products main {\n    font-family: \"Eina\", \"Helvetica Neue\", Helvetica, sans-serif; }\n  #page-products .sub-header > .container {\n    -ms-flex-align: center;\n        align-items: center; }\n    #page-products .sub-header > .container:before {\n      border-top-color: rgba(255, 255, 255, 0.1); }\n  #page-products > .cta {\n    position: relative;\n    background-image: linear-gradient(90deg, #6521fc 0%, #389fff 100%);\n    margin-top: -140px;\n    padding-top: 140px; }\n    #page-products > .cta .cta__background {\n      content: '';\n      background-position: center center;\n      background-size: cover;\n      display: block;\n      width: 100%;\n      height: 100%;\n      position: absolute;\n      z-index: 0;\n      top: -4px;\n      left: 0;\n      background-image: linear-gradient(90deg, #6030fc 0%, #5fa2fe 100%);\n      background-size: cover;\n      opacity: 0.5;\n      overflow: hidden; }\n      #page-products > .cta .cta__background > div {\n        width: 100%;\n        height: 100%;\n        position: absolute;\n        background-image: linear-gradient(90deg, #fff 0%, rgba(255, 255, 255, 0) 75%);\n        -webkit-transform: translate(-20px, 0) rotate(-3deg) skew(16deg, 0deg) scale(1, 1.5);\n                transform: translate(-20px, 0) rotate(-3deg) skew(16deg, 0deg) scale(1, 1.5);\n        -webkit-transform-origin: top;\n                transform-origin: top; }\n        #page-products > .cta .cta__background > div:nth-child(1) {\n          opacity: 0.05;\n          top: 75%;\n          left: 0%; }\n        #page-products > .cta .cta__background > div:nth-child(2) {\n          opacity: 0.10;\n          top: 50%;\n          left: 15.3846153846%; }\n        #page-products > .cta .cta__background > div:nth-child(3) {\n          opacity: 0.09;\n          top: 25%;\n          left: 30.7692307692%; }\n        #page-products > .cta .cta__background > div:nth-child(4) {\n          opacity: 0.15;\n          top: 0%;\n          left: 46.1538461538%; }\n        #page-products > .cta .cta__background > div:nth-child(5) {\n          opacity: 0.16;\n          top: -25%;\n          left: 61.5384615385%; }\n        #page-products > .cta .cta__background > div:nth-child(6) {\n          opacity: 0.08;\n          top: -50%;\n          left: 76.9230769231%; }\n        @media (max-width: 768px) {\n          #page-products > .cta .cta__background > div:nth-child(1) {\n            opacity: 0.05;\n            top: 60%;\n            left: 0%; }\n          #page-products > .cta .cta__background > div:nth-child(2) {\n            opacity: 0.10;\n            top: 45%;\n            left: 25%; }\n          #page-products > .cta .cta__background > div:nth-child(3) {\n            opacity: 0.09;\n            top: 30%;\n            left: 50%; }\n          #page-products > .cta .cta__background > div:nth-child(4) {\n            opacity: 0.15;\n            top: 15%;\n            left: 75%; }\n          #page-products > .cta .cta__background > div:nth-child(5) {\n            opacity: 0.16;\n            top: 0%;\n            left: 100%; }\n          #page-products > .cta .cta__background > div:nth-child(6) {\n            opacity: 0.08;\n            top: -15%;\n            left: 125%; } }\n    #page-products > .cta hgroup {\n      text-align: center;\n      position: relative;\n      max-width: 830px;\n      padding-bottom: 354px;\n      padding-top: 54px; }\n      #page-products > .cta hgroup h3 {\n        font-family: \"Roboto Mono\", Menlo, Monaco, Consolas, \"Courier New\", monospace;\n        text-transform: uppercase;\n        letter-spacing: 0.18em;\n        font-size: 12px;\n        line-height: 18px;\n        font-weight: 600;\n        color: #e3e6ff; }\n      #page-products > .cta hgroup h1 {\n        margin-top: 36px;\n        font-size: 56px;\n        line-height: 60px;\n        font-weight: 700;\n        letter-spacing: -.038em;\n        margin-bottom: 264x; }\n      #page-products > .cta hgroup p {\n        letter-spacing: -.03em;\n        max-width: 724px;\n        line-height: 1.8em;\n        margin: 0 auto;\n        font-size: 22px;\n        font-weight: 400;\n        color: #fff;\n        font-family: \"Graphik\", \"Avenir Next\", \"Helvetica Neue\", Helvetica, sans-serif; }\n      #page-products > .cta hgroup .cta-buttons {\n        margin-top: 30px;\n        padding-left: 24px;\n        padding-right: 24px;\n        color: white;\n        letter-spacing: -.02em; }\n        #page-products > .cta hgroup .cta-buttons > .btn {\n          -ms-flex-align: center;\n              align-items: center;\n          background-color: #7898ff;\n          border-radius: 2em;\n          display: -ms-inline-flexbox;\n          display: inline-flex;\n          font-size: 15px;\n          font-weight: 700;\n          text-transform: uppercase;\n          letter-spacing: 0.10em;\n          padding: 14px 26px; }\n          #page-products > .cta hgroup .cta-buttons > .btn:not(:hover) {\n            box-shadow: none; }\n        #page-products > .cta hgroup .cta-buttons > .btn--primary {\n          background-color: #fff;\n          color: #4a68ff; }\n          #page-products > .cta hgroup .cta-buttons > .btn--primary:after {\n            transition: -webkit-transform 0.3s;\n            transition: transform 0.3s;\n            transition: transform 0.3s, -webkit-transform 0.3s;\n            content: '\\f287';\n            font-family: 'Ionicons';\n            font-size: 15px;\n            margin-left: 8px; }\n          #page-products > .cta hgroup .cta-buttons > .btn--primary:hover:after {\n            -webkit-transform: translateX(2px);\n                    transform: translateX(2px); }\n        #page-products > .cta hgroup .cta-buttons .sales {\n          color: rgba(255, 255, 255, 0.5);\n          margin-top: 6px;\n          display: inline-block;\n          text-decoration: underline;\n          transition: .2s color; }\n          #page-products > .cta hgroup .cta-buttons .sales:hover {\n            color: rgba(255, 255, 255, 0.8); }\n      @media (max-width: 768px) {\n        #page-products > .cta hgroup {\n          padding-bottom: 140px; } }\n      @media (max-width: 480px) {\n        #page-products > .cta hgroup {\n          padding-top: 14px; }\n          #page-products > .cta hgroup h1 {\n            font-size: 40px;\n            line-height: 46px; }\n          #page-products > .cta hgroup h3 {\n            max-width: 246px;\n            margin-left: auto;\n            margin-right: auto; }\n          #page-products > .cta hgroup p {\n            font-size: 18px;\n            line-height: 1.6em; }\n          #page-products > .cta hgroup .btn {\n            width: 100%;\n            margin-right: 0;\n            -ms-flex-pack: center;\n                justify-content: center;\n            margin-bottom: 8px; } }\n  #page-products .cta-overlay {\n    margin-top: -239px;\n    position: relative;\n    z-index: 1;\n    overflow: hidden;\n    display: -ms-flexbox;\n    display: flex;\n    -ms-flex-direction: column;\n        flex-direction: column;\n    -ms-flex-align: center;\n        align-items: center;\n    width: 100%;\n    padding: 0 20px; }\n    #page-products .cta-overlay .app-screenshot {\n      overflow: hidden;\n      width: 100%;\n      max-width: 960px;\n      background-color: #fff;\n      background-repeat: no-repeat;\n      background-size: cover;\n      border-radius: 16px;\n      box-shadow: 0 8px 16px rgba(0, 14, 41, 0.08), 0 30px 60px rgba(0, 11, 34, 0.15); }\n      #page-products .cta-overlay .app-screenshot img {\n        width: 100%; }\n    @media (max-width: 768px) {\n      #page-products .cta-overlay {\n        margin-top: -76px; } }\n  #page-products .customer-logos {\n    padding: 0;\n    width: 100%;\n    max-width: 1024px;\n    margin-top: 30px;\n    display: -ms-flexbox;\n    display: flex;\n    -ms-flex-wrap: wrap;\n        flex-wrap: wrap;\n    -ms-flex-align: center;\n        align-items: center;\n    -ms-flex-pack: justify;\n        justify-content: space-between; }\n    #page-products .customer-logos [class^=\"customer-logo\"] {\n      background-image: url(\"/img/pro/pro-customer-sprite.png\");\n      background-repeat: no-repeat;\n      background-size: 121px 256px;\n      margin: 34px 42px; }\n    @media (max-width: 991px) {\n      #page-products .customer-logos {\n        -ms-flex-pack: center;\n            justify-content: center; }\n        #page-products .customer-logos [class^=\"customer-logo\"] {\n          margin: 22px 34px; } }\n    @media (max-width: 768px) {\n      #page-products .customer-logos {\n        padding: 8px; }\n        #page-products .customer-logos [class^=\"customer-logo\"] {\n          margin: 16px 18px; } }\n    #page-products .customer-logos .customer-logo--lendingclub {\n      width: 121px;\n      height: 18px;\n      background-position: 0 0; }\n    #page-products .customer-logos .customer-logo--mcdonalds {\n      background-position: 0 -19px;\n      width: 24px;\n      height: 20px; }\n    #page-products .customer-logos .customer-logo--study {\n      background-position: 0 -40px;\n      width: 118px;\n      height: 18px; }\n    #page-products .customer-logos .customer-logo--cat {\n      background-position: 0 -59px;\n      width: 34px;\n      height: 20px; }\n    #page-products .customer-logos .customer-logo--ge {\n      background-position: 0 -80px;\n      width: 24px;\n      height: 24px; }\n    #page-products .customer-logos .customer-logo--comcast {\n      background-position: 0 -105px;\n      width: 73px;\n      height: 20px; }\n    #page-products .customer-logos .customer-logo--amtrak {\n      background-position: 0 -126px;\n      width: 47px;\n      height: 20px; }\n    #page-products .customer-logos .customer-logo--airbus {\n      background-position: 0 -147px;\n      width: 107px;\n      height: 20px; }\n    #page-products .customer-logos .customer-logo--aaa {\n      background-position: 0 -168px;\n      width: 45px;\n      height: 27px; }\n    #page-products .customer-logos .customer-logo--deloitte {\n      background-position: 0 -195px;\n      width: 87px;\n      height: 16px; }\n    #page-products .customer-logos .customer-logo--usaa {\n      background-position: 0 -212px;\n      width: 21px;\n      height: 24px; }\n    #page-products .customer-logos .customer-logo--ing {\n      background-position: 0 -237px;\n      width: 73px;\n      height: 19px; }\n  #page-products .pro-video {\n    -ms-flex-align: center;\n        align-items: center;\n    display: -ms-flexbox;\n    display: flex;\n    -ms-flex-pack: center;\n        justify-content: center;\n    position: relative;\n    z-index: 1; }\n    #page-products .pro-video:before {\n      content: \"\";\n      display: block;\n      height: 50%;\n      left: 0;\n      position: absolute;\n      top: 0;\n      width: 100%;\n      z-index: 1; }\n    #page-products .pro-video .video-player {\n      max-width: 900px;\n      width: 100%;\n      position: relative;\n      z-index: 2; }\n      #page-products .pro-video .video-player:hover {\n        cursor: pointer; }\n      #page-products .pro-video .video-player:not(.is-playing):hover .video-player-frame {\n        -webkit-transform: scale(0.99);\n                transform: scale(0.99); }\n      #page-products .pro-video .video-player:not(.is-playing):hover .video-player-button {\n        -webkit-transform: translate(-50%, -50%) scale(1.05);\n                transform: translate(-50%, -50%) scale(1.05); }\n      #page-products .pro-video .video-player.is-ready .video-player-button {\n        display: block; }\n      #page-products .pro-video .video-player.is-playing .video-player-button {\n        display: none; }\n    #page-products .pro-video .video-player-button {\n      display: none;\n      left: 50%;\n      position: absolute;\n      top: 50%;\n      -webkit-transform: translate(-50%, -50%) scale(1);\n              transform: translate(-50%, -50%) scale(1);\n      transition: -webkit-transform 400ms cubic-bezier(0.175, 0.885, 0.32, 1.275);\n      transition: transform 400ms cubic-bezier(0.175, 0.885, 0.32, 1.275);\n      transition: transform 400ms cubic-bezier(0.175, 0.885, 0.32, 1.275), -webkit-transform 400ms cubic-bezier(0.175, 0.885, 0.32, 1.275);\n      width: 80px;\n      z-index: 1; }\n    #page-products .pro-video .video-player-frame {\n      background-image: url(\"/img/pro/pro-dash-video-screenshot.png\");\n      background-position: center center;\n      background-repeat: no-repeat;\n      background-size: contain;\n      border-radius: 8px;\n      height: 0;\n      overflow: hidden;\n      padding-bottom: 64.67%;\n      position: relative;\n      -webkit-transform: scale(1);\n              transform: scale(1);\n      transition: -webkit-transform 400ms cubic-bezier(0.19, 1, 0.22, 1);\n      transition: transform 400ms cubic-bezier(0.19, 1, 0.22, 1);\n      transition: transform 400ms cubic-bezier(0.19, 1, 0.22, 1), -webkit-transform 400ms cubic-bezier(0.19, 1, 0.22, 1); }\n      #page-products .pro-video .video-player-frame > iframe {\n        height: 100%;\n        left: 0;\n        position: absolute;\n        top: 0;\n        width: 100%; }\n  #page-products .pro-benefits {\n    padding-left: 60px; }\n    #page-products .pro-benefits ul {\n      list-style-type: none;\n      margin: 0;\n      padding: 0; }\n    #page-products .pro-benefits li {\n      position: relative;\n      padding-left: 40px; }\n      #page-products .pro-benefits li + li {\n        margin-top: 22px; }\n      #page-products .pro-benefits li::before {\n        display: block;\n        content: '';\n        width: 24px;\n        height: 24px;\n        background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADEAAAAwCAYAAAC4wJK5AAAD/ElEQVRogc3a24tVZRzG8c9ac9jOOOjIMGoMSXQxRBc16UWS4YVikBKKUGTEUF35BwjhX5BCF0EXRhcVU0QUCBYR5AESJIkwu4kYL4JA85A56dC4Z2xWF+8a3TOzD2vtw5oeWOzN3uv9/Z4v73G974qSJHHwY+1QH7ZhK0bTaxAD6f/TmMJkep3HOcy0mri7xfJ92Itx7EApQ5mnK76XcQYTOKFJoGYhBnEQhzDUZAwC9PPpdRNv4z2hxjIrzpk0wutCc3hLawBLNZTGnExzRFkL5oHYiJP4AMN53OXUcJrjZJqzobJCbMdF7GzOV1Pamebc3ujG+Oc/Ggbbj2+xoWVb+bUhzb2/3k2NamI/vpBt1OmUSqmHmiD1ILbj0wb3FKVY8FK1adUyuBGfW9kaWKqS4GlZZ68GEeETK9MHGmmD4G3R8FsN4jXFjkJ5tVPweF9LIQZxtCg3Leio4BXLIQ7q7ETWLg0LXrEYok9YC62IhtewOt8wckjwvAhir/auhTJrZB37trB3Sy6QIcHzIojxNnvLpJF17B6ju4u1/ex5ilL2tfU4DyD6hOeBQlUJsKD+XnqzQ+xAXwxx5FkFT2zVAGZm+fICd+5mDlPCtlATkWfa7LGu6gH8NZ073NYYIh5rm8MG2jjYVgAYjREl4aG+41q/hj3tBWABImJd6xbra/0aXti8uNO2AQAGQ00kVuct2V8KE1QWdRAABkJNRNkfygkT0r4t4RppUIcdBkA6T0RR9v2evt4ws67tD21791htkCIAMB0jiSN3spboiuiq6Ji1QAoCgKkYSXfst6wlpsuc+DF8LmgpSIEAMBkj6epyKU+p2zO1QZ7YVCgACxCrenyft2QtkG2jhQLA+RgeXe9MFJnLW7oaSKXuznUcoIxzMWx+xFRvtx+aiVILZPYeX//UUQDCjvpMDMdO+bfUbaLZSPdB0tVneY6vLnD9dluM1tMERBevJI6d4vERa3+94vf5RMZ5eLlKPWwa4vIt/qnRxNqom3jYQk3AL5f9XerxbitRy3NculoIAOEsY4Ylux0Dq7wTR24VYqE13RAOY7AE4sZtf3Z3OVy4pfx6U8Vp0rIdwNl73o8j3xVqKZ9O46PKH6ptYybziZdxvQhHOXUNryKp/LHWrvhVvChMJv8XlfGS4G2R6p09nMUrmO+QqTyaF7ycrfZnowOU41a+Rsqph+O1bshyCnQczwntsWhdS3PXBCD7UdZZjAkjQ1E6neas2oQqFT/5UOagV7ELbwiTTad0I82xS5VOXE15DxUTfCjsUx0W1i/t0s005miaI6l/+wM1ezI6hSPCAuwAvtFc5y+nZQ+ksY7I+V4Hrb9lM4PP0mvFXhX6D3mVKTX2fENsAAAAAElFTkSuQmCC\");\n        background-repeat: no-repeat;\n        background-size: 100%;\n        position: absolute;\n        top: 0;\n        left: 0; }\n      #page-products .pro-benefits li h4 {\n        margin: 0;\n        font-weight: 600;\n        font-size: 16px;\n        line-height: 20px; }\n      #page-products .pro-benefits li p {\n        color: #545c6a;\n        font-size: 15px;\n        line-height: 24px; }\n  #page-products .hero {\n    background: no-repeat center center;\n    background-size: cover;\n    overflow: hidden;\n    padding-top: 0;\n    padding-bottom: 0; }\n    #page-products .hero .content {\n      width: 39%;\n      text-align: left;\n      padding-top: 200px;\n      padding-bottom: 220px;\n      color: #070f1a;\n      min-height: 724px;\n      position: relative; }\n      #page-products .hero .content.dark {\n        color: rgba(255, 255, 255, 0.8); }\n        #page-products .hero .content.dark h2,\n        #page-products .hero .content.dark .hero__cta {\n          color: #151d2b; }\n        #page-products .hero .content.dark p {\n          color: #596a89; }\n      #page-products .hero .content h2 {\n        font-size: 36px;\n        letter-spacing: -0.03em;\n        font-weight: 600;\n        margin-bottom: 12px; }\n      #page-products .hero .content p {\n        font-size: 20px;\n        line-height: 32px;\n        font-family: \"Graphik\", \"Avenir Next\", \"Helvetica Neue\", Helvetica, sans-serif;\n        font-weight: 400; }\n      #page-products .hero .content h4 {\n        font-family: \"Roboto Mono\", Menlo, Monaco, Consolas, \"Courier New\", monospace;\n        padding-top: 100px;\n        position: relative;\n        color: #808fa7; }\n        #page-products .hero .content h4::before {\n          background: url(\"/img/pro/product-header-icons.png\") 0 0 no-repeat;\n          background-size: 64px;\n          width: 64px;\n          height: 64px;\n          content: '';\n          position: absolute;\n          top: 0; }\n    #page-products .hero__cta-bar {\n      display: -ms-flexbox;\n      display: flex;\n      -ms-flex-align: center;\n          align-items: center; }\n      #page-products .hero__cta-bar a + a {\n        margin-left: 20px; }\n    #page-products .hero__cta-bar-secondary {\n      margin-left: 30px; }\n    @media (max-width: 767px) {\n      #page-products .hero__cta-bar {\n        -ms-flex-direction: column;\n            flex-direction: column; }\n      #page-products .hero__cta-bar-secondary {\n        margin-left: 0;\n        margin-top: 24px; } }\n    #page-products .hero__cta {\n      border-bottom-style: solid;\n      border-bottom-width: 2px;\n      color: inherit;\n      font-size: 18px;\n      font-weight: 700;\n      padding-bottom: 4px;\n      transition: border-bottom-color 100ms ease-in-out; }\n      #page-products .hero__cta:after {\n        content: '\\f287';\n        font-family: 'Ionicons';\n        font-size: 16px;\n        margin-left: 5px; }\n      #page-products .hero__cta:hover {\n        border-bottom-color: transparent; }\n    #page-products .hero__icon-link {\n      transition: opacity 0.3s;\n      display: inline-block;\n      opacity: 0.7; }\n      #page-products .hero__icon-link i {\n        font-size: 30px;\n        color: #fff; }\n      #page-products .hero__icon-link:hover {\n        opacity: 1; }\n    #page-products .hero .container {\n      position: relative; }\n      #page-products .hero .container::before {\n        background-repeat: no-repeat;\n        background-position: right 0;\n        background-size: contain;\n        top: 0;\n        right: 0;\n        left: 0;\n        bottom: 0;\n        content: '';\n        display: block;\n        position: absolute;\n        opacity: 0;\n        transition: .2s opacity; }\n    #page-products .hero.active .container::before {\n      opacity: 1; }\n    #page-products .hero h4 {\n      font-size: 11px;\n      font-weight: 700;\n      letter-spacing: 0.2em;\n      color: #272a2f;\n      text-transform: uppercase;\n      margin-bottom: 30px; }\n    #page-products .hero h3 {\n      font-size: 36px;\n      font-weight: 700;\n      letter-spacing: -.02em;\n      margin-bottom: 30px; }\n    #page-products .hero h2 {\n      color: #272a2f;\n      font-size: 36px;\n      margin-bottom: 23px;\n      margin-top: 14px;\n      font-weight: 700;\n      letter-spacing: -.015em; }\n    #page-products .hero p {\n      font-size: 16px;\n      font-weight: 600;\n      letter-spacing: -.026em;\n      line-height: 1.8em;\n      margin-bottom: 30px;\n      color: #5e6777; }\n      #page-products .hero p strong {\n        color: #272a2f;\n        font-weight: 700; }\n      #page-products .hero p a:hover {\n        color: #4a8bfc; }\n    #page-products .hero .btn {\n      padding: 13px 15px;\n      font-size: 14px;\n      font-weight: 600; }\n      #page-products .hero .btn strong {\n        font-weight: 700; }\n      #page-products .hero .btn::after {\n        font-family: 'Ionicons';\n        content: '\\f287';\n        font-size: 15px;\n        line-height: 10px;\n        vertical-align: -1px;\n        margin-left: 8px;\n        font-weight: 600;\n        display: inline-block;\n        transition: .2s transform; }\n      #page-products .hero .btn:hover::after {\n        -webkit-transform: translate3d(2px, 0, 0);\n                transform: translate3d(2px, 0, 0); }\n    @media (max-width: 480px) {\n      #page-products .hero .content h2 {\n        font-size: 30px; }\n      #page-products .hero .content p {\n        font-size: 18px;\n        line-height: 1.6em; } }\n  #page-products #overview {\n    background-color: #fff;\n    color: #272a2f;\n    padding-bottom: 180px;\n    padding-top: 140px; }\n    #page-products #overview hgroup {\n      max-width: 740px;\n      margin: 0 auto 68px; }\n      #page-products #overview hgroup h3 {\n        font-weight: 600;\n        color: #070f1a;\n        margin-bottom: 14px; }\n      #page-products #overview hgroup p {\n        font-size: 22px;\n        line-height: 36px;\n        color: #43546f;\n        font-weight: 400; }\n    #page-products #overview .features {\n      padding: 0;\n      list-style: none;\n      display: -ms-flexbox;\n      display: flex;\n      -ms-flex-pack: justify;\n          justify-content: space-between;\n      max-width: 960px;\n      margin: 0 auto; }\n      #page-products #overview .features h4 {\n        font-size: 20px;\n        text-transform: none;\n        letter-spacing: -.02em;\n        margin-top: 5px;\n        margin-bottom: 13px;\n        font-weight: 600; }\n      #page-products #overview .features p {\n        font-family: \"Graphik\", \"Avenir Next\", \"Helvetica Neue\", Helvetica, sans-serif;\n        font-size: 16px;\n        line-height: 28px;\n        color: #687e99;\n        letter-spacing: -.015em;\n        font-weight: 400; }\n    #page-products #overview li {\n      padding-top: 68px;\n      -ms-flex: 0 1 320px;\n          flex: 0 1 320px;\n      position: relative; }\n      #page-products #overview li::before {\n        background: url(\"/img/pro/pro-feature-icons.png\") 0 0 no-repeat;\n        background-size: 48px;\n        height: 48px;\n        width: 48px;\n        content: '';\n        position: absolute;\n        top: 0; }\n      #page-products #overview li.faster::before {\n        background-position: 0 -48px; }\n      #page-products #overview li.happier::before {\n        background-position: 0 -96px; }\n      #page-products #overview li + li {\n        margin-left: 24px; }\n    @media (max-width: 520px) {\n      #page-products #overview .features {\n        display: block; }\n      #page-products #overview li {\n        text-align: center; }\n        #page-products #overview li::before {\n          left: calc( 50% - 24px); }\n        #page-products #overview li + li {\n          margin-left: 0; } }\n    @media (max-width: 768px) {\n      #page-products #overview {\n        padding-bottom: 68px;\n        padding-top: 102px; } }\n    @media (max-width: 480px) {\n      #page-products #overview {\n        padding-bottom: 48px;\n        padding-top: 72px; }\n        #page-products #overview hgroup {\n          margin-bottom: 42px; }\n          #page-products #overview hgroup h3 {\n            font-size: 30px; }\n          #page-products #overview hgroup p {\n            font-size: 18px;\n            line-height: 1.6em; } }\n  #page-products #updates {\n    background-image: linear-gradient(0deg, white 0%, #f6f8fb 100%);\n    background-size: 100%; }\n    #page-products #updates h4::before {\n      background-position: 0 0; }\n    #page-products #updates .content {\n      padding-top: 179px;\n      position: relative;\n      z-index: 10; }\n      @media (max-width: 1219px) {\n        #page-products #updates .content {\n          padding-top: 148px; } }\n    #page-products #updates .anim-updates {\n      position: absolute;\n      z-index: 4;\n      top: 0;\n      bottom: 0;\n      left: 50%;\n      -webkit-transform: translateX(-100px);\n              transform: translateX(-100px);\n      display: -ms-flexbox;\n      display: flex;\n      -ms-flex-align: center;\n          align-items: center; }\n    #page-products #updates .anim-updates__root {\n      width: 726px;\n      height: 437px;\n      position: relative; }\n    #page-products #updates .anim-updates__foreground,\n    #page-products #updates .anim-updates__background {\n      width: 100%;\n      height: 100%;\n      position: absolute;\n      top: 0;\n      left: 0; }\n    #page-products #updates .anim-updates__foreground {\n      z-index: 10;\n      -webkit-transform: translateZ(1000px);\n              transform: translateZ(1000px); }\n    #page-products #updates .anim-updates__background {\n      z-index: 1;\n      -webkit-transform: translateZ(100px);\n              transform: translateZ(100px); }\n    #page-products #updates .anim-updates__device {\n      width: 726px;\n      height: 437px;\n      background-image: url(\"/img/pro/updates-illustration-device.png\");\n      background-repeat: no-repeat;\n      background-size: 726px 437px;\n      position: absolute;\n      top: 0;\n      left: 0;\n      z-index: 5;\n      -webkit-transform: translateZ(500px);\n              transform: translateZ(500px); }\n    #page-products #updates .anim-updates__screen {\n      width: 308px;\n      height: 554px;\n      background: #5d37ff;\n      position: absolute;\n      top: 28px;\n      left: 406px;\n      -webkit-transform-origin: top left;\n              transform-origin: top left;\n      -webkit-transform: rotateX(60deg) rotateY(0.7deg) rotateZ(36.5deg) skew(2deg, -1.5deg);\n              transform: rotateX(60deg) rotateY(0.7deg) rotateZ(36.5deg) skew(2deg, -1.5deg); }\n    @media (max-width: 991px) {\n      #page-products #updates .anim-updates {\n        display: none; }\n      #page-products #updates .content {\n        min-height: 0;\n        padding-top: 64px;\n        padding-bottom: 64px;\n        width: 100%;\n        text-align: center; }\n        #page-products #updates .content h4::before {\n          left: calc(50% - 32px); } }\n  #page-products #build {\n    background-image: linear-gradient(0deg, white 0%, #f6f8fb 100%);\n    padding: 100px 0; }\n    #page-products #build h4::before {\n      background-position: 0 -64px; }\n    #page-products #build .anim-build {\n      position: absolute;\n      left: 0;\n      top: 0;\n      bottom: 0;\n      width: 39%;\n      display: -ms-flexbox;\n      display: flex;\n      -ms-flex-pack: center;\n          justify-content: center;\n      -ms-flex-align: center;\n          align-items: center; }\n    #page-products #build .anim-build__text {\n      fill: #5d37ff;\n      text-transform: uppercase;\n      font-size: 12px;\n      font-weight: 700;\n      letter-spacing: 0.05em; }\n    #page-products #build .content {\n      padding-top: 140px; }\n    @media (max-width: 991px) {\n      #page-products #build .container::before {\n        background-size: 40%;\n        top: 128px;\n        bottom: 128px; }\n      #page-products #build .content {\n        padding-top: 64px;\n        min-height: 0;\n        width: 40%; } }\n    @media (max-width: 767px) {\n      #page-products #build {\n        background-image: none;\n        padding: 0; }\n        #page-products #build .anim-build {\n          display: none; }\n        #page-products #build .content {\n          min-height: 0;\n          padding-top: 64px;\n          padding-bottom: 64px;\n          width: 100%;\n          text-align: center; }\n          #page-products #build .content h4::before {\n            left: calc(50% - 32px); } }\n  #page-products #reporting {\n    background: #081b17;\n    padding: 50px 0; }\n    #page-products #reporting h4,\n    #page-products #reporting .btn {\n      color: #607d79; }\n      #page-products #reporting h4::before,\n      #page-products #reporting .btn::before {\n        background-position: 0 -256px; }\n    #page-products #reporting .anim-reporting {\n      width: 1084px;\n      height: 100%;\n      display: -ms-flexbox;\n      display: flex;\n      overflow: hidden;\n      position: absolute;\n      top: 0;\n      left: 50%;\n      -webkit-transform: translateX(-240px);\n              transform: translateX(-240px);\n      bottom: 0;\n      z-index: 1; }\n    #page-products #reporting #anim-reporting__svg {\n      width: 100%;\n      height: 100%; }\n    #page-products #reporting .anim-reporting__bg {\n      fill: #0d2b25; }\n    #page-products #reporting .anim-reporting__scan {\n      -webkit-animation-name: cycle-fade;\n              animation-name: cycle-fade;\n      -webkit-animation-duration: 2s;\n              animation-duration: 2s;\n      -webkit-animation-direction: alternate;\n              animation-direction: alternate;\n      -webkit-animation-iteration-count: infinite;\n              animation-iteration-count: infinite;\n      -webkit-animation-timing-function: ease;\n              animation-timing-function: ease; }\n\n@-webkit-keyframes cycle-fade {\n  from {\n    opacity: 0.4; }\n  to {\n    opacity: 1; } }\n\n@keyframes cycle-fade {\n  from {\n    opacity: 0.4; }\n  to {\n    opacity: 1; } }\n    #page-products #reporting .anim-reporting__bug {\n      fill: #ff3267;\n      -webkit-transform-origin: center center;\n              transform-origin: center center; }\n    #page-products #reporting .content {\n      padding-top: 172px;\n      width: 40%;\n      z-index: 5; }\n    @media (max-width: 991px) {\n      #page-products #reporting .content {\n        min-height: 0;\n        padding-top: 64px;\n        width: 100%; }\n      #page-products #reporting .anim-reporting {\n        opacity: 0.7; }\n      #page-products #reporting .anim-reporting__clipped {\n        -webkit-transform: scale(0.8);\n                transform: scale(0.8); } }\n    @media (max-width: 991px) {\n      #page-products #reporting {\n        padding: 0; }\n        #page-products #reporting .anim-reporting {\n          display: none; }\n        #page-products #reporting .content {\n          min-height: 0;\n          padding-top: 64px;\n          padding-bottom: 64px;\n          width: 100%;\n          text-align: center; }\n          #page-products #reporting .content h4::before {\n            left: calc(50% - 32px); } }\n  #page-products #push {\n    background: #ffbc2a no-repeat center bottom;\n    background-image: linear-gradient(to right, #ffce39 0%, #ffad20 100%);\n    background-size: 100%; }\n    #page-products #push h4 {\n      color: #d26d00; }\n      #page-products #push h4::before {\n        background-position: 0 -320px; }\n    #page-products #push .container::before {\n      background-image: url(\"/img/pro/product-push-img.png\");\n      background-position: left 0;\n      top: 80px;\n      bottom: 80px; }\n      @media (max-width: 1219px) {\n        #page-products #push .container::before {\n          top: 130px;\n          bottom: 130px; } }\n    #page-products #push .content {\n      padding-top: 172px;\n      width: 35%; }\n    @media (max-width: 991px) {\n      #page-products #push .container::before {\n        display: none; }\n      #page-products #push .content {\n        min-height: 0;\n        padding-top: 64px;\n        padding-bottom: 64px;\n        width: 100%;\n        text-align: center; }\n        #page-products #push .content h4::before {\n          left: calc(50% - 32px); } }\n  #page-products #automate {\n    background-color: #f9fafc;\n    background-image: linear-gradient(0deg, white 0%, #f6f8fb 100%);\n    background-size: 100%;\n    position: relative;\n    padding-bottom: 160px; }\n    #page-products #automate h4::before {\n      background-position: 0 -128px; }\n    #page-products #automate .anim-automate {\n      position: absolute;\n      top: 220px;\n      left: 50%;\n      margin-left: -400px; }\n      #page-products #automate .anim-automate svg .connector {\n        opacity: 0;\n        stroke-dasharray: 80px; }\n      #page-products #automate .anim-automate svg rect.four {\n        opacity: 0.6; }\n      #page-products #automate .anim-automate svg #top,\n      #page-products #automate .anim-automate svg #bottom {\n        position: relative; }\n      #page-products #automate .anim-automate svg #bottom {\n        z-index: 1; }\n      #page-products #automate .anim-automate svg #top {\n        z-index: 2; }\n      #page-products #automate .anim-automate svg > g {\n        -webkit-transform: translateY(50px);\n                transform: translateY(50px); }\n    @media (max-width: 1219px) {\n      #page-products #automate {\n        padding-bottom: 390px; }\n        #page-products #automate .content {\n          width: 100%;\n          max-width: 500px;\n          text-align: center;\n          margin-left: auto;\n          margin-right: auto; }\n        #page-products #automate .content h4::before {\n          left: calc(50% - 32px); }\n        #page-products #automate .anim-automate {\n          -webkit-transform: scale(0.8);\n                  transform: scale(0.8);\n          top: 470px;\n          margin-left: -670px; } }\n    @media (max-width: 768px) {\n      #page-products #automate {\n        padding: 0; }\n        #page-products #automate .anim-automate {\n          display: none; }\n        #page-products #automate .content {\n          min-height: 0;\n          padding-top: 64px;\n          padding-bottom: 64px;\n          width: 100%;\n          text-align: center; }\n          #page-products #automate .content h4::before {\n            left: calc(50% - 32px); } }\n    #page-products #automate .anim-automate_ui {\n      position: absolute;\n      width: 100%;\n      height: 100%; }\n      #page-products #automate .anim-automate_ui > div {\n        position: absolute;\n        -webkit-transform: translate(-50%, -50%);\n                transform: translate(-50%, -50%);\n        max-width: 114px;\n        text-align: center;\n        display: -ms-flexbox;\n        display: flex;\n        -ms-flex-direction: column;\n            flex-direction: column;\n        -ms-flex-align: center;\n            align-items: center;\n        opacity: 0; }\n        #page-products #automate .anim-automate_ui > div p {\n          font-family: \"Graphik\", \"Avenir Next\", \"Helvetica Neue\", Helvetica, sans-serif;\n          margin: 0;\n          color: #fff;\n          font-size: 13px;\n          line-height: 17px; }\n        #page-products #automate .anim-automate_ui > div span {\n          display: block;\n          opacity: 0.6;\n          font-family: 12px; }\n        #page-products #automate .anim-automate_ui > div:before {\n          content: '';\n          display: block;\n          width: 20px;\n          height: 50px;\n          margin-bottom: 12px;\n          background-repeat: no-repeat;\n          background-size: 100%; }\n      #page-products #automate .anim-automate_ui .master:before {\n        background-image: url(\"/img/pro/pro-automate-animation/master.png\");\n        width: 100px;\n        height: 30px;\n        background-size: 100px 30px; }\n      #page-products #automate .anim-automate_ui .staging:before {\n        background-image: url(\"/img/pro/pro-automate-animation/staging.png\");\n        width: 110px;\n        height: 30px;\n        background-size: 110px 30px; }\n      #page-products #automate .anim-automate_ui .qa:before {\n        background-image: url(\"/img/pro/pro-automate-animation/qa.png\");\n        width: 61px;\n        height: 30px;\n        background-size: 61px 30px; }\n      #page-products #automate .anim-automate_ui .android:before,\n      #page-products #automate .anim-automate_ui .ios:before,\n      #page-products #automate .anim-automate_ui .web:before {\n        width: 62px;\n        height: 62px;\n        background-size: 62px 62px; }\n      #page-products #automate .anim-automate_ui .android:before {\n        background-image: url(\"/img/pro/pro-automate-animation/android.png\"); }\n      #page-products #automate .anim-automate_ui .ios:before {\n        background-image: url(\"/img/pro/pro-automate-animation/ios.png\"); }\n      #page-products #automate .anim-automate_ui .web:before {\n        background-image: url(\"/img/pro/pro-automate-animation/js.png\"); }\n      #page-products #automate .anim-automate_ui .testflight:before {\n        background-image: url(\"/img/pro/pro-automate-animation/testflight.png\");\n        width: 53px;\n        height: 53px;\n        background-size: 53px 53px; }\n      #page-products #automate .anim-automate_ui .playstore:before {\n        background-image: url(\"/img/pro/pro-automate-animation/playstore.png\");\n        width: 50px;\n        height: 55px;\n        background-size: 50px 55px; }\n      #page-products #automate .anim-automate_ui .webhook:before {\n        background-image: url(\"/img/pro/pro-automate-animation/webhook.png\");\n        width: 58px;\n        height: 54px;\n        background-size: 58px 54px; }\n      #page-products #automate .anim-automate_ui .master,\n      #page-products #automate .anim-automate_ui .staging,\n      #page-products #automate .anim-automate_ui .qa {\n        left: 50%;\n        top: 195px; }\n      #page-products #automate .anim-automate_ui .android,\n      #page-products #automate .anim-automate_ui .ios,\n      #page-products #automate .anim-automate_ui .web {\n        left: 50%;\n        top: 368px; }\n      #page-products #automate .anim-automate_ui .android,\n      #page-products #automate .anim-automate_ui .web {\n        margin-left: 174px; }\n      #page-products #automate .anim-automate_ui .ios {\n        margin-left: -178px; }\n      #page-products #automate .anim-automate_ui .testflight,\n      #page-products #automate .anim-automate_ui .playstore,\n      #page-products #automate .anim-automate_ui .webhook {\n        left: 50%;\n        top: 540px; }\n      #page-products #automate .anim-automate_ui .testflight {\n        margin-left: -352px; }\n      #page-products #automate .anim-automate_ui .playstore {\n        margin-left: 352px; }\n  #page-products .pro-features {\n    padding: 196px 0;\n    background-color: #394072; }\n    #page-products .pro-features hgroup {\n      text-align: center;\n      max-width: 560px;\n      margin-left: auto;\n      margin-right: auto; }\n      #page-products .pro-features hgroup h3 {\n        color: #fff;\n        font-size: 36px;\n        font-weight: 600;\n        line-height: 40px;\n        margin-top: 0; }\n      #page-products .pro-features hgroup p {\n        color: #d7d9eb;\n        font-family: \"Graphik\", \"Avenir Next\", \"Helvetica Neue\", Helvetica, sans-serif;\n        font-size: 20px;\n        line-height: 32px; }\n    #page-products .pro-features ul {\n      margin: 0 -24px 0;\n      padding: 0;\n      display: -ms-flexbox;\n      display: flex;\n      -ms-flex-wrap: wrap;\n          flex-wrap: wrap;\n      list-style-type: none; }\n    #page-products .pro-features li {\n      -ms-flex: 0 0 25%;\n          flex: 0 0 25%;\n      margin-top: 86px;\n      padding: 0 24px; }\n      #page-products .pro-features li h5 {\n        color: #fff;\n        font-size: 20px;\n        font-weight: 600;\n        margin-bottom: 18px;\n        margin-top: 0;\n        display: -ms-flexbox;\n        display: flex;\n        -ms-flex-align: center;\n            align-items: center; }\n      #page-products .pro-features li p {\n        color: #b9bcd8;\n        font-family: \"Graphik\", \"Avenir Next\", \"Helvetica Neue\", Helvetica, sans-serif;\n        font-size: 16px;\n        line-height: 28px; }\n    #page-products .pro-features [class^=\"pro-feature--\"] h5::before {\n      display: block;\n      content: '';\n      width: 24px;\n      height: 24px;\n      background-image: url(\"/img/pro/pro-feature-sprite.png\");\n      background-repeat: no-repeat;\n      background-size: 24px 192px;\n      margin-right: 12px; }\n    #page-products .pro-features .pro-feature--app-dashboard h5::before {\n      background-position: 0 0; }\n    #page-products .pro-features .pro-feature--configurable h5::before {\n      background-position: 0 calc(-1 * 24px); }\n    #page-products .pro-features .pro-feature--clean-builds h5::before {\n      background-position: 0 calc(-2 * 24px); }\n    #page-products .pro-features .pro-feature--mobile-ci-cd h5::before {\n      background-position: 0 calc(-3 * 24px); }\n    #page-products .pro-features .pro-feature--git-integrations h5::before {\n      background-position: 0 calc(-4 * 24px); }\n    #page-products .pro-features .pro-feature--connected-services h5::before {\n      background-position: 0 calc(-5 * 24px); }\n    #page-products .pro-features .pro-feature--live-app-updating h5::before {\n      background-position: 0 calc(-6 * 24px); }\n    #page-products .pro-features .pro-feature--role-based-controls h5::before {\n      background-position: 0 calc(-7 * 24px); }\n    @media (max-width: 1219px) {\n      #page-products .pro-features li {\n        -ms-flex: 0 0 33%;\n            flex: 0 0 33%; } }\n    @media (max-width: 991px) {\n      #page-products .pro-features {\n        padding: 90px 0;\n        text-align: center; }\n        #page-products .pro-features h5 {\n          -ms-flex-pack: center;\n              justify-content: center; }\n        #page-products .pro-features li {\n          -ms-flex: 0 0 50%;\n              flex: 0 0 50%; } }\n    @media (max-width: 767px) {\n      #page-products .pro-features hgroup h3 {\n        font-size: 30px; }\n      #page-products .pro-features li {\n        -ms-flex: 0 0 100%;\n            flex: 0 0 100%;\n        margin-top: 36px; } }\n  #page-products .get-started {\n    background: linear-gradient(45deg, #1b1f3a 0%, #292f52 100%);\n    overflow: auto; }\n    #page-products .get-started .container {\n      -ms-flex-align: center;\n          align-items: center;\n      display: -ms-flexbox;\n      display: flex;\n      margin-bottom: 120px;\n      margin-top: 120px; }\n    #page-products .get-started hgroup {\n      letter-spacing: -.025em;\n      -ms-flex-positive: 1;\n          flex-grow: 1; }\n    #page-products .get-started h2 {\n      color: #e0e3f6;\n      font-size: 28px;\n      line-height: 36px;\n      font-weight: 400;\n      letter-spacing: -0.02em;\n      margin: 0;\n      max-width: 680px; }\n      #page-products .get-started h2 strong {\n        font-weight: 600;\n        color: #fff; }\n    #page-products .get-started h3 {\n      color: #8aa6ff;\n      font-size: 24px;\n      line-height: 36px;\n      font-weight: 400;\n      margin: 0; }\n    #page-products .get-started .btn {\n      font-size: 15px;\n      text-transform: uppercase;\n      letter-spacing: 0.10em;\n      font-weight: 700;\n      border-radius: 100px;\n      background-color: #5fa3ff;\n      padding: 16px 28px 14px; }\n      #page-products .get-started .btn:hover {\n        background-color: #4895fc; }\n    @media (max-width: 991px) {\n      #page-products .get-started .container {\n        display: block;\n        text-align: center; }\n      #page-products .get-started hgroup {\n        padding-bottom: 16px; }\n      #page-products .get-started .btn-group {\n        padding-bottom: 96px; } }\n\n/*# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImluZGV4LmNzcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtFQUNFLHVCQUF1QixFQUFFO0VBQ3pCO0lBQ0UsbUJBQW1CLEVBQUU7RUFDdkI7Ozs7O0lBS0UsNkRBQTZELEVBQUU7RUFDakU7SUFDRSx1QkFBb0I7UUFBcEIsb0JBQW9CLEVBQUU7SUFDdEI7TUFDRSwyQ0FBMkMsRUFBRTtFQUNqRDtJQUNFLG1CQUFtQjtJQUNuQixtRUFBbUU7SUFDbkUsbUJBQW1CO0lBQ25CLG1CQUFtQixFQUFFO0lBQ3JCO01BQ0UsWUFBWTtNQUNaLG1DQUFtQztNQUNuQyx1QkFBdUI7TUFDdkIsZUFBZTtNQUNmLFlBQVk7TUFDWixhQUFhO01BQ2IsbUJBQW1CO01BQ25CLFdBQVc7TUFDWCxVQUFVO01BQ1YsUUFBUTtNQUNSLG1FQUFtRTtNQUNuRSx1QkFBdUI7TUFDdkIsYUFBYTtNQUNiLGlCQUFpQixFQUFFO01BQ25CO1FBQ0UsWUFBWTtRQUNaLGFBQWE7UUFDYixtQkFBbUI7UUFDbkIsOEVBQThFO1FBQzlFLHFGQUE2RTtnQkFBN0UsNkVBQTZFO1FBQzdFLDhCQUFzQjtnQkFBdEIsc0JBQXNCLEVBQUU7UUFDeEI7VUFDRSxjQUFjO1VBQ2QsU0FBUztVQUNULFNBQVMsRUFBRTtRQUNiO1VBQ0UsY0FBYztVQUNkLFNBQVM7VUFDVCxxQkFBcUIsRUFBRTtRQUN6QjtVQUNFLGNBQWM7VUFDZCxTQUFTO1VBQ1QscUJBQXFCLEVBQUU7UUFDekI7VUFDRSxjQUFjO1VBQ2QsUUFBUTtVQUNSLHFCQUFxQixFQUFFO1FBQ3pCO1VBQ0UsY0FBYztVQUNkLFVBQVU7VUFDVixxQkFBcUIsRUFBRTtRQUN6QjtVQUNFLGNBQWM7VUFDZCxVQUFVO1VBQ1YscUJBQXFCLEVBQUU7UUFDekI7VUFDRTtZQUNFLGNBQWM7WUFDZCxTQUFTO1lBQ1QsU0FBUyxFQUFFO1VBQ2I7WUFDRSxjQUFjO1lBQ2QsU0FBUztZQUNULFVBQVUsRUFBRTtVQUNkO1lBQ0UsY0FBYztZQUNkLFNBQVM7WUFDVCxVQUFVLEVBQUU7VUFDZDtZQUNFLGNBQWM7WUFDZCxTQUFTO1lBQ1QsVUFBVSxFQUFFO1VBQ2Q7WUFDRSxjQUFjO1lBQ2QsUUFBUTtZQUNSLFdBQVcsRUFBRTtVQUNmO1lBQ0UsY0FBYztZQUNkLFVBQVU7WUFDVixXQUFXLEVBQUUsRUFBRTtJQUN2QjtNQUNFLG1CQUFtQjtNQUNuQixtQkFBbUI7TUFDbkIsaUJBQWlCO01BQ2pCLHNCQUFzQjtNQUN0QixrQkFBa0IsRUFBRTtNQUNwQjtRQUNFLDhFQUE4RTtRQUM5RSwwQkFBMEI7UUFDMUIsdUJBQXVCO1FBQ3ZCLGdCQUFnQjtRQUNoQixrQkFBa0I7UUFDbEIsaUJBQWlCO1FBQ2pCLGVBQWUsRUFBRTtNQUNuQjtRQUNFLGlCQUFpQjtRQUNqQixnQkFBZ0I7UUFDaEIsa0JBQWtCO1FBQ2xCLGlCQUFpQjtRQUNqQix3QkFBd0I7UUFDeEIsb0JBQW9CLEVBQUU7TUFDeEI7UUFDRSx1QkFBdUI7UUFDdkIsaUJBQWlCO1FBQ2pCLG1CQUFtQjtRQUNuQixlQUFlO1FBQ2YsZ0JBQWdCO1FBQ2hCLGlCQUFpQjtRQUNqQixZQUFZO1FBQ1osK0VBQStFLEVBQUU7TUFDbkY7UUFDRSxpQkFBaUI7UUFDakIsbUJBQW1CO1FBQ25CLG9CQUFvQjtRQUNwQixhQUFhO1FBQ2IsdUJBQXVCLEVBQUU7UUFDekI7VUFDRSx1QkFBb0I7Y0FBcEIsb0JBQW9CO1VBQ3BCLDBCQUEwQjtVQUMxQixtQkFBbUI7VUFDbkIsNEJBQXFCO1VBQXJCLHFCQUFxQjtVQUNyQixnQkFBZ0I7VUFDaEIsaUJBQWlCO1VBQ2pCLDBCQUEwQjtVQUMxQix1QkFBdUI7VUFDdkIsbUJBQW1CLEVBQUU7VUFDckI7WUFDRSxpQkFBaUIsRUFBRTtRQUN2QjtVQUNFLHVCQUF1QjtVQUN2QixlQUFlLEVBQUU7VUFDakI7WUFDRSxtQ0FBMkI7WUFBM0IsMkJBQTJCO1lBQTNCLG1EQUEyQjtZQUMzQixpQkFBaUI7WUFDakIsd0JBQXdCO1lBQ3hCLGdCQUFnQjtZQUNoQixpQkFBaUIsRUFBRTtVQUNyQjtZQUNFLG1DQUEyQjtvQkFBM0IsMkJBQTJCLEVBQUU7UUFDakM7VUFDRSxnQ0FBZ0M7VUFDaEMsZ0JBQWdCO1VBQ2hCLHNCQUFzQjtVQUN0QiwyQkFBMkI7VUFDM0Isc0JBQXNCLEVBQUU7VUFDeEI7WUFDRSxnQ0FBZ0MsRUFBRTtNQUN4QztRQUNFO1VBQ0Usc0JBQXNCLEVBQUUsRUFBRTtNQUM5QjtRQUNFO1VBQ0Usa0JBQWtCLEVBQUU7VUFDcEI7WUFDRSxnQkFBZ0I7WUFDaEIsa0JBQWtCLEVBQUU7VUFDdEI7WUFDRSxpQkFBaUI7WUFDakIsa0JBQWtCO1lBQ2xCLG1CQUFtQixFQUFFO1VBQ3ZCO1lBQ0UsZ0JBQWdCO1lBQ2hCLG1CQUFtQixFQUFFO1VBQ3ZCO1lBQ0UsWUFBWTtZQUNaLGdCQUFnQjtZQUNoQixzQkFBd0I7Z0JBQXhCLHdCQUF3QjtZQUN4QixtQkFBbUIsRUFBRSxFQUFFO0VBQ2pDO0lBQ0UsbUJBQW1CO0lBQ25CLG1CQUFtQjtJQUNuQixXQUFXO0lBQ1gsaUJBQWlCO0lBQ2pCLHFCQUFjO0lBQWQsY0FBYztJQUNkLDJCQUF1QjtRQUF2Qix1QkFBdUI7SUFDdkIsdUJBQW9CO1FBQXBCLG9CQUFvQjtJQUNwQixZQUFZO0lBQ1osZ0JBQWdCLEVBQUU7SUFDbEI7TUFDRSxpQkFBaUI7TUFDakIsWUFBWTtNQUNaLGlCQUFpQjtNQUNqQix1QkFBdUI7TUFDdkIsNkJBQTZCO01BQzdCLHVCQUF1QjtNQUN2QixvQkFBb0I7TUFDcEIsZ0ZBQWdGLEVBQUU7TUFDbEY7UUFDRSxZQUFZLEVBQUU7SUFDbEI7TUFDRTtRQUNFLGtCQUFrQixFQUFFLEVBQUU7RUFDNUI7SUFDRSxXQUFXO0lBQ1gsWUFBWTtJQUNaLGtCQUFrQjtJQUNsQixpQkFBaUI7SUFDakIscUJBQWM7SUFBZCxjQUFjO0lBQ2Qsb0JBQWdCO1FBQWhCLGdCQUFnQjtJQUNoQix1QkFBb0I7UUFBcEIsb0JBQW9CO0lBQ3BCLHVCQUErQjtRQUEvQiwrQkFBK0IsRUFBRTtJQUNqQztNQUNFLDBEQUEwRDtNQUMxRCw2QkFBNkI7TUFDN0IsNkJBQTZCO01BQzdCLGtCQUFrQixFQUFFO0lBQ3RCO01BQ0U7UUFDRSxzQkFBd0I7WUFBeEIsd0JBQXdCLEVBQUU7UUFDMUI7VUFDRSxrQkFBa0IsRUFBRSxFQUFFO0lBQzVCO01BQ0U7UUFDRSxhQUFhLEVBQUU7UUFDZjtVQUNFLGtCQUFrQixFQUFFLEVBQUU7SUFDNUI7TUFDRSxhQUFhO01BQ2IsYUFBYTtNQUNiLHlCQUF5QixFQUFFO0lBQzdCO01BQ0UsNkJBQTZCO01BQzdCLFlBQVk7TUFDWixhQUFhLEVBQUU7SUFDakI7TUFDRSw2QkFBNkI7TUFDN0IsYUFBYTtNQUNiLGFBQWEsRUFBRTtJQUNqQjtNQUNFLDZCQUE2QjtNQUM3QixZQUFZO01BQ1osYUFBYSxFQUFFO0lBQ2pCO01BQ0UsNkJBQTZCO01BQzdCLFlBQVk7TUFDWixhQUFhLEVBQUU7SUFDakI7TUFDRSw4QkFBOEI7TUFDOUIsWUFBWTtNQUNaLGFBQWEsRUFBRTtJQUNqQjtNQUNFLDhCQUE4QjtNQUM5QixZQUFZO01BQ1osYUFBYSxFQUFFO0lBQ2pCO01BQ0UsOEJBQThCO01BQzlCLGFBQWE7TUFDYixhQUFhLEVBQUU7SUFDakI7TUFDRSw4QkFBOEI7TUFDOUIsWUFBWTtNQUNaLGFBQWEsRUFBRTtJQUNqQjtNQUNFLDhCQUE4QjtNQUM5QixZQUFZO01BQ1osYUFBYSxFQUFFO0lBQ2pCO01BQ0UsOEJBQThCO01BQzlCLFlBQVk7TUFDWixhQUFhLEVBQUU7SUFDakI7TUFDRSw4QkFBOEI7TUFDOUIsWUFBWTtNQUNaLGFBQWEsRUFBRTtFQUNuQjtJQUNFLHVCQUFvQjtRQUFwQixvQkFBb0I7SUFDcEIscUJBQWM7SUFBZCxjQUFjO0lBQ2Qsc0JBQXdCO1FBQXhCLHdCQUF3QjtJQUN4QixtQkFBbUI7SUFDbkIsV0FBVyxFQUFFO0lBQ2I7TUFDRSxZQUFZO01BQ1osZUFBZTtNQUNmLFlBQVk7TUFDWixRQUFRO01BQ1IsbUJBQW1CO01BQ25CLE9BQU87TUFDUCxZQUFZO01BQ1osV0FBVyxFQUFFO0lBQ2Y7TUFDRSxpQkFBaUI7TUFDakIsWUFBWTtNQUNaLG1CQUFtQjtNQUNuQixXQUFXLEVBQUU7TUFDYjtRQUNFLGdCQUFnQixFQUFFO01BQ3BCO1FBQ0UsK0JBQXVCO2dCQUF2Qix1QkFBdUIsRUFBRTtNQUMzQjtRQUNFLHFEQUE2QztnQkFBN0MsNkNBQTZDLEVBQUU7TUFDakQ7UUFDRSxlQUFlLEVBQUU7TUFDbkI7UUFDRSxjQUFjLEVBQUU7SUFDcEI7TUFDRSxjQUFjO01BQ2QsVUFBVTtNQUNWLG1CQUFtQjtNQUNuQixTQUFTO01BQ1Qsa0RBQTBDO2NBQTFDLDBDQUEwQztNQUMxQyw0RUFBb0U7TUFBcEUsb0VBQW9FO01BQXBFLHFJQUFvRTtNQUNwRSxZQUFZO01BQ1osV0FBVyxFQUFFO0lBQ2Y7TUFDRSxnRUFBZ0U7TUFDaEUsbUNBQW1DO01BQ25DLDZCQUE2QjtNQUM3Qix5QkFBeUI7TUFDekIsbUJBQW1CO01BQ25CLFVBQVU7TUFDVixpQkFBaUI7TUFDakIsdUJBQXVCO01BQ3ZCLG1CQUFtQjtNQUNuQiw0QkFBb0I7Y0FBcEIsb0JBQW9CO01BQ3BCLG1FQUEyRDtNQUEzRCwyREFBMkQ7TUFBM0QsbUhBQTJELEVBQUU7TUFDN0Q7UUFDRSxhQUFhO1FBQ2IsUUFBUTtRQUNSLG1CQUFtQjtRQUNuQixPQUFPO1FBQ1AsWUFBWSxFQUFFO0VBQ3BCO0lBQ0UsbUJBQW1CLEVBQUU7SUFDckI7TUFDRSxzQkFBc0I7TUFDdEIsVUFBVTtNQUNWLFdBQVcsRUFBRTtJQUNmO01BQ0UsbUJBQW1CO01BQ25CLG1CQUFtQixFQUFFO01BQ3JCO1FBQ0UsaUJBQWlCLEVBQUU7TUFDckI7UUFDRSxlQUFlO1FBQ2YsWUFBWTtRQUNaLFlBQVk7UUFDWixhQUFhO1FBQ2IsNDhDQUE0OEM7UUFDNThDLDZCQUE2QjtRQUM3QixzQkFBc0I7UUFDdEIsbUJBQW1CO1FBQ25CLE9BQU87UUFDUCxRQUFRLEVBQUU7TUFDWjtRQUNFLFVBQVU7UUFDVixpQkFBaUI7UUFDakIsZ0JBQWdCO1FBQ2hCLGtCQUFrQixFQUFFO01BQ3RCO1FBQ0UsZUFBZTtRQUNmLGdCQUFnQjtRQUNoQixrQkFBa0IsRUFBRTtFQUMxQjtJQUNFLG9DQUFvQztJQUNwQyx1QkFBdUI7SUFDdkIsaUJBQWlCO0lBQ2pCLGVBQWU7SUFDZixrQkFBa0IsRUFBRTtJQUNwQjtNQUNFLFdBQVc7TUFDWCxpQkFBaUI7TUFDakIsbUJBQW1CO01BQ25CLHNCQUFzQjtNQUN0QixlQUFlO01BQ2Ysa0JBQWtCO01BQ2xCLG1CQUFtQixFQUFFO01BQ3JCO1FBQ0UsZ0NBQWdDLEVBQUU7UUFDbEM7O1VBRUUsZUFBZSxFQUFFO1FBQ25CO1VBQ0UsZUFBZSxFQUFFO01BQ3JCO1FBQ0UsZ0JBQWdCO1FBQ2hCLHdCQUF3QjtRQUN4QixpQkFBaUI7UUFDakIsb0JBQW9CLEVBQUU7TUFDeEI7UUFDRSxnQkFBZ0I7UUFDaEIsa0JBQWtCO1FBQ2xCLCtFQUErRTtRQUMvRSxpQkFBaUIsRUFBRTtNQUNyQjtRQUNFLDhFQUE4RTtRQUM5RSxtQkFBbUI7UUFDbkIsbUJBQW1CO1FBQ25CLGVBQWUsRUFBRTtRQUNqQjtVQUNFLG1FQUFtRTtVQUNuRSxzQkFBc0I7VUFDdEIsWUFBWTtVQUNaLGFBQWE7VUFDYixZQUFZO1VBQ1osbUJBQW1CO1VBQ25CLE9BQU8sRUFBRTtJQUNmO01BQ0UscUJBQWM7TUFBZCxjQUFjO01BQ2QsdUJBQW9CO1VBQXBCLG9CQUFvQixFQUFFO01BQ3RCO1FBQ0Usa0JBQWtCLEVBQUU7SUFDeEI7TUFDRSxrQkFBa0IsRUFBRTtJQUN0QjtNQUNFO1FBQ0UsMkJBQXVCO1lBQXZCLHVCQUF1QixFQUFFO01BQzNCO1FBQ0UsZUFBZTtRQUNmLGlCQUFpQixFQUFFLEVBQUU7SUFDekI7TUFDRSwyQkFBMkI7TUFDM0IseUJBQXlCO01BQ3pCLGVBQWU7TUFDZixnQkFBZ0I7TUFDaEIsaUJBQWlCO01BQ2pCLG9CQUFvQjtNQUNwQixrREFBa0QsRUFBRTtNQUNwRDtRQUNFLGlCQUFpQjtRQUNqQix3QkFBd0I7UUFDeEIsZ0JBQWdCO1FBQ2hCLGlCQUFpQixFQUFFO01BQ3JCO1FBQ0UsaUNBQWlDLEVBQUU7SUFDdkM7TUFDRSx5QkFBeUI7TUFDekIsc0JBQXNCO01BQ3RCLGFBQWEsRUFBRTtNQUNmO1FBQ0UsZ0JBQWdCO1FBQ2hCLFlBQVksRUFBRTtNQUNoQjtRQUNFLFdBQVcsRUFBRTtJQUNqQjtNQUNFLG1CQUFtQixFQUFFO01BQ3JCO1FBQ0UsNkJBQTZCO1FBQzdCLDZCQUE2QjtRQUM3Qix5QkFBeUI7UUFDekIsT0FBTztRQUNQLFNBQVM7UUFDVCxRQUFRO1FBQ1IsVUFBVTtRQUNWLFlBQVk7UUFDWixlQUFlO1FBQ2YsbUJBQW1CO1FBQ25CLFdBQVc7UUFDWCx3QkFBd0IsRUFBRTtJQUM5QjtNQUNFLFdBQVcsRUFBRTtJQUNmO01BQ0UsZ0JBQWdCO01BQ2hCLGlCQUFpQjtNQUNqQixzQkFBc0I7TUFDdEIsZUFBZTtNQUNmLDBCQUEwQjtNQUMxQixvQkFBb0IsRUFBRTtJQUN4QjtNQUNFLGdCQUFnQjtNQUNoQixpQkFBaUI7TUFDakIsdUJBQXVCO01BQ3ZCLG9CQUFvQixFQUFFO0lBQ3hCO01BQ0UsZUFBZTtNQUNmLGdCQUFnQjtNQUNoQixvQkFBb0I7TUFDcEIsaUJBQWlCO01BQ2pCLGlCQUFpQjtNQUNqQix3QkFBd0IsRUFBRTtJQUM1QjtNQUNFLGdCQUFnQjtNQUNoQixpQkFBaUI7TUFDakIsd0JBQXdCO01BQ3hCLG1CQUFtQjtNQUNuQixvQkFBb0I7TUFDcEIsZUFBZSxFQUFFO01BQ2pCO1FBQ0UsZUFBZTtRQUNmLGlCQUFpQixFQUFFO01BQ3JCO1FBQ0UsZUFBZSxFQUFFO0lBQ3JCO01BQ0UsbUJBQW1CO01BQ25CLGdCQUFnQjtNQUNoQixpQkFBaUIsRUFBRTtNQUNuQjtRQUNFLGlCQUFpQixFQUFFO01BQ3JCO1FBQ0Usd0JBQXdCO1FBQ3hCLGlCQUFpQjtRQUNqQixnQkFBZ0I7UUFDaEIsa0JBQWtCO1FBQ2xCLHFCQUFxQjtRQUNyQixpQkFBaUI7UUFDakIsaUJBQWlCO1FBQ2pCLHNCQUFzQjtRQUN0QiwwQkFBMEIsRUFBRTtNQUM5QjtRQUNFLDBDQUFrQztnQkFBbEMsa0NBQWtDLEVBQUU7SUFDeEM7TUFDRTtRQUNFLGdCQUFnQixFQUFFO01BQ3BCO1FBQ0UsZ0JBQWdCO1FBQ2hCLG1CQUFtQixFQUFFLEVBQUU7RUFDN0I7SUFDRSx1QkFBdUI7SUFDdkIsZUFBZTtJQUNmLHNCQUFzQjtJQUN0QixtQkFBbUIsRUFBRTtJQUNyQjtNQUNFLGlCQUFpQjtNQUNqQixvQkFBb0IsRUFBRTtNQUN0QjtRQUNFLGlCQUFpQjtRQUNqQixlQUFlO1FBQ2Ysb0JBQW9CLEVBQUU7TUFDeEI7UUFDRSxnQkFBZ0I7UUFDaEIsa0JBQWtCO1FBQ2xCLGVBQWU7UUFDZixpQkFBaUIsRUFBRTtJQUN2QjtNQUNFLFdBQVc7TUFDWCxpQkFBaUI7TUFDakIscUJBQWM7TUFBZCxjQUFjO01BQ2QsdUJBQStCO1VBQS9CLCtCQUErQjtNQUMvQixpQkFBaUI7TUFDakIsZUFBZSxFQUFFO01BQ2pCO1FBQ0UsZ0JBQWdCO1FBQ2hCLHFCQUFxQjtRQUNyQix1QkFBdUI7UUFDdkIsZ0JBQWdCO1FBQ2hCLG9CQUFvQjtRQUNwQixpQkFBaUIsRUFBRTtNQUNyQjtRQUNFLCtFQUErRTtRQUMvRSxnQkFBZ0I7UUFDaEIsa0JBQWtCO1FBQ2xCLGVBQWU7UUFDZix3QkFBd0I7UUFDeEIsaUJBQWlCLEVBQUU7SUFDdkI7TUFDRSxrQkFBa0I7TUFDbEIsb0JBQWdCO1VBQWhCLGdCQUFnQjtNQUNoQixtQkFBbUIsRUFBRTtNQUNyQjtRQUNFLGdFQUFnRTtRQUNoRSxzQkFBc0I7UUFDdEIsYUFBYTtRQUNiLFlBQVk7UUFDWixZQUFZO1FBQ1osbUJBQW1CO1FBQ25CLE9BQU8sRUFBRTtNQUNYO1FBQ0UsNkJBQTZCLEVBQUU7TUFDakM7UUFDRSw2QkFBNkIsRUFBRTtNQUNqQztRQUNFLGtCQUFrQixFQUFFO0lBQ3hCO01BQ0U7UUFDRSxlQUFlLEVBQUU7TUFDbkI7UUFDRSxtQkFBbUIsRUFBRTtRQUNyQjtVQUNFLHdCQUF3QixFQUFFO1FBQzVCO1VBQ0UsZUFBZSxFQUFFLEVBQUU7SUFDekI7TUFDRTtRQUNFLHFCQUFxQjtRQUNyQixtQkFBbUIsRUFBRSxFQUFFO0lBQzNCO01BQ0U7UUFDRSxxQkFBcUI7UUFDckIsa0JBQWtCLEVBQUU7UUFDcEI7VUFDRSxvQkFBb0IsRUFBRTtVQUN0QjtZQUNFLGdCQUFnQixFQUFFO1VBQ3BCO1lBQ0UsZ0JBQWdCO1lBQ2hCLG1CQUFtQixFQUFFLEVBQUU7RUFDakM7SUFDRSxnRUFBZ0U7SUFDaEUsc0JBQXNCLEVBQUU7SUFDeEI7TUFDRSx5QkFBeUIsRUFBRTtJQUM3QjtNQUNFLG1CQUFtQjtNQUNuQixtQkFBbUI7TUFDbkIsWUFBWSxFQUFFO01BQ2Q7UUFDRTtVQUNFLG1CQUFtQixFQUFFLEVBQUU7SUFDN0I7TUFDRSxtQkFBbUI7TUFDbkIsV0FBVztNQUNYLE9BQU87TUFDUCxVQUFVO01BQ1YsVUFBVTtNQUNWLHNDQUE4QjtjQUE5Qiw4QkFBOEI7TUFDOUIscUJBQWM7TUFBZCxjQUFjO01BQ2QsdUJBQW9CO1VBQXBCLG9CQUFvQixFQUFFO0lBQ3hCO01BQ0UsYUFBYTtNQUNiLGNBQWM7TUFDZCxtQkFBbUIsRUFBRTtJQUN2Qjs7TUFFRSxZQUFZO01BQ1osYUFBYTtNQUNiLG1CQUFtQjtNQUNuQixPQUFPO01BQ1AsUUFBUSxFQUFFO0lBQ1o7TUFDRSxZQUFZO01BQ1osc0NBQThCO2NBQTlCLDhCQUE4QixFQUFFO0lBQ2xDO01BQ0UsV0FBVztNQUNYLHFDQUE2QjtjQUE3Qiw2QkFBNkIsRUFBRTtJQUNqQztNQUNFLGFBQWE7TUFDYixjQUFjO01BQ2Qsa0VBQWtFO01BQ2xFLDZCQUE2QjtNQUM3Qiw2QkFBNkI7TUFDN0IsbUJBQW1CO01BQ25CLE9BQU87TUFDUCxRQUFRO01BQ1IsV0FBVztNQUNYLHFDQUE2QjtjQUE3Qiw2QkFBNkIsRUFBRTtJQUNqQztNQUNFLGFBQWE7TUFDYixjQUFjO01BQ2Qsb0JBQW9CO01BQ3BCLG1CQUFtQjtNQUNuQixVQUFVO01BQ1YsWUFBWTtNQUNaLG1DQUEyQjtjQUEzQiwyQkFBMkI7TUFDM0IsdUZBQStFO2NBQS9FLCtFQUErRSxFQUFFO0lBQ25GO01BQ0U7UUFDRSxjQUFjLEVBQUU7TUFDbEI7UUFDRSxjQUFjO1FBQ2Qsa0JBQWtCO1FBQ2xCLHFCQUFxQjtRQUNyQixZQUFZO1FBQ1osbUJBQW1CLEVBQUU7UUFDckI7VUFDRSx1QkFBdUIsRUFBRSxFQUFFO0VBQ25DO0lBQ0UsZ0VBQWdFO0lBQ2hFLGlCQUFpQixFQUFFO0lBQ25CO01BQ0UsNkJBQTZCLEVBQUU7SUFDakM7TUFDRSxtQkFBbUI7TUFDbkIsUUFBUTtNQUNSLE9BQU87TUFDUCxVQUFVO01BQ1YsV0FBVztNQUNYLHFCQUFjO01BQWQsY0FBYztNQUNkLHNCQUF3QjtVQUF4Qix3QkFBd0I7TUFDeEIsdUJBQW9CO1VBQXBCLG9CQUFvQixFQUFFO0lBQ3hCO01BQ0UsY0FBYztNQUNkLDBCQUEwQjtNQUMxQixnQkFBZ0I7TUFDaEIsaUJBQWlCO01BQ2pCLHVCQUF1QixFQUFFO0lBQzNCO01BQ0UsbUJBQW1CLEVBQUU7SUFDdkI7TUFDRTtRQUNFLHFCQUFxQjtRQUNyQixXQUFXO1FBQ1gsY0FBYyxFQUFFO01BQ2xCO1FBQ0Usa0JBQWtCO1FBQ2xCLGNBQWM7UUFDZCxXQUFXLEVBQUUsRUFBRTtJQUNuQjtNQUNFO1FBQ0UsdUJBQXVCO1FBQ3ZCLFdBQVcsRUFBRTtRQUNiO1VBQ0UsY0FBYyxFQUFFO1FBQ2xCO1VBQ0UsY0FBYztVQUNkLGtCQUFrQjtVQUNsQixxQkFBcUI7VUFDckIsWUFBWTtVQUNaLG1CQUFtQixFQUFFO1VBQ3JCO1lBQ0UsdUJBQXVCLEVBQUUsRUFBRTtFQUNyQztJQUNFLG9CQUFvQjtJQUNwQixnQkFBZ0IsRUFBRTtJQUNsQjs7TUFFRSxlQUFlLEVBQUU7TUFDakI7O1FBRUUsOEJBQThCLEVBQUU7SUFDcEM7TUFDRSxjQUFjO01BQ2QsYUFBYTtNQUNiLHFCQUFjO01BQWQsY0FBYztNQUNkLGlCQUFpQjtNQUNqQixtQkFBbUI7TUFDbkIsT0FBTztNQUNQLFVBQVU7TUFDVixzQ0FBOEI7Y0FBOUIsOEJBQThCO01BQzlCLFVBQVU7TUFDVixXQUFXLEVBQUU7SUFDZjtNQUNFLFlBQVk7TUFDWixhQUFhLEVBQUU7SUFDakI7TUFDRSxjQUFjLEVBQUU7SUFDbEI7TUFDRSxtQ0FBMkI7Y0FBM0IsMkJBQTJCO01BQzNCLCtCQUF1QjtjQUF2Qix1QkFBdUI7TUFDdkIsdUNBQStCO2NBQS9CLCtCQUErQjtNQUMvQiw0Q0FBb0M7Y0FBcEMsb0NBQW9DO01BQ3BDLHdDQUFnQztjQUFoQyxnQ0FBZ0MsRUFBRTs7QUFFeEM7RUFDRTtJQUNFLGFBQWEsRUFBRTtFQUNqQjtJQUNFLFdBQVcsRUFBRSxFQUFFOztBQUpuQjtFQUNFO0lBQ0UsYUFBYSxFQUFFO0VBQ2pCO0lBQ0UsV0FBVyxFQUFFLEVBQUU7SUFDZjtNQUNFLGNBQWM7TUFDZCx3Q0FBZ0M7Y0FBaEMsZ0NBQWdDLEVBQUU7SUFDcEM7TUFDRSxtQkFBbUI7TUFDbkIsV0FBVztNQUNYLFdBQVcsRUFBRTtJQUNmO01BQ0U7UUFDRSxjQUFjO1FBQ2Qsa0JBQWtCO1FBQ2xCLFlBQVksRUFBRTtNQUNoQjtRQUNFLGFBQWEsRUFBRTtNQUNqQjtRQUNFLDhCQUFzQjtnQkFBdEIsc0JBQXNCLEVBQUUsRUFBRTtJQUM5QjtNQUNFO1FBQ0UsV0FBVyxFQUFFO1FBQ2I7VUFDRSxjQUFjLEVBQUU7UUFDbEI7VUFDRSxjQUFjO1VBQ2Qsa0JBQWtCO1VBQ2xCLHFCQUFxQjtVQUNyQixZQUFZO1VBQ1osbUJBQW1CLEVBQUU7VUFDckI7WUFDRSx1QkFBdUIsRUFBRSxFQUFFO0VBQ3JDO0lBQ0UsNENBQTRDO0lBQzVDLHNFQUFzRTtJQUN0RSxzQkFBc0IsRUFBRTtJQUN4QjtNQUNFLGVBQWUsRUFBRTtNQUNqQjtRQUNFLDhCQUE4QixFQUFFO0lBQ3BDO01BQ0UsdURBQXVEO01BQ3ZELDRCQUE0QjtNQUM1QixVQUFVO01BQ1YsYUFBYSxFQUFFO01BQ2Y7UUFDRTtVQUNFLFdBQVc7VUFDWCxjQUFjLEVBQUUsRUFBRTtJQUN4QjtNQUNFLG1CQUFtQjtNQUNuQixXQUFXLEVBQUU7SUFDZjtNQUNFO1FBQ0UsY0FBYyxFQUFFO01BQ2xCO1FBQ0UsY0FBYztRQUNkLGtCQUFrQjtRQUNsQixxQkFBcUI7UUFDckIsWUFBWTtRQUNaLG1CQUFtQixFQUFFO1FBQ3JCO1VBQ0UsdUJBQXVCLEVBQUUsRUFBRTtFQUNuQztJQUNFLDBCQUEwQjtJQUMxQixnRUFBZ0U7SUFDaEUsc0JBQXNCO0lBQ3RCLG1CQUFtQjtJQUNuQixzQkFBc0IsRUFBRTtJQUN4QjtNQUNFLDhCQUE4QixFQUFFO0lBQ2xDO01BQ0UsbUJBQW1CO01BQ25CLFdBQVc7TUFDWCxVQUFVO01BQ1Ysb0JBQW9CLEVBQUU7TUFDdEI7UUFDRSxXQUFXO1FBQ1gsdUJBQXVCLEVBQUU7TUFDM0I7UUFDRSxhQUFhLEVBQUU7TUFDakI7O1FBRUUsbUJBQW1CLEVBQUU7TUFDdkI7UUFDRSxXQUFXLEVBQUU7TUFDZjtRQUNFLFdBQVcsRUFBRTtNQUNmO1FBQ0Usb0NBQTRCO2dCQUE1Qiw0QkFBNEIsRUFBRTtJQUNsQztNQUNFO1FBQ0Usc0JBQXNCLEVBQUU7UUFDeEI7VUFDRSxZQUFZO1VBQ1osaUJBQWlCO1VBQ2pCLG1CQUFtQjtVQUNuQixrQkFBa0I7VUFDbEIsbUJBQW1CLEVBQUU7UUFDdkI7VUFDRSx1QkFBdUIsRUFBRTtRQUMzQjtVQUNFLDhCQUFzQjtrQkFBdEIsc0JBQXNCO1VBQ3RCLFdBQVc7VUFDWCxvQkFBb0IsRUFBRSxFQUFFO0lBQzlCO01BQ0U7UUFDRSxXQUFXLEVBQUU7UUFDYjtVQUNFLGNBQWMsRUFBRTtRQUNsQjtVQUNFLGNBQWM7VUFDZCxrQkFBa0I7VUFDbEIscUJBQXFCO1VBQ3JCLFlBQVk7VUFDWixtQkFBbUIsRUFBRTtVQUNyQjtZQUNFLHVCQUF1QixFQUFFLEVBQUU7SUFDbkM7TUFDRSxtQkFBbUI7TUFDbkIsWUFBWTtNQUNaLGFBQWEsRUFBRTtNQUNmO1FBQ0UsbUJBQW1CO1FBQ25CLHlDQUFpQztnQkFBakMsaUNBQWlDO1FBQ2pDLGlCQUFpQjtRQUNqQixtQkFBbUI7UUFDbkIscUJBQWM7UUFBZCxjQUFjO1FBQ2QsMkJBQXVCO1lBQXZCLHVCQUF1QjtRQUN2Qix1QkFBb0I7WUFBcEIsb0JBQW9CO1FBQ3BCLFdBQVcsRUFBRTtRQUNiO1VBQ0UsK0VBQStFO1VBQy9FLFVBQVU7VUFDVixZQUFZO1VBQ1osZ0JBQWdCO1VBQ2hCLGtCQUFrQixFQUFFO1FBQ3RCO1VBQ0UsZUFBZTtVQUNmLGFBQWE7VUFDYixrQkFBa0IsRUFBRTtRQUN0QjtVQUNFLFlBQVk7VUFDWixlQUFlO1VBQ2YsWUFBWTtVQUNaLGFBQWE7VUFDYixvQkFBb0I7VUFDcEIsNkJBQTZCO1VBQzdCLHNCQUFzQixFQUFFO01BQzVCO1FBQ0Usb0VBQW9FO1FBQ3BFLGFBQWE7UUFDYixhQUFhO1FBQ2IsNEJBQTRCLEVBQUU7TUFDaEM7UUFDRSxxRUFBcUU7UUFDckUsYUFBYTtRQUNiLGFBQWE7UUFDYiw0QkFBNEIsRUFBRTtNQUNoQztRQUNFLGdFQUFnRTtRQUNoRSxZQUFZO1FBQ1osYUFBYTtRQUNiLDJCQUEyQixFQUFFO01BQy9COzs7UUFHRSxZQUFZO1FBQ1osYUFBYTtRQUNiLDJCQUEyQixFQUFFO01BQy9CO1FBQ0UscUVBQXFFLEVBQUU7TUFDekU7UUFDRSxpRUFBaUUsRUFBRTtNQUNyRTtRQUNFLGdFQUFnRSxFQUFFO01BQ3BFO1FBQ0Usd0VBQXdFO1FBQ3hFLFlBQVk7UUFDWixhQUFhO1FBQ2IsMkJBQTJCLEVBQUU7TUFDL0I7UUFDRSx1RUFBdUU7UUFDdkUsWUFBWTtRQUNaLGFBQWE7UUFDYiwyQkFBMkIsRUFBRTtNQUMvQjtRQUNFLHFFQUFxRTtRQUNyRSxZQUFZO1FBQ1osYUFBYTtRQUNiLDJCQUEyQixFQUFFO01BQy9COzs7UUFHRSxVQUFVO1FBQ1YsV0FBVyxFQUFFO01BQ2Y7OztRQUdFLFVBQVU7UUFDVixXQUFXLEVBQUU7TUFDZjs7UUFFRSxtQkFBbUIsRUFBRTtNQUN2QjtRQUNFLG9CQUFvQixFQUFFO01BQ3hCOzs7UUFHRSxVQUFVO1FBQ1YsV0FBVyxFQUFFO01BQ2Y7UUFDRSxvQkFBb0IsRUFBRTtNQUN4QjtRQUNFLG1CQUFtQixFQUFFO0VBQzNCO0lBQ0UsaUJBQWlCO0lBQ2pCLDBCQUEwQixFQUFFO0lBQzVCO01BQ0UsbUJBQW1CO01BQ25CLGlCQUFpQjtNQUNqQixrQkFBa0I7TUFDbEIsbUJBQW1CLEVBQUU7TUFDckI7UUFDRSxZQUFZO1FBQ1osZ0JBQWdCO1FBQ2hCLGlCQUFpQjtRQUNqQixrQkFBa0I7UUFDbEIsY0FBYyxFQUFFO01BQ2xCO1FBQ0UsZUFBZTtRQUNmLCtFQUErRTtRQUMvRSxnQkFBZ0I7UUFDaEIsa0JBQWtCLEVBQUU7SUFDeEI7TUFDRSxrQkFBa0I7TUFDbEIsV0FBVztNQUNYLHFCQUFjO01BQWQsY0FBYztNQUNkLG9CQUFnQjtVQUFoQixnQkFBZ0I7TUFDaEIsc0JBQXNCLEVBQUU7SUFDMUI7TUFDRSxrQkFBYztVQUFkLGNBQWM7TUFDZCxpQkFBaUI7TUFDakIsZ0JBQWdCLEVBQUU7TUFDbEI7UUFDRSxZQUFZO1FBQ1osZ0JBQWdCO1FBQ2hCLGlCQUFpQjtRQUNqQixvQkFBb0I7UUFDcEIsY0FBYztRQUNkLHFCQUFjO1FBQWQsY0FBYztRQUNkLHVCQUFvQjtZQUFwQixvQkFBb0IsRUFBRTtNQUN4QjtRQUNFLGVBQWU7UUFDZiwrRUFBK0U7UUFDL0UsZ0JBQWdCO1FBQ2hCLGtCQUFrQixFQUFFO0lBQ3hCO01BQ0UsZUFBZTtNQUNmLFlBQVk7TUFDWixZQUFZO01BQ1osYUFBYTtNQUNiLHlEQUF5RDtNQUN6RCw2QkFBNkI7TUFDN0IsNEJBQTRCO01BQzVCLG1CQUFtQixFQUFFO0lBQ3ZCO01BQ0UseUJBQXlCLEVBQUU7SUFDN0I7TUFDRSx1Q0FBdUMsRUFBRTtJQUMzQztNQUNFLHVDQUF1QyxFQUFFO0lBQzNDO01BQ0UsdUNBQXVDLEVBQUU7SUFDM0M7TUFDRSx1Q0FBdUMsRUFBRTtJQUMzQztNQUNFLHVDQUF1QyxFQUFFO0lBQzNDO01BQ0UsdUNBQXVDLEVBQUU7SUFDM0M7TUFDRSx1Q0FBdUMsRUFBRTtJQUMzQztNQUNFO1FBQ0Usa0JBQWM7WUFBZCxjQUFjLEVBQUUsRUFBRTtJQUN0QjtNQUNFO1FBQ0UsZ0JBQWdCO1FBQ2hCLG1CQUFtQixFQUFFO1FBQ3JCO1VBQ0Usc0JBQXdCO2NBQXhCLHdCQUF3QixFQUFFO1FBQzVCO1VBQ0Usa0JBQWM7Y0FBZCxjQUFjLEVBQUUsRUFBRTtJQUN4QjtNQUNFO1FBQ0UsZ0JBQWdCLEVBQUU7TUFDcEI7UUFDRSxtQkFBZTtZQUFmLGVBQWU7UUFDZixpQkFBaUIsRUFBRSxFQUFFO0VBQzNCO0lBQ0UsNkRBQTZEO0lBQzdELGVBQWUsRUFBRTtJQUNqQjtNQUNFLHVCQUFvQjtVQUFwQixvQkFBb0I7TUFDcEIscUJBQWM7TUFBZCxjQUFjO01BQ2QscUJBQXFCO01BQ3JCLGtCQUFrQixFQUFFO0lBQ3RCO01BQ0Usd0JBQXdCO01BQ3hCLHFCQUFhO1VBQWIsYUFBYSxFQUFFO0lBQ2pCO01BQ0UsZUFBZTtNQUNmLGdCQUFnQjtNQUNoQixrQkFBa0I7TUFDbEIsaUJBQWlCO01BQ2pCLHdCQUF3QjtNQUN4QixVQUFVO01BQ1YsaUJBQWlCLEVBQUU7TUFDbkI7UUFDRSxpQkFBaUI7UUFDakIsWUFBWSxFQUFFO0lBQ2xCO01BQ0UsZUFBZTtNQUNmLGdCQUFnQjtNQUNoQixrQkFBa0I7TUFDbEIsaUJBQWlCO01BQ2pCLFVBQVUsRUFBRTtJQUNkO01BQ0UsZ0JBQWdCO01BQ2hCLDBCQUEwQjtNQUMxQix1QkFBdUI7TUFDdkIsaUJBQWlCO01BQ2pCLHFCQUFxQjtNQUNyQiwwQkFBMEI7TUFDMUIsd0JBQXdCLEVBQUU7TUFDMUI7UUFDRSwwQkFBMEIsRUFBRTtJQUNoQztNQUNFO1FBQ0UsZUFBZTtRQUNmLG1CQUFtQixFQUFFO01BQ3ZCO1FBQ0UscUJBQXFCLEVBQUU7TUFDekI7UUFDRSxxQkFBcUIsRUFBRSxFQUFFIiwiZmlsZSI6InBhZ2VzL3Byb2R1Y3RzL2luZGV4LmNzcyIsInNvdXJjZXNDb250ZW50IjpbIiNwYWdlLXByb2R1Y3RzIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjsgfVxuICAjcGFnZS1wcm9kdWN0cyAucHJlLWhlYWRlciB7XG4gICAgbWFyZ2luLWJvdHRvbTogMHB4OyB9XG4gICNwYWdlLXByb2R1Y3RzIC5jdGEsXG4gICNwYWdlLXByb2R1Y3RzIC5wcm8tbmF2LFxuICAjcGFnZS1wcm9kdWN0cyAucHJvLXZpZGVvLFxuICAjcGFnZS1wcm9kdWN0cyAuc3ViLWhlYWRlcixcbiAgI3BhZ2UtcHJvZHVjdHMgbWFpbiB7XG4gICAgZm9udC1mYW1pbHk6IFwiRWluYVwiLCBcIkhlbHZldGljYSBOZXVlXCIsIEhlbHZldGljYSwgc2Fucy1zZXJpZjsgfVxuICAjcGFnZS1wcm9kdWN0cyAuc3ViLWhlYWRlciA+IC5jb250YWluZXIge1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7IH1cbiAgICAjcGFnZS1wcm9kdWN0cyAuc3ViLWhlYWRlciA+IC5jb250YWluZXI6YmVmb3JlIHtcbiAgICAgIGJvcmRlci10b3AtY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xKTsgfVxuICAjcGFnZS1wcm9kdWN0cyA+IC5jdGEge1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICBiYWNrZ3JvdW5kLWltYWdlOiBsaW5lYXItZ3JhZGllbnQoOTBkZWcsICM2NTIxZmMgMCUsICMzODlmZmYgMTAwJSk7XG4gICAgbWFyZ2luLXRvcDogLTE0MHB4O1xuICAgIHBhZGRpbmctdG9wOiAxNDBweDsgfVxuICAgICNwYWdlLXByb2R1Y3RzID4gLmN0YSAuY3RhX19iYWNrZ3JvdW5kIHtcbiAgICAgIGNvbnRlbnQ6ICcnO1xuICAgICAgYmFja2dyb3VuZC1wb3NpdGlvbjogY2VudGVyIGNlbnRlcjtcbiAgICAgIGJhY2tncm91bmQtc2l6ZTogY292ZXI7XG4gICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgaGVpZ2h0OiAxMDAlO1xuICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgei1pbmRleDogMDtcbiAgICAgIHRvcDogLTRweDtcbiAgICAgIGxlZnQ6IDA7XG4gICAgICBiYWNrZ3JvdW5kLWltYWdlOiBsaW5lYXItZ3JhZGllbnQoOTBkZWcsICM2MDMwZmMgMCUsICM1ZmEyZmUgMTAwJSk7XG4gICAgICBiYWNrZ3JvdW5kLXNpemU6IGNvdmVyO1xuICAgICAgb3BhY2l0eTogMC41O1xuICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsgfVxuICAgICAgI3BhZ2UtcHJvZHVjdHMgPiAuY3RhIC5jdGFfX2JhY2tncm91bmQgPiBkaXYge1xuICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgICAgaGVpZ2h0OiAxMDAlO1xuICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgIGJhY2tncm91bmQtaW1hZ2U6IGxpbmVhci1ncmFkaWVudCg5MGRlZywgI2ZmZiAwJSwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwKSA3NSUpO1xuICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtMjBweCwgMCkgcm90YXRlKC0zZGVnKSBza2V3KDE2ZGVnLCAwZGVnKSBzY2FsZSgxLCAxLjUpO1xuICAgICAgICB0cmFuc2Zvcm0tb3JpZ2luOiB0b3A7IH1cbiAgICAgICAgI3BhZ2UtcHJvZHVjdHMgPiAuY3RhIC5jdGFfX2JhY2tncm91bmQgPiBkaXY6bnRoLWNoaWxkKDEpIHtcbiAgICAgICAgICBvcGFjaXR5OiAwLjA1O1xuICAgICAgICAgIHRvcDogNzUlO1xuICAgICAgICAgIGxlZnQ6IDAlOyB9XG4gICAgICAgICNwYWdlLXByb2R1Y3RzID4gLmN0YSAuY3RhX19iYWNrZ3JvdW5kID4gZGl2Om50aC1jaGlsZCgyKSB7XG4gICAgICAgICAgb3BhY2l0eTogMC4xMDtcbiAgICAgICAgICB0b3A6IDUwJTtcbiAgICAgICAgICBsZWZ0OiAxNS4zODQ2MTUzODQ2JTsgfVxuICAgICAgICAjcGFnZS1wcm9kdWN0cyA+IC5jdGEgLmN0YV9fYmFja2dyb3VuZCA+IGRpdjpudGgtY2hpbGQoMykge1xuICAgICAgICAgIG9wYWNpdHk6IDAuMDk7XG4gICAgICAgICAgdG9wOiAyNSU7XG4gICAgICAgICAgbGVmdDogMzAuNzY5MjMwNzY5MiU7IH1cbiAgICAgICAgI3BhZ2UtcHJvZHVjdHMgPiAuY3RhIC5jdGFfX2JhY2tncm91bmQgPiBkaXY6bnRoLWNoaWxkKDQpIHtcbiAgICAgICAgICBvcGFjaXR5OiAwLjE1O1xuICAgICAgICAgIHRvcDogMCU7XG4gICAgICAgICAgbGVmdDogNDYuMTUzODQ2MTUzOCU7IH1cbiAgICAgICAgI3BhZ2UtcHJvZHVjdHMgPiAuY3RhIC5jdGFfX2JhY2tncm91bmQgPiBkaXY6bnRoLWNoaWxkKDUpIHtcbiAgICAgICAgICBvcGFjaXR5OiAwLjE2O1xuICAgICAgICAgIHRvcDogLTI1JTtcbiAgICAgICAgICBsZWZ0OiA2MS41Mzg0NjE1Mzg1JTsgfVxuICAgICAgICAjcGFnZS1wcm9kdWN0cyA+IC5jdGEgLmN0YV9fYmFja2dyb3VuZCA+IGRpdjpudGgtY2hpbGQoNikge1xuICAgICAgICAgIG9wYWNpdHk6IDAuMDg7XG4gICAgICAgICAgdG9wOiAtNTAlO1xuICAgICAgICAgIGxlZnQ6IDc2LjkyMzA3NjkyMzElOyB9XG4gICAgICAgIEBtZWRpYSAobWF4LXdpZHRoOiA3NjhweCkge1xuICAgICAgICAgICNwYWdlLXByb2R1Y3RzID4gLmN0YSAuY3RhX19iYWNrZ3JvdW5kID4gZGl2Om50aC1jaGlsZCgxKSB7XG4gICAgICAgICAgICBvcGFjaXR5OiAwLjA1O1xuICAgICAgICAgICAgdG9wOiA2MCU7XG4gICAgICAgICAgICBsZWZ0OiAwJTsgfVxuICAgICAgICAgICNwYWdlLXByb2R1Y3RzID4gLmN0YSAuY3RhX19iYWNrZ3JvdW5kID4gZGl2Om50aC1jaGlsZCgyKSB7XG4gICAgICAgICAgICBvcGFjaXR5OiAwLjEwO1xuICAgICAgICAgICAgdG9wOiA0NSU7XG4gICAgICAgICAgICBsZWZ0OiAyNSU7IH1cbiAgICAgICAgICAjcGFnZS1wcm9kdWN0cyA+IC5jdGEgLmN0YV9fYmFja2dyb3VuZCA+IGRpdjpudGgtY2hpbGQoMykge1xuICAgICAgICAgICAgb3BhY2l0eTogMC4wOTtcbiAgICAgICAgICAgIHRvcDogMzAlO1xuICAgICAgICAgICAgbGVmdDogNTAlOyB9XG4gICAgICAgICAgI3BhZ2UtcHJvZHVjdHMgPiAuY3RhIC5jdGFfX2JhY2tncm91bmQgPiBkaXY6bnRoLWNoaWxkKDQpIHtcbiAgICAgICAgICAgIG9wYWNpdHk6IDAuMTU7XG4gICAgICAgICAgICB0b3A6IDE1JTtcbiAgICAgICAgICAgIGxlZnQ6IDc1JTsgfVxuICAgICAgICAgICNwYWdlLXByb2R1Y3RzID4gLmN0YSAuY3RhX19iYWNrZ3JvdW5kID4gZGl2Om50aC1jaGlsZCg1KSB7XG4gICAgICAgICAgICBvcGFjaXR5OiAwLjE2O1xuICAgICAgICAgICAgdG9wOiAwJTtcbiAgICAgICAgICAgIGxlZnQ6IDEwMCU7IH1cbiAgICAgICAgICAjcGFnZS1wcm9kdWN0cyA+IC5jdGEgLmN0YV9fYmFja2dyb3VuZCA+IGRpdjpudGgtY2hpbGQoNikge1xuICAgICAgICAgICAgb3BhY2l0eTogMC4wODtcbiAgICAgICAgICAgIHRvcDogLTE1JTtcbiAgICAgICAgICAgIGxlZnQ6IDEyNSU7IH0gfVxuICAgICNwYWdlLXByb2R1Y3RzID4gLmN0YSBoZ3JvdXAge1xuICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICAgbWF4LXdpZHRoOiA4MzBweDtcbiAgICAgIHBhZGRpbmctYm90dG9tOiAzNTRweDtcbiAgICAgIHBhZGRpbmctdG9wOiA1NHB4OyB9XG4gICAgICAjcGFnZS1wcm9kdWN0cyA+IC5jdGEgaGdyb3VwIGgzIHtcbiAgICAgICAgZm9udC1mYW1pbHk6IFwiUm9ib3RvIE1vbm9cIiwgTWVubG8sIE1vbmFjbywgQ29uc29sYXMsIFwiQ291cmllciBOZXdcIiwgbW9ub3NwYWNlO1xuICAgICAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xuICAgICAgICBsZXR0ZXItc3BhY2luZzogMC4xOGVtO1xuICAgICAgICBmb250LXNpemU6IDEycHg7XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxOHB4O1xuICAgICAgICBmb250LXdlaWdodDogNjAwO1xuICAgICAgICBjb2xvcjogI2UzZTZmZjsgfVxuICAgICAgI3BhZ2UtcHJvZHVjdHMgPiAuY3RhIGhncm91cCBoMSB7XG4gICAgICAgIG1hcmdpbi10b3A6IDM2cHg7XG4gICAgICAgIGZvbnQtc2l6ZTogNTZweDtcbiAgICAgICAgbGluZS1oZWlnaHQ6IDYwcHg7XG4gICAgICAgIGZvbnQtd2VpZ2h0OiA3MDA7XG4gICAgICAgIGxldHRlci1zcGFjaW5nOiAtLjAzOGVtO1xuICAgICAgICBtYXJnaW4tYm90dG9tOiAyNjR4OyB9XG4gICAgICAjcGFnZS1wcm9kdWN0cyA+IC5jdGEgaGdyb3VwIHAge1xuICAgICAgICBsZXR0ZXItc3BhY2luZzogLS4wM2VtO1xuICAgICAgICBtYXgtd2lkdGg6IDcyNHB4O1xuICAgICAgICBsaW5lLWhlaWdodDogMS44ZW07XG4gICAgICAgIG1hcmdpbjogMCBhdXRvO1xuICAgICAgICBmb250LXNpemU6IDIycHg7XG4gICAgICAgIGZvbnQtd2VpZ2h0OiA0MDA7XG4gICAgICAgIGNvbG9yOiAjZmZmO1xuICAgICAgICBmb250LWZhbWlseTogXCJHcmFwaGlrXCIsIFwiQXZlbmlyIE5leHRcIiwgXCJIZWx2ZXRpY2EgTmV1ZVwiLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7IH1cbiAgICAgICNwYWdlLXByb2R1Y3RzID4gLmN0YSBoZ3JvdXAgLmN0YS1idXR0b25zIHtcbiAgICAgICAgbWFyZ2luLXRvcDogMzBweDtcbiAgICAgICAgcGFkZGluZy1sZWZ0OiAyNHB4O1xuICAgICAgICBwYWRkaW5nLXJpZ2h0OiAyNHB4O1xuICAgICAgICBjb2xvcjogd2hpdGU7XG4gICAgICAgIGxldHRlci1zcGFjaW5nOiAtLjAyZW07IH1cbiAgICAgICAgI3BhZ2UtcHJvZHVjdHMgPiAuY3RhIGhncm91cCAuY3RhLWJ1dHRvbnMgPiAuYnRuIHtcbiAgICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICM3ODk4ZmY7XG4gICAgICAgICAgYm9yZGVyLXJhZGl1czogMmVtO1xuICAgICAgICAgIGRpc3BsYXk6IGlubGluZS1mbGV4O1xuICAgICAgICAgIGZvbnQtc2l6ZTogMTVweDtcbiAgICAgICAgICBmb250LXdlaWdodDogNzAwO1xuICAgICAgICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XG4gICAgICAgICAgbGV0dGVyLXNwYWNpbmc6IDAuMTBlbTtcbiAgICAgICAgICBwYWRkaW5nOiAxNHB4IDI2cHg7IH1cbiAgICAgICAgICAjcGFnZS1wcm9kdWN0cyA+IC5jdGEgaGdyb3VwIC5jdGEtYnV0dG9ucyA+IC5idG46bm90KDpob3Zlcikge1xuICAgICAgICAgICAgYm94LXNoYWRvdzogbm9uZTsgfVxuICAgICAgICAjcGFnZS1wcm9kdWN0cyA+IC5jdGEgaGdyb3VwIC5jdGEtYnV0dG9ucyA+IC5idG4tLXByaW1hcnkge1xuICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICNmZmY7XG4gICAgICAgICAgY29sb3I6ICM0YTY4ZmY7IH1cbiAgICAgICAgICAjcGFnZS1wcm9kdWN0cyA+IC5jdGEgaGdyb3VwIC5jdGEtYnV0dG9ucyA+IC5idG4tLXByaW1hcnk6YWZ0ZXIge1xuICAgICAgICAgICAgdHJhbnNpdGlvbjogdHJhbnNmb3JtIDAuM3M7XG4gICAgICAgICAgICBjb250ZW50OiAnXFxmMjg3JztcbiAgICAgICAgICAgIGZvbnQtZmFtaWx5OiAnSW9uaWNvbnMnO1xuICAgICAgICAgICAgZm9udC1zaXplOiAxNXB4O1xuICAgICAgICAgICAgbWFyZ2luLWxlZnQ6IDhweDsgfVxuICAgICAgICAgICNwYWdlLXByb2R1Y3RzID4gLmN0YSBoZ3JvdXAgLmN0YS1idXR0b25zID4gLmJ0bi0tcHJpbWFyeTpob3ZlcjphZnRlciB7XG4gICAgICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoMnB4KTsgfVxuICAgICAgICAjcGFnZS1wcm9kdWN0cyA+IC5jdGEgaGdyb3VwIC5jdGEtYnV0dG9ucyAuc2FsZXMge1xuICAgICAgICAgIGNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNSk7XG4gICAgICAgICAgbWFyZ2luLXRvcDogNnB4O1xuICAgICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICAgICAgICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTtcbiAgICAgICAgICB0cmFuc2l0aW9uOiAuMnMgY29sb3I7IH1cbiAgICAgICAgICAjcGFnZS1wcm9kdWN0cyA+IC5jdGEgaGdyb3VwIC5jdGEtYnV0dG9ucyAuc2FsZXM6aG92ZXIge1xuICAgICAgICAgICAgY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC44KTsgfVxuICAgICAgQG1lZGlhIChtYXgtd2lkdGg6IDc2OHB4KSB7XG4gICAgICAgICNwYWdlLXByb2R1Y3RzID4gLmN0YSBoZ3JvdXAge1xuICAgICAgICAgIHBhZGRpbmctYm90dG9tOiAxNDBweDsgfSB9XG4gICAgICBAbWVkaWEgKG1heC13aWR0aDogNDgwcHgpIHtcbiAgICAgICAgI3BhZ2UtcHJvZHVjdHMgPiAuY3RhIGhncm91cCB7XG4gICAgICAgICAgcGFkZGluZy10b3A6IDE0cHg7IH1cbiAgICAgICAgICAjcGFnZS1wcm9kdWN0cyA+IC5jdGEgaGdyb3VwIGgxIHtcbiAgICAgICAgICAgIGZvbnQtc2l6ZTogNDBweDtcbiAgICAgICAgICAgIGxpbmUtaGVpZ2h0OiA0NnB4OyB9XG4gICAgICAgICAgI3BhZ2UtcHJvZHVjdHMgPiAuY3RhIGhncm91cCBoMyB7XG4gICAgICAgICAgICBtYXgtd2lkdGg6IDI0NnB4O1xuICAgICAgICAgICAgbWFyZ2luLWxlZnQ6IGF1dG87XG4gICAgICAgICAgICBtYXJnaW4tcmlnaHQ6IGF1dG87IH1cbiAgICAgICAgICAjcGFnZS1wcm9kdWN0cyA+IC5jdGEgaGdyb3VwIHAge1xuICAgICAgICAgICAgZm9udC1zaXplOiAxOHB4O1xuICAgICAgICAgICAgbGluZS1oZWlnaHQ6IDEuNmVtOyB9XG4gICAgICAgICAgI3BhZ2UtcHJvZHVjdHMgPiAuY3RhIGhncm91cCAuYnRuIHtcbiAgICAgICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgICAgICAgbWFyZ2luLXJpZ2h0OiAwO1xuICAgICAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gICAgICAgICAgICBtYXJnaW4tYm90dG9tOiA4cHg7IH0gfVxuICAjcGFnZS1wcm9kdWN0cyAuY3RhLW92ZXJsYXkge1xuICAgIG1hcmdpbi10b3A6IC0yMzlweDtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgei1pbmRleDogMTtcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIHBhZGRpbmc6IDAgMjBweDsgfVxuICAgICNwYWdlLXByb2R1Y3RzIC5jdGEtb3ZlcmxheSAuYXBwLXNjcmVlbnNob3Qge1xuICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgbWF4LXdpZHRoOiA5NjBweDtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6ICNmZmY7XG4gICAgICBiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0O1xuICAgICAgYmFja2dyb3VuZC1zaXplOiBjb3ZlcjtcbiAgICAgIGJvcmRlci1yYWRpdXM6IDE2cHg7XG4gICAgICBib3gtc2hhZG93OiAwIDhweCAxNnB4IHJnYmEoMCwgMTQsIDQxLCAwLjA4KSwgMCAzMHB4IDYwcHggcmdiYSgwLCAxMSwgMzQsIDAuMTUpOyB9XG4gICAgICAjcGFnZS1wcm9kdWN0cyAuY3RhLW92ZXJsYXkgLmFwcC1zY3JlZW5zaG90IGltZyB7XG4gICAgICAgIHdpZHRoOiAxMDAlOyB9XG4gICAgQG1lZGlhIChtYXgtd2lkdGg6IDc2OHB4KSB7XG4gICAgICAjcGFnZS1wcm9kdWN0cyAuY3RhLW92ZXJsYXkge1xuICAgICAgICBtYXJnaW4tdG9wOiAtNzZweDsgfSB9XG4gICNwYWdlLXByb2R1Y3RzIC5jdXN0b21lci1sb2dvcyB7XG4gICAgcGFkZGluZzogMDtcbiAgICB3aWR0aDogMTAwJTtcbiAgICBtYXgtd2lkdGg6IDEwMjRweDtcbiAgICBtYXJnaW4tdG9wOiAzMHB4O1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgZmxleC13cmFwOiB3cmFwO1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOyB9XG4gICAgI3BhZ2UtcHJvZHVjdHMgLmN1c3RvbWVyLWxvZ29zIFtjbGFzc149XCJjdXN0b21lci1sb2dvXCJdIHtcbiAgICAgIGJhY2tncm91bmQtaW1hZ2U6IHVybChcIi9pbWcvcHJvL3Byby1jdXN0b21lci1zcHJpdGUucG5nXCIpO1xuICAgICAgYmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdDtcbiAgICAgIGJhY2tncm91bmQtc2l6ZTogMTIxcHggMjU2cHg7XG4gICAgICBtYXJnaW46IDM0cHggNDJweDsgfVxuICAgIEBtZWRpYSAobWF4LXdpZHRoOiA5OTFweCkge1xuICAgICAgI3BhZ2UtcHJvZHVjdHMgLmN1c3RvbWVyLWxvZ29zIHtcbiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7IH1cbiAgICAgICAgI3BhZ2UtcHJvZHVjdHMgLmN1c3RvbWVyLWxvZ29zIFtjbGFzc149XCJjdXN0b21lci1sb2dvXCJdIHtcbiAgICAgICAgICBtYXJnaW46IDIycHggMzRweDsgfSB9XG4gICAgQG1lZGlhIChtYXgtd2lkdGg6IDc2OHB4KSB7XG4gICAgICAjcGFnZS1wcm9kdWN0cyAuY3VzdG9tZXItbG9nb3Mge1xuICAgICAgICBwYWRkaW5nOiA4cHg7IH1cbiAgICAgICAgI3BhZ2UtcHJvZHVjdHMgLmN1c3RvbWVyLWxvZ29zIFtjbGFzc149XCJjdXN0b21lci1sb2dvXCJdIHtcbiAgICAgICAgICBtYXJnaW46IDE2cHggMThweDsgfSB9XG4gICAgI3BhZ2UtcHJvZHVjdHMgLmN1c3RvbWVyLWxvZ29zIC5jdXN0b21lci1sb2dvLS1sZW5kaW5nY2x1YiB7XG4gICAgICB3aWR0aDogMTIxcHg7XG4gICAgICBoZWlnaHQ6IDE4cHg7XG4gICAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwIDA7IH1cbiAgICAjcGFnZS1wcm9kdWN0cyAuY3VzdG9tZXItbG9nb3MgLmN1c3RvbWVyLWxvZ28tLW1jZG9uYWxkcyB7XG4gICAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwIC0xOXB4O1xuICAgICAgd2lkdGg6IDI0cHg7XG4gICAgICBoZWlnaHQ6IDIwcHg7IH1cbiAgICAjcGFnZS1wcm9kdWN0cyAuY3VzdG9tZXItbG9nb3MgLmN1c3RvbWVyLWxvZ28tLXN0dWR5IHtcbiAgICAgIGJhY2tncm91bmQtcG9zaXRpb246IDAgLTQwcHg7XG4gICAgICB3aWR0aDogMTE4cHg7XG4gICAgICBoZWlnaHQ6IDE4cHg7IH1cbiAgICAjcGFnZS1wcm9kdWN0cyAuY3VzdG9tZXItbG9nb3MgLmN1c3RvbWVyLWxvZ28tLWNhdCB7XG4gICAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwIC01OXB4O1xuICAgICAgd2lkdGg6IDM0cHg7XG4gICAgICBoZWlnaHQ6IDIwcHg7IH1cbiAgICAjcGFnZS1wcm9kdWN0cyAuY3VzdG9tZXItbG9nb3MgLmN1c3RvbWVyLWxvZ28tLWdlIHtcbiAgICAgIGJhY2tncm91bmQtcG9zaXRpb246IDAgLTgwcHg7XG4gICAgICB3aWR0aDogMjRweDtcbiAgICAgIGhlaWdodDogMjRweDsgfVxuICAgICNwYWdlLXByb2R1Y3RzIC5jdXN0b21lci1sb2dvcyAuY3VzdG9tZXItbG9nby0tY29tY2FzdCB7XG4gICAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwIC0xMDVweDtcbiAgICAgIHdpZHRoOiA3M3B4O1xuICAgICAgaGVpZ2h0OiAyMHB4OyB9XG4gICAgI3BhZ2UtcHJvZHVjdHMgLmN1c3RvbWVyLWxvZ29zIC5jdXN0b21lci1sb2dvLS1hbXRyYWsge1xuICAgICAgYmFja2dyb3VuZC1wb3NpdGlvbjogMCAtMTI2cHg7XG4gICAgICB3aWR0aDogNDdweDtcbiAgICAgIGhlaWdodDogMjBweDsgfVxuICAgICNwYWdlLXByb2R1Y3RzIC5jdXN0b21lci1sb2dvcyAuY3VzdG9tZXItbG9nby0tYWlyYnVzIHtcbiAgICAgIGJhY2tncm91bmQtcG9zaXRpb246IDAgLTE0N3B4O1xuICAgICAgd2lkdGg6IDEwN3B4O1xuICAgICAgaGVpZ2h0OiAyMHB4OyB9XG4gICAgI3BhZ2UtcHJvZHVjdHMgLmN1c3RvbWVyLWxvZ29zIC5jdXN0b21lci1sb2dvLS1hYWEge1xuICAgICAgYmFja2dyb3VuZC1wb3NpdGlvbjogMCAtMTY4cHg7XG4gICAgICB3aWR0aDogNDVweDtcbiAgICAgIGhlaWdodDogMjdweDsgfVxuICAgICNwYWdlLXByb2R1Y3RzIC5jdXN0b21lci1sb2dvcyAuY3VzdG9tZXItbG9nby0tZGVsb2l0dGUge1xuICAgICAgYmFja2dyb3VuZC1wb3NpdGlvbjogMCAtMTk1cHg7XG4gICAgICB3aWR0aDogODdweDtcbiAgICAgIGhlaWdodDogMTZweDsgfVxuICAgICNwYWdlLXByb2R1Y3RzIC5jdXN0b21lci1sb2dvcyAuY3VzdG9tZXItbG9nby0tdXNhYSB7XG4gICAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwIC0yMTJweDtcbiAgICAgIHdpZHRoOiAyMXB4O1xuICAgICAgaGVpZ2h0OiAyNHB4OyB9XG4gICAgI3BhZ2UtcHJvZHVjdHMgLmN1c3RvbWVyLWxvZ29zIC5jdXN0b21lci1sb2dvLS1pbmcge1xuICAgICAgYmFja2dyb3VuZC1wb3NpdGlvbjogMCAtMjM3cHg7XG4gICAgICB3aWR0aDogNzNweDtcbiAgICAgIGhlaWdodDogMTlweDsgfVxuICAjcGFnZS1wcm9kdWN0cyAucHJvLXZpZGVvIHtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIHotaW5kZXg6IDE7IH1cbiAgICAjcGFnZS1wcm9kdWN0cyAucHJvLXZpZGVvOmJlZm9yZSB7XG4gICAgICBjb250ZW50OiBcIlwiO1xuICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICBoZWlnaHQ6IDUwJTtcbiAgICAgIGxlZnQ6IDA7XG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICB0b3A6IDA7XG4gICAgICB3aWR0aDogMTAwJTtcbiAgICAgIHotaW5kZXg6IDE7IH1cbiAgICAjcGFnZS1wcm9kdWN0cyAucHJvLXZpZGVvIC52aWRlby1wbGF5ZXIge1xuICAgICAgbWF4LXdpZHRoOiA5MDBweDtcbiAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICAgei1pbmRleDogMjsgfVxuICAgICAgI3BhZ2UtcHJvZHVjdHMgLnByby12aWRlbyAudmlkZW8tcGxheWVyOmhvdmVyIHtcbiAgICAgICAgY3Vyc29yOiBwb2ludGVyOyB9XG4gICAgICAjcGFnZS1wcm9kdWN0cyAucHJvLXZpZGVvIC52aWRlby1wbGF5ZXI6bm90KC5pcy1wbGF5aW5nKTpob3ZlciAudmlkZW8tcGxheWVyLWZyYW1lIHtcbiAgICAgICAgdHJhbnNmb3JtOiBzY2FsZSgwLjk5KTsgfVxuICAgICAgI3BhZ2UtcHJvZHVjdHMgLnByby12aWRlbyAudmlkZW8tcGxheWVyOm5vdCguaXMtcGxheWluZyk6aG92ZXIgLnZpZGVvLXBsYXllci1idXR0b24ge1xuICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlLCAtNTAlKSBzY2FsZSgxLjA1KTsgfVxuICAgICAgI3BhZ2UtcHJvZHVjdHMgLnByby12aWRlbyAudmlkZW8tcGxheWVyLmlzLXJlYWR5IC52aWRlby1wbGF5ZXItYnV0dG9uIHtcbiAgICAgICAgZGlzcGxheTogYmxvY2s7IH1cbiAgICAgICNwYWdlLXByb2R1Y3RzIC5wcm8tdmlkZW8gLnZpZGVvLXBsYXllci5pcy1wbGF5aW5nIC52aWRlby1wbGF5ZXItYnV0dG9uIHtcbiAgICAgICAgZGlzcGxheTogbm9uZTsgfVxuICAgICNwYWdlLXByb2R1Y3RzIC5wcm8tdmlkZW8gLnZpZGVvLXBsYXllci1idXR0b24ge1xuICAgICAgZGlzcGxheTogbm9uZTtcbiAgICAgIGxlZnQ6IDUwJTtcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgIHRvcDogNTAlO1xuICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoLTUwJSwgLTUwJSkgc2NhbGUoMSk7XG4gICAgICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gNDAwbXMgY3ViaWMtYmV6aWVyKDAuMTc1LCAwLjg4NSwgMC4zMiwgMS4yNzUpO1xuICAgICAgd2lkdGg6IDgwcHg7XG4gICAgICB6LWluZGV4OiAxOyB9XG4gICAgI3BhZ2UtcHJvZHVjdHMgLnByby12aWRlbyAudmlkZW8tcGxheWVyLWZyYW1lIHtcbiAgICAgIGJhY2tncm91bmQtaW1hZ2U6IHVybChcIi9pbWcvcHJvL3Byby1kYXNoLXZpZGVvLXNjcmVlbnNob3QucG5nXCIpO1xuICAgICAgYmFja2dyb3VuZC1wb3NpdGlvbjogY2VudGVyIGNlbnRlcjtcbiAgICAgIGJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7XG4gICAgICBiYWNrZ3JvdW5kLXNpemU6IGNvbnRhaW47XG4gICAgICBib3JkZXItcmFkaXVzOiA4cHg7XG4gICAgICBoZWlnaHQ6IDA7XG4gICAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgICAgcGFkZGluZy1ib3R0b206IDY0LjY3JTtcbiAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgIHRyYW5zZm9ybTogc2NhbGUoMSk7XG4gICAgICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gNDAwbXMgY3ViaWMtYmV6aWVyKDAuMTksIDEsIDAuMjIsIDEpOyB9XG4gICAgICAjcGFnZS1wcm9kdWN0cyAucHJvLXZpZGVvIC52aWRlby1wbGF5ZXItZnJhbWUgPiBpZnJhbWUge1xuICAgICAgICBoZWlnaHQ6IDEwMCU7XG4gICAgICAgIGxlZnQ6IDA7XG4gICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgdG9wOiAwO1xuICAgICAgICB3aWR0aDogMTAwJTsgfVxuICAjcGFnZS1wcm9kdWN0cyAucHJvLWJlbmVmaXRzIHtcbiAgICBwYWRkaW5nLWxlZnQ6IDYwcHg7IH1cbiAgICAjcGFnZS1wcm9kdWN0cyAucHJvLWJlbmVmaXRzIHVsIHtcbiAgICAgIGxpc3Qtc3R5bGUtdHlwZTogbm9uZTtcbiAgICAgIG1hcmdpbjogMDtcbiAgICAgIHBhZGRpbmc6IDA7IH1cbiAgICAjcGFnZS1wcm9kdWN0cyAucHJvLWJlbmVmaXRzIGxpIHtcbiAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgIHBhZGRpbmctbGVmdDogNDBweDsgfVxuICAgICAgI3BhZ2UtcHJvZHVjdHMgLnByby1iZW5lZml0cyBsaSArIGxpIHtcbiAgICAgICAgbWFyZ2luLXRvcDogMjJweDsgfVxuICAgICAgI3BhZ2UtcHJvZHVjdHMgLnByby1iZW5lZml0cyBsaTo6YmVmb3JlIHtcbiAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgIGNvbnRlbnQ6ICcnO1xuICAgICAgICB3aWR0aDogMjRweDtcbiAgICAgICAgaGVpZ2h0OiAyNHB4O1xuICAgICAgICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXCJkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQURFQUFBQXdDQVlBQUFDNHdKSzVBQUFEL0VsRVFWUm9nYzNhMjR0VlpSekc4YzlhYzlqT09PaklNR29NU1hReFJCYzE2VVdTNFlWaWtCS0tVR1RFVUYzNUJ3amhYNUJDRjBFWFJoY1ZVMFFVQ0JZUjVBRVNKSWt3dTRrWUw0SkE4NUE1NmRDNFoyeFdGKzhhM1RPekQydnR3NW9lV096TjN1djkvWjR2NzNHOTc0cVNKSEh3WSsxUUg3WmhLMGJUYXhBRDZmL1RtTUprZXAzSE9jeTBtcmk3eGZKOTJJdHg3RUFwUTVtbks3NlhjUVlUT0tGSm9HWWhCbkVRaHpEVVpBd0M5UFBwZFJOdjR6Mmh4aklyenBrMHd1dENjM2hMYXdCTE5aVEduRXh6UkZrTDVvSFlpSlA0QU1ONTNPWFVjSnJqWkpxem9iSkNiTWRGN0d6T1YxUGFtZWJjM3VqRytPYy9HZ2JiajIreG9XVmIrYlVoemIyLzNrMk5hbUkvdnBCdDFPbVVTcW1IbWlEMUlMYmowd2IzRktWWThGSzFhZFV5dUJHZlc5a2FXS3FTNEdsWlo2OEdFZUVUSzlNSEdtbUQ0RzNSOEZzTjRqWEZqa0o1dFZQd2VGOUxJUVp4dENnM0xlaW80QlhMSVE3cTdFVFdMZzBMWHJFWW9rOVlDNjJJaHRld090OHdja2p3dkFoaXIvYXVoVEpyWkIzN3RyQjNTeTZRSWNIeklvanhObnZMcEpGMTdCNmp1NHUxL2V4NWlsTDJ0ZlU0RHlENmhPZUJRbFVKc0tEK1hucXpRK3hBWHd4eDVGa0ZUMnpWQUdabStmSUNkKzVtRGxQQ3RsQVRrV2ZhN0xHdTZnSDhOWjA3M05ZWUloNXJtOE1HMmpqWVZnQVlqUkVsNGFHKzQxcS9oajN0QldBQkltSmQ2eGJyYS8wYVh0aTh1Tk8yQVFBR1EwMGtWdWN0MlY4S0UxUVdkUkFBQmtKTlJOa2Z5Z2tUMHI0dDRScHBVSWNkQmtBNlQwUlI5djJldnQ0d3M2N3REMjE3OTFodGtDSUFNQjBqaVNOM3NwYm9pdWlxNkppMVFBb0NnS2tZU1hmc3Q2d2xwc3VjK0RGOExtZ3BTSUVBTUJrajZlcHlLVStwMnpPMVFaN1lWQ2dBQ3hDcmVueWZ0MlF0a0cyamhRTEErUmdlWGU5TUZKbkxXN29hU0tYdXpuVWNvSXh6TVd4K3hGUnZ0eCthaVZJTFpQWWVYLy9VVVFEQ2p2cE1ETWRPK2JmVWJhTFpTUGRCMHRWbmVZNnZMbkQ5ZGx1TTF0TUVSQmV2Skk2ZDR2RVJhMys5NHZmNVJNWjVlTGxLUFd3YTR2SXQvcW5SeE5xb20zallRazNBTDVmOVhlcnhiaXRSeTNOY3Vsb0lBT0VzWTRZbHV4MERxN3dUUjI0VllxRTEzUkFPWTdBRTRzWnRmM1ozT1Z5NHBmeDZVOFZwMHJJZHdObDczbzhqM3hWcUtaOU80NlBLSDZwdFl5YnppWmR4dlFoSE9YVU5yeUtwL0xIV3J2aFZ2Q2hNSnY4WGxmR1M0RzJSNnAwOW5NVXJtTytRcVR5YUY3eWNyZlpub3dPVTQxYStSc3FwaCtPMWJzaHlDblFjendudHNXaGRTM1BYQkNEN1VkWlpqQWtqUTFFNm5lYXMyb1FxRlQvNVVPYWdWN0VMYndpVFRhZDBJODJ4UzVWT1hFMTVEeFVUZkNqc1V4MFcxaS90MHMwMDVtaWFJNmwvK3dNMWV6STZoU1BDQXV3QXZ0RmM1eStuWlEra3NZN0krVjRIcmI5bE00UFAwbXZGWGhYNkQzbVZLVFgyZkVOc0FBQUFBRWxGVGtTdVFtQ0NcIik7XG4gICAgICAgIGJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7XG4gICAgICAgIGJhY2tncm91bmQtc2l6ZTogMTAwJTtcbiAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICB0b3A6IDA7XG4gICAgICAgIGxlZnQ6IDA7IH1cbiAgICAgICNwYWdlLXByb2R1Y3RzIC5wcm8tYmVuZWZpdHMgbGkgaDQge1xuICAgICAgICBtYXJnaW46IDA7XG4gICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7XG4gICAgICAgIGZvbnQtc2l6ZTogMTZweDtcbiAgICAgICAgbGluZS1oZWlnaHQ6IDIwcHg7IH1cbiAgICAgICNwYWdlLXByb2R1Y3RzIC5wcm8tYmVuZWZpdHMgbGkgcCB7XG4gICAgICAgIGNvbG9yOiAjNTQ1YzZhO1xuICAgICAgICBmb250LXNpemU6IDE1cHg7XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAyNHB4OyB9XG4gICNwYWdlLXByb2R1Y3RzIC5oZXJvIHtcbiAgICBiYWNrZ3JvdW5kOiBuby1yZXBlYXQgY2VudGVyIGNlbnRlcjtcbiAgICBiYWNrZ3JvdW5kLXNpemU6IGNvdmVyO1xuICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgcGFkZGluZy10b3A6IDA7XG4gICAgcGFkZGluZy1ib3R0b206IDA7IH1cbiAgICAjcGFnZS1wcm9kdWN0cyAuaGVybyAuY29udGVudCB7XG4gICAgICB3aWR0aDogMzklO1xuICAgICAgdGV4dC1hbGlnbjogbGVmdDtcbiAgICAgIHBhZGRpbmctdG9wOiAyMDBweDtcbiAgICAgIHBhZGRpbmctYm90dG9tOiAyMjBweDtcbiAgICAgIGNvbG9yOiAjMDcwZjFhO1xuICAgICAgbWluLWhlaWdodDogNzI0cHg7XG4gICAgICBwb3NpdGlvbjogcmVsYXRpdmU7IH1cbiAgICAgICNwYWdlLXByb2R1Y3RzIC5oZXJvIC5jb250ZW50LmRhcmsge1xuICAgICAgICBjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjgpOyB9XG4gICAgICAgICNwYWdlLXByb2R1Y3RzIC5oZXJvIC5jb250ZW50LmRhcmsgaDIsXG4gICAgICAgICNwYWdlLXByb2R1Y3RzIC5oZXJvIC5jb250ZW50LmRhcmsgLmhlcm9fX2N0YSB7XG4gICAgICAgICAgY29sb3I6ICMxNTFkMmI7IH1cbiAgICAgICAgI3BhZ2UtcHJvZHVjdHMgLmhlcm8gLmNvbnRlbnQuZGFyayBwIHtcbiAgICAgICAgICBjb2xvcjogIzU5NmE4OTsgfVxuICAgICAgI3BhZ2UtcHJvZHVjdHMgLmhlcm8gLmNvbnRlbnQgaDIge1xuICAgICAgICBmb250LXNpemU6IDM2cHg7XG4gICAgICAgIGxldHRlci1zcGFjaW5nOiAtMC4wM2VtO1xuICAgICAgICBmb250LXdlaWdodDogNjAwO1xuICAgICAgICBtYXJnaW4tYm90dG9tOiAxMnB4OyB9XG4gICAgICAjcGFnZS1wcm9kdWN0cyAuaGVybyAuY29udGVudCBwIHtcbiAgICAgICAgZm9udC1zaXplOiAyMHB4O1xuICAgICAgICBsaW5lLWhlaWdodDogMzJweDtcbiAgICAgICAgZm9udC1mYW1pbHk6IFwiR3JhcGhpa1wiLCBcIkF2ZW5pciBOZXh0XCIsIFwiSGVsdmV0aWNhIE5ldWVcIiwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmO1xuICAgICAgICBmb250LXdlaWdodDogNDAwOyB9XG4gICAgICAjcGFnZS1wcm9kdWN0cyAuaGVybyAuY29udGVudCBoNCB7XG4gICAgICAgIGZvbnQtZmFtaWx5OiBcIlJvYm90byBNb25vXCIsIE1lbmxvLCBNb25hY28sIENvbnNvbGFzLCBcIkNvdXJpZXIgTmV3XCIsIG1vbm9zcGFjZTtcbiAgICAgICAgcGFkZGluZy10b3A6IDEwMHB4O1xuICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICAgIGNvbG9yOiAjODA4ZmE3OyB9XG4gICAgICAgICNwYWdlLXByb2R1Y3RzIC5oZXJvIC5jb250ZW50IGg0OjpiZWZvcmUge1xuICAgICAgICAgIGJhY2tncm91bmQ6IHVybChcIi9pbWcvcHJvL3Byb2R1Y3QtaGVhZGVyLWljb25zLnBuZ1wiKSAwIDAgbm8tcmVwZWF0O1xuICAgICAgICAgIGJhY2tncm91bmQtc2l6ZTogNjRweDtcbiAgICAgICAgICB3aWR0aDogNjRweDtcbiAgICAgICAgICBoZWlnaHQ6IDY0cHg7XG4gICAgICAgICAgY29udGVudDogJyc7XG4gICAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICAgIHRvcDogMDsgfVxuICAgICNwYWdlLXByb2R1Y3RzIC5oZXJvX19jdGEtYmFyIHtcbiAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICBhbGlnbi1pdGVtczogY2VudGVyOyB9XG4gICAgICAjcGFnZS1wcm9kdWN0cyAuaGVyb19fY3RhLWJhciBhICsgYSB7XG4gICAgICAgIG1hcmdpbi1sZWZ0OiAyMHB4OyB9XG4gICAgI3BhZ2UtcHJvZHVjdHMgLmhlcm9fX2N0YS1iYXItc2Vjb25kYXJ5IHtcbiAgICAgIG1hcmdpbi1sZWZ0OiAzMHB4OyB9XG4gICAgQG1lZGlhIChtYXgtd2lkdGg6IDc2N3B4KSB7XG4gICAgICAjcGFnZS1wcm9kdWN0cyAuaGVyb19fY3RhLWJhciB7XG4gICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47IH1cbiAgICAgICNwYWdlLXByb2R1Y3RzIC5oZXJvX19jdGEtYmFyLXNlY29uZGFyeSB7XG4gICAgICAgIG1hcmdpbi1sZWZ0OiAwO1xuICAgICAgICBtYXJnaW4tdG9wOiAyNHB4OyB9IH1cbiAgICAjcGFnZS1wcm9kdWN0cyAuaGVyb19fY3RhIHtcbiAgICAgIGJvcmRlci1ib3R0b20tc3R5bGU6IHNvbGlkO1xuICAgICAgYm9yZGVyLWJvdHRvbS13aWR0aDogMnB4O1xuICAgICAgY29sb3I6IGluaGVyaXQ7XG4gICAgICBmb250LXNpemU6IDE4cHg7XG4gICAgICBmb250LXdlaWdodDogNzAwO1xuICAgICAgcGFkZGluZy1ib3R0b206IDRweDtcbiAgICAgIHRyYW5zaXRpb246IGJvcmRlci1ib3R0b20tY29sb3IgMTAwbXMgZWFzZS1pbi1vdXQ7IH1cbiAgICAgICNwYWdlLXByb2R1Y3RzIC5oZXJvX19jdGE6YWZ0ZXIge1xuICAgICAgICBjb250ZW50OiAnXFxmMjg3JztcbiAgICAgICAgZm9udC1mYW1pbHk6ICdJb25pY29ucyc7XG4gICAgICAgIGZvbnQtc2l6ZTogMTZweDtcbiAgICAgICAgbWFyZ2luLWxlZnQ6IDVweDsgfVxuICAgICAgI3BhZ2UtcHJvZHVjdHMgLmhlcm9fX2N0YTpob3ZlciB7XG4gICAgICAgIGJvcmRlci1ib3R0b20tY29sb3I6IHRyYW5zcGFyZW50OyB9XG4gICAgI3BhZ2UtcHJvZHVjdHMgLmhlcm9fX2ljb24tbGluayB7XG4gICAgICB0cmFuc2l0aW9uOiBvcGFjaXR5IDAuM3M7XG4gICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgICBvcGFjaXR5OiAwLjc7IH1cbiAgICAgICNwYWdlLXByb2R1Y3RzIC5oZXJvX19pY29uLWxpbmsgaSB7XG4gICAgICAgIGZvbnQtc2l6ZTogMzBweDtcbiAgICAgICAgY29sb3I6ICNmZmY7IH1cbiAgICAgICNwYWdlLXByb2R1Y3RzIC5oZXJvX19pY29uLWxpbms6aG92ZXIge1xuICAgICAgICBvcGFjaXR5OiAxOyB9XG4gICAgI3BhZ2UtcHJvZHVjdHMgLmhlcm8gLmNvbnRhaW5lciB7XG4gICAgICBwb3NpdGlvbjogcmVsYXRpdmU7IH1cbiAgICAgICNwYWdlLXByb2R1Y3RzIC5oZXJvIC5jb250YWluZXI6OmJlZm9yZSB7XG4gICAgICAgIGJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7XG4gICAgICAgIGJhY2tncm91bmQtcG9zaXRpb246IHJpZ2h0IDA7XG4gICAgICAgIGJhY2tncm91bmQtc2l6ZTogY29udGFpbjtcbiAgICAgICAgdG9wOiAwO1xuICAgICAgICByaWdodDogMDtcbiAgICAgICAgbGVmdDogMDtcbiAgICAgICAgYm90dG9tOiAwO1xuICAgICAgICBjb250ZW50OiAnJztcbiAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgb3BhY2l0eTogMDtcbiAgICAgICAgdHJhbnNpdGlvbjogLjJzIG9wYWNpdHk7IH1cbiAgICAjcGFnZS1wcm9kdWN0cyAuaGVyby5hY3RpdmUgLmNvbnRhaW5lcjo6YmVmb3JlIHtcbiAgICAgIG9wYWNpdHk6IDE7IH1cbiAgICAjcGFnZS1wcm9kdWN0cyAuaGVybyBoNCB7XG4gICAgICBmb250LXNpemU6IDExcHg7XG4gICAgICBmb250LXdlaWdodDogNzAwO1xuICAgICAgbGV0dGVyLXNwYWNpbmc6IDAuMmVtO1xuICAgICAgY29sb3I6ICMyNzJhMmY7XG4gICAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xuICAgICAgbWFyZ2luLWJvdHRvbTogMzBweDsgfVxuICAgICNwYWdlLXByb2R1Y3RzIC5oZXJvIGgzIHtcbiAgICAgIGZvbnQtc2l6ZTogMzZweDtcbiAgICAgIGZvbnQtd2VpZ2h0OiA3MDA7XG4gICAgICBsZXR0ZXItc3BhY2luZzogLS4wMmVtO1xuICAgICAgbWFyZ2luLWJvdHRvbTogMzBweDsgfVxuICAgICNwYWdlLXByb2R1Y3RzIC5oZXJvIGgyIHtcbiAgICAgIGNvbG9yOiAjMjcyYTJmO1xuICAgICAgZm9udC1zaXplOiAzNnB4O1xuICAgICAgbWFyZ2luLWJvdHRvbTogMjNweDtcbiAgICAgIG1hcmdpbi10b3A6IDE0cHg7XG4gICAgICBmb250LXdlaWdodDogNzAwO1xuICAgICAgbGV0dGVyLXNwYWNpbmc6IC0uMDE1ZW07IH1cbiAgICAjcGFnZS1wcm9kdWN0cyAuaGVybyBwIHtcbiAgICAgIGZvbnQtc2l6ZTogMTZweDtcbiAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7XG4gICAgICBsZXR0ZXItc3BhY2luZzogLS4wMjZlbTtcbiAgICAgIGxpbmUtaGVpZ2h0OiAxLjhlbTtcbiAgICAgIG1hcmdpbi1ib3R0b206IDMwcHg7XG4gICAgICBjb2xvcjogIzVlNjc3NzsgfVxuICAgICAgI3BhZ2UtcHJvZHVjdHMgLmhlcm8gcCBzdHJvbmcge1xuICAgICAgICBjb2xvcjogIzI3MmEyZjtcbiAgICAgICAgZm9udC13ZWlnaHQ6IDcwMDsgfVxuICAgICAgI3BhZ2UtcHJvZHVjdHMgLmhlcm8gcCBhOmhvdmVyIHtcbiAgICAgICAgY29sb3I6ICM0YThiZmM7IH1cbiAgICAjcGFnZS1wcm9kdWN0cyAuaGVybyAuYnRuIHtcbiAgICAgIHBhZGRpbmc6IDEzcHggMTVweDtcbiAgICAgIGZvbnQtc2l6ZTogMTRweDtcbiAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7IH1cbiAgICAgICNwYWdlLXByb2R1Y3RzIC5oZXJvIC5idG4gc3Ryb25nIHtcbiAgICAgICAgZm9udC13ZWlnaHQ6IDcwMDsgfVxuICAgICAgI3BhZ2UtcHJvZHVjdHMgLmhlcm8gLmJ0bjo6YWZ0ZXIge1xuICAgICAgICBmb250LWZhbWlseTogJ0lvbmljb25zJztcbiAgICAgICAgY29udGVudDogJ1xcZjI4Nyc7XG4gICAgICAgIGZvbnQtc2l6ZTogMTVweDtcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEwcHg7XG4gICAgICAgIHZlcnRpY2FsLWFsaWduOiAtMXB4O1xuICAgICAgICBtYXJnaW4tbGVmdDogOHB4O1xuICAgICAgICBmb250LXdlaWdodDogNjAwO1xuICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgICAgIHRyYW5zaXRpb246IC4ycyB0cmFuc2Zvcm07IH1cbiAgICAgICNwYWdlLXByb2R1Y3RzIC5oZXJvIC5idG46aG92ZXI6OmFmdGVyIHtcbiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUzZCgycHgsIDAsIDApOyB9XG4gICAgQG1lZGlhIChtYXgtd2lkdGg6IDQ4MHB4KSB7XG4gICAgICAjcGFnZS1wcm9kdWN0cyAuaGVybyAuY29udGVudCBoMiB7XG4gICAgICAgIGZvbnQtc2l6ZTogMzBweDsgfVxuICAgICAgI3BhZ2UtcHJvZHVjdHMgLmhlcm8gLmNvbnRlbnQgcCB7XG4gICAgICAgIGZvbnQtc2l6ZTogMThweDtcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuNmVtOyB9IH1cbiAgI3BhZ2UtcHJvZHVjdHMgI292ZXJ2aWV3IHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xuICAgIGNvbG9yOiAjMjcyYTJmO1xuICAgIHBhZGRpbmctYm90dG9tOiAxODBweDtcbiAgICBwYWRkaW5nLXRvcDogMTQwcHg7IH1cbiAgICAjcGFnZS1wcm9kdWN0cyAjb3ZlcnZpZXcgaGdyb3VwIHtcbiAgICAgIG1heC13aWR0aDogNzQwcHg7XG4gICAgICBtYXJnaW46IDAgYXV0byA2OHB4OyB9XG4gICAgICAjcGFnZS1wcm9kdWN0cyAjb3ZlcnZpZXcgaGdyb3VwIGgzIHtcbiAgICAgICAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgICAgICAgY29sb3I6ICMwNzBmMWE7XG4gICAgICAgIG1hcmdpbi1ib3R0b206IDE0cHg7IH1cbiAgICAgICNwYWdlLXByb2R1Y3RzICNvdmVydmlldyBoZ3JvdXAgcCB7XG4gICAgICAgIGZvbnQtc2l6ZTogMjJweDtcbiAgICAgICAgbGluZS1oZWlnaHQ6IDM2cHg7XG4gICAgICAgIGNvbG9yOiAjNDM1NDZmO1xuICAgICAgICBmb250LXdlaWdodDogNDAwOyB9XG4gICAgI3BhZ2UtcHJvZHVjdHMgI292ZXJ2aWV3IC5mZWF0dXJlcyB7XG4gICAgICBwYWRkaW5nOiAwO1xuICAgICAgbGlzdC1zdHlsZTogbm9uZTtcbiAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG4gICAgICBtYXgtd2lkdGg6IDk2MHB4O1xuICAgICAgbWFyZ2luOiAwIGF1dG87IH1cbiAgICAgICNwYWdlLXByb2R1Y3RzICNvdmVydmlldyAuZmVhdHVyZXMgaDQge1xuICAgICAgICBmb250LXNpemU6IDIwcHg7XG4gICAgICAgIHRleHQtdHJhbnNmb3JtOiBub25lO1xuICAgICAgICBsZXR0ZXItc3BhY2luZzogLS4wMmVtO1xuICAgICAgICBtYXJnaW4tdG9wOiA1cHg7XG4gICAgICAgIG1hcmdpbi1ib3R0b206IDEzcHg7XG4gICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7IH1cbiAgICAgICNwYWdlLXByb2R1Y3RzICNvdmVydmlldyAuZmVhdHVyZXMgcCB7XG4gICAgICAgIGZvbnQtZmFtaWx5OiBcIkdyYXBoaWtcIiwgXCJBdmVuaXIgTmV4dFwiLCBcIkhlbHZldGljYSBOZXVlXCIsIEhlbHZldGljYSwgc2Fucy1zZXJpZjtcbiAgICAgICAgZm9udC1zaXplOiAxNnB4O1xuICAgICAgICBsaW5lLWhlaWdodDogMjhweDtcbiAgICAgICAgY29sb3I6ICM2ODdlOTk7XG4gICAgICAgIGxldHRlci1zcGFjaW5nOiAtLjAxNWVtO1xuICAgICAgICBmb250LXdlaWdodDogNDAwOyB9XG4gICAgI3BhZ2UtcHJvZHVjdHMgI292ZXJ2aWV3IGxpIHtcbiAgICAgIHBhZGRpbmctdG9wOiA2OHB4O1xuICAgICAgZmxleDogMCAxIDMyMHB4O1xuICAgICAgcG9zaXRpb246IHJlbGF0aXZlOyB9XG4gICAgICAjcGFnZS1wcm9kdWN0cyAjb3ZlcnZpZXcgbGk6OmJlZm9yZSB7XG4gICAgICAgIGJhY2tncm91bmQ6IHVybChcIi9pbWcvcHJvL3Byby1mZWF0dXJlLWljb25zLnBuZ1wiKSAwIDAgbm8tcmVwZWF0O1xuICAgICAgICBiYWNrZ3JvdW5kLXNpemU6IDQ4cHg7XG4gICAgICAgIGhlaWdodDogNDhweDtcbiAgICAgICAgd2lkdGg6IDQ4cHg7XG4gICAgICAgIGNvbnRlbnQ6ICcnO1xuICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgIHRvcDogMDsgfVxuICAgICAgI3BhZ2UtcHJvZHVjdHMgI292ZXJ2aWV3IGxpLmZhc3Rlcjo6YmVmb3JlIHtcbiAgICAgICAgYmFja2dyb3VuZC1wb3NpdGlvbjogMCAtNDhweDsgfVxuICAgICAgI3BhZ2UtcHJvZHVjdHMgI292ZXJ2aWV3IGxpLmhhcHBpZXI6OmJlZm9yZSB7XG4gICAgICAgIGJhY2tncm91bmQtcG9zaXRpb246IDAgLTk2cHg7IH1cbiAgICAgICNwYWdlLXByb2R1Y3RzICNvdmVydmlldyBsaSArIGxpIHtcbiAgICAgICAgbWFyZ2luLWxlZnQ6IDI0cHg7IH1cbiAgICBAbWVkaWEgKG1heC13aWR0aDogNTIwcHgpIHtcbiAgICAgICNwYWdlLXByb2R1Y3RzICNvdmVydmlldyAuZmVhdHVyZXMge1xuICAgICAgICBkaXNwbGF5OiBibG9jazsgfVxuICAgICAgI3BhZ2UtcHJvZHVjdHMgI292ZXJ2aWV3IGxpIHtcbiAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyOyB9XG4gICAgICAgICNwYWdlLXByb2R1Y3RzICNvdmVydmlldyBsaTo6YmVmb3JlIHtcbiAgICAgICAgICBsZWZ0OiBjYWxjKCA1MCUgLSAyNHB4KTsgfVxuICAgICAgICAjcGFnZS1wcm9kdWN0cyAjb3ZlcnZpZXcgbGkgKyBsaSB7XG4gICAgICAgICAgbWFyZ2luLWxlZnQ6IDA7IH0gfVxuICAgIEBtZWRpYSAobWF4LXdpZHRoOiA3NjhweCkge1xuICAgICAgI3BhZ2UtcHJvZHVjdHMgI292ZXJ2aWV3IHtcbiAgICAgICAgcGFkZGluZy1ib3R0b206IDY4cHg7XG4gICAgICAgIHBhZGRpbmctdG9wOiAxMDJweDsgfSB9XG4gICAgQG1lZGlhIChtYXgtd2lkdGg6IDQ4MHB4KSB7XG4gICAgICAjcGFnZS1wcm9kdWN0cyAjb3ZlcnZpZXcge1xuICAgICAgICBwYWRkaW5nLWJvdHRvbTogNDhweDtcbiAgICAgICAgcGFkZGluZy10b3A6IDcycHg7IH1cbiAgICAgICAgI3BhZ2UtcHJvZHVjdHMgI292ZXJ2aWV3IGhncm91cCB7XG4gICAgICAgICAgbWFyZ2luLWJvdHRvbTogNDJweDsgfVxuICAgICAgICAgICNwYWdlLXByb2R1Y3RzICNvdmVydmlldyBoZ3JvdXAgaDMge1xuICAgICAgICAgICAgZm9udC1zaXplOiAzMHB4OyB9XG4gICAgICAgICAgI3BhZ2UtcHJvZHVjdHMgI292ZXJ2aWV3IGhncm91cCBwIHtcbiAgICAgICAgICAgIGZvbnQtc2l6ZTogMThweDtcbiAgICAgICAgICAgIGxpbmUtaGVpZ2h0OiAxLjZlbTsgfSB9XG4gICNwYWdlLXByb2R1Y3RzICN1cGRhdGVzIHtcbiAgICBiYWNrZ3JvdW5kLWltYWdlOiBsaW5lYXItZ3JhZGllbnQoMGRlZywgd2hpdGUgMCUsICNmNmY4ZmIgMTAwJSk7XG4gICAgYmFja2dyb3VuZC1zaXplOiAxMDAlOyB9XG4gICAgI3BhZ2UtcHJvZHVjdHMgI3VwZGF0ZXMgaDQ6OmJlZm9yZSB7XG4gICAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwIDA7IH1cbiAgICAjcGFnZS1wcm9kdWN0cyAjdXBkYXRlcyAuY29udGVudCB7XG4gICAgICBwYWRkaW5nLXRvcDogMTc5cHg7XG4gICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICB6LWluZGV4OiAxMDsgfVxuICAgICAgQG1lZGlhIChtYXgtd2lkdGg6IDEyMTlweCkge1xuICAgICAgICAjcGFnZS1wcm9kdWN0cyAjdXBkYXRlcyAuY29udGVudCB7XG4gICAgICAgICAgcGFkZGluZy10b3A6IDE0OHB4OyB9IH1cbiAgICAjcGFnZS1wcm9kdWN0cyAjdXBkYXRlcyAuYW5pbS11cGRhdGVzIHtcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgIHotaW5kZXg6IDQ7XG4gICAgICB0b3A6IDA7XG4gICAgICBib3R0b206IDA7XG4gICAgICBsZWZ0OiA1MCU7XG4gICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTEwMHB4KTtcbiAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICBhbGlnbi1pdGVtczogY2VudGVyOyB9XG4gICAgI3BhZ2UtcHJvZHVjdHMgI3VwZGF0ZXMgLmFuaW0tdXBkYXRlc19fcm9vdCB7XG4gICAgICB3aWR0aDogNzI2cHg7XG4gICAgICBoZWlnaHQ6IDQzN3B4O1xuICAgICAgcG9zaXRpb246IHJlbGF0aXZlOyB9XG4gICAgI3BhZ2UtcHJvZHVjdHMgI3VwZGF0ZXMgLmFuaW0tdXBkYXRlc19fZm9yZWdyb3VuZCxcbiAgICAjcGFnZS1wcm9kdWN0cyAjdXBkYXRlcyAuYW5pbS11cGRhdGVzX19iYWNrZ3JvdW5kIHtcbiAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgaGVpZ2h0OiAxMDAlO1xuICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgdG9wOiAwO1xuICAgICAgbGVmdDogMDsgfVxuICAgICNwYWdlLXByb2R1Y3RzICN1cGRhdGVzIC5hbmltLXVwZGF0ZXNfX2ZvcmVncm91bmQge1xuICAgICAgei1pbmRleDogMTA7XG4gICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVooMTAwMHB4KTsgfVxuICAgICNwYWdlLXByb2R1Y3RzICN1cGRhdGVzIC5hbmltLXVwZGF0ZXNfX2JhY2tncm91bmQge1xuICAgICAgei1pbmRleDogMTtcbiAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWigxMDBweCk7IH1cbiAgICAjcGFnZS1wcm9kdWN0cyAjdXBkYXRlcyAuYW5pbS11cGRhdGVzX19kZXZpY2Uge1xuICAgICAgd2lkdGg6IDcyNnB4O1xuICAgICAgaGVpZ2h0OiA0MzdweDtcbiAgICAgIGJhY2tncm91bmQtaW1hZ2U6IHVybChcIi9pbWcvcHJvL3VwZGF0ZXMtaWxsdXN0cmF0aW9uLWRldmljZS5wbmdcIik7XG4gICAgICBiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0O1xuICAgICAgYmFja2dyb3VuZC1zaXplOiA3MjZweCA0MzdweDtcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgIHRvcDogMDtcbiAgICAgIGxlZnQ6IDA7XG4gICAgICB6LWluZGV4OiA1O1xuICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVaKDUwMHB4KTsgfVxuICAgICNwYWdlLXByb2R1Y3RzICN1cGRhdGVzIC5hbmltLXVwZGF0ZXNfX3NjcmVlbiB7XG4gICAgICB3aWR0aDogMzA4cHg7XG4gICAgICBoZWlnaHQ6IDU1NHB4O1xuICAgICAgYmFja2dyb3VuZDogIzVkMzdmZjtcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgIHRvcDogMjhweDtcbiAgICAgIGxlZnQ6IDQwNnB4O1xuICAgICAgdHJhbnNmb3JtLW9yaWdpbjogdG9wIGxlZnQ7XG4gICAgICB0cmFuc2Zvcm06IHJvdGF0ZVgoNjBkZWcpIHJvdGF0ZVkoMC43ZGVnKSByb3RhdGVaKDM2LjVkZWcpIHNrZXcoMmRlZywgLTEuNWRlZyk7IH1cbiAgICBAbWVkaWEgKG1heC13aWR0aDogOTkxcHgpIHtcbiAgICAgICNwYWdlLXByb2R1Y3RzICN1cGRhdGVzIC5hbmltLXVwZGF0ZXMge1xuICAgICAgICBkaXNwbGF5OiBub25lOyB9XG4gICAgICAjcGFnZS1wcm9kdWN0cyAjdXBkYXRlcyAuY29udGVudCB7XG4gICAgICAgIG1pbi1oZWlnaHQ6IDA7XG4gICAgICAgIHBhZGRpbmctdG9wOiA2NHB4O1xuICAgICAgICBwYWRkaW5nLWJvdHRvbTogNjRweDtcbiAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsgfVxuICAgICAgICAjcGFnZS1wcm9kdWN0cyAjdXBkYXRlcyAuY29udGVudCBoNDo6YmVmb3JlIHtcbiAgICAgICAgICBsZWZ0OiBjYWxjKDUwJSAtIDMycHgpOyB9IH1cbiAgI3BhZ2UtcHJvZHVjdHMgI2J1aWxkIHtcbiAgICBiYWNrZ3JvdW5kLWltYWdlOiBsaW5lYXItZ3JhZGllbnQoMGRlZywgd2hpdGUgMCUsICNmNmY4ZmIgMTAwJSk7XG4gICAgcGFkZGluZzogMTAwcHggMDsgfVxuICAgICNwYWdlLXByb2R1Y3RzICNidWlsZCBoNDo6YmVmb3JlIHtcbiAgICAgIGJhY2tncm91bmQtcG9zaXRpb246IDAgLTY0cHg7IH1cbiAgICAjcGFnZS1wcm9kdWN0cyAjYnVpbGQgLmFuaW0tYnVpbGQge1xuICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgbGVmdDogMDtcbiAgICAgIHRvcDogMDtcbiAgICAgIGJvdHRvbTogMDtcbiAgICAgIHdpZHRoOiAzOSU7XG4gICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gICAgICBhbGlnbi1pdGVtczogY2VudGVyOyB9XG4gICAgI3BhZ2UtcHJvZHVjdHMgI2J1aWxkIC5hbmltLWJ1aWxkX190ZXh0IHtcbiAgICAgIGZpbGw6ICM1ZDM3ZmY7XG4gICAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xuICAgICAgZm9udC1zaXplOiAxMnB4O1xuICAgICAgZm9udC13ZWlnaHQ6IDcwMDtcbiAgICAgIGxldHRlci1zcGFjaW5nOiAwLjA1ZW07IH1cbiAgICAjcGFnZS1wcm9kdWN0cyAjYnVpbGQgLmNvbnRlbnQge1xuICAgICAgcGFkZGluZy10b3A6IDE0MHB4OyB9XG4gICAgQG1lZGlhIChtYXgtd2lkdGg6IDk5MXB4KSB7XG4gICAgICAjcGFnZS1wcm9kdWN0cyAjYnVpbGQgLmNvbnRhaW5lcjo6YmVmb3JlIHtcbiAgICAgICAgYmFja2dyb3VuZC1zaXplOiA0MCU7XG4gICAgICAgIHRvcDogMTI4cHg7XG4gICAgICAgIGJvdHRvbTogMTI4cHg7IH1cbiAgICAgICNwYWdlLXByb2R1Y3RzICNidWlsZCAuY29udGVudCB7XG4gICAgICAgIHBhZGRpbmctdG9wOiA2NHB4O1xuICAgICAgICBtaW4taGVpZ2h0OiAwO1xuICAgICAgICB3aWR0aDogNDAlOyB9IH1cbiAgICBAbWVkaWEgKG1heC13aWR0aDogNzY3cHgpIHtcbiAgICAgICNwYWdlLXByb2R1Y3RzICNidWlsZCB7XG4gICAgICAgIGJhY2tncm91bmQtaW1hZ2U6IG5vbmU7XG4gICAgICAgIHBhZGRpbmc6IDA7IH1cbiAgICAgICAgI3BhZ2UtcHJvZHVjdHMgI2J1aWxkIC5hbmltLWJ1aWxkIHtcbiAgICAgICAgICBkaXNwbGF5OiBub25lOyB9XG4gICAgICAgICNwYWdlLXByb2R1Y3RzICNidWlsZCAuY29udGVudCB7XG4gICAgICAgICAgbWluLWhlaWdodDogMDtcbiAgICAgICAgICBwYWRkaW5nLXRvcDogNjRweDtcbiAgICAgICAgICBwYWRkaW5nLWJvdHRvbTogNjRweDtcbiAgICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7IH1cbiAgICAgICAgICAjcGFnZS1wcm9kdWN0cyAjYnVpbGQgLmNvbnRlbnQgaDQ6OmJlZm9yZSB7XG4gICAgICAgICAgICBsZWZ0OiBjYWxjKDUwJSAtIDMycHgpOyB9IH1cbiAgI3BhZ2UtcHJvZHVjdHMgI3JlcG9ydGluZyB7XG4gICAgYmFja2dyb3VuZDogIzA4MWIxNztcbiAgICBwYWRkaW5nOiA1MHB4IDA7IH1cbiAgICAjcGFnZS1wcm9kdWN0cyAjcmVwb3J0aW5nIGg0LFxuICAgICNwYWdlLXByb2R1Y3RzICNyZXBvcnRpbmcgLmJ0biB7XG4gICAgICBjb2xvcjogIzYwN2Q3OTsgfVxuICAgICAgI3BhZ2UtcHJvZHVjdHMgI3JlcG9ydGluZyBoNDo6YmVmb3JlLFxuICAgICAgI3BhZ2UtcHJvZHVjdHMgI3JlcG9ydGluZyAuYnRuOjpiZWZvcmUge1xuICAgICAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwIC0yNTZweDsgfVxuICAgICNwYWdlLXByb2R1Y3RzICNyZXBvcnRpbmcgLmFuaW0tcmVwb3J0aW5nIHtcbiAgICAgIHdpZHRoOiAxMDg0cHg7XG4gICAgICBoZWlnaHQ6IDEwMCU7XG4gICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgIHRvcDogMDtcbiAgICAgIGxlZnQ6IDUwJTtcbiAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgtMjQwcHgpO1xuICAgICAgYm90dG9tOiAwO1xuICAgICAgei1pbmRleDogMTsgfVxuICAgICNwYWdlLXByb2R1Y3RzICNyZXBvcnRpbmcgI2FuaW0tcmVwb3J0aW5nX19zdmcge1xuICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICBoZWlnaHQ6IDEwMCU7IH1cbiAgICAjcGFnZS1wcm9kdWN0cyAjcmVwb3J0aW5nIC5hbmltLXJlcG9ydGluZ19fYmcge1xuICAgICAgZmlsbDogIzBkMmIyNTsgfVxuICAgICNwYWdlLXByb2R1Y3RzICNyZXBvcnRpbmcgLmFuaW0tcmVwb3J0aW5nX19zY2FuIHtcbiAgICAgIGFuaW1hdGlvbi1uYW1lOiBjeWNsZS1mYWRlO1xuICAgICAgYW5pbWF0aW9uLWR1cmF0aW9uOiAycztcbiAgICAgIGFuaW1hdGlvbi1kaXJlY3Rpb246IGFsdGVybmF0ZTtcbiAgICAgIGFuaW1hdGlvbi1pdGVyYXRpb24tY291bnQ6IGluZmluaXRlO1xuICAgICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogZWFzZTsgfVxuXG5Aa2V5ZnJhbWVzIGN5Y2xlLWZhZGUge1xuICBmcm9tIHtcbiAgICBvcGFjaXR5OiAwLjQ7IH1cbiAgdG8ge1xuICAgIG9wYWNpdHk6IDE7IH0gfVxuICAgICNwYWdlLXByb2R1Y3RzICNyZXBvcnRpbmcgLmFuaW0tcmVwb3J0aW5nX19idWcge1xuICAgICAgZmlsbDogI2ZmMzI2NztcbiAgICAgIHRyYW5zZm9ybS1vcmlnaW46IGNlbnRlciBjZW50ZXI7IH1cbiAgICAjcGFnZS1wcm9kdWN0cyAjcmVwb3J0aW5nIC5jb250ZW50IHtcbiAgICAgIHBhZGRpbmctdG9wOiAxNzJweDtcbiAgICAgIHdpZHRoOiA0MCU7XG4gICAgICB6LWluZGV4OiA1OyB9XG4gICAgQG1lZGlhIChtYXgtd2lkdGg6IDk5MXB4KSB7XG4gICAgICAjcGFnZS1wcm9kdWN0cyAjcmVwb3J0aW5nIC5jb250ZW50IHtcbiAgICAgICAgbWluLWhlaWdodDogMDtcbiAgICAgICAgcGFkZGluZy10b3A6IDY0cHg7XG4gICAgICAgIHdpZHRoOiAxMDAlOyB9XG4gICAgICAjcGFnZS1wcm9kdWN0cyAjcmVwb3J0aW5nIC5hbmltLXJlcG9ydGluZyB7XG4gICAgICAgIG9wYWNpdHk6IDAuNzsgfVxuICAgICAgI3BhZ2UtcHJvZHVjdHMgI3JlcG9ydGluZyAuYW5pbS1yZXBvcnRpbmdfX2NsaXBwZWQge1xuICAgICAgICB0cmFuc2Zvcm06IHNjYWxlKDAuOCk7IH0gfVxuICAgIEBtZWRpYSAobWF4LXdpZHRoOiA5OTFweCkge1xuICAgICAgI3BhZ2UtcHJvZHVjdHMgI3JlcG9ydGluZyB7XG4gICAgICAgIHBhZGRpbmc6IDA7IH1cbiAgICAgICAgI3BhZ2UtcHJvZHVjdHMgI3JlcG9ydGluZyAuYW5pbS1yZXBvcnRpbmcge1xuICAgICAgICAgIGRpc3BsYXk6IG5vbmU7IH1cbiAgICAgICAgI3BhZ2UtcHJvZHVjdHMgI3JlcG9ydGluZyAuY29udGVudCB7XG4gICAgICAgICAgbWluLWhlaWdodDogMDtcbiAgICAgICAgICBwYWRkaW5nLXRvcDogNjRweDtcbiAgICAgICAgICBwYWRkaW5nLWJvdHRvbTogNjRweDtcbiAgICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7IH1cbiAgICAgICAgICAjcGFnZS1wcm9kdWN0cyAjcmVwb3J0aW5nIC5jb250ZW50IGg0OjpiZWZvcmUge1xuICAgICAgICAgICAgbGVmdDogY2FsYyg1MCUgLSAzMnB4KTsgfSB9XG4gICNwYWdlLXByb2R1Y3RzICNwdXNoIHtcbiAgICBiYWNrZ3JvdW5kOiAjZmZiYzJhIG5vLXJlcGVhdCBjZW50ZXIgYm90dG9tO1xuICAgIGJhY2tncm91bmQtaW1hZ2U6IGxpbmVhci1ncmFkaWVudCh0byByaWdodCwgI2ZmY2UzOSAwJSwgI2ZmYWQyMCAxMDAlKTtcbiAgICBiYWNrZ3JvdW5kLXNpemU6IDEwMCU7IH1cbiAgICAjcGFnZS1wcm9kdWN0cyAjcHVzaCBoNCB7XG4gICAgICBjb2xvcjogI2QyNmQwMDsgfVxuICAgICAgI3BhZ2UtcHJvZHVjdHMgI3B1c2ggaDQ6OmJlZm9yZSB7XG4gICAgICAgIGJhY2tncm91bmQtcG9zaXRpb246IDAgLTMyMHB4OyB9XG4gICAgI3BhZ2UtcHJvZHVjdHMgI3B1c2ggLmNvbnRhaW5lcjo6YmVmb3JlIHtcbiAgICAgIGJhY2tncm91bmQtaW1hZ2U6IHVybChcIi9pbWcvcHJvL3Byb2R1Y3QtcHVzaC1pbWcucG5nXCIpO1xuICAgICAgYmFja2dyb3VuZC1wb3NpdGlvbjogbGVmdCAwO1xuICAgICAgdG9wOiA4MHB4O1xuICAgICAgYm90dG9tOiA4MHB4OyB9XG4gICAgICBAbWVkaWEgKG1heC13aWR0aDogMTIxOXB4KSB7XG4gICAgICAgICNwYWdlLXByb2R1Y3RzICNwdXNoIC5jb250YWluZXI6OmJlZm9yZSB7XG4gICAgICAgICAgdG9wOiAxMzBweDtcbiAgICAgICAgICBib3R0b206IDEzMHB4OyB9IH1cbiAgICAjcGFnZS1wcm9kdWN0cyAjcHVzaCAuY29udGVudCB7XG4gICAgICBwYWRkaW5nLXRvcDogMTcycHg7XG4gICAgICB3aWR0aDogMzUlOyB9XG4gICAgQG1lZGlhIChtYXgtd2lkdGg6IDk5MXB4KSB7XG4gICAgICAjcGFnZS1wcm9kdWN0cyAjcHVzaCAuY29udGFpbmVyOjpiZWZvcmUge1xuICAgICAgICBkaXNwbGF5OiBub25lOyB9XG4gICAgICAjcGFnZS1wcm9kdWN0cyAjcHVzaCAuY29udGVudCB7XG4gICAgICAgIG1pbi1oZWlnaHQ6IDA7XG4gICAgICAgIHBhZGRpbmctdG9wOiA2NHB4O1xuICAgICAgICBwYWRkaW5nLWJvdHRvbTogNjRweDtcbiAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsgfVxuICAgICAgICAjcGFnZS1wcm9kdWN0cyAjcHVzaCAuY29udGVudCBoNDo6YmVmb3JlIHtcbiAgICAgICAgICBsZWZ0OiBjYWxjKDUwJSAtIDMycHgpOyB9IH1cbiAgI3BhZ2UtcHJvZHVjdHMgI2F1dG9tYXRlIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjlmYWZjO1xuICAgIGJhY2tncm91bmQtaW1hZ2U6IGxpbmVhci1ncmFkaWVudCgwZGVnLCB3aGl0ZSAwJSwgI2Y2ZjhmYiAxMDAlKTtcbiAgICBiYWNrZ3JvdW5kLXNpemU6IDEwMCU7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIHBhZGRpbmctYm90dG9tOiAxNjBweDsgfVxuICAgICNwYWdlLXByb2R1Y3RzICNhdXRvbWF0ZSBoNDo6YmVmb3JlIHtcbiAgICAgIGJhY2tncm91bmQtcG9zaXRpb246IDAgLTEyOHB4OyB9XG4gICAgI3BhZ2UtcHJvZHVjdHMgI2F1dG9tYXRlIC5hbmltLWF1dG9tYXRlIHtcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgIHRvcDogMjIwcHg7XG4gICAgICBsZWZ0OiA1MCU7XG4gICAgICBtYXJnaW4tbGVmdDogLTQwMHB4OyB9XG4gICAgICAjcGFnZS1wcm9kdWN0cyAjYXV0b21hdGUgLmFuaW0tYXV0b21hdGUgc3ZnIC5jb25uZWN0b3Ige1xuICAgICAgICBvcGFjaXR5OiAwO1xuICAgICAgICBzdHJva2UtZGFzaGFycmF5OiA4MHB4OyB9XG4gICAgICAjcGFnZS1wcm9kdWN0cyAjYXV0b21hdGUgLmFuaW0tYXV0b21hdGUgc3ZnIHJlY3QuZm91ciB7XG4gICAgICAgIG9wYWNpdHk6IDAuNjsgfVxuICAgICAgI3BhZ2UtcHJvZHVjdHMgI2F1dG9tYXRlIC5hbmltLWF1dG9tYXRlIHN2ZyAjdG9wLFxuICAgICAgI3BhZ2UtcHJvZHVjdHMgI2F1dG9tYXRlIC5hbmltLWF1dG9tYXRlIHN2ZyAjYm90dG9tIHtcbiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOyB9XG4gICAgICAjcGFnZS1wcm9kdWN0cyAjYXV0b21hdGUgLmFuaW0tYXV0b21hdGUgc3ZnICNib3R0b20ge1xuICAgICAgICB6LWluZGV4OiAxOyB9XG4gICAgICAjcGFnZS1wcm9kdWN0cyAjYXV0b21hdGUgLmFuaW0tYXV0b21hdGUgc3ZnICN0b3Age1xuICAgICAgICB6LWluZGV4OiAyOyB9XG4gICAgICAjcGFnZS1wcm9kdWN0cyAjYXV0b21hdGUgLmFuaW0tYXV0b21hdGUgc3ZnID4gZyB7XG4gICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSg1MHB4KTsgfVxuICAgIEBtZWRpYSAobWF4LXdpZHRoOiAxMjE5cHgpIHtcbiAgICAgICNwYWdlLXByb2R1Y3RzICNhdXRvbWF0ZSB7XG4gICAgICAgIHBhZGRpbmctYm90dG9tOiAzOTBweDsgfVxuICAgICAgICAjcGFnZS1wcm9kdWN0cyAjYXV0b21hdGUgLmNvbnRlbnQge1xuICAgICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgICAgIG1heC13aWR0aDogNTAwcHg7XG4gICAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgICAgICAgIG1hcmdpbi1sZWZ0OiBhdXRvO1xuICAgICAgICAgIG1hcmdpbi1yaWdodDogYXV0bzsgfVxuICAgICAgICAjcGFnZS1wcm9kdWN0cyAjYXV0b21hdGUgLmNvbnRlbnQgaDQ6OmJlZm9yZSB7XG4gICAgICAgICAgbGVmdDogY2FsYyg1MCUgLSAzMnB4KTsgfVxuICAgICAgICAjcGFnZS1wcm9kdWN0cyAjYXV0b21hdGUgLmFuaW0tYXV0b21hdGUge1xuICAgICAgICAgIHRyYW5zZm9ybTogc2NhbGUoMC44KTtcbiAgICAgICAgICB0b3A6IDQ3MHB4O1xuICAgICAgICAgIG1hcmdpbi1sZWZ0OiAtNjcwcHg7IH0gfVxuICAgIEBtZWRpYSAobWF4LXdpZHRoOiA3NjhweCkge1xuICAgICAgI3BhZ2UtcHJvZHVjdHMgI2F1dG9tYXRlIHtcbiAgICAgICAgcGFkZGluZzogMDsgfVxuICAgICAgICAjcGFnZS1wcm9kdWN0cyAjYXV0b21hdGUgLmFuaW0tYXV0b21hdGUge1xuICAgICAgICAgIGRpc3BsYXk6IG5vbmU7IH1cbiAgICAgICAgI3BhZ2UtcHJvZHVjdHMgI2F1dG9tYXRlIC5jb250ZW50IHtcbiAgICAgICAgICBtaW4taGVpZ2h0OiAwO1xuICAgICAgICAgIHBhZGRpbmctdG9wOiA2NHB4O1xuICAgICAgICAgIHBhZGRpbmctYm90dG9tOiA2NHB4O1xuICAgICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsgfVxuICAgICAgICAgICNwYWdlLXByb2R1Y3RzICNhdXRvbWF0ZSAuY29udGVudCBoNDo6YmVmb3JlIHtcbiAgICAgICAgICAgIGxlZnQ6IGNhbGMoNTAlIC0gMzJweCk7IH0gfVxuICAgICNwYWdlLXByb2R1Y3RzICNhdXRvbWF0ZSAuYW5pbS1hdXRvbWF0ZV91aSB7XG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICB3aWR0aDogMTAwJTtcbiAgICAgIGhlaWdodDogMTAwJTsgfVxuICAgICAgI3BhZ2UtcHJvZHVjdHMgI2F1dG9tYXRlIC5hbmltLWF1dG9tYXRlX3VpID4gZGl2IHtcbiAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlLCAtNTAlKTtcbiAgICAgICAgbWF4LXdpZHRoOiAxMTRweDtcbiAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgICBvcGFjaXR5OiAwOyB9XG4gICAgICAgICNwYWdlLXByb2R1Y3RzICNhdXRvbWF0ZSAuYW5pbS1hdXRvbWF0ZV91aSA+IGRpdiBwIHtcbiAgICAgICAgICBmb250LWZhbWlseTogXCJHcmFwaGlrXCIsIFwiQXZlbmlyIE5leHRcIiwgXCJIZWx2ZXRpY2EgTmV1ZVwiLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7XG4gICAgICAgICAgbWFyZ2luOiAwO1xuICAgICAgICAgIGNvbG9yOiAjZmZmO1xuICAgICAgICAgIGZvbnQtc2l6ZTogMTNweDtcbiAgICAgICAgICBsaW5lLWhlaWdodDogMTdweDsgfVxuICAgICAgICAjcGFnZS1wcm9kdWN0cyAjYXV0b21hdGUgLmFuaW0tYXV0b21hdGVfdWkgPiBkaXYgc3BhbiB7XG4gICAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgICAgb3BhY2l0eTogMC42O1xuICAgICAgICAgIGZvbnQtZmFtaWx5OiAxMnB4OyB9XG4gICAgICAgICNwYWdlLXByb2R1Y3RzICNhdXRvbWF0ZSAuYW5pbS1hdXRvbWF0ZV91aSA+IGRpdjpiZWZvcmUge1xuICAgICAgICAgIGNvbnRlbnQ6ICcnO1xuICAgICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICAgIHdpZHRoOiAyMHB4O1xuICAgICAgICAgIGhlaWdodDogNTBweDtcbiAgICAgICAgICBtYXJnaW4tYm90dG9tOiAxMnB4O1xuICAgICAgICAgIGJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7XG4gICAgICAgICAgYmFja2dyb3VuZC1zaXplOiAxMDAlOyB9XG4gICAgICAjcGFnZS1wcm9kdWN0cyAjYXV0b21hdGUgLmFuaW0tYXV0b21hdGVfdWkgLm1hc3RlcjpiZWZvcmUge1xuICAgICAgICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXCIvaW1nL3Byby9wcm8tYXV0b21hdGUtYW5pbWF0aW9uL21hc3Rlci5wbmdcIik7XG4gICAgICAgIHdpZHRoOiAxMDBweDtcbiAgICAgICAgaGVpZ2h0OiAzMHB4O1xuICAgICAgICBiYWNrZ3JvdW5kLXNpemU6IDEwMHB4IDMwcHg7IH1cbiAgICAgICNwYWdlLXByb2R1Y3RzICNhdXRvbWF0ZSAuYW5pbS1hdXRvbWF0ZV91aSAuc3RhZ2luZzpiZWZvcmUge1xuICAgICAgICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXCIvaW1nL3Byby9wcm8tYXV0b21hdGUtYW5pbWF0aW9uL3N0YWdpbmcucG5nXCIpO1xuICAgICAgICB3aWR0aDogMTEwcHg7XG4gICAgICAgIGhlaWdodDogMzBweDtcbiAgICAgICAgYmFja2dyb3VuZC1zaXplOiAxMTBweCAzMHB4OyB9XG4gICAgICAjcGFnZS1wcm9kdWN0cyAjYXV0b21hdGUgLmFuaW0tYXV0b21hdGVfdWkgLnFhOmJlZm9yZSB7XG4gICAgICAgIGJhY2tncm91bmQtaW1hZ2U6IHVybChcIi9pbWcvcHJvL3Byby1hdXRvbWF0ZS1hbmltYXRpb24vcWEucG5nXCIpO1xuICAgICAgICB3aWR0aDogNjFweDtcbiAgICAgICAgaGVpZ2h0OiAzMHB4O1xuICAgICAgICBiYWNrZ3JvdW5kLXNpemU6IDYxcHggMzBweDsgfVxuICAgICAgI3BhZ2UtcHJvZHVjdHMgI2F1dG9tYXRlIC5hbmltLWF1dG9tYXRlX3VpIC5hbmRyb2lkOmJlZm9yZSxcbiAgICAgICNwYWdlLXByb2R1Y3RzICNhdXRvbWF0ZSAuYW5pbS1hdXRvbWF0ZV91aSAuaW9zOmJlZm9yZSxcbiAgICAgICNwYWdlLXByb2R1Y3RzICNhdXRvbWF0ZSAuYW5pbS1hdXRvbWF0ZV91aSAud2ViOmJlZm9yZSB7XG4gICAgICAgIHdpZHRoOiA2MnB4O1xuICAgICAgICBoZWlnaHQ6IDYycHg7XG4gICAgICAgIGJhY2tncm91bmQtc2l6ZTogNjJweCA2MnB4OyB9XG4gICAgICAjcGFnZS1wcm9kdWN0cyAjYXV0b21hdGUgLmFuaW0tYXV0b21hdGVfdWkgLmFuZHJvaWQ6YmVmb3JlIHtcbiAgICAgICAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFwiL2ltZy9wcm8vcHJvLWF1dG9tYXRlLWFuaW1hdGlvbi9hbmRyb2lkLnBuZ1wiKTsgfVxuICAgICAgI3BhZ2UtcHJvZHVjdHMgI2F1dG9tYXRlIC5hbmltLWF1dG9tYXRlX3VpIC5pb3M6YmVmb3JlIHtcbiAgICAgICAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFwiL2ltZy9wcm8vcHJvLWF1dG9tYXRlLWFuaW1hdGlvbi9pb3MucG5nXCIpOyB9XG4gICAgICAjcGFnZS1wcm9kdWN0cyAjYXV0b21hdGUgLmFuaW0tYXV0b21hdGVfdWkgLndlYjpiZWZvcmUge1xuICAgICAgICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXCIvaW1nL3Byby9wcm8tYXV0b21hdGUtYW5pbWF0aW9uL2pzLnBuZ1wiKTsgfVxuICAgICAgI3BhZ2UtcHJvZHVjdHMgI2F1dG9tYXRlIC5hbmltLWF1dG9tYXRlX3VpIC50ZXN0ZmxpZ2h0OmJlZm9yZSB7XG4gICAgICAgIGJhY2tncm91bmQtaW1hZ2U6IHVybChcIi9pbWcvcHJvL3Byby1hdXRvbWF0ZS1hbmltYXRpb24vdGVzdGZsaWdodC5wbmdcIik7XG4gICAgICAgIHdpZHRoOiA1M3B4O1xuICAgICAgICBoZWlnaHQ6IDUzcHg7XG4gICAgICAgIGJhY2tncm91bmQtc2l6ZTogNTNweCA1M3B4OyB9XG4gICAgICAjcGFnZS1wcm9kdWN0cyAjYXV0b21hdGUgLmFuaW0tYXV0b21hdGVfdWkgLnBsYXlzdG9yZTpiZWZvcmUge1xuICAgICAgICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXCIvaW1nL3Byby9wcm8tYXV0b21hdGUtYW5pbWF0aW9uL3BsYXlzdG9yZS5wbmdcIik7XG4gICAgICAgIHdpZHRoOiA1MHB4O1xuICAgICAgICBoZWlnaHQ6IDU1cHg7XG4gICAgICAgIGJhY2tncm91bmQtc2l6ZTogNTBweCA1NXB4OyB9XG4gICAgICAjcGFnZS1wcm9kdWN0cyAjYXV0b21hdGUgLmFuaW0tYXV0b21hdGVfdWkgLndlYmhvb2s6YmVmb3JlIHtcbiAgICAgICAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFwiL2ltZy9wcm8vcHJvLWF1dG9tYXRlLWFuaW1hdGlvbi93ZWJob29rLnBuZ1wiKTtcbiAgICAgICAgd2lkdGg6IDU4cHg7XG4gICAgICAgIGhlaWdodDogNTRweDtcbiAgICAgICAgYmFja2dyb3VuZC1zaXplOiA1OHB4IDU0cHg7IH1cbiAgICAgICNwYWdlLXByb2R1Y3RzICNhdXRvbWF0ZSAuYW5pbS1hdXRvbWF0ZV91aSAubWFzdGVyLFxuICAgICAgI3BhZ2UtcHJvZHVjdHMgI2F1dG9tYXRlIC5hbmltLWF1dG9tYXRlX3VpIC5zdGFnaW5nLFxuICAgICAgI3BhZ2UtcHJvZHVjdHMgI2F1dG9tYXRlIC5hbmltLWF1dG9tYXRlX3VpIC5xYSB7XG4gICAgICAgIGxlZnQ6IDUwJTtcbiAgICAgICAgdG9wOiAxOTVweDsgfVxuICAgICAgI3BhZ2UtcHJvZHVjdHMgI2F1dG9tYXRlIC5hbmltLWF1dG9tYXRlX3VpIC5hbmRyb2lkLFxuICAgICAgI3BhZ2UtcHJvZHVjdHMgI2F1dG9tYXRlIC5hbmltLWF1dG9tYXRlX3VpIC5pb3MsXG4gICAgICAjcGFnZS1wcm9kdWN0cyAjYXV0b21hdGUgLmFuaW0tYXV0b21hdGVfdWkgLndlYiB7XG4gICAgICAgIGxlZnQ6IDUwJTtcbiAgICAgICAgdG9wOiAzNjhweDsgfVxuICAgICAgI3BhZ2UtcHJvZHVjdHMgI2F1dG9tYXRlIC5hbmltLWF1dG9tYXRlX3VpIC5hbmRyb2lkLFxuICAgICAgI3BhZ2UtcHJvZHVjdHMgI2F1dG9tYXRlIC5hbmltLWF1dG9tYXRlX3VpIC53ZWIge1xuICAgICAgICBtYXJnaW4tbGVmdDogMTc0cHg7IH1cbiAgICAgICNwYWdlLXByb2R1Y3RzICNhdXRvbWF0ZSAuYW5pbS1hdXRvbWF0ZV91aSAuaW9zIHtcbiAgICAgICAgbWFyZ2luLWxlZnQ6IC0xNzhweDsgfVxuICAgICAgI3BhZ2UtcHJvZHVjdHMgI2F1dG9tYXRlIC5hbmltLWF1dG9tYXRlX3VpIC50ZXN0ZmxpZ2h0LFxuICAgICAgI3BhZ2UtcHJvZHVjdHMgI2F1dG9tYXRlIC5hbmltLWF1dG9tYXRlX3VpIC5wbGF5c3RvcmUsXG4gICAgICAjcGFnZS1wcm9kdWN0cyAjYXV0b21hdGUgLmFuaW0tYXV0b21hdGVfdWkgLndlYmhvb2sge1xuICAgICAgICBsZWZ0OiA1MCU7XG4gICAgICAgIHRvcDogNTQwcHg7IH1cbiAgICAgICNwYWdlLXByb2R1Y3RzICNhdXRvbWF0ZSAuYW5pbS1hdXRvbWF0ZV91aSAudGVzdGZsaWdodCB7XG4gICAgICAgIG1hcmdpbi1sZWZ0OiAtMzUycHg7IH1cbiAgICAgICNwYWdlLXByb2R1Y3RzICNhdXRvbWF0ZSAuYW5pbS1hdXRvbWF0ZV91aSAucGxheXN0b3JlIHtcbiAgICAgICAgbWFyZ2luLWxlZnQ6IDM1MnB4OyB9XG4gICNwYWdlLXByb2R1Y3RzIC5wcm8tZmVhdHVyZXMge1xuICAgIHBhZGRpbmc6IDE5NnB4IDA7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogIzM5NDA3MjsgfVxuICAgICNwYWdlLXByb2R1Y3RzIC5wcm8tZmVhdHVyZXMgaGdyb3VwIHtcbiAgICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICAgIG1heC13aWR0aDogNTYwcHg7XG4gICAgICBtYXJnaW4tbGVmdDogYXV0bztcbiAgICAgIG1hcmdpbi1yaWdodDogYXV0bzsgfVxuICAgICAgI3BhZ2UtcHJvZHVjdHMgLnByby1mZWF0dXJlcyBoZ3JvdXAgaDMge1xuICAgICAgICBjb2xvcjogI2ZmZjtcbiAgICAgICAgZm9udC1zaXplOiAzNnB4O1xuICAgICAgICBmb250LXdlaWdodDogNjAwO1xuICAgICAgICBsaW5lLWhlaWdodDogNDBweDtcbiAgICAgICAgbWFyZ2luLXRvcDogMDsgfVxuICAgICAgI3BhZ2UtcHJvZHVjdHMgLnByby1mZWF0dXJlcyBoZ3JvdXAgcCB7XG4gICAgICAgIGNvbG9yOiAjZDdkOWViO1xuICAgICAgICBmb250LWZhbWlseTogXCJHcmFwaGlrXCIsIFwiQXZlbmlyIE5leHRcIiwgXCJIZWx2ZXRpY2EgTmV1ZVwiLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7XG4gICAgICAgIGZvbnQtc2l6ZTogMjBweDtcbiAgICAgICAgbGluZS1oZWlnaHQ6IDMycHg7IH1cbiAgICAjcGFnZS1wcm9kdWN0cyAucHJvLWZlYXR1cmVzIHVsIHtcbiAgICAgIG1hcmdpbjogMCAtMjRweCAwO1xuICAgICAgcGFkZGluZzogMDtcbiAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICBmbGV4LXdyYXA6IHdyYXA7XG4gICAgICBsaXN0LXN0eWxlLXR5cGU6IG5vbmU7IH1cbiAgICAjcGFnZS1wcm9kdWN0cyAucHJvLWZlYXR1cmVzIGxpIHtcbiAgICAgIGZsZXg6IDAgMCAyNSU7XG4gICAgICBtYXJnaW4tdG9wOiA4NnB4O1xuICAgICAgcGFkZGluZzogMCAyNHB4OyB9XG4gICAgICAjcGFnZS1wcm9kdWN0cyAucHJvLWZlYXR1cmVzIGxpIGg1IHtcbiAgICAgICAgY29sb3I6ICNmZmY7XG4gICAgICAgIGZvbnQtc2l6ZTogMjBweDtcbiAgICAgICAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgICAgICAgbWFyZ2luLWJvdHRvbTogMThweDtcbiAgICAgICAgbWFyZ2luLXRvcDogMDtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsgfVxuICAgICAgI3BhZ2UtcHJvZHVjdHMgLnByby1mZWF0dXJlcyBsaSBwIHtcbiAgICAgICAgY29sb3I6ICNiOWJjZDg7XG4gICAgICAgIGZvbnQtZmFtaWx5OiBcIkdyYXBoaWtcIiwgXCJBdmVuaXIgTmV4dFwiLCBcIkhlbHZldGljYSBOZXVlXCIsIEhlbHZldGljYSwgc2Fucy1zZXJpZjtcbiAgICAgICAgZm9udC1zaXplOiAxNnB4O1xuICAgICAgICBsaW5lLWhlaWdodDogMjhweDsgfVxuICAgICNwYWdlLXByb2R1Y3RzIC5wcm8tZmVhdHVyZXMgW2NsYXNzXj1cInByby1mZWF0dXJlLS1cIl0gaDU6OmJlZm9yZSB7XG4gICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgIGNvbnRlbnQ6ICcnO1xuICAgICAgd2lkdGg6IDI0cHg7XG4gICAgICBoZWlnaHQ6IDI0cHg7XG4gICAgICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXCIvaW1nL3Byby9wcm8tZmVhdHVyZS1zcHJpdGUucG5nXCIpO1xuICAgICAgYmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdDtcbiAgICAgIGJhY2tncm91bmQtc2l6ZTogMjRweCAxOTJweDtcbiAgICAgIG1hcmdpbi1yaWdodDogMTJweDsgfVxuICAgICNwYWdlLXByb2R1Y3RzIC5wcm8tZmVhdHVyZXMgLnByby1mZWF0dXJlLS1hcHAtZGFzaGJvYXJkIGg1OjpiZWZvcmUge1xuICAgICAgYmFja2dyb3VuZC1wb3NpdGlvbjogMCAwOyB9XG4gICAgI3BhZ2UtcHJvZHVjdHMgLnByby1mZWF0dXJlcyAucHJvLWZlYXR1cmUtLWNvbmZpZ3VyYWJsZSBoNTo6YmVmb3JlIHtcbiAgICAgIGJhY2tncm91bmQtcG9zaXRpb246IDAgY2FsYygtMSAqIDI0cHgpOyB9XG4gICAgI3BhZ2UtcHJvZHVjdHMgLnByby1mZWF0dXJlcyAucHJvLWZlYXR1cmUtLWNsZWFuLWJ1aWxkcyBoNTo6YmVmb3JlIHtcbiAgICAgIGJhY2tncm91bmQtcG9zaXRpb246IDAgY2FsYygtMiAqIDI0cHgpOyB9XG4gICAgI3BhZ2UtcHJvZHVjdHMgLnByby1mZWF0dXJlcyAucHJvLWZlYXR1cmUtLW1vYmlsZS1jaS1jZCBoNTo6YmVmb3JlIHtcbiAgICAgIGJhY2tncm91bmQtcG9zaXRpb246IDAgY2FsYygtMyAqIDI0cHgpOyB9XG4gICAgI3BhZ2UtcHJvZHVjdHMgLnByby1mZWF0dXJlcyAucHJvLWZlYXR1cmUtLWdpdC1pbnRlZ3JhdGlvbnMgaDU6OmJlZm9yZSB7XG4gICAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwIGNhbGMoLTQgKiAyNHB4KTsgfVxuICAgICNwYWdlLXByb2R1Y3RzIC5wcm8tZmVhdHVyZXMgLnByby1mZWF0dXJlLS1jb25uZWN0ZWQtc2VydmljZXMgaDU6OmJlZm9yZSB7XG4gICAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwIGNhbGMoLTUgKiAyNHB4KTsgfVxuICAgICNwYWdlLXByb2R1Y3RzIC5wcm8tZmVhdHVyZXMgLnByby1mZWF0dXJlLS1saXZlLWFwcC11cGRhdGluZyBoNTo6YmVmb3JlIHtcbiAgICAgIGJhY2tncm91bmQtcG9zaXRpb246IDAgY2FsYygtNiAqIDI0cHgpOyB9XG4gICAgI3BhZ2UtcHJvZHVjdHMgLnByby1mZWF0dXJlcyAucHJvLWZlYXR1cmUtLXJvbGUtYmFzZWQtY29udHJvbHMgaDU6OmJlZm9yZSB7XG4gICAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwIGNhbGMoLTcgKiAyNHB4KTsgfVxuICAgIEBtZWRpYSAobWF4LXdpZHRoOiAxMjE5cHgpIHtcbiAgICAgICNwYWdlLXByb2R1Y3RzIC5wcm8tZmVhdHVyZXMgbGkge1xuICAgICAgICBmbGV4OiAwIDAgMzMlOyB9IH1cbiAgICBAbWVkaWEgKG1heC13aWR0aDogOTkxcHgpIHtcbiAgICAgICNwYWdlLXByb2R1Y3RzIC5wcm8tZmVhdHVyZXMge1xuICAgICAgICBwYWRkaW5nOiA5MHB4IDA7XG4gICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsgfVxuICAgICAgICAjcGFnZS1wcm9kdWN0cyAucHJvLWZlYXR1cmVzIGg1IHtcbiAgICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsgfVxuICAgICAgICAjcGFnZS1wcm9kdWN0cyAucHJvLWZlYXR1cmVzIGxpIHtcbiAgICAgICAgICBmbGV4OiAwIDAgNTAlOyB9IH1cbiAgICBAbWVkaWEgKG1heC13aWR0aDogNzY3cHgpIHtcbiAgICAgICNwYWdlLXByb2R1Y3RzIC5wcm8tZmVhdHVyZXMgaGdyb3VwIGgzIHtcbiAgICAgICAgZm9udC1zaXplOiAzMHB4OyB9XG4gICAgICAjcGFnZS1wcm9kdWN0cyAucHJvLWZlYXR1cmVzIGxpIHtcbiAgICAgICAgZmxleDogMCAwIDEwMCU7XG4gICAgICAgIG1hcmdpbi10b3A6IDM2cHg7IH0gfVxuICAjcGFnZS1wcm9kdWN0cyAuZ2V0LXN0YXJ0ZWQge1xuICAgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCg0NWRlZywgIzFiMWYzYSAwJSwgIzI5MmY1MiAxMDAlKTtcbiAgICBvdmVyZmxvdzogYXV0bzsgfVxuICAgICNwYWdlLXByb2R1Y3RzIC5nZXQtc3RhcnRlZCAuY29udGFpbmVyIHtcbiAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgbWFyZ2luLWJvdHRvbTogMTIwcHg7XG4gICAgICBtYXJnaW4tdG9wOiAxMjBweDsgfVxuICAgICNwYWdlLXByb2R1Y3RzIC5nZXQtc3RhcnRlZCBoZ3JvdXAge1xuICAgICAgbGV0dGVyLXNwYWNpbmc6IC0uMDI1ZW07XG4gICAgICBmbGV4LWdyb3c6IDE7IH1cbiAgICAjcGFnZS1wcm9kdWN0cyAuZ2V0LXN0YXJ0ZWQgaDIge1xuICAgICAgY29sb3I6ICNlMGUzZjY7XG4gICAgICBmb250LXNpemU6IDI4cHg7XG4gICAgICBsaW5lLWhlaWdodDogMzZweDtcbiAgICAgIGZvbnQtd2VpZ2h0OiA0MDA7XG4gICAgICBsZXR0ZXItc3BhY2luZzogLTAuMDJlbTtcbiAgICAgIG1hcmdpbjogMDtcbiAgICAgIG1heC13aWR0aDogNjgwcHg7IH1cbiAgICAgICNwYWdlLXByb2R1Y3RzIC5nZXQtc3RhcnRlZCBoMiBzdHJvbmcge1xuICAgICAgICBmb250LXdlaWdodDogNjAwO1xuICAgICAgICBjb2xvcjogI2ZmZjsgfVxuICAgICNwYWdlLXByb2R1Y3RzIC5nZXQtc3RhcnRlZCBoMyB7XG4gICAgICBjb2xvcjogIzhhYTZmZjtcbiAgICAgIGZvbnQtc2l6ZTogMjRweDtcbiAgICAgIGxpbmUtaGVpZ2h0OiAzNnB4O1xuICAgICAgZm9udC13ZWlnaHQ6IDQwMDtcbiAgICAgIG1hcmdpbjogMDsgfVxuICAgICNwYWdlLXByb2R1Y3RzIC5nZXQtc3RhcnRlZCAuYnRuIHtcbiAgICAgIGZvbnQtc2l6ZTogMTVweDtcbiAgICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XG4gICAgICBsZXR0ZXItc3BhY2luZzogMC4xMGVtO1xuICAgICAgZm9udC13ZWlnaHQ6IDcwMDtcbiAgICAgIGJvcmRlci1yYWRpdXM6IDEwMHB4O1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogIzVmYTNmZjtcbiAgICAgIHBhZGRpbmc6IDE2cHggMjhweCAxNHB4OyB9XG4gICAgICAjcGFnZS1wcm9kdWN0cyAuZ2V0LXN0YXJ0ZWQgLmJ0bjpob3ZlciB7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6ICM0ODk1ZmM7IH1cbiAgICBAbWVkaWEgKG1heC13aWR0aDogOTkxcHgpIHtcbiAgICAgICNwYWdlLXByb2R1Y3RzIC5nZXQtc3RhcnRlZCAuY29udGFpbmVyIHtcbiAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsgfVxuICAgICAgI3BhZ2UtcHJvZHVjdHMgLmdldC1zdGFydGVkIGhncm91cCB7XG4gICAgICAgIHBhZGRpbmctYm90dG9tOiAxNnB4OyB9XG4gICAgICAjcGFnZS1wcm9kdWN0cyAuZ2V0LXN0YXJ0ZWQgLmJ0bi1ncm91cCB7XG4gICAgICAgIHBhZGRpbmctYm90dG9tOiA5NnB4OyB9IH1cbiJdfQ== */\n"
  },
  {
    "path": "content/css/pages/products/studio.css",
    "content": "#page-products-studio .sub-header a.btn {\n  padding: 6px 8px 5px;\n  font-size: 11px;\n  font-weight: 600;\n  vertical-align: 0;\n  letter-spacing: .04em;\n  margin-right: 3px;\n  margin-left: 9px;\n  transition: .2s box-shadow,.2s background; }\n  #page-products-studio .sub-header a.btn:hover, #page-products-studio .sub-header a.btn:focus {\n    color: white;\n    border-color: #5995fc;\n    background: rgba(74, 139, 252, 0.1); }\n\n#page-products-studio .top {\n  margin-top: -148px;\n  padding-top: 235px;\n  text-align: center;\n  background: linear-gradient(180deg, #121417 0%, #06090D 100%); }\n  #page-products-studio .top h4 {\n    font-family: \"Roboto Mono\", Menlo, Monaco, Consolas, \"Courier New\", monospace;\n    font-weight: bold;\n    line-height: 23px;\n    font-size: 12px;\n    letter-spacing: 0.14em;\n    text-transform: uppercase;\n    color: #92A1B3; }\n  #page-products-studio .top h1,\n  #page-products-studio .top h3,\n  #page-products-studio .top hgroup p {\n    color: #fff;\n    letter-spacing: -0.01em; }\n  #page-products-studio .top h1 {\n    font-size: 56px;\n    margin-top: 41px;\n    margin-bottom: 22px;\n    letter-spacing: -0.02em; }\n  #page-products-studio .top hgroup {\n    max-width: 872px;\n    margin-bottom: 27px; }\n    #page-products-studio .top hgroup h3 {\n      font-size: 36px;\n      letter-spacing: -0.01em; }\n    #page-products-studio .top hgroup p {\n      line-height: 38px;\n      font-size: 22px;\n      font-weight: 400;\n      margin-bottom: 40px;\n      color: #b2becd;\n      font-family: \"Eina\", \"Helvetica Neue\", Helvetica, sans-serif; }\n      #page-products-studio .top hgroup p strong {\n        font-weight: 600;\n        margin-bottom: 0 !important; }\n  #page-products-studio .top .btns .btn {\n    padding: 16px 20px 14px;\n    font-size: 15px;\n    margin-right: 6px;\n    letter-spacing: .1em;\n    border-width: 2px; }\n    @media (max-width: 768px) {\n      #page-products-studio .top .btns .btn {\n        margin-bottom: 16px; } }\n  #page-products-studio .top .btns ion-icon {\n    vertical-align: -3px;\n    height: 15px;\n    width: 15px;\n    display: inline-block; }\n    #page-products-studio .top .btns ion-icon svg {\n      width: 18px;\n      height: 18px; }\n  #page-products-studio .top .btns:last-child {\n    margin-right: 0; }\n  #page-products-studio .top section video {\n    box-shadow: 0px 16px 64px black; }\n  #page-products-studio .top section video,\n  #page-products-studio .top section .screenshot,\n  #page-products-studio .top section .screenshot-group {\n    border-radius: 8px;\n    margin: 96px -78px 128px;\n    max-width: calc(100% + 155px); }\n  #page-products-studio .top section .screenshot-group {\n    position: relative; }\n    #page-products-studio .top section .screenshot-group img {\n      max-width: 100%; }\n    #page-products-studio .top section .screenshot-group img:not(:first-child) {\n      position: absolute;\n      top: 0;\n      left: 0;\n      -webkit-animation: 10s crossFadeInOut infinite;\n              animation: 10s crossFadeInOut infinite; }\n  #page-products-studio .top hgroup h4,\n  #page-products-studio .top hgroup h1,\n  #page-products-studio .top hgroup p,\n  #page-products-studio .top hgroup .btn {\n    -webkit-animation: .2s fadeInUp ease-out forwards;\n            animation: .2s fadeInUp ease-out forwards;\n    opacity: 0; }\n  #page-products-studio .top hgroup h4 {\n    -webkit-animation-delay: .3s;\n            animation-delay: .3s; }\n  #page-products-studio .top hgroup h1 {\n    -webkit-animation-delay: 0.4s;\n            animation-delay: 0.4s; }\n  #page-products-studio .top hgroup p {\n    -webkit-animation-delay: 0.5s;\n            animation-delay: 0.5s; }\n  #page-products-studio .top hgroup .btn {\n    -webkit-animation-delay: .6s;\n            animation-delay: .6s; }\n  #page-products-studio .top hgroup .btn:last-child {\n    -webkit-animation-delay: .7s;\n            animation-delay: .7s; }\n  #page-products-studio .top p a {\n    color: white; }\n  #page-products-studio .top video,\n  #page-products-studio .top .screenshot {\n    -webkit-animation: .5s fadeIn forwards 1s;\n            animation: .5s fadeIn forwards 1s;\n    opacity: 0; }\n\n#page-products-studio main section {\n  padding-top: 178px;\n  letter-spacing: -0.01em; }\n  #page-products-studio main section.solid {\n    background: #14171C; }\n  #page-products-studio main section hgroup {\n    max-width: 786px; }\n    #page-products-studio main section hgroup h2 {\n      line-height: normal;\n      font-size: 48px;\n      letter-spacing: -0.03em;\n      margin-bottom: 22px; }\n    #page-products-studio main section hgroup p {\n      font-family: \"Eina\", \"Helvetica Neue\", Helvetica, sans-serif;\n      font-size: 22px;\n      line-height: 39px; }\n      #page-products-studio main section hgroup p strong {\n        padding-left: 0;\n        margin-bottom: 0; }\n    #page-products-studio main section hgroup.centered {\n      text-align: center;\n      margin: 0 auto 92px;\n      max-width: 800px; }\n      #page-products-studio main section hgroup.centered hgroup {\n        max-width: 814px; }\n        #page-products-studio main section hgroup.centered hgroup p {\n          line-height: 26px;\n          margin-top: 32px; }\n  #page-products-studio main section video {\n    box-shadow: 0px 16px 64px black; }\n  #page-products-studio main section video,\n  #page-products-studio main section .screenshot {\n    max-width: 100%;\n    margin: 72px auto 140px;\n    border-radius: 8px; }\n  #page-products-studio main section h2 {\n    color: #fff; }\n\n#page-products-studio main section,\n#page-products-studio .top section {\n  margin-top: -1px; }\n  #page-products-studio main section h3,\n  #page-products-studio .top section h3 {\n    line-height: normal;\n    font-size: 36px;\n    letter-spacing: -0.014em;\n    color: #fff;\n    margin-bottom: 80px; }\n  #page-products-studio main section ul,\n  #page-products-studio .top section ul {\n    display: -ms-flexbox;\n    display: flex;\n    list-style: none;\n    padding: 0;\n    -ms-flex-pack: justify;\n        justify-content: space-between;\n    margin-bottom: 182px; }\n    @media (max-width: 768px) {\n      #page-products-studio main section ul,\n      #page-products-studio .top section ul {\n        -ms-flex-direction: column;\n            flex-direction: column; } }\n    #page-products-studio main section ul.quatro li,\n    #page-products-studio .top section ul.quatro li {\n      -ms-flex: 0 1 244px;\n          flex: 0 1 244px; }\n      @media (max-width: 1220px) {\n        #page-products-studio main section ul.quatro li,\n        #page-products-studio .top section ul.quatro li {\n          -ms-flex: 0 0 210px;\n              flex: 0 0 210px; } }\n    #page-products-studio main section ul.quatro strong,\n    #page-products-studio .top section ul.quatro strong {\n      padding: 0;\n      padding-top: 51px; }\n    #page-products-studio main section ul.quatro p,\n    #page-products-studio .top section ul.quatro p {\n      margin-top: 0;\n      line-height: 29px; }\n  #page-products-studio main section strong,\n  #page-products-studio .top section strong {\n    font-family: \"Eina\", \"Helvetica Neue\", Helvetica, sans-serif;\n    font-size: 20px;\n    color: #fff;\n    font-weight: 600;\n    margin-bottom: 12px;\n    display: inline-block;\n    padding-left: 39px; }\n  #page-products-studio main section li,\n  #page-products-studio .top section li {\n    position: relative;\n    padding-top: 0;\n    text-align: left;\n    -ms-flex: 0 0 326px;\n        flex: 0 0 326px; }\n    #page-products-studio main section li.ui strong::before,\n    #page-products-studio .top section li.ui strong::before {\n      background-position: 0 0px; }\n    #page-products-studio main section li.no-docs strong::before,\n    #page-products-studio .top section li.no-docs strong::before {\n      background-position: 0 -26px; }\n    #page-products-studio main section li.secure strong::before,\n    #page-products-studio .top section li.secure strong::before {\n      background-position: 0 -52px; }\n    #page-products-studio main section li.drag strong::before,\n    #page-products-studio .top section li.drag strong::before {\n      background-position: 0 -78px; }\n    #page-products-studio main section li.properties strong::before,\n    #page-products-studio .top section li.properties strong::before {\n      background-position: 0 -104px; }\n    #page-products-studio main section li.backend strong::before,\n    #page-products-studio .top section li.backend strong::before {\n      background-position: 0 -130px; }\n    #page-products-studio main section li.live strong::before,\n    #page-products-studio .top section li.live strong::before {\n      background-position: 0 -156px; }\n    #page-products-studio main section li.native strong::before,\n    #page-products-studio .top section li.native strong::before {\n      background-position: 0 -182px; }\n    #page-products-studio main section li.device strong::before,\n    #page-products-studio .top section li.device strong::before {\n      background-position: 0 -208px; }\n    #page-products-studio main section li.assets strong::before,\n    #page-products-studio .top section li.assets strong::before {\n      background-position: 0 -234px; }\n    #page-products-studio main section li.theme strong::before,\n    #page-products-studio .top section li.theme strong::before {\n      background-position: 0 -260px; }\n    #page-products-studio main section li.cordova strong::before,\n    #page-products-studio .top section li.cordova strong::before {\n      background-position: 0 -286px; }\n    #page-products-studio main section li.ci strong::before,\n    #page-products-studio .top section li.ci strong::before {\n      background-position: 0 -312px; }\n    @media (max-width: 1220px) {\n      #page-products-studio main section li,\n      #page-products-studio .top section li {\n        -ms-flex-preferred-size: calc(33% - 24px);\n            flex-basis: calc(33% - 24px); } }\n    @media (max-width: 768px) {\n      #page-products-studio main section li,\n      #page-products-studio .top section li {\n        -ms-flex-preferred-size: 100%;\n            flex-basis: 100%;\n        margin-bottom: 32px; } }\n    #page-products-studio main section li strong::before,\n    #page-products-studio .top section li strong::before {\n      background: url(\"/img/products/studio/ico-features-sm.png\") no-repeat 0 0;\n      background-size: 26px;\n      width: 26px;\n      height: 26px;\n      content: '';\n      position: absolute;\n      top: 0;\n      left: 0; }\n    #page-products-studio main section li .pill,\n    #page-products-studio .top section li .pill {\n      color: #4a8bfc;\n      position: absolute;\n      top: 1px;\n      left: 36px;\n      display: block;\n      border: 2px solid #4a8bfc;\n      padding: 2px 5px 1px;\n      text-transform: uppercase;\n      font-weight: 800;\n      letter-spacing: .1em;\n      border-radius: 12px;\n      font-size: 11px; }\n  #page-products-studio main section p,\n  #page-products-studio .top section p {\n    font-family: \"Inter\", \"Inter UI\", Helvetica, Arial, sans-serif;\n    line-height: 29px;\n    font-size: 16px;\n    color: #B2BECD;\n    font-weight: 400; }\n\n#page-products-studio .top section li {\n  position: relative; }\n  #page-products-studio .top section li strong {\n    padding-top: 75px;\n    padding-left: 0; }\n    #page-products-studio .top section li strong::before {\n      background: url(\"/img/products/studio/ico-features-lg.png\") no-repeat 0 0;\n      background-size: 48px;\n      width: 48px;\n      height: 48px;\n      content: '';\n      position: absolute;\n      top: 0;\n      left: 0; }\n  #page-products-studio .top section li.create strong::before {\n    background-position: 0 0px; }\n  #page-products-studio .top section li.tackle strong::before {\n    background-position: 0 -48px; }\n  #page-products-studio .top section li.ship strong::before {\n    background-position: 0 -96px; }\n\n#page-products-studio .video-container {\n  position: relative; }\n  #page-products-studio .video-container .preview {\n    position: absolute;\n    top: 40px;\n    right: 0;\n    max-width: 40%;\n    width: 420px;\n    opacity: 0;\n    transition: 0.5s opacity ease-in 0.5s, 0.8s -webkit-transform cubic-bezier(0.5, 0, 0, 1) 0.5s;\n    transition: 0.5s opacity ease-in 0.5s, 0.8s transform cubic-bezier(0.5, 0, 0, 1) 0.5s;\n    transition: 0.5s opacity ease-in 0.5s, 0.8s transform cubic-bezier(0.5, 0, 0, 1) 0.5s, 0.8s -webkit-transform cubic-bezier(0.5, 0, 0, 1) 0.5s;\n    -webkit-transform: translateY(25px);\n            transform: translateY(25px); }\n  #page-products-studio .video-container video,\n  #page-products-studio .video-container .screenshot {\n    -webkit-transform-origin: 0 50%;\n            transform-origin: 0 50%;\n    transition: 1s opacity, 1s box-shadow, 1s -webkit-filter ease, 1s -webkit-transform cubic-bezier(0.5, 0, 0, 1);\n    transition: 1s filter ease, 1s transform cubic-bezier(0.5, 0, 0, 1), 1s opacity, 1s box-shadow;\n    transition: 1s filter ease, 1s transform cubic-bezier(0.5, 0, 0, 1), 1s opacity, 1s box-shadow, 1s -webkit-filter ease, 1s -webkit-transform cubic-bezier(0.5, 0, 0, 1); }\n  #page-products-studio .video-container.finished .preview {\n    opacity: 1;\n    -webkit-transform: none;\n            transform: none; }\n  #page-products-studio .video-container.finished video {\n    box-shadow: 0px 16px 64px rgba(0, 0, 0, 0); }\n  #page-products-studio .video-container.finished video,\n  #page-products-studio .video-container.finished .screenshot {\n    -webkit-filter: blur(3px);\n            filter: blur(3px);\n    opacity: .5;\n    -webkit-transform: scale3d(0.9, 0.9, 1);\n            transform: scale3d(0.9, 0.9, 1); }\n\n#page-products-studio main section {\n  background: linear-gradient(180deg, #121417 0%, #06090D 100%); }\n\n#page-products-studio .modal hgroup {\n  padding-top: 18px;\n  padding-bottom: 32px; }\n\n#page-products-studio .modal h3 {\n  font-size: 29px;\n  font-weight: 600;\n  color: #171a20;\n  margin: 18px 0 8px;\n  letter-spacing: -0.03em; }\n\n#page-products-studio .modal p {\n  font-size: 18px;\n  line-height: 28px;\n  color: #4c576c;\n  max-width: 400px;\n  margin: 0 auto; }\n  #page-products-studio .modal p.sm {\n    font-size: 13px;\n    line-height: 22px;\n    color: #6f7786; }\n\n#page-products-studio .modal form {\n  max-width: 100%;\n  padding: 0 15px 15px; }\n\n#page-products-studio .modal .hs_submit {\n  text-align: center;\n  font-weight: 600; }\n  #page-products-studio .modal .hs_submit input {\n    margin-top: 15px; }\n\n#page-products-studio .promo-studio {\n  background: #1D232C; }\n  #page-products-studio .promo-studio h2 {\n    color: white;\n    font-weight: 400;\n    max-width: 680px;\n    margin-bottom: 16px; }\n    #page-products-studio .promo-studio h2 strong {\n      font-weight: 600; }\n  #page-products-studio .promo-studio p {\n    color: #4D8DFF; }\n  #page-products-studio .promo-studio .btn {\n    background: transparent;\n    border: 2px solid rgba(81, 167, 255, 0.7); }\n  #page-products-studio .promo-studio .btns {\n    padding-left: 24px;\n    margin-left: auto; }\n\n/*# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInN0dWRpby5jc3MiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7RUFDRSxxQkFBcUI7RUFDckIsZ0JBQWdCO0VBQ2hCLGlCQUFpQjtFQUNqQixrQkFBa0I7RUFDbEIsc0JBQXNCO0VBQ3RCLGtCQUFrQjtFQUNsQixpQkFBaUI7RUFDakIsMENBQTBDLEVBQUU7RUFDNUM7SUFDRSxhQUFhO0lBQ2Isc0JBQXNCO0lBQ3RCLG9DQUFvQyxFQUFFOztBQUUxQztFQUNFLG1CQUFtQjtFQUNuQixtQkFBbUI7RUFDbkIsbUJBQW1CO0VBQ25CLDhEQUE4RCxFQUFFO0VBQ2hFO0lBQ0UsOEVBQThFO0lBQzlFLGtCQUFrQjtJQUNsQixrQkFBa0I7SUFDbEIsZ0JBQWdCO0lBQ2hCLHVCQUF1QjtJQUN2QiwwQkFBMEI7SUFDMUIsZUFBZSxFQUFFO0VBQ25COzs7SUFHRSxZQUFZO0lBQ1osd0JBQXdCLEVBQUU7RUFDNUI7SUFDRSxnQkFBZ0I7SUFDaEIsaUJBQWlCO0lBQ2pCLG9CQUFvQjtJQUNwQix3QkFBd0IsRUFBRTtFQUM1QjtJQUNFLGlCQUFpQjtJQUNqQixvQkFBb0IsRUFBRTtJQUN0QjtNQUNFLGdCQUFnQjtNQUNoQix3QkFBd0IsRUFBRTtJQUM1QjtNQUNFLGtCQUFrQjtNQUNsQixnQkFBZ0I7TUFDaEIsaUJBQWlCO01BQ2pCLG9CQUFvQjtNQUNwQixlQUFlO01BQ2YsNkRBQTZELEVBQUU7TUFDL0Q7UUFDRSxpQkFBaUI7UUFDakIsNEJBQTRCLEVBQUU7RUFDcEM7SUFDRSx3QkFBd0I7SUFDeEIsZ0JBQWdCO0lBQ2hCLGtCQUFrQjtJQUNsQixxQkFBcUI7SUFDckIsa0JBQWtCLEVBQUU7SUFDcEI7TUFDRTtRQUNFLG9CQUFvQixFQUFFLEVBQUU7RUFDOUI7SUFDRSxxQkFBcUI7SUFDckIsYUFBYTtJQUNiLFlBQVk7SUFDWixzQkFBc0IsRUFBRTtJQUN4QjtNQUNFLFlBQVk7TUFDWixhQUFhLEVBQUU7RUFDbkI7SUFDRSxnQkFBZ0IsRUFBRTtFQUNwQjtJQUNFLGdDQUFnQyxFQUFFO0VBQ3BDOzs7SUFHRSxtQkFBbUI7SUFDbkIseUJBQXlCO0lBQ3pCLDhCQUE4QixFQUFFO0VBQ2xDO0lBQ0UsbUJBQW1CLEVBQUU7SUFDckI7TUFDRSxnQkFBZ0IsRUFBRTtJQUNwQjtNQUNFLG1CQUFtQjtNQUNuQixPQUFPO01BQ1AsUUFBUTtNQUNSLCtDQUF1QztjQUF2Qyx1Q0FBdUMsRUFBRTtFQUM3Qzs7OztJQUlFLGtEQUEwQztZQUExQywwQ0FBMEM7SUFDMUMsV0FBVyxFQUFFO0VBQ2Y7SUFDRSw2QkFBcUI7WUFBckIscUJBQXFCLEVBQUU7RUFDekI7SUFDRSw4QkFBc0I7WUFBdEIsc0JBQXNCLEVBQUU7RUFDMUI7SUFDRSw4QkFBc0I7WUFBdEIsc0JBQXNCLEVBQUU7RUFDMUI7SUFDRSw2QkFBcUI7WUFBckIscUJBQXFCLEVBQUU7RUFDekI7SUFDRSw2QkFBcUI7WUFBckIscUJBQXFCLEVBQUU7RUFDekI7SUFDRSxhQUFhLEVBQUU7RUFDakI7O0lBRUUsMENBQWtDO1lBQWxDLGtDQUFrQztJQUNsQyxXQUFXLEVBQUU7O0FBRWpCO0VBQ0UsbUJBQW1CO0VBQ25CLHdCQUF3QixFQUFFO0VBQzFCO0lBQ0Usb0JBQW9CLEVBQUU7RUFDeEI7SUFDRSxpQkFBaUIsRUFBRTtJQUNuQjtNQUNFLG9CQUFvQjtNQUNwQixnQkFBZ0I7TUFDaEIsd0JBQXdCO01BQ3hCLG9CQUFvQixFQUFFO0lBQ3hCO01BQ0UsNkRBQTZEO01BQzdELGdCQUFnQjtNQUNoQixrQkFBa0IsRUFBRTtNQUNwQjtRQUNFLGdCQUFnQjtRQUNoQixpQkFBaUIsRUFBRTtJQUN2QjtNQUNFLG1CQUFtQjtNQUNuQixvQkFBb0I7TUFDcEIsaUJBQWlCLEVBQUU7TUFDbkI7UUFDRSxpQkFBaUIsRUFBRTtRQUNuQjtVQUNFLGtCQUFrQjtVQUNsQixpQkFBaUIsRUFBRTtFQUMzQjtJQUNFLGdDQUFnQyxFQUFFO0VBQ3BDOztJQUVFLGdCQUFnQjtJQUNoQix3QkFBd0I7SUFDeEIsbUJBQW1CLEVBQUU7RUFDdkI7SUFDRSxZQUFZLEVBQUU7O0FBRWxCOztFQUVFLGlCQUFpQixFQUFFO0VBQ25COztJQUVFLG9CQUFvQjtJQUNwQixnQkFBZ0I7SUFDaEIseUJBQXlCO0lBQ3pCLFlBQVk7SUFDWixvQkFBb0IsRUFBRTtFQUN4Qjs7SUFFRSxxQkFBYztJQUFkLGNBQWM7SUFDZCxpQkFBaUI7SUFDakIsV0FBVztJQUNYLHVCQUErQjtRQUEvQiwrQkFBK0I7SUFDL0IscUJBQXFCLEVBQUU7SUFDdkI7TUFDRTs7UUFFRSwyQkFBdUI7WUFBdkIsdUJBQXVCLEVBQUUsRUFBRTtJQUMvQjs7TUFFRSxvQkFBZ0I7VUFBaEIsZ0JBQWdCLEVBQUU7TUFDbEI7UUFDRTs7VUFFRSxvQkFBZ0I7Y0FBaEIsZ0JBQWdCLEVBQUUsRUFBRTtJQUMxQjs7TUFFRSxXQUFXO01BQ1gsa0JBQWtCLEVBQUU7SUFDdEI7O01BRUUsY0FBYztNQUNkLGtCQUFrQixFQUFFO0VBQ3hCOztJQUVFLDZEQUE2RDtJQUM3RCxnQkFBZ0I7SUFDaEIsWUFBWTtJQUNaLGlCQUFpQjtJQUNqQixvQkFBb0I7SUFDcEIsc0JBQXNCO0lBQ3RCLG1CQUFtQixFQUFFO0VBQ3ZCOztJQUVFLG1CQUFtQjtJQUNuQixlQUFlO0lBQ2YsaUJBQWlCO0lBQ2pCLG9CQUFnQjtRQUFoQixnQkFBZ0IsRUFBRTtJQUNsQjs7TUFFRSwyQkFBMkIsRUFBRTtJQUMvQjs7TUFFRSw2QkFBNkIsRUFBRTtJQUNqQzs7TUFFRSw2QkFBNkIsRUFBRTtJQUNqQzs7TUFFRSw2QkFBNkIsRUFBRTtJQUNqQzs7TUFFRSw4QkFBOEIsRUFBRTtJQUNsQzs7TUFFRSw4QkFBOEIsRUFBRTtJQUNsQzs7TUFFRSw4QkFBOEIsRUFBRTtJQUNsQzs7TUFFRSw4QkFBOEIsRUFBRTtJQUNsQzs7TUFFRSw4QkFBOEIsRUFBRTtJQUNsQzs7TUFFRSw4QkFBOEIsRUFBRTtJQUNsQzs7TUFFRSw4QkFBOEIsRUFBRTtJQUNsQzs7TUFFRSw4QkFBOEIsRUFBRTtJQUNsQzs7TUFFRSw4QkFBOEIsRUFBRTtJQUNsQztNQUNFOztRQUVFLDBDQUE2QjtZQUE3Qiw2QkFBNkIsRUFBRSxFQUFFO0lBQ3JDO01BQ0U7O1FBRUUsOEJBQWlCO1lBQWpCLGlCQUFpQjtRQUNqQixvQkFBb0IsRUFBRSxFQUFFO0lBQzVCOztNQUVFLDBFQUEwRTtNQUMxRSxzQkFBc0I7TUFDdEIsWUFBWTtNQUNaLGFBQWE7TUFDYixZQUFZO01BQ1osbUJBQW1CO01BQ25CLE9BQU87TUFDUCxRQUFRLEVBQUU7SUFDWjs7TUFFRSxlQUFlO01BQ2YsbUJBQW1CO01BQ25CLFNBQVM7TUFDVCxXQUFXO01BQ1gsZUFBZTtNQUNmLDBCQUEwQjtNQUMxQixxQkFBcUI7TUFDckIsMEJBQTBCO01BQzFCLGlCQUFpQjtNQUNqQixxQkFBcUI7TUFDckIsb0JBQW9CO01BQ3BCLGdCQUFnQixFQUFFO0VBQ3RCOztJQUVFLCtEQUErRDtJQUMvRCxrQkFBa0I7SUFDbEIsZ0JBQWdCO0lBQ2hCLGVBQWU7SUFDZixpQkFBaUIsRUFBRTs7QUFFdkI7RUFDRSxtQkFBbUIsRUFBRTtFQUNyQjtJQUNFLGtCQUFrQjtJQUNsQixnQkFBZ0IsRUFBRTtJQUNsQjtNQUNFLDBFQUEwRTtNQUMxRSxzQkFBc0I7TUFDdEIsWUFBWTtNQUNaLGFBQWE7TUFDYixZQUFZO01BQ1osbUJBQW1CO01BQ25CLE9BQU87TUFDUCxRQUFRLEVBQUU7RUFDZDtJQUNFLDJCQUEyQixFQUFFO0VBQy9CO0lBQ0UsNkJBQTZCLEVBQUU7RUFDakM7SUFDRSw2QkFBNkIsRUFBRTs7QUFFbkM7RUFDRSxtQkFBbUIsRUFBRTtFQUNyQjtJQUNFLG1CQUFtQjtJQUNuQixVQUFVO0lBQ1YsU0FBUztJQUNULGVBQWU7SUFDZixhQUFhO0lBQ2IsV0FBVztJQUNYLDhGQUFzRjtJQUF0RixzRkFBc0Y7SUFBdEYsOElBQXNGO0lBQ3RGLG9DQUE0QjtZQUE1Qiw0QkFBNEIsRUFBRTtFQUNoQzs7SUFFRSxnQ0FBd0I7WUFBeEIsd0JBQXdCO0lBQ3hCLCtHQUErRjtJQUEvRiwrRkFBK0Y7SUFBL0Ysd0tBQStGLEVBQUU7RUFDbkc7SUFDRSxXQUFXO0lBQ1gsd0JBQWdCO1lBQWhCLGdCQUFnQixFQUFFO0VBQ3BCO0lBQ0UsMkNBQTJDLEVBQUU7RUFDL0M7O0lBRUUsMEJBQWtCO1lBQWxCLGtCQUFrQjtJQUNsQixZQUFZO0lBQ1osd0NBQWdDO1lBQWhDLGdDQUFnQyxFQUFFOztBQUV0QztFQUNFLDhEQUE4RCxFQUFFOztBQUVsRTtFQUNFLGtCQUFrQjtFQUNsQixxQkFBcUIsRUFBRTs7QUFFekI7RUFDRSxnQkFBZ0I7RUFDaEIsaUJBQWlCO0VBQ2pCLGVBQWU7RUFDZixtQkFBbUI7RUFDbkIsd0JBQXdCLEVBQUU7O0FBRTVCO0VBQ0UsZ0JBQWdCO0VBQ2hCLGtCQUFrQjtFQUNsQixlQUFlO0VBQ2YsaUJBQWlCO0VBQ2pCLGVBQWUsRUFBRTtFQUNqQjtJQUNFLGdCQUFnQjtJQUNoQixrQkFBa0I7SUFDbEIsZUFBZSxFQUFFOztBQUVyQjtFQUNFLGdCQUFnQjtFQUNoQixxQkFBcUIsRUFBRTs7QUFFekI7RUFDRSxtQkFBbUI7RUFDbkIsaUJBQWlCLEVBQUU7RUFDbkI7SUFDRSxpQkFBaUIsRUFBRTs7QUFFdkI7RUFDRSxvQkFBb0IsRUFBRTtFQUN0QjtJQUNFLGFBQWE7SUFDYixpQkFBaUI7SUFDakIsaUJBQWlCO0lBQ2pCLG9CQUFvQixFQUFFO0lBQ3RCO01BQ0UsaUJBQWlCLEVBQUU7RUFDdkI7SUFDRSxlQUFlLEVBQUU7RUFDbkI7SUFDRSx3QkFBd0I7SUFDeEIsMENBQTBDLEVBQUU7RUFDOUM7SUFDRSxtQkFBbUI7SUFDbkIsa0JBQWtCLEVBQUUiLCJmaWxlIjoicGFnZXMvcHJvZHVjdHMvc3R1ZGlvLmNzcyIsInNvdXJjZXNDb250ZW50IjpbIiNwYWdlLXByb2R1Y3RzLXN0dWRpbyAuc3ViLWhlYWRlciBhLmJ0biB7XG4gIHBhZGRpbmc6IDZweCA4cHggNXB4O1xuICBmb250LXNpemU6IDExcHg7XG4gIGZvbnQtd2VpZ2h0OiA2MDA7XG4gIHZlcnRpY2FsLWFsaWduOiAwO1xuICBsZXR0ZXItc3BhY2luZzogLjA0ZW07XG4gIG1hcmdpbi1yaWdodDogM3B4O1xuICBtYXJnaW4tbGVmdDogOXB4O1xuICB0cmFuc2l0aW9uOiAuMnMgYm94LXNoYWRvdywuMnMgYmFja2dyb3VuZDsgfVxuICAjcGFnZS1wcm9kdWN0cy1zdHVkaW8gLnN1Yi1oZWFkZXIgYS5idG46aG92ZXIsICNwYWdlLXByb2R1Y3RzLXN0dWRpbyAuc3ViLWhlYWRlciBhLmJ0bjpmb2N1cyB7XG4gICAgY29sb3I6IHdoaXRlO1xuICAgIGJvcmRlci1jb2xvcjogIzU5OTVmYztcbiAgICBiYWNrZ3JvdW5kOiByZ2JhKDc0LCAxMzksIDI1MiwgMC4xKTsgfVxuXG4jcGFnZS1wcm9kdWN0cy1zdHVkaW8gLnRvcCB7XG4gIG1hcmdpbi10b3A6IC0xNDhweDtcbiAgcGFkZGluZy10b3A6IDIzNXB4O1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCgxODBkZWcsICMxMjE0MTcgMCUsICMwNjA5MEQgMTAwJSk7IH1cbiAgI3BhZ2UtcHJvZHVjdHMtc3R1ZGlvIC50b3AgaDQge1xuICAgIGZvbnQtZmFtaWx5OiBcIlJvYm90byBNb25vXCIsIE1lbmxvLCBNb25hY28sIENvbnNvbGFzLCBcIkNvdXJpZXIgTmV3XCIsIG1vbm9zcGFjZTtcbiAgICBmb250LXdlaWdodDogYm9sZDtcbiAgICBsaW5lLWhlaWdodDogMjNweDtcbiAgICBmb250LXNpemU6IDEycHg7XG4gICAgbGV0dGVyLXNwYWNpbmc6IDAuMTRlbTtcbiAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xuICAgIGNvbG9yOiAjOTJBMUIzOyB9XG4gICNwYWdlLXByb2R1Y3RzLXN0dWRpbyAudG9wIGgxLFxuICAjcGFnZS1wcm9kdWN0cy1zdHVkaW8gLnRvcCBoMyxcbiAgI3BhZ2UtcHJvZHVjdHMtc3R1ZGlvIC50b3AgaGdyb3VwIHAge1xuICAgIGNvbG9yOiAjZmZmO1xuICAgIGxldHRlci1zcGFjaW5nOiAtMC4wMWVtOyB9XG4gICNwYWdlLXByb2R1Y3RzLXN0dWRpbyAudG9wIGgxIHtcbiAgICBmb250LXNpemU6IDU2cHg7XG4gICAgbWFyZ2luLXRvcDogNDFweDtcbiAgICBtYXJnaW4tYm90dG9tOiAyMnB4O1xuICAgIGxldHRlci1zcGFjaW5nOiAtMC4wMmVtOyB9XG4gICNwYWdlLXByb2R1Y3RzLXN0dWRpbyAudG9wIGhncm91cCB7XG4gICAgbWF4LXdpZHRoOiA4NzJweDtcbiAgICBtYXJnaW4tYm90dG9tOiAyN3B4OyB9XG4gICAgI3BhZ2UtcHJvZHVjdHMtc3R1ZGlvIC50b3AgaGdyb3VwIGgzIHtcbiAgICAgIGZvbnQtc2l6ZTogMzZweDtcbiAgICAgIGxldHRlci1zcGFjaW5nOiAtMC4wMWVtOyB9XG4gICAgI3BhZ2UtcHJvZHVjdHMtc3R1ZGlvIC50b3AgaGdyb3VwIHAge1xuICAgICAgbGluZS1oZWlnaHQ6IDM4cHg7XG4gICAgICBmb250LXNpemU6IDIycHg7XG4gICAgICBmb250LXdlaWdodDogNDAwO1xuICAgICAgbWFyZ2luLWJvdHRvbTogNDBweDtcbiAgICAgIGNvbG9yOiAjYjJiZWNkO1xuICAgICAgZm9udC1mYW1pbHk6IFwiRWluYVwiLCBcIkhlbHZldGljYSBOZXVlXCIsIEhlbHZldGljYSwgc2Fucy1zZXJpZjsgfVxuICAgICAgI3BhZ2UtcHJvZHVjdHMtc3R1ZGlvIC50b3AgaGdyb3VwIHAgc3Ryb25nIHtcbiAgICAgICAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgICAgICAgbWFyZ2luLWJvdHRvbTogMCAhaW1wb3J0YW50OyB9XG4gICNwYWdlLXByb2R1Y3RzLXN0dWRpbyAudG9wIC5idG5zIC5idG4ge1xuICAgIHBhZGRpbmc6IDE2cHggMjBweCAxNHB4O1xuICAgIGZvbnQtc2l6ZTogMTVweDtcbiAgICBtYXJnaW4tcmlnaHQ6IDZweDtcbiAgICBsZXR0ZXItc3BhY2luZzogLjFlbTtcbiAgICBib3JkZXItd2lkdGg6IDJweDsgfVxuICAgIEBtZWRpYSAobWF4LXdpZHRoOiA3NjhweCkge1xuICAgICAgI3BhZ2UtcHJvZHVjdHMtc3R1ZGlvIC50b3AgLmJ0bnMgLmJ0biB7XG4gICAgICAgIG1hcmdpbi1ib3R0b206IDE2cHg7IH0gfVxuICAjcGFnZS1wcm9kdWN0cy1zdHVkaW8gLnRvcCAuYnRucyBpb24taWNvbiB7XG4gICAgdmVydGljYWwtYWxpZ246IC0zcHg7XG4gICAgaGVpZ2h0OiAxNXB4O1xuICAgIHdpZHRoOiAxNXB4O1xuICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsgfVxuICAgICNwYWdlLXByb2R1Y3RzLXN0dWRpbyAudG9wIC5idG5zIGlvbi1pY29uIHN2ZyB7XG4gICAgICB3aWR0aDogMThweDtcbiAgICAgIGhlaWdodDogMThweDsgfVxuICAjcGFnZS1wcm9kdWN0cy1zdHVkaW8gLnRvcCAuYnRuczpsYXN0LWNoaWxkIHtcbiAgICBtYXJnaW4tcmlnaHQ6IDA7IH1cbiAgI3BhZ2UtcHJvZHVjdHMtc3R1ZGlvIC50b3Agc2VjdGlvbiB2aWRlbyB7XG4gICAgYm94LXNoYWRvdzogMHB4IDE2cHggNjRweCBibGFjazsgfVxuICAjcGFnZS1wcm9kdWN0cy1zdHVkaW8gLnRvcCBzZWN0aW9uIHZpZGVvLFxuICAjcGFnZS1wcm9kdWN0cy1zdHVkaW8gLnRvcCBzZWN0aW9uIC5zY3JlZW5zaG90LFxuICAjcGFnZS1wcm9kdWN0cy1zdHVkaW8gLnRvcCBzZWN0aW9uIC5zY3JlZW5zaG90LWdyb3VwIHtcbiAgICBib3JkZXItcmFkaXVzOiA4cHg7XG4gICAgbWFyZ2luOiA5NnB4IC03OHB4IDEyOHB4O1xuICAgIG1heC13aWR0aDogY2FsYygxMDAlICsgMTU1cHgpOyB9XG4gICNwYWdlLXByb2R1Y3RzLXN0dWRpbyAudG9wIHNlY3Rpb24gLnNjcmVlbnNob3QtZ3JvdXAge1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsgfVxuICAgICNwYWdlLXByb2R1Y3RzLXN0dWRpbyAudG9wIHNlY3Rpb24gLnNjcmVlbnNob3QtZ3JvdXAgaW1nIHtcbiAgICAgIG1heC13aWR0aDogMTAwJTsgfVxuICAgICNwYWdlLXByb2R1Y3RzLXN0dWRpbyAudG9wIHNlY3Rpb24gLnNjcmVlbnNob3QtZ3JvdXAgaW1nOm5vdCg6Zmlyc3QtY2hpbGQpIHtcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgIHRvcDogMDtcbiAgICAgIGxlZnQ6IDA7XG4gICAgICBhbmltYXRpb246IDEwcyBjcm9zc0ZhZGVJbk91dCBpbmZpbml0ZTsgfVxuICAjcGFnZS1wcm9kdWN0cy1zdHVkaW8gLnRvcCBoZ3JvdXAgaDQsXG4gICNwYWdlLXByb2R1Y3RzLXN0dWRpbyAudG9wIGhncm91cCBoMSxcbiAgI3BhZ2UtcHJvZHVjdHMtc3R1ZGlvIC50b3AgaGdyb3VwIHAsXG4gICNwYWdlLXByb2R1Y3RzLXN0dWRpbyAudG9wIGhncm91cCAuYnRuIHtcbiAgICBhbmltYXRpb246IC4ycyBmYWRlSW5VcCBlYXNlLW91dCBmb3J3YXJkcztcbiAgICBvcGFjaXR5OiAwOyB9XG4gICNwYWdlLXByb2R1Y3RzLXN0dWRpbyAudG9wIGhncm91cCBoNCB7XG4gICAgYW5pbWF0aW9uLWRlbGF5OiAuM3M7IH1cbiAgI3BhZ2UtcHJvZHVjdHMtc3R1ZGlvIC50b3AgaGdyb3VwIGgxIHtcbiAgICBhbmltYXRpb24tZGVsYXk6IDAuNHM7IH1cbiAgI3BhZ2UtcHJvZHVjdHMtc3R1ZGlvIC50b3AgaGdyb3VwIHAge1xuICAgIGFuaW1hdGlvbi1kZWxheTogMC41czsgfVxuICAjcGFnZS1wcm9kdWN0cy1zdHVkaW8gLnRvcCBoZ3JvdXAgLmJ0biB7XG4gICAgYW5pbWF0aW9uLWRlbGF5OiAuNnM7IH1cbiAgI3BhZ2UtcHJvZHVjdHMtc3R1ZGlvIC50b3AgaGdyb3VwIC5idG46bGFzdC1jaGlsZCB7XG4gICAgYW5pbWF0aW9uLWRlbGF5OiAuN3M7IH1cbiAgI3BhZ2UtcHJvZHVjdHMtc3R1ZGlvIC50b3AgcCBhIHtcbiAgICBjb2xvcjogd2hpdGU7IH1cbiAgI3BhZ2UtcHJvZHVjdHMtc3R1ZGlvIC50b3AgdmlkZW8sXG4gICNwYWdlLXByb2R1Y3RzLXN0dWRpbyAudG9wIC5zY3JlZW5zaG90IHtcbiAgICBhbmltYXRpb246IC41cyBmYWRlSW4gZm9yd2FyZHMgMXM7XG4gICAgb3BhY2l0eTogMDsgfVxuXG4jcGFnZS1wcm9kdWN0cy1zdHVkaW8gbWFpbiBzZWN0aW9uIHtcbiAgcGFkZGluZy10b3A6IDE3OHB4O1xuICBsZXR0ZXItc3BhY2luZzogLTAuMDFlbTsgfVxuICAjcGFnZS1wcm9kdWN0cy1zdHVkaW8gbWFpbiBzZWN0aW9uLnNvbGlkIHtcbiAgICBiYWNrZ3JvdW5kOiAjMTQxNzFDOyB9XG4gICNwYWdlLXByb2R1Y3RzLXN0dWRpbyBtYWluIHNlY3Rpb24gaGdyb3VwIHtcbiAgICBtYXgtd2lkdGg6IDc4NnB4OyB9XG4gICAgI3BhZ2UtcHJvZHVjdHMtc3R1ZGlvIG1haW4gc2VjdGlvbiBoZ3JvdXAgaDIge1xuICAgICAgbGluZS1oZWlnaHQ6IG5vcm1hbDtcbiAgICAgIGZvbnQtc2l6ZTogNDhweDtcbiAgICAgIGxldHRlci1zcGFjaW5nOiAtMC4wM2VtO1xuICAgICAgbWFyZ2luLWJvdHRvbTogMjJweDsgfVxuICAgICNwYWdlLXByb2R1Y3RzLXN0dWRpbyBtYWluIHNlY3Rpb24gaGdyb3VwIHAge1xuICAgICAgZm9udC1mYW1pbHk6IFwiRWluYVwiLCBcIkhlbHZldGljYSBOZXVlXCIsIEhlbHZldGljYSwgc2Fucy1zZXJpZjtcbiAgICAgIGZvbnQtc2l6ZTogMjJweDtcbiAgICAgIGxpbmUtaGVpZ2h0OiAzOXB4OyB9XG4gICAgICAjcGFnZS1wcm9kdWN0cy1zdHVkaW8gbWFpbiBzZWN0aW9uIGhncm91cCBwIHN0cm9uZyB7XG4gICAgICAgIHBhZGRpbmctbGVmdDogMDtcbiAgICAgICAgbWFyZ2luLWJvdHRvbTogMDsgfVxuICAgICNwYWdlLXByb2R1Y3RzLXN0dWRpbyBtYWluIHNlY3Rpb24gaGdyb3VwLmNlbnRlcmVkIHtcbiAgICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICAgIG1hcmdpbjogMCBhdXRvIDkycHg7XG4gICAgICBtYXgtd2lkdGg6IDgwMHB4OyB9XG4gICAgICAjcGFnZS1wcm9kdWN0cy1zdHVkaW8gbWFpbiBzZWN0aW9uIGhncm91cC5jZW50ZXJlZCBoZ3JvdXAge1xuICAgICAgICBtYXgtd2lkdGg6IDgxNHB4OyB9XG4gICAgICAgICNwYWdlLXByb2R1Y3RzLXN0dWRpbyBtYWluIHNlY3Rpb24gaGdyb3VwLmNlbnRlcmVkIGhncm91cCBwIHtcbiAgICAgICAgICBsaW5lLWhlaWdodDogMjZweDtcbiAgICAgICAgICBtYXJnaW4tdG9wOiAzMnB4OyB9XG4gICNwYWdlLXByb2R1Y3RzLXN0dWRpbyBtYWluIHNlY3Rpb24gdmlkZW8ge1xuICAgIGJveC1zaGFkb3c6IDBweCAxNnB4IDY0cHggYmxhY2s7IH1cbiAgI3BhZ2UtcHJvZHVjdHMtc3R1ZGlvIG1haW4gc2VjdGlvbiB2aWRlbyxcbiAgI3BhZ2UtcHJvZHVjdHMtc3R1ZGlvIG1haW4gc2VjdGlvbiAuc2NyZWVuc2hvdCB7XG4gICAgbWF4LXdpZHRoOiAxMDAlO1xuICAgIG1hcmdpbjogNzJweCBhdXRvIDE0MHB4O1xuICAgIGJvcmRlci1yYWRpdXM6IDhweDsgfVxuICAjcGFnZS1wcm9kdWN0cy1zdHVkaW8gbWFpbiBzZWN0aW9uIGgyIHtcbiAgICBjb2xvcjogI2ZmZjsgfVxuXG4jcGFnZS1wcm9kdWN0cy1zdHVkaW8gbWFpbiBzZWN0aW9uLFxuI3BhZ2UtcHJvZHVjdHMtc3R1ZGlvIC50b3Agc2VjdGlvbiB7XG4gIG1hcmdpbi10b3A6IC0xcHg7IH1cbiAgI3BhZ2UtcHJvZHVjdHMtc3R1ZGlvIG1haW4gc2VjdGlvbiBoMyxcbiAgI3BhZ2UtcHJvZHVjdHMtc3R1ZGlvIC50b3Agc2VjdGlvbiBoMyB7XG4gICAgbGluZS1oZWlnaHQ6IG5vcm1hbDtcbiAgICBmb250LXNpemU6IDM2cHg7XG4gICAgbGV0dGVyLXNwYWNpbmc6IC0wLjAxNGVtO1xuICAgIGNvbG9yOiAjZmZmO1xuICAgIG1hcmdpbi1ib3R0b206IDgwcHg7IH1cbiAgI3BhZ2UtcHJvZHVjdHMtc3R1ZGlvIG1haW4gc2VjdGlvbiB1bCxcbiAgI3BhZ2UtcHJvZHVjdHMtc3R1ZGlvIC50b3Agc2VjdGlvbiB1bCB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBsaXN0LXN0eWxlOiBub25lO1xuICAgIHBhZGRpbmc6IDA7XG4gICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xuICAgIG1hcmdpbi1ib3R0b206IDE4MnB4OyB9XG4gICAgQG1lZGlhIChtYXgtd2lkdGg6IDc2OHB4KSB7XG4gICAgICAjcGFnZS1wcm9kdWN0cy1zdHVkaW8gbWFpbiBzZWN0aW9uIHVsLFxuICAgICAgI3BhZ2UtcHJvZHVjdHMtc3R1ZGlvIC50b3Agc2VjdGlvbiB1bCB7XG4gICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47IH0gfVxuICAgICNwYWdlLXByb2R1Y3RzLXN0dWRpbyBtYWluIHNlY3Rpb24gdWwucXVhdHJvIGxpLFxuICAgICNwYWdlLXByb2R1Y3RzLXN0dWRpbyAudG9wIHNlY3Rpb24gdWwucXVhdHJvIGxpIHtcbiAgICAgIGZsZXg6IDAgMSAyNDRweDsgfVxuICAgICAgQG1lZGlhIChtYXgtd2lkdGg6IDEyMjBweCkge1xuICAgICAgICAjcGFnZS1wcm9kdWN0cy1zdHVkaW8gbWFpbiBzZWN0aW9uIHVsLnF1YXRybyBsaSxcbiAgICAgICAgI3BhZ2UtcHJvZHVjdHMtc3R1ZGlvIC50b3Agc2VjdGlvbiB1bC5xdWF0cm8gbGkge1xuICAgICAgICAgIGZsZXg6IDAgMCAyMTBweDsgfSB9XG4gICAgI3BhZ2UtcHJvZHVjdHMtc3R1ZGlvIG1haW4gc2VjdGlvbiB1bC5xdWF0cm8gc3Ryb25nLFxuICAgICNwYWdlLXByb2R1Y3RzLXN0dWRpbyAudG9wIHNlY3Rpb24gdWwucXVhdHJvIHN0cm9uZyB7XG4gICAgICBwYWRkaW5nOiAwO1xuICAgICAgcGFkZGluZy10b3A6IDUxcHg7IH1cbiAgICAjcGFnZS1wcm9kdWN0cy1zdHVkaW8gbWFpbiBzZWN0aW9uIHVsLnF1YXRybyBwLFxuICAgICNwYWdlLXByb2R1Y3RzLXN0dWRpbyAudG9wIHNlY3Rpb24gdWwucXVhdHJvIHAge1xuICAgICAgbWFyZ2luLXRvcDogMDtcbiAgICAgIGxpbmUtaGVpZ2h0OiAyOXB4OyB9XG4gICNwYWdlLXByb2R1Y3RzLXN0dWRpbyBtYWluIHNlY3Rpb24gc3Ryb25nLFxuICAjcGFnZS1wcm9kdWN0cy1zdHVkaW8gLnRvcCBzZWN0aW9uIHN0cm9uZyB7XG4gICAgZm9udC1mYW1pbHk6IFwiRWluYVwiLCBcIkhlbHZldGljYSBOZXVlXCIsIEhlbHZldGljYSwgc2Fucy1zZXJpZjtcbiAgICBmb250LXNpemU6IDIwcHg7XG4gICAgY29sb3I6ICNmZmY7XG4gICAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgICBtYXJnaW4tYm90dG9tOiAxMnB4O1xuICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICBwYWRkaW5nLWxlZnQ6IDM5cHg7IH1cbiAgI3BhZ2UtcHJvZHVjdHMtc3R1ZGlvIG1haW4gc2VjdGlvbiBsaSxcbiAgI3BhZ2UtcHJvZHVjdHMtc3R1ZGlvIC50b3Agc2VjdGlvbiBsaSB7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIHBhZGRpbmctdG9wOiAwO1xuICAgIHRleHQtYWxpZ246IGxlZnQ7XG4gICAgZmxleDogMCAwIDMyNnB4OyB9XG4gICAgI3BhZ2UtcHJvZHVjdHMtc3R1ZGlvIG1haW4gc2VjdGlvbiBsaS51aSBzdHJvbmc6OmJlZm9yZSxcbiAgICAjcGFnZS1wcm9kdWN0cy1zdHVkaW8gLnRvcCBzZWN0aW9uIGxpLnVpIHN0cm9uZzo6YmVmb3JlIHtcbiAgICAgIGJhY2tncm91bmQtcG9zaXRpb246IDAgMHB4OyB9XG4gICAgI3BhZ2UtcHJvZHVjdHMtc3R1ZGlvIG1haW4gc2VjdGlvbiBsaS5uby1kb2NzIHN0cm9uZzo6YmVmb3JlLFxuICAgICNwYWdlLXByb2R1Y3RzLXN0dWRpbyAudG9wIHNlY3Rpb24gbGkubm8tZG9jcyBzdHJvbmc6OmJlZm9yZSB7XG4gICAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwIC0yNnB4OyB9XG4gICAgI3BhZ2UtcHJvZHVjdHMtc3R1ZGlvIG1haW4gc2VjdGlvbiBsaS5zZWN1cmUgc3Ryb25nOjpiZWZvcmUsXG4gICAgI3BhZ2UtcHJvZHVjdHMtc3R1ZGlvIC50b3Agc2VjdGlvbiBsaS5zZWN1cmUgc3Ryb25nOjpiZWZvcmUge1xuICAgICAgYmFja2dyb3VuZC1wb3NpdGlvbjogMCAtNTJweDsgfVxuICAgICNwYWdlLXByb2R1Y3RzLXN0dWRpbyBtYWluIHNlY3Rpb24gbGkuZHJhZyBzdHJvbmc6OmJlZm9yZSxcbiAgICAjcGFnZS1wcm9kdWN0cy1zdHVkaW8gLnRvcCBzZWN0aW9uIGxpLmRyYWcgc3Ryb25nOjpiZWZvcmUge1xuICAgICAgYmFja2dyb3VuZC1wb3NpdGlvbjogMCAtNzhweDsgfVxuICAgICNwYWdlLXByb2R1Y3RzLXN0dWRpbyBtYWluIHNlY3Rpb24gbGkucHJvcGVydGllcyBzdHJvbmc6OmJlZm9yZSxcbiAgICAjcGFnZS1wcm9kdWN0cy1zdHVkaW8gLnRvcCBzZWN0aW9uIGxpLnByb3BlcnRpZXMgc3Ryb25nOjpiZWZvcmUge1xuICAgICAgYmFja2dyb3VuZC1wb3NpdGlvbjogMCAtMTA0cHg7IH1cbiAgICAjcGFnZS1wcm9kdWN0cy1zdHVkaW8gbWFpbiBzZWN0aW9uIGxpLmJhY2tlbmQgc3Ryb25nOjpiZWZvcmUsXG4gICAgI3BhZ2UtcHJvZHVjdHMtc3R1ZGlvIC50b3Agc2VjdGlvbiBsaS5iYWNrZW5kIHN0cm9uZzo6YmVmb3JlIHtcbiAgICAgIGJhY2tncm91bmQtcG9zaXRpb246IDAgLTEzMHB4OyB9XG4gICAgI3BhZ2UtcHJvZHVjdHMtc3R1ZGlvIG1haW4gc2VjdGlvbiBsaS5saXZlIHN0cm9uZzo6YmVmb3JlLFxuICAgICNwYWdlLXByb2R1Y3RzLXN0dWRpbyAudG9wIHNlY3Rpb24gbGkubGl2ZSBzdHJvbmc6OmJlZm9yZSB7XG4gICAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwIC0xNTZweDsgfVxuICAgICNwYWdlLXByb2R1Y3RzLXN0dWRpbyBtYWluIHNlY3Rpb24gbGkubmF0aXZlIHN0cm9uZzo6YmVmb3JlLFxuICAgICNwYWdlLXByb2R1Y3RzLXN0dWRpbyAudG9wIHNlY3Rpb24gbGkubmF0aXZlIHN0cm9uZzo6YmVmb3JlIHtcbiAgICAgIGJhY2tncm91bmQtcG9zaXRpb246IDAgLTE4MnB4OyB9XG4gICAgI3BhZ2UtcHJvZHVjdHMtc3R1ZGlvIG1haW4gc2VjdGlvbiBsaS5kZXZpY2Ugc3Ryb25nOjpiZWZvcmUsXG4gICAgI3BhZ2UtcHJvZHVjdHMtc3R1ZGlvIC50b3Agc2VjdGlvbiBsaS5kZXZpY2Ugc3Ryb25nOjpiZWZvcmUge1xuICAgICAgYmFja2dyb3VuZC1wb3NpdGlvbjogMCAtMjA4cHg7IH1cbiAgICAjcGFnZS1wcm9kdWN0cy1zdHVkaW8gbWFpbiBzZWN0aW9uIGxpLmFzc2V0cyBzdHJvbmc6OmJlZm9yZSxcbiAgICAjcGFnZS1wcm9kdWN0cy1zdHVkaW8gLnRvcCBzZWN0aW9uIGxpLmFzc2V0cyBzdHJvbmc6OmJlZm9yZSB7XG4gICAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwIC0yMzRweDsgfVxuICAgICNwYWdlLXByb2R1Y3RzLXN0dWRpbyBtYWluIHNlY3Rpb24gbGkudGhlbWUgc3Ryb25nOjpiZWZvcmUsXG4gICAgI3BhZ2UtcHJvZHVjdHMtc3R1ZGlvIC50b3Agc2VjdGlvbiBsaS50aGVtZSBzdHJvbmc6OmJlZm9yZSB7XG4gICAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwIC0yNjBweDsgfVxuICAgICNwYWdlLXByb2R1Y3RzLXN0dWRpbyBtYWluIHNlY3Rpb24gbGkuY29yZG92YSBzdHJvbmc6OmJlZm9yZSxcbiAgICAjcGFnZS1wcm9kdWN0cy1zdHVkaW8gLnRvcCBzZWN0aW9uIGxpLmNvcmRvdmEgc3Ryb25nOjpiZWZvcmUge1xuICAgICAgYmFja2dyb3VuZC1wb3NpdGlvbjogMCAtMjg2cHg7IH1cbiAgICAjcGFnZS1wcm9kdWN0cy1zdHVkaW8gbWFpbiBzZWN0aW9uIGxpLmNpIHN0cm9uZzo6YmVmb3JlLFxuICAgICNwYWdlLXByb2R1Y3RzLXN0dWRpbyAudG9wIHNlY3Rpb24gbGkuY2kgc3Ryb25nOjpiZWZvcmUge1xuICAgICAgYmFja2dyb3VuZC1wb3NpdGlvbjogMCAtMzEycHg7IH1cbiAgICBAbWVkaWEgKG1heC13aWR0aDogMTIyMHB4KSB7XG4gICAgICAjcGFnZS1wcm9kdWN0cy1zdHVkaW8gbWFpbiBzZWN0aW9uIGxpLFxuICAgICAgI3BhZ2UtcHJvZHVjdHMtc3R1ZGlvIC50b3Agc2VjdGlvbiBsaSB7XG4gICAgICAgIGZsZXgtYmFzaXM6IGNhbGMoMzMlIC0gMjRweCk7IH0gfVxuICAgIEBtZWRpYSAobWF4LXdpZHRoOiA3NjhweCkge1xuICAgICAgI3BhZ2UtcHJvZHVjdHMtc3R1ZGlvIG1haW4gc2VjdGlvbiBsaSxcbiAgICAgICNwYWdlLXByb2R1Y3RzLXN0dWRpbyAudG9wIHNlY3Rpb24gbGkge1xuICAgICAgICBmbGV4LWJhc2lzOiAxMDAlO1xuICAgICAgICBtYXJnaW4tYm90dG9tOiAzMnB4OyB9IH1cbiAgICAjcGFnZS1wcm9kdWN0cy1zdHVkaW8gbWFpbiBzZWN0aW9uIGxpIHN0cm9uZzo6YmVmb3JlLFxuICAgICNwYWdlLXByb2R1Y3RzLXN0dWRpbyAudG9wIHNlY3Rpb24gbGkgc3Ryb25nOjpiZWZvcmUge1xuICAgICAgYmFja2dyb3VuZDogdXJsKFwiL2ltZy9wcm9kdWN0cy9zdHVkaW8vaWNvLWZlYXR1cmVzLXNtLnBuZ1wiKSBuby1yZXBlYXQgMCAwO1xuICAgICAgYmFja2dyb3VuZC1zaXplOiAyNnB4O1xuICAgICAgd2lkdGg6IDI2cHg7XG4gICAgICBoZWlnaHQ6IDI2cHg7XG4gICAgICBjb250ZW50OiAnJztcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgIHRvcDogMDtcbiAgICAgIGxlZnQ6IDA7IH1cbiAgICAjcGFnZS1wcm9kdWN0cy1zdHVkaW8gbWFpbiBzZWN0aW9uIGxpIC5waWxsLFxuICAgICNwYWdlLXByb2R1Y3RzLXN0dWRpbyAudG9wIHNlY3Rpb24gbGkgLnBpbGwge1xuICAgICAgY29sb3I6ICM0YThiZmM7XG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICB0b3A6IDFweDtcbiAgICAgIGxlZnQ6IDM2cHg7XG4gICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgIGJvcmRlcjogMnB4IHNvbGlkICM0YThiZmM7XG4gICAgICBwYWRkaW5nOiAycHggNXB4IDFweDtcbiAgICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XG4gICAgICBmb250LXdlaWdodDogODAwO1xuICAgICAgbGV0dGVyLXNwYWNpbmc6IC4xZW07XG4gICAgICBib3JkZXItcmFkaXVzOiAxMnB4O1xuICAgICAgZm9udC1zaXplOiAxMXB4OyB9XG4gICNwYWdlLXByb2R1Y3RzLXN0dWRpbyBtYWluIHNlY3Rpb24gcCxcbiAgI3BhZ2UtcHJvZHVjdHMtc3R1ZGlvIC50b3Agc2VjdGlvbiBwIHtcbiAgICBmb250LWZhbWlseTogXCJJbnRlclwiLCBcIkludGVyIFVJXCIsIEhlbHZldGljYSwgQXJpYWwsIHNhbnMtc2VyaWY7XG4gICAgbGluZS1oZWlnaHQ6IDI5cHg7XG4gICAgZm9udC1zaXplOiAxNnB4O1xuICAgIGNvbG9yOiAjQjJCRUNEO1xuICAgIGZvbnQtd2VpZ2h0OiA0MDA7IH1cblxuI3BhZ2UtcHJvZHVjdHMtc3R1ZGlvIC50b3Agc2VjdGlvbiBsaSB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTsgfVxuICAjcGFnZS1wcm9kdWN0cy1zdHVkaW8gLnRvcCBzZWN0aW9uIGxpIHN0cm9uZyB7XG4gICAgcGFkZGluZy10b3A6IDc1cHg7XG4gICAgcGFkZGluZy1sZWZ0OiAwOyB9XG4gICAgI3BhZ2UtcHJvZHVjdHMtc3R1ZGlvIC50b3Agc2VjdGlvbiBsaSBzdHJvbmc6OmJlZm9yZSB7XG4gICAgICBiYWNrZ3JvdW5kOiB1cmwoXCIvaW1nL3Byb2R1Y3RzL3N0dWRpby9pY28tZmVhdHVyZXMtbGcucG5nXCIpIG5vLXJlcGVhdCAwIDA7XG4gICAgICBiYWNrZ3JvdW5kLXNpemU6IDQ4cHg7XG4gICAgICB3aWR0aDogNDhweDtcbiAgICAgIGhlaWdodDogNDhweDtcbiAgICAgIGNvbnRlbnQ6ICcnO1xuICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgdG9wOiAwO1xuICAgICAgbGVmdDogMDsgfVxuICAjcGFnZS1wcm9kdWN0cy1zdHVkaW8gLnRvcCBzZWN0aW9uIGxpLmNyZWF0ZSBzdHJvbmc6OmJlZm9yZSB7XG4gICAgYmFja2dyb3VuZC1wb3NpdGlvbjogMCAwcHg7IH1cbiAgI3BhZ2UtcHJvZHVjdHMtc3R1ZGlvIC50b3Agc2VjdGlvbiBsaS50YWNrbGUgc3Ryb25nOjpiZWZvcmUge1xuICAgIGJhY2tncm91bmQtcG9zaXRpb246IDAgLTQ4cHg7IH1cbiAgI3BhZ2UtcHJvZHVjdHMtc3R1ZGlvIC50b3Agc2VjdGlvbiBsaS5zaGlwIHN0cm9uZzo6YmVmb3JlIHtcbiAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwIC05NnB4OyB9XG5cbiNwYWdlLXByb2R1Y3RzLXN0dWRpbyAudmlkZW8tY29udGFpbmVyIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlOyB9XG4gICNwYWdlLXByb2R1Y3RzLXN0dWRpbyAudmlkZW8tY29udGFpbmVyIC5wcmV2aWV3IHtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgdG9wOiA0MHB4O1xuICAgIHJpZ2h0OiAwO1xuICAgIG1heC13aWR0aDogNDAlO1xuICAgIHdpZHRoOiA0MjBweDtcbiAgICBvcGFjaXR5OiAwO1xuICAgIHRyYW5zaXRpb246IDAuNXMgb3BhY2l0eSBlYXNlLWluIDAuNXMsIDAuOHMgdHJhbnNmb3JtIGN1YmljLWJlemllcigwLjUsIDAsIDAsIDEpIDAuNXM7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDI1cHgpOyB9XG4gICNwYWdlLXByb2R1Y3RzLXN0dWRpbyAudmlkZW8tY29udGFpbmVyIHZpZGVvLFxuICAjcGFnZS1wcm9kdWN0cy1zdHVkaW8gLnZpZGVvLWNvbnRhaW5lciAuc2NyZWVuc2hvdCB7XG4gICAgdHJhbnNmb3JtLW9yaWdpbjogMCA1MCU7XG4gICAgdHJhbnNpdGlvbjogMXMgZmlsdGVyIGVhc2UsIDFzIHRyYW5zZm9ybSBjdWJpYy1iZXppZXIoMC41LCAwLCAwLCAxKSwgMXMgb3BhY2l0eSwgMXMgYm94LXNoYWRvdzsgfVxuICAjcGFnZS1wcm9kdWN0cy1zdHVkaW8gLnZpZGVvLWNvbnRhaW5lci5maW5pc2hlZCAucHJldmlldyB7XG4gICAgb3BhY2l0eTogMTtcbiAgICB0cmFuc2Zvcm06IG5vbmU7IH1cbiAgI3BhZ2UtcHJvZHVjdHMtc3R1ZGlvIC52aWRlby1jb250YWluZXIuZmluaXNoZWQgdmlkZW8ge1xuICAgIGJveC1zaGFkb3c6IDBweCAxNnB4IDY0cHggcmdiYSgwLCAwLCAwLCAwKTsgfVxuICAjcGFnZS1wcm9kdWN0cy1zdHVkaW8gLnZpZGVvLWNvbnRhaW5lci5maW5pc2hlZCB2aWRlbyxcbiAgI3BhZ2UtcHJvZHVjdHMtc3R1ZGlvIC52aWRlby1jb250YWluZXIuZmluaXNoZWQgLnNjcmVlbnNob3Qge1xuICAgIGZpbHRlcjogYmx1cigzcHgpO1xuICAgIG9wYWNpdHk6IC41O1xuICAgIHRyYW5zZm9ybTogc2NhbGUzZCgwLjksIDAuOSwgMSk7IH1cblxuI3BhZ2UtcHJvZHVjdHMtc3R1ZGlvIG1haW4gc2VjdGlvbiB7XG4gIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCgxODBkZWcsICMxMjE0MTcgMCUsICMwNjA5MEQgMTAwJSk7IH1cblxuI3BhZ2UtcHJvZHVjdHMtc3R1ZGlvIC5tb2RhbCBoZ3JvdXAge1xuICBwYWRkaW5nLXRvcDogMThweDtcbiAgcGFkZGluZy1ib3R0b206IDMycHg7IH1cblxuI3BhZ2UtcHJvZHVjdHMtc3R1ZGlvIC5tb2RhbCBoMyB7XG4gIGZvbnQtc2l6ZTogMjlweDtcbiAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgY29sb3I6ICMxNzFhMjA7XG4gIG1hcmdpbjogMThweCAwIDhweDtcbiAgbGV0dGVyLXNwYWNpbmc6IC0wLjAzZW07IH1cblxuI3BhZ2UtcHJvZHVjdHMtc3R1ZGlvIC5tb2RhbCBwIHtcbiAgZm9udC1zaXplOiAxOHB4O1xuICBsaW5lLWhlaWdodDogMjhweDtcbiAgY29sb3I6ICM0YzU3NmM7XG4gIG1heC13aWR0aDogNDAwcHg7XG4gIG1hcmdpbjogMCBhdXRvOyB9XG4gICNwYWdlLXByb2R1Y3RzLXN0dWRpbyAubW9kYWwgcC5zbSB7XG4gICAgZm9udC1zaXplOiAxM3B4O1xuICAgIGxpbmUtaGVpZ2h0OiAyMnB4O1xuICAgIGNvbG9yOiAjNmY3Nzg2OyB9XG5cbiNwYWdlLXByb2R1Y3RzLXN0dWRpbyAubW9kYWwgZm9ybSB7XG4gIG1heC13aWR0aDogMTAwJTtcbiAgcGFkZGluZzogMCAxNXB4IDE1cHg7IH1cblxuI3BhZ2UtcHJvZHVjdHMtc3R1ZGlvIC5tb2RhbCAuaHNfc3VibWl0IHtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICBmb250LXdlaWdodDogNjAwOyB9XG4gICNwYWdlLXByb2R1Y3RzLXN0dWRpbyAubW9kYWwgLmhzX3N1Ym1pdCBpbnB1dCB7XG4gICAgbWFyZ2luLXRvcDogMTVweDsgfVxuXG4jcGFnZS1wcm9kdWN0cy1zdHVkaW8gLnByb21vLXN0dWRpbyB7XG4gIGJhY2tncm91bmQ6ICMxRDIzMkM7IH1cbiAgI3BhZ2UtcHJvZHVjdHMtc3R1ZGlvIC5wcm9tby1zdHVkaW8gaDIge1xuICAgIGNvbG9yOiB3aGl0ZTtcbiAgICBmb250LXdlaWdodDogNDAwO1xuICAgIG1heC13aWR0aDogNjgwcHg7XG4gICAgbWFyZ2luLWJvdHRvbTogMTZweDsgfVxuICAgICNwYWdlLXByb2R1Y3RzLXN0dWRpbyAucHJvbW8tc3R1ZGlvIGgyIHN0cm9uZyB7XG4gICAgICBmb250LXdlaWdodDogNjAwOyB9XG4gICNwYWdlLXByb2R1Y3RzLXN0dWRpbyAucHJvbW8tc3R1ZGlvIHAge1xuICAgIGNvbG9yOiAjNEQ4REZGOyB9XG4gICNwYWdlLXByb2R1Y3RzLXN0dWRpbyAucHJvbW8tc3R1ZGlvIC5idG4ge1xuICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xuICAgIGJvcmRlcjogMnB4IHNvbGlkIHJnYmEoODEsIDE2NywgMjU1LCAwLjcpOyB9XG4gICNwYWdlLXByb2R1Y3RzLXN0dWRpbyAucHJvbW8tc3R1ZGlvIC5idG5zIHtcbiAgICBwYWRkaW5nLWxlZnQ6IDI0cHg7XG4gICAgbWFyZ2luLWxlZnQ6IGF1dG87IH1cbiJdfQ== */\n"
  },
  {
    "path": "content/css/pages/resources/case-studies.css",
    "content": "#page-case-studies .sub-header .download {\n  padding-right: 0;\n  text-transform: uppercase;\n  letter-spacing: .02em;\n  font-size: 12px; }\n\n#page-case-studies main hgroup {\n  margin-top: 24px;\n  margin-bottom: 53px; }\n  @media (max-width: 767px) {\n    #page-case-studies main hgroup {\n      margin-bottom: 0; } }\n  #page-case-studies main hgroup strong {\n    text-transform: uppercase;\n    font-size: 11px;\n    font-weight: 600;\n    color: #9cabc4;\n    font-family: \"Eina\", \"Helvetica Neue\", Helvetica, sans-serif; }\n  #page-case-studies main hgroup h4 {\n    margin-top: 62px;\n    font-size: 12px;\n    color: #92A1B3;\n    text-transform: uppercase;\n    letter-spacing: .14em; }\n  #page-case-studies main hgroup h1 {\n    font-size: 46px;\n    margin-top: 56px; }\n  #page-case-studies main hgroup p {\n    font-weight: 400;\n    color: #898989;\n    max-width: 750px;\n    margin: 13px auto;\n    font-size: 20px;\n    line-height: 1.8em;\n    letter-spacing: .01em; }\n  #page-case-studies main hgroup .byline {\n    font-style: normal;\n    font-weight: normal;\n    line-height: 29px;\n    font-size: 16px;\n    letter-spacing: -0.02em;\n    color: #92A1B3;\n    margin-bottom: 42px; }\n    #page-case-studies main hgroup .byline .avatar {\n      width: 28px;\n      height: 28px;\n      margin: 0 8px 0 0;\n      border-radius: 50%;\n      display: inline-block; }\n    #page-case-studies main hgroup .byline .tags {\n      padding: 0;\n      margin-left: 4px;\n      list-style: none;\n      vertical-align: 2px;\n      display: inline-block; }\n      #page-case-studies main hgroup .byline .tags li {\n        font-size: 10px;\n        color: #ced6e0;\n        background: transparent;\n        padding: 3px 5px 4px;\n        line-height: 1em;\n        margin-right: 2px;\n        font-weight: 600;\n        text-transform: uppercase;\n        border-radius: 4px;\n        letter-spacing: 0.08em;\n        vertical-align: 1px;\n        display: inline-block;\n        border: 1px solid #E9EDF3; }\n  #page-case-studies main hgroup img {\n    margin: 24px auto;\n    max-width: 100%; }\n\n#page-case-studies main {\n  display: -ms-flexbox;\n  display: flex;\n  overflow: visible;\n  padding-bottom: 160px; }\n  @media (max-width: 768px) {\n    #page-case-studies main {\n      padding-bottom: 80px; } }\n  @media (max-width: 767px) {\n    #page-case-studies main {\n      -ms-flex-direction: column;\n          flex-direction: column; } }\n\n#page-case-studies .sticky-wrapper {\n  position: -webkit-sticky;\n  position: sticky;\n  top: 128px; }\n\n#page-case-studies aside {\n  -ms-flex: 0 1 208px;\n      flex: 0 1 208px;\n  padding-right: 20px;\n  margin-bottom: 0;\n  margin-top: 52px; }\n  #page-case-studies aside h4 {\n    font-size: 10px;\n    text-transform: uppercase;\n    color: #a4b3cc;\n    font-weight: 600;\n    letter-spacing: .16em; }\n  #page-case-studies aside ul {\n    padding: 0;\n    font-size: 14px;\n    margin: 9px 0 30px;\n    list-style: none;\n    line-height: 1.4em; }\n    @media (max-width: 1219px) {\n      #page-case-studies aside ul {\n        font-size: 12px; } }\n  #page-case-studies aside li {\n    margin: 12px 0 13px; }\n  #page-case-studies aside a {\n    color: #52678c;\n    display: block;\n    transition: .2s transform ease, .2s color; }\n    #page-case-studies aside a:hover, #page-case-studies aside a:active, #page-case-studies aside a:focus, #page-case-studies aside a.active {\n      color: #4a8bfc;\n      text-decoration: none; }\n    #page-case-studies aside a.active {\n      -webkit-transform: translateX(8px);\n              transform: translateX(8px); }\n  #page-case-studies aside .btn {\n    margin: 0 0 32px; }\n  #page-case-studies aside .lightblue {\n    background: #e6f0f8;\n    color: #4a8bfc;\n    border-radius: 4px;\n    padding: 9px 16px;\n    display: inline-block;\n    font-size: 11px;\n    text-transform: uppercase;\n    font-weight: 700;\n    letter-spacing: .07em; }\n    #page-case-studies aside .lightblue ion-icon {\n      font-size: 18px;\n      vertical-align: -5px; }\n  #page-case-studies aside .sharing {\n    margin: 0;\n    border-top: 2px solid #f3f5f9;\n    padding-top: 26px; }\n    #page-case-studies aside .sharing li {\n      margin: 0;\n      margin-right: 6px;\n      display: inline-block; }\n    #page-case-studies aside .sharing a {\n      color: #CBD2DD;\n      font-size: 20px; }\n      #page-case-studies aside .sharing a:hover {\n        color: #4a8bfc; }\n    #page-case-studies aside .sharing #web-share {\n      display: none; }\n  @media (max-width: 768px) {\n    #page-case-studies aside {\n      display: none; } }\n\n#page-case-studies .main-col {\n  -ms-flex: 1;\n      flex: 1;\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-direction: column;\n      flex-direction: column;\n  -ms-flex-align: center;\n      align-items: center; }\n\n#page-case-studies .main-col__inner {\n  width: 100%;\n  max-width: 663px;\n  margin-left: 40px; }\n\n@media (max-width: 1219px) {\n  #page-case-studies .main-col {\n    -ms-flex-align: end;\n        align-items: flex-end; }\n  #page-case-studies .main-col__inner {\n    margin-left: 20px; } }\n\n@media (max-width: 768px) {\n  #page-case-studies .main-col {\n    -ms-flex-align: center;\n        align-items: center; }\n  #page-case-studies .main-col__inner {\n    margin-left: 0; } }\n\n#page-case-studies article {\n  padding-bottom: 58px;\n  border-bottom: 1px solid #edf0f6;\n  margin-bottom: 37px; }\n  #page-case-studies article h2 {\n    font-size: 30px;\n    margin-top: 2.65em;\n    margin-bottom: 0.8em;\n    font-weight: 600; }\n    #page-case-studies article h2 strong {\n      font-weight: 600; }\n  #page-case-studies article h3 {\n    font-size: 20px;\n    line-height: 1.3;\n    margin-top: 2.3em;\n    margin-bottom: 1.2em;\n    letter-spacing: -.014em;\n    font-weight: 600; }\n    #page-case-studies article h3 strong {\n      font-weight: 600; }\n  #page-case-studies article h4, #page-case-studies article h5, #page-case-studies article h6 {\n    margin: 1em 0; }\n  #page-case-studies article h4 {\n    text-transform: uppercase;\n    letter-spacing: 0.1em;\n    font-size: 14px; }\n  #page-case-studies article h5 {\n    font-size: 15px; }\n  #page-case-studies article h6 {\n    font-size: 11px;\n    text-transform: uppercase;\n    letter-spacing: 0.1em; }\n  #page-case-studies article p,\n  #page-case-studies article ul,\n  #page-case-studies article ol {\n    font-size: 16px;\n    letter-spacing: -.011em;\n    line-height: 1.75em;\n    margin-bottom: 1.8em;\n    color: #5B708B; }\n  #page-case-studies article ul li + li,\n  #page-case-studies article ol li + li {\n    margin-top: 8px; }\n  #page-case-studies article ul {\n    padding-left: 0; }\n    #page-case-studies article ul li {\n      list-style-type: none;\n      position: relative;\n      padding-left: 18px; }\n      #page-case-studies article ul li:before {\n        content: '';\n        display: inline-block;\n        width: 6px;\n        height: 6px;\n        background: #B2BECD;\n        position: absolute;\n        top: 12px;\n        left: 0;\n        border-radius: 8px; }\n  #page-case-studies article b,\n  #page-case-studies article strong {\n    font-weight: 500; }\n  #page-case-studies article blockquote {\n    background: #f2f5f8;\n    border-radius: 4px;\n    position: relative;\n    padding: 64px 80px 68px 111px;\n    color: #5e749a;\n    font-family: \"Adobe Caslon\", Georgia, Times, \"Times New Roman\", serif;\n    font-style: italic;\n    border: none;\n    margin: 77px -16px 54px; }\n    #page-case-studies article blockquote::before {\n      position: absolute;\n      top: -6px;\n      left: 54px;\n      font-size: 180px;\n      content: '\\201C';\n      color: #e3e7ec; }\n    #page-case-studies article blockquote p {\n      font-size: 18px;\n      position: relative;\n      z-index: 1;\n      letter-spacing: .022em;\n      line-height: 1.8em; }\n      #page-case-studies article blockquote p:last-child {\n        margin-bottom: 0; }\n    #page-case-studies article blockquote cite {\n      font-size: 15px;\n      letter-spacing: .02em; }\n      #page-case-studies article blockquote cite span {\n        color: #9da9bd;\n        margin-left: 8px; }\n  #page-case-studies article img {\n    max-width: 100%; }\n  #page-case-studies article pre,\n  #page-case-studies article code {\n    border: none;\n    background: #f5f7fa; }\n  #page-case-studies article figure {\n    width: 295px;\n    float: right;\n    margin: 8px -20px 16px 74px; }\n    #page-case-studies article figure.left {\n      float: left;\n      margin-right: 74px;\n      margin-left: -20px; }\n    #page-case-studies article figure img {\n      box-shadow: 0 4px 48px rgba(0, 0, 0, 0.2); }\n    #page-case-studies article figure figcaption {\n      color: #a8b0be;\n      font-size: 11px;\n      margin-top: 13px; }\n    @media (max-width: 767px) {\n      #page-case-studies article figure {\n        margin-right: 0;\n        margin-left: 32px; }\n        #page-case-studies article figure.left {\n          margin-left: 0;\n          margin-right: 32px; } }\n    @media (max-width: 480px) {\n      #page-case-studies article figure {\n        width: 100%; } }\n  #page-case-studies article .table-wrap {\n    overflow-x: auto;\n    margin-right: -15px;\n    padding-right: 15px;\n    box-sizing: content-box;\n    font-size: 13px; }\n    #page-case-studies article .table-wrap td,\n    #page-case-studies article .table-wrap th {\n      min-width: 120px;\n      padding-right: 12px; }\n    #page-case-studies article .table-wrap table tbody tr td {\n      border-top-color: #DEE3EA; }\n    #page-case-studies article .table-wrap table > thead > tr > th {\n      border-bottom-color: #E9EDF3;\n      font-weight: 600; }\n\n#page-case-studies .resource-list {\n  margin-bottom: 0; }\n  #page-case-studies .resource-list__header .all {\n    float: right; }\n    #page-case-studies .resource-list__header .all ion-icon {\n      display: inline-block;\n      transition: .2s transform ease; }\n    #page-case-studies .resource-list__header .all:hover ion-icon {\n      -webkit-transform: translateX(2px);\n              transform: translateX(2px); }\n  #page-case-studies .resource-list__header h4 {\n    text-transform: uppercase;\n    font-size: 14px;\n    letter-spacing: .12em; }\n  #page-case-studies .resource-list .resource-card-list {\n    margin-left: -10px;\n    margin-right: -10px; }\n  #page-case-studies .resource-list .resource-card-list--third .resource-card {\n    padding: 5px;\n    height: 214px; }\n  #page-case-studies .resource-list .resource-card-list--third .resource-card a .title {\n    font-size: 18px; }\n\n/*# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImNhc2Utc3R1ZGllcy5jc3MiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7RUFDRSxpQkFBaUI7RUFDakIsMEJBQTBCO0VBQzFCLHNCQUFzQjtFQUN0QixnQkFBZ0IsRUFBRTs7QUFFcEI7RUFDRSxpQkFBaUI7RUFDakIsb0JBQW9CLEVBQUU7RUFDdEI7SUFDRTtNQUNFLGlCQUFpQixFQUFFLEVBQUU7RUFDekI7SUFDRSwwQkFBMEI7SUFDMUIsZ0JBQWdCO0lBQ2hCLGlCQUFpQjtJQUNqQixlQUFlO0lBQ2YsNkRBQTZELEVBQUU7RUFDakU7SUFDRSxpQkFBaUI7SUFDakIsZ0JBQWdCO0lBQ2hCLGVBQWU7SUFDZiwwQkFBMEI7SUFDMUIsc0JBQXNCLEVBQUU7RUFDMUI7SUFDRSxnQkFBZ0I7SUFDaEIsaUJBQWlCLEVBQUU7RUFDckI7SUFDRSxpQkFBaUI7SUFDakIsZUFBZTtJQUNmLGlCQUFpQjtJQUNqQixrQkFBa0I7SUFDbEIsZ0JBQWdCO0lBQ2hCLG1CQUFtQjtJQUNuQixzQkFBc0IsRUFBRTtFQUMxQjtJQUNFLG1CQUFtQjtJQUNuQixvQkFBb0I7SUFDcEIsa0JBQWtCO0lBQ2xCLGdCQUFnQjtJQUNoQix3QkFBd0I7SUFDeEIsZUFBZTtJQUNmLG9CQUFvQixFQUFFO0lBQ3RCO01BQ0UsWUFBWTtNQUNaLGFBQWE7TUFDYixrQkFBa0I7TUFDbEIsbUJBQW1CO01BQ25CLHNCQUFzQixFQUFFO0lBQzFCO01BQ0UsV0FBVztNQUNYLGlCQUFpQjtNQUNqQixpQkFBaUI7TUFDakIsb0JBQW9CO01BQ3BCLHNCQUFzQixFQUFFO01BQ3hCO1FBQ0UsZ0JBQWdCO1FBQ2hCLGVBQWU7UUFDZix3QkFBd0I7UUFDeEIscUJBQXFCO1FBQ3JCLGlCQUFpQjtRQUNqQixrQkFBa0I7UUFDbEIsaUJBQWlCO1FBQ2pCLDBCQUEwQjtRQUMxQixtQkFBbUI7UUFDbkIsdUJBQXVCO1FBQ3ZCLG9CQUFvQjtRQUNwQixzQkFBc0I7UUFDdEIsMEJBQTBCLEVBQUU7RUFDbEM7SUFDRSxrQkFBa0I7SUFDbEIsZ0JBQWdCLEVBQUU7O0FBRXRCO0VBQ0UscUJBQWM7RUFBZCxjQUFjO0VBQ2Qsa0JBQWtCO0VBQ2xCLHNCQUFzQixFQUFFO0VBQ3hCO0lBQ0U7TUFDRSxxQkFBcUIsRUFBRSxFQUFFO0VBQzdCO0lBQ0U7TUFDRSwyQkFBdUI7VUFBdkIsdUJBQXVCLEVBQUUsRUFBRTs7QUFFakM7RUFDRSx5QkFBaUI7RUFBakIsaUJBQWlCO0VBQ2pCLFdBQVcsRUFBRTs7QUFFZjtFQUNFLG9CQUFnQjtNQUFoQixnQkFBZ0I7RUFDaEIsb0JBQW9CO0VBQ3BCLGlCQUFpQjtFQUNqQixpQkFBaUIsRUFBRTtFQUNuQjtJQUNFLGdCQUFnQjtJQUNoQiwwQkFBMEI7SUFDMUIsZUFBZTtJQUNmLGlCQUFpQjtJQUNqQixzQkFBc0IsRUFBRTtFQUMxQjtJQUNFLFdBQVc7SUFDWCxnQkFBZ0I7SUFDaEIsbUJBQW1CO0lBQ25CLGlCQUFpQjtJQUNqQixtQkFBbUIsRUFBRTtJQUNyQjtNQUNFO1FBQ0UsZ0JBQWdCLEVBQUUsRUFBRTtFQUMxQjtJQUNFLG9CQUFvQixFQUFFO0VBQ3hCO0lBQ0UsZUFBZTtJQUNmLGVBQWU7SUFDZiwwQ0FBMEMsRUFBRTtJQUM1QztNQUNFLGVBQWU7TUFDZixzQkFBc0IsRUFBRTtJQUMxQjtNQUNFLG1DQUEyQjtjQUEzQiwyQkFBMkIsRUFBRTtFQUNqQztJQUNFLGlCQUFpQixFQUFFO0VBQ3JCO0lBQ0Usb0JBQW9CO0lBQ3BCLGVBQWU7SUFDZixtQkFBbUI7SUFDbkIsa0JBQWtCO0lBQ2xCLHNCQUFzQjtJQUN0QixnQkFBZ0I7SUFDaEIsMEJBQTBCO0lBQzFCLGlCQUFpQjtJQUNqQixzQkFBc0IsRUFBRTtJQUN4QjtNQUNFLGdCQUFnQjtNQUNoQixxQkFBcUIsRUFBRTtFQUMzQjtJQUNFLFVBQVU7SUFDViw4QkFBOEI7SUFDOUIsa0JBQWtCLEVBQUU7SUFDcEI7TUFDRSxVQUFVO01BQ1Ysa0JBQWtCO01BQ2xCLHNCQUFzQixFQUFFO0lBQzFCO01BQ0UsZUFBZTtNQUNmLGdCQUFnQixFQUFFO01BQ2xCO1FBQ0UsZUFBZSxFQUFFO0lBQ3JCO01BQ0UsY0FBYyxFQUFFO0VBQ3BCO0lBQ0U7TUFDRSxjQUFjLEVBQUUsRUFBRTs7QUFFeEI7RUFDRSxZQUFRO01BQVIsUUFBUTtFQUNSLHFCQUFjO0VBQWQsY0FBYztFQUNkLDJCQUF1QjtNQUF2Qix1QkFBdUI7RUFDdkIsdUJBQW9CO01BQXBCLG9CQUFvQixFQUFFOztBQUV4QjtFQUNFLFlBQVk7RUFDWixpQkFBaUI7RUFDakIsa0JBQWtCLEVBQUU7O0FBRXRCO0VBQ0U7SUFDRSxvQkFBc0I7UUFBdEIsc0JBQXNCLEVBQUU7RUFDMUI7SUFDRSxrQkFBa0IsRUFBRSxFQUFFOztBQUUxQjtFQUNFO0lBQ0UsdUJBQW9CO1FBQXBCLG9CQUFvQixFQUFFO0VBQ3hCO0lBQ0UsZUFBZSxFQUFFLEVBQUU7O0FBRXZCO0VBQ0UscUJBQXFCO0VBQ3JCLGlDQUFpQztFQUNqQyxvQkFBb0IsRUFBRTtFQUN0QjtJQUNFLGdCQUFnQjtJQUNoQixtQkFBbUI7SUFDbkIscUJBQXFCO0lBQ3JCLGlCQUFpQixFQUFFO0lBQ25CO01BQ0UsaUJBQWlCLEVBQUU7RUFDdkI7SUFDRSxnQkFBZ0I7SUFDaEIsaUJBQWlCO0lBQ2pCLGtCQUFrQjtJQUNsQixxQkFBcUI7SUFDckIsd0JBQXdCO0lBQ3hCLGlCQUFpQixFQUFFO0lBQ25CO01BQ0UsaUJBQWlCLEVBQUU7RUFDdkI7SUFDRSxjQUFjLEVBQUU7RUFDbEI7SUFDRSwwQkFBMEI7SUFDMUIsc0JBQXNCO0lBQ3RCLGdCQUFnQixFQUFFO0VBQ3BCO0lBQ0UsZ0JBQWdCLEVBQUU7RUFDcEI7SUFDRSxnQkFBZ0I7SUFDaEIsMEJBQTBCO0lBQzFCLHNCQUFzQixFQUFFO0VBQzFCOzs7SUFHRSxnQkFBZ0I7SUFDaEIsd0JBQXdCO0lBQ3hCLG9CQUFvQjtJQUNwQixxQkFBcUI7SUFDckIsZUFBZSxFQUFFO0VBQ25COztJQUVFLGdCQUFnQixFQUFFO0VBQ3BCO0lBQ0UsZ0JBQWdCLEVBQUU7SUFDbEI7TUFDRSxzQkFBc0I7TUFDdEIsbUJBQW1CO01BQ25CLG1CQUFtQixFQUFFO01BQ3JCO1FBQ0UsWUFBWTtRQUNaLHNCQUFzQjtRQUN0QixXQUFXO1FBQ1gsWUFBWTtRQUNaLG9CQUFvQjtRQUNwQixtQkFBbUI7UUFDbkIsVUFBVTtRQUNWLFFBQVE7UUFDUixtQkFBbUIsRUFBRTtFQUMzQjs7SUFFRSxpQkFBaUIsRUFBRTtFQUNyQjtJQUNFLG9CQUFvQjtJQUNwQixtQkFBbUI7SUFDbkIsbUJBQW1CO0lBQ25CLDhCQUE4QjtJQUM5QixlQUFlO0lBQ2Ysc0VBQXNFO0lBQ3RFLG1CQUFtQjtJQUNuQixhQUFhO0lBQ2Isd0JBQXdCLEVBQUU7SUFDMUI7TUFDRSxtQkFBbUI7TUFDbkIsVUFBVTtNQUNWLFdBQVc7TUFDWCxpQkFBaUI7TUFDakIsaUJBQWlCO01BQ2pCLGVBQWUsRUFBRTtJQUNuQjtNQUNFLGdCQUFnQjtNQUNoQixtQkFBbUI7TUFDbkIsV0FBVztNQUNYLHVCQUF1QjtNQUN2QixtQkFBbUIsRUFBRTtNQUNyQjtRQUNFLGlCQUFpQixFQUFFO0lBQ3ZCO01BQ0UsZ0JBQWdCO01BQ2hCLHNCQUFzQixFQUFFO01BQ3hCO1FBQ0UsZUFBZTtRQUNmLGlCQUFpQixFQUFFO0VBQ3pCO0lBQ0UsZ0JBQWdCLEVBQUU7RUFDcEI7O0lBRUUsYUFBYTtJQUNiLG9CQUFvQixFQUFFO0VBQ3hCO0lBQ0UsYUFBYTtJQUNiLGFBQWE7SUFDYiw0QkFBNEIsRUFBRTtJQUM5QjtNQUNFLFlBQVk7TUFDWixtQkFBbUI7TUFDbkIsbUJBQW1CLEVBQUU7SUFDdkI7TUFDRSwwQ0FBMEMsRUFBRTtJQUM5QztNQUNFLGVBQWU7TUFDZixnQkFBZ0I7TUFDaEIsaUJBQWlCLEVBQUU7SUFDckI7TUFDRTtRQUNFLGdCQUFnQjtRQUNoQixrQkFBa0IsRUFBRTtRQUNwQjtVQUNFLGVBQWU7VUFDZixtQkFBbUIsRUFBRSxFQUFFO0lBQzdCO01BQ0U7UUFDRSxZQUFZLEVBQUUsRUFBRTtFQUN0QjtJQUNFLGlCQUFpQjtJQUNqQixvQkFBb0I7SUFDcEIsb0JBQW9CO0lBQ3BCLHdCQUF3QjtJQUN4QixnQkFBZ0IsRUFBRTtJQUNsQjs7TUFFRSxpQkFBaUI7TUFDakIsb0JBQW9CLEVBQUU7SUFDeEI7TUFDRSwwQkFBMEIsRUFBRTtJQUM5QjtNQUNFLDZCQUE2QjtNQUM3QixpQkFBaUIsRUFBRTs7QUFFekI7RUFDRSxpQkFBaUIsRUFBRTtFQUNuQjtJQUNFLGFBQWEsRUFBRTtJQUNmO01BQ0Usc0JBQXNCO01BQ3RCLCtCQUErQixFQUFFO0lBQ25DO01BQ0UsbUNBQTJCO2NBQTNCLDJCQUEyQixFQUFFO0VBQ2pDO0lBQ0UsMEJBQTBCO0lBQzFCLGdCQUFnQjtJQUNoQixzQkFBc0IsRUFBRTtFQUMxQjtJQUNFLG1CQUFtQjtJQUNuQixvQkFBb0IsRUFBRTtFQUN4QjtJQUNFLGFBQWE7SUFDYixjQUFjLEVBQUU7RUFDbEI7SUFDRSxnQkFBZ0IsRUFBRSIsImZpbGUiOiJwYWdlcy9yZXNvdXJjZXMvY2FzZS1zdHVkaWVzLmNzcyIsInNvdXJjZXNDb250ZW50IjpbIiNwYWdlLWNhc2Utc3R1ZGllcyAuc3ViLWhlYWRlciAuZG93bmxvYWQge1xuICBwYWRkaW5nLXJpZ2h0OiAwO1xuICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xuICBsZXR0ZXItc3BhY2luZzogLjAyZW07XG4gIGZvbnQtc2l6ZTogMTJweDsgfVxuXG4jcGFnZS1jYXNlLXN0dWRpZXMgbWFpbiBoZ3JvdXAge1xuICBtYXJnaW4tdG9wOiAyNHB4O1xuICBtYXJnaW4tYm90dG9tOiA1M3B4OyB9XG4gIEBtZWRpYSAobWF4LXdpZHRoOiA3NjdweCkge1xuICAgICNwYWdlLWNhc2Utc3R1ZGllcyBtYWluIGhncm91cCB7XG4gICAgICBtYXJnaW4tYm90dG9tOiAwOyB9IH1cbiAgI3BhZ2UtY2FzZS1zdHVkaWVzIG1haW4gaGdyb3VwIHN0cm9uZyB7XG4gICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcbiAgICBmb250LXNpemU6IDExcHg7XG4gICAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgICBjb2xvcjogIzljYWJjNDtcbiAgICBmb250LWZhbWlseTogXCJFaW5hXCIsIFwiSGVsdmV0aWNhIE5ldWVcIiwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmOyB9XG4gICNwYWdlLWNhc2Utc3R1ZGllcyBtYWluIGhncm91cCBoNCB7XG4gICAgbWFyZ2luLXRvcDogNjJweDtcbiAgICBmb250LXNpemU6IDEycHg7XG4gICAgY29sb3I6ICM5MkExQjM7XG4gICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcbiAgICBsZXR0ZXItc3BhY2luZzogLjE0ZW07IH1cbiAgI3BhZ2UtY2FzZS1zdHVkaWVzIG1haW4gaGdyb3VwIGgxIHtcbiAgICBmb250LXNpemU6IDQ2cHg7XG4gICAgbWFyZ2luLXRvcDogNTZweDsgfVxuICAjcGFnZS1jYXNlLXN0dWRpZXMgbWFpbiBoZ3JvdXAgcCB7XG4gICAgZm9udC13ZWlnaHQ6IDQwMDtcbiAgICBjb2xvcjogIzg5ODk4OTtcbiAgICBtYXgtd2lkdGg6IDc1MHB4O1xuICAgIG1hcmdpbjogMTNweCBhdXRvO1xuICAgIGZvbnQtc2l6ZTogMjBweDtcbiAgICBsaW5lLWhlaWdodDogMS44ZW07XG4gICAgbGV0dGVyLXNwYWNpbmc6IC4wMWVtOyB9XG4gICNwYWdlLWNhc2Utc3R1ZGllcyBtYWluIGhncm91cCAuYnlsaW5lIHtcbiAgICBmb250LXN0eWxlOiBub3JtYWw7XG4gICAgZm9udC13ZWlnaHQ6IG5vcm1hbDtcbiAgICBsaW5lLWhlaWdodDogMjlweDtcbiAgICBmb250LXNpemU6IDE2cHg7XG4gICAgbGV0dGVyLXNwYWNpbmc6IC0wLjAyZW07XG4gICAgY29sb3I6ICM5MkExQjM7XG4gICAgbWFyZ2luLWJvdHRvbTogNDJweDsgfVxuICAgICNwYWdlLWNhc2Utc3R1ZGllcyBtYWluIGhncm91cCAuYnlsaW5lIC5hdmF0YXIge1xuICAgICAgd2lkdGg6IDI4cHg7XG4gICAgICBoZWlnaHQ6IDI4cHg7XG4gICAgICBtYXJnaW46IDAgOHB4IDAgMDtcbiAgICAgIGJvcmRlci1yYWRpdXM6IDUwJTtcbiAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsgfVxuICAgICNwYWdlLWNhc2Utc3R1ZGllcyBtYWluIGhncm91cCAuYnlsaW5lIC50YWdzIHtcbiAgICAgIHBhZGRpbmc6IDA7XG4gICAgICBtYXJnaW4tbGVmdDogNHB4O1xuICAgICAgbGlzdC1zdHlsZTogbm9uZTtcbiAgICAgIHZlcnRpY2FsLWFsaWduOiAycHg7XG4gICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7IH1cbiAgICAgICNwYWdlLWNhc2Utc3R1ZGllcyBtYWluIGhncm91cCAuYnlsaW5lIC50YWdzIGxpIHtcbiAgICAgICAgZm9udC1zaXplOiAxMHB4O1xuICAgICAgICBjb2xvcjogI2NlZDZlMDtcbiAgICAgICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XG4gICAgICAgIHBhZGRpbmc6IDNweCA1cHggNHB4O1xuICAgICAgICBsaW5lLWhlaWdodDogMWVtO1xuICAgICAgICBtYXJnaW4tcmlnaHQ6IDJweDtcbiAgICAgICAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgICAgICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4O1xuICAgICAgICBsZXR0ZXItc3BhY2luZzogMC4wOGVtO1xuICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogMXB4O1xuICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICNFOUVERjM7IH1cbiAgI3BhZ2UtY2FzZS1zdHVkaWVzIG1haW4gaGdyb3VwIGltZyB7XG4gICAgbWFyZ2luOiAyNHB4IGF1dG87XG4gICAgbWF4LXdpZHRoOiAxMDAlOyB9XG5cbiNwYWdlLWNhc2Utc3R1ZGllcyBtYWluIHtcbiAgZGlzcGxheTogZmxleDtcbiAgb3ZlcmZsb3c6IHZpc2libGU7XG4gIHBhZGRpbmctYm90dG9tOiAxNjBweDsgfVxuICBAbWVkaWEgKG1heC13aWR0aDogNzY4cHgpIHtcbiAgICAjcGFnZS1jYXNlLXN0dWRpZXMgbWFpbiB7XG4gICAgICBwYWRkaW5nLWJvdHRvbTogODBweDsgfSB9XG4gIEBtZWRpYSAobWF4LXdpZHRoOiA3NjdweCkge1xuICAgICNwYWdlLWNhc2Utc3R1ZGllcyBtYWluIHtcbiAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47IH0gfVxuXG4jcGFnZS1jYXNlLXN0dWRpZXMgLnN0aWNreS13cmFwcGVyIHtcbiAgcG9zaXRpb246IHN0aWNreTtcbiAgdG9wOiAxMjhweDsgfVxuXG4jcGFnZS1jYXNlLXN0dWRpZXMgYXNpZGUge1xuICBmbGV4OiAwIDEgMjA4cHg7XG4gIHBhZGRpbmctcmlnaHQ6IDIwcHg7XG4gIG1hcmdpbi1ib3R0b206IDA7XG4gIG1hcmdpbi10b3A6IDUycHg7IH1cbiAgI3BhZ2UtY2FzZS1zdHVkaWVzIGFzaWRlIGg0IHtcbiAgICBmb250LXNpemU6IDEwcHg7XG4gICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcbiAgICBjb2xvcjogI2E0YjNjYztcbiAgICBmb250LXdlaWdodDogNjAwO1xuICAgIGxldHRlci1zcGFjaW5nOiAuMTZlbTsgfVxuICAjcGFnZS1jYXNlLXN0dWRpZXMgYXNpZGUgdWwge1xuICAgIHBhZGRpbmc6IDA7XG4gICAgZm9udC1zaXplOiAxNHB4O1xuICAgIG1hcmdpbjogOXB4IDAgMzBweDtcbiAgICBsaXN0LXN0eWxlOiBub25lO1xuICAgIGxpbmUtaGVpZ2h0OiAxLjRlbTsgfVxuICAgIEBtZWRpYSAobWF4LXdpZHRoOiAxMjE5cHgpIHtcbiAgICAgICNwYWdlLWNhc2Utc3R1ZGllcyBhc2lkZSB1bCB7XG4gICAgICAgIGZvbnQtc2l6ZTogMTJweDsgfSB9XG4gICNwYWdlLWNhc2Utc3R1ZGllcyBhc2lkZSBsaSB7XG4gICAgbWFyZ2luOiAxMnB4IDAgMTNweDsgfVxuICAjcGFnZS1jYXNlLXN0dWRpZXMgYXNpZGUgYSB7XG4gICAgY29sb3I6ICM1MjY3OGM7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgdHJhbnNpdGlvbjogLjJzIHRyYW5zZm9ybSBlYXNlLCAuMnMgY29sb3I7IH1cbiAgICAjcGFnZS1jYXNlLXN0dWRpZXMgYXNpZGUgYTpob3ZlciwgI3BhZ2UtY2FzZS1zdHVkaWVzIGFzaWRlIGE6YWN0aXZlLCAjcGFnZS1jYXNlLXN0dWRpZXMgYXNpZGUgYTpmb2N1cywgI3BhZ2UtY2FzZS1zdHVkaWVzIGFzaWRlIGEuYWN0aXZlIHtcbiAgICAgIGNvbG9yOiAjNGE4YmZjO1xuICAgICAgdGV4dC1kZWNvcmF0aW9uOiBub25lOyB9XG4gICAgI3BhZ2UtY2FzZS1zdHVkaWVzIGFzaWRlIGEuYWN0aXZlIHtcbiAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCg4cHgpOyB9XG4gICNwYWdlLWNhc2Utc3R1ZGllcyBhc2lkZSAuYnRuIHtcbiAgICBtYXJnaW46IDAgMCAzMnB4OyB9XG4gICNwYWdlLWNhc2Utc3R1ZGllcyBhc2lkZSAubGlnaHRibHVlIHtcbiAgICBiYWNrZ3JvdW5kOiAjZTZmMGY4O1xuICAgIGNvbG9yOiAjNGE4YmZjO1xuICAgIGJvcmRlci1yYWRpdXM6IDRweDtcbiAgICBwYWRkaW5nOiA5cHggMTZweDtcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgZm9udC1zaXplOiAxMXB4O1xuICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XG4gICAgZm9udC13ZWlnaHQ6IDcwMDtcbiAgICBsZXR0ZXItc3BhY2luZzogLjA3ZW07IH1cbiAgICAjcGFnZS1jYXNlLXN0dWRpZXMgYXNpZGUgLmxpZ2h0Ymx1ZSBpb24taWNvbiB7XG4gICAgICBmb250LXNpemU6IDE4cHg7XG4gICAgICB2ZXJ0aWNhbC1hbGlnbjogLTVweDsgfVxuICAjcGFnZS1jYXNlLXN0dWRpZXMgYXNpZGUgLnNoYXJpbmcge1xuICAgIG1hcmdpbjogMDtcbiAgICBib3JkZXItdG9wOiAycHggc29saWQgI2YzZjVmOTtcbiAgICBwYWRkaW5nLXRvcDogMjZweDsgfVxuICAgICNwYWdlLWNhc2Utc3R1ZGllcyBhc2lkZSAuc2hhcmluZyBsaSB7XG4gICAgICBtYXJnaW46IDA7XG4gICAgICBtYXJnaW4tcmlnaHQ6IDZweDtcbiAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsgfVxuICAgICNwYWdlLWNhc2Utc3R1ZGllcyBhc2lkZSAuc2hhcmluZyBhIHtcbiAgICAgIGNvbG9yOiAjQ0JEMkREO1xuICAgICAgZm9udC1zaXplOiAyMHB4OyB9XG4gICAgICAjcGFnZS1jYXNlLXN0dWRpZXMgYXNpZGUgLnNoYXJpbmcgYTpob3ZlciB7XG4gICAgICAgIGNvbG9yOiAjNGE4YmZjOyB9XG4gICAgI3BhZ2UtY2FzZS1zdHVkaWVzIGFzaWRlIC5zaGFyaW5nICN3ZWItc2hhcmUge1xuICAgICAgZGlzcGxheTogbm9uZTsgfVxuICBAbWVkaWEgKG1heC13aWR0aDogNzY4cHgpIHtcbiAgICAjcGFnZS1jYXNlLXN0dWRpZXMgYXNpZGUge1xuICAgICAgZGlzcGxheTogbm9uZTsgfSB9XG5cbiNwYWdlLWNhc2Utc3R1ZGllcyAubWFpbi1jb2wge1xuICBmbGV4OiAxO1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICBhbGlnbi1pdGVtczogY2VudGVyOyB9XG5cbiNwYWdlLWNhc2Utc3R1ZGllcyAubWFpbi1jb2xfX2lubmVyIHtcbiAgd2lkdGg6IDEwMCU7XG4gIG1heC13aWR0aDogNjYzcHg7XG4gIG1hcmdpbi1sZWZ0OiA0MHB4OyB9XG5cbkBtZWRpYSAobWF4LXdpZHRoOiAxMjE5cHgpIHtcbiAgI3BhZ2UtY2FzZS1zdHVkaWVzIC5tYWluLWNvbCB7XG4gICAgYWxpZ24taXRlbXM6IGZsZXgtZW5kOyB9XG4gICNwYWdlLWNhc2Utc3R1ZGllcyAubWFpbi1jb2xfX2lubmVyIHtcbiAgICBtYXJnaW4tbGVmdDogMjBweDsgfSB9XG5cbkBtZWRpYSAobWF4LXdpZHRoOiA3NjhweCkge1xuICAjcGFnZS1jYXNlLXN0dWRpZXMgLm1haW4tY29sIHtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyOyB9XG4gICNwYWdlLWNhc2Utc3R1ZGllcyAubWFpbi1jb2xfX2lubmVyIHtcbiAgICBtYXJnaW4tbGVmdDogMDsgfSB9XG5cbiNwYWdlLWNhc2Utc3R1ZGllcyBhcnRpY2xlIHtcbiAgcGFkZGluZy1ib3R0b206IDU4cHg7XG4gIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjZWRmMGY2O1xuICBtYXJnaW4tYm90dG9tOiAzN3B4OyB9XG4gICNwYWdlLWNhc2Utc3R1ZGllcyBhcnRpY2xlIGgyIHtcbiAgICBmb250LXNpemU6IDMwcHg7XG4gICAgbWFyZ2luLXRvcDogMi42NWVtO1xuICAgIG1hcmdpbi1ib3R0b206IDAuOGVtO1xuICAgIGZvbnQtd2VpZ2h0OiA2MDA7IH1cbiAgICAjcGFnZS1jYXNlLXN0dWRpZXMgYXJ0aWNsZSBoMiBzdHJvbmcge1xuICAgICAgZm9udC13ZWlnaHQ6IDYwMDsgfVxuICAjcGFnZS1jYXNlLXN0dWRpZXMgYXJ0aWNsZSBoMyB7XG4gICAgZm9udC1zaXplOiAyMHB4O1xuICAgIGxpbmUtaGVpZ2h0OiAxLjM7XG4gICAgbWFyZ2luLXRvcDogMi4zZW07XG4gICAgbWFyZ2luLWJvdHRvbTogMS4yZW07XG4gICAgbGV0dGVyLXNwYWNpbmc6IC0uMDE0ZW07XG4gICAgZm9udC13ZWlnaHQ6IDYwMDsgfVxuICAgICNwYWdlLWNhc2Utc3R1ZGllcyBhcnRpY2xlIGgzIHN0cm9uZyB7XG4gICAgICBmb250LXdlaWdodDogNjAwOyB9XG4gICNwYWdlLWNhc2Utc3R1ZGllcyBhcnRpY2xlIGg0LCAjcGFnZS1jYXNlLXN0dWRpZXMgYXJ0aWNsZSBoNSwgI3BhZ2UtY2FzZS1zdHVkaWVzIGFydGljbGUgaDYge1xuICAgIG1hcmdpbjogMWVtIDA7IH1cbiAgI3BhZ2UtY2FzZS1zdHVkaWVzIGFydGljbGUgaDQge1xuICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XG4gICAgbGV0dGVyLXNwYWNpbmc6IDAuMWVtO1xuICAgIGZvbnQtc2l6ZTogMTRweDsgfVxuICAjcGFnZS1jYXNlLXN0dWRpZXMgYXJ0aWNsZSBoNSB7XG4gICAgZm9udC1zaXplOiAxNXB4OyB9XG4gICNwYWdlLWNhc2Utc3R1ZGllcyBhcnRpY2xlIGg2IHtcbiAgICBmb250LXNpemU6IDExcHg7XG4gICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcbiAgICBsZXR0ZXItc3BhY2luZzogMC4xZW07IH1cbiAgI3BhZ2UtY2FzZS1zdHVkaWVzIGFydGljbGUgcCxcbiAgI3BhZ2UtY2FzZS1zdHVkaWVzIGFydGljbGUgdWwsXG4gICNwYWdlLWNhc2Utc3R1ZGllcyBhcnRpY2xlIG9sIHtcbiAgICBmb250LXNpemU6IDE2cHg7XG4gICAgbGV0dGVyLXNwYWNpbmc6IC0uMDExZW07XG4gICAgbGluZS1oZWlnaHQ6IDEuNzVlbTtcbiAgICBtYXJnaW4tYm90dG9tOiAxLjhlbTtcbiAgICBjb2xvcjogIzVCNzA4QjsgfVxuICAjcGFnZS1jYXNlLXN0dWRpZXMgYXJ0aWNsZSB1bCBsaSArIGxpLFxuICAjcGFnZS1jYXNlLXN0dWRpZXMgYXJ0aWNsZSBvbCBsaSArIGxpIHtcbiAgICBtYXJnaW4tdG9wOiA4cHg7IH1cbiAgI3BhZ2UtY2FzZS1zdHVkaWVzIGFydGljbGUgdWwge1xuICAgIHBhZGRpbmctbGVmdDogMDsgfVxuICAgICNwYWdlLWNhc2Utc3R1ZGllcyBhcnRpY2xlIHVsIGxpIHtcbiAgICAgIGxpc3Qtc3R5bGUtdHlwZTogbm9uZTtcbiAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgIHBhZGRpbmctbGVmdDogMThweDsgfVxuICAgICAgI3BhZ2UtY2FzZS1zdHVkaWVzIGFydGljbGUgdWwgbGk6YmVmb3JlIHtcbiAgICAgICAgY29udGVudDogJyc7XG4gICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICAgICAgd2lkdGg6IDZweDtcbiAgICAgICAgaGVpZ2h0OiA2cHg7XG4gICAgICAgIGJhY2tncm91bmQ6ICNCMkJFQ0Q7XG4gICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgdG9wOiAxMnB4O1xuICAgICAgICBsZWZ0OiAwO1xuICAgICAgICBib3JkZXItcmFkaXVzOiA4cHg7IH1cbiAgI3BhZ2UtY2FzZS1zdHVkaWVzIGFydGljbGUgYixcbiAgI3BhZ2UtY2FzZS1zdHVkaWVzIGFydGljbGUgc3Ryb25nIHtcbiAgICBmb250LXdlaWdodDogNTAwOyB9XG4gICNwYWdlLWNhc2Utc3R1ZGllcyBhcnRpY2xlIGJsb2NrcXVvdGUge1xuICAgIGJhY2tncm91bmQ6ICNmMmY1Zjg7XG4gICAgYm9yZGVyLXJhZGl1czogNHB4O1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICBwYWRkaW5nOiA2NHB4IDgwcHggNjhweCAxMTFweDtcbiAgICBjb2xvcjogIzVlNzQ5YTtcbiAgICBmb250LWZhbWlseTogXCJBZG9iZSBDYXNsb25cIiwgR2VvcmdpYSwgVGltZXMsIFwiVGltZXMgTmV3IFJvbWFuXCIsIHNlcmlmO1xuICAgIGZvbnQtc3R5bGU6IGl0YWxpYztcbiAgICBib3JkZXI6IG5vbmU7XG4gICAgbWFyZ2luOiA3N3B4IC0xNnB4IDU0cHg7IH1cbiAgICAjcGFnZS1jYXNlLXN0dWRpZXMgYXJ0aWNsZSBibG9ja3F1b3RlOjpiZWZvcmUge1xuICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgdG9wOiAtNnB4O1xuICAgICAgbGVmdDogNTRweDtcbiAgICAgIGZvbnQtc2l6ZTogMTgwcHg7XG4gICAgICBjb250ZW50OiAnXFwyMDFDJztcbiAgICAgIGNvbG9yOiAjZTNlN2VjOyB9XG4gICAgI3BhZ2UtY2FzZS1zdHVkaWVzIGFydGljbGUgYmxvY2txdW90ZSBwIHtcbiAgICAgIGZvbnQtc2l6ZTogMThweDtcbiAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgIHotaW5kZXg6IDE7XG4gICAgICBsZXR0ZXItc3BhY2luZzogLjAyMmVtO1xuICAgICAgbGluZS1oZWlnaHQ6IDEuOGVtOyB9XG4gICAgICAjcGFnZS1jYXNlLXN0dWRpZXMgYXJ0aWNsZSBibG9ja3F1b3RlIHA6bGFzdC1jaGlsZCB7XG4gICAgICAgIG1hcmdpbi1ib3R0b206IDA7IH1cbiAgICAjcGFnZS1jYXNlLXN0dWRpZXMgYXJ0aWNsZSBibG9ja3F1b3RlIGNpdGUge1xuICAgICAgZm9udC1zaXplOiAxNXB4O1xuICAgICAgbGV0dGVyLXNwYWNpbmc6IC4wMmVtOyB9XG4gICAgICAjcGFnZS1jYXNlLXN0dWRpZXMgYXJ0aWNsZSBibG9ja3F1b3RlIGNpdGUgc3BhbiB7XG4gICAgICAgIGNvbG9yOiAjOWRhOWJkO1xuICAgICAgICBtYXJnaW4tbGVmdDogOHB4OyB9XG4gICNwYWdlLWNhc2Utc3R1ZGllcyBhcnRpY2xlIGltZyB7XG4gICAgbWF4LXdpZHRoOiAxMDAlOyB9XG4gICNwYWdlLWNhc2Utc3R1ZGllcyBhcnRpY2xlIHByZSxcbiAgI3BhZ2UtY2FzZS1zdHVkaWVzIGFydGljbGUgY29kZSB7XG4gICAgYm9yZGVyOiBub25lO1xuICAgIGJhY2tncm91bmQ6ICNmNWY3ZmE7IH1cbiAgI3BhZ2UtY2FzZS1zdHVkaWVzIGFydGljbGUgZmlndXJlIHtcbiAgICB3aWR0aDogMjk1cHg7XG4gICAgZmxvYXQ6IHJpZ2h0O1xuICAgIG1hcmdpbjogOHB4IC0yMHB4IDE2cHggNzRweDsgfVxuICAgICNwYWdlLWNhc2Utc3R1ZGllcyBhcnRpY2xlIGZpZ3VyZS5sZWZ0IHtcbiAgICAgIGZsb2F0OiBsZWZ0O1xuICAgICAgbWFyZ2luLXJpZ2h0OiA3NHB4O1xuICAgICAgbWFyZ2luLWxlZnQ6IC0yMHB4OyB9XG4gICAgI3BhZ2UtY2FzZS1zdHVkaWVzIGFydGljbGUgZmlndXJlIGltZyB7XG4gICAgICBib3gtc2hhZG93OiAwIDRweCA0OHB4IHJnYmEoMCwgMCwgMCwgMC4yKTsgfVxuICAgICNwYWdlLWNhc2Utc3R1ZGllcyBhcnRpY2xlIGZpZ3VyZSBmaWdjYXB0aW9uIHtcbiAgICAgIGNvbG9yOiAjYThiMGJlO1xuICAgICAgZm9udC1zaXplOiAxMXB4O1xuICAgICAgbWFyZ2luLXRvcDogMTNweDsgfVxuICAgIEBtZWRpYSAobWF4LXdpZHRoOiA3NjdweCkge1xuICAgICAgI3BhZ2UtY2FzZS1zdHVkaWVzIGFydGljbGUgZmlndXJlIHtcbiAgICAgICAgbWFyZ2luLXJpZ2h0OiAwO1xuICAgICAgICBtYXJnaW4tbGVmdDogMzJweDsgfVxuICAgICAgICAjcGFnZS1jYXNlLXN0dWRpZXMgYXJ0aWNsZSBmaWd1cmUubGVmdCB7XG4gICAgICAgICAgbWFyZ2luLWxlZnQ6IDA7XG4gICAgICAgICAgbWFyZ2luLXJpZ2h0OiAzMnB4OyB9IH1cbiAgICBAbWVkaWEgKG1heC13aWR0aDogNDgwcHgpIHtcbiAgICAgICNwYWdlLWNhc2Utc3R1ZGllcyBhcnRpY2xlIGZpZ3VyZSB7XG4gICAgICAgIHdpZHRoOiAxMDAlOyB9IH1cbiAgI3BhZ2UtY2FzZS1zdHVkaWVzIGFydGljbGUgLnRhYmxlLXdyYXAge1xuICAgIG92ZXJmbG93LXg6IGF1dG87XG4gICAgbWFyZ2luLXJpZ2h0OiAtMTVweDtcbiAgICBwYWRkaW5nLXJpZ2h0OiAxNXB4O1xuICAgIGJveC1zaXppbmc6IGNvbnRlbnQtYm94O1xuICAgIGZvbnQtc2l6ZTogMTNweDsgfVxuICAgICNwYWdlLWNhc2Utc3R1ZGllcyBhcnRpY2xlIC50YWJsZS13cmFwIHRkLFxuICAgICNwYWdlLWNhc2Utc3R1ZGllcyBhcnRpY2xlIC50YWJsZS13cmFwIHRoIHtcbiAgICAgIG1pbi13aWR0aDogMTIwcHg7XG4gICAgICBwYWRkaW5nLXJpZ2h0OiAxMnB4OyB9XG4gICAgI3BhZ2UtY2FzZS1zdHVkaWVzIGFydGljbGUgLnRhYmxlLXdyYXAgdGFibGUgdGJvZHkgdHIgdGQge1xuICAgICAgYm9yZGVyLXRvcC1jb2xvcjogI0RFRTNFQTsgfVxuICAgICNwYWdlLWNhc2Utc3R1ZGllcyBhcnRpY2xlIC50YWJsZS13cmFwIHRhYmxlID4gdGhlYWQgPiB0ciA+IHRoIHtcbiAgICAgIGJvcmRlci1ib3R0b20tY29sb3I6ICNFOUVERjM7XG4gICAgICBmb250LXdlaWdodDogNjAwOyB9XG5cbiNwYWdlLWNhc2Utc3R1ZGllcyAucmVzb3VyY2UtbGlzdCB7XG4gIG1hcmdpbi1ib3R0b206IDA7IH1cbiAgI3BhZ2UtY2FzZS1zdHVkaWVzIC5yZXNvdXJjZS1saXN0X19oZWFkZXIgLmFsbCB7XG4gICAgZmxvYXQ6IHJpZ2h0OyB9XG4gICAgI3BhZ2UtY2FzZS1zdHVkaWVzIC5yZXNvdXJjZS1saXN0X19oZWFkZXIgLmFsbCBpb24taWNvbiB7XG4gICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgICB0cmFuc2l0aW9uOiAuMnMgdHJhbnNmb3JtIGVhc2U7IH1cbiAgICAjcGFnZS1jYXNlLXN0dWRpZXMgLnJlc291cmNlLWxpc3RfX2hlYWRlciAuYWxsOmhvdmVyIGlvbi1pY29uIHtcbiAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgycHgpOyB9XG4gICNwYWdlLWNhc2Utc3R1ZGllcyAucmVzb3VyY2UtbGlzdF9faGVhZGVyIGg0IHtcbiAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xuICAgIGZvbnQtc2l6ZTogMTRweDtcbiAgICBsZXR0ZXItc3BhY2luZzogLjEyZW07IH1cbiAgI3BhZ2UtY2FzZS1zdHVkaWVzIC5yZXNvdXJjZS1saXN0IC5yZXNvdXJjZS1jYXJkLWxpc3Qge1xuICAgIG1hcmdpbi1sZWZ0OiAtMTBweDtcbiAgICBtYXJnaW4tcmlnaHQ6IC0xMHB4OyB9XG4gICNwYWdlLWNhc2Utc3R1ZGllcyAucmVzb3VyY2UtbGlzdCAucmVzb3VyY2UtY2FyZC1saXN0LS10aGlyZCAucmVzb3VyY2UtY2FyZCB7XG4gICAgcGFkZGluZzogNXB4O1xuICAgIGhlaWdodDogMjE0cHg7IH1cbiAgI3BhZ2UtY2FzZS1zdHVkaWVzIC5yZXNvdXJjZS1saXN0IC5yZXNvdXJjZS1jYXJkLWxpc3QtLXRoaXJkIC5yZXNvdXJjZS1jYXJkIGEgLnRpdGxlIHtcbiAgICBmb250LXNpemU6IDE4cHg7IH1cbiJdfQ== */\n"
  },
  {
    "path": "content/css/pages/resources/webinars.css",
    "content": "#page-webinars h1,\n#page-webinars h2,\n#page-webinars h3,\n#page-webinars h4,\n#page-webinars .btn {\n  font-family: \"Eina\", \"Helvetica Neue\", Helvetica, sans-serif; }\n\n#page-webinars .sub-header.dark .breadcrumbs li::after {\n  color: rgba(255, 255, 255, 0.3); }\n\n#page-webinars .cta {\n  background-color: #12223a;\n  background-image: url(\"/img/resource-center/webinars/bg-header.jpg\"), linear-gradient(120deg, #4864ec, #84aff4);\n  background-size: cover, 100%;\n  background-position: 50% 50%;\n  margin-top: -138px;\n  padding-top: 138px; }\n  #page-webinars .cta.podcasts {\n    background-image: url(\"/img/resource-center/bg-header-podcasts.jpg?3\"), linear-gradient(to bottom, #010c29, #02133c);\n    background-size: cover, 100%;\n    background-position: 50% 50%; }\n  #page-webinars .cta.videos {\n    background-image: url(\"/img/resource-center/bg-header-videos.jpg\"), linear-gradient(to bottom, #010c29, #02133c);\n    background-size: cover, 100%;\n    background-position: 50% 50%; }\n  #page-webinars .cta hgroup {\n    padding-top: 76px;\n    max-width: 100%;\n    padding-bottom: 159px; }\n  #page-webinars .cta strong {\n    text-transform: uppercase;\n    font-size: 13px;\n    letter-spacing: .12em; }\n  #page-webinars .cta h1 {\n    font-size: 72px;\n    font-size: 56px;\n    margin-top: 22px; }\n  #page-webinars .cta p {\n    color: #d9e9fe;\n    margin-top: 19px;\n    font-size: 16px; }\n  #page-webinars .cta .btn {\n    text-transform: uppercase;\n    margin-top: 41px;\n    padding: 15px 25px 16px;\n    font-size: 15px;\n    letter-spacing: .1em; }\n\n#page-webinars .card {\n  background-color: #fff;\n  border-radius: 6px;\n  box-shadow: 0 8px 32px rgba(0, 0, 0, 0.1), 0 2px 8px rgba(0, 0, 0, 0.1);\n  border-radius: 14px;\n  margin-top: -32px;\n  display: -ms-flexbox;\n  display: flex;\n  margin-bottom: 128px; }\n  @media (max-width: 991px) {\n    #page-webinars .card {\n      -ms-flex-direction: column;\n          flex-direction: column; } }\n\n#page-webinars article {\n  -ms-flex-positive: 1;\n      flex-grow: 1;\n  padding: 42px 53px 66px;\n  color: #596a89; }\n  @media (max-width: 400px) {\n    #page-webinars article {\n      padding-right: 24px;\n      padding-left: 24px; } }\n  #page-webinars article h2 {\n    font-weight: 400;\n    font-size: 32px;\n    color: #5e79ff; }\n  #page-webinars article h4 {\n    font-weight: 400;\n    font-size: 22px;\n    letter-spacing: -.018em;\n    line-height: 1.46em;\n    color: #596a89; }\n    #page-webinars article h4 + h3 {\n      margin-top: 42px; }\n  #page-webinars article h3 {\n    font-weight: 600;\n    font-size: 20px;\n    margin-top: 42px;\n    margin-bottom: 15px; }\n  #page-webinars article strong {\n    font-weight: 600; }\n  #page-webinars article p {\n    font-size: 16px;\n    line-height: 1.8em;\n    letter-spacing: -.008em; }\n  #page-webinars article ul {\n    margin-top: 20px;\n    padding-left: 0;\n    padding-bottom: 6px; }\n  #page-webinars article li {\n    line-height: 1.8em;\n    font-size: 16px;\n    list-style: none;\n    margin-left: 4px;\n    letter-spacing: -.004em;\n    position: relative;\n    margin-left: 0;\n    padding-left: 44px;\n    margin-bottom: 20px; }\n    #page-webinars article li::before {\n      background: url(\"/img/resource-center/webinars/ico-check.png\") no-repeat 0 0;\n      background-size: 24px;\n      width: 24px;\n      height: 24px;\n      content: '';\n      position: absolute;\n      left: 0;\n      top: 0; }\n  #page-webinars article .btn {\n    margin-top: 30px;\n    text-transform: uppercase;\n    font-size: 15px;\n    padding: 17px 24px 14px;\n    letter-spacing: .1em; }\n\n#page-webinars aside {\n  -ms-flex: 0 0 340px;\n      flex: 0 0 340px;\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-direction: column;\n      flex-direction: column;\n  padding: 54px 32px 32px;\n  background: #f6f9fc; }\n  #page-webinars aside h4 {\n    text-transform: uppercase;\n    font-size: 14px;\n    letter-spacing: .1em; }\n  #page-webinars aside .host {\n    margin-top: 16px;\n    margin-bottom: 24px; }\n    #page-webinars aside .host img {\n      border-radius: 50%;\n      float: left;\n      display: block; }\n    #page-webinars aside .host strong {\n      display: block;\n      margin-left: 63px;\n      margin-top: 6px;\n      font-size: 16px;\n      font-weight: 600;\n      color: #151d2b;\n      font-family: \"Eina\", \"Helvetica Neue\", Helvetica, sans-serif; }\n    #page-webinars aside .host span {\n      margin-left: 63px;\n      display: block;\n      line-height: 1.2em;\n      color: #6b82ac; }\n  #page-webinars aside .subscribe-cta {\n    margin-top: auto;\n    background-color: #fff;\n    border-radius: 6px;\n    box-shadow: 0 8px 32px rgba(0, 0, 0, 0.1), 0 2px 8px rgba(0, 0, 0, 0.1);\n    padding: 8px 28px 28px; }\n    @media (min-width: 992px) {\n      #page-webinars aside .subscribe-cta {\n        width: 327px; } }\n    #page-webinars aside .subscribe-cta h3 {\n      font-weight: 600;\n      font-size: 18px;\n      margin-bottom: 1px;\n      letter-spacing: -.01em; }\n    #page-webinars aside .subscribe-cta p {\n      margin-bottom: 16px;\n      line-height: 1.8em;\n      letter-spacing: -.008em; }\n    #page-webinars aside .subscribe-cta .btn {\n      width: 100%;\n      font-size: 16px;\n      background: #d6eeff;\n      color: #3880ff;\n      padding: 15px 10px 11px; }\n  #page-webinars aside ionic-newsletter-signup form {\n    max-width: 100%; }\n    #page-webinars aside ionic-newsletter-signup form input {\n      min-width: 0; }\n  @media (max-width: 991px) {\n    #page-webinars aside {\n      -ms-flex: 0 0 100%;\n          flex: 0 0 100%; } }\n\n#page-webinars .resource-list {\n  margin-bottom: 64px; }\n  #page-webinars .resource-list__header h4 {\n    font-size: 24px;\n    margin-bottom: 1px; }\n\n#page-webinars .scrollTopLink {\n  float: right;\n  font-size: 15px;\n  font-weight: 600; }\n\n#page-webinars .modal-body {\n  padding: 32px 48px; }\n  @media (max-width: 767px) {\n    #page-webinars .modal-body {\n      padding: 16px; } }\n  #page-webinars .modal-body form {\n    max-width: 100%; }\n\n#page-webinars #podcast-player {\n  width: 100%;\n  height: 180px;\n  margin: 22px 0 48px; }\n\n#page-webinars #youtube-responsive {\n  overflow: hidden;\n  padding-bottom: 56.25%;\n  position: relative;\n  height: 0;\n  margin: 22px 0 48px; }\n  #page-webinars #youtube-responsive iframe {\n    left: 0;\n    top: 0;\n    height: 100%;\n    width: 100%;\n    position: absolute; }\n\n#page-webinars #wistia_responsive_padding {\n  padding: 56.25% 0 0 0;\n  position: relative;\n  margin: 22px 0 48px; }\n  #page-webinars #wistia_responsive_padding .wistia_responsive_wrapper {\n    height: 100%;\n    left: 0;\n    position: absolute;\n    top: 0;\n    width: 100%; }\n  #page-webinars #wistia_responsive_padding .wistia_embed {\n    height: 100%;\n    position: relative;\n    width: 100%; }\n  #page-webinars #wistia_responsive_padding .wistia_swatch {\n    height: 100%;\n    left: 0;\n    opacity: 0;\n    overflow: hidden;\n    position: absolute;\n    top: 0;\n    transition: opacity 200ms;\n    width: 100%; }\n    #page-webinars #wistia_responsive_padding .wistia_swatch img {\n      -webkit-filter: blur(5px);\n              filter: blur(5px);\n      height: 100%;\n      object-fit: contain;\n      width: 100%; }\n\n/*# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYmluYXJzLmNzcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7RUFLRSw2REFBNkQsRUFBRTs7QUFFakU7RUFDRSxnQ0FBZ0MsRUFBRTs7QUFFcEM7RUFDRSwwQkFBMEI7RUFDMUIsZ0hBQWdIO0VBQ2hILDZCQUE2QjtFQUM3Qiw2QkFBNkI7RUFDN0IsbUJBQW1CO0VBQ25CLG1CQUFtQixFQUFFO0VBQ3JCO0lBQ0UscUhBQXFIO0lBQ3JILDZCQUE2QjtJQUM3Qiw2QkFBNkIsRUFBRTtFQUNqQztJQUNFLGlIQUFpSDtJQUNqSCw2QkFBNkI7SUFDN0IsNkJBQTZCLEVBQUU7RUFDakM7SUFDRSxrQkFBa0I7SUFDbEIsZ0JBQWdCO0lBQ2hCLHNCQUFzQixFQUFFO0VBQzFCO0lBQ0UsMEJBQTBCO0lBQzFCLGdCQUFnQjtJQUNoQixzQkFBc0IsRUFBRTtFQUMxQjtJQUNFLGdCQUFnQjtJQUNoQixnQkFBZ0I7SUFDaEIsaUJBQWlCLEVBQUU7RUFDckI7SUFDRSxlQUFlO0lBQ2YsaUJBQWlCO0lBQ2pCLGdCQUFnQixFQUFFO0VBQ3BCO0lBQ0UsMEJBQTBCO0lBQzFCLGlCQUFpQjtJQUNqQix3QkFBd0I7SUFDeEIsZ0JBQWdCO0lBQ2hCLHFCQUFxQixFQUFFOztBQUUzQjtFQUNFLHVCQUF1QjtFQUN2QixtQkFBbUI7RUFDbkIsd0VBQXdFO0VBQ3hFLG9CQUFvQjtFQUNwQixrQkFBa0I7RUFDbEIscUJBQWM7RUFBZCxjQUFjO0VBQ2QscUJBQXFCLEVBQUU7RUFDdkI7SUFDRTtNQUNFLDJCQUF1QjtVQUF2Qix1QkFBdUIsRUFBRSxFQUFFOztBQUVqQztFQUNFLHFCQUFhO01BQWIsYUFBYTtFQUNiLHdCQUF3QjtFQUN4QixlQUFlLEVBQUU7RUFDakI7SUFDRTtNQUNFLG9CQUFvQjtNQUNwQixtQkFBbUIsRUFBRSxFQUFFO0VBQzNCO0lBQ0UsaUJBQWlCO0lBQ2pCLGdCQUFnQjtJQUNoQixlQUFlLEVBQUU7RUFDbkI7SUFDRSxpQkFBaUI7SUFDakIsZ0JBQWdCO0lBQ2hCLHdCQUF3QjtJQUN4QixvQkFBb0I7SUFDcEIsZUFBZSxFQUFFO0lBQ2pCO01BQ0UsaUJBQWlCLEVBQUU7RUFDdkI7SUFDRSxpQkFBaUI7SUFDakIsZ0JBQWdCO0lBQ2hCLGlCQUFpQjtJQUNqQixvQkFBb0IsRUFBRTtFQUN4QjtJQUNFLGlCQUFpQixFQUFFO0VBQ3JCO0lBQ0UsZ0JBQWdCO0lBQ2hCLG1CQUFtQjtJQUNuQix3QkFBd0IsRUFBRTtFQUM1QjtJQUNFLGlCQUFpQjtJQUNqQixnQkFBZ0I7SUFDaEIsb0JBQW9CLEVBQUU7RUFDeEI7SUFDRSxtQkFBbUI7SUFDbkIsZ0JBQWdCO0lBQ2hCLGlCQUFpQjtJQUNqQixpQkFBaUI7SUFDakIsd0JBQXdCO0lBQ3hCLG1CQUFtQjtJQUNuQixlQUFlO0lBQ2YsbUJBQW1CO0lBQ25CLG9CQUFvQixFQUFFO0lBQ3RCO01BQ0UsNkVBQTZFO01BQzdFLHNCQUFzQjtNQUN0QixZQUFZO01BQ1osYUFBYTtNQUNiLFlBQVk7TUFDWixtQkFBbUI7TUFDbkIsUUFBUTtNQUNSLE9BQU8sRUFBRTtFQUNiO0lBQ0UsaUJBQWlCO0lBQ2pCLDBCQUEwQjtJQUMxQixnQkFBZ0I7SUFDaEIsd0JBQXdCO0lBQ3hCLHFCQUFxQixFQUFFOztBQUUzQjtFQUNFLG9CQUFnQjtNQUFoQixnQkFBZ0I7RUFDaEIscUJBQWM7RUFBZCxjQUFjO0VBQ2QsMkJBQXVCO01BQXZCLHVCQUF1QjtFQUN2Qix3QkFBd0I7RUFDeEIsb0JBQW9CLEVBQUU7RUFDdEI7SUFDRSwwQkFBMEI7SUFDMUIsZ0JBQWdCO0lBQ2hCLHFCQUFxQixFQUFFO0VBQ3pCO0lBQ0UsaUJBQWlCO0lBQ2pCLG9CQUFvQixFQUFFO0lBQ3RCO01BQ0UsbUJBQW1CO01BQ25CLFlBQVk7TUFDWixlQUFlLEVBQUU7SUFDbkI7TUFDRSxlQUFlO01BQ2Ysa0JBQWtCO01BQ2xCLGdCQUFnQjtNQUNoQixnQkFBZ0I7TUFDaEIsaUJBQWlCO01BQ2pCLGVBQWU7TUFDZiw2REFBNkQsRUFBRTtJQUNqRTtNQUNFLGtCQUFrQjtNQUNsQixlQUFlO01BQ2YsbUJBQW1CO01BQ25CLGVBQWUsRUFBRTtFQUNyQjtJQUNFLGlCQUFpQjtJQUNqQix1QkFBdUI7SUFDdkIsbUJBQW1CO0lBQ25CLHdFQUF3RTtJQUN4RSx1QkFBdUIsRUFBRTtJQUN6QjtNQUNFO1FBQ0UsYUFBYSxFQUFFLEVBQUU7SUFDckI7TUFDRSxpQkFBaUI7TUFDakIsZ0JBQWdCO01BQ2hCLG1CQUFtQjtNQUNuQix1QkFBdUIsRUFBRTtJQUMzQjtNQUNFLG9CQUFvQjtNQUNwQixtQkFBbUI7TUFDbkIsd0JBQXdCLEVBQUU7SUFDNUI7TUFDRSxZQUFZO01BQ1osZ0JBQWdCO01BQ2hCLG9CQUFvQjtNQUNwQixlQUFlO01BQ2Ysd0JBQXdCLEVBQUU7RUFDOUI7SUFDRSxnQkFBZ0IsRUFBRTtJQUNsQjtNQUNFLGFBQWEsRUFBRTtFQUNuQjtJQUNFO01BQ0UsbUJBQWU7VUFBZixlQUFlLEVBQUUsRUFBRTs7QUFFekI7RUFDRSxvQkFBb0IsRUFBRTtFQUN0QjtJQUNFLGdCQUFnQjtJQUNoQixtQkFBbUIsRUFBRTs7QUFFekI7RUFDRSxhQUFhO0VBQ2IsZ0JBQWdCO0VBQ2hCLGlCQUFpQixFQUFFOztBQUVyQjtFQUNFLG1CQUFtQixFQUFFO0VBQ3JCO0lBQ0U7TUFDRSxjQUFjLEVBQUUsRUFBRTtFQUN0QjtJQUNFLGdCQUFnQixFQUFFOztBQUV0QjtFQUNFLFlBQVk7RUFDWixjQUFjO0VBQ2Qsb0JBQW9CLEVBQUU7O0FBRXhCO0VBQ0UsaUJBQWlCO0VBQ2pCLHVCQUF1QjtFQUN2QixtQkFBbUI7RUFDbkIsVUFBVTtFQUNWLG9CQUFvQixFQUFFO0VBQ3RCO0lBQ0UsUUFBUTtJQUNSLE9BQU87SUFDUCxhQUFhO0lBQ2IsWUFBWTtJQUNaLG1CQUFtQixFQUFFOztBQUV6QjtFQUNFLHNCQUFzQjtFQUN0QixtQkFBbUI7RUFDbkIsb0JBQW9CLEVBQUU7RUFDdEI7SUFDRSxhQUFhO0lBQ2IsUUFBUTtJQUNSLG1CQUFtQjtJQUNuQixPQUFPO0lBQ1AsWUFBWSxFQUFFO0VBQ2hCO0lBQ0UsYUFBYTtJQUNiLG1CQUFtQjtJQUNuQixZQUFZLEVBQUU7RUFDaEI7SUFDRSxhQUFhO0lBQ2IsUUFBUTtJQUNSLFdBQVc7SUFDWCxpQkFBaUI7SUFDakIsbUJBQW1CO0lBQ25CLE9BQU87SUFDUCwwQkFBMEI7SUFDMUIsWUFBWSxFQUFFO0lBQ2Q7TUFDRSwwQkFBa0I7Y0FBbEIsa0JBQWtCO01BQ2xCLGFBQWE7TUFDYixvQkFBb0I7TUFDcEIsWUFBWSxFQUFFIiwiZmlsZSI6InBhZ2VzL3Jlc291cmNlcy93ZWJpbmFycy5jc3MiLCJzb3VyY2VzQ29udGVudCI6WyIjcGFnZS13ZWJpbmFycyBoMSxcbiNwYWdlLXdlYmluYXJzIGgyLFxuI3BhZ2Utd2ViaW5hcnMgaDMsXG4jcGFnZS13ZWJpbmFycyBoNCxcbiNwYWdlLXdlYmluYXJzIC5idG4ge1xuICBmb250LWZhbWlseTogXCJFaW5hXCIsIFwiSGVsdmV0aWNhIE5ldWVcIiwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmOyB9XG5cbiNwYWdlLXdlYmluYXJzIC5zdWItaGVhZGVyLmRhcmsgLmJyZWFkY3J1bWJzIGxpOjphZnRlciB7XG4gIGNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMyk7IH1cblxuI3BhZ2Utd2ViaW5hcnMgLmN0YSB7XG4gIGJhY2tncm91bmQtY29sb3I6ICMxMjIyM2E7XG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcIi9pbWcvcmVzb3VyY2UtY2VudGVyL3dlYmluYXJzL2JnLWhlYWRlci5qcGdcIiksIGxpbmVhci1ncmFkaWVudCgxMjBkZWcsICM0ODY0ZWMsICM4NGFmZjQpO1xuICBiYWNrZ3JvdW5kLXNpemU6IGNvdmVyLCAxMDAlO1xuICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiA1MCUgNTAlO1xuICBtYXJnaW4tdG9wOiAtMTM4cHg7XG4gIHBhZGRpbmctdG9wOiAxMzhweDsgfVxuICAjcGFnZS13ZWJpbmFycyAuY3RhLnBvZGNhc3RzIHtcbiAgICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXCIvaW1nL3Jlc291cmNlLWNlbnRlci9iZy1oZWFkZXItcG9kY2FzdHMuanBnPzNcIiksIGxpbmVhci1ncmFkaWVudCh0byBib3R0b20sICMwMTBjMjksICMwMjEzM2MpO1xuICAgIGJhY2tncm91bmQtc2l6ZTogY292ZXIsIDEwMCU7XG4gICAgYmFja2dyb3VuZC1wb3NpdGlvbjogNTAlIDUwJTsgfVxuICAjcGFnZS13ZWJpbmFycyAuY3RhLnZpZGVvcyB7XG4gICAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFwiL2ltZy9yZXNvdXJjZS1jZW50ZXIvYmctaGVhZGVyLXZpZGVvcy5qcGdcIiksIGxpbmVhci1ncmFkaWVudCh0byBib3R0b20sICMwMTBjMjksICMwMjEzM2MpO1xuICAgIGJhY2tncm91bmQtc2l6ZTogY292ZXIsIDEwMCU7XG4gICAgYmFja2dyb3VuZC1wb3NpdGlvbjogNTAlIDUwJTsgfVxuICAjcGFnZS13ZWJpbmFycyAuY3RhIGhncm91cCB7XG4gICAgcGFkZGluZy10b3A6IDc2cHg7XG4gICAgbWF4LXdpZHRoOiAxMDAlO1xuICAgIHBhZGRpbmctYm90dG9tOiAxNTlweDsgfVxuICAjcGFnZS13ZWJpbmFycyAuY3RhIHN0cm9uZyB7XG4gICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcbiAgICBmb250LXNpemU6IDEzcHg7XG4gICAgbGV0dGVyLXNwYWNpbmc6IC4xMmVtOyB9XG4gICNwYWdlLXdlYmluYXJzIC5jdGEgaDEge1xuICAgIGZvbnQtc2l6ZTogNzJweDtcbiAgICBmb250LXNpemU6IDU2cHg7XG4gICAgbWFyZ2luLXRvcDogMjJweDsgfVxuICAjcGFnZS13ZWJpbmFycyAuY3RhIHAge1xuICAgIGNvbG9yOiAjZDllOWZlO1xuICAgIG1hcmdpbi10b3A6IDE5cHg7XG4gICAgZm9udC1zaXplOiAxNnB4OyB9XG4gICNwYWdlLXdlYmluYXJzIC5jdGEgLmJ0biB7XG4gICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcbiAgICBtYXJnaW4tdG9wOiA0MXB4O1xuICAgIHBhZGRpbmc6IDE1cHggMjVweCAxNnB4O1xuICAgIGZvbnQtc2l6ZTogMTVweDtcbiAgICBsZXR0ZXItc3BhY2luZzogLjFlbTsgfVxuXG4jcGFnZS13ZWJpbmFycyAuY2FyZCB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmY7XG4gIGJvcmRlci1yYWRpdXM6IDZweDtcbiAgYm94LXNoYWRvdzogMCA4cHggMzJweCByZ2JhKDAsIDAsIDAsIDAuMSksIDAgMnB4IDhweCByZ2JhKDAsIDAsIDAsIDAuMSk7XG4gIGJvcmRlci1yYWRpdXM6IDE0cHg7XG4gIG1hcmdpbi10b3A6IC0zMnB4O1xuICBkaXNwbGF5OiBmbGV4O1xuICBtYXJnaW4tYm90dG9tOiAxMjhweDsgfVxuICBAbWVkaWEgKG1heC13aWR0aDogOTkxcHgpIHtcbiAgICAjcGFnZS13ZWJpbmFycyAuY2FyZCB7XG4gICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOyB9IH1cblxuI3BhZ2Utd2ViaW5hcnMgYXJ0aWNsZSB7XG4gIGZsZXgtZ3JvdzogMTtcbiAgcGFkZGluZzogNDJweCA1M3B4IDY2cHg7XG4gIGNvbG9yOiAjNTk2YTg5OyB9XG4gIEBtZWRpYSAobWF4LXdpZHRoOiA0MDBweCkge1xuICAgICNwYWdlLXdlYmluYXJzIGFydGljbGUge1xuICAgICAgcGFkZGluZy1yaWdodDogMjRweDtcbiAgICAgIHBhZGRpbmctbGVmdDogMjRweDsgfSB9XG4gICNwYWdlLXdlYmluYXJzIGFydGljbGUgaDIge1xuICAgIGZvbnQtd2VpZ2h0OiA0MDA7XG4gICAgZm9udC1zaXplOiAzMnB4O1xuICAgIGNvbG9yOiAjNWU3OWZmOyB9XG4gICNwYWdlLXdlYmluYXJzIGFydGljbGUgaDQge1xuICAgIGZvbnQtd2VpZ2h0OiA0MDA7XG4gICAgZm9udC1zaXplOiAyMnB4O1xuICAgIGxldHRlci1zcGFjaW5nOiAtLjAxOGVtO1xuICAgIGxpbmUtaGVpZ2h0OiAxLjQ2ZW07XG4gICAgY29sb3I6ICM1OTZhODk7IH1cbiAgICAjcGFnZS13ZWJpbmFycyBhcnRpY2xlIGg0ICsgaDMge1xuICAgICAgbWFyZ2luLXRvcDogNDJweDsgfVxuICAjcGFnZS13ZWJpbmFycyBhcnRpY2xlIGgzIHtcbiAgICBmb250LXdlaWdodDogNjAwO1xuICAgIGZvbnQtc2l6ZTogMjBweDtcbiAgICBtYXJnaW4tdG9wOiA0MnB4O1xuICAgIG1hcmdpbi1ib3R0b206IDE1cHg7IH1cbiAgI3BhZ2Utd2ViaW5hcnMgYXJ0aWNsZSBzdHJvbmcge1xuICAgIGZvbnQtd2VpZ2h0OiA2MDA7IH1cbiAgI3BhZ2Utd2ViaW5hcnMgYXJ0aWNsZSBwIHtcbiAgICBmb250LXNpemU6IDE2cHg7XG4gICAgbGluZS1oZWlnaHQ6IDEuOGVtO1xuICAgIGxldHRlci1zcGFjaW5nOiAtLjAwOGVtOyB9XG4gICNwYWdlLXdlYmluYXJzIGFydGljbGUgdWwge1xuICAgIG1hcmdpbi10b3A6IDIwcHg7XG4gICAgcGFkZGluZy1sZWZ0OiAwO1xuICAgIHBhZGRpbmctYm90dG9tOiA2cHg7IH1cbiAgI3BhZ2Utd2ViaW5hcnMgYXJ0aWNsZSBsaSB7XG4gICAgbGluZS1oZWlnaHQ6IDEuOGVtO1xuICAgIGZvbnQtc2l6ZTogMTZweDtcbiAgICBsaXN0LXN0eWxlOiBub25lO1xuICAgIG1hcmdpbi1sZWZ0OiA0cHg7XG4gICAgbGV0dGVyLXNwYWNpbmc6IC0uMDA0ZW07XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIG1hcmdpbi1sZWZ0OiAwO1xuICAgIHBhZGRpbmctbGVmdDogNDRweDtcbiAgICBtYXJnaW4tYm90dG9tOiAyMHB4OyB9XG4gICAgI3BhZ2Utd2ViaW5hcnMgYXJ0aWNsZSBsaTo6YmVmb3JlIHtcbiAgICAgIGJhY2tncm91bmQ6IHVybChcIi9pbWcvcmVzb3VyY2UtY2VudGVyL3dlYmluYXJzL2ljby1jaGVjay5wbmdcIikgbm8tcmVwZWF0IDAgMDtcbiAgICAgIGJhY2tncm91bmQtc2l6ZTogMjRweDtcbiAgICAgIHdpZHRoOiAyNHB4O1xuICAgICAgaGVpZ2h0OiAyNHB4O1xuICAgICAgY29udGVudDogJyc7XG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICBsZWZ0OiAwO1xuICAgICAgdG9wOiAwOyB9XG4gICNwYWdlLXdlYmluYXJzIGFydGljbGUgLmJ0biB7XG4gICAgbWFyZ2luLXRvcDogMzBweDtcbiAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xuICAgIGZvbnQtc2l6ZTogMTVweDtcbiAgICBwYWRkaW5nOiAxN3B4IDI0cHggMTRweDtcbiAgICBsZXR0ZXItc3BhY2luZzogLjFlbTsgfVxuXG4jcGFnZS13ZWJpbmFycyBhc2lkZSB7XG4gIGZsZXg6IDAgMCAzNDBweDtcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgcGFkZGluZzogNTRweCAzMnB4IDMycHg7XG4gIGJhY2tncm91bmQ6ICNmNmY5ZmM7IH1cbiAgI3BhZ2Utd2ViaW5hcnMgYXNpZGUgaDQge1xuICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XG4gICAgZm9udC1zaXplOiAxNHB4O1xuICAgIGxldHRlci1zcGFjaW5nOiAuMWVtOyB9XG4gICNwYWdlLXdlYmluYXJzIGFzaWRlIC5ob3N0IHtcbiAgICBtYXJnaW4tdG9wOiAxNnB4O1xuICAgIG1hcmdpbi1ib3R0b206IDI0cHg7IH1cbiAgICAjcGFnZS13ZWJpbmFycyBhc2lkZSAuaG9zdCBpbWcge1xuICAgICAgYm9yZGVyLXJhZGl1czogNTAlO1xuICAgICAgZmxvYXQ6IGxlZnQ7XG4gICAgICBkaXNwbGF5OiBibG9jazsgfVxuICAgICNwYWdlLXdlYmluYXJzIGFzaWRlIC5ob3N0IHN0cm9uZyB7XG4gICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgIG1hcmdpbi1sZWZ0OiA2M3B4O1xuICAgICAgbWFyZ2luLXRvcDogNnB4O1xuICAgICAgZm9udC1zaXplOiAxNnB4O1xuICAgICAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgICAgIGNvbG9yOiAjMTUxZDJiO1xuICAgICAgZm9udC1mYW1pbHk6IFwiRWluYVwiLCBcIkhlbHZldGljYSBOZXVlXCIsIEhlbHZldGljYSwgc2Fucy1zZXJpZjsgfVxuICAgICNwYWdlLXdlYmluYXJzIGFzaWRlIC5ob3N0IHNwYW4ge1xuICAgICAgbWFyZ2luLWxlZnQ6IDYzcHg7XG4gICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgIGxpbmUtaGVpZ2h0OiAxLjJlbTtcbiAgICAgIGNvbG9yOiAjNmI4MmFjOyB9XG4gICNwYWdlLXdlYmluYXJzIGFzaWRlIC5zdWJzY3JpYmUtY3RhIHtcbiAgICBtYXJnaW4tdG9wOiBhdXRvO1xuICAgIGJhY2tncm91bmQtY29sb3I6ICNmZmY7XG4gICAgYm9yZGVyLXJhZGl1czogNnB4O1xuICAgIGJveC1zaGFkb3c6IDAgOHB4IDMycHggcmdiYSgwLCAwLCAwLCAwLjEpLCAwIDJweCA4cHggcmdiYSgwLCAwLCAwLCAwLjEpO1xuICAgIHBhZGRpbmc6IDhweCAyOHB4IDI4cHg7IH1cbiAgICBAbWVkaWEgKG1pbi13aWR0aDogOTkycHgpIHtcbiAgICAgICNwYWdlLXdlYmluYXJzIGFzaWRlIC5zdWJzY3JpYmUtY3RhIHtcbiAgICAgICAgd2lkdGg6IDMyN3B4OyB9IH1cbiAgICAjcGFnZS13ZWJpbmFycyBhc2lkZSAuc3Vic2NyaWJlLWN0YSBoMyB7XG4gICAgICBmb250LXdlaWdodDogNjAwO1xuICAgICAgZm9udC1zaXplOiAxOHB4O1xuICAgICAgbWFyZ2luLWJvdHRvbTogMXB4O1xuICAgICAgbGV0dGVyLXNwYWNpbmc6IC0uMDFlbTsgfVxuICAgICNwYWdlLXdlYmluYXJzIGFzaWRlIC5zdWJzY3JpYmUtY3RhIHAge1xuICAgICAgbWFyZ2luLWJvdHRvbTogMTZweDtcbiAgICAgIGxpbmUtaGVpZ2h0OiAxLjhlbTtcbiAgICAgIGxldHRlci1zcGFjaW5nOiAtLjAwOGVtOyB9XG4gICAgI3BhZ2Utd2ViaW5hcnMgYXNpZGUgLnN1YnNjcmliZS1jdGEgLmJ0biB7XG4gICAgICB3aWR0aDogMTAwJTtcbiAgICAgIGZvbnQtc2l6ZTogMTZweDtcbiAgICAgIGJhY2tncm91bmQ6ICNkNmVlZmY7XG4gICAgICBjb2xvcjogIzM4ODBmZjtcbiAgICAgIHBhZGRpbmc6IDE1cHggMTBweCAxMXB4OyB9XG4gICNwYWdlLXdlYmluYXJzIGFzaWRlIGlvbmljLW5ld3NsZXR0ZXItc2lnbnVwIGZvcm0ge1xuICAgIG1heC13aWR0aDogMTAwJTsgfVxuICAgICNwYWdlLXdlYmluYXJzIGFzaWRlIGlvbmljLW5ld3NsZXR0ZXItc2lnbnVwIGZvcm0gaW5wdXQge1xuICAgICAgbWluLXdpZHRoOiAwOyB9XG4gIEBtZWRpYSAobWF4LXdpZHRoOiA5OTFweCkge1xuICAgICNwYWdlLXdlYmluYXJzIGFzaWRlIHtcbiAgICAgIGZsZXg6IDAgMCAxMDAlOyB9IH1cblxuI3BhZ2Utd2ViaW5hcnMgLnJlc291cmNlLWxpc3Qge1xuICBtYXJnaW4tYm90dG9tOiA2NHB4OyB9XG4gICNwYWdlLXdlYmluYXJzIC5yZXNvdXJjZS1saXN0X19oZWFkZXIgaDQge1xuICAgIGZvbnQtc2l6ZTogMjRweDtcbiAgICBtYXJnaW4tYm90dG9tOiAxcHg7IH1cblxuI3BhZ2Utd2ViaW5hcnMgLnNjcm9sbFRvcExpbmsge1xuICBmbG9hdDogcmlnaHQ7XG4gIGZvbnQtc2l6ZTogMTVweDtcbiAgZm9udC13ZWlnaHQ6IDYwMDsgfVxuXG4jcGFnZS13ZWJpbmFycyAubW9kYWwtYm9keSB7XG4gIHBhZGRpbmc6IDMycHggNDhweDsgfVxuICBAbWVkaWEgKG1heC13aWR0aDogNzY3cHgpIHtcbiAgICAjcGFnZS13ZWJpbmFycyAubW9kYWwtYm9keSB7XG4gICAgICBwYWRkaW5nOiAxNnB4OyB9IH1cbiAgI3BhZ2Utd2ViaW5hcnMgLm1vZGFsLWJvZHkgZm9ybSB7XG4gICAgbWF4LXdpZHRoOiAxMDAlOyB9XG5cbiNwYWdlLXdlYmluYXJzICNwb2RjYXN0LXBsYXllciB7XG4gIHdpZHRoOiAxMDAlO1xuICBoZWlnaHQ6IDE4MHB4O1xuICBtYXJnaW46IDIycHggMCA0OHB4OyB9XG5cbiNwYWdlLXdlYmluYXJzICN5b3V0dWJlLXJlc3BvbnNpdmUge1xuICBvdmVyZmxvdzogaGlkZGVuO1xuICBwYWRkaW5nLWJvdHRvbTogNTYuMjUlO1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIGhlaWdodDogMDtcbiAgbWFyZ2luOiAyMnB4IDAgNDhweDsgfVxuICAjcGFnZS13ZWJpbmFycyAjeW91dHViZS1yZXNwb25zaXZlIGlmcmFtZSB7XG4gICAgbGVmdDogMDtcbiAgICB0b3A6IDA7XG4gICAgaGVpZ2h0OiAxMDAlO1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsgfVxuXG4jcGFnZS13ZWJpbmFycyAjd2lzdGlhX3Jlc3BvbnNpdmVfcGFkZGluZyB7XG4gIHBhZGRpbmc6IDU2LjI1JSAwIDAgMDtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBtYXJnaW46IDIycHggMCA0OHB4OyB9XG4gICNwYWdlLXdlYmluYXJzICN3aXN0aWFfcmVzcG9uc2l2ZV9wYWRkaW5nIC53aXN0aWFfcmVzcG9uc2l2ZV93cmFwcGVyIHtcbiAgICBoZWlnaHQ6IDEwMCU7XG4gICAgbGVmdDogMDtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgdG9wOiAwO1xuICAgIHdpZHRoOiAxMDAlOyB9XG4gICNwYWdlLXdlYmluYXJzICN3aXN0aWFfcmVzcG9uc2l2ZV9wYWRkaW5nIC53aXN0aWFfZW1iZWQge1xuICAgIGhlaWdodDogMTAwJTtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgd2lkdGg6IDEwMCU7IH1cbiAgI3BhZ2Utd2ViaW5hcnMgI3dpc3RpYV9yZXNwb25zaXZlX3BhZGRpbmcgLndpc3RpYV9zd2F0Y2gge1xuICAgIGhlaWdodDogMTAwJTtcbiAgICBsZWZ0OiAwO1xuICAgIG9wYWNpdHk6IDA7XG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgdG9wOiAwO1xuICAgIHRyYW5zaXRpb246IG9wYWNpdHkgMjAwbXM7XG4gICAgd2lkdGg6IDEwMCU7IH1cbiAgICAjcGFnZS13ZWJpbmFycyAjd2lzdGlhX3Jlc3BvbnNpdmVfcGFkZGluZyAud2lzdGlhX3N3YXRjaCBpbWcge1xuICAgICAgZmlsdGVyOiBibHVyKDVweCk7XG4gICAgICBoZWlnaHQ6IDEwMCU7XG4gICAgICBvYmplY3QtZml0OiBjb250YWluO1xuICAgICAgd2lkdGg6IDEwMCU7IH1cbiJdfQ== */\n"
  },
  {
    "path": "content/css/pages/solutions/cross-platform.css",
    "content": ".cta.banner {\n  background: #F6F8FB;\n  text-align: left; }\n  .cta.banner hgroup {\n    max-width: 480px;\n    margin-top: 86px;\n    margin-bottom: 80px; }\n  .cta.banner .container {\n    position: relative; }\n  .cta.banner h4,\n  .cta.banner h1,\n  .cta.banner p {\n    position: relative;\n    z-index: 1; }\n  .cta.banner h4 {\n    font-family: \"Roboto Mono\", Menlo, Monaco, Consolas, \"Courier New\", monospace;\n    font-weight: bold;\n    font-size: 14px;\n    line-height: 26px;\n    letter-spacing: 0.14em;\n    text-transform: uppercase;\n    color: #92A1B3;\n    margin-bottom: 29px; }\n  .cta.banner h1 {\n    font-size: 64px;\n    line-height: 71px;\n    letter-spacing: -0.03em;\n    color: #020814;\n    margin-bottom: 14px; }\n  .cta.banner p {\n    font-size: 24px;\n    line-height: 36px;\n    letter-spacing: -0.04em;\n    color: #27323F;\n    opacity: 0.9; }\n\n#sticky-bar {\n  box-shadow: 0px 1px 0px #E9EDF3, 0px -1px 0px #E9EDF3;\n  background: white;\n  position: -webkit-sticky;\n  position: sticky;\n  top: 0;\n  z-index: 1; }\n  #sticky-bar ul {\n    display: -ms-flexbox;\n    display: flex;\n    -ms-flex-pack: justify;\n        justify-content: space-between;\n    padding-top: 17px;\n    padding-bottom: 17px;\n    -ms-flex-wrap: wrap;\n        flex-wrap: wrap; }\n    @media (max-width: 991px) {\n      #sticky-bar ul {\n        -ms-flex-pack: distribute;\n            justify-content: space-around; } }\n    #sticky-bar ul::before, #sticky-bar ul::after {\n      display: none; }\n  #sticky-bar li {\n    list-style: none; }\n    #sticky-bar li.active a:not(.btn) {\n      color: #4a8bfc; }\n  #sticky-bar a {\n    padding: 10px 0;\n    font-size: 14px;\n    line-height: 22px;\n    text-align: center;\n    letter-spacing: 0.08em;\n    text-transform: uppercase;\n    display: block; }\n    #sticky-bar a:hover, #sticky-bar a:active, #sticky-bar a:focus {\n      background: transparent;\n      text-decoration: none; }\n    #sticky-bar a.btn {\n      padding: 11px 14px 8px;\n      margin-right: 3px;\n      border-radius: 10px;\n      color: white;\n      font-weight: 600; }\n      #sticky-bar a.btn:hover, #sticky-bar a.btn:active, #sticky-bar a.btn:focus {\n        color: white;\n        background: #317bfc; }\n  #sticky-bar .anchor {\n    color: #92A1B3;\n    font-weight: 500; }\n    #sticky-bar .anchor.active, #sticky-bar .anchor:hover {\n      color: #4D8DFF; }\n\nmain {\n  letter-spacing: -0.028em;\n  color: #2F3A48; }\n  main h2 {\n    font-size: 40px;\n    line-height: 50px;\n    letter-spacing: -0.03em;\n    color: #020814;\n    margin-bottom: 15px; }\n  main h3 {\n    color: #414D5C;\n    font-weight: 600;\n    margin-bottom: 4px; }\n    main h3 + h2 {\n      margin-top: 0; }\n  main p {\n    font-size: 20px;\n    line-height: 31px;\n    margin-bottom: 40px; }\n  main ul {\n    padding-left: 0; }\n  main li {\n    font-size: 16px;\n    line-height: 23px;\n    color: #1A232F;\n    margin-bottom: 32px;\n    position: relative;\n    list-style: none;\n    padding-left: 30px;\n    letter-spacing: -.016em; }\n    main li::before {\n      content: url('data:image/svg+xml,\\a         <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\">\\a           <path d=\"M186.301 339.893L96 249.461l-32 30.507L186.301 402 448 140.506 416 110z\"/>\\a         </svg>');\n      position: absolute;\n      left: 0;\n      top: 1px;\n      height: 15px;\n      width: 15px;\n      fill: #1A232F;\n      display: block; }\n  main section {\n    display: -ms-flexbox;\n    display: flex;\n    position: relative; }\n    main section.container::before, main section.container::after {\n      display: none; }\n    main section.right {\n      -ms-flex-direction: row-reverse;\n          flex-direction: row-reverse; }\n    main section.center {\n      -ms-flex-pack: center;\n          justify-content: center;\n      -ms-flex-direction: column;\n          flex-direction: column;\n      -ms-flex-align: center;\n          align-items: center; }\n      main section.center .content {\n        max-width: 798px;\n        text-align: center; }\n        main section.center .content ul {\n          display: -ms-flexbox;\n          display: flex;\n          -ms-flex-wrap: wrap;\n              flex-wrap: wrap;\n          -ms-flex-pack: justify;\n              justify-content: space-between; }\n          @media (max-width: 991px) {\n            main section.center .content ul {\n              -ms-flex-pack: start;\n                  justify-content: flex-start; } }\n        main section.center .content li {\n          max-width: 376px;\n          width: 100%; }\n  main .content {\n    max-width: 482px;\n    margin: 232px 0 184px; }\n    @media (max-width: 991px) {\n      main .content {\n        max-width: 100%;\n        margin: 60px auto; } }\n  main aside {\n    background: #F6F8FB;\n    padding-top: 114px;\n    padding-bottom: 120px; }\n    main aside p {\n      color: #414D5C; }\n    main aside .content {\n      max-width: 432px;\n      margin: 0 auto;\n      text-align: center;\n      display: block; }\n  main .get-started {\n    max-width: 700px; }\n  main .cards {\n    display: -ms-flexbox;\n    display: flex;\n    text-align: left;\n    -ms-flex-pack: center;\n        justify-content: center;\n    margin-top: 38px; }\n    main .cards .card {\n      background: #7CABFF;\n      border-radius: 8px;\n      padding: 40px 40px 34px;\n      display: -ms-flexbox;\n      display: flex;\n      -ms-flex-direction: column;\n          flex-direction: column;\n      -ms-flex-align: start;\n          align-items: flex-start;\n      margin-right: 24px;\n      -ms-flex: 0 1 460px;\n          flex: 0 1 460px;\n      border-radius: 8px; }\n      main .cards .card:last-child {\n        margin-right: 0; }\n      main .cards .card:nth-child(2) {\n        background: #F88D8D; }\n        main .cards .card:nth-child(2) .btn {\n          background: rgba(244, 84, 84, 0.5); }\n    main .cards h3 {\n      font-size: 24px;\n      line-height: normal;\n      letter-spacing: -0.02em;\n      color: white;\n      margin-top: 0; }\n    main .cards p {\n      font-size: 18px;\n      line-height: 26px;\n      letter-spacing: -0.02em;\n      color: rgba(255, 255, 255, 0.7); }\n    main .cards .btn {\n      margin-top: auto;\n      font-size: 14px;\n      line-height: 22px;\n      letter-spacing: 0.09em;\n      text-transform: uppercase;\n      padding: 10px 14px;\n      font-weight: 600;\n      border-radius: 8px;\n      background: rgba(56, 128, 255, 0.5); }\n      main .cards .btn ion-icon {\n        display: inline-block;\n        height: 14px;\n        width: 14px;\n        vertical-align: -2px; }\n    @media (max-width: 767px) {\n      main .cards {\n        -ms-flex-direction: column;\n            flex-direction: column; }\n        main .cards .card {\n          -ms-flex: auto;\n              flex: auto;\n          margin-right: 0;\n          margin-top: 20px; } }\n\n.resources {\n  margin-top: 96px; }\n\n.resources {\n  padding-bottom: 120px; }\n  @media (max-width: 768px) {\n    .resources {\n      padding-bottom: 60px; } }\n  .resources .cards {\n    list-style-type: none;\n    margin: 0;\n    padding: 0;\n    display: -ms-flexbox;\n    display: flex;\n    margin-left: -24px;\n    margin-right: -24px; }\n  .resources hgroup {\n    display: -ms-flexbox;\n    display: flex;\n    -ms-flex-pack: justify;\n        justify-content: space-between;\n    -ms-flex-align: baseline;\n        align-items: baseline; }\n    .resources hgroup h3 {\n      font-weight: 600;\n      line-height: normal;\n      font-size: 28px;\n      letter-spacing: -0.02em;\n      color: #1A232F;\n      margin-bottom: 0; }\n    .resources hgroup h5 {\n      font-weight: 700;\n      line-height: 1;\n      font-size: 14px;\n      letter-spacing: 0.08em;\n      color: #3880FF;\n      text-transform: uppercase; }\n    .resources hgroup ion-icon {\n      -webkit-transform: translateY(2px);\n              transform: translateY(2px); }\n  .resources .cards li {\n    display: block;\n    -ms-flex: 0 0 33.33%;\n        flex: 0 0 33.33%;\n    padding: 24px; }\n    .resources .cards li a {\n      display: block;\n      width: 100%; }\n    .resources .cards li .img-wrapper {\n      overflow: hidden;\n      border-radius: 6px; }\n    .resources .cards li img {\n      width: 100%; }\n    .resources .cards li h6 {\n      line-height: 23px;\n      font-size: 12px;\n      letter-spacing: 0.12em;\n      text-transform: uppercase;\n      color: #B2BECD;\n      margin-bottom: 0;\n      margin-top: 16px; }\n    .resources .cards li h4 {\n      font-size: 20px;\n      margin-top: 10px;\n      color: #1A232F;\n      font-weight: 600; }\n    .resources .cards li p {\n      color: #5B708B;\n      line-height: 22px;\n      font-size: 14px;\n      letter-spacing: -0.02em; }\n  @media (max-width: 992px) {\n    .resources .cards {\n      margin-left: -12px;\n      margin-right: -12px; }\n    .resources .cards li {\n      padding: 12px; } }\n  @media (max-width: 768px) {\n    .resources .cards {\n      -ms-flex-wrap: wrap;\n          flex-wrap: wrap; }\n    .resources .cards li {\n      -ms-flex: 0 0 50%;\n          flex: 0 0 50%; } }\n  @media (max-width: 480px) {\n    .resources .cards li {\n      -ms-flex: 0 0 100%;\n          flex: 0 0 100%; }\n    .resources h5 {\n      display: none; } }\n\n.cta.banner hgroup::after {\n  background: url(\"/img/solutions/bg-cross-platform-header.svg\");\n  background-size: cover;\n  width: 850px;\n  height: 431px;\n  position: absolute;\n  right: calc(50% - 796px);\n  top: 138px;\n  content: ''; }\n\n#more-than-mobile .content {\n  margin-top: 316px; }\n  #more-than-mobile .content::after {\n    background: url(\"/img/solutions/apple-devices.png\");\n    background-size: cover;\n    width: 982px;\n    height: 696px;\n    position: absolute;\n    right: calc(50% - 898px);\n    top: 174px;\n    content: ''; }\n  @media (max-width: 991px) {\n    #more-than-mobile .content {\n      margin-bottom: 200px; }\n      #more-than-mobile .content::after {\n        right: calc(100% - 906px);\n        width: 491px;\n        height: 348px;\n        top: auto;\n        bottom: 50px; } }\n\n#full-native-power .content {\n  margin-top: 373px; }\n  #full-native-power .content::after {\n    background: url(\"/img/solutions/iphone-parts.jpg\");\n    background-size: cover;\n    width: 594px;\n    height: 772px;\n    position: absolute;\n    left: -4px;\n    top: 207px;\n    content: ''; }\n  @media (max-width: 1219px) {\n    #full-native-power .content::after {\n      width: 396px;\n      height: 515px;\n      top: 328px; } }\n  @media (max-width: 1219px) {\n    #full-native-power .content {\n      margin-top: 400px; }\n      #full-native-power .content::after {\n        width: 297px;\n        height: 386px;\n        top: 0;\n        left: calc(50% - 150px); } }\n\n#future-proof .content {\n  margin-top: 431px; }\n  #future-proof .content::after {\n    background: url(\"/img/solutions/ionic-platforms.svg\");\n    background-size: cover;\n    width: 606px;\n    height: 672px;\n    position: absolute;\n    right: calc(50% - 632px);\n    top: 282px;\n    content: ''; }\n  @media (max-width: 1219px) {\n    #future-proof .content::after {\n      width: 303px;\n      height: 336px;\n      right: calc(50% - 150px);\n      top: 80px; } }\n\n#how-to .content {\n  margin-top: 146px;\n  max-width: 100%; }\n  #how-to .content h2 {\n    text-align: center; }\n\n#get-started {\n  margin-top: -225px;\n  padding-top: 134px; }\n  @media (max-width: 1219px) {\n    #get-started {\n      padding-top: 300px;\n      margin-top: -200px; } }\n\n/*# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImNyb3NzLXBsYXRmb3JtLmNzcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtFQUNFLG9CQUFvQjtFQUNwQixpQkFBaUIsRUFBRTtFQUNuQjtJQUNFLGlCQUFpQjtJQUNqQixpQkFBaUI7SUFDakIsb0JBQW9CLEVBQUU7RUFDeEI7SUFDRSxtQkFBbUIsRUFBRTtFQUN2Qjs7O0lBR0UsbUJBQW1CO0lBQ25CLFdBQVcsRUFBRTtFQUNmO0lBQ0UsOEVBQThFO0lBQzlFLGtCQUFrQjtJQUNsQixnQkFBZ0I7SUFDaEIsa0JBQWtCO0lBQ2xCLHVCQUF1QjtJQUN2QiwwQkFBMEI7SUFDMUIsZUFBZTtJQUNmLG9CQUFvQixFQUFFO0VBQ3hCO0lBQ0UsZ0JBQWdCO0lBQ2hCLGtCQUFrQjtJQUNsQix3QkFBd0I7SUFDeEIsZUFBZTtJQUNmLG9CQUFvQixFQUFFO0VBQ3hCO0lBQ0UsZ0JBQWdCO0lBQ2hCLGtCQUFrQjtJQUNsQix3QkFBd0I7SUFDeEIsZUFBZTtJQUNmLGFBQWEsRUFBRTs7QUFFbkI7RUFDRSxzREFBc0Q7RUFDdEQsa0JBQWtCO0VBQ2xCLHlCQUFpQjtFQUFqQixpQkFBaUI7RUFDakIsT0FBTztFQUNQLFdBQVcsRUFBRTtFQUNiO0lBQ0UscUJBQWM7SUFBZCxjQUFjO0lBQ2QsdUJBQStCO1FBQS9CLCtCQUErQjtJQUMvQixrQkFBa0I7SUFDbEIscUJBQXFCO0lBQ3JCLG9CQUFnQjtRQUFoQixnQkFBZ0IsRUFBRTtJQUNsQjtNQUNFO1FBQ0UsMEJBQThCO1lBQTlCLDhCQUE4QixFQUFFLEVBQUU7SUFDdEM7TUFDRSxjQUFjLEVBQUU7RUFDcEI7SUFDRSxpQkFBaUIsRUFBRTtJQUNuQjtNQUNFLGVBQWUsRUFBRTtFQUNyQjtJQUNFLGdCQUFnQjtJQUNoQixnQkFBZ0I7SUFDaEIsa0JBQWtCO0lBQ2xCLG1CQUFtQjtJQUNuQix1QkFBdUI7SUFDdkIsMEJBQTBCO0lBQzFCLGVBQWUsRUFBRTtJQUNqQjtNQUNFLHdCQUF3QjtNQUN4QixzQkFBc0IsRUFBRTtJQUMxQjtNQUNFLHVCQUF1QjtNQUN2QixrQkFBa0I7TUFDbEIsb0JBQW9CO01BQ3BCLGFBQWE7TUFDYixpQkFBaUIsRUFBRTtNQUNuQjtRQUNFLGFBQWE7UUFDYixvQkFBb0IsRUFBRTtFQUM1QjtJQUNFLGVBQWU7SUFDZixpQkFBaUIsRUFBRTtJQUNuQjtNQUNFLGVBQWUsRUFBRTs7QUFFdkI7RUFDRSx5QkFBeUI7RUFDekIsZUFBZSxFQUFFO0VBQ2pCO0lBQ0UsZ0JBQWdCO0lBQ2hCLGtCQUFrQjtJQUNsQix3QkFBd0I7SUFDeEIsZUFBZTtJQUNmLG9CQUFvQixFQUFFO0VBQ3hCO0lBQ0UsZUFBZTtJQUNmLGlCQUFpQjtJQUNqQixtQkFBbUIsRUFBRTtJQUNyQjtNQUNFLGNBQWMsRUFBRTtFQUNwQjtJQUNFLGdCQUFnQjtJQUNoQixrQkFBa0I7SUFDbEIsb0JBQW9CLEVBQUU7RUFDeEI7SUFDRSxnQkFBZ0IsRUFBRTtFQUNwQjtJQUNFLGdCQUFnQjtJQUNoQixrQkFBa0I7SUFDbEIsZUFBZTtJQUNmLG9CQUFvQjtJQUNwQixtQkFBbUI7SUFDbkIsaUJBQWlCO0lBQ2pCLG1CQUFtQjtJQUNuQix3QkFBd0IsRUFBRTtJQUMxQjtNQUNFLDhOQUE4TjtNQUM5TixtQkFBbUI7TUFDbkIsUUFBUTtNQUNSLFNBQVM7TUFDVCxhQUFhO01BQ2IsWUFBWTtNQUNaLGNBQWM7TUFDZCxlQUFlLEVBQUU7RUFDckI7SUFDRSxxQkFBYztJQUFkLGNBQWM7SUFDZCxtQkFBbUIsRUFBRTtJQUNyQjtNQUNFLGNBQWMsRUFBRTtJQUNsQjtNQUNFLGdDQUE0QjtVQUE1Qiw0QkFBNEIsRUFBRTtJQUNoQztNQUNFLHNCQUF3QjtVQUF4Qix3QkFBd0I7TUFDeEIsMkJBQXVCO1VBQXZCLHVCQUF1QjtNQUN2Qix1QkFBb0I7VUFBcEIsb0JBQW9CLEVBQUU7TUFDdEI7UUFDRSxpQkFBaUI7UUFDakIsbUJBQW1CLEVBQUU7UUFDckI7VUFDRSxxQkFBYztVQUFkLGNBQWM7VUFDZCxvQkFBZ0I7Y0FBaEIsZ0JBQWdCO1VBQ2hCLHVCQUErQjtjQUEvQiwrQkFBK0IsRUFBRTtVQUNqQztZQUNFO2NBQ0UscUJBQTRCO2tCQUE1Qiw0QkFBNEIsRUFBRSxFQUFFO1FBQ3RDO1VBQ0UsaUJBQWlCO1VBQ2pCLFlBQVksRUFBRTtFQUN0QjtJQUNFLGlCQUFpQjtJQUNqQixzQkFBc0IsRUFBRTtJQUN4QjtNQUNFO1FBQ0UsZ0JBQWdCO1FBQ2hCLGtCQUFrQixFQUFFLEVBQUU7RUFDNUI7SUFDRSxvQkFBb0I7SUFDcEIsbUJBQW1CO0lBQ25CLHNCQUFzQixFQUFFO0lBQ3hCO01BQ0UsZUFBZSxFQUFFO0lBQ25CO01BQ0UsaUJBQWlCO01BQ2pCLGVBQWU7TUFDZixtQkFBbUI7TUFDbkIsZUFBZSxFQUFFO0VBQ3JCO0lBQ0UsaUJBQWlCLEVBQUU7RUFDckI7SUFDRSxxQkFBYztJQUFkLGNBQWM7SUFDZCxpQkFBaUI7SUFDakIsc0JBQXdCO1FBQXhCLHdCQUF3QjtJQUN4QixpQkFBaUIsRUFBRTtJQUNuQjtNQUNFLG9CQUFvQjtNQUNwQixtQkFBbUI7TUFDbkIsd0JBQXdCO01BQ3hCLHFCQUFjO01BQWQsY0FBYztNQUNkLDJCQUF1QjtVQUF2Qix1QkFBdUI7TUFDdkIsc0JBQXdCO1VBQXhCLHdCQUF3QjtNQUN4QixtQkFBbUI7TUFDbkIsb0JBQWdCO1VBQWhCLGdCQUFnQjtNQUNoQixtQkFBbUIsRUFBRTtNQUNyQjtRQUNFLGdCQUFnQixFQUFFO01BQ3BCO1FBQ0Usb0JBQW9CLEVBQUU7UUFDdEI7VUFDRSxtQ0FBbUMsRUFBRTtJQUMzQztNQUNFLGdCQUFnQjtNQUNoQixvQkFBb0I7TUFDcEIsd0JBQXdCO01BQ3hCLGFBQWE7TUFDYixjQUFjLEVBQUU7SUFDbEI7TUFDRSxnQkFBZ0I7TUFDaEIsa0JBQWtCO01BQ2xCLHdCQUF3QjtNQUN4QixnQ0FBZ0MsRUFBRTtJQUNwQztNQUNFLGlCQUFpQjtNQUNqQixnQkFBZ0I7TUFDaEIsa0JBQWtCO01BQ2xCLHVCQUF1QjtNQUN2QiwwQkFBMEI7TUFDMUIsbUJBQW1CO01BQ25CLGlCQUFpQjtNQUNqQixtQkFBbUI7TUFDbkIsb0NBQW9DLEVBQUU7TUFDdEM7UUFDRSxzQkFBc0I7UUFDdEIsYUFBYTtRQUNiLFlBQVk7UUFDWixxQkFBcUIsRUFBRTtJQUMzQjtNQUNFO1FBQ0UsMkJBQXVCO1lBQXZCLHVCQUF1QixFQUFFO1FBQ3pCO1VBQ0UsZUFBVztjQUFYLFdBQVc7VUFDWCxnQkFBZ0I7VUFDaEIsaUJBQWlCLEVBQUUsRUFBRTs7QUFFL0I7RUFDRSxpQkFBaUIsRUFBRTs7QUFFckI7RUFDRSxzQkFBc0IsRUFBRTtFQUN4QjtJQUNFO01BQ0UscUJBQXFCLEVBQUUsRUFBRTtFQUM3QjtJQUNFLHNCQUFzQjtJQUN0QixVQUFVO0lBQ1YsV0FBVztJQUNYLHFCQUFjO0lBQWQsY0FBYztJQUNkLG1CQUFtQjtJQUNuQixvQkFBb0IsRUFBRTtFQUN4QjtJQUNFLHFCQUFjO0lBQWQsY0FBYztJQUNkLHVCQUErQjtRQUEvQiwrQkFBK0I7SUFDL0IseUJBQXNCO1FBQXRCLHNCQUFzQixFQUFFO0lBQ3hCO01BQ0UsaUJBQWlCO01BQ2pCLG9CQUFvQjtNQUNwQixnQkFBZ0I7TUFDaEIsd0JBQXdCO01BQ3hCLGVBQWU7TUFDZixpQkFBaUIsRUFBRTtJQUNyQjtNQUNFLGlCQUFpQjtNQUNqQixlQUFlO01BQ2YsZ0JBQWdCO01BQ2hCLHVCQUF1QjtNQUN2QixlQUFlO01BQ2YsMEJBQTBCLEVBQUU7SUFDOUI7TUFDRSxtQ0FBMkI7Y0FBM0IsMkJBQTJCLEVBQUU7RUFDakM7SUFDRSxlQUFlO0lBQ2YscUJBQWlCO1FBQWpCLGlCQUFpQjtJQUNqQixjQUFjLEVBQUU7SUFDaEI7TUFDRSxlQUFlO01BQ2YsWUFBWSxFQUFFO0lBQ2hCO01BQ0UsaUJBQWlCO01BQ2pCLG1CQUFtQixFQUFFO0lBQ3ZCO01BQ0UsWUFBWSxFQUFFO0lBQ2hCO01BQ0Usa0JBQWtCO01BQ2xCLGdCQUFnQjtNQUNoQix1QkFBdUI7TUFDdkIsMEJBQTBCO01BQzFCLGVBQWU7TUFDZixpQkFBaUI7TUFDakIsaUJBQWlCLEVBQUU7SUFDckI7TUFDRSxnQkFBZ0I7TUFDaEIsaUJBQWlCO01BQ2pCLGVBQWU7TUFDZixpQkFBaUIsRUFBRTtJQUNyQjtNQUNFLGVBQWU7TUFDZixrQkFBa0I7TUFDbEIsZ0JBQWdCO01BQ2hCLHdCQUF3QixFQUFFO0VBQzlCO0lBQ0U7TUFDRSxtQkFBbUI7TUFDbkIsb0JBQW9CLEVBQUU7SUFDeEI7TUFDRSxjQUFjLEVBQUUsRUFBRTtFQUN0QjtJQUNFO01BQ0Usb0JBQWdCO1VBQWhCLGdCQUFnQixFQUFFO0lBQ3BCO01BQ0Usa0JBQWM7VUFBZCxjQUFjLEVBQUUsRUFBRTtFQUN0QjtJQUNFO01BQ0UsbUJBQWU7VUFBZixlQUFlLEVBQUU7SUFDbkI7TUFDRSxjQUFjLEVBQUUsRUFBRTs7QUFFeEI7RUFDRSwrREFBK0Q7RUFDL0QsdUJBQXVCO0VBQ3ZCLGFBQWE7RUFDYixjQUFjO0VBQ2QsbUJBQW1CO0VBQ25CLHlCQUF5QjtFQUN6QixXQUFXO0VBQ1gsWUFBWSxFQUFFOztBQUVoQjtFQUNFLGtCQUFrQixFQUFFO0VBQ3BCO0lBQ0Usb0RBQW9EO0lBQ3BELHVCQUF1QjtJQUN2QixhQUFhO0lBQ2IsY0FBYztJQUNkLG1CQUFtQjtJQUNuQix5QkFBeUI7SUFDekIsV0FBVztJQUNYLFlBQVksRUFBRTtFQUNoQjtJQUNFO01BQ0UscUJBQXFCLEVBQUU7TUFDdkI7UUFDRSwwQkFBMEI7UUFDMUIsYUFBYTtRQUNiLGNBQWM7UUFDZCxVQUFVO1FBQ1YsYUFBYSxFQUFFLEVBQUU7O0FBRXpCO0VBQ0Usa0JBQWtCLEVBQUU7RUFDcEI7SUFDRSxtREFBbUQ7SUFDbkQsdUJBQXVCO0lBQ3ZCLGFBQWE7SUFDYixjQUFjO0lBQ2QsbUJBQW1CO0lBQ25CLFdBQVc7SUFDWCxXQUFXO0lBQ1gsWUFBWSxFQUFFO0VBQ2hCO0lBQ0U7TUFDRSxhQUFhO01BQ2IsY0FBYztNQUNkLFdBQVcsRUFBRSxFQUFFO0VBQ25CO0lBQ0U7TUFDRSxrQkFBa0IsRUFBRTtNQUNwQjtRQUNFLGFBQWE7UUFDYixjQUFjO1FBQ2QsT0FBTztRQUNQLHdCQUF3QixFQUFFLEVBQUU7O0FBRXBDO0VBQ0Usa0JBQWtCLEVBQUU7RUFDcEI7SUFDRSxzREFBc0Q7SUFDdEQsdUJBQXVCO0lBQ3ZCLGFBQWE7SUFDYixjQUFjO0lBQ2QsbUJBQW1CO0lBQ25CLHlCQUF5QjtJQUN6QixXQUFXO0lBQ1gsWUFBWSxFQUFFO0VBQ2hCO0lBQ0U7TUFDRSxhQUFhO01BQ2IsY0FBYztNQUNkLHlCQUF5QjtNQUN6QixVQUFVLEVBQUUsRUFBRTs7QUFFcEI7RUFDRSxrQkFBa0I7RUFDbEIsZ0JBQWdCLEVBQUU7RUFDbEI7SUFDRSxtQkFBbUIsRUFBRTs7QUFFekI7RUFDRSxtQkFBbUI7RUFDbkIsbUJBQW1CLEVBQUU7RUFDckI7SUFDRTtNQUNFLG1CQUFtQjtNQUNuQixtQkFBbUIsRUFBRSxFQUFFIiwiZmlsZSI6InBhZ2VzL3NvbHV0aW9ucy9jcm9zcy1wbGF0Zm9ybS5jc3MiLCJzb3VyY2VzQ29udGVudCI6WyIuY3RhLmJhbm5lciB7XG4gIGJhY2tncm91bmQ6ICNGNkY4RkI7XG4gIHRleHQtYWxpZ246IGxlZnQ7IH1cbiAgLmN0YS5iYW5uZXIgaGdyb3VwIHtcbiAgICBtYXgtd2lkdGg6IDQ4MHB4O1xuICAgIG1hcmdpbi10b3A6IDg2cHg7XG4gICAgbWFyZ2luLWJvdHRvbTogODBweDsgfVxuICAuY3RhLmJhbm5lciAuY29udGFpbmVyIHtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7IH1cbiAgLmN0YS5iYW5uZXIgaDQsXG4gIC5jdGEuYmFubmVyIGgxLFxuICAuY3RhLmJhbm5lciBwIHtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgei1pbmRleDogMTsgfVxuICAuY3RhLmJhbm5lciBoNCB7XG4gICAgZm9udC1mYW1pbHk6IFwiUm9ib3RvIE1vbm9cIiwgTWVubG8sIE1vbmFjbywgQ29uc29sYXMsIFwiQ291cmllciBOZXdcIiwgbW9ub3NwYWNlO1xuICAgIGZvbnQtd2VpZ2h0OiBib2xkO1xuICAgIGZvbnQtc2l6ZTogMTRweDtcbiAgICBsaW5lLWhlaWdodDogMjZweDtcbiAgICBsZXR0ZXItc3BhY2luZzogMC4xNGVtO1xuICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XG4gICAgY29sb3I6ICM5MkExQjM7XG4gICAgbWFyZ2luLWJvdHRvbTogMjlweDsgfVxuICAuY3RhLmJhbm5lciBoMSB7XG4gICAgZm9udC1zaXplOiA2NHB4O1xuICAgIGxpbmUtaGVpZ2h0OiA3MXB4O1xuICAgIGxldHRlci1zcGFjaW5nOiAtMC4wM2VtO1xuICAgIGNvbG9yOiAjMDIwODE0O1xuICAgIG1hcmdpbi1ib3R0b206IDE0cHg7IH1cbiAgLmN0YS5iYW5uZXIgcCB7XG4gICAgZm9udC1zaXplOiAyNHB4O1xuICAgIGxpbmUtaGVpZ2h0OiAzNnB4O1xuICAgIGxldHRlci1zcGFjaW5nOiAtMC4wNGVtO1xuICAgIGNvbG9yOiAjMjczMjNGO1xuICAgIG9wYWNpdHk6IDAuOTsgfVxuXG4jc3RpY2t5LWJhciB7XG4gIGJveC1zaGFkb3c6IDBweCAxcHggMHB4ICNFOUVERjMsIDBweCAtMXB4IDBweCAjRTlFREYzO1xuICBiYWNrZ3JvdW5kOiB3aGl0ZTtcbiAgcG9zaXRpb246IHN0aWNreTtcbiAgdG9wOiAwO1xuICB6LWluZGV4OiAxOyB9XG4gICNzdGlja3ktYmFyIHVsIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcbiAgICBwYWRkaW5nLXRvcDogMTdweDtcbiAgICBwYWRkaW5nLWJvdHRvbTogMTdweDtcbiAgICBmbGV4LXdyYXA6IHdyYXA7IH1cbiAgICBAbWVkaWEgKG1heC13aWR0aDogOTkxcHgpIHtcbiAgICAgICNzdGlja3ktYmFyIHVsIHtcbiAgICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1hcm91bmQ7IH0gfVxuICAgICNzdGlja3ktYmFyIHVsOjpiZWZvcmUsICNzdGlja3ktYmFyIHVsOjphZnRlciB7XG4gICAgICBkaXNwbGF5OiBub25lOyB9XG4gICNzdGlja3ktYmFyIGxpIHtcbiAgICBsaXN0LXN0eWxlOiBub25lOyB9XG4gICAgI3N0aWNreS1iYXIgbGkuYWN0aXZlIGE6bm90KC5idG4pIHtcbiAgICAgIGNvbG9yOiAjNGE4YmZjOyB9XG4gICNzdGlja3ktYmFyIGEge1xuICAgIHBhZGRpbmc6IDEwcHggMDtcbiAgICBmb250LXNpemU6IDE0cHg7XG4gICAgbGluZS1oZWlnaHQ6IDIycHg7XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgIGxldHRlci1zcGFjaW5nOiAwLjA4ZW07XG4gICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcbiAgICBkaXNwbGF5OiBibG9jazsgfVxuICAgICNzdGlja3ktYmFyIGE6aG92ZXIsICNzdGlja3ktYmFyIGE6YWN0aXZlLCAjc3RpY2t5LWJhciBhOmZvY3VzIHtcbiAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xuICAgICAgdGV4dC1kZWNvcmF0aW9uOiBub25lOyB9XG4gICAgI3N0aWNreS1iYXIgYS5idG4ge1xuICAgICAgcGFkZGluZzogMTFweCAxNHB4IDhweDtcbiAgICAgIG1hcmdpbi1yaWdodDogM3B4O1xuICAgICAgYm9yZGVyLXJhZGl1czogMTBweDtcbiAgICAgIGNvbG9yOiB3aGl0ZTtcbiAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7IH1cbiAgICAgICNzdGlja3ktYmFyIGEuYnRuOmhvdmVyLCAjc3RpY2t5LWJhciBhLmJ0bjphY3RpdmUsICNzdGlja3ktYmFyIGEuYnRuOmZvY3VzIHtcbiAgICAgICAgY29sb3I6IHdoaXRlO1xuICAgICAgICBiYWNrZ3JvdW5kOiAjMzE3YmZjOyB9XG4gICNzdGlja3ktYmFyIC5hbmNob3Ige1xuICAgIGNvbG9yOiAjOTJBMUIzO1xuICAgIGZvbnQtd2VpZ2h0OiA1MDA7IH1cbiAgICAjc3RpY2t5LWJhciAuYW5jaG9yLmFjdGl2ZSwgI3N0aWNreS1iYXIgLmFuY2hvcjpob3ZlciB7XG4gICAgICBjb2xvcjogIzREOERGRjsgfVxuXG5tYWluIHtcbiAgbGV0dGVyLXNwYWNpbmc6IC0wLjAyOGVtO1xuICBjb2xvcjogIzJGM0E0ODsgfVxuICBtYWluIGgyIHtcbiAgICBmb250LXNpemU6IDQwcHg7XG4gICAgbGluZS1oZWlnaHQ6IDUwcHg7XG4gICAgbGV0dGVyLXNwYWNpbmc6IC0wLjAzZW07XG4gICAgY29sb3I6ICMwMjA4MTQ7XG4gICAgbWFyZ2luLWJvdHRvbTogMTVweDsgfVxuICBtYWluIGgzIHtcbiAgICBjb2xvcjogIzQxNEQ1QztcbiAgICBmb250LXdlaWdodDogNjAwO1xuICAgIG1hcmdpbi1ib3R0b206IDRweDsgfVxuICAgIG1haW4gaDMgKyBoMiB7XG4gICAgICBtYXJnaW4tdG9wOiAwOyB9XG4gIG1haW4gcCB7XG4gICAgZm9udC1zaXplOiAyMHB4O1xuICAgIGxpbmUtaGVpZ2h0OiAzMXB4O1xuICAgIG1hcmdpbi1ib3R0b206IDQwcHg7IH1cbiAgbWFpbiB1bCB7XG4gICAgcGFkZGluZy1sZWZ0OiAwOyB9XG4gIG1haW4gbGkge1xuICAgIGZvbnQtc2l6ZTogMTZweDtcbiAgICBsaW5lLWhlaWdodDogMjNweDtcbiAgICBjb2xvcjogIzFBMjMyRjtcbiAgICBtYXJnaW4tYm90dG9tOiAzMnB4O1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICBsaXN0LXN0eWxlOiBub25lO1xuICAgIHBhZGRpbmctbGVmdDogMzBweDtcbiAgICBsZXR0ZXItc3BhY2luZzogLS4wMTZlbTsgfVxuICAgIG1haW4gbGk6OmJlZm9yZSB7XG4gICAgICBjb250ZW50OiB1cmwoJ2RhdGE6aW1hZ2Uvc3ZnK3htbCxcXGEgICAgICAgICA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB2aWV3Qm94PVwiMCAwIDUxMiA1MTJcIj5cXGEgICAgICAgICAgIDxwYXRoIGQ9XCJNMTg2LjMwMSAzMzkuODkzTDk2IDI0OS40NjFsLTMyIDMwLjUwN0wxODYuMzAxIDQwMiA0NDggMTQwLjUwNiA0MTYgMTEwelwiLz5cXGEgICAgICAgICA8L3N2Zz4nKTtcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgIGxlZnQ6IDA7XG4gICAgICB0b3A6IDFweDtcbiAgICAgIGhlaWdodDogMTVweDtcbiAgICAgIHdpZHRoOiAxNXB4O1xuICAgICAgZmlsbDogIzFBMjMyRjtcbiAgICAgIGRpc3BsYXk6IGJsb2NrOyB9XG4gIG1haW4gc2VjdGlvbiB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7IH1cbiAgICBtYWluIHNlY3Rpb24uY29udGFpbmVyOjpiZWZvcmUsIG1haW4gc2VjdGlvbi5jb250YWluZXI6OmFmdGVyIHtcbiAgICAgIGRpc3BsYXk6IG5vbmU7IH1cbiAgICBtYWluIHNlY3Rpb24ucmlnaHQge1xuICAgICAgZmxleC1kaXJlY3Rpb246IHJvdy1yZXZlcnNlOyB9XG4gICAgbWFpbiBzZWN0aW9uLmNlbnRlciB7XG4gICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICBhbGlnbi1pdGVtczogY2VudGVyOyB9XG4gICAgICBtYWluIHNlY3Rpb24uY2VudGVyIC5jb250ZW50IHtcbiAgICAgICAgbWF4LXdpZHRoOiA3OThweDtcbiAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyOyB9XG4gICAgICAgIG1haW4gc2VjdGlvbi5jZW50ZXIgLmNvbnRlbnQgdWwge1xuICAgICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgICAgZmxleC13cmFwOiB3cmFwO1xuICAgICAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjsgfVxuICAgICAgICAgIEBtZWRpYSAobWF4LXdpZHRoOiA5OTFweCkge1xuICAgICAgICAgICAgbWFpbiBzZWN0aW9uLmNlbnRlciAuY29udGVudCB1bCB7XG4gICAgICAgICAgICAgIGp1c3RpZnktY29udGVudDogZmxleC1zdGFydDsgfSB9XG4gICAgICAgIG1haW4gc2VjdGlvbi5jZW50ZXIgLmNvbnRlbnQgbGkge1xuICAgICAgICAgIG1heC13aWR0aDogMzc2cHg7XG4gICAgICAgICAgd2lkdGg6IDEwMCU7IH1cbiAgbWFpbiAuY29udGVudCB7XG4gICAgbWF4LXdpZHRoOiA0ODJweDtcbiAgICBtYXJnaW46IDIzMnB4IDAgMTg0cHg7IH1cbiAgICBAbWVkaWEgKG1heC13aWR0aDogOTkxcHgpIHtcbiAgICAgIG1haW4gLmNvbnRlbnQge1xuICAgICAgICBtYXgtd2lkdGg6IDEwMCU7XG4gICAgICAgIG1hcmdpbjogNjBweCBhdXRvOyB9IH1cbiAgbWFpbiBhc2lkZSB7XG4gICAgYmFja2dyb3VuZDogI0Y2RjhGQjtcbiAgICBwYWRkaW5nLXRvcDogMTE0cHg7XG4gICAgcGFkZGluZy1ib3R0b206IDEyMHB4OyB9XG4gICAgbWFpbiBhc2lkZSBwIHtcbiAgICAgIGNvbG9yOiAjNDE0RDVDOyB9XG4gICAgbWFpbiBhc2lkZSAuY29udGVudCB7XG4gICAgICBtYXgtd2lkdGg6IDQzMnB4O1xuICAgICAgbWFyZ2luOiAwIGF1dG87XG4gICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgICBkaXNwbGF5OiBibG9jazsgfVxuICBtYWluIC5nZXQtc3RhcnRlZCB7XG4gICAgbWF4LXdpZHRoOiA3MDBweDsgfVxuICBtYWluIC5jYXJkcyB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICB0ZXh0LWFsaWduOiBsZWZ0O1xuICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICAgIG1hcmdpbi10b3A6IDM4cHg7IH1cbiAgICBtYWluIC5jYXJkcyAuY2FyZCB7XG4gICAgICBiYWNrZ3JvdW5kOiAjN0NBQkZGO1xuICAgICAgYm9yZGVyLXJhZGl1czogOHB4O1xuICAgICAgcGFkZGluZzogNDBweCA0MHB4IDM0cHg7XG4gICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICAgIGFsaWduLWl0ZW1zOiBmbGV4LXN0YXJ0O1xuICAgICAgbWFyZ2luLXJpZ2h0OiAyNHB4O1xuICAgICAgZmxleDogMCAxIDQ2MHB4O1xuICAgICAgYm9yZGVyLXJhZGl1czogOHB4OyB9XG4gICAgICBtYWluIC5jYXJkcyAuY2FyZDpsYXN0LWNoaWxkIHtcbiAgICAgICAgbWFyZ2luLXJpZ2h0OiAwOyB9XG4gICAgICBtYWluIC5jYXJkcyAuY2FyZDpudGgtY2hpbGQoMikge1xuICAgICAgICBiYWNrZ3JvdW5kOiAjRjg4RDhEOyB9XG4gICAgICAgIG1haW4gLmNhcmRzIC5jYXJkOm50aC1jaGlsZCgyKSAuYnRuIHtcbiAgICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDI0NCwgODQsIDg0LCAwLjUpOyB9XG4gICAgbWFpbiAuY2FyZHMgaDMge1xuICAgICAgZm9udC1zaXplOiAyNHB4O1xuICAgICAgbGluZS1oZWlnaHQ6IG5vcm1hbDtcbiAgICAgIGxldHRlci1zcGFjaW5nOiAtMC4wMmVtO1xuICAgICAgY29sb3I6IHdoaXRlO1xuICAgICAgbWFyZ2luLXRvcDogMDsgfVxuICAgIG1haW4gLmNhcmRzIHAge1xuICAgICAgZm9udC1zaXplOiAxOHB4O1xuICAgICAgbGluZS1oZWlnaHQ6IDI2cHg7XG4gICAgICBsZXR0ZXItc3BhY2luZzogLTAuMDJlbTtcbiAgICAgIGNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNyk7IH1cbiAgICBtYWluIC5jYXJkcyAuYnRuIHtcbiAgICAgIG1hcmdpbi10b3A6IGF1dG87XG4gICAgICBmb250LXNpemU6IDE0cHg7XG4gICAgICBsaW5lLWhlaWdodDogMjJweDtcbiAgICAgIGxldHRlci1zcGFjaW5nOiAwLjA5ZW07XG4gICAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xuICAgICAgcGFkZGluZzogMTBweCAxNHB4O1xuICAgICAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgICAgIGJvcmRlci1yYWRpdXM6IDhweDtcbiAgICAgIGJhY2tncm91bmQ6IHJnYmEoNTYsIDEyOCwgMjU1LCAwLjUpOyB9XG4gICAgICBtYWluIC5jYXJkcyAuYnRuIGlvbi1pY29uIHtcbiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgICAgICBoZWlnaHQ6IDE0cHg7XG4gICAgICAgIHdpZHRoOiAxNHB4O1xuICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogLTJweDsgfVxuICAgIEBtZWRpYSAobWF4LXdpZHRoOiA3NjdweCkge1xuICAgICAgbWFpbiAuY2FyZHMge1xuICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOyB9XG4gICAgICAgIG1haW4gLmNhcmRzIC5jYXJkIHtcbiAgICAgICAgICBmbGV4OiBhdXRvO1xuICAgICAgICAgIG1hcmdpbi1yaWdodDogMDtcbiAgICAgICAgICBtYXJnaW4tdG9wOiAyMHB4OyB9IH1cblxuLnJlc291cmNlcyB7XG4gIG1hcmdpbi10b3A6IDk2cHg7IH1cblxuLnJlc291cmNlcyB7XG4gIHBhZGRpbmctYm90dG9tOiAxMjBweDsgfVxuICBAbWVkaWEgKG1heC13aWR0aDogNzY4cHgpIHtcbiAgICAucmVzb3VyY2VzIHtcbiAgICAgIHBhZGRpbmctYm90dG9tOiA2MHB4OyB9IH1cbiAgLnJlc291cmNlcyAuY2FyZHMge1xuICAgIGxpc3Qtc3R5bGUtdHlwZTogbm9uZTtcbiAgICBtYXJnaW46IDA7XG4gICAgcGFkZGluZzogMDtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIG1hcmdpbi1sZWZ0OiAtMjRweDtcbiAgICBtYXJnaW4tcmlnaHQ6IC0yNHB4OyB9XG4gIC5yZXNvdXJjZXMgaGdyb3VwIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcbiAgICBhbGlnbi1pdGVtczogYmFzZWxpbmU7IH1cbiAgICAucmVzb3VyY2VzIGhncm91cCBoMyB7XG4gICAgICBmb250LXdlaWdodDogNjAwO1xuICAgICAgbGluZS1oZWlnaHQ6IG5vcm1hbDtcbiAgICAgIGZvbnQtc2l6ZTogMjhweDtcbiAgICAgIGxldHRlci1zcGFjaW5nOiAtMC4wMmVtO1xuICAgICAgY29sb3I6ICMxQTIzMkY7XG4gICAgICBtYXJnaW4tYm90dG9tOiAwOyB9XG4gICAgLnJlc291cmNlcyBoZ3JvdXAgaDUge1xuICAgICAgZm9udC13ZWlnaHQ6IDcwMDtcbiAgICAgIGxpbmUtaGVpZ2h0OiAxO1xuICAgICAgZm9udC1zaXplOiAxNHB4O1xuICAgICAgbGV0dGVyLXNwYWNpbmc6IDAuMDhlbTtcbiAgICAgIGNvbG9yOiAjMzg4MEZGO1xuICAgICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTsgfVxuICAgIC5yZXNvdXJjZXMgaGdyb3VwIGlvbi1pY29uIHtcbiAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgycHgpOyB9XG4gIC5yZXNvdXJjZXMgLmNhcmRzIGxpIHtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgICBmbGV4OiAwIDAgMzMuMzMlO1xuICAgIHBhZGRpbmc6IDI0cHg7IH1cbiAgICAucmVzb3VyY2VzIC5jYXJkcyBsaSBhIHtcbiAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgd2lkdGg6IDEwMCU7IH1cbiAgICAucmVzb3VyY2VzIC5jYXJkcyBsaSAuaW1nLXdyYXBwZXIge1xuICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICAgIGJvcmRlci1yYWRpdXM6IDZweDsgfVxuICAgIC5yZXNvdXJjZXMgLmNhcmRzIGxpIGltZyB7XG4gICAgICB3aWR0aDogMTAwJTsgfVxuICAgIC5yZXNvdXJjZXMgLmNhcmRzIGxpIGg2IHtcbiAgICAgIGxpbmUtaGVpZ2h0OiAyM3B4O1xuICAgICAgZm9udC1zaXplOiAxMnB4O1xuICAgICAgbGV0dGVyLXNwYWNpbmc6IDAuMTJlbTtcbiAgICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XG4gICAgICBjb2xvcjogI0IyQkVDRDtcbiAgICAgIG1hcmdpbi1ib3R0b206IDA7XG4gICAgICBtYXJnaW4tdG9wOiAxNnB4OyB9XG4gICAgLnJlc291cmNlcyAuY2FyZHMgbGkgaDQge1xuICAgICAgZm9udC1zaXplOiAyMHB4O1xuICAgICAgbWFyZ2luLXRvcDogMTBweDtcbiAgICAgIGNvbG9yOiAjMUEyMzJGO1xuICAgICAgZm9udC13ZWlnaHQ6IDYwMDsgfVxuICAgIC5yZXNvdXJjZXMgLmNhcmRzIGxpIHAge1xuICAgICAgY29sb3I6ICM1QjcwOEI7XG4gICAgICBsaW5lLWhlaWdodDogMjJweDtcbiAgICAgIGZvbnQtc2l6ZTogMTRweDtcbiAgICAgIGxldHRlci1zcGFjaW5nOiAtMC4wMmVtOyB9XG4gIEBtZWRpYSAobWF4LXdpZHRoOiA5OTJweCkge1xuICAgIC5yZXNvdXJjZXMgLmNhcmRzIHtcbiAgICAgIG1hcmdpbi1sZWZ0OiAtMTJweDtcbiAgICAgIG1hcmdpbi1yaWdodDogLTEycHg7IH1cbiAgICAucmVzb3VyY2VzIC5jYXJkcyBsaSB7XG4gICAgICBwYWRkaW5nOiAxMnB4OyB9IH1cbiAgQG1lZGlhIChtYXgtd2lkdGg6IDc2OHB4KSB7XG4gICAgLnJlc291cmNlcyAuY2FyZHMge1xuICAgICAgZmxleC13cmFwOiB3cmFwOyB9XG4gICAgLnJlc291cmNlcyAuY2FyZHMgbGkge1xuICAgICAgZmxleDogMCAwIDUwJTsgfSB9XG4gIEBtZWRpYSAobWF4LXdpZHRoOiA0ODBweCkge1xuICAgIC5yZXNvdXJjZXMgLmNhcmRzIGxpIHtcbiAgICAgIGZsZXg6IDAgMCAxMDAlOyB9XG4gICAgLnJlc291cmNlcyBoNSB7XG4gICAgICBkaXNwbGF5OiBub25lOyB9IH1cblxuLmN0YS5iYW5uZXIgaGdyb3VwOjphZnRlciB7XG4gIGJhY2tncm91bmQ6IHVybChcIi9pbWcvc29sdXRpb25zL2JnLWNyb3NzLXBsYXRmb3JtLWhlYWRlci5zdmdcIik7XG4gIGJhY2tncm91bmQtc2l6ZTogY292ZXI7XG4gIHdpZHRoOiA4NTBweDtcbiAgaGVpZ2h0OiA0MzFweDtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICByaWdodDogY2FsYyg1MCUgLSA3OTZweCk7XG4gIHRvcDogMTM4cHg7XG4gIGNvbnRlbnQ6ICcnOyB9XG5cbiNtb3JlLXRoYW4tbW9iaWxlIC5jb250ZW50IHtcbiAgbWFyZ2luLXRvcDogMzE2cHg7IH1cbiAgI21vcmUtdGhhbi1tb2JpbGUgLmNvbnRlbnQ6OmFmdGVyIHtcbiAgICBiYWNrZ3JvdW5kOiB1cmwoXCIvaW1nL3NvbHV0aW9ucy9hcHBsZS1kZXZpY2VzLnBuZ1wiKTtcbiAgICBiYWNrZ3JvdW5kLXNpemU6IGNvdmVyO1xuICAgIHdpZHRoOiA5ODJweDtcbiAgICBoZWlnaHQ6IDY5NnB4O1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICByaWdodDogY2FsYyg1MCUgLSA4OThweCk7XG4gICAgdG9wOiAxNzRweDtcbiAgICBjb250ZW50OiAnJzsgfVxuICBAbWVkaWEgKG1heC13aWR0aDogOTkxcHgpIHtcbiAgICAjbW9yZS10aGFuLW1vYmlsZSAuY29udGVudCB7XG4gICAgICBtYXJnaW4tYm90dG9tOiAyMDBweDsgfVxuICAgICAgI21vcmUtdGhhbi1tb2JpbGUgLmNvbnRlbnQ6OmFmdGVyIHtcbiAgICAgICAgcmlnaHQ6IGNhbGMoMTAwJSAtIDkwNnB4KTtcbiAgICAgICAgd2lkdGg6IDQ5MXB4O1xuICAgICAgICBoZWlnaHQ6IDM0OHB4O1xuICAgICAgICB0b3A6IGF1dG87XG4gICAgICAgIGJvdHRvbTogNTBweDsgfSB9XG5cbiNmdWxsLW5hdGl2ZS1wb3dlciAuY29udGVudCB7XG4gIG1hcmdpbi10b3A6IDM3M3B4OyB9XG4gICNmdWxsLW5hdGl2ZS1wb3dlciAuY29udGVudDo6YWZ0ZXIge1xuICAgIGJhY2tncm91bmQ6IHVybChcIi9pbWcvc29sdXRpb25zL2lwaG9uZS1wYXJ0cy5qcGdcIik7XG4gICAgYmFja2dyb3VuZC1zaXplOiBjb3ZlcjtcbiAgICB3aWR0aDogNTk0cHg7XG4gICAgaGVpZ2h0OiA3NzJweDtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgbGVmdDogLTRweDtcbiAgICB0b3A6IDIwN3B4O1xuICAgIGNvbnRlbnQ6ICcnOyB9XG4gIEBtZWRpYSAobWF4LXdpZHRoOiAxMjE5cHgpIHtcbiAgICAjZnVsbC1uYXRpdmUtcG93ZXIgLmNvbnRlbnQ6OmFmdGVyIHtcbiAgICAgIHdpZHRoOiAzOTZweDtcbiAgICAgIGhlaWdodDogNTE1cHg7XG4gICAgICB0b3A6IDMyOHB4OyB9IH1cbiAgQG1lZGlhIChtYXgtd2lkdGg6IDEyMTlweCkge1xuICAgICNmdWxsLW5hdGl2ZS1wb3dlciAuY29udGVudCB7XG4gICAgICBtYXJnaW4tdG9wOiA0MDBweDsgfVxuICAgICAgI2Z1bGwtbmF0aXZlLXBvd2VyIC5jb250ZW50OjphZnRlciB7XG4gICAgICAgIHdpZHRoOiAyOTdweDtcbiAgICAgICAgaGVpZ2h0OiAzODZweDtcbiAgICAgICAgdG9wOiAwO1xuICAgICAgICBsZWZ0OiBjYWxjKDUwJSAtIDE1MHB4KTsgfSB9XG5cbiNmdXR1cmUtcHJvb2YgLmNvbnRlbnQge1xuICBtYXJnaW4tdG9wOiA0MzFweDsgfVxuICAjZnV0dXJlLXByb29mIC5jb250ZW50OjphZnRlciB7XG4gICAgYmFja2dyb3VuZDogdXJsKFwiL2ltZy9zb2x1dGlvbnMvaW9uaWMtcGxhdGZvcm1zLnN2Z1wiKTtcbiAgICBiYWNrZ3JvdW5kLXNpemU6IGNvdmVyO1xuICAgIHdpZHRoOiA2MDZweDtcbiAgICBoZWlnaHQ6IDY3MnB4O1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICByaWdodDogY2FsYyg1MCUgLSA2MzJweCk7XG4gICAgdG9wOiAyODJweDtcbiAgICBjb250ZW50OiAnJzsgfVxuICBAbWVkaWEgKG1heC13aWR0aDogMTIxOXB4KSB7XG4gICAgI2Z1dHVyZS1wcm9vZiAuY29udGVudDo6YWZ0ZXIge1xuICAgICAgd2lkdGg6IDMwM3B4O1xuICAgICAgaGVpZ2h0OiAzMzZweDtcbiAgICAgIHJpZ2h0OiBjYWxjKDUwJSAtIDE1MHB4KTtcbiAgICAgIHRvcDogODBweDsgfSB9XG5cbiNob3ctdG8gLmNvbnRlbnQge1xuICBtYXJnaW4tdG9wOiAxNDZweDtcbiAgbWF4LXdpZHRoOiAxMDAlOyB9XG4gICNob3ctdG8gLmNvbnRlbnQgaDIge1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjsgfVxuXG4jZ2V0LXN0YXJ0ZWQge1xuICBtYXJnaW4tdG9wOiAtMjI1cHg7XG4gIHBhZGRpbmctdG9wOiAxMzRweDsgfVxuICBAbWVkaWEgKG1heC13aWR0aDogMTIxOXB4KSB7XG4gICAgI2dldC1zdGFydGVkIHtcbiAgICAgIHBhZGRpbmctdG9wOiAzMDBweDtcbiAgICAgIG1hcmdpbi10b3A6IC0yMDBweDsgfSB9XG4iXX0= */\n"
  },
  {
    "path": "content/css/pages/solutions/design.css",
    "content": ".cta.banner {\n  background: #F6F8FB;\n  text-align: left; }\n  .cta.banner hgroup {\n    max-width: 480px;\n    margin-top: 86px;\n    margin-bottom: 80px; }\n  .cta.banner .container {\n    position: relative; }\n  .cta.banner h4,\n  .cta.banner h1,\n  .cta.banner p {\n    position: relative;\n    z-index: 1; }\n  .cta.banner h4 {\n    font-family: \"Roboto Mono\", Menlo, Monaco, Consolas, \"Courier New\", monospace;\n    font-weight: bold;\n    font-size: 14px;\n    line-height: 26px;\n    letter-spacing: 0.14em;\n    text-transform: uppercase;\n    color: #92A1B3;\n    margin-bottom: 29px; }\n  .cta.banner h1 {\n    font-size: 64px;\n    line-height: 71px;\n    letter-spacing: -0.03em;\n    color: #020814;\n    margin-bottom: 14px; }\n  .cta.banner p {\n    font-size: 24px;\n    line-height: 36px;\n    letter-spacing: -0.04em;\n    color: #27323F;\n    opacity: 0.9; }\n\n#sticky-bar {\n  box-shadow: 0px 1px 0px #E9EDF3, 0px -1px 0px #E9EDF3;\n  background: white;\n  position: -webkit-sticky;\n  position: sticky;\n  top: 0;\n  z-index: 1; }\n  #sticky-bar ul {\n    display: -ms-flexbox;\n    display: flex;\n    -ms-flex-pack: justify;\n        justify-content: space-between;\n    padding-top: 17px;\n    padding-bottom: 17px;\n    -ms-flex-wrap: wrap;\n        flex-wrap: wrap; }\n    @media (max-width: 991px) {\n      #sticky-bar ul {\n        -ms-flex-pack: distribute;\n            justify-content: space-around; } }\n    #sticky-bar ul::before, #sticky-bar ul::after {\n      display: none; }\n  #sticky-bar li {\n    list-style: none; }\n    #sticky-bar li.active a:not(.btn) {\n      color: #4a8bfc; }\n  #sticky-bar a {\n    padding: 10px 0;\n    font-size: 14px;\n    line-height: 22px;\n    text-align: center;\n    letter-spacing: 0.08em;\n    text-transform: uppercase;\n    display: block; }\n    #sticky-bar a:hover, #sticky-bar a:active, #sticky-bar a:focus {\n      background: transparent;\n      text-decoration: none; }\n    #sticky-bar a.btn {\n      padding: 11px 14px 8px;\n      margin-right: 3px;\n      border-radius: 10px;\n      color: white;\n      font-weight: 600; }\n      #sticky-bar a.btn:hover, #sticky-bar a.btn:active, #sticky-bar a.btn:focus {\n        color: white;\n        background: #317bfc; }\n  #sticky-bar .anchor {\n    color: #92A1B3;\n    font-weight: 500; }\n    #sticky-bar .anchor.active, #sticky-bar .anchor:hover {\n      color: #4D8DFF; }\n\nmain {\n  letter-spacing: -0.028em;\n  color: #2F3A48; }\n  main h2 {\n    font-size: 40px;\n    line-height: 50px;\n    letter-spacing: -0.03em;\n    color: #020814;\n    margin-bottom: 15px; }\n  main h3 {\n    color: #414D5C;\n    font-weight: 600;\n    margin-bottom: 4px; }\n    main h3 + h2 {\n      margin-top: 0; }\n  main p {\n    font-size: 20px;\n    line-height: 31px;\n    margin-bottom: 40px; }\n  main ul {\n    padding-left: 0; }\n  main li {\n    font-size: 16px;\n    line-height: 23px;\n    color: #1A232F;\n    margin-bottom: 32px;\n    position: relative;\n    list-style: none;\n    padding-left: 30px;\n    letter-spacing: -.016em; }\n    main li::before {\n      content: url('data:image/svg+xml,\\a         <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\">\\a           <path d=\"M186.301 339.893L96 249.461l-32 30.507L186.301 402 448 140.506 416 110z\"/>\\a         </svg>');\n      position: absolute;\n      left: 0;\n      top: 1px;\n      height: 15px;\n      width: 15px;\n      fill: #1A232F;\n      display: block; }\n  main section {\n    display: -ms-flexbox;\n    display: flex;\n    position: relative; }\n    main section.container::before, main section.container::after {\n      display: none; }\n    main section.right {\n      -ms-flex-direction: row-reverse;\n          flex-direction: row-reverse; }\n    main section.center {\n      -ms-flex-pack: center;\n          justify-content: center;\n      -ms-flex-direction: column;\n          flex-direction: column;\n      -ms-flex-align: center;\n          align-items: center; }\n      main section.center .content {\n        max-width: 798px;\n        text-align: center; }\n        main section.center .content ul {\n          display: -ms-flexbox;\n          display: flex;\n          -ms-flex-wrap: wrap;\n              flex-wrap: wrap;\n          -ms-flex-pack: justify;\n              justify-content: space-between; }\n          @media (max-width: 991px) {\n            main section.center .content ul {\n              -ms-flex-pack: start;\n                  justify-content: flex-start; } }\n        main section.center .content li {\n          max-width: 376px;\n          width: 100%; }\n  main .content {\n    max-width: 482px;\n    margin: 232px 0 184px; }\n    @media (max-width: 991px) {\n      main .content {\n        max-width: 100%;\n        margin: 60px auto; } }\n  main aside {\n    background: #F6F8FB;\n    padding-top: 114px;\n    padding-bottom: 120px; }\n    main aside p {\n      color: #414D5C; }\n    main aside .content {\n      max-width: 432px;\n      margin: 0 auto;\n      text-align: center;\n      display: block; }\n  main .get-started {\n    max-width: 700px; }\n  main .cards {\n    display: -ms-flexbox;\n    display: flex;\n    text-align: left;\n    -ms-flex-pack: center;\n        justify-content: center;\n    margin-top: 38px; }\n    main .cards .card {\n      background: #7CABFF;\n      border-radius: 8px;\n      padding: 40px 40px 34px;\n      display: -ms-flexbox;\n      display: flex;\n      -ms-flex-direction: column;\n          flex-direction: column;\n      -ms-flex-align: start;\n          align-items: flex-start;\n      margin-right: 24px;\n      -ms-flex: 0 1 460px;\n          flex: 0 1 460px;\n      border-radius: 8px; }\n      main .cards .card:last-child {\n        margin-right: 0; }\n      main .cards .card:nth-child(2) {\n        background: #F88D8D; }\n        main .cards .card:nth-child(2) .btn {\n          background: rgba(244, 84, 84, 0.5); }\n    main .cards h3 {\n      font-size: 24px;\n      line-height: normal;\n      letter-spacing: -0.02em;\n      color: white;\n      margin-top: 0; }\n    main .cards p {\n      font-size: 18px;\n      line-height: 26px;\n      letter-spacing: -0.02em;\n      color: rgba(255, 255, 255, 0.7); }\n    main .cards .btn {\n      margin-top: auto;\n      font-size: 14px;\n      line-height: 22px;\n      letter-spacing: 0.09em;\n      text-transform: uppercase;\n      padding: 10px 14px;\n      font-weight: 600;\n      border-radius: 8px;\n      background: rgba(56, 128, 255, 0.5); }\n      main .cards .btn ion-icon {\n        display: inline-block;\n        height: 14px;\n        width: 14px;\n        vertical-align: -2px; }\n    @media (max-width: 767px) {\n      main .cards {\n        -ms-flex-direction: column;\n            flex-direction: column; }\n        main .cards .card {\n          -ms-flex: auto;\n              flex: auto;\n          margin-right: 0;\n          margin-top: 20px; } }\n\n.resources {\n  margin-top: 96px; }\n\n.resources {\n  padding-bottom: 120px; }\n  @media (max-width: 768px) {\n    .resources {\n      padding-bottom: 60px; } }\n  .resources .cards {\n    list-style-type: none;\n    margin: 0;\n    padding: 0;\n    display: -ms-flexbox;\n    display: flex;\n    margin-left: -24px;\n    margin-right: -24px; }\n  .resources hgroup {\n    display: -ms-flexbox;\n    display: flex;\n    -ms-flex-pack: justify;\n        justify-content: space-between;\n    -ms-flex-align: baseline;\n        align-items: baseline; }\n    .resources hgroup h3 {\n      font-weight: 600;\n      line-height: normal;\n      font-size: 28px;\n      letter-spacing: -0.02em;\n      color: #1A232F;\n      margin-bottom: 0; }\n    .resources hgroup h5 {\n      font-weight: 700;\n      line-height: 1;\n      font-size: 14px;\n      letter-spacing: 0.08em;\n      color: #3880FF;\n      text-transform: uppercase; }\n    .resources hgroup ion-icon {\n      -webkit-transform: translateY(2px);\n              transform: translateY(2px); }\n  .resources .cards li {\n    display: block;\n    -ms-flex: 0 0 33.33%;\n        flex: 0 0 33.33%;\n    padding: 24px; }\n    .resources .cards li a {\n      display: block;\n      width: 100%; }\n    .resources .cards li .img-wrapper {\n      overflow: hidden;\n      border-radius: 6px; }\n    .resources .cards li img {\n      width: 100%; }\n    .resources .cards li h6 {\n      line-height: 23px;\n      font-size: 12px;\n      letter-spacing: 0.12em;\n      text-transform: uppercase;\n      color: #B2BECD;\n      margin-bottom: 0;\n      margin-top: 16px; }\n    .resources .cards li h4 {\n      font-size: 20px;\n      margin-top: 10px;\n      color: #1A232F;\n      font-weight: 600; }\n    .resources .cards li p {\n      color: #5B708B;\n      line-height: 22px;\n      font-size: 14px;\n      letter-spacing: -0.02em; }\n  @media (max-width: 992px) {\n    .resources .cards {\n      margin-left: -12px;\n      margin-right: -12px; }\n    .resources .cards li {\n      padding: 12px; } }\n  @media (max-width: 768px) {\n    .resources .cards {\n      -ms-flex-wrap: wrap;\n          flex-wrap: wrap; }\n    .resources .cards li {\n      -ms-flex: 0 0 50%;\n          flex: 0 0 50%; } }\n  @media (max-width: 480px) {\n    .resources .cards li {\n      -ms-flex: 0 0 100%;\n          flex: 0 0 100%; }\n    .resources h5 {\n      display: none; } }\n\n.cta.banner hgroup::after {\n  background: url(\"/img/solutions/design-systems-banner.svg\");\n  background-size: cover;\n  width: 755px;\n  height: 593px;\n  position: absolute;\n  right: -72px;\n  top: 74px;\n  content: ''; }\n\n#build-and-share .content::after {\n  background: url(\"/img/solutions/components.png\");\n  background-size: cover;\n  width: 881px;\n  height: 727px;\n  position: absolute;\n  right: calc(50% - 900px);\n  top: 112px;\n  content: ''; }\n\n@media (max-width: 991px) {\n  #build-and-share {\n    margin-bottom: 100px; }\n    #build-and-share .content::after {\n      width: 387px;\n      height: 363px;\n      top: auto;\n      right: calc(100% - 870px);\n      bottom: -95px; } }\n\n#one-design .content::after {\n  background: url(\"/img/solutions/everywhere.png\");\n  background-size: cover;\n  width: 762px;\n  height: 512px;\n  position: absolute;\n  left: -182px;\n  top: 214px;\n  content: ''; }\n  @media (max-width: 1219px) {\n    #one-design .content::after {\n      width: 508px;\n      height: 341px;\n      left: -70px;\n      top: 250px; } }\n\n@media (max-width: 991px) {\n  #one-design .content {\n    margin-bottom: 250px; }\n    #one-design .content::after {\n      width: 381px;\n      height: 256px;\n      left: calc(50% - 190px);\n      bottom: 0;\n      top: auto; } }\n\n#developer-adoption {\n  border-bottom: 1px solid rgba(146, 161, 179, 0.3);\n  position: relative; }\n  #developer-adoption .content {\n    margin-top: 222px;\n    margin-bottom: 198px;\n    position: static; }\n    #developer-adoption .content::after {\n      background: url(\"/img/solutions/design-system-dashboard.png\");\n      background-size: cover;\n      width: 942px;\n      height: 742px;\n      position: absolute;\n      right: calc(50% - 899px);\n      bottom: 0;\n      content: ''; }\n      @media (max-width: 1219px) {\n        #developer-adoption .content::after {\n          right: calc(50% - 950px); } }\n    @media (max-width: 991px) {\n      #developer-adoption .content {\n        margin-top: 100px;\n        margin-bottom: 180px; }\n        #developer-adoption .content::after {\n          right: calc(50% - 540px);\n          width: 471px;\n          height: 371px; } }\n    @media (max-width: 767px) {\n      #developer-adoption .content::after {\n        right: calc(100% - 920px); } }\n  @media (min-width: 1794px) {\n    #developer-adoption .content::after {\n      right: 0; } }\n\n#help .content {\n  text-align: left; }\n\n#help h2,\n#help p {\n  margin-right: 140px;\n  margin-left: 140px; }\n  @media (max-width: 991px) {\n    #help h2,\n    #help p {\n      margin-right: 0;\n      margin-left: 0; } }\n\n/*# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImRlc2lnbi5jc3MiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7RUFDRSxvQkFBb0I7RUFDcEIsaUJBQWlCLEVBQUU7RUFDbkI7SUFDRSxpQkFBaUI7SUFDakIsaUJBQWlCO0lBQ2pCLG9CQUFvQixFQUFFO0VBQ3hCO0lBQ0UsbUJBQW1CLEVBQUU7RUFDdkI7OztJQUdFLG1CQUFtQjtJQUNuQixXQUFXLEVBQUU7RUFDZjtJQUNFLDhFQUE4RTtJQUM5RSxrQkFBa0I7SUFDbEIsZ0JBQWdCO0lBQ2hCLGtCQUFrQjtJQUNsQix1QkFBdUI7SUFDdkIsMEJBQTBCO0lBQzFCLGVBQWU7SUFDZixvQkFBb0IsRUFBRTtFQUN4QjtJQUNFLGdCQUFnQjtJQUNoQixrQkFBa0I7SUFDbEIsd0JBQXdCO0lBQ3hCLGVBQWU7SUFDZixvQkFBb0IsRUFBRTtFQUN4QjtJQUNFLGdCQUFnQjtJQUNoQixrQkFBa0I7SUFDbEIsd0JBQXdCO0lBQ3hCLGVBQWU7SUFDZixhQUFhLEVBQUU7O0FBRW5CO0VBQ0Usc0RBQXNEO0VBQ3RELGtCQUFrQjtFQUNsQix5QkFBaUI7RUFBakIsaUJBQWlCO0VBQ2pCLE9BQU87RUFDUCxXQUFXLEVBQUU7RUFDYjtJQUNFLHFCQUFjO0lBQWQsY0FBYztJQUNkLHVCQUErQjtRQUEvQiwrQkFBK0I7SUFDL0Isa0JBQWtCO0lBQ2xCLHFCQUFxQjtJQUNyQixvQkFBZ0I7UUFBaEIsZ0JBQWdCLEVBQUU7SUFDbEI7TUFDRTtRQUNFLDBCQUE4QjtZQUE5Qiw4QkFBOEIsRUFBRSxFQUFFO0lBQ3RDO01BQ0UsY0FBYyxFQUFFO0VBQ3BCO0lBQ0UsaUJBQWlCLEVBQUU7SUFDbkI7TUFDRSxlQUFlLEVBQUU7RUFDckI7SUFDRSxnQkFBZ0I7SUFDaEIsZ0JBQWdCO0lBQ2hCLGtCQUFrQjtJQUNsQixtQkFBbUI7SUFDbkIsdUJBQXVCO0lBQ3ZCLDBCQUEwQjtJQUMxQixlQUFlLEVBQUU7SUFDakI7TUFDRSx3QkFBd0I7TUFDeEIsc0JBQXNCLEVBQUU7SUFDMUI7TUFDRSx1QkFBdUI7TUFDdkIsa0JBQWtCO01BQ2xCLG9CQUFvQjtNQUNwQixhQUFhO01BQ2IsaUJBQWlCLEVBQUU7TUFDbkI7UUFDRSxhQUFhO1FBQ2Isb0JBQW9CLEVBQUU7RUFDNUI7SUFDRSxlQUFlO0lBQ2YsaUJBQWlCLEVBQUU7SUFDbkI7TUFDRSxlQUFlLEVBQUU7O0FBRXZCO0VBQ0UseUJBQXlCO0VBQ3pCLGVBQWUsRUFBRTtFQUNqQjtJQUNFLGdCQUFnQjtJQUNoQixrQkFBa0I7SUFDbEIsd0JBQXdCO0lBQ3hCLGVBQWU7SUFDZixvQkFBb0IsRUFBRTtFQUN4QjtJQUNFLGVBQWU7SUFDZixpQkFBaUI7SUFDakIsbUJBQW1CLEVBQUU7SUFDckI7TUFDRSxjQUFjLEVBQUU7RUFDcEI7SUFDRSxnQkFBZ0I7SUFDaEIsa0JBQWtCO0lBQ2xCLG9CQUFvQixFQUFFO0VBQ3hCO0lBQ0UsZ0JBQWdCLEVBQUU7RUFDcEI7SUFDRSxnQkFBZ0I7SUFDaEIsa0JBQWtCO0lBQ2xCLGVBQWU7SUFDZixvQkFBb0I7SUFDcEIsbUJBQW1CO0lBQ25CLGlCQUFpQjtJQUNqQixtQkFBbUI7SUFDbkIsd0JBQXdCLEVBQUU7SUFDMUI7TUFDRSw4TkFBOE47TUFDOU4sbUJBQW1CO01BQ25CLFFBQVE7TUFDUixTQUFTO01BQ1QsYUFBYTtNQUNiLFlBQVk7TUFDWixjQUFjO01BQ2QsZUFBZSxFQUFFO0VBQ3JCO0lBQ0UscUJBQWM7SUFBZCxjQUFjO0lBQ2QsbUJBQW1CLEVBQUU7SUFDckI7TUFDRSxjQUFjLEVBQUU7SUFDbEI7TUFDRSxnQ0FBNEI7VUFBNUIsNEJBQTRCLEVBQUU7SUFDaEM7TUFDRSxzQkFBd0I7VUFBeEIsd0JBQXdCO01BQ3hCLDJCQUF1QjtVQUF2Qix1QkFBdUI7TUFDdkIsdUJBQW9CO1VBQXBCLG9CQUFvQixFQUFFO01BQ3RCO1FBQ0UsaUJBQWlCO1FBQ2pCLG1CQUFtQixFQUFFO1FBQ3JCO1VBQ0UscUJBQWM7VUFBZCxjQUFjO1VBQ2Qsb0JBQWdCO2NBQWhCLGdCQUFnQjtVQUNoQix1QkFBK0I7Y0FBL0IsK0JBQStCLEVBQUU7VUFDakM7WUFDRTtjQUNFLHFCQUE0QjtrQkFBNUIsNEJBQTRCLEVBQUUsRUFBRTtRQUN0QztVQUNFLGlCQUFpQjtVQUNqQixZQUFZLEVBQUU7RUFDdEI7SUFDRSxpQkFBaUI7SUFDakIsc0JBQXNCLEVBQUU7SUFDeEI7TUFDRTtRQUNFLGdCQUFnQjtRQUNoQixrQkFBa0IsRUFBRSxFQUFFO0VBQzVCO0lBQ0Usb0JBQW9CO0lBQ3BCLG1CQUFtQjtJQUNuQixzQkFBc0IsRUFBRTtJQUN4QjtNQUNFLGVBQWUsRUFBRTtJQUNuQjtNQUNFLGlCQUFpQjtNQUNqQixlQUFlO01BQ2YsbUJBQW1CO01BQ25CLGVBQWUsRUFBRTtFQUNyQjtJQUNFLGlCQUFpQixFQUFFO0VBQ3JCO0lBQ0UscUJBQWM7SUFBZCxjQUFjO0lBQ2QsaUJBQWlCO0lBQ2pCLHNCQUF3QjtRQUF4Qix3QkFBd0I7SUFDeEIsaUJBQWlCLEVBQUU7SUFDbkI7TUFDRSxvQkFBb0I7TUFDcEIsbUJBQW1CO01BQ25CLHdCQUF3QjtNQUN4QixxQkFBYztNQUFkLGNBQWM7TUFDZCwyQkFBdUI7VUFBdkIsdUJBQXVCO01BQ3ZCLHNCQUF3QjtVQUF4Qix3QkFBd0I7TUFDeEIsbUJBQW1CO01BQ25CLG9CQUFnQjtVQUFoQixnQkFBZ0I7TUFDaEIsbUJBQW1CLEVBQUU7TUFDckI7UUFDRSxnQkFBZ0IsRUFBRTtNQUNwQjtRQUNFLG9CQUFvQixFQUFFO1FBQ3RCO1VBQ0UsbUNBQW1DLEVBQUU7SUFDM0M7TUFDRSxnQkFBZ0I7TUFDaEIsb0JBQW9CO01BQ3BCLHdCQUF3QjtNQUN4QixhQUFhO01BQ2IsY0FBYyxFQUFFO0lBQ2xCO01BQ0UsZ0JBQWdCO01BQ2hCLGtCQUFrQjtNQUNsQix3QkFBd0I7TUFDeEIsZ0NBQWdDLEVBQUU7SUFDcEM7TUFDRSxpQkFBaUI7TUFDakIsZ0JBQWdCO01BQ2hCLGtCQUFrQjtNQUNsQix1QkFBdUI7TUFDdkIsMEJBQTBCO01BQzFCLG1CQUFtQjtNQUNuQixpQkFBaUI7TUFDakIsbUJBQW1CO01BQ25CLG9DQUFvQyxFQUFFO01BQ3RDO1FBQ0Usc0JBQXNCO1FBQ3RCLGFBQWE7UUFDYixZQUFZO1FBQ1oscUJBQXFCLEVBQUU7SUFDM0I7TUFDRTtRQUNFLDJCQUF1QjtZQUF2Qix1QkFBdUIsRUFBRTtRQUN6QjtVQUNFLGVBQVc7Y0FBWCxXQUFXO1VBQ1gsZ0JBQWdCO1VBQ2hCLGlCQUFpQixFQUFFLEVBQUU7O0FBRS9CO0VBQ0UsaUJBQWlCLEVBQUU7O0FBRXJCO0VBQ0Usc0JBQXNCLEVBQUU7RUFDeEI7SUFDRTtNQUNFLHFCQUFxQixFQUFFLEVBQUU7RUFDN0I7SUFDRSxzQkFBc0I7SUFDdEIsVUFBVTtJQUNWLFdBQVc7SUFDWCxxQkFBYztJQUFkLGNBQWM7SUFDZCxtQkFBbUI7SUFDbkIsb0JBQW9CLEVBQUU7RUFDeEI7SUFDRSxxQkFBYztJQUFkLGNBQWM7SUFDZCx1QkFBK0I7UUFBL0IsK0JBQStCO0lBQy9CLHlCQUFzQjtRQUF0QixzQkFBc0IsRUFBRTtJQUN4QjtNQUNFLGlCQUFpQjtNQUNqQixvQkFBb0I7TUFDcEIsZ0JBQWdCO01BQ2hCLHdCQUF3QjtNQUN4QixlQUFlO01BQ2YsaUJBQWlCLEVBQUU7SUFDckI7TUFDRSxpQkFBaUI7TUFDakIsZUFBZTtNQUNmLGdCQUFnQjtNQUNoQix1QkFBdUI7TUFDdkIsZUFBZTtNQUNmLDBCQUEwQixFQUFFO0lBQzlCO01BQ0UsbUNBQTJCO2NBQTNCLDJCQUEyQixFQUFFO0VBQ2pDO0lBQ0UsZUFBZTtJQUNmLHFCQUFpQjtRQUFqQixpQkFBaUI7SUFDakIsY0FBYyxFQUFFO0lBQ2hCO01BQ0UsZUFBZTtNQUNmLFlBQVksRUFBRTtJQUNoQjtNQUNFLGlCQUFpQjtNQUNqQixtQkFBbUIsRUFBRTtJQUN2QjtNQUNFLFlBQVksRUFBRTtJQUNoQjtNQUNFLGtCQUFrQjtNQUNsQixnQkFBZ0I7TUFDaEIsdUJBQXVCO01BQ3ZCLDBCQUEwQjtNQUMxQixlQUFlO01BQ2YsaUJBQWlCO01BQ2pCLGlCQUFpQixFQUFFO0lBQ3JCO01BQ0UsZ0JBQWdCO01BQ2hCLGlCQUFpQjtNQUNqQixlQUFlO01BQ2YsaUJBQWlCLEVBQUU7SUFDckI7TUFDRSxlQUFlO01BQ2Ysa0JBQWtCO01BQ2xCLGdCQUFnQjtNQUNoQix3QkFBd0IsRUFBRTtFQUM5QjtJQUNFO01BQ0UsbUJBQW1CO01BQ25CLG9CQUFvQixFQUFFO0lBQ3hCO01BQ0UsY0FBYyxFQUFFLEVBQUU7RUFDdEI7SUFDRTtNQUNFLG9CQUFnQjtVQUFoQixnQkFBZ0IsRUFBRTtJQUNwQjtNQUNFLGtCQUFjO1VBQWQsY0FBYyxFQUFFLEVBQUU7RUFDdEI7SUFDRTtNQUNFLG1CQUFlO1VBQWYsZUFBZSxFQUFFO0lBQ25CO01BQ0UsY0FBYyxFQUFFLEVBQUU7O0FBRXhCO0VBQ0UsNERBQTREO0VBQzVELHVCQUF1QjtFQUN2QixhQUFhO0VBQ2IsY0FBYztFQUNkLG1CQUFtQjtFQUNuQixhQUFhO0VBQ2IsVUFBVTtFQUNWLFlBQVksRUFBRTs7QUFFaEI7RUFDRSxpREFBaUQ7RUFDakQsdUJBQXVCO0VBQ3ZCLGFBQWE7RUFDYixjQUFjO0VBQ2QsbUJBQW1CO0VBQ25CLHlCQUF5QjtFQUN6QixXQUFXO0VBQ1gsWUFBWSxFQUFFOztBQUVoQjtFQUNFO0lBQ0UscUJBQXFCLEVBQUU7SUFDdkI7TUFDRSxhQUFhO01BQ2IsY0FBYztNQUNkLFVBQVU7TUFDViwwQkFBMEI7TUFDMUIsY0FBYyxFQUFFLEVBQUU7O0FBRXhCO0VBQ0UsaURBQWlEO0VBQ2pELHVCQUF1QjtFQUN2QixhQUFhO0VBQ2IsY0FBYztFQUNkLG1CQUFtQjtFQUNuQixhQUFhO0VBQ2IsV0FBVztFQUNYLFlBQVksRUFBRTtFQUNkO0lBQ0U7TUFDRSxhQUFhO01BQ2IsY0FBYztNQUNkLFlBQVk7TUFDWixXQUFXLEVBQUUsRUFBRTs7QUFFckI7RUFDRTtJQUNFLHFCQUFxQixFQUFFO0lBQ3ZCO01BQ0UsYUFBYTtNQUNiLGNBQWM7TUFDZCx3QkFBd0I7TUFDeEIsVUFBVTtNQUNWLFVBQVUsRUFBRSxFQUFFOztBQUVwQjtFQUNFLGtEQUFrRDtFQUNsRCxtQkFBbUIsRUFBRTtFQUNyQjtJQUNFLGtCQUFrQjtJQUNsQixxQkFBcUI7SUFDckIsaUJBQWlCLEVBQUU7SUFDbkI7TUFDRSw4REFBOEQ7TUFDOUQsdUJBQXVCO01BQ3ZCLGFBQWE7TUFDYixjQUFjO01BQ2QsbUJBQW1CO01BQ25CLHlCQUF5QjtNQUN6QixVQUFVO01BQ1YsWUFBWSxFQUFFO01BQ2Q7UUFDRTtVQUNFLHlCQUF5QixFQUFFLEVBQUU7SUFDbkM7TUFDRTtRQUNFLGtCQUFrQjtRQUNsQixxQkFBcUIsRUFBRTtRQUN2QjtVQUNFLHlCQUF5QjtVQUN6QixhQUFhO1VBQ2IsY0FBYyxFQUFFLEVBQUU7SUFDeEI7TUFDRTtRQUNFLDBCQUEwQixFQUFFLEVBQUU7RUFDcEM7SUFDRTtNQUNFLFNBQVMsRUFBRSxFQUFFOztBQUVuQjtFQUNFLGlCQUFpQixFQUFFOztBQUVyQjs7RUFFRSxvQkFBb0I7RUFDcEIsbUJBQW1CLEVBQUU7RUFDckI7SUFDRTs7TUFFRSxnQkFBZ0I7TUFDaEIsZUFBZSxFQUFFLEVBQUUiLCJmaWxlIjoicGFnZXMvc29sdXRpb25zL2Rlc2lnbi5jc3MiLCJzb3VyY2VzQ29udGVudCI6WyIuY3RhLmJhbm5lciB7XG4gIGJhY2tncm91bmQ6ICNGNkY4RkI7XG4gIHRleHQtYWxpZ246IGxlZnQ7IH1cbiAgLmN0YS5iYW5uZXIgaGdyb3VwIHtcbiAgICBtYXgtd2lkdGg6IDQ4MHB4O1xuICAgIG1hcmdpbi10b3A6IDg2cHg7XG4gICAgbWFyZ2luLWJvdHRvbTogODBweDsgfVxuICAuY3RhLmJhbm5lciAuY29udGFpbmVyIHtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7IH1cbiAgLmN0YS5iYW5uZXIgaDQsXG4gIC5jdGEuYmFubmVyIGgxLFxuICAuY3RhLmJhbm5lciBwIHtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgei1pbmRleDogMTsgfVxuICAuY3RhLmJhbm5lciBoNCB7XG4gICAgZm9udC1mYW1pbHk6IFwiUm9ib3RvIE1vbm9cIiwgTWVubG8sIE1vbmFjbywgQ29uc29sYXMsIFwiQ291cmllciBOZXdcIiwgbW9ub3NwYWNlO1xuICAgIGZvbnQtd2VpZ2h0OiBib2xkO1xuICAgIGZvbnQtc2l6ZTogMTRweDtcbiAgICBsaW5lLWhlaWdodDogMjZweDtcbiAgICBsZXR0ZXItc3BhY2luZzogMC4xNGVtO1xuICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XG4gICAgY29sb3I6ICM5MkExQjM7XG4gICAgbWFyZ2luLWJvdHRvbTogMjlweDsgfVxuICAuY3RhLmJhbm5lciBoMSB7XG4gICAgZm9udC1zaXplOiA2NHB4O1xuICAgIGxpbmUtaGVpZ2h0OiA3MXB4O1xuICAgIGxldHRlci1zcGFjaW5nOiAtMC4wM2VtO1xuICAgIGNvbG9yOiAjMDIwODE0O1xuICAgIG1hcmdpbi1ib3R0b206IDE0cHg7IH1cbiAgLmN0YS5iYW5uZXIgcCB7XG4gICAgZm9udC1zaXplOiAyNHB4O1xuICAgIGxpbmUtaGVpZ2h0OiAzNnB4O1xuICAgIGxldHRlci1zcGFjaW5nOiAtMC4wNGVtO1xuICAgIGNvbG9yOiAjMjczMjNGO1xuICAgIG9wYWNpdHk6IDAuOTsgfVxuXG4jc3RpY2t5LWJhciB7XG4gIGJveC1zaGFkb3c6IDBweCAxcHggMHB4ICNFOUVERjMsIDBweCAtMXB4IDBweCAjRTlFREYzO1xuICBiYWNrZ3JvdW5kOiB3aGl0ZTtcbiAgcG9zaXRpb246IHN0aWNreTtcbiAgdG9wOiAwO1xuICB6LWluZGV4OiAxOyB9XG4gICNzdGlja3ktYmFyIHVsIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcbiAgICBwYWRkaW5nLXRvcDogMTdweDtcbiAgICBwYWRkaW5nLWJvdHRvbTogMTdweDtcbiAgICBmbGV4LXdyYXA6IHdyYXA7IH1cbiAgICBAbWVkaWEgKG1heC13aWR0aDogOTkxcHgpIHtcbiAgICAgICNzdGlja3ktYmFyIHVsIHtcbiAgICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1hcm91bmQ7IH0gfVxuICAgICNzdGlja3ktYmFyIHVsOjpiZWZvcmUsICNzdGlja3ktYmFyIHVsOjphZnRlciB7XG4gICAgICBkaXNwbGF5OiBub25lOyB9XG4gICNzdGlja3ktYmFyIGxpIHtcbiAgICBsaXN0LXN0eWxlOiBub25lOyB9XG4gICAgI3N0aWNreS1iYXIgbGkuYWN0aXZlIGE6bm90KC5idG4pIHtcbiAgICAgIGNvbG9yOiAjNGE4YmZjOyB9XG4gICNzdGlja3ktYmFyIGEge1xuICAgIHBhZGRpbmc6IDEwcHggMDtcbiAgICBmb250LXNpemU6IDE0cHg7XG4gICAgbGluZS1oZWlnaHQ6IDIycHg7XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgIGxldHRlci1zcGFjaW5nOiAwLjA4ZW07XG4gICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcbiAgICBkaXNwbGF5OiBibG9jazsgfVxuICAgICNzdGlja3ktYmFyIGE6aG92ZXIsICNzdGlja3ktYmFyIGE6YWN0aXZlLCAjc3RpY2t5LWJhciBhOmZvY3VzIHtcbiAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xuICAgICAgdGV4dC1kZWNvcmF0aW9uOiBub25lOyB9XG4gICAgI3N0aWNreS1iYXIgYS5idG4ge1xuICAgICAgcGFkZGluZzogMTFweCAxNHB4IDhweDtcbiAgICAgIG1hcmdpbi1yaWdodDogM3B4O1xuICAgICAgYm9yZGVyLXJhZGl1czogMTBweDtcbiAgICAgIGNvbG9yOiB3aGl0ZTtcbiAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7IH1cbiAgICAgICNzdGlja3ktYmFyIGEuYnRuOmhvdmVyLCAjc3RpY2t5LWJhciBhLmJ0bjphY3RpdmUsICNzdGlja3ktYmFyIGEuYnRuOmZvY3VzIHtcbiAgICAgICAgY29sb3I6IHdoaXRlO1xuICAgICAgICBiYWNrZ3JvdW5kOiAjMzE3YmZjOyB9XG4gICNzdGlja3ktYmFyIC5hbmNob3Ige1xuICAgIGNvbG9yOiAjOTJBMUIzO1xuICAgIGZvbnQtd2VpZ2h0OiA1MDA7IH1cbiAgICAjc3RpY2t5LWJhciAuYW5jaG9yLmFjdGl2ZSwgI3N0aWNreS1iYXIgLmFuY2hvcjpob3ZlciB7XG4gICAgICBjb2xvcjogIzREOERGRjsgfVxuXG5tYWluIHtcbiAgbGV0dGVyLXNwYWNpbmc6IC0wLjAyOGVtO1xuICBjb2xvcjogIzJGM0E0ODsgfVxuICBtYWluIGgyIHtcbiAgICBmb250LXNpemU6IDQwcHg7XG4gICAgbGluZS1oZWlnaHQ6IDUwcHg7XG4gICAgbGV0dGVyLXNwYWNpbmc6IC0wLjAzZW07XG4gICAgY29sb3I6ICMwMjA4MTQ7XG4gICAgbWFyZ2luLWJvdHRvbTogMTVweDsgfVxuICBtYWluIGgzIHtcbiAgICBjb2xvcjogIzQxNEQ1QztcbiAgICBmb250LXdlaWdodDogNjAwO1xuICAgIG1hcmdpbi1ib3R0b206IDRweDsgfVxuICAgIG1haW4gaDMgKyBoMiB7XG4gICAgICBtYXJnaW4tdG9wOiAwOyB9XG4gIG1haW4gcCB7XG4gICAgZm9udC1zaXplOiAyMHB4O1xuICAgIGxpbmUtaGVpZ2h0OiAzMXB4O1xuICAgIG1hcmdpbi1ib3R0b206IDQwcHg7IH1cbiAgbWFpbiB1bCB7XG4gICAgcGFkZGluZy1sZWZ0OiAwOyB9XG4gIG1haW4gbGkge1xuICAgIGZvbnQtc2l6ZTogMTZweDtcbiAgICBsaW5lLWhlaWdodDogMjNweDtcbiAgICBjb2xvcjogIzFBMjMyRjtcbiAgICBtYXJnaW4tYm90dG9tOiAzMnB4O1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICBsaXN0LXN0eWxlOiBub25lO1xuICAgIHBhZGRpbmctbGVmdDogMzBweDtcbiAgICBsZXR0ZXItc3BhY2luZzogLS4wMTZlbTsgfVxuICAgIG1haW4gbGk6OmJlZm9yZSB7XG4gICAgICBjb250ZW50OiB1cmwoJ2RhdGE6aW1hZ2Uvc3ZnK3htbCxcXGEgICAgICAgICA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB2aWV3Qm94PVwiMCAwIDUxMiA1MTJcIj5cXGEgICAgICAgICAgIDxwYXRoIGQ9XCJNMTg2LjMwMSAzMzkuODkzTDk2IDI0OS40NjFsLTMyIDMwLjUwN0wxODYuMzAxIDQwMiA0NDggMTQwLjUwNiA0MTYgMTEwelwiLz5cXGEgICAgICAgICA8L3N2Zz4nKTtcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgIGxlZnQ6IDA7XG4gICAgICB0b3A6IDFweDtcbiAgICAgIGhlaWdodDogMTVweDtcbiAgICAgIHdpZHRoOiAxNXB4O1xuICAgICAgZmlsbDogIzFBMjMyRjtcbiAgICAgIGRpc3BsYXk6IGJsb2NrOyB9XG4gIG1haW4gc2VjdGlvbiB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7IH1cbiAgICBtYWluIHNlY3Rpb24uY29udGFpbmVyOjpiZWZvcmUsIG1haW4gc2VjdGlvbi5jb250YWluZXI6OmFmdGVyIHtcbiAgICAgIGRpc3BsYXk6IG5vbmU7IH1cbiAgICBtYWluIHNlY3Rpb24ucmlnaHQge1xuICAgICAgZmxleC1kaXJlY3Rpb246IHJvdy1yZXZlcnNlOyB9XG4gICAgbWFpbiBzZWN0aW9uLmNlbnRlciB7XG4gICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICBhbGlnbi1pdGVtczogY2VudGVyOyB9XG4gICAgICBtYWluIHNlY3Rpb24uY2VudGVyIC5jb250ZW50IHtcbiAgICAgICAgbWF4LXdpZHRoOiA3OThweDtcbiAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyOyB9XG4gICAgICAgIG1haW4gc2VjdGlvbi5jZW50ZXIgLmNvbnRlbnQgdWwge1xuICAgICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgICAgZmxleC13cmFwOiB3cmFwO1xuICAgICAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjsgfVxuICAgICAgICAgIEBtZWRpYSAobWF4LXdpZHRoOiA5OTFweCkge1xuICAgICAgICAgICAgbWFpbiBzZWN0aW9uLmNlbnRlciAuY29udGVudCB1bCB7XG4gICAgICAgICAgICAgIGp1c3RpZnktY29udGVudDogZmxleC1zdGFydDsgfSB9XG4gICAgICAgIG1haW4gc2VjdGlvbi5jZW50ZXIgLmNvbnRlbnQgbGkge1xuICAgICAgICAgIG1heC13aWR0aDogMzc2cHg7XG4gICAgICAgICAgd2lkdGg6IDEwMCU7IH1cbiAgbWFpbiAuY29udGVudCB7XG4gICAgbWF4LXdpZHRoOiA0ODJweDtcbiAgICBtYXJnaW46IDIzMnB4IDAgMTg0cHg7IH1cbiAgICBAbWVkaWEgKG1heC13aWR0aDogOTkxcHgpIHtcbiAgICAgIG1haW4gLmNvbnRlbnQge1xuICAgICAgICBtYXgtd2lkdGg6IDEwMCU7XG4gICAgICAgIG1hcmdpbjogNjBweCBhdXRvOyB9IH1cbiAgbWFpbiBhc2lkZSB7XG4gICAgYmFja2dyb3VuZDogI0Y2RjhGQjtcbiAgICBwYWRkaW5nLXRvcDogMTE0cHg7XG4gICAgcGFkZGluZy1ib3R0b206IDEyMHB4OyB9XG4gICAgbWFpbiBhc2lkZSBwIHtcbiAgICAgIGNvbG9yOiAjNDE0RDVDOyB9XG4gICAgbWFpbiBhc2lkZSAuY29udGVudCB7XG4gICAgICBtYXgtd2lkdGg6IDQzMnB4O1xuICAgICAgbWFyZ2luOiAwIGF1dG87XG4gICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgICBkaXNwbGF5OiBibG9jazsgfVxuICBtYWluIC5nZXQtc3RhcnRlZCB7XG4gICAgbWF4LXdpZHRoOiA3MDBweDsgfVxuICBtYWluIC5jYXJkcyB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICB0ZXh0LWFsaWduOiBsZWZ0O1xuICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICAgIG1hcmdpbi10b3A6IDM4cHg7IH1cbiAgICBtYWluIC5jYXJkcyAuY2FyZCB7XG4gICAgICBiYWNrZ3JvdW5kOiAjN0NBQkZGO1xuICAgICAgYm9yZGVyLXJhZGl1czogOHB4O1xuICAgICAgcGFkZGluZzogNDBweCA0MHB4IDM0cHg7XG4gICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICAgIGFsaWduLWl0ZW1zOiBmbGV4LXN0YXJ0O1xuICAgICAgbWFyZ2luLXJpZ2h0OiAyNHB4O1xuICAgICAgZmxleDogMCAxIDQ2MHB4O1xuICAgICAgYm9yZGVyLXJhZGl1czogOHB4OyB9XG4gICAgICBtYWluIC5jYXJkcyAuY2FyZDpsYXN0LWNoaWxkIHtcbiAgICAgICAgbWFyZ2luLXJpZ2h0OiAwOyB9XG4gICAgICBtYWluIC5jYXJkcyAuY2FyZDpudGgtY2hpbGQoMikge1xuICAgICAgICBiYWNrZ3JvdW5kOiAjRjg4RDhEOyB9XG4gICAgICAgIG1haW4gLmNhcmRzIC5jYXJkOm50aC1jaGlsZCgyKSAuYnRuIHtcbiAgICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDI0NCwgODQsIDg0LCAwLjUpOyB9XG4gICAgbWFpbiAuY2FyZHMgaDMge1xuICAgICAgZm9udC1zaXplOiAyNHB4O1xuICAgICAgbGluZS1oZWlnaHQ6IG5vcm1hbDtcbiAgICAgIGxldHRlci1zcGFjaW5nOiAtMC4wMmVtO1xuICAgICAgY29sb3I6IHdoaXRlO1xuICAgICAgbWFyZ2luLXRvcDogMDsgfVxuICAgIG1haW4gLmNhcmRzIHAge1xuICAgICAgZm9udC1zaXplOiAxOHB4O1xuICAgICAgbGluZS1oZWlnaHQ6IDI2cHg7XG4gICAgICBsZXR0ZXItc3BhY2luZzogLTAuMDJlbTtcbiAgICAgIGNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNyk7IH1cbiAgICBtYWluIC5jYXJkcyAuYnRuIHtcbiAgICAgIG1hcmdpbi10b3A6IGF1dG87XG4gICAgICBmb250LXNpemU6IDE0cHg7XG4gICAgICBsaW5lLWhlaWdodDogMjJweDtcbiAgICAgIGxldHRlci1zcGFjaW5nOiAwLjA5ZW07XG4gICAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xuICAgICAgcGFkZGluZzogMTBweCAxNHB4O1xuICAgICAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgICAgIGJvcmRlci1yYWRpdXM6IDhweDtcbiAgICAgIGJhY2tncm91bmQ6IHJnYmEoNTYsIDEyOCwgMjU1LCAwLjUpOyB9XG4gICAgICBtYWluIC5jYXJkcyAuYnRuIGlvbi1pY29uIHtcbiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgICAgICBoZWlnaHQ6IDE0cHg7XG4gICAgICAgIHdpZHRoOiAxNHB4O1xuICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogLTJweDsgfVxuICAgIEBtZWRpYSAobWF4LXdpZHRoOiA3NjdweCkge1xuICAgICAgbWFpbiAuY2FyZHMge1xuICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOyB9XG4gICAgICAgIG1haW4gLmNhcmRzIC5jYXJkIHtcbiAgICAgICAgICBmbGV4OiBhdXRvO1xuICAgICAgICAgIG1hcmdpbi1yaWdodDogMDtcbiAgICAgICAgICBtYXJnaW4tdG9wOiAyMHB4OyB9IH1cblxuLnJlc291cmNlcyB7XG4gIG1hcmdpbi10b3A6IDk2cHg7IH1cblxuLnJlc291cmNlcyB7XG4gIHBhZGRpbmctYm90dG9tOiAxMjBweDsgfVxuICBAbWVkaWEgKG1heC13aWR0aDogNzY4cHgpIHtcbiAgICAucmVzb3VyY2VzIHtcbiAgICAgIHBhZGRpbmctYm90dG9tOiA2MHB4OyB9IH1cbiAgLnJlc291cmNlcyAuY2FyZHMge1xuICAgIGxpc3Qtc3R5bGUtdHlwZTogbm9uZTtcbiAgICBtYXJnaW46IDA7XG4gICAgcGFkZGluZzogMDtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIG1hcmdpbi1sZWZ0OiAtMjRweDtcbiAgICBtYXJnaW4tcmlnaHQ6IC0yNHB4OyB9XG4gIC5yZXNvdXJjZXMgaGdyb3VwIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcbiAgICBhbGlnbi1pdGVtczogYmFzZWxpbmU7IH1cbiAgICAucmVzb3VyY2VzIGhncm91cCBoMyB7XG4gICAgICBmb250LXdlaWdodDogNjAwO1xuICAgICAgbGluZS1oZWlnaHQ6IG5vcm1hbDtcbiAgICAgIGZvbnQtc2l6ZTogMjhweDtcbiAgICAgIGxldHRlci1zcGFjaW5nOiAtMC4wMmVtO1xuICAgICAgY29sb3I6ICMxQTIzMkY7XG4gICAgICBtYXJnaW4tYm90dG9tOiAwOyB9XG4gICAgLnJlc291cmNlcyBoZ3JvdXAgaDUge1xuICAgICAgZm9udC13ZWlnaHQ6IDcwMDtcbiAgICAgIGxpbmUtaGVpZ2h0OiAxO1xuICAgICAgZm9udC1zaXplOiAxNHB4O1xuICAgICAgbGV0dGVyLXNwYWNpbmc6IDAuMDhlbTtcbiAgICAgIGNvbG9yOiAjMzg4MEZGO1xuICAgICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTsgfVxuICAgIC5yZXNvdXJjZXMgaGdyb3VwIGlvbi1pY29uIHtcbiAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgycHgpOyB9XG4gIC5yZXNvdXJjZXMgLmNhcmRzIGxpIHtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgICBmbGV4OiAwIDAgMzMuMzMlO1xuICAgIHBhZGRpbmc6IDI0cHg7IH1cbiAgICAucmVzb3VyY2VzIC5jYXJkcyBsaSBhIHtcbiAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgd2lkdGg6IDEwMCU7IH1cbiAgICAucmVzb3VyY2VzIC5jYXJkcyBsaSAuaW1nLXdyYXBwZXIge1xuICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICAgIGJvcmRlci1yYWRpdXM6IDZweDsgfVxuICAgIC5yZXNvdXJjZXMgLmNhcmRzIGxpIGltZyB7XG4gICAgICB3aWR0aDogMTAwJTsgfVxuICAgIC5yZXNvdXJjZXMgLmNhcmRzIGxpIGg2IHtcbiAgICAgIGxpbmUtaGVpZ2h0OiAyM3B4O1xuICAgICAgZm9udC1zaXplOiAxMnB4O1xuICAgICAgbGV0dGVyLXNwYWNpbmc6IDAuMTJlbTtcbiAgICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XG4gICAgICBjb2xvcjogI0IyQkVDRDtcbiAgICAgIG1hcmdpbi1ib3R0b206IDA7XG4gICAgICBtYXJnaW4tdG9wOiAxNnB4OyB9XG4gICAgLnJlc291cmNlcyAuY2FyZHMgbGkgaDQge1xuICAgICAgZm9udC1zaXplOiAyMHB4O1xuICAgICAgbWFyZ2luLXRvcDogMTBweDtcbiAgICAgIGNvbG9yOiAjMUEyMzJGO1xuICAgICAgZm9udC13ZWlnaHQ6IDYwMDsgfVxuICAgIC5yZXNvdXJjZXMgLmNhcmRzIGxpIHAge1xuICAgICAgY29sb3I6ICM1QjcwOEI7XG4gICAgICBsaW5lLWhlaWdodDogMjJweDtcbiAgICAgIGZvbnQtc2l6ZTogMTRweDtcbiAgICAgIGxldHRlci1zcGFjaW5nOiAtMC4wMmVtOyB9XG4gIEBtZWRpYSAobWF4LXdpZHRoOiA5OTJweCkge1xuICAgIC5yZXNvdXJjZXMgLmNhcmRzIHtcbiAgICAgIG1hcmdpbi1sZWZ0OiAtMTJweDtcbiAgICAgIG1hcmdpbi1yaWdodDogLTEycHg7IH1cbiAgICAucmVzb3VyY2VzIC5jYXJkcyBsaSB7XG4gICAgICBwYWRkaW5nOiAxMnB4OyB9IH1cbiAgQG1lZGlhIChtYXgtd2lkdGg6IDc2OHB4KSB7XG4gICAgLnJlc291cmNlcyAuY2FyZHMge1xuICAgICAgZmxleC13cmFwOiB3cmFwOyB9XG4gICAgLnJlc291cmNlcyAuY2FyZHMgbGkge1xuICAgICAgZmxleDogMCAwIDUwJTsgfSB9XG4gIEBtZWRpYSAobWF4LXdpZHRoOiA0ODBweCkge1xuICAgIC5yZXNvdXJjZXMgLmNhcmRzIGxpIHtcbiAgICAgIGZsZXg6IDAgMCAxMDAlOyB9XG4gICAgLnJlc291cmNlcyBoNSB7XG4gICAgICBkaXNwbGF5OiBub25lOyB9IH1cblxuLmN0YS5iYW5uZXIgaGdyb3VwOjphZnRlciB7XG4gIGJhY2tncm91bmQ6IHVybChcIi9pbWcvc29sdXRpb25zL2Rlc2lnbi1zeXN0ZW1zLWJhbm5lci5zdmdcIik7XG4gIGJhY2tncm91bmQtc2l6ZTogY292ZXI7XG4gIHdpZHRoOiA3NTVweDtcbiAgaGVpZ2h0OiA1OTNweDtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICByaWdodDogLTcycHg7XG4gIHRvcDogNzRweDtcbiAgY29udGVudDogJyc7IH1cblxuI2J1aWxkLWFuZC1zaGFyZSAuY29udGVudDo6YWZ0ZXIge1xuICBiYWNrZ3JvdW5kOiB1cmwoXCIvaW1nL3NvbHV0aW9ucy9jb21wb25lbnRzLnBuZ1wiKTtcbiAgYmFja2dyb3VuZC1zaXplOiBjb3ZlcjtcbiAgd2lkdGg6IDg4MXB4O1xuICBoZWlnaHQ6IDcyN3B4O1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHJpZ2h0OiBjYWxjKDUwJSAtIDkwMHB4KTtcbiAgdG9wOiAxMTJweDtcbiAgY29udGVudDogJyc7IH1cblxuQG1lZGlhIChtYXgtd2lkdGg6IDk5MXB4KSB7XG4gICNidWlsZC1hbmQtc2hhcmUge1xuICAgIG1hcmdpbi1ib3R0b206IDEwMHB4OyB9XG4gICAgI2J1aWxkLWFuZC1zaGFyZSAuY29udGVudDo6YWZ0ZXIge1xuICAgICAgd2lkdGg6IDM4N3B4O1xuICAgICAgaGVpZ2h0OiAzNjNweDtcbiAgICAgIHRvcDogYXV0bztcbiAgICAgIHJpZ2h0OiBjYWxjKDEwMCUgLSA4NzBweCk7XG4gICAgICBib3R0b206IC05NXB4OyB9IH1cblxuI29uZS1kZXNpZ24gLmNvbnRlbnQ6OmFmdGVyIHtcbiAgYmFja2dyb3VuZDogdXJsKFwiL2ltZy9zb2x1dGlvbnMvZXZlcnl3aGVyZS5wbmdcIik7XG4gIGJhY2tncm91bmQtc2l6ZTogY292ZXI7XG4gIHdpZHRoOiA3NjJweDtcbiAgaGVpZ2h0OiA1MTJweDtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICBsZWZ0OiAtMTgycHg7XG4gIHRvcDogMjE0cHg7XG4gIGNvbnRlbnQ6ICcnOyB9XG4gIEBtZWRpYSAobWF4LXdpZHRoOiAxMjE5cHgpIHtcbiAgICAjb25lLWRlc2lnbiAuY29udGVudDo6YWZ0ZXIge1xuICAgICAgd2lkdGg6IDUwOHB4O1xuICAgICAgaGVpZ2h0OiAzNDFweDtcbiAgICAgIGxlZnQ6IC03MHB4O1xuICAgICAgdG9wOiAyNTBweDsgfSB9XG5cbkBtZWRpYSAobWF4LXdpZHRoOiA5OTFweCkge1xuICAjb25lLWRlc2lnbiAuY29udGVudCB7XG4gICAgbWFyZ2luLWJvdHRvbTogMjUwcHg7IH1cbiAgICAjb25lLWRlc2lnbiAuY29udGVudDo6YWZ0ZXIge1xuICAgICAgd2lkdGg6IDM4MXB4O1xuICAgICAgaGVpZ2h0OiAyNTZweDtcbiAgICAgIGxlZnQ6IGNhbGMoNTAlIC0gMTkwcHgpO1xuICAgICAgYm90dG9tOiAwO1xuICAgICAgdG9wOiBhdXRvOyB9IH1cblxuI2RldmVsb3Blci1hZG9wdGlvbiB7XG4gIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCByZ2JhKDE0NiwgMTYxLCAxNzksIDAuMyk7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTsgfVxuICAjZGV2ZWxvcGVyLWFkb3B0aW9uIC5jb250ZW50IHtcbiAgICBtYXJnaW4tdG9wOiAyMjJweDtcbiAgICBtYXJnaW4tYm90dG9tOiAxOThweDtcbiAgICBwb3NpdGlvbjogc3RhdGljOyB9XG4gICAgI2RldmVsb3Blci1hZG9wdGlvbiAuY29udGVudDo6YWZ0ZXIge1xuICAgICAgYmFja2dyb3VuZDogdXJsKFwiL2ltZy9zb2x1dGlvbnMvZGVzaWduLXN5c3RlbS1kYXNoYm9hcmQucG5nXCIpO1xuICAgICAgYmFja2dyb3VuZC1zaXplOiBjb3ZlcjtcbiAgICAgIHdpZHRoOiA5NDJweDtcbiAgICAgIGhlaWdodDogNzQycHg7XG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICByaWdodDogY2FsYyg1MCUgLSA4OTlweCk7XG4gICAgICBib3R0b206IDA7XG4gICAgICBjb250ZW50OiAnJzsgfVxuICAgICAgQG1lZGlhIChtYXgtd2lkdGg6IDEyMTlweCkge1xuICAgICAgICAjZGV2ZWxvcGVyLWFkb3B0aW9uIC5jb250ZW50OjphZnRlciB7XG4gICAgICAgICAgcmlnaHQ6IGNhbGMoNTAlIC0gOTUwcHgpOyB9IH1cbiAgICBAbWVkaWEgKG1heC13aWR0aDogOTkxcHgpIHtcbiAgICAgICNkZXZlbG9wZXItYWRvcHRpb24gLmNvbnRlbnQge1xuICAgICAgICBtYXJnaW4tdG9wOiAxMDBweDtcbiAgICAgICAgbWFyZ2luLWJvdHRvbTogMTgwcHg7IH1cbiAgICAgICAgI2RldmVsb3Blci1hZG9wdGlvbiAuY29udGVudDo6YWZ0ZXIge1xuICAgICAgICAgIHJpZ2h0OiBjYWxjKDUwJSAtIDU0MHB4KTtcbiAgICAgICAgICB3aWR0aDogNDcxcHg7XG4gICAgICAgICAgaGVpZ2h0OiAzNzFweDsgfSB9XG4gICAgQG1lZGlhIChtYXgtd2lkdGg6IDc2N3B4KSB7XG4gICAgICAjZGV2ZWxvcGVyLWFkb3B0aW9uIC5jb250ZW50OjphZnRlciB7XG4gICAgICAgIHJpZ2h0OiBjYWxjKDEwMCUgLSA5MjBweCk7IH0gfVxuICBAbWVkaWEgKG1pbi13aWR0aDogMTc5NHB4KSB7XG4gICAgI2RldmVsb3Blci1hZG9wdGlvbiAuY29udGVudDo6YWZ0ZXIge1xuICAgICAgcmlnaHQ6IDA7IH0gfVxuXG4jaGVscCAuY29udGVudCB7XG4gIHRleHQtYWxpZ246IGxlZnQ7IH1cblxuI2hlbHAgaDIsXG4jaGVscCBwIHtcbiAgbWFyZ2luLXJpZ2h0OiAxNDBweDtcbiAgbWFyZ2luLWxlZnQ6IDE0MHB4OyB9XG4gIEBtZWRpYSAobWF4LXdpZHRoOiA5OTFweCkge1xuICAgICNoZWxwIGgyLFxuICAgICNoZWxwIHAge1xuICAgICAgbWFyZ2luLXJpZ2h0OiAwO1xuICAgICAgbWFyZ2luLWxlZnQ6IDA7IH0gfVxuIl19 */\n"
  },
  {
    "path": "content/css/pages/strategy-session.css",
    "content": "#page-strategy-session .cta {\n  background-color: #243c54;\n  background-image: url(\"/img/strategy-session/strategy-session-hero.jpg\");\n  background-size: cover;\n  background-repeat: no-repeat;\n  background-position: center center; }\n\n#page-strategy-session .cta hgroup {\n  padding-top: 54px;\n  padding-bottom: 80px;\n  max-width: 510px; }\n  #page-strategy-session .cta hgroup h1 {\n    font-size: 48px;\n    letter-spacing: -0.03em; }\n  #page-strategy-session .cta hgroup p {\n    font-family: \"Eina\", \"Helvetica Neue\", Helvetica, sans-serif;\n    font-size: 22px;\n    line-height: 36px;\n    letter-spacing: -0.02em;\n    color: #F6F8FB;\n    opacity: 0.8; }\n  @media (max-width: 768px) {\n    #page-strategy-session .cta hgroup {\n      text-align: center;\n      margin: 0 auto;\n      padding-top: 46px;\n      padding-bottom: 50px; }\n      #page-strategy-session .cta hgroup h1 {\n        font-size: 40px; } }\n\n#page-strategy-session main {\n  overflow: visible; }\n\n#page-strategy-session .content-row {\n  display: -ms-flexbox;\n  display: flex; }\n  @media (max-width: 992px) {\n    #page-strategy-session .content-row {\n      -ms-flex-direction: column;\n          flex-direction: column;\n      max-width: 560px;\n      margin: 0 auto; } }\n\n#page-strategy-session .content,\n#page-strategy-session .signup-form {\n  -ms-flex: 0 0 50%;\n      flex: 0 0 50%; }\n  @media (max-width: 992px) {\n    #page-strategy-session .content,\n    #page-strategy-session .signup-form {\n      -ms-flex: 0 0 100%;\n          flex: 0 0 100%; } }\n\n#page-strategy-session .content {\n  padding-right: 100px;\n  margin-top: 80px; }\n  #page-strategy-session .content h2 {\n    font-weight: 600;\n    font-size: 26px;\n    line-height: 39px;\n    letter-spacing: -0.02em;\n    color: #1A232F; }\n  #page-strategy-session .content ul {\n    margin: 40px 0 0;\n    padding: 0;\n    max-width: 100% !important; }\n  @media (max-width: 992px) {\n    #page-strategy-session .content {\n      padding-right: 0px;\n      margin-top: 42px;\n      margin-bottom: 84px; } }\n\n#page-strategy-session .signup-form {\n  position: relative;\n  z-index: 100;\n  margin-top: -26px;\n  background: #FFFFFF;\n  box-shadow: 0px 2px 8px rgba(2, 8, 20, 0.1), 0px 8px 16px rgba(2, 8, 20, 0.08);\n  border-radius: 8px;\n  padding: 48px 56px 56px;\n  box-sizing: border-box; }\n  #page-strategy-session .signup-form h3 {\n    font-weight: 600;\n    font-size: 20px;\n    line-height: 26px;\n    letter-spacing: -0.02em;\n    color: #020814;\n    margin-top: 0;\n    margin-bottom: 16px; }\n  #page-strategy-session .signup-form .hs_submit input.hs-button {\n    width: 100%; }\n  @media (max-width: 992px) {\n    #page-strategy-session .signup-form {\n      padding: 32px 36px 36px; }\n      #page-strategy-session .signup-form fieldset.form-columns-2 .hs-form-field {\n        width: 100%;\n        float: none;\n        padding: 0; }\n        #page-strategy-session .signup-form fieldset.form-columns-2 .hs-form-field + .hs-form-field {\n          margin-top: 24px; }\n      #page-strategy-session .signup-form .inputs-list.multi-container li:nth-last-child(n+6):first-child,\n      #page-strategy-session .signup-form .inputs-list.multi-container li:nth-last-child(n+6):first-child ~ li {\n        width: 100%;\n        float: none;\n        padding-right: 0; }\n      #page-strategy-session .signup-form .inputs-list.multi-container li:nth-last-child(n+6):first-child ~ li:nth-child(even) {\n        padding-left: 0; } }\n  @media (max-width: 768px) {\n    #page-strategy-session .signup-form {\n      padding: 26px 24px 24px;\n      position: static;\n      z-index: 1; } }\n\n#page-strategy-session .testimonial {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-pack: justify;\n      justify-content: space-between;\n  border-bottom: 1px solid #E9EDF3;\n  font-family: \"Inter\", \"Inter UI\", Helvetica, Arial, sans-serif;\n  font-weight: 600;\n  letter-spacing: -0.01em;\n  margin-top: 64px; }\n  #page-strategy-session .testimonial__img, #page-strategy-session .testimonial__caption {\n    -ms-flex: 0 0 45%;\n        flex: 0 0 45%; }\n  #page-strategy-session .testimonial__img {\n    display: -ms-flexbox;\n    display: flex;\n    -ms-flex-direction: column;\n        flex-direction: column;\n    -ms-flex-pack: end;\n        justify-content: flex-end; }\n    #page-strategy-session .testimonial__img img {\n      width: 100%; }\n  #page-strategy-session .testimonial__caption {\n    position: relative;\n    padding-top: 16px; }\n    #page-strategy-session .testimonial__caption::before {\n      content: '';\n      display: block;\n      background-image: url(\"/img/strategy-session/quotes.svg\");\n      width: 32px;\n      height: 24px;\n      position: absolute;\n      left: -46px;\n      top: 20px; }\n  #page-strategy-session .testimonial__quote {\n    font-weight: 500;\n    font-size: 14px;\n    line-height: 20px;\n    color: #5B708B;\n    margin: 0 0 16px; }\n  #page-strategy-session .testimonial__name {\n    font-size: 14px;\n    line-height: 22px;\n    color: #1A232F;\n    margin: 0; }\n  #page-strategy-session .testimonial__title {\n    font-size: 10px;\n    line-height: 17px;\n    letter-spacing: 0.06em;\n    text-transform: uppercase;\n    color: #73849A;\n    margin: 0 0 16px; }\n  @media (max-width: 480px) {\n    #page-strategy-session .testimonial {\n      -ms-flex-direction: column;\n          flex-direction: column;\n      border-bottom: 0; }\n      #page-strategy-session .testimonial__img, #page-strategy-session .testimonial__caption {\n        -ms-flex: 0 0 100%;\n            flex: 0 0 100%; }\n      #page-strategy-session .testimonial__img {\n        -ms-flex-align: center;\n            align-items: center; }\n      #page-strategy-session .testimonial img {\n        max-width: 210px; }\n      #page-strategy-session .testimonial__caption {\n        border-top: 1px solid #E9EDF3;\n        padding-left: 46px; }\n        #page-strategy-session .testimonial__caption::before {\n          left: 0; } }\n\n.customer-callout {\n  background: linear-gradient(180deg, #F9FAFB 0%, #FFFFFF 100%);\n  margin-top: 120px;\n  margin-bottom: 140px;\n  padding-top: 140px; }\n  @media (max-width: 768px) {\n    .customer-callout {\n      margin-top: 80px;\n      margin-bottom: 80px;\n      padding-top: 68px; } }\n  .customer-callout hgroup {\n    text-align: center; }\n    .customer-callout hgroup h3 {\n      font-size: 34px;\n      line-height: 40px;\n      text-align: center;\n      letter-spacing: -0.02em;\n      color: #1A232F; }\n    .customer-callout hgroup p {\n      font-family: \"Eina\", \"Helvetica Neue\", Helvetica, sans-serif;\n      font-size: 20px;\n      line-height: 33px;\n      text-align: center;\n      letter-spacing: -0.02em;\n      color: #5B708B;\n      max-width: 860px;\n      margin-left: auto;\n      margin-right: auto; }\n  .customer-callout__logos {\n    display: -ms-flexbox;\n    display: flex;\n    margin: 26px auto 0;\n    padding: 0;\n    -ms-flex-pack: justify;\n        justify-content: space-between;\n    max-width: 780px;\n    width: 100%; }\n    .customer-callout__logos li {\n      background: url(\"/img/customer-logos.jpg\");\n      background-size: 428px 46px;\n      background-repeat: no-repeat;\n      display: block;\n      height: 46px; }\n    @media (max-width: 768px) {\n      .customer-callout__logos {\n        -ms-flex-pack: center;\n            justify-content: center;\n        -ms-flex-wrap: wrap;\n            flex-wrap: wrap;\n        max-width: 460px; }\n        .customer-callout__logos li {\n          margin: 20px; } }\n  .customer-callout .mastercard {\n    width: 58px; }\n  .customer-callout .nationwide {\n    background-position: -58px 0;\n    width: 33px; }\n  .customer-callout .uniqlo {\n    background-position: -91px 0;\n    width: 65px; }\n  .customer-callout .ibm {\n    background-position: -156px 0;\n    width: 64px; }\n  .customer-callout .ing {\n    background-position: -222px 0;\n    width: 103px; }\n  .customer-callout .sap {\n    background-position: -326px 0;\n    width: 56px; }\n  .customer-callout .nasa {\n    background-position: -380px 0;\n    width: 50px; }\n\n.resources {\n  padding-bottom: 120px; }\n  @media (max-width: 768px) {\n    .resources {\n      padding-bottom: 60px; } }\n  .resources .cards {\n    list-style-type: none;\n    margin: 0;\n    padding: 0;\n    display: -ms-flexbox;\n    display: flex;\n    margin-left: -24px;\n    margin-right: -24px; }\n  .resources hgroup {\n    display: -ms-flexbox;\n    display: flex;\n    -ms-flex-pack: justify;\n        justify-content: space-between;\n    -ms-flex-align: baseline;\n        align-items: baseline; }\n    .resources hgroup h3 {\n      font-weight: 600;\n      line-height: normal;\n      font-size: 28px;\n      letter-spacing: -0.02em;\n      color: #1A232F;\n      margin-bottom: 0; }\n    .resources hgroup h4 {\n      font-weight: 600;\n      font-size: 24px;\n      line-height: normal;\n      letter-spacing: -0.02em;\n      color: #1A232F; }\n    .resources hgroup h5 {\n      font-weight: 700;\n      line-height: 1;\n      font-size: 14px;\n      letter-spacing: 0.08em;\n      color: #3880FF;\n      text-transform: uppercase; }\n    .resources hgroup ion-icon {\n      -webkit-transform: translateY(2px);\n              transform: translateY(2px); }\n  .resources .cards li {\n    display: block;\n    -ms-flex: 0 0 33.33%;\n        flex: 0 0 33.33%;\n    padding: 24px; }\n    .resources .cards li a {\n      display: block;\n      width: 100%; }\n    .resources .cards li .img-wrapper {\n      overflow: hidden;\n      border-radius: 6px; }\n    .resources .cards li img {\n      width: 100%; }\n    .resources .cards li h6 {\n      line-height: 23px;\n      font-size: 12px;\n      letter-spacing: 0.12em;\n      text-transform: uppercase;\n      color: #B2BECD;\n      margin-bottom: 0;\n      margin-top: 16px; }\n    .resources .cards li h4 {\n      font-size: 20px;\n      margin-top: 10px;\n      color: #1A232F;\n      font-weight: 600; }\n    .resources .cards li p {\n      color: #5B708B;\n      line-height: 22px;\n      font-size: 14px;\n      letter-spacing: -0.02em; }\n  @media (max-width: 992px) {\n    .resources .cards {\n      margin-left: -12px;\n      margin-right: -12px; }\n    .resources .cards li {\n      padding: 12px; } }\n  @media (max-width: 768px) {\n    .resources .cards {\n      -ms-flex-wrap: wrap;\n          flex-wrap: wrap; }\n    .resources .cards li {\n      -ms-flex: 0 0 50%;\n          flex: 0 0 50%; } }\n  @media (max-width: 480px) {\n    .resources .cards li {\n      -ms-flex: 0 0 100%;\n          flex: 0 0 100%; }\n    .resources h5 {\n      display: none; } }\n\n/*# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInN0cmF0ZWd5LXNlc3Npb24uY3NzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0VBQ0UsMEJBQTBCO0VBQzFCLHlFQUF5RTtFQUN6RSx1QkFBdUI7RUFDdkIsNkJBQTZCO0VBQzdCLG1DQUFtQyxFQUFFOztBQUV2QztFQUNFLGtCQUFrQjtFQUNsQixxQkFBcUI7RUFDckIsaUJBQWlCLEVBQUU7RUFDbkI7SUFDRSxnQkFBZ0I7SUFDaEIsd0JBQXdCLEVBQUU7RUFDNUI7SUFDRSw2REFBNkQ7SUFDN0QsZ0JBQWdCO0lBQ2hCLGtCQUFrQjtJQUNsQix3QkFBd0I7SUFDeEIsZUFBZTtJQUNmLGFBQWEsRUFBRTtFQUNqQjtJQUNFO01BQ0UsbUJBQW1CO01BQ25CLGVBQWU7TUFDZixrQkFBa0I7TUFDbEIscUJBQXFCLEVBQUU7TUFDdkI7UUFDRSxnQkFBZ0IsRUFBRSxFQUFFOztBQUU1QjtFQUNFLGtCQUFrQixFQUFFOztBQUV0QjtFQUNFLHFCQUFjO0VBQWQsY0FBYyxFQUFFO0VBQ2hCO0lBQ0U7TUFDRSwyQkFBdUI7VUFBdkIsdUJBQXVCO01BQ3ZCLGlCQUFpQjtNQUNqQixlQUFlLEVBQUUsRUFBRTs7QUFFekI7O0VBRUUsa0JBQWM7TUFBZCxjQUFjLEVBQUU7RUFDaEI7SUFDRTs7TUFFRSxtQkFBZTtVQUFmLGVBQWUsRUFBRSxFQUFFOztBQUV6QjtFQUNFLHFCQUFxQjtFQUNyQixpQkFBaUIsRUFBRTtFQUNuQjtJQUNFLGlCQUFpQjtJQUNqQixnQkFBZ0I7SUFDaEIsa0JBQWtCO0lBQ2xCLHdCQUF3QjtJQUN4QixlQUFlLEVBQUU7RUFDbkI7SUFDRSxpQkFBaUI7SUFDakIsV0FBVztJQUNYLDJCQUEyQixFQUFFO0VBQy9CO0lBQ0U7TUFDRSxtQkFBbUI7TUFDbkIsaUJBQWlCO01BQ2pCLG9CQUFvQixFQUFFLEVBQUU7O0FBRTlCO0VBQ0UsbUJBQW1CO0VBQ25CLGFBQWE7RUFDYixrQkFBa0I7RUFDbEIsb0JBQW9CO0VBQ3BCLCtFQUErRTtFQUMvRSxtQkFBbUI7RUFDbkIsd0JBQXdCO0VBQ3hCLHVCQUF1QixFQUFFO0VBQ3pCO0lBQ0UsaUJBQWlCO0lBQ2pCLGdCQUFnQjtJQUNoQixrQkFBa0I7SUFDbEIsd0JBQXdCO0lBQ3hCLGVBQWU7SUFDZixjQUFjO0lBQ2Qsb0JBQW9CLEVBQUU7RUFDeEI7SUFDRSxZQUFZLEVBQUU7RUFDaEI7SUFDRTtNQUNFLHdCQUF3QixFQUFFO01BQzFCO1FBQ0UsWUFBWTtRQUNaLFlBQVk7UUFDWixXQUFXLEVBQUU7UUFDYjtVQUNFLGlCQUFpQixFQUFFO01BQ3ZCOztRQUVFLFlBQVk7UUFDWixZQUFZO1FBQ1osaUJBQWlCLEVBQUU7TUFDckI7UUFDRSxnQkFBZ0IsRUFBRSxFQUFFO0VBQzFCO0lBQ0U7TUFDRSx3QkFBd0I7TUFDeEIsaUJBQWlCO01BQ2pCLFdBQVcsRUFBRSxFQUFFOztBQUVyQjtFQUNFLHFCQUFjO0VBQWQsY0FBYztFQUNkLHVCQUErQjtNQUEvQiwrQkFBK0I7RUFDL0IsaUNBQWlDO0VBQ2pDLCtEQUErRDtFQUMvRCxpQkFBaUI7RUFDakIsd0JBQXdCO0VBQ3hCLGlCQUFpQixFQUFFO0VBQ25CO0lBQ0Usa0JBQWM7UUFBZCxjQUFjLEVBQUU7RUFDbEI7SUFDRSxxQkFBYztJQUFkLGNBQWM7SUFDZCwyQkFBdUI7UUFBdkIsdUJBQXVCO0lBQ3ZCLG1CQUEwQjtRQUExQiwwQkFBMEIsRUFBRTtJQUM1QjtNQUNFLFlBQVksRUFBRTtFQUNsQjtJQUNFLG1CQUFtQjtJQUNuQixrQkFBa0IsRUFBRTtJQUNwQjtNQUNFLFlBQVk7TUFDWixlQUFlO01BQ2YsMERBQTBEO01BQzFELFlBQVk7TUFDWixhQUFhO01BQ2IsbUJBQW1CO01BQ25CLFlBQVk7TUFDWixVQUFVLEVBQUU7RUFDaEI7SUFDRSxpQkFBaUI7SUFDakIsZ0JBQWdCO0lBQ2hCLGtCQUFrQjtJQUNsQixlQUFlO0lBQ2YsaUJBQWlCLEVBQUU7RUFDckI7SUFDRSxnQkFBZ0I7SUFDaEIsa0JBQWtCO0lBQ2xCLGVBQWU7SUFDZixVQUFVLEVBQUU7RUFDZDtJQUNFLGdCQUFnQjtJQUNoQixrQkFBa0I7SUFDbEIsdUJBQXVCO0lBQ3ZCLDBCQUEwQjtJQUMxQixlQUFlO0lBQ2YsaUJBQWlCLEVBQUU7RUFDckI7SUFDRTtNQUNFLDJCQUF1QjtVQUF2Qix1QkFBdUI7TUFDdkIsaUJBQWlCLEVBQUU7TUFDbkI7UUFDRSxtQkFBZTtZQUFmLGVBQWUsRUFBRTtNQUNuQjtRQUNFLHVCQUFvQjtZQUFwQixvQkFBb0IsRUFBRTtNQUN4QjtRQUNFLGlCQUFpQixFQUFFO01BQ3JCO1FBQ0UsOEJBQThCO1FBQzlCLG1CQUFtQixFQUFFO1FBQ3JCO1VBQ0UsUUFBUSxFQUFFLEVBQUU7O0FBRXRCO0VBQ0UsOERBQThEO0VBQzlELGtCQUFrQjtFQUNsQixxQkFBcUI7RUFDckIsbUJBQW1CLEVBQUU7RUFDckI7SUFDRTtNQUNFLGlCQUFpQjtNQUNqQixvQkFBb0I7TUFDcEIsa0JBQWtCLEVBQUUsRUFBRTtFQUMxQjtJQUNFLG1CQUFtQixFQUFFO0lBQ3JCO01BQ0UsZ0JBQWdCO01BQ2hCLGtCQUFrQjtNQUNsQixtQkFBbUI7TUFDbkIsd0JBQXdCO01BQ3hCLGVBQWUsRUFBRTtJQUNuQjtNQUNFLDZEQUE2RDtNQUM3RCxnQkFBZ0I7TUFDaEIsa0JBQWtCO01BQ2xCLG1CQUFtQjtNQUNuQix3QkFBd0I7TUFDeEIsZUFBZTtNQUNmLGlCQUFpQjtNQUNqQixrQkFBa0I7TUFDbEIsbUJBQW1CLEVBQUU7RUFDekI7SUFDRSxxQkFBYztJQUFkLGNBQWM7SUFDZCxvQkFBb0I7SUFDcEIsV0FBVztJQUNYLHVCQUErQjtRQUEvQiwrQkFBK0I7SUFDL0IsaUJBQWlCO0lBQ2pCLFlBQVksRUFBRTtJQUNkO01BQ0UsMkNBQTJDO01BQzNDLDRCQUE0QjtNQUM1Qiw2QkFBNkI7TUFDN0IsZUFBZTtNQUNmLGFBQWEsRUFBRTtJQUNqQjtNQUNFO1FBQ0Usc0JBQXdCO1lBQXhCLHdCQUF3QjtRQUN4QixvQkFBZ0I7WUFBaEIsZ0JBQWdCO1FBQ2hCLGlCQUFpQixFQUFFO1FBQ25CO1VBQ0UsYUFBYSxFQUFFLEVBQUU7RUFDekI7SUFDRSxZQUFZLEVBQUU7RUFDaEI7SUFDRSw2QkFBNkI7SUFDN0IsWUFBWSxFQUFFO0VBQ2hCO0lBQ0UsNkJBQTZCO0lBQzdCLFlBQVksRUFBRTtFQUNoQjtJQUNFLDhCQUE4QjtJQUM5QixZQUFZLEVBQUU7RUFDaEI7SUFDRSw4QkFBOEI7SUFDOUIsYUFBYSxFQUFFO0VBQ2pCO0lBQ0UsOEJBQThCO0lBQzlCLFlBQVksRUFBRTtFQUNoQjtJQUNFLDhCQUE4QjtJQUM5QixZQUFZLEVBQUU7O0FBRWxCO0VBQ0Usc0JBQXNCLEVBQUU7RUFDeEI7SUFDRTtNQUNFLHFCQUFxQixFQUFFLEVBQUU7RUFDN0I7SUFDRSxzQkFBc0I7SUFDdEIsVUFBVTtJQUNWLFdBQVc7SUFDWCxxQkFBYztJQUFkLGNBQWM7SUFDZCxtQkFBbUI7SUFDbkIsb0JBQW9CLEVBQUU7RUFDeEI7SUFDRSxxQkFBYztJQUFkLGNBQWM7SUFDZCx1QkFBK0I7UUFBL0IsK0JBQStCO0lBQy9CLHlCQUFzQjtRQUF0QixzQkFBc0IsRUFBRTtJQUN4QjtNQUNFLGlCQUFpQjtNQUNqQixvQkFBb0I7TUFDcEIsZ0JBQWdCO01BQ2hCLHdCQUF3QjtNQUN4QixlQUFlO01BQ2YsaUJBQWlCLEVBQUU7SUFDckI7TUFDRSxpQkFBaUI7TUFDakIsZ0JBQWdCO01BQ2hCLG9CQUFvQjtNQUNwQix3QkFBd0I7TUFDeEIsZUFBZSxFQUFFO0lBQ25CO01BQ0UsaUJBQWlCO01BQ2pCLGVBQWU7TUFDZixnQkFBZ0I7TUFDaEIsdUJBQXVCO01BQ3ZCLGVBQWU7TUFDZiwwQkFBMEIsRUFBRTtJQUM5QjtNQUNFLG1DQUEyQjtjQUEzQiwyQkFBMkIsRUFBRTtFQUNqQztJQUNFLGVBQWU7SUFDZixxQkFBaUI7UUFBakIsaUJBQWlCO0lBQ2pCLGNBQWMsRUFBRTtJQUNoQjtNQUNFLGVBQWU7TUFDZixZQUFZLEVBQUU7SUFDaEI7TUFDRSxpQkFBaUI7TUFDakIsbUJBQW1CLEVBQUU7SUFDdkI7TUFDRSxZQUFZLEVBQUU7SUFDaEI7TUFDRSxrQkFBa0I7TUFDbEIsZ0JBQWdCO01BQ2hCLHVCQUF1QjtNQUN2QiwwQkFBMEI7TUFDMUIsZUFBZTtNQUNmLGlCQUFpQjtNQUNqQixpQkFBaUIsRUFBRTtJQUNyQjtNQUNFLGdCQUFnQjtNQUNoQixpQkFBaUI7TUFDakIsZUFBZTtNQUNmLGlCQUFpQixFQUFFO0lBQ3JCO01BQ0UsZUFBZTtNQUNmLGtCQUFrQjtNQUNsQixnQkFBZ0I7TUFDaEIsd0JBQXdCLEVBQUU7RUFDOUI7SUFDRTtNQUNFLG1CQUFtQjtNQUNuQixvQkFBb0IsRUFBRTtJQUN4QjtNQUNFLGNBQWMsRUFBRSxFQUFFO0VBQ3RCO0lBQ0U7TUFDRSxvQkFBZ0I7VUFBaEIsZ0JBQWdCLEVBQUU7SUFDcEI7TUFDRSxrQkFBYztVQUFkLGNBQWMsRUFBRSxFQUFFO0VBQ3RCO0lBQ0U7TUFDRSxtQkFBZTtVQUFmLGVBQWUsRUFBRTtJQUNuQjtNQUNFLGNBQWMsRUFBRSxFQUFFIiwiZmlsZSI6InBhZ2VzL3N0cmF0ZWd5LXNlc3Npb24uY3NzIiwic291cmNlc0NvbnRlbnQiOlsiI3BhZ2Utc3RyYXRlZ3ktc2Vzc2lvbiAuY3RhIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogIzI0M2M1NDtcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFwiL2ltZy9zdHJhdGVneS1zZXNzaW9uL3N0cmF0ZWd5LXNlc3Npb24taGVyby5qcGdcIik7XG4gIGJhY2tncm91bmQtc2l6ZTogY292ZXI7XG4gIGJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7XG4gIGJhY2tncm91bmQtcG9zaXRpb246IGNlbnRlciBjZW50ZXI7IH1cblxuI3BhZ2Utc3RyYXRlZ3ktc2Vzc2lvbiAuY3RhIGhncm91cCB7XG4gIHBhZGRpbmctdG9wOiA1NHB4O1xuICBwYWRkaW5nLWJvdHRvbTogODBweDtcbiAgbWF4LXdpZHRoOiA1MTBweDsgfVxuICAjcGFnZS1zdHJhdGVneS1zZXNzaW9uIC5jdGEgaGdyb3VwIGgxIHtcbiAgICBmb250LXNpemU6IDQ4cHg7XG4gICAgbGV0dGVyLXNwYWNpbmc6IC0wLjAzZW07IH1cbiAgI3BhZ2Utc3RyYXRlZ3ktc2Vzc2lvbiAuY3RhIGhncm91cCBwIHtcbiAgICBmb250LWZhbWlseTogXCJFaW5hXCIsIFwiSGVsdmV0aWNhIE5ldWVcIiwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmO1xuICAgIGZvbnQtc2l6ZTogMjJweDtcbiAgICBsaW5lLWhlaWdodDogMzZweDtcbiAgICBsZXR0ZXItc3BhY2luZzogLTAuMDJlbTtcbiAgICBjb2xvcjogI0Y2RjhGQjtcbiAgICBvcGFjaXR5OiAwLjg7IH1cbiAgQG1lZGlhIChtYXgtd2lkdGg6IDc2OHB4KSB7XG4gICAgI3BhZ2Utc3RyYXRlZ3ktc2Vzc2lvbiAuY3RhIGhncm91cCB7XG4gICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgICBtYXJnaW46IDAgYXV0bztcbiAgICAgIHBhZGRpbmctdG9wOiA0NnB4O1xuICAgICAgcGFkZGluZy1ib3R0b206IDUwcHg7IH1cbiAgICAgICNwYWdlLXN0cmF0ZWd5LXNlc3Npb24gLmN0YSBoZ3JvdXAgaDEge1xuICAgICAgICBmb250LXNpemU6IDQwcHg7IH0gfVxuXG4jcGFnZS1zdHJhdGVneS1zZXNzaW9uIG1haW4ge1xuICBvdmVyZmxvdzogdmlzaWJsZTsgfVxuXG4jcGFnZS1zdHJhdGVneS1zZXNzaW9uIC5jb250ZW50LXJvdyB7XG4gIGRpc3BsYXk6IGZsZXg7IH1cbiAgQG1lZGlhIChtYXgtd2lkdGg6IDk5MnB4KSB7XG4gICAgI3BhZ2Utc3RyYXRlZ3ktc2Vzc2lvbiAuY29udGVudC1yb3cge1xuICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICAgIG1heC13aWR0aDogNTYwcHg7XG4gICAgICBtYXJnaW46IDAgYXV0bzsgfSB9XG5cbiNwYWdlLXN0cmF0ZWd5LXNlc3Npb24gLmNvbnRlbnQsXG4jcGFnZS1zdHJhdGVneS1zZXNzaW9uIC5zaWdudXAtZm9ybSB7XG4gIGZsZXg6IDAgMCA1MCU7IH1cbiAgQG1lZGlhIChtYXgtd2lkdGg6IDk5MnB4KSB7XG4gICAgI3BhZ2Utc3RyYXRlZ3ktc2Vzc2lvbiAuY29udGVudCxcbiAgICAjcGFnZS1zdHJhdGVneS1zZXNzaW9uIC5zaWdudXAtZm9ybSB7XG4gICAgICBmbGV4OiAwIDAgMTAwJTsgfSB9XG5cbiNwYWdlLXN0cmF0ZWd5LXNlc3Npb24gLmNvbnRlbnQge1xuICBwYWRkaW5nLXJpZ2h0OiAxMDBweDtcbiAgbWFyZ2luLXRvcDogODBweDsgfVxuICAjcGFnZS1zdHJhdGVneS1zZXNzaW9uIC5jb250ZW50IGgyIHtcbiAgICBmb250LXdlaWdodDogNjAwO1xuICAgIGZvbnQtc2l6ZTogMjZweDtcbiAgICBsaW5lLWhlaWdodDogMzlweDtcbiAgICBsZXR0ZXItc3BhY2luZzogLTAuMDJlbTtcbiAgICBjb2xvcjogIzFBMjMyRjsgfVxuICAjcGFnZS1zdHJhdGVneS1zZXNzaW9uIC5jb250ZW50IHVsIHtcbiAgICBtYXJnaW46IDQwcHggMCAwO1xuICAgIHBhZGRpbmc6IDA7XG4gICAgbWF4LXdpZHRoOiAxMDAlICFpbXBvcnRhbnQ7IH1cbiAgQG1lZGlhIChtYXgtd2lkdGg6IDk5MnB4KSB7XG4gICAgI3BhZ2Utc3RyYXRlZ3ktc2Vzc2lvbiAuY29udGVudCB7XG4gICAgICBwYWRkaW5nLXJpZ2h0OiAwcHg7XG4gICAgICBtYXJnaW4tdG9wOiA0MnB4O1xuICAgICAgbWFyZ2luLWJvdHRvbTogODRweDsgfSB9XG5cbiNwYWdlLXN0cmF0ZWd5LXNlc3Npb24gLnNpZ251cC1mb3JtIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICB6LWluZGV4OiAxMDA7XG4gIG1hcmdpbi10b3A6IC0yNnB4O1xuICBiYWNrZ3JvdW5kOiAjRkZGRkZGO1xuICBib3gtc2hhZG93OiAwcHggMnB4IDhweCByZ2JhKDIsIDgsIDIwLCAwLjEpLCAwcHggOHB4IDE2cHggcmdiYSgyLCA4LCAyMCwgMC4wOCk7XG4gIGJvcmRlci1yYWRpdXM6IDhweDtcbiAgcGFkZGluZzogNDhweCA1NnB4IDU2cHg7XG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7IH1cbiAgI3BhZ2Utc3RyYXRlZ3ktc2Vzc2lvbiAuc2lnbnVwLWZvcm0gaDMge1xuICAgIGZvbnQtd2VpZ2h0OiA2MDA7XG4gICAgZm9udC1zaXplOiAyMHB4O1xuICAgIGxpbmUtaGVpZ2h0OiAyNnB4O1xuICAgIGxldHRlci1zcGFjaW5nOiAtMC4wMmVtO1xuICAgIGNvbG9yOiAjMDIwODE0O1xuICAgIG1hcmdpbi10b3A6IDA7XG4gICAgbWFyZ2luLWJvdHRvbTogMTZweDsgfVxuICAjcGFnZS1zdHJhdGVneS1zZXNzaW9uIC5zaWdudXAtZm9ybSAuaHNfc3VibWl0IGlucHV0LmhzLWJ1dHRvbiB7XG4gICAgd2lkdGg6IDEwMCU7IH1cbiAgQG1lZGlhIChtYXgtd2lkdGg6IDk5MnB4KSB7XG4gICAgI3BhZ2Utc3RyYXRlZ3ktc2Vzc2lvbiAuc2lnbnVwLWZvcm0ge1xuICAgICAgcGFkZGluZzogMzJweCAzNnB4IDM2cHg7IH1cbiAgICAgICNwYWdlLXN0cmF0ZWd5LXNlc3Npb24gLnNpZ251cC1mb3JtIGZpZWxkc2V0LmZvcm0tY29sdW1ucy0yIC5ocy1mb3JtLWZpZWxkIHtcbiAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgIGZsb2F0OiBub25lO1xuICAgICAgICBwYWRkaW5nOiAwOyB9XG4gICAgICAgICNwYWdlLXN0cmF0ZWd5LXNlc3Npb24gLnNpZ251cC1mb3JtIGZpZWxkc2V0LmZvcm0tY29sdW1ucy0yIC5ocy1mb3JtLWZpZWxkICsgLmhzLWZvcm0tZmllbGQge1xuICAgICAgICAgIG1hcmdpbi10b3A6IDI0cHg7IH1cbiAgICAgICNwYWdlLXN0cmF0ZWd5LXNlc3Npb24gLnNpZ251cC1mb3JtIC5pbnB1dHMtbGlzdC5tdWx0aS1jb250YWluZXIgbGk6bnRoLWxhc3QtY2hpbGQobis2KTpmaXJzdC1jaGlsZCxcbiAgICAgICNwYWdlLXN0cmF0ZWd5LXNlc3Npb24gLnNpZ251cC1mb3JtIC5pbnB1dHMtbGlzdC5tdWx0aS1jb250YWluZXIgbGk6bnRoLWxhc3QtY2hpbGQobis2KTpmaXJzdC1jaGlsZCB+IGxpIHtcbiAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgIGZsb2F0OiBub25lO1xuICAgICAgICBwYWRkaW5nLXJpZ2h0OiAwOyB9XG4gICAgICAjcGFnZS1zdHJhdGVneS1zZXNzaW9uIC5zaWdudXAtZm9ybSAuaW5wdXRzLWxpc3QubXVsdGktY29udGFpbmVyIGxpOm50aC1sYXN0LWNoaWxkKG4rNik6Zmlyc3QtY2hpbGQgfiBsaTpudGgtY2hpbGQoZXZlbikge1xuICAgICAgICBwYWRkaW5nLWxlZnQ6IDA7IH0gfVxuICBAbWVkaWEgKG1heC13aWR0aDogNzY4cHgpIHtcbiAgICAjcGFnZS1zdHJhdGVneS1zZXNzaW9uIC5zaWdudXAtZm9ybSB7XG4gICAgICBwYWRkaW5nOiAyNnB4IDI0cHggMjRweDtcbiAgICAgIHBvc2l0aW9uOiBzdGF0aWM7XG4gICAgICB6LWluZGV4OiAxOyB9IH1cblxuI3BhZ2Utc3RyYXRlZ3ktc2Vzc2lvbiAudGVzdGltb25pYWwge1xuICBkaXNwbGF5OiBmbGV4O1xuICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG4gIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjRTlFREYzO1xuICBmb250LWZhbWlseTogXCJJbnRlclwiLCBcIkludGVyIFVJXCIsIEhlbHZldGljYSwgQXJpYWwsIHNhbnMtc2VyaWY7XG4gIGZvbnQtd2VpZ2h0OiA2MDA7XG4gIGxldHRlci1zcGFjaW5nOiAtMC4wMWVtO1xuICBtYXJnaW4tdG9wOiA2NHB4OyB9XG4gICNwYWdlLXN0cmF0ZWd5LXNlc3Npb24gLnRlc3RpbW9uaWFsX19pbWcsICNwYWdlLXN0cmF0ZWd5LXNlc3Npb24gLnRlc3RpbW9uaWFsX19jYXB0aW9uIHtcbiAgICBmbGV4OiAwIDAgNDUlOyB9XG4gICNwYWdlLXN0cmF0ZWd5LXNlc3Npb24gLnRlc3RpbW9uaWFsX19pbWcge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtZW5kOyB9XG4gICAgI3BhZ2Utc3RyYXRlZ3ktc2Vzc2lvbiAudGVzdGltb25pYWxfX2ltZyBpbWcge1xuICAgICAgd2lkdGg6IDEwMCU7IH1cbiAgI3BhZ2Utc3RyYXRlZ3ktc2Vzc2lvbiAudGVzdGltb25pYWxfX2NhcHRpb24ge1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICBwYWRkaW5nLXRvcDogMTZweDsgfVxuICAgICNwYWdlLXN0cmF0ZWd5LXNlc3Npb24gLnRlc3RpbW9uaWFsX19jYXB0aW9uOjpiZWZvcmUge1xuICAgICAgY29udGVudDogJyc7XG4gICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgIGJhY2tncm91bmQtaW1hZ2U6IHVybChcIi9pbWcvc3RyYXRlZ3ktc2Vzc2lvbi9xdW90ZXMuc3ZnXCIpO1xuICAgICAgd2lkdGg6IDMycHg7XG4gICAgICBoZWlnaHQ6IDI0cHg7XG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICBsZWZ0OiAtNDZweDtcbiAgICAgIHRvcDogMjBweDsgfVxuICAjcGFnZS1zdHJhdGVneS1zZXNzaW9uIC50ZXN0aW1vbmlhbF9fcXVvdGUge1xuICAgIGZvbnQtd2VpZ2h0OiA1MDA7XG4gICAgZm9udC1zaXplOiAxNHB4O1xuICAgIGxpbmUtaGVpZ2h0OiAyMHB4O1xuICAgIGNvbG9yOiAjNUI3MDhCO1xuICAgIG1hcmdpbjogMCAwIDE2cHg7IH1cbiAgI3BhZ2Utc3RyYXRlZ3ktc2Vzc2lvbiAudGVzdGltb25pYWxfX25hbWUge1xuICAgIGZvbnQtc2l6ZTogMTRweDtcbiAgICBsaW5lLWhlaWdodDogMjJweDtcbiAgICBjb2xvcjogIzFBMjMyRjtcbiAgICBtYXJnaW46IDA7IH1cbiAgI3BhZ2Utc3RyYXRlZ3ktc2Vzc2lvbiAudGVzdGltb25pYWxfX3RpdGxlIHtcbiAgICBmb250LXNpemU6IDEwcHg7XG4gICAgbGluZS1oZWlnaHQ6IDE3cHg7XG4gICAgbGV0dGVyLXNwYWNpbmc6IDAuMDZlbTtcbiAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xuICAgIGNvbG9yOiAjNzM4NDlBO1xuICAgIG1hcmdpbjogMCAwIDE2cHg7IH1cbiAgQG1lZGlhIChtYXgtd2lkdGg6IDQ4MHB4KSB7XG4gICAgI3BhZ2Utc3RyYXRlZ3ktc2Vzc2lvbiAudGVzdGltb25pYWwge1xuICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICAgIGJvcmRlci1ib3R0b206IDA7IH1cbiAgICAgICNwYWdlLXN0cmF0ZWd5LXNlc3Npb24gLnRlc3RpbW9uaWFsX19pbWcsICNwYWdlLXN0cmF0ZWd5LXNlc3Npb24gLnRlc3RpbW9uaWFsX19jYXB0aW9uIHtcbiAgICAgICAgZmxleDogMCAwIDEwMCU7IH1cbiAgICAgICNwYWdlLXN0cmF0ZWd5LXNlc3Npb24gLnRlc3RpbW9uaWFsX19pbWcge1xuICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOyB9XG4gICAgICAjcGFnZS1zdHJhdGVneS1zZXNzaW9uIC50ZXN0aW1vbmlhbCBpbWcge1xuICAgICAgICBtYXgtd2lkdGg6IDIxMHB4OyB9XG4gICAgICAjcGFnZS1zdHJhdGVneS1zZXNzaW9uIC50ZXN0aW1vbmlhbF9fY2FwdGlvbiB7XG4gICAgICAgIGJvcmRlci10b3A6IDFweCBzb2xpZCAjRTlFREYzO1xuICAgICAgICBwYWRkaW5nLWxlZnQ6IDQ2cHg7IH1cbiAgICAgICAgI3BhZ2Utc3RyYXRlZ3ktc2Vzc2lvbiAudGVzdGltb25pYWxfX2NhcHRpb246OmJlZm9yZSB7XG4gICAgICAgICAgbGVmdDogMDsgfSB9XG5cbi5jdXN0b21lci1jYWxsb3V0IHtcbiAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KDE4MGRlZywgI0Y5RkFGQiAwJSwgI0ZGRkZGRiAxMDAlKTtcbiAgbWFyZ2luLXRvcDogMTIwcHg7XG4gIG1hcmdpbi1ib3R0b206IDE0MHB4O1xuICBwYWRkaW5nLXRvcDogMTQwcHg7IH1cbiAgQG1lZGlhIChtYXgtd2lkdGg6IDc2OHB4KSB7XG4gICAgLmN1c3RvbWVyLWNhbGxvdXQge1xuICAgICAgbWFyZ2luLXRvcDogODBweDtcbiAgICAgIG1hcmdpbi1ib3R0b206IDgwcHg7XG4gICAgICBwYWRkaW5nLXRvcDogNjhweDsgfSB9XG4gIC5jdXN0b21lci1jYWxsb3V0IGhncm91cCB7XG4gICAgdGV4dC1hbGlnbjogY2VudGVyOyB9XG4gICAgLmN1c3RvbWVyLWNhbGxvdXQgaGdyb3VwIGgzIHtcbiAgICAgIGZvbnQtc2l6ZTogMzRweDtcbiAgICAgIGxpbmUtaGVpZ2h0OiA0MHB4O1xuICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgICAgbGV0dGVyLXNwYWNpbmc6IC0wLjAyZW07XG4gICAgICBjb2xvcjogIzFBMjMyRjsgfVxuICAgIC5jdXN0b21lci1jYWxsb3V0IGhncm91cCBwIHtcbiAgICAgIGZvbnQtZmFtaWx5OiBcIkVpbmFcIiwgXCJIZWx2ZXRpY2EgTmV1ZVwiLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7XG4gICAgICBmb250LXNpemU6IDIwcHg7XG4gICAgICBsaW5lLWhlaWdodDogMzNweDtcbiAgICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICAgIGxldHRlci1zcGFjaW5nOiAtMC4wMmVtO1xuICAgICAgY29sb3I6ICM1QjcwOEI7XG4gICAgICBtYXgtd2lkdGg6IDg2MHB4O1xuICAgICAgbWFyZ2luLWxlZnQ6IGF1dG87XG4gICAgICBtYXJnaW4tcmlnaHQ6IGF1dG87IH1cbiAgLmN1c3RvbWVyLWNhbGxvdXRfX2xvZ29zIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIG1hcmdpbjogMjZweCBhdXRvIDA7XG4gICAgcGFkZGluZzogMDtcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG4gICAgbWF4LXdpZHRoOiA3ODBweDtcbiAgICB3aWR0aDogMTAwJTsgfVxuICAgIC5jdXN0b21lci1jYWxsb3V0X19sb2dvcyBsaSB7XG4gICAgICBiYWNrZ3JvdW5kOiB1cmwoXCIvaW1nL2N1c3RvbWVyLWxvZ29zLmpwZ1wiKTtcbiAgICAgIGJhY2tncm91bmQtc2l6ZTogNDI4cHggNDZweDtcbiAgICAgIGJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7XG4gICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgIGhlaWdodDogNDZweDsgfVxuICAgIEBtZWRpYSAobWF4LXdpZHRoOiA3NjhweCkge1xuICAgICAgLmN1c3RvbWVyLWNhbGxvdXRfX2xvZ29zIHtcbiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gICAgICAgIGZsZXgtd3JhcDogd3JhcDtcbiAgICAgICAgbWF4LXdpZHRoOiA0NjBweDsgfVxuICAgICAgICAuY3VzdG9tZXItY2FsbG91dF9fbG9nb3MgbGkge1xuICAgICAgICAgIG1hcmdpbjogMjBweDsgfSB9XG4gIC5jdXN0b21lci1jYWxsb3V0IC5tYXN0ZXJjYXJkIHtcbiAgICB3aWR0aDogNThweDsgfVxuICAuY3VzdG9tZXItY2FsbG91dCAubmF0aW9ud2lkZSB7XG4gICAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTU4cHggMDtcbiAgICB3aWR0aDogMzNweDsgfVxuICAuY3VzdG9tZXItY2FsbG91dCAudW5pcWxvIHtcbiAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtOTFweCAwO1xuICAgIHdpZHRoOiA2NXB4OyB9XG4gIC5jdXN0b21lci1jYWxsb3V0IC5pYm0ge1xuICAgIGJhY2tncm91bmQtcG9zaXRpb246IC0xNTZweCAwO1xuICAgIHdpZHRoOiA2NHB4OyB9XG4gIC5jdXN0b21lci1jYWxsb3V0IC5pbmcge1xuICAgIGJhY2tncm91bmQtcG9zaXRpb246IC0yMjJweCAwO1xuICAgIHdpZHRoOiAxMDNweDsgfVxuICAuY3VzdG9tZXItY2FsbG91dCAuc2FwIHtcbiAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMzI2cHggMDtcbiAgICB3aWR0aDogNTZweDsgfVxuICAuY3VzdG9tZXItY2FsbG91dCAubmFzYSB7XG4gICAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTM4MHB4IDA7XG4gICAgd2lkdGg6IDUwcHg7IH1cblxuLnJlc291cmNlcyB7XG4gIHBhZGRpbmctYm90dG9tOiAxMjBweDsgfVxuICBAbWVkaWEgKG1heC13aWR0aDogNzY4cHgpIHtcbiAgICAucmVzb3VyY2VzIHtcbiAgICAgIHBhZGRpbmctYm90dG9tOiA2MHB4OyB9IH1cbiAgLnJlc291cmNlcyAuY2FyZHMge1xuICAgIGxpc3Qtc3R5bGUtdHlwZTogbm9uZTtcbiAgICBtYXJnaW46IDA7XG4gICAgcGFkZGluZzogMDtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIG1hcmdpbi1sZWZ0OiAtMjRweDtcbiAgICBtYXJnaW4tcmlnaHQ6IC0yNHB4OyB9XG4gIC5yZXNvdXJjZXMgaGdyb3VwIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcbiAgICBhbGlnbi1pdGVtczogYmFzZWxpbmU7IH1cbiAgICAucmVzb3VyY2VzIGhncm91cCBoMyB7XG4gICAgICBmb250LXdlaWdodDogNjAwO1xuICAgICAgbGluZS1oZWlnaHQ6IG5vcm1hbDtcbiAgICAgIGZvbnQtc2l6ZTogMjhweDtcbiAgICAgIGxldHRlci1zcGFjaW5nOiAtMC4wMmVtO1xuICAgICAgY29sb3I6ICMxQTIzMkY7XG4gICAgICBtYXJnaW4tYm90dG9tOiAwOyB9XG4gICAgLnJlc291cmNlcyBoZ3JvdXAgaDQge1xuICAgICAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgICAgIGZvbnQtc2l6ZTogMjRweDtcbiAgICAgIGxpbmUtaGVpZ2h0OiBub3JtYWw7XG4gICAgICBsZXR0ZXItc3BhY2luZzogLTAuMDJlbTtcbiAgICAgIGNvbG9yOiAjMUEyMzJGOyB9XG4gICAgLnJlc291cmNlcyBoZ3JvdXAgaDUge1xuICAgICAgZm9udC13ZWlnaHQ6IDcwMDtcbiAgICAgIGxpbmUtaGVpZ2h0OiAxO1xuICAgICAgZm9udC1zaXplOiAxNHB4O1xuICAgICAgbGV0dGVyLXNwYWNpbmc6IDAuMDhlbTtcbiAgICAgIGNvbG9yOiAjMzg4MEZGO1xuICAgICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTsgfVxuICAgIC5yZXNvdXJjZXMgaGdyb3VwIGlvbi1pY29uIHtcbiAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgycHgpOyB9XG4gIC5yZXNvdXJjZXMgLmNhcmRzIGxpIHtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgICBmbGV4OiAwIDAgMzMuMzMlO1xuICAgIHBhZGRpbmc6IDI0cHg7IH1cbiAgICAucmVzb3VyY2VzIC5jYXJkcyBsaSBhIHtcbiAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgd2lkdGg6IDEwMCU7IH1cbiAgICAucmVzb3VyY2VzIC5jYXJkcyBsaSAuaW1nLXdyYXBwZXIge1xuICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICAgIGJvcmRlci1yYWRpdXM6IDZweDsgfVxuICAgIC5yZXNvdXJjZXMgLmNhcmRzIGxpIGltZyB7XG4gICAgICB3aWR0aDogMTAwJTsgfVxuICAgIC5yZXNvdXJjZXMgLmNhcmRzIGxpIGg2IHtcbiAgICAgIGxpbmUtaGVpZ2h0OiAyM3B4O1xuICAgICAgZm9udC1zaXplOiAxMnB4O1xuICAgICAgbGV0dGVyLXNwYWNpbmc6IDAuMTJlbTtcbiAgICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XG4gICAgICBjb2xvcjogI0IyQkVDRDtcbiAgICAgIG1hcmdpbi1ib3R0b206IDA7XG4gICAgICBtYXJnaW4tdG9wOiAxNnB4OyB9XG4gICAgLnJlc291cmNlcyAuY2FyZHMgbGkgaDQge1xuICAgICAgZm9udC1zaXplOiAyMHB4O1xuICAgICAgbWFyZ2luLXRvcDogMTBweDtcbiAgICAgIGNvbG9yOiAjMUEyMzJGO1xuICAgICAgZm9udC13ZWlnaHQ6IDYwMDsgfVxuICAgIC5yZXNvdXJjZXMgLmNhcmRzIGxpIHAge1xuICAgICAgY29sb3I6ICM1QjcwOEI7XG4gICAgICBsaW5lLWhlaWdodDogMjJweDtcbiAgICAgIGZvbnQtc2l6ZTogMTRweDtcbiAgICAgIGxldHRlci1zcGFjaW5nOiAtMC4wMmVtOyB9XG4gIEBtZWRpYSAobWF4LXdpZHRoOiA5OTJweCkge1xuICAgIC5yZXNvdXJjZXMgLmNhcmRzIHtcbiAgICAgIG1hcmdpbi1sZWZ0OiAtMTJweDtcbiAgICAgIG1hcmdpbi1yaWdodDogLTEycHg7IH1cbiAgICAucmVzb3VyY2VzIC5jYXJkcyBsaSB7XG4gICAgICBwYWRkaW5nOiAxMnB4OyB9IH1cbiAgQG1lZGlhIChtYXgtd2lkdGg6IDc2OHB4KSB7XG4gICAgLnJlc291cmNlcyAuY2FyZHMge1xuICAgICAgZmxleC13cmFwOiB3cmFwOyB9XG4gICAgLnJlc291cmNlcyAuY2FyZHMgbGkge1xuICAgICAgZmxleDogMCAwIDUwJTsgfSB9XG4gIEBtZWRpYSAobWF4LXdpZHRoOiA0ODBweCkge1xuICAgIC5yZXNvdXJjZXMgLmNhcmRzIGxpIHtcbiAgICAgIGZsZXg6IDAgMCAxMDAlOyB9XG4gICAgLnJlc291cmNlcyBoNSB7XG4gICAgICBkaXNwbGF5OiBub25lOyB9IH1cbiJdfQ== */\n"
  },
  {
    "path": "content/css/pages/subscribe.css",
    "content": ".subscribe {\n  background-color: #fff;\n  border-radius: 6px;\n  box-shadow: 0 8px 32px rgba(0, 0, 0, 0.1), 0 2px 8px rgba(0, 0, 0, 0.1);\n  max-width: 400px;\n  margin: -64px auto 80px auto;\n  padding: 32px 24px; }\n  .subscribe img {\n    width: 100%;\n    margin-bottom: 32px; }\n\n/*# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInN1YnNjcmliZS5jc3MiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7RUFDRSx1QkFBdUI7RUFDdkIsbUJBQW1CO0VBQ25CLHdFQUF3RTtFQUN4RSxpQkFBaUI7RUFDakIsNkJBQTZCO0VBQzdCLG1CQUFtQixFQUFFO0VBQ3JCO0lBQ0UsWUFBWTtJQUNaLG9CQUFvQixFQUFFIiwiZmlsZSI6InBhZ2VzL3N1YnNjcmliZS5jc3MiLCJzb3VyY2VzQ29udGVudCI6WyIuc3Vic2NyaWJlIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjtcbiAgYm9yZGVyLXJhZGl1czogNnB4O1xuICBib3gtc2hhZG93OiAwIDhweCAzMnB4IHJnYmEoMCwgMCwgMCwgMC4xKSwgMCAycHggOHB4IHJnYmEoMCwgMCwgMCwgMC4xKTtcbiAgbWF4LXdpZHRoOiA0MDBweDtcbiAgbWFyZ2luOiAtNjRweCBhdXRvIDgwcHggYXV0bztcbiAgcGFkZGluZzogMzJweCAyNHB4OyB9XG4gIC5zdWJzY3JpYmUgaW1nIHtcbiAgICB3aWR0aDogMTAwJTtcbiAgICBtYXJnaW4tYm90dG9tOiAzMnB4OyB9XG4iXX0= */\n"
  },
  {
    "path": "content/css/pages/support.css",
    "content": "#page-support .cta {\n  background: #4192fe no-repeat center bottom;\n  background-image: url(\"/img/support/cta-bg.png\");\n  background-size: cover; }\n  #page-support .cta hgroup {\n    max-width: 560px;\n    padding-top: 56px;\n    padding-bottom: 112px; }\n    #page-support .cta hgroup h1 {\n      font-size: 56px; }\n    #page-support .cta hgroup p {\n      font-size: 24px;\n      letter-spacing: -0.03em;\n      color: rgba(255, 255, 255, 0.9); }\n    @media (max-width: 768px) {\n      #page-support .cta hgroup {\n        max-width: 460px;\n        padding-top: 60px;\n        padding-bottom: 80px; }\n        #page-support .cta hgroup h1 {\n          font-size: 40px;\n          line-height: 54px;\n          margin-bottom: 6px; }\n        #page-support .cta hgroup p {\n          line-height: 30px;\n          font-size: 20px;\n          margin-left: auto;\n          max-width: 308px;\n          margin-right: auto; } }\n\n#page-support main hgroup h2 {\n  font-size: 22px;\n  margin-top: 30px; }\n\n#page-support main hgroup p {\n  font-size: 16px;\n  color: #898989;\n  font-weight: 400; }\n\n#page-support main .container {\n  margin-top: 126px; }\n\n#page-support main .container + .container,\n#page-support main .container + .banner {\n  margin-top: 180px; }\n\n#page-support main .container__header {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-pack: justify;\n      justify-content: space-between;\n  -ms-flex-align: end;\n      align-items: flex-end;\n  margin-bottom: 58px; }\n  #page-support main .container__header hgroup {\n    -ms-flex: 0 0 50%;\n        flex: 0 0 50%; }\n  #page-support main .container__header h2 {\n    font-size: 40px;\n    letter-spacing: -0.03em; }\n  #page-support main .container__header h4 {\n    font-family: \"Inter\", \"Inter UI\", Helvetica, Arial, sans-serif;\n    font-weight: 600;\n    font-size: 16px;\n    letter-spacing: -0.01em; }\n  #page-support main .container__header p {\n    font-family: \"Inter\", \"Inter UI\", Helvetica, Arial, sans-serif;\n    font-size: 20px;\n    line-height: 30px;\n    color: #616E7E;\n    margin-bottom: 0;\n    letter-spacing: -0.02em; }\n  #page-support main .container__header .btn {\n    box-shadow: 0px 2px 6px rgba(2, 8, 20, 0.08), 0px 1px 2px rgba(2, 8, 20, 0.1);\n    border-radius: 8px;\n    padding: 12px 18px;\n    font-weight: 600;\n    font-size: 14px;\n    letter-spacing: -0.01em; }\n\n@media (max-width: 992px) {\n  #page-support main .container__header h2 {\n    font-size: 36px; }\n  #page-support main .container__header p {\n    font-size: 18px;\n    line-height: 28px; } }\n\n@media (max-width: 768px) {\n  #page-support main .container {\n    margin-top: 64px; }\n  #page-support main .container + .container,\n  #page-support main .container + .banner {\n    margin-top: 84px; }\n  #page-support main .container__header {\n    -ms-flex-direction: column;\n        flex-direction: column;\n    -ms-flex-align: center;\n        align-items: center; }\n    #page-support main .container__header hgroup {\n      text-align: center;\n      margin-bottom: 16px;\n      max-width: 520px; }\n    #page-support main .container__header h2 {\n      font-size: 32px; } }\n\n#page-support .card-list {\n  display: -ms-flexbox;\n  display: flex;\n  list-style-type: none;\n  margin: 0 -29px;\n  padding: 0; }\n  #page-support .card-list__card {\n    padding: 0 29px;\n    -ms-flex: 0 0 33.33%;\n        flex: 0 0 33.33%; }\n    #page-support .card-list__card a {\n      color: inherit; }\n      #page-support .card-list__card a, #page-support .card-list__card a:active {\n        text-decoration: none; }\n    #page-support .card-list__card img {\n      width: 100%; }\n    #page-support .card-list__card h3 {\n      font-weight: 600;\n      font-size: 24px;\n      line-height: 30px;\n      letter-spacing: -0.01em;\n      color: #1A232F;\n      margin-bottom: 10px;\n      margin-top: 20px; }\n    #page-support .card-list__card p {\n      font-size: 16px;\n      line-height: 27px;\n      letter-spacing: -0.01em;\n      color: #616E7E; }\n    #page-support .card-list__card .link-text {\n      transition: 0.2s color;\n      font-size: 16px;\n      line-height: 27px;\n      letter-spacing: -0.01em;\n      color: #3880FF;\n      display: -ms-inline-flexbox;\n      display: inline-flex;\n      -ms-flex-align: center;\n          align-items: center; }\n    #page-support .card-list__card .link-text ion-icon {\n      transition: 0.2s translate;\n      -webkit-transform: translate(1px, 1px);\n              transform: translate(1px, 1px); }\n    #page-support .card-list__card a:hover .link-text {\n      color: #0c59e0; }\n    #page-support .card-list__card a:hover .link-text ion-icon {\n      -webkit-transform: translate(3px, 1px);\n              transform: translate(3px, 1px); }\n  @media (max-width: 992px) {\n    #page-support .card-list {\n      margin: 0 -16px; }\n      #page-support .card-list__card {\n        padding: 0 16px; }\n        #page-support .card-list__card h3 {\n          font-size: 20px; }\n        #page-support .card-list__card p {\n          font-size: 15px;\n          line-height: 25px; } }\n  @media (max-width: 768px) {\n    #page-support .card-list {\n      -ms-flex-direction: column;\n          flex-direction: column;\n      max-width: 400px;\n      margin-left: auto;\n      margin-right: auto; }\n      #page-support .card-list__card {\n        padding: 0; }\n      #page-support .card-list__card + .card-list__card {\n        margin-top: 32px; } }\n\n#page-support .link-list {\n  display: -ms-flexbox;\n  display: flex;\n  list-style-type: none;\n  margin: 78px 0 0;\n  padding: 0;\n  -ms-flex-pack: justify;\n      justify-content: space-between; }\n  #page-support .link-list a {\n    display: -ms-flexbox;\n    display: flex;\n    -ms-flex-direction: column;\n        flex-direction: column;\n    -ms-flex-align: center;\n        align-items: center; }\n    #page-support .link-list a svg path {\n      transition: 0.2s fill;\n      fill: #414D5C; }\n    #page-support .link-list a:hover svg path {\n      fill: #3880FF; }\n    #page-support .link-list a span {\n      transition: 0.2s color;\n      padding-top: 8px;\n      font-size: 16px;\n      line-height: 25px;\n      text-align: center;\n      letter-spacing: -0.01em;\n      color: #414D5C; }\n    #page-support .link-list a:hover span {\n      color: #3880FF; }\n  @media (max-width: 992px) {\n    #page-support .link-list {\n      margin: 56px 0 0; }\n      #page-support .link-list svg {\n        height: 36px; } }\n  @media (max-width: 768px) {\n    #page-support .link-list {\n      max-width: 440px;\n      -ms-flex-wrap: wrap;\n          flex-wrap: wrap;\n      margin-left: auto;\n      margin-right: auto; }\n      #page-support .link-list li {\n        -ms-flex: 0 0 33.33%;\n            flex: 0 0 33.33%;\n        margin-bottom: 28px; }\n      #page-support .link-list svg {\n        height: 24px; }\n      #page-support .link-list span {\n        font-size: 12px; } }\n  @media (max-width: 480px) {\n    #page-support .link-list li {\n      -ms-flex: 0 0 50%;\n          flex: 0 0 50%; } }\n\n#page-support .items {\n  list-style: none;\n  margin-top: 28px; }\n  @media (max-width: 1219px) {\n    #page-support .items {\n      display: -ms-flexbox;\n      display: flex;\n      -ms-flex-pack: distribute;\n          justify-content: space-around; } }\n  @media (max-width: 991px) {\n    #page-support .items {\n      display: block; } }\n  #page-support .items a {\n    padding: 14px 23px 18px 95px;\n    margin-right: 13px;\n    position: relative;\n    cursor: pointer;\n    display: inline-block;\n    width: 365px;\n    margin-bottom: 30px;\n    vertical-align: top; }\n    #page-support .items a, #page-support .items a:hover, #page-support .items a:active {\n      text-decoration: none; }\n    #page-support .items a:last-child {\n      margin-right: 0; }\n    @media (max-width: 991px) {\n      #page-support .items a {\n        display: block;\n        margin: 18px auto; }\n        #page-support .items a:last-child {\n          margin-right: auto; } }\n    #page-support .items a::before {\n      border-radius: 4px;\n      background: white;\n      box-shadow: 0 1px 4px rgba(0, 0, 0, 0.15);\n      position: absolute;\n      top: 0;\n      bottom: 0;\n      left: 0;\n      right: 0;\n      content: '';\n      display: block;\n      transition: 0.3s box-shadow, 0.3s -webkit-transform cubic-bezier(0.155, 1.105, 0.295, 1.12);\n      transition: 0.3s transform cubic-bezier(0.155, 1.105, 0.295, 1.12), 0.3s box-shadow;\n      transition: 0.3s transform cubic-bezier(0.155, 1.105, 0.295, 1.12), 0.3s box-shadow, 0.3s -webkit-transform cubic-bezier(0.155, 1.105, 0.295, 1.12); }\n    #page-support .items a:hover {\n      text-decoration: none; }\n      #page-support .items a:hover::before {\n        box-shadow: 0 4px 10px rgba(0, 0, 0, 0.15);\n        -webkit-transform: scale(1.05);\n                transform: scale(1.05); }\n    @media (max-width: 767px) {\n      #page-support .items a {\n        width: 100%; }\n        #page-support .items a:hover {\n          text-decoration: none; }\n          #page-support .items a:hover::before {\n            -webkit-transform: scale(1);\n                    transform: scale(1); } }\n    #page-support .items a::after {\n      background-repeat: no-repeat;\n      background-image: url(\"/img/support/support-thumbnails.png\");\n      background-size: 48px;\n      width: 48px;\n      height: 48px;\n      content: '';\n      display: block;\n      position: absolute;\n      left: 29px;\n      top: 34px;\n      transition: 0.3s -webkit-transform cubic-bezier(0.155, 1.105, 0.295, 1.12);\n      transition: 0.3s transform cubic-bezier(0.155, 1.105, 0.295, 1.12);\n      transition: 0.3s transform cubic-bezier(0.155, 1.105, 0.295, 1.12), 0.3s -webkit-transform cubic-bezier(0.155, 1.105, 0.295, 1.12); }\n    #page-support .items a.slack::after {\n      background-position: 0 -48px; }\n    #page-support .items a.so::after {\n      background-position: 0 -96px; }\n    #page-support .items a.account::after {\n      background-position: 0 -144px; }\n    #page-support .items a.bug::after {\n      background-position: 0 -192px; }\n    #page-support .items a.troubleshooting::after {\n      background-position: 0 -240px; }\n    #page-support .items a.resources::after {\n      background-position: 0 -288px; }\n    #page-support .items a.github::after {\n      background-position: 0 -336px; }\n    #page-support .items a.faq::after {\n      background-position: 0 -384px; }\n    #page-support .items a h3 {\n      color: #272a2f;\n      font-size: 16px;\n      position: relative;\n      letter-spacing: -.02em;\n      margin-bottom: 8px; }\n    #page-support .items a p {\n      color: #898989;\n      font-size: 14px;\n      font-weight: 400;\n      position: relative;\n      line-height: 1.4; }\n\n#page-support .banner {\n  background: #18263E;\n  background-image: url(\"/img/support/support-banner-bg.jpg\");\n  background-repeat: no-repeat;\n  background-size: cover;\n  background-position: center; }\n  #page-support .banner .container {\n    margin-top: 0; }\n  #page-support .banner hgroup {\n    margin-top: 0;\n    padding: 86px 0;\n    color: rgba(255, 255, 255, 0.95);\n    text-align: left;\n    max-width: 430px; }\n    #page-support .banner hgroup strong {\n      color: white;\n      font-weight: 600; }\n    #page-support .banner hgroup h1 {\n      font-size: 40px;\n      line-height: 50px;\n      letter-spacing: -0.03em;\n      color: #FFFFFF; }\n    #page-support .banner hgroup p,\n    #page-support .banner hgroup a {\n      font-family: \"Inter\", \"Inter UI\", Helvetica, Arial, sans-serif; }\n    #page-support .banner hgroup p {\n      font-size: 20px;\n      line-height: 31px;\n      letter-spacing: -0.02em;\n      color: rgba(255, 255, 255, 0.8); }\n    #page-support .banner hgroup a {\n      transition: 0.2s all;\n      display: -ms-flexbox;\n      display: flex;\n      -ms-flex-align: center;\n          align-items: center;\n      font-weight: 500;\n      font-size: 19px;\n      line-height: 32px;\n      letter-spacing: -0.02em;\n      color: #639CFF; }\n      #page-support .banner hgroup a ion-icon {\n        -webkit-transform: translate(1px, 1px);\n                transform: translate(1px, 1px); }\n      #page-support .banner hgroup a:hover {\n        color: #70a3fd; }\n        #page-support .banner hgroup a:hover ion-icon {\n          -webkit-transform: translate(3px, 1px);\n                  transform: translate(3px, 1px); }\n  @media (max-width: 768px) {\n    #page-support .banner hgroup {\n      margin-left: auto;\n      margin-right: auto;\n      text-align: center;\n      display: -ms-flexbox;\n      display: flex;\n      -ms-flex-direction: column;\n          flex-direction: column;\n      -ms-flex-align: center;\n          align-items: center; } }\n\n#page-support section.newsletter-signup {\n  background-color: #F6F8FB; }\n  #page-support section.newsletter-signup .container {\n    margin-top: 0;\n    padding-top: 120px;\n    padding-bottom: 120px; }\n  #page-support section.newsletter-signup .flex {\n    display: -ms-flexbox;\n    display: flex;\n    -ms-flex-pack: justify;\n        justify-content: space-between;\n    -ms-flex-align: end;\n        align-items: flex-end; }\n  #page-support section.newsletter-signup hgroup {\n    padding-right: 80px; }\n    #page-support section.newsletter-signup hgroup h1 {\n      font-weight: 500;\n      font-size: 28px;\n      line-height: normal;\n      letter-spacing: -0.03em;\n      color: #3880FF;\n      margin-bottom: 0; }\n    #page-support section.newsletter-signup hgroup p {\n      font-family: \"Eina\", \"Helvetica Neue\", Helvetica, sans-serif;\n      font-size: 20px;\n      line-height: 36px;\n      letter-spacing: -0.02em;\n      color: #73849A;\n      margin-bottom: 0; }\n  #page-support section.newsletter-signup ionic-newsletter-signup {\n    height: 50px;\n    -ms-flex: 1;\n        flex: 1; }\n    #page-support section.newsletter-signup ionic-newsletter-signup input {\n      background: #fff; }\n  @media (max-width: 768px) {\n    #page-support section.newsletter-signup .flex {\n      -ms-flex-direction: column;\n          flex-direction: column;\n      -ms-flex-align: center;\n          align-items: center; }\n    #page-support section.newsletter-signup hgroup {\n      padding-right: 0;\n      text-align: center;\n      margin-left: auto;\n      margin-right: auto; }\n    #page-support section.newsletter-signup .container {\n      padding-top: 60px;\n      padding-bottom: 98px; } }\n\n/*# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInN1cHBvcnQuY3NzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0VBQ0UsNENBQTRDO0VBQzVDLGlEQUFpRDtFQUNqRCx1QkFBdUIsRUFBRTtFQUN6QjtJQUNFLGlCQUFpQjtJQUNqQixrQkFBa0I7SUFDbEIsc0JBQXNCLEVBQUU7SUFDeEI7TUFDRSxnQkFBZ0IsRUFBRTtJQUNwQjtNQUNFLGdCQUFnQjtNQUNoQix3QkFBd0I7TUFDeEIsZ0NBQWdDLEVBQUU7SUFDcEM7TUFDRTtRQUNFLGlCQUFpQjtRQUNqQixrQkFBa0I7UUFDbEIscUJBQXFCLEVBQUU7UUFDdkI7VUFDRSxnQkFBZ0I7VUFDaEIsa0JBQWtCO1VBQ2xCLG1CQUFtQixFQUFFO1FBQ3ZCO1VBQ0Usa0JBQWtCO1VBQ2xCLGdCQUFnQjtVQUNoQixrQkFBa0I7VUFDbEIsaUJBQWlCO1VBQ2pCLG1CQUFtQixFQUFFLEVBQUU7O0FBRWpDO0VBQ0UsZ0JBQWdCO0VBQ2hCLGlCQUFpQixFQUFFOztBQUVyQjtFQUNFLGdCQUFnQjtFQUNoQixlQUFlO0VBQ2YsaUJBQWlCLEVBQUU7O0FBRXJCO0VBQ0Usa0JBQWtCLEVBQUU7O0FBRXRCOztFQUVFLGtCQUFrQixFQUFFOztBQUV0QjtFQUNFLHFCQUFjO0VBQWQsY0FBYztFQUNkLHVCQUErQjtNQUEvQiwrQkFBK0I7RUFDL0Isb0JBQXNCO01BQXRCLHNCQUFzQjtFQUN0QixvQkFBb0IsRUFBRTtFQUN0QjtJQUNFLGtCQUFjO1FBQWQsY0FBYyxFQUFFO0VBQ2xCO0lBQ0UsZ0JBQWdCO0lBQ2hCLHdCQUF3QixFQUFFO0VBQzVCO0lBQ0UsK0RBQStEO0lBQy9ELGlCQUFpQjtJQUNqQixnQkFBZ0I7SUFDaEIsd0JBQXdCLEVBQUU7RUFDNUI7SUFDRSwrREFBK0Q7SUFDL0QsZ0JBQWdCO0lBQ2hCLGtCQUFrQjtJQUNsQixlQUFlO0lBQ2YsaUJBQWlCO0lBQ2pCLHdCQUF3QixFQUFFO0VBQzVCO0lBQ0UsOEVBQThFO0lBQzlFLG1CQUFtQjtJQUNuQixtQkFBbUI7SUFDbkIsaUJBQWlCO0lBQ2pCLGdCQUFnQjtJQUNoQix3QkFBd0IsRUFBRTs7QUFFOUI7RUFDRTtJQUNFLGdCQUFnQixFQUFFO0VBQ3BCO0lBQ0UsZ0JBQWdCO0lBQ2hCLGtCQUFrQixFQUFFLEVBQUU7O0FBRTFCO0VBQ0U7SUFDRSxpQkFBaUIsRUFBRTtFQUNyQjs7SUFFRSxpQkFBaUIsRUFBRTtFQUNyQjtJQUNFLDJCQUF1QjtRQUF2Qix1QkFBdUI7SUFDdkIsdUJBQW9CO1FBQXBCLG9CQUFvQixFQUFFO0lBQ3RCO01BQ0UsbUJBQW1CO01BQ25CLG9CQUFvQjtNQUNwQixpQkFBaUIsRUFBRTtJQUNyQjtNQUNFLGdCQUFnQixFQUFFLEVBQUU7O0FBRTFCO0VBQ0UscUJBQWM7RUFBZCxjQUFjO0VBQ2Qsc0JBQXNCO0VBQ3RCLGdCQUFnQjtFQUNoQixXQUFXLEVBQUU7RUFDYjtJQUNFLGdCQUFnQjtJQUNoQixxQkFBaUI7UUFBakIsaUJBQWlCLEVBQUU7SUFDbkI7TUFDRSxlQUFlLEVBQUU7TUFDakI7UUFDRSxzQkFBc0IsRUFBRTtJQUM1QjtNQUNFLFlBQVksRUFBRTtJQUNoQjtNQUNFLGlCQUFpQjtNQUNqQixnQkFBZ0I7TUFDaEIsa0JBQWtCO01BQ2xCLHdCQUF3QjtNQUN4QixlQUFlO01BQ2Ysb0JBQW9CO01BQ3BCLGlCQUFpQixFQUFFO0lBQ3JCO01BQ0UsZ0JBQWdCO01BQ2hCLGtCQUFrQjtNQUNsQix3QkFBd0I7TUFDeEIsZUFBZSxFQUFFO0lBQ25CO01BQ0UsdUJBQXVCO01BQ3ZCLGdCQUFnQjtNQUNoQixrQkFBa0I7TUFDbEIsd0JBQXdCO01BQ3hCLGVBQWU7TUFDZiw0QkFBcUI7TUFBckIscUJBQXFCO01BQ3JCLHVCQUFvQjtVQUFwQixvQkFBb0IsRUFBRTtJQUN4QjtNQUNFLDJCQUEyQjtNQUMzQix1Q0FBK0I7Y0FBL0IsK0JBQStCLEVBQUU7SUFDbkM7TUFDRSxlQUFlLEVBQUU7SUFDbkI7TUFDRSx1Q0FBK0I7Y0FBL0IsK0JBQStCLEVBQUU7RUFDckM7SUFDRTtNQUNFLGdCQUFnQixFQUFFO01BQ2xCO1FBQ0UsZ0JBQWdCLEVBQUU7UUFDbEI7VUFDRSxnQkFBZ0IsRUFBRTtRQUNwQjtVQUNFLGdCQUFnQjtVQUNoQixrQkFBa0IsRUFBRSxFQUFFO0VBQzlCO0lBQ0U7TUFDRSwyQkFBdUI7VUFBdkIsdUJBQXVCO01BQ3ZCLGlCQUFpQjtNQUNqQixrQkFBa0I7TUFDbEIsbUJBQW1CLEVBQUU7TUFDckI7UUFDRSxXQUFXLEVBQUU7TUFDZjtRQUNFLGlCQUFpQixFQUFFLEVBQUU7O0FBRTdCO0VBQ0UscUJBQWM7RUFBZCxjQUFjO0VBQ2Qsc0JBQXNCO0VBQ3RCLGlCQUFpQjtFQUNqQixXQUFXO0VBQ1gsdUJBQStCO01BQS9CLCtCQUErQixFQUFFO0VBQ2pDO0lBQ0UscUJBQWM7SUFBZCxjQUFjO0lBQ2QsMkJBQXVCO1FBQXZCLHVCQUF1QjtJQUN2Qix1QkFBb0I7UUFBcEIsb0JBQW9CLEVBQUU7SUFDdEI7TUFDRSxzQkFBc0I7TUFDdEIsY0FBYyxFQUFFO0lBQ2xCO01BQ0UsY0FBYyxFQUFFO0lBQ2xCO01BQ0UsdUJBQXVCO01BQ3ZCLGlCQUFpQjtNQUNqQixnQkFBZ0I7TUFDaEIsa0JBQWtCO01BQ2xCLG1CQUFtQjtNQUNuQix3QkFBd0I7TUFDeEIsZUFBZSxFQUFFO0lBQ25CO01BQ0UsZUFBZSxFQUFFO0VBQ3JCO0lBQ0U7TUFDRSxpQkFBaUIsRUFBRTtNQUNuQjtRQUNFLGFBQWEsRUFBRSxFQUFFO0VBQ3ZCO0lBQ0U7TUFDRSxpQkFBaUI7TUFDakIsb0JBQWdCO1VBQWhCLGdCQUFnQjtNQUNoQixrQkFBa0I7TUFDbEIsbUJBQW1CLEVBQUU7TUFDckI7UUFDRSxxQkFBaUI7WUFBakIsaUJBQWlCO1FBQ2pCLG9CQUFvQixFQUFFO01BQ3hCO1FBQ0UsYUFBYSxFQUFFO01BQ2pCO1FBQ0UsZ0JBQWdCLEVBQUUsRUFBRTtFQUMxQjtJQUNFO01BQ0Usa0JBQWM7VUFBZCxjQUFjLEVBQUUsRUFBRTs7QUFFeEI7RUFDRSxpQkFBaUI7RUFDakIsaUJBQWlCLEVBQUU7RUFDbkI7SUFDRTtNQUNFLHFCQUFjO01BQWQsY0FBYztNQUNkLDBCQUE4QjtVQUE5Qiw4QkFBOEIsRUFBRSxFQUFFO0VBQ3RDO0lBQ0U7TUFDRSxlQUFlLEVBQUUsRUFBRTtFQUN2QjtJQUNFLDZCQUE2QjtJQUM3QixtQkFBbUI7SUFDbkIsbUJBQW1CO0lBQ25CLGdCQUFnQjtJQUNoQixzQkFBc0I7SUFDdEIsYUFBYTtJQUNiLG9CQUFvQjtJQUNwQixvQkFBb0IsRUFBRTtJQUN0QjtNQUNFLHNCQUFzQixFQUFFO0lBQzFCO01BQ0UsZ0JBQWdCLEVBQUU7SUFDcEI7TUFDRTtRQUNFLGVBQWU7UUFDZixrQkFBa0IsRUFBRTtRQUNwQjtVQUNFLG1CQUFtQixFQUFFLEVBQUU7SUFDN0I7TUFDRSxtQkFBbUI7TUFDbkIsa0JBQWtCO01BQ2xCLDBDQUEwQztNQUMxQyxtQkFBbUI7TUFDbkIsT0FBTztNQUNQLFVBQVU7TUFDVixRQUFRO01BQ1IsU0FBUztNQUNULFlBQVk7TUFDWixlQUFlO01BQ2YsNEZBQW9GO01BQXBGLG9GQUFvRjtNQUFwRixvSkFBb0YsRUFBRTtJQUN4RjtNQUNFLHNCQUFzQixFQUFFO01BQ3hCO1FBQ0UsMkNBQTJDO1FBQzNDLCtCQUF1QjtnQkFBdkIsdUJBQXVCLEVBQUU7SUFDN0I7TUFDRTtRQUNFLFlBQVksRUFBRTtRQUNkO1VBQ0Usc0JBQXNCLEVBQUU7VUFDeEI7WUFDRSw0QkFBb0I7b0JBQXBCLG9CQUFvQixFQUFFLEVBQUU7SUFDaEM7TUFDRSw2QkFBNkI7TUFDN0IsNkRBQTZEO01BQzdELHNCQUFzQjtNQUN0QixZQUFZO01BQ1osYUFBYTtNQUNiLFlBQVk7TUFDWixlQUFlO01BQ2YsbUJBQW1CO01BQ25CLFdBQVc7TUFDWCxVQUFVO01BQ1YsMkVBQW1FO01BQW5FLG1FQUFtRTtNQUFuRSxtSUFBbUUsRUFBRTtJQUN2RTtNQUNFLDZCQUE2QixFQUFFO0lBQ2pDO01BQ0UsNkJBQTZCLEVBQUU7SUFDakM7TUFDRSw4QkFBOEIsRUFBRTtJQUNsQztNQUNFLDhCQUE4QixFQUFFO0lBQ2xDO01BQ0UsOEJBQThCLEVBQUU7SUFDbEM7TUFDRSw4QkFBOEIsRUFBRTtJQUNsQztNQUNFLDhCQUE4QixFQUFFO0lBQ2xDO01BQ0UsOEJBQThCLEVBQUU7SUFDbEM7TUFDRSxlQUFlO01BQ2YsZ0JBQWdCO01BQ2hCLG1CQUFtQjtNQUNuQix1QkFBdUI7TUFDdkIsbUJBQW1CLEVBQUU7SUFDdkI7TUFDRSxlQUFlO01BQ2YsZ0JBQWdCO01BQ2hCLGlCQUFpQjtNQUNqQixtQkFBbUI7TUFDbkIsaUJBQWlCLEVBQUU7O0FBRXpCO0VBQ0Usb0JBQW9CO0VBQ3BCLDREQUE0RDtFQUM1RCw2QkFBNkI7RUFDN0IsdUJBQXVCO0VBQ3ZCLDRCQUE0QixFQUFFO0VBQzlCO0lBQ0UsY0FBYyxFQUFFO0VBQ2xCO0lBQ0UsY0FBYztJQUNkLGdCQUFnQjtJQUNoQixpQ0FBaUM7SUFDakMsaUJBQWlCO0lBQ2pCLGlCQUFpQixFQUFFO0lBQ25CO01BQ0UsYUFBYTtNQUNiLGlCQUFpQixFQUFFO0lBQ3JCO01BQ0UsZ0JBQWdCO01BQ2hCLGtCQUFrQjtNQUNsQix3QkFBd0I7TUFDeEIsZUFBZSxFQUFFO0lBQ25COztNQUVFLCtEQUErRCxFQUFFO0lBQ25FO01BQ0UsZ0JBQWdCO01BQ2hCLGtCQUFrQjtNQUNsQix3QkFBd0I7TUFDeEIsZ0NBQWdDLEVBQUU7SUFDcEM7TUFDRSxxQkFBcUI7TUFDckIscUJBQWM7TUFBZCxjQUFjO01BQ2QsdUJBQW9CO1VBQXBCLG9CQUFvQjtNQUNwQixpQkFBaUI7TUFDakIsZ0JBQWdCO01BQ2hCLGtCQUFrQjtNQUNsQix3QkFBd0I7TUFDeEIsZUFBZSxFQUFFO01BQ2pCO1FBQ0UsdUNBQStCO2dCQUEvQiwrQkFBK0IsRUFBRTtNQUNuQztRQUNFLGVBQWUsRUFBRTtRQUNqQjtVQUNFLHVDQUErQjtrQkFBL0IsK0JBQStCLEVBQUU7RUFDekM7SUFDRTtNQUNFLGtCQUFrQjtNQUNsQixtQkFBbUI7TUFDbkIsbUJBQW1CO01BQ25CLHFCQUFjO01BQWQsY0FBYztNQUNkLDJCQUF1QjtVQUF2Qix1QkFBdUI7TUFDdkIsdUJBQW9CO1VBQXBCLG9CQUFvQixFQUFFLEVBQUU7O0FBRTlCO0VBQ0UsMEJBQTBCLEVBQUU7RUFDNUI7SUFDRSxjQUFjO0lBQ2QsbUJBQW1CO0lBQ25CLHNCQUFzQixFQUFFO0VBQzFCO0lBQ0UscUJBQWM7SUFBZCxjQUFjO0lBQ2QsdUJBQStCO1FBQS9CLCtCQUErQjtJQUMvQixvQkFBc0I7UUFBdEIsc0JBQXNCLEVBQUU7RUFDMUI7SUFDRSxvQkFBb0IsRUFBRTtJQUN0QjtNQUNFLGlCQUFpQjtNQUNqQixnQkFBZ0I7TUFDaEIsb0JBQW9CO01BQ3BCLHdCQUF3QjtNQUN4QixlQUFlO01BQ2YsaUJBQWlCLEVBQUU7SUFDckI7TUFDRSw2REFBNkQ7TUFDN0QsZ0JBQWdCO01BQ2hCLGtCQUFrQjtNQUNsQix3QkFBd0I7TUFDeEIsZUFBZTtNQUNmLGlCQUFpQixFQUFFO0VBQ3ZCO0lBQ0UsYUFBYTtJQUNiLFlBQVE7UUFBUixRQUFRLEVBQUU7SUFDVjtNQUNFLGlCQUFpQixFQUFFO0VBQ3ZCO0lBQ0U7TUFDRSwyQkFBdUI7VUFBdkIsdUJBQXVCO01BQ3ZCLHVCQUFvQjtVQUFwQixvQkFBb0IsRUFBRTtJQUN4QjtNQUNFLGlCQUFpQjtNQUNqQixtQkFBbUI7TUFDbkIsa0JBQWtCO01BQ2xCLG1CQUFtQixFQUFFO0lBQ3ZCO01BQ0Usa0JBQWtCO01BQ2xCLHFCQUFxQixFQUFFLEVBQUUiLCJmaWxlIjoicGFnZXMvc3VwcG9ydC5jc3MiLCJzb3VyY2VzQ29udGVudCI6WyIjcGFnZS1zdXBwb3J0IC5jdGEge1xuICBiYWNrZ3JvdW5kOiAjNDE5MmZlIG5vLXJlcGVhdCBjZW50ZXIgYm90dG9tO1xuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXCIvaW1nL3N1cHBvcnQvY3RhLWJnLnBuZ1wiKTtcbiAgYmFja2dyb3VuZC1zaXplOiBjb3ZlcjsgfVxuICAjcGFnZS1zdXBwb3J0IC5jdGEgaGdyb3VwIHtcbiAgICBtYXgtd2lkdGg6IDU2MHB4O1xuICAgIHBhZGRpbmctdG9wOiA1NnB4O1xuICAgIHBhZGRpbmctYm90dG9tOiAxMTJweDsgfVxuICAgICNwYWdlLXN1cHBvcnQgLmN0YSBoZ3JvdXAgaDEge1xuICAgICAgZm9udC1zaXplOiA1NnB4OyB9XG4gICAgI3BhZ2Utc3VwcG9ydCAuY3RhIGhncm91cCBwIHtcbiAgICAgIGZvbnQtc2l6ZTogMjRweDtcbiAgICAgIGxldHRlci1zcGFjaW5nOiAtMC4wM2VtO1xuICAgICAgY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC45KTsgfVxuICAgIEBtZWRpYSAobWF4LXdpZHRoOiA3NjhweCkge1xuICAgICAgI3BhZ2Utc3VwcG9ydCAuY3RhIGhncm91cCB7XG4gICAgICAgIG1heC13aWR0aDogNDYwcHg7XG4gICAgICAgIHBhZGRpbmctdG9wOiA2MHB4O1xuICAgICAgICBwYWRkaW5nLWJvdHRvbTogODBweDsgfVxuICAgICAgICAjcGFnZS1zdXBwb3J0IC5jdGEgaGdyb3VwIGgxIHtcbiAgICAgICAgICBmb250LXNpemU6IDQwcHg7XG4gICAgICAgICAgbGluZS1oZWlnaHQ6IDU0cHg7XG4gICAgICAgICAgbWFyZ2luLWJvdHRvbTogNnB4OyB9XG4gICAgICAgICNwYWdlLXN1cHBvcnQgLmN0YSBoZ3JvdXAgcCB7XG4gICAgICAgICAgbGluZS1oZWlnaHQ6IDMwcHg7XG4gICAgICAgICAgZm9udC1zaXplOiAyMHB4O1xuICAgICAgICAgIG1hcmdpbi1sZWZ0OiBhdXRvO1xuICAgICAgICAgIG1heC13aWR0aDogMzA4cHg7XG4gICAgICAgICAgbWFyZ2luLXJpZ2h0OiBhdXRvOyB9IH1cblxuI3BhZ2Utc3VwcG9ydCBtYWluIGhncm91cCBoMiB7XG4gIGZvbnQtc2l6ZTogMjJweDtcbiAgbWFyZ2luLXRvcDogMzBweDsgfVxuXG4jcGFnZS1zdXBwb3J0IG1haW4gaGdyb3VwIHAge1xuICBmb250LXNpemU6IDE2cHg7XG4gIGNvbG9yOiAjODk4OTg5O1xuICBmb250LXdlaWdodDogNDAwOyB9XG5cbiNwYWdlLXN1cHBvcnQgbWFpbiAuY29udGFpbmVyIHtcbiAgbWFyZ2luLXRvcDogMTI2cHg7IH1cblxuI3BhZ2Utc3VwcG9ydCBtYWluIC5jb250YWluZXIgKyAuY29udGFpbmVyLFxuI3BhZ2Utc3VwcG9ydCBtYWluIC5jb250YWluZXIgKyAuYmFubmVyIHtcbiAgbWFyZ2luLXRvcDogMTgwcHg7IH1cblxuI3BhZ2Utc3VwcG9ydCBtYWluIC5jb250YWluZXJfX2hlYWRlciB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcbiAgYWxpZ24taXRlbXM6IGZsZXgtZW5kO1xuICBtYXJnaW4tYm90dG9tOiA1OHB4OyB9XG4gICNwYWdlLXN1cHBvcnQgbWFpbiAuY29udGFpbmVyX19oZWFkZXIgaGdyb3VwIHtcbiAgICBmbGV4OiAwIDAgNTAlOyB9XG4gICNwYWdlLXN1cHBvcnQgbWFpbiAuY29udGFpbmVyX19oZWFkZXIgaDIge1xuICAgIGZvbnQtc2l6ZTogNDBweDtcbiAgICBsZXR0ZXItc3BhY2luZzogLTAuMDNlbTsgfVxuICAjcGFnZS1zdXBwb3J0IG1haW4gLmNvbnRhaW5lcl9faGVhZGVyIGg0IHtcbiAgICBmb250LWZhbWlseTogXCJJbnRlclwiLCBcIkludGVyIFVJXCIsIEhlbHZldGljYSwgQXJpYWwsIHNhbnMtc2VyaWY7XG4gICAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgICBmb250LXNpemU6IDE2cHg7XG4gICAgbGV0dGVyLXNwYWNpbmc6IC0wLjAxZW07IH1cbiAgI3BhZ2Utc3VwcG9ydCBtYWluIC5jb250YWluZXJfX2hlYWRlciBwIHtcbiAgICBmb250LWZhbWlseTogXCJJbnRlclwiLCBcIkludGVyIFVJXCIsIEhlbHZldGljYSwgQXJpYWwsIHNhbnMtc2VyaWY7XG4gICAgZm9udC1zaXplOiAyMHB4O1xuICAgIGxpbmUtaGVpZ2h0OiAzMHB4O1xuICAgIGNvbG9yOiAjNjE2RTdFO1xuICAgIG1hcmdpbi1ib3R0b206IDA7XG4gICAgbGV0dGVyLXNwYWNpbmc6IC0wLjAyZW07IH1cbiAgI3BhZ2Utc3VwcG9ydCBtYWluIC5jb250YWluZXJfX2hlYWRlciAuYnRuIHtcbiAgICBib3gtc2hhZG93OiAwcHggMnB4IDZweCByZ2JhKDIsIDgsIDIwLCAwLjA4KSwgMHB4IDFweCAycHggcmdiYSgyLCA4LCAyMCwgMC4xKTtcbiAgICBib3JkZXItcmFkaXVzOiA4cHg7XG4gICAgcGFkZGluZzogMTJweCAxOHB4O1xuICAgIGZvbnQtd2VpZ2h0OiA2MDA7XG4gICAgZm9udC1zaXplOiAxNHB4O1xuICAgIGxldHRlci1zcGFjaW5nOiAtMC4wMWVtOyB9XG5cbkBtZWRpYSAobWF4LXdpZHRoOiA5OTJweCkge1xuICAjcGFnZS1zdXBwb3J0IG1haW4gLmNvbnRhaW5lcl9faGVhZGVyIGgyIHtcbiAgICBmb250LXNpemU6IDM2cHg7IH1cbiAgI3BhZ2Utc3VwcG9ydCBtYWluIC5jb250YWluZXJfX2hlYWRlciBwIHtcbiAgICBmb250LXNpemU6IDE4cHg7XG4gICAgbGluZS1oZWlnaHQ6IDI4cHg7IH0gfVxuXG5AbWVkaWEgKG1heC13aWR0aDogNzY4cHgpIHtcbiAgI3BhZ2Utc3VwcG9ydCBtYWluIC5jb250YWluZXIge1xuICAgIG1hcmdpbi10b3A6IDY0cHg7IH1cbiAgI3BhZ2Utc3VwcG9ydCBtYWluIC5jb250YWluZXIgKyAuY29udGFpbmVyLFxuICAjcGFnZS1zdXBwb3J0IG1haW4gLmNvbnRhaW5lciArIC5iYW5uZXIge1xuICAgIG1hcmdpbi10b3A6IDg0cHg7IH1cbiAgI3BhZ2Utc3VwcG9ydCBtYWluIC5jb250YWluZXJfX2hlYWRlciB7XG4gICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyOyB9XG4gICAgI3BhZ2Utc3VwcG9ydCBtYWluIC5jb250YWluZXJfX2hlYWRlciBoZ3JvdXAge1xuICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgICAgbWFyZ2luLWJvdHRvbTogMTZweDtcbiAgICAgIG1heC13aWR0aDogNTIwcHg7IH1cbiAgICAjcGFnZS1zdXBwb3J0IG1haW4gLmNvbnRhaW5lcl9faGVhZGVyIGgyIHtcbiAgICAgIGZvbnQtc2l6ZTogMzJweDsgfSB9XG5cbiNwYWdlLXN1cHBvcnQgLmNhcmQtbGlzdCB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGxpc3Qtc3R5bGUtdHlwZTogbm9uZTtcbiAgbWFyZ2luOiAwIC0yOXB4O1xuICBwYWRkaW5nOiAwOyB9XG4gICNwYWdlLXN1cHBvcnQgLmNhcmQtbGlzdF9fY2FyZCB7XG4gICAgcGFkZGluZzogMCAyOXB4O1xuICAgIGZsZXg6IDAgMCAzMy4zMyU7IH1cbiAgICAjcGFnZS1zdXBwb3J0IC5jYXJkLWxpc3RfX2NhcmQgYSB7XG4gICAgICBjb2xvcjogaW5oZXJpdDsgfVxuICAgICAgI3BhZ2Utc3VwcG9ydCAuY2FyZC1saXN0X19jYXJkIGEsICNwYWdlLXN1cHBvcnQgLmNhcmQtbGlzdF9fY2FyZCBhOmFjdGl2ZSB7XG4gICAgICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTsgfVxuICAgICNwYWdlLXN1cHBvcnQgLmNhcmQtbGlzdF9fY2FyZCBpbWcge1xuICAgICAgd2lkdGg6IDEwMCU7IH1cbiAgICAjcGFnZS1zdXBwb3J0IC5jYXJkLWxpc3RfX2NhcmQgaDMge1xuICAgICAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgICAgIGZvbnQtc2l6ZTogMjRweDtcbiAgICAgIGxpbmUtaGVpZ2h0OiAzMHB4O1xuICAgICAgbGV0dGVyLXNwYWNpbmc6IC0wLjAxZW07XG4gICAgICBjb2xvcjogIzFBMjMyRjtcbiAgICAgIG1hcmdpbi1ib3R0b206IDEwcHg7XG4gICAgICBtYXJnaW4tdG9wOiAyMHB4OyB9XG4gICAgI3BhZ2Utc3VwcG9ydCAuY2FyZC1saXN0X19jYXJkIHAge1xuICAgICAgZm9udC1zaXplOiAxNnB4O1xuICAgICAgbGluZS1oZWlnaHQ6IDI3cHg7XG4gICAgICBsZXR0ZXItc3BhY2luZzogLTAuMDFlbTtcbiAgICAgIGNvbG9yOiAjNjE2RTdFOyB9XG4gICAgI3BhZ2Utc3VwcG9ydCAuY2FyZC1saXN0X19jYXJkIC5saW5rLXRleHQge1xuICAgICAgdHJhbnNpdGlvbjogMC4ycyBjb2xvcjtcbiAgICAgIGZvbnQtc2l6ZTogMTZweDtcbiAgICAgIGxpbmUtaGVpZ2h0OiAyN3B4O1xuICAgICAgbGV0dGVyLXNwYWNpbmc6IC0wLjAxZW07XG4gICAgICBjb2xvcjogIzM4ODBGRjtcbiAgICAgIGRpc3BsYXk6IGlubGluZS1mbGV4O1xuICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsgfVxuICAgICNwYWdlLXN1cHBvcnQgLmNhcmQtbGlzdF9fY2FyZCAubGluay10ZXh0IGlvbi1pY29uIHtcbiAgICAgIHRyYW5zaXRpb246IDAuMnMgdHJhbnNsYXRlO1xuICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoMXB4LCAxcHgpOyB9XG4gICAgI3BhZ2Utc3VwcG9ydCAuY2FyZC1saXN0X19jYXJkIGE6aG92ZXIgLmxpbmstdGV4dCB7XG4gICAgICBjb2xvcjogIzBjNTllMDsgfVxuICAgICNwYWdlLXN1cHBvcnQgLmNhcmQtbGlzdF9fY2FyZCBhOmhvdmVyIC5saW5rLXRleHQgaW9uLWljb24ge1xuICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoM3B4LCAxcHgpOyB9XG4gIEBtZWRpYSAobWF4LXdpZHRoOiA5OTJweCkge1xuICAgICNwYWdlLXN1cHBvcnQgLmNhcmQtbGlzdCB7XG4gICAgICBtYXJnaW46IDAgLTE2cHg7IH1cbiAgICAgICNwYWdlLXN1cHBvcnQgLmNhcmQtbGlzdF9fY2FyZCB7XG4gICAgICAgIHBhZGRpbmc6IDAgMTZweDsgfVxuICAgICAgICAjcGFnZS1zdXBwb3J0IC5jYXJkLWxpc3RfX2NhcmQgaDMge1xuICAgICAgICAgIGZvbnQtc2l6ZTogMjBweDsgfVxuICAgICAgICAjcGFnZS1zdXBwb3J0IC5jYXJkLWxpc3RfX2NhcmQgcCB7XG4gICAgICAgICAgZm9udC1zaXplOiAxNXB4O1xuICAgICAgICAgIGxpbmUtaGVpZ2h0OiAyNXB4OyB9IH1cbiAgQG1lZGlhIChtYXgtd2lkdGg6IDc2OHB4KSB7XG4gICAgI3BhZ2Utc3VwcG9ydCAuY2FyZC1saXN0IHtcbiAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICBtYXgtd2lkdGg6IDQwMHB4O1xuICAgICAgbWFyZ2luLWxlZnQ6IGF1dG87XG4gICAgICBtYXJnaW4tcmlnaHQ6IGF1dG87IH1cbiAgICAgICNwYWdlLXN1cHBvcnQgLmNhcmQtbGlzdF9fY2FyZCB7XG4gICAgICAgIHBhZGRpbmc6IDA7IH1cbiAgICAgICNwYWdlLXN1cHBvcnQgLmNhcmQtbGlzdF9fY2FyZCArIC5jYXJkLWxpc3RfX2NhcmQge1xuICAgICAgICBtYXJnaW4tdG9wOiAzMnB4OyB9IH1cblxuI3BhZ2Utc3VwcG9ydCAubGluay1saXN0IHtcbiAgZGlzcGxheTogZmxleDtcbiAgbGlzdC1zdHlsZS10eXBlOiBub25lO1xuICBtYXJnaW46IDc4cHggMCAwO1xuICBwYWRkaW5nOiAwO1xuICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47IH1cbiAgI3BhZ2Utc3VwcG9ydCAubGluay1saXN0IGEge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyOyB9XG4gICAgI3BhZ2Utc3VwcG9ydCAubGluay1saXN0IGEgc3ZnIHBhdGgge1xuICAgICAgdHJhbnNpdGlvbjogMC4ycyBmaWxsO1xuICAgICAgZmlsbDogIzQxNEQ1QzsgfVxuICAgICNwYWdlLXN1cHBvcnQgLmxpbmstbGlzdCBhOmhvdmVyIHN2ZyBwYXRoIHtcbiAgICAgIGZpbGw6ICMzODgwRkY7IH1cbiAgICAjcGFnZS1zdXBwb3J0IC5saW5rLWxpc3QgYSBzcGFuIHtcbiAgICAgIHRyYW5zaXRpb246IDAuMnMgY29sb3I7XG4gICAgICBwYWRkaW5nLXRvcDogOHB4O1xuICAgICAgZm9udC1zaXplOiAxNnB4O1xuICAgICAgbGluZS1oZWlnaHQ6IDI1cHg7XG4gICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgICBsZXR0ZXItc3BhY2luZzogLTAuMDFlbTtcbiAgICAgIGNvbG9yOiAjNDE0RDVDOyB9XG4gICAgI3BhZ2Utc3VwcG9ydCAubGluay1saXN0IGE6aG92ZXIgc3BhbiB7XG4gICAgICBjb2xvcjogIzM4ODBGRjsgfVxuICBAbWVkaWEgKG1heC13aWR0aDogOTkycHgpIHtcbiAgICAjcGFnZS1zdXBwb3J0IC5saW5rLWxpc3Qge1xuICAgICAgbWFyZ2luOiA1NnB4IDAgMDsgfVxuICAgICAgI3BhZ2Utc3VwcG9ydCAubGluay1saXN0IHN2ZyB7XG4gICAgICAgIGhlaWdodDogMzZweDsgfSB9XG4gIEBtZWRpYSAobWF4LXdpZHRoOiA3NjhweCkge1xuICAgICNwYWdlLXN1cHBvcnQgLmxpbmstbGlzdCB7XG4gICAgICBtYXgtd2lkdGg6IDQ0MHB4O1xuICAgICAgZmxleC13cmFwOiB3cmFwO1xuICAgICAgbWFyZ2luLWxlZnQ6IGF1dG87XG4gICAgICBtYXJnaW4tcmlnaHQ6IGF1dG87IH1cbiAgICAgICNwYWdlLXN1cHBvcnQgLmxpbmstbGlzdCBsaSB7XG4gICAgICAgIGZsZXg6IDAgMCAzMy4zMyU7XG4gICAgICAgIG1hcmdpbi1ib3R0b206IDI4cHg7IH1cbiAgICAgICNwYWdlLXN1cHBvcnQgLmxpbmstbGlzdCBzdmcge1xuICAgICAgICBoZWlnaHQ6IDI0cHg7IH1cbiAgICAgICNwYWdlLXN1cHBvcnQgLmxpbmstbGlzdCBzcGFuIHtcbiAgICAgICAgZm9udC1zaXplOiAxMnB4OyB9IH1cbiAgQG1lZGlhIChtYXgtd2lkdGg6IDQ4MHB4KSB7XG4gICAgI3BhZ2Utc3VwcG9ydCAubGluay1saXN0IGxpIHtcbiAgICAgIGZsZXg6IDAgMCA1MCU7IH0gfVxuXG4jcGFnZS1zdXBwb3J0IC5pdGVtcyB7XG4gIGxpc3Qtc3R5bGU6IG5vbmU7XG4gIG1hcmdpbi10b3A6IDI4cHg7IH1cbiAgQG1lZGlhIChtYXgtd2lkdGg6IDEyMTlweCkge1xuICAgICNwYWdlLXN1cHBvcnQgLml0ZW1zIHtcbiAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWFyb3VuZDsgfSB9XG4gIEBtZWRpYSAobWF4LXdpZHRoOiA5OTFweCkge1xuICAgICNwYWdlLXN1cHBvcnQgLml0ZW1zIHtcbiAgICAgIGRpc3BsYXk6IGJsb2NrOyB9IH1cbiAgI3BhZ2Utc3VwcG9ydCAuaXRlbXMgYSB7XG4gICAgcGFkZGluZzogMTRweCAyM3B4IDE4cHggOTVweDtcbiAgICBtYXJnaW4tcmlnaHQ6IDEzcHg7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgd2lkdGg6IDM2NXB4O1xuICAgIG1hcmdpbi1ib3R0b206IDMwcHg7XG4gICAgdmVydGljYWwtYWxpZ246IHRvcDsgfVxuICAgICNwYWdlLXN1cHBvcnQgLml0ZW1zIGEsICNwYWdlLXN1cHBvcnQgLml0ZW1zIGE6aG92ZXIsICNwYWdlLXN1cHBvcnQgLml0ZW1zIGE6YWN0aXZlIHtcbiAgICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTsgfVxuICAgICNwYWdlLXN1cHBvcnQgLml0ZW1zIGE6bGFzdC1jaGlsZCB7XG4gICAgICBtYXJnaW4tcmlnaHQ6IDA7IH1cbiAgICBAbWVkaWEgKG1heC13aWR0aDogOTkxcHgpIHtcbiAgICAgICNwYWdlLXN1cHBvcnQgLml0ZW1zIGEge1xuICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgICAgbWFyZ2luOiAxOHB4IGF1dG87IH1cbiAgICAgICAgI3BhZ2Utc3VwcG9ydCAuaXRlbXMgYTpsYXN0LWNoaWxkIHtcbiAgICAgICAgICBtYXJnaW4tcmlnaHQ6IGF1dG87IH0gfVxuICAgICNwYWdlLXN1cHBvcnQgLml0ZW1zIGE6OmJlZm9yZSB7XG4gICAgICBib3JkZXItcmFkaXVzOiA0cHg7XG4gICAgICBiYWNrZ3JvdW5kOiB3aGl0ZTtcbiAgICAgIGJveC1zaGFkb3c6IDAgMXB4IDRweCByZ2JhKDAsIDAsIDAsIDAuMTUpO1xuICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgdG9wOiAwO1xuICAgICAgYm90dG9tOiAwO1xuICAgICAgbGVmdDogMDtcbiAgICAgIHJpZ2h0OiAwO1xuICAgICAgY29udGVudDogJyc7XG4gICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgIHRyYW5zaXRpb246IDAuM3MgdHJhbnNmb3JtIGN1YmljLWJlemllcigwLjE1NSwgMS4xMDUsIDAuMjk1LCAxLjEyKSwgMC4zcyBib3gtc2hhZG93OyB9XG4gICAgI3BhZ2Utc3VwcG9ydCAuaXRlbXMgYTpob3ZlciB7XG4gICAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7IH1cbiAgICAgICNwYWdlLXN1cHBvcnQgLml0ZW1zIGE6aG92ZXI6OmJlZm9yZSB7XG4gICAgICAgIGJveC1zaGFkb3c6IDAgNHB4IDEwcHggcmdiYSgwLCAwLCAwLCAwLjE1KTtcbiAgICAgICAgdHJhbnNmb3JtOiBzY2FsZSgxLjA1KTsgfVxuICAgIEBtZWRpYSAobWF4LXdpZHRoOiA3NjdweCkge1xuICAgICAgI3BhZ2Utc3VwcG9ydCAuaXRlbXMgYSB7XG4gICAgICAgIHdpZHRoOiAxMDAlOyB9XG4gICAgICAgICNwYWdlLXN1cHBvcnQgLml0ZW1zIGE6aG92ZXIge1xuICAgICAgICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTsgfVxuICAgICAgICAgICNwYWdlLXN1cHBvcnQgLml0ZW1zIGE6aG92ZXI6OmJlZm9yZSB7XG4gICAgICAgICAgICB0cmFuc2Zvcm06IHNjYWxlKDEpOyB9IH1cbiAgICAjcGFnZS1zdXBwb3J0IC5pdGVtcyBhOjphZnRlciB7XG4gICAgICBiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0O1xuICAgICAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFwiL2ltZy9zdXBwb3J0L3N1cHBvcnQtdGh1bWJuYWlscy5wbmdcIik7XG4gICAgICBiYWNrZ3JvdW5kLXNpemU6IDQ4cHg7XG4gICAgICB3aWR0aDogNDhweDtcbiAgICAgIGhlaWdodDogNDhweDtcbiAgICAgIGNvbnRlbnQ6ICcnO1xuICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICBsZWZ0OiAyOXB4O1xuICAgICAgdG9wOiAzNHB4O1xuICAgICAgdHJhbnNpdGlvbjogMC4zcyB0cmFuc2Zvcm0gY3ViaWMtYmV6aWVyKDAuMTU1LCAxLjEwNSwgMC4yOTUsIDEuMTIpOyB9XG4gICAgI3BhZ2Utc3VwcG9ydCAuaXRlbXMgYS5zbGFjazo6YWZ0ZXIge1xuICAgICAgYmFja2dyb3VuZC1wb3NpdGlvbjogMCAtNDhweDsgfVxuICAgICNwYWdlLXN1cHBvcnQgLml0ZW1zIGEuc286OmFmdGVyIHtcbiAgICAgIGJhY2tncm91bmQtcG9zaXRpb246IDAgLTk2cHg7IH1cbiAgICAjcGFnZS1zdXBwb3J0IC5pdGVtcyBhLmFjY291bnQ6OmFmdGVyIHtcbiAgICAgIGJhY2tncm91bmQtcG9zaXRpb246IDAgLTE0NHB4OyB9XG4gICAgI3BhZ2Utc3VwcG9ydCAuaXRlbXMgYS5idWc6OmFmdGVyIHtcbiAgICAgIGJhY2tncm91bmQtcG9zaXRpb246IDAgLTE5MnB4OyB9XG4gICAgI3BhZ2Utc3VwcG9ydCAuaXRlbXMgYS50cm91Ymxlc2hvb3Rpbmc6OmFmdGVyIHtcbiAgICAgIGJhY2tncm91bmQtcG9zaXRpb246IDAgLTI0MHB4OyB9XG4gICAgI3BhZ2Utc3VwcG9ydCAuaXRlbXMgYS5yZXNvdXJjZXM6OmFmdGVyIHtcbiAgICAgIGJhY2tncm91bmQtcG9zaXRpb246IDAgLTI4OHB4OyB9XG4gICAgI3BhZ2Utc3VwcG9ydCAuaXRlbXMgYS5naXRodWI6OmFmdGVyIHtcbiAgICAgIGJhY2tncm91bmQtcG9zaXRpb246IDAgLTMzNnB4OyB9XG4gICAgI3BhZ2Utc3VwcG9ydCAuaXRlbXMgYS5mYXE6OmFmdGVyIHtcbiAgICAgIGJhY2tncm91bmQtcG9zaXRpb246IDAgLTM4NHB4OyB9XG4gICAgI3BhZ2Utc3VwcG9ydCAuaXRlbXMgYSBoMyB7XG4gICAgICBjb2xvcjogIzI3MmEyZjtcbiAgICAgIGZvbnQtc2l6ZTogMTZweDtcbiAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgIGxldHRlci1zcGFjaW5nOiAtLjAyZW07XG4gICAgICBtYXJnaW4tYm90dG9tOiA4cHg7IH1cbiAgICAjcGFnZS1zdXBwb3J0IC5pdGVtcyBhIHAge1xuICAgICAgY29sb3I6ICM4OTg5ODk7XG4gICAgICBmb250LXNpemU6IDE0cHg7XG4gICAgICBmb250LXdlaWdodDogNDAwO1xuICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICAgbGluZS1oZWlnaHQ6IDEuNDsgfVxuXG4jcGFnZS1zdXBwb3J0IC5iYW5uZXIge1xuICBiYWNrZ3JvdW5kOiAjMTgyNjNFO1xuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXCIvaW1nL3N1cHBvcnQvc3VwcG9ydC1iYW5uZXItYmcuanBnXCIpO1xuICBiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0O1xuICBiYWNrZ3JvdW5kLXNpemU6IGNvdmVyO1xuICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiBjZW50ZXI7IH1cbiAgI3BhZ2Utc3VwcG9ydCAuYmFubmVyIC5jb250YWluZXIge1xuICAgIG1hcmdpbi10b3A6IDA7IH1cbiAgI3BhZ2Utc3VwcG9ydCAuYmFubmVyIGhncm91cCB7XG4gICAgbWFyZ2luLXRvcDogMDtcbiAgICBwYWRkaW5nOiA4NnB4IDA7XG4gICAgY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC45NSk7XG4gICAgdGV4dC1hbGlnbjogbGVmdDtcbiAgICBtYXgtd2lkdGg6IDQzMHB4OyB9XG4gICAgI3BhZ2Utc3VwcG9ydCAuYmFubmVyIGhncm91cCBzdHJvbmcge1xuICAgICAgY29sb3I6IHdoaXRlO1xuICAgICAgZm9udC13ZWlnaHQ6IDYwMDsgfVxuICAgICNwYWdlLXN1cHBvcnQgLmJhbm5lciBoZ3JvdXAgaDEge1xuICAgICAgZm9udC1zaXplOiA0MHB4O1xuICAgICAgbGluZS1oZWlnaHQ6IDUwcHg7XG4gICAgICBsZXR0ZXItc3BhY2luZzogLTAuMDNlbTtcbiAgICAgIGNvbG9yOiAjRkZGRkZGOyB9XG4gICAgI3BhZ2Utc3VwcG9ydCAuYmFubmVyIGhncm91cCBwLFxuICAgICNwYWdlLXN1cHBvcnQgLmJhbm5lciBoZ3JvdXAgYSB7XG4gICAgICBmb250LWZhbWlseTogXCJJbnRlclwiLCBcIkludGVyIFVJXCIsIEhlbHZldGljYSwgQXJpYWwsIHNhbnMtc2VyaWY7IH1cbiAgICAjcGFnZS1zdXBwb3J0IC5iYW5uZXIgaGdyb3VwIHAge1xuICAgICAgZm9udC1zaXplOiAyMHB4O1xuICAgICAgbGluZS1oZWlnaHQ6IDMxcHg7XG4gICAgICBsZXR0ZXItc3BhY2luZzogLTAuMDJlbTtcbiAgICAgIGNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuOCk7IH1cbiAgICAjcGFnZS1zdXBwb3J0IC5iYW5uZXIgaGdyb3VwIGEge1xuICAgICAgdHJhbnNpdGlvbjogMC4ycyBhbGw7XG4gICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7XG4gICAgICBmb250LXNpemU6IDE5cHg7XG4gICAgICBsaW5lLWhlaWdodDogMzJweDtcbiAgICAgIGxldHRlci1zcGFjaW5nOiAtMC4wMmVtO1xuICAgICAgY29sb3I6ICM2MzlDRkY7IH1cbiAgICAgICNwYWdlLXN1cHBvcnQgLmJhbm5lciBoZ3JvdXAgYSBpb24taWNvbiB7XG4gICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlKDFweCwgMXB4KTsgfVxuICAgICAgI3BhZ2Utc3VwcG9ydCAuYmFubmVyIGhncm91cCBhOmhvdmVyIHtcbiAgICAgICAgY29sb3I6ICM3MGEzZmQ7IH1cbiAgICAgICAgI3BhZ2Utc3VwcG9ydCAuYmFubmVyIGhncm91cCBhOmhvdmVyIGlvbi1pY29uIHtcbiAgICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgzcHgsIDFweCk7IH1cbiAgQG1lZGlhIChtYXgtd2lkdGg6IDc2OHB4KSB7XG4gICAgI3BhZ2Utc3VwcG9ydCAuYmFubmVyIGhncm91cCB7XG4gICAgICBtYXJnaW4tbGVmdDogYXV0bztcbiAgICAgIG1hcmdpbi1yaWdodDogYXV0bztcbiAgICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsgfSB9XG5cbiNwYWdlLXN1cHBvcnQgc2VjdGlvbi5uZXdzbGV0dGVyLXNpZ251cCB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNGNkY4RkI7IH1cbiAgI3BhZ2Utc3VwcG9ydCBzZWN0aW9uLm5ld3NsZXR0ZXItc2lnbnVwIC5jb250YWluZXIge1xuICAgIG1hcmdpbi10b3A6IDA7XG4gICAgcGFkZGluZy10b3A6IDEyMHB4O1xuICAgIHBhZGRpbmctYm90dG9tOiAxMjBweDsgfVxuICAjcGFnZS1zdXBwb3J0IHNlY3Rpb24ubmV3c2xldHRlci1zaWdudXAgLmZsZXgge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xuICAgIGFsaWduLWl0ZW1zOiBmbGV4LWVuZDsgfVxuICAjcGFnZS1zdXBwb3J0IHNlY3Rpb24ubmV3c2xldHRlci1zaWdudXAgaGdyb3VwIHtcbiAgICBwYWRkaW5nLXJpZ2h0OiA4MHB4OyB9XG4gICAgI3BhZ2Utc3VwcG9ydCBzZWN0aW9uLm5ld3NsZXR0ZXItc2lnbnVwIGhncm91cCBoMSB7XG4gICAgICBmb250LXdlaWdodDogNTAwO1xuICAgICAgZm9udC1zaXplOiAyOHB4O1xuICAgICAgbGluZS1oZWlnaHQ6IG5vcm1hbDtcbiAgICAgIGxldHRlci1zcGFjaW5nOiAtMC4wM2VtO1xuICAgICAgY29sb3I6ICMzODgwRkY7XG4gICAgICBtYXJnaW4tYm90dG9tOiAwOyB9XG4gICAgI3BhZ2Utc3VwcG9ydCBzZWN0aW9uLm5ld3NsZXR0ZXItc2lnbnVwIGhncm91cCBwIHtcbiAgICAgIGZvbnQtZmFtaWx5OiBcIkVpbmFcIiwgXCJIZWx2ZXRpY2EgTmV1ZVwiLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7XG4gICAgICBmb250LXNpemU6IDIwcHg7XG4gICAgICBsaW5lLWhlaWdodDogMzZweDtcbiAgICAgIGxldHRlci1zcGFjaW5nOiAtMC4wMmVtO1xuICAgICAgY29sb3I6ICM3Mzg0OUE7XG4gICAgICBtYXJnaW4tYm90dG9tOiAwOyB9XG4gICNwYWdlLXN1cHBvcnQgc2VjdGlvbi5uZXdzbGV0dGVyLXNpZ251cCBpb25pYy1uZXdzbGV0dGVyLXNpZ251cCB7XG4gICAgaGVpZ2h0OiA1MHB4O1xuICAgIGZsZXg6IDE7IH1cbiAgICAjcGFnZS1zdXBwb3J0IHNlY3Rpb24ubmV3c2xldHRlci1zaWdudXAgaW9uaWMtbmV3c2xldHRlci1zaWdudXAgaW5wdXQge1xuICAgICAgYmFja2dyb3VuZDogI2ZmZjsgfVxuICBAbWVkaWEgKG1heC13aWR0aDogNzY4cHgpIHtcbiAgICAjcGFnZS1zdXBwb3J0IHNlY3Rpb24ubmV3c2xldHRlci1zaWdudXAgLmZsZXgge1xuICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7IH1cbiAgICAjcGFnZS1zdXBwb3J0IHNlY3Rpb24ubmV3c2xldHRlci1zaWdudXAgaGdyb3VwIHtcbiAgICAgIHBhZGRpbmctcmlnaHQ6IDA7XG4gICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgICBtYXJnaW4tbGVmdDogYXV0bztcbiAgICAgIG1hcmdpbi1yaWdodDogYXV0bzsgfVxuICAgICNwYWdlLXN1cHBvcnQgc2VjdGlvbi5uZXdzbGV0dGVyLXNpZ251cCAuY29udGFpbmVyIHtcbiAgICAgIHBhZGRpbmctdG9wOiA2MHB4O1xuICAgICAgcGFkZGluZy1ib3R0b206IDk4cHg7IH0gfVxuIl19 */\n"
  },
  {
    "path": "content/css/pages/survey/2017.css",
    "content": ".survey-layout .navbar + .banner {\n  background: linear-gradient(to right, #1e6fff 0%, #0499ff 100%);\n  background-size: 100%;\n  position: relative; }\n  .survey-layout .navbar + .banner canvas {\n    position: absolute;\n    top: 0;\n    left: 0;\n    bottom: 0;\n    width: 100%;\n    -webkit-animation: 10s fadeIn;\n            animation: 10s fadeIn;\n    -webkit-animation-fill-mode: forwards;\n            animation-fill-mode: forwards;\n    -webkit-animation-delay: 1s;\n            animation-delay: 1s;\n    opacity: 0; }\n  .survey-layout .navbar + .banner hgroup {\n    padding-bottom: 112px;\n    padding-top: 48px; }\n  .survey-layout .navbar + .banner h2 {\n    z-index: 1;\n    position: relative;\n    opacity: 0;\n    -webkit-animation: 1s fadeInUp;\n            animation: 1s fadeInUp;\n    -webkit-animation-delay: 2s;\n            animation-delay: 2s;\n    -webkit-animation-fill-mode: forwards;\n            animation-fill-mode: forwards; }\n    .survey-layout .navbar + .banner h2 svg {\n      margin: 23px auto 15px;\n      width: 32px;\n      display: block; }\n  .survey-layout .navbar + .banner h1 {\n    font-size: 62px;\n    margin-top: 27px;\n    margin-bottom: 14px;\n    letter-spacing: -.025em;\n    font-weight: 600;\n    -webkit-animation: 1s fadeInUp;\n            animation: 1s fadeInUp;\n    -webkit-animation-delay: 2.2s;\n            animation-delay: 2.2s;\n    -webkit-animation-fill-mode: forwards;\n            animation-fill-mode: forwards;\n    opacity: 0; }\n  .survey-layout .navbar + .banner p {\n    font-size: 22px;\n    color: rgba(255, 255, 255, 0.8);\n    -webkit-animation: 1s fadeInUp;\n            animation: 1s fadeInUp;\n    -webkit-animation-delay: 2.4s;\n            animation-delay: 2.4s;\n    -webkit-animation-fill-mode: forwards;\n            animation-fill-mode: forwards;\n    letter-spacing: .01em;\n    opacity: 0; }\n  .survey-layout .navbar + .banner .bar {\n    background: #fff; }\n    .survey-layout .navbar + .banner .bar ul li a {\n      padding: 28px 18px 22px;\n      margin: 0 15px -2px; }\n      @media (max-width: 767px) {\n        .survey-layout .navbar + .banner .bar ul li a {\n          padding-left: 0;\n          padding-right: 0;\n          margin-left: 5px;\n          margin-right: 5px; } }\n    @supports ((-webkit-backdrop-filter: blur(30px)) or (backdrop-filter: blur(30px))) {\n      .survey-layout .navbar + .banner .bar {\n        background: rgba(255, 255, 255, 0.8);\n        -webkit-backdrop-filter: blur(30px);\n                backdrop-filter: blur(30px); } }\n    .survey-layout .navbar + .banner .bar:not(.affix) {\n      box-shadow: 0 1px 4px rgba(0, 0, 0, 0.05), 0 1px 0 rgba(0, 0, 0, 0.05);\n      position: absolute; }\n\n.survey-layout article {\n  padding-top: 64px; }\n  .survey-layout article > hgroup .container {\n    max-width: 680px;\n    margin: 32px auto 49px; }\n    .survey-layout article > hgroup .container p {\n      color: #24282e;\n      font-size: 23px;\n      line-height: 1.75em;\n      margin-bottom: 1.73em;\n      letter-spacing: -.001em; }\n    .survey-layout article > hgroup .container h2 {\n      margin-top: 64px; }\n    .survey-layout article > hgroup .container strong {\n      font-weight: 600; }\n  .survey-layout article h3 {\n    font-weight: 700;\n    letter-spacing: -.04em;\n    margin-top: 64px;\n    margin-bottom: 0;\n    padding: 31px 16px 29px;\n    font-size: 32px; }\n    .survey-layout article h3::before, .survey-layout article h3::after {\n      display: none; }\n\n.survey-layout section {\n  padding-bottom: 71px; }\n  .survey-layout section .container {\n    position: relative;\n    max-width: 962px; }\n  .survey-layout section h4 {\n    font-weight: 600;\n    font-size: 20px;\n    letter-spacing: -0.02em; }\n  .survey-layout section p,\n  .survey-layout section h4 {\n    padding: 0 16px;\n    margin: 0 auto 30px;\n    line-height: 1.69em;\n    letter-spacing: -.018em; }\n    .survey-layout section p + h4,\n    .survey-layout section h4 + h4 {\n      margin-top: 48px; }\n  .survey-layout section p {\n    font-size: 18px;\n    line-height: 1.75em; }\n  .survey-layout section .row + .row {\n    padding-top: 32px; }\n\n.survey-layout .dark {\n  background: #111925; }\n  .survey-layout .dark h2,\n  .survey-layout .dark h3,\n  .survey-layout .dark h4 {\n    color: rgba(255, 255, 255, 0.95); }\n  .survey-layout .dark p {\n    color: rgba(255, 255, 255, 0.8); }\n  .survey-layout .dark figure strong {\n    color: #ced6e0; }\n\n.survey-layout .intro::before {\n  -webkit-animation-delay: 3s;\n          animation-delay: 3s; }\n\n.survey-layout .data .container::before {\n  display: none; }\n\n.survey-layout .data h4 {\n  margin-bottom: 8px; }\n\n.survey-layout .navbar + .banner h2 {\n  font-weight: 700;\n  color: rgba(0, 0, 0, 0.5);\n  font-size: 19px;\n  letter-spacing: .05em; }\n  .survey-layout .navbar + .banner h2 svg {\n    fill-opacity: .5;\n    display: block; }\n\n.survey-layout article > hgroup .container::before,\n.survey-layout article > section .container::before {\n  background: url(\"/img/survey/header-thumbnails.png\");\n  background-size: 96px;\n  width: 96px;\n  height: 96px;\n  content: '';\n  display: block;\n  margin: 92px auto 36px; }\n\n.survey-layout article > section .container::before {\n  position: absolute;\n  top: -113px;\n  left: 24px;\n  margin: 0; }\n\n.survey-layout article > hgroup .container {\n  font-family: \"Adobe Caslon\", Georgia, Times, \"Times New Roman\", serif; }\n\n#insights .container::before {\n  -webkit-animation: 1s fadeInUp;\n          animation: 1s fadeInUp;\n  -webkit-animation-delay: 3.5s;\n          animation-delay: 3.5s;\n  -webkit-animation-fill-mode: forwards;\n          animation-fill-mode: forwards;\n  opacity: 0; }\n\n#insights .container p {\n  -webkit-animation: 1s fadeInUp;\n          animation: 1s fadeInUp;\n  -webkit-animation-delay: 3.75s;\n          animation-delay: 3.75s;\n  -webkit-animation-fill-mode: forwards;\n          animation-fill-mode: forwards;\n  opacity: 0; }\n\n#profile .container::before {\n  background-position: 0 -96px; }\n\n@media (max-width: 991px) {\n  #profile aside {\n    text-align: center; } }\n\n#profile .factoid {\n  width: 200px;\n  background: #e9edf8;\n  border-radius: 32px;\n  display: inline-block;\n  margin: 34px -7px 0px 15px;\n  padding: 33px 19px 12px; }\n  #profile .factoid strong {\n    color: #4a8bfc;\n    font-weight: 500;\n    font-size: 48px;\n    text-align: center;\n    display: block;\n    letter-spacing: -.05em;\n    margin-bottom: -2px; }\n  #profile .factoid p {\n    font-size: 14px;\n    line-height: 1.4em; }\n\n#trends {\n  background: #f6f8fc; }\n  #trends .container::before {\n    background-position: 0 -192px; }\n  #trends figure {\n    display: block;\n    margin: 94px auto 33px;\n    padding-left: 35px; }\n    #trends figure:first-child {\n      margin-top: 99px; }\n    #trends figure img {\n      margin-bottom: 8px; }\n    #trends figure strong {\n      font-size: 48px;\n      color: #4a8bfc;\n      font-weight: 400;\n      letter-spacing: -.01em; }\n    #trends figure p {\n      padding-left: 0;\n      padding-right: 0;\n      margin-left: 0;\n      font-size: 14px;\n      font-weight: 500;\n      max-width: 142px;\n      margin-top: -4px;\n      line-height: 1.48em; }\n    #trends figure:last-child img {\n      margin-left: 17px; }\n  @media (max-width: 991px) {\n    #trends aside {\n      text-align: center; }\n      #trends aside figure,\n      #trends aside figure:first-child {\n        display: inline-block;\n        margin-top: 50px;\n        vertical-align: top; } }\n  @media (max-width: 767px) {\n    #trends aside {\n      display: -ms-flexbox;\n      display: flex;\n      -ms-flex-pack: distribute;\n          justify-content: space-around; }\n      #trends aside figure {\n        padding-left: 0; } }\n\n#tools {\n  background: #161920; }\n  #tools .container::before {\n    background-position: 0 -288px; }\n  #tools .tools {\n    text-align: center;\n    padding: 0 24px 0 0;\n    display: -ms-flexbox;\n    display: flex;\n    -ms-flex-pack: justify;\n        justify-content: space-between; }\n    #tools .tools li {\n      background: no-repeat url(\"/img/survey/tools-icons.png\");\n      background-size: 70px;\n      width: 70px;\n      height: 70px;\n      display: inline-block; }\n      #tools .tools li.node {\n        background-position: 0 -70px; }\n      #tools .tools li.analytics {\n        background-position: 0 -140px; }\n      #tools .tools li.vscode {\n        background-position: 0 -210px; }\n      #tools .tools li.aws {\n        background-position: 0 -280px; }\n    @media (max-width: 767px) {\n      #tools .tools {\n        padding-right: 0; } }\n\n#habbits {\n  background: #4a8bfc; }\n  #habbits .container::before {\n    background-position: 0 -384px; }\n\n#big-picture {\n  background: #f6f8fc; }\n  #big-picture .container::before {\n    background-position: 0 -480px; }\n  #big-picture p {\n    -webkit-animation-delay: 2s;\n            animation-delay: 2s; }\n\n/*# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIjIwMTcuY3NzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0VBQ0UsZ0VBQWdFO0VBQ2hFLHNCQUFzQjtFQUN0QixtQkFBbUIsRUFBRTtFQUNyQjtJQUNFLG1CQUFtQjtJQUNuQixPQUFPO0lBQ1AsUUFBUTtJQUNSLFVBQVU7SUFDVixZQUFZO0lBQ1osOEJBQXNCO1lBQXRCLHNCQUFzQjtJQUN0QixzQ0FBOEI7WUFBOUIsOEJBQThCO0lBQzlCLDRCQUFvQjtZQUFwQixvQkFBb0I7SUFDcEIsV0FBVyxFQUFFO0VBQ2Y7SUFDRSxzQkFBc0I7SUFDdEIsa0JBQWtCLEVBQUU7RUFDdEI7SUFDRSxXQUFXO0lBQ1gsbUJBQW1CO0lBQ25CLFdBQVc7SUFDWCwrQkFBdUI7WUFBdkIsdUJBQXVCO0lBQ3ZCLDRCQUFvQjtZQUFwQixvQkFBb0I7SUFDcEIsc0NBQThCO1lBQTlCLDhCQUE4QixFQUFFO0lBQ2hDO01BQ0UsdUJBQXVCO01BQ3ZCLFlBQVk7TUFDWixlQUFlLEVBQUU7RUFDckI7SUFDRSxnQkFBZ0I7SUFDaEIsaUJBQWlCO0lBQ2pCLG9CQUFvQjtJQUNwQix3QkFBd0I7SUFDeEIsaUJBQWlCO0lBQ2pCLCtCQUF1QjtZQUF2Qix1QkFBdUI7SUFDdkIsOEJBQXNCO1lBQXRCLHNCQUFzQjtJQUN0QixzQ0FBOEI7WUFBOUIsOEJBQThCO0lBQzlCLFdBQVcsRUFBRTtFQUNmO0lBQ0UsZ0JBQWdCO0lBQ2hCLGdDQUFnQztJQUNoQywrQkFBdUI7WUFBdkIsdUJBQXVCO0lBQ3ZCLDhCQUFzQjtZQUF0QixzQkFBc0I7SUFDdEIsc0NBQThCO1lBQTlCLDhCQUE4QjtJQUM5QixzQkFBc0I7SUFDdEIsV0FBVyxFQUFFO0VBQ2Y7SUFDRSxpQkFBaUIsRUFBRTtJQUNuQjtNQUNFLHdCQUF3QjtNQUN4QixvQkFBb0IsRUFBRTtNQUN0QjtRQUNFO1VBQ0UsZ0JBQWdCO1VBQ2hCLGlCQUFpQjtVQUNqQixpQkFBaUI7VUFDakIsa0JBQWtCLEVBQUUsRUFBRTtJQUM1QjtNQUNFO1FBQ0UscUNBQXFDO1FBQ3JDLG9DQUE0QjtnQkFBNUIsNEJBQTRCLEVBQUUsRUFBRTtJQUNwQztNQUNFLHVFQUF1RTtNQUN2RSxtQkFBbUIsRUFBRTs7QUFFM0I7RUFDRSxrQkFBa0IsRUFBRTtFQUNwQjtJQUNFLGlCQUFpQjtJQUNqQix1QkFBdUIsRUFBRTtJQUN6QjtNQUNFLGVBQWU7TUFDZixnQkFBZ0I7TUFDaEIsb0JBQW9CO01BQ3BCLHNCQUFzQjtNQUN0Qix3QkFBd0IsRUFBRTtJQUM1QjtNQUNFLGlCQUFpQixFQUFFO0lBQ3JCO01BQ0UsaUJBQWlCLEVBQUU7RUFDdkI7SUFDRSxpQkFBaUI7SUFDakIsdUJBQXVCO0lBQ3ZCLGlCQUFpQjtJQUNqQixpQkFBaUI7SUFDakIsd0JBQXdCO0lBQ3hCLGdCQUFnQixFQUFFO0lBQ2xCO01BQ0UsY0FBYyxFQUFFOztBQUV0QjtFQUNFLHFCQUFxQixFQUFFO0VBQ3ZCO0lBQ0UsbUJBQW1CO0lBQ25CLGlCQUFpQixFQUFFO0VBQ3JCO0lBQ0UsaUJBQWlCO0lBQ2pCLGdCQUFnQjtJQUNoQix3QkFBd0IsRUFBRTtFQUM1Qjs7SUFFRSxnQkFBZ0I7SUFDaEIsb0JBQW9CO0lBQ3BCLG9CQUFvQjtJQUNwQix3QkFBd0IsRUFBRTtJQUMxQjs7TUFFRSxpQkFBaUIsRUFBRTtFQUN2QjtJQUNFLGdCQUFnQjtJQUNoQixvQkFBb0IsRUFBRTtFQUN4QjtJQUNFLGtCQUFrQixFQUFFOztBQUV4QjtFQUNFLG9CQUFvQixFQUFFO0VBQ3RCOzs7SUFHRSxpQ0FBaUMsRUFBRTtFQUNyQztJQUNFLGdDQUFnQyxFQUFFO0VBQ3BDO0lBQ0UsZUFBZSxFQUFFOztBQUVyQjtFQUNFLDRCQUFvQjtVQUFwQixvQkFBb0IsRUFBRTs7QUFFeEI7RUFDRSxjQUFjLEVBQUU7O0FBRWxCO0VBQ0UsbUJBQW1CLEVBQUU7O0FBRXZCO0VBQ0UsaUJBQWlCO0VBQ2pCLDBCQUEwQjtFQUMxQixnQkFBZ0I7RUFDaEIsc0JBQXNCLEVBQUU7RUFDeEI7SUFDRSxpQkFBaUI7SUFDakIsZUFBZSxFQUFFOztBQUVyQjs7RUFFRSxxREFBcUQ7RUFDckQsc0JBQXNCO0VBQ3RCLFlBQVk7RUFDWixhQUFhO0VBQ2IsWUFBWTtFQUNaLGVBQWU7RUFDZix1QkFBdUIsRUFBRTs7QUFFM0I7RUFDRSxtQkFBbUI7RUFDbkIsWUFBWTtFQUNaLFdBQVc7RUFDWCxVQUFVLEVBQUU7O0FBRWQ7RUFDRSxzRUFBc0UsRUFBRTs7QUFFMUU7RUFDRSwrQkFBdUI7VUFBdkIsdUJBQXVCO0VBQ3ZCLDhCQUFzQjtVQUF0QixzQkFBc0I7RUFDdEIsc0NBQThCO1VBQTlCLDhCQUE4QjtFQUM5QixXQUFXLEVBQUU7O0FBRWY7RUFDRSwrQkFBdUI7VUFBdkIsdUJBQXVCO0VBQ3ZCLCtCQUF1QjtVQUF2Qix1QkFBdUI7RUFDdkIsc0NBQThCO1VBQTlCLDhCQUE4QjtFQUM5QixXQUFXLEVBQUU7O0FBRWY7RUFDRSw2QkFBNkIsRUFBRTs7QUFFakM7RUFDRTtJQUNFLG1CQUFtQixFQUFFLEVBQUU7O0FBRTNCO0VBQ0UsYUFBYTtFQUNiLG9CQUFvQjtFQUNwQixvQkFBb0I7RUFDcEIsc0JBQXNCO0VBQ3RCLDJCQUEyQjtFQUMzQix3QkFBd0IsRUFBRTtFQUMxQjtJQUNFLGVBQWU7SUFDZixpQkFBaUI7SUFDakIsZ0JBQWdCO0lBQ2hCLG1CQUFtQjtJQUNuQixlQUFlO0lBQ2YsdUJBQXVCO0lBQ3ZCLG9CQUFvQixFQUFFO0VBQ3hCO0lBQ0UsZ0JBQWdCO0lBQ2hCLG1CQUFtQixFQUFFOztBQUV6QjtFQUNFLG9CQUFvQixFQUFFO0VBQ3RCO0lBQ0UsOEJBQThCLEVBQUU7RUFDbEM7SUFDRSxlQUFlO0lBQ2YsdUJBQXVCO0lBQ3ZCLG1CQUFtQixFQUFFO0lBQ3JCO01BQ0UsaUJBQWlCLEVBQUU7SUFDckI7TUFDRSxtQkFBbUIsRUFBRTtJQUN2QjtNQUNFLGdCQUFnQjtNQUNoQixlQUFlO01BQ2YsaUJBQWlCO01BQ2pCLHVCQUF1QixFQUFFO0lBQzNCO01BQ0UsZ0JBQWdCO01BQ2hCLGlCQUFpQjtNQUNqQixlQUFlO01BQ2YsZ0JBQWdCO01BQ2hCLGlCQUFpQjtNQUNqQixpQkFBaUI7TUFDakIsaUJBQWlCO01BQ2pCLG9CQUFvQixFQUFFO0lBQ3hCO01BQ0Usa0JBQWtCLEVBQUU7RUFDeEI7SUFDRTtNQUNFLG1CQUFtQixFQUFFO01BQ3JCOztRQUVFLHNCQUFzQjtRQUN0QixpQkFBaUI7UUFDakIsb0JBQW9CLEVBQUUsRUFBRTtFQUM5QjtJQUNFO01BQ0UscUJBQWM7TUFBZCxjQUFjO01BQ2QsMEJBQThCO1VBQTlCLDhCQUE4QixFQUFFO01BQ2hDO1FBQ0UsZ0JBQWdCLEVBQUUsRUFBRTs7QUFFNUI7RUFDRSxvQkFBb0IsRUFBRTtFQUN0QjtJQUNFLDhCQUE4QixFQUFFO0VBQ2xDO0lBQ0UsbUJBQW1CO0lBQ25CLG9CQUFvQjtJQUNwQixxQkFBYztJQUFkLGNBQWM7SUFDZCx1QkFBK0I7UUFBL0IsK0JBQStCLEVBQUU7SUFDakM7TUFDRSx5REFBeUQ7TUFDekQsc0JBQXNCO01BQ3RCLFlBQVk7TUFDWixhQUFhO01BQ2Isc0JBQXNCLEVBQUU7TUFDeEI7UUFDRSw2QkFBNkIsRUFBRTtNQUNqQztRQUNFLDhCQUE4QixFQUFFO01BQ2xDO1FBQ0UsOEJBQThCLEVBQUU7TUFDbEM7UUFDRSw4QkFBOEIsRUFBRTtJQUNwQztNQUNFO1FBQ0UsaUJBQWlCLEVBQUUsRUFBRTs7QUFFN0I7RUFDRSxvQkFBb0IsRUFBRTtFQUN0QjtJQUNFLDhCQUE4QixFQUFFOztBQUVwQztFQUNFLG9CQUFvQixFQUFFO0VBQ3RCO0lBQ0UsOEJBQThCLEVBQUU7RUFDbEM7SUFDRSw0QkFBb0I7WUFBcEIsb0JBQW9CLEVBQUUiLCJmaWxlIjoicGFnZXMvc3VydmV5LzIwMTcuY3NzIiwic291cmNlc0NvbnRlbnQiOlsiLnN1cnZleS1sYXlvdXQgLm5hdmJhciArIC5iYW5uZXIge1xuICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQodG8gcmlnaHQsICMxZTZmZmYgMCUsICMwNDk5ZmYgMTAwJSk7XG4gIGJhY2tncm91bmQtc2l6ZTogMTAwJTtcbiAgcG9zaXRpb246IHJlbGF0aXZlOyB9XG4gIC5zdXJ2ZXktbGF5b3V0IC5uYXZiYXIgKyAuYmFubmVyIGNhbnZhcyB7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIHRvcDogMDtcbiAgICBsZWZ0OiAwO1xuICAgIGJvdHRvbTogMDtcbiAgICB3aWR0aDogMTAwJTtcbiAgICBhbmltYXRpb246IDEwcyBmYWRlSW47XG4gICAgYW5pbWF0aW9uLWZpbGwtbW9kZTogZm9yd2FyZHM7XG4gICAgYW5pbWF0aW9uLWRlbGF5OiAxcztcbiAgICBvcGFjaXR5OiAwOyB9XG4gIC5zdXJ2ZXktbGF5b3V0IC5uYXZiYXIgKyAuYmFubmVyIGhncm91cCB7XG4gICAgcGFkZGluZy1ib3R0b206IDExMnB4O1xuICAgIHBhZGRpbmctdG9wOiA0OHB4OyB9XG4gIC5zdXJ2ZXktbGF5b3V0IC5uYXZiYXIgKyAuYmFubmVyIGgyIHtcbiAgICB6LWluZGV4OiAxO1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICBvcGFjaXR5OiAwO1xuICAgIGFuaW1hdGlvbjogMXMgZmFkZUluVXA7XG4gICAgYW5pbWF0aW9uLWRlbGF5OiAycztcbiAgICBhbmltYXRpb24tZmlsbC1tb2RlOiBmb3J3YXJkczsgfVxuICAgIC5zdXJ2ZXktbGF5b3V0IC5uYXZiYXIgKyAuYmFubmVyIGgyIHN2ZyB7XG4gICAgICBtYXJnaW46IDIzcHggYXV0byAxNXB4O1xuICAgICAgd2lkdGg6IDMycHg7XG4gICAgICBkaXNwbGF5OiBibG9jazsgfVxuICAuc3VydmV5LWxheW91dCAubmF2YmFyICsgLmJhbm5lciBoMSB7XG4gICAgZm9udC1zaXplOiA2MnB4O1xuICAgIG1hcmdpbi10b3A6IDI3cHg7XG4gICAgbWFyZ2luLWJvdHRvbTogMTRweDtcbiAgICBsZXR0ZXItc3BhY2luZzogLS4wMjVlbTtcbiAgICBmb250LXdlaWdodDogNjAwO1xuICAgIGFuaW1hdGlvbjogMXMgZmFkZUluVXA7XG4gICAgYW5pbWF0aW9uLWRlbGF5OiAyLjJzO1xuICAgIGFuaW1hdGlvbi1maWxsLW1vZGU6IGZvcndhcmRzO1xuICAgIG9wYWNpdHk6IDA7IH1cbiAgLnN1cnZleS1sYXlvdXQgLm5hdmJhciArIC5iYW5uZXIgcCB7XG4gICAgZm9udC1zaXplOiAyMnB4O1xuICAgIGNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuOCk7XG4gICAgYW5pbWF0aW9uOiAxcyBmYWRlSW5VcDtcbiAgICBhbmltYXRpb24tZGVsYXk6IDIuNHM7XG4gICAgYW5pbWF0aW9uLWZpbGwtbW9kZTogZm9yd2FyZHM7XG4gICAgbGV0dGVyLXNwYWNpbmc6IC4wMWVtO1xuICAgIG9wYWNpdHk6IDA7IH1cbiAgLnN1cnZleS1sYXlvdXQgLm5hdmJhciArIC5iYW5uZXIgLmJhciB7XG4gICAgYmFja2dyb3VuZDogI2ZmZjsgfVxuICAgIC5zdXJ2ZXktbGF5b3V0IC5uYXZiYXIgKyAuYmFubmVyIC5iYXIgdWwgbGkgYSB7XG4gICAgICBwYWRkaW5nOiAyOHB4IDE4cHggMjJweDtcbiAgICAgIG1hcmdpbjogMCAxNXB4IC0ycHg7IH1cbiAgICAgIEBtZWRpYSAobWF4LXdpZHRoOiA3NjdweCkge1xuICAgICAgICAuc3VydmV5LWxheW91dCAubmF2YmFyICsgLmJhbm5lciAuYmFyIHVsIGxpIGEge1xuICAgICAgICAgIHBhZGRpbmctbGVmdDogMDtcbiAgICAgICAgICBwYWRkaW5nLXJpZ2h0OiAwO1xuICAgICAgICAgIG1hcmdpbi1sZWZ0OiA1cHg7XG4gICAgICAgICAgbWFyZ2luLXJpZ2h0OiA1cHg7IH0gfVxuICAgIEBzdXBwb3J0cyAoYmFja2Ryb3AtZmlsdGVyOiBibHVyKDMwcHgpKSB7XG4gICAgICAuc3VydmV5LWxheW91dCAubmF2YmFyICsgLmJhbm5lciAuYmFyIHtcbiAgICAgICAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjgpO1xuICAgICAgICBiYWNrZHJvcC1maWx0ZXI6IGJsdXIoMzBweCk7IH0gfVxuICAgIC5zdXJ2ZXktbGF5b3V0IC5uYXZiYXIgKyAuYmFubmVyIC5iYXI6bm90KC5hZmZpeCkge1xuICAgICAgYm94LXNoYWRvdzogMCAxcHggNHB4IHJnYmEoMCwgMCwgMCwgMC4wNSksIDAgMXB4IDAgcmdiYSgwLCAwLCAwLCAwLjA1KTtcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsgfVxuXG4uc3VydmV5LWxheW91dCBhcnRpY2xlIHtcbiAgcGFkZGluZy10b3A6IDY0cHg7IH1cbiAgLnN1cnZleS1sYXlvdXQgYXJ0aWNsZSA+IGhncm91cCAuY29udGFpbmVyIHtcbiAgICBtYXgtd2lkdGg6IDY4MHB4O1xuICAgIG1hcmdpbjogMzJweCBhdXRvIDQ5cHg7IH1cbiAgICAuc3VydmV5LWxheW91dCBhcnRpY2xlID4gaGdyb3VwIC5jb250YWluZXIgcCB7XG4gICAgICBjb2xvcjogIzI0MjgyZTtcbiAgICAgIGZvbnQtc2l6ZTogMjNweDtcbiAgICAgIGxpbmUtaGVpZ2h0OiAxLjc1ZW07XG4gICAgICBtYXJnaW4tYm90dG9tOiAxLjczZW07XG4gICAgICBsZXR0ZXItc3BhY2luZzogLS4wMDFlbTsgfVxuICAgIC5zdXJ2ZXktbGF5b3V0IGFydGljbGUgPiBoZ3JvdXAgLmNvbnRhaW5lciBoMiB7XG4gICAgICBtYXJnaW4tdG9wOiA2NHB4OyB9XG4gICAgLnN1cnZleS1sYXlvdXQgYXJ0aWNsZSA+IGhncm91cCAuY29udGFpbmVyIHN0cm9uZyB7XG4gICAgICBmb250LXdlaWdodDogNjAwOyB9XG4gIC5zdXJ2ZXktbGF5b3V0IGFydGljbGUgaDMge1xuICAgIGZvbnQtd2VpZ2h0OiA3MDA7XG4gICAgbGV0dGVyLXNwYWNpbmc6IC0uMDRlbTtcbiAgICBtYXJnaW4tdG9wOiA2NHB4O1xuICAgIG1hcmdpbi1ib3R0b206IDA7XG4gICAgcGFkZGluZzogMzFweCAxNnB4IDI5cHg7XG4gICAgZm9udC1zaXplOiAzMnB4OyB9XG4gICAgLnN1cnZleS1sYXlvdXQgYXJ0aWNsZSBoMzo6YmVmb3JlLCAuc3VydmV5LWxheW91dCBhcnRpY2xlIGgzOjphZnRlciB7XG4gICAgICBkaXNwbGF5OiBub25lOyB9XG5cbi5zdXJ2ZXktbGF5b3V0IHNlY3Rpb24ge1xuICBwYWRkaW5nLWJvdHRvbTogNzFweDsgfVxuICAuc3VydmV5LWxheW91dCBzZWN0aW9uIC5jb250YWluZXIge1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICBtYXgtd2lkdGg6IDk2MnB4OyB9XG4gIC5zdXJ2ZXktbGF5b3V0IHNlY3Rpb24gaDQge1xuICAgIGZvbnQtd2VpZ2h0OiA2MDA7XG4gICAgZm9udC1zaXplOiAyMHB4O1xuICAgIGxldHRlci1zcGFjaW5nOiAtMC4wMmVtOyB9XG4gIC5zdXJ2ZXktbGF5b3V0IHNlY3Rpb24gcCxcbiAgLnN1cnZleS1sYXlvdXQgc2VjdGlvbiBoNCB7XG4gICAgcGFkZGluZzogMCAxNnB4O1xuICAgIG1hcmdpbjogMCBhdXRvIDMwcHg7XG4gICAgbGluZS1oZWlnaHQ6IDEuNjllbTtcbiAgICBsZXR0ZXItc3BhY2luZzogLS4wMThlbTsgfVxuICAgIC5zdXJ2ZXktbGF5b3V0IHNlY3Rpb24gcCArIGg0LFxuICAgIC5zdXJ2ZXktbGF5b3V0IHNlY3Rpb24gaDQgKyBoNCB7XG4gICAgICBtYXJnaW4tdG9wOiA0OHB4OyB9XG4gIC5zdXJ2ZXktbGF5b3V0IHNlY3Rpb24gcCB7XG4gICAgZm9udC1zaXplOiAxOHB4O1xuICAgIGxpbmUtaGVpZ2h0OiAxLjc1ZW07IH1cbiAgLnN1cnZleS1sYXlvdXQgc2VjdGlvbiAucm93ICsgLnJvdyB7XG4gICAgcGFkZGluZy10b3A6IDMycHg7IH1cblxuLnN1cnZleS1sYXlvdXQgLmRhcmsge1xuICBiYWNrZ3JvdW5kOiAjMTExOTI1OyB9XG4gIC5zdXJ2ZXktbGF5b3V0IC5kYXJrIGgyLFxuICAuc3VydmV5LWxheW91dCAuZGFyayBoMyxcbiAgLnN1cnZleS1sYXlvdXQgLmRhcmsgaDQge1xuICAgIGNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuOTUpOyB9XG4gIC5zdXJ2ZXktbGF5b3V0IC5kYXJrIHAge1xuICAgIGNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuOCk7IH1cbiAgLnN1cnZleS1sYXlvdXQgLmRhcmsgZmlndXJlIHN0cm9uZyB7XG4gICAgY29sb3I6ICNjZWQ2ZTA7IH1cblxuLnN1cnZleS1sYXlvdXQgLmludHJvOjpiZWZvcmUge1xuICBhbmltYXRpb24tZGVsYXk6IDNzOyB9XG5cbi5zdXJ2ZXktbGF5b3V0IC5kYXRhIC5jb250YWluZXI6OmJlZm9yZSB7XG4gIGRpc3BsYXk6IG5vbmU7IH1cblxuLnN1cnZleS1sYXlvdXQgLmRhdGEgaDQge1xuICBtYXJnaW4tYm90dG9tOiA4cHg7IH1cblxuLnN1cnZleS1sYXlvdXQgLm5hdmJhciArIC5iYW5uZXIgaDIge1xuICBmb250LXdlaWdodDogNzAwO1xuICBjb2xvcjogcmdiYSgwLCAwLCAwLCAwLjUpO1xuICBmb250LXNpemU6IDE5cHg7XG4gIGxldHRlci1zcGFjaW5nOiAuMDVlbTsgfVxuICAuc3VydmV5LWxheW91dCAubmF2YmFyICsgLmJhbm5lciBoMiBzdmcge1xuICAgIGZpbGwtb3BhY2l0eTogLjU7XG4gICAgZGlzcGxheTogYmxvY2s7IH1cblxuLnN1cnZleS1sYXlvdXQgYXJ0aWNsZSA+IGhncm91cCAuY29udGFpbmVyOjpiZWZvcmUsXG4uc3VydmV5LWxheW91dCBhcnRpY2xlID4gc2VjdGlvbiAuY29udGFpbmVyOjpiZWZvcmUge1xuICBiYWNrZ3JvdW5kOiB1cmwoXCIvaW1nL3N1cnZleS9oZWFkZXItdGh1bWJuYWlscy5wbmdcIik7XG4gIGJhY2tncm91bmQtc2l6ZTogOTZweDtcbiAgd2lkdGg6IDk2cHg7XG4gIGhlaWdodDogOTZweDtcbiAgY29udGVudDogJyc7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICBtYXJnaW46IDkycHggYXV0byAzNnB4OyB9XG5cbi5zdXJ2ZXktbGF5b3V0IGFydGljbGUgPiBzZWN0aW9uIC5jb250YWluZXI6OmJlZm9yZSB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgdG9wOiAtMTEzcHg7XG4gIGxlZnQ6IDI0cHg7XG4gIG1hcmdpbjogMDsgfVxuXG4uc3VydmV5LWxheW91dCBhcnRpY2xlID4gaGdyb3VwIC5jb250YWluZXIge1xuICBmb250LWZhbWlseTogXCJBZG9iZSBDYXNsb25cIiwgR2VvcmdpYSwgVGltZXMsIFwiVGltZXMgTmV3IFJvbWFuXCIsIHNlcmlmOyB9XG5cbiNpbnNpZ2h0cyAuY29udGFpbmVyOjpiZWZvcmUge1xuICBhbmltYXRpb246IDFzIGZhZGVJblVwO1xuICBhbmltYXRpb24tZGVsYXk6IDMuNXM7XG4gIGFuaW1hdGlvbi1maWxsLW1vZGU6IGZvcndhcmRzO1xuICBvcGFjaXR5OiAwOyB9XG5cbiNpbnNpZ2h0cyAuY29udGFpbmVyIHAge1xuICBhbmltYXRpb246IDFzIGZhZGVJblVwO1xuICBhbmltYXRpb24tZGVsYXk6IDMuNzVzO1xuICBhbmltYXRpb24tZmlsbC1tb2RlOiBmb3J3YXJkcztcbiAgb3BhY2l0eTogMDsgfVxuXG4jcHJvZmlsZSAuY29udGFpbmVyOjpiZWZvcmUge1xuICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwIC05NnB4OyB9XG5cbkBtZWRpYSAobWF4LXdpZHRoOiA5OTFweCkge1xuICAjcHJvZmlsZSBhc2lkZSB7XG4gICAgdGV4dC1hbGlnbjogY2VudGVyOyB9IH1cblxuI3Byb2ZpbGUgLmZhY3RvaWQge1xuICB3aWR0aDogMjAwcHg7XG4gIGJhY2tncm91bmQ6ICNlOWVkZjg7XG4gIGJvcmRlci1yYWRpdXM6IDMycHg7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgbWFyZ2luOiAzNHB4IC03cHggMHB4IDE1cHg7XG4gIHBhZGRpbmc6IDMzcHggMTlweCAxMnB4OyB9XG4gICNwcm9maWxlIC5mYWN0b2lkIHN0cm9uZyB7XG4gICAgY29sb3I6ICM0YThiZmM7XG4gICAgZm9udC13ZWlnaHQ6IDUwMDtcbiAgICBmb250LXNpemU6IDQ4cHg7XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIGxldHRlci1zcGFjaW5nOiAtLjA1ZW07XG4gICAgbWFyZ2luLWJvdHRvbTogLTJweDsgfVxuICAjcHJvZmlsZSAuZmFjdG9pZCBwIHtcbiAgICBmb250LXNpemU6IDE0cHg7XG4gICAgbGluZS1oZWlnaHQ6IDEuNGVtOyB9XG5cbiN0cmVuZHMge1xuICBiYWNrZ3JvdW5kOiAjZjZmOGZjOyB9XG4gICN0cmVuZHMgLmNvbnRhaW5lcjo6YmVmb3JlIHtcbiAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwIC0xOTJweDsgfVxuICAjdHJlbmRzIGZpZ3VyZSB7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgbWFyZ2luOiA5NHB4IGF1dG8gMzNweDtcbiAgICBwYWRkaW5nLWxlZnQ6IDM1cHg7IH1cbiAgICAjdHJlbmRzIGZpZ3VyZTpmaXJzdC1jaGlsZCB7XG4gICAgICBtYXJnaW4tdG9wOiA5OXB4OyB9XG4gICAgI3RyZW5kcyBmaWd1cmUgaW1nIHtcbiAgICAgIG1hcmdpbi1ib3R0b206IDhweDsgfVxuICAgICN0cmVuZHMgZmlndXJlIHN0cm9uZyB7XG4gICAgICBmb250LXNpemU6IDQ4cHg7XG4gICAgICBjb2xvcjogIzRhOGJmYztcbiAgICAgIGZvbnQtd2VpZ2h0OiA0MDA7XG4gICAgICBsZXR0ZXItc3BhY2luZzogLS4wMWVtOyB9XG4gICAgI3RyZW5kcyBmaWd1cmUgcCB7XG4gICAgICBwYWRkaW5nLWxlZnQ6IDA7XG4gICAgICBwYWRkaW5nLXJpZ2h0OiAwO1xuICAgICAgbWFyZ2luLWxlZnQ6IDA7XG4gICAgICBmb250LXNpemU6IDE0cHg7XG4gICAgICBmb250LXdlaWdodDogNTAwO1xuICAgICAgbWF4LXdpZHRoOiAxNDJweDtcbiAgICAgIG1hcmdpbi10b3A6IC00cHg7XG4gICAgICBsaW5lLWhlaWdodDogMS40OGVtOyB9XG4gICAgI3RyZW5kcyBmaWd1cmU6bGFzdC1jaGlsZCBpbWcge1xuICAgICAgbWFyZ2luLWxlZnQ6IDE3cHg7IH1cbiAgQG1lZGlhIChtYXgtd2lkdGg6IDk5MXB4KSB7XG4gICAgI3RyZW5kcyBhc2lkZSB7XG4gICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7IH1cbiAgICAgICN0cmVuZHMgYXNpZGUgZmlndXJlLFxuICAgICAgI3RyZW5kcyBhc2lkZSBmaWd1cmU6Zmlyc3QtY2hpbGQge1xuICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgICAgIG1hcmdpbi10b3A6IDUwcHg7XG4gICAgICAgIHZlcnRpY2FsLWFsaWduOiB0b3A7IH0gfVxuICBAbWVkaWEgKG1heC13aWR0aDogNzY3cHgpIHtcbiAgICAjdHJlbmRzIGFzaWRlIHtcbiAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWFyb3VuZDsgfVxuICAgICAgI3RyZW5kcyBhc2lkZSBmaWd1cmUge1xuICAgICAgICBwYWRkaW5nLWxlZnQ6IDA7IH0gfVxuXG4jdG9vbHMge1xuICBiYWNrZ3JvdW5kOiAjMTYxOTIwOyB9XG4gICN0b29scyAuY29udGFpbmVyOjpiZWZvcmUge1xuICAgIGJhY2tncm91bmQtcG9zaXRpb246IDAgLTI4OHB4OyB9XG4gICN0b29scyAudG9vbHMge1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICBwYWRkaW5nOiAwIDI0cHggMCAwO1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOyB9XG4gICAgI3Rvb2xzIC50b29scyBsaSB7XG4gICAgICBiYWNrZ3JvdW5kOiBuby1yZXBlYXQgdXJsKFwiL2ltZy9zdXJ2ZXkvdG9vbHMtaWNvbnMucG5nXCIpO1xuICAgICAgYmFja2dyb3VuZC1zaXplOiA3MHB4O1xuICAgICAgd2lkdGg6IDcwcHg7XG4gICAgICBoZWlnaHQ6IDcwcHg7XG4gICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7IH1cbiAgICAgICN0b29scyAudG9vbHMgbGkubm9kZSB7XG4gICAgICAgIGJhY2tncm91bmQtcG9zaXRpb246IDAgLTcwcHg7IH1cbiAgICAgICN0b29scyAudG9vbHMgbGkuYW5hbHl0aWNzIHtcbiAgICAgICAgYmFja2dyb3VuZC1wb3NpdGlvbjogMCAtMTQwcHg7IH1cbiAgICAgICN0b29scyAudG9vbHMgbGkudnNjb2RlIHtcbiAgICAgICAgYmFja2dyb3VuZC1wb3NpdGlvbjogMCAtMjEwcHg7IH1cbiAgICAgICN0b29scyAudG9vbHMgbGkuYXdzIHtcbiAgICAgICAgYmFja2dyb3VuZC1wb3NpdGlvbjogMCAtMjgwcHg7IH1cbiAgICBAbWVkaWEgKG1heC13aWR0aDogNzY3cHgpIHtcbiAgICAgICN0b29scyAudG9vbHMge1xuICAgICAgICBwYWRkaW5nLXJpZ2h0OiAwOyB9IH1cblxuI2hhYmJpdHMge1xuICBiYWNrZ3JvdW5kOiAjNGE4YmZjOyB9XG4gICNoYWJiaXRzIC5jb250YWluZXI6OmJlZm9yZSB7XG4gICAgYmFja2dyb3VuZC1wb3NpdGlvbjogMCAtMzg0cHg7IH1cblxuI2JpZy1waWN0dXJlIHtcbiAgYmFja2dyb3VuZDogI2Y2ZjhmYzsgfVxuICAjYmlnLXBpY3R1cmUgLmNvbnRhaW5lcjo6YmVmb3JlIHtcbiAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwIC00ODBweDsgfVxuICAjYmlnLXBpY3R1cmUgcCB7XG4gICAgYW5pbWF0aW9uLWRlbGF5OiAyczsgfVxuIl19 */\n"
  },
  {
    "path": "content/css/pages/survey/2018.css",
    "content": ".survey-layout .navbar + .banner {\n  background: linear-gradient(to right, #1e6fff 0%, #0499ff 100%);\n  background-size: 100%;\n  position: relative; }\n  .survey-layout .navbar + .banner canvas {\n    position: absolute;\n    top: 0;\n    left: 0;\n    bottom: 0;\n    width: 100%;\n    -webkit-animation: 10s fadeIn;\n            animation: 10s fadeIn;\n    -webkit-animation-fill-mode: forwards;\n            animation-fill-mode: forwards;\n    -webkit-animation-delay: 1s;\n            animation-delay: 1s;\n    opacity: 0; }\n  .survey-layout .navbar + .banner hgroup {\n    padding-bottom: 112px;\n    padding-top: 48px; }\n  .survey-layout .navbar + .banner h2 {\n    z-index: 1;\n    position: relative;\n    opacity: 0;\n    -webkit-animation: 1s fadeInUp;\n            animation: 1s fadeInUp;\n    -webkit-animation-delay: 2s;\n            animation-delay: 2s;\n    -webkit-animation-fill-mode: forwards;\n            animation-fill-mode: forwards; }\n    .survey-layout .navbar + .banner h2 svg {\n      margin: 23px auto 15px;\n      width: 32px;\n      display: block; }\n  .survey-layout .navbar + .banner h1 {\n    font-size: 62px;\n    margin-top: 27px;\n    margin-bottom: 14px;\n    letter-spacing: -.025em;\n    font-weight: 600;\n    -webkit-animation: 1s fadeInUp;\n            animation: 1s fadeInUp;\n    -webkit-animation-delay: 2.2s;\n            animation-delay: 2.2s;\n    -webkit-animation-fill-mode: forwards;\n            animation-fill-mode: forwards;\n    opacity: 0; }\n  .survey-layout .navbar + .banner p {\n    font-size: 22px;\n    color: rgba(255, 255, 255, 0.8);\n    -webkit-animation: 1s fadeInUp;\n            animation: 1s fadeInUp;\n    -webkit-animation-delay: 2.4s;\n            animation-delay: 2.4s;\n    -webkit-animation-fill-mode: forwards;\n            animation-fill-mode: forwards;\n    letter-spacing: .01em;\n    opacity: 0; }\n  .survey-layout .navbar + .banner .bar {\n    background: #fff; }\n    .survey-layout .navbar + .banner .bar ul li a {\n      padding: 28px 18px 22px;\n      margin: 0 15px -2px; }\n      @media (max-width: 767px) {\n        .survey-layout .navbar + .banner .bar ul li a {\n          padding-left: 0;\n          padding-right: 0;\n          margin-left: 5px;\n          margin-right: 5px; } }\n    @supports ((-webkit-backdrop-filter: blur(30px)) or (backdrop-filter: blur(30px))) {\n      .survey-layout .navbar + .banner .bar {\n        background: rgba(255, 255, 255, 0.8);\n        -webkit-backdrop-filter: blur(30px);\n                backdrop-filter: blur(30px); } }\n    .survey-layout .navbar + .banner .bar:not(.affix) {\n      box-shadow: 0 1px 4px rgba(0, 0, 0, 0.05), 0 1px 0 rgba(0, 0, 0, 0.05);\n      position: absolute; }\n\n.survey-layout article {\n  padding-top: 64px; }\n  .survey-layout article > hgroup .container {\n    max-width: 680px;\n    margin: 32px auto 49px; }\n    .survey-layout article > hgroup .container p {\n      color: #24282e;\n      font-size: 23px;\n      line-height: 1.75em;\n      margin-bottom: 1.73em;\n      letter-spacing: -.001em; }\n    .survey-layout article > hgroup .container h2 {\n      margin-top: 64px; }\n    .survey-layout article > hgroup .container strong {\n      font-weight: 600; }\n  .survey-layout article h3 {\n    font-weight: 700;\n    letter-spacing: -.04em;\n    margin-top: 64px;\n    margin-bottom: 0;\n    padding: 31px 16px 29px;\n    font-size: 32px; }\n    .survey-layout article h3::before, .survey-layout article h3::after {\n      display: none; }\n\n.survey-layout section {\n  padding-bottom: 71px; }\n  .survey-layout section .container {\n    position: relative;\n    max-width: 962px; }\n  .survey-layout section h4 {\n    font-weight: 600;\n    font-size: 20px;\n    letter-spacing: -0.02em; }\n  .survey-layout section p,\n  .survey-layout section h4 {\n    padding: 0 16px;\n    margin: 0 auto 30px;\n    line-height: 1.69em;\n    letter-spacing: -.018em; }\n    .survey-layout section p + h4,\n    .survey-layout section h4 + h4 {\n      margin-top: 48px; }\n  .survey-layout section p {\n    font-size: 18px;\n    line-height: 1.75em; }\n  .survey-layout section .row + .row {\n    padding-top: 32px; }\n\n.survey-layout .dark {\n  background: #111925; }\n  .survey-layout .dark h2,\n  .survey-layout .dark h3,\n  .survey-layout .dark h4 {\n    color: rgba(255, 255, 255, 0.95); }\n  .survey-layout .dark p {\n    color: rgba(255, 255, 255, 0.8); }\n  .survey-layout .dark figure strong {\n    color: #ced6e0; }\n\n.survey-layout .intro::before {\n  -webkit-animation-delay: 3s;\n          animation-delay: 3s; }\n\n.survey-layout .data .container::before {\n  display: none; }\n\n.survey-layout .data h4 {\n  margin-bottom: 8px; }\n\n#page-survey-2018 .navbar + .banner {\n  background: #709df0 no-repeat 50% 50%;\n  background-image: linear-gradient(135deg, #2a67ff 0%, #317ef0 10%, #5bb2e6 30%, #6fb2e4 36%, #996CC7 66%, #95a0fd 100%);\n  background-image: url(\"/img/survey/2018-bg.jpg\"), linear-gradient(135deg, #2a67ff 0%, #317ef0 10%, #5bb2e6 30%, #6fb2e4 36%, #996CC7 66%, #95a0fd 100%);\n  background-size: cover, 100%; }\n\n#page-survey-2018 #bars-and-cubes {\n  position: absolute;\n  height: 100%;\n  width: 100%;\n  top: 0;\n  overflow: hidden; }\n  #page-survey-2018 #bars-and-cubes #bars {\n    position: absolute;\n    width: 100%;\n    bottom: -400px;\n    left: 0; }\n    #page-survey-2018 #bars-and-cubes #bars > g {\n      opacity: 0;\n      mix-blend-mode: overlay;\n      -webkit-animation: fadeInUp 1s .5s forwards;\n              animation: fadeInUp 1s .5s forwards; }\n      #page-survey-2018 #bars-and-cubes #bars > g:nth-child(16) {\n        -webkit-animation-delay: .6s;\n                animation-delay: .6s; }\n      #page-survey-2018 #bars-and-cubes #bars > g:nth-child(15) {\n        -webkit-animation-delay: .65s;\n                animation-delay: .65s; }\n      #page-survey-2018 #bars-and-cubes #bars > g:nth-child(14) {\n        -webkit-animation-delay: .7s;\n                animation-delay: .7s; }\n      #page-survey-2018 #bars-and-cubes #bars > g:nth-child(13) {\n        -webkit-animation-delay: .75s;\n                animation-delay: .75s; }\n      #page-survey-2018 #bars-and-cubes #bars > g:nth-child(12) {\n        -webkit-animation-delay: .8s;\n                animation-delay: .8s; }\n      #page-survey-2018 #bars-and-cubes #bars > g:nth-child(11) {\n        -webkit-animation-delay: .85s;\n                animation-delay: .85s; }\n      #page-survey-2018 #bars-and-cubes #bars > g:nth-child(10) {\n        -webkit-animation-delay: .9s;\n                animation-delay: .9s; }\n      #page-survey-2018 #bars-and-cubes #bars > g:nth-child(9) {\n        -webkit-animation-delay: .95s;\n                animation-delay: .95s; }\n      #page-survey-2018 #bars-and-cubes #bars > g:nth-child(8) {\n        -webkit-animation-delay: 1s;\n                animation-delay: 1s; }\n      #page-survey-2018 #bars-and-cubes #bars > g:nth-child(7) {\n        -webkit-animation-delay: 1.05s;\n                animation-delay: 1.05s; }\n      #page-survey-2018 #bars-and-cubes #bars > g:nth-child(6) {\n        -webkit-animation-delay: 1.1s;\n                animation-delay: 1.1s; }\n      #page-survey-2018 #bars-and-cubes #bars > g:nth-child(5) {\n        -webkit-animation-delay: 1.15s;\n                animation-delay: 1.15s; }\n      #page-survey-2018 #bars-and-cubes #bars > g:nth-child(4) {\n        -webkit-animation-delay: 1.2s;\n                animation-delay: 1.2s; }\n      #page-survey-2018 #bars-and-cubes #bars > g:nth-child(3) {\n        -webkit-animation-delay: 1.25s;\n                animation-delay: 1.25s; }\n      #page-survey-2018 #bars-and-cubes #bars > g:nth-child(2) {\n        -webkit-animation-delay: 1.3s;\n                animation-delay: 1.3s; }\n  #page-survey-2018 #bars-and-cubes #cubes {\n    position: absolute;\n    width: 100%;\n    top: -50px;\n    left: 0;\n    opacity: 0;\n    mix-blend-mode: overlay;\n    -webkit-animation: fadeInUp 2s ease 3s forwards;\n            animation: fadeInUp 2s ease 3s forwards; }\n    #page-survey-2018 #bars-and-cubes #cubes g g {\n      -webkit-animation: hoverY 10s infinite;\n              animation: hoverY 10s infinite; }\n      #page-survey-2018 #bars-and-cubes #cubes g g:nth-child(2) {\n        -webkit-animation-duration: 15s;\n                animation-duration: 15s; }\n      #page-survey-2018 #bars-and-cubes #cubes g g:nth-child(3) {\n        -webkit-animation-duration: 8s;\n                animation-duration: 8s; }\n      #page-survey-2018 #bars-and-cubes #cubes g g:nth-child(4) {\n        -webkit-animation-duration: 13s;\n                animation-duration: 13s; }\n\n#page-survey-2018 .cta hgroup {\n  max-width: 590px;\n  font-family: \"Eina\", \"Helvetica Neue\", Helvetica, sans-serif; }\n  #page-survey-2018 .cta hgroup h2 {\n    font-family: \"Roboto Mono\", Menlo, Monaco, Consolas, \"Courier New\", monospace;\n    font-weight: bold;\n    font-size: 12px;\n    letter-spacing: 0.14em;\n    text-transform: uppercase;\n    margin-top: 28px;\n    margin-bottom: 23px; }\n    #page-survey-2018 .cta hgroup h2 svg {\n      margin-bottom: 10px; }\n  #page-survey-2018 .cta hgroup h1 {\n    font-size: 64px;\n    line-height: normal;\n    letter-spacing: -0.03em;\n    margin-top: 22px;\n    margin-bottom: 2px; }\n  #page-survey-2018 .cta hgroup p {\n    margin-bottom: 10px;\n    line-height: 40px; }\n\n#page-survey-2018 .bar .nav a {\n  font-family: \"Eina\", \"Helvetica Neue\", Helvetica, sans-serif;\n  font-size: 14px;\n  letter-spacing: 0.04em;\n  text-transform: uppercase;\n  padding: 43px 26px 38px;\n  color: #B2BECD; }\n\n#page-survey-2018 .bar .active a,\n#page-survey-2018 .bar a:hover {\n  color: #639CFF; }\n\n#page-survey-2018 .bar .active a {\n  border-color: #639CFF; }\n\n@media (max-width: 991px) {\n  #page-survey-2018 .bar .nav a {\n    padding: 24px 9px 24px; } }\n\n@media (max-width: 767px) {\n  #page-survey-2018 .bar {\n    overflow-x: auto; }\n    #page-survey-2018 .bar .nav a {\n      padding: 24px 6px 24px; } }\n\n#page-survey-2018 article h4,\n#page-survey-2018 article p {\n  padding-left: 0;\n  padding-right: 0; }\n\n#page-survey-2018 article h3 {\n  font-size: 48px;\n  letter-spacing: -0.03em;\n  margin-bottom: 30px; }\n\n#page-survey-2018 article h4 {\n  font-size: 20px;\n  letter-spacing: -0.02em; }\n\n#page-survey-2018 article blockquote {\n  font-family: \"Inter\", \"Inter UI\", Helvetica, Arial, sans-serif;\n  line-height: 34px;\n  font-size: 20px;\n  letter-spacing: -0.02em;\n  color: #7C90F6;\n  border-left: none;\n  padding-left: 0;\n  margin-left: 0;\n  margin-bottom: 13px;\n  padding-top: 0; }\n  #page-survey-2018 article blockquote a {\n    text-decoration: underline;\n    font-weight: 500; }\n  #page-survey-2018 article blockquote.pink {\n    color: #F37BAB; }\n  #page-survey-2018 article blockquote.orange {\n    color: #F5947E; }\n\n#page-survey-2018 article section {\n  background: linear-gradient(180deg, #F7F9FC 0%, rgba(247, 249, 252, 0) 100%);\n  padding-top: 106px;\n  padding-bottom: 170px; }\n\n#page-survey-2018 article section h3 {\n  margin-left: 19px; }\n\n#page-survey-2018 article section .col-md-6 {\n  padding: 0 48px 0 35px; }\n  #page-survey-2018 article section .col-md-6 + .col-md-6 {\n    padding: 0 35px 0 48px; }\n  @media (max-width: 767px) {\n    #page-survey-2018 article section .col-md-6,\n    #page-survey-2018 article section .col-md-6 + .col-md-6 {\n      padding: 0 15px; } }\n\n#page-survey-2018 article section p {\n  font-family: \"Inter\", \"Inter UI\", Helvetica, Arial, sans-serif;\n  line-height: 29px;\n  font-size: 16px;\n  letter-spacing: -0.01em;\n  margin-bottom: 22px; }\n\n#page-survey-2018 article section h4 {\n  margin-top: 0;\n  margin-bottom: 28px;\n  line-height: normal; }\n\n#page-survey-2018 article section p + h4 {\n  margin-top: 66px;\n  margin-bottom: 19px; }\n\n#page-survey-2018 .factoid {\n  padding: 5px 0 20px;\n  display: inline-block; }\n  #page-survey-2018 .factoid:first-child {\n    margin-right: 56px; }\n  #page-survey-2018 .factoid strong {\n    font-family: \"Eina\", \"Helvetica Neue\", Helvetica, sans-serif;\n    line-height: normal;\n    font-size: 56px;\n    letter-spacing: -0.03em;\n    color: #7C8FF6; }\n  #page-survey-2018 .factoid span {\n    font-family: \"Inter\", \"Inter UI\", Helvetica, Arial, sans-serif;\n    line-height: normal;\n    font-size: 16px;\n    letter-spacing: -0.02em;\n    color: #4B537A;\n    display: block;\n    margin-top: -14px; }\n\n#page-survey-2018 #introduction {\n  font-family: \"Eina\", \"Helvetica Neue\", Helvetica, sans-serif; }\n  #page-survey-2018 #introduction .container {\n    max-width: 622px;\n    margin: 98px auto 158px; }\n  #page-survey-2018 #introduction h3 {\n    font-size: 48px;\n    letter-spacing: -0.03em;\n    color: #0E151F;\n    margin-bottom: 8px; }\n  #page-survey-2018 #introduction p {\n    font-size: 24px;\n    text-align: center;\n    line-height: normal;\n    margin-bottom: 33px;\n    letter-spacing: -0.02em; }\n\n#page-survey-2018 #big-three {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-pack: justify;\n      justify-content: space-between;\n  -ms-flex-wrap: wrap;\n      flex-wrap: wrap;\n  padding: 0 0 24px; }\n  #page-survey-2018 #big-three li {\n    background: url(\"/img/survey/frameworks.png\") 0 0 no-repeat;\n    height: 96px;\n    width: 96px;\n    list-style: none;\n    background-size: 96px;\n    margin-bottom: 16px; }\n    #page-survey-2018 #big-three li.angular {\n      background-position: 0 0px; }\n    #page-survey-2018 #big-three li.react {\n      background-position: 0 -96px; }\n    #page-survey-2018 #big-three li.vue {\n      background-position: 0 -192px; }\n\n#page-survey-2018 .tools {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-wrap: wrap;\n      flex-wrap: wrap;\n  padding: 0 0 24px; }\n  #page-survey-2018 .tools li {\n    background: url(\"/img/survey/tools.png\") 0 0 no-repeat;\n    height: 80px;\n    width: 80px;\n    list-style: none;\n    background-size: 80px;\n    margin-bottom: 16px;\n    margin-right: 15px; }\n    #page-survey-2018 .tools li.ionic {\n      background-position: 0 0px; }\n    #page-survey-2018 .tools li.react {\n      background-position: 0 -80px; }\n    #page-survey-2018 .tools li.xamarin {\n      background-position: 0 -160px; }\n    #page-survey-2018 .tools li.mysql {\n      background-position: 0 -240px; }\n    #page-survey-2018 .tools li.firebase {\n      background-position: 0 -320px; }\n    #page-survey-2018 .tools li.mongodb {\n      background-position: 0 -400px; }\n    #page-survey-2018 .tools li.postgres {\n      background-position: 0 -480px; }\n\n#page-survey-2018 img.pull-right {\n  margin: 24px -15px 10px 30px; }\n\n#page-survey-2018 #tools .tools {\n  margin: -2px 0 25px -9px; }\n\n#page-survey-2018 #habbits aside {\n  display: -ms-flexbox;\n  display: flex;\n  margin-bottom: 52px; }\n\n#page-survey-2018 #backend .tools {\n  margin: 39px 0 1px; }\n\n#page-survey-2018 #big-picture {\n  background: #18212F;\n  color: white; }\n  #page-survey-2018 #big-picture .container {\n    max-width: 622px; }\n  #page-survey-2018 #big-picture h3 {\n    margin-bottom: 8px; }\n  #page-survey-2018 #big-picture p {\n    font-family: \"Eina\", \"Helvetica Neue\", Helvetica, sans-serif;\n    line-height: normal;\n    font-size: 24px;\n    letter-spacing: -0.02em;\n    margin-bottom: 33px;\n    color: #DEE3EA; }\n    #page-survey-2018 #big-picture p.blue {\n      color: #639CFF;\n      margin-bottom: 40px; }\n    #page-survey-2018 #big-picture p strong {\n      font-weight: 600;\n      color: white; }\n\n#page-survey-2018 #results hgroup {\n  max-width: 970px;\n  padding-top: 162px; }\n  #page-survey-2018 #results hgroup h2 {\n    line-height: normal;\n    font-size: 48px;\n    letter-spacing: -0.03em; }\n  #page-survey-2018 #results hgroup p {\n    line-height: normal;\n    font-size: 24px;\n    letter-spacing: -0.02em;\n    color: #DEE3EA;\n    max-width: 640px;\n    font-family: \"Eina\", \"Helvetica Neue\", Helvetica, sans-serif; }\n\n#page-survey-2018 #results section {\n  background: transparent;\n  padding-bottom: 0px;\n  padding-top: 14px; }\n\n#page-survey-2018 #results #demographics {\n  padding-top: 105px; }\n\n#page-survey-2018 #results #backend {\n  padding-bottom: 105px; }\n\n#page-survey-2018 #results h3 {\n  line-height: normal;\n  font-size: 36px;\n  letter-spacing: -0.02em;\n  margin: 33px -0 44px;\n  padding: 0; }\n\n#page-survey-2018 #results h4 {\n  font-family: \"Roboto Mono\", Menlo, Monaco, Consolas, \"Courier New\", monospace;\n  font-style: normal;\n  font-weight: 500;\n  line-height: normal;\n  font-size: 20px;\n  letter-spacing: -0.04em;\n  margin-bottom: 42px; }\n\n#page-survey-2018 #results ionic-bar-chart {\n  font-family: \"Roboto Mono\", Menlo, Monaco, Consolas, \"Courier New\", monospace;\n  margin-bottom: 111px; }\n  #page-survey-2018 #results ionic-bar-chart:not(.hydrated) {\n    min-height: 120px; }\n\n#page-survey-2018 #results .bar {\n  background: #5b708b linear-gradient(to right, rgba(146, 225, 167, 0.2), rgba(81, 167, 255, 0.2)); }\n\n#page-survey-2018 #tools .bar {\n  background: #5b708b linear-gradient(to right, rgba(229, 67, 133, 0.2), rgba(120, 109, 249, 0.2)); }\n\n#page-survey-2018 #results-pwas .bar {\n  background: #5b708b linear-gradient(to right, rgba(255, 123, 94, 0.2), rgba(243, 123, 171, 0.2)); }\n\n#page-survey-2018 #backend .bar {\n  background: #5b708b linear-gradient(to right, rgba(242, 197, 38, 0.2), rgba(146, 225, 167, 0.2)); }\n\n/*# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIjIwMTguY3NzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0VBQ0UsZ0VBQWdFO0VBQ2hFLHNCQUFzQjtFQUN0QixtQkFBbUIsRUFBRTtFQUNyQjtJQUNFLG1CQUFtQjtJQUNuQixPQUFPO0lBQ1AsUUFBUTtJQUNSLFVBQVU7SUFDVixZQUFZO0lBQ1osOEJBQXNCO1lBQXRCLHNCQUFzQjtJQUN0QixzQ0FBOEI7WUFBOUIsOEJBQThCO0lBQzlCLDRCQUFvQjtZQUFwQixvQkFBb0I7SUFDcEIsV0FBVyxFQUFFO0VBQ2Y7SUFDRSxzQkFBc0I7SUFDdEIsa0JBQWtCLEVBQUU7RUFDdEI7SUFDRSxXQUFXO0lBQ1gsbUJBQW1CO0lBQ25CLFdBQVc7SUFDWCwrQkFBdUI7WUFBdkIsdUJBQXVCO0lBQ3ZCLDRCQUFvQjtZQUFwQixvQkFBb0I7SUFDcEIsc0NBQThCO1lBQTlCLDhCQUE4QixFQUFFO0lBQ2hDO01BQ0UsdUJBQXVCO01BQ3ZCLFlBQVk7TUFDWixlQUFlLEVBQUU7RUFDckI7SUFDRSxnQkFBZ0I7SUFDaEIsaUJBQWlCO0lBQ2pCLG9CQUFvQjtJQUNwQix3QkFBd0I7SUFDeEIsaUJBQWlCO0lBQ2pCLCtCQUF1QjtZQUF2Qix1QkFBdUI7SUFDdkIsOEJBQXNCO1lBQXRCLHNCQUFzQjtJQUN0QixzQ0FBOEI7WUFBOUIsOEJBQThCO0lBQzlCLFdBQVcsRUFBRTtFQUNmO0lBQ0UsZ0JBQWdCO0lBQ2hCLGdDQUFnQztJQUNoQywrQkFBdUI7WUFBdkIsdUJBQXVCO0lBQ3ZCLDhCQUFzQjtZQUF0QixzQkFBc0I7SUFDdEIsc0NBQThCO1lBQTlCLDhCQUE4QjtJQUM5QixzQkFBc0I7SUFDdEIsV0FBVyxFQUFFO0VBQ2Y7SUFDRSxpQkFBaUIsRUFBRTtJQUNuQjtNQUNFLHdCQUF3QjtNQUN4QixvQkFBb0IsRUFBRTtNQUN0QjtRQUNFO1VBQ0UsZ0JBQWdCO1VBQ2hCLGlCQUFpQjtVQUNqQixpQkFBaUI7VUFDakIsa0JBQWtCLEVBQUUsRUFBRTtJQUM1QjtNQUNFO1FBQ0UscUNBQXFDO1FBQ3JDLG9DQUE0QjtnQkFBNUIsNEJBQTRCLEVBQUUsRUFBRTtJQUNwQztNQUNFLHVFQUF1RTtNQUN2RSxtQkFBbUIsRUFBRTs7QUFFM0I7RUFDRSxrQkFBa0IsRUFBRTtFQUNwQjtJQUNFLGlCQUFpQjtJQUNqQix1QkFBdUIsRUFBRTtJQUN6QjtNQUNFLGVBQWU7TUFDZixnQkFBZ0I7TUFDaEIsb0JBQW9CO01BQ3BCLHNCQUFzQjtNQUN0Qix3QkFBd0IsRUFBRTtJQUM1QjtNQUNFLGlCQUFpQixFQUFFO0lBQ3JCO01BQ0UsaUJBQWlCLEVBQUU7RUFDdkI7SUFDRSxpQkFBaUI7SUFDakIsdUJBQXVCO0lBQ3ZCLGlCQUFpQjtJQUNqQixpQkFBaUI7SUFDakIsd0JBQXdCO0lBQ3hCLGdCQUFnQixFQUFFO0lBQ2xCO01BQ0UsY0FBYyxFQUFFOztBQUV0QjtFQUNFLHFCQUFxQixFQUFFO0VBQ3ZCO0lBQ0UsbUJBQW1CO0lBQ25CLGlCQUFpQixFQUFFO0VBQ3JCO0lBQ0UsaUJBQWlCO0lBQ2pCLGdCQUFnQjtJQUNoQix3QkFBd0IsRUFBRTtFQUM1Qjs7SUFFRSxnQkFBZ0I7SUFDaEIsb0JBQW9CO0lBQ3BCLG9CQUFvQjtJQUNwQix3QkFBd0IsRUFBRTtJQUMxQjs7TUFFRSxpQkFBaUIsRUFBRTtFQUN2QjtJQUNFLGdCQUFnQjtJQUNoQixvQkFBb0IsRUFBRTtFQUN4QjtJQUNFLGtCQUFrQixFQUFFOztBQUV4QjtFQUNFLG9CQUFvQixFQUFFO0VBQ3RCOzs7SUFHRSxpQ0FBaUMsRUFBRTtFQUNyQztJQUNFLGdDQUFnQyxFQUFFO0VBQ3BDO0lBQ0UsZUFBZSxFQUFFOztBQUVyQjtFQUNFLDRCQUFvQjtVQUFwQixvQkFBb0IsRUFBRTs7QUFFeEI7RUFDRSxjQUFjLEVBQUU7O0FBRWxCO0VBQ0UsbUJBQW1CLEVBQUU7O0FBRXZCO0VBQ0Usc0NBQXNDO0VBQ3RDLHdIQUF3SDtFQUN4SCx3SkFBd0o7RUFDeEosNkJBQTZCLEVBQUU7O0FBRWpDO0VBQ0UsbUJBQW1CO0VBQ25CLGFBQWE7RUFDYixZQUFZO0VBQ1osT0FBTztFQUNQLGlCQUFpQixFQUFFO0VBQ25CO0lBQ0UsbUJBQW1CO0lBQ25CLFlBQVk7SUFDWixlQUFlO0lBQ2YsUUFBUSxFQUFFO0lBQ1Y7TUFDRSxXQUFXO01BQ1gsd0JBQXdCO01BQ3hCLDRDQUFvQztjQUFwQyxvQ0FBb0MsRUFBRTtNQUN0QztRQUNFLDZCQUFxQjtnQkFBckIscUJBQXFCLEVBQUU7TUFDekI7UUFDRSw4QkFBc0I7Z0JBQXRCLHNCQUFzQixFQUFFO01BQzFCO1FBQ0UsNkJBQXFCO2dCQUFyQixxQkFBcUIsRUFBRTtNQUN6QjtRQUNFLDhCQUFzQjtnQkFBdEIsc0JBQXNCLEVBQUU7TUFDMUI7UUFDRSw2QkFBcUI7Z0JBQXJCLHFCQUFxQixFQUFFO01BQ3pCO1FBQ0UsOEJBQXNCO2dCQUF0QixzQkFBc0IsRUFBRTtNQUMxQjtRQUNFLDZCQUFxQjtnQkFBckIscUJBQXFCLEVBQUU7TUFDekI7UUFDRSw4QkFBc0I7Z0JBQXRCLHNCQUFzQixFQUFFO01BQzFCO1FBQ0UsNEJBQW9CO2dCQUFwQixvQkFBb0IsRUFBRTtNQUN4QjtRQUNFLCtCQUF1QjtnQkFBdkIsdUJBQXVCLEVBQUU7TUFDM0I7UUFDRSw4QkFBc0I7Z0JBQXRCLHNCQUFzQixFQUFFO01BQzFCO1FBQ0UsK0JBQXVCO2dCQUF2Qix1QkFBdUIsRUFBRTtNQUMzQjtRQUNFLDhCQUFzQjtnQkFBdEIsc0JBQXNCLEVBQUU7TUFDMUI7UUFDRSwrQkFBdUI7Z0JBQXZCLHVCQUF1QixFQUFFO01BQzNCO1FBQ0UsOEJBQXNCO2dCQUF0QixzQkFBc0IsRUFBRTtFQUM5QjtJQUNFLG1CQUFtQjtJQUNuQixZQUFZO0lBQ1osV0FBVztJQUNYLFFBQVE7SUFDUixXQUFXO0lBQ1gsd0JBQXdCO0lBQ3hCLGdEQUF3QztZQUF4Qyx3Q0FBd0MsRUFBRTtJQUMxQztNQUNFLHVDQUErQjtjQUEvQiwrQkFBK0IsRUFBRTtNQUNqQztRQUNFLGdDQUF3QjtnQkFBeEIsd0JBQXdCLEVBQUU7TUFDNUI7UUFDRSwrQkFBdUI7Z0JBQXZCLHVCQUF1QixFQUFFO01BQzNCO1FBQ0UsZ0NBQXdCO2dCQUF4Qix3QkFBd0IsRUFBRTs7QUFFbEM7RUFDRSxpQkFBaUI7RUFDakIsNkRBQTZELEVBQUU7RUFDL0Q7SUFDRSw4RUFBOEU7SUFDOUUsa0JBQWtCO0lBQ2xCLGdCQUFnQjtJQUNoQix1QkFBdUI7SUFDdkIsMEJBQTBCO0lBQzFCLGlCQUFpQjtJQUNqQixvQkFBb0IsRUFBRTtJQUN0QjtNQUNFLG9CQUFvQixFQUFFO0VBQzFCO0lBQ0UsZ0JBQWdCO0lBQ2hCLG9CQUFvQjtJQUNwQix3QkFBd0I7SUFDeEIsaUJBQWlCO0lBQ2pCLG1CQUFtQixFQUFFO0VBQ3ZCO0lBQ0Usb0JBQW9CO0lBQ3BCLGtCQUFrQixFQUFFOztBQUV4QjtFQUNFLDZEQUE2RDtFQUM3RCxnQkFBZ0I7RUFDaEIsdUJBQXVCO0VBQ3ZCLDBCQUEwQjtFQUMxQix3QkFBd0I7RUFDeEIsZUFBZSxFQUFFOztBQUVuQjs7RUFFRSxlQUFlLEVBQUU7O0FBRW5CO0VBQ0Usc0JBQXNCLEVBQUU7O0FBRTFCO0VBQ0U7SUFDRSx1QkFBdUIsRUFBRSxFQUFFOztBQUUvQjtFQUNFO0lBQ0UsaUJBQWlCLEVBQUU7SUFDbkI7TUFDRSx1QkFBdUIsRUFBRSxFQUFFOztBQUVqQzs7RUFFRSxnQkFBZ0I7RUFDaEIsaUJBQWlCLEVBQUU7O0FBRXJCO0VBQ0UsZ0JBQWdCO0VBQ2hCLHdCQUF3QjtFQUN4QixvQkFBb0IsRUFBRTs7QUFFeEI7RUFDRSxnQkFBZ0I7RUFDaEIsd0JBQXdCLEVBQUU7O0FBRTVCO0VBQ0UsK0RBQStEO0VBQy9ELGtCQUFrQjtFQUNsQixnQkFBZ0I7RUFDaEIsd0JBQXdCO0VBQ3hCLGVBQWU7RUFDZixrQkFBa0I7RUFDbEIsZ0JBQWdCO0VBQ2hCLGVBQWU7RUFDZixvQkFBb0I7RUFDcEIsZUFBZSxFQUFFO0VBQ2pCO0lBQ0UsMkJBQTJCO0lBQzNCLGlCQUFpQixFQUFFO0VBQ3JCO0lBQ0UsZUFBZSxFQUFFO0VBQ25CO0lBQ0UsZUFBZSxFQUFFOztBQUVyQjtFQUNFLDZFQUE2RTtFQUM3RSxtQkFBbUI7RUFDbkIsc0JBQXNCLEVBQUU7O0FBRTFCO0VBQ0Usa0JBQWtCLEVBQUU7O0FBRXRCO0VBQ0UsdUJBQXVCLEVBQUU7RUFDekI7SUFDRSx1QkFBdUIsRUFBRTtFQUMzQjtJQUNFOztNQUVFLGdCQUFnQixFQUFFLEVBQUU7O0FBRTFCO0VBQ0UsK0RBQStEO0VBQy9ELGtCQUFrQjtFQUNsQixnQkFBZ0I7RUFDaEIsd0JBQXdCO0VBQ3hCLG9CQUFvQixFQUFFOztBQUV4QjtFQUNFLGNBQWM7RUFDZCxvQkFBb0I7RUFDcEIsb0JBQW9CLEVBQUU7O0FBRXhCO0VBQ0UsaUJBQWlCO0VBQ2pCLG9CQUFvQixFQUFFOztBQUV4QjtFQUNFLG9CQUFvQjtFQUNwQixzQkFBc0IsRUFBRTtFQUN4QjtJQUNFLG1CQUFtQixFQUFFO0VBQ3ZCO0lBQ0UsNkRBQTZEO0lBQzdELG9CQUFvQjtJQUNwQixnQkFBZ0I7SUFDaEIsd0JBQXdCO0lBQ3hCLGVBQWUsRUFBRTtFQUNuQjtJQUNFLCtEQUErRDtJQUMvRCxvQkFBb0I7SUFDcEIsZ0JBQWdCO0lBQ2hCLHdCQUF3QjtJQUN4QixlQUFlO0lBQ2YsZUFBZTtJQUNmLGtCQUFrQixFQUFFOztBQUV4QjtFQUNFLDZEQUE2RCxFQUFFO0VBQy9EO0lBQ0UsaUJBQWlCO0lBQ2pCLHdCQUF3QixFQUFFO0VBQzVCO0lBQ0UsZ0JBQWdCO0lBQ2hCLHdCQUF3QjtJQUN4QixlQUFlO0lBQ2YsbUJBQW1CLEVBQUU7RUFDdkI7SUFDRSxnQkFBZ0I7SUFDaEIsbUJBQW1CO0lBQ25CLG9CQUFvQjtJQUNwQixvQkFBb0I7SUFDcEIsd0JBQXdCLEVBQUU7O0FBRTlCO0VBQ0UscUJBQWM7RUFBZCxjQUFjO0VBQ2QsdUJBQStCO01BQS9CLCtCQUErQjtFQUMvQixvQkFBZ0I7TUFBaEIsZ0JBQWdCO0VBQ2hCLGtCQUFrQixFQUFFO0VBQ3BCO0lBQ0UsNERBQTREO0lBQzVELGFBQWE7SUFDYixZQUFZO0lBQ1osaUJBQWlCO0lBQ2pCLHNCQUFzQjtJQUN0QixvQkFBb0IsRUFBRTtJQUN0QjtNQUNFLDJCQUEyQixFQUFFO0lBQy9CO01BQ0UsNkJBQTZCLEVBQUU7SUFDakM7TUFDRSw4QkFBOEIsRUFBRTs7QUFFdEM7RUFDRSxxQkFBYztFQUFkLGNBQWM7RUFDZCxvQkFBZ0I7TUFBaEIsZ0JBQWdCO0VBQ2hCLGtCQUFrQixFQUFFO0VBQ3BCO0lBQ0UsdURBQXVEO0lBQ3ZELGFBQWE7SUFDYixZQUFZO0lBQ1osaUJBQWlCO0lBQ2pCLHNCQUFzQjtJQUN0QixvQkFBb0I7SUFDcEIsbUJBQW1CLEVBQUU7SUFDckI7TUFDRSwyQkFBMkIsRUFBRTtJQUMvQjtNQUNFLDZCQUE2QixFQUFFO0lBQ2pDO01BQ0UsOEJBQThCLEVBQUU7SUFDbEM7TUFDRSw4QkFBOEIsRUFBRTtJQUNsQztNQUNFLDhCQUE4QixFQUFFO0lBQ2xDO01BQ0UsOEJBQThCLEVBQUU7SUFDbEM7TUFDRSw4QkFBOEIsRUFBRTs7QUFFdEM7RUFDRSw2QkFBNkIsRUFBRTs7QUFFakM7RUFDRSx5QkFBeUIsRUFBRTs7QUFFN0I7RUFDRSxxQkFBYztFQUFkLGNBQWM7RUFDZCxvQkFBb0IsRUFBRTs7QUFFeEI7RUFDRSxtQkFBbUIsRUFBRTs7QUFFdkI7RUFDRSxvQkFBb0I7RUFDcEIsYUFBYSxFQUFFO0VBQ2Y7SUFDRSxpQkFBaUIsRUFBRTtFQUNyQjtJQUNFLG1CQUFtQixFQUFFO0VBQ3ZCO0lBQ0UsNkRBQTZEO0lBQzdELG9CQUFvQjtJQUNwQixnQkFBZ0I7SUFDaEIsd0JBQXdCO0lBQ3hCLG9CQUFvQjtJQUNwQixlQUFlLEVBQUU7SUFDakI7TUFDRSxlQUFlO01BQ2Ysb0JBQW9CLEVBQUU7SUFDeEI7TUFDRSxpQkFBaUI7TUFDakIsYUFBYSxFQUFFOztBQUVyQjtFQUNFLGlCQUFpQjtFQUNqQixtQkFBbUIsRUFBRTtFQUNyQjtJQUNFLG9CQUFvQjtJQUNwQixnQkFBZ0I7SUFDaEIsd0JBQXdCLEVBQUU7RUFDNUI7SUFDRSxvQkFBb0I7SUFDcEIsZ0JBQWdCO0lBQ2hCLHdCQUF3QjtJQUN4QixlQUFlO0lBQ2YsaUJBQWlCO0lBQ2pCLDZEQUE2RCxFQUFFOztBQUVuRTtFQUNFLHdCQUF3QjtFQUN4QixvQkFBb0I7RUFDcEIsa0JBQWtCLEVBQUU7O0FBRXRCO0VBQ0UsbUJBQW1CLEVBQUU7O0FBRXZCO0VBQ0Usc0JBQXNCLEVBQUU7O0FBRTFCO0VBQ0Usb0JBQW9CO0VBQ3BCLGdCQUFnQjtFQUNoQix3QkFBd0I7RUFDeEIscUJBQXFCO0VBQ3JCLFdBQVcsRUFBRTs7QUFFZjtFQUNFLDhFQUE4RTtFQUM5RSxtQkFBbUI7RUFDbkIsaUJBQWlCO0VBQ2pCLG9CQUFvQjtFQUNwQixnQkFBZ0I7RUFDaEIsd0JBQXdCO0VBQ3hCLG9CQUFvQixFQUFFOztBQUV4QjtFQUNFLDhFQUE4RTtFQUM5RSxxQkFBcUIsRUFBRTtFQUN2QjtJQUNFLGtCQUFrQixFQUFFOztBQUV4QjtFQUNFLGlHQUFpRyxFQUFFOztBQUVyRztFQUNFLGlHQUFpRyxFQUFFOztBQUVyRztFQUNFLGlHQUFpRyxFQUFFOztBQUVyRztFQUNFLGlHQUFpRyxFQUFFIiwiZmlsZSI6InBhZ2VzL3N1cnZleS8yMDE4LmNzcyIsInNvdXJjZXNDb250ZW50IjpbIi5zdXJ2ZXktbGF5b3V0IC5uYXZiYXIgKyAuYmFubmVyIHtcbiAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KHRvIHJpZ2h0LCAjMWU2ZmZmIDAlLCAjMDQ5OWZmIDEwMCUpO1xuICBiYWNrZ3JvdW5kLXNpemU6IDEwMCU7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTsgfVxuICAuc3VydmV5LWxheW91dCAubmF2YmFyICsgLmJhbm5lciBjYW52YXMge1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICB0b3A6IDA7XG4gICAgbGVmdDogMDtcbiAgICBib3R0b206IDA7XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgYW5pbWF0aW9uOiAxMHMgZmFkZUluO1xuICAgIGFuaW1hdGlvbi1maWxsLW1vZGU6IGZvcndhcmRzO1xuICAgIGFuaW1hdGlvbi1kZWxheTogMXM7XG4gICAgb3BhY2l0eTogMDsgfVxuICAuc3VydmV5LWxheW91dCAubmF2YmFyICsgLmJhbm5lciBoZ3JvdXAge1xuICAgIHBhZGRpbmctYm90dG9tOiAxMTJweDtcbiAgICBwYWRkaW5nLXRvcDogNDhweDsgfVxuICAuc3VydmV5LWxheW91dCAubmF2YmFyICsgLmJhbm5lciBoMiB7XG4gICAgei1pbmRleDogMTtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgb3BhY2l0eTogMDtcbiAgICBhbmltYXRpb246IDFzIGZhZGVJblVwO1xuICAgIGFuaW1hdGlvbi1kZWxheTogMnM7XG4gICAgYW5pbWF0aW9uLWZpbGwtbW9kZTogZm9yd2FyZHM7IH1cbiAgICAuc3VydmV5LWxheW91dCAubmF2YmFyICsgLmJhbm5lciBoMiBzdmcge1xuICAgICAgbWFyZ2luOiAyM3B4IGF1dG8gMTVweDtcbiAgICAgIHdpZHRoOiAzMnB4O1xuICAgICAgZGlzcGxheTogYmxvY2s7IH1cbiAgLnN1cnZleS1sYXlvdXQgLm5hdmJhciArIC5iYW5uZXIgaDEge1xuICAgIGZvbnQtc2l6ZTogNjJweDtcbiAgICBtYXJnaW4tdG9wOiAyN3B4O1xuICAgIG1hcmdpbi1ib3R0b206IDE0cHg7XG4gICAgbGV0dGVyLXNwYWNpbmc6IC0uMDI1ZW07XG4gICAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgICBhbmltYXRpb246IDFzIGZhZGVJblVwO1xuICAgIGFuaW1hdGlvbi1kZWxheTogMi4ycztcbiAgICBhbmltYXRpb24tZmlsbC1tb2RlOiBmb3J3YXJkcztcbiAgICBvcGFjaXR5OiAwOyB9XG4gIC5zdXJ2ZXktbGF5b3V0IC5uYXZiYXIgKyAuYmFubmVyIHAge1xuICAgIGZvbnQtc2l6ZTogMjJweDtcbiAgICBjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjgpO1xuICAgIGFuaW1hdGlvbjogMXMgZmFkZUluVXA7XG4gICAgYW5pbWF0aW9uLWRlbGF5OiAyLjRzO1xuICAgIGFuaW1hdGlvbi1maWxsLW1vZGU6IGZvcndhcmRzO1xuICAgIGxldHRlci1zcGFjaW5nOiAuMDFlbTtcbiAgICBvcGFjaXR5OiAwOyB9XG4gIC5zdXJ2ZXktbGF5b3V0IC5uYXZiYXIgKyAuYmFubmVyIC5iYXIge1xuICAgIGJhY2tncm91bmQ6ICNmZmY7IH1cbiAgICAuc3VydmV5LWxheW91dCAubmF2YmFyICsgLmJhbm5lciAuYmFyIHVsIGxpIGEge1xuICAgICAgcGFkZGluZzogMjhweCAxOHB4IDIycHg7XG4gICAgICBtYXJnaW46IDAgMTVweCAtMnB4OyB9XG4gICAgICBAbWVkaWEgKG1heC13aWR0aDogNzY3cHgpIHtcbiAgICAgICAgLnN1cnZleS1sYXlvdXQgLm5hdmJhciArIC5iYW5uZXIgLmJhciB1bCBsaSBhIHtcbiAgICAgICAgICBwYWRkaW5nLWxlZnQ6IDA7XG4gICAgICAgICAgcGFkZGluZy1yaWdodDogMDtcbiAgICAgICAgICBtYXJnaW4tbGVmdDogNXB4O1xuICAgICAgICAgIG1hcmdpbi1yaWdodDogNXB4OyB9IH1cbiAgICBAc3VwcG9ydHMgKGJhY2tkcm9wLWZpbHRlcjogYmx1cigzMHB4KSkge1xuICAgICAgLnN1cnZleS1sYXlvdXQgLm5hdmJhciArIC5iYW5uZXIgLmJhciB7XG4gICAgICAgIGJhY2tncm91bmQ6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC44KTtcbiAgICAgICAgYmFja2Ryb3AtZmlsdGVyOiBibHVyKDMwcHgpOyB9IH1cbiAgICAuc3VydmV5LWxheW91dCAubmF2YmFyICsgLmJhbm5lciAuYmFyOm5vdCguYWZmaXgpIHtcbiAgICAgIGJveC1zaGFkb3c6IDAgMXB4IDRweCByZ2JhKDAsIDAsIDAsIDAuMDUpLCAwIDFweCAwIHJnYmEoMCwgMCwgMCwgMC4wNSk7XG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGU7IH1cblxuLnN1cnZleS1sYXlvdXQgYXJ0aWNsZSB7XG4gIHBhZGRpbmctdG9wOiA2NHB4OyB9XG4gIC5zdXJ2ZXktbGF5b3V0IGFydGljbGUgPiBoZ3JvdXAgLmNvbnRhaW5lciB7XG4gICAgbWF4LXdpZHRoOiA2ODBweDtcbiAgICBtYXJnaW46IDMycHggYXV0byA0OXB4OyB9XG4gICAgLnN1cnZleS1sYXlvdXQgYXJ0aWNsZSA+IGhncm91cCAuY29udGFpbmVyIHAge1xuICAgICAgY29sb3I6ICMyNDI4MmU7XG4gICAgICBmb250LXNpemU6IDIzcHg7XG4gICAgICBsaW5lLWhlaWdodDogMS43NWVtO1xuICAgICAgbWFyZ2luLWJvdHRvbTogMS43M2VtO1xuICAgICAgbGV0dGVyLXNwYWNpbmc6IC0uMDAxZW07IH1cbiAgICAuc3VydmV5LWxheW91dCBhcnRpY2xlID4gaGdyb3VwIC5jb250YWluZXIgaDIge1xuICAgICAgbWFyZ2luLXRvcDogNjRweDsgfVxuICAgIC5zdXJ2ZXktbGF5b3V0IGFydGljbGUgPiBoZ3JvdXAgLmNvbnRhaW5lciBzdHJvbmcge1xuICAgICAgZm9udC13ZWlnaHQ6IDYwMDsgfVxuICAuc3VydmV5LWxheW91dCBhcnRpY2xlIGgzIHtcbiAgICBmb250LXdlaWdodDogNzAwO1xuICAgIGxldHRlci1zcGFjaW5nOiAtLjA0ZW07XG4gICAgbWFyZ2luLXRvcDogNjRweDtcbiAgICBtYXJnaW4tYm90dG9tOiAwO1xuICAgIHBhZGRpbmc6IDMxcHggMTZweCAyOXB4O1xuICAgIGZvbnQtc2l6ZTogMzJweDsgfVxuICAgIC5zdXJ2ZXktbGF5b3V0IGFydGljbGUgaDM6OmJlZm9yZSwgLnN1cnZleS1sYXlvdXQgYXJ0aWNsZSBoMzo6YWZ0ZXIge1xuICAgICAgZGlzcGxheTogbm9uZTsgfVxuXG4uc3VydmV5LWxheW91dCBzZWN0aW9uIHtcbiAgcGFkZGluZy1ib3R0b206IDcxcHg7IH1cbiAgLnN1cnZleS1sYXlvdXQgc2VjdGlvbiAuY29udGFpbmVyIHtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgbWF4LXdpZHRoOiA5NjJweDsgfVxuICAuc3VydmV5LWxheW91dCBzZWN0aW9uIGg0IHtcbiAgICBmb250LXdlaWdodDogNjAwO1xuICAgIGZvbnQtc2l6ZTogMjBweDtcbiAgICBsZXR0ZXItc3BhY2luZzogLTAuMDJlbTsgfVxuICAuc3VydmV5LWxheW91dCBzZWN0aW9uIHAsXG4gIC5zdXJ2ZXktbGF5b3V0IHNlY3Rpb24gaDQge1xuICAgIHBhZGRpbmc6IDAgMTZweDtcbiAgICBtYXJnaW46IDAgYXV0byAzMHB4O1xuICAgIGxpbmUtaGVpZ2h0OiAxLjY5ZW07XG4gICAgbGV0dGVyLXNwYWNpbmc6IC0uMDE4ZW07IH1cbiAgICAuc3VydmV5LWxheW91dCBzZWN0aW9uIHAgKyBoNCxcbiAgICAuc3VydmV5LWxheW91dCBzZWN0aW9uIGg0ICsgaDQge1xuICAgICAgbWFyZ2luLXRvcDogNDhweDsgfVxuICAuc3VydmV5LWxheW91dCBzZWN0aW9uIHAge1xuICAgIGZvbnQtc2l6ZTogMThweDtcbiAgICBsaW5lLWhlaWdodDogMS43NWVtOyB9XG4gIC5zdXJ2ZXktbGF5b3V0IHNlY3Rpb24gLnJvdyArIC5yb3cge1xuICAgIHBhZGRpbmctdG9wOiAzMnB4OyB9XG5cbi5zdXJ2ZXktbGF5b3V0IC5kYXJrIHtcbiAgYmFja2dyb3VuZDogIzExMTkyNTsgfVxuICAuc3VydmV5LWxheW91dCAuZGFyayBoMixcbiAgLnN1cnZleS1sYXlvdXQgLmRhcmsgaDMsXG4gIC5zdXJ2ZXktbGF5b3V0IC5kYXJrIGg0IHtcbiAgICBjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjk1KTsgfVxuICAuc3VydmV5LWxheW91dCAuZGFyayBwIHtcbiAgICBjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjgpOyB9XG4gIC5zdXJ2ZXktbGF5b3V0IC5kYXJrIGZpZ3VyZSBzdHJvbmcge1xuICAgIGNvbG9yOiAjY2VkNmUwOyB9XG5cbi5zdXJ2ZXktbGF5b3V0IC5pbnRybzo6YmVmb3JlIHtcbiAgYW5pbWF0aW9uLWRlbGF5OiAzczsgfVxuXG4uc3VydmV5LWxheW91dCAuZGF0YSAuY29udGFpbmVyOjpiZWZvcmUge1xuICBkaXNwbGF5OiBub25lOyB9XG5cbi5zdXJ2ZXktbGF5b3V0IC5kYXRhIGg0IHtcbiAgbWFyZ2luLWJvdHRvbTogOHB4OyB9XG5cbiNwYWdlLXN1cnZleS0yMDE4IC5uYXZiYXIgKyAuYmFubmVyIHtcbiAgYmFja2dyb3VuZDogIzcwOWRmMCBuby1yZXBlYXQgNTAlIDUwJTtcbiAgYmFja2dyb3VuZC1pbWFnZTogbGluZWFyLWdyYWRpZW50KDEzNWRlZywgIzJhNjdmZiAwJSwgIzMxN2VmMCAxMCUsICM1YmIyZTYgMzAlLCAjNmZiMmU0IDM2JSwgIzk5NkNDNyA2NiUsICM5NWEwZmQgMTAwJSk7XG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcIi9pbWcvc3VydmV5LzIwMTgtYmcuanBnXCIpLCBsaW5lYXItZ3JhZGllbnQoMTM1ZGVnLCAjMmE2N2ZmIDAlLCAjMzE3ZWYwIDEwJSwgIzViYjJlNiAzMCUsICM2ZmIyZTQgMzYlLCAjOTk2Q0M3IDY2JSwgIzk1YTBmZCAxMDAlKTtcbiAgYmFja2dyb3VuZC1zaXplOiBjb3ZlciwgMTAwJTsgfVxuXG4jcGFnZS1zdXJ2ZXktMjAxOCAjYmFycy1hbmQtY3ViZXMge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIGhlaWdodDogMTAwJTtcbiAgd2lkdGg6IDEwMCU7XG4gIHRvcDogMDtcbiAgb3ZlcmZsb3c6IGhpZGRlbjsgfVxuICAjcGFnZS1zdXJ2ZXktMjAxOCAjYmFycy1hbmQtY3ViZXMgI2JhcnMge1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICB3aWR0aDogMTAwJTtcbiAgICBib3R0b206IC00MDBweDtcbiAgICBsZWZ0OiAwOyB9XG4gICAgI3BhZ2Utc3VydmV5LTIwMTggI2JhcnMtYW5kLWN1YmVzICNiYXJzID4gZyB7XG4gICAgICBvcGFjaXR5OiAwO1xuICAgICAgbWl4LWJsZW5kLW1vZGU6IG92ZXJsYXk7XG4gICAgICBhbmltYXRpb246IGZhZGVJblVwIDFzIC41cyBmb3J3YXJkczsgfVxuICAgICAgI3BhZ2Utc3VydmV5LTIwMTggI2JhcnMtYW5kLWN1YmVzICNiYXJzID4gZzpudGgtY2hpbGQoMTYpIHtcbiAgICAgICAgYW5pbWF0aW9uLWRlbGF5OiAuNnM7IH1cbiAgICAgICNwYWdlLXN1cnZleS0yMDE4ICNiYXJzLWFuZC1jdWJlcyAjYmFycyA+IGc6bnRoLWNoaWxkKDE1KSB7XG4gICAgICAgIGFuaW1hdGlvbi1kZWxheTogLjY1czsgfVxuICAgICAgI3BhZ2Utc3VydmV5LTIwMTggI2JhcnMtYW5kLWN1YmVzICNiYXJzID4gZzpudGgtY2hpbGQoMTQpIHtcbiAgICAgICAgYW5pbWF0aW9uLWRlbGF5OiAuN3M7IH1cbiAgICAgICNwYWdlLXN1cnZleS0yMDE4ICNiYXJzLWFuZC1jdWJlcyAjYmFycyA+IGc6bnRoLWNoaWxkKDEzKSB7XG4gICAgICAgIGFuaW1hdGlvbi1kZWxheTogLjc1czsgfVxuICAgICAgI3BhZ2Utc3VydmV5LTIwMTggI2JhcnMtYW5kLWN1YmVzICNiYXJzID4gZzpudGgtY2hpbGQoMTIpIHtcbiAgICAgICAgYW5pbWF0aW9uLWRlbGF5OiAuOHM7IH1cbiAgICAgICNwYWdlLXN1cnZleS0yMDE4ICNiYXJzLWFuZC1jdWJlcyAjYmFycyA+IGc6bnRoLWNoaWxkKDExKSB7XG4gICAgICAgIGFuaW1hdGlvbi1kZWxheTogLjg1czsgfVxuICAgICAgI3BhZ2Utc3VydmV5LTIwMTggI2JhcnMtYW5kLWN1YmVzICNiYXJzID4gZzpudGgtY2hpbGQoMTApIHtcbiAgICAgICAgYW5pbWF0aW9uLWRlbGF5OiAuOXM7IH1cbiAgICAgICNwYWdlLXN1cnZleS0yMDE4ICNiYXJzLWFuZC1jdWJlcyAjYmFycyA+IGc6bnRoLWNoaWxkKDkpIHtcbiAgICAgICAgYW5pbWF0aW9uLWRlbGF5OiAuOTVzOyB9XG4gICAgICAjcGFnZS1zdXJ2ZXktMjAxOCAjYmFycy1hbmQtY3ViZXMgI2JhcnMgPiBnOm50aC1jaGlsZCg4KSB7XG4gICAgICAgIGFuaW1hdGlvbi1kZWxheTogMXM7IH1cbiAgICAgICNwYWdlLXN1cnZleS0yMDE4ICNiYXJzLWFuZC1jdWJlcyAjYmFycyA+IGc6bnRoLWNoaWxkKDcpIHtcbiAgICAgICAgYW5pbWF0aW9uLWRlbGF5OiAxLjA1czsgfVxuICAgICAgI3BhZ2Utc3VydmV5LTIwMTggI2JhcnMtYW5kLWN1YmVzICNiYXJzID4gZzpudGgtY2hpbGQoNikge1xuICAgICAgICBhbmltYXRpb24tZGVsYXk6IDEuMXM7IH1cbiAgICAgICNwYWdlLXN1cnZleS0yMDE4ICNiYXJzLWFuZC1jdWJlcyAjYmFycyA+IGc6bnRoLWNoaWxkKDUpIHtcbiAgICAgICAgYW5pbWF0aW9uLWRlbGF5OiAxLjE1czsgfVxuICAgICAgI3BhZ2Utc3VydmV5LTIwMTggI2JhcnMtYW5kLWN1YmVzICNiYXJzID4gZzpudGgtY2hpbGQoNCkge1xuICAgICAgICBhbmltYXRpb24tZGVsYXk6IDEuMnM7IH1cbiAgICAgICNwYWdlLXN1cnZleS0yMDE4ICNiYXJzLWFuZC1jdWJlcyAjYmFycyA+IGc6bnRoLWNoaWxkKDMpIHtcbiAgICAgICAgYW5pbWF0aW9uLWRlbGF5OiAxLjI1czsgfVxuICAgICAgI3BhZ2Utc3VydmV5LTIwMTggI2JhcnMtYW5kLWN1YmVzICNiYXJzID4gZzpudGgtY2hpbGQoMikge1xuICAgICAgICBhbmltYXRpb24tZGVsYXk6IDEuM3M7IH1cbiAgI3BhZ2Utc3VydmV5LTIwMTggI2JhcnMtYW5kLWN1YmVzICNjdWJlcyB7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIHRvcDogLTUwcHg7XG4gICAgbGVmdDogMDtcbiAgICBvcGFjaXR5OiAwO1xuICAgIG1peC1ibGVuZC1tb2RlOiBvdmVybGF5O1xuICAgIGFuaW1hdGlvbjogZmFkZUluVXAgMnMgZWFzZSAzcyBmb3J3YXJkczsgfVxuICAgICNwYWdlLXN1cnZleS0yMDE4ICNiYXJzLWFuZC1jdWJlcyAjY3ViZXMgZyBnIHtcbiAgICAgIGFuaW1hdGlvbjogaG92ZXJZIDEwcyBpbmZpbml0ZTsgfVxuICAgICAgI3BhZ2Utc3VydmV5LTIwMTggI2JhcnMtYW5kLWN1YmVzICNjdWJlcyBnIGc6bnRoLWNoaWxkKDIpIHtcbiAgICAgICAgYW5pbWF0aW9uLWR1cmF0aW9uOiAxNXM7IH1cbiAgICAgICNwYWdlLXN1cnZleS0yMDE4ICNiYXJzLWFuZC1jdWJlcyAjY3ViZXMgZyBnOm50aC1jaGlsZCgzKSB7XG4gICAgICAgIGFuaW1hdGlvbi1kdXJhdGlvbjogOHM7IH1cbiAgICAgICNwYWdlLXN1cnZleS0yMDE4ICNiYXJzLWFuZC1jdWJlcyAjY3ViZXMgZyBnOm50aC1jaGlsZCg0KSB7XG4gICAgICAgIGFuaW1hdGlvbi1kdXJhdGlvbjogMTNzOyB9XG5cbiNwYWdlLXN1cnZleS0yMDE4IC5jdGEgaGdyb3VwIHtcbiAgbWF4LXdpZHRoOiA1OTBweDtcbiAgZm9udC1mYW1pbHk6IFwiRWluYVwiLCBcIkhlbHZldGljYSBOZXVlXCIsIEhlbHZldGljYSwgc2Fucy1zZXJpZjsgfVxuICAjcGFnZS1zdXJ2ZXktMjAxOCAuY3RhIGhncm91cCBoMiB7XG4gICAgZm9udC1mYW1pbHk6IFwiUm9ib3RvIE1vbm9cIiwgTWVubG8sIE1vbmFjbywgQ29uc29sYXMsIFwiQ291cmllciBOZXdcIiwgbW9ub3NwYWNlO1xuICAgIGZvbnQtd2VpZ2h0OiBib2xkO1xuICAgIGZvbnQtc2l6ZTogMTJweDtcbiAgICBsZXR0ZXItc3BhY2luZzogMC4xNGVtO1xuICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XG4gICAgbWFyZ2luLXRvcDogMjhweDtcbiAgICBtYXJnaW4tYm90dG9tOiAyM3B4OyB9XG4gICAgI3BhZ2Utc3VydmV5LTIwMTggLmN0YSBoZ3JvdXAgaDIgc3ZnIHtcbiAgICAgIG1hcmdpbi1ib3R0b206IDEwcHg7IH1cbiAgI3BhZ2Utc3VydmV5LTIwMTggLmN0YSBoZ3JvdXAgaDEge1xuICAgIGZvbnQtc2l6ZTogNjRweDtcbiAgICBsaW5lLWhlaWdodDogbm9ybWFsO1xuICAgIGxldHRlci1zcGFjaW5nOiAtMC4wM2VtO1xuICAgIG1hcmdpbi10b3A6IDIycHg7XG4gICAgbWFyZ2luLWJvdHRvbTogMnB4OyB9XG4gICNwYWdlLXN1cnZleS0yMDE4IC5jdGEgaGdyb3VwIHAge1xuICAgIG1hcmdpbi1ib3R0b206IDEwcHg7XG4gICAgbGluZS1oZWlnaHQ6IDQwcHg7IH1cblxuI3BhZ2Utc3VydmV5LTIwMTggLmJhciAubmF2IGEge1xuICBmb250LWZhbWlseTogXCJFaW5hXCIsIFwiSGVsdmV0aWNhIE5ldWVcIiwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmO1xuICBmb250LXNpemU6IDE0cHg7XG4gIGxldHRlci1zcGFjaW5nOiAwLjA0ZW07XG4gIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XG4gIHBhZGRpbmc6IDQzcHggMjZweCAzOHB4O1xuICBjb2xvcjogI0IyQkVDRDsgfVxuXG4jcGFnZS1zdXJ2ZXktMjAxOCAuYmFyIC5hY3RpdmUgYSxcbiNwYWdlLXN1cnZleS0yMDE4IC5iYXIgYTpob3ZlciB7XG4gIGNvbG9yOiAjNjM5Q0ZGOyB9XG5cbiNwYWdlLXN1cnZleS0yMDE4IC5iYXIgLmFjdGl2ZSBhIHtcbiAgYm9yZGVyLWNvbG9yOiAjNjM5Q0ZGOyB9XG5cbkBtZWRpYSAobWF4LXdpZHRoOiA5OTFweCkge1xuICAjcGFnZS1zdXJ2ZXktMjAxOCAuYmFyIC5uYXYgYSB7XG4gICAgcGFkZGluZzogMjRweCA5cHggMjRweDsgfSB9XG5cbkBtZWRpYSAobWF4LXdpZHRoOiA3NjdweCkge1xuICAjcGFnZS1zdXJ2ZXktMjAxOCAuYmFyIHtcbiAgICBvdmVyZmxvdy14OiBhdXRvOyB9XG4gICAgI3BhZ2Utc3VydmV5LTIwMTggLmJhciAubmF2IGEge1xuICAgICAgcGFkZGluZzogMjRweCA2cHggMjRweDsgfSB9XG5cbiNwYWdlLXN1cnZleS0yMDE4IGFydGljbGUgaDQsXG4jcGFnZS1zdXJ2ZXktMjAxOCBhcnRpY2xlIHAge1xuICBwYWRkaW5nLWxlZnQ6IDA7XG4gIHBhZGRpbmctcmlnaHQ6IDA7IH1cblxuI3BhZ2Utc3VydmV5LTIwMTggYXJ0aWNsZSBoMyB7XG4gIGZvbnQtc2l6ZTogNDhweDtcbiAgbGV0dGVyLXNwYWNpbmc6IC0wLjAzZW07XG4gIG1hcmdpbi1ib3R0b206IDMwcHg7IH1cblxuI3BhZ2Utc3VydmV5LTIwMTggYXJ0aWNsZSBoNCB7XG4gIGZvbnQtc2l6ZTogMjBweDtcbiAgbGV0dGVyLXNwYWNpbmc6IC0wLjAyZW07IH1cblxuI3BhZ2Utc3VydmV5LTIwMTggYXJ0aWNsZSBibG9ja3F1b3RlIHtcbiAgZm9udC1mYW1pbHk6IFwiSW50ZXJcIiwgXCJJbnRlciBVSVwiLCBIZWx2ZXRpY2EsIEFyaWFsLCBzYW5zLXNlcmlmO1xuICBsaW5lLWhlaWdodDogMzRweDtcbiAgZm9udC1zaXplOiAyMHB4O1xuICBsZXR0ZXItc3BhY2luZzogLTAuMDJlbTtcbiAgY29sb3I6ICM3QzkwRjY7XG4gIGJvcmRlci1sZWZ0OiBub25lO1xuICBwYWRkaW5nLWxlZnQ6IDA7XG4gIG1hcmdpbi1sZWZ0OiAwO1xuICBtYXJnaW4tYm90dG9tOiAxM3B4O1xuICBwYWRkaW5nLXRvcDogMDsgfVxuICAjcGFnZS1zdXJ2ZXktMjAxOCBhcnRpY2xlIGJsb2NrcXVvdGUgYSB7XG4gICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XG4gICAgZm9udC13ZWlnaHQ6IDUwMDsgfVxuICAjcGFnZS1zdXJ2ZXktMjAxOCBhcnRpY2xlIGJsb2NrcXVvdGUucGluayB7XG4gICAgY29sb3I6ICNGMzdCQUI7IH1cbiAgI3BhZ2Utc3VydmV5LTIwMTggYXJ0aWNsZSBibG9ja3F1b3RlLm9yYW5nZSB7XG4gICAgY29sb3I6ICNGNTk0N0U7IH1cblxuI3BhZ2Utc3VydmV5LTIwMTggYXJ0aWNsZSBzZWN0aW9uIHtcbiAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KDE4MGRlZywgI0Y3RjlGQyAwJSwgcmdiYSgyNDcsIDI0OSwgMjUyLCAwKSAxMDAlKTtcbiAgcGFkZGluZy10b3A6IDEwNnB4O1xuICBwYWRkaW5nLWJvdHRvbTogMTcwcHg7IH1cblxuI3BhZ2Utc3VydmV5LTIwMTggYXJ0aWNsZSBzZWN0aW9uIGgzIHtcbiAgbWFyZ2luLWxlZnQ6IDE5cHg7IH1cblxuI3BhZ2Utc3VydmV5LTIwMTggYXJ0aWNsZSBzZWN0aW9uIC5jb2wtbWQtNiB7XG4gIHBhZGRpbmc6IDAgNDhweCAwIDM1cHg7IH1cbiAgI3BhZ2Utc3VydmV5LTIwMTggYXJ0aWNsZSBzZWN0aW9uIC5jb2wtbWQtNiArIC5jb2wtbWQtNiB7XG4gICAgcGFkZGluZzogMCAzNXB4IDAgNDhweDsgfVxuICBAbWVkaWEgKG1heC13aWR0aDogNzY3cHgpIHtcbiAgICAjcGFnZS1zdXJ2ZXktMjAxOCBhcnRpY2xlIHNlY3Rpb24gLmNvbC1tZC02LFxuICAgICNwYWdlLXN1cnZleS0yMDE4IGFydGljbGUgc2VjdGlvbiAuY29sLW1kLTYgKyAuY29sLW1kLTYge1xuICAgICAgcGFkZGluZzogMCAxNXB4OyB9IH1cblxuI3BhZ2Utc3VydmV5LTIwMTggYXJ0aWNsZSBzZWN0aW9uIHAge1xuICBmb250LWZhbWlseTogXCJJbnRlclwiLCBcIkludGVyIFVJXCIsIEhlbHZldGljYSwgQXJpYWwsIHNhbnMtc2VyaWY7XG4gIGxpbmUtaGVpZ2h0OiAyOXB4O1xuICBmb250LXNpemU6IDE2cHg7XG4gIGxldHRlci1zcGFjaW5nOiAtMC4wMWVtO1xuICBtYXJnaW4tYm90dG9tOiAyMnB4OyB9XG5cbiNwYWdlLXN1cnZleS0yMDE4IGFydGljbGUgc2VjdGlvbiBoNCB7XG4gIG1hcmdpbi10b3A6IDA7XG4gIG1hcmdpbi1ib3R0b206IDI4cHg7XG4gIGxpbmUtaGVpZ2h0OiBub3JtYWw7IH1cblxuI3BhZ2Utc3VydmV5LTIwMTggYXJ0aWNsZSBzZWN0aW9uIHAgKyBoNCB7XG4gIG1hcmdpbi10b3A6IDY2cHg7XG4gIG1hcmdpbi1ib3R0b206IDE5cHg7IH1cblxuI3BhZ2Utc3VydmV5LTIwMTggLmZhY3RvaWQge1xuICBwYWRkaW5nOiA1cHggMCAyMHB4O1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7IH1cbiAgI3BhZ2Utc3VydmV5LTIwMTggLmZhY3RvaWQ6Zmlyc3QtY2hpbGQge1xuICAgIG1hcmdpbi1yaWdodDogNTZweDsgfVxuICAjcGFnZS1zdXJ2ZXktMjAxOCAuZmFjdG9pZCBzdHJvbmcge1xuICAgIGZvbnQtZmFtaWx5OiBcIkVpbmFcIiwgXCJIZWx2ZXRpY2EgTmV1ZVwiLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7XG4gICAgbGluZS1oZWlnaHQ6IG5vcm1hbDtcbiAgICBmb250LXNpemU6IDU2cHg7XG4gICAgbGV0dGVyLXNwYWNpbmc6IC0wLjAzZW07XG4gICAgY29sb3I6ICM3QzhGRjY7IH1cbiAgI3BhZ2Utc3VydmV5LTIwMTggLmZhY3RvaWQgc3BhbiB7XG4gICAgZm9udC1mYW1pbHk6IFwiSW50ZXJcIiwgXCJJbnRlciBVSVwiLCBIZWx2ZXRpY2EsIEFyaWFsLCBzYW5zLXNlcmlmO1xuICAgIGxpbmUtaGVpZ2h0OiBub3JtYWw7XG4gICAgZm9udC1zaXplOiAxNnB4O1xuICAgIGxldHRlci1zcGFjaW5nOiAtMC4wMmVtO1xuICAgIGNvbG9yOiAjNEI1MzdBO1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIG1hcmdpbi10b3A6IC0xNHB4OyB9XG5cbiNwYWdlLXN1cnZleS0yMDE4ICNpbnRyb2R1Y3Rpb24ge1xuICBmb250LWZhbWlseTogXCJFaW5hXCIsIFwiSGVsdmV0aWNhIE5ldWVcIiwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmOyB9XG4gICNwYWdlLXN1cnZleS0yMDE4ICNpbnRyb2R1Y3Rpb24gLmNvbnRhaW5lciB7XG4gICAgbWF4LXdpZHRoOiA2MjJweDtcbiAgICBtYXJnaW46IDk4cHggYXV0byAxNThweDsgfVxuICAjcGFnZS1zdXJ2ZXktMjAxOCAjaW50cm9kdWN0aW9uIGgzIHtcbiAgICBmb250LXNpemU6IDQ4cHg7XG4gICAgbGV0dGVyLXNwYWNpbmc6IC0wLjAzZW07XG4gICAgY29sb3I6ICMwRTE1MUY7XG4gICAgbWFyZ2luLWJvdHRvbTogOHB4OyB9XG4gICNwYWdlLXN1cnZleS0yMDE4ICNpbnRyb2R1Y3Rpb24gcCB7XG4gICAgZm9udC1zaXplOiAyNHB4O1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICBsaW5lLWhlaWdodDogbm9ybWFsO1xuICAgIG1hcmdpbi1ib3R0b206IDMzcHg7XG4gICAgbGV0dGVyLXNwYWNpbmc6IC0wLjAyZW07IH1cblxuI3BhZ2Utc3VydmV5LTIwMTggI2JpZy10aHJlZSB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcbiAgZmxleC13cmFwOiB3cmFwO1xuICBwYWRkaW5nOiAwIDAgMjRweDsgfVxuICAjcGFnZS1zdXJ2ZXktMjAxOCAjYmlnLXRocmVlIGxpIHtcbiAgICBiYWNrZ3JvdW5kOiB1cmwoXCIvaW1nL3N1cnZleS9mcmFtZXdvcmtzLnBuZ1wiKSAwIDAgbm8tcmVwZWF0O1xuICAgIGhlaWdodDogOTZweDtcbiAgICB3aWR0aDogOTZweDtcbiAgICBsaXN0LXN0eWxlOiBub25lO1xuICAgIGJhY2tncm91bmQtc2l6ZTogOTZweDtcbiAgICBtYXJnaW4tYm90dG9tOiAxNnB4OyB9XG4gICAgI3BhZ2Utc3VydmV5LTIwMTggI2JpZy10aHJlZSBsaS5hbmd1bGFyIHtcbiAgICAgIGJhY2tncm91bmQtcG9zaXRpb246IDAgMHB4OyB9XG4gICAgI3BhZ2Utc3VydmV5LTIwMTggI2JpZy10aHJlZSBsaS5yZWFjdCB7XG4gICAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwIC05NnB4OyB9XG4gICAgI3BhZ2Utc3VydmV5LTIwMTggI2JpZy10aHJlZSBsaS52dWUge1xuICAgICAgYmFja2dyb3VuZC1wb3NpdGlvbjogMCAtMTkycHg7IH1cblxuI3BhZ2Utc3VydmV5LTIwMTggLnRvb2xzIHtcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC13cmFwOiB3cmFwO1xuICBwYWRkaW5nOiAwIDAgMjRweDsgfVxuICAjcGFnZS1zdXJ2ZXktMjAxOCAudG9vbHMgbGkge1xuICAgIGJhY2tncm91bmQ6IHVybChcIi9pbWcvc3VydmV5L3Rvb2xzLnBuZ1wiKSAwIDAgbm8tcmVwZWF0O1xuICAgIGhlaWdodDogODBweDtcbiAgICB3aWR0aDogODBweDtcbiAgICBsaXN0LXN0eWxlOiBub25lO1xuICAgIGJhY2tncm91bmQtc2l6ZTogODBweDtcbiAgICBtYXJnaW4tYm90dG9tOiAxNnB4O1xuICAgIG1hcmdpbi1yaWdodDogMTVweDsgfVxuICAgICNwYWdlLXN1cnZleS0yMDE4IC50b29scyBsaS5pb25pYyB7XG4gICAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwIDBweDsgfVxuICAgICNwYWdlLXN1cnZleS0yMDE4IC50b29scyBsaS5yZWFjdCB7XG4gICAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwIC04MHB4OyB9XG4gICAgI3BhZ2Utc3VydmV5LTIwMTggLnRvb2xzIGxpLnhhbWFyaW4ge1xuICAgICAgYmFja2dyb3VuZC1wb3NpdGlvbjogMCAtMTYwcHg7IH1cbiAgICAjcGFnZS1zdXJ2ZXktMjAxOCAudG9vbHMgbGkubXlzcWwge1xuICAgICAgYmFja2dyb3VuZC1wb3NpdGlvbjogMCAtMjQwcHg7IH1cbiAgICAjcGFnZS1zdXJ2ZXktMjAxOCAudG9vbHMgbGkuZmlyZWJhc2Uge1xuICAgICAgYmFja2dyb3VuZC1wb3NpdGlvbjogMCAtMzIwcHg7IH1cbiAgICAjcGFnZS1zdXJ2ZXktMjAxOCAudG9vbHMgbGkubW9uZ29kYiB7XG4gICAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwIC00MDBweDsgfVxuICAgICNwYWdlLXN1cnZleS0yMDE4IC50b29scyBsaS5wb3N0Z3JlcyB7XG4gICAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwIC00ODBweDsgfVxuXG4jcGFnZS1zdXJ2ZXktMjAxOCBpbWcucHVsbC1yaWdodCB7XG4gIG1hcmdpbjogMjRweCAtMTVweCAxMHB4IDMwcHg7IH1cblxuI3BhZ2Utc3VydmV5LTIwMTggI3Rvb2xzIC50b29scyB7XG4gIG1hcmdpbjogLTJweCAwIDI1cHggLTlweDsgfVxuXG4jcGFnZS1zdXJ2ZXktMjAxOCAjaGFiYml0cyBhc2lkZSB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIG1hcmdpbi1ib3R0b206IDUycHg7IH1cblxuI3BhZ2Utc3VydmV5LTIwMTggI2JhY2tlbmQgLnRvb2xzIHtcbiAgbWFyZ2luOiAzOXB4IDAgMXB4OyB9XG5cbiNwYWdlLXN1cnZleS0yMDE4ICNiaWctcGljdHVyZSB7XG4gIGJhY2tncm91bmQ6ICMxODIxMkY7XG4gIGNvbG9yOiB3aGl0ZTsgfVxuICAjcGFnZS1zdXJ2ZXktMjAxOCAjYmlnLXBpY3R1cmUgLmNvbnRhaW5lciB7XG4gICAgbWF4LXdpZHRoOiA2MjJweDsgfVxuICAjcGFnZS1zdXJ2ZXktMjAxOCAjYmlnLXBpY3R1cmUgaDMge1xuICAgIG1hcmdpbi1ib3R0b206IDhweDsgfVxuICAjcGFnZS1zdXJ2ZXktMjAxOCAjYmlnLXBpY3R1cmUgcCB7XG4gICAgZm9udC1mYW1pbHk6IFwiRWluYVwiLCBcIkhlbHZldGljYSBOZXVlXCIsIEhlbHZldGljYSwgc2Fucy1zZXJpZjtcbiAgICBsaW5lLWhlaWdodDogbm9ybWFsO1xuICAgIGZvbnQtc2l6ZTogMjRweDtcbiAgICBsZXR0ZXItc3BhY2luZzogLTAuMDJlbTtcbiAgICBtYXJnaW4tYm90dG9tOiAzM3B4O1xuICAgIGNvbG9yOiAjREVFM0VBOyB9XG4gICAgI3BhZ2Utc3VydmV5LTIwMTggI2JpZy1waWN0dXJlIHAuYmx1ZSB7XG4gICAgICBjb2xvcjogIzYzOUNGRjtcbiAgICAgIG1hcmdpbi1ib3R0b206IDQwcHg7IH1cbiAgICAjcGFnZS1zdXJ2ZXktMjAxOCAjYmlnLXBpY3R1cmUgcCBzdHJvbmcge1xuICAgICAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgICAgIGNvbG9yOiB3aGl0ZTsgfVxuXG4jcGFnZS1zdXJ2ZXktMjAxOCAjcmVzdWx0cyBoZ3JvdXAge1xuICBtYXgtd2lkdGg6IDk3MHB4O1xuICBwYWRkaW5nLXRvcDogMTYycHg7IH1cbiAgI3BhZ2Utc3VydmV5LTIwMTggI3Jlc3VsdHMgaGdyb3VwIGgyIHtcbiAgICBsaW5lLWhlaWdodDogbm9ybWFsO1xuICAgIGZvbnQtc2l6ZTogNDhweDtcbiAgICBsZXR0ZXItc3BhY2luZzogLTAuMDNlbTsgfVxuICAjcGFnZS1zdXJ2ZXktMjAxOCAjcmVzdWx0cyBoZ3JvdXAgcCB7XG4gICAgbGluZS1oZWlnaHQ6IG5vcm1hbDtcbiAgICBmb250LXNpemU6IDI0cHg7XG4gICAgbGV0dGVyLXNwYWNpbmc6IC0wLjAyZW07XG4gICAgY29sb3I6ICNERUUzRUE7XG4gICAgbWF4LXdpZHRoOiA2NDBweDtcbiAgICBmb250LWZhbWlseTogXCJFaW5hXCIsIFwiSGVsdmV0aWNhIE5ldWVcIiwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmOyB9XG5cbiNwYWdlLXN1cnZleS0yMDE4ICNyZXN1bHRzIHNlY3Rpb24ge1xuICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcbiAgcGFkZGluZy1ib3R0b206IDBweDtcbiAgcGFkZGluZy10b3A6IDE0cHg7IH1cblxuI3BhZ2Utc3VydmV5LTIwMTggI3Jlc3VsdHMgI2RlbW9ncmFwaGljcyB7XG4gIHBhZGRpbmctdG9wOiAxMDVweDsgfVxuXG4jcGFnZS1zdXJ2ZXktMjAxOCAjcmVzdWx0cyAjYmFja2VuZCB7XG4gIHBhZGRpbmctYm90dG9tOiAxMDVweDsgfVxuXG4jcGFnZS1zdXJ2ZXktMjAxOCAjcmVzdWx0cyBoMyB7XG4gIGxpbmUtaGVpZ2h0OiBub3JtYWw7XG4gIGZvbnQtc2l6ZTogMzZweDtcbiAgbGV0dGVyLXNwYWNpbmc6IC0wLjAyZW07XG4gIG1hcmdpbjogMzNweCAtMCA0NHB4O1xuICBwYWRkaW5nOiAwOyB9XG5cbiNwYWdlLXN1cnZleS0yMDE4ICNyZXN1bHRzIGg0IHtcbiAgZm9udC1mYW1pbHk6IFwiUm9ib3RvIE1vbm9cIiwgTWVubG8sIE1vbmFjbywgQ29uc29sYXMsIFwiQ291cmllciBOZXdcIiwgbW9ub3NwYWNlO1xuICBmb250LXN0eWxlOiBub3JtYWw7XG4gIGZvbnQtd2VpZ2h0OiA1MDA7XG4gIGxpbmUtaGVpZ2h0OiBub3JtYWw7XG4gIGZvbnQtc2l6ZTogMjBweDtcbiAgbGV0dGVyLXNwYWNpbmc6IC0wLjA0ZW07XG4gIG1hcmdpbi1ib3R0b206IDQycHg7IH1cblxuI3BhZ2Utc3VydmV5LTIwMTggI3Jlc3VsdHMgaW9uaWMtYmFyLWNoYXJ0IHtcbiAgZm9udC1mYW1pbHk6IFwiUm9ib3RvIE1vbm9cIiwgTWVubG8sIE1vbmFjbywgQ29uc29sYXMsIFwiQ291cmllciBOZXdcIiwgbW9ub3NwYWNlO1xuICBtYXJnaW4tYm90dG9tOiAxMTFweDsgfVxuICAjcGFnZS1zdXJ2ZXktMjAxOCAjcmVzdWx0cyBpb25pYy1iYXItY2hhcnQ6bm90KC5oeWRyYXRlZCkge1xuICAgIG1pbi1oZWlnaHQ6IDEyMHB4OyB9XG5cbiNwYWdlLXN1cnZleS0yMDE4ICNyZXN1bHRzIC5iYXIge1xuICBiYWNrZ3JvdW5kOiAjNWI3MDhiIGxpbmVhci1ncmFkaWVudCh0byByaWdodCwgcmdiYSgxNDYsIDIyNSwgMTY3LCAwLjIpLCByZ2JhKDgxLCAxNjcsIDI1NSwgMC4yKSk7IH1cblxuI3BhZ2Utc3VydmV5LTIwMTggI3Rvb2xzIC5iYXIge1xuICBiYWNrZ3JvdW5kOiAjNWI3MDhiIGxpbmVhci1ncmFkaWVudCh0byByaWdodCwgcmdiYSgyMjksIDY3LCAxMzMsIDAuMiksIHJnYmEoMTIwLCAxMDksIDI0OSwgMC4yKSk7IH1cblxuI3BhZ2Utc3VydmV5LTIwMTggI3Jlc3VsdHMtcHdhcyAuYmFyIHtcbiAgYmFja2dyb3VuZDogIzViNzA4YiBsaW5lYXItZ3JhZGllbnQodG8gcmlnaHQsIHJnYmEoMjU1LCAxMjMsIDk0LCAwLjIpLCByZ2JhKDI0MywgMTIzLCAxNzEsIDAuMikpOyB9XG5cbiNwYWdlLXN1cnZleS0yMDE4ICNiYWNrZW5kIC5iYXIge1xuICBiYWNrZ3JvdW5kOiAjNWI3MDhiIGxpbmVhci1ncmFkaWVudCh0byByaWdodCwgcmdiYSgyNDIsIDE5NywgMzgsIDAuMiksIHJnYmEoMTQ2LCAyMjUsIDE2NywgMC4yKSk7IH1cbiJdfQ== */\n"
  },
  {
    "path": "content/css/pages/team.css",
    "content": "#page-team .navbar + .banner {\n  background: #393e49 no-repeat center top;\n  background-image: url(\"/img/team/team-cta-bg.jpg\"), linear-gradient(to right, #1a2538 0%, #1f2b40 100%);\n  background-size: cover, 100%;\n  height: 360px; }\n\n#page-team .made-of {\n  max-width: 680px;\n  width: 100%;\n  margin: 80px auto 90px;\n  text-align: center; }\n  #page-team .made-of h3 {\n    margin-bottom: 10px; }\n  #page-team .made-of p {\n    color: #5d636c;\n    font-size: 18px;\n    line-height: 28px;\n    font-weight: 400; }\n\n#page-team .cofounders .img {\n  background: #f9f9fa no-repeat center top;\n  background-image: url(\"/img/team/max-ben.jpg\");\n  background-size: cover;\n  height: 436px;\n  width: 100%; }\n  @media (max-width: 767px) {\n    #page-team .cofounders .img {\n      height: 290px; } }\n\n#page-team .cofounders .bar {\n  background: #f9f9fa repeat-y center top;\n  background-image: url(\"/img/team/max-ben-bar.jpg\");\n  background-size: cover;\n  padding-top: 30px; }\n  #page-team .cofounders .bar h4 {\n    font-size: 18px;\n    margin-bottom: 0; }\n  #page-team .cofounders .bar p {\n    color: #576070; }\n\n#page-team .cofounders .max,\n#page-team .cofounders .ben {\n  width: 49%;\n  float: left; }\n\n#page-team .cofounders .max {\n  padding-left: 15%; }\n  @media (max-width: 767px) {\n    #page-team .cofounders .max {\n      padding-left: 0; } }\n\n#page-team .cofounders .ben {\n  padding-left: 6%; }\n\n#page-team .employees {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-wrap: wrap;\n      flex-wrap: wrap;\n  -ms-flex-pack: distribute;\n      justify-content: space-around;\n  padding-bottom: 60px; }\n  #page-team .employees .employee {\n    -ms-flex: 0 1 260px;\n        flex: 0 1 260px;\n    padding: 0 50px 50px;\n    position: relative;\n    margin: 0 auto;\n    text-decoration: none; }\n    #page-team .employees .employee .avatar {\n      height: 160px;\n      width: 160px;\n      -webkit-clip-path: circle(80px at center);\n      clip-path: circle(80px at center);\n      transition: -webkit-transform .2s ease;\n      transition: transform .2s ease;\n      transition: transform .2s ease, -webkit-transform .2s ease; }\n    #page-team .employees .employee[href]:hover .avatar {\n      -webkit-transform: scale(1.05, 1.05);\n              transform: scale(1.05, 1.05); }\n    #page-team .employees .employee hgroup {\n      margin-top: 16px; }\n      #page-team .employees .employee hgroup h4 {\n        font-size: 16px;\n        margin-bottom: 4px;\n        font-weight: 600;\n        color: #4C555A; }\n      #page-team .employees .employee hgroup .twitter::before {\n        float: right;\n        color: #4C555A;\n        content: \"\\f2b0\";\n        font-family: \"Ionicons\";\n        transition: .2s color ease; }\n      #page-team .employees .employee hgroup .twitter:hover::before {\n        color: #4a8bfc; }\n      #page-team .employees .employee hgroup p {\n        font-size: 10px;\n        color: #aaa;\n        font-weight: 600;\n        text-transform: uppercase;\n        letter-spacing: .03em; }\n        #page-team .employees .employee hgroup p.blue {\n          color: #4a8bfc; }\n    #page-team .employees .employee .description {\n      position: absolute;\n      width: 250px;\n      height: 260px;\n      top: 0;\n      line-height: 260px;\n      opacity: 0;\n      transition: opacity .5s; }\n      #page-team .employees .employee .description p {\n        display: inline-block;\n        vertical-align: middle;\n        color: #4C555A;\n        font-weight: 400;\n        font-size: 13px;\n        line-height: 22px; }\n\n#page-team .hero {\n  background: no-repeat center top url(\"/img/team/see-openings-bg.jpg\");\n  background-size: cover;\n  height: 260px;\n  padding-top: 65px; }\n  #page-team .hero h3 {\n    color: white; }\n  #page-team .hero .btn.white {\n    text-transform: none;\n    letter-spacing: -0.02em;\n    font-weight: 700;\n    font-size: 14px;\n    border-radius: 3px;\n    padding: 16px 15px 14px;\n    margin-top: 15px; }\n\n/*# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInRlYW0uY3NzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0VBQ0UseUNBQXlDO0VBQ3pDLHdHQUF3RztFQUN4Ryw2QkFBNkI7RUFDN0IsY0FBYyxFQUFFOztBQUVsQjtFQUNFLGlCQUFpQjtFQUNqQixZQUFZO0VBQ1osdUJBQXVCO0VBQ3ZCLG1CQUFtQixFQUFFO0VBQ3JCO0lBQ0Usb0JBQW9CLEVBQUU7RUFDeEI7SUFDRSxlQUFlO0lBQ2YsZ0JBQWdCO0lBQ2hCLGtCQUFrQjtJQUNsQixpQkFBaUIsRUFBRTs7QUFFdkI7RUFDRSx5Q0FBeUM7RUFDekMsK0NBQStDO0VBQy9DLHVCQUF1QjtFQUN2QixjQUFjO0VBQ2QsWUFBWSxFQUFFO0VBQ2Q7SUFDRTtNQUNFLGNBQWMsRUFBRSxFQUFFOztBQUV4QjtFQUNFLHdDQUF3QztFQUN4QyxtREFBbUQ7RUFDbkQsdUJBQXVCO0VBQ3ZCLGtCQUFrQixFQUFFO0VBQ3BCO0lBQ0UsZ0JBQWdCO0lBQ2hCLGlCQUFpQixFQUFFO0VBQ3JCO0lBQ0UsZUFBZSxFQUFFOztBQUVyQjs7RUFFRSxXQUFXO0VBQ1gsWUFBWSxFQUFFOztBQUVoQjtFQUNFLGtCQUFrQixFQUFFO0VBQ3BCO0lBQ0U7TUFDRSxnQkFBZ0IsRUFBRSxFQUFFOztBQUUxQjtFQUNFLGlCQUFpQixFQUFFOztBQUVyQjtFQUNFLHFCQUFjO0VBQWQsY0FBYztFQUNkLG9CQUFnQjtNQUFoQixnQkFBZ0I7RUFDaEIsMEJBQThCO01BQTlCLDhCQUE4QjtFQUM5QixxQkFBcUIsRUFBRTtFQUN2QjtJQUNFLG9CQUFnQjtRQUFoQixnQkFBZ0I7SUFDaEIscUJBQXFCO0lBQ3JCLG1CQUFtQjtJQUNuQixlQUFlO0lBQ2Ysc0JBQXNCLEVBQUU7SUFDeEI7TUFDRSxjQUFjO01BQ2QsYUFBYTtNQUNiLDBDQUEwQztNQUMxQyxrQ0FBa0M7TUFDbEMsdUNBQStCO01BQS9CLCtCQUErQjtNQUEvQiwyREFBK0IsRUFBRTtJQUNuQztNQUNFLHFDQUE2QjtjQUE3Qiw2QkFBNkIsRUFBRTtJQUNqQztNQUNFLGlCQUFpQixFQUFFO01BQ25CO1FBQ0UsZ0JBQWdCO1FBQ2hCLG1CQUFtQjtRQUNuQixpQkFBaUI7UUFDakIsZUFBZSxFQUFFO01BQ25CO1FBQ0UsYUFBYTtRQUNiLGVBQWU7UUFDZixpQkFBaUI7UUFDakIsd0JBQXdCO1FBQ3hCLDJCQUEyQixFQUFFO01BQy9CO1FBQ0UsZUFBZSxFQUFFO01BQ25CO1FBQ0UsZ0JBQWdCO1FBQ2hCLFlBQVk7UUFDWixpQkFBaUI7UUFDakIsMEJBQTBCO1FBQzFCLHNCQUFzQixFQUFFO1FBQ3hCO1VBQ0UsZUFBZSxFQUFFO0lBQ3ZCO01BQ0UsbUJBQW1CO01BQ25CLGFBQWE7TUFDYixjQUFjO01BQ2QsT0FBTztNQUNQLG1CQUFtQjtNQUNuQixXQUFXO01BQ1gsd0JBQXdCLEVBQUU7TUFDMUI7UUFDRSxzQkFBc0I7UUFDdEIsdUJBQXVCO1FBQ3ZCLGVBQWU7UUFDZixpQkFBaUI7UUFDakIsZ0JBQWdCO1FBQ2hCLGtCQUFrQixFQUFFOztBQUU1QjtFQUNFLHNFQUFzRTtFQUN0RSx1QkFBdUI7RUFDdkIsY0FBYztFQUNkLGtCQUFrQixFQUFFO0VBQ3BCO0lBQ0UsYUFBYSxFQUFFO0VBQ2pCO0lBQ0UscUJBQXFCO0lBQ3JCLHdCQUF3QjtJQUN4QixpQkFBaUI7SUFDakIsZ0JBQWdCO0lBQ2hCLG1CQUFtQjtJQUNuQix3QkFBd0I7SUFDeEIsaUJBQWlCLEVBQUUiLCJmaWxlIjoicGFnZXMvdGVhbS5jc3MiLCJzb3VyY2VzQ29udGVudCI6WyIjcGFnZS10ZWFtIC5uYXZiYXIgKyAuYmFubmVyIHtcbiAgYmFja2dyb3VuZDogIzM5M2U0OSBuby1yZXBlYXQgY2VudGVyIHRvcDtcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFwiL2ltZy90ZWFtL3RlYW0tY3RhLWJnLmpwZ1wiKSwgbGluZWFyLWdyYWRpZW50KHRvIHJpZ2h0LCAjMWEyNTM4IDAlLCAjMWYyYjQwIDEwMCUpO1xuICBiYWNrZ3JvdW5kLXNpemU6IGNvdmVyLCAxMDAlO1xuICBoZWlnaHQ6IDM2MHB4OyB9XG5cbiNwYWdlLXRlYW0gLm1hZGUtb2Yge1xuICBtYXgtd2lkdGg6IDY4MHB4O1xuICB3aWR0aDogMTAwJTtcbiAgbWFyZ2luOiA4MHB4IGF1dG8gOTBweDtcbiAgdGV4dC1hbGlnbjogY2VudGVyOyB9XG4gICNwYWdlLXRlYW0gLm1hZGUtb2YgaDMge1xuICAgIG1hcmdpbi1ib3R0b206IDEwcHg7IH1cbiAgI3BhZ2UtdGVhbSAubWFkZS1vZiBwIHtcbiAgICBjb2xvcjogIzVkNjM2YztcbiAgICBmb250LXNpemU6IDE4cHg7XG4gICAgbGluZS1oZWlnaHQ6IDI4cHg7XG4gICAgZm9udC13ZWlnaHQ6IDQwMDsgfVxuXG4jcGFnZS10ZWFtIC5jb2ZvdW5kZXJzIC5pbWcge1xuICBiYWNrZ3JvdW5kOiAjZjlmOWZhIG5vLXJlcGVhdCBjZW50ZXIgdG9wO1xuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXCIvaW1nL3RlYW0vbWF4LWJlbi5qcGdcIik7XG4gIGJhY2tncm91bmQtc2l6ZTogY292ZXI7XG4gIGhlaWdodDogNDM2cHg7XG4gIHdpZHRoOiAxMDAlOyB9XG4gIEBtZWRpYSAobWF4LXdpZHRoOiA3NjdweCkge1xuICAgICNwYWdlLXRlYW0gLmNvZm91bmRlcnMgLmltZyB7XG4gICAgICBoZWlnaHQ6IDI5MHB4OyB9IH1cblxuI3BhZ2UtdGVhbSAuY29mb3VuZGVycyAuYmFyIHtcbiAgYmFja2dyb3VuZDogI2Y5ZjlmYSByZXBlYXQteSBjZW50ZXIgdG9wO1xuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXCIvaW1nL3RlYW0vbWF4LWJlbi1iYXIuanBnXCIpO1xuICBiYWNrZ3JvdW5kLXNpemU6IGNvdmVyO1xuICBwYWRkaW5nLXRvcDogMzBweDsgfVxuICAjcGFnZS10ZWFtIC5jb2ZvdW5kZXJzIC5iYXIgaDQge1xuICAgIGZvbnQtc2l6ZTogMThweDtcbiAgICBtYXJnaW4tYm90dG9tOiAwOyB9XG4gICNwYWdlLXRlYW0gLmNvZm91bmRlcnMgLmJhciBwIHtcbiAgICBjb2xvcjogIzU3NjA3MDsgfVxuXG4jcGFnZS10ZWFtIC5jb2ZvdW5kZXJzIC5tYXgsXG4jcGFnZS10ZWFtIC5jb2ZvdW5kZXJzIC5iZW4ge1xuICB3aWR0aDogNDklO1xuICBmbG9hdDogbGVmdDsgfVxuXG4jcGFnZS10ZWFtIC5jb2ZvdW5kZXJzIC5tYXgge1xuICBwYWRkaW5nLWxlZnQ6IDE1JTsgfVxuICBAbWVkaWEgKG1heC13aWR0aDogNzY3cHgpIHtcbiAgICAjcGFnZS10ZWFtIC5jb2ZvdW5kZXJzIC5tYXgge1xuICAgICAgcGFkZGluZy1sZWZ0OiAwOyB9IH1cblxuI3BhZ2UtdGVhbSAuY29mb3VuZGVycyAuYmVuIHtcbiAgcGFkZGluZy1sZWZ0OiA2JTsgfVxuXG4jcGFnZS10ZWFtIC5lbXBsb3llZXMge1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LXdyYXA6IHdyYXA7XG4gIGp1c3RpZnktY29udGVudDogc3BhY2UtYXJvdW5kO1xuICBwYWRkaW5nLWJvdHRvbTogNjBweDsgfVxuICAjcGFnZS10ZWFtIC5lbXBsb3llZXMgLmVtcGxveWVlIHtcbiAgICBmbGV4OiAwIDEgMjYwcHg7XG4gICAgcGFkZGluZzogMCA1MHB4IDUwcHg7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIG1hcmdpbjogMCBhdXRvO1xuICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTsgfVxuICAgICNwYWdlLXRlYW0gLmVtcGxveWVlcyAuZW1wbG95ZWUgLmF2YXRhciB7XG4gICAgICBoZWlnaHQ6IDE2MHB4O1xuICAgICAgd2lkdGg6IDE2MHB4O1xuICAgICAgLXdlYmtpdC1jbGlwLXBhdGg6IGNpcmNsZSg4MHB4IGF0IGNlbnRlcik7XG4gICAgICBjbGlwLXBhdGg6IGNpcmNsZSg4MHB4IGF0IGNlbnRlcik7XG4gICAgICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gLjJzIGVhc2U7IH1cbiAgICAjcGFnZS10ZWFtIC5lbXBsb3llZXMgLmVtcGxveWVlW2hyZWZdOmhvdmVyIC5hdmF0YXIge1xuICAgICAgdHJhbnNmb3JtOiBzY2FsZSgxLjA1LCAxLjA1KTsgfVxuICAgICNwYWdlLXRlYW0gLmVtcGxveWVlcyAuZW1wbG95ZWUgaGdyb3VwIHtcbiAgICAgIG1hcmdpbi10b3A6IDE2cHg7IH1cbiAgICAgICNwYWdlLXRlYW0gLmVtcGxveWVlcyAuZW1wbG95ZWUgaGdyb3VwIGg0IHtcbiAgICAgICAgZm9udC1zaXplOiAxNnB4O1xuICAgICAgICBtYXJnaW4tYm90dG9tOiA0cHg7XG4gICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7XG4gICAgICAgIGNvbG9yOiAjNEM1NTVBOyB9XG4gICAgICAjcGFnZS10ZWFtIC5lbXBsb3llZXMgLmVtcGxveWVlIGhncm91cCAudHdpdHRlcjo6YmVmb3JlIHtcbiAgICAgICAgZmxvYXQ6IHJpZ2h0O1xuICAgICAgICBjb2xvcjogIzRDNTU1QTtcbiAgICAgICAgY29udGVudDogXCJcXGYyYjBcIjtcbiAgICAgICAgZm9udC1mYW1pbHk6IFwiSW9uaWNvbnNcIjtcbiAgICAgICAgdHJhbnNpdGlvbjogLjJzIGNvbG9yIGVhc2U7IH1cbiAgICAgICNwYWdlLXRlYW0gLmVtcGxveWVlcyAuZW1wbG95ZWUgaGdyb3VwIC50d2l0dGVyOmhvdmVyOjpiZWZvcmUge1xuICAgICAgICBjb2xvcjogIzRhOGJmYzsgfVxuICAgICAgI3BhZ2UtdGVhbSAuZW1wbG95ZWVzIC5lbXBsb3llZSBoZ3JvdXAgcCB7XG4gICAgICAgIGZvbnQtc2l6ZTogMTBweDtcbiAgICAgICAgY29sb3I6ICNhYWE7XG4gICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7XG4gICAgICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XG4gICAgICAgIGxldHRlci1zcGFjaW5nOiAuMDNlbTsgfVxuICAgICAgICAjcGFnZS10ZWFtIC5lbXBsb3llZXMgLmVtcGxveWVlIGhncm91cCBwLmJsdWUge1xuICAgICAgICAgIGNvbG9yOiAjNGE4YmZjOyB9XG4gICAgI3BhZ2UtdGVhbSAuZW1wbG95ZWVzIC5lbXBsb3llZSAuZGVzY3JpcHRpb24ge1xuICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgd2lkdGg6IDI1MHB4O1xuICAgICAgaGVpZ2h0OiAyNjBweDtcbiAgICAgIHRvcDogMDtcbiAgICAgIGxpbmUtaGVpZ2h0OiAyNjBweDtcbiAgICAgIG9wYWNpdHk6IDA7XG4gICAgICB0cmFuc2l0aW9uOiBvcGFjaXR5IC41czsgfVxuICAgICAgI3BhZ2UtdGVhbSAuZW1wbG95ZWVzIC5lbXBsb3llZSAuZGVzY3JpcHRpb24gcCB7XG4gICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICAgICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbiAgICAgICAgY29sb3I6ICM0QzU1NUE7XG4gICAgICAgIGZvbnQtd2VpZ2h0OiA0MDA7XG4gICAgICAgIGZvbnQtc2l6ZTogMTNweDtcbiAgICAgICAgbGluZS1oZWlnaHQ6IDIycHg7IH1cblxuI3BhZ2UtdGVhbSAuaGVybyB7XG4gIGJhY2tncm91bmQ6IG5vLXJlcGVhdCBjZW50ZXIgdG9wIHVybChcIi9pbWcvdGVhbS9zZWUtb3BlbmluZ3MtYmcuanBnXCIpO1xuICBiYWNrZ3JvdW5kLXNpemU6IGNvdmVyO1xuICBoZWlnaHQ6IDI2MHB4O1xuICBwYWRkaW5nLXRvcDogNjVweDsgfVxuICAjcGFnZS10ZWFtIC5oZXJvIGgzIHtcbiAgICBjb2xvcjogd2hpdGU7IH1cbiAgI3BhZ2UtdGVhbSAuaGVybyAuYnRuLndoaXRlIHtcbiAgICB0ZXh0LXRyYW5zZm9ybTogbm9uZTtcbiAgICBsZXR0ZXItc3BhY2luZzogLTAuMDJlbTtcbiAgICBmb250LXdlaWdodDogNzAwO1xuICAgIGZvbnQtc2l6ZTogMTRweDtcbiAgICBib3JkZXItcmFkaXVzOiAzcHg7XG4gICAgcGFkZGluZzogMTZweCAxNXB4IDE0cHg7XG4gICAgbWFyZ2luLXRvcDogMTVweDsgfVxuIl19 */\n"
  },
  {
    "path": "content/css/pages/thank-you.css",
    "content": "#page-thank-you {\n  font-family: \"Inter\", \"Inter UI\", Helvetica, Arial, sans-serif; }\n  #page-thank-you h1,\n  #page-thank-you h2,\n  #page-thank-you h3 {\n    font-family: \"Eina\", \"Helvetica Neue\", Helvetica, sans-serif; }\n  #page-thank-you main {\n    padding-bottom: 0px;\n    overflow: visible;\n    margin-top: 40px;\n    padding-top: 64px;\n    padding-right: 30px;\n    font-size: 14px;\n    color: #4e545e;\n    letter-spacing: -0.02em;\n    max-width: 526px; }\n    #page-thank-you main::before {\n      background-color: #f6f8fc;\n      border-bottom: 1px solid #e5e7eb;\n      content: '';\n      position: absolute;\n      top: 0;\n      right: 0;\n      left: 0;\n      height: 450px;\n      display: block; }\n    #page-thank-you main::after {\n      display: none; }\n    #page-thank-you main h1 {\n      color: #24282e; }\n      #page-thank-you main h1 + p {\n        color: #6e7f99;\n        font-size: 18px;\n        line-height: 36px;\n        -webkit-perspective: 600px;\n                perspective: 600px;\n        margin-bottom: 0; }\n    #page-thank-you main p {\n      letter-spacing: -.02em;\n      line-height: 2em;\n      font-size: 16px;\n      margin-bottom: 16px; }\n  #page-thank-you .content {\n    padding: 42px 48px 48px;\n    background: white;\n    box-shadow: 0 8px 48px 0px rgba(0, 0, 0, 0.2);\n    max-width: 536px;\n    border-radius: 10px;\n    position: relative;\n    margin-right: auto;\n    margin-left: auto;\n    text-align: center;\n    word-break: break-word; }\n    #page-thank-you .content h3 {\n      margin-top: 0;\n      margin-bottom: 30px;\n      font-weight: 700;\n      font-size: 28px;\n      line-height: 36px;\n      letter-spacing: -0.03em; }\n    #page-thank-you .content .btn {\n      display: block;\n      font-weight: 600;\n      white-space: normal; }\n  #page-thank-you .company {\n    margin: 128px 0 68px;\n    text-align: center;\n    width: 100%; }\n    #page-thank-you .company h2 {\n      color: #7f8fab;\n      margin: 0 auto;\n      font-size: 28px;\n      max-width: 790px;\n      text-align: center;\n      line-height: 1.4em;\n      letter-spacing: -.04em;\n      font-weight: 600;\n      padding-right: 15px;\n      padding-left: 15px; }\n    #page-thank-you .company strong {\n      color: #131924;\n      font-weight: 700; }\n    #page-thank-you .company .logos {\n      display: -ms-flexbox;\n      display: flex;\n      -ms-flex-wrap: wrap;\n          flex-wrap: wrap;\n      margin-top: 51px;\n      -ms-flex-pack: space-evenly;\n          justify-content: space-evenly; }\n      #page-thank-you .company .logos::before, #page-thank-you .company .logos::after {\n        background: url(\"/img/homepage/enterprise-logos.png\") 0 0 no-repeat;\n        background-size: 100%;\n        width: 494px;\n        height: 42px;\n        content: '';\n        max-width: 100%;\n        margin-bottom: 32px;\n        display: inline-block; }\n      #page-thank-you .company .logos::after {\n        background-position: 0 bottom; }\n  @media (max-width: 991px) {\n    #page-thank-you .banner hgroup {\n      padding-right: 15px;\n      text-align: center; }\n    #page-thank-you h1 {\n      margin-right: auto;\n      margin-left: auto; }\n    #page-thank-you p.lg {\n      margin-right: 24px; }\n    #page-thank-you main {\n      display: block; }\n    #page-thank-you .company {\n      margin-top: 128px; } }\n\n/*# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInRoYW5rLXlvdS5jc3MiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7RUFDRSwrREFBK0QsRUFBRTtFQUNqRTs7O0lBR0UsNkRBQTZELEVBQUU7RUFDakU7SUFDRSxvQkFBb0I7SUFDcEIsa0JBQWtCO0lBQ2xCLGlCQUFpQjtJQUNqQixrQkFBa0I7SUFDbEIsb0JBQW9CO0lBQ3BCLGdCQUFnQjtJQUNoQixlQUFlO0lBQ2Ysd0JBQXdCO0lBQ3hCLGlCQUFpQixFQUFFO0lBQ25CO01BQ0UsMEJBQTBCO01BQzFCLGlDQUFpQztNQUNqQyxZQUFZO01BQ1osbUJBQW1CO01BQ25CLE9BQU87TUFDUCxTQUFTO01BQ1QsUUFBUTtNQUNSLGNBQWM7TUFDZCxlQUFlLEVBQUU7SUFDbkI7TUFDRSxjQUFjLEVBQUU7SUFDbEI7TUFDRSxlQUFlLEVBQUU7TUFDakI7UUFDRSxlQUFlO1FBQ2YsZ0JBQWdCO1FBQ2hCLGtCQUFrQjtRQUNsQiwyQkFBbUI7Z0JBQW5CLG1CQUFtQjtRQUNuQixpQkFBaUIsRUFBRTtJQUN2QjtNQUNFLHVCQUF1QjtNQUN2QixpQkFBaUI7TUFDakIsZ0JBQWdCO01BQ2hCLG9CQUFvQixFQUFFO0VBQzFCO0lBQ0Usd0JBQXdCO0lBQ3hCLGtCQUFrQjtJQUNsQiw4Q0FBOEM7SUFDOUMsaUJBQWlCO0lBQ2pCLG9CQUFvQjtJQUNwQixtQkFBbUI7SUFDbkIsbUJBQW1CO0lBQ25CLGtCQUFrQjtJQUNsQixtQkFBbUI7SUFDbkIsdUJBQXVCLEVBQUU7SUFDekI7TUFDRSxjQUFjO01BQ2Qsb0JBQW9CO01BQ3BCLGlCQUFpQjtNQUNqQixnQkFBZ0I7TUFDaEIsa0JBQWtCO01BQ2xCLHdCQUF3QixFQUFFO0lBQzVCO01BQ0UsZUFBZTtNQUNmLGlCQUFpQjtNQUNqQixvQkFBb0IsRUFBRTtFQUMxQjtJQUNFLHFCQUFxQjtJQUNyQixtQkFBbUI7SUFDbkIsWUFBWSxFQUFFO0lBQ2Q7TUFDRSxlQUFlO01BQ2YsZUFBZTtNQUNmLGdCQUFnQjtNQUNoQixpQkFBaUI7TUFDakIsbUJBQW1CO01BQ25CLG1CQUFtQjtNQUNuQix1QkFBdUI7TUFDdkIsaUJBQWlCO01BQ2pCLG9CQUFvQjtNQUNwQixtQkFBbUIsRUFBRTtJQUN2QjtNQUNFLGVBQWU7TUFDZixpQkFBaUIsRUFBRTtJQUNyQjtNQUNFLHFCQUFjO01BQWQsY0FBYztNQUNkLG9CQUFnQjtVQUFoQixnQkFBZ0I7TUFDaEIsaUJBQWlCO01BQ2pCLDRCQUE4QjtVQUE5Qiw4QkFBOEIsRUFBRTtNQUNoQztRQUNFLG9FQUFvRTtRQUNwRSxzQkFBc0I7UUFDdEIsYUFBYTtRQUNiLGFBQWE7UUFDYixZQUFZO1FBQ1osZ0JBQWdCO1FBQ2hCLG9CQUFvQjtRQUNwQixzQkFBc0IsRUFBRTtNQUMxQjtRQUNFLDhCQUE4QixFQUFFO0VBQ3RDO0lBQ0U7TUFDRSxvQkFBb0I7TUFDcEIsbUJBQW1CLEVBQUU7SUFDdkI7TUFDRSxtQkFBbUI7TUFDbkIsa0JBQWtCLEVBQUU7SUFDdEI7TUFDRSxtQkFBbUIsRUFBRTtJQUN2QjtNQUNFLGVBQWUsRUFBRTtJQUNuQjtNQUNFLGtCQUFrQixFQUFFLEVBQUUiLCJmaWxlIjoicGFnZXMvdGhhbmsteW91LmNzcyIsInNvdXJjZXNDb250ZW50IjpbIiNwYWdlLXRoYW5rLXlvdSB7XG4gIGZvbnQtZmFtaWx5OiBcIkludGVyXCIsIFwiSW50ZXIgVUlcIiwgSGVsdmV0aWNhLCBBcmlhbCwgc2Fucy1zZXJpZjsgfVxuICAjcGFnZS10aGFuay15b3UgaDEsXG4gICNwYWdlLXRoYW5rLXlvdSBoMixcbiAgI3BhZ2UtdGhhbmsteW91IGgzIHtcbiAgICBmb250LWZhbWlseTogXCJFaW5hXCIsIFwiSGVsdmV0aWNhIE5ldWVcIiwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmOyB9XG4gICNwYWdlLXRoYW5rLXlvdSBtYWluIHtcbiAgICBwYWRkaW5nLWJvdHRvbTogMHB4O1xuICAgIG92ZXJmbG93OiB2aXNpYmxlO1xuICAgIG1hcmdpbi10b3A6IDQwcHg7XG4gICAgcGFkZGluZy10b3A6IDY0cHg7XG4gICAgcGFkZGluZy1yaWdodDogMzBweDtcbiAgICBmb250LXNpemU6IDE0cHg7XG4gICAgY29sb3I6ICM0ZTU0NWU7XG4gICAgbGV0dGVyLXNwYWNpbmc6IC0wLjAyZW07XG4gICAgbWF4LXdpZHRoOiA1MjZweDsgfVxuICAgICNwYWdlLXRoYW5rLXlvdSBtYWluOjpiZWZvcmUge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2Y2ZjhmYztcbiAgICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjZTVlN2ViO1xuICAgICAgY29udGVudDogJyc7XG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICB0b3A6IDA7XG4gICAgICByaWdodDogMDtcbiAgICAgIGxlZnQ6IDA7XG4gICAgICBoZWlnaHQ6IDQ1MHB4O1xuICAgICAgZGlzcGxheTogYmxvY2s7IH1cbiAgICAjcGFnZS10aGFuay15b3UgbWFpbjo6YWZ0ZXIge1xuICAgICAgZGlzcGxheTogbm9uZTsgfVxuICAgICNwYWdlLXRoYW5rLXlvdSBtYWluIGgxIHtcbiAgICAgIGNvbG9yOiAjMjQyODJlOyB9XG4gICAgICAjcGFnZS10aGFuay15b3UgbWFpbiBoMSArIHAge1xuICAgICAgICBjb2xvcjogIzZlN2Y5OTtcbiAgICAgICAgZm9udC1zaXplOiAxOHB4O1xuICAgICAgICBsaW5lLWhlaWdodDogMzZweDtcbiAgICAgICAgcGVyc3BlY3RpdmU6IDYwMHB4O1xuICAgICAgICBtYXJnaW4tYm90dG9tOiAwOyB9XG4gICAgI3BhZ2UtdGhhbmsteW91IG1haW4gcCB7XG4gICAgICBsZXR0ZXItc3BhY2luZzogLS4wMmVtO1xuICAgICAgbGluZS1oZWlnaHQ6IDJlbTtcbiAgICAgIGZvbnQtc2l6ZTogMTZweDtcbiAgICAgIG1hcmdpbi1ib3R0b206IDE2cHg7IH1cbiAgI3BhZ2UtdGhhbmsteW91IC5jb250ZW50IHtcbiAgICBwYWRkaW5nOiA0MnB4IDQ4cHggNDhweDtcbiAgICBiYWNrZ3JvdW5kOiB3aGl0ZTtcbiAgICBib3gtc2hhZG93OiAwIDhweCA0OHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMik7XG4gICAgbWF4LXdpZHRoOiA1MzZweDtcbiAgICBib3JkZXItcmFkaXVzOiAxMHB4O1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICBtYXJnaW4tcmlnaHQ6IGF1dG87XG4gICAgbWFyZ2luLWxlZnQ6IGF1dG87XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgIHdvcmQtYnJlYWs6IGJyZWFrLXdvcmQ7IH1cbiAgICAjcGFnZS10aGFuay15b3UgLmNvbnRlbnQgaDMge1xuICAgICAgbWFyZ2luLXRvcDogMDtcbiAgICAgIG1hcmdpbi1ib3R0b206IDMwcHg7XG4gICAgICBmb250LXdlaWdodDogNzAwO1xuICAgICAgZm9udC1zaXplOiAyOHB4O1xuICAgICAgbGluZS1oZWlnaHQ6IDM2cHg7XG4gICAgICBsZXR0ZXItc3BhY2luZzogLTAuMDNlbTsgfVxuICAgICNwYWdlLXRoYW5rLXlvdSAuY29udGVudCAuYnRuIHtcbiAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgICAgIHdoaXRlLXNwYWNlOiBub3JtYWw7IH1cbiAgI3BhZ2UtdGhhbmsteW91IC5jb21wYW55IHtcbiAgICBtYXJnaW46IDEyOHB4IDAgNjhweDtcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgd2lkdGg6IDEwMCU7IH1cbiAgICAjcGFnZS10aGFuay15b3UgLmNvbXBhbnkgaDIge1xuICAgICAgY29sb3I6ICM3ZjhmYWI7XG4gICAgICBtYXJnaW46IDAgYXV0bztcbiAgICAgIGZvbnQtc2l6ZTogMjhweDtcbiAgICAgIG1heC13aWR0aDogNzkwcHg7XG4gICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgICBsaW5lLWhlaWdodDogMS40ZW07XG4gICAgICBsZXR0ZXItc3BhY2luZzogLS4wNGVtO1xuICAgICAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgICAgIHBhZGRpbmctcmlnaHQ6IDE1cHg7XG4gICAgICBwYWRkaW5nLWxlZnQ6IDE1cHg7IH1cbiAgICAjcGFnZS10aGFuay15b3UgLmNvbXBhbnkgc3Ryb25nIHtcbiAgICAgIGNvbG9yOiAjMTMxOTI0O1xuICAgICAgZm9udC13ZWlnaHQ6IDcwMDsgfVxuICAgICNwYWdlLXRoYW5rLXlvdSAuY29tcGFueSAubG9nb3Mge1xuICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgIGZsZXgtd3JhcDogd3JhcDtcbiAgICAgIG1hcmdpbi10b3A6IDUxcHg7XG4gICAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWV2ZW5seTsgfVxuICAgICAgI3BhZ2UtdGhhbmsteW91IC5jb21wYW55IC5sb2dvczo6YmVmb3JlLCAjcGFnZS10aGFuay15b3UgLmNvbXBhbnkgLmxvZ29zOjphZnRlciB7XG4gICAgICAgIGJhY2tncm91bmQ6IHVybChcIi9pbWcvaG9tZXBhZ2UvZW50ZXJwcmlzZS1sb2dvcy5wbmdcIikgMCAwIG5vLXJlcGVhdDtcbiAgICAgICAgYmFja2dyb3VuZC1zaXplOiAxMDAlO1xuICAgICAgICB3aWR0aDogNDk0cHg7XG4gICAgICAgIGhlaWdodDogNDJweDtcbiAgICAgICAgY29udGVudDogJyc7XG4gICAgICAgIG1heC13aWR0aDogMTAwJTtcbiAgICAgICAgbWFyZ2luLWJvdHRvbTogMzJweDtcbiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOyB9XG4gICAgICAjcGFnZS10aGFuay15b3UgLmNvbXBhbnkgLmxvZ29zOjphZnRlciB7XG4gICAgICAgIGJhY2tncm91bmQtcG9zaXRpb246IDAgYm90dG9tOyB9XG4gIEBtZWRpYSAobWF4LXdpZHRoOiA5OTFweCkge1xuICAgICNwYWdlLXRoYW5rLXlvdSAuYmFubmVyIGhncm91cCB7XG4gICAgICBwYWRkaW5nLXJpZ2h0OiAxNXB4O1xuICAgICAgdGV4dC1hbGlnbjogY2VudGVyOyB9XG4gICAgI3BhZ2UtdGhhbmsteW91IGgxIHtcbiAgICAgIG1hcmdpbi1yaWdodDogYXV0bztcbiAgICAgIG1hcmdpbi1sZWZ0OiBhdXRvOyB9XG4gICAgI3BhZ2UtdGhhbmsteW91IHAubGcge1xuICAgICAgbWFyZ2luLXJpZ2h0OiAyNHB4OyB9XG4gICAgI3BhZ2UtdGhhbmsteW91IG1haW4ge1xuICAgICAgZGlzcGxheTogYmxvY2s7IH1cbiAgICAjcGFnZS10aGFuay15b3UgLmNvbXBhbnkge1xuICAgICAgbWFyZ2luLXRvcDogMTI4cHg7IH0gfVxuIl19 */\n"
  },
  {
    "path": "content/css/pages/translations.css",
    "content": "main {\n  margin-top: 64px;\n  margin-bottom: 64px; }\n\n#join-the-fight {\n  margin: 0 auto;\n  max-width: 600px; }\n\n/*# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInRyYW5zbGF0aW9ucy5jc3MiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7RUFDRSxpQkFBaUI7RUFDakIsb0JBQW9CLEVBQUU7O0FBRXhCO0VBQ0UsZUFBZTtFQUNmLGlCQUFpQixFQUFFIiwiZmlsZSI6InBhZ2VzL3RyYW5zbGF0aW9ucy5jc3MiLCJzb3VyY2VzQ29udGVudCI6WyJtYWluIHtcbiAgbWFyZ2luLXRvcDogNjRweDtcbiAgbWFyZ2luLWJvdHRvbTogNjRweDsgfVxuXG4jam9pbi10aGUtZmlnaHQge1xuICBtYXJnaW46IDAgYXV0bztcbiAgbWF4LXdpZHRoOiA2MDBweDsgfVxuIl19 */\n"
  },
  {
    "path": "content/css/pages/trusted-partners.css",
    "content": "#page-trusted-partners .navbar .btn {\n  color: #26262e; }\n\n#page-trusted-partners .navbar + .banner {\n  background: #2a262c;\n  background: url(\"/img/trusted-partners/tp-cta-bg.jpg\"), linear-gradient(to right, #222530 0%, #35363e 50%, #2a2932 100%);\n  background-size: cover, 100%; }\n  #page-trusted-partners .navbar + .banner hgroup {\n    background: no-repeat center 100px url(\"/img/trusted-partners/ionic-trusted-partners-badge.png\");\n    background-size: 143px;\n    padding-top: 260px;\n    margin-top: -72px;\n    padding-bottom: 67px;\n    text-align: center;\n    color: rgba(255, 255, 255, 0.9); }\n    #page-trusted-partners .navbar + .banner hgroup strong {\n      color: white; }\n    #page-trusted-partners .navbar + .banner hgroup h1 {\n      font-size: 36px; }\n    #page-trusted-partners .navbar + .banner hgroup p {\n      max-width: 650px;\n      margin: 0 auto;\n      font-size: 18px;\n      font-family: \"Inter\", \"Inter UI\", Helvetica, Arial, sans-serif;\n      font-weight: 400; }\n      #page-trusted-partners .navbar + .banner hgroup p b, #page-trusted-partners .navbar + .banner hgroup p strong {\n        font-weight: 600; }\n      #page-trusted-partners .navbar + .banner hgroup p a {\n        color: rgba(255, 255, 255, 0.9);\n        text-decoration: underline;\n        transition: .2s color;\n        cursor: pointer; }\n        #page-trusted-partners .navbar + .banner hgroup p a:hover {\n          color: white; }\n      #page-trusted-partners .navbar + .banner hgroup p.sm {\n        font-size: 14px; }\n    #page-trusted-partners .navbar + .banner hgroup .btn.white {\n      color: #4a8bfc;\n      margin: 44px auto 5px;\n      font-weight: 700 !important; }\n\n#page-trusted-partners .perks {\n  border-bottom: 1px #e9ecf3 solid;\n  background: #f9fafc;\n  padding: 100px 0 20px;\n  margin-bottom: 0; }\n  #page-trusted-partners .perks .item {\n    padding-top: 235px; }\n    #page-trusted-partners .perks .item::before {\n      background: no-repeat top center url(\"/img/trusted-partners/tp-info-icons.png\");\n      background-size: 180px;\n      position: absolute;\n      top: 0;\n      left: 0;\n      right: 0;\n      height: 180px;\n      content: ''; }\n    #page-trusted-partners .perks .item.quality::before {\n      background-position: center center; }\n    #page-trusted-partners .perks .item.platforms::before {\n      background-position: bottom center; }\n\n#page-trusted-partners .list {\n  -ms-flex-pack: justify;\n      justify-content: space-between;\n  padding: 82px 0 0;\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-wrap: wrap;\n      flex-wrap: wrap; }\n  #page-trusted-partners .list .item,\n  #page-trusted-partners .list li {\n    width: 300px;\n    -ms-flex: 0 0 300px;\n        flex: 0 0 300px;\n    position: relative;\n    text-align: center;\n    list-style: none;\n    padding-bottom: 80px;\n    margin: 0 auto; }\n    #page-trusted-partners .list .item h4,\n    #page-trusted-partners .list li h4 {\n      font-size: 22px; }\n    #page-trusted-partners .list .item p,\n    #page-trusted-partners .list li p {\n      line-height: 24px;\n      max-width: 300px;\n      font-size: 14px;\n      margin: 0 auto; }\n\n#page-trusted-partners #partner-map {\n  background: #17191c;\n  height: 689px;\n  padding-top: 96px;\n  position: relative; }\n  @media (max-width: 1219px) {\n    #page-trusted-partners #partner-map {\n      height: 600px; } }\n  @media (max-width: 991px) {\n    #page-trusted-partners #partner-map {\n      height: 470px; } }\n  @media (max-width: 991px) {\n    #page-trusted-partners #partner-map {\n      height: 370px; } }\n  #page-trusted-partners #partner-map hgroup {\n    position: relative;\n    z-index: 1; }\n  #page-trusted-partners #partner-map h3 {\n    color: rgba(255, 255, 255, 0.9); }\n    #page-trusted-partners #partner-map h3 strong {\n      color: rgba(255, 255, 255, 0.9); }\n  #page-trusted-partners #partner-map p {\n    color: rgba(255, 255, 255, 0.7); }\n  #page-trusted-partners #partner-map .dots {\n    position: absolute;\n    top: 40px;\n    left: 0;\n    right: 0;\n    bottom: 0;\n    margin-bottom: 0;\n    background: url(\"/img/trusted-partners/tp-map.jpg\") no-repeat top center;\n    background-size: 125%;\n    margin-right: auto;\n    margin-left: auto;\n    width: 1130px; }\n    @media (max-width: 1219px) {\n      #page-trusted-partners #partner-map .dots {\n        width: 970px; } }\n    @media (max-width: 991px) {\n      #page-trusted-partners #partner-map .dots {\n        width: 750px; } }\n    #page-trusted-partners #partner-map .dots li {\n      position: absolute;\n      height: 9px;\n      width: 9px;\n      border-radius: 9px;\n      background: #4a8bfc;\n      display: block;\n      box-shadow: 0 0 4px 2px rgba(23, 25, 28, 0.7);\n      cursor: pointer; }\n      #page-trusted-partners #partner-map .dots li .box {\n        background: white 50% 10px;\n        background-repeat: no-repeat;\n        background-size: 170px;\n        width: 200px;\n        border-radius: 3px;\n        position: relative;\n        z-index: 2;\n        padding: 95px 15px 15px;\n        box-shadow: 1px 2px 4px rgba(0, 0, 0, 0.2);\n        text-align: center;\n        display: block;\n        opacity: 0;\n        -webkit-transform: scale(0.01);\n                transform: scale(0.01);\n        -webkit-transform-origin: left top;\n                transform-origin: left top;\n        transition: all 0.3s cubic-bezier(0.155, 1.105, 0.295, 1.12), opacity 0.2s linear;\n        transition-delay: 0s, 0s; }\n        #page-trusted-partners #partner-map .dots li .box.arctic-leaf {\n          background-image: url(\"/img/trusted-partners/tp-logo-arctic-leaf.png\"); }\n        #page-trusted-partners #partner-map .dots li .box.bendyworks {\n          background-image: url(\"/img/trusted-partners/tp-logo-bendyworks.png\"); }\n        #page-trusted-partners #partner-map .dots li .box.byng {\n          background-image: url(\"/img/trusted-partners/tp-logo-byng.png\"); }\n        #page-trusted-partners #partner-map .dots li .box.digitalscientists {\n          background-image: url(\"/img/trusted-partners/tp-logo-digitalscientists.png\"); }\n        #page-trusted-partners #partner-map .dots li .box.elixel {\n          background-image: url(\"/img/trusted-partners/tp-logo-elixel.png\"); }\n        #page-trusted-partners #partner-map .dots li .box.hybapps {\n          background-image: url(\"/img/trusted-partners/tp-logo-hybapps.png?1\"); }\n        #page-trusted-partners #partner-map .dots li .box.hybrid-heroes {\n          background-image: url(\"/img/trusted-partners/tp-logo-hybrid-heroes.png\"); }\n        #page-trusted-partners #partner-map .dots li .box.incentro {\n          background-image: url(\"/img/trusted-partners/tp-logo-incentro.png\"); }\n        #page-trusted-partners #partner-map .dots li .box.inviqa {\n          background-image: url(\"/img/trusted-partners/tp-logo-inviqa.png\"); }\n        #page-trusted-partners #partner-map .dots li .box.jnesis {\n          background-image: url(\"/img/trusted-partners/tp-logo-jnesis.png\"); }\n        #page-trusted-partners #partner-map .dots li .box.keensoft {\n          background-image: url(\"/img/trusted-partners/tp-logo-keensoft.png\"); }\n        #page-trusted-partners #partner-map .dots li .box.kunder {\n          background-image: url(\"/img/trusted-partners/tp-logo-kunder.png\"); }\n        #page-trusted-partners #partner-map .dots li .box.macadamian {\n          background-image: url(\"/img/trusted-partners/tp-logo-macadamian.png\"); }\n        #page-trusted-partners #partner-map .dots li .box.modus-create {\n          background-image: url(\"/img/trusted-partners/tp-logo-modus.png\"); }\n        #page-trusted-partners #partner-map .dots li .box.onetree {\n          background-image: url(\"/img/trusted-partners/tp-logo-onetree.png\"); }\n        #page-trusted-partners #partner-map .dots li .box.openforge {\n          background-image: url(\"/img/trusted-partners/tp-logo-openforge.png\"); }\n        #page-trusted-partners #partner-map .dots li .box.ordina {\n          background-image: url(\"/img/trusted-partners/tp-logo-ordina.png\"); }\n        #page-trusted-partners #partner-map .dots li .box.powergate {\n          background-image: url(\"/img/trusted-partners/tp-logo-powergate.png\"); }\n        #page-trusted-partners #partner-map .dots li .box.rangle {\n          background-image: url(\"/img/trusted-partners/tp-logo-rangle.png\"); }\n        #page-trusted-partners #partner-map .dots li .box.revunit {\n          background-image: url(\"/img/trusted-partners/tp-logo-revunit.png\"); }\n        #page-trusted-partners #partner-map .dots li .box.scaffold {\n          background-image: url(\"/img/trusted-partners/tp-logo-scaffold.png\"); }\n        #page-trusted-partners #partner-map .dots li .box.scopic {\n          background-image: url(\"/img/trusted-partners/tp-logo-scopic.png\"); }\n        #page-trusted-partners #partner-map .dots li .box.spatial-vision {\n          background-image: url(\"/img/trusted-partners/tp-logo-spatial-vision.png\"); }\n        #page-trusted-partners #partner-map .dots li .box.warpdev {\n          background-image: url(\"/img/trusted-partners/tp-logo-warpdev.png\"); }\n        #page-trusted-partners #partner-map .dots li .box.yuxi {\n          background-image: url(\"/img/trusted-partners/tp-logo-yuxi.png\"); }\n        #page-trusted-partners #partner-map .dots li .box .btn {\n          display: block; }\n        #page-trusted-partners #partner-map .dots li .box.left {\n          left: -190px;\n          -webkit-transform-origin: right top;\n                  transform-origin: right top; }\n          #page-trusted-partners #partner-map .dots li .box.left.bottom {\n            left: -190px;\n            top: -140px;\n            -webkit-transform-origin: right bottom;\n                    transform-origin: right bottom; }\n        #page-trusted-partners #partner-map .dots li .box.bottom {\n          top: -140px;\n          -webkit-transform-origin: left bottom;\n                  transform-origin: left bottom; }\n      #page-trusted-partners #partner-map .dots li:hover .box {\n        opacity: 1;\n        -webkit-transform: scale(1);\n                transform: scale(1);\n        transition-delay: .2s, .2s; }\n    @media (max-width: 991px) {\n      #page-trusted-partners #partner-map .dots {\n        background-position: center bottom; }\n        #page-trusted-partners #partner-map .dots li {\n          display: none; } }\n\n#page-trusted-partners .partners .list {\n  padding-bottom: 30px; }\n  #page-trusted-partners .partners .list li {\n    padding-top: 130px;\n    padding-bottom: 70px;\n    position: relative;\n    margin-bottom: 120px;\n    background: transparent no-repeat top center;\n    background-size: 250px; }\n    #page-trusted-partners .partners .list li.arctic-leaf {\n      background-image: url(\"/img/trusted-partners/tp-logo-arctic-leaf.png\"); }\n    #page-trusted-partners .partners .list li.bendyworks {\n      background-image: url(\"/img/trusted-partners/tp-logo-bendyworks.png\"); }\n    #page-trusted-partners .partners .list li.byng {\n      background-image: url(\"/img/trusted-partners/tp-logo-byng.png\"); }\n    #page-trusted-partners .partners .list li.digitalscientists {\n      background-image: url(\"/img/trusted-partners/tp-logo-digitalscientists.png\"); }\n    #page-trusted-partners .partners .list li.elixel {\n      background-image: url(\"/img/trusted-partners/tp-logo-elixel.png\"); }\n    #page-trusted-partners .partners .list li.hybapps {\n      background-image: url(\"/img/trusted-partners/tp-logo-hybapps.png?1\"); }\n    #page-trusted-partners .partners .list li.hybrid-heroes {\n      background-image: url(\"/img/trusted-partners/tp-logo-hybrid-heroes.png\"); }\n    #page-trusted-partners .partners .list li.incentro {\n      background-image: url(\"/img/trusted-partners/tp-logo-incentro.png\"); }\n    #page-trusted-partners .partners .list li.inviqa {\n      background-image: url(\"/img/trusted-partners/tp-logo-inviqa.png\"); }\n    #page-trusted-partners .partners .list li.jnesis {\n      background-image: url(\"/img/trusted-partners/tp-logo-jnesis.png\"); }\n    #page-trusted-partners .partners .list li.keensoft {\n      background-image: url(\"/img/trusted-partners/tp-logo-keensoft.png\"); }\n    #page-trusted-partners .partners .list li.kunder {\n      background-image: url(\"/img/trusted-partners/tp-logo-kunder.png\"); }\n    #page-trusted-partners .partners .list li.macadamian {\n      background-image: url(\"/img/trusted-partners/tp-logo-macadamian.png\"); }\n    #page-trusted-partners .partners .list li.modus-create {\n      background-image: url(\"/img/trusted-partners/tp-logo-modus.png\"); }\n    #page-trusted-partners .partners .list li.onetree {\n      background-image: url(\"/img/trusted-partners/tp-logo-onetree.png\"); }\n    #page-trusted-partners .partners .list li.openforge {\n      background-image: url(\"/img/trusted-partners/tp-logo-openforge.png\"); }\n    #page-trusted-partners .partners .list li.ordina {\n      background-image: url(\"/img/trusted-partners/tp-logo-ordina.png\"); }\n    #page-trusted-partners .partners .list li.powergate {\n      background-image: url(\"/img/trusted-partners/tp-logo-powergate.png\"); }\n    #page-trusted-partners .partners .list li.rangle {\n      background-image: url(\"/img/trusted-partners/tp-logo-rangle.png\"); }\n    #page-trusted-partners .partners .list li.revunit {\n      background-image: url(\"/img/trusted-partners/tp-logo-revunit.png\"); }\n    #page-trusted-partners .partners .list li.scaffold {\n      background-image: url(\"/img/trusted-partners/tp-logo-scaffold.png\"); }\n    #page-trusted-partners .partners .list li.scopic {\n      background-image: url(\"/img/trusted-partners/tp-logo-scopic.png\"); }\n    #page-trusted-partners .partners .list li.spatial-vision {\n      background-image: url(\"/img/trusted-partners/tp-logo-spatial-vision.png\"); }\n    #page-trusted-partners .partners .list li.warpdev {\n      background-image: url(\"/img/trusted-partners/tp-logo-warpdev.png\"); }\n    #page-trusted-partners .partners .list li.yuxi {\n      background-image: url(\"/img/trusted-partners/tp-logo-yuxi.png\"); }\n    #page-trusted-partners .partners .list li .btn {\n      left: 0;\n      right: 0;\n      bottom: 0;\n      width: 113px;\n      margin: 0 auto;\n      position: absolute;\n      font-size: 14px; }\n    #page-trusted-partners .partners .list li .modal-info {\n      display: none; }\n\n#page-trusted-partners .bar.text-center {\n  background: #6199f5 no-repeat center top url(\"/img/trusted-partners/apply-prefooter-img.jpg\");\n  background-size: cover;\n  padding: 85px 0 75px; }\n  #page-trusted-partners .bar.text-center h3 {\n    color: white; }\n  #page-trusted-partners .bar.text-center .btn {\n    margin-top: 10px;\n    padding: 14px 20px 13px;\n    border-radius: 3px; }\n\n#page-trusted-partners #tp-learn-more .modal-dialog {\n  width: 840px;\n  -webkit-perspective: 1000;\n          perspective: 1000; }\n  #page-trusted-partners #tp-learn-more .modal-dialog.flip {\n    -webkit-transform: rotateY(180deg);\n            transform: rotateY(180deg); }\n    #page-trusted-partners #tp-learn-more .modal-dialog.flip .modal-body.front {\n      -webkit-transform: translateZ(-1px);\n              transform: translateZ(-1px);\n      opacity: 0; }\n    #page-trusted-partners #tp-learn-more .modal-dialog.flip .modal-body.back {\n      -webkit-transform: rotateY(180deg) translateZ(-1px);\n              transform: rotateY(180deg) translateZ(-1px);\n      opacity: 1; }\n      @media (max-width: 767px) {\n        #page-trusted-partners #tp-learn-more .modal-dialog.flip .modal-body.back {\n          -webkit-transform: rotateY(180deg) translateZ(1px);\n                  transform: rotateY(180deg) translateZ(1px); } }\n\n#page-trusted-partners #tp-learn-more .modal-content {\n  transition: 0.6s;\n  -webkit-transform-style: preserve-3d;\n          transform-style: preserve-3d;\n  position: relative; }\n\n#page-trusted-partners #tp-learn-more .modal-body {\n  padding: 46px 50px;\n  min-height: 460px;\n  transition: 0.1s opacity;\n  transition-delay: .3s;\n  height: 845px; }\n  #page-trusted-partners #tp-learn-more .modal-body.front {\n    -webkit-transform: translateZ(0);\n            transform: translateZ(0); }\n  #page-trusted-partners #tp-learn-more .modal-body.back {\n    -webkit-transform: rotateY(180deg) translateZ(1px);\n            transform: rotateY(180deg) translateZ(1px);\n    position: absolute;\n    top: 0;\n    left: 0;\n    right: 0;\n    background: white;\n    opacity: 0; }\n\n#page-trusted-partners #tp-learn-more section {\n  width: 445px; }\n\n#page-trusted-partners #tp-learn-more aside {\n  float: right;\n  width: 240px; }\n\n@media (max-width: 767px) {\n  #page-trusted-partners #tp-learn-more section,\n  #page-trusted-partners #tp-learn-more aside {\n    width: 100%;\n    float: none; } }\n\n#page-trusted-partners #tp-learn-more .logo {\n  width: 167px;\n  height: 100px;\n  padding-bottom: 70px;\n  position: relative;\n  background: transparent no-repeat left top;\n  background-size: 167px; }\n  #page-trusted-partners #tp-learn-more .logo.arctic-leaf {\n    background-image: url(\"/img/trusted-partners/tp-logo-arctic-leaf.png\"); }\n  #page-trusted-partners #tp-learn-more .logo.bendyworks {\n    background-image: url(\"/img/trusted-partners/tp-logo-bendyworks.png\"); }\n  #page-trusted-partners #tp-learn-more .logo.byng {\n    background-image: url(\"/img/trusted-partners/tp-logo-byng.png\"); }\n  #page-trusted-partners #tp-learn-more .logo.digitalscientists {\n    background-image: url(\"/img/trusted-partners/tp-logo-digitalscientists.png\"); }\n  #page-trusted-partners #tp-learn-more .logo.elixel {\n    background-image: url(\"/img/trusted-partners/tp-logo-elixel.png\"); }\n  #page-trusted-partners #tp-learn-more .logo.hybapps {\n    background-image: url(\"/img/trusted-partners/tp-logo-hybapps.png?1\"); }\n  #page-trusted-partners #tp-learn-more .logo.hybrid-heroes {\n    background-image: url(\"/img/trusted-partners/tp-logo-hybrid-heroes.png\"); }\n  #page-trusted-partners #tp-learn-more .logo.incentro {\n    background-image: url(\"/img/trusted-partners/tp-logo-incentro.png\"); }\n  #page-trusted-partners #tp-learn-more .logo.inviqa {\n    background-image: url(\"/img/trusted-partners/tp-logo-inviqa.png\"); }\n  #page-trusted-partners #tp-learn-more .logo.jnesis {\n    background-image: url(\"/img/trusted-partners/tp-logo-jnesis.png\"); }\n  #page-trusted-partners #tp-learn-more .logo.keensoft {\n    background-image: url(\"/img/trusted-partners/tp-logo-keensoft.png\"); }\n  #page-trusted-partners #tp-learn-more .logo.kunder {\n    background-image: url(\"/img/trusted-partners/tp-logo-kunder.png\"); }\n  #page-trusted-partners #tp-learn-more .logo.macadamian {\n    background-image: url(\"/img/trusted-partners/tp-logo-macadamian.png\"); }\n  #page-trusted-partners #tp-learn-more .logo.modus-create {\n    background-image: url(\"/img/trusted-partners/tp-logo-modus.png\"); }\n  #page-trusted-partners #tp-learn-more .logo.onetree {\n    background-image: url(\"/img/trusted-partners/tp-logo-onetree.png\"); }\n  #page-trusted-partners #tp-learn-more .logo.openforge {\n    background-image: url(\"/img/trusted-partners/tp-logo-openforge.png\"); }\n  #page-trusted-partners #tp-learn-more .logo.ordina {\n    background-image: url(\"/img/trusted-partners/tp-logo-ordina.png\"); }\n  #page-trusted-partners #tp-learn-more .logo.powergate {\n    background-image: url(\"/img/trusted-partners/tp-logo-powergate.png\"); }\n  #page-trusted-partners #tp-learn-more .logo.rangle {\n    background-image: url(\"/img/trusted-partners/tp-logo-rangle.png\"); }\n  #page-trusted-partners #tp-learn-more .logo.revunit {\n    background-image: url(\"/img/trusted-partners/tp-logo-revunit.png\"); }\n  #page-trusted-partners #tp-learn-more .logo.scaffold {\n    background-image: url(\"/img/trusted-partners/tp-logo-scaffold.png\"); }\n  #page-trusted-partners #tp-learn-more .logo.scopic {\n    background-image: url(\"/img/trusted-partners/tp-logo-scopic.png\"); }\n  #page-trusted-partners #tp-learn-more .logo.spatial-vision {\n    background-image: url(\"/img/trusted-partners/tp-logo-spatial-vision.png\"); }\n  #page-trusted-partners #tp-learn-more .logo.warpdev {\n    background-image: url(\"/img/trusted-partners/tp-logo-warpdev.png\"); }\n  #page-trusted-partners #tp-learn-more .logo.yuxi {\n    background-image: url(\"/img/trusted-partners/tp-logo-yuxi.png\"); }\n\n#page-trusted-partners #tp-learn-more p {\n  color: #272b31;\n  font-weight: 400; }\n\n#page-trusted-partners #tp-learn-more .tablist {\n  padding: 0; }\n  #page-trusted-partners #tp-learn-more .tablist li {\n    list-style: none;\n    display: inline-block; }\n    #page-trusted-partners #tp-learn-more .tablist li.active a,\n    #page-trusted-partners #tp-learn-more .tablist li:hover a {\n      color: #4a8bfc; }\n    #page-trusted-partners #tp-learn-more .tablist li.active a::before {\n      border-bottom-color: #4a8bfc; }\n  #page-trusted-partners #tp-learn-more .tablist a {\n    color: #69717e;\n    font-size: 14px;\n    margin-right: 35px;\n    font-weight: 500;\n    transition: .2s color;\n    position: relative; }\n    #page-trusted-partners #tp-learn-more .tablist a::before {\n      position: absolute;\n      left: 0;\n      right: 0;\n      bottom: -3px;\n      content: '';\n      border-bottom: 2px solid transparent;\n      transition: .2s border-color; }\n\n#page-trusted-partners #tp-learn-more .tab-content {\n  padding-top: 10px;\n  font-size: 15px;\n  display: block; }\n\n#page-trusted-partners #tp-learn-more iframe {\n  box-shadow: inset 0 0 10px 0 rgba(0, 0, 0, 0.1); }\n\n#page-trusted-partners #tp-learn-more .btn {\n  letter-spacing: 0;\n  border-radius: 2px;\n  text-transform: none;\n  width: 100%;\n  font-weight: 600;\n  font-size: 16px;\n  margin-top: 34px;\n  padding: 15px 15px 18px;\n  white-space: normal; }\n\n#page-trusted-partners #tp-learn-more .back .btn {\n  font-size: 21px;\n  top: -1px;\n  left: -1px;\n  height: 56px; }\n  #page-trusted-partners #tp-learn-more .back .btn::after {\n    content: ''; }\n\n#page-trusted-partners #tp-learn-more address {\n  color: #818893;\n  font-size: 12px;\n  padding-top: 35px; }\n  #page-trusted-partners #tp-learn-more address strong {\n    color: black;\n    font-size: 17px;\n    text-transform: uppercase; }\n\n#page-trusted-partners #tp-learn-more .features {\n  padding: 0; }\n  #page-trusted-partners #tp-learn-more .features li {\n    font-size: 12px;\n    padding-left: 20px;\n    list-style: none;\n    margin: 7px 0;\n    position: relative; }\n    #page-trusted-partners #tp-learn-more .features li::before {\n      font-family: 'Ionicons';\n      content: '\\f2bc';\n      position: absolute;\n      left: 0;\n      font-size: 11px; }\n\n#page-trusted-partners #tp-learn-more hgroup {\n  padding-bottom: 64px; }\n\n@media (max-width: 767px) {\n  #page-trusted-partners #tp-learn-more .modal-dialog {\n    position: fixed;\n    left: 0;\n    right: 0;\n    width: auto;\n    top: 0;\n    bottom: 0;\n    overflow: scroll; }\n  #page-trusted-partners #tp-learn-more .modal-body {\n    height: auto;\n    padding-bottom: 500px; }\n    #page-trusted-partners #tp-learn-more .modal-body aside {\n      position: absolute;\n      bottom: 30px;\n      width: 100%;\n      overflow: hidden; }\n  #page-trusted-partners #tp-learn-more .close {\n    top: 8px;\n    right: 8px; }\n  #page-trusted-partners #tp-learn-more .go-back {\n    top: 8px;\n    left: 8px; }\n  #page-trusted-partners #tp-learn-more form input,\n  #page-trusted-partners #tp-learn-more form .select-wrapper {\n    width: 100%; }\n  #page-trusted-partners #tp-learn-more .front .btn {\n    width: calc(100% - 100px); } }\n\n/*# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInRydXN0ZWQtcGFydG5lcnMuY3NzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0VBQ0UsZUFBZSxFQUFFOztBQUVuQjtFQUNFLG9CQUFvQjtFQUNwQix5SEFBeUg7RUFDekgsNkJBQTZCLEVBQUU7RUFDL0I7SUFDRSxpR0FBaUc7SUFDakcsdUJBQXVCO0lBQ3ZCLG1CQUFtQjtJQUNuQixrQkFBa0I7SUFDbEIscUJBQXFCO0lBQ3JCLG1CQUFtQjtJQUNuQixnQ0FBZ0MsRUFBRTtJQUNsQztNQUNFLGFBQWEsRUFBRTtJQUNqQjtNQUNFLGdCQUFnQixFQUFFO0lBQ3BCO01BQ0UsaUJBQWlCO01BQ2pCLGVBQWU7TUFDZixnQkFBZ0I7TUFDaEIsK0RBQStEO01BQy9ELGlCQUFpQixFQUFFO01BQ25CO1FBQ0UsaUJBQWlCLEVBQUU7TUFDckI7UUFDRSxnQ0FBZ0M7UUFDaEMsMkJBQTJCO1FBQzNCLHNCQUFzQjtRQUN0QixnQkFBZ0IsRUFBRTtRQUNsQjtVQUNFLGFBQWEsRUFBRTtNQUNuQjtRQUNFLGdCQUFnQixFQUFFO0lBQ3RCO01BQ0UsZUFBZTtNQUNmLHNCQUFzQjtNQUN0Qiw0QkFBNEIsRUFBRTs7QUFFcEM7RUFDRSxpQ0FBaUM7RUFDakMsb0JBQW9CO0VBQ3BCLHNCQUFzQjtFQUN0QixpQkFBaUIsRUFBRTtFQUNuQjtJQUNFLG1CQUFtQixFQUFFO0lBQ3JCO01BQ0UsZ0ZBQWdGO01BQ2hGLHVCQUF1QjtNQUN2QixtQkFBbUI7TUFDbkIsT0FBTztNQUNQLFFBQVE7TUFDUixTQUFTO01BQ1QsY0FBYztNQUNkLFlBQVksRUFBRTtJQUNoQjtNQUNFLG1DQUFtQyxFQUFFO0lBQ3ZDO01BQ0UsbUNBQW1DLEVBQUU7O0FBRTNDO0VBQ0UsdUJBQStCO01BQS9CLCtCQUErQjtFQUMvQixrQkFBa0I7RUFDbEIscUJBQWM7RUFBZCxjQUFjO0VBQ2Qsb0JBQWdCO01BQWhCLGdCQUFnQixFQUFFO0VBQ2xCOztJQUVFLGFBQWE7SUFDYixvQkFBZ0I7UUFBaEIsZ0JBQWdCO0lBQ2hCLG1CQUFtQjtJQUNuQixtQkFBbUI7SUFDbkIsaUJBQWlCO0lBQ2pCLHFCQUFxQjtJQUNyQixlQUFlLEVBQUU7SUFDakI7O01BRUUsZ0JBQWdCLEVBQUU7SUFDcEI7O01BRUUsa0JBQWtCO01BQ2xCLGlCQUFpQjtNQUNqQixnQkFBZ0I7TUFDaEIsZUFBZSxFQUFFOztBQUV2QjtFQUNFLG9CQUFvQjtFQUNwQixjQUFjO0VBQ2Qsa0JBQWtCO0VBQ2xCLG1CQUFtQixFQUFFO0VBQ3JCO0lBQ0U7TUFDRSxjQUFjLEVBQUUsRUFBRTtFQUN0QjtJQUNFO01BQ0UsY0FBYyxFQUFFLEVBQUU7RUFDdEI7SUFDRTtNQUNFLGNBQWMsRUFBRSxFQUFFO0VBQ3RCO0lBQ0UsbUJBQW1CO0lBQ25CLFdBQVcsRUFBRTtFQUNmO0lBQ0UsZ0NBQWdDLEVBQUU7SUFDbEM7TUFDRSxnQ0FBZ0MsRUFBRTtFQUN0QztJQUNFLGdDQUFnQyxFQUFFO0VBQ3BDO0lBQ0UsbUJBQW1CO0lBQ25CLFVBQVU7SUFDVixRQUFRO0lBQ1IsU0FBUztJQUNULFVBQVU7SUFDVixpQkFBaUI7SUFDakIseUVBQXlFO0lBQ3pFLHNCQUFzQjtJQUN0QixtQkFBbUI7SUFDbkIsa0JBQWtCO0lBQ2xCLGNBQWMsRUFBRTtJQUNoQjtNQUNFO1FBQ0UsYUFBYSxFQUFFLEVBQUU7SUFDckI7TUFDRTtRQUNFLGFBQWEsRUFBRSxFQUFFO0lBQ3JCO01BQ0UsbUJBQW1CO01BQ25CLFlBQVk7TUFDWixXQUFXO01BQ1gsbUJBQW1CO01BQ25CLG9CQUFvQjtNQUNwQixlQUFlO01BQ2YsOENBQThDO01BQzlDLGdCQUFnQixFQUFFO01BQ2xCO1FBQ0UsMkJBQTJCO1FBQzNCLDZCQUE2QjtRQUM3Qix1QkFBdUI7UUFDdkIsYUFBYTtRQUNiLG1CQUFtQjtRQUNuQixtQkFBbUI7UUFDbkIsV0FBVztRQUNYLHdCQUF3QjtRQUN4QiwyQ0FBMkM7UUFDM0MsbUJBQW1CO1FBQ25CLGVBQWU7UUFDZixXQUFXO1FBQ1gsK0JBQXVCO2dCQUF2Qix1QkFBdUI7UUFDdkIsbUNBQTJCO2dCQUEzQiwyQkFBMkI7UUFDM0Isa0ZBQWtGO1FBQ2xGLHlCQUF5QixFQUFFO1FBQzNCO1VBQ0UsdUVBQXVFLEVBQUU7UUFDM0U7VUFDRSxzRUFBc0UsRUFBRTtRQUMxRTtVQUNFLGdFQUFnRSxFQUFFO1FBQ3BFO1VBQ0UsNkVBQTZFLEVBQUU7UUFDakY7VUFDRSxrRUFBa0UsRUFBRTtRQUN0RTtVQUNFLHFFQUFxRSxFQUFFO1FBQ3pFO1VBQ0UseUVBQXlFLEVBQUU7UUFDN0U7VUFDRSxvRUFBb0UsRUFBRTtRQUN4RTtVQUNFLGtFQUFrRSxFQUFFO1FBQ3RFO1VBQ0Usa0VBQWtFLEVBQUU7UUFDdEU7VUFDRSxvRUFBb0UsRUFBRTtRQUN4RTtVQUNFLGtFQUFrRSxFQUFFO1FBQ3RFO1VBQ0Usc0VBQXNFLEVBQUU7UUFDMUU7VUFDRSxpRUFBaUUsRUFBRTtRQUNyRTtVQUNFLG1FQUFtRSxFQUFFO1FBQ3ZFO1VBQ0UscUVBQXFFLEVBQUU7UUFDekU7VUFDRSxrRUFBa0UsRUFBRTtRQUN0RTtVQUNFLHFFQUFxRSxFQUFFO1FBQ3pFO1VBQ0Usa0VBQWtFLEVBQUU7UUFDdEU7VUFDRSxtRUFBbUUsRUFBRTtRQUN2RTtVQUNFLG9FQUFvRSxFQUFFO1FBQ3hFO1VBQ0Usa0VBQWtFLEVBQUU7UUFDdEU7VUFDRSwwRUFBMEUsRUFBRTtRQUM5RTtVQUNFLG1FQUFtRSxFQUFFO1FBQ3ZFO1VBQ0UsZ0VBQWdFLEVBQUU7UUFDcEU7VUFDRSxlQUFlLEVBQUU7UUFDbkI7VUFDRSxhQUFhO1VBQ2Isb0NBQTRCO2tCQUE1Qiw0QkFBNEIsRUFBRTtVQUM5QjtZQUNFLGFBQWE7WUFDYixZQUFZO1lBQ1osdUNBQStCO29CQUEvQiwrQkFBK0IsRUFBRTtRQUNyQztVQUNFLFlBQVk7VUFDWixzQ0FBOEI7a0JBQTlCLDhCQUE4QixFQUFFO01BQ3BDO1FBQ0UsV0FBVztRQUNYLDRCQUFvQjtnQkFBcEIsb0JBQW9CO1FBQ3BCLDJCQUEyQixFQUFFO0lBQ2pDO01BQ0U7UUFDRSxtQ0FBbUMsRUFBRTtRQUNyQztVQUNFLGNBQWMsRUFBRSxFQUFFOztBQUU1QjtFQUNFLHFCQUFxQixFQUFFO0VBQ3ZCO0lBQ0UsbUJBQW1CO0lBQ25CLHFCQUFxQjtJQUNyQixtQkFBbUI7SUFDbkIscUJBQXFCO0lBQ3JCLDZDQUE2QztJQUM3Qyx1QkFBdUIsRUFBRTtJQUN6QjtNQUNFLHVFQUF1RSxFQUFFO0lBQzNFO01BQ0Usc0VBQXNFLEVBQUU7SUFDMUU7TUFDRSxnRUFBZ0UsRUFBRTtJQUNwRTtNQUNFLDZFQUE2RSxFQUFFO0lBQ2pGO01BQ0Usa0VBQWtFLEVBQUU7SUFDdEU7TUFDRSxxRUFBcUUsRUFBRTtJQUN6RTtNQUNFLHlFQUF5RSxFQUFFO0lBQzdFO01BQ0Usb0VBQW9FLEVBQUU7SUFDeEU7TUFDRSxrRUFBa0UsRUFBRTtJQUN0RTtNQUNFLGtFQUFrRSxFQUFFO0lBQ3RFO01BQ0Usb0VBQW9FLEVBQUU7SUFDeEU7TUFDRSxrRUFBa0UsRUFBRTtJQUN0RTtNQUNFLHNFQUFzRSxFQUFFO0lBQzFFO01BQ0UsaUVBQWlFLEVBQUU7SUFDckU7TUFDRSxtRUFBbUUsRUFBRTtJQUN2RTtNQUNFLHFFQUFxRSxFQUFFO0lBQ3pFO01BQ0Usa0VBQWtFLEVBQUU7SUFDdEU7TUFDRSxxRUFBcUUsRUFBRTtJQUN6RTtNQUNFLGtFQUFrRSxFQUFFO0lBQ3RFO01BQ0UsbUVBQW1FLEVBQUU7SUFDdkU7TUFDRSxvRUFBb0UsRUFBRTtJQUN4RTtNQUNFLGtFQUFrRSxFQUFFO0lBQ3RFO01BQ0UsMEVBQTBFLEVBQUU7SUFDOUU7TUFDRSxtRUFBbUUsRUFBRTtJQUN2RTtNQUNFLGdFQUFnRSxFQUFFO0lBQ3BFO01BQ0UsUUFBUTtNQUNSLFNBQVM7TUFDVCxVQUFVO01BQ1YsYUFBYTtNQUNiLGVBQWU7TUFDZixtQkFBbUI7TUFDbkIsZ0JBQWdCLEVBQUU7SUFDcEI7TUFDRSxjQUFjLEVBQUU7O0FBRXRCO0VBQ0UsOEZBQThGO0VBQzlGLHVCQUF1QjtFQUN2QixxQkFBcUIsRUFBRTtFQUN2QjtJQUNFLGFBQWEsRUFBRTtFQUNqQjtJQUNFLGlCQUFpQjtJQUNqQix3QkFBd0I7SUFDeEIsbUJBQW1CLEVBQUU7O0FBRXpCO0VBQ0UsYUFBYTtFQUNiLDBCQUFrQjtVQUFsQixrQkFBa0IsRUFBRTtFQUNwQjtJQUNFLG1DQUEyQjtZQUEzQiwyQkFBMkIsRUFBRTtJQUM3QjtNQUNFLG9DQUE0QjtjQUE1Qiw0QkFBNEI7TUFDNUIsV0FBVyxFQUFFO0lBQ2Y7TUFDRSxvREFBNEM7Y0FBNUMsNENBQTRDO01BQzVDLFdBQVcsRUFBRTtNQUNiO1FBQ0U7VUFDRSxtREFBMkM7a0JBQTNDLDJDQUEyQyxFQUFFLEVBQUU7O0FBRXpEO0VBQ0UsaUJBQWlCO0VBQ2pCLHFDQUE2QjtVQUE3Qiw2QkFBNkI7RUFDN0IsbUJBQW1CLEVBQUU7O0FBRXZCO0VBQ0UsbUJBQW1CO0VBQ25CLGtCQUFrQjtFQUNsQix5QkFBeUI7RUFDekIsc0JBQXNCO0VBQ3RCLGNBQWMsRUFBRTtFQUNoQjtJQUNFLGlDQUF5QjtZQUF6Qix5QkFBeUIsRUFBRTtFQUM3QjtJQUNFLG1EQUEyQztZQUEzQywyQ0FBMkM7SUFDM0MsbUJBQW1CO0lBQ25CLE9BQU87SUFDUCxRQUFRO0lBQ1IsU0FBUztJQUNULGtCQUFrQjtJQUNsQixXQUFXLEVBQUU7O0FBRWpCO0VBQ0UsYUFBYSxFQUFFOztBQUVqQjtFQUNFLGFBQWE7RUFDYixhQUFhLEVBQUU7O0FBRWpCO0VBQ0U7O0lBRUUsWUFBWTtJQUNaLFlBQVksRUFBRSxFQUFFOztBQUVwQjtFQUNFLGFBQWE7RUFDYixjQUFjO0VBQ2QscUJBQXFCO0VBQ3JCLG1CQUFtQjtFQUNuQiwyQ0FBMkM7RUFDM0MsdUJBQXVCLEVBQUU7RUFDekI7SUFDRSx1RUFBdUUsRUFBRTtFQUMzRTtJQUNFLHNFQUFzRSxFQUFFO0VBQzFFO0lBQ0UsZ0VBQWdFLEVBQUU7RUFDcEU7SUFDRSw2RUFBNkUsRUFBRTtFQUNqRjtJQUNFLGtFQUFrRSxFQUFFO0VBQ3RFO0lBQ0UscUVBQXFFLEVBQUU7RUFDekU7SUFDRSx5RUFBeUUsRUFBRTtFQUM3RTtJQUNFLG9FQUFvRSxFQUFFO0VBQ3hFO0lBQ0Usa0VBQWtFLEVBQUU7RUFDdEU7SUFDRSxrRUFBa0UsRUFBRTtFQUN0RTtJQUNFLG9FQUFvRSxFQUFFO0VBQ3hFO0lBQ0Usa0VBQWtFLEVBQUU7RUFDdEU7SUFDRSxzRUFBc0UsRUFBRTtFQUMxRTtJQUNFLGlFQUFpRSxFQUFFO0VBQ3JFO0lBQ0UsbUVBQW1FLEVBQUU7RUFDdkU7SUFDRSxxRUFBcUUsRUFBRTtFQUN6RTtJQUNFLGtFQUFrRSxFQUFFO0VBQ3RFO0lBQ0UscUVBQXFFLEVBQUU7RUFDekU7SUFDRSxrRUFBa0UsRUFBRTtFQUN0RTtJQUNFLG1FQUFtRSxFQUFFO0VBQ3ZFO0lBQ0Usb0VBQW9FLEVBQUU7RUFDeEU7SUFDRSxrRUFBa0UsRUFBRTtFQUN0RTtJQUNFLDBFQUEwRSxFQUFFO0VBQzlFO0lBQ0UsbUVBQW1FLEVBQUU7RUFDdkU7SUFDRSxnRUFBZ0UsRUFBRTs7QUFFdEU7RUFDRSxlQUFlO0VBQ2YsaUJBQWlCLEVBQUU7O0FBRXJCO0VBQ0UsV0FBVyxFQUFFO0VBQ2I7SUFDRSxpQkFBaUI7SUFDakIsc0JBQXNCLEVBQUU7SUFDeEI7O01BRUUsZUFBZSxFQUFFO0lBQ25CO01BQ0UsNkJBQTZCLEVBQUU7RUFDbkM7SUFDRSxlQUFlO0lBQ2YsZ0JBQWdCO0lBQ2hCLG1CQUFtQjtJQUNuQixpQkFBaUI7SUFDakIsc0JBQXNCO0lBQ3RCLG1CQUFtQixFQUFFO0lBQ3JCO01BQ0UsbUJBQW1CO01BQ25CLFFBQVE7TUFDUixTQUFTO01BQ1QsYUFBYTtNQUNiLFlBQVk7TUFDWixxQ0FBcUM7TUFDckMsNkJBQTZCLEVBQUU7O0FBRXJDO0VBQ0Usa0JBQWtCO0VBQ2xCLGdCQUFnQjtFQUNoQixlQUFlLEVBQUU7O0FBRW5CO0VBQ0UsZ0RBQWdELEVBQUU7O0FBRXBEO0VBQ0Usa0JBQWtCO0VBQ2xCLG1CQUFtQjtFQUNuQixxQkFBcUI7RUFDckIsWUFBWTtFQUNaLGlCQUFpQjtFQUNqQixnQkFBZ0I7RUFDaEIsaUJBQWlCO0VBQ2pCLHdCQUF3QjtFQUN4QixvQkFBb0IsRUFBRTs7QUFFeEI7RUFDRSxnQkFBZ0I7RUFDaEIsVUFBVTtFQUNWLFdBQVc7RUFDWCxhQUFhLEVBQUU7RUFDZjtJQUNFLFlBQVksRUFBRTs7QUFFbEI7RUFDRSxlQUFlO0VBQ2YsZ0JBQWdCO0VBQ2hCLGtCQUFrQixFQUFFO0VBQ3BCO0lBQ0UsYUFBYTtJQUNiLGdCQUFnQjtJQUNoQiwwQkFBMEIsRUFBRTs7QUFFaEM7RUFDRSxXQUFXLEVBQUU7RUFDYjtJQUNFLGdCQUFnQjtJQUNoQixtQkFBbUI7SUFDbkIsaUJBQWlCO0lBQ2pCLGNBQWM7SUFDZCxtQkFBbUIsRUFBRTtJQUNyQjtNQUNFLHdCQUF3QjtNQUN4QixpQkFBaUI7TUFDakIsbUJBQW1CO01BQ25CLFFBQVE7TUFDUixnQkFBZ0IsRUFBRTs7QUFFeEI7RUFDRSxxQkFBcUIsRUFBRTs7QUFFekI7RUFDRTtJQUNFLGdCQUFnQjtJQUNoQixRQUFRO0lBQ1IsU0FBUztJQUNULFlBQVk7SUFDWixPQUFPO0lBQ1AsVUFBVTtJQUNWLGlCQUFpQixFQUFFO0VBQ3JCO0lBQ0UsYUFBYTtJQUNiLHNCQUFzQixFQUFFO0lBQ3hCO01BQ0UsbUJBQW1CO01BQ25CLGFBQWE7TUFDYixZQUFZO01BQ1osaUJBQWlCLEVBQUU7RUFDdkI7SUFDRSxTQUFTO0lBQ1QsV0FBVyxFQUFFO0VBQ2Y7SUFDRSxTQUFTO0lBQ1QsVUFBVSxFQUFFO0VBQ2Q7O0lBRUUsWUFBWSxFQUFFO0VBQ2hCO0lBQ0UsMEJBQTBCLEVBQUUsRUFBRSIsImZpbGUiOiJwYWdlcy90cnVzdGVkLXBhcnRuZXJzLmNzcyIsInNvdXJjZXNDb250ZW50IjpbIiNwYWdlLXRydXN0ZWQtcGFydG5lcnMgLm5hdmJhciAuYnRuIHtcbiAgY29sb3I6ICMyNjI2MmU7IH1cblxuI3BhZ2UtdHJ1c3RlZC1wYXJ0bmVycyAubmF2YmFyICsgLmJhbm5lciB7XG4gIGJhY2tncm91bmQ6ICMyYTI2MmM7XG4gIGJhY2tncm91bmQ6IHVybChcIi9pbWcvdHJ1c3RlZC1wYXJ0bmVycy90cC1jdGEtYmcuanBnXCIpLCBsaW5lYXItZ3JhZGllbnQodG8gcmlnaHQsICMyMjI1MzAgMCUsICMzNTM2M2UgNTAlLCAjMmEyOTMyIDEwMCUpO1xuICBiYWNrZ3JvdW5kLXNpemU6IGNvdmVyLCAxMDAlOyB9XG4gICNwYWdlLXRydXN0ZWQtcGFydG5lcnMgLm5hdmJhciArIC5iYW5uZXIgaGdyb3VwIHtcbiAgICBiYWNrZ3JvdW5kOiBuby1yZXBlYXQgY2VudGVyIDEwMHB4IHVybChcIi9pbWcvdHJ1c3RlZC1wYXJ0bmVycy9pb25pYy10cnVzdGVkLXBhcnRuZXJzLWJhZGdlLnBuZ1wiKTtcbiAgICBiYWNrZ3JvdW5kLXNpemU6IDE0M3B4O1xuICAgIHBhZGRpbmctdG9wOiAyNjBweDtcbiAgICBtYXJnaW4tdG9wOiAtNzJweDtcbiAgICBwYWRkaW5nLWJvdHRvbTogNjdweDtcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC45KTsgfVxuICAgICNwYWdlLXRydXN0ZWQtcGFydG5lcnMgLm5hdmJhciArIC5iYW5uZXIgaGdyb3VwIHN0cm9uZyB7XG4gICAgICBjb2xvcjogd2hpdGU7IH1cbiAgICAjcGFnZS10cnVzdGVkLXBhcnRuZXJzIC5uYXZiYXIgKyAuYmFubmVyIGhncm91cCBoMSB7XG4gICAgICBmb250LXNpemU6IDM2cHg7IH1cbiAgICAjcGFnZS10cnVzdGVkLXBhcnRuZXJzIC5uYXZiYXIgKyAuYmFubmVyIGhncm91cCBwIHtcbiAgICAgIG1heC13aWR0aDogNjUwcHg7XG4gICAgICBtYXJnaW46IDAgYXV0bztcbiAgICAgIGZvbnQtc2l6ZTogMThweDtcbiAgICAgIGZvbnQtZmFtaWx5OiBcIkludGVyXCIsIFwiSW50ZXIgVUlcIiwgSGVsdmV0aWNhLCBBcmlhbCwgc2Fucy1zZXJpZjtcbiAgICAgIGZvbnQtd2VpZ2h0OiA0MDA7IH1cbiAgICAgICNwYWdlLXRydXN0ZWQtcGFydG5lcnMgLm5hdmJhciArIC5iYW5uZXIgaGdyb3VwIHAgYiwgI3BhZ2UtdHJ1c3RlZC1wYXJ0bmVycyAubmF2YmFyICsgLmJhbm5lciBoZ3JvdXAgcCBzdHJvbmcge1xuICAgICAgICBmb250LXdlaWdodDogNjAwOyB9XG4gICAgICAjcGFnZS10cnVzdGVkLXBhcnRuZXJzIC5uYXZiYXIgKyAuYmFubmVyIGhncm91cCBwIGEge1xuICAgICAgICBjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjkpO1xuICAgICAgICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTtcbiAgICAgICAgdHJhbnNpdGlvbjogLjJzIGNvbG9yO1xuICAgICAgICBjdXJzb3I6IHBvaW50ZXI7IH1cbiAgICAgICAgI3BhZ2UtdHJ1c3RlZC1wYXJ0bmVycyAubmF2YmFyICsgLmJhbm5lciBoZ3JvdXAgcCBhOmhvdmVyIHtcbiAgICAgICAgICBjb2xvcjogd2hpdGU7IH1cbiAgICAgICNwYWdlLXRydXN0ZWQtcGFydG5lcnMgLm5hdmJhciArIC5iYW5uZXIgaGdyb3VwIHAuc20ge1xuICAgICAgICBmb250LXNpemU6IDE0cHg7IH1cbiAgICAjcGFnZS10cnVzdGVkLXBhcnRuZXJzIC5uYXZiYXIgKyAuYmFubmVyIGhncm91cCAuYnRuLndoaXRlIHtcbiAgICAgIGNvbG9yOiAjNGE4YmZjO1xuICAgICAgbWFyZ2luOiA0NHB4IGF1dG8gNXB4O1xuICAgICAgZm9udC13ZWlnaHQ6IDcwMCAhaW1wb3J0YW50OyB9XG5cbiNwYWdlLXRydXN0ZWQtcGFydG5lcnMgLnBlcmtzIHtcbiAgYm9yZGVyLWJvdHRvbTogMXB4ICNlOWVjZjMgc29saWQ7XG4gIGJhY2tncm91bmQ6ICNmOWZhZmM7XG4gIHBhZGRpbmc6IDEwMHB4IDAgMjBweDtcbiAgbWFyZ2luLWJvdHRvbTogMDsgfVxuICAjcGFnZS10cnVzdGVkLXBhcnRuZXJzIC5wZXJrcyAuaXRlbSB7XG4gICAgcGFkZGluZy10b3A6IDIzNXB4OyB9XG4gICAgI3BhZ2UtdHJ1c3RlZC1wYXJ0bmVycyAucGVya3MgLml0ZW06OmJlZm9yZSB7XG4gICAgICBiYWNrZ3JvdW5kOiBuby1yZXBlYXQgdG9wIGNlbnRlciB1cmwoXCIvaW1nL3RydXN0ZWQtcGFydG5lcnMvdHAtaW5mby1pY29ucy5wbmdcIik7XG4gICAgICBiYWNrZ3JvdW5kLXNpemU6IDE4MHB4O1xuICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgdG9wOiAwO1xuICAgICAgbGVmdDogMDtcbiAgICAgIHJpZ2h0OiAwO1xuICAgICAgaGVpZ2h0OiAxODBweDtcbiAgICAgIGNvbnRlbnQ6ICcnOyB9XG4gICAgI3BhZ2UtdHJ1c3RlZC1wYXJ0bmVycyAucGVya3MgLml0ZW0ucXVhbGl0eTo6YmVmb3JlIHtcbiAgICAgIGJhY2tncm91bmQtcG9zaXRpb246IGNlbnRlciBjZW50ZXI7IH1cbiAgICAjcGFnZS10cnVzdGVkLXBhcnRuZXJzIC5wZXJrcyAuaXRlbS5wbGF0Zm9ybXM6OmJlZm9yZSB7XG4gICAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiBib3R0b20gY2VudGVyOyB9XG5cbiNwYWdlLXRydXN0ZWQtcGFydG5lcnMgLmxpc3Qge1xuICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG4gIHBhZGRpbmc6IDgycHggMCAwO1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LXdyYXA6IHdyYXA7IH1cbiAgI3BhZ2UtdHJ1c3RlZC1wYXJ0bmVycyAubGlzdCAuaXRlbSxcbiAgI3BhZ2UtdHJ1c3RlZC1wYXJ0bmVycyAubGlzdCBsaSB7XG4gICAgd2lkdGg6IDMwMHB4O1xuICAgIGZsZXg6IDAgMCAzMDBweDtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgIGxpc3Qtc3R5bGU6IG5vbmU7XG4gICAgcGFkZGluZy1ib3R0b206IDgwcHg7XG4gICAgbWFyZ2luOiAwIGF1dG87IH1cbiAgICAjcGFnZS10cnVzdGVkLXBhcnRuZXJzIC5saXN0IC5pdGVtIGg0LFxuICAgICNwYWdlLXRydXN0ZWQtcGFydG5lcnMgLmxpc3QgbGkgaDQge1xuICAgICAgZm9udC1zaXplOiAyMnB4OyB9XG4gICAgI3BhZ2UtdHJ1c3RlZC1wYXJ0bmVycyAubGlzdCAuaXRlbSBwLFxuICAgICNwYWdlLXRydXN0ZWQtcGFydG5lcnMgLmxpc3QgbGkgcCB7XG4gICAgICBsaW5lLWhlaWdodDogMjRweDtcbiAgICAgIG1heC13aWR0aDogMzAwcHg7XG4gICAgICBmb250LXNpemU6IDE0cHg7XG4gICAgICBtYXJnaW46IDAgYXV0bzsgfVxuXG4jcGFnZS10cnVzdGVkLXBhcnRuZXJzICNwYXJ0bmVyLW1hcCB7XG4gIGJhY2tncm91bmQ6ICMxNzE5MWM7XG4gIGhlaWdodDogNjg5cHg7XG4gIHBhZGRpbmctdG9wOiA5NnB4O1xuICBwb3NpdGlvbjogcmVsYXRpdmU7IH1cbiAgQG1lZGlhIChtYXgtd2lkdGg6IDEyMTlweCkge1xuICAgICNwYWdlLXRydXN0ZWQtcGFydG5lcnMgI3BhcnRuZXItbWFwIHtcbiAgICAgIGhlaWdodDogNjAwcHg7IH0gfVxuICBAbWVkaWEgKG1heC13aWR0aDogOTkxcHgpIHtcbiAgICAjcGFnZS10cnVzdGVkLXBhcnRuZXJzICNwYXJ0bmVyLW1hcCB7XG4gICAgICBoZWlnaHQ6IDQ3MHB4OyB9IH1cbiAgQG1lZGlhIChtYXgtd2lkdGg6IDk5MXB4KSB7XG4gICAgI3BhZ2UtdHJ1c3RlZC1wYXJ0bmVycyAjcGFydG5lci1tYXAge1xuICAgICAgaGVpZ2h0OiAzNzBweDsgfSB9XG4gICNwYWdlLXRydXN0ZWQtcGFydG5lcnMgI3BhcnRuZXItbWFwIGhncm91cCB7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIHotaW5kZXg6IDE7IH1cbiAgI3BhZ2UtdHJ1c3RlZC1wYXJ0bmVycyAjcGFydG5lci1tYXAgaDMge1xuICAgIGNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuOSk7IH1cbiAgICAjcGFnZS10cnVzdGVkLXBhcnRuZXJzICNwYXJ0bmVyLW1hcCBoMyBzdHJvbmcge1xuICAgICAgY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC45KTsgfVxuICAjcGFnZS10cnVzdGVkLXBhcnRuZXJzICNwYXJ0bmVyLW1hcCBwIHtcbiAgICBjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjcpOyB9XG4gICNwYWdlLXRydXN0ZWQtcGFydG5lcnMgI3BhcnRuZXItbWFwIC5kb3RzIHtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgdG9wOiA0MHB4O1xuICAgIGxlZnQ6IDA7XG4gICAgcmlnaHQ6IDA7XG4gICAgYm90dG9tOiAwO1xuICAgIG1hcmdpbi1ib3R0b206IDA7XG4gICAgYmFja2dyb3VuZDogdXJsKFwiL2ltZy90cnVzdGVkLXBhcnRuZXJzL3RwLW1hcC5qcGdcIikgbm8tcmVwZWF0IHRvcCBjZW50ZXI7XG4gICAgYmFja2dyb3VuZC1zaXplOiAxMjUlO1xuICAgIG1hcmdpbi1yaWdodDogYXV0bztcbiAgICBtYXJnaW4tbGVmdDogYXV0bztcbiAgICB3aWR0aDogMTEzMHB4OyB9XG4gICAgQG1lZGlhIChtYXgtd2lkdGg6IDEyMTlweCkge1xuICAgICAgI3BhZ2UtdHJ1c3RlZC1wYXJ0bmVycyAjcGFydG5lci1tYXAgLmRvdHMge1xuICAgICAgICB3aWR0aDogOTcwcHg7IH0gfVxuICAgIEBtZWRpYSAobWF4LXdpZHRoOiA5OTFweCkge1xuICAgICAgI3BhZ2UtdHJ1c3RlZC1wYXJ0bmVycyAjcGFydG5lci1tYXAgLmRvdHMge1xuICAgICAgICB3aWR0aDogNzUwcHg7IH0gfVxuICAgICNwYWdlLXRydXN0ZWQtcGFydG5lcnMgI3BhcnRuZXItbWFwIC5kb3RzIGxpIHtcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgIGhlaWdodDogOXB4O1xuICAgICAgd2lkdGg6IDlweDtcbiAgICAgIGJvcmRlci1yYWRpdXM6IDlweDtcbiAgICAgIGJhY2tncm91bmQ6ICM0YThiZmM7XG4gICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgIGJveC1zaGFkb3c6IDAgMCA0cHggMnB4IHJnYmEoMjMsIDI1LCAyOCwgMC43KTtcbiAgICAgIGN1cnNvcjogcG9pbnRlcjsgfVxuICAgICAgI3BhZ2UtdHJ1c3RlZC1wYXJ0bmVycyAjcGFydG5lci1tYXAgLmRvdHMgbGkgLmJveCB7XG4gICAgICAgIGJhY2tncm91bmQ6IHdoaXRlIDUwJSAxMHB4O1xuICAgICAgICBiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0O1xuICAgICAgICBiYWNrZ3JvdW5kLXNpemU6IDE3MHB4O1xuICAgICAgICB3aWR0aDogMjAwcHg7XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDNweDtcbiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICAgICB6LWluZGV4OiAyO1xuICAgICAgICBwYWRkaW5nOiA5NXB4IDE1cHggMTVweDtcbiAgICAgICAgYm94LXNoYWRvdzogMXB4IDJweCA0cHggcmdiYSgwLCAwLCAwLCAwLjIpO1xuICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICBvcGFjaXR5OiAwO1xuICAgICAgICB0cmFuc2Zvcm06IHNjYWxlKDAuMDEpO1xuICAgICAgICB0cmFuc2Zvcm0tb3JpZ2luOiBsZWZ0IHRvcDtcbiAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuM3MgY3ViaWMtYmV6aWVyKDAuMTU1LCAxLjEwNSwgMC4yOTUsIDEuMTIpLCBvcGFjaXR5IDAuMnMgbGluZWFyO1xuICAgICAgICB0cmFuc2l0aW9uLWRlbGF5OiAwcywgMHM7IH1cbiAgICAgICAgI3BhZ2UtdHJ1c3RlZC1wYXJ0bmVycyAjcGFydG5lci1tYXAgLmRvdHMgbGkgLmJveC5hcmN0aWMtbGVhZiB7XG4gICAgICAgICAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFwiL2ltZy90cnVzdGVkLXBhcnRuZXJzL3RwLWxvZ28tYXJjdGljLWxlYWYucG5nXCIpOyB9XG4gICAgICAgICNwYWdlLXRydXN0ZWQtcGFydG5lcnMgI3BhcnRuZXItbWFwIC5kb3RzIGxpIC5ib3guYmVuZHl3b3JrcyB7XG4gICAgICAgICAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFwiL2ltZy90cnVzdGVkLXBhcnRuZXJzL3RwLWxvZ28tYmVuZHl3b3Jrcy5wbmdcIik7IH1cbiAgICAgICAgI3BhZ2UtdHJ1c3RlZC1wYXJ0bmVycyAjcGFydG5lci1tYXAgLmRvdHMgbGkgLmJveC5ieW5nIHtcbiAgICAgICAgICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXCIvaW1nL3RydXN0ZWQtcGFydG5lcnMvdHAtbG9nby1ieW5nLnBuZ1wiKTsgfVxuICAgICAgICAjcGFnZS10cnVzdGVkLXBhcnRuZXJzICNwYXJ0bmVyLW1hcCAuZG90cyBsaSAuYm94LmRpZ2l0YWxzY2llbnRpc3RzIHtcbiAgICAgICAgICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXCIvaW1nL3RydXN0ZWQtcGFydG5lcnMvdHAtbG9nby1kaWdpdGFsc2NpZW50aXN0cy5wbmdcIik7IH1cbiAgICAgICAgI3BhZ2UtdHJ1c3RlZC1wYXJ0bmVycyAjcGFydG5lci1tYXAgLmRvdHMgbGkgLmJveC5lbGl4ZWwge1xuICAgICAgICAgIGJhY2tncm91bmQtaW1hZ2U6IHVybChcIi9pbWcvdHJ1c3RlZC1wYXJ0bmVycy90cC1sb2dvLWVsaXhlbC5wbmdcIik7IH1cbiAgICAgICAgI3BhZ2UtdHJ1c3RlZC1wYXJ0bmVycyAjcGFydG5lci1tYXAgLmRvdHMgbGkgLmJveC5oeWJhcHBzIHtcbiAgICAgICAgICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXCIvaW1nL3RydXN0ZWQtcGFydG5lcnMvdHAtbG9nby1oeWJhcHBzLnBuZz8xXCIpOyB9XG4gICAgICAgICNwYWdlLXRydXN0ZWQtcGFydG5lcnMgI3BhcnRuZXItbWFwIC5kb3RzIGxpIC5ib3guaHlicmlkLWhlcm9lcyB7XG4gICAgICAgICAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFwiL2ltZy90cnVzdGVkLXBhcnRuZXJzL3RwLWxvZ28taHlicmlkLWhlcm9lcy5wbmdcIik7IH1cbiAgICAgICAgI3BhZ2UtdHJ1c3RlZC1wYXJ0bmVycyAjcGFydG5lci1tYXAgLmRvdHMgbGkgLmJveC5pbmNlbnRybyB7XG4gICAgICAgICAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFwiL2ltZy90cnVzdGVkLXBhcnRuZXJzL3RwLWxvZ28taW5jZW50cm8ucG5nXCIpOyB9XG4gICAgICAgICNwYWdlLXRydXN0ZWQtcGFydG5lcnMgI3BhcnRuZXItbWFwIC5kb3RzIGxpIC5ib3guaW52aXFhIHtcbiAgICAgICAgICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXCIvaW1nL3RydXN0ZWQtcGFydG5lcnMvdHAtbG9nby1pbnZpcWEucG5nXCIpOyB9XG4gICAgICAgICNwYWdlLXRydXN0ZWQtcGFydG5lcnMgI3BhcnRuZXItbWFwIC5kb3RzIGxpIC5ib3guam5lc2lzIHtcbiAgICAgICAgICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXCIvaW1nL3RydXN0ZWQtcGFydG5lcnMvdHAtbG9nby1qbmVzaXMucG5nXCIpOyB9XG4gICAgICAgICNwYWdlLXRydXN0ZWQtcGFydG5lcnMgI3BhcnRuZXItbWFwIC5kb3RzIGxpIC5ib3gua2VlbnNvZnQge1xuICAgICAgICAgIGJhY2tncm91bmQtaW1hZ2U6IHVybChcIi9pbWcvdHJ1c3RlZC1wYXJ0bmVycy90cC1sb2dvLWtlZW5zb2Z0LnBuZ1wiKTsgfVxuICAgICAgICAjcGFnZS10cnVzdGVkLXBhcnRuZXJzICNwYXJ0bmVyLW1hcCAuZG90cyBsaSAuYm94Lmt1bmRlciB7XG4gICAgICAgICAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFwiL2ltZy90cnVzdGVkLXBhcnRuZXJzL3RwLWxvZ28ta3VuZGVyLnBuZ1wiKTsgfVxuICAgICAgICAjcGFnZS10cnVzdGVkLXBhcnRuZXJzICNwYXJ0bmVyLW1hcCAuZG90cyBsaSAuYm94Lm1hY2FkYW1pYW4ge1xuICAgICAgICAgIGJhY2tncm91bmQtaW1hZ2U6IHVybChcIi9pbWcvdHJ1c3RlZC1wYXJ0bmVycy90cC1sb2dvLW1hY2FkYW1pYW4ucG5nXCIpOyB9XG4gICAgICAgICNwYWdlLXRydXN0ZWQtcGFydG5lcnMgI3BhcnRuZXItbWFwIC5kb3RzIGxpIC5ib3gubW9kdXMtY3JlYXRlIHtcbiAgICAgICAgICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXCIvaW1nL3RydXN0ZWQtcGFydG5lcnMvdHAtbG9nby1tb2R1cy5wbmdcIik7IH1cbiAgICAgICAgI3BhZ2UtdHJ1c3RlZC1wYXJ0bmVycyAjcGFydG5lci1tYXAgLmRvdHMgbGkgLmJveC5vbmV0cmVlIHtcbiAgICAgICAgICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXCIvaW1nL3RydXN0ZWQtcGFydG5lcnMvdHAtbG9nby1vbmV0cmVlLnBuZ1wiKTsgfVxuICAgICAgICAjcGFnZS10cnVzdGVkLXBhcnRuZXJzICNwYXJ0bmVyLW1hcCAuZG90cyBsaSAuYm94Lm9wZW5mb3JnZSB7XG4gICAgICAgICAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFwiL2ltZy90cnVzdGVkLXBhcnRuZXJzL3RwLWxvZ28tb3BlbmZvcmdlLnBuZ1wiKTsgfVxuICAgICAgICAjcGFnZS10cnVzdGVkLXBhcnRuZXJzICNwYXJ0bmVyLW1hcCAuZG90cyBsaSAuYm94Lm9yZGluYSB7XG4gICAgICAgICAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFwiL2ltZy90cnVzdGVkLXBhcnRuZXJzL3RwLWxvZ28tb3JkaW5hLnBuZ1wiKTsgfVxuICAgICAgICAjcGFnZS10cnVzdGVkLXBhcnRuZXJzICNwYXJ0bmVyLW1hcCAuZG90cyBsaSAuYm94LnBvd2VyZ2F0ZSB7XG4gICAgICAgICAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFwiL2ltZy90cnVzdGVkLXBhcnRuZXJzL3RwLWxvZ28tcG93ZXJnYXRlLnBuZ1wiKTsgfVxuICAgICAgICAjcGFnZS10cnVzdGVkLXBhcnRuZXJzICNwYXJ0bmVyLW1hcCAuZG90cyBsaSAuYm94LnJhbmdsZSB7XG4gICAgICAgICAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFwiL2ltZy90cnVzdGVkLXBhcnRuZXJzL3RwLWxvZ28tcmFuZ2xlLnBuZ1wiKTsgfVxuICAgICAgICAjcGFnZS10cnVzdGVkLXBhcnRuZXJzICNwYXJ0bmVyLW1hcCAuZG90cyBsaSAuYm94LnJldnVuaXQge1xuICAgICAgICAgIGJhY2tncm91bmQtaW1hZ2U6IHVybChcIi9pbWcvdHJ1c3RlZC1wYXJ0bmVycy90cC1sb2dvLXJldnVuaXQucG5nXCIpOyB9XG4gICAgICAgICNwYWdlLXRydXN0ZWQtcGFydG5lcnMgI3BhcnRuZXItbWFwIC5kb3RzIGxpIC5ib3guc2NhZmZvbGQge1xuICAgICAgICAgIGJhY2tncm91bmQtaW1hZ2U6IHVybChcIi9pbWcvdHJ1c3RlZC1wYXJ0bmVycy90cC1sb2dvLXNjYWZmb2xkLnBuZ1wiKTsgfVxuICAgICAgICAjcGFnZS10cnVzdGVkLXBhcnRuZXJzICNwYXJ0bmVyLW1hcCAuZG90cyBsaSAuYm94LnNjb3BpYyB7XG4gICAgICAgICAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFwiL2ltZy90cnVzdGVkLXBhcnRuZXJzL3RwLWxvZ28tc2NvcGljLnBuZ1wiKTsgfVxuICAgICAgICAjcGFnZS10cnVzdGVkLXBhcnRuZXJzICNwYXJ0bmVyLW1hcCAuZG90cyBsaSAuYm94LnNwYXRpYWwtdmlzaW9uIHtcbiAgICAgICAgICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXCIvaW1nL3RydXN0ZWQtcGFydG5lcnMvdHAtbG9nby1zcGF0aWFsLXZpc2lvbi5wbmdcIik7IH1cbiAgICAgICAgI3BhZ2UtdHJ1c3RlZC1wYXJ0bmVycyAjcGFydG5lci1tYXAgLmRvdHMgbGkgLmJveC53YXJwZGV2IHtcbiAgICAgICAgICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXCIvaW1nL3RydXN0ZWQtcGFydG5lcnMvdHAtbG9nby13YXJwZGV2LnBuZ1wiKTsgfVxuICAgICAgICAjcGFnZS10cnVzdGVkLXBhcnRuZXJzICNwYXJ0bmVyLW1hcCAuZG90cyBsaSAuYm94Lnl1eGkge1xuICAgICAgICAgIGJhY2tncm91bmQtaW1hZ2U6IHVybChcIi9pbWcvdHJ1c3RlZC1wYXJ0bmVycy90cC1sb2dvLXl1eGkucG5nXCIpOyB9XG4gICAgICAgICNwYWdlLXRydXN0ZWQtcGFydG5lcnMgI3BhcnRuZXItbWFwIC5kb3RzIGxpIC5ib3ggLmJ0biB7XG4gICAgICAgICAgZGlzcGxheTogYmxvY2s7IH1cbiAgICAgICAgI3BhZ2UtdHJ1c3RlZC1wYXJ0bmVycyAjcGFydG5lci1tYXAgLmRvdHMgbGkgLmJveC5sZWZ0IHtcbiAgICAgICAgICBsZWZ0OiAtMTkwcHg7XG4gICAgICAgICAgdHJhbnNmb3JtLW9yaWdpbjogcmlnaHQgdG9wOyB9XG4gICAgICAgICAgI3BhZ2UtdHJ1c3RlZC1wYXJ0bmVycyAjcGFydG5lci1tYXAgLmRvdHMgbGkgLmJveC5sZWZ0LmJvdHRvbSB7XG4gICAgICAgICAgICBsZWZ0OiAtMTkwcHg7XG4gICAgICAgICAgICB0b3A6IC0xNDBweDtcbiAgICAgICAgICAgIHRyYW5zZm9ybS1vcmlnaW46IHJpZ2h0IGJvdHRvbTsgfVxuICAgICAgICAjcGFnZS10cnVzdGVkLXBhcnRuZXJzICNwYXJ0bmVyLW1hcCAuZG90cyBsaSAuYm94LmJvdHRvbSB7XG4gICAgICAgICAgdG9wOiAtMTQwcHg7XG4gICAgICAgICAgdHJhbnNmb3JtLW9yaWdpbjogbGVmdCBib3R0b207IH1cbiAgICAgICNwYWdlLXRydXN0ZWQtcGFydG5lcnMgI3BhcnRuZXItbWFwIC5kb3RzIGxpOmhvdmVyIC5ib3gge1xuICAgICAgICBvcGFjaXR5OiAxO1xuICAgICAgICB0cmFuc2Zvcm06IHNjYWxlKDEpO1xuICAgICAgICB0cmFuc2l0aW9uLWRlbGF5OiAuMnMsIC4yczsgfVxuICAgIEBtZWRpYSAobWF4LXdpZHRoOiA5OTFweCkge1xuICAgICAgI3BhZ2UtdHJ1c3RlZC1wYXJ0bmVycyAjcGFydG5lci1tYXAgLmRvdHMge1xuICAgICAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiBjZW50ZXIgYm90dG9tOyB9XG4gICAgICAgICNwYWdlLXRydXN0ZWQtcGFydG5lcnMgI3BhcnRuZXItbWFwIC5kb3RzIGxpIHtcbiAgICAgICAgICBkaXNwbGF5OiBub25lOyB9IH1cblxuI3BhZ2UtdHJ1c3RlZC1wYXJ0bmVycyAucGFydG5lcnMgLmxpc3Qge1xuICBwYWRkaW5nLWJvdHRvbTogMzBweDsgfVxuICAjcGFnZS10cnVzdGVkLXBhcnRuZXJzIC5wYXJ0bmVycyAubGlzdCBsaSB7XG4gICAgcGFkZGluZy10b3A6IDEzMHB4O1xuICAgIHBhZGRpbmctYm90dG9tOiA3MHB4O1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICBtYXJnaW4tYm90dG9tOiAxMjBweDtcbiAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudCBuby1yZXBlYXQgdG9wIGNlbnRlcjtcbiAgICBiYWNrZ3JvdW5kLXNpemU6IDI1MHB4OyB9XG4gICAgI3BhZ2UtdHJ1c3RlZC1wYXJ0bmVycyAucGFydG5lcnMgLmxpc3QgbGkuYXJjdGljLWxlYWYge1xuICAgICAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFwiL2ltZy90cnVzdGVkLXBhcnRuZXJzL3RwLWxvZ28tYXJjdGljLWxlYWYucG5nXCIpOyB9XG4gICAgI3BhZ2UtdHJ1c3RlZC1wYXJ0bmVycyAucGFydG5lcnMgLmxpc3QgbGkuYmVuZHl3b3JrcyB7XG4gICAgICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXCIvaW1nL3RydXN0ZWQtcGFydG5lcnMvdHAtbG9nby1iZW5keXdvcmtzLnBuZ1wiKTsgfVxuICAgICNwYWdlLXRydXN0ZWQtcGFydG5lcnMgLnBhcnRuZXJzIC5saXN0IGxpLmJ5bmcge1xuICAgICAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFwiL2ltZy90cnVzdGVkLXBhcnRuZXJzL3RwLWxvZ28tYnluZy5wbmdcIik7IH1cbiAgICAjcGFnZS10cnVzdGVkLXBhcnRuZXJzIC5wYXJ0bmVycyAubGlzdCBsaS5kaWdpdGFsc2NpZW50aXN0cyB7XG4gICAgICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXCIvaW1nL3RydXN0ZWQtcGFydG5lcnMvdHAtbG9nby1kaWdpdGFsc2NpZW50aXN0cy5wbmdcIik7IH1cbiAgICAjcGFnZS10cnVzdGVkLXBhcnRuZXJzIC5wYXJ0bmVycyAubGlzdCBsaS5lbGl4ZWwge1xuICAgICAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFwiL2ltZy90cnVzdGVkLXBhcnRuZXJzL3RwLWxvZ28tZWxpeGVsLnBuZ1wiKTsgfVxuICAgICNwYWdlLXRydXN0ZWQtcGFydG5lcnMgLnBhcnRuZXJzIC5saXN0IGxpLmh5YmFwcHMge1xuICAgICAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFwiL2ltZy90cnVzdGVkLXBhcnRuZXJzL3RwLWxvZ28taHliYXBwcy5wbmc/MVwiKTsgfVxuICAgICNwYWdlLXRydXN0ZWQtcGFydG5lcnMgLnBhcnRuZXJzIC5saXN0IGxpLmh5YnJpZC1oZXJvZXMge1xuICAgICAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFwiL2ltZy90cnVzdGVkLXBhcnRuZXJzL3RwLWxvZ28taHlicmlkLWhlcm9lcy5wbmdcIik7IH1cbiAgICAjcGFnZS10cnVzdGVkLXBhcnRuZXJzIC5wYXJ0bmVycyAubGlzdCBsaS5pbmNlbnRybyB7XG4gICAgICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXCIvaW1nL3RydXN0ZWQtcGFydG5lcnMvdHAtbG9nby1pbmNlbnRyby5wbmdcIik7IH1cbiAgICAjcGFnZS10cnVzdGVkLXBhcnRuZXJzIC5wYXJ0bmVycyAubGlzdCBsaS5pbnZpcWEge1xuICAgICAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFwiL2ltZy90cnVzdGVkLXBhcnRuZXJzL3RwLWxvZ28taW52aXFhLnBuZ1wiKTsgfVxuICAgICNwYWdlLXRydXN0ZWQtcGFydG5lcnMgLnBhcnRuZXJzIC5saXN0IGxpLmpuZXNpcyB7XG4gICAgICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXCIvaW1nL3RydXN0ZWQtcGFydG5lcnMvdHAtbG9nby1qbmVzaXMucG5nXCIpOyB9XG4gICAgI3BhZ2UtdHJ1c3RlZC1wYXJ0bmVycyAucGFydG5lcnMgLmxpc3QgbGkua2VlbnNvZnQge1xuICAgICAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFwiL2ltZy90cnVzdGVkLXBhcnRuZXJzL3RwLWxvZ28ta2VlbnNvZnQucG5nXCIpOyB9XG4gICAgI3BhZ2UtdHJ1c3RlZC1wYXJ0bmVycyAucGFydG5lcnMgLmxpc3QgbGkua3VuZGVyIHtcbiAgICAgIGJhY2tncm91bmQtaW1hZ2U6IHVybChcIi9pbWcvdHJ1c3RlZC1wYXJ0bmVycy90cC1sb2dvLWt1bmRlci5wbmdcIik7IH1cbiAgICAjcGFnZS10cnVzdGVkLXBhcnRuZXJzIC5wYXJ0bmVycyAubGlzdCBsaS5tYWNhZGFtaWFuIHtcbiAgICAgIGJhY2tncm91bmQtaW1hZ2U6IHVybChcIi9pbWcvdHJ1c3RlZC1wYXJ0bmVycy90cC1sb2dvLW1hY2FkYW1pYW4ucG5nXCIpOyB9XG4gICAgI3BhZ2UtdHJ1c3RlZC1wYXJ0bmVycyAucGFydG5lcnMgLmxpc3QgbGkubW9kdXMtY3JlYXRlIHtcbiAgICAgIGJhY2tncm91bmQtaW1hZ2U6IHVybChcIi9pbWcvdHJ1c3RlZC1wYXJ0bmVycy90cC1sb2dvLW1vZHVzLnBuZ1wiKTsgfVxuICAgICNwYWdlLXRydXN0ZWQtcGFydG5lcnMgLnBhcnRuZXJzIC5saXN0IGxpLm9uZXRyZWUge1xuICAgICAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFwiL2ltZy90cnVzdGVkLXBhcnRuZXJzL3RwLWxvZ28tb25ldHJlZS5wbmdcIik7IH1cbiAgICAjcGFnZS10cnVzdGVkLXBhcnRuZXJzIC5wYXJ0bmVycyAubGlzdCBsaS5vcGVuZm9yZ2Uge1xuICAgICAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFwiL2ltZy90cnVzdGVkLXBhcnRuZXJzL3RwLWxvZ28tb3BlbmZvcmdlLnBuZ1wiKTsgfVxuICAgICNwYWdlLXRydXN0ZWQtcGFydG5lcnMgLnBhcnRuZXJzIC5saXN0IGxpLm9yZGluYSB7XG4gICAgICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXCIvaW1nL3RydXN0ZWQtcGFydG5lcnMvdHAtbG9nby1vcmRpbmEucG5nXCIpOyB9XG4gICAgI3BhZ2UtdHJ1c3RlZC1wYXJ0bmVycyAucGFydG5lcnMgLmxpc3QgbGkucG93ZXJnYXRlIHtcbiAgICAgIGJhY2tncm91bmQtaW1hZ2U6IHVybChcIi9pbWcvdHJ1c3RlZC1wYXJ0bmVycy90cC1sb2dvLXBvd2VyZ2F0ZS5wbmdcIik7IH1cbiAgICAjcGFnZS10cnVzdGVkLXBhcnRuZXJzIC5wYXJ0bmVycyAubGlzdCBsaS5yYW5nbGUge1xuICAgICAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFwiL2ltZy90cnVzdGVkLXBhcnRuZXJzL3RwLWxvZ28tcmFuZ2xlLnBuZ1wiKTsgfVxuICAgICNwYWdlLXRydXN0ZWQtcGFydG5lcnMgLnBhcnRuZXJzIC5saXN0IGxpLnJldnVuaXQge1xuICAgICAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFwiL2ltZy90cnVzdGVkLXBhcnRuZXJzL3RwLWxvZ28tcmV2dW5pdC5wbmdcIik7IH1cbiAgICAjcGFnZS10cnVzdGVkLXBhcnRuZXJzIC5wYXJ0bmVycyAubGlzdCBsaS5zY2FmZm9sZCB7XG4gICAgICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXCIvaW1nL3RydXN0ZWQtcGFydG5lcnMvdHAtbG9nby1zY2FmZm9sZC5wbmdcIik7IH1cbiAgICAjcGFnZS10cnVzdGVkLXBhcnRuZXJzIC5wYXJ0bmVycyAubGlzdCBsaS5zY29waWMge1xuICAgICAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFwiL2ltZy90cnVzdGVkLXBhcnRuZXJzL3RwLWxvZ28tc2NvcGljLnBuZ1wiKTsgfVxuICAgICNwYWdlLXRydXN0ZWQtcGFydG5lcnMgLnBhcnRuZXJzIC5saXN0IGxpLnNwYXRpYWwtdmlzaW9uIHtcbiAgICAgIGJhY2tncm91bmQtaW1hZ2U6IHVybChcIi9pbWcvdHJ1c3RlZC1wYXJ0bmVycy90cC1sb2dvLXNwYXRpYWwtdmlzaW9uLnBuZ1wiKTsgfVxuICAgICNwYWdlLXRydXN0ZWQtcGFydG5lcnMgLnBhcnRuZXJzIC5saXN0IGxpLndhcnBkZXYge1xuICAgICAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFwiL2ltZy90cnVzdGVkLXBhcnRuZXJzL3RwLWxvZ28td2FycGRldi5wbmdcIik7IH1cbiAgICAjcGFnZS10cnVzdGVkLXBhcnRuZXJzIC5wYXJ0bmVycyAubGlzdCBsaS55dXhpIHtcbiAgICAgIGJhY2tncm91bmQtaW1hZ2U6IHVybChcIi9pbWcvdHJ1c3RlZC1wYXJ0bmVycy90cC1sb2dvLXl1eGkucG5nXCIpOyB9XG4gICAgI3BhZ2UtdHJ1c3RlZC1wYXJ0bmVycyAucGFydG5lcnMgLmxpc3QgbGkgLmJ0biB7XG4gICAgICBsZWZ0OiAwO1xuICAgICAgcmlnaHQ6IDA7XG4gICAgICBib3R0b206IDA7XG4gICAgICB3aWR0aDogMTEzcHg7XG4gICAgICBtYXJnaW46IDAgYXV0bztcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgIGZvbnQtc2l6ZTogMTRweDsgfVxuICAgICNwYWdlLXRydXN0ZWQtcGFydG5lcnMgLnBhcnRuZXJzIC5saXN0IGxpIC5tb2RhbC1pbmZvIHtcbiAgICAgIGRpc3BsYXk6IG5vbmU7IH1cblxuI3BhZ2UtdHJ1c3RlZC1wYXJ0bmVycyAuYmFyLnRleHQtY2VudGVyIHtcbiAgYmFja2dyb3VuZDogIzYxOTlmNSBuby1yZXBlYXQgY2VudGVyIHRvcCB1cmwoXCIvaW1nL3RydXN0ZWQtcGFydG5lcnMvYXBwbHktcHJlZm9vdGVyLWltZy5qcGdcIik7XG4gIGJhY2tncm91bmQtc2l6ZTogY292ZXI7XG4gIHBhZGRpbmc6IDg1cHggMCA3NXB4OyB9XG4gICNwYWdlLXRydXN0ZWQtcGFydG5lcnMgLmJhci50ZXh0LWNlbnRlciBoMyB7XG4gICAgY29sb3I6IHdoaXRlOyB9XG4gICNwYWdlLXRydXN0ZWQtcGFydG5lcnMgLmJhci50ZXh0LWNlbnRlciAuYnRuIHtcbiAgICBtYXJnaW4tdG9wOiAxMHB4O1xuICAgIHBhZGRpbmc6IDE0cHggMjBweCAxM3B4O1xuICAgIGJvcmRlci1yYWRpdXM6IDNweDsgfVxuXG4jcGFnZS10cnVzdGVkLXBhcnRuZXJzICN0cC1sZWFybi1tb3JlIC5tb2RhbC1kaWFsb2cge1xuICB3aWR0aDogODQwcHg7XG4gIHBlcnNwZWN0aXZlOiAxMDAwOyB9XG4gICNwYWdlLXRydXN0ZWQtcGFydG5lcnMgI3RwLWxlYXJuLW1vcmUgLm1vZGFsLWRpYWxvZy5mbGlwIHtcbiAgICB0cmFuc2Zvcm06IHJvdGF0ZVkoMTgwZGVnKTsgfVxuICAgICNwYWdlLXRydXN0ZWQtcGFydG5lcnMgI3RwLWxlYXJuLW1vcmUgLm1vZGFsLWRpYWxvZy5mbGlwIC5tb2RhbC1ib2R5LmZyb250IHtcbiAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWigtMXB4KTtcbiAgICAgIG9wYWNpdHk6IDA7IH1cbiAgICAjcGFnZS10cnVzdGVkLXBhcnRuZXJzICN0cC1sZWFybi1tb3JlIC5tb2RhbC1kaWFsb2cuZmxpcCAubW9kYWwtYm9keS5iYWNrIHtcbiAgICAgIHRyYW5zZm9ybTogcm90YXRlWSgxODBkZWcpIHRyYW5zbGF0ZVooLTFweCk7XG4gICAgICBvcGFjaXR5OiAxOyB9XG4gICAgICBAbWVkaWEgKG1heC13aWR0aDogNzY3cHgpIHtcbiAgICAgICAgI3BhZ2UtdHJ1c3RlZC1wYXJ0bmVycyAjdHAtbGVhcm4tbW9yZSAubW9kYWwtZGlhbG9nLmZsaXAgLm1vZGFsLWJvZHkuYmFjayB7XG4gICAgICAgICAgdHJhbnNmb3JtOiByb3RhdGVZKDE4MGRlZykgdHJhbnNsYXRlWigxcHgpOyB9IH1cblxuI3BhZ2UtdHJ1c3RlZC1wYXJ0bmVycyAjdHAtbGVhcm4tbW9yZSAubW9kYWwtY29udGVudCB7XG4gIHRyYW5zaXRpb246IDAuNnM7XG4gIHRyYW5zZm9ybS1zdHlsZTogcHJlc2VydmUtM2Q7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTsgfVxuXG4jcGFnZS10cnVzdGVkLXBhcnRuZXJzICN0cC1sZWFybi1tb3JlIC5tb2RhbC1ib2R5IHtcbiAgcGFkZGluZzogNDZweCA1MHB4O1xuICBtaW4taGVpZ2h0OiA0NjBweDtcbiAgdHJhbnNpdGlvbjogMC4xcyBvcGFjaXR5O1xuICB0cmFuc2l0aW9uLWRlbGF5OiAuM3M7XG4gIGhlaWdodDogODQ1cHg7IH1cbiAgI3BhZ2UtdHJ1c3RlZC1wYXJ0bmVycyAjdHAtbGVhcm4tbW9yZSAubW9kYWwtYm9keS5mcm9udCB7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVaKDApOyB9XG4gICNwYWdlLXRydXN0ZWQtcGFydG5lcnMgI3RwLWxlYXJuLW1vcmUgLm1vZGFsLWJvZHkuYmFjayB7XG4gICAgdHJhbnNmb3JtOiByb3RhdGVZKDE4MGRlZykgdHJhbnNsYXRlWigxcHgpO1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICB0b3A6IDA7XG4gICAgbGVmdDogMDtcbiAgICByaWdodDogMDtcbiAgICBiYWNrZ3JvdW5kOiB3aGl0ZTtcbiAgICBvcGFjaXR5OiAwOyB9XG5cbiNwYWdlLXRydXN0ZWQtcGFydG5lcnMgI3RwLWxlYXJuLW1vcmUgc2VjdGlvbiB7XG4gIHdpZHRoOiA0NDVweDsgfVxuXG4jcGFnZS10cnVzdGVkLXBhcnRuZXJzICN0cC1sZWFybi1tb3JlIGFzaWRlIHtcbiAgZmxvYXQ6IHJpZ2h0O1xuICB3aWR0aDogMjQwcHg7IH1cblxuQG1lZGlhIChtYXgtd2lkdGg6IDc2N3B4KSB7XG4gICNwYWdlLXRydXN0ZWQtcGFydG5lcnMgI3RwLWxlYXJuLW1vcmUgc2VjdGlvbixcbiAgI3BhZ2UtdHJ1c3RlZC1wYXJ0bmVycyAjdHAtbGVhcm4tbW9yZSBhc2lkZSB7XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgZmxvYXQ6IG5vbmU7IH0gfVxuXG4jcGFnZS10cnVzdGVkLXBhcnRuZXJzICN0cC1sZWFybi1tb3JlIC5sb2dvIHtcbiAgd2lkdGg6IDE2N3B4O1xuICBoZWlnaHQ6IDEwMHB4O1xuICBwYWRkaW5nLWJvdHRvbTogNzBweDtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudCBuby1yZXBlYXQgbGVmdCB0b3A7XG4gIGJhY2tncm91bmQtc2l6ZTogMTY3cHg7IH1cbiAgI3BhZ2UtdHJ1c3RlZC1wYXJ0bmVycyAjdHAtbGVhcm4tbW9yZSAubG9nby5hcmN0aWMtbGVhZiB7XG4gICAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFwiL2ltZy90cnVzdGVkLXBhcnRuZXJzL3RwLWxvZ28tYXJjdGljLWxlYWYucG5nXCIpOyB9XG4gICNwYWdlLXRydXN0ZWQtcGFydG5lcnMgI3RwLWxlYXJuLW1vcmUgLmxvZ28uYmVuZHl3b3JrcyB7XG4gICAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFwiL2ltZy90cnVzdGVkLXBhcnRuZXJzL3RwLWxvZ28tYmVuZHl3b3Jrcy5wbmdcIik7IH1cbiAgI3BhZ2UtdHJ1c3RlZC1wYXJ0bmVycyAjdHAtbGVhcm4tbW9yZSAubG9nby5ieW5nIHtcbiAgICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXCIvaW1nL3RydXN0ZWQtcGFydG5lcnMvdHAtbG9nby1ieW5nLnBuZ1wiKTsgfVxuICAjcGFnZS10cnVzdGVkLXBhcnRuZXJzICN0cC1sZWFybi1tb3JlIC5sb2dvLmRpZ2l0YWxzY2llbnRpc3RzIHtcbiAgICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXCIvaW1nL3RydXN0ZWQtcGFydG5lcnMvdHAtbG9nby1kaWdpdGFsc2NpZW50aXN0cy5wbmdcIik7IH1cbiAgI3BhZ2UtdHJ1c3RlZC1wYXJ0bmVycyAjdHAtbGVhcm4tbW9yZSAubG9nby5lbGl4ZWwge1xuICAgIGJhY2tncm91bmQtaW1hZ2U6IHVybChcIi9pbWcvdHJ1c3RlZC1wYXJ0bmVycy90cC1sb2dvLWVsaXhlbC5wbmdcIik7IH1cbiAgI3BhZ2UtdHJ1c3RlZC1wYXJ0bmVycyAjdHAtbGVhcm4tbW9yZSAubG9nby5oeWJhcHBzIHtcbiAgICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXCIvaW1nL3RydXN0ZWQtcGFydG5lcnMvdHAtbG9nby1oeWJhcHBzLnBuZz8xXCIpOyB9XG4gICNwYWdlLXRydXN0ZWQtcGFydG5lcnMgI3RwLWxlYXJuLW1vcmUgLmxvZ28uaHlicmlkLWhlcm9lcyB7XG4gICAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFwiL2ltZy90cnVzdGVkLXBhcnRuZXJzL3RwLWxvZ28taHlicmlkLWhlcm9lcy5wbmdcIik7IH1cbiAgI3BhZ2UtdHJ1c3RlZC1wYXJ0bmVycyAjdHAtbGVhcm4tbW9yZSAubG9nby5pbmNlbnRybyB7XG4gICAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFwiL2ltZy90cnVzdGVkLXBhcnRuZXJzL3RwLWxvZ28taW5jZW50cm8ucG5nXCIpOyB9XG4gICNwYWdlLXRydXN0ZWQtcGFydG5lcnMgI3RwLWxlYXJuLW1vcmUgLmxvZ28uaW52aXFhIHtcbiAgICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXCIvaW1nL3RydXN0ZWQtcGFydG5lcnMvdHAtbG9nby1pbnZpcWEucG5nXCIpOyB9XG4gICNwYWdlLXRydXN0ZWQtcGFydG5lcnMgI3RwLWxlYXJuLW1vcmUgLmxvZ28uam5lc2lzIHtcbiAgICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXCIvaW1nL3RydXN0ZWQtcGFydG5lcnMvdHAtbG9nby1qbmVzaXMucG5nXCIpOyB9XG4gICNwYWdlLXRydXN0ZWQtcGFydG5lcnMgI3RwLWxlYXJuLW1vcmUgLmxvZ28ua2VlbnNvZnQge1xuICAgIGJhY2tncm91bmQtaW1hZ2U6IHVybChcIi9pbWcvdHJ1c3RlZC1wYXJ0bmVycy90cC1sb2dvLWtlZW5zb2Z0LnBuZ1wiKTsgfVxuICAjcGFnZS10cnVzdGVkLXBhcnRuZXJzICN0cC1sZWFybi1tb3JlIC5sb2dvLmt1bmRlciB7XG4gICAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFwiL2ltZy90cnVzdGVkLXBhcnRuZXJzL3RwLWxvZ28ta3VuZGVyLnBuZ1wiKTsgfVxuICAjcGFnZS10cnVzdGVkLXBhcnRuZXJzICN0cC1sZWFybi1tb3JlIC5sb2dvLm1hY2FkYW1pYW4ge1xuICAgIGJhY2tncm91bmQtaW1hZ2U6IHVybChcIi9pbWcvdHJ1c3RlZC1wYXJ0bmVycy90cC1sb2dvLW1hY2FkYW1pYW4ucG5nXCIpOyB9XG4gICNwYWdlLXRydXN0ZWQtcGFydG5lcnMgI3RwLWxlYXJuLW1vcmUgLmxvZ28ubW9kdXMtY3JlYXRlIHtcbiAgICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXCIvaW1nL3RydXN0ZWQtcGFydG5lcnMvdHAtbG9nby1tb2R1cy5wbmdcIik7IH1cbiAgI3BhZ2UtdHJ1c3RlZC1wYXJ0bmVycyAjdHAtbGVhcm4tbW9yZSAubG9nby5vbmV0cmVlIHtcbiAgICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXCIvaW1nL3RydXN0ZWQtcGFydG5lcnMvdHAtbG9nby1vbmV0cmVlLnBuZ1wiKTsgfVxuICAjcGFnZS10cnVzdGVkLXBhcnRuZXJzICN0cC1sZWFybi1tb3JlIC5sb2dvLm9wZW5mb3JnZSB7XG4gICAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFwiL2ltZy90cnVzdGVkLXBhcnRuZXJzL3RwLWxvZ28tb3BlbmZvcmdlLnBuZ1wiKTsgfVxuICAjcGFnZS10cnVzdGVkLXBhcnRuZXJzICN0cC1sZWFybi1tb3JlIC5sb2dvLm9yZGluYSB7XG4gICAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFwiL2ltZy90cnVzdGVkLXBhcnRuZXJzL3RwLWxvZ28tb3JkaW5hLnBuZ1wiKTsgfVxuICAjcGFnZS10cnVzdGVkLXBhcnRuZXJzICN0cC1sZWFybi1tb3JlIC5sb2dvLnBvd2VyZ2F0ZSB7XG4gICAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFwiL2ltZy90cnVzdGVkLXBhcnRuZXJzL3RwLWxvZ28tcG93ZXJnYXRlLnBuZ1wiKTsgfVxuICAjcGFnZS10cnVzdGVkLXBhcnRuZXJzICN0cC1sZWFybi1tb3JlIC5sb2dvLnJhbmdsZSB7XG4gICAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFwiL2ltZy90cnVzdGVkLXBhcnRuZXJzL3RwLWxvZ28tcmFuZ2xlLnBuZ1wiKTsgfVxuICAjcGFnZS10cnVzdGVkLXBhcnRuZXJzICN0cC1sZWFybi1tb3JlIC5sb2dvLnJldnVuaXQge1xuICAgIGJhY2tncm91bmQtaW1hZ2U6IHVybChcIi9pbWcvdHJ1c3RlZC1wYXJ0bmVycy90cC1sb2dvLXJldnVuaXQucG5nXCIpOyB9XG4gICNwYWdlLXRydXN0ZWQtcGFydG5lcnMgI3RwLWxlYXJuLW1vcmUgLmxvZ28uc2NhZmZvbGQge1xuICAgIGJhY2tncm91bmQtaW1hZ2U6IHVybChcIi9pbWcvdHJ1c3RlZC1wYXJ0bmVycy90cC1sb2dvLXNjYWZmb2xkLnBuZ1wiKTsgfVxuICAjcGFnZS10cnVzdGVkLXBhcnRuZXJzICN0cC1sZWFybi1tb3JlIC5sb2dvLnNjb3BpYyB7XG4gICAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFwiL2ltZy90cnVzdGVkLXBhcnRuZXJzL3RwLWxvZ28tc2NvcGljLnBuZ1wiKTsgfVxuICAjcGFnZS10cnVzdGVkLXBhcnRuZXJzICN0cC1sZWFybi1tb3JlIC5sb2dvLnNwYXRpYWwtdmlzaW9uIHtcbiAgICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXCIvaW1nL3RydXN0ZWQtcGFydG5lcnMvdHAtbG9nby1zcGF0aWFsLXZpc2lvbi5wbmdcIik7IH1cbiAgI3BhZ2UtdHJ1c3RlZC1wYXJ0bmVycyAjdHAtbGVhcm4tbW9yZSAubG9nby53YXJwZGV2IHtcbiAgICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXCIvaW1nL3RydXN0ZWQtcGFydG5lcnMvdHAtbG9nby13YXJwZGV2LnBuZ1wiKTsgfVxuICAjcGFnZS10cnVzdGVkLXBhcnRuZXJzICN0cC1sZWFybi1tb3JlIC5sb2dvLnl1eGkge1xuICAgIGJhY2tncm91bmQtaW1hZ2U6IHVybChcIi9pbWcvdHJ1c3RlZC1wYXJ0bmVycy90cC1sb2dvLXl1eGkucG5nXCIpOyB9XG5cbiNwYWdlLXRydXN0ZWQtcGFydG5lcnMgI3RwLWxlYXJuLW1vcmUgcCB7XG4gIGNvbG9yOiAjMjcyYjMxO1xuICBmb250LXdlaWdodDogNDAwOyB9XG5cbiNwYWdlLXRydXN0ZWQtcGFydG5lcnMgI3RwLWxlYXJuLW1vcmUgLnRhYmxpc3Qge1xuICBwYWRkaW5nOiAwOyB9XG4gICNwYWdlLXRydXN0ZWQtcGFydG5lcnMgI3RwLWxlYXJuLW1vcmUgLnRhYmxpc3QgbGkge1xuICAgIGxpc3Qtc3R5bGU6IG5vbmU7XG4gICAgZGlzcGxheTogaW5saW5lLWJsb2NrOyB9XG4gICAgI3BhZ2UtdHJ1c3RlZC1wYXJ0bmVycyAjdHAtbGVhcm4tbW9yZSAudGFibGlzdCBsaS5hY3RpdmUgYSxcbiAgICAjcGFnZS10cnVzdGVkLXBhcnRuZXJzICN0cC1sZWFybi1tb3JlIC50YWJsaXN0IGxpOmhvdmVyIGEge1xuICAgICAgY29sb3I6ICM0YThiZmM7IH1cbiAgICAjcGFnZS10cnVzdGVkLXBhcnRuZXJzICN0cC1sZWFybi1tb3JlIC50YWJsaXN0IGxpLmFjdGl2ZSBhOjpiZWZvcmUge1xuICAgICAgYm9yZGVyLWJvdHRvbS1jb2xvcjogIzRhOGJmYzsgfVxuICAjcGFnZS10cnVzdGVkLXBhcnRuZXJzICN0cC1sZWFybi1tb3JlIC50YWJsaXN0IGEge1xuICAgIGNvbG9yOiAjNjk3MTdlO1xuICAgIGZvbnQtc2l6ZTogMTRweDtcbiAgICBtYXJnaW4tcmlnaHQ6IDM1cHg7XG4gICAgZm9udC13ZWlnaHQ6IDUwMDtcbiAgICB0cmFuc2l0aW9uOiAuMnMgY29sb3I7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlOyB9XG4gICAgI3BhZ2UtdHJ1c3RlZC1wYXJ0bmVycyAjdHAtbGVhcm4tbW9yZSAudGFibGlzdCBhOjpiZWZvcmUge1xuICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgbGVmdDogMDtcbiAgICAgIHJpZ2h0OiAwO1xuICAgICAgYm90dG9tOiAtM3B4O1xuICAgICAgY29udGVudDogJyc7XG4gICAgICBib3JkZXItYm90dG9tOiAycHggc29saWQgdHJhbnNwYXJlbnQ7XG4gICAgICB0cmFuc2l0aW9uOiAuMnMgYm9yZGVyLWNvbG9yOyB9XG5cbiNwYWdlLXRydXN0ZWQtcGFydG5lcnMgI3RwLWxlYXJuLW1vcmUgLnRhYi1jb250ZW50IHtcbiAgcGFkZGluZy10b3A6IDEwcHg7XG4gIGZvbnQtc2l6ZTogMTVweDtcbiAgZGlzcGxheTogYmxvY2s7IH1cblxuI3BhZ2UtdHJ1c3RlZC1wYXJ0bmVycyAjdHAtbGVhcm4tbW9yZSBpZnJhbWUge1xuICBib3gtc2hhZG93OiBpbnNldCAwIDAgMTBweCAwIHJnYmEoMCwgMCwgMCwgMC4xKTsgfVxuXG4jcGFnZS10cnVzdGVkLXBhcnRuZXJzICN0cC1sZWFybi1tb3JlIC5idG4ge1xuICBsZXR0ZXItc3BhY2luZzogMDtcbiAgYm9yZGVyLXJhZGl1czogMnB4O1xuICB0ZXh0LXRyYW5zZm9ybTogbm9uZTtcbiAgd2lkdGg6IDEwMCU7XG4gIGZvbnQtd2VpZ2h0OiA2MDA7XG4gIGZvbnQtc2l6ZTogMTZweDtcbiAgbWFyZ2luLXRvcDogMzRweDtcbiAgcGFkZGluZzogMTVweCAxNXB4IDE4cHg7XG4gIHdoaXRlLXNwYWNlOiBub3JtYWw7IH1cblxuI3BhZ2UtdHJ1c3RlZC1wYXJ0bmVycyAjdHAtbGVhcm4tbW9yZSAuYmFjayAuYnRuIHtcbiAgZm9udC1zaXplOiAyMXB4O1xuICB0b3A6IC0xcHg7XG4gIGxlZnQ6IC0xcHg7XG4gIGhlaWdodDogNTZweDsgfVxuICAjcGFnZS10cnVzdGVkLXBhcnRuZXJzICN0cC1sZWFybi1tb3JlIC5iYWNrIC5idG46OmFmdGVyIHtcbiAgICBjb250ZW50OiAnJzsgfVxuXG4jcGFnZS10cnVzdGVkLXBhcnRuZXJzICN0cC1sZWFybi1tb3JlIGFkZHJlc3Mge1xuICBjb2xvcjogIzgxODg5MztcbiAgZm9udC1zaXplOiAxMnB4O1xuICBwYWRkaW5nLXRvcDogMzVweDsgfVxuICAjcGFnZS10cnVzdGVkLXBhcnRuZXJzICN0cC1sZWFybi1tb3JlIGFkZHJlc3Mgc3Ryb25nIHtcbiAgICBjb2xvcjogYmxhY2s7XG4gICAgZm9udC1zaXplOiAxN3B4O1xuICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7IH1cblxuI3BhZ2UtdHJ1c3RlZC1wYXJ0bmVycyAjdHAtbGVhcm4tbW9yZSAuZmVhdHVyZXMge1xuICBwYWRkaW5nOiAwOyB9XG4gICNwYWdlLXRydXN0ZWQtcGFydG5lcnMgI3RwLWxlYXJuLW1vcmUgLmZlYXR1cmVzIGxpIHtcbiAgICBmb250LXNpemU6IDEycHg7XG4gICAgcGFkZGluZy1sZWZ0OiAyMHB4O1xuICAgIGxpc3Qtc3R5bGU6IG5vbmU7XG4gICAgbWFyZ2luOiA3cHggMDtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7IH1cbiAgICAjcGFnZS10cnVzdGVkLXBhcnRuZXJzICN0cC1sZWFybi1tb3JlIC5mZWF0dXJlcyBsaTo6YmVmb3JlIHtcbiAgICAgIGZvbnQtZmFtaWx5OiAnSW9uaWNvbnMnO1xuICAgICAgY29udGVudDogJ1xcZjJiYyc7XG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICBsZWZ0OiAwO1xuICAgICAgZm9udC1zaXplOiAxMXB4OyB9XG5cbiNwYWdlLXRydXN0ZWQtcGFydG5lcnMgI3RwLWxlYXJuLW1vcmUgaGdyb3VwIHtcbiAgcGFkZGluZy1ib3R0b206IDY0cHg7IH1cblxuQG1lZGlhIChtYXgtd2lkdGg6IDc2N3B4KSB7XG4gICNwYWdlLXRydXN0ZWQtcGFydG5lcnMgI3RwLWxlYXJuLW1vcmUgLm1vZGFsLWRpYWxvZyB7XG4gICAgcG9zaXRpb246IGZpeGVkO1xuICAgIGxlZnQ6IDA7XG4gICAgcmlnaHQ6IDA7XG4gICAgd2lkdGg6IGF1dG87XG4gICAgdG9wOiAwO1xuICAgIGJvdHRvbTogMDtcbiAgICBvdmVyZmxvdzogc2Nyb2xsOyB9XG4gICNwYWdlLXRydXN0ZWQtcGFydG5lcnMgI3RwLWxlYXJuLW1vcmUgLm1vZGFsLWJvZHkge1xuICAgIGhlaWdodDogYXV0bztcbiAgICBwYWRkaW5nLWJvdHRvbTogNTAwcHg7IH1cbiAgICAjcGFnZS10cnVzdGVkLXBhcnRuZXJzICN0cC1sZWFybi1tb3JlIC5tb2RhbC1ib2R5IGFzaWRlIHtcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgIGJvdHRvbTogMzBweDtcbiAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsgfVxuICAjcGFnZS10cnVzdGVkLXBhcnRuZXJzICN0cC1sZWFybi1tb3JlIC5jbG9zZSB7XG4gICAgdG9wOiA4cHg7XG4gICAgcmlnaHQ6IDhweDsgfVxuICAjcGFnZS10cnVzdGVkLXBhcnRuZXJzICN0cC1sZWFybi1tb3JlIC5nby1iYWNrIHtcbiAgICB0b3A6IDhweDtcbiAgICBsZWZ0OiA4cHg7IH1cbiAgI3BhZ2UtdHJ1c3RlZC1wYXJ0bmVycyAjdHAtbGVhcm4tbW9yZSBmb3JtIGlucHV0LFxuICAjcGFnZS10cnVzdGVkLXBhcnRuZXJzICN0cC1sZWFybi1tb3JlIGZvcm0gLnNlbGVjdC13cmFwcGVyIHtcbiAgICB3aWR0aDogMTAwJTsgfVxuICAjcGFnZS10cnVzdGVkLXBhcnRuZXJzICN0cC1sZWFybi1tb3JlIC5mcm9udCAuYnRuIHtcbiAgICB3aWR0aDogY2FsYygxMDAlIC0gMTAwcHgpOyB9IH1cbiJdfQ== */\n"
  },
  {
    "path": "content/css/pages/values.css",
    "content": "#page-values .navbar + .banner {\n  background: #181830 no-repeat center top;\n  background-image: url(\"/img/values/values-cta-bg.jpg\"), linear-gradient(to right, #f4f7fb 0%, #d9dfe8 100%);\n  background-size: cover, 100%;\n  height: 360px; }\n  #page-values .navbar + .banner h1 {\n    color: #4C555A; }\n  #page-values .navbar + .banner p {\n    color: #576070;\n    font-weight: 400; }\n\n#page-values dl {\n  max-width: 575px;\n  margin: 160px auto 0;\n  padding: 0 40px; }\n  #page-values dl dt {\n    font-size: 24px;\n    font-weight: 700;\n    color: #24282e;\n    position: relative;\n    margin-bottom: 10px;\n    font-family: \"Eina\", \"Helvetica Neue\", Helvetica, sans-serif; }\n    #page-values dl dt span {\n      font-weight: 700;\n      color: #d2d6db;\n      position: absolute;\n      left: -30px;\n      top: 0px; }\n  #page-values dl dd {\n    color: #5d636c;\n    font-size: 18px;\n    line-height: 28px;\n    font-weight: 400;\n    margin-bottom: 90px; }\n\n#page-values .hero {\n  background: no-repeat center top url(\"/img/values/meet-team.jpg\");\n  background-size: cover;\n  height: 260px;\n  padding-top: 87px; }\n  #page-values .hero h3 {\n    color: white; }\n  #page-values .hero .btn.white {\n    text-transform: none;\n    letter-spacing: .5px;\n    font-weight: 600;\n    font-size: 14px;\n    border-radius: 3px;\n    padding: 16px 15px 14px;\n    margin-top: 15px; }\n\n/*# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInZhbHVlcy5jc3MiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7RUFDRSx5Q0FBeUM7RUFDekMsNEdBQTRHO0VBQzVHLDZCQUE2QjtFQUM3QixjQUFjLEVBQUU7RUFDaEI7SUFDRSxlQUFlLEVBQUU7RUFDbkI7SUFDRSxlQUFlO0lBQ2YsaUJBQWlCLEVBQUU7O0FBRXZCO0VBQ0UsaUJBQWlCO0VBQ2pCLHFCQUFxQjtFQUNyQixnQkFBZ0IsRUFBRTtFQUNsQjtJQUNFLGdCQUFnQjtJQUNoQixpQkFBaUI7SUFDakIsZUFBZTtJQUNmLG1CQUFtQjtJQUNuQixvQkFBb0I7SUFDcEIsNkRBQTZELEVBQUU7SUFDL0Q7TUFDRSxpQkFBaUI7TUFDakIsZUFBZTtNQUNmLG1CQUFtQjtNQUNuQixZQUFZO01BQ1osU0FBUyxFQUFFO0VBQ2Y7SUFDRSxlQUFlO0lBQ2YsZ0JBQWdCO0lBQ2hCLGtCQUFrQjtJQUNsQixpQkFBaUI7SUFDakIsb0JBQW9CLEVBQUU7O0FBRTFCO0VBQ0Usa0VBQWtFO0VBQ2xFLHVCQUF1QjtFQUN2QixjQUFjO0VBQ2Qsa0JBQWtCLEVBQUU7RUFDcEI7SUFDRSxhQUFhLEVBQUU7RUFDakI7SUFDRSxxQkFBcUI7SUFDckIscUJBQXFCO0lBQ3JCLGlCQUFpQjtJQUNqQixnQkFBZ0I7SUFDaEIsbUJBQW1CO0lBQ25CLHdCQUF3QjtJQUN4QixpQkFBaUIsRUFBRSIsImZpbGUiOiJwYWdlcy92YWx1ZXMuY3NzIiwic291cmNlc0NvbnRlbnQiOlsiI3BhZ2UtdmFsdWVzIC5uYXZiYXIgKyAuYmFubmVyIHtcbiAgYmFja2dyb3VuZDogIzE4MTgzMCBuby1yZXBlYXQgY2VudGVyIHRvcDtcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFwiL2ltZy92YWx1ZXMvdmFsdWVzLWN0YS1iZy5qcGdcIiksIGxpbmVhci1ncmFkaWVudCh0byByaWdodCwgI2Y0ZjdmYiAwJSwgI2Q5ZGZlOCAxMDAlKTtcbiAgYmFja2dyb3VuZC1zaXplOiBjb3ZlciwgMTAwJTtcbiAgaGVpZ2h0OiAzNjBweDsgfVxuICAjcGFnZS12YWx1ZXMgLm5hdmJhciArIC5iYW5uZXIgaDEge1xuICAgIGNvbG9yOiAjNEM1NTVBOyB9XG4gICNwYWdlLXZhbHVlcyAubmF2YmFyICsgLmJhbm5lciBwIHtcbiAgICBjb2xvcjogIzU3NjA3MDtcbiAgICBmb250LXdlaWdodDogNDAwOyB9XG5cbiNwYWdlLXZhbHVlcyBkbCB7XG4gIG1heC13aWR0aDogNTc1cHg7XG4gIG1hcmdpbjogMTYwcHggYXV0byAwO1xuICBwYWRkaW5nOiAwIDQwcHg7IH1cbiAgI3BhZ2UtdmFsdWVzIGRsIGR0IHtcbiAgICBmb250LXNpemU6IDI0cHg7XG4gICAgZm9udC13ZWlnaHQ6IDcwMDtcbiAgICBjb2xvcjogIzI0MjgyZTtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgbWFyZ2luLWJvdHRvbTogMTBweDtcbiAgICBmb250LWZhbWlseTogXCJFaW5hXCIsIFwiSGVsdmV0aWNhIE5ldWVcIiwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmOyB9XG4gICAgI3BhZ2UtdmFsdWVzIGRsIGR0IHNwYW4ge1xuICAgICAgZm9udC13ZWlnaHQ6IDcwMDtcbiAgICAgIGNvbG9yOiAjZDJkNmRiO1xuICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgbGVmdDogLTMwcHg7XG4gICAgICB0b3A6IDBweDsgfVxuICAjcGFnZS12YWx1ZXMgZGwgZGQge1xuICAgIGNvbG9yOiAjNWQ2MzZjO1xuICAgIGZvbnQtc2l6ZTogMThweDtcbiAgICBsaW5lLWhlaWdodDogMjhweDtcbiAgICBmb250LXdlaWdodDogNDAwO1xuICAgIG1hcmdpbi1ib3R0b206IDkwcHg7IH1cblxuI3BhZ2UtdmFsdWVzIC5oZXJvIHtcbiAgYmFja2dyb3VuZDogbm8tcmVwZWF0IGNlbnRlciB0b3AgdXJsKFwiL2ltZy92YWx1ZXMvbWVldC10ZWFtLmpwZ1wiKTtcbiAgYmFja2dyb3VuZC1zaXplOiBjb3ZlcjtcbiAgaGVpZ2h0OiAyNjBweDtcbiAgcGFkZGluZy10b3A6IDg3cHg7IH1cbiAgI3BhZ2UtdmFsdWVzIC5oZXJvIGgzIHtcbiAgICBjb2xvcjogd2hpdGU7IH1cbiAgI3BhZ2UtdmFsdWVzIC5oZXJvIC5idG4ud2hpdGUge1xuICAgIHRleHQtdHJhbnNmb3JtOiBub25lO1xuICAgIGxldHRlci1zcGFjaW5nOiAuNXB4O1xuICAgIGZvbnQtd2VpZ2h0OiA2MDA7XG4gICAgZm9udC1zaXplOiAxNHB4O1xuICAgIGJvcmRlci1yYWRpdXM6IDNweDtcbiAgICBwYWRkaW5nOiAxNnB4IDE1cHggMTRweDtcbiAgICBtYXJnaW4tdG9wOiAxNXB4OyB9XG4iXX0= */\n"
  },
  {
    "path": "content/css/pages/webinars.css",
    "content": "#page-webinars h1,\n#page-webinars h2,\n#page-webinars h3,\n#page-webinars h4,\n#page-webinars .btn {\n  font-family: \"Eina\", \"Helvetica Neue\", Helvetica, sans-serif; }\n\n#page-webinars .cta {\n  background-color: #12223a;\n  background-image: url(\"/img/resource-center/webinars/bg-header.jpg\"), linear-gradient(120deg, #4864ec, #84aff4);\n  background-size: cover, 100%;\n  background-position: 50% 50%;\n  margin-top: -138px;\n  padding-top: 138px; }\n  #page-webinars .cta hgroup {\n    padding-top: 76px;\n    max-width: 100%;\n    padding-bottom: 159px; }\n  #page-webinars .cta strong {\n    text-transform: uppercase;\n    font-size: 13px;\n    letter-spacing: .12em; }\n  #page-webinars .cta h1 {\n    font-size: 72px;\n    font-size: 56px;\n    margin-top: 22px; }\n  #page-webinars .cta p {\n    color: #d9e9fe;\n    margin-top: 19px;\n    font-size: 16px; }\n  #page-webinars .cta .btn {\n    text-transform: uppercase;\n    margin-top: 41px;\n    padding: 15px 25px 16px;\n    font-size: 15px;\n    letter-spacing: .1em; }\n\n#page-webinars .card {\n  background-color: #fff;\n  border-radius: 6px;\n  box-shadow: 0 8px 32px rgba(0, 0, 0, 0.1), 0 2px 8px rgba(0, 0, 0, 0.1);\n  border-radius: 14px;\n  margin-top: -32px;\n  display: -ms-flexbox;\n  display: flex;\n  margin-bottom: 128px; }\n  @media (max-width: 991px) {\n    #page-webinars .card {\n      -ms-flex-direction: column;\n          flex-direction: column; } }\n\n#page-webinars article {\n  -ms-flex-positive: 1;\n      flex-grow: 1;\n  padding: 42px 53px 66px;\n  color: #596a89; }\n  @media (max-width: 400px) {\n    #page-webinars article {\n      padding-right: 24px;\n      padding-left: 24px; } }\n  #page-webinars article h2 {\n    font-weight: 400;\n    font-size: 32px;\n    color: #5e79ff; }\n  #page-webinars article h4 {\n    font-weight: 400;\n    font-size: 22px;\n    letter-spacing: -.018em;\n    line-height: 1.46em;\n    color: #596a89; }\n    #page-webinars article h4 + h3 {\n      margin-top: 42px; }\n  #page-webinars article h3 {\n    font-weight: 600;\n    font-size: 20px;\n    margin-top: 42px;\n    margin-bottom: 15px; }\n  #page-webinars article strong {\n    font-weight: 600; }\n  #page-webinars article p {\n    font-size: 16px;\n    line-height: 1.8em;\n    letter-spacing: -.008em; }\n  #page-webinars article ul {\n    margin-top: 20px;\n    padding-left: 0;\n    padding-bottom: 6px; }\n  #page-webinars article li {\n    line-height: 1.8em;\n    font-size: 16px;\n    list-style: none;\n    margin-left: 4px;\n    letter-spacing: -.004em;\n    position: relative;\n    margin-left: 0;\n    padding-left: 44px;\n    margin-bottom: 20px; }\n    #page-webinars article li::before {\n      background: url(\"/img/resource-center/webinars/ico-check.png\") no-repeat 0 0;\n      background-size: 24px;\n      width: 24px;\n      height: 24px;\n      content: '';\n      position: absolute;\n      left: 0;\n      top: 0; }\n  #page-webinars article .btn {\n    margin-top: 30px;\n    text-transform: uppercase;\n    font-size: 15px;\n    padding: 17px 24px 14px;\n    letter-spacing: .1em; }\n\n#page-webinars aside {\n  -ms-flex: 0 0 340px;\n      flex: 0 0 340px;\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-direction: column;\n      flex-direction: column;\n  padding: 54px 32px 32px;\n  background: #f6f9fc; }\n  #page-webinars aside h4 {\n    text-transform: uppercase;\n    font-size: 14px;\n    letter-spacing: .1em; }\n  #page-webinars aside .host {\n    margin-top: 16px;\n    margin-bottom: 24px; }\n    #page-webinars aside .host img {\n      border-radius: 50%;\n      float: left;\n      display: block; }\n    #page-webinars aside .host strong {\n      display: block;\n      margin-left: 63px;\n      margin-top: 6px;\n      font-size: 16px;\n      font-weight: 500;\n      color: #151d2b;\n      font-family: \"Eina\", \"Helvetica Neue\", Helvetica, sans-serif; }\n    #page-webinars aside .host span {\n      margin-left: 63px;\n      display: block;\n      line-height: 1.2em;\n      color: #6b82ac; }\n  #page-webinars aside .subscribe-cta {\n    margin-top: auto;\n    background-color: #fff;\n    border-radius: 6px;\n    box-shadow: 0 8px 32px rgba(0, 0, 0, 0.1), 0 2px 8px rgba(0, 0, 0, 0.1);\n    padding: 8px 28px 28px; }\n    #page-webinars aside .subscribe-cta h3 {\n      font-weight: 600;\n      font-size: 18px;\n      margin-bottom: 1px;\n      letter-spacing: -.01em; }\n    #page-webinars aside .subscribe-cta p {\n      margin-bottom: 16px;\n      line-height: 1.8em;\n      letter-spacing: -.008em; }\n    #page-webinars aside .subscribe-cta .btn {\n      width: 100%;\n      font-size: 16px;\n      background: #d6eeff;\n      color: #3880ff;\n      padding: 15px 10px 11px; }\n  #page-webinars aside ionic-newsletter-signup form {\n    max-width: 100%; }\n    #page-webinars aside ionic-newsletter-signup form input {\n      min-width: 0; }\n  @media (max-width: 991px) {\n    #page-webinars aside {\n      -ms-flex: 0 0 100%;\n          flex: 0 0 100%; } }\n\n#page-webinars .resource-list {\n  margin-bottom: 64px; }\n  #page-webinars .resource-list__header h4 {\n    font-size: 24px;\n    margin-bottom: 1px; }\n\n#page-webinars .scrollTopLink {\n  float: right;\n  font-size: 15px;\n  font-weight: 600; }\n\n#page-webinars .modal-body {\n  padding: 32px 48px; }\n  @media (max-width: 767px) {\n    #page-webinars .modal-body {\n      padding: 16px; } }\n  #page-webinars .modal-body form {\n    max-width: 100%; }\n\n/*# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYmluYXJzLmNzcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7RUFLRSw2REFBNkQsRUFBRTs7QUFFakU7RUFDRSwwQkFBMEI7RUFDMUIsZ0hBQWdIO0VBQ2hILDZCQUE2QjtFQUM3Qiw2QkFBNkI7RUFDN0IsbUJBQW1CO0VBQ25CLG1CQUFtQixFQUFFO0VBQ3JCO0lBQ0Usa0JBQWtCO0lBQ2xCLGdCQUFnQjtJQUNoQixzQkFBc0IsRUFBRTtFQUMxQjtJQUNFLDBCQUEwQjtJQUMxQixnQkFBZ0I7SUFDaEIsc0JBQXNCLEVBQUU7RUFDMUI7SUFDRSxnQkFBZ0I7SUFDaEIsZ0JBQWdCO0lBQ2hCLGlCQUFpQixFQUFFO0VBQ3JCO0lBQ0UsZUFBZTtJQUNmLGlCQUFpQjtJQUNqQixnQkFBZ0IsRUFBRTtFQUNwQjtJQUNFLDBCQUEwQjtJQUMxQixpQkFBaUI7SUFDakIsd0JBQXdCO0lBQ3hCLGdCQUFnQjtJQUNoQixxQkFBcUIsRUFBRTs7QUFFM0I7RUFDRSx1QkFBdUI7RUFDdkIsbUJBQW1CO0VBQ25CLHdFQUF3RTtFQUN4RSxvQkFBb0I7RUFDcEIsa0JBQWtCO0VBQ2xCLHFCQUFjO0VBQWQsY0FBYztFQUNkLHFCQUFxQixFQUFFO0VBQ3ZCO0lBQ0U7TUFDRSwyQkFBdUI7VUFBdkIsdUJBQXVCLEVBQUUsRUFBRTs7QUFFakM7RUFDRSxxQkFBYTtNQUFiLGFBQWE7RUFDYix3QkFBd0I7RUFDeEIsZUFBZSxFQUFFO0VBQ2pCO0lBQ0U7TUFDRSxvQkFBb0I7TUFDcEIsbUJBQW1CLEVBQUUsRUFBRTtFQUMzQjtJQUNFLGlCQUFpQjtJQUNqQixnQkFBZ0I7SUFDaEIsZUFBZSxFQUFFO0VBQ25CO0lBQ0UsaUJBQWlCO0lBQ2pCLGdCQUFnQjtJQUNoQix3QkFBd0I7SUFDeEIsb0JBQW9CO0lBQ3BCLGVBQWUsRUFBRTtJQUNqQjtNQUNFLGlCQUFpQixFQUFFO0VBQ3ZCO0lBQ0UsaUJBQWlCO0lBQ2pCLGdCQUFnQjtJQUNoQixpQkFBaUI7SUFDakIsb0JBQW9CLEVBQUU7RUFDeEI7SUFDRSxpQkFBaUIsRUFBRTtFQUNyQjtJQUNFLGdCQUFnQjtJQUNoQixtQkFBbUI7SUFDbkIsd0JBQXdCLEVBQUU7RUFDNUI7SUFDRSxpQkFBaUI7SUFDakIsZ0JBQWdCO0lBQ2hCLG9CQUFvQixFQUFFO0VBQ3hCO0lBQ0UsbUJBQW1CO0lBQ25CLGdCQUFnQjtJQUNoQixpQkFBaUI7SUFDakIsaUJBQWlCO0lBQ2pCLHdCQUF3QjtJQUN4QixtQkFBbUI7SUFDbkIsZUFBZTtJQUNmLG1CQUFtQjtJQUNuQixvQkFBb0IsRUFBRTtJQUN0QjtNQUNFLDZFQUE2RTtNQUM3RSxzQkFBc0I7TUFDdEIsWUFBWTtNQUNaLGFBQWE7TUFDYixZQUFZO01BQ1osbUJBQW1CO01BQ25CLFFBQVE7TUFDUixPQUFPLEVBQUU7RUFDYjtJQUNFLGlCQUFpQjtJQUNqQiwwQkFBMEI7SUFDMUIsZ0JBQWdCO0lBQ2hCLHdCQUF3QjtJQUN4QixxQkFBcUIsRUFBRTs7QUFFM0I7RUFDRSxvQkFBZ0I7TUFBaEIsZ0JBQWdCO0VBQ2hCLHFCQUFjO0VBQWQsY0FBYztFQUNkLDJCQUF1QjtNQUF2Qix1QkFBdUI7RUFDdkIsd0JBQXdCO0VBQ3hCLG9CQUFvQixFQUFFO0VBQ3RCO0lBQ0UsMEJBQTBCO0lBQzFCLGdCQUFnQjtJQUNoQixxQkFBcUIsRUFBRTtFQUN6QjtJQUNFLGlCQUFpQjtJQUNqQixvQkFBb0IsRUFBRTtJQUN0QjtNQUNFLG1CQUFtQjtNQUNuQixZQUFZO01BQ1osZUFBZSxFQUFFO0lBQ25CO01BQ0UsZUFBZTtNQUNmLGtCQUFrQjtNQUNsQixnQkFBZ0I7TUFDaEIsZ0JBQWdCO01BQ2hCLGlCQUFpQjtNQUNqQixlQUFlO01BQ2YsNkRBQTZELEVBQUU7SUFDakU7TUFDRSxrQkFBa0I7TUFDbEIsZUFBZTtNQUNmLG1CQUFtQjtNQUNuQixlQUFlLEVBQUU7RUFDckI7SUFDRSxpQkFBaUI7SUFDakIsdUJBQXVCO0lBQ3ZCLG1CQUFtQjtJQUNuQix3RUFBd0U7SUFDeEUsdUJBQXVCLEVBQUU7SUFDekI7TUFDRSxpQkFBaUI7TUFDakIsZ0JBQWdCO01BQ2hCLG1CQUFtQjtNQUNuQix1QkFBdUIsRUFBRTtJQUMzQjtNQUNFLG9CQUFvQjtNQUNwQixtQkFBbUI7TUFDbkIsd0JBQXdCLEVBQUU7SUFDNUI7TUFDRSxZQUFZO01BQ1osZ0JBQWdCO01BQ2hCLG9CQUFvQjtNQUNwQixlQUFlO01BQ2Ysd0JBQXdCLEVBQUU7RUFDOUI7SUFDRSxnQkFBZ0IsRUFBRTtJQUNsQjtNQUNFLGFBQWEsRUFBRTtFQUNuQjtJQUNFO01BQ0UsbUJBQWU7VUFBZixlQUFlLEVBQUUsRUFBRTs7QUFFekI7RUFDRSxvQkFBb0IsRUFBRTtFQUN0QjtJQUNFLGdCQUFnQjtJQUNoQixtQkFBbUIsRUFBRTs7QUFFekI7RUFDRSxhQUFhO0VBQ2IsZ0JBQWdCO0VBQ2hCLGlCQUFpQixFQUFFOztBQUVyQjtFQUNFLG1CQUFtQixFQUFFO0VBQ3JCO0lBQ0U7TUFDRSxjQUFjLEVBQUUsRUFBRTtFQUN0QjtJQUNFLGdCQUFnQixFQUFFIiwiZmlsZSI6InBhZ2VzL3dlYmluYXJzLmNzcyIsInNvdXJjZXNDb250ZW50IjpbIiNwYWdlLXdlYmluYXJzIGgxLFxuI3BhZ2Utd2ViaW5hcnMgaDIsXG4jcGFnZS13ZWJpbmFycyBoMyxcbiNwYWdlLXdlYmluYXJzIGg0LFxuI3BhZ2Utd2ViaW5hcnMgLmJ0biB7XG4gIGZvbnQtZmFtaWx5OiBcIkVpbmFcIiwgXCJIZWx2ZXRpY2EgTmV1ZVwiLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7IH1cblxuI3BhZ2Utd2ViaW5hcnMgLmN0YSB7XG4gIGJhY2tncm91bmQtY29sb3I6ICMxMjIyM2E7XG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcIi9pbWcvcmVzb3VyY2UtY2VudGVyL3dlYmluYXJzL2JnLWhlYWRlci5qcGdcIiksIGxpbmVhci1ncmFkaWVudCgxMjBkZWcsICM0ODY0ZWMsICM4NGFmZjQpO1xuICBiYWNrZ3JvdW5kLXNpemU6IGNvdmVyLCAxMDAlO1xuICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiA1MCUgNTAlO1xuICBtYXJnaW4tdG9wOiAtMTM4cHg7XG4gIHBhZGRpbmctdG9wOiAxMzhweDsgfVxuICAjcGFnZS13ZWJpbmFycyAuY3RhIGhncm91cCB7XG4gICAgcGFkZGluZy10b3A6IDc2cHg7XG4gICAgbWF4LXdpZHRoOiAxMDAlO1xuICAgIHBhZGRpbmctYm90dG9tOiAxNTlweDsgfVxuICAjcGFnZS13ZWJpbmFycyAuY3RhIHN0cm9uZyB7XG4gICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcbiAgICBmb250LXNpemU6IDEzcHg7XG4gICAgbGV0dGVyLXNwYWNpbmc6IC4xMmVtOyB9XG4gICNwYWdlLXdlYmluYXJzIC5jdGEgaDEge1xuICAgIGZvbnQtc2l6ZTogNzJweDtcbiAgICBmb250LXNpemU6IDU2cHg7XG4gICAgbWFyZ2luLXRvcDogMjJweDsgfVxuICAjcGFnZS13ZWJpbmFycyAuY3RhIHAge1xuICAgIGNvbG9yOiAjZDllOWZlO1xuICAgIG1hcmdpbi10b3A6IDE5cHg7XG4gICAgZm9udC1zaXplOiAxNnB4OyB9XG4gICNwYWdlLXdlYmluYXJzIC5jdGEgLmJ0biB7XG4gICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcbiAgICBtYXJnaW4tdG9wOiA0MXB4O1xuICAgIHBhZGRpbmc6IDE1cHggMjVweCAxNnB4O1xuICAgIGZvbnQtc2l6ZTogMTVweDtcbiAgICBsZXR0ZXItc3BhY2luZzogLjFlbTsgfVxuXG4jcGFnZS13ZWJpbmFycyAuY2FyZCB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmY7XG4gIGJvcmRlci1yYWRpdXM6IDZweDtcbiAgYm94LXNoYWRvdzogMCA4cHggMzJweCByZ2JhKDAsIDAsIDAsIDAuMSksIDAgMnB4IDhweCByZ2JhKDAsIDAsIDAsIDAuMSk7XG4gIGJvcmRlci1yYWRpdXM6IDE0cHg7XG4gIG1hcmdpbi10b3A6IC0zMnB4O1xuICBkaXNwbGF5OiBmbGV4O1xuICBtYXJnaW4tYm90dG9tOiAxMjhweDsgfVxuICBAbWVkaWEgKG1heC13aWR0aDogOTkxcHgpIHtcbiAgICAjcGFnZS13ZWJpbmFycyAuY2FyZCB7XG4gICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOyB9IH1cblxuI3BhZ2Utd2ViaW5hcnMgYXJ0aWNsZSB7XG4gIGZsZXgtZ3JvdzogMTtcbiAgcGFkZGluZzogNDJweCA1M3B4IDY2cHg7XG4gIGNvbG9yOiAjNTk2YTg5OyB9XG4gIEBtZWRpYSAobWF4LXdpZHRoOiA0MDBweCkge1xuICAgICNwYWdlLXdlYmluYXJzIGFydGljbGUge1xuICAgICAgcGFkZGluZy1yaWdodDogMjRweDtcbiAgICAgIHBhZGRpbmctbGVmdDogMjRweDsgfSB9XG4gICNwYWdlLXdlYmluYXJzIGFydGljbGUgaDIge1xuICAgIGZvbnQtd2VpZ2h0OiA0MDA7XG4gICAgZm9udC1zaXplOiAzMnB4O1xuICAgIGNvbG9yOiAjNWU3OWZmOyB9XG4gICNwYWdlLXdlYmluYXJzIGFydGljbGUgaDQge1xuICAgIGZvbnQtd2VpZ2h0OiA0MDA7XG4gICAgZm9udC1zaXplOiAyMnB4O1xuICAgIGxldHRlci1zcGFjaW5nOiAtLjAxOGVtO1xuICAgIGxpbmUtaGVpZ2h0OiAxLjQ2ZW07XG4gICAgY29sb3I6ICM1OTZhODk7IH1cbiAgICAjcGFnZS13ZWJpbmFycyBhcnRpY2xlIGg0ICsgaDMge1xuICAgICAgbWFyZ2luLXRvcDogNDJweDsgfVxuICAjcGFnZS13ZWJpbmFycyBhcnRpY2xlIGgzIHtcbiAgICBmb250LXdlaWdodDogNjAwO1xuICAgIGZvbnQtc2l6ZTogMjBweDtcbiAgICBtYXJnaW4tdG9wOiA0MnB4O1xuICAgIG1hcmdpbi1ib3R0b206IDE1cHg7IH1cbiAgI3BhZ2Utd2ViaW5hcnMgYXJ0aWNsZSBzdHJvbmcge1xuICAgIGZvbnQtd2VpZ2h0OiA2MDA7IH1cbiAgI3BhZ2Utd2ViaW5hcnMgYXJ0aWNsZSBwIHtcbiAgICBmb250LXNpemU6IDE2cHg7XG4gICAgbGluZS1oZWlnaHQ6IDEuOGVtO1xuICAgIGxldHRlci1zcGFjaW5nOiAtLjAwOGVtOyB9XG4gICNwYWdlLXdlYmluYXJzIGFydGljbGUgdWwge1xuICAgIG1hcmdpbi10b3A6IDIwcHg7XG4gICAgcGFkZGluZy1sZWZ0OiAwO1xuICAgIHBhZGRpbmctYm90dG9tOiA2cHg7IH1cbiAgI3BhZ2Utd2ViaW5hcnMgYXJ0aWNsZSBsaSB7XG4gICAgbGluZS1oZWlnaHQ6IDEuOGVtO1xuICAgIGZvbnQtc2l6ZTogMTZweDtcbiAgICBsaXN0LXN0eWxlOiBub25lO1xuICAgIG1hcmdpbi1sZWZ0OiA0cHg7XG4gICAgbGV0dGVyLXNwYWNpbmc6IC0uMDA0ZW07XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIG1hcmdpbi1sZWZ0OiAwO1xuICAgIHBhZGRpbmctbGVmdDogNDRweDtcbiAgICBtYXJnaW4tYm90dG9tOiAyMHB4OyB9XG4gICAgI3BhZ2Utd2ViaW5hcnMgYXJ0aWNsZSBsaTo6YmVmb3JlIHtcbiAgICAgIGJhY2tncm91bmQ6IHVybChcIi9pbWcvcmVzb3VyY2UtY2VudGVyL3dlYmluYXJzL2ljby1jaGVjay5wbmdcIikgbm8tcmVwZWF0IDAgMDtcbiAgICAgIGJhY2tncm91bmQtc2l6ZTogMjRweDtcbiAgICAgIHdpZHRoOiAyNHB4O1xuICAgICAgaGVpZ2h0OiAyNHB4O1xuICAgICAgY29udGVudDogJyc7XG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICBsZWZ0OiAwO1xuICAgICAgdG9wOiAwOyB9XG4gICNwYWdlLXdlYmluYXJzIGFydGljbGUgLmJ0biB7XG4gICAgbWFyZ2luLXRvcDogMzBweDtcbiAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xuICAgIGZvbnQtc2l6ZTogMTVweDtcbiAgICBwYWRkaW5nOiAxN3B4IDI0cHggMTRweDtcbiAgICBsZXR0ZXItc3BhY2luZzogLjFlbTsgfVxuXG4jcGFnZS13ZWJpbmFycyBhc2lkZSB7XG4gIGZsZXg6IDAgMCAzNDBweDtcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgcGFkZGluZzogNTRweCAzMnB4IDMycHg7XG4gIGJhY2tncm91bmQ6ICNmNmY5ZmM7IH1cbiAgI3BhZ2Utd2ViaW5hcnMgYXNpZGUgaDQge1xuICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XG4gICAgZm9udC1zaXplOiAxNHB4O1xuICAgIGxldHRlci1zcGFjaW5nOiAuMWVtOyB9XG4gICNwYWdlLXdlYmluYXJzIGFzaWRlIC5ob3N0IHtcbiAgICBtYXJnaW4tdG9wOiAxNnB4O1xuICAgIG1hcmdpbi1ib3R0b206IDI0cHg7IH1cbiAgICAjcGFnZS13ZWJpbmFycyBhc2lkZSAuaG9zdCBpbWcge1xuICAgICAgYm9yZGVyLXJhZGl1czogNTAlO1xuICAgICAgZmxvYXQ6IGxlZnQ7XG4gICAgICBkaXNwbGF5OiBibG9jazsgfVxuICAgICNwYWdlLXdlYmluYXJzIGFzaWRlIC5ob3N0IHN0cm9uZyB7XG4gICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgIG1hcmdpbi1sZWZ0OiA2M3B4O1xuICAgICAgbWFyZ2luLXRvcDogNnB4O1xuICAgICAgZm9udC1zaXplOiAxNnB4O1xuICAgICAgZm9udC13ZWlnaHQ6IDUwMDtcbiAgICAgIGNvbG9yOiAjMTUxZDJiO1xuICAgICAgZm9udC1mYW1pbHk6IFwiRWluYVwiLCBcIkhlbHZldGljYSBOZXVlXCIsIEhlbHZldGljYSwgc2Fucy1zZXJpZjsgfVxuICAgICNwYWdlLXdlYmluYXJzIGFzaWRlIC5ob3N0IHNwYW4ge1xuICAgICAgbWFyZ2luLWxlZnQ6IDYzcHg7XG4gICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgIGxpbmUtaGVpZ2h0OiAxLjJlbTtcbiAgICAgIGNvbG9yOiAjNmI4MmFjOyB9XG4gICNwYWdlLXdlYmluYXJzIGFzaWRlIC5zdWJzY3JpYmUtY3RhIHtcbiAgICBtYXJnaW4tdG9wOiBhdXRvO1xuICAgIGJhY2tncm91bmQtY29sb3I6ICNmZmY7XG4gICAgYm9yZGVyLXJhZGl1czogNnB4O1xuICAgIGJveC1zaGFkb3c6IDAgOHB4IDMycHggcmdiYSgwLCAwLCAwLCAwLjEpLCAwIDJweCA4cHggcmdiYSgwLCAwLCAwLCAwLjEpO1xuICAgIHBhZGRpbmc6IDhweCAyOHB4IDI4cHg7IH1cbiAgICAjcGFnZS13ZWJpbmFycyBhc2lkZSAuc3Vic2NyaWJlLWN0YSBoMyB7XG4gICAgICBmb250LXdlaWdodDogNjAwO1xuICAgICAgZm9udC1zaXplOiAxOHB4O1xuICAgICAgbWFyZ2luLWJvdHRvbTogMXB4O1xuICAgICAgbGV0dGVyLXNwYWNpbmc6IC0uMDFlbTsgfVxuICAgICNwYWdlLXdlYmluYXJzIGFzaWRlIC5zdWJzY3JpYmUtY3RhIHAge1xuICAgICAgbWFyZ2luLWJvdHRvbTogMTZweDtcbiAgICAgIGxpbmUtaGVpZ2h0OiAxLjhlbTtcbiAgICAgIGxldHRlci1zcGFjaW5nOiAtLjAwOGVtOyB9XG4gICAgI3BhZ2Utd2ViaW5hcnMgYXNpZGUgLnN1YnNjcmliZS1jdGEgLmJ0biB7XG4gICAgICB3aWR0aDogMTAwJTtcbiAgICAgIGZvbnQtc2l6ZTogMTZweDtcbiAgICAgIGJhY2tncm91bmQ6ICNkNmVlZmY7XG4gICAgICBjb2xvcjogIzM4ODBmZjtcbiAgICAgIHBhZGRpbmc6IDE1cHggMTBweCAxMXB4OyB9XG4gICNwYWdlLXdlYmluYXJzIGFzaWRlIGlvbmljLW5ld3NsZXR0ZXItc2lnbnVwIGZvcm0ge1xuICAgIG1heC13aWR0aDogMTAwJTsgfVxuICAgICNwYWdlLXdlYmluYXJzIGFzaWRlIGlvbmljLW5ld3NsZXR0ZXItc2lnbnVwIGZvcm0gaW5wdXQge1xuICAgICAgbWluLXdpZHRoOiAwOyB9XG4gIEBtZWRpYSAobWF4LXdpZHRoOiA5OTFweCkge1xuICAgICNwYWdlLXdlYmluYXJzIGFzaWRlIHtcbiAgICAgIGZsZXg6IDAgMCAxMDAlOyB9IH1cblxuI3BhZ2Utd2ViaW5hcnMgLnJlc291cmNlLWxpc3Qge1xuICBtYXJnaW4tYm90dG9tOiA2NHB4OyB9XG4gICNwYWdlLXdlYmluYXJzIC5yZXNvdXJjZS1saXN0X19oZWFkZXIgaDQge1xuICAgIGZvbnQtc2l6ZTogMjRweDtcbiAgICBtYXJnaW4tYm90dG9tOiAxcHg7IH1cblxuI3BhZ2Utd2ViaW5hcnMgLnNjcm9sbFRvcExpbmsge1xuICBmbG9hdDogcmlnaHQ7XG4gIGZvbnQtc2l6ZTogMTVweDtcbiAgZm9udC13ZWlnaHQ6IDYwMDsgfVxuXG4jcGFnZS13ZWJpbmFycyAubW9kYWwtYm9keSB7XG4gIHBhZGRpbmc6IDMycHggNDhweDsgfVxuICBAbWVkaWEgKG1heC13aWR0aDogNzY3cHgpIHtcbiAgICAjcGFnZS13ZWJpbmFycyAubW9kYWwtYm9keSB7XG4gICAgICBwYWRkaW5nOiAxNnB4OyB9IH1cbiAgI3BhZ2Utd2ViaW5hcnMgLm1vZGFsLWJvZHkgZm9ybSB7XG4gICAgbWF4LXdpZHRoOiAxMDAlOyB9XG4iXX0= */\n"
  },
  {
    "path": "content/css/pygments/autumn.css",
    "content": ".highlight .hll {\n  background-color: #ffffcc; }\n\n.highlight .c {\n  color: #aaaaaa;\n  font-style: italic; }\n\n/* Comment */\n.highlight .err {\n  color: #F00000;\n  background-color: #F0A0A0; }\n\n/* Error */\n.highlight .k {\n  color: #0000aa; }\n\n/* Keyword */\n.highlight .cm {\n  color: #aaaaaa;\n  font-style: italic; }\n\n/* Comment.Multiline */\n.highlight .cp {\n  color: #4c8317; }\n\n/* Comment.Preproc */\n.highlight .c1 {\n  color: #aaaaaa;\n  font-style: italic; }\n\n/* Comment.Single */\n.highlight .cs {\n  color: #0000aa;\n  font-style: italic; }\n\n/* Comment.Special */\n.highlight .gd {\n  color: #aa0000; }\n\n/* Generic.Deleted */\n.highlight .ge {\n  font-style: italic; }\n\n/* Generic.Emph */\n.highlight .gr {\n  color: #aa0000; }\n\n/* Generic.Error */\n.highlight .gh {\n  color: #000080;\n  font-weight: bold; }\n\n/* Generic.Heading */\n.highlight .gi {\n  color: #00aa00; }\n\n/* Generic.Inserted */\n.highlight .go {\n  color: #888888; }\n\n/* Generic.Output */\n.highlight .gp {\n  color: #555555; }\n\n/* Generic.Prompt */\n.highlight .gs {\n  font-weight: bold; }\n\n/* Generic.Strong */\n.highlight .gu {\n  color: #800080;\n  font-weight: bold; }\n\n/* Generic.Subheading */\n.highlight .gt {\n  color: #aa0000; }\n\n/* Generic.Traceback */\n.highlight .kc {\n  color: #0000aa; }\n\n/* Keyword.Constant */\n.highlight .kd {\n  color: #0000aa; }\n\n/* Keyword.Declaration */\n.highlight .kn {\n  color: #0000aa; }\n\n/* Keyword.Namespace */\n.highlight .kp {\n  color: #0000aa; }\n\n/* Keyword.Pseudo */\n.highlight .kr {\n  color: #0000aa; }\n\n/* Keyword.Reserved */\n.highlight .kt {\n  color: #00aaaa; }\n\n/* Keyword.Type */\n.highlight .m {\n  color: #009999; }\n\n/* Literal.Number */\n.highlight .s {\n  color: #aa5500; }\n\n/* Literal.String */\n.highlight .na {\n  color: #1e90ff; }\n\n/* Name.Attribute */\n.highlight .nb {\n  color: #00aaaa; }\n\n/* Name.Builtin */\n.highlight .nc {\n  color: #00aa00;\n  text-decoration: underline; }\n\n/* Name.Class */\n.highlight .no {\n  color: #aa0000; }\n\n/* Name.Constant */\n.highlight .nd {\n  color: #888888; }\n\n/* Name.Decorator */\n.highlight .ni {\n  color: #800000;\n  font-weight: bold; }\n\n/* Name.Entity */\n.highlight .nf {\n  color: #00aa00; }\n\n/* Name.Function */\n.highlight .nn {\n  color: #00aaaa;\n  text-decoration: underline; }\n\n/* Name.Namespace */\n.highlight .nt {\n  color: #1e90ff;\n  font-weight: bold; }\n\n/* Name.Tag */\n.highlight .nv {\n  color: #aa0000; }\n\n/* Name.Variable */\n.highlight .ow {\n  color: #0000aa; }\n\n/* Operator.Word */\n.highlight .w {\n  color: #bbbbbb; }\n\n/* Text.Whitespace */\n.highlight .mf {\n  color: #009999; }\n\n/* Literal.Number.Float */\n.highlight .mh {\n  color: #009999; }\n\n/* Literal.Number.Hex */\n.highlight .mi {\n  color: #009999; }\n\n/* Literal.Number.Integer */\n.highlight .mo {\n  color: #009999; }\n\n/* Literal.Number.Oct */\n.highlight .sb {\n  color: #aa5500; }\n\n/* Literal.String.Backtick */\n.highlight .sc {\n  color: #aa5500; }\n\n/* Literal.String.Char */\n.highlight .sd {\n  color: #aa5500; }\n\n/* Literal.String.Doc */\n.highlight .s2 {\n  color: #aa5500; }\n\n/* Literal.String.Double */\n.highlight .se {\n  color: #aa5500; }\n\n/* Literal.String.Escape */\n.highlight .sh {\n  color: #aa5500; }\n\n/* Literal.String.Heredoc */\n.highlight .si {\n  color: #aa5500; }\n\n/* Literal.String.Interpol */\n.highlight .sx {\n  color: #aa5500; }\n\n/* Literal.String.Other */\n.highlight .sr {\n  color: #009999; }\n\n/* Literal.String.Regex */\n.highlight .s1 {\n  color: #aa5500; }\n\n/* Literal.String.Single */\n.highlight .ss {\n  color: #0000aa; }\n\n/* Literal.String.Symbol */\n.highlight .bp {\n  color: #00aaaa; }\n\n/* Name.Builtin.Pseudo */\n.highlight .vc {\n  color: #aa0000; }\n\n/* Name.Variable.Class */\n.highlight .vg {\n  color: #aa0000; }\n\n/* Name.Variable.Global */\n.highlight .vi {\n  color: #aa0000; }\n\n/* Name.Variable.Instance */\n.highlight .il {\n  color: #009999; }\n\n/* Literal.Number.Integer.Long */\n\n/*# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImF1dHVtbi5jc3MiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7RUFDRSwwQkFBMEIsRUFBRTs7QUFFOUI7RUFDRSxlQUFlO0VBQ2YsbUJBQW1CLEVBQUU7O0FBRXZCLGFBQWE7QUFDYjtFQUNFLGVBQWU7RUFDZiwwQkFBMEIsRUFBRTs7QUFFOUIsV0FBVztBQUNYO0VBQ0UsZUFBZSxFQUFFOztBQUVuQixhQUFhO0FBQ2I7RUFDRSxlQUFlO0VBQ2YsbUJBQW1CLEVBQUU7O0FBRXZCLHVCQUF1QjtBQUN2QjtFQUNFLGVBQWUsRUFBRTs7QUFFbkIscUJBQXFCO0FBQ3JCO0VBQ0UsZUFBZTtFQUNmLG1CQUFtQixFQUFFOztBQUV2QixvQkFBb0I7QUFDcEI7RUFDRSxlQUFlO0VBQ2YsbUJBQW1CLEVBQUU7O0FBRXZCLHFCQUFxQjtBQUNyQjtFQUNFLGVBQWUsRUFBRTs7QUFFbkIscUJBQXFCO0FBQ3JCO0VBQ0UsbUJBQW1CLEVBQUU7O0FBRXZCLGtCQUFrQjtBQUNsQjtFQUNFLGVBQWUsRUFBRTs7QUFFbkIsbUJBQW1CO0FBQ25CO0VBQ0UsZUFBZTtFQUNmLGtCQUFrQixFQUFFOztBQUV0QixxQkFBcUI7QUFDckI7RUFDRSxlQUFlLEVBQUU7O0FBRW5CLHNCQUFzQjtBQUN0QjtFQUNFLGVBQWUsRUFBRTs7QUFFbkIsb0JBQW9CO0FBQ3BCO0VBQ0UsZUFBZSxFQUFFOztBQUVuQixvQkFBb0I7QUFDcEI7RUFDRSxrQkFBa0IsRUFBRTs7QUFFdEIsb0JBQW9CO0FBQ3BCO0VBQ0UsZUFBZTtFQUNmLGtCQUFrQixFQUFFOztBQUV0Qix3QkFBd0I7QUFDeEI7RUFDRSxlQUFlLEVBQUU7O0FBRW5CLHVCQUF1QjtBQUN2QjtFQUNFLGVBQWUsRUFBRTs7QUFFbkIsc0JBQXNCO0FBQ3RCO0VBQ0UsZUFBZSxFQUFFOztBQUVuQix5QkFBeUI7QUFDekI7RUFDRSxlQUFlLEVBQUU7O0FBRW5CLHVCQUF1QjtBQUN2QjtFQUNFLGVBQWUsRUFBRTs7QUFFbkIsb0JBQW9CO0FBQ3BCO0VBQ0UsZUFBZSxFQUFFOztBQUVuQixzQkFBc0I7QUFDdEI7RUFDRSxlQUFlLEVBQUU7O0FBRW5CLGtCQUFrQjtBQUNsQjtFQUNFLGVBQWUsRUFBRTs7QUFFbkIsb0JBQW9CO0FBQ3BCO0VBQ0UsZUFBZSxFQUFFOztBQUVuQixvQkFBb0I7QUFDcEI7RUFDRSxlQUFlLEVBQUU7O0FBRW5CLG9CQUFvQjtBQUNwQjtFQUNFLGVBQWUsRUFBRTs7QUFFbkIsa0JBQWtCO0FBQ2xCO0VBQ0UsZUFBZTtFQUNmLDJCQUEyQixFQUFFOztBQUUvQixnQkFBZ0I7QUFDaEI7RUFDRSxlQUFlLEVBQUU7O0FBRW5CLG1CQUFtQjtBQUNuQjtFQUNFLGVBQWUsRUFBRTs7QUFFbkIsb0JBQW9CO0FBQ3BCO0VBQ0UsZUFBZTtFQUNmLGtCQUFrQixFQUFFOztBQUV0QixpQkFBaUI7QUFDakI7RUFDRSxlQUFlLEVBQUU7O0FBRW5CLG1CQUFtQjtBQUNuQjtFQUNFLGVBQWU7RUFDZiwyQkFBMkIsRUFBRTs7QUFFL0Isb0JBQW9CO0FBQ3BCO0VBQ0UsZUFBZTtFQUNmLGtCQUFrQixFQUFFOztBQUV0QixjQUFjO0FBQ2Q7RUFDRSxlQUFlLEVBQUU7O0FBRW5CLG1CQUFtQjtBQUNuQjtFQUNFLGVBQWUsRUFBRTs7QUFFbkIsbUJBQW1CO0FBQ25CO0VBQ0UsZUFBZSxFQUFFOztBQUVuQixxQkFBcUI7QUFDckI7RUFDRSxlQUFlLEVBQUU7O0FBRW5CLDBCQUEwQjtBQUMxQjtFQUNFLGVBQWUsRUFBRTs7QUFFbkIsd0JBQXdCO0FBQ3hCO0VBQ0UsZUFBZSxFQUFFOztBQUVuQiw0QkFBNEI7QUFDNUI7RUFDRSxlQUFlLEVBQUU7O0FBRW5CLHdCQUF3QjtBQUN4QjtFQUNFLGVBQWUsRUFBRTs7QUFFbkIsNkJBQTZCO0FBQzdCO0VBQ0UsZUFBZSxFQUFFOztBQUVuQix5QkFBeUI7QUFDekI7RUFDRSxlQUFlLEVBQUU7O0FBRW5CLHdCQUF3QjtBQUN4QjtFQUNFLGVBQWUsRUFBRTs7QUFFbkIsMkJBQTJCO0FBQzNCO0VBQ0UsZUFBZSxFQUFFOztBQUVuQiwyQkFBMkI7QUFDM0I7RUFDRSxlQUFlLEVBQUU7O0FBRW5CLDRCQUE0QjtBQUM1QjtFQUNFLGVBQWUsRUFBRTs7QUFFbkIsNkJBQTZCO0FBQzdCO0VBQ0UsZUFBZSxFQUFFOztBQUVuQiwwQkFBMEI7QUFDMUI7RUFDRSxlQUFlLEVBQUU7O0FBRW5CLDBCQUEwQjtBQUMxQjtFQUNFLGVBQWUsRUFBRTs7QUFFbkIsMkJBQTJCO0FBQzNCO0VBQ0UsZUFBZSxFQUFFOztBQUVuQiwyQkFBMkI7QUFDM0I7RUFDRSxlQUFlLEVBQUU7O0FBRW5CLHlCQUF5QjtBQUN6QjtFQUNFLGVBQWUsRUFBRTs7QUFFbkIseUJBQXlCO0FBQ3pCO0VBQ0UsZUFBZSxFQUFFOztBQUVuQiwwQkFBMEI7QUFDMUI7RUFDRSxlQUFlLEVBQUU7O0FBRW5CLDRCQUE0QjtBQUM1QjtFQUNFLGVBQWUsRUFBRTs7QUFFbkIsaUNBQWlDIiwiZmlsZSI6InB5Z21lbnRzL2F1dHVtbi5jc3MiLCJzb3VyY2VzQ29udGVudCI6WyIuaGlnaGxpZ2h0IC5obGwge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmZmNjOyB9XG5cbi5oaWdobGlnaHQgLmMge1xuICBjb2xvcjogI2FhYWFhYTtcbiAgZm9udC1zdHlsZTogaXRhbGljOyB9XG5cbi8qIENvbW1lbnQgKi9cbi5oaWdobGlnaHQgLmVyciB7XG4gIGNvbG9yOiAjRjAwMDAwO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjRjBBMEEwOyB9XG5cbi8qIEVycm9yICovXG4uaGlnaGxpZ2h0IC5rIHtcbiAgY29sb3I6ICMwMDAwYWE7IH1cblxuLyogS2V5d29yZCAqL1xuLmhpZ2hsaWdodCAuY20ge1xuICBjb2xvcjogI2FhYWFhYTtcbiAgZm9udC1zdHlsZTogaXRhbGljOyB9XG5cbi8qIENvbW1lbnQuTXVsdGlsaW5lICovXG4uaGlnaGxpZ2h0IC5jcCB7XG4gIGNvbG9yOiAjNGM4MzE3OyB9XG5cbi8qIENvbW1lbnQuUHJlcHJvYyAqL1xuLmhpZ2hsaWdodCAuYzEge1xuICBjb2xvcjogI2FhYWFhYTtcbiAgZm9udC1zdHlsZTogaXRhbGljOyB9XG5cbi8qIENvbW1lbnQuU2luZ2xlICovXG4uaGlnaGxpZ2h0IC5jcyB7XG4gIGNvbG9yOiAjMDAwMGFhO1xuICBmb250LXN0eWxlOiBpdGFsaWM7IH1cblxuLyogQ29tbWVudC5TcGVjaWFsICovXG4uaGlnaGxpZ2h0IC5nZCB7XG4gIGNvbG9yOiAjYWEwMDAwOyB9XG5cbi8qIEdlbmVyaWMuRGVsZXRlZCAqL1xuLmhpZ2hsaWdodCAuZ2Uge1xuICBmb250LXN0eWxlOiBpdGFsaWM7IH1cblxuLyogR2VuZXJpYy5FbXBoICovXG4uaGlnaGxpZ2h0IC5nciB7XG4gIGNvbG9yOiAjYWEwMDAwOyB9XG5cbi8qIEdlbmVyaWMuRXJyb3IgKi9cbi5oaWdobGlnaHQgLmdoIHtcbiAgY29sb3I6ICMwMDAwODA7XG4gIGZvbnQtd2VpZ2h0OiBib2xkOyB9XG5cbi8qIEdlbmVyaWMuSGVhZGluZyAqL1xuLmhpZ2hsaWdodCAuZ2kge1xuICBjb2xvcjogIzAwYWEwMDsgfVxuXG4vKiBHZW5lcmljLkluc2VydGVkICovXG4uaGlnaGxpZ2h0IC5nbyB7XG4gIGNvbG9yOiAjODg4ODg4OyB9XG5cbi8qIEdlbmVyaWMuT3V0cHV0ICovXG4uaGlnaGxpZ2h0IC5ncCB7XG4gIGNvbG9yOiAjNTU1NTU1OyB9XG5cbi8qIEdlbmVyaWMuUHJvbXB0ICovXG4uaGlnaGxpZ2h0IC5ncyB7XG4gIGZvbnQtd2VpZ2h0OiBib2xkOyB9XG5cbi8qIEdlbmVyaWMuU3Ryb25nICovXG4uaGlnaGxpZ2h0IC5ndSB7XG4gIGNvbG9yOiAjODAwMDgwO1xuICBmb250LXdlaWdodDogYm9sZDsgfVxuXG4vKiBHZW5lcmljLlN1YmhlYWRpbmcgKi9cbi5oaWdobGlnaHQgLmd0IHtcbiAgY29sb3I6ICNhYTAwMDA7IH1cblxuLyogR2VuZXJpYy5UcmFjZWJhY2sgKi9cbi5oaWdobGlnaHQgLmtjIHtcbiAgY29sb3I6ICMwMDAwYWE7IH1cblxuLyogS2V5d29yZC5Db25zdGFudCAqL1xuLmhpZ2hsaWdodCAua2Qge1xuICBjb2xvcjogIzAwMDBhYTsgfVxuXG4vKiBLZXl3b3JkLkRlY2xhcmF0aW9uICovXG4uaGlnaGxpZ2h0IC5rbiB7XG4gIGNvbG9yOiAjMDAwMGFhOyB9XG5cbi8qIEtleXdvcmQuTmFtZXNwYWNlICovXG4uaGlnaGxpZ2h0IC5rcCB7XG4gIGNvbG9yOiAjMDAwMGFhOyB9XG5cbi8qIEtleXdvcmQuUHNldWRvICovXG4uaGlnaGxpZ2h0IC5rciB7XG4gIGNvbG9yOiAjMDAwMGFhOyB9XG5cbi8qIEtleXdvcmQuUmVzZXJ2ZWQgKi9cbi5oaWdobGlnaHQgLmt0IHtcbiAgY29sb3I6ICMwMGFhYWE7IH1cblxuLyogS2V5d29yZC5UeXBlICovXG4uaGlnaGxpZ2h0IC5tIHtcbiAgY29sb3I6ICMwMDk5OTk7IH1cblxuLyogTGl0ZXJhbC5OdW1iZXIgKi9cbi5oaWdobGlnaHQgLnMge1xuICBjb2xvcjogI2FhNTUwMDsgfVxuXG4vKiBMaXRlcmFsLlN0cmluZyAqL1xuLmhpZ2hsaWdodCAubmEge1xuICBjb2xvcjogIzFlOTBmZjsgfVxuXG4vKiBOYW1lLkF0dHJpYnV0ZSAqL1xuLmhpZ2hsaWdodCAubmIge1xuICBjb2xvcjogIzAwYWFhYTsgfVxuXG4vKiBOYW1lLkJ1aWx0aW4gKi9cbi5oaWdobGlnaHQgLm5jIHtcbiAgY29sb3I6ICMwMGFhMDA7XG4gIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOyB9XG5cbi8qIE5hbWUuQ2xhc3MgKi9cbi5oaWdobGlnaHQgLm5vIHtcbiAgY29sb3I6ICNhYTAwMDA7IH1cblxuLyogTmFtZS5Db25zdGFudCAqL1xuLmhpZ2hsaWdodCAubmQge1xuICBjb2xvcjogIzg4ODg4ODsgfVxuXG4vKiBOYW1lLkRlY29yYXRvciAqL1xuLmhpZ2hsaWdodCAubmkge1xuICBjb2xvcjogIzgwMDAwMDtcbiAgZm9udC13ZWlnaHQ6IGJvbGQ7IH1cblxuLyogTmFtZS5FbnRpdHkgKi9cbi5oaWdobGlnaHQgLm5mIHtcbiAgY29sb3I6ICMwMGFhMDA7IH1cblxuLyogTmFtZS5GdW5jdGlvbiAqL1xuLmhpZ2hsaWdodCAubm4ge1xuICBjb2xvcjogIzAwYWFhYTtcbiAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7IH1cblxuLyogTmFtZS5OYW1lc3BhY2UgKi9cbi5oaWdobGlnaHQgLm50IHtcbiAgY29sb3I6ICMxZTkwZmY7XG4gIGZvbnQtd2VpZ2h0OiBib2xkOyB9XG5cbi8qIE5hbWUuVGFnICovXG4uaGlnaGxpZ2h0IC5udiB7XG4gIGNvbG9yOiAjYWEwMDAwOyB9XG5cbi8qIE5hbWUuVmFyaWFibGUgKi9cbi5oaWdobGlnaHQgLm93IHtcbiAgY29sb3I6ICMwMDAwYWE7IH1cblxuLyogT3BlcmF0b3IuV29yZCAqL1xuLmhpZ2hsaWdodCAudyB7XG4gIGNvbG9yOiAjYmJiYmJiOyB9XG5cbi8qIFRleHQuV2hpdGVzcGFjZSAqL1xuLmhpZ2hsaWdodCAubWYge1xuICBjb2xvcjogIzAwOTk5OTsgfVxuXG4vKiBMaXRlcmFsLk51bWJlci5GbG9hdCAqL1xuLmhpZ2hsaWdodCAubWgge1xuICBjb2xvcjogIzAwOTk5OTsgfVxuXG4vKiBMaXRlcmFsLk51bWJlci5IZXggKi9cbi5oaWdobGlnaHQgLm1pIHtcbiAgY29sb3I6ICMwMDk5OTk7IH1cblxuLyogTGl0ZXJhbC5OdW1iZXIuSW50ZWdlciAqL1xuLmhpZ2hsaWdodCAubW8ge1xuICBjb2xvcjogIzAwOTk5OTsgfVxuXG4vKiBMaXRlcmFsLk51bWJlci5PY3QgKi9cbi5oaWdobGlnaHQgLnNiIHtcbiAgY29sb3I6ICNhYTU1MDA7IH1cblxuLyogTGl0ZXJhbC5TdHJpbmcuQmFja3RpY2sgKi9cbi5oaWdobGlnaHQgLnNjIHtcbiAgY29sb3I6ICNhYTU1MDA7IH1cblxuLyogTGl0ZXJhbC5TdHJpbmcuQ2hhciAqL1xuLmhpZ2hsaWdodCAuc2Qge1xuICBjb2xvcjogI2FhNTUwMDsgfVxuXG4vKiBMaXRlcmFsLlN0cmluZy5Eb2MgKi9cbi5oaWdobGlnaHQgLnMyIHtcbiAgY29sb3I6ICNhYTU1MDA7IH1cblxuLyogTGl0ZXJhbC5TdHJpbmcuRG91YmxlICovXG4uaGlnaGxpZ2h0IC5zZSB7XG4gIGNvbG9yOiAjYWE1NTAwOyB9XG5cbi8qIExpdGVyYWwuU3RyaW5nLkVzY2FwZSAqL1xuLmhpZ2hsaWdodCAuc2gge1xuICBjb2xvcjogI2FhNTUwMDsgfVxuXG4vKiBMaXRlcmFsLlN0cmluZy5IZXJlZG9jICovXG4uaGlnaGxpZ2h0IC5zaSB7XG4gIGNvbG9yOiAjYWE1NTAwOyB9XG5cbi8qIExpdGVyYWwuU3RyaW5nLkludGVycG9sICovXG4uaGlnaGxpZ2h0IC5zeCB7XG4gIGNvbG9yOiAjYWE1NTAwOyB9XG5cbi8qIExpdGVyYWwuU3RyaW5nLk90aGVyICovXG4uaGlnaGxpZ2h0IC5zciB7XG4gIGNvbG9yOiAjMDA5OTk5OyB9XG5cbi8qIExpdGVyYWwuU3RyaW5nLlJlZ2V4ICovXG4uaGlnaGxpZ2h0IC5zMSB7XG4gIGNvbG9yOiAjYWE1NTAwOyB9XG5cbi8qIExpdGVyYWwuU3RyaW5nLlNpbmdsZSAqL1xuLmhpZ2hsaWdodCAuc3Mge1xuICBjb2xvcjogIzAwMDBhYTsgfVxuXG4vKiBMaXRlcmFsLlN0cmluZy5TeW1ib2wgKi9cbi5oaWdobGlnaHQgLmJwIHtcbiAgY29sb3I6ICMwMGFhYWE7IH1cblxuLyogTmFtZS5CdWlsdGluLlBzZXVkbyAqL1xuLmhpZ2hsaWdodCAudmMge1xuICBjb2xvcjogI2FhMDAwMDsgfVxuXG4vKiBOYW1lLlZhcmlhYmxlLkNsYXNzICovXG4uaGlnaGxpZ2h0IC52ZyB7XG4gIGNvbG9yOiAjYWEwMDAwOyB9XG5cbi8qIE5hbWUuVmFyaWFibGUuR2xvYmFsICovXG4uaGlnaGxpZ2h0IC52aSB7XG4gIGNvbG9yOiAjYWEwMDAwOyB9XG5cbi8qIE5hbWUuVmFyaWFibGUuSW5zdGFuY2UgKi9cbi5oaWdobGlnaHQgLmlsIHtcbiAgY29sb3I6ICMwMDk5OTk7IH1cblxuLyogTGl0ZXJhbC5OdW1iZXIuSW50ZWdlci5Mb25nICovXG4iXX0= */\n"
  },
  {
    "path": "content/css/pygments/ionic.css",
    "content": ".highlight {\n  background: #ffffff; }\n\n.highlight .c {\n  color: #999988;\n  font-style: italic; }\n\n/* Comment */\n.highlight .err {\n  color: #a61717;\n  background-color: #e3d2d2; }\n\n/* Error */\n.highlight .k {\n  font-weight: bold; }\n\n/* Keyword */\n.highlight .o {\n  font-weight: bold; }\n\n/* Operator */\n.highlight .cm {\n  color: #999988;\n  font-style: italic; }\n\n/* Comment.Multiline */\n.highlight .cp {\n  color: #999999;\n  font-weight: bold; }\n\n/* Comment.Preproc */\n.highlight .c1 {\n  color: #999988;\n  font-style: italic; }\n\n/* Comment.Single */\n.highlight .cs {\n  color: #999999;\n  font-weight: bold;\n  font-style: italic; }\n\n/* Comment.Special */\n.highlight .gd {\n  color: #000000;\n  background-color: #ffdddd; }\n\n/* Generic.Deleted */\n.highlight .gd .x {\n  color: #000000;\n  background-color: #ffaaaa; }\n\n/* Generic.Deleted.Specific */\n.highlight .ge {\n  font-style: italic; }\n\n/* Generic.Emph */\n.highlight .gr {\n  color: #aa0000; }\n\n/* Generic.Error */\n.highlight .gh {\n  color: #999999; }\n\n/* Generic.Heading */\n.highlight .gi {\n  color: #000000;\n  background-color: #ddffdd; }\n\n/* Generic.Inserted */\n.highlight .gi .x {\n  color: #000000;\n  background-color: #aaffaa; }\n\n/* Generic.Inserted.Specific */\n.highlight .go {\n  color: #888888; }\n\n/* Generic.Output */\n.highlight .gp {\n  color: #555555; }\n\n/* Generic.Prompt */\n.highlight .gs {\n  font-weight: bold; }\n\n/* Generic.Strong */\n.highlight .gu {\n  color: #aaaaaa; }\n\n/* Generic.Subheading */\n.highlight .gt {\n  color: #aa0000; }\n\n/* Generic.Traceback */\n.highlight .kc {\n  font-weight: bold; }\n\n/* Keyword.Constant */\n.highlight .kd {\n  font-weight: bold; }\n\n/* Keyword.Declaration */\n.highlight .kp {\n  font-weight: bold; }\n\n/* Keyword.Pseudo */\n.highlight .kr {\n  font-weight: bold; }\n\n/* Keyword.Reserved */\n.highlight .kt {\n  color: #445588;\n  font-weight: bold; }\n\n/* Keyword.Type */\n.highlight .m {\n  color: #009999; }\n\n/* Literal.Number */\n.highlight .s {\n  color: #d14; }\n\n/* Literal.String */\n.highlight .na {\n  color: #008080; }\n\n/* Name.Attribute */\n.highlight .nb {\n  color: #0086B3; }\n\n/* Name.Builtin */\n.highlight .nc {\n  color: #445588;\n  font-weight: bold; }\n\n/* Name.Class */\n.highlight .no {\n  color: #008080; }\n\n/* Name.Constant */\n.highlight .ni {\n  color: #800080; }\n\n/* Name.Entity */\n.highlight .ne {\n  color: #990000;\n  font-weight: bold; }\n\n/* Name.Exception */\n.highlight .nf {\n  color: #990000;\n  font-weight: bold; }\n\n/* Name.Function */\n.highlight .nn {\n  color: #555555; }\n\n/* Name.Namespace */\n.highlight .nt {\n  color: #000080; }\n\n/* Name.Tag */\n.highlight .nv {\n  color: #008080; }\n\n/* Name.Variable */\n.highlight .ow {\n  font-weight: bold; }\n\n/* Operator.Word */\n.highlight .w {\n  color: #bbbbbb; }\n\n/* Text.Whitespace */\n.highlight .mf {\n  color: #009999; }\n\n/* Literal.Number.Float */\n.highlight .mh {\n  color: #009999; }\n\n/* Literal.Number.Hex */\n.highlight .mi {\n  color: #009999; }\n\n/* Literal.Number.Integer */\n.highlight .mo {\n  color: #009999; }\n\n/* Literal.Number.Oct */\n.highlight .sb {\n  color: #d14; }\n\n/* Literal.String.Backtick */\n.highlight .sc {\n  color: #d14; }\n\n/* Literal.String.Char */\n.highlight .sd {\n  color: #d14; }\n\n/* Literal.String.Doc */\n.highlight .s2 {\n  color: #d14; }\n\n/* Literal.String.Double */\n.highlight .se {\n  color: #d14; }\n\n/* Literal.String.Escape */\n.highlight .sh {\n  color: #d14; }\n\n/* Literal.String.Heredoc */\n.highlight .si {\n  color: #d14; }\n\n/* Literal.String.Interpol */\n.highlight .sx {\n  color: #d14; }\n\n/* Literal.String.Other */\n.highlight .sr {\n  color: #009926; }\n\n/* Literal.String.Regex */\n.highlight .s1 {\n  color: #d14; }\n\n/* Literal.String.Single */\n.highlight .ss {\n  color: #990073; }\n\n/* Literal.String.Symbol */\n.highlight .bp {\n  color: #999999; }\n\n/* Name.Builtin.Pseudo */\n.highlight .vc {\n  color: #008080; }\n\n/* Name.Variable.Class */\n.highlight .vg {\n  color: #008080; }\n\n/* Name.Variable.Global */\n.highlight .vi {\n  color: #008080; }\n\n/* Name.Variable.Instance */\n.highlight .il {\n  color: #009999; }\n\n/* Literal.Number.Integer.Long */\n\n/*# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImlvbmljLmNzcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtFQUNFLG9CQUFvQixFQUFFOztBQUV4QjtFQUNFLGVBQWU7RUFDZixtQkFBbUIsRUFBRTs7QUFFdkIsYUFBYTtBQUNiO0VBQ0UsZUFBZTtFQUNmLDBCQUEwQixFQUFFOztBQUU5QixXQUFXO0FBQ1g7RUFDRSxrQkFBa0IsRUFBRTs7QUFFdEIsYUFBYTtBQUNiO0VBQ0Usa0JBQWtCLEVBQUU7O0FBRXRCLGNBQWM7QUFDZDtFQUNFLGVBQWU7RUFDZixtQkFBbUIsRUFBRTs7QUFFdkIsdUJBQXVCO0FBQ3ZCO0VBQ0UsZUFBZTtFQUNmLGtCQUFrQixFQUFFOztBQUV0QixxQkFBcUI7QUFDckI7RUFDRSxlQUFlO0VBQ2YsbUJBQW1CLEVBQUU7O0FBRXZCLG9CQUFvQjtBQUNwQjtFQUNFLGVBQWU7RUFDZixrQkFBa0I7RUFDbEIsbUJBQW1CLEVBQUU7O0FBRXZCLHFCQUFxQjtBQUNyQjtFQUNFLGVBQWU7RUFDZiwwQkFBMEIsRUFBRTs7QUFFOUIscUJBQXFCO0FBQ3JCO0VBQ0UsZUFBZTtFQUNmLDBCQUEwQixFQUFFOztBQUU5Qiw4QkFBOEI7QUFDOUI7RUFDRSxtQkFBbUIsRUFBRTs7QUFFdkIsa0JBQWtCO0FBQ2xCO0VBQ0UsZUFBZSxFQUFFOztBQUVuQixtQkFBbUI7QUFDbkI7RUFDRSxlQUFlLEVBQUU7O0FBRW5CLHFCQUFxQjtBQUNyQjtFQUNFLGVBQWU7RUFDZiwwQkFBMEIsRUFBRTs7QUFFOUIsc0JBQXNCO0FBQ3RCO0VBQ0UsZUFBZTtFQUNmLDBCQUEwQixFQUFFOztBQUU5QiwrQkFBK0I7QUFDL0I7RUFDRSxlQUFlLEVBQUU7O0FBRW5CLG9CQUFvQjtBQUNwQjtFQUNFLGVBQWUsRUFBRTs7QUFFbkIsb0JBQW9CO0FBQ3BCO0VBQ0Usa0JBQWtCLEVBQUU7O0FBRXRCLG9CQUFvQjtBQUNwQjtFQUNFLGVBQWUsRUFBRTs7QUFFbkIsd0JBQXdCO0FBQ3hCO0VBQ0UsZUFBZSxFQUFFOztBQUVuQix1QkFBdUI7QUFDdkI7RUFDRSxrQkFBa0IsRUFBRTs7QUFFdEIsc0JBQXNCO0FBQ3RCO0VBQ0Usa0JBQWtCLEVBQUU7O0FBRXRCLHlCQUF5QjtBQUN6QjtFQUNFLGtCQUFrQixFQUFFOztBQUV0QixvQkFBb0I7QUFDcEI7RUFDRSxrQkFBa0IsRUFBRTs7QUFFdEIsc0JBQXNCO0FBQ3RCO0VBQ0UsZUFBZTtFQUNmLGtCQUFrQixFQUFFOztBQUV0QixrQkFBa0I7QUFDbEI7RUFDRSxlQUFlLEVBQUU7O0FBRW5CLG9CQUFvQjtBQUNwQjtFQUNFLFlBQVksRUFBRTs7QUFFaEIsb0JBQW9CO0FBQ3BCO0VBQ0UsZUFBZSxFQUFFOztBQUVuQixvQkFBb0I7QUFDcEI7RUFDRSxlQUFlLEVBQUU7O0FBRW5CLGtCQUFrQjtBQUNsQjtFQUNFLGVBQWU7RUFDZixrQkFBa0IsRUFBRTs7QUFFdEIsZ0JBQWdCO0FBQ2hCO0VBQ0UsZUFBZSxFQUFFOztBQUVuQixtQkFBbUI7QUFDbkI7RUFDRSxlQUFlLEVBQUU7O0FBRW5CLGlCQUFpQjtBQUNqQjtFQUNFLGVBQWU7RUFDZixrQkFBa0IsRUFBRTs7QUFFdEIsb0JBQW9CO0FBQ3BCO0VBQ0UsZUFBZTtFQUNmLGtCQUFrQixFQUFFOztBQUV0QixtQkFBbUI7QUFDbkI7RUFDRSxlQUFlLEVBQUU7O0FBRW5CLG9CQUFvQjtBQUNwQjtFQUNFLGVBQWUsRUFBRTs7QUFFbkIsY0FBYztBQUNkO0VBQ0UsZUFBZSxFQUFFOztBQUVuQixtQkFBbUI7QUFDbkI7RUFDRSxrQkFBa0IsRUFBRTs7QUFFdEIsbUJBQW1CO0FBQ25CO0VBQ0UsZUFBZSxFQUFFOztBQUVuQixxQkFBcUI7QUFDckI7RUFDRSxlQUFlLEVBQUU7O0FBRW5CLDBCQUEwQjtBQUMxQjtFQUNFLGVBQWUsRUFBRTs7QUFFbkIsd0JBQXdCO0FBQ3hCO0VBQ0UsZUFBZSxFQUFFOztBQUVuQiw0QkFBNEI7QUFDNUI7RUFDRSxlQUFlLEVBQUU7O0FBRW5CLHdCQUF3QjtBQUN4QjtFQUNFLFlBQVksRUFBRTs7QUFFaEIsNkJBQTZCO0FBQzdCO0VBQ0UsWUFBWSxFQUFFOztBQUVoQix5QkFBeUI7QUFDekI7RUFDRSxZQUFZLEVBQUU7O0FBRWhCLHdCQUF3QjtBQUN4QjtFQUNFLFlBQVksRUFBRTs7QUFFaEIsMkJBQTJCO0FBQzNCO0VBQ0UsWUFBWSxFQUFFOztBQUVoQiwyQkFBMkI7QUFDM0I7RUFDRSxZQUFZLEVBQUU7O0FBRWhCLDRCQUE0QjtBQUM1QjtFQUNFLFlBQVksRUFBRTs7QUFFaEIsNkJBQTZCO0FBQzdCO0VBQ0UsWUFBWSxFQUFFOztBQUVoQiwwQkFBMEI7QUFDMUI7RUFDRSxlQUFlLEVBQUU7O0FBRW5CLDBCQUEwQjtBQUMxQjtFQUNFLFlBQVksRUFBRTs7QUFFaEIsMkJBQTJCO0FBQzNCO0VBQ0UsZUFBZSxFQUFFOztBQUVuQiwyQkFBMkI7QUFDM0I7RUFDRSxlQUFlLEVBQUU7O0FBRW5CLHlCQUF5QjtBQUN6QjtFQUNFLGVBQWUsRUFBRTs7QUFFbkIseUJBQXlCO0FBQ3pCO0VBQ0UsZUFBZSxFQUFFOztBQUVuQiwwQkFBMEI7QUFDMUI7RUFDRSxlQUFlLEVBQUU7O0FBRW5CLDRCQUE0QjtBQUM1QjtFQUNFLGVBQWUsRUFBRTs7QUFFbkIsaUNBQWlDIiwiZmlsZSI6InB5Z21lbnRzL2lvbmljLmNzcyIsInNvdXJjZXNDb250ZW50IjpbIi5oaWdobGlnaHQge1xuICBiYWNrZ3JvdW5kOiAjZmZmZmZmOyB9XG5cbi5oaWdobGlnaHQgLmMge1xuICBjb2xvcjogIzk5OTk4ODtcbiAgZm9udC1zdHlsZTogaXRhbGljOyB9XG5cbi8qIENvbW1lbnQgKi9cbi5oaWdobGlnaHQgLmVyciB7XG4gIGNvbG9yOiAjYTYxNzE3O1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZTNkMmQyOyB9XG5cbi8qIEVycm9yICovXG4uaGlnaGxpZ2h0IC5rIHtcbiAgZm9udC13ZWlnaHQ6IGJvbGQ7IH1cblxuLyogS2V5d29yZCAqL1xuLmhpZ2hsaWdodCAubyB7XG4gIGZvbnQtd2VpZ2h0OiBib2xkOyB9XG5cbi8qIE9wZXJhdG9yICovXG4uaGlnaGxpZ2h0IC5jbSB7XG4gIGNvbG9yOiAjOTk5OTg4O1xuICBmb250LXN0eWxlOiBpdGFsaWM7IH1cblxuLyogQ29tbWVudC5NdWx0aWxpbmUgKi9cbi5oaWdobGlnaHQgLmNwIHtcbiAgY29sb3I6ICM5OTk5OTk7XG4gIGZvbnQtd2VpZ2h0OiBib2xkOyB9XG5cbi8qIENvbW1lbnQuUHJlcHJvYyAqL1xuLmhpZ2hsaWdodCAuYzEge1xuICBjb2xvcjogIzk5OTk4ODtcbiAgZm9udC1zdHlsZTogaXRhbGljOyB9XG5cbi8qIENvbW1lbnQuU2luZ2xlICovXG4uaGlnaGxpZ2h0IC5jcyB7XG4gIGNvbG9yOiAjOTk5OTk5O1xuICBmb250LXdlaWdodDogYm9sZDtcbiAgZm9udC1zdHlsZTogaXRhbGljOyB9XG5cbi8qIENvbW1lbnQuU3BlY2lhbCAqL1xuLmhpZ2hsaWdodCAuZ2Qge1xuICBjb2xvcjogIzAwMDAwMDtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZGRkZDsgfVxuXG4vKiBHZW5lcmljLkRlbGV0ZWQgKi9cbi5oaWdobGlnaHQgLmdkIC54IHtcbiAgY29sb3I6ICMwMDAwMDA7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmFhYWE7IH1cblxuLyogR2VuZXJpYy5EZWxldGVkLlNwZWNpZmljICovXG4uaGlnaGxpZ2h0IC5nZSB7XG4gIGZvbnQtc3R5bGU6IGl0YWxpYzsgfVxuXG4vKiBHZW5lcmljLkVtcGggKi9cbi5oaWdobGlnaHQgLmdyIHtcbiAgY29sb3I6ICNhYTAwMDA7IH1cblxuLyogR2VuZXJpYy5FcnJvciAqL1xuLmhpZ2hsaWdodCAuZ2gge1xuICBjb2xvcjogIzk5OTk5OTsgfVxuXG4vKiBHZW5lcmljLkhlYWRpbmcgKi9cbi5oaWdobGlnaHQgLmdpIHtcbiAgY29sb3I6ICMwMDAwMDA7XG4gIGJhY2tncm91bmQtY29sb3I6ICNkZGZmZGQ7IH1cblxuLyogR2VuZXJpYy5JbnNlcnRlZCAqL1xuLmhpZ2hsaWdodCAuZ2kgLngge1xuICBjb2xvcjogIzAwMDAwMDtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2FhZmZhYTsgfVxuXG4vKiBHZW5lcmljLkluc2VydGVkLlNwZWNpZmljICovXG4uaGlnaGxpZ2h0IC5nbyB7XG4gIGNvbG9yOiAjODg4ODg4OyB9XG5cbi8qIEdlbmVyaWMuT3V0cHV0ICovXG4uaGlnaGxpZ2h0IC5ncCB7XG4gIGNvbG9yOiAjNTU1NTU1OyB9XG5cbi8qIEdlbmVyaWMuUHJvbXB0ICovXG4uaGlnaGxpZ2h0IC5ncyB7XG4gIGZvbnQtd2VpZ2h0OiBib2xkOyB9XG5cbi8qIEdlbmVyaWMuU3Ryb25nICovXG4uaGlnaGxpZ2h0IC5ndSB7XG4gIGNvbG9yOiAjYWFhYWFhOyB9XG5cbi8qIEdlbmVyaWMuU3ViaGVhZGluZyAqL1xuLmhpZ2hsaWdodCAuZ3Qge1xuICBjb2xvcjogI2FhMDAwMDsgfVxuXG4vKiBHZW5lcmljLlRyYWNlYmFjayAqL1xuLmhpZ2hsaWdodCAua2Mge1xuICBmb250LXdlaWdodDogYm9sZDsgfVxuXG4vKiBLZXl3b3JkLkNvbnN0YW50ICovXG4uaGlnaGxpZ2h0IC5rZCB7XG4gIGZvbnQtd2VpZ2h0OiBib2xkOyB9XG5cbi8qIEtleXdvcmQuRGVjbGFyYXRpb24gKi9cbi5oaWdobGlnaHQgLmtwIHtcbiAgZm9udC13ZWlnaHQ6IGJvbGQ7IH1cblxuLyogS2V5d29yZC5Qc2V1ZG8gKi9cbi5oaWdobGlnaHQgLmtyIHtcbiAgZm9udC13ZWlnaHQ6IGJvbGQ7IH1cblxuLyogS2V5d29yZC5SZXNlcnZlZCAqL1xuLmhpZ2hsaWdodCAua3Qge1xuICBjb2xvcjogIzQ0NTU4ODtcbiAgZm9udC13ZWlnaHQ6IGJvbGQ7IH1cblxuLyogS2V5d29yZC5UeXBlICovXG4uaGlnaGxpZ2h0IC5tIHtcbiAgY29sb3I6ICMwMDk5OTk7IH1cblxuLyogTGl0ZXJhbC5OdW1iZXIgKi9cbi5oaWdobGlnaHQgLnMge1xuICBjb2xvcjogI2QxNDsgfVxuXG4vKiBMaXRlcmFsLlN0cmluZyAqL1xuLmhpZ2hsaWdodCAubmEge1xuICBjb2xvcjogIzAwODA4MDsgfVxuXG4vKiBOYW1lLkF0dHJpYnV0ZSAqL1xuLmhpZ2hsaWdodCAubmIge1xuICBjb2xvcjogIzAwODZCMzsgfVxuXG4vKiBOYW1lLkJ1aWx0aW4gKi9cbi5oaWdobGlnaHQgLm5jIHtcbiAgY29sb3I6ICM0NDU1ODg7XG4gIGZvbnQtd2VpZ2h0OiBib2xkOyB9XG5cbi8qIE5hbWUuQ2xhc3MgKi9cbi5oaWdobGlnaHQgLm5vIHtcbiAgY29sb3I6ICMwMDgwODA7IH1cblxuLyogTmFtZS5Db25zdGFudCAqL1xuLmhpZ2hsaWdodCAubmkge1xuICBjb2xvcjogIzgwMDA4MDsgfVxuXG4vKiBOYW1lLkVudGl0eSAqL1xuLmhpZ2hsaWdodCAubmUge1xuICBjb2xvcjogIzk5MDAwMDtcbiAgZm9udC13ZWlnaHQ6IGJvbGQ7IH1cblxuLyogTmFtZS5FeGNlcHRpb24gKi9cbi5oaWdobGlnaHQgLm5mIHtcbiAgY29sb3I6ICM5OTAwMDA7XG4gIGZvbnQtd2VpZ2h0OiBib2xkOyB9XG5cbi8qIE5hbWUuRnVuY3Rpb24gKi9cbi5oaWdobGlnaHQgLm5uIHtcbiAgY29sb3I6ICM1NTU1NTU7IH1cblxuLyogTmFtZS5OYW1lc3BhY2UgKi9cbi5oaWdobGlnaHQgLm50IHtcbiAgY29sb3I6ICMwMDAwODA7IH1cblxuLyogTmFtZS5UYWcgKi9cbi5oaWdobGlnaHQgLm52IHtcbiAgY29sb3I6ICMwMDgwODA7IH1cblxuLyogTmFtZS5WYXJpYWJsZSAqL1xuLmhpZ2hsaWdodCAub3cge1xuICBmb250LXdlaWdodDogYm9sZDsgfVxuXG4vKiBPcGVyYXRvci5Xb3JkICovXG4uaGlnaGxpZ2h0IC53IHtcbiAgY29sb3I6ICNiYmJiYmI7IH1cblxuLyogVGV4dC5XaGl0ZXNwYWNlICovXG4uaGlnaGxpZ2h0IC5tZiB7XG4gIGNvbG9yOiAjMDA5OTk5OyB9XG5cbi8qIExpdGVyYWwuTnVtYmVyLkZsb2F0ICovXG4uaGlnaGxpZ2h0IC5taCB7XG4gIGNvbG9yOiAjMDA5OTk5OyB9XG5cbi8qIExpdGVyYWwuTnVtYmVyLkhleCAqL1xuLmhpZ2hsaWdodCAubWkge1xuICBjb2xvcjogIzAwOTk5OTsgfVxuXG4vKiBMaXRlcmFsLk51bWJlci5JbnRlZ2VyICovXG4uaGlnaGxpZ2h0IC5tbyB7XG4gIGNvbG9yOiAjMDA5OTk5OyB9XG5cbi8qIExpdGVyYWwuTnVtYmVyLk9jdCAqL1xuLmhpZ2hsaWdodCAuc2Ige1xuICBjb2xvcjogI2QxNDsgfVxuXG4vKiBMaXRlcmFsLlN0cmluZy5CYWNrdGljayAqL1xuLmhpZ2hsaWdodCAuc2Mge1xuICBjb2xvcjogI2QxNDsgfVxuXG4vKiBMaXRlcmFsLlN0cmluZy5DaGFyICovXG4uaGlnaGxpZ2h0IC5zZCB7XG4gIGNvbG9yOiAjZDE0OyB9XG5cbi8qIExpdGVyYWwuU3RyaW5nLkRvYyAqL1xuLmhpZ2hsaWdodCAuczIge1xuICBjb2xvcjogI2QxNDsgfVxuXG4vKiBMaXRlcmFsLlN0cmluZy5Eb3VibGUgKi9cbi5oaWdobGlnaHQgLnNlIHtcbiAgY29sb3I6ICNkMTQ7IH1cblxuLyogTGl0ZXJhbC5TdHJpbmcuRXNjYXBlICovXG4uaGlnaGxpZ2h0IC5zaCB7XG4gIGNvbG9yOiAjZDE0OyB9XG5cbi8qIExpdGVyYWwuU3RyaW5nLkhlcmVkb2MgKi9cbi5oaWdobGlnaHQgLnNpIHtcbiAgY29sb3I6ICNkMTQ7IH1cblxuLyogTGl0ZXJhbC5TdHJpbmcuSW50ZXJwb2wgKi9cbi5oaWdobGlnaHQgLnN4IHtcbiAgY29sb3I6ICNkMTQ7IH1cblxuLyogTGl0ZXJhbC5TdHJpbmcuT3RoZXIgKi9cbi5oaWdobGlnaHQgLnNyIHtcbiAgY29sb3I6ICMwMDk5MjY7IH1cblxuLyogTGl0ZXJhbC5TdHJpbmcuUmVnZXggKi9cbi5oaWdobGlnaHQgLnMxIHtcbiAgY29sb3I6ICNkMTQ7IH1cblxuLyogTGl0ZXJhbC5TdHJpbmcuU2luZ2xlICovXG4uaGlnaGxpZ2h0IC5zcyB7XG4gIGNvbG9yOiAjOTkwMDczOyB9XG5cbi8qIExpdGVyYWwuU3RyaW5nLlN5bWJvbCAqL1xuLmhpZ2hsaWdodCAuYnAge1xuICBjb2xvcjogIzk5OTk5OTsgfVxuXG4vKiBOYW1lLkJ1aWx0aW4uUHNldWRvICovXG4uaGlnaGxpZ2h0IC52YyB7XG4gIGNvbG9yOiAjMDA4MDgwOyB9XG5cbi8qIE5hbWUuVmFyaWFibGUuQ2xhc3MgKi9cbi5oaWdobGlnaHQgLnZnIHtcbiAgY29sb3I6ICMwMDgwODA7IH1cblxuLyogTmFtZS5WYXJpYWJsZS5HbG9iYWwgKi9cbi5oaWdobGlnaHQgLnZpIHtcbiAgY29sb3I6ICMwMDgwODA7IH1cblxuLyogTmFtZS5WYXJpYWJsZS5JbnN0YW5jZSAqL1xuLmhpZ2hsaWdodCAuaWwge1xuICBjb2xvcjogIzAwOTk5OTsgfVxuXG4vKiBMaXRlcmFsLk51bWJlci5JbnRlZ2VyLkxvbmcgKi9cbiJdfQ== */\n"
  },
  {
    "path": "content/css/site.css",
    "content": "@charset \"UTF-8\";\n/*!\n * Bootstrap v3.0.0\n *\n * Copyright 2013 Twitter, Inc\n * Licensed under the Apache License v2.0\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Designed and built with all the love in the world by @mdo and @fat.\n */\n/*! normalize.css v2.1.0 | MIT License | git.io/normalize */\narticle,\naside,\ndetails,\nfigcaption,\nfigure,\nfooter,\nheader,\nhgroup,\nmain,\nnav,\nsection,\nsummary {\n  display: block; }\n\naudio,\ncanvas,\nvideo {\n  display: inline-block; }\n\naudio:not([controls]) {\n  display: none;\n  height: 0; }\n\n[hidden] {\n  display: none; }\n\nhtml {\n  font-family: sans-serif;\n  -webkit-text-size-adjust: 100%;\n  -ms-text-size-adjust: 100%; }\n\nbody {\n  margin: 0; }\n\na:focus {\n  outline: thin dotted; }\n\na:active,\na:hover {\n  outline: 0; }\n\nh1 {\n  font-size: 2em;\n  margin: 0.67em 0; }\n\nabbr[title] {\n  border-bottom: 1px dotted; }\n\nb,\nstrong {\n  font-weight: bold; }\n\ndfn {\n  font-style: italic; }\n\nhr {\n  box-sizing: content-box;\n  height: 0; }\n\nmark {\n  background: #ff0;\n  color: #000; }\n\ncode,\nkbd,\npre,\nsamp {\n  font-family: monospace, serif;\n  font-size: 1em; }\n\npre {\n  white-space: pre-wrap; }\n\nq {\n  quotes: \"\\201C\" \"\\201D\" \"\\2018\" \"\\2019\"; }\n\nsmall {\n  font-size: 80%; }\n\nsub,\nsup {\n  font-size: 75%;\n  line-height: 0;\n  position: relative;\n  vertical-align: baseline; }\n\nsup {\n  top: -0.5em; }\n\nsub {\n  bottom: -0.25em; }\n\nimg {\n  border: 0; }\n\nsvg:not(:root) {\n  overflow: hidden; }\n\nfigure {\n  margin: 0; }\n\nfieldset {\n  border: 1px solid #c0c0c0;\n  margin: 0 2px;\n  padding: 0.35em 0.625em 0.75em; }\n\nlegend {\n  border: 0;\n  padding: 0; }\n\nbutton,\ninput,\nselect,\ntextarea {\n  font-family: inherit;\n  font-size: 100%;\n  margin: 0; }\n\nbutton,\ninput {\n  line-height: normal; }\n\nbutton,\nselect {\n  text-transform: none; }\n\nbutton,\nhtml input[type=\"button\"],\ninput[type=\"reset\"],\ninput[type=\"submit\"] {\n  -webkit-appearance: button;\n  cursor: pointer; }\n\nbutton[disabled],\nhtml input[disabled] {\n  cursor: default; }\n\ninput[type=\"checkbox\"],\ninput[type=\"radio\"] {\n  box-sizing: border-box;\n  padding: 0; }\n\ninput[type=\"search\"] {\n  -webkit-appearance: textfield;\n  box-sizing: content-box; }\n\ninput[type=\"search\"]::-webkit-search-cancel-button,\ninput[type=\"search\"]::-webkit-search-decoration {\n  -webkit-appearance: none; }\n\nbutton::-moz-focus-inner,\ninput::-moz-focus-inner {\n  border: 0;\n  padding: 0; }\n\ntextarea {\n  overflow: auto;\n  vertical-align: top; }\n\ntable {\n  border-collapse: collapse;\n  border-spacing: 0; }\n\n@media print {\n  * {\n    text-shadow: none !important;\n    color: #000 !important;\n    background: transparent !important;\n    box-shadow: none !important; }\n  a,\n  a:visited {\n    text-decoration: underline; }\n  a[href]:after {\n    content: \" (\" attr(href) \")\"; }\n  abbr[title]:after {\n    content: \" (\" attr(title) \")\"; }\n  .ir a:after,\n  a[href^=\"javascript:\"]:after,\n  a[href^=\"#\"]:after {\n    content: \"\"; }\n  pre,\n  blockquote {\n    border: 1px solid #999;\n    page-break-inside: avoid; }\n  thead {\n    display: table-header-group; }\n  tr,\n  img {\n    page-break-inside: avoid; }\n  img {\n    max-width: 100% !important; }\n  @page {\n    margin: 2cm .5cm; }\n  p,\n  h2,\n  h3 {\n    orphans: 3;\n    widows: 3; }\n  h2,\n  h3 {\n    page-break-after: avoid; }\n  .navbar {\n    display: none; }\n  .table td,\n  .table th {\n    background-color: #fff !important; }\n  .btn > .caret,\n  .dropup > .btn > .caret {\n    border-top-color: #000 !important; }\n  .label {\n    border: 1px solid #000; }\n  .table {\n    border-collapse: collapse !important; }\n  .table-bordered th,\n  .table-bordered td {\n    border: 1px solid #ddd !important; } }\n\n*,\n*:before,\n*:after {\n  box-sizing: border-box; }\n\nhtml {\n  font-size: 62.5%;\n  -webkit-tap-highlight-color: rgba(0, 0, 0, 0); }\n\nbody {\n  font-family: \"Helvetica Neue\", Helvetica, Arial, \"Lucida Grande\", sans-serif;\n  font-size: 15px;\n  line-height: 1.42857;\n  color: #333;\n  background-color: #fff; }\n\ninput,\nbutton,\nselect,\ntextarea {\n  font-family: inherit;\n  font-size: inherit;\n  line-height: inherit; }\n\nbutton,\ninput,\nselect[multiple],\ntextarea {\n  background-image: none; }\n\na {\n  color: #4F8EF7;\n  text-decoration: none; }\n  a:hover, a:focus {\n    color: #0b60ef;\n    text-decoration: underline; }\n  a:focus {\n    outline: none; }\n\nimg {\n  vertical-align: middle; }\n\n.img-responsive {\n  display: block;\n  max-width: 100%;\n  height: auto; }\n\n.img-rounded {\n  border-radius: 6px; }\n\n.img-thumbnail, .thumbnail {\n  padding: 4px;\n  line-height: 1.42857;\n  background-color: #fff;\n  border: 1px solid #ddd;\n  border-radius: 2px;\n  transition: all 0.2s ease-in-out;\n  display: inline-block;\n  max-width: 100%;\n  height: auto; }\n\n.img-circle {\n  border-radius: 50%; }\n\nhr {\n  margin-top: 21px;\n  margin-bottom: 21px;\n  border: 0;\n  border-top: 1px solid #eeeeee; }\n\n.sr-only {\n  position: absolute;\n  width: 1px;\n  height: 1px;\n  margin: -1px;\n  padding: 0;\n  overflow: hidden;\n  clip: rect(0 0 0 0);\n  border: 0; }\n\np {\n  margin: 0 0 10.5px; }\n\n.lead {\n  margin-bottom: 21px;\n  font-size: 17.25px;\n  font-weight: 200;\n  line-height: 1.4; }\n  @media (min-width: 768px) {\n    .lead {\n      font-size: 22.5px; } }\n\nsmall {\n  font-size: 85%; }\n\ncite {\n  font-style: normal; }\n\n.text-muted {\n  color: #999999; }\n\n.text-primary {\n  color: #4F8EF7; }\n\n.text-warning {\n  color: #c09853; }\n\n.text-danger {\n  color: #b94a48; }\n\n.text-success {\n  color: #468847; }\n\n.text-info {\n  color: #3a87ad; }\n\n.text-left {\n  text-align: left; }\n\n.text-right {\n  text-align: right; }\n\n.text-center {\n  text-align: center; }\n\nh1, h2, h3, h4, h5, h6,\n.h1, .h2, .h3, .h4, .h5, .h6 {\n  font-family: \"Helvetica Neue\", Helvetica, Arial, \"Lucida Grande\", sans-serif;\n  font-weight: 500;\n  line-height: 1.1; }\n  h1 small, h2 small, h3 small, h4 small, h5 small, h6 small,\n  .h1 small, .h2 small, .h3 small, .h4 small, .h5 small, .h6 small {\n    font-weight: normal;\n    line-height: 1;\n    color: #999999; }\n\nh1,\nh2,\nh3 {\n  margin-top: 21px;\n  margin-bottom: 10.5px; }\n\nh4,\nh5,\nh6 {\n  margin-top: 10.5px;\n  margin-bottom: 10.5px; }\n\nh1, .h1 {\n  font-size: 32px; }\n\nh2, .h2 {\n  font-size: 26px; }\n\nh3, .h3 {\n  font-size: 22px; }\n\nh4, .h4 {\n  font-size: 19px; }\n\nh5, .h5 {\n  font-size: 17px; }\n\nh6, .h6 {\n  font-size: 15px; }\n\nh1 small, .h1 small {\n  font-size: 19px; }\n\nh2 small, .h2 small {\n  font-size: 17px; }\n\nh3 small, .h3 small,\nh4 small, .h4 small {\n  font-size: 15px; }\n\n.page-header {\n  padding-bottom: 9.5px;\n  margin: 42px 0 21px;\n  border-bottom: 1px solid #eeeeee; }\n\nul,\nol {\n  margin-top: 0;\n  margin-bottom: 10.5px; }\n  ul ul,\n  ul ol,\n  ol ul,\n  ol ol {\n    margin-bottom: 0; }\n\n.list-unstyled, .list-inline {\n  padding-left: 0;\n  list-style: none; }\n\n.list-inline > li {\n  display: inline-block;\n  padding-left: 5px;\n  padding-right: 5px; }\n\ndl {\n  margin-bottom: 21px; }\n\ndt,\ndd {\n  line-height: 1.42857; }\n\ndt {\n  font-weight: bold; }\n\ndd {\n  margin-left: 0; }\n\n@media (min-width: 768px) {\n  .dl-horizontal dt {\n    float: left;\n    width: 160px;\n    clear: left;\n    text-align: right;\n    overflow: hidden;\n    text-overflow: ellipsis;\n    white-space: nowrap; }\n  .dl-horizontal dd {\n    margin-left: 180px; }\n    .dl-horizontal dd:before, .dl-horizontal dd:after {\n      content: \" \";\n      /* 1 */\n      display: table;\n      /* 2 */ }\n    .dl-horizontal dd:after {\n      clear: both; } }\n\nabbr[title],\nabbr[data-original-title] {\n  cursor: help;\n  border-bottom: 1px dotted #999999; }\n\nabbr.initialism {\n  font-size: 90%;\n  text-transform: uppercase; }\n\nblockquote {\n  padding: 10.5px 21px;\n  margin: 0 0 21px;\n  border-left: 5px solid #eeeeee; }\n  blockquote p {\n    font-size: 18.75px;\n    font-weight: 300;\n    line-height: 1.25; }\n  blockquote p:last-child {\n    margin-bottom: 0; }\n  blockquote small {\n    display: block;\n    line-height: 1.42857;\n    color: #999999; }\n    blockquote small:before {\n      content: '\\2014 \\00A0'; }\n  blockquote.pull-right {\n    padding-right: 15px;\n    padding-left: 0;\n    border-right: 5px solid #eeeeee;\n    border-left: 0; }\n    blockquote.pull-right p,\n    blockquote.pull-right small {\n      text-align: right; }\n    blockquote.pull-right small:before {\n      content: ''; }\n    blockquote.pull-right small:after {\n      content: '\\00A0 \\2014'; }\n\nq:before,\nq:after,\nblockquote:before,\nblockquote:after {\n  content: \"\"; }\n\naddress {\n  display: block;\n  margin-bottom: 21px;\n  font-style: normal;\n  line-height: 1.42857; }\n\ncode,\npre {\n  font-family: Monaco, Menlo, Consolas, \"Courier New\", monospace; }\n\ncode {\n  margin-left: 3px;\n  margin-right: 3px;\n  padding: 2px 4px;\n  font-size: 85%;\n  color: #4D8CF4;\n  background-color: whitesmoke;\n  white-space: nowrap;\n  border-radius: 2px; }\n\npre {\n  display: block;\n  padding: 10px;\n  margin: 0 0 10.5px;\n  font-size: 14px;\n  line-height: 1.42857;\n  word-break: break-all;\n  word-wrap: break-word;\n  color: #333333;\n  background-color: transparent;\n  border: 1px solid #eee;\n  border-radius: 2px; }\n  pre.prettyprint {\n    margin-bottom: 21px; }\n  pre code {\n    padding: 0;\n    font-size: inherit;\n    color: inherit;\n    white-space: pre-wrap;\n    background-color: transparent;\n    border: 0; }\n\n.pre-scrollable {\n  max-height: 340px;\n  overflow-y: scroll; }\n\n.container {\n  margin-right: auto;\n  margin-left: auto;\n  padding-left: 15px;\n  padding-right: 15px; }\n  .container:before, .container:after {\n    content: \" \";\n    /* 1 */\n    display: table;\n    /* 2 */ }\n  .container:after {\n    clear: both; }\n\n.row {\n  margin-left: -15px;\n  margin-right: -15px; }\n  .row:before, .row:after {\n    content: \" \";\n    /* 1 */\n    display: table;\n    /* 2 */ }\n  .row:after {\n    clear: both; }\n\n.col-xs-1,\n.col-xs-2,\n.col-xs-3,\n.col-xs-4,\n.col-xs-5,\n.col-xs-6,\n.col-xs-7,\n.col-xs-8,\n.col-xs-9,\n.col-xs-10,\n.col-xs-11,\n.col-xs-12,\n.col-sm-1,\n.col-sm-2,\n.col-sm-3,\n.col-sm-4,\n.col-sm-5,\n.col-sm-6,\n.col-sm-7,\n.col-sm-8,\n.col-sm-9,\n.col-sm-10,\n.col-sm-11,\n.col-sm-12,\n.col-md-1,\n.col-md-2,\n.col-md-3,\n.col-md-4,\n.col-md-5,\n.col-md-6,\n.col-md-7,\n.col-md-8,\n.col-md-9,\n.col-md-10,\n.col-md-11,\n.col-md-12,\n.col-lg-1,\n.col-lg-2,\n.col-lg-3,\n.col-lg-4,\n.col-lg-5,\n.col-lg-6,\n.col-lg-7,\n.col-lg-8,\n.col-lg-9,\n.col-lg-10,\n.col-lg-11,\n.col-lg-12 {\n  position: relative;\n  min-height: 1px;\n  padding-left: 15px;\n  padding-right: 15px; }\n\n.col-xs-1,\n.col-xs-2,\n.col-xs-3,\n.col-xs-4,\n.col-xs-5,\n.col-xs-6,\n.col-xs-7,\n.col-xs-8,\n.col-xs-9,\n.col-xs-10,\n.col-xs-11 {\n  float: left; }\n\n.col-xs-1 {\n  width: 8.33333%; }\n\n.col-xs-2 {\n  width: 16.66667%; }\n\n.col-xs-3 {\n  width: 25%; }\n\n.col-xs-4 {\n  width: 33.33333%; }\n\n.col-xs-5 {\n  width: 41.66667%; }\n\n.col-xs-6 {\n  width: 50%; }\n\n.col-xs-7 {\n  width: 58.33333%; }\n\n.col-xs-8 {\n  width: 66.66667%; }\n\n.col-xs-9 {\n  width: 75%; }\n\n.col-xs-10 {\n  width: 83.33333%; }\n\n.col-xs-11 {\n  width: 91.66667%; }\n\n.col-xs-12 {\n  width: 100%; }\n\n@media (min-width: 768px) {\n  .container {\n    max-width: 750px; }\n  .col-sm-1,\n  .col-sm-2,\n  .col-sm-3,\n  .col-sm-4,\n  .col-sm-5,\n  .col-sm-6,\n  .col-sm-7,\n  .col-sm-8,\n  .col-sm-9,\n  .col-sm-10,\n  .col-sm-11 {\n    float: left; }\n  .col-sm-1 {\n    width: 8.33333%; }\n  .col-sm-2 {\n    width: 16.66667%; }\n  .col-sm-3 {\n    width: 25%; }\n  .col-sm-4 {\n    width: 33.33333%; }\n  .col-sm-5 {\n    width: 41.66667%; }\n  .col-sm-6 {\n    width: 50%; }\n  .col-sm-7 {\n    width: 58.33333%; }\n  .col-sm-8 {\n    width: 66.66667%; }\n  .col-sm-9 {\n    width: 75%; }\n  .col-sm-10 {\n    width: 83.33333%; }\n  .col-sm-11 {\n    width: 91.66667%; }\n  .col-sm-12 {\n    width: 100%; }\n  .col-sm-push-1 {\n    left: 8.33333%; }\n  .col-sm-push-2 {\n    left: 16.66667%; }\n  .col-sm-push-3 {\n    left: 25%; }\n  .col-sm-push-4 {\n    left: 33.33333%; }\n  .col-sm-push-5 {\n    left: 41.66667%; }\n  .col-sm-push-6 {\n    left: 50%; }\n  .col-sm-push-7 {\n    left: 58.33333%; }\n  .col-sm-push-8 {\n    left: 66.66667%; }\n  .col-sm-push-9 {\n    left: 75%; }\n  .col-sm-push-10 {\n    left: 83.33333%; }\n  .col-sm-push-11 {\n    left: 91.66667%; }\n  .col-sm-pull-1 {\n    right: 8.33333%; }\n  .col-sm-pull-2 {\n    right: 16.66667%; }\n  .col-sm-pull-3 {\n    right: 25%; }\n  .col-sm-pull-4 {\n    right: 33.33333%; }\n  .col-sm-pull-5 {\n    right: 41.66667%; }\n  .col-sm-pull-6 {\n    right: 50%; }\n  .col-sm-pull-7 {\n    right: 58.33333%; }\n  .col-sm-pull-8 {\n    right: 66.66667%; }\n  .col-sm-pull-9 {\n    right: 75%; }\n  .col-sm-pull-10 {\n    right: 83.33333%; }\n  .col-sm-pull-11 {\n    right: 91.66667%; }\n  .col-sm-offset-1 {\n    margin-left: 8.33333%; }\n  .col-sm-offset-2 {\n    margin-left: 16.66667%; }\n  .col-sm-offset-3 {\n    margin-left: 25%; }\n  .col-sm-offset-4 {\n    margin-left: 33.33333%; }\n  .col-sm-offset-5 {\n    margin-left: 41.66667%; }\n  .col-sm-offset-6 {\n    margin-left: 50%; }\n  .col-sm-offset-7 {\n    margin-left: 58.33333%; }\n  .col-sm-offset-8 {\n    margin-left: 66.66667%; }\n  .col-sm-offset-9 {\n    margin-left: 75%; }\n  .col-sm-offset-10 {\n    margin-left: 83.33333%; }\n  .col-sm-offset-11 {\n    margin-left: 91.66667%; } }\n\n@media (min-width: 992px) {\n  .container {\n    max-width: 970px; }\n  .col-md-1,\n  .col-md-2,\n  .col-md-3,\n  .col-md-4,\n  .col-md-5,\n  .col-md-6,\n  .col-md-7,\n  .col-md-8,\n  .col-md-9,\n  .col-md-10,\n  .col-md-11 {\n    float: left; }\n  .col-md-1 {\n    width: 8.33333%; }\n  .col-md-2 {\n    width: 16.66667%; }\n  .col-md-3 {\n    width: 25%; }\n  .col-md-4 {\n    width: 33.33333%; }\n  .col-md-5 {\n    width: 41.66667%; }\n  .col-md-6 {\n    width: 50%; }\n  .col-md-7 {\n    width: 58.33333%; }\n  .col-md-8 {\n    width: 66.66667%; }\n  .col-md-9 {\n    width: 75%; }\n  .col-md-10 {\n    width: 83.33333%; }\n  .col-md-11 {\n    width: 91.66667%; }\n  .col-md-12 {\n    width: 100%; }\n  .col-md-push-0 {\n    left: auto; }\n  .col-md-push-1 {\n    left: 8.33333%; }\n  .col-md-push-2 {\n    left: 16.66667%; }\n  .col-md-push-3 {\n    left: 25%; }\n  .col-md-push-4 {\n    left: 33.33333%; }\n  .col-md-push-5 {\n    left: 41.66667%; }\n  .col-md-push-6 {\n    left: 50%; }\n  .col-md-push-7 {\n    left: 58.33333%; }\n  .col-md-push-8 {\n    left: 66.66667%; }\n  .col-md-push-9 {\n    left: 75%; }\n  .col-md-push-10 {\n    left: 83.33333%; }\n  .col-md-push-11 {\n    left: 91.66667%; }\n  .col-md-pull-0 {\n    right: auto; }\n  .col-md-pull-1 {\n    right: 8.33333%; }\n  .col-md-pull-2 {\n    right: 16.66667%; }\n  .col-md-pull-3 {\n    right: 25%; }\n  .col-md-pull-4 {\n    right: 33.33333%; }\n  .col-md-pull-5 {\n    right: 41.66667%; }\n  .col-md-pull-6 {\n    right: 50%; }\n  .col-md-pull-7 {\n    right: 58.33333%; }\n  .col-md-pull-8 {\n    right: 66.66667%; }\n  .col-md-pull-9 {\n    right: 75%; }\n  .col-md-pull-10 {\n    right: 83.33333%; }\n  .col-md-pull-11 {\n    right: 91.66667%; }\n  .col-md-offset-0 {\n    margin-left: 0; }\n  .col-md-offset-1 {\n    margin-left: 8.33333%; }\n  .col-md-offset-2 {\n    margin-left: 16.66667%; }\n  .col-md-offset-3 {\n    margin-left: 25%; }\n  .col-md-offset-4 {\n    margin-left: 33.33333%; }\n  .col-md-offset-5 {\n    margin-left: 41.66667%; }\n  .col-md-offset-6 {\n    margin-left: 50%; }\n  .col-md-offset-7 {\n    margin-left: 58.33333%; }\n  .col-md-offset-8 {\n    margin-left: 66.66667%; }\n  .col-md-offset-9 {\n    margin-left: 75%; }\n  .col-md-offset-10 {\n    margin-left: 83.33333%; }\n  .col-md-offset-11 {\n    margin-left: 91.66667%; } }\n\n@media (min-width: 1200px) {\n  .container {\n    max-width: 1170px; }\n  .col-lg-1,\n  .col-lg-2,\n  .col-lg-3,\n  .col-lg-4,\n  .col-lg-5,\n  .col-lg-6,\n  .col-lg-7,\n  .col-lg-8,\n  .col-lg-9,\n  .col-lg-10,\n  .col-lg-11 {\n    float: left; }\n  .col-lg-1 {\n    width: 8.33333%; }\n  .col-lg-2 {\n    width: 16.66667%; }\n  .col-lg-3 {\n    width: 25%; }\n  .col-lg-4 {\n    width: 33.33333%; }\n  .col-lg-5 {\n    width: 41.66667%; }\n  .col-lg-6 {\n    width: 50%; }\n  .col-lg-7 {\n    width: 58.33333%; }\n  .col-lg-8 {\n    width: 66.66667%; }\n  .col-lg-9 {\n    width: 75%; }\n  .col-lg-10 {\n    width: 83.33333%; }\n  .col-lg-11 {\n    width: 91.66667%; }\n  .col-lg-12 {\n    width: 100%; }\n  .col-lg-push-0 {\n    left: auto; }\n  .col-lg-push-1 {\n    left: 8.33333%; }\n  .col-lg-push-2 {\n    left: 16.66667%; }\n  .col-lg-push-3 {\n    left: 25%; }\n  .col-lg-push-4 {\n    left: 33.33333%; }\n  .col-lg-push-5 {\n    left: 41.66667%; }\n  .col-lg-push-6 {\n    left: 50%; }\n  .col-lg-push-7 {\n    left: 58.33333%; }\n  .col-lg-push-8 {\n    left: 66.66667%; }\n  .col-lg-push-9 {\n    left: 75%; }\n  .col-lg-push-10 {\n    left: 83.33333%; }\n  .col-lg-push-11 {\n    left: 91.66667%; }\n  .col-lg-pull-0 {\n    right: auto; }\n  .col-lg-pull-1 {\n    right: 8.33333%; }\n  .col-lg-pull-2 {\n    right: 16.66667%; }\n  .col-lg-pull-3 {\n    right: 25%; }\n  .col-lg-pull-4 {\n    right: 33.33333%; }\n  .col-lg-pull-5 {\n    right: 41.66667%; }\n  .col-lg-pull-6 {\n    right: 50%; }\n  .col-lg-pull-7 {\n    right: 58.33333%; }\n  .col-lg-pull-8 {\n    right: 66.66667%; }\n  .col-lg-pull-9 {\n    right: 75%; }\n  .col-lg-pull-10 {\n    right: 83.33333%; }\n  .col-lg-pull-11 {\n    right: 91.66667%; }\n  .col-lg-offset-0 {\n    margin-left: 0; }\n  .col-lg-offset-1 {\n    margin-left: 8.33333%; }\n  .col-lg-offset-2 {\n    margin-left: 16.66667%; }\n  .col-lg-offset-3 {\n    margin-left: 25%; }\n  .col-lg-offset-4 {\n    margin-left: 33.33333%; }\n  .col-lg-offset-5 {\n    margin-left: 41.66667%; }\n  .col-lg-offset-6 {\n    margin-left: 50%; }\n  .col-lg-offset-7 {\n    margin-left: 58.33333%; }\n  .col-lg-offset-8 {\n    margin-left: 66.66667%; }\n  .col-lg-offset-9 {\n    margin-left: 75%; }\n  .col-lg-offset-10 {\n    margin-left: 83.33333%; }\n  .col-lg-offset-11 {\n    margin-left: 91.66667%; } }\n\ntable {\n  max-width: 100%;\n  background-color: transparent; }\n\nth {\n  text-align: left; }\n\n.table {\n  width: 100%;\n  margin-bottom: 21px; }\n  .table thead > tr > th,\n  .table thead > tr > td,\n  .table tbody > tr > th,\n  .table tbody > tr > td,\n  .table tfoot > tr > th,\n  .table tfoot > tr > td {\n    padding: 8px;\n    line-height: 1.42857;\n    vertical-align: top;\n    border-top: 1px solid #ddd; }\n  .table thead > tr > th {\n    vertical-align: bottom;\n    border-bottom: 2px solid #ddd; }\n  .table caption + thead tr:first-child th, .table caption + thead tr:first-child td,\n  .table colgroup + thead tr:first-child th,\n  .table colgroup + thead tr:first-child td,\n  .table thead:first-child tr:first-child th,\n  .table thead:first-child tr:first-child td {\n    border-top: 0; }\n  .table tbody + tbody {\n    border-top: 2px solid #ddd; }\n  .table .table {\n    background-color: #fff; }\n\n.table-condensed thead > tr > th,\n.table-condensed thead > tr > td,\n.table-condensed tbody > tr > th,\n.table-condensed tbody > tr > td,\n.table-condensed tfoot > tr > th,\n.table-condensed tfoot > tr > td {\n  padding: 5px; }\n\n.table-bordered {\n  border: 1px solid #ddd; }\n  .table-bordered > thead > tr > th,\n  .table-bordered > thead > tr > td,\n  .table-bordered > tbody > tr > th,\n  .table-bordered > tbody > tr > td,\n  .table-bordered > tfoot > tr > th,\n  .table-bordered > tfoot > tr > td {\n    border: 1px solid #ddd; }\n  .table-bordered > thead > tr > th,\n  .table-bordered > thead > tr > td {\n    border-bottom-width: 2px; }\n\n.table-striped > tbody > tr:nth-child(odd) > td,\n.table-striped > tbody > tr:nth-child(odd) > th {\n  background-color: #f9f9f9; }\n\n.table-hover > tbody > tr:hover > td,\n.table-hover > tbody > tr:hover > th {\n  background-color: #f5f5f5; }\n\ntable col[class*=\"col-\"] {\n  float: none;\n  display: table-column; }\n\ntable td[class*=\"col-\"],\ntable th[class*=\"col-\"] {\n  float: none;\n  display: table-cell; }\n\n.table > thead > tr > td.active,\n.table > thead > tr > th.active,\n.table > thead > tr.active > td,\n.table > thead > tr.active > th,\n.table > tbody > tr > td.active,\n.table > tbody > tr > th.active,\n.table > tbody > tr.active > td,\n.table > tbody > tr.active > th,\n.table > tfoot > tr > td.active,\n.table > tfoot > tr > th.active,\n.table > tfoot > tr.active > td,\n.table > tfoot > tr.active > th {\n  background-color: #f5f5f5; }\n\n.table > thead > tr > td.success,\n.table > thead > tr > th.success,\n.table > thead > tr.success > td,\n.table > thead > tr.success > th,\n.table > tbody > tr > td.success,\n.table > tbody > tr > th.success,\n.table > tbody > tr.success > td,\n.table > tbody > tr.success > th,\n.table > tfoot > tr > td.success,\n.table > tfoot > tr > th.success,\n.table > tfoot > tr.success > td,\n.table > tfoot > tr.success > th {\n  background-color: #dff0d8;\n  border-color: #d6e9c6; }\n\n.table-hover > tbody > tr > td.success:hover,\n.table-hover > tbody > tr > th.success:hover,\n.table-hover > tbody > tr.success:hover > td {\n  background-color: #d0e9c6;\n  border-color: #c9e2b3; }\n\n.table > thead > tr > td.danger,\n.table > thead > tr > th.danger,\n.table > thead > tr.danger > td,\n.table > thead > tr.danger > th,\n.table > tbody > tr > td.danger,\n.table > tbody > tr > th.danger,\n.table > tbody > tr.danger > td,\n.table > tbody > tr.danger > th,\n.table > tfoot > tr > td.danger,\n.table > tfoot > tr > th.danger,\n.table > tfoot > tr.danger > td,\n.table > tfoot > tr.danger > th {\n  background-color: #f2dede;\n  border-color: #eed3d7; }\n\n.table-hover > tbody > tr > td.danger:hover,\n.table-hover > tbody > tr > th.danger:hover,\n.table-hover > tbody > tr.danger:hover > td {\n  background-color: #ebcccc;\n  border-color: #e6c1c7; }\n\n.table > thead > tr > td.warning,\n.table > thead > tr > th.warning,\n.table > thead > tr.warning > td,\n.table > thead > tr.warning > th,\n.table > tbody > tr > td.warning,\n.table > tbody > tr > th.warning,\n.table > tbody > tr.warning > td,\n.table > tbody > tr.warning > th,\n.table > tfoot > tr > td.warning,\n.table > tfoot > tr > th.warning,\n.table > tfoot > tr.warning > td,\n.table > tfoot > tr.warning > th {\n  background-color: #fcf8e3;\n  border-color: #fbeed5; }\n\n.table-hover > tbody > tr > td.warning:hover,\n.table-hover > tbody > tr > th.warning:hover,\n.table-hover > tbody > tr.warning:hover > td {\n  background-color: #faf2cc;\n  border-color: #f8e5be; }\n\n@media (max-width: 768px) {\n  .table-responsive {\n    width: 100%;\n    margin-bottom: 15px;\n    overflow-y: hidden;\n    overflow-x: scroll;\n    border: 1px solid #ddd; }\n    .table-responsive > .table {\n      margin-bottom: 0;\n      background-color: #fff; }\n      .table-responsive > .table > thead > tr > th,\n      .table-responsive > .table > thead > tr > td,\n      .table-responsive > .table > tbody > tr > th,\n      .table-responsive > .table > tbody > tr > td,\n      .table-responsive > .table > tfoot > tr > th,\n      .table-responsive > .table > tfoot > tr > td {\n        white-space: nowrap; }\n    .table-responsive > .table-bordered {\n      border: 0; }\n      .table-responsive > .table-bordered > thead > tr > th:first-child,\n      .table-responsive > .table-bordered > thead > tr > td:first-child,\n      .table-responsive > .table-bordered > tbody > tr > th:first-child,\n      .table-responsive > .table-bordered > tbody > tr > td:first-child,\n      .table-responsive > .table-bordered > tfoot > tr > th:first-child,\n      .table-responsive > .table-bordered > tfoot > tr > td:first-child {\n        border-left: 0; }\n      .table-responsive > .table-bordered > thead > tr > th:last-child,\n      .table-responsive > .table-bordered > thead > tr > td:last-child,\n      .table-responsive > .table-bordered > tbody > tr > th:last-child,\n      .table-responsive > .table-bordered > tbody > tr > td:last-child,\n      .table-responsive > .table-bordered > tfoot > tr > th:last-child,\n      .table-responsive > .table-bordered > tfoot > tr > td:last-child {\n        border-right: 0; }\n      .table-responsive > .table-bordered > thead > tr:last-child > th,\n      .table-responsive > .table-bordered > thead > tr:last-child > td,\n      .table-responsive > .table-bordered > tbody > tr:last-child > th,\n      .table-responsive > .table-bordered > tbody > tr:last-child > td,\n      .table-responsive > .table-bordered > tfoot > tr:last-child > th,\n      .table-responsive > .table-bordered > tfoot > tr:last-child > td {\n        border-bottom: 0; } }\n\nfieldset {\n  padding: 0;\n  margin: 0;\n  border: 0; }\n\nlegend {\n  display: block;\n  width: 100%;\n  padding: 0;\n  margin-bottom: 21px;\n  font-size: 22.5px;\n  line-height: inherit;\n  color: #333333;\n  border: 0;\n  border-bottom: 1px solid #e5e5e5; }\n\nlabel {\n  display: inline-block;\n  margin-bottom: 5px;\n  font-weight: bold; }\n\ninput[type=\"search\"] {\n  box-sizing: border-box; }\n\ninput[type=\"radio\"],\ninput[type=\"checkbox\"] {\n  margin: 4px 0 0;\n  margin-top: 1px \\9;\n  /* IE8-9 */\n  line-height: normal; }\n\ninput[type=\"file\"] {\n  display: block; }\n\nselect[multiple],\nselect[size] {\n  height: auto; }\n\nselect optgroup {\n  font-size: inherit;\n  font-style: inherit;\n  font-family: inherit; }\n\ninput[type=\"file\"]:focus,\ninput[type=\"radio\"]:focus,\ninput[type=\"checkbox\"]:focus {\n  outline: none; }\n\ninput[type=\"number\"]::-webkit-outer-spin-button, input[type=\"number\"]::-webkit-inner-spin-button {\n  height: auto; }\n\n.form-control:-moz-placeholder {\n  color: #999999; }\n\n.form-control::-moz-placeholder {\n  color: #999999; }\n\n.form-control:-ms-input-placeholder {\n  color: #999999; }\n\n.form-control::-webkit-input-placeholder {\n  color: #999999; }\n\n.form-control {\n  display: block;\n  width: 100%;\n  height: 35px;\n  padding: 6px 12px;\n  font-size: 15px;\n  line-height: 1.42857;\n  color: #555555;\n  vertical-align: middle;\n  background-color: #fff;\n  border: 1px solid #ccc;\n  border-radius: 2px;\n  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n  transition: border-color ease-in-out 0.15s, box-shadow ease-in-out 0.15s; }\n  .form-control:focus {\n    border-color: #66afe9;\n    outline: 0;\n    box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(102, 175, 233, 0.6); }\n  .form-control[disabled], .form-control[readonly],\n  fieldset[disabled] .form-control {\n    cursor: not-allowed;\n    background-color: #eeeeee; }\n\ntextarea.form-control {\n  height: auto; }\n\n.form-group {\n  margin-bottom: 15px; }\n\n.radio,\n.checkbox {\n  display: block;\n  min-height: 21px;\n  margin-top: 10px;\n  margin-bottom: 10px;\n  padding-left: 20px;\n  vertical-align: middle; }\n  .radio label,\n  .checkbox label {\n    display: inline;\n    margin-bottom: 0;\n    font-weight: normal;\n    cursor: pointer; }\n\n.radio input[type=\"radio\"],\n.radio-inline input[type=\"radio\"],\n.checkbox input[type=\"checkbox\"],\n.checkbox-inline input[type=\"checkbox\"] {\n  float: left;\n  margin-left: -20px; }\n\n.radio + .radio,\n.checkbox + .checkbox {\n  margin-top: -5px; }\n\n.radio-inline,\n.checkbox-inline {\n  display: inline-block;\n  padding-left: 20px;\n  margin-bottom: 0;\n  vertical-align: middle;\n  font-weight: normal;\n  cursor: pointer; }\n\n.radio-inline + .radio-inline,\n.checkbox-inline + .checkbox-inline {\n  margin-top: 0;\n  margin-left: 10px; }\n\ninput[type=\"radio\"][disabled],\nfieldset[disabled] input[type=\"radio\"],\ninput[type=\"checkbox\"][disabled],\nfieldset[disabled]\ninput[type=\"checkbox\"],\n.radio[disabled],\nfieldset[disabled]\n.radio,\n.radio-inline[disabled],\nfieldset[disabled]\n.radio-inline,\n.checkbox[disabled],\nfieldset[disabled]\n.checkbox,\n.checkbox-inline[disabled],\nfieldset[disabled]\n.checkbox-inline {\n  cursor: not-allowed; }\n\n.input-sm, .input-group-sm > .form-control,\n.input-group-sm > .input-group-addon,\n.input-group-sm > .input-group-btn > .btn {\n  height: 31px;\n  padding: 5px 10px;\n  font-size: 13px;\n  line-height: 1.5;\n  border-radius: 3px; }\n\nselect.input-sm, .input-group-sm > select.form-control,\n.input-group-sm > select.input-group-addon,\n.input-group-sm > .input-group-btn > select.btn {\n  height: 31px;\n  line-height: 31px; }\n\ntextarea.input-sm, .input-group-sm > textarea.form-control,\n.input-group-sm > textarea.input-group-addon,\n.input-group-sm > .input-group-btn > textarea.btn {\n  height: auto; }\n\n.input-lg, .input-group-lg > .form-control,\n.input-group-lg > .input-group-addon,\n.input-group-lg > .input-group-btn > .btn {\n  height: 47px;\n  padding: 10px 16px;\n  font-size: 19px;\n  line-height: 1.33;\n  border-radius: 6px; }\n\nselect.input-lg, .input-group-lg > select.form-control,\n.input-group-lg > select.input-group-addon,\n.input-group-lg > .input-group-btn > select.btn {\n  height: 47px;\n  line-height: 47px; }\n\ntextarea.input-lg, .input-group-lg > textarea.form-control,\n.input-group-lg > textarea.input-group-addon,\n.input-group-lg > .input-group-btn > textarea.btn {\n  height: auto; }\n\n.has-warning .help-block,\n.has-warning .control-label {\n  color: #c09853; }\n\n.has-warning .form-control {\n  border-color: #c09853;\n  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); }\n  .has-warning .form-control:focus {\n    border-color: #a47e3c;\n    box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #dbc59e; }\n\n.has-warning .input-group-addon {\n  color: #c09853;\n  border-color: #c09853;\n  background-color: #fcf8e3; }\n\n.has-error .help-block,\n.has-error .control-label {\n  color: #b94a48; }\n\n.has-error .form-control {\n  border-color: #b94a48;\n  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); }\n  .has-error .form-control:focus {\n    border-color: #953b39;\n    box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #d59392; }\n\n.has-error .input-group-addon {\n  color: #b94a48;\n  border-color: #b94a48;\n  background-color: #f2dede; }\n\n.has-success .help-block,\n.has-success .control-label {\n  color: #468847; }\n\n.has-success .form-control {\n  border-color: #468847;\n  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); }\n  .has-success .form-control:focus {\n    border-color: #356635;\n    box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #7aba7b; }\n\n.has-success .input-group-addon {\n  color: #468847;\n  border-color: #468847;\n  background-color: #dff0d8; }\n\n.form-control-static {\n  margin-bottom: 0;\n  padding-top: 7px; }\n\n.help-block {\n  display: block;\n  margin-top: 5px;\n  margin-bottom: 10px;\n  color: #737373; }\n\n@media (min-width: 768px) {\n  .form-inline .form-group, .navbar-form .form-group {\n    display: inline-block;\n    margin-bottom: 0;\n    vertical-align: middle; }\n  .form-inline .form-control, .navbar-form .form-control {\n    display: inline-block; }\n  .form-inline .radio, .navbar-form .radio,\n  .form-inline .checkbox,\n  .navbar-form .checkbox {\n    display: inline-block;\n    margin-top: 0;\n    margin-bottom: 0;\n    padding-left: 0; }\n  .form-inline .radio input[type=\"radio\"], .navbar-form .radio input[type=\"radio\"],\n  .form-inline .checkbox input[type=\"checkbox\"],\n  .navbar-form .checkbox input[type=\"checkbox\"] {\n    float: none;\n    margin-left: 0; } }\n\n.form-horizontal .control-label,\n.form-horizontal .radio,\n.form-horizontal .checkbox,\n.form-horizontal .radio-inline,\n.form-horizontal .checkbox-inline {\n  margin-top: 0;\n  margin-bottom: 0;\n  padding-top: 7px; }\n\n.form-horizontal .form-group {\n  margin-left: -15px;\n  margin-right: -15px; }\n  .form-horizontal .form-group:before, .form-horizontal .form-group:after {\n    content: \" \";\n    /* 1 */\n    display: table;\n    /* 2 */ }\n  .form-horizontal .form-group:after {\n    clear: both; }\n\n@media (min-width: 768px) {\n  .form-horizontal .control-label {\n    text-align: right; } }\n\n.btn {\n  display: inline-block;\n  padding: 6px 12px;\n  margin-bottom: 0;\n  font-family: \"AvenirNextLTPro-Regular\", \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n  font-weight: normal;\n  font-size: 15px;\n  line-height: 1.42857;\n  text-align: center;\n  vertical-align: middle;\n  cursor: pointer;\n  border: 1px solid transparent;\n  border-radius: 2px;\n  white-space: nowrap;\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  -ms-user-select: none;\n  -o-user-select: none;\n  user-select: none; }\n  .btn:focus {\n    outline: none; }\n  .btn:hover, .btn:focus {\n    color: #333;\n    text-decoration: none; }\n  .btn:active, .btn.active {\n    outline: 0;\n    background-image: none;\n    box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); }\n  .btn.disabled, .btn[disabled],\n  fieldset[disabled] .btn {\n    cursor: not-allowed;\n    pointer-events: none;\n    opacity: 0.65;\n    filter: alpha(opacity=65);\n    box-shadow: none; }\n\n.btn-default {\n  color: #333;\n  background-color: #fff;\n  transition: background-color .1s ease-in-out; }\n  .btn-default:hover, .btn-default:focus, .btn-default:active, .btn-default.active {\n    color: #333;\n    background-color: #ebebeb; }\n  .open .btn-default.dropdown-toggle {\n    color: #333;\n    background-color: #ebebeb;\n    border-color: #adadad; }\n  .btn-default:active, .btn-default.active {\n    background-image: none; }\n  .open .btn-default.dropdown-toggle {\n    background-image: none; }\n  .btn-default.disabled, .btn-default.disabled:hover, .btn-default.disabled:focus, .btn-default.disabled:active, .btn-default.disabled.active, .btn-default[disabled], .btn-default[disabled]:hover, .btn-default[disabled]:focus, .btn-default[disabled]:active, .btn-default[disabled].active,\n  fieldset[disabled] .btn-default,\n  fieldset[disabled] .btn-default:hover,\n  fieldset[disabled] .btn-default:focus,\n  fieldset[disabled] .btn-default:active,\n  fieldset[disabled] .btn-default.active {\n    background-color: #fff;\n    border-color: #ccc; }\n\n.btn-primary {\n  color: #fff;\n  background-color: #4F8EF7;\n  transition: background-color .1s ease-in-out; }\n  .btn-primary:hover, .btn-primary:focus, .btn-primary:active, .btn-primary.active {\n    color: #fff;\n    background-color: #2875f5; }\n  .open .btn-primary.dropdown-toggle {\n    color: #fff;\n    background-color: #2875f5;\n    border-color: #1468f4; }\n  .btn-primary:active, .btn-primary.active {\n    background-image: none; }\n  .open .btn-primary.dropdown-toggle {\n    background-image: none; }\n  .btn-primary.disabled, .btn-primary.disabled:hover, .btn-primary.disabled:focus, .btn-primary.disabled:active, .btn-primary.disabled.active, .btn-primary[disabled], .btn-primary[disabled]:hover, .btn-primary[disabled]:focus, .btn-primary[disabled]:active, .btn-primary[disabled].active,\n  fieldset[disabled] .btn-primary,\n  fieldset[disabled] .btn-primary:hover,\n  fieldset[disabled] .btn-primary:focus,\n  fieldset[disabled] .btn-primary:active,\n  fieldset[disabled] .btn-primary.active {\n    background-color: #4F8EF7;\n    border-color: #4F8EF7; }\n\n.btn-warning {\n  color: #fff;\n  background-color: #f0ad4e;\n  transition: background-color .1s ease-in-out; }\n  .btn-warning:hover, .btn-warning:focus, .btn-warning:active, .btn-warning.active {\n    color: #fff;\n    background-color: #ed9c28; }\n  .open .btn-warning.dropdown-toggle {\n    color: #fff;\n    background-color: #ed9c28;\n    border-color: #d58512; }\n  .btn-warning:active, .btn-warning.active {\n    background-image: none; }\n  .open .btn-warning.dropdown-toggle {\n    background-image: none; }\n  .btn-warning.disabled, .btn-warning.disabled:hover, .btn-warning.disabled:focus, .btn-warning.disabled:active, .btn-warning.disabled.active, .btn-warning[disabled], .btn-warning[disabled]:hover, .btn-warning[disabled]:focus, .btn-warning[disabled]:active, .btn-warning[disabled].active,\n  fieldset[disabled] .btn-warning,\n  fieldset[disabled] .btn-warning:hover,\n  fieldset[disabled] .btn-warning:focus,\n  fieldset[disabled] .btn-warning:active,\n  fieldset[disabled] .btn-warning.active {\n    background-color: #f0ad4e;\n    border-color: #eea236; }\n\n.btn-danger {\n  color: #fff;\n  background-color: #d9534f;\n  transition: background-color .1s ease-in-out; }\n  .btn-danger:hover, .btn-danger:focus, .btn-danger:active, .btn-danger.active {\n    color: #fff;\n    background-color: #d2322d; }\n  .open .btn-danger.dropdown-toggle {\n    color: #fff;\n    background-color: #d2322d;\n    border-color: #ac2925; }\n  .btn-danger:active, .btn-danger.active {\n    background-image: none; }\n  .open .btn-danger.dropdown-toggle {\n    background-image: none; }\n  .btn-danger.disabled, .btn-danger.disabled:hover, .btn-danger.disabled:focus, .btn-danger.disabled:active, .btn-danger.disabled.active, .btn-danger[disabled], .btn-danger[disabled]:hover, .btn-danger[disabled]:focus, .btn-danger[disabled]:active, .btn-danger[disabled].active,\n  fieldset[disabled] .btn-danger,\n  fieldset[disabled] .btn-danger:hover,\n  fieldset[disabled] .btn-danger:focus,\n  fieldset[disabled] .btn-danger:active,\n  fieldset[disabled] .btn-danger.active {\n    background-color: #d9534f;\n    border-color: #d43f3a; }\n\n.btn-success {\n  color: #fff;\n  background-color: #5cb85c;\n  transition: background-color .1s ease-in-out; }\n  .btn-success:hover, .btn-success:focus, .btn-success:active, .btn-success.active {\n    color: #fff;\n    background-color: #47a447; }\n  .open .btn-success.dropdown-toggle {\n    color: #fff;\n    background-color: #47a447;\n    border-color: #398439; }\n  .btn-success:active, .btn-success.active {\n    background-image: none; }\n  .open .btn-success.dropdown-toggle {\n    background-image: none; }\n  .btn-success.disabled, .btn-success.disabled:hover, .btn-success.disabled:focus, .btn-success.disabled:active, .btn-success.disabled.active, .btn-success[disabled], .btn-success[disabled]:hover, .btn-success[disabled]:focus, .btn-success[disabled]:active, .btn-success[disabled].active,\n  fieldset[disabled] .btn-success,\n  fieldset[disabled] .btn-success:hover,\n  fieldset[disabled] .btn-success:focus,\n  fieldset[disabled] .btn-success:active,\n  fieldset[disabled] .btn-success.active {\n    background-color: #5cb85c;\n    border-color: #4cae4c; }\n\n.btn-info {\n  color: #fff;\n  background-color: #5bc0de;\n  transition: background-color .1s ease-in-out; }\n  .btn-info:hover, .btn-info:focus, .btn-info:active, .btn-info.active {\n    color: #fff;\n    background-color: #39b3d7; }\n  .open .btn-info.dropdown-toggle {\n    color: #fff;\n    background-color: #39b3d7;\n    border-color: #269abc; }\n  .btn-info:active, .btn-info.active {\n    background-image: none; }\n  .open .btn-info.dropdown-toggle {\n    background-image: none; }\n  .btn-info.disabled, .btn-info.disabled:hover, .btn-info.disabled:focus, .btn-info.disabled:active, .btn-info.disabled.active, .btn-info[disabled], .btn-info[disabled]:hover, .btn-info[disabled]:focus, .btn-info[disabled]:active, .btn-info[disabled].active,\n  fieldset[disabled] .btn-info,\n  fieldset[disabled] .btn-info:hover,\n  fieldset[disabled] .btn-info:focus,\n  fieldset[disabled] .btn-info:active,\n  fieldset[disabled] .btn-info.active {\n    background-color: #5bc0de;\n    border-color: #46b8da; }\n\n.btn-link {\n  color: #4F8EF7;\n  font-weight: normal;\n  cursor: pointer;\n  border-radius: 0; }\n  .btn-link, .btn-link:active, .btn-link[disabled],\n  fieldset[disabled] .btn-link {\n    background-color: transparent;\n    box-shadow: none; }\n  .btn-link, .btn-link:hover, .btn-link:focus, .btn-link:active {\n    border-color: transparent; }\n  .btn-link:hover, .btn-link:focus {\n    color: #0b60ef;\n    text-decoration: underline;\n    background-color: transparent; }\n  .btn-link[disabled]:hover, .btn-link[disabled]:focus,\n  fieldset[disabled] .btn-link:hover,\n  fieldset[disabled] .btn-link:focus {\n    color: #999999;\n    text-decoration: none; }\n\n.btn-lg, .btn-group-lg > .btn {\n  padding: 10px 16px;\n  font-size: 19px;\n  line-height: 1.33;\n  border-radius: 6px; }\n\n.btn-sm, .btn-group-sm > .btn,\n.btn-xs,\n.btn-group-xs > .btn {\n  padding: 5px 10px;\n  font-size: 13px;\n  line-height: 1.5;\n  border-radius: 3px; }\n\n\n.btn-xs,\n.btn-group-xs > .btn {\n  padding: 1px 5px; }\n\n.btn-block {\n  display: block;\n  width: 100%;\n  padding-left: 0;\n  padding-right: 0; }\n\n.btn-block + .btn-block {\n  margin-top: 5px; }\n\ninput[type=\"submit\"].btn-block,\ninput[type=\"reset\"].btn-block,\ninput[type=\"button\"].btn-block {\n  width: 100%; }\n\n.fade {\n  opacity: 0;\n  transition: opacity 0.15s linear; }\n  .fade.in {\n    opacity: 1; }\n\n.collapse {\n  display: none; }\n  .collapse.in {\n    display: block; }\n\n.collapsing {\n  position: relative;\n  height: 0;\n  overflow: hidden;\n  transition: height 0.35s ease; }\n\n@font-face {\n  font-family: 'Glyphicons Halflings';\n  src: url(\"../fonts/glyphicons-halflings-regular.eot\");\n  src: url(\"../fonts/glyphicons-halflings-regular.eot?#iefix\") format(\"embedded-opentype\"), url(\"../fonts/glyphicons-halflings-regular.woff\") format(\"woff\"), url(\"../fonts/glyphicons-halflings-regular.ttf\") format(\"truetype\"), url(\"../fonts/glyphicons-halflings-regular.svg#glyphicons-halflingsregular\") format(\"svg\"); }\n\n.glyphicon {\n  position: relative;\n  top: 1px;\n  display: inline-block;\n  font-family: 'Glyphicons Halflings';\n  font-style: normal;\n  font-weight: normal;\n  line-height: 1;\n  -webkit-font-smoothing: antialiased; }\n\n.glyphicon-asterisk:before {\n  content: \"\\2a\"; }\n\n.glyphicon-plus:before {\n  content: \"\\2b\"; }\n\n.glyphicon-euro:before {\n  content: \"\\20ac\"; }\n\n.glyphicon-minus:before {\n  content: \"\\2212\"; }\n\n.glyphicon-cloud:before {\n  content: \"\\2601\"; }\n\n.glyphicon-envelope:before {\n  content: \"\\2709\"; }\n\n.glyphicon-pencil:before {\n  content: \"\\270f\"; }\n\n.glyphicon-glass:before {\n  content: \"\\e001\"; }\n\n.glyphicon-music:before {\n  content: \"\\e002\"; }\n\n.glyphicon-search:before {\n  content: \"\\e003\"; }\n\n.glyphicon-heart:before {\n  content: \"\\e005\"; }\n\n.glyphicon-star:before {\n  content: \"\\e006\"; }\n\n.glyphicon-star-empty:before {\n  content: \"\\e007\"; }\n\n.glyphicon-user:before {\n  content: \"\\e008\"; }\n\n.glyphicon-film:before {\n  content: \"\\e009\"; }\n\n.glyphicon-th-large:before {\n  content: \"\\e010\"; }\n\n.glyphicon-th:before {\n  content: \"\\e011\"; }\n\n.glyphicon-th-list:before {\n  content: \"\\e012\"; }\n\n.glyphicon-ok:before {\n  content: \"\\e013\"; }\n\n.glyphicon-remove:before {\n  content: \"\\e014\"; }\n\n.glyphicon-zoom-in:before {\n  content: \"\\e015\"; }\n\n.glyphicon-zoom-out:before {\n  content: \"\\e016\"; }\n\n.glyphicon-off:before {\n  content: \"\\e017\"; }\n\n.glyphicon-signal:before {\n  content: \"\\e018\"; }\n\n.glyphicon-cog:before {\n  content: \"\\e019\"; }\n\n.glyphicon-trash:before {\n  content: \"\\e020\"; }\n\n.glyphicon-home:before {\n  content: \"\\e021\"; }\n\n.glyphicon-file:before {\n  content: \"\\e022\"; }\n\n.glyphicon-time:before {\n  content: \"\\e023\"; }\n\n.glyphicon-road:before {\n  content: \"\\e024\"; }\n\n.glyphicon-download-alt:before {\n  content: \"\\e025\"; }\n\n.glyphicon-download:before {\n  content: \"\\e026\"; }\n\n.glyphicon-upload:before {\n  content: \"\\e027\"; }\n\n.glyphicon-inbox:before {\n  content: \"\\e028\"; }\n\n.glyphicon-play-circle:before {\n  content: \"\\e029\"; }\n\n.glyphicon-repeat:before {\n  content: \"\\e030\"; }\n\n.glyphicon-refresh:before {\n  content: \"\\e031\"; }\n\n.glyphicon-list-alt:before {\n  content: \"\\e032\"; }\n\n.glyphicon-flag:before {\n  content: \"\\e034\"; }\n\n.glyphicon-headphones:before {\n  content: \"\\e035\"; }\n\n.glyphicon-volume-off:before {\n  content: \"\\e036\"; }\n\n.glyphicon-volume-down:before {\n  content: \"\\e037\"; }\n\n.glyphicon-volume-up:before {\n  content: \"\\e038\"; }\n\n.glyphicon-qrcode:before {\n  content: \"\\e039\"; }\n\n.glyphicon-barcode:before {\n  content: \"\\e040\"; }\n\n.glyphicon-tag:before {\n  content: \"\\e041\"; }\n\n.glyphicon-tags:before {\n  content: \"\\e042\"; }\n\n.glyphicon-book:before {\n  content: \"\\e043\"; }\n\n.glyphicon-print:before {\n  content: \"\\e045\"; }\n\n.glyphicon-font:before {\n  content: \"\\e047\"; }\n\n.glyphicon-bold:before {\n  content: \"\\e048\"; }\n\n.glyphicon-italic:before {\n  content: \"\\e049\"; }\n\n.glyphicon-text-height:before {\n  content: \"\\e050\"; }\n\n.glyphicon-text-width:before {\n  content: \"\\e051\"; }\n\n.glyphicon-align-left:before {\n  content: \"\\e052\"; }\n\n.glyphicon-align-center:before {\n  content: \"\\e053\"; }\n\n.glyphicon-align-right:before {\n  content: \"\\e054\"; }\n\n.glyphicon-align-justify:before {\n  content: \"\\e055\"; }\n\n.glyphicon-list:before {\n  content: \"\\e056\"; }\n\n.glyphicon-indent-left:before {\n  content: \"\\e057\"; }\n\n.glyphicon-indent-right:before {\n  content: \"\\e058\"; }\n\n.glyphicon-facetime-video:before {\n  content: \"\\e059\"; }\n\n.glyphicon-picture:before {\n  content: \"\\e060\"; }\n\n.glyphicon-map-marker:before {\n  content: \"\\e062\"; }\n\n.glyphicon-adjust:before {\n  content: \"\\e063\"; }\n\n.glyphicon-tint:before {\n  content: \"\\e064\"; }\n\n.glyphicon-edit:before {\n  content: \"\\e065\"; }\n\n.glyphicon-share:before {\n  content: \"\\e066\"; }\n\n.glyphicon-check:before {\n  content: \"\\e067\"; }\n\n.glyphicon-move:before {\n  content: \"\\e068\"; }\n\n.glyphicon-step-backward:before {\n  content: \"\\e069\"; }\n\n.glyphicon-fast-backward:before {\n  content: \"\\e070\"; }\n\n.glyphicon-backward:before {\n  content: \"\\e071\"; }\n\n.glyphicon-play:before {\n  content: \"\\e072\"; }\n\n.glyphicon-pause:before {\n  content: \"\\e073\"; }\n\n.glyphicon-stop:before {\n  content: \"\\e074\"; }\n\n.glyphicon-forward:before {\n  content: \"\\e075\"; }\n\n.glyphicon-fast-forward:before {\n  content: \"\\e076\"; }\n\n.glyphicon-step-forward:before {\n  content: \"\\e077\"; }\n\n.glyphicon-eject:before {\n  content: \"\\e078\"; }\n\n.glyphicon-chevron-left:before {\n  content: \"\\e079\"; }\n\n.glyphicon-chevron-right:before {\n  content: \"\\e080\"; }\n\n.glyphicon-plus-sign:before {\n  content: \"\\e081\"; }\n\n.glyphicon-minus-sign:before {\n  content: \"\\e082\"; }\n\n.glyphicon-remove-sign:before {\n  content: \"\\e083\"; }\n\n.glyphicon-ok-sign:before {\n  content: \"\\e084\"; }\n\n.glyphicon-question-sign:before {\n  content: \"\\e085\"; }\n\n.glyphicon-info-sign:before {\n  content: \"\\e086\"; }\n\n.glyphicon-screenshot:before {\n  content: \"\\e087\"; }\n\n.glyphicon-remove-circle:before {\n  content: \"\\e088\"; }\n\n.glyphicon-ok-circle:before {\n  content: \"\\e089\"; }\n\n.glyphicon-ban-circle:before {\n  content: \"\\e090\"; }\n\n.glyphicon-arrow-left:before {\n  content: \"\\e091\"; }\n\n.glyphicon-arrow-right:before {\n  content: \"\\e092\"; }\n\n.glyphicon-arrow-up:before {\n  content: \"\\e093\"; }\n\n.glyphicon-arrow-down:before {\n  content: \"\\e094\"; }\n\n.glyphicon-share-alt:before {\n  content: \"\\e095\"; }\n\n.glyphicon-resize-full:before {\n  content: \"\\e096\"; }\n\n.glyphicon-resize-small:before {\n  content: \"\\e097\"; }\n\n.glyphicon-exclamation-sign:before {\n  content: \"\\e101\"; }\n\n.glyphicon-gift:before {\n  content: \"\\e102\"; }\n\n.glyphicon-leaf:before {\n  content: \"\\e103\"; }\n\n.glyphicon-eye-open:before {\n  content: \"\\e105\"; }\n\n.glyphicon-eye-close:before {\n  content: \"\\e106\"; }\n\n.glyphicon-warning-sign:before {\n  content: \"\\e107\"; }\n\n.glyphicon-plane:before {\n  content: \"\\e108\"; }\n\n.glyphicon-random:before {\n  content: \"\\e110\"; }\n\n.glyphicon-comment:before {\n  content: \"\\e111\"; }\n\n.glyphicon-magnet:before {\n  content: \"\\e112\"; }\n\n.glyphicon-chevron-up:before {\n  content: \"\\e113\"; }\n\n.glyphicon-chevron-down:before {\n  content: \"\\e114\"; }\n\n.glyphicon-retweet:before {\n  content: \"\\e115\"; }\n\n.glyphicon-shopping-cart:before {\n  content: \"\\e116\"; }\n\n.glyphicon-folder-close:before {\n  content: \"\\e117\"; }\n\n.glyphicon-folder-open:before {\n  content: \"\\e118\"; }\n\n.glyphicon-resize-vertical:before {\n  content: \"\\e119\"; }\n\n.glyphicon-resize-horizontal:before {\n  content: \"\\e120\"; }\n\n.glyphicon-hdd:before {\n  content: \"\\e121\"; }\n\n.glyphicon-bullhorn:before {\n  content: \"\\e122\"; }\n\n.glyphicon-certificate:before {\n  content: \"\\e124\"; }\n\n.glyphicon-thumbs-up:before {\n  content: \"\\e125\"; }\n\n.glyphicon-thumbs-down:before {\n  content: \"\\e126\"; }\n\n.glyphicon-hand-right:before {\n  content: \"\\e127\"; }\n\n.glyphicon-hand-left:before {\n  content: \"\\e128\"; }\n\n.glyphicon-hand-up:before {\n  content: \"\\e129\"; }\n\n.glyphicon-hand-down:before {\n  content: \"\\e130\"; }\n\n.glyphicon-circle-arrow-right:before {\n  content: \"\\e131\"; }\n\n.glyphicon-circle-arrow-left:before {\n  content: \"\\e132\"; }\n\n.glyphicon-circle-arrow-up:before {\n  content: \"\\e133\"; }\n\n.glyphicon-circle-arrow-down:before {\n  content: \"\\e134\"; }\n\n.glyphicon-globe:before {\n  content: \"\\e135\"; }\n\n.glyphicon-tasks:before {\n  content: \"\\e137\"; }\n\n.glyphicon-filter:before {\n  content: \"\\e138\"; }\n\n.glyphicon-fullscreen:before {\n  content: \"\\e140\"; }\n\n.glyphicon-dashboard:before {\n  content: \"\\e141\"; }\n\n.glyphicon-heart-empty:before {\n  content: \"\\e143\"; }\n\n.glyphicon-link:before {\n  content: \"\\e144\"; }\n\n.glyphicon-phone:before {\n  content: \"\\e145\"; }\n\n.glyphicon-usd:before {\n  content: \"\\e148\"; }\n\n.glyphicon-gbp:before {\n  content: \"\\e149\"; }\n\n.glyphicon-sort:before {\n  content: \"\\e150\"; }\n\n.glyphicon-sort-by-alphabet:before {\n  content: \"\\e151\"; }\n\n.glyphicon-sort-by-alphabet-alt:before {\n  content: \"\\e152\"; }\n\n.glyphicon-sort-by-order:before {\n  content: \"\\e153\"; }\n\n.glyphicon-sort-by-order-alt:before {\n  content: \"\\e154\"; }\n\n.glyphicon-sort-by-attributes:before {\n  content: \"\\e155\"; }\n\n.glyphicon-sort-by-attributes-alt:before {\n  content: \"\\e156\"; }\n\n.glyphicon-unchecked:before {\n  content: \"\\e157\"; }\n\n.glyphicon-expand:before {\n  content: \"\\e158\"; }\n\n.glyphicon-collapse-down:before {\n  content: \"\\e159\"; }\n\n.glyphicon-collapse-up:before {\n  content: \"\\e160\"; }\n\n.glyphicon-log-in:before {\n  content: \"\\e161\"; }\n\n.glyphicon-flash:before {\n  content: \"\\e162\"; }\n\n.glyphicon-log-out:before {\n  content: \"\\e163\"; }\n\n.glyphicon-new-window:before {\n  content: \"\\e164\"; }\n\n.glyphicon-record:before {\n  content: \"\\e165\"; }\n\n.glyphicon-save:before {\n  content: \"\\e166\"; }\n\n.glyphicon-open:before {\n  content: \"\\e167\"; }\n\n.glyphicon-saved:before {\n  content: \"\\e168\"; }\n\n.glyphicon-import:before {\n  content: \"\\e169\"; }\n\n.glyphicon-export:before {\n  content: \"\\e170\"; }\n\n.glyphicon-send:before {\n  content: \"\\e171\"; }\n\n.glyphicon-floppy-disk:before {\n  content: \"\\e172\"; }\n\n.glyphicon-floppy-saved:before {\n  content: \"\\e173\"; }\n\n.glyphicon-floppy-remove:before {\n  content: \"\\e174\"; }\n\n.glyphicon-floppy-save:before {\n  content: \"\\e175\"; }\n\n.glyphicon-floppy-open:before {\n  content: \"\\e176\"; }\n\n.glyphicon-credit-card:before {\n  content: \"\\e177\"; }\n\n.glyphicon-transfer:before {\n  content: \"\\e178\"; }\n\n.glyphicon-cutlery:before {\n  content: \"\\e179\"; }\n\n.glyphicon-header:before {\n  content: \"\\e180\"; }\n\n.glyphicon-compressed:before {\n  content: \"\\e181\"; }\n\n.glyphicon-earphone:before {\n  content: \"\\e182\"; }\n\n.glyphicon-phone-alt:before {\n  content: \"\\e183\"; }\n\n.glyphicon-tower:before {\n  content: \"\\e184\"; }\n\n.glyphicon-stats:before {\n  content: \"\\e185\"; }\n\n.glyphicon-sd-video:before {\n  content: \"\\e186\"; }\n\n.glyphicon-hd-video:before {\n  content: \"\\e187\"; }\n\n.glyphicon-subtitles:before {\n  content: \"\\e188\"; }\n\n.glyphicon-sound-stereo:before {\n  content: \"\\e189\"; }\n\n.glyphicon-sound-dolby:before {\n  content: \"\\e190\"; }\n\n.glyphicon-sound-5-1:before {\n  content: \"\\e191\"; }\n\n.glyphicon-sound-6-1:before {\n  content: \"\\e192\"; }\n\n.glyphicon-sound-7-1:before {\n  content: \"\\e193\"; }\n\n.glyphicon-copyright-mark:before {\n  content: \"\\e194\"; }\n\n.glyphicon-registration-mark:before {\n  content: \"\\e195\"; }\n\n.glyphicon-cloud-download:before {\n  content: \"\\e197\"; }\n\n.glyphicon-cloud-upload:before {\n  content: \"\\e198\"; }\n\n.glyphicon-tree-conifer:before {\n  content: \"\\e199\"; }\n\n.glyphicon-tree-deciduous:before {\n  content: \"\\e200\"; }\n\n.glyphicon-briefcase:before {\n  content: \"\\1f4bc\"; }\n\n.glyphicon-calendar:before {\n  content: \"\\1f4c5\"; }\n\n.glyphicon-pushpin:before {\n  content: \"\\1f4cc\"; }\n\n.glyphicon-paperclip:before {\n  content: \"\\1f4ce\"; }\n\n.glyphicon-camera:before {\n  content: \"\\1f4f7\"; }\n\n.glyphicon-lock:before {\n  content: \"\\1f512\"; }\n\n.glyphicon-bell:before {\n  content: \"\\1f514\"; }\n\n.glyphicon-bookmark:before {\n  content: \"\\1f516\"; }\n\n.glyphicon-fire:before {\n  content: \"\\1f525\"; }\n\n.glyphicon-wrench:before {\n  content: \"\\1f527\"; }\n\n.caret {\n  display: inline-block;\n  width: 0;\n  height: 0;\n  margin-left: 2px;\n  vertical-align: middle;\n  border-top: 4px solid #000;\n  border-right: 4px solid transparent;\n  border-left: 4px solid transparent;\n  border-bottom: 0 dotted;\n  content: \"\"; }\n\n.dropdown {\n  position: relative; }\n\n.dropdown-toggle:focus {\n  outline: 0; }\n\n.dropdown-menu {\n  position: absolute;\n  top: 100%;\n  left: 0;\n  z-index: 1000;\n  display: none;\n  float: left;\n  min-width: 160px;\n  padding: 5px 0;\n  margin: 2px 0 0;\n  list-style: none;\n  font-size: 15px;\n  background-color: #fff;\n  border: 1px solid #ccc;\n  border: 1px solid rgba(0, 0, 0, 0.15);\n  border-radius: 2px;\n  box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175);\n  background-clip: padding-box; }\n  .dropdown-menu.pull-right {\n    right: 0;\n    left: auto; }\n  .dropdown-menu .divider {\n    height: 1px;\n    margin: 9.5px 0;\n    overflow: hidden;\n    background-color: #e5e5e5; }\n  .dropdown-menu > li > a {\n    display: block;\n    padding: 3px 20px;\n    clear: both;\n    font-weight: normal;\n    line-height: 1.42857;\n    color: #333333;\n    white-space: nowrap; }\n\n.dropdown-menu > li > a:hover, .dropdown-menu > li > a:focus {\n  text-decoration: none;\n  color: #fff;\n  background-color: #4F8EF7; }\n\n.dropdown-menu > .active > a, .dropdown-menu > .active > a:hover, .dropdown-menu > .active > a:focus {\n  color: #fff;\n  text-decoration: none;\n  outline: 0;\n  background-color: #4F8EF7; }\n\n.dropdown-menu > .disabled > a, .dropdown-menu > .disabled > a:hover, .dropdown-menu > .disabled > a:focus {\n  color: #999999; }\n\n.dropdown-menu > .disabled > a:hover, .dropdown-menu > .disabled > a:focus {\n  text-decoration: none;\n  background-color: transparent;\n  background-image: none;\n  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n  cursor: not-allowed; }\n\n.open > .dropdown-menu {\n  display: block; }\n\n.open > a {\n  outline: 0; }\n\n.dropdown-header {\n  display: block;\n  padding: 3px 20px;\n  font-size: 13px;\n  line-height: 1.42857;\n  color: #999999; }\n\n.dropdown-backdrop {\n  position: fixed;\n  left: 0;\n  right: 0;\n  bottom: 0;\n  top: 0;\n  z-index: 990; }\n\n.pull-right > .dropdown-menu {\n  right: 0;\n  left: auto; }\n\n.dropup .caret,\n.navbar-fixed-bottom .dropdown .caret {\n  border-top: 0 dotted;\n  border-bottom: 4px solid #000;\n  content: \"\"; }\n\n.dropup .dropdown-menu,\n.navbar-fixed-bottom .dropdown .dropdown-menu {\n  top: auto;\n  bottom: 100%;\n  margin-bottom: 1px; }\n\n@media (min-width: 768px) {\n  .navbar-right .dropdown-menu {\n    right: 0;\n    left: auto; } }\n\n.btn-default .caret {\n  border-top-color: #333; }\n\n.btn-primary .caret,\n.btn-success .caret,\n.btn-warning .caret,\n.btn-danger .caret,\n.btn-info .caret {\n  border-top-color: #fff; }\n\n.dropup .btn-default .caret {\n  border-bottom-color: #333; }\n\n.dropup .btn-primary .caret,\n.dropup .btn-success .caret,\n.dropup .btn-warning .caret,\n.dropup .btn-danger .caret,\n.dropup .btn-info .caret {\n  border-bottom-color: #fff; }\n\n.btn-group,\n.btn-group-vertical {\n  position: relative;\n  display: inline-block;\n  vertical-align: middle; }\n  .btn-group > .btn,\n  .btn-group-vertical > .btn {\n    position: relative;\n    float: left; }\n    .btn-group > .btn:hover, .btn-group > .btn:focus, .btn-group > .btn:active, .btn-group > .btn.active,\n    .btn-group-vertical > .btn:hover,\n    .btn-group-vertical > .btn:focus,\n    .btn-group-vertical > .btn:active,\n    .btn-group-vertical > .btn.active {\n      z-index: 2; }\n    .btn-group > .btn:focus,\n    .btn-group-vertical > .btn:focus {\n      outline: none; }\n\n.btn-group .btn + .btn,\n.btn-group .btn + .btn-group,\n.btn-group .btn-group + .btn,\n.btn-group .btn-group + .btn-group {\n  margin-left: -1px; }\n\n.btn-toolbar:before, .btn-toolbar:after {\n  content: \" \";\n  /* 1 */\n  display: table;\n  /* 2 */ }\n\n.btn-toolbar:after {\n  clear: both; }\n\n.btn-toolbar .btn-group {\n  float: left; }\n\n.btn-toolbar > .btn + .btn,\n.btn-toolbar > .btn + .btn-group,\n.btn-toolbar > .btn-group + .btn,\n.btn-toolbar > .btn-group + .btn-group {\n  margin-left: 5px; }\n\n.btn-group > .btn:not(:first-child):not(:last-child):not(.dropdown-toggle) {\n  border-radius: 0; }\n\n.btn-group > .btn:first-child {\n  margin-left: 0; }\n  .btn-group > .btn:first-child:not(:last-child):not(.dropdown-toggle) {\n    border-bottom-right-radius: 0;\n    border-top-right-radius: 0; }\n\n.btn-group > .btn:last-child:not(:first-child),\n.btn-group > .dropdown-toggle:not(:first-child) {\n  border-bottom-left-radius: 0;\n  border-top-left-radius: 0; }\n\n.btn-group > .btn-group {\n  float: left; }\n\n.btn-group > .btn-group:not(:first-child):not(:last-child) > .btn {\n  border-radius: 0; }\n\n.btn-group > .btn-group:first-child > .btn:last-child,\n.btn-group > .btn-group:first-child > .dropdown-toggle {\n  border-bottom-right-radius: 0;\n  border-top-right-radius: 0; }\n\n.btn-group > .btn-group:last-child > .btn:first-child {\n  border-bottom-left-radius: 0;\n  border-top-left-radius: 0; }\n\n.btn-group .dropdown-toggle:active,\n.btn-group.open .dropdown-toggle {\n  outline: 0; }\n\n.btn-group > .btn + .dropdown-toggle {\n  padding-left: 8px;\n  padding-right: 8px; }\n\n.btn-group > .btn-lg + .dropdown-toggle, .btn-group-lg.btn-group > .btn + .dropdown-toggle {\n  padding-left: 12px;\n  padding-right: 12px; }\n\n.btn-group.open .dropdown-toggle {\n  box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); }\n\n.btn .caret {\n  margin-left: 0; }\n\n.btn-lg .caret, .btn-group-lg > .btn .caret {\n  border-width: 5px 5px 0;\n  border-bottom-width: 0; }\n\n.dropup .btn-lg .caret, .dropup .btn-group-lg > .btn .caret {\n  border-width: 0 5px 5px; }\n\n.btn-group-vertical > .btn,\n.btn-group-vertical > .btn-group {\n  display: block;\n  float: none;\n  width: 100%;\n  max-width: 100%; }\n\n.btn-group-vertical > .btn-group:before, .btn-group-vertical > .btn-group:after {\n  content: \" \";\n  /* 1 */\n  display: table;\n  /* 2 */ }\n\n.btn-group-vertical > .btn-group:after {\n  clear: both; }\n\n.btn-group-vertical > .btn-group > .btn {\n  float: none; }\n\n.btn-group-vertical > .btn + .btn,\n.btn-group-vertical > .btn + .btn-group,\n.btn-group-vertical > .btn-group + .btn,\n.btn-group-vertical > .btn-group + .btn-group {\n  margin-top: -1px;\n  margin-left: 0; }\n\n.btn-group-vertical > .btn:not(:first-child):not(:last-child) {\n  border-radius: 0; }\n\n.btn-group-vertical > .btn:first-child:not(:last-child) {\n  border-top-right-radius: 2px;\n  border-bottom-right-radius: 0;\n  border-bottom-left-radius: 0; }\n\n.btn-group-vertical > .btn:last-child:not(:first-child) {\n  border-bottom-left-radius: 2px;\n  border-top-right-radius: 0;\n  border-top-left-radius: 0; }\n\n.btn-group-vertical > .btn-group:not(:first-child):not(:last-child) > .btn {\n  border-radius: 0; }\n\n.btn-group-vertical > .btn-group:first-child > .btn:last-child,\n.btn-group-vertical > .btn-group:first-child > .dropdown-toggle {\n  border-bottom-right-radius: 0;\n  border-bottom-left-radius: 0; }\n\n.btn-group-vertical > .btn-group:last-child > .btn:first-child {\n  border-top-right-radius: 0;\n  border-top-left-radius: 0; }\n\n.btn-group-justified {\n  display: table;\n  width: 100%;\n  table-layout: fixed;\n  border-collapse: separate; }\n  .btn-group-justified .btn {\n    float: none;\n    display: table-cell;\n    width: 1%; }\n\n[data-toggle=\"buttons\"] > .btn > input[type=\"radio\"],\n[data-toggle=\"buttons\"] > .btn > input[type=\"checkbox\"] {\n  display: none; }\n\n.input-group {\n  position: relative;\n  display: table;\n  border-collapse: separate; }\n  .input-group.col {\n    float: none;\n    padding-left: 0;\n    padding-right: 0; }\n  .input-group .form-control {\n    width: 100%;\n    margin-bottom: 0; }\n\n.input-group-addon,\n.input-group-btn,\n.input-group .form-control {\n  display: table-cell; }\n  .input-group-addon:not(:first-child):not(:last-child),\n  .input-group-btn:not(:first-child):not(:last-child),\n  .input-group .form-control:not(:first-child):not(:last-child) {\n    border-radius: 0; }\n\n.input-group-addon,\n.input-group-btn {\n  width: 1%;\n  white-space: nowrap;\n  vertical-align: middle; }\n\n.input-group-addon {\n  padding: 6px 12px;\n  font-size: 15px;\n  font-weight: normal;\n  line-height: 1;\n  text-align: center;\n  background-color: #eeeeee;\n  border: 1px solid #ccc;\n  border-radius: 2px; }\n  .input-group-addon.input-sm,\n  .input-group-sm > .input-group-addon,\n  .input-group-sm > .input-group-btn > .input-group-addon.btn {\n    padding: 5px 10px;\n    font-size: 13px;\n    border-radius: 3px; }\n  .input-group-addon.input-lg,\n  .input-group-lg > .input-group-addon,\n  .input-group-lg > .input-group-btn > .input-group-addon.btn {\n    padding: 10px 16px;\n    font-size: 19px;\n    border-radius: 6px; }\n  .input-group-addon input[type=\"radio\"],\n  .input-group-addon input[type=\"checkbox\"] {\n    margin-top: 0; }\n\n.input-group .form-control:first-child,\n.input-group-addon:first-child,\n.input-group-btn:first-child > .btn,\n.input-group-btn:first-child > .dropdown-toggle,\n.input-group-btn:last-child > .btn:not(:last-child):not(.dropdown-toggle) {\n  border-bottom-right-radius: 0;\n  border-top-right-radius: 0; }\n\n.input-group-addon:first-child {\n  border-right: 0; }\n\n.input-group .form-control:last-child,\n.input-group-addon:last-child,\n.input-group-btn:last-child > .btn,\n.input-group-btn:last-child > .dropdown-toggle,\n.input-group-btn:first-child > .btn:not(:first-child) {\n  border-bottom-left-radius: 0;\n  border-top-left-radius: 0; }\n\n.input-group-addon:last-child {\n  border-left: 0; }\n\n.input-group-btn {\n  position: relative;\n  white-space: nowrap; }\n\n.input-group-btn > .btn {\n  position: relative; }\n  .input-group-btn > .btn + .btn {\n    margin-left: -4px; }\n  .input-group-btn > .btn:hover, .input-group-btn > .btn:active {\n    z-index: 2; }\n\n.nav {\n  margin-bottom: 0;\n  padding-left: 0;\n  list-style: none; }\n  .nav:before, .nav:after {\n    content: \" \";\n    /* 1 */\n    display: table;\n    /* 2 */ }\n  .nav:after {\n    clear: both; }\n  .nav > li {\n    position: relative;\n    display: block; }\n    .nav > li > a {\n      position: relative;\n      display: block;\n      padding: 10px 15px; }\n      .nav > li > a:hover, .nav > li > a:focus {\n        text-decoration: none;\n        background-color: #eeeeee; }\n    .nav > li.disabled > a {\n      color: #999999; }\n      .nav > li.disabled > a:hover, .nav > li.disabled > a:focus {\n        color: #999999;\n        text-decoration: none;\n        background-color: transparent;\n        cursor: not-allowed; }\n  .nav .open > a, .nav .open > a:hover, .nav .open > a:focus {\n    background-color: #eeeeee;\n    border-color: #4F8EF7; }\n  .nav .nav-divider {\n    height: 1px;\n    margin: 9.5px 0;\n    overflow: hidden;\n    background-color: #e5e5e5; }\n  .nav > li > a > img {\n    max-width: none; }\n\n.nav-tabs {\n  border-bottom: 1px solid #ddd; }\n  .nav-tabs > li {\n    float: left;\n    margin-bottom: -1px; }\n    .nav-tabs > li > a {\n      margin-right: 2px;\n      line-height: 1.42857;\n      border: 1px solid transparent;\n      border-radius: 2px 2px 0 0; }\n      .nav-tabs > li > a:hover {\n        border-color: #eeeeee #eeeeee #ddd; }\n    .nav-tabs > li.active > a, .nav-tabs > li.active > a:hover, .nav-tabs > li.active > a:focus {\n      color: #555555;\n      background-color: #fff;\n      border: 1px solid #ddd;\n      border-bottom-color: transparent;\n      cursor: default; }\n\n.nav-pills > li {\n  float: left; }\n  .nav-pills > li > a {\n    border-radius: 5px; }\n  .nav-pills > li + li {\n    margin-left: 2px; }\n  .nav-pills > li.active > a, .nav-pills > li.active > a:hover, .nav-pills > li.active > a:focus {\n    color: #fff;\n    background-color: #4F8EF7; }\n\n.nav-stacked > li {\n  float: none; }\n  .nav-stacked > li + li {\n    margin-top: 2px;\n    margin-left: 0; }\n\n.nav-justified, .nav-tabs.nav-justified {\n  width: 100%; }\n  .nav-justified > li, .nav-tabs.nav-justified > li {\n    float: none; }\n    .nav-justified > li > a, .nav-tabs.nav-justified > li > a {\n      text-align: center; }\n  @media (min-width: 768px) {\n    .nav-justified > li, .nav-tabs.nav-justified > li {\n      display: table-cell;\n      width: 1%; } }\n\n.nav-tabs-justified, .nav-tabs.nav-justified {\n  border-bottom: 0; }\n  .nav-tabs-justified > li > a, .nav-tabs.nav-justified > li > a {\n    border-bottom: 1px solid #ddd;\n    margin-right: 0; }\n  .nav-tabs-justified > .active > a, .nav-tabs.nav-justified > .active > a {\n    border-bottom-color: #fff; }\n\n.tabbable:before, .tabbable:after {\n  content: \" \";\n  /* 1 */\n  display: table;\n  /* 2 */ }\n\n.tabbable:after {\n  clear: both; }\n\n.tab-content > .tab-pane,\n.pill-content > .pill-pane {\n  display: none; }\n\n.tab-content > .active,\n.pill-content > .active {\n  display: block; }\n\n.nav .caret {\n  border-top-color: #4F8EF7;\n  border-bottom-color: #4F8EF7; }\n\n.nav a:hover .caret {\n  border-top-color: #0b60ef;\n  border-bottom-color: #0b60ef; }\n\n.nav-tabs .dropdown-menu {\n  margin-top: -1px;\n  border-top-right-radius: 0;\n  border-top-left-radius: 0; }\n\n.navbar {\n  position: relative;\n  z-index: 1000;\n  min-height: 73px;\n  margin-bottom: 0;\n  border: 0; }\n  .navbar:before, .navbar:after {\n    content: \" \";\n    /* 1 */\n    display: table;\n    /* 2 */ }\n  .navbar:after {\n    clear: both; }\n\n.navbar-header:before, .navbar-header:after {\n  content: \" \";\n  /* 1 */\n  display: table;\n  /* 2 */ }\n\n.navbar-header:after {\n  clear: both; }\n\n@media (min-width: 768px) {\n  .navbar-header {\n    float: left; } }\n\n.navbar-collapse {\n  background-color: #f7f7f7;\n  max-height: 340px;\n  overflow-x: visible;\n  padding-right: 15px;\n  padding-left: 15px;\n  border-top: 1px solid transparent;\n  border-bottom: 1px solid transparent;\n  box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1);\n  -webkit-overflow-scrolling: touch; }\n  .navbar-collapse:before, .navbar-collapse:after {\n    content: \" \";\n    /* 1 */\n    display: table;\n    /* 2 */ }\n  .navbar-collapse:after {\n    clear: both; }\n  .navbar-collapse.in {\n    overflow-y: auto; }\n  @media (min-width: 768px) {\n    .navbar-collapse {\n      width: auto;\n      border-top: 0;\n      border-bottom: 0;\n      background-color: transparent;\n      box-shadow: none; }\n      .navbar-collapse.collapse {\n        display: block !important;\n        height: auto !important;\n        padding-bottom: 0;\n        overflow: visible !important; }\n      .navbar-collapse.in {\n        overflow-y: visible; }\n      .navbar-collapse .navbar-nav.navbar-left:first-child {\n        margin-left: -15px; }\n      .navbar-collapse .navbar-nav.navbar-right:last-child {\n        margin-right: -15px; }\n      .navbar-collapse .navbar-text:last-child {\n        margin-right: 0; } }\n\n.container > .navbar-header,\n.container > .navbar-collapse {\n  margin-right: -15px;\n  margin-left: -15px; }\n  @media (min-width: 768px) {\n    .container > .navbar-header,\n    .container > .navbar-collapse {\n      margin-right: 0;\n      margin-left: 0; } }\n\n.navbar-static-top {\n  border-width: 0; }\n  @media (min-width: 768px) {\n    .navbar-static-top {\n      border-radius: 0; } }\n\n.navbar-fixed-top,\n.navbar-fixed-bottom {\n  position: fixed;\n  right: 0;\n  left: 0;\n  border-width: 0; }\n  @media (min-width: 768px) {\n    .navbar-fixed-top,\n    .navbar-fixed-bottom {\n      border-radius: 0; } }\n\n.navbar-fixed-top {\n  z-index: 1030;\n  top: 0; }\n\n.navbar-fixed-bottom {\n  bottom: 0;\n  margin-bottom: 0; }\n\n.navbar-brand {\n  float: left;\n  padding: 15px 0 0 10px;\n  opacity: 0.7; }\n  .navbar-brand:hover, .navbar-brand:focus {\n    opacity: 1;\n    text-decoration: none; }\n  @media (min-width: 768px) {\n    .navbar > .container .navbar-brand {\n      margin-left: -15px; } }\n\n.navbar-toggle {\n  position: relative;\n  float: right;\n  margin-right: 15px;\n  padding: 9px 10px;\n  margin-top: 19.5px;\n  margin-bottom: 19.5px;\n  background-color: transparent;\n  border: 1px solid transparent; }\n  .navbar-toggle .icon-bar {\n    display: block;\n    width: 22px;\n    height: 2px;\n    border-radius: 1px; }\n  .navbar-toggle .icon-bar + .icon-bar {\n    margin-top: 4px; }\n  @media (min-width: 768px) {\n    .navbar-toggle {\n      display: none; } }\n\n.navbar-nav {\n  margin: 13px -15px;\n  font-size: 14px; }\n  .navbar-nav > li > a {\n    padding-top: 10px;\n    padding-bottom: 10px;\n    line-height: 21px; }\n  @media (max-width: 767px) {\n    .navbar-nav .open .dropdown-menu {\n      position: static;\n      float: none;\n      width: auto;\n      margin-top: 0;\n      background-color: transparent;\n      border: 0;\n      box-shadow: none; }\n      .navbar-nav .open .dropdown-menu > li > a,\n      .navbar-nav .open .dropdown-menu .dropdown-header {\n        padding: 5px 15px 5px 25px; }\n      .navbar-nav .open .dropdown-menu > li > a {\n        line-height: 21px; }\n        .navbar-nav .open .dropdown-menu > li > a:hover, .navbar-nav .open .dropdown-menu > li > a:focus {\n          background-image: none; } }\n  @media (min-width: 768px) {\n    .navbar-nav {\n      float: left;\n      margin: 0; }\n      .navbar-nav > li {\n        float: left; }\n        .navbar-nav > li > a {\n          padding-top: 26px;\n          padding-bottom: 26px; } }\n\n@media (min-width: 768px) {\n  .navbar-left {\n    float: left !important; }\n  .navbar-right {\n    float: right !important; } }\n\n.navbar-form {\n  margin-left: -15px;\n  margin-right: -15px;\n  padding: 10px 15px;\n  border-top: 1px solid transparent;\n  border-bottom: 1px solid transparent;\n  box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1);\n  margin-top: 19px;\n  margin-bottom: 19px; }\n  @media (max-width: 767px) {\n    .navbar-form .form-group {\n      margin-bottom: 5px; } }\n  @media (min-width: 768px) {\n    .navbar-form {\n      width: auto;\n      border: 0;\n      margin-left: 0;\n      margin-right: 0;\n      padding-top: 0;\n      padding-bottom: 0;\n      box-shadow: none; } }\n\n.navbar-nav > li > .dropdown-menu {\n  margin-top: 0;\n  border-top-right-radius: 0;\n  border-top-left-radius: 0; }\n\n.navbar-fixed-bottom .navbar-nav > li > .dropdown-menu {\n  border-bottom-right-radius: 0;\n  border-bottom-left-radius: 0; }\n\n.navbar-nav.pull-right > li > .dropdown-menu,\n.navbar-nav > li > .dropdown-menu.pull-right {\n  left: auto;\n  right: 0; }\n\n.navbar-btn {\n  margin-top: 19px;\n  margin-bottom: 19px; }\n\n.navbar-text {\n  float: left;\n  margin-top: 26px;\n  margin-bottom: 26px; }\n  @media (min-width: 768px) {\n    .navbar-text {\n      margin-left: 15px;\n      margin-right: 15px; } }\n\n.navbar-default {\n  /*background-color: $navbar-default-bg;\n  border-color: $navbar-default-border;*/\n  font-family: \"AvenirNextLTPro-Medium\", \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n  font-weight: normal;\n  -webkit-font-smoothing: antialiased; }\n  .navbar-default .navbar-brand {\n    color: #4F8EF7; }\n    .navbar-default .navbar-brand:hover, .navbar-default .navbar-brand:focus {\n      color: #1e6ff5;\n      background-color: transparent; }\n  .navbar-default .navbar-text {\n    color: #777; }\n  .navbar-default .navbar-nav > li > a {\n    color: #4F8EF7;\n    padding-left: 0 !important;\n    padding-right: 0 !important;\n    margin: 0 30px; }\n    .navbar-default .navbar-nav > li > a:hover, .navbar-default .navbar-nav > li > a:focus {\n      color: #4F8EF7;\n      background-color: transparent; }\n  .navbar-default .navbar-nav > .active > a, .navbar-default .navbar-nav > .active > a:hover, .navbar-default .navbar-nav > .active > a:focus {\n    color: #4F8EF7;\n    background-color: #e7e7e7; }\n  .navbar-default .navbar-nav > .disabled > a, .navbar-default .navbar-nav > .disabled > a:hover, .navbar-default .navbar-nav > .disabled > a:focus {\n    color: #ccc;\n    background-color: transparent; }\n  .navbar-default .navbar-toggle {\n    border-color: #ddd; }\n    .navbar-default .navbar-toggle:hover, .navbar-default .navbar-toggle:focus {\n      background-color: #ddd; }\n    .navbar-default .navbar-toggle .icon-bar {\n      background-color: #ccc; }\n  .navbar-default .navbar-collapse,\n  .navbar-default .navbar-form {\n    border-color: #e6e6e6; }\n  .navbar-default .navbar-nav > .dropdown > a:hover .caret,\n  .navbar-default .navbar-nav > .dropdown > a:focus .caret {\n    border-top-color: #4F8EF7;\n    border-bottom-color: #4F8EF7; }\n  .navbar-default .navbar-nav > .open > a, .navbar-default .navbar-nav > .open > a:hover, .navbar-default .navbar-nav > .open > a:focus {\n    background-color: #e7e7e7;\n    color: #4F8EF7; }\n    .navbar-default .navbar-nav > .open > a .caret, .navbar-default .navbar-nav > .open > a:hover .caret, .navbar-default .navbar-nav > .open > a:focus .caret {\n      border-top-color: #4F8EF7;\n      border-bottom-color: #4F8EF7; }\n  .navbar-default .navbar-nav > .dropdown > a .caret {\n    border-top-color: #4F8EF7;\n    border-bottom-color: #4F8EF7; }\n  @media (max-width: 767px) {\n    .navbar-default .navbar-nav .open .dropdown-menu > li > a {\n      color: #4F8EF7; }\n      .navbar-default .navbar-nav .open .dropdown-menu > li > a:hover, .navbar-default .navbar-nav .open .dropdown-menu > li > a:focus {\n        color: #4F8EF7;\n        background-color: transparent; }\n    .navbar-default .navbar-nav .open .dropdown-menu > .active > a, .navbar-default .navbar-nav .open .dropdown-menu > .active > a:hover, .navbar-default .navbar-nav .open .dropdown-menu > .active > a:focus {\n      color: #4F8EF7;\n      background-color: #e7e7e7; }\n    .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a, .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:hover, .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:focus {\n      color: #ccc;\n      background-color: transparent; } }\n  .navbar-default .navbar-link {\n    color: #4F8EF7; }\n    .navbar-default .navbar-link:hover {\n      color: #4F8EF7; }\n\n.navbar-inverse {\n  background-color: #222;\n  border-color: #090909; }\n  .navbar-inverse .navbar-brand {\n    color: #999999; }\n    .navbar-inverse .navbar-brand:hover, .navbar-inverse .navbar-brand:focus {\n      color: #fff;\n      background-color: transparent; }\n  .navbar-inverse .navbar-text {\n    color: #999999; }\n  .navbar-inverse .navbar-nav > li > a {\n    color: #999999; }\n    .navbar-inverse .navbar-nav > li > a:hover, .navbar-inverse .navbar-nav > li > a:focus {\n      color: #fff;\n      background-color: transparent; }\n  .navbar-inverse .navbar-nav > .active > a, .navbar-inverse .navbar-nav > .active > a:hover, .navbar-inverse .navbar-nav > .active > a:focus {\n    color: #fff;\n    background-color: #090909; }\n  .navbar-inverse .navbar-nav > .disabled > a, .navbar-inverse .navbar-nav > .disabled > a:hover, .navbar-inverse .navbar-nav > .disabled > a:focus {\n    color: #444;\n    background-color: transparent; }\n  .navbar-inverse .navbar-toggle {\n    border-color: #333; }\n    .navbar-inverse .navbar-toggle:hover, .navbar-inverse .navbar-toggle:focus {\n      background-color: #333; }\n    .navbar-inverse .navbar-toggle .icon-bar {\n      background-color: #fff; }\n  .navbar-inverse .navbar-collapse,\n  .navbar-inverse .navbar-form {\n    border-color: #101010; }\n  .navbar-inverse .navbar-nav > .open > a, .navbar-inverse .navbar-nav > .open > a:hover, .navbar-inverse .navbar-nav > .open > a:focus {\n    background-color: #090909;\n    color: #fff; }\n  .navbar-inverse .navbar-nav > .dropdown > a:hover .caret {\n    border-top-color: #fff;\n    border-bottom-color: #fff; }\n  .navbar-inverse .navbar-nav > .dropdown > a .caret {\n    border-top-color: #999999;\n    border-bottom-color: #999999; }\n  .navbar-inverse .navbar-nav > .open > a .caret, .navbar-inverse .navbar-nav > .open > a:hover .caret, .navbar-inverse .navbar-nav > .open > a:focus .caret {\n    border-top-color: #fff;\n    border-bottom-color: #fff; }\n  @media (max-width: 767px) {\n    .navbar-inverse .navbar-nav .open .dropdown-menu > .dropdown-header {\n      border-color: #090909; }\n    .navbar-inverse .navbar-nav .open .dropdown-menu > li > a {\n      color: #999999; }\n      .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:hover, .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:focus {\n        color: #fff;\n        background-color: transparent; }\n    .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a, .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:hover, .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:focus {\n      color: #fff;\n      background-color: #090909; }\n    .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a, .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:hover, .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:focus {\n      color: #444;\n      background-color: transparent; } }\n  .navbar-inverse .navbar-link {\n    color: #999999; }\n    .navbar-inverse .navbar-link:hover {\n      color: #fff; }\n\n.breadcrumb {\n  padding: 8px 15px;\n  margin-bottom: 21px;\n  list-style: none;\n  background-color: #f5f5f5;\n  border-radius: 2px; }\n  .breadcrumb > li {\n    display: inline-block; }\n    .breadcrumb > li + li:before {\n      content: \"/\\00a0\";\n      padding: 0 5px;\n      color: #ccc; }\n  .breadcrumb > .active {\n    color: #999999; }\n\n.pagination {\n  display: inline-block;\n  padding-left: 0;\n  margin: 21px 0;\n  border-radius: 2px; }\n  .pagination > li {\n    display: inline; }\n    .pagination > li > a,\n    .pagination > li > span {\n      position: relative;\n      float: left;\n      padding: 6px 12px;\n      line-height: 1.42857;\n      text-decoration: none;\n      background-color: #fff;\n      border: 1px solid #ddd;\n      margin-left: -1px; }\n    .pagination > li:first-child > a,\n    .pagination > li:first-child > span {\n      margin-left: 0;\n      border-bottom-left-radius: 2px;\n      border-top-left-radius: 2px; }\n    .pagination > li:last-child > a,\n    .pagination > li:last-child > span {\n      border-bottom-right-radius: 2px;\n      border-top-right-radius: 2px; }\n  .pagination > li > a:hover, .pagination > li > a:focus,\n  .pagination > li > span:hover,\n  .pagination > li > span:focus {\n    background-color: #eeeeee; }\n  .pagination > .active > a, .pagination > .active > a:hover, .pagination > .active > a:focus,\n  .pagination > .active > span,\n  .pagination > .active > span:hover,\n  .pagination > .active > span:focus {\n    z-index: 2;\n    color: #fff;\n    background-color: #4F8EF7;\n    border-color: #4F8EF7;\n    cursor: default; }\n  .pagination > .disabled > span,\n  .pagination > .disabled > a,\n  .pagination > .disabled > a:hover,\n  .pagination > .disabled > a:focus {\n    color: #999999;\n    background-color: #fff;\n    border-color: #ddd;\n    cursor: not-allowed; }\n\n.pagination-lg > li > a,\n.pagination-lg > li > span {\n  padding: 10px 16px;\n  font-size: 19px; }\n\n.pagination-lg > li:first-child > a,\n.pagination-lg > li:first-child > span {\n  border-bottom-left-radius: 6px;\n  border-top-left-radius: 6px; }\n\n.pagination-lg > li:last-child > a,\n.pagination-lg > li:last-child > span {\n  border-bottom-right-radius: 6px;\n  border-top-right-radius: 6px; }\n\n.pagination-sm > li > a,\n.pagination-sm > li > span {\n  padding: 5px 10px;\n  font-size: 13px; }\n\n.pagination-sm > li:first-child > a,\n.pagination-sm > li:first-child > span {\n  border-bottom-left-radius: 3px;\n  border-top-left-radius: 3px; }\n\n.pagination-sm > li:last-child > a,\n.pagination-sm > li:last-child > span {\n  border-bottom-right-radius: 3px;\n  border-top-right-radius: 3px; }\n\n.pager {\n  padding-left: 0;\n  margin: 21px 0;\n  list-style: none;\n  text-align: center; }\n  .pager:before, .pager:after {\n    content: \" \";\n    /* 1 */\n    display: table;\n    /* 2 */ }\n  .pager:after {\n    clear: both; }\n  .pager li {\n    display: inline; }\n    .pager li > a,\n    .pager li > span {\n      display: inline-block;\n      padding: 5px 14px;\n      background-color: #fff;\n      border: 1px solid #ddd;\n      border-radius: 15px; }\n    .pager li > a:hover,\n    .pager li > a:focus {\n      text-decoration: none;\n      background-color: #eeeeee; }\n  .pager .next > a,\n  .pager .next > span {\n    float: right; }\n  .pager .previous > a,\n  .pager .previous > span {\n    float: left; }\n  .pager .disabled > a,\n  .pager .disabled > a:hover,\n  .pager .disabled > a:focus,\n  .pager .disabled > span {\n    color: #999999;\n    background-color: #fff;\n    cursor: not-allowed; }\n\n.label {\n  display: inline;\n  padding: .2em .6em .3em;\n  font-size: 75%;\n  font-weight: bold;\n  line-height: 1;\n  color: #fff;\n  text-align: center;\n  white-space: nowrap;\n  vertical-align: baseline;\n  border-radius: .25em; }\n  .label[href]:hover, .label[href]:focus {\n    color: #fff;\n    text-decoration: none;\n    cursor: pointer; }\n  .label:empty {\n    display: none; }\n\n.label-default {\n  background-color: #999999; }\n  .label-default[href]:hover, .label-default[href]:focus {\n    background-color: gray; }\n\n.label-primary {\n  background-color: #4F8EF7; }\n  .label-primary[href]:hover, .label-primary[href]:focus {\n    background-color: #1e6ff5; }\n\n.label-success {\n  background-color: #5cb85c; }\n  .label-success[href]:hover, .label-success[href]:focus {\n    background-color: #449d44; }\n\n.label-info {\n  background-color: #5bc0de; }\n  .label-info[href]:hover, .label-info[href]:focus {\n    background-color: #31b0d5; }\n\n.label-warning {\n  background-color: #f0ad4e; }\n  .label-warning[href]:hover, .label-warning[href]:focus {\n    background-color: #ec971f; }\n\n.label-danger {\n  background-color: #d9534f; }\n  .label-danger[href]:hover, .label-danger[href]:focus {\n    background-color: #c9302c; }\n\n.badge {\n  display: inline-block;\n  min-width: 10px;\n  padding: 3px 7px;\n  font-size: 13px;\n  font-weight: bold;\n  color: #fff;\n  line-height: 1;\n  vertical-align: baseline;\n  white-space: nowrap;\n  text-align: center;\n  background-color: #999999;\n  border-radius: 10px; }\n  .badge:empty {\n    display: none; }\n\na.badge:hover, a.badge:focus {\n  color: #fff;\n  text-decoration: none;\n  cursor: pointer; }\n\n.btn .badge {\n  position: relative;\n  top: -1px; }\n\na.list-group-item.active > .badge,\n.nav-pills > .active > a > .badge {\n  color: #4F8EF7;\n  background-color: #fff; }\n\n.nav-pills > li > a > .badge {\n  margin-left: 3px; }\n\n.jumbotron {\n  padding: 30px;\n  margin-bottom: 30px;\n  font-size: 22.5px;\n  font-weight: 200;\n  line-height: 2.14286;\n  color: inherit;\n  background-color: #eeeeee; }\n  .jumbotron h1 {\n    line-height: 1;\n    color: inherit; }\n  .jumbotron p {\n    line-height: 1.4; }\n  .container .jumbotron {\n    border-radius: 6px; }\n  @media screen and (min-width: 768px) {\n    .jumbotron {\n      padding-top: 48px;\n      padding-bottom: 48px; }\n      .container .jumbotron {\n        padding-left: 60px;\n        padding-right: 60px; }\n      .jumbotron h1 {\n        font-size: 67.5px; } }\n\n.thumbnail {\n  display: block; }\n  .thumbnail > img {\n    display: block;\n    max-width: 100%;\n    height: auto; }\n\na.thumbnail:hover,\na.thumbnail:focus {\n  border-color: #4F8EF7; }\n\n.thumbnail > img {\n  margin-left: auto;\n  margin-right: auto; }\n\n.thumbnail .caption {\n  padding: 9px;\n  color: #333; }\n\n.alert {\n  padding: 15px;\n  margin-bottom: 21px;\n  border: 1px solid transparent;\n  border-radius: 2px; }\n  .alert h4 {\n    margin-top: 0;\n    color: inherit; }\n  .alert .alert-link {\n    font-weight: bold; }\n  .alert > p,\n  .alert > ul {\n    margin-bottom: 0; }\n  .alert > p + p {\n    margin-top: 5px; }\n\n.alert-dismissable {\n  padding-right: 35px; }\n  .alert-dismissable .close {\n    position: relative;\n    top: -2px;\n    right: -21px;\n    color: inherit; }\n\n.alert-success {\n  background-color: #dff0d8;\n  border-color: #d6e9c6;\n  color: #468847; }\n  .alert-success hr {\n    border-top-color: #c9e2b3; }\n  .alert-success .alert-link {\n    color: #356635; }\n\n.alert-info {\n  background-color: #d9edf7;\n  border-color: #bce8f1;\n  color: #3a87ad; }\n  .alert-info hr {\n    border-top-color: #a6e1ec; }\n  .alert-info .alert-link {\n    color: #2d6987; }\n\n.alert-warning {\n  background-color: #fcf8e3;\n  border-color: #fbeed5;\n  color: #c09853; }\n  .alert-warning hr {\n    border-top-color: #f8e5be; }\n  .alert-warning .alert-link {\n    color: #a47e3c; }\n\n.alert-danger {\n  background-color: #f2dede;\n  border-color: #eed3d7;\n  color: #b94a48; }\n  .alert-danger hr {\n    border-top-color: #e6c1c7; }\n  .alert-danger .alert-link {\n    color: #953b39; }\n\n@-webkit-keyframes progress-bar-stripes {\n  from {\n    background-position: 40px 0; }\n  to {\n    background-position: 0 0; } }\n\n@keyframes progress-bar-stripes {\n  from {\n    background-position: 40px 0; }\n  to {\n    background-position: 0 0; } }\n\n.progress {\n  overflow: hidden;\n  height: 21px;\n  margin-bottom: 21px;\n  background-color: #f5f5f5;\n  border-radius: 2px;\n  box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1); }\n\n.progress-bar {\n  float: left;\n  width: 0%;\n  height: 100%;\n  font-size: 13px;\n  color: #fff;\n  text-align: center;\n  background-color: #4F8EF7;\n  box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15);\n  transition: width 0.6s ease; }\n\n.progress-striped .progress-bar {\n  background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n  background-size: 40px 40px; }\n\n.progress.active .progress-bar {\n  -webkit-animation: progress-bar-stripes 2s linear infinite;\n  animation: progress-bar-stripes 2s linear infinite; }\n\n.progress-bar-success {\n  background-color: #5cb85c; }\n  .progress-striped .progress-bar-success {\n    background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); }\n\n.progress-bar-info {\n  background-color: #5bc0de; }\n  .progress-striped .progress-bar-info {\n    background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); }\n\n.progress-bar-warning {\n  background-color: #f0ad4e; }\n  .progress-striped .progress-bar-warning {\n    background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); }\n\n.progress-bar-danger {\n  background-color: #d9534f; }\n  .progress-striped .progress-bar-danger {\n    background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); }\n\n.media,\n.media-body {\n  overflow: hidden;\n  zoom: 1; }\n\n.media,\n.media .media {\n  margin-top: 15px; }\n\n.media:first-child {\n  margin-top: 0; }\n\n.media-object {\n  display: block; }\n\n.media-heading {\n  margin: 0 0 5px; }\n\n.media > .pull-left {\n  margin-right: 10px; }\n\n.media > .pull-right {\n  margin-left: 10px; }\n\n.media-list {\n  padding-left: 0;\n  list-style: none; }\n\n.list-group {\n  margin-bottom: 20px;\n  padding-left: 0; }\n\n.list-group-item {\n  position: relative;\n  display: block;\n  padding: 10px 15px;\n  margin-bottom: -1px;\n  background-color: #fff;\n  border: 1px solid #ddd; }\n  .list-group-item:first-child {\n    border-top-right-radius: 2px;\n    border-top-left-radius: 2px; }\n  .list-group-item:last-child {\n    margin-bottom: 0;\n    border-bottom-right-radius: 2px;\n    border-bottom-left-radius: 2px; }\n  .list-group-item > .badge {\n    float: right; }\n  .list-group-item > .badge + .badge {\n    margin-right: 5px; }\n  .list-group-item.active, .list-group-item.active:hover, .list-group-item.active:focus {\n    z-index: 2;\n    color: #fff;\n    background-color: #4F8EF7;\n    border-color: #4F8EF7; }\n    .list-group-item.active .list-group-item-heading, .list-group-item.active:hover .list-group-item-heading, .list-group-item.active:focus .list-group-item-heading {\n      color: inherit; }\n    .list-group-item.active .list-group-item-text, .list-group-item.active:hover .list-group-item-text, .list-group-item.active:focus .list-group-item-text {\n      color: white; }\n\na.list-group-item {\n  color: #555; }\n  a.list-group-item .list-group-item-heading {\n    color: #333; }\n  a.list-group-item:hover, a.list-group-item:focus {\n    text-decoration: none;\n    background-color: #f5f5f5; }\n\n.list-group-item-heading {\n  margin-top: 0;\n  margin-bottom: 5px; }\n\n.list-group-item-text {\n  margin-bottom: 0;\n  line-height: 1.3; }\n\n.panel {\n  margin-bottom: 21px;\n  background-color: #fff;\n  border: 1px solid transparent;\n  border-radius: 2px;\n  box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05); }\n\n.panel-body {\n  padding: 15px; }\n  .panel-body:before, .panel-body:after {\n    content: \" \";\n    /* 1 */\n    display: table;\n    /* 2 */ }\n  .panel-body:after {\n    clear: both; }\n\n.panel > .list-group {\n  margin-bottom: 0; }\n  .panel > .list-group .list-group-item {\n    border-width: 1px 0; }\n    .panel > .list-group .list-group-item:first-child {\n      border-top-right-radius: 0;\n      border-top-left-radius: 0; }\n    .panel > .list-group .list-group-item:last-child {\n      border-bottom: 0; }\n\n.panel-heading + .list-group .list-group-item:first-child {\n  border-top-width: 0; }\n\n.panel > .table {\n  margin-bottom: 0; }\n\n.panel > .panel-body + .table {\n  border-top: 1px solid #ddd; }\n\n.panel-heading {\n  padding: 10px 15px;\n  border-bottom: 1px solid transparent;\n  border-top-right-radius: 1px;\n  border-top-left-radius: 1px; }\n\n.panel-title {\n  margin-top: 0;\n  margin-bottom: 0;\n  font-size: 17px; }\n  .panel-title > a {\n    color: inherit; }\n\n.panel-footer {\n  padding: 10px 15px;\n  background-color: #f5f5f5;\n  border-top: 1px solid #ddd;\n  border-bottom-right-radius: 1px;\n  border-bottom-left-radius: 1px; }\n\n.panel-group .panel {\n  margin-bottom: 0;\n  border-radius: 2px;\n  overflow: hidden; }\n  .panel-group .panel + .panel {\n    margin-top: 5px; }\n\n.panel-group .panel-heading {\n  border-bottom: 0; }\n  .panel-group .panel-heading + .panel-collapse .panel-body {\n    border-top: 1px solid #ddd; }\n\n.panel-group .panel-footer {\n  border-top: 0; }\n  .panel-group .panel-footer + .panel-collapse .panel-body {\n    border-bottom: 1px solid #ddd; }\n\n.panel-default {\n  border-color: #ddd; }\n  .panel-default > .panel-heading {\n    color: #333333;\n    background-color: #f5f5f5;\n    border-color: #ddd; }\n    .panel-default > .panel-heading + .panel-collapse .panel-body {\n      border-top-color: #ddd; }\n  .panel-default > .panel-footer + .panel-collapse .panel-body {\n    border-bottom-color: #ddd; }\n\n.panel-primary {\n  border-color: #4F8EF7; }\n  .panel-primary > .panel-heading {\n    color: #fff;\n    background-color: #4F8EF7;\n    border-color: #4F8EF7; }\n    .panel-primary > .panel-heading + .panel-collapse .panel-body {\n      border-top-color: #4F8EF7; }\n  .panel-primary > .panel-footer + .panel-collapse .panel-body {\n    border-bottom-color: #4F8EF7; }\n\n.panel-success {\n  border-color: #d6e9c6; }\n  .panel-success > .panel-heading {\n    color: #468847;\n    background-color: #dff0d8;\n    border-color: #d6e9c6; }\n    .panel-success > .panel-heading + .panel-collapse .panel-body {\n      border-top-color: #d6e9c6; }\n  .panel-success > .panel-footer + .panel-collapse .panel-body {\n    border-bottom-color: #d6e9c6; }\n\n.panel-warning {\n  border-color: #fbeed5; }\n  .panel-warning > .panel-heading {\n    color: #c09853;\n    background-color: #fcf8e3;\n    border-color: #fbeed5; }\n    .panel-warning > .panel-heading + .panel-collapse .panel-body {\n      border-top-color: #fbeed5; }\n  .panel-warning > .panel-footer + .panel-collapse .panel-body {\n    border-bottom-color: #fbeed5; }\n\n.panel-danger {\n  border-color: #eed3d7; }\n  .panel-danger > .panel-heading {\n    color: #b94a48;\n    background-color: #f2dede;\n    border-color: #eed3d7; }\n    .panel-danger > .panel-heading + .panel-collapse .panel-body {\n      border-top-color: #eed3d7; }\n  .panel-danger > .panel-footer + .panel-collapse .panel-body {\n    border-bottom-color: #eed3d7; }\n\n.panel-info {\n  border-color: #bce8f1; }\n  .panel-info > .panel-heading {\n    color: #3a87ad;\n    background-color: #d9edf7;\n    border-color: #bce8f1; }\n    .panel-info > .panel-heading + .panel-collapse .panel-body {\n      border-top-color: #bce8f1; }\n  .panel-info > .panel-footer + .panel-collapse .panel-body {\n    border-bottom-color: #bce8f1; }\n\n.well {\n  min-height: 20px;\n  padding: 19px;\n  margin-bottom: 20px;\n  background-color: #f5f5f5;\n  border: 1px solid #e3e3e3;\n  border-radius: 2px;\n  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05); }\n  .well blockquote {\n    border-color: #ddd;\n    border-color: rgba(0, 0, 0, 0.15); }\n\n.well-lg {\n  padding: 24px;\n  border-radius: 6px; }\n\n.well-sm {\n  padding: 9px;\n  border-radius: 3px; }\n\n.close {\n  float: right;\n  font-size: 22.5px;\n  font-weight: bold;\n  line-height: 1;\n  color: #000;\n  text-shadow: 0 1px 0 #fff;\n  opacity: 0.2;\n  filter: alpha(opacity=20); }\n  .close:hover, .close:focus {\n    color: #000;\n    text-decoration: none;\n    cursor: pointer;\n    opacity: 0.5;\n    filter: alpha(opacity=50); }\n\nbutton.close {\n  padding: 0;\n  cursor: pointer;\n  background: transparent;\n  border: 0;\n  -webkit-appearance: none; }\n\n.modal-open {\n  overflow: hidden; }\n  .modal-open .navbar-fixed-top,\n  .modal-open .navbar-fixed-bottom {\n    margin-right: 15px; }\n\nbody.modal-open {\n  margin-right: 15px; }\n\n.modal {\n  display: none;\n  overflow: auto;\n  overflow-y: scroll;\n  position: fixed;\n  top: 0;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  z-index: 1040; }\n  .modal.fade .modal-dialog {\n    -webkit-transform: translate(0, -25%);\n    transform: translate(0, -25%);\n    transition: -webkit-transform 0.3s ease-out;\n    transition: transform 0.3s ease-out;\n    transition: transform 0.3s ease-out, -webkit-transform 0.3s ease-out; }\n  .modal.in .modal-dialog {\n    -webkit-transform: translate(0, 0);\n    transform: translate(0, 0); }\n\n.modal-dialog {\n  margin-left: auto;\n  margin-right: auto;\n  width: auto;\n  padding: 10px;\n  z-index: 1050; }\n\n.modal-content {\n  position: relative;\n  background-color: #fff;\n  border: 1px solid #999;\n  border: 1px solid rgba(0, 0, 0, 0.2);\n  border-radius: 6px;\n  box-shadow: 0 3px 9px rgba(0, 0, 0, 0.5);\n  background-clip: padding-box;\n  outline: none; }\n\n.modal-backdrop {\n  position: fixed;\n  top: 0;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  z-index: 1030;\n  background-color: #000; }\n  .modal-backdrop.fade {\n    opacity: 0;\n    filter: alpha(opacity=0); }\n  .modal-backdrop.in {\n    opacity: 0.5;\n    filter: alpha(opacity=50); }\n\n.modal-header {\n  padding: 15px;\n  border-bottom: 1px solid #e5e5e5;\n  min-height: 16.42857px; }\n\n.modal-header .close {\n  margin-top: -2px; }\n\n.modal-title {\n  margin: 0;\n  line-height: 1.42857; }\n\n.modal-body {\n  position: relative;\n  padding: 20px; }\n\n.modal-footer {\n  margin-top: 15px;\n  padding: 19px 20px 20px;\n  text-align: right;\n  border-top: 1px solid #e5e5e5; }\n  .modal-footer:before, .modal-footer:after {\n    content: \" \";\n    /* 1 */\n    display: table;\n    /* 2 */ }\n  .modal-footer:after {\n    clear: both; }\n  .modal-footer .btn + .btn {\n    margin-left: 5px;\n    margin-bottom: 0; }\n  .modal-footer .btn-group .btn + .btn {\n    margin-left: -1px; }\n  .modal-footer .btn-block + .btn-block {\n    margin-left: 0; }\n\n@media screen and (min-width: 768px) {\n  .modal-dialog {\n    left: 50%;\n    right: auto;\n    width: 600px;\n    padding-top: 30px;\n    padding-bottom: 30px; }\n  .modal-content {\n    box-shadow: 0 5px 15px rgba(0, 0, 0, 0.5); } }\n\n.tooltip {\n  position: absolute;\n  z-index: 1030;\n  display: block;\n  visibility: visible;\n  font-size: 13px;\n  line-height: 1.4;\n  opacity: 0;\n  filter: alpha(opacity=0); }\n  .tooltip.in {\n    opacity: 0.9;\n    filter: alpha(opacity=90); }\n  .tooltip.top {\n    margin-top: -3px;\n    padding: 5px 0; }\n  .tooltip.right {\n    margin-left: 3px;\n    padding: 0 5px; }\n  .tooltip.bottom {\n    margin-top: 3px;\n    padding: 5px 0; }\n  .tooltip.left {\n    margin-left: -3px;\n    padding: 0 5px; }\n\n.tooltip-inner {\n  max-width: 200px;\n  padding: 3px 8px;\n  color: #fff;\n  text-align: center;\n  text-decoration: none;\n  background-color: #000;\n  border-radius: 2px; }\n\n.tooltip-arrow {\n  position: absolute;\n  width: 0;\n  height: 0;\n  border-color: transparent;\n  border-style: solid; }\n\n.tooltip.top .tooltip-arrow {\n  bottom: 0;\n  left: 50%;\n  margin-left: -5px;\n  border-width: 5px 5px 0;\n  border-top-color: #000; }\n\n.tooltip.top-left .tooltip-arrow {\n  bottom: 0;\n  left: 5px;\n  border-width: 5px 5px 0;\n  border-top-color: #000; }\n\n.tooltip.top-right .tooltip-arrow {\n  bottom: 0;\n  right: 5px;\n  border-width: 5px 5px 0;\n  border-top-color: #000; }\n\n.tooltip.right .tooltip-arrow {\n  top: 50%;\n  left: 0;\n  margin-top: -5px;\n  border-width: 5px 5px 5px 0;\n  border-right-color: #000; }\n\n.tooltip.left .tooltip-arrow {\n  top: 50%;\n  right: 0;\n  margin-top: -5px;\n  border-width: 5px 0 5px 5px;\n  border-left-color: #000; }\n\n.tooltip.bottom .tooltip-arrow {\n  top: 0;\n  left: 50%;\n  margin-left: -5px;\n  border-width: 0 5px 5px;\n  border-bottom-color: #000; }\n\n.tooltip.bottom-left .tooltip-arrow {\n  top: 0;\n  left: 5px;\n  border-width: 0 5px 5px;\n  border-bottom-color: #000; }\n\n.tooltip.bottom-right .tooltip-arrow {\n  top: 0;\n  right: 5px;\n  border-width: 0 5px 5px;\n  border-bottom-color: #000; }\n\n.popover {\n  position: absolute;\n  top: 0;\n  left: 0;\n  z-index: 1010;\n  display: none;\n  max-width: 276px;\n  padding: 1px;\n  text-align: left;\n  background-color: #fff;\n  background-clip: padding-box;\n  border: 1px solid #ccc;\n  border: 1px solid rgba(0, 0, 0, 0.2);\n  border-radius: 6px;\n  box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);\n  white-space: normal; }\n  .popover.top {\n    margin-top: -10px; }\n  .popover.right {\n    margin-left: 10px; }\n  .popover.bottom {\n    margin-top: 10px; }\n  .popover.left {\n    margin-left: -10px; }\n\n.popover-title {\n  margin: 0;\n  padding: 8px 14px;\n  font-size: 15px;\n  font-weight: normal;\n  line-height: 18px;\n  background-color: #f7f7f7;\n  border-bottom: 1px solid #ebebeb;\n  border-radius: 5px 5px 0 0; }\n\n.popover-content {\n  padding: 9px 14px; }\n\n.popover .arrow, .popover .arrow:after {\n  position: absolute;\n  display: block;\n  width: 0;\n  height: 0;\n  border-color: transparent;\n  border-style: solid; }\n\n.popover .arrow {\n  border-width: 11px; }\n\n.popover .arrow:after {\n  border-width: 10px;\n  content: \"\"; }\n\n.popover.top .arrow {\n  left: 50%;\n  margin-left: -11px;\n  border-bottom-width: 0;\n  border-top-color: #999;\n  border-top-color: rgba(0, 0, 0, 0.25);\n  bottom: -11px; }\n  .popover.top .arrow:after {\n    content: \" \";\n    bottom: 1px;\n    margin-left: -10px;\n    border-bottom-width: 0;\n    border-top-color: #fff; }\n\n.popover.right .arrow {\n  top: 50%;\n  left: -11px;\n  margin-top: -11px;\n  border-left-width: 0;\n  border-right-color: #999;\n  border-right-color: rgba(0, 0, 0, 0.25); }\n  .popover.right .arrow:after {\n    content: \" \";\n    left: 1px;\n    bottom: -10px;\n    border-left-width: 0;\n    border-right-color: #fff; }\n\n.popover.bottom .arrow {\n  left: 50%;\n  margin-left: -11px;\n  border-top-width: 0;\n  border-bottom-color: #999;\n  border-bottom-color: rgba(0, 0, 0, 0.25);\n  top: -11px; }\n  .popover.bottom .arrow:after {\n    content: \" \";\n    top: 1px;\n    margin-left: -10px;\n    border-top-width: 0;\n    border-bottom-color: #fff; }\n\n.popover.left .arrow {\n  top: 50%;\n  right: -11px;\n  margin-top: -11px;\n  border-right-width: 0;\n  border-left-color: #999;\n  border-left-color: rgba(0, 0, 0, 0.25); }\n  .popover.left .arrow:after {\n    content: \" \";\n    right: 1px;\n    border-right-width: 0;\n    border-left-color: #fff;\n    bottom: -10px; }\n\n.carousel {\n  position: relative; }\n\n.carousel-inner {\n  position: relative;\n  overflow: hidden;\n  width: 100%; }\n  .carousel-inner > .item {\n    display: none;\n    position: relative;\n    transition: 0.6s ease-in-out left; }\n    .carousel-inner > .item > img,\n    .carousel-inner > .item > a > img {\n      display: block;\n      max-width: 100%;\n      height: auto;\n      line-height: 1; }\n  .carousel-inner > .active,\n  .carousel-inner > .next,\n  .carousel-inner > .prev {\n    display: block; }\n  .carousel-inner > .active {\n    left: 0; }\n  .carousel-inner > .next,\n  .carousel-inner > .prev {\n    position: absolute;\n    top: 0;\n    width: 100%; }\n  .carousel-inner > .next {\n    left: 100%; }\n  .carousel-inner > .prev {\n    left: -100%; }\n  .carousel-inner > .next.left,\n  .carousel-inner > .prev.right {\n    left: 0; }\n  .carousel-inner > .active.left {\n    left: -100%; }\n  .carousel-inner > .active.right {\n    left: 100%; }\n\n.carousel-control {\n  position: absolute;\n  top: 0;\n  left: 0;\n  bottom: 0;\n  width: 15%;\n  opacity: 0.5;\n  filter: alpha(opacity=50);\n  font-size: 20px;\n  color: #fff;\n  text-align: center;\n  text-shadow: 0 1px 2px rgba(0, 0, 0, 0.6); }\n  .carousel-control.left {\n    background-image: linear-gradient(to right, rgba(0, 0, 0, 0.5) 0%, rgba(0, 0, 0, 0.0001) 100%);\n    background-repeat: repeat-x;\n    filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1); }\n  .carousel-control.right {\n    left: auto;\n    right: 0;\n    background-image: linear-gradient(to right, rgba(0, 0, 0, 0.0001) 0%, rgba(0, 0, 0, 0.5) 100%);\n    background-repeat: repeat-x;\n    filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1); }\n  .carousel-control:hover, .carousel-control:focus {\n    color: #fff;\n    text-decoration: none;\n    opacity: 0.9;\n    filter: alpha(opacity=90); }\n  .carousel-control .icon-prev,\n  .carousel-control .icon-next,\n  .carousel-control .glyphicon-chevron-left,\n  .carousel-control .glyphicon-chevron-right {\n    position: absolute;\n    top: 50%;\n    left: 50%;\n    z-index: 5;\n    display: inline-block; }\n  .carousel-control .icon-prev,\n  .carousel-control .icon-next {\n    width: 20px;\n    height: 20px;\n    margin-top: -10px;\n    margin-left: -10px;\n    font-family: serif; }\n  .carousel-control .icon-prev:before {\n    content: '\\2039'; }\n  .carousel-control .icon-next:before {\n    content: '\\203a'; }\n\n.carousel-indicators {\n  position: absolute;\n  bottom: 10px;\n  left: 50%;\n  z-index: 15;\n  width: 60%;\n  margin-left: -30%;\n  padding-left: 0;\n  list-style: none;\n  text-align: center; }\n  .carousel-indicators li {\n    display: inline-block;\n    width: 10px;\n    height: 10px;\n    margin: 1px;\n    text-indent: -999px;\n    border: 1px solid #fff;\n    border-radius: 10px;\n    cursor: pointer; }\n  .carousel-indicators .active {\n    margin: 0;\n    width: 12px;\n    height: 12px;\n    background-color: #fff; }\n\n.carousel-caption {\n  position: absolute;\n  left: 15%;\n  right: 15%;\n  bottom: 20px;\n  z-index: 10;\n  padding-top: 20px;\n  padding-bottom: 20px;\n  color: #fff;\n  text-align: center;\n  text-shadow: 0 1px 2px rgba(0, 0, 0, 0.6); }\n  .carousel-caption .btn {\n    text-shadow: none; }\n\n@media screen and (min-width: 768px) {\n  .carousel-control .icon-prev,\n  .carousel-control .icon-next {\n    width: 30px;\n    height: 30px;\n    margin-top: -15px;\n    margin-left: -15px;\n    font-size: 30px; }\n  .carousel-caption {\n    left: 20%;\n    right: 20%;\n    padding-bottom: 30px; }\n  .carousel-indicators {\n    bottom: 20px; } }\n\n.clearfix:before, .clearfix:after {\n  content: \" \";\n  /* 1 */\n  display: table;\n  /* 2 */ }\n\n.clearfix:after {\n  clear: both; }\n\n.pull-right {\n  float: right !important; }\n\n.pull-left {\n  float: left !important; }\n\n.hide {\n  display: none !important; }\n\n.show {\n  display: block !important; }\n\n.invisible {\n  visibility: hidden; }\n\n.text-hide {\n  font: 0/0 a;\n  color: transparent;\n  text-shadow: none;\n  background-color: transparent;\n  border: 0; }\n\n.affix {\n  position: fixed; }\n\n@-ms-viewport {\n  width: device-width; }\n\n@media screen and (max-width: 400px) {\n  @-ms-viewport {\n    width: 320px; } }\n\n.hidden {\n  display: none !important;\n  visibility: hidden !important; }\n\n.visible-xs {\n  display: none !important; }\n\ntr.visible-xs {\n  display: none !important; }\n\nth.visible-xs,\ntd.visible-xs {\n  display: none !important; }\n\n@media (max-width: 767px) {\n  .visible-xs {\n    display: block !important; }\n  tr.visible-xs {\n    display: table-row !important; }\n  th.visible-xs,\n  td.visible-xs {\n    display: table-cell !important; } }\n\n@media (min-width: 768px) and (max-width: 991px) {\n  .visible-xs.visible-sm {\n    display: block !important; }\n  tr.visible-xs.visible-sm {\n    display: table-row !important; }\n  th.visible-xs.visible-sm,\n  td.visible-xs.visible-sm {\n    display: table-cell !important; } }\n\n@media (min-width: 992px) and (max-width: 1199px) {\n  .visible-xs.visible-md {\n    display: block !important; }\n  tr.visible-xs.visible-md {\n    display: table-row !important; }\n  th.visible-xs.visible-md,\n  td.visible-xs.visible-md {\n    display: table-cell !important; } }\n\n@media (min-width: 1200px) {\n  .visible-xs.visible-lg {\n    display: block !important; }\n  tr.visible-xs.visible-lg {\n    display: table-row !important; }\n  th.visible-xs.visible-lg,\n  td.visible-xs.visible-lg {\n    display: table-cell !important; } }\n\n.visible-sm {\n  display: none !important; }\n\ntr.visible-sm {\n  display: none !important; }\n\nth.visible-sm,\ntd.visible-sm {\n  display: none !important; }\n\n@media (max-width: 767px) {\n  .visible-sm.visible-xs {\n    display: block !important; }\n  tr.visible-sm.visible-xs {\n    display: table-row !important; }\n  th.visible-sm.visible-xs,\n  td.visible-sm.visible-xs {\n    display: table-cell !important; } }\n\n@media (min-width: 768px) and (max-width: 991px) {\n  .visible-sm {\n    display: block !important; }\n  tr.visible-sm {\n    display: table-row !important; }\n  th.visible-sm,\n  td.visible-sm {\n    display: table-cell !important; } }\n\n@media (min-width: 992px) and (max-width: 1199px) {\n  .visible-sm.visible-md {\n    display: block !important; }\n  tr.visible-sm.visible-md {\n    display: table-row !important; }\n  th.visible-sm.visible-md,\n  td.visible-sm.visible-md {\n    display: table-cell !important; } }\n\n@media (min-width: 1200px) {\n  .visible-sm.visible-lg {\n    display: block !important; }\n  tr.visible-sm.visible-lg {\n    display: table-row !important; }\n  th.visible-sm.visible-lg,\n  td.visible-sm.visible-lg {\n    display: table-cell !important; } }\n\n.visible-md {\n  display: none !important; }\n\ntr.visible-md {\n  display: none !important; }\n\nth.visible-md,\ntd.visible-md {\n  display: none !important; }\n\n@media (max-width: 767px) {\n  .visible-md.visible-xs {\n    display: block !important; }\n  tr.visible-md.visible-xs {\n    display: table-row !important; }\n  th.visible-md.visible-xs,\n  td.visible-md.visible-xs {\n    display: table-cell !important; } }\n\n@media (min-width: 768px) and (max-width: 991px) {\n  .visible-md.visible-sm {\n    display: block !important; }\n  tr.visible-md.visible-sm {\n    display: table-row !important; }\n  th.visible-md.visible-sm,\n  td.visible-md.visible-sm {\n    display: table-cell !important; } }\n\n@media (min-width: 992px) and (max-width: 1199px) {\n  .visible-md {\n    display: block !important; }\n  tr.visible-md {\n    display: table-row !important; }\n  th.visible-md,\n  td.visible-md {\n    display: table-cell !important; } }\n\n@media (min-width: 1200px) {\n  .visible-md.visible-lg {\n    display: block !important; }\n  tr.visible-md.visible-lg {\n    display: table-row !important; }\n  th.visible-md.visible-lg,\n  td.visible-md.visible-lg {\n    display: table-cell !important; } }\n\n.visible-lg {\n  display: none !important; }\n\ntr.visible-lg {\n  display: none !important; }\n\nth.visible-lg,\ntd.visible-lg {\n  display: none !important; }\n\n@media (max-width: 767px) {\n  .visible-lg.visible-xs {\n    display: block !important; }\n  tr.visible-lg.visible-xs {\n    display: table-row !important; }\n  th.visible-lg.visible-xs,\n  td.visible-lg.visible-xs {\n    display: table-cell !important; } }\n\n@media (min-width: 768px) and (max-width: 991px) {\n  .visible-lg.visible-sm {\n    display: block !important; }\n  tr.visible-lg.visible-sm {\n    display: table-row !important; }\n  th.visible-lg.visible-sm,\n  td.visible-lg.visible-sm {\n    display: table-cell !important; } }\n\n@media (min-width: 992px) and (max-width: 1199px) {\n  .visible-lg.visible-md {\n    display: block !important; }\n  tr.visible-lg.visible-md {\n    display: table-row !important; }\n  th.visible-lg.visible-md,\n  td.visible-lg.visible-md {\n    display: table-cell !important; } }\n\n@media (min-width: 1200px) {\n  .visible-lg {\n    display: block !important; }\n  tr.visible-lg {\n    display: table-row !important; }\n  th.visible-lg,\n  td.visible-lg {\n    display: table-cell !important; } }\n\n.hidden-xs {\n  display: block !important; }\n\ntr.hidden-xs {\n  display: table-row !important; }\n\nth.hidden-xs,\ntd.hidden-xs {\n  display: table-cell !important; }\n\n@media (max-width: 767px) {\n  .hidden-xs {\n    display: none !important; }\n  tr.hidden-xs {\n    display: none !important; }\n  th.hidden-xs,\n  td.hidden-xs {\n    display: none !important; } }\n\n@media (min-width: 768px) and (max-width: 991px) {\n  .hidden-xs.hidden-sm {\n    display: none !important; }\n  tr.hidden-xs.hidden-sm {\n    display: none !important; }\n  th.hidden-xs.hidden-sm,\n  td.hidden-xs.hidden-sm {\n    display: none !important; } }\n\n@media (min-width: 992px) and (max-width: 1199px) {\n  .hidden-xs.hidden-md {\n    display: none !important; }\n  tr.hidden-xs.hidden-md {\n    display: none !important; }\n  th.hidden-xs.hidden-md,\n  td.hidden-xs.hidden-md {\n    display: none !important; } }\n\n@media (min-width: 1200px) {\n  .hidden-xs.hidden-lg {\n    display: none !important; }\n  tr.hidden-xs.hidden-lg {\n    display: none !important; }\n  th.hidden-xs.hidden-lg,\n  td.hidden-xs.hidden-lg {\n    display: none !important; } }\n\n.hidden-sm {\n  display: block !important; }\n\ntr.hidden-sm {\n  display: table-row !important; }\n\nth.hidden-sm,\ntd.hidden-sm {\n  display: table-cell !important; }\n\n@media (max-width: 767px) {\n  .hidden-sm.hidden-xs {\n    display: none !important; }\n  tr.hidden-sm.hidden-xs {\n    display: none !important; }\n  th.hidden-sm.hidden-xs,\n  td.hidden-sm.hidden-xs {\n    display: none !important; } }\n\n@media (min-width: 768px) and (max-width: 991px) {\n  .hidden-sm {\n    display: none !important; }\n  tr.hidden-sm {\n    display: none !important; }\n  th.hidden-sm,\n  td.hidden-sm {\n    display: none !important; } }\n\n@media (min-width: 992px) and (max-width: 1199px) {\n  .hidden-sm.hidden-md {\n    display: none !important; }\n  tr.hidden-sm.hidden-md {\n    display: none !important; }\n  th.hidden-sm.hidden-md,\n  td.hidden-sm.hidden-md {\n    display: none !important; } }\n\n@media (min-width: 1200px) {\n  .hidden-sm.hidden-lg {\n    display: none !important; }\n  tr.hidden-sm.hidden-lg {\n    display: none !important; }\n  th.hidden-sm.hidden-lg,\n  td.hidden-sm.hidden-lg {\n    display: none !important; } }\n\n.hidden-md {\n  display: block !important; }\n\ntr.hidden-md {\n  display: table-row !important; }\n\nth.hidden-md,\ntd.hidden-md {\n  display: table-cell !important; }\n\n@media (max-width: 767px) {\n  .hidden-md.hidden-xs {\n    display: none !important; }\n  tr.hidden-md.hidden-xs {\n    display: none !important; }\n  th.hidden-md.hidden-xs,\n  td.hidden-md.hidden-xs {\n    display: none !important; } }\n\n@media (min-width: 768px) and (max-width: 991px) {\n  .hidden-md.hidden-sm {\n    display: none !important; }\n  tr.hidden-md.hidden-sm {\n    display: none !important; }\n  th.hidden-md.hidden-sm,\n  td.hidden-md.hidden-sm {\n    display: none !important; } }\n\n@media (min-width: 992px) and (max-width: 1199px) {\n  .hidden-md {\n    display: none !important; }\n  tr.hidden-md {\n    display: none !important; }\n  th.hidden-md,\n  td.hidden-md {\n    display: none !important; } }\n\n@media (min-width: 1200px) {\n  .hidden-md.hidden-lg {\n    display: none !important; }\n  tr.hidden-md.hidden-lg {\n    display: none !important; }\n  th.hidden-md.hidden-lg,\n  td.hidden-md.hidden-lg {\n    display: none !important; } }\n\n.hidden-lg {\n  display: block !important; }\n\ntr.hidden-lg {\n  display: table-row !important; }\n\nth.hidden-lg,\ntd.hidden-lg {\n  display: table-cell !important; }\n\n@media (max-width: 767px) {\n  .hidden-lg.hidden-xs {\n    display: none !important; }\n  tr.hidden-lg.hidden-xs {\n    display: none !important; }\n  th.hidden-lg.hidden-xs,\n  td.hidden-lg.hidden-xs {\n    display: none !important; } }\n\n@media (min-width: 768px) and (max-width: 991px) {\n  .hidden-lg.hidden-sm {\n    display: none !important; }\n  tr.hidden-lg.hidden-sm {\n    display: none !important; }\n  th.hidden-lg.hidden-sm,\n  td.hidden-lg.hidden-sm {\n    display: none !important; } }\n\n@media (min-width: 992px) and (max-width: 1199px) {\n  .hidden-lg.hidden-md {\n    display: none !important; }\n  tr.hidden-lg.hidden-md {\n    display: none !important; }\n  th.hidden-lg.hidden-md,\n  td.hidden-lg.hidden-md {\n    display: none !important; } }\n\n@media (min-width: 1200px) {\n  .hidden-lg {\n    display: none !important; }\n  tr.hidden-lg {\n    display: none !important; }\n  th.hidden-lg,\n  td.hidden-lg {\n    display: none !important; } }\n\n.visible-print {\n  display: none !important; }\n\ntr.visible-print {\n  display: none !important; }\n\nth.visible-print,\ntd.visible-print {\n  display: none !important; }\n\n@media print {\n  .visible-print {\n    display: block !important; }\n  tr.visible-print {\n    display: table-row !important; }\n  th.visible-print,\n  td.visible-print {\n    display: table-cell !important; }\n  .hidden-print {\n    display: none !important; }\n  tr.hidden-print {\n    display: none !important; }\n  th.hidden-print,\n  td.hidden-print {\n    display: none !important; } }\n\n/* @license\n * MyFonts Webfont Build ID 2656303, 2013-10-02T11:03:28-0400\n *\n * The fonts listed in this notice are subject to the End User License\n * Agreement(s) entered into by the website owner. All other parties are\n * explicitly restricted from using the Licensed Webfonts(s).\n *\n * You may obtain a valid license at the URLs below.\n *\n * Webfont: Avenir Next Pro Regular by Linotype\n * URL: http://www.myfonts.com/fonts/linotype/avenir-next-pro/pro-regular/\n *\n * Webfont: Avenir Next Pro Medium by Linotype\n * URL: http://www.myfonts.com/fonts/linotype/avenir-next-pro/pro-medium/\n *\n *\n * License: http://www.myfonts.com/viewlicense?type=web&buildid=2656303\n * Licensed pageviews: 250,000\n * Webfonts copyright: Copyright &#x00A9; 2004 - 2007 Linotype GmbH, www.linotype.com. All rights reserved. This font software may not be reproduced, modified, disclosed or transferred without the express written approval of Linotype GmbH. Avenir is a trademark of Linotype GmbH\n *\n * © 2013 MyFonts Inc\n*/\n/* @import must be at top of file, otherwise CSS will not work\n@import url(\"//hello.myfonts.net/count/28882f\");*/\n/* Avenir Next Pro */\n@font-face {\n  font-family: 'AvenirNextLTPro-Regular';\n  src: url(\"https://code.ionicframework.com/assets/fonts/28882F_0_0.eot\");\n  src: url(\"https://code.ionicframework.com/assets/fonts/28882F_0_0.eot?#iefix\") format(\"embedded-opentype\"), url(\"https://code.ionicframework.com/assets/fonts/28882F_0_0.woff\") format(\"woff\"), url(\"https://code.ionicframework.com/assets/fonts/28882F_0_0.ttf\") format(\"truetype\"); }\n\n@font-face {\n  font-family: 'AvenirNextLTPro-Medium';\n  src: url(\"https://code.ionicframework.com/assets/fonts/28882F_1_0.eot\");\n  src: url(\"https://code.ionicframework.com/assets/fonts/28882F_1_0.eot?#iefix\") format(\"embedded-opentype\"), url(\"https://code.ionicframework.com/assets/fonts/28882F_1_0.woff\") format(\"woff\"), url(\"https://code.ionicframework.com/assets/fonts/28882F_1_0.ttf\") format(\"truetype\"); }\n\n@font-face {\n  font-family: 'AvenirNextLTPro-UltLt';\n  src: url(\"https://code.ionicframework.com/assets/fonts/29CC36_0_0.eot\");\n  src: url(\"https://code.ionicframework.com/assets/fonts/29CC36_0_0.eot?#iefix\") format(\"embedded-opentype\"), url(\"https://code.ionicframework.com/assets/fonts/29CC36_0_0.woff\") format(\"woff\"), url(\"https://code.ionicframework.com/assets/fonts/29CC36_0_0.ttf\") format(\"truetype\"); }\n\n/* Consolidated Avenir */\n@font-face {\n  font-family: 'Avenir Next';\n  src: url(\"/fonts/avenir-next/bold.eot\");\n  src: url(\"/fonts/avenir-next/bold.eot?#iefix\") format(\"embedded-opentype\"), url(\"/fonts/avenir-next/bold.woff2\") format(\"woff2\"), url(\"/fonts/avenir-next/bold.woff\") format(\"woff\"), url(\"/fonts/avenir-next/bold.ttf\") format(\"truetype\");\n  font-weight: 700; }\n\n@font-face {\n  font-family: 'Avenir Next';\n  src: url(\"/fonts/avenir-next/demi.eot\");\n  src: url(\"/fonts/avenir-next/demi.eot?#iefix\") format(\"embedded-opentype\"), url(\"/fonts/avenir-next/demi.woff2\") format(\"woff2\"), url(\"/fonts/avenir-next/demi.woff\") format(\"woff\"), url(\"/fonts/avenir-next/demi.ttf\") format(\"truetype\");\n  font-weight: 600; }\n\n@font-face {\n  font-family: 'Avenir Next';\n  src: url(\"/fonts/avenir-next/medium.eot\");\n  src: url(\"/fonts/avenir-next/medium.eot?#iefix\") format(\"embedded-opentype\"), url(\"/fonts/avenir-next/medium.woff\") format(\"woff\"), url(\"/fonts/avenir-next/medium.ttf\") format(\"truetype\");\n  font-weight: 500; }\n\n@font-face {\n  font-family: 'Avenir Next';\n  src: url(\"/fonts/avenir-next/regular.eot\");\n  src: url(\"/fonts/avenir-next/regular.eot?#iefix\") format(\"embedded-opentype\"), url(\"/fonts/avenir-next/regular.woff\") format(\"woff\"), url(\"/fonts/avenir-next/regular.ttf\") format(\"truetype\");\n  font-weight: 400; }\n\n@font-face {\n  font-family: 'Avenir Next';\n  src: url(\"/fonts/avenir-next/thin.eot\");\n  src: url(\"/fonts/avenir-next/thin.eot?#iefix\") format(\"embedded-opentype\"), url(\"/fonts/avenir-next/thin.woff2\") format(\"woff2\"), url(\"/fonts/avenir-next/thin.woff\") format(\"woff\"), url(\"/fonts/avenir-next/thin.ttf\") format(\"truetype\");\n  font-weight: 300; }\n\n@font-face {\n  font-family: 'Avenir Next';\n  src: url(\"/fonts/avenir-next/ultralight.eot\");\n  src: url(\"/fonts/avenir-next/ultralight.eot?#iefix\") format(\"embedded-opentype\"), url(\"/fonts/avenir-next/ultralight.woff\") format(\"woff\"), url(\"/fonts/avenir-next/ultralight.ttf\") format(\"truetype\");\n  font-weight: 200; }\n\n@font-face {\n  font-family: \"Ionicons\";\n  src: url(\"../fonts/ionicons.eot?v=2.0.1\");\n  src: url(\"../fonts/ionicons.eot?v=2.0.1#iefix\") format(\"embedded-opentype\"), url(\"../fonts/ionicons.ttf?v=2.0.1\") format(\"truetype\"), url(\"../fonts/ionicons.woff?v=2.0.1\") format(\"woff\"), url(\"../fonts/ionicons.woff\") format(\"woff\"), url(\"../fonts/ionicons.svg?v=2.0.1#Ionicons\") format(\"svg\");\n  font-weight: normal;\n  font-style: normal; }\n\n/*\n * Some CSS adapted from LayerVault, http://layervault.com\n */\n.fade-down.ng-enter {\n  -webkit-animation: fadeInDown 0.5s both;\n  animation: fadeInDown 0.5s both; }\n\n.fade-down.ng-leave {\n  -webkit-animation: fadeOutUp 0.5s both;\n  animation: fadeOutUp 0.5s both;\n  width: 100%;\n  position: absolute; }\n\n[step] {\n  margin-bottom: 30px; }\n\n.inset-step {\n  padding-left: 15px;\n  margin-top: 10px; }\n\n.input-container,\n.input-container * {\n  box-sizing: border-box;\n  font-family: \"Helvetica Neue\", Helvetica, Arial, \"Lucida Grande\", sans-serif; }\n\n.input-container {\n  margin-bottom: 10px;\n  position: relative; }\n  .input-container * {\n    margin-bottom: 5px; }\n  .input-container .subtext {\n    color: #999;\n    font-size: 14px;\n    font-weight: 300; }\n  .input-container input,\n  .input-container textarea {\n    font-size: 16px;\n    font-family: \"Helvetica Neue\", Helvetica, Arial, \"Lucida Grande\", sans-serif;\n    -webkit-font-smoothing: antialiased;\n    width: 100%;\n    height: 60px;\n    transition: border 300ms ease;\n    outline: none;\n    padding: 18px 10px 0 8px;\n    border-radius: 4px;\n    border: 2px solid #ddd; }\n    .input-container input:focus,\n    .input-container textarea:focus {\n      border-color: #4e8ef7; }\n    .input-container input.error,\n    .input-container textarea.error {\n      border-color: #f95c5c; }\n  .input-container textarea {\n    height: 150px;\n    padding: 10px; }\n  .input-container label {\n    font-size: 11px;\n    font-weight: 300;\n    transition: color 300ms ease;\n    float: left;\n    position: absolute;\n    display: block;\n    top: 5px;\n    left: 11px;\n    font-size: 12px;\n    color: #bcbcbc; }\n  .input-container .description ~ label {\n    top: 31px; }\n  .input-container label.error {\n    display: none;\n    color: #f95c5c; }\n  .input-container input:focus ~ label:not(.error) {\n    color: #4e8ef7; }\n  .input-container input.error ~ label {\n    display: none; }\n    .input-container input.error ~ label.error {\n      display: block; }\n\nh1 {\n  padding-bottom: 10px;\n  margin: 40px 0px 15px 0px; }\n\nh2 {\n  margin: 35px 0px 10px 0px; }\n\nh3 {\n  margin-top: 15px; }\n\nh1, h2, h3, h4, h5, h6, .btn {\n  font-weight: normal;\n  font-family: \"AvenirNextLTPro-Regular\", \"Helvetica Neue\", Helvetica, Arial, sans-serif; }\n\nh1, h2, h3, h4, h5, h6 {\n  color: #333; }\n  h1:first-child, h2:first-child, h3:first-child, h4:first-child, h5:first-child, h6:first-child {\n    margin-top: 0; }\n\nh1 a, h2 a, h3 a, h4 a, h5 a, h6 a {\n  color: #333; }\n\nh1 + h2 {\n  margin-top: 0;\n  color: #666;\n  font-size: 18px; }\n\nh1 + h2 + p {\n  margin-top: 20px; }\n\n.subheading {\n  color: #888;\n  font-size: 15px; }\n\n.guide-content {\n  color: #333;\n  font-size: 16px; }\n  .guide-content h1, .guide-content h2 {\n    margin-bottom: 20px; }\n  .guide-content p {\n    line-height: 30px;\n    margin: 25px 0px; }\n  .guide-content .well p {\n    margin: 0px 0px 10px 0px; }\n\n#demo {\n  padding-bottom: 80px; }\n  #demo #demo-top {\n    margin-bottom: 60px; }\n    #demo #demo-top h1, #demo #demo-top h4 {\n      text-align: center; }\n    #demo #demo-top h1 {\n      border: none;\n      margin: 50px 0px 5px 0px; }\n    #demo #demo-top h4 {\n      color: #777;\n      font-weight: normal;\n      margin-bottom: 20px; }\n  #demo pre {\n    border: none; }\n  #demo .phone-case {\n    margin: 0px auto 30px auto;\n    float: none;\n    cursor: pointer; }\n    #demo .phone-case iframe {\n      cursor: pointer; }\n\n.testimonials blockquote {\n  margin: 0;\n  padding: 0;\n  border: none; }\n  .testimonials blockquote p {\n    margin: 30px 0 0 0;\n    padding: 5px 10px 15px 30px;\n    background: url(\"/img/quote.png\") no-repeat;\n    background-size: 25px 25px;\n    font-size: 16px; }\n\n.testimonials footer {\n  margin-left: 30px;\n  padding-left: 50px;\n  background-color: white;\n  background-size: 44px 40px;\n  background-repeat: no-repeat;\n  transition: opacity 0.3s; }\n\n.testimonial-content {\n  position: relative;\n  margin: 0 auto;\n  padding: 0 5px 30px 5px;\n  max-width: 1050px; }\n\n@media (min-width: 768px) {\n  .testimonials {\n    position: relative;\n    height: 365px; }\n    .testimonials blockquote p {\n      position: absolute;\n      top: 70px;\n      margin: 0;\n      padding: 10px 80px 0 80px;\n      min-height: 150px;\n      background-size: 50px 50px;\n      color: #888;\n      text-align: center;\n      font-weight: normal;\n      font-size: 22px;\n      font-family: Georgia, serif;\n      line-height: 34px;\n      opacity: 0;\n      transition: opacity 0.3s;\n      -webkit-font-smoothing: antialiased; }\n    .testimonials blockquote.active p {\n      opacity: 1; }\n    .testimonials footer {\n      position: absolute;\n      top: 220px;\n      margin-left: 0;\n      padding-top: 5px;\n      max-width: 230px;\n      width: 230px;\n      height: 65px;\n      background-size: 44px 40px;\n      font-size: 13px;\n      opacity: .4;\n      cursor: pointer; }\n    .testimonials .active footer,\n    .testimonials footer:hover {\n      opacity: 1; }\n    .testimonials .active footer {\n      border-bottom: 2px solid #4F8EF7; }\n    .testimonials cite {\n      color: #4F8EF7;\n      font-weight: 400;\n      font-size: 15px; }\n    .testimonials .testimonial-1 footer {\n      left: 37%; }\n    .testimonials .testimonial-2 footer {\n      right: 10px; }\n  .testimonial-content {\n    padding: 60px 10px 0 10px; } }\n\n@media (min-width: 960px) {\n  .testimonials {\n    height: 380px; }\n    .testimonials blockquote p {\n      font-size: 22px; }\n    .testimonials footer {\n      padding-top: 25px;\n      padding-left: 92px;\n      max-width: 265px;\n      width: 265px;\n      height: 94px;\n      background-size: 88px 80px; } }\n\n@font-face {\n  font-weight: normal;\n  font-style: normal;\n  font-family: \"Ionicons\";\n  src: url(\"../fonts/ionicons-v2.eot?v=1.3.0\");\n  src: url(\"../fonts/ionicons-v2.eot?v=1.3.0#iefix\") format(\"embedded-opentype\"), url(\"../fonts/ionicons-v2.ttf?v=1.3.0\") format(\"truetype\"), url(\"../fonts/ionicons-v2.woff?v=1.3.0\") format(\"woff\"), url(\"../fonts/ionicons-v2.svg?v=1.3.0#Ionicons\") format(\"svg\"); }\n\n.fixed-menu {\n  position: fixed;\n  -webkit-transform: translate3d(0, 0, 0);\n  transform: translate3d(0, 0, 0); }\n\n.ionic.ionic-example .bar {\n  position: relative; }\n\n.device-preview-page .aside-menu {\n  display: none; }\n\n@media (min-width: 992px) {\n  .device-preview-page .aside-menu {\n    display: block; } }\n\n@media (max-width: 991px) {\n  .device-preview-page .main-content {\n    width: 100%; } }\n\n.left-menu {\n  margin-top: 8px;\n  padding-left: 0;\n  list-style: none;\n  font-size: 12px; }\n  .left-menu:first-child {\n    margin-top: 0; }\n  .left-menu a {\n    display: block;\n    color: #444;\n    text-decoration: none; }\n    .left-menu a:hover {\n      background: transparent !important; }\n  .left-menu li {\n    display: none;\n    margin: 8px 0;\n    list-style: none; }\n    .left-menu li.menu-title {\n      display: block;\n      margin-top: 0; }\n    .left-menu li ul {\n      display: none;\n      padding-left: 12px; }\n  .left-menu .menu-title a {\n    color: #aaaaaa;\n    text-transform: uppercase;\n    letter-spacing: 2px;\n    font-size: 11px;\n    line-height: 20px; }\n  .left-menu.nav li.active > a {\n    border-right: 2px solid #4F8EF7;\n    color: #4F8EF7; }\n  .left-menu.nav li.active > ul {\n    display: block; }\n  .left-menu.nav > li > a {\n    padding: 1px 0; }\n\n.left-menu.active-menu .menu-title a {\n  color: #4F8EF7; }\n\n.left-menu.active-menu li {\n  display: block; }\n\n.docs .aside-menu {\n  margin-bottom: 20px; }\n\n.docs .main-content {\n  margin-bottom: 150px; }\n\n.docs-section {\n  padding-bottom: 20px;\n  color: #444;\n  font-size: 14px;\n  line-height: 1.9em; }\n  .docs-section .panel-heading {\n    font-family: Monaco, Menlo, Consolas, \"Courier New\", monospace; }\n  .docs-section .highlight {\n    margin: 10px 0 20px 0; }\n  .docs-section pre {\n    margin-bottom: 0;\n    font-size: 12px !important; }\n  .docs-section h1 a, .docs-section h2 a, .docs-section h3 a {\n    text-decoration: none; }\n  .docs-section h2, .docs-section h3 {\n    padding-bottom: 0; }\n  .docs-section h2 a, .docs-section h3 a {\n    display: block;\n    padding-bottom: 8px;\n    transition: color .15s ease-in-out; }\n  .docs-section td, .docs-section th {\n    font-size: 14px !important; }\n\npre {\n  border: 0;\n  border-left: 4px solid #D7DBE4;\n  background: #F0F3F8; }\n\n.device-preview-page .docs-section {\n  padding-bottom: 60px;\n  min-height: 320px; }\n\n.docs-section h2 {\n  padding-bottom: 16px; }\n\n.docs-section h1 a, .docs-section h2 a, .docs-section h3 a {\n  color: #999; }\n\n.docs-section h1 a:hover,\n.docs-section h2 a:hover,\n.docs-section h3 a:hover {\n  color: #111;\n  text-decoration: none; }\n\n.docs-section.active h2 a, .docs-section.active h3 a {\n  color: #222; }\n\n.doc-example {\n  display: none; }\n\n.docs-section + .docs-section {\n  padding-top: 20px; }\n\n.device-preview-page {\n  position: relative; }\n  .device-preview-page .docs-section:last-child {\n    padding-bottom: 600px; }\n  .device-preview-page .ionic .content-wrapper {\n    overflow: hidden !important;\n    height: 100%; }\n  .device-preview-page .device-preview {\n    position: absolute;\n    right: 0;\n    z-index: 1;\n    width: 380px;\n    height: 810px;\n    background: url(\"/img/phone-case.png\") no-repeat right top; }\n    .device-preview-page .device-preview a {\n      opacity: 1; }\n    .device-preview-page .device-preview .content {\n      position: relative; }\n  @media only screen and (-webkit-min-device-pixel-ratio: 1.3), only screen and (min--moz-device-pixel-ratio: 1.3), only screen and (min-device-pixel-ratio: 1.3), only screen and (-webkit-min-device-pixel-ratio: 1.2916666666666667), only screen and (min-resolution: 124dpi) {\n    .device-preview-page .device-preview {\n      background-image: url(\"/img/phone-case@2x.png\");\n      background-size: 365px 792px; } }\n  .device-preview-page .fixed-preview {\n    position: fixed;\n    top: 0;\n    right: auto;\n    -webkit-transform: translate3d(0, 0, 0);\n    transform: translate3d(0, 0, 0); }\n  .device-preview-page .docs-section {\n    padding-right: 380px; }\n  @media (max-width: 767px) {\n    .device-preview-page .device-preview {\n      display: none; }\n    .device-preview-page .docs-section {\n      padding-right: 0; } }\n  .device-preview-page .device-preview > div {\n    position: absolute;\n    top: 104px;\n    left: 33px;\n    z-index: 0;\n    width: 328px;\n    height: 576px;\n    border: 4px solid #22272d;\n    background-color: white;\n    opacity: 0;\n    transition: opacity .2s ease-in-out; }\n    .device-preview-page .device-preview > div.active-preview {\n      z-index: 100;\n      opacity: 1; }\n    .device-preview-page .device-preview > div.screen-bg {\n      opacity: 1 !important; }\n  .device-preview-page .default-screen .content {\n    height: 100%;\n    background: url(\"/img/ionic_icon.svg\") no-repeat center 115px;\n    background-size: 250px 250px; }\n\n.attention-arrow {\n  position: absolute;\n  background: url(\"/img/attention-arrow.png\") no-repeat; }\n\n@media only screen and (-webkit-min-device-pixel-ratio: 1.3), only screen and (min--moz-device-pixel-ratio: 1.3), only screen and (min-device-pixel-ratio: 1.3), only screen and (-webkit-min-device-pixel-ratio: 1.2916666666666667), only screen and (min-resolution: 124dpi) {\n  .attention-arrow {\n    background: url(\"/img/attention-arrow@2x.png\") no-repeat;\n    background-size: 40px 74px; } }\n\n.ionic div.padding-example {\n  position: relative;\n  margin: 50px auto;\n  max-width: 240px;\n  height: 240px;\n  background: #ccc; }\n  .ionic div.padding-example :first-child {\n    position: absolute;\n    top: 50px;\n    left: 50px;\n    width: 140px;\n    height: 140px;\n    background: #4A87EE; }\n\n.ionic .tabs {\n  position: absolute !important; }\n\n.ionic .item.tabs {\n  position: relative !important; }\n\n.advanced-panel {\n  padding: 10px;\n  border: 1px solid #A7C6FC;\n  border-radius: 2px;\n  background: #F6F9FE;\n  color: #777; }\n  .advanced-panel em {\n    padding-right: 4px;\n    color: #528FF7;\n    vertical-align: middle;\n    font-weight: bold;\n    font-size: 18px; }\n  .advanced-panel a {\n    text-decoration: underline; }\n    .advanced-panel a:hover {\n      text-decoration: none; }\n\n.cards-bg {\n  background: #f9f9f9; }\n\n.ionic .list.color-list-demo .item {\n  padding: 14px 15px 14px 15px; }\n\n.ionic .color-demo {\n  float: right;\n  width: 20px;\n  height: 20px;\n  border-width: 1px;\n  border-style: solid;\n  border-radius: 4px;\n  background: gray; }\n\n.ionic .col-demo {\n  padding: 5px;\n  width: 100%;\n  border: 1px solid #ddd;\n  border-radius: 2px;\n  background: #f7f7f7;\n  text-align: center; }\n\n.ionic .responsive-break {\n  -ms-flex-direction: column;\n  flex-direction: column; }\n  .ionic .responsive-break .col {\n    margin-bottom: 15px;\n    width: 100%; }\n\n.ionic .ionicons-demo li {\n  display: inline-block;\n  padding: 2px;\n  font-size: 32px; }\n  .ionic .ionicons-demo li:before {\n    display: block;\n    width: 42px;\n    text-align: center; }\n\n.table tr td:first-child {\n  white-space: nowrap; }\n\n.docs-home-row {\n  text-align: center; }\n  .docs-home-row > div {\n    margin-top: 50px; }\n  .docs-home-row h3 {\n    color: #333;\n    font-family: \"AvenirNextLTPro-Medium\", \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n    margin-top: 8px; }\n  .docs-home-row h4 {\n    margin-bottom: 8px; }\n  .docs-home-row p {\n    color: #888;\n    font-size: 13px;\n    font-family: \"AvenirNextLTPro-Regular\", \"Helvetica Neue\", Helvetica, Arial, sans-serif; }\n  .docs-home-row a {\n    color: black; }\n  .docs-home-row a:hover {\n    text-decoration: none; }\n\n.docs-screenshot {\n  width: 360px;\n  height: auto;\n  margin: 0 auto 2em auto; }\n\n.btn.btn-default {\n  border-color: #ddd; }\n\n.picker {\n  position: absolute;\n  max-width: 180px;\n  border-radius: 2px;\n  background: rgba(255, 255, 255, 0.3);\n  box-shadow: 0px 1px 0px 0px rgba(0, 0, 0, 0.05), inset 0px 1px 0px 0px rgba(255, 255, 255, 0.1); }\n  .picker select {\n    display: block;\n    padding: 2px 60px 2px 10px;\n    width: 150%;\n    height: 24px;\n    outline: none;\n    border: none;\n    background: transparent;\n    color: #fff;\n    text-indent: 0.01px;\n    text-overflow: '';\n    font-size: 14px;\n    cursor: pointer;\n    -webkit-appearance: none;\n    -moz-appearance: none; }\n  .picker select option {\n    background-color: #9cbbed; }\n  .picker:hover {\n    background: rgba(255, 255, 255, 0.4); }\n  .picker:after {\n    position: absolute;\n    top: 50%;\n    right: 6%;\n    z-index: 0;\n    z-index: 99;\n    margin-top: -2px;\n    width: 0;\n    height: 0;\n    border-top: 3px solid;\n    border-right: 3px solid rgba(0, 0, 0, 0);\n    border-left: 3px solid rgba(0, 0, 0, 0);\n    color: rgba(255, 255, 255, 0.6);\n    content: \"\"; }\n\n.api-title {\n  margin-top: 0;\n  font-size: 24px; }\n\n.docs-api h2 {\n  color: #222;\n  font-size: 22px; }\n\n.docs-api p,\n.docs-api td,\n.docs-api th {\n  color: #444; }\n\n.improve-docs {\n  position: absolute;\n  top: 4px;\n  right: 10px;\n  display: none;\n  float: right; }\n  .improve-docs a {\n    padding: 2px 6px;\n    border: 2px solid #4f8ef7;\n    border-radius: 2px; }\n    .improve-docs a:hover {\n      text-decoration: none;\n      opacity: 1; }\n\n@media (min-width: 992px) {\n  .improve-docs {\n    display: block; } }\n\n#ionitron-image {\n  background: url(\"/img/getting-started/ionitron-avatar.png\") no-repeat transparent;\n  width: 156px;\n  height: 156px; }\n  #ionitron-image.header-ionitron {\n    float: left;\n    margin-right: 10px; }\n    @media screen and (max-width: 800px) {\n      #ionitron-image.header-ionitron {\n        background-size: 48px 48px;\n        width: 48px;\n        height: 48px; } }\n    @media screen and (max-width: 400px) {\n      #ionitron-image.header-ionitron {\n        background-size: 32px 32px;\n        width: 32px;\n        height: 32px; }\n        #ionitron-image.header-ionitron ~ h3 {\n          font-size: 20px;\n          line-height: 34px;\n          margin: 0 0 4px; }\n        #ionitron-image.header-ionitron ~ h4 {\n          font-size: 16px;\n          line-height: 18px;\n          color: #ECF3FF; } }\n\n@media only screen and (-webkit-min-device-pixel-ratio: 1.3), only screen and (min--moz-device-pixel-ratio: 1.3), only screen and (min-device-pixel-ratio: 1.3), only screen and (-webkit-min-device-pixel-ratio: 1.2916666666666667), only screen and (min-resolution: 124dpi) {\n  #ionitron-image {\n    background: url(\"/img/getting-started/ionitron-avatar@2x.png\") no-repeat transparent;\n    background-size: 156px 156px; } }\n\n.alert,\n.docs-container main .alert {\n  background: #ffa82c;\n  border-radius: 3px;\n  display: inline-block;\n  color: rgba(255, 255, 255, 0.8);\n  padding: 20px 30px 20px 65px;\n  position: relative;\n  width: 100%;\n  font-weight: 500;\n  margin: 0 0 20px; }\n  .alert::before,\n  .docs-container main .alert::before {\n    content: '\\f137';\n    font-family: 'Ionicons';\n    position: absolute;\n    left: 25px;\n    top: 10px;\n    font-size: 30px;\n    font-weight: 300;\n    color: rgba(255, 255, 255, 0.9); }\n  .alert a,\n  .alert a:not(.btn),\n  .docs-container main .alert a,\n  .docs-container main .alert a:not(.btn) {\n    color: white;\n    opacity: 1; }\n    .alert a:hover,\n    .alert a:not(.btn):hover,\n    .docs-container main .alert a:hover,\n    .docs-container main .alert a:not(.btn):hover {\n      color: #fff; }\n\n#vs-start-box {\n  margin-top: 25px;\n  border-radius: 1px;\n  border: 1px solid #B390BD;\n  border-left: 4px solid #B390BD;\n  overflow: auto; }\n  #vs-start-box b {\n    color: #46364a; }\n  #vs-start-box img {\n    margin: 15px 15px 0;\n    display: block;\n    float: left; }\n  #vs-start-box .info {\n    padding: 15px; }\n\n#getting-started {\n  padding: 40px 0; }\n  #getting-started .italic {\n    font-family: \"Helvetica Neue\", Helvetica, Arial, \"Lucida Grande\", sans-serif;\n    font-weight: 300;\n    margin: 20px 0;\n    line-height: 26px; }\n  #getting-started i {\n    color: #999; }\n  #getting-started .row {\n    margin-bottom: 100px; }\n  #getting-started .num {\n    float: left;\n    width: 80px; }\n  #getting-started h2 {\n    color: #333333;\n    font-size: 28px;\n    padding-bottom: 4px; }\n  #getting-started h3 {\n    margin-bottom: 20px; }\n  #getting-started .sub-heading {\n    padding-bottom: 10px;\n    margin: auto;\n    max-width: 810px;\n    color: #444;\n    font-weight: 300;\n    font-size: 18px;\n    font-family: \"Helvetica Neue\", Helvetica, Arial, \"Lucida Grande\", sans-serif; }\n  #getting-started .desc {\n    font-family: \"Helvetica Neue\", Helvetica, Arial, \"Lucida Grande\", sans-serif;\n    color: #333;\n    font-weight: 300;\n    font-size: 14px;\n    margin-top: 16px;\n    margin-left: 80px;\n    margin-right: 20px;\n    line-height: 26px; }\n  #getting-started .code {\n    margin-top: 66px; }\n  #getting-started .highlight {\n    background: #eee; }\n  #getting-started input {\n    border: 2px solid #DDD;\n    color: #333;\n    box-shadow: none;\n    -webkit-box-shadow: none;\n    -moz-box-shadow: none;\n    border-radius: 2px; }\n    #getting-started input:focus {\n      border: 2px solid #4e8ef7;\n      box-shadow: none;\n      -webkit-box-shadow: none;\n      -moz-box-shadow: none; }\n  #getting-started .btn-primary {\n    color: #FFF;\n    background-color: #4F8EF7;\n    transition: background-color .1s ease-in-out;\n    border-radius: 2px;\n    padding: 6px 20px; }\n  #getting-started #first-step {\n    margin-top: 60px; }\n  #getting-started #template-images {\n    margin-top: -60px;\n    padding-left: 95px; }\n    @media (max-width: 992px) {\n      #getting-started #template-images {\n        padding-left: 15px; } }\n    #getting-started #template-images .template {\n      text-align: center;\n      float: left;\n      width: 308px;\n      margin: 0 68px; }\n      #getting-started #template-images .template:first-child {\n        margin-left: 0;\n        margin-right: 0; }\n      #getting-started #template-images .template:last-child {\n        margin-left: 0;\n        margin-right: 0; }\n      @media (max-width: 1200px) {\n        #getting-started #template-images .template {\n          width: 272px;\n          margin: 0 20px; }\n          #getting-started #template-images .template .template-image {\n            width: 220px;\n            height: 180px;\n            background-size: 220px; } }\n      @media (max-width: 992px) {\n        #getting-started #template-images .template {\n          width: 226px;\n          margin: 0 20px; } }\n      @media (max-width: 768px) {\n        #getting-started #template-images .template {\n          width: 100%;\n          float: none;\n          margin: 20px 0; }\n          #getting-started #template-images .template .template-image {\n            display: block;\n            margin: 0 auto;\n            background-size: 330px;\n            height: 270px;\n            width: 330px; } }\n    #getting-started #template-images code {\n      display: inline-block;\n      margin-top: 15px; }\n    #getting-started #template-images .template-image {\n      display: inline-block;\n      width: 330px;\n      height: 270px; }\n  #getting-started #start-template-blank-image,\n  #getting-started #start-template-tabs-image,\n  #getting-started #start-template-sidemenu-image {\n    background: transparent no-repeat bottom center url(\"/img/starter-app-thumbnails.png\");\n    background-size: 330px; }\n  #getting-started #start-template-tabs-image {\n    background-position: center center; }\n  #getting-started #start-template-sidemenu-image {\n    background-position: center top; }\n\n#getting-started-cont {\n  border-top: 1px solid #e9ecf3;\n  padding-top: 74px; }\n  #getting-started-cont .what-next hgroup {\n    text-align: center;\n    padding-top: 92px;\n    background: transparent no-repeat top center url(\"/img/getting-started/ionic-checkmark.png\");\n    background-size: 53px;\n    max-width: 575px;\n    margin: 0 auto; }\n  #getting-started-cont .what-next .items {\n    max-width: 950px;\n    margin: 82px auto; }\n  #getting-started-cont .what-next .item {\n    padding-top: 107px;\n    display: inline-block;\n    width: 278px;\n    margin-right: 47px;\n    position: relative; }\n    #getting-started-cont .what-next .item:before {\n      background: transparent no-repeat url(\"/img/getting-started/whats-next-icons.png\");\n      background-size: 80px;\n      height: 80px;\n      width: 80px;\n      position: absolute;\n      top: 0;\n      content: ''; }\n    #getting-started-cont .what-next .item.platform:before {\n      background-position: center -80px; }\n    #getting-started-cont .what-next .item.enterprise:before {\n      background-position: center -160px; }\n    #getting-started-cont .what-next .item:last-child {\n      margin-right: 0; }\n    #getting-started-cont .what-next .item h3 {\n      font-size: 18px;\n      font-family: \"Avenir Next\", \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n      font-weight: 500; }\n    #getting-started-cont .what-next .item p {\n      color: #818893;\n      font-size: 13px;\n      line-height: 2em; }\n    #getting-started-cont .what-next .item .more {\n      font-weight: bold;\n      position: relative;\n      transition-duration: .3s;\n      font-family: \"Avenir Next\", \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n      font-weight: 600; }\n      #getting-started-cont .what-next .item .more:after {\n        font-family: 'Ionicons';\n        content: '\\f3d6';\n        font-size: 20px;\n        font-weight: 700;\n        position: relative;\n        right: -10px;\n        top: 3px; }\n      #getting-started-cont .what-next .item .more:hover {\n        color: #1e6ff5; }\n    @media (max-width: 992px) {\n      #getting-started-cont .what-next .item {\n        margin-right: 5px;\n        width: 240px; } }\n    @media (max-width: 768px) {\n      #getting-started-cont .what-next .item {\n        display: block;\n        width: 100%;\n        max-width: 400px;\n        margin: 0 auto 40px; }\n        #getting-started-cont .what-next .item:last-child {\n          margin-right: auto; } }\n\n#showcase #apps {\n  margin-top: 40px; }\n  #showcase #apps > .row {\n    margin-top: 50px; }\n\n#showcase #contact {\n  margin-top: 15px; }\n\n#showcase .app .row {\n  margin-bottom: 15px; }\n  #showcase .app .row img {\n    width: 100%; }\n\nh2.underline {\n  padding-bottom: 10px;\n  border-bottom: 1px solid #eee;\n  margin: 40px 0px 20px 0px; }\n\n.phone-col {\n  padding: 0; }\n  .phone-col.no-case .phone-case {\n    background: none;\n    margin: 0;\n    float: none;\n    width: 100%; }\n    .phone-col.no-case .phone-case > div {\n      width: 100%;\n      height: 100%; }\n      .phone-col.no-case .phone-case > div .cp_embed_iframe {\n        position: static;\n        width: 100% !important;\n        height: 100%; }\n\n.phone-case {\n  float: right;\n  position: relative;\n  z-index: 1;\n  width: 380px;\n  height: 810px;\n  background: url(\"/img/phone-case.png\") no-repeat right top;\n  margin-left: 20px; }\n  .phone-case a {\n    opacity: 1; }\n  .phone-case .cp_embed_iframe {\n    position: absolute;\n    width: 320px !important;\n    height: 568px;\n    top: 104px;\n    left: 37px; }\n\n@media only screen and (-webkit-min-device-pixel-ratio: 1.3), only screen and (min--moz-device-pixel-ratio: 1.3), only screen and (min-device-pixel-ratio: 1.3), only screen and (-webkit-min-device-pixel-ratio: 1.2916666666666667), only screen and (min-resolution: 124dpi) {\n  .phone-case {\n    background-image: url(\"/img/phone-case@2x.png\");\n    background-size: 365px 792px; } }\n\n.highlight {\n  background: #ffffff; }\n\n.highlight .c {\n  color: #999988;\n  font-style: italic; }\n\n/* Comment */\n/* COMMENTED OUT CUZ IT THINKS DIRECTIVES ARE INVALID .highlight .err { color: #a61717; background-color: #e3d2d2 } Error */\n.highlight .k {\n  font-weight: bold; }\n\n/* Keyword */\n.highlight .o {\n  font-weight: bold; }\n\n/* Operator */\n.highlight .cm {\n  color: #999988;\n  font-style: italic; }\n\n/* Comment.Multiline */\n.highlight .cp {\n  color: #999999;\n  font-weight: bold; }\n\n/* Comment.Preproc */\n.highlight .c1 {\n  color: #999988;\n  font-style: italic; }\n\n/* Comment.Single */\n.highlight .cs {\n  color: #999999;\n  font-weight: bold;\n  font-style: italic; }\n\n/* Comment.Special */\n.highlight .gd {\n  color: #000000;\n  background-color: #ffdddd; }\n\n/* Generic.Deleted */\n.highlight .gd .x {\n  color: #000000;\n  background-color: #ffaaaa; }\n\n/* Generic.Deleted.Specific */\n.highlight .ge {\n  font-style: italic; }\n\n/* Generic.Emph */\n.highlight .gr {\n  color: #aa0000; }\n\n/* Generic.Error */\n.highlight .gh {\n  color: #999999; }\n\n/* Generic.Heading */\n.highlight .gi {\n  color: #000000;\n  background-color: #ddffdd; }\n\n/* Generic.Inserted */\n.highlight .gi .x {\n  color: #000000;\n  background-color: #aaffaa; }\n\n/* Generic.Inserted.Specific */\n.highlight .go {\n  color: #888888; }\n\n/* Generic.Output */\n.highlight .gp {\n  color: #555555; }\n\n/* Generic.Prompt */\n.highlight .gs {\n  font-weight: bold; }\n\n/* Generic.Strong */\n.highlight .gu {\n  color: #aaaaaa; }\n\n/* Generic.Subheading */\n.highlight .gt {\n  color: #aa0000; }\n\n/* Generic.Traceback */\n.highlight .kc {\n  font-weight: bold; }\n\n/* Keyword.Constant */\n.highlight .kd {\n  font-weight: bold; }\n\n/* Keyword.Declaration */\n.highlight .kp {\n  font-weight: bold; }\n\n/* Keyword.Pseudo */\n.highlight .kr {\n  font-weight: bold; }\n\n/* Keyword.Reserved */\n.highlight .kt {\n  color: #445588;\n  font-weight: bold; }\n\n/* Keyword.Type */\n.highlight .m {\n  color: #009999; }\n\n/* Literal.Number */\n.highlight .s {\n  color: #d14; }\n\n/* Literal.String */\n.highlight .na {\n  color: #008080; }\n\n/* Name.Attribute */\n.highlight .nb {\n  color: #0086B3; }\n\n/* Name.Builtin */\n.highlight .nc {\n  color: #445588;\n  font-weight: bold; }\n\n/* Name.Class */\n.highlight .no {\n  color: #008080; }\n\n/* Name.Constant */\n.highlight .ni {\n  color: #800080; }\n\n/* Name.Entity */\n.highlight .ne {\n  color: #990000;\n  font-weight: bold; }\n\n/* Name.Exception */\n.highlight .nf {\n  color: #990000;\n  font-weight: bold; }\n\n/* Name.Function */\n.highlight .nn {\n  color: #555555; }\n\n/* Name.Namespace */\n.highlight .nt {\n  color: #000080; }\n\n/* Name.Tag */\n.highlight .nv {\n  color: #008080; }\n\n/* Name.Variable */\n.highlight .ow {\n  font-weight: bold; }\n\n/* Operator.Word */\n.highlight .w {\n  color: #bbbbbb; }\n\n/* Text.Whitespace */\n.highlight .mf {\n  color: #009999; }\n\n/* Literal.Number.Float */\n.highlight .mh {\n  color: #009999; }\n\n/* Literal.Number.Hex */\n.highlight .mi {\n  color: #009999; }\n\n/* Literal.Number.Integer */\n.highlight .mo {\n  color: #009999; }\n\n/* Literal.Number.Oct */\n.highlight .sb {\n  color: #d14; }\n\n/* Literal.String.Backtick */\n.highlight .sc {\n  color: #d14; }\n\n/* Literal.String.Char */\n.highlight .sd {\n  color: #d14; }\n\n/* Literal.String.Doc */\n.highlight .s2 {\n  color: #d14; }\n\n/* Literal.String.Double */\n.highlight .se {\n  color: #d14; }\n\n/* Literal.String.Escape */\n.highlight .sh {\n  color: #d14; }\n\n/* Literal.String.Heredoc */\n.highlight .si {\n  color: #d14; }\n\n/* Literal.String.Interpol */\n.highlight .sx {\n  color: #d14; }\n\n/* Literal.String.Other */\n.highlight .sr {\n  color: #009926; }\n\n/* Literal.String.Regex */\n.highlight .s1 {\n  color: #d14; }\n\n/* Literal.String.Single */\n.highlight .ss {\n  color: #990073; }\n\n/* Literal.String.Symbol */\n.highlight .bp {\n  color: #999999; }\n\n/* Name.Builtin.Pseudo */\n.highlight .vc {\n  color: #008080; }\n\n/* Name.Variable.Class */\n.highlight .vg {\n  color: #008080; }\n\n/* Name.Variable.Global */\n.highlight .vi {\n  color: #008080; }\n\n/* Name.Variable.Instance */\n.highlight .il {\n  color: #009999; }\n\n/* Literal.Number.Integer.Long */\ncode.language-ts .kr {\n  color: #000080; }\n\ncode.language-ts .nx {\n  color: #008080; }\n\ncode.language-ts .k {\n  color: #0086B3; }\n\n.input-type {\n  position: absolute;\n  bottom: 0;\n  z-index: 1000;\n  width: 100%;\n  height: 300px;\n  background: no-repeat center bottom; }\n\n.ios7 .text-input,\n.ios7 .password-input,\n.ios7 .search-input {\n  background-image: url(\"/img/input-types/ios7/keyboard-text-pass-search.png\"); }\n\n.ios7 .email-input {\n  background-image: url(\"/img/input-types/ios7/keyboard-email.png\"); }\n\n.ios7 .tel-input {\n  background-image: url(\"/img/input-types/ios7/keyboard-tel.png\"); }\n\n.ios7 .number-input {\n  background-image: url(\"/img/input-types/ios7/keyboard-number.png\"); }\n\n.ios7 .date-input {\n  background-image: url(\"/img/input-types/ios7/keyboard-date.png\"); }\n\n.ios7 .month-input {\n  background-image: url(\"/img/input-types/ios7/keyboard-month.png\"); }\n\n@media only screen and (-webkit-min-device-pixel-ratio: 1.3), only screen and (min--moz-device-pixel-ratio: 1.3), only screen and (min-device-pixel-ratio: 1.3), only screen and (-webkit-min-device-pixel-ratio: 1.2916666666666667), only screen and (min-resolution: 124dpi) {\n  .ios7 .input-type {\n    background-size: 320px 260px; }\n  .ios7 .text-input,\n  .ios7 .password-input,\n  .ios7 .search-input {\n    background-image: url(\"/img/input-types/ios7/keyboard-text-pass-search@2x.png\"); }\n  .ios7 .email-input {\n    background-image: url(\"/img/input-types/ios7/keyboard-email@2x.png\"); }\n  .ios7 .tel-input {\n    background-image: url(\"/img/input-types/ios7/keyboard-tel@2x.png\"); }\n  .ios7 .number-input {\n    background-image: url(\"/img/input-types/ios7/keyboard-number@2x.png\"); }\n  .ios7 .date-input {\n    background-image: url(\"/img/input-types/ios7/keyboard-date@2x.png\"); }\n  .ios7 .month-input {\n    background-image: url(\"/img/input-types/ios7/keyboard-month@2x.png\"); } }\n\n.products .content-container {\n  background: white;\n  min-height: 800px;\n  margin-top: 80px; }\n\n.products h1, .products h2, .products p {\n  text-align: center; }\n\n.products .input-container {\n  max-width: 500px;\n  margin: 20px auto; }\n\n#what-is h3 a {\n  font-size: 24px;\n  font-weight: normal;\n  color: #679ef8; }\n  #what-is h3 a:hover {\n    color: #377ef6; }\n\n#what-is p {\n  margin-bottom: 2.0em; }\n\n.v2 .demo {\n  float: right;\n  margin-left: 15px; }\n\n.v2 .demo.inline {\n  float: none;\n  margin-left: 0; }\n\n.v2 .demo a {\n  display: block;\n  text-align: right;\n  margin-top: 15px; }\n\n.v2 .demo iframe {\n  width: 328px;\n  height: 568px;\n  border: none;\n  border-radius: 10px;\n  border: 4px solid #555; }\n\n.v2 .file-title {\n  margin-top: 35px; }\n\n.v2.docs-ui .main-content h3 {\n  margin-top: 2em; }\n\n.v2.docs-ui .main-content .highlight, .v2.docs-ui .main-content p {\n  margin-right: 390px; }\n  .v2.docs-ui .main-content .highlight.less-margin, .v2.docs-ui .main-content p.less-margin {\n    margin-right: 120px; }\n\n.v2.docs-ui .main-content ul.demo-toggle {\n  list-style: none;\n  display: block;\n  position: absolute;\n  top: 32px;\n  right: 285px; }\n  .v2.docs-ui .main-content ul.demo-toggle li {\n    margin-left: 1px;\n    display: inline;\n    float: left; }\n    .v2.docs-ui .main-content ul.demo-toggle li button {\n      background-color: #EFEFF4;\n      color: #000;\n      border: 1px solid #C8C7CC; }\n\na {\n  opacity: 0.8;\n  transition: .1s ease-in-out;\n  transition-property: opacity, border-color; }\n  a:hover, a:focus {\n    opacity: 1;\n    text-decoration: none; }\n\n.text-center {\n  text-align: center; }\n\n.content-container {\n  padding-top: 40px; }\n\n.main-content {\n  min-height: 450px; }\n\n#blog-badge {\n  display: none;\n  position: absolute;\n  padding: 3px 6px;\n  border-radius: 64px;\n  border: 2px solid #FFF;\n  width: 21px;\n  background: #D55757;\n  color: #FFF;\n  right: 6px;\n  top: 15px;\n  text-align: center;\n  z-index: 1;\n  font-size: 11px;\n  font-weight: 700;\n  line-height: 11px; }\n\n.horizontal-gradient {\n  background: #296ad4;\n  background: linear-gradient(to right, #296ad4 0%, #4e8ef7 100%); }\n\n@-webkit-keyframes fadeIn {\n  from {\n    opacity: 0; }\n  to {\n    opacity: 1; } }\n\n@keyframes fadeIn {\n  from {\n    opacity: 0; }\n  to {\n    opacity: 1; } }\n\n.fadeIn {\n  opacity: 0;\n  -webkit-animation: fadeIn ease-in 750ms;\n  animation: fadeIn ease-in 750ms;\n  -webkit-animation-fill-mode: forwards;\n  animation-fill-mode: forwards;\n  -webkit-animation-delay: 500ms;\n  /* Chrome, Safari, Opera */\n  animation-delay: 500ms; }\n\n.white-nav-bar .navbar-default {\n  background: white; }\n\n.white-nav-bar.products-page .products-nav {\n  color: #4F8EF7 !important;\n  border-top-color: #4F8EF7 !important; }\n\n.white-nav-bar .navbar-default .navbar-nav > li > a:hover {\n  color: #4F8EF7 !important;\n  border-top-color: #4F8EF7 !important; }\n\n.navbar-default .navbar-nav > .dropdown > a .caret {\n  border-top-color: #abc0f5;\n  border-bottom-color: #abc0f5; }\n\n.navbar-default .navbar-nav > li.dropdown > a:hover .caret {\n  border-top-color: #fff;\n  border-bottom-color: #fff; }\n\n.navbar-nav > li > .dropdown-menu {\n  display: block !important;\n  pointer-events: none;\n  opacity: 0;\n  -webkit-transform: scale(0.5);\n  transform: scale(0.5);\n  -webkit-transform-origin: 80px 0;\n  transform-origin: 80px 0;\n  transition: all 200ms cubic-bezier(0.24, 0.22, 0.015, 1.56), opacity 100ms linear; }\n\n.navbar-nav > li.dropdown.open > .dropdown-menu {\n  -webkit-transform: scale(1);\n  transform: scale(1);\n  opacity: 1;\n  pointer-events: auto; }\n\n.navbar-nav > li > .dropdown-menu .arrow-up {\n  position: absolute;\n  top: -10px;\n  right: 20px;\n  width: 0;\n  height: 0;\n  border-left: 10px solid transparent;\n  border-right: 10px solid transparent;\n  border-bottom: 10px solid white; }\n\n.navbar-default .navbar-nav > .open > a, .navbar-default .navbar-nav > .open > a:hover, .navbar-default .navbar-nav > .open > a:focus {\n  background: transparent; }\n\n.navbar-nav > li > .dropdown-menu {\n  border: none;\n  box-shadow: 1px 1px 7px rgba(0, 0, 0, 0.3);\n  border-radius: 3px; }\n\n.navbar-default .navbar-nav > .open > a, .navbar-default .navbar-nav > .open > a:hover, .navbar-default .navbar-nav > .open > a:focus {\n  color: #e6e6e6; }\n\n.navbar .dropdown-menu > li > a {\n  color: #677184;\n  font-size: 14px;\n  padding-top: 8px;\n  padding-bottom: 8px;\n  font-family: \"AvenirNextLTPro-Regular\", \"Helvetica Neue\", Helvetica, Arial, sans-serif; }\n  .navbar .dropdown-menu > li > a:hover, .navbar .dropdown-menu > li > a:active, .navbar .dropdown-menu > li > a:focus {\n    background-color: #EFF1F5;\n    color: #677184 !important;\n    border: none !important; }\n\n.navbar-default .navbar-nav > li > a {\n  margin: 0;\n  padding-right: 22px !important;\n  padding-left: 22px !important;\n  border-top: 3px solid transparent;\n  color: #fff;\n  opacity: .6;\n  transition-duration: .25s; }\n  @media (max-width: 991px) {\n    .navbar-default .navbar-nav > li > a {\n      padding-right: 13px !important;\n      padding-left: 13px !important; } }\n  .navbar-default .navbar-nav > li > a:hover {\n    color: white; }\n\n.navbar-default .navbar-collapse .navbar-nav > li > a:hover {\n  border-top: 3px solid #B5CAFF; }\n\n.navbar-default .navbar-toggle {\n  margin-top: 17px;\n  padding: 0;\n  border: none;\n  color: white;\n  font-size: 32px;\n  opacity: .7; }\n  .navbar-default .navbar-toggle:hover, .navbar-default .navbar-toggle:focus {\n    background: none;\n    opacity: 1; }\n\n@media (max-width: 767px) {\n  .navbar-default .navbar-collapse {\n    margin-bottom: 20px;\n    border: none;\n    background: #2155aa;\n    background: linear-gradient(to right, #2155aa 0%, #3e72c6 100%); }\n  .navbar-default .navbar-collapse .navbar-nav > li > a:hover {\n    border-color: transparent !important; } }\n\n@media (min-width: 768px) {\n  .docs-page .docs-nav,\n  .examples-page .examples-nav,\n  .getting-started-page .getting-started-nav,\n  .nav-link:hover,\n  .nav-link:focus {\n    border-top: 3px solid #B5CAFF !important;\n    color: white !important;\n    opacity: 1 !important; }\n  .docs-page.getting-started-page .docs-nav {\n    border-color: transparent !important;\n    color: #abc0f5 !important; } }\n\n.navbar-header .version {\n  float: left;\n  list-style: none;\n  padding-left: 0; }\n  .navbar-header .version > li > a {\n    padding: 26px 12px 0px;\n    font-size: 18px;\n    font-weight: 600;\n    color: rgba(255, 255, 255, 0.5);\n    display: block;\n    transition: .3s color; }\n    @media (max-width: 767px) {\n      .navbar-header .version > li > a {\n        padding: 13px 10px 0px; } }\n    .navbar-header .version > li > a .caret {\n      border-top-color: rgba(255, 255, 255, 0.5); }\n    .navbar-header .version > li > a:hover, .navbar-header .version > li > a:active, .navbar-header .version > li > a:focus {\n      color: rgba(255, 255, 255, 0.7);\n      text-decoration: none; }\n      .navbar-header .version > li > a:hover .caret, .navbar-header .version > li > a:active .caret, .navbar-header .version > li > a:focus .caret {\n        border-top-color: rgba(255, 255, 255, 0.7); }\n  .navbar-header .version .dropdown-menu {\n    display: block;\n    position: absolute;\n    border: 0;\n    border-radius: 3px;\n    padding: 12px 0 10px;\n    top: 56px;\n    left: -23px;\n    right: -100px;\n    min-width: 155px;\n    box-shadow: 0 2px 5px rgba(0, 0, 0, 0.15), 0 0 1px rgba(0, 0, 0, 0.2);\n    opacity: 0;\n    -webkit-transform: scale(0.01);\n            transform: scale(0.01);\n    -webkit-transform-origin: 20% 8px;\n            transform-origin: 20% 8px;\n    transition: all 0.3s cubic-bezier(0.155, 1.105, 0.295, 1.12), opacity 0.1s linear; }\n    .navbar-header .version .dropdown-menu a {\n      padding: 6px 23px;\n      line-height: 1.6;\n      font-size: 13px;\n      font-weight: 500; }\n      .navbar-header .version .dropdown-menu a i::before {\n        font-size: 30px;\n        line-height: 10px;\n        position: relative;\n        top: 7px;\n        margin-left: 5px; }\n      .navbar-header .version .dropdown-menu a.active, .navbar-header .version .dropdown-menu a.active:hover {\n        color: #4F8EF7 !important;\n        text-decoration: none;\n        background: transparent;\n        cursor: default; }\n    .navbar-header .version .dropdown-menu::before {\n      background: url(\"/img/ico-nav-arrow.png\") center center no-repeat;\n      background-size: 15px;\n      width: 15px;\n      height: 8px;\n      position: absolute;\n      top: -7px;\n      left: 35px;\n      content: '';\n      z-index: 5; }\n  .navbar-header .version .open .dropdown-menu {\n    opacity: 1;\n    -webkit-transform: scale(1);\n            transform: scale(1); }\n\n.headline {\n  position: absolute;\n  padding: 10px;\n  width: 100%;\n  background-color: #4F8EF7;\n  color: white;\n  text-align: center; }\n  .headline a {\n    color: inherit;\n    text-decoration: underline;\n    opacity: 1; }\n    .headline a:hover {\n      text-decoration: none; }\n\n.header {\n  position: relative;\n  padding: 24px 0 0 0;\n  height: 200px;\n  background-position: 0 -76px; }\n  .header h3 {\n    color: #ebf3ff;\n    font-size: 28px;\n    font-family: \"AvenirNextLTPro-Regular\", \"Helvetica Neue\", Helvetica, Arial, sans-serif; }\n  .header h4 {\n    color: #c2d8ff;\n    font-family: \"AvenirNextLTPro-Regular\", \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n    opacity: .8; }\n  .header ul {\n    position: absolute;\n    top: 133px;\n    margin: 0;\n    padding: 0; }\n  .header li {\n    float: left;\n    margin: 0 5px;\n    list-style: none;\n    font-size: 14px;\n    font-family: \"AvenirNextLTPro-Regular\", \"Helvetica Neue\", Helvetica, Arial, sans-serif; }\n    .header li:first-child a {\n      padding-left: 0; }\n  .header a {\n    display: inline-block;\n    padding: 10px 20px;\n    color: #fff;\n    font-weight: bold; }\n  .header .heading-tile {\n    background-position: 0 -80px; }\n\n.search-col {\n  display: none; }\n\n@media (min-width: 768px) {\n  .search-col {\n    display: block; } }\n\n.search-bar {\n  visibility: hidden;\n  float: right;\n  padding: 0 2px 0 8px;\n  border: none;\n  border-radius: 40px;\n  background: rgba(255, 255, 255, 0.3);\n  transition: background ease-in-out 150ms; }\n  .search-bar.active {\n    background: rgba(255, 255, 255, 0.7); }\n    .search-bar.active .search-icon,\n    .search-bar.active input {\n      color: #296AD4; }\n  .search-bar .search-icon {\n    padding-top: 4px;\n    color: white; }\n    .search-bar .search-icon i {\n      padding-top: 4px; }\n  .search-bar input {\n    padding-left: 4px;\n    width: 200px;\n    border: none;\n    background: transparent;\n    color: white;\n    font-size: 14px;\n    -webkit-appearance: none; }\n    .search-bar input:focus {\n      outline: none; }\n\n.search-results {\n  position: absolute;\n  right: 0;\n  left: 0;\n  z-index: 9999;\n  opacity: 0;\n  padding: 40px 0;\n  min-height: 360px;\n  background: rgba(255, 255, 255, 0.96);\n  box-shadow: 0px 2px 6px 0px rgba(0, 0, 0, 0.2);\n  font-size: 12px;\n  transition: opacity ease-in-out 100ms;\n  -webkit-transform: translate3d(0, 0, 0);\n  transform: translate3d(0, 0, 0); }\n  .search-results h4 {\n    margin-bottom: 8px;\n    padding-bottom: 4px;\n    border-bottom: 2px solid #4F8EF7;\n    color: #4F8EF7;\n    text-transform: uppercase;\n    letter-spacing: 3px;\n    font-size: 12px;\n    font-family: \"AvenirNextLTPro-Medium\", \"Helvetica Neue\", Helvetica, Arial, sans-serif; }\n  .search-results ul {\n    margin: 0 0 0 -10px;\n    padding: 0; }\n  .search-results li {\n    display: inline-block;\n    overflow: hidden;\n    margin: 0;\n    padding: 1px 0 1px 10px;\n    width: 100%;\n    list-style-type: none;\n    text-overflow: ellipsis;\n    white-space: nowrap;\n    line-height: 22px; }\n    .search-results li a {\n      color: #666; }\n      .search-results li a:hover {\n        color: #4F8EF7; }\n\n.search-section {\n  float: left;\n  padding-left: 40px;\n  width: 25%; }\n\n.search-api {\n  padding-left: 0;\n  width: 49%; }\n  .search-api li {\n    width: 32%; }\n\n#search-overlay {\n  position: fixed;\n  top: 0;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  z-index: 999;\n  background: black;\n  opacity: 0;\n  transition: opacity ease-in-out 100ms; }\n\n.search-open .search-results {\n  opacity: 1; }\n\n.search-open #search-overlay {\n  opacity: .1; }\n\n.navbar-header .paper-tag,\n.navbar-header .beta-tag {\n  padding-top: 22px;\n  margin-left: 15px;\n  display: inline-block;\n  float: left; }\n\n.navbar-header .beta-tag {\n  top: -2px;\n  margin-left: 25px;\n  position: relative; }\n  .navbar-header .beta-tag:before {\n    content: '';\n    background: rgba(255, 255, 255, 0.2);\n    position: absolute;\n    height: 30px;\n    width: 2px;\n    left: -15px;\n    -webkit-transform: skewX(-15deg);\n            transform: skewX(-15deg); }\n\n.snap-bar {\n  /*display: none;*/\n  position: relative;\n  top: 0;\n  left: 0;\n  width: 100%;\n  height: 50px;\n  line-height: 50px;\n  z-index: 1000;\n  /*\n  margin-top: -50px;\n\n  -webkit-transform: translate(0, -50px);\n  transform: translate(0, -50px);\n  */\n  /*\n  background-color: #EDF0F7;\n  */\n  background-color: #272E3A;\n  color: #B1BAC7;\n  font-weight: 300;\n  text-align: center;\n  font-size: 16px;\n  box-shadow: 0px 1px 2px rgba(0, 0, 0, 0.5); }\n\n.snap-bar .small {\n  display: none; }\n\n.span-bar span {\n  display: inline-block;\n  vertical-align: middle; }\n\n.snap-bar.active {\n  -webkit-transform: translate(0, 0);\n  transform: translate(0, 0);\n  margin-top: 0; }\n\n@media (max-width: 767px) {\n  .snap-bar .small {\n    display: inline-block; }\n  .snap-bar .large {\n    display: none; } }\n\n@media (max-width: 991px) and (min-width: 768px) {\n  .hide-sm {\n    display: none !important; } }\n\n.news {\n  position: absolute;\n  bottom: 0;\n  padding-top: 14px;\n  width: 100%;\n  height: 50px;\n  background: rgba(255, 255, 255, 0.2);\n  letter-spacing: -0.03em;\n  font-weight: bold;\n  font-family: \"AvenirNextLTPro-Ultlt\", \"Helvetica Neue\", Helvetica, Arial, sans-serif; }\n  .news .container {\n    overflow: hidden;\n    color: #B6D1FF;\n    text-overflow: ellipsis;\n    white-space: nowrap; }\n  .news a {\n    padding: 0;\n    color: #fff;\n    text-decoration: none;\n    font-weight: bold;\n    opacity: .85; }\n    .news a:hover {\n      text-decoration: underline;\n      opacity: 1; }\n    .news a a:visited {\n      color: #fff; }\n  .news .news-col {\n    overflow: hidden;\n    height: 26px;\n    text-overflow: ellipsis;\n    white-space: nowrap; }\n\n@supports (overflow: -webkit-marquee) and (justify-content: inherit) {\n  .news a {\n    font-family: \"Avenir Next\", \"Helvetica Neue\", Helvetica, Arial, sans-serif; } }\n\n@-webkit-keyframes spin {\n  100% {\n    -webkit-transform: rotate(360deg); } }\n\n@keyframes spin {\n  100% {\n    -webkit-transform: rotate(360deg);\n    transform: rotate(360deg); } }\n\n.ionic {\n  /*!\n * Copyright 2014 Drifty Co.\n * http://drifty.com/\n *\n * Ionic, v1.1.1\n * A powerful HTML5 mobile app framework.\n * https://ionicframework.com/\n *\n * By @maxlynch, @benjsperry, @adamdbradley <3\n *\n * Licensed under the MIT license. Please see LICENSE for more information.\n *\n */\n  /*!\n  Ionicons, v2.0.1\n  Created by Ben Sperry for the Ionic Framework, https://ionicons.com/\n  https://twitter.com/benjsperry  https://twitter.com/ionicframework\n  MIT License: https://github.com/ionic-team/ionicons\n\n  Android-style icons originally built by Google’s\n  Material Design Icons: https://github.com/google/material-design-icons\n  used under CC BY http://creativecommons.org/licenses/by/4.0/\n  Modified icons to fit ionicon’s grid from original.\n*/\n  /**\n * Resets\n * --------------------------------------------------\n * Adapted from normalize.css and some reset.css. We don't care even one\n * bit about old IE, so we don't need any hacks for that in here.\n *\n * There are probably other things we could remove here, as well.\n *\n * normalize.css v2.1.2 | MIT License | git.io/normalize\n\n * Eric Meyer's Reset CSS v2.0 (http://meyerweb.com/eric/tools/css/reset/)\n * http://cssreset.com\n */\n  /**\n * Prevent modern browsers from displaying `audio` without controls.\n * Remove excess height in iOS 5 devices.\n */\n  /**\n * Hide the `template` element in IE, Safari, and Firefox < 22.\n */\n  /* ==========================================================================\n   Base\n   ========================================================================== */\n  /**\n * 1. Set default font family to sans-serif.\n * 2. Prevent iOS text size adjust after orientation change, without disabling\n *  user zoom.\n */\n  /**\n * Remove default margin.\n */\n  /**\n * Remove default outlines.\n */\n  /* *\n * Remove tap highlight color\n */\n  /* ==========================================================================\n   Typography\n   ========================================================================== */\n  /**\n * Address style set to `bolder` in Firefox 4+, Safari 5, and Chrome.\n */\n  /**\n * Address styling not present in Safari 5 and Chrome.\n */\n  /**\n * Address differences between Firefox and other browsers.\n */\n  /**\n * Correct font family set oddly in Safari 5 and Chrome.\n */\n  /**\n * Improve readability of pre-formatted text in all browsers.\n */\n  /**\n * Set consistent quote types.\n */\n  /**\n * Address inconsistent and variable font size in all browsers.\n */\n  /**\n * Prevent `sub` and `sup` affecting `line-height` in all browsers.\n */\n  /**\n * Define consistent border, margin, and padding.\n */\n  /**\n * 1. Correct `color` not being inherited in IE 8/9.\n * 2. Remove padding so people aren't caught out if they zero out fieldsets.\n */\n  /**\n * 1. Correct font family not being inherited in all browsers.\n * 2. Correct font size not being inherited in all browsers.\n * 3. Address margins set differently in Firefox 4+, Safari 5, and Chrome.\n * 4. Remove any default :focus styles\n * 5. Make sure webkit font smoothing is being inherited\n * 6. Remove default gradient in Android Firefox / FirefoxOS\n */\n  /**\n * Address Firefox 4+ setting `line-height` on `input` using `importnt` in\n * the UA stylesheet.\n */\n  /**\n * Address inconsistent `text-transform` inheritance for `button` and `select`.\n * All other form control elements do not inherit `text-transform` values.\n * Correct `button` style inheritance in Chrome, Safari 5+, and IE 8+.\n * Correct `select` style inheritance in Firefox 4+ and Opera.\n */\n  /**\n * 1. Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio`\n *  and `video` controls.\n * 2. Correct inability to style clickable `input` types in iOS.\n * 3. Improve usability and consistency of cursor style between image-type\n *  `input` and others.\n */\n  /**\n * Re-set default cursor for disabled elements.\n */\n  /**\n * 1. Address `appearance` set to `searchfield` in Safari 5 and Chrome.\n * 2. Address `box-sizing` set to `border-box` in Safari 5 and Chrome\n *  (include `-moz` to future-proof).\n */\n  /**\n * Remove inner padding and search cancel button in Safari 5 and Chrome\n * on OS X.\n */\n  /**\n * Remove inner padding and border in Firefox 4+.\n */\n  /**\n * 1. Remove default vertical scrollbar in IE 8/9.\n * 2. Improve readability and alignment in all browsers.\n */\n  /* ==========================================================================\n   Tables\n   ========================================================================== */\n  /**\n * Remove most spacing between table cells.\n */\n  /**\n * Scaffolding\n * --------------------------------------------------\n */\n  /**\n * Scroll is the scroll view component available for complex and custom\n * scroll view functionality.\n */\n  /**\n * Set ms-viewport to prevent MS \"page squish\" and allow fluid scrolling\n * https://msdn.microsoft.com/en-us/library/ie/hh869615(v=vs.85).aspx\n\n@-ms-viewport {\n  width: device-width; }\n */\n  /* If you change these, change platform.scss as well */\n  /**\n * Typography\n * --------------------------------------------------\n */\n  /**\n * Action Sheets\n * --------------------------------------------------\n */\n  /**\n * Bar (Headers and Footers)\n * --------------------------------------------------\n */\n  /**\n * Tabs\n * --------------------------------------------------\n * A navigation bar with any number of tab items supported.\n */\n  /* Allow parent element of tabs to define color, or just the tab itself */\n  /* Allow parent element to have tabs-top */\n  /* If you change this, change platform.scss as well */\n  /* Navigational tab */\n  /* Active state for tab */\n  /**\n * Menus\n * --------------------------------------------------\n * Side panel structure\n */\n  /**\n * Modals\n * --------------------------------------------------\n * Modals are independent windows that slide in from off-screen.\n */\n  /**\n * Popovers\n * --------------------------------------------------\n * Popovers are independent views which float over content\n */\n  /**\n * Popups\n * --------------------------------------------------\n */\n  /**\n * Loading\n * --------------------------------------------------\n */\n  /**\n * Items\n * --------------------------------------------------\n */\n  /**\n * Complex Items\n * --------------------------------------------------\n * Adding .item-complex allows the .item to be slidable and\n * have options underneath the button, but also requires an\n * additional .item-content element inside .item.\n * Basically .item-complex removes any default settings which\n * .item added, so that .item-content looks them as just .item.\n */\n  /**\n * Item Icons\n * --------------------------------------------------\n */\n  /**\n * Item Button\n * --------------------------------------------------\n * An item button is a child button inside an .item (not the entire .item)\n */\n  /**\n * The hidden right-side buttons that can be exposed under a list item\n * with dragging.\n */\n  /**\n * Lists\n * --------------------------------------------------\n */\n  /**\n * List Header\n * --------------------------------------------------\n */\n  /**\n * Cards and Inset Lists\n * --------------------------------------------------\n * A card and list-inset are close to the same thing, except a card as a box shadow.\n */\n  /**\n * Badges\n * --------------------------------------------------\n */\n  /**\n * Slide Box\n * --------------------------------------------------\n */\n  /**\n * Spinners\n * --------------------------------------------------\n */\n  /**\n * Forms\n * --------------------------------------------------\n */\n  /**\n * Checkbox\n * --------------------------------------------------\n */\n  /**\n * Toggle\n * --------------------------------------------------\n */\n  /* the track appearance when the toggle is \"off\" */\n  /* Fix to avoid background color bleeding */\n  /* (occured on (at least) Android 4.2, Asus MeMO Pad HD7 ME173X) */\n  /* the handle (circle) thats inside the toggle's track area */\n  /* also the handle's appearance when it is \"off\" */\n  /**\n * Radio Button Inputs\n * --------------------------------------------------\n */\n  /**\n * Range\n * --------------------------------------------------\n */\n  /**\n * Select\n * --------------------------------------------------\n */\n  /**\n * Progress\n * --------------------------------------------------\n */\n  /**\n * Buttons\n * --------------------------------------------------\n */\n  /**\n * Button Bar\n * --------------------------------------------------\n */\n  /**\n * Grid\n * --------------------------------------------------\n * Using flexbox for the grid, inspired by Philip Walton:\n * http://philipwalton.github.io/solved-by-flexbox/demos/grids/\n * By default each .col within a .row will evenly take up\n * available width, and the height of each .col with take\n * up the height of the tallest .col in the same .row.\n */\n  /* Vertically Align Columns */\n  /* .row-* vertically aligns every .col in the .row */\n  /* .col-* vertically aligns an individual .col */\n  /* Column Offsets */\n  /* Explicit Column Percent Sizes */\n  /* By default each grid column will evenly distribute */\n  /* across the grid. However, you can specify individual */\n  /* columns to take up a certain size of the available area */\n  /* Responsive Grid Classes */\n  /* Adding a class of responsive-X to a row */\n  /* will trigger the flex-direction to */\n  /* change to column and add some margin */\n  /* to any columns in the row for clearity */\n  /**\n * Utility Classes\n * --------------------------------------------------\n */\n  /**\n * Content Padding\n * --------------------------------------------------\n */\n  /**\n * Scrollable iFrames\n * --------------------------------------------------\n */\n  /**\n * Rounded\n * --------------------------------------------------\n */\n  /**\n * Utility Colors\n * --------------------------------------------------\n * Utility colors are added to help set a naming convention. You'll\n * notice we purposely do not use words like \"red\" or \"blue\", but\n * instead have colors which represent an emotion or generic theme.\n */\n  /**\n * Platform\n * --------------------------------------------------\n * Platform specific tweaks\n */ }\n  .ionic .ion, .ionic .ionicons,\n  .ionic .ion-alert:before,\n  .ionic .ion-alert-circled:before,\n  .ionic .ion-android-add:before,\n  .ionic .ion-android-add-circle:before,\n  .ionic .ion-android-alarm-clock:before,\n  .ionic .ion-android-alert:before,\n  .ionic .ion-android-apps:before,\n  .ionic .ion-android-archive:before,\n  .ionic .ion-android-arrow-back:before,\n  .ionic .ion-android-arrow-down:before,\n  .ionic .ion-android-arrow-dropdown:before,\n  .ionic .ion-android-arrow-dropdown-circle:before,\n  .ionic .ion-android-arrow-dropleft:before,\n  .ionic .ion-android-arrow-dropleft-circle:before,\n  .ionic .ion-android-arrow-dropright:before,\n  .ionic .ion-android-arrow-dropright-circle:before,\n  .ionic .ion-android-arrow-dropup:before,\n  .ionic .ion-android-arrow-dropup-circle:before,\n  .ionic .ion-android-arrow-forward:before,\n  .ionic .ion-android-arrow-up:before,\n  .ionic .ion-android-attach:before,\n  .ionic .ion-android-bar:before,\n  .ionic .ion-android-bicycle:before,\n  .ionic .ion-android-boat:before,\n  .ionic .ion-android-bookmark:before,\n  .ionic .ion-android-bulb:before,\n  .ionic .ion-android-bus:before,\n  .ionic .ion-android-calendar:before,\n  .ionic .ion-android-call:before,\n  .ionic .ion-android-camera:before,\n  .ionic .ion-android-cancel:before,\n  .ionic .ion-android-car:before,\n  .ionic .ion-android-cart:before,\n  .ionic .ion-android-chat:before,\n  .ionic .ion-android-checkbox:before,\n  .ionic .ion-android-checkbox-blank:before,\n  .ionic .ion-android-checkbox-outline:before,\n  .ionic .ion-android-checkbox-outline-blank:before,\n  .ionic .ion-android-checkmark-circle:before,\n  .ionic .ion-android-clipboard:before,\n  .ionic .ion-android-close:before,\n  .ionic .ion-android-cloud:before,\n  .ionic .ion-android-cloud-circle:before,\n  .ionic .ion-android-cloud-done:before,\n  .ionic .ion-android-cloud-outline:before,\n  .ionic .ion-android-color-palette:before,\n  .ionic .ion-android-compass:before,\n  .ionic .ion-android-contact:before,\n  .ionic .ion-android-contacts:before,\n  .ionic .ion-android-contract:before,\n  .ionic .ion-android-create:before,\n  .ionic .ion-android-delete:before,\n  .ionic .ion-android-desktop:before,\n  .ionic .ion-android-document:before,\n  .ionic .ion-android-done:before,\n  .ionic .ion-android-done-all:before,\n  .ionic .ion-android-download:before,\n  .ionic .ion-android-drafts:before,\n  .ionic .ion-android-exit:before,\n  .ionic .ion-android-expand:before,\n  .ionic .ion-android-favorite:before,\n  .ionic .ion-android-favorite-outline:before,\n  .ionic .ion-android-film:before,\n  .ionic .ion-android-folder:before,\n  .ionic .ion-android-folder-open:before,\n  .ionic .ion-android-funnel:before,\n  .ionic .ion-android-globe:before,\n  .ionic .ion-android-hand:before,\n  .ionic .ion-android-hangout:before,\n  .ionic .ion-android-happy:before,\n  .ionic .ion-android-home:before,\n  .ionic .ion-android-image:before,\n  .ionic .ion-android-laptop:before,\n  .ionic .ion-android-list:before,\n  .ionic .ion-android-locate:before,\n  .ionic .ion-android-lock:before,\n  .ionic .ion-android-mail:before,\n  .ionic .ion-android-map:before,\n  .ionic .ion-android-menu:before,\n  .ionic .ion-android-microphone:before,\n  .ionic .ion-android-microphone-off:before,\n  .ionic .ion-android-more-horizontal:before,\n  .ionic .ion-android-more-vertical:before,\n  .ionic .ion-android-navigate:before,\n  .ionic .ion-android-notifications:before,\n  .ionic .ion-android-notifications-none:before,\n  .ionic .ion-android-notifications-off:before,\n  .ionic .ion-android-open:before,\n  .ionic .ion-android-options:before,\n  .ionic .ion-android-people:before,\n  .ionic .ion-android-person:before,\n  .ionic .ion-android-person-add:before,\n  .ionic .ion-android-phone-landscape:before,\n  .ionic .ion-android-phone-portrait:before,\n  .ionic .ion-android-pin:before,\n  .ionic .ion-android-plane:before,\n  .ionic .ion-android-playstore:before,\n  .ionic .ion-android-print:before,\n  .ionic .ion-android-radio-button-off:before,\n  .ionic .ion-android-radio-button-on:before,\n  .ionic .ion-android-refresh:before,\n  .ionic .ion-android-remove:before,\n  .ionic .ion-android-remove-circle:before,\n  .ionic .ion-android-restaurant:before,\n  .ionic .ion-android-sad:before,\n  .ionic .ion-android-search:before,\n  .ionic .ion-android-send:before,\n  .ionic .ion-android-settings:before,\n  .ionic .ion-android-share:before,\n  .ionic .ion-android-share-alt:before,\n  .ionic .ion-android-star:before,\n  .ionic .ion-android-star-half:before,\n  .ionic .ion-android-star-outline:before,\n  .ionic .ion-android-stopwatch:before,\n  .ionic .ion-android-subway:before,\n  .ionic .ion-android-sunny:before,\n  .ionic .ion-android-sync:before,\n  .ionic .ion-android-textsms:before,\n  .ionic .ion-android-time:before,\n  .ionic .ion-android-train:before,\n  .ionic .ion-android-unlock:before,\n  .ionic .ion-android-upload:before,\n  .ionic .ion-android-volume-down:before,\n  .ionic .ion-android-volume-mute:before,\n  .ionic .ion-android-volume-off:before,\n  .ionic .ion-android-volume-up:before,\n  .ionic .ion-android-walk:before,\n  .ionic .ion-android-warning:before,\n  .ionic .ion-android-watch:before,\n  .ionic .ion-android-wifi:before,\n  .ionic .ion-aperture:before,\n  .ionic .ion-archive:before,\n  .ionic .ion-arrow-down-a:before,\n  .ionic .ion-arrow-down-b:before,\n  .ionic .ion-arrow-down-c:before,\n  .ionic .ion-arrow-expand:before,\n  .ionic .ion-arrow-graph-down-left:before,\n  .ionic .ion-arrow-graph-down-right:before,\n  .ionic .ion-arrow-graph-up-left:before,\n  .ionic .ion-arrow-graph-up-right:before,\n  .ionic .ion-arrow-left-a:before,\n  .ionic .ion-arrow-left-b:before,\n  .ionic .ion-arrow-left-c:before,\n  .ionic .ion-arrow-move:before,\n  .ionic .ion-arrow-resize:before,\n  .ionic .ion-arrow-return-left:before,\n  .ionic .ion-arrow-return-right:before,\n  .ionic .ion-arrow-right-a:before,\n  .ionic .ion-arrow-right-b:before,\n  .ionic .ion-arrow-right-c:before,\n  .ionic .ion-arrow-shrink:before,\n  .ionic .ion-arrow-swap:before,\n  .ionic .ion-arrow-up-a:before,\n  .ionic .ion-arrow-up-b:before,\n  .ionic .ion-arrow-up-c:before,\n  .ionic .ion-asterisk:before,\n  .ionic .ion-at:before,\n  .ionic .ion-backspace:before,\n  .ionic .ion-backspace-outline:before,\n  .ionic .ion-bag:before,\n  .ionic .ion-battery-charging:before,\n  .ionic .ion-battery-empty:before,\n  .ionic .ion-battery-full:before,\n  .ionic .ion-battery-half:before,\n  .ionic .ion-battery-low:before,\n  .ionic .ion-beaker:before,\n  .ionic .ion-beer:before,\n  .ionic .ion-bluetooth:before,\n  .ionic .ion-bonfire:before,\n  .ionic .ion-bookmark:before,\n  .ionic .ion-bowtie:before,\n  .ionic .ion-briefcase:before,\n  .ionic .ion-bug:before,\n  .ionic .ion-calculator:before,\n  .ionic .ion-calendar:before,\n  .ionic .ion-camera:before,\n  .ionic .ion-card:before,\n  .ionic .ion-cash:before,\n  .ionic .ion-chatbox:before,\n  .ionic .ion-chatbox-working:before,\n  .ionic .ion-chatboxes:before,\n  .ionic .ion-chatbubble:before,\n  .ionic .ion-chatbubble-working:before,\n  .ionic .ion-chatbubbles:before,\n  .ionic .ion-checkmark:before,\n  .ionic .ion-checkmark-circled:before,\n  .ionic .ion-checkmark-round:before,\n  .ionic .ion-chevron-down:before,\n  .ionic .ion-chevron-left:before,\n  .ionic .ion-chevron-right:before,\n  .ionic .ion-chevron-up:before,\n  .ionic .ion-clipboard:before,\n  .ionic .ion-clock:before,\n  .ionic .ion-close:before,\n  .ionic .ion-close-circled:before,\n  .ionic .ion-close-round:before,\n  .ionic .ion-closed-captioning:before,\n  .ionic .ion-cloud:before,\n  .ionic .ion-code:before,\n  .ionic .ion-code-download:before,\n  .ionic .ion-code-working:before,\n  .ionic .ion-coffee:before,\n  .ionic .ion-compass:before,\n  .ionic .ion-compose:before,\n  .ionic .ion-connection-bars:before,\n  .ionic .ion-contrast:before,\n  .ionic .ion-crop:before,\n  .ionic .ion-cube:before,\n  .ionic .ion-disc:before,\n  .ionic .ion-document:before,\n  .ionic .ion-document-text:before,\n  .ionic .ion-drag:before,\n  .ionic .ion-earth:before,\n  .ionic .ion-easel:before,\n  .ionic .ion-edit:before,\n  .ionic .ion-egg:before,\n  .ionic .ion-eject:before,\n  .ionic .ion-email:before,\n  .ionic .ion-email-unread:before,\n  .ionic .ion-erlenmeyer-flask:before,\n  .ionic .ion-erlenmeyer-flask-bubbles:before,\n  .ionic .ion-eye:before,\n  .ionic .ion-eye-disabled:before,\n  .ionic .ion-female:before,\n  .ionic .ion-filing:before,\n  .ionic .ion-film-marker:before,\n  .ionic .ion-fireball:before,\n  .ionic .ion-flag:before,\n  .ionic .ion-flame:before,\n  .ionic .ion-flash:before,\n  .ionic .ion-flash-off:before,\n  .ionic .ion-folder:before,\n  .ionic .ion-fork:before,\n  .ionic .ion-fork-repo:before,\n  .ionic .ion-forward:before,\n  .ionic .ion-funnel:before,\n  .ionic .ion-gear-a:before,\n  .ionic .ion-gear-b:before,\n  .ionic .ion-grid:before,\n  .ionic .ion-hammer:before,\n  .ionic .ion-happy:before,\n  .ionic .ion-happy-outline:before,\n  .ionic .ion-headphone:before,\n  .ionic .ion-heart:before,\n  .ionic .ion-heart-broken:before,\n  .ionic .ion-help:before,\n  .ionic .ion-help-buoy:before,\n  .ionic .ion-help-circled:before,\n  .ionic .ion-home:before,\n  .ionic .ion-icecream:before,\n  .ionic .ion-image:before,\n  .ionic .ion-images:before,\n  .ionic .ion-information:before,\n  .ionic .ion-information-circled:before,\n  .ionic .ion-ionic:before,\n  .ionic .ion-ios-alarm:before,\n  .ionic .ion-ios-alarm-outline:before,\n  .ionic .ion-ios-albums:before,\n  .ionic .ion-ios-albums-outline:before,\n  .ionic .ion-ios-americanfootball:before,\n  .ionic .ion-ios-americanfootball-outline:before,\n  .ionic .ion-ios-analytics:before,\n  .ionic .ion-ios-analytics-outline:before,\n  .ionic .ion-ios-arrow-back:before,\n  .ionic .ion-ios-arrow-down:before,\n  .ionic .ion-ios-arrow-forward:before,\n  .ionic .ion-ios-arrow-left:before,\n  .ionic .ion-ios-arrow-right:before,\n  .ionic .ion-ios-arrow-thin-down:before,\n  .ionic .ion-ios-arrow-thin-left:before,\n  .ionic .ion-ios-arrow-thin-right:before,\n  .ionic .ion-ios-arrow-thin-up:before,\n  .ionic .ion-ios-arrow-up:before,\n  .ionic .ion-ios-at:before,\n  .ionic .ion-ios-at-outline:before,\n  .ionic .ion-ios-barcode:before,\n  .ionic .ion-ios-barcode-outline:before,\n  .ionic .ion-ios-baseball:before,\n  .ionic .ion-ios-baseball-outline:before,\n  .ionic .ion-ios-basketball:before,\n  .ionic .ion-ios-basketball-outline:before,\n  .ionic .ion-ios-bell:before,\n  .ionic .ion-ios-bell-outline:before,\n  .ionic .ion-ios-body:before,\n  .ionic .ion-ios-body-outline:before,\n  .ionic .ion-ios-bolt:before,\n  .ionic .ion-ios-bolt-outline:before,\n  .ionic .ion-ios-book:before,\n  .ionic .ion-ios-book-outline:before,\n  .ionic .ion-ios-bookmarks:before,\n  .ionic .ion-ios-bookmarks-outline:before,\n  .ionic .ion-ios-box:before,\n  .ionic .ion-ios-box-outline:before,\n  .ionic .ion-ios-briefcase:before,\n  .ionic .ion-ios-briefcase-outline:before,\n  .ionic .ion-ios-browsers:before,\n  .ionic .ion-ios-browsers-outline:before,\n  .ionic .ion-ios-calculator:before,\n  .ionic .ion-ios-calculator-outline:before,\n  .ionic .ion-ios-calendar:before,\n  .ionic .ion-ios-calendar-outline:before,\n  .ionic .ion-ios-camera:before,\n  .ionic .ion-ios-camera-outline:before,\n  .ionic .ion-ios-cart:before,\n  .ionic .ion-ios-cart-outline:before,\n  .ionic .ion-ios-chatboxes:before,\n  .ionic .ion-ios-chatboxes-outline:before,\n  .ionic .ion-ios-chatbubble:before,\n  .ionic .ion-ios-chatbubble-outline:before,\n  .ionic .ion-ios-checkmark:before,\n  .ionic .ion-ios-checkmark-empty:before,\n  .ionic .ion-ios-checkmark-outline:before,\n  .ionic .ion-ios-circle-filled:before,\n  .ionic .ion-ios-circle-outline:before,\n  .ionic .ion-ios-clock:before,\n  .ionic .ion-ios-clock-outline:before,\n  .ionic .ion-ios-close:before,\n  .ionic .ion-ios-close-empty:before,\n  .ionic .ion-ios-close-outline:before,\n  .ionic .ion-ios-cloud:before,\n  .ionic .ion-ios-cloud-download:before,\n  .ionic .ion-ios-cloud-download-outline:before,\n  .ionic .ion-ios-cloud-outline:before,\n  .ionic .ion-ios-cloud-upload:before,\n  .ionic .ion-ios-cloud-upload-outline:before,\n  .ionic .ion-ios-cloudy:before,\n  .ionic .ion-ios-cloudy-night:before,\n  .ionic .ion-ios-cloudy-night-outline:before,\n  .ionic .ion-ios-cloudy-outline:before,\n  .ionic .ion-ios-cog:before,\n  .ionic .ion-ios-cog-outline:before,\n  .ionic .ion-ios-color-filter:before,\n  .ionic .ion-ios-color-filter-outline:before,\n  .ionic .ion-ios-color-wand:before,\n  .ionic .ion-ios-color-wand-outline:before,\n  .ionic .ion-ios-compose:before,\n  .ionic .ion-ios-compose-outline:before,\n  .ionic .ion-ios-contact:before,\n  .ionic .ion-ios-contact-outline:before,\n  .ionic .ion-ios-copy:before,\n  .ionic .ion-ios-copy-outline:before,\n  .ionic .ion-ios-crop:before,\n  .ionic .ion-ios-crop-strong:before,\n  .ionic .ion-ios-download:before,\n  .ionic .ion-ios-download-outline:before,\n  .ionic .ion-ios-drag:before,\n  .ionic .ion-ios-email:before,\n  .ionic .ion-ios-email-outline:before,\n  .ionic .ion-ios-eye:before,\n  .ionic .ion-ios-eye-outline:before,\n  .ionic .ion-ios-fastforward:before,\n  .ionic .ion-ios-fastforward-outline:before,\n  .ionic .ion-ios-filing:before,\n  .ionic .ion-ios-filing-outline:before,\n  .ionic .ion-ios-film:before,\n  .ionic .ion-ios-film-outline:before,\n  .ionic .ion-ios-flag:before,\n  .ionic .ion-ios-flag-outline:before,\n  .ionic .ion-ios-flame:before,\n  .ionic .ion-ios-flame-outline:before,\n  .ionic .ion-ios-flask:before,\n  .ionic .ion-ios-flask-outline:before,\n  .ionic .ion-ios-flower:before,\n  .ionic .ion-ios-flower-outline:before,\n  .ionic .ion-ios-folder:before,\n  .ionic .ion-ios-folder-outline:before,\n  .ionic .ion-ios-football:before,\n  .ionic .ion-ios-football-outline:before,\n  .ionic .ion-ios-game-controller-a:before,\n  .ionic .ion-ios-game-controller-a-outline:before,\n  .ionic .ion-ios-game-controller-b:before,\n  .ionic .ion-ios-game-controller-b-outline:before,\n  .ionic .ion-ios-gear:before,\n  .ionic .ion-ios-gear-outline:before,\n  .ionic .ion-ios-glasses:before,\n  .ionic .ion-ios-glasses-outline:before,\n  .ionic .ion-ios-grid-view:before,\n  .ionic .ion-ios-grid-view-outline:before,\n  .ionic .ion-ios-heart:before,\n  .ionic .ion-ios-heart-outline:before,\n  .ionic .ion-ios-help:before,\n  .ionic .ion-ios-help-empty:before,\n  .ionic .ion-ios-help-outline:before,\n  .ionic .ion-ios-home:before,\n  .ionic .ion-ios-home-outline:before,\n  .ionic .ion-ios-infinite:before,\n  .ionic .ion-ios-infinite-outline:before,\n  .ionic .ion-ios-information:before,\n  .ionic .ion-ios-information-empty:before,\n  .ionic .ion-ios-information-outline:before,\n  .ionic .ion-ios-ionic-outline:before,\n  .ionic .ion-ios-keypad:before,\n  .ionic .ion-ios-keypad-outline:before,\n  .ionic .ion-ios-lightbulb:before,\n  .ionic .ion-ios-lightbulb-outline:before,\n  .ionic .ion-ios-list:before,\n  .ionic .ion-ios-list-outline:before,\n  .ionic .ion-ios-location:before,\n  .ionic .ion-ios-location-outline:before,\n  .ionic .ion-ios-locked:before,\n  .ionic .ion-ios-locked-outline:before,\n  .ionic .ion-ios-loop:before,\n  .ionic .ion-ios-loop-strong:before,\n  .ionic .ion-ios-medical:before,\n  .ionic .ion-ios-medical-outline:before,\n  .ionic .ion-ios-medkit:before,\n  .ionic .ion-ios-medkit-outline:before,\n  .ionic .ion-ios-mic:before,\n  .ionic .ion-ios-mic-off:before,\n  .ionic .ion-ios-mic-outline:before,\n  .ionic .ion-ios-minus:before,\n  .ionic .ion-ios-minus-empty:before,\n  .ionic .ion-ios-minus-outline:before,\n  .ionic .ion-ios-monitor:before,\n  .ionic .ion-ios-monitor-outline:before,\n  .ionic .ion-ios-moon:before,\n  .ionic .ion-ios-moon-outline:before,\n  .ionic .ion-ios-more:before,\n  .ionic .ion-ios-more-outline:before,\n  .ionic .ion-ios-musical-note:before,\n  .ionic .ion-ios-musical-notes:before,\n  .ionic .ion-ios-navigate:before,\n  .ionic .ion-ios-navigate-outline:before,\n  .ionic .ion-ios-nutrition:before,\n  .ionic .ion-ios-nutrition-outline:before,\n  .ionic .ion-ios-paper:before,\n  .ionic .ion-ios-paper-outline:before,\n  .ionic .ion-ios-paperplane:before,\n  .ionic .ion-ios-paperplane-outline:before,\n  .ionic .ion-ios-partlysunny:before,\n  .ionic .ion-ios-partlysunny-outline:before,\n  .ionic .ion-ios-pause:before,\n  .ionic .ion-ios-pause-outline:before,\n  .ionic .ion-ios-paw:before,\n  .ionic .ion-ios-paw-outline:before,\n  .ionic .ion-ios-people:before,\n  .ionic .ion-ios-people-outline:before,\n  .ionic .ion-ios-person:before,\n  .ionic .ion-ios-person-outline:before,\n  .ionic .ion-ios-personadd:before,\n  .ionic .ion-ios-personadd-outline:before,\n  .ionic .ion-ios-photos:before,\n  .ionic .ion-ios-photos-outline:before,\n  .ionic .ion-ios-pie:before,\n  .ionic .ion-ios-pie-outline:before,\n  .ionic .ion-ios-pint:before,\n  .ionic .ion-ios-pint-outline:before,\n  .ionic .ion-ios-play:before,\n  .ionic .ion-ios-play-outline:before,\n  .ionic .ion-ios-plus:before,\n  .ionic .ion-ios-plus-empty:before,\n  .ionic .ion-ios-plus-outline:before,\n  .ionic .ion-ios-pricetag:before,\n  .ionic .ion-ios-pricetag-outline:before,\n  .ionic .ion-ios-pricetags:before,\n  .ionic .ion-ios-pricetags-outline:before,\n  .ionic .ion-ios-printer:before,\n  .ionic .ion-ios-printer-outline:before,\n  .ionic .ion-ios-pulse:before,\n  .ionic .ion-ios-pulse-strong:before,\n  .ionic .ion-ios-rainy:before,\n  .ionic .ion-ios-rainy-outline:before,\n  .ionic .ion-ios-recording:before,\n  .ionic .ion-ios-recording-outline:before,\n  .ionic .ion-ios-redo:before,\n  .ionic .ion-ios-redo-outline:before,\n  .ionic .ion-ios-refresh:before,\n  .ionic .ion-ios-refresh-empty:before,\n  .ionic .ion-ios-refresh-outline:before,\n  .ionic .ion-ios-reload:before,\n  .ionic .ion-ios-reverse-camera:before,\n  .ionic .ion-ios-reverse-camera-outline:before,\n  .ionic .ion-ios-rewind:before,\n  .ionic .ion-ios-rewind-outline:before,\n  .ionic .ion-ios-rose:before,\n  .ionic .ion-ios-rose-outline:before,\n  .ionic .ion-ios-search:before,\n  .ionic .ion-ios-search-strong:before,\n  .ionic .ion-ios-settings:before,\n  .ionic .ion-ios-settings-strong:before,\n  .ionic .ion-ios-shuffle:before,\n  .ionic .ion-ios-shuffle-strong:before,\n  .ionic .ion-ios-skipbackward:before,\n  .ionic .ion-ios-skipbackward-outline:before,\n  .ionic .ion-ios-skipforward:before,\n  .ionic .ion-ios-skipforward-outline:before,\n  .ionic .ion-ios-snowy:before,\n  .ionic .ion-ios-speedometer:before,\n  .ionic .ion-ios-speedometer-outline:before,\n  .ionic .ion-ios-star:before,\n  .ionic .ion-ios-star-half:before,\n  .ionic .ion-ios-star-outline:before,\n  .ionic .ion-ios-stopwatch:before,\n  .ionic .ion-ios-stopwatch-outline:before,\n  .ionic .ion-ios-sunny:before,\n  .ionic .ion-ios-sunny-outline:before,\n  .ionic .ion-ios-telephone:before,\n  .ionic .ion-ios-telephone-outline:before,\n  .ionic .ion-ios-tennisball:before,\n  .ionic .ion-ios-tennisball-outline:before,\n  .ionic .ion-ios-thunderstorm:before,\n  .ionic .ion-ios-thunderstorm-outline:before,\n  .ionic .ion-ios-time:before,\n  .ionic .ion-ios-time-outline:before,\n  .ionic .ion-ios-timer:before,\n  .ionic .ion-ios-timer-outline:before,\n  .ionic .ion-ios-toggle:before,\n  .ionic .ion-ios-toggle-outline:before,\n  .ionic .ion-ios-trash:before,\n  .ionic .ion-ios-trash-outline:before,\n  .ionic .ion-ios-undo:before,\n  .ionic .ion-ios-undo-outline:before,\n  .ionic .ion-ios-unlocked:before,\n  .ionic .ion-ios-unlocked-outline:before,\n  .ionic .ion-ios-upload:before,\n  .ionic .ion-ios-upload-outline:before,\n  .ionic .ion-ios-videocam:before,\n  .ionic .ion-ios-videocam-outline:before,\n  .ionic .ion-ios-volume-high:before,\n  .ionic .ion-ios-volume-low:before,\n  .ionic .ion-ios-wineglass:before,\n  .ionic .ion-ios-wineglass-outline:before,\n  .ionic .ion-ios-world:before,\n  .ionic .ion-ios-world-outline:before,\n  .ionic .ion-ipad:before,\n  .ionic .ion-iphone:before,\n  .ionic .ion-ipod:before,\n  .ionic .ion-jet:before,\n  .ionic .ion-key:before,\n  .ionic .ion-knife:before,\n  .ionic .ion-laptop:before,\n  .ionic .ion-leaf:before,\n  .ionic .ion-levels:before,\n  .ionic .ion-lightbulb:before,\n  .ionic .ion-link:before,\n  .ionic .ion-load-a:before,\n  .ionic .ion-load-b:before,\n  .ionic .ion-load-c:before,\n  .ionic .ion-load-d:before,\n  .ionic .ion-location:before,\n  .ionic .ion-lock-combination:before,\n  .ionic .ion-locked:before,\n  .ionic .ion-log-in:before,\n  .ionic .ion-log-out:before,\n  .ionic .ion-loop:before,\n  .ionic .ion-magnet:before,\n  .ionic .ion-male:before,\n  .ionic .ion-man:before,\n  .ionic .ion-map:before,\n  .ionic .ion-medkit:before,\n  .ionic .ion-merge:before,\n  .ionic .ion-mic-a:before,\n  .ionic .ion-mic-b:before,\n  .ionic .ion-mic-c:before,\n  .ionic .ion-minus:before,\n  .ionic .ion-minus-circled:before,\n  .ionic .ion-minus-round:before,\n  .ionic .ion-model-s:before,\n  .ionic .ion-monitor:before,\n  .ionic .ion-more:before,\n  .ionic .ion-mouse:before,\n  .ionic .ion-music-note:before,\n  .ionic .ion-navicon:before,\n  .ionic .ion-navicon-round:before,\n  .ionic .ion-navigate:before,\n  .ionic .ion-network:before,\n  .ionic .ion-no-smoking:before,\n  .ionic .ion-nuclear:before,\n  .ionic .ion-outlet:before,\n  .ionic .ion-paintbrush:before,\n  .ionic .ion-paintbucket:before,\n  .ionic .ion-paper-airplane:before,\n  .ionic .ion-paperclip:before,\n  .ionic .ion-pause:before,\n  .ionic .ion-person:before,\n  .ionic .ion-person-add:before,\n  .ionic .ion-person-stalker:before,\n  .ionic .ion-pie-graph:before,\n  .ionic .ion-pin:before,\n  .ionic .ion-pinpoint:before,\n  .ionic .ion-pizza:before,\n  .ionic .ion-plane:before,\n  .ionic .ion-planet:before,\n  .ionic .ion-play:before,\n  .ionic .ion-playstation:before,\n  .ionic .ion-plus:before,\n  .ionic .ion-plus-circled:before,\n  .ionic .ion-plus-round:before,\n  .ionic .ion-podium:before,\n  .ionic .ion-pound:before,\n  .ionic .ion-power:before,\n  .ionic .ion-pricetag:before,\n  .ionic .ion-pricetags:before,\n  .ionic .ion-printer:before,\n  .ionic .ion-pull-request:before,\n  .ionic .ion-qr-scanner:before,\n  .ionic .ion-quote:before,\n  .ionic .ion-radio-waves:before,\n  .ionic .ion-record:before,\n  .ionic .ion-refresh:before,\n  .ionic .ion-reply:before,\n  .ionic .ion-reply-all:before,\n  .ionic .ion-ribbon-a:before,\n  .ionic .ion-ribbon-b:before,\n  .ionic .ion-sad:before,\n  .ionic .ion-sad-outline:before,\n  .ionic .ion-scissors:before,\n  .ionic .ion-search:before,\n  .ionic .ion-settings:before,\n  .ionic .ion-share:before,\n  .ionic .ion-shuffle:before,\n  .ionic .ion-skip-backward:before,\n  .ionic .ion-skip-forward:before,\n  .ionic .ion-social-android:before,\n  .ionic .ion-social-android-outline:before,\n  .ionic .ion-social-angular:before,\n  .ionic .ion-social-angular-outline:before,\n  .ionic .ion-social-apple:before,\n  .ionic .ion-social-apple-outline:before,\n  .ionic .ion-social-bitcoin:before,\n  .ionic .ion-social-bitcoin-outline:before,\n  .ionic .ion-social-buffer:before,\n  .ionic .ion-social-buffer-outline:before,\n  .ionic .ion-social-chrome:before,\n  .ionic .ion-social-chrome-outline:before,\n  .ionic .ion-social-codepen:before,\n  .ionic .ion-social-codepen-outline:before,\n  .ionic .ion-social-css3:before,\n  .ionic .ion-social-css3-outline:before,\n  .ionic .ion-social-designernews:before,\n  .ionic .ion-social-designernews-outline:before,\n  .ionic .ion-social-dribbble:before,\n  .ionic .ion-social-dribbble-outline:before,\n  .ionic .ion-social-dropbox:before,\n  .ionic .ion-social-dropbox-outline:before,\n  .ionic .ion-social-euro:before,\n  .ionic .ion-social-euro-outline:before,\n  .ionic .ion-social-facebook:before,\n  .ionic .ion-social-facebook-outline:before,\n  .ionic .ion-social-foursquare:before,\n  .ionic .ion-social-foursquare-outline:before,\n  .ionic .ion-social-freebsd-devil:before,\n  .ionic .ion-social-github:before,\n  .ionic .ion-social-github-outline:before,\n  .ionic .ion-social-google:before,\n  .ionic .ion-social-google-outline:before,\n  .ionic .ion-social-googleplus:before,\n  .ionic .ion-social-googleplus-outline:before,\n  .ionic .ion-social-hackernews:before,\n  .ionic .ion-social-hackernews-outline:before,\n  .ionic .ion-social-html5:before,\n  .ionic .ion-social-html5-outline:before,\n  .ionic .ion-social-instagram:before,\n  .ionic .ion-social-instagram-outline:before,\n  .ionic .ion-social-javascript:before,\n  .ionic .ion-social-javascript-outline:before,\n  .ionic .ion-social-linkedin:before,\n  .ionic .ion-social-linkedin-outline:before,\n  .ionic .ion-social-markdown:before,\n  .ionic .ion-social-nodejs:before,\n  .ionic .ion-social-octocat:before,\n  .ionic .ion-social-pinterest:before,\n  .ionic .ion-social-pinterest-outline:before,\n  .ionic .ion-social-python:before,\n  .ionic .ion-social-reddit:before,\n  .ionic .ion-social-reddit-outline:before,\n  .ionic .ion-social-rss:before,\n  .ionic .ion-social-rss-outline:before,\n  .ionic .ion-social-sass:before,\n  .ionic .ion-social-skype:before,\n  .ionic .ion-social-skype-outline:before,\n  .ionic .ion-social-snapchat:before,\n  .ionic .ion-social-snapchat-outline:before,\n  .ionic .ion-social-tumblr:before,\n  .ionic .ion-social-tumblr-outline:before,\n  .ionic .ion-social-tux:before,\n  .ionic .ion-social-twitch:before,\n  .ionic .ion-social-twitch-outline:before,\n  .ionic .ion-social-twitter:before,\n  .ionic .ion-social-twitter-outline:before,\n  .ionic .ion-social-usd:before,\n  .ionic .ion-social-usd-outline:before,\n  .ionic .ion-social-vimeo:before,\n  .ionic .ion-social-vimeo-outline:before,\n  .ionic .ion-social-whatsapp:before,\n  .ionic .ion-social-whatsapp-outline:before,\n  .ionic .ion-social-windows:before,\n  .ionic .ion-social-windows-outline:before,\n  .ionic .ion-social-wordpress:before,\n  .ionic .ion-social-wordpress-outline:before,\n  .ionic .ion-social-yahoo:before,\n  .ionic .ion-social-yahoo-outline:before,\n  .ionic .ion-social-yen:before,\n  .ionic .ion-social-yen-outline:before,\n  .ionic .ion-social-youtube:before,\n  .ionic .ion-social-youtube-outline:before,\n  .ionic .ion-soup-can:before,\n  .ionic .ion-soup-can-outline:before,\n  .ionic .ion-speakerphone:before,\n  .ionic .ion-speedometer:before,\n  .ionic .ion-spoon:before,\n  .ionic .ion-star:before,\n  .ionic .ion-stats-bars:before,\n  .ionic .ion-steam:before,\n  .ionic .ion-stop:before,\n  .ionic .ion-thermometer:before,\n  .ionic .ion-thumbsdown:before,\n  .ionic .ion-thumbsup:before,\n  .ionic .ion-toggle:before,\n  .ionic .ion-toggle-filled:before,\n  .ionic .ion-transgender:before,\n  .ionic .ion-trash-a:before,\n  .ionic .ion-trash-b:before,\n  .ionic .ion-trophy:before,\n  .ionic .ion-tshirt:before,\n  .ionic .ion-tshirt-outline:before,\n  .ionic .ion-umbrella:before,\n  .ionic .ion-university:before,\n  .ionic .ion-unlocked:before,\n  .ionic .ion-upload:before,\n  .ionic .ion-usb:before,\n  .ionic .ion-videocamera:before,\n  .ionic .ion-volume-high:before,\n  .ionic .ion-volume-low:before,\n  .ionic .ion-volume-medium:before,\n  .ionic .ion-volume-mute:before,\n  .ionic .ion-wand:before,\n  .ionic .ion-waterdrop:before,\n  .ionic .ion-wifi:before,\n  .ionic .ion-wineglass:before,\n  .ionic .ion-woman:before,\n  .ionic .ion-wrench:before,\n  .ionic .ion-xbox:before {\n    display: inline-block;\n    font-family: \"Ionicons\";\n    speak: none;\n    font-style: normal;\n    font-weight: normal;\n    font-variant: normal;\n    text-transform: none;\n    text-rendering: auto;\n    line-height: 1;\n    -webkit-font-smoothing: antialiased;\n    -moz-osx-font-smoothing: grayscale; }\n  .ionic .ion-alert:before {\n    content: \"\"; }\n  .ionic .ion-alert-circled:before {\n    content: \"\"; }\n  .ionic .ion-android-add:before {\n    content: \"\"; }\n  .ionic .ion-android-add-circle:before {\n    content: \"\"; }\n  .ionic .ion-android-alarm-clock:before {\n    content: \"\"; }\n  .ionic .ion-android-alert:before {\n    content: \"\"; }\n  .ionic .ion-android-apps:before {\n    content: \"\"; }\n  .ionic .ion-android-archive:before {\n    content: \"\"; }\n  .ionic .ion-android-arrow-back:before {\n    content: \"\"; }\n  .ionic .ion-android-arrow-down:before {\n    content: \"\"; }\n  .ionic .ion-android-arrow-dropdown:before {\n    content: \"\"; }\n  .ionic .ion-android-arrow-dropdown-circle:before {\n    content: \"\"; }\n  .ionic .ion-android-arrow-dropleft:before {\n    content: \"\"; }\n  .ionic .ion-android-arrow-dropleft-circle:before {\n    content: \"\"; }\n  .ionic .ion-android-arrow-dropright:before {\n    content: \"\"; }\n  .ionic .ion-android-arrow-dropright-circle:before {\n    content: \"\"; }\n  .ionic .ion-android-arrow-dropup:before {\n    content: \"\"; }\n  .ionic .ion-android-arrow-dropup-circle:before {\n    content: \"\"; }\n  .ionic .ion-android-arrow-forward:before {\n    content: \"\"; }\n  .ionic .ion-android-arrow-up:before {\n    content: \"\"; }\n  .ionic .ion-android-attach:before {\n    content: \"\"; }\n  .ionic .ion-android-bar:before {\n    content: \"\"; }\n  .ionic .ion-android-bicycle:before {\n    content: \"\"; }\n  .ionic .ion-android-boat:before {\n    content: \"\"; }\n  .ionic .ion-android-bookmark:before {\n    content: \"\"; }\n  .ionic .ion-android-bulb:before {\n    content: \"\"; }\n  .ionic .ion-android-bus:before {\n    content: \"\"; }\n  .ionic .ion-android-calendar:before {\n    content: \"\"; }\n  .ionic .ion-android-call:before {\n    content: \"\"; }\n  .ionic .ion-android-camera:before {\n    content: \"\"; }\n  .ionic .ion-android-cancel:before {\n    content: \"\"; }\n  .ionic .ion-android-car:before {\n    content: \"\"; }\n  .ionic .ion-android-cart:before {\n    content: \"\"; }\n  .ionic .ion-android-chat:before {\n    content: \"\"; }\n  .ionic .ion-android-checkbox:before {\n    content: \"\"; }\n  .ionic .ion-android-checkbox-blank:before {\n    content: \"\"; }\n  .ionic .ion-android-checkbox-outline:before {\n    content: \"\"; }\n  .ionic .ion-android-checkbox-outline-blank:before {\n    content: \"\"; }\n  .ionic .ion-android-checkmark-circle:before {\n    content: \"\"; }\n  .ionic .ion-android-clipboard:before {\n    content: \"\"; }\n  .ionic .ion-android-close:before {\n    content: \"\"; }\n  .ionic .ion-android-cloud:before {\n    content: \"\"; }\n  .ionic .ion-android-cloud-circle:before {\n    content: \"\"; }\n  .ionic .ion-android-cloud-done:before {\n    content: \"\"; }\n  .ionic .ion-android-cloud-outline:before {\n    content: \"\"; }\n  .ionic .ion-android-color-palette:before {\n    content: \"\"; }\n  .ionic .ion-android-compass:before {\n    content: \"\"; }\n  .ionic .ion-android-contact:before {\n    content: \"\"; }\n  .ionic .ion-android-contacts:before {\n    content: \"\"; }\n  .ionic .ion-android-contract:before {\n    content: \"\"; }\n  .ionic .ion-android-create:before {\n    content: \"\"; }\n  .ionic .ion-android-delete:before {\n    content: \"\"; }\n  .ionic .ion-android-desktop:before {\n    content: \"\"; }\n  .ionic .ion-android-document:before {\n    content: \"\"; }\n  .ionic .ion-android-done:before {\n    content: \"\"; }\n  .ionic .ion-android-done-all:before {\n    content: \"\"; }\n  .ionic .ion-android-download:before {\n    content: \"\"; }\n  .ionic .ion-android-drafts:before {\n    content: \"\"; }\n  .ionic .ion-android-exit:before {\n    content: \"\"; }\n  .ionic .ion-android-expand:before {\n    content: \"\"; }\n  .ionic .ion-android-favorite:before {\n    content: \"\"; }\n  .ionic .ion-android-favorite-outline:before {\n    content: \"\"; }\n  .ionic .ion-android-film:before {\n    content: \"\"; }\n  .ionic .ion-android-folder:before {\n    content: \"\"; }\n  .ionic .ion-android-folder-open:before {\n    content: \"\"; }\n  .ionic .ion-android-funnel:before {\n    content: \"\"; }\n  .ionic .ion-android-globe:before {\n    content: \"\"; }\n  .ionic .ion-android-hand:before {\n    content: \"\"; }\n  .ionic .ion-android-hangout:before {\n    content: \"\"; }\n  .ionic .ion-android-happy:before {\n    content: \"\"; }\n  .ionic .ion-android-home:before {\n    content: \"\"; }\n  .ionic .ion-android-image:before {\n    content: \"\"; }\n  .ionic .ion-android-laptop:before {\n    content: \"\"; }\n  .ionic .ion-android-list:before {\n    content: \"\"; }\n  .ionic .ion-android-locate:before {\n    content: \"\"; }\n  .ionic .ion-android-lock:before {\n    content: \"\"; }\n  .ionic .ion-android-mail:before {\n    content: \"\"; }\n  .ionic .ion-android-map:before {\n    content: \"\"; }\n  .ionic .ion-android-menu:before {\n    content: \"\"; }\n  .ionic .ion-android-microphone:before {\n    content: \"\"; }\n  .ionic .ion-android-microphone-off:before {\n    content: \"\"; }\n  .ionic .ion-android-more-horizontal:before {\n    content: \"\"; }\n  .ionic .ion-android-more-vertical:before {\n    content: \"\"; }\n  .ionic .ion-android-navigate:before {\n    content: \"\"; }\n  .ionic .ion-android-notifications:before {\n    content: \"\"; }\n  .ionic .ion-android-notifications-none:before {\n    content: \"\"; }\n  .ionic .ion-android-notifications-off:before {\n    content: \"\"; }\n  .ionic .ion-android-open:before {\n    content: \"\"; }\n  .ionic .ion-android-options:before {\n    content: \"\"; }\n  .ionic .ion-android-people:before {\n    content: \"\"; }\n  .ionic .ion-android-person:before {\n    content: \"\"; }\n  .ionic .ion-android-person-add:before {\n    content: \"\"; }\n  .ionic .ion-android-phone-landscape:before {\n    content: \"\"; }\n  .ionic .ion-android-phone-portrait:before {\n    content: \"\"; }\n  .ionic .ion-android-pin:before {\n    content: \"\"; }\n  .ionic .ion-android-plane:before {\n    content: \"\"; }\n  .ionic .ion-android-playstore:before {\n    content: \"\"; }\n  .ionic .ion-android-print:before {\n    content: \"\"; }\n  .ionic .ion-android-radio-button-off:before {\n    content: \"\"; }\n  .ionic .ion-android-radio-button-on:before {\n    content: \"\"; }\n  .ionic .ion-android-refresh:before {\n    content: \"\"; }\n  .ionic .ion-android-remove:before {\n    content: \"\"; }\n  .ionic .ion-android-remove-circle:before {\n    content: \"\"; }\n  .ionic .ion-android-restaurant:before {\n    content: \"\"; }\n  .ionic .ion-android-sad:before {\n    content: \"\"; }\n  .ionic .ion-android-search:before {\n    content: \"\"; }\n  .ionic .ion-android-send:before {\n    content: \"\"; }\n  .ionic .ion-android-settings:before {\n    content: \"\"; }\n  .ionic .ion-android-share:before {\n    content: \"\"; }\n  .ionic .ion-android-share-alt:before {\n    content: \"\"; }\n  .ionic .ion-android-star:before {\n    content: \"\"; }\n  .ionic .ion-android-star-half:before {\n    content: \"\"; }\n  .ionic .ion-android-star-outline:before {\n    content: \"\"; }\n  .ionic .ion-android-stopwatch:before {\n    content: \"\"; }\n  .ionic .ion-android-subway:before {\n    content: \"\"; }\n  .ionic .ion-android-sunny:before {\n    content: \"\"; }\n  .ionic .ion-android-sync:before {\n    content: \"\"; }\n  .ionic .ion-android-textsms:before {\n    content: \"\"; }\n  .ionic .ion-android-time:before {\n    content: \"\"; }\n  .ionic .ion-android-train:before {\n    content: \"\"; }\n  .ionic .ion-android-unlock:before {\n    content: \"\"; }\n  .ionic .ion-android-upload:before {\n    content: \"\"; }\n  .ionic .ion-android-volume-down:before {\n    content: \"\"; }\n  .ionic .ion-android-volume-mute:before {\n    content: \"\"; }\n  .ionic .ion-android-volume-off:before {\n    content: \"\"; }\n  .ionic .ion-android-volume-up:before {\n    content: \"\"; }\n  .ionic .ion-android-walk:before {\n    content: \"\"; }\n  .ionic .ion-android-warning:before {\n    content: \"\"; }\n  .ionic .ion-android-watch:before {\n    content: \"\"; }\n  .ionic .ion-android-wifi:before {\n    content: \"\"; }\n  .ionic .ion-aperture:before {\n    content: \"\"; }\n  .ionic .ion-archive:before {\n    content: \"\"; }\n  .ionic .ion-arrow-down-a:before {\n    content: \"\"; }\n  .ionic .ion-arrow-down-b:before {\n    content: \"\"; }\n  .ionic .ion-arrow-down-c:before {\n    content: \"\"; }\n  .ionic .ion-arrow-expand:before {\n    content: \"\"; }\n  .ionic .ion-arrow-graph-down-left:before {\n    content: \"\"; }\n  .ionic .ion-arrow-graph-down-right:before {\n    content: \"\"; }\n  .ionic .ion-arrow-graph-up-left:before {\n    content: \"\"; }\n  .ionic .ion-arrow-graph-up-right:before {\n    content: \"\"; }\n  .ionic .ion-arrow-left-a:before {\n    content: \"\"; }\n  .ionic .ion-arrow-left-b:before {\n    content: \"\"; }\n  .ionic .ion-arrow-left-c:before {\n    content: \"\"; }\n  .ionic .ion-arrow-move:before {\n    content: \"\"; }\n  .ionic .ion-arrow-resize:before {\n    content: \"\"; }\n  .ionic .ion-arrow-return-left:before {\n    content: \"\"; }\n  .ionic .ion-arrow-return-right:before {\n    content: \"\"; }\n  .ionic .ion-arrow-right-a:before {\n    content: \"\"; }\n  .ionic .ion-arrow-right-b:before {\n    content: \"\"; }\n  .ionic .ion-arrow-right-c:before {\n    content: \"\"; }\n  .ionic .ion-arrow-shrink:before {\n    content: \"\"; }\n  .ionic .ion-arrow-swap:before {\n    content: \"\"; }\n  .ionic .ion-arrow-up-a:before {\n    content: \"\"; }\n  .ionic .ion-arrow-up-b:before {\n    content: \"\"; }\n  .ionic .ion-arrow-up-c:before {\n    content: \"\"; }\n  .ionic .ion-asterisk:before {\n    content: \"\"; }\n  .ionic .ion-at:before {\n    content: \"\"; }\n  .ionic .ion-backspace:before {\n    content: \"\"; }\n  .ionic .ion-backspace-outline:before {\n    content: \"\"; }\n  .ionic .ion-bag:before {\n    content: \"\"; }\n  .ionic .ion-battery-charging:before {\n    content: \"\"; }\n  .ionic .ion-battery-empty:before {\n    content: \"\"; }\n  .ionic .ion-battery-full:before {\n    content: \"\"; }\n  .ionic .ion-battery-half:before {\n    content: \"\"; }\n  .ionic .ion-battery-low:before {\n    content: \"\"; }\n  .ionic .ion-beaker:before {\n    content: \"\"; }\n  .ionic .ion-beer:before {\n    content: \"\"; }\n  .ionic .ion-bluetooth:before {\n    content: \"\"; }\n  .ionic .ion-bonfire:before {\n    content: \"\"; }\n  .ionic .ion-bookmark:before {\n    content: \"\"; }\n  .ionic .ion-bowtie:before {\n    content: \"\"; }\n  .ionic .ion-briefcase:before {\n    content: \"\"; }\n  .ionic .ion-bug:before {\n    content: \"\"; }\n  .ionic .ion-calculator:before {\n    content: \"\"; }\n  .ionic .ion-calendar:before {\n    content: \"\"; }\n  .ionic .ion-camera:before {\n    content: \"\"; }\n  .ionic .ion-card:before {\n    content: \"\"; }\n  .ionic .ion-cash:before {\n    content: \"\"; }\n  .ionic .ion-chatbox:before {\n    content: \"\"; }\n  .ionic .ion-chatbox-working:before {\n    content: \"\"; }\n  .ionic .ion-chatboxes:before {\n    content: \"\"; }\n  .ionic .ion-chatbubble:before {\n    content: \"\"; }\n  .ionic .ion-chatbubble-working:before {\n    content: \"\"; }\n  .ionic .ion-chatbubbles:before {\n    content: \"\"; }\n  .ionic .ion-checkmark:before {\n    content: \"\"; }\n  .ionic .ion-checkmark-circled:before {\n    content: \"\"; }\n  .ionic .ion-checkmark-round:before {\n    content: \"\"; }\n  .ionic .ion-chevron-down:before {\n    content: \"\"; }\n  .ionic .ion-chevron-left:before {\n    content: \"\"; }\n  .ionic .ion-chevron-right:before {\n    content: \"\"; }\n  .ionic .ion-chevron-up:before {\n    content: \"\"; }\n  .ionic .ion-clipboard:before {\n    content: \"\"; }\n  .ionic .ion-clock:before {\n    content: \"\"; }\n  .ionic .ion-close:before {\n    content: \"\"; }\n  .ionic .ion-close-circled:before {\n    content: \"\"; }\n  .ionic .ion-close-round:before {\n    content: \"\"; }\n  .ionic .ion-closed-captioning:before {\n    content: \"\"; }\n  .ionic .ion-cloud:before {\n    content: \"\"; }\n  .ionic .ion-code:before {\n    content: \"\"; }\n  .ionic .ion-code-download:before {\n    content: \"\"; }\n  .ionic .ion-code-working:before {\n    content: \"\"; }\n  .ionic .ion-coffee:before {\n    content: \"\"; }\n  .ionic .ion-compass:before {\n    content: \"\"; }\n  .ionic .ion-compose:before {\n    content: \"\"; }\n  .ionic .ion-connection-bars:before {\n    content: \"\"; }\n  .ionic .ion-contrast:before {\n    content: \"\"; }\n  .ionic .ion-crop:before {\n    content: \"\"; }\n  .ionic .ion-cube:before {\n    content: \"\"; }\n  .ionic .ion-disc:before {\n    content: \"\"; }\n  .ionic .ion-document:before {\n    content: \"\"; }\n  .ionic .ion-document-text:before {\n    content: \"\"; }\n  .ionic .ion-drag:before {\n    content: \"\"; }\n  .ionic .ion-earth:before {\n    content: \"\"; }\n  .ionic .ion-easel:before {\n    content: \"\"; }\n  .ionic .ion-edit:before {\n    content: \"\"; }\n  .ionic .ion-egg:before {\n    content: \"\"; }\n  .ionic .ion-eject:before {\n    content: \"\"; }\n  .ionic .ion-email:before {\n    content: \"\"; }\n  .ionic .ion-email-unread:before {\n    content: \"\"; }\n  .ionic .ion-erlenmeyer-flask:before {\n    content: \"\"; }\n  .ionic .ion-erlenmeyer-flask-bubbles:before {\n    content: \"\"; }\n  .ionic .ion-eye:before {\n    content: \"\"; }\n  .ionic .ion-eye-disabled:before {\n    content: \"\"; }\n  .ionic .ion-female:before {\n    content: \"\"; }\n  .ionic .ion-filing:before {\n    content: \"\"; }\n  .ionic .ion-film-marker:before {\n    content: \"\"; }\n  .ionic .ion-fireball:before {\n    content: \"\"; }\n  .ionic .ion-flag:before {\n    content: \"\"; }\n  .ionic .ion-flame:before {\n    content: \"\"; }\n  .ionic .ion-flash:before {\n    content: \"\"; }\n  .ionic .ion-flash-off:before {\n    content: \"\"; }\n  .ionic .ion-folder:before {\n    content: \"\"; }\n  .ionic .ion-fork:before {\n    content: \"\"; }\n  .ionic .ion-fork-repo:before {\n    content: \"\"; }\n  .ionic .ion-forward:before {\n    content: \"\"; }\n  .ionic .ion-funnel:before {\n    content: \"\"; }\n  .ionic .ion-gear-a:before {\n    content: \"\"; }\n  .ionic .ion-gear-b:before {\n    content: \"\"; }\n  .ionic .ion-grid:before {\n    content: \"\"; }\n  .ionic .ion-hammer:before {\n    content: \"\"; }\n  .ionic .ion-happy:before {\n    content: \"\"; }\n  .ionic .ion-happy-outline:before {\n    content: \"\"; }\n  .ionic .ion-headphone:before {\n    content: \"\"; }\n  .ionic .ion-heart:before {\n    content: \"\"; }\n  .ionic .ion-heart-broken:before {\n    content: \"\"; }\n  .ionic .ion-help:before {\n    content: \"\"; }\n  .ionic .ion-help-buoy:before {\n    content: \"\"; }\n  .ionic .ion-help-circled:before {\n    content: \"\"; }\n  .ionic .ion-home:before {\n    content: \"\"; }\n  .ionic .ion-icecream:before {\n    content: \"\"; }\n  .ionic .ion-image:before {\n    content: \"\"; }\n  .ionic .ion-images:before {\n    content: \"\"; }\n  .ionic .ion-information:before {\n    content: \"\"; }\n  .ionic .ion-information-circled:before {\n    content: \"\"; }\n  .ionic .ion-ionic:before {\n    content: \"\"; }\n  .ionic .ion-ios-alarm:before {\n    content: \"\"; }\n  .ionic .ion-ios-alarm-outline:before {\n    content: \"\"; }\n  .ionic .ion-ios-albums:before {\n    content: \"\"; }\n  .ionic .ion-ios-albums-outline:before {\n    content: \"\"; }\n  .ionic .ion-ios-americanfootball:before {\n    content: \"\"; }\n  .ionic .ion-ios-americanfootball-outline:before {\n    content: \"\"; }\n  .ionic .ion-ios-analytics:before {\n    content: \"\"; }\n  .ionic .ion-ios-analytics-outline:before {\n    content: \"\"; }\n  .ionic .ion-ios-arrow-back:before {\n    content: \"\"; }\n  .ionic .ion-ios-arrow-down:before {\n    content: \"\"; }\n  .ionic .ion-ios-arrow-forward:before {\n    content: \"\"; }\n  .ionic .ion-ios-arrow-left:before {\n    content: \"\"; }\n  .ionic .ion-ios-arrow-right:before {\n    content: \"\"; }\n  .ionic .ion-ios-arrow-thin-down:before {\n    content: \"\"; }\n  .ionic .ion-ios-arrow-thin-left:before {\n    content: \"\"; }\n  .ionic .ion-ios-arrow-thin-right:before {\n    content: \"\"; }\n  .ionic .ion-ios-arrow-thin-up:before {\n    content: \"\"; }\n  .ionic .ion-ios-arrow-up:before {\n    content: \"\"; }\n  .ionic .ion-ios-at:before {\n    content: \"\"; }\n  .ionic .ion-ios-at-outline:before {\n    content: \"\"; }\n  .ionic .ion-ios-barcode:before {\n    content: \"\"; }\n  .ionic .ion-ios-barcode-outline:before {\n    content: \"\"; }\n  .ionic .ion-ios-baseball:before {\n    content: \"\"; }\n  .ionic .ion-ios-baseball-outline:before {\n    content: \"\"; }\n  .ionic .ion-ios-basketball:before {\n    content: \"\"; }\n  .ionic .ion-ios-basketball-outline:before {\n    content: \"\"; }\n  .ionic .ion-ios-bell:before {\n    content: \"\"; }\n  .ionic .ion-ios-bell-outline:before {\n    content: \"\"; }\n  .ionic .ion-ios-body:before {\n    content: \"\"; }\n  .ionic .ion-ios-body-outline:before {\n    content: \"\"; }\n  .ionic .ion-ios-bolt:before {\n    content: \"\"; }\n  .ionic .ion-ios-bolt-outline:before {\n    content: \"\"; }\n  .ionic .ion-ios-book:before {\n    content: \"\"; }\n  .ionic .ion-ios-book-outline:before {\n    content: \"\"; }\n  .ionic .ion-ios-bookmarks:before {\n    content: \"\"; }\n  .ionic .ion-ios-bookmarks-outline:before {\n    content: \"\"; }\n  .ionic .ion-ios-box:before {\n    content: \"\"; }\n  .ionic .ion-ios-box-outline:before {\n    content: \"\"; }\n  .ionic .ion-ios-briefcase:before {\n    content: \"\"; }\n  .ionic .ion-ios-briefcase-outline:before {\n    content: \"\"; }\n  .ionic .ion-ios-browsers:before {\n    content: \"\"; }\n  .ionic .ion-ios-browsers-outline:before {\n    content: \"\"; }\n  .ionic .ion-ios-calculator:before {\n    content: \"\"; }\n  .ionic .ion-ios-calculator-outline:before {\n    content: \"\"; }\n  .ionic .ion-ios-calendar:before {\n    content: \"\"; }\n  .ionic .ion-ios-calendar-outline:before {\n    content: \"\"; }\n  .ionic .ion-ios-camera:before {\n    content: \"\"; }\n  .ionic .ion-ios-camera-outline:before {\n    content: \"\"; }\n  .ionic .ion-ios-cart:before {\n    content: \"\"; }\n  .ionic .ion-ios-cart-outline:before {\n    content: \"\"; }\n  .ionic .ion-ios-chatboxes:before {\n    content: \"\"; }\n  .ionic .ion-ios-chatboxes-outline:before {\n    content: \"\"; }\n  .ionic .ion-ios-chatbubble:before {\n    content: \"\"; }\n  .ionic .ion-ios-chatbubble-outline:before {\n    content: \"\"; }\n  .ionic .ion-ios-checkmark:before {\n    content: \"\"; }\n  .ionic .ion-ios-checkmark-empty:before {\n    content: \"\"; }\n  .ionic .ion-ios-checkmark-outline:before {\n    content: \"\"; }\n  .ionic .ion-ios-circle-filled:before {\n    content: \"\"; }\n  .ionic .ion-ios-circle-outline:before {\n    content: \"\"; }\n  .ionic .ion-ios-clock:before {\n    content: \"\"; }\n  .ionic .ion-ios-clock-outline:before {\n    content: \"\"; }\n  .ionic .ion-ios-close:before {\n    content: \"\"; }\n  .ionic .ion-ios-close-empty:before {\n    content: \"\"; }\n  .ionic .ion-ios-close-outline:before {\n    content: \"\"; }\n  .ionic .ion-ios-cloud:before {\n    content: \"\"; }\n  .ionic .ion-ios-cloud-download:before {\n    content: \"\"; }\n  .ionic .ion-ios-cloud-download-outline:before {\n    content: \"\"; }\n  .ionic .ion-ios-cloud-outline:before {\n    content: \"\"; }\n  .ionic .ion-ios-cloud-upload:before {\n    content: \"\"; }\n  .ionic .ion-ios-cloud-upload-outline:before {\n    content: \"\"; }\n  .ionic .ion-ios-cloudy:before {\n    content: \"\"; }\n  .ionic .ion-ios-cloudy-night:before {\n    content: \"\"; }\n  .ionic .ion-ios-cloudy-night-outline:before {\n    content: \"\"; }\n  .ionic .ion-ios-cloudy-outline:before {\n    content: \"\"; }\n  .ionic .ion-ios-cog:before {\n    content: \"\"; }\n  .ionic .ion-ios-cog-outline:before {\n    content: \"\"; }\n  .ionic .ion-ios-color-filter:before {\n    content: \"\"; }\n  .ionic .ion-ios-color-filter-outline:before {\n    content: \"\"; }\n  .ionic .ion-ios-color-wand:before {\n    content: \"\"; }\n  .ionic .ion-ios-color-wand-outline:before {\n    content: \"\"; }\n  .ionic .ion-ios-compose:before {\n    content: \"\"; }\n  .ionic .ion-ios-compose-outline:before {\n    content: \"\"; }\n  .ionic .ion-ios-contact:before {\n    content: \"\"; }\n  .ionic .ion-ios-contact-outline:before {\n    content: \"\"; }\n  .ionic .ion-ios-copy:before {\n    content: \"\"; }\n  .ionic .ion-ios-copy-outline:before {\n    content: \"\"; }\n  .ionic .ion-ios-crop:before {\n    content: \"\"; }\n  .ionic .ion-ios-crop-strong:before {\n    content: \"\"; }\n  .ionic .ion-ios-download:before {\n    content: \"\"; }\n  .ionic .ion-ios-download-outline:before {\n    content: \"\"; }\n  .ionic .ion-ios-drag:before {\n    content: \"\"; }\n  .ionic .ion-ios-email:before {\n    content: \"\"; }\n  .ionic .ion-ios-email-outline:before {\n    content: \"\"; }\n  .ionic .ion-ios-eye:before {\n    content: \"\"; }\n  .ionic .ion-ios-eye-outline:before {\n    content: \"\"; }\n  .ionic .ion-ios-fastforward:before {\n    content: \"\"; }\n  .ionic .ion-ios-fastforward-outline:before {\n    content: \"\"; }\n  .ionic .ion-ios-filing:before {\n    content: \"\"; }\n  .ionic .ion-ios-filing-outline:before {\n    content: \"\"; }\n  .ionic .ion-ios-film:before {\n    content: \"\"; }\n  .ionic .ion-ios-film-outline:before {\n    content: \"\"; }\n  .ionic .ion-ios-flag:before {\n    content: \"\"; }\n  .ionic .ion-ios-flag-outline:before {\n    content: \"\"; }\n  .ionic .ion-ios-flame:before {\n    content: \"\"; }\n  .ionic .ion-ios-flame-outline:before {\n    content: \"\"; }\n  .ionic .ion-ios-flask:before {\n    content: \"\"; }\n  .ionic .ion-ios-flask-outline:before {\n    content: \"\"; }\n  .ionic .ion-ios-flower:before {\n    content: \"\"; }\n  .ionic .ion-ios-flower-outline:before {\n    content: \"\"; }\n  .ionic .ion-ios-folder:before {\n    content: \"\"; }\n  .ionic .ion-ios-folder-outline:before {\n    content: \"\"; }\n  .ionic .ion-ios-football:before {\n    content: \"\"; }\n  .ionic .ion-ios-football-outline:before {\n    content: \"\"; }\n  .ionic .ion-ios-game-controller-a:before {\n    content: \"\"; }\n  .ionic .ion-ios-game-controller-a-outline:before {\n    content: \"\"; }\n  .ionic .ion-ios-game-controller-b:before {\n    content: \"\"; }\n  .ionic .ion-ios-game-controller-b-outline:before {\n    content: \"\"; }\n  .ionic .ion-ios-gear:before {\n    content: \"\"; }\n  .ionic .ion-ios-gear-outline:before {\n    content: \"\"; }\n  .ionic .ion-ios-glasses:before {\n    content: \"\"; }\n  .ionic .ion-ios-glasses-outline:before {\n    content: \"\"; }\n  .ionic .ion-ios-grid-view:before {\n    content: \"\"; }\n  .ionic .ion-ios-grid-view-outline:before {\n    content: \"\"; }\n  .ionic .ion-ios-heart:before {\n    content: \"\"; }\n  .ionic .ion-ios-heart-outline:before {\n    content: \"\"; }\n  .ionic .ion-ios-help:before {\n    content: \"\"; }\n  .ionic .ion-ios-help-empty:before {\n    content: \"\"; }\n  .ionic .ion-ios-help-outline:before {\n    content: \"\"; }\n  .ionic .ion-ios-home:before {\n    content: \"\"; }\n  .ionic .ion-ios-home-outline:before {\n    content: \"\"; }\n  .ionic .ion-ios-infinite:before {\n    content: \"\"; }\n  .ionic .ion-ios-infinite-outline:before {\n    content: \"\"; }\n  .ionic .ion-ios-information:before {\n    content: \"\"; }\n  .ionic .ion-ios-information-empty:before {\n    content: \"\"; }\n  .ionic .ion-ios-information-outline:before {\n    content: \"\"; }\n  .ionic .ion-ios-ionic-outline:before {\n    content: \"\"; }\n  .ionic .ion-ios-keypad:before {\n    content: \"\"; }\n  .ionic .ion-ios-keypad-outline:before {\n    content: \"\"; }\n  .ionic .ion-ios-lightbulb:before {\n    content: \"\"; }\n  .ionic .ion-ios-lightbulb-outline:before {\n    content: \"\"; }\n  .ionic .ion-ios-list:before {\n    content: \"\"; }\n  .ionic .ion-ios-list-outline:before {\n    content: \"\"; }\n  .ionic .ion-ios-location:before {\n    content: \"\"; }\n  .ionic .ion-ios-location-outline:before {\n    content: \"\"; }\n  .ionic .ion-ios-locked:before {\n    content: \"\"; }\n  .ionic .ion-ios-locked-outline:before {\n    content: \"\"; }\n  .ionic .ion-ios-loop:before {\n    content: \"\"; }\n  .ionic .ion-ios-loop-strong:before {\n    content: \"\"; }\n  .ionic .ion-ios-medical:before {\n    content: \"\"; }\n  .ionic .ion-ios-medical-outline:before {\n    content: \"\"; }\n  .ionic .ion-ios-medkit:before {\n    content: \"\"; }\n  .ionic .ion-ios-medkit-outline:before {\n    content: \"\"; }\n  .ionic .ion-ios-mic:before {\n    content: \"\"; }\n  .ionic .ion-ios-mic-off:before {\n    content: \"\"; }\n  .ionic .ion-ios-mic-outline:before {\n    content: \"\"; }\n  .ionic .ion-ios-minus:before {\n    content: \"\"; }\n  .ionic .ion-ios-minus-empty:before {\n    content: \"\"; }\n  .ionic .ion-ios-minus-outline:before {\n    content: \"\"; }\n  .ionic .ion-ios-monitor:before {\n    content: \"\"; }\n  .ionic .ion-ios-monitor-outline:before {\n    content: \"\"; }\n  .ionic .ion-ios-moon:before {\n    content: \"\"; }\n  .ionic .ion-ios-moon-outline:before {\n    content: \"\"; }\n  .ionic .ion-ios-more:before {\n    content: \"\"; }\n  .ionic .ion-ios-more-outline:before {\n    content: \"\"; }\n  .ionic .ion-ios-musical-note:before {\n    content: \"\"; }\n  .ionic .ion-ios-musical-notes:before {\n    content: \"\"; }\n  .ionic .ion-ios-navigate:before {\n    content: \"\"; }\n  .ionic .ion-ios-navigate-outline:before {\n    content: \"\"; }\n  .ionic .ion-ios-nutrition:before {\n    content: \"\"; }\n  .ionic .ion-ios-nutrition-outline:before {\n    content: \"\"; }\n  .ionic .ion-ios-paper:before {\n    content: \"\"; }\n  .ionic .ion-ios-paper-outline:before {\n    content: \"\"; }\n  .ionic .ion-ios-paperplane:before {\n    content: \"\"; }\n  .ionic .ion-ios-paperplane-outline:before {\n    content: \"\"; }\n  .ionic .ion-ios-partlysunny:before {\n    content: \"\"; }\n  .ionic .ion-ios-partlysunny-outline:before {\n    content: \"\"; }\n  .ionic .ion-ios-pause:before {\n    content: \"\"; }\n  .ionic .ion-ios-pause-outline:before {\n    content: \"\"; }\n  .ionic .ion-ios-paw:before {\n    content: \"\"; }\n  .ionic .ion-ios-paw-outline:before {\n    content: \"\"; }\n  .ionic .ion-ios-people:before {\n    content: \"\"; }\n  .ionic .ion-ios-people-outline:before {\n    content: \"\"; }\n  .ionic .ion-ios-person:before {\n    content: \"\"; }\n  .ionic .ion-ios-person-outline:before {\n    content: \"\"; }\n  .ionic .ion-ios-personadd:before {\n    content: \"\"; }\n  .ionic .ion-ios-personadd-outline:before {\n    content: \"\"; }\n  .ionic .ion-ios-photos:before {\n    content: \"\"; }\n  .ionic .ion-ios-photos-outline:before {\n    content: \"\"; }\n  .ionic .ion-ios-pie:before {\n    content: \"\"; }\n  .ionic .ion-ios-pie-outline:before {\n    content: \"\"; }\n  .ionic .ion-ios-pint:before {\n    content: \"\"; }\n  .ionic .ion-ios-pint-outline:before {\n    content: \"\"; }\n  .ionic .ion-ios-play:before {\n    content: \"\"; }\n  .ionic .ion-ios-play-outline:before {\n    content: \"\"; }\n  .ionic .ion-ios-plus:before {\n    content: \"\"; }\n  .ionic .ion-ios-plus-empty:before {\n    content: \"\"; }\n  .ionic .ion-ios-plus-outline:before {\n    content: \"\"; }\n  .ionic .ion-ios-pricetag:before {\n    content: \"\"; }\n  .ionic .ion-ios-pricetag-outline:before {\n    content: \"\"; }\n  .ionic .ion-ios-pricetags:before {\n    content: \"\"; }\n  .ionic .ion-ios-pricetags-outline:before {\n    content: \"\"; }\n  .ionic .ion-ios-printer:before {\n    content: \"\"; }\n  .ionic .ion-ios-printer-outline:before {\n    content: \"\"; }\n  .ionic .ion-ios-pulse:before {\n    content: \"\"; }\n  .ionic .ion-ios-pulse-strong:before {\n    content: \"\"; }\n  .ionic .ion-ios-rainy:before {\n    content: \"\"; }\n  .ionic .ion-ios-rainy-outline:before {\n    content: \"\"; }\n  .ionic .ion-ios-recording:before {\n    content: \"\"; }\n  .ionic .ion-ios-recording-outline:before {\n    content: \"\"; }\n  .ionic .ion-ios-redo:before {\n    content: \"\"; }\n  .ionic .ion-ios-redo-outline:before {\n    content: \"\"; }\n  .ionic .ion-ios-refresh:before {\n    content: \"\"; }\n  .ionic .ion-ios-refresh-empty:before {\n    content: \"\"; }\n  .ionic .ion-ios-refresh-outline:before {\n    content: \"\"; }\n  .ionic .ion-ios-reload:before {\n    content: \"\"; }\n  .ionic .ion-ios-reverse-camera:before {\n    content: \"\"; }\n  .ionic .ion-ios-reverse-camera-outline:before {\n    content: \"\"; }\n  .ionic .ion-ios-rewind:before {\n    content: \"\"; }\n  .ionic .ion-ios-rewind-outline:before {\n    content: \"\"; }\n  .ionic .ion-ios-rose:before {\n    content: \"\"; }\n  .ionic .ion-ios-rose-outline:before {\n    content: \"\"; }\n  .ionic .ion-ios-search:before {\n    content: \"\"; }\n  .ionic .ion-ios-search-strong:before {\n    content: \"\"; }\n  .ionic .ion-ios-settings:before {\n    content: \"\"; }\n  .ionic .ion-ios-settings-strong:before {\n    content: \"\"; }\n  .ionic .ion-ios-shuffle:before {\n    content: \"\"; }\n  .ionic .ion-ios-shuffle-strong:before {\n    content: \"\"; }\n  .ionic .ion-ios-skipbackward:before {\n    content: \"\"; }\n  .ionic .ion-ios-skipbackward-outline:before {\n    content: \"\"; }\n  .ionic .ion-ios-skipforward:before {\n    content: \"\"; }\n  .ionic .ion-ios-skipforward-outline:before {\n    content: \"\"; }\n  .ionic .ion-ios-snowy:before {\n    content: \"\"; }\n  .ionic .ion-ios-speedometer:before {\n    content: \"\"; }\n  .ionic .ion-ios-speedometer-outline:before {\n    content: \"\"; }\n  .ionic .ion-ios-star:before {\n    content: \"\"; }\n  .ionic .ion-ios-star-half:before {\n    content: \"\"; }\n  .ionic .ion-ios-star-outline:before {\n    content: \"\"; }\n  .ionic .ion-ios-stopwatch:before {\n    content: \"\"; }\n  .ionic .ion-ios-stopwatch-outline:before {\n    content: \"\"; }\n  .ionic .ion-ios-sunny:before {\n    content: \"\"; }\n  .ionic .ion-ios-sunny-outline:before {\n    content: \"\"; }\n  .ionic .ion-ios-telephone:before {\n    content: \"\"; }\n  .ionic .ion-ios-telephone-outline:before {\n    content: \"\"; }\n  .ionic .ion-ios-tennisball:before {\n    content: \"\"; }\n  .ionic .ion-ios-tennisball-outline:before {\n    content: \"\"; }\n  .ionic .ion-ios-thunderstorm:before {\n    content: \"\"; }\n  .ionic .ion-ios-thunderstorm-outline:before {\n    content: \"\"; }\n  .ionic .ion-ios-time:before {\n    content: \"\"; }\n  .ionic .ion-ios-time-outline:before {\n    content: \"\"; }\n  .ionic .ion-ios-timer:before {\n    content: \"\"; }\n  .ionic .ion-ios-timer-outline:before {\n    content: \"\"; }\n  .ionic .ion-ios-toggle:before {\n    content: \"\"; }\n  .ionic .ion-ios-toggle-outline:before {\n    content: \"\"; }\n  .ionic .ion-ios-trash:before {\n    content: \"\"; }\n  .ionic .ion-ios-trash-outline:before {\n    content: \"\"; }\n  .ionic .ion-ios-undo:before {\n    content: \"\"; }\n  .ionic .ion-ios-undo-outline:before {\n    content: \"\"; }\n  .ionic .ion-ios-unlocked:before {\n    content: \"\"; }\n  .ionic .ion-ios-unlocked-outline:before {\n    content: \"\"; }\n  .ionic .ion-ios-upload:before {\n    content: \"\"; }\n  .ionic .ion-ios-upload-outline:before {\n    content: \"\"; }\n  .ionic .ion-ios-videocam:before {\n    content: \"\"; }\n  .ionic .ion-ios-videocam-outline:before {\n    content: \"\"; }\n  .ionic .ion-ios-volume-high:before {\n    content: \"\"; }\n  .ionic .ion-ios-volume-low:before {\n    content: \"\"; }\n  .ionic .ion-ios-wineglass:before {\n    content: \"\"; }\n  .ionic .ion-ios-wineglass-outline:before {\n    content: \"\"; }\n  .ionic .ion-ios-world:before {\n    content: \"\"; }\n  .ionic .ion-ios-world-outline:before {\n    content: \"\"; }\n  .ionic .ion-ipad:before {\n    content: \"\"; }\n  .ionic .ion-iphone:before {\n    content: \"\"; }\n  .ionic .ion-ipod:before {\n    content: \"\"; }\n  .ionic .ion-jet:before {\n    content: \"\"; }\n  .ionic .ion-key:before {\n    content: \"\"; }\n  .ionic .ion-knife:before {\n    content: \"\"; }\n  .ionic .ion-laptop:before {\n    content: \"\"; }\n  .ionic .ion-leaf:before {\n    content: \"\"; }\n  .ionic .ion-levels:before {\n    content: \"\"; }\n  .ionic .ion-lightbulb:before {\n    content: \"\"; }\n  .ionic .ion-link:before {\n    content: \"\"; }\n  .ionic .ion-load-a:before {\n    content: \"\"; }\n  .ionic .ion-load-b:before {\n    content: \"\"; }\n  .ionic .ion-load-c:before {\n    content: \"\"; }\n  .ionic .ion-load-d:before {\n    content: \"\"; }\n  .ionic .ion-location:before {\n    content: \"\"; }\n  .ionic .ion-lock-combination:before {\n    content: \"\"; }\n  .ionic .ion-locked:before {\n    content: \"\"; }\n  .ionic .ion-log-in:before {\n    content: \"\"; }\n  .ionic .ion-log-out:before {\n    content: \"\"; }\n  .ionic .ion-loop:before {\n    content: \"\"; }\n  .ionic .ion-magnet:before {\n    content: \"\"; }\n  .ionic .ion-male:before {\n    content: \"\"; }\n  .ionic .ion-man:before {\n    content: \"\"; }\n  .ionic .ion-map:before {\n    content: \"\"; }\n  .ionic .ion-medkit:before {\n    content: \"\"; }\n  .ionic .ion-merge:before {\n    content: \"\"; }\n  .ionic .ion-mic-a:before {\n    content: \"\"; }\n  .ionic .ion-mic-b:before {\n    content: \"\"; }\n  .ionic .ion-mic-c:before {\n    content: \"\"; }\n  .ionic .ion-minus:before {\n    content: \"\"; }\n  .ionic .ion-minus-circled:before {\n    content: \"\"; }\n  .ionic .ion-minus-round:before {\n    content: \"\"; }\n  .ionic .ion-model-s:before {\n    content: \"\"; }\n  .ionic .ion-monitor:before {\n    content: \"\"; }\n  .ionic .ion-more:before {\n    content: \"\"; }\n  .ionic .ion-mouse:before {\n    content: \"\"; }\n  .ionic .ion-music-note:before {\n    content: \"\"; }\n  .ionic .ion-navicon:before {\n    content: \"\"; }\n  .ionic .ion-navicon-round:before {\n    content: \"\"; }\n  .ionic .ion-navigate:before {\n    content: \"\"; }\n  .ionic .ion-network:before {\n    content: \"\"; }\n  .ionic .ion-no-smoking:before {\n    content: \"\"; }\n  .ionic .ion-nuclear:before {\n    content: \"\"; }\n  .ionic .ion-outlet:before {\n    content: \"\"; }\n  .ionic .ion-paintbrush:before {\n    content: \"\"; }\n  .ionic .ion-paintbucket:before {\n    content: \"\"; }\n  .ionic .ion-paper-airplane:before {\n    content: \"\"; }\n  .ionic .ion-paperclip:before {\n    content: \"\"; }\n  .ionic .ion-pause:before {\n    content: \"\"; }\n  .ionic .ion-person:before {\n    content: \"\"; }\n  .ionic .ion-person-add:before {\n    content: \"\"; }\n  .ionic .ion-person-stalker:before {\n    content: \"\"; }\n  .ionic .ion-pie-graph:before {\n    content: \"\"; }\n  .ionic .ion-pin:before {\n    content: \"\"; }\n  .ionic .ion-pinpoint:before {\n    content: \"\"; }\n  .ionic .ion-pizza:before {\n    content: \"\"; }\n  .ionic .ion-plane:before {\n    content: \"\"; }\n  .ionic .ion-planet:before {\n    content: \"\"; }\n  .ionic .ion-play:before {\n    content: \"\"; }\n  .ionic .ion-playstation:before {\n    content: \"\"; }\n  .ionic .ion-plus:before {\n    content: \"\"; }\n  .ionic .ion-plus-circled:before {\n    content: \"\"; }\n  .ionic .ion-plus-round:before {\n    content: \"\"; }\n  .ionic .ion-podium:before {\n    content: \"\"; }\n  .ionic .ion-pound:before {\n    content: \"\"; }\n  .ionic .ion-power:before {\n    content: \"\"; }\n  .ionic .ion-pricetag:before {\n    content: \"\"; }\n  .ionic .ion-pricetags:before {\n    content: \"\"; }\n  .ionic .ion-printer:before {\n    content: \"\"; }\n  .ionic .ion-pull-request:before {\n    content: \"\"; }\n  .ionic .ion-qr-scanner:before {\n    content: \"\"; }\n  .ionic .ion-quote:before {\n    content: \"\"; }\n  .ionic .ion-radio-waves:before {\n    content: \"\"; }\n  .ionic .ion-record:before {\n    content: \"\"; }\n  .ionic .ion-refresh:before {\n    content: \"\"; }\n  .ionic .ion-reply:before {\n    content: \"\"; }\n  .ionic .ion-reply-all:before {\n    content: \"\"; }\n  .ionic .ion-ribbon-a:before {\n    content: \"\"; }\n  .ionic .ion-ribbon-b:before {\n    content: \"\"; }\n  .ionic .ion-sad:before {\n    content: \"\"; }\n  .ionic .ion-sad-outline:before {\n    content: \"\"; }\n  .ionic .ion-scissors:before {\n    content: \"\"; }\n  .ionic .ion-search:before {\n    content: \"\"; }\n  .ionic .ion-settings:before {\n    content: \"\"; }\n  .ionic .ion-share:before {\n    content: \"\"; }\n  .ionic .ion-shuffle:before {\n    content: \"\"; }\n  .ionic .ion-skip-backward:before {\n    content: \"\"; }\n  .ionic .ion-skip-forward:before {\n    content: \"\"; }\n  .ionic .ion-social-android:before {\n    content: \"\"; }\n  .ionic .ion-social-android-outline:before {\n    content: \"\"; }\n  .ionic .ion-social-angular:before {\n    content: \"\"; }\n  .ionic .ion-social-angular-outline:before {\n    content: \"\"; }\n  .ionic .ion-social-apple:before {\n    content: \"\"; }\n  .ionic .ion-social-apple-outline:before {\n    content: \"\"; }\n  .ionic .ion-social-bitcoin:before {\n    content: \"\"; }\n  .ionic .ion-social-bitcoin-outline:before {\n    content: \"\"; }\n  .ionic .ion-social-buffer:before {\n    content: \"\"; }\n  .ionic .ion-social-buffer-outline:before {\n    content: \"\"; }\n  .ionic .ion-social-chrome:before {\n    content: \"\"; }\n  .ionic .ion-social-chrome-outline:before {\n    content: \"\"; }\n  .ionic .ion-social-codepen:before {\n    content: \"\"; }\n  .ionic .ion-social-codepen-outline:before {\n    content: \"\"; }\n  .ionic .ion-social-css3:before {\n    content: \"\"; }\n  .ionic .ion-social-css3-outline:before {\n    content: \"\"; }\n  .ionic .ion-social-designernews:before {\n    content: \"\"; }\n  .ionic .ion-social-designernews-outline:before {\n    content: \"\"; }\n  .ionic .ion-social-dribbble:before {\n    content: \"\"; }\n  .ionic .ion-social-dribbble-outline:before {\n    content: \"\"; }\n  .ionic .ion-social-dropbox:before {\n    content: \"\"; }\n  .ionic .ion-social-dropbox-outline:before {\n    content: \"\"; }\n  .ionic .ion-social-euro:before {\n    content: \"\"; }\n  .ionic .ion-social-euro-outline:before {\n    content: \"\"; }\n  .ionic .ion-social-facebook:before {\n    content: \"\"; }\n  .ionic .ion-social-facebook-outline:before {\n    content: \"\"; }\n  .ionic .ion-social-foursquare:before {\n    content: \"\"; }\n  .ionic .ion-social-foursquare-outline:before {\n    content: \"\"; }\n  .ionic .ion-social-freebsd-devil:before {\n    content: \"\"; }\n  .ionic .ion-social-github:before {\n    content: \"\"; }\n  .ionic .ion-social-github-outline:before {\n    content: \"\"; }\n  .ionic .ion-social-google:before {\n    content: \"\"; }\n  .ionic .ion-social-google-outline:before {\n    content: \"\"; }\n  .ionic .ion-social-googleplus:before {\n    content: \"\"; }\n  .ionic .ion-social-googleplus-outline:before {\n    content: \"\"; }\n  .ionic .ion-social-hackernews:before {\n    content: \"\"; }\n  .ionic .ion-social-hackernews-outline:before {\n    content: \"\"; }\n  .ionic .ion-social-html5:before {\n    content: \"\"; }\n  .ionic .ion-social-html5-outline:before {\n    content: \"\"; }\n  .ionic .ion-social-instagram:before {\n    content: \"\"; }\n  .ionic .ion-social-instagram-outline:before {\n    content: \"\"; }\n  .ionic .ion-social-javascript:before {\n    content: \"\"; }\n  .ionic .ion-social-javascript-outline:before {\n    content: \"\"; }\n  .ionic .ion-social-linkedin:before {\n    content: \"\"; }\n  .ionic .ion-social-linkedin-outline:before {\n    content: \"\"; }\n  .ionic .ion-social-markdown:before {\n    content: \"\"; }\n  .ionic .ion-social-nodejs:before {\n    content: \"\"; }\n  .ionic .ion-social-octocat:before {\n    content: \"\"; }\n  .ionic .ion-social-pinterest:before {\n    content: \"\"; }\n  .ionic .ion-social-pinterest-outline:before {\n    content: \"\"; }\n  .ionic .ion-social-python:before {\n    content: \"\"; }\n  .ionic .ion-social-reddit:before {\n    content: \"\"; }\n  .ionic .ion-social-reddit-outline:before {\n    content: \"\"; }\n  .ionic .ion-social-rss:before {\n    content: \"\"; }\n  .ionic .ion-social-rss-outline:before {\n    content: \"\"; }\n  .ionic .ion-social-sass:before {\n    content: \"\"; }\n  .ionic .ion-social-skype:before {\n    content: \"\"; }\n  .ionic .ion-social-skype-outline:before {\n    content: \"\"; }\n  .ionic .ion-social-snapchat:before {\n    content: \"\"; }\n  .ionic .ion-social-snapchat-outline:before {\n    content: \"\"; }\n  .ionic .ion-social-tumblr:before {\n    content: \"\"; }\n  .ionic .ion-social-tumblr-outline:before {\n    content: \"\"; }\n  .ionic .ion-social-tux:before {\n    content: \"\"; }\n  .ionic .ion-social-twitch:before {\n    content: \"\"; }\n  .ionic .ion-social-twitch-outline:before {\n    content: \"\"; }\n  .ionic .ion-social-twitter:before {\n    content: \"\"; }\n  .ionic .ion-social-twitter-outline:before {\n    content: \"\"; }\n  .ionic .ion-social-usd:before {\n    content: \"\"; }\n  .ionic .ion-social-usd-outline:before {\n    content: \"\"; }\n  .ionic .ion-social-vimeo:before {\n    content: \"\"; }\n  .ionic .ion-social-vimeo-outline:before {\n    content: \"\"; }\n  .ionic .ion-social-whatsapp:before {\n    content: \"\"; }\n  .ionic .ion-social-whatsapp-outline:before {\n    content: \"\"; }\n  .ionic .ion-social-windows:before {\n    content: \"\"; }\n  .ionic .ion-social-windows-outline:before {\n    content: \"\"; }\n  .ionic .ion-social-wordpress:before {\n    content: \"\"; }\n  .ionic .ion-social-wordpress-outline:before {\n    content: \"\"; }\n  .ionic .ion-social-yahoo:before {\n    content: \"\"; }\n  .ionic .ion-social-yahoo-outline:before {\n    content: \"\"; }\n  .ionic .ion-social-yen:before {\n    content: \"\"; }\n  .ionic .ion-social-yen-outline:before {\n    content: \"\"; }\n  .ionic .ion-social-youtube:before {\n    content: \"\"; }\n  .ionic .ion-social-youtube-outline:before {\n    content: \"\"; }\n  .ionic .ion-soup-can:before {\n    content: \"\"; }\n  .ionic .ion-soup-can-outline:before {\n    content: \"\"; }\n  .ionic .ion-speakerphone:before {\n    content: \"\"; }\n  .ionic .ion-speedometer:before {\n    content: \"\"; }\n  .ionic .ion-spoon:before {\n    content: \"\"; }\n  .ionic .ion-star:before {\n    content: \"\"; }\n  .ionic .ion-stats-bars:before {\n    content: \"\"; }\n  .ionic .ion-steam:before {\n    content: \"\"; }\n  .ionic .ion-stop:before {\n    content: \"\"; }\n  .ionic .ion-thermometer:before {\n    content: \"\"; }\n  .ionic .ion-thumbsdown:before {\n    content: \"\"; }\n  .ionic .ion-thumbsup:before {\n    content: \"\"; }\n  .ionic .ion-toggle:before {\n    content: \"\"; }\n  .ionic .ion-toggle-filled:before {\n    content: \"\"; }\n  .ionic .ion-transgender:before {\n    content: \"\"; }\n  .ionic .ion-trash-a:before {\n    content: \"\"; }\n  .ionic .ion-trash-b:before {\n    content: \"\"; }\n  .ionic .ion-trophy:before {\n    content: \"\"; }\n  .ionic .ion-tshirt:before {\n    content: \"\"; }\n  .ionic .ion-tshirt-outline:before {\n    content: \"\"; }\n  .ionic .ion-umbrella:before {\n    content: \"\"; }\n  .ionic .ion-university:before {\n    content: \"\"; }\n  .ionic .ion-unlocked:before {\n    content: \"\"; }\n  .ionic .ion-upload:before {\n    content: \"\"; }\n  .ionic .ion-usb:before {\n    content: \"\"; }\n  .ionic .ion-videocamera:before {\n    content: \"\"; }\n  .ionic .ion-volume-high:before {\n    content: \"\"; }\n  .ionic .ion-volume-low:before {\n    content: \"\"; }\n  .ionic .ion-volume-medium:before {\n    content: \"\"; }\n  .ionic .ion-volume-mute:before {\n    content: \"\"; }\n  .ionic .ion-wand:before {\n    content: \"\"; }\n  .ionic .ion-waterdrop:before {\n    content: \"\"; }\n  .ionic .ion-wifi:before {\n    content: \"\"; }\n  .ionic .ion-wineglass:before {\n    content: \"\"; }\n  .ionic .ion-woman:before {\n    content: \"\"; }\n  .ionic .ion-wrench:before {\n    content: \"\"; }\n  .ionic .ion-xbox:before {\n    content: \"\"; }\n  .ionic html, .ionic body, .ionic div, .ionic span, .ionic applet, .ionic object, .ionic iframe,\n  .ionic h1, .ionic h2, .ionic h3, .ionic h4, .ionic h5, .ionic h6, .ionic p, .ionic blockquote, .ionic pre,\n  .ionic a, .ionic abbr, .ionic acronym, .ionic address, .ionic big, .ionic cite, .ionic code,\n  .ionic del, .ionic dfn, .ionic em, .ionic img, .ionic ins, .ionic kbd, .ionic q, .ionic s, .ionic samp,\n  .ionic small, .ionic strike, .ionic strong, .ionic sub, .ionic sup, .ionic tt, .ionic var,\n  .ionic b, .ionic i, .ionic u, .ionic center,\n  .ionic dl, .ionic dt, .ionic dd, .ionic ol, .ionic ul, .ionic li,\n  .ionic fieldset, .ionic form, .ionic label, .ionic legend,\n  .ionic table, .ionic caption, .ionic tbody, .ionic tfoot, .ionic thead, .ionic tr, .ionic th, .ionic td,\n  .ionic article, .ionic aside, .ionic canvas, .ionic details, .ionic embed, .ionic fieldset,\n  .ionic figure, .ionic figcaption, .ionic footer, .ionic header, .ionic hgroup,\n  .ionic menu, .ionic nav, .ionic output, .ionic ruby, .ionic section, .ionic summary,\n  .ionic time, .ionic mark, .ionic audio, .ionic video {\n    margin: 0;\n    padding: 0;\n    border: 0;\n    vertical-align: baseline;\n    font: inherit;\n    font-size: 100%; }\n  .ionic ol, .ionic ul {\n    list-style: none; }\n  .ionic blockquote, .ionic q {\n    quotes: none; }\n  .ionic blockquote:before, .ionic blockquote:after,\n  .ionic q:before, .ionic q:after {\n    content: '';\n    content: none; }\n  .ionic audio:not([controls]) {\n    display: none;\n    height: 0; }\n  .ionic [hidden],\n  .ionic template {\n    display: none; }\n  .ionic script {\n    display: none !important; }\n  .ionic html {\n    -webkit-user-select: none;\n    -moz-user-select: none;\n    -ms-user-select: none;\n    user-select: none;\n    font-family: sans-serif;\n    /* 1 */\n    -webkit-text-size-adjust: 100%;\n    -ms-text-size-adjust: 100%;\n    /* 2 */\n    -webkit-text-size-adjust: 100%;\n    /* 2 */ }\n  .ionic body {\n    margin: 0;\n    line-height: 1; }\n  .ionic a,\n  .ionic button,\n  .ionic :focus,\n  .ionic a:focus,\n  .ionic button:focus,\n  .ionic a:active,\n  .ionic a:hover {\n    outline: 0; }\n  .ionic a {\n    -webkit-user-drag: none;\n    -webkit-tap-highlight-color: transparent;\n    -webkit-tap-highlight-color: transparent; }\n  .ionic a[href]:hover {\n    cursor: pointer; }\n  .ionic b,\n  .ionic strong {\n    font-weight: bold; }\n  .ionic dfn {\n    font-style: italic; }\n  .ionic hr {\n    box-sizing: content-box;\n    height: 0; }\n  .ionic code,\n  .ionic kbd,\n  .ionic pre,\n  .ionic samp {\n    font-size: 1em;\n    font-family: monospace, serif; }\n  .ionic pre {\n    white-space: pre-wrap; }\n  .ionic q {\n    quotes: \"\\201C\" \"\\201D\" \"\\2018\" \"\\2019\"; }\n  .ionic small {\n    font-size: 80%; }\n  .ionic sub,\n  .ionic sup {\n    position: relative;\n    vertical-align: baseline;\n    font-size: 75%;\n    line-height: 0; }\n  .ionic sup {\n    top: -0.5em; }\n  .ionic sub {\n    bottom: -0.25em; }\n  .ionic fieldset {\n    margin: 0 2px;\n    padding: 0.35em 0.625em 0.75em;\n    border: 1px solid #c0c0c0; }\n  .ionic legend {\n    padding: 0;\n    /* 2 */\n    border: 0;\n    /* 1 */ }\n  .ionic button,\n  .ionic input,\n  .ionic select,\n  .ionic textarea {\n    margin: 0;\n    /* 3 */\n    font-size: 100%;\n    /* 2 */\n    font-family: inherit;\n    /* 1 */\n    outline-offset: 0;\n    /* 4 */\n    outline-style: none;\n    /* 4 */\n    outline-width: 0;\n    /* 4 */\n    -webkit-font-smoothing: inherit;\n    /* 5 */\n    background-image: none;\n    /* 6 */ }\n  .ionic button,\n  .ionic input {\n    line-height: normal; }\n  .ionic button,\n  .ionic select {\n    text-transform: none; }\n  .ionic button,\n  .ionic html input[type=\"button\"], .ionic input[type=\"reset\"],\n  .ionic input[type=\"submit\"] {\n    cursor: pointer;\n    /* 3 */\n    -webkit-appearance: button;\n    /* 2 */ }\n  .ionic button[disabled],\n  .ionic html input[disabled] {\n    cursor: default; }\n  .ionic input[type=\"search\"] {\n    /* 2 */\n    box-sizing: content-box;\n    -webkit-appearance: textfield;\n    /* 1 */ }\n  .ionic input[type=\"search\"]::-webkit-search-cancel-button,\n  .ionic input[type=\"search\"]::-webkit-search-decoration {\n    -webkit-appearance: none; }\n  .ionic button::-moz-focus-inner,\n  .ionic input::-moz-focus-inner {\n    padding: 0;\n    border: 0; }\n  .ionic textarea {\n    overflow: auto;\n    /* 1 */\n    vertical-align: top;\n    /* 2 */ }\n  .ionic img {\n    -webkit-user-drag: none; }\n  .ionic table {\n    border-spacing: 0;\n    border-collapse: collapse; }\n  .ionic *,\n  .ionic *:before,\n  .ionic *:after {\n    box-sizing: border-box; }\n  .ionic html {\n    overflow: hidden;\n    -ms-touch-action: pan-y;\n    touch-action: pan-y; }\n  .ionic body,\n  .ionic .ionic-body {\n    -webkit-touch-callout: none;\n    -webkit-font-smoothing: antialiased;\n    font-smoothing: antialiased;\n    -webkit-text-size-adjust: none;\n    text-size-adjust: none;\n    -webkit-tap-highlight-color: transparent;\n    -webkit-tap-highlight-color: transparent;\n    -webkit-user-select: none;\n    -moz-user-select: none;\n    -ms-user-select: none;\n    user-select: none;\n    top: 0;\n    right: 0;\n    bottom: 0;\n    left: 0;\n    overflow: hidden;\n    margin: 0;\n    padding: 0;\n    color: #000;\n    word-wrap: break-word;\n    font-size: 14px;\n    font-family: \"Helvetica Neue\", \"Roboto\", \"Segoe UI\", sans-serif;\n    line-height: 20px;\n    text-rendering: optimizeLegibility;\n    -webkit-backface-visibility: hidden;\n    -webkit-user-drag: none;\n    -ms-content-zooming: none; }\n  .ionic body.grade-b,\n  .ionic body.grade-c {\n    text-rendering: auto; }\n  .ionic .content {\n    position: relative; }\n  .ionic .scroll-content {\n    position: absolute;\n    top: 0;\n    right: 0;\n    bottom: 0;\n    left: 0;\n    overflow: hidden;\n    margin-top: -1px;\n    padding-top: 1px;\n    margin-bottom: -1px;\n    width: auto;\n    height: auto; }\n  .ionic .menu .scroll-content.scroll-content-false {\n    z-index: 11; }\n  .ionic .scroll-view {\n    position: relative;\n    display: block;\n    overflow: hidden;\n    margin-top: -1px; }\n  .ionic .scroll {\n    -webkit-user-select: none;\n    -moz-user-select: none;\n    -ms-user-select: none;\n    user-select: none;\n    -webkit-touch-callout: none;\n    -webkit-text-size-adjust: none;\n    text-size-adjust: none;\n    -webkit-transform-origin: left top;\n    transform-origin: left top; }\n  .ionic .scroll-bar {\n    position: absolute;\n    z-index: 9999; }\n  .ionic .ng-animate .scroll-bar {\n    visibility: hidden; }\n  .ionic .scroll-bar-h {\n    right: 2px;\n    bottom: 3px;\n    left: 2px;\n    height: 3px; }\n  .ionic .scroll-bar-h .scroll-bar-indicator {\n    height: 100%; }\n  .ionic .scroll-bar-v {\n    top: 2px;\n    right: 3px;\n    bottom: 2px;\n    width: 3px; }\n  .ionic .scroll-bar-v .scroll-bar-indicator {\n    width: 100%; }\n  .ionic .scroll-bar-indicator {\n    position: absolute;\n    border-radius: 4px;\n    background: rgba(0, 0, 0, 0.3);\n    opacity: 1;\n    transition: opacity 0.3s linear; }\n  .ionic .scroll-bar-indicator.scroll-bar-fade-out {\n    opacity: 0; }\n  .ionic .platform-android .scroll-bar-indicator {\n    border-radius: 0; }\n  .ionic .grade-b .scroll-bar-indicator,\n  .ionic .grade-c .scroll-bar-indicator {\n    background: #aaa; }\n  .ionic .grade-b .scroll-bar-indicator.scroll-bar-fade-out,\n  .ionic .grade-c .scroll-bar-indicator.scroll-bar-fade-out {\n    transition: none; }\n  .ionic ion-infinite-scroll {\n    height: 60px;\n    width: 100%;\n    display: block;\n    display: -moz-flex;\n    display: -ms-flexbox;\n    display: flex;\n    -moz-flex-direction: row;\n    -ms-flex-direction: row;\n    flex-direction: row;\n    -ms-flex-pack: center;\n    -moz-justify-content: center;\n    justify-content: center;\n    -ms-flex-align: center;\n    -moz-align-items: center;\n    align-items: center; }\n  .ionic ion-infinite-scroll .icon {\n    color: #666666;\n    font-size: 30px;\n    color: #666666; }\n  .ionic ion-infinite-scroll:not(.active) .spinner,\n  .ionic ion-infinite-scroll:not(.active) .icon:before {\n    display: none; }\n  .ionic .overflow-scroll {\n    overflow-x: hidden;\n    overflow-y: scroll;\n    -webkit-overflow-scrolling: touch;\n    top: 0;\n    right: 0;\n    bottom: 0;\n    left: 0;\n    position: absolute; }\n  .ionic .overflow-scroll .scroll {\n    position: static;\n    height: 100%;\n    -webkit-transform: translate3d(0, 0, 0); }\n  .ionic .has-header {\n    top: 44px; }\n  .ionic .no-header {\n    top: 0; }\n  .ionic .has-subheader {\n    top: 88px; }\n  .ionic .has-tabs-top {\n    top: 93px; }\n  .ionic .has-header.has-subheader.has-tabs-top {\n    top: 137px; }\n  .ionic .has-footer {\n    bottom: 44px; }\n  .ionic .has-subfooter {\n    bottom: 88px; }\n  .ionic .has-tabs,\n  .ionic .bar-footer.has-tabs {\n    bottom: 49px; }\n  .ionic .has-tabs.pane,\n  .ionic .bar-footer.has-tabs.pane {\n    bottom: 49px;\n    height: auto; }\n  .ionic .has-footer.has-tabs {\n    bottom: 93px; }\n  .ionic .pane {\n    -webkit-transform: translate3d(0, 0, 0);\n    transform: translate3d(0, 0, 0);\n    transition-duration: 0;\n    z-index: 1; }\n  .ionic .view {\n    z-index: 1; }\n  .ionic .pane,\n  .ionic .view {\n    position: absolute;\n    top: 0;\n    right: 0;\n    bottom: 0;\n    left: 0;\n    width: 100%;\n    height: 100%;\n    background-color: #fff;\n    overflow: hidden; }\n  .ionic .view-container {\n    position: absolute;\n    display: block;\n    width: 100%;\n    height: 100%; }\n  .ionic p {\n    margin: 0 0 10px; }\n  .ionic small {\n    font-size: 85%; }\n  .ionic cite {\n    font-style: normal; }\n  .ionic .text-left {\n    text-align: left; }\n  .ionic .text-right {\n    text-align: right; }\n  .ionic .text-center {\n    text-align: center; }\n  .ionic h1, .ionic h2, .ionic h3, .ionic h4, .ionic h5, .ionic h6,\n  .ionic .h1, .ionic .h2, .ionic .h3, .ionic .h4, .ionic .h5, .ionic .h6 {\n    color: #000;\n    font-weight: 500;\n    font-family: \"Helvetica Neue\", \"Roboto\", \"Segoe UI\", sans-serif;\n    line-height: 1.2; }\n  .ionic h1 small, .ionic h2 small, .ionic h3 small, .ionic h4 small, .ionic h5 small, .ionic h6 small,\n  .ionic .h1 small, .ionic .h2 small, .ionic .h3 small, .ionic .h4 small, .ionic .h5 small, .ionic .h6 small {\n    font-weight: normal;\n    line-height: 1; }\n  .ionic h1, .ionic .h1,\n  .ionic h2, .ionic .h2,\n  .ionic h3, .ionic .h3 {\n    margin-top: 20px;\n    margin-bottom: 10px; }\n  .ionic h1:first-child, .ionic .h1:first-child,\n  .ionic h2:first-child, .ionic .h2:first-child,\n  .ionic h3:first-child, .ionic .h3:first-child {\n    margin-top: 0; }\n  .ionic h1 + h1, .ionic h1 + .h1,\n  .ionic h1 + h2, .ionic h1 + .h2,\n  .ionic h1 + h3, .ionic h1 + .h3, .ionic .h1 + h1,\n  .ionic .h1 + .h1,\n  .ionic .h1 + h2,\n  .ionic .h1 + .h2,\n  .ionic .h1 + h3,\n  .ionic .h1 + .h3,\n  .ionic h2 + h1, .ionic h2 + .h1,\n  .ionic h2 + h2, .ionic h2 + .h2,\n  .ionic h2 + h3, .ionic h2 + .h3, .ionic .h2 + h1,\n  .ionic .h2 + .h1,\n  .ionic .h2 + h2,\n  .ionic .h2 + .h2,\n  .ionic .h2 + h3,\n  .ionic .h2 + .h3,\n  .ionic h3 + h1, .ionic h3 + .h1,\n  .ionic h3 + h2, .ionic h3 + .h2,\n  .ionic h3 + h3, .ionic h3 + .h3, .ionic .h3 + h1, .ionic .h3 + .h1,\n  .ionic .h3 + h2, .ionic .h3 + .h2,\n  .ionic .h3 + h3, .ionic .h3 + .h3 {\n    margin-top: 10px; }\n  .ionic h4, .ionic .h4,\n  .ionic h5, .ionic .h5,\n  .ionic h6, .ionic .h6 {\n    margin-top: 10px;\n    margin-bottom: 10px; }\n  .ionic h1, .ionic .h1 {\n    font-size: 36px; }\n  .ionic h2, .ionic .h2 {\n    font-size: 30px; }\n  .ionic h3, .ionic .h3 {\n    font-size: 24px; }\n  .ionic h4, .ionic .h4 {\n    font-size: 18px; }\n  .ionic h5, .ionic .h5 {\n    font-size: 14px; }\n  .ionic h6, .ionic .h6 {\n    font-size: 12px; }\n  .ionic h1 small, .ionic .h1 small {\n    font-size: 24px; }\n  .ionic h2 small, .ionic .h2 small {\n    font-size: 18px; }\n  .ionic h3 small, .ionic .h3 small,\n  .ionic h4 small, .ionic .h4 small {\n    font-size: 14px; }\n  .ionic dl {\n    margin-bottom: 20px; }\n  .ionic dt,\n  .ionic dd {\n    line-height: 1.42857; }\n  .ionic dt {\n    font-weight: bold; }\n  .ionic blockquote {\n    margin: 0 0 20px;\n    padding: 10px 20px;\n    border-left: 5px solid gray; }\n  .ionic blockquote p {\n    font-weight: 300;\n    font-size: 17.5px;\n    line-height: 1.25; }\n  .ionic blockquote p:last-child {\n    margin-bottom: 0; }\n  .ionic blockquote small {\n    display: block;\n    line-height: 1.42857; }\n  .ionic blockquote small:before {\n    content: '\\2014 \\00A0'; }\n  .ionic q:before,\n  .ionic q:after,\n  .ionic blockquote:before,\n  .ionic blockquote:after {\n    content: \"\"; }\n  .ionic address {\n    display: block;\n    margin-bottom: 20px;\n    font-style: normal;\n    line-height: 1.42857; }\n  .ionic a.subdued {\n    padding-right: 10px;\n    color: #888;\n    text-decoration: none; }\n  .ionic a.subdued:hover {\n    text-decoration: none; }\n  .ionic a.subdued:last-child {\n    padding-right: 0; }\n  .ionic .action-sheet-backdrop {\n    transition: background-color 150ms ease-in-out;\n    position: fixed;\n    top: 0;\n    left: 0;\n    z-index: 11;\n    width: 100%;\n    height: 100%;\n    background-color: transparent; }\n  .ionic .action-sheet-backdrop.active {\n    background-color: rgba(0, 0, 0, 0.4); }\n  .ionic .action-sheet-wrapper {\n    -webkit-transform: translate3d(0, 100%, 0);\n    transform: translate3d(0, 100%, 0);\n    transition: all cubic-bezier(0.36, 0.66, 0.04, 1) 500ms;\n    position: absolute;\n    bottom: 0;\n    left: 0;\n    right: 0;\n    width: 100%;\n    max-width: 500px;\n    margin: auto; }\n  .ionic .action-sheet-up {\n    -webkit-transform: translate3d(0, 0, 0);\n    transform: translate3d(0, 0, 0); }\n  .ionic .action-sheet {\n    margin-left: 8px;\n    margin-right: 8px;\n    width: auto;\n    z-index: 11;\n    overflow: hidden; }\n  .ionic .action-sheet .button {\n    display: block;\n    padding: 1px;\n    width: 100%;\n    border-radius: 0;\n    border-color: #d1d3d6;\n    background-color: transparent;\n    color: #007aff;\n    font-size: 21px; }\n  .ionic .action-sheet .button:hover {\n    color: #007aff; }\n  .ionic .action-sheet .button.destructive {\n    color: #ff3b30; }\n  .ionic .action-sheet .button.destructive:hover {\n    color: #ff3b30; }\n  .ionic .action-sheet .button.active, .ionic .action-sheet .button.activated {\n    box-shadow: none;\n    border-color: #d1d3d6;\n    color: #007aff;\n    background: #e4e5e7; }\n  .ionic .action-sheet-has-icons .icon {\n    position: absolute;\n    left: 16px; }\n  .ionic .action-sheet-title {\n    padding: 16px;\n    color: #8f8f8f;\n    text-align: center;\n    font-size: 13px; }\n  .ionic .action-sheet-group {\n    margin-bottom: 8px;\n    border-radius: 4px;\n    background-color: #fff;\n    overflow: hidden; }\n  .ionic .action-sheet-group .button {\n    border-width: 1px 0px 0px 0px; }\n  .ionic .action-sheet-group .button:first-child:last-child {\n    border-width: 0; }\n  .ionic .action-sheet-options {\n    background: #f1f2f3; }\n  .ionic .action-sheet-cancel .button {\n    font-weight: 500; }\n  .ionic .action-sheet-open {\n    pointer-events: none; }\n  .ionic .action-sheet-open.modal-open .modal {\n    pointer-events: none; }\n  .ionic .action-sheet-open .action-sheet-backdrop {\n    pointer-events: auto; }\n  .ionic .platform-android .action-sheet-backdrop.active {\n    background-color: rgba(0, 0, 0, 0.2); }\n  .ionic .platform-android .action-sheet {\n    margin: 0; }\n  .ionic .platform-android .action-sheet .action-sheet-title,\n  .ionic .platform-android .action-sheet .button {\n    text-align: left;\n    border-color: transparent;\n    font-size: 16px;\n    color: inherit; }\n  .ionic .platform-android .action-sheet .action-sheet-title {\n    font-size: 14px;\n    padding: 16px;\n    color: #666; }\n  .ionic .platform-android .action-sheet .button.active,\n  .ionic .platform-android .action-sheet .button.activated {\n    background: #e8e8e8; }\n  .ionic .platform-android .action-sheet-group {\n    margin: 0;\n    border-radius: 0;\n    background-color: #fafafa; }\n  .ionic .platform-android .action-sheet-cancel {\n    display: none; }\n  .ionic .platform-android .action-sheet-has-icons .button {\n    padding-left: 56px; }\n  .ionic .backdrop {\n    position: fixed;\n    top: 0;\n    left: 0;\n    z-index: 11;\n    width: 100%;\n    height: 100%;\n    background-color: rgba(0, 0, 0, 0.4);\n    visibility: hidden;\n    opacity: 0;\n    transition: 0.1s opacity linear; }\n  .ionic .backdrop.visible {\n    visibility: visible; }\n  .ionic .backdrop.active {\n    opacity: 1; }\n  .ionic .bar {\n    display: -moz-flex;\n    display: -ms-flexbox;\n    display: flex;\n    -webkit-transform: translate3d(0, 0, 0);\n    transform: translate3d(0, 0, 0);\n    -webkit-user-select: none;\n    -moz-user-select: none;\n    -ms-user-select: none;\n    user-select: none;\n    position: absolute;\n    right: 0;\n    left: 0;\n    z-index: 9;\n    box-sizing: border-box;\n    padding: 5px;\n    width: 100%;\n    height: 44px;\n    border-width: 0;\n    border-style: solid;\n    border-top: 1px solid transparent;\n    border-bottom: 1px solid #ddd;\n    background-color: white;\n    /* border-width: 1px will actually create 2 device pixels on retina */\n    /* this nifty trick sets an actual 1px border on hi-res displays */\n    background-size: 0; }\n  @media (min--moz-device-pixel-ratio: 1.5), (-webkit-min-device-pixel-ratio: 1.5), (min-device-pixel-ratio: 1.5), (min-resolution: 144dpi), (min-resolution: 1.5dppx) {\n    .ionic .bar {\n      border: none;\n      background-image: linear-gradient(0deg, #ddd, #ddd 50%, transparent 50%);\n      background-position: bottom;\n      background-size: 100% 1px;\n      background-repeat: no-repeat; } }\n  .ionic .bar.bar-clear {\n    border: none;\n    background: none;\n    color: #fff; }\n  .ionic .bar.bar-clear .button {\n    color: #fff; }\n  .ionic .bar.bar-clear .title {\n    color: #fff; }\n  .ionic .bar.item-input-inset .item-input-wrapper {\n    margin-top: -1px; }\n  .ionic .bar.item-input-inset .item-input-wrapper input {\n    padding-left: 8px;\n    width: 94%;\n    height: 28px;\n    background: transparent; }\n  .ionic .bar.bar-light {\n    border-color: #ddd;\n    background-color: white;\n    background-image: linear-gradient(0deg, #ddd, #ddd 50%, transparent 50%);\n    color: #444; }\n  .ionic .bar.bar-light .title {\n    color: #444; }\n  .ionic .bar.bar-light.bar-footer {\n    background-image: linear-gradient(180deg, #ddd, #ddd 50%, transparent 50%); }\n  .ionic .bar.bar-stable {\n    border-color: #b2b2b2;\n    background-color: #f8f8f8;\n    background-image: linear-gradient(0deg, #b2b2b2, #b2b2b2 50%, transparent 50%);\n    color: #444; }\n  .ionic .bar.bar-stable .title {\n    color: #444; }\n  .ionic .bar.bar-stable.bar-footer {\n    background-image: linear-gradient(180deg, #b2b2b2, #b2b2b2 50%, transparent 50%); }\n  .ionic .bar.bar-positive {\n    border-color: #0c60ee;\n    background-color: #387ef5;\n    background-image: linear-gradient(0deg, #0c60ee, #0c60ee 50%, transparent 50%);\n    color: #fff; }\n  .ionic .bar.bar-positive .title {\n    color: #fff; }\n  .ionic .bar.bar-positive.bar-footer {\n    background-image: linear-gradient(180deg, #0c60ee, #0c60ee 50%, transparent 50%); }\n  .ionic .bar.bar-calm {\n    border-color: #0a9dc7;\n    background-color: #11c1f3;\n    background-image: linear-gradient(0deg, #0a9dc7, #0a9dc7 50%, transparent 50%);\n    color: #fff; }\n  .ionic .bar.bar-calm .title {\n    color: #fff; }\n  .ionic .bar.bar-calm.bar-footer {\n    background-image: linear-gradient(180deg, #0a9dc7, #0a9dc7 50%, transparent 50%); }\n  .ionic .bar.bar-assertive {\n    border-color: #e42112;\n    background-color: #ef473a;\n    background-image: linear-gradient(0deg, #e42112, #e42112 50%, transparent 50%);\n    color: #fff; }\n  .ionic .bar.bar-assertive .title {\n    color: #fff; }\n  .ionic .bar.bar-assertive.bar-footer {\n    background-image: linear-gradient(180deg, #e42112, #e42112 50%, transparent 50%); }\n  .ionic .bar.bar-balanced {\n    border-color: #28a54c;\n    background-color: #33cd5f;\n    background-image: linear-gradient(0deg, #28a54c, #28a54c 50%, transparent 50%);\n    color: #fff; }\n  .ionic .bar.bar-balanced .title {\n    color: #fff; }\n  .ionic .bar.bar-balanced.bar-footer {\n    background-image: linear-gradient(180deg, #28a54c, #0c60ee 50%, transparent 50%); }\n  .ionic .bar.bar-energized {\n    border-color: #e6b500;\n    background-color: #ffc900;\n    background-image: linear-gradient(0deg, #e6b500, #e6b500 50%, transparent 50%);\n    color: #fff; }\n  .ionic .bar.bar-energized .title {\n    color: #fff; }\n  .ionic .bar.bar-energized.bar-footer {\n    background-image: linear-gradient(180deg, #e6b500, #e6b500 50%, transparent 50%); }\n  .ionic .bar.bar-royal {\n    border-color: #6b46e5;\n    background-color: #886aea;\n    background-image: linear-gradient(0deg, #6b46e5, #6b46e5 50%, transparent 50%);\n    color: #fff; }\n  .ionic .bar.bar-royal .title {\n    color: #fff; }\n  .ionic .bar.bar-royal.bar-footer {\n    background-image: linear-gradient(180deg, #6b46e5, #6b46e5 50%, transparent 50%); }\n  .ionic .bar.bar-dark {\n    border-color: #111;\n    background-color: #444444;\n    background-image: linear-gradient(0deg, #111, #111 50%, transparent 50%);\n    color: #fff; }\n  .ionic .bar.bar-dark .title {\n    color: #fff; }\n  .ionic .bar.bar-dark.bar-footer {\n    background-image: linear-gradient(180deg, #111, #111 50%, transparent 50%); }\n  .ionic .bar .title {\n    position: absolute;\n    top: 0;\n    right: 0;\n    left: 0;\n    z-index: 0;\n    overflow: hidden;\n    margin: 0 10px;\n    min-width: 30px;\n    height: 43px;\n    text-align: center;\n    text-overflow: ellipsis;\n    white-space: nowrap;\n    font-size: 17px;\n    font-weight: 500;\n    line-height: 44px; }\n  .ionic .bar .title.title-left {\n    text-align: left; }\n  .ionic .bar .title.title-right {\n    text-align: right; }\n  .ionic .bar .title a {\n    color: inherit; }\n  .ionic .bar .button {\n    z-index: 1;\n    padding: 0 8px;\n    min-width: initial;\n    min-height: 31px;\n    font-weight: 400;\n    font-size: 13px;\n    line-height: 32px; }\n  .ionic .bar .button.button-icon:before,\n  .ionic .bar .button .icon:before,\n  .ionic .bar .button.icon:before,\n  .ionic .bar .button.icon-left:before,\n  .ionic .bar .button.icon-right:before {\n    padding-right: 2px;\n    padding-left: 2px;\n    font-size: 20px;\n    line-height: 32px; }\n  .ionic .bar .button.button-icon {\n    font-size: 17px; }\n  .ionic .bar .button.button-icon .icon:before,\n  .ionic .bar .button.button-icon:before,\n  .ionic .bar .button.button-icon.icon-left:before,\n  .ionic .bar .button.button-icon.icon-right:before {\n    vertical-align: top;\n    font-size: 32px;\n    line-height: 32px; }\n  .ionic .bar .button.button-clear {\n    padding-right: 2px;\n    padding-left: 2px;\n    font-weight: 300;\n    font-size: 17px; }\n  .ionic .bar .button.button-clear .icon:before,\n  .ionic .bar .button.button-clear.icon:before,\n  .ionic .bar .button.button-clear.icon-left:before,\n  .ionic .bar .button.button-clear.icon-right:before {\n    font-size: 32px;\n    line-height: 32px; }\n  .ionic .bar .button.back-button {\n    display: block;\n    margin-right: 5px;\n    padding: 0;\n    white-space: nowrap;\n    font-weight: 400; }\n  .ionic .bar .button.back-button.active,\n  .ionic .bar .button.back-button.activated {\n    opacity: 0.2; }\n  .ionic .bar .button-bar > .button,\n  .ionic .bar .buttons > .button {\n    min-height: 31px;\n    line-height: 32px; }\n  .ionic .bar .button-bar + .button,\n  .ionic .bar .button + .button-bar {\n    margin-left: 5px; }\n  .ionic .bar .buttons,\n  .ionic .bar .buttons.primary-buttons,\n  .ionic .bar .buttons.secondary-buttons {\n    display: inherit; }\n  .ionic .bar .buttons span {\n    display: inline-block; }\n  .ionic .bar .buttons-left span {\n    margin-right: 5px;\n    display: inherit; }\n  .ionic .bar .buttons-right span {\n    margin-left: 5px;\n    display: inherit; }\n  .ionic .bar .title + .button:last-child,\n  .ionic .bar > .button + .button:last-child,\n  .ionic .bar > .button.pull-right,\n  .ionic .bar .buttons.pull-right,\n  .ionic .bar .title + .buttons {\n    position: absolute;\n    top: 5px;\n    right: 5px;\n    bottom: 5px; }\n  .ionic .platform-android .nav-bar-has-subheader .bar {\n    background-image: none; }\n  .ionic .platform-android .bar .back-button .icon:before {\n    font-size: 24px; }\n  .ionic .platform-android .bar .title {\n    font-size: 19px;\n    line-height: 44px; }\n  .ionic .bar-light .button {\n    border-color: #ddd;\n    background-color: white;\n    color: #444; }\n  .ionic .bar-light .button:hover {\n    color: #444;\n    text-decoration: none; }\n  .ionic .bar-light .button.active,\n  .ionic .bar-light .button.activated {\n    border-color: #ccc;\n    background-color: #fafafa;\n    box-shadow: inset 0 1px 4px rgba(0, 0, 0, 0.1); }\n  .ionic .bar-light .button.button-clear {\n    border-color: transparent;\n    background: none;\n    box-shadow: none;\n    color: #444;\n    font-size: 17px; }\n  .ionic .bar-light .button.button-icon {\n    border-color: transparent;\n    background: none; }\n  .ionic .bar-stable .button {\n    border-color: #b2b2b2;\n    background-color: #f8f8f8;\n    color: #444; }\n  .ionic .bar-stable .button:hover {\n    color: #444;\n    text-decoration: none; }\n  .ionic .bar-stable .button.active,\n  .ionic .bar-stable .button.activated {\n    border-color: #a2a2a2;\n    background-color: #e5e5e5;\n    box-shadow: inset 0 1px 4px rgba(0, 0, 0, 0.1); }\n  .ionic .bar-stable .button.button-clear {\n    border-color: transparent;\n    background: none;\n    box-shadow: none;\n    color: #444;\n    font-size: 17px; }\n  .ionic .bar-stable .button.button-icon {\n    border-color: transparent;\n    background: none; }\n  .ionic .bar-positive .button {\n    border-color: #0c60ee;\n    background-color: #387ef5;\n    color: #fff; }\n  .ionic .bar-positive .button:hover {\n    color: #fff;\n    text-decoration: none; }\n  .ionic .bar-positive .button.active,\n  .ionic .bar-positive .button.activated {\n    border-color: #0c60ee;\n    background-color: #0c60ee;\n    box-shadow: inset 0 1px 4px rgba(0, 0, 0, 0.1); }\n  .ionic .bar-positive .button.button-clear {\n    border-color: transparent;\n    background: none;\n    box-shadow: none;\n    color: #fff;\n    font-size: 17px; }\n  .ionic .bar-positive .button.button-icon {\n    border-color: transparent;\n    background: none; }\n  .ionic .bar-calm .button {\n    border-color: #0a9dc7;\n    background-color: #11c1f3;\n    color: #fff; }\n  .ionic .bar-calm .button:hover {\n    color: #fff;\n    text-decoration: none; }\n  .ionic .bar-calm .button.active,\n  .ionic .bar-calm .button.activated {\n    border-color: #0a9dc7;\n    background-color: #0a9dc7;\n    box-shadow: inset 0 1px 4px rgba(0, 0, 0, 0.1); }\n  .ionic .bar-calm .button.button-clear {\n    border-color: transparent;\n    background: none;\n    box-shadow: none;\n    color: #fff;\n    font-size: 17px; }\n  .ionic .bar-calm .button.button-icon {\n    border-color: transparent;\n    background: none; }\n  .ionic .bar-assertive .button {\n    border-color: #e42112;\n    background-color: #ef473a;\n    color: #fff; }\n  .ionic .bar-assertive .button:hover {\n    color: #fff;\n    text-decoration: none; }\n  .ionic .bar-assertive .button.active,\n  .ionic .bar-assertive .button.activated {\n    border-color: #e42112;\n    background-color: #e42112;\n    box-shadow: inset 0 1px 4px rgba(0, 0, 0, 0.1); }\n  .ionic .bar-assertive .button.button-clear {\n    border-color: transparent;\n    background: none;\n    box-shadow: none;\n    color: #fff;\n    font-size: 17px; }\n  .ionic .bar-assertive .button.button-icon {\n    border-color: transparent;\n    background: none; }\n  .ionic .bar-balanced .button {\n    border-color: #28a54c;\n    background-color: #33cd5f;\n    color: #fff; }\n  .ionic .bar-balanced .button:hover {\n    color: #fff;\n    text-decoration: none; }\n  .ionic .bar-balanced .button.active,\n  .ionic .bar-balanced .button.activated {\n    border-color: #28a54c;\n    background-color: #28a54c;\n    box-shadow: inset 0 1px 4px rgba(0, 0, 0, 0.1); }\n  .ionic .bar-balanced .button.button-clear {\n    border-color: transparent;\n    background: none;\n    box-shadow: none;\n    color: #fff;\n    font-size: 17px; }\n  .ionic .bar-balanced .button.button-icon {\n    border-color: transparent;\n    background: none; }\n  .ionic .bar-energized .button {\n    border-color: #e6b500;\n    background-color: #ffc900;\n    color: #fff; }\n  .ionic .bar-energized .button:hover {\n    color: #fff;\n    text-decoration: none; }\n  .ionic .bar-energized .button.active,\n  .ionic .bar-energized .button.activated {\n    border-color: #e6b500;\n    background-color: #e6b500;\n    box-shadow: inset 0 1px 4px rgba(0, 0, 0, 0.1); }\n  .ionic .bar-energized .button.button-clear {\n    border-color: transparent;\n    background: none;\n    box-shadow: none;\n    color: #fff;\n    font-size: 17px; }\n  .ionic .bar-energized .button.button-icon {\n    border-color: transparent;\n    background: none; }\n  .ionic .bar-royal .button {\n    border-color: #6b46e5;\n    background-color: #886aea;\n    color: #fff; }\n  .ionic .bar-royal .button:hover {\n    color: #fff;\n    text-decoration: none; }\n  .ionic .bar-royal .button.active,\n  .ionic .bar-royal .button.activated {\n    border-color: #6b46e5;\n    background-color: #6b46e5;\n    box-shadow: inset 0 1px 4px rgba(0, 0, 0, 0.1); }\n  .ionic .bar-royal .button.button-clear {\n    border-color: transparent;\n    background: none;\n    box-shadow: none;\n    color: #fff;\n    font-size: 17px; }\n  .ionic .bar-royal .button.button-icon {\n    border-color: transparent;\n    background: none; }\n  .ionic .bar-dark .button {\n    border-color: #111;\n    background-color: #444444;\n    color: #fff; }\n  .ionic .bar-dark .button:hover {\n    color: #fff;\n    text-decoration: none; }\n  .ionic .bar-dark .button.active,\n  .ionic .bar-dark .button.activated {\n    border-color: #000;\n    background-color: #262626;\n    box-shadow: inset 0 1px 4px rgba(0, 0, 0, 0.1); }\n  .ionic .bar-dark .button.button-clear {\n    border-color: transparent;\n    background: none;\n    box-shadow: none;\n    color: #fff;\n    font-size: 17px; }\n  .ionic .bar-dark .button.button-icon {\n    border-color: transparent;\n    background: none; }\n  .ionic .bar-header {\n    top: 0;\n    border-top-width: 0;\n    border-bottom-width: 1px; }\n  .ionic .bar-header.has-tabs-top {\n    border-bottom-width: 0px;\n    background-image: none; }\n  .ionic .tabs-top .bar-header {\n    border-bottom-width: 0px;\n    background-image: none; }\n  .ionic .bar-footer {\n    bottom: 0;\n    border-top-width: 1px;\n    border-bottom-width: 0;\n    background-position: top;\n    height: 44px; }\n  .ionic .bar-footer.item-input-inset {\n    position: absolute; }\n  .ionic .bar-tabs {\n    padding: 0; }\n  .ionic .bar-subheader {\n    top: 44px;\n    display: block;\n    height: 44px; }\n  .ionic .bar-subfooter {\n    bottom: 44px;\n    display: block;\n    height: 44px; }\n  .ionic .nav-bar-block {\n    position: absolute;\n    top: 0;\n    right: 0;\n    left: 0;\n    z-index: 9; }\n  .ionic .bar .back-button.hide,\n  .ionic .bar .buttons .hide {\n    display: none; }\n  .ionic .nav-bar-tabs-top .bar {\n    background-image: none; }\n  .ionic .tabs {\n    display: -moz-flex;\n    display: -ms-flexbox;\n    display: flex;\n    -moz-flex-direction: horizontal;\n    -ms-flex-direction: horizontal;\n    flex-direction: horizontal;\n    -ms-flex-pack: center;\n    -moz-justify-content: center;\n    justify-content: center;\n    -webkit-transform: translate3d(0, 0, 0);\n    transform: translate3d(0, 0, 0);\n    border-color: #b2b2b2;\n    background-color: #f8f8f8;\n    background-image: linear-gradient(0deg, #b2b2b2, #b2b2b2 50%, transparent 50%);\n    color: #444;\n    position: absolute;\n    bottom: 0;\n    z-index: 5;\n    width: 100%;\n    height: 49px;\n    border-style: solid;\n    border-top-width: 1px;\n    background-size: 0;\n    line-height: 49px; }\n  .ionic .tabs .tab-item .badge {\n    background-color: #444;\n    color: #f8f8f8; }\n  @media (min--moz-device-pixel-ratio: 1.5), (-webkit-min-device-pixel-ratio: 1.5), (min-device-pixel-ratio: 1.5), (min-resolution: 144dpi), (min-resolution: 1.5dppx) {\n    .ionic .tabs {\n      padding-top: 2px;\n      border-top: none !important;\n      border-bottom: none;\n      background-position: top;\n      background-size: 100% 1px;\n      background-repeat: no-repeat; } }\n  .ionic .tabs-light > .tabs,\n  .ionic .tabs.tabs-light {\n    border-color: #ddd;\n    background-color: #fff;\n    background-image: linear-gradient(0deg, #ddd, #ddd 50%, transparent 50%);\n    color: #444; }\n  .ionic .tabs-light > .tabs .tab-item .badge,\n  .ionic .tabs.tabs-light .tab-item .badge {\n    background-color: #444;\n    color: #fff; }\n  .ionic .tabs-stable > .tabs,\n  .ionic .tabs.tabs-stable {\n    border-color: #b2b2b2;\n    background-color: #f8f8f8;\n    background-image: linear-gradient(0deg, #b2b2b2, #b2b2b2 50%, transparent 50%);\n    color: #444; }\n  .ionic .tabs-stable > .tabs .tab-item .badge,\n  .ionic .tabs.tabs-stable .tab-item .badge {\n    background-color: #444;\n    color: #f8f8f8; }\n  .ionic .tabs-positive > .tabs,\n  .ionic .tabs.tabs-positive {\n    border-color: #0c60ee;\n    background-color: #387ef5;\n    background-image: linear-gradient(0deg, #0c60ee, #0c60ee 50%, transparent 50%);\n    color: #fff; }\n  .ionic .tabs-positive > .tabs .tab-item .badge,\n  .ionic .tabs.tabs-positive .tab-item .badge {\n    background-color: #fff;\n    color: #387ef5; }\n  .ionic .tabs-calm > .tabs,\n  .ionic .tabs.tabs-calm {\n    border-color: #0a9dc7;\n    background-color: #11c1f3;\n    background-image: linear-gradient(0deg, #0a9dc7, #0a9dc7 50%, transparent 50%);\n    color: #fff; }\n  .ionic .tabs-calm > .tabs .tab-item .badge,\n  .ionic .tabs.tabs-calm .tab-item .badge {\n    background-color: #fff;\n    color: #11c1f3; }\n  .ionic .tabs-assertive > .tabs,\n  .ionic .tabs.tabs-assertive {\n    border-color: #e42112;\n    background-color: #ef473a;\n    background-image: linear-gradient(0deg, #e42112, #e42112 50%, transparent 50%);\n    color: #fff; }\n  .ionic .tabs-assertive > .tabs .tab-item .badge,\n  .ionic .tabs.tabs-assertive .tab-item .badge {\n    background-color: #fff;\n    color: #ef473a; }\n  .ionic .tabs-balanced > .tabs,\n  .ionic .tabs.tabs-balanced {\n    border-color: #28a54c;\n    background-color: #33cd5f;\n    background-image: linear-gradient(0deg, #28a54c, #28a54c 50%, transparent 50%);\n    color: #fff; }\n  .ionic .tabs-balanced > .tabs .tab-item .badge,\n  .ionic .tabs.tabs-balanced .tab-item .badge {\n    background-color: #fff;\n    color: #33cd5f; }\n  .ionic .tabs-energized > .tabs,\n  .ionic .tabs.tabs-energized {\n    border-color: #e6b500;\n    background-color: #ffc900;\n    background-image: linear-gradient(0deg, #e6b500, #e6b500 50%, transparent 50%);\n    color: #fff; }\n  .ionic .tabs-energized > .tabs .tab-item .badge,\n  .ionic .tabs.tabs-energized .tab-item .badge {\n    background-color: #fff;\n    color: #ffc900; }\n  .ionic .tabs-royal > .tabs,\n  .ionic .tabs.tabs-royal {\n    border-color: #6b46e5;\n    background-color: #886aea;\n    background-image: linear-gradient(0deg, #6b46e5, #6b46e5 50%, transparent 50%);\n    color: #fff; }\n  .ionic .tabs-royal > .tabs .tab-item .badge,\n  .ionic .tabs.tabs-royal .tab-item .badge {\n    background-color: #fff;\n    color: #886aea; }\n  .ionic .tabs-dark > .tabs,\n  .ionic .tabs.tabs-dark {\n    border-color: #111;\n    background-color: #444;\n    background-image: linear-gradient(0deg, #111, #111 50%, transparent 50%);\n    color: #fff; }\n  .ionic .tabs-dark > .tabs .tab-item .badge,\n  .ionic .tabs.tabs-dark .tab-item .badge {\n    background-color: #fff;\n    color: #444; }\n  .ionic .tabs-striped .tabs {\n    background-color: white;\n    background-image: none;\n    border: none;\n    border-bottom: 1px solid #ddd;\n    padding-top: 2px; }\n  .ionic .tabs-striped .tab-item.tab-item-active,\n  .ionic .tabs-striped .tab-item.active,\n  .ionic .tabs-striped .tab-item.activated {\n    margin-top: -2px;\n    border-style: solid;\n    border-width: 2px 0 0 0;\n    border-color: #444; }\n  .ionic .tabs-striped .tab-item.tab-item-active .badge,\n  .ionic .tabs-striped .tab-item.active .badge,\n  .ionic .tabs-striped .tab-item.activated .badge {\n    top: 2px;\n    opacity: 1; }\n  .ionic .tabs-striped.tabs-light .tabs {\n    background-color: #fff; }\n  .ionic .tabs-striped.tabs-light .tab-item {\n    color: rgba(68, 68, 68, 0.4);\n    opacity: 1; }\n  .ionic .tabs-striped.tabs-light .tab-item .badge {\n    opacity: 0.4; }\n  .ionic .tabs-striped.tabs-light .tab-item.tab-item-active,\n  .ionic .tabs-striped.tabs-light .tab-item.active,\n  .ionic .tabs-striped.tabs-light .tab-item.activated {\n    margin-top: -2px;\n    color: #444;\n    border-style: solid;\n    border-width: 2px 0 0 0;\n    border-color: #444; }\n  .ionic .tabs-striped.tabs-top .tab-item.tab-item-active .badge,\n  .ionic .tabs-striped.tabs-top .tab-item.active .badge,\n  .ionic .tabs-striped.tabs-top .tab-item.activated .badge {\n    top: 4%; }\n  .ionic .tabs-striped.tabs-stable .tabs {\n    background-color: #f8f8f8; }\n  .ionic .tabs-striped.tabs-stable .tab-item {\n    color: rgba(68, 68, 68, 0.4);\n    opacity: 1; }\n  .ionic .tabs-striped.tabs-stable .tab-item .badge {\n    opacity: 0.4; }\n  .ionic .tabs-striped.tabs-stable .tab-item.tab-item-active,\n  .ionic .tabs-striped.tabs-stable .tab-item.active,\n  .ionic .tabs-striped.tabs-stable .tab-item.activated {\n    margin-top: -2px;\n    color: #444;\n    border-style: solid;\n    border-width: 2px 0 0 0;\n    border-color: #444; }\n  .ionic .tabs-striped.tabs-top .tab-item.tab-item-active .badge,\n  .ionic .tabs-striped.tabs-top .tab-item.active .badge,\n  .ionic .tabs-striped.tabs-top .tab-item.activated .badge {\n    top: 4%; }\n  .ionic .tabs-striped.tabs-positive .tabs {\n    background-color: #387ef5; }\n  .ionic .tabs-striped.tabs-positive .tab-item {\n    color: rgba(255, 255, 255, 0.4);\n    opacity: 1; }\n  .ionic .tabs-striped.tabs-positive .tab-item .badge {\n    opacity: 0.4; }\n  .ionic .tabs-striped.tabs-positive .tab-item.tab-item-active,\n  .ionic .tabs-striped.tabs-positive .tab-item.active,\n  .ionic .tabs-striped.tabs-positive .tab-item.activated {\n    margin-top: -2px;\n    color: #fff;\n    border-style: solid;\n    border-width: 2px 0 0 0;\n    border-color: #fff; }\n  .ionic .tabs-striped.tabs-top .tab-item.tab-item-active .badge,\n  .ionic .tabs-striped.tabs-top .tab-item.active .badge,\n  .ionic .tabs-striped.tabs-top .tab-item.activated .badge {\n    top: 4%; }\n  .ionic .tabs-striped.tabs-calm .tabs {\n    background-color: #11c1f3; }\n  .ionic .tabs-striped.tabs-calm .tab-item {\n    color: rgba(255, 255, 255, 0.4);\n    opacity: 1; }\n  .ionic .tabs-striped.tabs-calm .tab-item .badge {\n    opacity: 0.4; }\n  .ionic .tabs-striped.tabs-calm .tab-item.tab-item-active,\n  .ionic .tabs-striped.tabs-calm .tab-item.active,\n  .ionic .tabs-striped.tabs-calm .tab-item.activated {\n    margin-top: -2px;\n    color: #fff;\n    border-style: solid;\n    border-width: 2px 0 0 0;\n    border-color: #fff; }\n  .ionic .tabs-striped.tabs-top .tab-item.tab-item-active .badge,\n  .ionic .tabs-striped.tabs-top .tab-item.active .badge,\n  .ionic .tabs-striped.tabs-top .tab-item.activated .badge {\n    top: 4%; }\n  .ionic .tabs-striped.tabs-assertive .tabs {\n    background-color: #ef473a; }\n  .ionic .tabs-striped.tabs-assertive .tab-item {\n    color: rgba(255, 255, 255, 0.4);\n    opacity: 1; }\n  .ionic .tabs-striped.tabs-assertive .tab-item .badge {\n    opacity: 0.4; }\n  .ionic .tabs-striped.tabs-assertive .tab-item.tab-item-active,\n  .ionic .tabs-striped.tabs-assertive .tab-item.active,\n  .ionic .tabs-striped.tabs-assertive .tab-item.activated {\n    margin-top: -2px;\n    color: #fff;\n    border-style: solid;\n    border-width: 2px 0 0 0;\n    border-color: #fff; }\n  .ionic .tabs-striped.tabs-top .tab-item.tab-item-active .badge,\n  .ionic .tabs-striped.tabs-top .tab-item.active .badge,\n  .ionic .tabs-striped.tabs-top .tab-item.activated .badge {\n    top: 4%; }\n  .ionic .tabs-striped.tabs-balanced .tabs {\n    background-color: #33cd5f; }\n  .ionic .tabs-striped.tabs-balanced .tab-item {\n    color: rgba(255, 255, 255, 0.4);\n    opacity: 1; }\n  .ionic .tabs-striped.tabs-balanced .tab-item .badge {\n    opacity: 0.4; }\n  .ionic .tabs-striped.tabs-balanced .tab-item.tab-item-active,\n  .ionic .tabs-striped.tabs-balanced .tab-item.active,\n  .ionic .tabs-striped.tabs-balanced .tab-item.activated {\n    margin-top: -2px;\n    color: #fff;\n    border-style: solid;\n    border-width: 2px 0 0 0;\n    border-color: #fff; }\n  .ionic .tabs-striped.tabs-top .tab-item.tab-item-active .badge,\n  .ionic .tabs-striped.tabs-top .tab-item.active .badge,\n  .ionic .tabs-striped.tabs-top .tab-item.activated .badge {\n    top: 4%; }\n  .ionic .tabs-striped.tabs-energized .tabs {\n    background-color: #ffc900; }\n  .ionic .tabs-striped.tabs-energized .tab-item {\n    color: rgba(255, 255, 255, 0.4);\n    opacity: 1; }\n  .ionic .tabs-striped.tabs-energized .tab-item .badge {\n    opacity: 0.4; }\n  .ionic .tabs-striped.tabs-energized .tab-item.tab-item-active,\n  .ionic .tabs-striped.tabs-energized .tab-item.active,\n  .ionic .tabs-striped.tabs-energized .tab-item.activated {\n    margin-top: -2px;\n    color: #fff;\n    border-style: solid;\n    border-width: 2px 0 0 0;\n    border-color: #fff; }\n  .ionic .tabs-striped.tabs-top .tab-item.tab-item-active .badge,\n  .ionic .tabs-striped.tabs-top .tab-item.active .badge,\n  .ionic .tabs-striped.tabs-top .tab-item.activated .badge {\n    top: 4%; }\n  .ionic .tabs-striped.tabs-royal .tabs {\n    background-color: #886aea; }\n  .ionic .tabs-striped.tabs-royal .tab-item {\n    color: rgba(255, 255, 255, 0.4);\n    opacity: 1; }\n  .ionic .tabs-striped.tabs-royal .tab-item .badge {\n    opacity: 0.4; }\n  .ionic .tabs-striped.tabs-royal .tab-item.tab-item-active,\n  .ionic .tabs-striped.tabs-royal .tab-item.active,\n  .ionic .tabs-striped.tabs-royal .tab-item.activated {\n    margin-top: -2px;\n    color: #fff;\n    border-style: solid;\n    border-width: 2px 0 0 0;\n    border-color: #fff; }\n  .ionic .tabs-striped.tabs-top .tab-item.tab-item-active .badge,\n  .ionic .tabs-striped.tabs-top .tab-item.active .badge,\n  .ionic .tabs-striped.tabs-top .tab-item.activated .badge {\n    top: 4%; }\n  .ionic .tabs-striped.tabs-dark .tabs {\n    background-color: #444; }\n  .ionic .tabs-striped.tabs-dark .tab-item {\n    color: rgba(255, 255, 255, 0.4);\n    opacity: 1; }\n  .ionic .tabs-striped.tabs-dark .tab-item .badge {\n    opacity: 0.4; }\n  .ionic .tabs-striped.tabs-dark .tab-item.tab-item-active,\n  .ionic .tabs-striped.tabs-dark .tab-item.active,\n  .ionic .tabs-striped.tabs-dark .tab-item.activated {\n    margin-top: -2px;\n    color: #fff;\n    border-style: solid;\n    border-width: 2px 0 0 0;\n    border-color: #fff; }\n  .ionic .tabs-striped.tabs-top .tab-item.tab-item-active .badge,\n  .ionic .tabs-striped.tabs-top .tab-item.active .badge,\n  .ionic .tabs-striped.tabs-top .tab-item.activated .badge {\n    top: 4%; }\n  .ionic .tabs-striped.tabs-background-light .tabs {\n    background-color: #fff;\n    background-image: none; }\n  .ionic .tabs-striped.tabs-background-stable .tabs {\n    background-color: #f8f8f8;\n    background-image: none; }\n  .ionic .tabs-striped.tabs-background-positive .tabs {\n    background-color: #387ef5;\n    background-image: none; }\n  .ionic .tabs-striped.tabs-background-calm .tabs {\n    background-color: #11c1f3;\n    background-image: none; }\n  .ionic .tabs-striped.tabs-background-assertive .tabs {\n    background-color: #ef473a;\n    background-image: none; }\n  .ionic .tabs-striped.tabs-background-balanced .tabs {\n    background-color: #33cd5f;\n    background-image: none; }\n  .ionic .tabs-striped.tabs-background-energized .tabs {\n    background-color: #ffc900;\n    background-image: none; }\n  .ionic .tabs-striped.tabs-background-royal .tabs {\n    background-color: #886aea;\n    background-image: none; }\n  .ionic .tabs-striped.tabs-background-dark .tabs {\n    background-color: #444;\n    background-image: none; }\n  .ionic .tabs-striped.tabs-color-light .tab-item {\n    color: rgba(255, 255, 255, 0.4);\n    opacity: 1; }\n  .ionic .tabs-striped.tabs-color-light .tab-item .badge {\n    opacity: 0.4; }\n  .ionic .tabs-striped.tabs-color-light .tab-item.tab-item-active,\n  .ionic .tabs-striped.tabs-color-light .tab-item.active,\n  .ionic .tabs-striped.tabs-color-light .tab-item.activated {\n    margin-top: -2px;\n    color: #fff;\n    border: 0 solid #fff;\n    border-top-width: 2px; }\n  .ionic .tabs-striped.tabs-color-light .tab-item.tab-item-active .badge,\n  .ionic .tabs-striped.tabs-color-light .tab-item.active .badge,\n  .ionic .tabs-striped.tabs-color-light .tab-item.activated .badge {\n    top: 2px;\n    opacity: 1; }\n  .ionic .tabs-striped.tabs-color-stable .tab-item {\n    color: rgba(248, 248, 248, 0.4);\n    opacity: 1; }\n  .ionic .tabs-striped.tabs-color-stable .tab-item .badge {\n    opacity: 0.4; }\n  .ionic .tabs-striped.tabs-color-stable .tab-item.tab-item-active,\n  .ionic .tabs-striped.tabs-color-stable .tab-item.active,\n  .ionic .tabs-striped.tabs-color-stable .tab-item.activated {\n    margin-top: -2px;\n    color: #f8f8f8;\n    border: 0 solid #f8f8f8;\n    border-top-width: 2px; }\n  .ionic .tabs-striped.tabs-color-stable .tab-item.tab-item-active .badge,\n  .ionic .tabs-striped.tabs-color-stable .tab-item.active .badge,\n  .ionic .tabs-striped.tabs-color-stable .tab-item.activated .badge {\n    top: 2px;\n    opacity: 1; }\n  .ionic .tabs-striped.tabs-color-positive .tab-item {\n    color: rgba(56, 126, 245, 0.4);\n    opacity: 1; }\n  .ionic .tabs-striped.tabs-color-positive .tab-item .badge {\n    opacity: 0.4; }\n  .ionic .tabs-striped.tabs-color-positive .tab-item.tab-item-active,\n  .ionic .tabs-striped.tabs-color-positive .tab-item.active,\n  .ionic .tabs-striped.tabs-color-positive .tab-item.activated {\n    margin-top: -2px;\n    color: #387ef5;\n    border: 0 solid #387ef5;\n    border-top-width: 2px; }\n  .ionic .tabs-striped.tabs-color-positive .tab-item.tab-item-active .badge,\n  .ionic .tabs-striped.tabs-color-positive .tab-item.active .badge,\n  .ionic .tabs-striped.tabs-color-positive .tab-item.activated .badge {\n    top: 2px;\n    opacity: 1; }\n  .ionic .tabs-striped.tabs-color-calm .tab-item {\n    color: rgba(17, 193, 243, 0.4);\n    opacity: 1; }\n  .ionic .tabs-striped.tabs-color-calm .tab-item .badge {\n    opacity: 0.4; }\n  .ionic .tabs-striped.tabs-color-calm .tab-item.tab-item-active,\n  .ionic .tabs-striped.tabs-color-calm .tab-item.active,\n  .ionic .tabs-striped.tabs-color-calm .tab-item.activated {\n    margin-top: -2px;\n    color: #11c1f3;\n    border: 0 solid #11c1f3;\n    border-top-width: 2px; }\n  .ionic .tabs-striped.tabs-color-calm .tab-item.tab-item-active .badge,\n  .ionic .tabs-striped.tabs-color-calm .tab-item.active .badge,\n  .ionic .tabs-striped.tabs-color-calm .tab-item.activated .badge {\n    top: 2px;\n    opacity: 1; }\n  .ionic .tabs-striped.tabs-color-assertive .tab-item {\n    color: rgba(239, 71, 58, 0.4);\n    opacity: 1; }\n  .ionic .tabs-striped.tabs-color-assertive .tab-item .badge {\n    opacity: 0.4; }\n  .ionic .tabs-striped.tabs-color-assertive .tab-item.tab-item-active,\n  .ionic .tabs-striped.tabs-color-assertive .tab-item.active,\n  .ionic .tabs-striped.tabs-color-assertive .tab-item.activated {\n    margin-top: -2px;\n    color: #ef473a;\n    border: 0 solid #ef473a;\n    border-top-width: 2px; }\n  .ionic .tabs-striped.tabs-color-assertive .tab-item.tab-item-active .badge,\n  .ionic .tabs-striped.tabs-color-assertive .tab-item.active .badge,\n  .ionic .tabs-striped.tabs-color-assertive .tab-item.activated .badge {\n    top: 2px;\n    opacity: 1; }\n  .ionic .tabs-striped.tabs-color-balanced .tab-item {\n    color: rgba(51, 205, 95, 0.4);\n    opacity: 1; }\n  .ionic .tabs-striped.tabs-color-balanced .tab-item .badge {\n    opacity: 0.4; }\n  .ionic .tabs-striped.tabs-color-balanced .tab-item.tab-item-active,\n  .ionic .tabs-striped.tabs-color-balanced .tab-item.active,\n  .ionic .tabs-striped.tabs-color-balanced .tab-item.activated {\n    margin-top: -2px;\n    color: #33cd5f;\n    border: 0 solid #33cd5f;\n    border-top-width: 2px; }\n  .ionic .tabs-striped.tabs-color-balanced .tab-item.tab-item-active .badge,\n  .ionic .tabs-striped.tabs-color-balanced .tab-item.active .badge,\n  .ionic .tabs-striped.tabs-color-balanced .tab-item.activated .badge {\n    top: 2px;\n    opacity: 1; }\n  .ionic .tabs-striped.tabs-color-energized .tab-item {\n    color: rgba(255, 201, 0, 0.4);\n    opacity: 1; }\n  .ionic .tabs-striped.tabs-color-energized .tab-item .badge {\n    opacity: 0.4; }\n  .ionic .tabs-striped.tabs-color-energized .tab-item.tab-item-active,\n  .ionic .tabs-striped.tabs-color-energized .tab-item.active,\n  .ionic .tabs-striped.tabs-color-energized .tab-item.activated {\n    margin-top: -2px;\n    color: #ffc900;\n    border: 0 solid #ffc900;\n    border-top-width: 2px; }\n  .ionic .tabs-striped.tabs-color-energized .tab-item.tab-item-active .badge,\n  .ionic .tabs-striped.tabs-color-energized .tab-item.active .badge,\n  .ionic .tabs-striped.tabs-color-energized .tab-item.activated .badge {\n    top: 2px;\n    opacity: 1; }\n  .ionic .tabs-striped.tabs-color-royal .tab-item {\n    color: rgba(136, 106, 234, 0.4);\n    opacity: 1; }\n  .ionic .tabs-striped.tabs-color-royal .tab-item .badge {\n    opacity: 0.4; }\n  .ionic .tabs-striped.tabs-color-royal .tab-item.tab-item-active,\n  .ionic .tabs-striped.tabs-color-royal .tab-item.active,\n  .ionic .tabs-striped.tabs-color-royal .tab-item.activated {\n    margin-top: -2px;\n    color: #886aea;\n    border: 0 solid #886aea;\n    border-top-width: 2px; }\n  .ionic .tabs-striped.tabs-color-royal .tab-item.tab-item-active .badge,\n  .ionic .tabs-striped.tabs-color-royal .tab-item.active .badge,\n  .ionic .tabs-striped.tabs-color-royal .tab-item.activated .badge {\n    top: 2px;\n    opacity: 1; }\n  .ionic .tabs-striped.tabs-color-dark .tab-item {\n    color: rgba(68, 68, 68, 0.4);\n    opacity: 1; }\n  .ionic .tabs-striped.tabs-color-dark .tab-item .badge {\n    opacity: 0.4; }\n  .ionic .tabs-striped.tabs-color-dark .tab-item.tab-item-active,\n  .ionic .tabs-striped.tabs-color-dark .tab-item.active,\n  .ionic .tabs-striped.tabs-color-dark .tab-item.activated {\n    margin-top: -2px;\n    color: #444;\n    border: 0 solid #444;\n    border-top-width: 2px; }\n  .ionic .tabs-striped.tabs-color-dark .tab-item.tab-item-active .badge,\n  .ionic .tabs-striped.tabs-color-dark .tab-item.active .badge,\n  .ionic .tabs-striped.tabs-color-dark .tab-item.activated .badge {\n    top: 2px;\n    opacity: 1; }\n  .ionic .tabs-background-light .tabs,\n  .ionic .tabs-background-light > .tabs {\n    background-color: #fff;\n    background-image: linear-gradient(0deg, #ddd, #ddd 50%, transparent 50%);\n    border-color: #ddd; }\n  .ionic .tabs-background-stable .tabs,\n  .ionic .tabs-background-stable > .tabs {\n    background-color: #f8f8f8;\n    background-image: linear-gradient(0deg, #b2b2b2, #b2b2b2 50%, transparent 50%);\n    border-color: #b2b2b2; }\n  .ionic .tabs-background-positive .tabs,\n  .ionic .tabs-background-positive > .tabs {\n    background-color: #387ef5;\n    background-image: linear-gradient(0deg, #0c60ee, #0c60ee 50%, transparent 50%);\n    border-color: #0c60ee; }\n  .ionic .tabs-background-calm .tabs,\n  .ionic .tabs-background-calm > .tabs {\n    background-color: #11c1f3;\n    background-image: linear-gradient(0deg, #0a9dc7, #0a9dc7 50%, transparent 50%);\n    border-color: #0a9dc7; }\n  .ionic .tabs-background-assertive .tabs,\n  .ionic .tabs-background-assertive > .tabs {\n    background-color: #ef473a;\n    background-image: linear-gradient(0deg, #e42112, #e42112 50%, transparent 50%);\n    border-color: #e42112; }\n  .ionic .tabs-background-balanced .tabs,\n  .ionic .tabs-background-balanced > .tabs {\n    background-color: #33cd5f;\n    background-image: linear-gradient(0deg, #28a54c, #28a54c 50%, transparent 50%);\n    border-color: #28a54c; }\n  .ionic .tabs-background-energized .tabs,\n  .ionic .tabs-background-energized > .tabs {\n    background-color: #ffc900;\n    background-image: linear-gradient(0deg, #e6b500, #e6b500 50%, transparent 50%);\n    border-color: #e6b500; }\n  .ionic .tabs-background-royal .tabs,\n  .ionic .tabs-background-royal > .tabs {\n    background-color: #886aea;\n    background-image: linear-gradient(0deg, #6b46e5, #6b46e5 50%, transparent 50%);\n    border-color: #6b46e5; }\n  .ionic .tabs-background-dark .tabs,\n  .ionic .tabs-background-dark > .tabs {\n    background-color: #444;\n    background-image: linear-gradient(0deg, #111, #111 50%, transparent 50%);\n    border-color: #111; }\n  .ionic .tabs-color-light .tab-item {\n    color: rgba(255, 255, 255, 0.4);\n    opacity: 1; }\n  .ionic .tabs-color-light .tab-item .badge {\n    opacity: 0.4; }\n  .ionic .tabs-color-light .tab-item.tab-item-active,\n  .ionic .tabs-color-light .tab-item.active,\n  .ionic .tabs-color-light .tab-item.activated {\n    color: #fff;\n    border: 0 solid #fff; }\n  .ionic .tabs-color-light .tab-item.tab-item-active .badge,\n  .ionic .tabs-color-light .tab-item.active .badge,\n  .ionic .tabs-color-light .tab-item.activated .badge {\n    opacity: 1; }\n  .ionic .tabs-color-stable .tab-item {\n    color: rgba(248, 248, 248, 0.4);\n    opacity: 1; }\n  .ionic .tabs-color-stable .tab-item .badge {\n    opacity: 0.4; }\n  .ionic .tabs-color-stable .tab-item.tab-item-active,\n  .ionic .tabs-color-stable .tab-item.active,\n  .ionic .tabs-color-stable .tab-item.activated {\n    color: #f8f8f8;\n    border: 0 solid #f8f8f8; }\n  .ionic .tabs-color-stable .tab-item.tab-item-active .badge,\n  .ionic .tabs-color-stable .tab-item.active .badge,\n  .ionic .tabs-color-stable .tab-item.activated .badge {\n    opacity: 1; }\n  .ionic .tabs-color-positive .tab-item {\n    color: rgba(56, 126, 245, 0.4);\n    opacity: 1; }\n  .ionic .tabs-color-positive .tab-item .badge {\n    opacity: 0.4; }\n  .ionic .tabs-color-positive .tab-item.tab-item-active,\n  .ionic .tabs-color-positive .tab-item.active,\n  .ionic .tabs-color-positive .tab-item.activated {\n    color: #387ef5;\n    border: 0 solid #387ef5; }\n  .ionic .tabs-color-positive .tab-item.tab-item-active .badge,\n  .ionic .tabs-color-positive .tab-item.active .badge,\n  .ionic .tabs-color-positive .tab-item.activated .badge {\n    opacity: 1; }\n  .ionic .tabs-color-calm .tab-item {\n    color: rgba(17, 193, 243, 0.4);\n    opacity: 1; }\n  .ionic .tabs-color-calm .tab-item .badge {\n    opacity: 0.4; }\n  .ionic .tabs-color-calm .tab-item.tab-item-active,\n  .ionic .tabs-color-calm .tab-item.active,\n  .ionic .tabs-color-calm .tab-item.activated {\n    color: #11c1f3;\n    border: 0 solid #11c1f3; }\n  .ionic .tabs-color-calm .tab-item.tab-item-active .badge,\n  .ionic .tabs-color-calm .tab-item.active .badge,\n  .ionic .tabs-color-calm .tab-item.activated .badge {\n    opacity: 1; }\n  .ionic .tabs-color-assertive .tab-item {\n    color: rgba(239, 71, 58, 0.4);\n    opacity: 1; }\n  .ionic .tabs-color-assertive .tab-item .badge {\n    opacity: 0.4; }\n  .ionic .tabs-color-assertive .tab-item.tab-item-active,\n  .ionic .tabs-color-assertive .tab-item.active,\n  .ionic .tabs-color-assertive .tab-item.activated {\n    color: #ef473a;\n    border: 0 solid #ef473a; }\n  .ionic .tabs-color-assertive .tab-item.tab-item-active .badge,\n  .ionic .tabs-color-assertive .tab-item.active .badge,\n  .ionic .tabs-color-assertive .tab-item.activated .badge {\n    opacity: 1; }\n  .ionic .tabs-color-balanced .tab-item {\n    color: rgba(51, 205, 95, 0.4);\n    opacity: 1; }\n  .ionic .tabs-color-balanced .tab-item .badge {\n    opacity: 0.4; }\n  .ionic .tabs-color-balanced .tab-item.tab-item-active,\n  .ionic .tabs-color-balanced .tab-item.active,\n  .ionic .tabs-color-balanced .tab-item.activated {\n    color: #33cd5f;\n    border: 0 solid #33cd5f; }\n  .ionic .tabs-color-balanced .tab-item.tab-item-active .badge,\n  .ionic .tabs-color-balanced .tab-item.active .badge,\n  .ionic .tabs-color-balanced .tab-item.activated .badge {\n    opacity: 1; }\n  .ionic .tabs-color-energized .tab-item {\n    color: rgba(255, 201, 0, 0.4);\n    opacity: 1; }\n  .ionic .tabs-color-energized .tab-item .badge {\n    opacity: 0.4; }\n  .ionic .tabs-color-energized .tab-item.tab-item-active,\n  .ionic .tabs-color-energized .tab-item.active,\n  .ionic .tabs-color-energized .tab-item.activated {\n    color: #ffc900;\n    border: 0 solid #ffc900; }\n  .ionic .tabs-color-energized .tab-item.tab-item-active .badge,\n  .ionic .tabs-color-energized .tab-item.active .badge,\n  .ionic .tabs-color-energized .tab-item.activated .badge {\n    opacity: 1; }\n  .ionic .tabs-color-royal .tab-item {\n    color: rgba(136, 106, 234, 0.4);\n    opacity: 1; }\n  .ionic .tabs-color-royal .tab-item .badge {\n    opacity: 0.4; }\n  .ionic .tabs-color-royal .tab-item.tab-item-active,\n  .ionic .tabs-color-royal .tab-item.active,\n  .ionic .tabs-color-royal .tab-item.activated {\n    color: #886aea;\n    border: 0 solid #886aea; }\n  .ionic .tabs-color-royal .tab-item.tab-item-active .badge,\n  .ionic .tabs-color-royal .tab-item.active .badge,\n  .ionic .tabs-color-royal .tab-item.activated .badge {\n    opacity: 1; }\n  .ionic .tabs-color-dark .tab-item {\n    color: rgba(68, 68, 68, 0.4);\n    opacity: 1; }\n  .ionic .tabs-color-dark .tab-item .badge {\n    opacity: 0.4; }\n  .ionic .tabs-color-dark .tab-item.tab-item-active,\n  .ionic .tabs-color-dark .tab-item.active,\n  .ionic .tabs-color-dark .tab-item.activated {\n    color: #444;\n    border: 0 solid #444; }\n  .ionic .tabs-color-dark .tab-item.tab-item-active .badge,\n  .ionic .tabs-color-dark .tab-item.active .badge,\n  .ionic .tabs-color-dark .tab-item.activated .badge {\n    opacity: 1; }\n  .ionic ion-tabs.tabs-color-active-light .tab-item {\n    color: #444; }\n  .ionic ion-tabs.tabs-color-active-light .tab-item.tab-item-active,\n  .ionic ion-tabs.tabs-color-active-light .tab-item.active,\n  .ionic ion-tabs.tabs-color-active-light .tab-item.activated {\n    color: #fff; }\n  .ionic ion-tabs.tabs-color-active-stable .tab-item {\n    color: #444; }\n  .ionic ion-tabs.tabs-color-active-stable .tab-item.tab-item-active,\n  .ionic ion-tabs.tabs-color-active-stable .tab-item.active,\n  .ionic ion-tabs.tabs-color-active-stable .tab-item.activated {\n    color: #f8f8f8; }\n  .ionic ion-tabs.tabs-color-active-positive .tab-item {\n    color: #444; }\n  .ionic ion-tabs.tabs-color-active-positive .tab-item.tab-item-active,\n  .ionic ion-tabs.tabs-color-active-positive .tab-item.active,\n  .ionic ion-tabs.tabs-color-active-positive .tab-item.activated {\n    color: #387ef5; }\n  .ionic ion-tabs.tabs-color-active-calm .tab-item {\n    color: #444; }\n  .ionic ion-tabs.tabs-color-active-calm .tab-item.tab-item-active,\n  .ionic ion-tabs.tabs-color-active-calm .tab-item.active,\n  .ionic ion-tabs.tabs-color-active-calm .tab-item.activated {\n    color: #11c1f3; }\n  .ionic ion-tabs.tabs-color-active-assertive .tab-item {\n    color: #444; }\n  .ionic ion-tabs.tabs-color-active-assertive .tab-item.tab-item-active,\n  .ionic ion-tabs.tabs-color-active-assertive .tab-item.active,\n  .ionic ion-tabs.tabs-color-active-assertive .tab-item.activated {\n    color: #ef473a; }\n  .ionic ion-tabs.tabs-color-active-balanced .tab-item {\n    color: #444; }\n  .ionic ion-tabs.tabs-color-active-balanced .tab-item.tab-item-active,\n  .ionic ion-tabs.tabs-color-active-balanced .tab-item.active,\n  .ionic ion-tabs.tabs-color-active-balanced .tab-item.activated {\n    color: #33cd5f; }\n  .ionic ion-tabs.tabs-color-active-energized .tab-item {\n    color: #444; }\n  .ionic ion-tabs.tabs-color-active-energized .tab-item.tab-item-active,\n  .ionic ion-tabs.tabs-color-active-energized .tab-item.active,\n  .ionic ion-tabs.tabs-color-active-energized .tab-item.activated {\n    color: #ffc900; }\n  .ionic ion-tabs.tabs-color-active-royal .tab-item {\n    color: #444; }\n  .ionic ion-tabs.tabs-color-active-royal .tab-item.tab-item-active,\n  .ionic ion-tabs.tabs-color-active-royal .tab-item.active,\n  .ionic ion-tabs.tabs-color-active-royal .tab-item.activated {\n    color: #886aea; }\n  .ionic ion-tabs.tabs-color-active-dark .tab-item {\n    color: #fff; }\n  .ionic ion-tabs.tabs-color-active-dark .tab-item.tab-item-active,\n  .ionic ion-tabs.tabs-color-active-dark .tab-item.active,\n  .ionic ion-tabs.tabs-color-active-dark .tab-item.activated {\n    color: #444; }\n  .ionic .tabs-top.tabs-striped {\n    padding-bottom: 0; }\n  .ionic .tabs-top.tabs-striped .tab-item {\n    background: transparent;\n    transition: color 0.1s ease; }\n  .ionic .tabs-top.tabs-striped .tab-item.tab-item-active,\n  .ionic .tabs-top.tabs-striped .tab-item.active,\n  .ionic .tabs-top.tabs-striped .tab-item.activated {\n    margin-top: 1px;\n    border-width: 0px 0px 2px 0px !important;\n    border-style: solid; }\n  .ionic .tabs-top.tabs-striped .tab-item.tab-item-active > .badge,\n  .ionic .tabs-top.tabs-striped .tab-item.tab-item-active > i,\n  .ionic .tabs-top.tabs-striped .tab-item.active > .badge,\n  .ionic .tabs-top.tabs-striped .tab-item.active > i,\n  .ionic .tabs-top.tabs-striped .tab-item.activated > .badge, .ionic .tabs-top.tabs-striped .tab-item.activated > i {\n    margin-top: -1px; }\n  .ionic .tabs-top.tabs-striped .tab-item .badge {\n    transition: color 0.2s ease; }\n  .ionic .tabs-top.tabs-striped:not(.tabs-icon-left):not(.tabs-icon-top) .tab-item.tab-item-active .tab-title,\n  .ionic .tabs-top.tabs-striped:not(.tabs-icon-left):not(.tabs-icon-top) .tab-item.tab-item-active i,\n  .ionic .tabs-top.tabs-striped:not(.tabs-icon-left):not(.tabs-icon-top) .tab-item.active .tab-title,\n  .ionic .tabs-top.tabs-striped:not(.tabs-icon-left):not(.tabs-icon-top) .tab-item.active i,\n  .ionic .tabs-top.tabs-striped:not(.tabs-icon-left):not(.tabs-icon-top) .tab-item.activated .tab-title, .ionic .tabs-top.tabs-striped:not(.tabs-icon-left):not(.tabs-icon-top) .tab-item.activated i {\n    display: block;\n    margin-top: -1px; }\n  .ionic .tabs-top.tabs-striped.tabs-icon-left .tab-item {\n    margin-top: 1px; }\n  .ionic .tabs-top.tabs-striped.tabs-icon-left .tab-item.tab-item-active .tab-title,\n  .ionic .tabs-top.tabs-striped.tabs-icon-left .tab-item.tab-item-active i,\n  .ionic .tabs-top.tabs-striped.tabs-icon-left .tab-item.active .tab-title,\n  .ionic .tabs-top.tabs-striped.tabs-icon-left .tab-item.active i,\n  .ionic .tabs-top.tabs-striped.tabs-icon-left .tab-item.activated .tab-title, .ionic .tabs-top.tabs-striped.tabs-icon-left .tab-item.activated i {\n    margin-top: -0.1em; }\n  .ionic .tabs-top > .tabs,\n  .ionic .tabs.tabs-top {\n    top: 44px;\n    padding-top: 0;\n    background-position: bottom;\n    border-top-width: 0;\n    border-bottom-width: 1px; }\n  .ionic .tabs-top > .tabs .tab-item.tab-item-active .badge,\n  .ionic .tabs-top > .tabs .tab-item.active .badge,\n  .ionic .tabs-top > .tabs .tab-item.activated .badge,\n  .ionic .tabs.tabs-top .tab-item.tab-item-active .badge,\n  .ionic .tabs.tabs-top .tab-item.active .badge,\n  .ionic .tabs.tabs-top .tab-item.activated .badge {\n    top: 4%; }\n  .ionic .tabs-top ~ .bar-header {\n    border-bottom-width: 0; }\n  .ionic .tab-item {\n    -moz-flex: 1;\n    -ms-flex: 1;\n    flex: 1;\n    display: block;\n    overflow: hidden;\n    max-width: 150px;\n    height: 100%;\n    color: inherit;\n    text-align: center;\n    text-decoration: none;\n    text-overflow: ellipsis;\n    white-space: nowrap;\n    font-weight: 400;\n    font-size: 14px;\n    font-family: \"Helvetica Neue\", \"Roboto\", \"Segoe UI\", sans-serif;\n    opacity: 0.7; }\n  .ionic .tab-item:hover {\n    cursor: pointer; }\n  .ionic .tab-item.tab-hidden {\n    display: none; }\n  .ionic .tabs-item-hide > .tabs,\n  .ionic .tabs.tabs-item-hide {\n    display: none; }\n  .ionic .tabs-icon-top > .tabs .tab-item,\n  .ionic .tabs-icon-top.tabs .tab-item,\n  .ionic .tabs-icon-bottom > .tabs .tab-item,\n  .ionic .tabs-icon-bottom.tabs .tab-item {\n    font-size: 10px;\n    line-height: 14px; }\n  .ionic .tab-item .icon {\n    display: block;\n    margin: 0 auto;\n    height: 32px;\n    font-size: 32px; }\n  .ionic .tabs-icon-left.tabs .tab-item,\n  .ionic .tabs-icon-left > .tabs .tab-item,\n  .ionic .tabs-icon-right.tabs .tab-item,\n  .ionic .tabs-icon-right > .tabs .tab-item {\n    font-size: 10px; }\n  .ionic .tabs-icon-left.tabs .tab-item .icon,\n  .ionic .tabs-icon-left.tabs .tab-item .tab-title,\n  .ionic .tabs-icon-left > .tabs .tab-item .icon,\n  .ionic .tabs-icon-left > .tabs .tab-item .tab-title,\n  .ionic .tabs-icon-right.tabs .tab-item .icon,\n  .ionic .tabs-icon-right.tabs .tab-item .tab-title,\n  .ionic .tabs-icon-right > .tabs .tab-item .icon, .ionic .tabs-icon-right > .tabs .tab-item .tab-title {\n    display: inline-block;\n    vertical-align: top;\n    margin-top: -.1em; }\n  .ionic .tabs-icon-left.tabs .tab-item .icon:before,\n  .ionic .tabs-icon-left.tabs .tab-item .tab-title:before,\n  .ionic .tabs-icon-left > .tabs .tab-item .icon:before,\n  .ionic .tabs-icon-left > .tabs .tab-item .tab-title:before,\n  .ionic .tabs-icon-right.tabs .tab-item .icon:before,\n  .ionic .tabs-icon-right.tabs .tab-item .tab-title:before,\n  .ionic .tabs-icon-right > .tabs .tab-item .icon:before, .ionic .tabs-icon-right > .tabs .tab-item .tab-title:before {\n    font-size: 24px;\n    line-height: 49px; }\n  .ionic .tabs-icon-left > .tabs .tab-item .icon,\n  .ionic .tabs-icon-left.tabs .tab-item .icon {\n    padding-right: 3px; }\n  .ionic .tabs-icon-right > .tabs .tab-item .icon,\n  .ionic .tabs-icon-right.tabs .tab-item .icon {\n    padding-left: 3px; }\n  .ionic .tabs-icon-only > .tabs .icon,\n  .ionic .tabs-icon-only.tabs .icon {\n    line-height: inherit; }\n  .ionic .tab-item.has-badge {\n    position: relative; }\n  .ionic .tab-item .badge {\n    position: absolute;\n    top: 4%;\n    right: 33%;\n    right: calc(50% - 26px);\n    padding: 1px 6px;\n    height: auto;\n    font-size: 12px;\n    line-height: 16px; }\n  .ionic .tab-item.tab-item-active,\n  .ionic .tab-item.active,\n  .ionic .tab-item.activated {\n    opacity: 1; }\n  .ionic .tab-item.tab-item-active.tab-item-light,\n  .ionic .tab-item.active.tab-item-light,\n  .ionic .tab-item.activated.tab-item-light {\n    color: #fff; }\n  .ionic .tab-item.tab-item-active.tab-item-stable,\n  .ionic .tab-item.active.tab-item-stable,\n  .ionic .tab-item.activated.tab-item-stable {\n    color: #f8f8f8; }\n  .ionic .tab-item.tab-item-active.tab-item-positive,\n  .ionic .tab-item.active.tab-item-positive,\n  .ionic .tab-item.activated.tab-item-positive {\n    color: #387ef5; }\n  .ionic .tab-item.tab-item-active.tab-item-calm,\n  .ionic .tab-item.active.tab-item-calm,\n  .ionic .tab-item.activated.tab-item-calm {\n    color: #11c1f3; }\n  .ionic .tab-item.tab-item-active.tab-item-assertive,\n  .ionic .tab-item.active.tab-item-assertive,\n  .ionic .tab-item.activated.tab-item-assertive {\n    color: #ef473a; }\n  .ionic .tab-item.tab-item-active.tab-item-balanced,\n  .ionic .tab-item.active.tab-item-balanced,\n  .ionic .tab-item.activated.tab-item-balanced {\n    color: #33cd5f; }\n  .ionic .tab-item.tab-item-active.tab-item-energized,\n  .ionic .tab-item.active.tab-item-energized,\n  .ionic .tab-item.activated.tab-item-energized {\n    color: #ffc900; }\n  .ionic .tab-item.tab-item-active.tab-item-royal,\n  .ionic .tab-item.active.tab-item-royal,\n  .ionic .tab-item.activated.tab-item-royal {\n    color: #886aea; }\n  .ionic .tab-item.tab-item-active.tab-item-dark,\n  .ionic .tab-item.active.tab-item-dark,\n  .ionic .tab-item.activated.tab-item-dark {\n    color: #444; }\n  .ionic .item.tabs {\n    display: -moz-flex;\n    display: -ms-flexbox;\n    display: flex;\n    padding: 0; }\n  .ionic .item.tabs .icon:before {\n    position: relative; }\n  .ionic .tab-item.disabled,\n  .ionic .tab-item[disabled] {\n    opacity: .4;\n    cursor: default;\n    pointer-events: none; }\n  .ionic .nav-bar-tabs-top.hide ~ .view-container .tabs-top .tabs {\n    top: 0; }\n  .ionic .pane[hide-nav-bar=\"true\"] .has-tabs-top {\n    top: 49px; }\n  .ionic .menu {\n    position: absolute;\n    top: 0;\n    bottom: 0;\n    z-index: 0;\n    overflow: hidden;\n    min-height: 100%;\n    max-height: 100%;\n    width: 275px;\n    background-color: #fff; }\n  .ionic .menu .scroll-content {\n    z-index: 10; }\n  .ionic .menu .bar-header {\n    z-index: 11; }\n  .ionic .menu-content {\n    -webkit-transform: none;\n    transform: none;\n    box-shadow: -1px 0px 2px rgba(0, 0, 0, 0.2), 1px 0px 2px rgba(0, 0, 0, 0.2); }\n  .ionic .menu-open .menu-content .pane,\n  .ionic .menu-open .menu-content .scroll-content {\n    pointer-events: none;\n    overflow: hidden; }\n  .ionic .grade-b .menu-content,\n  .ionic .grade-c .menu-content {\n    box-sizing: content-box;\n    right: -1px;\n    left: -1px;\n    border-right: 1px solid #ccc;\n    border-left: 1px solid #ccc;\n    box-shadow: none; }\n  .ionic .menu-left {\n    left: 0; }\n  .ionic .menu-right {\n    right: 0; }\n  .ionic .aside-open.aside-resizing .menu-right {\n    display: none; }\n  .ionic .menu-animated {\n    transition: -webkit-transform 200ms ease;\n    transition: transform 200ms ease;\n    transition: transform 200ms ease, -webkit-transform 200ms ease; }\n  .ionic .modal-backdrop,\n  .ionic .modal-backdrop-bg {\n    position: fixed;\n    top: 0;\n    left: 0;\n    z-index: 10;\n    width: 100%;\n    height: 100%; }\n  .ionic .modal-backdrop-bg {\n    pointer-events: none; }\n  .ionic .modal {\n    display: block;\n    position: absolute;\n    top: 0;\n    z-index: 10;\n    overflow: hidden;\n    min-height: 100%;\n    width: 100%;\n    background-color: #fff; }\n  @media (min-width: 680px) {\n    .ionic .modal {\n      top: 20%;\n      right: 20%;\n      bottom: 20%;\n      left: 20%;\n      min-height: 240px;\n      width: 60%; }\n    .ionic .modal.ng-leave-active {\n      bottom: 0; }\n    .ionic .platform-ios.platform-cordova .modal-wrapper .modal .bar-header:not(.bar-subheader) {\n      height: 44px; }\n    .ionic .platform-ios.platform-cordova .modal-wrapper .modal .bar-header:not(.bar-subheader) > * {\n      margin-top: 0; }\n    .ionic .platform-ios.platform-cordova .modal-wrapper .modal .tabs-top > .tabs,\n    .ionic .platform-ios.platform-cordova .modal-wrapper .modal .tabs.tabs-top {\n      top: 44px; }\n    .ionic .platform-ios.platform-cordova .modal-wrapper .modal .has-header,\n    .ionic .platform-ios.platform-cordova .modal-wrapper .modal .bar-subheader {\n      top: 44px; }\n    .ionic .platform-ios.platform-cordova .modal-wrapper .modal .has-subheader {\n      top: 88px; }\n    .ionic .platform-ios.platform-cordova .modal-wrapper .modal .has-header.has-tabs-top {\n      top: 93px; }\n    .ionic .platform-ios.platform-cordova .modal-wrapper .modal .has-header.has-subheader.has-tabs-top {\n      top: 137px; }\n    .ionic .modal-backdrop-bg {\n      transition: opacity 300ms ease-in-out;\n      background-color: #000;\n      opacity: 0; }\n    .ionic .active .modal-backdrop-bg {\n      opacity: 0.5; } }\n  .ionic .modal-open {\n    pointer-events: none; }\n  .ionic .modal-open .modal,\n  .ionic .modal-open .modal-backdrop {\n    pointer-events: auto; }\n  .ionic .modal-open.loading-active .modal,\n  .ionic .modal-open.loading-active .modal-backdrop {\n    pointer-events: none; }\n  .ionic .popover-backdrop {\n    position: fixed;\n    top: 0;\n    left: 0;\n    z-index: 10;\n    width: 100%;\n    height: 100%;\n    background-color: transparent; }\n  .ionic .popover-backdrop.active {\n    background-color: rgba(0, 0, 0, 0.1); }\n  .ionic .popover {\n    position: absolute;\n    top: 25%;\n    left: 50%;\n    z-index: 10;\n    display: block;\n    margin-top: 12px;\n    margin-left: -110px;\n    height: 280px;\n    width: 220px;\n    background-color: #fff;\n    box-shadow: 0 1px 3px rgba(0, 0, 0, 0.4);\n    opacity: 0; }\n  .ionic .popover .item:first-child {\n    border-top: 0; }\n  .ionic .popover .item:last-child {\n    border-bottom: 0; }\n  .ionic .popover.popover-bottom {\n    margin-top: -12px; }\n  .ionic .popover,\n  .ionic .popover .bar-header {\n    border-radius: 2px; }\n  .ionic .popover .scroll-content {\n    z-index: 1;\n    margin: 2px 0; }\n  .ionic .popover .bar-header {\n    border-bottom-right-radius: 0;\n    border-bottom-left-radius: 0; }\n  .ionic .popover .has-header {\n    border-top-right-radius: 0;\n    border-top-left-radius: 0; }\n  .ionic .popover-arrow {\n    display: none; }\n  .ionic .platform-ios .popover {\n    box-shadow: 0 0 40px rgba(0, 0, 0, 0.08);\n    border-radius: 10px; }\n  .ionic .platform-ios .popover .bar-header {\n    border-top-right-radius: 10px;\n    border-top-left-radius: 10px; }\n  .ionic .platform-ios .popover .scroll-content {\n    margin: 8px 0;\n    border-radius: 10px; }\n  .ionic .platform-ios .popover .scroll-content.has-header {\n    margin-top: 0; }\n  .ionic .platform-ios .popover-arrow {\n    position: absolute;\n    display: block;\n    top: -17px;\n    width: 30px;\n    height: 19px;\n    overflow: hidden; }\n  .ionic .platform-ios .popover-arrow:after {\n    position: absolute;\n    top: 12px;\n    left: 5px;\n    width: 20px;\n    height: 20px;\n    background-color: #fff;\n    border-radius: 3px;\n    content: '';\n    -webkit-transform: rotate(-45deg);\n    transform: rotate(-45deg); }\n  .ionic .platform-ios .popover-bottom .popover-arrow {\n    top: auto;\n    bottom: -10px; }\n  .ionic .platform-ios .popover-bottom .popover-arrow:after {\n    top: -6px; }\n  .ionic .platform-android .popover {\n    margin-top: -32px;\n    background-color: #fafafa;\n    box-shadow: 0 2px 6px rgba(0, 0, 0, 0.35); }\n  .ionic .platform-android .popover .item {\n    border-color: #fafafa;\n    background-color: #fafafa;\n    color: #4d4d4d; }\n  .ionic .platform-android .popover.popover-bottom {\n    margin-top: 32px; }\n  .ionic .platform-android .popover-backdrop,\n  .ionic .platform-android .popover-backdrop.active {\n    background-color: transparent; }\n  .ionic .popover-open {\n    pointer-events: none; }\n  .ionic .popover-open .popover,\n  .ionic .popover-open .popover-backdrop {\n    pointer-events: auto; }\n  .ionic .popover-open.loading-active .popover,\n  .ionic .popover-open.loading-active .popover-backdrop {\n    pointer-events: none; }\n  @media (min-width: 680px) {\n    .ionic .popover {\n      width: 360px; } }\n  .ionic .popup-container {\n    position: absolute;\n    top: 0;\n    left: 0;\n    bottom: 0;\n    right: 0;\n    background: transparent;\n    display: -moz-flex;\n    display: -ms-flexbox;\n    display: flex;\n    -ms-flex-pack: center;\n    -moz-justify-content: center;\n    justify-content: center;\n    -ms-flex-align: center;\n    -moz-align-items: center;\n    align-items: center;\n    z-index: 12;\n    visibility: hidden; }\n  .ionic .popup-container.popup-showing {\n    visibility: visible; }\n  .ionic .popup-container.popup-hidden .popup {\n    -webkit-animation-name: scaleOut;\n    animation-name: scaleOut;\n    -webkit-animation-duration: 0.1s;\n    animation-duration: 0.1s;\n    -webkit-animation-timing-function: ease-in-out;\n    animation-timing-function: ease-in-out;\n    -webkit-animation-fill-mode: both;\n    animation-fill-mode: both; }\n  .ionic .popup-container.active .popup {\n    -webkit-animation-name: superScaleIn;\n    animation-name: superScaleIn;\n    -webkit-animation-duration: 0.2s;\n    animation-duration: 0.2s;\n    -webkit-animation-timing-function: ease-in-out;\n    animation-timing-function: ease-in-out;\n    -webkit-animation-fill-mode: both;\n    animation-fill-mode: both; }\n  .ionic .popup-container .popup {\n    width: 250px;\n    max-width: 100%;\n    max-height: 90%;\n    border-radius: 0px;\n    background-color: rgba(255, 255, 255, 0.9);\n    display: -moz-flex;\n    display: -ms-flexbox;\n    display: flex;\n    -moz-flex-direction: column;\n    -ms-flex-direction: column;\n    flex-direction: column; }\n  .ionic .popup-container input,\n  .ionic .popup-container textarea {\n    width: 100%; }\n  .ionic .popup-head {\n    padding: 15px 10px;\n    border-bottom: 1px solid #eee;\n    text-align: center; }\n  .ionic .popup-title {\n    margin: 0;\n    padding: 0;\n    font-size: 15px; }\n  .ionic .popup-sub-title {\n    margin: 5px 0 0 0;\n    padding: 0;\n    font-weight: normal;\n    font-size: 11px; }\n  .ionic .popup-body {\n    padding: 10px;\n    overflow: auto; }\n  .ionic .popup-buttons {\n    display: -moz-flex;\n    display: -ms-flexbox;\n    display: flex;\n    -moz-flex-direction: row;\n    -ms-flex-direction: row;\n    flex-direction: row;\n    padding: 10px;\n    min-height: 65px; }\n  .ionic .popup-buttons .button {\n    -moz-flex: 1;\n    -ms-flex: 1;\n    flex: 1;\n    display: block;\n    min-height: 45px;\n    border-radius: 2px;\n    line-height: 20px;\n    margin-right: 5px; }\n  .ionic .popup-buttons .button:last-child {\n    margin-right: 0px; }\n  .ionic .popup-open {\n    pointer-events: none; }\n  .ionic .popup-open.modal-open .modal {\n    pointer-events: none; }\n  .ionic .popup-open .popup-backdrop, .ionic .popup-open .popup {\n    pointer-events: auto; }\n  .ionic .loading-container {\n    position: absolute;\n    left: 0;\n    top: 0;\n    right: 0;\n    bottom: 0;\n    z-index: 13;\n    display: -moz-flex;\n    display: -ms-flexbox;\n    display: flex;\n    -ms-flex-pack: center;\n    -moz-justify-content: center;\n    justify-content: center;\n    -ms-flex-align: center;\n    -moz-align-items: center;\n    align-items: center;\n    transition: 0.2s opacity linear;\n    visibility: hidden;\n    opacity: 0; }\n  .ionic .loading-container:not(.visible) .icon,\n  .ionic .loading-container:not(.visible) .spinner {\n    display: none; }\n  .ionic .loading-container.visible {\n    visibility: visible; }\n  .ionic .loading-container.active {\n    opacity: 1; }\n  .ionic .loading-container .loading {\n    padding: 20px;\n    border-radius: 5px;\n    background-color: rgba(0, 0, 0, 0.7);\n    color: #fff;\n    text-align: center;\n    text-overflow: ellipsis;\n    font-size: 15px; }\n  .ionic .loading-container .loading h1, .ionic .loading-container .loading h2, .ionic .loading-container .loading h3, .ionic .loading-container .loading h4, .ionic .loading-container .loading h5, .ionic .loading-container .loading h6 {\n    color: #fff; }\n  .ionic .item {\n    border-color: #ddd;\n    background-color: #fff;\n    color: #444;\n    position: relative;\n    z-index: 2;\n    display: block;\n    margin: -1px;\n    padding: 16px;\n    border-width: 1px;\n    border-style: solid;\n    font-size: 16px; }\n  .ionic .item h2 {\n    margin: 0 0 2px 0;\n    font-size: 16px;\n    font-weight: normal; }\n  .ionic .item h3 {\n    margin: 0 0 4px 0;\n    font-size: 14px; }\n  .ionic .item h4 {\n    margin: 0 0 4px 0;\n    font-size: 12px; }\n  .ionic .item h5, .ionic .item h6 {\n    margin: 0 0 3px 0;\n    font-size: 10px; }\n  .ionic .item p {\n    color: #666;\n    font-size: 14px;\n    margin-bottom: 2px; }\n  .ionic .item h1:last-child,\n  .ionic .item h2:last-child,\n  .ionic .item h3:last-child,\n  .ionic .item h4:last-child,\n  .ionic .item h5:last-child,\n  .ionic .item h6:last-child,\n  .ionic .item p:last-child {\n    margin-bottom: 0; }\n  .ionic .item .badge {\n    display: -moz-flex;\n    display: -ms-flexbox;\n    display: flex;\n    position: absolute;\n    top: 16px;\n    right: 32px; }\n  .ionic .item.item-button-right .badge {\n    right: 67px; }\n  .ionic .item.item-divider .badge {\n    top: 8px; }\n  .ionic .item .badge + .badge {\n    margin-right: 5px; }\n  .ionic .item.item-light {\n    border-color: #ddd;\n    background-color: #fff;\n    color: #444; }\n  .ionic .item.item-stable {\n    border-color: #b2b2b2;\n    background-color: #f8f8f8;\n    color: #444; }\n  .ionic .item.item-positive {\n    border-color: #0c60ee;\n    background-color: #387ef5;\n    color: #fff; }\n  .ionic .item.item-calm {\n    border-color: #0a9dc7;\n    background-color: #11c1f3;\n    color: #fff; }\n  .ionic .item.item-assertive {\n    border-color: #e42112;\n    background-color: #ef473a;\n    color: #fff; }\n  .ionic .item.item-balanced {\n    border-color: #28a54c;\n    background-color: #33cd5f;\n    color: #fff; }\n  .ionic .item.item-energized {\n    border-color: #e6b500;\n    background-color: #ffc900;\n    color: #fff; }\n  .ionic .item.item-royal {\n    border-color: #6b46e5;\n    background-color: #886aea;\n    color: #fff; }\n  .ionic .item.item-dark {\n    border-color: #111;\n    background-color: #444;\n    color: #fff; }\n  .ionic .item[ng-click]:hover {\n    cursor: pointer; }\n  .ionic .list-borderless .item,\n  .ionic .item-borderless {\n    border-width: 0; }\n  .ionic .item.active,\n  .ionic .item.activated,\n  .ionic .item-complex.active .item-content,\n  .ionic .item-complex.activated .item-content,\n  .ionic .item .item-content.active,\n  .ionic .item .item-content.activated {\n    border-color: #ccc;\n    background-color: #D9D9D9; }\n  .ionic .item.active.item-light,\n  .ionic .item.activated.item-light,\n  .ionic .item-complex.active .item-content.item-light,\n  .ionic .item-complex.activated .item-content.item-light,\n  .ionic .item .item-content.active.item-light,\n  .ionic .item .item-content.activated.item-light {\n    border-color: #ccc;\n    background-color: #fafafa; }\n  .ionic .item.active.item-stable,\n  .ionic .item.activated.item-stable,\n  .ionic .item-complex.active .item-content.item-stable,\n  .ionic .item-complex.activated .item-content.item-stable,\n  .ionic .item .item-content.active.item-stable,\n  .ionic .item .item-content.activated.item-stable {\n    border-color: #a2a2a2;\n    background-color: #e5e5e5; }\n  .ionic .item.active.item-positive,\n  .ionic .item.activated.item-positive,\n  .ionic .item-complex.active .item-content.item-positive,\n  .ionic .item-complex.activated .item-content.item-positive,\n  .ionic .item .item-content.active.item-positive,\n  .ionic .item .item-content.activated.item-positive {\n    border-color: #0c60ee;\n    background-color: #0c60ee; }\n  .ionic .item.active.item-calm,\n  .ionic .item.activated.item-calm,\n  .ionic .item-complex.active .item-content.item-calm,\n  .ionic .item-complex.activated .item-content.item-calm,\n  .ionic .item .item-content.active.item-calm,\n  .ionic .item .item-content.activated.item-calm {\n    border-color: #0a9dc7;\n    background-color: #0a9dc7; }\n  .ionic .item.active.item-assertive,\n  .ionic .item.activated.item-assertive,\n  .ionic .item-complex.active .item-content.item-assertive,\n  .ionic .item-complex.activated .item-content.item-assertive,\n  .ionic .item .item-content.active.item-assertive,\n  .ionic .item .item-content.activated.item-assertive {\n    border-color: #e42112;\n    background-color: #e42112; }\n  .ionic .item.active.item-balanced,\n  .ionic .item.activated.item-balanced,\n  .ionic .item-complex.active .item-content.item-balanced,\n  .ionic .item-complex.activated .item-content.item-balanced,\n  .ionic .item .item-content.active.item-balanced,\n  .ionic .item .item-content.activated.item-balanced {\n    border-color: #28a54c;\n    background-color: #28a54c; }\n  .ionic .item.active.item-energized,\n  .ionic .item.activated.item-energized,\n  .ionic .item-complex.active .item-content.item-energized,\n  .ionic .item-complex.activated .item-content.item-energized,\n  .ionic .item .item-content.active.item-energized,\n  .ionic .item .item-content.activated.item-energized {\n    border-color: #e6b500;\n    background-color: #e6b500; }\n  .ionic .item.active.item-royal,\n  .ionic .item.activated.item-royal,\n  .ionic .item-complex.active .item-content.item-royal,\n  .ionic .item-complex.activated .item-content.item-royal,\n  .ionic .item .item-content.active.item-royal,\n  .ionic .item .item-content.activated.item-royal {\n    border-color: #6b46e5;\n    background-color: #6b46e5; }\n  .ionic .item.active.item-dark,\n  .ionic .item.activated.item-dark,\n  .ionic .item-complex.active .item-content.item-dark,\n  .ionic .item-complex.activated .item-content.item-dark,\n  .ionic .item .item-content.active.item-dark,\n  .ionic .item .item-content.activated.item-dark {\n    border-color: #000;\n    background-color: #262626; }\n  .ionic .item,\n  .ionic .item h1,\n  .ionic .item h2,\n  .ionic .item h3,\n  .ionic .item h4,\n  .ionic .item h5,\n  .ionic .item h6,\n  .ionic .item p,\n  .ionic .item-content,\n  .ionic .item-content h1,\n  .ionic .item-content h2,\n  .ionic .item-content h3,\n  .ionic .item-content h4,\n  .ionic .item-content h5,\n  .ionic .item-content h6,\n  .ionic .item-content p {\n    overflow: hidden;\n    text-overflow: ellipsis;\n    white-space: nowrap; }\n  .ionic a.item {\n    color: inherit;\n    text-decoration: none; }\n  .ionic a.item:hover,\n  .ionic a.item:focus {\n    text-decoration: none; }\n  .ionic .item-complex,\n  .ionic a.item.item-complex,\n  .ionic button.item.item-complex {\n    padding: 0; }\n  .ionic .item-complex .item-content,\n  .ionic .item-radio .item-content {\n    position: relative;\n    z-index: 2;\n    padding: 16px 49px 16px 16px;\n    border: none;\n    background-color: #fff; }\n  .ionic a.item-content {\n    display: block;\n    color: inherit;\n    text-decoration: none; }\n  .ionic .item-text-wrap .item,\n  .ionic .item-text-wrap .item-content,\n  .ionic .item-text-wrap,\n  .ionic .item-text-wrap h1,\n  .ionic .item-text-wrap h2,\n  .ionic .item-text-wrap h3,\n  .ionic .item-text-wrap h4,\n  .ionic .item-text-wrap h5,\n  .ionic .item-text-wrap h6,\n  .ionic .item-text-wrap p,\n  .ionic .item-complex.item-text-wrap .item-content,\n  .ionic .item-body h1,\n  .ionic .item-body h2,\n  .ionic .item-body h3,\n  .ionic .item-body h4,\n  .ionic .item-body h5,\n  .ionic .item-body h6,\n  .ionic .item-body p {\n    overflow: visible;\n    white-space: normal; }\n  .ionic .item-complex.item-text-wrap,\n  .ionic .item-complex.item-text-wrap h1,\n  .ionic .item-complex.item-text-wrap h2,\n  .ionic .item-complex.item-text-wrap h3,\n  .ionic .item-complex.item-text-wrap h4,\n  .ionic .item-complex.item-text-wrap h5,\n  .ionic .item-complex.item-text-wrap h6,\n  .ionic .item-complex.item-text-wrap p {\n    overflow: visible;\n    white-space: normal; }\n  .ionic .item-complex.item-light > .item-content {\n    border-color: #ddd;\n    background-color: #fff;\n    color: #444; }\n  .ionic .item-complex.item-light > .item-content.active, .ionic .item-complex.item-light > .item-content:active {\n    border-color: #ccc;\n    background-color: #fafafa; }\n  .ionic .item-complex.item-stable > .item-content {\n    border-color: #b2b2b2;\n    background-color: #f8f8f8;\n    color: #444; }\n  .ionic .item-complex.item-stable > .item-content.active, .ionic .item-complex.item-stable > .item-content:active {\n    border-color: #a2a2a2;\n    background-color: #e5e5e5; }\n  .ionic .item-complex.item-positive > .item-content {\n    border-color: #0c60ee;\n    background-color: #387ef5;\n    color: #fff; }\n  .ionic .item-complex.item-positive > .item-content.active, .ionic .item-complex.item-positive > .item-content:active {\n    border-color: #0c60ee;\n    background-color: #0c60ee; }\n  .ionic .item-complex.item-calm > .item-content {\n    border-color: #0a9dc7;\n    background-color: #11c1f3;\n    color: #fff; }\n  .ionic .item-complex.item-calm > .item-content.active, .ionic .item-complex.item-calm > .item-content:active {\n    border-color: #0a9dc7;\n    background-color: #0a9dc7; }\n  .ionic .item-complex.item-assertive > .item-content {\n    border-color: #e42112;\n    background-color: #ef473a;\n    color: #fff; }\n  .ionic .item-complex.item-assertive > .item-content.active, .ionic .item-complex.item-assertive > .item-content:active {\n    border-color: #e42112;\n    background-color: #e42112; }\n  .ionic .item-complex.item-balanced > .item-content {\n    border-color: #28a54c;\n    background-color: #33cd5f;\n    color: #fff; }\n  .ionic .item-complex.item-balanced > .item-content.active, .ionic .item-complex.item-balanced > .item-content:active {\n    border-color: #28a54c;\n    background-color: #28a54c; }\n  .ionic .item-complex.item-energized > .item-content {\n    border-color: #e6b500;\n    background-color: #ffc900;\n    color: #fff; }\n  .ionic .item-complex.item-energized > .item-content.active, .ionic .item-complex.item-energized > .item-content:active {\n    border-color: #e6b500;\n    background-color: #e6b500; }\n  .ionic .item-complex.item-royal > .item-content {\n    border-color: #6b46e5;\n    background-color: #886aea;\n    color: #fff; }\n  .ionic .item-complex.item-royal > .item-content.active, .ionic .item-complex.item-royal > .item-content:active {\n    border-color: #6b46e5;\n    background-color: #6b46e5; }\n  .ionic .item-complex.item-dark > .item-content {\n    border-color: #111;\n    background-color: #444;\n    color: #fff; }\n  .ionic .item-complex.item-dark > .item-content.active, .ionic .item-complex.item-dark > .item-content:active {\n    border-color: #000;\n    background-color: #262626; }\n  .ionic .item-icon-left .icon,\n  .ionic .item-icon-right .icon {\n    display: -moz-flex;\n    display: -ms-flexbox;\n    display: flex;\n    -ms-flex-align: center;\n    -moz-align-items: center;\n    align-items: center;\n    position: absolute;\n    top: 0;\n    height: 100%;\n    font-size: 32px; }\n  .ionic .item-icon-left .icon:before,\n  .ionic .item-icon-right .icon:before {\n    display: block;\n    width: 32px;\n    text-align: center; }\n  .ionic .item .fill-icon {\n    min-width: 30px;\n    min-height: 30px;\n    font-size: 28px; }\n  .ionic .item-icon-left {\n    padding-left: 54px; }\n  .ionic .item-icon-left .icon {\n    left: 11px; }\n  .ionic .item-complex.item-icon-left {\n    padding-left: 0; }\n  .ionic .item-complex.item-icon-left .item-content {\n    padding-left: 54px; }\n  .ionic .item-icon-right {\n    padding-right: 54px; }\n  .ionic .item-icon-right .icon {\n    right: 11px; }\n  .ionic .item-complex.item-icon-right {\n    padding-right: 0; }\n  .ionic .item-complex.item-icon-right .item-content {\n    padding-right: 54px; }\n  .ionic .item-icon-left.item-icon-right .icon:first-child {\n    right: auto; }\n  .ionic .item-icon-left.item-icon-right .icon:last-child,\n  .ionic .item-icon-left .item-delete .icon {\n    left: auto; }\n  .ionic .item-icon-left .icon-accessory,\n  .ionic .item-icon-right .icon-accessory {\n    color: #ccc;\n    font-size: 16px; }\n  .ionic .item-icon-left .icon-accessory {\n    left: 3px; }\n  .ionic .item-icon-right .icon-accessory {\n    right: 3px; }\n  .ionic .item-button-left {\n    padding-left: 72px; }\n  .ionic .item-button-left > .button,\n  .ionic .item-button-left .item-content > .button {\n    display: -moz-flex;\n    display: -ms-flexbox;\n    display: flex;\n    -ms-flex-align: center;\n    -moz-align-items: center;\n    align-items: center;\n    position: absolute;\n    top: 8px;\n    left: 11px;\n    min-width: 34px;\n    min-height: 34px;\n    font-size: 18px;\n    line-height: 32px; }\n  .ionic .item-button-left > .button .icon:before,\n  .ionic .item-button-left .item-content > .button .icon:before {\n    position: relative;\n    left: auto;\n    width: auto;\n    line-height: 31px; }\n  .ionic .item-button-left > .button > .button,\n  .ionic .item-button-left .item-content > .button > .button {\n    margin: 0px 2px;\n    min-height: 34px;\n    font-size: 18px;\n    line-height: 32px; }\n  .ionic .item-button-right,\n  .ionic a.item.item-button-right,\n  .ionic button.item.item-button-right {\n    padding-right: 80px; }\n  .ionic .item-button-right > .button,\n  .ionic .item-button-right .item-content > .button,\n  .ionic .item-button-right > .buttons,\n  .ionic .item-button-right .item-content > .buttons {\n    display: -moz-flex;\n    display: -ms-flexbox;\n    display: flex;\n    -ms-flex-align: center;\n    -moz-align-items: center;\n    align-items: center;\n    position: absolute;\n    top: 8px;\n    right: 16px;\n    min-width: 34px;\n    min-height: 34px;\n    font-size: 18px;\n    line-height: 32px; }\n  .ionic .item-button-right > .button .icon:before,\n  .ionic .item-button-right .item-content > .button .icon:before,\n  .ionic .item-button-right > .buttons .icon:before,\n  .ionic .item-button-right .item-content > .buttons .icon:before {\n    position: relative;\n    left: auto;\n    width: auto;\n    line-height: 31px; }\n  .ionic .item-button-right > .button > .button,\n  .ionic .item-button-right .item-content > .button > .button,\n  .ionic .item-button-right > .buttons > .button,\n  .ionic .item-button-right .item-content > .buttons > .button {\n    margin: 0px 2px;\n    min-width: 34px;\n    min-height: 34px;\n    font-size: 18px;\n    line-height: 32px; }\n  .ionic .item-avatar,\n  .ionic .item-avatar .item-content,\n  .ionic .item-avatar-left,\n  .ionic .item-avatar-left .item-content {\n    padding-left: 72px;\n    min-height: 72px; }\n  .ionic .item-avatar > img:first-child,\n  .ionic .item-avatar .item-image,\n  .ionic .item-avatar .item-content > img:first-child,\n  .ionic .item-avatar .item-content .item-image,\n  .ionic .item-avatar-left > img:first-child,\n  .ionic .item-avatar-left .item-image,\n  .ionic .item-avatar-left .item-content > img:first-child,\n  .ionic .item-avatar-left .item-content .item-image {\n    position: absolute;\n    top: 16px;\n    left: 16px;\n    max-width: 40px;\n    max-height: 40px;\n    width: 100%;\n    height: 100%;\n    border-radius: 50%; }\n  .ionic .item-avatar-right,\n  .ionic .item-avatar-right .item-content {\n    padding-right: 72px;\n    min-height: 72px; }\n  .ionic .item-avatar-right > img:first-child,\n  .ionic .item-avatar-right .item-image,\n  .ionic .item-avatar-right .item-content > img:first-child,\n  .ionic .item-avatar-right .item-content .item-image {\n    position: absolute;\n    top: 16px;\n    right: 16px;\n    max-width: 40px;\n    max-height: 40px;\n    width: 100%;\n    height: 100%;\n    border-radius: 50%; }\n  .ionic .item-thumbnail-left,\n  .ionic .item-thumbnail-left .item-content {\n    padding-top: 8px;\n    padding-left: 106px;\n    min-height: 100px; }\n  .ionic .item-thumbnail-left > img:first-child,\n  .ionic .item-thumbnail-left .item-image,\n  .ionic .item-thumbnail-left .item-content > img:first-child,\n  .ionic .item-thumbnail-left .item-content .item-image {\n    position: absolute;\n    top: 10px;\n    left: 10px;\n    max-width: 80px;\n    max-height: 80px;\n    width: 100%;\n    height: 100%; }\n  .ionic .item-avatar.item-complex,\n  .ionic .item-avatar-left.item-complex,\n  .ionic .item-thumbnail-left.item-complex {\n    padding-top: 0;\n    padding-left: 0; }\n  .ionic .item-thumbnail-right,\n  .ionic .item-thumbnail-right .item-content {\n    padding-top: 8px;\n    padding-right: 106px;\n    min-height: 100px; }\n  .ionic .item-thumbnail-right > img:first-child,\n  .ionic .item-thumbnail-right .item-image,\n  .ionic .item-thumbnail-right .item-content > img:first-child,\n  .ionic .item-thumbnail-right .item-content .item-image {\n    position: absolute;\n    top: 10px;\n    right: 10px;\n    max-width: 80px;\n    max-height: 80px;\n    width: 100%;\n    height: 100%; }\n  .ionic .item-avatar-right.item-complex,\n  .ionic .item-thumbnail-right.item-complex {\n    padding-top: 0;\n    padding-right: 0; }\n  .ionic .item-image {\n    padding: 0;\n    text-align: center; }\n  .ionic .item-image img:first-child, .ionic .item-image .list-img {\n    width: 100%;\n    vertical-align: middle; }\n  .ionic .item-body {\n    overflow: auto;\n    padding: 16px;\n    text-overflow: inherit;\n    white-space: normal; }\n  .ionic .item-body h1, .ionic .item-body h2, .ionic .item-body h3, .ionic .item-body h4, .ionic .item-body h5, .ionic .item-body h6, .ionic .item-body p {\n    margin-top: 16px;\n    margin-bottom: 16px; }\n  .ionic .item-divider {\n    padding-top: 8px;\n    padding-bottom: 8px;\n    min-height: 30px;\n    background-color: #f5f5f5;\n    color: #222;\n    font-weight: 500; }\n  .ionic .platform-ios .item-divider-platform,\n  .ionic .item-divider-ios {\n    padding-top: 26px;\n    text-transform: uppercase;\n    font-weight: 300;\n    font-size: 13px;\n    background-color: #efeff4;\n    color: #555; }\n  .ionic .platform-android .item-divider-platform,\n  .ionic .item-divider-android {\n    font-weight: 300;\n    font-size: 13px; }\n  .ionic .item-note {\n    float: right;\n    color: #aaa;\n    font-size: 14px; }\n  .ionic .item-left-editable .item-content,\n  .ionic .item-right-editable .item-content {\n    transition-duration: 250ms;\n    transition-timing-function: ease-in-out;\n    transition-property: -webkit-transform;\n    transition-property: transform;\n    transition-property: transform, -webkit-transform; }\n  .ionic .list-left-editing .item-left-editable .item-content,\n  .ionic .item-left-editing.item-left-editable .item-content {\n    -webkit-transform: translate3d(50px, 0, 0);\n    transform: translate3d(50px, 0, 0); }\n  .ionic .item-remove-animate.ng-leave {\n    transition-duration: 300ms; }\n  .ionic .item-remove-animate.ng-leave .item-content,\n  .ionic .item-remove-animate.ng-leave:last-of-type {\n    transition-duration: 300ms;\n    transition-timing-function: ease-in;\n    transition-property: all; }\n  .ionic .item-remove-animate.ng-leave.ng-leave-active .item-content {\n    opacity: 0;\n    -webkit-transform: translate3d(-100%, 0, 0) !important;\n    transform: translate3d(-100%, 0, 0) !important; }\n  .ionic .item-remove-animate.ng-leave.ng-leave-active:last-of-type {\n    opacity: 0; }\n  .ionic .item-remove-animate.ng-leave.ng-leave-active ~ ion-item:not(.ng-leave) {\n    -webkit-transform: translate3d(0, calc(-100% + 1px), 0);\n            transform: translate3d(0, calc(-100% + 1px), 0);\n    transition-duration: 300ms;\n    transition-timing-function: cubic-bezier(0.25, 0.81, 0.24, 1);\n    transition-property: all; }\n  .ionic .item-left-edit {\n    transition: all ease-in-out 125ms;\n    position: absolute;\n    top: 0;\n    left: 0;\n    z-index: 0;\n    width: 50px;\n    height: 100%;\n    line-height: 100%;\n    display: none;\n    opacity: 0;\n    -webkit-transform: translate3d(-21px, 0, 0);\n    transform: translate3d(-21px, 0, 0); }\n  .ionic .item-left-edit .button {\n    height: 100%; }\n  .ionic .item-left-edit .button.icon {\n    display: -moz-flex;\n    display: -ms-flexbox;\n    display: flex;\n    -ms-flex-align: center;\n    -moz-align-items: center;\n    align-items: center;\n    position: absolute;\n    top: 0;\n    height: 100%; }\n  .ionic .item-left-edit.visible {\n    display: block; }\n  .ionic .item-left-edit.visible.active {\n    opacity: 1;\n    -webkit-transform: translate3d(8px, 0, 0);\n    transform: translate3d(8px, 0, 0); }\n  .ionic .list-left-editing .item-left-edit {\n    transition-delay: 125ms; }\n  .ionic .item-delete .button.icon {\n    color: #ef473a;\n    font-size: 24px; }\n  .ionic .item-delete .button.icon:hover {\n    opacity: .7; }\n  .ionic .item-right-edit {\n    transition: all ease-in-out 250ms;\n    position: absolute;\n    top: 0;\n    right: 0;\n    z-index: 3;\n    width: 75px;\n    height: 100%;\n    background: inherit;\n    padding-left: 20px;\n    display: block;\n    opacity: 0;\n    -webkit-transform: translate3d(75px, 0, 0);\n    transform: translate3d(75px, 0, 0); }\n  .ionic .item-right-edit .button {\n    min-width: 50px;\n    height: 100%; }\n  .ionic .item-right-edit .button.icon {\n    display: -moz-flex;\n    display: -ms-flexbox;\n    display: flex;\n    -ms-flex-align: center;\n    -moz-align-items: center;\n    align-items: center;\n    position: absolute;\n    top: 0;\n    height: 100%;\n    font-size: 32px; }\n  .ionic .item-right-edit.visible {\n    display: block; }\n  .ionic .item-right-edit.visible.active {\n    opacity: 1;\n    -webkit-transform: translate3d(0, 0, 0);\n    transform: translate3d(0, 0, 0); }\n  .ionic .item-reorder .button.icon {\n    color: #444;\n    font-size: 32px; }\n  .ionic .item-reordering {\n    position: absolute;\n    left: 0;\n    top: 0;\n    z-index: 9;\n    width: 100%;\n    box-shadow: 0px 0px 10px 0px #aaa; }\n  .ionic .item-reordering .item-reorder {\n    z-index: 9; }\n  .ionic .item-placeholder {\n    opacity: 0.7; }\n  .ionic .item-options {\n    position: absolute;\n    top: 0;\n    right: 0;\n    z-index: 1;\n    height: 100%; }\n  .ionic .item-options .button {\n    height: 100%;\n    border: none;\n    border-radius: 0;\n    display: -moz-inline-flex;\n    display: -ms-inline-flexbox;\n    display: inline-flex;\n    -ms-flex-align: center;\n    -moz-align-items: center;\n    align-items: center; }\n  .ionic .item-options .button:before {\n    margin: 0 auto; }\n  .ionic .list {\n    position: relative;\n    padding-top: 1px;\n    padding-bottom: 1px;\n    padding-left: 0;\n    margin-bottom: 20px; }\n  .ionic .list:last-child {\n    margin-bottom: 0px; }\n  .ionic .list:last-child.card {\n    margin-bottom: 40px; }\n  .ionic .list-header {\n    margin-top: 20px;\n    padding: 5px 15px;\n    background-color: transparent;\n    color: #222;\n    font-weight: bold; }\n  .ionic .card.list .list-item {\n    padding-right: 1px;\n    padding-left: 1px; }\n  .ionic .card,\n  .ionic .list-inset {\n    overflow: hidden;\n    margin: 20px 10px;\n    border-radius: 2px;\n    background-color: #fff; }\n  .ionic .card {\n    padding-top: 1px;\n    padding-bottom: 1px;\n    box-shadow: 0 1px 3px rgba(0, 0, 0, 0.3); }\n  .ionic .card .item {\n    border-left: 0;\n    border-right: 0; }\n  .ionic .card .item:first-child {\n    border-top: 0; }\n  .ionic .card .item:last-child {\n    border-bottom: 0; }\n  .ionic .padding .card, .ionic .padding .list-inset {\n    margin-left: 0;\n    margin-right: 0; }\n  .ionic .card .item:first-child,\n  .ionic .list-inset .item:first-child,\n  .ionic .padding > .list .item:first-child {\n    border-top-left-radius: 2px;\n    border-top-right-radius: 2px; }\n  .ionic .card .item:first-child .item-content,\n  .ionic .list-inset .item:first-child .item-content,\n  .ionic .padding > .list .item:first-child .item-content {\n    border-top-left-radius: 2px;\n    border-top-right-radius: 2px; }\n  .ionic .card .item:last-child,\n  .ionic .list-inset .item:last-child,\n  .ionic .padding > .list .item:last-child {\n    border-bottom-right-radius: 2px;\n    border-bottom-left-radius: 2px; }\n  .ionic .card .item:last-child .item-content,\n  .ionic .list-inset .item:last-child .item-content,\n  .ionic .padding > .list .item:last-child .item-content {\n    border-bottom-right-radius: 2px;\n    border-bottom-left-radius: 2px; }\n  .ionic .card .item:last-child,\n  .ionic .list-inset .item:last-child {\n    margin-bottom: -1px; }\n  .ionic .card .item,\n  .ionic .list-inset .item,\n  .ionic .padding > .list .item,\n  .ionic .padding-horizontal > .list .item {\n    margin-right: 0;\n    margin-left: 0; }\n  .ionic .card .item.item-input input,\n  .ionic .list-inset .item.item-input input,\n  .ionic .padding > .list .item.item-input input,\n  .ionic .padding-horizontal > .list .item.item-input input {\n    padding-right: 44px; }\n  .ionic .padding-left > .list .item {\n    margin-left: 0; }\n  .ionic .padding-right > .list .item {\n    margin-right: 0; }\n  .ionic .badge {\n    background-color: transparent;\n    color: #AAAAAA;\n    z-index: 1;\n    display: inline-block;\n    padding: 3px 8px;\n    min-width: 10px;\n    border-radius: 10px;\n    vertical-align: baseline;\n    text-align: center;\n    white-space: nowrap;\n    font-weight: bold;\n    font-size: 14px;\n    line-height: 16px; }\n  .ionic .badge:empty {\n    display: none; }\n  .ionic .tabs .tab-item .badge.badge-light,\n  .ionic .badge.badge-light {\n    background-color: #fff;\n    color: #444; }\n  .ionic .tabs .tab-item .badge.badge-stable,\n  .ionic .badge.badge-stable {\n    background-color: #f8f8f8;\n    color: #444; }\n  .ionic .tabs .tab-item .badge.badge-positive,\n  .ionic .badge.badge-positive {\n    background-color: #387ef5;\n    color: #fff; }\n  .ionic .tabs .tab-item .badge.badge-calm,\n  .ionic .badge.badge-calm {\n    background-color: #11c1f3;\n    color: #fff; }\n  .ionic .tabs .tab-item .badge.badge-assertive,\n  .ionic .badge.badge-assertive {\n    background-color: #ef473a;\n    color: #fff; }\n  .ionic .tabs .tab-item .badge.badge-balanced,\n  .ionic .badge.badge-balanced {\n    background-color: #33cd5f;\n    color: #fff; }\n  .ionic .tabs .tab-item .badge.badge-energized,\n  .ionic .badge.badge-energized {\n    background-color: #ffc900;\n    color: #fff; }\n  .ionic .tabs .tab-item .badge.badge-royal,\n  .ionic .badge.badge-royal {\n    background-color: #886aea;\n    color: #fff; }\n  .ionic .tabs .tab-item .badge.badge-dark,\n  .ionic .badge.badge-dark {\n    background-color: #444;\n    color: #fff; }\n  .ionic .button .badge {\n    position: relative;\n    top: -1px; }\n  .ionic .slider {\n    position: relative;\n    visibility: hidden;\n    overflow: hidden; }\n  .ionic .slider-slides {\n    position: relative;\n    height: 100%; }\n  .ionic .slider-slide {\n    position: relative;\n    display: block;\n    float: left;\n    width: 100%;\n    height: 100%;\n    vertical-align: top; }\n  .ionic .slider-slide-image > img {\n    width: 100%; }\n  .ionic .slider-pager {\n    position: absolute;\n    bottom: 20px;\n    z-index: 1;\n    width: 100%;\n    height: 15px;\n    text-align: center; }\n  .ionic .slider-pager .slider-pager-page {\n    display: inline-block;\n    margin: 0px 3px;\n    width: 15px;\n    color: #000;\n    text-decoration: none;\n    opacity: 0.3; }\n  .ionic .slider-pager .slider-pager-page.active {\n    transition: opacity 0.4s ease-in;\n    opacity: 1; }\n  .ionic .slider-slide.ng-enter,\n  .ionic .slider-slide.ng-leave,\n  .ionic .slider-slide.ng-animate,\n  .ionic .slider-pager-page.ng-enter,\n  .ionic .slider-pager-page.ng-leave,\n  .ionic .slider-pager-page.ng-animate {\n    transition: none !important; }\n  .ionic .slider-slide.ng-animate,\n  .ionic .slider-pager-page.ng-animate {\n    -webkit-animation: none 0s;\n    animation: none 0s; }\n  .ionic .scroll-refresher {\n    position: absolute;\n    top: -60px;\n    right: 0;\n    left: 0;\n    overflow: hidden;\n    margin: auto;\n    height: 60px; }\n  .ionic .scroll-refresher .ionic-refresher-content {\n    position: absolute;\n    bottom: 15px;\n    left: 0;\n    width: 100%;\n    color: #666666;\n    text-align: center;\n    font-size: 30px; }\n  .ionic .scroll-refresher .ionic-refresher-content .text-refreshing,\n  .ionic .scroll-refresher .ionic-refresher-content .text-pulling {\n    font-size: 16px;\n    line-height: 16px; }\n  .ionic .scroll-refresher .ionic-refresher-content.ionic-refresher-with-text {\n    bottom: 10px; }\n  .ionic .scroll-refresher .icon-refreshing,\n  .ionic .scroll-refresher .icon-pulling {\n    width: 100%;\n    -webkit-backface-visibility: hidden;\n    backface-visibility: hidden;\n    -webkit-transform-style: preserve-3d;\n    transform-style: preserve-3d; }\n  .ionic .scroll-refresher .icon-pulling {\n    -webkit-animation-name: refresh-spin-back;\n    animation-name: refresh-spin-back;\n    -webkit-animation-duration: 200ms;\n    animation-duration: 200ms;\n    -webkit-animation-timing-function: linear;\n    animation-timing-function: linear;\n    -webkit-animation-fill-mode: none;\n    animation-fill-mode: none;\n    -webkit-transform: translate3d(0, 0, 0) rotate(0deg);\n    transform: translate3d(0, 0, 0) rotate(0deg); }\n  .ionic .scroll-refresher .icon-refreshing,\n  .ionic .scroll-refresher .text-refreshing {\n    display: none; }\n  .ionic .scroll-refresher .icon-refreshing {\n    -webkit-animation-duration: 1.5s;\n    animation-duration: 1.5s; }\n  .ionic .scroll-refresher.active .icon-pulling:not(.pulling-rotation-disabled) {\n    -webkit-animation-name: refresh-spin;\n    animation-name: refresh-spin;\n    -webkit-transform: translate3d(0, 0, 0) rotate(-180deg);\n    transform: translate3d(0, 0, 0) rotate(-180deg); }\n  .ionic .scroll-refresher.active.refreshing {\n    transition: -webkit-transform 0.2s;\n    transition: transform 0.2s;\n    transition: transform 0.2s, -webkit-transform 0.2s;\n    -webkit-transform: scale(1, 1);\n    transform: scale(1, 1); }\n  .ionic .scroll-refresher.active.refreshing .icon-pulling,\n  .ionic .scroll-refresher.active.refreshing .text-pulling {\n    display: none; }\n  .ionic .scroll-refresher.active.refreshing .icon-refreshing,\n  .ionic .scroll-refresher.active.refreshing .text-refreshing {\n    display: block; }\n  .ionic .scroll-refresher.active.refreshing.refreshing-tail {\n    -webkit-transform: scale(0, 0);\n    transform: scale(0, 0); }\n  .ionic .overflow-scroll > .scroll {\n    -webkit-overflow-scrolling: touch;\n    width: 100%; }\n  .ionic .overflow-scroll > .scroll.overscroll {\n    position: fixed;\n    right: 0;\n    left: 0; }\n  .ionic .overflow-scroll.padding > .scroll.overscroll {\n    padding: 10px; }\n\n@-webkit-keyframes refresh-spin {\n  0% {\n    -webkit-transform: translate3d(0, 0, 0) rotate(0); }\n  100% {\n    -webkit-transform: translate3d(0, 0, 0) rotate(180deg); } }\n\n@keyframes refresh-spin {\n  0% {\n    -webkit-transform: translate3d(0, 0, 0) rotate(0);\n            transform: translate3d(0, 0, 0) rotate(0); }\n  100% {\n    -webkit-transform: translate3d(0, 0, 0) rotate(180deg);\n            transform: translate3d(0, 0, 0) rotate(180deg); } }\n\n@-webkit-keyframes refresh-spin-back {\n  0% {\n    -webkit-transform: translate3d(0, 0, 0) rotate(180deg); }\n  100% {\n    -webkit-transform: translate3d(0, 0, 0) rotate(0); } }\n\n@keyframes refresh-spin-back {\n  0% {\n    -webkit-transform: translate3d(0, 0, 0) rotate(180deg);\n            transform: translate3d(0, 0, 0) rotate(180deg); }\n  100% {\n    -webkit-transform: translate3d(0, 0, 0) rotate(0);\n            transform: translate3d(0, 0, 0) rotate(0); } }\n  .ionic .spinner {\n    stroke: #444;\n    fill: #444; }\n  .ionic .spinner svg {\n    width: 28px;\n    height: 28px; }\n  .ionic .spinner.spinner-light {\n    stroke: #fff;\n    fill: #fff; }\n  .ionic .spinner.spinner-stable {\n    stroke: #f8f8f8;\n    fill: #f8f8f8; }\n  .ionic .spinner.spinner-positive {\n    stroke: #387ef5;\n    fill: #387ef5; }\n  .ionic .spinner.spinner-calm {\n    stroke: #11c1f3;\n    fill: #11c1f3; }\n  .ionic .spinner.spinner-balanced {\n    stroke: #33cd5f;\n    fill: #33cd5f; }\n  .ionic .spinner.spinner-assertive {\n    stroke: #ef473a;\n    fill: #ef473a; }\n  .ionic .spinner.spinner-energized {\n    stroke: #ffc900;\n    fill: #ffc900; }\n  .ionic .spinner.spinner-royal {\n    stroke: #886aea;\n    fill: #886aea; }\n  .ionic .spinner.spinner-dark {\n    stroke: #444;\n    fill: #444; }\n  .ionic .spinner-android {\n    stroke: #4b8bf4; }\n  .ionic .spinner-ios,\n  .ionic .spinner-ios-small {\n    stroke: #69717d; }\n  .ionic .spinner-spiral .stop1 {\n    stop-color: #fff;\n    stop-opacity: 0; }\n  .ionic .spinner-spiral.spinner-light .stop1 {\n    stop-color: #444; }\n  .ionic .spinner-spiral.spinner-light .stop2 {\n    stop-color: #fff; }\n  .ionic .spinner-spiral.spinner-stable .stop2 {\n    stop-color: #f8f8f8; }\n  .ionic .spinner-spiral.spinner-positive .stop2 {\n    stop-color: #387ef5; }\n  .ionic .spinner-spiral.spinner-calm .stop2 {\n    stop-color: #11c1f3; }\n  .ionic .spinner-spiral.spinner-balanced .stop2 {\n    stop-color: #33cd5f; }\n  .ionic .spinner-spiral.spinner-assertive .stop2 {\n    stop-color: #ef473a; }\n  .ionic .spinner-spiral.spinner-energized .stop2 {\n    stop-color: #ffc900; }\n  .ionic .spinner-spiral.spinner-royal .stop2 {\n    stop-color: #886aea; }\n  .ionic .spinner-spiral.spinner-dark .stop2 {\n    stop-color: #444; }\n  .ionic form {\n    margin: 0 0 1.42857; }\n  .ionic legend {\n    display: block;\n    margin-bottom: 1.42857;\n    padding: 0;\n    width: 100%;\n    border: 1px solid #ddd;\n    color: #444;\n    font-size: 21px;\n    line-height: 2.85714; }\n  .ionic legend small {\n    color: #f8f8f8;\n    font-size: 1.07143; }\n  .ionic label,\n  .ionic input,\n  .ionic button,\n  .ionic select,\n  .ionic textarea {\n    font-weight: normal;\n    font-size: 14px;\n    line-height: 1.42857; }\n  .ionic input,\n  .ionic button,\n  .ionic select,\n  .ionic textarea {\n    font-family: \"Helvetica Neue\", \"Roboto\", \"Segoe UI\", sans-serif; }\n  .ionic .item-input {\n    display: -moz-flex;\n    display: -ms-flexbox;\n    display: flex;\n    -ms-flex-align: center;\n    -moz-align-items: center;\n    align-items: center;\n    position: relative;\n    overflow: hidden;\n    padding: 6px 0 5px 16px; }\n  .ionic .item-input input {\n    border-radius: 0;\n    -moz-flex: 1 220px;\n    -ms-flex: 1 220px;\n    flex: 1 220px;\n    -webkit-appearance: none;\n    -moz-appearance: none;\n    appearance: none;\n    margin: 0;\n    padding-right: 24px;\n    background-color: transparent; }\n  .ionic .item-input .button .icon {\n    -moz-flex: 0 0 24px;\n    -ms-flex: 0 0 24px;\n    flex: 0 0 24px;\n    position: static;\n    display: inline-block;\n    height: auto;\n    text-align: center;\n    font-size: 16px; }\n  .ionic .item-input .button-bar {\n    border-radius: 0;\n    -moz-flex: 1 0 220px;\n    -ms-flex: 1 0 220px;\n    flex: 1 0 220px;\n    -webkit-appearance: none;\n    -moz-appearance: none;\n    appearance: none; }\n  .ionic .item-input .icon {\n    min-width: 14px; }\n  .ionic .platform-windowsphone .item-input input {\n    -ms-flex-negative: 1;\n        flex-shrink: 1; }\n  .ionic .item-input-inset {\n    display: -moz-flex;\n    display: -ms-flexbox;\n    display: flex;\n    -ms-flex-align: center;\n    -moz-align-items: center;\n    align-items: center;\n    position: relative;\n    overflow: hidden;\n    padding: 10.66667px; }\n  .ionic .item-input-wrapper {\n    display: -moz-flex;\n    display: -ms-flexbox;\n    display: flex;\n    -moz-flex: 1 0;\n    -ms-flex: 1 0;\n    flex: 1 0;\n    -ms-flex-align: center;\n    -moz-align-items: center;\n    align-items: center;\n    border-radius: 4px;\n    padding-right: 8px;\n    padding-left: 8px;\n    background: #eee; }\n  .ionic .item-input-inset .item-input-wrapper input {\n    padding-left: 4px;\n    height: 29px;\n    background: transparent;\n    line-height: 18px; }\n  .ionic .item-input-wrapper ~ .button {\n    margin-left: 10.66667px; }\n  .ionic .input-label {\n    display: table;\n    padding: 7px 10px 7px 0px;\n    max-width: 200px;\n    width: 35%;\n    color: #444;\n    font-size: 16px; }\n  .ionic .placeholder-icon {\n    color: #aaa; }\n  .ionic .placeholder-icon:first-child {\n    padding-right: 6px; }\n  .ionic .placeholder-icon:last-child {\n    padding-left: 6px; }\n  .ionic .item-stacked-label {\n    display: block;\n    background-color: transparent;\n    box-shadow: none; }\n  .ionic .item-stacked-label .input-label, .ionic .item-stacked-label .icon {\n    display: inline-block;\n    padding: 4px 0 0 0px;\n    vertical-align: middle; }\n  .ionic .item-stacked-label input,\n  .ionic .item-stacked-label textarea {\n    border-radius: 2px;\n    padding: 4px 8px 3px 0;\n    border: none;\n    background-color: #fff; }\n  .ionic .item-stacked-label input {\n    overflow: hidden;\n    height: 46px; }\n  .ionic .item-floating-label {\n    display: block;\n    background-color: transparent;\n    box-shadow: none; }\n  .ionic .item-floating-label .input-label {\n    position: relative;\n    padding: 5px 0 0 0;\n    opacity: 0;\n    top: 10px;\n    transition: opacity 0.15s ease-in, top 0.2s linear; }\n  .ionic .item-floating-label .input-label.has-input {\n    opacity: 1;\n    top: 0;\n    transition: opacity 0.15s ease-in, top 0.2s linear; }\n  .ionic textarea,\n  .ionic input[type=\"text\"],\n  .ionic input[type=\"password\"],\n  .ionic input[type=\"datetime\"],\n  .ionic input[type=\"datetime-local\"],\n  .ionic input[type=\"date\"],\n  .ionic input[type=\"month\"],\n  .ionic input[type=\"time\"],\n  .ionic input[type=\"week\"],\n  .ionic input[type=\"number\"],\n  .ionic input[type=\"email\"],\n  .ionic input[type=\"url\"],\n  .ionic input[type=\"search\"],\n  .ionic input[type=\"tel\"],\n  .ionic input[type=\"color\"] {\n    display: block;\n    padding-top: 2px;\n    padding-left: 0;\n    height: 34px;\n    color: #111;\n    vertical-align: middle;\n    font-size: 14px;\n    line-height: 16px; }\n  .ionic .platform-ios input[type=\"datetime-local\"],\n  .ionic .platform-ios input[type=\"date\"],\n  .ionic .platform-ios input[type=\"month\"],\n  .ionic .platform-ios input[type=\"time\"],\n  .ionic .platform-ios input[type=\"week\"],\n  .ionic .platform-android input[type=\"datetime-local\"],\n  .ionic .platform-android input[type=\"date\"],\n  .ionic .platform-android input[type=\"month\"],\n  .ionic .platform-android input[type=\"time\"],\n  .ionic .platform-android input[type=\"week\"] {\n    padding-top: 8px; }\n  .ionic .item-input input,\n  .ionic .item-input textarea {\n    width: 100%; }\n  .ionic textarea {\n    padding-left: 0; }\n  .ionic textarea::-moz-placeholder {\n    color: #aaaaaa; }\n  .ionic textarea:-ms-input-placeholder {\n    color: #aaaaaa; }\n  .ionic textarea::-webkit-input-placeholder {\n    color: #aaaaaa;\n    text-indent: -3px; }\n  .ionic textarea {\n    height: auto; }\n  .ionic textarea,\n  .ionic input[type=\"text\"],\n  .ionic input[type=\"password\"],\n  .ionic input[type=\"datetime\"],\n  .ionic input[type=\"datetime-local\"],\n  .ionic input[type=\"date\"],\n  .ionic input[type=\"month\"],\n  .ionic input[type=\"time\"],\n  .ionic input[type=\"week\"],\n  .ionic input[type=\"number\"],\n  .ionic input[type=\"email\"],\n  .ionic input[type=\"url\"],\n  .ionic input[type=\"search\"],\n  .ionic input[type=\"tel\"],\n  .ionic input[type=\"color\"] {\n    border: 0; }\n  .ionic input[type=\"radio\"],\n  .ionic input[type=\"checkbox\"] {\n    margin: 0;\n    line-height: normal; }\n  .ionic .item-input input[type=\"file\"],\n  .ionic .item-input input[type=\"image\"],\n  .ionic .item-input input[type=\"submit\"],\n  .ionic .item-input input[type=\"reset\"],\n  .ionic .item-input input[type=\"button\"],\n  .ionic .item-input input[type=\"radio\"],\n  .ionic .item-input input[type=\"checkbox\"] {\n    width: auto; }\n  .ionic input[type=\"file\"] {\n    line-height: 34px; }\n  .ionic .previous-input-focus,\n  .ionic .cloned-text-input + input,\n  .ionic .cloned-text-input + textarea {\n    position: absolute !important;\n    left: -9999px;\n    width: 200px; }\n  .ionic input::-moz-placeholder,\n  .ionic textarea::-moz-placeholder {\n    color: #aaaaaa; }\n  .ionic input:-ms-input-placeholder,\n  .ionic textarea:-ms-input-placeholder {\n    color: #aaaaaa; }\n  .ionic input::-webkit-input-placeholder,\n  .ionic textarea::-webkit-input-placeholder {\n    color: #aaaaaa;\n    text-indent: 0; }\n  .ionic input[disabled],\n  .ionic select[disabled],\n  .ionic textarea[disabled],\n  .ionic input[readonly]:not(.cloned-text-input),\n  .ionic textarea[readonly]:not(.cloned-text-input),\n  .ionic select[readonly] {\n    background-color: #f8f8f8;\n    cursor: not-allowed; }\n  .ionic input[type=\"radio\"][disabled],\n  .ionic input[type=\"checkbox\"][disabled],\n  .ionic input[type=\"radio\"][readonly],\n  .ionic input[type=\"checkbox\"][readonly] {\n    background-color: transparent; }\n  .ionic .checkbox {\n    position: relative;\n    display: inline-block;\n    padding: 7px 7px;\n    cursor: pointer; }\n  .ionic .checkbox input:before,\n  .ionic .checkbox .checkbox-icon:before {\n    border-color: #ddd; }\n  .ionic .checkbox input:checked:before,\n  .ionic .checkbox input:checked + .checkbox-icon:before {\n    background: #387ef5;\n    border-color: #387ef5; }\n  .ionic .checkbox-light input:before,\n  .ionic .checkbox-light .checkbox-icon:before {\n    border-color: #ddd; }\n  .ionic .checkbox-light input:checked:before,\n  .ionic .checkbox-light input:checked + .checkbox-icon:before {\n    background: #ddd;\n    border-color: #ddd; }\n  .ionic .checkbox-stable input:before,\n  .ionic .checkbox-stable .checkbox-icon:before {\n    border-color: #b2b2b2; }\n  .ionic .checkbox-stable input:checked:before,\n  .ionic .checkbox-stable input:checked + .checkbox-icon:before {\n    background: #b2b2b2;\n    border-color: #b2b2b2; }\n  .ionic .checkbox-positive input:before,\n  .ionic .checkbox-positive .checkbox-icon:before {\n    border-color: #387ef5; }\n  .ionic .checkbox-positive input:checked:before,\n  .ionic .checkbox-positive input:checked + .checkbox-icon:before {\n    background: #387ef5;\n    border-color: #387ef5; }\n  .ionic .checkbox-calm input:before,\n  .ionic .checkbox-calm .checkbox-icon:before {\n    border-color: #11c1f3; }\n  .ionic .checkbox-calm input:checked:before,\n  .ionic .checkbox-calm input:checked + .checkbox-icon:before {\n    background: #11c1f3;\n    border-color: #11c1f3; }\n  .ionic .checkbox-assertive input:before,\n  .ionic .checkbox-assertive .checkbox-icon:before {\n    border-color: #ef473a; }\n  .ionic .checkbox-assertive input:checked:before,\n  .ionic .checkbox-assertive input:checked + .checkbox-icon:before {\n    background: #ef473a;\n    border-color: #ef473a; }\n  .ionic .checkbox-balanced input:before,\n  .ionic .checkbox-balanced .checkbox-icon:before {\n    border-color: #33cd5f; }\n  .ionic .checkbox-balanced input:checked:before,\n  .ionic .checkbox-balanced input:checked + .checkbox-icon:before {\n    background: #33cd5f;\n    border-color: #33cd5f; }\n  .ionic .checkbox-energized input:before,\n  .ionic .checkbox-energized .checkbox-icon:before {\n    border-color: #ffc900; }\n  .ionic .checkbox-energized input:checked:before,\n  .ionic .checkbox-energized input:checked + .checkbox-icon:before {\n    background: #ffc900;\n    border-color: #ffc900; }\n  .ionic .checkbox-royal input:before,\n  .ionic .checkbox-royal .checkbox-icon:before {\n    border-color: #886aea; }\n  .ionic .checkbox-royal input:checked:before,\n  .ionic .checkbox-royal input:checked + .checkbox-icon:before {\n    background: #886aea;\n    border-color: #886aea; }\n  .ionic .checkbox-dark input:before,\n  .ionic .checkbox-dark .checkbox-icon:before {\n    border-color: #444; }\n  .ionic .checkbox-dark input:checked:before,\n  .ionic .checkbox-dark input:checked + .checkbox-icon:before {\n    background: #444;\n    border-color: #444; }\n  .ionic .checkbox input:disabled:before,\n  .ionic .checkbox input:disabled + .checkbox-icon:before {\n    border-color: #ddd; }\n  .ionic .checkbox input:disabled:checked:before,\n  .ionic .checkbox input:disabled:checked + .checkbox-icon:before {\n    background: #ddd; }\n  .ionic .checkbox.checkbox-input-hidden input {\n    display: none !important; }\n  .ionic .checkbox input,\n  .ionic .checkbox-icon {\n    position: relative;\n    width: 28px;\n    height: 28px;\n    display: block;\n    border: 0;\n    background: transparent;\n    cursor: pointer;\n    -webkit-appearance: none; }\n  .ionic .checkbox input:before,\n  .ionic .checkbox-icon:before {\n    display: table;\n    width: 100%;\n    height: 100%;\n    border-width: 1px;\n    border-style: solid;\n    border-radius: 28px;\n    background: #fff;\n    content: ' ';\n    transition: background-color 20ms ease-in-out; }\n  .ionic .checkbox input:checked:before,\n  .ionic input:checked + .checkbox-icon:before {\n    border-width: 2px; }\n  .ionic .checkbox input:after,\n  .ionic .checkbox-icon:after {\n    transition: opacity 0.05s ease-in-out;\n    -webkit-transform: rotate(-45deg);\n    transform: rotate(-45deg);\n    position: absolute;\n    top: 33%;\n    left: 25%;\n    display: table;\n    width: 14px;\n    height: 6px;\n    border: 1px solid #fff;\n    border-top: 0;\n    border-right: 0;\n    content: ' ';\n    opacity: 0; }\n  .ionic .platform-android .checkbox-platform input:before,\n  .ionic .platform-android .checkbox-platform .checkbox-icon:before,\n  .ionic .checkbox-square input:before,\n  .ionic .checkbox-square .checkbox-icon:before {\n    border-radius: 2px;\n    width: 72%;\n    height: 72%;\n    margin-top: 14%;\n    margin-left: 14%;\n    border-width: 2px; }\n  .ionic .platform-android .checkbox-platform input:after,\n  .ionic .platform-android .checkbox-platform .checkbox-icon:after,\n  .ionic .checkbox-square input:after,\n  .ionic .checkbox-square .checkbox-icon:after {\n    border-width: 2px;\n    top: 19%;\n    left: 25%;\n    width: 13px;\n    height: 7px; }\n  .ionic .grade-c .checkbox input:after,\n  .ionic .grade-c .checkbox-icon:after {\n    -webkit-transform: rotate(0);\n    transform: rotate(0);\n    top: 3px;\n    left: 4px;\n    border: none;\n    color: #fff;\n    content: '\\2713';\n    font-weight: bold;\n    font-size: 20px; }\n  .ionic .checkbox input:checked:after,\n  .ionic input:checked + .checkbox-icon:after {\n    opacity: 1; }\n  .ionic .item-checkbox {\n    padding-left: 60px; }\n  .ionic .item-checkbox.active {\n    box-shadow: none; }\n  .ionic .item-checkbox .checkbox {\n    position: absolute;\n    top: 50%;\n    right: 8px;\n    left: 8px;\n    z-index: 3;\n    margin-top: -21px; }\n  .ionic .item-checkbox.item-checkbox-right {\n    padding-right: 60px;\n    padding-left: 16px; }\n  .ionic .item-checkbox-right .checkbox input,\n  .ionic .item-checkbox-right .checkbox-icon {\n    float: right; }\n  .ionic .item-toggle {\n    pointer-events: none; }\n  .ionic .toggle {\n    position: relative;\n    display: inline-block;\n    pointer-events: auto;\n    margin: -5px;\n    padding: 5px; }\n  .ionic .toggle input:checked + .track {\n    border-color: #4cd964;\n    background-color: #4cd964; }\n  .ionic .toggle.dragging .handle {\n    background-color: #f2f2f2 !important; }\n  .ionic .toggle.toggle-light input:checked + .track {\n    border-color: #ddd;\n    background-color: #ddd; }\n  .ionic .toggle.toggle-stable input:checked + .track {\n    border-color: #b2b2b2;\n    background-color: #b2b2b2; }\n  .ionic .toggle.toggle-positive input:checked + .track {\n    border-color: #387ef5;\n    background-color: #387ef5; }\n  .ionic .toggle.toggle-calm input:checked + .track {\n    border-color: #11c1f3;\n    background-color: #11c1f3; }\n  .ionic .toggle.toggle-assertive input:checked + .track {\n    border-color: #ef473a;\n    background-color: #ef473a; }\n  .ionic .toggle.toggle-balanced input:checked + .track {\n    border-color: #33cd5f;\n    background-color: #33cd5f; }\n  .ionic .toggle.toggle-energized input:checked + .track {\n    border-color: #ffc900;\n    background-color: #ffc900; }\n  .ionic .toggle.toggle-royal input:checked + .track {\n    border-color: #886aea;\n    background-color: #886aea; }\n  .ionic .toggle.toggle-dark input:checked + .track {\n    border-color: #444;\n    background-color: #444; }\n  .ionic .toggle input {\n    display: none; }\n  .ionic .toggle .track {\n    transition-timing-function: ease-in-out;\n    transition-duration: 0.3s;\n    transition-property: background-color, border;\n    display: inline-block;\n    box-sizing: border-box;\n    width: 51px;\n    height: 31px;\n    border: solid 2px #e6e6e6;\n    border-radius: 20px;\n    background-color: #fff;\n    content: ' ';\n    cursor: pointer;\n    pointer-events: none; }\n  .ionic .platform-android4_2 .toggle .track {\n    -webkit-background-clip: padding-box; }\n  .ionic .toggle .handle {\n    transition: 0.3s cubic-bezier(0, 1.1, 1, 1.1);\n    transition-property: background-color, -webkit-transform;\n    transition-property: background-color, transform;\n    transition-property: background-color, transform, -webkit-transform;\n    position: absolute;\n    display: block;\n    width: 27px;\n    height: 27px;\n    border-radius: 27px;\n    background-color: #fff;\n    top: 7px;\n    left: 7px;\n    box-shadow: 0 2px 7px rgba(0, 0, 0, 0.35), 0 1px 1px rgba(0, 0, 0, 0.15); }\n  .ionic .toggle .handle:before {\n    position: absolute;\n    top: -4px;\n    left: -21.5px;\n    padding: 18.5px 34px;\n    content: \" \"; }\n  .ionic .toggle input:checked + .track .handle {\n    -webkit-transform: translate3d(20px, 0, 0);\n    transform: translate3d(20px, 0, 0);\n    background-color: #fff; }\n  .ionic .item-toggle.active {\n    box-shadow: none; }\n  .ionic .item-toggle,\n  .ionic .item-toggle.item-complex .item-content {\n    padding-right: 99px; }\n  .ionic .item-toggle.item-complex {\n    padding-right: 0; }\n  .ionic .item-toggle .toggle {\n    position: absolute;\n    top: 10px;\n    right: 16px;\n    z-index: 3; }\n  .ionic .toggle input:disabled + .track {\n    opacity: .6; }\n  .ionic .toggle-small .track {\n    border: 0;\n    width: 34px;\n    height: 15px;\n    background: #9e9e9e; }\n  .ionic .toggle-small input:checked + .track {\n    background: rgba(0, 150, 137, 0.5); }\n  .ionic .toggle-small .handle {\n    top: 2px;\n    left: 4px;\n    width: 21px;\n    height: 21px;\n    box-shadow: 0 2px 5px rgba(0, 0, 0, 0.25); }\n  .ionic .toggle-small input:checked + .track .handle {\n    -webkit-transform: translate3d(16px, 0, 0);\n    transform: translate3d(16px, 0, 0);\n    background: #009689; }\n  .ionic .toggle-small.item-toggle .toggle {\n    top: 19px; }\n  .ionic .toggle-small .toggle-light input:checked + .track {\n    background-color: rgba(221, 221, 221, 0.5); }\n  .ionic .toggle-small .toggle-light input:checked + .track .handle {\n    background-color: #ddd; }\n  .ionic .toggle-small .toggle-stable input:checked + .track {\n    background-color: rgba(178, 178, 178, 0.5); }\n  .ionic .toggle-small .toggle-stable input:checked + .track .handle {\n    background-color: #b2b2b2; }\n  .ionic .toggle-small .toggle-positive input:checked + .track {\n    background-color: rgba(56, 126, 245, 0.5); }\n  .ionic .toggle-small .toggle-positive input:checked + .track .handle {\n    background-color: #387ef5; }\n  .ionic .toggle-small .toggle-calm input:checked + .track {\n    background-color: rgba(17, 193, 243, 0.5); }\n  .ionic .toggle-small .toggle-calm input:checked + .track .handle {\n    background-color: #11c1f3; }\n  .ionic .toggle-small .toggle-assertive input:checked + .track {\n    background-color: rgba(239, 71, 58, 0.5); }\n  .ionic .toggle-small .toggle-assertive input:checked + .track .handle {\n    background-color: #ef473a; }\n  .ionic .toggle-small .toggle-balanced input:checked + .track {\n    background-color: rgba(51, 205, 95, 0.5); }\n  .ionic .toggle-small .toggle-balanced input:checked + .track .handle {\n    background-color: #33cd5f; }\n  .ionic .toggle-small .toggle-energized input:checked + .track {\n    background-color: rgba(255, 201, 0, 0.5); }\n  .ionic .toggle-small .toggle-energized input:checked + .track .handle {\n    background-color: #ffc900; }\n  .ionic .toggle-small .toggle-royal input:checked + .track {\n    background-color: rgba(136, 106, 234, 0.5); }\n  .ionic .toggle-small .toggle-royal input:checked + .track .handle {\n    background-color: #886aea; }\n  .ionic .toggle-small .toggle-dark input:checked + .track {\n    background-color: rgba(68, 68, 68, 0.5); }\n  .ionic .toggle-small .toggle-dark input:checked + .track .handle {\n    background-color: #444; }\n  .ionic .item-radio {\n    padding: 0; }\n  .ionic .item-radio:hover {\n    cursor: pointer; }\n  .ionic .item-radio .item-content {\n    /* give some room to the right for the checkmark icon */\n    padding-right: 64px; }\n  .ionic .item-radio .radio-icon {\n    /* checkmark icon will be hidden by default */\n    position: absolute;\n    top: 0;\n    right: 0;\n    z-index: 3;\n    visibility: hidden;\n    padding: 14px;\n    height: 100%;\n    font-size: 24px; }\n  .ionic .item-radio input {\n    /* hide any radio button inputs elements (the ugly circles) */\n    position: absolute;\n    left: -9999px; }\n  .ionic .item-radio input:checked + .radio-content .item-content {\n    /* style the item content when its checked */\n    background: #f7f7f7; }\n  .ionic .item-radio input:checked + .radio-content .radio-icon {\n    /* show the checkmark icon when its checked */\n    visibility: visible; }\n  .ionic .range input {\n    display: inline-block;\n    overflow: hidden;\n    margin-top: 5px;\n    margin-bottom: 5px;\n    padding-right: 2px;\n    padding-left: 1px;\n    width: auto;\n    height: 43px;\n    outline: none;\n    background: linear-gradient(to right, #ccc 0%, #ccc 100%);\n    background-position: center;\n    background-size: 99% 2px;\n    background-repeat: no-repeat;\n    -webkit-appearance: none; }\n  .ionic .range input::-webkit-slider-thumb {\n    position: relative;\n    width: 28px;\n    height: 28px;\n    border-radius: 50%;\n    background-color: #fff;\n    box-shadow: 0 0 2px rgba(0, 0, 0, 0.3), 0 3px 5px rgba(0, 0, 0, 0.2);\n    cursor: pointer;\n    -webkit-appearance: none;\n    border: 0; }\n  .ionic .range input::-webkit-slider-thumb:before {\n    /* what creates the colorful line on the left side of the slider */\n    position: absolute;\n    top: 13px;\n    left: -2001px;\n    width: 2000px;\n    height: 2px;\n    background: #444;\n    content: ' '; }\n  .ionic .range input::-webkit-slider-thumb:after {\n    /* create a larger (but hidden) hit area */\n    position: absolute;\n    top: -15px;\n    left: -15px;\n    padding: 30px;\n    content: ' '; }\n  .ionic .range input::-ms-track {\n    background: transparent;\n    border-color: transparent;\n    border-width: 11px 0 16px;\n    color: transparent;\n    margin-top: 20px; }\n  .ionic .range input::-ms-thumb {\n    width: 28px;\n    height: 28px;\n    border-radius: 50%;\n    background-color: #fff;\n    border-color: #fff;\n    box-shadow: 0 0 2px rgba(0, 0, 0, 0.3), 0 3px 5px rgba(0, 0, 0, 0.2);\n    margin-left: 1px;\n    margin-right: 1px;\n    outline: none; }\n  .ionic .range input::-ms-fill-lower {\n    height: 2px;\n    background: #444; }\n  .ionic .range input::-ms-fill-upper {\n    height: 2px;\n    background: #ccc; }\n  .ionic .range {\n    display: -moz-flex;\n    display: -ms-flexbox;\n    display: flex;\n    -ms-flex-align: center;\n    -moz-align-items: center;\n    align-items: center;\n    padding: 2px 11px; }\n  .ionic .range.range-light input::-webkit-slider-thumb:before {\n    background: #ddd; }\n  .ionic .range.range-light input::-ms-fill-lower {\n    background: #ddd; }\n  .ionic .range.range-stable input::-webkit-slider-thumb:before {\n    background: #b2b2b2; }\n  .ionic .range.range-stable input::-ms-fill-lower {\n    background: #b2b2b2; }\n  .ionic .range.range-positive input::-webkit-slider-thumb:before {\n    background: #387ef5; }\n  .ionic .range.range-positive input::-ms-fill-lower {\n    background: #387ef5; }\n  .ionic .range.range-calm input::-webkit-slider-thumb:before {\n    background: #11c1f3; }\n  .ionic .range.range-calm input::-ms-fill-lower {\n    background: #11c1f3; }\n  .ionic .range.range-balanced input::-webkit-slider-thumb:before {\n    background: #33cd5f; }\n  .ionic .range.range-balanced input::-ms-fill-lower {\n    background: #33cd5f; }\n  .ionic .range.range-assertive input::-webkit-slider-thumb:before {\n    background: #ef473a; }\n  .ionic .range.range-assertive input::-ms-fill-lower {\n    background: #ef473a; }\n  .ionic .range.range-energized input::-webkit-slider-thumb:before {\n    background: #ffc900; }\n  .ionic .range.range-energized input::-ms-fill-lower {\n    background: #ffc900; }\n  .ionic .range.range-royal input::-webkit-slider-thumb:before {\n    background: #886aea; }\n  .ionic .range.range-royal input::-ms-fill-lower {\n    background: #886aea; }\n  .ionic .range.range-dark input::-webkit-slider-thumb:before {\n    background: #444; }\n  .ionic .range.range-dark input::-ms-fill-lower {\n    background: #444; }\n  .ionic .range .icon {\n    -moz-flex: 0;\n    -ms-flex: 0;\n    flex: 0;\n    display: block;\n    min-width: 24px;\n    text-align: center;\n    font-size: 24px; }\n  .ionic .range input {\n    -moz-flex: 1;\n    -ms-flex: 1;\n    flex: 1;\n    display: block;\n    margin-right: 10px;\n    margin-left: 10px; }\n  .ionic .range-label {\n    -moz-flex: 0 0 auto;\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    display: block;\n    white-space: nowrap; }\n  .ionic .range-label:first-child {\n    padding-left: 5px; }\n  .ionic .range input + .range-label {\n    padding-right: 5px;\n    padding-left: 0; }\n  .ionic .platform-windowsphone .range input {\n    height: auto; }\n  .ionic .item-select {\n    position: relative; }\n  .ionic .item-select select {\n    -webkit-appearance: none;\n    -moz-appearance: none;\n    appearance: none;\n    position: absolute;\n    top: 0;\n    bottom: 0;\n    right: 0;\n    padding: 0 48px 0 16px;\n    max-width: 65%;\n    border: none;\n    background: #fff;\n    color: #333;\n    text-indent: .01px;\n    text-overflow: '';\n    white-space: nowrap;\n    font-size: 14px;\n    cursor: pointer;\n    direction: rtl; }\n  .ionic .item-select select::-ms-expand {\n    display: none; }\n  .ionic .item-select option {\n    direction: ltr; }\n  .ionic .item-select:after {\n    position: absolute;\n    top: 50%;\n    right: 16px;\n    margin-top: -3px;\n    width: 0;\n    height: 0;\n    border-top: 5px solid;\n    border-right: 5px solid transparent;\n    border-left: 5px solid transparent;\n    color: #999;\n    content: \"\";\n    pointer-events: none; }\n  .ionic .item-select.item-light select {\n    background: #fff;\n    color: #444; }\n  .ionic .item-select.item-stable select {\n    background: #f8f8f8;\n    color: #444; }\n  .ionic .item-select.item-stable:after, .ionic .item-select.item-stable .input-label {\n    color: #656565; }\n  .ionic .item-select.item-positive select {\n    background: #387ef5;\n    color: #fff; }\n  .ionic .item-select.item-positive:after, .ionic .item-select.item-positive .input-label {\n    color: #fff; }\n  .ionic .item-select.item-calm select {\n    background: #11c1f3;\n    color: #fff; }\n  .ionic .item-select.item-calm:after, .ionic .item-select.item-calm .input-label {\n    color: #fff; }\n  .ionic .item-select.item-assertive select {\n    background: #ef473a;\n    color: #fff; }\n  .ionic .item-select.item-assertive:after, .ionic .item-select.item-assertive .input-label {\n    color: #fff; }\n  .ionic .item-select.item-balanced select {\n    background: #33cd5f;\n    color: #fff; }\n  .ionic .item-select.item-balanced:after, .ionic .item-select.item-balanced .input-label {\n    color: #fff; }\n  .ionic .item-select.item-energized select {\n    background: #ffc900;\n    color: #fff; }\n  .ionic .item-select.item-energized:after, .ionic .item-select.item-energized .input-label {\n    color: #fff; }\n  .ionic .item-select.item-royal select {\n    background: #886aea;\n    color: #fff; }\n  .ionic .item-select.item-royal:after, .ionic .item-select.item-royal .input-label {\n    color: #fff; }\n  .ionic .item-select.item-dark select {\n    background: #444;\n    color: #fff; }\n  .ionic .item-select.item-dark:after, .ionic .item-select.item-dark .input-label {\n    color: #fff; }\n  .ionic select[multiple],\n  .ionic select[size] {\n    height: auto; }\n  .ionic progress {\n    display: block;\n    margin: 15px auto;\n    width: 100%; }\n  .ionic .button {\n    border-color: #b2b2b2;\n    background-color: #f8f8f8;\n    color: #444;\n    position: relative;\n    display: inline-block;\n    margin: 0;\n    padding: 0 12px;\n    min-width: 52px;\n    min-height: 47px;\n    border-width: 1px;\n    border-style: solid;\n    border-radius: 2px;\n    vertical-align: top;\n    text-align: center;\n    text-overflow: ellipsis;\n    font-size: 16px;\n    line-height: 42px;\n    cursor: pointer; }\n  .ionic .button:hover {\n    color: #444;\n    text-decoration: none; }\n  .ionic .button.active,\n  .ionic .button.activated {\n    border-color: #a2a2a2;\n    background-color: #e5e5e5;\n    box-shadow: inset 0 1px 4px rgba(0, 0, 0, 0.1); }\n  .ionic .button:after {\n    position: absolute;\n    top: -6px;\n    right: -6px;\n    bottom: -6px;\n    left: -6px;\n    content: ' '; }\n  .ionic .button .icon {\n    vertical-align: top;\n    pointer-events: none; }\n  .ionic .button .icon:before,\n  .ionic .button.icon:before,\n  .ionic .button.icon-left:before,\n  .ionic .button.icon-right:before {\n    display: inline-block;\n    padding: 0 0 1px 0;\n    vertical-align: inherit;\n    font-size: 24px;\n    line-height: 41px;\n    pointer-events: none; }\n  .ionic .button.icon-left:before {\n    float: left;\n    padding-right: .2em;\n    padding-left: 0; }\n  .ionic .button.icon-right:before {\n    float: right;\n    padding-right: 0;\n    padding-left: .2em; }\n  .ionic .button.button-block, .ionic .button.button-full {\n    margin-top: 10px;\n    margin-bottom: 10px; }\n  .ionic .button.button-light {\n    border-color: #ddd;\n    background-color: #fff;\n    color: #444; }\n  .ionic .button.button-light:hover {\n    color: #444;\n    text-decoration: none; }\n  .ionic .button.button-light.active,\n  .ionic .button.button-light.activated {\n    border-color: #ccc;\n    background-color: #fafafa;\n    box-shadow: inset 0 1px 4px rgba(0, 0, 0, 0.1); }\n  .ionic .button.button-light.button-clear {\n    border-color: transparent;\n    background: none;\n    box-shadow: none;\n    color: #ddd; }\n  .ionic .button.button-light.button-icon {\n    border-color: transparent;\n    background: none; }\n  .ionic .button.button-light.button-outline {\n    border-color: #ddd;\n    background: transparent;\n    color: #ddd; }\n  .ionic .button.button-light.button-outline.active,\n  .ionic .button.button-light.button-outline.activated {\n    background-color: #ddd;\n    box-shadow: none;\n    color: #fff; }\n  .ionic .button.button-stable {\n    border-color: #b2b2b2;\n    background-color: #f8f8f8;\n    color: #444; }\n  .ionic .button.button-stable:hover {\n    color: #444;\n    text-decoration: none; }\n  .ionic .button.button-stable.active,\n  .ionic .button.button-stable.activated {\n    border-color: #a2a2a2;\n    background-color: #e5e5e5;\n    box-shadow: inset 0 1px 4px rgba(0, 0, 0, 0.1); }\n  .ionic .button.button-stable.button-clear {\n    border-color: transparent;\n    background: none;\n    box-shadow: none;\n    color: #b2b2b2; }\n  .ionic .button.button-stable.button-icon {\n    border-color: transparent;\n    background: none; }\n  .ionic .button.button-stable.button-outline {\n    border-color: #b2b2b2;\n    background: transparent;\n    color: #b2b2b2; }\n  .ionic .button.button-stable.button-outline.active,\n  .ionic .button.button-stable.button-outline.activated {\n    background-color: #b2b2b2;\n    box-shadow: none;\n    color: #fff; }\n  .ionic .button.button-positive {\n    border-color: #0c60ee;\n    background-color: #387ef5;\n    color: #fff; }\n  .ionic .button.button-positive:hover {\n    color: #fff;\n    text-decoration: none; }\n  .ionic .button.button-positive.active,\n  .ionic .button.button-positive.activated {\n    border-color: #0c60ee;\n    background-color: #0c60ee;\n    box-shadow: inset 0 1px 4px rgba(0, 0, 0, 0.1); }\n  .ionic .button.button-positive.button-clear {\n    border-color: transparent;\n    background: none;\n    box-shadow: none;\n    color: #387ef5; }\n  .ionic .button.button-positive.button-icon {\n    border-color: transparent;\n    background: none; }\n  .ionic .button.button-positive.button-outline {\n    border-color: #387ef5;\n    background: transparent;\n    color: #387ef5; }\n  .ionic .button.button-positive.button-outline.active,\n  .ionic .button.button-positive.button-outline.activated {\n    background-color: #387ef5;\n    box-shadow: none;\n    color: #fff; }\n  .ionic .button.button-calm {\n    border-color: #0a9dc7;\n    background-color: #11c1f3;\n    color: #fff; }\n  .ionic .button.button-calm:hover {\n    color: #fff;\n    text-decoration: none; }\n  .ionic .button.button-calm.active,\n  .ionic .button.button-calm.activated {\n    border-color: #0a9dc7;\n    background-color: #0a9dc7;\n    box-shadow: inset 0 1px 4px rgba(0, 0, 0, 0.1); }\n  .ionic .button.button-calm.button-clear {\n    border-color: transparent;\n    background: none;\n    box-shadow: none;\n    color: #11c1f3; }\n  .ionic .button.button-calm.button-icon {\n    border-color: transparent;\n    background: none; }\n  .ionic .button.button-calm.button-outline {\n    border-color: #11c1f3;\n    background: transparent;\n    color: #11c1f3; }\n  .ionic .button.button-calm.button-outline.active,\n  .ionic .button.button-calm.button-outline.activated {\n    background-color: #11c1f3;\n    box-shadow: none;\n    color: #fff; }\n  .ionic .button.button-assertive {\n    border-color: #e42112;\n    background-color: #ef473a;\n    color: #fff; }\n  .ionic .button.button-assertive:hover {\n    color: #fff;\n    text-decoration: none; }\n  .ionic .button.button-assertive.active,\n  .ionic .button.button-assertive.activated {\n    border-color: #e42112;\n    background-color: #e42112;\n    box-shadow: inset 0 1px 4px rgba(0, 0, 0, 0.1); }\n  .ionic .button.button-assertive.button-clear {\n    border-color: transparent;\n    background: none;\n    box-shadow: none;\n    color: #ef473a; }\n  .ionic .button.button-assertive.button-icon {\n    border-color: transparent;\n    background: none; }\n  .ionic .button.button-assertive.button-outline {\n    border-color: #ef473a;\n    background: transparent;\n    color: #ef473a; }\n  .ionic .button.button-assertive.button-outline.active,\n  .ionic .button.button-assertive.button-outline.activated {\n    background-color: #ef473a;\n    box-shadow: none;\n    color: #fff; }\n  .ionic .button.button-balanced {\n    border-color: #28a54c;\n    background-color: #33cd5f;\n    color: #fff; }\n  .ionic .button.button-balanced:hover {\n    color: #fff;\n    text-decoration: none; }\n  .ionic .button.button-balanced.active,\n  .ionic .button.button-balanced.activated {\n    border-color: #28a54c;\n    background-color: #28a54c;\n    box-shadow: inset 0 1px 4px rgba(0, 0, 0, 0.1); }\n  .ionic .button.button-balanced.button-clear {\n    border-color: transparent;\n    background: none;\n    box-shadow: none;\n    color: #33cd5f; }\n  .ionic .button.button-balanced.button-icon {\n    border-color: transparent;\n    background: none; }\n  .ionic .button.button-balanced.button-outline {\n    border-color: #33cd5f;\n    background: transparent;\n    color: #33cd5f; }\n  .ionic .button.button-balanced.button-outline.active,\n  .ionic .button.button-balanced.button-outline.activated {\n    background-color: #33cd5f;\n    box-shadow: none;\n    color: #fff; }\n  .ionic .button.button-energized {\n    border-color: #e6b500;\n    background-color: #ffc900;\n    color: #fff; }\n  .ionic .button.button-energized:hover {\n    color: #fff;\n    text-decoration: none; }\n  .ionic .button.button-energized.active,\n  .ionic .button.button-energized.activated {\n    border-color: #e6b500;\n    background-color: #e6b500;\n    box-shadow: inset 0 1px 4px rgba(0, 0, 0, 0.1); }\n  .ionic .button.button-energized.button-clear {\n    border-color: transparent;\n    background: none;\n    box-shadow: none;\n    color: #ffc900; }\n  .ionic .button.button-energized.button-icon {\n    border-color: transparent;\n    background: none; }\n  .ionic .button.button-energized.button-outline {\n    border-color: #ffc900;\n    background: transparent;\n    color: #ffc900; }\n  .ionic .button.button-energized.button-outline.active,\n  .ionic .button.button-energized.button-outline.activated {\n    background-color: #ffc900;\n    box-shadow: none;\n    color: #fff; }\n  .ionic .button.button-royal {\n    border-color: #6b46e5;\n    background-color: #886aea;\n    color: #fff; }\n  .ionic .button.button-royal:hover {\n    color: #fff;\n    text-decoration: none; }\n  .ionic .button.button-royal.active,\n  .ionic .button.button-royal.activated {\n    border-color: #6b46e5;\n    background-color: #6b46e5;\n    box-shadow: inset 0 1px 4px rgba(0, 0, 0, 0.1); }\n  .ionic .button.button-royal.button-clear {\n    border-color: transparent;\n    background: none;\n    box-shadow: none;\n    color: #886aea; }\n  .ionic .button.button-royal.button-icon {\n    border-color: transparent;\n    background: none; }\n  .ionic .button.button-royal.button-outline {\n    border-color: #886aea;\n    background: transparent;\n    color: #886aea; }\n  .ionic .button.button-royal.button-outline.active,\n  .ionic .button.button-royal.button-outline.activated {\n    background-color: #886aea;\n    box-shadow: none;\n    color: #fff; }\n  .ionic .button.button-dark {\n    border-color: #111;\n    background-color: #444;\n    color: #fff; }\n  .ionic .button.button-dark:hover {\n    color: #fff;\n    text-decoration: none; }\n  .ionic .button.button-dark.active,\n  .ionic .button.button-dark.activated {\n    border-color: #000;\n    background-color: #262626;\n    box-shadow: inset 0 1px 4px rgba(0, 0, 0, 0.1); }\n  .ionic .button.button-dark.button-clear {\n    border-color: transparent;\n    background: none;\n    box-shadow: none;\n    color: #444; }\n  .ionic .button.button-dark.button-icon {\n    border-color: transparent;\n    background: none; }\n  .ionic .button.button-dark.button-outline {\n    border-color: #444;\n    background: transparent;\n    color: #444; }\n  .ionic .button.button-dark.button-outline.active,\n  .ionic .button.button-dark.button-outline.activated {\n    background-color: #444;\n    box-shadow: none;\n    color: #fff; }\n  .ionic .button-small {\n    padding: 2px 4px 1px;\n    min-width: 28px;\n    min-height: 30px;\n    font-size: 12px;\n    line-height: 26px; }\n  .ionic .button-small .icon:before,\n  .ionic .button-small.icon:before,\n  .ionic .button-small.icon-left:before,\n  .ionic .button-small.icon-right:before {\n    font-size: 16px;\n    line-height: 19px;\n    margin-top: 3px; }\n  .ionic .button-large {\n    padding: 0 16px;\n    min-width: 68px;\n    min-height: 59px;\n    font-size: 20px;\n    line-height: 53px; }\n  .ionic .button-large .icon:before,\n  .ionic .button-large.icon:before,\n  .ionic .button-large.icon-left:before,\n  .ionic .button-large.icon-right:before {\n    padding-bottom: 2px;\n    font-size: 32px;\n    line-height: 51px; }\n  .ionic .button-icon {\n    transition: opacity 0.1s;\n    padding: 0 6px;\n    min-width: initial;\n    border-color: transparent;\n    background: none; }\n  .ionic .button-icon.button.active,\n  .ionic .button-icon.button.activated {\n    border-color: transparent;\n    background: none;\n    box-shadow: none;\n    opacity: 0.3; }\n  .ionic .button-icon .icon:before,\n  .ionic .button-icon.icon:before {\n    font-size: 32px; }\n  .ionic .button-clear {\n    transition: opacity 0.1s;\n    padding: 0 6px;\n    max-height: 42px;\n    border-color: transparent;\n    background: none;\n    box-shadow: none; }\n  .ionic .button-clear.button-clear {\n    border-color: transparent;\n    background: none;\n    box-shadow: none;\n    color: #b2b2b2; }\n  .ionic .button-clear.button-icon {\n    border-color: transparent;\n    background: none; }\n  .ionic .button-clear.active,\n  .ionic .button-clear.activated {\n    opacity: 0.3; }\n  .ionic .button-outline {\n    transition: opacity 0.1s;\n    background: none;\n    box-shadow: none; }\n  .ionic .button-outline.button-outline {\n    border-color: #b2b2b2;\n    background: transparent;\n    color: #b2b2b2; }\n  .ionic .button-outline.button-outline.active,\n  .ionic .button-outline.button-outline.activated {\n    background-color: #b2b2b2;\n    box-shadow: none;\n    color: #fff; }\n  .ionic .padding > .button.button-block:first-child {\n    margin-top: 0; }\n  .ionic .button-block {\n    display: block;\n    clear: both; }\n  .ionic .button-block:after {\n    clear: both; }\n  .ionic .button-full,\n  .ionic .button-full > .button {\n    display: block;\n    margin-right: 0;\n    margin-left: 0;\n    border-right-width: 0;\n    border-left-width: 0;\n    border-radius: 0; }\n  .ionic button.button-block,\n  .ionic button.button-full,\n  .ionic .button-full > button.button,\n  .ionic input.button.button-block {\n    width: 100%; }\n  .ionic a.button {\n    text-decoration: none; }\n  .ionic a.button .icon:before,\n  .ionic a.button.icon:before,\n  .ionic a.button.icon-left:before,\n  .ionic a.button.icon-right:before {\n    margin-top: 2px; }\n  .ionic .button.disabled,\n  .ionic .button[disabled] {\n    opacity: .4;\n    cursor: default !important;\n    pointer-events: none; }\n  .ionic .button-bar {\n    display: -moz-flex;\n    display: -ms-flexbox;\n    display: flex;\n    -moz-flex: 1;\n    -ms-flex: 1;\n    flex: 1;\n    width: 100%; }\n  .ionic .button-bar.button-bar-inline {\n    display: block;\n    width: auto;\n    *zoom: 1; }\n  .ionic .button-bar.button-bar-inline:before,\n  .ionic .button-bar.button-bar-inline:after {\n    display: table;\n    content: \"\";\n    line-height: 0; }\n  .ionic .button-bar.button-bar-inline:after {\n    clear: both; }\n  .ionic .button-bar.button-bar-inline > .button {\n    width: auto;\n    display: inline-block;\n    float: left; }\n  .ionic .button-bar > .button {\n    -moz-flex: 1;\n    -ms-flex: 1;\n    flex: 1;\n    display: block;\n    overflow: hidden;\n    padding: 0 16px;\n    width: 0;\n    border-width: 1px 0px 1px 1px;\n    border-radius: 0;\n    text-align: center;\n    text-overflow: ellipsis;\n    white-space: nowrap; }\n  .ionic .button-bar > .button:before,\n  .ionic .button-bar > .button .icon:before {\n    line-height: 44px; }\n  .ionic .button-bar > .button:first-child {\n    border-radius: 2px 0px 0px 2px; }\n  .ionic .button-bar > .button:last-child {\n    border-right-width: 1px;\n    border-radius: 0px 2px 2px 0px; }\n  .ionic .button-bar > .button-small:before,\n  .ionic .button-bar > .button-small .icon:before {\n    line-height: 28px; }\n  .ionic .row {\n    display: -moz-flex;\n    display: -ms-flexbox;\n    display: flex;\n    padding: 5px;\n    width: 100%; }\n  .ionic .row-wrap {\n    -ms-flex-wrap: wrap;\n    flex-wrap: wrap; }\n  .ionic .row-no-padding {\n    padding: 0; }\n  .ionic .row-no-padding > .col {\n    padding: 0; }\n  .ionic .row + .row {\n    margin-top: -5px;\n    padding-top: 0; }\n  .ionic .col {\n    -moz-flex: 1;\n    -ms-flex: 1;\n    flex: 1;\n    display: block;\n    padding: 5px;\n    width: 100%; }\n  .ionic .row-top {\n    -ms-flex-align: start;\n    -moz-align-items: flex-start;\n    align-items: flex-start; }\n  .ionic .row-bottom {\n    -ms-flex-align: end;\n    -moz-align-items: flex-end;\n    align-items: flex-end; }\n  .ionic .row-center {\n    -ms-flex-align: center;\n    -moz-align-items: center;\n    align-items: center; }\n  .ionic .row-stretch {\n    -ms-flex-align: stretch;\n    -moz-align-items: stretch;\n    align-items: stretch; }\n  .ionic .row-baseline {\n    -ms-flex-align: baseline;\n    -moz-align-items: baseline;\n    align-items: baseline; }\n  .ionic .col-top {\n    -ms-flex-item-align: start;\n    align-self: flex-start; }\n  .ionic .col-bottom {\n    -ms-flex-item-align: end;\n    align-self: flex-end; }\n  .ionic .col-center {\n    -ms-flex-item-align: center;\n    -ms-grid-row-align: center;\n        align-self: center; }\n  .ionic .col-offset-10 {\n    margin-left: 10%; }\n  .ionic .col-offset-20 {\n    margin-left: 20%; }\n  .ionic .col-offset-25 {\n    margin-left: 25%; }\n  .ionic .col-offset-33, .ionic .col-offset-34 {\n    margin-left: 33.3333%; }\n  .ionic .col-offset-50 {\n    margin-left: 50%; }\n  .ionic .col-offset-66, .ionic .col-offset-67 {\n    margin-left: 66.6666%; }\n  .ionic .col-offset-75 {\n    margin-left: 75%; }\n  .ionic .col-offset-80 {\n    margin-left: 80%; }\n  .ionic .col-offset-90 {\n    margin-left: 90%; }\n  .ionic .col-10 {\n    -moz-flex: 0 0 10%;\n    -ms-flex: 0 0 10%;\n    flex: 0 0 10%;\n    max-width: 10%; }\n  .ionic .col-20 {\n    -moz-flex: 0 0 20%;\n    -ms-flex: 0 0 20%;\n    flex: 0 0 20%;\n    max-width: 20%; }\n  .ionic .col-25 {\n    -moz-flex: 0 0 25%;\n    -ms-flex: 0 0 25%;\n    flex: 0 0 25%;\n    max-width: 25%; }\n  .ionic .col-33, .ionic .col-34 {\n    -moz-flex: 0 0 33.3333%;\n    -ms-flex: 0 0 33.3333%;\n    flex: 0 0 33.3333%;\n    max-width: 33.3333%; }\n  .ionic .col-50 {\n    -moz-flex: 0 0 50%;\n    -ms-flex: 0 0 50%;\n    flex: 0 0 50%;\n    max-width: 50%; }\n  .ionic .col-66, .ionic .col-67 {\n    -moz-flex: 0 0 66.6666%;\n    -ms-flex: 0 0 66.6666%;\n    flex: 0 0 66.6666%;\n    max-width: 66.6666%; }\n  .ionic .col-75 {\n    -moz-flex: 0 0 75%;\n    -ms-flex: 0 0 75%;\n    flex: 0 0 75%;\n    max-width: 75%; }\n  .ionic .col-80 {\n    -moz-flex: 0 0 80%;\n    -ms-flex: 0 0 80%;\n    flex: 0 0 80%;\n    max-width: 80%; }\n  .ionic .col-90 {\n    -moz-flex: 0 0 90%;\n    -ms-flex: 0 0 90%;\n    flex: 0 0 90%;\n    max-width: 90%; }\n  @media (max-width: 567px) {\n    .ionic .responsive-sm {\n      -ms-flex-direction: column;\n      flex-direction: column; }\n    .ionic .responsive-sm .col, .ionic .responsive-sm .col-10, .ionic .responsive-sm .col-20, .ionic .responsive-sm .col-25, .ionic .responsive-sm .col-33, .ionic .responsive-sm .col-34, .ionic .responsive-sm .col-50, .ionic .responsive-sm .col-66, .ionic .responsive-sm .col-67, .ionic .responsive-sm .col-75, .ionic .responsive-sm .col-80, .ionic .responsive-sm .col-90 {\n      -moz-flex: 1;\n      -ms-flex: 1;\n      flex: 1;\n      margin-bottom: 15px;\n      margin-left: 0;\n      max-width: 100%;\n      width: 100%; } }\n  @media (max-width: 767px) {\n    .ionic .responsive-md {\n      -ms-flex-direction: column;\n      flex-direction: column; }\n    .ionic .responsive-md .col, .ionic .responsive-md .col-10, .ionic .responsive-md .col-20, .ionic .responsive-md .col-25, .ionic .responsive-md .col-33, .ionic .responsive-md .col-34, .ionic .responsive-md .col-50, .ionic .responsive-md .col-66, .ionic .responsive-md .col-67, .ionic .responsive-md .col-75, .ionic .responsive-md .col-80, .ionic .responsive-md .col-90 {\n      -moz-flex: 1;\n      -ms-flex: 1;\n      flex: 1;\n      margin-bottom: 15px;\n      margin-left: 0;\n      max-width: 100%;\n      width: 100%; } }\n  @media (max-width: 1023px) {\n    .ionic .responsive-lg {\n      -ms-flex-direction: column;\n      flex-direction: column; }\n    .ionic .responsive-lg .col, .ionic .responsive-lg .col-10, .ionic .responsive-lg .col-20, .ionic .responsive-lg .col-25, .ionic .responsive-lg .col-33, .ionic .responsive-lg .col-34, .ionic .responsive-lg .col-50, .ionic .responsive-lg .col-66, .ionic .responsive-lg .col-67, .ionic .responsive-lg .col-75, .ionic .responsive-lg .col-80, .ionic .responsive-lg .col-90 {\n      -moz-flex: 1;\n      -ms-flex: 1;\n      flex: 1;\n      margin-bottom: 15px;\n      margin-left: 0;\n      max-width: 100%;\n      width: 100%; } }\n  .ionic .hide {\n    display: none; }\n  .ionic .opacity-hide {\n    opacity: 0; }\n  .ionic .grade-b .opacity-hide,\n  .ionic .grade-c .opacity-hide {\n    opacity: 1;\n    display: none; }\n  .ionic .show {\n    display: block; }\n  .ionic .opacity-show {\n    opacity: 1; }\n  .ionic .invisible {\n    visibility: hidden; }\n  .ionic .keyboard-open .hide-on-keyboard-open {\n    display: none; }\n  .ionic .keyboard-open .tabs.hide-on-keyboard-open + .pane .has-tabs,\n  .ionic .keyboard-open .bar-footer.hide-on-keyboard-open + .pane .has-footer {\n    bottom: 0; }\n  .ionic .inline {\n    display: inline-block; }\n  .ionic .disable-pointer-events {\n    pointer-events: none; }\n  .ionic .enable-pointer-events {\n    pointer-events: auto; }\n  .ionic .disable-user-behavior {\n    -webkit-user-select: none;\n    -moz-user-select: none;\n    -ms-user-select: none;\n    user-select: none;\n    -webkit-touch-callout: none;\n    -webkit-tap-highlight-color: transparent;\n    -webkit-tap-highlight-color: transparent;\n    -webkit-user-drag: none;\n    -ms-touch-action: none;\n    -ms-content-zooming: none; }\n  .ionic .click-block {\n    position: absolute;\n    top: 0;\n    right: 0;\n    bottom: 0;\n    left: 0;\n    opacity: 0;\n    z-index: 99999;\n    -webkit-transform: translate3d(0, 0, 0);\n    transform: translate3d(0, 0, 0);\n    overflow: hidden; }\n  .ionic .click-block-hide {\n    -webkit-transform: translate3d(-9999px, 0, 0);\n    transform: translate3d(-9999px, 0, 0); }\n  .ionic .no-resize {\n    resize: none; }\n  .ionic .block {\n    display: block;\n    clear: both; }\n  .ionic .block:after {\n    display: block;\n    visibility: hidden;\n    clear: both;\n    height: 0;\n    content: \".\"; }\n  .ionic .full-image {\n    width: 100%; }\n  .ionic .clearfix {\n    *zoom: 1; }\n  .ionic .clearfix:before,\n  .ionic .clearfix:after {\n    display: table;\n    content: \"\";\n    line-height: 0; }\n  .ionic .clearfix:after {\n    clear: both; }\n  .ionic .padding {\n    padding: 10px; }\n  .ionic .padding-top,\n  .ionic .padding-vertical {\n    padding-top: 10px; }\n  .ionic .padding-right,\n  .ionic .padding-horizontal {\n    padding-right: 10px; }\n  .ionic .padding-bottom,\n  .ionic .padding-vertical {\n    padding-bottom: 10px; }\n  .ionic .padding-left,\n  .ionic .padding-horizontal {\n    padding-left: 10px; }\n  .ionic .iframe-wrapper {\n    position: fixed;\n    -webkit-overflow-scrolling: touch;\n    overflow: scroll; }\n  .ionic .iframe-wrapper iframe {\n    height: 100%;\n    width: 100%; }\n  .ionic .rounded {\n    border-radius: 4px; }\n  .ionic .light, .ionic a.light {\n    color: #fff; }\n  .ionic .light-bg {\n    background-color: #fff; }\n  .ionic .light-border {\n    border-color: #ddd; }\n  .ionic .stable, .ionic a.stable {\n    color: #f8f8f8; }\n  .ionic .stable-bg {\n    background-color: #f8f8f8; }\n  .ionic .stable-border {\n    border-color: #b2b2b2; }\n  .ionic .positive, .ionic a.positive {\n    color: #387ef5; }\n  .ionic .positive-bg {\n    background-color: #387ef5; }\n  .ionic .positive-border {\n    border-color: #0c60ee; }\n  .ionic .calm, .ionic a.calm {\n    color: #11c1f3; }\n  .ionic .calm-bg {\n    background-color: #11c1f3; }\n  .ionic .calm-border {\n    border-color: #0a9dc7; }\n  .ionic .assertive, .ionic a.assertive {\n    color: #ef473a; }\n  .ionic .assertive-bg {\n    background-color: #ef473a; }\n  .ionic .assertive-border {\n    border-color: #e42112; }\n  .ionic .balanced, .ionic a.balanced {\n    color: #33cd5f; }\n  .ionic .balanced-bg {\n    background-color: #33cd5f; }\n  .ionic .balanced-border {\n    border-color: #28a54c; }\n  .ionic .energized, .ionic a.energized {\n    color: #ffc900; }\n  .ionic .energized-bg {\n    background-color: #ffc900; }\n  .ionic .energized-border {\n    border-color: #e6b500; }\n  .ionic .royal, .ionic a.royal {\n    color: #886aea; }\n  .ionic .royal-bg {\n    background-color: #886aea; }\n  .ionic .royal-border {\n    border-color: #6b46e5; }\n  .ionic .dark, .ionic a.dark {\n    color: #444; }\n  .ionic .dark-bg {\n    background-color: #444; }\n  .ionic .dark-border {\n    border-color: #111; }\n  .ionic [collection-repeat] {\n    /* Position is set by transforms */\n    left: 0 !important;\n    top: 0 !important;\n    position: absolute !important;\n    z-index: 1; }\n  .ionic .collection-repeat-container {\n    position: relative;\n    z-index: 1; }\n  .ionic .collection-repeat-after-container {\n    z-index: 0;\n    display: block;\n    /* when scrolling horizontally, make sure the after container doesn't take up 100% width */ }\n  .ionic .collection-repeat-after-container.horizontal {\n    display: inline-block; }\n  .ionic [ng\\:cloak], .ionic [ng-cloak], .ionic [data-ng-cloak], .ionic [x-ng-cloak], .ionic .ng-cloak,\n  .ionic .x-ng-cloak, .ionic .ng-hide:not(.ng-hide-animate) {\n    display: none !important; }\n  .ionic .platform-ios.platform-cordova:not(.fullscreen) .bar-header:not(.bar-subheader) {\n    height: 64px; }\n  .ionic .platform-ios.platform-cordova:not(.fullscreen) .bar-header:not(.bar-subheader).item-input-inset .item-input-wrapper {\n    margin-top: 19px !important; }\n  .ionic .platform-ios.platform-cordova:not(.fullscreen) .bar-header:not(.bar-subheader) > * {\n    margin-top: 20px; }\n  .ionic .platform-ios.platform-cordova:not(.fullscreen) .tabs-top > .tabs,\n  .ionic .platform-ios.platform-cordova:not(.fullscreen) .tabs.tabs-top {\n    top: 64px; }\n  .ionic .platform-ios.platform-cordova:not(.fullscreen) .has-header,\n  .ionic .platform-ios.platform-cordova:not(.fullscreen) .bar-subheader {\n    top: 64px; }\n  .ionic .platform-ios.platform-cordova:not(.fullscreen) .has-subheader {\n    top: 108px; }\n  .ionic .platform-ios.platform-cordova:not(.fullscreen) .has-header.has-tabs-top {\n    top: 113px; }\n  .ionic .platform-ios.platform-cordova:not(.fullscreen) .has-header.has-subheader.has-tabs-top {\n    top: 157px; }\n  .ionic .platform-ios.platform-cordova .popover .bar-header:not(.bar-subheader) {\n    height: 44px; }\n  .ionic .platform-ios.platform-cordova .popover .bar-header:not(.bar-subheader).item-input-inset .item-input-wrapper {\n    margin-top: -1px; }\n  .ionic .platform-ios.platform-cordova .popover .bar-header:not(.bar-subheader) > * {\n    margin-top: 0; }\n  .ionic .platform-ios.platform-cordova .popover .has-header,\n  .ionic .platform-ios.platform-cordova .popover .bar-subheader {\n    top: 44px; }\n  .ionic .platform-ios.platform-cordova .popover .has-subheader {\n    top: 88px; }\n  .ionic .platform-ios.platform-cordova.status-bar-hide {\n    margin-bottom: 20px; }\n  @media (orientation: landscape) {\n    .ionic .platform-ios.platform-browser.platform-ipad {\n      position: fixed; } }\n  .ionic .platform-c:not(.enable-transitions) * {\n    transition: none !important; }\n  .ionic .slide-in-up {\n    -webkit-transform: translate3d(0, 100%, 0);\n    transform: translate3d(0, 100%, 0); }\n  .ionic .slide-in-up.ng-enter,\n  .ionic .slide-in-up > .ng-enter {\n    transition: all cubic-bezier(0.1, 0.7, 0.1, 1) 400ms; }\n  .ionic .slide-in-up.ng-enter-active,\n  .ionic .slide-in-up > .ng-enter-active {\n    -webkit-transform: translate3d(0, 0, 0);\n    transform: translate3d(0, 0, 0); }\n  .ionic .slide-in-up.ng-leave,\n  .ionic .slide-in-up > .ng-leave {\n    transition: all ease-in-out 250ms; }\n\n@-webkit-keyframes scaleOut {\n  from {\n    -webkit-transform: scale(1);\n    opacity: 1; }\n  to {\n    -webkit-transform: scale(0.8);\n    opacity: 0; } }\n\n@keyframes scaleOut {\n  from {\n    -webkit-transform: scale(1);\n            transform: scale(1);\n    opacity: 1; }\n  to {\n    -webkit-transform: scale(0.8);\n            transform: scale(0.8);\n    opacity: 0; } }\n\n@-webkit-keyframes superScaleIn {\n  from {\n    -webkit-transform: scale(1.2);\n    opacity: 0; }\n  to {\n    -webkit-transform: scale(1);\n    opacity: 1; } }\n\n@keyframes superScaleIn {\n  from {\n    -webkit-transform: scale(1.2);\n            transform: scale(1.2);\n    opacity: 0; }\n  to {\n    -webkit-transform: scale(1);\n            transform: scale(1);\n    opacity: 1; } }\n  .ionic [nav-view-transition=\"ios\"] [nav-view=\"entering\"],\n  .ionic [nav-view-transition=\"ios\"] [nav-view=\"leaving\"] {\n    transition-duration: 500ms;\n    transition-timing-function: cubic-bezier(0.36, 0.66, 0.04, 1);\n    transition-property: opacity, box-shadow, -webkit-transform;\n    transition-property: opacity, transform, box-shadow;\n    transition-property: opacity, transform, box-shadow, -webkit-transform; }\n  .ionic [nav-view-transition=\"ios\"][nav-view-direction=\"forward\"],\n  .ionic [nav-view-transition=\"ios\"][nav-view-direction=\"back\"] {\n    background-color: #000; }\n  .ionic [nav-view-transition=\"ios\"] [nav-view=\"active\"],\n  .ionic [nav-view-transition=\"ios\"][nav-view-direction=\"forward\"] [nav-view=\"entering\"],\n  .ionic [nav-view-transition=\"ios\"][nav-view-direction=\"back\"] [nav-view=\"leaving\"] {\n    z-index: 3; }\n  .ionic [nav-view-transition=\"ios\"][nav-view-direction=\"back\"] [nav-view=\"entering\"],\n  .ionic [nav-view-transition=\"ios\"][nav-view-direction=\"forward\"] [nav-view=\"leaving\"] {\n    z-index: 2; }\n  .ionic [nav-bar-transition=\"ios\"] .title,\n  .ionic [nav-bar-transition=\"ios\"] .buttons,\n  .ionic [nav-bar-transition=\"ios\"] .back-text {\n    transition-duration: 500ms;\n    transition-timing-function: cubic-bezier(0.36, 0.66, 0.04, 1);\n    transition-property: opacity, -webkit-transform;\n    transition-property: opacity, transform;\n    transition-property: opacity, transform, -webkit-transform; }\n  .ionic [nav-bar-transition=\"ios\"] [nav-bar=\"active\"],\n  .ionic [nav-bar-transition=\"ios\"] [nav-bar=\"entering\"] {\n    z-index: 10; }\n  .ionic [nav-bar-transition=\"ios\"] [nav-bar=\"active\"] .bar,\n  .ionic [nav-bar-transition=\"ios\"] [nav-bar=\"entering\"] .bar {\n    background: transparent; }\n  .ionic [nav-bar-transition=\"ios\"] [nav-bar=\"cached\"] {\n    display: block; }\n  .ionic [nav-bar-transition=\"ios\"] [nav-bar=\"cached\"] .header-item {\n    display: none; }\n  .ionic [nav-view-transition=\"android\"] [nav-view=\"entering\"],\n  .ionic [nav-view-transition=\"android\"] [nav-view=\"leaving\"] {\n    transition-duration: 200ms;\n    transition-timing-function: cubic-bezier(0.4, 0.6, 0.2, 1);\n    transition-property: -webkit-transform;\n    transition-property: transform;\n    transition-property: transform, -webkit-transform; }\n  .ionic [nav-view-transition=\"android\"] [nav-view=\"active\"],\n  .ionic [nav-view-transition=\"android\"][nav-view-direction=\"forward\"] [nav-view=\"entering\"],\n  .ionic [nav-view-transition=\"android\"][nav-view-direction=\"back\"] [nav-view=\"leaving\"] {\n    z-index: 3; }\n  .ionic [nav-view-transition=\"android\"][nav-view-direction=\"back\"] [nav-view=\"entering\"],\n  .ionic [nav-view-transition=\"android\"][nav-view-direction=\"forward\"] [nav-view=\"leaving\"] {\n    z-index: 2; }\n  .ionic [nav-bar-transition=\"android\"] .title,\n  .ionic [nav-bar-transition=\"android\"] .buttons {\n    transition-duration: 200ms;\n    transition-timing-function: cubic-bezier(0.4, 0.6, 0.2, 1);\n    transition-property: opacity; }\n  .ionic [nav-bar-transition=\"android\"] [nav-bar=\"active\"],\n  .ionic [nav-bar-transition=\"android\"] [nav-bar=\"entering\"] {\n    z-index: 10; }\n  .ionic [nav-bar-transition=\"android\"] [nav-bar=\"active\"] .bar,\n  .ionic [nav-bar-transition=\"android\"] [nav-bar=\"entering\"] .bar {\n    background: transparent; }\n  .ionic [nav-bar-transition=\"android\"] [nav-bar=\"cached\"] {\n    display: block; }\n  .ionic [nav-bar-transition=\"android\"] [nav-bar=\"cached\"] .header-item {\n    display: none; }\n  .ionic [nav-swipe=\"fast\"] [nav-view],\n  .ionic [nav-swipe=\"fast\"] .title,\n  .ionic [nav-swipe=\"fast\"] .buttons,\n  .ionic [nav-swipe=\"fast\"] .back-text {\n    transition-duration: 50ms;\n    transition-timing-function: linear; }\n  .ionic [nav-swipe=\"slow\"] [nav-view],\n  .ionic [nav-swipe=\"slow\"] .title,\n  .ionic [nav-swipe=\"slow\"] .buttons,\n  .ionic [nav-swipe=\"slow\"] .back-text {\n    transition-duration: 160ms;\n    transition-timing-function: linear; }\n  .ionic [nav-view=\"cached\"],\n  .ionic [nav-bar=\"cached\"] {\n    display: none; }\n  .ionic [nav-view=\"stage\"] {\n    opacity: 0;\n    transition-duration: 0; }\n  .ionic [nav-bar=\"stage\"] .title,\n  .ionic [nav-bar=\"stage\"] .buttons,\n  .ionic [nav-bar=\"stage\"] .back-text {\n    position: absolute;\n    opacity: 0;\n    transition-duration: 0s; }\n\n.pre-footer {\n  position: relative;\n  z-index: 100;\n  padding: 40px;\n  background: #F7F7F7; }\n  .pre-footer .row {\n    margin: 0 auto;\n    max-width: 900px; }\n  .pre-footer p {\n    line-height: 28px;\n    color: #999; }\n  .pre-footer a:hover {\n    text-decoration: none; }\n  .pre-footer span {\n    padding-left: 5px; }\n  .pre-footer .col-a {\n    padding-bottom: 15px; }\n  @media (min-width: 768px) {\n    .pre-footer .col-a {\n      padding-right: 60px;\n      padding-bottom: 0;\n      border-right: 1px solid #ddd; }\n    .pre-footer .col-b {\n      padding-left: 70px; } }\n\n#newsletter-bar {\n  border-top: none;\n  background-color: rgba(79, 142, 247, 0.95);\n  color: #fff;\n  text-align: center;\n  padding: 5px;\n  z-index: 150;\n  position: fixed;\n  bottom: 0;\n  left: 0;\n  width: 100%;\n  font-size: 13px; }\n  #newsletter-bar.top {\n    position: static;\n    background-color: #4e8ef7; }\n  #newsletter-bar form {\n    display: inline-block; }\n    #newsletter-bar form input {\n      margin-left: 15px;\n      height: 30px;\n      padding-left: 10px;\n      border: none;\n      border-radius: 3px;\n      box-shadow: none;\n      opacity: .8; }\n      #newsletter-bar form input:focus {\n        box-shadow: none;\n        outline: none;\n        opacity: .9; }\n\n.newsletter-box {\n  background-color: #4c8cfa;\n  color: #fff;\n  padding: 15px;\n  border-radius: 5px; }\n  .newsletter-box h4 {\n    color: #fff; }\n  .newsletter-box .input-group {\n    margin-bottom: 15px; }\n  .newsletter-box .btn {\n    border-left: 1px solid rgba(79, 142, 247, 0.95);\n    color: rgba(79, 142, 247, 0.95); }\n  .newsletter-box input.form-control {\n    border: none; }\n\n.social-box {\n  margin: 55px 0px 15px 0px; }\n  .social-box iframe {\n    margin-right: 10px; }\n\n#newsletter-bar {\n  border-top: 1px solid #999;\n  background-color: rgba(79, 142, 247, 0.95);\n  color: #fff;\n  text-align: center;\n  padding: 5px;\n  z-index: 150;\n  position: fixed;\n  bottom: 0;\n  left: 0;\n  width: 100%;\n  font-size: 13px; }\n  #newsletter-bar form {\n    display: inline-block; }\n    #newsletter-bar form input {\n      margin-left: 15px;\n      height: 30px;\n      border: none;\n      border-radius: 3px;\n      box-shadow: none; }\n\n.footer {\n  position: relative;\n  z-index: 100;\n  padding: 20px 0 0 0;\n  background: #2b3442;\n  color: #a4b3cd;\n  text-align: center;\n  font-size: 14px;\n  font-family: \"AvenirNextLTPro-Regular\", \"Helvetica Neue\", Helvetica, Arial, sans-serif; }\n  .footer a {\n    color: #e2eeff;\n    opacity: 1;\n    transition-property: color; }\n    .footer a:hover {\n      color: white; }\n  .footer .base-links dl {\n    float: left;\n    margin: 0;\n    padding: 15px 5px 20px 5px;\n    width: 33%;\n    text-align: left;\n    font-size: 0.9em; }\n  .footer .base-links dl:first-child {\n    padding-left: 0; }\n  .footer .small-break {\n    clear: both; }\n  @media (min-width: 768px) {\n    .footer .base-links dl {\n      padding-left: 0;\n      width: 20%;\n      font-size: 1em; }\n    .footer .small-break {\n      clear: none; } }\n  .footer .base-links {\n    margin: 0 auto;\n    padding: 0 10px;\n    max-width: 1170px; }\n  .footer .base-links dt,\n  .footer .newsletter-text {\n    margin: 0;\n    padding-bottom: 10px;\n    color: #e2eeff;\n    text-transform: uppercase;\n    letter-spacing: 2px;\n    font-weight: bold;\n    font-size: 13px;\n    font-family: \"AvenirNextLTPro-Medium\", \"Helvetica Neue\", Helvetica, Arial, sans-serif; }\n  .footer .newsletter-text {\n    padding-bottom: 4px; }\n  .footer .base-links dd {\n    margin: 5px 0;\n    font-size: 13px; }\n  .footer .base-links a {\n    display: block;\n    padding: 5px 0;\n    color: #a4b3cd; }\n    .footer .base-links a:hover {\n      color: #dde9ff;\n      text-decoration: none; }\n  .footer .copy {\n    padding: 18px;\n    background: #202532; }\n  .footer .copy-container {\n    margin: 0 auto;\n    max-width: 1170px; }\n  @media (min-width: 630px) {\n    .footer .copy-container {\n      background-size: 128px 32px; } }\n  .footer .authors {\n    margin: 0;\n    padding: 10px;\n    color: #858f9e;\n    text-align: right;\n    font-size: 13px; }\n    .footer .authors a {\n      color: #a3aec0; }\n    .footer .authors span {\n      padding: 0 15px; }\n  .footer .newsletter {\n    clear: both;\n    margin: 0 auto 30px;\n    max-width: 1170px;\n    border-top: 1px solid #555f6e; }\n  .footer .newsletter-container {\n    margin-top: 30px;\n    text-align: left; }\n    .footer .newsletter-container .sign-up {\n      padding-bottom: 10px;\n      color: #a4b3cd;\n      font-size: 13px; }\n    .footer .newsletter-container .col-sm-7 {\n      padding-left: 15px; }\n    .footer .newsletter-container .col-sm-5 {\n      padding-right: 15px; }\n    @media (min-width: 900px) {\n      .footer .newsletter-container .col-sm-7 {\n        padding-left: 0; }\n      .footer .newsletter-container .col-sm-5 {\n        padding-right: 0; } }\n    .footer .newsletter-container input {\n      border: none;\n      background: #45546D;\n      color: white; }\n      .footer .newsletter-container input:focus {\n        background: #51627E;\n        box-shadow: none;\n        box-shadow: inset 0px 0px 0px 1px #4E8EF7; }\n      .footer .newsletter-container input::-webkit-input-placeholder {\n        color: #8e9fb8; }\n      .footer .newsletter-container input::-moz-placeholder {\n        color: #8e9fb8; }\n    .footer .newsletter-container button {\n      padding-right: 15px;\n      padding-left: 15px;\n      border: 1px solid #4e8ef7;\n      background: #4e8ef7;\n      box-shadow: 0px 1px 0px rgba(0, 0, 0, 0.3);\n      color: white; }\n      .footer .newsletter-container button:hover {\n        background: #5998FF;\n        color: white; }\n      .footer .newsletter-container button:active {\n        border: 1px solid #3E75CE;\n        background: #4683E7;\n        box-shadow: none;\n        color: #B1C4E4; }\n\n.pre-footer {\n  position: relative;\n  z-index: 100;\n  padding: 40px;\n  background: #EBF0F6; }\n  .pre-footer h4 {\n    color: #363b43;\n    font-family: \"AvenirNextLTPro-Medium\", \"Helvetica Neue\", Helvetica, Arial, sans-serif; }\n  .pre-footer .row {\n    margin: 0 auto;\n    max-width: 1170px; }\n  .pre-footer p {\n    color: #999;\n    color: #737e90;\n    font-size: 14px;\n    font-family: \"AvenirNextLTPro-Regular\", \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n    line-height: 28px; }\n  .pre-footer a:hover {\n    color: #4E8EF7;\n    text-decoration: none; }\n  .pre-footer span {\n    padding-left: 5px; }\n  .pre-footer .col-a {\n    padding-bottom: 15px; }\n  @media (min-width: 768px) {\n    .pre-footer .col-a {\n      padding-right: 60px;\n      padding-bottom: 0;\n      border-right: 1px solid #ddd; }\n    .pre-footer .col-b {\n      padding-left: 70px; } }\n"
  },
  {
    "path": "content/css/slick-theme.css",
    "content": "@charset 'UTF-8';\n/* Slider */\n.slick-loading .slick-list\n{\n    background: #fff url('./ajax-loader.gif') center center no-repeat;\n}\n\n/* Icons */\n/*@font-face\n{\n    font-family: 'slick';\n    font-weight: normal;\n    font-style: normal;\n\n    src: url('./fonts/slick.eot');\n    src: url('./fonts/slick.eot?#iefix') format('embedded-opentype'), url('./fonts/slick.woff') format('woff'), url('./fonts/slick.ttf') format('truetype'), url('./fonts/slick.svg#slick') format('svg');\n}*/\n/* Arrows */\n.slick-prev,\n.slick-next\n{\n    font-size: 0;\n    line-height: 0;\n\n    position: absolute;\n    top: 50%;\n\n    display: block;\n\n    width: 20px;\n    height: 20px;\n    margin-top: -10px;\n    padding: 0;\n\n    cursor: pointer;\n\n    color: transparent;\n    border: none;\n    outline: none;\n    background: transparent;\n}\n.slick-prev:hover,\n.slick-prev:focus,\n.slick-next:hover,\n.slick-next:focus\n{\n    color: transparent;\n    outline: none;\n    background: transparent;\n}\n.slick-prev:hover:before,\n.slick-prev:focus:before,\n.slick-next:hover:before,\n.slick-next:focus:before\n{\n    opacity: 1;\n}\n.slick-prev.slick-disabled:before,\n.slick-next.slick-disabled:before\n{\n    opacity: .25;\n}\n\n.slick-prev:before,\n.slick-next:before\n{\n    font-family: 'slick';\n    font-size: 20px;\n    line-height: 1;\n\n    opacity: .75;\n    color: white;\n\n    -webkit-font-smoothing: antialiased;\n    -moz-osx-font-smoothing: grayscale;\n}\n\n.slick-prev\n{\n    left: -25px;\n}\n[dir='rtl'] .slick-prev\n{\n    right: -25px;\n    left: auto;\n}\n.slick-prev:before\n{\n    content: '←';\n}\n[dir='rtl'] .slick-prev:before\n{\n    content: '→';\n}\n\n.slick-next\n{\n    right: -25px;\n}\n[dir='rtl'] .slick-next\n{\n    right: auto;\n    left: -25px;\n}\n.slick-next:before\n{\n    content: '→';\n}\n[dir='rtl'] .slick-next:before\n{\n    content: '←';\n}\n\n/* Dots */\n.slick-slider\n{\n    margin-bottom: 30px;\n}\n\n.slick-dots\n{\n    position: absolute;\n    bottom: -45px;\n\n    display: block;\n\n    width: 100%;\n    padding: 0;\n\n    list-style: none;\n\n    text-align: center;\n}\n.slick-dots li\n{\n    position: relative;\n\n    display: inline-block;\n\n    width: 20px;\n    height: 20px;\n    margin: 0;\n    padding: 0;\n\n    cursor: pointer;\n}\n.slick-dots li button\n{\n    font-size: 0;\n    line-height: 0;\n\n    display: block;\n\n    width: 20px;\n    height: 20px;\n    padding: 5px;\n\n    cursor: pointer;\n\n    color: transparent;\n    border: 0;\n    outline: none;\n    background: transparent;\n}\n.slick-dots li button:hover,\n.slick-dots li button:focus\n{\n    outline: none;\n}\n.slick-dots li button:hover:before,\n.slick-dots li button:focus:before\n{\n    opacity: 1;\n}\n.slick-dots li button:before\n{\n    font-family: 'slick';\n    font-size: 6px;\n    line-height: 20px;\n\n    position: absolute;\n    top: 0;\n    left: 0;\n\n    width: 20px;\n    height: 20px;\n\n    content: '•';\n    text-align: center;\n\n    opacity: .25;\n    color: black;\n\n    -webkit-font-smoothing: antialiased;\n    -moz-osx-font-smoothing: grayscale;\n}\n.slick-dots li.slick-active button:before\n{\n    opacity: .75;\n    color: black;\n}\n"
  },
  {
    "path": "content/css/slick.css",
    "content": "/* Slider */\n.slick-slider\n{\n    position: relative;\n\n    display: block;\n\n    -moz-box-sizing: border-box;\n         box-sizing: border-box;\n\n    -webkit-user-select: none;\n       -moz-user-select: none;\n        -ms-user-select: none;\n            user-select: none;\n\n    -webkit-touch-callout: none;\n    -khtml-user-select: none;\n    -ms-touch-action: pan-y;\n        touch-action: pan-y;\n    -webkit-tap-highlight-color: transparent;\n}\n\n.slick-list\n{\n    position: relative;\n\n    display: block;\n    overflow: hidden;\n\n    margin: 0;\n    padding: 0;\n}\n.slick-list:focus\n{\n    outline: none;\n}\n.slick-list.dragging\n{\n    cursor: pointer;\n    cursor: hand;\n}\n\n.slick-slider .slick-track,\n.slick-slider .slick-list\n{\n    -webkit-transform: translate3d(0, 0, 0);\n       -moz-transform: translate3d(0, 0, 0);\n        -ms-transform: translate3d(0, 0, 0);\n         -o-transform: translate3d(0, 0, 0);\n            transform: translate3d(0, 0, 0);\n}\n\n.slick-track\n{\n    position: relative;\n    top: 0;\n    left: 0;\n\n    display: block;\n}\n.slick-track:before,\n.slick-track:after\n{\n    display: table;\n\n    content: '';\n}\n.slick-track:after\n{\n    clear: both;\n}\n.slick-loading .slick-track\n{\n    visibility: hidden;\n}\n\n.slick-slide\n{\n    display: none;\n    float: left;\n\n    height: 100%;\n    min-height: 1px;\n}\n[dir='rtl'] .slick-slide\n{\n    float: right;\n}\n.slick-slide img\n{\n    display: block;\n}\n.slick-slide.slick-loading img\n{\n    display: none;\n}\n.slick-slide.dragging img\n{\n    pointer-events: none;\n}\n.slick-initialized .slick-slide\n{\n    display: block;\n}\n.slick-loading .slick-slide\n{\n    visibility: hidden;\n}\n.slick-vertical .slick-slide\n{\n    display: block;\n\n    height: auto;\n\n    border: 1px solid transparent;\n}\n.slick-arrow.slick-hidden {\n    display: none;\n}"
  },
  {
    "path": "content/css/style.css",
    "content": "body {\n\tmargin-top: 50px; /* 50px is the height of the navbar - change this if the navbarn height changes */\n  font-size: 16px;\n}\n\na {\n  color: #4f89e8;\n  font-weight: bold;\n}\n\n.logo-wrapper {\n\tdisplay: inline-block;\n}\n\n.section {\n\tpadding-top: 30px;\n\tpadding-bottom: 30px;\n}\n\n.section-heading {\n\tfont-size: 2.2em;\n\tmargin: 30px 0 10px 0px;\n}\n.section-heading a {\n  color: #111;\n}\n\n.section-time {\n  font-size: 1.0em;\n  color: #999;\n}\n\n.section-lead {\n\tmargin: 30px 0;\n}\n\n.section-paragraph {\n\tmargin: 30px 0;\n}\n\nfooter {\n\tmargin: 50px 0 0;\n\n  background-color: #eee;\n  padding: 30px 0px;\n}\nfooter .container {\n  max-width: 600px;\n  margin: auto;\n  padding: 0;\n  font-size: 0.8em;\n}\n\nfooter .credits {\n}\n\n\n#blog .header {\n  text-align: center;\n  margin-bottom: 60px;\n}\n#blog .header h4 {\n  color: #999;\n  font-size: 1.2em;\n}\n\n#blog {\n  max-width: 600px;\n  margin: auto;\n}\n\n@media (max-width: 768px) {\n\n.section-heading {\n\tfont-size: 2em;\n}\n\n.section {\n\tpadding-top: 25px;\n\tpadding-bottom: 25px;\n}\n\n}\n"
  },
  {
    "path": "content/css/styles.css",
    "content": "@charset \"UTF-8\";\n/*!\n  Ionicons, v3.0.0-alpha.3\n  Created by Ben Sperry for the Ionic Framework, https://ionicons.com/\n  https://twitter.com/benjsperry  https://twitter.com/ionicframework\n  MIT License: https://github.com/driftyco/ionicons\n\n  Android-style icons originally built by Google’s\n  Material Design Icons: https://github.com/google/material-design-icons\n  used under CC BY http://creativecommons.org/licenses/by/4.0/\n  Modified icons to fit ionicon’s grid from original.\n*/\n@import url(\"https://fonts.googleapis.com/css?family=Roboto+Mono\");\n@font-face {\n  font-family: \"Ionicons\";\n  src: url(\"../fonts/ionicons.eot?v=3.0.0-alpha.3\");\n  src: url(\"../fonts/ionicons.eot?v=3.0.0-alpha.3#iefix\") format(\"embedded-opentype\"), url(\"../fonts/ionicons.woff2?v=3.0.0-alpha.3\") format(\"woff2\"), url(\"../fonts/ionicons.woff?v=3.0.0-alpha.3\") format(\"woff\"), url(\"../fonts/ionicons.ttf?v=3.0.0-alpha.3\") format(\"truetype\"), url(\"../fonts/ionicons.svg?v=3.0.0-alpha.3#Ionicons\") format(\"svg\");\n  font-weight: normal;\n  font-style: normal; }\n\n.ion, .ionicons,\n.ion-ios-add:before,\n.ion-ios-add-circle:before,\n.ion-ios-add-circle-outline:before,\n.ion-ios-add-outline:before,\n.ion-ios-alarm:before,\n.ion-ios-alarm-outline:before,\n.ion-ios-albums:before,\n.ion-ios-albums-outline:before,\n.ion-ios-alert:before,\n.ion-ios-alert-outline:before,\n.ion-ios-american-football:before,\n.ion-ios-american-football-outline:before,\n.ion-ios-analytics:before,\n.ion-ios-analytics-outline:before,\n.ion-ios-aperture:before,\n.ion-ios-aperture-outline:before,\n.ion-ios-apps:before,\n.ion-ios-apps-outline:before,\n.ion-ios-appstore:before,\n.ion-ios-appstore-outline:before,\n.ion-ios-archive:before,\n.ion-ios-archive-outline:before,\n.ion-ios-arrow-back:before,\n.ion-ios-arrow-back-outline:before,\n.ion-ios-arrow-down:before,\n.ion-ios-arrow-down-outline:before,\n.ion-ios-arrow-dropdown:before,\n.ion-ios-arrow-dropdown-circle:before,\n.ion-ios-arrow-dropdown-circle-outline:before,\n.ion-ios-arrow-dropdown-outline:before,\n.ion-ios-arrow-dropleft:before,\n.ion-ios-arrow-dropleft-circle:before,\n.ion-ios-arrow-dropleft-circle-outline:before,\n.ion-ios-arrow-dropleft-outline:before,\n.ion-ios-arrow-dropright:before,\n.ion-ios-arrow-dropright-circle:before,\n.ion-ios-arrow-dropright-circle-outline:before,\n.ion-ios-arrow-dropright-outline:before,\n.ion-ios-arrow-dropup:before,\n.ion-ios-arrow-dropup-circle:before,\n.ion-ios-arrow-dropup-circle-outline:before,\n.ion-ios-arrow-dropup-outline:before,\n.ion-ios-arrow-forward:before,\n.ion-ios-arrow-forward-outline:before,\n.ion-ios-arrow-round-back:before,\n.ion-ios-arrow-round-back-outline:before,\n.ion-ios-arrow-round-down:before,\n.ion-ios-arrow-round-down-outline:before,\n.ion-ios-arrow-round-forward:before,\n.ion-ios-arrow-round-forward-outline:before,\n.ion-ios-arrow-round-up:before,\n.ion-ios-arrow-round-up-outline:before,\n.ion-ios-arrow-up:before,\n.ion-ios-arrow-up-outline:before,\n.ion-ios-at:before,\n.ion-ios-at-outline:before,\n.ion-ios-attach:before,\n.ion-ios-attach-outline:before,\n.ion-ios-backspace:before,\n.ion-ios-backspace-outline:before,\n.ion-ios-barcode:before,\n.ion-ios-barcode-outline:before,\n.ion-ios-baseball:before,\n.ion-ios-baseball-outline:before,\n.ion-ios-basket:before,\n.ion-ios-basket-outline:before,\n.ion-ios-basketball:before,\n.ion-ios-basketball-outline:before,\n.ion-ios-battery-charging:before,\n.ion-ios-battery-charging-outline:before,\n.ion-ios-battery-dead:before,\n.ion-ios-battery-dead-outline:before,\n.ion-ios-battery-full:before,\n.ion-ios-battery-full-outline:before,\n.ion-ios-beaker:before,\n.ion-ios-beaker-outline:before,\n.ion-ios-beer:before,\n.ion-ios-beer-outline:before,\n.ion-ios-bicycle:before,\n.ion-ios-bicycle-outline:before,\n.ion-ios-bluetooth:before,\n.ion-ios-bluetooth-outline:before,\n.ion-ios-boat:before,\n.ion-ios-boat-outline:before,\n.ion-ios-body:before,\n.ion-ios-body-outline:before,\n.ion-ios-bonfire:before,\n.ion-ios-bonfire-outline:before,\n.ion-ios-book:before,\n.ion-ios-book-outline:before,\n.ion-ios-bookmark:before,\n.ion-ios-bookmark-outline:before,\n.ion-ios-bookmarks:before,\n.ion-ios-bookmarks-outline:before,\n.ion-ios-bowtie:before,\n.ion-ios-bowtie-outline:before,\n.ion-ios-briefcase:before,\n.ion-ios-briefcase-outline:before,\n.ion-ios-browsers:before,\n.ion-ios-browsers-outline:before,\n.ion-ios-brush:before,\n.ion-ios-brush-outline:before,\n.ion-ios-bug:before,\n.ion-ios-bug-outline:before,\n.ion-ios-build:before,\n.ion-ios-build-outline:before,\n.ion-ios-bulb:before,\n.ion-ios-bulb-outline:before,\n.ion-ios-bus:before,\n.ion-ios-bus-outline:before,\n.ion-ios-cafe:before,\n.ion-ios-cafe-outline:before,\n.ion-ios-calculator:before,\n.ion-ios-calculator-outline:before,\n.ion-ios-calendar:before,\n.ion-ios-calendar-outline:before,\n.ion-ios-call:before,\n.ion-ios-call-outline:before,\n.ion-ios-camera:before,\n.ion-ios-camera-outline:before,\n.ion-ios-car:before,\n.ion-ios-car-outline:before,\n.ion-ios-card:before,\n.ion-ios-card-outline:before,\n.ion-ios-cart:before,\n.ion-ios-cart-outline:before,\n.ion-ios-cash:before,\n.ion-ios-cash-outline:before,\n.ion-ios-chatboxes:before,\n.ion-ios-chatboxes-outline:before,\n.ion-ios-chatbubbles:before,\n.ion-ios-chatbubbles-outline:before,\n.ion-ios-checkbox:before,\n.ion-ios-checkbox-outline:before,\n.ion-ios-checkmark:before,\n.ion-ios-checkmark-circle:before,\n.ion-ios-checkmark-circle-outline:before,\n.ion-ios-checkmark-outline:before,\n.ion-ios-clipboard:before,\n.ion-ios-clipboard-outline:before,\n.ion-ios-clock:before,\n.ion-ios-clock-outline:before,\n.ion-ios-close:before,\n.ion-ios-close-circle:before,\n.ion-ios-close-circle-outline:before,\n.ion-ios-close-outline:before,\n.ion-ios-closed-captioning:before,\n.ion-ios-closed-captioning-outline:before,\n.ion-ios-cloud:before,\n.ion-ios-cloud-circle:before,\n.ion-ios-cloud-circle-outline:before,\n.ion-ios-cloud-done:before,\n.ion-ios-cloud-done-outline:before,\n.ion-ios-cloud-download:before,\n.ion-ios-cloud-download-outline:before,\n.ion-ios-cloud-outline:before,\n.ion-ios-cloud-upload:before,\n.ion-ios-cloud-upload-outline:before,\n.ion-ios-cloudy:before,\n.ion-ios-cloudy-night:before,\n.ion-ios-cloudy-night-outline:before,\n.ion-ios-cloudy-outline:before,\n.ion-ios-code:before,\n.ion-ios-code-download:before,\n.ion-ios-code-download-outline:before,\n.ion-ios-code-outline:before,\n.ion-ios-code-working:before,\n.ion-ios-code-working-outline:before,\n.ion-ios-cog:before,\n.ion-ios-cog-outline:before,\n.ion-ios-color-fill:before,\n.ion-ios-color-fill-outline:before,\n.ion-ios-color-filter:before,\n.ion-ios-color-filter-outline:before,\n.ion-ios-color-palette:before,\n.ion-ios-color-palette-outline:before,\n.ion-ios-color-wand:before,\n.ion-ios-color-wand-outline:before,\n.ion-ios-compass:before,\n.ion-ios-compass-outline:before,\n.ion-ios-construct:before,\n.ion-ios-construct-outline:before,\n.ion-ios-contact:before,\n.ion-ios-contact-outline:before,\n.ion-ios-contacts:before,\n.ion-ios-contacts-outline:before,\n.ion-ios-contract:before,\n.ion-ios-contract-outline:before,\n.ion-ios-contrast:before,\n.ion-ios-contrast-outline:before,\n.ion-ios-copy:before,\n.ion-ios-copy-outline:before,\n.ion-ios-create:before,\n.ion-ios-create-outline:before,\n.ion-ios-crop:before,\n.ion-ios-crop-outline:before,\n.ion-ios-cube:before,\n.ion-ios-cube-outline:before,\n.ion-ios-cut:before,\n.ion-ios-cut-outline:before,\n.ion-ios-desktop:before,\n.ion-ios-desktop-outline:before,\n.ion-ios-disc:before,\n.ion-ios-disc-outline:before,\n.ion-ios-document:before,\n.ion-ios-document-outline:before,\n.ion-ios-done-all:before,\n.ion-ios-done-all-outline:before,\n.ion-ios-download:before,\n.ion-ios-download-outline:before,\n.ion-ios-easel:before,\n.ion-ios-easel-outline:before,\n.ion-ios-egg:before,\n.ion-ios-egg-outline:before,\n.ion-ios-exit:before,\n.ion-ios-exit-outline:before,\n.ion-ios-expand:before,\n.ion-ios-expand-outline:before,\n.ion-ios-eye:before,\n.ion-ios-eye-off:before,\n.ion-ios-eye-off-outline:before,\n.ion-ios-eye-outline:before,\n.ion-ios-fastforward:before,\n.ion-ios-fastforward-outline:before,\n.ion-ios-female:before,\n.ion-ios-female-outline:before,\n.ion-ios-filing:before,\n.ion-ios-filing-outline:before,\n.ion-ios-film:before,\n.ion-ios-film-outline:before,\n.ion-ios-finger-print:before,\n.ion-ios-finger-print-outline:before,\n.ion-ios-flag:before,\n.ion-ios-flag-outline:before,\n.ion-ios-flame:before,\n.ion-ios-flame-outline:before,\n.ion-ios-flash:before,\n.ion-ios-flash-outline:before,\n.ion-ios-flask:before,\n.ion-ios-flask-outline:before,\n.ion-ios-flower:before,\n.ion-ios-flower-outline:before,\n.ion-ios-folder:before,\n.ion-ios-folder-open:before,\n.ion-ios-folder-open-outline:before,\n.ion-ios-folder-outline:before,\n.ion-ios-football:before,\n.ion-ios-football-outline:before,\n.ion-ios-funnel:before,\n.ion-ios-funnel-outline:before,\n.ion-ios-game-controller-a:before,\n.ion-ios-game-controller-a-outline:before,\n.ion-ios-game-controller-b:before,\n.ion-ios-game-controller-b-outline:before,\n.ion-ios-git-branch:before,\n.ion-ios-git-branch-outline:before,\n.ion-ios-git-commit:before,\n.ion-ios-git-commit-outline:before,\n.ion-ios-git-compare:before,\n.ion-ios-git-compare-outline:before,\n.ion-ios-git-merge:before,\n.ion-ios-git-merge-outline:before,\n.ion-ios-git-network:before,\n.ion-ios-git-network-outline:before,\n.ion-ios-git-pull-request:before,\n.ion-ios-git-pull-request-outline:before,\n.ion-ios-glasses:before,\n.ion-ios-glasses-outline:before,\n.ion-ios-globe:before,\n.ion-ios-globe-outline:before,\n.ion-ios-grid:before,\n.ion-ios-grid-outline:before,\n.ion-ios-hammer:before,\n.ion-ios-hammer-outline:before,\n.ion-ios-hand:before,\n.ion-ios-hand-outline:before,\n.ion-ios-happy:before,\n.ion-ios-happy-outline:before,\n.ion-ios-headset:before,\n.ion-ios-headset-outline:before,\n.ion-ios-heart:before,\n.ion-ios-heart-outline:before,\n.ion-ios-help:before,\n.ion-ios-help-buoy:before,\n.ion-ios-help-buoy-outline:before,\n.ion-ios-help-circle:before,\n.ion-ios-help-circle-outline:before,\n.ion-ios-help-outline:before,\n.ion-ios-home:before,\n.ion-ios-home-outline:before,\n.ion-ios-ice-cream:before,\n.ion-ios-ice-cream-outline:before,\n.ion-ios-image:before,\n.ion-ios-image-outline:before,\n.ion-ios-images:before,\n.ion-ios-images-outline:before,\n.ion-ios-infinite:before,\n.ion-ios-infinite-outline:before,\n.ion-ios-information:before,\n.ion-ios-information-circle:before,\n.ion-ios-information-circle-outline:before,\n.ion-ios-information-outline:before,\n.ion-ios-ionic:before,\n.ion-ios-ionic-outline:before,\n.ion-ios-ionitron:before,\n.ion-ios-ionitron-outline:before,\n.ion-ios-jet:before,\n.ion-ios-jet-outline:before,\n.ion-ios-key:before,\n.ion-ios-key-outline:before,\n.ion-ios-keypad:before,\n.ion-ios-keypad-outline:before,\n.ion-ios-laptop:before,\n.ion-ios-laptop-outline:before,\n.ion-ios-leaf:before,\n.ion-ios-leaf-outline:before,\n.ion-ios-link:before,\n.ion-ios-link-outline:before,\n.ion-ios-list:before,\n.ion-ios-list-box:before,\n.ion-ios-list-box-outline:before,\n.ion-ios-list-outline:before,\n.ion-ios-locate:before,\n.ion-ios-locate-outline:before,\n.ion-ios-lock:before,\n.ion-ios-lock-outline:before,\n.ion-ios-log-in:before,\n.ion-ios-log-in-outline:before,\n.ion-ios-log-out:before,\n.ion-ios-log-out-outline:before,\n.ion-ios-magnet:before,\n.ion-ios-magnet-outline:before,\n.ion-ios-mail:before,\n.ion-ios-mail-open:before,\n.ion-ios-mail-open-outline:before,\n.ion-ios-mail-outline:before,\n.ion-ios-male:before,\n.ion-ios-male-outline:before,\n.ion-ios-man:before,\n.ion-ios-man-outline:before,\n.ion-ios-map:before,\n.ion-ios-map-outline:before,\n.ion-ios-medal:before,\n.ion-ios-medal-outline:before,\n.ion-ios-medical:before,\n.ion-ios-medical-outline:before,\n.ion-ios-medkit:before,\n.ion-ios-medkit-outline:before,\n.ion-ios-megaphone:before,\n.ion-ios-megaphone-outline:before,\n.ion-ios-menu:before,\n.ion-ios-menu-outline:before,\n.ion-ios-mic:before,\n.ion-ios-mic-off:before,\n.ion-ios-mic-off-outline:before,\n.ion-ios-mic-outline:before,\n.ion-ios-microphone:before,\n.ion-ios-microphone-outline:before,\n.ion-ios-moon:before,\n.ion-ios-moon-outline:before,\n.ion-ios-more:before,\n.ion-ios-more-outline:before,\n.ion-ios-move:before,\n.ion-ios-move-outline:before,\n.ion-ios-musical-note:before,\n.ion-ios-musical-note-outline:before,\n.ion-ios-musical-notes:before,\n.ion-ios-musical-notes-outline:before,\n.ion-ios-navigate:before,\n.ion-ios-navigate-outline:before,\n.ion-ios-no-smoking:before,\n.ion-ios-no-smoking-outline:before,\n.ion-ios-notifications:before,\n.ion-ios-notifications-off:before,\n.ion-ios-notifications-off-outline:before,\n.ion-ios-notifications-outline:before,\n.ion-ios-nuclear:before,\n.ion-ios-nuclear-outline:before,\n.ion-ios-nutrition:before,\n.ion-ios-nutrition-outline:before,\n.ion-ios-open:before,\n.ion-ios-open-outline:before,\n.ion-ios-options:before,\n.ion-ios-options-outline:before,\n.ion-ios-outlet:before,\n.ion-ios-outlet-outline:before,\n.ion-ios-paper:before,\n.ion-ios-paper-outline:before,\n.ion-ios-paper-plane:before,\n.ion-ios-paper-plane-outline:before,\n.ion-ios-partly-sunny:before,\n.ion-ios-partly-sunny-outline:before,\n.ion-ios-pause:before,\n.ion-ios-pause-outline:before,\n.ion-ios-paw:before,\n.ion-ios-paw-outline:before,\n.ion-ios-people:before,\n.ion-ios-people-outline:before,\n.ion-ios-person:before,\n.ion-ios-person-add:before,\n.ion-ios-person-add-outline:before,\n.ion-ios-person-outline:before,\n.ion-ios-phone-landscape:before,\n.ion-ios-phone-landscape-outline:before,\n.ion-ios-phone-portrait:before,\n.ion-ios-phone-portrait-outline:before,\n.ion-ios-photos:before,\n.ion-ios-photos-outline:before,\n.ion-ios-pie:before,\n.ion-ios-pie-outline:before,\n.ion-ios-pin:before,\n.ion-ios-pin-outline:before,\n.ion-ios-pint:before,\n.ion-ios-pint-outline:before,\n.ion-ios-pizza:before,\n.ion-ios-pizza-outline:before,\n.ion-ios-plane:before,\n.ion-ios-plane-outline:before,\n.ion-ios-planet:before,\n.ion-ios-planet-outline:before,\n.ion-ios-play:before,\n.ion-ios-play-outline:before,\n.ion-ios-podium:before,\n.ion-ios-podium-outline:before,\n.ion-ios-power:before,\n.ion-ios-power-outline:before,\n.ion-ios-pricetag:before,\n.ion-ios-pricetag-outline:before,\n.ion-ios-pricetags:before,\n.ion-ios-pricetags-outline:before,\n.ion-ios-print:before,\n.ion-ios-print-outline:before,\n.ion-ios-pulse:before,\n.ion-ios-pulse-outline:before,\n.ion-ios-qr-scanner:before,\n.ion-ios-qr-scanner-outline:before,\n.ion-ios-quote:before,\n.ion-ios-quote-outline:before,\n.ion-ios-radio:before,\n.ion-ios-radio-button-off:before,\n.ion-ios-radio-button-off-outline:before,\n.ion-ios-radio-button-on:before,\n.ion-ios-radio-button-on-outline:before,\n.ion-ios-radio-outline:before,\n.ion-ios-rainy:before,\n.ion-ios-rainy-outline:before,\n.ion-ios-recording:before,\n.ion-ios-recording-outline:before,\n.ion-ios-redo:before,\n.ion-ios-redo-outline:before,\n.ion-ios-refresh:before,\n.ion-ios-refresh-circle:before,\n.ion-ios-refresh-circle-outline:before,\n.ion-ios-refresh-outline:before,\n.ion-ios-remove:before,\n.ion-ios-remove-circle:before,\n.ion-ios-remove-circle-outline:before,\n.ion-ios-remove-outline:before,\n.ion-ios-reorder:before,\n.ion-ios-reorder-outline:before,\n.ion-ios-repeat:before,\n.ion-ios-repeat-outline:before,\n.ion-ios-resize:before,\n.ion-ios-resize-outline:before,\n.ion-ios-restaurant:before,\n.ion-ios-restaurant-outline:before,\n.ion-ios-return-left:before,\n.ion-ios-return-left-outline:before,\n.ion-ios-return-right:before,\n.ion-ios-return-right-outline:before,\n.ion-ios-reverse-camera:before,\n.ion-ios-reverse-camera-outline:before,\n.ion-ios-rewind:before,\n.ion-ios-rewind-outline:before,\n.ion-ios-ribbon:before,\n.ion-ios-ribbon-outline:before,\n.ion-ios-rose:before,\n.ion-ios-rose-outline:before,\n.ion-ios-sad:before,\n.ion-ios-sad-outline:before,\n.ion-ios-school:before,\n.ion-ios-school-outline:before,\n.ion-ios-search:before,\n.ion-ios-search-outline:before,\n.ion-ios-send:before,\n.ion-ios-send-outline:before,\n.ion-ios-settings:before,\n.ion-ios-settings-outline:before,\n.ion-ios-share:before,\n.ion-ios-share-alt:before,\n.ion-ios-share-alt-outline:before,\n.ion-ios-share-outline:before,\n.ion-ios-shirt:before,\n.ion-ios-shirt-outline:before,\n.ion-ios-shuffle:before,\n.ion-ios-shuffle-outline:before,\n.ion-ios-skip-backward:before,\n.ion-ios-skip-backward-outline:before,\n.ion-ios-skip-forward:before,\n.ion-ios-skip-forward-outline:before,\n.ion-ios-snow:before,\n.ion-ios-snow-outline:before,\n.ion-ios-speedometer:before,\n.ion-ios-speedometer-outline:before,\n.ion-ios-square:before,\n.ion-ios-square-outline:before,\n.ion-ios-star:before,\n.ion-ios-star-half:before,\n.ion-ios-star-half-outline:before,\n.ion-ios-star-outline:before,\n.ion-ios-stats:before,\n.ion-ios-stats-outline:before,\n.ion-ios-stopwatch:before,\n.ion-ios-stopwatch-outline:before,\n.ion-ios-subway:before,\n.ion-ios-subway-outline:before,\n.ion-ios-sunny:before,\n.ion-ios-sunny-outline:before,\n.ion-ios-swap:before,\n.ion-ios-swap-outline:before,\n.ion-ios-switch:before,\n.ion-ios-switch-outline:before,\n.ion-ios-sync:before,\n.ion-ios-sync-outline:before,\n.ion-ios-tablet-landscape:before,\n.ion-ios-tablet-landscape-outline:before,\n.ion-ios-tablet-portrait:before,\n.ion-ios-tablet-portrait-outline:before,\n.ion-ios-tennisball:before,\n.ion-ios-tennisball-outline:before,\n.ion-ios-text:before,\n.ion-ios-text-outline:before,\n.ion-ios-thermometer:before,\n.ion-ios-thermometer-outline:before,\n.ion-ios-thumbs-down:before,\n.ion-ios-thumbs-down-outline:before,\n.ion-ios-thumbs-up:before,\n.ion-ios-thumbs-up-outline:before,\n.ion-ios-thunderstorm:before,\n.ion-ios-thunderstorm-outline:before,\n.ion-ios-time:before,\n.ion-ios-time-outline:before,\n.ion-ios-timer:before,\n.ion-ios-timer-outline:before,\n.ion-ios-train:before,\n.ion-ios-train-outline:before,\n.ion-ios-transgender:before,\n.ion-ios-transgender-outline:before,\n.ion-ios-trash:before,\n.ion-ios-trash-outline:before,\n.ion-ios-trending-down:before,\n.ion-ios-trending-down-outline:before,\n.ion-ios-trending-up:before,\n.ion-ios-trending-up-outline:before,\n.ion-ios-trophy:before,\n.ion-ios-trophy-outline:before,\n.ion-ios-umbrella:before,\n.ion-ios-umbrella-outline:before,\n.ion-ios-undo:before,\n.ion-ios-undo-outline:before,\n.ion-ios-unlock:before,\n.ion-ios-unlock-outline:before,\n.ion-ios-videocam:before,\n.ion-ios-videocam-outline:before,\n.ion-ios-volume-down:before,\n.ion-ios-volume-down-outline:before,\n.ion-ios-volume-mute:before,\n.ion-ios-volume-mute-outline:before,\n.ion-ios-volume-off:before,\n.ion-ios-volume-off-outline:before,\n.ion-ios-volume-up:before,\n.ion-ios-volume-up-outline:before,\n.ion-ios-walk:before,\n.ion-ios-walk-outline:before,\n.ion-ios-warning:before,\n.ion-ios-warning-outline:before,\n.ion-ios-watch:before,\n.ion-ios-watch-outline:before,\n.ion-ios-water:before,\n.ion-ios-water-outline:before,\n.ion-ios-wifi:before,\n.ion-ios-wifi-outline:before,\n.ion-ios-wine:before,\n.ion-ios-wine-outline:before,\n.ion-ios-woman:before,\n.ion-ios-woman-outline:before,\n.ion-logo-android:before,\n.ion-logo-angular:before,\n.ion-logo-apple:before,\n.ion-logo-bitcoin:before,\n.ion-logo-buffer:before,\n.ion-logo-chrome:before,\n.ion-logo-codepen:before,\n.ion-logo-css3:before,\n.ion-logo-designernews:before,\n.ion-logo-dribbble:before,\n.ion-logo-dropbox:before,\n.ion-logo-euro:before,\n.ion-logo-facebook:before,\n.ion-logo-foursquare:before,\n.ion-logo-freebsd-devil:before,\n.ion-logo-github:before,\n.ion-logo-google:before,\n.ion-logo-googleplus:before,\n.ion-logo-hackernews:before,\n.ion-logo-html5:before,\n.ion-logo-instagram:before,\n.ion-logo-javascript:before,\n.ion-logo-linkedin:before,\n.ion-logo-markdown:before,\n.ion-logo-nodejs:before,\n.ion-logo-octocat:before,\n.ion-logo-pinterest:before,\n.ion-logo-playstation:before,\n.ion-logo-python:before,\n.ion-logo-reddit:before,\n.ion-logo-rss:before,\n.ion-logo-sass:before,\n.ion-logo-skype:before,\n.ion-logo-snapchat:before,\n.ion-logo-steam:before,\n.ion-logo-tumblr:before,\n.ion-logo-tux:before,\n.ion-logo-twitch:before,\n.ion-logo-twitter:before,\n.ion-logo-usd:before,\n.ion-logo-vimeo:before,\n.ion-logo-whatsapp:before,\n.ion-logo-windows:before,\n.ion-logo-wordpress:before,\n.ion-logo-xbox:before,\n.ion-logo-yahoo:before,\n.ion-logo-yen:before,\n.ion-logo-youtube:before,\n.ion-md-add:before,\n.ion-md-add-circle:before,\n.ion-md-alarm:before,\n.ion-md-albums:before,\n.ion-md-alert:before,\n.ion-md-american-football:before,\n.ion-md-analytics:before,\n.ion-md-aperture:before,\n.ion-md-apps:before,\n.ion-md-appstore:before,\n.ion-md-archive:before,\n.ion-md-arrow-back:before,\n.ion-md-arrow-down:before,\n.ion-md-arrow-dropdown:before,\n.ion-md-arrow-dropdown-circle:before,\n.ion-md-arrow-dropleft:before,\n.ion-md-arrow-dropleft-circle:before,\n.ion-md-arrow-dropright:before,\n.ion-md-arrow-dropright-circle:before,\n.ion-md-arrow-dropup:before,\n.ion-md-arrow-dropup-circle:before,\n.ion-md-arrow-forward:before,\n.ion-md-arrow-round-back:before,\n.ion-md-arrow-round-down:before,\n.ion-md-arrow-round-forward:before,\n.ion-md-arrow-round-up:before,\n.ion-md-arrow-up:before,\n.ion-md-at:before,\n.ion-md-attach:before,\n.ion-md-backspace:before,\n.ion-md-barcode:before,\n.ion-md-baseball:before,\n.ion-md-basket:before,\n.ion-md-basketball:before,\n.ion-md-battery-charging:before,\n.ion-md-battery-dead:before,\n.ion-md-battery-full:before,\n.ion-md-beaker:before,\n.ion-md-beer:before,\n.ion-md-bicycle:before,\n.ion-md-bluetooth:before,\n.ion-md-boat:before,\n.ion-md-body:before,\n.ion-md-bonfire:before,\n.ion-md-book:before,\n.ion-md-bookmark:before,\n.ion-md-bookmarks:before,\n.ion-md-bowtie:before,\n.ion-md-briefcase:before,\n.ion-md-browsers:before,\n.ion-md-brush:before,\n.ion-md-bug:before,\n.ion-md-build:before,\n.ion-md-bulb:before,\n.ion-md-bus:before,\n.ion-md-cafe:before,\n.ion-md-calculator:before,\n.ion-md-calendar:before,\n.ion-md-call:before,\n.ion-md-camera:before,\n.ion-md-car:before,\n.ion-md-card:before,\n.ion-md-cart:before,\n.ion-md-cash:before,\n.ion-md-chatboxes:before,\n.ion-md-chatbubbles:before,\n.ion-md-checkbox:before,\n.ion-md-checkbox-outline:before,\n.ion-md-checkmark:before,\n.ion-md-checkmark-circle:before,\n.ion-md-checkmark-circle-outline:before,\n.ion-md-clipboard:before,\n.ion-md-clock:before,\n.ion-md-close:before,\n.ion-md-close-circle:before,\n.ion-md-closed-captioning:before,\n.ion-md-cloud:before,\n.ion-md-cloud-circle:before,\n.ion-md-cloud-done:before,\n.ion-md-cloud-download:before,\n.ion-md-cloud-outline:before,\n.ion-md-cloud-upload:before,\n.ion-md-cloudy:before,\n.ion-md-cloudy-night:before,\n.ion-md-code:before,\n.ion-md-code-download:before,\n.ion-md-code-working:before,\n.ion-md-cog:before,\n.ion-md-color-fill:before,\n.ion-md-color-filter:before,\n.ion-md-color-palette:before,\n.ion-md-color-wand:before,\n.ion-md-compass:before,\n.ion-md-construct:before,\n.ion-md-contact:before,\n.ion-md-contacts:before,\n.ion-md-contract:before,\n.ion-md-contrast:before,\n.ion-md-copy:before,\n.ion-md-create:before,\n.ion-md-crop:before,\n.ion-md-cube:before,\n.ion-md-cut:before,\n.ion-md-desktop:before,\n.ion-md-disc:before,\n.ion-md-document:before,\n.ion-md-done-all:before,\n.ion-md-download:before,\n.ion-md-easel:before,\n.ion-md-egg:before,\n.ion-md-exit:before,\n.ion-md-expand:before,\n.ion-md-eye:before,\n.ion-md-eye-off:before,\n.ion-md-fastforward:before,\n.ion-md-female:before,\n.ion-md-filing:before,\n.ion-md-film:before,\n.ion-md-finger-print:before,\n.ion-md-flag:before,\n.ion-md-flame:before,\n.ion-md-flash:before,\n.ion-md-flask:before,\n.ion-md-flower:before,\n.ion-md-folder:before,\n.ion-md-folder-open:before,\n.ion-md-football:before,\n.ion-md-funnel:before,\n.ion-md-game-controller-a:before,\n.ion-md-game-controller-b:before,\n.ion-md-git-branch:before,\n.ion-md-git-commit:before,\n.ion-md-git-compare:before,\n.ion-md-git-merge:before,\n.ion-md-git-network:before,\n.ion-md-git-pull-request:before,\n.ion-md-glasses:before,\n.ion-md-globe:before,\n.ion-md-grid:before,\n.ion-md-hammer:before,\n.ion-md-hand:before,\n.ion-md-happy:before,\n.ion-md-headset:before,\n.ion-md-heart:before,\n.ion-md-heart-outline:before,\n.ion-md-help:before,\n.ion-md-help-buoy:before,\n.ion-md-help-circle:before,\n.ion-md-home:before,\n.ion-md-ice-cream:before,\n.ion-md-image:before,\n.ion-md-images:before,\n.ion-md-infinite:before,\n.ion-md-information:before,\n.ion-md-information-circle:before,\n.ion-md-ionic:before,\n.ion-md-ionitron:before,\n.ion-md-jet:before,\n.ion-md-key:before,\n.ion-md-keypad:before,\n.ion-md-laptop:before,\n.ion-md-leaf:before,\n.ion-md-link:before,\n.ion-md-list:before,\n.ion-md-list-box:before,\n.ion-md-locate:before,\n.ion-md-lock:before,\n.ion-md-log-in:before,\n.ion-md-log-out:before,\n.ion-md-magnet:before,\n.ion-md-mail:before,\n.ion-md-mail-open:before,\n.ion-md-male:before,\n.ion-md-man:before,\n.ion-md-map:before,\n.ion-md-medal:before,\n.ion-md-medical:before,\n.ion-md-medkit:before,\n.ion-md-megaphone:before,\n.ion-md-menu:before,\n.ion-md-mic:before,\n.ion-md-mic-off:before,\n.ion-md-microphone:before,\n.ion-md-moon:before,\n.ion-md-more:before,\n.ion-md-move:before,\n.ion-md-musical-note:before,\n.ion-md-musical-notes:before,\n.ion-md-navigate:before,\n.ion-md-no-smoking:before,\n.ion-md-notifications:before,\n.ion-md-notifications-off:before,\n.ion-md-notifications-outline:before,\n.ion-md-nuclear:before,\n.ion-md-nutrition:before,\n.ion-md-open:before,\n.ion-md-options:before,\n.ion-md-outlet:before,\n.ion-md-paper:before,\n.ion-md-paper-plane:before,\n.ion-md-partly-sunny:before,\n.ion-md-pause:before,\n.ion-md-paw:before,\n.ion-md-people:before,\n.ion-md-person:before,\n.ion-md-person-add:before,\n.ion-md-phone-landscape:before,\n.ion-md-phone-portrait:before,\n.ion-md-photos:before,\n.ion-md-pie:before,\n.ion-md-pin:before,\n.ion-md-pint:before,\n.ion-md-pizza:before,\n.ion-md-plane:before,\n.ion-md-planet:before,\n.ion-md-play:before,\n.ion-md-podium:before,\n.ion-md-power:before,\n.ion-md-pricetag:before,\n.ion-md-pricetags:before,\n.ion-md-print:before,\n.ion-md-pulse:before,\n.ion-md-qr-scanner:before,\n.ion-md-quote:before,\n.ion-md-radio:before,\n.ion-md-radio-button-off:before,\n.ion-md-radio-button-on:before,\n.ion-md-rainy:before,\n.ion-md-recording:before,\n.ion-md-redo:before,\n.ion-md-refresh:before,\n.ion-md-refresh-circle:before,\n.ion-md-remove:before,\n.ion-md-remove-circle:before,\n.ion-md-reorder:before,\n.ion-md-repeat:before,\n.ion-md-resize:before,\n.ion-md-restaurant:before,\n.ion-md-return-left:before,\n.ion-md-return-right:before,\n.ion-md-reverse-camera:before,\n.ion-md-rewind:before,\n.ion-md-ribbon:before,\n.ion-md-rose:before,\n.ion-md-sad:before,\n.ion-md-school:before,\n.ion-md-search:before,\n.ion-md-send:before,\n.ion-md-settings:before,\n.ion-md-share:before,\n.ion-md-share-alt:before,\n.ion-md-shirt:before,\n.ion-md-shuffle:before,\n.ion-md-skip-backward:before,\n.ion-md-skip-forward:before,\n.ion-md-snow:before,\n.ion-md-speedometer:before,\n.ion-md-square:before,\n.ion-md-square-outline:before,\n.ion-md-star:before,\n.ion-md-star-half:before,\n.ion-md-star-outline:before,\n.ion-md-stats:before,\n.ion-md-stopwatch:before,\n.ion-md-subway:before,\n.ion-md-sunny:before,\n.ion-md-swap:before,\n.ion-md-switch:before,\n.ion-md-sync:before,\n.ion-md-tablet-landscape:before,\n.ion-md-tablet-portrait:before,\n.ion-md-tennisball:before,\n.ion-md-text:before,\n.ion-md-thermometer:before,\n.ion-md-thumbs-down:before,\n.ion-md-thumbs-up:before,\n.ion-md-thunderstorm:before,\n.ion-md-time:before,\n.ion-md-timer:before,\n.ion-md-train:before,\n.ion-md-transgender:before,\n.ion-md-trash:before,\n.ion-md-trending-down:before,\n.ion-md-trending-up:before,\n.ion-md-trophy:before,\n.ion-md-umbrella:before,\n.ion-md-undo:before,\n.ion-md-unlock:before,\n.ion-md-videocam:before,\n.ion-md-volume-down:before,\n.ion-md-volume-mute:before,\n.ion-md-volume-off:before,\n.ion-md-volume-up:before,\n.ion-md-walk:before,\n.ion-md-warning:before,\n.ion-md-watch:before,\n.ion-md-water:before,\n.ion-md-wifi:before,\n.ion-md-wine:before,\n.ion-md-woman:before {\n  display: inline-block;\n  font-family: \"Ionicons\";\n  speak: none;\n  font-style: normal;\n  font-weight: normal;\n  font-variant: normal;\n  text-transform: none;\n  text-rendering: auto;\n  line-height: 1;\n  -webkit-font-smoothing: antialiased;\n  -moz-osx-font-smoothing: grayscale; }\n\n.ion-ios-add:before {\n  content: \"\\f102\"; }\n\n.ion-ios-add-circle:before {\n  content: \"\\f101\"; }\n\n.ion-ios-add-circle-outline:before {\n  content: \"\\f100\"; }\n\n.ion-ios-add-outline:before {\n  content: \"\\f102\"; }\n\n.ion-ios-alarm:before {\n  content: \"\\f3c8\"; }\n\n.ion-ios-alarm-outline:before {\n  content: \"\\f3c7\"; }\n\n.ion-ios-albums:before {\n  content: \"\\f3ca\"; }\n\n.ion-ios-albums-outline:before {\n  content: \"\\f3c9\"; }\n\n.ion-ios-alert:before {\n  content: \"\\f104\"; }\n\n.ion-ios-alert-outline:before {\n  content: \"\\f103\"; }\n\n.ion-ios-american-football:before {\n  content: \"\\f106\"; }\n\n.ion-ios-american-football-outline:before {\n  content: \"\\f105\"; }\n\n.ion-ios-analytics:before {\n  content: \"\\f3ce\"; }\n\n.ion-ios-analytics-outline:before {\n  content: \"\\f3cd\"; }\n\n.ion-ios-aperture:before {\n  content: \"\\f108\"; }\n\n.ion-ios-aperture-outline:before {\n  content: \"\\f107\"; }\n\n.ion-ios-apps:before {\n  content: \"\\f10a\"; }\n\n.ion-ios-apps-outline:before {\n  content: \"\\f109\"; }\n\n.ion-ios-appstore:before {\n  content: \"\\f10c\"; }\n\n.ion-ios-appstore-outline:before {\n  content: \"\\f10b\"; }\n\n.ion-ios-archive:before {\n  content: \"\\f10e\"; }\n\n.ion-ios-archive-outline:before {\n  content: \"\\f10d\"; }\n\n.ion-ios-arrow-back:before {\n  content: \"\\f3cf\"; }\n\n.ion-ios-arrow-back-outline:before {\n  content: \"\\f3cf\"; }\n\n.ion-ios-arrow-down:before {\n  content: \"\\f3d0\"; }\n\n.ion-ios-arrow-down-outline:before {\n  content: \"\\f3d0\"; }\n\n.ion-ios-arrow-dropdown:before {\n  content: \"\\f110\"; }\n\n.ion-ios-arrow-dropdown-circle:before {\n  content: \"\\f10f\"; }\n\n.ion-ios-arrow-dropdown-circle-outline:before {\n  content: \"\\f10f\"; }\n\n.ion-ios-arrow-dropdown-outline:before {\n  content: \"\\f110\"; }\n\n.ion-ios-arrow-dropleft:before {\n  content: \"\\f112\"; }\n\n.ion-ios-arrow-dropleft-circle:before {\n  content: \"\\f111\"; }\n\n.ion-ios-arrow-dropleft-circle-outline:before {\n  content: \"\\f111\"; }\n\n.ion-ios-arrow-dropleft-outline:before {\n  content: \"\\f112\"; }\n\n.ion-ios-arrow-dropright:before {\n  content: \"\\f114\"; }\n\n.ion-ios-arrow-dropright-circle:before {\n  content: \"\\f113\"; }\n\n.ion-ios-arrow-dropright-circle-outline:before {\n  content: \"\\f113\"; }\n\n.ion-ios-arrow-dropright-outline:before {\n  content: \"\\f114\"; }\n\n.ion-ios-arrow-dropup:before {\n  content: \"\\f116\"; }\n\n.ion-ios-arrow-dropup-circle:before {\n  content: \"\\f115\"; }\n\n.ion-ios-arrow-dropup-circle-outline:before {\n  content: \"\\f115\"; }\n\n.ion-ios-arrow-dropup-outline:before {\n  content: \"\\f116\"; }\n\n.ion-ios-arrow-forward:before {\n  content: \"\\f3d1\"; }\n\n.ion-ios-arrow-forward-outline:before {\n  content: \"\\f3d1\"; }\n\n.ion-ios-arrow-round-back:before {\n  content: \"\\f117\"; }\n\n.ion-ios-arrow-round-back-outline:before {\n  content: \"\\f117\"; }\n\n.ion-ios-arrow-round-down:before {\n  content: \"\\f118\"; }\n\n.ion-ios-arrow-round-down-outline:before {\n  content: \"\\f118\"; }\n\n.ion-ios-arrow-round-forward:before {\n  content: \"\\f119\"; }\n\n.ion-ios-arrow-round-forward-outline:before {\n  content: \"\\f119\"; }\n\n.ion-ios-arrow-round-up:before {\n  content: \"\\f11a\"; }\n\n.ion-ios-arrow-round-up-outline:before {\n  content: \"\\f11a\"; }\n\n.ion-ios-arrow-up:before {\n  content: \"\\f3d8\"; }\n\n.ion-ios-arrow-up-outline:before {\n  content: \"\\f3d8\"; }\n\n.ion-ios-at:before {\n  content: \"\\f3da\"; }\n\n.ion-ios-at-outline:before {\n  content: \"\\f3d9\"; }\n\n.ion-ios-attach:before {\n  content: \"\\f11b\"; }\n\n.ion-ios-attach-outline:before {\n  content: \"\\f11b\"; }\n\n.ion-ios-backspace:before {\n  content: \"\\f11d\"; }\n\n.ion-ios-backspace-outline:before {\n  content: \"\\f11c\"; }\n\n.ion-ios-barcode:before {\n  content: \"\\f3dc\"; }\n\n.ion-ios-barcode-outline:before {\n  content: \"\\f3db\"; }\n\n.ion-ios-baseball:before {\n  content: \"\\f3de\"; }\n\n.ion-ios-baseball-outline:before {\n  content: \"\\f3dd\"; }\n\n.ion-ios-basket:before {\n  content: \"\\f11f\"; }\n\n.ion-ios-basket-outline:before {\n  content: \"\\f11e\"; }\n\n.ion-ios-basketball:before {\n  content: \"\\f3e0\"; }\n\n.ion-ios-basketball-outline:before {\n  content: \"\\f3df\"; }\n\n.ion-ios-battery-charging:before {\n  content: \"\\f120\"; }\n\n.ion-ios-battery-charging-outline:before {\n  content: \"\\f120\"; }\n\n.ion-ios-battery-dead:before {\n  content: \"\\f121\"; }\n\n.ion-ios-battery-dead-outline:before {\n  content: \"\\f121\"; }\n\n.ion-ios-battery-full:before {\n  content: \"\\f122\"; }\n\n.ion-ios-battery-full-outline:before {\n  content: \"\\f122\"; }\n\n.ion-ios-beaker:before {\n  content: \"\\f124\"; }\n\n.ion-ios-beaker-outline:before {\n  content: \"\\f123\"; }\n\n.ion-ios-beer:before {\n  content: \"\\f126\"; }\n\n.ion-ios-beer-outline:before {\n  content: \"\\f125\"; }\n\n.ion-ios-bicycle:before {\n  content: \"\\f127\"; }\n\n.ion-ios-bicycle-outline:before {\n  content: \"\\f127\"; }\n\n.ion-ios-bluetooth:before {\n  content: \"\\f128\"; }\n\n.ion-ios-bluetooth-outline:before {\n  content: \"\\f128\"; }\n\n.ion-ios-boat:before {\n  content: \"\\f12a\"; }\n\n.ion-ios-boat-outline:before {\n  content: \"\\f129\"; }\n\n.ion-ios-body:before {\n  content: \"\\f3e4\"; }\n\n.ion-ios-body-outline:before {\n  content: \"\\f3e3\"; }\n\n.ion-ios-bonfire:before {\n  content: \"\\f12c\"; }\n\n.ion-ios-bonfire-outline:before {\n  content: \"\\f12b\"; }\n\n.ion-ios-book:before {\n  content: \"\\f3e8\"; }\n\n.ion-ios-book-outline:before {\n  content: \"\\f3e7\"; }\n\n.ion-ios-bookmark:before {\n  content: \"\\f12e\"; }\n\n.ion-ios-bookmark-outline:before {\n  content: \"\\f12d\"; }\n\n.ion-ios-bookmarks:before {\n  content: \"\\f3ea\"; }\n\n.ion-ios-bookmarks-outline:before {\n  content: \"\\f3e9\"; }\n\n.ion-ios-bowtie:before {\n  content: \"\\f130\"; }\n\n.ion-ios-bowtie-outline:before {\n  content: \"\\f12f\"; }\n\n.ion-ios-briefcase:before {\n  content: \"\\f3ee\"; }\n\n.ion-ios-briefcase-outline:before {\n  content: \"\\f3ed\"; }\n\n.ion-ios-browsers:before {\n  content: \"\\f3f0\"; }\n\n.ion-ios-browsers-outline:before {\n  content: \"\\f3ef\"; }\n\n.ion-ios-brush:before {\n  content: \"\\f132\"; }\n\n.ion-ios-brush-outline:before {\n  content: \"\\f131\"; }\n\n.ion-ios-bug:before {\n  content: \"\\f134\"; }\n\n.ion-ios-bug-outline:before {\n  content: \"\\f133\"; }\n\n.ion-ios-build:before {\n  content: \"\\f136\"; }\n\n.ion-ios-build-outline:before {\n  content: \"\\f135\"; }\n\n.ion-ios-bulb:before {\n  content: \"\\f138\"; }\n\n.ion-ios-bulb-outline:before {\n  content: \"\\f137\"; }\n\n.ion-ios-bus:before {\n  content: \"\\f13a\"; }\n\n.ion-ios-bus-outline:before {\n  content: \"\\f139\"; }\n\n.ion-ios-cafe:before {\n  content: \"\\f13c\"; }\n\n.ion-ios-cafe-outline:before {\n  content: \"\\f13b\"; }\n\n.ion-ios-calculator:before {\n  content: \"\\f3f2\"; }\n\n.ion-ios-calculator-outline:before {\n  content: \"\\f3f1\"; }\n\n.ion-ios-calendar:before {\n  content: \"\\f3f4\"; }\n\n.ion-ios-calendar-outline:before {\n  content: \"\\f3f3\"; }\n\n.ion-ios-call:before {\n  content: \"\\f13e\"; }\n\n.ion-ios-call-outline:before {\n  content: \"\\f13d\"; }\n\n.ion-ios-camera:before {\n  content: \"\\f3f6\"; }\n\n.ion-ios-camera-outline:before {\n  content: \"\\f3f5\"; }\n\n.ion-ios-car:before {\n  content: \"\\f140\"; }\n\n.ion-ios-car-outline:before {\n  content: \"\\f13f\"; }\n\n.ion-ios-card:before {\n  content: \"\\f142\"; }\n\n.ion-ios-card-outline:before {\n  content: \"\\f141\"; }\n\n.ion-ios-cart:before {\n  content: \"\\f3f8\"; }\n\n.ion-ios-cart-outline:before {\n  content: \"\\f3f7\"; }\n\n.ion-ios-cash:before {\n  content: \"\\f144\"; }\n\n.ion-ios-cash-outline:before {\n  content: \"\\f143\"; }\n\n.ion-ios-chatboxes:before {\n  content: \"\\f3fa\"; }\n\n.ion-ios-chatboxes-outline:before {\n  content: \"\\f3f9\"; }\n\n.ion-ios-chatbubbles:before {\n  content: \"\\f146\"; }\n\n.ion-ios-chatbubbles-outline:before {\n  content: \"\\f145\"; }\n\n.ion-ios-checkbox:before {\n  content: \"\\f148\"; }\n\n.ion-ios-checkbox-outline:before {\n  content: \"\\f147\"; }\n\n.ion-ios-checkmark:before {\n  content: \"\\f3ff\"; }\n\n.ion-ios-checkmark-circle:before {\n  content: \"\\f14a\"; }\n\n.ion-ios-checkmark-circle-outline:before {\n  content: \"\\f149\"; }\n\n.ion-ios-checkmark-outline:before {\n  content: \"\\f3ff\"; }\n\n.ion-ios-clipboard:before {\n  content: \"\\f14c\"; }\n\n.ion-ios-clipboard-outline:before {\n  content: \"\\f14b\"; }\n\n.ion-ios-clock:before {\n  content: \"\\f403\"; }\n\n.ion-ios-clock-outline:before {\n  content: \"\\f402\"; }\n\n.ion-ios-close:before {\n  content: \"\\f406\"; }\n\n.ion-ios-close-circle:before {\n  content: \"\\f14e\"; }\n\n.ion-ios-close-circle-outline:before {\n  content: \"\\f14d\"; }\n\n.ion-ios-close-outline:before {\n  content: \"\\f406\"; }\n\n.ion-ios-closed-captioning:before {\n  content: \"\\f150\"; }\n\n.ion-ios-closed-captioning-outline:before {\n  content: \"\\f14f\"; }\n\n.ion-ios-cloud:before {\n  content: \"\\f40c\"; }\n\n.ion-ios-cloud-circle:before {\n  content: \"\\f152\"; }\n\n.ion-ios-cloud-circle-outline:before {\n  content: \"\\f151\"; }\n\n.ion-ios-cloud-done:before {\n  content: \"\\f154\"; }\n\n.ion-ios-cloud-done-outline:before {\n  content: \"\\f153\"; }\n\n.ion-ios-cloud-download:before {\n  content: \"\\f408\"; }\n\n.ion-ios-cloud-download-outline:before {\n  content: \"\\f407\"; }\n\n.ion-ios-cloud-outline:before {\n  content: \"\\f409\"; }\n\n.ion-ios-cloud-upload:before {\n  content: \"\\f40b\"; }\n\n.ion-ios-cloud-upload-outline:before {\n  content: \"\\f40a\"; }\n\n.ion-ios-cloudy:before {\n  content: \"\\f410\"; }\n\n.ion-ios-cloudy-night:before {\n  content: \"\\f40e\"; }\n\n.ion-ios-cloudy-night-outline:before {\n  content: \"\\f40d\"; }\n\n.ion-ios-cloudy-outline:before {\n  content: \"\\f40f\"; }\n\n.ion-ios-code:before {\n  content: \"\\f157\"; }\n\n.ion-ios-code-download:before {\n  content: \"\\f155\"; }\n\n.ion-ios-code-download-outline:before {\n  content: \"\\f155\"; }\n\n.ion-ios-code-outline:before {\n  content: \"\\f157\"; }\n\n.ion-ios-code-working:before {\n  content: \"\\f156\"; }\n\n.ion-ios-code-working-outline:before {\n  content: \"\\f156\"; }\n\n.ion-ios-cog:before {\n  content: \"\\f412\"; }\n\n.ion-ios-cog-outline:before {\n  content: \"\\f411\"; }\n\n.ion-ios-color-fill:before {\n  content: \"\\f159\"; }\n\n.ion-ios-color-fill-outline:before {\n  content: \"\\f158\"; }\n\n.ion-ios-color-filter:before {\n  content: \"\\f414\"; }\n\n.ion-ios-color-filter-outline:before {\n  content: \"\\f413\"; }\n\n.ion-ios-color-palette:before {\n  content: \"\\f15b\"; }\n\n.ion-ios-color-palette-outline:before {\n  content: \"\\f15a\"; }\n\n.ion-ios-color-wand:before {\n  content: \"\\f416\"; }\n\n.ion-ios-color-wand-outline:before {\n  content: \"\\f415\"; }\n\n.ion-ios-compass:before {\n  content: \"\\f15d\"; }\n\n.ion-ios-compass-outline:before {\n  content: \"\\f15c\"; }\n\n.ion-ios-construct:before {\n  content: \"\\f15f\"; }\n\n.ion-ios-construct-outline:before {\n  content: \"\\f15e\"; }\n\n.ion-ios-contact:before {\n  content: \"\\f41a\"; }\n\n.ion-ios-contact-outline:before {\n  content: \"\\f419\"; }\n\n.ion-ios-contacts:before {\n  content: \"\\f161\"; }\n\n.ion-ios-contacts-outline:before {\n  content: \"\\f160\"; }\n\n.ion-ios-contract:before {\n  content: \"\\f162\"; }\n\n.ion-ios-contract-outline:before {\n  content: \"\\f162\"; }\n\n.ion-ios-contrast:before {\n  content: \"\\f163\"; }\n\n.ion-ios-contrast-outline:before {\n  content: \"\\f163\"; }\n\n.ion-ios-copy:before {\n  content: \"\\f41c\"; }\n\n.ion-ios-copy-outline:before {\n  content: \"\\f41b\"; }\n\n.ion-ios-create:before {\n  content: \"\\f165\"; }\n\n.ion-ios-create-outline:before {\n  content: \"\\f164\"; }\n\n.ion-ios-crop:before {\n  content: \"\\f41e\"; }\n\n.ion-ios-crop-outline:before {\n  content: \"\\f166\"; }\n\n.ion-ios-cube:before {\n  content: \"\\f168\"; }\n\n.ion-ios-cube-outline:before {\n  content: \"\\f167\"; }\n\n.ion-ios-cut:before {\n  content: \"\\f16a\"; }\n\n.ion-ios-cut-outline:before {\n  content: \"\\f169\"; }\n\n.ion-ios-desktop:before {\n  content: \"\\f16c\"; }\n\n.ion-ios-desktop-outline:before {\n  content: \"\\f16b\"; }\n\n.ion-ios-disc:before {\n  content: \"\\f16e\"; }\n\n.ion-ios-disc-outline:before {\n  content: \"\\f16d\"; }\n\n.ion-ios-document:before {\n  content: \"\\f170\"; }\n\n.ion-ios-document-outline:before {\n  content: \"\\f16f\"; }\n\n.ion-ios-done-all:before {\n  content: \"\\f171\"; }\n\n.ion-ios-done-all-outline:before {\n  content: \"\\f171\"; }\n\n.ion-ios-download:before {\n  content: \"\\f420\"; }\n\n.ion-ios-download-outline:before {\n  content: \"\\f41f\"; }\n\n.ion-ios-easel:before {\n  content: \"\\f173\"; }\n\n.ion-ios-easel-outline:before {\n  content: \"\\f172\"; }\n\n.ion-ios-egg:before {\n  content: \"\\f175\"; }\n\n.ion-ios-egg-outline:before {\n  content: \"\\f174\"; }\n\n.ion-ios-exit:before {\n  content: \"\\f177\"; }\n\n.ion-ios-exit-outline:before {\n  content: \"\\f176\"; }\n\n.ion-ios-expand:before {\n  content: \"\\f178\"; }\n\n.ion-ios-expand-outline:before {\n  content: \"\\f178\"; }\n\n.ion-ios-eye:before {\n  content: \"\\f425\"; }\n\n.ion-ios-eye-off:before {\n  content: \"\\f17a\"; }\n\n.ion-ios-eye-off-outline:before {\n  content: \"\\f179\"; }\n\n.ion-ios-eye-outline:before {\n  content: \"\\f424\"; }\n\n.ion-ios-fastforward:before {\n  content: \"\\f427\"; }\n\n.ion-ios-fastforward-outline:before {\n  content: \"\\f426\"; }\n\n.ion-ios-female:before {\n  content: \"\\f17b\"; }\n\n.ion-ios-female-outline:before {\n  content: \"\\f17b\"; }\n\n.ion-ios-filing:before {\n  content: \"\\f429\"; }\n\n.ion-ios-filing-outline:before {\n  content: \"\\f428\"; }\n\n.ion-ios-film:before {\n  content: \"\\f42b\"; }\n\n.ion-ios-film-outline:before {\n  content: \"\\f42a\"; }\n\n.ion-ios-finger-print:before {\n  content: \"\\f17c\"; }\n\n.ion-ios-finger-print-outline:before {\n  content: \"\\f17c\"; }\n\n.ion-ios-flag:before {\n  content: \"\\f42d\"; }\n\n.ion-ios-flag-outline:before {\n  content: \"\\f42c\"; }\n\n.ion-ios-flame:before {\n  content: \"\\f42f\"; }\n\n.ion-ios-flame-outline:before {\n  content: \"\\f42e\"; }\n\n.ion-ios-flash:before {\n  content: \"\\f17e\"; }\n\n.ion-ios-flash-outline:before {\n  content: \"\\f17d\"; }\n\n.ion-ios-flask:before {\n  content: \"\\f431\"; }\n\n.ion-ios-flask-outline:before {\n  content: \"\\f430\"; }\n\n.ion-ios-flower:before {\n  content: \"\\f433\"; }\n\n.ion-ios-flower-outline:before {\n  content: \"\\f432\"; }\n\n.ion-ios-folder:before {\n  content: \"\\f435\"; }\n\n.ion-ios-folder-open:before {\n  content: \"\\f180\"; }\n\n.ion-ios-folder-open-outline:before {\n  content: \"\\f17f\"; }\n\n.ion-ios-folder-outline:before {\n  content: \"\\f434\"; }\n\n.ion-ios-football:before {\n  content: \"\\f437\"; }\n\n.ion-ios-football-outline:before {\n  content: \"\\f436\"; }\n\n.ion-ios-funnel:before {\n  content: \"\\f182\"; }\n\n.ion-ios-funnel-outline:before {\n  content: \"\\f181\"; }\n\n.ion-ios-game-controller-a:before {\n  content: \"\\f439\"; }\n\n.ion-ios-game-controller-a-outline:before {\n  content: \"\\f438\"; }\n\n.ion-ios-game-controller-b:before {\n  content: \"\\f43b\"; }\n\n.ion-ios-game-controller-b-outline:before {\n  content: \"\\f43a\"; }\n\n.ion-ios-git-branch:before {\n  content: \"\\f183\"; }\n\n.ion-ios-git-branch-outline:before {\n  content: \"\\f183\"; }\n\n.ion-ios-git-commit:before {\n  content: \"\\f184\"; }\n\n.ion-ios-git-commit-outline:before {\n  content: \"\\f184\"; }\n\n.ion-ios-git-compare:before {\n  content: \"\\f185\"; }\n\n.ion-ios-git-compare-outline:before {\n  content: \"\\f185\"; }\n\n.ion-ios-git-merge:before {\n  content: \"\\f186\"; }\n\n.ion-ios-git-merge-outline:before {\n  content: \"\\f186\"; }\n\n.ion-ios-git-network:before {\n  content: \"\\f187\"; }\n\n.ion-ios-git-network-outline:before {\n  content: \"\\f187\"; }\n\n.ion-ios-git-pull-request:before {\n  content: \"\\f188\"; }\n\n.ion-ios-git-pull-request-outline:before {\n  content: \"\\f188\"; }\n\n.ion-ios-glasses:before {\n  content: \"\\f43f\"; }\n\n.ion-ios-glasses-outline:before {\n  content: \"\\f43e\"; }\n\n.ion-ios-globe:before {\n  content: \"\\f18a\"; }\n\n.ion-ios-globe-outline:before {\n  content: \"\\f189\"; }\n\n.ion-ios-grid:before {\n  content: \"\\f18c\"; }\n\n.ion-ios-grid-outline:before {\n  content: \"\\f18b\"; }\n\n.ion-ios-hammer:before {\n  content: \"\\f18e\"; }\n\n.ion-ios-hammer-outline:before {\n  content: \"\\f18d\"; }\n\n.ion-ios-hand:before {\n  content: \"\\f190\"; }\n\n.ion-ios-hand-outline:before {\n  content: \"\\f18f\"; }\n\n.ion-ios-happy:before {\n  content: \"\\f192\"; }\n\n.ion-ios-happy-outline:before {\n  content: \"\\f191\"; }\n\n.ion-ios-headset:before {\n  content: \"\\f194\"; }\n\n.ion-ios-headset-outline:before {\n  content: \"\\f193\"; }\n\n.ion-ios-heart:before {\n  content: \"\\f443\"; }\n\n.ion-ios-heart-outline:before {\n  content: \"\\f442\"; }\n\n.ion-ios-help:before {\n  content: \"\\f446\"; }\n\n.ion-ios-help-buoy:before {\n  content: \"\\f196\"; }\n\n.ion-ios-help-buoy-outline:before {\n  content: \"\\f195\"; }\n\n.ion-ios-help-circle:before {\n  content: \"\\f198\"; }\n\n.ion-ios-help-circle-outline:before {\n  content: \"\\f197\"; }\n\n.ion-ios-help-outline:before {\n  content: \"\\f446\"; }\n\n.ion-ios-home:before {\n  content: \"\\f448\"; }\n\n.ion-ios-home-outline:before {\n  content: \"\\f447\"; }\n\n.ion-ios-ice-cream:before {\n  content: \"\\f19a\"; }\n\n.ion-ios-ice-cream-outline:before {\n  content: \"\\f199\"; }\n\n.ion-ios-image:before {\n  content: \"\\f19c\"; }\n\n.ion-ios-image-outline:before {\n  content: \"\\f19b\"; }\n\n.ion-ios-images:before {\n  content: \"\\f19e\"; }\n\n.ion-ios-images-outline:before {\n  content: \"\\f19d\"; }\n\n.ion-ios-infinite:before {\n  content: \"\\f44a\"; }\n\n.ion-ios-infinite-outline:before {\n  content: \"\\f449\"; }\n\n.ion-ios-information:before {\n  content: \"\\f44d\"; }\n\n.ion-ios-information-circle:before {\n  content: \"\\f1a0\"; }\n\n.ion-ios-information-circle-outline:before {\n  content: \"\\f19f\"; }\n\n.ion-ios-information-outline:before {\n  content: \"\\f44d\"; }\n\n.ion-ios-ionic:before {\n  content: \"\\f1a1\"; }\n\n.ion-ios-ionic-outline:before {\n  content: \"\\f44e\"; }\n\n.ion-ios-ionitron:before {\n  content: \"\\f1a3\"; }\n\n.ion-ios-ionitron-outline:before {\n  content: \"\\f1a2\"; }\n\n.ion-ios-jet:before {\n  content: \"\\f1a5\"; }\n\n.ion-ios-jet-outline:before {\n  content: \"\\f1a4\"; }\n\n.ion-ios-key:before {\n  content: \"\\f1a7\"; }\n\n.ion-ios-key-outline:before {\n  content: \"\\f1a6\"; }\n\n.ion-ios-keypad:before {\n  content: \"\\f450\"; }\n\n.ion-ios-keypad-outline:before {\n  content: \"\\f44f\"; }\n\n.ion-ios-laptop:before {\n  content: \"\\f1a8\"; }\n\n.ion-ios-laptop-outline:before {\n  content: \"\\f1a8\"; }\n\n.ion-ios-leaf:before {\n  content: \"\\f1aa\"; }\n\n.ion-ios-leaf-outline:before {\n  content: \"\\f1a9\"; }\n\n.ion-ios-link:before {\n  content: \"\\f22a\"; }\n\n.ion-ios-link-outline:before {\n  content: \"\\f1ca\"; }\n\n.ion-ios-list:before {\n  content: \"\\f454\"; }\n\n.ion-ios-list-box:before {\n  content: \"\\f1ac\"; }\n\n.ion-ios-list-box-outline:before {\n  content: \"\\f1ab\"; }\n\n.ion-ios-list-outline:before {\n  content: \"\\f454\"; }\n\n.ion-ios-locate:before {\n  content: \"\\f1ae\"; }\n\n.ion-ios-locate-outline:before {\n  content: \"\\f1ad\"; }\n\n.ion-ios-lock:before {\n  content: \"\\f1b0\"; }\n\n.ion-ios-lock-outline:before {\n  content: \"\\f1af\"; }\n\n.ion-ios-log-in:before {\n  content: \"\\f1b1\"; }\n\n.ion-ios-log-in-outline:before {\n  content: \"\\f1b1\"; }\n\n.ion-ios-log-out:before {\n  content: \"\\f1b2\"; }\n\n.ion-ios-log-out-outline:before {\n  content: \"\\f1b2\"; }\n\n.ion-ios-magnet:before {\n  content: \"\\f1b4\"; }\n\n.ion-ios-magnet-outline:before {\n  content: \"\\f1b3\"; }\n\n.ion-ios-mail:before {\n  content: \"\\f1b8\"; }\n\n.ion-ios-mail-open:before {\n  content: \"\\f1b6\"; }\n\n.ion-ios-mail-open-outline:before {\n  content: \"\\f1b5\"; }\n\n.ion-ios-mail-outline:before {\n  content: \"\\f1b7\"; }\n\n.ion-ios-male:before {\n  content: \"\\f1b9\"; }\n\n.ion-ios-male-outline:before {\n  content: \"\\f1b9\"; }\n\n.ion-ios-man:before {\n  content: \"\\f1bb\"; }\n\n.ion-ios-man-outline:before {\n  content: \"\\f1ba\"; }\n\n.ion-ios-map:before {\n  content: \"\\f1bd\"; }\n\n.ion-ios-map-outline:before {\n  content: \"\\f1bc\"; }\n\n.ion-ios-medal:before {\n  content: \"\\f1bf\"; }\n\n.ion-ios-medal-outline:before {\n  content: \"\\f1be\"; }\n\n.ion-ios-medical:before {\n  content: \"\\f45c\"; }\n\n.ion-ios-medical-outline:before {\n  content: \"\\f45b\"; }\n\n.ion-ios-medkit:before {\n  content: \"\\f45e\"; }\n\n.ion-ios-medkit-outline:before {\n  content: \"\\f45d\"; }\n\n.ion-ios-megaphone:before {\n  content: \"\\f1c1\"; }\n\n.ion-ios-megaphone-outline:before {\n  content: \"\\f1c0\"; }\n\n.ion-ios-menu:before {\n  content: \"\\f1c3\"; }\n\n.ion-ios-menu-outline:before {\n  content: \"\\f1c2\"; }\n\n.ion-ios-mic:before {\n  content: \"\\f461\"; }\n\n.ion-ios-mic-off:before {\n  content: \"\\f45f\"; }\n\n.ion-ios-mic-off-outline:before {\n  content: \"\\f1c4\"; }\n\n.ion-ios-mic-outline:before {\n  content: \"\\f460\"; }\n\n.ion-ios-microphone:before {\n  content: \"\\f1c6\"; }\n\n.ion-ios-microphone-outline:before {\n  content: \"\\f1c5\"; }\n\n.ion-ios-moon:before {\n  content: \"\\f468\"; }\n\n.ion-ios-moon-outline:before {\n  content: \"\\f467\"; }\n\n.ion-ios-more:before {\n  content: \"\\f1c8\"; }\n\n.ion-ios-more-outline:before {\n  content: \"\\f1c7\"; }\n\n.ion-ios-move:before {\n  content: \"\\f1cb\"; }\n\n.ion-ios-move-outline:before {\n  content: \"\\f1cb\"; }\n\n.ion-ios-musical-note:before {\n  content: \"\\f46b\"; }\n\n.ion-ios-musical-note-outline:before {\n  content: \"\\f1cc\"; }\n\n.ion-ios-musical-notes:before {\n  content: \"\\f46c\"; }\n\n.ion-ios-musical-notes-outline:before {\n  content: \"\\f1cd\"; }\n\n.ion-ios-navigate:before {\n  content: \"\\f46e\"; }\n\n.ion-ios-navigate-outline:before {\n  content: \"\\f46d\"; }\n\n.ion-ios-no-smoking:before {\n  content: \"\\f1cf\"; }\n\n.ion-ios-no-smoking-outline:before {\n  content: \"\\f1ce\"; }\n\n.ion-ios-notifications:before {\n  content: \"\\f1d3\"; }\n\n.ion-ios-notifications-off:before {\n  content: \"\\f1d1\"; }\n\n.ion-ios-notifications-off-outline:before {\n  content: \"\\f1d0\"; }\n\n.ion-ios-notifications-outline:before {\n  content: \"\\f1d2\"; }\n\n.ion-ios-nuclear:before {\n  content: \"\\f1d5\"; }\n\n.ion-ios-nuclear-outline:before {\n  content: \"\\f1d4\"; }\n\n.ion-ios-nutrition:before {\n  content: \"\\f470\"; }\n\n.ion-ios-nutrition-outline:before {\n  content: \"\\f46f\"; }\n\n.ion-ios-open:before {\n  content: \"\\f1d7\"; }\n\n.ion-ios-open-outline:before {\n  content: \"\\f1d6\"; }\n\n.ion-ios-options:before {\n  content: \"\\f1d9\"; }\n\n.ion-ios-options-outline:before {\n  content: \"\\f1d8\"; }\n\n.ion-ios-outlet:before {\n  content: \"\\f1db\"; }\n\n.ion-ios-outlet-outline:before {\n  content: \"\\f1da\"; }\n\n.ion-ios-paper:before {\n  content: \"\\f472\"; }\n\n.ion-ios-paper-outline:before {\n  content: \"\\f471\"; }\n\n.ion-ios-paper-plane:before {\n  content: \"\\f1dd\"; }\n\n.ion-ios-paper-plane-outline:before {\n  content: \"\\f1dc\"; }\n\n.ion-ios-partly-sunny:before {\n  content: \"\\f1df\"; }\n\n.ion-ios-partly-sunny-outline:before {\n  content: \"\\f1de\"; }\n\n.ion-ios-pause:before {\n  content: \"\\f478\"; }\n\n.ion-ios-pause-outline:before {\n  content: \"\\f477\"; }\n\n.ion-ios-paw:before {\n  content: \"\\f47a\"; }\n\n.ion-ios-paw-outline:before {\n  content: \"\\f479\"; }\n\n.ion-ios-people:before {\n  content: \"\\f47c\"; }\n\n.ion-ios-people-outline:before {\n  content: \"\\f47b\"; }\n\n.ion-ios-person:before {\n  content: \"\\f47e\"; }\n\n.ion-ios-person-add:before {\n  content: \"\\f1e1\"; }\n\n.ion-ios-person-add-outline:before {\n  content: \"\\f1e0\"; }\n\n.ion-ios-person-outline:before {\n  content: \"\\f47d\"; }\n\n.ion-ios-phone-landscape:before {\n  content: \"\\f1e2\"; }\n\n.ion-ios-phone-landscape-outline:before {\n  content: \"\\f1e2\"; }\n\n.ion-ios-phone-portrait:before {\n  content: \"\\f1e3\"; }\n\n.ion-ios-phone-portrait-outline:before {\n  content: \"\\f1e3\"; }\n\n.ion-ios-photos:before {\n  content: \"\\f482\"; }\n\n.ion-ios-photos-outline:before {\n  content: \"\\f481\"; }\n\n.ion-ios-pie:before {\n  content: \"\\f484\"; }\n\n.ion-ios-pie-outline:before {\n  content: \"\\f483\"; }\n\n.ion-ios-pin:before {\n  content: \"\\f1e5\"; }\n\n.ion-ios-pin-outline:before {\n  content: \"\\f1e4\"; }\n\n.ion-ios-pint:before {\n  content: \"\\f486\"; }\n\n.ion-ios-pint-outline:before {\n  content: \"\\f485\"; }\n\n.ion-ios-pizza:before {\n  content: \"\\f1e7\"; }\n\n.ion-ios-pizza-outline:before {\n  content: \"\\f1e6\"; }\n\n.ion-ios-plane:before {\n  content: \"\\f1e9\"; }\n\n.ion-ios-plane-outline:before {\n  content: \"\\f1e8\"; }\n\n.ion-ios-planet:before {\n  content: \"\\f1eb\"; }\n\n.ion-ios-planet-outline:before {\n  content: \"\\f1ea\"; }\n\n.ion-ios-play:before {\n  content: \"\\f488\"; }\n\n.ion-ios-play-outline:before {\n  content: \"\\f487\"; }\n\n.ion-ios-podium:before {\n  content: \"\\f1ed\"; }\n\n.ion-ios-podium-outline:before {\n  content: \"\\f1ec\"; }\n\n.ion-ios-power:before {\n  content: \"\\f1ef\"; }\n\n.ion-ios-power-outline:before {\n  content: \"\\f1ee\"; }\n\n.ion-ios-pricetag:before {\n  content: \"\\f48d\"; }\n\n.ion-ios-pricetag-outline:before {\n  content: \"\\f48c\"; }\n\n.ion-ios-pricetags:before {\n  content: \"\\f48f\"; }\n\n.ion-ios-pricetags-outline:before {\n  content: \"\\f48e\"; }\n\n.ion-ios-print:before {\n  content: \"\\f1f1\"; }\n\n.ion-ios-print-outline:before {\n  content: \"\\f1f0\"; }\n\n.ion-ios-pulse:before {\n  content: \"\\f493\"; }\n\n.ion-ios-pulse-outline:before {\n  content: \"\\f1f2\"; }\n\n.ion-ios-qr-scanner:before {\n  content: \"\\f1f3\"; }\n\n.ion-ios-qr-scanner-outline:before {\n  content: \"\\f1f3\"; }\n\n.ion-ios-quote:before {\n  content: \"\\f1f5\"; }\n\n.ion-ios-quote-outline:before {\n  content: \"\\f1f4\"; }\n\n.ion-ios-radio:before {\n  content: \"\\f1f9\"; }\n\n.ion-ios-radio-button-off:before {\n  content: \"\\f1f6\"; }\n\n.ion-ios-radio-button-off-outline:before {\n  content: \"\\f1f6\"; }\n\n.ion-ios-radio-button-on:before {\n  content: \"\\f1f7\"; }\n\n.ion-ios-radio-button-on-outline:before {\n  content: \"\\f1f7\"; }\n\n.ion-ios-radio-outline:before {\n  content: \"\\f1f8\"; }\n\n.ion-ios-rainy:before {\n  content: \"\\f495\"; }\n\n.ion-ios-rainy-outline:before {\n  content: \"\\f494\"; }\n\n.ion-ios-recording:before {\n  content: \"\\f497\"; }\n\n.ion-ios-recording-outline:before {\n  content: \"\\f496\"; }\n\n.ion-ios-redo:before {\n  content: \"\\f499\"; }\n\n.ion-ios-redo-outline:before {\n  content: \"\\f498\"; }\n\n.ion-ios-refresh:before {\n  content: \"\\f49c\"; }\n\n.ion-ios-refresh-circle:before {\n  content: \"\\f226\"; }\n\n.ion-ios-refresh-circle-outline:before {\n  content: \"\\f224\"; }\n\n.ion-ios-refresh-outline:before {\n  content: \"\\f49c\"; }\n\n.ion-ios-remove:before {\n  content: \"\\f1fc\"; }\n\n.ion-ios-remove-circle:before {\n  content: \"\\f1fb\"; }\n\n.ion-ios-remove-circle-outline:before {\n  content: \"\\f1fa\"; }\n\n.ion-ios-remove-outline:before {\n  content: \"\\f1fc\"; }\n\n.ion-ios-reorder:before {\n  content: \"\\f1fd\"; }\n\n.ion-ios-reorder-outline:before {\n  content: \"\\f1fd\"; }\n\n.ion-ios-repeat:before {\n  content: \"\\f1fe\"; }\n\n.ion-ios-repeat-outline:before {\n  content: \"\\f1fe\"; }\n\n.ion-ios-resize:before {\n  content: \"\\f1ff\"; }\n\n.ion-ios-resize-outline:before {\n  content: \"\\f1ff\"; }\n\n.ion-ios-restaurant:before {\n  content: \"\\f201\"; }\n\n.ion-ios-restaurant-outline:before {\n  content: \"\\f200\"; }\n\n.ion-ios-return-left:before {\n  content: \"\\f202\"; }\n\n.ion-ios-return-left-outline:before {\n  content: \"\\f202\"; }\n\n.ion-ios-return-right:before {\n  content: \"\\f203\"; }\n\n.ion-ios-return-right-outline:before {\n  content: \"\\f203\"; }\n\n.ion-ios-reverse-camera:before {\n  content: \"\\f49f\"; }\n\n.ion-ios-reverse-camera-outline:before {\n  content: \"\\f49e\"; }\n\n.ion-ios-rewind:before {\n  content: \"\\f4a1\"; }\n\n.ion-ios-rewind-outline:before {\n  content: \"\\f4a0\"; }\n\n.ion-ios-ribbon:before {\n  content: \"\\f205\"; }\n\n.ion-ios-ribbon-outline:before {\n  content: \"\\f204\"; }\n\n.ion-ios-rose:before {\n  content: \"\\f4a3\"; }\n\n.ion-ios-rose-outline:before {\n  content: \"\\f4a2\"; }\n\n.ion-ios-sad:before {\n  content: \"\\f207\"; }\n\n.ion-ios-sad-outline:before {\n  content: \"\\f206\"; }\n\n.ion-ios-school:before {\n  content: \"\\f209\"; }\n\n.ion-ios-school-outline:before {\n  content: \"\\f208\"; }\n\n.ion-ios-search:before {\n  content: \"\\f4a5\"; }\n\n.ion-ios-search-outline:before {\n  content: \"\\f20a\"; }\n\n.ion-ios-send:before {\n  content: \"\\f20c\"; }\n\n.ion-ios-send-outline:before {\n  content: \"\\f20b\"; }\n\n.ion-ios-settings:before {\n  content: \"\\f4a7\"; }\n\n.ion-ios-settings-outline:before {\n  content: \"\\f20d\"; }\n\n.ion-ios-share:before {\n  content: \"\\f211\"; }\n\n.ion-ios-share-alt:before {\n  content: \"\\f20f\"; }\n\n.ion-ios-share-alt-outline:before {\n  content: \"\\f20e\"; }\n\n.ion-ios-share-outline:before {\n  content: \"\\f210\"; }\n\n.ion-ios-shirt:before {\n  content: \"\\f213\"; }\n\n.ion-ios-shirt-outline:before {\n  content: \"\\f212\"; }\n\n.ion-ios-shuffle:before {\n  content: \"\\f4a9\"; }\n\n.ion-ios-shuffle-outline:before {\n  content: \"\\f4a9\"; }\n\n.ion-ios-skip-backward:before {\n  content: \"\\f215\"; }\n\n.ion-ios-skip-backward-outline:before {\n  content: \"\\f214\"; }\n\n.ion-ios-skip-forward:before {\n  content: \"\\f217\"; }\n\n.ion-ios-skip-forward-outline:before {\n  content: \"\\f216\"; }\n\n.ion-ios-snow:before {\n  content: \"\\f218\"; }\n\n.ion-ios-snow-outline:before {\n  content: \"\\f22c\"; }\n\n.ion-ios-speedometer:before {\n  content: \"\\f4b0\"; }\n\n.ion-ios-speedometer-outline:before {\n  content: \"\\f4af\"; }\n\n.ion-ios-square:before {\n  content: \"\\f21a\"; }\n\n.ion-ios-square-outline:before {\n  content: \"\\f219\"; }\n\n.ion-ios-star:before {\n  content: \"\\f4b3\"; }\n\n.ion-ios-star-half:before {\n  content: \"\\f4b1\"; }\n\n.ion-ios-star-half-outline:before {\n  content: \"\\f4b1\"; }\n\n.ion-ios-star-outline:before {\n  content: \"\\f4b2\"; }\n\n.ion-ios-stats:before {\n  content: \"\\f21c\"; }\n\n.ion-ios-stats-outline:before {\n  content: \"\\f21b\"; }\n\n.ion-ios-stopwatch:before {\n  content: \"\\f4b5\"; }\n\n.ion-ios-stopwatch-outline:before {\n  content: \"\\f4b4\"; }\n\n.ion-ios-subway:before {\n  content: \"\\f21e\"; }\n\n.ion-ios-subway-outline:before {\n  content: \"\\f21d\"; }\n\n.ion-ios-sunny:before {\n  content: \"\\f4b7\"; }\n\n.ion-ios-sunny-outline:before {\n  content: \"\\f4b6\"; }\n\n.ion-ios-swap:before {\n  content: \"\\f21f\"; }\n\n.ion-ios-swap-outline:before {\n  content: \"\\f21f\"; }\n\n.ion-ios-switch:before {\n  content: \"\\f221\"; }\n\n.ion-ios-switch-outline:before {\n  content: \"\\f220\"; }\n\n.ion-ios-sync:before {\n  content: \"\\f222\"; }\n\n.ion-ios-sync-outline:before {\n  content: \"\\f222\"; }\n\n.ion-ios-tablet-landscape:before {\n  content: \"\\f223\"; }\n\n.ion-ios-tablet-landscape-outline:before {\n  content: \"\\f223\"; }\n\n.ion-ios-tablet-portrait:before {\n  content: \"\\f24e\"; }\n\n.ion-ios-tablet-portrait-outline:before {\n  content: \"\\f24e\"; }\n\n.ion-ios-tennisball:before {\n  content: \"\\f4bb\"; }\n\n.ion-ios-tennisball-outline:before {\n  content: \"\\f4ba\"; }\n\n.ion-ios-text:before {\n  content: \"\\f250\"; }\n\n.ion-ios-text-outline:before {\n  content: \"\\f24f\"; }\n\n.ion-ios-thermometer:before {\n  content: \"\\f252\"; }\n\n.ion-ios-thermometer-outline:before {\n  content: \"\\f251\"; }\n\n.ion-ios-thumbs-down:before {\n  content: \"\\f254\"; }\n\n.ion-ios-thumbs-down-outline:before {\n  content: \"\\f253\"; }\n\n.ion-ios-thumbs-up:before {\n  content: \"\\f256\"; }\n\n.ion-ios-thumbs-up-outline:before {\n  content: \"\\f255\"; }\n\n.ion-ios-thunderstorm:before {\n  content: \"\\f4bd\"; }\n\n.ion-ios-thunderstorm-outline:before {\n  content: \"\\f4bc\"; }\n\n.ion-ios-time:before {\n  content: \"\\f4bf\"; }\n\n.ion-ios-time-outline:before {\n  content: \"\\f4be\"; }\n\n.ion-ios-timer:before {\n  content: \"\\f4c1\"; }\n\n.ion-ios-timer-outline:before {\n  content: \"\\f4c0\"; }\n\n.ion-ios-train:before {\n  content: \"\\f258\"; }\n\n.ion-ios-train-outline:before {\n  content: \"\\f257\"; }\n\n.ion-ios-transgender:before {\n  content: \"\\f259\"; }\n\n.ion-ios-transgender-outline:before {\n  content: \"\\f259\"; }\n\n.ion-ios-trash:before {\n  content: \"\\f4c5\"; }\n\n.ion-ios-trash-outline:before {\n  content: \"\\f4c4\"; }\n\n.ion-ios-trending-down:before {\n  content: \"\\f25a\"; }\n\n.ion-ios-trending-down-outline:before {\n  content: \"\\f25a\"; }\n\n.ion-ios-trending-up:before {\n  content: \"\\f25b\"; }\n\n.ion-ios-trending-up-outline:before {\n  content: \"\\f25b\"; }\n\n.ion-ios-trophy:before {\n  content: \"\\f25d\"; }\n\n.ion-ios-trophy-outline:before {\n  content: \"\\f25c\"; }\n\n.ion-ios-umbrella:before {\n  content: \"\\f25f\"; }\n\n.ion-ios-umbrella-outline:before {\n  content: \"\\f25e\"; }\n\n.ion-ios-undo:before {\n  content: \"\\f4c7\"; }\n\n.ion-ios-undo-outline:before {\n  content: \"\\f4c6\"; }\n\n.ion-ios-unlock:before {\n  content: \"\\f261\"; }\n\n.ion-ios-unlock-outline:before {\n  content: \"\\f260\"; }\n\n.ion-ios-videocam:before {\n  content: \"\\f4cd\"; }\n\n.ion-ios-videocam-outline:before {\n  content: \"\\f4cc\"; }\n\n.ion-ios-volume-down:before {\n  content: \"\\f262\"; }\n\n.ion-ios-volume-down-outline:before {\n  content: \"\\f262\"; }\n\n.ion-ios-volume-mute:before {\n  content: \"\\f263\"; }\n\n.ion-ios-volume-mute-outline:before {\n  content: \"\\f263\"; }\n\n.ion-ios-volume-off:before {\n  content: \"\\f264\"; }\n\n.ion-ios-volume-off-outline:before {\n  content: \"\\f264\"; }\n\n.ion-ios-volume-up:before {\n  content: \"\\f265\"; }\n\n.ion-ios-volume-up-outline:before {\n  content: \"\\f265\"; }\n\n.ion-ios-walk:before {\n  content: \"\\f266\"; }\n\n.ion-ios-walk-outline:before {\n  content: \"\\f266\"; }\n\n.ion-ios-warning:before {\n  content: \"\\f268\"; }\n\n.ion-ios-warning-outline:before {\n  content: \"\\f267\"; }\n\n.ion-ios-watch:before {\n  content: \"\\f269\"; }\n\n.ion-ios-watch-outline:before {\n  content: \"\\f269\"; }\n\n.ion-ios-water:before {\n  content: \"\\f26b\"; }\n\n.ion-ios-water-outline:before {\n  content: \"\\f26a\"; }\n\n.ion-ios-wifi:before {\n  content: \"\\f26d\"; }\n\n.ion-ios-wifi-outline:before {\n  content: \"\\f26c\"; }\n\n.ion-ios-wine:before {\n  content: \"\\f26f\"; }\n\n.ion-ios-wine-outline:before {\n  content: \"\\f26e\"; }\n\n.ion-ios-woman:before {\n  content: \"\\f271\"; }\n\n.ion-ios-woman-outline:before {\n  content: \"\\f270\"; }\n\n.ion-logo-android:before {\n  content: \"\\f225\"; }\n\n.ion-logo-angular:before {\n  content: \"\\f227\"; }\n\n.ion-logo-apple:before {\n  content: \"\\f229\"; }\n\n.ion-logo-bitcoin:before {\n  content: \"\\f22b\"; }\n\n.ion-logo-buffer:before {\n  content: \"\\f22d\"; }\n\n.ion-logo-chrome:before {\n  content: \"\\f22f\"; }\n\n.ion-logo-codepen:before {\n  content: \"\\f230\"; }\n\n.ion-logo-css3:before {\n  content: \"\\f231\"; }\n\n.ion-logo-designernews:before {\n  content: \"\\f232\"; }\n\n.ion-logo-dribbble:before {\n  content: \"\\f233\"; }\n\n.ion-logo-dropbox:before {\n  content: \"\\f234\"; }\n\n.ion-logo-euro:before {\n  content: \"\\f235\"; }\n\n.ion-logo-facebook:before {\n  content: \"\\f236\"; }\n\n.ion-logo-foursquare:before {\n  content: \"\\f237\"; }\n\n.ion-logo-freebsd-devil:before {\n  content: \"\\f238\"; }\n\n.ion-logo-github:before {\n  content: \"\\f239\"; }\n\n.ion-logo-google:before {\n  content: \"\\f23a\"; }\n\n.ion-logo-googleplus:before {\n  content: \"\\f23b\"; }\n\n.ion-logo-hackernews:before {\n  content: \"\\f23c\"; }\n\n.ion-logo-html5:before {\n  content: \"\\f23d\"; }\n\n.ion-logo-instagram:before {\n  content: \"\\f23e\"; }\n\n.ion-logo-javascript:before {\n  content: \"\\f23f\"; }\n\n.ion-logo-linkedin:before {\n  content: \"\\f240\"; }\n\n.ion-logo-markdown:before {\n  content: \"\\f241\"; }\n\n.ion-logo-nodejs:before {\n  content: \"\\f242\"; }\n\n.ion-logo-octocat:before {\n  content: \"\\f243\"; }\n\n.ion-logo-pinterest:before {\n  content: \"\\f244\"; }\n\n.ion-logo-playstation:before {\n  content: \"\\f245\"; }\n\n.ion-logo-python:before {\n  content: \"\\f246\"; }\n\n.ion-logo-reddit:before {\n  content: \"\\f247\"; }\n\n.ion-logo-rss:before {\n  content: \"\\f248\"; }\n\n.ion-logo-sass:before {\n  content: \"\\f249\"; }\n\n.ion-logo-skype:before {\n  content: \"\\f24a\"; }\n\n.ion-logo-snapchat:before {\n  content: \"\\f24b\"; }\n\n.ion-logo-steam:before {\n  content: \"\\f24c\"; }\n\n.ion-logo-tumblr:before {\n  content: \"\\f24d\"; }\n\n.ion-logo-tux:before {\n  content: \"\\f2ae\"; }\n\n.ion-logo-twitch:before {\n  content: \"\\f2af\"; }\n\n.ion-logo-twitter:before {\n  content: \"\\f2b0\"; }\n\n.ion-logo-usd:before {\n  content: \"\\f2b1\"; }\n\n.ion-logo-vimeo:before {\n  content: \"\\f2c4\"; }\n\n.ion-logo-whatsapp:before {\n  content: \"\\f2c5\"; }\n\n.ion-logo-windows:before {\n  content: \"\\f32f\"; }\n\n.ion-logo-wordpress:before {\n  content: \"\\f330\"; }\n\n.ion-logo-xbox:before {\n  content: \"\\f34c\"; }\n\n.ion-logo-yahoo:before {\n  content: \"\\f34d\"; }\n\n.ion-logo-yen:before {\n  content: \"\\f34e\"; }\n\n.ion-logo-youtube:before {\n  content: \"\\f34f\"; }\n\n.ion-md-add:before {\n  content: \"\\f273\"; }\n\n.ion-md-add-circle:before {\n  content: \"\\f272\"; }\n\n.ion-md-alarm:before {\n  content: \"\\f274\"; }\n\n.ion-md-albums:before {\n  content: \"\\f275\"; }\n\n.ion-md-alert:before {\n  content: \"\\f276\"; }\n\n.ion-md-american-football:before {\n  content: \"\\f277\"; }\n\n.ion-md-analytics:before {\n  content: \"\\f278\"; }\n\n.ion-md-aperture:before {\n  content: \"\\f279\"; }\n\n.ion-md-apps:before {\n  content: \"\\f27a\"; }\n\n.ion-md-appstore:before {\n  content: \"\\f27b\"; }\n\n.ion-md-archive:before {\n  content: \"\\f27c\"; }\n\n.ion-md-arrow-back:before {\n  content: \"\\f27d\"; }\n\n.ion-md-arrow-down:before {\n  content: \"\\f27e\"; }\n\n.ion-md-arrow-dropdown:before {\n  content: \"\\f280\"; }\n\n.ion-md-arrow-dropdown-circle:before {\n  content: \"\\f27f\"; }\n\n.ion-md-arrow-dropleft:before {\n  content: \"\\f282\"; }\n\n.ion-md-arrow-dropleft-circle:before {\n  content: \"\\f281\"; }\n\n.ion-md-arrow-dropright:before {\n  content: \"\\f284\"; }\n\n.ion-md-arrow-dropright-circle:before {\n  content: \"\\f283\"; }\n\n.ion-md-arrow-dropup:before {\n  content: \"\\f286\"; }\n\n.ion-md-arrow-dropup-circle:before {\n  content: \"\\f285\"; }\n\n.ion-md-arrow-forward:before {\n  content: \"\\f287\"; }\n\n.ion-md-arrow-round-back:before {\n  content: \"\\f288\"; }\n\n.ion-md-arrow-round-down:before {\n  content: \"\\f289\"; }\n\n.ion-md-arrow-round-forward:before {\n  content: \"\\f28a\"; }\n\n.ion-md-arrow-round-up:before {\n  content: \"\\f28b\"; }\n\n.ion-md-arrow-up:before {\n  content: \"\\f28c\"; }\n\n.ion-md-at:before {\n  content: \"\\f28d\"; }\n\n.ion-md-attach:before {\n  content: \"\\f28e\"; }\n\n.ion-md-backspace:before {\n  content: \"\\f28f\"; }\n\n.ion-md-barcode:before {\n  content: \"\\f290\"; }\n\n.ion-md-baseball:before {\n  content: \"\\f291\"; }\n\n.ion-md-basket:before {\n  content: \"\\f292\"; }\n\n.ion-md-basketball:before {\n  content: \"\\f293\"; }\n\n.ion-md-battery-charging:before {\n  content: \"\\f294\"; }\n\n.ion-md-battery-dead:before {\n  content: \"\\f295\"; }\n\n.ion-md-battery-full:before {\n  content: \"\\f296\"; }\n\n.ion-md-beaker:before {\n  content: \"\\f297\"; }\n\n.ion-md-beer:before {\n  content: \"\\f298\"; }\n\n.ion-md-bicycle:before {\n  content: \"\\f299\"; }\n\n.ion-md-bluetooth:before {\n  content: \"\\f29a\"; }\n\n.ion-md-boat:before {\n  content: \"\\f29b\"; }\n\n.ion-md-body:before {\n  content: \"\\f29c\"; }\n\n.ion-md-bonfire:before {\n  content: \"\\f29d\"; }\n\n.ion-md-book:before {\n  content: \"\\f29e\"; }\n\n.ion-md-bookmark:before {\n  content: \"\\f29f\"; }\n\n.ion-md-bookmarks:before {\n  content: \"\\f2a0\"; }\n\n.ion-md-bowtie:before {\n  content: \"\\f2a1\"; }\n\n.ion-md-briefcase:before {\n  content: \"\\f2a2\"; }\n\n.ion-md-browsers:before {\n  content: \"\\f2a3\"; }\n\n.ion-md-brush:before {\n  content: \"\\f2a4\"; }\n\n.ion-md-bug:before {\n  content: \"\\f2a5\"; }\n\n.ion-md-build:before {\n  content: \"\\f2a6\"; }\n\n.ion-md-bulb:before {\n  content: \"\\f2a7\"; }\n\n.ion-md-bus:before {\n  content: \"\\f2a8\"; }\n\n.ion-md-cafe:before {\n  content: \"\\f2a9\"; }\n\n.ion-md-calculator:before {\n  content: \"\\f2aa\"; }\n\n.ion-md-calendar:before {\n  content: \"\\f2ab\"; }\n\n.ion-md-call:before {\n  content: \"\\f2ac\"; }\n\n.ion-md-camera:before {\n  content: \"\\f2ad\"; }\n\n.ion-md-car:before {\n  content: \"\\f2b2\"; }\n\n.ion-md-card:before {\n  content: \"\\f2b3\"; }\n\n.ion-md-cart:before {\n  content: \"\\f2b4\"; }\n\n.ion-md-cash:before {\n  content: \"\\f2b5\"; }\n\n.ion-md-chatboxes:before {\n  content: \"\\f2b6\"; }\n\n.ion-md-chatbubbles:before {\n  content: \"\\f2b7\"; }\n\n.ion-md-checkbox:before {\n  content: \"\\f2b9\"; }\n\n.ion-md-checkbox-outline:before {\n  content: \"\\f2b8\"; }\n\n.ion-md-checkmark:before {\n  content: \"\\f2bc\"; }\n\n.ion-md-checkmark-circle:before {\n  content: \"\\f2bb\"; }\n\n.ion-md-checkmark-circle-outline:before {\n  content: \"\\f2ba\"; }\n\n.ion-md-clipboard:before {\n  content: \"\\f2bd\"; }\n\n.ion-md-clock:before {\n  content: \"\\f2be\"; }\n\n.ion-md-close:before {\n  content: \"\\f2c0\"; }\n\n.ion-md-close-circle:before {\n  content: \"\\f2bf\"; }\n\n.ion-md-closed-captioning:before {\n  content: \"\\f2c1\"; }\n\n.ion-md-cloud:before {\n  content: \"\\f2c9\"; }\n\n.ion-md-cloud-circle:before {\n  content: \"\\f2c2\"; }\n\n.ion-md-cloud-done:before {\n  content: \"\\f2c3\"; }\n\n.ion-md-cloud-download:before {\n  content: \"\\f2c6\"; }\n\n.ion-md-cloud-outline:before {\n  content: \"\\f2c7\"; }\n\n.ion-md-cloud-upload:before {\n  content: \"\\f2c8\"; }\n\n.ion-md-cloudy:before {\n  content: \"\\f2cb\"; }\n\n.ion-md-cloudy-night:before {\n  content: \"\\f2ca\"; }\n\n.ion-md-code:before {\n  content: \"\\f2ce\"; }\n\n.ion-md-code-download:before {\n  content: \"\\f2cc\"; }\n\n.ion-md-code-working:before {\n  content: \"\\f2cd\"; }\n\n.ion-md-cog:before {\n  content: \"\\f2cf\"; }\n\n.ion-md-color-fill:before {\n  content: \"\\f2d0\"; }\n\n.ion-md-color-filter:before {\n  content: \"\\f2d1\"; }\n\n.ion-md-color-palette:before {\n  content: \"\\f2d2\"; }\n\n.ion-md-color-wand:before {\n  content: \"\\f2d3\"; }\n\n.ion-md-compass:before {\n  content: \"\\f2d4\"; }\n\n.ion-md-construct:before {\n  content: \"\\f2d5\"; }\n\n.ion-md-contact:before {\n  content: \"\\f2d6\"; }\n\n.ion-md-contacts:before {\n  content: \"\\f2d7\"; }\n\n.ion-md-contract:before {\n  content: \"\\f2d8\"; }\n\n.ion-md-contrast:before {\n  content: \"\\f2d9\"; }\n\n.ion-md-copy:before {\n  content: \"\\f2da\"; }\n\n.ion-md-create:before {\n  content: \"\\f2db\"; }\n\n.ion-md-crop:before {\n  content: \"\\f2dc\"; }\n\n.ion-md-cube:before {\n  content: \"\\f2dd\"; }\n\n.ion-md-cut:before {\n  content: \"\\f2de\"; }\n\n.ion-md-desktop:before {\n  content: \"\\f2df\"; }\n\n.ion-md-disc:before {\n  content: \"\\f2e0\"; }\n\n.ion-md-document:before {\n  content: \"\\f2e1\"; }\n\n.ion-md-done-all:before {\n  content: \"\\f2e2\"; }\n\n.ion-md-download:before {\n  content: \"\\f2e3\"; }\n\n.ion-md-easel:before {\n  content: \"\\f2e4\"; }\n\n.ion-md-egg:before {\n  content: \"\\f2e5\"; }\n\n.ion-md-exit:before {\n  content: \"\\f2e6\"; }\n\n.ion-md-expand:before {\n  content: \"\\f2e7\"; }\n\n.ion-md-eye:before {\n  content: \"\\f2e9\"; }\n\n.ion-md-eye-off:before {\n  content: \"\\f2e8\"; }\n\n.ion-md-fastforward:before {\n  content: \"\\f2ea\"; }\n\n.ion-md-female:before {\n  content: \"\\f2eb\"; }\n\n.ion-md-filing:before {\n  content: \"\\f2ec\"; }\n\n.ion-md-film:before {\n  content: \"\\f2ed\"; }\n\n.ion-md-finger-print:before {\n  content: \"\\f2ee\"; }\n\n.ion-md-flag:before {\n  content: \"\\f2ef\"; }\n\n.ion-md-flame:before {\n  content: \"\\f2f0\"; }\n\n.ion-md-flash:before {\n  content: \"\\f2f1\"; }\n\n.ion-md-flask:before {\n  content: \"\\f2f2\"; }\n\n.ion-md-flower:before {\n  content: \"\\f2f3\"; }\n\n.ion-md-folder:before {\n  content: \"\\f2f5\"; }\n\n.ion-md-folder-open:before {\n  content: \"\\f2f4\"; }\n\n.ion-md-football:before {\n  content: \"\\f2f6\"; }\n\n.ion-md-funnel:before {\n  content: \"\\f2f7\"; }\n\n.ion-md-game-controller-a:before {\n  content: \"\\f2f8\"; }\n\n.ion-md-game-controller-b:before {\n  content: \"\\f2f9\"; }\n\n.ion-md-git-branch:before {\n  content: \"\\f2fa\"; }\n\n.ion-md-git-commit:before {\n  content: \"\\f2fb\"; }\n\n.ion-md-git-compare:before {\n  content: \"\\f2fc\"; }\n\n.ion-md-git-merge:before {\n  content: \"\\f2fd\"; }\n\n.ion-md-git-network:before {\n  content: \"\\f2fe\"; }\n\n.ion-md-git-pull-request:before {\n  content: \"\\f2ff\"; }\n\n.ion-md-glasses:before {\n  content: \"\\f300\"; }\n\n.ion-md-globe:before {\n  content: \"\\f301\"; }\n\n.ion-md-grid:before {\n  content: \"\\f302\"; }\n\n.ion-md-hammer:before {\n  content: \"\\f303\"; }\n\n.ion-md-hand:before {\n  content: \"\\f304\"; }\n\n.ion-md-happy:before {\n  content: \"\\f305\"; }\n\n.ion-md-headset:before {\n  content: \"\\f306\"; }\n\n.ion-md-heart:before {\n  content: \"\\f308\"; }\n\n.ion-md-heart-outline:before {\n  content: \"\\f307\"; }\n\n.ion-md-help:before {\n  content: \"\\f30b\"; }\n\n.ion-md-help-buoy:before {\n  content: \"\\f309\"; }\n\n.ion-md-help-circle:before {\n  content: \"\\f30a\"; }\n\n.ion-md-home:before {\n  content: \"\\f30c\"; }\n\n.ion-md-ice-cream:before {\n  content: \"\\f30d\"; }\n\n.ion-md-image:before {\n  content: \"\\f30e\"; }\n\n.ion-md-images:before {\n  content: \"\\f30f\"; }\n\n.ion-md-infinite:before {\n  content: \"\\f310\"; }\n\n.ion-md-information:before {\n  content: \"\\f312\"; }\n\n.ion-md-information-circle:before {\n  content: \"\\f311\"; }\n\n.ion-md-ionic:before {\n  content: \"\\f313\"; }\n\n.ion-md-ionitron:before {\n  content: \"\\f314\"; }\n\n.ion-md-jet:before {\n  content: \"\\f315\"; }\n\n.ion-md-key:before {\n  content: \"\\f316\"; }\n\n.ion-md-keypad:before {\n  content: \"\\f317\"; }\n\n.ion-md-laptop:before {\n  content: \"\\f318\"; }\n\n.ion-md-leaf:before {\n  content: \"\\f319\"; }\n\n.ion-md-link:before {\n  content: \"\\f22e\"; }\n\n.ion-md-list:before {\n  content: \"\\f31b\"; }\n\n.ion-md-list-box:before {\n  content: \"\\f31a\"; }\n\n.ion-md-locate:before {\n  content: \"\\f31c\"; }\n\n.ion-md-lock:before {\n  content: \"\\f31d\"; }\n\n.ion-md-log-in:before {\n  content: \"\\f31e\"; }\n\n.ion-md-log-out:before {\n  content: \"\\f31f\"; }\n\n.ion-md-magnet:before {\n  content: \"\\f320\"; }\n\n.ion-md-mail:before {\n  content: \"\\f322\"; }\n\n.ion-md-mail-open:before {\n  content: \"\\f321\"; }\n\n.ion-md-male:before {\n  content: \"\\f323\"; }\n\n.ion-md-man:before {\n  content: \"\\f324\"; }\n\n.ion-md-map:before {\n  content: \"\\f325\"; }\n\n.ion-md-medal:before {\n  content: \"\\f326\"; }\n\n.ion-md-medical:before {\n  content: \"\\f327\"; }\n\n.ion-md-medkit:before {\n  content: \"\\f328\"; }\n\n.ion-md-megaphone:before {\n  content: \"\\f329\"; }\n\n.ion-md-menu:before {\n  content: \"\\f32a\"; }\n\n.ion-md-mic:before {\n  content: \"\\f32c\"; }\n\n.ion-md-mic-off:before {\n  content: \"\\f32b\"; }\n\n.ion-md-microphone:before {\n  content: \"\\f32d\"; }\n\n.ion-md-moon:before {\n  content: \"\\f32e\"; }\n\n.ion-md-more:before {\n  content: \"\\f1c9\"; }\n\n.ion-md-move:before {\n  content: \"\\f331\"; }\n\n.ion-md-musical-note:before {\n  content: \"\\f332\"; }\n\n.ion-md-musical-notes:before {\n  content: \"\\f333\"; }\n\n.ion-md-navigate:before {\n  content: \"\\f334\"; }\n\n.ion-md-no-smoking:before {\n  content: \"\\f335\"; }\n\n.ion-md-notifications:before {\n  content: \"\\f338\"; }\n\n.ion-md-notifications-off:before {\n  content: \"\\f336\"; }\n\n.ion-md-notifications-outline:before {\n  content: \"\\f337\"; }\n\n.ion-md-nuclear:before {\n  content: \"\\f339\"; }\n\n.ion-md-nutrition:before {\n  content: \"\\f33a\"; }\n\n.ion-md-open:before {\n  content: \"\\f33b\"; }\n\n.ion-md-options:before {\n  content: \"\\f33c\"; }\n\n.ion-md-outlet:before {\n  content: \"\\f33d\"; }\n\n.ion-md-paper:before {\n  content: \"\\f33f\"; }\n\n.ion-md-paper-plane:before {\n  content: \"\\f33e\"; }\n\n.ion-md-partly-sunny:before {\n  content: \"\\f340\"; }\n\n.ion-md-pause:before {\n  content: \"\\f341\"; }\n\n.ion-md-paw:before {\n  content: \"\\f342\"; }\n\n.ion-md-people:before {\n  content: \"\\f343\"; }\n\n.ion-md-person:before {\n  content: \"\\f345\"; }\n\n.ion-md-person-add:before {\n  content: \"\\f344\"; }\n\n.ion-md-phone-landscape:before {\n  content: \"\\f346\"; }\n\n.ion-md-phone-portrait:before {\n  content: \"\\f347\"; }\n\n.ion-md-photos:before {\n  content: \"\\f348\"; }\n\n.ion-md-pie:before {\n  content: \"\\f349\"; }\n\n.ion-md-pin:before {\n  content: \"\\f34a\"; }\n\n.ion-md-pint:before {\n  content: \"\\f34b\"; }\n\n.ion-md-pizza:before {\n  content: \"\\f354\"; }\n\n.ion-md-plane:before {\n  content: \"\\f355\"; }\n\n.ion-md-planet:before {\n  content: \"\\f356\"; }\n\n.ion-md-play:before {\n  content: \"\\f357\"; }\n\n.ion-md-podium:before {\n  content: \"\\f358\"; }\n\n.ion-md-power:before {\n  content: \"\\f359\"; }\n\n.ion-md-pricetag:before {\n  content: \"\\f35a\"; }\n\n.ion-md-pricetags:before {\n  content: \"\\f35b\"; }\n\n.ion-md-print:before {\n  content: \"\\f35c\"; }\n\n.ion-md-pulse:before {\n  content: \"\\f35d\"; }\n\n.ion-md-qr-scanner:before {\n  content: \"\\f35e\"; }\n\n.ion-md-quote:before {\n  content: \"\\f35f\"; }\n\n.ion-md-radio:before {\n  content: \"\\f362\"; }\n\n.ion-md-radio-button-off:before {\n  content: \"\\f360\"; }\n\n.ion-md-radio-button-on:before {\n  content: \"\\f361\"; }\n\n.ion-md-rainy:before {\n  content: \"\\f363\"; }\n\n.ion-md-recording:before {\n  content: \"\\f364\"; }\n\n.ion-md-redo:before {\n  content: \"\\f365\"; }\n\n.ion-md-refresh:before {\n  content: \"\\f366\"; }\n\n.ion-md-refresh-circle:before {\n  content: \"\\f228\"; }\n\n.ion-md-remove:before {\n  content: \"\\f368\"; }\n\n.ion-md-remove-circle:before {\n  content: \"\\f367\"; }\n\n.ion-md-reorder:before {\n  content: \"\\f369\"; }\n\n.ion-md-repeat:before {\n  content: \"\\f36a\"; }\n\n.ion-md-resize:before {\n  content: \"\\f36b\"; }\n\n.ion-md-restaurant:before {\n  content: \"\\f36c\"; }\n\n.ion-md-return-left:before {\n  content: \"\\f36d\"; }\n\n.ion-md-return-right:before {\n  content: \"\\f36e\"; }\n\n.ion-md-reverse-camera:before {\n  content: \"\\f36f\"; }\n\n.ion-md-rewind:before {\n  content: \"\\f370\"; }\n\n.ion-md-ribbon:before {\n  content: \"\\f371\"; }\n\n.ion-md-rose:before {\n  content: \"\\f372\"; }\n\n.ion-md-sad:before {\n  content: \"\\f373\"; }\n\n.ion-md-school:before {\n  content: \"\\f374\"; }\n\n.ion-md-search:before {\n  content: \"\\f375\"; }\n\n.ion-md-send:before {\n  content: \"\\f376\"; }\n\n.ion-md-settings:before {\n  content: \"\\f377\"; }\n\n.ion-md-share:before {\n  content: \"\\f379\"; }\n\n.ion-md-share-alt:before {\n  content: \"\\f378\"; }\n\n.ion-md-shirt:before {\n  content: \"\\f37a\"; }\n\n.ion-md-shuffle:before {\n  content: \"\\f37b\"; }\n\n.ion-md-skip-backward:before {\n  content: \"\\f37c\"; }\n\n.ion-md-skip-forward:before {\n  content: \"\\f37d\"; }\n\n.ion-md-snow:before {\n  content: \"\\f37e\"; }\n\n.ion-md-speedometer:before {\n  content: \"\\f37f\"; }\n\n.ion-md-square:before {\n  content: \"\\f381\"; }\n\n.ion-md-square-outline:before {\n  content: \"\\f380\"; }\n\n.ion-md-star:before {\n  content: \"\\f384\"; }\n\n.ion-md-star-half:before {\n  content: \"\\f382\"; }\n\n.ion-md-star-outline:before {\n  content: \"\\f383\"; }\n\n.ion-md-stats:before {\n  content: \"\\f385\"; }\n\n.ion-md-stopwatch:before {\n  content: \"\\f386\"; }\n\n.ion-md-subway:before {\n  content: \"\\f387\"; }\n\n.ion-md-sunny:before {\n  content: \"\\f388\"; }\n\n.ion-md-swap:before {\n  content: \"\\f389\"; }\n\n.ion-md-switch:before {\n  content: \"\\f38a\"; }\n\n.ion-md-sync:before {\n  content: \"\\f38b\"; }\n\n.ion-md-tablet-landscape:before {\n  content: \"\\f38c\"; }\n\n.ion-md-tablet-portrait:before {\n  content: \"\\f38d\"; }\n\n.ion-md-tennisball:before {\n  content: \"\\f38e\"; }\n\n.ion-md-text:before {\n  content: \"\\f38f\"; }\n\n.ion-md-thermometer:before {\n  content: \"\\f390\"; }\n\n.ion-md-thumbs-down:before {\n  content: \"\\f391\"; }\n\n.ion-md-thumbs-up:before {\n  content: \"\\f392\"; }\n\n.ion-md-thunderstorm:before {\n  content: \"\\f393\"; }\n\n.ion-md-time:before {\n  content: \"\\f394\"; }\n\n.ion-md-timer:before {\n  content: \"\\f395\"; }\n\n.ion-md-train:before {\n  content: \"\\f396\"; }\n\n.ion-md-transgender:before {\n  content: \"\\f397\"; }\n\n.ion-md-trash:before {\n  content: \"\\f398\"; }\n\n.ion-md-trending-down:before {\n  content: \"\\f399\"; }\n\n.ion-md-trending-up:before {\n  content: \"\\f39a\"; }\n\n.ion-md-trophy:before {\n  content: \"\\f39b\"; }\n\n.ion-md-umbrella:before {\n  content: \"\\f39c\"; }\n\n.ion-md-undo:before {\n  content: \"\\f39d\"; }\n\n.ion-md-unlock:before {\n  content: \"\\f39e\"; }\n\n.ion-md-videocam:before {\n  content: \"\\f39f\"; }\n\n.ion-md-volume-down:before {\n  content: \"\\f3a0\"; }\n\n.ion-md-volume-mute:before {\n  content: \"\\f3a1\"; }\n\n.ion-md-volume-off:before {\n  content: \"\\f3a2\"; }\n\n.ion-md-volume-up:before {\n  content: \"\\f3a3\"; }\n\n.ion-md-walk:before {\n  content: \"\\f3a4\"; }\n\n.ion-md-warning:before {\n  content: \"\\f3a5\"; }\n\n.ion-md-watch:before {\n  content: \"\\f3a6\"; }\n\n.ion-md-water:before {\n  content: \"\\f3a7\"; }\n\n.ion-md-wifi:before {\n  content: \"\\f3a8\"; }\n\n.ion-md-wine:before {\n  content: \"\\f3a9\"; }\n\n.ion-md-woman:before {\n  content: \"\\f3aa\"; }\n\n@font-face {\n  font-family: 'Ionicons';\n  src: url(\"/fonts/ionicons.woff2\") format(\"woff2\"), url(\"/fonts/ionicons.woff\") format(\"woff\"), url(\"/fonts/ionicons.ttf\") format(\"ttf\"), url(\"/fonts/ionicons.eot#iefix\") format(\"eot\") url(\"/fonts/ionicons.svg#Ionicons\") format(\"svg\");\n  font-weight: normal;\n  font-style: normal; }\n\n@font-face {\n  font-family: 'Eina';\n  src: url(\"/fonts/eina/eina-01-bold.woff2\") format(\"woff2\"), url(\"/fonts/eina/eina-01-bold.woff\") format(\"woff\"), url(\"/fonts/eina/eina-01-bold.ttf\") format(\"ttf\"), url(\"/fonts/eina/eina-01-bold.eot?#iefix\") format(\"eot\");\n  font-weight: 700;\n  unicode-range: U+000-5FF; }\n\n@font-face {\n  font-family: 'Eina';\n  src: url(\"/fonts/eina/eina-01-semibold.woff2\") format(\"woff2\"), url(\"/fonts/eina/eina-01-semibold.woff\") format(\"woff\"), url(\"/fonts/eina/eina-01-semibold.ttf\") format(\"ttf\"), url(\"/fonts/eina/eina-01-semibold.eot?#iefix\") format(\"eot\");\n  font-weight: 600;\n  unicode-range: U+000-5FF; }\n\n@font-face {\n  font-family: 'Eina';\n  src: url(\"/fonts/eina/eina-01-regular.woff2\") format(\"woff2\"), url(\"/fonts/eina/eina-01-regular.woff\") format(\"woff\"), url(\"/fonts/eina/eina-01-regular.ttf\") format(\"ttf\"), url(\"/fonts/eina/eina-01-regular.eot?#iefix\") format(\"eot\");\n  font-weight: 400;\n  unicode-range: U+000-5FF; }\n\n@font-face {\n  font-family: 'Inter';\n  font-style: normal;\n  font-weight: 400;\n  unicode-range: U+000-5FF;\n  src: url(\"https://code.ionicframework.com/assets/fonts/inter/Inter-Regular.woff2\") format(\"woff2\"), url(\"https://code.ionicframework.com/assets/fonts/inter/Inter-Regular.woff\") format(\"woff\"); }\n\n@font-face {\n  font-family: 'Inter';\n  font-style: italic;\n  font-weight: 400;\n  unicode-range: U+000-5FF;\n  src: url(\"https://code.ionicframework.com/assets/fonts/inter/Inter-Italic.woff2\") format(\"woff2\"), url(\"https://code.ionicframework.com/assets/fonts/inter/Inter-Italic.woff\") format(\"woff\"); }\n\n@font-face {\n  font-family: 'Inter';\n  font-style: normal;\n  font-weight: 500;\n  unicode-range: U+000-5FF;\n  src: url(\"https://code.ionicframework.com/assets/fonts/inter/Inter-Medium.woff2\") format(\"woff2\"), url(\"https://code.ionicframework.com/assets/fonts/inter/Inter-Medium.woff\") format(\"woff\"); }\n\n@font-face {\n  font-family: 'Inter';\n  font-style: italic;\n  font-weight: 500;\n  unicode-range: U+000-5FF;\n  src: url(\"https://code.ionicframework.com/assets/fonts/inter/Inter-MediumItalic.woff2\") format(\"woff2\"), url(\"https://code.ionicframework.com/assets/fonts/inter/Inter-MediumItalic.woff\") format(\"woff\"); }\n\n@font-face {\n  font-family: 'Inter';\n  font-style: normal;\n  font-weight: 600;\n  unicode-range: U+000-5FF;\n  src: url(\"https://code.ionicframework.com/assets/fonts/inter/Inter-SemiBold.woff2\") format(\"woff2\"), url(\"https://code.ionicframework.com/assets/fonts/inter/Inter-SemiBold.woff\") format(\"woff\"); }\n\n@font-face {\n  font-family: 'Inter';\n  font-style: italic;\n  font-weight: 600;\n  unicode-range: U+000-5FF;\n  src: url(\"https://code.ionicframework.com/assets/fonts/inter/Inter-SemiBoldItalic.woff2\") format(\"woff2\"), url(\"https://code.ionicframework.com/assets/fonts/inter/Inter-SemiBoldItalic.woff\") format(\"woff\"); }\n\n@font-face {\n  font-family: 'Inter';\n  font-style: normal;\n  font-weight: 700;\n  unicode-range: U+000-5FF;\n  src: url(\"https://code.ionicframework.com/assets/fonts/inter/Inter-Bold.woff2\") format(\"woff2\"), url(\"https://code.ionicframework.com/assets/fonts/inter/Inter-Bold.woff\") format(\"woff\"); }\n\n@font-face {\n  font-family: 'Inter';\n  font-style: italic;\n  font-weight: 700;\n  unicode-range: U+000-5FF;\n  src: url(\"https://code.ionicframework.com/assets/fonts/inter/Inter-BoldItalic.woff2\") format(\"woff2\"), url(\"https://code.ionicframework.com/assets/fonts/inter/Inter-BoldItalic.woff\") format(\"woff\"); }\n\n@font-face {\n  font-family: 'Inter';\n  font-style: normal;\n  font-weight: 800;\n  unicode-range: U+000-5FF;\n  src: url(\"https://code.ionicframework.com/assets/fonts/inter/Inter-ExtraBold.woff2\") format(\"woff2\"), url(\"https://code.ionicframework.com/assets/fonts/inter/Inter-ExtraBold.woff\") format(\"woff\"); }\n\n@font-face {\n  font-family: 'Inter';\n  font-style: italic;\n  font-weight: 800;\n  unicode-range: U+000-5FF;\n  src: url(\"https://code.ionicframework.com/assets/fonts/inter/Inter-ExtraBoldItalic.woff2\") format(\"woff2\"), url(\"https://code.ionicframework.com/assets/fonts/inter/Inter-ExtraBoldItalic.woff\") format(\"woff\"); }\n\n@font-face {\n  font-family: 'Inter';\n  font-style: normal;\n  font-weight: 900;\n  unicode-range: U+000-5FF;\n  src: url(\"https://code.ionicframework.com/assets/fonts/inter/Inter-Black.woff2\") format(\"woff2\"), url(\"https://code.ionicframework.com/assets/fonts/inter/Inter-Black.woff\") format(\"woff\"); }\n\n@font-face {\n  font-family: 'Inter';\n  font-style: italic;\n  font-weight: 900;\n  unicode-range: U+000-5FF;\n  src: url(\"https://code.ionicframework.com/assets/fonts/inter/Inter-BlackItalic.woff2\") format(\"woff2\"), url(\"https://code.ionicframework.com/assets/fonts/inter/Inter-BlackItalic.woff\") format(\"woff\"); }\n\n/*! normalize.css v3.0.2 | MIT License | git.io/normalize */\nhtml {\n  font-family: sans-serif;\n  -ms-text-size-adjust: 100%;\n  -webkit-text-size-adjust: 100%; }\n\nbody {\n  margin: 0; }\n\narticle,\naside,\ndetails,\nfigcaption,\nfigure,\nfooter,\nheader,\nhgroup,\nmain,\nmenu,\nnav,\nsection,\nsummary {\n  display: block; }\n\naudio,\ncanvas,\nprogress,\nvideo {\n  display: inline-block;\n  vertical-align: baseline; }\n\naudio:not([controls]) {\n  display: none;\n  height: 0; }\n\n[hidden],\ntemplate {\n  display: none; }\n\na {\n  background-color: transparent; }\n\na:active,\na:hover {\n  outline: 0; }\n\nabbr[title] {\n  border-bottom: 1px dotted; }\n\nb,\nstrong {\n  font-weight: bold; }\n\ndfn {\n  font-style: italic; }\n\nh1 {\n  font-size: 2em;\n  margin: 0.67em 0; }\n\nmark {\n  background: #ff0;\n  color: #000; }\n\nsmall {\n  font-size: 80%; }\n\nsub,\nsup {\n  font-size: 75%;\n  line-height: 0;\n  position: relative;\n  vertical-align: baseline; }\n\nsup {\n  top: -0.5em; }\n\nsub {\n  bottom: -0.25em; }\n\nimg {\n  border: 0; }\n\nsvg:not(:root) {\n  overflow: hidden; }\n\nfigure {\n  margin: 1em 40px; }\n\nhr {\n  box-sizing: content-box;\n  height: 0; }\n\npre {\n  overflow: auto; }\n\ncode,\nkbd,\npre,\nsamp {\n  font-family: monospace, monospace;\n  font-size: 1em; }\n\nbutton,\ninput,\noptgroup,\nselect,\ntextarea {\n  color: inherit;\n  font: inherit;\n  margin: 0; }\n\nbutton {\n  overflow: visible; }\n\nbutton,\nselect {\n  text-transform: none; }\n\nbutton,\nhtml input[type=\"button\"],\ninput[type=\"reset\"],\ninput[type=\"submit\"] {\n  -webkit-appearance: button;\n  cursor: pointer; }\n\nbutton[disabled],\nhtml input[disabled] {\n  cursor: default; }\n\nbutton::-moz-focus-inner,\ninput::-moz-focus-inner {\n  border: 0;\n  padding: 0; }\n\ninput {\n  line-height: normal; }\n\ninput[type=\"checkbox\"],\ninput[type=\"radio\"] {\n  box-sizing: border-box;\n  padding: 0; }\n\ninput[type=\"number\"]::-webkit-inner-spin-button,\ninput[type=\"number\"]::-webkit-outer-spin-button {\n  height: auto; }\n\ninput[type=\"search\"] {\n  -webkit-appearance: textfield;\n  box-sizing: content-box; }\n\ninput[type=\"search\"]::-webkit-search-cancel-button,\ninput[type=\"search\"]::-webkit-search-decoration {\n  -webkit-appearance: none; }\n\nfieldset {\n  border: 1px solid #c0c0c0;\n  margin: 0 2px;\n  padding: 0.35em 0.625em 0.75em; }\n\nlegend {\n  border: 0;\n  padding: 0; }\n\ntextarea {\n  overflow: auto; }\n\noptgroup {\n  font-weight: bold; }\n\ntable {\n  border-collapse: collapse;\n  border-spacing: 0; }\n\ntd,\nth {\n  padding: 0; }\n\n/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */\n@media print {\n  *,\n  *:before,\n  *:after {\n    background: transparent !important;\n    color: #000 !important;\n    box-shadow: none !important;\n    text-shadow: none !important; }\n  a,\n  a:visited {\n    text-decoration: underline; }\n  a[href]:after {\n    content: \" (\" attr(href) \")\"; }\n  abbr[title]:after {\n    content: \" (\" attr(title) \")\"; }\n  a[href^=\"#\"]:after,\n  a[href^=\"javascript:\"]:after {\n    content: \"\"; }\n  pre,\n  blockquote {\n    border: 1px solid #999;\n    page-break-inside: avoid; }\n  thead {\n    display: table-header-group; }\n  tr,\n  img {\n    page-break-inside: avoid; }\n  img {\n    max-width: 100% !important; }\n  p,\n  h2,\n  h3 {\n    orphans: 3;\n    widows: 3; }\n  h2,\n  h3 {\n    page-break-after: avoid; }\n  select {\n    background: #fff !important; }\n  .navbar {\n    display: none; }\n  .btn > .caret,\n  .dropup > .btn > .caret {\n    border-top-color: #000 !important; }\n  .label {\n    border: 1px solid #000; }\n  .table {\n    border-collapse: collapse !important; }\n    .table td,\n    .table th {\n      background-color: #fff !important; }\n  .table-bordered th,\n  .table-bordered td {\n    border: 1px solid #ddd !important; } }\n\n@font-face {\n  font-family: 'Glyphicons Halflings';\n  src: url(\"../fonts/bootstrap/glyphicons-halflings-regular.eot\");\n  src: url(\"../fonts/bootstrap/glyphicons-halflings-regular.eot?#iefix\") format(\"embedded-opentype\"), url(\"../fonts/bootstrap/glyphicons-halflings-regular.woff2\") format(\"woff2\"), url(\"../fonts/bootstrap/glyphicons-halflings-regular.woff\") format(\"woff\"), url(\"../fonts/bootstrap/glyphicons-halflings-regular.ttf\") format(\"truetype\"), url(\"../fonts/bootstrap/glyphicons-halflings-regular.svg#glyphicons_halflingsregular\") format(\"svg\"); }\n\n.glyphicon {\n  position: relative;\n  top: 1px;\n  display: inline-block;\n  font-family: 'Glyphicons Halflings';\n  font-style: normal;\n  font-weight: normal;\n  line-height: 1;\n  -webkit-font-smoothing: antialiased;\n  -moz-osx-font-smoothing: grayscale; }\n\n.glyphicon-asterisk:before {\n  content: \"\\2a\"; }\n\n.glyphicon-plus:before {\n  content: \"\\2b\"; }\n\n.glyphicon-euro:before,\n.glyphicon-eur:before {\n  content: \"\\20ac\"; }\n\n.glyphicon-minus:before {\n  content: \"\\2212\"; }\n\n.glyphicon-cloud:before {\n  content: \"\\2601\"; }\n\n.glyphicon-envelope:before {\n  content: \"\\2709\"; }\n\n.glyphicon-pencil:before {\n  content: \"\\270f\"; }\n\n.glyphicon-glass:before {\n  content: \"\\e001\"; }\n\n.glyphicon-music:before {\n  content: \"\\e002\"; }\n\n.glyphicon-search:before {\n  content: \"\\e003\"; }\n\n.glyphicon-heart:before {\n  content: \"\\e005\"; }\n\n.glyphicon-star:before {\n  content: \"\\e006\"; }\n\n.glyphicon-star-empty:before {\n  content: \"\\e007\"; }\n\n.glyphicon-user:before {\n  content: \"\\e008\"; }\n\n.glyphicon-film:before {\n  content: \"\\e009\"; }\n\n.glyphicon-th-large:before {\n  content: \"\\e010\"; }\n\n.glyphicon-th:before {\n  content: \"\\e011\"; }\n\n.glyphicon-th-list:before {\n  content: \"\\e012\"; }\n\n.glyphicon-ok:before {\n  content: \"\\e013\"; }\n\n.glyphicon-remove:before {\n  content: \"\\e014\"; }\n\n.glyphicon-zoom-in:before {\n  content: \"\\e015\"; }\n\n.glyphicon-zoom-out:before {\n  content: \"\\e016\"; }\n\n.glyphicon-off:before {\n  content: \"\\e017\"; }\n\n.glyphicon-signal:before {\n  content: \"\\e018\"; }\n\n.glyphicon-cog:before {\n  content: \"\\e019\"; }\n\n.glyphicon-trash:before {\n  content: \"\\e020\"; }\n\n.glyphicon-home:before {\n  content: \"\\e021\"; }\n\n.glyphicon-file:before {\n  content: \"\\e022\"; }\n\n.glyphicon-time:before {\n  content: \"\\e023\"; }\n\n.glyphicon-road:before {\n  content: \"\\e024\"; }\n\n.glyphicon-download-alt:before {\n  content: \"\\e025\"; }\n\n.glyphicon-download:before {\n  content: \"\\e026\"; }\n\n.glyphicon-upload:before {\n  content: \"\\e027\"; }\n\n.glyphicon-inbox:before {\n  content: \"\\e028\"; }\n\n.glyphicon-play-circle:before {\n  content: \"\\e029\"; }\n\n.glyphicon-repeat:before {\n  content: \"\\e030\"; }\n\n.glyphicon-refresh:before {\n  content: \"\\e031\"; }\n\n.glyphicon-list-alt:before {\n  content: \"\\e032\"; }\n\n.glyphicon-lock:before {\n  content: \"\\e033\"; }\n\n.glyphicon-flag:before {\n  content: \"\\e034\"; }\n\n.glyphicon-headphones:before {\n  content: \"\\e035\"; }\n\n.glyphicon-volume-off:before {\n  content: \"\\e036\"; }\n\n.glyphicon-volume-down:before {\n  content: \"\\e037\"; }\n\n.glyphicon-volume-up:before {\n  content: \"\\e038\"; }\n\n.glyphicon-qrcode:before {\n  content: \"\\e039\"; }\n\n.glyphicon-barcode:before {\n  content: \"\\e040\"; }\n\n.glyphicon-tag:before {\n  content: \"\\e041\"; }\n\n.glyphicon-tags:before {\n  content: \"\\e042\"; }\n\n.glyphicon-book:before {\n  content: \"\\e043\"; }\n\n.glyphicon-bookmark:before {\n  content: \"\\e044\"; }\n\n.glyphicon-print:before {\n  content: \"\\e045\"; }\n\n.glyphicon-camera:before {\n  content: \"\\e046\"; }\n\n.glyphicon-font:before {\n  content: \"\\e047\"; }\n\n.glyphicon-bold:before {\n  content: \"\\e048\"; }\n\n.glyphicon-italic:before {\n  content: \"\\e049\"; }\n\n.glyphicon-text-height:before {\n  content: \"\\e050\"; }\n\n.glyphicon-text-width:before {\n  content: \"\\e051\"; }\n\n.glyphicon-align-left:before {\n  content: \"\\e052\"; }\n\n.glyphicon-align-center:before {\n  content: \"\\e053\"; }\n\n.glyphicon-align-right:before {\n  content: \"\\e054\"; }\n\n.glyphicon-align-justify:before {\n  content: \"\\e055\"; }\n\n.glyphicon-list:before {\n  content: \"\\e056\"; }\n\n.glyphicon-indent-left:before {\n  content: \"\\e057\"; }\n\n.glyphicon-indent-right:before {\n  content: \"\\e058\"; }\n\n.glyphicon-facetime-video:before {\n  content: \"\\e059\"; }\n\n.glyphicon-picture:before {\n  content: \"\\e060\"; }\n\n.glyphicon-map-marker:before {\n  content: \"\\e062\"; }\n\n.glyphicon-adjust:before {\n  content: \"\\e063\"; }\n\n.glyphicon-tint:before {\n  content: \"\\e064\"; }\n\n.glyphicon-edit:before {\n  content: \"\\e065\"; }\n\n.glyphicon-share:before {\n  content: \"\\e066\"; }\n\n.glyphicon-check:before {\n  content: \"\\e067\"; }\n\n.glyphicon-move:before {\n  content: \"\\e068\"; }\n\n.glyphicon-step-backward:before {\n  content: \"\\e069\"; }\n\n.glyphicon-fast-backward:before {\n  content: \"\\e070\"; }\n\n.glyphicon-backward:before {\n  content: \"\\e071\"; }\n\n.glyphicon-play:before {\n  content: \"\\e072\"; }\n\n.glyphicon-pause:before {\n  content: \"\\e073\"; }\n\n.glyphicon-stop:before {\n  content: \"\\e074\"; }\n\n.glyphicon-forward:before {\n  content: \"\\e075\"; }\n\n.glyphicon-fast-forward:before {\n  content: \"\\e076\"; }\n\n.glyphicon-step-forward:before {\n  content: \"\\e077\"; }\n\n.glyphicon-eject:before {\n  content: \"\\e078\"; }\n\n.glyphicon-chevron-left:before {\n  content: \"\\e079\"; }\n\n.glyphicon-chevron-right:before {\n  content: \"\\e080\"; }\n\n.glyphicon-plus-sign:before {\n  content: \"\\e081\"; }\n\n.glyphicon-minus-sign:before {\n  content: \"\\e082\"; }\n\n.glyphicon-remove-sign:before {\n  content: \"\\e083\"; }\n\n.glyphicon-ok-sign:before {\n  content: \"\\e084\"; }\n\n.glyphicon-question-sign:before {\n  content: \"\\e085\"; }\n\n.glyphicon-info-sign:before {\n  content: \"\\e086\"; }\n\n.glyphicon-screenshot:before {\n  content: \"\\e087\"; }\n\n.glyphicon-remove-circle:before {\n  content: \"\\e088\"; }\n\n.glyphicon-ok-circle:before {\n  content: \"\\e089\"; }\n\n.glyphicon-ban-circle:before {\n  content: \"\\e090\"; }\n\n.glyphicon-arrow-left:before {\n  content: \"\\e091\"; }\n\n.glyphicon-arrow-right:before {\n  content: \"\\e092\"; }\n\n.glyphicon-arrow-up:before {\n  content: \"\\e093\"; }\n\n.glyphicon-arrow-down:before {\n  content: \"\\e094\"; }\n\n.glyphicon-share-alt:before {\n  content: \"\\e095\"; }\n\n.glyphicon-resize-full:before {\n  content: \"\\e096\"; }\n\n.glyphicon-resize-small:before {\n  content: \"\\e097\"; }\n\n.glyphicon-exclamation-sign:before {\n  content: \"\\e101\"; }\n\n.glyphicon-gift:before {\n  content: \"\\e102\"; }\n\n.glyphicon-leaf:before {\n  content: \"\\e103\"; }\n\n.glyphicon-fire:before {\n  content: \"\\e104\"; }\n\n.glyphicon-eye-open:before {\n  content: \"\\e105\"; }\n\n.glyphicon-eye-close:before {\n  content: \"\\e106\"; }\n\n.glyphicon-warning-sign:before {\n  content: \"\\e107\"; }\n\n.glyphicon-plane:before {\n  content: \"\\e108\"; }\n\n.glyphicon-calendar:before {\n  content: \"\\e109\"; }\n\n.glyphicon-random:before {\n  content: \"\\e110\"; }\n\n.glyphicon-comment:before {\n  content: \"\\e111\"; }\n\n.glyphicon-magnet:before {\n  content: \"\\e112\"; }\n\n.glyphicon-chevron-up:before {\n  content: \"\\e113\"; }\n\n.glyphicon-chevron-down:before {\n  content: \"\\e114\"; }\n\n.glyphicon-retweet:before {\n  content: \"\\e115\"; }\n\n.glyphicon-shopping-cart:before {\n  content: \"\\e116\"; }\n\n.glyphicon-folder-close:before {\n  content: \"\\e117\"; }\n\n.glyphicon-folder-open:before {\n  content: \"\\e118\"; }\n\n.glyphicon-resize-vertical:before {\n  content: \"\\e119\"; }\n\n.glyphicon-resize-horizontal:before {\n  content: \"\\e120\"; }\n\n.glyphicon-hdd:before {\n  content: \"\\e121\"; }\n\n.glyphicon-bullhorn:before {\n  content: \"\\e122\"; }\n\n.glyphicon-bell:before {\n  content: \"\\e123\"; }\n\n.glyphicon-certificate:before {\n  content: \"\\e124\"; }\n\n.glyphicon-thumbs-up:before {\n  content: \"\\e125\"; }\n\n.glyphicon-thumbs-down:before {\n  content: \"\\e126\"; }\n\n.glyphicon-hand-right:before {\n  content: \"\\e127\"; }\n\n.glyphicon-hand-left:before {\n  content: \"\\e128\"; }\n\n.glyphicon-hand-up:before {\n  content: \"\\e129\"; }\n\n.glyphicon-hand-down:before {\n  content: \"\\e130\"; }\n\n.glyphicon-circle-arrow-right:before {\n  content: \"\\e131\"; }\n\n.glyphicon-circle-arrow-left:before {\n  content: \"\\e132\"; }\n\n.glyphicon-circle-arrow-up:before {\n  content: \"\\e133\"; }\n\n.glyphicon-circle-arrow-down:before {\n  content: \"\\e134\"; }\n\n.glyphicon-globe:before {\n  content: \"\\e135\"; }\n\n.glyphicon-wrench:before {\n  content: \"\\e136\"; }\n\n.glyphicon-tasks:before {\n  content: \"\\e137\"; }\n\n.glyphicon-filter:before {\n  content: \"\\e138\"; }\n\n.glyphicon-briefcase:before {\n  content: \"\\e139\"; }\n\n.glyphicon-fullscreen:before {\n  content: \"\\e140\"; }\n\n.glyphicon-dashboard:before {\n  content: \"\\e141\"; }\n\n.glyphicon-paperclip:before {\n  content: \"\\e142\"; }\n\n.glyphicon-heart-empty:before {\n  content: \"\\e143\"; }\n\n.glyphicon-link:before {\n  content: \"\\e144\"; }\n\n.glyphicon-phone:before {\n  content: \"\\e145\"; }\n\n.glyphicon-pushpin:before {\n  content: \"\\e146\"; }\n\n.glyphicon-usd:before {\n  content: \"\\e148\"; }\n\n.glyphicon-gbp:before {\n  content: \"\\e149\"; }\n\n.glyphicon-sort:before {\n  content: \"\\e150\"; }\n\n.glyphicon-sort-by-alphabet:before {\n  content: \"\\e151\"; }\n\n.glyphicon-sort-by-alphabet-alt:before {\n  content: \"\\e152\"; }\n\n.glyphicon-sort-by-order:before {\n  content: \"\\e153\"; }\n\n.glyphicon-sort-by-order-alt:before {\n  content: \"\\e154\"; }\n\n.glyphicon-sort-by-attributes:before {\n  content: \"\\e155\"; }\n\n.glyphicon-sort-by-attributes-alt:before {\n  content: \"\\e156\"; }\n\n.glyphicon-unchecked:before {\n  content: \"\\e157\"; }\n\n.glyphicon-expand:before {\n  content: \"\\e158\"; }\n\n.glyphicon-collapse-down:before {\n  content: \"\\e159\"; }\n\n.glyphicon-collapse-up:before {\n  content: \"\\e160\"; }\n\n.glyphicon-log-in:before {\n  content: \"\\e161\"; }\n\n.glyphicon-flash:before {\n  content: \"\\e162\"; }\n\n.glyphicon-log-out:before {\n  content: \"\\e163\"; }\n\n.glyphicon-new-window:before {\n  content: \"\\e164\"; }\n\n.glyphicon-record:before {\n  content: \"\\e165\"; }\n\n.glyphicon-save:before {\n  content: \"\\e166\"; }\n\n.glyphicon-open:before {\n  content: \"\\e167\"; }\n\n.glyphicon-saved:before {\n  content: \"\\e168\"; }\n\n.glyphicon-import:before {\n  content: \"\\e169\"; }\n\n.glyphicon-export:before {\n  content: \"\\e170\"; }\n\n.glyphicon-send:before {\n  content: \"\\e171\"; }\n\n.glyphicon-floppy-disk:before {\n  content: \"\\e172\"; }\n\n.glyphicon-floppy-saved:before {\n  content: \"\\e173\"; }\n\n.glyphicon-floppy-remove:before {\n  content: \"\\e174\"; }\n\n.glyphicon-floppy-save:before {\n  content: \"\\e175\"; }\n\n.glyphicon-floppy-open:before {\n  content: \"\\e176\"; }\n\n.glyphicon-credit-card:before {\n  content: \"\\e177\"; }\n\n.glyphicon-transfer:before {\n  content: \"\\e178\"; }\n\n.glyphicon-cutlery:before {\n  content: \"\\e179\"; }\n\n.glyphicon-header:before {\n  content: \"\\e180\"; }\n\n.glyphicon-compressed:before {\n  content: \"\\e181\"; }\n\n.glyphicon-earphone:before {\n  content: \"\\e182\"; }\n\n.glyphicon-phone-alt:before {\n  content: \"\\e183\"; }\n\n.glyphicon-tower:before {\n  content: \"\\e184\"; }\n\n.glyphicon-stats:before {\n  content: \"\\e185\"; }\n\n.glyphicon-sd-video:before {\n  content: \"\\e186\"; }\n\n.glyphicon-hd-video:before {\n  content: \"\\e187\"; }\n\n.glyphicon-subtitles:before {\n  content: \"\\e188\"; }\n\n.glyphicon-sound-stereo:before {\n  content: \"\\e189\"; }\n\n.glyphicon-sound-dolby:before {\n  content: \"\\e190\"; }\n\n.glyphicon-sound-5-1:before {\n  content: \"\\e191\"; }\n\n.glyphicon-sound-6-1:before {\n  content: \"\\e192\"; }\n\n.glyphicon-sound-7-1:before {\n  content: \"\\e193\"; }\n\n.glyphicon-copyright-mark:before {\n  content: \"\\e194\"; }\n\n.glyphicon-registration-mark:before {\n  content: \"\\e195\"; }\n\n.glyphicon-cloud-download:before {\n  content: \"\\e197\"; }\n\n.glyphicon-cloud-upload:before {\n  content: \"\\e198\"; }\n\n.glyphicon-tree-conifer:before {\n  content: \"\\e199\"; }\n\n.glyphicon-tree-deciduous:before {\n  content: \"\\e200\"; }\n\n.glyphicon-cd:before {\n  content: \"\\e201\"; }\n\n.glyphicon-save-file:before {\n  content: \"\\e202\"; }\n\n.glyphicon-open-file:before {\n  content: \"\\e203\"; }\n\n.glyphicon-level-up:before {\n  content: \"\\e204\"; }\n\n.glyphicon-copy:before {\n  content: \"\\e205\"; }\n\n.glyphicon-paste:before {\n  content: \"\\e206\"; }\n\n.glyphicon-alert:before {\n  content: \"\\e209\"; }\n\n.glyphicon-equalizer:before {\n  content: \"\\e210\"; }\n\n.glyphicon-king:before {\n  content: \"\\e211\"; }\n\n.glyphicon-queen:before {\n  content: \"\\e212\"; }\n\n.glyphicon-pawn:before {\n  content: \"\\e213\"; }\n\n.glyphicon-bishop:before {\n  content: \"\\e214\"; }\n\n.glyphicon-knight:before {\n  content: \"\\e215\"; }\n\n.glyphicon-baby-formula:before {\n  content: \"\\e216\"; }\n\n.glyphicon-tent:before {\n  content: \"\\26fa\"; }\n\n.glyphicon-blackboard:before {\n  content: \"\\e218\"; }\n\n.glyphicon-bed:before {\n  content: \"\\e219\"; }\n\n.glyphicon-apple:before {\n  content: \"\\f8ff\"; }\n\n.glyphicon-erase:before {\n  content: \"\\e221\"; }\n\n.glyphicon-hourglass:before {\n  content: \"\\231b\"; }\n\n.glyphicon-lamp:before {\n  content: \"\\e223\"; }\n\n.glyphicon-duplicate:before {\n  content: \"\\e224\"; }\n\n.glyphicon-piggy-bank:before {\n  content: \"\\e225\"; }\n\n.glyphicon-scissors:before {\n  content: \"\\e226\"; }\n\n.glyphicon-bitcoin:before {\n  content: \"\\e227\"; }\n\n.glyphicon-btc:before {\n  content: \"\\e227\"; }\n\n.glyphicon-xbt:before {\n  content: \"\\e227\"; }\n\n.glyphicon-yen:before {\n  content: \"\\00a5\"; }\n\n.glyphicon-jpy:before {\n  content: \"\\00a5\"; }\n\n.glyphicon-ruble:before {\n  content: \"\\20bd\"; }\n\n.glyphicon-rub:before {\n  content: \"\\20bd\"; }\n\n.glyphicon-scale:before {\n  content: \"\\e230\"; }\n\n.glyphicon-ice-lolly:before {\n  content: \"\\e231\"; }\n\n.glyphicon-ice-lolly-tasted:before {\n  content: \"\\e232\"; }\n\n.glyphicon-education:before {\n  content: \"\\e233\"; }\n\n.glyphicon-option-horizontal:before {\n  content: \"\\e234\"; }\n\n.glyphicon-option-vertical:before {\n  content: \"\\e235\"; }\n\n.glyphicon-menu-hamburger:before {\n  content: \"\\e236\"; }\n\n.glyphicon-modal-window:before {\n  content: \"\\e237\"; }\n\n.glyphicon-oil:before {\n  content: \"\\e238\"; }\n\n.glyphicon-grain:before {\n  content: \"\\e239\"; }\n\n.glyphicon-sunglasses:before {\n  content: \"\\e240\"; }\n\n.glyphicon-text-size:before {\n  content: \"\\e241\"; }\n\n.glyphicon-text-color:before {\n  content: \"\\e242\"; }\n\n.glyphicon-text-background:before {\n  content: \"\\e243\"; }\n\n.glyphicon-object-align-top:before {\n  content: \"\\e244\"; }\n\n.glyphicon-object-align-bottom:before {\n  content: \"\\e245\"; }\n\n.glyphicon-object-align-horizontal:before {\n  content: \"\\e246\"; }\n\n.glyphicon-object-align-left:before {\n  content: \"\\e247\"; }\n\n.glyphicon-object-align-vertical:before {\n  content: \"\\e248\"; }\n\n.glyphicon-object-align-right:before {\n  content: \"\\e249\"; }\n\n.glyphicon-triangle-right:before {\n  content: \"\\e250\"; }\n\n.glyphicon-triangle-left:before {\n  content: \"\\e251\"; }\n\n.glyphicon-triangle-bottom:before {\n  content: \"\\e252\"; }\n\n.glyphicon-triangle-top:before {\n  content: \"\\e253\"; }\n\n.glyphicon-console:before {\n  content: \"\\e254\"; }\n\n.glyphicon-superscript:before {\n  content: \"\\e255\"; }\n\n.glyphicon-subscript:before {\n  content: \"\\e256\"; }\n\n.glyphicon-menu-left:before {\n  content: \"\\e257\"; }\n\n.glyphicon-menu-right:before {\n  content: \"\\e258\"; }\n\n.glyphicon-menu-down:before {\n  content: \"\\e259\"; }\n\n.glyphicon-menu-up:before {\n  content: \"\\e260\"; }\n\n* {\n  box-sizing: border-box; }\n\n*:before,\n*:after {\n  box-sizing: border-box; }\n\nhtml {\n  font-size: 10px;\n  -webkit-tap-highlight-color: rgba(0, 0, 0, 0); }\n\nbody {\n  font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n  font-size: 14px;\n  line-height: 1.428571429;\n  color: #333333;\n  background-color: #fff; }\n\ninput,\nbutton,\nselect,\ntextarea {\n  font-family: inherit;\n  font-size: inherit;\n  line-height: inherit; }\n\na {\n  color: #337ab7;\n  text-decoration: none; }\n  a:hover, a:focus {\n    color: #23527c;\n    text-decoration: underline; }\n  a:focus {\n    outline: thin dotted;\n    outline: 5px auto -webkit-focus-ring-color;\n    outline-offset: -2px; }\n\nfigure {\n  margin: 0; }\n\nimg {\n  vertical-align: middle; }\n\n.img-responsive {\n  display: block;\n  max-width: 100%;\n  height: auto; }\n\n.img-rounded {\n  border-radius: 6px; }\n\n.img-thumbnail {\n  padding: 4px;\n  line-height: 1.428571429;\n  background-color: #fff;\n  border: 1px solid #ddd;\n  border-radius: 4px;\n  transition: all 0.2s ease-in-out;\n  display: inline-block;\n  max-width: 100%;\n  height: auto; }\n\n.img-circle {\n  border-radius: 50%; }\n\nhr {\n  margin-top: 20px;\n  margin-bottom: 20px;\n  border: 0;\n  border-top: 1px solid #eeeeee; }\n\n.sr-only {\n  position: absolute;\n  width: 1px;\n  height: 1px;\n  margin: -1px;\n  padding: 0;\n  overflow: hidden;\n  clip: rect(0, 0, 0, 0);\n  border: 0; }\n\n.sr-only-focusable:active, .sr-only-focusable:focus {\n  position: static;\n  width: auto;\n  height: auto;\n  margin: 0;\n  overflow: visible;\n  clip: auto; }\n\n[role=\"button\"] {\n  cursor: pointer; }\n\nh1, h2, h3, h4, h5, h6,\n.h1, .h2, .h3, .h4, .h5, .h6 {\n  font-family: inherit;\n  font-weight: 700;\n  line-height: 1.1;\n  color: inherit; }\n  h1 small,\n  h1 .small, h2 small,\n  h2 .small, h3 small,\n  h3 .small, h4 small,\n  h4 .small, h5 small,\n  h5 .small, h6 small,\n  h6 .small,\n  .h1 small,\n  .h1 .small, .h2 small,\n  .h2 .small, .h3 small,\n  .h3 .small, .h4 small,\n  .h4 .small, .h5 small,\n  .h5 .small, .h6 small,\n  .h6 .small {\n    font-weight: normal;\n    line-height: 1;\n    color: #777777; }\n\nh1, .h1,\nh2, .h2,\nh3, .h3 {\n  margin-top: 20px;\n  margin-bottom: 10px; }\n  h1 small,\n  h1 .small, .h1 small,\n  .h1 .small,\n  h2 small,\n  h2 .small, .h2 small,\n  .h2 .small,\n  h3 small,\n  h3 .small, .h3 small,\n  .h3 .small {\n    font-size: 65%; }\n\nh4, .h4,\nh5, .h5,\nh6, .h6 {\n  margin-top: 10px;\n  margin-bottom: 10px; }\n  h4 small,\n  h4 .small, .h4 small,\n  .h4 .small,\n  h5 small,\n  h5 .small, .h5 small,\n  .h5 .small,\n  h6 small,\n  h6 .small, .h6 small,\n  .h6 .small {\n    font-size: 75%; }\n\nh1, .h1 {\n  font-size: 36px; }\n\nh2, .h2 {\n  font-size: 30px; }\n\nh3, .h3 {\n  font-size: 24px; }\n\nh4, .h4 {\n  font-size: 18px; }\n\nh5, .h5 {\n  font-size: 14px; }\n\nh6, .h6 {\n  font-size: 12px; }\n\np {\n  margin: 0 0 10px; }\n\n.lead {\n  margin-bottom: 20px;\n  font-size: 16px;\n  font-weight: 300;\n  line-height: 1.4; }\n  @media (min-width: 768px) {\n    .lead {\n      font-size: 21px; } }\n\nsmall,\n.small {\n  font-size: 85%; }\n\nmark,\n.mark {\n  background-color: #fcf8e3;\n  padding: .2em; }\n\n.text-left {\n  text-align: left; }\n\n.text-right {\n  text-align: right; }\n\n.text-center {\n  text-align: center; }\n\n.text-justify {\n  text-align: justify; }\n\n.text-nowrap {\n  white-space: nowrap; }\n\n.text-lowercase {\n  text-transform: lowercase; }\n\n.text-uppercase, .initialism {\n  text-transform: uppercase; }\n\n.text-capitalize {\n  text-transform: capitalize; }\n\n.text-muted {\n  color: #777777; }\n\n.text-primary {\n  color: #337ab7; }\n\na.text-primary:hover {\n  color: #286090; }\n\n.text-success {\n  color: #3c763d; }\n\na.text-success:hover {\n  color: #2b542c; }\n\n.text-info {\n  color: #31708f; }\n\na.text-info:hover {\n  color: #245269; }\n\n.text-warning {\n  color: #8a6d3b; }\n\na.text-warning:hover {\n  color: #66512c; }\n\n.text-danger {\n  color: #a94442; }\n\na.text-danger:hover {\n  color: #843534; }\n\n.bg-primary {\n  color: #fff; }\n\n.bg-primary {\n  background-color: #337ab7; }\n\na.bg-primary:hover {\n  background-color: #286090; }\n\n.bg-success {\n  background-color: #dff0d8; }\n\na.bg-success:hover {\n  background-color: #c1e2b3; }\n\n.bg-info {\n  background-color: #d9edf7; }\n\na.bg-info:hover {\n  background-color: #afd9ee; }\n\n.bg-warning {\n  background-color: #fcf8e3; }\n\na.bg-warning:hover {\n  background-color: #f7ecb5; }\n\n.bg-danger {\n  background-color: #f2dede; }\n\na.bg-danger:hover {\n  background-color: #e4b9b9; }\n\n.page-header {\n  padding-bottom: 9px;\n  margin: 40px 0 20px;\n  border-bottom: 1px solid #eeeeee; }\n\nul,\nol {\n  margin-top: 0;\n  margin-bottom: 10px; }\n  ul ul,\n  ul ol,\n  ol ul,\n  ol ol {\n    margin-bottom: 0; }\n\n.list-unstyled {\n  padding-left: 0;\n  list-style: none; }\n\n.list-inline {\n  padding-left: 0;\n  list-style: none;\n  margin-left: -5px; }\n  .list-inline > li {\n    display: inline-block;\n    padding-left: 5px;\n    padding-right: 5px; }\n\ndl {\n  margin-top: 0;\n  margin-bottom: 20px; }\n\ndt,\ndd {\n  line-height: 1.428571429; }\n\ndt {\n  font-weight: bold; }\n\ndd {\n  margin-left: 0; }\n\n.dl-horizontal dd:before, .dl-horizontal dd:after {\n  content: \" \";\n  display: table; }\n\n.dl-horizontal dd:after {\n  clear: both; }\n\n@media (min-width: 768px) {\n  .dl-horizontal dt {\n    float: left;\n    width: 160px;\n    clear: left;\n    text-align: right;\n    overflow: hidden;\n    text-overflow: ellipsis;\n    white-space: nowrap; }\n  .dl-horizontal dd {\n    margin-left: 180px; } }\n\nabbr[title],\nabbr[data-original-title] {\n  cursor: help;\n  border-bottom: 1px dotted #777777; }\n\n.initialism {\n  font-size: 90%; }\n\nblockquote {\n  padding: 10px 20px;\n  margin: 0 0 20px;\n  font-size: 17.5px;\n  border-left: 5px solid #eeeeee; }\n  blockquote p:last-child,\n  blockquote ul:last-child,\n  blockquote ol:last-child {\n    margin-bottom: 0; }\n  blockquote footer,\n  blockquote small,\n  blockquote .small {\n    display: block;\n    font-size: 80%;\n    line-height: 1.428571429;\n    color: #777777; }\n    blockquote footer:before,\n    blockquote small:before,\n    blockquote .small:before {\n      content: '\\2014 \\00A0'; }\n\n.blockquote-reverse,\nblockquote.pull-right {\n  padding-right: 15px;\n  padding-left: 0;\n  border-right: 5px solid #eeeeee;\n  border-left: 0;\n  text-align: right; }\n  .blockquote-reverse footer:before,\n  .blockquote-reverse small:before,\n  .blockquote-reverse .small:before,\n  blockquote.pull-right footer:before,\n  blockquote.pull-right small:before,\n  blockquote.pull-right .small:before {\n    content: ''; }\n  .blockquote-reverse footer:after,\n  .blockquote-reverse small:after,\n  .blockquote-reverse .small:after,\n  blockquote.pull-right footer:after,\n  blockquote.pull-right small:after,\n  blockquote.pull-right .small:after {\n    content: '\\00A0 \\2014'; }\n\naddress {\n  margin-bottom: 20px;\n  font-style: normal;\n  line-height: 1.428571429; }\n\ncode,\nkbd,\npre,\nsamp {\n  font-family: \"Roboto Mono\", Menlo, Monaco, Consolas, \"Courier New\", monospace; }\n\ncode {\n  padding: 2px 4px;\n  font-size: 90%;\n  color: #4D8CF4;\n  background-color: whitesmoke;\n  border-radius: 4px; }\n\nkbd {\n  padding: 2px 4px;\n  font-size: 90%;\n  color: #fff;\n  background-color: #333;\n  border-radius: 3px;\n  box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.25); }\n  kbd kbd {\n    padding: 0;\n    font-size: 100%;\n    font-weight: bold;\n    box-shadow: none; }\n\npre {\n  display: block;\n  padding: 9.5px;\n  margin: 0 0 10px;\n  font-size: 13px;\n  line-height: 1.428571429;\n  word-break: break-all;\n  word-wrap: break-word;\n  color: #333333;\n  background-color: #f5f5f5;\n  border: 1px solid #ccc;\n  border-radius: 4px; }\n  pre code {\n    padding: 0;\n    font-size: inherit;\n    color: inherit;\n    white-space: pre-wrap;\n    background-color: transparent;\n    border-radius: 0; }\n\n.pre-scrollable {\n  max-height: 340px;\n  overflow-y: scroll; }\n\n.container {\n  margin-right: auto;\n  margin-left: auto;\n  padding-left: 15px;\n  padding-right: 15px; }\n  .container:before, .container:after {\n    content: \" \";\n    display: table; }\n  .container:after {\n    clear: both; }\n  @media (min-width: 768px) {\n    .container {\n      width: 750px; } }\n  @media (min-width: 992px) {\n    .container {\n      width: 970px; } }\n  @media (min-width: 1220px) {\n    .container {\n      width: 1170px; } }\n\n.container-fluid {\n  margin-right: auto;\n  margin-left: auto;\n  padding-left: 15px;\n  padding-right: 15px; }\n  .container-fluid:before, .container-fluid:after {\n    content: \" \";\n    display: table; }\n  .container-fluid:after {\n    clear: both; }\n\n.row {\n  margin-left: -15px;\n  margin-right: -15px; }\n  .row:before, .row:after {\n    content: \" \";\n    display: table; }\n  .row:after {\n    clear: both; }\n\n.col-xs-1, .col-sm-1, .col-md-1, .col-lg-1, .col-xs-2, .col-sm-2, .col-md-2, .col-lg-2, .col-xs-3, .col-sm-3, .col-md-3, .col-lg-3, .col-xs-4, .col-sm-4, .col-md-4, .col-lg-4, .col-xs-5, .col-sm-5, .col-md-5, .col-lg-5, .col-xs-6, .col-sm-6, .col-md-6, .col-lg-6, .col-xs-7, .col-sm-7, .col-md-7, .col-lg-7, .col-xs-8, .col-sm-8, .col-md-8, .col-lg-8, .col-xs-9, .col-sm-9, .col-md-9, .col-lg-9, .col-xs-10, .col-sm-10, .col-md-10, .col-lg-10, .col-xs-11, .col-sm-11, .col-md-11, .col-lg-11, .col-xs-12, .col-sm-12, .col-md-12, .col-lg-12 {\n  position: relative;\n  min-height: 1px;\n  padding-left: 15px;\n  padding-right: 15px; }\n\n.col-xs-1, .col-xs-2, .col-xs-3, .col-xs-4, .col-xs-5, .col-xs-6, .col-xs-7, .col-xs-8, .col-xs-9, .col-xs-10, .col-xs-11, .col-xs-12 {\n  float: left; }\n\n.col-xs-1 {\n  width: 8.3333333333%; }\n\n.col-xs-2 {\n  width: 16.6666666667%; }\n\n.col-xs-3 {\n  width: 25%; }\n\n.col-xs-4 {\n  width: 33.3333333333%; }\n\n.col-xs-5 {\n  width: 41.6666666667%; }\n\n.col-xs-6 {\n  width: 50%; }\n\n.col-xs-7 {\n  width: 58.3333333333%; }\n\n.col-xs-8 {\n  width: 66.6666666667%; }\n\n.col-xs-9 {\n  width: 75%; }\n\n.col-xs-10 {\n  width: 83.3333333333%; }\n\n.col-xs-11 {\n  width: 91.6666666667%; }\n\n.col-xs-12 {\n  width: 100%; }\n\n.col-xs-pull-0 {\n  right: auto; }\n\n.col-xs-pull-1 {\n  right: 8.3333333333%; }\n\n.col-xs-pull-2 {\n  right: 16.6666666667%; }\n\n.col-xs-pull-3 {\n  right: 25%; }\n\n.col-xs-pull-4 {\n  right: 33.3333333333%; }\n\n.col-xs-pull-5 {\n  right: 41.6666666667%; }\n\n.col-xs-pull-6 {\n  right: 50%; }\n\n.col-xs-pull-7 {\n  right: 58.3333333333%; }\n\n.col-xs-pull-8 {\n  right: 66.6666666667%; }\n\n.col-xs-pull-9 {\n  right: 75%; }\n\n.col-xs-pull-10 {\n  right: 83.3333333333%; }\n\n.col-xs-pull-11 {\n  right: 91.6666666667%; }\n\n.col-xs-pull-12 {\n  right: 100%; }\n\n.col-xs-push-0 {\n  left: auto; }\n\n.col-xs-push-1 {\n  left: 8.3333333333%; }\n\n.col-xs-push-2 {\n  left: 16.6666666667%; }\n\n.col-xs-push-3 {\n  left: 25%; }\n\n.col-xs-push-4 {\n  left: 33.3333333333%; }\n\n.col-xs-push-5 {\n  left: 41.6666666667%; }\n\n.col-xs-push-6 {\n  left: 50%; }\n\n.col-xs-push-7 {\n  left: 58.3333333333%; }\n\n.col-xs-push-8 {\n  left: 66.6666666667%; }\n\n.col-xs-push-9 {\n  left: 75%; }\n\n.col-xs-push-10 {\n  left: 83.3333333333%; }\n\n.col-xs-push-11 {\n  left: 91.6666666667%; }\n\n.col-xs-push-12 {\n  left: 100%; }\n\n.col-xs-offset-0 {\n  margin-left: 0%; }\n\n.col-xs-offset-1 {\n  margin-left: 8.3333333333%; }\n\n.col-xs-offset-2 {\n  margin-left: 16.6666666667%; }\n\n.col-xs-offset-3 {\n  margin-left: 25%; }\n\n.col-xs-offset-4 {\n  margin-left: 33.3333333333%; }\n\n.col-xs-offset-5 {\n  margin-left: 41.6666666667%; }\n\n.col-xs-offset-6 {\n  margin-left: 50%; }\n\n.col-xs-offset-7 {\n  margin-left: 58.3333333333%; }\n\n.col-xs-offset-8 {\n  margin-left: 66.6666666667%; }\n\n.col-xs-offset-9 {\n  margin-left: 75%; }\n\n.col-xs-offset-10 {\n  margin-left: 83.3333333333%; }\n\n.col-xs-offset-11 {\n  margin-left: 91.6666666667%; }\n\n.col-xs-offset-12 {\n  margin-left: 100%; }\n\n@media (min-width: 768px) {\n  .col-sm-1, .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-10, .col-sm-11, .col-sm-12 {\n    float: left; }\n  .col-sm-1 {\n    width: 8.3333333333%; }\n  .col-sm-2 {\n    width: 16.6666666667%; }\n  .col-sm-3 {\n    width: 25%; }\n  .col-sm-4 {\n    width: 33.3333333333%; }\n  .col-sm-5 {\n    width: 41.6666666667%; }\n  .col-sm-6 {\n    width: 50%; }\n  .col-sm-7 {\n    width: 58.3333333333%; }\n  .col-sm-8 {\n    width: 66.6666666667%; }\n  .col-sm-9 {\n    width: 75%; }\n  .col-sm-10 {\n    width: 83.3333333333%; }\n  .col-sm-11 {\n    width: 91.6666666667%; }\n  .col-sm-12 {\n    width: 100%; }\n  .col-sm-pull-0 {\n    right: auto; }\n  .col-sm-pull-1 {\n    right: 8.3333333333%; }\n  .col-sm-pull-2 {\n    right: 16.6666666667%; }\n  .col-sm-pull-3 {\n    right: 25%; }\n  .col-sm-pull-4 {\n    right: 33.3333333333%; }\n  .col-sm-pull-5 {\n    right: 41.6666666667%; }\n  .col-sm-pull-6 {\n    right: 50%; }\n  .col-sm-pull-7 {\n    right: 58.3333333333%; }\n  .col-sm-pull-8 {\n    right: 66.6666666667%; }\n  .col-sm-pull-9 {\n    right: 75%; }\n  .col-sm-pull-10 {\n    right: 83.3333333333%; }\n  .col-sm-pull-11 {\n    right: 91.6666666667%; }\n  .col-sm-pull-12 {\n    right: 100%; }\n  .col-sm-push-0 {\n    left: auto; }\n  .col-sm-push-1 {\n    left: 8.3333333333%; }\n  .col-sm-push-2 {\n    left: 16.6666666667%; }\n  .col-sm-push-3 {\n    left: 25%; }\n  .col-sm-push-4 {\n    left: 33.3333333333%; }\n  .col-sm-push-5 {\n    left: 41.6666666667%; }\n  .col-sm-push-6 {\n    left: 50%; }\n  .col-sm-push-7 {\n    left: 58.3333333333%; }\n  .col-sm-push-8 {\n    left: 66.6666666667%; }\n  .col-sm-push-9 {\n    left: 75%; }\n  .col-sm-push-10 {\n    left: 83.3333333333%; }\n  .col-sm-push-11 {\n    left: 91.6666666667%; }\n  .col-sm-push-12 {\n    left: 100%; }\n  .col-sm-offset-0 {\n    margin-left: 0%; }\n  .col-sm-offset-1 {\n    margin-left: 8.3333333333%; }\n  .col-sm-offset-2 {\n    margin-left: 16.6666666667%; }\n  .col-sm-offset-3 {\n    margin-left: 25%; }\n  .col-sm-offset-4 {\n    margin-left: 33.3333333333%; }\n  .col-sm-offset-5 {\n    margin-left: 41.6666666667%; }\n  .col-sm-offset-6 {\n    margin-left: 50%; }\n  .col-sm-offset-7 {\n    margin-left: 58.3333333333%; }\n  .col-sm-offset-8 {\n    margin-left: 66.6666666667%; }\n  .col-sm-offset-9 {\n    margin-left: 75%; }\n  .col-sm-offset-10 {\n    margin-left: 83.3333333333%; }\n  .col-sm-offset-11 {\n    margin-left: 91.6666666667%; }\n  .col-sm-offset-12 {\n    margin-left: 100%; } }\n\n@media (min-width: 992px) {\n  .col-md-1, .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-10, .col-md-11, .col-md-12 {\n    float: left; }\n  .col-md-1 {\n    width: 8.3333333333%; }\n  .col-md-2 {\n    width: 16.6666666667%; }\n  .col-md-3 {\n    width: 25%; }\n  .col-md-4 {\n    width: 33.3333333333%; }\n  .col-md-5 {\n    width: 41.6666666667%; }\n  .col-md-6 {\n    width: 50%; }\n  .col-md-7 {\n    width: 58.3333333333%; }\n  .col-md-8 {\n    width: 66.6666666667%; }\n  .col-md-9 {\n    width: 75%; }\n  .col-md-10 {\n    width: 83.3333333333%; }\n  .col-md-11 {\n    width: 91.6666666667%; }\n  .col-md-12 {\n    width: 100%; }\n  .col-md-pull-0 {\n    right: auto; }\n  .col-md-pull-1 {\n    right: 8.3333333333%; }\n  .col-md-pull-2 {\n    right: 16.6666666667%; }\n  .col-md-pull-3 {\n    right: 25%; }\n  .col-md-pull-4 {\n    right: 33.3333333333%; }\n  .col-md-pull-5 {\n    right: 41.6666666667%; }\n  .col-md-pull-6 {\n    right: 50%; }\n  .col-md-pull-7 {\n    right: 58.3333333333%; }\n  .col-md-pull-8 {\n    right: 66.6666666667%; }\n  .col-md-pull-9 {\n    right: 75%; }\n  .col-md-pull-10 {\n    right: 83.3333333333%; }\n  .col-md-pull-11 {\n    right: 91.6666666667%; }\n  .col-md-pull-12 {\n    right: 100%; }\n  .col-md-push-0 {\n    left: auto; }\n  .col-md-push-1 {\n    left: 8.3333333333%; }\n  .col-md-push-2 {\n    left: 16.6666666667%; }\n  .col-md-push-3 {\n    left: 25%; }\n  .col-md-push-4 {\n    left: 33.3333333333%; }\n  .col-md-push-5 {\n    left: 41.6666666667%; }\n  .col-md-push-6 {\n    left: 50%; }\n  .col-md-push-7 {\n    left: 58.3333333333%; }\n  .col-md-push-8 {\n    left: 66.6666666667%; }\n  .col-md-push-9 {\n    left: 75%; }\n  .col-md-push-10 {\n    left: 83.3333333333%; }\n  .col-md-push-11 {\n    left: 91.6666666667%; }\n  .col-md-push-12 {\n    left: 100%; }\n  .col-md-offset-0 {\n    margin-left: 0%; }\n  .col-md-offset-1 {\n    margin-left: 8.3333333333%; }\n  .col-md-offset-2 {\n    margin-left: 16.6666666667%; }\n  .col-md-offset-3 {\n    margin-left: 25%; }\n  .col-md-offset-4 {\n    margin-left: 33.3333333333%; }\n  .col-md-offset-5 {\n    margin-left: 41.6666666667%; }\n  .col-md-offset-6 {\n    margin-left: 50%; }\n  .col-md-offset-7 {\n    margin-left: 58.3333333333%; }\n  .col-md-offset-8 {\n    margin-left: 66.6666666667%; }\n  .col-md-offset-9 {\n    margin-left: 75%; }\n  .col-md-offset-10 {\n    margin-left: 83.3333333333%; }\n  .col-md-offset-11 {\n    margin-left: 91.6666666667%; }\n  .col-md-offset-12 {\n    margin-left: 100%; } }\n\n@media (min-width: 1220px) {\n  .col-lg-1, .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-10, .col-lg-11, .col-lg-12 {\n    float: left; }\n  .col-lg-1 {\n    width: 8.3333333333%; }\n  .col-lg-2 {\n    width: 16.6666666667%; }\n  .col-lg-3 {\n    width: 25%; }\n  .col-lg-4 {\n    width: 33.3333333333%; }\n  .col-lg-5 {\n    width: 41.6666666667%; }\n  .col-lg-6 {\n    width: 50%; }\n  .col-lg-7 {\n    width: 58.3333333333%; }\n  .col-lg-8 {\n    width: 66.6666666667%; }\n  .col-lg-9 {\n    width: 75%; }\n  .col-lg-10 {\n    width: 83.3333333333%; }\n  .col-lg-11 {\n    width: 91.6666666667%; }\n  .col-lg-12 {\n    width: 100%; }\n  .col-lg-pull-0 {\n    right: auto; }\n  .col-lg-pull-1 {\n    right: 8.3333333333%; }\n  .col-lg-pull-2 {\n    right: 16.6666666667%; }\n  .col-lg-pull-3 {\n    right: 25%; }\n  .col-lg-pull-4 {\n    right: 33.3333333333%; }\n  .col-lg-pull-5 {\n    right: 41.6666666667%; }\n  .col-lg-pull-6 {\n    right: 50%; }\n  .col-lg-pull-7 {\n    right: 58.3333333333%; }\n  .col-lg-pull-8 {\n    right: 66.6666666667%; }\n  .col-lg-pull-9 {\n    right: 75%; }\n  .col-lg-pull-10 {\n    right: 83.3333333333%; }\n  .col-lg-pull-11 {\n    right: 91.6666666667%; }\n  .col-lg-pull-12 {\n    right: 100%; }\n  .col-lg-push-0 {\n    left: auto; }\n  .col-lg-push-1 {\n    left: 8.3333333333%; }\n  .col-lg-push-2 {\n    left: 16.6666666667%; }\n  .col-lg-push-3 {\n    left: 25%; }\n  .col-lg-push-4 {\n    left: 33.3333333333%; }\n  .col-lg-push-5 {\n    left: 41.6666666667%; }\n  .col-lg-push-6 {\n    left: 50%; }\n  .col-lg-push-7 {\n    left: 58.3333333333%; }\n  .col-lg-push-8 {\n    left: 66.6666666667%; }\n  .col-lg-push-9 {\n    left: 75%; }\n  .col-lg-push-10 {\n    left: 83.3333333333%; }\n  .col-lg-push-11 {\n    left: 91.6666666667%; }\n  .col-lg-push-12 {\n    left: 100%; }\n  .col-lg-offset-0 {\n    margin-left: 0%; }\n  .col-lg-offset-1 {\n    margin-left: 8.3333333333%; }\n  .col-lg-offset-2 {\n    margin-left: 16.6666666667%; }\n  .col-lg-offset-3 {\n    margin-left: 25%; }\n  .col-lg-offset-4 {\n    margin-left: 33.3333333333%; }\n  .col-lg-offset-5 {\n    margin-left: 41.6666666667%; }\n  .col-lg-offset-6 {\n    margin-left: 50%; }\n  .col-lg-offset-7 {\n    margin-left: 58.3333333333%; }\n  .col-lg-offset-8 {\n    margin-left: 66.6666666667%; }\n  .col-lg-offset-9 {\n    margin-left: 75%; }\n  .col-lg-offset-10 {\n    margin-left: 83.3333333333%; }\n  .col-lg-offset-11 {\n    margin-left: 91.6666666667%; }\n  .col-lg-offset-12 {\n    margin-left: 100%; } }\n\ntable {\n  background-color: transparent; }\n\ncaption {\n  padding-top: 8px;\n  padding-bottom: 8px;\n  color: #777777;\n  text-align: left; }\n\nth {\n  text-align: left; }\n\ntable, .table {\n  width: 100%;\n  max-width: 100%;\n  margin-bottom: 20px; }\n  table > thead > tr > th,\n  table > thead > tr > td,\n  table > tbody > tr > th,\n  table > tbody > tr > td,\n  table > tfoot > tr > th,\n  table > tfoot > tr > td, .table > thead > tr > th,\n  .table > thead > tr > td,\n  .table > tbody > tr > th,\n  .table > tbody > tr > td,\n  .table > tfoot > tr > th,\n  .table > tfoot > tr > td {\n    padding: 8px;\n    line-height: 1.428571429;\n    vertical-align: top;\n    border-top: 1px solid #ddd; }\n  table > thead > tr > th, .table > thead > tr > th {\n    vertical-align: bottom;\n    border-bottom: 2px solid #ddd; }\n  table > caption + thead > tr:first-child > th,\n  table > caption + thead > tr:first-child > td,\n  table > colgroup + thead > tr:first-child > th,\n  table > colgroup + thead > tr:first-child > td,\n  table > thead:first-child > tr:first-child > th,\n  table > thead:first-child > tr:first-child > td, .table > caption + thead > tr:first-child > th,\n  .table > caption + thead > tr:first-child > td,\n  .table > colgroup + thead > tr:first-child > th,\n  .table > colgroup + thead > tr:first-child > td,\n  .table > thead:first-child > tr:first-child > th,\n  .table > thead:first-child > tr:first-child > td {\n    border-top: 0; }\n  table > tbody + tbody, .table > tbody + tbody {\n    border-top: 2px solid #ddd; }\n  table .table, .table .table {\n    background-color: #fff; }\n\n.table-condensed > thead > tr > th,\n.table-condensed > thead > tr > td,\n.table-condensed > tbody > tr > th,\n.table-condensed > tbody > tr > td,\n.table-condensed > tfoot > tr > th,\n.table-condensed > tfoot > tr > td {\n  padding: 5px; }\n\n.table-bordered {\n  border: 1px solid #ddd; }\n  .table-bordered > thead > tr > th,\n  .table-bordered > thead > tr > td,\n  .table-bordered > tbody > tr > th,\n  .table-bordered > tbody > tr > td,\n  .table-bordered > tfoot > tr > th,\n  .table-bordered > tfoot > tr > td {\n    border: 1px solid #ddd; }\n  .table-bordered > thead > tr > th,\n  .table-bordered > thead > tr > td {\n    border-bottom-width: 2px; }\n\n.table-striped > tbody > tr:nth-of-type(odd) {\n  background-color: #f9f9f9; }\n\n.table-hover > tbody > tr:hover {\n  background-color: #f5f5f5; }\n\ntable col[class*=\"col-\"] {\n  position: static;\n  float: none;\n  display: table-column; }\n\ntable td[class*=\"col-\"],\ntable th[class*=\"col-\"] {\n  position: static;\n  float: none;\n  display: table-cell; }\n\n.table > thead > tr > td.active,\n.table > thead > tr > th.active,\n.table > thead > tr.active > td,\n.table > thead > tr.active > th,\n.table > tbody > tr > td.active,\n.table > tbody > tr > th.active,\n.table > tbody > tr.active > td,\n.table > tbody > tr.active > th,\n.table > tfoot > tr > td.active,\n.table > tfoot > tr > th.active,\n.table > tfoot > tr.active > td,\n.table > tfoot > tr.active > th {\n  background-color: #f5f5f5; }\n\n.table-hover > tbody > tr > td.active:hover,\n.table-hover > tbody > tr > th.active:hover,\n.table-hover > tbody > tr.active:hover > td,\n.table-hover > tbody > tr:hover > .active,\n.table-hover > tbody > tr.active:hover > th {\n  background-color: #e8e8e8; }\n\n.table > thead > tr > td.success,\n.table > thead > tr > th.success,\n.table > thead > tr.success > td,\n.table > thead > tr.success > th,\n.table > tbody > tr > td.success,\n.table > tbody > tr > th.success,\n.table > tbody > tr.success > td,\n.table > tbody > tr.success > th,\n.table > tfoot > tr > td.success,\n.table > tfoot > tr > th.success,\n.table > tfoot > tr.success > td,\n.table > tfoot > tr.success > th {\n  background-color: #dff0d8; }\n\n.table-hover > tbody > tr > td.success:hover,\n.table-hover > tbody > tr > th.success:hover,\n.table-hover > tbody > tr.success:hover > td,\n.table-hover > tbody > tr:hover > .success,\n.table-hover > tbody > tr.success:hover > th {\n  background-color: #d0e9c6; }\n\n.table > thead > tr > td.info,\n.table > thead > tr > th.info,\n.table > thead > tr.info > td,\n.table > thead > tr.info > th,\n.table > tbody > tr > td.info,\n.table > tbody > tr > th.info,\n.table > tbody > tr.info > td,\n.table > tbody > tr.info > th,\n.table > tfoot > tr > td.info,\n.table > tfoot > tr > th.info,\n.table > tfoot > tr.info > td,\n.table > tfoot > tr.info > th {\n  background-color: #d9edf7; }\n\n.table-hover > tbody > tr > td.info:hover,\n.table-hover > tbody > tr > th.info:hover,\n.table-hover > tbody > tr.info:hover > td,\n.table-hover > tbody > tr:hover > .info,\n.table-hover > tbody > tr.info:hover > th {\n  background-color: #c4e3f3; }\n\n.table > thead > tr > td.warning,\n.table > thead > tr > th.warning,\n.table > thead > tr.warning > td,\n.table > thead > tr.warning > th,\n.table > tbody > tr > td.warning,\n.table > tbody > tr > th.warning,\n.table > tbody > tr.warning > td,\n.table > tbody > tr.warning > th,\n.table > tfoot > tr > td.warning,\n.table > tfoot > tr > th.warning,\n.table > tfoot > tr.warning > td,\n.table > tfoot > tr.warning > th {\n  background-color: #fcf8e3; }\n\n.table-hover > tbody > tr > td.warning:hover,\n.table-hover > tbody > tr > th.warning:hover,\n.table-hover > tbody > tr.warning:hover > td,\n.table-hover > tbody > tr:hover > .warning,\n.table-hover > tbody > tr.warning:hover > th {\n  background-color: #faf2cc; }\n\n.table > thead > tr > td.danger,\n.table > thead > tr > th.danger,\n.table > thead > tr.danger > td,\n.table > thead > tr.danger > th,\n.table > tbody > tr > td.danger,\n.table > tbody > tr > th.danger,\n.table > tbody > tr.danger > td,\n.table > tbody > tr.danger > th,\n.table > tfoot > tr > td.danger,\n.table > tfoot > tr > th.danger,\n.table > tfoot > tr.danger > td,\n.table > tfoot > tr.danger > th {\n  background-color: #f2dede; }\n\n.table-hover > tbody > tr > td.danger:hover,\n.table-hover > tbody > tr > th.danger:hover,\n.table-hover > tbody > tr.danger:hover > td,\n.table-hover > tbody > tr:hover > .danger,\n.table-hover > tbody > tr.danger:hover > th {\n  background-color: #ebcccc; }\n\n.table-responsive {\n  overflow-x: auto;\n  min-height: 0.01%; }\n  @media screen and (max-width: 767px) {\n    .table-responsive {\n      width: 100%;\n      margin-bottom: 15px;\n      overflow-y: hidden;\n      -ms-overflow-style: -ms-autohiding-scrollbar;\n      border: 1px solid #ddd; }\n      .table-responsive > .table {\n        margin-bottom: 0; }\n        .table-responsive > .table > thead > tr > th,\n        .table-responsive > .table > thead > tr > td,\n        .table-responsive > .table > tbody > tr > th,\n        .table-responsive > .table > tbody > tr > td,\n        .table-responsive > .table > tfoot > tr > th,\n        .table-responsive > .table > tfoot > tr > td {\n          white-space: nowrap; }\n      .table-responsive > .table-bordered {\n        border: 0; }\n        .table-responsive > .table-bordered > thead > tr > th:first-child,\n        .table-responsive > .table-bordered > thead > tr > td:first-child,\n        .table-responsive > .table-bordered > tbody > tr > th:first-child,\n        .table-responsive > .table-bordered > tbody > tr > td:first-child,\n        .table-responsive > .table-bordered > tfoot > tr > th:first-child,\n        .table-responsive > .table-bordered > tfoot > tr > td:first-child {\n          border-left: 0; }\n        .table-responsive > .table-bordered > thead > tr > th:last-child,\n        .table-responsive > .table-bordered > thead > tr > td:last-child,\n        .table-responsive > .table-bordered > tbody > tr > th:last-child,\n        .table-responsive > .table-bordered > tbody > tr > td:last-child,\n        .table-responsive > .table-bordered > tfoot > tr > th:last-child,\n        .table-responsive > .table-bordered > tfoot > tr > td:last-child {\n          border-right: 0; }\n        .table-responsive > .table-bordered > tbody > tr:last-child > th,\n        .table-responsive > .table-bordered > tbody > tr:last-child > td,\n        .table-responsive > .table-bordered > tfoot > tr:last-child > th,\n        .table-responsive > .table-bordered > tfoot > tr:last-child > td {\n          border-bottom: 0; } }\n\nfieldset {\n  padding: 0;\n  margin: 0;\n  border: 0;\n  min-width: 0; }\n\nlegend {\n  display: block;\n  width: 100%;\n  padding: 0;\n  margin-bottom: 20px;\n  font-size: 21px;\n  line-height: inherit;\n  color: #333333;\n  border: 0;\n  border-bottom: 1px solid #e5e5e5; }\n\nlabel {\n  display: inline-block;\n  max-width: 100%;\n  margin-bottom: 5px;\n  font-weight: 600; }\n\ninput[type=\"search\"] {\n  box-sizing: border-box; }\n\ninput[type=\"radio\"],\ninput[type=\"checkbox\"] {\n  margin: 4px 0 0;\n  margin-top: 1px \\9;\n  line-height: normal; }\n\ninput[type=\"file\"] {\n  display: block; }\n\ninput[type=\"range\"] {\n  display: block;\n  width: 100%; }\n\nselect[multiple],\nselect[size] {\n  height: auto; }\n\ninput[type=\"file\"]:focus,\ninput[type=\"radio\"]:focus,\ninput[type=\"checkbox\"]:focus {\n  outline: thin dotted;\n  outline: 5px auto -webkit-focus-ring-color;\n  outline-offset: -2px; }\n\noutput {\n  display: block;\n  padding-top: 7px;\n  font-size: 14px;\n  line-height: 1.428571429;\n  color: #555555; }\n\n.form-control {\n  display: block;\n  width: 100%;\n  height: 34px;\n  padding: 6px 12px;\n  font-size: 14px;\n  line-height: 1.428571429;\n  color: #555555;\n  background-color: #fff;\n  background-image: none;\n  border: 1px solid #ccc;\n  border-radius: 4px;\n  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n  transition: border-color ease-in-out 0.15s, box-shadow ease-in-out 0.15s; }\n  .form-control:focus {\n    border-color: #66afe9;\n    outline: 0;\n    box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(102, 175, 233, 0.6); }\n  .form-control::-moz-placeholder {\n    color: #999;\n    opacity: 1; }\n  .form-control:-ms-input-placeholder {\n    color: #999; }\n  .form-control::-webkit-input-placeholder {\n    color: #999; }\n  .form-control[disabled], .form-control[readonly],\n  fieldset[disabled] .form-control {\n    background-color: #eeeeee;\n    opacity: 1; }\n  .form-control[disabled],\n  fieldset[disabled] .form-control {\n    cursor: not-allowed; }\n\ntextarea.form-control {\n  height: auto; }\n\ninput[type=\"search\"] {\n  -webkit-appearance: none; }\n\n@media screen and (-webkit-min-device-pixel-ratio: 0) {\n  input[type=\"date\"],\n  input[type=\"time\"],\n  input[type=\"datetime-local\"],\n  input[type=\"month\"] {\n    line-height: 34px; }\n    input[type=\"date\"].input-sm, .input-group-sm > input.form-control[type=\"date\"],\n    .input-group-sm > input.input-group-addon[type=\"date\"],\n    .input-group-sm > .input-group-btn > input.btn[type=\"date\"],\n    .input-group-sm input[type=\"date\"],\n    input[type=\"time\"].input-sm,\n    .input-group-sm > input.form-control[type=\"time\"],\n    .input-group-sm > input.input-group-addon[type=\"time\"],\n    .input-group-sm > .input-group-btn > input.btn[type=\"time\"],\n    .input-group-sm\n    input[type=\"time\"],\n    input[type=\"datetime-local\"].input-sm,\n    .input-group-sm > input.form-control[type=\"datetime-local\"],\n    .input-group-sm > input.input-group-addon[type=\"datetime-local\"],\n    .input-group-sm > .input-group-btn > input.btn[type=\"datetime-local\"],\n    .input-group-sm\n    input[type=\"datetime-local\"],\n    input[type=\"month\"].input-sm,\n    .input-group-sm > input.form-control[type=\"month\"],\n    .input-group-sm > input.input-group-addon[type=\"month\"],\n    .input-group-sm > .input-group-btn > input.btn[type=\"month\"],\n    .input-group-sm\n    input[type=\"month\"] {\n      line-height: 30px; }\n    input[type=\"date\"].input-lg, .input-group-lg > input.form-control[type=\"date\"],\n    .input-group-lg > input.input-group-addon[type=\"date\"],\n    .input-group-lg > .input-group-btn > input.btn[type=\"date\"],\n    .input-group-lg input[type=\"date\"],\n    input[type=\"time\"].input-lg,\n    .input-group-lg > input.form-control[type=\"time\"],\n    .input-group-lg > input.input-group-addon[type=\"time\"],\n    .input-group-lg > .input-group-btn > input.btn[type=\"time\"],\n    .input-group-lg\n    input[type=\"time\"],\n    input[type=\"datetime-local\"].input-lg,\n    .input-group-lg > input.form-control[type=\"datetime-local\"],\n    .input-group-lg > input.input-group-addon[type=\"datetime-local\"],\n    .input-group-lg > .input-group-btn > input.btn[type=\"datetime-local\"],\n    .input-group-lg\n    input[type=\"datetime-local\"],\n    input[type=\"month\"].input-lg,\n    .input-group-lg > input.form-control[type=\"month\"],\n    .input-group-lg > input.input-group-addon[type=\"month\"],\n    .input-group-lg > .input-group-btn > input.btn[type=\"month\"],\n    .input-group-lg\n    input[type=\"month\"] {\n      line-height: 46px; } }\n\n.form-group {\n  margin-bottom: 15px; }\n\n.radio,\n.checkbox {\n  position: relative;\n  display: block;\n  margin-top: 10px;\n  margin-bottom: 10px; }\n  .radio label,\n  .checkbox label {\n    min-height: 20px;\n    padding-left: 20px;\n    margin-bottom: 0;\n    font-weight: normal;\n    cursor: pointer; }\n\n.radio input[type=\"radio\"],\n.radio-inline input[type=\"radio\"],\n.checkbox input[type=\"checkbox\"],\n.checkbox-inline input[type=\"checkbox\"] {\n  position: absolute;\n  margin-left: -20px;\n  margin-top: 4px \\9; }\n\n.radio + .radio,\n.checkbox + .checkbox {\n  margin-top: -5px; }\n\n.radio-inline,\n.checkbox-inline {\n  position: relative;\n  display: inline-block;\n  padding-left: 20px;\n  margin-bottom: 0;\n  vertical-align: middle;\n  font-weight: normal;\n  cursor: pointer; }\n\n.radio-inline + .radio-inline,\n.checkbox-inline + .checkbox-inline {\n  margin-top: 0;\n  margin-left: 10px; }\n\ninput[type=\"radio\"][disabled], input[type=\"radio\"].disabled,\nfieldset[disabled] input[type=\"radio\"],\ninput[type=\"checkbox\"][disabled],\ninput[type=\"checkbox\"].disabled,\nfieldset[disabled]\ninput[type=\"checkbox\"] {\n  cursor: not-allowed; }\n\n.radio-inline.disabled,\nfieldset[disabled] .radio-inline,\n.checkbox-inline.disabled,\nfieldset[disabled]\n.checkbox-inline {\n  cursor: not-allowed; }\n\n.radio.disabled label,\nfieldset[disabled] .radio label,\n.checkbox.disabled label,\nfieldset[disabled]\n.checkbox label {\n  cursor: not-allowed; }\n\n.form-control-static {\n  padding-top: 7px;\n  padding-bottom: 7px;\n  margin-bottom: 0;\n  min-height: 34px; }\n  .form-control-static.input-lg, .input-group-lg > .form-control-static.form-control,\n  .input-group-lg > .form-control-static.input-group-addon,\n  .input-group-lg > .input-group-btn > .form-control-static.btn, .form-control-static.input-sm, .input-group-sm > .form-control-static.form-control,\n  .input-group-sm > .form-control-static.input-group-addon,\n  .input-group-sm > .input-group-btn > .form-control-static.btn {\n    padding-left: 0;\n    padding-right: 0; }\n\n.input-sm, .input-group-sm > .form-control,\n.input-group-sm > .input-group-addon,\n.input-group-sm > .input-group-btn > .btn {\n  height: 30px;\n  padding: 5px 10px;\n  font-size: 12px;\n  line-height: 1.5;\n  border-radius: 3px; }\n\nselect.input-sm, .input-group-sm > select.form-control,\n.input-group-sm > select.input-group-addon,\n.input-group-sm > .input-group-btn > select.btn {\n  height: 30px;\n  line-height: 30px; }\n\ntextarea.input-sm, .input-group-sm > textarea.form-control,\n.input-group-sm > textarea.input-group-addon,\n.input-group-sm > .input-group-btn > textarea.btn,\nselect[multiple].input-sm,\n.input-group-sm > select.form-control[multiple],\n.input-group-sm > select.input-group-addon[multiple],\n.input-group-sm > .input-group-btn > select.btn[multiple] {\n  height: auto; }\n\n.form-group-sm .form-control {\n  height: 30px;\n  padding: 5px 10px;\n  font-size: 12px;\n  line-height: 1.5;\n  border-radius: 3px; }\n\n.form-group-sm select.form-control {\n  height: 30px;\n  line-height: 30px; }\n\n.form-group-sm textarea.form-control,\n.form-group-sm select[multiple].form-control {\n  height: auto; }\n\n.form-group-sm .form-control-static {\n  height: 30px;\n  padding: 5px 10px;\n  font-size: 12px;\n  line-height: 1.5;\n  min-height: 32px; }\n\n.input-lg, .input-group-lg > .form-control,\n.input-group-lg > .input-group-addon,\n.input-group-lg > .input-group-btn > .btn {\n  height: 46px;\n  padding: 10px 16px;\n  font-size: 18px;\n  line-height: 1.3333333;\n  border-radius: 6px; }\n\nselect.input-lg, .input-group-lg > select.form-control,\n.input-group-lg > select.input-group-addon,\n.input-group-lg > .input-group-btn > select.btn {\n  height: 46px;\n  line-height: 46px; }\n\ntextarea.input-lg, .input-group-lg > textarea.form-control,\n.input-group-lg > textarea.input-group-addon,\n.input-group-lg > .input-group-btn > textarea.btn,\nselect[multiple].input-lg,\n.input-group-lg > select.form-control[multiple],\n.input-group-lg > select.input-group-addon[multiple],\n.input-group-lg > .input-group-btn > select.btn[multiple] {\n  height: auto; }\n\n.form-group-lg .form-control {\n  height: 46px;\n  padding: 10px 16px;\n  font-size: 18px;\n  line-height: 1.3333333;\n  border-radius: 6px; }\n\n.form-group-lg select.form-control {\n  height: 46px;\n  line-height: 46px; }\n\n.form-group-lg textarea.form-control,\n.form-group-lg select[multiple].form-control {\n  height: auto; }\n\n.form-group-lg .form-control-static {\n  height: 46px;\n  padding: 10px 16px;\n  font-size: 18px;\n  line-height: 1.3333333;\n  min-height: 38px; }\n\n.has-feedback {\n  position: relative; }\n  .has-feedback .form-control {\n    padding-right: 42.5px; }\n\n.form-control-feedback {\n  position: absolute;\n  top: 0;\n  right: 0;\n  z-index: 2;\n  display: block;\n  width: 34px;\n  height: 34px;\n  line-height: 34px;\n  text-align: center;\n  pointer-events: none; }\n\n.input-lg + .form-control-feedback, .input-group-lg > .form-control + .form-control-feedback, .input-group-lg > .input-group-addon + .form-control-feedback, .input-group-lg > .input-group-btn > .btn + .form-control-feedback {\n  width: 46px;\n  height: 46px;\n  line-height: 46px; }\n\n.input-sm + .form-control-feedback, .input-group-sm > .form-control + .form-control-feedback, .input-group-sm > .input-group-addon + .form-control-feedback, .input-group-sm > .input-group-btn > .btn + .form-control-feedback {\n  width: 30px;\n  height: 30px;\n  line-height: 30px; }\n\n.has-success .help-block,\n.has-success .control-label,\n.has-success .radio,\n.has-success .checkbox,\n.has-success .radio-inline,\n.has-success .checkbox-inline,\n.has-success.radio label,\n.has-success.checkbox label,\n.has-success.radio-inline label,\n.has-success.checkbox-inline label {\n  color: #3c763d; }\n\n.has-success .form-control {\n  border-color: #3c763d;\n  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); }\n  .has-success .form-control:focus {\n    border-color: #2b542c;\n    box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #67b168; }\n\n.has-success .input-group-addon {\n  color: #3c763d;\n  border-color: #3c763d;\n  background-color: #dff0d8; }\n\n.has-success .form-control-feedback {\n  color: #3c763d; }\n\n.has-warning .help-block,\n.has-warning .control-label,\n.has-warning .radio,\n.has-warning .checkbox,\n.has-warning .radio-inline,\n.has-warning .checkbox-inline,\n.has-warning.radio label,\n.has-warning.checkbox label,\n.has-warning.radio-inline label,\n.has-warning.checkbox-inline label {\n  color: #8a6d3b; }\n\n.has-warning .form-control {\n  border-color: #8a6d3b;\n  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); }\n  .has-warning .form-control:focus {\n    border-color: #66512c;\n    box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #c0a16b; }\n\n.has-warning .input-group-addon {\n  color: #8a6d3b;\n  border-color: #8a6d3b;\n  background-color: #fcf8e3; }\n\n.has-warning .form-control-feedback {\n  color: #8a6d3b; }\n\n.has-error .help-block,\n.has-error .control-label,\n.has-error .radio,\n.has-error .checkbox,\n.has-error .radio-inline,\n.has-error .checkbox-inline,\n.has-error.radio label,\n.has-error.checkbox label,\n.has-error.radio-inline label,\n.has-error.checkbox-inline label {\n  color: #a94442; }\n\n.has-error .form-control {\n  border-color: #a94442;\n  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); }\n  .has-error .form-control:focus {\n    border-color: #843534;\n    box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ce8483; }\n\n.has-error .input-group-addon {\n  color: #a94442;\n  border-color: #a94442;\n  background-color: #f2dede; }\n\n.has-error .form-control-feedback {\n  color: #a94442; }\n\n.has-feedback label ~ .form-control-feedback {\n  top: 25px; }\n\n.has-feedback label.sr-only ~ .form-control-feedback {\n  top: 0; }\n\n.help-block {\n  display: block;\n  margin-top: 5px;\n  margin-bottom: 10px;\n  color: #737373; }\n\n@media (min-width: 768px) {\n  .form-inline .form-group {\n    display: inline-block;\n    margin-bottom: 0;\n    vertical-align: middle; }\n  .form-inline .form-control {\n    display: inline-block;\n    width: auto;\n    vertical-align: middle; }\n  .form-inline .form-control-static {\n    display: inline-block; }\n  .form-inline .input-group {\n    display: inline-table;\n    vertical-align: middle; }\n    .form-inline .input-group .input-group-addon,\n    .form-inline .input-group .input-group-btn,\n    .form-inline .input-group .form-control {\n      width: auto; }\n  .form-inline .input-group > .form-control {\n    width: 100%; }\n  .form-inline .control-label {\n    margin-bottom: 0;\n    vertical-align: middle; }\n  .form-inline .radio,\n  .form-inline .checkbox {\n    display: inline-block;\n    margin-top: 0;\n    margin-bottom: 0;\n    vertical-align: middle; }\n    .form-inline .radio label,\n    .form-inline .checkbox label {\n      padding-left: 0; }\n  .form-inline .radio input[type=\"radio\"],\n  .form-inline .checkbox input[type=\"checkbox\"] {\n    position: relative;\n    margin-left: 0; }\n  .form-inline .has-feedback .form-control-feedback {\n    top: 0; } }\n\n.form-horizontal .radio,\n.form-horizontal .checkbox,\n.form-horizontal .radio-inline,\n.form-horizontal .checkbox-inline {\n  margin-top: 0;\n  margin-bottom: 0;\n  padding-top: 7px; }\n\n.form-horizontal .radio,\n.form-horizontal .checkbox {\n  min-height: 27px; }\n\n.form-horizontal .form-group {\n  margin-left: -15px;\n  margin-right: -15px; }\n  .form-horizontal .form-group:before, .form-horizontal .form-group:after {\n    content: \" \";\n    display: table; }\n  .form-horizontal .form-group:after {\n    clear: both; }\n\n@media (min-width: 768px) {\n  .form-horizontal .control-label {\n    text-align: right;\n    margin-bottom: 0;\n    padding-top: 7px; } }\n\n.form-horizontal .has-feedback .form-control-feedback {\n  right: 15px; }\n\n@media (min-width: 768px) {\n  .form-horizontal .form-group-lg .control-label {\n    padding-top: 14.333333px; } }\n\n@media (min-width: 768px) {\n  .form-horizontal .form-group-sm .control-label {\n    padding-top: 6px; } }\n\n.btn {\n  display: inline-block;\n  margin-bottom: 0;\n  font-weight: normal;\n  font-family: \"Eina\", \"Helvetica Neue\", Helvetica, sans-serif;\n  text-align: center;\n  vertical-align: middle;\n  -ms-touch-action: manipulation;\n      touch-action: manipulation;\n  cursor: pointer;\n  background-image: none;\n  border: 1px solid transparent;\n  white-space: nowrap;\n  padding: 6px 12px;\n  font-size: 14px;\n  line-height: 1.428571429;\n  border-radius: 4px;\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  -ms-user-select: none;\n  user-select: none; }\n  .btn:focus, .btn.focus, .btn:active:focus, .btn:active.focus, .btn.active:focus, .btn.active.focus {\n    outline: thin dotted;\n    outline: 5px auto -webkit-focus-ring-color;\n    outline-offset: -2px; }\n  .btn:hover, .btn:focus, .btn.focus {\n    color: #333;\n    text-decoration: none; }\n  .btn:active, .btn.active {\n    outline: 0;\n    background-image: none;\n    box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); }\n  .btn.disabled, .btn[disabled],\n  fieldset[disabled] .btn {\n    cursor: not-allowed;\n    pointer-events: none;\n    opacity: 0.65;\n    filter: alpha(opacity=65);\n    box-shadow: none; }\n\n.btn-default {\n  color: #333;\n  background-color: #fff;\n  border-color: #ccc; }\n  .btn-default:hover, .btn-default:focus, .btn-default.focus, .btn-default:active, .btn-default.active,\n  .open > .btn-default.dropdown-toggle {\n    color: #333;\n    background-color: #e6e5e5;\n    border-color: #adadad; }\n  .btn-default:active, .btn-default.active,\n  .open > .btn-default.dropdown-toggle {\n    background-image: none; }\n  .btn-default.disabled, .btn-default.disabled:hover, .btn-default.disabled:focus, .btn-default.disabled.focus, .btn-default.disabled:active, .btn-default.disabled.active, .btn-default[disabled], .btn-default[disabled]:hover, .btn-default[disabled]:focus, .btn-default[disabled].focus, .btn-default[disabled]:active, .btn-default[disabled].active,\n  fieldset[disabled] .btn-default,\n  fieldset[disabled] .btn-default:hover,\n  fieldset[disabled] .btn-default:focus,\n  fieldset[disabled] .btn-default.focus,\n  fieldset[disabled] .btn-default:active,\n  fieldset[disabled] .btn-default.active {\n    background-color: #fff;\n    border-color: #ccc; }\n  .btn-default .badge {\n    color: #fff;\n    background-color: #333; }\n\n.btn-primary {\n  color: #fff;\n  background-color: #337ab7;\n  border-color: #2e6da4; }\n  .btn-primary:hover, .btn-primary:focus, .btn-primary.focus, .btn-primary:active, .btn-primary.active,\n  .open > .btn-primary.dropdown-toggle {\n    color: #fff;\n    background-color: #286090;\n    border-color: #204d74; }\n  .btn-primary:active, .btn-primary.active,\n  .open > .btn-primary.dropdown-toggle {\n    background-image: none; }\n  .btn-primary.disabled, .btn-primary.disabled:hover, .btn-primary.disabled:focus, .btn-primary.disabled.focus, .btn-primary.disabled:active, .btn-primary.disabled.active, .btn-primary[disabled], .btn-primary[disabled]:hover, .btn-primary[disabled]:focus, .btn-primary[disabled].focus, .btn-primary[disabled]:active, .btn-primary[disabled].active,\n  fieldset[disabled] .btn-primary,\n  fieldset[disabled] .btn-primary:hover,\n  fieldset[disabled] .btn-primary:focus,\n  fieldset[disabled] .btn-primary.focus,\n  fieldset[disabled] .btn-primary:active,\n  fieldset[disabled] .btn-primary.active {\n    background-color: #337ab7;\n    border-color: #2e6da4; }\n  .btn-primary .badge {\n    color: #337ab7;\n    background-color: #fff; }\n\n.btn-success {\n  color: #fff;\n  background-color: #5cb85c;\n  border-color: #4cae4c; }\n  .btn-success:hover, .btn-success:focus, .btn-success.focus, .btn-success:active, .btn-success.active,\n  .open > .btn-success.dropdown-toggle {\n    color: #fff;\n    background-color: #449d44;\n    border-color: #398439; }\n  .btn-success:active, .btn-success.active,\n  .open > .btn-success.dropdown-toggle {\n    background-image: none; }\n  .btn-success.disabled, .btn-success.disabled:hover, .btn-success.disabled:focus, .btn-success.disabled.focus, .btn-success.disabled:active, .btn-success.disabled.active, .btn-success[disabled], .btn-success[disabled]:hover, .btn-success[disabled]:focus, .btn-success[disabled].focus, .btn-success[disabled]:active, .btn-success[disabled].active,\n  fieldset[disabled] .btn-success,\n  fieldset[disabled] .btn-success:hover,\n  fieldset[disabled] .btn-success:focus,\n  fieldset[disabled] .btn-success.focus,\n  fieldset[disabled] .btn-success:active,\n  fieldset[disabled] .btn-success.active {\n    background-color: #5cb85c;\n    border-color: #4cae4c; }\n  .btn-success .badge {\n    color: #5cb85c;\n    background-color: #fff; }\n\n.btn-info {\n  color: #fff;\n  background-color: #5bc0de;\n  border-color: #46b8da; }\n  .btn-info:hover, .btn-info:focus, .btn-info.focus, .btn-info:active, .btn-info.active,\n  .open > .btn-info.dropdown-toggle {\n    color: #fff;\n    background-color: #31b0d5;\n    border-color: #269abc; }\n  .btn-info:active, .btn-info.active,\n  .open > .btn-info.dropdown-toggle {\n    background-image: none; }\n  .btn-info.disabled, .btn-info.disabled:hover, .btn-info.disabled:focus, .btn-info.disabled.focus, .btn-info.disabled:active, .btn-info.disabled.active, .btn-info[disabled], .btn-info[disabled]:hover, .btn-info[disabled]:focus, .btn-info[disabled].focus, .btn-info[disabled]:active, .btn-info[disabled].active,\n  fieldset[disabled] .btn-info,\n  fieldset[disabled] .btn-info:hover,\n  fieldset[disabled] .btn-info:focus,\n  fieldset[disabled] .btn-info.focus,\n  fieldset[disabled] .btn-info:active,\n  fieldset[disabled] .btn-info.active {\n    background-color: #5bc0de;\n    border-color: #46b8da; }\n  .btn-info .badge {\n    color: #5bc0de;\n    background-color: #fff; }\n\n.btn-warning {\n  color: #fff;\n  background-color: #f0ad4e;\n  border-color: #eea236; }\n  .btn-warning:hover, .btn-warning:focus, .btn-warning.focus, .btn-warning:active, .btn-warning.active,\n  .open > .btn-warning.dropdown-toggle {\n    color: #fff;\n    background-color: #ec971f;\n    border-color: #d58512; }\n  .btn-warning:active, .btn-warning.active,\n  .open > .btn-warning.dropdown-toggle {\n    background-image: none; }\n  .btn-warning.disabled, .btn-warning.disabled:hover, .btn-warning.disabled:focus, .btn-warning.disabled.focus, .btn-warning.disabled:active, .btn-warning.disabled.active, .btn-warning[disabled], .btn-warning[disabled]:hover, .btn-warning[disabled]:focus, .btn-warning[disabled].focus, .btn-warning[disabled]:active, .btn-warning[disabled].active,\n  fieldset[disabled] .btn-warning,\n  fieldset[disabled] .btn-warning:hover,\n  fieldset[disabled] .btn-warning:focus,\n  fieldset[disabled] .btn-warning.focus,\n  fieldset[disabled] .btn-warning:active,\n  fieldset[disabled] .btn-warning.active {\n    background-color: #f0ad4e;\n    border-color: #eea236; }\n  .btn-warning .badge {\n    color: #f0ad4e;\n    background-color: #fff; }\n\n.btn-danger {\n  color: #fff;\n  background-color: #d9534f;\n  border-color: #d43f3a; }\n  .btn-danger:hover, .btn-danger:focus, .btn-danger.focus, .btn-danger:active, .btn-danger.active,\n  .open > .btn-danger.dropdown-toggle {\n    color: #fff;\n    background-color: #c9302c;\n    border-color: #ac2925; }\n  .btn-danger:active, .btn-danger.active,\n  .open > .btn-danger.dropdown-toggle {\n    background-image: none; }\n  .btn-danger.disabled, .btn-danger.disabled:hover, .btn-danger.disabled:focus, .btn-danger.disabled.focus, .btn-danger.disabled:active, .btn-danger.disabled.active, .btn-danger[disabled], .btn-danger[disabled]:hover, .btn-danger[disabled]:focus, .btn-danger[disabled].focus, .btn-danger[disabled]:active, .btn-danger[disabled].active,\n  fieldset[disabled] .btn-danger,\n  fieldset[disabled] .btn-danger:hover,\n  fieldset[disabled] .btn-danger:focus,\n  fieldset[disabled] .btn-danger.focus,\n  fieldset[disabled] .btn-danger:active,\n  fieldset[disabled] .btn-danger.active {\n    background-color: #d9534f;\n    border-color: #d43f3a; }\n  .btn-danger .badge {\n    color: #d9534f;\n    background-color: #fff; }\n\n.btn-link {\n  color: #337ab7;\n  font-weight: normal;\n  border-radius: 0; }\n  .btn-link, .btn-link:active, .btn-link.active, .btn-link[disabled],\n  fieldset[disabled] .btn-link {\n    background-color: transparent;\n    box-shadow: none; }\n  .btn-link, .btn-link:hover, .btn-link:focus, .btn-link:active {\n    border-color: transparent; }\n  .btn-link:hover, .btn-link:focus {\n    color: #23527c;\n    text-decoration: underline;\n    background-color: transparent; }\n  .btn-link[disabled]:hover, .btn-link[disabled]:focus,\n  fieldset[disabled] .btn-link:hover,\n  fieldset[disabled] .btn-link:focus {\n    color: #777777;\n    text-decoration: none; }\n\n.btn-lg, .btn-group-lg > .btn {\n  padding: 10px 16px;\n  font-size: 18px;\n  line-height: 1.3333333;\n  border-radius: 6px; }\n\n.btn-sm, .btn-group-sm > .btn {\n  padding: 5px 10px;\n  font-size: 12px;\n  line-height: 1.5;\n  border-radius: 3px; }\n\n.btn-xs, .btn-group-xs > .btn {\n  padding: 1px 5px;\n  font-size: 12px;\n  line-height: 1.5;\n  border-radius: 3px; }\n\n.btn-block {\n  display: block;\n  width: 100%; }\n\n.btn-block + .btn-block {\n  margin-top: 5px; }\n\ninput[type=\"submit\"].btn-block,\ninput[type=\"reset\"].btn-block,\ninput[type=\"button\"].btn-block {\n  width: 100%; }\n\n.fade {\n  opacity: 0;\n  transition: opacity 0.15s linear; }\n  .fade.in {\n    opacity: 1; }\n\n.collapse {\n  display: none; }\n  .collapse.in {\n    display: block; }\n\ntr.collapse.in {\n  display: table-row; }\n\ntbody.collapse.in {\n  display: table-row-group; }\n\n.collapsing {\n  position: relative;\n  height: 0;\n  overflow: hidden;\n  transition-property: height, visibility;\n  transition-duration: 0.35s;\n  transition-timing-function: ease; }\n\n.caret {\n  display: inline-block;\n  width: 0;\n  height: 0;\n  margin-left: 2px;\n  vertical-align: middle;\n  border-top: 4px dashed;\n  border-right: 4px solid transparent;\n  border-left: 4px solid transparent; }\n\n.dropup,\n.dropdown {\n  position: relative; }\n\n.dropdown-toggle:focus {\n  outline: 0; }\n\n.dropdown-menu {\n  position: absolute;\n  top: 100%;\n  left: 0;\n  z-index: 1000;\n  display: none;\n  float: left;\n  min-width: 160px;\n  padding: 5px 0;\n  margin: 2px 0 0;\n  list-style: none;\n  font-size: 14px;\n  text-align: left;\n  background-color: #fff;\n  border: 1px solid #ccc;\n  border: 1px solid rgba(0, 0, 0, 0.15);\n  border-radius: 4px;\n  box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175);\n  background-clip: padding-box; }\n  .dropdown-menu.pull-right {\n    right: 0;\n    left: auto; }\n  .dropdown-menu .divider {\n    height: 1px;\n    margin: 9px 0;\n    overflow: hidden;\n    background-color: #e5e5e5; }\n  .dropdown-menu > li > a {\n    display: block;\n    padding: 3px 20px;\n    clear: both;\n    font-weight: normal;\n    line-height: 1.428571429;\n    color: #333333;\n    white-space: nowrap; }\n\n.dropdown-menu > li > a:hover, .dropdown-menu > li > a:focus {\n  text-decoration: none;\n  color: #262626;\n  background-color: #f5f5f5; }\n\n.dropdown-menu > .active > a, .dropdown-menu > .active > a:hover, .dropdown-menu > .active > a:focus {\n  color: #fff;\n  text-decoration: none;\n  outline: 0;\n  background-color: #337ab7; }\n\n.dropdown-menu > .disabled > a, .dropdown-menu > .disabled > a:hover, .dropdown-menu > .disabled > a:focus {\n  color: #777777; }\n\n.dropdown-menu > .disabled > a:hover, .dropdown-menu > .disabled > a:focus {\n  text-decoration: none;\n  background-color: transparent;\n  background-image: none;\n  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n  cursor: not-allowed; }\n\n.open > .dropdown-menu {\n  display: block; }\n\n.open > a {\n  outline: 0; }\n\n.dropdown-menu-right {\n  left: auto;\n  right: 0; }\n\n.dropdown-menu-left {\n  left: 0;\n  right: auto; }\n\n.dropdown-menu-center {\n  left: 50%;\n  -webkit-transform: translateX(-50%);\n          transform: translateX(-50%); }\n\n.dropdown-header {\n  display: block;\n  padding: 3px 20px;\n  font-size: 12px;\n  line-height: 1.428571429;\n  color: #777777;\n  white-space: nowrap; }\n\n.dropdown-backdrop {\n  position: fixed;\n  left: 0;\n  right: 0;\n  bottom: 0;\n  top: 0;\n  z-index: 990; }\n\n.pull-right > .dropdown-menu {\n  right: 0;\n  left: auto; }\n\n.dropup .caret,\n.navbar-fixed-bottom .dropdown .caret {\n  border-top: 0;\n  border-bottom: 4px solid;\n  content: \"\"; }\n\n.dropup .dropdown-menu,\n.navbar-fixed-bottom .dropdown .dropdown-menu {\n  top: auto;\n  bottom: 100%;\n  margin-bottom: 2px; }\n\n@media (min-width: 768px) {\n  .navbar-right .dropdown-menu {\n    right: 0;\n    left: auto; }\n  .navbar-right .dropdown-menu-left {\n    left: 0;\n    right: auto; } }\n\n.btn-group,\n.btn-group-vertical {\n  position: relative;\n  display: inline-block;\n  vertical-align: middle; }\n  .btn-group > .btn,\n  .btn-group-vertical > .btn {\n    position: relative;\n    float: left; }\n    .btn-group > .btn:hover, .btn-group > .btn:focus, .btn-group > .btn:active, .btn-group > .btn.active,\n    .btn-group-vertical > .btn:hover,\n    .btn-group-vertical > .btn:focus,\n    .btn-group-vertical > .btn:active,\n    .btn-group-vertical > .btn.active {\n      z-index: 2; }\n\n.btn-group .btn + .btn,\n.btn-group .btn + .btn-group,\n.btn-group .btn-group + .btn,\n.btn-group .btn-group + .btn-group {\n  margin-left: -1px; }\n\n.btn-toolbar {\n  margin-left: -5px; }\n  .btn-toolbar:before, .btn-toolbar:after {\n    content: \" \";\n    display: table; }\n  .btn-toolbar:after {\n    clear: both; }\n  .btn-toolbar .btn-group,\n  .btn-toolbar .input-group {\n    float: left; }\n  .btn-toolbar > .btn,\n  .btn-toolbar > .btn-group,\n  .btn-toolbar > .input-group {\n    margin-left: 5px; }\n\n.btn-group > .btn:not(:first-child):not(:last-child):not(.dropdown-toggle) {\n  border-radius: 0; }\n\n.btn-group > .btn:first-child {\n  margin-left: 0; }\n  .btn-group > .btn:first-child:not(:last-child):not(.dropdown-toggle) {\n    border-bottom-right-radius: 0;\n    border-top-right-radius: 0; }\n\n.btn-group > .btn:last-child:not(:first-child),\n.btn-group > .dropdown-toggle:not(:first-child) {\n  border-bottom-left-radius: 0;\n  border-top-left-radius: 0; }\n\n.btn-group > .btn-group {\n  float: left; }\n\n.btn-group > .btn-group:not(:first-child):not(:last-child) > .btn {\n  border-radius: 0; }\n\n.btn-group > .btn-group:first-child:not(:last-child) > .btn:last-child,\n.btn-group > .btn-group:first-child:not(:last-child) > .dropdown-toggle {\n  border-bottom-right-radius: 0;\n  border-top-right-radius: 0; }\n\n.btn-group > .btn-group:last-child:not(:first-child) > .btn:first-child {\n  border-bottom-left-radius: 0;\n  border-top-left-radius: 0; }\n\n.btn-group .dropdown-toggle:active,\n.btn-group.open .dropdown-toggle {\n  outline: 0; }\n\n.btn-group > .btn + .dropdown-toggle {\n  padding-left: 8px;\n  padding-right: 8px; }\n\n.btn-group > .btn-lg + .dropdown-toggle, .btn-group-lg.btn-group > .btn + .dropdown-toggle {\n  padding-left: 12px;\n  padding-right: 12px; }\n\n.btn-group.open .dropdown-toggle {\n  box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); }\n  .btn-group.open .dropdown-toggle.btn-link {\n    box-shadow: none; }\n\n.btn .caret {\n  margin-left: 0; }\n\n.btn-lg .caret, .btn-group-lg > .btn .caret {\n  border-width: 5px 5px 0;\n  border-bottom-width: 0; }\n\n.dropup .btn-lg .caret, .dropup .btn-group-lg > .btn .caret {\n  border-width: 0 5px 5px; }\n\n.btn-group-vertical > .btn,\n.btn-group-vertical > .btn-group,\n.btn-group-vertical > .btn-group > .btn {\n  display: block;\n  float: none;\n  width: 100%;\n  max-width: 100%; }\n\n.btn-group-vertical > .btn-group:before, .btn-group-vertical > .btn-group:after {\n  content: \" \";\n  display: table; }\n\n.btn-group-vertical > .btn-group:after {\n  clear: both; }\n\n.btn-group-vertical > .btn-group > .btn {\n  float: none; }\n\n.btn-group-vertical > .btn + .btn,\n.btn-group-vertical > .btn + .btn-group,\n.btn-group-vertical > .btn-group + .btn,\n.btn-group-vertical > .btn-group + .btn-group {\n  margin-top: -1px;\n  margin-left: 0; }\n\n.btn-group-vertical > .btn:not(:first-child):not(:last-child) {\n  border-radius: 0; }\n\n.btn-group-vertical > .btn:first-child:not(:last-child) {\n  border-top-right-radius: 4px;\n  border-bottom-right-radius: 0;\n  border-bottom-left-radius: 0; }\n\n.btn-group-vertical > .btn:last-child:not(:first-child) {\n  border-bottom-left-radius: 4px;\n  border-top-right-radius: 0;\n  border-top-left-radius: 0; }\n\n.btn-group-vertical > .btn-group:not(:first-child):not(:last-child) > .btn {\n  border-radius: 0; }\n\n.btn-group-vertical > .btn-group:first-child:not(:last-child) > .btn:last-child,\n.btn-group-vertical > .btn-group:first-child:not(:last-child) > .dropdown-toggle {\n  border-bottom-right-radius: 0;\n  border-bottom-left-radius: 0; }\n\n.btn-group-vertical > .btn-group:last-child:not(:first-child) > .btn:first-child {\n  border-top-right-radius: 0;\n  border-top-left-radius: 0; }\n\n.btn-group-justified {\n  display: table;\n  width: 100%;\n  table-layout: fixed;\n  border-collapse: separate; }\n  .btn-group-justified > .btn,\n  .btn-group-justified > .btn-group {\n    float: none;\n    display: table-cell;\n    width: 1%; }\n  .btn-group-justified > .btn-group .btn {\n    width: 100%; }\n  .btn-group-justified > .btn-group .dropdown-menu {\n    left: auto; }\n\n[data-toggle=\"buttons\"] > .btn input[type=\"radio\"],\n[data-toggle=\"buttons\"] > .btn input[type=\"checkbox\"],\n[data-toggle=\"buttons\"] > .btn-group > .btn input[type=\"radio\"],\n[data-toggle=\"buttons\"] > .btn-group > .btn input[type=\"checkbox\"] {\n  position: absolute;\n  clip: rect(0, 0, 0, 0);\n  pointer-events: none; }\n\n.input-group {\n  position: relative;\n  display: table;\n  border-collapse: separate; }\n  .input-group[class*=\"col-\"] {\n    float: none;\n    padding-left: 0;\n    padding-right: 0; }\n  .input-group .form-control {\n    position: relative;\n    z-index: 2;\n    float: left;\n    width: 100%;\n    margin-bottom: 0; }\n\n.input-group-addon,\n.input-group-btn,\n.input-group .form-control {\n  display: table-cell; }\n  .input-group-addon:not(:first-child):not(:last-child),\n  .input-group-btn:not(:first-child):not(:last-child),\n  .input-group .form-control:not(:first-child):not(:last-child) {\n    border-radius: 0; }\n\n.input-group-addon,\n.input-group-btn {\n  width: 1%;\n  white-space: nowrap;\n  vertical-align: middle; }\n\n.input-group-addon {\n  padding: 6px 12px;\n  font-size: 14px;\n  font-weight: normal;\n  line-height: 1;\n  color: #555555;\n  text-align: center;\n  background-color: #eeeeee;\n  border: 1px solid #ccc;\n  border-radius: 4px; }\n  .input-group-addon.input-sm,\n  .input-group-sm > .input-group-addon,\n  .input-group-sm > .input-group-btn > .input-group-addon.btn {\n    padding: 5px 10px;\n    font-size: 12px;\n    border-radius: 3px; }\n  .input-group-addon.input-lg,\n  .input-group-lg > .input-group-addon,\n  .input-group-lg > .input-group-btn > .input-group-addon.btn {\n    padding: 10px 16px;\n    font-size: 18px;\n    border-radius: 6px; }\n  .input-group-addon input[type=\"radio\"],\n  .input-group-addon input[type=\"checkbox\"] {\n    margin-top: 0; }\n\n.input-group .form-control:first-child,\n.input-group-addon:first-child,\n.input-group-btn:first-child > .btn,\n.input-group-btn:first-child > .btn-group > .btn,\n.input-group-btn:first-child > .dropdown-toggle,\n.input-group-btn:last-child > .btn:not(:last-child):not(.dropdown-toggle),\n.input-group-btn:last-child > .btn-group:not(:last-child) > .btn {\n  border-bottom-right-radius: 0;\n  border-top-right-radius: 0; }\n\n.input-group-addon:first-child {\n  border-right: 0; }\n\n.input-group .form-control:last-child,\n.input-group-addon:last-child,\n.input-group-btn:last-child > .btn,\n.input-group-btn:last-child > .btn-group > .btn,\n.input-group-btn:last-child > .dropdown-toggle,\n.input-group-btn:first-child > .btn:not(:first-child),\n.input-group-btn:first-child > .btn-group:not(:first-child) > .btn {\n  border-bottom-left-radius: 0;\n  border-top-left-radius: 0; }\n\n.input-group-addon:last-child {\n  border-left: 0; }\n\n.input-group-btn {\n  position: relative;\n  font-size: 0;\n  white-space: nowrap; }\n  .input-group-btn > .btn {\n    position: relative; }\n    .input-group-btn > .btn + .btn {\n      margin-left: -1px; }\n    .input-group-btn > .btn:hover, .input-group-btn > .btn:focus, .input-group-btn > .btn:active {\n      z-index: 2; }\n  .input-group-btn:first-child > .btn,\n  .input-group-btn:first-child > .btn-group {\n    margin-right: -1px; }\n  .input-group-btn:last-child > .btn,\n  .input-group-btn:last-child > .btn-group {\n    margin-left: -1px; }\n\n.nav {\n  margin-bottom: 0;\n  padding-left: 0;\n  list-style: none; }\n  .nav:before, .nav:after {\n    content: \" \";\n    display: table; }\n  .nav:after {\n    clear: both; }\n  .nav > li {\n    position: relative;\n    display: block; }\n    .nav > li > a {\n      position: relative;\n      display: block;\n      padding: 10px 15px; }\n      .nav > li > a:hover, .nav > li > a:focus {\n        text-decoration: none;\n        background-color: #eeeeee; }\n    .nav > li.disabled > a {\n      color: #777777; }\n      .nav > li.disabled > a:hover, .nav > li.disabled > a:focus {\n        color: #777777;\n        text-decoration: none;\n        background-color: transparent;\n        cursor: not-allowed; }\n  .nav .open > a, .nav .open > a:hover, .nav .open > a:focus {\n    background-color: #eeeeee;\n    border-color: #337ab7; }\n  .nav .nav-divider {\n    height: 1px;\n    margin: 9px 0;\n    overflow: hidden;\n    background-color: #e5e5e5; }\n  .nav > li > a > img {\n    max-width: none; }\n\n.nav-tabs {\n  border-bottom: 1px solid #ddd; }\n  .nav-tabs > li {\n    float: left;\n    margin-bottom: -1px; }\n    .nav-tabs > li > a {\n      margin-right: 2px;\n      line-height: 1.428571429;\n      border: 1px solid transparent;\n      border-radius: 4px 4px 0 0; }\n      .nav-tabs > li > a:hover {\n        border-color: #eeeeee #eeeeee #ddd; }\n    .nav-tabs > li.active > a, .nav-tabs > li.active > a:hover, .nav-tabs > li.active > a:focus {\n      color: #555555;\n      background-color: #fff;\n      border: 1px solid #ddd;\n      border-bottom-color: transparent;\n      cursor: default; }\n\n.nav-pills > li {\n  float: left; }\n  .nav-pills > li > a {\n    border-radius: 4px; }\n  .nav-pills > li + li {\n    margin-left: 2px; }\n  .nav-pills > li.active > a, .nav-pills > li.active > a:hover, .nav-pills > li.active > a:focus {\n    color: #fff;\n    background-color: #337ab7; }\n\n.nav-stacked > li {\n  float: none; }\n  .nav-stacked > li + li {\n    margin-top: 2px;\n    margin-left: 0; }\n\n.nav-justified, .nav-tabs.nav-justified {\n  width: 100%; }\n  .nav-justified > li, .nav-tabs.nav-justified > li {\n    float: none; }\n    .nav-justified > li > a, .nav-tabs.nav-justified > li > a {\n      text-align: center;\n      margin-bottom: 5px; }\n  .nav-justified > .dropdown .dropdown-menu {\n    top: auto;\n    left: auto; }\n  @media (min-width: 768px) {\n    .nav-justified > li, .nav-tabs.nav-justified > li {\n      display: table-cell;\n      width: 1%; }\n      .nav-justified > li > a, .nav-tabs.nav-justified > li > a {\n        margin-bottom: 0; } }\n\n.nav-tabs-justified, .nav-tabs.nav-justified {\n  border-bottom: 0; }\n  .nav-tabs-justified > li > a, .nav-tabs.nav-justified > li > a {\n    margin-right: 0;\n    border-radius: 4px; }\n  .nav-tabs-justified > .active > a, .nav-tabs.nav-justified > .active > a,\n  .nav-tabs-justified > .active > a:hover,\n  .nav-tabs.nav-justified > .active > a:hover,\n  .nav-tabs-justified > .active > a:focus,\n  .nav-tabs.nav-justified > .active > a:focus {\n    border: 1px solid #ddd; }\n  @media (min-width: 768px) {\n    .nav-tabs-justified > li > a, .nav-tabs.nav-justified > li > a {\n      border-bottom: 1px solid #ddd;\n      border-radius: 4px 4px 0 0; }\n    .nav-tabs-justified > .active > a, .nav-tabs.nav-justified > .active > a,\n    .nav-tabs-justified > .active > a:hover,\n    .nav-tabs.nav-justified > .active > a:hover,\n    .nav-tabs-justified > .active > a:focus,\n    .nav-tabs.nav-justified > .active > a:focus {\n      border-bottom-color: #fff; } }\n\n.tab-content > .tab-pane {\n  display: none; }\n\n.tab-content > .active {\n  display: block; }\n\n.nav-tabs .dropdown-menu {\n  margin-top: -1px;\n  border-top-right-radius: 0;\n  border-top-left-radius: 0; }\n\n.navbar {\n  position: relative;\n  min-height: 50px;\n  margin-bottom: 20px;\n  border: 1px solid transparent; }\n  .navbar:before, .navbar:after {\n    content: \" \";\n    display: table; }\n  .navbar:after {\n    clear: both; }\n  @media (min-width: 768px) {\n    .navbar {\n      border-radius: 4px; } }\n\n.navbar-header:before, .navbar-header:after {\n  content: \" \";\n  display: table; }\n\n.navbar-header:after {\n  clear: both; }\n\n@media (min-width: 768px) {\n  .navbar-header {\n    float: left; } }\n\n.navbar-collapse {\n  overflow-x: visible;\n  padding-right: 15px;\n  padding-left: 15px;\n  border-top: 1px solid transparent;\n  box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1);\n  -webkit-overflow-scrolling: touch; }\n  .navbar-collapse:before, .navbar-collapse:after {\n    content: \" \";\n    display: table; }\n  .navbar-collapse:after {\n    clear: both; }\n  .navbar-collapse.in {\n    overflow-y: auto; }\n  @media (min-width: 768px) {\n    .navbar-collapse {\n      width: auto;\n      border-top: 0;\n      box-shadow: none; }\n      .navbar-collapse.collapse {\n        display: block !important;\n        height: auto !important;\n        padding-bottom: 0;\n        overflow: visible !important; }\n      .navbar-collapse.in {\n        overflow-y: visible; }\n      .navbar-fixed-top .navbar-collapse,\n      .navbar-static-top .navbar-collapse,\n      .navbar-fixed-bottom .navbar-collapse {\n        padding-left: 0;\n        padding-right: 0; } }\n\n.navbar-fixed-top .navbar-collapse,\n.navbar-fixed-bottom .navbar-collapse {\n  max-height: 340px; }\n  @media (max-device-width: 480px) and (orientation: landscape) {\n    .navbar-fixed-top .navbar-collapse,\n    .navbar-fixed-bottom .navbar-collapse {\n      max-height: 200px; } }\n\n.container > .navbar-header,\n.container > .navbar-collapse,\n.container-fluid > .navbar-header,\n.container-fluid > .navbar-collapse {\n  margin-right: -15px;\n  margin-left: -15px; }\n  @media (min-width: 768px) {\n    .container > .navbar-header,\n    .container > .navbar-collapse,\n    .container-fluid > .navbar-header,\n    .container-fluid > .navbar-collapse {\n      margin-right: 0;\n      margin-left: 0; } }\n\n.navbar-static-top {\n  z-index: 1000;\n  border-width: 0 0 1px; }\n  @media (min-width: 768px) {\n    .navbar-static-top {\n      border-radius: 0; } }\n\n.navbar-fixed-top,\n.navbar-fixed-bottom {\n  position: fixed;\n  right: 0;\n  left: 0;\n  z-index: 1030; }\n  @media (min-width: 768px) {\n    .navbar-fixed-top,\n    .navbar-fixed-bottom {\n      border-radius: 0; } }\n\n.navbar-fixed-top {\n  top: 0;\n  border-width: 0 0 1px; }\n\n.navbar-fixed-bottom {\n  bottom: 0;\n  margin-bottom: 0;\n  border-width: 1px 0 0; }\n\n.navbar-brand {\n  float: left;\n  padding: 15px 15px;\n  font-size: 18px;\n  line-height: 20px;\n  height: 50px; }\n  .navbar-brand:hover, .navbar-brand:focus {\n    text-decoration: none; }\n  .navbar-brand > img {\n    display: block; }\n  @media (min-width: 768px) {\n    .navbar > .container .navbar-brand,\n    .navbar > .container-fluid .navbar-brand {\n      margin-left: -15px; } }\n\n.navbar-toggle {\n  position: relative;\n  float: right;\n  margin-right: 15px;\n  padding: 9px 10px;\n  margin-top: 8px;\n  margin-bottom: 8px;\n  background-color: transparent;\n  background-image: none;\n  border: 1px solid transparent;\n  border-radius: 4px; }\n  .navbar-toggle:focus {\n    outline: 0; }\n  .navbar-toggle .icon-bar {\n    display: block;\n    width: 22px;\n    height: 2px;\n    border-radius: 1px; }\n  .navbar-toggle .icon-bar + .icon-bar {\n    margin-top: 4px; }\n  @media (min-width: 768px) {\n    .navbar-toggle {\n      display: none; } }\n\n.navbar-nav {\n  margin: 7.5px -15px; }\n  .navbar-nav > li > a {\n    padding-top: 10px;\n    padding-bottom: 10px;\n    line-height: 20px; }\n  @media (max-width: 767px) {\n    .navbar-nav .open .dropdown-menu {\n      position: static;\n      float: none;\n      width: auto;\n      margin-top: 0;\n      background-color: transparent;\n      border: 0;\n      box-shadow: none; }\n      .navbar-nav .open .dropdown-menu > li > a,\n      .navbar-nav .open .dropdown-menu .dropdown-header {\n        padding: 5px 15px 5px 25px; }\n      .navbar-nav .open .dropdown-menu > li > a {\n        line-height: 20px; }\n        .navbar-nav .open .dropdown-menu > li > a:hover, .navbar-nav .open .dropdown-menu > li > a:focus {\n          background-image: none; } }\n  @media (min-width: 768px) {\n    .navbar-nav {\n      float: left;\n      margin: 0; }\n      .navbar-nav > li {\n        float: left; }\n        .navbar-nav > li > a {\n          padding-top: 15px;\n          padding-bottom: 15px; } }\n\n.navbar-form {\n  margin-left: -15px;\n  margin-right: -15px;\n  padding: 10px 15px;\n  border-top: 1px solid transparent;\n  border-bottom: 1px solid transparent;\n  box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1);\n  margin-top: 8px;\n  margin-bottom: 8px; }\n  @media (min-width: 768px) {\n    .navbar-form .form-group {\n      display: inline-block;\n      margin-bottom: 0;\n      vertical-align: middle; }\n    .navbar-form .form-control {\n      display: inline-block;\n      width: auto;\n      vertical-align: middle; }\n    .navbar-form .form-control-static {\n      display: inline-block; }\n    .navbar-form .input-group {\n      display: inline-table;\n      vertical-align: middle; }\n      .navbar-form .input-group .input-group-addon,\n      .navbar-form .input-group .input-group-btn,\n      .navbar-form .input-group .form-control {\n        width: auto; }\n    .navbar-form .input-group > .form-control {\n      width: 100%; }\n    .navbar-form .control-label {\n      margin-bottom: 0;\n      vertical-align: middle; }\n    .navbar-form .radio,\n    .navbar-form .checkbox {\n      display: inline-block;\n      margin-top: 0;\n      margin-bottom: 0;\n      vertical-align: middle; }\n      .navbar-form .radio label,\n      .navbar-form .checkbox label {\n        padding-left: 0; }\n    .navbar-form .radio input[type=\"radio\"],\n    .navbar-form .checkbox input[type=\"checkbox\"] {\n      position: relative;\n      margin-left: 0; }\n    .navbar-form .has-feedback .form-control-feedback {\n      top: 0; } }\n  @media (max-width: 767px) {\n    .navbar-form .form-group {\n      margin-bottom: 5px; }\n      .navbar-form .form-group:last-child {\n        margin-bottom: 0; } }\n  @media (min-width: 768px) {\n    .navbar-form {\n      width: auto;\n      border: 0;\n      margin-left: 0;\n      margin-right: 0;\n      padding-top: 0;\n      padding-bottom: 0;\n      box-shadow: none; } }\n\n.navbar-nav > li > .dropdown-menu {\n  margin-top: 0;\n  border-top-right-radius: 0;\n  border-top-left-radius: 0; }\n\n.navbar-fixed-bottom .navbar-nav > li > .dropdown-menu {\n  margin-bottom: 0;\n  border-top-right-radius: 4px;\n  border-top-left-radius: 4px;\n  border-bottom-right-radius: 0;\n  border-bottom-left-radius: 0; }\n\n.navbar-btn {\n  margin-top: 8px;\n  margin-bottom: 8px; }\n  .navbar-btn.btn-sm, .btn-group-sm > .navbar-btn.btn {\n    margin-top: 10px;\n    margin-bottom: 10px; }\n  .navbar-btn.btn-xs, .btn-group-xs > .navbar-btn.btn {\n    margin-top: 14px;\n    margin-bottom: 14px; }\n\n.navbar-text {\n  margin-top: 15px;\n  margin-bottom: 15px; }\n  @media (min-width: 768px) {\n    .navbar-text {\n      float: left;\n      margin-left: 15px;\n      margin-right: 15px; } }\n\n@media (min-width: 768px) {\n  .navbar-left {\n    float: left !important; }\n  .navbar-right {\n    float: right !important;\n    margin-right: -15px; }\n    .navbar-right ~ .navbar-right {\n      margin-right: 0; } }\n\n.navbar-default {\n  background-color: #4a8bfc;\n  border-color: #4a8bfc; }\n  .navbar-default .navbar-brand {\n    color: rgba(255, 255, 255, 0.8); }\n    .navbar-default .navbar-brand:hover, .navbar-default .navbar-brand:focus {\n      color: #fff;\n      background-color: transparent; }\n  .navbar-default .navbar-text {\n    color: #777; }\n  .navbar-default .navbar-nav > li > a {\n    color: rgba(255, 255, 255, 0.8); }\n    .navbar-default .navbar-nav > li > a:hover, .navbar-default .navbar-nav > li > a:focus {\n      color: #fff;\n      background-color: transparent; }\n  .navbar-default .navbar-nav > .active > a, .navbar-default .navbar-nav > .active > a:hover, .navbar-default .navbar-nav > .active > a:focus {\n    color: #fff;\n    background-color: transparent; }\n  .navbar-default .navbar-nav > .disabled > a, .navbar-default .navbar-nav > .disabled > a:hover, .navbar-default .navbar-nav > .disabled > a:focus {\n    color: #ccc;\n    background-color: transparent; }\n  .navbar-default .navbar-toggle {\n    border-color: #ddd; }\n    .navbar-default .navbar-toggle:hover, .navbar-default .navbar-toggle:focus {\n      background-color: #ddd; }\n    .navbar-default .navbar-toggle .icon-bar {\n      background-color: #888; }\n  .navbar-default .navbar-collapse,\n  .navbar-default .navbar-form {\n    border-color: #4a8bfc; }\n  .navbar-default .navbar-nav > .open > a, .navbar-default .navbar-nav > .open > a:hover, .navbar-default .navbar-nav > .open > a:focus {\n    background-color: transparent;\n    color: #fff; }\n  @media (max-width: 767px) {\n    .navbar-default .navbar-nav .open .dropdown-menu > li > a {\n      color: rgba(255, 255, 255, 0.8); }\n      .navbar-default .navbar-nav .open .dropdown-menu > li > a:hover, .navbar-default .navbar-nav .open .dropdown-menu > li > a:focus {\n        color: #fff;\n        background-color: transparent; }\n    .navbar-default .navbar-nav .open .dropdown-menu > .active > a, .navbar-default .navbar-nav .open .dropdown-menu > .active > a:hover, .navbar-default .navbar-nav .open .dropdown-menu > .active > a:focus {\n      color: #fff;\n      background-color: transparent; }\n    .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a, .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:hover, .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:focus {\n      color: #ccc;\n      background-color: transparent; } }\n  .navbar-default .navbar-link {\n    color: rgba(255, 255, 255, 0.8); }\n    .navbar-default .navbar-link:hover {\n      color: #fff; }\n  .navbar-default .btn-link {\n    color: rgba(255, 255, 255, 0.8); }\n    .navbar-default .btn-link:hover, .navbar-default .btn-link:focus {\n      color: #fff; }\n    .navbar-default .btn-link[disabled]:hover, .navbar-default .btn-link[disabled]:focus,\n    fieldset[disabled] .navbar-default .btn-link:hover,\n    fieldset[disabled] .navbar-default .btn-link:focus {\n      color: #ccc; }\n\n.navbar-inverse {\n  background-color: #222;\n  border-color: #090808; }\n  .navbar-inverse .navbar-brand {\n    color: #9d9d9d; }\n    .navbar-inverse .navbar-brand:hover, .navbar-inverse .navbar-brand:focus {\n      color: #fff;\n      background-color: transparent; }\n  .navbar-inverse .navbar-text {\n    color: #9d9d9d; }\n  .navbar-inverse .navbar-nav > li > a {\n    color: #9d9d9d; }\n    .navbar-inverse .navbar-nav > li > a:hover, .navbar-inverse .navbar-nav > li > a:focus {\n      color: #fff;\n      background-color: transparent; }\n  .navbar-inverse .navbar-nav > .active > a, .navbar-inverse .navbar-nav > .active > a:hover, .navbar-inverse .navbar-nav > .active > a:focus {\n    color: #fff;\n    background-color: #090808; }\n  .navbar-inverse .navbar-nav > .disabled > a, .navbar-inverse .navbar-nav > .disabled > a:hover, .navbar-inverse .navbar-nav > .disabled > a:focus {\n    color: #444;\n    background-color: transparent; }\n  .navbar-inverse .navbar-toggle {\n    border-color: #333; }\n    .navbar-inverse .navbar-toggle:hover, .navbar-inverse .navbar-toggle:focus {\n      background-color: #333; }\n    .navbar-inverse .navbar-toggle .icon-bar {\n      background-color: #fff; }\n  .navbar-inverse .navbar-collapse,\n  .navbar-inverse .navbar-form {\n    border-color: #101010; }\n  .navbar-inverse .navbar-nav > .open > a, .navbar-inverse .navbar-nav > .open > a:hover, .navbar-inverse .navbar-nav > .open > a:focus {\n    background-color: #090808;\n    color: #fff; }\n  @media (max-width: 767px) {\n    .navbar-inverse .navbar-nav .open .dropdown-menu > .dropdown-header {\n      border-color: #090808; }\n    .navbar-inverse .navbar-nav .open .dropdown-menu .divider {\n      background-color: #090808; }\n    .navbar-inverse .navbar-nav .open .dropdown-menu > li > a {\n      color: #9d9d9d; }\n      .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:hover, .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:focus {\n        color: #fff;\n        background-color: transparent; }\n    .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a, .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:hover, .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:focus {\n      color: #fff;\n      background-color: #090808; }\n    .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a, .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:hover, .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:focus {\n      color: #444;\n      background-color: transparent; } }\n  .navbar-inverse .navbar-link {\n    color: #9d9d9d; }\n    .navbar-inverse .navbar-link:hover {\n      color: #fff; }\n  .navbar-inverse .btn-link {\n    color: #9d9d9d; }\n    .navbar-inverse .btn-link:hover, .navbar-inverse .btn-link:focus {\n      color: #fff; }\n    .navbar-inverse .btn-link[disabled]:hover, .navbar-inverse .btn-link[disabled]:focus,\n    fieldset[disabled] .navbar-inverse .btn-link:hover,\n    fieldset[disabled] .navbar-inverse .btn-link:focus {\n      color: #444; }\n\n.navbar-default.navbar-sticky {\n  position: fixed;\n  top: 0;\n  left: 0;\n  right: 0;\n  z-index: 9999;\n  padding: 10px 0;\n  opacity: 0;\n  -webkit-transform: translate3d(0, -100%, 0);\n          transform: translate3d(0, -100%, 0);\n  box-shadow: 0 2px 6px 0 rgba(0, 0, 0, 0.07);\n  background: #fff; }\n  @supports ((-webkit-backdrop-filter: saturate(180%) blur(20px)) or (backdrop-filter: saturate(180%) blur(20px))) {\n    .navbar-default.navbar-sticky {\n      background: rgba(255, 255, 255, 0.9);\n      -webkit-backdrop-filter: saturate(180%) blur(20px);\n              backdrop-filter: saturate(180%) blur(20px); } }\n  .navbar-default.navbar-sticky .navbar-nav > li.header-btn-white a {\n    background-color: #488aff;\n    color: #fff; }\n    .navbar-default.navbar-sticky .navbar-nav > li.header-btn-white a:hover {\n      background-color: rgba(74, 139, 252, 0.9);\n      color: #fff; }\n  .navbar-default.navbar-sticky--show, .navbar-default.navbar-sticky--hide {\n    -webkit-animation-fill-mode: forwards;\n            animation-fill-mode: forwards; }\n  .navbar-default.navbar-sticky--hide {\n    -webkit-animation-duration: 0.1s;\n            animation-duration: 0.1s;\n    -webkit-animation-name: slideup;\n            animation-name: slideup; }\n\n@-webkit-keyframes slideup {\n  0% {\n    opacity: 1;\n    -webkit-transform: translate3d(0, 0, 0);\n            transform: translate3d(0, 0, 0); }\n  100% {\n    opacity: 0;\n    -webkit-transform: translate3d(0, -100%, 0);\n            transform: translate3d(0, -100%, 0); } }\n\n@keyframes slideup {\n  0% {\n    opacity: 1;\n    -webkit-transform: translate3d(0, 0, 0);\n            transform: translate3d(0, 0, 0); }\n  100% {\n    opacity: 0;\n    -webkit-transform: translate3d(0, -100%, 0);\n            transform: translate3d(0, -100%, 0); } }\n  .navbar-default.navbar-sticky--show {\n    -webkit-animation-duration: 0.5s;\n            animation-duration: 0.5s;\n    -webkit-animation-name: slidedown;\n            animation-name: slidedown;\n    -webkit-animation-timing-function: cubic-bezier(0.075, 0.82, 0.165, 1);\n            animation-timing-function: cubic-bezier(0.075, 0.82, 0.165, 1); }\n\n@-webkit-keyframes slidedown {\n  0% {\n    opacity: 0;\n    -webkit-transform: translate3d(0, -100%, 0);\n            transform: translate3d(0, -100%, 0); }\n  1% {\n    opacity: 1; }\n  100% {\n    opacity: 1;\n    -webkit-transform: translate3d(0, 0, 0);\n            transform: translate3d(0, 0, 0); } }\n\n@keyframes slidedown {\n  0% {\n    opacity: 0;\n    -webkit-transform: translate3d(0, -100%, 0);\n            transform: translate3d(0, -100%, 0); }\n  1% {\n    opacity: 1; }\n  100% {\n    opacity: 1;\n    -webkit-transform: translate3d(0, 0, 0);\n            transform: translate3d(0, 0, 0); } }\n  @media (max-width: 767px) {\n    .navbar-default.navbar-sticky {\n      display: none; } }\n\n.badge {\n  display: inline-block;\n  min-width: 10px;\n  padding: 3px 7px;\n  font-size: 12px;\n  font-weight: bold;\n  color: #fff;\n  line-height: 1;\n  vertical-align: baseline;\n  white-space: nowrap;\n  text-align: center;\n  background-color: #777777;\n  border-radius: 10px; }\n  .badge:empty {\n    display: none; }\n  .btn .badge {\n    position: relative;\n    top: -1px; }\n  .btn-xs .badge, .btn-group-xs > .btn .badge,\n  .btn-group-xs > .btn .badge {\n    top: 0;\n    padding: 1px 5px; }\n  .list-group-item.active > .badge,\n  .nav-pills > .active > a > .badge {\n    color: #337ab7;\n    background-color: #fff; }\n  .list-group-item > .badge {\n    float: right; }\n  .list-group-item > .badge + .badge {\n    margin-right: 5px; }\n  .nav-pills > li > a > .badge {\n    margin-left: 3px; }\n\na.badge:hover, a.badge:focus {\n  color: #fff;\n  text-decoration: none;\n  cursor: pointer; }\n\n.modal-open {\n  overflow: hidden; }\n\n.modal {\n  display: none;\n  overflow: hidden;\n  position: fixed;\n  top: 0;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  z-index: 1050;\n  -webkit-overflow-scrolling: touch;\n  outline: 0; }\n  .modal.fade .modal-dialog {\n    -webkit-transform: translate(0, -25%);\n    transform: translate(0, -25%);\n    transition: -webkit-transform 0.3s ease-out;\n    transition: transform 0.3s ease-out;\n    transition: transform 0.3s ease-out, -webkit-transform 0.3s ease-out; }\n  .modal.in .modal-dialog {\n    -webkit-transform: translate(0, 0);\n    transform: translate(0, 0); }\n\n.modal-open .modal {\n  overflow-x: hidden;\n  overflow-y: auto; }\n\n.modal-dialog {\n  position: relative;\n  width: auto;\n  margin: 10px; }\n\n.modal-content {\n  position: relative;\n  background-color: #fff;\n  border: 1px solid #999;\n  border: 1px solid rgba(0, 0, 0, 0.2);\n  border-radius: 6px;\n  box-shadow: 0 3px 9px rgba(0, 0, 0, 0.5);\n  background-clip: padding-box;\n  outline: 0; }\n\n.modal-backdrop {\n  position: fixed;\n  top: 0;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  z-index: 1040;\n  background-color: #000; }\n  .modal-backdrop.fade {\n    opacity: 0;\n    filter: alpha(opacity=0); }\n  .modal-backdrop.in {\n    opacity: 0.5;\n    filter: alpha(opacity=50); }\n\n.modal-header {\n  padding: 15px;\n  border-bottom: 1px solid #e5e5e5;\n  min-height: 16.428571429px; }\n\n.modal-header .close {\n  margin-top: -2px; }\n\n.modal-title {\n  margin: 0;\n  line-height: 1.428571429; }\n\n.modal-body {\n  position: relative;\n  padding: 15px; }\n\n.modal-footer {\n  padding: 15px;\n  text-align: right;\n  border-top: 1px solid #e5e5e5; }\n  .modal-footer:before, .modal-footer:after {\n    content: \" \";\n    display: table; }\n  .modal-footer:after {\n    clear: both; }\n  .modal-footer .btn + .btn {\n    margin-left: 5px;\n    margin-bottom: 0; }\n  .modal-footer .btn-group .btn + .btn {\n    margin-left: -1px; }\n  .modal-footer .btn-block + .btn-block {\n    margin-left: 0; }\n\n.modal-scrollbar-measure {\n  position: absolute;\n  top: -9999px;\n  width: 50px;\n  height: 50px;\n  overflow: scroll; }\n\n@media (min-width: 768px) {\n  .modal-dialog {\n    width: 600px;\n    margin: 30px auto; }\n  .modal-content {\n    box-shadow: 0 5px 15px rgba(0, 0, 0, 0.5); }\n  .modal-sm {\n    width: 300px; } }\n\n@media (min-width: 992px) {\n  .modal-lg {\n    width: 900px; } }\n\n.tooltip {\n  position: absolute;\n  z-index: 1070;\n  display: block;\n  font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n  font-size: 12px;\n  font-weight: normal;\n  line-height: 1.4;\n  opacity: 0;\n  filter: alpha(opacity=0); }\n  .tooltip.in {\n    opacity: 0.9;\n    filter: alpha(opacity=90); }\n  .tooltip.top {\n    margin-top: -3px;\n    padding: 5px 0; }\n  .tooltip.right {\n    margin-left: 3px;\n    padding: 0 5px; }\n  .tooltip.bottom {\n    margin-top: 3px;\n    padding: 5px 0; }\n  .tooltip.left {\n    margin-left: -3px;\n    padding: 0 5px; }\n\n.tooltip-inner {\n  max-width: 200px;\n  padding: 3px 8px;\n  color: #fff;\n  text-align: center;\n  text-decoration: none;\n  background-color: #000;\n  border-radius: 4px; }\n\n.tooltip-arrow {\n  position: absolute;\n  width: 0;\n  height: 0;\n  border-color: transparent;\n  border-style: solid; }\n\n.tooltip.top .tooltip-arrow {\n  bottom: 0;\n  left: 50%;\n  margin-left: -5px;\n  border-width: 5px 5px 0;\n  border-top-color: #000; }\n\n.tooltip.top-left .tooltip-arrow {\n  bottom: 0;\n  right: 5px;\n  margin-bottom: -5px;\n  border-width: 5px 5px 0;\n  border-top-color: #000; }\n\n.tooltip.top-right .tooltip-arrow {\n  bottom: 0;\n  left: 5px;\n  margin-bottom: -5px;\n  border-width: 5px 5px 0;\n  border-top-color: #000; }\n\n.tooltip.right .tooltip-arrow {\n  top: 50%;\n  left: 0;\n  margin-top: -5px;\n  border-width: 5px 5px 5px 0;\n  border-right-color: #000; }\n\n.tooltip.left .tooltip-arrow {\n  top: 50%;\n  right: 0;\n  margin-top: -5px;\n  border-width: 5px 0 5px 5px;\n  border-left-color: #000; }\n\n.tooltip.bottom .tooltip-arrow {\n  top: 0;\n  left: 50%;\n  margin-left: -5px;\n  border-width: 0 5px 5px;\n  border-bottom-color: #000; }\n\n.tooltip.bottom-left .tooltip-arrow {\n  top: 0;\n  right: 5px;\n  margin-top: -5px;\n  border-width: 0 5px 5px;\n  border-bottom-color: #000; }\n\n.tooltip.bottom-right .tooltip-arrow {\n  top: 0;\n  left: 5px;\n  margin-top: -5px;\n  border-width: 0 5px 5px;\n  border-bottom-color: #000; }\n\n.clearfix:before, .clearfix:after {\n  content: \" \";\n  display: table; }\n\n.clearfix:after {\n  clear: both; }\n\n.center-block {\n  display: block;\n  margin-left: auto;\n  margin-right: auto; }\n\n.pull-right {\n  float: right !important; }\n\n.pull-left {\n  float: left !important; }\n\n.hide {\n  display: none !important; }\n\n.show {\n  display: block !important; }\n\n.invisible {\n  visibility: hidden; }\n\n.text-hide {\n  font: 0/0 a;\n  color: transparent;\n  text-shadow: none;\n  background-color: transparent;\n  border: 0; }\n\n.hidden {\n  display: none !important; }\n\n.affix {\n  position: fixed; }\n\n@-ms-viewport {\n  width: device-width; }\n\n.visible-xs {\n  display: none !important; }\n\n.visible-sm {\n  display: none !important; }\n\n.visible-md {\n  display: none !important; }\n\n.visible-lg {\n  display: none !important; }\n\n.visible-xs-block,\n.visible-xs-inline,\n.visible-xs-inline-block,\n.visible-sm-block,\n.visible-sm-inline,\n.visible-sm-inline-block,\n.visible-md-block,\n.visible-md-inline,\n.visible-md-inline-block,\n.visible-lg-block,\n.visible-lg-inline,\n.visible-lg-inline-block {\n  display: none !important; }\n\n@media (max-width: 767px) {\n  .visible-xs {\n    display: block !important; }\n  table.visible-xs {\n    display: table; }\n  tr.visible-xs {\n    display: table-row !important; }\n  th.visible-xs,\n  td.visible-xs {\n    display: table-cell !important; } }\n\n@media (max-width: 767px) {\n  .visible-xs-block {\n    display: block !important; } }\n\n@media (max-width: 767px) {\n  .visible-xs-inline {\n    display: inline !important; } }\n\n@media (max-width: 767px) {\n  .visible-xs-inline-block {\n    display: inline-block !important; } }\n\n@media (min-width: 768px) and (max-width: 991px) {\n  .visible-sm {\n    display: block !important; }\n  table.visible-sm {\n    display: table; }\n  tr.visible-sm {\n    display: table-row !important; }\n  th.visible-sm,\n  td.visible-sm {\n    display: table-cell !important; } }\n\n@media (min-width: 768px) and (max-width: 991px) {\n  .visible-sm-block {\n    display: block !important; } }\n\n@media (min-width: 768px) and (max-width: 991px) {\n  .visible-sm-inline {\n    display: inline !important; } }\n\n@media (min-width: 768px) and (max-width: 991px) {\n  .visible-sm-inline-block {\n    display: inline-block !important; } }\n\n@media (min-width: 992px) and (max-width: 1219px) {\n  .visible-md {\n    display: block !important; }\n  table.visible-md {\n    display: table; }\n  tr.visible-md {\n    display: table-row !important; }\n  th.visible-md,\n  td.visible-md {\n    display: table-cell !important; } }\n\n@media (min-width: 992px) and (max-width: 1219px) {\n  .visible-md-block {\n    display: block !important; } }\n\n@media (min-width: 992px) and (max-width: 1219px) {\n  .visible-md-inline {\n    display: inline !important; } }\n\n@media (min-width: 992px) and (max-width: 1219px) {\n  .visible-md-inline-block {\n    display: inline-block !important; } }\n\n@media (min-width: 1220px) {\n  .visible-lg {\n    display: block !important; }\n  table.visible-lg {\n    display: table; }\n  tr.visible-lg {\n    display: table-row !important; }\n  th.visible-lg,\n  td.visible-lg {\n    display: table-cell !important; } }\n\n@media (min-width: 1220px) {\n  .visible-lg-block {\n    display: block !important; } }\n\n@media (min-width: 1220px) {\n  .visible-lg-inline {\n    display: inline !important; } }\n\n@media (min-width: 1220px) {\n  .visible-lg-inline-block {\n    display: inline-block !important; } }\n\n@media (max-width: 767px) {\n  .hidden-xs {\n    display: none !important; } }\n\n@media (min-width: 768px) and (max-width: 991px) {\n  .hidden-sm {\n    display: none !important; } }\n\n@media (min-width: 992px) and (max-width: 1219px) {\n  .hidden-md {\n    display: none !important; } }\n\n@media (min-width: 1220px) {\n  .hidden-lg {\n    display: none !important; } }\n\n.visible-print {\n  display: none !important; }\n\n@media print {\n  .visible-print {\n    display: block !important; }\n  table.visible-print {\n    display: table; }\n  tr.visible-print {\n    display: table-row !important; }\n  th.visible-print,\n  td.visible-print {\n    display: table-cell !important; } }\n\n.visible-print-block {\n  display: none !important; }\n  @media print {\n    .visible-print-block {\n      display: block !important; } }\n\n.visible-print-inline {\n  display: none !important; }\n  @media print {\n    .visible-print-inline {\n      display: inline !important; } }\n\n.visible-print-inline-block {\n  display: none !important; }\n  @media print {\n    .visible-print-inline-block {\n      display: inline-block !important; } }\n\n@media print {\n  .hidden-print {\n    display: none !important; } }\n\n.highlight {\n  background: #ffffff; }\n\n.highlight .c {\n  color: #999988;\n  font-style: italic; }\n\n/* Comment */\n.highlight .err {\n  color: #a61717;\n  background-color: #e3d2d2; }\n\n/* Error */\n.highlight .k {\n  font-weight: bold; }\n\n/* Keyword */\n.highlight .o {\n  font-weight: bold; }\n\n/* Operator */\n.highlight .cm {\n  color: #999988;\n  font-style: italic; }\n\n/* Comment.Multiline */\n.highlight .cp {\n  color: #999999;\n  font-weight: bold; }\n\n/* Comment.Preproc */\n.highlight .c1 {\n  color: #999988;\n  font-style: italic; }\n\n/* Comment.Single */\n.highlight .cs {\n  color: #999999;\n  font-weight: bold;\n  font-style: italic; }\n\n/* Comment.Special */\n.highlight .gd {\n  color: #000000;\n  background-color: #ffdddd; }\n\n/* Generic.Deleted */\n.highlight .gd .x {\n  color: #000000;\n  background-color: #ffaaaa; }\n\n/* Generic.Deleted.Specific */\n.highlight .ge {\n  font-style: italic; }\n\n/* Generic.Emph */\n.highlight .gr {\n  color: #aa0000; }\n\n/* Generic.Error */\n.highlight .gh {\n  color: #999999; }\n\n/* Generic.Heading */\n.highlight .gi {\n  color: #000000;\n  background-color: #ddffdd; }\n\n/* Generic.Inserted */\n.highlight .gi .x {\n  color: #000000;\n  background-color: #aaffaa; }\n\n/* Generic.Inserted.Specific */\n.highlight .go {\n  color: #888888; }\n\n/* Generic.Output */\n.highlight .gp {\n  color: #555555; }\n\n/* Generic.Prompt */\n.highlight .gs {\n  font-weight: bold; }\n\n/* Generic.Strong */\n.highlight .gu {\n  color: #aaaaaa; }\n\n/* Generic.Subheading */\n.highlight .gt {\n  color: #aa0000; }\n\n/* Generic.Traceback */\n.highlight .kc {\n  font-weight: bold; }\n\n/* Keyword.Constant */\n.highlight .kd {\n  font-weight: bold; }\n\n/* Keyword.Declaration */\n.highlight .kp {\n  font-weight: bold; }\n\n/* Keyword.Pseudo */\n.highlight .kr {\n  font-weight: bold; }\n\n/* Keyword.Reserved */\n.highlight .kt {\n  color: #445588;\n  font-weight: bold; }\n\n/* Keyword.Type */\n.highlight .m {\n  color: #009999; }\n\n/* Literal.Number */\n.highlight .s {\n  color: #d14; }\n\n/* Literal.String */\n.highlight .na {\n  color: #008080; }\n\n/* Name.Attribute */\n.highlight .nb {\n  color: #0086B3; }\n\n/* Name.Builtin */\n.highlight .nc {\n  color: #445588;\n  font-weight: bold; }\n\n/* Name.Class */\n.highlight .no {\n  color: #008080; }\n\n/* Name.Constant */\n.highlight .ni {\n  color: #800080; }\n\n/* Name.Entity */\n.highlight .ne {\n  color: #990000;\n  font-weight: bold; }\n\n/* Name.Exception */\n.highlight .nf {\n  color: #990000;\n  font-weight: bold; }\n\n/* Name.Function */\n.highlight .nn {\n  color: #555555; }\n\n/* Name.Namespace */\n.highlight .nt {\n  color: #000080; }\n\n/* Name.Tag */\n.highlight .nv {\n  color: #008080; }\n\n/* Name.Variable */\n.highlight .ow {\n  font-weight: bold; }\n\n/* Operator.Word */\n.highlight .w {\n  color: #bbbbbb; }\n\n/* Text.Whitespace */\n.highlight .mf {\n  color: #009999; }\n\n/* Literal.Number.Float */\n.highlight .mh {\n  color: #009999; }\n\n/* Literal.Number.Hex */\n.highlight .mi {\n  color: #009999; }\n\n/* Literal.Number.Integer */\n.highlight .mo {\n  color: #009999; }\n\n/* Literal.Number.Oct */\n.highlight .sb {\n  color: #d14; }\n\n/* Literal.String.Backtick */\n.highlight .sc {\n  color: #d14; }\n\n/* Literal.String.Char */\n.highlight .sd {\n  color: #d14; }\n\n/* Literal.String.Doc */\n.highlight .s2 {\n  color: #d14; }\n\n/* Literal.String.Double */\n.highlight .se {\n  color: #d14; }\n\n/* Literal.String.Escape */\n.highlight .sh {\n  color: #d14; }\n\n/* Literal.String.Heredoc */\n.highlight .si {\n  color: #d14; }\n\n/* Literal.String.Interpol */\n.highlight .sx {\n  color: #d14; }\n\n/* Literal.String.Other */\n.highlight .sr {\n  color: #009926; }\n\n/* Literal.String.Regex */\n.highlight .s1 {\n  color: #d14; }\n\n/* Literal.String.Single */\n.highlight .ss {\n  color: #990073; }\n\n/* Literal.String.Symbol */\n.highlight .bp {\n  color: #999999; }\n\n/* Name.Builtin.Pseudo */\n.highlight .vc {\n  color: #008080; }\n\n/* Name.Variable.Class */\n.highlight .vg {\n  color: #008080; }\n\n/* Name.Variable.Global */\n.highlight .vi {\n  color: #008080; }\n\n/* Name.Variable.Instance */\n.highlight .il {\n  color: #009999; }\n\n/* Literal.Number.Integer.Long */\npre {\n  background-color: white; }\n\n.hljs {\n  display: block;\n  padding: 0.5em;\n  background: #ffffff;\n  overflow-x: auto;\n  word-wrap: normal;\n  white-space: pre;\n  color: #314361; }\n\n.hljs-comment,\n.hljs-template_comment,\n.hljs-javadoc,\n.hljs-comment * {\n  color: #999988;\n  font-style: italic; }\n\n.hljs-keyword,\n.method,\n.hljs-list .hljs-title,\n.clojure .hljs-built_in,\n.nginx .hljs-title,\n.hljs-tag .hljs-title,\n.setting .hljs-value,\n.hljs-winutils,\n.tex .hljs-command,\n.http .hljs-title,\n.hljs-request,\n.hljs-status {\n  color: #4a86ef;\n  font-weight: bold; }\n\n.hljs-envvar,\n.tex .hljs-special {\n  color: #660; }\n\n.hljs-string,\n.hljs-tag .hljs-value,\n.hljs-cdata,\n.hljs-filter .hljs-argument,\n.hljs-attr_selector,\n.apache .hljs-cbracket,\n.hljs-date,\n.hljs-regexp,\n.coffeescript .hljs-attribute {\n  color: #f2576d; }\n\n.hljs-sub .hljs-identifier,\n.hljs-pi,\n.hljs-tag,\n.hljs-tag .hljs-keyword,\n.hljs-decorator,\n.ini .hljs-title,\n.hljs-shebang,\n.hljs-prompt,\n.hljs-hexcolor,\n.hljs-rules .hljs-value,\n.css .hljs-value .hljs-number,\n.hljs-literal,\n.hljs-symbol,\n.ruby .hljs-symbol .hljs-string,\n.hljs-number,\n.css .hljs-function,\n.clojure .hljs-attribute {\n  color: #00b07d; }\n\n.hljs-class .hljs-title,\n.haskell .hljs-type,\n.smalltalk .hljs-class,\n.hljs-javadoctag,\n.hljs-yardoctag,\n.hljs-phpdoc,\n.hljs-typename,\n.hljs-tag .hljs-attribute,\n.hljs-doctype,\n.hljs-class .hljs-id,\n.hljs-built_in,\n.setting,\n.hljs-params,\n.hljs-variable,\n.clojure .hljs-title {\n  color: #3dafd4; }\n\n.css .hljs-tag,\n.hljs-rules .hljs-property,\n.hljs-pseudo,\n.hljs-subst {\n  color: #000; }\n\n.css .hljs-class,\n.css .hljs-id {\n  color: #9B703F; }\n\n.hljs-value .hljs-important {\n  color: #ff7700;\n  font-weight: bold; }\n\n.hljs-rules .hljs-keyword {\n  color: #C5AF75; }\n\n.hljs-annotation,\n.apache .hljs-sqbracket,\n.nginx .hljs-built_in {\n  color: #9B859D; }\n\n.hljs-preprocessor,\n.hljs-preprocessor *,\n.hljs-pragma {\n  color: #444; }\n\n.tex .hljs-formula {\n  background-color: #EEE;\n  font-style: italic; }\n\n.diff .hljs-header,\n.hljs-chunk {\n  color: #808080;\n  font-weight: bold; }\n\n.diff .hljs-change {\n  background-color: #BCCFF9; }\n\n.hljs-addition {\n  background-color: #BAEEBA; }\n\n.hljs-deletion {\n  background-color: #FFC8BD; }\n\n.hljs-comment .hljs-yardoctag {\n  font-weight: bold; }\n\nh1,\nh2,\nh3,\nh4,\nh5,\nh6 {\n  font-family: \"Eina\", \"Helvetica Neue\", Helvetica, sans-serif;\n  letter-spacing: -0.02em; }\n\na {\n  transition: color .2s; }\n  a:hover {\n    text-decoration: none; }\n\np.lg {\n  font-size: 18px;\n  font-weight: 400;\n  color: #898989; }\n  p.lg.strong {\n    font-weight: 500; }\n  p.lg.light {\n    color: #898989; }\n\np.sm {\n  font-size: 13px; }\n\np.xs {\n  font-size: 11px; }\n\n.subheading {\n  color: #888;\n  font-size: 15px; }\n\n@-webkit-keyframes fadeIn {\n  0% {\n    opacity: 0; }\n  100% {\n    opacity: 1; } }\n\n@keyframes fadeIn {\n  0% {\n    opacity: 0; }\n  100% {\n    opacity: 1; } }\n\n@-webkit-keyframes crossFadeInOut {\n  0%, 40%, 100% {\n    opacity: 0; }\n  50%, 90% {\n    opacity: 1; } }\n\n@keyframes crossFadeInOut {\n  0%, 40%, 100% {\n    opacity: 0; }\n  50%, 90% {\n    opacity: 1; } }\n\n@-webkit-keyframes fadeInUpSmall {\n  0% {\n    opacity: 0;\n    -webkit-transform: scale(0.667, 0.667) translateY(20px);\n            transform: scale(0.667, 0.667) translateY(20px); }\n  100% {\n    opacity: .5;\n    -webkit-transform: scale(0.667, 0.667) translateY(0);\n            transform: scale(0.667, 0.667) translateY(0); } }\n\n@keyframes fadeInUpSmall {\n  0% {\n    opacity: 0;\n    -webkit-transform: scale(0.667, 0.667) translateY(20px);\n            transform: scale(0.667, 0.667) translateY(20px); }\n  100% {\n    opacity: .5;\n    -webkit-transform: scale(0.667, 0.667) translateY(0);\n            transform: scale(0.667, 0.667) translateY(0); } }\n\n@-webkit-keyframes fadeInUp {\n  0% {\n    opacity: 0;\n    -webkit-transform: translateY(20px);\n            transform: translateY(20px); }\n  50% {\n    opacity: 1; }\n  100% {\n    opacity: 1;\n    -webkit-transform: translateY(0);\n            transform: translateY(0); } }\n\n@keyframes fadeInUp {\n  0% {\n    opacity: 0;\n    -webkit-transform: translateY(20px);\n            transform: translateY(20px); }\n  50% {\n    opacity: 1; }\n  100% {\n    opacity: 1;\n    -webkit-transform: translateY(0);\n            transform: translateY(0); } }\n\n@-webkit-keyframes fadeInDown {\n  0% {\n    opacity: 0;\n    -webkit-transform: translateY(-20px);\n            transform: translateY(-20px); }\n  50% {\n    opacity: 1; }\n  100% {\n    opacity: 1;\n    -webkit-transform: translateY(0);\n            transform: translateY(0); } }\n\n@keyframes fadeInDown {\n  0% {\n    opacity: 0;\n    -webkit-transform: translateY(-20px);\n            transform: translateY(-20px); }\n  50% {\n    opacity: 1; }\n  100% {\n    opacity: 1;\n    -webkit-transform: translateY(0);\n            transform: translateY(0); } }\n\n@-webkit-keyframes fadeOut {\n  0% {\n    opacity: 1; }\n  100% {\n    opacity: 0; } }\n\n@keyframes fadeOut {\n  0% {\n    opacity: 1; }\n  100% {\n    opacity: 0; } }\n\n@-webkit-keyframes fadeOutUp {\n  0% {\n    opacity: 1;\n    -webkit-transform: translateY(0);\n            transform: translateY(0); }\n  100% {\n    opacity: 0;\n    -webkit-transform: translateY(-20px);\n            transform: translateY(-20px); } }\n\n@keyframes fadeOutUp {\n  0% {\n    opacity: 1;\n    -webkit-transform: translateY(0);\n            transform: translateY(0); }\n  100% {\n    opacity: 0;\n    -webkit-transform: translateY(-20px);\n            transform: translateY(-20px); } }\n\n@-webkit-keyframes pulse {\n  0% {\n    -webkit-transform: scale3d(1, 1, 1);\n            transform: scale3d(1, 1, 1); }\n  20% {\n    -webkit-transform: scale3d(1.05, 1.05, 1);\n            transform: scale3d(1.05, 1.05, 1); }\n  100% {\n    -webkit-transform: scale3d(1, 1, 1);\n            transform: scale3d(1, 1, 1); } }\n\n@keyframes pulse {\n  0% {\n    -webkit-transform: scale3d(1, 1, 1);\n            transform: scale3d(1, 1, 1); }\n  20% {\n    -webkit-transform: scale3d(1.05, 1.05, 1);\n            transform: scale3d(1.05, 1.05, 1); }\n  100% {\n    -webkit-transform: scale3d(1, 1, 1);\n            transform: scale3d(1, 1, 1); } }\n\n@-webkit-keyframes tiltIn {\n  0% {\n    -webkit-transform: rotateX(-30deg);\n            transform: rotateX(-30deg); }\n  100% {\n    -webkit-transform: rotateX(0deg);\n            transform: rotateX(0deg); } }\n\n@keyframes tiltIn {\n  0% {\n    -webkit-transform: rotateX(-30deg);\n            transform: rotateX(-30deg); }\n  100% {\n    -webkit-transform: rotateX(0deg);\n            transform: rotateX(0deg); } }\n\n@-webkit-keyframes simpleHoverY {\n  0% {\n    -webkit-transform: translate3d(0, 0, 0);\n            transform: translate3d(0, 0, 0); }\n  50% {\n    -webkit-transform: translate3d(0, 10px, 0);\n            transform: translate3d(0, 10px, 0); }\n  100% {\n    -webkit-transform: translate3d(0, 0);\n            transform: translate3d(0, 0); } }\n\n@keyframes simpleHoverY {\n  0% {\n    -webkit-transform: translate3d(0, 0, 0);\n            transform: translate3d(0, 0, 0); }\n  50% {\n    -webkit-transform: translate3d(0, 10px, 0);\n            transform: translate3d(0, 10px, 0); }\n  100% {\n    -webkit-transform: translate3d(0, 0);\n            transform: translate3d(0, 0); } }\n\n@-webkit-keyframes simpleHoverX {\n  0% {\n    -webkit-transform: translate3d(0, 0, 0);\n            transform: translate3d(0, 0, 0); }\n  50% {\n    -webkit-transform: translate3d(225px, 0, 0);\n            transform: translate3d(225px, 0, 0); }\n  100% {\n    -webkit-transform: translate3d(0, 0);\n            transform: translate3d(0, 0); } }\n\n@keyframes simpleHoverX {\n  0% {\n    -webkit-transform: translate3d(0, 0, 0);\n            transform: translate3d(0, 0, 0); }\n  50% {\n    -webkit-transform: translate3d(225px, 0, 0);\n            transform: translate3d(225px, 0, 0); }\n  100% {\n    -webkit-transform: translate3d(0, 0);\n            transform: translate3d(0, 0); } }\n\n@-webkit-keyframes simpleHoverXSmall {\n  0% {\n    -webkit-transform: translate3d(0, 0, 0);\n            transform: translate3d(0, 0, 0); }\n  50% {\n    -webkit-transform: translate3d(50px, 0, 0);\n            transform: translate3d(50px, 0, 0); }\n  100% {\n    -webkit-transform: translate3d(0, 0);\n            transform: translate3d(0, 0); } }\n\n@keyframes simpleHoverXSmall {\n  0% {\n    -webkit-transform: translate3d(0, 0, 0);\n            transform: translate3d(0, 0, 0); }\n  50% {\n    -webkit-transform: translate3d(50px, 0, 0);\n            transform: translate3d(50px, 0, 0); }\n  100% {\n    -webkit-transform: translate3d(0, 0);\n            transform: translate3d(0, 0); } }\n\n@-webkit-keyframes inertiaTilt {\n  0% {\n    -webkit-transform: rotate(5deg);\n            transform: rotate(5deg); }\n  15% {\n    -webkit-transform: rotate(-1deg);\n            transform: rotate(-1deg); }\n  30% {\n    -webkit-transform: rotate(1deg);\n            transform: rotate(1deg); }\n  40% {\n    -webkit-transform: rotate(0deg);\n            transform: rotate(0deg); }\n  50% {\n    -webkit-transform: rotate(-5deg);\n            transform: rotate(-5deg); }\n  65% {\n    -webkit-transform: rotate(1deg);\n            transform: rotate(1deg); }\n  80% {\n    -webkit-transform: rotate(-1deg);\n            transform: rotate(-1deg); }\n  90% {\n    -webkit-transform: rotate(0deg);\n            transform: rotate(0deg); }\n  100% {\n    -webkit-transform: rotate(5deg);\n            transform: rotate(5deg); } }\n\n@keyframes inertiaTilt {\n  0% {\n    -webkit-transform: rotate(5deg);\n            transform: rotate(5deg); }\n  15% {\n    -webkit-transform: rotate(-1deg);\n            transform: rotate(-1deg); }\n  30% {\n    -webkit-transform: rotate(1deg);\n            transform: rotate(1deg); }\n  40% {\n    -webkit-transform: rotate(0deg);\n            transform: rotate(0deg); }\n  50% {\n    -webkit-transform: rotate(-5deg);\n            transform: rotate(-5deg); }\n  65% {\n    -webkit-transform: rotate(1deg);\n            transform: rotate(1deg); }\n  80% {\n    -webkit-transform: rotate(-1deg);\n            transform: rotate(-1deg); }\n  90% {\n    -webkit-transform: rotate(0deg);\n            transform: rotate(0deg); }\n  100% {\n    -webkit-transform: rotate(5deg);\n            transform: rotate(5deg); } }\n\n@-webkit-keyframes hoverY {\n  0% {\n    -webkit-transform: translate(0, 0) scale(1);\n            transform: translate(0, 0) scale(1); }\n  10% {\n    -webkit-transform: translate(1px, 2px) scale(1);\n            transform: translate(1px, 2px) scale(1); }\n  20% {\n    -webkit-transform: translate(0, -3px) scale(1);\n            transform: translate(0, -3px) scale(1); }\n  30% {\n    -webkit-transform: translate(-1px, 3px) scale(1);\n            transform: translate(-1px, 3px) scale(1); }\n  40% {\n    -webkit-transform: translate(0, -1px) scale(1);\n            transform: translate(0, -1px) scale(1); }\n  50% {\n    -webkit-transform: translate(-1px, 0) scale(1);\n            transform: translate(-1px, 0) scale(1); }\n  60% {\n    -webkit-transform: translate(0, -3px) scale(1);\n            transform: translate(0, -3px) scale(1); }\n  70% {\n    -webkit-transform: translate(1px, 2px) scale(1);\n            transform: translate(1px, 2px) scale(1); }\n  80% {\n    -webkit-transform: translate(0, -3px) scale(1);\n            transform: translate(0, -3px) scale(1); }\n  90% {\n    -webkit-transform: translate(-1px, 1px) scale(1);\n            transform: translate(-1px, 1px) scale(1); }\n  100% {\n    -webkit-transform: translate(0, 0) scale(1);\n            transform: translate(0, 0) scale(1); } }\n\n@keyframes hoverY {\n  0% {\n    -webkit-transform: translate(0, 0) scale(1);\n            transform: translate(0, 0) scale(1); }\n  10% {\n    -webkit-transform: translate(1px, 2px) scale(1);\n            transform: translate(1px, 2px) scale(1); }\n  20% {\n    -webkit-transform: translate(0, -3px) scale(1);\n            transform: translate(0, -3px) scale(1); }\n  30% {\n    -webkit-transform: translate(-1px, 3px) scale(1);\n            transform: translate(-1px, 3px) scale(1); }\n  40% {\n    -webkit-transform: translate(0, -1px) scale(1);\n            transform: translate(0, -1px) scale(1); }\n  50% {\n    -webkit-transform: translate(-1px, 0) scale(1);\n            transform: translate(-1px, 0) scale(1); }\n  60% {\n    -webkit-transform: translate(0, -3px) scale(1);\n            transform: translate(0, -3px) scale(1); }\n  70% {\n    -webkit-transform: translate(1px, 2px) scale(1);\n            transform: translate(1px, 2px) scale(1); }\n  80% {\n    -webkit-transform: translate(0, -3px) scale(1);\n            transform: translate(0, -3px) scale(1); }\n  90% {\n    -webkit-transform: translate(-1px, 1px) scale(1);\n            transform: translate(-1px, 1px) scale(1); }\n  100% {\n    -webkit-transform: translate(0, 0) scale(1);\n            transform: translate(0, 0) scale(1); } }\n\n@-webkit-keyframes figureeight {\n  0% {\n    -webkit-transform: translate3d(0, 0, 0);\n            transform: translate3d(0, 0, 0); }\n  2% {\n    -webkit-transform: translate3d(1px, 0.5px, 0);\n            transform: translate3d(1px, 0.5px, 0); }\n  5% {\n    -webkit-transform: translate3d(2px, 1px, 0);\n            transform: translate3d(2px, 1px, 0); }\n  7% {\n    -webkit-transform: translate3d(3px, 1.5px, 0);\n            transform: translate3d(3px, 1.5px, 0); }\n  10% {\n    -webkit-transform: translate3d(4px, 1.8px, 0);\n            transform: translate3d(4px, 1.8px, 0); }\n  12% {\n    -webkit-transform: translate3d(5px, 2px, 0);\n            transform: translate3d(5px, 2px, 0); }\n  15% {\n    -webkit-transform: translate3d(6px, 1.8px, 0);\n            transform: translate3d(6px, 1.8px, 0); }\n  17% {\n    -webkit-transform: translate3d(7px, 1.5px, 0);\n            transform: translate3d(7px, 1.5px, 0); }\n  20% {\n    -webkit-transform: translate3d(8px, 1px, 0);\n            transform: translate3d(8px, 1px, 0); }\n  22% {\n    -webkit-transform: translate3d(8.6px, 0.5px, 0);\n            transform: translate3d(8.6px, 0.5px, 0); }\n  25% {\n    -webkit-transform: translate3d(9px, 0, 0);\n            transform: translate3d(9px, 0, 0); }\n  27% {\n    -webkit-transform: translate3d(8.3px, -0.5px, 0);\n            transform: translate3d(8.3px, -0.5px, 0); }\n  30% {\n    -webkit-transform: translate3d(8px, -1px, 0);\n            transform: translate3d(8px, -1px, 0); }\n  32% {\n    -webkit-transform: translate3d(7px, -1.5px, 0);\n            transform: translate3d(7px, -1.5px, 0); }\n  35% {\n    -webkit-transform: translate3d(6px, -1.8px, 0);\n            transform: translate3d(6px, -1.8px, 0); }\n  37% {\n    -webkit-transform: translate3d(5px, -2px, 0);\n            transform: translate3d(5px, -2px, 0); }\n  40% {\n    -webkit-transform: translate3d(4px, -1.8px, 0);\n            transform: translate3d(4px, -1.8px, 0); }\n  42% {\n    -webkit-transform: translate3d(3px, -1.5px, 0);\n            transform: translate3d(3px, -1.5px, 0); }\n  45% {\n    -webkit-transform: translate3d(2px, -1px, 0);\n            transform: translate3d(2px, -1px, 0); }\n  47% {\n    -webkit-transform: translate3d(1px, -0.5px, 0);\n            transform: translate3d(1px, -0.5px, 0); }\n  50% {\n    -webkit-transform: translate3d(0, 0, 0);\n            transform: translate3d(0, 0, 0); }\n  52% {\n    -webkit-transform: translate3d(-1px, 0.5px, 0);\n            transform: translate3d(-1px, 0.5px, 0); }\n  55% {\n    -webkit-transform: translate3d(-2px, 1px, 0);\n            transform: translate3d(-2px, 1px, 0); }\n  57% {\n    -webkit-transform: translate3d(-3px, 1.5px, 0);\n            transform: translate3d(-3px, 1.5px, 0); }\n  60% {\n    -webkit-transform: translate3d(-4px, 1.8px, 0);\n            transform: translate3d(-4px, 1.8px, 0); }\n  62% {\n    -webkit-transform: translate3d(-5px, 2px, 0);\n            transform: translate3d(-5px, 2px, 0); }\n  65% {\n    -webkit-transform: translate3d(-6px, 1.8px, 0);\n            transform: translate3d(-6px, 1.8px, 0); }\n  67% {\n    -webkit-transform: translate3d(-7px, 1.5px, 0);\n            transform: translate3d(-7px, 1.5px, 0); }\n  70% {\n    -webkit-transform: translate3d(-8px, 1px, 0);\n            transform: translate3d(-8px, 1px, 0); }\n  72% {\n    -webkit-transform: translate3d(-8.6px, 0.5px, 0);\n            transform: translate3d(-8.6px, 0.5px, 0); }\n  75% {\n    -webkit-transform: translate3d(-9px, 0, 0);\n            transform: translate3d(-9px, 0, 0); }\n  77% {\n    -webkit-transform: translate3d(-8.3px, -1px, 0);\n            transform: translate3d(-8.3px, -1px, 0); }\n  80% {\n    -webkit-transform: translate3d(-8px, -2px, 0);\n            transform: translate3d(-8px, -2px, 0); }\n  82% {\n    -webkit-transform: translate3d(-7px, -1.5px, 0);\n            transform: translate3d(-7px, -1.5px, 0); }\n  85% {\n    -webkit-transform: translate3d(-6px, -1.8px, 0);\n            transform: translate3d(-6px, -1.8px, 0); }\n  87% {\n    -webkit-transform: translate3d(-5px, -2px, 0);\n            transform: translate3d(-5px, -2px, 0); }\n  90% {\n    -webkit-transform: translate3d(-4px, -1.8px, 0);\n            transform: translate3d(-4px, -1.8px, 0); }\n  92% {\n    -webkit-transform: translate3d(-3px, -1.5px, 0);\n            transform: translate3d(-3px, -1.5px, 0); }\n  95% {\n    -webkit-transform: translate3d(-2px, -1px, 0);\n            transform: translate3d(-2px, -1px, 0); }\n  97% {\n    -webkit-transform: translate3d(-1px, -0.5px, 0);\n            transform: translate3d(-1px, -0.5px, 0); }\n  100% {\n    -webkit-transform: translate3d(0, 0, 0);\n            transform: translate3d(0, 0, 0); } }\n\n@keyframes figureeight {\n  0% {\n    -webkit-transform: translate3d(0, 0, 0);\n            transform: translate3d(0, 0, 0); }\n  2% {\n    -webkit-transform: translate3d(1px, 0.5px, 0);\n            transform: translate3d(1px, 0.5px, 0); }\n  5% {\n    -webkit-transform: translate3d(2px, 1px, 0);\n            transform: translate3d(2px, 1px, 0); }\n  7% {\n    -webkit-transform: translate3d(3px, 1.5px, 0);\n            transform: translate3d(3px, 1.5px, 0); }\n  10% {\n    -webkit-transform: translate3d(4px, 1.8px, 0);\n            transform: translate3d(4px, 1.8px, 0); }\n  12% {\n    -webkit-transform: translate3d(5px, 2px, 0);\n            transform: translate3d(5px, 2px, 0); }\n  15% {\n    -webkit-transform: translate3d(6px, 1.8px, 0);\n            transform: translate3d(6px, 1.8px, 0); }\n  17% {\n    -webkit-transform: translate3d(7px, 1.5px, 0);\n            transform: translate3d(7px, 1.5px, 0); }\n  20% {\n    -webkit-transform: translate3d(8px, 1px, 0);\n            transform: translate3d(8px, 1px, 0); }\n  22% {\n    -webkit-transform: translate3d(8.6px, 0.5px, 0);\n            transform: translate3d(8.6px, 0.5px, 0); }\n  25% {\n    -webkit-transform: translate3d(9px, 0, 0);\n            transform: translate3d(9px, 0, 0); }\n  27% {\n    -webkit-transform: translate3d(8.3px, -0.5px, 0);\n            transform: translate3d(8.3px, -0.5px, 0); }\n  30% {\n    -webkit-transform: translate3d(8px, -1px, 0);\n            transform: translate3d(8px, -1px, 0); }\n  32% {\n    -webkit-transform: translate3d(7px, -1.5px, 0);\n            transform: translate3d(7px, -1.5px, 0); }\n  35% {\n    -webkit-transform: translate3d(6px, -1.8px, 0);\n            transform: translate3d(6px, -1.8px, 0); }\n  37% {\n    -webkit-transform: translate3d(5px, -2px, 0);\n            transform: translate3d(5px, -2px, 0); }\n  40% {\n    -webkit-transform: translate3d(4px, -1.8px, 0);\n            transform: translate3d(4px, -1.8px, 0); }\n  42% {\n    -webkit-transform: translate3d(3px, -1.5px, 0);\n            transform: translate3d(3px, -1.5px, 0); }\n  45% {\n    -webkit-transform: translate3d(2px, -1px, 0);\n            transform: translate3d(2px, -1px, 0); }\n  47% {\n    -webkit-transform: translate3d(1px, -0.5px, 0);\n            transform: translate3d(1px, -0.5px, 0); }\n  50% {\n    -webkit-transform: translate3d(0, 0, 0);\n            transform: translate3d(0, 0, 0); }\n  52% {\n    -webkit-transform: translate3d(-1px, 0.5px, 0);\n            transform: translate3d(-1px, 0.5px, 0); }\n  55% {\n    -webkit-transform: translate3d(-2px, 1px, 0);\n            transform: translate3d(-2px, 1px, 0); }\n  57% {\n    -webkit-transform: translate3d(-3px, 1.5px, 0);\n            transform: translate3d(-3px, 1.5px, 0); }\n  60% {\n    -webkit-transform: translate3d(-4px, 1.8px, 0);\n            transform: translate3d(-4px, 1.8px, 0); }\n  62% {\n    -webkit-transform: translate3d(-5px, 2px, 0);\n            transform: translate3d(-5px, 2px, 0); }\n  65% {\n    -webkit-transform: translate3d(-6px, 1.8px, 0);\n            transform: translate3d(-6px, 1.8px, 0); }\n  67% {\n    -webkit-transform: translate3d(-7px, 1.5px, 0);\n            transform: translate3d(-7px, 1.5px, 0); }\n  70% {\n    -webkit-transform: translate3d(-8px, 1px, 0);\n            transform: translate3d(-8px, 1px, 0); }\n  72% {\n    -webkit-transform: translate3d(-8.6px, 0.5px, 0);\n            transform: translate3d(-8.6px, 0.5px, 0); }\n  75% {\n    -webkit-transform: translate3d(-9px, 0, 0);\n            transform: translate3d(-9px, 0, 0); }\n  77% {\n    -webkit-transform: translate3d(-8.3px, -1px, 0);\n            transform: translate3d(-8.3px, -1px, 0); }\n  80% {\n    -webkit-transform: translate3d(-8px, -2px, 0);\n            transform: translate3d(-8px, -2px, 0); }\n  82% {\n    -webkit-transform: translate3d(-7px, -1.5px, 0);\n            transform: translate3d(-7px, -1.5px, 0); }\n  85% {\n    -webkit-transform: translate3d(-6px, -1.8px, 0);\n            transform: translate3d(-6px, -1.8px, 0); }\n  87% {\n    -webkit-transform: translate3d(-5px, -2px, 0);\n            transform: translate3d(-5px, -2px, 0); }\n  90% {\n    -webkit-transform: translate3d(-4px, -1.8px, 0);\n            transform: translate3d(-4px, -1.8px, 0); }\n  92% {\n    -webkit-transform: translate3d(-3px, -1.5px, 0);\n            transform: translate3d(-3px, -1.5px, 0); }\n  95% {\n    -webkit-transform: translate3d(-2px, -1px, 0);\n            transform: translate3d(-2px, -1px, 0); }\n  97% {\n    -webkit-transform: translate3d(-1px, -0.5px, 0);\n            transform: translate3d(-1px, -0.5px, 0); }\n  100% {\n    -webkit-transform: translate3d(0, 0, 0);\n            transform: translate3d(0, 0, 0); } }\n\n@-webkit-keyframes dotExpand {\n  0% {\n    -webkit-transform: scale3d(0.1, 0.1, 1);\n            transform: scale3d(0.1, 0.1, 1);\n    opacity: 1; }\n  100% {\n    -webkit-transform: scale3d(2, 2, 1);\n            transform: scale3d(2, 2, 1);\n    opacity: 0; } }\n\n@keyframes dotExpand {\n  0% {\n    -webkit-transform: scale3d(0.1, 0.1, 1);\n            transform: scale3d(0.1, 0.1, 1);\n    opacity: 1; }\n  100% {\n    -webkit-transform: scale3d(2, 2, 1);\n            transform: scale3d(2, 2, 1);\n    opacity: 0; } }\n\n@-webkit-keyframes glow {\n  0%, 30%, 100% {\n    opacity: 0; }\n  15% {\n    opacity: 1; } }\n\n@keyframes glow {\n  0%, 30%, 100% {\n    opacity: 0; }\n  15% {\n    opacity: 1; } }\n\n@-webkit-keyframes spread {\n  0% {\n    -webkit-transform: scaleX(1);\n            transform: scaleX(1);\n    opacity: 1; }\n  50% {\n    -webkit-transform: scaleX(0.8);\n            transform: scaleX(0.8);\n    opacity: .5; }\n  100% {\n    -webkit-transform: scaleX(1);\n            transform: scaleX(1);\n    opacity: 1; } }\n\n@keyframes spread {\n  0% {\n    -webkit-transform: scaleX(1);\n            transform: scaleX(1);\n    opacity: 1; }\n  50% {\n    -webkit-transform: scaleX(0.8);\n            transform: scaleX(0.8);\n    opacity: .5; }\n  100% {\n    -webkit-transform: scaleX(1);\n            transform: scaleX(1);\n    opacity: 1; } }\n\n@-webkit-keyframes spin {\n  0% {\n    -webkit-transform: rotate(0deg);\n            transform: rotate(0deg); }\n  100% {\n    -webkit-transform: rotate(360deg);\n            transform: rotate(360deg); } }\n\n@keyframes spin {\n  0% {\n    -webkit-transform: rotate(0deg);\n            transform: rotate(0deg); }\n  100% {\n    -webkit-transform: rotate(360deg);\n            transform: rotate(360deg); } }\n\n@-webkit-keyframes floatingCloud {\n  0% {\n    -webkit-transform: scale3d(0.6, 0.6, 1);\n            transform: scale3d(0.6, 0.6, 1);\n    opacity: 0; }\n  5% {\n    opacity: .9; }\n  10% {\n    opacity: 1; }\n  95% {\n    opacity: 1; }\n  100% {\n    -webkit-transform: translate3d(150%, 100%, 0);\n            transform: translate3d(150%, 100%, 0);\n    opacity: 0; } }\n\n@keyframes floatingCloud {\n  0% {\n    -webkit-transform: scale3d(0.6, 0.6, 1);\n            transform: scale3d(0.6, 0.6, 1);\n    opacity: 0; }\n  5% {\n    opacity: .9; }\n  10% {\n    opacity: 1; }\n  95% {\n    opacity: 1; }\n  100% {\n    -webkit-transform: translate3d(150%, 100%, 0);\n            transform: translate3d(150%, 100%, 0);\n    opacity: 0; } }\n\n@-webkit-keyframes floatingCloud-2 {\n  0% {\n    -webkit-transform: scale3d(0.2, 0.2, 1);\n            transform: scale3d(0.2, 0.2, 1);\n    opacity: 0; }\n  5% {\n    opacity: .9; }\n  20% {\n    opacity: 1; }\n  95% {\n    opacity: 1; }\n  100% {\n    -webkit-transform: translate3d(110%, 30%, 0) scale3d(0.4, 0.4, 1);\n            transform: translate3d(110%, 30%, 0) scale3d(0.4, 0.4, 1);\n    opacity: 0; } }\n\n@keyframes floatingCloud-2 {\n  0% {\n    -webkit-transform: scale3d(0.2, 0.2, 1);\n            transform: scale3d(0.2, 0.2, 1);\n    opacity: 0; }\n  5% {\n    opacity: .9; }\n  20% {\n    opacity: 1; }\n  95% {\n    opacity: 1; }\n  100% {\n    -webkit-transform: translate3d(110%, 30%, 0) scale3d(0.4, 0.4, 1);\n            transform: translate3d(110%, 30%, 0) scale3d(0.4, 0.4, 1);\n    opacity: 0; } }\n\n@-webkit-keyframes floatingCloud-3 {\n  0% {\n    -webkit-transform: translate3d(150%, 70%, 0) scale3d(0.8, 0.8, 1);\n            transform: translate3d(150%, 70%, 0) scale3d(0.8, 0.8, 1);\n    opacity: 0; }\n  5% {\n    opacity: 1; }\n  20% {\n    opacity: 1; }\n  90% {\n    opacity: .9; }\n  100% {\n    -webkit-transform: scale3d(0.4, 0.4, 1);\n            transform: scale3d(0.4, 0.4, 1);\n    opacity: 0; } }\n\n@keyframes floatingCloud-3 {\n  0% {\n    -webkit-transform: translate3d(150%, 70%, 0) scale3d(0.8, 0.8, 1);\n            transform: translate3d(150%, 70%, 0) scale3d(0.8, 0.8, 1);\n    opacity: 0; }\n  5% {\n    opacity: 1; }\n  20% {\n    opacity: 1; }\n  90% {\n    opacity: .9; }\n  100% {\n    -webkit-transform: scale3d(0.4, 0.4, 1);\n            transform: scale3d(0.4, 0.4, 1);\n    opacity: 0; } }\n\n@-webkit-keyframes floatingCloud-4 {\n  0% {\n    -webkit-transform: scale3d(1.2, 1.2, 1);\n            transform: scale3d(1.2, 1.2, 1);\n    -webkit-transform: translate3d(110%, 150%, 0);\n            transform: translate3d(110%, 150%, 0);\n    opacity: 0; }\n  5% {\n    opacity: 1; }\n  90% {\n    opacity: 1; }\n  95% {\n    opacity: .9; }\n  100% {\n    -webkit-transform: scale3d(0.8, 0.8, 1);\n            transform: scale3d(0.8, 0.8, 1);\n    opacity: 0; } }\n\n@keyframes floatingCloud-4 {\n  0% {\n    -webkit-transform: scale3d(1.2, 1.2, 1);\n            transform: scale3d(1.2, 1.2, 1);\n    -webkit-transform: translate3d(110%, 150%, 0);\n            transform: translate3d(110%, 150%, 0);\n    opacity: 0; }\n  5% {\n    opacity: 1; }\n  90% {\n    opacity: 1; }\n  95% {\n    opacity: .9; }\n  100% {\n    -webkit-transform: scale3d(0.8, 0.8, 1);\n            transform: scale3d(0.8, 0.8, 1);\n    opacity: 0; } }\n\n@-webkit-keyframes rainDrop {\n  0% {\n    -webkit-transform: translate3d(0, 0, 0);\n            transform: translate3d(0, 0, 0);\n    opacity: 0; }\n  5% {\n    opacity: .9; }\n  10% {\n    opacity: 1; }\n  95% {\n    opacity: 1; }\n  100% {\n    -webkit-transform: translate3d(0, 800%, 0);\n            transform: translate3d(0, 800%, 0);\n    opacity: 0; } }\n\n@keyframes rainDrop {\n  0% {\n    -webkit-transform: translate3d(0, 0, 0);\n            transform: translate3d(0, 0, 0);\n    opacity: 0; }\n  5% {\n    opacity: .9; }\n  10% {\n    opacity: 1; }\n  95% {\n    opacity: 1; }\n  100% {\n    -webkit-transform: translate3d(0, 800%, 0);\n            transform: translate3d(0, 800%, 0);\n    opacity: 0; } }\n\n@-webkit-keyframes screenPop-1 {\n  0% {\n    opacity: 1;\n    z-index: 0; }\n  89% {\n    opacity: 1; }\n  95% {\n    -webkit-transform: scale3d(1, 1, 1);\n            transform: scale3d(1, 1, 1);\n    opacity: 0; }\n  96% {\n    -webkit-transform: scale3d(1.1, 1.1, 1);\n            transform: scale3d(1.1, 1.1, 1); }\n  100% {\n    opacity: 1;\n    -webkit-transform: scale3d(1, 1, 1);\n            transform: scale3d(1, 1, 1); } }\n\n@keyframes screenPop-1 {\n  0% {\n    opacity: 1;\n    z-index: 0; }\n  89% {\n    opacity: 1; }\n  95% {\n    -webkit-transform: scale3d(1, 1, 1);\n            transform: scale3d(1, 1, 1);\n    opacity: 0; }\n  96% {\n    -webkit-transform: scale3d(1.1, 1.1, 1);\n            transform: scale3d(1.1, 1.1, 1); }\n  100% {\n    opacity: 1;\n    -webkit-transform: scale3d(1, 1, 1);\n            transform: scale3d(1, 1, 1); } }\n\n@-webkit-keyframes screenPop-2 {\n  0% {\n    opacity: 0; }\n  30% {\n    -webkit-transform: scale3d(1, 1, 1);\n            transform: scale3d(1, 1, 1);\n    opacity: 0; }\n  31% {\n    -webkit-transform: scale3d(1.1, 1.1, 1);\n            transform: scale3d(1.1, 1.1, 1); }\n  35% {\n    -webkit-transform: scale3d(1, 1, 1);\n            transform: scale3d(1, 1, 1);\n    opacity: 1; }\n  69% {\n    opacity: 1; }\n  70% {\n    opacity: 0; }\n  100% {\n    opacity: 0; } }\n\n@keyframes screenPop-2 {\n  0% {\n    opacity: 0; }\n  30% {\n    -webkit-transform: scale3d(1, 1, 1);\n            transform: scale3d(1, 1, 1);\n    opacity: 0; }\n  31% {\n    -webkit-transform: scale3d(1.1, 1.1, 1);\n            transform: scale3d(1.1, 1.1, 1); }\n  35% {\n    -webkit-transform: scale3d(1, 1, 1);\n            transform: scale3d(1, 1, 1);\n    opacity: 1; }\n  69% {\n    opacity: 1; }\n  70% {\n    opacity: 0; }\n  100% {\n    opacity: 0; } }\n\n@-webkit-keyframes screenPop-3 {\n  0% {\n    opacity: 0; }\n  63% {\n    -webkit-transform: scale3d(1, 1, 1);\n            transform: scale3d(1, 1, 1);\n    opacity: 0; }\n  64% {\n    -webkit-transform: scale3d(1.1, 1.1, 1);\n            transform: scale3d(1.1, 1.1, 1); }\n  68% {\n    -webkit-transform: scale3d(1, 1, 1);\n            transform: scale3d(1, 1, 1);\n    opacity: 1; }\n  96% {\n    opacity: 1; }\n  100% {\n    opacity: 0; } }\n\n@keyframes screenPop-3 {\n  0% {\n    opacity: 0; }\n  63% {\n    -webkit-transform: scale3d(1, 1, 1);\n            transform: scale3d(1, 1, 1);\n    opacity: 0; }\n  64% {\n    -webkit-transform: scale3d(1.1, 1.1, 1);\n            transform: scale3d(1.1, 1.1, 1); }\n  68% {\n    -webkit-transform: scale3d(1, 1, 1);\n            transform: scale3d(1, 1, 1);\n    opacity: 1; }\n  96% {\n    opacity: 1; }\n  100% {\n    opacity: 0; } }\n\n@-webkit-keyframes home-app-group-iphone {\n  0% {\n    -webkit-transform: rotateY(15deg) translate3d(80px, 0, 0);\n            transform: rotateY(15deg) translate3d(80px, 0, 0); }\n  100% {\n    -webkit-transform: rotateY(15deg) translate3d(0, 0, 0);\n            transform: rotateY(15deg) translate3d(0, 0, 0); } }\n\n@keyframes home-app-group-iphone {\n  0% {\n    -webkit-transform: rotateY(15deg) translate3d(80px, 0, 0);\n            transform: rotateY(15deg) translate3d(80px, 0, 0); }\n  100% {\n    -webkit-transform: rotateY(15deg) translate3d(0, 0, 0);\n            transform: rotateY(15deg) translate3d(0, 0, 0); } }\n\n@-webkit-keyframes home-app-group-android {\n  0% {\n    -webkit-transform: rotateY(15deg) translate3d(-74px, 40px, 0);\n            transform: rotateY(15deg) translate3d(-74px, 40px, 0); }\n  100% {\n    -webkit-transform: rotateY(15deg) translate3d(0, 0, 0);\n            transform: rotateY(15deg) translate3d(0, 0, 0); } }\n\n@keyframes home-app-group-android {\n  0% {\n    -webkit-transform: rotateY(15deg) translate3d(-74px, 40px, 0);\n            transform: rotateY(15deg) translate3d(-74px, 40px, 0); }\n  100% {\n    -webkit-transform: rotateY(15deg) translate3d(0, 0, 0);\n            transform: rotateY(15deg) translate3d(0, 0, 0); } }\n\n@-webkit-keyframes home-app-iphone {\n  0% {\n    -webkit-transform: translate3d(30px, -10px, 0);\n            transform: translate3d(30px, -10px, 0); }\n  100% {\n    -webkit-transform: translate3d(0, 0, 0);\n            transform: translate3d(0, 0, 0); } }\n\n@keyframes home-app-iphone {\n  0% {\n    -webkit-transform: translate3d(30px, -10px, 0);\n            transform: translate3d(30px, -10px, 0); }\n  100% {\n    -webkit-transform: translate3d(0, 0, 0);\n            transform: translate3d(0, 0, 0); } }\n\n@-webkit-keyframes home-app-android {\n  0% {\n    -webkit-transform: translate3d(10px, -4px, 0);\n            transform: translate3d(10px, -4px, 0); }\n  100% {\n    -webkit-transform: translate3d(0, 0, 0);\n            transform: translate3d(0, 0, 0); } }\n\n@keyframes home-app-android {\n  0% {\n    -webkit-transform: translate3d(10px, -4px, 0);\n            transform: translate3d(10px, -4px, 0); }\n  100% {\n    -webkit-transform: translate3d(0, 0, 0);\n            transform: translate3d(0, 0, 0); } }\n\n@-webkit-keyframes carousel {\n  0% {\n    -webkit-transform: translateX(0);\n            transform: translateX(0); }\n  100% {\n    -webkit-transform: translateX(-50%);\n            transform: translateX(-50%); } }\n\n@keyframes carousel {\n  0% {\n    -webkit-transform: translateX(0);\n            transform: translateX(0); }\n  100% {\n    -webkit-transform: translateX(-50%);\n            transform: translateX(-50%); } }\n\n.banner {\n  text-align: center; }\n  .banner--hero .container {\n    max-width: 700px; }\n  .banner--hero h1 {\n    margin-top: 2em;\n    font-size: 36px;\n    margin-bottom: 1.4em; }\n  .banner--hero p {\n    font-size: 16px;\n    line-height: 1.8em; }\n\n.bar.navy {\n  background: linear-gradient(to right, #1d2534 0%, #243452 100%); }\n  .bar.navy h1,\n  .bar.navy h2,\n  .bar.navy h3,\n  .bar.navy h4,\n  .bar.navy h5 {\n    color: white; }\n  .bar.navy p {\n    color: #a2b5d6; }\n\n.bar h1,\n.bar h2,\n.bar h3,\n.bar h4,\n.bar h5 {\n  font-weight: 600; }\n\n.bar p {\n  margin-bottom: 27px; }\n\n.bar .btn {\n  padding: 20px 21px 15px; }\n\n.bar .hero {\n  padding: 95px 0 101px; }\n\nbar-chart,\n.survey-layout main svg {\n  width: 100%;\n  display: block;\n  margin-bottom: 48px; }\n  bar-chart > svg,\n  .survey-layout main svg > svg {\n    width: 100%; }\n  bar-chart .tick line,\n  .survey-layout main svg .tick line {\n    opacity: 0; }\n  bar-chart .tick tspan,\n  .survey-layout main svg .tick tspan {\n    font-size: 12px;\n    font-weight: 500;\n    -webkit-font-smoothing: subpixel-antialiased; }\n  bar-chart .c3-text,\n  .survey-layout main svg .c3-text {\n    font-size: 11px;\n    font-weight: 500;\n    -webkit-font-smoothing: subpixel-antialiased; }\n  bar-chart .domain,\n  .survey-layout main svg .domain {\n    opacity: 0; }\n  bar-chart .c3-grid line,\n  .survey-layout main svg .c3-grid line {\n    stroke: #eee;\n    stroke-dasharray: 0; }\n  bar-chart .c3-bar._expanded_,\n  .survey-layout main svg .c3-bar._expanded_ {\n    fill-opacity: 1; }\n\n.checkmark-list--large {\n  max-width: 380px; }\n  .checkmark-list--large li {\n    line-height: 26px;\n    font-size: 16px;\n    letter-spacing: -0.01em;\n    color: #616E7E;\n    display: -ms-flexbox;\n    display: flex; }\n  .checkmark-list--large li + li {\n    margin-top: 20px; }\n  .checkmark-list--large i {\n    margin-right: 6px;\n    position: relative;\n    width: 24px;\n    height: 24px;\n    -ms-flex: 0 0 24px;\n        flex: 0 0 24px;\n    display: -ms-flexbox;\n    display: flex;\n    -ms-flex-align: center;\n        align-items: center;\n    -ms-flex-pack: center;\n        justify-content: center;\n    border-radius: 100%;\n    background-color: #73849A;\n    z-index: -1;\n    margin-right: 16px;\n    -webkit-transform: translateY(2px);\n            transform: translateY(2px); }\n  .checkmark-list--large ion-icon {\n    font-size: 16px;\n    color: #fff; }\n  .checkmark-list--large hgroup h5 {\n    margin-top: -2px;\n    margin-bottom: 0;\n    line-height: 33px;\n    font-size: 16px;\n    letter-spacing: -0.01em;\n    color: #3C536F;\n    font-weight: 600; }\n  .checkmark-list--large hgroup p {\n    line-height: 23px;\n    font-size: 14px;\n    letter-spacing: -0.01em;\n    color: #92A1B3; }\n\n.checkmark-list--small {\n  margin: 0;\n  padding: 0; }\n  .checkmark-list--small li {\n    line-height: 13px;\n    font-size: 12px;\n    color: #5B708B;\n    display: -ms-flexbox;\n    display: flex; }\n  .checkmark-list--small ion-icon {\n    font-size: 15px;\n    color: #92A1B3;\n    -ms-flex: 0 0 15px;\n        flex: 0 0 15px;\n    margin-right: 6px;\n    -webkit-transform: translateY(4px);\n            transform: translateY(4px); }\n\n.modal form,\n.form-inline {\n  max-width: 420px; }\n  .modal form input,\n  .modal form .select-wrapper,\n  .modal form textarea,\n  .form-inline input,\n  .form-inline .select-wrapper,\n  .form-inline textarea {\n    border: 1px solid #e1e5ed;\n    font-weight: 500;\n    float: left;\n    border-radius: 4px;\n    transition: border-color .2s;\n    box-shadow: none; }\n    .modal form input::-webkit-input-placeholder,\n    .modal form .select-wrapper::-webkit-input-placeholder,\n    .modal form textarea::-webkit-input-placeholder,\n    .form-inline input::-webkit-input-placeholder,\n    .form-inline .select-wrapper::-webkit-input-placeholder,\n    .form-inline textarea::-webkit-input-placeholder {\n      color: #a0a5b0; }\n    .modal form input:-ms-input-placeholder,\n    .modal form .select-wrapper:-ms-input-placeholder,\n    .modal form textarea:-ms-input-placeholder,\n    .form-inline input:-ms-input-placeholder,\n    .form-inline .select-wrapper:-ms-input-placeholder,\n    .form-inline textarea:-ms-input-placeholder {\n      color: #a0a5b0; }\n    .modal form input:valid,\n    .modal form .select-wrapper:valid,\n    .modal form textarea:valid,\n    .form-inline input:valid,\n    .form-inline .select-wrapper:valid,\n    .form-inline textarea:valid {\n      border-color: #B4BBC5; }\n    .modal form input:hover, .modal form input:focus, .modal form input:active,\n    .modal form .select-wrapper:hover,\n    .modal form .select-wrapper:focus,\n    .modal form .select-wrapper:active,\n    .modal form textarea:hover,\n    .modal form textarea:focus,\n    .modal form textarea:active,\n    .form-inline input:hover,\n    .form-inline input:focus,\n    .form-inline input:active,\n    .form-inline .select-wrapper:hover,\n    .form-inline .select-wrapper:focus,\n    .form-inline .select-wrapper:active,\n    .form-inline textarea:hover,\n    .form-inline textarea:focus,\n    .form-inline textarea:active {\n      outline: none;\n      border-color: #4a8bfc;\n      box-shadow: none; }\n  .modal form input.invalid,\n  .modal form input.ng-touched:not(:focus):not(:valid),\n  .form-inline input.invalid,\n  .form-inline input.ng-touched:not(:focus):not(:valid) {\n    border-color: #f8556c; }\n  .modal form input,\n  .modal form .select-wrapper,\n  .modal form input.form-control,\n  .form-inline input,\n  .form-inline .select-wrapper,\n  .form-inline input.form-control {\n    width: 190px;\n    margin: 0 7px 10px 0;\n    height: 43px; }\n    .modal form input:nth-child(2), .modal form input:nth-child(4), .modal form input:nth-child(6), .modal form input:nth-child(8),\n    .modal form .select-wrapper:nth-child(2),\n    .modal form .select-wrapper:nth-child(4),\n    .modal form .select-wrapper:nth-child(6),\n    .modal form .select-wrapper:nth-child(8),\n    .modal form input.form-control:nth-child(2),\n    .modal form input.form-control:nth-child(4),\n    .modal form input.form-control:nth-child(6),\n    .modal form input.form-control:nth-child(8),\n    .form-inline input:nth-child(2),\n    .form-inline input:nth-child(4),\n    .form-inline input:nth-child(6),\n    .form-inline input:nth-child(8),\n    .form-inline .select-wrapper:nth-child(2),\n    .form-inline .select-wrapper:nth-child(4),\n    .form-inline .select-wrapper:nth-child(6),\n    .form-inline .select-wrapper:nth-child(8),\n    .form-inline input.form-control:nth-child(2),\n    .form-inline input.form-control:nth-child(4),\n    .form-inline input.form-control:nth-child(6),\n    .form-inline input.form-control:nth-child(8) {\n      margin-right: 0;\n      width: 190px; }\n    .modal form input.full-width, .modal form input.full-width:nth-child(2), .modal form input.full-width:nth-child(4), .modal form input.fuill-width:nth-child(6), .modal form input.fuill-width:nth-child(8),\n    .modal form .select-wrapper.full-width,\n    .modal form .select-wrapper.full-width:nth-child(2),\n    .modal form .select-wrapper.full-width:nth-child(4),\n    .modal form .select-wrapper.fuill-width:nth-child(6),\n    .modal form .select-wrapper.fuill-width:nth-child(8),\n    .modal form input.form-control.full-width,\n    .modal form input.form-control.full-width:nth-child(2),\n    .modal form input.form-control.full-width:nth-child(4),\n    .modal form input.form-control.fuill-width:nth-child(6),\n    .modal form input.form-control.fuill-width:nth-child(8),\n    .form-inline input.full-width,\n    .form-inline input.full-width:nth-child(2),\n    .form-inline input.full-width:nth-child(4),\n    .form-inline input.fuill-width:nth-child(6),\n    .form-inline input.fuill-width:nth-child(8),\n    .form-inline .select-wrapper.full-width,\n    .form-inline .select-wrapper.full-width:nth-child(2),\n    .form-inline .select-wrapper.full-width:nth-child(4),\n    .form-inline .select-wrapper.fuill-width:nth-child(6),\n    .form-inline .select-wrapper.fuill-width:nth-child(8),\n    .form-inline input.form-control.full-width,\n    .form-inline input.form-control.full-width:nth-child(2),\n    .form-inline input.form-control.full-width:nth-child(4),\n    .form-inline input.form-control.fuill-width:nth-child(6),\n    .form-inline input.form-control.fuill-width:nth-child(8) {\n      width: 100%; }\n  .modal form .select-wrapper,\n  .form-inline .select-wrapper {\n    position: relative;\n    background: white; }\n    .modal form .select-wrapper .up,\n    .form-inline .select-wrapper .up {\n      width: 0;\n      height: 0;\n      border-left: 5px solid transparent;\n      border-right: 5px solid transparent;\n      border-bottom: 5px solid #9da5b3;\n      display: block;\n      margin-bottom: 3px;\n      position: absolute;\n      right: 10px;\n      top: 13px; }\n    .modal form .select-wrapper .dn,\n    .form-inline .select-wrapper .dn {\n      width: 0;\n      height: 0;\n      border-left: 5px solid transparent;\n      border-right: 5px solid transparent;\n      border-top: 5px solid #9da5b3;\n      display: block;\n      position: absolute;\n      right: 10px;\n      top: 20px; }\n    .modal form .select-wrapper select,\n    .form-inline .select-wrapper select {\n      -webkit-appearance: none;\n      -moz-appearance: none;\n      -ms-appearance: none;\n      position: absolute;\n      left: 0;\n      right: 0;\n      top: 0;\n      bottom: 0;\n      border: 0;\n      padding-top: 10px;\n      outline: none;\n      box-shadow: none;\n      z-index: 1;\n      background: transparent;\n      width: 100%; }\n    .modal form .select-wrapper.null,\n    .form-inline .select-wrapper.null {\n      border-color: #ebeef2; }\n      .modal form .select-wrapper.null select,\n      .form-inline .select-wrapper.null select {\n        color: #a0a5b0; }\n      .modal form .select-wrapper.null .up,\n      .form-inline .select-wrapper.null .up {\n        border-top-color: #a0a5b0 !important; }\n      .modal form .select-wrapper.null .dn,\n      .form-inline .select-wrapper.null .dn {\n        border-bottom-color: #a0a5b0 !important; }\n  .modal form textarea,\n  .form-inline textarea {\n    width: 100%;\n    padding: 12px; }\n  @media (max-width: 420px) {\n    .modal form input,\n    .modal form input:nth-child(2),\n    .modal form input:nth-child(6),\n    .modal form select:nth-child(4),\n    .form-inline input,\n    .form-inline input:nth-child(2),\n    .form-inline input:nth-child(6),\n    .form-inline select:nth-child(4) {\n      width: 100%;\n      margin-right: 0; } }\n  .modal form button,\n  .form-inline button {\n    font-size: 13px;\n    padding: 10px 13px 8px;\n    height: 41px;\n    line-height: 10px;\n    margin-top: 10px;\n    float: right;\n    font-weight: 600;\n    letter-spacing: 0;\n    text-transform: none; }\n  .modal form .success,\n  .form-inline .success {\n    color: #1ed176; }\n  .modal form .error,\n  .form-inline .error {\n    color: #f8556c; }\n\n.navbar-default {\n  background: linear-gradient(to right, #347eff, #1ea3ff);\n  font-family: \"Eina\", \"Helvetica Neue\", Helvetica, sans-serif;\n  margin-bottom: 20px;\n  position: relative;\n  padding-top: 20px;\n  border-radius: 0;\n  margin-bottom: 20px;\n  min-height: 32px;\n  z-index: 30;\n  border: 0; }\n  @media (max-width: 767px) {\n    .navbar-default {\n      position: fixed;\n      top: 0;\n      width: 100%;\n      padding-top: 1px;\n      min-height: 50px; }\n      .navbar-default.products-page {\n        position: fixed; } }\n  .navbar-default.enterprise {\n    background: #fff; }\n    .navbar-default.enterprise .navbar-brand svg {\n      fill: #000; }\n    .navbar-default.enterprise .navbar-toggle i {\n      color: #000; }\n    .navbar-default.enterprise .navbar-toggle:hover i {\n      color: rgba(0, 0, 0, 0.6); }\n  @media (max-width: 991px) {\n    .navbar-default .navbar-header {\n      width: auto; } }\n  .navbar-default .navbar-brand {\n    height: 32px;\n    padding: 1px 0 0 13px;\n    transition: 0.3s opacity; }\n    @media (max-width: 767px) {\n      .navbar-default .navbar-brand {\n        padding-top: 8px; } }\n    .navbar-default .navbar-brand img {\n      width: 128px; }\n    .navbar-default .navbar-brand:hover {\n      opacity: 0.65; }\n  .navbar-default.transparent {\n    background: transparent; }\n    @media (max-width: 767px) {\n      .navbar-default.transparent {\n        background: #fff;\n        box-shadow: 0px 1px 2px 0px rgba(0, 20, 56, 0.06); } }\n  @media (max-width: 767px) {\n    .navbar-default .navbar-collapse {\n      box-shadow: 0 4px 4px rgba(0, 0, 0, 0.1); } }\n  .navbar-default #ionic-io-logo {\n    fill: #fff;\n    height: 30px;\n    width: 96px;\n    margin: 0; }\n    .light .navbar-default #ionic-io-logo, .navbar-default #ionic-io-logo.light {\n      fill: #3880FF; }\n    @media (max-width: 767px) {\n      .navbar-default #ionic-io-logo {\n        fill: #3880FF; } }\n  .navbar-default .navbar-collapse {\n    text-align: center;\n    max-height: 32px; }\n    @media (max-width: 767px) {\n      .navbar-default .navbar-collapse {\n        max-height: 600px;\n        margin-top: 20px; } }\n  .navbar-default .navbar-nav.navbar-center {\n    float: none;\n    margin: 0 auto;\n    display: inline-block; }\n  @media (min-width: 992px) {\n    .navbar-default .navbar-nav.navbar-center {\n      margin-left: 0px; } }\n  @media (max-width: 767px) {\n    .navbar-default .navbar-nav {\n      padding-right: 6px;\n      padding-left: 6px; } }\n  .navbar-default .navbar-nav > li {\n    padding-top: 0; }\n    @media (min-width: 768px) and (max-width: 991px) {\n      .navbar-default .navbar-nav > li.sm-hide {\n        display: none; } }\n    @media (max-width: 1219px) {\n      .navbar-default .navbar-nav > li.hide-lt-lg,\n      .navbar-default .navbar-nav > li .hide-lt-lg {\n        display: none; } }\n    @media (min-width: 1220px) {\n      .navbar-default .navbar-nav > li.hide-gt-md,\n      .navbar-default .navbar-nav > li .hide-gt-md {\n        display: none; } }\n    .navbar-default .navbar-nav > li > a {\n      color: white;\n      font-size: 13px;\n      font-weight: 600;\n      margin-top: 0;\n      padding: 6px 8px;\n      letter-spacing: -.01em;\n      margin-left: 14px;\n      margin-right: 14px;\n      transition: 0.2s color;\n      border-top: none;\n      border-radius: 4px;\n      transition-duration: 0.3s; }\n      @media (max-width: 1219px) {\n        .navbar-default .navbar-nav > li > a {\n          margin-left: 9px;\n          margin-right: 9px; } }\n      @media (max-width: 991px) {\n        .navbar-default .navbar-nav > li > a {\n          margin-left: 0;\n          margin-right: 0;\n          padding-left: 10px;\n          padding-right: 10px; } }\n      @media (max-width: 767px) {\n        .navbar-default .navbar-nav > li > a {\n          padding: 15px;\n          border: 0; } }\n      .navbar-default .navbar-nav > li > a:hover {\n        color: rgba(255, 255, 255, 0.65); }\n    .navbar-default .navbar-nav > li.open > a {\n      color: rgba(255, 255, 255, 0.65) !important; }\n    .navbar-default .navbar-nav > li.active > a {\n      color: rgba(255, 255, 255, 0.4);\n      pointer-events: none; }\n    .navbar-default .navbar-nav > li.active > a:hover {\n      color: rgba(255, 255, 255, 0.65); }\n    .light .navbar-default .navbar-nav > li.open > a {\n      color: #131924 !important; }\n    .navbar-default .navbar-nav > li.header-btn-white a {\n      background-color: white;\n      vertical-align: middle;\n      padding: 6px 8px 6px;\n      border-radius: 4px;\n      color: #4a8bfc;\n      box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);\n      margin-right: 0;\n      margin-left: 24px;\n      transition: 0.3s box-shadow, 0.3s background; }\n      .navbar-default .navbar-nav > li.header-btn-white a:hover {\n        opacity: 1;\n        color: #4a8bfc;\n        box-shadow: 0 3px 5px rgba(0, 0, 0, 0.15);\n        background-color: white; }\n      .navbar-default .navbar-nav > li.header-btn-white a:active {\n        box-shadow: inset 0 1px 4px rgba(0, 0, 0, 0.2); }\n    @media (min-width: 768px) {\n      .navbar-default .navbar-nav > li.header-btn-white.blue a {\n        color: white;\n        background: #4a8bfc; }\n        .navbar-default .navbar-nav > li.header-btn-white.blue a:hover {\n          background-color: rgba(74, 139, 252, 0.9); } }\n  .navbar-default .dropdown .dropdown-menu {\n    display: block;\n    visibility: 0;\n    opacity: 0;\n    -webkit-transform: scaleY(0);\n            transform: scaleY(0);\n    -webkit-transform-origin: top;\n            transform-origin: top;\n    transition: opacity 0.3s, -webkit-transform 0.3s ease;\n    transition: transform 0.3s ease, opacity 0.3s;\n    transition: transform 0.3s ease, opacity 0.3s, -webkit-transform 0.3s ease; }\n  .navbar-default .dropdown.open .dropdown-menu {\n    visibility: 1;\n    opacity: 1;\n    -webkit-transform: scaleY(1);\n            transform: scaleY(1); }\n  .navbar-default .dropdown .divider {\n    border-bottom: 1px solid #ebeef2;\n    margin: 6px 0 13px; }\n  @media (max-width: 767px) {\n    .navbar-default .dropdown .dropdown-menu {\n      text-align: center; } }\n  @media (min-width: 768px) {\n    .navbar-default .dropdown .dropdown-menu {\n      display: block;\n      position: absolute;\n      border: 0;\n      border-radius: 8px;\n      top: 39px;\n      padding: 18px 0;\n      right: auto;\n      left: 50%;\n      box-shadow: 0 10px 28px rgba(0, 16, 44, 0.18), 0 1px 5px rgba(0, 16, 44, 0.2);\n      opacity: 0;\n      top: -2000px;\n      pointer-events: none;\n      -webkit-transform: translate3d(-50%, -10px, 0) scale(1, 1) perspective(1px);\n              transform: translate3d(-50%, -10px, 0) scale(1, 1) perspective(1px);\n      z-index: 1;\n      transition-delay: 0s;\n      -webkit-transform-origin: 50% 0;\n              transform-origin: 50% 0;\n      transition: opacity 0.2s linear, top 0.25s step-end, -webkit-transform 0.2s cubic-bezier(0.36, 0.66, 0.04, 1);\n      transition: transform 0.2s cubic-bezier(0.36, 0.66, 0.04, 1), opacity 0.2s linear, top 0.25s step-end;\n      transition: transform 0.2s cubic-bezier(0.36, 0.66, 0.04, 1), opacity 0.2s linear, top 0.25s step-end, -webkit-transform 0.2s cubic-bezier(0.36, 0.66, 0.04, 1);\n      -webkit-backface-visibility: hidden;\n              backface-visibility: hidden; }\n      .navbar-default .dropdown .dropdown-menu__text--l1, .navbar-default .dropdown .dropdown-menu__text--l2, .navbar-default .dropdown .dropdown-menu__text--l3, .navbar-default .dropdown .dropdown-menu__text--l4 {\n        line-height: 1.3;\n        letter-spacing: -0.01em;\n        color: #5290FE; }\n      .navbar-default .dropdown .dropdown-menu__text--l1 {\n        font-weight: 600;\n        font-size: 16px; }\n        .navbar-default .dropdown .dropdown-menu__text--l1 ion-icon {\n          transition: translate 0.2s;\n          -webkit-transform: translate(0, 3px);\n                  transform: translate(0, 3px); }\n        .navbar-default .dropdown .dropdown-menu__text--l1:hover ion-icon {\n          -webkit-transform: translate(1px, 3px);\n                  transform: translate(1px, 3px); }\n      .navbar-default .dropdown .dropdown-menu__text--l2 {\n        font-weight: 600;\n        font-size: 14px; }\n      .navbar-default .dropdown .dropdown-menu__text--l3 {\n        font-size: 13px;\n        font-family: \"Inter\", \"Inter UI\", Helvetica, Arial, sans-serif; }\n      .navbar-default .dropdown .dropdown-menu__text--l4 {\n        font-size: 10px;\n        line-height: 1;\n        letter-spacing: 0.1em;\n        text-transform: uppercase;\n        color: #B2BECD;\n        font-weight: 700; }\n      .navbar-default .dropdown .dropdown-menu ul + h6 {\n        margin-top: 26px; }\n      .navbar-default .dropdown .dropdown-menu a,\n      .navbar-default .dropdown .dropdown-menu li,\n      .navbar-default .dropdown .dropdown-menu ul {\n        margin: 0;\n        padding: 0; }\n      .navbar-default .dropdown .dropdown-menu li {\n        list-style-type: none;\n        padding: 0; }\n      .navbar-default .dropdown .dropdown-menu a,\n      .navbar-default .dropdown .dropdown-menu span,\n      .navbar-default .dropdown .dropdown-menu strong {\n        display: block;\n        padding: 8px 28px;\n        min-width: 230px;\n        transition: 0.2s color; }\n      .navbar-default .dropdown .dropdown-menu a.dropdown-menu__text--l1 {\n        padding: 12px 28px; }\n      .navbar-default .dropdown .dropdown-menu a.dropdown-menu__text--l3 {\n        padding: 5px 28px; }\n      .navbar-default .dropdown .dropdown-menu a {\n        color: #5290FE; }\n      .navbar-default .dropdown .dropdown-menu .big a {\n        padding-left: 65px;\n        position: relative; }\n        .navbar-default .dropdown .dropdown-menu .big a svg {\n          position: absolute;\n          left: 30px;\n          top: 15px; }\n        .navbar-default .dropdown .dropdown-menu .big a span {\n          padding-top: 0;\n          color: #73849A !important; }\n        .navbar-default .dropdown .dropdown-menu .big a strong {\n          padding-top: 12px;\n          padding-bottom: 0;\n          color: #5290FE; }\n      .navbar-default .dropdown .dropdown-menu--withbigs {\n        padding-top: 0; }\n        .navbar-default .dropdown .dropdown-menu--withbigs .big:first-child {\n          margin-top: 12px !important; }\n        .navbar-default .dropdown .dropdown-menu--withbigs .big + .divider {\n          margin-top: 18px; }\n      .navbar-default .dropdown .dropdown-menu a:hover {\n        background: transparent;\n        color: #3376e8; }\n        .navbar-default .dropdown .dropdown-menu a:hover strong,\n        .navbar-default .dropdown .dropdown-menu a:hover span {\n          color: #3376e8; }\n      .navbar-default .dropdown .dropdown-menu .divider {\n        padding-top: 20px;\n        background: #f8f9fb;\n        margin-top: 14px;\n        border-bottom: none; }\n        .navbar-default .dropdown .dropdown-menu .divider ~ li a,\n        .navbar-default .dropdown .dropdown-menu .divider ~ li span {\n          background: #F6F8FB; }\n        .navbar-default .dropdown .dropdown-menu .divider ~ li:last-child a {\n          margin-bottom: -15px;\n          padding-bottom: 21px;\n          border-bottom-left-radius: 8px;\n          border-bottom-right-radius: 8px; }\n      .navbar-default .dropdown .dropdown-menu .split {\n        display: -ms-flexbox;\n        display: flex;\n        -ms-flex-direction: row;\n            flex-direction: row;\n        -ms-flex-wrap: nowrap;\n            flex-wrap: nowrap;\n        min-width: 360px;\n        padding-bottom: 8px; }\n        .navbar-default .dropdown .dropdown-menu .split a,\n        .navbar-default .dropdown .dropdown-menu .split span {\n          min-width: 0; }\n        .navbar-default .dropdown .dropdown-menu .split .sm {\n          color: #4a8bfc;\n          font-size: 12px;\n          font-weight: 400;\n          padding: 4px 28px; }\n          .navbar-default .dropdown .dropdown-menu .split .sm:hover {\n            color: #7cabfd; }\n      .navbar-default .dropdown .dropdown-menu::after {\n        position: absolute;\n        top: -10px;\n        content: '';\n        width: 100%;\n        height: 19px; }\n      .navbar-default .dropdown .dropdown-menu::before {\n        position: absolute;\n        width: 14px;\n        height: 14px;\n        top: -5px;\n        right: calc(50% - 7px);\n        background: white;\n        -webkit-transform: rotate(45deg);\n                transform: rotate(45deg);\n        border-radius: 4px;\n        content: '';\n        display: block; }\n    .navbar-default .dropdown.open .dropdown-menu,\n    .navbar-default .dropdown:hover .dropdown-menu {\n      opacity: 1;\n      top: 39px;\n      z-index: 4;\n      pointer-events: all;\n      -webkit-transform: translate3d(-50%, 0, 0) scale(1, 1) perspective(1px);\n              transform: translate3d(-50%, 0, 0) scale(1, 1) perspective(1px);\n      transition: opacity 0.1s linear, top 0.25s step-start, -webkit-transform 0.25s cubic-bezier(0.17, 0.67, 0.52, 1);\n      transition: transform 0.25s cubic-bezier(0.17, 0.67, 0.52, 1), opacity 0.1s linear, top 0.25s step-start;\n      transition: transform 0.25s cubic-bezier(0.17, 0.67, 0.52, 1), opacity 0.1s linear, top 0.25s step-start, -webkit-transform 0.25s cubic-bezier(0.17, 0.67, 0.52, 1);\n      transition-delay: 0.2s; }\n    .navbar-default .dropdown .caret {\n      border-top: 3px dashed;\n      border-right: 3px solid transparent;\n      border-left: 3px solid transparent; } }\n  .navbar-default .version {\n    float: left;\n    list-style: none;\n    padding-left: 0; }\n    .navbar-default .version > li > a {\n      padding: 12px 5px 0;\n      font-size: 18px;\n      font-weight: 600;\n      color: rgba(255, 255, 255, 0.5);\n      display: block; }\n      @media (max-width: 767px) {\n        .navbar-default .version > li > a {\n          padding: 13px 10px 0; } }\n      .navbar-default .version > li > a:active, .navbar-default .version > li > a:focus, .navbar-default .version > li > a:hover {\n        color: rgba(255, 255, 255, 0.7);\n        text-decoration: none; }\n    .navbar-default .version .dropdown-menu {\n      display: block;\n      position: absolute;\n      border: 0;\n      border-radius: 3px;\n      padding: 12px 0 10px;\n      top: 52px;\n      left: 70px;\n      right: -100px;\n      min-width: 205px;\n      box-shadow: 0 2px 5px rgba(0, 0, 0, 0.15), 0 0 1px rgba(0, 0, 0, 0.2);\n      opacity: 0;\n      -webkit-transform: scale(0.01);\n              transform: scale(0.01);\n      -webkit-transform-origin: 20% 8px;\n              transform-origin: 20% 8px;\n      transition: all 0.3s cubic-bezier(0.155, 1.105, 0.295, 1.12), opacity 0.1s linear; }\n      .navbar-default .version .dropdown-menu a {\n        padding: 6px 23px;\n        line-height: 1.6;\n        font-size: 13px;\n        font-weight: 500; }\n        .navbar-default .version .dropdown-menu a i::before {\n          font-size: 30px;\n          line-height: 10px;\n          position: relative;\n          top: 7px;\n          margin-left: 5px; }\n        .navbar-default .version .dropdown-menu a.active, .navbar-default .version .dropdown-menu a.active:hover {\n          color: #4a8bfc;\n          text-decoration: none;\n          background: transparent;\n          cursor: default; }\n      .navbar-default .version .dropdown-menu::before {\n        background: url(\"/img/ico-nav-arrow.png\") center center no-repeat;\n        background-size: 15px;\n        width: 15px;\n        height: 8px;\n        position: absolute;\n        top: -7px;\n        left: 35px;\n        content: '';\n        z-index: 5; }\n    .navbar-default .version.open .dropdown-menu {\n      opacity: 1;\n      -webkit-transform: scale(1);\n              transform: scale(1); }\n  .navbar-default .header-form {\n    margin: 6px 0 0 110px; }\n    @media (max-width: 1330px) {\n      .navbar-default .header-form {\n        margin-left: 0; } }\n    .navbar-default .header-form .form-group {\n      position: relative;\n      padding-left: 0;\n      margin-bottom: 0; }\n      .navbar-default .header-form .form-group input {\n        background: rgba(255, 255, 255, 0.1);\n        box-shadow: none;\n        border: 0;\n        color: white;\n        font-size: 14px;\n        border-radius: 800px;\n        padding-left: 38px;\n        width: 150px;\n        transition: all 0.3s cubic-bezier(0.2, 0.85, 0.2, 1.1); }\n        .navbar-default .header-form .form-group input:focus {\n          width: 270px;\n          color: white;\n          background: rgba(255, 255, 255, 0.15); }\n        .navbar-default .header-form .form-group input::-webkit-input-placeholder {\n          color: rgba(255, 255, 255, 0.4); }\n        .navbar-default .header-form .form-group input::-moz-placeholder {\n          color: rgba(255, 255, 255, 0.4); }\n        .navbar-default .header-form .form-group input::placeholder {\n          color: rgba(255, 255, 255, 0.4); }\n      .navbar-default .header-form .form-group::before {\n        font-family: 'Ionicons';\n        -webkit-font-smoothing: antialiased;\n        content: '\\f4a5';\n        font-size: 18px;\n        font-weight: 800;\n        color: rgba(255, 255, 255, 0.4);\n        position: absolute;\n        top: 4px;\n        left: 14px;\n        cursor: pointer; }\n        @media (max-width: 767px) {\n          .navbar-default .header-form .form-group::before {\n            color: white; } }\n    @media (max-width: 1219px) {\n      .navbar-default .header-form {\n        margin-left: 40px; }\n        .navbar-default .header-form .form-group input:focus {\n          width: 192px; } }\n    @media (max-width: 767px) {\n      .navbar-default .header-form {\n        float: right;\n        margin-left: 10px; }\n        .navbar-default .header-form .form-group input {\n          width: 40px;\n          padding: 0px;\n          opacity: 0; }\n        .navbar-default .header-form .form-group input:focus {\n          width: calc(100vw - 20px);\n          padding: 6px 12px;\n          padding-left: 38px;\n          opacity: 1;\n          margin-bottom: 10px;\n          margin-right: 10px; } }\n  .navbar-default .navbar-toggle,\n  .navbar-default .sidebar-toggle {\n    border: 0;\n    position: relative;\n    background: transparent; }\n    .navbar-default .navbar-toggle i,\n    .navbar-default .sidebar-toggle i {\n      position: absolute;\n      font-size: 27px;\n      top: -3px;\n      color: #fff;\n      transition: color 0.3s, opacity 0.3s, -webkit-transform 0.3s;\n      transition: color 0.3s, transform 0.3s, opacity 0.3s;\n      transition: color 0.3s, transform 0.3s, opacity 0.3s, -webkit-transform 0.3s; }\n    .navbar-default .navbar-toggle:active, .navbar-default .navbar-toggle:focus, .navbar-default .navbar-toggle:hover,\n    .navbar-default .sidebar-toggle:active,\n    .navbar-default .sidebar-toggle:focus,\n    .navbar-default .sidebar-toggle:hover {\n      background: transparent;\n      outline: none; }\n      .navbar-default .navbar-toggle:active i, .navbar-default .navbar-toggle:focus i, .navbar-default .navbar-toggle:hover i,\n      .navbar-default .sidebar-toggle:active i,\n      .navbar-default .sidebar-toggle:focus i,\n      .navbar-default .sidebar-toggle:hover i {\n        color: #fff; }\n    .navbar-default .navbar-toggle .ion-md-close,\n    .navbar-default .sidebar-toggle .ion-md-close {\n      opacity: 0; }\n    .navbar-default .navbar-toggle.active i,\n    .navbar-default .sidebar-toggle.active i {\n      -webkit-transform: rotate(90deg);\n              transform: rotate(90deg); }\n    .navbar-default .navbar-toggle.active i:not(.ion-md-close),\n    .navbar-default .sidebar-toggle.active i:not(.ion-md-close) {\n      opacity: 0; }\n    .navbar-default .navbar-toggle.active .ion-md-close,\n    .navbar-default .sidebar-toggle.active .ion-md-close {\n      -webkit-transform: rotate(90deg);\n              transform: rotate(90deg);\n      opacity: 1; }\n  .navbar-default.transparent .navbar-toggle i,\n  .navbar-default.transparent .sidebar-toggle i {\n    color: #4a8bfc; }\n  .navbar-default.transparent .navbar-toggle:active i, .navbar-default.transparent .navbar-toggle:focus i, .navbar-default.transparent .navbar-toggle:hover i,\n  .navbar-default.transparent .sidebar-toggle:active i,\n  .navbar-default.transparent .sidebar-toggle:focus i,\n  .navbar-default.transparent .sidebar-toggle:hover i {\n    color: #4a8bfc; }\n  .navbar-default .sidebar-toggle {\n    float: left;\n    margin: 8px 10px 0;\n    display: none; }\n    @media (max-width: 767px) {\n      .navbar-default .sidebar-toggle {\n        display: block; } }\n  .navbar-default .container-fluid {\n    min-height: 62px;\n    padding-top: 13px;\n    margin-top: -27px; }\n    .navbar-default .container-fluid .navbar-nav {\n      padding-top: 5px; }\n      @media (max-width: 1219px) {\n        .navbar-default .container-fluid .navbar-nav {\n          padding-left: 5px; } }\n      .navbar-default .container-fluid .navbar-nav > li > a {\n        padding-left: 23px;\n        padding-right: 23px; }\n    .navbar-default .container-fluid .header-btn-white {\n      margin-top: 0; }\n    @media (max-width: 767px) {\n      .navbar-default .container-fluid {\n        padding-top: 28px; } }\n    @media (max-width: 1514px) {\n      .navbar-default .container-fluid .navbar-nav > li > a {\n        padding-left: 14px;\n        padding-right: 14px; } }\n    @media (max-width: 1106px) and (min-width: 768px) {\n      .navbar-default .container-fluid .hide-sm,\n      .navbar-default .container-fluid .sm-hide {\n        display: none; } }\n    @media (max-width: 1219px) {\n      .navbar-default .container-fluid .hide-lt-lg {\n        display: none; } }\n    @media (min-width: 1220px) {\n      .navbar-default .container-fluid .hide-gt-md {\n        display: none; } }\n    @media (max-width: 892px) and (min-width: 768px) {\n      .navbar-default .container-fluid .header-btn,\n      .navbar-default .container-fluid .header-btn-white {\n        display: none; } }\n    .navbar-default .container-fluid #ionic-docs-back,\n    .navbar-default .container-fluid #ionic-docs-logo {\n      width: 32px;\n      transition: 0.3s opacity, 0.3s -webkit-transform;\n      transition: 0.3s transform, 0.3s opacity;\n      transition: 0.3s transform, 0.3s opacity, 0.3s -webkit-transform; }\n      @media (max-width: 767px) {\n        .navbar-default .container-fluid #ionic-docs-back,\n        .navbar-default .container-fluid #ionic-docs-logo {\n          margin-left: 12px;\n          margin-right: -13px; } }\n    .navbar-default .container-fluid #ionic-docs-back {\n      position: absolute;\n      top: 6px;\n      left: 13px;\n      opacity: 0;\n      -webkit-transform: scale3d(1.1, 1.1, 1);\n              transform: scale3d(1.1, 1.1, 1); }\n    .navbar-default .container-fluid #ionic-docs-text {\n      width: 56px;\n      margin-left: 5px; }\n    .navbar-default .container-fluid #ionic-pro-docs-text {\n      width: 36px;\n      margin-left: 8px; }\n    .navbar-default .container-fluid .navbar-brand {\n      padding-top: 8px; }\n      .navbar-default .container-fluid .navbar-brand img {\n        width: 88px; }\n      .navbar-default .container-fluid .navbar-brand.logo {\n        position: relative;\n        padding-top: 6px; }\n        .navbar-default .container-fluid .navbar-brand.logo:hover {\n          opacity: 1; }\n          .navbar-default .container-fluid .navbar-brand.logo:hover #ionic-docs-logo {\n            opacity: 0;\n            -webkit-transform: translate3d(-3px, 0, 0) scale3d(1.1, 1.1, 1);\n                    transform: translate3d(-3px, 0, 0) scale3d(1.1, 1.1, 1); }\n          .navbar-default .container-fluid .navbar-brand.logo:hover #ionic-docs-back {\n            opacity: 1;\n            -webkit-transform: translate3d(-3px, 0, 0) scale3d(1, 1, 1);\n                    transform: translate3d(-3px, 0, 0) scale3d(1, 1, 1); }\n        .navbar-default .container-fluid .navbar-brand.logo:active, .navbar-default .container-fluid .navbar-brand.logo:focus, .navbar-default .container-fluid .navbar-brand.logo:hover:active {\n          -webkit-transform: translate3d(-3px, 0, 0) scale3d(0.9, 0.9, 1);\n                  transform: translate3d(-3px, 0, 0) scale3d(0.9, 0.9, 1);\n          -webkit-transform-origin: 120% 80%;\n                  transform-origin: 120% 80%; }\n  .navbar-default + .cta .bar {\n    background: rgba(0, 0, 0, 0.9);\n    min-height: 64px; }\n    .navbar-default + .cta .bar .container > div,\n    .navbar-default + .cta .bar p {\n      color: rgba(255, 255, 255, 0.7);\n      text-align: center;\n      margin-top: 15px;\n      margin-bottom: 15px;\n      font-weight: 400;\n      font-size: 16px; }\n    .navbar-default + .cta .bar.affix-top {\n      position: absolute;\n      z-index: 1; }\n    .navbar-default + .cta .bar.affix {\n      top: 0;\n      position: fixed;\n      z-index: 100; }\n    .navbar-default + .cta .bar.tabbed {\n      background: #fbfcfd;\n      border-bottom: 1px solid #f9fafb;\n      width: 100%; }\n      .navbar-default + .cta .bar.tabbed.affix {\n        border-bottom-color: transparent;\n        box-shadow: 0 1px 4px rgba(0, 0, 0, 0.05), 0 1px 0 rgba(0, 0, 0, 0.05); }\n        .navbar-default + .cta .bar.tabbed.affix ul li a {\n          margin-bottom: -2px; }\n      .navbar-default + .cta .bar.tabbed ul {\n        padding: none;\n        text-align: center; }\n        .navbar-default + .cta .bar.tabbed ul li {\n          display: inline-block; }\n          .navbar-default + .cta .bar.tabbed ul li a {\n            padding: 25px 18px;\n            display: inline-block;\n            line-height: 1em;\n            font-size: 13px;\n            font-weight: 500;\n            margin: 0 15px -1px;\n            color: #576070;\n            border-bottom: 2px solid transparent;\n            transition: color 0.2s, border-color 0.2s;\n            font-family: \"Eina\", \"Helvetica Neue\", Helvetica, sans-serif;\n            font-weight: 600; }\n            .navbar-default + .cta .bar.tabbed ul li a:focus {\n              background: transparent; }\n          .navbar-default + .cta .bar.tabbed ul li.active a {\n            border-color: #4a8bfc; }\n          .navbar-default + .cta .bar.tabbed ul li.active a,\n          .navbar-default + .cta .bar.tabbed ul li a:active,\n          .navbar-default + .cta .bar.tabbed ul li a:hover {\n            color: #4a8bfc;\n            background: transparent; }\n        @media (max-width: 767px) {\n          .navbar-default + .cta .bar.tabbed ul {\n            display: -ms-flexbox;\n            display: flex;\n            -ms-flex-pack: justify;\n                justify-content: space-between; }\n            .navbar-default + .cta .bar.tabbed ul li a {\n              margin-right: 0;\n              margin-left: 0;\n              padding-left: 4px;\n              padding-right: 4px; } }\n  @media (min-width: 768px) {\n    .navbar-default.light #ionic-io-logo {\n      fill: #4f6384; }\n    .navbar-default.light .navbar-nav > li:not(.header-btn-white) > a,\n    .navbar-default.light .navbar-nav ionic-search ion-icon {\n      color: #788294; }\n      .navbar-default.light .navbar-nav > li:not(.header-btn-white) > a:hover,\n      .navbar-default.light .navbar-nav ionic-search ion-icon:hover {\n        color: #4a8bfc; }\n    .navbar-default.light .navbar-nav > li.active > a {\n      color: #c7d0e0; }\n    .navbar-default.enterprise {\n      background: none;\n      padding-top: 36px; }\n      .navbar-default.enterprise .navbar-nav > li:not(.header-btn-white) > a,\n      .navbar-default.enterprise .navbar-nav ionic-search ion-icon {\n        color: #4E5B6A; }\n        .navbar-default.enterprise .navbar-nav > li:not(.header-btn-white) > a:hover,\n        .navbar-default.enterprise .navbar-nav ionic-search ion-icon:hover {\n          color: #92A1B3; }\n      .navbar-default.enterprise .navbar-nav > li.active > a,\n      .navbar-default.enterprise .navbar-nav > li.open > a {\n        color: #92A1B3 !important; }\n      .navbar-default.enterprise .navbar-nav > li:not(.header-btn-white) > a {\n        margin-left: 0;\n        margin-right: 0;\n        padding: 0 14px 10px;\n        font-family: \"Inter\", \"Inter UI\", Helvetica, Arial, sans-serif;\n        font-weight: 400;\n        font-size: 14px; }\n      .navbar-default.enterprise .navbar-nav > li.active > a {\n        color: #4E5B6A; }\n      .navbar-default.enterprise .navbar-right {\n        margin-top: 3px; }\n      .navbar-default.enterprise .navbar-center {\n        margin-top: 6px;\n        float: right; }\n      .navbar-default.enterprise.navbar-sticky {\n        background: white; }\n    .navbar-default #header-btn-outline {\n      transition: 0.2s border;\n      padding: 2px 10px 4px;\n      margin-left: 14px;\n      color: #3880FF;\n      border-radius: 16px;\n      border: 1px solid rgba(56, 128, 255, 0.4);\n      box-sizing: border-box;\n      box-shadow: none;\n      font-size: 13px;\n      font-weight: 600; }\n      .navbar-default #header-btn-outline:hover {\n        border: 1px solid rgba(56, 128, 255, 0.8); } }\n  .navbar-default .navbar-right > li > a {\n    font-weight: 700;\n    margin-right: 0px;\n    margin-left: 8px; }\n  .navbar-default.navbar-sticky {\n    z-index: 999;\n    padding: 20px 0px;\n    box-shadow: 0px 2px 6px 0px rgba(0, 0, 0, 0.04), 0px 6px 12px rgba(0, 0, 0, 0.02); }\n  .navbar-default ionic-search:not(.hydrated) {\n    visibility: hidden;\n    width: 18px;\n    height: 31px;\n    display: block; }\n\n@media (min-width: 992px) {\n  .docs .navbar-default .navbar-nav.navbar-center {\n    margin-left: 0; } }\n\nbody.page-header {\n  padding-bottom: 0;\n  margin: 0;\n  border-bottom: 0; }\n\n.navbar-dark {\n  background: #11192a; }\n\n.external-icon .external-icon__background {\n  fill: #97BDFF; }\n\n.external-icon .external-icon__foreground {\n  fill: #fff; }\n\n.light .external-icon .external-icon__background,\n.external-icon--light .external-icon__background {\n  fill: #e5e7ea; }\n\n.light .external-icon .external-icon__foreground,\n.external-icon--light .external-icon__foreground {\n  fill: #7a8496; }\n\n.hbspt-form {\n  max-width: 420px;\n  margin: 0 auto;\n  font-weight: 400; }\n  .hbspt-form .hs-form-required {\n    display: none; }\n  .hbspt-form form fieldset.form-columns-2 .input {\n    margin-right: 12px; }\n  .hbspt-form form.stacked .field {\n    margin-bottom: 4px; }\n  .hbspt-form .hs-input,\n  .hbspt-form input.hs-input,\n  .hbspt-form select.hs-input {\n    border: 1px solid #e1e5ed;\n    font-weight: 500;\n    border-radius: 4px;\n    transition: border-color .2s;\n    box-shadow: none;\n    outline: none;\n    height: 30px;\n    padding: 6px 12px;\n    font-size: 14px;\n    line-height: 1.428571429; }\n    .hbspt-form .hs-input:placeholder,\n    .hbspt-form input.hs-input:placeholder,\n    .hbspt-form select.hs-input:placeholder {\n      color: #a0a5b0; }\n    .hbspt-form .hs-input:hover, .hbspt-form .hs-input:focus, .hbspt-form .hs-input:active,\n    .hbspt-form input.hs-input:hover,\n    .hbspt-form input.hs-input:focus,\n    .hbspt-form input.hs-input:active,\n    .hbspt-form select.hs-input:hover,\n    .hbspt-form select.hs-input:focus,\n    .hbspt-form select.hs-input:active {\n      outline: none;\n      border-color: #4a8bfc;\n      box-shadow: none; }\n    .hbspt-form .hs-input.hs-input.error,\n    .hbspt-form input.hs-input.hs-input.error,\n    .hbspt-form select.hs-input.hs-input.error {\n      border-color: #f8556c; }\n  .hbspt-form select.hs-input {\n    height: 44px;\n    width: calc(100% + 6px) !important; }\n  .hbspt-form textarea.hs-input {\n    padding: 12px;\n    width: calc(100% + 3px) !important;\n    min-height: 192px; }\n  .hbspt-form .hs_submit input.hs-button {\n    font-size: 13px;\n    padding: 10px 18px 10px;\n    margin-right: -14px;\n    margin-top: -36px;\n    line-height: 23px;\n    float: right;\n    font-weight: 600;\n    letter-spacing: 0;\n    text-transform: none;\n    text-shadow: none;\n    background: #4a8bfc;\n    border: 0;\n    outline: 0;\n    transition: all .2s linear;\n    box-shadow: 0 1px 3px rgba(0, 0, 0, 0.12); }\n    .hbspt-form .hs_submit input.hs-button:hover {\n      border: 0;\n      box-shadow: 0 4px 8px rgba(0, 0, 0, 0.12);\n      background: #5995fc;\n      color: #fff;\n      outline: 0; }\n    .hbspt-form .hs_submit input.hs-button:active, .hbspt-form .hs_submit input.hs-button:active:not(.inactive):not(.link), .hbspt-form .hs_submit input.hs-button:focus:not(.inactive) {\n      border: 0;\n      color: #fff;\n      box-shadow: inset 0 1px 4px rgba(0, 0, 0, 0.2);\n      background: #5995fc;\n      outline: 0; }\n  .hbspt-form .submitted-message {\n    font-size: 18px;\n    padding: 34px 0 78px;\n    text-align: center;\n    display: -ms-flexbox;\n    display: flex;\n    -ms-flex-direction: column;\n        flex-direction: column;\n    -ms-flex-align: center;\n        align-items: center;\n    font-weight: 400;\n    color: #35af55;\n    max-width: 410px;\n    background-color: white;\n    margin: 0 auto; }\n    .hbspt-form .submitted-message:before {\n      content: '';\n      display: block;\n      background-image: url(\"/img/checkmark-light-green.svg\");\n      background-repeat: no-repeat;\n      background-size: 100%;\n      width: 42px;\n      height: 42px;\n      margin-bottom: 12px; }\n\n.modal .hbspt-form .hs_submit input.hs-button {\n  padding: 0; }\n\n.hubspot-override .hbspt-form {\n  font-family: apple-system, BlinkMacSystemFont, Roboto, Helvetica, Arial, sans-serif; }\n  .hubspot-override .hbspt-form,\n  .hubspot-override .hbspt-form fieldset {\n    max-width: 100%; }\n  .hubspot-override .hbspt-form .hs-form-field {\n    margin-top: 16px; }\n  .hubspot-override .hbspt-form label {\n    margin-bottom: 3px; }\n  .hubspot-override .hbspt-form .hs-form-required {\n    display: inline;\n    color: #F45454;\n    margin-left: 4px; }\n  .hubspot-override .hbspt-form .hs-richtext {\n    margin-top: 8px; }\n  .hubspot-override .hbspt-form .hs-input,\n  .hubspot-override .hbspt-form input.hs-input {\n    transition: border 0.3s;\n    font-weight: 500;\n    background-color: #fff;\n    background-image: none;\n    border: 1px solid #ced6e3;\n    line-height: 1.39286;\n    border-radius: 4px;\n    padding: 11px 15px;\n    font-size: 15px;\n    margin-bottom: 0;\n    color: #505863; }\n  .hubspot-override .hbspt-form input.hs-input[type=\"number\"] {\n    float: none; }\n  .hubspot-override .hbspt-form input.hs-input[type=\"text\"],\n  .hubspot-override .hbspt-form input.hs-input[type=\"email\"],\n  .hubspot-override .hbspt-form input.hs-input[type=\"tel\"] {\n    height: auto;\n    width: 100%;\n    float: none; }\n    .hubspot-override .hbspt-form input.hs-input[type=\"text\"]:focus,\n    .hubspot-override .hbspt-form input.hs-input[type=\"email\"]:focus,\n    .hubspot-override .hbspt-form input.hs-input[type=\"tel\"]:focus {\n      border-color: #629eff; }\n  .hubspot-override .hbspt-form input.hs-input[type=\"radio\"],\n  .hubspot-override .hbspt-form input.hs-input[type=\"checkbox\"] {\n    height: auto;\n    margin-right: 8px; }\n  .hubspot-override .hbspt-form .hs-form-booleancheckbox-display {\n    display: -ms-flexbox;\n    display: flex; }\n  .hubspot-override .hbspt-form select.hs-input {\n    height: 44px;\n    -webkit-appearance: none;\n       -moz-appearance: none;\n            appearance: none;\n    background-image: linear-gradient(45deg, transparent 50%, gray 50%), linear-gradient(135deg, gray 50%, transparent 50%);\n    background-position: calc(100% - 20px) 50%, calc(100% - 15px) 50%;\n    background-size: 5px 5px, 5px 5px, 1px 1.5em;\n    background-repeat: no-repeat; }\n  .hubspot-override .hbspt-form form fieldset.form-columns-2 .input {\n    margin: 0; }\n  .hubspot-override .hbspt-form fieldset.form-columns-2 .hs-form-field {\n    padding: 0 10px; }\n    .hubspot-override .hbspt-form fieldset.form-columns-2 .hs-form-field:first-child {\n      padding-left: 0; }\n    .hubspot-override .hbspt-form fieldset.form-columns-2 .hs-form-field:last-child {\n      padding-right: 0; }\n  .hubspot-override .hbspt-form .inputs-list,\n  .hubspot-override .hbspt-form .hs-error-msgs {\n    margin: 0;\n    padding: 0;\n    list-style-type: none; }\n  .hubspot-override .hbspt-form .inputs-list.multi-container {\n    overflow: hidden; }\n    .hubspot-override .hbspt-form .inputs-list.multi-container li:nth-last-child(n+6):first-child,\n    .hubspot-override .hbspt-form .inputs-list.multi-container li:nth-last-child(n+6):first-child ~ li {\n      width: 50%;\n      float: left;\n      padding-right: 11px; }\n    .hubspot-override .hbspt-form .inputs-list.multi-container li:nth-last-child(n+6):first-child ~ li:nth-child(even) {\n      padding-right: 0;\n      padding-left: 11px; }\n  .hubspot-override .hbspt-form .hs-form-checkbox-display {\n    margin-top: 4px;\n    display: -ms-flexbox;\n    display: flex; }\n  .hubspot-override .hbspt-form .hs-form-checkbox-display .hs-input[type=\"checkbox\"] {\n    margin-right: 10px; }\n  .hubspot-override .hbspt-form .hs-form-checkbox-display span {\n    font-size: 15px;\n    color: #505863; }\n  .hubspot-override .hbspt-form .hs-error-msgs {\n    padding: 5px 0 0;\n    font-size: 11px;\n    color: #F45454; }\n  .hubspot-override .hbspt-form .hs_submit {\n    margin-top: 30px; }\n  .hubspot-override .hbspt-form .hs_submit input.hs-button {\n    transition: all .3s ease;\n    margin: 0;\n    float: none;\n    font-size: 16px;\n    font-weight: 700;\n    padding: 12px 20px;\n    vertical-align: middle;\n    color: white;\n    background: #3880ff;\n    box-shadow: 0 1px 3px rgba(0, 0, 0, 0.08), 0 2px 4px rgba(0, 0, 0, 0.12);\n    border-radius: 4px;\n    line-height: 18px;\n    letter-spacing: -0.01em; }\n    .hubspot-override .hbspt-form .hs_submit input.hs-button:hover {\n      box-shadow: 0 7px 14px rgba(0, 0, 0, 0.12), 0 3px 6px rgba(0, 0, 0, 0.08);\n      background: #4d8dfd;\n      color: #fff;\n      outline: none; }\n  @media (max-width: 768px) {\n    .hubspot-override .hbspt-form fieldset.form-columns-2 .hs-form-field {\n      width: 100%;\n      float: none;\n      padding: 0; }\n      .hubspot-override .hbspt-form fieldset.form-columns-2 .hs-form-field + .hs-form-field {\n        margin-top: 24px; }\n    .hubspot-override .hbspt-form .inputs-list.multi-container li:nth-last-child(n+6):first-child,\n    .hubspot-override .hbspt-form .inputs-list.multi-container li:nth-last-child(n+6):first-child ~ li {\n      width: 100%;\n      float: none;\n      padding-right: 0; }\n    .hubspot-override .hbspt-form .inputs-list.multi-container li:nth-last-child(n+6):first-child ~ li:nth-child(even) {\n      padding-left: 0; }\n    .hubspot-override .hbspt-form .hs_submit input.hs-button {\n      width: 100%; } }\n\n.hubspot-override--large .hbspt-form label:not(.hs-form-booleancheckbox-display) {\n  text-transform: uppercase;\n  font-size: 12px;\n  letter-spacing: 0.05em;\n  margin-bottom: 6px; }\n\n.hubspot-override--large .hbspt-form .hs-form-booleancheckbox-display {\n  font-size: 15px; }\n\n.hubspot-override--large .hbspt-form .hs-richtext p span,\n.hubspot-override--large .hbspt-form .hs-richtext p a {\n  font-size: 15px; }\n\n.hubspot-override--large .hbspt-form .hs-input,\n.hubspot-override--large .hbspt-form input.hs-input {\n  padding: 16px 20px 18px;\n  font-size: 18px; }\n\n.hubspot-override--large .hbspt-form select.hs-input {\n  text-indent: 10px;\n  height: 60px; }\n\n@-moz-document url-prefix() {\n  .hubspot-override--large .hbspt-form select.hs-input {\n    text-indent: 0; } }\n\n.hubspot-override--large .hbspt-form .hs-error-msgs label {\n  font-size: 11px;\n  letter-spacing: 0;\n  text-transform: none; }\n\n.hubspot-override--large .hbspt-form fieldset.form-columns-2 .hs-form-field {\n  padding: 0 20px; }\n\n.hubspot-override--large .hbspt-form .hs_submit {\n  text-align: center;\n  padding-top: 18px; }\n\n.hubspot-override--large .hbspt-form .hs_submit input.hs-button {\n  padding: 22px 27px 24px;\n  border-radius: 6px; }\n\n@media (max-width: 768px) {\n  .hubspot-override--large .hbspt-form fieldset.form-columns-2 .hs-form-field {\n    padding: 0; } }\n\n.hubspot-override--measure {\n  max-width: 748px;\n  margin-left: auto;\n  margin-right: auto; }\n\n/**\n * The Sub Header sits under the main navigation to display context-specific\n * page information, widgets, and links.\n * September 2017\n */\n.sub-header > .container {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-direction: row;\n      flex-direction: row;\n  -ms-flex-pack: justify;\n      justify-content: space-between;\n  -ms-flex-align: center;\n      align-items: center;\n  color: #697384;\n  font-size: 13px;\n  font-weight: 600;\n  -ms-flex-wrap: wrap;\n      flex-wrap: wrap;\n  position: relative;\n  z-index: 1; }\n  .sub-header > .container::before {\n    border-top: 1px solid rgba(255, 255, 255, 0.06);\n    display: block;\n    content: '';\n    position: absolute;\n    top: 0;\n    right: 15px;\n    left: 15px;\n    -ms-flex: 0 0 100%;\n        flex: 0 0 100%; }\n  .sub-header > .container::after {\n    display: none; }\n\n.sub-header ul {\n  padding: 0;\n  list-style: none; }\n\n.sub-header li {\n  display: inline-block;\n  font-weight: 600; }\n\n.sub-header ul:not(.breadcrumbs) {\n  text-transform: uppercase;\n  letter-spacing: 0.08em;\n  font-size: 11px; }\n  .sub-header ul:not(.breadcrumbs) li {\n    padding: 18px 15px; }\n  .sub-header ul:not(.breadcrumbs) li:last-child {\n    padding-right: 0; }\n  .sub-header ul:not(.breadcrumbs) a:not(.btn) {\n    transition: color 0.3s;\n    color: rgba(255, 255, 255, 0.6);\n    padding: 0 0 4px; }\n  .sub-header ul:not(.breadcrumbs) a:not(.btn):not(.active):hover {\n    color: white; }\n  .sub-header ul:not(.breadcrumbs) a:not(.btn).active {\n    color: white;\n    border-bottom: 2px solid rgba(255, 255, 255, 0.2); }\n  @media (max-width: 768px) {\n    .sub-header ul:not(.breadcrumbs) li {\n      padding: 18px 8px; } }\n\n.sub-header .breadcrumbs {\n  font-family: \"Eina\", \"Helvetica Neue\", Helvetica, sans-serif;\n  font-size: 16px; }\n  .sub-header .breadcrumbs.sm {\n    font-size: 13px; }\n  .sub-header .breadcrumbs li {\n    font-weight: 600;\n    color: white;\n    padding: 17px 0; }\n    .sub-header .breadcrumbs li::after {\n      content: '/';\n      color: rgba(255, 255, 255, 0.1);\n      margin-left: 5px;\n      margin-right: 1px;\n      font-size: 16px;\n      vertical-align: 0px; }\n    .sub-header .breadcrumbs li:last-child::after {\n      display: none; }\n    .sub-header .breadcrumbs li a, .sub-header .breadcrumbs li::after {\n      font-weight: 600; }\n  .sub-header .breadcrumbs a {\n    color: white;\n    transition: .2s color;\n    padding: 0;\n    display: inline-block;\n    margin-left: -1px; }\n    .sub-header .breadcrumbs a:hover {\n      color: rgba(255, 255, 255, 0.3); }\n\n.sub-header .breadcrumbs--small,\n.sub-header .breadcrumbs--small li:after {\n  font-size: 13px; }\n\n.sub-header .breadcrumbs--small li a {\n  font-weight: 600; }\n\n.sub-header a {\n  color: white;\n  padding: 18px 15px;\n  display: inline-block;\n  text-decoration: none;\n  transition: .2s color; }\n  .sub-header a.current, .sub-header a.active {\n    color: rgba(255, 255, 255, 0.4); }\n  .sub-header a:hover {\n    color: rgba(255, 255, 255, 0.4); }\n  .sub-header a.btn {\n    padding: 6px 8px 5px;\n    font-size: 13px;\n    font-weight: 600;\n    vertical-align: 0px;\n    letter-spacing: -.01em;\n    margin-right: 3px;\n    margin-left: 9px;\n    transition: .3s box-shadow, .3s background; }\n    .sub-header a.btn:hover {\n      box-shadow: 0 3px 5px rgba(0, 0, 0, 0.15); }\n    .sub-header a.btn:active {\n      box-shadow: inset 0 1px 4px rgba(0, 0, 0, 0.2); }\n\nbody.light .sub-header .container::before {\n  border-top: 1px solid rgba(0, 0, 0, 0.06); }\n\nbody.light .sub-header .breadcrumbs li {\n  color: #272a2f; }\n  body.light .sub-header .breadcrumbs li::after {\n    color: rgba(0, 0, 0, 0.3); }\n\nbody.light .sub-header .breadcrumbs a {\n  color: #7a88a0; }\n  body.light .sub-header .breadcrumbs a:hover {\n    color: #4a8bfc; }\n\nbody.light .sub-header a {\n  color: #697384; }\n  body.light .sub-header a.current, body.light .sub-header a.active {\n    color: #b1bbca; }\n  body.light .sub-header a:hover {\n    color: #4a8bfc; }\n\n.hero {\n  padding-top: 128px;\n  padding-bottom: 72px;\n  position: relative; }\n  .hero.left .content {\n    width: 415px; }\n    @media (max-width: 1219px) {\n      .hero.left .content {\n        width: 400px; } }\n    @media (max-width: 767px) {\n      .hero.left .content {\n        width: 100%; } }\n  .hero.left .graphics {\n    top: 150px;\n    right: 0;\n    position: absolute; }\n  .hero.right .content {\n    width: 451px;\n    float: right; }\n    @media (max-width: 767px) {\n      .hero.right .content {\n        width: 100%;\n        float: none; } }\n    .hero.right .content:after {\n      clear: right; }\n  .hero .graphics {\n    width: 500px; }\n    .hero .graphics video {\n      position: absolute;\n      left: -2px;\n      top: 10px; }\n      .hero .graphics video::-webkit-media-controls-start-playback-button {\n        display: none !important;\n        -webkit-appearance: none; }\n    @media (max-width: 767px) {\n      .hero .graphics {\n        width: 100%; }\n        .hero .graphics video {\n          width: 300px;\n          height: 300px;\n          position: relative;\n          margin: 0 auto;\n          display: block; } }\n  .hero p {\n    font-size: 15px;\n    line-height: 28px;\n    letter-spacing: -0.02em;\n    color: #576070; }\n    .hero p + .btns {\n      margin-top: 37px; }\n  .hero .feature {\n    text-transform: uppercase;\n    display: inline-block;\n    font-weight: 700;\n    font-size: 10px;\n    letter-spacing: 2px;\n    position: relative;\n    padding-bottom: 15px;\n    color: black; }\n    .hero .feature span {\n      transition: left 0.3s cubic-bezier(0.155, 1.105, 0.295, 1.12);\n      position: relative;\n      left: 0; }\n    .hero .feature:after {\n      position: absolute;\n      top: 14px;\n      left: 0;\n      right: 0;\n      content: '';\n      border-bottom: 2px solid #4C555A;\n      transition: right 0.3s cubic-bezier(0.155, 1.105, 0.295, 1.12); }\n    .hero .feature:before {\n      content: '';\n      display: inline-block;\n      position: absolute;\n      right: -35px;\n      top: 9px;\n      font-size: 20px;\n      transition: -webkit-transform 0.3s cubic-bezier(0.155, 1.105, 0.295, 1.12);\n      transition: transform 0.3s cubic-bezier(0.155, 1.105, 0.295, 1.12);\n      transition: transform 0.3s cubic-bezier(0.155, 1.105, 0.295, 1.12), -webkit-transform 0.3s cubic-bezier(0.155, 1.105, 0.295, 1.12);\n      width: 11px;\n      height: 11px;\n      border-radius: 2px;\n      border-right: 0.1em solid;\n      border-top: 0.1em solid;\n      -webkit-transform: scale3d(0, 0, 1) rotate(45deg) translate3d(-25px, 25px, 0);\n              transform: scale3d(0, 0, 1) rotate(45deg) translate3d(-25px, 25px, 0);\n      margin-right: 0.5em; }\n    .hero .feature:hover span {\n      left: 5px; }\n    .hero .feature:hover:before {\n      -webkit-transform: scale3d(1, 1, 1) rotate(45deg) translate3d(0, 0, 0);\n              transform: scale3d(1, 1, 1) rotate(45deg) translate3d(0, 0, 0); }\n    .hero .feature:hover:after {\n      right: -25px; }\n    .hero .feature + h2 {\n      margin-top: 25px;\n      margin-bottom: 20px;\n      letter-spacing: -0.01em;\n      color: #272a2f;\n      font-size: 32px;\n      font-weight: 400; }\n  .hero h2 {\n    line-height: 42px; }\n  .hero h3 + p {\n    font-size: 17px;\n    line-height: 34px; }\n\n.transparent .cta {\n  margin-top: -78px;\n  padding-top: 78px; }\n\n.cta {\n  color: white;\n  background: #4a8bfc; }\n  .cta.gradient {\n    background: linear-gradient(45deg, #347eff 0%, #2990ff 50%, #2285ff 50%, #1ea1ff 100%); }\n  .cta .center {\n    text-align: center; }\n  .cta hgroup {\n    padding-top: 33px;\n    padding-bottom: 94px;\n    max-width: 800px; }\n    .cta hgroup h1 {\n      font-size: 28px;\n      margin-bottom: 12px;\n      letter-spacing: -.03em; }\n    .cta hgroup h4 {\n      font-size: 20px;\n      color: rgba(255, 255, 255, 0.8);\n      letter-spacing: -.03em;\n      line-height: 1.6em;\n      margin-top: -5px; }\n    .cta hgroup p {\n      color: rgba(255, 255, 255, 0.7);\n      font-size: 18px;\n      font-weight: 400; }\n    .cta hgroup a {\n      color: rgba(255, 255, 255, 0.9); }\n      .cta hgroup a:hover {\n        color: white;\n        text-decoration: none; }\n    .cta hgroup small a {\n      font-weight: 600; }\n  .cta .tabs {\n    background: #f6f7fa; }\n    .cta .tabs .container {\n      -ms-flex-wrap: wrap;\n          flex-wrap: wrap;\n      -ms-flex-pack: center;\n          justify-content: center;\n      list-style: none;\n      margin-bottom: 0;\n      text-align: center; }\n    .cta .tabs li {\n      max-width: 360px;\n      margin-left: 43px;\n      text-align: left;\n      display: inline-block; }\n      .cta .tabs li:first-child {\n        margin-left: 0; }\n      @media (max-width: 991px) {\n        .cta .tabs li {\n          margin-left: 0;\n          display: block;\n          margin: 0 auto; }\n          .cta .tabs li:first-child {\n            margin-left: auto; } }\n    .cta .tabs h3 {\n      font-size: 16px;\n      color: #272a2f;\n      margin-bottom: 5px;\n      margin-top: 0;\n      position: relative; }\n    .cta .tabs p {\n      font-size: 14px;\n      color: #727a87;\n      position: relative;\n      margin-bottom: 0; }\n    .cta .tabs a {\n      position: relative;\n      display: block;\n      padding: 32px 0 28px 85px;\n      z-index: 1;\n      cursor: pointer;\n      -webkit-user-select: none;\n         -moz-user-select: none;\n          -ms-user-select: none;\n              user-select: none; }\n      .cta .tabs a::before {\n        position: absolute;\n        content: '';\n        top: 0;\n        right: 0;\n        bottom: 0;\n        left: 0;\n        transition: .3s box-shadow, .3s transform, .3s background, .3s border-radius; }\n      .cta .tabs a:hover, .cta .tabs a:active, .cta .tabs a:focus {\n        text-decoration: none; }\n        .cta .tabs a:hover::before, .cta .tabs a:active::before, .cta .tabs a:focus::before {\n          background: white;\n          border-radius: 4px;\n          box-shadow: 0 0 4px rgba(0, 0, 0, 0.05), 0 6px 10px rgba(0, 0, 0, 0.08);\n          -webkit-transform: scale(1.1, 1.1);\n                  transform: scale(1.1, 1.1); }\n        .cta .tabs a:hover::after, .cta .tabs a:active::after, .cta .tabs a:focus::after {\n          opacity: 1; }\n      .cta .tabs a.active::before {\n        background: white;\n        border-radius: 4px;\n        box-shadow: 0 0 4px rgba(0, 0, 0, 0.05), 0 6px 10px rgba(0, 0, 0, 0.08);\n        -webkit-transform: scale(1.2, 1.2);\n                transform: scale(1.2, 1.2); }\n      .cta .tabs a.active::after {\n        opacity: 1; }\n      .cta .tabs a::after {\n        background: url(\"/img/getting-started/getting-started-toggle-icons.png\") no-repeat 0 0;\n        background-size: 70px;\n        width: 70px;\n        height: 70px;\n        content: '';\n        left: 5px;\n        top: 20px;\n        display: block;\n        position: absolute;\n        opacity: .7;\n        transition: .3s opacity; }\n      .cta .tabs a.creator::after {\n        background-position: 0 -140px; }\n  .cta .alert {\n    color: #ffeed6;\n    font-size: 14px;\n    font-weight: 500;\n    border-radius: 0;\n    margin-bottom: 0;\n    text-align: center;\n    padding-top: 10px;\n    padding-bottom: 10px; }\n    .cta .alert::before {\n      position: relative;\n      font-size: 20px;\n      line-height: 14px;\n      left: 0;\n      top: 2px;\n      margin-right: 5px;\n      content: \"\\f17e\"; }\n    .cta .alert a {\n      color: #ffffff;\n      font-weight: 600; }\n      .cta .alert a:hover {\n        text-decoration: none;\n        color: rgba(255, 255, 255, 0.8); }\n\n#pre-footer {\n  font-family: \"Eina\", \"Helvetica Neue\", Helvetica, sans-serif;\n  background: #f9fafb;\n  color: #727a87;\n  padding-top: 80px;\n  padding-bottom: 72px; }\n  #pre-footer ul {\n    list-style: none; }\n    #pre-footer ul::after {\n      content: '';\n      clear: both; }\n    #pre-footer ul li {\n      float: left;\n      width: 45%;\n      padding-left: 108px;\n      position: relative; }\n      #pre-footer ul li::before {\n        background: url(\"/img/home/icons-lg.png?1\") no-repeat 0 -372px;\n        background-size: 93px;\n        height: 93px;\n        width: 93px;\n        content: '';\n        display: block;\n        position: absolute;\n        left: -9px;\n        top: -5px; }\n      #pre-footer ul li::after {\n        border-right: 1px solid #dde1ea;\n        content: '';\n        position: absolute;\n        right: -10%;\n        top: 15px;\n        bottom: 15px;\n        display: block; }\n      #pre-footer ul li.explor-docs::before {\n        background-position: 0 -279px; }\n      #pre-footer ul li.forum::before {\n        background-position: 0 -465px; }\n      #pre-footer ul li.blog::before {\n        background-position: 0 -558px; }\n      #pre-footer ul li:last-child {\n        float: right; }\n        #pre-footer ul li:last-child::after {\n          display: none; }\n      #pre-footer ul li a {\n        font-weight: 600;\n        font-size: 20px;\n        margin-bottom: 5px;\n        letter-spacing: -.02em; }\n        #pre-footer ul li a::after {\n          font-family: 'Ionicons';\n          content: '\\f287';\n          font-size: .9em;\n          margin-left: 10px;\n          position: relative;\n          display: inline-block;\n          transition: .3s transform; }\n        #pre-footer ul li a:hover, #pre-footer ul li a:active, #pre-footer ul li a:focus {\n          color: #186bfb;\n          text-decoration: none; }\n          #pre-footer ul li a:hover::after, #pre-footer ul li a:active::after, #pre-footer ul li a:focus::after {\n            -webkit-transform: translate3d(5px, 0, 0);\n                    transform: translate3d(5px, 0, 0); }\n      #pre-footer ul li p {\n        font-size: 15px;\n        line-height: 1.6em;\n        color: #727a87;\n        margin-top: 2px;\n        font-weight: 600;\n        letter-spacing: -0.02em; }\n      @media (max-width: 767px) {\n        #pre-footer ul li {\n          float: none;\n          width: 100%; }\n          #pre-footer ul li:first-child {\n            margin-bottom: 40px; }\n          #pre-footer ul li::after {\n            display: none; } }\n\n.docs #pre-footer {\n  margin-left: 230px; }\n  @media (max-width: 767px) {\n    .docs #pre-footer {\n      margin-left: 0; } }\n  .docs #pre-footer .container {\n    max-width: 100%; }\n\n.pre-header {\n  font-family: \"Inter\", \"Inter UI\", Helvetica, Arial, sans-serif;\n  background: #F8FAFC;\n  box-shadow: 0 1px 0px 0 rgba(0, 20, 56, 0.06);\n  position: relative;\n  z-index: 999;\n  padding: 6px 0 7px;\n  text-align: center;\n  color: #73849A; }\n  .pre-header .container {\n    position: relative;\n    font-size: 11px;\n    line-height: 1.8em;\n    font-weight: 400;\n    letter-spacing: -.01em; }\n    .pre-header .container:before, .pre-header .container:after {\n      display: none; }\n  .pre-header #optimizely {\n    transition: .2s opacity; }\n  .pre-header p {\n    display: inline; }\n  .pre-header strong {\n    font-weight: 600;\n    color: #020814; }\n  .pre-header a{\n    background-color: #73a5ff;\n    color: #fff;\n    border-radius: 16px;\n    margin-left: 12px;\n    padding: 6px 8px 5px;\n    font-weight: 600;\n    font-size: 9px;\n    text-transform: uppercase;\n    vertical-align: 0;\n    white-space: pre;\n    letter-spacing: .02em;\n    transition: .2s background-color, .2s box-shadow; }\n    .pre-header a::after {\n      font-family: 'Ionicons';\n      content: '\\f3d1';\n      margin-left: 3px; }\n    .pre-header a:hover {\n      background-color: #8db5ff;\n      box-shadow: 0 1px 2px rgba(0, 0, 0, 0.1); }\n  @media (max-width: 767px) {\n    .pre-header {\n      display: none; } }\n  .pre-header.back {\n    background: #F9F9F9;\n    text-align: left;\n    box-shadow: none;\n    padding: 3px 0; }\n    .pre-header.back a {\n      line-height: normal;\n      font-weight: 600;\n      font-size: 10px;\n      letter-spacing: 0.05em;\n      color: #3880FF;\n      background: none;\n      margin: 0;\n      padding: 10px 0; }\n      .pre-header.back a::after {\n        display: none; }\n      .pre-header.back a ion-icon {\n        color: rgba(56, 128, 255, 0.7);\n        font-size: 12px;\n        height: 12px;\n        width: 12px;\n        display: inline-block;\n        vertical-align: -2px;\n        opacity: 0;\n        transition: .2s transform ease, .2s opacity;\n        margin-right: 4px; }\n        .pre-header.back a ion-icon.hydrated {\n          opacity: 1; }\n      .pre-header.back a:hover {\n        box-shadow: none; }\n        .pre-header.back a:hover ion-icon {\n          -webkit-transform: translateX(-2px);\n                  transform: translateX(-2px); }\n\n.docs-container + footer {\n  display: none; }\n\nfooter {\n  border-top: 1px solid #F3F5F9;\n  padding-top: 70px;\n  padding-bottom: 20px;\n  font-weight: 500;\n  font-family: \"Eina\", \"Helvetica Neue\", Helvetica, sans-serif; }\n  footer .logo svg {\n    fill: #3880FF;\n    width: 78px;\n    height: 26px; }\n  footer nav {\n    display: -ms-flexbox;\n    display: flex;\n    -ms-flex-pack: justify;\n        justify-content: space-between; }\n    footer nav.container::before, footer nav.container::after {\n      display: none; }\n    footer nav .logo,\n    footer nav ul {\n      -ms-flex: 1;\n          flex: 1; }\n    footer nav ul {\n      list-style: none;\n      font-weight: 500;\n      padding-left: 0; }\n      footer nav ul:first-child {\n        margin-left: 1px; }\n      footer nav ul strong {\n        color: #000000;\n        display: block;\n        font-weight: 600;\n        font-size: 16px;\n        padding-bottom: 4px;\n        letter-spacing: -.01em; }\n      footer nav ul a {\n        line-height: 1;\n        font-size: 14px;\n        letter-spacing: -0.01em;\n        color: #73849A;\n        font-weight: 400;\n        padding: 11px 0;\n        display: inline-block;\n        font-family: \"Inter\", \"Inter UI\", Helvetica, Arial, sans-serif; }\n        footer nav ul a:hover {\n          text-decoration: none;\n          color: #4a8bfc; }\n  footer .signup {\n    margin-top: 60px;\n    display: -ms-flexbox;\n    display: flex; }\n    footer .signup::before, footer .signup::after {\n      display: none; }\n    footer .signup hgroup {\n      -ms-flex: 0 0 auto;\n          flex: 0 0 auto; }\n    footer .signup ionic-newsletter-signup {\n      -ms-flex: 1;\n          flex: 1;\n      margin-left: 60px; }\n    footer .signup form {\n      display: -ms-flexbox;\n      display: flex;\n      height: 50px; }\n    footer .signup hgroup {\n      background: url(\"/img/footer/footer-newsletter-icon.png\") no-repeat 1px 8px;\n      background-size: 40px;\n      padding-left: 63px;\n      min-height: 50px; }\n      footer .signup hgroup h3 {\n        font-size: 16px;\n        margin-top: 0;\n        margin-bottom: 3px;\n        padding-top: 11px;\n        font-weight: 600;\n        letter-spacing: -.02em; }\n      footer .signup hgroup p {\n        font-family: \"Inter\", \"Inter UI\", Helvetica, Arial, sans-serif;\n        font-size: 14px;\n        color: #73849A;\n        letter-spacing: -.016em;\n        font-weight: 400; }\n  @media (max-width: 991px) {\n    footer {\n      padding-top: 46px; }\n      footer nav {\n        -ms-flex-wrap: wrap;\n            flex-wrap: wrap;\n        -ms-flex-pack: start;\n            justify-content: flex-start; }\n        footer nav .logo {\n          -ms-flex: 0 0 100%;\n              flex: 0 0 100%;\n          margin-bottom: 40px; }\n      footer .signup {\n        -ms-flex-direction: column;\n            flex-direction: column; }\n        footer .signup hgroup,\n        footer .signup ionic-newsletter-signup {\n          -ms-flex: 0 0 100%;\n              flex: 0 0 100%; }\n        footer .signup ionic-newsletter-signup {\n          margin-top: 4px; } }\n  @media (max-width: 768px) {\n    footer nav .logo {\n      display: none; }\n    footer nav ul {\n      -ms-flex: 0 0 33%;\n          flex: 0 0 33%;\n      margin-bottom: 36px; }\n    footer nav ul li a {\n      padding: 9px 0; }\n    footer .signup {\n      margin-top: 0; } }\n  @media (max-width: 480px) {\n    footer nav ul {\n      -ms-flex: 0 0 50%;\n          flex: 0 0 50%; }\n    footer .signup ionic-newsletter-signup {\n      margin-left: 0; } }\n  footer .sub-footer {\n    font-size: 12px;\n    color: #9da5b3;\n    border-top: 1px solid #eff1f5;\n    margin-top: 40px;\n    padding-top: 29px;\n    text-align: center;\n    display: -ms-flexbox;\n    display: flex;\n    -ms-flex-pack: justify;\n        justify-content: space-between;\n    -ms-flex-wrap: wrap;\n        flex-wrap: wrap; }\n    footer .sub-footer ul {\n      display: -ms-flexbox;\n      display: flex;\n      -ms-flex: 0 0 auto;\n          flex: 0 0 auto;\n      list-style: none;\n      padding-left: 0; }\n    footer .sub-footer ul:last-child li + li {\n      margin-left: 15px; }\n    footer .sub-footer .license {\n      margin-left: auto;\n      margin-right: -3px;\n      padding-left: 15px;\n      text-align: right; }\n      @media (max-width: 767px) {\n        footer .sub-footer .license {\n          width: 100%;\n          padding-left: 0; } }\n    footer .sub-footer a {\n      color: #bcc5d5; }\n      footer .sub-footer a:hover {\n        color: #9da5b3; }\n    footer .sub-footer .copyright,\n    footer .sub-footer .privacy,\n    footer .sub-footer .tos {\n      margin-right: 8px; }\n    footer .sub-footer .copyright {\n      -ms-flex: 0 0 77px;\n          flex: 0 0 77px; }\n    footer .sub-footer .privacy {\n      height: 1em; }\n    footer .sub-footer a[id^=btn-footer] {\n      position: relative;\n      height: 16px;\n      width: 16px;\n      display: inline-block;\n      opacity: 0.6;\n      display: -ms-flexbox;\n      display: flex;\n      -ms-flex-align: center;\n          align-items: center;\n      -ms-flex-pack: center;\n          justify-content: center; }\n      footer .sub-footer a[id^=btn-footer] svg {\n        fill: #CED6E0; }\n      footer .sub-footer a[id^=btn-footer]:hover svg {\n        fill: #B4BBC5; }\n\n@media (max-width: 767px) {\n  .hide-xs {\n    display: none; }\n  .show-sm,\n  .show-md,\n  .show-lg {\n    display: none; } }\n\n@media (min-width: 768px) and (max-width: 991px) {\n  .hide-sm {\n    display: none; }\n  .show-xs,\n  .show-md,\n  .show-lg {\n    display: none; } }\n\n@media (min-width: 992px) and (max-width: 1219px) {\n  .hide-md {\n    display: none; }\n  .show-xs,\n  .show-sm,\n  .show-lg {\n    display: none; } }\n\n@media (min-width: 1220px) {\n  .hide-lg {\n    display: none; }\n  .show-xs,\n  .show-sm,\n  .show-md {\n    display: none; } }\n\n.btn,\n.navbar .btn {\n  font-weight: 500;\n  border-radius: 4px;\n  line-height: 1.4em;\n  padding: 14px 33px 14px;\n  margin-right: 10px;\n  transition: all .3s ease;\n  font-size: 18px;\n  border: 0px solid rgba(0, 0, 0, 0);\n  color: #fff;\n  box-shadow: 0 1px 3px rgba(0, 0, 0, 0.08), 0 2px 4px rgba(0, 0, 0, 0.12);\n  background: #3880ff;\n  letter-spacing: -0.01em; }\n  .btn:last-child,\n  .navbar .btn:last-child {\n    margin-right: 0; }\n  .btn:hover, .btn:focus,\n  .navbar .btn:hover,\n  .navbar .btn:focus {\n    box-shadow: 0 7px 14px rgba(0, 0, 0, 0.12), 0 3px 6px rgba(0, 0, 0, 0.08);\n    background: #4d8dfd;\n    color: #fff;\n    outline: none; }\n  .btn:active, .btn:active:focus, .btn:active:hover,\n  .navbar .btn:active,\n  .navbar .btn:active:focus,\n  .navbar .btn:active:hover {\n    box-shadow: inset 0 1px 4px rgba(0, 0, 0, 0.2);\n    background: #5995fc;\n    outline: none; }\n  .btn.outline,\n  .navbar .btn.outline {\n    border-color: #4a8bfc;\n    background: transparent;\n    color: #4a8bfc;\n    border-width: 1px; }\n    .btn.outline:hover, .btn.outline:focus,\n    .navbar .btn.outline:hover,\n    .navbar .btn.outline:focus {\n      border-color: #5995fc;\n      background: rgba(74, 139, 252, 0.05); }\n    .btn.outline.faded,\n    .navbar .btn.outline.faded {\n      border: 1px solid rgba(54, 74, 110, 0.5);\n      color: #A1ABBC; }\n      .btn.outline.faded:hover, .btn.outline.faded:focus,\n      .navbar .btn.outline.faded:hover,\n      .navbar .btn.outline.faded:focus {\n        color: white;\n        border-color: #aab3c2;\n        background: rgba(161, 171, 188, 0.05); }\n  .btn.btn-primary, .btn.light-blue,\n  .navbar .btn.btn-primary,\n  .navbar .btn.light-blue {\n    background: #529eff; }\n    .btn.btn-primary:hover, .btn.btn-primary:focus, .btn.btn-primary:active, .btn.light-blue:hover, .btn.light-blue:focus, .btn.light-blue:active,\n    .navbar .btn.btn-primary:hover,\n    .navbar .btn.btn-primary:focus,\n    .navbar .btn.btn-primary:active,\n    .navbar .btn.light-blue:hover,\n    .navbar .btn.light-blue:focus,\n    .navbar .btn.light-blue:active {\n      background: #61a7ff; }\n    .btn.btn-primary.outline, .btn.light-blue.outline,\n    .navbar .btn.btn-primary.outline,\n    .navbar .btn.light-blue.outline {\n      border-color: #529eff;\n      color: #529eff; }\n  .btn.red,\n  .navbar .btn.red {\n    background: #f8556c; }\n    .btn.red:hover, .btn.red:focus, .btn.red:active,\n    .navbar .btn.red:hover,\n    .navbar .btn.red:focus,\n    .navbar .btn.red:active {\n      background: #FF6177; }\n  .btn.light,\n  .navbar .btn.light {\n    background: #F0F6FF;\n    color: #4a8bfc; }\n    .btn.light:hover, .btn.light:focus, .btn.light:active,\n    .navbar .btn.light:hover,\n    .navbar .btn.light:focus,\n    .navbar .btn.light:active {\n      background: #e6f0ff; }\n  .btn.navy,\n  .navbar .btn.navy {\n    background: #0039a2; }\n    .btn.navy:hover, .btn.navy:focus, .btn.navy:active,\n    .navbar .btn.navy:hover,\n    .navbar .btn.navy:focus,\n    .navbar .btn.navy:active {\n      background: #00276f; }\n  .btn.green,\n  .navbar .btn.green {\n    background: #1ed176; }\n    .btn.green:hover, .btn.green:focus, .btn.green:active, .btn.green:active:focus, .btn.green:active:hover,\n    .navbar .btn.green:hover,\n    .navbar .btn.green:focus,\n    .navbar .btn.green:active,\n    .navbar .btn.green:active:focus,\n    .navbar .btn.green:active:hover {\n      background: #3fe390; }\n  .btn.white,\n  .navbar .btn.white {\n    background: white;\n    color: #4a8bfc; }\n    .btn.white:hover, .btn.white:focus, .btn.white:active,\n    .navbar .btn.white:hover,\n    .navbar .btn.white:focus,\n    .navbar .btn.white:active {\n      color: #4a8bfc;\n      color: #639bfc; }\n    .btn.white:active, .btn.white:active:focus, .btn.white:active:hover,\n    .navbar .btn.white:active,\n    .navbar .btn.white:active:focus,\n    .navbar .btn.white:active:hover {\n      background: white; }\n    .btn.white.outline,\n    .navbar .btn.white.outline {\n      color: #4a8bfc;\n      background: white; }\n      .btn.white.outline:hover, .btn.white.outline:focus, .btn.white.outline:active,\n      .navbar .btn.white.outline:hover,\n      .navbar .btn.white.outline:focus,\n      .navbar .btn.white.outline:active {\n        color: #186bfb;\n        background: white; }\n  .btn.grey,\n  .navbar .btn.grey {\n    background: #9da5b3; }\n    .btn.grey:hover, .btn.grey:focus, .btn.grey:active,\n    .navbar .btn.grey:hover,\n    .navbar .btn.grey:focus,\n    .navbar .btn.grey:active {\n      background: #9da5b3; }\n    .btn.grey.outline,\n    .navbar .btn.grey.outline {\n      color: #9da5b3;\n      background: transparent; }\n      .btn.grey.outline:hover, .btn.grey.outline:focus, .btn.grey.outline:active, .btn.grey.outline:active:focus, .btn.grey.outline:active:hover,\n      .navbar .btn.grey.outline:hover,\n      .navbar .btn.grey.outline:focus,\n      .navbar .btn.grey.outline:active,\n      .navbar .btn.grey.outline:active:focus,\n      .navbar .btn.grey.outline:active:hover {\n        color: #808b9d;\n        background: transparent; }\n  .btn.dark,\n  .navbar .btn.dark {\n    color: white; }\n  .btn.dark-pink,\n  .navbar .btn.dark-pink {\n    background: #212f45;\n    color: #ff567b; }\n    .btn.dark-pink:hover, .btn.dark-pink:focus, .btn.dark-pink:active, .btn.dark-pink:active:focus, .btn.dark-pink:active:hover,\n    .navbar .btn.dark-pink:hover,\n    .navbar .btn.dark-pink:focus,\n    .navbar .btn.dark-pink:active,\n    .navbar .btn.dark-pink:active:focus,\n    .navbar .btn.dark-pink:active:hover {\n      color: #ff567b;\n      background: #293b56; }\n  .btn.orange,\n  .navbar .btn.orange {\n    background-color: #ffa800; }\n    .btn.orange:hover,\n    .navbar .btn.orange:hover {\n      background-color: #feb323; }\n  .btn.sm,\n  .navbar .btn.sm {\n    font-weight: 600;\n    border-radius: 6px;\n    letter-spacing: 0;\n    text-transform: none;\n    padding: 12px 19px 10px; }\n  .btn.rounded,\n  .navbar .btn.rounded {\n    border-radius: 2.5em;\n    letter-spacing: 0;\n    text-transform: none;\n    font-weight: 500;\n    font-size: 16px;\n    padding: 19px 25px 18px;\n    line-height: 1em; }\n    .btn.rounded.sm,\n    .navbar .btn.rounded.sm {\n      padding: 14px 24px 14px;\n      font-size: 14px;\n      font-weight: 600; }\n  .btn.uppercase,\n  .navbar .btn.uppercase {\n    text-transform: uppercase; }\n  .btn.micro,\n  .navbar .btn.micro {\n    font-family: \"Eina\", \"Helvetica Neue\", Helvetica, sans-serif;\n    padding: 4px 8px;\n    font-size: 10px;\n    letter-spacing: 0;\n    font-weight: 700;\n    text-transform: uppercase;\n    background: #fff;\n    border: 1px solid rgba(56, 128, 255, 0.3);\n    color: #3880ff;\n    box-shadow: none; }\n    .btn.micro:hover,\n    .navbar .btn.micro:hover {\n      border-color: #3880ff; }\n    .btn.micro:active, .btn.micro:active:focus, .btn.micro:active:hover,\n    .navbar .btn.micro:active,\n    .navbar .btn.micro:active:focus,\n    .navbar .btn.micro:active:hover {\n      background: #f2f8ff;\n      border-color: #85b1ff;\n      box-shadow: inset 0 1px 4px rgba(0, 0, 0, 0.1); }\n\n.draggable {\n  height: 345px;\n  position: relative; }\n  .draggable .code,\n  .draggable .app {\n    position: absolute;\n    top: 0;\n    right: 0;\n    bottom: 0;\n    left: 0;\n    background: white;\n    border-radius: 8px; }\n  .draggable .app {\n    right: 0;\n    position: absolute;\n    overflow: hidden;\n    padding: 9px 0 0 9px;\n    background: white url(\"/img/home/ios-list-design.png\") no-repeat 0 bottom;\n    background-size: 540px; }\n  .draggable .code code {\n    padding: 0;\n    position: absolute;\n    top: 0;\n    bottom: 0;\n    right: 0;\n    left: 0;\n    background: transparent;\n    padding-top: 15px; }\n  .draggable .code pre {\n    font-family: monospace;\n    background-color: #fff;\n    position: absolute;\n    top: 0;\n    right: 0;\n    left: 0;\n    bottom: 0;\n    overflow: hidden;\n    line-height: 0em;\n    counter-reset: line;\n    white-space: pre-wrap;\n    padding: 0;\n    border: 0;\n    margin: 0; }\n    .draggable .code pre::before {\n      background: #f3f7ff;\n      position: absolute;\n      top: 0;\n      bottom: 0;\n      left: 0;\n      width: 40px;\n      content: '';\n      display: block; }\n    .draggable .code pre span.line {\n      display: block;\n      padding: 12px 0 12px 55px;\n      position: relative; }\n      .draggable .code pre span.line:before {\n        counter-increment: line;\n        content: counter(line);\n        display: block;\n        color: #79a5f1;\n        position: absolute;\n        top: 0;\n        left: 0;\n        bottom: 0;\n        width: 40px;\n        text-align: right;\n        padding-top: 12px;\n        padding-right: 8px; }\n  .draggable .toggle {\n    width: 4px;\n    top: 0 !important;\n    bottom: 0;\n    right: 0;\n    position: absolute;\n    box-shadow: 0 0 18px rgba(0, 0, 0, 0.1), 0 0 4px rgba(0, 0, 0, 0.06);\n    background: white;\n    z-index: 3;\n    cursor: -webkit-grab;\n    cursor: grab; }\n    .draggable .toggle::after {\n      background: url(\"/img/home/drag-button.png\") no-repeat 0 0;\n      background-size: 64px;\n      width: 64px;\n      height: 64px;\n      display: block;\n      content: '';\n      top: calc(50% - 40px);\n      left: -28px;\n      position: absolute; }\n\n/*! jQuery UI - v1.12.1 - 2016-11-14\n* http://jqueryui.com\n* Includes: draggable.css, theme.css\n* To view and modify this theme, visit http://jqueryui.com/themeroller/?scope=&folderName=base&cornerRadiusShadow=8px&offsetLeftShadow=0px&offsetTopShadow=0px&thicknessShadow=5px&opacityShadow=30&bgImgOpacityShadow=0&bgTextureShadow=flat&bgColorShadow=666666&opacityOverlay=30&bgImgOpacityOverlay=0&bgTextureOverlay=flat&bgColorOverlay=aaaaaa&iconColorError=cc0000&fcError=5f3f3f&borderColorError=f1a899&bgTextureError=flat&bgColorError=fddfdf&iconColorHighlight=777620&fcHighlight=777620&borderColorHighlight=dad55e&bgTextureHighlight=flat&bgColorHighlight=fffa90&iconColorActive=ffffff&fcActive=ffffff&borderColorActive=003eff&bgTextureActive=flat&bgColorActive=007fff&iconColorHover=555555&fcHover=2b2b2b&borderColorHover=cccccc&bgTextureHover=flat&bgColorHover=ededed&iconColorDefault=777777&fcDefault=454545&borderColorDefault=c5c5c5&bgTextureDefault=flat&bgColorDefault=f6f6f6&iconColorContent=444444&fcContent=333333&borderColorContent=dddddd&bgTextureContent=flat&bgColorContent=ffffff&iconColorHeader=444444&fcHeader=333333&borderColorHeader=dddddd&bgTextureHeader=flat&bgColorHeader=e9e9e9&cornerRadius=3px&fwDefault=normal&fsDefault=1em&ffDefault=Arial%2CHelvetica%2Csans-serif\n* Copyright jQuery Foundation and other contributors; Licensed MIT */\n.ui-draggable-handle {\n  -ms-touch-action: none;\n  touch-action: none; }\n\n/* Component containers\n----------------------------------*/\n.ui-widget {\n  font-family: Arial,Helvetica,sans-serif;\n  font-size: 1em; }\n\n.ui-widget .ui-widget {\n  font-size: 1em; }\n\n.ui-widget input,\n.ui-widget select,\n.ui-widget textarea,\n.ui-widget button {\n  font-family: Arial,Helvetica,sans-serif;\n  font-size: 1em; }\n\n.ui-widget.ui-widget-content {\n  border: 1px solid #c5c5c5; }\n\n.ui-widget-content {\n  border: 1px solid #dddddd;\n  background: #ffffff;\n  color: #333333; }\n\n.ui-widget-content a {\n  color: #333333; }\n\n.ui-widget-header {\n  border: 1px solid #dddddd;\n  background: #e9e9e9;\n  color: #333333;\n  font-weight: bold; }\n\n.ui-widget-header a {\n  color: #333333; }\n\n/* Interaction states\n----------------------------------*/\n.ui-state-default,\n.ui-widget-content .ui-state-default,\n.ui-widget-header .ui-state-default,\n.ui-button,\nhtml .ui-button.ui-state-disabled:hover,\nhtml .ui-button.ui-state-disabled:active {\n  border: 1px solid #c5c5c5;\n  background: #f6f6f6;\n  font-weight: normal;\n  color: #454545; }\n\n.ui-state-default a,\n.ui-state-default a:link,\n.ui-state-default a:visited,\na.ui-button,\na:link.ui-button,\na:visited.ui-button,\n.ui-button {\n  color: #454545;\n  text-decoration: none; }\n\n.ui-state-hover,\n.ui-widget-content .ui-state-hover,\n.ui-widget-header .ui-state-hover,\n.ui-state-focus,\n.ui-widget-content .ui-state-focus,\n.ui-widget-header .ui-state-focus,\n.ui-button:hover,\n.ui-button:focus {\n  border: 1px solid #cccccc;\n  background: #ededed;\n  font-weight: normal;\n  color: #2b2b2b; }\n\n.ui-state-hover a,\n.ui-state-hover a:hover,\n.ui-state-hover a:link,\n.ui-state-hover a:visited,\n.ui-state-focus a,\n.ui-state-focus a:hover,\n.ui-state-focus a:link,\n.ui-state-focus a:visited,\na.ui-button:hover,\na.ui-button:focus {\n  color: #2b2b2b;\n  text-decoration: none; }\n\n.ui-visual-focus {\n  box-shadow: 0 0 3px 1px #5e9ed6; }\n\n.ui-state-active,\n.ui-widget-content .ui-state-active,\n.ui-widget-header .ui-state-active,\na.ui-button:active,\n.ui-button:active,\n.ui-button.ui-state-active:hover {\n  border: 1px solid #003eff;\n  background: #007fff;\n  font-weight: normal;\n  color: #ffffff; }\n\n.ui-icon-background,\n.ui-state-active .ui-icon-background {\n  border: #003eff;\n  background-color: #ffffff; }\n\n.ui-state-active a,\n.ui-state-active a:link,\n.ui-state-active a:visited {\n  color: #ffffff;\n  text-decoration: none; }\n\n/* Interaction Cues\n----------------------------------*/\n.ui-state-highlight,\n.ui-widget-content .ui-state-highlight,\n.ui-widget-header .ui-state-highlight {\n  border: 1px solid #dad55e;\n  background: #fffa90;\n  color: #777620; }\n\n.ui-state-checked {\n  border: 1px solid #dad55e;\n  background: #fffa90; }\n\n.ui-state-highlight a,\n.ui-widget-content .ui-state-highlight a,\n.ui-widget-header .ui-state-highlight a {\n  color: #777620; }\n\n.ui-state-error,\n.ui-widget-content .ui-state-error,\n.ui-widget-header .ui-state-error {\n  border: 1px solid #f1a899;\n  background: #fddfdf;\n  color: #5f3f3f; }\n\n.ui-state-error a,\n.ui-widget-content .ui-state-error a,\n.ui-widget-header .ui-state-error a {\n  color: #5f3f3f; }\n\n.ui-state-error-text,\n.ui-widget-content .ui-state-error-text,\n.ui-widget-header .ui-state-error-text {\n  color: #5f3f3f; }\n\n.ui-priority-primary,\n.ui-widget-content .ui-priority-primary,\n.ui-widget-header .ui-priority-primary {\n  font-weight: bold; }\n\n.ui-priority-secondary,\n.ui-widget-content .ui-priority-secondary,\n.ui-widget-header .ui-priority-secondary {\n  opacity: .7;\n  filter: Alpha(Opacity=70);\n  /* support: IE8 */\n  font-weight: normal; }\n\n.ui-state-disabled,\n.ui-widget-content .ui-state-disabled,\n.ui-widget-header .ui-state-disabled {\n  opacity: .35;\n  filter: Alpha(Opacity=35);\n  /* support: IE8 */\n  background-image: none; }\n\n.ui-state-disabled .ui-icon {\n  filter: Alpha(Opacity=35);\n  /* support: IE8 - See #6059 */ }\n\n/* Icons\n----------------------------------*/\n/* states and images */\n.ui-icon {\n  width: 16px;\n  height: 16px; }\n\n.ui-icon,\n.ui-widget-content .ui-icon {\n  background-image: url(\"images/ui-icons_444444_256x240.png\"); }\n\n.ui-widget-header .ui-icon {\n  background-image: url(\"images/ui-icons_444444_256x240.png\"); }\n\n.ui-state-hover .ui-icon,\n.ui-state-focus .ui-icon,\n.ui-button:hover .ui-icon,\n.ui-button:focus .ui-icon {\n  background-image: url(\"images/ui-icons_555555_256x240.png\"); }\n\n.ui-state-active .ui-icon,\n.ui-button:active .ui-icon {\n  background-image: url(\"images/ui-icons_ffffff_256x240.png\"); }\n\n.ui-state-highlight .ui-icon,\n.ui-button .ui-state-highlight.ui-icon {\n  background-image: url(\"images/ui-icons_777620_256x240.png\"); }\n\n.ui-state-error .ui-icon,\n.ui-state-error-text .ui-icon {\n  background-image: url(\"images/ui-icons_cc0000_256x240.png\"); }\n\n.ui-button .ui-icon {\n  background-image: url(\"images/ui-icons_777777_256x240.png\"); }\n\n/* positioning */\n.ui-icon-blank {\n  background-position: 16px 16px; }\n\n.ui-icon-caret-1-n {\n  background-position: 0 0; }\n\n.ui-icon-caret-1-ne {\n  background-position: -16px 0; }\n\n.ui-icon-caret-1-e {\n  background-position: -32px 0; }\n\n.ui-icon-caret-1-se {\n  background-position: -48px 0; }\n\n.ui-icon-caret-1-s {\n  background-position: -65px 0; }\n\n.ui-icon-caret-1-sw {\n  background-position: -80px 0; }\n\n.ui-icon-caret-1-w {\n  background-position: -96px 0; }\n\n.ui-icon-caret-1-nw {\n  background-position: -112px 0; }\n\n.ui-icon-caret-2-n-s {\n  background-position: -128px 0; }\n\n.ui-icon-caret-2-e-w {\n  background-position: -144px 0; }\n\n.ui-icon-triangle-1-n {\n  background-position: 0 -16px; }\n\n.ui-icon-triangle-1-ne {\n  background-position: -16px -16px; }\n\n.ui-icon-triangle-1-e {\n  background-position: -32px -16px; }\n\n.ui-icon-triangle-1-se {\n  background-position: -48px -16px; }\n\n.ui-icon-triangle-1-s {\n  background-position: -65px -16px; }\n\n.ui-icon-triangle-1-sw {\n  background-position: -80px -16px; }\n\n.ui-icon-triangle-1-w {\n  background-position: -96px -16px; }\n\n.ui-icon-triangle-1-nw {\n  background-position: -112px -16px; }\n\n.ui-icon-triangle-2-n-s {\n  background-position: -128px -16px; }\n\n.ui-icon-triangle-2-e-w {\n  background-position: -144px -16px; }\n\n.ui-icon-arrow-1-n {\n  background-position: 0 -32px; }\n\n.ui-icon-arrow-1-ne {\n  background-position: -16px -32px; }\n\n.ui-icon-arrow-1-e {\n  background-position: -32px -32px; }\n\n.ui-icon-arrow-1-se {\n  background-position: -48px -32px; }\n\n.ui-icon-arrow-1-s {\n  background-position: -65px -32px; }\n\n.ui-icon-arrow-1-sw {\n  background-position: -80px -32px; }\n\n.ui-icon-arrow-1-w {\n  background-position: -96px -32px; }\n\n.ui-icon-arrow-1-nw {\n  background-position: -112px -32px; }\n\n.ui-icon-arrow-2-n-s {\n  background-position: -128px -32px; }\n\n.ui-icon-arrow-2-ne-sw {\n  background-position: -144px -32px; }\n\n.ui-icon-arrow-2-e-w {\n  background-position: -160px -32px; }\n\n.ui-icon-arrow-2-se-nw {\n  background-position: -176px -32px; }\n\n.ui-icon-arrowstop-1-n {\n  background-position: -192px -32px; }\n\n.ui-icon-arrowstop-1-e {\n  background-position: -208px -32px; }\n\n.ui-icon-arrowstop-1-s {\n  background-position: -224px -32px; }\n\n.ui-icon-arrowstop-1-w {\n  background-position: -240px -32px; }\n\n.ui-icon-arrowthick-1-n {\n  background-position: 1px -48px; }\n\n.ui-icon-arrowthick-1-ne {\n  background-position: -16px -48px; }\n\n.ui-icon-arrowthick-1-e {\n  background-position: -32px -48px; }\n\n.ui-icon-arrowthick-1-se {\n  background-position: -48px -48px; }\n\n.ui-icon-arrowthick-1-s {\n  background-position: -64px -48px; }\n\n.ui-icon-arrowthick-1-sw {\n  background-position: -80px -48px; }\n\n.ui-icon-arrowthick-1-w {\n  background-position: -96px -48px; }\n\n.ui-icon-arrowthick-1-nw {\n  background-position: -112px -48px; }\n\n.ui-icon-arrowthick-2-n-s {\n  background-position: -128px -48px; }\n\n.ui-icon-arrowthick-2-ne-sw {\n  background-position: -144px -48px; }\n\n.ui-icon-arrowthick-2-e-w {\n  background-position: -160px -48px; }\n\n.ui-icon-arrowthick-2-se-nw {\n  background-position: -176px -48px; }\n\n.ui-icon-arrowthickstop-1-n {\n  background-position: -192px -48px; }\n\n.ui-icon-arrowthickstop-1-e {\n  background-position: -208px -48px; }\n\n.ui-icon-arrowthickstop-1-s {\n  background-position: -224px -48px; }\n\n.ui-icon-arrowthickstop-1-w {\n  background-position: -240px -48px; }\n\n.ui-icon-arrowreturnthick-1-w {\n  background-position: 0 -64px; }\n\n.ui-icon-arrowreturnthick-1-n {\n  background-position: -16px -64px; }\n\n.ui-icon-arrowreturnthick-1-e {\n  background-position: -32px -64px; }\n\n.ui-icon-arrowreturnthick-1-s {\n  background-position: -48px -64px; }\n\n.ui-icon-arrowreturn-1-w {\n  background-position: -64px -64px; }\n\n.ui-icon-arrowreturn-1-n {\n  background-position: -80px -64px; }\n\n.ui-icon-arrowreturn-1-e {\n  background-position: -96px -64px; }\n\n.ui-icon-arrowreturn-1-s {\n  background-position: -112px -64px; }\n\n.ui-icon-arrowrefresh-1-w {\n  background-position: -128px -64px; }\n\n.ui-icon-arrowrefresh-1-n {\n  background-position: -144px -64px; }\n\n.ui-icon-arrowrefresh-1-e {\n  background-position: -160px -64px; }\n\n.ui-icon-arrowrefresh-1-s {\n  background-position: -176px -64px; }\n\n.ui-icon-arrow-4 {\n  background-position: 0 -80px; }\n\n.ui-icon-arrow-4-diag {\n  background-position: -16px -80px; }\n\n.ui-icon-extlink {\n  background-position: -32px -80px; }\n\n.ui-icon-newwin {\n  background-position: -48px -80px; }\n\n.ui-icon-refresh {\n  background-position: -64px -80px; }\n\n.ui-icon-shuffle {\n  background-position: -80px -80px; }\n\n.ui-icon-transfer-e-w {\n  background-position: -96px -80px; }\n\n.ui-icon-transferthick-e-w {\n  background-position: -112px -80px; }\n\n.ui-icon-folder-collapsed {\n  background-position: 0 -96px; }\n\n.ui-icon-folder-open {\n  background-position: -16px -96px; }\n\n.ui-icon-document {\n  background-position: -32px -96px; }\n\n.ui-icon-document-b {\n  background-position: -48px -96px; }\n\n.ui-icon-note {\n  background-position: -64px -96px; }\n\n.ui-icon-mail-closed {\n  background-position: -80px -96px; }\n\n.ui-icon-mail-open {\n  background-position: -96px -96px; }\n\n.ui-icon-suitcase {\n  background-position: -112px -96px; }\n\n.ui-icon-comment {\n  background-position: -128px -96px; }\n\n.ui-icon-person {\n  background-position: -144px -96px; }\n\n.ui-icon-print {\n  background-position: -160px -96px; }\n\n.ui-icon-trash {\n  background-position: -176px -96px; }\n\n.ui-icon-locked {\n  background-position: -192px -96px; }\n\n.ui-icon-unlocked {\n  background-position: -208px -96px; }\n\n.ui-icon-bookmark {\n  background-position: -224px -96px; }\n\n.ui-icon-tag {\n  background-position: -240px -96px; }\n\n.ui-icon-home {\n  background-position: 0 -112px; }\n\n.ui-icon-flag {\n  background-position: -16px -112px; }\n\n.ui-icon-calendar {\n  background-position: -32px -112px; }\n\n.ui-icon-cart {\n  background-position: -48px -112px; }\n\n.ui-icon-pencil {\n  background-position: -64px -112px; }\n\n.ui-icon-clock {\n  background-position: -80px -112px; }\n\n.ui-icon-disk {\n  background-position: -96px -112px; }\n\n.ui-icon-calculator {\n  background-position: -112px -112px; }\n\n.ui-icon-zoomin {\n  background-position: -128px -112px; }\n\n.ui-icon-zoomout {\n  background-position: -144px -112px; }\n\n.ui-icon-search {\n  background-position: -160px -112px; }\n\n.ui-icon-wrench {\n  background-position: -176px -112px; }\n\n.ui-icon-gear {\n  background-position: -192px -112px; }\n\n.ui-icon-heart {\n  background-position: -208px -112px; }\n\n.ui-icon-star {\n  background-position: -224px -112px; }\n\n.ui-icon-link {\n  background-position: -240px -112px; }\n\n.ui-icon-cancel {\n  background-position: 0 -128px; }\n\n.ui-icon-plus {\n  background-position: -16px -128px; }\n\n.ui-icon-plusthick {\n  background-position: -32px -128px; }\n\n.ui-icon-minus {\n  background-position: -48px -128px; }\n\n.ui-icon-minusthick {\n  background-position: -64px -128px; }\n\n.ui-icon-close {\n  background-position: -80px -128px; }\n\n.ui-icon-closethick {\n  background-position: -96px -128px; }\n\n.ui-icon-key {\n  background-position: -112px -128px; }\n\n.ui-icon-lightbulb {\n  background-position: -128px -128px; }\n\n.ui-icon-scissors {\n  background-position: -144px -128px; }\n\n.ui-icon-clipboard {\n  background-position: -160px -128px; }\n\n.ui-icon-copy {\n  background-position: -176px -128px; }\n\n.ui-icon-contact {\n  background-position: -192px -128px; }\n\n.ui-icon-image {\n  background-position: -208px -128px; }\n\n.ui-icon-video {\n  background-position: -224px -128px; }\n\n.ui-icon-script {\n  background-position: -240px -128px; }\n\n.ui-icon-alert {\n  background-position: 0 -144px; }\n\n.ui-icon-info {\n  background-position: -16px -144px; }\n\n.ui-icon-notice {\n  background-position: -32px -144px; }\n\n.ui-icon-help {\n  background-position: -48px -144px; }\n\n.ui-icon-check {\n  background-position: -64px -144px; }\n\n.ui-icon-bullet {\n  background-position: -80px -144px; }\n\n.ui-icon-radio-on {\n  background-position: -96px -144px; }\n\n.ui-icon-radio-off {\n  background-position: -112px -144px; }\n\n.ui-icon-pin-w {\n  background-position: -128px -144px; }\n\n.ui-icon-pin-s {\n  background-position: -144px -144px; }\n\n.ui-icon-play {\n  background-position: 0 -160px; }\n\n.ui-icon-pause {\n  background-position: -16px -160px; }\n\n.ui-icon-seek-next {\n  background-position: -32px -160px; }\n\n.ui-icon-seek-prev {\n  background-position: -48px -160px; }\n\n.ui-icon-seek-end {\n  background-position: -64px -160px; }\n\n.ui-icon-seek-start {\n  background-position: -80px -160px; }\n\n/* ui-icon-seek-first is deprecated, use ui-icon-seek-start instead */\n.ui-icon-seek-first {\n  background-position: -80px -160px; }\n\n.ui-icon-stop {\n  background-position: -96px -160px; }\n\n.ui-icon-eject {\n  background-position: -112px -160px; }\n\n.ui-icon-volume-off {\n  background-position: -128px -160px; }\n\n.ui-icon-volume-on {\n  background-position: -144px -160px; }\n\n.ui-icon-power {\n  background-position: 0 -176px; }\n\n.ui-icon-signal-diag {\n  background-position: -16px -176px; }\n\n.ui-icon-signal {\n  background-position: -32px -176px; }\n\n.ui-icon-battery-0 {\n  background-position: -48px -176px; }\n\n.ui-icon-battery-1 {\n  background-position: -64px -176px; }\n\n.ui-icon-battery-2 {\n  background-position: -80px -176px; }\n\n.ui-icon-battery-3 {\n  background-position: -96px -176px; }\n\n.ui-icon-circle-plus {\n  background-position: 0 -192px; }\n\n.ui-icon-circle-minus {\n  background-position: -16px -192px; }\n\n.ui-icon-circle-close {\n  background-position: -32px -192px; }\n\n.ui-icon-circle-triangle-e {\n  background-position: -48px -192px; }\n\n.ui-icon-circle-triangle-s {\n  background-position: -64px -192px; }\n\n.ui-icon-circle-triangle-w {\n  background-position: -80px -192px; }\n\n.ui-icon-circle-triangle-n {\n  background-position: -96px -192px; }\n\n.ui-icon-circle-arrow-e {\n  background-position: -112px -192px; }\n\n.ui-icon-circle-arrow-s {\n  background-position: -128px -192px; }\n\n.ui-icon-circle-arrow-w {\n  background-position: -144px -192px; }\n\n.ui-icon-circle-arrow-n {\n  background-position: -160px -192px; }\n\n.ui-icon-circle-zoomin {\n  background-position: -176px -192px; }\n\n.ui-icon-circle-zoomout {\n  background-position: -192px -192px; }\n\n.ui-icon-circle-check {\n  background-position: -208px -192px; }\n\n.ui-icon-circlesmall-plus {\n  background-position: 0 -208px; }\n\n.ui-icon-circlesmall-minus {\n  background-position: -16px -208px; }\n\n.ui-icon-circlesmall-close {\n  background-position: -32px -208px; }\n\n.ui-icon-squaresmall-plus {\n  background-position: -48px -208px; }\n\n.ui-icon-squaresmall-minus {\n  background-position: -64px -208px; }\n\n.ui-icon-squaresmall-close {\n  background-position: -80px -208px; }\n\n.ui-icon-grip-dotted-vertical {\n  background-position: 0 -224px; }\n\n.ui-icon-grip-dotted-horizontal {\n  background-position: -16px -224px; }\n\n.ui-icon-grip-solid-vertical {\n  background-position: -32px -224px; }\n\n.ui-icon-grip-solid-horizontal {\n  background-position: -48px -224px; }\n\n.ui-icon-gripsmall-diagonal-se {\n  background-position: -64px -224px; }\n\n.ui-icon-grip-diagonal-se {\n  background-position: -80px -224px; }\n\n/* Misc visuals\n----------------------------------*/\n/* Corner radius */\n.ui-corner-all,\n.ui-corner-top,\n.ui-corner-left,\n.ui-corner-tl {\n  border-top-left-radius: 3px; }\n\n.ui-corner-all,\n.ui-corner-top,\n.ui-corner-right,\n.ui-corner-tr {\n  border-top-right-radius: 3px; }\n\n.ui-corner-all,\n.ui-corner-bottom,\n.ui-corner-left,\n.ui-corner-bl {\n  border-bottom-left-radius: 3px; }\n\n.ui-corner-all,\n.ui-corner-bottom,\n.ui-corner-right,\n.ui-corner-br {\n  border-bottom-right-radius: 3px; }\n\n/* Overlays */\n.ui-widget-overlay {\n  background: #aaaaaa;\n  opacity: .3;\n  filter: Alpha(Opacity=30);\n  /* support: IE8 */ }\n\n.ui-widget-shadow {\n  box-shadow: 0px 0px 5px #666666; }\n\n.alert,\n.docs-container main .alert {\n  border-radius: 4px;\n  display: inline-block;\n  padding: 20px 28px;\n  position: relative;\n  width: 100%;\n  font-weight: 400;\n  margin: 0 0 20px;\n  background: rgba(253, 200, 69, 0.1);\n  border: 1px solid rgba(253, 200, 69, 0.3);\n  color: #353940;\n  font-size: 14px;\n  /*\n  &::before {\n    content: '\\f137';\n    font-family: 'Ionicons';\n    position: absolute;\n    left: 25px;\n    font-size: 30px;\n    font-weight: 300;\n    color: rgba(255,255,255,.9);\n  }\n  */ }\n  .alert a,\n  .alert a:not(.btn),\n  .docs-container main .alert a,\n  .docs-container main .alert a:not(.btn) {\n    color: white;\n    opacity: 1; }\n    .alert a:hover,\n    .alert a:not(.btn):hover,\n    .docs-container main .alert a:hover,\n    .docs-container main .alert a:not(.btn):hover {\n      color: #fff; }\n  .alert-success,\n  .docs-container main .alert-success {\n    background-color: rgba(30, 209, 118, 0.1);\n    border-color: rgba(30, 209, 118, 0.3); }\n\n.side-nav {\n  position: fixed;\n  background: #f9fafb;\n  overflow-y: scroll;\n  top: 0;\n  bottom: 0;\n  z-index: 1;\n  overflow-y: -moz-scrollbars-none;\n  -ms-overflow-style: -ms-autohiding-scrollbar;\n  -webkit-overflow-scrolling: touch;\n  -webkit-touch-callout: none;\n  -webkit-user-select: none;\n     -moz-user-select: none;\n      -ms-user-select: none;\n          user-select: none;\n  overflow-y: scroll; }\n  .side-nav::-webkit-scrollbar {\n    display: none;\n    width: 0 !important; }\n  .side-nav .back-to-main a {\n    padding-top: 5px;\n    border: 1px solid #e6e9ee;\n    padding: 10px 12px 13px;\n    margin-right: 20px;\n    margin-top: -15px;\n    border-radius: 4px;\n    margin-bottom: 10px;\n    text-align: center;\n    transition: .2s border-color, .2s color, .2s background, .2s box-shadow; }\n    .side-nav .back-to-main a::before {\n      font-family: 'Ionicons';\n      -webkit-font-smoothing: antialiased;\n      content: '\\f3cf';\n      font-size: 16px;\n      font-weight: 800;\n      position: relative;\n      padding-right: 5px;\n      top: 2px; }\n    .side-nav .back-to-main a:hover {\n      border-color: #DFE3E8;\n      color: #4a8bfc;\n      box-shadow: 0 1px 2px rgba(0, 0, 0, 0.06);\n      background: #fdfdfd; }\n    .side-nav .back-to-main a:focus::after {\n      border-right-color: transparent; }\n  .side-nav .form-group {\n    position: relative;\n    border-bottom: 1px solid #e6e9ee;\n    min-height: 54px; }\n    .side-nav .form-group.search {\n      padding: 10px 20px 10px;\n      margin-bottom: 0; }\n      .side-nav .form-group.search:hover::before {\n        color: #a4abb5; }\n      .side-nav .form-group.search::before {\n        font-family: 'Ionicons';\n        content: '\\f4a5';\n        font-size: 16px;\n        font-weight: 800;\n        color: #bdc3cc;\n        position: absolute;\n        top: 16px;\n        left: 34px;\n        transition: .2s color; }\n      .side-nav .form-group.search input {\n        border: 1px solid #e6e9ee;\n        border-radius: 20px;\n        padding: 8px 0 6px 35px;\n        font-size: 13px;\n        font-weight: 500;\n        color: #bdc3cc;\n        box-shadow: none;\n        transition: .2s border-color, .2s box-shadow; }\n        .side-nav .form-group.search input:focus, .side-nav .form-group.search input:hover {\n          box-shadow: 0 1px 2px rgba(0, 0, 0, 0.1);\n          border-color: #4a8bfc; }\n    .side-nav .form-group select {\n      padding: 17px 20px;\n      display: block;\n      width: 100%;\n      background: none;\n      border-radius: 0;\n      border: 0;\n      outline: none;\n      color: #9da5b3;\n      -webkit-appearance: none;\n      -moz-appearance: none;\n      appearance: none;\n      transition: .2s border-color, .2s color, .2s background, .2s box-shadow; }\n      .side-nav .form-group select:hover {\n        border-color: #4a8bfc;\n        color: #4a8bfc;\n        box-shadow: 0 1px 2px rgba(0, 0, 0, 0.1);\n        background: #fdfdfd; }\n    .side-nav .form-group:hover {\n      transition: .2s border-color; }\n      .side-nav .form-group:hover::before {\n        color: #4a8bfc; }\n    .side-nav .form-group.api-select::before {\n      font-family: 'Ionicons';\n      -webkit-font-smoothing: antialiased;\n      content: '\\f3d0';\n      font-size: 14px;\n      font-weight: 800;\n      color: #a4abb5;\n      position: absolute;\n      top: 17px;\n      right: 20px;\n      transition: .2s color; }\n  .side-nav > ul.nested-menu > li > ul > li > a {\n    color: #9da5b3;\n    text-transform: uppercase;\n    font-size: 10px;\n    font-weight: 700;\n    letter-spacing: 2px;\n    text-decoration: none;\n    display: block;\n    padding: 10px 0;\n    position: relative;\n    cursor: pointer; }\n  .side-nav > ul > .active > a {\n    color: #4f5358; }\n  .side-nav ul {\n    list-style: none;\n    padding: 18px 0 20px 20px; }\n    .side-nav ul a {\n      color: #9da5b3;\n      text-transform: uppercase;\n      font-size: 10px;\n      font-weight: 700;\n      font-family: \"Eina\", \"Helvetica Neue\", Helvetica, sans-serif;\n      letter-spacing: 2px;\n      text-decoration: none;\n      display: block;\n      padding: 10px 0;\n      position: relative;\n      cursor: pointer; }\n      .side-nav ul a::after {\n        display: block;\n        position: absolute;\n        right: 0;\n        top: 0;\n        bottom: 0;\n        content: '';\n        border-right: 2px solid #4a8bfc;\n        -webkit-transform: scaleY(0.0001);\n                transform: scaleY(0.0001);\n        transition: -webkit-transform .08s ease-in-out;\n        transition: transform .08s ease-in-out;\n        transition: transform .08s ease-in-out, -webkit-transform .08s ease-in-out; }\n    .side-nav ul ul,\n    .side-nav ul .capitalize {\n      padding: 0;\n      opacity: 1; }\n      .side-nav ul ul a,\n      .side-nav ul .capitalize a {\n        color: #4C555A;\n        text-transform: none;\n        font-size: 13px;\n        font-weight: 500;\n        letter-spacing: 0;\n        height: 34px;\n        transition: height cubic-bezier(0.36, 0.66, 0.04, 1) 0.3s, padding cubic-bezier(0.36, 0.66, 0.04, 1) 0.3s, color 0.2s; }\n        .side-nav ul ul a:empty,\n        .side-nav ul .capitalize a:empty {\n          display: none; }\n      .side-nav ul ul.ng-hide-add, .side-nav ul ul.ng-hide-remove,\n      .side-nav ul .capitalize.ng-hide-add,\n      .side-nav ul .capitalize.ng-hide-remove {\n        transition: opacity cubic-bezier(0.36, 0.66, 0.04, 1) 0.3s; }\n      .side-nav ul ul.ng-hide,\n      .side-nav ul .capitalize.ng-hide {\n        opacity: 0; }\n        .side-nav ul ul.ng-hide a,\n        .side-nav ul .capitalize.ng-hide a {\n          padding: 0;\n          height: 0 !important; }\n    .side-nav ul ul .active > a,\n    .side-nav ul .capitalize.active > a,\n    .side-nav ul a:hover,\n    .side-nav ul .active.top-level > a {\n      color: #4a8bfc;\n      text-decoration: none;\n      background: none; }\n    .side-nav ul ul .active > a::after,\n    .side-nav ul .capitalize.active > a::after,\n    .side-nav ul a:focus::after,\n    .side-nav ul .active.top-level > a::after {\n      -webkit-transform: scaleY(1);\n              transform: scaleY(1);\n      outline: none; }\n  .side-nav .beta {\n    background: #4a8bfc;\n    color: white;\n    font-weight: 700;\n    font-size: 10px;\n    padding: 0 2px;\n    border-radius: 3px;\n    position: relative;\n    top: -2px; }\n  .side-nav .paid {\n    background: #4a8bfc;\n    color: white;\n    font-weight: 700;\n    font-size: 10px;\n    padding: 0 2px;\n    border-radius: 3px;\n    position: relative;\n    top: -2px; }\n  .side-nav .v4-beta {\n    margin-top: 7px;\n    display: block;\n    margin-bottom: 14px; }\n    .side-nav .v4-beta a {\n      display: block;\n      position: relative;\n      color: #596c8c;\n      padding: 15px 15px 15px 39px;\n      margin-right: 20px; }\n      .side-nav .v4-beta a > strong,\n      .side-nav .v4-beta a > i,\n      .side-nav .v4-beta a > span {\n        position: relative;\n        z-index: 1; }\n      .side-nav .v4-beta a::before {\n        background: white url(\"/img/docs/ionic-side-icon.png\") no-repeat 0 50%;\n        background-size: 28px;\n        border-radius: 6px;\n        position: absolute;\n        content: '';\n        top: 0;\n        right: 0;\n        bottom: 0;\n        left: 0;\n        z-index: 1;\n        box-shadow: 0 2px 8px rgba(0, 0, 0, 0.2);\n        transition: .3s box-shadow ease-out; }\n      .side-nav .v4-beta a:hover::before {\n        box-shadow: 0 4px 16px rgba(0, 0, 0, 0.16); }\n    .side-nav .v4-beta strong {\n      display: block;\n      font-size: 14px;\n      color: #0f1622;\n      font-weight: 600;\n      text-transform: none;\n      letter-spacing: .01em; }\n    .side-nav .v4-beta span {\n      font-size: 10px;\n      font-weight: 400;\n      text-transform: none;\n      letter-spacing: .01em; }\n    .side-nav .v4-beta a > i {\n      position: absolute;\n      right: 5px;\n      font-size: 18px;\n      color: #d2d6dd;\n      top: calc(50% - 10px); }\n\nbody:not(.ng-scope) .side-nav ul a {\n  transition: none; }\n\n.table > thead > tr > th,\n.table > thead > tr:first-child > th,\n.table > thead:first-child > tr > th,\n.table > thead:first-child > tr:first-child > th,\n.table > tbody > tr > th,\n.table > tbody > tr:first-child > th,\n.table > tbody:first-child > tr > th,\n.table > tbody:first-child > tr:first-child > th {\n  padding: 11px 11px 12px;\n  border-bottom: 1px solid #eee;\n  font-weight: 700; }\n\n.table > thead > tr > td,\n.table > thead > tr:first-child > td,\n.table > thead:first-child > tr > td,\n.table > thead:first-child > tr:first-child > td,\n.table > tbody > tr > td,\n.table > tbody > tr:first-child > td,\n.table > tbody:first-child > tr > td,\n.table > tbody:first-child > tr:first-child > td {\n  padding: 12px;\n  font-weight: 500;\n  border-bottom: 1px solid #eee;\n  color: #555; }\n\n.toc {\n  margin-top: 20px; }\n  .toc .toggle {\n    background: none;\n    border: 0;\n    text-transform: uppercase;\n    color: #b1bac8;\n    font-size: 10px;\n    letter-spacing: 2px;\n    font-weight: 700;\n    position: relative;\n    display: inline;\n    width: 100%;\n    text-align: left;\n    padding: 0;\n    outline: none; }\n    .toc .toggle::after {\n      font-family: Ionicons;\n      content: '\\f3d0';\n      float: right;\n      font-size: 18px;\n      font-weight: 400;\n      transition: .3s transform ease;\n      position: relative;\n      top: -5px; }\n  .toc .expanded ul {\n    list-style: none;\n    padding-left: 15px; }\n    .toc .expanded ul li {\n      font-size: 14px;\n      font-weight: 400;\n      line-height: 1.8em;\n      margin-bottom: 0; }\n      .toc .expanded ul li a {\n        color: #4a8bfc;\n        display: block;\n        max-height: 25px;\n        overflow: hidden;\n        font-weight: 500;\n        transition: 0.3s max-height cubic-bezier(0.36, 0.66, 0.04, 1);\n        overflow: hidden;\n        white-space: nowrap;\n        text-overflow: ellipsis; }\n  .toc .expanded > ul {\n    padding-left: 0; }\n    .toc .expanded > ul > li {\n      font-weight: 500;\n      line-height: 2em; }\n      .toc .expanded > ul > li > a {\n        font-weight: 600; }\n  .toc.collapsed .toggle::after {\n    -webkit-transform: rotate3d(0, 0, 1, -90deg);\n            transform: rotate3d(0, 0, 1, -90deg); }\n  .toc.collapsed .expanded ul li a {\n    max-height: 0; }\n\n.page-pro-docs .docs-container main h2 {\n  padding-top: 0.5em; }\n\n.page-pro-docs .docs-container main p {\n  margin-top: 0.7em;\n  margin-bottom: 0.7em; }\n\n.page-pro-docs .side-nav > ul.nested-menu > li > ul > li > a {\n  margin-top: 15px; }\n\n.docs-container {\n  min-height: 100%; }\n  .docs-container .fixed-header {\n    position: fixed;\n    left: 230px;\n    top: 0px;\n    width: 100%;\n    border-bottom: 1px solid #e6e9ee;\n    background-color: white;\n    padding: 0px 38px;\n    overflow: hidden;\n    -webkit-transform: translate3d(0, 0, 0);\n            transform: translate3d(0, 0, 0); }\n    .docs-container .fixed-header > hgroup {\n      height: 74px;\n      line-height: 74px; }\n      @media (max-width: 767px) {\n        .docs-container .fixed-header > hgroup {\n          height: 46px;\n          line-height: 46px; } }\n      .docs-container .fixed-header > hgroup > * {\n        display: inline-block;\n        margin: 0px;\n        line-height: inherit;\n        vertical-align: top; }\n      .docs-container .fixed-header > hgroup h3 + h4 {\n        position: relative;\n        height: 100%;\n        margin-left: 31px;\n        opacity: 1;\n        transition: opacity 0.4s; }\n        .docs-container .fixed-header > hgroup h3 + h4.not-shown {\n          opacity: 0; }\n        .docs-container .fixed-header > hgroup h3 + h4:after {\n          content: '';\n          position: absolute;\n          left: -24px;\n          top: calc(50% - 5px);\n          width: 10px;\n          height: 10px;\n          -webkit-transform: rotate(45deg);\n                  transform: rotate(45deg);\n          border-right: 2px solid;\n          border-top: 2px solid;\n          border-color: #333333; }\n        .docs-container .fixed-header > hgroup h3 + h4 > nobr {\n          position: absolute;\n          transition: opacity 0.3s, -webkit-transform 0.3s;\n          transition: transform 0.3s, opacity 0.3s;\n          transition: transform 0.3s, opacity 0.3s, -webkit-transform 0.3s; }\n          .docs-container .fixed-header > hgroup h3 + h4 > nobr.top {\n            -webkit-transform: translateY(-28px);\n                    transform: translateY(-28px);\n            opacity: 0; }\n          .docs-container .fixed-header > hgroup h3 + h4 > nobr.middle, .docs-container .fixed-header > hgroup h3 + h4 > nobr.top.middle, .docs-container .fixed-header > hgroup h3 + h4 > nobr.bottom.middle {\n            -webkit-transform: translateY(2px);\n                    transform: translateY(2px);\n            opacity: 1; }\n          .docs-container .fixed-header > hgroup h3 + h4 > nobr.bottom {\n            -webkit-transform: translateY(32px);\n                    transform: translateY(32px);\n            opacity: 0; }\n          .docs-container .fixed-header > hgroup h3 + h4 > nobr.no-transition {\n            transition-duration: 0s, 0s; }\n  @media (max-width: 767px) {\n    .docs-container .fixed-header {\n      left: 0px; } }\n  .docs-container main {\n    padding: 50px 40px 100px; }\n    .docs-container main h1,\n    .docs-container main h2,\n    .docs-container main h3,\n    .docs-container main h4,\n    .docs-container main h5 {\n      color: #24282e;\n      line-height: 1.4em;\n      margin: 2em 0 1em;\n      font-size: 26px;\n      font-weight: 700;\n      letter-spacing: -0.01em; }\n      .docs-container main h1:first-child,\n      .docs-container main h2:first-child,\n      .docs-container main h3:first-child,\n      .docs-container main h4:first-child,\n      .docs-container main h5:first-child {\n        margin-top: 0; }\n      .docs-container main h1 a.anchor::before,\n      .docs-container main h2 a.anchor::before,\n      .docs-container main h3 a.anchor::before,\n      .docs-container main h4 a.anchor::before,\n      .docs-container main h5 a.anchor::before {\n        content: '\\f22a';\n        font-family: 'Ionicons';\n        margin-left: -15px;\n        margin-right: 5px;\n        font-size: 14px;\n        color: #e6e9ee;\n        transition: .3s color; }\n      .docs-container main h1 a.anchor:hover::before, .docs-container main h1 a.anchor:active::before,\n      .docs-container main h2 a.anchor:hover::before,\n      .docs-container main h2 a.anchor:active::before,\n      .docs-container main h3 a.anchor:hover::before,\n      .docs-container main h3 a.anchor:active::before,\n      .docs-container main h4 a.anchor:hover::before,\n      .docs-container main h4 a.anchor:active::before,\n      .docs-container main h5 a.anchor:hover::before,\n      .docs-container main h5 a.anchor:active::before {\n        color: rgba(74, 139, 252, 0.6); }\n    .docs-container main h1 {\n      margin-bottom: 0; }\n      .docs-container main h1 a.anchor::before {\n        margin-left: -23px; }\n    .docs-container main h2 {\n      padding: 2em 0 0;\n      font-size: 24px; }\n      .docs-container main h2.section-header {\n        border-top: 1px solid #F0F3F7;\n        margin-top: 5.6em; }\n    .docs-container main h3 {\n      margin: 3.2em 0 0;\n      font-size: 18px; }\n      .docs-container main h3.no-para {\n        margin-bottom: 1em; }\n    .docs-container main h4 {\n      font-size: 16px; }\n    .docs-container main h5 {\n      font-size: 14px; }\n    .docs-container main h6 {\n      font-size: 12px; }\n    .docs-container main p {\n      coor: #3a3f47;\n      line-height: 2.1em;\n      margin: 1.2em 0 1.6em;\n      font-weight: 400;\n      font-size: 15px; }\n    .docs-container main pre {\n      border: 1px solid #e6e9ee;\n      background: white;\n      padding: 16px;\n      line-height: 24px; }\n    .docs-container main a:not(.btn) {\n      color: #4a8bfc;\n      text-decoration: none;\n      transition: .2s color; }\n      .docs-container main a:not(.btn):hover {\n        color: #95bbfd; }\n    .docs-container main table {\n      width: 100%; }\n    .docs-container main td,\n    .docs-container main th {\n      white-space: nowrap; }\n      .docs-container main td:last-child,\n      .docs-container main th:last-child {\n        white-space: normal;\n        width: 99%; }\n    .docs-container main b,\n    .docs-container main strong {\n      font-weight: 500;\n      color: #26292e; }\n    .docs-container main .fixed-width {\n      font-family: Menlo, Monaco, Consolas, \"Courier New\", monospace; }\n    .docs-container main .nav a {\n      padding-top: 5px;\n      padding-bottom: 5px; }\n    .docs-container main blockquote {\n      padding: 0 15px;\n      margin: 40px 0;\n      font-size: 16px;\n      border-left: 4px solid #eeeeee; }\n    .docs-container main img.section-header {\n      width: 100%;\n      margin: 50px 0;\n      max-width: 1037px;\n      display: block; }\n    .docs-container main .beta {\n      background: #4a8bfc;\n      color: white;\n      font-weight: 700;\n      font-size: 10px;\n      padding: 0 2px;\n      border-radius: 3px;\n      position: relative;\n      top: -9px;\n      cursor: pointer; }\n    .docs-container main .beta-notice {\n      font-style: italic;\n      font-size: 13px;\n      position: relative;\n      padding-left: 30px; }\n      .docs-container main .beta-notice::before {\n        position: absolute;\n        left: 0px;\n        top: 0px;\n        font-family: 'Ionicons';\n        content: '\\f276';\n        color: #4a8bfc;\n        font-size: 24px;\n        font-style: normal;\n        margin-right: 3px; }\n    .docs-container main .paid {\n      background: #4a8bfc;\n      color: white;\n      font-weight: 700;\n      font-size: 10px;\n      padding: 0 2px;\n      border-radius: 3px;\n      position: relative;\n      top: -9px;\n      cursor: pointer; }\n    .docs-container main .paid-notice {\n      font-style: italic;\n      font-size: 13px;\n      position: relative;\n      padding-left: 30px; }\n      .docs-container main .paid-notice::before {\n        position: absolute;\n        left: 0px;\n        top: 0px;\n        font-family: 'Ionicons';\n        content: '\\f48d';\n        color: #4a8bfc;\n        font-size: 24px;\n        font-style: normal;\n        margin-right: 3px; }\n    .docs-container main .api-title .beta, .docs-container main .api-title .paid {\n      margin-left: 6px; }\n  .docs-container img {\n    max-width: 100%; }\n\n@media (max-width: 1100px) {\n  .page-components .docs-container h3 {\n    width: calc(100% - 172px);\n    text-overflow: ellipsis;\n    white-space: nowrap;\n    overflow: hidden; } }\n\nbody.docs #snap-bar + #pro-header.navbar {\n  margin-top: 22px; }\n\n#pro-header {\n  background: white; }\n  #pro-header .container {\n    border-bottom: 1px solid #EEF0F3;\n    padding-bottom: 15px;\n    padding-left: 0;\n    padding-right: 0; }\n  #pro-header a {\n    color: #737B88; }\n\n#pro-docs h1, #pro-docs h2, #pro-docs h3, #pro-docs h4, #pro-docs h5 {\n  font-weight: 700; }\n\n#pro-docs td:not(:first-child), #pro-docs th:not(:first-child) {\n  white-space: inherit; }\n\n#pro-docs .responsive-side-nav.affix + main,\n#pro-docs .responsive-side-nav.affix-bottom + main {\n  margin-left: 300px; }\n  @media (max-width: 767px) {\n    #pro-docs .responsive-side-nav.affix + main,\n    #pro-docs .responsive-side-nav.affix-bottom + main {\n      margin-left: 0; } }\n\n#pro-docs .responsive-side-nav {\n  background: transparent; }\n  #pro-docs .responsive-side-nav.side-nav ul ul a, #pro-docs .responsive-side-nav.side-nav ul .capitalize a {\n    height: 28px; }\n  #pro-docs .responsive-side-nav ul a::after {\n    border: none !important; }\n  #pro-docs .responsive-side-nav a {\n    letter-spacing: -0.01em;\n    padding: 0px 0; }\n    #pro-docs .responsive-side-nav a.active {\n      color: #4a8bfc !important;\n      font-weight: 600 !important; }\n    #pro-docs .responsive-side-nav a:hover {\n      color: #3b3f44 !important;\n      font-weight: 600 !important; }\n  #pro-docs .responsive-side-nav > ul.nested-menu > li > ul > li {\n    margin-bottom: 8px; }\n  #pro-docs .responsive-side-nav > ul.nested-menu > li > ul > li > ul {\n    margin-left: 27px; }\n    #pro-docs .responsive-side-nav > ul.nested-menu > li > ul > li > ul > li > a {\n      font-size: 13px;\n      color: #50565e;\n      font-weight: 500; }\n  #pro-docs .responsive-side-nav > ul.nested-menu > li > ul > li > ul > li > ul {\n    margin-left: 15px; }\n  #pro-docs .responsive-side-nav > ul#pro-nav.nested-menu > li > ul > li > a::before {\n    background-image: url(\"/img/pro/sidebar-icon-sprite.png\");\n    background-repeat: no-repeat;\n    background-color: transparent; }\n  #pro-docs .responsive-side-nav > ul.nested-menu > li > ul > li > a {\n    margin-top: 0;\n    text-transform: none;\n    font-size: 14px;\n    font-weight: 600;\n    color: #24282e;\n    letter-spacing: 0px; }\n    #pro-docs .responsive-side-nav > ul.nested-menu > li > ul > li > a::before {\n      width: 16px;\n      height: 16px;\n      background-size: 100%;\n      display: inline-block;\n      vertical-align: middle;\n      margin-right: 10px;\n      margin-top: -2px;\n      content: ''; }\n  @media (max-width: 767px) {\n    #pro-docs .responsive-side-nav {\n      position: static !important;\n      margin-left: 20px; }\n      #pro-docs .responsive-side-nav > ul.nested-menu > li > ul > li > a::before {\n        display: none; } }\n\n#pro-docs .pro-intro-link::before {\n  background-position: 0px 0px; }\n\n#pro-docs .pro-view-link::before {\n  background-position: 0px -48px; }\n\n#pro-docs .pro-deploy-link::before {\n  background-position: 0px -64px; }\n\n#pro-docs .pro-package-link::before {\n  background-position: 0px -80px; }\n\n#pro-docs .pro-monitoring-link::before {\n  background-position: 0px -96px; }\n\n#pro-docs .pro-devapp-link::before {\n  background-position: 0px -128px; }\n\n#pro-docs .pro-advanced-link::before {\n  background-position: 0px -160px; }\n\n#branch-sms-box {\n  padding: 20px;\n  border: 1px solid #eee;\n  border-radius: 3px;\n  margin-bottom: 20px; }\n  #branch-sms-box .btn {\n    font-size: 14px;\n    margin-top: 10px; }\n\n.promo {\n  font-family: \"Eina\", \"Helvetica Neue\", Helvetica, sans-serif;\n  padding-top: 64px;\n  padding-bottom: 64px;\n  background-color: #f3f5f9;\n  position: relative; }\n  .promo .container {\n    display: -ms-flexbox;\n    display: flex;\n    -ms-flex-pack: end;\n        justify-content: flex-end;\n    -ms-flex-align: center;\n        align-items: center; }\n    .promo .container::before, .promo .container::after {\n      display: none; }\n  .promo hgroup {\n    width: 50%;\n    padding-left: 42px; }\n  .promo h2,\n  .promo p {\n    max-width: 460px; }\n  .promo h2 {\n    font-size: 24px;\n    letter-spacing: -0.03em;\n    font-weight: 700;\n    margin-top: 0; }\n  .promo p {\n    font-size: 16px;\n    line-height: 24px;\n    color: #788497;\n    margin-top: 16px;\n    margin-bottom: 20px; }\n  .promo .btn {\n    font-size: 14px;\n    font-weight: 700;\n    background-color: #2d79ff; }\n    .promo .btn:hover {\n      background-color: #4486fb; }\n    .promo .btn.white {\n      background: white; }\n      .promo .btn.white:hover {\n        background: white; }\n  .promo--dark {\n    background-color: #112037; }\n    .promo--dark h2 {\n      color: #fff; }\n    .promo--dark p {\n      color: #a8b0be; }\n  .promo__illustration {\n    width: 459px;\n    position: absolute;\n    bottom: 0;\n    left: 50%;\n    -webkit-transform: translateX(-480px);\n            transform: translateX(-480px);\n    z-index: 3; }\n  .promo.promo-reversed .container {\n    -ms-flex-pack: start;\n        justify-content: flex-start; }\n    .promo.promo-reversed .container hgroup {\n      -ms-flex: 1;\n          flex: 1; }\n  .promo .promo__image {\n    max-width: 100%;\n    margin: 32px 15px; }\n  .promo.promo-btns hgroup, .promo.promo-newsletter hgroup {\n    -ms-flex: 1;\n        flex: 1;\n    padding: 46px 0; }\n  .promo.promo-btns .container, .promo.promo-newsletter .container {\n    padding-top: 37px; }\n  .promo.promo-btns h2,\n  .promo.promo-btns p, .promo.promo-newsletter h2,\n  .promo.promo-newsletter p {\n    max-width: 100%; }\n  .promo.promo-btns h2, .promo.promo-newsletter h2 {\n    font-size: 28px;\n    font-weight: 600;\n    margin-bottom: 8px; }\n  .promo.promo-btns p, .promo.promo-newsletter p {\n    margin-top: 8px;\n    font-size: 20px;\n    letter-spacing: -.031em; }\n    .promo.promo-btns p:last-child, .promo.promo-newsletter p:last-child {\n      margin-bottom: 0; }\n  .promo.promo-btns h1,\n  .promo.promo-btns h2,\n  .promo.promo-btns h3, .promo.promo-newsletter h1,\n  .promo.promo-newsletter h2,\n  .promo.promo-newsletter h3 {\n    color: #4a8bfc; }\n  .promo.promo-btns .btns, .promo.promo-newsletter .btns {\n    margin-left: 24px; }\n  @media (max-width: 767px) {\n    .promo.promo-btns, .promo.promo-newsletter {\n      padding-bottom: 64px; }\n      .promo.promo-btns .btns, .promo.promo-newsletter .btns {\n        text-align: center; }\n      .promo.promo-btns .btn, .promo.promo-newsletter .btn {\n        margin-bottom: 12px; } }\n  .promo.promo-newsletter {\n    background: white; }\n    .promo.promo-newsletter .container {\n      padding-top: 6px; }\n    .promo.promo-newsletter strong {\n      font-weight: 600; }\n    .promo.promo-newsletter .btns {\n      -ms-flex: 0 1 476px;\n          flex: 0 1 476px; }\n      @media (max-width: 991px) {\n        .promo.promo-newsletter .btns {\n          -ms-flex: 0;\n              flex: 0; } }\n      @media (max-width: 767px) {\n        .promo.promo-newsletter .btns {\n          width: 100%;\n          max-width: 476px;\n          margin-left: 0; } }\n  @media (max-width: 991px) {\n    .promo__illustration {\n      -webkit-transform: translateX(-400px);\n              transform: translateX(-400px); } }\n  @media (max-width: 767px) {\n    .promo {\n      padding-bottom: 272px; }\n      .promo.promo-inline {\n        padding-bottom: 64px; }\n      .promo .container {\n        -ms-flex-pack: center;\n            justify-content: center;\n        -ms-flex-direction: column;\n            flex-direction: column; }\n      .promo hgroup {\n        width: 100%;\n        padding: 0;\n        text-align: center; }\n      .promo h2,\n      .promo p {\n        margin-left: auto;\n        margin-right: auto; }\n      .promo__illustration {\n        width: 380px;\n        -webkit-transform: translateX(-190px);\n                transform: translateX(-190px); } }\n  .promo--tri-cta {\n    background: #F6F8FB; }\n    .promo--tri-cta ul {\n      list-style: none;\n      letter-spacing: -.01em; }\n    .promo--tri-cta li {\n      margin: 24px 48px;\n      position: relative;\n      width: calc(33.3% - 64px); }\n      .promo--tri-cta li::after {\n        content: '';\n        position: absolute;\n        right: 0;\n        right: -48px;\n        top: calc(50% - 48px);\n        height: 96px;\n        border-left: 1px solid #DEE3EA; }\n      .promo--tri-cta li:first-child {\n        margin-left: 0; }\n      .promo--tri-cta li:last-child {\n        margin-right: 0; }\n        .promo--tri-cta li:last-child::after {\n          display: none; }\n    .promo--tri-cta h4 {\n      font-size: 20px;\n      color: black;\n      font-weight: 600; }\n    .promo--tri-cta p {\n      font-family: \"Inter\", \"Inter UI\", Helvetica, Arial, sans-serif;\n      line-height: 29px;\n      font-size: 16px;\n      color: #73849A; }\n    @media (max-width: 991px) {\n      .promo--tri-cta {\n        padding-bottom: 64px; }\n        .promo--tri-cta li {\n          width: 100%;\n          margin: 0;\n          padding: 48px 16px;\n          text-align: center; }\n          .promo--tri-cta li::after {\n            display: none; }\n          .promo--tri-cta li p {\n            margin: 0 0 1em;\n            display: inline-block; }\n          .promo--tri-cta li .btn {\n            display: block; } }\n\n.mobile-nav {\n  font-family: \"Eina\", \"Helvetica Neue\", Helvetica, sans-serif;\n  transition: opacity 0.4s;\n  position: fixed;\n  z-index: 99999;\n  top: 0;\n  right: 0;\n  left: 0;\n  bottom: 0;\n  background: #fff;\n  display: none;\n  overflow: touch; }\n  .mobile-nav.open {\n    -webkit-animation-name: revealIn;\n            animation-name: revealIn;\n    -webkit-animation-duration: 0.2s;\n            animation-duration: 0.2s;\n    -webkit-animation-fill-mode: forwards;\n            animation-fill-mode: forwards;\n    -webkit-animation-timing-function: cubic-bezier(0.19, 1, 0.22, 1);\n            animation-timing-function: cubic-bezier(0.19, 1, 0.22, 1); }\n  .mobile-nav.closed {\n    -webkit-animation-name: revealOut;\n            animation-name: revealOut;\n    -webkit-animation-duration: 0.2s;\n            animation-duration: 0.2s;\n    -webkit-animation-fill-mode: forwards;\n            animation-fill-mode: forwards; }\n\n@-webkit-keyframes revealIn {\n  from {\n    opacity: 0; }\n  to {\n    opacity: 1; } }\n\n@keyframes revealIn {\n  from {\n    opacity: 0; }\n  to {\n    opacity: 1; } }\n\n@-webkit-keyframes revealOut {\n  from {\n    opacity: 1; }\n  to {\n    opacity: 0; } }\n\n@keyframes revealOut {\n  from {\n    opacity: 1; }\n  to {\n    opacity: 0; } }\n\n.mobile-nav__wrapper {\n  position: relative;\n  width: 100%;\n  height: 100vh;\n  overflow: auto;\n  -webkit-overflow-scrolling: touch; }\n\n.mobile-nav__menu {\n  margin: 0;\n  padding: 0;\n  list-style: none;\n  list-style-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mNkYAAAAAYAAjCB0C8AAAAASUVORK5CYII=);\n  list-style-type: none;\n  max-width: 270px;\n  margin-left: auto;\n  margin-right: auto;\n  padding-top: 80px;\n  padding-bottom: 160px; }\n  .mobile-nav__menu h6 {\n    font-size: 11px;\n    font-weight: 700;\n    text-transform: uppercase;\n    letter-spacing: 0.05em;\n    color: #b0bccf; }\n  .open .mobile-nav__menu {\n    -webkit-animation-name: navMenuIn;\n            animation-name: navMenuIn;\n    -webkit-animation-duration: 0.2s;\n            animation-duration: 0.2s;\n    -webkit-animation-fill-mode: forwards;\n            animation-fill-mode: forwards;\n    -webkit-animation-delay: 0.1s;\n            animation-delay: 0.1s;\n    opacity: 0; }\n  .closed .mobile-nav__menu {\n    -webkit-animation-name: navMenuOut;\n            animation-name: navMenuOut;\n    -webkit-animation-duration: 0.2s;\n            animation-duration: 0.2s;\n    -webkit-animation-fill-mode: forwards;\n            animation-fill-mode: forwards; }\n\n@-webkit-keyframes navMenuIn {\n  from {\n    -webkit-transform: translateY(-6px);\n            transform: translateY(-6px);\n    opacity: 0; }\n  to {\n    -webkit-transform: translateY(0);\n            transform: translateY(0);\n    opacity: 1; } }\n\n@keyframes navMenuIn {\n  from {\n    -webkit-transform: translateY(-6px);\n            transform: translateY(-6px);\n    opacity: 0; }\n  to {\n    -webkit-transform: translateY(0);\n            transform: translateY(0);\n    opacity: 1; } }\n\n@-webkit-keyframes navMenuOut {\n  from {\n    -webkit-transform: translateY(0);\n            transform: translateY(0);\n    opacity: 1; }\n  to {\n    -webkit-transform: translateY(-6px);\n            transform: translateY(-6px);\n    opacity: 0; } }\n\n@keyframes navMenuOut {\n  from {\n    -webkit-transform: translateY(0);\n            transform: translateY(0);\n    opacity: 1; }\n  to {\n    -webkit-transform: translateY(-6px);\n            transform: translateY(-6px);\n    opacity: 0; } }\n\n.mobile-nav--enterprise .mobile-nav__menu {\n  height: 100%;\n  -ms-flex-direction: column;\n      flex-direction: column;\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-align: center;\n      align-items: center;\n  -ms-flex-pack: center;\n      justify-content: center;\n  padding-top: 0;\n  padding-bottom: 0; }\n\n.mobile-nav__menuitem {\n  position: relative;\n  font-size: 24px;\n  letter-spacing: -0.02em;\n  line-height: 1;\n  font-weight: 600;\n  margin-top: 28px; }\n  .mobile-nav__menuitem + h6 {\n    margin-top: 46px; }\n  .mobile-nav__menuitem a {\n    width: 100%;\n    color: #131924;\n    display: inline-block; }\n  .mobile-nav__menuitem.pro a::before {\n    background-position: 0 0; }\n  .mobile-nav__menuitem.pro a::after {\n    background-position: 0 -24px; }\n  .mobile-nav__menuitem.enterprise a::before {\n    background-position: 0 -336px; }\n  .mobile-nav__menuitem.enterprise a::after {\n    background-position: 0 -360px; }\n  .mobile-nav__menuitem.framework a::before {\n    background-position: 0 -528px; }\n  .mobile-nav__menuitem.framework a::after {\n    background-position: 0 -552px; }\n  .mobile-nav__menuitem.stencil a::before {\n    background-position: 0 -1056px; }\n  .mobile-nav__menuitem.stencil a::after {\n    background-position: 0 -1080px; }\n  .mobile-nav__menuitem.capacitor a::before {\n    background-position: 0 -1104px; }\n  .mobile-nav__menuitem.capacitor a::after {\n    background-position: 0 -1128px; }\n  .mobile-nav__menuitem.ionicon a::before {\n    background-position: 0 -1152px; }\n  .mobile-nav__menuitem.ionicon a::after {\n    background-position: 0 -1176px; }\n  .mobile-nav__menuitem.framework-docs a::before {\n    background-position: 0 -1440px; }\n  .mobile-nav__menuitem.framework-docs a::after {\n    background-position: 0 -1464px; }\n  .mobile-nav__menuitem.pro-docs a::before {\n    background-position: 0 -48px; }\n  .mobile-nav__menuitem.pro-docs a::after {\n    background-position: 0 -72px; }\n\n.mobile-nav--enterprise .mobile-nav__menuitem {\n  text-align: center;\n  font-size: 28px;\n  margin-top: 0; }\n  .mobile-nav--enterprise .mobile-nav__menuitem + .mobile-nav__menuitem {\n    margin-top: 32px; }\n\n.mobile-nav--enterprise .mobile-nav__menuitem--cta a {\n  color: #3880FF; }\n\n.mobile-nav__menuitem--small {\n  font-size: 18px;\n  line-height: 1;\n  font-weight: 600;\n  margin-top: 26px; }\n  .mobile-nav__menuitem + .mobile-nav__menuitem--small {\n    margin-top: 56px; }\n  .mobile-nav__menuitem--small a {\n    width: 100%;\n    display: inline-block;\n    color: #5977a8; }\n\n.mobile-nav__logo {\n  position: absolute;\n  top: 9px;\n  left: 13px;\n  fill: #3880FF;\n  z-index: 2;\n  width: 32px;\n  height: 32px;\n  margin: 0; }\n\n.mobile-nav--enterprise .mobile-nav__logo {\n  fill: #000; }\n\n.mobile-nav__close {\n  cursor: pointer;\n  position: fixed;\n  top: 15px;\n  right: 15px;\n  opacity: 0.4;\n  transition: opacity 0.3s;\n  z-index: 2; }\n  .mobile-nav__close:hover {\n    opacity: 1; }\n  .mobile-nav__close svg {\n    width: 14px;\n    height: 14px;\n    fill: #5977a8;\n    margin: 0; }\n\n.mobile-nav__footer {\n  background-color: #f6f8fe;\n  position: fixed;\n  left: 0;\n  bottom: 0;\n  right: 0;\n  padding: 14px;\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-pack: end;\n      justify-content: flex-end; }\n  .mobile-nav__footer a {\n    font-weight: 700; }\n  .mobile-nav__footer a + .btn {\n    margin-left: 12px; }\n  .mobile-nav__footer .btn {\n    font-size: 15px;\n    font-weight: 700;\n    padding: 12px 14px 10px;\n    vertical-align: middle;\n    border-radius: 4px;\n    margin-right: 0; }\n  .open .mobile-nav__footer {\n    -webkit-animation-name: navFooterIn;\n            animation-name: navFooterIn;\n    -webkit-animation-duration: 0.6s;\n            animation-duration: 0.6s;\n    -webkit-animation-fill-mode: forwards;\n            animation-fill-mode: forwards;\n    -webkit-animation-delay: 0.1s;\n            animation-delay: 0.1s;\n    -webkit-animation-timing-function: cubic-bezier(0.19, 1, 0.22, 1);\n            animation-timing-function: cubic-bezier(0.19, 1, 0.22, 1);\n    -webkit-transform: translateY(100%);\n            transform: translateY(100%);\n    opacity: 0; }\n  .closed .mobile-nav__footer {\n    -webkit-animation-name: navFooterOut;\n            animation-name: navFooterOut;\n    -webkit-animation-duration: 0.2s;\n            animation-duration: 0.2s;\n    -webkit-animation-fill-mode: forwards;\n            animation-fill-mode: forwards; }\n\n@-webkit-keyframes navFooterIn {\n  from {\n    -webkit-transform: translateY(100%);\n            transform: translateY(100%);\n    opacity: 0; }\n  to {\n    -webkit-transform: translateY(0);\n            transform: translateY(0);\n    opacity: 1; } }\n\n@keyframes navFooterIn {\n  from {\n    -webkit-transform: translateY(100%);\n            transform: translateY(100%);\n    opacity: 0; }\n  to {\n    -webkit-transform: translateY(0);\n            transform: translateY(0);\n    opacity: 1; } }\n\n@-webkit-keyframes navFooterOut {\n  from {\n    -webkit-transform: translateY(0);\n            transform: translateY(0);\n    opacity: 1; }\n  to {\n    -webkit-transform: translateY(6px);\n            transform: translateY(6px);\n    opacity: 0; } }\n\n@keyframes navFooterOut {\n  from {\n    -webkit-transform: translateY(0);\n            transform: translateY(0);\n    opacity: 1; }\n  to {\n    -webkit-transform: translateY(6px);\n            transform: translateY(6px);\n    opacity: 0; } }\n\n.mobile-nav--enterprise .mobile-nav__footer {\n  background: #F9F9F9;\n  -ms-flex-pack: center;\n      justify-content: center; }\n  .mobile-nav--enterprise .mobile-nav__footer a {\n    line-height: normal;\n    font-weight: 600;\n    font-size: 11px;\n    letter-spacing: 0.05em;\n    color: #3880FF;\n    text-transform: uppercase; }\n  .mobile-nav--enterprise .mobile-nav__footer ion-icon {\n    color: rgba(56, 128, 255, 0.7);\n    font-size: 12px;\n    height: 12px;\n    width: 12px;\n    display: inline-block;\n    vertical-align: -2px;\n    opacity: 0;\n    transition: .2s transform ease, .2s opacity;\n    margin-right: 4px; }\n    .mobile-nav--enterprise .mobile-nav__footer ion-icon.hydrated {\n      opacity: 1; }\n\n.responsive-docs-container.docs-container {\n  padding-top: 50px; }\n  .responsive-docs-container.docs-container .responsive-side-nav {\n    width: 300px;\n    position: static;\n    overflow-y: auto; }\n    .responsive-docs-container.docs-container .responsive-side-nav.affix-top {\n      position: static;\n      top: 182px; }\n    .responsive-docs-container.docs-container .responsive-side-nav.affix {\n      position: fixed;\n      top: 15px; }\n    .responsive-docs-container.docs-container .responsive-side-nav.affix-bottom {\n      position: fixed;\n      top: 15px !important; }\n    .responsive-docs-container.docs-container .responsive-side-nav .nested-menu {\n      padding-top: 0;\n      padding-left: 0; }\n  .responsive-docs-container.docs-container main {\n    margin-left: 0;\n    padding-top: 0;\n    color: #353940;\n    font-weight: 400;\n    font-size: 15px;\n    line-height: 26px; }\n    .responsive-docs-container.docs-container main p {\n      color: #353940;\n      margin: 1.2em 0 1.6em;\n      font-weight: 400;\n      font-size: 15px;\n      line-height: 26px; }\n    .responsive-docs-container.docs-container main h1 {\n      color: #24282e;\n      line-height: 1.4em;\n      margin: 2em 0 1em;\n      font-size: 26px;\n      font-weight: 700;\n      letter-spacing: -0.02em; }\n      .responsive-docs-container.docs-container main h1:first-child {\n        margin-top: 0; }\n    .responsive-docs-container.docs-container main h2 {\n      padding-top: 0em; }\n\n.resource-card-list {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-wrap: wrap;\n      flex-wrap: wrap;\n  margin-left: -16px;\n  margin-right: -16px; }\n\n.resource-card {\n  padding: 16px;\n  font-family: \"Eina\", \"Helvetica Neue\", Helvetica, sans-serif; }\n\n.resource-card-list--third .resource-card {\n  width: 33.33%; }\n\n.resource-card-list--quarter .resource-card {\n  width: 25%; }\n\n@media (max-width: 992px) {\n  .resource-card-list {\n    margin-left: -12px;\n    margin-right: -12px; }\n  .resource-card {\n    padding: 12px; }\n  .resource-card-list--third .resource-card {\n    width: 100%; }\n  .resource-card-list--quarter .resource-card {\n    width: 50%; } }\n\n@media (max-width: 768px) {\n  .resource-card-list {\n    margin-left: -8px;\n    margin-right: -8px; }\n  .resource-card {\n    padding: 8px; } }\n\n@media (max-width: 500px) {\n  .resource-card-list--quarter .resource-card {\n    width: 100%; } }\n\n.resource-card__inner {\n  position: relative;\n  height: 100%; }\n\n.resource-card {\n  position: relative;\n  transition: -webkit-transform 0.3s;\n  transition: transform 0.3s;\n  transition: transform 0.3s, -webkit-transform 0.3s;\n  height: 272px; }\n  .resource-card a {\n    transition: box-shadow 0.4s;\n    display: block;\n    width: 100%;\n    height: 100%;\n    position: absolute;\n    top: 0;\n    left: 0;\n    padding: 18px 22px;\n    border-radius: 16px;\n    background-color: #24282e;\n    box-shadow: 0px 8px 16px 0px rgba(0, 0, 0, 0.1), 0px 2px 4px 0px rgba(0, 0, 0, 0.08);\n    display: -ms-flexbox;\n    display: flex;\n    -ms-flex-direction: column;\n        flex-direction: column;\n    -ms-flex-pack: justify;\n        justify-content: space-between;\n    text-decoration: none;\n    background-repeat: no-repeat;\n    background-size: auto 100%;\n    background-position: bottom right; }\n    .resource-card a .title {\n      color: #fff;\n      font-weight: 700;\n      font-size: 20px;\n      line-height: 1.4em;\n      margin-top: 0;\n      max-width: 350px; }\n    .resource-card a .eyebrow {\n      font-size: 10px;\n      text-transform: uppercase;\n      letter-spacing: 0.1em;\n      color: rgba(255, 255, 255, 0.5);\n      font-weight: 700;\n      margin-bottom: 6px;\n      display: inline-block; }\n    .resource-card a .action {\n      text-transform: uppercase;\n      font-size: 14px;\n      font-weight: bold;\n      letter-spacing: 0.08em;\n      color: #fff; }\n  .resource-card:hover {\n    -webkit-transform: translateY(-1px);\n            transform: translateY(-1px); }\n  .resource-card:hover a {\n    box-shadow: 0px 12px 24px 0px rgba(0, 0, 0, 0.1); }\n\n.resource-card--light a {\n  background-color: #fff; }\n  .resource-card--light a .title {\n    color: #24282e; }\n  .resource-card--light a .eyebrow {\n    color: rgba(0, 0, 0, 0.5); }\n  .resource-card--light a .action {\n    color: #4a8bfc; }\n\n.resource-card-large a .title {\n  font-size: 24px;\n  line-height: 32px; }\n\n.resource-card-large a .eyebrow {\n  margin-bottom: 16px; }\n\n.resource-card-large a .action::after {\n  transition: -webkit-transform 0.3s;\n  transition: transform 0.3s;\n  transition: transform 0.3s, -webkit-transform 0.3s;\n  font-family: 'Ionicons';\n  content: '\\f287';\n  font-size: 16px;\n  margin-left: 6px;\n  display: inline-block; }\n\n.resource-card-large a:hover .action::after {\n  -webkit-transform: translate3d(3px, 0, 0);\n          transform: translate3d(3px, 0, 0); }\n\n.modal .control-label {\n  font-weight: 600; }\n\n.modal .form-control {\n  font-weight: 500; }\n\n.modal .close,\n.modal .go-back {\n  position: absolute;\n  top: -10px;\n  right: -10px;\n  background: white;\n  border: 0;\n  border-radius: 50%;\n  height: 30px;\n  width: 30px;\n  box-shadow: 1px 1px 5px rgba(0, 0, 0, 0.5);\n  outline: none; }\n  .modal .close::before,\n  .modal .go-back::before {\n    font-family: 'Ionicons';\n    content: '\\f2c0';\n    display: block;\n    color: #576070;\n    font-size: 20px; }\n  .modal .close span,\n  .modal .go-back span {\n    display: none; }\n\n.modal .go-back {\n  right: auto;\n  left: -10px; }\n  .modal .go-back::before {\n    content: '\\f27d'; }\n\n.modal.fullscreen .container {\n  position: relative; }\n\n.modal.fullscreen .close {\n  right: 36px;\n  top: 27px;\n  box-shadow: none;\n  background: #ebeff5; }\n  .modal.fullscreen .close::before {\n    color: #838fa5; }\n\n.modal.fullscreen .modal-dialog {\n  width: 651px;\n  -webkit-transform: translate(0, -10%);\n          transform: translate(0, -10%);\n  transition: -webkit-transform 0.5s cubic-bezier(0, 0, 0, 1);\n  transition: transform 0.5s cubic-bezier(0, 0, 0, 1);\n  transition: transform 0.5s cubic-bezier(0, 0, 0, 1), -webkit-transform 0.5s cubic-bezier(0, 0, 0, 1); }\n\n.modal.fullscreen.in .modal-dialog {\n  -webkit-transform: translate(0, 0);\n          transform: translate(0, 0); }\n\n.modal.fullscreen .modal-content {\n  box-shadow: none;\n  border: 0;\n  background: transparent; }\n\n.site-search {\n  font-family: \"Eina\", \"Helvetica Neue\", Helvetica, sans-serif;\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-align: center;\n      align-items: center;\n  margin-right: 16px; }\n\n.site-search__trigger {\n  cursor: pointer; }\n  .site-search__trigger svg {\n    transition: fill 0.2s;\n    margin: 0;\n    fill: #a8b0be;\n    width: 16px;\n    height: 16px; }\n  .site-search__trigger:hover svg {\n    fill: #606c82; }\n\n.site-search__input {\n  display: none; }\n\n#snap-bar {\n  background: linear-gradient(to right, #07090e, #2f4562);\n  color: rgba(255, 255, 255, 0.5);\n  padding: 13px 10px 9px;\n  font-weight: 500;\n  font-size: 13px;\n  position: relative;\n  z-index: 10;\n  text-align: center;\n  letter-spacing: .004em; }\n  #snap-bar strong {\n    margin-right: 3px;\n    font-size: 13px;\n    letter-spacing: .004em;\n    font-weight: 600;\n    color: white; }\n  #snap-bar .loading {\n    width: 16px;\n    margin-right: 5px;\n    vertical-align: text-bottom; }\n  #snap-bar a {\n    margin-left: 15px;\n    background: #0a0f16;\n    color: #6ab0ff;\n    font-weight: 600;\n    padding: 6px 7px 5px 12px;\n    font-size: 10px;\n    letter-spacing: .09em;\n    text-transform: uppercase;\n    border-radius: 10px;\n    text-decoration: none;\n    transition: .2s color; }\n    #snap-bar a:hover {\n      color: white;\n      text-decoration: none; }\n  #snap-bar i {\n    font-size: 13px;\n    vertical-align: -1px; }\n  #snap-bar + .navbar {\n    margin-top: 6px; }\n    @media (max-width: 767px) {\n      #snap-bar + .navbar {\n        margin-top: 0;\n        position: relative;\n        min-height: 48px; } }\n\nbody.docs #snap-bar + .navbar {\n  margin-top: 0; }\n  @media (max-width: 767px) {\n    body.docs #snap-bar + .navbar {\n      padding-top: 0; } }\n\nbody.has-snap {\n  margin-top: 0; }\n  body.has-snap .side-nav.affix-top {\n    position: absolute;\n    top: 38px; }\n  @media (max-width: 767px) {\n    body.has-snap {\n      margin-top: 0; } }\n\nbody.docs #snap-bar ~ .docs-container .side-nav {\n  padding-top: 36px; }\n\nionic-snap-bar:not(.hydrated) {\n  display: none; }\n\n@media (max-width: 767px) {\n  ionic-snap-bar {\n    display: none; } }\n\n#social-share-sidebar {\n  right: auto;\n  left: 50px;\n  color: #bac2cf;\n  width: 200px;\n  position: fixed;\n  top: 200px;\n  opacity: 0;\n  pointer-events: none;\n  transition: .5s opacity; }\n  @media (max-width: 1120px) {\n    #social-share-sidebar {\n      display: none; } }\n  #social-share-sidebar.affix {\n    position: fixed;\n    top: 200px;\n    opacity: 1;\n    pointer-events: all; }\n  #social-share-sidebar h4 {\n    text-transform: uppercase;\n    letter-spacing: 0.1em;\n    font-size: 10px;\n    font-weight: 700;\n    color: #bac2cf;\n    margin-bottom: 15px;\n    opacity: 0;\n    -webkit-animation: .5s fadeIn linear 3s;\n            animation: .5s fadeIn linear 3s;\n    -webkit-animation-fill-mode: forwards;\n            animation-fill-mode: forwards; }\n  #social-share-sidebar ul {\n    list-style: none;\n    padding-left: 0; }\n  #social-share-sidebar li {\n    opacity: 0;\n    -webkit-transform: translateY(20px);\n            transform: translateY(20px);\n    -webkit-animation: .5s fadeInUp linear 3.5s;\n            animation: .5s fadeInUp linear 3.5s;\n    -webkit-animation-fill-mode: forwards;\n            animation-fill-mode: forwards; }\n    #social-share-sidebar li:nth-child(2) {\n      -webkit-animation-delay: 3.8s;\n              animation-delay: 3.8s; }\n    #social-share-sidebar li:nth-child(3) {\n      -webkit-animation-delay: 4.1s;\n              animation-delay: 4.1s; }\n    #social-share-sidebar li:nth-child(4) {\n      -webkit-animation-delay: 4.3s;\n              animation-delay: 4.3s; }\n  #social-share-sidebar a {\n    position: relative;\n    width: 20px;\n    height: 20px;\n    display: block;\n    cursor: pointer;\n    margin-bottom: 18px;\n    margin-left: 8px; }\n    #social-share-sidebar a::before, #social-share-sidebar a::after {\n      background: url(\"/img/survey/blog-share-icons.png\") no-repeat 0 0;\n      background-size: 20px;\n      width: 20px;\n      height: 20px;\n      display: block;\n      content: '';\n      transition: 0.2s opacity; }\n    #social-share-sidebar a::after {\n      opacity: 0;\n      position: absolute;\n      top: 0;\n      right: 0;\n      bottom: 0;\n      left: 0; }\n    #social-share-sidebar a:hover::after {\n      opacity: 1; }\n    #social-share-sidebar a.twitter::after {\n      background-position: 0 -20px; }\n    #social-share-sidebar a.facebook::before {\n      background-position: 0 -40px; }\n    #social-share-sidebar a.facebook::after {\n      background-position: 0 -60px; }\n    #social-share-sidebar a.google-plus::before {\n      background-position: 0 -80px; }\n    #social-share-sidebar a.google-plus::after {\n      background-position: 0 -100px; }\n    #social-share-sidebar a.buffer::before {\n      background-position: 0 -120px; }\n    #social-share-sidebar a.buffer::after {\n      background-position: 0 -140px; }\n\n.rounded-tabs {\n  background: none;\n  margin: 0 0 0 -20px;\n  padding: 0;\n  display: -ms-flexbox;\n  display: flex; }\n  @media (max-width: 767px) {\n    .rounded-tabs {\n      margin: 0;\n      -ms-flex-pack: justify;\n          justify-content: space-between;\n      max-width: 460px;\n      margin-left: auto;\n      margin-right: auto; } }\n\n.rounded-tabs__tab {\n  padding: 0;\n  display: -ms-flexbox;\n  display: flex;\n  position: relative;\n  max-width: 100%;\n  margin: 0; }\n  .rounded-tabs__tab::before, .rounded-tabs__tab::after {\n    content: '';\n    display: block;\n    opacity: 0;\n    width: 56px;\n    height: 64px;\n    -ms-flex: 0 0 56px;\n        flex: 0 0 56px;\n    background-size: 56px 64px;\n    background-repeat: no-repeat; }\n  .rounded-tabs__tab::before {\n    background-image: url(\"/img/getting-started/tab-border-left.png\"); }\n  .rounded-tabs__tab::after {\n    background-image: url(\"/img/getting-started/tab-border-right.png\"); }\n  .rounded-tabs__tab + .rounded-tabs__tab {\n    margin-left: -54px; }\n  @media (max-width: 767px) {\n    .rounded-tabs__tab {\n      transition: border 0.3s;\n      border-bottom: 4px solid transparent; }\n      .rounded-tabs__tab::before, .rounded-tabs__tab::after {\n        display: none; }\n      .rounded-tabs__tab + .rounded-tabs__tab {\n        margin-left: 28px; } }\n\n.rounded-tabs__tab-inner {\n  font-size: 16px;\n  font-weight: 600;\n  letter-spacing: -0.02em;\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-align: center;\n      align-items: center;\n  height: 64px;\n  margin-left: -1px;\n  margin-right: -1px;\n  padding: 0 2px;\n  -ms-flex: 0 0 auto;\n      flex: 0 0 auto;\n  cursor: pointer;\n  background: transparent;\n  color: #D5EAFF; }\n  .rounded-tabs__tab-inner svg {\n    margin-right: 8px;\n    -ms-flex: 0 0 20px;\n        flex: 0 0 20px; }\n  .rounded-tabs__tab-inner span {\n    -ms-flex: 0 0 auto;\n        flex: 0 0 auto; }\n  .rounded-tabs__tab-inner .front {\n    fill: #E1F0FF; }\n  .rounded-tabs__tab-inner .middle {\n    fill: #8DC0FF; }\n  .rounded-tabs__tab-inner .back {\n    fill: #6FADFF; }\n  .rounded-tabs__tab-inner .front--border {\n    stroke: #4D92FF; }\n  .rounded-tabs__tab-inner .middle--border {\n    stroke: #4D93FF; }\n  .rounded-tabs__tab-inner:hover {\n    transition: color 0.2s;\n    color: #fff; }\n    .rounded-tabs__tab-inner:hover .front {\n      fill: #fff; }\n  @media (max-width: 767px) {\n    .rounded-tabs__tab-inner {\n      -ms-flex-direction: column;\n          flex-direction: column;\n      font-size: 14px;\n      height: auto;\n      padding-bottom: 14px;\n      -ms-flex: 1;\n          flex: 1;\n      text-align: center;\n      line-height: 16px; }\n      .rounded-tabs__tab-inner svg {\n        margin: 8px 0 10px; } }\n\n.rounded-tabs__tab--active {\n  pointer-events: none; }\n  @media (min-width: 768px) {\n    .rounded-tabs__tab--active::before, .rounded-tabs__tab--active::after {\n      opacity: 1; }\n    .rounded-tabs__tab--active .rounded-tabs__tab-inner,\n    .rounded-tabs__tab--active .rounded-tabs__tab-inner:hover {\n      background: #fff;\n      color: #161A1F; }\n      .rounded-tabs__tab--active .rounded-tabs__tab-inner .front,\n      .rounded-tabs__tab--active .rounded-tabs__tab-inner:hover .front {\n        fill: #3880FF; }\n    .rounded-tabs__tab--active .front {\n      fill: #3880FF; }\n    .rounded-tabs__tab--active .middle {\n      fill: #B1D9FF; }\n    .rounded-tabs__tab--active .back {\n      fill: #CFE7FF; }\n    .rounded-tabs__tab--active .front--border,\n    .rounded-tabs__tab--active .middle--border {\n      stroke: #fff; } }\n  @media (max-width: 767px) {\n    .rounded-tabs__tab--active {\n      border-bottom: 4px solid rgba(255, 255, 255, 0.8); }\n      .rounded-tabs__tab--active .rounded-tabs__tab-inner {\n        color: #fff; }\n        .rounded-tabs__tab--active .rounded-tabs__tab-inner .front {\n          fill: #fff; } }\n\n#page-pricing .tab-content,\n#page-getting-started .tab-content {\n  display: none; }\n  #page-pricing .tab-content--active,\n  #page-getting-started .tab-content--active {\n    display: block; }\n\n.tag,\n.docs-container main .tag {\n  background: #4a8bfc;\n  margin-left: 10px;\n  padding: 5px 7px 4px;\n  border-radius: 4px;\n  color: white;\n  font-weight: 700;\n  font-size: 10px;\n  text-transform: uppercase;\n  letter-spacing: .5px; }\n  .tag.grey,\n  .docs-container main .tag.grey {\n    background: #898989; }\n\n.testimonial-slides {\n  position: relative;\n  transition: height 0.4s; }\n  @media (max-width: 991px) {\n    .testimonial-slides {\n      min-height: 360px; } }\n  @media (max-width: 560px) {\n    .testimonial-slides {\n      min-height: 400px; } }\n  .testimonial-slides .slide {\n    padding: 90px 0 146px;\n    top: 0;\n    left: 0;\n    width: 100%;\n    height: 100%; }\n    .testimonial-slides .slide h5 {\n      color: #fff;\n      font-size: 20px;\n      line-height: 32px;\n      letter-spacing: -0.02em;\n      font-weight: 600;\n      margin: 40px 0; }\n    .testimonial-slides .slide .attribution {\n      font-size: 14px;\n      font-weight: 600;\n      letter-spacing: -0.02em; }\n      .testimonial-slides .slide .attribution b {\n        font-weight: 600;\n        color: #fff;\n        margin-right: 8px; }\n    .testimonial-slides .slide hgroup {\n      width: 50%;\n      padding-right: 74px; }\n    .testimonial-slides .slide .slide__topbar {\n      display: -ms-flexbox;\n      display: flex;\n      -ms-flex-pack: justify;\n          justify-content: space-between;\n      -ms-flex-align: center;\n          align-items: center; }\n    .testimonial-slides .slide .slide__cta {\n      transition: background 0.3s;\n      padding: 4px 8px 3px;\n      border-radius: 100px;\n      display: -ms-inline-flexbox;\n      display: inline-flex;\n      -ms-flex-align: center;\n          align-items: center;\n      font-weight: 600;\n      font-size: 12px;\n      line-height: 12px;\n      letter-spacing: -0.02em;\n      cursor: pointer; }\n      .testimonial-slides .slide .slide__cta b {\n        font-weight: 600;\n        color: #fff;\n        margin-left: 4px; }\n      .testimonial-slides .slide .slide__cta svg {\n        transition: fill 0.2s;\n        display: inline;\n        width: 12px;\n        height: 12px;\n        margin: 0;\n        fill: #fff; }\n      .testimonial-slides .slide .slide__cta svg:first-child {\n        width: 18px;\n        height: 18px;\n        margin-right: 6px; }\n      .testimonial-slides .slide .slide__cta:hover svg:last-child {\n        -webkit-transform: translateX(1px);\n                transform: translateX(1px); }\n    @media (max-width: 991px) {\n      .testimonial-slides .slide {\n        padding: 32px 0 106px; }\n        .testimonial-slides .slide .slide__topbar {\n          -ms-flex-direction: column-reverse;\n              flex-direction: column-reverse;\n          -ms-flex-align: start;\n              align-items: flex-start; }\n        .testimonial-slides .slide .slide__cta {\n          margin-bottom: 30px; }\n        .testimonial-slides .slide h5 {\n          margin: 20px 0; }\n        .testimonial-slides .slide hgroup {\n          padding-right: 24px; } }\n    @media (max-width: 991px) {\n      .testimonial-slides .slide hgroup {\n        width: 100%; }\n      .testimonial-slides .slide .slide__topbar {\n        -ms-flex-direction: row;\n            flex-direction: row; }\n      .testimonial-slides .slide h5 {\n        margin: 30px 0; } }\n    @media (max-width: 560px) {\n      .testimonial-slides .slide .slide__topbar {\n        -ms-flex-direction: column-reverse;\n            flex-direction: column-reverse; } }\n  .testimonial-slides .slide--airbus .logo {\n    background: url(\"/img/testimonials/logo-sprite.png\") no-repeat 0 -38px;\n    background-size: 198px 69px;\n    width: 131px;\n    height: 31px; }\n  .testimonial-slides .slide--airbus .attribution {\n    color: #939cd5; }\n  .testimonial-slides .slide--airbus .slide__cta {\n    background-color: #253699;\n    color: #b5bbe2; }\n    .testimonial-slides .slide--airbus .slide__cta svg:first-child {\n      fill: #a8aed6; }\n    .testimonial-slides .slide--airbus .slide__cta:hover {\n      background-color: #283aa5; }\n  .testimonial-slides .slide--marketwatch .logo {\n    background: url(\"/img/testimonials/logo-sprite.png\") no-repeat 0 0;\n    background-size: 198px 69px;\n    width: 198px;\n    height: 31px; }\n  .testimonial-slides .slide--marketwatch .attribution {\n    color: #868893; }\n  .testimonial-slides .slide--marketwatch .slide__cta {\n    background-color: #0a2e36;\n    color: #a8b0be; }\n    .testimonial-slides .slide--marketwatch .slide__cta svg:first-child {\n      fill: #9dabaf; }\n    .testimonial-slides .slide--marketwatch .slide__cta:hover {\n      background-color: #0c3943; }\n  .testimonial-slides .slide-imgs {\n    width: 50%;\n    height: 100%;\n    position: absolute;\n    opacity: 0.5;\n    right: 0;\n    top: 0;\n    overflow: hidden; }\n    @media (max-width: 991px) {\n      .testimonial-slides .slide-imgs {\n        display: none !important; } }\n  .testimonial-slides .slide-img {\n    width: 100%;\n    height: 100%;\n    background-size: cover;\n    background-repeat: no-repeat;\n    background-position: center center;\n    position: absolute;\n    top: 0;\n    left: 0; }\n    .testimonial-slides .slide-img--airbus {\n      background-image: url(\"/img/testimonials/testimonial-bg-airbus.jpg\"); }\n    .testimonial-slides .slide-img--marketwatch {\n      background-image: url(\"/img/testimonials/testimonial-bg-marketwatch.jpg\"); }\n  .testimonial-slides .slide-indicator {\n    position: absolute;\n    z-index: 10;\n    bottom: 16px;\n    left: 0;\n    width: 100%;\n    padding: 20px 0;\n    cursor: pointer; }\n    .testimonial-slides .slide-indicator span {\n      transition: opacity 0.3s;\n      display: -ms-inline-flexbox;\n      display: inline-flex;\n      -ms-flex-pack: center;\n          justify-content: center;\n      -ms-flex-align: center;\n          align-items: center;\n      width: 14px;\n      height: 24px;\n      opacity: 0.2; }\n      .testimonial-slides .slide-indicator span:after {\n        transition: all 0.3s;\n        -webkit-transform-origin: center center;\n                transform-origin: center center;\n        display: block;\n        content: '';\n        width: 8px;\n        height: 8px;\n        background-color: #fff;\n        border-radius: 8px; }\n      .testimonial-slides .slide-indicator span:hover:not(.active):after {\n        -webkit-transform: scale(1.4);\n                transform: scale(1.4); }\n      .testimonial-slides .slide-indicator span:hover, .testimonial-slides .slide-indicator span.active {\n        opacity: 1; }\n      .testimonial-slides .slide-indicator span.active {\n        pointer-events: none;\n        cursor: default; }\n\n.tooltip {\n  width: 300px; }\n  .tooltip .tooltip-inner {\n    padding: 10px;\n    background: rgba(0, 0, 0, 0.85); }\n  .tooltip .tooltip-arrow {\n    opacity: .85; }\n\ntippy {\n  position: relative; }\n  tippy .tip {\n    position: absolute;\n    -webkit-transform: scale3d(0, 0, 1);\n            transform: scale3d(0, 0, 1);\n    transition: .15s transform linear;\n    background: rgba(0, 0, 0, 0.8);\n    border-radius: 4px;\n    padding: 15px 20px;\n    color: white;\n    z-index: 1;\n    width: 100%;\n    min-width: 200px; }\n    tippy .tip::before {\n      position: absolute;\n      top: -5px;\n      height: 5px;\n      width: 100%;\n      left: 0;\n      content: ''; }\n    tippy .tip::after {\n      content: '';\n      position: absolute;\n      width: 0;\n      height: 0;\n      border-style: solid;\n      border-width: 0 5px 5px 5px;\n      border-color: transparent transparent rgba(0, 0, 0, 0.8);\n      position: absolute;\n      top: -5px;\n      right: 6px; }\n    tippy .tip a {\n      cursor: pointer; }\n      tippy .tip a:hover {\n        color: white; }\n    tippy .tip.right, tippy .tip.left {\n      left: 28px;\n      right: auto;\n      width: 257px;\n      top: -76px;\n      background: #3b434f;\n      padding: 14px 20px 6px;\n      font-size: 11px;\n      line-height: 20px;\n      letter-spacing: .07px; }\n      tippy .tip.right::after, tippy .tip.left::after {\n        width: 12px;\n        height: 12px;\n        border-radius: 0 0 4px 0;\n        -webkit-transform: rotate(135deg);\n                transform: rotate(135deg);\n        border: none;\n        background: linear-gradient(-45deg, #3b434f 50%, transparent 50%);\n        top: calc(50% + 7px);\n        left: -6px;\n        right: auto; }\n    tippy .tip.left {\n      left: auto;\n      right: 28px; }\n      tippy .tip.left::after {\n        left: auto;\n        right: -6px; }\n    tippy .tip.bottom {\n      left: -170px; }\n    tippy .tip.top {\n      left: -170px;\n      bottom: 23px; }\n      tippy .tip.top::after {\n        -webkit-transform: rotate(180deg);\n                transform: rotate(180deg);\n        top: auto;\n        bottom: -5px;\n        right: 18px; }\n    tippy .tip p {\n      margin-bottom: 8px; }\n  tippy > i {\n    font-size: 67%;\n    font-weight: 700;\n    line-height: 1em;\n    color: #fff;\n    border-radius: 1em;\n    padding: 3px 5px 2px;\n    background: #c2c8d2;\n    position: relative;\n    top: -0.2em;\n    display: inline-block;\n    cursor: pointer; }\n  tippy:hover .tip, tippy.active .tip {\n    transition-timing-function: cubic-bezier(0, 1.5, 0.5, 1);\n    transition-duration: .3s;\n    -webkit-transform: scale3d(1, 1, 1);\n            transform: scale3d(1, 1, 1); }\n\nbody {\n  font-family: \"Inter\", \"Inter UI\", Helvetica, Arial, sans-serif;\n  position: relative;\n  overflow-x: hidden;\n  -moz-osx-font-smoothing: grayscale;\n  -webkit-font-smoothing: antialiased;\n  text-rendering: optimizeLegibility; }\n  @media (max-width: 767px) {\n    body {\n      padding-top: 50px;\n      width: 100%;\n      min-width: 100%;\n      background: #fff; } }\n  body .docs {\n    background: linear-gradient(90deg, #f9fafb, #f9fafb 230px, white 230px, white 100%); }\n  @media (max-width: 768px) {\n    body#page-pricing-table {\n      padding-top: 0px; } }\n  body.no-scroll {\n    overflow: hidden; }\n\nmain {\n  overflow: hidden; }\n\n#components-index ul.nav > li > a {\n  background-color: #F9FAFB; }\n\n.improve-docs {\n  position: absolute;\n  right: 3.5em;\n  top: 20px; }\n\n.improve-v2-docs {\n  display: block;\n  float: right;\n  margin-top: -7em; }\n\n.component-doc-demo {\n  display: block;\n  float: right;\n  margin-top: -3.1em;\n  line-height: 25px; }\n  .component-doc-demo .component-doc-demo-mobile {\n    margin-right: 6px; }\n\n.component-doc-demo-mobile {\n  cursor: pointer;\n  padding: 3px 12px;\n  border-radius: 4px;\n  font-size: 15px;\n  font-weight: 500;\n  color: white;\n  background-color: #4a8bfc;\n  display: none;\n  line-height: inherit; }\n\n.docs-container .side-nav {\n  width: 230px; }\n\n.docs-container > main {\n  margin-left: 230px; }\n\n.docs-container > aside {\n  width: 467px; }\n  .docs-container > aside + main {\n    margin-right: 407px;\n    min-height: 777px; }\n\n@media (max-width: 1100px) {\n  .docs-container aside {\n    display: none; }\n    .docs-container aside + main {\n      margin-right: 0; }\n  .docs-container .component-doc-demo-mobile {\n    display: inline-block; } }\n\n@media (max-width: 767px) {\n  .docs-container {\n    background-color: #fff; }\n    .docs-container main {\n      margin-left: 0;\n      padding: 30px 20px 100px; }\n    .docs-container #side-nav {\n      z-index: 1;\n      top: -4px;\n      -webkit-transform: translateX(-230px);\n              transform: translateX(-230px);\n      transition: -webkit-transform .3s ease;\n      transition: transform .3s ease;\n      transition: transform .3s ease, -webkit-transform .3s ease; }\n      .docs-container #side-nav.shown {\n        -webkit-transform: translateX(0);\n                transform: translateX(0);\n        box-shadow: 0 0 15px rgba(0, 0, 0, 0.5);\n        transition: -webkit-transform .3s ease;\n        transition: transform .3s ease;\n        transition: transform .3s ease, -webkit-transform .3s ease; } }\n\nhtml {\n  position: relative;\n  height: 100%; }\n\nbody {\n  min-height: 100%;\n  margin: 0 0 -130px; }\n\na {\n  color: #4a8bfc;\n  transition: .3s color; }\n\n.footer-links {\n  position: absolute;\n  left: 270px;\n  bottom: 0;\n  height: 130px;\n  right: 40px; }\n  @media (max-width: 767px) {\n    .footer-links {\n      left: 40px; } }\n\na.footer-link {\n  color: black;\n  font-size: 18px;\n  text-decoration: none;\n  font-weight: 500;\n  position: absolute;\n  padding-top: 10px;\n  right: 40px;\n  text-align: right;\n  transition: color .2s; }\n  a.footer-link.prev {\n    right: auto;\n    left: 40px;\n    text-align: left; }\n    @media (max-width: 500px) {\n      a.footer-link.prev {\n        display: none; } }\n    a.footer-link.prev::before {\n      content: 'Previous'; }\n    a.footer-link.prev::after {\n      right: auto;\n      left: -25px;\n      content: '\\f117'; }\n  a.footer-link:hover {\n    color: #4a8bfc; }\n  a.footer-link::before {\n    display: block;\n    content: 'Next';\n    font-size: 13px;\n    color: #9da5b3;\n    font-weight: 400; }\n  a.footer-link::after {\n    content: '\\f119';\n    font-family: Ionicons;\n    display: block;\n    position: absolute;\n    right: -25px;\n    font-size: 32px;\n    font-weight: 600;\n    bottom: -10px; }\n\n.platform-preview {\n  position: absolute;\n  right: 0;\n  text-align: center;\n  right: -20px;\n  z-index: 1;\n  background-color: white; }\n  .platform-preview.fixey {\n    position: fixed;\n    top: 0; }\n  .platform-preview > a {\n    position: relative;\n    top: -25px;\n    font-size: 15px; }\n    .platform-preview > a, .platform-preview > a:hover, .platform-preview > a:active, .platform-preview > a:focus {\n      text-decoration: none; }\n\n.platform-preview .platform-toggle a, .docs-container .sass-platform-toggle a {\n  cursor: pointer;\n  display: inline-block;\n  padding: 4px 16px;\n  border-radius: 16px;\n  color: #9da5b3;\n  font-size: 14px;\n  font-weight: 500;\n  -webkit-font-smoothing: antialiased;\n  transition: .2s color, .2s background-color; }\n  .platform-preview .platform-toggle a.active, .platform-preview .platform-toggle a.active:hover, .docs-container .sass-platform-toggle a.active, .docs-container .sass-platform-toggle a.active:hover {\n    background-color: #4a8bfc;\n    color: white; }\n  .platform-preview .platform-toggle a:hover, .docs-container .sass-platform-toggle a:hover {\n    color: #4a8bfc;\n    text-decoration: none; }\n\n.platform-preview .platform-toggle {\n  padding: 8px 10px 4px; }\n\n.docs-container .sass-platform-toggle {\n  padding-top: 0px 10px 4px;\n  margin-bottom: 10px;\n  float: right; }\n\n#sass-variable-header {\n  margin-bottom: 0px;\n  padding-bottom: 0px; }\n\n#sass-variables {\n  margin-bottom: 0px;\n  position: relative;\n  bottom: 15px; }\n  #sass-variables .table.param-table td,\n  #sass-variables .table.param-table th {\n    white-space: nowrap; }\n    #sass-variables .table.param-table td:last-child, #sass-variables .table.param-table td:nth-last-child(2),\n    #sass-variables .table.param-table th:last-child,\n    #sass-variables .table.param-table th:nth-last-child(2) {\n      white-space: normal; }\n    #sass-variables .table.param-table td:nth-last-child(2),\n    #sass-variables .table.param-table th:nth-last-child(2) {\n      width: 10%; }\n\n@media (max-width: 1300px) and (min-width: 480px) {\n  #sass-variables {\n    bottom: -10px; }\n    #sass-variables .table.param-table td,\n    #sass-variables .table.param-table th {\n      white-space: normal; }\n      #sass-variables .table.param-table td:nth-last-child(2),\n      #sass-variables .table.param-table th:nth-last-child(2) {\n        width: auto; } }\n\n@media (max-width: 480px) {\n  #sass-variables {\n    bottom: -25px; }\n    #sass-variables .table.param-table tr, #sass-variables .table.param-table td {\n      white-space: normal; } }\n\n#demo-device-ios, #demo-device-android, #demo-device-windows {\n  width: 467px;\n  height: 800px;\n  background: center top no-repeat url(\"/img/devices-sprite.jpg\");\n  background-size: 467px;\n  margin: 0 auto; }\n  #demo-device-ios iframe, #demo-device-android iframe, #demo-device-windows iframe {\n    margin-top: 85px;\n    width: 320px;\n    height: 568px; }\n\n#demo-device-android {\n  background-position: center center; }\n  #demo-device-android iframe {\n    margin-top: 64px;\n    width: 360px;\n    height: 590px; }\n\n#demo-device-windows {\n  background-position: center bottom; }\n  #demo-device-windows iframe {\n    margin-top: 72px;\n    width: 350px;\n    height: 622px;\n    background: white; }\n\nli.nav-item-hidden {\n  position: absolute;\n  top: -9999px;\n  left: -9999px; }\n\nul.docs-content {\n  list-style: none;\n  line-height: 26px;\n  padding-left: 16px; }\n  ul.docs-content li.docs-content-header {\n    font-weight: 400;\n    color: #B9BEC5; }\n\nul.docs-example {\n  list-style: none;\n  display: block;\n  margin: 3em 0;\n  padding: 0;\n  border-radius: 4px; }\n  ul.docs-example li {\n    display: inline-block;\n    border: 1px solid #e6e9ee;\n    width: 32%;\n    margin: 0;\n    padding: 8% 0; }\n    @media screen and (max-width: 767px) {\n      ul.docs-example li {\n        display: block;\n        width: 100%;\n        margin-bottom: 1em; } }\n    ul.docs-example li:not(:first-child) {\n      margin-left: 1%; }\n  ul.docs-example li img {\n    display: block;\n    margin: 0 auto;\n    width: 55.7%; }\n\n.highlight .err {\n  background-color: #fff; }\n\n.param-table td p {\n  margin: 0;\n  line-height: 22px; }\n\n.param-table td ul {\n  list-style: none;\n  margin-right: -7px;\n  margin-left: -92px;\n  border: 1px solid #e6e9ee;\n  border-left: 0;\n  border-top: 0;\n  padding: 10px 17px;\n  border-bottom-right-radius: 0.5em; }\n  .param-table td ul li {\n    padding: 0;\n    margin: 17px 0; }\n\n.return-value b::before {\n  font-family: 'Ionicons';\n  -webkit-font-smoothing: antialiased;\n  content: '\\f203';\n  font-size: 16px;\n  font-weight: 800;\n  position: relative;\n  padding-right: 5px;\n  top: 2px; }\n\n.docs-container h2 a:not([role=\"button\"]), .docs-container h3 a:not([role=\"button\"]) {\n  color: #26292e !important; }\n  .docs-container h2 a:not([role=\"button\"]):hover, .docs-container h3 a:not([role=\"button\"]):hover {\n    color: #26292e !important; }\n\n.hero {\n  position: relative; }\n\n.faq-section {\n  margin: 80px auto; }\n\n@media (max-width: 991px) and (min-width: 768px) {\n  .hide-sm {\n    display: none !important; } }\n\n.native-docs a {\n  margin-top: 0 !important; }\n\n[ng\\:cloak], [ng-cloak], [data-ng-cloak], [x-ng-cloak], .ng-cloak, .x-ng-cloak {\n  display: none !important; }\n\n#hubspot-messages-iframe-container {\n  z-index: 1; }\n\n\n.page-coming-soon .coming-soon {\n  text-align: center; }\n  .page-coming-soon .coming-soon img {\n    width: 200px;\n\n  }\n  .page-coming-soon .coming-soon p {\n    color: #9da5b3;\n    font-size: 18px; }\n  .page-coming-soon .coming-soon a {\n    font-size: 16px;\n    font-weight: 500; }\n    .page-coming-soon .coming-soon a::after {\n      font-family: Ionicons;\n      content: '\\f287';\n      display: inline-block;\n      margin-left: 10px;\n      position: relative;\n      top: 2px; }\n\n\n.page-404 .four-oh-four {\n  text-align: center; }\n  .page-404 .four-oh-four img {\n    width: 100%;\n    max-width: 336px; }\n  .page-404 .four-oh-four p {\n    color: #9da5b3;\n    font-size: 18px; }\n  .page-404 .four-oh-four a {\n    font-size: 16px;\n    font-weight: 500; }\n    .page-404 .four-oh-four a::after {\n      font-family: Ionicons;\n      content: '\\f287';\n      display: inline-block;\n      margin-left: 10px;\n      position: relative;\n      top: 2px; }\n\n#page-articles-why-hybrid .signup-form .card {\n  background-image: url(\"/img/articles/why-hybrid-cover.jpg\"); }\n\n#page-books-native-v-hybrid {\n  background: #e1e6ef;\n  background: linear-gradient(to right, #e1e6ef, #e1e6ef 50%, #122138 50%, #122541);\n  position: relative;\n  height: 100%; }\n  #page-books-native-v-hybrid::before {\n    background: linear-gradient(45deg, #111c2c, #122541);\n    content: '';\n    position: absolute;\n    top: 0;\n    right: 0;\n    left: 50%;\n    bottom: 0; }\n  #page-books-native-v-hybrid main {\n    display: -ms-flexbox;\n    display: flex;\n    position: relative;\n    -ms-flex-align: center;\n        align-items: center;\n    height: 100%; }\n  #page-books-native-v-hybrid aside,\n  #page-books-native-v-hybrid hgroup {\n    -ms-flex: 0 0 50%;\n        flex: 0 0 50%; }\n  #page-books-native-v-hybrid aside {\n    position: relative;\n    background: url(\"/img/books/web-ebook-cover.jpg\") no-repeat calc(100% - 1px) 50%;\n    background-size: contain;\n    height: 100%;\n    margin-top: 160px; }\n  #page-books-native-v-hybrid hgroup {\n    color: white;\n    padding-left: 10%; }\n    #page-books-native-v-hybrid hgroup h1 {\n      font-weight: 700;\n      font-size: 44px;\n      line-height: 1.4em; }\n    #page-books-native-v-hybrid hgroup p {\n      font-size: 18px;\n      line-height: 1.7em;\n      margin: 38px 0; }\n    #page-books-native-v-hybrid hgroup .btn {\n      color: #773e00;\n      background: #ffcb2c; }\n  #page-books-native-v-hybrid .modal hgroup {\n    padding-right: 10%; }\n  #page-books-native-v-hybrid .modal h3 {\n    color: #24282e; }\n  @media (max-width: 991px) {\n    #page-books-native-v-hybrid {\n      background: #e1e6ef; }\n      #page-books-native-v-hybrid::before {\n        display: none; }\n      #page-books-native-v-hybrid main {\n        -ms-flex-direction: column;\n            flex-direction: column;\n        width: 100%; }\n        #page-books-native-v-hybrid main aside {\n          height: 400px;\n          width: 100%;\n          background-position: calc(50% + 33px) 50%;\n          margin-top: 64px; }\n        #page-books-native-v-hybrid main hgroup {\n          padding: 20px 20px 48px;\n          position: relative;\n          text-align: center; }\n          #page-books-native-v-hybrid main hgroup::before {\n            background: linear-gradient(45deg, #111c2c, #122541);\n            content: '';\n            position: absolute;\n            top: 0;\n            right: -15px;\n            left: -15px;\n            bottom: 0; }\n          #page-books-native-v-hybrid main hgroup > * {\n            position: relative; } }\n\n.book-preview {\n  width: 100vw;\n  height: 100vh;\n  background-color: #122541;\n  background-image: linear-gradient(45deg, #111c2c, #122541);\n  overflow: hidden; }\n\n#page-community .banner,\n#page-community main {\n  font-family: \"Inter\", \"Inter UI\", Helvetica, Arial, sans-serif; }\n  #page-community .banner h1,\n  #page-community .banner h2,\n  #page-community .banner h3,\n  #page-community .banner h4,\n  #page-community .banner strong,\n  #page-community main h1,\n  #page-community main h2,\n  #page-community main h3,\n  #page-community main h4,\n  #page-community main strong {\n    color: #0f1622;\n    font-family: \"Eina\", \"Helvetica Neue\", Helvetica, sans-serif; }\n  #page-community .banner a,\n  #page-community main a {\n    text-decoration: none; }\n  #page-community .banner hgroup p,\n  #page-community main hgroup p {\n    color: #4a586f; }\n\n#page-community .banner {\n  background: #fcfdff no-repeat 0 0;\n  background-image: url(\"/img/community/hero-bg.jpg\"), linear-gradient(to bottom, #fafcfd, #f4f5f7);\n  background-size: cover, 100%;\n  padding-top: 226px;\n  margin-top: -110px;\n  will-change: trasnform; }\n  #page-community .banner hgroup {\n    max-width: 768px;\n    will-change: trasnform; }\n    @media (max-width: 767px) {\n      #page-community .banner hgroup li {\n        padding-right: 15px; } }\n    @media (max-width: 767px) {\n      #page-community .banner hgroup li li {\n        margin-bottom: 16px; } }\n  #page-community .banner h1 {\n    font-size: 48px;\n    font-weight: 700;\n    letter-spacing: -.04em;\n    margin-bottom: 23px; }\n  #page-community .banner p {\n    font-size: 22px;\n    letter-spacing: -.03em;\n    line-height: 36px; }\n  #page-community .banner ul {\n    padding: 33px 0 0;\n    display: -ms-flexbox;\n    display: flex;\n    list-style: none;\n    -ms-flex-align: center;\n        align-items: center;\n    -ms-flex-pack: center;\n        justify-content: center;\n    -ms-flex-wrap: wrap;\n        flex-wrap: wrap; }\n  #page-community .banner li {\n    font-size: 24px; }\n    #page-community .banner li:first-child a {\n      padding-left: 0; }\n    #page-community .banner li a {\n      padding: 0 20px;\n      font-family: \"Eina\", \"Helvetica Neue\", Helvetica, sans-serif;\n      letter-spacing: -.024em;\n      transition: all .15s ease;\n      color: #0079ff;\n      transition: .1s opacity, .1s color; }\n      #page-community .banner li a:hover {\n        color: #4da1ff; }\n        #page-community .banner li a:hover ion-icon {\n          color: #4da1ff;\n          -webkit-transform: translateX(2px);\n                  transform: translateX(2px); }\n    #page-community .banner li ion-icon {\n      font-size: 19px;\n      vertical-align: -10%;\n      display: inline-block;\n      transition: .1s transform ease-out; }\n  #page-community .banner .features {\n    max-width: 982px;\n    margin-top: 120px;\n    padding-bottom: 27px;\n    display: -ms-flexbox;\n    display: flex;\n    -ms-flex-wrap: wrap;\n        flex-wrap: wrap;\n    -ms-flex-pack: justify;\n        justify-content: space-between;\n    will-change: trasnform; }\n    #page-community .banner .features::before, #page-community .banner .features::after {\n      display: none; }\n    #page-community .banner .features li {\n      list-style: none;\n      padding: 0;\n      text-align: left;\n      min-width: 128px;\n      padding-left: 15px;\n      padding-bottom: 32px; }\n    #page-community .banner .features strong {\n      display: block;\n      font-size: 37px;\n      letter-spacing: -.04em;\n      line-height: 40px; }\n    #page-community .banner .features span {\n      font-size: 19px;\n      display: block;\n      color: #727c8e; }\n    @media (max-width: 767px) {\n      #page-community .banner .features {\n        margin-top: 0;\n        -ms-flex-pack: distribute;\n            justify-content: space-around; } }\n  #page-community .banner h1,\n  #page-community .banner p,\n  #page-community .banner li {\n    -webkit-animation: 1s fadeInUp forwards;\n            animation: 1s fadeInUp forwards;\n    opacity: 0; }\n  #page-community .banner h1 {\n    -webkit-animation-delay: .8s;\n            animation-delay: .8s; }\n  #page-community .banner p {\n    -webkit-animation-delay: 1s;\n            animation-delay: 1s; }\n  #page-community .banner hgroup li {\n    -webkit-animation-delay: 1.6s;\n            animation-delay: 1.6s; }\n    #page-community .banner hgroup li:nth-child(2) {\n      -webkit-animation-delay: 1.7s;\n              animation-delay: 1.7s; }\n    #page-community .banner hgroup li:nth-child(3) {\n      -webkit-animation-delay: 1.8s;\n              animation-delay: 1.8s; }\n    #page-community .banner hgroup li:nth-child(4) {\n      -webkit-animation-delay: 1.9s;\n              animation-delay: 1.9s; }\n  #page-community .banner .features li {\n    -webkit-animation-delay: 2.2s;\n            animation-delay: 2.2s; }\n    #page-community .banner .features li:nth-child(2) {\n      -webkit-animation-delay: 2.3s;\n              animation-delay: 2.3s; }\n    #page-community .banner .features li:nth-child(3) {\n      -webkit-animation-delay: 2.4s;\n              animation-delay: 2.4s; }\n    #page-community .banner .features li:nth-child(4) {\n      -webkit-animation-delay: 2.5s;\n              animation-delay: 2.5s; }\n  @media (max-width: 767px) {\n    #page-community .banner {\n      -webkit-transform: none !important;\n              transform: none !important; }\n      #page-community .banner hgroup,\n      #page-community .banner .features {\n        -webkit-transform: none !important;\n                transform: none !important; } }\n\n#page-community main {\n  background: white;\n  position: relative;\n  z-index: 1;\n  overflow: hidden; }\n\n#page-community .meetups {\n  padding-top: 96px; }\n  #page-community .meetups .split {\n    display: -ms-flexbox;\n    display: flex;\n    -ms-flex-align: center;\n        align-items: center;\n    -ms-flex-pack: justify;\n        justify-content: space-between; }\n    @media (max-width: 1219px) and (min-width: 992px) {\n      #page-community .meetups .split .btns {\n        padding-top: 0;\n        margin-left: 24px; }\n      #page-community .meetups .split .btn {\n        margin-bottom: 8px; } }\n    @media (max-width: 767px) {\n      #page-community .meetups .split {\n        -ms-flex-direction: column;\n            flex-direction: column;\n        text-align: center; } }\n  #page-community .meetups hgroup {\n    max-width: 592px;\n    display: inline-block; }\n    #page-community .meetups hgroup h2 {\n      font-size: 31px;\n      font-weight: 700;\n      letter-spacing: -.006em;\n      margin-bottom: 12px; }\n    #page-community .meetups hgroup p {\n      font-size: 18px;\n      line-height: 28px;\n      letter-spacing: -.005em; }\n  #page-community .meetups .btns {\n    padding-top: 78px; }\n    #page-community .meetups .btns :first-child {\n      margin-right: 6px; }\n  #page-community .meetups .btn {\n    font-size: 16px;\n    padding: 14px 18px 12px;\n    letter-spacing: -.01em;\n    font-family: \"Eina\", \"Helvetica Neue\", Helvetica, sans-serif;\n    font-weight: 700;\n    transition: all .2s ease; }\n  #page-community .meetups ul {\n    list-style: none;\n    padding: 0;\n    margin: 64px 0 80px;\n    display: -ms-flexbox;\n    display: flex;\n    position: absolute;\n    left: 0;\n    opacity: 0;\n    will-change: transform;\n    -webkit-animation: 1s fadeIn forwards 1s;\n            animation: 1s fadeIn forwards 1s; }\n  #page-community .meetups li {\n    margin-right: 80px; }\n    #page-community .meetups li a {\n      padding: 16px 35px 14px 73px;\n      position: relative;\n      display: block;\n      transition: .4s transform ease; }\n      #page-community .meetups li a::before {\n        position: absolute;\n        top: 0;\n        right: 0;\n        left: 0;\n        bottom: 0;\n        content: '';\n        box-shadow: 0 6px 12px rgba(0, 8, 24, 0.08), 0 2px 4px rgba(0, 8, 24, 0.04);\n        border-radius: 30px;\n        transition: box-shadow .1s ease, -webkit-transform .1s ease;\n        transition: box-shadow .1s ease, transform .1s ease;\n        transition: box-shadow .1s ease, transform .1s ease, -webkit-transform .1s ease; }\n      #page-community .meetups li a::after {\n        background: url(\"/img/community/flags.png\") 0 0 no-repeat;\n        background-size: 48px;\n        position: absolute;\n        left: 11px;\n        top: calc(50% - 24px);\n        height: 48px;\n        width: 48px;\n        content: ''; }\n      #page-community .meetups li a.uk::after {\n        background-position: 0 0px; }\n      #page-community .meetups li a.ch::after {\n        background-position: 0 -48px; }\n      #page-community .meetups li a.de::after {\n        background-position: 0 -96px; }\n      #page-community .meetups li a.il::after {\n        background-position: 0 -144px; }\n      #page-community .meetups li a.us::after {\n        background-position: 0 -192px; }\n      #page-community .meetups li a.br::after {\n        background-position: 0 -240px; }\n      #page-community .meetups li a.nl::after {\n        background-position: 0 -288px; }\n      #page-community .meetups li a.es::after {\n        background-position: 0 -336px; }\n      #page-community .meetups li a.ams::after {\n        background-position: 0 -384px; }\n      #page-community .meetups li a.in::after {\n        background-position: 0 -432px; }\n      #page-community .meetups li a.yvr::after {\n        background-position: 0 -480px; }\n      #page-community .meetups li a.tr::after {\n        background-position: 0 -528px; }\n      #page-community .meetups li a.au::after {\n        background-position: 0 -576px; }\n      #page-community .meetups li a.dk::after {\n        background-position: 0 -624px; }\n      #page-community .meetups li a.hu::after {\n        background-position: 0 -672px; }\n      #page-community .meetups li a.co::after {\n        background-position: 0 -720px; }\n      #page-community .meetups li a.jp::after {\n        background-position: 0 -768px; }\n      #page-community .meetups li a.ug::after {\n        background-position: 0 -816px; }\n      #page-community .meetups li a.hk::after {\n        background-position: 0 -864px; }\n      #page-community .meetups li a.ng::after {\n        background-position: 0 -912px; }\n      #page-community .meetups li a.tz::after {\n        background-position: 0 -960px; }\n      #page-community .meetups li a.th::after {\n        background-position: 0 -1008px; }\n      #page-community .meetups li a:hover {\n        -webkit-transform: translateY(-1px);\n                transform: translateY(-1px); }\n        #page-community .meetups li a:hover::before {\n          box-shadow: 0 10px 18px rgba(0, 8, 24, 0.1), 0 4px 8px rgba(0, 8, 24, 0.08);\n          -webkit-transform: scale3d(1.01, 1.02, 1);\n                  transform: scale3d(1.01, 1.02, 1); }\n    #page-community .meetups li strong,\n    #page-community .meetups li span {\n      position: relative;\n      z-index: 1;\n      display: block;\n      white-space: nowrap; }\n    #page-community .meetups li strong {\n      font-weight: 600;\n      letter-spacing: -.01em;\n      font-size: 14px;\n      line-height: 16px;\n      color: #0f1622; }\n    #page-community .meetups li span {\n      font-size: 12px;\n      letter-spacing: -.01em;\n      color: #506176; }\n\n#page-community .image-wall {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-wrap: wrap;\n      flex-wrap: wrap;\n  -ms-flex-pack: justify;\n      justify-content: space-between;\n  margin-top: 220px; }\n  @media (max-width: 1219px) {\n    #page-community .image-wall {\n      -ms-flex-pack: distribute;\n          justify-content: space-around; } }\n  #page-community .image-wall img {\n    height: 256px;\n    margin-bottom: 14px; }\n    @media (max-width: 1219px) {\n      #page-community .image-wall img {\n        -ms-flex-pack: distribute;\n            justify-content: space-around; } }\n  @media (max-width: 767px) {\n    #page-community .image-wall {\n      margin-left: -5px;\n      margin-right: -5px; }\n      #page-community .image-wall img {\n        margin-right: 5px;\n        margin-left: 5px;\n        height: 128px; } }\n  @media (max-width: 440px) {\n    #page-community .image-wall img {\n      height: 64px; } }\n\n#page-community .leaders {\n  background: linear-gradient(to bottom, #f7f9fb, white 50%, white);\n  margin-top: -142px;\n  padding-top: 182px; }\n  #page-community .leaders hgroup {\n    margin: 84px auto 66px;\n    max-width: 684px;\n    text-align: center; }\n    #page-community .leaders hgroup h2 {\n      font-weight: 700;\n      font-size: 32px;\n      margin-bottom: 13px;\n      letter-spacing: -0.01em; }\n    #page-community .leaders hgroup p {\n      font-size: 18px;\n      letter-spacing: -.01em;\n      line-height: 28px; }\n  #page-community .leaders ul {\n    display: -ms-flexbox;\n    display: flex;\n    -ms-flex-wrap: wrap;\n        flex-wrap: wrap;\n    -ms-flex-pack: justify;\n        justify-content: space-between;\n    padding: 15px; }\n    #page-community .leaders ul::before, #page-community .leaders ul::after {\n      display: none; }\n  #page-community .leaders li {\n    -ms-flex: 0 0 271px;\n        flex: 0 0 271px;\n    list-style: none;\n    padding: 82px 24px 18px;\n    text-align: center;\n    position: relative;\n    margin-bottom: 55px; }\n    #page-community .leaders li::before, #page-community .leaders li::after {\n      content: '';\n      position: absolute; }\n    #page-community .leaders li::before {\n      top: 0;\n      right: 0;\n      left: 0;\n      bottom: 0;\n      border-radius: 8px;\n      pointer-events: none;\n      box-shadow: 0 4px 8px rgba(0, 8, 24, 0.08), 0px 8px 32px rgba(0, 8, 24, 0.1);\n      transition: .2s box-shadow ease-out, .2s transform ease-out; }\n    #page-community .leaders li::after {\n      top: -20px;\n      right: calc(50% - 45px);\n      background: url(\"/img/community/community-leaders-avatars.png\") 0 0 no-repeat;\n      background-size: 90px;\n      height: 90px;\n      width: 90px; }\n    #page-community .leaders li.simon::after {\n      background-position: 0 0px; }\n    #page-community .leaders li.josh::after {\n      background-position: 0 -90px; }\n    #page-community .leaders li.jorge::after {\n      background-position: 0 -180px; }\n    #page-community .leaders li.veni::after {\n      background-position: 0 -270px; }\n    #page-community .leaders li.ashteya::after {\n      background-position: 0 -360px; }\n    #page-community .leaders li.paul::after {\n      background-position: 0 -450px; }\n    #page-community .leaders li.sani::after {\n      background-position: 0 -540px; }\n    #page-community .leaders li.leif::after {\n      background-position: 0 -630px; }\n    #page-community .leaders li.david::after {\n      background-position: 0 -720px; }\n    #page-community .leaders li.chris::after {\n      background-position: 0 -810px; }\n    #page-community .leaders li.dayana::after {\n      background-position: 0 -900px; }\n    #page-community .leaders li.aaron::after {\n      background-position: 0 -990px; }\n    #page-community .leaders li:hover::before {\n      box-shadow: 0 2px 8px rgba(0, 8, 24, 0.08), 0px 8px 32px rgba(0, 8, 24, 0.1), 0 8px 18px rgba(0, 8, 24, 0.1); }\n  #page-community .leaders strong {\n    display: block;\n    font-size: 15px;\n    font-weight: 600;\n    letter-spacing: .01em; }\n  #page-community .leaders p {\n    font-size: 14px;\n    margin-top: 7px;\n    letter-spacing: -.02em; }\n    #page-community .leaders p a {\n      transition: .2s color ease-out; }\n      #page-community .leaders p a:hover {\n        color: #045cf5; }\n  #page-community .leaders .twitter {\n    position: absolute;\n    top: 9px;\n    right: 15px;\n    width: 20px;\n    height: 20px;\n    font-size: 20px;\n    color: #d6ddea;\n    transition: .2s transform ease-out, .2s color ease-out; }\n    #page-community .leaders .twitter:hover {\n      color: #4a8bfc;\n      -webkit-transform: scale3d(1.2, 1.2, 1);\n              transform: scale3d(1.2, 1.2, 1); }\n  @media (max-width: 991px) {\n    #page-community .leaders ul {\n      padding-left: 0;\n      padding-right: 0; }\n    #page-community .leaders li {\n      -ms-flex-positive: 1;\n          flex-grow: 1;\n      margin-left: 15px;\n      margin-right: 15px; } }\n\n#page-community .join .split {\n  display: -ms-flexbox;\n  display: flex;\n  padding: 60px 0;\n  -ms-flex-align: end;\n      align-items: flex-end; }\n  @media (max-width: 991px) {\n    #page-community .join .split {\n      -ms-flex-align: center;\n          align-items: center; } }\n  @media (max-width: 767px) {\n    #page-community .join .split {\n      -ms-flex-direction: column;\n          flex-direction: column; }\n      #page-community .join .split hgroup {\n        -ms-flex: 0;\n            flex: 0; }\n      #page-community .join .split aside {\n        width: 100%;\n        margin-top: 24px;\n        margin-left: 0; } }\n\n#page-community .join hgroup {\n  -ms-flex: 0 508px;\n      flex: 0 508px; }\n  #page-community .join hgroup h2 {\n    font-size: 24px;\n    font-weight: 700;\n    letter-spacing: -.01em; }\n  #page-community .join hgroup p {\n    font-size: 16px;\n    margin-top: 17px;\n    line-height: 1.5em;\n    letter-spacing: -.02em;\n    margin-bottom: 0; }\n\n#page-community .join aside {\n  margin-left: auto;\n  width: 460px;\n  padding-bottom: 2px; }\n  @media (max-width: 991px) {\n    #page-community .join aside {\n      margin-left: 20px; } }\n  #page-community .join aside h3 {\n    font-size: 16px;\n    font-weight: 600;\n    letter-spacing: -.01em; }\n  #page-community .join aside ionic-newsletter-signup {\n    margin-top: 11px;\n    display: block; }\n\n#page-community .join ul {\n  padding: 0;\n  list-style: none;\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-wrap: wrap;\n      flex-wrap: wrap;\n  margin-top: 27px;\n  -ms-flex-pack: justify;\n      justify-content: space-between; }\n  @media (max-width: 1219px) {\n    #page-community .join ul {\n      -ms-flex-pack: distribute;\n          justify-content: space-around; } }\n\n#page-community .join li {\n  margin-bottom: 58px;\n  width: 337px; }\n  #page-community .join li a {\n    padding-left: 82px;\n    display: block;\n    position: relative; }\n    #page-community .join li a::before {\n      background: url(\"/img/community/social-icons.png\") 0 0 no-repeat;\n      background-size: 70px;\n      height: 70px;\n      width: 70px;\n      position: absolute;\n      content: '';\n      top: calc(50% - 33px);\n      left: -2px;\n      transition: .2s transform ease-out;\n      -webkit-backface-visibility: hidden;\n              backface-visibility: hidden;\n      -webkit-transform: translateX(0);\n              transform: translateX(0);\n      outline: 1px solid transparent; }\n    #page-community .join li a:hover strong {\n      color: black; }\n    #page-community .join li a:hover span {\n      color: #4c5869; }\n    #page-community .join li a:hover::before {\n      -webkit-transform: translateX(2px);\n              transform: translateX(2px); }\n  #page-community .join li.slack a::before {\n    background-position: 0 0px; }\n  #page-community .join li.forum a::before {\n    background-position: 0 -70px; }\n  #page-community .join li.twitter a::before {\n    background-position: 0 -140px; }\n  #page-community .join li.github a::before {\n    background-position: 0 -210px; }\n  #page-community .join li.so a::before {\n    background-position: 0 -280px; }\n  #page-community .join li.facebook a::before {\n    background-position: 0 -350px; }\n  #page-community .join li.youtube a::before {\n    background-position: 0 -420px; }\n  #page-community .join li.blog a::before {\n    background-position: 0 -490px; }\n  #page-community .join li.medium a::before {\n    background-position: 0 -560px; }\n  #page-community .join li strong {\n    transition: .2s color ease; }\n  #page-community .join li strong {\n    display: block;\n    font-weight: 600;\n    font-size: 17px;\n    color: #0f1622;\n    margin-bottom: 2px; }\n  #page-community .join li span {\n    font-size: 13px;\n    letter-spacing: .014em;\n    color: #6c7e95; }\n\n#page-community .latest {\n  background: linear-gradient(to bottom, #f7f9fc, #fefeff);\n  margin-top: 101px;\n  padding-top: 138px; }\n  #page-community .latest hgroup {\n    margin: 0 auto 72px;\n    max-width: 560px;\n    text-align: center; }\n    #page-community .latest hgroup h2 {\n      font-weight: 700;\n      font-size: 32px;\n      letter-spacing: -.02em; }\n    #page-community .latest hgroup p {\n      margin-top: 12px;\n      font-size: 18px;\n      line-height: 28px;\n      letter-spacing: .006em; }\n  #page-community .latest .tutorials,\n  #page-community .latest .videos {\n    margin-top: 26px;\n    position: relative; }\n    #page-community .latest .tutorials h3,\n    #page-community .latest .videos h3 {\n      font-size: 20px;\n      text-transform: uppercase;\n      letter-spacing: .08em;\n      font-weight: 700; }\n    #page-community .latest .tutorials .subscribe,\n    #page-community .latest .videos .subscribe {\n      position: absolute;\n      color: #3880ff;\n      background: #dfedff;\n      border-radius: 16px;\n      padding: 4px 11px 5px;\n      text-transform: uppercase;\n      font-weight: 500;\n      font-size: 11px;\n      letter-spacing: 0.04em;\n      right: 0;\n      top: -2px; }\n      #page-community .latest .tutorials .subscribe ion-icon,\n      #page-community .latest .videos .subscribe ion-icon {\n        margin-right: 1px;\n        font-size: 10px;\n        vertical-align: -5%; }\n    #page-community .latest .tutorials ul,\n    #page-community .latest .videos ul {\n      padding: 24px 0px;\n      list-style: none;\n      display: -ms-flexbox;\n      display: flex;\n      -ms-flex-wrap: wrap;\n          flex-wrap: wrap;\n      -ms-flex-pack: justify;\n          justify-content: space-between; }\n    #page-community .latest .tutorials li,\n    #page-community .latest .videos li {\n      -ms-flex: 0 333px;\n          flex: 0 333px;\n      margin-bottom: 28px; }\n      @media (max-width: 1219px) {\n        #page-community .latest .tutorials li,\n        #page-community .latest .videos li {\n          -ms-flex: 0 300px;\n              flex: 0 300px; } }\n      #page-community .latest .tutorials li a,\n      #page-community .latest .videos li a {\n        display: block;\n        padding: 1px 0 1px 39px;\n        position: relative; }\n        #page-community .latest .tutorials li a::before,\n        #page-community .latest .videos li a::before {\n          background: url(\"/img/community/latest-rss-icons.png\") 0 0 no-repeat;\n          background-size: 28px;\n          height: 28px;\n          width: 28px;\n          content: '';\n          position: absolute;\n          top: 0;\n          left: 0;\n          transition: .2s transform ease-out; }\n        #page-community .latest .tutorials li a:hover strong,\n        #page-community .latest .videos li a:hover strong {\n          color: black; }\n        #page-community .latest .tutorials li a:hover p,\n        #page-community .latest .videos li a:hover p {\n          color: #323c4c; }\n        #page-community .latest .tutorials li a:hover span,\n        #page-community .latest .videos li a:hover span {\n          color: #5f7085; }\n        #page-community .latest .tutorials li a:hover::before,\n        #page-community .latest .videos li a:hover::before {\n          -webkit-transform: translateX(2px);\n                  transform: translateX(2px); }\n      #page-community .latest .tutorials li strong,\n      #page-community .latest .tutorials li p,\n      #page-community .latest .tutorials li span,\n      #page-community .latest .videos li strong,\n      #page-community .latest .videos li p,\n      #page-community .latest .videos li span {\n        transition: .2s color ease; }\n      #page-community .latest .tutorials li strong,\n      #page-community .latest .videos li strong {\n        display: block;\n        letter-spacing: -.018em;\n        font-weight: 600;\n        line-height: 1.75em; }\n      #page-community .latest .tutorials li p,\n      #page-community .latest .videos li p {\n        display: block;\n        color: #51607a;\n        margin-top: 3px;\n        font-size: 13px;\n        line-height: 1.9em;\n        letter-spacing: -.02em; }\n      #page-community .latest .tutorials li span,\n      #page-community .latest .videos li span {\n        display: block;\n        color: #8796a9;\n        font-size: 12px;\n        margin-top: 12px;\n        letter-spacing: .03em; }\n    @media (max-width: 1219px) {\n      #page-community .latest .tutorials ul,\n      #page-community .latest .videos ul {\n        margin-left: -15px;\n        margin-right: -15px; }\n      #page-community .latest .tutorials li,\n      #page-community .latest .videos li {\n        -ms-flex-positive: 1;\n            flex-grow: 1;\n        margin-left: 15px;\n        margin-right: 15px; } }\n  #page-community .latest .videos li a::before {\n    background-position: 0 -28px; }\n\n#page-community .education {\n  background: #121b2c url(\"/img/community/community-edu-bg.jpg\") no-repeat;\n  background-position: 50% 0;\n  background-size: 1680px;\n  margin-top: 93px;\n  padding-top: 138px;\n  padding-bottom: 75px; }\n  #page-community .education h2,\n  #page-community .education h3,\n  #page-community .education h4,\n  #page-community .education p {\n    position: relative;\n    color: white;\n    position: relative;\n    z-index: 1; }\n  #page-community .education p,\n  #page-community .education h4 {\n    opacity: .8; }\n  #page-community .education hgroup {\n    max-width: 580px; }\n    #page-community .education hgroup h2 {\n      font-size: 31px;\n      font-weight: 700; }\n    #page-community .education hgroup p {\n      font-size: 18px;\n      margin-top: 13px;\n      line-height: 1.6em;\n      letter-spacing: -.026em; }\n    @media (max-width: 991px) {\n      #page-community .education hgroup {\n        text-align: center;\n        margin: 0 auto; } }\n  #page-community .education ul {\n    padding: 47px 1px;\n    margin-right: -15px;\n    margin-left: -15px;\n    display: -ms-flexbox;\n    display: flex;\n    -ms-flex-wrap: wrap;\n        flex-wrap: wrap;\n    list-style: none;\n    -ms-flex-pack: justify;\n        justify-content: space-between; }\n    @media (max-width: 1219px) {\n      #page-community .education ul {\n        -ms-flex-pack: distribute;\n            justify-content: space-around; } }\n  #page-community .education li {\n    -ms-flex: 0 270px;\n        flex: 0 270px;\n    height: 230px;\n    margin-bottom: 28px;\n    margin-right: 11px;\n    margin-left: 11px; }\n    #page-community .education li a {\n      padding: 12px 29px;\n      display: block;\n      height: 100%;\n      position: relative; }\n      #page-community .education li a::before {\n        position: absolute;\n        top: 0;\n        right: 0;\n        bottom: 0;\n        left: 0;\n        content: '';\n        background: #3880ff;\n        border-radius: 8px;\n        transition: .2s transform ease; }\n      #page-community .education li a:hover::before {\n        -webkit-transform: scale3d(1.01, 1.01, 1);\n                transform: scale3d(1.01, 1.01, 1); }\n    #page-community .education li h4 {\n      font-size: 11px;\n      text-transform: uppercase;\n      letter-spacing: .15em;\n      margin-bottom: 8px;\n      font-weight: 700; }\n    #page-community .education li h3 {\n      font-size: 21px;\n      margin-top: 0;\n      font-weight: 700;\n      letter-spacing: -.01em; }\n    #page-community .education li p {\n      position: absolute;\n      bottom: 15px;\n      font-size: 12px;\n      left: 28px;\n      right: 28px;\n      letter-spacing: -.01em;\n      line-height: 1.4em; }\n    #page-community .education li:nth-child(2) a::before {\n      background: #287ea1; }\n    #page-community .education li:nth-child(3) a::before {\n      background: #da5b70; }\n    #page-community .education li:nth-child(4) a::before {\n      background: #95b251; }\n    #page-community .education li:nth-child(5) a::before {\n      background: #30aeeb; }\n    #page-community .education li:nth-child(6) a::before {\n      background: #4a628a; }\n    #page-community .education li:nth-child(7) a::before {\n      background: #8d5ce3; }\n    #page-community .education li:nth-child(8) a::before {\n      background: #f48f63; }\n\n#page-contributors main {\n  color: #161a1f;\n  font-family: \"Eina\", \"Helvetica Neue\", Helvetica, sans-serif;\n  font-weight: 600; }\n\n#page-contributors .btn {\n  font-size: 16px;\n  font-weight: 700;\n  padding: 12px 20px; }\n  #page-contributors .btn--secondary {\n    background-color: #102242; }\n\n#page-contributors .cta {\n  background-color: transparent;\n  color: inherit;\n  padding-bottom: 60px;\n  padding-top: 120px;\n  text-align: center; }\n  @media (max-width: 768px) {\n    #page-contributors .cta {\n      padding-top: 180px; } }\n\n#page-contributors .cta h1 {\n  color: #73ABFF;\n  font-size: 48px;\n  font-weight: 700;\n  letter-spacing: -0.02em; }\n\n#page-contributors .cta h1 span {\n  color: #3880FF; }\n\n#page-contributors .cta .typed-cursor {\n  color: rgba(0, 0, 0, 0);\n  display: inline-block;\n  width: 4px;\n  height: 56px;\n  position: relative;\n  top: -4px;\n  background: #BFD6FF;\n  opacity: 1;\n  -webkit-animation: typedjsBlink 1s infinite;\n          animation: typedjsBlink 1s infinite; }\n\n@-webkit-keyframes typedjsBlink {\n  0% {\n    opacity: 1; }\n  50% {\n    opacity: 0.0; }\n  100% {\n    opacity: 1; } }\n\n@keyframes typedjsBlink {\n  0% {\n    opacity: 1; }\n  50% {\n    opacity: 0.0; }\n  100% {\n    opacity: 1; } }\n\n#page-contributors .cta p {\n  color: #505863;\n  font-size: 18px;\n  line-height: 30px;\n  letter-spacing: -0.03em;\n  margin: 0.75em auto 1.25em;\n  max-width: 570px; }\n\n#page-contributors .cta .container {\n  padding-top: 50px;\n  padding-bottom: 50px; }\n  @media (min-width: 768px) {\n    #page-contributors .cta .container {\n      padding-top: 100px;\n      padding-bottom: 100px; } }\n\n#page-contributors .section-header {\n  color: #2f3744;\n  font-size: 20px;\n  letter-spacing: -0.02em;\n  margin-bottom: 4em;\n  margin-top: 4em;\n  max-width: 32em; }\n\n#page-contributors .section-header h2 {\n  color: #24282e;\n  font-size: 1.8em;\n  font-weight: 700;\n  margin-bottom: 0.65em; }\n\n#page-contributors .oss .section-header h2 span,\n#page-contributors .pro .section-header h2 span {\n  border-bottom: solid 4px #24282e; }\n\n#page-contributors .feature {\n  display: -ms-flexbox;\n  display: flex;\n  font-size: 16px;\n  font-weight: 600;\n  letter-spacing: -0.01em; }\n\n#page-contributors .feature__icon {\n  background-image: url(\"/img/contributors/contributors-feature-icons.png\");\n  background-position: top;\n  background-repeat: no-repeat;\n  background-size: 100%;\n  display: block;\n  -ms-flex: 0 0 48px;\n      flex: 0 0 48px;\n  height: 48px;\n  margin-right: 2em;\n  width: 48px; }\n  #page-contributors .feature__icon.talk {\n    background-position-y: 0; }\n  #page-contributors .feature__icon.story {\n    background-position-y: -48px; }\n  #page-contributors .feature__icon.blog {\n    background-position-y: -96px; }\n\n#page-contributors .feature__text strong {\n  display: block;\n  font-size: 1.25em;\n  margin-bottom: 0.75em; }\n\n#page-contributors .feature__text p {\n  color: #788497;\n  line-height: 1.65; }\n\n#page-contributors .feature-list {\n  list-style: none;\n  margin: 0 0 4em;\n  padding: 0; }\n\n#page-contributors .feature-list > li {\n  margin-bottom: 2em; }\n\n@media (min-width: 768px) {\n  #page-contributors .feature-list {\n    display: -ms-flexbox;\n    display: flex;\n    margin: 0; }\n  #page-contributors .feature-list > li {\n    -ms-flex: 1;\n        flex: 1;\n    padding-right: 3em;\n    margin-bottom: 4em; }\n  #page-contributors .feature {\n    -ms-flex-direction: column;\n        flex-direction: column; }\n  #page-contributors .feature__icon {\n    margin-bottom: 1.25em; } }\n\n#page-contributors .topics {\n  position: relative;\n  min-height: 660px;\n  background-color: #242355;\n  color: #fff;\n  overflow: hidden; }\n  #page-contributors .topics:before, #page-contributors .topics:after {\n    display: block;\n    content: '';\n    width: 100%;\n    height: 100px;\n    position: absolute;\n    left: 0;\n    z-index: 2;\n    opacity: 0.4; }\n  #page-contributors .topics:before {\n    top: 0;\n    background-image: linear-gradient(-180deg, #242355 0%, rgba(36, 35, 85, 0) 100%); }\n  #page-contributors .topics:after {\n    bottom: 0;\n    background-image: linear-gradient(-180deg, rgba(36, 35, 85, 0) 0%, #242355 100%); }\n  #page-contributors .topics hgroup {\n    max-width: 440px;\n    margin-top: 72px;\n    position: relative;\n    z-index: 3;\n    text-align: center;\n    margin-left: auto;\n    margin-right: auto; }\n  #page-contributors .topics h1 {\n    font-size: 36px;\n    color: #FFFFFF;\n    letter-spacing: -1.2px;\n    line-height: 48px;\n    font-weight: 700; }\n  #page-contributors .topics p {\n    font-size: 18px;\n    color: #BFC5E5;\n    letter-spacing: -0.62px;\n    line-height: 30px; }\n  #page-contributors .topics.image-fallback:after {\n    content: '';\n    display: block;\n    width: 388px;\n    height: 658px;\n    background-image: url(\"../img/contributors/contributors-topics.png\");\n    background-repeat: no-repeat;\n    background-size: 388px 658px;\n    position: absolute;\n    top: 0;\n    left: 50%;\n    -webkit-transform: translateX(-50%);\n            transform: translateX(-50%);\n    opacity: 0.5;\n    z-index: 1; }\n  @media (max-width: 768px) {\n    #page-contributors .topics:before {\n      height: 400px;\n      opacity: 1; }\n    #page-contributors .topics:after {\n      opacity: 0.3; } }\n  @media (min-width: 768px) {\n    #page-contributors .topics.image-fallback:after {\n      -webkit-transform: translateX(10%);\n              transform: translateX(10%);\n      opacity: 1; }\n    #page-contributors .topics hgroup {\n      text-align: left;\n      margin-left: 0;\n      margin-right: 0;\n      margin-top: 136px; } }\n\n#page-contributors .topics__animation {\n  position: absolute;\n  top: 0;\n  right: 50%;\n  -webkit-transform: translateX(90%);\n          transform: translateX(90%);\n  z-index: 1;\n  overflow: hidden; }\n  #page-contributors .topics__animation .text {\n    font-size: 18px;\n    letter-spacing: -0.03em;\n    fill: #fff; }\n  @media (max-width: 768px) {\n    #page-contributors .topics__animation {\n      opacity: 0.8;\n      -webkit-transform: translateX(50%);\n              transform: translateX(50%); } }\n\n#page-contributors .quotes {\n  color: #ffffff;\n  display: -ms-flexbox;\n  display: flex;\n  font-size: 20px;\n  font-weight: 700;\n  letter-spacing: -0.01em; }\n  @media (max-width: 768px) {\n    #page-contributors .quotes {\n      -ms-flex-direction: column;\n          flex-direction: column; } }\n\n#page-contributors .quotes__content {\n  max-width: 490px;\n  position: relative; }\n\n#page-contributors .quotes__quote {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex: 1;\n      flex: 1;\n  padding: 80px;\n  color: #24282e; }\n  @media (max-width: 480px) {\n    #page-contributors .quotes__quote {\n      padding: 40px; } }\n  @media (min-width: 768px) {\n    #page-contributors .quotes__quote:first-child {\n      -ms-flex-pack: end;\n          justify-content: flex-end; } }\n  #page-contributors .quotes__quote.morony {\n    background-color: #E9F2FF; }\n  #page-contributors .quotes__quote.verganara {\n    background-color: #D0E2FD; }\n\n#page-contributors .quotes__avatar {\n  background-image: url(\"/img/contributors/contributors-testimonial-avatars.png\");\n  background-position: center;\n  background-size: 100%;\n  background-repeat: no-repeat;\n  display: block;\n  width: 62px;\n  height: 62px;\n  margin-bottom: 1em;\n  border-radius: 62px;\n  border: 3px solid #fff;\n  box-shadow: 0 2px 4px 0 rgba(0, 0, 0, 0.1); }\n  #page-contributors .quotes__avatar.morony {\n    background-position-y: 0; }\n  #page-contributors .quotes__avatar.verganara {\n    background-position-y: -56px; }\n\n#page-contributors .quotes blockquote {\n  border: none;\n  font-size: inherit;\n  line-height: 1.5;\n  margin: 0;\n  padding: 0; }\n\n#page-contributors .quotes a {\n  color: initial;\n  text-underline: none; }\n\n#page-contributors .quotes a blockquote > small {\n  color: inherit;\n  font-weight: 600;\n  margin-top: 2em;\n  text-align: right; }\n  #page-contributors .quotes a blockquote > small > span {\n    padding-left: 0.5em; }\n  #page-contributors .quotes a blockquote > small:before {\n    display: none; }\n\n#page-contributors .morony a blockquote > small > span {\n  color: #93A8C6; }\n\n#page-contributors .verganara a blockquote > small > span {\n  color: #5C749B; }\n\n#page-contributors .apply {\n  padding-top: 100px;\n  padding-bottom: 100px; }\n  #page-contributors .apply .container {\n    display: -ms-flexbox;\n    display: flex; }\n  @media (max-width: 992px) {\n    #page-contributors .apply .container {\n      -ms-flex-direction: column;\n          flex-direction: column; } }\n  @media (max-width: 768px) {\n    #page-contributors .apply {\n      padding-top: 50px;\n      padding-bottom: 50px; } }\n\n#page-contributors .apply__form {\n  -ms-flex: 0 0 685px;\n      flex: 0 0 685px;\n  padding: 46px;\n  background: #FFFFFF;\n  box-shadow: 0 2px 8px 0 rgba(0, 14, 39, 0.12), 0 10px 20px 0 rgba(0, 14, 39, 0.12);\n  border-radius: 15px; }\n  #page-contributors .apply__form h2 {\n    margin-top: 0;\n    font-weight: 700;\n    font-size: 36px;\n    letter-spacing: -1.2px;\n    line-height: 48px;\n    color: #161A1F; }\n  #page-contributors .apply__form .hbspt-form {\n    margin: 44px 0 0; }\n  @media (max-width: 1220px) {\n    #page-contributors .apply__form {\n      -ms-flex: 0 0 580px;\n          flex: 0 0 580px; } }\n\n#page-contributors .apply__benefits {\n  padding-left: 50px;\n  margin-top: 62px; }\n  #page-contributors .apply__benefits h4 {\n    font-size: 22px;\n    font-weight: 700;\n    letter-spacing: -0.03em;\n    color: #161A1F;\n    margin: 0 0 36px; }\n\n#page-contributors .benefit-list {\n  margin: 0;\n  padding: 0;\n  list-style-type: none; }\n\n#page-contributors .benefit-list__item {\n  padding-left: 42px;\n  margin-top: 28px;\n  background: url(/img/framework/checkmark-icon.png) no-repeat 0 0;\n  background-size: 24px; }\n  #page-contributors .benefit-list__item h5 {\n    font-size: 18px;\n    font-weight: 600;\n    color: #161A1F;\n    line-height: 22px;\n    margin: 0 0 5px; }\n  #page-contributors .benefit-list__item p {\n    font-size: 14px;\n    color: #747F92;\n    letter-spacing: -0.25px;\n    line-height: 24px;\n    max-width: 280px; }\n\n@media (max-width: 768px) {\n  #page-contributors .apply__form {\n    -ms-flex: 0 0 auto;\n        flex: 0 0 auto;\n    padding: 26px; }\n    #page-contributors .apply__form h2 {\n      text-align: center;\n      font-size: 30px;\n      margin: 16px 0; } }\n\n@media (max-width: 992px) {\n  #page-contributors .apply__benefits {\n    padding-left: 0; }\n  #page-contributors .benefit-list__item p {\n    max-width: none; } }\n\n@media (max-width: 767px) {\n  #page-demo .demo-cta,\n  #page-strategy-session .demo-cta {\n    margin-top: 0; } }\n\n#page-demo .demo-cta > .container,\n#page-strategy-session .demo-cta > .container {\n  -ms-flex-align: center;\n      align-items: center;\n  display: -ms-flexbox;\n  display: flex;\n  padding-bottom: 104px;\n  padding-top: 53px; }\n  @media (max-width: 767px) {\n    #page-demo .demo-cta > .container,\n    #page-strategy-session .demo-cta > .container {\n      -ms-flex-direction: column;\n          flex-direction: column;\n      padding-top: 23px;\n      text-align: center; } }\n\n#page-demo .demo-cta hgroup,\n#page-strategy-session .demo-cta hgroup {\n  max-width: none;\n  padding-bottom: 0;\n  padding-top: 0; }\n  @media (max-width: 767px) {\n    #page-demo .demo-cta hgroup,\n    #page-strategy-session .demo-cta hgroup {\n      max-width: 480px; } }\n\n#page-demo .demo-cta hgroup p,\n#page-strategy-session .demo-cta hgroup p {\n  margin-bottom: 0; }\n  @media (max-width: 767px) {\n    #page-demo .demo-cta hgroup p,\n    #page-strategy-session .demo-cta hgroup p {\n      font-size: 15px; } }\n\n#page-demo .demo-cta h1,\n#page-strategy-session .demo-cta h1 {\n  font-weight: 600;\n  margin-bottom: 8px;\n  margin-top: 0; }\n  @media (min-width: 992px) {\n    #page-demo .demo-cta h1,\n    #page-strategy-session .demo-cta h1 {\n      font-size: 32px; } }\n\n#page-demo .demo-cta__icon,\n#page-strategy-session .demo-cta__icon {\n  display: block;\n  margin-right: 20px;\n  width: 64px; }\n  @media (max-width: 767px) {\n    #page-demo .demo-cta__icon,\n    #page-strategy-session .demo-cta__icon {\n      margin-right: 0;\n      margin-bottom: 2em; } }\n\n#page-demo .demo-form,\n#page-strategy-session .demo-form {\n  display: -ms-flexbox;\n  display: flex;\n  overflow: visible; }\n  #page-demo .demo-form::before, #page-demo .demo-form::after,\n  #page-strategy-session .demo-form::before,\n  #page-strategy-session .demo-form::after {\n    display: none; }\n  #page-demo .demo-form .hbspt-form,\n  #page-strategy-session .demo-form .hbspt-form {\n    background-color: #fff;\n    border-radius: 6px;\n    box-shadow: 0 8px 32px rgba(0, 0, 0, 0.1), 0 2px 8px rgba(0, 0, 0, 0.1);\n    margin-bottom: 50px;\n    margin-top: -40px;\n    padding: 64px 64px 24px; }\n    #page-demo .demo-form .hbspt-form form,\n    #page-strategy-session .demo-form .hbspt-form form {\n      max-width: 100%;\n      padding: 0; }\n      #page-demo .demo-form .hbspt-form form h3,\n      #page-strategy-session .demo-form .hbspt-form form h3 {\n        width: 100%; }\n      #page-demo .demo-form .hbspt-form form:before,\n      #page-strategy-session .demo-form .hbspt-form form:before {\n        display: none; }\n    #page-demo .demo-form .hbspt-form .hs-form-required,\n    #page-strategy-session .demo-form .hbspt-form .hs-form-required {\n      position: absolute;\n      pointer-events: none; }\n    #page-demo .demo-form .hbspt-form button,\n    #page-strategy-session .demo-form .hbspt-form button {\n      float: none;\n      margin-top: 0; }\n    #page-demo .demo-form .hbspt-form .hs-input,\n    #page-strategy-session .demo-form .hbspt-form .hs-input {\n      width: 100%;\n      max-width: 100%;\n      box-sizing: border-box; }\n    #page-demo .demo-form .hbspt-form .form-columns-1 .input,\n    #page-strategy-session .demo-form .hbspt-form .form-columns-1 .input {\n      margin-right: 0; }\n  #page-demo .demo-form__aside,\n  #page-strategy-session .demo-form__aside {\n    padding: 4em;\n    margin-left: auto; }\n    #page-demo .demo-form__aside img,\n    #page-strategy-session .demo-form__aside img {\n      display: block;\n      width: 100%; }\n    #page-demo .demo-form__aside ul,\n    #page-strategy-session .demo-form__aside ul {\n      color: #727a87;\n      font-size: 1.125em;\n      list-style: none;\n      margin: 0;\n      padding: 0; }\n      #page-demo .demo-form__aside ul > li,\n      #page-strategy-session .demo-form__aside ul > li {\n        margin-bottom: 1.5em;\n        padding-left: 1.5em;\n        position: relative; }\n        #page-demo .demo-form__aside ul > li:before,\n        #page-strategy-session .demo-form__aside ul > li:before {\n          color: #4a8bfc;\n          content: '\\f2ba';\n          font-family: 'Ionicons';\n          left: 0;\n          position: absolute;\n          top: 0; }\n    #page-demo .demo-form__aside > p,\n    #page-strategy-session .demo-form__aside > p {\n      color: #707c88;\n      font-size: 0.875em;\n      font-weight: 700;\n      letter-spacing: 0.075em;\n      line-height: 2;\n      margin-bottom: 3em;\n      text-transform: uppercase; }\n    @media (max-width: 1219px) {\n      #page-demo .demo-form__aside,\n      #page-strategy-session .demo-form__aside {\n        padding-right: 0; } }\n    @media (max-width: 991px) {\n      #page-demo .demo-form__aside,\n      #page-strategy-session .demo-form__aside {\n        display: none; } }\n\n#page-identity-vault main {\n  font-family: \"Inter\", \"Inter UI\", Helvetica, Arial, sans-serif;\n  overflow: visible; }\n  #page-identity-vault main h1,\n  #page-identity-vault main h2,\n  #page-identity-vault main h3,\n  #page-identity-vault main h4,\n  #page-identity-vault main .btn {\n    font-family: \"Eina\", \"Helvetica Neue\", Helvetica, sans-serif; }\n\n#page-identity-vault .sub-header .vault-link {\n  font-size: 15px;\n  font-weight: 700;\n  padding-left: 1px;\n  padding-top: 17px;\n  letter-spacing: .03em; }\n  #page-identity-vault .sub-header .vault-link:before {\n    content: '';\n    background: url(\"/img/enterprise/identity-vault/vault-nav-logo.png\") 0 0 no-repeat;\n    background-size: 100%;\n    width: 32px;\n    height: 32px;\n    display: inline-block;\n    margin-right: 9px;\n    vertical-align: -11px; }\n\n#page-identity-vault .sub-header .demo {\n  padding: 19px 1px 18px 15px; }\n  #page-identity-vault .sub-header .demo::after {\n    font-family: 'Ionicons';\n    content: \"\";\n    margin-left: 3px;\n    vertical-align: -1px; }\n\n#page-identity-vault .top {\n  margin-top: -172px;\n  padding-top: 276px;\n  background: #0c1c1c;\n  background: linear-gradient(to right, #0e1e2e 0%, #203e5a 100%);\n  min-height: 972px; }\n  #page-identity-vault .top .container {\n    position: relative; }\n    #page-identity-vault .top .container::after {\n      background: url(\"/img/enterprise/identity-vault/hero-img.png\") 0 0 no-repeat;\n      background-size: 100%;\n      width: 589px;\n      height: 760px;\n      content: '';\n      display: block;\n      position: absolute;\n      right: -82px;\n      top: -72px; }\n  #page-identity-vault .top hgroup {\n    max-width: 540px; }\n  #page-identity-vault .top h1 {\n    color: white;\n    letter-spacing: -.02em; }\n  #page-identity-vault .top h3 {\n    color: #7bbfff;\n    font-size: 35px;\n    letter-spacing: -.016em;\n    line-height: 1.39em;\n    margin-top: 15px;\n    margin-bottom: 9px; }\n  #page-identity-vault .top p {\n    color: #c3cedf;\n    font-size: 18px;\n    letter-spacing: -.02em;\n    margin-bottom: 1px;\n    font-weight: 400;\n    line-height: 1.5em; }\n    #page-identity-vault .top p strong {\n      color: #fff;\n      font-weight: 400; }\n  #page-identity-vault .top .btn {\n    margin-top: 51px;\n    padding: 14px 16px 12px 19px;\n    font-size: 14px;\n    text-transform: uppercase;\n    letter-spacing: .06em;\n    margin-bottom: 80px; }\n    #page-identity-vault .top .btn::after {\n      font-family: 'Ionicons';\n      content: '';\n      font-size: 23px;\n      font-weight: 400;\n      vertical-align: -4px;\n      margin-left: 5px; }\n  @media (max-width: 1219px) {\n    #page-identity-vault .top hgroup {\n      max-width: 420px; } }\n  @media (max-width: 991px) {\n    #page-identity-vault .top hgroup {\n      max-width: 100%; }\n    #page-identity-vault .top h1,\n    #page-identity-vault .top h3 {\n      max-width: 460px; }\n    #page-identity-vault .top .container::after {\n      width: 294px;\n      height: 380px;\n      right: -31px;\n      top: -80px; } }\n  @media (max-width: 767px) {\n    #page-identity-vault .top {\n      padding-top: 400px; }\n      #page-identity-vault .top .container::after {\n        width: 147px;\n        height: 190px;\n        right: calc(50% - 95px);\n        top: -190px; }\n      #page-identity-vault .top hgroup {\n        text-align: center; }\n      #page-identity-vault .top h1,\n      #page-identity-vault .top h3 {\n        max-width: 100%; } }\n\n#page-identity-vault .gandalf {\n  padding-top: 104px;\n  margin-bottom: 80px; }\n  #page-identity-vault .gandalf .split {\n    display: -ms-flexbox;\n    display: flex; }\n    #page-identity-vault .gandalf .split > div {\n      -ms-flex: 0 1 520px;\n          flex: 0 1 520px; }\n  #page-identity-vault .gandalf h2 {\n    margin-top: 7px;\n    font-size: 36px;\n    margin-left: 1px;\n    letter-spacing: -.02em;\n    font-weight: 700;\n    line-height: 1.8em; }\n  #page-identity-vault .gandalf h3 {\n    margin-top: 68px;\n    font-size: 27px;\n    font-weight: 600; }\n  #page-identity-vault .gandalf p {\n    font-size: 19px;\n    margin-top: 24px;\n    margin-left: 1px;\n    letter-spacing: .005em;\n    line-height: 1.92em;\n    color: #51657d; }\n    #page-identity-vault .gandalf p strong {\n      font-weight: 500; }\n  #page-identity-vault .gandalf ul {\n    margin-left: auto;\n    -ms-flex: 0 1 514px;\n        flex: 0 1 514px;\n    margin-top: 34px;\n    padding-left: 0; }\n    @media (max-width: 1219px) {\n      #page-identity-vault .gandalf ul {\n        -ms-flex-preferred-size: 392px;\n            flex-basis: 392px; } }\n    #page-identity-vault .gandalf ul li::before {\n      top: 0; }\n  #page-identity-vault .gandalf li {\n    padding-left: 55px;\n    font-size: 14px;\n    position: relative;\n    list-style: none;\n    letter-spacing: -.022em;\n    line-height: 1.78em;\n    margin-bottom: 36px;\n    color: #51657d; }\n    #page-identity-vault .gandalf li::before {\n      background: url(\"/img/enterprise/identity-vault/lock-checkmark.png\") 0 0 no-repeat;\n      background-size: 32px;\n      width: 32px;\n      height: 32px;\n      position: absolute;\n      left: 0;\n      top: 7px;\n      content: ''; }\n  @media (max-width: 991px) {\n    #page-identity-vault .gandalf .split {\n      display: block; }\n      #page-identity-vault .gandalf .split > div {\n        text-align: center; }\n    #page-identity-vault .gandalf li {\n      top: 0; } }\n  #page-identity-vault .gandalf figure {\n    background: #f3f5f8;\n    border-radius: 14px;\n    padding: 24px 30px;\n    margin-top: 59px;\n    position: relative;\n    min-height: 278px; }\n    #page-identity-vault .gandalf figure::before, #page-identity-vault .gandalf figure::after {\n      background: url(\"/img/enterprise/identity-vault/iv-diagram-states.png\") 0 0 no-repeat;\n      background-size: 100%;\n      width: 1100px;\n      height: 242px;\n      position: absolute;\n      left: 21px;\n      top: 24px;\n      bottom: 0;\n      pointer-events: none;\n      content: '';\n      transition: .2s opacity, .2s transform ease-out; }\n    #page-identity-vault .gandalf figure::after {\n      background-position: 0 100%;\n      opacity: 0;\n      -webkit-transform: scale3d(1.05, 1.05, 1);\n              transform: scale3d(1.05, 1.05, 1); }\n    #page-identity-vault .gandalf figure strong {\n      font-weight: 600;\n      font-size: 15px; }\n    #page-identity-vault .gandalf figure a {\n      background: #eee;\n      border-radius: 10px;\n      height: 18px;\n      width: 28px;\n      display: inline-block;\n      margin-left: 13px;\n      vertical-align: -4px;\n      box-shadow: 0 0 4px inset rgba(0, 0, 0, 0.1);\n      transition: .2s border-color;\n      position: relative;\n      cursor: pointer; }\n      #page-identity-vault .gandalf figure a::before {\n        background: white;\n        width: 16px;\n        height: 16px;\n        content: '';\n        box-shadow: 0 1px 4px rgba(0, 0, 0, 0.1);\n        position: absolute;\n        top: 1px;\n        left: 2px;\n        border-radius: 9px;\n        transition: .2s transform ease; }\n    #page-identity-vault .gandalf figure.active::before {\n      opacity: 0;\n      -webkit-transform: scale3d(1.05, 1.05, 1);\n              transform: scale3d(1.05, 1.05, 1); }\n    #page-identity-vault .gandalf figure.active::after {\n      opacity: 1;\n      -webkit-transform: none;\n              transform: none; }\n    #page-identity-vault .gandalf figure.active a {\n      background-color: #5daffe; }\n      #page-identity-vault .gandalf figure.active a::before {\n        -webkit-transform: translate3d(9px, 0, 0);\n                transform: translate3d(9px, 0, 0); }\n    @media (max-width: 1219px) {\n      #page-identity-vault .gandalf figure {\n        min-height: 244px; }\n        #page-identity-vault .gandalf figure::before, #page-identity-vault .gandalf figure::after {\n          width: 896px;\n          height: 196px; } }\n    @media (max-width: 991px) {\n      #page-identity-vault .gandalf figure {\n        min-height: 194px; }\n        #page-identity-vault .gandalf figure::before, #page-identity-vault .gandalf figure::after {\n          width: 678px;\n          height: 149px; } }\n    @media (max-width: 767px) {\n      #page-identity-vault .gandalf figure {\n        display: none; } }\n\n#page-identity-vault .points {\n  margin-bottom: 100px; }\n  #page-identity-vault .points h2 {\n    letter-spacing: -.02em; }\n  #page-identity-vault .points p {\n    margin-top: 17px;\n    font-weight: 400;\n    font-size: 20px;\n    letter-spacing: -.02em; }\n  #page-identity-vault .points ul {\n    display: -ms-flexbox;\n    display: flex;\n    -ms-flex-wrap: wrap;\n        flex-wrap: wrap;\n    padding: 0;\n    list-style: none;\n    padding-top: 68px;\n    -ms-flex-pack: justify;\n        justify-content: space-between; }\n  #page-identity-vault .points li {\n    -ms-flex: 0 0 320px;\n        flex: 0 0 320px;\n    padding-left: 0;\n    padding-top: 69px;\n    margin-left: 1px;\n    position: relative;\n    margin-bottom: 61px; }\n    @media (max-width: 1219px) {\n      #page-identity-vault .points li {\n        -ms-flex-preferred-size: 256px;\n            flex-basis: 256px; } }\n    #page-identity-vault .points li::before {\n      background: url(\"/img/enterprise/identity-vault/benefits-icons.png\") 0 0 no-repeat;\n      background-size: 48px;\n      width: 48px;\n      height: 48px;\n      content: '';\n      position: absolute;\n      top: 0;\n      left: 0; }\n    #page-identity-vault .points li.protection::before {\n      background-position: 0 -48px; }\n    #page-identity-vault .points li.code::before {\n      background-position: 0 -96px; }\n    #page-identity-vault .points li.backend::before {\n      background-position: 0 -144px; }\n    #page-identity-vault .points li.tokens::before {\n      background-position: 0 -192px; }\n    #page-identity-vault .points li.support::before {\n      background-position: 0 -240px; }\n    #page-identity-vault .points li strong {\n      font-size: 20px;\n      font-weight: 600;\n      font-family: \"Eina\", \"Helvetica Neue\", Helvetica, sans-serif; }\n    #page-identity-vault .points li p {\n      font-size: 16px;\n      margin-top: 15px;\n      font-weight: 400;\n      line-height: 1.8em;\n      letter-spacing: -.01em;\n      color: #51657d; }\n  @media (max-width: 991px) {\n    #page-identity-vault .points hgroup {\n      padding-top: 0; }\n    #page-identity-vault .points li {\n      -ms-flex-preferred-size: 340px;\n          flex-basis: 340px; } }\n  @media (max-width: 767px) {\n    #page-identity-vault .points li {\n      -ms-flex-preferred-size: 100%;\n          flex-basis: 100%;\n      text-align: center; }\n      #page-identity-vault .points li::before {\n        left: calc(50% - 24px); } }\n\n#page-identity-vault .protect,\n#page-identity-vault .integrations {\n  position: relative; }\n  #page-identity-vault .protect::before,\n  #page-identity-vault .integrations::before {\n    background: url(\"/img/enterprise/identity-vault/protection-img.png\") 0 0 no-repeat;\n    background-size: 100%;\n    width: 560px;\n    height: 560px;\n    content: '';\n    position: absolute;\n    top: 0;\n    right: -10px; }\n    @media (max-width: 991px) {\n      #page-identity-vault .protect::before,\n      #page-identity-vault .integrations::before {\n        width: 280px;\n        height: 280px; } }\n  #page-identity-vault .protect hgroup,\n  #page-identity-vault .integrations hgroup {\n    width: calc(50% - 46px);\n    padding-top: 0; }\n    @media (max-width: 1219px) {\n      #page-identity-vault .protect hgroup,\n      #page-identity-vault .integrations hgroup {\n        width: calc(50% - 66px);\n        padding-bottom: 0; }\n        #page-identity-vault .protect hgroup h3,\n        #page-identity-vault .integrations hgroup h3 {\n          padding-top: 40px; } }\n    @media (max-width: 991px) {\n      #page-identity-vault .protect hgroup,\n      #page-identity-vault .integrations hgroup {\n        width: 460px; } }\n  #page-identity-vault .protect h3,\n  #page-identity-vault .integrations h3 {\n    padding-top: 115px;\n    font-weight: 600;\n    font-size: 28px;\n    letter-spacing: -.02em;\n    margin-bottom: 24px; }\n  #page-identity-vault .protect p,\n  #page-identity-vault .integrations p {\n    color: #51657d;\n    font-weight: 400;\n    letter-spacing: -.02em;\n    line-height: 1.8em; }\n    #page-identity-vault .protect p.lg,\n    #page-identity-vault .integrations p.lg {\n      font-size: 19px;\n      letter-spacing: .004em;\n      line-height: 1.9em;\n      font-weight: 400;\n      margin-bottom: 17px; }\n  #page-identity-vault .protect ul,\n  #page-identity-vault .integrations ul {\n    padding: 0;\n    display: -ms-flexbox;\n    display: flex;\n    -ms-flex-wrap: wrap;\n        flex-wrap: wrap;\n    list-style: none;\n    margin-top: 39px; }\n    @media (max-width: 1219px) {\n      #page-identity-vault .protect ul,\n      #page-identity-vault .integrations ul {\n        display: block; } }\n  #page-identity-vault .protect li,\n  #page-identity-vault .integrations li {\n    -ms-flex: 0 0 50%;\n        flex: 0 0 50%;\n    padding-left: 31px;\n    font-size: 16px;\n    color: #3880ff;\n    position: relative;\n    margin-bottom: 22px; }\n    #page-identity-vault .protect li::before,\n    #page-identity-vault .integrations li::before {\n      background: url(\"/img/enterprise/identity-vault/checkmark.png\") 0 0 no-repeat;\n      background-size: 20px;\n      width: 20px;\n      height: 20px;\n      content: '';\n      position: absolute;\n      top: 0;\n      left: 1px; }\n  @media (max-width: 767px) {\n    #page-identity-vault .protect,\n    #page-identity-vault .integrations {\n      padding-top: 200px; }\n      #page-identity-vault .protect::before,\n      #page-identity-vault .integrations::before {\n        top: -30px;\n        right: calc(50% - 140px); }\n      #page-identity-vault .protect hgroup,\n      #page-identity-vault .integrations hgroup {\n        width: 100%;\n        text-align: center; }\n      #page-identity-vault .protect li,\n      #page-identity-vault .integrations li {\n        -ms-flex-preferred-size: 100%;\n            flex-basis: 100%; } }\n\n#page-identity-vault .integrations {\n  padding-bottom: 99px; }\n  #page-identity-vault .integrations::before {\n    background: url(\"/img/enterprise/identity-vault/integration-img.png\") 0 0 no-repeat;\n    background-size: 100%;\n    width: 560px;\n    height: 560px;\n    top: 101px;\n    left: -11px;\n    right: auto; }\n  #page-identity-vault .integrations hgroup {\n    padding-top: 56px;\n    width: calc(50% - 59px); }\n    @media (max-width: 1219px) {\n      #page-identity-vault .integrations hgroup {\n        padding-top: 0px;\n        width: calc(50% - 100px); } }\n  @media (max-width: 991px) {\n    #page-identity-vault .integrations::before {\n      width: 280px;\n      height: 280px; }\n    #page-identity-vault .integrations hgroup {\n      width: 440px; }\n    #page-identity-vault .integrations h3 {\n      padding-top: 50px; } }\n  @media (max-width: 767px) {\n    #page-identity-vault .integrations {\n      padding-top: 330px; }\n      #page-identity-vault .integrations::before {\n        top: 80px;\n        left: calc(50% - 140px); }\n      #page-identity-vault .integrations hgroup {\n        width: 100%;\n        text-align: center; }\n      #page-identity-vault .integrations h3 {\n        padding-top: 50px; }\n      #page-identity-vault .integrations li {\n        text-align: left; } }\n\n#page-identity-vault .what-you-got {\n  background: #101928 url(\"/img/enterprise/identity-vault/bg-panes.png\") 50% 0 no-repeat;\n  background-size: 1000px; }\n  #page-identity-vault .what-you-got .container {\n    position: relative;\n    padding-bottom: 150px; }\n  #page-identity-vault .what-you-got hgroup {\n    padding-top: 178px;\n    max-width: 712px; }\n  #page-identity-vault .what-you-got h3 {\n    color: white;\n    font-size: 36px;\n    font-weight: 700;\n    letter-spacing: -.02em; }\n  #page-identity-vault .what-you-got p {\n    color: #b6c3d6;\n    font-weight: 400;\n    margin-top: 17px;\n    line-height: 1.8em;\n    font-size: 20px;\n    letter-spacing: -.02em; }\n    #page-identity-vault .what-you-got p strong {\n      color: white;\n      font-weight: 400; }\n  #page-identity-vault .what-you-got ul {\n    padding: 0;\n    display: -ms-flexbox;\n    display: flex;\n    -ms-flex-wrap: wrap;\n        flex-wrap: wrap;\n    list-style: none;\n    margin-top: 69px;\n    -ms-flex-pack: justify;\n        justify-content: space-between; }\n  #page-identity-vault .what-you-got li {\n    -ms-flex: 0 0 518px;\n        flex: 0 0 518px;\n    padding-left: 56px;\n    font-size: 16px;\n    color: white;\n    position: relative;\n    margin-bottom: 45px;\n    padding-top: 5px;\n    letter-spacing: -.02em; }\n    @media (max-width: 1219px) {\n      #page-identity-vault .what-you-got li {\n        -ms-flex-preferred-size: calc(50% - 50px);\n            flex-basis: calc(50% - 50px); } }\n    #page-identity-vault .what-you-got li::before {\n      background: url(\"/img/enterprise/identity-vault/lock-checkmark.png\") 0 100% no-repeat;\n      background-size: 32px;\n      width: 32px;\n      height: 32px;\n      content: '';\n      position: absolute;\n      top: 0;\n      left: 0; }\n  @media (max-width: 991px) {\n    #page-identity-vault .what-you-got hgroup {\n      padding-top: 92px;\n      max-width: 712px; } }\n  @media (max-width: 767px) {\n    #page-identity-vault .what-you-got {\n      background-size: cover; }\n      #page-identity-vault .what-you-got li {\n        -ms-flex-preferred-size: 100%;\n            flex-basis: 100%; } }\n\n#page-identity-vault .demo {\n  padding-top: 97px;\n  padding-bottom: 110px; }\n  #page-identity-vault .demo hgroup strong {\n    text-transform: uppercase;\n    letter-spacing: .06em;\n    font-family: \"Eina\", \"Helvetica Neue\", Helvetica, sans-serif; }\n  #page-identity-vault .demo hgroup h2 {\n    margin-top: 39px;\n    letter-spacing: -.01em; }\n  #page-identity-vault .demo hgroup p {\n    margin-top: 16px;\n    font-weight: 400;\n    font-size: 20px;\n    letter-spacing: -.02em; }\n    #page-identity-vault .demo hgroup p strong {\n      font-weight: 400;\n      text-transform: none;\n      letter-spacing: inherit; }\n  #page-identity-vault .demo .form {\n    margin-top: 50px;\n    max-width: 930px;\n    margin-left: auto;\n    margin-right: auto; }\n  @media (max-width: 991px) {\n    #page-identity-vault .demo {\n      padding-top: 0;\n      padding-bottom: 40px; } }\n  @media (max-width: 767px) {\n    #page-identity-vault .demo .form textarea.hs-input {\n      width: calc(100% - 18px) !important; } }\n\n#page-identity-vault .watch {\n  background: #f6f8fb; }\n  #page-identity-vault .watch .card {\n    position: absolute;\n    left: 85px;\n    top: 68px; }\n  #page-identity-vault .watch img {\n    width: 460px; }\n  #page-identity-vault .watch hgroup {\n    padding-top: 119px;\n    width: calc(50% - 50px);\n    padding-bottom: 140px; }\n    @media (max-width: 1219px) {\n      #page-identity-vault .watch hgroup {\n        padding-top: 100px;\n        width: calc(50% - 100px);\n        padding-bottom: 120px; }\n        #page-identity-vault .watch hgroup p {\n          padding-right: 0; } }\n  #page-identity-vault .watch h3 {\n    font-weight: 600;\n    letter-spacing: -.02em; }\n  #page-identity-vault .watch p {\n    margin-top: 24px;\n    font-weight: 400;\n    font-size: 18px;\n    padding-right: 80px;\n    display: block;\n    margin-bottom: 22px;\n    letter-spacing: -.02em; }\n  #page-identity-vault .watch .btn {\n    padding: 14px 16px 10px;\n    font-size: 14px; }\n    #page-identity-vault .watch .btn img {\n      width: 16px;\n      margin-right: 5px; }\n  @media (max-width: 1219px) {\n    #page-identity-vault .watch .card {\n      left: 0; } }\n  @media (max-width: 991px) {\n    #page-identity-vault .watch img {\n      width: 230px; }\n    #page-identity-vault .watch hgroup {\n      padding-top: 50px;\n      width: calc(100% - 260px);\n      padding-bottom: 60px; } }\n  @media (max-width: 767px) {\n    #page-identity-vault .watch .container {\n      padding-top: 200px; }\n    #page-identity-vault .watch .card {\n      left: calc(50% - 115px); }\n    #page-identity-vault .watch hgroup {\n      text-align: center;\n      width: 100%; } }\n\n#page-enterprise-training .banner {\n  padding-top: 198px;\n  padding-bottom: 90px;\n  font-family: \"Eina\", \"Helvetica Neue\", Helvetica, sans-serif; }\n  #page-enterprise-training .banner h1 {\n    font-size: 48px;\n    font-weight: 600;\n    letter-spacing: -.018em; }\n  #page-enterprise-training .banner p {\n    margin-top: 15px;\n    font-size: 20px;\n    font-weight: 600;\n    letter-spacing: -.03em; }\n\n#page-enterprise-training main {\n  max-width: 630px; }\n  #page-enterprise-training main h2 {\n    font-size: 29px;\n    font-weight: 700;\n    margin-bottom: 18px;\n    letter-spacing: -.04em;\n    font-family: \"Eina\", \"Helvetica Neue\", Helvetica, sans-serif; }\n  #page-enterprise-training main h3 {\n    margin-top: 39px;\n    margin-bottom: 21px;\n    font-size: 19px;\n    font-weight: 700;\n    font-family: \"Eina\", \"Helvetica Neue\", Helvetica, sans-serif;\n    letter-spacing: -.005em; }\n  #page-enterprise-training main p {\n    font-size: 17px;\n    font-weight: 500;\n    letter-spacing: .02em;\n    line-height: 1.9em;\n    margin-bottom: 32px; }\n    #page-enterprise-training main p + ul {\n      margin-top: -16px; }\n  #page-enterprise-training main ul {\n    padding-left: 26px; }\n  #page-enterprise-training main li {\n    font-size: 18px;\n    font-weight: 500;\n    letter-spacing: -.005em;\n    line-height: 1.8em; }\n\n#page-enterprise-training aside {\n  max-width: 520px;\n  margin-top: 46px;\n  margin-bottom: 78px;\n  text-align: center; }\n  #page-enterprise-training aside h3 {\n    color: #3880ff;\n    font-size: 28px;\n    font-weight: 700;\n    font-family: \"Eina\", \"Helvetica Neue\", Helvetica, sans-serif;\n    letter-spacing: -.03em; }\n    #page-enterprise-training aside h3 i {\n      color: #93a2bc;\n      font-style: normal; }\n  #page-enterprise-training aside .card {\n    padding: 30px 30px 1px;\n    width: 100%;\n    min-height: 300px;\n    background: white;\n    border-radius: 8px;\n    margin: 32px auto;\n    box-shadow: 0 6px 20px rgba(0, 0, 0, 0.2); }\n\n#page-getting-started {\n  font-family: \"Eina\", \"Helvetica Neue\", Helvetica, sans-serif; }\n  #page-getting-started .cta.gradient {\n    background-image: linear-gradient(90deg, #3880ff 15%, #67a7ff 100%); }\n  #page-getting-started .cta hgroup {\n    padding-top: 62px;\n    padding-bottom: 0;\n    max-width: 100%; }\n  #page-getting-started .cta h1,\n  #page-getting-started .cta h4 {\n    text-align: left;\n    max-width: 540px; }\n    @media (max-width: 767px) {\n      #page-getting-started .cta h1,\n      #page-getting-started .cta h4 {\n        text-align: center;\n        margin-left: auto;\n        margin-right: auto; } }\n  #page-getting-started .cta h1 {\n    font-size: 36px;\n    font-weight: 700; }\n  #page-getting-started .cta h4 {\n    font-size: 20px;\n    line-height: 32px;\n    color: #E3E9F4;\n    margin-bottom: 60px; }\n  @media (max-width: 767px) {\n    #page-getting-started .cta hgroup {\n      padding-top: 42px; }\n    #page-getting-started .cta h4 {\n      margin-bottom: 30px; } }\n  #page-getting-started .crash-course {\n    float: right;\n    cursor: pointer;\n    margin-top: -30px;\n    margin-left: 30px;\n    color: white;\n    text-decoration: none;\n    transition: 0.2s -webkit-transform cubic-bezier(0.2, 0.78, 0.66, 1.73);\n    transition: 0.2s transform cubic-bezier(0.2, 0.78, 0.66, 1.73);\n    transition: 0.2s transform cubic-bezier(0.2, 0.78, 0.66, 1.73), 0.2s -webkit-transform cubic-bezier(0.2, 0.78, 0.66, 1.73); }\n    #page-getting-started .crash-course img {\n      max-width: 358px; }\n    #page-getting-started .crash-course h3 {\n      text-transform: uppercase;\n      font-size: 11px;\n      font-weight: 700;\n      letter-spacing: 0.08em;\n      color: #fff;\n      margin: 0;\n      -webkit-transform: translate(-8px, -91px) rotate(3.7deg);\n              transform: translate(-8px, -91px) rotate(3.7deg); }\n    #page-getting-started .crash-course:hover {\n      -webkit-transform: scale(1.02, 1.02);\n              transform: scale(1.02, 1.02); }\n    @media (max-width: 992px) {\n      #page-getting-started .crash-course {\n        margin-top: 0; }\n        #page-getting-started .crash-course img {\n          max-width: 300px; } }\n    @media (max-width: 767px) {\n      #page-getting-started .crash-course {\n        float: none;\n        margin-left: 0; } }\n  #page-getting-started .tab-content {\n    padding: 100px 0 0; }\n    @media (max-width: 767px) {\n      #page-getting-started .tab-content {\n        padding: 80px 0 0; } }\n    #page-getting-started .tab-content .container:last-child {\n      border-bottom: 1px solid #edf2f7;\n      padding-bottom: 120px; }\n      @media (max-width: 991px) {\n        #page-getting-started .tab-content .container:last-child {\n          padding-bottom: 70px; } }\n    #page-getting-started .tab-content .logo {\n      width: 158px;\n      margin-bottom: 24px; }\n    #page-getting-started .tab-content hgroup {\n      margin: 0 auto;\n      max-width: 580px;\n      text-align: center;\n      padding-bottom: 60px; }\n      #page-getting-started .tab-content hgroup .btn {\n        margin-top: 32px; }\n    #page-getting-started .tab-content h1 {\n      font-size: 24px;\n      font-weight: 700;\n      letter-spacing: -0.02em; }\n    #page-getting-started .tab-content h2 {\n      font-size: 18px;\n      line-height: 28px;\n      letter-spacing: -0.012em;\n      margin-top: 14px; }\n    #page-getting-started .tab-content h3 {\n      font-size: 20px;\n      font-weight: 600;\n      letter-spacing: -0.02em; }\n      #page-getting-started .tab-content h3.thin {\n        font-weight: 400; }\n    #page-getting-started .tab-content h4 {\n      font-size: 16px;\n      line-height: 22px;\n      color: #0F1620;\n      text-transform: uppercase;\n      letter-spacing: 0.1em;\n      font-weight: 700; }\n    #page-getting-started .tab-content p {\n      font-family: \"Inter\", \"Inter UI\", Helvetica, Arial, sans-serif;\n      font-size: 15px;\n      line-height: 28px;\n      letter-spacing: -0.01em; }\n    #page-getting-started .tab-content code {\n      font-size: 15px;\n      color: #E05C7B;\n      background: none;\n      font-weight: 500; }\n    #page-getting-started .tab-content pre {\n      border: 0;\n      padding: 0;\n      margin: 0;\n      background-color: #F5F7FA;\n      border-radius: 6px; }\n      #page-getting-started .tab-content pre code {\n        color: #272A2F;\n        padding: 16px 24px 20px;\n        margin-top: 4px; }\n    #page-getting-started .tab-content .img {\n      width: 100%; }\n    #page-getting-started .tab-content ol {\n      margin-left: 0;\n      padding: 0;\n      list-style-type: none; }\n    #page-getting-started .tab-content ol li {\n      counter-increment: step-counter;\n      display: -ms-flexbox;\n      display: flex;\n      position: relative; }\n      #page-getting-started .tab-content ol li h1 {\n        margin-top: 0; }\n      #page-getting-started .tab-content ol li + li,\n      #page-getting-started .tab-content ol li + .supercharge {\n        margin-top: 140px; }\n        @media (max-width: 767px) {\n          #page-getting-started .tab-content ol li + li,\n          #page-getting-started .tab-content ol li + .supercharge {\n            margin-top: 60px; } }\n      #page-getting-started .tab-content ol li::before {\n        content: counter(step-counter);\n        margin-right: 14px;\n        display: -ms-inline-flexbox;\n        display: inline-flex;\n        -ms-flex-pack: center;\n            justify-content: center;\n        -ms-flex-align: center;\n            align-items: center;\n        width: 25px;\n        -ms-flex: 0 0 25px;\n            flex: 0 0 25px;\n        height: 25px;\n        font-size: 14px;\n        font-weight: 600;\n        background-color: #3880FF;\n        color: #fff;\n        border-radius: 100px; }\n      #page-getting-started .tab-content ol li > div {\n        -ms-flex: 1;\n            flex: 1; }\n      @media (max-width: 767px) {\n        #page-getting-started .tab-content ol li {\n          -ms-flex-direction: column;\n              flex-direction: column;\n          padding-top: 40px; }\n          #page-getting-started .tab-content ol li::before {\n            margin-bottom: 18px;\n            margin-right: 0;\n            position: absolute;\n            left: 50%;\n            top: 0;\n            -webkit-transform: translateX(-50%);\n                    transform: translateX(-50%); }\n          #page-getting-started .tab-content ol li h1 {\n            text-align: center; }\n          #page-getting-started .tab-content ol li + .supercharge li::before {\n            display: none; } }\n    #page-getting-started .tab-content .content-row {\n      display: -ms-flexbox;\n      display: flex;\n      -ms-flex-pack: justify;\n          justify-content: space-between;\n      margin-top: 24px;\n      margin-left: -24px;\n      margin-right: -24px; }\n      #page-getting-started .tab-content .content-row + .content-row {\n        margin-top: 80px; }\n        @media (max-width: 767px) {\n          #page-getting-started .tab-content .content-row + .content-row {\n            margin-top: 24px; } }\n      #page-getting-started .tab-content .content-row .col {\n        padding-left: 24px;\n        padding-right: 24px; }\n      #page-getting-started .tab-content .content-row .col--half {\n        -ms-flex: 0 0 50%;\n            flex: 0 0 50%; }\n      #page-getting-started .tab-content .content-row .col--third {\n        -ms-flex: 0 0 33%;\n            flex: 0 0 33%; }\n      #page-getting-started .tab-content .content-row .col--full {\n        -ms-flex: 0 0 100%;\n            flex: 0 0 100%;\n        margin-left: 0;\n        margin-right: 0; }\n      #page-getting-started .tab-content .content-row .col--centered {\n        text-align: center; }\n        #page-getting-started .tab-content .content-row .col--centered code {\n          font-size: 14px; }\n      @media (max-width: 768px) {\n        #page-getting-started .tab-content .content-row {\n          margin-left: 0;\n          margin-right: 0;\n          -ms-flex-direction: column;\n              flex-direction: column; }\n          #page-getting-started .tab-content .content-row .col {\n            -ms-flex: 0 0 100%;\n                flex: 0 0 100%;\n            margin: 0; }\n          #page-getting-started .tab-content .content-row .col + .col {\n            margin-top: 24px; } }\n    #page-getting-started .tab-content .form-row {\n      display: -ms-flexbox;\n      display: flex;\n      -ms-flex-pack: justify;\n          justify-content: space-between; }\n      #page-getting-started .tab-content .form-row .form-wrapper {\n        -ms-flex: 0 0 640px;\n            flex: 0 0 640px; }\n      @media (max-width: 991px) {\n        #page-getting-started .tab-content .form-row {\n          display: block; } }\n    #page-getting-started .tab-content .form {\n      padding: 64px;\n      background: #FFFFFF;\n      box-shadow: 0 10px 20px 0 rgba(0, 13, 36, 0.16), 0 2px 8px 0 rgba(0, 13, 36, 0.08);\n      border-radius: 16px; }\n      #page-getting-started .tab-content .form h1 {\n        margin-top: 0; }\n      #page-getting-started .tab-content .form h2 {\n        margin-top: 10px;\n        margin-bottom: 42px; }\n      #page-getting-started .tab-content .form label {\n        font-size: 13px;\n        color: #3B434D;\n        letter-spacing: -0.015em;\n        font-weight: 600;\n        margin-bottom: 3px; }\n      #page-getting-started .tab-content .form input[type=\"text\"],\n      #page-getting-started .tab-content .form input[type=\"password\"] {\n        transition: border 0.2s;\n        display: block;\n        width: 100%;\n        background: #FFFFFF;\n        border: 1px solid #C3CDDF;\n        border-radius: 6px;\n        padding: 11px 16px; }\n        #page-getting-started .tab-content .form input[type=\"text\"]:focus,\n        #page-getting-started .tab-content .form input[type=\"password\"]:focus {\n          outline: none !important;\n          border: 1px solid #3880ff; }\n      #page-getting-started .tab-content .form .error input[type=\"text\"],\n      #page-getting-started .tab-content .form .error input[type=\"password\"] {\n        border-color: #f45454; }\n      #page-getting-started .tab-content .form .checkbox-label {\n        color: #727A87;\n        font-size: 11px;\n        font-weight: 600;\n        margin-left: 4px; }\n      #page-getting-started .tab-content .form .form-group {\n        margin-bottom: 20px; }\n      #page-getting-started .tab-content .form .form-message {\n        color: #f45454;\n        font-weight: 600; }\n        #page-getting-started .tab-content .form .form-message--small {\n          font-size: 11px;\n          line-height: 16px;\n          margin-top: 6px; }\n      #page-getting-started .tab-content .form .btn {\n        display: block;\n        width: 100%; }\n      #page-getting-started .tab-content .form .disclaimer {\n        display: block;\n        text-align: center;\n        font-size: 11px;\n        color: #a0a9b7;\n        font-weight: 600; }\n      #page-getting-started .tab-content .form .well {\n        display: -ms-flexbox;\n        display: flex;\n        -ms-flex-align: center;\n            align-items: center;\n        -ms-flex-pack: center;\n            justify-content: center;\n        padding: 12px;\n        width: 100%;\n        border: 1px solid #E1E5ED;\n        border-radius: 6px;\n        margin-top: 16px;\n        color: #3B424D;\n        font-size: 14px;\n        font-weight: 600; }\n      #page-getting-started .tab-content .form .text-link {\n        text-decoration: underline;\n        margin-left: 8px; }\n      @media (max-width: 480px) {\n        #page-getting-started .tab-content .form {\n          padding: 36px 28px; } }\n    #page-getting-started .tab-content .errorlist {\n      display: none;\n      color: #f45454;\n      font-size: 14px;\n      line-height: 20px;\n      font-weight: 600;\n      margin-bottom: 28px; }\n      #page-getting-started .tab-content .errorlist.error {\n        display: block; }\n    #page-getting-started .tab-content .benefits {\n      max-width: 390px;\n      margin-left: 48px;\n      margin-top: 76px; }\n      #page-getting-started .tab-content .benefits > p {\n        font-size: 16px;\n        line-height: 28px;\n        color: #424C5A;\n        margin-top: 18px; }\n        #page-getting-started .tab-content .benefits > p b {\n          font-weight: 500;\n          color: #424C5A; }\n      #page-getting-started .tab-content .benefits ul {\n        list-style-type: none;\n        margin: 60px 0 0;\n        padding: 0; }\n      #page-getting-started .tab-content .benefits h5 {\n        color: #161A1F;\n        font-size: 16px;\n        line-height: 22px;\n        font-weight: 600;\n        margin-bottom: 4px; }\n      #page-getting-started .tab-content .benefits li {\n        position: relative;\n        padding-left: 42px; }\n        #page-getting-started .tab-content .benefits li p {\n          font-size: 14px;\n          line-height: 24px;\n          color: #545C6A; }\n        #page-getting-started .tab-content .benefits li::before {\n          display: -ms-flexbox;\n          display: flex;\n          -ms-flex-align: center;\n              align-items: center;\n          -ms-flex-pack: center;\n              justify-content: center;\n          width: 24px;\n          height: 24px;\n          font-family: Ionicons;\n          content: '\\f2bc';\n          color: #D0E6FF;\n          background: #67A2FF;\n          border-radius: 100px;\n          font-size: 1.2em;\n          margin-left: 5px;\n          font-weight: 400;\n          line-height: 1em;\n          position: relative;\n          position: absolute;\n          top: 0;\n          left: 0; }\n      #page-getting-started .tab-content .benefits li + li {\n        margin-top: 40px; }\n      @media (max-width: 1219px) {\n        #page-getting-started .tab-content .benefits {\n          margin-top: 0; }\n          #page-getting-started .tab-content .benefits ul {\n            margin-top: 40px; } }\n      @media (max-width: 991px) {\n        #page-getting-started .tab-content .benefits {\n          margin-top: 100px;\n          margin-left: 0;\n          max-width: 590px; } }\n    #page-getting-started .tab-content .sign-up-logos {\n      padding: 100px 0 40px; }\n      #page-getting-started .tab-content .sign-up-logos .sign-up-logos__content {\n        display: -ms-flexbox;\n        display: flex;\n        -ms-flex-align: center;\n            align-items: center;\n        -ms-flex-pack: justify;\n            justify-content: space-between;\n        margin-top: 34px; }\n      #page-getting-started .tab-content .sign-up-logos .sign-up-logos__content > div {\n        background-image: url(\"/img/getting-started/getting-started-signup-logo-sprite.png\");\n        background-repeat: no-repeat;\n        background-size: 128px 186px; }\n        #page-getting-started .tab-content .sign-up-logos .sign-up-logos__content > div.target {\n          width: 22px;\n          height: 22px;\n          background-position: 0 0; }\n        #page-getting-started .tab-content .sign-up-logos .sign-up-logos__content > div.verizon {\n          width: 79px;\n          height: 18px;\n          background-position: 0 -23px; }\n        #page-getting-started .tab-content .sign-up-logos .sign-up-logos__content > div.amtrak {\n          width: 52px;\n          height: 22px;\n          background-position: 0 -42px; }\n        #page-getting-started .tab-content .sign-up-logos .sign-up-logos__content > div.marketwatch {\n          width: 129px;\n          height: 18px;\n          background-position: 0 -65px; }\n        #page-getting-started .tab-content .sign-up-logos .sign-up-logos__content > div.usarmy {\n          width: 52px;\n          height: 18px;\n          background-position: 0 -84px; }\n        #page-getting-started .tab-content .sign-up-logos .sign-up-logos__content > div.ge {\n          width: 22px;\n          height: 22px;\n          background-position: 0 -103px; }\n        #page-getting-started .tab-content .sign-up-logos .sign-up-logos__content > div.comcast {\n          width: 80px;\n          height: 22px;\n          background-position: 0 -126px; }\n        #page-getting-started .tab-content .sign-up-logos .sign-up-logos__content > div.ea {\n          width: 37px;\n          height: 18px;\n          background-position: 0 -149px; }\n        #page-getting-started .tab-content .sign-up-logos .sign-up-logos__content > div.ibm {\n          width: 48px;\n          height: 18px;\n          background-position: 0 -168px; }\n      @media (max-width: 768px) {\n        #page-getting-started .tab-content .sign-up-logos .sign-up-logos__content {\n          -ms-flex-pack: center;\n              justify-content: center;\n          max-width: 590px;\n          margin: 34px auto 0;\n          -ms-flex-wrap: wrap;\n              flex-wrap: wrap; }\n        #page-getting-started .tab-content .sign-up-logos .sign-up-logos__content > div {\n          margin: 0 20px 30px;\n          -ms-flex: 0 0 auto;\n              flex: 0 0 auto; } }\n    #page-getting-started .tab-content .content-tip {\n      transition: border 0.2s;\n      color: #8594AF;\n      font-weight: 600;\n      font-size: 13px;\n      border: 1px solid #E1E5ED;\n      padding: 12px 14px;\n      border-radius: 6px;\n      margin-top: 8px;\n      display: -ms-inline-flexbox;\n      display: inline-flex;\n      -ms-flex-align: center;\n          align-items: center; }\n      #page-getting-started .tab-content .content-tip:hover {\n        border-color: #c5cfe2; }\n      #page-getting-started .tab-content .content-tip::before {\n        content: '?';\n        background: #ABB8CE;\n        padding: 0 2px;\n        border-radius: 4px;\n        color: #fff;\n        font-size: 11px;\n        display: inline-block;\n        width: 14px;\n        -ms-flex: 0 0 14px;\n            flex: 0 0 14px;\n        height: 14px;\n        line-height: 1;\n        display: -ms-flexbox;\n        display: flex;\n        -ms-flex-align: center;\n            align-items: center;\n        -ms-flex-pack: center;\n            justify-content: center;\n        margin-right: 12px; }\n      #page-getting-started .tab-content .content-tip::after {\n        font-family: Ionicons;\n        content: '\\f3d1';\n        font-size: 18px;\n        margin-left: 8px;\n        font-weight: 400;\n        line-height: 1;\n        display: inline-block;\n        -webkit-transform: translateY(-1px);\n                transform: translateY(-1px);\n        transition: .3s transform;\n        -ms-flex: 0 0 6px;\n            flex: 0 0 6px; }\n      #page-getting-started .tab-content .content-tip:hover::after {\n        -webkit-transform: translate(2px, -1px);\n                transform: translate(2px, -1px); }\n    #page-getting-started .tab-content .supercharge {\n      background-image: linear-gradient(-90deg, #7245D9 0%, #4C5BE3 52%, #2472EF 100%);\n      box-shadow: 0 10px 20px 0 rgba(0, 13, 36, 0.16), 0 2px 8px 0 rgba(0, 13, 36, 0.08);\n      border-radius: 11px;\n      padding: 40px 40px 0;\n      color: #fff;\n      position: relative; }\n      #page-getting-started .tab-content .supercharge::before {\n        content: '';\n        display: block;\n        position: absolute;\n        top: -34px;\n        left: 50%;\n        -webkit-transform: translateX(-50%);\n                transform: translateX(-50%);\n        width: 68px;\n        height: 68px;\n        background: url(\"/img/getting-started/supercharge-logo.png\") no-repeat;\n        background-size: 100%; }\n      #page-getting-started .tab-content .supercharge li::before {\n        background: #fff;\n        color: #3880FF; }\n      #page-getting-started .tab-content .supercharge pre {\n        background: rgba(0, 0, 0, 0.18); }\n        #page-getting-started .tab-content .supercharge pre code {\n          color: #fff; }\n      #page-getting-started .tab-content .supercharge .img {\n        margin-top: 48px; }\n      @media (max-width: 767px) {\n        #page-getting-started .tab-content .supercharge {\n          padding: 20px 20px 0; }\n          #page-getting-started .tab-content .supercharge .img {\n            margin-top: 20px; } }\n    #page-getting-started .tab-content .learn-more {\n      padding: 50px 0 60px;\n      text-align: center; }\n      #page-getting-started .tab-content .learn-more p {\n        margin: 0; }\n    #page-getting-started .tab-content .next-steps {\n      border-top: 1px solid #EDEDED; }\n      #page-getting-started .tab-content .next-steps hgroup {\n        max-width: 900px;\n        padding-top: 100px;\n        padding-bottom: 0; }\n      #page-getting-started .tab-content .next-steps .content-row {\n        margin-top: 44px;\n        margin-left: -12px;\n        margin-right: -12px; }\n        #page-getting-started .tab-content .next-steps .content-row .col {\n          margin-left: 12px;\n          margin-right: 12px; }\n        #page-getting-started .tab-content .next-steps .content-row .content-card {\n          position: relative;\n          padding-right: 100px;\n          overflow: hidden; }\n          #page-getting-started .tab-content .next-steps .content-row .content-card::after {\n            background-repeat: no-repeat;\n            background-position: 0 0;\n            background-size: 80px;\n            width: 80px;\n            height: 144px;\n            content: '';\n            display: block;\n            position: absolute;\n            right: 0;\n            top: calc(50% - 72px); }\n          #page-getting-started .tab-content .next-steps .content-row .content-card:nth-child(1)::after {\n            background-image: url(/img/getting-started/ionic-native-card.png); }\n          #page-getting-started .tab-content .next-steps .content-row .content-card:nth-child(2)::after {\n            background-image: url(/img/getting-started/components-card.png); }\n          #page-getting-started .tab-content .next-steps .content-row .content-card:nth-child(3)::after {\n            background-image: url(/img/getting-started/theming-card.png); }\n      @media (max-width: 991px) {\n        #page-getting-started .tab-content .next-steps hgroup {\n          padding-top: 42px; } }\n      @media (max-width: 1219px) {\n        #page-getting-started .tab-content .next-steps .content-row {\n          -ms-flex-direction: column;\n              flex-direction: column; }\n          #page-getting-started .tab-content .next-steps .content-row .col {\n            -ms-flex: 0 0 100%;\n                flex: 0 0 100%;\n            margin: 12px 12px 0; } }\n    #page-getting-started .tab-content .content-card {\n      transition: box-shadow 0.3s;\n      background: #FFFFFF;\n      box-shadow: 0 8px 16px 0 rgba(0, 0, 0, 0.1), 0 2px 4px 0 rgba(0, 0, 0, 0.08);\n      border-radius: 8px;\n      padding: 16px 92px 16px 32px; }\n      #page-getting-started .tab-content .content-card h3 {\n        color: #0F1620; }\n      #page-getting-started .tab-content .content-card p {\n        color: #545C6A; }\n      #page-getting-started .tab-content .content-card:hover {\n        box-shadow: 0 5px 10px 0 rgba(0, 13, 36, 0.08), 0 2px 8px 0 rgba(0, 13, 36, 0.08); }\n  #page-getting-started .btn {\n    text-transform: uppercase;\n    font-size: 13px;\n    line-height: 1;\n    font-weight: 700;\n    letter-spacing: 0.08em;\n    border-radius: 6px;\n    padding: 20px 22px;\n    display: -ms-inline-flexbox;\n    display: inline-flex;\n    -ms-flex-align: center;\n        align-items: center; }\n    #page-getting-started .btn i {\n      transition: -webkit-transform 0.2s;\n      transition: transform 0.2s;\n      transition: transform 0.2s, -webkit-transform 0.2s;\n      margin-left: 10px;\n      font-size: 18px; }\n    #page-getting-started .btn:hover i {\n      -webkit-transform: translate(2px, 0);\n              transform: translate(2px, 0); }\n  #page-getting-started .screenshot-group {\n    position: relative; }\n    #page-getting-started .screenshot-group img {\n      max-width: 100%; }\n    #page-getting-started .screenshot-group img:not(:first-child) {\n      position: absolute;\n      top: 0;\n      left: 0;\n      -webkit-animation: 10s crossFadeInOut infinite;\n              animation: 10s crossFadeInOut infinite; }\n\n#page-go-pwa-architects-guide,\n#page-go-why-hybrid {\n  font-family: \"Inter\", \"Inter UI\", Helvetica, Arial, sans-serif; }\n  #page-go-pwa-architects-guide h1,\n  #page-go-pwa-architects-guide h2,\n  #page-go-pwa-architects-guide h3,\n  #page-go-why-hybrid h1,\n  #page-go-why-hybrid h2,\n  #page-go-why-hybrid h3 {\n    font-family: \"Eina\", \"Helvetica Neue\", Helvetica, sans-serif; }\n  #page-go-pwa-architects-guide .banner,\n  #page-go-why-hybrid .banner {\n    background-color: #f6f8fc;\n    border-bottom: 1px solid #e5e7eb;\n    margin-top: -138px;\n    padding-top: 78px; }\n    #page-go-pwa-architects-guide .banner svg,\n    #page-go-why-hybrid .banner svg {\n      fill: #4f6384; }\n    #page-go-pwa-architects-guide .banner hgroup,\n    #page-go-why-hybrid .banner hgroup {\n      display: -ms-flexbox;\n      display: flex;\n      -ms-flex-direction: column;\n          flex-direction: column;\n      -ms-flex-align: start;\n          align-items: flex-start;\n      text-align: left;\n      padding-top: 81px;\n      padding-bottom: 72px;\n      padding-right: 632px; }\n    #page-go-pwa-architects-guide .banner h1,\n    #page-go-why-hybrid .banner h1 {\n      color: #24282e;\n      font-size: 37px;\n      font-weight: 700;\n      letter-spacing: -0.034em;\n      margin: 77px 0 22px; }\n    #page-go-pwa-architects-guide .banner p,\n    #page-go-why-hybrid .banner p {\n      font-size: 18px;\n      line-height: 32px;\n      font-weight: 400;\n      letter-spacing: -0.02em;\n      color: #626c7d;\n      max-width: 800px; }\n  #page-go-pwa-architects-guide .content,\n  #page-go-pwa-architects-guide .signup-form,\n  #page-go-why-hybrid .content,\n  #page-go-why-hybrid .signup-form {\n    -ms-flex: 1 0;\n        flex: 1 0; }\n  #page-go-pwa-architects-guide .content,\n  #page-go-why-hybrid .content {\n    padding-top: 279px;\n    padding-right: 30px;\n    font-size: 14px;\n    color: #4e545e;\n    letter-spacing: -0.02em;\n    max-width: 526px; }\n  #page-go-pwa-architects-guide main,\n  #page-go-why-hybrid main {\n    margin-top: -240px;\n    padding-bottom: 0px;\n    display: -ms-flexbox;\n    display: flex;\n    -ms-flex-wrap: wrap;\n        flex-wrap: wrap;\n    -ms-flex-pack: justify;\n        justify-content: space-between;\n    overflow: visible; }\n    #page-go-pwa-architects-guide main::before, #page-go-pwa-architects-guide main::after,\n    #page-go-why-hybrid main::before,\n    #page-go-why-hybrid main::after {\n      display: none; }\n    #page-go-pwa-architects-guide main .lg,\n    #page-go-why-hybrid main .lg {\n      color: #6e7f99;\n      font-size: 18px;\n      line-height: 36px;\n      -webkit-perspective: 600px;\n              perspective: 600px;\n      margin-bottom: 48px; }\n      #page-go-pwa-architects-guide main .lg::before,\n      #page-go-why-hybrid main .lg::before {\n        background-image: url(\"/img/articles/pwa-cover-title.png\"), url(\"/img/articles/pwa-cover-bg.png\"), linear-gradient(60deg, #73c5ff 0, #3880ff 100%);\n        background-size: 64%, 100%, 100%;\n        background-repeat: no-repeat, repeat, repeat;\n        background-position: 20% 12%, 50% 50%, 50% 50%;\n        height: 281px;\n        width: 186px;\n        content: '';\n        float: left;\n        margin-left: 6px;\n        margin-right: 61px;\n        border-radius: 8px;\n        -webkit-transform: rotateY(12deg);\n                transform: rotateY(12deg);\n        margin-top: -64px;\n        margin-bottom: 12px;\n        box-shadow: 0 2px 16px rgba(0, 0, 0, 0.2); }\n    #page-go-pwa-architects-guide main p,\n    #page-go-why-hybrid main p {\n      letter-spacing: -.02em;\n      line-height: 2em;\n      font-size: 16px;\n      margin-bottom: 16px; }\n    #page-go-pwa-architects-guide main ul,\n    #page-go-why-hybrid main ul {\n      list-style-type: none;\n      padding: 0;\n      margin: 0 0 46px; }\n    #page-go-pwa-architects-guide main li,\n    #page-go-why-hybrid main li {\n      padding: 0px 0 0 21px;\n      font-size: 16px;\n      line-height: 32px;\n      position: relative;\n      letter-spacing: -.021em; }\n      #page-go-pwa-architects-guide main li strong,\n      #page-go-why-hybrid main li strong {\n        font-weight: 500; }\n      #page-go-pwa-architects-guide main li:before,\n      #page-go-why-hybrid main li:before {\n        content: '•';\n        opacity: 0.8;\n        position: absolute;\n        left: 7px; }\n  #page-go-pwa-architects-guide .signup-form,\n  #page-go-pwa-architects-guide .thank-you aside,\n  #page-go-why-hybrid .signup-form,\n  #page-go-why-hybrid .thank-you aside {\n    padding: 42px 48px 48px;\n    background: white;\n    box-shadow: 0 8px 48px 0px rgba(0, 0, 0, 0.2);\n    max-width: 536px;\n    border-radius: 10px; }\n    #page-go-pwa-architects-guide .signup-form h3,\n    #page-go-pwa-architects-guide .thank-you aside h3,\n    #page-go-why-hybrid .signup-form h3,\n    #page-go-why-hybrid .thank-you aside h3 {\n      margin-top: 0;\n      margin-bottom: 30px;\n      font-weight: 700;\n      font-size: 28px;\n      line-height: 36px;\n      letter-spacing: -0.03em; }\n  #page-go-pwa-architects-guide .company,\n  #page-go-why-hybrid .company {\n    margin: 232px 0 68px;\n    text-align: center;\n    width: 100%; }\n    #page-go-pwa-architects-guide .company h2,\n    #page-go-why-hybrid .company h2 {\n      color: #7f8fab;\n      margin: 0 auto;\n      font-size: 28px;\n      max-width: 760px;\n      text-align: center;\n      line-height: 1.4em;\n      letter-spacing: -.04em;\n      font-weight: 600; }\n    #page-go-pwa-architects-guide .company strong,\n    #page-go-why-hybrid .company strong {\n      color: #131924;\n      font-weight: 700; }\n    #page-go-pwa-architects-guide .company .logos,\n    #page-go-why-hybrid .company .logos {\n      display: -ms-flexbox;\n      display: flex;\n      -ms-flex-wrap: wrap;\n          flex-wrap: wrap;\n      margin-top: 51px;\n      -ms-flex-pack: space-evenly;\n          justify-content: space-evenly; }\n      #page-go-pwa-architects-guide .company .logos::before, #page-go-pwa-architects-guide .company .logos::after,\n      #page-go-why-hybrid .company .logos::before,\n      #page-go-why-hybrid .company .logos::after {\n        background: url(\"/img/homepage/enterprise-logos.png\") 0 0 no-repeat;\n        background-size: 100%;\n        width: 494px;\n        height: 42px;\n        content: '';\n        max-width: 100%;\n        margin-bottom: 32px;\n        display: inline-block; }\n      #page-go-pwa-architects-guide .company .logos::after,\n      #page-go-why-hybrid .company .logos::after {\n        background-position: 0 bottom; }\n  #page-go-pwa-architects-guide .get-started,\n  #page-go-why-hybrid .get-started {\n    background: #f1f4f8;\n    overflow: auto; }\n    #page-go-pwa-architects-guide .get-started .container,\n    #page-go-why-hybrid .get-started .container {\n      -ms-flex-align: center;\n          align-items: center;\n      display: -ms-flexbox;\n      display: flex;\n      margin-bottom: 110px;\n      margin-top: 110px; }\n    #page-go-pwa-architects-guide .get-started hgroup,\n    #page-go-why-hybrid .get-started hgroup {\n      letter-spacing: -.025em;\n      -ms-flex-positive: 1;\n          flex-grow: 1; }\n    #page-go-pwa-architects-guide .get-started h2,\n    #page-go-why-hybrid .get-started h2 {\n      color: #4a8bfc;\n      font-size: 28px;\n      font-weight: 700;\n      letter-spacing: inherit;\n      margin: 0 0 5px; }\n    #page-go-pwa-architects-guide .get-started p,\n    #page-go-why-hybrid .get-started p {\n      color: #24282e;\n      font-size: 20px;\n      font-weight: 600;\n      margin: 0; }\n    #page-go-pwa-architects-guide .get-started .btn,\n    #page-go-why-hybrid .get-started .btn {\n      font-size: 16px;\n      font-weight: 700; }\n  @media (max-width: 991px) {\n    #page-go-pwa-architects-guide .banner hgroup,\n    #page-go-why-hybrid .banner hgroup {\n      padding-right: 15px;\n      text-align: center; }\n    #page-go-pwa-architects-guide h1,\n    #page-go-why-hybrid h1 {\n      margin-right: auto;\n      margin-left: auto; }\n    #page-go-pwa-architects-guide p.lg,\n    #page-go-why-hybrid p.lg {\n      margin-right: 24px; }\n    #page-go-pwa-architects-guide main,\n    #page-go-why-hybrid main {\n      display: block; }\n    #page-go-pwa-architects-guide .content,\n    #page-go-why-hybrid .content {\n      max-width: 100%;\n      padding-right: 0; }\n    #page-go-pwa-architects-guide .signup-form,\n    #page-go-why-hybrid .signup-form {\n      max-width: 100%; }\n    #page-go-pwa-architects-guide .company,\n    #page-go-why-hybrid .company {\n      margin-top: 128px; }\n    #page-go-pwa-architects-guide .get-started .btn + .btn,\n    #page-go-why-hybrid .get-started .btn + .btn {\n      margin-top: 8px; } }\n  #page-go-pwa-architects-guide .banner .thank-you,\n  #page-go-why-hybrid .banner .thank-you {\n    min-height: 490px; }\n  #page-go-pwa-architects-guide main.thank-you,\n  #page-go-why-hybrid main.thank-you {\n    margin-top: -340px; }\n  #page-go-pwa-architects-guide .thank-you aside,\n  #page-go-why-hybrid .thank-you aside {\n    margin-right: auto;\n    margin-left: auto;\n    max-width: 500px; }\n  #page-go-pwa-architects-guide .thank-you p::before,\n  #page-go-why-hybrid .thank-you p::before {\n    content: none; }\n  #page-go-pwa-architects-guide .thank-you .btn,\n  #page-go-why-hybrid .thank-you .btn {\n    display: block; }\n  #page-go-pwa-architects-guide .thank-you p.lg,\n  #page-go-why-hybrid .thank-you p.lg {\n    margin-bottom: 0; }\n  #page-go-pwa-architects-guide .thank-you .also,\n  #page-go-why-hybrid .thank-you .also {\n    margin-top: 0;\n    margin-bottom: 64px; }\n  #page-go-pwa-architects-guide .thank-you .company,\n  #page-go-why-hybrid .thank-you .company {\n    margin-top: 128px; }\n\n#page-go-why-hybrid main .lg::before {\n  background-image: url(\"/img/articles/why-hybrid-cover.jpg\");\n  background-size: 100%;\n  background-position: 0 0;\n  height: 242px; }\n\n#ionic-slider {\n  margin-top: -72px;\n  display: block;\n  min-height: 860px;\n  position: relative; }\n  #ionic-slider [slot=\"slide-0\"] {\n    display: block; }\n  #ionic-slider [slot^=\"slide-\"] {\n    padding-top: 100px;\n    position: absolute;\n    top: 0;\n    right: 0;\n    bottom: 0;\n    left: 0;\n    overflow: hidden; }\n    #ionic-slider [slot^=\"slide-\"] hgroup {\n      color: white;\n      max-width: 500px;\n      margin-top: 13px;\n      text-align: center;\n      position: relative; }\n    #ionic-slider [slot^=\"slide-\"] h1 {\n      font-size: 64px;\n      line-height: 74px;\n      margin-bottom: 16px;\n      letter-spacing: -.03em; }\n    #ionic-slider [slot^=\"slide-\"] p {\n      font-size: 24px;\n      line-height: 36px;\n      font-family: \"Eina\", \"Helvetica Neue\", Helvetica, sans-serif;\n      letter-spacing: -0.03em;\n      color: #e4f1ff; }\n    #ionic-slider [slot^=\"slide-\"] .btn {\n      font-size: 15px;\n      font-weight: 700;\n      margin-top: 18px;\n      padding: 20px 22px;\n      margin-right: -4px;\n      letter-spacing: .1em;\n      text-transform: uppercase; }\n      #ionic-slider [slot^=\"slide-\"] .btn ion-icon {\n        font-size: 16px;\n        margin-left: -4px;\n        vertical-align: -2px;\n        width: 16px;\n        height: 16px;\n        display: inline-block; }\n    #ionic-slider [slot^=\"slide-\"] .version-text {\n      color: rgba(255, 255, 255, 0.6);\n      font-weight: 500;\n      font-size: 11px; }\n      #ionic-slider [slot^=\"slide-\"] .version-text a {\n        color: rgba(255, 255, 255, 0.6); }\n        #ionic-slider [slot^=\"slide-\"] .version-text a:hover {\n          color: rgba(255, 255, 255, 0.8);\n          text-decoration: none; }\n  #ionic-slider #slide-limitless {\n    background: #548fff linear-gradient(to right, #4278ff, #67a7ff);\n    background-size: 100%; }\n    #ionic-slider #slide-limitless .btn {\n      color: #3880ff; }\n    #ionic-slider #slide-limitless ul {\n      padding: 0;\n      margin-top: 8px;\n      list-style: none; }\n    #ionic-slider #slide-limitless li {\n      display: inline-block;\n      margin-right: 8px; }\n      #ionic-slider #slide-limitless li:last-child {\n        margin-right: 0; }\n        #ionic-slider #slide-limitless li:last-child img {\n          height: 23px;\n          vertical-align: -8px; }\n      #ionic-slider #slide-limitless li img {\n        height: 13px;\n        opacity: .6; }\n    #ionic-slider #slide-limitless .graphics {\n      position: absolute;\n      bottom: 0;\n      width: 100%;\n      left: 0;\n      padding: 0;\n      margin: 0; }\n      #ionic-slider #slide-limitless .graphics li {\n        position: absolute;\n        opacity: 0;\n        -webkit-animation: fadeInUp 1s ease forwards;\n                animation: fadeInUp 1s ease forwards; }\n        #ionic-slider #slide-limitless .graphics li.iphone-x {\n          background: url(\"/img/homepage/hero-iphone-x.png\") 0 0 no-repeat;\n          background-size: 100%;\n          bottom: -63px;\n          left: -191px;\n          width: 400px;\n          height: 306px;\n          -webkit-animation-delay: .8s;\n                  animation-delay: .8s; }\n        #ionic-slider #slide-limitless .graphics li.iphone-xs-max {\n          background: url(\"/img/homepage/hero-iphone-xs-max.png\") 0 0 no-repeat;\n          background-size: 100%;\n          bottom: -39px;\n          left: 170px;\n          width: 490px;\n          height: 378px;\n          -webkit-animation-delay: .9s;\n                  animation-delay: .9s; }\n        #ionic-slider #slide-limitless .graphics li.pixel-3 {\n          background: url(\"/img/homepage/hero-google-pixel3.png\") 0 0 no-repeat;\n          background-size: 100%;\n          bottom: -40px;\n          left: 607px;\n          width: 490px;\n          height: 400px;\n          -webkit-animation-delay: 1s;\n                  animation-delay: 1s; }\n        #ionic-slider #slide-limitless .graphics li.galaxy {\n          background: url(\"/img/homepage/hero-android-galaxy.png\") 0 0 no-repeat;\n          background-size: 100%;\n          bottom: -41px;\n          left: 1063px;\n          width: 450px;\n          height: 356px;\n          -webkit-animation-delay: 1.1s;\n                  animation-delay: 1.1s; }\n        #ionic-slider #slide-limitless .graphics li.ipad {\n          background: url(\"/img/homepage/hero-ipad.png\") 0 0 no-repeat;\n          background-size: 100%;\n          bottom: -44px;\n          left: 1484px;\n          width: 610px;\n          height: 524px;\n          -webkit-animation-delay: 1.2s;\n                  animation-delay: 1.2s; }\n        #ionic-slider #slide-limitless .graphics li.macbook {\n          background: url(\"/img/homepage/hero-macbook.png\") 0 0 no-repeat;\n          background-size: 100%;\n          bottom: -63px;\n          left: 2061px;\n          width: 1470px;\n          height: 570px;\n          -webkit-animation-delay: 1.3s;\n                  animation-delay: 1.3s; }\n  #ionic-slider #slide-v4 {\n    background: #01050c; }\n    #ionic-slider #slide-v4::before {\n      background: url(\"/img/homepage/bg-phone.png\") no-repeat 50% 50%;\n      background-size: cover;\n      position: absolute;\n      top: 0;\n      right: 0;\n      bottom: 0;\n      left: 0;\n      opacity: 0;\n      content: ''; }\n    #ionic-slider #slide-v4 hgroup {\n      padding-top: 58px;\n      position: relative;\n      max-width: 620px; }\n      #ionic-slider #slide-v4 hgroup img {\n        display: inline-block;\n        width: 48px;\n        height: 48px; }\n      #ionic-slider #slide-v4 hgroup h4 {\n        text-transform: uppercase;\n        letter-spacing: .1em;\n        font-family: \"Roboto Mono\", Menlo, Monaco, Consolas, \"Courier New\", monospace;\n        font-size: 12px;\n        font-weight: 400;\n        margin-top: 15px;\n        margin-bottom: 33px; }\n      #ionic-slider #slide-v4 hgroup h1 {\n        letter-spacing: -.02em; }\n      #ionic-slider #slide-v4 hgroup p {\n        line-height: 32px;\n        margin-top: 18px; }\n      #ionic-slider #slide-v4 hgroup .btn {\n        margin-top: 27px;\n        letter-spacing: .08em; }\n        #ionic-slider #slide-v4 hgroup .btn.white {\n          color: #131a26;\n          margin-right: 8px; }\n        #ionic-slider #slide-v4 hgroup .btn.dark {\n          background: #343d4d; }\n          #ionic-slider #slide-v4 hgroup .btn.dark:hover {\n            background: #3e495c; }\n        #ionic-slider #slide-v4 hgroup .btn ion-icon {\n          width: 16px;\n          height: 16px;\n          margin-left: 8px; }\n    #ionic-slider #slide-v4 .features {\n      position: absolute;\n      bottom: 35px;\n      width: 100%;\n      left: 0; }\n      #ionic-slider #slide-v4 .features ul {\n        display: -ms-flexbox;\n        display: flex;\n        -ms-flex-pack: start;\n            justify-content: start;\n        -ms-flex-wrap: wrap;\n            flex-wrap: wrap;\n        padding-left: 0;\n        -ms-flex-pack: justify;\n            justify-content: space-between;\n        padding: 0; }\n        #ionic-slider #slide-v4 .features ul li {\n          margin-right: 1em;\n          list-style: none; }\n        #ionic-slider #slide-v4 .features ul::before, #ionic-slider #slide-v4 .features ul::after {\n          display: none; }\n      #ionic-slider #slide-v4 .features li {\n        position: relative;\n        padding-top: 65px;\n        width: 145px;\n        color: #8a94a3;\n        text-align: center;\n        background: transparent;\n        font-size: 12px;\n        line-height: 20px;\n        margin-bottom: 32px;\n        opacity: 0; }\n        #ionic-slider #slide-v4 .features li::before {\n          background: url(\"/img/homepage/v4-feature-icons.png\") 0 0 no-repeat;\n          background-size: cover;\n          position: absolute;\n          top: 0;\n          left: calc(50% - 24px);\n          height: 48px;\n          width: 48px;\n          content: ''; }\n        #ionic-slider #slide-v4 .features li.performance::before {\n          background-position: 0 0px; }\n        #ionic-slider #slide-v4 .features li.theming::before {\n          background-position: 0 -48px; }\n        #ionic-slider #slide-v4 .features li.standards::before {\n          background-position: 0 -96px; }\n        #ionic-slider #slide-v4 .features li.compatible::before {\n          background-position: 0 -144px; }\n        #ionic-slider #slide-v4 .features li.docs::before {\n          background-position: 0 -192px; }\n      @media (max-width: 991px) {\n        #ionic-slider #slide-v4 .features {\n          bottom: 0; }\n          #ionic-slider #slide-v4 .features ul {\n            max-width: 600px;\n            margin: 0 auto;\n            -ms-flex-pack: distribute;\n                justify-content: space-around; } }\n      @media (max-width: 570px) {\n        #ionic-slider #slide-v4 .features {\n          display: none; } }\n    #ionic-slider #slide-v4::before {\n      -webkit-animation: fadeInUp 1.6s .8s ease forwards;\n              animation: fadeInUp 1.6s .8s ease forwards; }\n    #ionic-slider #slide-v4 .features li {\n      -webkit-animation: fadeInUp 1s .1s ease forwards;\n              animation: fadeInUp 1s .1s ease forwards; }\n      #ionic-slider #slide-v4 .features li:nth-child(2) {\n        -webkit-animation-delay: .2s;\n                animation-delay: .2s; }\n      #ionic-slider #slide-v4 .features li:nth-child(3) {\n        -webkit-animation-delay: .3s;\n                animation-delay: .3s; }\n      #ionic-slider #slide-v4 .features li:nth-child(4) {\n        -webkit-animation-delay: .4s;\n                animation-delay: .4s; }\n      #ionic-slider #slide-v4 .features li:nth-child(5) {\n        -webkit-animation-delay: .5s;\n                animation-delay: .5s; }\n  #ionic-slider #slide-one-any {\n    background: white;\n    position: relative;\n    min-height: 840px; }\n    #ionic-slider #slide-one-any .notification {\n      display: inline-block;\n      background: #F6F8FB;\n      font-size: 11px;\n      line-height: 16px;\n      text-align: center;\n      letter-spacing: 0.1em;\n      padding: 7px 15px 7px; }\n      #ionic-slider #slide-one-any .notification strong {\n        color: #1A232F; }\n      #ionic-slider #slide-one-any .notification::after {\n        content: '>'; }\n      @media (max-width: 767px) {\n        #ionic-slider #slide-one-any .notification {\n          display: none; } }\n    #ionic-slider #slide-one-any hgroup {\n      max-width: 464px;\n      display: block;\n      margin-top: 56px;\n      position: relative;\n      z-index: 1; }\n      #ionic-slider #slide-one-any hgroup h1 {\n        font-size: 64px;\n        line-height: 64px;\n        color: #020814;\n        letter-spacing: -.04em;\n        margin-bottom: 7px; }\n      #ionic-slider #slide-one-any hgroup p {\n        font-size: 22px;\n        line-height: 37px;\n        color: rgba(91, 112, 139, 0.9);\n        letter-spacing: -.04em; }\n      #ionic-slider #slide-one-any hgroup .btn {\n        background: #4D8DFF;\n        border-radius: 10px;\n        text-transform: uppercase;\n        margin-top: 12px;\n        font-size: 15px;\n        line-height: 21px;\n        padding: 16px 16px 12px;\n        letter-spacing: 0.08em; }\n        #ionic-slider #slide-one-any hgroup .btn:hover {\n          background: #679dff; }\n        #ionic-slider #slide-one-any hgroup .btn:active {\n          background: #4D8DFF; }\n        #ionic-slider #slide-one-any hgroup .btn img {\n          margin-left: 2px;\n          vertical-align: 0;\n          margin-right: 2px; }\n      #ionic-slider #slide-one-any hgroup small {\n        font-size: 11px;\n        line-height: 21px;\n        letter-spacing: -0.02em;\n        color: #B2BECD; }\n        #ionic-slider #slide-one-any hgroup small a {\n          position: relative;\n          color: #92a0b3; }\n          #ionic-slider #slide-one-any hgroup small a::after {\n            content: '';\n            position: absolute;\n            left: 0;\n            right: 0;\n            bottom: -2px;\n            border-bottom: 1px solid #dee3ea; }\n          #ionic-slider #slide-one-any hgroup small a:hover {\n            color: #4a8bfc; }\n            #ionic-slider #slide-one-any hgroup small a:hover::after {\n              border-bottom-color: #4a8bfc; }\n      @media (max-width: 767px) {\n        #ionic-slider #slide-one-any hgroup {\n          max-width: 100%;\n          text-align: center;\n          margin-top: 64px; } }\n    #ionic-slider #slide-one-any .graphic {\n      position: absolute;\n      right: 20px;\n      top: 120px;\n      height: 563px;\n      width: 590px; }\n      @media (max-width: 1219px) {\n        #ionic-slider #slide-one-any .graphic {\n          top: 128px;\n          right: -64px; } }\n      @media (max-width: 991px) {\n        #ionic-slider #slide-one-any .graphic {\n          width: 302px;\n          height: auto;\n          top: 180px; } }\n      @media (max-width: 767px) {\n        #ionic-slider #slide-one-any .graphic {\n          display: none; } }\n    #ionic-slider #slide-one-any .stats {\n      padding: 0;\n      position: absolute;\n      bottom: 21px;\n      left: 0;\n      list-style: none;\n      display: -ms-flexbox;\n      display: flex;\n      -ms-flex-wrap: wrap;\n          flex-wrap: wrap; }\n      #ionic-slider #slide-one-any .stats a {\n        font-size: 14px;\n        line-height: 17px;\n        letter-spacing: -0.02em;\n        color: #92A1B3;\n        padding: 0 18px;\n        transition: .3s color; }\n        #ionic-slider #slide-one-any .stats a svg {\n          vertical-align: -3px; }\n          #ionic-slider #slide-one-any .stats a svg path {\n            transition: .3s fill; }\n        #ionic-slider #slide-one-any .stats a:hover {\n          color: #74879e; }\n          #ionic-slider #slide-one-any .stats a:hover svg path {\n            fill: #74879e; }\n      @media (max-width: 767px) {\n        #ionic-slider #slide-one-any .stats {\n          left: calc(50% - 140px); } }\n    #ionic-slider #slide-one-any ionic-newsletter-signup {\n      width: 400px;\n      position: absolute;\n      bottom: 29px;\n      right: 20px;\n      max-width: calc(100% - 30px); }\n      @media (max-width: 767px) {\n        #ionic-slider #slide-one-any ionic-newsletter-signup {\n          bottom: -26px;\n          right: auto;\n          left: calc(50% - 200px); } }\n      @media (max-width: 460px) {\n        #ionic-slider #slide-one-any ionic-newsletter-signup {\n          left: 15px; } }\n    @media (max-width: 991px) {\n      #ionic-slider #slide-one-any {\n        padding-top: 100px;\n        padding-bottom: 100px;\n        min-height: 0; } }\n    @media (max-width: 767px) {\n      #ionic-slider #slide-one-any {\n        padding-top: 100px;\n        padding-bottom: 100px;\n        min-height: 0; } }\n  @media (max-width: 991px) {\n    #ionic-slider {\n      min-height: 0; } }\n\n#page-home #used-by {\n  border-top: 1px #EFF3F8 solid;\n  padding-top: 60px;\n  padding-bottom: 58px;\n  border-bottom: 1px solid #EFF3F8; }\n  #page-home #used-by .container {\n    display: block;\n    max-width: 950px; }\n    @media (max-width: 991px) {\n      #page-home #used-by .container {\n        width: 100%; } }\n  @media (max-width: 991px) {\n    #page-home #used-by {\n      display: none; } }\n\n#page-home section {\n  padding-top: 170px;\n  line-height: 1.75em;\n  padding-bottom: 170px;\n  position: relative; }\n  #page-home section.center {\n    text-align: center; }\n  #page-home section.left, #page-home section.right {\n    display: -ms-flexbox;\n    display: flex; }\n    #page-home section.left .content, #page-home section.right .content {\n      width: 470px; }\n  #page-home section.right .content {\n    margin-left: auto; }\n  #page-home section h2 {\n    font-size: 47px;\n    margin-bottom: 15px;\n    letter-spacing: -.02em;\n    color: #0d121c; }\n  #page-home section h3 {\n    font-size: 35px;\n    letter-spacing: -0.016em; }\n  #page-home section h4 {\n    font-size: 12px;\n    color: #808fa7;\n    letter-spacing: .14em;\n    text-transform: uppercase;\n    font-family: \"Roboto Mono\", Menlo, Monaco, Consolas, \"Courier New\", monospace; }\n    #page-home section h4 + h2 {\n      margin-top: 36px; }\n  #page-home section h5 {\n    font-size: 20px;\n    margin-bottom: 16px;\n    font-weight: 600; }\n  #page-home section p {\n    font-size: 16px;\n    color: #8c9bb9;\n    margin-bottom: 8px;\n    line-height: 1.78em;\n    letter-spacing: -.028em; }\n  #page-home section hgroup p,\n  #page-home section p.lg {\n    color: #596a89;\n    font-size: 22px;\n    line-height: 36px;\n    margin-bottom: 23px;\n    letter-spacing: -.02em;\n    font-family: \"Eina\", \"Helvetica Neue\", Helvetica, sans-serif; }\n    #page-home section hgroup p strong,\n    #page-home section p.lg strong {\n      font-weight: 600; }\n  #page-home section .cta {\n    font-size: 20px;\n    margin-top: 11px;\n    padding-top: 0;\n    color: #5a98ff;\n    display: inline-block;\n    position: relative;\n    background: none;\n    letter-spacing: -.02em;\n    font-weight: 600;\n    font-family: \"Eina\", \"Helvetica Neue\", Helvetica, sans-serif;\n    position: relative;\n    transition: .3s opacity; }\n    #page-home section .cta:hover {\n      opacity: .6; }\n    #page-home section .cta:hover, #page-home section .cta:active, #page-home section .cta:focus {\n      text-decoration: none; }\n    #page-home section .cta::after {\n      content: '';\n      position: absolute;\n      bottom: -1px;\n      left: 0;\n      right: 0;\n      border-bottom: 2px solid #dbe6ff;\n      border-radius: 2px; }\n  @media (max-width: 991px) {\n    #page-home section .content {\n      width: 100%;\n      text-align: center; } }\n\n#page-home #for-devs {\n  padding-bottom: 87px; }\n  #page-home #for-devs hgroup {\n    max-width: 740px; }\n  #page-home #for-devs ul {\n    display: -ms-flexbox;\n    display: flex;\n    -ms-flex-wrap: wrap;\n        flex-wrap: wrap;\n    margin-top: 46px;\n    -ms-flex-pack: distribute;\n        justify-content: space-around;\n    max-width: 1064px;\n    font-family: \"Eina\", \"Helvetica Neue\", Helvetica, sans-serif; }\n    #page-home #for-devs ul::before, #page-home #for-devs ul::after {\n      display: none; }\n  #page-home #for-devs li {\n    list-style: none; }\n    #page-home #for-devs li a {\n      color: #798fb8;\n      font-weight: 700;\n      padding-top: 73px;\n      text-align: center;\n      text-transform: uppercase;\n      position: relative;\n      width: 130px;\n      display: block;\n      letter-spacing: .08em;\n      transition: .2s color;\n      font-size: 13px; }\n      #page-home #for-devs li a::before, #page-home #for-devs li a::after {\n        background: url(\"/img/homepage/offering-icons.png\") 0 0 no-repeat;\n        background-size: 56px;\n        height: 56px;\n        width: 56px;\n        content: '';\n        position: absolute;\n        top: 0;\n        left: calc(50% - 28px); }\n      #page-home #for-devs li a:hover {\n        color: #4a8bfc; }\n      @media (max-width: 560px) {\n        #page-home #for-devs li a {\n          line-height: 1.6em;\n          margin-bottom: 48px; } }\n    #page-home #for-devs li a::before, #page-home #for-devs li a::after {\n      transition: .2s opacity; }\n    #page-home #for-devs li a::after {\n      opacity: 0; }\n    #page-home #for-devs li:hover a::after {\n      opacity: 1; }\n    #page-home #for-devs li.oss a::before {\n      background-position: 0 0px; }\n    #page-home #for-devs li.oss a::after {\n      background-position: 0 -56px; }\n    #page-home #for-devs li.devops a::before {\n      background-position: 0 -112px; }\n    #page-home #for-devs li.devops a::after {\n      background-position: 0 -168px; }\n    #page-home #for-devs li.ide a::before {\n      background-position: 0 -224px; }\n    #page-home #for-devs li.ide a::after {\n      background-position: 0 -280px; }\n    #page-home #for-devs li.integration a::before {\n      background-position: 0 -336px; }\n    #page-home #for-devs li.integration a::after {\n      background-position: 0 -392px; }\n\n#page-home #oss {\n  padding-top: 176px;\n  padding-bottom: 400px;\n  margin-top: 100px; }\n  #page-home #oss .frameworks {\n    margin-bottom: 33px;\n    display: -ms-flexbox;\n    display: flex;\n    -ms-flex-pack: start;\n        justify-content: start;\n    -ms-flex-wrap: wrap;\n        flex-wrap: wrap;\n    padding-left: 0; }\n    #page-home #oss .frameworks li {\n      margin-right: 1em;\n      list-style: none; }\n    #page-home #oss .frameworks li {\n      height: 32px;\n      width: 32px;\n      background-size: 100%;\n      display: inline-block;\n      margin-right: 12px; }\n      #page-home #oss .frameworks li.frameworks__angular {\n        background-image: url(\"/img/homepage/framework-support-angular.png\"); }\n      #page-home #oss .frameworks li.frameworks__react {\n        background-image: url(\"/img/homepage/framework-support-react.png\"); }\n      #page-home #oss .frameworks li.frameworks__vue {\n        background-image: url(\"/img/homepage/framework-support-vue.png\"); }\n      #page-home #oss .frameworks li.frameworks__js {\n        background-image: url(\"/img/homepage/framework-support-javascript.png\"); }\n  #page-home #oss .graphics {\n    position: absolute;\n    top: 25px;\n    right: 15px;\n    height: 500px; }\n    #page-home #oss .graphics.active::before, #page-home #oss .graphics.active::after {\n      -webkit-animation: fadeInUp 1s .8s ease forwards;\n              animation: fadeInUp 1s .8s ease forwards; }\n    #page-home #oss .graphics.active::after {\n      -webkit-animation-delay: .4s;\n              animation-delay: .4s; }\n    #page-home #oss .graphics.active .shadow {\n      -webkit-animation: fadeIn 2s .2s ease forwards;\n              animation: fadeIn 2s .2s ease forwards; }\n    #page-home #oss .graphics::before, #page-home #oss .graphics::after,\n    #page-home #oss .graphics .shadow {\n      position: absolute;\n      content: '';\n      opacity: 0;\n      background: url(\"/img/homepage/framework-device-android.jpg\") 0 0 no-repeat;\n      background-size: 100%;\n      top: 78px;\n      right: 99px;\n      width: 470px;\n      height: 624px; }\n    #page-home #oss .graphics::after {\n      background-image: url(\"/img/homepage/framework-device-iphone.png\");\n      background-size: 100%;\n      width: 490px;\n      height: 790px;\n      top: 0px;\n      right: 0px; }\n    #page-home #oss .graphics .shadow {\n      background-image: url(\"/img/homepage/framework-devices-shadow.png\");\n      background-size: 100%;\n      width: 1266px;\n      height: 214px;\n      top: 654px;\n      right: -200px; }\n  @media (max-width: 1219px) {\n    #page-home #oss {\n      padding-top: 120px; }\n      #page-home #oss .content {\n        width: 380px; } }\n  @media (max-width: 991px) {\n    #page-home #oss .graphics {\n      -webkit-transform: scale(0.5, 0.5);\n              transform: scale(0.5, 0.5);\n      top: 200px; } }\n  @media (max-width: 767px) {\n    #page-home #oss {\n      padding-top: 0px;\n      padding-bottom: 328px; }\n      #page-home #oss .content {\n        width: 100%;\n        text-align: center; }\n        #page-home #oss .content .frameworks {\n          -ms-flex-pack: center;\n              justify-content: center; }\n      #page-home #oss .graphics {\n        right: calc(50% - 60px);\n        bottom: -101px;\n        top: auto; }\n        #page-home #oss .graphics::before {\n          top: 39px;\n          right: 50px;\n          width: 235px;\n          height: 312px; }\n        #page-home #oss .graphics::after {\n          width: 245px;\n          height: 395px; }\n        #page-home #oss .graphics .shadow {\n          width: 633px;\n          height: 107px;\n          top: 327px;\n          right: -100px; } }\n\n#page-home #devops {\n  padding-top: 204px;\n  padding-bottom: 252px; }\n  #page-home #devops .content {\n    position: relative; }\n  #page-home #devops .git-hosts {\n    margin-bottom: 42px;\n    display: -ms-flexbox;\n    display: flex;\n    -ms-flex-pack: start;\n        justify-content: start;\n    -ms-flex-wrap: wrap;\n        flex-wrap: wrap;\n    padding-left: 0; }\n    #page-home #devops .git-hosts li {\n      margin-right: 1em;\n      list-style: none; }\n    #page-home #devops .git-hosts li {\n      margin-right: 19px; }\n    #page-home #devops .git-hosts img {\n      height: 20px; }\n  #page-home #devops .graphics {\n    background: url(\"/img/homepage/devops-appflow-preview.png\") 0 0 no-repeat;\n    background-size: 100%;\n    width: 1324px;\n    height: 812px;\n    position: absolute;\n    top: 14px;\n    left: -227px;\n    opacity: 0; }\n    #page-home #devops .graphics.active {\n      -webkit-animation: fadeInUp 1s ease forwards;\n              animation: fadeInUp 1s ease forwards; }\n  @media (max-width: 1219px) {\n    #page-home #devops {\n      padding-top: 60px; }\n      #page-home #devops .graphics {\n        width: 933px; } }\n  @media (max-width: 991px) {\n    #page-home #devops .graphics {\n      width: 662px;\n      top: 180px; } }\n  @media (max-width: 767px) {\n    #page-home #devops {\n      padding-top: 160px;\n      padding-bottom: 420px; }\n      #page-home #devops .content {\n        width: 100%; }\n      #page-home #devops .git-hosts {\n        -ms-flex-pack: center;\n            justify-content: center; }\n      #page-home #devops .graphics {\n        left: calc(50% - 150px);\n        width: 331px;\n        top: auto;\n        height: 203px;\n        bottom: 170px; } }\n\n#page-home #studio {\n  padding-bottom: 54px;\n  margin-bottom: 150px;\n  padding-top: 20px;\n  margin-top: 150px; }\n  #page-home #studio .content {\n    max-width: 720px; }\n  #page-home #studio .graphics {\n    background: url(\"/img/homepage/studio-desktop-bg.jpg\") 50% 0 no-repeat;\n    background-size: cover;\n    width: 100%;\n    padding-top: 100px;\n    padding-bottom: 100px;\n    margin-top: 58px; }\n    #page-home #studio .graphics video {\n      margin: 0 auto;\n      padding: 0;\n      border-radius: 6px;\n      box-shadow: 0 22px 70px 4px rgba(0, 0, 0, 0.56); }\n  @media (max-width: 767px) {\n    #page-home #studio {\n      padding-top: 80px;\n      margin-top: 0; }\n      #page-home #studio .graphics video {\n        width: 100%; } }\n\n#page-home #integrations {\n  padding-top: 20px;\n  padding-bottom: 4px; }\n  #page-home #integrations .content {\n    max-width: 894px; }\n  #page-home #integrations .integration-list {\n    position: relative;\n    height: 360px;\n    display: block;\n    margin: 0 0 48px;\n    padding: 0;\n    position: relative;\n    opacity: 0;\n    -webkit-animation: fadeIn 1s 1s forwards;\n            animation: fadeIn 1s 1s forwards; }\n    #page-home #integrations .integration-list li {\n      list-style: none;\n      position: absolute; }\n    #page-home #integrations .integration-list img {\n      position: absolute;\n      width: 128px;\n      border-radius: 50%;\n      box-shadow: 0 6px 24px rgba(0, 0, 0, 0.1); }\n      #page-home #integrations .integration-list img.m {\n        width: 64px; }\n      #page-home #integrations .integration-list img.m {\n        width: 96px; }\n\n#page-home #why-build {\n  padding-bottom: 90px; }\n  #page-home #why-build .why {\n    display: -ms-flexbox;\n    display: flex;\n    -ms-flex-pack: start;\n        justify-content: start;\n    -ms-flex-wrap: wrap;\n        flex-wrap: wrap;\n    padding-left: 0;\n    -ms-flex-pack: justify;\n        justify-content: space-between;\n    margin-top: 75px;\n    margin-bottom: 75px; }\n    #page-home #why-build .why li {\n      margin-right: 1em;\n      list-style: none; }\n    #page-home #why-build .why li {\n      padding-top: 61px;\n      max-width: 310px;\n      position: relative; }\n      #page-home #why-build .why li.why__future-proof::before {\n        background-position: 0 0px; }\n      #page-home #why-build .why li.why__community::before {\n        background-position: 0 -48px; }\n      #page-home #why-build .why li.why__os::before {\n        background-position: 0 -96px; }\n      #page-home #why-build .why li::before {\n        background: url(\"/img/homepage/why-build-icons.png\") 0 0 no-repeat;\n        background-size: 100%;\n        position: absolute;\n        top: 0;\n        left: 0;\n        height: 48px;\n        width: 48px;\n        content: ''; }\n      #page-home #why-build .why li p {\n        letter-spacing: -.01em; }\n  @media (max-width: 1219px) {\n    #page-home #why-build .why li {\n      max-width: 280px; } }\n  @media (max-width: 991px) {\n    #page-home #why-build .why li {\n      max-width: 210px; } }\n  @media (max-width: 767px) {\n    #page-home #why-build {\n      text-align: center; }\n      #page-home #why-build .why {\n        -ms-flex-pack: distribute;\n            justify-content: space-around; }\n        #page-home #why-build .why li {\n          max-width: 100%; }\n          #page-home #why-build .why li::before {\n            left: calc(50% - 24px); } }\n\n#page-home #difference {\n  display: -ms-flexbox;\n  display: flex;\n  padding-top: 60px;\n  padding-bottom: 69px;\n  margin-top: 16px;\n  border-bottom: 1px solid #eee; }\n  #page-home #difference .container {\n    position: relative; }\n    #page-home #difference .container::before {\n      background: url(\"/img/homepage/hybrid-vs-native-ionic-ebook.png\") 0 0 no-repeat;\n      background-size: 100%;\n      width: 424px;\n      height: 310px;\n      content: '';\n      position: absolute;\n      bottom: -69px;\n      left: 52px; }\n  #page-home #difference hgroup {\n    max-width: 550px;\n    margin-right: 50px;\n    margin-left: auto; }\n  #page-home #difference h5 {\n    font-size: 18px;\n    margin-bottom: 11px;\n    color: #1f3256; }\n  #page-home #difference p {\n    font-size: 16px;\n    font-weight: 400;\n    line-height: 1.6em;\n    letter-spacing: -.01em;\n    color: #6c81a6; }\n  #page-home #difference .btn {\n    padding: 12px 13px 10px;\n    font-size: 14px;\n    background-color: #668bff; }\n  @media (max-width: 1219px) {\n    #page-home #difference .container::before {\n      left: 0; }\n    #page-home #difference hgroup {\n      max-width: 500px; } }\n  @media (max-width: 991px) {\n    #page-home #difference hgroup {\n      margin: 0 auto;\n      max-width: 100%; }\n    #page-home #difference .container::before {\n      width: 212px;\n      height: 155px;\n      right: 0;\n      left: auto; } }\n  @media (max-width: 370px) {\n    #page-home #difference .container::before {\n      display: none; } }\n\n#page-home #good-company {\n  padding-top: 159px;\n  padding-bottom: 202px; }\n  #page-home #good-company hgroup {\n    max-width: 732px;\n    margin: 0 auto; }\n    #page-home #good-company hgroup p {\n      line-height: 32px;\n      margin-top: 15px; }\n  #page-home #good-company .case-studies {\n    display: -ms-flexbox;\n    display: flex;\n    -ms-flex-pack: start;\n        justify-content: start;\n    -ms-flex-wrap: wrap;\n        flex-wrap: wrap;\n    padding-left: 0;\n    -ms-flex-pack: justify;\n        justify-content: space-between;\n    margin-top: 54px; }\n    #page-home #good-company .case-studies li {\n      margin-right: 1em;\n      list-style: none; }\n    #page-home #good-company .case-studies li {\n      -ms-flex: 0 0 270px;\n          flex: 0 0 270px;\n      margin-right: 0;\n      margin-bottom: 32px; }\n    #page-home #good-company .case-studies a {\n      text-align: left;\n      position: relative;\n      display: block;\n      border-radius: 8px;\n      padding: 236px 27px 23px;\n      box-shadow: 0 4px 8px rgba(0, 30, 84, 0.12), 0 1px 3px rgba(0, 30, 84, 0.08);\n      transition: .15s box-shadow ease, .15s color, .15s transform; }\n      #page-home #good-company .case-studies a:hover {\n        -webkit-transform: translateY(-1px);\n                transform: translateY(-1px);\n        box-shadow: 0 8px 16px rgba(0, 30, 84, 0.1), 0 3px 6px rgba(0, 30, 84, 0.08); }\n    #page-home #good-company .case-studies img {\n      position: absolute;\n      top: 0;\n      left: 0;\n      right: 0;\n      width: 100%;\n      display: block;\n      border-top-right-radius: 8px;\n      border-top-left-radius: 8px; }\n    #page-home #good-company .case-studies strong {\n      font-weight: 400;\n      color: #253950; }\n    #page-home #good-company .case-studies p {\n      font-size: 14px;\n      letter-spacing: -.01em; }\n    #page-home #good-company .case-studies .cta {\n      font-size: 15px;\n      font-family: Eina;\n      font-weight: 600;\n      margin-top: 10px;\n      letter-spacing: .03em; }\n      #page-home #good-company .case-studies .cta::after {\n        display: none; }\n  #page-home #good-company .others {\n    width: 807px;\n    display: block;\n    margin: 49px auto 35px; }\n  #page-home #good-company .cta::after {\n    color: #dbe6ff; }\n  @media (max-width: 1219px) {\n    #page-home #good-company .case-studies li {\n      -ms-flex: 0 0 220px;\n          flex: 0 0 220px; } }\n  @media (max-width: 767px) {\n    #page-home #good-company .case-studies {\n      -ms-flex-pack: distribute;\n          justify-content: space-around; }\n      #page-home #good-company .case-studies li {\n        -ms-flex: 0 0 280px;\n            flex: 0 0 280px; }\n    #page-home #good-company .others {\n      width: 100%; } }\n\n#page-home #join {\n  background: linear-gradient(to right, #4f74fe, #70aafb);\n  padding-top: 132px;\n  padding-bottom: 160px;\n  color: white;\n  text-align: center; }\n  #page-home #join hgroup {\n    font-size: 23px;\n    max-width: 790px; }\n  #page-home #join h1 {\n    font-weight: 400;\n    color: white;\n    font-size: 46px;\n    line-height: 64px; }\n  #page-home #join .btns {\n    margin-top: 44px; }\n  #page-home #join .btn {\n    text-transform: uppercase;\n    font-weight: 700;\n    font-size: 15px;\n    padding: 21px 24px 19px;\n    letter-spacing: .096em;\n    margin-bottom: 16px; }\n    #page-home #join .btn ion-icon {\n      vertical-align: -2px;\n      display: inline-block;\n      width: 15px;\n      height: 15px; }\n    #page-home #join .btn.light {\n      background: #7bb3ff; }\n      #page-home #join .btn.light:hover {\n        background: #95c2ff; }\n    #page-home #join .btn:not(:hover):not(:active) {\n      box-shadow: none; }\n\nbody.press-release main.container {\n  font-family: \"Adobe Caslon\", Georgia, Times, \"Times New Roman\", serif;\n  max-width: 730px; }\n  body.press-release main.container h1,\n  body.press-release main.container h2,\n  body.press-release main.container h3,\n  body.press-release main.container h4 {\n    font-family: \"Eina\", \"Helvetica Neue\", Helvetica, sans-serif; }\n  body.press-release main.container h1 {\n    position: relative;\n    padding-top: 101px;\n    margin-top: 67px;\n    font-size: 32px;\n    font-weight: 700;\n    letter-spacing: -.02em;\n    line-height: 44px; }\n    body.press-release main.container h1::before {\n      background: url(\"/img/press/press-thumbnail.png\") no-repeat 0 0;\n      background-size: 72px;\n      width: 72px;\n      height: 72px;\n      content: '';\n      position: absolute;\n      top: 0; }\n    body.press-release main.container h1 + h3 {\n      margin-top: 10px;\n      font-size: 19px;\n      font-weight: 600;\n      line-height: 1.55em;\n      letter-spacing: .003em;\n      margin-bottom: 25px; }\n  body.press-release main.container h3 + h4 {\n    font-size: 12px;\n    color: #929cac;\n    letter-spacing: .02em;\n    margin-bottom: 58px; }\n  body.press-release main.container h2,\n  body.press-release main.container h3 {\n    font-weight: 600; }\n  body.press-release main.container p {\n    font-size: 20px;\n    line-height: 2em;\n    margin-bottom: 40px; }\n  body.press-release main.container ul {\n    margin-bottom: 40px; }\n  body.press-release main.container li {\n    font-size: 20px;\n    line-height: 2em; }\n\n#page-products-contact .pricing-survey {\n  width: 600px;\n  margin: 40px auto 40px auto; }\n\n#page-products-contact .cta {\n  text-align: center; }\n\n#page-products-contact .button-container {\n  margin-top: 25px;\n  text-align: right; }\n\n#page-products-deploy .top {\n  margin-top: -138px;\n  padding-top: 170px;\n  background: white;\n  text-align: left;\n  padding-bottom: 522px;\n  background: white url(\"/img/pro/deploy/deploy-hero-flat-img.png\") 50% 100% no-repeat;\n  background-size: 1108px; }\n  @media (max-width: 767px) {\n    #page-products-deploy .top {\n      background-size: 780px;\n      padding-bottom: 360px; } }\n  #page-products-deploy .top .container {\n    display: -ms-flexbox;\n    display: flex;\n    -ms-flex-pack: justify;\n        justify-content: space-between; }\n    @media (max-width: 1219px) {\n      #page-products-deploy .top .container {\n        -ms-flex-direction: column;\n            flex-direction: column; } }\n  #page-products-deploy .top .container:before,\n  #page-products-deploy .top .container:after {\n    content: '';\n    display: none; }\n  #page-products-deploy .top hgroup {\n    padding-top: 99px;\n    max-width: 100%;\n    position: relative;\n    max-width: 555px; }\n    #page-products-deploy .top hgroup::before {\n      background: url(\"/img/pro/deploy/deploy-hero-icon.png\") 0 0 no-repeat;\n      background-size: 80px;\n      height: 80px;\n      width: 80px;\n      position: absolute;\n      top: 0;\n      left: 0;\n      content: ''; }\n    #page-products-deploy .top hgroup h1 {\n      letter-spacing: -.03em;\n      font-weight: 700;\n      font-size: 48px;\n      max-width: 420px; }\n    #page-products-deploy .top hgroup p {\n      font-size: 20px;\n      display: inline-block;\n      margin-top: 12px; }\n  #page-products-deploy .top .btns {\n    margin-top: 150px; }\n    #page-products-deploy .top .btns .btn {\n      font-size: 16px;\n      font-weight: 700; }\n      #page-products-deploy .top .btns .btn.purple {\n        background: #5657fb;\n        margin-right: 9px;\n        padding: 12px 19px 10px; }\n      #page-products-deploy .top .btns .btn.white {\n        color: #5657fb;\n        padding: 12px 19px 10px;\n        margin-right: 3px; }\n    @media (max-width: 1219px) {\n      #page-products-deploy .top .btns {\n        margin-top: 22px;\n        margin-bottom: 32px; } }\n  @media (max-width: 767px) {\n    #page-products-deploy .top hgroup:before {\n      left: 50%;\n      -webkit-transform: translateX(-40px);\n              transform: translateX(-40px); }\n    #page-products-deploy .top hgroup,\n    #page-products-deploy .top .btns {\n      text-align: center; }\n    #page-products-deploy .top hgroup,\n    #page-products-deploy .top hgroup h1 {\n      margin-left: auto;\n      margin-right: auto; } }\n\n#page-products-deploy section.skip {\n  background: #f6f8fc; }\n  #page-products-deploy section.skip .container {\n    position: relative;\n    padding-bottom: 38px; }\n  #page-products-deploy section.skip hgroup {\n    padding-top: 72px;\n    width: calc(50% - 77px);\n    padding-bottom: 50px; }\n    @media (max-width: 1219px) {\n      #page-products-deploy section.skip hgroup {\n        width: 100%;\n        text-align: center; } }\n  #page-products-deploy section.skip h2 {\n    line-height: 41px;\n    margin-bottom: 22px; }\n  #page-products-deploy section.skip p {\n    font-size: 16px;\n    letter-spacing: -0.02em; }\n    #page-products-deploy section.skip p strong {\n      color: #363a40; }\n  #page-products-deploy section.skip .items {\n    padding: 0;\n    width: calc(50% - 50px); }\n    @media (max-width: 767px) {\n      #page-products-deploy section.skip .items {\n        display: block;\n        text-align: center;\n        width: 100%; } }\n    #page-products-deploy section.skip .items p {\n      font-size: 16px;\n      font-weight: 600;\n      letter-spacing: -.026em;\n      line-height: 1.8em;\n      margin-bottom: 30px;\n      color: #5e6777; }\n  #page-products-deploy section.skip li {\n    -ms-flex: 0 1 254px;\n        flex: 0 1 254px;\n    padding-right: 6px; }\n    @media (max-width: 1219px) {\n      #page-products-deploy section.skip li {\n        -ms-flex-preferred-size: 321px;\n            flex-basis: 321px;\n        z-index: 1; } }\n    #page-products-deploy section.skip li::before {\n      background-image: url(\"/img/pro/deploy/feature-icons-sm.png\");\n      background-size: 48px; }\n    #page-products-deploy section.skip li.live::before {\n      background-position: 0 0; }\n    #page-products-deploy section.skip li.automatic::before {\n      background-position: 0 -48px; }\n    #page-products-deploy section.skip li.split::before {\n      background-position: 0 -96px; }\n    #page-products-deploy section.skip li.compliant::before {\n      background-position: 0 -144px; }\n  #page-products-deploy section.skip .graphics {\n    background: url(\"/img/pro/deploy/feature-img-skip.png\") 0 0 no-repeat;\n    background-size: 724px;\n    width: 724px;\n    height: 739px;\n    position: absolute;\n    bottom: 0;\n    right: 0;\n    top: auto;\n    opacity: 0;\n    transition: .2s opacity; }\n    @media (max-width: 991px) {\n      #page-products-deploy section.skip .graphics {\n        right: -160px; } }\n    @media (max-width: 767px) {\n      #page-products-deploy section.skip .graphics {\n        display: none; } }\n    #page-products-deploy section.skip .graphics.active {\n      opacity: 1; }\n\n#page-products-deploy section.live h2, #page-products-deploy section.latest h2, #page-products-deploy section.run h2 {\n  position: relative; }\n  #page-products-deploy section.live h2::before, #page-products-deploy section.latest h2::before, #page-products-deploy section.run h2::before {\n    background: url(\"/img/pro/deploy/feature-icons-lg.png\") 0 0 no-repeat;\n    background-size: 64px;\n    height: 64px;\n    width: 64px;\n    position: absolute;\n    top: 0;\n    left: 0;\n    content: ''; }\n    @media (max-width: 767px) {\n      #page-products-deploy section.live h2::before, #page-products-deploy section.latest h2::before, #page-products-deploy section.run h2::before {\n        left: calc(50% - 32px); } }\n\n@media (max-width: 767px) {\n  #page-products-deploy section.live .graphics, #page-products-deploy section.latest .graphics, #page-products-deploy section.run .graphics {\n    display: none; } }\n\n#page-products-deploy section.live {\n  background: linear-gradient(to right, #5b4cfc 0%, #8e83ff 100%);\n  overflow: hidden; }\n  #page-products-deploy section.live hgroup {\n    padding-top: 127px;\n    padding-bottom: 107px; }\n    @media (max-width: 767px) {\n      #page-products-deploy section.live hgroup {\n        width: 100%;\n        text-align: center; } }\n  #page-products-deploy section.live h2 {\n    padding-top: 83px;\n    margin-bottom: 20px;\n    font-size: 36px;\n    font-weight: 700;\n    letter-spacing: -0.03em;\n    line-height: 42px; }\n    #page-products-deploy section.live h2 span {\n      color: white; }\n  #page-products-deploy section.live p {\n    font-size: 16px;\n    letter-spacing: -0.02em;\n    color: white; }\n  #page-products-deploy section.live .graphics {\n    position: absolute;\n    right: 0;\n    width: 50%; }\n    #page-products-deploy section.live .graphics .iphone,\n    #page-products-deploy section.live .graphics .android {\n      position: absolute;\n      width: 330px;\n      height: 518px;\n      bottom: 0;\n      right: 0; }\n      #page-products-deploy section.live .graphics .iphone::after,\n      #page-products-deploy section.live .graphics .android::after {\n        background: no-repeat 0 0;\n        z-index: 1;\n        position: absolute;\n        top: 0;\n        right: 0;\n        width: 330px;\n        height: 518px;\n        content: ''; }\n      #page-products-deploy section.live .graphics .iphone .screen,\n      #page-products-deploy section.live .graphics .android .screen {\n        background: no-repeat 0 0;\n        position: absolute;\n        bottom: 0;\n        -webkit-animation: 10s screenPop-1 infinite;\n                animation: 10s screenPop-1 infinite; }\n        #page-products-deploy section.live .graphics .iphone .screen:nth-child(2),\n        #page-products-deploy section.live .graphics .android .screen:nth-child(2) {\n          -webkit-animation-name: screenPop-2;\n                  animation-name: screenPop-2; }\n        #page-products-deploy section.live .graphics .iphone .screen:nth-child(3),\n        #page-products-deploy section.live .graphics .android .screen:nth-child(3) {\n          -webkit-animation-name: screenPop-3;\n                  animation-name: screenPop-3; }\n    #page-products-deploy section.live .graphics .iphone {\n      right: 250px;\n      z-index: 1; }\n      @media (max-width: 991px) {\n        #page-products-deploy section.live .graphics .iphone {\n          right: 100px; } }\n      #page-products-deploy section.live .graphics .iphone::after {\n        background-image: url(\"/img/pro/deploy/feature-iphone-device.png\");\n        background-size: 330px; }\n      #page-products-deploy section.live .graphics .iphone .screen {\n        background-image: url(\"/img/pro/deploy/feature-iphone-screen-1.png\");\n        background-size: 266px;\n        width: 266px;\n        height: 396px;\n        right: 32px; }\n        #page-products-deploy section.live .graphics .iphone .screen:nth-child(2) {\n          background-image: url(\"/img/pro/deploy/feature-iphone-screen-2.png\");\n          background-size: 266px; }\n        #page-products-deploy section.live .graphics .iphone .screen:nth-child(3) {\n          background-image: url(\"/img/pro/deploy/feature-iphone-screen-3.png\");\n          background-size: 266px; }\n    #page-products-deploy section.live .graphics .android::after {\n      right: 0;\n      background-image: url(\"/img/pro/deploy/feature-android-device.png\");\n      background-size: 330px; }\n    #page-products-deploy section.live .graphics .android .screen {\n      background-image: url(\"/img/pro/deploy/feature-android-screen-1.png\");\n      background-size: 280px;\n      width: 280px;\n      height: 462px;\n      right: 26px;\n      -webkit-animation-delay: .25s;\n              animation-delay: .25s; }\n      #page-products-deploy section.live .graphics .android .screen:nth-child(2) {\n        background-image: url(\"/img/pro/deploy/feature-android-screen-2.png\");\n        background-size: 280px;\n        -webkit-animation-delay: .25s;\n                animation-delay: .25s; }\n      #page-products-deploy section.live .graphics .android .screen:nth-child(3) {\n        background-image: url(\"/img/pro/deploy/feature-android-screen-3.png\");\n        background-size: 280px;\n        -webkit-animation-delay: .25s;\n                animation-delay: .25s; }\n\n#page-products-deploy section.latest hgroup {\n  width: calc(50% - 108px);\n  padding-top: 132px;\n  padding-right: 25px;\n  padding-bottom: 121px; }\n  @media (max-width: 991px) {\n    #page-products-deploy section.latest hgroup {\n      width: 45%; } }\n  @media (max-width: 767px) {\n    #page-products-deploy section.latest hgroup {\n      width: 100%;\n      text-align: center;\n      padding-right: 0; } }\n\n#page-products-deploy section.latest h2 {\n  padding-top: 87px;\n  font-size: 27px;\n  letter-spacing: -.024em;\n  margin-bottom: 20px;\n  font-size: 36px;\n  font-weight: 700;\n  letter-spacing: -0.03em;\n  line-height: 42px; }\n  #page-products-deploy section.latest h2::before {\n    background-position: 0 -64px; }\n\n#page-products-deploy section.latest p {\n  font-size: 16px;\n  letter-spacing: -0.02em; }\n\n#page-products-deploy section.latest .graphics {\n  background: url(\"/img/pro/deploy/feature-img-latest.png\") 0 50% no-repeat;\n  background-size: 589px;\n  width: 589px;\n  position: absolute;\n  bottom: 0;\n  left: 0;\n  top: 0;\n  opacity: 0;\n  transition: .2s opacity; }\n  @media (max-width: 991px) {\n    #page-products-deploy section.latest .graphics {\n      background-size: 100%;\n      width: 50%; } }\n  #page-products-deploy section.latest .graphics.active {\n    opacity: 1; }\n\n#page-products-deploy section.run {\n  background: #f6f8fc; }\n  #page-products-deploy section.run hgroup {\n    padding-top: 126px;\n    padding-bottom: 108px; }\n    @media (max-width: 991px) {\n      #page-products-deploy section.run hgroup {\n        width: 45%; } }\n    @media (max-width: 767px) {\n      #page-products-deploy section.run hgroup {\n        width: 100%;\n        text-align: center; } }\n  #page-products-deploy section.run h2 {\n    padding-top: 83px;\n    margin-bottom: 20px;\n    font-size: 36px;\n    font-weight: 700;\n    letter-spacing: -0.03em;\n    line-height: 42px; }\n    #page-products-deploy section.run h2::before {\n      background-position: 0 -128px; }\n  #page-products-deploy section.run p {\n    font-size: 16px;\n    letter-spacing: -0.02em; }\n  #page-products-deploy section.run .graphics {\n    background: url(\"/img/pro/deploy/feature-img-abtest.png\") 50% 100% no-repeat;\n    background-size: 526px;\n    width: 526px;\n    height: 513px;\n    position: absolute;\n    bottom: 0;\n    right: 0;\n    top: auto;\n    opacity: 0;\n    transition: .2s opacity; }\n    @media (max-width: 991px) {\n      #page-products-deploy section.run .graphics {\n        background-size: 100%;\n        background-position: 100% 100%;\n        width: 50%; } }\n    #page-products-deploy section.run .graphics.active {\n      opacity: 1; }\n\n#page-products-deploy section.get-started {\n  background: #e7ecf6; }\n  #page-products-deploy section.get-started h2 {\n    color: #272a2f; }\n  #page-products-deploy section.get-started p {\n    color: #5e6777; }\n  #page-products-deploy section.get-started .btn {\n    padding: 12px 19px 10px;\n    font-size: 16px;\n    letter-spacing: -.02em;\n    font-weight: 700; }\n    #page-products-deploy section.get-started .btn.white {\n      color: #5244ff; }\n    #page-products-deploy section.get-started .btn.purple {\n      background: #5a4dfc;\n      margin-right: 2px; }\n\n.products-page {\n  font-family: \"Eina\", \"Helvetica Neue\", Helvetica, sans-serif;\n  position: relative; }\n  .products-page .top {\n    position: relative; }\n    .products-page .top h1 {\n      letter-spacing: -.03em;\n      font-weight: 700;\n      font-size: 48px; }\n    .products-page .top p {\n      font-size: 20px;\n      font-weight: 600;\n      margin-top: 17px;\n      display: inline-block;\n      letter-spacing: -.03em;\n      line-height: 1.5em;\n      color: #2f3744; }\n    .products-page .top .graphics {\n      position: absolute; }\n  .products-page .center hgroup {\n    padding-top: 100px;\n    text-align: center;\n    max-width: 748px;\n    margin: 0 auto 18px; }\n    .products-page .center hgroup h2 {\n      font-size: 36px;\n      font-weight: 700;\n      letter-spacing: -.03em;\n      color: #161a1f; }\n    .products-page .center hgroup p {\n      font-size: 18px;\n      color: #5e6777;\n      margin-top: 29px;\n      letter-spacing: -0.03em;\n      line-height: 1.8em;\n      font-weight: 600; }\n    .products-page .center hgroup p strong {\n      color: #272a2f;\n      font-weight: 700; }\n  .products-page ul.items {\n    padding: 48px 14px;\n    display: -ms-flexbox;\n    display: flex;\n    -ms-flex-pack: justify;\n        justify-content: space-between;\n    -ms-flex-wrap: wrap;\n        flex-wrap: wrap; }\n    .products-page ul.items li {\n      list-style: none;\n      padding-top: 67px;\n      position: relative; }\n      .products-page ul.items li::before {\n        background: 0 0 no-repeat;\n        background-size: 100%;\n        height: 48px;\n        width: 48px;\n        content: '';\n        display: block;\n        position: absolute;\n        top: 0; }\n      .products-page ul.items li strong {\n        letter-spacing: -.03em;\n        display: inline-block;\n        font-size: 17px;\n        text-transform: none;\n        letter-spacing: .001em;\n        margin-top: 4px;\n        margin-bottom: 10px; }\n      .products-page ul.items li p {\n        font-size: 16px;\n        font-weight: 600;\n        letter-spacing: -.026em;\n        line-height: 1.8em;\n        margin-bottom: 30px;\n        color: #5e6777; }\n      @media (max-width: 767px) {\n        .products-page ul.items li {\n          display: block;\n          -ms-flex-preferred-size: 100%;\n              flex-basis: 100%;\n          text-align: center; }\n          .products-page ul.items li::before {\n            left: calc(50% - 24px); } }\n  .products-page section.left .container,\n  .products-page section.right .container,\n  .products-page section.both .container {\n    position: relative; }\n  .products-page section.left hgroup,\n  .products-page section.right hgroup,\n  .products-page section.both hgroup {\n    padding-top: 208px;\n    padding-bottom: 151px;\n    width: calc(50% - 147px);\n    position: relative; }\n    @media (max-width: 991px) {\n      .products-page section.left hgroup,\n      .products-page section.right hgroup,\n      .products-page section.both hgroup {\n        width: calc(50% - 48px); } }\n    .products-page section.left hgroup::before,\n    .products-page section.right hgroup::before,\n    .products-page section.both hgroup::before {\n      background: 0 0 no-repeat;\n      background-size: 100%;\n      height: 64px;\n      width: 64px;\n      content: '';\n      position: absolute;\n      top: 126px;\n      display: block; }\n    .products-page section.left hgroup::after,\n    .products-page section.right hgroup::after,\n    .products-page section.both hgroup::after {\n      content: '';\n      clear: both;\n      display: table; }\n    .products-page section.left hgroup h2,\n    .products-page section.right hgroup h2,\n    .products-page section.both hgroup h2 {\n      margin-bottom: 20px;\n      font-size: 36px;\n      font-weight: 700;\n      letter-spacing: -0.03em;\n      line-height: 42px; }\n    .products-page section.left hgroup p,\n    .products-page section.right hgroup p,\n    .products-page section.both hgroup p {\n      font-size: 16px;\n      font-weight: 600;\n      letter-spacing: -.026em;\n      line-height: 1.8em;\n      margin-bottom: 30px;\n      color: #5e6777; }\n      .products-page section.left hgroup p strong,\n      .products-page section.right hgroup p strong,\n      .products-page section.both hgroup p strong {\n        font-weight: 600; }\n  .products-page section.left .graphics,\n  .products-page section.right .graphics,\n  .products-page section.both .graphics {\n    background: 0 50% no-repeat;\n    background-size: 100%;\n    width: 470px;\n    position: absolute;\n    right: 0;\n    bottom: 0;\n    top: 0;\n    opacity: 0; }\n    .products-page section.left .graphics.activateOnScroll,\n    .products-page section.right .graphics.activateOnScroll,\n    .products-page section.both .graphics.activateOnScroll {\n      -webkit-filter: blur(10px);\n              filter: blur(10px);\n      transition: .4s opacity, .4s filter; }\n      .products-page section.left .graphics.activateOnScroll.active,\n      .products-page section.right .graphics.activateOnScroll.active,\n      .products-page section.both .graphics.activateOnScroll.active {\n        opacity: 1;\n        -webkit-filter: blur(0);\n                filter: blur(0); }\n    @media (max-width: 991px) {\n      .products-page section.left .graphics,\n      .products-page section.right .graphics,\n      .products-page section.both .graphics {\n        right: -20%; } }\n  .products-page section.right hgroup {\n    float: right; }\n  .products-page section.right .graphics {\n    right: auto;\n    left: 0; }\n    @media (max-width: 991px) {\n      .products-page section.right .graphics {\n        left: -20%; } }\n  .products-page section.both .container {\n    display: -ms-flexbox;\n    display: flex;\n    clear: both;\n    -ms-flex-pack: justify;\n        justify-content: space-between; }\n    .products-page section.both .container::before, .products-page section.both .container::after {\n      display: none; }\n  .products-page .get-started {\n    background: 0 0 no-repeat;\n    background-size: cover; }\n    .products-page .get-started .container {\n      display: -ms-flexbox;\n      display: flex;\n      padding-top: 101px;\n      padding-bottom: 102px;\n      -ms-flex-wrap: wrap;\n          flex-wrap: wrap;\n      -ms-flex-align: center;\n          align-items: center; }\n      .products-page .get-started .container::before, .products-page .get-started .container::after {\n        display: none; }\n      @media (max-width: 991px) {\n        .products-page .get-started .container {\n          text-align: center; } }\n    .products-page .get-started hgroup,\n    .products-page .get-started .btns {\n      display: inline-block; }\n    .products-page .get-started hgroup {\n      -ms-flex-positive: 1;\n          flex-grow: 1; }\n    .products-page .get-started h2 {\n      color: white;\n      font-size: 28px;\n      letter-spacing: -.03em;\n      margin-top: 30px;\n      margin-bottom: 5px;\n      font-weight: 600; }\n    .products-page .get-started p {\n      font-size: 20px;\n      font-weight: 600;\n      letter-spacing: -.02em;\n      color: #003e82; }\n    .products-page .get-started .btns .btn {\n      padding: 12px 19px 10px;\n      font-size: 16px;\n      font-weight: 700; }\n      .products-page .get-started .btns .btn:last-child {\n        margin-right: -5px; }\n      @media (max-width: 767px) {\n        .products-page .get-started .btns .btn {\n          text-align: center;\n          display: block;\n          margin: 16px auto; } }\n    @media (max-width: 991px) {\n      .products-page .get-started .btns {\n        width: 100%; } }\n\n#page-products-monitor .top {\n  margin-top: -150px;\n  padding-top: 174px;\n  background: #0c1c1c;\n  background: linear-gradient(to right, #051312 0%, #112624 100%);\n  text-align: center; }\n  #page-products-monitor .top hgroup {\n    padding-top: 97px;\n    padding-bottom: 355px;\n    position: relative; }\n    #page-products-monitor .top hgroup::before {\n      background: url(\"/img/pro/monitor/monitor-cta-icon.png\") 0 0 no-repeat;\n      background-size: 80px;\n      width: 80px;\n      height: 80px;\n      content: '';\n      position: absolute;\n      top: 0;\n      left: calc(50% - 40px); }\n  #page-products-monitor .top h1 {\n    color: white;\n    letter-spacing: -.03em;\n    font-weight: 700;\n    font-size: 48px;\n    max-width: 860px;\n    margin-left: auto;\n    margin-right: auto; }\n  #page-products-monitor .top p {\n    color: #abb3b2;\n    max-width: 760px;\n    margin-bottom: 32px; }\n    #page-products-monitor .top p strong {\n      color: white;\n      font-weight: 700; }\n  #page-products-monitor .top .btns {\n    margin-top: 16px; }\n    #page-products-monitor .top .btns .btn {\n      font-size: 16px;\n      font-weight: 700; }\n      #page-products-monitor .top .btns .btn.green {\n        background: #31ca74;\n        padding: 12px 19px 10px;\n        margin-right: 9px; }\n      #page-products-monitor .top .btns .btn.dark {\n        color: #31ca74;\n        background: #313f3f;\n        padding: 12px 19px 10px; }\n\n#page-products-monitor #heart-monitor-stage {\n  height: 250px;\n  width: 400px;\n  position: absolute;\n  bottom: 64px;\n  left: calc(50% - 200px);\n  overflow: hidden; }\n  #page-products-monitor #heart-monitor-stage #grid {\n    background-color: transparent;\n    background-image: linear-gradient(0deg, transparent 24%, rgba(255, 255, 255, 0.05) 25%, rgba(255, 255, 255, 0.05) 26%, transparent 27%, transparent 74%, rgba(255, 255, 255, 0.05) 75%, rgba(255, 255, 255, 0.05) 76%, transparent 77%, transparent), linear-gradient(90deg, transparent 24%, rgba(255, 255, 255, 0.05) 25%, rgba(255, 255, 255, 0.05) 26%, transparent 27%, transparent 74%, rgba(255, 255, 255, 0.05) 75%, rgba(255, 255, 255, 0.05) 76%, transparent 77%, transparent);\n    height: 100%;\n    background-size: 50px 50px;\n    -webkit-mask-image: radial-gradient(black 20%, transparent 70%);\n            mask-image: radial-gradient(black 20%, transparent 70%); }\n  #page-products-monitor #heart-monitor-stage #edges,\n  #page-products-monitor #heart-monitor-stage #spotlight {\n    background-image: linear-gradient(to right, #051413, #102624);\n    position: absolute;\n    top: 0;\n    right: 0;\n    bottom: 0;\n    left: 0;\n    z-index: 1;\n    -webkit-mask-image: radial-gradient(transparent 50%, black 70%);\n            mask-image: radial-gradient(transparent 50%, black 70%); }\n  #page-products-monitor #heart-monitor-stage #spotlight {\n    left: -100%;\n    -webkit-mask-image: radial-gradient(transparent 30%, black 80%);\n            mask-image: radial-gradient(transparent 30%, black 80%); }\n  #page-products-monitor #heart-monitor-stage svg {\n    width: 100%;\n    height: 100%;\n    position: absolute;\n    top: 0; }\n  #page-products-monitor #heart-monitor-stage .path {\n    fill: transparent;\n    stroke: rgba(0, 200, 126, 0.5);\n    stroke-miterlimit: 10; }\n  #page-products-monitor #heart-monitor-stage .path-3 {\n    fill: transparent;\n    stroke: rgba(0, 200, 126, 0.8);\n    stroke-miterlimit: 10; }\n  #page-products-monitor #heart-monitor-stage .path-2 {\n    fill: transparent;\n    stroke: #9affc0;\n    stroke-miterlimit: 20; }\n\n#page-products-monitor .pinpoint .container {\n  max-width: 1092px; }\n\n#page-products-monitor .pinpoint hgroup {\n  max-width: 960px; }\n  #page-products-monitor .pinpoint hgroup h3 {\n    text-transform: uppercase;\n    color: #1ed176;\n    font-weight: 700;\n    letter-spacing: .06em;\n    font-size: 24px; }\n  #page-products-monitor .pinpoint hgroup h2 {\n    margin-top: 15px; }\n  #page-products-monitor .pinpoint hgroup p strong {\n    font-weight: 600; }\n\n#page-products-monitor .pinpoint .items {\n  padding: 50px 0 46px; }\n  #page-products-monitor .pinpoint .items li {\n    -ms-flex: 0 1 303px;\n        flex: 0 1 303px; }\n    @media (max-width: 991px) {\n      #page-products-monitor .pinpoint .items li {\n        -ms-flex-preferred-size: 200px;\n            flex-basis: 200px; } }\n    @media (max-width: 767px) {\n      #page-products-monitor .pinpoint .items li {\n        -ms-flex-preferred-size: 100%;\n            flex-basis: 100%; } }\n    #page-products-monitor .pinpoint .items li::before {\n      background: url(\"/img/pro/monitor/feature-icons-sm.png\") 0 0 no-repeat;\n      background-size: 48px; }\n    #page-products-monitor .pinpoint .items li.built::before {\n      background-position: 0 -48px; }\n    #page-products-monitor .pinpoint .items li.typescript::before {\n      background-position: 0 -96px; }\n  #page-products-monitor .pinpoint .items strong {\n    margin-bottom: 10px; }\n  #page-products-monitor .pinpoint .items p {\n    font-size: 16px;\n    letter-spacing: -.02em;\n    line-height: 28px; }\n\n#page-products-monitor .pinpoint .get-started {\n  background: transparent;\n  border-top: 1px solid #f0f4f8;\n  padding-top: 30px;\n  padding-bottom: 64px;\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-align: center;\n      align-items: center; }\n  #page-products-monitor .pinpoint .get-started hgroup {\n    text-align: left;\n    margin-left: 0;\n    padding-top: 0;\n    margin-top: 20px; }\n  #page-products-monitor .pinpoint .get-started h2 {\n    color: #1ed176;\n    margin-bottom: 0;\n    font-size: 28px;\n    letter-spacing: -.03em;\n    font-weight: 600; }\n  #page-products-monitor .pinpoint .get-started p {\n    margin-top: 0;\n    letter-spacing: -.02em; }\n    #page-products-monitor .pinpoint .get-started p strong {\n      font-weight: 700;\n      letter-spacing: 0; }\n  #page-products-monitor .pinpoint .get-started .btn {\n    background: #1ed176;\n    margin-right: 4px;\n    padding: 12px 19px 10px;\n    font-size: 16px;\n    font-weight: 700;\n    letter-spacing: .01em; }\n  @media (max-width: 991px) {\n    #page-products-monitor .pinpoint .get-started .btns {\n      width: auto; } }\n\n#page-products-monitor section.left hgroup::before,\n#page-products-monitor section.right hgroup::before,\n#page-products-monitor section.both hgroup::before {\n  background-image: url(\"/img/pro/monitor/feature-icons-lg.png\");\n  background-size: 64px; }\n  @media (max-width: 991px) {\n    #page-products-monitor section.left hgroup::before,\n    #page-products-monitor section.right hgroup::before,\n    #page-products-monitor section.both hgroup::before {\n      left: calc(50% - 32px); } }\n\n#page-products-monitor section.left h2,\n#page-products-monitor section.right h2,\n#page-products-monitor section.both h2 {\n  margin-bottom: 20px;\n  font-size: 36px;\n  font-weight: 700;\n  letter-spacing: -0.03em;\n  line-height: 42px; }\n\n#page-products-monitor section.left p,\n#page-products-monitor section.right p,\n#page-products-monitor section.both p {\n  font-size: 17px;\n  letter-spacing: -.008em; }\n\n@media (max-width: 991px) {\n  #page-products-monitor section.left hgroup,\n  #page-products-monitor section.right hgroup,\n  #page-products-monitor section.both hgroup {\n    width: 100%;\n    float: none;\n    text-align: center; } }\n\n#page-products-monitor .confidence {\n  background: #f4f9f7;\n  position: relative; }\n  #page-products-monitor .confidence .container {\n    position: static; }\n  #page-products-monitor .confidence hgroup {\n    position: relative;\n    z-index: 1; }\n  #page-products-monitor .confidence .graphics {\n    background-image: url(\"/img/pro/monitor/feature-img-confidence.png\");\n    background-size: 1145px;\n    background-position: bottom center;\n    width: 1145px; }\n    @media (max-width: 1219px) {\n      #page-products-monitor .confidence .graphics {\n        right: -20%; } }\n    @media (max-width: 991px) {\n      #page-products-monitor .confidence .graphics {\n        display: none; } }\n\n#page-products-monitor .ahead {\n  background: #e1ebe9; }\n  #page-products-monitor .ahead hgroup::before {\n    background-position: 0 -64px; }\n  #page-products-monitor .ahead .graphics {\n    background-image: url(\"/img/pro/monitor/feature-img-ahead.png\");\n    background-size: 621px;\n    width: 621px; }\n    @media (max-width: 991px) {\n      #page-products-monitor .ahead .graphics {\n        display: none; } }\n\n#page-products-monitor .both {\n  background: linear-gradient(to right, #7c9c91 50%, #4e7366 50%); }\n  #page-products-monitor .both hgroup::before {\n    background-position: 0 -128px; }\n  #page-products-monitor .both hgroup + hgroup::before {\n    background-position: 0 -192px; }\n  #page-products-monitor .both h2 {\n    color: white; }\n  #page-products-monitor .both p {\n    color: #bdd8d3; }\n    #page-products-monitor .both p strong {\n      color: #e5fefa; }\n  @media (max-width: 991px) {\n    #page-products-monitor .both {\n      background: linear-gradient(to bottom, #7c9c91 50%, #4e7366 50%); }\n      #page-products-monitor .both .container {\n        display: block; } }\n\n#page-products-monitor section.get-started {\n  background: #e6f1ed; }\n  #page-products-monitor section.get-started h2 {\n    color: #202624; }\n  #page-products-monitor section.get-started p {\n    color: #556861; }\n    #page-products-monitor section.get-started p strong {\n      font-weight: 600; }\n  #page-products-monitor section.get-started .btn.green {\n    background: #1ed176; }\n  #page-products-monitor section.get-started .btn.white {\n    color: #1ed176; }\n\n#page-products-package .sub-header > .container {\n  z-index: 2; }\n\n#page-products-package .top {\n  clear: both;\n  position: relative;\n  top: -144px;\n  overflow: hidden;\n  padding-top: 178px;\n  background: #e7a2dd;\n  background: linear-gradient(to right, #c696f8 0%, #fca5a7 100%); }\n  #page-products-package .top hgroup {\n    padding-top: 103px;\n    padding-bottom: 148px;\n    text-align: left;\n    position: relative;\n    z-index: 5; }\n    #page-products-package .top hgroup::before {\n      background: url(\"/img/pro/package/package-hero-icon.png\") no-repeat 0 0;\n      background-size: 80px;\n      width: 80px;\n      height: 80px;\n      content: '';\n      position: absolute;\n      top: 0;\n      left: 15px; }\n    #page-products-package .top hgroup h1,\n    #page-products-package .top hgroup p {\n      color: white; }\n    #page-products-package .top hgroup h1 {\n      max-width: 350px; }\n    #page-products-package .top hgroup p {\n      color: rgba(255, 255, 255, 0.9);\n      max-width: 475px;\n      letter-spacing: -.03em;\n      line-height: 1.5em;\n      font-size: 20px; }\n      #page-products-package .top hgroup p strong {\n        color: white; }\n    #page-products-package .top hgroup .btns {\n      margin-top: 32px; }\n      #page-products-package .top hgroup .btns .btn {\n        font-size: 16px;\n        font-weight: 700; }\n        #page-products-package .top hgroup .btns .btn.pink {\n          background: #e33766;\n          margin-right: 9px;\n          padding: 12px 19px 12px; }\n        #page-products-package .top hgroup .btns .btn.white {\n          color: #e33766;\n          padding: 12px 19px 12px; }\n  @media (max-width: 767px) {\n    #page-products-package .top hgroup:before {\n      left: 50%;\n      -webkit-transform: translateX(-40px);\n              transform: translateX(-40px); }\n    #page-products-package .top hgroup,\n    #page-products-package .top .btns {\n      text-align: center; }\n    #page-products-package .top hgroup,\n    #page-products-package .top hgroup h1 {\n      margin-left: auto;\n      margin-right: auto; } }\n  #page-products-package .top .graphics {\n    position: absolute;\n    top: 0;\n    right: 0;\n    bottom: 0;\n    width: 50%;\n    z-index: 1; }\n  #page-products-package .top .cloud {\n    opacity: 0;\n    position: absolute;\n    top: 200px;\n    left: -200px;\n    width: 346px;\n    height: 312px;\n    -webkit-animation: 40s floatingCloud linear infinite;\n            animation: 40s floatingCloud linear infinite;\n    z-index: 5; }\n    #page-products-package .top .cloud::before {\n      background: url(\"/img/pro/package/package-hero-cloud.png\") no-repeat 0 0;\n      background-size: 346px;\n      top: 0;\n      bottom: 0;\n      right: 0;\n      left: 0;\n      content: '';\n      position: absolute; }\n    #page-products-package .top .cloud .build {\n      background: url(\"/img/pro/package/package-hero-app-icon.png\") no-repeat 0 0;\n      background-size: 87px;\n      width: 87px;\n      height: 116px;\n      content: '';\n      position: absolute;\n      top: 30px;\n      left: 20px;\n      -webkit-animation: 10s rainDrop linear infinite;\n              animation: 10s rainDrop linear infinite;\n      z-index: 6; }\n      #page-products-package .top .cloud .build:nth-child(2) {\n        top: 166px;\n        left: 220px;\n        -webkit-animation-delay: .8s;\n                animation-delay: .8s;\n        -webkit-animation-duration: 8s;\n                animation-duration: 8s; }\n      #page-products-package .top .cloud .build:nth-child(3) {\n        top: 33px;\n        left: 130px;\n        -webkit-animation-delay: 1.8s;\n                animation-delay: 1.8s;\n        -webkit-animation-duration: 9s;\n                animation-duration: 9s; }\n      #page-products-package .top .cloud .build:nth-child(4) {\n        top: 50px;\n        left: 60px;\n        -webkit-animation-delay: 2.8s;\n                animation-delay: 2.8s;\n        -webkit-animation-duration: 12s;\n                animation-duration: 12s; }\n    #page-products-package .top .cloud:nth-child(2) {\n      top: 0;\n      left: 0;\n      -webkit-transform: scale3d(0.5, 0.5, 1);\n              transform: scale3d(0.5, 0.5, 1);\n      -webkit-animation-name: floatingCloud-2;\n              animation-name: floatingCloud-2;\n      -webkit-animation-duration: 60s;\n              animation-duration: 60s;\n      -webkit-animation-delay: 10s;\n              animation-delay: 10s;\n      z-index: 1; }\n      #page-products-package .top .cloud:nth-child(2) .build {\n        z-index: 2;\n        -webkit-animation-delay: 1s;\n                animation-delay: 1s; }\n        #page-products-package .top .cloud:nth-child(2) .build:nth-child(2) {\n          -webkit-animation-delay: 2s;\n                  animation-delay: 2s; }\n        #page-products-package .top .cloud:nth-child(2) .build:nth-child(3) {\n          -webkit-animation-delay: 3s;\n                  animation-delay: 3s; }\n        #page-products-package .top .cloud:nth-child(2) .build:nth-child(4) {\n          -webkit-animation-delay: 4s;\n                  animation-delay: 4s; }\n    #page-products-package .top .cloud:nth-child(3) {\n      top: 10px;\n      left: -150px;\n      -webkit-animation-name: floatingCloud-3;\n              animation-name: floatingCloud-3;\n      -webkit-animation-duration: 50s;\n              animation-duration: 50s;\n      -webkit-animation-delay: 2s;\n              animation-delay: 2s;\n      z-index: 3; }\n      #page-products-package .top .cloud:nth-child(3) .build {\n        z-index: 4;\n        -webkit-animation-delay: .1s;\n                animation-delay: .1s; }\n        #page-products-package .top .cloud:nth-child(3) .build:nth-child(2) {\n          -webkit-animation-delay: .2s;\n                  animation-delay: .2s; }\n        #page-products-package .top .cloud:nth-child(3) .build:nth-child(3) {\n          -webkit-animation-delay: .3s;\n                  animation-delay: .3s; }\n        #page-products-package .top .cloud:nth-child(3) .build:nth-child(4) {\n          -webkit-animation-delay: .4s;\n                  animation-delay: .4s; }\n    #page-products-package .top .cloud:nth-child(4) {\n      top: 300px;\n      left: -250px;\n      -webkit-animation-name: floatingCloud-4;\n              animation-name: floatingCloud-4;\n      -webkit-animation-duration: 30s;\n              animation-duration: 30s;\n      -webkit-animation-delay: 2s;\n              animation-delay: 2s;\n      z-index: 3; }\n      #page-products-package .top .cloud:nth-child(4) .build {\n        z-index: 4;\n        -webkit-animation-delay: .1s;\n                animation-delay: .1s; }\n        #page-products-package .top .cloud:nth-child(4) .build:nth-child(2) {\n          -webkit-animation-delay: .2s;\n                  animation-delay: .2s; }\n        #page-products-package .top .cloud:nth-child(4) .build:nth-child(3) {\n          -webkit-animation-delay: .3s;\n                  animation-delay: .3s; }\n        #page-products-package .top .cloud:nth-child(4) .build:nth-child(4) {\n          -webkit-animation-delay: .4s;\n                  animation-delay: .4s; }\n\n#page-products-package .features {\n  position: relative;\n  z-index: 10;\n  background: linear-gradient(to right, #efddff 0, #ffe3e4 100%); }\n  @supports ((-webkit-backdrop-filter: blur(10px)) or (backdrop-filter: blur(10px))) {\n    #page-products-package .features {\n      -webkit-backdrop-filter: blur(10px);\n              backdrop-filter: blur(10px);\n      background: rgba(255, 255, 255, 0.6); } }\n  #page-products-package .features ul {\n    padding: 71px 0px 45px; }\n    @media (max-width: 767px) {\n      #page-products-package .features ul {\n        display: block; } }\n  #page-products-package .features li {\n    -ms-flex: 0 1 315px;\n        flex: 0 1 315px; }\n    @media (max-width: 1219px) {\n      #page-products-package .features li {\n        -ms-flex: 0 1 303px;\n            flex: 0 1 303px; } }\n    #page-products-package .features li::before {\n      background-image: url(\"/img/pro/package/feature-icons-sm.png\");\n      background-size: 48px; }\n    #page-products-package .features li.zero::before {\n      background-position: 0 -48px; }\n    #page-products-package .features li.peace::before {\n      background-position: 0 -96px; }\n  #page-products-package .features p {\n    letter-spacing: -0.02em;\n    margin-top: 2px;\n    margin-right: 5px; }\n\n#page-products-package main {\n  margin-top: -144px; }\n\n#page-products-package .turn {\n  background: #f8f5fb; }\n  #page-products-package .turn hgroup {\n    max-width: 740px;\n    padding-top: 100px;\n    padding-bottom: 423px; }\n    @media (max-width: 1219px) {\n      #page-products-package .turn hgroup {\n        padding-bottom: 314px; } }\n  #page-products-package .turn p {\n    margin-top: 30px; }\n  #page-products-package .turn .container {\n    position: relative; }\n  #page-products-package .turn .graphics {\n    width: 1056px;\n    height: 401px;\n    position: absolute;\n    bottom: 0;\n    left: calc(50% - 544px); }\n    #page-products-package .turn .graphics .html {\n      background: no-repeat 0 0 url(\"/img/pro/package/package-img-css-file.png\");\n      background-size: 150px;\n      width: 150px;\n      height: 180px;\n      content: '';\n      position: absolute;\n      left: -3px;\n      top: 76px; }\n      #page-products-package .turn .graphics .html::before, #page-products-package .turn .graphics .html::after {\n        background: no-repeat 0 0 url(\"/img/pro/package/package-img-html-file.png\");\n        background-size: 150px;\n        width: 150px;\n        height: 180px;\n        content: '';\n        position: absolute;\n        left: 67px;\n        top: 5px; }\n      #page-products-package .turn .graphics .html::after {\n        background-image: url(\"/img/pro/package/package-img-js-file.png\");\n        background-size: 150px;\n        left: 137px;\n        top: -2px; }\n    #page-products-package .turn .graphics .app {\n      background: no-repeat 0 0 url(\"/img/pro/package/package-img-ipa-file.png\");\n      background-size: 150px;\n      width: 150px;\n      height: 180px;\n      content: '';\n      position: absolute;\n      left: 912px;\n      top: 81px; }\n      #page-products-package .turn .graphics .app::before {\n        background: no-repeat 0 0 url(\"/img/pro/package/package-img-apk-file.png\");\n        background-size: 150px;\n        width: 150px;\n        height: 180px;\n        content: '';\n        position: absolute;\n        left: -100px;\n        top: 2px; }\n    #page-products-package .turn .graphics .circles {\n      width: 1056px;\n      margin: 0 auto; }\n    #page-products-package .turn .graphics .box {\n      background: no-repeat 0 0 url(\"/img/pro/package/package-img-server.png\");\n      background-size: 460px;\n      width: 460px;\n      height: 402px;\n      content: '';\n      position: absolute;\n      left: 375px;\n      top: 1px; }\n      #page-products-package .turn .graphics .box::before {\n        background: no-repeat center center url(\"/img/pro/package/ionic-package-server-light.jpg.png\");\n        background-size: 45px;\n        width: 44px;\n        height: 44px;\n        content: '';\n        position: absolute;\n        left: 262px;\n        top: 95px;\n        opacity: 0;\n        transition: opacity .3s; }\n      #page-products-package .turn .graphics .box.active::before {\n        opacity: 1; }\n    #page-products-package .turn .graphics .circle {\n      height: 7px;\n      width: 7px;\n      position: absolute;\n      top: 169px;\n      left: 288px;\n      border-radius: 50%;\n      background: #e5e9f1; }\n      #page-products-package .turn .graphics .circle::before {\n        position: absolute;\n        top: 0;\n        left: 0;\n        right: 0;\n        bottom: 0;\n        opacity: 0;\n        content: '';\n        border-radius: 50%;\n        background-color: #f8556c;\n        transition: opacity .6s; }\n      #page-products-package .turn .graphics .circle.active::before {\n        opacity: 1; }\n      #page-products-package .turn .graphics .circle:nth-child(2) {\n        left: 308px; }\n      #page-products-package .turn .graphics .circle:nth-child(3) {\n        left: 328px; }\n      #page-products-package .turn .graphics .circle:nth-child(4) {\n        left: 348px; }\n      #page-products-package .turn .graphics .circle:nth-child(5) {\n        left: 367px; }\n      #page-products-package .turn .graphics .circle:nth-child(6) {\n        left: 711px; }\n      #page-products-package .turn .graphics .circle:nth-child(7) {\n        left: 731px; }\n      #page-products-package .turn .graphics .circle:nth-child(8) {\n        left: 750px; }\n      #page-products-package .turn .graphics .circle:nth-child(9) {\n        left: 770px; }\n      #page-products-package .turn .graphics .circle:nth-child(10) {\n        left: 790px; }\n    @media (max-width: 1219px) {\n      #page-products-package .turn .graphics {\n        -webkit-transform: scale3d(0.5, 0.5, 1);\n                transform: scale3d(0.5, 0.5, 1);\n        left: calc(50% - 526px); } }\n    @media (max-width: 767px) {\n      #page-products-package .turn .graphics {\n        -webkit-transform: scale3d(0.3, 0.3, 1);\n                transform: scale3d(0.3, 0.3, 1); } }\n\n#page-products-package .leave hgroup {\n  width: calc(50% - 130px);\n  padding-top: 100px;\n  padding-bottom: 100px; }\n  @media (max-width: 767px) {\n    #page-products-package .leave hgroup {\n      width: 100%;\n      text-align: center; } }\n\n#page-products-package .leave h2 {\n  letter-spacing: -.015em;\n  margin-bottom: 31px; }\n\n#page-products-package .leave p {\n  font-size: 16px;\n  letter-spacing: -0.02em;\n  line-height: 1.8em;\n  margin-bottom: 18px;\n  color: #5e6777; }\n  #page-products-package .leave p strong {\n    font-weight: 600; }\n\n#page-products-package .leave .container {\n  position: relative;\n  overflow: hidden; }\n  #page-products-package .leave .container::after {\n    background: url(\"/img/pro/package/floating-app-icons.png\") 0 0 no-repeat;\n    background-size: 682px;\n    width: 682px;\n    height: 650px;\n    content: '';\n    position: absolute;\n    top: -96px;\n    right: 0;\n    pointer-events: none; }\n\n@media (max-width: 991px) {\n  #page-products-package .leave hgroup {\n    width: 100%;\n    text-align: center; }\n  #page-products-package .leave .container::after {\n    opacity: .5; } }\n\n#page-products-package .get-started {\n  background: linear-gradient(to right, #c696f8 0%, #fca5a7 100%); }\n  #page-products-package .get-started h2 {\n    margin-bottom: 7px; }\n  #page-products-package .get-started p {\n    color: #601baa; }\n    #page-products-package .get-started p strong {\n      font-weight: 600; }\n  #page-products-package .get-started .btn {\n    padding: 12px 19px 10px;\n    font-size: 16px;\n    letter-spacing: -.02em;\n    font-weight: 700; }\n    #page-products-package .get-started .btn.pink {\n      background: #f34971;\n      margin-right: 2px; }\n    #page-products-package .get-started .btn.white {\n      background: white;\n      color: #e93677; }\n\n#page-products-for-teams main,\n#page-products-for-teams .sub-header,\n#page-products-for-teams .cta {\n  font-family: \"Eina\", \"Helvetica Neue\", Helvetica, sans-serif; }\n\n#page-products-for-teams .sub-header > .container {\n  -ms-flex-align: center;\n      align-items: center; }\n\n#page-products-for-teams .cta {\n  background-color: #12223a;\n  background-image: url(\"/img/pro/teams-hero-bg.jpg\"), linear-gradient(120deg, #12223a, #000a1c);\n  background-size: cover, 100%;\n  background-position: 50% 50%;\n  margin-top: -136px;\n  padding-top: 136px;\n  text-align: center;\n  position: relative; }\n\n#page-products-for-teams .cta hgroup {\n  padding-bottom: 114px; }\n\n#page-products-for-teams .cta h1 {\n  font-size: 48px;\n  font-weight: 700;\n  margin-top: 30px; }\n\n#page-products-for-teams .cta p {\n  color: #a0abbf;\n  font-weight: 600; }\n\n#page-products-for-teams .cta p strong {\n  color: #ccd4e3; }\n\n#page-products-for-teams .cta-buttons {\n  margin-top: 50px; }\n\n#page-products-for-teams .cta .btn {\n  color: #ffffff;\n  font-size: 16px;\n  font-weight: 700;\n  padding: 14px 24px; }\n  #page-products-for-teams .cta .btn.secondary {\n    background-color: #21314e; }\n\n#page-products-for-teams .cta .logo-field {\n  -ms-flex-align: center;\n      align-items: center;\n  display: -ms-flexbox;\n  display: flex;\n  height: 120px;\n  -ms-flex-pack: center;\n      justify-content: center;\n  overflow: hidden;\n  position: relative; }\n  #page-products-for-teams .cta .logo-field::before {\n    background-image: linear-gradient(rgba(200, 225, 255, 0.08), rgba(200, 220, 255, 0.08)), url(/img/pro/teams-hero-bg.jpg);\n    background-size: 100%, cover;\n    background-position: 50% 50%, 50% 50%;\n    position: absolute;\n    content: '';\n    top: calc(100% - 661px);\n    width: 100%;\n    height: 661px;\n    -webkit-filter: blur(24px);\n            filter: blur(24px); }\n  #page-products-for-teams .cta .logo-field img {\n    max-width: 895px;\n    width: 80%;\n    position: relative; }\n  @media (max-width: 768px) {\n    #page-products-for-teams .cta .logo-field {\n      display: none; } }\n\n#page-products-for-teams .hero {\n  background-repeat: no-repeat;\n  padding: 260px 0; }\n  @media (max-width: 1220px) {\n    #page-products-for-teams .hero {\n      padding: 20% 0; } }\n\n#page-products-for-teams .hero .container {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-direction: column;\n      flex-direction: column; }\n\n#page-products-for-teams .hero.flipped .container {\n  -ms-flex-align: end;\n      align-items: flex-end; }\n\n#page-products-for-teams .hero__content {\n  width: 40%; }\n  @media (max-width: 768px) {\n    #page-products-for-teams .hero__content {\n      text-align: center;\n      width: 100%; } }\n\n#page-products-for-teams .hero__icon {\n  background-image: url(\"/img/pro/teams-feature-icons.png\");\n  background-position: top center;\n  background-repeat: no-repeat;\n  background-size: 100%;\n  display: inline-block;\n  height: 64px;\n  margin-bottom: 40px;\n  width: 64px; }\n  @media (max-width: 768px) {\n    #page-products-for-teams .hero__icon {\n      margin-bottom: 20px; } }\n\n#page-products-for-teams .ship .hero__icon {\n  background-position-y: 0; }\n\n#page-products-for-teams .listen .hero__icon {\n  background-position-y: -64px; }\n\n#page-products-for-teams .collaborate .hero__icon {\n  background-position-y: -128px; }\n\n#page-products-for-teams .hero h2 {\n  color: #9aaac1;\n  font-size: 36px;\n  font-weight: 700;\n  letter-spacing: -0.03em;\n  line-height: 46px;\n  margin-bottom: 1em; }\n\n#page-products-for-teams .hero h2 strong {\n  color: #24282e; }\n\n#page-products-for-teams .hero p {\n  color: #505863;\n  font-size: 18px;\n  font-weight: 600; }\n\n#page-products-for-teams .ship {\n  background-image: url(\"/img/pro/teams-ship-hero.jpg\");\n  background-position: right center;\n  background-size: 811px; }\n\n#page-products-for-teams .listen {\n  background-image: url(\"/img/pro/teams-listen-hero.png\");\n  background-position: left center;\n  background-size: 811px; }\n\n#page-products-for-teams .collaborate {\n  background-image: url(\"/img/pro/teams-collaborate-hero.jpg\");\n  background-position: right center;\n  background-size: 811px; }\n\n@media (min-width: 768px) {\n  #page-products-for-teams .ship,\n  #page-products-for-teams .collaborate {\n    background-position: center right -400px; } }\n\n@media (min-width: 1220px) {\n  #page-products-for-teams .ship,\n  #page-products-for-teams .collaborate {\n    background-position: center right -150px; } }\n\n@media (min-width: 1400px) {\n  #page-products-for-teams .ship,\n  #page-products-for-teams .collaborate {\n    background-position: center right -50px; } }\n\n@media (min-width: 768px) {\n  #page-products-for-teams .listen {\n    background-position: center left -350px; } }\n\n@media (min-width: 1220px) {\n  #page-products-for-teams .listen {\n    background-position: center left -150px; } }\n\n@media (min-width: 1400px) {\n  #page-products-for-teams .listen {\n    background-position: center left -50px; } }\n\n@media (max-width: 768px) {\n  #page-products-for-teams .ship,\n  #page-products-for-teams .listen,\n  #page-products-for-teams .collaborate {\n    background-image: none;\n    padding: 60px 0; } }\n\n#page-products-for-teams .features {\n  padding: 100px 0; }\n\n@media (min-width: 768px) {\n  #page-products-for-teams .features .hero__content {\n    width: 70%; } }\n\n#page-products-for-teams .features h3 {\n  color: #24282e;\n  font-size: 20px;\n  font-weight: 700;\n  margin-bottom: 20px; }\n\n#page-products-for-teams .features p {\n  color: #747f92;\n  font-size: 16px;\n  line-height: 1.6; }\n\n#page-products-for-teams .features .hero__icon {\n  background-image: url(\"/img/pro/teams-subfeature-icons.png\");\n  height: 48px;\n  margin-bottom: 0;\n  width: 48px; }\n  #page-products-for-teams .features .hero__icon.sharing {\n    background-position-y: 0; }\n  #page-products-for-teams .features .hero__icon.ci {\n    background-position-y: -48px; }\n  #page-products-for-teams .features .hero__icon.feed {\n    background-position-y: -96px; }\n  #page-products-for-teams .features .hero__icon.collab {\n    background-position-y: -144px; }\n  #page-products-for-teams .features .hero__icon.binaries {\n    background-position-y: -192px; }\n  #page-products-for-teams .features .hero__icon.channels {\n    background-position-y: -240px; }\n  #page-products-for-teams .features .hero__icon.cd {\n    background-position-y: -288px; }\n  #page-products-for-teams .features .hero__icon.monitoring {\n    background-position-y: -336px; }\n  #page-products-for-teams .features .hero__icon.rapid {\n    background-position-y: -384px; }\n\n#page-products-for-teams .features__list {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-wrap: wrap;\n      flex-wrap: wrap;\n  list-style: none;\n  margin: 70px 0 0;\n  padding: 0; }\n\n#page-products-for-teams .features__list li {\n  -ms-flex: 0 0 33.33%;\n      flex: 0 0 33.33%;\n  padding-bottom: 4em;\n  padding-right: 4em; }\n  @media (max-width: 992px) {\n    #page-products-for-teams .features__list li {\n      -ms-flex: 0 0 50%;\n          flex: 0 0 50%; } }\n  @media (max-width: 768px) {\n    #page-products-for-teams .features__list li {\n      -ms-flex: 0 0 100%;\n          flex: 0 0 100%;\n      padding-right: 0;\n      text-align: center; } }\n\n#page-products-for-teams .quotes {\n  color: #ffffff;\n  display: -ms-flexbox;\n  display: flex;\n  font-size: 20px;\n  font-weight: 600;\n  letter-spacing: -0.01em; }\n  @media (max-width: 768px) {\n    #page-products-for-teams .quotes {\n      -ms-flex-direction: column;\n          flex-direction: column; } }\n\n#page-products-for-teams .quotes__content {\n  max-width: 490px;\n  position: relative; }\n\n#page-products-for-teams .quotes__napa,\n#page-products-for-teams .quotes__hmb {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex: 1;\n      flex: 1;\n  padding: 80px; }\n  @media (max-width: 480px) {\n    #page-products-for-teams .quotes__napa,\n    #page-products-for-teams .quotes__hmb {\n      padding: 40px; } }\n\n#page-products-for-teams .quotes__napa {\n  background-color: #6b56d4;\n  -ms-flex-pack: end;\n      justify-content: flex-end; }\n  @media (max-width: 768px) {\n    #page-products-for-teams .quotes__napa {\n      -ms-flex-pack: start;\n          justify-content: flex-start; } }\n\n#page-products-for-teams .quotes__napa .case-study-pill {\n  background-color: #5635c2;\n  border-radius: 20px;\n  color: rgba(255, 255, 255, 0.6);\n  display: inline-block;\n  font-size: 12px;\n  line-height: 1;\n  margin-bottom: 30px;\n  padding: 7px 10px 6px;\n  position: absolute;\n  right: 0;\n  top: 7px;\n  transition: color 200ms ease-in-out; }\n  #page-products-for-teams .quotes__napa .case-study-pill strong {\n    font-weight: inherit;\n    color: #ffffff; }\n  #page-products-for-teams .quotes__napa .case-study-pill:after {\n    content: \" \\203a\"; }\n  #page-products-for-teams .quotes__napa .case-study-pill:hover {\n    color: #ffffff; }\n  @media (max-width: 1220px) {\n    #page-products-for-teams .quotes__napa .case-study-pill {\n      position: relative; } }\n\n#page-products-for-teams .quotes__hmb {\n  background-color: #424b58; }\n\n#page-products-for-teams .quotes__logo {\n  background-image: url(\"/img/pro/teams-quote-logos.png\");\n  background-position: top;\n  background-size: 100%;\n  background-repeat: no-repeat;\n  display: block;\n  height: 40px;\n  margin-bottom: 2em;\n  width: 260px; }\n\n#page-products-for-teams .quotes__hmb .quotes__logo {\n  background-position-y: -40px; }\n\n#page-products-for-teams .quotes blockquote {\n  border: none;\n  font-size: inherit;\n  line-height: 1.5;\n  margin: 0;\n  padding: 0; }\n\n#page-products-for-teams .quotes blockquote > small {\n  color: rgba(255, 255, 255, 0.6);\n  margin-top: 2em;\n  text-align: right; }\n  #page-products-for-teams .quotes blockquote > small::before {\n    content: \"\"; }\n  #page-products-for-teams .quotes blockquote > small strong {\n    font-weight: inherit;\n    color: #ffffff; }\n\n#page-products-for-teams .get-started {\n  background: #1b212a;\n  overflow: auto; }\n\n#page-products-for-teams .get-started .container {\n  -ms-flex-align: center;\n      align-items: center;\n  display: -ms-flexbox;\n  display: flex;\n  margin-bottom: 110px;\n  margin-top: 110px; }\n  @media (max-width: 991px) {\n    #page-products-for-teams .get-started .container {\n      display: block;\n      text-align: center; } }\n\n#page-products-for-teams .get-started hgroup {\n  letter-spacing: -.025em;\n  -ms-flex-positive: 1;\n      flex-grow: 1; }\n  @media (max-width: 991px) {\n    #page-products-for-teams .get-started hgroup {\n      padding-bottom: 16px; } }\n\n#page-products-for-teams .get-started h2 {\n  color: #ffffff;\n  font-size: 28px;\n  font-weight: 700;\n  letter-spacing: inherit;\n  margin: 0 0 5px; }\n\n#page-products-for-teams .get-started p {\n  color: #98a3b2;\n  font-size: 20px;\n  font-weight: 600;\n  margin: 0; }\n\n#page-products-for-teams .get-started .btn {\n  font-size: 16px;\n  font-weight: 700; }\n  #page-products-for-teams .get-started .btn.secondary {\n    background-color: #3d4b5f; }\n\n#page-pwa {\n  font-size: 1.4rem; }\n  #page-pwa #social-share-sidebar {\n    left: 35px; }\n  #page-pwa h1,\n  #page-pwa h2,\n  #page-pwa h3 {\n    font-weight: 700; }\n  #page-pwa .lede {\n    color: #748196;\n    font-size: 1.3em;\n    font-weight: 600;\n    line-height: 1.6;\n    margin: 1em auto;\n    max-width: 72rem; }\n    @media screen and (max-width: 767px) {\n      #page-pwa .lede {\n        font-size: 1.2em; } }\n  #page-pwa .lede > strong {\n    color: #333333; }\n  #page-pwa .eyebrow {\n    font-size: 2rem;\n    font-weight: 700;\n    letter-spacing: 0.1em;\n    margin: 1em 0;\n    text-transform: uppercase; }\n  #page-pwa .card {\n    border-radius: 6px;\n    box-shadow: 0px 4px 6px rgba(0, 0, 0, 0.1), 0px 1px 3px rgba(0, 0, 0, 0.08);\n    overflow: hidden;\n    transition: box-shadow 120ms ease-out, -webkit-transform 100ms ease-out;\n    transition: transform 100ms ease-out, box-shadow 120ms ease-out;\n    transition: transform 100ms ease-out, box-shadow 120ms ease-out, -webkit-transform 100ms ease-out; }\n    #page-pwa .card__image {\n      max-width: 100%; }\n    #page-pwa .card__content {\n      padding: 1em; }\n    #page-pwa .card:hover {\n      box-shadow: 0 8px 16px rgba(0, 0, 0, 0.08), 0 3px 6px rgba(0, 0, 0, 0.08);\n      -webkit-transform: translateY(-2px);\n              transform: translateY(-2px); }\n  #page-pwa .panel {\n    padding: 8rem 4rem; }\n    #page-pwa .panel__header {\n      margin-bottom: 6rem;\n      text-align: center; }\n  #page-pwa .panel .container {\n    max-width: 1140px; }\n  #page-pwa .cta,\n  #page-pwa .panel {\n    font-family: \"Eina\", \"Helvetica Neue\", Helvetica, sans-serif; }\n  #page-pwa .cta {\n    background-image: url(\"/img/pwa/pwa-hero.jpg\");\n    background-position: center center;\n    background-size: cover;\n    padding: 16rem 0;\n    text-align: center; }\n    @media screen and (max-width: 767px) {\n      #page-pwa .cta {\n        margin-top: 0;\n        padding-bottom: calc(16rem - 70px); } }\n  #page-pwa .cta h1 {\n    font-size: 3.45em;\n    letter-spacing: -0.02em; }\n    @media screen and (max-width: 767px) {\n      #page-pwa .cta h1 {\n        font-size: 3em; } }\n  #page-pwa .cta .eyebrow {\n    font-size: 1.4rem;\n    letter-spacing: 0.2em; }\n  #page-pwa .cta .lede {\n    color: #cfe1fa; }\n  #page-pwa .cta .lede > strong {\n    color: white;\n    font-weight: inherit; }\n  #page-pwa .features {\n    display: -ms-flexbox;\n    display: flex;\n    -ms-flex-wrap: wrap;\n        flex-wrap: wrap;\n    list-style: none;\n    margin: 0 auto;\n    max-width: 100rem;\n    padding: 0;\n    text-align: center; }\n  #page-pwa .features > li {\n    -ms-flex: 0 0 25%;\n        flex: 0 0 25%;\n    padding: 2%; }\n    @media screen and (max-width: 767px) {\n      #page-pwa .features > li {\n        -ms-flex: 0 0 50%;\n            flex: 0 0 50%; } }\n  #page-pwa .features h4 {\n    font-size: 1.15em;\n    font-weight: 600; }\n  #page-pwa .features p {\n    color: #748196;\n    font-size: 0.925em;\n    font-weight: 600; }\n  #page-pwa .features__icon {\n    background-image: url(\"/img/pwa/pwa-feature-icons.png\");\n    background-position: top left;\n    background-size: 100%;\n    height: 48px;\n    margin: 0 auto 2rem;\n    width: 48px; }\n    #page-pwa .features__icon--reliable {\n      background-position-y: 0; }\n    #page-pwa .features__icon--fast {\n      background-position-y: -48px; }\n    #page-pwa .features__icon--accessible {\n      background-position-y: -96px; }\n    #page-pwa .features__icon--web-based {\n      background-position-y: -144px; }\n    #page-pwa .features__icon--discoverable {\n      background-position-y: -192px; }\n    #page-pwa .features__icon--small {\n      background-position-y: -240px; }\n    #page-pwa .features__icon--instant {\n      background-position-y: -288px; }\n    #page-pwa .features__icon--simple {\n      background-position-y: -336px; }\n  @media screen and (min-width: 992px) {\n    #page-pwa .features > li:hover p,\n    #page-pwa .features > li:hover h4,\n    #page-pwa .features > li:hover .features__icon {\n      opacity: 1;\n      -webkit-transform: translateY(0);\n              transform: translateY(0); }\n    #page-pwa .features h4,\n    #page-pwa .features p,\n    #page-pwa .features__icon {\n      -webkit-transform: translateY(20px);\n              transform: translateY(20px);\n      transition: -webkit-transform 200ms cubic-bezier(0.175, 0.885, 0.32, 1.275);\n      transition: transform 200ms cubic-bezier(0.175, 0.885, 0.32, 1.275);\n      transition: transform 200ms cubic-bezier(0.175, 0.885, 0.32, 1.275), -webkit-transform 200ms cubic-bezier(0.175, 0.885, 0.32, 1.275); }\n    #page-pwa .features p {\n      opacity: 0; } }\n  #page-pwa .examples {\n    background-color: #f6f9fc; }\n  @media screen and (max-width: 767px) {\n    #page-pwa .examples.panel {\n      padding-left: 1rem;\n      padding-right: 1rem; } }\n  #page-pwa .examples__list {\n    display: -ms-flexbox;\n    display: flex;\n    -ms-flex-wrap: wrap;\n        flex-wrap: wrap;\n    -ms-flex-pack: center;\n        justify-content: center; }\n  #page-pwa .examples__list > .card {\n    border-radius: 8px;\n    box-shadow: 0px 3px 8px rgba(0, 0, 0, 0.1);\n    margin: 1rem;\n    width: calc(1110px / 3 - 2rem); }\n    #page-pwa .examples__list > .card:hover {\n      box-shadow: 0 8px 16px rgba(0, 0, 0, 0.1), 0 3px 6px rgba(0, 0, 0, 0.1); }\n    @media screen and (max-width: 767px) {\n      #page-pwa .examples__list > .card {\n        margin-left: 0;\n        margin-right: 0; } }\n  #page-pwa .example {\n    background-position: center center;\n    background-size: cover;\n    border-radius: 8px;\n    color: rgba(255, 255, 255, 0.8);\n    font-weight: 600;\n    height: 0;\n    padding-bottom: 88%;\n    position: relative; }\n    #page-pwa .example.starbucks {\n      background-image: url(\"/img/pwa/pwa-starbucks-bg.jpg\"); }\n    #page-pwa .example.pinterest {\n      background-image: url(\"/img/pwa/pwa-pinterest-bg.jpg\"); }\n    #page-pwa .example.uber {\n      background-image: url(\"/img/pwa/pwa-uber-bg.jpg\"); }\n    #page-pwa .example.lyft {\n      background-image: url(\"/img/pwa/pwa-lyft-bg.jpg\"); }\n    #page-pwa .example.twitter {\n      background-image: url(\"/img/pwa/pwa-twitter-bg.jpg\"); }\n    #page-pwa .example.forbes {\n      background-image: url(\"/img/pwa/pwa-forbes-bg.jpg\"); }\n  #page-pwa .example__content {\n    bottom: 0;\n    height: 46.875%;\n    left: 0;\n    padding: 1.4em;\n    position: absolute;\n    right: 0; }\n    #page-pwa .example__content img {\n      height: 40px;\n      margin-bottom: 1em; }\n  #page-pwa .library > .container > section {\n    padding-left: 2rem; }\n  #page-pwa .library__list h4 {\n    font-size: 16px;\n    font-weight: 600; }\n  #page-pwa .library__list p {\n    color: #748196;\n    font-size: 13px;\n    font-weight: 600; }\n  #page-pwa .library__list a {\n    color: inherit; }\n    #page-pwa .library__list a:focus {\n      text-decoration: none; }\n  #page-pwa .library__list {\n    display: -ms-flexbox;\n    display: flex;\n    -ms-flex-wrap: wrap;\n        flex-wrap: wrap;\n    list-style: none;\n    margin: 2em 0 4em 0;\n    padding: 0; }\n  #page-pwa .library__list > li {\n    -ms-flex: 0 0 25%;\n        flex: 0 0 25%;\n    padding-bottom: 2rem;\n    padding-right: 2rem; }\n    @media screen and (max-width: 1219px) {\n      #page-pwa .library__list > li {\n        -ms-flex: 0 0 33.33%;\n            flex: 0 0 33.33%; } }\n    @media screen and (max-width: 991px) {\n      #page-pwa .library__list > li {\n        -ms-flex: 0 0 50%;\n            flex: 0 0 50%; } }\n    @media screen and (max-width: 767px) {\n      #page-pwa .library__list > li {\n        -ms-flex: 0 0 100%;\n            flex: 0 0 100%;\n        padding-right: 0; } }\n  #page-pwa .library__list .card {\n    height: 100%;\n    margin-left: auto;\n    margin-right: auto; }\n    @media screen and (max-width: 767px) {\n      #page-pwa .library__list .card {\n        max-width: 260px; } }\n  @media screen and (max-width: 767px) {\n    #page-pwa .library .eyebrow {\n      text-align: center; } }\n\n#docs-page-resources-index main h1.banner {\n  height: 178px;\n  background: no-repeat center top url(\"/img/docs/resources/resources-header-img.jpg\");\n  background-size: cover;\n  color: white;\n  text-align: center;\n  position: relative;\n  padding-top: 92px;\n  margin-top: -50px;\n  margin-left: -40px;\n  margin-right: -40px;\n  padding-bottom: 150px;\n  padding-left: 50px;\n  font-size: 36px;\n  text-transform: uppercase;\n  letter-spacing: 14px;\n  font-weight: 500;\n  overflow: hidden;\n  text-shadow: 0 1px 4px rgba(0, 0, 0, 0.1); }\n  @media (max-width: 420px) {\n    #docs-page-resources-index main h1.banner {\n      letter-spacing: 4px; } }\n  #docs-page-resources-index main h1.banner .bg {\n    background: no-repeat center center;\n    position: absolute;\n    padding-top: 92px;\n    top: 0;\n    left: 0;\n    right: 0;\n    bottom: 0;\n    opacity: 0;\n    -webkit-transform: scale(1.01, 1.01);\n            transform: scale(1.01, 1.01);\n    -webkit-transform-origin: top center;\n            transform-origin: top center;\n    transition: .3s transform, .3s opacity; }\n    #docs-page-resources-index main h1.banner .bg::before {\n      background: no-repeat center top url(\"/img/docs/resources/resources-header-icon.png\");\n      background-size: 60px;\n      height: 60px;\n      width: 60px;\n      content: '';\n      display: inline-block;\n      vertical-align: middle;\n      position: relative;\n      top: -5px;\n      margin-right: 20px; }\n      @media (max-width: 420px) {\n        #docs-page-resources-index main h1.banner .bg::before {\n          margin-right: 5px; } }\n    #docs-page-resources-index main h1.banner .bg.active {\n      opacity: 1;\n      -webkit-transform: scale(1, 1);\n              transform: scale(1, 1); }\n    #docs-page-resources-index main h1.banner .bg.videos {\n      background-image: url(\"/img/docs/resources/video.jpg\");\n      background-size: cover; }\n    #docs-page-resources-index main h1.banner .bg.books {\n      background-image: url(\"/img/docs/resources/books.jpg\");\n      background-size: cover; }\n    #docs-page-resources-index main h1.banner .bg.courses {\n      background-image: url(\"/img/docs/resources/courses.jpg\");\n      background-size: cover; }\n    #docs-page-resources-index main h1.banner .bg.guides {\n      background-image: url(\"/img/docs/resources/guides.jpg\");\n      background-size: cover; }\n    #docs-page-resources-index main h1.banner .bg.community {\n      background-image: url(\"/img/docs/resources/community.jpg\");\n      background-size: cover; }\n    #docs-page-resources-index main h1.banner .bg.tools {\n      background-image: url(\"/img/docs/resources/tools.jpg\");\n      background-size: cover; }\n\n#docs-page-resources-index main h2 {\n  text-align: center;\n  font-size: 32px; }\n\n#docs-page-resources-index main form {\n  max-width: 722px;\n  margin: 0 auto;\n  position: relative;\n  margin-bottom: 40px; }\n  #docs-page-resources-index main form input {\n    border-radius: 50px;\n    padding: 18px 5px 17px 59px;\n    font-size: 16px;\n    height: 56px; }\n    #docs-page-resources-index main form input::-webkit-input-placeholder {\n      color: #9da5b3;\n      font-weight: 300; }\n    #docs-page-resources-index main form input::-moz-placeholder {\n      color: #9da5b3;\n      font-weight: 300; }\n    #docs-page-resources-index main form input::placeholder {\n      color: #9da5b3;\n      font-weight: 300; }\n  #docs-page-resources-index main form::before {\n    content: '\\f20a';\n    font-family: 'Ionicons';\n    position: absolute;\n    left: 25px;\n    font-size: 26px;\n    top: 10px;\n    color: #9da5b3;\n    font-weight: 300; }\n\n#docs-page-resources-index main .sections {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-wrap: wrap;\n      flex-wrap: wrap;\n  position: relative;\n  padding-top: 50px; }\n  #docs-page-resources-index main .sections.filtered section:not(.active) {\n    width: 0;\n    opacity: 0;\n    padding-left: 0;\n    padding-bottom: 0;\n    -webkit-transform-origin: left center;\n            transform-origin: left center; }\n  #docs-page-resources-index main .sections.filtered section.active {\n    width: 100%; }\n  #docs-page-resources-index main .sections.filtered .show-all {\n    color: #4a8bfc;\n    top: 20px;\n    -webkit-transform: translate3d(0, 0, 0);\n            transform: translate3d(0, 0, 0);\n    transition: .5s color, .5s transform ease-in-out, .5 top step-end; }\n  #docs-page-resources-index main .sections .show-all {\n    font-size: 13px;\n    color: transparent;\n    text-transform: uppercase;\n    font-weight: 700;\n    letter-spacing: .1em;\n    position: absolute;\n    top: -900px;\n    right: 0;\n    cursor: pointer;\n    -webkit-transform: translate3d(0, -15px, 0);\n            transform: translate3d(0, -15px, 0);\n    transition: .5s color, .5s transform ease-in-out, .5 top step-end; }\n    #docs-page-resources-index main .sections .show-all.active {\n      color: #4a8bfc; }\n    #docs-page-resources-index main .sections .show-all:hover {\n      color: #317bfc; }\n  #docs-page-resources-index main .sections section {\n    width: 325px;\n    padding-left: 68px;\n    padding-bottom: 50px;\n    position: relative;\n    overflow: visible;\n    transition: .3s transform, .3s width, .3s opacity, .3s padding-left, .3s height, .3s padding-bottom; }\n    #docs-page-resources-index main .sections section::before {\n      background: no-repeat center top url(\"/img/docs/resources/resources-icons.png?1\");\n      background-size: 32px;\n      height: 32px;\n      width: 32px;\n      content: '';\n      position: absolute;\n      left: 15px;\n      top: 0; }\n    #docs-page-resources-index main .sections section.guides::before {\n      background-position: center -32px; }\n    #docs-page-resources-index main .sections section.tools::before {\n      background-position: center -64px; }\n    #docs-page-resources-index main .sections section.community::before {\n      background-position: center -96px; }\n    #docs-page-resources-index main .sections section.books::before {\n      background-position: center -128px; }\n    #docs-page-resources-index main .sections section.courses::before {\n      background-position: center -160px; }\n  #docs-page-resources-index main .sections h3 {\n    text-transform: uppercase;\n    font-size: 15px;\n    margin-bottom: 40px;\n    margin-top: 6px;\n    cursor: pointer;\n    font-weight: 600;\n    letter-spacing: 0.1em; }\n  #docs-page-resources-index main .sections ul {\n    padding: 0; }\n  #docs-page-resources-index main .sections li {\n    padding-bottom: 25px;\n    list-style: none;\n    width: 300px;\n    margin-right: 25px;\n    display: inline-block;\n    vertical-align: top; }\n    #docs-page-resources-index main .sections li a {\n      font-size: 14px;\n      font-weight: 500; }\n    #docs-page-resources-index main .sections li p {\n      font-size: 13px;\n      margin-top: 0; }\n\n#page-sales {\n  font-family: \"Eina\", \"Helvetica Neue\", Helvetica, sans-serif; }\n  #page-sales .hero {\n    padding-top: 60px;\n    padding-bottom: 0;\n    max-width: 760px;\n    margin-left: auto;\n    margin-right: auto;\n    text-align: center; }\n    #page-sales .hero h1 {\n      font-size: 36px;\n      font-weight: 700;\n      letter-spacing: -0.03em;\n      margin-bottom: 8px; }\n    #page-sales .hero p {\n      font-size: 20px;\n      font-weight: 500; }\n  #page-sales .hubspot-override {\n    max-width: 860px;\n    margin-top: 40px;\n    margin-bottom: 120px;\n    margin-left: auto;\n    margin-right: auto; }\n    @media (max-width: 768px) {\n      #page-sales .hubspot-override {\n        margin-bottom: 60px; } }\n\n#page-startups main {\n  color: #161a1f;\n  font-family: \"Eina\", \"Helvetica Neue\", Helvetica, sans-serif;\n  font-weight: 600; }\n\n#page-startups .btn {\n  font-size: 16px;\n  font-weight: 700;\n  padding: 12px 20px; }\n  #page-startups .btn--secondary {\n    background-color: #102242; }\n\n#page-startups .cta {\n  background-color: transparent;\n  color: inherit;\n  padding-bottom: 60px;\n  padding-top: 120px;\n  text-align: center; }\n  @media (max-width: 768px) {\n    #page-startups .cta {\n      padding-top: 140px; } }\n\n#page-startups .cta h1 {\n  font-size: 48px;\n  font-weight: 700;\n  letter-spacing: -0.02em; }\n\n#page-startups .cta p {\n  color: #2f3744;\n  font-size: 18px;\n  margin: 1em auto 1.5em;\n  max-width: 720px; }\n\n#page-startups .video {\n  -ms-flex-align: center;\n      align-items: center;\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-pack: center;\n      justify-content: center;\n  padding: 1em 1em 2em;\n  position: relative;\n  z-index: 1; }\n\n#page-startups .video-player {\n  max-width: 900px;\n  width: 100%;\n  position: relative;\n  z-index: 2; }\n  #page-startups .video-player:hover {\n    cursor: pointer; }\n  #page-startups .video-player:not(.is-playing):hover .video-player-frame {\n    -webkit-transform: scale(0.99);\n            transform: scale(0.99); }\n  #page-startups .video-player:not(.is-playing):hover .video-player-button {\n    -webkit-transform: translate(-50%, -50%) scale(1.1);\n            transform: translate(-50%, -50%) scale(1.1); }\n  #page-startups .video-player.is-ready .video-player-button {\n    display: block; }\n  #page-startups .video-player.is-playing .video-player-button {\n    display: none; }\n\n#page-startups .video-player-button {\n  display: none;\n  left: 50%;\n  position: absolute;\n  top: 50%;\n  -webkit-transform: translate(-50%, -50%) scale(1);\n          transform: translate(-50%, -50%) scale(1);\n  transition: -webkit-transform 400ms cubic-bezier(0.175, 0.885, 0.32, 1.275);\n  transition: transform 400ms cubic-bezier(0.175, 0.885, 0.32, 1.275);\n  transition: transform 400ms cubic-bezier(0.175, 0.885, 0.32, 1.275), -webkit-transform 400ms cubic-bezier(0.175, 0.885, 0.32, 1.275);\n  width: 120px;\n  z-index: 1; }\n\n#page-startups .video-player-frame {\n  background-image: url(\"/img/startups/startups-video-poster.jpg\");\n  background-position: center center;\n  background-repeat: no-repeat;\n  background-size: contain;\n  border-radius: 20px;\n  box-shadow: 0 8px 16px rgba(0, 14, 41, 0.08), 0 30px 60px rgba(0, 11, 34, 0.15);\n  height: 0;\n  overflow: hidden;\n  padding-bottom: 56.25%;\n  position: relative;\n  -webkit-transform: scale(1);\n          transform: scale(1);\n  transition: -webkit-transform 400ms cubic-bezier(0.19, 1, 0.22, 1);\n  transition: transform 400ms cubic-bezier(0.19, 1, 0.22, 1);\n  transition: transform 400ms cubic-bezier(0.19, 1, 0.22, 1), -webkit-transform 400ms cubic-bezier(0.19, 1, 0.22, 1); }\n  #page-startups .video-player-frame > iframe {\n    height: 100%;\n    left: 0;\n    position: absolute;\n    top: 0;\n    width: 100%; }\n\n#page-startups .video-footer {\n  -ms-flex-align: center;\n      align-items: center;\n  display: -ms-flexbox;\n  display: flex;\n  max-width: 900px;\n  margin: 0 auto 60px;\n  padding: 1em;\n  position: relative; }\n  #page-startups .video-footer:before {\n    background-color: #e8ebf1;\n    content: \"\";\n    height: 50%;\n    left: 50%;\n    position: absolute;\n    top: 25%;\n    width: 1px; }\n  @media (max-width: 768px) {\n    #page-startups .video-footer {\n      -ms-flex-direction: column;\n          flex-direction: column;\n      margin-bottom: 0;\n      text-align: center; }\n      #page-startups .video-footer:before {\n        display: none; } }\n\n#page-startups .video-footer > * {\n  -ms-flex: 1;\n      flex: 1; }\n  #page-startups .video-footer > *:first-child {\n    margin-right: 3em; }\n  #page-startups .video-footer > *:last-child {\n    margin-left: 3em; }\n  @media (max-width: 768px) {\n    #page-startups .video-footer > *:first-child, #page-startups .video-footer > *:last-child {\n      margin-left: 0;\n      margin-right: 0; } }\n\n#page-startups .video-footer > p {\n  font-size: 20px;\n  font-weight: 700;\n  letter-spacing: -0.02em;\n  line-height: 1.5; }\n\n#page-startups .video-footer > blockquote {\n  border: none;\n  font-size: 14px;\n  margin: 0;\n  padding: 0; }\n  @media (max-width: 768px) {\n    #page-startups .video-footer > blockquote {\n      margin: 1em 0 0 0; } }\n\n#page-startups .video-footer > blockquote small {\n  color: #788497;\n  display: block;\n  margin-top: 1.5em;\n  text-align: right; }\n  #page-startups .video-footer > blockquote small:before {\n    display: none; }\n  #page-startups .video-footer > blockquote small > span {\n    margin-left: 0.5em;\n    opacity: 0.5; }\n  @media (max-width: 768px) {\n    #page-startups .video-footer > blockquote small {\n      text-align: center; } }\n\n#page-startups .section-header {\n  color: #2f3744;\n  font-size: 20px;\n  letter-spacing: -0.02em;\n  margin-bottom: 4em;\n  margin-top: 4em;\n  max-width: 32em; }\n\n#page-startups .section-header h2 {\n  color: #24282e;\n  font-size: 1.8em;\n  font-weight: 700;\n  margin-bottom: 0.65em; }\n\n#page-startups .oss .section-header h2 span,\n#page-startups .pro .section-header h2 span {\n  border-bottom: solid 4px #24282e; }\n\n#page-startups .feature {\n  display: -ms-flexbox;\n  display: flex;\n  font-size: 16px;\n  font-weight: 600;\n  letter-spacing: -0.01em; }\n\n#page-startups .feature__icon {\n  background-image: url(\"/img/startups/startups-feature-icons.png\");\n  background-position: top;\n  background-repeat: no-repeat;\n  background-size: 100%;\n  display: block;\n  -ms-flex: 0 0 48px;\n      flex: 0 0 48px;\n  height: 48px;\n  margin-right: 2em;\n  width: 48px; }\n  #page-startups .feature__icon.dazzle {\n    background-position-y: 0; }\n  #page-startups .feature__icon.speed {\n    background-position-y: -48px; }\n  #page-startups .feature__icon.takeoff {\n    background-position-y: -96px; }\n  #page-startups .feature__icon.platforms {\n    background-position-y: -144px; }\n  #page-startups .feature__icon.native {\n    background-position-y: -192px; }\n  #page-startups .feature__icon.worldwide {\n    background-position-y: -240px; }\n  #page-startups .feature__icon.deploy {\n    background-position-y: -288px; }\n  #page-startups .feature__icon.compile {\n    background-position-y: -336px; }\n  #page-startups .feature__icon.monitor {\n    background-position-y: -384px; }\n\n#page-startups .feature__text strong {\n  display: block;\n  font-size: 1.25em;\n  margin-bottom: 0.75em; }\n\n#page-startups .feature__text p {\n  color: #788497;\n  line-height: 1.65; }\n\n#page-startups .feature-list {\n  list-style: none;\n  margin: 0;\n  padding: 0; }\n\n#page-startups .feature-list > li:not(:last-child) {\n  margin-bottom: 2em; }\n\n#page-startups .app-showcase {\n  -ms-flex-align: center;\n      align-items: center;\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-direction: column;\n      flex-direction: column; }\n\n#page-startups .app-showcase__image {\n  width: 100%; }\n\n#page-startups .app-showcase__icon {\n  width: 93px;\n  margin-right: 1em; }\n\n#page-startups .app-showcase__footer {\n  -ms-flex-align: center;\n      align-items: center;\n  display: -ms-inline-flexbox;\n  display: inline-flex;\n  font-size: 16px;\n  font-weight: 700;\n  letter-spacing: -0.01em;\n  padding: 1em; }\n\n#page-startups .app-showcase__footer blockquote {\n  border-left: none;\n  margin-bottom: 0.75em;\n  padding: 0; }\n\n#page-startups .app-showcase__footer small {\n  display: block;\n  font-weight: 600;\n  text-align: right; }\n  #page-startups .app-showcase__footer small > span {\n    opacity: 0.5; }\n\n@media (min-width: 768px) {\n  #page-startups .key-benefits .feature-list {\n    display: -ms-flexbox;\n    display: flex; }\n  #page-startups .key-benefits .feature-list > li {\n    -ms-flex: 1;\n        flex: 1;\n    padding-right: 3em; }\n  #page-startups .key-benefits .feature {\n    -ms-flex-direction: column;\n        flex-direction: column; }\n  #page-startups .key-benefits .feature__icon {\n    margin-bottom: 1.25em; } }\n\n#page-startups .oss,\n#page-startups .pro {\n  padding-bottom: 100px; }\n  #page-startups .oss .container,\n  #page-startups .pro .container {\n    display: -ms-flexbox;\n    display: flex;\n    -ms-flex-align: center;\n        align-items: center; }\n    @media (max-width: 768px) {\n      #page-startups .oss .container,\n      #page-startups .pro .container {\n        -ms-flex-direction: column;\n            flex-direction: column; } }\n  #page-startups .oss .app-showcase,\n  #page-startups .pro .app-showcase {\n    margin: auto 10%;\n    max-width: 860px;\n    padding-top: 100px; }\n\n@media (min-width: 768px) {\n  #page-startups .oss .app-showcase {\n    margin-left: 0;\n    margin-right: 80px; } }\n\n@media (min-width: 768px) {\n  #page-startups .pro .app-showcase {\n    -ms-flex-order: 1;\n        order: 1;\n    margin-left: 80px;\n    margin-right: 0; } }\n\n#page-startups .pro .feature__text strong {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-direction: column;\n      flex-direction: column; }\n  @media (min-width: 1220px) {\n    #page-startups .pro .feature__text strong {\n      -ms-flex-align: center;\n          align-items: center;\n      -ms-flex-direction: row;\n          flex-direction: row;\n      -ms-flex-pack: justify;\n          justify-content: space-between; } }\n\n#page-startups .pro .feature__text strong a {\n  font-size: 0.55em;\n  letter-spacing: 0.05em;\n  margin-top: 0.5em;\n  text-transform: uppercase; }\n  @media (min-width: 1220px) {\n    #page-startups .pro .feature__text strong a {\n      margin-top: 0; } }\n\n#page-startups section.resources {\n  padding-bottom: 100px; }\n\n#page-startups .resource-card {\n  background-color: #383d3f;\n  border-radius: 16px;\n  box-shadow: 0 8px 16px rgba(0, 0, 0, 0.1), 0 2px 4px rgba(0, 0, 0, 0.08);\n  color: #ffffff;\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-direction: column;\n      flex-direction: column;\n  font-size: 20px;\n  font-weight: 700;\n  min-height: 255px;\n  padding: 26px;\n  -webkit-transform: translateY(0);\n          transform: translateY(0);\n  transition: box-shadow 250ms ease, -webkit-transform 200ms ease;\n  transition: box-shadow 250ms ease, transform 200ms ease;\n  transition: box-shadow 250ms ease, transform 200ms ease, -webkit-transform 200ms ease;\n  width: 255px; }\n  #page-startups .resource-card:focus {\n    text-decoration: none; }\n  #page-startups .resource-card:hover {\n    box-shadow: 0 12px 24px rgba(0, 0, 0, 0.1);\n    -webkit-transform: translateY(-1px);\n            transform: translateY(-1px); }\n\n#page-startups .resource-card__eyebrow {\n  color: rgba(255, 255, 255, 0.5);\n  font-size: 0.5em;\n  letter-spacing: 0.15em;\n  text-transform: uppercase; }\n\n#page-startups .resource-card__title {\n  letter-spacing: -0.015em;\n  line-height: 1.3;\n  margin: 0.5em 0; }\n\n#page-startups .resource-card__cta {\n  font-size: 0.7em;\n  letter-spacing: 0.15em;\n  margin-top: auto;\n  text-transform: uppercase; }\n\n#page-startups .resource-card-list {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-wrap: wrap;\n      flex-wrap: wrap; }\n  #page-startups .resource-card-list .resource-card {\n    margin: 0 1.5em 1.5em 0; }\n    #page-startups .resource-card-list .resource-card:nth-child(1) {\n      background-color: #ff6644; }\n    #page-startups .resource-card-list .resource-card:nth-child(2) {\n      background-color: #033f80; }\n    #page-startups .resource-card-list .resource-card:nth-child(3) {\n      background-color: #ffbf69; }\n    #page-startups .resource-card-list .resource-card:nth-child(4) {\n      background-color: #846ac2; }\n    #page-startups .resource-card-list .resource-card:nth-child(5) {\n      background-color: #0e8efb; }\n    #page-startups .resource-card-list .resource-card:nth-child(6) {\n      background-color: #003953; }\n    #page-startups .resource-card-list .resource-card:nth-child(7) {\n      background-color: #44bcc0; }\n  @media (max-width: 768px) {\n    #page-startups .resource-card-list {\n      -ms-flex-pack: center;\n          justify-content: center; }\n      #page-startups .resource-card-list .resource-card {\n        margin: 0 0.5em 1em; } }\n\n#page-startups .quotes {\n  color: #ffffff;\n  display: -ms-flexbox;\n  display: flex;\n  font-size: 20px;\n  font-weight: 700;\n  letter-spacing: -0.01em; }\n  @media (max-width: 768px) {\n    #page-startups .quotes {\n      -ms-flex-direction: column;\n          flex-direction: column; } }\n\n#page-startups .quotes__content {\n  max-width: 490px;\n  position: relative; }\n\n#page-startups .quotes__quote {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex: 1;\n      flex: 1;\n  padding: 80px; }\n  @media (max-width: 480px) {\n    #page-startups .quotes__quote {\n      padding: 40px; } }\n  @media (min-width: 768px) {\n    #page-startups .quotes__quote:first-child {\n      -ms-flex-pack: end;\n          justify-content: flex-end; } }\n  #page-startups .quotes__quote.joule {\n    background-color: #ff674d; }\n  #page-startups .quotes__quote.comichaus {\n    background-color: #e8ebf1;\n    color: #24282e; }\n  #page-startups .quotes__quote.pacifica {\n    background-color: #4edab1; }\n  #page-startups .quotes__quote.natural-cycles {\n    background-color: #7545f0; }\n\n#page-startups .quotes__logo {\n  background-image: url(\"/img/startups/startups-quote-logos.png\");\n  background-position: top;\n  background-size: 100%;\n  background-repeat: no-repeat;\n  display: block;\n  height: 40px;\n  margin-bottom: 2em;\n  width: 160px; }\n  #page-startups .quotes__logo.joule {\n    background-position-y: 0; }\n  #page-startups .quotes__logo.comichaus {\n    background-position-y: -40px; }\n  #page-startups .quotes__logo.pacifica {\n    background-position-y: -80px; }\n  #page-startups .quotes__logo.natural-cycles {\n    background-position-y: -120px; }\n\n#page-startups .quotes blockquote {\n  border: none;\n  font-size: inherit;\n  line-height: 1.5;\n  margin: 0;\n  padding: 0; }\n\n#page-startups .quotes blockquote > small {\n  color: inherit;\n  font-weight: 600;\n  margin-top: 2em;\n  text-align: right; }\n  #page-startups .quotes blockquote > small > span {\n    opacity: 0.5;\n    padding-left: 0.5em; }\n  #page-startups .quotes blockquote > small:before {\n    display: none; }\n\n#page-startups .get-started {\n  background-image: linear-gradient(90deg, #3880ff, #67c0ff);\n  padding: 80px 0; }\n\n#page-startups .get-started .container {\n  -ms-flex-align: center;\n      align-items: center;\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-pack: justify;\n      justify-content: space-between; }\n  #page-startups .get-started .container:after, #page-startups .get-started .container:before {\n    display: none; }\n  @media (max-width: 1220px) {\n    #page-startups .get-started .container {\n      -ms-flex-direction: column;\n          flex-direction: column;\n      text-align: center; } }\n\n#page-startups .get-started .btn {\n  margin: 0.35em; }\n\n#page-startups .get-started .btn--secondary {\n  background-color: #0078ff; }\n\n#page-startups .get-started h2,\n#page-startups .get-started p {\n  font-weight: 600;\n  letter-spacing: -0.02em; }\n\n#page-startups .get-started h2 {\n  color: #ffffff;\n  font-size: 28px; }\n\n#page-startups .get-started p {\n  color: #003e82;\n  font-size: 20px; }\n  @media (max-width: 1220px) {\n    #page-startups .get-started p {\n      margin-bottom: 1em; } }\n\n#page-what-is-ionic .banner,\n#page-what-is-ionic main {\n  font-family: \"Inter\", \"Inter UI\", Helvetica, Arial, sans-serif; }\n  #page-what-is-ionic .banner h1,\n  #page-what-is-ionic .banner h2,\n  #page-what-is-ionic .banner h3,\n  #page-what-is-ionic .banner h4,\n  #page-what-is-ionic main h1,\n  #page-what-is-ionic main h2,\n  #page-what-is-ionic main h3,\n  #page-what-is-ionic main h4 {\n    font-family: \"Eina\", \"Helvetica Neue\", Helvetica, sans-serif; }\n\n#page-what-is-ionic .banner {\n  max-width: 800px;\n  padding-top: 72px;\n  padding-bottom: 150px; }\n  #page-what-is-ionic .banner h1 {\n    padding-top: 80px;\n    font-size: 40px;\n    line-height: 52px;\n    letter-spacing: -.008em;\n    font-weight: 700;\n    background: url(\"/img/what-is-ionic/ionic-icon.png\") no-repeat 50% 0;\n    background-size: 48px;\n    color: #0f1622; }\n\n#page-what-is-ionic main a {\n  text-decoration: none;\n  transition: .2s opacity; }\n  #page-what-is-ionic main a:hover {\n    color: #4a8bfc;\n    opacity: .8; }\n\n#page-what-is-ionic main section {\n  padding-top: 200px;\n  padding-bottom: 200px; }\n\n#page-what-is-ionic main .container {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-align: center;\n      align-items: center;\n  max-width: 980px; }\n  #page-what-is-ionic main .container::before, #page-what-is-ionic main .container::after {\n    display: none; }\n\n#page-what-is-ionic main .graphic {\n  display: block; }\n\n#page-what-is-ionic main .left .graphic {\n  margin-left: 104px; }\n\n#page-what-is-ionic main .right .graphic {\n  margin-right: 104px; }\n\n#page-what-is-ionic main .content {\n  -ms-flex: 1;\n      flex: 1; }\n\n#page-what-is-ionic main .center .container {\n  -ms-flex-direction: column;\n      flex-direction: column;\n  text-align: center;\n  max-width: 680px; }\n\n#page-what-is-ionic main h2 {\n  font-size: 35px;\n  line-height: 47px;\n  font-weight: 700;\n  letter-spacing: -.008em;\n  margin-bottom: 20px;\n  margin-top: 0;\n  color: #0f1622; }\n\n#page-what-is-ionic main p {\n  font-size: 20px;\n  line-height: 36px;\n  letter-spacing: -.02em;\n  margin-bottom: 32px; }\n  #page-what-is-ionic main p.sm {\n    font-size: 15px;\n    line-height: 32px;\n    letter-spacing: .01em; }\n  #page-what-is-ionic main p:last-child {\n    margin-bottom: 0; }\n\n#page-what-is-ionic main .what {\n  background: linear-gradient(to bottom, #f7f9fc, #fdfefe);\n  padding-bottom: 88px; }\n  #page-what-is-ionic main .what .content {\n    padding-bottom: 134px; }\n    @media (max-width: 991px) {\n      #page-what-is-ionic main .what .content {\n        padding-bottom: 20px; } }\n  #page-what-is-ionic main .what .graphic img {\n    margin-right: -50px;\n    margin-top: -20px; }\n  #page-what-is-ionic main .what ul {\n    padding: 0;\n    display: -ms-flexbox;\n    display: flex;\n    margin-top: 43px;\n    margin-bottom: 0; }\n  #page-what-is-ionic main .what li {\n    list-style: none;\n    background: url(\"/img/what-is-ionic/web-icons.png\") no-repeat 0 0;\n    background-size: 40px;\n    width: 40px;\n    height: 40px;\n    margin-right: 22px; }\n    #page-what-is-ionic main .what li.css {\n      background-position: 0 -40px; }\n    #page-what-is-ionic main .what li.js {\n      background-position: 0 -80px; }\n\n#page-what-is-ionic main .kit {\n  background: linear-gradient(to bottom, #f7f9fb, #fefefe);\n  padding-bottom: 190px; }\n  #page-what-is-ionic main .kit .graphic {\n    margin-right: 68px; }\n  #page-what-is-ionic main .kit .content {\n    margin-bottom: 8px; }\n\n#page-what-is-ionic main .teams {\n  background: linear-gradient(to bottom, #f8f9fb, #fefefe);\n  padding-top: 183px;\n  padding-bottom: 176px; }\n  #page-what-is-ionic main .teams .graphic {\n    margin-right: -65px;\n    padding-top: 34px;\n    padding-left: 1px; }\n  #page-what-is-ionic main .teams ion-icon {\n    font-size: .9em;\n    vertical-align: -7%;\n    margin-left: -2px; }\n\n#page-what-is-ionic main .global {\n  background-image: url(\"/img/what-is-ionic/community-bg.png\"), linear-gradient(to bottom, #f7f9fc, #fefefe);\n  background-size: cover, 100%;\n  background-repeat: no-repeat;\n  background-position: 50% 0;\n  padding-top: 204px;\n  padding-bottom: 198px; }\n  #page-what-is-ionic main .global .content {\n    margin-top: -10px; }\n  #page-what-is-ionic main .global .graphic {\n    margin-left: -12px;\n    margin-right: 124px; }\n    @media (max-width: 991px) {\n      #page-what-is-ionic main .global .graphic {\n        margin-right: 24px; } }\n  #page-what-is-ionic main .global ul {\n    padding: 0;\n    margin: 0; }\n  #page-what-is-ionic main .global li {\n    list-style: none;\n    position: relative;\n    display: block;\n    padding-left: 108px;\n    margin: 57px 0; }\n    #page-what-is-ionic main .global li::before {\n      background: url(\"/img/what-is-ionic/community-icons.png\") no-repeat 0 0;\n      background-size: 88px;\n      height: 88px;\n      width: 88px;\n      content: '';\n      position: absolute;\n      top: calc(50% - 44px);\n      left: 0; }\n    #page-what-is-ionic main .global li:first-child {\n      margin-top: 0; }\n    #page-what-is-ionic main .global li:last-child {\n      margin-bottom: 0; }\n    #page-what-is-ionic main .global li strong {\n      color: #3880ff;\n      font-size: 34px;\n      font-weight: 600;\n      display: block;\n      font-family: \"Eina\", \"Helvetica Neue\", Helvetica, sans-serif;\n      line-height: 33px; }\n    #page-what-is-ionic main .global li span {\n      color: #68b4ff;\n      font-size: 19px; }\n    #page-what-is-ionic main .global li:nth-child(2)::before {\n      background-position: 0 -88px; }\n    #page-what-is-ionic main .global li:nth-child(3)::before {\n      background-position: 0 -176px; }\n    #page-what-is-ionic main .global li:nth-child(4)::before {\n      background-position: 0 -264px; }\n\n#page-what-is-ionic main .web {\n  background-image: url(\"/img/what-is-ionic/philosophy-bg.png\"), linear-gradient(to bottom, #f7f9fc, #fefefe);\n  background-size: cover, 100%;\n  background-repeat: no-repeat;\n  background-position: 50% 0;\n  padding-bottom: 190px; }\n  #page-what-is-ionic main .web h4 {\n    text-transform: uppercase;\n    font-size: 12px;\n    font-weight: 700;\n    letter-spacing: .14em;\n    margin-top: 0;\n    margin-bottom: 24px;\n    color: #0f1622; }\n\n@media (max-width: 991px) {\n  #page-what-is-ionic main img {\n    max-width: 320px; }\n  #page-what-is-ionic main .left .graphic {\n    margin-left: 20px; } }\n\n@media (max-width: 767px) {\n  #page-what-is-ionic .banner {\n    padding-bottom: 64px; }\n  #page-what-is-ionic main .graphic {\n    margin: 0; }\n  #page-what-is-ionic main section {\n    padding-top: 96px;\n    padding-bottom: 96px; }\n    #page-what-is-ionic main section .container {\n      -ms-flex-direction: column;\n          flex-direction: column; }\n    #page-what-is-ionic main section.left .container {\n      -ms-flex-direction: column-reverse;\n          flex-direction: column-reverse; }\n  #page-what-is-ionic main .container {\n    -ms-flex-align: center;\n        align-items: center;\n    -ms-flex-pack: center;\n        justify-content: center;\n    text-align: center; }\n  #page-what-is-ionic main .what .graphic {\n    margin: 0; }\n  #page-what-is-ionic main .what ul {\n    -ms-flex-pack: center;\n        justify-content: center; }\n  #page-what-is-ionic main .kit {\n    padding-bottom: 96px; }\n    #page-what-is-ionic main .kit .graphic {\n      margin: 0 0 42px; }\n  #page-what-is-ionic main .teams {\n    padding-top: 96px;\n    padding-bottom: 96px; }\n    #page-what-is-ionic main .teams .graphic {\n      margin: 0; }\n  #page-what-is-ionic main .global {\n    padding-top: 96px;\n    padding-bottom: 96px; }\n    #page-what-is-ionic main .global .graphic {\n      margin-bottom: 64px; }\n  #page-what-is-ionic main .web {\n    padding-bottom: 64px; } }\n\n/*# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInN0eWxlcy5jc3MiLCJpb25pY29ucy12My9faW9uaWNvbnMuc2NzcyIsIl9mb250cy5zY3NzIiwiaW9uaWNvbnMtdjMvX2lvbmljb25zLWljb25zLnNjc3MiLCJib290c3RyYXAvX25vcm1hbGl6ZS5zY3NzIiwiYm9vdHN0cmFwL19wcmludC5zY3NzIiwiYm9vdHN0cmFwL19nbHlwaGljb25zLnNjc3MiLCJib290c3RyYXAvX3NjYWZmb2xkaW5nLnNjc3MiLCJib290c3RyYXAvbWl4aW5zL192ZW5kb3ItcHJlZml4ZXMuc2NzcyIsImJvb3RzdHJhcC9fdmFyaWFibGVzLnNjc3MiLCJib290c3RyYXAvbWl4aW5zL190YWItZm9jdXMuc2NzcyIsImJvb3RzdHJhcC9taXhpbnMvX2ltYWdlLnNjc3MiLCJib290c3RyYXAvX3R5cGUuc2NzcyIsImJvb3RzdHJhcC9taXhpbnMvX3RleHQtZW1waGFzaXMuc2NzcyIsImJvb3RzdHJhcC9taXhpbnMvX2JhY2tncm91bmQtdmFyaWFudC5zY3NzIiwiYm9vdHN0cmFwL21peGlucy9fY2xlYXJmaXguc2NzcyIsImJvb3RzdHJhcC9taXhpbnMvX3RleHQtb3ZlcmZsb3cuc2NzcyIsImJvb3RzdHJhcC9fY29kZS5zY3NzIiwiX3ZhcnMuc2NzcyIsImJvb3RzdHJhcC9fZ3JpZC5zY3NzIiwiYm9vdHN0cmFwL21peGlucy9fZ3JpZC5zY3NzIiwiYm9vdHN0cmFwL21peGlucy9fZ3JpZC1mcmFtZXdvcmsuc2NzcyIsImJvb3RzdHJhcC9fdGFibGVzLnNjc3MiLCJib290c3RyYXAvbWl4aW5zL190YWJsZS1yb3cuc2NzcyIsImJvb3RzdHJhcC9fZm9ybXMuc2NzcyIsImJvb3RzdHJhcC9taXhpbnMvX2Zvcm1zLnNjc3MiLCJib290c3RyYXAvX2J1dHRvbnMuc2NzcyIsImJvb3RzdHJhcC9taXhpbnMvX2J1dHRvbnMuc2NzcyIsImJvb3RzdHJhcC9taXhpbnMvX29wYWNpdHkuc2NzcyIsImJvb3RzdHJhcC9fY29tcG9uZW50LWFuaW1hdGlvbnMuc2NzcyIsImJvb3RzdHJhcC9fZHJvcGRvd25zLnNjc3MiLCJib290c3RyYXAvbWl4aW5zL19uYXYtZGl2aWRlci5zY3NzIiwiYm9vdHN0cmFwL21peGlucy9fcmVzZXQtZmlsdGVyLnNjc3MiLCJib290c3RyYXAvX2J1dHRvbi1ncm91cHMuc2NzcyIsImJvb3RzdHJhcC9taXhpbnMvX2JvcmRlci1yYWRpdXMuc2NzcyIsImJvb3RzdHJhcC9faW5wdXQtZ3JvdXBzLnNjc3MiLCJib290c3RyYXAvX25hdnMuc2NzcyIsImJvb3RzdHJhcC9fbmF2YmFyLnNjc3MiLCJib290c3RyYXAvbWl4aW5zL19uYXYtdmVydGljYWwtYWxpZ24uc2NzcyIsImJvb3RzdHJhcC9fYmFkZ2VzLnNjc3MiLCJib290c3RyYXAvX21vZGFscy5zY3NzIiwiYm9vdHN0cmFwL190b29sdGlwLnNjc3MiLCJib290c3RyYXAvX3V0aWxpdGllcy5zY3NzIiwiYm9vdHN0cmFwL21peGlucy9fY2VudGVyLWJsb2NrLnNjc3MiLCJib290c3RyYXAvbWl4aW5zL19oaWRlLXRleHQuc2NzcyIsImJvb3RzdHJhcC9fcmVzcG9uc2l2ZS11dGlsaXRpZXMuc2NzcyIsImJvb3RzdHJhcC9taXhpbnMvX3Jlc3BvbnNpdmUtdmlzaWJpbGl0eS5zY3NzIiwicHlnbWVudHMvaW9uaWMuc2NzcyIsIl9obGpzLnNjc3MiLCJfdHlwb2dyYXBoeS5zY3NzIiwiX2FuaW1hdGlvbnMuc2NzcyIsImNvbXBvbmVudHMvX2Jhbm5lci5zY3NzIiwiY29tcG9uZW50cy9fYmFyLnNjc3MiLCJjb21wb25lbnRzL19iYXItY2hhcnQuc2NzcyIsImNvbXBvbmVudHMvX2NoZWNrbWFyay1saXN0LnNjc3MiLCJjb21wb25lbnRzL19mb3JtLnNjc3MiLCJjb21wb25lbnRzL19oZWFkZXIuc2NzcyIsImNvbXBvbmVudHMvX2h1YnNwb3RfZm9ybS5zY3NzIiwiY29tcG9uZW50cy9fc3ViX2hlYWRlci5zY3NzIiwiY29tcG9uZW50cy9faGVyby5zY3NzIiwiY29tcG9uZW50cy9fY3RhLnNjc3MiLCJjb21wb25lbnRzL19wcmVfZm9vdGVyLnNjc3MiLCJjb21wb25lbnRzL19wcmUtaGVhZGVyLnNjc3MiLCJjb21wb25lbnRzL19mb290ZXIuc2NzcyIsImNvbXBvbmVudHMvX3V0aWxzLnNjc3MiLCJjb21wb25lbnRzL19idXR0b25zLnNjc3MiLCJjb21wb25lbnRzL19kcmFnZ2FibGUuc2NzcyIsImNvbXBvbmVudHMvX2pxdWVyeV9VSS5zY3NzIiwiY29tcG9uZW50cy9fYWxlcnQuc2NzcyIsImNvbXBvbmVudHMvX3NpZGVfbmF2LnNjc3MiLCJjb21wb25lbnRzL190YWJsZXMuc2NzcyIsImNvbXBvbmVudHMvX3RvYy5zY3NzIiwiY29tcG9uZW50cy9fZG9jc19jb250ZW50LnNjc3MiLCJjb21wb25lbnRzL19wcm9fZG9jc19jb250ZW50LnNjc3MiLCJjb21wb25lbnRzL19wcm9tby5zY3NzIiwiY29tcG9uZW50cy9fbW9iaWxlLW5hdi5zY3NzIiwiY29tcG9uZW50cy9fcmVzcG9uc2l2ZV9kb2NzLnNjc3MiLCJjb21wb25lbnRzL19yZXNvdXJjZS1jYXJkLnNjc3MiLCJjb21wb25lbnRzL19tb2RhbC5zY3NzIiwiY29tcG9uZW50cy9fc2l0ZS1zZWFyY2guc2NzcyIsImNvbXBvbmVudHMvX3NuYXBfYmFyLnNjc3MiLCJjb21wb25lbnRzL19zb2NpYWxfc2hhcmVfc2lkZWJhci5zY3NzIiwiY29tcG9uZW50cy9fdGFicy5zY3NzIiwiY29tcG9uZW50cy9fdGFnLnNjc3MiLCJjb21wb25lbnRzL190ZXN0aW1vbmlhbC1zbGlkZXMuc2NzcyIsImNvbXBvbmVudHMvX3Rvb2x0aXAuc2NzcyIsImNvbXBvbmVudHMvX3RpcHB5LnNjc3MiLCJfZ2VuZXJhbC5zY3NzIiwicGFnZXMvXzQwNC5zY3NzIiwicGFnZXMvYXJ0aWNsZXMvX3doeS1oeWJyaWQuc2NzcyIsInBhZ2VzL2Jvb2tzL19oeWJyaWQtdnMtbmF0aXZlLnNjc3MiLCJwYWdlcy9ib29rcy9fcHJldmlldy5zY3NzIiwicGFnZXMvX2NvbW11bml0eS5zY3NzIiwiX21peGlucy5zY3NzIiwicGFnZXMvX2NvbnRyaWJ1dG9ycy5zY3NzIiwicGFnZXMvX2RlbW8uc2NzcyIsInBhZ2VzL2VudGVycHJpc2UvX2lkZW50aXR5LXZhdWx0LnNjc3MiLCJwYWdlcy9lbnRlcnByaXNlL190cmFpbmluZy5zY3NzIiwicGFnZXMvX2dldHRpbmctc3RhcnRlZC5zY3NzIiwicGFnZXMvZ28vX3B3YS1hcmNoaXRlY3RzLWd1aWRlLnNjc3MiLCJwYWdlcy9nby9fd2h5LWh5YnJpZC5zY3NzIiwicGFnZXMvaG9tZS5zY3NzIiwicGFnZXMvcHJlc3MvX3JlbGVhc2Uuc2NzcyIsInBhZ2VzL3Byby9fY29udGFjdC5zY3NzIiwicGFnZXMvcHJvL19kZXBsb3kuc2NzcyIsInBhZ2VzL3Byby9fZ2VuZXJhbC5zY3NzIiwicGFnZXMvcHJvL19tb25pdG9yLnNjc3MiLCJwYWdlcy9wcm8vX3BhY2thZ2Uuc2NzcyIsInBhZ2VzL3Byby9fdGVhbXMuc2NzcyIsInBhZ2VzL3B3YS9faW5kZXguc2NzcyIsInBhZ2VzL19yZXNvdXJjZXMuc2NzcyIsInBhZ2VzL19zYWxlcy5zY3NzIiwicGFnZXMvX3N0YXJ0dXBzLnNjc3MiLCJwYWdlcy9fd2hhdC1pcy1pb25pYy5zY3NzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGlCQUFpQjtBQ0NqQjs7Ozs7Ozs7OztFQVVFO0FDWEYsbUVBQVk7QURnQlo7RUFDQyx3QkFBdUI7RUFDdkIsa0RBQXFFO0VBQ3JFLHdWQUl5RjtFQUN6RixvQkFBbUI7RUFDbkIsbUJBQWtCLEVBQUE7O0FBR25COzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztFQUNFLHNCQUFxQjtFQUNyQix3QkFBdUI7RUFDdkIsWUFBVztFQUNYLG1CQUFrQjtFQUNsQixvQkFBbUI7RUFDbkIscUJBQW9CO0VBQ3BCLHFCQUFvQjtFQUNwQixxQkFBb0I7RUFDcEIsZUFBYztFQUNkLG9DQUFtQztFQUNuQyxtQ0FBa0MsRUFDbkM7O0FFcENEO0VBQXNCLGlCQUFnQixFQUFJOztBQUMxQztFQUE2QixpQkFBZ0IsRUFBSTs7QUFDakQ7RUFBcUMsaUJBQWdCLEVBQUk7O0FBQ3pEO0VBQThCLGlCQUFnQixFQUFJOztBQUNsRDtFQUF3QixpQkFBZ0IsRUFBSTs7QUFDNUM7RUFBZ0MsaUJBQWdCLEVBQUk7O0FBQ3BEO0VBQXlCLGlCQUFnQixFQUFJOztBQUM3QztFQUFpQyxpQkFBZ0IsRUFBSTs7QUFDckQ7RUFBd0IsaUJBQWdCLEVBQUk7O0FBQzVDO0VBQWdDLGlCQUFnQixFQUFJOztBQUNwRDtFQUFvQyxpQkFBZ0IsRUFBSTs7QUFDeEQ7RUFBNEMsaUJBQWdCLEVBQUk7O0FBQ2hFO0VBQTRCLGlCQUFnQixFQUFJOztBQUNoRDtFQUFvQyxpQkFBZ0IsRUFBSTs7QUFDeEQ7RUFBMkIsaUJBQWdCLEVBQUk7O0FBQy9DO0VBQW1DLGlCQUFnQixFQUFJOztBQUN2RDtFQUF1QixpQkFBZ0IsRUFBSTs7QUFDM0M7RUFBK0IsaUJBQWdCLEVBQUk7O0FBQ25EO0VBQTJCLGlCQUFnQixFQUFJOztBQUMvQztFQUFtQyxpQkFBZ0IsRUFBSTs7QUFDdkQ7RUFBMEIsaUJBQWdCLEVBQUk7O0FBQzlDO0VBQWtDLGlCQUFnQixFQUFJOztBQUN0RDtFQUE2QixpQkFBZ0IsRUFBSTs7QUFDakQ7RUFBcUMsaUJBQWdCLEVBQUk7O0FBQ3pEO0VBQTZCLGlCQUFnQixFQUFJOztBQUNqRDtFQUFxQyxpQkFBZ0IsRUFBSTs7QUFDekQ7RUFBaUMsaUJBQWdCLEVBQUk7O0FBQ3JEO0VBQXdDLGlCQUFnQixFQUFJOztBQUM1RDtFQUFnRCxpQkFBZ0IsRUFBSTs7QUFDcEU7RUFBeUMsaUJBQWdCLEVBQUk7O0FBQzdEO0VBQWlDLGlCQUFnQixFQUFJOztBQUNyRDtFQUF3QyxpQkFBZ0IsRUFBSTs7QUFDNUQ7RUFBZ0QsaUJBQWdCLEVBQUk7O0FBQ3BFO0VBQXlDLGlCQUFnQixFQUFJOztBQUM3RDtFQUFrQyxpQkFBZ0IsRUFBSTs7QUFDdEQ7RUFBeUMsaUJBQWdCLEVBQUk7O0FBQzdEO0VBQWlELGlCQUFnQixFQUFJOztBQUNyRTtFQUEwQyxpQkFBZ0IsRUFBSTs7QUFDOUQ7RUFBK0IsaUJBQWdCLEVBQUk7O0FBQ25EO0VBQXNDLGlCQUFnQixFQUFJOztBQUMxRDtFQUE4QyxpQkFBZ0IsRUFBSTs7QUFDbEU7RUFBdUMsaUJBQWdCLEVBQUk7O0FBQzNEO0VBQWdDLGlCQUFnQixFQUFJOztBQUNwRDtFQUF3QyxpQkFBZ0IsRUFBSTs7QUFDNUQ7RUFBbUMsaUJBQWdCLEVBQUk7O0FBQ3ZEO0VBQTJDLGlCQUFnQixFQUFJOztBQUMvRDtFQUFtQyxpQkFBZ0IsRUFBSTs7QUFDdkQ7RUFBMkMsaUJBQWdCLEVBQUk7O0FBQy9EO0VBQXNDLGlCQUFnQixFQUFJOztBQUMxRDtFQUE4QyxpQkFBZ0IsRUFBSTs7QUFDbEU7RUFBaUMsaUJBQWdCLEVBQUk7O0FBQ3JEO0VBQXlDLGlCQUFnQixFQUFJOztBQUM3RDtFQUEyQixpQkFBZ0IsRUFBSTs7QUFDL0M7RUFBbUMsaUJBQWdCLEVBQUk7O0FBQ3ZEO0VBQXFCLGlCQUFnQixFQUFJOztBQUN6QztFQUE2QixpQkFBZ0IsRUFBSTs7QUFDakQ7RUFBeUIsaUJBQWdCLEVBQUk7O0FBQzdDO0VBQWlDLGlCQUFnQixFQUFJOztBQUNyRDtFQUE0QixpQkFBZ0IsRUFBSTs7QUFDaEQ7RUFBb0MsaUJBQWdCLEVBQUk7O0FBQ3hEO0VBQTBCLGlCQUFnQixFQUFJOztBQUM5QztFQUFrQyxpQkFBZ0IsRUFBSTs7QUFDdEQ7RUFBMkIsaUJBQWdCLEVBQUk7O0FBQy9DO0VBQW1DLGlCQUFnQixFQUFJOztBQUN2RDtFQUF5QixpQkFBZ0IsRUFBSTs7QUFDN0M7RUFBaUMsaUJBQWdCLEVBQUk7O0FBQ3JEO0VBQTZCLGlCQUFnQixFQUFJOztBQUNqRDtFQUFxQyxpQkFBZ0IsRUFBSTs7QUFDekQ7RUFBbUMsaUJBQWdCLEVBQUk7O0FBQ3ZEO0VBQTJDLGlCQUFnQixFQUFJOztBQUMvRDtFQUErQixpQkFBZ0IsRUFBSTs7QUFDbkQ7RUFBdUMsaUJBQWdCLEVBQUk7O0FBQzNEO0VBQStCLGlCQUFnQixFQUFJOztBQUNuRDtFQUF1QyxpQkFBZ0IsRUFBSTs7QUFDM0Q7RUFBeUIsaUJBQWdCLEVBQUk7O0FBQzdDO0VBQWlDLGlCQUFnQixFQUFJOztBQUNyRDtFQUF1QixpQkFBZ0IsRUFBSTs7QUFDM0M7RUFBK0IsaUJBQWdCLEVBQUk7O0FBQ25EO0VBQTBCLGlCQUFnQixFQUFJOztBQUM5QztFQUFrQyxpQkFBZ0IsRUFBSTs7QUFDdEQ7RUFBNEIsaUJBQWdCLEVBQUk7O0FBQ2hEO0VBQW9DLGlCQUFnQixFQUFJOztBQUN4RDtFQUF1QixpQkFBZ0IsRUFBSTs7QUFDM0M7RUFBK0IsaUJBQWdCLEVBQUk7O0FBQ25EO0VBQXVCLGlCQUFnQixFQUFJOztBQUMzQztFQUErQixpQkFBZ0IsRUFBSTs7QUFDbkQ7RUFBMEIsaUJBQWdCLEVBQUk7O0FBQzlDO0VBQWtDLGlCQUFnQixFQUFJOztBQUN0RDtFQUF1QixpQkFBZ0IsRUFBSTs7QUFDM0M7RUFBK0IsaUJBQWdCLEVBQUk7O0FBQ25EO0VBQTJCLGlCQUFnQixFQUFJOztBQUMvQztFQUFtQyxpQkFBZ0IsRUFBSTs7QUFDdkQ7RUFBNEIsaUJBQWdCLEVBQUk7O0FBQ2hEO0VBQW9DLGlCQUFnQixFQUFJOztBQUN4RDtFQUF5QixpQkFBZ0IsRUFBSTs7QUFDN0M7RUFBaUMsaUJBQWdCLEVBQUk7O0FBQ3JEO0VBQTRCLGlCQUFnQixFQUFJOztBQUNoRDtFQUFvQyxpQkFBZ0IsRUFBSTs7QUFDeEQ7RUFBMkIsaUJBQWdCLEVBQUk7O0FBQy9DO0VBQW1DLGlCQUFnQixFQUFJOztBQUN2RDtFQUF3QixpQkFBZ0IsRUFBSTs7QUFDNUM7RUFBZ0MsaUJBQWdCLEVBQUk7O0FBQ3BEO0VBQXNCLGlCQUFnQixFQUFJOztBQUMxQztFQUE4QixpQkFBZ0IsRUFBSTs7QUFDbEQ7RUFBd0IsaUJBQWdCLEVBQUk7O0FBQzVDO0VBQWdDLGlCQUFnQixFQUFJOztBQUNwRDtFQUF1QixpQkFBZ0IsRUFBSTs7QUFDM0M7RUFBK0IsaUJBQWdCLEVBQUk7O0FBQ25EO0VBQXNCLGlCQUFnQixFQUFJOztBQUMxQztFQUE4QixpQkFBZ0IsRUFBSTs7QUFDbEQ7RUFBdUIsaUJBQWdCLEVBQUk7O0FBQzNDO0VBQStCLGlCQUFnQixFQUFJOztBQUNuRDtFQUE2QixpQkFBZ0IsRUFBSTs7QUFDakQ7RUFBcUMsaUJBQWdCLEVBQUk7O0FBQ3pEO0VBQTJCLGlCQUFnQixFQUFJOztBQUMvQztFQUFtQyxpQkFBZ0IsRUFBSTs7QUFDdkQ7RUFBdUIsaUJBQWdCLEVBQUk7O0FBQzNDO0VBQStCLGlCQUFnQixFQUFJOztBQUNuRDtFQUF5QixpQkFBZ0IsRUFBSTs7QUFDN0M7RUFBaUMsaUJBQWdCLEVBQUk7O0FBQ3JEO0VBQXNCLGlCQUFnQixFQUFJOztBQUMxQztFQUE4QixpQkFBZ0IsRUFBSTs7QUFDbEQ7RUFBdUIsaUJBQWdCLEVBQUk7O0FBQzNDO0VBQStCLGlCQUFnQixFQUFJOztBQUNuRDtFQUF1QixpQkFBZ0IsRUFBSTs7QUFDM0M7RUFBK0IsaUJBQWdCLEVBQUk7O0FBQ25EO0VBQXVCLGlCQUFnQixFQUFJOztBQUMzQztFQUErQixpQkFBZ0IsRUFBSTs7QUFDbkQ7RUFBNEIsaUJBQWdCLEVBQUk7O0FBQ2hEO0VBQW9DLGlCQUFnQixFQUFJOztBQUN4RDtFQUE4QixpQkFBZ0IsRUFBSTs7QUFDbEQ7RUFBc0MsaUJBQWdCLEVBQUk7O0FBQzFEO0VBQTJCLGlCQUFnQixFQUFJOztBQUMvQztFQUFtQyxpQkFBZ0IsRUFBSTs7QUFDdkQ7RUFBNEIsaUJBQWdCLEVBQUk7O0FBQ2hEO0VBQW1DLGlCQUFnQixFQUFJOztBQUN2RDtFQUEyQyxpQkFBZ0IsRUFBSTs7QUFDL0Q7RUFBb0MsaUJBQWdCLEVBQUk7O0FBQ3hEO0VBQTRCLGlCQUFnQixFQUFJOztBQUNoRDtFQUFvQyxpQkFBZ0IsRUFBSTs7QUFDeEQ7RUFBd0IsaUJBQWdCLEVBQUk7O0FBQzVDO0VBQWdDLGlCQUFnQixFQUFJOztBQUNwRDtFQUF3QixpQkFBZ0IsRUFBSTs7QUFDNUM7RUFBK0IsaUJBQWdCLEVBQUk7O0FBQ25EO0VBQXVDLGlCQUFnQixFQUFJOztBQUMzRDtFQUFnQyxpQkFBZ0IsRUFBSTs7QUFDcEQ7RUFBb0MsaUJBQWdCLEVBQUk7O0FBQ3hEO0VBQTRDLGlCQUFnQixFQUFJOztBQUNoRTtFQUF3QixpQkFBZ0IsRUFBSTs7QUFDNUM7RUFBK0IsaUJBQWdCLEVBQUk7O0FBQ25EO0VBQXVDLGlCQUFnQixFQUFJOztBQUMzRDtFQUE2QixpQkFBZ0IsRUFBSTs7QUFDakQ7RUFBcUMsaUJBQWdCLEVBQUk7O0FBQ3pEO0VBQWlDLGlCQUFnQixFQUFJOztBQUNyRDtFQUF5QyxpQkFBZ0IsRUFBSTs7QUFDN0Q7RUFBZ0MsaUJBQWdCLEVBQUk7O0FBQ3BEO0VBQStCLGlCQUFnQixFQUFJOztBQUNuRDtFQUF1QyxpQkFBZ0IsRUFBSTs7QUFDM0Q7RUFBeUIsaUJBQWdCLEVBQUk7O0FBQzdDO0VBQStCLGlCQUFnQixFQUFJOztBQUNuRDtFQUF1QyxpQkFBZ0IsRUFBSTs7QUFDM0Q7RUFBaUMsaUJBQWdCLEVBQUk7O0FBQ3JEO0VBQXVCLGlCQUFnQixFQUFJOztBQUMzQztFQUFnQyxpQkFBZ0IsRUFBSTs7QUFDcEQ7RUFBd0MsaUJBQWdCLEVBQUk7O0FBQzVEO0VBQStCLGlCQUFnQixFQUFJOztBQUNuRDtFQUErQixpQkFBZ0IsRUFBSTs7QUFDbkQ7RUFBdUMsaUJBQWdCLEVBQUk7O0FBQzNEO0VBQXNCLGlCQUFnQixFQUFJOztBQUMxQztFQUE4QixpQkFBZ0IsRUFBSTs7QUFDbEQ7RUFBNkIsaUJBQWdCLEVBQUk7O0FBQ2pEO0VBQXFDLGlCQUFnQixFQUFJOztBQUN6RDtFQUErQixpQkFBZ0IsRUFBSTs7QUFDbkQ7RUFBdUMsaUJBQWdCLEVBQUk7O0FBQzNEO0VBQWdDLGlCQUFnQixFQUFJOztBQUNwRDtFQUF3QyxpQkFBZ0IsRUFBSTs7QUFDNUQ7RUFBNkIsaUJBQWdCLEVBQUk7O0FBQ2pEO0VBQXFDLGlCQUFnQixFQUFJOztBQUN6RDtFQUEwQixpQkFBZ0IsRUFBSTs7QUFDOUM7RUFBa0MsaUJBQWdCLEVBQUk7O0FBQ3REO0VBQTRCLGlCQUFnQixFQUFJOztBQUNoRDtFQUFvQyxpQkFBZ0IsRUFBSTs7QUFDeEQ7RUFBMEIsaUJBQWdCLEVBQUk7O0FBQzlDO0VBQWtDLGlCQUFnQixFQUFJOztBQUN0RDtFQUEyQixpQkFBZ0IsRUFBSTs7QUFDL0M7RUFBbUMsaUJBQWdCLEVBQUk7O0FBQ3ZEO0VBQTJCLGlCQUFnQixFQUFJOztBQUMvQztFQUFtQyxpQkFBZ0IsRUFBSTs7QUFDdkQ7RUFBMkIsaUJBQWdCLEVBQUk7O0FBQy9DO0VBQW1DLGlCQUFnQixFQUFJOztBQUN2RDtFQUF1QixpQkFBZ0IsRUFBSTs7QUFDM0M7RUFBK0IsaUJBQWdCLEVBQUk7O0FBQ25EO0VBQXlCLGlCQUFnQixFQUFJOztBQUM3QztFQUFpQyxpQkFBZ0IsRUFBSTs7QUFDckQ7RUFBdUIsaUJBQWdCLEVBQUk7O0FBQzNDO0VBQStCLGlCQUFnQixFQUFJOztBQUNuRDtFQUF1QixpQkFBZ0IsRUFBSTs7QUFDM0M7RUFBK0IsaUJBQWdCLEVBQUk7O0FBQ25EO0VBQXNCLGlCQUFnQixFQUFJOztBQUMxQztFQUE4QixpQkFBZ0IsRUFBSTs7QUFDbEQ7RUFBMEIsaUJBQWdCLEVBQUk7O0FBQzlDO0VBQWtDLGlCQUFnQixFQUFJOztBQUN0RDtFQUF1QixpQkFBZ0IsRUFBSTs7QUFDM0M7RUFBK0IsaUJBQWdCLEVBQUk7O0FBQ25EO0VBQTJCLGlCQUFnQixFQUFJOztBQUMvQztFQUFtQyxpQkFBZ0IsRUFBSTs7QUFDdkQ7RUFBMkIsaUJBQWdCLEVBQUk7O0FBQy9DO0VBQW1DLGlCQUFnQixFQUFJOztBQUN2RDtFQUEyQixpQkFBZ0IsRUFBSTs7QUFDL0M7RUFBbUMsaUJBQWdCLEVBQUk7O0FBQ3ZEO0VBQXdCLGlCQUFnQixFQUFJOztBQUM1QztFQUFnQyxpQkFBZ0IsRUFBSTs7QUFDcEQ7RUFBc0IsaUJBQWdCLEVBQUk7O0FBQzFDO0VBQThCLGlCQUFnQixFQUFJOztBQUNsRDtFQUF1QixpQkFBZ0IsRUFBSTs7QUFDM0M7RUFBK0IsaUJBQWdCLEVBQUk7O0FBQ25EO0VBQXlCLGlCQUFnQixFQUFJOztBQUM3QztFQUFpQyxpQkFBZ0IsRUFBSTs7QUFDckQ7RUFBc0IsaUJBQWdCLEVBQUk7O0FBQzFDO0VBQTBCLGlCQUFnQixFQUFJOztBQUM5QztFQUFrQyxpQkFBZ0IsRUFBSTs7QUFDdEQ7RUFBOEIsaUJBQWdCLEVBQUk7O0FBQ2xEO0VBQThCLGlCQUFnQixFQUFJOztBQUNsRDtFQUFzQyxpQkFBZ0IsRUFBSTs7QUFDMUQ7RUFBeUIsaUJBQWdCLEVBQUk7O0FBQzdDO0VBQWlDLGlCQUFnQixFQUFJOztBQUNyRDtFQUF5QixpQkFBZ0IsRUFBSTs7QUFDN0M7RUFBaUMsaUJBQWdCLEVBQUk7O0FBQ3JEO0VBQXVCLGlCQUFnQixFQUFJOztBQUMzQztFQUErQixpQkFBZ0IsRUFBSTs7QUFDbkQ7RUFBK0IsaUJBQWdCLEVBQUk7O0FBQ25EO0VBQXVDLGlCQUFnQixFQUFJOztBQUMzRDtFQUF1QixpQkFBZ0IsRUFBSTs7QUFDM0M7RUFBK0IsaUJBQWdCLEVBQUk7O0FBQ25EO0VBQXdCLGlCQUFnQixFQUFJOztBQUM1QztFQUFnQyxpQkFBZ0IsRUFBSTs7QUFDcEQ7RUFBd0IsaUJBQWdCLEVBQUk7O0FBQzVDO0VBQWdDLGlCQUFnQixFQUFJOztBQUNwRDtFQUF3QixpQkFBZ0IsRUFBSTs7QUFDNUM7RUFBZ0MsaUJBQWdCLEVBQUk7O0FBQ3BEO0VBQXlCLGlCQUFnQixFQUFJOztBQUM3QztFQUFpQyxpQkFBZ0IsRUFBSTs7QUFDckQ7RUFBeUIsaUJBQWdCLEVBQUk7O0FBQzdDO0VBQThCLGlCQUFnQixFQUFJOztBQUNsRDtFQUFzQyxpQkFBZ0IsRUFBSTs7QUFDMUQ7RUFBaUMsaUJBQWdCLEVBQUk7O0FBQ3JEO0VBQTJCLGlCQUFnQixFQUFJOztBQUMvQztFQUFtQyxpQkFBZ0IsRUFBSTs7QUFDdkQ7RUFBeUIsaUJBQWdCLEVBQUk7O0FBQzdDO0VBQWlDLGlCQUFnQixFQUFJOztBQUNyRDtFQUFvQyxpQkFBZ0IsRUFBSTs7QUFDeEQ7RUFBNEMsaUJBQWdCLEVBQUk7O0FBQ2hFO0VBQW9DLGlCQUFnQixFQUFJOztBQUN4RDtFQUE0QyxpQkFBZ0IsRUFBSTs7QUFDaEU7RUFBNkIsaUJBQWdCLEVBQUk7O0FBQ2pEO0VBQXFDLGlCQUFnQixFQUFJOztBQUN6RDtFQUE2QixpQkFBZ0IsRUFBSTs7QUFDakQ7RUFBcUMsaUJBQWdCLEVBQUk7O0FBQ3pEO0VBQThCLGlCQUFnQixFQUFJOztBQUNsRDtFQUFzQyxpQkFBZ0IsRUFBSTs7QUFDMUQ7RUFBNEIsaUJBQWdCLEVBQUk7O0FBQ2hEO0VBQW9DLGlCQUFnQixFQUFJOztBQUN4RDtFQUE4QixpQkFBZ0IsRUFBSTs7QUFDbEQ7RUFBc0MsaUJBQWdCLEVBQUk7O0FBQzFEO0VBQW1DLGlCQUFnQixFQUFJOztBQUN2RDtFQUEyQyxpQkFBZ0IsRUFBSTs7QUFDL0Q7RUFBMEIsaUJBQWdCLEVBQUk7O0FBQzlDO0VBQWtDLGlCQUFnQixFQUFJOztBQUN0RDtFQUF3QixpQkFBZ0IsRUFBSTs7QUFDNUM7RUFBZ0MsaUJBQWdCLEVBQUk7O0FBQ3BEO0VBQXVCLGlCQUFnQixFQUFJOztBQUMzQztFQUErQixpQkFBZ0IsRUFBSTs7QUFDbkQ7RUFBeUIsaUJBQWdCLEVBQUk7O0FBQzdDO0VBQWlDLGlCQUFnQixFQUFJOztBQUNyRDtFQUF1QixpQkFBZ0IsRUFBSTs7QUFDM0M7RUFBK0IsaUJBQWdCLEVBQUk7O0FBQ25EO0VBQXdCLGlCQUFnQixFQUFJOztBQUM1QztFQUFnQyxpQkFBZ0IsRUFBSTs7QUFDcEQ7RUFBMEIsaUJBQWdCLEVBQUk7O0FBQzlDO0VBQWtDLGlCQUFnQixFQUFJOztBQUN0RDtFQUF3QixpQkFBZ0IsRUFBSTs7QUFDNUM7RUFBZ0MsaUJBQWdCLEVBQUk7O0FBQ3BEO0VBQXVCLGlCQUFnQixFQUFJOztBQUMzQztFQUE0QixpQkFBZ0IsRUFBSTs7QUFDaEQ7RUFBb0MsaUJBQWdCLEVBQUk7O0FBQ3hEO0VBQThCLGlCQUFnQixFQUFJOztBQUNsRDtFQUFzQyxpQkFBZ0IsRUFBSTs7QUFDMUQ7RUFBK0IsaUJBQWdCLEVBQUk7O0FBQ25EO0VBQXVCLGlCQUFnQixFQUFJOztBQUMzQztFQUErQixpQkFBZ0IsRUFBSTs7QUFDbkQ7RUFBNEIsaUJBQWdCLEVBQUk7O0FBQ2hEO0VBQW9DLGlCQUFnQixFQUFJOztBQUN4RDtFQUF3QixpQkFBZ0IsRUFBSTs7QUFDNUM7RUFBZ0MsaUJBQWdCLEVBQUk7O0FBQ3BEO0VBQXlCLGlCQUFnQixFQUFJOztBQUM3QztFQUFpQyxpQkFBZ0IsRUFBSTs7QUFDckQ7RUFBMkIsaUJBQWdCLEVBQUk7O0FBQy9DO0VBQW1DLGlCQUFnQixFQUFJOztBQUN2RDtFQUE4QixpQkFBZ0IsRUFBSTs7QUFDbEQ7RUFBcUMsaUJBQWdCLEVBQUk7O0FBQ3pEO0VBQTZDLGlCQUFnQixFQUFJOztBQUNqRTtFQUFzQyxpQkFBZ0IsRUFBSTs7QUFDMUQ7RUFBd0IsaUJBQWdCLEVBQUk7O0FBQzVDO0VBQWdDLGlCQUFnQixFQUFJOztBQUNwRDtFQUEyQixpQkFBZ0IsRUFBSTs7QUFDL0M7RUFBbUMsaUJBQWdCLEVBQUk7O0FBQ3ZEO0VBQXNCLGlCQUFnQixFQUFJOztBQUMxQztFQUE4QixpQkFBZ0IsRUFBSTs7QUFDbEQ7RUFBc0IsaUJBQWdCLEVBQUk7O0FBQzFDO0VBQThCLGlCQUFnQixFQUFJOztBQUNsRDtFQUF5QixpQkFBZ0IsRUFBSTs7QUFDN0M7RUFBaUMsaUJBQWdCLEVBQUk7O0FBQ3JEO0VBQXlCLGlCQUFnQixFQUFJOztBQUM3QztFQUFpQyxpQkFBZ0IsRUFBSTs7QUFDckQ7RUFBdUIsaUJBQWdCLEVBQUk7O0FBQzNDO0VBQStCLGlCQUFnQixFQUFJOztBQUNuRDtFQUF1QixpQkFBZ0IsRUFBSTs7QUFDM0M7RUFBK0IsaUJBQWdCLEVBQUk7O0FBQ25EO0VBQXVCLGlCQUFnQixFQUFJOztBQUMzQztFQUEyQixpQkFBZ0IsRUFBSTs7QUFDL0M7RUFBbUMsaUJBQWdCLEVBQUk7O0FBQ3ZEO0VBQStCLGlCQUFnQixFQUFJOztBQUNuRDtFQUF5QixpQkFBZ0IsRUFBSTs7QUFDN0M7RUFBaUMsaUJBQWdCLEVBQUk7O0FBQ3JEO0VBQXVCLGlCQUFnQixFQUFJOztBQUMzQztFQUErQixpQkFBZ0IsRUFBSTs7QUFDbkQ7RUFBeUIsaUJBQWdCLEVBQUk7O0FBQzdDO0VBQWlDLGlCQUFnQixFQUFJOztBQUNyRDtFQUEwQixpQkFBZ0IsRUFBSTs7QUFDOUM7RUFBa0MsaUJBQWdCLEVBQUk7O0FBQ3REO0VBQXlCLGlCQUFnQixFQUFJOztBQUM3QztFQUFpQyxpQkFBZ0IsRUFBSTs7QUFDckQ7RUFBdUIsaUJBQWdCLEVBQUk7O0FBQzNDO0VBQTRCLGlCQUFnQixFQUFJOztBQUNoRDtFQUFvQyxpQkFBZ0IsRUFBSTs7QUFDeEQ7RUFBK0IsaUJBQWdCLEVBQUk7O0FBQ25EO0VBQXVCLGlCQUFnQixFQUFJOztBQUMzQztFQUErQixpQkFBZ0IsRUFBSTs7QUFDbkQ7RUFBc0IsaUJBQWdCLEVBQUk7O0FBQzFDO0VBQThCLGlCQUFnQixFQUFJOztBQUNsRDtFQUFzQixpQkFBZ0IsRUFBSTs7QUFDMUM7RUFBOEIsaUJBQWdCLEVBQUk7O0FBQ2xEO0VBQXdCLGlCQUFnQixFQUFJOztBQUM1QztFQUFnQyxpQkFBZ0IsRUFBSTs7QUFDcEQ7RUFBMEIsaUJBQWdCLEVBQUk7O0FBQzlDO0VBQWtDLGlCQUFnQixFQUFJOztBQUN0RDtFQUF5QixpQkFBZ0IsRUFBSTs7QUFDN0M7RUFBaUMsaUJBQWdCLEVBQUk7O0FBQ3JEO0VBQTRCLGlCQUFnQixFQUFJOztBQUNoRDtFQUFvQyxpQkFBZ0IsRUFBSTs7QUFDeEQ7RUFBdUIsaUJBQWdCLEVBQUk7O0FBQzNDO0VBQStCLGlCQUFnQixFQUFJOztBQUNuRDtFQUFzQixpQkFBZ0IsRUFBSTs7QUFDMUM7RUFBMEIsaUJBQWdCLEVBQUk7O0FBQzlDO0VBQWtDLGlCQUFnQixFQUFJOztBQUN0RDtFQUE4QixpQkFBZ0IsRUFBSTs7QUFDbEQ7RUFBNkIsaUJBQWdCLEVBQUk7O0FBQ2pEO0VBQXFDLGlCQUFnQixFQUFJOztBQUN6RDtFQUF1QixpQkFBZ0IsRUFBSTs7QUFDM0M7RUFBK0IsaUJBQWdCLEVBQUk7O0FBQ25EO0VBQXVCLGlCQUFnQixFQUFJOztBQUMzQztFQUErQixpQkFBZ0IsRUFBSTs7QUFDbkQ7RUFBdUIsaUJBQWdCLEVBQUk7O0FBQzNDO0VBQStCLGlCQUFnQixFQUFJOztBQUNuRDtFQUErQixpQkFBZ0IsRUFBSTs7QUFDbkQ7RUFBdUMsaUJBQWdCLEVBQUk7O0FBQzNEO0VBQWdDLGlCQUFnQixFQUFJOztBQUNwRDtFQUF3QyxpQkFBZ0IsRUFBSTs7QUFDNUQ7RUFBMkIsaUJBQWdCLEVBQUk7O0FBQy9DO0VBQW1DLGlCQUFnQixFQUFJOztBQUN2RDtFQUE2QixpQkFBZ0IsRUFBSTs7QUFDakQ7RUFBcUMsaUJBQWdCLEVBQUk7O0FBQ3pEO0VBQWdDLGlCQUFnQixFQUFJOztBQUNwRDtFQUFvQyxpQkFBZ0IsRUFBSTs7QUFDeEQ7RUFBNEMsaUJBQWdCLEVBQUk7O0FBQ2hFO0VBQXdDLGlCQUFnQixFQUFJOztBQUM1RDtFQUEwQixpQkFBZ0IsRUFBSTs7QUFDOUM7RUFBa0MsaUJBQWdCLEVBQUk7O0FBQ3REO0VBQTRCLGlCQUFnQixFQUFJOztBQUNoRDtFQUFvQyxpQkFBZ0IsRUFBSTs7QUFDeEQ7RUFBdUIsaUJBQWdCLEVBQUk7O0FBQzNDO0VBQStCLGlCQUFnQixFQUFJOztBQUNuRDtFQUEwQixpQkFBZ0IsRUFBSTs7QUFDOUM7RUFBa0MsaUJBQWdCLEVBQUk7O0FBQ3REO0VBQXlCLGlCQUFnQixFQUFJOztBQUM3QztFQUFpQyxpQkFBZ0IsRUFBSTs7QUFDckQ7RUFBd0IsaUJBQWdCLEVBQUk7O0FBQzVDO0VBQWdDLGlCQUFnQixFQUFJOztBQUNwRDtFQUE4QixpQkFBZ0IsRUFBSTs7QUFDbEQ7RUFBc0MsaUJBQWdCLEVBQUk7O0FBQzFEO0VBQStCLGlCQUFnQixFQUFJOztBQUNuRDtFQUF1QyxpQkFBZ0IsRUFBSTs7QUFDM0Q7RUFBd0IsaUJBQWdCLEVBQUk7O0FBQzVDO0VBQWdDLGlCQUFnQixFQUFJOztBQUNwRDtFQUFzQixpQkFBZ0IsRUFBSTs7QUFDMUM7RUFBOEIsaUJBQWdCLEVBQUk7O0FBQ2xEO0VBQXlCLGlCQUFnQixFQUFJOztBQUM3QztFQUFpQyxpQkFBZ0IsRUFBSTs7QUFDckQ7RUFBeUIsaUJBQWdCLEVBQUk7O0FBQzdDO0VBQTZCLGlCQUFnQixFQUFJOztBQUNqRDtFQUFxQyxpQkFBZ0IsRUFBSTs7QUFDekQ7RUFBaUMsaUJBQWdCLEVBQUk7O0FBQ3JEO0VBQWtDLGlCQUFnQixFQUFJOztBQUN0RDtFQUEwQyxpQkFBZ0IsRUFBSTs7QUFDOUQ7RUFBaUMsaUJBQWdCLEVBQUk7O0FBQ3JEO0VBQXlDLGlCQUFnQixFQUFJOztBQUM3RDtFQUF5QixpQkFBZ0IsRUFBSTs7QUFDN0M7RUFBaUMsaUJBQWdCLEVBQUk7O0FBQ3JEO0VBQXNCLGlCQUFnQixFQUFJOztBQUMxQztFQUE4QixpQkFBZ0IsRUFBSTs7QUFDbEQ7RUFBc0IsaUJBQWdCLEVBQUk7O0FBQzFDO0VBQThCLGlCQUFnQixFQUFJOztBQUNsRDtFQUF1QixpQkFBZ0IsRUFBSTs7QUFDM0M7RUFBK0IsaUJBQWdCLEVBQUk7O0FBQ25EO0VBQXdCLGlCQUFnQixFQUFJOztBQUM1QztFQUFnQyxpQkFBZ0IsRUFBSTs7QUFDcEQ7RUFBd0IsaUJBQWdCLEVBQUk7O0FBQzVDO0VBQWdDLGlCQUFnQixFQUFJOztBQUNwRDtFQUF5QixpQkFBZ0IsRUFBSTs7QUFDN0M7RUFBaUMsaUJBQWdCLEVBQUk7O0FBQ3JEO0VBQXVCLGlCQUFnQixFQUFJOztBQUMzQztFQUErQixpQkFBZ0IsRUFBSTs7QUFDbkQ7RUFBeUIsaUJBQWdCLEVBQUk7O0FBQzdDO0VBQWlDLGlCQUFnQixFQUFJOztBQUNyRDtFQUF3QixpQkFBZ0IsRUFBSTs7QUFDNUM7RUFBZ0MsaUJBQWdCLEVBQUk7O0FBQ3BEO0VBQTJCLGlCQUFnQixFQUFJOztBQUMvQztFQUFtQyxpQkFBZ0IsRUFBSTs7QUFDdkQ7RUFBNEIsaUJBQWdCLEVBQUk7O0FBQ2hEO0VBQW9DLGlCQUFnQixFQUFJOztBQUN4RDtFQUF3QixpQkFBZ0IsRUFBSTs7QUFDNUM7RUFBZ0MsaUJBQWdCLEVBQUk7O0FBQ3BEO0VBQXdCLGlCQUFnQixFQUFJOztBQUM1QztFQUFnQyxpQkFBZ0IsRUFBSTs7QUFDcEQ7RUFBNkIsaUJBQWdCLEVBQUk7O0FBQ2pEO0VBQXFDLGlCQUFnQixFQUFJOztBQUN6RDtFQUF3QixpQkFBZ0IsRUFBSTs7QUFDNUM7RUFBZ0MsaUJBQWdCLEVBQUk7O0FBQ3BEO0VBQXdCLGlCQUFnQixFQUFJOztBQUM1QztFQUFtQyxpQkFBZ0IsRUFBSTs7QUFDdkQ7RUFBMkMsaUJBQWdCLEVBQUk7O0FBQy9EO0VBQWtDLGlCQUFnQixFQUFJOztBQUN0RDtFQUEwQyxpQkFBZ0IsRUFBSTs7QUFDOUQ7RUFBZ0MsaUJBQWdCLEVBQUk7O0FBQ3BEO0VBQXdCLGlCQUFnQixFQUFJOztBQUM1QztFQUFnQyxpQkFBZ0IsRUFBSTs7QUFDcEQ7RUFBNEIsaUJBQWdCLEVBQUk7O0FBQ2hEO0VBQW9DLGlCQUFnQixFQUFJOztBQUN4RDtFQUF1QixpQkFBZ0IsRUFBSTs7QUFDM0M7RUFBK0IsaUJBQWdCLEVBQUk7O0FBQ25EO0VBQTBCLGlCQUFnQixFQUFJOztBQUM5QztFQUFpQyxpQkFBZ0IsRUFBSTs7QUFDckQ7RUFBeUMsaUJBQWdCLEVBQUk7O0FBQzdEO0VBQWtDLGlCQUFnQixFQUFJOztBQUN0RDtFQUF5QixpQkFBZ0IsRUFBSTs7QUFDN0M7RUFBZ0MsaUJBQWdCLEVBQUk7O0FBQ3BEO0VBQXdDLGlCQUFnQixFQUFJOztBQUM1RDtFQUFpQyxpQkFBZ0IsRUFBSTs7QUFDckQ7RUFBMEIsaUJBQWdCLEVBQUk7O0FBQzlDO0VBQWtDLGlCQUFnQixFQUFJOztBQUN0RDtFQUF5QixpQkFBZ0IsRUFBSTs7QUFDN0M7RUFBaUMsaUJBQWdCLEVBQUk7O0FBQ3JEO0VBQXlCLGlCQUFnQixFQUFJOztBQUM3QztFQUFpQyxpQkFBZ0IsRUFBSTs7QUFDckQ7RUFBNkIsaUJBQWdCLEVBQUk7O0FBQ2pEO0VBQXFDLGlCQUFnQixFQUFJOztBQUN6RDtFQUE4QixpQkFBZ0IsRUFBSTs7QUFDbEQ7RUFBc0MsaUJBQWdCLEVBQUk7O0FBQzFEO0VBQStCLGlCQUFnQixFQUFJOztBQUNuRDtFQUF1QyxpQkFBZ0IsRUFBSTs7QUFDM0Q7RUFBaUMsaUJBQWdCLEVBQUk7O0FBQ3JEO0VBQXlDLGlCQUFnQixFQUFJOztBQUM3RDtFQUF5QixpQkFBZ0IsRUFBSTs7QUFDN0M7RUFBaUMsaUJBQWdCLEVBQUk7O0FBQ3JEO0VBQXlCLGlCQUFnQixFQUFJOztBQUM3QztFQUFpQyxpQkFBZ0IsRUFBSTs7QUFDckQ7RUFBdUIsaUJBQWdCLEVBQUk7O0FBQzNDO0VBQStCLGlCQUFnQixFQUFJOztBQUNuRDtFQUFzQixpQkFBZ0IsRUFBSTs7QUFDMUM7RUFBOEIsaUJBQWdCLEVBQUk7O0FBQ2xEO0VBQXlCLGlCQUFnQixFQUFJOztBQUM3QztFQUFpQyxpQkFBZ0IsRUFBSTs7QUFDckQ7RUFBeUIsaUJBQWdCLEVBQUk7O0FBQzdDO0VBQWlDLGlCQUFnQixFQUFJOztBQUNyRDtFQUF1QixpQkFBZ0IsRUFBSTs7QUFDM0M7RUFBK0IsaUJBQWdCLEVBQUk7O0FBQ25EO0VBQTJCLGlCQUFnQixFQUFJOztBQUMvQztFQUFtQyxpQkFBZ0IsRUFBSTs7QUFDdkQ7RUFBd0IsaUJBQWdCLEVBQUk7O0FBQzVDO0VBQTRCLGlCQUFnQixFQUFJOztBQUNoRDtFQUFvQyxpQkFBZ0IsRUFBSTs7QUFDeEQ7RUFBZ0MsaUJBQWdCLEVBQUk7O0FBQ3BEO0VBQXdCLGlCQUFnQixFQUFJOztBQUM1QztFQUFnQyxpQkFBZ0IsRUFBSTs7QUFDcEQ7RUFBMEIsaUJBQWdCLEVBQUk7O0FBQzlDO0VBQWtDLGlCQUFnQixFQUFJOztBQUN0RDtFQUFnQyxpQkFBZ0IsRUFBSTs7QUFDcEQ7RUFBd0MsaUJBQWdCLEVBQUk7O0FBQzVEO0VBQStCLGlCQUFnQixFQUFJOztBQUNuRDtFQUF1QyxpQkFBZ0IsRUFBSTs7QUFDM0Q7RUFBdUIsaUJBQWdCLEVBQUk7O0FBQzNDO0VBQStCLGlCQUFnQixFQUFJOztBQUNuRDtFQUE4QixpQkFBZ0IsRUFBSTs7QUFDbEQ7RUFBc0MsaUJBQWdCLEVBQUk7O0FBQzFEO0VBQXlCLGlCQUFnQixFQUFJOztBQUM3QztFQUFpQyxpQkFBZ0IsRUFBSTs7QUFDckQ7RUFBdUIsaUJBQWdCLEVBQUk7O0FBQzNDO0VBQTRCLGlCQUFnQixFQUFJOztBQUNoRDtFQUFvQyxpQkFBZ0IsRUFBSTs7QUFDeEQ7RUFBK0IsaUJBQWdCLEVBQUk7O0FBQ25EO0VBQXdCLGlCQUFnQixFQUFJOztBQUM1QztFQUFnQyxpQkFBZ0IsRUFBSTs7QUFDcEQ7RUFBNEIsaUJBQWdCLEVBQUk7O0FBQ2hEO0VBQW9DLGlCQUFnQixFQUFJOztBQUN4RDtFQUF5QixpQkFBZ0IsRUFBSTs7QUFDN0M7RUFBaUMsaUJBQWdCLEVBQUk7O0FBQ3JEO0VBQXdCLGlCQUFnQixFQUFJOztBQUM1QztFQUFnQyxpQkFBZ0IsRUFBSTs7QUFDcEQ7RUFBdUIsaUJBQWdCLEVBQUk7O0FBQzNDO0VBQStCLGlCQUFnQixFQUFJOztBQUNuRDtFQUF5QixpQkFBZ0IsRUFBSTs7QUFDN0M7RUFBaUMsaUJBQWdCLEVBQUk7O0FBQ3JEO0VBQXVCLGlCQUFnQixFQUFJOztBQUMzQztFQUErQixpQkFBZ0IsRUFBSTs7QUFDbkQ7RUFBbUMsaUJBQWdCLEVBQUk7O0FBQ3ZEO0VBQTJDLGlCQUFnQixFQUFJOztBQUMvRDtFQUFrQyxpQkFBZ0IsRUFBSTs7QUFDdEQ7RUFBMEMsaUJBQWdCLEVBQUk7O0FBQzlEO0VBQTZCLGlCQUFnQixFQUFJOztBQUNqRDtFQUFxQyxpQkFBZ0IsRUFBSTs7QUFDekQ7RUFBdUIsaUJBQWdCLEVBQUk7O0FBQzNDO0VBQStCLGlCQUFnQixFQUFJOztBQUNuRDtFQUE4QixpQkFBZ0IsRUFBSTs7QUFDbEQ7RUFBc0MsaUJBQWdCLEVBQUk7O0FBQzFEO0VBQThCLGlCQUFnQixFQUFJOztBQUNsRDtFQUFzQyxpQkFBZ0IsRUFBSTs7QUFDMUQ7RUFBNEIsaUJBQWdCLEVBQUk7O0FBQ2hEO0VBQW9DLGlCQUFnQixFQUFJOztBQUN4RDtFQUErQixpQkFBZ0IsRUFBSTs7QUFDbkQ7RUFBdUMsaUJBQWdCLEVBQUk7O0FBQzNEO0VBQXVCLGlCQUFnQixFQUFJOztBQUMzQztFQUErQixpQkFBZ0IsRUFBSTs7QUFDbkQ7RUFBd0IsaUJBQWdCLEVBQUk7O0FBQzVDO0VBQWdDLGlCQUFnQixFQUFJOztBQUNwRDtFQUF3QixpQkFBZ0IsRUFBSTs7QUFDNUM7RUFBZ0MsaUJBQWdCLEVBQUk7O0FBQ3BEO0VBQThCLGlCQUFnQixFQUFJOztBQUNsRDtFQUFzQyxpQkFBZ0IsRUFBSTs7QUFDMUQ7RUFBd0IsaUJBQWdCLEVBQUk7O0FBQzVDO0VBQWdDLGlCQUFnQixFQUFJOztBQUNwRDtFQUFnQyxpQkFBZ0IsRUFBSTs7QUFDcEQ7RUFBd0MsaUJBQWdCLEVBQUk7O0FBQzVEO0VBQThCLGlCQUFnQixFQUFJOztBQUNsRDtFQUFzQyxpQkFBZ0IsRUFBSTs7QUFDMUQ7RUFBeUIsaUJBQWdCLEVBQUk7O0FBQzdDO0VBQWlDLGlCQUFnQixFQUFJOztBQUNyRDtFQUEyQixpQkFBZ0IsRUFBSTs7QUFDL0M7RUFBbUMsaUJBQWdCLEVBQUk7O0FBQ3ZEO0VBQXVCLGlCQUFnQixFQUFJOztBQUMzQztFQUErQixpQkFBZ0IsRUFBSTs7QUFDbkQ7RUFBeUIsaUJBQWdCLEVBQUk7O0FBQzdDO0VBQWlDLGlCQUFnQixFQUFJOztBQUNyRDtFQUEyQixpQkFBZ0IsRUFBSTs7QUFDL0M7RUFBbUMsaUJBQWdCLEVBQUk7O0FBQ3ZEO0VBQThCLGlCQUFnQixFQUFJOztBQUNsRDtFQUFzQyxpQkFBZ0IsRUFBSTs7QUFDMUQ7RUFBOEIsaUJBQWdCLEVBQUk7O0FBQ2xEO0VBQXNDLGlCQUFnQixFQUFJOztBQUMxRDtFQUE2QixpQkFBZ0IsRUFBSTs7QUFDakQ7RUFBcUMsaUJBQWdCLEVBQUk7O0FBQ3pEO0VBQTRCLGlCQUFnQixFQUFJOztBQUNoRDtFQUFvQyxpQkFBZ0IsRUFBSTs7QUFDeEQ7RUFBdUIsaUJBQWdCLEVBQUk7O0FBQzNDO0VBQStCLGlCQUFnQixFQUFJOztBQUNuRDtFQUEwQixpQkFBZ0IsRUFBSTs7QUFDOUM7RUFBa0MsaUJBQWdCLEVBQUk7O0FBQ3REO0VBQXdCLGlCQUFnQixFQUFJOztBQUM1QztFQUFnQyxpQkFBZ0IsRUFBSTs7QUFDcEQ7RUFBd0IsaUJBQWdCLEVBQUk7O0FBQzVDO0VBQWdDLGlCQUFnQixFQUFJOztBQUNwRDtFQUF1QixpQkFBZ0IsRUFBSTs7QUFDM0M7RUFBK0IsaUJBQWdCLEVBQUk7O0FBQ25EO0VBQXVCLGlCQUFnQixFQUFJOztBQUMzQztFQUErQixpQkFBZ0IsRUFBSTs7QUFDbkQ7RUFBd0IsaUJBQWdCLEVBQUk7O0FBQzVDO0VBQWdDLGlCQUFnQixFQUFJOztBQUNwRDtFQUEyQixpQkFBZ0IsRUFBSTs7QUFDL0M7RUFBMkIsaUJBQWdCLEVBQUk7O0FBQy9DO0VBQXlCLGlCQUFnQixFQUFJOztBQUM3QztFQUEyQixpQkFBZ0IsRUFBSTs7QUFDL0M7RUFBMEIsaUJBQWdCLEVBQUk7O0FBQzlDO0VBQTBCLGlCQUFnQixFQUFJOztBQUM5QztFQUEyQixpQkFBZ0IsRUFBSTs7QUFDL0M7RUFBd0IsaUJBQWdCLEVBQUk7O0FBQzVDO0VBQWdDLGlCQUFnQixFQUFJOztBQUNwRDtFQUE0QixpQkFBZ0IsRUFBSTs7QUFDaEQ7RUFBMkIsaUJBQWdCLEVBQUk7O0FBQy9DO0VBQXdCLGlCQUFnQixFQUFJOztBQUM1QztFQUE0QixpQkFBZ0IsRUFBSTs7QUFDaEQ7RUFBOEIsaUJBQWdCLEVBQUk7O0FBQ2xEO0VBQWlDLGlCQUFnQixFQUFJOztBQUNyRDtFQUEwQixpQkFBZ0IsRUFBSTs7QUFDOUM7RUFBMEIsaUJBQWdCLEVBQUk7O0FBQzlDO0VBQThCLGlCQUFnQixFQUFJOztBQUNsRDtFQUE4QixpQkFBZ0IsRUFBSTs7QUFDbEQ7RUFBeUIsaUJBQWdCLEVBQUk7O0FBQzdDO0VBQTZCLGlCQUFnQixFQUFJOztBQUNqRDtFQUE4QixpQkFBZ0IsRUFBSTs7QUFDbEQ7RUFBNEIsaUJBQWdCLEVBQUk7O0FBQ2hEO0VBQTRCLGlCQUFnQixFQUFJOztBQUNoRDtFQUEwQixpQkFBZ0IsRUFBSTs7QUFDOUM7RUFBMkIsaUJBQWdCLEVBQUk7O0FBQy9DO0VBQTZCLGlCQUFnQixFQUFJOztBQUNqRDtFQUErQixpQkFBZ0IsRUFBSTs7QUFDbkQ7RUFBMEIsaUJBQWdCLEVBQUk7O0FBQzlDO0VBQTBCLGlCQUFnQixFQUFJOztBQUM5QztFQUF1QixpQkFBZ0IsRUFBSTs7QUFDM0M7RUFBd0IsaUJBQWdCLEVBQUk7O0FBQzVDO0VBQXlCLGlCQUFnQixFQUFJOztBQUM3QztFQUE0QixpQkFBZ0IsRUFBSTs7QUFDaEQ7RUFBeUIsaUJBQWdCLEVBQUk7O0FBQzdDO0VBQTBCLGlCQUFnQixFQUFJOztBQUM5QztFQUF1QixpQkFBZ0IsRUFBSTs7QUFDM0M7RUFBMEIsaUJBQWdCLEVBQUk7O0FBQzlDO0VBQTJCLGlCQUFnQixFQUFJOztBQUMvQztFQUF1QixpQkFBZ0IsRUFBSTs7QUFDM0M7RUFBeUIsaUJBQWdCLEVBQUk7O0FBQzdDO0VBQTRCLGlCQUFnQixFQUFJOztBQUNoRDtFQUEyQixpQkFBZ0IsRUFBSTs7QUFDL0M7RUFBNkIsaUJBQWdCLEVBQUk7O0FBQ2pEO0VBQXdCLGlCQUFnQixFQUFJOztBQUM1QztFQUF5QixpQkFBZ0IsRUFBSTs7QUFDN0M7RUFBdUIsaUJBQWdCLEVBQUk7O0FBQzNDO0VBQTJCLGlCQUFnQixFQUFJOztBQUMvQztFQUFxQixpQkFBZ0IsRUFBSTs7QUFDekM7RUFBNEIsaUJBQWdCLEVBQUk7O0FBQ2hEO0VBQXVCLGlCQUFnQixFQUFJOztBQUMzQztFQUF3QixpQkFBZ0IsRUFBSTs7QUFDNUM7RUFBdUIsaUJBQWdCLEVBQUk7O0FBQzNDO0VBQW1DLGlCQUFnQixFQUFJOztBQUN2RDtFQUEyQixpQkFBZ0IsRUFBSTs7QUFDL0M7RUFBMEIsaUJBQWdCLEVBQUk7O0FBQzlDO0VBQXNCLGlCQUFnQixFQUFJOztBQUMxQztFQUEwQixpQkFBZ0IsRUFBSTs7QUFDOUM7RUFBeUIsaUJBQWdCLEVBQUk7O0FBQzdDO0VBQTRCLGlCQUFnQixFQUFJOztBQUNoRDtFQUE0QixpQkFBZ0IsRUFBSTs7QUFDaEQ7RUFBZ0MsaUJBQWdCLEVBQUk7O0FBQ3BEO0VBQXVDLGlCQUFnQixFQUFJOztBQUMzRDtFQUFnQyxpQkFBZ0IsRUFBSTs7QUFDcEQ7RUFBdUMsaUJBQWdCLEVBQUk7O0FBQzNEO0VBQWlDLGlCQUFnQixFQUFJOztBQUNyRDtFQUF3QyxpQkFBZ0IsRUFBSTs7QUFDNUQ7RUFBOEIsaUJBQWdCLEVBQUk7O0FBQ2xEO0VBQXFDLGlCQUFnQixFQUFJOztBQUN6RDtFQUErQixpQkFBZ0IsRUFBSTs7QUFDbkQ7RUFBa0MsaUJBQWdCLEVBQUk7O0FBQ3REO0VBQWtDLGlCQUFnQixFQUFJOztBQUN0RDtFQUFxQyxpQkFBZ0IsRUFBSTs7QUFDekQ7RUFBZ0MsaUJBQWdCLEVBQUk7O0FBQ3BEO0VBQTBCLGlCQUFnQixFQUFJOztBQUM5QztFQUFvQixpQkFBZ0IsRUFBSTs7QUFDeEM7RUFBd0IsaUJBQWdCLEVBQUk7O0FBQzVDO0VBQTJCLGlCQUFnQixFQUFJOztBQUMvQztFQUF5QixpQkFBZ0IsRUFBSTs7QUFDN0M7RUFBMEIsaUJBQWdCLEVBQUk7O0FBQzlDO0VBQXdCLGlCQUFnQixFQUFJOztBQUM1QztFQUE0QixpQkFBZ0IsRUFBSTs7QUFDaEQ7RUFBa0MsaUJBQWdCLEVBQUk7O0FBQ3REO0VBQThCLGlCQUFnQixFQUFJOztBQUNsRDtFQUE4QixpQkFBZ0IsRUFBSTs7QUFDbEQ7RUFBd0IsaUJBQWdCLEVBQUk7O0FBQzVDO0VBQXNCLGlCQUFnQixFQUFJOztBQUMxQztFQUF5QixpQkFBZ0IsRUFBSTs7QUFDN0M7RUFBMkIsaUJBQWdCLEVBQUk7O0FBQy9DO0VBQXNCLGlCQUFnQixFQUFJOztBQUMxQztFQUFzQixpQkFBZ0IsRUFBSTs7QUFDMUM7RUFBeUIsaUJBQWdCLEVBQUk7O0FBQzdDO0VBQXNCLGlCQUFnQixFQUFJOztBQUMxQztFQUEwQixpQkFBZ0IsRUFBSTs7QUFDOUM7RUFBMkIsaUJBQWdCLEVBQUk7O0FBQy9DO0VBQXdCLGlCQUFnQixFQUFJOztBQUM1QztFQUEyQixpQkFBZ0IsRUFBSTs7QUFDL0M7RUFBMEIsaUJBQWdCLEVBQUk7O0FBQzlDO0VBQXVCLGlCQUFnQixFQUFJOztBQUMzQztFQUFxQixpQkFBZ0IsRUFBSTs7QUFDekM7RUFBdUIsaUJBQWdCLEVBQUk7O0FBQzNDO0VBQXNCLGlCQUFnQixFQUFJOztBQUMxQztFQUFxQixpQkFBZ0IsRUFBSTs7QUFDekM7RUFBc0IsaUJBQWdCLEVBQUk7O0FBQzFDO0VBQTRCLGlCQUFnQixFQUFJOztBQUNoRDtFQUEwQixpQkFBZ0IsRUFBSTs7QUFDOUM7RUFBc0IsaUJBQWdCLEVBQUk7O0FBQzFDO0VBQXdCLGlCQUFnQixFQUFJOztBQUM1QztFQUFxQixpQkFBZ0IsRUFBSTs7QUFDekM7RUFBc0IsaUJBQWdCLEVBQUk7O0FBQzFDO0VBQXNCLGlCQUFnQixFQUFJOztBQUMxQztFQUFzQixpQkFBZ0IsRUFBSTs7QUFDMUM7RUFBMkIsaUJBQWdCLEVBQUk7O0FBQy9DO0VBQTZCLGlCQUFnQixFQUFJOztBQUNqRDtFQUEwQixpQkFBZ0IsRUFBSTs7QUFDOUM7RUFBa0MsaUJBQWdCLEVBQUk7O0FBQ3REO0VBQTJCLGlCQUFnQixFQUFJOztBQUMvQztFQUFrQyxpQkFBZ0IsRUFBSTs7QUFDdEQ7RUFBMEMsaUJBQWdCLEVBQUk7O0FBQzlEO0VBQTJCLGlCQUFnQixFQUFJOztBQUMvQztFQUF1QixpQkFBZ0IsRUFBSTs7QUFDM0M7RUFBdUIsaUJBQWdCLEVBQUk7O0FBQzNDO0VBQThCLGlCQUFnQixFQUFJOztBQUNsRDtFQUFtQyxpQkFBZ0IsRUFBSTs7QUFDdkQ7RUFBdUIsaUJBQWdCLEVBQUk7O0FBQzNDO0VBQThCLGlCQUFnQixFQUFJOztBQUNsRDtFQUE0QixpQkFBZ0IsRUFBSTs7QUFDaEQ7RUFBZ0MsaUJBQWdCLEVBQUk7O0FBQ3BEO0VBQStCLGlCQUFnQixFQUFJOztBQUNuRDtFQUE4QixpQkFBZ0IsRUFBSTs7QUFDbEQ7RUFBd0IsaUJBQWdCLEVBQUk7O0FBQzVDO0VBQThCLGlCQUFnQixFQUFJOztBQUNsRDtFQUFzQixpQkFBZ0IsRUFBSTs7QUFDMUM7RUFBK0IsaUJBQWdCLEVBQUk7O0FBQ25EO0VBQThCLGlCQUFnQixFQUFJOztBQUNsRDtFQUFxQixpQkFBZ0IsRUFBSTs7QUFDekM7RUFBNEIsaUJBQWdCLEVBQUk7O0FBQ2hEO0VBQThCLGlCQUFnQixFQUFJOztBQUNsRDtFQUErQixpQkFBZ0IsRUFBSTs7QUFDbkQ7RUFBNEIsaUJBQWdCLEVBQUk7O0FBQ2hEO0VBQXlCLGlCQUFnQixFQUFJOztBQUM3QztFQUEyQixpQkFBZ0IsRUFBSTs7QUFDL0M7RUFBeUIsaUJBQWdCLEVBQUk7O0FBQzdDO0VBQTBCLGlCQUFnQixFQUFJOztBQUM5QztFQUEwQixpQkFBZ0IsRUFBSTs7QUFDOUM7RUFBMEIsaUJBQWdCLEVBQUk7O0FBQzlDO0VBQXNCLGlCQUFnQixFQUFJOztBQUMxQztFQUF3QixpQkFBZ0IsRUFBSTs7QUFDNUM7RUFBc0IsaUJBQWdCLEVBQUk7O0FBQzFDO0VBQXNCLGlCQUFnQixFQUFJOztBQUMxQztFQUFxQixpQkFBZ0IsRUFBSTs7QUFDekM7RUFBeUIsaUJBQWdCLEVBQUk7O0FBQzdDO0VBQXNCLGlCQUFnQixFQUFJOztBQUMxQztFQUEwQixpQkFBZ0IsRUFBSTs7QUFDOUM7RUFBMEIsaUJBQWdCLEVBQUk7O0FBQzlDO0VBQTBCLGlCQUFnQixFQUFJOztBQUM5QztFQUF1QixpQkFBZ0IsRUFBSTs7QUFDM0M7RUFBcUIsaUJBQWdCLEVBQUk7O0FBQ3pDO0VBQXNCLGlCQUFnQixFQUFJOztBQUMxQztFQUF3QixpQkFBZ0IsRUFBSTs7QUFDNUM7RUFBcUIsaUJBQWdCLEVBQUk7O0FBQ3pDO0VBQXlCLGlCQUFnQixFQUFJOztBQUM3QztFQUE2QixpQkFBZ0IsRUFBSTs7QUFDakQ7RUFBd0IsaUJBQWdCLEVBQUk7O0FBQzVDO0VBQXdCLGlCQUFnQixFQUFJOztBQUM1QztFQUFzQixpQkFBZ0IsRUFBSTs7QUFDMUM7RUFBOEIsaUJBQWdCLEVBQUk7O0FBQ2xEO0VBQXNCLGlCQUFnQixFQUFJOztBQUMxQztFQUF1QixpQkFBZ0IsRUFBSTs7QUFDM0M7RUFBdUIsaUJBQWdCLEVBQUk7O0FBQzNDO0VBQXVCLGlCQUFnQixFQUFJOztBQUMzQztFQUF3QixpQkFBZ0IsRUFBSTs7QUFDNUM7RUFBd0IsaUJBQWdCLEVBQUk7O0FBQzVDO0VBQTZCLGlCQUFnQixFQUFJOztBQUNqRDtFQUEwQixpQkFBZ0IsRUFBSTs7QUFDOUM7RUFBd0IsaUJBQWdCLEVBQUk7O0FBQzVDO0VBQW1DLGlCQUFnQixFQUFJOztBQUN2RDtFQUFtQyxpQkFBZ0IsRUFBSTs7QUFDdkQ7RUFBNEIsaUJBQWdCLEVBQUk7O0FBQ2hEO0VBQTRCLGlCQUFnQixFQUFJOztBQUNoRDtFQUE2QixpQkFBZ0IsRUFBSTs7QUFDakQ7RUFBMkIsaUJBQWdCLEVBQUk7O0FBQy9DO0VBQTZCLGlCQUFnQixFQUFJOztBQUNqRDtFQUFrQyxpQkFBZ0IsRUFBSTs7QUFDdEQ7RUFBeUIsaUJBQWdCLEVBQUk7O0FBQzdDO0VBQXVCLGlCQUFnQixFQUFJOztBQUMzQztFQUFzQixpQkFBZ0IsRUFBSTs7QUFDMUM7RUFBd0IsaUJBQWdCLEVBQUk7O0FBQzVDO0VBQXNCLGlCQUFnQixFQUFJOztBQUMxQztFQUF1QixpQkFBZ0IsRUFBSTs7QUFDM0M7RUFBeUIsaUJBQWdCLEVBQUk7O0FBQzdDO0VBQXVCLGlCQUFnQixFQUFJOztBQUMzQztFQUErQixpQkFBZ0IsRUFBSTs7QUFDbkQ7RUFBc0IsaUJBQWdCLEVBQUk7O0FBQzFDO0VBQTJCLGlCQUFnQixFQUFJOztBQUMvQztFQUE2QixpQkFBZ0IsRUFBSTs7QUFDakQ7RUFBc0IsaUJBQWdCLEVBQUk7O0FBQzFDO0VBQTJCLGlCQUFnQixFQUFJOztBQUMvQztFQUF1QixpQkFBZ0IsRUFBSTs7QUFDM0M7RUFBd0IsaUJBQWdCLEVBQUk7O0FBQzVDO0VBQTBCLGlCQUFnQixFQUFJOztBQUM5QztFQUE2QixpQkFBZ0IsRUFBSTs7QUFDakQ7RUFBb0MsaUJBQWdCLEVBQUk7O0FBQ3hEO0VBQXVCLGlCQUFnQixFQUFJOztBQUMzQztFQUEwQixpQkFBZ0IsRUFBSTs7QUFDOUM7RUFBcUIsaUJBQWdCLEVBQUk7O0FBQ3pDO0VBQXFCLGlCQUFnQixFQUFJOztBQUN6QztFQUF3QixpQkFBZ0IsRUFBSTs7QUFDNUM7RUFBd0IsaUJBQWdCLEVBQUk7O0FBQzVDO0VBQXNCLGlCQUFnQixFQUFJOztBQUMxQztFQUFzQixpQkFBZ0IsRUFBSTs7QUFDMUM7RUFBc0IsaUJBQWdCLEVBQUk7O0FBQzFDO0VBQTBCLGlCQUFnQixFQUFJOztBQUM5QztFQUF3QixpQkFBZ0IsRUFBSTs7QUFDNUM7RUFBc0IsaUJBQWdCLEVBQUk7O0FBQzFDO0VBQXdCLGlCQUFnQixFQUFJOztBQUM1QztFQUF5QixpQkFBZ0IsRUFBSTs7QUFDN0M7RUFBd0IsaUJBQWdCLEVBQUk7O0FBQzVDO0VBQXNCLGlCQUFnQixFQUFJOztBQUMxQztFQUEyQixpQkFBZ0IsRUFBSTs7QUFDL0M7RUFBc0IsaUJBQWdCLEVBQUk7O0FBQzFDO0VBQXFCLGlCQUFnQixFQUFJOztBQUN6QztFQUFxQixpQkFBZ0IsRUFBSTs7QUFDekM7RUFBdUIsaUJBQWdCLEVBQUk7O0FBQzNDO0VBQXlCLGlCQUFnQixFQUFJOztBQUM3QztFQUF3QixpQkFBZ0IsRUFBSTs7QUFDNUM7RUFBMkIsaUJBQWdCLEVBQUk7O0FBQy9DO0VBQXNCLGlCQUFnQixFQUFJOztBQUMxQztFQUFxQixpQkFBZ0IsRUFBSTs7QUFDekM7RUFBeUIsaUJBQWdCLEVBQUk7O0FBQzdDO0VBQTRCLGlCQUFnQixFQUFJOztBQUNoRDtFQUFzQixpQkFBZ0IsRUFBSTs7QUFDMUM7RUFBc0IsaUJBQWdCLEVBQUk7O0FBQzFDO0VBQXNCLGlCQUFnQixFQUFJOztBQUMxQztFQUE4QixpQkFBZ0IsRUFBSTs7QUFDbEQ7RUFBK0IsaUJBQWdCLEVBQUk7O0FBQ25EO0VBQTBCLGlCQUFnQixFQUFJOztBQUM5QztFQUE0QixpQkFBZ0IsRUFBSTs7QUFDaEQ7RUFBK0IsaUJBQWdCLEVBQUk7O0FBQ25EO0VBQW1DLGlCQUFnQixFQUFJOztBQUN2RDtFQUF1QyxpQkFBZ0IsRUFBSTs7QUFDM0Q7RUFBeUIsaUJBQWdCLEVBQUk7O0FBQzdDO0VBQTJCLGlCQUFnQixFQUFJOztBQUMvQztFQUFzQixpQkFBZ0IsRUFBSTs7QUFDMUM7RUFBeUIsaUJBQWdCLEVBQUk7O0FBQzdDO0VBQXdCLGlCQUFnQixFQUFJOztBQUM1QztFQUF1QixpQkFBZ0IsRUFBSTs7QUFDM0M7RUFBNkIsaUJBQWdCLEVBQUk7O0FBQ2pEO0VBQThCLGlCQUFnQixFQUFJOztBQUNsRDtFQUF1QixpQkFBZ0IsRUFBSTs7QUFDM0M7RUFBcUIsaUJBQWdCLEVBQUk7O0FBQ3pDO0VBQXdCLGlCQUFnQixFQUFJOztBQUM1QztFQUF3QixpQkFBZ0IsRUFBSTs7QUFDNUM7RUFBNEIsaUJBQWdCLEVBQUk7O0FBQ2hEO0VBQWlDLGlCQUFnQixFQUFJOztBQUNyRDtFQUFnQyxpQkFBZ0IsRUFBSTs7QUFDcEQ7RUFBd0IsaUJBQWdCLEVBQUk7O0FBQzVDO0VBQXFCLGlCQUFnQixFQUFJOztBQUN6QztFQUFxQixpQkFBZ0IsRUFBSTs7QUFDekM7RUFBc0IsaUJBQWdCLEVBQUk7O0FBQzFDO0VBQXVCLGlCQUFnQixFQUFJOztBQUMzQztFQUF1QixpQkFBZ0IsRUFBSTs7QUFDM0M7RUFBd0IsaUJBQWdCLEVBQUk7O0FBQzVDO0VBQXNCLGlCQUFnQixFQUFJOztBQUMxQztFQUF3QixpQkFBZ0IsRUFBSTs7QUFDNUM7RUFBdUIsaUJBQWdCLEVBQUk7O0FBQzNDO0VBQTBCLGlCQUFnQixFQUFJOztBQUM5QztFQUEyQixpQkFBZ0IsRUFBSTs7QUFDL0M7RUFBdUIsaUJBQWdCLEVBQUk7O0FBQzNDO0VBQXVCLGlCQUFnQixFQUFJOztBQUMzQztFQUE0QixpQkFBZ0IsRUFBSTs7QUFDaEQ7RUFBdUIsaUJBQWdCLEVBQUk7O0FBQzNDO0VBQXVCLGlCQUFnQixFQUFJOztBQUMzQztFQUFrQyxpQkFBZ0IsRUFBSTs7QUFDdEQ7RUFBaUMsaUJBQWdCLEVBQUk7O0FBQ3JEO0VBQXVCLGlCQUFnQixFQUFJOztBQUMzQztFQUEyQixpQkFBZ0IsRUFBSTs7QUFDL0M7RUFBc0IsaUJBQWdCLEVBQUk7O0FBQzFDO0VBQXlCLGlCQUFnQixFQUFJOztBQUM3QztFQUFnQyxpQkFBZ0IsRUFBSTs7QUFDcEQ7RUFBd0IsaUJBQWdCLEVBQUk7O0FBQzVDO0VBQStCLGlCQUFnQixFQUFJOztBQUNuRDtFQUF5QixpQkFBZ0IsRUFBSTs7QUFDN0M7RUFBd0IsaUJBQWdCLEVBQUk7O0FBQzVDO0VBQXdCLGlCQUFnQixFQUFJOztBQUM1QztFQUE0QixpQkFBZ0IsRUFBSTs7QUFDaEQ7RUFBNkIsaUJBQWdCLEVBQUk7O0FBQ2pEO0VBQThCLGlCQUFnQixFQUFJOztBQUNsRDtFQUFnQyxpQkFBZ0IsRUFBSTs7QUFDcEQ7RUFBd0IsaUJBQWdCLEVBQUk7O0FBQzVDO0VBQXdCLGlCQUFnQixFQUFJOztBQUM1QztFQUFzQixpQkFBZ0IsRUFBSTs7QUFDMUM7RUFBcUIsaUJBQWdCLEVBQUk7O0FBQ3pDO0VBQXdCLGlCQUFnQixFQUFJOztBQUM1QztFQUF3QixpQkFBZ0IsRUFBSTs7QUFDNUM7RUFBc0IsaUJBQWdCLEVBQUk7O0FBQzFDO0VBQTBCLGlCQUFnQixFQUFJOztBQUM5QztFQUF1QixpQkFBZ0IsRUFBSTs7QUFDM0M7RUFBMkIsaUJBQWdCLEVBQUk7O0FBQy9DO0VBQXVCLGlCQUFnQixFQUFJOztBQUMzQztFQUF5QixpQkFBZ0IsRUFBSTs7QUFDN0M7RUFBK0IsaUJBQWdCLEVBQUk7O0FBQ25EO0VBQThCLGlCQUFnQixFQUFJOztBQUNsRDtFQUFzQixpQkFBZ0IsRUFBSTs7QUFDMUM7RUFBNkIsaUJBQWdCLEVBQUk7O0FBQ2pEO0VBQXdCLGlCQUFnQixFQUFJOztBQUM1QztFQUFnQyxpQkFBZ0IsRUFBSTs7QUFDcEQ7RUFBc0IsaUJBQWdCLEVBQUk7O0FBQzFDO0VBQTJCLGlCQUFnQixFQUFJOztBQUMvQztFQUE4QixpQkFBZ0IsRUFBSTs7QUFDbEQ7RUFBdUIsaUJBQWdCLEVBQUk7O0FBQzNDO0VBQTJCLGlCQUFnQixFQUFJOztBQUMvQztFQUF3QixpQkFBZ0IsRUFBSTs7QUFDNUM7RUFBdUIsaUJBQWdCLEVBQUk7O0FBQzNDO0VBQXNCLGlCQUFnQixFQUFJOztBQUMxQztFQUF3QixpQkFBZ0IsRUFBSTs7QUFDNUM7RUFBc0IsaUJBQWdCLEVBQUk7O0FBQzFDO0VBQWtDLGlCQUFnQixFQUFJOztBQUN0RDtFQUFpQyxpQkFBZ0IsRUFBSTs7QUFDckQ7RUFBNEIsaUJBQWdCLEVBQUk7O0FBQ2hEO0VBQXNCLGlCQUFnQixFQUFJOztBQUMxQztFQUE2QixpQkFBZ0IsRUFBSTs7QUFDakQ7RUFBNkIsaUJBQWdCLEVBQUk7O0FBQ2pEO0VBQTJCLGlCQUFnQixFQUFJOztBQUMvQztFQUE4QixpQkFBZ0IsRUFBSTs7QUFDbEQ7RUFBc0IsaUJBQWdCLEVBQUk7O0FBQzFDO0VBQXVCLGlCQUFnQixFQUFJOztBQUMzQztFQUF1QixpQkFBZ0IsRUFBSTs7QUFDM0M7RUFBNkIsaUJBQWdCLEVBQUk7O0FBQ2pEO0VBQXVCLGlCQUFnQixFQUFJOztBQUMzQztFQUErQixpQkFBZ0IsRUFBSTs7QUFDbkQ7RUFBNkIsaUJBQWdCLEVBQUk7O0FBQ2pEO0VBQXdCLGlCQUFnQixFQUFJOztBQUM1QztFQUEwQixpQkFBZ0IsRUFBSTs7QUFDOUM7RUFBc0IsaUJBQWdCLEVBQUk7O0FBQzFDO0VBQXdCLGlCQUFnQixFQUFJOztBQUM1QztFQUEwQixpQkFBZ0IsRUFBSTs7QUFDOUM7RUFBNkIsaUJBQWdCLEVBQUk7O0FBQ2pEO0VBQTZCLGlCQUFnQixFQUFJOztBQUNqRDtFQUE0QixpQkFBZ0IsRUFBSTs7QUFDaEQ7RUFBMkIsaUJBQWdCLEVBQUk7O0FBQy9DO0VBQXNCLGlCQUFnQixFQUFJOztBQUMxQztFQUF5QixpQkFBZ0IsRUFBSTs7QUFDN0M7RUFBdUIsaUJBQWdCLEVBQUk7O0FBQzNDO0VBQXVCLGlCQUFnQixFQUFJOztBQUMzQztFQUFzQixpQkFBZ0IsRUFBSTs7QUFDMUM7RUFBc0IsaUJBQWdCLEVBQUk7O0FBQzFDO0VBQXVCLGlCQUFnQixFQUFJOztBRGw2QjNDO0VBQ0Usd0JBQXVCO0VBQ3ZCLDBPQUt3RDtFQUN4RCxvQkFBbUI7RUFDbkIsbUJBQWtCLEVBQUE7O0FBR3BCO0VBQ0Usb0JBQW1CO0VBQ25CLDZOQUc0RDtFQUM1RCxpQkFBZ0I7RUFDaEIseUJBQXdCLEVBQUE7O0FBRTFCO0VBQ0Usb0JBQW1CO0VBQ25CLDZPQUdnRTtFQUNoRSxpQkFBZ0I7RUFDaEIseUJBQXdCLEVBQUE7O0FBRTFCO0VBQ0Usb0JBQW1CO0VBQ25CLHlPQUcrRDtFQUMvRCxpQkFBZ0I7RUFDaEIseUJBQXdCLEVBQUE7O0FBRzFCO0VBQ0UscUJBQW9CO0VBQ3BCLG1CQUFtQjtFQUNuQixpQkFBZ0I7RUFDaEIseUJBQXdCO0VBQ3hCLGdNQUMwRCxFQUFBOztBQUU1RDtFQUNFLHFCQUFvQjtFQUNwQixtQkFBbUI7RUFDbkIsaUJBQWdCO0VBQ2hCLHlCQUF3QjtFQUN4Qiw4TEFDeUQsRUFBQTs7QUFHM0Q7RUFDRSxxQkFBb0I7RUFDcEIsbUJBQW1CO0VBQ25CLGlCQUFnQjtFQUNoQix5QkFBd0I7RUFDeEIsOExBQ3lELEVBQUE7O0FBRTNEO0VBQ0UscUJBQW9CO0VBQ3BCLG1CQUFtQjtFQUNuQixpQkFBZ0I7RUFDaEIseUJBQXdCO0VBQ3hCLDBNQUMrRCxFQUFBOztBQUdqRTtFQUNFLHFCQUFvQjtFQUNwQixtQkFBbUI7RUFDbkIsaUJBQWdCO0VBQ2hCLHlCQUF3QjtFQUN4QixrTUFDMkQsRUFBQTs7QUFFN0Q7RUFDRSxxQkFBb0I7RUFDcEIsbUJBQW1CO0VBQ25CLGlCQUFnQjtFQUNoQix5QkFBd0I7RUFDeEIsOE1BQ2lFLEVBQUE7O0FBR25FO0VBQ0UscUJBQW9CO0VBQ3BCLG1CQUFtQjtFQUNuQixpQkFBZ0I7RUFDaEIseUJBQXdCO0VBQ3hCLDBMQUN1RCxFQUFBOztBQUV6RDtFQUNFLHFCQUFvQjtFQUNwQixtQkFBbUI7RUFDbkIsaUJBQWdCO0VBQ2hCLHlCQUF3QjtFQUN4QixzTUFDNkQsRUFBQTs7QUFHL0Q7RUFDRSxxQkFBb0I7RUFDcEIsbUJBQW1CO0VBQ25CLGlCQUFnQjtFQUNoQix5QkFBd0I7RUFDeEIsb01BQzRELEVBQUE7O0FBRTlEO0VBQ0UscUJBQW9CO0VBQ3BCLG1CQUFtQjtFQUNuQixpQkFBZ0I7RUFDaEIseUJBQXdCO0VBQ3hCLGdOQUNrRSxFQUFBOztBQUdwRTtFQUNFLHFCQUFvQjtFQUNwQixtQkFBbUI7RUFDbkIsaUJBQWdCO0VBQ2hCLHlCQUF3QjtFQUN4Qiw0TEFDd0QsRUFBQTs7QUFFMUQ7RUFDRSxxQkFBb0I7RUFDcEIsbUJBQW1CO0VBQ25CLGlCQUFnQjtFQUNoQix5QkFBd0I7RUFDeEIsd01BQzhELEVBQUE7O0FBR2hFO0VBQ0UsOEJBQTZCO0VBQzdCLGlCQUFnQjtFQUNoQix5QkFBd0I7RUFDeEIsd0VBQWlDO0VBQ2pDLHNSQUVvRCxFQUFBOztBQUd0RDtFQUNFLDhCQUE2QjtFQUM3QixpQkFBZ0I7RUFDaEIseUJBQXdCO0VBQ3hCLHdFQUFpQztFQUNqQyxzUkFFb0QsRUFBQTs7QUV0S3RELDREQUE0RDtBQVE1RDtFQUNFLHdCQUF1QjtFQUN2QiwyQkFBMEI7RUFDMUIsK0JBQThCLEVBQy9COztBQU1EO0VBQ0UsVUFBUyxFQUNWOztBQVlEOzs7Ozs7Ozs7Ozs7O0VBYUUsZUFBYyxFQUNmOztBQU9EOzs7O0VBSUUsc0JBQXFCO0VBQ3JCLHlCQUF3QixFQUN6Qjs7QUFPRDtFQUNFLGNBQWE7RUFDYixVQUFTLEVBQ1Y7O0FKaXhIRDs7RUl4d0hFLGNBQWEsRUFDZDs7QUFTRDtFQUNFLDhCQUE2QixFQUM5Qjs7QUFNRDs7RUFFRSxXQUFVLEVBQ1g7O0FBU0Q7RUFDRSwwQkFBeUIsRUFDMUI7O0FBTUQ7O0VBRUUsa0JBQWlCLEVBQ2xCOztBQU1EO0VBQ0UsbUJBQWtCLEVBQ25COztBQU9EO0VBQ0UsZUFBYztFQUNkLGlCQUFnQixFQUNqQjs7QUFNRDtFQUNFLGlCQUFnQjtFQUNoQixZQUFXLEVBQ1o7O0FBTUQ7RUFDRSxlQUFjLEVBQ2Y7O0FBTUQ7O0VBRUUsZUFBYztFQUNkLGVBQWM7RUFDZCxtQkFBa0I7RUFDbEIseUJBQXdCLEVBQ3pCOztBQUVEO0VBQ0UsWUFBVyxFQUNaOztBQUVEO0VBQ0UsZ0JBQWUsRUFDaEI7O0FBU0Q7RUFDRSxVQUFTLEVBQ1Y7O0FBTUQ7RUFDRSxpQkFBZ0IsRUFDakI7O0FBU0Q7RUFDRSxpQkFBZ0IsRUFDakI7O0FBTUQ7RUFFRSx3QkFBdUI7RUFDdkIsVUFBUyxFQUNWOztBQU1EO0VBQ0UsZUFBYyxFQUNmOztBQU1EOzs7O0VBSUUsa0NBQWlDO0VBQ2pDLGVBQWMsRUFDZjs7QUFpQkQ7Ozs7O0VBS0UsZUFBYztFQUNkLGNBQWE7RUFDYixVQUFTLEVBQ1Y7O0FBTUQ7RUFDRSxrQkFBaUIsRUFDbEI7O0FBU0Q7O0VBRUUscUJBQW9CLEVBQ3JCOztBQVVEOzs7O0VBSUUsMkJBQTBCO0VBQzFCLGdCQUFlLEVBQ2hCOztBQU1EOztFQUVFLGdCQUFlLEVBQ2hCOztBQU1EOztFQUVFLFVBQVM7RUFDVCxXQUFVLEVBQ1g7O0FBT0Q7RUFDRSxvQkFBbUIsRUFDcEI7O0FBVUQ7O0VBRUUsdUJBQXNCO0VBQ3RCLFdBQVUsRUFDWDs7QUFRRDs7RUFFRSxhQUFZLEVBQ2I7O0FBUUQ7RUFDRSw4QkFBNkI7RUFHN0Isd0JBQXVCLEVBQ3hCOztBQVFEOztFQUVFLHlCQUF3QixFQUN6Qjs7QUFNRDtFQUNFLDBCQUF5QjtFQUN6QixjQUFhO0VBQ2IsK0JBQThCLEVBQy9COztBQU9EO0VBQ0UsVUFBUztFQUNULFdBQVUsRUFDWDs7QUFNRDtFQUNFLGVBQWMsRUFDZjs7QUFPRDtFQUNFLGtCQUFpQixFQUNsQjs7QUFTRDtFQUNFLDBCQUF5QjtFQUN6QixrQkFBaUIsRUFDbEI7O0FBRUQ7O0VBRUUsV0FBVSxFQUNYOztBQzFhRCxxRkFBcUY7QUFPckY7RUFDSTs7O0lBR0ksbUNBQWtDO0lBQ2xDLHVCQUFzQjtJQUN0Qiw0QkFBMkI7SUFDM0IsNkJBQTRCLEVBQy9CO0VBRUQ7O0lBRUksMkJBQTBCLEVBQzdCO0VBRUQ7SUFDSSw2QkFBNEIsRUFDL0I7RUFFRDtJQUNJLDhCQUE2QixFQUNoQztFQUlEOztJQUVJLFlBQVcsRUFDZDtFQUVEOztJQUVJLHVCQUFzQjtJQUN0Qix5QkFBd0IsRUFDM0I7RUFFRDtJQUNJLDRCQUEyQixFQUM5QjtFQUVEOztJQUVJLHlCQUF3QixFQUMzQjtFRHFJTDtJQ2xJUSwyQkFBMEIsRUFDN0I7RUFFRDs7O0lBR0ksV0FBVTtJQUNWLFVBQVMsRUFDWjtFQUVEOztJQUVJLHdCQUF1QixFQUMxQjtFQU1EO0lBQ0ksNEJBQTJCLEVBQzlCO0VBR0Q7SUFDSSxjQUFhLEVBQ2hCO0VBQ0Q7O0lBR1Esa0NBQWlDLEVBQ3BDO0VBRUw7SUFDSSx1QkFBc0IsRUFDekI7RUFFRDtJQUNJLHFDQUFvQyxFQU12QztJQVBEOztNQUtRLGtDQUFpQyxFQUNwQztFQUVMOztJQUdRLGtDQUFpQyxFQUNwQyxFQUFBOztBQzVGVDtFQUNFLG9DQUFtQztFQUNuQyxnRUFBa0o7RUFDbEosa2JBSTBNLEVBQUE7O0FBSTVNO0VBQ0UsbUJBQWtCO0VBQ2xCLFNBQVE7RUFDUixzQkFBcUI7RUFDckIsb0NBQW1DO0VBQ25DLG1CQUFrQjtFQUNsQixvQkFBbUI7RUFDbkIsZUFBYztFQUNkLG9DQUFtQztFQUNuQyxtQ0FBa0MsRUFDbkM7O0FBR0Q7RUFBK0MsZUFBYyxFQUFJOztBQUNqRTtFQUErQyxlQUFjLEVBQUk7O0FBQ2pFOztFQUMrQyxpQkFBZ0IsRUFBSTs7QUFDbkU7RUFBK0MsaUJBQWdCLEVBQUk7O0FBQ25FO0VBQStDLGlCQUFnQixFQUFJOztBQUNuRTtFQUErQyxpQkFBZ0IsRUFBSTs7QUFDbkU7RUFBK0MsaUJBQWdCLEVBQUk7O0FBQ25FO0VBQStDLGlCQUFnQixFQUFJOztBQUNuRTtFQUErQyxpQkFBZ0IsRUFBSTs7QUFDbkU7RUFBK0MsaUJBQWdCLEVBQUk7O0FBQ25FO0VBQStDLGlCQUFnQixFQUFJOztBQUNuRTtFQUErQyxpQkFBZ0IsRUFBSTs7QUFDbkU7RUFBK0MsaUJBQWdCLEVBQUk7O0FBQ25FO0VBQStDLGlCQUFnQixFQUFJOztBQUNuRTtFQUErQyxpQkFBZ0IsRUFBSTs7QUFDbkU7RUFBK0MsaUJBQWdCLEVBQUk7O0FBQ25FO0VBQStDLGlCQUFnQixFQUFJOztBQUNuRTtFQUErQyxpQkFBZ0IsRUFBSTs7QUFDbkU7RUFBK0MsaUJBQWdCLEVBQUk7O0FBQ25FO0VBQStDLGlCQUFnQixFQUFJOztBQUNuRTtFQUErQyxpQkFBZ0IsRUFBSTs7QUFDbkU7RUFBK0MsaUJBQWdCLEVBQUk7O0FBQ25FO0VBQStDLGlCQUFnQixFQUFJOztBQUNuRTtFQUErQyxpQkFBZ0IsRUFBSTs7QUFDbkU7RUFBK0MsaUJBQWdCLEVBQUk7O0FBQ25FO0VBQStDLGlCQUFnQixFQUFJOztBQUNuRTtFQUErQyxpQkFBZ0IsRUFBSTs7QUFDbkU7RUFBK0MsaUJBQWdCLEVBQUk7O0FBQ25FO0VBQStDLGlCQUFnQixFQUFJOztBQUNuRTtFQUErQyxpQkFBZ0IsRUFBSTs7QUFDbkU7RUFBK0MsaUJBQWdCLEVBQUk7O0FBQ25FO0VBQStDLGlCQUFnQixFQUFJOztBQUNuRTtFQUErQyxpQkFBZ0IsRUFBSTs7QUFDbkU7RUFBK0MsaUJBQWdCLEVBQUk7O0FBQ25FO0VBQStDLGlCQUFnQixFQUFJOztBQUNuRTtFQUErQyxpQkFBZ0IsRUFBSTs7QUFDbkU7RUFBK0MsaUJBQWdCLEVBQUk7O0FBQ25FO0VBQStDLGlCQUFnQixFQUFJOztBQUNuRTtFQUErQyxpQkFBZ0IsRUFBSTs7QUFDbkU7RUFBK0MsaUJBQWdCLEVBQUk7O0FBQ25FO0VBQStDLGlCQUFnQixFQUFJOztBQUNuRTtFQUErQyxpQkFBZ0IsRUFBSTs7QUFDbkU7RUFBK0MsaUJBQWdCLEVBQUk7O0FBQ25FO0VBQStDLGlCQUFnQixFQUFJOztBQUNuRTtFQUErQyxpQkFBZ0IsRUFBSTs7QUFDbkU7RUFBK0MsaUJBQWdCLEVBQUk7O0FBQ25FO0VBQStDLGlCQUFnQixFQUFJOztBQUNuRTtFQUErQyxpQkFBZ0IsRUFBSTs7QUFDbkU7RUFBK0MsaUJBQWdCLEVBQUk7O0FBQ25FO0VBQStDLGlCQUFnQixFQUFJOztBQUNuRTtFQUErQyxpQkFBZ0IsRUFBSTs7QUFDbkU7RUFBK0MsaUJBQWdCLEVBQUk7O0FBQ25FO0VBQStDLGlCQUFnQixFQUFJOztBQUNuRTtFQUErQyxpQkFBZ0IsRUFBSTs7QUFDbkU7RUFBK0MsaUJBQWdCLEVBQUk7O0FBQ25FO0VBQStDLGlCQUFnQixFQUFJOztBQUNuRTtFQUErQyxpQkFBZ0IsRUFBSTs7QUFDbkU7RUFBK0MsaUJBQWdCLEVBQUk7O0FBQ25FO0VBQStDLGlCQUFnQixFQUFJOztBQUNuRTtFQUErQyxpQkFBZ0IsRUFBSTs7QUFDbkU7RUFBK0MsaUJBQWdCLEVBQUk7O0FBQ25FO0VBQStDLGlCQUFnQixFQUFJOztBQUNuRTtFQUErQyxpQkFBZ0IsRUFBSTs7QUFDbkU7RUFBK0MsaUJBQWdCLEVBQUk7O0FBQ25FO0VBQStDLGlCQUFnQixFQUFJOztBQUNuRTtFQUErQyxpQkFBZ0IsRUFBSTs7QUFDbkU7RUFBK0MsaUJBQWdCLEVBQUk7O0FBQ25FO0VBQStDLGlCQUFnQixFQUFJOztBQUNuRTtFQUErQyxpQkFBZ0IsRUFBSTs7QUFDbkU7RUFBK0MsaUJBQWdCLEVBQUk7O0FBQ25FO0VBQStDLGlCQUFnQixFQUFJOztBQUNuRTtFQUErQyxpQkFBZ0IsRUFBSTs7QUFDbkU7RUFBK0MsaUJBQWdCLEVBQUk7O0FBQ25FO0VBQStDLGlCQUFnQixFQUFJOztBQUNuRTtFQUErQyxpQkFBZ0IsRUFBSTs7QUFDbkU7RUFBK0MsaUJBQWdCLEVBQUk7O0FBQ25FO0VBQStDLGlCQUFnQixFQUFJOztBQUNuRTtFQUErQyxpQkFBZ0IsRUFBSTs7QUFDbkU7RUFBK0MsaUJBQWdCLEVBQUk7O0FBQ25FO0VBQStDLGlCQUFnQixFQUFJOztBQUNuRTtFQUErQyxpQkFBZ0IsRUFBSTs7QUFDbkU7RUFBK0MsaUJBQWdCLEVBQUk7O0FBQ25FO0VBQStDLGlCQUFnQixFQUFJOztBQUNuRTtFQUErQyxpQkFBZ0IsRUFBSTs7QUFDbkU7RUFBK0MsaUJBQWdCLEVBQUk7O0FBQ25FO0VBQStDLGlCQUFnQixFQUFJOztBQUNuRTtFQUErQyxpQkFBZ0IsRUFBSTs7QUFDbkU7RUFBK0MsaUJBQWdCLEVBQUk7O0FBQ25FO0VBQStDLGlCQUFnQixFQUFJOztBQUNuRTtFQUErQyxpQkFBZ0IsRUFBSTs7QUFDbkU7RUFBK0MsaUJBQWdCLEVBQUk7O0FBQ25FO0VBQStDLGlCQUFnQixFQUFJOztBQUNuRTtFQUErQyxpQkFBZ0IsRUFBSTs7QUFDbkU7RUFBK0MsaUJBQWdCLEVBQUk7O0FBQ25FO0VBQStDLGlCQUFnQixFQUFJOztBQUNuRTtFQUErQyxpQkFBZ0IsRUFBSTs7QUFDbkU7RUFBK0MsaUJBQWdCLEVBQUk7O0FBQ25FO0VBQStDLGlCQUFnQixFQUFJOztBQUNuRTtFQUErQyxpQkFBZ0IsRUFBSTs7QUFDbkU7RUFBK0MsaUJBQWdCLEVBQUk7O0FBQ25FO0VBQStDLGlCQUFnQixFQUFJOztBQUNuRTtFQUErQyxpQkFBZ0IsRUFBSTs7QUFDbkU7RUFBK0MsaUJBQWdCLEVBQUk7O0FBQ25FO0VBQStDLGlCQUFnQixFQUFJOztBQUNuRTtFQUErQyxpQkFBZ0IsRUFBSTs7QUFDbkU7RUFBK0MsaUJBQWdCLEVBQUk7O0FBQ25FO0VBQStDLGlCQUFnQixFQUFJOztBQUNuRTtFQUErQyxpQkFBZ0IsRUFBSTs7QUFDbkU7RUFBK0MsaUJBQWdCLEVBQUk7O0FBQ25FO0VBQStDLGlCQUFnQixFQUFJOztBQUNuRTtFQUErQyxpQkFBZ0IsRUFBSTs7QUFDbkU7RUFBK0MsaUJBQWdCLEVBQUk7O0FBQ25FO0VBQStDLGlCQUFnQixFQUFJOztBQUNuRTtFQUErQyxpQkFBZ0IsRUFBSTs7QUFDbkU7RUFBK0MsaUJBQWdCLEVBQUk7O0FBQ25FO0VBQStDLGlCQUFnQixFQUFJOztBQUNuRTtFQUErQyxpQkFBZ0IsRUFBSTs7QUFDbkU7RUFBK0MsaUJBQWdCLEVBQUk7O0FBQ25FO0VBQStDLGlCQUFnQixFQUFJOztBQUNuRTtFQUErQyxpQkFBZ0IsRUFBSTs7QUFDbkU7RUFBK0MsaUJBQWdCLEVBQUk7O0FBQ25FO0VBQStDLGlCQUFnQixFQUFJOztBQUNuRTtFQUErQyxpQkFBZ0IsRUFBSTs7QUFDbkU7RUFBK0MsaUJBQWdCLEVBQUk7O0FBQ25FO0VBQStDLGlCQUFnQixFQUFJOztBQUNuRTtFQUErQyxpQkFBZ0IsRUFBSTs7QUFDbkU7RUFBK0MsaUJBQWdCLEVBQUk7O0FBQ25FO0VBQStDLGlCQUFnQixFQUFJOztBQUNuRTtFQUErQyxpQkFBZ0IsRUFBSTs7QUFDbkU7RUFBK0MsaUJBQWdCLEVBQUk7O0FBQ25FO0VBQStDLGlCQUFnQixFQUFJOztBQUNuRTtFQUErQyxpQkFBZ0IsRUFBSTs7QUFDbkU7RUFBK0MsaUJBQWdCLEVBQUk7O0FBQ25FO0VBQStDLGlCQUFnQixFQUFJOztBQUNuRTtFQUErQyxpQkFBZ0IsRUFBSTs7QUFDbkU7RUFBK0MsaUJBQWdCLEVBQUk7O0FBQ25FO0VBQStDLGlCQUFnQixFQUFJOztBQUNuRTtFQUErQyxpQkFBZ0IsRUFBSTs7QUFDbkU7RUFBK0MsaUJBQWdCLEVBQUk7O0FBQ25FO0VBQStDLGlCQUFnQixFQUFJOztBQUNuRTtFQUErQyxpQkFBZ0IsRUFBSTs7QUFDbkU7RUFBK0MsaUJBQWdCLEVBQUk7O0FBQ25FO0VBQStDLGlCQUFnQixFQUFJOztBQUNuRTtFQUErQyxpQkFBZ0IsRUFBSTs7QUFDbkU7RUFBK0MsaUJBQWdCLEVBQUk7O0FBQ25FO0VBQStDLGlCQUFnQixFQUFJOztBQUNuRTtFQUErQyxpQkFBZ0IsRUFBSTs7QUFDbkU7RUFBK0MsaUJBQWdCLEVBQUk7O0FBQ25FO0VBQStDLGlCQUFnQixFQUFJOztBQUNuRTtFQUErQyxpQkFBZ0IsRUFBSTs7QUFDbkU7RUFBK0MsaUJBQWdCLEVBQUk7O0FBQ25FO0VBQStDLGlCQUFnQixFQUFJOztBQUNuRTtFQUErQyxpQkFBZ0IsRUFBSTs7QUFDbkU7RUFBK0MsaUJBQWdCLEVBQUk7O0FBQ25FO0VBQStDLGlCQUFnQixFQUFJOztBQUNuRTtFQUErQyxpQkFBZ0IsRUFBSTs7QUFDbkU7RUFBK0MsaUJBQWdCLEVBQUk7O0FBQ25FO0VBQStDLGlCQUFnQixFQUFJOztBQUNuRTtFQUErQyxpQkFBZ0IsRUFBSTs7QUFDbkU7RUFBK0MsaUJBQWdCLEVBQUk7O0FBQ25FO0VBQStDLGlCQUFnQixFQUFJOztBQUNuRTtFQUErQyxpQkFBZ0IsRUFBSTs7QUFDbkU7RUFBK0MsaUJBQWdCLEVBQUk7O0FBQ25FO0VBQStDLGlCQUFnQixFQUFJOztBQUNuRTtFQUErQyxpQkFBZ0IsRUFBSTs7QUFDbkU7RUFBK0MsaUJBQWdCLEVBQUk7O0FBQ25FO0VBQStDLGlCQUFnQixFQUFJOztBQUNuRTtFQUErQyxpQkFBZ0IsRUFBSTs7QUFDbkU7RUFBK0MsaUJBQWdCLEVBQUk7O0FBQ25FO0VBQStDLGlCQUFnQixFQUFJOztBQUNuRTtFQUErQyxpQkFBZ0IsRUFBSTs7QUFDbkU7RUFBK0MsaUJBQWdCLEVBQUk7O0FBQ25FO0VBQStDLGlCQUFnQixFQUFJOztBQUNuRTtFQUErQyxpQkFBZ0IsRUFBSTs7QUFDbkU7RUFBK0MsaUJBQWdCLEVBQUk7O0FBQ25FO0VBQStDLGlCQUFnQixFQUFJOztBQUNuRTtFQUErQyxpQkFBZ0IsRUFBSTs7QUFDbkU7RUFBK0MsaUJBQWdCLEVBQUk7O0FBQ25FO0VBQStDLGlCQUFnQixFQUFJOztBQUNuRTtFQUErQyxpQkFBZ0IsRUFBSTs7QUFDbkU7RUFBK0MsaUJBQWdCLEVBQUk7O0FBQ25FO0VBQStDLGlCQUFnQixFQUFJOztBQUNuRTtFQUErQyxpQkFBZ0IsRUFBSTs7QUFDbkU7RUFBK0MsaUJBQWdCLEVBQUk7O0FBQ25FO0VBQStDLGlCQUFnQixFQUFJOztBQUNuRTtFQUErQyxpQkFBZ0IsRUFBSTs7QUFDbkU7RUFBK0MsaUJBQWdCLEVBQUk7O0FBQ25FO0VBQStDLGlCQUFnQixFQUFJOztBQUNuRTtFQUErQyxpQkFBZ0IsRUFBSTs7QUFDbkU7RUFBK0MsaUJBQWdCLEVBQUk7O0FBQ25FO0VBQStDLGlCQUFnQixFQUFJOztBQUNuRTtFQUErQyxpQkFBZ0IsRUFBSTs7QUFDbkU7RUFBK0MsaUJBQWdCLEVBQUk7O0FBQ25FO0VBQStDLGlCQUFnQixFQUFJOztBQUNuRTtFQUErQyxpQkFBZ0IsRUFBSTs7QUFDbkU7RUFBK0MsaUJBQWdCLEVBQUk7O0FBQ25FO0VBQStDLGlCQUFnQixFQUFJOztBQUNuRTtFQUErQyxpQkFBZ0IsRUFBSTs7QUFDbkU7RUFBK0MsaUJBQWdCLEVBQUk7O0FBQ25FO0VBQStDLGlCQUFnQixFQUFJOztBQUNuRTtFQUErQyxpQkFBZ0IsRUFBSTs7QUFDbkU7RUFBK0MsaUJBQWdCLEVBQUk7O0FBQ25FO0VBQStDLGlCQUFnQixFQUFJOztBQUNuRTtFQUErQyxpQkFBZ0IsRUFBSTs7QUFDbkU7RUFBK0MsaUJBQWdCLEVBQUk7O0FBQ25FO0VBQStDLGlCQUFnQixFQUFJOztBQVNuRTtFQUErQyxpQkFBZ0IsRUFBSTs7QUFDbkU7RUFBK0MsaUJBQWdCLEVBQUk7O0FBQ25FO0VBQStDLGlCQUFnQixFQUFJOztBQUNuRTtFQUErQyxpQkFBZ0IsRUFBSTs7QUFDbkU7RUFBK0MsaUJBQWdCLEVBQUk7O0FBQ25FO0VBQStDLGlCQUFnQixFQUFJOztBQUNuRTtFQUErQyxpQkFBZ0IsRUFBSTs7QUFDbkU7RUFBK0MsaUJBQWdCLEVBQUk7O0FBQ25FO0VBQStDLGlCQUFnQixFQUFJOztBQUNuRTtFQUErQyxpQkFBZ0IsRUFBSTs7QUFDbkU7RUFBK0MsaUJBQWdCLEVBQUk7O0FBQ25FO0VBQStDLGlCQUFnQixFQUFJOztBQUNuRTtFQUErQyxpQkFBZ0IsRUFBSTs7QUFDbkU7RUFBK0MsaUJBQWdCLEVBQUk7O0FBQ25FO0VBQStDLGlCQUFnQixFQUFJOztBQUNuRTtFQUErQyxpQkFBZ0IsRUFBSTs7QUFDbkU7RUFBK0MsaUJBQWdCLEVBQUk7O0FBQ25FO0VBQStDLGlCQUFnQixFQUFJOztBQUNuRTtFQUErQyxpQkFBZ0IsRUFBSTs7QUFDbkU7RUFBK0MsaUJBQWdCLEVBQUk7O0FBQ25FO0VBQStDLGlCQUFnQixFQUFJOztBQUNuRTtFQUErQyxpQkFBZ0IsRUFBSTs7QUFDbkU7RUFBK0MsaUJBQWdCLEVBQUk7O0FBQ25FO0VBQStDLGlCQUFnQixFQUFJOztBQUNuRTtFQUErQyxpQkFBZ0IsRUFBSTs7QUFDbkU7RUFBK0MsaUJBQWdCLEVBQUk7O0FBQ25FO0VBQStDLGlCQUFnQixFQUFJOztBQUNuRTtFQUErQyxpQkFBZ0IsRUFBSTs7QUFDbkU7RUFBK0MsaUJBQWdCLEVBQUk7O0FBQ25FO0VBQStDLGlCQUFnQixFQUFJOztBQUNuRTtFQUErQyxpQkFBZ0IsRUFBSTs7QUFDbkU7RUFBK0MsaUJBQWdCLEVBQUk7O0FBQ25FO0VBQStDLGlCQUFnQixFQUFJOztBQUNuRTtFQUErQyxpQkFBZ0IsRUFBSTs7QUFDbkU7RUFBK0MsaUJBQWdCLEVBQUk7O0FBQ25FO0VBQStDLGlCQUFnQixFQUFJOztBQUNuRTtFQUErQyxpQkFBZ0IsRUFBSTs7QUFDbkU7RUFBK0MsaUJBQWdCLEVBQUk7O0FBQ25FO0VBQStDLGlCQUFnQixFQUFJOztBQUNuRTtFQUErQyxpQkFBZ0IsRUFBSTs7QUFDbkU7RUFBK0MsaUJBQWdCLEVBQUk7O0FBQ25FO0VBQStDLGlCQUFnQixFQUFJOztBQUNuRTtFQUErQyxpQkFBZ0IsRUFBSTs7QUFDbkU7RUFBK0MsaUJBQWdCLEVBQUk7O0FBQ25FO0VBQStDLGlCQUFnQixFQUFJOztBQUNuRTtFQUErQyxpQkFBZ0IsRUFBSTs7QUFDbkU7RUFBK0MsaUJBQWdCLEVBQUk7O0FBQ25FO0VBQStDLGlCQUFnQixFQUFJOztBQUNuRTtFQUErQyxpQkFBZ0IsRUFBSTs7QUFDbkU7RUFBK0MsaUJBQWdCLEVBQUk7O0FBQ25FO0VBQStDLGlCQUFnQixFQUFJOztBQUNuRTtFQUErQyxpQkFBZ0IsRUFBSTs7QUFDbkU7RUFBK0MsaUJBQWdCLEVBQUk7O0FBQ25FO0VBQStDLGlCQUFnQixFQUFJOztBQUNuRTtFQUErQyxpQkFBZ0IsRUFBSTs7QUFDbkU7RUFBK0MsaUJBQWdCLEVBQUk7O0FDdFNuRTtFQ2tFVSx1QkRqRXNCLEVBQy9COztBQUNEOztFQytEVSx1QkQ3RHNCLEVBQy9COztBSFJEO0VHY0UsZ0JBQWU7RUFDZiw4Q0FBMEMsRUFDM0M7O0FITkQ7RUdTRSw0REVrQnNFO0VGakJ0RSxnQkV1QjRCO0VGdEI1Qix5QkVrQ21DO0VGakNuQyxlRWxCK0M7RUZtQi9DLHVCRUYwQixFRkczQjs7QUFHRDs7OztFQUlFLHFCQUFvQjtFQUNwQixtQkFBa0I7RUFDbEIscUJBQW9CLEVBQ3JCOztBSDhDRDtFR3hDRSxlRS9CMkM7RUZnQzNDLHNCQUFxQixFQVd0QjtFQWJEO0lBTUksZUVqQjRDO0lGa0I1QywyQkVoQjZCLEVGaUI5QjtFQVJIO0lHM0NFLHFCQUFvQjtJQUVwQiwyQ0FBMEM7SUFDMUMscUJBQW9CLEVIb0RuQjs7QUgrSUg7RUdySUUsVUFBUyxFQUNWOztBSGlIRDtFRzNHRSx1QkFBc0IsRUFDdkI7O0FBR0Q7RUl2RUUsZUFEbUM7RUFFbkMsZ0JBQWU7RUFDZixhQUFZLEVKdUViOztBQUdEO0VBQ0UsbUJFd0I2QixFRnZCOUI7O0FBS0Q7RUFDRSxhRTBvQitCO0VGem9CL0IseUJFL0JtQztFRmdDbkMsdUJFbEUwQjtFRm1FMUIsdUJFMm9CZ0M7RUYxb0JoQyxtQkVZNkI7RUQ4RXJCLGlDRHpGK0I7RUl6RnZDLHNCSjRGb0M7RUkzRnBDLGdCQUFlO0VBQ2YsYUFBWSxFSjJGYjs7QUFHRDtFQUNFLG1CQUFrQixFQUNuQjs7QUh1R0Q7RUdqR0UsaUJFaERvRTtFRmlEcEUsb0JFakRvRTtFRmtEcEUsVUFBUztFQUNULDhCRXJHaUQsRUZzR2xEOztBQU9EO0VBQ0UsbUJBQWtCO0VBQ2xCLFdBQVU7RUFDVixZQUFXO0VBQ1gsYUFBWTtFQUNaLFdBQVU7RUFDVixpQkFBZ0I7RUFDaEIsdUJBQW1CO0VBQ25CLFVBQVMsRUFDVjs7QUFNRDtFQUdJLGlCQUFnQjtFQUNoQixZQUFXO0VBQ1gsYUFBWTtFQUNaLFVBQVM7RUFDVCxrQkFBaUI7RUFDakIsV0FBVSxFQUNYOztBUDh3Skg7RU9sd0pFLGdCQUFlLEVBQ2hCOztBS3pKRDs7RUFFRSxxQkgwRCtCO0VHekQvQixpQkgwRDJCO0VHekQzQixpQkgwRDJCO0VHekQzQixlSDBEK0IsRUdsRGhDO0VBYkQ7Ozs7Ozs7Ozs7Ozs7O0lBU0ksb0JBQW1CO0lBQ25CLGVBQWM7SUFDZCxlSEwrQyxFR01oRDs7QUFHSDs7O0VBR0UsaUJIdUNvRTtFR3RDcEUsb0JBQTBDLEVBTTNDO0VBVkQ7Ozs7Ozs7OztJQVFJLGVBQWMsRUFDZjs7QUFFSDs7O0VBR0UsaUJBQXVDO0VBQ3ZDLG9CQUEwQyxFQU0zQztFQVZEOzs7Ozs7Ozs7SUFRSSxlQUFjLEVBQ2Y7O0FBR0g7RUFBVSxnQkhTOEMsRUdUbEI7O0FBQ3RDO0VBQVUsZ0JIUytDLEVHVG5COztBQUN0QztFQUFVLGdCSFM2QyxFR1RqQjs7QUFDdEM7RUFBVSxnQkhTOEMsRUdUbEI7O0FBQ3RDO0VBQVUsZ0JIQ29CLEVHRFE7O0FBQ3RDO0VBQVUsZ0JIUzhDLEVHVGxCOztBQU10QztFQUNFLGlCQUF1QyxFQUN4Qzs7QUFFRDtFQUNFLG9CSEdvRTtFR0ZwRSxnQkFBMEM7RUFDMUMsaUJBQWdCO0VBQ2hCLGlCQUFnQixFQUtqQjtFQUhDO0lBTkY7TUFPSSxnQkFBa0MsRUFFckMsRUFBQTs7QUFPRDs7RUFFRSxlQUE2RCxFQUM5RDs7QUFFRDs7RUFFRSwwQkhzYXNDO0VHcmF0QyxjQUFhLEVBQ2Q7O0FBR0Q7RUFBdUIsaUJBQWdCLEVBQUk7O0FBQzNDO0VBQXVCLGtCQUFpQixFQUFJOztBQUM1QztFQUF1QixtQkFBa0IsRUFBSTs7QUFDN0M7RUFBdUIsb0JBQW1CLEVBQUk7O0FBQzlDO0VBQXVCLG9CQUFtQixFQUFJOztBQUc5QztFQUF1QiwwQkFBeUIsRUFBSTs7QUFDcEQ7RUFBdUIsMEJBQXlCLEVBQUk7O0FBQ3BEO0VBQXVCLDJCQUEwQixFQUFJOztBQUdyRDtFQUNFLGVIeEZpRCxFR3lGbEQ7O0FDbkdDO0VBQ0UsZUpZeUMsRUlYMUM7O0FBQ0Q7RUFDRSxlQUEwQixFQUMzQjs7QUFMRDtFQUNFLGVKNGVvQyxFSTNlckM7O0FBQ0Q7RUFDRSxlQUEwQixFQUMzQjs7QUFMRDtFQUNFLGVKZ2ZvQyxFSS9lckM7O0FBQ0Q7RUFDRSxlQUEwQixFQUMzQjs7QUFMRDtFQUNFLGVKb2ZvQyxFSW5mckM7O0FBQ0Q7RUFDRSxlQUEwQixFQUMzQjs7QUFMRDtFQUNFLGVKd2ZvQyxFSXZmckM7O0FBQ0Q7RUFDRSxlQUEwQixFQUMzQjs7QUQ2R0g7RUFHRSxZQUFXLEVBQ1o7O0FBSkQ7RUVqSEksMEJMWXlDLEVLWDFDOztBQUNEO0VBQ0UsMEJBQXFDLEVBQ3RDOztBQUxEO0VBQ0UsMEJMNmVvQyxFSzVlckM7O0FBQ0Q7RUFDRSwwQkFBcUMsRUFDdEM7O0FBTEQ7RUFDRSwwQkxpZm9DLEVLaGZyQzs7QUFDRDtFQUNFLDBCQUFxQyxFQUN0Qzs7QUFMRDtFQUNFLDBCTHFmb0MsRUtwZnJDOztBQUNEO0VBQ0UsMEJBQXFDLEVBQ3RDOztBQUxEO0VBQ0UsMEJMeWZvQyxFS3hmckM7O0FBQ0Q7RUFDRSwwQkFBcUMsRUFDdEM7O0FGZ0lIO0VBQ0Usb0JBQWlEO0VBQ2pELG9CSDFFb0U7RUcyRXBFLGlDSDdIaUQsRUc4SGxEOztBQU9EOztFQUVFLGNBQWE7RUFDYixvQkFBMEMsRUFLM0M7RUFSRDs7OztJQU1JLGlCQUFnQixFQUNqQjs7QUFXSDtFQUpFLGdCQUFlO0VBQ2YsaUJBQWdCLEVBS2pCOztBQUlEO0VBVkUsZ0JBQWU7RUFDZixpQkFBZ0I7RUFXaEIsa0JBQWlCLEVBT2xCO0VBVEQ7SUFLSSxzQkFBcUI7SUFDckIsa0JBQWlCO0lBQ2pCLG1CQUFrQixFQUNuQjs7QUFJSDtFQUNFLGNBQWE7RUFDYixvQkh6SG9FLEVHMEhyRTs7QUFDRDs7RUFFRSx5QkgvSG1DLEVHZ0lwQzs7QUFDRDtFQUNFLGtCQUFpQixFQUNsQjs7QUFDRDtFQUNFLGVBQWMsRUFDZjs7QUd4TEM7RUFFRSxhQUFZO0VBQ1osZUFBYyxFQUNmOztBQUNEO0VBQ0UsWUFBVyxFQUNaOztBSDZMRDtFQUxGO0lBT00sWUFBVztJQUNYLGFBQW1DO0lBQ25DLFlBQVc7SUFDWCxrQkFBaUI7SUlsTnJCLGlCQUFnQjtJQUNoQix3QkFBdUI7SUFDdkIsb0JBQW1CLEVKa05oQjtFQVpMO0lBY00sbUJIcW5CNkIsRUdwbkI5QixFQUFBOztBQVNMOztFQUdFLGFBQVk7RUFDWixrQ0gxTmlELEVHMk5sRDs7QUFDRDtFQUNFLGVBQWMsRUFFZjs7QUFHRDtFQUNFLG1CSGhMb0U7RUdpTHBFLGlCSGpMb0U7RUdrTHBFLGtCSHNtQm9EO0VHcm1CcEQsK0JIck9pRCxFRzZQbEQ7RUE1QkQ7OztJQVVNLGlCQUFnQixFQUNqQjtFQVhMOzs7SUFtQkksZUFBYztJQUNkLGVBQWM7SUFDZCx5Qkh0TWlDO0lHdU1qQyxlSHhQK0MsRUc2UGhEO0lBM0JIOzs7TUF5Qk0sdUJBQXNCLEVBQ3ZCOztBQU9MOztFQUVFLG9CQUFtQjtFQUNuQixnQkFBZTtFQUNmLGdDSHRRaUQ7RUd1UWpELGVBQWM7RUFDZCxrQkFBaUIsRUFXbEI7RUFqQkQ7Ozs7OztJQVllLFlBQVcsRUFBSTtFQVo5Qjs7Ozs7O0lBY00sdUJBQXNCLEVBQ3ZCOztBQUtMO0VBQ0Usb0JIck9vRTtFR3NPcEUsbUJBQWtCO0VBQ2xCLHlCSHpPbUMsRUcwT3BDOztBUnJFRDs7OztFYTFORSw4RUNOc0YsRURPdkY7O0FBR0Q7RUFDRSxpQkFBZ0I7RUFDaEIsZUFBYztFQUNkLGVSNnlCbUM7RVE1eUJuQyw2QlI2eUJzQztFUTV5QnRDLG1CUjBGNkIsRVF6RjlCOztBQUdEO0VBQ0UsaUJBQWdCO0VBQ2hCLGVBQWM7RUFDZCxZUnV5QmdDO0VRdHlCaEMsdUJSdXlCZ0M7RVF0eUJoQyxtQlJtRjZCO0VRbEY3QiwrQ0FBMEMsRUFRM0M7RUFkRDtJQVNJLFdBQVU7SUFDVixnQkFBZTtJQUNmLGtCQUFpQjtJQUNqQixpQkFBZ0IsRUFDakI7O0Fid0xIO0VhbkxFLGVBQWM7RUFDZCxlQUEwQztFQUMxQyxpQkFBdUM7RUFDdkMsZ0JBQWdDO0VBQ2hDLHlCUmtCbUM7RVFqQm5DLHNCQUFxQjtFQUNyQixzQkFBcUI7RUFDckIsZVJwQytDO0VRcUMvQywwQlJteEJtQztFUWx4Qm5DLHVCUm94QmdDO0VRbnhCaEMsbUJSMEQ2QixFUS9DOUI7RUF0QkQ7SUFlSSxXQUFVO0lBQ1YsbUJBQWtCO0lBQ2xCLGVBQWM7SUFDZCxzQkFBcUI7SUFDckIsOEJBQTZCO0lBQzdCLGlCQUFnQixFQUNqQjs7QUFJSDtFQUNFLGtCUnF3QmlDO0VRcHdCakMsbUJBQWtCLEVBQ25COztBRTNERDtFQ0hFLG1CQUFrQjtFQUNsQixrQkFBaUI7RUFDakIsbUJBQTRCO0VBQzVCLG9CQUE0QixFRFk3QjtFSlJDO0lBRUUsYUFBWTtJQUNaLGVBQWMsRUFDZjtFQUNEO0lBQ0UsWUFBVyxFQUNaO0VJUkQ7SUFIRjtNQUlJLGFWc1V1RCxFVTlUMUQsRUFBQTtFQU5DO0lBTkY7TUFPSSxhVndVdUQsRVVuVTFELEVBQUE7RUFIQztJQVRGO01BVUksY1YwVXdELEVVeFUzRCxFQUFBOztBQVFEO0VDdkJFLG1CQUFrQjtFQUNsQixrQkFBaUI7RUFDakIsbUJBQTRCO0VBQzVCLG9CQUE0QixFRHNCN0I7RUpsQkM7SUFFRSxhQUFZO0lBQ1osZUFBYyxFQUNmO0VBQ0Q7SUFDRSxZQUFXLEVBQ1o7O0FJa0JIO0VDdkJFLG1CQUE0QjtFQUM1QixvQkFBNEIsRUR3QjdCO0VKM0JDO0lBRUUsYUFBWTtJQUNaLGVBQWMsRUFDZjtFQUNEO0lBQ0UsWUFBVyxFQUNaOztBTVZEO0VBQ0UsbUJBQWtCO0VBRWxCLGdCQUFlO0VBRWYsbUJBQXVDO0VBQ3ZDLG9CQUF1QyxFQUN4Qzs7QUFTRDtFQUNFLFlBQVcsRUFDWjs7QUFNQztFQUNFLHFCQUEyQyxFQUM1Qzs7QUFGRDtFQUNFLHNCQUEyQyxFQUM1Qzs7QUFGRDtFQUNFLFdBQTJDLEVBQzVDOztBQUZEO0VBQ0Usc0JBQTJDLEVBQzVDOztBQUZEO0VBQ0Usc0JBQTJDLEVBQzVDOztBQUZEO0VBQ0UsV0FBMkMsRUFDNUM7O0FBRkQ7RUFDRSxzQkFBMkMsRUFDNUM7O0FBRkQ7RUFDRSxzQkFBMkMsRUFDNUM7O0FBRkQ7RUFDRSxXQUEyQyxFQUM1Qzs7QUFGRDtFQUNFLHNCQUEyQyxFQUM1Qzs7QUFGRDtFQUNFLHNCQUEyQyxFQUM1Qzs7QUFGRDtFQUNFLFlBQTJDLEVBQzVDOztBQWtCRDtFQUNFLFlBQVcsRUFDWjs7QUFQRDtFQUNFLHFCQUEyQyxFQUM1Qzs7QUFGRDtFQUNFLHNCQUEyQyxFQUM1Qzs7QUFGRDtFQUNFLFdBQTJDLEVBQzVDOztBQUZEO0VBQ0Usc0JBQTJDLEVBQzVDOztBQUZEO0VBQ0Usc0JBQTJDLEVBQzVDOztBQUZEO0VBQ0UsV0FBMkMsRUFDNUM7O0FBRkQ7RUFDRSxzQkFBMkMsRUFDNUM7O0FBRkQ7RUFDRSxzQkFBMkMsRUFDNUM7O0FBRkQ7RUFDRSxXQUEyQyxFQUM1Qzs7QUFGRDtFQUNFLHNCQUEyQyxFQUM1Qzs7QUFGRDtFQUNFLHNCQUEyQyxFQUM1Qzs7QUFGRDtFQUNFLFlBQTJDLEVBQzVDOztBQVBEO0VBQ0UsV0FBVSxFQUNYOztBQVBEO0VBQ0Usb0JBQTBDLEVBQzNDOztBQUZEO0VBQ0UscUJBQTBDLEVBQzNDOztBQUZEO0VBQ0UsVUFBMEMsRUFDM0M7O0FBRkQ7RUFDRSxxQkFBMEMsRUFDM0M7O0FBRkQ7RUFDRSxxQkFBMEMsRUFDM0M7O0FBRkQ7RUFDRSxVQUEwQyxFQUMzQzs7QUFGRDtFQUNFLHFCQUEwQyxFQUMzQzs7QUFGRDtFQUNFLHFCQUEwQyxFQUMzQzs7QUFGRDtFQUNFLFVBQTBDLEVBQzNDOztBQUZEO0VBQ0UscUJBQTBDLEVBQzNDOztBQUZEO0VBQ0UscUJBQTBDLEVBQzNDOztBQUZEO0VBQ0UsV0FBMEMsRUFDM0M7O0FBa0JEO0VBQ0UsZ0JBQWlELEVBQ2xEOztBQUZEO0VBQ0UsMkJBQWlELEVBQ2xEOztBQUZEO0VBQ0UsNEJBQWlELEVBQ2xEOztBQUZEO0VBQ0UsaUJBQWlELEVBQ2xEOztBQUZEO0VBQ0UsNEJBQWlELEVBQ2xEOztBQUZEO0VBQ0UsNEJBQWlELEVBQ2xEOztBQUZEO0VBQ0UsaUJBQWlELEVBQ2xEOztBQUZEO0VBQ0UsNEJBQWlELEVBQ2xEOztBQUZEO0VBQ0UsNEJBQWlELEVBQ2xEOztBQUZEO0VBQ0UsaUJBQWlELEVBQ2xEOztBQUZEO0VBQ0UsNEJBQWlELEVBQ2xEOztBQUZEO0VBQ0UsNEJBQWlELEVBQ2xEOztBQUZEO0VBQ0Usa0JBQWlELEVBQ2xEOztBRkVMO0VFckNFO0lBQ0UsWUFBVyxFQUNaO0VBTUM7SUFDRSxxQkFBMkMsRUFDNUM7RUFGRDtJQUNFLHNCQUEyQyxFQUM1QztFQUZEO0lBQ0UsV0FBMkMsRUFDNUM7RUFGRDtJQUNFLHNCQUEyQyxFQUM1QztFQUZEO0lBQ0Usc0JBQTJDLEVBQzVDO0VBRkQ7SUFDRSxXQUEyQyxFQUM1QztFQUZEO0lBQ0Usc0JBQTJDLEVBQzVDO0VBRkQ7SUFDRSxzQkFBMkMsRUFDNUM7RUFGRDtJQUNFLFdBQTJDLEVBQzVDO0VBRkQ7SUFDRSxzQkFBMkMsRUFDNUM7RUFGRDtJQUNFLHNCQUEyQyxFQUM1QztFQUZEO0lBQ0UsWUFBMkMsRUFDNUM7RUFrQkQ7SUFDRSxZQUFXLEVBQ1o7RUFQRDtJQUNFLHFCQUEyQyxFQUM1QztFQUZEO0lBQ0Usc0JBQTJDLEVBQzVDO0VBRkQ7SUFDRSxXQUEyQyxFQUM1QztFQUZEO0lBQ0Usc0JBQTJDLEVBQzVDO0VBRkQ7SUFDRSxzQkFBMkMsRUFDNUM7RUFGRDtJQUNFLFdBQTJDLEVBQzVDO0VBRkQ7SUFDRSxzQkFBMkMsRUFDNUM7RUFGRDtJQUNFLHNCQUEyQyxFQUM1QztFQUZEO0lBQ0UsV0FBMkMsRUFDNUM7RUFGRDtJQUNFLHNCQUEyQyxFQUM1QztFQUZEO0lBQ0Usc0JBQTJDLEVBQzVDO0VBRkQ7SUFDRSxZQUEyQyxFQUM1QztFQVBEO0lBQ0UsV0FBVSxFQUNYO0VBUEQ7SUFDRSxvQkFBMEMsRUFDM0M7RUFGRDtJQUNFLHFCQUEwQyxFQUMzQztFQUZEO0lBQ0UsVUFBMEMsRUFDM0M7RUFGRDtJQUNFLHFCQUEwQyxFQUMzQztFQUZEO0lBQ0UscUJBQTBDLEVBQzNDO0VBRkQ7SUFDRSxVQUEwQyxFQUMzQztFQUZEO0lBQ0UscUJBQTBDLEVBQzNDO0VBRkQ7SUFDRSxxQkFBMEMsRUFDM0M7RUFGRDtJQUNFLFVBQTBDLEVBQzNDO0VBRkQ7SUFDRSxxQkFBMEMsRUFDM0M7RUFGRDtJQUNFLHFCQUEwQyxFQUMzQztFQUZEO0lBQ0UsV0FBMEMsRUFDM0M7RUFrQkQ7SUFDRSxnQkFBaUQsRUFDbEQ7RUFGRDtJQUNFLDJCQUFpRCxFQUNsRDtFQUZEO0lBQ0UsNEJBQWlELEVBQ2xEO0VBRkQ7SUFDRSxpQkFBaUQsRUFDbEQ7RUFGRDtJQUNFLDRCQUFpRCxFQUNsRDtFQUZEO0lBQ0UsNEJBQWlELEVBQ2xEO0VBRkQ7SUFDRSxpQkFBaUQsRUFDbEQ7RUFGRDtJQUNFLDRCQUFpRCxFQUNsRDtFQUZEO0lBQ0UsNEJBQWlELEVBQ2xEO0VBRkQ7SUFDRSxpQkFBaUQsRUFDbEQ7RUFGRDtJQUNFLDRCQUFpRCxFQUNsRDtFQUZEO0lBQ0UsNEJBQWlELEVBQ2xEO0VBRkQ7SUFDRSxrQkFBaUQsRUFDbEQsRUFBQTs7QUZXTDtFRTlDRTtJQUNFLFlBQVcsRUFDWjtFQU1DO0lBQ0UscUJBQTJDLEVBQzVDO0VBRkQ7SUFDRSxzQkFBMkMsRUFDNUM7RUFGRDtJQUNFLFdBQTJDLEVBQzVDO0VBRkQ7SUFDRSxzQkFBMkMsRUFDNUM7RUFGRDtJQUNFLHNCQUEyQyxFQUM1QztFQUZEO0lBQ0UsV0FBMkMsRUFDNUM7RUFGRDtJQUNFLHNCQUEyQyxFQUM1QztFQUZEO0lBQ0Usc0JBQTJDLEVBQzVDO0VBRkQ7SUFDRSxXQUEyQyxFQUM1QztFQUZEO0lBQ0Usc0JBQTJDLEVBQzVDO0VBRkQ7SUFDRSxzQkFBMkMsRUFDNUM7RUFGRDtJQUNFLFlBQTJDLEVBQzVDO0VBa0JEO0lBQ0UsWUFBVyxFQUNaO0VBUEQ7SUFDRSxxQkFBMkMsRUFDNUM7RUFGRDtJQUNFLHNCQUEyQyxFQUM1QztFQUZEO0lBQ0UsV0FBMkMsRUFDNUM7RUFGRDtJQUNFLHNCQUEyQyxFQUM1QztFQUZEO0lBQ0Usc0JBQTJDLEVBQzVDO0VBRkQ7SUFDRSxXQUEyQyxFQUM1QztFQUZEO0lBQ0Usc0JBQTJDLEVBQzVDO0VBRkQ7SUFDRSxzQkFBMkMsRUFDNUM7RUFGRDtJQUNFLFdBQTJDLEVBQzVDO0VBRkQ7SUFDRSxzQkFBMkMsRUFDNUM7RUFGRDtJQUNFLHNCQUEyQyxFQUM1QztFQUZEO0lBQ0UsWUFBMkMsRUFDNUM7RUFQRDtJQUNFLFdBQVUsRUFDWDtFQVBEO0lBQ0Usb0JBQTBDLEVBQzNDO0VBRkQ7SUFDRSxxQkFBMEMsRUFDM0M7RUFGRDtJQUNFLFVBQTBDLEVBQzNDO0VBRkQ7SUFDRSxxQkFBMEMsRUFDM0M7RUFGRDtJQUNFLHFCQUEwQyxFQUMzQztFQUZEO0lBQ0UsVUFBMEMsRUFDM0M7RUFGRDtJQUNFLHFCQUEwQyxFQUMzQztFQUZEO0lBQ0UscUJBQTBDLEVBQzNDO0VBRkQ7SUFDRSxVQUEwQyxFQUMzQztFQUZEO0lBQ0UscUJBQTBDLEVBQzNDO0VBRkQ7SUFDRSxxQkFBMEMsRUFDM0M7RUFGRDtJQUNFLFdBQTBDLEVBQzNDO0VBa0JEO0lBQ0UsZ0JBQWlELEVBQ2xEO0VBRkQ7SUFDRSwyQkFBaUQsRUFDbEQ7RUFGRDtJQUNFLDRCQUFpRCxFQUNsRDtFQUZEO0lBQ0UsaUJBQWlELEVBQ2xEO0VBRkQ7SUFDRSw0QkFBaUQsRUFDbEQ7RUFGRDtJQUNFLDRCQUFpRCxFQUNsRDtFQUZEO0lBQ0UsaUJBQWlELEVBQ2xEO0VBRkQ7SUFDRSw0QkFBaUQsRUFDbEQ7RUFGRDtJQUNFLDRCQUFpRCxFQUNsRDtFQUZEO0lBQ0UsaUJBQWlELEVBQ2xEO0VBRkQ7SUFDRSw0QkFBaUQsRUFDbEQ7RUFGRDtJQUNFLDRCQUFpRCxFQUNsRDtFQUZEO0lBQ0Usa0JBQWlELEVBQ2xELEVBQUE7O0FGb0JMO0VFdkRFO0lBQ0UsWUFBVyxFQUNaO0VBTUM7SUFDRSxxQkFBMkMsRUFDNUM7RUFGRDtJQUNFLHNCQUEyQyxFQUM1QztFQUZEO0lBQ0UsV0FBMkMsRUFDNUM7RUFGRDtJQUNFLHNCQUEyQyxFQUM1QztFQUZEO0lBQ0Usc0JBQTJDLEVBQzVDO0VBRkQ7SUFDRSxXQUEyQyxFQUM1QztFQUZEO0lBQ0Usc0JBQTJDLEVBQzVDO0VBRkQ7SUFDRSxzQkFBMkMsRUFDNUM7RUFGRDtJQUNFLFdBQTJDLEVBQzVDO0VBRkQ7SUFDRSxzQkFBMkMsRUFDNUM7RUFGRDtJQUNFLHNCQUEyQyxFQUM1QztFQUZEO0lBQ0UsWUFBMkMsRUFDNUM7RUFrQkQ7SUFDRSxZQUFXLEVBQ1o7RUFQRDtJQUNFLHFCQUEyQyxFQUM1QztFQUZEO0lBQ0Usc0JBQTJDLEVBQzVDO0VBRkQ7SUFDRSxXQUEyQyxFQUM1QztFQUZEO0lBQ0Usc0JBQTJDLEVBQzVDO0VBRkQ7SUFDRSxzQkFBMkMsRUFDNUM7RUFGRDtJQUNFLFdBQTJDLEVBQzVDO0VBRkQ7SUFDRSxzQkFBMkMsRUFDNUM7RUFGRDtJQUNFLHNCQUEyQyxFQUM1QztFQUZEO0lBQ0UsV0FBMkMsRUFDNUM7RUFGRDtJQUNFLHNCQUEyQyxFQUM1QztFQUZEO0lBQ0Usc0JBQTJDLEVBQzVDO0VBRkQ7SUFDRSxZQUEyQyxFQUM1QztFQVBEO0lBQ0UsV0FBVSxFQUNYO0VBUEQ7SUFDRSxvQkFBMEMsRUFDM0M7RUFGRDtJQUNFLHFCQUEwQyxFQUMzQztFQUZEO0lBQ0UsVUFBMEMsRUFDM0M7RUFGRDtJQUNFLHFCQUEwQyxFQUMzQztFQUZEO0lBQ0UscUJBQTBDLEVBQzNDO0VBRkQ7SUFDRSxVQUEwQyxFQUMzQztFQUZEO0lBQ0UscUJBQTBDLEVBQzNDO0VBRkQ7SUFDRSxxQkFBMEMsRUFDM0M7RUFGRDtJQUNFLFVBQTBDLEVBQzNDO0VBRkQ7SUFDRSxxQkFBMEMsRUFDM0M7RUFGRDtJQUNFLHFCQUEwQyxFQUMzQztFQUZEO0lBQ0UsV0FBMEMsRUFDM0M7RUFrQkQ7SUFDRSxnQkFBaUQsRUFDbEQ7RUFGRDtJQUNFLDJCQUFpRCxFQUNsRDtFQUZEO0lBQ0UsNEJBQWlELEVBQ2xEO0VBRkQ7SUFDRSxpQkFBaUQsRUFDbEQ7RUFGRDtJQUNFLDRCQUFpRCxFQUNsRDtFQUZEO0lBQ0UsNEJBQWlELEVBQ2xEO0VBRkQ7SUFDRSxpQkFBaUQsRUFDbEQ7RUFGRDtJQUNFLDRCQUFpRCxFQUNsRDtFQUZEO0lBQ0UsNEJBQWlELEVBQ2xEO0VBRkQ7SUFDRSxpQkFBaUQsRUFDbEQ7RUFGRDtJQUNFLDRCQUFpRCxFQUNsRDtFQUZEO0lBQ0UsNEJBQWlELEVBQ2xEO0VBRkQ7SUFDRSxrQkFBaUQsRUFDbEQsRUFBQTs7QWpCcVdMO0VrQjVaRSw4QmJnSXlDLEVhL0gxQzs7QUFDRDtFQUNFLGlCYndIaUM7RWF2SGpDLG9CYnVIaUM7RWF0SGpDLGViR2lEO0VhRmpELGlCQUFnQixFQUNqQjs7QUFDRDtFQUNFLGlCQUFnQixFQUNqQjs7QUFLRDtFQUNFLFlBQVc7RUFDWCxnQkFBZTtFQUNmLG9CYnlDb0UsRWFEckU7RUEzQ0Q7Ozs7Ozs7Ozs7O0lBV1EsYWJpRzJCO0lhaEczQix5QmI4QjZCO0lhN0I3QixvQkFBbUI7SUFDbkIsMkJiMkc0QixFYTFHN0I7RUFmUDtJQW9CSSx1QkFBc0I7SUFDdEIsOEJib0dnQyxFYW5HakM7RUF0Qkg7Ozs7Ozs7Ozs7O0lBOEJRLGNBQWEsRUFDZDtFQS9CUDtJQW9DSSwyQmJxRmdDLEVhcEZqQztFQXJDSDtJQXlDSSx1QmJqQ3dCLEVha0N6Qjs7QUFNSDs7Ozs7O0VBT1EsYWJ1RDJCLEVhdEQ1Qjs7QUFVUDtFQUNFLHVCYnNEa0MsRWFyQ25DO0VBbEJEOzs7Ozs7SUFRUSx1QmIrQzRCLEVhOUM3QjtFQVRQOztJQWVNLHlCQUF3QixFQUN6Qjs7QUFTTDtFQUVJLDBCYnNCbUMsRWFyQnBDOztBQVFIO0VBRUksMEJiYW1DLEVhWnBDOztBQVFIO0VBQ0UsaUJBQWdCO0VBQ2hCLFlBQVc7RUFDWCxzQkFBcUIsRUFDdEI7O0FBQ0Q7O0VBSU0saUJBQWdCO0VBQ2hCLFlBQVc7RUFDWCxvQkFBbUIsRUFDcEI7O0FDN0lIOzs7Ozs7Ozs7Ozs7RUFPSSwwQmQ4SGlDLEVjN0hsQzs7QUFLSDs7Ozs7RUFNSSwwQkFBeUMsRUFDMUM7O0FBcEJIOzs7Ozs7Ozs7Ozs7RUFPSSwwQmRzZWtDLEVjcmVuQzs7QUFLSDs7Ozs7RUFNSSwwQkFBeUMsRUFDMUM7O0FBcEJIOzs7Ozs7Ozs7Ozs7RUFPSSwwQmQwZWtDLEVjemVuQzs7QUFLSDs7Ozs7RUFNSSwwQkFBeUMsRUFDMUM7O0FBcEJIOzs7Ozs7Ozs7Ozs7RUFPSSwwQmQ4ZWtDLEVjN2VuQzs7QUFLSDs7Ozs7RUFNSSwwQkFBeUMsRUFDMUM7O0FBcEJIOzs7Ozs7Ozs7Ozs7RUFPSSwwQmRrZmtDLEVjamZuQzs7QUFLSDs7Ozs7RUFNSSwwQkFBeUMsRUFDMUM7O0FEaUpMO0VBQ0UsaUJBQWdCO0VBQ2hCLGtCQUFpQixFQTZEbEI7RUEzREM7SUFKRjtNQUtJLFlBQVc7TUFDWCxvQkFBNkM7TUFDN0MsbUJBQWtCO01BQ2xCLDZDQUE0QztNQUM1Qyx1QmJyQ2dDLEVhMkZuQztNQS9ERDtRQWFNLGlCQUFnQixFQWFqQjtRQTFCTDs7Ozs7O1VBc0JZLG9CQUFtQixFQUNwQjtNQXZCWDtRQThCTSxVQUFTLEVBK0JWO1FBN0RMOzs7Ozs7VUF1Q1ksZUFBYyxFQUNmO1FBeENYOzs7Ozs7VUEyQ1ksZ0JBQWUsRUFDaEI7UUE1Q1g7Ozs7VUF3RFksaUJBQWdCLEVBQ2pCLEVBQUE7O0FsQnVKWDtFb0JoWEUsV0FBVTtFQUNWLFVBQVM7RUFDVCxVQUFTO0VBSVQsYUFBWSxFQUNiOztBcEJvWEQ7RW9CalhFLGVBQWM7RUFDZCxZQUFXO0VBQ1gsV0FBVTtFQUNWLG9CZjBDb0U7RWV6Q3BFLGdCQUFrQztFQUNsQyxxQkFBb0I7RUFDcEIsZWZkK0M7RWVlL0MsVUFBUztFQUNULGlDZjhMc0MsRWU3THZDOztBQUVEO0VBQ0Usc0JBQXFCO0VBQ3JCLGdCQUFlO0VBQ2YsbUJBQWtCO0VBQ2xCLGlCQUFnQixFQUNqQjs7QXBCZ1VEO0VJeFJVLHVCZ0I3QnNCLEVBQy9COztBQUdEOztFQUVFLGdCQUFlO0VBQ2YsbUJBQWtCO0VBQ2xCLG9CQUFtQixFQUNwQjs7QUFHRDtFQUNFLGVBQWMsRUFDZjs7QUFHRDtFQUNFLGVBQWM7RUFDZCxZQUFXLEVBQ1o7O0FBR0Q7O0VBRUUsYUFBWSxFQUNiOztBQUdEOzs7RWR4RUUscUJBQW9CO0VBRXBCLDJDQUEwQztFQUMxQyxxQkFBb0IsRWN5RXJCOztBQUdEO0VBQ0UsZUFBYztFQUNkLGlCQUF5QztFQUN6QyxnQmZuQzRCO0Vlb0M1Qix5QmZ4Qm1DO0VleUJuQyxlZjNFaUQsRWU0RWxEOztBQXlCRDtFQUNFLGVBQWM7RUFDZCxZQUFXO0VBQ1gsYWYyRnlGO0VlMUZ6RixrQmZ2QjhCO0Vld0I5QixnQmZwRTRCO0VlcUU1Qix5QmZ6RG1DO0VlMERuQyxlZjVHaUQ7RWU2R2pELHVCZjZEbUM7RWU1RG5DLHVCQUFzQjtFQUN0Qix1QmZrRW1DO0VlakVuQyxtQmZoQjZCO0VEeENyQixpRGdCeUQ0QztFaEI2RDVDLHlFZ0I1RHNFLEVBMEIvRTtFQ2pHQztJQUNFLHNCaEJpSm9DO0lnQmhKcEMsV0FBVTtJakJXSixtRmlCZHVELEVBSzlEO0VqQjBDRDtJQUNFLFlDc0dpQztJRHJHakMsV0FBVSxFQUNYO0VBQ0Q7SUFBMEIsWUNtR1MsRURuR1E7RUFDM0M7SUFBZ0MsWUNrR0csRURsR2M7RWdCT25EOztJQTZCSSwwQmZoSStDO0llaUkvQyxXQUFVLEVBQ1g7RUEvQkg7O0lBbUNJLG9CZjZFd0MsRWU1RXpDOztBQU1IO0VBQ0UsYUFBWSxFQUNiOztBcEJzTUQ7RW9CM0xFLHlCQUF3QixFQUN6Qjs7QUFVRDtFQUNFOzs7O0lBSUUsa0JmdUJ1RixFZVp4RjtJQWZEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O01BUUksa0JmdUI2RyxFZXRCOUc7SUFUSDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztNQWFJLGtCZmdCNEcsRWVmN0csRUFBQTs7QUFVTDtFQUNFLG9CZlNtQyxFZVJwQzs7QUFPRDs7RUFFRSxtQkFBa0I7RUFDbEIsZUFBYztFQUNkLGlCQUFnQjtFQUNoQixvQkFBbUIsRUFTcEI7RUFkRDs7SUFRSSxpQmY3SmtFO0llOEpsRSxtQkFBa0I7SUFDbEIsaUJBQWdCO0lBQ2hCLG9CQUFtQjtJQUNuQixnQkFBZSxFQUNoQjs7QUFFSDs7OztFQUlFLG1CQUFrQjtFQUNsQixtQkFBa0I7RUFDbEIsbUJBQWtCLEVBQ25COztBQUVEOztFQUVFLGlCQUFnQixFQUNqQjs7QUFHRDs7RUFFRSxtQkFBa0I7RUFDbEIsc0JBQXFCO0VBQ3JCLG1CQUFrQjtFQUNsQixpQkFBZ0I7RUFDaEIsdUJBQXNCO0VBQ3RCLG9CQUFtQjtFQUNuQixnQkFBZSxFQUNoQjs7QUFDRDs7RUFFRSxjQUFhO0VBQ2Isa0JBQWlCLEVBQ2xCOztBQU1EOzs7Ozs7RUFLSSxvQmYzQ3dDLEVlNEN6Qzs7QUFHSDs7Ozs7RUFJSSxvQmZuRHdDLEVlb0R6Qzs7QUFHSDs7Ozs7RUFLTSxvQmY1RHNDLEVlNkR2Qzs7QUFVTDtFQUVFLGlCQUF5QztFQUN6QyxvQkFBNEM7RUFFNUMsaUJBQWdCO0VBQ2hCLGlCQUFxRCxFQU90RDtFQWJEOzs7OztJQVVJLGdCQUFlO0lBQ2YsaUJBQWdCLEVBQ2pCOztBQy9PRDs7O0VBQ0UsYWhCNkkrRztFZ0I1SS9HLGtCaEI2QjRCO0VnQjVCNUIsZ0JoQnBCb0Q7RWdCcUJwRCxpQmhCaUMyQjtFZ0JoQzNCLG1CaEJvQzJCLEVnQm5DNUI7O0FBRUQ7OztFQUNFLGFoQnFJK0c7RWdCcEkvRyxrQmhCb0krRyxFZ0JuSWhIOztBQUVEOzs7Ozs7O0VBRUUsYUFBWSxFQUNiOztBQWhCRDtFQUNFLGFoQjZJK0c7RWdCNUkvRyxrQmhCNkI0QjtFZ0I1QjVCLGdCaEJwQm9EO0VnQnFCcEQsaUJoQmlDMkI7RWdCaEMzQixtQmhCb0MyQixFZ0JuQzVCOztBQUVEO0VBQ0UsYWhCcUkrRztFZ0JwSS9HLGtCaEJvSStHLEVnQm5JaEg7O0FBRUQ7O0VBRUUsYUFBWSxFQUNiOztBRDRPSDtFQUtJLGFmbkgrRztFZW9IL0csa0Jmbk80QjtFZW9PNUIsZ0JmcFJvRDtFZXFScEQsaUJmL04yQjtFZWdPM0IsaUJBQXNELEVBQ3ZEOztBQ3RRRDs7O0VBQ0UsYWhCMkk4RztFZ0IxSTlHLG1CaEIwQjRCO0VnQnpCNUIsZ0JoQnJCb0Q7RWdCc0JwRCx1QmhCZ0NpQztFZ0IvQmpDLG1CaEJtQzJCLEVnQmxDNUI7O0FBRUQ7OztFQUNFLGFoQm1JOEc7RWdCbEk5RyxrQmhCa0k4RyxFZ0JqSS9HOztBQUVEOzs7Ozs7O0VBRUUsYUFBWSxFQUNiOztBQWhCRDtFQUNFLGFoQjJJOEc7RWdCMUk5RyxtQmhCMEI0QjtFZ0J6QjVCLGdCaEJyQm9EO0VnQnNCcEQsdUJoQmdDaUM7RWdCL0JqQyxtQmhCbUMyQixFZ0JsQzVCOztBQUVEO0VBQ0UsYWhCbUk4RztFZ0JsSTlHLGtCaEJrSThHLEVnQmpJL0c7O0FBRUQ7O0VBRUUsYUFBWSxFQUNiOztBRDBQSDtFQUtJLGFmbkk4RztFZW9JOUcsbUJmcFA0QjtFZXFQNUIsZ0JmblNvRDtFZW9TcEQsdUJmOU9pQztFZStPakMsaUJBQXNELEVBQ3ZEOztBQVFIO0VBRUUsbUJBQWtCLEVBTW5CO0VBUkQ7SUFNSSxzQkFBMEMsRUFDM0M7O0FBR0g7RUFDRSxtQkFBa0I7RUFDbEIsT0FBTTtFQUNOLFNBQVE7RUFDUixXQUFVO0VBQ1YsZUFBYztFQUNkLFlmbEt5RjtFZW1LekYsYWZuS3lGO0Vlb0t6RixrQmZwS3lGO0VlcUt6RixtQkFBa0I7RUFDbEIscUJBQW9CLEVBQ3JCOztBQUNEO0VBQ0UsWWZ2S2dIO0Vld0toSCxhZnhLZ0g7RWV5S2hILGtCZnpLZ0gsRWUwS2pIOztBQUNEO0VBQ0UsWWYxS2lIO0VlMktqSCxhZjNLaUg7RWU0S2pILGtCZjVLaUgsRWU2S2xIOztBQzFYQzs7Ozs7Ozs7OztFQVVFLGVoQmdlb0MsRWdCL2RyQzs7QUFFRDtFQUNFLHNCaEI0ZG9DO0VENWE5QixpRGlCL0M4QyxFQU1yRDtFQUxDO0lBQ0Usc0JBQXdDO0lqQjZDcEMsa0VpQjVDMEUsRUFFL0U7O0FBR0g7RUFDRSxlaEJrZG9DO0VnQmpkcEMsc0JoQmlkb0M7RWdCaGRwQywwQmhCaWRvQyxFZ0JoZHJDOztBQUVEO0VBQ0UsZWhCNGNvQyxFZ0IzY3JDOztBQS9CRDs7Ozs7Ozs7OztFQVVFLGVoQndlb0MsRWdCdmVyQzs7QUFFRDtFQUNFLHNCaEJvZW9DO0VEcGI5QixpRGlCL0M4QyxFQU1yRDtFQUxDO0lBQ0Usc0JBQXdDO0lqQjZDcEMsa0VpQjVDMEUsRUFFL0U7O0FBR0g7RUFDRSxlaEIwZG9DO0VnQnpkcEMsc0JoQnlkb0M7RWdCeGRwQywwQmhCeWRvQyxFZ0J4ZHJDOztBQUVEO0VBQ0UsZWhCb2RvQyxFZ0JuZHJDOztBQS9CRDs7Ozs7Ozs7OztFQVVFLGVoQjRlb0MsRWdCM2VyQzs7QUFFRDtFQUNFLHNCaEJ3ZW9DO0VEeGI5QixpRGlCL0M4QyxFQU1yRDtFQUxDO0lBQ0Usc0JBQXdDO0lqQjZDcEMsa0VpQjVDMEUsRUFFL0U7O0FBR0g7RUFDRSxlaEI4ZG9DO0VnQjdkcEMsc0JoQjZkb0M7RWdCNWRwQywwQmhCNmRvQyxFZ0I1ZHJDOztBQUVEO0VBQ0UsZWhCd2RvQyxFZ0J2ZHJDOztBRHlXSDtFQUdLLFVBQWdDLEVBQ2xDOztBQUpIO0VBTUssT0FBTSxFQUNSOztBQVNIO0VBQ0UsZUFBYztFQUNkLGdCQUFlO0VBQ2Ysb0JBQW1CO0VBQ25CLGVBQWdDLEVBQ2pDOztBQWtCQztFQUVFO0lBQ0Usc0JBQXFCO0lBQ3JCLGlCQUFnQjtJQUNoQix1QkFBc0IsRUFDdkI7RUFHRDtJQUNFLHNCQUFxQjtJQUNyQixZQUFXO0lBQ1gsdUJBQXNCLEVBQ3ZCO0VBR0Q7SUFDRSxzQkFBcUIsRUFDdEI7RUFFRDtJQUNFLHNCQUFxQjtJQUNyQix1QkFBc0IsRUFPdkI7SUFMQzs7O01BR0UsWUFBVyxFQUNaO0VBSUg7SUFDRSxZQUFXLEVBQ1o7RUFFRDtJQUNFLGlCQUFnQjtJQUNoQix1QkFBc0IsRUFDdkI7RUFJRDs7SUFFRSxzQkFBcUI7SUFDckIsY0FBYTtJQUNiLGlCQUFnQjtJQUNoQix1QkFBc0IsRUFLdkI7SUFIQzs7TUFDRSxnQkFBZSxFQUNoQjtFQUVIOztJQUVFLG1CQUFrQjtJQUNsQixlQUFjLEVBQ2Y7RUFHRDtJQUNFLE9BQU0sRUFDUCxFQUFBOztBQWVMOzs7O0VBU0ksY0FBYTtFQUNiLGlCQUFnQjtFQUNoQixpQkFBeUMsRUFDMUM7O0FBWkg7O0VBaUJJLGlCQUFrRSxFQUNuRTs7QUFsQkg7RUpyZkUsbUJBQTRCO0VBQzVCLG9CQUE0QixFSTJnQjNCO0VUOWdCRDtJQUVFLGFBQVk7SUFDWixlQUFjLEVBQ2Y7RUFDRDtJQUNFLFlBQVcsRUFDWjs7QVMyZ0JEO0VBM0JGO0lBNkJNLGtCQUFpQjtJQUNqQixpQkFBZ0I7SUFDaEIsaUJBQXlDLEVBQzFDLEVBQUE7O0FBaENMO0VBd0NJLFlBQStCLEVBQ2hDOztBQU9DO0VBaERKO0lBa0RRLHlCQUFpRSxFQUNsRSxFQUFBOztBQUlIO0VBdkRKO0lBeURRLGlCQUEwQyxFQUMzQyxFQUFBOztBRXRqQlA7RUFDRSxzQkFBcUI7RUFDckIsaUJBQWdCO0VBQ2hCLG9CakIwSXFDO0VpQnpJckMsNkRSWmdFO0VRYWhFLG1CQUFrQjtFQUNsQix1QkFBc0I7RUFDdEIsK0JBQTBCO01BQTFCLDJCQUEwQjtFQUMxQixnQkFBZTtFQUNmLHVCQUFzQjtFQUN0Qiw4QkFBNkI7RUFDN0Isb0JBQW1CO0VDNEJuQixrQmxCZ0Q4QjtFa0IvQzlCLGdCbEJHNEI7RWtCRjVCLHlCbEJjbUM7RWtCYm5DLG1CbEIyRDZCO0VENEc3QiwwQmtCcE15QjtFbEJxTXRCLHVCa0JyTXNCO0VsQnNNckIsc0JrQnRNcUI7RWxCdU1qQixrQmtCdk1pQixFQWlDMUI7RUE5Q0Q7SWhCSkUscUJBQW9CO0lBRXBCLDJDQUEwQztJQUMxQyxxQkFBb0IsRWdCc0JqQjtFQXJCTDtJQTJCSSxZakJvSGlDO0lpQm5IakMsc0JBQXFCLEVBQ3RCO0VBN0JIO0lBaUNJLFdBQVU7SUFDVix1QkFBc0I7SWxCMkJoQixpRGtCMUI4QyxFQUNyRDtFQXBDSDs7SUF5Q0ksb0JqQmlMd0M7SWlCaEx4QyxxQkFBb0I7SUUvQ3RCLGNGZ0RzQjtJRTdDdEIsMEJBQWtDO0lwQitEMUIsaUJrQmpCa0IsRUFDekI7O0FBT0g7RUN0REUsWWxCaUptQztFa0JoSm5DLHVCbEJpSm1DO0VrQmhKbkMsbUJsQmlKbUMsRWlCM0ZwQztFQ3BEQzs7SUFNRSxZbEJ1SWlDO0lrQnRJakMsMEJBQTBDO0lBQ3RDLHNCQUFrQyxFQUN2QztFQUNEOztJQUdFLHVCQUFzQixFQUN2QjtFQUlDOzs7Ozs7O0lBTUUsdUJsQnNIK0I7SWtCckgzQixtQmxCc0gyQixFa0JySGhDO0VBR0g7SUFDRSxZbEJnSGlDO0lrQi9HakMsdUJsQjhHaUMsRWtCN0dsQzs7QURxQkg7RUN6REUsWWxCcUptQztFa0JwSm5DLDBCbEJVMkM7RWtCVDNDLHNCbEJxSjBELEVpQjVGM0Q7RUN2REM7O0lBTUUsWWxCMklpQztJa0IxSWpDLDBCQUEwQztJQUN0QyxzQkFBa0MsRUFDdkM7RUFDRDs7SUFHRSx1QkFBc0IsRUFDdkI7RUFJQzs7Ozs7OztJQU1FLDBCbEJqQnVDO0lrQmtCbkMsc0JsQjBIa0QsRWtCekh2RDtFQUdIO0lBQ0UsZWxCdkJ5QztJa0J3QnpDLHVCbEJrSGlDLEVrQmpIbEM7O0FEeUJIO0VDN0RFLFlsQnlKbUM7RWtCeEpuQywwQmxCVzZCO0VrQlY3QixzQmxCeUowRCxFaUI1RjNEO0VDM0RDOztJQU1FLFlsQitJaUM7SWtCOUlqQywwQkFBMEM7SUFDdEMsc0JBQWtDLEVBQ3ZDO0VBQ0Q7O0lBR0UsdUJBQXNCLEVBQ3ZCO0VBSUM7Ozs7Ozs7SUFNRSwwQmxCaEJ5QjtJa0JpQnJCLHNCbEI4SGtELEVrQjdIdkQ7RUFHSDtJQUNFLGVsQnRCMkI7SWtCdUIzQix1QmxCc0hpQyxFa0JySGxDOztBRDZCSDtFQ2pFRSxZbEI2Sm1DO0VrQjVKbkMsMEJsQlk2QjtFa0JYN0Isc0JsQjZKdUQsRWlCNUZ4RDtFQy9EQzs7SUFNRSxZbEJtSmlDO0lrQmxKakMsMEJBQTBDO0lBQ3RDLHNCQUFrQyxFQUN2QztFQUNEOztJQUdFLHVCQUFzQixFQUN2QjtFQUlDOzs7Ozs7O0lBTUUsMEJsQmZ5QjtJa0JnQnJCLHNCbEJrSStDLEVrQmpJcEQ7RUFHSDtJQUNFLGVsQnJCMkI7SWtCc0IzQix1QmxCMEhpQyxFa0J6SGxDOztBRGlDSDtFQ3JFRSxZbEJpS21DO0VrQmhLbkMsMEJsQmE2QjtFa0JaN0Isc0JsQmlLMEQsRWlCNUYzRDtFQ25FQzs7SUFNRSxZbEJ1SmlDO0lrQnRKakMsMEJBQTBDO0lBQ3RDLHNCQUFrQyxFQUN2QztFQUNEOztJQUdFLHVCQUFzQixFQUN2QjtFQUlDOzs7Ozs7O0lBTUUsMEJsQmR5QjtJa0JlckIsc0JsQnNJa0QsRWtCckl2RDtFQUdIO0lBQ0UsZWxCcEIyQjtJa0JxQjNCLHVCbEI4SGlDLEVrQjdIbEM7O0FEcUNIO0VDekVFLFlsQnFLbUM7RWtCcEtuQywwQmxCYzZCO0VrQmI3QixzQmxCcUt5RCxFaUI1RjFEO0VDdkVDOztJQU1FLFlsQjJKaUM7SWtCMUpqQywwQkFBMEM7SUFDdEMsc0JBQWtDLEVBQ3ZDO0VBQ0Q7O0lBR0UsdUJBQXNCLEVBQ3ZCO0VBSUM7Ozs7Ozs7SUFNRSwwQmxCYnlCO0lrQmNyQixzQmxCMElpRCxFa0J6SXREO0VBR0g7SUFDRSxlbEJuQjJCO0lrQm9CM0IsdUJsQmtJaUMsRWtCaklsQzs7QUQ4Q0g7RUFDRSxlakJ4RTJDO0VpQnlFM0Msb0JBQW1CO0VBQ25CLGlCQUFnQixFQThCakI7RUFqQ0Q7O0lBVUksOEJBQTZCO0lsQjdCdkIsaUJrQjhCa0IsRUFDekI7RUFaSDtJQWlCSSwwQkFBeUIsRUFDMUI7RUFsQkg7SUFxQkksZWpCekU0QztJaUIwRTVDLDJCakJ4RTZCO0lpQnlFN0IsOEJBQTZCLEVBQzlCO0VBeEJIOzs7SUE2Qk0sZWpCdkc2QztJaUJ3RzdDLHNCQUFxQixFQUN0Qjs7QUFRTDtFQ2hGRSxtQmxCbUQ4QjtFa0JsRDlCLGdCbEJJc0Q7RWtCSHRELHVCbEJ5RG1DO0VrQnhEbkMsbUJsQjRENkIsRWlCb0I5Qjs7QUFDRDtFQ3BGRSxrQmxCc0Q4QjtFa0JyRDlCLGdCbEJLc0Q7RWtCSnRELGlCbEIwRDZCO0VrQnpEN0IsbUJsQjZENkIsRWlCdUI5Qjs7QUFDRDtFQ3hGRSxpQmxCeUQ2QjtFa0J4RDdCLGdCbEJLc0Q7RWtCSnRELGlCbEIwRDZCO0VrQnpEN0IsbUJsQjZENkIsRWlCMEI5Qjs7QUFNRDtFQUNFLGVBQWM7RUFDZCxZQUFXLEVBQ1o7O0FBR0Q7RUFDRSxnQkFBZSxFQUNoQjs7QUFHRDs7O0VBSUksWUFBVyxFQUNaOztBR3RKSDtFQUNFLFdBQVU7RXJCaUxGLGlDcUJoTCtCLEVBSXhDO0VBTkQ7SUFJSSxXQUFVLEVBQ1g7O0FBR0g7RUFDRSxjQUFhLEVBS2Q7RUFORDtJQUdjLGVBQWMsRUFBSTs7QUFLaEM7RUFBb0IsbUJBQWtCLEVBQUk7O0FBRTFDO0VBQW9CLHlCQUF3QixFQUFJOztBQUVoRDtFQUNFLG1CQUFrQjtFQUNsQixVQUFTO0VBQ1QsaUJBQWdCO0VyQitKUix3Q3FCOUp1QztFckJzS3ZDLDJCcUJyS3lCO0VyQnlLekIsaUNxQnhLZ0MsRUFDekM7O0FDOUJEO0VBQ0Usc0JBQXFCO0VBQ3JCLFNBQVE7RUFDUixVQUFTO0VBQ1QsaUJBQWdCO0VBQ2hCLHVCQUFzQjtFQUN0Qix1QkFBc0M7RUFDdEMsb0NBQWlEO0VBQ2pELG1DQUFpRCxFQUNsRDs7QUFHRDs7RUFFRSxtQkFBa0IsRUFDbkI7O0FBR0Q7RUFDRSxXQUFVLEVBQ1g7O0FBR0Q7RUFDRSxtQkFBa0I7RUFDbEIsVUFBUztFQUNULFFBQU87RUFDUCxjckIrTzZCO0VxQjlPN0IsY0FBYTtFQUNiLFlBQVc7RUFDWCxpQkFBZ0I7RUFDaEIsZUFBYztFQUNkLGdCQUFlO0VBQ2YsaUJBQWdCO0VBQ2hCLGdCckJXNEI7RXFCVjVCLGlCQUFnQjtFQUNoQix1QnJCZ01tQztFcUIvTG5DLHVCckJtTW1DO0VxQmxNbkMsc0NyQmdNOEM7RXFCL0w5QyxtQnJCZ0U2QjtFRHhDckIsNENzQnZCdUM7RUFDL0MsNkJBQTRCLEVBeUI3QjtFQTNDRDtJQXdCSSxTQUFRO0lBQ1IsV0FBVSxFQUNYO0VBMUJIO0lDeEJFLFlBQVc7SUFDWCxjQUEyQztJQUMzQyxpQkFBZ0I7SUFDaEIsMEJ0QndPc0MsRXFCcExyQztFQS9CSDtJQW1DSSxlQUFjO0lBQ2Qsa0JBQWlCO0lBQ2pCLFlBQVc7SUFDWCxvQkFBbUI7SUFDbkIseUJyQkxpQztJcUJNakMsZXJCekQ2QztJcUIwRDdDLG9CQUFtQixFQUNwQjs7QUFJSDtFQUdJLHNCQUFxQjtFQUNyQixlckJzS21EO0VxQnJLbkQsMEJyQnVLb0MsRXFCdEtyQzs7QUFJSDtFQUlJLFlyQnlCNEI7RXFCeEI1QixzQkFBcUI7RUFDckIsV0FBVTtFQUNWLDBCckIzRXlDLEVxQjRFMUM7O0FBT0g7RUFJSSxlckIxRitDLEVxQjJGaEQ7O0FBTEg7RUFVSSxzQkFBcUI7RUFDckIsOEJBQTZCO0VBQzdCLHVCQUFzQjtFRTFHeEIsb0VBQW1FO0VGNEdqRSxvQnJCZ0h3QyxFcUIvR3pDOztBQUlIO0VBR0ksZUFBYyxFQUNmOztBQUpIO0VBUUksV0FBVSxFQUNYOztBQU9IO0VBQ0UsV0FBVTtFQUNWLFNBQVEsRUFDVDs7QUFPRDtFQUNFLFFBQU87RUFDUCxZQUFXLEVBQ1o7O0FBRUQ7RUFDRSxVQUFTO0VBQ1Qsb0NBQTJCO1VBQTNCLDRCQUEyQixFQUM1Qjs7QUFHRDtFQUNFLGVBQWM7RUFDZCxrQkFBaUI7RUFDakIsZ0JyQjFHc0Q7RXFCMkd0RCx5QnJCakdtQztFcUJrR25DLGVyQm5KaUQ7RXFCb0pqRCxvQkFBbUIsRUFDcEI7O0FBR0Q7RUFDRSxnQkFBZTtFQUNmLFFBQU87RUFDUCxTQUFRO0VBQ1IsVUFBUztFQUNULE9BQU07RUFDTixhckJvRzZCLEVxQm5HOUI7O0FBR0Q7RUFDRSxTQUFRO0VBQ1IsV0FBVSxFQUNYOztBQU9EOztFQUlJLGNBQWE7RUFDYix5QkFBc0M7RUFDdEMsWUFBVyxFQUNaOztBQVBIOztFQVVJLFVBQVM7RUFDVCxhQUFZO0VBQ1osbUJBQWtCLEVBQ25COztBQVFIO0VBQ0U7SUFFSSxTQUFRO0lBQUUsV0FBVSxFQUNyQjtFQUhIO0lBT0ksUUFBTztJQUFFLFlBQVcsRUFDckIsRUFBQTs7QUduTkw7O0VBRUUsbUJBQWtCO0VBQ2xCLHNCQUFxQjtFQUNyQix1QkFBc0IsRUFZdkI7RUFoQkQ7O0lBTUksbUJBQWtCO0lBQ2xCLFlBQVcsRUFRWjtJQWZIOzs7OztNQWFNLFdBQVUsRUFDWDs7QUFLTDs7OztFQUtJLGtCQUFpQixFQUNsQjs7QUFJSDtFQUNFLGtCQUFpQixFQVlsQjtFbEJsQ0M7SUFFRSxhQUFZO0lBQ1osZUFBYyxFQUNmO0VBQ0Q7SUFDRSxZQUFXLEVBQ1o7RWtCY0g7O0lBTUksWUFBVyxFQUNaO0VBUEg7OztJQVdJLGlCQUFnQixFQUNqQjs7QUFHSDtFQUNFLGlCQUFnQixFQUNqQjs7QUFHRDtFQUNFLGVBQWMsRUFJZjtFQUxEO0lDL0NFLDhCRGtEZ0M7SUNqRDdCLDJCRGlENkIsRUFDL0I7O0FBR0g7O0VDOUNFLDZCRGdENkI7RUMvQzFCLDBCRCtDMEIsRUFDOUI7O0FBR0Q7RUFDRSxZQUFXLEVBQ1o7O0FBQ0Q7RUFDRSxpQkFBZ0IsRUFDakI7O0FBQ0Q7O0VDbEVFLDhCRHFFZ0M7RUNwRTdCLDJCRG9FNkIsRUFDL0I7O0FBRUg7RUNoRUUsNkJEaUU2QjtFQ2hFMUIsMEJEZ0UwQixFQUM5Qjs7QUFHRDs7RUFFRSxXQUFVLEVBQ1g7O0FBZ0JEO0VBQ0Usa0JBQWlCO0VBQ2pCLG1CQUFrQixFQUNuQjs7QUFDRDtFQUNFLG1CQUFrQjtFQUNsQixvQkFBbUIsRUFDcEI7O0FBSUQ7RXpCN0NVLGlEeUI4QzRDLEVBTXJEO0VBUEQ7SXpCN0NVLGlCeUJrRGtCLEVBQ3pCOztBQUtIO0VBQ0UsZUFBYyxFQUNmOztBQUVEO0VBQ0Usd0JBQXFEO0VBQ3JELHVCQUFzQixFQUN2Qjs7QUFFRDtFQUNFLHdCeEJkNkIsRXdCZTlCOztBQU1EOzs7RUFJSSxlQUFjO0VBQ2QsWUFBVztFQUNYLFlBQVc7RUFDWCxnQkFBZSxFQUNoQjs7QWxCeklEO0VBRUUsYUFBWTtFQUNaLGVBQWMsRUFDZjs7QUFDRDtFQUNFLFlBQVcsRUFDWjs7QWtCMEhIO0VBY00sWUFBVyxFQUNaOztBQWZMOzs7O0VBc0JJLGlCQUFnQjtFQUNoQixlQUFjLEVBQ2Y7O0FBR0g7RUFFSSxpQkFBZ0IsRUFDakI7O0FBSEg7RUFLSSw2QnhCakUyQjtFeUJsRzdCLDhCRG9LaUM7RUNuS2hDLDZCRG1LZ0MsRUFDaEM7O0FBUEg7RUFTSSwrQnhCckUyQjtFeUIxRzdCLDJCRGdMOEI7RUMvSzdCLDBCRCtLNkIsRUFDN0I7O0FBRUg7RUFDRSxpQkFBZ0IsRUFDakI7O0FBQ0Q7O0VDOUtFLDhCRGlMaUM7RUNoTGhDLDZCRGdMZ0MsRUFDaEM7O0FBRUg7RUM1TEUsMkJENkw0QjtFQzVMM0IsMEJENEwyQixFQUM3Qjs7QUFNRDtFQUNFLGVBQWM7RUFDZCxZQUFXO0VBQ1gsb0JBQW1CO0VBQ25CLDBCQUF5QixFQWMxQjtFQWxCRDs7SUFPSSxZQUFXO0lBQ1gsb0JBQW1CO0lBQ25CLFVBQVMsRUFDVjtFQVZIO0lBWUksWUFBVyxFQUNaO0VBYkg7SUFnQkksV0FBVSxFQUNYOztBakNzMk5IOzs7O0VpQ2oxTk0sbUJBQWtCO0VBQ2xCLHVCQUFtQjtFQUNuQixxQkFBb0IsRUFDckI7O0FFMU9MO0VBQ0UsbUJBQWtCO0VBQ2xCLGVBQWM7RUFDZCwwQkFBeUIsRUF1QjFCO0VBMUJEO0lBT0ksWUFBVztJQUNYLGdCQUFlO0lBQ2YsaUJBQWdCLEVBQ2pCO0VBVkg7SUFlSSxtQkFBa0I7SUFDbEIsV0FBVTtJQUtWLFlBQVc7SUFFWCxZQUFXO0lBQ1gsaUJBQWdCLEVBQ2pCOztBQXNCSDs7O0VBR0Usb0JBQW1CLEVBS3BCO0VBUkQ7OztJQU1JLGlCQUFnQixFQUNqQjs7QUFHSDs7RUFFRSxVQUFTO0VBQ1Qsb0JBQW1CO0VBQ25CLHVCQUFzQixFQUN2Qjs7QUFJRDtFQUNFLGtCMUJzQjhCO0UwQnJCOUIsZ0IxQnZCNEI7RTBCd0I1QixvQkFBbUI7RUFDbkIsZUFBYztFQUNkLGUxQmhFaUQ7RTBCaUVqRCxtQkFBa0I7RUFDbEIsMEIxQmhFaUQ7RTBCaUVqRCx1QjFCOEdtQztFMEI3R25DLG1CMUI0QjZCLEUwQlQ5QjtFQTVCRDs7O0lBYUksa0IxQmdCNEI7STBCZjVCLGdCMUJqQ29EO0kwQmtDcEQsbUIxQndCMkIsRTBCdkI1QjtFQWhCSDs7O0lBa0JJLG1CMUJRNEI7STBCUDVCLGdCMUJ2Q29EO0kwQndDcEQsbUIxQmtCMkIsRTBCakI1QjtFQXJCSDs7SUEwQkksY0FBYSxFQUNkOztBQUlIOzs7Ozs7O0VEaEdFLDhCQ3VHOEI7RUR0RzNCLDJCQ3NHMkIsRUFDL0I7O0FBQ0Q7RUFDRSxnQkFBZSxFQUNoQjs7QUFDRDs7Ozs7OztFRHBHRSw2QkMyRzZCO0VEMUcxQiwwQkMwRzBCLEVBQzlCOztBQUNEO0VBQ0UsZUFBYyxFQUNmOztBQUlEO0VBQ0UsbUJBQWtCO0VBR2xCLGFBQVk7RUFDWixvQkFBbUIsRUE4QnBCO0VBbkNEO0lBVUksbUJBQWtCLEVBVW5CO0lBcEJIO01BWU0sa0JBQWlCLEVBQ2xCO0lBYkw7TUFrQk0sV0FBVSxFQUNYO0VBbkJMOztJQTBCTSxtQkFBa0IsRUFDbkI7RUEzQkw7O0lBZ0NNLGtCQUFpQixFQUNsQjs7QUMzSkw7RUFDRSxpQkFBZ0I7RUFDaEIsZ0JBQWU7RUFDZixpQkFBZ0IsRUF5RGpCO0VyQnZEQztJQUVFLGFBQVk7SUFDWixlQUFjLEVBQ2Y7RUFDRDtJQUNFLFlBQVcsRUFDWjtFcUJaSDtJQU9JLG1CQUFrQjtJQUNsQixlQUFjLEVBeUJmO0lBakNIO01BV00sbUJBQWtCO01BQ2xCLGVBQWM7TUFDZCxtQjNCZ1orQyxFMkIxWWhEO01BbkJMO1FBZ0JRLHNCQUFxQjtRQUNyQiwwQjNCVjJDLEUyQlc1QztJQWxCUDtNQXVCTSxlM0JqQjZDLEUyQjBCOUM7TUFoQ0w7UUEyQlEsZTNCckIyQztRMkJzQjNDLHNCQUFxQjtRQUNyQiw4QkFBNkI7UUFDN0Isb0IzQjRMb0MsRTJCM0xyQztFQS9CUDtJQXdDTSwwQjNCakM2QztJMkJrQzdDLHNCM0JoQ3VDLEUyQmlDeEM7RUExQ0w7SUxIRSxZQUFXO0lBQ1gsY0FBMkM7SUFDM0MsaUJBQWdCO0lBQ2hCLDBCQUpnQyxFS3dEL0I7RUFwREg7SUEwREksZ0JBQWUsRUFDaEI7O0FBUUg7RUFDRSw4QjNCZ1c4QyxFMkI3VC9DO0VBcENEO0lBR0ksWUFBVztJQUVYLG9CQUFtQixFQXlCcEI7SUE5Qkg7TUFTTSxrQkFBaUI7TUFDakIseUIzQnRCK0I7TTJCdUIvQiw4QkFBNkI7TUFDN0IsMkJBQTBELEVBSTNEO01BaEJMO1FBY1EsbUMzQm1Wd0MsRTJCbFZ6QztJQWZQO01BdUJRLGUzQnJGMkM7TTJCc0YzQyx1QjNCdEVvQjtNMkJ1RXBCLHVCM0I4VXdDO00yQjdVeEMsaUNBQWdDO01BQ2hDLGdCQUFlLEVBQ2hCOztBQWFQO0VBRUksWUFBVyxFQW1CWjtFQXJCSDtJQU1NLG1CM0JieUIsRTJCYzFCO0VBUEw7SUFTTSxpQkFBZ0IsRUFDakI7RUFWTDtJQWlCUSxZM0JuQndCO0kyQm9CeEIsMEIzQnJIcUMsRTJCc0h0Qzs7QUFPUDtFQUVJLFlBQVcsRUFLWjtFQVBIO0lBSU0sZ0JBQWU7SUFDZixlQUFjLEVBQ2Y7O0FBV0w7RUFDRSxZQUFXLEVBd0JaO0VBekJEO0lBSUksWUFBVyxFQUtaO0lBVEg7TUFNTSxtQkFBa0I7TUFDbEIsbUJBQWtCLEVBQ25CO0VBUkw7SUFZSSxVQUFTO0lBQ1QsV0FBVSxFQUNYO0VBRUQ7SUFoQkY7TUFrQk0sb0JBQW1CO01BQ25CLFVBQVMsRUFJVjtNQXZCTDtRQXFCUSxpQkFBZ0IsRUFDakIsRUFBQTs7QUFRUDtFQUNFLGlCQUFnQixFQXlCakI7RUExQkQ7SUFLSSxnQkFBZTtJQUNmLG1CM0J0RjJCLEUyQnVGNUI7RUFQSDs7Ozs7SUFZSSx1QjNCMk9rRCxFMkIxT25EO0VBRUQ7SUFmRjtNQWlCTSw4QjNCc09nRDtNMkJyT2hELDJCQUEwRCxFQUMzRDtJQW5CTDs7Ozs7TUF1Qk0sMEIzQnZMc0IsRTJCd0x2QixFQUFBOztBQVNMO0VBRUksY0FBYSxFQUNkOztBQUhIO0VBS0ksZUFBYyxFQUNmOztBQVFIO0VBRUUsaUJBQWdCO0VGM09oQiwyQkU2TzRCO0VGNU8zQiwwQkU0TzJCLEVBQzdCOztBL0JwS0c7RWdDbEVGLG1CQUFrQjtFQUNsQixpQjVCMlZxQztFNEIxVnJDLG9CNUJvRG9FO0U0Qm5EcEUsOEJBQTZCLEVBUTlCO0V0QlRDO0lBRUUsYUFBWTtJQUNaLGVBQWMsRUFDZjtFQUNEO0lBQ0UsWUFBVyxFQUNaO0VzQkREO0loQzBERTtNZ0N6REEsbUI1QnlGMkIsRTRCdkY5QixFQUFBOztBdEJUQztFQUVFLGFBQVk7RUFDWixlQUFjLEVBQ2Y7O0FBQ0Q7RUFDRSxZQUFXLEVBQ1o7O0FzQmFEO0VBSEY7SUFJSSxZQUFXLEVBRWQsRUFBQTs7QUFhRDtFQUNFLG9CQUFtQjtFQUNuQixvQjVCdVRnRTtFNEJ0VGhFLG1CNUJzVGdFO0U0QnJUaEUsa0NBQWlDO0VBQ2pDLG1EQUE4QztFQUU5QyxrQ0FBaUMsRUErQmxDO0V0QjFFQztJQUVFLGFBQVk7SUFDWixlQUFjLEVBQ2Y7RUFDRDtJQUNFLFlBQVcsRUFDWjtFc0I2Qkg7SUFVSSxpQkFBZ0IsRUFDakI7RUFFRDtJQWJGO01BY0ksWUFBVztNQUNYLGNBQWE7TUFDYixpQkFBZ0IsRUFzQm5CO01BdENEO1FBbUJNLDBCQUF5QjtRQUN6Qix3QkFBdUI7UUFDdkIsa0JBQWlCO1FBQ2pCLDZCQUE0QixFQUM3QjtNQXZCTDtRQTBCTSxvQkFBbUIsRUFDcEI7TUFJRDs7O1FBR0UsZ0JBQWU7UUFDZixpQkFBZ0IsRUFDakIsRUFBQTs7QUFJTDs7RUFHSSxrQjVCZ1JvQyxFNEIzUXJDO0VBSEM7SUFMSjs7TUFNTSxrQkFBaUIsRUFFcEIsRUFBQTs7QUFRSDs7OztFQUlJLG9CNUI2UDhEO0U0QjVQOUQsbUI1QjRQOEQsRTRCdFAvRDtFQUpDO0lBUEo7Ozs7TUFRTSxnQkFBZTtNQUNmLGVBQWUsRUFFbEIsRUFBQTs7QUFXSDtFQUNFLGM1QitJNkI7RTRCOUk3QixzQkFBcUIsRUFLdEI7RUFIQztJQUpGO01BS0ksaUJBQWdCLEVBRW5CLEVBQUE7O0FBR0Q7O0VBRUUsZ0JBQWU7RUFDZixTQUFRO0VBQ1IsUUFBTztFQUNQLGM1QnFJNkIsRTRCL0g5QjtFQUhDO0lBUkY7O01BU0ksaUJBQWdCLEVBRW5CLEVBQUE7O0FBQ0Q7RUFDRSxPQUFNO0VBQ04sc0JBQXFCLEVBQ3RCOztBQUNEO0VBQ0UsVUFBUztFQUNULGlCQUFnQjtFQUNoQixzQkFBcUIsRUFDdEI7O0FBS0Q7RUFDRSxZQUFXO0VBQ1gsbUI1QnNNZ0U7RTRCck1oRSxnQjVCakhzRDtFNEJrSHRELGtCNUJyR29FO0U0QnNHcEUsYTVCZ01xQyxFNEIvS3RDO0VBdEJEO0lBU0ksc0JBQXFCLEVBQ3RCO0VBVkg7SUFhSSxlQUFjLEVBQ2Y7RUFFRDtJQUNFOztNQUVFLG1CNUJxTDRELEU0QnBMN0QsRUFBQTs7QUFVTDtFQUNFLG1CQUFrQjtFQUNsQixhQUFZO0VBQ1osbUI1QnVLZ0U7RTRCdEtoRSxrQkFBaUI7RUM5TGpCLGdCQUFvRDtFQUNwRCxtQkFBdUQ7RUQrTHZELDhCQUE2QjtFQUM3Qix1QkFBc0I7RUFDdEIsOEJBQTZCO0VBQzdCLG1CNUI1RjZCLEU0QmtIOUI7RUEvQkQ7SUFjSSxXQUFVLEVBQ1g7RUFmSDtJQW1CSSxlQUFjO0lBQ2QsWUFBVztJQUNYLFlBQVc7SUFDWCxtQkFBa0IsRUFDbkI7RUF2Qkg7SUF5QkksZ0JBQWUsRUFDaEI7RUFFRDtJQTVCRjtNQTZCSSxjQUFhLEVBRWhCLEVBQUE7O0FBUUQ7RUFDRSxvQjVCa0lnRSxFNEJyRmpFO0VBOUNEO0lBSUksa0JBQW9CO0lBQ3BCLHFCQUFvQjtJQUNwQixrQjVCNUtrRSxFNEI2S25FO0VBRUQ7SUFURjtNQVlNLGlCQUFnQjtNQUNoQixZQUFXO01BQ1gsWUFBVztNQUNYLGNBQWE7TUFDYiw4QkFBNkI7TUFDN0IsVUFBUztNQUNULGlCQUFnQixFQVlqQjtNQTlCTDs7UUFxQlEsMkJBQTBCLEVBQzNCO01BdEJQO1FBd0JRLGtCNUI5TDhELEU0Qm1NL0Q7UUE3QlA7VUEyQlUsdUJBQXNCLEVBQ3ZCLEVBQUE7RUFNUDtJQWxDRjtNQW1DSSxZQUFXO01BQ1gsVUFBUyxFQVVaO01BOUNEO1FBdUNNLFlBQVcsRUFLWjtRQTVDTDtVQXlDUSxrQjVCMkZ5RTtVNEIxRnpFLHFCNUIwRnlFLEU0QnpGMUUsRUFBQTs7QUFXUDtFQUNFLG1CNUI0RWdFO0U0QjNFaEUsb0I1QjJFZ0U7RTRCMUVoRSxtQjVCMEVnRTtFNEJ6RWhFLGtDQUFpQztFQUNqQyxxQ0FBb0M7RTdCN041QixxRjZCOE5pRTtFQzdSekUsZ0JBQW9EO0VBQ3BELG1CQUF1RCxFRHlUeEQ7RWJzSEM7SUFFRTtNQUNFLHNCQUFxQjtNQUNyQixpQkFBZ0I7TUFDaEIsdUJBQXNCLEVBQ3ZCO0lBR0Q7TUFDRSxzQkFBcUI7TUFDckIsWUFBVztNQUNYLHVCQUFzQixFQUN2QjtJQUdEO01BQ0Usc0JBQXFCLEVBQ3RCO0lBRUQ7TUFDRSxzQkFBcUI7TUFDckIsdUJBQXNCLEVBT3ZCO01BTEM7OztRQUdFLFlBQVcsRUFDWjtJQUlIO01BQ0UsWUFBVyxFQUNaO0lBRUQ7TUFDRSxpQkFBZ0I7TUFDaEIsdUJBQXNCLEVBQ3ZCO0lBSUQ7O01BRUUsc0JBQXFCO01BQ3JCLGNBQWE7TUFDYixpQkFBZ0I7TUFDaEIsdUJBQXNCLEVBS3ZCO01BSEM7O1FBQ0UsZ0JBQWUsRUFDaEI7SUFFSDs7TUFFRSxtQkFBa0I7TUFDbEIsZUFBYyxFQUNmO0lBR0Q7TUFDRSxPQUFNLEVBQ1AsRUFBQTtFYTNNRDtJYjhJQTtNYTdJRSxtQkFBa0IsRUFNckI7TUFwQkg7UUFpQlEsaUJBQWdCLEVBQ2pCLEVBQUE7RUFRTDtJQTFCRjtNQTJCSSxZQUFXO01BQ1gsVUFBUztNQUNULGVBQWM7TUFDZCxnQkFBZTtNQUNmLGVBQWM7TUFDZCxrQkFBaUI7TTdCeFBYLGlCNkJ5UGtCLEVBRTNCLEVBQUE7O0FBTUQ7RUFDRSxjQUFhO0VIcFViLDJCR3FVNEI7RUhwVTNCLDBCR29VMkIsRUFDN0I7O0FBRUQ7RUFDRSxpQkFBZ0I7RUh6VWhCLDZCekIwRzZCO0V5QnpHNUIsNEJ6QnlHNEI7RXlCbEc3Qiw4QkdtVStCO0VIbFU5Qiw2QkdrVThCLEVBQ2hDOztBQU9EO0VDaFZFLGdCQUFvRDtFQUNwRCxtQkFBdUQsRUR3VnhEO0VBVEQ7SUNoVkUsaUJBQW9EO0lBQ3BELG9CQUF1RCxFRG9WdEQ7RUFMSDtJQ2hWRSxpQkFBb0Q7SUFDcEQsb0JBQXVELEVEdVZ0RDs7QUFRSDtFQ2hXRSxpQkFBb0Q7RUFDcEQsb0JBQXVELEVEdVd4RDtFQUxDO0lBSEY7TUFJSSxZQUFXO01BQ1gsa0I1QkQ4RDtNNEJFOUQsbUI1QkY4RCxFNEJJakUsRUFBQTs7QUFXRDtFQUNFO0lBQ0UsdUJBQXNCLEVBQ3ZCO0VBQ0Q7SUFDRSx3QkFBdUI7SUFDekIsb0I1QnJCZ0UsRTRCMEIvRDtJQVBEO01BS0ksZ0JBQWUsRUFDaEIsRUFBQTs7QUFTTDtFQUNFLDBCbkJwWXFCO0VtQnFZckIsc0JuQnJZcUIsRW1CcWdCdEI7RUFsSUQ7SUFLSSxnQ25CalhtQyxFbUJ1WHBDO0lBWEg7TUFRTSxZbkJsWGlDO01tQm1YakMsOEI1QnZCZ0QsRTRCd0JqRDtFQVZMO0lBY0ksWTVCNUNtQyxFNEI2Q3BDO0VBZkg7SUFtQk0sZ0NuQjlYaUMsRW1CcVlsQztJQTFCTDtNQXVCUSxZbkJoWStCO01tQmlZL0IsOEI1Qi9DOEMsRTRCZ0QvQztFQXpCUDtJQStCUSxZbkJ2WStCO0ltQndZL0IsOEJuQnZZbUMsRW1Cd1lwQztFQWpDUDtJQXVDUSxZNUIzRHVDO0k0QjREdkMsOEI1QjNEOEMsRTRCNEQvQztFQXpDUDtJQThDSSxtQjVCdkQyQyxFNEIrRDVDO0lBdERIO01BaURNLHVCNUI1RHlDLEU0QjZEMUM7SUFsREw7TUFvRE0sdUI1QjlEeUMsRTRCK0QxQztFQXJETDs7SUEwREksc0JuQjdibUIsRW1COGJwQjtFQTNESDtJQW9FUSw4Qm5CM2FtQztJbUI0YW5DLFluQjdhK0IsRW1COGFoQztFQUdIO0lBekVKO01BNkVVLGdDbkJ4YjZCLEVtQjhiOUI7TUFuRlQ7UUFnRlksWW5CemIyQjtRbUIwYjNCLDhCNUJ4RzBDLEU0QnlHM0M7SUFsRlg7TUF3RlksWW5CaGMyQjtNbUJpYzNCLDhCbkJoYytCLEVtQmljaEM7SUExRlg7TUFnR1ksWTVCcEhtQztNNEJxSG5DLDhCNUJwSDBDLEU0QnFIM0MsRUFBQTtFQWxHWDtJQThHSSxnQ25CemRtQyxFbUI2ZHBDO0lBbEhIO01BZ0hNLFluQnpkaUMsRW1CMGRsQztFQWpITDtJQXFISSxnQ25CaGVtQyxFbUI0ZXBDO0lBaklIO01Bd0hNLFluQmplaUMsRW1Ca2VsQztJQXpITDs7O01BOEhRLFk1QmxKdUMsRTRCbUp4Qzs7QUFPUDtFQUNFLHVCNUIxSThDO0U0QjJJOUMsc0I1QjFJeUUsRTRCMlExRTtFQW5JRDtJQUtJLGU1QjFJaUUsRTRCZ0psRTtJQVhIO01BUU0sWTVCbkkwQztNNEJvSTFDLDhCNUJuSWlELEU0Qm9JbEQ7RUFWTDtJQWNJLGU1QnhKaUUsRTRCeUpsRTtFQWZIO0lBbUJNLGU1QnhKK0QsRTRCK0poRTtJQTFCTDtNQXVCUSxZNUIzSndDO000QjRKeEMsOEI1QjNKK0MsRTRCNEpoRDtFQXpCUDtJQStCUSxZNUJuS3dDO0k0Qm9LeEMsMEI1QmpLbUUsRTRCa0twRTtFQWpDUDtJQXVDUSxZNUJ2S3dDO0k0QndLeEMsOEI1QnZLK0MsRTRCd0toRDtFQXpDUDtJQStDSSxtQjVCcEs0QyxFNEI0SzdDO0lBdkRIO01Ba0RNLHVCNUJ6SzBDLEU0QjBLM0M7SUFuREw7TUFxRE0sdUI1QjNLMEMsRTRCNEszQztFQXRETDs7SUEyREksc0JBQTRDLEVBQzdDO0VBNURIO0lBb0VRLDBCNUJyTW1FO0k0QnNNbkUsWTVCek13QyxFNEIwTXpDO0VBR0g7SUF6RUo7TUE2RVUsc0I1QnJOaUUsRTRCc05sRTtJQTlFVDtNQWdGVSwwQjVCeE5pRSxFNEJ5TmxFO0lBakZUO01BbUZVLGU1QnhOMkQsRTRCOE41RDtNQXpGVDtRQXNGWSxZNUIxTm9DO1E0QjJOcEMsOEI1QjFOMkMsRTRCMk41QztJQXhGWDtNQThGWSxZNUJsT29DO000Qm1PcEMsMEI1QmhPK0QsRTRCaU9oRTtJQWhHWDtNQXNHWSxZNUJ0T29DO000QnVPcEMsOEI1QnRPMkMsRTRCdU81QyxFQUFBO0VBeEdYO0lBK0dJLGU1QnBQaUUsRTRCd1BsRTtJQW5ISDtNQWlITSxZNUJyUDBDLEU0QnNQM0M7RUFsSEw7SUFzSEksZTVCM1BpRSxFNEJ1UWxFO0lBbElIO01BeUhNLFk1QjdQMEMsRTRCOFAzQztJQTFITDs7O01BK0hRLFk1Qi9Qd0MsRTRCZ1F6Qzs7QUFLUDtFQUNFLGdCQUFlO0VBQ2YsT0FBTTtFQUNOLFFBQU87RUFDUCxTQUFRO0VBQ1IsY0FBYTtFQUNiLGdCQUFlO0VBQ2YsV0FBVTtFQUNWLDRDQUFtQztVQUFuQyxvQ0FBbUM7RUFDbkMsNENBQXdDO0VBQ3hDLGlCQUFnQixFQTZEakI7RUEzRHVEO0lBWnhEO01BYUkscUNBQXFCO01BQ3JCLG1EQUEwQztjQUExQywyQ0FBMEMsRUF5RDdDLEVBQUE7RUF2RUQ7SUFrQkksMEJBQXlCO0lBQ3pCLFlBQVcsRUFNWjtJQXpCSDtNQXNCTSwwQ0FBcUM7TUFDckMsWUFBVyxFQUNaO0VBeEJMO0lBNkJJLHNDQUE0QjtZQUE1Qiw4QkFBNEIsRUFDN0I7RUE5Qkg7SUFpQ0ksaUNBQXdCO1lBQXhCLHlCQUF3QjtJQUN4QixnQ0FBdUI7WUFBdkIsd0JBQXVCLEVBWXhCOztBQVZDO0VBQ0U7SUFDRSxXQUFVO0lBQ1Ysd0NBQStCO1lBQS9CLGdDQUErQixFQUFBO0VBRWpDO0lBQ0UsV0FBVTtJQUNWLDRDQUFtQztZQUFuQyxvQ0FBbUMsRUFBQSxFQUFBOztBQVB2QztFQUNFO0lBQ0UsV0FBVTtJQUNWLHdDQUErQjtZQUEvQixnQ0FBK0IsRUFBQTtFQUVqQztJQUNFLFdBQVU7SUFDViw0Q0FBbUM7WUFBbkMsb0NBQW1DLEVBQUEsRUFBQTtFQTNDM0M7SUFpREksaUNBQXdCO1lBQXhCLHlCQUF3QjtJQUN4QixrQ0FBeUI7WUFBekIsMEJBQXlCO0lBQ3pCLHVFQUE4RDtZQUE5RCwrREFBOEQsRUFlL0Q7O0FBYkM7RUFDRTtJQUNFLFdBQVU7SUFDViw0Q0FBbUM7WUFBbkMsb0NBQW1DLEVBQUE7RUFFckM7SUFDRSxXQUFVLEVBQUE7RUFFWjtJQUNFLFdBQVU7SUFDVix3Q0FBK0I7WUFBL0IsZ0NBQStCLEVBQUEsRUFBQTs7QUFWbkM7RUFDRTtJQUNFLFdBQVU7SUFDViw0Q0FBbUM7WUFBbkMsb0NBQW1DLEVBQUE7RUFFckM7SUFDRSxXQUFVLEVBQUE7RUFFWjtJQUNFLFdBQVU7SUFDVix3Q0FBK0I7WUFBL0IsZ0NBQStCLEVBQUEsRUFBQTtFQUtyQztJQXBFRjtNQXFFSSxjQUFhLEVBRWhCLEVBQUE7O0FFeHRCRDtFQUNFLHNCQUFxQjtFQUNyQixnQkFBZTtFQUNmLGlCQUFnQjtFQUNoQixnQjlCMkNzRDtFOEIxQ3RELGtCOUJnd0JnQztFOEIvdkJoQyxZOUJxdkJnQztFOEJwdkJoQyxlOUIrdkI2QjtFOEI5dkI3Qix5QkFBd0I7RUFDeEIsb0JBQW1CO0VBQ25CLG1CQUFrQjtFQUNsQiwwQjlCSGlEO0U4QklqRCxvQjlCMnZCZ0MsRThCcHRCakM7RUFuREQ7SUFnQkksY0FBYSxFQUNkO0VBR0Q7SUFDRSxtQkFBa0I7SUFDbEIsVUFBUyxFQUNWO0VBRUQ7O0lBRUUsT0FBTTtJQUNOLGlCQUFnQixFQUNqQjtFQUtEOztJQUVFLGU5QnpCeUM7SThCMEJ6Qyx1QjlCOHRCOEIsRThCN3RCL0I7RUFFRDtJQUNFLGFBQVksRUFDYjtFQUVEO0lBQ0Usa0JBQWlCLEVBQ2xCO0VBRUQ7SUFDRSxpQkFBZ0IsRUFDakI7O0FBSUg7RUFHSSxZOUJvc0I4QjtFOEJuc0I5QixzQkFBcUI7RUFDckIsZ0JBQWUsRUFDaEI7O0FDeERIO0VBQ0UsaUJBQWdCLEVBQ2pCOztBQUdEO0VBQ0UsY0FBYTtFQUNiLGlCQUFnQjtFQUNoQixnQkFBZTtFQUNmLE9BQU07RUFDTixTQUFRO0VBQ1IsVUFBUztFQUNULFFBQU87RUFDUCxjL0I4UDZCO0UrQjdQN0Isa0NBQWlDO0VBSWpDLFdBQVUsRUFRWDtFQXJCRDtJaEMwSEUsc0NBQW9DO0lBRzVCLDhCQUE0QjtJQXFFNUIsNENnQ2hMcUM7SWhDZ0xyQyxvQ2dDaExxQztJaENnTHJDLHFFZ0NoTHFDLEVBQzVDO0VBbkJIO0loQzBIRSxtQ0FBb0M7SUFHNUIsMkJBQTRCLEVnQ3pHWTs7QUFFbEQ7RUFDRSxtQkFBa0I7RUFDbEIsaUJBQWdCLEVBQ2pCOztBQUdEO0VBQ0UsbUJBQWtCO0VBQ2xCLFlBQVc7RUFDWCxhQUFZLEVBQ2I7O0FBR0Q7RUFDRSxtQkFBa0I7RUFDbEIsdUIvQmlpQmlEO0UrQmhpQmpELHVCL0JvaUJpRDtFK0JuaUJqRCxxQy9CaWlCMkQ7RStCaGlCM0QsbUIvQnVENkI7RUR6Q3JCLHlDZ0Nib0M7RUFDNUMsNkJBQTRCO0VBRTVCLFdBQVUsRUFDWDs7QUFHRDtFQUNFLGdCQUFlO0VBQ2YsT0FBTTtFQUNOLFNBQVE7RUFDUixVQUFTO0VBQ1QsUUFBTztFQUNQLGMvQitNNkI7RStCOU03Qix1Qi9Cc2hCZ0MsRStCbGhCakM7RUFYRDtJWjVERSxXWXFFMkI7SVpsRTNCLHlCQUFrQyxFWWtFRjtFQVRsQztJWjVERSxhbkIybEI4QjtJbUJ4bEI5QiwwQkFBa0MsRVltRWtCOztBQUt0RDtFQUNFLGMvQmlnQmdDO0UrQmhnQmhDLGlDL0JnaEJtQztFK0IvZ0JuQywyQkFBNkQsRUFDOUQ7O0FBRUQ7RUFDRSxpQkFBZ0IsRUFDakI7O0FBR0Q7RUFDRSxVQUFTO0VBQ1QseUIvQjVCbUMsRStCNkJwQzs7QUFJRDtFQUNFLG1CQUFrQjtFQUNsQixjL0IyZWdDLEUrQjFlakM7O0FBR0Q7RUFDRSxjL0JzZWdDO0UrQnJlaEMsa0JBQWlCO0VBQ2pCLDhCL0J1Zm1DLEUrQnZlcEM7RXpCNUdDO0lBRUUsYUFBWTtJQUNaLGVBQWMsRUFDZjtFQUNEO0lBQ0UsWUFBVyxFQUNaO0V5QmtGSDtJQVFJLGlCQUFnQjtJQUNoQixpQkFBZ0IsRUFDakI7RUFWSDtJQWFJLGtCQUFpQixFQUNsQjtFQWRIO0lBaUJJLGVBQWMsRUFDZjs7QUFJSDtFQUNFLG1CQUFrQjtFQUNsQixhQUFZO0VBQ1osWUFBVztFQUNYLGFBQVk7RUFDWixpQkFBZ0IsRUFDakI7O0FBR0Q7RUExRkE7SUE2RkksYS9CNmQrQjtJK0I1ZC9CLGtCQUFpQixFQUNsQjtFQXhGSDtJaENtQlUsMENnQ3VFdUMsRUFDOUM7RUFHRDtJQUFZLGEvQnNkcUIsRStCdGRELEVBQUE7O0FBR2xDO0VBQ0U7SUFBWSxhL0JnZHFCLEUrQmhkRCxFQUFBOztBQzlJbEM7RUFDRSxtQkFBa0I7RUFDbEIsY2hDMFE2QjtFZ0N6UTdCLGVBQWM7RUFFZCw0RGhDa0NzRTtFZ0NqQ3RFLGdCaEN5Q3NEO0VnQ3hDdEQsb0JBQW1CO0VBQ25CLGlCQUFnQjtFYlhoQixXYVlrQjtFYlRsQix5QkFBa0MsRWFnQm5DO0VBaEJEO0liSEUsYW5CeWdCOEI7SW1CdGdCOUIsMEJBQWtDLEVhV2U7RUFYbkQ7SUFZYSxpQkFBaUI7SUFBRSxlQUErQixFQUFJO0VBWm5FO0lBYWEsaUJBQWlCO0lBQUUsZWhDNGZDLEVnQzVma0M7RUFibkU7SUFjYSxnQkFBaUI7SUFBRSxlQUErQixFQUFJO0VBZG5FO0lBZWEsa0JBQWlCO0lBQUUsZWhDMGZDLEVnQzFma0M7O0FBSW5FO0VBQ0UsaUJoQzZlaUM7RWdDNWVqQyxpQkFBZ0I7RUFDaEIsWWhDNmVnQztFZ0M1ZWhDLG1CQUFrQjtFQUNsQixzQkFBcUI7RUFDckIsdUJoQzRlZ0M7RWdDM2VoQyxtQmhDNkU2QixFZ0M1RTlCOztBQUdEO0VBQ0UsbUJBQWtCO0VBQ2xCLFNBQVE7RUFDUixVQUFTO0VBQ1QsMEJBQXlCO0VBQ3pCLG9CQUFtQixFQUNwQjs7QUFFRDtFQUVJLFVBQVM7RUFDVCxVQUFTO0VBQ1Qsa0JoQytkNkI7RWdDOWQ3Qix3QkFBeUQ7RUFDekQsdUJoQ3lkOEIsRWdDeGQvQjs7QUFQSDtFQVNJLFVBQVM7RUFDVCxXaEN5ZDZCO0VnQ3hkN0Isb0JoQ3dkNkI7RWdDdmQ3Qix3QkFBeUQ7RUFDekQsdUJoQ2tkOEIsRWdDamQvQjs7QUFkSDtFQWdCSSxVQUFTO0VBQ1QsVWhDa2Q2QjtFZ0NqZDdCLG9CaENpZDZCO0VnQ2hkN0Isd0JBQXlEO0VBQ3pELHVCaEMyYzhCLEVnQzFjL0I7O0FBckJIO0VBdUJJLFNBQVE7RUFDUixRQUFPO0VBQ1AsaUJoQzBjNkI7RWdDemM3Qiw0QkFBOEU7RUFDOUUseUJoQ29jOEIsRWdDbmMvQjs7QUE1Qkg7RUE4QkksU0FBUTtFQUNSLFNBQVE7RUFDUixpQmhDbWM2QjtFZ0NsYzdCLDRCaENrYzZCO0VnQ2pjN0Isd0JoQzZiOEIsRWdDNWIvQjs7QUFuQ0g7RUFxQ0ksT0FBTTtFQUNOLFVBQVM7RUFDVCxrQmhDNGI2QjtFZ0MzYjdCLHdCaEMyYjZCO0VnQzFiN0IsMEJoQ3NiOEIsRWdDcmIvQjs7QUExQ0g7RUE0Q0ksT0FBTTtFQUNOLFdoQ3NiNkI7RWdDcmI3QixpQmhDcWI2QjtFZ0NwYjdCLHdCaENvYjZCO0VnQ25iN0IsMEJoQythOEIsRWdDOWEvQjs7QUFqREg7RUFtREksT0FBTTtFQUNOLFVoQythNkI7RWdDOWE3QixpQmhDOGE2QjtFZ0M3YTdCLHdCaEM2YTZCO0VnQzVhN0IsMEJoQ3dhOEIsRWdDdmEvQjs7QTFCdkZEO0VBRUUsYUFBWTtFQUNaLGVBQWMsRUFDZjs7QUFDRDtFQUNFLFlBQVcsRUFDWjs7QTJCVEg7RUNSRSxlQUFjO0VBQ2Qsa0JBQWlCO0VBQ2pCLG1CQUFrQixFRFFuQjs7QUFDRDtFQUNFLHdCQUF1QixFQUN4Qjs7QUFDRDtFQUNFLHVCQUFzQixFQUN2Qjs7QUFPRDtFQUNFLHlCQUF3QixFQUN6Qjs7QUFDRDtFQUNFLDBCQUF5QixFQUMxQjs7QUFDRDtFQUNFLG1CQUFrQixFQUNuQjs7QUFDRDtFRXpCRSxZQUFXO0VBQ1gsbUJBQWtCO0VBQ2xCLGtCQUFpQjtFQUNqQiw4QkFBNkI7RUFDN0IsVUFBUyxFRnVCVjs7QUFPRDtFQUNFLHlCQUF3QixFQUN6Qjs7QUFNRDtFQUNFLGdCQUFlLEVBQ2hCOztBR2xDRDtFQUNFLG9CQUFtQixFQUFBOztBQ0puQjtFQUNFLHlCQUF3QixFQUN6Qjs7QUFGRDtFQUNFLHlCQUF3QixFQUN6Qjs7QUFGRDtFQUNFLHlCQUF3QixFQUN6Qjs7QUFGRDtFQUNFLHlCQUF3QixFQUN6Qjs7QURjSDs7Ozs7Ozs7Ozs7O0VBWUUseUJBQXdCLEVBQ3pCOztBQUVEO0VDL0JFO0lBVkUsMEJBQXlCLEVBQzFCO0VBQ0Q7SUFBbUIsZUFBYyxFQUFJO0VBQ3JDO0lBQW1CLDhCQUE2QixFQUFJO0VBQ3BEOztJQUNtQiwrQkFBOEIsRUFBSSxFQUFBOztBRHdDckQ7RUFERjtJQUVJLDBCQUF5QixFQUU1QixFQUFBOztBQUVDO0VBREY7SUFFSSwyQkFBMEIsRUFFN0IsRUFBQTs7QUFFQztFQURGO0lBRUksaUNBQWdDLEVBRW5DLEVBQUE7O0FBRUQ7RUNsREU7SUFWRSwwQkFBeUIsRUFDMUI7RUFDRDtJQUFtQixlQUFjLEVBQUk7RUFDckM7SUFBbUIsOEJBQTZCLEVBQUk7RUFDcEQ7O0lBQ21CLCtCQUE4QixFQUFJLEVBQUE7O0FEMkRyRDtFQURGO0lBRUksMEJBQXlCLEVBRTVCLEVBQUE7O0FBRUM7RUFERjtJQUVJLDJCQUEwQixFQUU3QixFQUFBOztBQUVDO0VBREY7SUFFSSxpQ0FBZ0MsRUFFbkMsRUFBQTs7QUFFRDtFQ3JFRTtJQVZFLDBCQUF5QixFQUMxQjtFQUNEO0lBQW1CLGVBQWMsRUFBSTtFQUNyQztJQUFtQiw4QkFBNkIsRUFBSTtFQUNwRDs7SUFDbUIsK0JBQThCLEVBQUksRUFBQTs7QUQ4RXJEO0VBREY7SUFFSSwwQkFBeUIsRUFFNUIsRUFBQTs7QUFFQztFQURGO0lBRUksMkJBQTBCLEVBRTdCLEVBQUE7O0FBRUM7RUFERjtJQUVJLGlDQUFnQyxFQUVuQyxFQUFBOztBQUVEO0VDeEZFO0lBVkUsMEJBQXlCLEVBQzFCO0VBQ0Q7SUFBbUIsZUFBYyxFQUFJO0VBQ3JDO0lBQW1CLDhCQUE2QixFQUFJO0VBQ3BEOztJQUNtQiwrQkFBOEIsRUFBSSxFQUFBOztBRGlHckQ7RUFERjtJQUVJLDBCQUF5QixFQUU1QixFQUFBOztBQUVDO0VBREY7SUFFSSwyQkFBMEIsRUFFN0IsRUFBQTs7QUFFQztFQURGO0lBRUksaUNBQWdDLEVBRW5DLEVBQUE7O0FBRUQ7RUMzR0U7SUFDRSx5QkFBd0IsRUFDekIsRUFBQTs7QUQ2R0g7RUMvR0U7SUFDRSx5QkFBd0IsRUFDekIsRUFBQTs7QURpSEg7RUNuSEU7SUFDRSx5QkFBd0IsRUFDekIsRUFBQTs7QURxSEg7RUN2SEU7SUFDRSx5QkFBd0IsRUFDekIsRUFBQTs7QUFGRDtFQUNFLHlCQUF3QixFQUN6Qjs7QURrSUg7RUNwSUU7SUFWRSwwQkFBeUIsRUFDMUI7RUFDRDtJQUFtQixlQUFjLEVBQUk7RUFDckM7SUFBbUIsOEJBQTZCLEVBQUk7RUFDcEQ7O0lBQ21CLCtCQUE4QixFQUFJLEVBQUE7O0FENEl2RDtFQUNFLHlCQUF3QixFQUt6QjtFQUhDO0lBSEY7TUFJSSwwQkFBeUIsRUFFNUIsRUFBQTs7QUFDRDtFQUNFLHlCQUF3QixFQUt6QjtFQUhDO0lBSEY7TUFJSSwyQkFBMEIsRUFFN0IsRUFBQTs7QUFDRDtFQUNFLHlCQUF3QixFQUt6QjtFQUhDO0lBSEY7TUFJSSxpQ0FBZ0MsRUFFbkMsRUFBQTs7QUFFRDtFQzdKRTtJQUNFLHlCQUF3QixFQUN6QixFQUFBOztBQ25CSDtFQUFjLG9CQUFtQixFQUFJOztBQUNyQztFQUFnQixlQUFjO0VBQUUsbUJBQW1CLEVBQUU7O0FBQUEsYUFBYTtBQUNsRTtFQUFrQixlQUFjO0VBQUUsMEJBQTBCLEVBQUU7O0FBQUEsV0FBVztBQUN6RTtFQUFnQixrQkFBa0IsRUFBRTs7QUFBQSxhQUFhO0FBQ2pEO0VBQWdCLGtCQUFrQixFQUFFOztBQUFBLGNBQWM7QUFDbEQ7RUFBaUIsZUFBYztFQUFFLG1CQUFtQixFQUFFOztBQUFBLHVCQUF1QjtBQUM3RTtFQUFpQixlQUFjO0VBQUUsa0JBQWtCLEVBQUU7O0FBQUEscUJBQXFCO0FBQzFFO0VBQWlCLGVBQWM7RUFBRSxtQkFBbUIsRUFBRTs7QUFBQSxvQkFBb0I7QUFDMUU7RUFBaUIsZUFBYztFQUFFLGtCQUFpQjtFQUFFLG1CQUFtQixFQUFFOztBQUFBLHFCQUFxQjtBQUM5RjtFQUFpQixlQUFjO0VBQUUsMEJBQTBCLEVBQUU7O0FBQUEscUJBQXFCO0FBQ2xGO0VBQW9CLGVBQWM7RUFBRSwwQkFBMEIsRUFBRTs7QUFBQSw4QkFBOEI7QUFDOUY7RUFBaUIsbUJBQW1CLEVBQUU7O0FBQUEsa0JBQWtCO0FBQ3hEO0VBQWlCLGVBQWUsRUFBRTs7QUFBQSxtQkFBbUI7QUFDckQ7RUFBaUIsZUFBZSxFQUFFOztBQUFBLHFCQUFxQjtBQUN2RDtFQUFpQixlQUFjO0VBQUUsMEJBQTBCLEVBQUU7O0FBQUEsc0JBQXNCO0FBQ25GO0VBQW9CLGVBQWM7RUFBRSwwQkFBMEIsRUFBRTs7QUFBQSwrQkFBK0I7QUFDL0Y7RUFBaUIsZUFBZSxFQUFFOztBQUFBLG9CQUFvQjtBQUN0RDtFQUFpQixlQUFlLEVBQUU7O0FBQUEsb0JBQW9CO0FBQ3REO0VBQWlCLGtCQUFrQixFQUFFOztBQUFBLG9CQUFvQjtBQUN6RDtFQUFpQixlQUFlLEVBQUU7O0FBQUEsd0JBQXdCO0FBQzFEO0VBQWlCLGVBQWUsRUFBRTs7QUFBQSx1QkFBdUI7QUFDekQ7RUFBaUIsa0JBQWtCLEVBQUU7O0FBQUEsc0JBQXNCO0FBQzNEO0VBQWlCLGtCQUFrQixFQUFFOztBQUFBLHlCQUF5QjtBQUM5RDtFQUFpQixrQkFBa0IsRUFBRTs7QUFBQSxvQkFBb0I7QUFDekQ7RUFBaUIsa0JBQWtCLEVBQUU7O0FBQUEsc0JBQXNCO0FBQzNEO0VBQWlCLGVBQWM7RUFBRSxrQkFBa0IsRUFBRTs7QUFBQSxrQkFBa0I7QUFDdkU7RUFBZ0IsZUFBZSxFQUFFOztBQUFBLG9CQUFvQjtBQUNyRDtFQUFnQixZQUFZLEVBQUU7O0FBQUEsb0JBQW9CO0FBQ2xEO0VBQWlCLGVBQWUsRUFBRTs7QUFBQSxvQkFBb0I7QUFDdEQ7RUFBaUIsZUFBZSxFQUFFOztBQUFBLGtCQUFrQjtBQUNwRDtFQUFpQixlQUFjO0VBQUUsa0JBQWtCLEVBQUU7O0FBQUEsZ0JBQWdCO0FBQ3JFO0VBQWlCLGVBQWUsRUFBRTs7QUFBQSxtQkFBbUI7QUFDckQ7RUFBaUIsZUFBZSxFQUFFOztBQUFBLGlCQUFpQjtBQUNuRDtFQUFpQixlQUFjO0VBQUUsa0JBQWtCLEVBQUU7O0FBQUEsb0JBQW9CO0FBQ3pFO0VBQWlCLGVBQWM7RUFBRSxrQkFBa0IsRUFBRTs7QUFBQSxtQkFBbUI7QUFDeEU7RUFBaUIsZUFBZSxFQUFFOztBQUFBLG9CQUFvQjtBQUN0RDtFQUFpQixlQUFlLEVBQUU7O0FBQUEsY0FBYztBQUNoRDtFQUFpQixlQUFlLEVBQUU7O0FBQUEsbUJBQW1CO0FBQ3JEO0VBQWlCLGtCQUFrQixFQUFFOztBQUFBLG1CQUFtQjtBQUN4RDtFQUFnQixlQUFlLEVBQUU7O0FBQUEscUJBQXFCO0FBQ3REO0VBQWlCLGVBQWUsRUFBRTs7QUFBQSwwQkFBMEI7QUFDNUQ7RUFBaUIsZUFBZSxFQUFFOztBQUFBLHdCQUF3QjtBQUMxRDtFQUFpQixlQUFlLEVBQUU7O0FBQUEsNEJBQTRCO0FBQzlEO0VBQWlCLGVBQWUsRUFBRTs7QUFBQSx3QkFBd0I7QUFDMUQ7RUFBaUIsWUFBWSxFQUFFOztBQUFBLDZCQUE2QjtBQUM1RDtFQUFpQixZQUFZLEVBQUU7O0FBQUEseUJBQXlCO0FBQ3hEO0VBQWlCLFlBQVksRUFBRTs7QUFBQSx3QkFBd0I7QUFDdkQ7RUFBaUIsWUFBWSxFQUFFOztBQUFBLDJCQUEyQjtBQUMxRDtFQUFpQixZQUFZLEVBQUU7O0FBQUEsMkJBQTJCO0FBQzFEO0VBQWlCLFlBQVksRUFBRTs7QUFBQSw0QkFBNEI7QUFDM0Q7RUFBaUIsWUFBWSxFQUFFOztBQUFBLDZCQUE2QjtBQUM1RDtFQUFpQixZQUFZLEVBQUU7O0FBQUEsMEJBQTBCO0FBQ3pEO0VBQWlCLGVBQWUsRUFBRTs7QUFBQSwwQkFBMEI7QUFDNUQ7RUFBaUIsWUFBWSxFQUFFOztBQUFBLDJCQUEyQjtBQUMxRDtFQUFpQixlQUFlLEVBQUU7O0FBQUEsMkJBQTJCO0FBQzdEO0VBQWlCLGVBQWUsRUFBRTs7QUFBQSx5QkFBeUI7QUFDM0Q7RUFBaUIsZUFBZSxFQUFFOztBQUFBLHlCQUF5QjtBQUMzRDtFQUFpQixlQUFlLEVBQUU7O0FBQUEsMEJBQTBCO0FBQzVEO0VBQWlCLGVBQWUsRUFBRTs7QUFBQSw0QkFBNEI7QUFDOUQ7RUFBaUIsZUFBZSxFQUFFOztBQUFBLGlDQUFpQztBM0NpS25FO0U0QzNORSx3QkFBdUIsRUFDeEI7O0FBRUQ7RUFDRSxlQUFjO0VBQ2QsZUFBYztFQUNkLG9CQUFtQjtFQUNuQixpQkFBZ0I7RUFDaEIsa0JBQWlCO0VBQ2pCLGlCQUFnQjtFQUNoQixlQUFjLEVBQ2Y7O0FBS0Q7Ozs7RUFJRSxlQUFjO0VBQ2QsbUJBQWtCLEVBQ25COztBQUtEOzs7Ozs7Ozs7Ozs7RUFZRSxlQUFjO0VBQ2Qsa0JBQWlCLEVBQ2xCOztBQUVEOztFQUVFLFlBQVcsRUFDWjs7QUFLRDs7Ozs7Ozs7O0VBU0UsZUFBYyxFQUNmOztBQUVEOzs7Ozs7Ozs7Ozs7Ozs7OztFQWlCRSxlQUFjLEVBQ2Y7O0FBRUQ7Ozs7Ozs7Ozs7Ozs7OztFQWVFLGVBQWMsRUFDZjs7QUFFRDs7OztFQUlFLFlBQVcsRUFDWjs7QUFFRDs7RUFFRSxlQUFjLEVBQ2Y7O0FBRUQ7RUFDRSxlQUFjO0VBQ2Qsa0JBQWlCLEVBQ2xCOztBQUVEO0VBQ0UsZUFBYyxFQUNmOztBQUVEOzs7RUFHRSxlQUFjLEVBQ2Y7O0FBRUQ7OztFQUdFLFlBQVcsRUFDWjs7QUFFRDtFQUNFLHVCQUFzQjtFQUN0QixtQkFBa0IsRUFDbkI7O0FBRUQ7O0VBRUUsZUFBYztFQUNkLGtCQUFpQixFQUNsQjs7QUFFRDtFQUNFLDBCQUF5QixFQUMxQjs7QUFFRDtFQUNFLDBCQUF5QixFQUMxQjs7QUFFRDtFQUNFLDBCQUF5QixFQUMxQjs7QUFFRDtFQUNFLGtCQUFpQixFQUNsQjs7QUNoS0Q7Ozs7OztFQU1FLDZEL0JOZ0U7RStCT2hFLHdCQUF1QixFQUN4Qjs7QTdDZ0ZEO0U2QzdFRSxzQkFBcUIsRUFLdEI7RUFORDtJQUlJLHNCQUFxQixFQUN0Qjs7QUFHSDtFQUVJLGdCQUFlO0VBQ2YsaUJBQWdCO0VBQ2hCLGUvQkRtQixFK0JVcEI7RUFiSDtJQU9NLGlCQUFnQixFQUNqQjtFQVJMO0lBV00sZS9CUmlCLEUrQlNsQjs7QUFaTDtFQWdCSSxnQkFBZSxFQUNoQjs7QUFqQkg7RUFvQkksZ0JBQWUsRUFDaEI7O0FBR0g7RUFDRSxZQUFXO0VBQ1gsZ0JBQWUsRUFDaEI7O0FDN0NEO0VBQ0U7SUFBSyxXQUFVLEVBQUE7RUFDZjtJQUFPLFdBQVUsRUFBQSxFQUFBOztBQUZuQjtFQUNFO0lBQUssV0FBVSxFQUFBO0VBQ2Y7SUFBTyxXQUFVLEVBQUEsRUFBQTs7QUFHbkI7RUFDRTtJQUFnQixXQUFVLEVBQUE7RUFDMUI7SUFBVyxXQUFVLEVBQUEsRUFBQTs7QUFGdkI7RUFDRTtJQUFnQixXQUFVLEVBQUE7RUFDMUI7SUFBVyxXQUFVLEVBQUEsRUFBQTs7QUFHdkI7RUFDRTtJQUNFLFdBQVU7SUFDVix3REFBNkM7WUFBN0MsZ0RBQTZDLEVBQUE7RUFHL0M7SUFDRSxZQUFXO0lBQ1gscURBQTBDO1lBQTFDLDZDQUEwQyxFQUFBLEVBQUE7O0FBUjlDO0VBQ0U7SUFDRSxXQUFVO0lBQ1Ysd0RBQTZDO1lBQTdDLGdEQUE2QyxFQUFBO0VBRy9DO0lBQ0UsWUFBVztJQUNYLHFEQUEwQztZQUExQyw2Q0FBMEMsRUFBQSxFQUFBOztBQUk5QztFQUNFO0lBQ0UsV0FBVTtJQUNWLG9DQUEyQjtZQUEzQiw0QkFBMkIsRUFBQTtFQUc3QjtJQUFNLFdBQVUsRUFBQTtFQUVoQjtJQUNFLFdBQVU7SUFDVixpQ0FBd0I7WUFBeEIseUJBQXdCLEVBQUEsRUFBQTs7QUFWNUI7RUFDRTtJQUNFLFdBQVU7SUFDVixvQ0FBMkI7WUFBM0IsNEJBQTJCLEVBQUE7RUFHN0I7SUFBTSxXQUFVLEVBQUE7RUFFaEI7SUFDRSxXQUFVO0lBQ1YsaUNBQXdCO1lBQXhCLHlCQUF3QixFQUFBLEVBQUE7O0FBSTVCO0VBQ0U7SUFDRSxXQUFVO0lBQ1YscUNBQTRCO1lBQTVCLDZCQUE0QixFQUFBO0VBRzlCO0lBQU0sV0FBVSxFQUFBO0VBRWhCO0lBQ0UsV0FBVTtJQUNWLGlDQUF3QjtZQUF4Qix5QkFBd0IsRUFBQSxFQUFBOztBQVY1QjtFQUNFO0lBQ0UsV0FBVTtJQUNWLHFDQUE0QjtZQUE1Qiw2QkFBNEIsRUFBQTtFQUc5QjtJQUFNLFdBQVUsRUFBQTtFQUVoQjtJQUNFLFdBQVU7SUFDVixpQ0FBd0I7WUFBeEIseUJBQXdCLEVBQUEsRUFBQTs7QUFJNUI7RUFDRTtJQUFLLFdBQVUsRUFBQTtFQUNmO0lBQU8sV0FBVSxFQUFBLEVBQUE7O0FBRm5CO0VBQ0U7SUFBSyxXQUFVLEVBQUE7RUFDZjtJQUFPLFdBQVUsRUFBQSxFQUFBOztBQUduQjtFQUNFO0lBQ0UsV0FBVTtJQUNWLGlDQUF3QjtZQUF4Qix5QkFBd0IsRUFBQTtFQUcxQjtJQUNFLFdBQVU7SUFDVixxQ0FBNEI7WUFBNUIsNkJBQTRCLEVBQUEsRUFBQTs7QUFSaEM7RUFDRTtJQUNFLFdBQVU7SUFDVixpQ0FBd0I7WUFBeEIseUJBQXdCLEVBQUE7RUFHMUI7SUFDRSxXQUFVO0lBQ1YscUNBQTRCO1lBQTVCLDZCQUE0QixFQUFBLEVBQUE7O0FBSWhDO0VBQ0U7SUFBSyxvQ0FBMkI7WUFBM0IsNEJBQTJCLEVBQUE7RUFDaEM7SUFBTSwwQ0FBaUM7WUFBakMsa0NBQWlDLEVBQUE7RUFDdkM7SUFBTyxvQ0FBMkI7WUFBM0IsNEJBQTJCLEVBQUEsRUFBQTs7QUFIcEM7RUFDRTtJQUFLLG9DQUEyQjtZQUEzQiw0QkFBMkIsRUFBQTtFQUNoQztJQUFNLDBDQUFpQztZQUFqQyxrQ0FBaUMsRUFBQTtFQUN2QztJQUFPLG9DQUEyQjtZQUEzQiw0QkFBMkIsRUFBQSxFQUFBOztBQUdwQztFQUNFO0lBQUssbUNBQTBCO1lBQTFCLDJCQUEwQixFQUFBO0VBQy9CO0lBQU8saUNBQXdCO1lBQXhCLHlCQUF3QixFQUFBLEVBQUE7O0FBRmpDO0VBQ0U7SUFBSyxtQ0FBMEI7WUFBMUIsMkJBQTBCLEVBQUE7RUFDL0I7SUFBTyxpQ0FBd0I7WUFBeEIseUJBQXdCLEVBQUEsRUFBQTs7QUFHakM7RUFDRTtJQUFJLHdDQUErQjtZQUEvQixnQ0FBK0IsRUFBQTtFQUNuQztJQUFLLDJDQUFrQztZQUFsQyxtQ0FBa0MsRUFBQTtFQUN2QztJQUFNLHFDQUE0QjtZQUE1Qiw2QkFBNEIsRUFBQSxFQUFBOztBQUhwQztFQUNFO0lBQUksd0NBQStCO1lBQS9CLGdDQUErQixFQUFBO0VBQ25DO0lBQUssMkNBQWtDO1lBQWxDLG1DQUFrQyxFQUFBO0VBQ3ZDO0lBQU0scUNBQTRCO1lBQTVCLDZCQUE0QixFQUFBLEVBQUE7O0FBR3BDO0VBQ0U7SUFBSSx3Q0FBK0I7WUFBL0IsZ0NBQStCLEVBQUE7RUFDbkM7SUFBSyw0Q0FBbUM7WUFBbkMsb0NBQW1DLEVBQUE7RUFDeEM7SUFBTSxxQ0FBNEI7WUFBNUIsNkJBQTRCLEVBQUEsRUFBQTs7QUFIcEM7RUFDRTtJQUFJLHdDQUErQjtZQUEvQixnQ0FBK0IsRUFBQTtFQUNuQztJQUFLLDRDQUFtQztZQUFuQyxvQ0FBbUMsRUFBQTtFQUN4QztJQUFNLHFDQUE0QjtZQUE1Qiw2QkFBNEIsRUFBQSxFQUFBOztBQUdwQztFQUNFO0lBQUksd0NBQStCO1lBQS9CLGdDQUErQixFQUFBO0VBQ25DO0lBQUssMkNBQWtDO1lBQWxDLG1DQUFrQyxFQUFBO0VBQ3ZDO0lBQU0scUNBQTRCO1lBQTVCLDZCQUE0QixFQUFBLEVBQUE7O0FBSHBDO0VBQ0U7SUFBSSx3Q0FBK0I7WUFBL0IsZ0NBQStCLEVBQUE7RUFDbkM7SUFBSywyQ0FBa0M7WUFBbEMsbUNBQWtDLEVBQUE7RUFDdkM7SUFBTSxxQ0FBNEI7WUFBNUIsNkJBQTRCLEVBQUEsRUFBQTs7QUFHcEM7RUFDRTtJQUFJLGdDQUF1QjtZQUF2Qix3QkFBdUIsRUFBQTtFQUMzQjtJQUFLLGlDQUF3QjtZQUF4Qix5QkFBd0IsRUFBQTtFQUM3QjtJQUFLLGdDQUF1QjtZQUF2Qix3QkFBdUIsRUFBQTtFQUM1QjtJQUFLLGdDQUF1QjtZQUF2Qix3QkFBdUIsRUFBQTtFQUM1QjtJQUFLLGlDQUF3QjtZQUF4Qix5QkFBd0IsRUFBQTtFQUM3QjtJQUFLLGdDQUF1QjtZQUF2Qix3QkFBdUIsRUFBQTtFQUM1QjtJQUFLLGlDQUF3QjtZQUF4Qix5QkFBd0IsRUFBQTtFQUM3QjtJQUFLLGdDQUF1QjtZQUF2Qix3QkFBdUIsRUFBQTtFQUM1QjtJQUFNLGdDQUF1QjtZQUF2Qix3QkFBdUIsRUFBQSxFQUFBOztBQVQvQjtFQUNFO0lBQUksZ0NBQXVCO1lBQXZCLHdCQUF1QixFQUFBO0VBQzNCO0lBQUssaUNBQXdCO1lBQXhCLHlCQUF3QixFQUFBO0VBQzdCO0lBQUssZ0NBQXVCO1lBQXZCLHdCQUF1QixFQUFBO0VBQzVCO0lBQUssZ0NBQXVCO1lBQXZCLHdCQUF1QixFQUFBO0VBQzVCO0lBQUssaUNBQXdCO1lBQXhCLHlCQUF3QixFQUFBO0VBQzdCO0lBQUssZ0NBQXVCO1lBQXZCLHdCQUF1QixFQUFBO0VBQzVCO0lBQUssaUNBQXdCO1lBQXhCLHlCQUF3QixFQUFBO0VBQzdCO0lBQUssZ0NBQXVCO1lBQXZCLHdCQUF1QixFQUFBO0VBQzVCO0lBQU0sZ0NBQXVCO1lBQXZCLHdCQUF1QixFQUFBLEVBQUE7O0FBRy9CO0VBQ0U7SUFBSSw0Q0FBbUM7WUFBbkMsb0NBQW1DLEVBQUE7RUFDdkM7SUFBSyxnREFBdUM7WUFBdkMsd0NBQXVDLEVBQUE7RUFDNUM7SUFBSywrQ0FBc0M7WUFBdEMsdUNBQXNDLEVBQUE7RUFDM0M7SUFBSyxpREFBd0M7WUFBeEMseUNBQXdDLEVBQUE7RUFDN0M7SUFBSywrQ0FBc0M7WUFBdEMsdUNBQXNDLEVBQUE7RUFDM0M7SUFBSywrQ0FBc0M7WUFBdEMsdUNBQXNDLEVBQUE7RUFDM0M7SUFBSywrQ0FBc0M7WUFBdEMsdUNBQXNDLEVBQUE7RUFDM0M7SUFBSyxnREFBdUM7WUFBdkMsd0NBQXVDLEVBQUE7RUFDNUM7SUFBSywrQ0FBc0M7WUFBdEMsdUNBQXNDLEVBQUE7RUFDM0M7SUFBSyxpREFBd0M7WUFBeEMseUNBQXdDLEVBQUE7RUFDN0M7SUFBTSw0Q0FBbUM7WUFBbkMsb0NBQW1DLEVBQUEsRUFBQTs7QUFYM0M7RUFDRTtJQUFJLDRDQUFtQztZQUFuQyxvQ0FBbUMsRUFBQTtFQUN2QztJQUFLLGdEQUF1QztZQUF2Qyx3Q0FBdUMsRUFBQTtFQUM1QztJQUFLLCtDQUFzQztZQUF0Qyx1Q0FBc0MsRUFBQTtFQUMzQztJQUFLLGlEQUF3QztZQUF4Qyx5Q0FBd0MsRUFBQTtFQUM3QztJQUFLLCtDQUFzQztZQUF0Qyx1Q0FBc0MsRUFBQTtFQUMzQztJQUFLLCtDQUFzQztZQUF0Qyx1Q0FBc0MsRUFBQTtFQUMzQztJQUFLLCtDQUFzQztZQUF0Qyx1Q0FBc0MsRUFBQTtFQUMzQztJQUFLLGdEQUF1QztZQUF2Qyx3Q0FBdUMsRUFBQTtFQUM1QztJQUFLLCtDQUFzQztZQUF0Qyx1Q0FBc0MsRUFBQTtFQUMzQztJQUFLLGlEQUF3QztZQUF4Qyx5Q0FBd0MsRUFBQTtFQUM3QztJQUFNLDRDQUFtQztZQUFuQyxvQ0FBbUMsRUFBQSxFQUFBOztBQUczQztFQUNFO0lBQUksd0NBQStCO1lBQS9CLGdDQUErQixFQUFBO0VBQ25DO0lBQUksOENBQW9DO1lBQXBDLHNDQUFvQyxFQUFBO0VBQ3hDO0lBQUksNENBQW1DO1lBQW5DLG9DQUFtQyxFQUFBO0VBQ3ZDO0lBQUksOENBQXFDO1lBQXJDLHNDQUFxQyxFQUFBO0VBQ3pDO0lBQUssOENBQXFDO1lBQXJDLHNDQUFxQyxFQUFBO0VBQzFDO0lBQUssNENBQW1DO1lBQW5DLG9DQUFtQyxFQUFBO0VBQ3hDO0lBQUssOENBQXFDO1lBQXJDLHNDQUFxQyxFQUFBO0VBQzFDO0lBQUssOENBQXFDO1lBQXJDLHNDQUFxQyxFQUFBO0VBQzFDO0lBQUssNENBQW1DO1lBQW5DLG9DQUFtQyxFQUFBO0VBQ3hDO0lBQUssZ0RBQXNDO1lBQXRDLHdDQUFzQyxFQUFBO0VBQzNDO0lBQUssMENBQWlDO1lBQWpDLGtDQUFpQyxFQUFBO0VBQ3RDO0lBQUssaURBQXVDO1lBQXZDLHlDQUF1QyxFQUFBO0VBQzVDO0lBQUssNkNBQW9DO1lBQXBDLHFDQUFvQyxFQUFBO0VBQ3pDO0lBQUssK0NBQXNDO1lBQXRDLHVDQUFzQyxFQUFBO0VBQzNDO0lBQUssK0NBQXNDO1lBQXRDLHVDQUFzQyxFQUFBO0VBQzNDO0lBQUssNkNBQW9DO1lBQXBDLHFDQUFvQyxFQUFBO0VBQ3pDO0lBQUssK0NBQXNDO1lBQXRDLHVDQUFzQyxFQUFBO0VBQzNDO0lBQUssK0NBQXNDO1lBQXRDLHVDQUFzQyxFQUFBO0VBQzNDO0lBQUssNkNBQW9DO1lBQXBDLHFDQUFvQyxFQUFBO0VBQ3pDO0lBQUssK0NBQXFDO1lBQXJDLHVDQUFxQyxFQUFBO0VBQzFDO0lBQUssd0NBQStCO1lBQS9CLGdDQUErQixFQUFBO0VBQ3BDO0lBQUssK0NBQXFDO1lBQXJDLHVDQUFxQyxFQUFBO0VBQzFDO0lBQUssNkNBQW9DO1lBQXBDLHFDQUFvQyxFQUFBO0VBQ3pDO0lBQUssK0NBQXNDO1lBQXRDLHVDQUFzQyxFQUFBO0VBQzNDO0lBQUssK0NBQXNDO1lBQXRDLHVDQUFzQyxFQUFBO0VBQzNDO0lBQUssNkNBQW9DO1lBQXBDLHFDQUFvQyxFQUFBO0VBQ3pDO0lBQUssK0NBQXNDO1lBQXRDLHVDQUFzQyxFQUFBO0VBQzNDO0lBQUssK0NBQXNDO1lBQXRDLHVDQUFzQyxFQUFBO0VBQzNDO0lBQUssNkNBQW9DO1lBQXBDLHFDQUFvQyxFQUFBO0VBQ3pDO0lBQUssaURBQXVDO1lBQXZDLHlDQUF1QyxFQUFBO0VBQzVDO0lBQUssMkNBQWtDO1lBQWxDLG1DQUFrQyxFQUFBO0VBQ3ZDO0lBQUssZ0RBQXVDO1lBQXZDLHdDQUF1QyxFQUFBO0VBQzVDO0lBQUssOENBQXFDO1lBQXJDLHNDQUFxQyxFQUFBO0VBQzFDO0lBQUssZ0RBQXVDO1lBQXZDLHdDQUF1QyxFQUFBO0VBQzVDO0lBQUssZ0RBQXVDO1lBQXZDLHdDQUF1QyxFQUFBO0VBQzVDO0lBQUssOENBQXFDO1lBQXJDLHNDQUFxQyxFQUFBO0VBQzFDO0lBQUssZ0RBQXVDO1lBQXZDLHdDQUF1QyxFQUFBO0VBQzVDO0lBQUssZ0RBQXVDO1lBQXZDLHdDQUF1QyxFQUFBO0VBQzVDO0lBQUssOENBQXFDO1lBQXJDLHNDQUFxQyxFQUFBO0VBQzFDO0lBQUssZ0RBQXNDO1lBQXRDLHdDQUFzQyxFQUFBO0VBQzNDO0lBQU0sd0NBQStCO1lBQS9CLGdDQUErQixFQUFBLEVBQUE7O0FBekN2QztFQUNFO0lBQUksd0NBQStCO1lBQS9CLGdDQUErQixFQUFBO0VBQ25DO0lBQUksOENBQW9DO1lBQXBDLHNDQUFvQyxFQUFBO0VBQ3hDO0lBQUksNENBQW1DO1lBQW5DLG9DQUFtQyxFQUFBO0VBQ3ZDO0lBQUksOENBQXFDO1lBQXJDLHNDQUFxQyxFQUFBO0VBQ3pDO0lBQUssOENBQXFDO1lBQXJDLHNDQUFxQyxFQUFBO0VBQzFDO0lBQUssNENBQW1DO1lBQW5DLG9DQUFtQyxFQUFBO0VBQ3hDO0lBQUssOENBQXFDO1lBQXJDLHNDQUFxQyxFQUFBO0VBQzFDO0lBQUssOENBQXFDO1lBQXJDLHNDQUFxQyxFQUFBO0VBQzFDO0lBQUssNENBQW1DO1lBQW5DLG9DQUFtQyxFQUFBO0VBQ3hDO0lBQUssZ0RBQXNDO1lBQXRDLHdDQUFzQyxFQUFBO0VBQzNDO0lBQUssMENBQWlDO1lBQWpDLGtDQUFpQyxFQUFBO0VBQ3RDO0lBQUssaURBQXVDO1lBQXZDLHlDQUF1QyxFQUFBO0VBQzVDO0lBQUssNkNBQW9DO1lBQXBDLHFDQUFvQyxFQUFBO0VBQ3pDO0lBQUssK0NBQXNDO1lBQXRDLHVDQUFzQyxFQUFBO0VBQzNDO0lBQUssK0NBQXNDO1lBQXRDLHVDQUFzQyxFQUFBO0VBQzNDO0lBQUssNkNBQW9DO1lBQXBDLHFDQUFvQyxFQUFBO0VBQ3pDO0lBQUssK0NBQXNDO1lBQXRDLHVDQUFzQyxFQUFBO0VBQzNDO0lBQUssK0NBQXNDO1lBQXRDLHVDQUFzQyxFQUFBO0VBQzNDO0lBQUssNkNBQW9DO1lBQXBDLHFDQUFvQyxFQUFBO0VBQ3pDO0lBQUssK0NBQXFDO1lBQXJDLHVDQUFxQyxFQUFBO0VBQzFDO0lBQUssd0NBQStCO1lBQS9CLGdDQUErQixFQUFBO0VBQ3BDO0lBQUssK0NBQXFDO1lBQXJDLHVDQUFxQyxFQUFBO0VBQzFDO0lBQUssNkNBQW9DO1lBQXBDLHFDQUFvQyxFQUFBO0VBQ3pDO0lBQUssK0NBQXNDO1lBQXRDLHVDQUFzQyxFQUFBO0VBQzNDO0lBQUssK0NBQXNDO1lBQXRDLHVDQUFzQyxFQUFBO0VBQzNDO0lBQUssNkNBQW9DO1lBQXBDLHFDQUFvQyxFQUFBO0VBQ3pDO0lBQUssK0NBQXNDO1lBQXRDLHVDQUFzQyxFQUFBO0VBQzNDO0lBQUssK0NBQXNDO1lBQXRDLHVDQUFzQyxFQUFBO0VBQzNDO0lBQUssNkNBQW9DO1lBQXBDLHFDQUFvQyxFQUFBO0VBQ3pDO0lBQUssaURBQXVDO1lBQXZDLHlDQUF1QyxFQUFBO0VBQzVDO0lBQUssMkNBQWtDO1lBQWxDLG1DQUFrQyxFQUFBO0VBQ3ZDO0lBQUssZ0RBQXVDO1lBQXZDLHdDQUF1QyxFQUFBO0VBQzVDO0lBQUssOENBQXFDO1lBQXJDLHNDQUFxQyxFQUFBO0VBQzFDO0lBQUssZ0RBQXVDO1lBQXZDLHdDQUF1QyxFQUFBO0VBQzVDO0lBQUssZ0RBQXVDO1lBQXZDLHdDQUF1QyxFQUFBO0VBQzVDO0lBQUssOENBQXFDO1lBQXJDLHNDQUFxQyxFQUFBO0VBQzFDO0lBQUssZ0RBQXVDO1lBQXZDLHdDQUF1QyxFQUFBO0VBQzVDO0lBQUssZ0RBQXVDO1lBQXZDLHdDQUF1QyxFQUFBO0VBQzVDO0lBQUssOENBQXFDO1lBQXJDLHNDQUFxQyxFQUFBO0VBQzFDO0lBQUssZ0RBQXNDO1lBQXRDLHdDQUFzQyxFQUFBO0VBQzNDO0lBQU0sd0NBQStCO1lBQS9CLGdDQUErQixFQUFBLEVBQUE7O0FBR3ZDO0VBQ0U7SUFDRSx3Q0FBNkI7WUFBN0IsZ0NBQTZCO0lBQzdCLFdBQVUsRUFBQTtFQUdaO0lBQ0Usb0NBQTJCO1lBQTNCLDRCQUEyQjtJQUMzQixXQUFVLEVBQUEsRUFBQTs7QUFSZDtFQUNFO0lBQ0Usd0NBQTZCO1lBQTdCLGdDQUE2QjtJQUM3QixXQUFVLEVBQUE7RUFHWjtJQUNFLG9DQUEyQjtZQUEzQiw0QkFBMkI7SUFDM0IsV0FBVSxFQUFBLEVBQUE7O0FBSWQ7RUFDRTtJQUFnQixXQUFVLEVBQUE7RUFDMUI7SUFBTSxXQUFVLEVBQUEsRUFBQTs7QUFGbEI7RUFDRTtJQUFnQixXQUFVLEVBQUE7RUFDMUI7SUFBTSxXQUFVLEVBQUEsRUFBQTs7QUFHbEI7RUFDRTtJQUFJLDZCQUFvQjtZQUFwQixxQkFBb0I7SUFBRSxXQUFVLEVBQUE7RUFDcEM7SUFBSywrQkFBcUI7WUFBckIsdUJBQXFCO0lBQUUsWUFBVyxFQUFBO0VBQ3ZDO0lBQU0sNkJBQW9CO1lBQXBCLHFCQUFvQjtJQUFFLFdBQVUsRUFBQSxFQUFBOztBQUh4QztFQUNFO0lBQUksNkJBQW9CO1lBQXBCLHFCQUFvQjtJQUFFLFdBQVUsRUFBQTtFQUNwQztJQUFLLCtCQUFxQjtZQUFyQix1QkFBcUI7SUFBRSxZQUFXLEVBQUE7RUFDdkM7SUFBTSw2QkFBb0I7WUFBcEIscUJBQW9CO0lBQUUsV0FBVSxFQUFBLEVBQUE7O0FBR3hDO0VBQ0U7SUFBSSxnQ0FBdUI7WUFBdkIsd0JBQXVCLEVBQUE7RUFDM0I7SUFBTSxrQ0FBeUI7WUFBekIsMEJBQXlCLEVBQUEsRUFBQTs7QUFGakM7RUFDRTtJQUFJLGdDQUF1QjtZQUF2Qix3QkFBdUIsRUFBQTtFQUMzQjtJQUFNLGtDQUF5QjtZQUF6QiwwQkFBeUIsRUFBQSxFQUFBOztBQUdqQztFQUNFO0lBQ0Usd0NBQTJCO1lBQTNCLGdDQUEyQjtJQUMzQixXQUFVLEVBQUE7RUFFWjtJQUFJLFlBQVcsRUFBQTtFQUNmO0lBQUssV0FBVSxFQUFBO0VBQ2Y7SUFBSyxXQUFVLEVBQUE7RUFDZjtJQUNFLDhDQUFxQztZQUFyQyxzQ0FBcUM7SUFDckMsV0FBVSxFQUFBLEVBQUE7O0FBVmQ7RUFDRTtJQUNFLHdDQUEyQjtZQUEzQixnQ0FBMkI7SUFDM0IsV0FBVSxFQUFBO0VBRVo7SUFBSSxZQUFXLEVBQUE7RUFDZjtJQUFLLFdBQVUsRUFBQTtFQUNmO0lBQUssV0FBVSxFQUFBO0VBQ2Y7SUFDRSw4Q0FBcUM7WUFBckMsc0NBQXFDO0lBQ3JDLFdBQVUsRUFBQSxFQUFBOztBQUlkO0VBQ0U7SUFDRSx3Q0FBMkI7WUFBM0IsZ0NBQTJCO0lBQzNCLFdBQVUsRUFBQTtFQUVaO0lBQUksWUFBVyxFQUFBO0VBQ2Y7SUFBSyxXQUFVLEVBQUE7RUFDZjtJQUFLLFdBQVUsRUFBQTtFQUNmO0lBQ0Usa0VBQXFEO1lBQXJELDBEQUFxRDtJQUNyRCxXQUFVLEVBQUEsRUFBQTs7QUFWZDtFQUNFO0lBQ0Usd0NBQTJCO1lBQTNCLGdDQUEyQjtJQUMzQixXQUFVLEVBQUE7RUFFWjtJQUFJLFlBQVcsRUFBQTtFQUNmO0lBQUssV0FBVSxFQUFBO0VBQ2Y7SUFBSyxXQUFVLEVBQUE7RUFDZjtJQUNFLGtFQUFxRDtZQUFyRCwwREFBcUQ7SUFDckQsV0FBVSxFQUFBLEVBQUE7O0FBSWQ7RUFDRTtJQUNFLGtFQUFxRDtZQUFyRCwwREFBcUQ7SUFDckQsV0FBVSxFQUFBO0VBRVo7SUFBSSxXQUFVLEVBQUE7RUFDZDtJQUFLLFdBQVUsRUFBQTtFQUNmO0lBQUssWUFBVyxFQUFBO0VBQ2hCO0lBQ0Usd0NBQTJCO1lBQTNCLGdDQUEyQjtJQUMzQixXQUFVLEVBQUEsRUFBQTs7QUFWZDtFQUNFO0lBQ0Usa0VBQXFEO1lBQXJELDBEQUFxRDtJQUNyRCxXQUFVLEVBQUE7RUFFWjtJQUFJLFdBQVUsRUFBQTtFQUNkO0lBQUssV0FBVSxFQUFBO0VBQ2Y7SUFBSyxZQUFXLEVBQUE7RUFDaEI7SUFDRSx3Q0FBMkI7WUFBM0IsZ0NBQTJCO0lBQzNCLFdBQVUsRUFBQSxFQUFBOztBQUlkO0VBQ0U7SUFDRSx3Q0FBNkI7WUFBN0IsZ0NBQTZCO0lBQzdCLDhDQUFxQztZQUFyQyxzQ0FBcUM7SUFDckMsV0FBVSxFQUFBO0VBRVo7SUFBSSxXQUFVLEVBQUE7RUFDZDtJQUFLLFdBQVUsRUFBQTtFQUNmO0lBQUssWUFBVyxFQUFBO0VBQ2hCO0lBQ0Usd0NBQTJCO1lBQTNCLGdDQUEyQjtJQUMzQixXQUFVLEVBQUEsRUFBQTs7QUFYZDtFQUNFO0lBQ0Usd0NBQTZCO1lBQTdCLGdDQUE2QjtJQUM3Qiw4Q0FBcUM7WUFBckMsc0NBQXFDO0lBQ3JDLFdBQVUsRUFBQTtFQUVaO0lBQUksV0FBVSxFQUFBO0VBQ2Q7SUFBSyxXQUFVLEVBQUE7RUFDZjtJQUFLLFlBQVcsRUFBQTtFQUNoQjtJQUNFLHdDQUEyQjtZQUEzQixnQ0FBMkI7SUFDM0IsV0FBVSxFQUFBLEVBQUE7O0FBSWQ7RUFDRTtJQUNFLHdDQUErQjtZQUEvQixnQ0FBK0I7SUFDL0IsV0FBVSxFQUFBO0VBRVo7SUFBSSxZQUFXLEVBQUE7RUFDZjtJQUFLLFdBQVUsRUFBQTtFQUNmO0lBQUssV0FBVSxFQUFBO0VBQ2Y7SUFDRSwyQ0FBa0M7WUFBbEMsbUNBQWtDO0lBQ2xDLFdBQVUsRUFBQSxFQUFBOztBQVZkO0VBQ0U7SUFDRSx3Q0FBK0I7WUFBL0IsZ0NBQStCO0lBQy9CLFdBQVUsRUFBQTtFQUVaO0lBQUksWUFBVyxFQUFBO0VBQ2Y7SUFBSyxXQUFVLEVBQUE7RUFDZjtJQUFLLFdBQVUsRUFBQTtFQUNmO0lBQ0UsMkNBQWtDO1lBQWxDLG1DQUFrQztJQUNsQyxXQUFVLEVBQUEsRUFBQTs7QUFJZDtFQUNFO0lBQ0UsV0FBVTtJQUNWLFdBQVUsRUFBQTtFQUVaO0lBQU8sV0FBVSxFQUFBO0VBQ2pCO0lBQ0Usb0NBQXlCO1lBQXpCLDRCQUF5QjtJQUN6QixXQUFVLEVBQUE7RUFFWjtJQUFPLHdDQUErQjtZQUEvQixnQ0FBK0IsRUFBQTtFQUN0QztJQUNFLFdBQVU7SUFDVixvQ0FBeUI7WUFBekIsNEJBQXlCLEVBQUEsRUFBQTs7QUFiN0I7RUFDRTtJQUNFLFdBQVU7SUFDVixXQUFVLEVBQUE7RUFFWjtJQUFPLFdBQVUsRUFBQTtFQUNqQjtJQUNFLG9DQUF5QjtZQUF6Qiw0QkFBeUI7SUFDekIsV0FBVSxFQUFBO0VBRVo7SUFBTyx3Q0FBK0I7WUFBL0IsZ0NBQStCLEVBQUE7RUFDdEM7SUFDRSxXQUFVO0lBQ1Ysb0NBQXlCO1lBQXpCLDRCQUF5QixFQUFBLEVBQUE7O0FBSzdCO0VBQ0U7SUFBSyxXQUFVLEVBQUE7RUFDZjtJQUNFLG9DQUF5QjtZQUF6Qiw0QkFBeUI7SUFDekIsV0FBVSxFQUFBO0VBRVo7SUFBTyx3Q0FBK0I7WUFBL0IsZ0NBQStCLEVBQUE7RUFDdEM7SUFDRSxvQ0FBeUI7WUFBekIsNEJBQXlCO0lBQ3pCLFdBQVUsRUFBQTtFQUVaO0lBQU0sV0FBVSxFQUFBO0VBQ2hCO0lBQU0sV0FBVSxFQUFBO0VBQ2hCO0lBQU8sV0FBVSxFQUFBLEVBQUE7O0FBYm5CO0VBQ0U7SUFBSyxXQUFVLEVBQUE7RUFDZjtJQUNFLG9DQUF5QjtZQUF6Qiw0QkFBeUI7SUFDekIsV0FBVSxFQUFBO0VBRVo7SUFBTyx3Q0FBK0I7WUFBL0IsZ0NBQStCLEVBQUE7RUFDdEM7SUFDRSxvQ0FBeUI7WUFBekIsNEJBQXlCO0lBQ3pCLFdBQVUsRUFBQTtFQUVaO0lBQU0sV0FBVSxFQUFBO0VBQ2hCO0lBQU0sV0FBVSxFQUFBO0VBQ2hCO0lBQU8sV0FBVSxFQUFBLEVBQUE7O0FBR25CO0VBQ0U7SUFBSyxXQUFVLEVBQUE7RUFDZjtJQUNFLG9DQUF5QjtZQUF6Qiw0QkFBeUI7SUFDekIsV0FBVSxFQUFBO0VBRVo7SUFBTyx3Q0FBK0I7WUFBL0IsZ0NBQStCLEVBQUE7RUFDdEM7SUFDRSxvQ0FBeUI7WUFBekIsNEJBQXlCO0lBQ3pCLFdBQVUsRUFBQTtFQUVaO0lBQU0sV0FBVSxFQUFBO0VBQ2hCO0lBQU8sV0FBVSxFQUFBLEVBQUE7O0FBWm5CO0VBQ0U7SUFBSyxXQUFVLEVBQUE7RUFDZjtJQUNFLG9DQUF5QjtZQUF6Qiw0QkFBeUI7SUFDekIsV0FBVSxFQUFBO0VBRVo7SUFBTyx3Q0FBK0I7WUFBL0IsZ0NBQStCLEVBQUE7RUFDdEM7SUFDRSxvQ0FBeUI7WUFBekIsNEJBQXlCO0lBQ3pCLFdBQVUsRUFBQTtFQUVaO0lBQU0sV0FBVSxFQUFBO0VBQ2hCO0lBQU8sV0FBVSxFQUFBLEVBQUE7O0FBR25CO0VBQ0U7SUFBSywwREFBaUQ7WUFBakQsa0RBQWlELEVBQUE7RUFDdEQ7SUFBTyx1REFBOEM7WUFBOUMsK0NBQThDLEVBQUEsRUFBQTs7QUFGdkQ7RUFDRTtJQUFLLDBEQUFpRDtZQUFqRCxrREFBaUQsRUFBQTtFQUN0RDtJQUFPLHVEQUE4QztZQUE5QywrQ0FBOEMsRUFBQSxFQUFBOztBQUd2RDtFQUNFO0lBQUssOERBQXFEO1lBQXJELHNEQUFxRCxFQUFBO0VBQzFEO0lBQU8sdURBQThDO1lBQTlDLCtDQUE4QyxFQUFBLEVBQUE7O0FBRnZEO0VBQ0U7SUFBSyw4REFBcUQ7WUFBckQsc0RBQXFELEVBQUE7RUFDMUQ7SUFBTyx1REFBOEM7WUFBOUMsK0NBQThDLEVBQUEsRUFBQTs7QUFHdkQ7RUFDRTtJQUFLLCtDQUFzQztZQUF0Qyx1Q0FBc0MsRUFBQTtFQUMzQztJQUFPLHdDQUErQjtZQUEvQixnQ0FBK0IsRUFBQSxFQUFBOztBQUZ4QztFQUNFO0lBQUssK0NBQXNDO1lBQXRDLHVDQUFzQyxFQUFBO0VBQzNDO0lBQU8sd0NBQStCO1lBQS9CLGdDQUErQixFQUFBLEVBQUE7O0FBR3hDO0VBQ0U7SUFBSyw4Q0FBcUM7WUFBckMsc0NBQXFDLEVBQUE7RUFDMUM7SUFBTyx3Q0FBK0I7WUFBL0IsZ0NBQStCLEVBQUEsRUFBQTs7QUFGeEM7RUFDRTtJQUFLLDhDQUFxQztZQUFyQyxzQ0FBcUMsRUFBQTtFQUMxQztJQUFPLHdDQUErQjtZQUEvQixnQ0FBK0IsRUFBQSxFQUFBOztBQUd4QztFQUNFO0lBQU0saUNBQXdCO1lBQXhCLHlCQUF3QixFQUFBO0VBQzlCO0lBQVEsb0NBQTJCO1lBQTNCLDRCQUEyQixFQUFBLEVBQUE7O0FBRnJDO0VBQ0U7SUFBTSxpQ0FBd0I7WUFBeEIseUJBQXdCLEVBQUE7RUFDOUI7SUFBUSxvQ0FBMkI7WUFBM0IsNEJBQTJCLEVBQUEsRUFBQTs7QUNoVnJDO0VBQ0UsbUJBQWtCLEVBa0JuQjtFQWhCRTtJQUVHLGlCQUFnQixFQUNqQjtFQUhGO0lBTUcsZ0JBQWU7SUFDZixnQkFBZTtJQUNmLHFCQUFvQixFQUNyQjtFQVRGO0lBWUcsZ0JBQWU7SUFDZixtQkFBa0IsRUFDbkI7O0FDakJMO0VBRUksZ0VBQThELEVBYS9EO0VBZkg7Ozs7O0lBU00sYUFBWSxFQUNiO0VBVkw7SUFhTSxlQUFjLEVBQ2Y7O0FBZEw7Ozs7O0VBc0JJLGlCQUFnQixFQUNqQjs7QUF2Qkg7RUEwQkksb0JBQW1CLEVBQ3BCOztBQTNCSDtFQThCSSx3QkFBdUIsRUFDeEI7O0FBL0JIO0VBa0NJLHNCQUFxQixFQUN0Qjs7QUNuQ0g7O0VBRUUsWUFBVztFQUNYLGVBQWM7RUFDZCxvQkFBbUIsRUFvQ3BCO0VBeENEOztJQU9JLFlBQVcsRUFDWjtFQVJIOztJQVlNLFdBQVUsRUFDWDtFQWJMOztJQWdCTSxnQkFBZTtJQUNmLGlCQUFnQjtJQUNoQiw2Q0FBNEMsRUFDN0M7RUFuQkw7O0lBdUJJLGdCQUFlO0lBQ2YsaUJBQWdCO0lBQ2hCLDZDQUE0QyxFQUM3QztFQTFCSDs7SUE2QkksV0FBVSxFQUNYO0VBOUJIOztJQWlDSSxhQUFZO0lBQ1osb0JBQW1CLEVBQ3BCO0VBbkNIOztJQXNDSSxnQkFBZSxFQUNoQjs7QUN0Q0Q7RUFDRSxpQkFBZ0IsRUFvRGpCO0VBckRBO0lBSUcsa0JBQWlCO0lBQ2pCLGdCQUFlO0lBQ2Ysd0JBQXVCO0lBQ3ZCLGVBQWM7SUFDZCxxQkFBYTtJQUFiLGNBQWEsRUFDZDtFQVRGO0lBWUcsaUJBQWdCLEVBQ2pCO0VBYkY7SUFnQkcsa0JBQWlCO0lBQ2pCLG1CQUFrQjtJQUNsQixZQUFXO0lBQ1gsYUFBWTtJQUNaLG1CQUFjO1FBQWQsZUFBYztJQUNkLHFCQUFhO0lBQWIsY0FBYTtJQUNiLHVCQUFtQjtRQUFuQixvQkFBbUI7SUFDbkIsc0JBQXVCO1FBQXZCLHdCQUF1QjtJQUN2QixvQkFBbUI7SUFDbkIsMEJBQXlCO0lBQ3pCLFlBQVc7SUFDWCxtQkFBa0I7SUFDbEIsbUNBQTBCO1lBQTFCLDJCQUEwQixFQUMzQjtFQTdCRjtJQWdDRyxnQkFBZTtJQUNmLFlBQVcsRUFDWjtFQWxDRjtJQXNDSyxpQkFBZ0I7SUFDaEIsaUJBQWdCO0lBQ2hCLGtCQUFpQjtJQUNqQixnQkFBZTtJQUNmLHdCQUF1QjtJQUN2QixlQUFjO0lBQ2QsaUJBQWdCLEVBQ2pCO0VBN0NKO0lBK0NLLGtCQUFpQjtJQUNqQixnQkFBZTtJQUNmLHdCQUF1QjtJQUN2QixlQUFjLEVBQ2Y7O0FBSUw7RUFDRSxVQUFTO0VBQ1QsV0FBVSxFQWdCWDtFQWxCQTtJQUtHLGtCQUFpQjtJQUNqQixnQkFBZTtJQUNmLGVBQWM7SUFDZCxxQkFBYTtJQUFiLGNBQWEsRUFDZDtFQVRGO0lBWUcsZ0JBQWU7SUFDZixlQUFjO0lBQ2QsbUJBQWM7UUFBZCxlQUFjO0lBQ2Qsa0JBQWlCO0lBQ2pCLG1DQUEwQjtZQUExQiwyQkFBMEIsRUFDM0I7O0FDekVMOztFQUVFLGlCQUFnQixFQWtLakI7RUFwS0Q7Ozs7OztJQU9JLDBCQUF5QjtJQUV6QixpQkFBZ0I7SUFDaEIsWUFBVztJQUNYLG1CQUFrQjtJQUNsQiw2QkFBNEI7SUFDNUIsaUJBQWdCLEVBcUJqQjtJQWxDSDs7Ozs7O01BZ0JNLGVyQ0dpQixFcUNGbEI7SUFqQkw7Ozs7OztNQW9CTSxlckNEaUIsRXFDRWxCO0lBckJMOzs7Ozs7TUF3Qk0sc0JBQXFCLEVBQ3RCO0lBekJMOzs7Ozs7Ozs7Ozs7Ozs7O01BOEJNLGNBQWE7TUFDYixzQnJDdEJpQjtNcUN1QmpCLGlCQUFnQixFQUNqQjtFQWpDTDs7OztJQXNDSSxzQnJDeEJtQixFcUN5QnBCO0VBdkNIOzs7Ozs7SUE0Q0ksYUFBWTtJQUNaLHFCQUFvQjtJQUNwQixhQUFZLEVBaUJiO0lBL0RIOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7TUFvRE0sZ0JBQWU7TUFDZixhQUFZLEVBQ2I7SUF0REw7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O01BNkRNLFlBQVcsRUFDWjtFQTlETDs7SUFrRUksbUJBQWtCO0lBQ2xCLGtCQUFpQixFQTZEbEI7SUFoSUg7O01BdUVNLFNBQVE7TUFDUixVQUFTO01BQ1QsbUNBQWtDO01BQ2xDLG9DQUFtQztNQUNuQyxpQ3JDdkRpQjtNcUN3RGpCLGVBQWM7TUFDZCxtQkFBa0I7TUFDbEIsbUJBQWtCO01BQ2xCLFlBQVc7TUFDWCxVQUFTLEVBQ1Y7SUFqRkw7O01Bb0ZNLFNBQVE7TUFDUixVQUFTO01BQ1QsbUNBQWtDO01BQ2xDLG9DQUFtQztNQUNuQyw4QnJDcEVpQjtNcUNxRWpCLGVBQWM7TUFDZCxtQkFBa0I7TUFDbEIsWUFBVztNQUNYLFVBQVMsRUFDVjtJQTdGTDs7TUFnR00seUJBQXdCO01BQ3hCLHNCQUFxQjtNQUNyQixxQkFBb0I7TUFDcEIsbUJBQWtCO01BQ2xCLFFBQU87TUFDUCxTQUFRO01BQ1IsT0FBTTtNQUNOLFVBQVM7TUFDVCxVQUFTO01BQ1Qsa0JBQWlCO01BQ2pCLGNBQWE7TUFDYixpQkFBZ0I7TUFDaEIsV0FBVTtNQUNWLHdCQUF1QjtNQUN2QixZQUFXLEVBQ1o7SUEvR0w7O01Ba0hNLHNCckNqR2lCLEVxQzhHbEI7TUEvSEw7O1FBcUhRLGVyQ2xHZSxFcUNtR2hCO01BdEhQOztRQXlIUSxxQ0FBMkMsRUFDNUM7TUExSFA7O1FBNkhRLHdDQUE4QyxFQUMvQztFQTlIUDs7SUFtSUksWUFBVztJQUNYLGNBQWEsRUFDZDtFQUVEO0lBdklGOzs7Ozs7OztNQTRJTSxZQUFXO01BQ1gsZ0JBQWUsRUFDaEIsRUFBQTtFQTlJTDs7SUFrSkksZ0JBQWU7SUFDZix1QkFBc0I7SUFDdEIsYUFBWTtJQUNaLGtCQUFpQjtJQUNqQixpQkFBZ0I7SUFDaEIsYUFBWTtJQUNaLGlCQUFnQjtJQUNoQixrQkFBaUI7SUFDakIscUJBQW9CLEVBQ3JCO0VBM0pIOztJQThKSSxlckNuSm1CLEVxQ29KcEI7RUEvSkg7O0lBa0tJLGVyQ3BKbUIsRXFDcUpwQjs7QWxCeU9IO0VtQjNZRSx3REFBdUQ7RUFDdkQsNkR0Q0ZnRTtFc0NHaEUsb0JBQW1CO0VBQ25CLG1CQUFrQjtFQUNsQixrQkFBaUI7RUFDakIsaUJBQWdCO0VBQ2hCLG9CQUFtQjtFQUNuQixpQkFBZ0I7RUFDaEIsWUFBVztFQUNYLFVBQVMsRUE2Z0NWO0VBM2dDQztJbkJnWUY7TW1CL1hJLGdCQUFlO01BQ2YsT0FBTTtNQUNOLFlBQVc7TUFDWCxpQkFBZ0I7TUFDaEIsaUJBQWdCLEVBc2dDbkI7TUF2aENEO1FBb0JNLGdCQUFlLEVBQ2hCLEVBQUE7RUFyQkw7SUEwQkksaUJBQWdCLEVBYWpCO0lBdkNIO01BNkJNLFdBQVUsRUFDWDtJQTlCTDtNQWlDTSxZQUFXLEVBQ1o7SUFsQ0w7TUFxQ00sMEJBQWdCLEVBQ2pCO0VBS0Q7SUEzQ0o7TUE0Q00sWUFBVyxFQUVkLEVBQUE7RW5COFZIO0ltQjNWSSxhQUFZO0lBQ1osc0JBQXFCO0lBQ3JCLHlCQUF3QixFQWF6QjtJQVhDO01uQnVWSjtRbUJ0Vk0saUJBQWdCLEVBVW5CLEVBQUE7SUFoRUg7TUEwRE0sYUFBWSxFQUNiO0lBM0RMO01BOERNLGNBQWEsRUFDZDtFQS9ETDtJQW1FSSx3QkFBdUIsRUFNeEI7SUFKQztNQXJFSjtRQXNFTSxpQkFBZ0I7UUFDaEIsa0RBQWlELEVBRXBELEVBQUE7RUFFRDtJQTNFRjtNQTZFTSx5Q0FBdUMsRUFDeEMsRUFBQTtFQTlFTDtJQW1GSSxXQUFVO0lBQ1YsYUFBWTtJQUNaLFlBQVc7SUFDWCxVQUFTLEVBVVY7SUFSQztNQUVFLGNBQWEsRUFDZDtJQUVEO01BN0ZKO1FBOEZNLGNBQWEsRUFFaEIsRUFBQTtFQWhHSDtJQW1HSSxtQkFBa0I7SUFDbEIsaUJBQWdCLEVBS2pCO0lBSkM7TUFyR0o7UUFzR00sa0JBQWlCO1FBQ2pCLGlCQUFnQixFQUVuQixFQUFBO0VBekdIO0lBNkdNLFlBQVc7SUFDWCxlQUFjO0lBQ2Qsc0JBQXFCLEVBQ3RCO0VBQ0Q7SUFqSEo7TUFtSFEsaUJBQWdCLEVBQ2pCLEVBQUE7RUFFSDtJQXRISjtNQXVITSxtQkFBa0I7TUFDbEIsa0JBQWlCLEVBZ0hwQixFQUFBO0VBeE9IO0lBNEhNLGVBQWMsRUEyR2Y7SUF4R0c7TUEvSFI7UUFnSVUsY0FBYSxFQUVoQixFQUFBO0lBQ0Q7TUFuSU47O1FBc0lVLGNBQWEsRUFDZCxFQUFBO0lBRUg7TUF6SU47O1FBNElVLGNBQWEsRUFDZCxFQUFBO0luQitQVDtNbUIzUFEsYUFBWTtNQUNaLGdCQUFlO01BQ2YsaUJBQWdCO01BQ2hCLGNBQWE7TUFDYixpQkFBZ0I7TUFDaEIsdUJBQXNCO01BQ3RCLGtCQUFpQjtNQUNqQixtQkFBa0I7TUFDbEIsdUJBQXNCO01BQ3RCLGlCQUFnQjtNQUNoQixtQkFBa0I7TUFDbEIsMEJBQXlCLEVBbUIxQjtNQWxCQztRbkIrT1I7VW1COU9VLGlCQUFnQjtVQUNoQixrQkFBaUIsRUFnQnBCLEVBQUE7TUFkQztRbkIyT1I7VW1CMU9VLGVBQWM7VUFDZCxnQkFBZTtVQUNmLG1CQUFrQjtVQUNsQixvQkFBbUIsRUFVdEIsRUFBQTtNQVJDO1FuQnFPUjtVbUJwT1UsY0FBYTtVQUNiLFVBQVMsRUFNWixFQUFBO01BL0tQO1FBNktVLGlDQUFpQixFQUNsQjtJQTlLVDtNQWtMUSw0Q0FBa0MsRUFDbkM7SUFuTFA7TUFzTFEsZ0NBQWlCO01BQ2pCLHFCQUFvQixFQUNyQjtJQXhMUDtNQTJMUSxpQ0FBZ0MsRUFDakM7SUFFRDtNQUNFLDBCQUF5QixFQUMxQjtJQWhNUDtNQW9NVSx3QkFBNEI7TUFDNUIsdUJBQXNCO01BQ3RCLHFCQUFvQjtNQUNwQixtQkFBa0I7TUFDbEIsZXRDL0xhO01zQ2dNYix5Q0FBcUM7TUFDckMsZ0JBQWU7TUFDZixrQkFBaUI7TUFDakIsNkNBQTRDLEVBWTdDO01BeE5UO1FBK01ZLFdBQVU7UUFDVixldEN2TVc7UXNDd01YLDBDQUFnQztRQUNoQyx3QkFBNEIsRUFDN0I7TUFuTlg7UUFzTlksK0NBQTBDLEVBQzNDO0lBSUQ7TUEzTlY7UUE2TmMsYUFBWTtRQUNaLG9CdENyTlMsRXNDME5WO1FBbk9iO1VBaU9nQiwwQ3RDeE5PLEVzQ3lOUixFQUFBO0VBbE9mO0lBK09NLGVBQWM7SUFDZCxjQUFhO0lBQ2IsV0FBVTtJQUNWLDZCQUFvQjtZQUFwQixxQkFBb0I7SUFDcEIsOEJBQXFCO1lBQXJCLHNCQUFxQjtJQUNyQixzREFBNkM7SUFBN0MsOENBQTZDO0lBQTdDLDJFQUE2QyxFQUM5QztFQXJQTDtJQXlQTSxjQUFhO0lBQ2IsV0FBVTtJQUNWLDZCQUFvQjtZQUFwQixxQkFBb0IsRUFDckI7RUE1UEw7SUErUE0saUNBQWdDO0lBQ2hDLG1CQUFrQixFQUNuQjtFQUNEO0lBbFFKO01Bb1FRLG1CQUFrQixFQUNuQixFQUFBO0VBSUw7SUF6UUY7TUE0UVEsZUFBYztNQUNkLG1CQUFrQjtNQUNsQixVQUFTO01BQ1QsbUJBQWtCO01BQ2xCLFVBQVM7TUFDVCxnQkFBZTtNQUNmLFlBQVc7TUFDWCxVQUFTO01BQ1QsOEVBQTZFO01BQzdFLFdBQVU7TUFDVixhQUFZO01BQ1oscUJBQW9CO01BQ3BCLDRFQUFrRTtjQUFsRSxvRUFBa0U7TUFDbEUsV0FBVTtNQUNWLHFCQUFvQjtNQUNwQixnQ0FBdUI7Y0FBdkIsd0JBQXVCO01BQ3ZCLDhHQUFrRztNQUFsRyxzR0FBa0c7TUFBbEcsZ0tBQWtHO01BQ2xHLG9DQUEyQjtjQUEzQiw0QkFBMkIsRUE2TDVCO01BMWRQO1FBb1NVLGlCQUFnQjtRQUNoQix3QkFBdUI7UUFDdkIsZUFBYyxFQUNmO01BdlNUO1FBMFNVLGlCQUFnQjtRQUNoQixnQkFBZSxFQVVoQjtRQXJUVDtVQThTWSwyQkFBMEI7VUFDMUIscUNBQTRCO2tCQUE1Qiw2QkFBNEIsRUFDN0I7UUFoVFg7VUFtVFksdUNBQThCO2tCQUE5QiwrQkFBOEIsRUFDL0I7TUFwVFg7UUF3VFUsaUJBQWdCO1FBQ2hCLGdCQUFlLEVBQ2hCO01BMVRUO1FBNlRVLGdCQUFlO1FBQ2YsK0R0QzdUMkQsRXNDOFQ1RDtNQS9UVDtRQWtVVSxnQkFBZTtRQUNmLGVBQWM7UUFDZCxzQkFBcUI7UUFDckIsMEJBQXlCO1FBQ3pCLGVBQWM7UUFDZCxpQkFBZ0IsRUFDakI7TUF4VVQ7UUEyVVUsaUJBQWdCLEVBQ2pCO01BNVVUOzs7UUFpVlUsVUFBUztRQUNULFdBQVUsRUFDWDtNQW5WVDtRQXNWVSxzQkFBcUI7UUFDckIsV0FBVSxFQUNYO01BeFZUOzs7UUE2VlUsZUFBYztRQUNkLGtCQUFpQjtRQUNqQixpQkFBZ0I7UUFDaEIsdUJBQXNCLEVBQ3ZCO01BaldUO1FBb1dVLG1CQUFrQixFQUNuQjtNQXJXVDtRQXdXVSxrQkFBaUIsRUFDbEI7TUF6V1Q7UUE0V1UsZUFBYyxFQUNmO01BN1dUO1FBZ1hVLG1CQUFrQjtRQUNsQixtQkFBa0IsRUFrQm5CO1FBbllUO1VBb1hZLG1CQUFrQjtVQUNsQixXQUFVO1VBQ1YsVUFBUyxFQUNWO1FBdlhYO1VBMFhZLGVBQWM7VUFDZCwwQkFBeUIsRUFDMUI7UUE1WFg7VUErWFksa0JBQWlCO1VBQ2pCLGtCQUFpQjtVQUNqQixlQUFjLEVBQ2Y7TUFsWVg7UUFzWVcsZUFBYyxFQVNoQjtRQS9ZVDtVQXlZYSw0QkFBMkIsRUFDNUI7UUExWVo7VUE2WWEsaUJBQWdCLEVBQ2pCO01BOVlaO1FBa1pVLHdCQUF1QjtRQUN2QixlQUFjLEVBTWY7UUF6WlQ7O1VBdVpZLGVBQWMsRUFDZjtNQXhaWDtRQTRaVSxrQkFBaUI7UUFDakIsb0JBQW1CO1FBQ25CLGlCQUFnQjtRQUNoQixvQkFBbUIsRUFhcEI7UUE1YVQ7O1VBbWFZLG9CQUFtQixFQUNwQjtRQXBhWDtVQXVhWSxxQkFBb0I7VUFDcEIscUJBQW9CO1VBQ3BCLCtCQUE4QjtVQUM5QixnQ0FBK0IsRUFDaEM7TUEzYVg7UUErYVUscUJBQWE7UUFBYixjQUFhO1FBQ2Isd0JBQW1CO1lBQW5CLG9CQUFtQjtRQUNuQixzQkFBaUI7WUFBakIsa0JBQWlCO1FBQ2pCLGlCQUFnQjtRQUNoQixvQkFBbUIsRUFpQnBCO1FBcGNUOztVQXViWSxhQUFZLEVBQ2I7UUF4Ylg7VUEyYlksZXRDbGJXO1VzQ21iWCxnQkFBZTtVQUNmLGlCQUFnQjtVQUNoQixrQkFBaUIsRUFLbEI7VUFuY1g7WUFpY2MsZUFBeUIsRUFDMUI7TUFsY2I7UUF1Y1UsbUJBQWtCO1FBQ2xCLFdBQVU7UUFDVixZQUFXO1FBQ1gsWUFBVztRQUNYLGFBQVksRUFDYjtNQTVjVDtRQStjWSxtQkFBa0I7UUFDbEIsWUFBVztRQUNYLGFBQVk7UUFDWixVQUFTO1FBQ1QsdUJBQXNCO1FBQ3RCLGtCQUFpQjtRQUNqQixpQ0FBd0I7Z0JBQXhCLHlCQUF3QjtRQUN4QixtQkFBa0I7UUFDbEIsWUFBVztRQUNYLGVBQWMsRUFDakI7SUF6ZFQ7O01BOGRRLFdBQVU7TUFDVixVQUFTO01BQ1QsV0FBVTtNQUNWLG9CQUFtQjtNQUNuQix3RUFBOEQ7Y0FBOUQsZ0VBQThEO01BQzlELGlIQUFrRztNQUFsRyx5R0FBa0c7TUFBbEcsb0tBQWtHO01BQ2xHLHVCQUFzQixFQUN2QjtJQXJlUDtNQXdlUSx1QkFBc0I7TUFDdEIsb0NBQW1DO01BQ25DLG1DQUFrQyxFQUNuQyxFQUFBO0VBM2VQO0lBZ2ZJLFlBQVc7SUFDWCxpQkFBZ0I7SUFDaEIsZ0JBQWUsRUE0RWhCO0lBOWpCSDtNQXFmTSxvQkFBbUI7TUFDbkIsZ0JBQWU7TUFDZixpQkFBZ0I7TUFDaEIsZ0NBQThCO01BQzlCLGVBQWMsRUFXZjtNQVZDO1FBMWZOO1VBMmZRLHFCQUFvQixFQVN2QixFQUFBO01BcGdCTDtRQWlnQlEsZ0NBQWlCO1FBQ2pCLHNCQUFxQixFQUN0QjtJQW5nQlA7TUF1Z0JNLGVBQWM7TUFDZCxtQkFBa0I7TUFDbEIsVUFBUztNQUNULG1CQUFrQjtNQUNsQixxQkFBb0I7TUFDcEIsVUFBUztNQUNULFdBQVU7TUFDVixjQUFhO01BQ2IsaUJBQWdCO01BQ2hCLHNFQUFtRTtNQUNuRSxXQUFVO01BQ1YsK0JBQXFCO2NBQXJCLHVCQUFxQjtNQUNyQixrQ0FBeUI7Y0FBekIsMEJBQXlCO01BQ3pCLGtGQUErRSxFQW9DaEY7TUF4akJMO1FBdWhCUSxrQkFBaUI7UUFDakIsaUJBQWdCO1FBQ2hCLGdCQUFlO1FBQ2YsaUJBQWdCLEVBaUJqQjtRQTNpQlA7VUE2aEJVLGdCQUFlO1VBQ2Ysa0JBQWlCO1VBQ2pCLG1CQUFrQjtVQUNsQixTQUFRO1VBQ1IsaUJBQWdCLEVBQ2pCO1FBbGlCVDtVQXNpQlUsZXRDN2hCYTtVc0M4aEJiLHNCQUFxQjtVQUNyQix3QkFBdUI7VUFDdkIsZ0JBQWUsRUFDaEI7TUExaUJUO1FBOGlCUSxrRUFBaUU7UUFDakUsc0JBQXFCO1FBQ3JCLFlBQVc7UUFDWCxZQUFXO1FBQ1gsbUJBQWtCO1FBQ2xCLFVBQVM7UUFDVCxXQUFVO1FBQ1YsWUFBVztRQUNYLFdBQVUsRUFDWDtJQXZqQlA7TUEyakJNLFdBQVU7TUFDViw0QkFBbUI7Y0FBbkIsb0JBQW1CLEVBQ3BCO0VBN2pCTDtJQWlrQkksc0JBQXFCLEVBNEV0QjtJQTFFQztNQW5rQko7UUFva0JNLGVBQWMsRUF5RWpCLEVBQUE7SUE3b0JIO01Bd2tCTSxtQkFBa0I7TUFDbEIsZ0JBQWU7TUFDZixpQkFBZ0IsRUF3Q2pCO01BbG5CTDtRQTZrQlEscUNBQW1DO1FBQ25DLGlCQUFnQjtRQUNoQixVQUFTO1FBQ1QsYUFBWTtRQUNaLGdCQUFlO1FBQ2YscUJBQW9CO1FBQ3BCLG1CQUFrQjtRQUNsQixhQUFZO1FBQ1osdURBQXNELEVBV3ZEO1FBaG1CUDtVQXdsQlUsYUFBWTtVQUNaLGFBQVk7VUFDWixzQ0FBb0MsRUFDckM7UUEzbEJUO1VBOGxCVSxnQ0FBOEIsRUFDL0I7UUEvbEJUO1VBOGxCVSxnQ0FBOEIsRUFDL0I7UUEvbEJUO1VBOGxCVSxnQ0FBOEIsRUFDL0I7TUEvbEJUO1FBbW1CUSx3QkFBdUI7UUFDdkIsb0NBQW1DO1FBQ25DLGlCQUFnQjtRQUNoQixnQkFBZTtRQUNmLGlCQUFnQjtRQUNoQixnQ0FBOEI7UUFDOUIsbUJBQWtCO1FBQ2xCLFNBQVE7UUFDUixXQUFVO1FBQ1YsZ0JBQWUsRUFLaEI7UUFIQztVQTltQlI7WUErbUJVLGFBQTZCLEVBRWhDLEVBQUE7SUFFSDtNQW5uQko7UUFvbkJNLGtCQUFpQixFQXlCcEI7UUE3b0JIO1VBdW5CUSxhQUFZLEVBQ2IsRUFBQTtJQUVIO01BMW5CSjtRQTJuQk0sYUFBWTtRQUNaLGtCQUFpQixFQWlCcEI7UUE3b0JIO1VBK25CUSxZQUFXO1VBQ1gsYUFBWTtVQUNaLFdBQVUsRUFDWDtRQWxvQlA7VUFxb0JRLDBCQUF5QjtVQUN6QixrQkFBaUI7VUFDakIsbUJBQWtCO1VBQ2xCLFdBQVU7VUFDVixvQkFBbUI7VUFDbkIsbUJBQWtCLEVBQ25CLEVBQUE7RUEzb0JQOztJQWlwQkksVUFBUztJQUNULG1CQUFrQjtJQUNsQix3QkFBdUIsRUF1Q3hCO0lBMXJCSDs7TUFzcEJNLG1CQUFrQjtNQUNsQixnQkFBZTtNQUNmLFVBQVM7TUFDVCxZQUFXO01BQ1gsNkRBQW9EO01BQXBELHFEQUFvRDtNQUFwRCw2RUFBb0QsRUFDckQ7SUEzcEJMOzs7O01BZ3FCTSx3QkFBdUI7TUFDdkIsY0FBYSxFQUtkO01BdHFCTDs7OztRQW9xQlEsWUFBVyxFQUNaO0lBcnFCUDs7TUF5cUJNLFdBQVUsRUFDWDtJQTFxQkw7O01BOHFCUSxpQ0FBd0I7Y0FBeEIseUJBQXdCLEVBQ3pCO0lBL3FCUDs7TUFrckJRLFdBQVUsRUFDWDtJQW5yQlA7O01Bc3JCUSxpQ0FBd0I7Y0FBeEIseUJBQXdCO01BQ3hCLFdBQVUsRUFDWDtFQXhyQlA7O0lBK3JCTSxldEN0ckJpQixFc0N1ckJsQjtFQWhzQkw7Ozs7SUFzc0JRLGV0QzdyQmUsRXNDOHJCaEI7RUF2c0JQO0lBNnNCSSxZQUFXO0lBQ1gsbUJBQWtCO0lBQ2xCLGNBQWEsRUFJZDtJQUhDO01BaHRCSjtRQWl0Qk0sZUFBYyxFQUVqQixFQUFBO0VBbnRCSDtJQXN0QkksaUJBQWdCO0lBQ2hCLGtCQUFpQjtJQUNqQixrQkFBaUIsRUF5SGxCO0lBajFCSDtNQTJ0Qk0saUJBQWdCLEVBU2pCO01BUkM7UUE1dEJOO1VBNnRCUSxrQkFBaUIsRUFPcEIsRUFBQTtNQXB1Qkw7UUFpdUJRLG1CQUFrQjtRQUNsQixvQkFBbUIsRUFDcEI7SUFudUJQO01BdXVCTSxjQUFhLEVBQ2Q7SUFDRDtNQXp1Qko7UUEwdUJNLGtCQUFpQixFQXVHcEIsRUFBQTtJQXJHQztNQTV1Qko7UUE4dUJRLG1CQUFrQjtRQUNsQixvQkFBbUIsRUFDcEIsRUFBQTtJQWFIO01BN3ZCSjs7UUFnd0JRLGNBQWEsRUFDZCxFQUFBO0lBRUg7TUFud0JKO1FBcXdCUSxjQUFhLEVBQ2QsRUFBQTtJQUVIO01BeHdCSjtRQTB3QlEsY0FBYSxFQUNkLEVBQUE7SUFFSDtNQTd3Qko7O1FBZ3hCUSxjQUFhLEVBQ2QsRUFBQTtJQWp4QlA7O01Bc3hCTSxZQUFXO01BQ1gsaURBQXdDO01BQXhDLHlDQUF3QztNQUF4QyxpRUFBd0MsRUFLekM7TUFKQztRQXh4Qk47O1VBeXhCUSxrQkFBaUI7VUFDakIsb0JBQW1CLEVBRXRCLEVBQUE7SUE1eEJMO01BK3hCTSxtQkFBa0I7TUFDbEIsU0FBUTtNQUNSLFdBQVU7TUFDVixXQUFVO01BQ1Ysd0NBQStCO2NBQS9CLGdDQUErQixFQUNoQztJQXB5Qkw7TUF1eUJNLFlBQVc7TUFDWCxpQkFBZ0IsRUFDakI7SUF6eUJMO01BNHlCTSxZQUFXO01BQ1gsaUJBQWdCLEVBQ2pCO0lBOXlCTDtNQWl6Qk0saUJBQWdCLEVBK0JqQjtNQWgxQkw7UUFvekJRLFlBQVcsRUFDWjtNQXJ6QlA7UUF3ekJRLG1CQUFrQjtRQUNsQixpQkFBZ0IsRUFzQmpCO1FBLzBCUDtVQTR6QlUsV0FBVSxFQVdYO1VBdjBCVDtZQSt6QlksV0FBVTtZQUNWLGdFQUF1RDtvQkFBdkQsd0RBQXVELEVBQ3hEO1VBajBCWDtZQW8wQlksV0FBVTtZQUNWLDREQUFtRDtvQkFBbkQsb0RBQW1ELEVBQ3BEO1FBdDBCWDtVQTQwQlUsZ0VBQXFEO2tCQUFyRCx3REFBcUQ7VUFDckQsbUNBQTBCO2tCQUExQiwyQkFBMEIsRUFDM0I7RUE5MEJUO0lBcTFCTSwrQkFBc0I7SUFDdEIsaUJBQWdCLEVBc0ZqQjtJQTU2Qkw7O01BMDFCUSxnQ0FBaUI7TUFDakIsbUJBQWtCO01BQ2xCLGlCQUFnQjtNQUNoQixvQkFBbUI7TUFDbkIsaUJBQWdCO01BQ2hCLGdCQUFlLEVBQ2hCO0lBaDJCUDtNQW0yQlEsbUJBQWtCO01BQ2xCLFdBQVUsRUFDWDtJQXIyQlA7TUF3MkJRLE9BQU07TUFDTixnQkFBZTtNQUNmLGFBQVksRUFDYjtJQTMyQlA7TUE4MkJRLG9CQUFtQjtNQUNuQixpQ3RDLzFCZTtNc0NnMkJmLFlBQVcsRUEyRFo7TUEzNkJQO1FBbTNCVSxpQ0FBZ0M7UUFDaEMsdUVBQXNFLEVBS3ZFO1FBejNCVDtVQXUzQlksb0JBQW1CLEVBQ3BCO01BeDNCWDtRQTQzQlUsY0FBYTtRQUNiLG1CQUFrQixFQTZDbkI7UUExNkJUO1VBZzRCWSxzQkFBcUIsRUE4QnRCO1VBOTVCWDtZQW00QmMsbUJBQWtCO1lBQ2xCLHNCQUFxQjtZQUNyQixpQkFBZ0I7WUFDaEIsZ0JBQWU7WUFDZixpQkFBZ0I7WUFDaEIsb0JBQW1CO1lBQ25CLGV0Q24zQlM7WXNDbzNCVCxxQ0FBb0M7WUFDcEMsMENBQXlDO1lBQ3pDLDZEdEM1NEJvRDtZc0M2NEJwRCxpQkFBZ0IsRUFLakI7WUFsNUJiO2NBZzVCZ0Isd0JBQXVCLEVBQ3hCO1VBajVCZjtZQXE1QmMsc0J0QzU0QlMsRXNDNjRCVjtVQXQ1QmI7OztZQTI1QmMsZXRDbDVCUztZc0NtNUJULHdCQUF1QixFQUN4QjtRQUVIO1VBLzVCVjtZQWc2QlkscUJBQWE7WUFBYixjQUFhO1lBQ2IsdUJBQThCO2dCQUE5QiwrQkFBOEIsRUFTakM7WUExNkJUO2NBbzZCYyxnQkFBZTtjQUNmLGVBQWM7Y0FDZCxrQkFBaUI7Y0FDakIsbUJBQWtCLEVBQ25CLEVBQUE7RUFNWDtJQTk2QkY7TUFpN0JRLGNBQWEsRUFDZDtJQWw3QlA7O01BczdCUSxlQUFjLEVBS2Y7TUEzN0JQOztRQXk3QlUsZXRDaDdCYSxFc0NpN0JkO0lBMTdCVDtNQTg3QlEsZUFBYyxFQUNmO0lBLzdCUDtNQW04Qk0saUJBQWdCO01BQ2hCLGtCQUFrQixFQXlDbkI7TUE3K0JMOztRQXc4QlEsZUFBYyxFQUtmO1FBNzhCUDs7VUEyOEJVLGVBQWMsRUFDZjtNQTU4QlQ7O1FBaTlCUSwwQkFBeUIsRUFDMUI7TUFsOUJQO1FBcTlCUSxlQUFjO1FBQ2QsZ0JBQWU7UUFDZixxQkFBb0I7UUFDcEIsK0R0Q3Y5QjZEO1FzQ3c5QjdELGlCQUFnQjtRQUNoQixnQkFBZSxFQUNoQjtNQTM5QlA7UUE4OUJRLGVBQWMsRUFDZjtNQS85QlA7UUFrK0JRLGdCQUFlLEVBQ2hCO01BbitCUDtRQXMrQlEsZ0JBQWU7UUFDZixhQUFZLEVBQ2I7TUF4K0JQO1FBMitCUSxrQkFBaUIsRUFDbEI7SUE1K0JQO01BZy9CTSx3QkFBdUI7TUFDdkIsc0JBQXFCO01BQ3JCLGtCQUFpQjtNQUNqQixlQUFjO01BQ2Qsb0JBQW1CO01BQ25CLDBDQUE4QjtNQUM5Qix1QkFBc0I7TUFDdEIsaUJBQWdCO01BQ2hCLGdCQUFlO01BQ2YsaUJBQWdCLEVBS2pCO01BOS9CTDtRQTQvQlEsMENBQThCLEVBQy9CLEVBQUE7RUE3L0JQO0lBa2dDSSxpQkFBZ0I7SUFDaEIsa0JBQWlCO0lBQ2pCLGlCQUFnQixFQUNqQjtFbkI5V0g7SW1CaVhJLGFBQVk7SUFDWixrQkFBaUI7SUFDakIsa0ZBRWtDLEVBQ25DO0VBN2dDSDtJQWdoQ0ksbUJBQWtCO0lBQ2xCLFlBQVc7SUFDWCxhQUFZO0lBQ1osZUFBYyxFQUNmOztBQU1EO0VBREY7SUFHTSxlQUFjLEVBQ2YsRUFBQTs7QUFPTDtFQUNFLGtCQUFpQjtFQUNqQixVQUFTO0VBQ1QsaUJBQWdCLEVBQ2pCOztBQUVEO0VBQ0Usb0JBQW1CLEVBQ3BCOztBQUVEO0VBRUksY0FBYSxFQUNkOztBQUhIO0VBS0ksV0FBVSxFQUNYOztBQUdIOztFQUdJLGNBQWEsRUFDZDs7QUFKSDs7RUFNSSxjQUFhLEVBQ2Q7O0FDOWpDSDtFQUNFLGlCQUFnQjtFQUNoQixlQUFjO0VBQ2QsaUJBQWdCLEVBMkhqQjtFQTlIRDtJQU1JLGNBQWEsRUFDZDtFQVBIO0lBV00sbUJBQWtCLEVBQ25CO0VBWkw7SUFlTSxtQkFBa0IsRUFDbkI7RUFoQkw7OztJQXNCSSwwQkFBeUI7SUFFekIsaUJBQWdCO0lBQ2hCLG1CQUFrQjtJQUNsQiw2QkFBNEI7SUFDNUIsaUJBQWdCO0lBQ2hCLGNBQWE7SUFDYixhQUFZO0lBQ1osa0JBQWlCO0lBQ2pCLGdCQUFlO0lBQ2YseUJBQXdCLEVBcUJ6QjtJQXJESDs7O01BbUNNLGV2Q2hCaUIsRXVDaUJsQjtJQXBDTDs7Ozs7OztNQTZDTSxjQUFhO01BQ2Isc0J2Q3JDaUI7TXVDc0NqQixpQkFBZ0IsRUFDakI7SUFoREw7OztNQW1ETSxzQnZDckNpQixFdUNzQ2xCO0VBcERMO0lBd0RJLGFBQVk7SUFDWixtQ0FBa0MsRUFDbkM7RUExREg7SUE2REksY0FBYTtJQUNiLG1DQUFrQztJQUNsQyxrQkFBaUIsRUFDbEI7RUFoRUg7SUFtRUksZ0JBQWU7SUFDZix3QkFBdUI7SUFDdkIsb0JBQW1CO0lBQ25CLGtCQUFpQjtJQUNqQixrQkFBaUI7SUFDakIsYUFBWTtJQUNaLGlCQUFnQjtJQUNoQixrQkFBaUI7SUFDakIscUJBQW9CO0lBQ3BCLGtCQUFpQjtJQUNqQixvQnZDcEVtQjtJdUNxRW5CLFVBQVM7SUFDVCxXQUFVO0lBQ1YsMkJBQTBCO0lBQzFCLDBDQUFxQyxFQW1CdEM7SUFwR0g7TUFvRk0sVUFBUztNQUNULDBDQUFxQztNQUNyQyxvQkFBbUI7TUFDbkIsWUFBVztNQUNYLFdBQVUsRUFDWDtJQXpGTDtNQThGTSxVQUFTO01BQ1QsWUFBVztNQUNYLCtDQUEwQztNQUMxQyxvQkFBbUI7TUFDbkIsV0FBVSxFQUNYO0VBbkdMO0lBa0hJLGdCQUFlO0lBQ2YscUJBQW9CO0lBQ3BCLG1CQUFrQjtJQUNsQixxQkFBYTtJQUFiLGNBQWE7SUFDYiwyQkFBc0I7UUFBdEIsdUJBQXNCO0lBQ3RCLHVCQUFtQjtRQUFuQixvQkFBbUI7SUFDbkIsaUJBQWdCO0lBQ2hCLGVBQWM7SUFDZCxpQkFBZ0I7SUFDaEIsd0JBQXVCO0lBQ3ZCLGVBQWMsRUFDZjtJQTdISDtNQXdHTSxZQUFXO01BQ1gsZUFBYztNQUNkLHdEQUF1RDtNQUN2RCw2QkFBNEI7TUFDNUIsc0JBQXFCO01BQ3JCLFlBQVc7TUFDWCxhQUFZO01BQ1osb0JBQW1CLEVBQ3BCOztBQWdCTDtFQUNFLFdBQVUsRUFDWDs7QUFFRDtFQUNFLG9GdkNuSXlGLEV1QzZVMUY7RUEzTUQ7O0lBT0ksZ0JBQWUsRUFDaEI7RUFSSDtJQWlCSyxpQkFBZ0IsRUFDakI7RUFsQko7SUFxQkksbUJBQWtCLEVBQ25CO0VBdEJIO0lBeUJJLGdCQUFlO0lBQ2YsZUFBYztJQUNkLGlCQUNGLEVBQUM7RUE1Qkg7SUErQkksZ0JBQWUsRUFDaEI7RUFoQ0g7O0lBb0NJLHdCQUF1QjtJQUN2QixpQkFBZ0I7SUFDaEIsdUJBQXNCO0lBQ3RCLHVCQUFzQjtJQUN0QiwwQkFBeUI7SUFDekIscUJBQW9CO0lBQ3BCLG1CQUFrQjtJQUNsQixtQkFBa0I7SUFDbEIsZ0JBQWU7SUFDZixpQkFBZ0I7SUFDaEIsZUFBYyxFQUNmO0VBL0NIO0lBa0RJLFlBQVcsRUFDWjtFQW5ESDs7O0lBd0RJLGFBQVk7SUFDWixZQUFXO0lBQ1gsWUFBVyxFQUtaO0lBL0RIOzs7TUE2RE0sc0JBQXFCLEVBQ3RCO0VBOURMOztJQW1FSSxhQUFZO0lBQ1osa0JBQWlCLEVBQ2xCO0VBckVIO0lBd0VJLHFCQUFhO0lBQWIsY0FBYSxFQUNkO0VBekVIO0lBNEVJLGFBQVk7SUFHWix5QkFBZ0I7T0FBaEIsc0JBQWdCO1lBQWhCLGlCQUFnQjtJQUNoQix3SEFFb0Q7SUFDcEQsa0VBRXVCO0lBQ3ZCLDZDQUdXO0lBQ1gsNkJBQTRCLEVBQzdCO0VBM0ZIO0lBOEZJLFVBQVMsRUFDVjtFQS9GSDtJQWtHSSxnQkFBZSxFQVFoQjtJQTFHSDtNQXFHTSxnQkFBZSxFQUNoQjtJQXRHTDtNQXdHTSxpQkFBZ0IsRUFDakI7RUF6R0w7O0lBOEdJLFVBQVM7SUFDVCxXQUFVO0lBQ1Ysc0JBQXFCLEVBQ3RCO0VBakhIO0lBb0hJLGlCQUFnQixFQVlqQjtJQWhJSDs7TUF3SE0sV0FBVTtNQUNWLFlBQVc7TUFDWCxvQkFBbUIsRUFDcEI7SUEzSEw7TUE2SE0saUJBQWdCO01BQ2hCLG1CQUFrQixFQUNuQjtFQS9ITDtJQW1JSSxnQkFBZTtJQUNmLHFCQUFhO0lBQWIsY0FBYSxFQUNkO0VBcklIO0lBd0lJLG1CQUFrQixFQUNuQjtFQXpJSDtJQTRJSSxnQkFBZTtJQUNmLGVBQWMsRUFDZjtFQTlJSDtJQWtKSSxpQkFBZ0I7SUFDaEIsZ0JBQWU7SUFDZixlQUFjLEVBQ2Y7RUFySkg7SUF3SkksaUJBQWdCLEVBQ2pCO0VBekpIO0lBNEpJLHlCQUF3QjtJQUN4QixVQUFTO0lBQ1QsWUFBVztJQUNYLGdCQUFlO0lBQ2YsaUJBQWdCO0lBQ2hCLG1CQUFrQjtJQUNsQix1QkFBc0I7SUFDdEIsYUFBWTtJQUNaLG9CQUFtQjtJQUNuQix5RUFBd0U7SUFDeEUsbUJBQWtCO0lBQ2xCLGtCQUFpQjtJQUNqQix3QkFBdUIsRUFReEI7SUFoTEg7TUEyS00sMEVBQXlFO01BQ3pFLG9CQUFtQjtNQUNuQixZQUFXO01BQ1gsY0FBYSxFQUNkO0VBR0g7SUFsTEY7TUFvTE0sWUFBVztNQUNYLFlBQVc7TUFDWCxXQUFVLEVBS1g7TUEzTEw7UUF5TFEsaUJBQWdCLEVBQ2pCO0lBMUxQOztNQStMUSxZQUFXO01BQ1gsWUFBVztNQUNYLGlCQUFnQixFQUNqQjtJQWxNUDtNQW9NUSxnQkFBZSxFQUNoQjtJQXJNUDtNQXdNTSxZQUFXLEVBQ1osRUFBQTs7QUFJTDtFQUVJLDBCQUF5QjtFQUN6QixnQkFBZTtFQUNmLHVCQUFzQjtFQUN0QixtQkFBa0IsRUFDbkI7O0FBTkg7RUFTSSxnQkFBZSxFQUNoQjs7QUFWSDs7RUFlTSxnQkFBZSxFQUNoQjs7QUFoQkw7O0VBcUJJLHdCQUF1QjtFQUN2QixnQkFBZSxFQUNoQjs7QUF2Qkg7RUEwQkksa0JBQWlCO0VBQ2pCLGFBQVksRUFDYjs7QUFDRDtFQTdCRjtJQStCTyxlQUFjLEVBQ2hCLEVBQUE7O0FBaENMO0VBb0NJLGdCQUFlO0VBQ2Ysa0JBQWlCO0VBQ2pCLHFCQUFvQixFQUNyQjs7QUF2Q0g7RUEwQ0ksZ0JBQWUsRUFDaEI7O0FBM0NIO0VBOENJLG1CQUFrQjtFQUNsQixrQkFBaUIsRUFDbEI7O0FBaERIO0VBbURJLHdCQUF1QjtFQUN2QixtQkFBa0IsRUFDbkI7O0FBRUQ7RUF2REY7SUF5RE0sV0FBVSxFQUNYLEVBQUE7O0FBSUw7RUFDRSxpQkFBZ0I7RUFDaEIsa0JBQWlCO0VBQ2pCLG1CQUFrQixFQUNuQjs7QUNuWkQ7Ozs7R0FJRztBQUNIO0VBRUkscUJBQWE7RUFBYixjQUFhO0VBQ2Isd0JBQW1CO01BQW5CLG9CQUFtQjtFQUNuQix1QkFBOEI7TUFBOUIsK0JBQThCO0VBQzlCLHVCQUFtQjtNQUFuQixvQkFBbUI7RUFDbkIsZUFBYztFQUNkLGdCQUFlO0VBQ2YsaUJBQWdCO0VBQ2hCLG9CQUFlO01BQWYsZ0JBQWU7RUFDZixtQkFBa0I7RUFDbEIsV0FBVSxFQWFYO0VBeEJIO0lBY00sZ0RBQWdDO0lBQ2hDLGVBQWM7SUFDZCxZQUFXO0lBQ1gsbUJBQWtCO0lBQ2xCLE9BQU07SUFDTixZQUFXO0lBQ1gsV0FBVTtJQUNWLG1CQUNGO1FBREUsZUFDRixFQUFDO0VBdEJMO0lBdUJlLGNBQWEsRUFBSTs7QUF2QmhDO0VBMkJJLFdBQVU7RUFDVixpQkFBZ0IsRUFDakI7O0FBN0JIO0VBZ0NJLHNCQUFxQjtFQUNyQixpQkFBZ0IsRUFDakI7O0FBbENIO0VBcUNJLDBCQUF5QjtFQUN6Qix1QkFBc0I7RUFDdEIsZ0JBQWUsRUE4QmhCO0VBckVIO0lBMENNLG1CQUFrQixFQUNuQjtFQTNDTDtJQThDTSxpQkFBZ0IsRUFDakI7RUEvQ0w7SUFrRE0sdUJBQXNCO0lBQ3RCLGdDQUErQjtJQUMvQixpQkFBZ0IsRUFDakI7RUFyREw7SUF3RE0sYUFBNkIsRUFDOUI7RUF6REw7SUE0RE0sYUFBNkI7SUFDN0Isa0RBQWlELEVBQ2xEO0VBRUQ7SUFoRUo7TUFrRVEsa0JBQWlCLEVBQ2xCLEVBQUE7O0FBbkVQO0VBd0VJLDZEQUE0RDtFQUM1RCxnQkFBZSxFQTBDaEI7RUFuSEg7SUE0RU0sZ0JBQWUsRUFDaEI7RUE3RUw7SUFnRk0saUJBQWdCO0lBQ2hCLGFBQVk7SUFDWixnQkFBZSxFQW1CaEI7SUFyR0w7TUFxRlEsYUFBWTtNQUNaLGdDQUFpQjtNQUNqQixpQkFBZ0I7TUFDaEIsa0JBQWlCO01BQ2pCLGdCQUFlO01BQ2Ysb0JBQW1CLEVBQ3BCO0lBM0ZQO01BOEZRLGNBQWEsRUFDZDtJQS9GUDtNQW1HUSxpQkFBZ0IsRUFDakI7RUFwR1A7SUF3R00sYUFBaUI7SUFDakIsc0JBQXFCO0lBQ3JCLFdBQVU7SUFDVixzQkFBcUI7SUFDckIsa0JBQWlCLEVBTWxCO0lBbEhMO01BZ0hRLGdDQUFpQixFQUNsQjs7QUFqSFA7O0VBd0hNLGdCQUFlLEVBQ2hCOztBQXpITDtFQTRITSxpQkFBZ0IsRUFDakI7O0FBN0hMO0VBaUlJLGFBQVk7RUFDWixtQkFBa0I7RUFDbEIsc0JBQXFCO0VBQ3JCLHNCQUFxQjtFQUNyQixzQkFBcUIsRUE2QnRCO0VBbEtIO0lBeUlNLGdDQUFpQixFQUNsQjtFQTFJTDtJQTZJTSxnQ0FBaUIsRUFDbEI7RUE5SUw7SUFpSk0scUJBQW9CO0lBQ3BCLGdCQUFlO0lBQ2YsaUJBQWdCO0lBQ2hCLG9CQUFtQjtJQUNuQix1QkFBc0I7SUFDdEIsa0JBQWlCO0lBQ2pCLGlCQUFnQjtJQUNoQiwyQ0FBMEMsRUFTM0M7SUFqS0w7TUEySlEsMENBQXlDLEVBQzFDO0lBNUpQO01BK0pRLCtDQUEwQyxFQUMzQzs7QUFJUDtFQUVJLDBDQUFnQyxFQUNqQzs7QUFISDtFQU9NLGVBQWMsRUFLZjtFQVpMO0lBVVEsMEJBQWdCLEVBQ2pCOztBQVhQO0VBZU0sZUFBYyxFQUtmO0VBcEJMO0lBa0JRLGV4Q2xMZSxFd0NtTGhCOztBQW5CUDtFQXdCSSxlQUFjLEVBVWY7RUFsQ0g7SUE0Qk0sZUFBYyxFQUNmO0VBN0JMO0lBZ0NNLGV4Q2hNaUIsRXdDaU1sQjs7QUMxTUw7RUFDRSxtQkFBa0I7RUFDbEIscUJBQW9CO0VBQ3BCLG1CQUFrQixFQXFKbkI7RUF4SkQ7SUFPTSxhQUFZLEVBT2I7SUFOQztNQVJOO1FBU1EsYUFBWSxFQUtmLEVBQUE7SUFIQztNQVhOO1FBWVEsWUFBVyxFQUVkLEVBQUE7RUFkTDtJQWlCTSxXQUFVO0lBQ1YsU0FBUTtJQUNSLG1CQUFrQixFQUNuQjtFQXBCTDtJQXlCTSxhQUFZO0lBQ1osYUFBWSxFQVNiO0lBUkM7TUEzQk47UUE0QlEsWUFBVztRQUNYLFlBQVcsRUFNZCxFQUFBO0lBbkNMO01BaUNRLGFBQVksRUFDYjtFQWxDUDtJQXVDSSxhQUFZLEVBd0JiO0lBL0RIO01BMENNLG1CQUFrQjtNQUNsQixXQUFVO01BQ1YsVUFBUyxFQU1WO01BbERMO1FBK0NRLHlCQUF3QjtRQUN4Qix5QkFBd0IsRUFDekI7SUFHSDtNQXBESjtRQXFETSxZQUFXLEVBVWQ7UUEvREg7VUF3RFEsYUFBWTtVQUNaLGNBQWE7VUFDYixtQkFBa0I7VUFDbEIsZUFBYztVQUNkLGVBQWMsRUFDZixFQUFBO0VBN0RQO0lBa0VJLGdCQUFlO0lBQ2Ysa0JBQWlCO0lBQ2pCLHdCQUF1QjtJQUN2QixlekMvQ21CLEV5Q29EcEI7SUExRUg7TUF3RU0saUJBQWdCLEVBQ2pCO0VBekVMO0lBNkVJLDBCQUF5QjtJQUN6QixzQkFBcUI7SUFDckIsaUJBQWdCO0lBQ2hCLGdCQUFlO0lBQ2Ysb0JBQW1CO0lBQ25CLG1CQUFrQjtJQUNsQixxQkFBb0I7SUFDcEIsYUFBWSxFQTBEYjtJQTlJSDtNQXVGTSw4REFBNEQ7TUFDNUQsbUJBQWtCO01BQ2xCLFFBQU8sRUFDUjtJQTFGTDtNQTZGTSxtQkFBa0I7TUFDbEIsVUFBUztNQUNULFFBQU87TUFDUCxTQUFRO01BQ1IsWUFBVztNQUNYLGlDekMzRWlCO015QzRFakIsK0RBQTZELEVBQzlEO0lBcEdMO01BdUdNLFlBQVc7TUFDWCxzQkFBcUI7TUFDckIsbUJBQWtCO01BQ2xCLGFBQVk7TUFDWixTQUFRO01BQ1IsZ0JBQWU7TUFDZiwyRUFBaUU7TUFBakUsbUVBQWlFO01BQWpFLG1JQUFpRTtNQUNqRSxZQUFXO01BQ1gsYUFBWTtNQUNaLG1CQUFrQjtNQUNsQiwwQkFBeUI7TUFDekIsd0JBQXVCO01BQ3ZCLDhFQUFtRTtjQUFuRSxzRUFBbUU7TUFDbkUsb0JBQW1CLEVBQ3BCO0lBckhMO01BMEhRLFVBQVMsRUFDVjtJQTNIUDtNQThIUSx1RUFBNEQ7Y0FBNUQsK0RBQTRELEVBQzdEO0lBL0hQO01Ba0lRLGFBQVksRUFDYjtJQW5JUDtNQXVJTSxpQkFBZ0I7TUFDaEIsb0JBQW1CO01BQ25CLHdCQUF1QjtNQUN2QixlQUFjO01BQ2QsZ0JBQWU7TUFDZixpQkFBZ0IsRUFDakI7RUE3SUw7SUFpSkksa0JBQWlCLEVBQ2xCO0VBbEpIO0lBcUpJLGdCQUFlO0lBQ2Ysa0JBQWlCLEVBQ2xCOztBQ3ZKSDtFQUNFLGtCQUFpQjtFQUNqQixrQkFBaUIsRUFDbEI7O0FBRUQ7RUFDRSxhQUFZO0VBQ1osb0IxQ0VxQixFMENzTXRCO0VBMU1EO0lBS0ksdUZBRzJELEVBQzVEO0VBVEg7SUFZSSxtQkFBa0IsRUFDbkI7RUFiSDtJQWdCSSxrQkFBaUI7SUFDakIscUJBQW9CO0lBQ3BCLGlCQUFnQixFQW9DakI7SUF0REg7TUFxQk0sZ0JBQWU7TUFDZixvQkFBbUI7TUFDbkIsdUJBQXNCLEVBQ3ZCO0lBeEJMO01BMkJNLGdCQUFlO01BQ2YsZ0NBQThCO01BQzlCLHVCQUFzQjtNQUN0QixtQkFBa0I7TUFDbEIsaUJBQWdCLEVBQ2pCO0lBaENMO01BbUNNLGdDQUFpQjtNQUNqQixnQkFBZTtNQUNmLGlCQUFnQixFQUNqQjtJQXRDTDtNQXlDTSxnQ0FBaUIsRUFNbEI7TUEvQ0w7UUE0Q1EsYUFBWTtRQUNaLHNCQUFxQixFQUN0QjtJQTlDUDtNQW1EUSxpQkFBZ0IsRUFDakI7RUFwRFA7SUF5REksb0JBQW1CLEVBaUhwQjtJQTFLSDtNQTRETSxvQkFBZTtVQUFmLGdCQUFlO01BQ2Ysc0JBQXVCO1VBQXZCLHdCQUF1QjtNQUN2QixpQkFBZ0I7TUFDaEIsaUJBQWdCO01BQ2hCLG1CQUFrQixFQUNuQjtJQWpFTDtNQW9FTSxpQkFBZ0I7TUFDaEIsa0JBQWlCO01BQ2pCLGlCQUFnQjtNQUNoQixzQkFBcUIsRUFnQnRCO01BdkZMO1FBMEVRLGVBQWMsRUFDZjtNQUdEO1FBOUVOO1VBK0VRLGVBQWM7VUFDZCxlQUFjO1VBQ2QsZUFBYyxFQU1qQjtVQXZGTDtZQW9GVSxrQkFBaUIsRUFDbEIsRUFBQTtJQXJGVDtNQTBGTSxnQkFBZTtNQUNmLGVBQWM7TUFDZCxtQkFBa0I7TUFDbEIsY0FBYTtNQUNiLG1CQUFrQixFQUNuQjtJQS9GTDtNQWtHTSxnQkFBZTtNQUNmLGVBQWM7TUFDZCxtQkFBa0I7TUFDbEIsaUJBQWdCLEVBQ2pCO0lBdEdMO01BeUdNLG1CQUFrQjtNQUNsQixlQUFjO01BQ2QsMEJBQXlCO01BQ3pCLFdBQVU7TUFDVixnQkFBZTtNQUNmLDBCQUFpQjtTQUFqQix1QkFBaUI7VUFBakIsc0JBQWlCO2NBQWpCLGtCQUFpQixFQTJEbEI7TUF6S0w7UUFpSFEsbUJBQWtCO1FBQ2xCLFlBQVc7UUFDWCxPQUFNO1FBQ04sU0FBUTtRQUNSLFVBQVM7UUFDVCxRQUFPO1FBQ1AsNkVBQTRFLEVBQzdFO01BeEhQO1FBNkhRLHNCQUFxQixFQVl0QjtRQXpJUDtVQWdJVSxrQkFBaUI7VUFDakIsbUJBQWtCO1VBQ2xCLHdFQUFxRTtVQUNyRSxtQ0FBMEI7a0JBQTFCLDJCQUEwQixFQUMzQjtRQXBJVDtVQXVJVSxXQUFVLEVBQ1g7TUF4SVQ7UUE2SVUsa0JBQWlCO1FBQ2pCLG1CQUFrQjtRQUNsQix3RUFBcUU7UUFDckUsbUNBQTBCO2dCQUExQiwyQkFBMEIsRUFDM0I7TUFqSlQ7UUFvSlUsV0FBVSxFQUNYO01BckpUO1FBeUpRLHVGQUFzRjtRQUN0RixzQkFBcUI7UUFDckIsWUFBVztRQUNYLGFBQVk7UUFDWixZQUFXO1FBQ1gsVUFBUztRQUNULFVBQVM7UUFDVCxlQUFjO1FBQ2QsbUJBQWtCO1FBQ2xCLFlBQVc7UUFDWCx3QkFBdUIsRUFDeEI7TUFwS1A7UUF1S1EsOEJBQTZCLEVBQzlCO0VBeEtQO0lBNktJLGVBQWM7SUFDZCxnQkFBZTtJQUNmLGlCQUFnQjtJQUNoQixpQkFBZ0I7SUFDaEIsaUJBQWdCO0lBQ2hCLG1CQUFrQjtJQUNsQixrQkFBaUI7SUFDakIscUJBQW9CLEVBcUJyQjtJQXpNSDtNQXVMTSxtQkFBa0I7TUFDbEIsZ0JBQWU7TUFDZixrQkFBaUI7TUFDakIsUUFBTztNQUNQLFNBQVE7TUFDUixrQkFBaUI7TUFDakIsaUJBQWdCLEVBQ2pCO0lBOUxMO01BaU1NLGVBQWM7TUFDZCxpQkFBZ0IsRUFNakI7TUF4TUw7UUFxTVEsc0JBQXFCO1FBQ3JCLGdDQUFpQixFQUNsQjs7QUM1TVA7RUFDRSw2REFBNEQ7RUFDNUQsb0IzQ2NxQjtFMkNickIsZUFBYztFQUNkLGtCQUFpQjtFQUNqQixxQkFBb0IsRUE4R3JCO0VBbkhEO0lBUUksaUJBQWdCLEVBMEdqQjtJQWxISDtNQVdNLFlBQVc7TUFDWCxZQUFXLEVBQ1o7SUFiTDtNQWdCTSxZQUFXO01BQ1gsV0FBVTtNQUNWLG9CQUFtQjtNQUNuQixtQkFBa0IsRUE4Rm5CO01BakhMO1FBc0JRLCtEQUE4RDtRQUM5RCxzQkFBcUI7UUFDckIsYUFBWTtRQUNaLFlBQVc7UUFDWCxZQUFXO1FBQ1gsZUFBYztRQUNkLG1CQUFrQjtRQUNsQixXQUFVO1FBQ1YsVUFBUyxFQUNWO01BL0JQO1FBa0NRLGdDQUErQjtRQUMvQixZQUFXO1FBQ1gsbUJBQWtCO1FBQ2xCLFlBQVc7UUFDWCxVQUFTO1FBQ1QsYUFBWTtRQUNaLGVBQWMsRUFDZjtNQXpDUDtRQTRDUSw4QkFBNkIsRUFDOUI7TUE3Q1A7UUFnRFEsOEJBQTZCLEVBQzlCO01BakRQO1FBb0RRLDhCQUE2QixFQUM5QjtNQXJEUDtRQXdEUSxhQUFZLEVBS2I7UUE3RFA7VUEyRFUsY0FBYSxFQUNkO01BNURUO1FBZ0VRLGlCQUFnQjtRQUNoQixnQkFBZTtRQUNmLG1CQUFrQjtRQUNsQix1QkFBc0IsRUFzQnZCO1FBekZQO1VBc0VVLHdCQUF1QjtVQUN2QixpQkFBZ0I7VUFDaEIsZ0JBQWU7VUFDZixrQkFBaUI7VUFDakIsbUJBQWtCO1VBQ2xCLHNCQUFxQjtVQUNyQiwwQkFBeUIsRUFDMUI7UUE3RVQ7VUFrRlUsZUFBd0I7VUFDeEIsc0JBQXFCLEVBS3RCO1VBeEZUO1lBc0ZZLDBDQUFpQztvQkFBakMsa0NBQWlDLEVBQ2xDO01BdkZYO1FBNEZRLGdCQUFlO1FBQ2YsbUJBQWtCO1FBQ2xCLGVBQWM7UUFDZCxnQkFBZTtRQUNmLGlCQUFnQjtRQUNoQix3QkFBdUIsRUFDeEI7TUFHRDtRQXJHTjtVQXNHUSxZQUFXO1VBQ1gsWUFBVyxFQVVkO1VBakhMO1lBMEdVLG9CQUFtQixFQUNwQjtVQTNHVDtZQThHVSxjQUFhLEVBQ2QsRUFBQTs7QUFLVDtFQUNFLG1CQUFrQixFQVNuQjtFQVBDO0lBSEY7TUFJSSxlQUFjLEVBTWpCLEVBQUE7RUFWRDtJQVFJLGdCQUFlLEVBQ2hCOztBQzdISDtFQUNFLCtENUNBbUU7RTRDQ25FLG9CQUFtQjtFQUNqQiw4Q0FBeUM7RUFDekMsbUJBQWtCO0VBQ2xCLGFBQVk7RUFDWixtQkFBa0I7RUFDbEIsbUJBQWtCO0VBQ2xCLGVBQWMsRUF3R2pCO0VBaEhEO0lBV0ksbUJBQWtCO0lBQ2xCLGdCQUFlO0lBQ2YsbUJBQWtCO0lBQ2xCLGlCQUFnQjtJQUNoQix1QkFBc0IsRUFNdkI7SUFyQkg7TUFtQk0sY0FBYSxFQUNkO0VBcEJMO0lBd0JJLHdCQUF1QixFQUN4QjtFQXpCSDtJQTRCSSxnQkFBZSxFQUNoQjtFQTdCSDtJQWdDSSxpQkFBZ0I7SUFDaEIsZUFBYyxFQUNmO0VBbENIO0lBcUNJLDBCQUF5QjtJQUN6QixZQUFXO0lBQ1gsb0JBQW1CO0lBQ25CLGtCQUFpQjtJQUNqQixxQkFBb0I7SUFDcEIsaUJBQWdCO0lBQ2hCLGVBQWM7SUFDZCwwQkFBeUI7SUFDekIsa0JBQWlCO0lBQ2pCLGlCQUFnQjtJQUNoQixzQkFBcUI7SUFDckIsaURBQWdELEVBYWpEO0lBN0RIO01BbURNLHdCQUF1QjtNQUN2QixpQkFBZ0I7TUFDaEIsaUJBQWdCLEVBQ2pCO0lBdERMO01BeURNLDBCQUFxQztNQUVyQyx5Q0FBZ0MsRUFDakM7RUFHSDtJQS9ERjtNQWdFSSxjQUFhLEVBZ0RoQixFQUFBO0VBaEhEO0lBb0VJLG9CQUFtQjtJQUNuQixpQkFBZ0I7SUFDaEIsaUJBQWdCO0lBQ2hCLGVBQWMsRUF3Q2Y7SUEvR0g7TUEwRU0sb0JBQW1CO01BQ25CLGlCQUFnQjtNQUNoQixnQkFBZTtNQUNmLHVCQUFzQjtNQUN0QixlQUFjO01BQ2QsaUJBQWdCO01BQ2hCLFVBQVM7TUFDVCxnQkFBZSxFQTZCaEI7TUE5R0w7UUFvRlEsY0FBYSxFQUNkO01BckZQO1FBd0ZRLCtCQUE4QjtRQUM5QixnQkFBZTtRQUNmLGFBQVk7UUFDWixZQUFXO1FBQ1gsc0JBQXFCO1FBQ3JCLHFCQUFvQjtRQUNwQixXQUFVO1FBQ1YsNENBQTJDO1FBQzNDLGtCQUFpQixFQUtsQjtRQXJHUDtVQW1HVSxXQUFVLEVBQ1g7TUFwR1Q7UUF3R1EsaUJBQWdCLEVBS2pCO1FBN0dQO1VBMkdVLG9DQUEyQjtrQkFBM0IsNEJBQTJCLEVBQzVCOztBQzVHVDtFQUNFLGNBQWEsRUFDZDs7QUFFRDtFQUNFLDhCQUE2QjtFQUM3QixrQkFBaUI7RUFDakIscUJBQW9CO0VBQ3BCLGlCQUFnQjtFQUNoQiw2RDdDVGdFLEU2QzhQakU7RUExUEQ7SUFRSSxjQUFhO0lBQ2IsWUFBVztJQUNYLGFBQVksRUFDYjtFQVhIO0lBY0kscUJBQWE7SUFBYixjQUFhO0lBQ2IsdUJBQThCO1FBQTlCLCtCQUE4QixFQWdEL0I7SUEvREg7TUFvQlEsY0FBYSxFQUNkO0lBckJQOztNQTBCTSxZQUFPO1VBQVAsUUFBTyxFQUNSO0lBM0JMO01BOEJNLGlCQUFnQjtNQUNoQixpQkFBZ0I7TUFDaEIsZ0JBQWUsRUE4QmhCO01BOURMO1FBbUNRLGlCQUFnQixFQUNqQjtNQXBDUDtRQXVDUSxlQUFjO1FBQ2QsZUFBYztRQUNkLGlCQUFnQjtRQUNoQixnQkFBZTtRQUNmLG9CQUFtQjtRQUNuQix1QkFBc0IsRUFDdkI7TUE3Q1A7UUFnRFEsZUFBYztRQUNkLGdCQUFlO1FBQ2Ysd0JBQXVCO1FBQ3ZCLGVBQWM7UUFDZCxpQkFBZ0I7UUFDaEIsZ0JBQWU7UUFDZixzQkFBcUI7UUFDckIsK0Q3QzFENkQsRTZDZ0U5RDtRQTdEUDtVQTBEVSxzQkFBcUI7VUFDckIsZTdDdERhLEU2Q3VEZDtFQTVEVDtJQWtFSSxpQkFBZ0I7SUFDaEIscUJBQWE7SUFBYixjQUFhLEVBNENkO0lBL0dIO01BdUVNLGNBQWEsRUFDZDtJQXhFTDtNQTJFTSxtQkFBYztVQUFkLGVBQWMsRUFDZjtJQTVFTDtNQStFTSxZQUFPO1VBQVAsUUFBTztNQUNQLGtCQUFpQixFQUNsQjtJQWpGTDtNQW9GTSxxQkFBYTtNQUFiLGNBQWE7TUFDYixhQUFZLEVBQ2I7SUF0Rkw7TUF5Rk0sNEVBQTJFO01BQzNFLHNCQUFxQjtNQUNyQixtQkFBa0I7TUFDbEIsaUJBQWdCLEVBa0JqQjtNQTlHTDtRQStGUSxnQkFBZTtRQUNmLGNBQWE7UUFDYixtQkFBa0I7UUFDbEIsa0JBQWlCO1FBQ2pCLGlCQUFnQjtRQUNoQix1QkFBc0IsRUFDdkI7TUFyR1A7UUF3R1EsK0Q3QzNHNkQ7UTZDNEc3RCxnQkFBZTtRQUNmLGVBQWM7UUFDZCx3QkFBdUI7UUFDdkIsaUJBQWdCLEVBQ2pCO0VBSUw7SUFqSEY7TUFrSEksa0JBQWlCLEVBd0lwQjtNQTFQRDtRQXFITSxvQkFBZTtZQUFmLGdCQUFlO1FBQ2YscUJBQTJCO1lBQTNCLDRCQUEyQixFQVE1QjtRQTlITDtVQXlIUSxtQkFBYztjQUFkLGVBQWM7VUFDZCxvQkFBbUIsRUFDcEI7TUEzSFA7UUFpSU0sMkJBQXNCO1lBQXRCLHVCQUFzQixFQVV2QjtRQTNJTDs7VUFxSVEsbUJBQWM7Y0FBZCxlQUFjLEVBQ2Y7UUF0SVA7VUF5SVEsZ0JBQWUsRUFDaEIsRUFBQTtFQUlMO0lBOUlGO01BaUpRLGNBQWEsRUFDZDtJQWxKUDtNQXFKUSxrQkFBYTtVQUFiLGNBQWE7TUFDYixvQkFDRixFQUFDO0lBdkpQO01BMEpRLGVBQWMsRUFDZjtJQTNKUDtNQStKTSxjQUFhLEVBQ2QsRUFBQTtFQUdIO0lBbktGO01BcUtNLGtCQUFhO1VBQWIsY0FBYSxFQUNkO0lBdEtMO01BeUtNLGVBQWMsRUFDZixFQUFBO0VBMUtMO0lBOEtJLGdCQUFlO0lBQ2YsZTdDL0ptQjtJNkNnS25CLDhCQUE2QjtJQUM3QixpQkFBZ0I7SUFDaEIsa0JBQWlCO0lBQ2pCLG1CQUFrQjtJQUNsQixxQkFBYTtJQUFiLGNBQWE7SUFDYix1QkFBOEI7UUFBOUIsK0JBQThCO0lBQzlCLG9CQUFlO1FBQWYsZ0JBQWUsRUFtRWhCO0lBelBIO01BeUxNLHFCQUFhO01BQWIsY0FBYTtNQUNiLG1CQUFjO1VBQWQsZUFBYztNQUNkLGlCQUFnQjtNQUNoQixnQkFBZSxFQUNoQjtJQTdMTDtNQWdNTSxrQkFBaUIsRUFDbEI7SUFqTUw7TUFvTU0sa0JBQWlCO01BQ2pCLG1CQUFrQjtNQUNsQixtQkFBa0I7TUFDbEIsa0JBQWlCLEVBTWxCO01BSkM7UUF6TU47VUEwTVEsWUFBVztVQUNYLGdCQUFlLEVBRWxCLEVBQUE7SUE3TUw7TUFnTk0sZUFBYyxFQUtmO01Bck5MO1FBbU5RLGU3Q25NZSxFNkNvTWhCO0lBcE5QOzs7TUEwTk0sa0JBQWlCLEVBQ2xCO0lBM05MO01BOE5NLG1CQUFjO1VBQWQsZUFBYyxFQUNmO0lBL05MO01Ba09NLFlBQVcsRUFDWjtJQW5PTDtNQXNPTSxtQkFBa0I7TUFDbEIsYUFBWTtNQUNaLFlBQVc7TUFDWCxzQkFBcUI7TUFDckIsYUFBWTtNQUNaLHFCQUFhO01BQWIsY0FBYTtNQUNiLHVCQUFtQjtVQUFuQixvQkFBbUI7TUFDbkIsc0JBQXVCO1VBQXZCLHdCQUF1QixFQVV4QjtNQXZQTDtRQWdQUSxjQUFhLEVBQ2Q7TUFqUFA7UUFvUFEsY0FBYSxFQUNkOztBQ3pQUDtFQUNFO0lBQ0UsY0FBYSxFQUNkO0VBQ0Q7OztJQUdFLGNBQWEsRUFDZCxFQUFBOztBQUdIO0VBQ0U7SUFDRSxjQUFhLEVBQ2Q7RUFDRDs7O0lBR0UsY0FBYSxFQUNkLEVBQUE7O0FBR0g7RUFDRTtJQUNFLGNBQWEsRUFDZDtFQUNEOzs7SUFHRSxjQUFhLEVBQ2QsRUFBQTs7QUFHSDtFQUNFO0lBQ0UsY0FBYSxFQUNkO0VBQ0Q7OztJQUdFLGNBQWEsRUFDZCxFQUFBOztBQ3pDSDs7RUFFRSxpQkFBZ0I7RUFDaEIsbUJBQWtCO0VBQ2xCLG1CQUFrQjtFQUNsQix3QkFBdUI7RUFDdkIsbUJBQWtCO0VBQ2xCLHlCQUF3QjtFQUN4QixnQkFBZTtFQUNmLG1DQUFrQztFQUNsQyxZQUFXO0VBQ1gseUVBQWlFO0VBQ2pFLG9CQUFtQjtFQUNuQix3QkFBdUIsRUFtUHhCO0VBaFFEOztJQWdCSSxnQkFBZSxFQUNoQjtFQWpCSDs7O0lBcUJJLDBFQUFpRTtJQUNqRSxvQkFBbUI7SUFDbkIsWUFBVztJQUNYLGNBQWEsRUFDZDtFQXpCSDs7OztJQThCSSwrQ0FBOEM7SUFDOUMsb0JBQTZCO0lBQzdCLGNBQWEsRUFDZDtFQWpDSDs7SUFvQ0ksc0IvQzNCbUI7SStDNEJuQix3QkFBdUI7SUFDdkIsZS9DN0JtQjtJK0M4Qm5CLGtCQUFpQixFQW1CbEI7SUExREg7OztNQTJDTSxzQkFBK0I7TUFDL0IscUMvQ25DaUIsRStDb0NsQjtJQTdDTDs7TUFnRE0seUNBQXdDO01BQ3hDLGVBQWMsRUFRZjtNQXpETDs7O1FBcURRLGFBQVk7UUFDWixzQkFBaUM7UUFDakMsc0NBQXdCLEVBQ3pCO0VBeERQOzs7SUE4REksb0IvQ3BEbUIsRStDZ0VwQjtJQTFFSDs7Ozs7OztNQW1FTSxvQkFBbUMsRUFDcEM7SUFwRUw7OztNQXVFTSxzQi9DN0RpQjtNK0M4RGpCLGUvQzlEaUIsRStDK0RsQjtFQXpFTDs7SUE2RUksb0IvQy9EbUIsRStDc0VwQjtJQXBGSDs7OztNQWtGTSxvQkFBbUIsRUFDcEI7RUFuRkw7O0lBdUZJLG9CQUFtQjtJQUNuQixlL0MvRW1CLEUrQ3NGcEI7SUEvRkg7Ozs7TUE2Rk0sb0JBQThCLEVBQy9CO0VBOUZMOztJQWtHSSxvQkFBbUIsRUFPcEI7SUF6R0g7Ozs7TUF1R00sb0JBQStCLEVBQ2hDO0VBeEdMOztJQTRHSSxvQi9DakdtQixFK0MwR3BCO0lBckhIOzs7Ozs7TUFtSE0sb0JBQStCLEVBQ2hDO0VBcEhMOztJQXdISSxrQkFBaUI7SUFFakIsZS9DakhtQixFK0M2SXBCO0lBdEpIOzs7O01BK0hNLGUvQ3RIaUI7TStDd0hqQixlQUF3QixFQUN6QjtJQWxJTDs7OztNQXVJTSxrQkFBaUIsRUFFbEI7SUF6SUw7O01BNElNLGUvQ25JaUI7TStDb0lqQixrQkFBaUIsRUFRbEI7TUFySkw7Ozs7UUFrSlEsZUFBd0I7UUFDeEIsa0JBQWlCLEVBQ2xCO0VBcEpQOztJQXlKSSxvQi9DckltQixFK0MwSnBCO0lBOUtIOzs7O01BOEpNLG9CL0MxSWlCLEUrQzJJbEI7SUEvSkw7O01Ba0tNLGUvQzlJaUI7TStDK0lqQix3QkFBdUIsRUFVeEI7TUE3S0w7Ozs7OztRQTBLUSxlQUF3QjtRQUN4Qix3QkFBdUIsRUFDeEI7RUE1S1A7O0lBaUxJLGFBQVksRUFDYjtFQWxMSDs7SUFxTEksb0JBQW1CO0lBRW5CLGVBQWMsRUFVZjtJQWpNSDs7Ozs7O01BOExNLGVBQWM7TUFDZCxvQkFBK0IsRUFDaEM7RUFoTUw7O0lBb01JLDBCQUF5QixFQUsxQjtJQXpNSDs7TUF1TU0sMEJBQXlCLEVBQzFCO0VBeE1MOztJQTRNSSxpQkFBZ0I7SUFDaEIsbUJBQWtCO0lBQ2xCLGtCQUFpQjtJQUNqQixxQkFBb0I7SUFDcEIsd0JBQXVCLEVBQ3hCO0VBak5IOztJQW9OSSxxQkFBb0I7SUFDcEIsa0JBQWlCO0lBQ2pCLHFCQUFvQjtJQUNwQixpQkFBZ0I7SUFDaEIsZ0JBQWU7SUFDZix3QkFBdUI7SUFDdkIsaUJBQWdCLEVBT2pCO0lBak9IOztNQTZOTSx3QkFBdUI7TUFDdkIsZ0JBQWU7TUFDZixpQkFBZ0IsRUFDakI7RUFoT0w7O0lBb09JLDBCQUF5QixFQUMxQjtFQXJPSDs7SUF3T0ksNkQvQ3hPOEQ7SStDeU85RCxpQkFBZ0I7SUFDaEIsZ0JBQWU7SUFDZixrQkFBaUI7SUFDakIsaUJBQWdCO0lBQ2hCLDBCQUF5QjtJQUN6QixpQkFBZ0I7SUFDaEIsMENBQThCO0lBQzlCLGVBQWM7SUFDZCxpQkFBZ0IsRUFjakI7SUEvUEg7O01Bb1BNLHNCQUFxQixFQUN0QjtJQXJQTDs7OztNQTBQTSxvQkFBbUI7TUFDbkIsc0JBQW1DO01BQ25DLCtDQUE4QyxFQUMvQzs7QUM3UEw7RUFDRSxjQUFhO0VBQ2IsbUJBQWtCLEVBMkduQjtFQTdHRDs7SUFNSSxtQkFBa0I7SUFDbEIsT0FBTTtJQUNOLFNBQVE7SUFDUixVQUFTO0lBQ1QsUUFBTztJQUNQLGtCQUFpQjtJQUNqQixtQkFBa0IsRUFDbkI7RUFiSDtJQWdCSSxTQUFRO0lBQ1IsbUJBQWtCO0lBQ2xCLGlCQUFnQjtJQUNoQixxQkFBb0I7SUFDcEIsMEVBQXlFO0lBQ3pFLHVCQUFzQixFQUN2QjtFQXRCSDtJQTBCTSxXQUFVO0lBQ1YsbUJBQWtCO0lBQ2xCLE9BQU07SUFDTixVQUFTO0lBQ1QsU0FBUTtJQUNSLFFBQU87SUFDUCx3QkFBdUI7SUFDdkIsa0JBQWlCLEVBQ2xCO0VBbENMO0lBcUNNLHVCQUFzQjtJQUN0Qix1QkFBc0I7SUFDdEIsbUJBQWtCO0lBQ2xCLE9BQU07SUFDTixTQUFRO0lBQ1IsUUFBTztJQUNQLFVBQVM7SUFDVCxpQkFBZ0I7SUFDaEIsaUJBQWdCO0lBQ2hCLG9CQUFtQjtJQUNuQixzQkFBcUI7SUFDckIsV0FBVTtJQUNWLFVBQVM7SUFDVCxVQUFTLEVBaUNWO0lBbkZMO01BcURRLG9CQUFtQjtNQUNuQixtQkFBa0I7TUFDbEIsT0FBTTtNQUNOLFVBQVM7TUFDVCxRQUFPO01BQ1AsWUFBVztNQUNYLFlBQVc7TUFDWCxlQUFjLEVBQ2Y7SUE3RFA7TUFnRVEsZUFBYztNQUNkLDBCQUF5QjtNQUN6QixtQkFBa0IsRUFnQm5CO01BbEZQO1FBcUVVLHdCQUF1QjtRQUN2Qix1QkFBc0I7UUFDdEIsZUFBYztRQUNkLGVBQWM7UUFDZCxtQkFBa0I7UUFDbEIsT0FBTTtRQUNOLFFBQU87UUFDUCxVQUFTO1FBQ1QsWUFBVztRQUNYLGtCQUFpQjtRQUNqQixrQkFBaUI7UUFDakIsbUJBQWtCLEVBQ25CO0VBakZUO0lBdUZJLFdBQVU7SUFDVixrQkFBaUI7SUFDakIsVUFBUztJQUNULFNBQVE7SUFDUixtQkFBa0I7SUFDbEIscUVBQTJEO0lBQzNELGtCQUFpQjtJQUNqQixXQUFVO0lBQ1YscUJBQVk7SUFBWixhQUFZLEVBYWI7SUE1R0g7TUFrR00sMkRBQTBEO01BQzFELHNCQUFxQjtNQUNyQixZQUFXO01BQ1gsYUFBWTtNQUNaLGVBQWM7TUFDZCxZQUFXO01BQ1gsc0JBQXFCO01BQ3JCLFlBQVc7TUFDWCxtQkFBa0IsRUFDbkI7O0FDM0dMOzs7O3FFQUlxRTtBQUVyRTtFQUNDLHVCQUFzQjtFQUN0QixtQkFBa0IsRUFDbEI7O0FBRUQ7b0NBQ29DO0FBQ3BDO0VBQ0Msd0NBQXVDO0VBQ3ZDLGVBQWMsRUFDZDs7QUFDRDtFQUNDLGVBQWMsRUFDZDs7QUFDRDs7OztFQUlDLHdDQUF1QztFQUN2QyxlQUFjLEVBQ2Q7O0FBQ0Q7RUFDQywwQkFBeUIsRUFDekI7O0FBQ0Q7RUFDQywwQkFBeUI7RUFDekIsb0JBQW1CO0VBQ25CLGVBQWMsRUFDZDs7QUFDRDtFQUNDLGVBQWMsRUFDZDs7QUFDRDtFQUNDLDBCQUF5QjtFQUN6QixvQkFBbUI7RUFDbkIsZUFBYztFQUNkLGtCQUFpQixFQUNqQjs7QUFDRDtFQUNDLGVBQWMsRUFDZDs7QUFFRDtvQ0FDb0M7QUFDcEM7Ozs7OztFQVNDLDBCQUF5QjtFQUN6QixvQkFBbUI7RUFDbkIsb0JBQW1CO0VBQ25CLGVBQWMsRUFDZDs7QUFDRDs7Ozs7OztFQU9DLGVBQWM7RUFDZCxzQkFBcUIsRUFDckI7O0FBQ0Q7Ozs7Ozs7O0VBUUMsMEJBQXlCO0VBQ3pCLG9CQUFtQjtFQUNuQixvQkFBbUI7RUFDbkIsZUFBYyxFQUNkOztBQUNEOzs7Ozs7Ozs7O0VBVUMsZUFBYztFQUNkLHNCQUFxQixFQUNyQjs7QUFFRDtFQUNDLGdDQUF5QyxFQUN6Qzs7QUFDRDs7Ozs7O0VBTUMsMEJBQXlCO0VBQ3pCLG9CQUFtQjtFQUNuQixvQkFBbUI7RUFDbkIsZUFBYyxFQUNkOztBQUNEOztFQUVDLGdCQUFlO0VBQ2YsMEJBQXlCLEVBQ3pCOztBQUNEOzs7RUFHQyxlQUFjO0VBQ2Qsc0JBQXFCLEVBQ3JCOztBQUVEO29DQUNvQztBQUNwQzs7O0VBR0MsMEJBQXlCO0VBQ3pCLG9CQUFtQjtFQUNuQixlQUFjLEVBQ2Q7O0FBQ0Q7RUFDQywwQkFBeUI7RUFDekIsb0JBQW1CLEVBQ25COztBQUNEOzs7RUFHQyxlQUFjLEVBQ2Q7O0FBQ0Q7OztFQUdDLDBCQUF5QjtFQUN6QixvQkFBbUI7RUFDbkIsZUFBYyxFQUNkOztBQUNEOzs7RUFHQyxlQUFjLEVBQ2Q7O0FBQ0Q7OztFQUdDLGVBQWMsRUFDZDs7QUFDRDs7O0VBR0Msa0JBQWlCLEVBQ2pCOztBQUNEOzs7RUFHQyxZQUFXO0VBQ1gsMEJBQXdCO0VBQUUsa0JBQWtCO0VBQzVDLG9CQUFtQixFQUNuQjs7QUFDRDs7O0VBR0MsYUFBWTtFQUNaLDBCQUF3QjtFQUFFLGtCQUFrQjtFQUM1Qyx1QkFBc0IsRUFDdEI7O0FBQ0Q7RUFDQywwQkFBd0I7RUFBRSw4QkFBOEIsRUFDeEQ7O0FBRUQ7b0NBQ29DO0FBRXBDLHVCQUF1QjtBQUN2QjtFQUNDLFlBQVc7RUFDWCxhQUFZLEVBQ1o7O0FBQ0Q7O0VBRUMsNERBQTJELEVBQzNEOztBQUNEO0VBQ0MsNERBQTJELEVBQzNEOztBQUNEOzs7O0VBSUMsNERBQTJELEVBQzNEOztBQUNEOztFQUVDLDREQUEyRCxFQUMzRDs7QUFDRDs7RUFFQyw0REFBMkQsRUFDM0Q7O0FBQ0Q7O0VBRUMsNERBQTJELEVBQzNEOztBQUNEO0VBQ0MsNERBQTJELEVBQzNEOztBQUVELGlCQUFpQjtBQUNqQjtFQUFpQiwrQkFBOEIsRUFBSTs7QUFDbkQ7RUFBcUIseUJBQXdCLEVBQUk7O0FBQ2pEO0VBQXNCLDZCQUE0QixFQUFJOztBQUN0RDtFQUFxQiw2QkFBNEIsRUFBSTs7QUFDckQ7RUFBc0IsNkJBQTRCLEVBQUk7O0FBQ3REO0VBQXFCLDZCQUE0QixFQUFJOztBQUNyRDtFQUFzQiw2QkFBNEIsRUFBSTs7QUFDdEQ7RUFBcUIsNkJBQTRCLEVBQUk7O0FBQ3JEO0VBQXNCLDhCQUE2QixFQUFJOztBQUN2RDtFQUF1Qiw4QkFBNkIsRUFBSTs7QUFDeEQ7RUFBdUIsOEJBQTZCLEVBQUk7O0FBQ3hEO0VBQXdCLDZCQUE0QixFQUFJOztBQUN4RDtFQUF5QixpQ0FBZ0MsRUFBSTs7QUFDN0Q7RUFBd0IsaUNBQWdDLEVBQUk7O0FBQzVEO0VBQXlCLGlDQUFnQyxFQUFJOztBQUM3RDtFQUF3QixpQ0FBZ0MsRUFBSTs7QUFDNUQ7RUFBeUIsaUNBQWdDLEVBQUk7O0FBQzdEO0VBQXdCLGlDQUFnQyxFQUFJOztBQUM1RDtFQUF5QixrQ0FBaUMsRUFBSTs7QUFDOUQ7RUFBMEIsa0NBQWlDLEVBQUk7O0FBQy9EO0VBQTBCLGtDQUFpQyxFQUFJOztBQUMvRDtFQUFxQiw2QkFBNEIsRUFBSTs7QUFDckQ7RUFBc0IsaUNBQWdDLEVBQUk7O0FBQzFEO0VBQXFCLGlDQUFnQyxFQUFJOztBQUN6RDtFQUFzQixpQ0FBZ0MsRUFBSTs7QUFDMUQ7RUFBcUIsaUNBQWdDLEVBQUk7O0FBQ3pEO0VBQXNCLGlDQUFnQyxFQUFJOztBQUMxRDtFQUFxQixpQ0FBZ0MsRUFBSTs7QUFDekQ7RUFBc0Isa0NBQWlDLEVBQUk7O0FBQzNEO0VBQXVCLGtDQUFpQyxFQUFJOztBQUM1RDtFQUF5QixrQ0FBaUMsRUFBSTs7QUFDOUQ7RUFBdUIsa0NBQWlDLEVBQUk7O0FBQzVEO0VBQXlCLGtDQUFpQyxFQUFJOztBQUM5RDtFQUF5QixrQ0FBaUMsRUFBSTs7QUFDOUQ7RUFBeUIsa0NBQWlDLEVBQUk7O0FBQzlEO0VBQXlCLGtDQUFpQyxFQUFJOztBQUM5RDtFQUF5QixrQ0FBaUMsRUFBSTs7QUFDOUQ7RUFBMEIsK0JBQThCLEVBQUk7O0FBQzVEO0VBQTJCLGlDQUFnQyxFQUFJOztBQUMvRDtFQUEwQixpQ0FBZ0MsRUFBSTs7QUFDOUQ7RUFBMkIsaUNBQWdDLEVBQUk7O0FBQy9EO0VBQTBCLGlDQUFnQyxFQUFJOztBQUM5RDtFQUEyQixpQ0FBZ0MsRUFBSTs7QUFDL0Q7RUFBMEIsaUNBQWdDLEVBQUk7O0FBQzlEO0VBQTJCLGtDQUFpQyxFQUFJOztBQUNoRTtFQUE0QixrQ0FBaUMsRUFBSTs7QUFDakU7RUFBOEIsa0NBQWlDLEVBQUk7O0FBQ25FO0VBQTRCLGtDQUFpQyxFQUFJOztBQUNqRTtFQUE4QixrQ0FBaUMsRUFBSTs7QUFDbkU7RUFBOEIsa0NBQWlDLEVBQUk7O0FBQ25FO0VBQThCLGtDQUFpQyxFQUFJOztBQUNuRTtFQUE4QixrQ0FBaUMsRUFBSTs7QUFDbkU7RUFBOEIsa0NBQWlDLEVBQUk7O0FBQ25FO0VBQWdDLDZCQUE0QixFQUFJOztBQUNoRTtFQUFnQyxpQ0FBZ0MsRUFBSTs7QUFDcEU7RUFBZ0MsaUNBQWdDLEVBQUk7O0FBQ3BFO0VBQWdDLGlDQUFnQyxFQUFJOztBQUNwRTtFQUEyQixpQ0FBZ0MsRUFBSTs7QUFDL0Q7RUFBMkIsaUNBQWdDLEVBQUk7O0FBQy9EO0VBQTJCLGlDQUFnQyxFQUFJOztBQUMvRDtFQUEyQixrQ0FBaUMsRUFBSTs7QUFDaEU7RUFBNEIsa0NBQWlDLEVBQUk7O0FBQ2pFO0VBQTRCLGtDQUFpQyxFQUFJOztBQUNqRTtFQUE0QixrQ0FBaUMsRUFBSTs7QUFDakU7RUFBNEIsa0NBQWlDLEVBQUk7O0FBQ2pFO0VBQW1CLDZCQUE0QixFQUFJOztBQUNuRDtFQUF3QixpQ0FBZ0MsRUFBSTs7QUFDNUQ7RUFBbUIsaUNBQWdDLEVBQUk7O0FBQ3ZEO0VBQWtCLGlDQUFnQyxFQUFJOztBQUN0RDtFQUFtQixpQ0FBZ0MsRUFBSTs7QUFDdkQ7RUFBbUIsaUNBQWdDLEVBQUk7O0FBQ3ZEO0VBQXdCLGlDQUFnQyxFQUFJOztBQUM1RDtFQUE2QixrQ0FBaUMsRUFBSTs7QUFDbEU7RUFBNEIsNkJBQTRCLEVBQUk7O0FBQzVEO0VBQXVCLGlDQUFnQyxFQUFJOztBQUMzRDtFQUFvQixpQ0FBZ0MsRUFBSTs7QUFDeEQ7RUFBc0IsaUNBQWdDLEVBQUk7O0FBQzFEO0VBQWdCLGlDQUFnQyxFQUFJOztBQUNwRDtFQUF1QixpQ0FBZ0MsRUFBSTs7QUFDM0Q7RUFBcUIsaUNBQWdDLEVBQUk7O0FBQ3pEO0VBQW9CLGtDQUFpQyxFQUFJOztBQUN6RDtFQUFtQixrQ0FBaUMsRUFBSTs7QUFDeEQ7RUFBa0Isa0NBQWlDLEVBQUk7O0FBQ3ZEO0VBQWlCLGtDQUFpQyxFQUFJOztBQUN0RDtFQUFpQixrQ0FBaUMsRUFBSTs7QUFDdEQ7RUFBa0Isa0NBQWlDLEVBQUk7O0FBQ3ZEO0VBQW9CLGtDQUFpQyxFQUFJOztBQUN6RDtFQUFvQixrQ0FBaUMsRUFBSTs7QUFDekQ7RUFBZSxrQ0FBaUMsRUFBSTs7QUFDcEQ7RUFBZ0IsOEJBQTZCLEVBQUk7O0FBQ2pEO0VBQWdCLGtDQUFpQyxFQUFJOztBQUNyRDtFQUFvQixrQ0FBaUMsRUFBSTs7QUFDekQ7RUFBZ0Isa0NBQWlDLEVBQUk7O0FBQ3JEO0VBQWtCLGtDQUFpQyxFQUFJOztBQUN2RDtFQUFpQixrQ0FBaUMsRUFBSTs7QUFDdEQ7RUFBZ0Isa0NBQWlDLEVBQUk7O0FBQ3JEO0VBQXNCLG1DQUFrQyxFQUFJOztBQUM1RDtFQUFrQixtQ0FBa0MsRUFBSTs7QUFDeEQ7RUFBbUIsbUNBQWtDLEVBQUk7O0FBQ3pEO0VBQWtCLG1DQUFrQyxFQUFJOztBQUN4RDtFQUFrQixtQ0FBa0MsRUFBSTs7QUFDeEQ7RUFBZ0IsbUNBQWtDLEVBQUk7O0FBQ3REO0VBQWlCLG1DQUFrQyxFQUFJOztBQUN2RDtFQUFnQixtQ0FBa0MsRUFBSTs7QUFDdEQ7RUFBZ0IsbUNBQWtDLEVBQUk7O0FBQ3REO0VBQWtCLDhCQUE2QixFQUFJOztBQUNuRDtFQUFnQixrQ0FBaUMsRUFBSTs7QUFDckQ7RUFBcUIsa0NBQWlDLEVBQUk7O0FBQzFEO0VBQWlCLGtDQUFpQyxFQUFJOztBQUN0RDtFQUFzQixrQ0FBaUMsRUFBSTs7QUFDM0Q7RUFBaUIsa0NBQWlDLEVBQUk7O0FBQ3REO0VBQXNCLGtDQUFpQyxFQUFJOztBQUMzRDtFQUFlLG1DQUFrQyxFQUFJOztBQUNyRDtFQUFxQixtQ0FBa0MsRUFBSTs7QUFDM0Q7RUFBb0IsbUNBQWtDLEVBQUk7O0FBQzFEO0VBQXFCLG1DQUFrQyxFQUFJOztBQUMzRDtFQUFnQixtQ0FBa0MsRUFBSTs7QUFDdEQ7RUFBbUIsbUNBQWtDLEVBQUk7O0FBQ3pEO0VBQWlCLG1DQUFrQyxFQUFJOztBQUN2RDtFQUFpQixtQ0FBa0MsRUFBSTs7QUFDdkQ7RUFBa0IsbUNBQWtDLEVBQUk7O0FBQ3hEO0VBQWlCLDhCQUE2QixFQUFJOztBQUNsRDtFQUFnQixrQ0FBaUMsRUFBSTs7QUFDckQ7RUFBa0Isa0NBQWlDLEVBQUk7O0FBQ3ZEO0VBQWdCLGtDQUFpQyxFQUFJOztBQUNyRDtFQUFpQixrQ0FBaUMsRUFBSTs7QUFDdEQ7RUFBa0Isa0NBQWlDLEVBQUk7O0FBQ3ZEO0VBQW9CLGtDQUFpQyxFQUFJOztBQUN6RDtFQUFxQixtQ0FBa0MsRUFBSTs7QUFDM0Q7RUFBaUIsbUNBQWtDLEVBQUk7O0FBQ3ZEO0VBQWlCLG1DQUFrQyxFQUFJOztBQUN2RDtFQUFnQiw4QkFBNkIsRUFBSTs7QUFDakQ7RUFBaUIsa0NBQWlDLEVBQUk7O0FBQ3REO0VBQXFCLGtDQUFpQyxFQUFJOztBQUMxRDtFQUFxQixrQ0FBaUMsRUFBSTs7QUFDMUQ7RUFBb0Isa0NBQWlDLEVBQUk7O0FBQ3pEO0VBQXNCLGtDQUFpQyxFQUFJOztBQUMzRCxzRUFBc0U7QUFDdEU7RUFBc0Isa0NBQWlDLEVBQUk7O0FBQzNEO0VBQWdCLGtDQUFpQyxFQUFJOztBQUNyRDtFQUFpQixtQ0FBa0MsRUFBSTs7QUFDdkQ7RUFBc0IsbUNBQWtDLEVBQUk7O0FBQzVEO0VBQXFCLG1DQUFrQyxFQUFJOztBQUMzRDtFQUFpQiw4QkFBNkIsRUFBSTs7QUFDbEQ7RUFBdUIsa0NBQWlDLEVBQUk7O0FBQzVEO0VBQWtCLGtDQUFpQyxFQUFJOztBQUN2RDtFQUFxQixrQ0FBaUMsRUFBSTs7QUFDMUQ7RUFBcUIsa0NBQWlDLEVBQUk7O0FBQzFEO0VBQXFCLGtDQUFpQyxFQUFJOztBQUMxRDtFQUFxQixrQ0FBaUMsRUFBSTs7QUFDMUQ7RUFBdUIsOEJBQTZCLEVBQUk7O0FBQ3hEO0VBQXdCLGtDQUFpQyxFQUFJOztBQUM3RDtFQUF3QixrQ0FBaUMsRUFBSTs7QUFDN0Q7RUFBNkIsa0NBQWlDLEVBQUk7O0FBQ2xFO0VBQTZCLGtDQUFpQyxFQUFJOztBQUNsRTtFQUE2QixrQ0FBaUMsRUFBSTs7QUFDbEU7RUFBNkIsa0NBQWlDLEVBQUk7O0FBQ2xFO0VBQTBCLG1DQUFrQyxFQUFJOztBQUNoRTtFQUEwQixtQ0FBa0MsRUFBSTs7QUFDaEU7RUFBMEIsbUNBQWtDLEVBQUk7O0FBQ2hFO0VBQTBCLG1DQUFrQyxFQUFJOztBQUNoRTtFQUF5QixtQ0FBa0MsRUFBSTs7QUFDL0Q7RUFBMEIsbUNBQWtDLEVBQUk7O0FBQ2hFO0VBQXdCLG1DQUFrQyxFQUFJOztBQUM5RDtFQUE0Qiw4QkFBNkIsRUFBSTs7QUFDN0Q7RUFBNkIsa0NBQWlDLEVBQUk7O0FBQ2xFO0VBQTZCLGtDQUFpQyxFQUFJOztBQUNsRTtFQUE0QixrQ0FBaUMsRUFBSTs7QUFDakU7RUFBNkIsa0NBQWlDLEVBQUk7O0FBQ2xFO0VBQTZCLGtDQUFpQyxFQUFJOztBQUNsRTtFQUFnQyw4QkFBNkIsRUFBSTs7QUFDakU7RUFBa0Msa0NBQWlDLEVBQUk7O0FBQ3ZFO0VBQStCLGtDQUFpQyxFQUFJOztBQUNwRTtFQUFpQyxrQ0FBaUMsRUFBSTs7QUFDdEU7RUFBaUMsa0NBQWlDLEVBQUk7O0FBQ3RFO0VBQTRCLGtDQUFpQyxFQUFJOztBQUdqRTtvQ0FDb0M7QUFFcEMsbUJBQW1CO0FBQ25COzs7O0VBSUMsNEJBQTJCLEVBQzNCOztBQUNEOzs7O0VBSUMsNkJBQTRCLEVBQzVCOztBQUNEOzs7O0VBSUMsK0JBQThCLEVBQzlCOztBQUNEOzs7O0VBSUMsZ0NBQStCLEVBQy9COztBQUVELGNBQWM7QUFDZDtFQUNDLG9CQUFtQjtFQUNuQixZQUFXO0VBQ1gsMEJBQXlCO0VBQUUsa0JBQWtCLEVBQzdDOztBQUNEO0VBRUMsZ0NBQStCLEVBQy9COztBQ3ZiRDs7RUFFRSxtQkFBa0I7RUFDbEIsc0JBQXFCO0VBQ3JCLG1CQUFrQjtFQUNsQixtQkFBa0I7RUFDbEIsWUFBVztFQUNYLGlCQUFnQjtFQUNoQixpQkFBZ0I7RUFDaEIsb0NBQStCO0VBQy9CLDBDQUFxQztFQUNyQyxlQUFjO0VBQ2QsZ0JBQWU7RUFFZjs7Ozs7Ozs7OztJQVVFLEVBZ0JIO0VBeENEOzs7O0lBNEJJLGFBQTJCO0lBQzNCLFdBQVUsRUFLWDtJQWxDSDs7OztNQWdDTSxZQUFXLEVBQ1o7RUFHSDs7SUFDRSwwQ2xEMUJtQjtJa0QyQm5CLHNDbEQzQm1CLEVrRDRCcEI7O0FDdkNIO0VBQ0UsZ0JBQWU7RUFDZixvQm5EY3FCO0VtRGJyQixtQkFBa0I7RUFDbEIsT0FBTTtFQUNOLFVBQVM7RUFDVCxXQUFVO0VBQ1YsaUNBQWdDO0VBQ2hDLDZDQUE0QztFQUM1QyxrQ0FBaUM7RUFDakMsNEJBQTJCO0VBQzNCLDBCQUFpQjtLQUFqQix1QkFBaUI7TUFBakIsc0JBQWlCO1VBQWpCLGtCQUFpQjtFQUNqQixtQkFBa0IsRUFpVW5CO0VBN1VEO0lBZUksY0FBYTtJQUNiLG9CQUFtQixFQUNwQjtFQWpCSDtJQXFCTSxpQkFBZ0I7SUFDaEIsMEJBQXlCO0lBQ3pCLHdCQUF1QjtJQUN2QixtQkFBa0I7SUFDbEIsa0JBQWlCO0lBQ2pCLG1CQUFrQjtJQUNsQixvQkFBbUI7SUFDbkIsbUJBQWtCO0lBQ2xCLHdFQUF1RSxFQXVCeEU7SUFwREw7TUFnQ1Esd0JBQXVCO01BQ3ZCLG9DQUFtQztNQUNuQyxpQkFBZ0I7TUFDaEIsZ0JBQWU7TUFDZixpQkFBZ0I7TUFDaEIsbUJBQWtCO01BQ2xCLG1CQUFrQjtNQUNsQixTQUFRLEVBQ1Q7SUF4Q1A7TUEyQ1Esc0JBQXFCO01BQ3JCLGVuRG5DZTtNbURvQ2YsMENBQXlDO01BQ3pDLG9CQUFtQixFQUNwQjtJQS9DUDtNQWtEUSxnQ0FBK0IsRUFDaEM7RUFuRFA7SUF3REksbUJBQWtCO0lBQ2xCLGlDbkR2Q21CO0ltRHdDbkIsaUJBQWdCLEVBa0ZqQjtJQTVJSDtNQTZETSx3QkFBdUI7TUFDdkIsaUJBQWdCLEVBa0NqQjtNQWhHTDtRQWlFUSxlQUFjLEVBQ2Y7TUFsRVA7UUFxRVEsd0JBQXVCO1FBQ3ZCLGlCQUFnQjtRQUNoQixnQkFBZTtRQUNmLGlCQUFnQjtRQUNoQixlQUFjO1FBQ2QsbUJBQWtCO1FBQ2xCLFVBQVM7UUFDVCxXQUFVO1FBQ1Ysc0JBQXFCLEVBQ3RCO01BOUVQO1FBaUZRLDBCQUF5QjtRQUN6QixvQkFBbUI7UUFDbkIsd0JBQXVCO1FBQ3ZCLGdCQUFlO1FBQ2YsaUJBQWdCO1FBQ2hCLGVBQWM7UUFDZCxpQkFBZ0I7UUFDaEIsNkNBQTRDLEVBTzdDO1FBL0ZQO1VBNEZVLHlDQUF3QztVQUN4QyxzQm5EcEZhLEVtRHFGZDtJQTlGVDtNQW1HTSxtQkFBa0I7TUFDbEIsZUFBYztNQUNkLFlBQVc7TUFDWCxpQkFBZ0I7TUFDaEIsaUJBQWdCO01BQ2hCLFVBQVM7TUFDVCxjQUFhO01BQ2IsZW5EdEZpQjtNbUR1RmpCLHlCQUF3QjtNQUN4QixzQkFBcUI7TUFDckIsaUJBQWdCO01BQ2hCLHdFQUF1RSxFQVF4RTtNQXRITDtRQWlIUSxzQm5EeEdlO1FtRHlHZixlbkR6R2U7UW1EMEdmLHlDQUF3QztRQUN4QyxvQkFBbUIsRUFDcEI7SUFySFA7TUF5SE0sNkJBQTRCLEVBSzdCO01BOUhMO1FBNEhRLGVuRG5IZSxFbURvSGhCO0lBN0hQO01BaUlNLHdCQUF1QjtNQUN2QixvQ0FBbUM7TUFDbkMsaUJBQWdCO01BQ2hCLGdCQUFlO01BQ2YsaUJBQWdCO01BQ2hCLGVBQWM7TUFDZCxtQkFBa0I7TUFDbEIsVUFBUztNQUNULFlBQVc7TUFDWCxzQkFBcUIsRUFDdEI7RUEzSUw7SUFnSk0sZUFBYztJQUNkLDBCQUF5QjtJQUN6QixnQkFBZTtJQUNmLGlCQUFnQjtJQUNoQixvQkFBbUI7SUFDbkIsc0JBQXFCO0lBQ3JCLGVBQWM7SUFDZCxnQkFBZTtJQUNmLG1CQUFrQjtJQUNsQixnQkFBZSxFQUNoQjtFQTFKTDtJQWlLSSxlQUFjLEVBQ2Y7RUFsS0g7SUFxS0ksaUJBQWdCO0lBQ2hCLDBCQUF5QixFQWdGMUI7SUF0UEg7TUF5S00sZW5EckppQjtNbURzSmpCLDBCQUF5QjtNQUN6QixnQkFBZTtNQUNmLGlCQUFnQjtNQUNoQiw2RG5EN0s0RDtNbUQ4SzVELG9CQUFtQjtNQUNuQixzQkFBcUI7TUFDckIsZUFBYztNQUNkLGdCQUFlO01BQ2YsbUJBQWtCO01BQ2xCLGdCQUFlLEVBYWhCO01BaE1MO1FBc0xRLGVBQWM7UUFDZCxtQkFBa0I7UUFDbEIsU0FBUTtRQUNSLE9BQU07UUFDTixVQUFTO1FBQ1QsWUFBVztRQUNYLGdDbkRuTGU7UW1Eb0xmLGtDQUF5QjtnQkFBekIsMEJBQXlCO1FBQ3pCLCtDQUFzQztRQUF0Qyx1Q0FBc0M7UUFBdEMsMkVBQXNDLEVBQ3ZDO0lBL0xQOztNQW9NTSxXQUFVO01BQ1YsV0FBVSxFQStCWDtNQXBPTDs7UUF3TVEsZW5EakxlO1FtRGtMZixxQkFBb0I7UUFDcEIsZ0JBQWU7UUFDZixpQkFBZ0I7UUFDaEIsa0JBQWlCO1FBQ2pCLGFBQVk7UUFDWixzSEFFc0IsRUFLdkI7UUFyTlA7O1VBbU5VLGNBQWEsRUFDZDtNQXBOVDs7O1FBeU5RLDJEQUEwRCxFQUMzRDtNQTFOUDs7UUE2TlEsV0FBVSxFQU1YO1FBbk9QOztVQWdPVSxXQUFVO1VBQ1YscUJBQW9CLEVBQ3JCO0lBbE9UOzs7O01BME9NLGVuRGpPaUI7TW1Ea09qQixzQkFBcUI7TUFDckIsaUJBQWdCLEVBQ2pCO0lBN09MOzs7O01BbVBNLDZCQUFvQjtjQUFwQixxQkFBb0I7TUFDcEIsY0FBYSxFQUNkO0VBclBMO0lBeVBJLG9CbkRoUG1CO0ltRGlQbkIsYUFBWTtJQUNaLGlCQUFnQjtJQUNoQixnQkFBZTtJQUNmLGVBQWM7SUFDZCxtQkFBa0I7SUFDbEIsbUJBQWtCO0lBQ2xCLFVBQVMsRUFDVjtFQWpRSDtJQW9RSSxvQm5EM1BtQjtJbUQ0UG5CLGFBQVk7SUFDWixpQkFBZ0I7SUFDaEIsZ0JBQWU7SUFDZixlQUFjO0lBQ2QsbUJBQWtCO0lBQ2xCLG1CQUFrQjtJQUNsQixVQUFTLEVBQ1Y7RUE1UUg7SUErUUksZ0JBQWU7SUFDZixlQUFjO0lBQ2Qsb0JBQW1CLEVBMkRwQjtJQTVVSDtNQW9STSxlQUFjO01BQ2QsbUJBQWtCO01BQ2xCLGVBQWM7TUFDZCw2QkFBNEI7TUFDNUIsbUJBQWtCLEVBMkJuQjtNQW5UTDs7O1FBNlJRLG1CQUFrQjtRQUNsQixXQUFVLEVBQ1g7TUEvUlA7UUFrU1EsdUVBQXNFO1FBQ3RFLHNCQUFxQjtRQUNyQixtQkFBa0I7UUFDbEIsbUJBQWtCO1FBQ2xCLFlBQVc7UUFDWCxPQUFNO1FBQ04sU0FBUTtRQUNSLFVBQVM7UUFDVCxRQUFPO1FBQ1AsV0FBVTtRQUNWLHlDQUFnQztRQUNoQyxvQ0FBbUMsRUFDcEM7TUE5U1A7UUFpVFEsMkNBQWlDLEVBQ2xDO0lBbFRQO01Bc1RNLGVBQWM7TUFDZCxnQkFBZTtNQUNmLGVBQWM7TUFDZCxpQkFBZ0I7TUFDaEIscUJBQW9CO01BQ3BCLHNCQUFxQixFQUN0QjtJQTVUTDtNQStUTSxnQkFBZTtNQUNmLGlCQUFnQjtNQUNoQixxQkFBb0I7TUFDcEIsc0JBQXFCLEVBQ3RCO0lBblVMO01Bc1VNLG1CQUFrQjtNQUNsQixXQUFVO01BQ1YsZ0JBQWU7TUFDZixlQUFjO01BQ2Qsc0JBQXFCLEVBQ3RCOztBQUtMO0VBRUksaUJBQWdCLEVBQ2pCOztBQ25WSDs7Ozs7Ozs7RUFRUSx3QkFBdUI7RUFDdkIsOEJBQTZCO0VBQzdCLGlCQUFnQixFQUNqQjs7QUFYUDs7Ozs7Ozs7RUFjUSxjQUFhO0VBQ2IsaUJBQWdCO0VBQ2hCLDhCQUE2QjtFQUM3QixZQUFXLEVBQ1o7O0FDbEJQO0VBQ0UsaUJBQWdCLEVBOEVqQjtFQS9FRDtJQUtJLGlCQUFnQjtJQUNoQixVQUFTO0lBQ1QsMEJBQXlCO0lBQ3pCLGVBQWM7SUFDZCxnQkFBZTtJQUNmLG9CQUFtQjtJQUNuQixpQkFBZ0I7SUFDaEIsbUJBQWtCO0lBQ2xCLGdCQUFlO0lBQ2YsWUFBVztJQUNYLGlCQUFnQjtJQUNoQixXQUFVO0lBQ1YsY0FBYSxFQVlkO0lBN0JIO01Bb0JNLHNCQUFxQjtNQUNyQixpQkFBZ0I7TUFDaEIsYUFBWTtNQUNaLGdCQUFlO01BQ2YsaUJBQWdCO01BQ2hCLCtCQUE4QjtNQUM5QixtQkFBa0I7TUFDbEIsVUFBUyxFQUNWO0VBNUJMO0lBaUNNLGlCQUFnQjtJQUNoQixtQkFBa0IsRUFvQm5CO0lBdERMO01BcUNRLGdCQUFlO01BQ2YsaUJBQWdCO01BQ2hCLG1CQUFrQjtNQUNsQixpQkFBZ0IsRUFhakI7TUFyRFA7UUEyQ1UsZXJEbENhO1FxRG1DYixlQUFjO1FBQ2QsaUJBQWdCO1FBQ2hCLGlCQUFnQjtRQUNoQixpQkFBZ0I7UUFDaEIsOERBQTREO1FBQzVELGlCQUFnQjtRQUNoQixvQkFBbUI7UUFDbkIsd0JBQXVCLEVBQ3hCO0VBcERUO0lBeURNLGdCQUFlLEVBVWhCO0lBbkVMO01BNERRLGlCQUFnQjtNQUNoQixpQkFBZ0IsRUFLakI7TUFsRVA7UUFnRVUsaUJBQWdCLEVBQ2pCO0VBakVUO0lBd0VNLDZDQUFvQztZQUFwQyxxQ0FBb0MsRUFDckM7RUF6RUw7SUE0RU0sY0FBYSxFQUNkOztBQzdFTDtFQUdNLG1CQUFrQixFQUNuQjs7QUFKTDtFQU1NLGtCQUFpQjtFQUNqQixxQkFBb0IsRUFDckI7O0FBUkw7RUFZSSxpQkFBZ0IsRUFDakI7O0FBR0g7RUFDRSxpQkFBZ0IsRUFrVGpCO0VBblREO0lBSUksZ0JBQWU7SUFDZixZQUFXO0lBQ1gsU0FBUTtJQUNSLFlBQVc7SUFDWCxpQ3RETm1CO0lzRE9uQix3QkFBdUI7SUFDdkIsa0JBQWlCO0lBQ2pCLGlCQUFnQjtJQUNoQix3Q0FBK0I7WUFBL0IsZ0NBQStCLEVBbUVoQztJQS9FSDtNQWVNLGFBQVk7TUFDWixrQkFBaUIsRUE4RGxCO01BNURDO1FBbEJOO1VBbUJRLGFBQVk7VUFDWixrQkFBaUIsRUEwRHBCLEVBQUE7TUE5RUw7UUF3QlEsc0JBQXFCO1FBQ3JCLFlBQVc7UUFDWCxxQkFBb0I7UUFDcEIsb0JBQW1CLEVBQ3BCO01BNUJQO1FBK0JRLG1CQUFrQjtRQUNsQixhQUFZO1FBQ1osa0JBQWlCO1FBQ2pCLFdBQVU7UUFDVix5QkFBd0IsRUEwQ3pCO1FBN0VQO1VBc0NVLFdBQVUsRUFDWDtRQXZDVDtVQTBDVSxZQUFXO1VBQ1gsbUJBQWtCO1VBQ2xCLFlBQVc7VUFDWCxxQkFBb0I7VUFDcEIsWUFBVztVQUNYLGFBQVk7VUFDWixpQ0FBd0I7a0JBQXhCLHlCQUF3QjtVQUN4Qix3QkFBdUI7VUFDdkIsc0JBQXFCO1VBQ3JCLHNCQUFxQixFQUN0QjtRQXBEVDtVQXVEVSxtQkFBa0I7VUFDbEIsaURBQXdDO1VBQXhDLHlDQUF3QztVQUF4QyxpRUFBd0MsRUFvQnpDO1VBNUVUO1lBMkRZLHFDQUE0QjtvQkFBNUIsNkJBQTRCO1lBQzVCLFdBQVUsRUFDWDtVQTdEWDtZQWdFWSxtQ0FBMEI7b0JBQTFCLDJCQUEwQjtZQUMxQixXQUFVLEVBQ1g7VUFsRVg7WUFxRVksb0NBQTJCO29CQUEzQiw0QkFBMkI7WUFDM0IsV0FBVSxFQUNYO1VBdkVYO1lBMEVZLDRCQUEyQixFQUM1QjtFQU9UO0lBbEZGO01Bb0ZNLFVBQVMsRUFDVixFQUFBO0VBckZMO0lBeUZJLHlCQUF3QixFQXFOekI7SUE5U0g7Ozs7O01BZ0dNLGV0RHhGaUI7TXNEeUZqQixtQkFBa0I7TUFDbEIsa0JBQWlCO01BQ2pCLGdCQUFlO01BQ2YsaUJBQWdCO01BQ2hCLHdCQUF1QixFQXVCeEI7TUE1SEw7Ozs7O1FBeUdRLGNBQWEsRUFDZDtNQTFHUDs7Ozs7UUE4R1UsaUJBQWdCO1FBQ2hCLHdCQUF1QjtRQUN2QixtQkFBa0I7UUFDbEIsa0JBQWlCO1FBQ2pCLGdCQUFlO1FBQ2YsZXREakhhO1FzRGtIYixzQkFBcUIsRUFDdEI7TUFySFQ7Ozs7Ozs7OztRQXlIVSwrQnREaElhLEVzRGlJZDtJQTFIVDtNQStITSxpQkFBZ0IsRUFLakI7TUFwSUw7UUFrSVEsbUJBQWtCLEVBQ25CO0lBbklQO01BdUlNLGlCQUFnQjtNQUNoQixnQkFBZSxFQU1oQjtNQTlJTDtRQTJJUSw4QkFBNkI7UUFDN0Isa0JBQWlCLEVBQ2xCO0lBN0lQO01BaUpNLGtCQUFpQjtNQUNqQixnQkFBZSxFQUtoQjtNQXZKTDtRQXFKUSxtQkFBa0IsRUFDbkI7SUF0SlA7TUEwSk0sZ0JBQWUsRUFDaEI7SUEzSkw7TUE4Sk0sZ0JBQWUsRUFDaEI7SUEvSkw7TUFrS00sZ0JBQWUsRUFDaEI7SUFuS0w7TUFzS00sY0FBYTtNQUNiLG1CQUFrQjtNQUNsQixzQkFBcUI7TUFDckIsaUJBQWdCO01BQ2hCLGdCQUFlLEVBQ2hCO0lBM0tMO01BOEtNLDBCdEQ1S2lCO01zRDZLakIsa0JBQWlCO01BQ2pCLGNBQWE7TUFDYixrQkFBaUIsRUFDbEI7SUFsTEw7TUFxTE0sZXRENUxpQjtNc0Q2TGpCLHNCQUFxQjtNQUNyQixzQkFBcUIsRUFLdEI7TUE1TEw7UUEwTFEsZUFBeUIsRUFDMUI7SUEzTFA7TUErTE0sWUFBVyxFQUNaO0lBaE1MOztNQW9NTSxvQkFBbUIsRUFNcEI7TUExTUw7O1FBdU1RLG9CQUFtQjtRQUNuQixXQUFVLEVBQ1g7SUF6TVA7O01BOE1NLGlCQUFnQjtNQUNoQixlQUFjLEVBQ2Y7SUFoTkw7TUFtTk0sK0RBQThELEVBQy9EO0lBcE5MO01Bd05RLGlCQUFnQjtNQUNoQixvQkFBbUIsRUFDcEI7SUExTlA7TUE4Tk0sZ0JBQWU7TUFDZixlQUFjO01BQ2QsZ0JBQWU7TUFDZiwrQkFBOEIsRUFDL0I7SUFsT0w7TUFxT00sWUFBVztNQUNYLGVBQWM7TUFDZCxrQkFBaUI7TUFDakIsZUFBYyxFQUNmO0lBek9MO01BNE9NLG9CdERuUGlCO01zRG9QakIsYUFBWTtNQUNaLGlCQUFnQjtNQUNoQixnQkFBZTtNQUNmLGVBQWM7TUFDZCxtQkFBa0I7TUFDbEIsbUJBQWtCO01BQ2xCLFVBQVM7TUFDVCxnQkFBZSxFQUNoQjtJQXJQTDtNQXdQTSxtQkFBa0I7TUFDbEIsZ0JBQWU7TUFDZixtQkFBa0I7TUFDbEIsbUJBQWtCLEVBYW5CO01BeFFMO1FBOFBRLG1CQUFrQjtRQUNsQixVQUFTO1FBQ1QsU0FBUTtRQUNSLHdCQUF1QjtRQUN2QixpQkFBZ0I7UUFDaEIsZXREMVFlO1FzRDJRZixnQkFBZTtRQUNmLG1CQUFrQjtRQUNsQixrQkFBaUIsRUFDbEI7SUF2UVA7TUEyUU0sb0J0RGxSaUI7TXNEbVJqQixhQUFZO01BQ1osaUJBQWdCO01BQ2hCLGdCQUFlO01BQ2YsZUFBYztNQUNkLG1CQUFrQjtNQUNsQixtQkFBa0I7TUFDbEIsVUFBUztNQUNULGdCQUFlLEVBQ2hCO0lBcFJMO01BdVJNLG1CQUFrQjtNQUNsQixnQkFBZTtNQUNmLG1CQUFrQjtNQUNsQixtQkFBa0IsRUFhbkI7TUF2U0w7UUE2UlEsbUJBQWtCO1FBQ2xCLFVBQVM7UUFDVCxTQUFRO1FBQ1Isd0JBQXVCO1FBQ3ZCLGlCQUFnQjtRQUNoQixldER6U2U7UXNEMFNmLGdCQUFlO1FBQ2YsbUJBQWtCO1FBQ2xCLGtCQUFpQixFQUNsQjtJQXRTUDtNQTJTUSxpQkFBZ0IsRUFDakI7RUE1U1A7SUFpVEksZ0JBQWUsRUFDaEI7O0FBS0Q7RUFERjtJQUVJLDBCQUF5QjtJQUN6Qix3QkFBdUI7SUFDdkIsb0JBQW1CO0lBQ25CLGlCQUFnQixFQUVuQixFQUFBOztBQzdVRDtFQUNFLGlCQUFnQixFQUNqQjs7QUFFRDtFQUNFLGtCQUFpQixFQVlsQjtFQWJEO0lBSUksaUNBQWdDO0lBQ2hDLHFCQUFvQjtJQUNwQixnQkFBZTtJQUNmLGlCQUFnQixFQUNqQjtFQVJIO0lBV0ksZUFBYyxFQUNmOztBQUdIO0VBRUksaUJBQWdCLEVBQ2pCOztBQUhIO0VBTUkscUJBQW9CLEVBQ3JCOztBQVBIOztFQVlJLG1CQUFrQixFQUtuQjtFQUhDO0lBZEo7O01BZU0sZUFBYyxFQUVqQixFQUFBOztBQWpCSDtFQW9CSSx3QkFBdUIsRUFxRnhCO0VBekdIO0lBd0JNLGFBQVksRUFDYjtFQXpCTDtJQTRCTSx3QkFBdUIsRUFDeEI7RUE3Qkw7SUFnQ00sd0JBQXVCO0lBRXZCLGVBQWMsRUFXZjtJQTdDTDtNQXFDUSwwQkFBeUI7TUFDekIsNEJBQTJCLEVBQzVCO0lBdkNQO01BMENRLDBCQUF5QjtNQUN6Qiw0QkFBMkIsRUFDNUI7RUE1Q1A7SUFnRE0sbUJBQWtCLEVBQ25CO0VBakRMO0lBcURNLGtCQUFpQixFQVFsQjtJQTdETDtNQXdEUSxnQkFBZTtNQUNmLGVBQWM7TUFDZCxpQkFBZ0IsRUFFakI7RUE1RFA7SUFnRU0sa0JBQWlCLEVBQ2xCO0VBakVMO0lBcUVRLDBEQUF5RDtJQUN6RCw2QkFBNEI7SUFDNUIsOEJBQTZCLEVBQzlCO0VBeEVQO0lBdUZNLGNBQWE7SUFDYixxQkFBb0I7SUFDcEIsZ0JBQWU7SUFDZixpQkFBZ0I7SUFDaEIsZUFBYztJQUNkLG9CQUFtQixFQUNwQjtJQTdGTDtNQTZFUSxZQUFXO01BQ1gsYUFBWTtNQUNaLHNCQUFxQjtNQUNyQixzQkFBcUI7TUFDckIsdUJBQXNCO01BQ3RCLG1CQUFrQjtNQUNsQixpQkFBZ0I7TUFDaEIsWUFBVyxFQUNaO0VBVUg7SUEvRko7TUFnR00sNEJBQTJCO01BRTNCLGtCQUFpQixFQU9wQjtNQXpHSDtRQXFHVSxjQUFhLEVBQ2QsRUFBQTs7QUF0R1Q7RUEyRzRCLDZCQUE2QixFQUFFOztBQTNHM0Q7RUE0RzJCLCtCQUErQixFQUFFOztBQTVHNUQ7RUE2RzZCLCtCQUErQixFQUFFOztBQTdHOUQ7RUE4RzhCLCtCQUErQixFQUFFOztBQTlHL0Q7RUErR2lDLCtCQUErQixFQUFFOztBQS9HbEU7RUFnSDZCLGdDQUFnQyxFQUFFOztBQWhIL0Q7RUFpSCtCLGdDQUFnQyxFQUFFOztBQUdqRTtFQUNFLGNBQWE7RUFDYix1QkFBc0I7RUFDdEIsbUJBQWtCO0VBQ2xCLG9CQUFtQixFQU1wQjtFQVZEO0lBT0ksZ0JBQWU7SUFDZixpQkFBZ0IsRUFDakI7O0FDaEpIO0VBQ0UsNkR4RERnRTtFd0RFaEUsa0JBQWlCO0VBQ2pCLHFCQUFvQjtFQUNwQiwwQkFBeUI7RUFDekIsbUJBQWtCLEVBeVJuQjtFQTlSRDtJQVFJLHFCQUFhO0lBQWIsY0FBYTtJQUNiLG1CQUF5QjtRQUF6QiwwQkFBeUI7SUFDekIsdUJBQW1CO1FBQW5CLG9CQUFtQixFQU1wQjtJQWhCSDtNQWNNLGNBQWEsRUFDZDtFQWZMO0lBbUJJLFdBQVU7SUFDVixtQkFBa0IsRUFDbkI7RUFyQkg7O0lBeUJJLGlCQUFnQixFQUNqQjtFQTFCSDtJQTZCSSxnQkFBZTtJQUNmLHdCQUF1QjtJQUN2QixpQkFBZ0I7SUFDaEIsY0FBYSxFQUNkO0VBakNIO0lBb0NJLGdCQUFlO0lBQ2Ysa0JBQWlCO0lBQ2pCLGVBQWM7SUFDZCxpQkFBZ0I7SUFDaEIsb0JBQW1CLEVBQ3BCO0VBekNIO0lBNENJLGdCQUFlO0lBQ2YsaUJBQWdCO0lBQ2hCLDBCQUF5QixFQWExQjtJQTNESDtNQWlETSwwQkFBeUIsRUFDMUI7SUFsREw7TUFxRE0sa0JBQWlCLEVBS2xCO01BMURMO1FBd0RRLGtCQUFpQixFQUNsQjtFQUlMO0lBQ0UsMEJBQXlCLEVBUTFCO0lBVEE7TUFJRyxZQUFXLEVBQ1o7SUFMRjtNQU9HLGVBQWMsRUFDZjtFQUdIO0lBQ0UsYUFBWTtJQUNaLG1CQUFrQjtJQUNsQixVQUFTO0lBQ1QsVUFBUztJQUNULHNDQUE2QjtZQUE3Qiw4QkFBNkI7SUFDN0IsV0FBVSxFQUNYO0VBL0VIO0lBa0ZJLHFCQUEyQjtRQUEzQiw0QkFBMkIsRUFLNUI7SUF2Rkg7TUFxRk0sWUFBTztVQUFQLFFBQU8sRUFDUjtFQXRGTDtJQTBGSSxnQkFBZTtJQUNmLGtCQUFpQixFQUNsQjtFQTVGSDtJQWlHTSxZQUFPO1FBQVAsUUFBTztJQUNQLGdCQUFlLEVBQ2hCO0VBbkdMO0lBc0dNLGtCQUFpQixFQUNsQjtFQXZHTDs7O0lBMkdNLGdCQUFlLEVBQ2hCO0VBNUdMO0lBK0dNLGdCQUFlO0lBQ2YsaUJBQWdCO0lBQ2hCLG1CQUFrQixFQUNuQjtFQWxITDtJQXFITSxnQkFBZTtJQUNmLGdCQUFlO0lBQ2Ysd0JBQXVCLEVBS3hCO0lBNUhMO01BMEhRLGlCQUFnQixFQUNqQjtFQTNIUDs7Ozs7SUFpSU0sZXhEeEhpQixFd0R5SGxCO0VBbElMO0lBcUlNLGtCQUFpQixFQUNsQjtFQUVEO0lBeElKO01BeUlNLHFCQUFvQixFQVV2QjtNQW5KSDtRQTRJUSxtQkFBa0IsRUFDbkI7TUE3SVA7UUFnSlEsb0JBQW1CLEVBQ3BCLEVBQUE7RUFqSlA7SUFzSkksa0JBQWlCLEVBdUJsQjtJQTdLSDtNQXlKTSxpQkFBZ0IsRUFDakI7SUExSkw7TUE2Sk0saUJBQWdCLEVBQ2pCO0lBOUpMO01BaUtNLG9CQUFlO1VBQWYsZ0JBQWUsRUFXaEI7TUFUQztRQW5LTjtVQW9LUSxZQUFPO2NBQVAsUUFBTyxFQVFWLEVBQUE7TUFMQztRQXZLTjtVQXdLUSxZQUFXO1VBQ1gsaUJBQWdCO1VBQ2hCLGVBQWMsRUFFakIsRUFBQTtFQUdIO0lBdkdBO01BeUdJLHNDQUE2QjtjQUE3Qiw4QkFBNkIsRUFDOUIsRUFBQTtFQUdIO0lBckxGO01Bc0xJLHNCQUFxQixFQXdHeEI7TUE5UkQ7UUF5TE0scUJBQW9CLEVBQ3JCO01BMUxMO1FBNkxNLHNCQUF1QjtZQUF2Qix3QkFBdUI7UUFDdkIsMkJBQXNCO1lBQXRCLHVCQUFzQixFQUN2QjtNQS9MTDtRQWtNTSxZQUFXO1FBQ1gsV0FBVTtRQUNWLG1CQUFrQixFQUNuQjtNQXJNTDs7UUF5TU0sa0JBQWlCO1FBQ2pCLG1CQUFrQixFQUNuQjtNQW5JSDtRQXNJSSxhQUFZO1FBQ1osc0NBQTZCO2dCQUE3Qiw4QkFBNkIsRUFDOUIsRUFBQTtFQUdIO0lBQ0Usb0JBQW1CLEVBeUVwQjtJQTFFQTtNQUlHLGlCQUFnQjtNQUNoQix1QkFBc0IsRUFDdkI7SUFORjtNQVNHLGtCQUFpQjtNQUNqQixtQkFBa0I7TUFDbEIsMEJBQXlCLEVBdUIxQjtNQWxDRjtRQWNLLFlBQVc7UUFDWCxtQkFBa0I7UUFDbEIsU0FBUTtRQUNSLGFBQVk7UUFDWixzQkFBcUI7UUFDckIsYUFBWTtRQUNaLCtCQUE4QixFQUMvQjtNQXJCSjtRQXdCSyxlQUFjLEVBQ2Y7TUF6Qko7UUE0QkssZ0JBQWUsRUFLaEI7UUFqQ0o7VUErQk8sY0FBYSxFQUNkO0lBaENOO01BcUNHLGdCQUFlO01BQ2YsYUFBWTtNQUNaLGlCQUFnQixFQUNqQjtJQXhDRjtNQTJDRywrRHhEN1ArRDtNd0Q4UC9ELGtCQUFpQjtNQUNqQixnQkFBZTtNQUNmLGVBQWMsRUFDZjtJQUlEO01BbkRGO1FBb0RJLHFCQUFvQixFQXNCdkI7UUExRUE7VUF1REssWUFBVztVQUNYLFVBQVM7VUFDVCxtQkFBa0I7VUFDbEIsbUJBQWtCLEVBY25CO1VBeEVKO1lBNkRPLGNBQWEsRUFDZDtVQTlETjtZQWlFTyxnQkFBZTtZQUNmLHNCQUFxQixFQUN0QjtVQW5FTjtZQXNFTyxlQUFjLEVBQ2YsRUFBQTs7QUMxUlQ7RUFDRSw2RHpERGdFO0V5REVoRSx5QkFBd0I7RUFDeEIsZ0JBQWU7RUFDZixlQUFjO0VBQ2QsT0FBTTtFQUNOLFNBQVE7RUFDUixRQUFPO0VBQ1AsVUFBUztFQUNULGlCQUFnQjtFQUNoQixjQUFhO0VBQ2IsZ0JBQWUsRUFnQ2hCO0VBM0NEO0lBY0ksaUNBQXdCO1lBQXhCLHlCQUF3QjtJQUN4QixpQ0FBd0I7WUFBeEIseUJBQXdCO0lBQ3hCLHNDQUE2QjtZQUE3Qiw4QkFBNkI7SUFDN0Isa0VBQXlEO1lBQXpELDBEQUF5RCxFQUMxRDtFQWxCSDtJQXFCSSxrQ0FBeUI7WUFBekIsMEJBQXlCO0lBQ3pCLGlDQUF3QjtZQUF4Qix5QkFBd0I7SUFDeEIsc0NBQTZCO1lBQTdCLDhCQUE2QixFQUM5Qjs7QUFFRDtFQUNFO0lBQ0UsV0FBVSxFQUFBO0VBRVo7SUFDRSxXQUFVLEVBQUEsRUFBQTs7QUFMZDtFQUNFO0lBQ0UsV0FBVSxFQUFBO0VBRVo7SUFDRSxXQUFVLEVBQUEsRUFBQTs7QUFJZDtFQUNFO0lBQ0UsV0FBVSxFQUFBO0VBRVo7SUFDRSxXQUFVLEVBQUEsRUFBQTs7QUFMZDtFQUNFO0lBQ0UsV0FBVSxFQUFBO0VBRVo7SUFDRSxXQUFVLEVBQUEsRUFBQTs7QUFLaEI7RUFDRSxtQkFBa0I7RUFDbEIsWUFBVztFQUNYLGNBQWE7RUFDYixlQUFjO0VBQ2Qsa0NBQWlDLEVBQ2xDOztBQUVEO0VBQ0UsVUFBUztFQUNULFdBQVU7RUFFVixpQkFBZ0I7RUFDaEIsMElBQXlJO0VBQ3pJLHNCQUFxQjtFQUNyQixpQkFBZ0I7RUFDaEIsa0JBQWlCO0VBQ2pCLG1CQUFrQjtFQUNsQixrQkFBaUI7RUFDakIsc0JBQXFCLEVBNkN0QjtFQXhERDtJQWNJLGdCQUFlO0lBQ2YsaUJBQWdCO0lBQ2hCLDBCQUF5QjtJQUN6Qix1QkFBc0I7SUFDdEIsZUFBYyxFQUNmO0VBRUQ7SUFDRSxrQ0FBeUI7WUFBekIsMEJBQXlCO0lBQ3pCLGlDQUF3QjtZQUF4Qix5QkFBd0I7SUFDeEIsc0NBQTZCO1lBQTdCLDhCQUE2QjtJQUM3Qiw4QkFBcUI7WUFBckIsc0JBQXFCO0lBQ3JCLFdBQVUsRUFDWDtFQUVEO0lBQ0UsbUNBQTBCO1lBQTFCLDJCQUEwQjtJQUMxQixpQ0FBd0I7WUFBeEIseUJBQXdCO0lBQ3hCLHNDQUE2QjtZQUE3Qiw4QkFBNkIsRUFDOUI7O0FBRUQ7RUFDRTtJQUNFLG9DQUEyQjtZQUEzQiw0QkFBMkI7SUFDM0IsV0FBVSxFQUFBO0VBRVo7SUFDRSxpQ0FBd0I7WUFBeEIseUJBQXdCO0lBQ3hCLFdBQVUsRUFBQSxFQUFBOztBQVBkO0VBQ0U7SUFDRSxvQ0FBMkI7WUFBM0IsNEJBQTJCO0lBQzNCLFdBQVUsRUFBQTtFQUVaO0lBQ0UsaUNBQXdCO1lBQXhCLHlCQUF3QjtJQUN4QixXQUFVLEVBQUEsRUFBQTs7QUFJZDtFQUNFO0lBQ0UsaUNBQXdCO1lBQXhCLHlCQUF3QjtJQUN4QixXQUFVLEVBQUE7RUFFWjtJQUNFLG9DQUEyQjtZQUEzQiw0QkFBMkI7SUFDM0IsV0FBVSxFQUFBLEVBQUE7O0FBUGQ7RUFDRTtJQUNFLGlDQUF3QjtZQUF4Qix5QkFBd0I7SUFDeEIsV0FBVSxFQUFBO0VBRVo7SUFDRSxvQ0FBMkI7WUFBM0IsNEJBQTJCO0lBQzNCLFdBQVUsRUFBQSxFQUFBOztBQUtoQjtFQUNFLGFBQVk7RUFDWiwyQkFBc0I7TUFBdEIsdUJBQXNCO0VBQ3RCLHFCQUFhO0VBQWIsY0FBYTtFQUNiLHVCQUFtQjtNQUFuQixvQkFBbUI7RUFDbkIsc0JBQXVCO01BQXZCLHdCQUF1QjtFQUN2QixlQUFjO0VBQ2Qsa0JBQWlCLEVBQ2xCOztBQUVEO0VBQ0UsbUJBQWtCO0VBQ2xCLGdCQUFlO0VBQ2Ysd0JBQXVCO0VBQ3ZCLGVBQWM7RUFDZCxpQkFBZ0I7RUFDaEIsaUJBQWdCLEVBa0hqQjtFQXhIRDtJQVNJLGlCQUFnQixFQUNqQjtFQVZIO0lBYUksWUFBVztJQUNYLGVBQWM7SUFFZCxzQkFBcUIsRUF1QnRCO0VBdkNIO0lBMkNNLHlCQUF3QixFQUN6QjtFQTVDTDtJQStDTSw2QkFBNEIsRUFDN0I7RUFoREw7SUFxRE0sOEJBQWlDLEVBQ2xDO0VBdERMO0lBeURNLDhCQUFpQyxFQUNsQztFQTFETDtJQStETSw4QkFBaUMsRUFDbEM7RUFoRUw7SUFtRU0sOEJBQWlDLEVBQ2xDO0VBcEVMO0lBeUVNLCtCQUFpQyxFQUNsQztFQTFFTDtJQTZFTSwrQkFBaUMsRUFDbEM7RUE5RUw7SUFtRk0sK0JBQWlDLEVBQ2xDO0VBcEZMO0lBdUZNLCtCQUFpQyxFQUNsQztFQXhGTDtJQTZGTSwrQkFBaUMsRUFDbEM7RUE5Rkw7SUFpR00sK0JBQWlDLEVBQ2xDO0VBbEdMO0lBdUdNLCtCQUFpQyxFQUNsQztFQXhHTDtJQTJHTSwrQkFBaUMsRUFDbEM7RUE1R0w7SUFpSE0sNkJBQWdDLEVBQ2pDO0VBbEhMO0lBcUhNLDZCQUFnQyxFQUNqQzs7QUFJTDtFQUNFLG1CQUFrQjtFQUNsQixnQkFBZTtFQUNmLGNBQWEsRUFLZDtFQVJEO0lBTUksaUJBQWdCLEVBQ2pCOztBQUdIO0VBQ0UsZUFBYyxFQUNmOztBQUVEO0VBQ0UsZ0JBQWU7RUFDZixlQUFjO0VBQ2QsaUJBQWdCO0VBQ2hCLGlCQUFnQixFQVdqQjtFQVRDO0lBQ0UsaUJBQWdCLEVBQ2pCO0VBUkg7SUFXSSxZQUFXO0lBQ1gsc0JBQXFCO0lBQ3JCLGVBQWMsRUFDZjs7QUFHSDtFQUNFLG1CQUFrQjtFQUNsQixTQUFRO0VBQ1IsV0FBVTtFQUNWLGNBQWE7RUFDYixXQUFVO0VBQ1YsWUFBVztFQUNYLGFBQVk7RUFDWixVQUFTLEVBQ1Y7O0FBRUQ7RUFDRSxXQUFVLEVBQ1g7O0FBRUQ7RUFDRSxnQkFBZTtFQUNmLGdCQUFlO0VBQ2YsVUFBUztFQUNULFlBQVc7RUFDWCxhQUFZO0VBQ1oseUJBQXdCO0VBQ3hCLFdBQVUsRUFZWDtFQW5CRDtJQVVJLFdBQVUsRUFDWDtFQVhIO0lBY0ksWUFBVztJQUNYLGFBQVk7SUFDWixjQUFhO0lBQ2IsVUFBUyxFQUNWOztBQUdIO0VBQ0UsMEJBQXlCO0VBQ3pCLGdCQUFlO0VBQ2YsUUFBTztFQUNQLFVBQVM7RUFDVCxTQUFRO0VBQ1IsY0FBYTtFQUNiLHFCQUFhO0VBQWIsY0FBYTtFQUNiLG1CQUF5QjtNQUF6QiwwQkFBeUIsRUEyRDFCO0VBbkVEO0lBV0ksaUJBQWdCLEVBQ2pCO0VBWkg7SUFlSSxrQkFBaUIsRUFDbEI7RUFoQkg7SUFzQkksZ0JBQWU7SUFDZixpQkFBZ0I7SUFDaEIsd0JBQXVCO0lBQ3ZCLHVCQUFzQjtJQUN0QixtQkFBa0I7SUFDbEIsZ0JBQWUsRUFDaEI7RUFFRDtJQUNFLG9DQUEyQjtZQUEzQiw0QkFBMkI7SUFDM0IsaUNBQXdCO1lBQXhCLHlCQUF3QjtJQUN4QixzQ0FBNkI7WUFBN0IsOEJBQTZCO0lBQzdCLDhCQUFxQjtZQUFyQixzQkFBcUI7SUFDckIsa0VBQXlEO1lBQXpELDBEQUF5RDtJQUN6RCxvQ0FBMkI7WUFBM0IsNEJBQTJCO0lBQzNCLFdBQVUsRUFDWDtFQUVEO0lBQ0UscUNBQTRCO1lBQTVCLDZCQUE0QjtJQUM1QixpQ0FBd0I7WUFBeEIseUJBQXdCO0lBQ3hCLHNDQUE2QjtZQUE3Qiw4QkFBNkIsRUFDOUI7O0FBRUQ7RUFDRTtJQUNFLG9DQUEyQjtZQUEzQiw0QkFBMkI7SUFDM0IsV0FBVSxFQUFBO0VBRVo7SUFDRSxpQ0FBd0I7WUFBeEIseUJBQXdCO0lBQ3hCLFdBQVUsRUFBQSxFQUFBOztBQVBkO0VBQ0U7SUFDRSxvQ0FBMkI7WUFBM0IsNEJBQTJCO0lBQzNCLFdBQVUsRUFBQTtFQUVaO0lBQ0UsaUNBQXdCO1lBQXhCLHlCQUF3QjtJQUN4QixXQUFVLEVBQUEsRUFBQTs7QUFJZDtFQUNFO0lBQ0UsaUNBQXdCO1lBQXhCLHlCQUF3QjtJQUN4QixXQUFVLEVBQUE7RUFFWjtJQUNFLG1DQUEwQjtZQUExQiwyQkFBMEI7SUFDMUIsV0FBVSxFQUFBLEVBQUE7O0FBUGQ7RUFDRTtJQUNFLGlDQUF3QjtZQUF4Qix5QkFBd0I7SUFDeEIsV0FBVSxFQUFBO0VBRVo7SUFDRSxtQ0FBMEI7WUFBMUIsMkJBQTBCO0lBQzFCLFdBQVUsRUFBQSxFQUFBOztBQUtoQjtFQUNFLG9CQUFtQjtFQUNuQixzQkFBdUI7TUFBdkIsd0JBQXVCLEVBMEJ4QjtFQTVCRDtJQUtJLG9CQUFtQjtJQUNuQixpQkFBZ0I7SUFDaEIsZ0JBQWU7SUFDZix1QkFBc0I7SUFDdEIsZUFBYztJQUNkLDBCQUF5QixFQUMxQjtFQVhIO0lBY0ksK0JBQThCO0lBQzlCLGdCQUFlO0lBQ2YsYUFBWTtJQUNaLFlBQVc7SUFDWCxzQkFBcUI7SUFDckIscUJBQW9CO0lBQ3BCLFdBQVU7SUFDViw0Q0FBMkM7SUFDM0Msa0JBQWlCLEVBS2xCO0lBM0JIO01BeUJNLFdBQVUsRUFDWDs7QUNyWkw7RUFDRSxrQkFBaUIsRUFnRWxCO0VBakVEO0lBSUksYUFBWTtJQUNaLGlCQUFnQjtJQUNoQixpQkFBZ0IsRUF1QmpCO0lBN0JIO01BU00saUJBQWdCO01BQ2hCLFdBQVUsRUFDWDtJQVhMO01BY00sZ0JBQWU7TUFDZixVQUFTLEVBQ1Y7SUFoQkw7TUFtQk0sZ0JBQWU7TUFDZixxQkFBb0IsRUFDckI7SUFyQkw7TUEwQk0sZUFBYztNQUNkLGdCQUFlLEVBQ2hCO0VBNUJMO0lBZ0NJLGVBQWM7SUFDZCxlQUFjO0lBRWQsZUFBYztJQUNkLGlCQUFnQjtJQUNoQixnQkFBZTtJQUNmLGtCQUFpQixFQTBCbEI7SUFoRUg7TUF5Q00sZUFBYztNQUNkLHNCQUFxQjtNQUNyQixpQkFBZ0I7TUFDaEIsZ0JBQWU7TUFDZixrQkFBaUIsRUFDbEI7SUE5Q0w7TUFpRE0sZUFBYztNQUNkLG1CQUFrQjtNQUNsQixrQkFBaUI7TUFDakIsZ0JBQWU7TUFDZixpQkFBZ0I7TUFDaEIsd0JBQXVCLEVBS3hCO01BM0RMO1FBeURRLGNBQWEsRUFDZDtJQTFEUDtNQThETSxpQkFBZ0IsRUFDakI7O0FDL0RMO0VBQ0UscUJBQWE7RUFBYixjQUFhO0VBQ2Isb0JBQWU7TUFBZixnQkFBZTtFQUNmLG1CQUFrQjtFQUNsQixvQkFBbUIsRUFDcEI7O0FBRUQ7RUFDRSxjQUFhO0VBQ2IsNkQzRFRnRSxFMkRVakU7O0FBRUQ7RUFDRSxjQUFhLEVBQ2Q7O0FBRUQ7RUFDRSxXQUFVLEVBQ1g7O0FBRUQ7RUFwQkE7SUFzQkksbUJBQWtCO0lBQ2xCLG9CQUFtQixFQUNwQjtFQWpCSDtJQW9CSSxjQUFhLEVBQ2Q7RUFoQkg7SUFtQkksWUFBVyxFQUNaO0VBaEJIO0lBbUJJLFdBQVUsRUFDWCxFQUFBOztBQUdIO0VBdkNBO0lBeUNJLGtCQUFpQjtJQUNqQixtQkFBa0IsRUFDbkI7RUFwQ0g7SUF1Q0ksYUFBWSxFQUNiLEVBQUE7O0FBR0g7RUFsQ0E7SUFxQ00sWUFBVyxFQUNaLEVBQUE7O0FBSUw7RUFDRSxtQkFBa0I7RUFDbEIsYUFBWSxFQUNiOztBQXRERDtFQXlERSxtQkFBa0I7RUFDbEIsbUNBQTBCO0VBQTFCLDJCQUEwQjtFQUExQixtREFBMEI7RUFDMUIsY0FBYSxFQTJEZDtFQTlERDtJQU1JLDRCQUEyQjtJQUMzQixlQUFjO0lBQ2QsWUFBVztJQUNYLGFBQVk7SUFDWixtQkFBa0I7SUFDbEIsT0FBTTtJQUNOLFFBQU87SUFDUCxtQkFBa0I7SUFDbEIsb0JBQW1CO0lBQ25CLDBCQUFpQztJQUNqQyxxRkFFcUM7SUFDckMscUJBQWE7SUFBYixjQUFhO0lBQ2IsMkJBQXNCO1FBQXRCLHVCQUFzQjtJQUN0Qix1QkFBOEI7UUFBOUIsK0JBQThCO0lBQzlCLHNCQUFxQjtJQUNyQiw2QkFBNEI7SUFDNUIsMkJBQTBCO0lBQzFCLGtDQUFpQyxFQTRCbEM7SUFyREg7TUE0Qk0sWUFBVztNQUNYLGlCQUFnQjtNQUNoQixnQkFBZTtNQUNmLG1CQUFrQjtNQUNsQixjQUFhO01BQ2IsaUJBQWdCLEVBQ2pCO0lBbENMO01BcUNNLGdCQUFlO01BQ2YsMEJBQXlCO01BQ3pCLHNCQUFxQjtNQUNyQixnQ0FBZ0I7TUFDaEIsaUJBQWdCO01BQ2hCLG1CQUFrQjtNQUNsQixzQkFBcUIsRUFDdEI7SUE1Q0w7TUErQ00sMEJBQXlCO01BQ3pCLGdCQUFlO01BQ2Ysa0JBQWlCO01BQ2pCLHVCQUFzQjtNQUN0QixZQUFXLEVBQ1o7RUFwREw7SUF3REksb0NBQTJCO1lBQTNCLDRCQUEyQixFQUM1QjtFQXpESDtJQTRESSxpREFBZ0QsRUFDakQ7O0FBR0g7RUFFSSx1QkFBc0IsRUFhdkI7RUFmSDtJQUtNLGVBQXNCLEVBQ3ZCO0VBTkw7SUFTTSwwQkFBZ0IsRUFDakI7RUFWTDtJQWFNLGUzRG5JaUIsRTJEb0lsQjs7QUFJTDtFQUdNLGdCQUFlO0VBQ2Ysa0JBQWlCLEVBQ2xCOztBQUxMO0VBUU0sb0JBQW1CLEVBQ3BCOztBQVRMO0VBWU0sbUNBQTBCO0VBQTFCLDJCQUEwQjtFQUExQixtREFBMEI7RUFDMUIsd0JBQXVCO0VBQ3ZCLGlCQUFnQjtFQUNoQixnQkFBZTtFQUNmLGlCQUFnQjtFQUNoQixzQkFBcUIsRUFDdEI7O0FBbEJMO0VBcUJNLDBDQUFpQztVQUFqQyxrQ0FBaUMsRUFDbEM7O0FDdktMO0VBRUksaUJBQWdCLEVBQ2pCOztBQUhIO0VBTUksaUJBQWdCLEVBQ2pCOztBQVBIOztFQVdJLG1CQUFrQjtFQUNsQixXQUFVO0VBQ1YsYUFBWTtFQUNaLGtCQUFpQjtFQUNqQixVQUFTO0VBQ1QsbUJBQWtCO0VBQ2xCLGFBQVk7RUFDWixZQUFXO0VBQ1gsMkNBQXNDO0VBQ3RDLGNBQWEsRUFhZDtFQWpDSDs7SUF1Qk0sd0JBQXVCO0lBQ3ZCLGlCQUFnQjtJQUNoQixlQUFjO0lBQ2QsZTVESmlCO0k0REtqQixnQkFBZSxFQUNoQjtFQTVCTDs7SUErQk0sY0FBYSxFQUNkOztBQWhDTDtFQW9DSSxZQUFXO0VBQ1gsWUFBVyxFQUtaO0VBMUNIO0lBd0NNLGlCQUFnQixFQUNqQjs7QUF6Q0w7RUE4Q00sbUJBQWtCLEVBQ25COztBQS9DTDtFQWtETSxZQUFXO0VBQ1gsVUFBUztFQUNULGlCQUFnQjtFQUNoQixvQkFBbUIsRUFLcEI7RUExREw7SUF3RFEsZUFBYyxFQUNmOztBQXpEUDtFQTZETSxhQUFZO0VBQ1osc0NBQTZCO1VBQTdCLDhCQUE2QjtFQUM3Qiw0REFBK0M7RUFBL0Msb0RBQStDO0VBQS9DLHFHQUErQyxFQUNoRDs7QUFoRUw7RUFtRU0sbUNBQTBCO1VBQTFCLDJCQUEwQixFQUMzQjs7QUFwRUw7RUF1RU0saUJBQWdCO0VBQ2hCLFVBQVM7RUFDVCx3QkFBdUIsRUFDeEI7O0FDMUVMO0VBQ0UsNkQ3RERnRTtFNkRFaEUscUJBQWE7RUFBYixjQUFhO0VBQ2IsdUJBQW1CO01BQW5CLG9CQUFtQjtFQUNuQixtQkFBa0IsRUFDbkI7O0FBRUQ7RUFDRSxnQkFBZSxFQWFoQjtFQWREO0lBSUksc0JBQXFCO0lBQ3JCLFVBQVM7SUFDVCxjQUFhO0lBQ2IsWUFBVztJQUNYLGFBQVksRUFDYjtFQVRIO0lBWUksY0FBYSxFQUNkOztBQUdIO0VBQ0UsY0FBYSxFQUNkOztBQ3pCRDtFQUNFLHdEQUF1RDtFQUN2RCxnQ0FBOEI7RUFDOUIsdUJBQXNCO0VBQ3RCLGlCQUFnQjtFQUNoQixnQkFBZTtFQUNmLG1CQUFrQjtFQUNsQixZQUFXO0VBQ1gsbUJBQWtCO0VBQ2xCLHVCQUFzQixFQWtEdkI7RUEzREQ7SUFZSSxrQkFBaUI7SUFDakIsZ0JBQWU7SUFDZix1QkFBc0I7SUFDdEIsaUJBQWdCO0lBQ2hCLGFBQVksRUFDYjtFQWpCSDtJQW9CSSxZQUFXO0lBQ1gsa0JBQWlCO0lBQ2pCLDRCQUEyQixFQUM1QjtFQXZCSDtJQTBCSSxrQkFBaUI7SUFDakIsb0JBQW1CO0lBQ25CLGVBQWM7SUFDZCxpQkFBZ0I7SUFDaEIsMEJBQXlCO0lBQ3pCLGdCQUFlO0lBQ2Ysc0JBQXFCO0lBQ3JCLDBCQUF5QjtJQUN6QixvQkFBbUI7SUFDbkIsc0JBQXFCO0lBQ3JCLHNCQUFxQixFQU10QjtJQTFDSDtNQXVDTSxhQUFZO01BQ1osc0JBQXFCLEVBQ3RCO0VBekNMO0lBNkNJLGdCQUFlO0lBQ2YscUJBQW9CLEVBQ3JCO0VBL0NIO0lBa0RJLGdCQUFlLEVBUWhCO0lBTkM7TUFwREo7UUFzRE0sY0FBWTtRQUNaLG1CQUFrQjtRQUNsQixpQkFBZ0IsRUFFbkIsRUFBQTs7QUFFSDtFQUVJLGNBQWEsRUFLZDtFQUhDO0lBSko7TUFLTSxlQUFjLEVBRWpCLEVBQUE7O0FBRUg7RUFDRSxjQUFhLEVBVWQ7RUFYRDtJQUlJLG1CQUFrQjtJQUNsQixVQUFTLEVBQ1Y7RUFFRDtJQVJGO01BU0ksY0FBYSxFQUVoQixFQUFBOztBQUVEO0VBQ0Usa0JBQWlCLEVBQ2xCOztBQUVEO0VBRUksY0FBYSxFQUNkOztBQUVEO0VBTEY7SUFNSSxjQUFhLEVBRWhCLEVBQUE7O0FDOUZEO0VBQ0UsWUFBVztFQUNYLFdBQVU7RUFDVixlQUFjO0VBQ2QsYUFBWTtFQUNaLGdCQUFlO0VBQ2YsV0FBVTtFQUNWLFdBQVU7RUFDVixxQkFBb0I7RUFDcEIsd0JBQXVCLEVBcUZ4QjtFQW5GQztJQVhGO01BWUksY0FBYSxFQWtGaEIsRUFBQTtFQTlGRDtJQWlCSSxnQkFBZTtJQUNmLFdBQVU7SUFDVixXQUFVO0lBQ1Ysb0JBQW1CLEVBQ3BCO0VBckJIO0lBd0JJLDBCQUF5QjtJQUN6QixzQkFBcUI7SUFDckIsZ0JBQWU7SUFDZixpQkFBZ0I7SUFDaEIsZUFBYztJQUNkLG9CQUFtQjtJQUNuQixXQUFVO0lBQ1Ysd0NBQStCO1lBQS9CLGdDQUErQjtJQUMvQixzQ0FBNkI7WUFBN0IsOEJBQTZCLEVBQzlCO0VBakNIO0lBb0NJLGlCQUFnQjtJQUNoQixnQkFBZSxFQUNoQjtFQXRDSDtJQXlDSSxXQUFVO0lBQ1Ysb0NBQTJCO1lBQTNCLDRCQUEyQjtJQUMzQiw0Q0FBbUM7WUFBbkMsb0NBQW1DO0lBQ25DLHNDQUE2QjtZQUE3Qiw4QkFBNkIsRUFLOUI7SUFqREg7TUE4Q3FCLDhCQUFxQjtjQUFyQixzQkFBcUIsRUFBSTtJQTlDOUM7TUErQ3FCLDhCQUFxQjtjQUFyQixzQkFBcUIsRUFBSTtJQS9DOUM7TUFnRHFCLDhCQUFxQjtjQUFyQixzQkFBcUIsRUFBSTtFQWhEOUM7SUFvREksbUJBQWtCO0lBQ2xCLFlBQVc7SUFDWCxhQUFZO0lBQ1osZUFBYztJQUNkLGdCQUFlO0lBQ2Ysb0JBQW1CO0lBQ25CLGlCQUFnQixFQW1DakI7SUE3Rkg7TUE4RE0sa0VBQWlFO01BQ2pFLHNCQUFxQjtNQUNyQixZQUFXO01BQ1gsYUFBWTtNQUNaLGVBQWM7TUFDZCxZQUFXO01BQ1gseUJBQXdCLEVBQ3pCO0lBckVMO01Bd0VNLFdBQVU7TUFDVixtQkFBa0I7TUFDbEIsT0FBTTtNQUNOLFNBQVE7TUFDUixVQUFTO01BQ1QsUUFBTyxFQUNSO0lBOUVMO01Ba0ZRLFdBQVUsRUFDWDtJQW5GUDtNQXNGdUIsNkJBQTRCLEVBQUk7SUF0RnZEO01BdUZ5Qiw2QkFBNEIsRUFBSTtJQXZGekQ7TUF3RndCLDZCQUE0QixFQUFJO0lBeEZ4RDtNQXlGNEIsNkJBQTRCLEVBQUk7SUF6RjVEO01BMEYyQiw4QkFBNkIsRUFBSTtJQTFGNUQ7TUEyRnVCLDhCQUE2QixFQUFJO0lBM0Z4RDtNQTRGc0IsOEJBQTZCLEVBQUk7O0FDNUZ2RDtFQUNFLGlCQUFnQjtFQUNoQixvQkFBbUI7RUFDbkIsV0FBVTtFQUNWLHFCQUFhO0VBQWIsY0FBYSxFQVNkO0VBUEM7SUFORjtNQU9JLFVBQVM7TUFDVCx1QkFBOEI7VUFBOUIsK0JBQThCO01BQzlCLGlCQUFnQjtNQUNoQixrQkFBaUI7TUFDakIsbUJBQWtCLEVBRXJCLEVBQUE7O0FBRUQ7RUFDRSxXQUFVO0VBQ1YscUJBQWE7RUFBYixjQUFhO0VBQ2IsbUJBQWtCO0VBQ2xCLGdCQUFlO0VBQ2YsVUFBUyxFQXVDVjtFQTVDRDtJQVNJLFlBQVc7SUFDWCxlQUFjO0lBQ2QsV0FBVTtJQUNWLFlBQVc7SUFDWCxhQUFZO0lBQ1osbUJBQWM7UUFBZCxlQUFjO0lBQ2QsMkJBQTBCO0lBQzFCLDZCQUE0QixFQUM3QjtFQWpCSDtJQW9CSSxrRUFBaUUsRUFDbEU7RUFyQkg7SUF3QkksbUVBQWtFLEVBQ25FO0VBekJIO0lBNEJJLG1CQUFrQixFQUNuQjtFQUVEO0lBL0JGO01BZ0NJLHdCQUF1QjtNQUN2QixxQ0FBb0MsRUFXdkM7TUE1Q0Q7UUFxQ00sY0FBYSxFQUNkO01BdENMO1FBeUNNLGtCQUFpQixFQUNsQixFQUFBOztBQUlMO0VBQ0UsZ0JBQWU7RUFDZixpQkFBZ0I7RUFDaEIsd0JBQXVCO0VBQ3ZCLHFCQUFhO0VBQWIsY0FBYTtFQUNiLHVCQUFtQjtNQUFuQixvQkFBbUI7RUFDbkIsYUFBWTtFQUNaLGtCQUFpQjtFQUNqQixtQkFBa0I7RUFDbEIsZUFBYztFQUNkLG1CQUFjO01BQWQsZUFBYztFQUNkLGdCQUFlO0VBRWYsd0JBQXVCO0VBQ3ZCLGVBQWMsRUFpRGY7RUEvREQ7SUFpQkksa0JBQWlCO0lBQ2pCLG1CQUFjO1FBQWQsZUFBYyxFQUNmO0VBbkJIO0lBc0JJLG1CQUFjO1FBQWQsZUFBYyxFQUNmO0VBdkJIO0lBMEJJLGNBQWEsRUFDZDtFQTNCSDtJQTZCSSxjQUFhLEVBQ2Q7RUE5Qkg7SUFnQ0ksY0FBYSxFQUNkO0VBakNIO0lBbUNJLGdCQUFlLEVBQ2hCO0VBcENIO0lBc0NJLGdCQUFlLEVBQ2hCO0VBdkNIO0lBMENJLHVCQUFzQjtJQUN0QixZQUFXLEVBS1o7SUFoREg7TUE4Q00sV0FBVSxFQUNYO0VBR0g7SUFsREY7TUFtREksMkJBQXNCO1VBQXRCLHVCQUFzQjtNQUN0QixnQkFBZTtNQUNmLGFBQVk7TUFDWixxQkFBb0I7TUFDcEIsWUFBTztVQUFQLFFBQU87TUFDUCxtQkFBa0I7TUFDbEIsa0JBQWlCLEVBTXBCO01BL0REO1FBNERNLG1CQUFrQixFQUNuQixFQUFBOztBQUlMO0VBQ0UscUJBQW9CLEVBNENyQjtFQTFDQztJQUhGO01BTU0sV0FBVSxFQUNYO0lBUEw7O01BV00saUJBQWdCO01BQ2hCLGVBQWMsRUFLZjtNQWpCTDs7UUFlUSxjQUFhLEVBQ2Q7SUFoQlA7TUFvQk0sY0FBYSxFQUNkO0lBckJMO01BdUJNLGNBQWEsRUFDZDtJQXhCTDtNQTBCTSxjQUFhLEVBQ2Q7SUEzQkw7O01BK0JNLGFBQVksRUFDYixFQUFBO0VBR0g7SUFuQ0Y7TUFvQ0ksa0RBQWtDLEVBU3JDO01BN0NEO1FBdUNNLFlBQVcsRUFJWjtRQTNDTDtVQXlDUSxXQUFVLEVBQ1gsRUFBQTs7QUFLUDs7RUFHSSxjQUFhLEVBS2Q7RUFSSDs7SUFNTSxlQUFjLEVBQ2Y7O0FDcExMOztFQUVFLG9CakVPcUI7RWlFTnJCLGtCQUFpQjtFQUNqQixxQkFBb0I7RUFDcEIsbUJBQWtCO0VBQ2xCLGFBQVk7RUFDWixpQkFBZ0I7RUFDaEIsZ0JBQWU7RUFDZiwwQkFBeUI7RUFDekIscUJBQW9CLEVBS3JCO0VBZkQ7O0lBYUksb0JqRVFtQixFaUVQcEI7O0FDZEg7RUFDRSxtQkFBa0I7RUFDbEIsd0JBQXVCLEVBbVF4QjtFQWpRQztJQUpGO01BS0ksa0JBQWlCLEVBZ1FwQixFQUFBO0VBN1BDO0lBUkY7TUFTSSxrQkFBaUIsRUE0UHBCLEVBQUE7RUFyUUQ7SUFhSSxzQkFBcUI7SUFDckIsT0FBTTtJQUNOLFFBQU87SUFDUCxZQUFXO0lBQ1gsYUFBWSxFQWdIYjtJQWpJSDtNQXFCTSxZQUFXO01BQ1gsZ0JBQWU7TUFDZixrQkFBaUI7TUFDakIsd0JBQXVCO01BQ3ZCLGlCQUFnQjtNQUNoQixlQUFjLEVBQ2Y7SUEzQkw7TUE4Qk0sZ0JBQWU7TUFDZixpQkFBZ0I7TUFDaEIsd0JBQXVCLEVBTXhCO01BdENMO1FBbUNRLGlCQUFnQjtRQUNoQixZQUFXO1FBQUMsa0JBQWlCLEVBQzlCO0lBckNQO01BeUNNLFdBQVU7TUFDVixvQkFBbUIsRUFDcEI7SUEzQ0w7TUE4Q00scUJBQWE7TUFBYixjQUFhO01BQ2IsdUJBQThCO1VBQTlCLCtCQUE4QjtNQUM5Qix1QkFBbUI7VUFBbkIsb0JBQW1CLEVBQ3BCO0lBakRMO01Bb0RNLDRCQUEyQjtNQUMzQixxQkFBb0I7TUFDcEIscUJBQW9CO01BQ3BCLDRCQUFvQjtNQUFwQixxQkFBb0I7TUFDcEIsdUJBQW1CO1VBQW5CLG9CQUFtQjtNQUNuQixpQkFBZ0I7TUFDaEIsZ0JBQWU7TUFDZixrQkFBaUI7TUFDakIsd0JBQXVCO01BQ3ZCLGdCQUFlLEVBMEJoQjtNQXZGTDtRQWdFUSxpQkFBZ0I7UUFDaEIsWUFBVztRQUNYLGlCQUFnQixFQUNqQjtNQW5FUDtRQXNFUSxzQkFBcUI7UUFDckIsZ0JBQWU7UUFDZixZQUFXO1FBQ1gsYUFBWTtRQUNaLFVBQVM7UUFDVCxXQUFVLEVBQ1g7TUE1RVA7UUErRVEsWUFBVztRQUNYLGFBQVk7UUFDWixrQkFBaUIsRUFDbEI7TUFsRlA7UUFxRlEsbUNBQTBCO2dCQUExQiwyQkFBMEIsRUFDM0I7SUFHSDtNQXpGSjtRQTBGTSxzQkFBcUIsRUF1Q3hCO1FBaklIO1VBNkZRLG1DQUE4QjtjQUE5QiwrQkFBOEI7VUFDOUIsc0JBQXVCO2NBQXZCLHdCQUF1QixFQUN4QjtRQS9GUDtVQWtHUSxvQkFBbUIsRUFDcEI7UUFuR1A7VUFzR1EsZUFBYyxFQUNmO1FBdkdQO1VBMEdRLG9CQUFtQixFQUNwQixFQUFBO0lBR0g7TUE5R0o7UUFnSFEsWUFBVyxFQUNaO01BakhQO1FBb0hRLHdCQUFtQjtZQUFuQixvQkFBbUIsRUFDcEI7TUFySFA7UUF3SFEsZUFBYyxFQUNmLEVBQUE7SUFHSDtNQTVISjtRQThIUSxtQ0FBOEI7WUFBOUIsK0JBQThCLEVBQy9CLEVBQUE7RUEvSFA7SUFxSU0sdUVBQXNFO0lBQ3RFLDRCQUEyQjtJQUMzQixhQUFZO0lBQ1osYUFBWSxFQUNiO0VBeklMO0lBNElNLGVBQWMsRUFDZjtFQTdJTDtJQWdKTSwwQkFBeUI7SUFDekIsZUFBYyxFQVNmO0lBMUpMO01Bb0pRLGNBQWEsRUFDZDtJQXJKUDtNQXdKUSwwQkFBc0MsRUFDdkM7RUF6SlA7SUFpS00sbUVBQWtFO0lBQ2xFLDRCQUEyQjtJQUMzQixhQUFZO0lBQ1osYUFBWSxFQUNiO0VBcktMO0lBd0tNLGVBQ0YsRUFBQztFQXpLTDtJQTRLTSwwQkFBeUI7SUFDekIsZUFBYyxFQVNmO0lBdExMO01BZ0xRLGNBQWEsRUFDZDtJQWpMUDtNQW9MUSwwQkFBc0MsRUFDdkM7RUFyTFA7SUEwTEksV0FBVTtJQUNWLGFBQVk7SUFDWixtQkFBa0I7SUFDbEIsYUFBWTtJQUNaLFNBQVE7SUFDUixPQUFNO0lBQ04saUJBQWdCLEVBS2pCO0lBSEM7TUFsTUo7UUFtTU0seUJBQXdCLEVBRTNCLEVBQUE7RUFyTUg7SUF3TUksWUFBVztJQUNYLGFBQVk7SUFDWix1QkFBc0I7SUFDdEIsNkJBQTRCO0lBQzVCLG1DQUFrQztJQUNsQyxtQkFBa0I7SUFDbEIsT0FBTTtJQUNOLFFBQU8sRUFRUjtJQXZOSDtNQWtOTSxxRUFBb0UsRUFDckU7SUFuTkw7TUFxTk0sMEVBQXlFLEVBQzFFO0VBdE5MO0lBME5JLG1CQUFrQjtJQUNsQixZQUFXO0lBQ1gsYUFBWTtJQUNaLFFBQU87SUFDUCxZQUFXO0lBQ1gsZ0JBQWU7SUFDZixnQkFBZSxFQW9DaEI7SUFwUUg7TUFtT00seUJBQXdCO01BQ3hCLDRCQUFvQjtNQUFwQixxQkFBb0I7TUFDcEIsc0JBQXVCO1VBQXZCLHdCQUF1QjtNQUN2Qix1QkFBbUI7VUFBbkIsb0JBQW1CO01BQ25CLFlBQVc7TUFDWCxhQUFZO01BQ1osYUFBWSxFQTBCYjtNQW5RTDtRQTRPUSxxQkFBb0I7UUFDcEIsd0NBQStCO2dCQUEvQixnQ0FBK0I7UUFDL0IsZUFBYztRQUNkLFlBQVc7UUFDWCxXQUFVO1FBQ1YsWUFBVztRQUNYLHVCQUFzQjtRQUN0QixtQkFBa0IsRUFDbkI7TUFwUFA7UUF1UFEsOEJBQXFCO2dCQUFyQixzQkFBcUIsRUFDdEI7TUF4UFA7UUE0UFEsV0FBVSxFQUNYO01BN1BQO1FBZ1FRLHFCQUFvQjtRQUNwQixnQkFBZSxFQUNoQjs7QTNDNVBQO0U0Q0xFLGFBQVksRUFVYjtFQVhEO0lBSUksY0FBYTtJQUNiLGdDQUFzQixFQUN2QjtFQU5IO0lBU0ksYUFBWSxFQUNiOztBQ1ZIO0VBQ0UsbUJBQWtCLEVBMEhuQjtFQTNIRDtJQUlJLG1CQUFrQjtJQUNsQixvQ0FBMkI7WUFBM0IsNEJBQTJCO0lBQzNCLGtDQUFpQztJQUNqQywrQkFBc0I7SUFDdEIsbUJBQWtCO0lBQ2xCLG1CQUFrQjtJQUNsQixhQUFZO0lBQ1osV0FBVTtJQUNWLFlBQVc7SUFDWCxpQkFBZ0IsRUFzRmpCO0lBbkdIO01BZ0JNLG1CQUFrQjtNQUNsQixVQUFTO01BQ1QsWUFBVztNQUNYLFlBQVc7TUFDWCxRQUFPO01BQ1AsWUFBVyxFQUNaO0lBdEJMO01BeUJNLFlBQVc7TUFDWCxtQkFBa0I7TUFDbEIsU0FBUTtNQUNSLFVBQVM7TUFDVCxvQkFBbUI7TUFDbkIsNEJBQTJCO01BQzNCLHlEQUFnRDtNQUNoRCxtQkFBa0I7TUFDbEIsVUFBUztNQUNULFdBQVUsRUFDWDtJQW5DTDtNQXNDTSxnQkFBZSxFQUtoQjtNQTNDTDtRQXlDUSxhQUFZLEVBQ2I7SUExQ1A7TUErQ00sV0FBVTtNQUNWLFlBQVc7TUFDWCxhQUFZO01BQ1osV0FBVTtNQUNWLG9CQUFtQjtNQUNuQix1QkFBc0I7TUFDdEIsZ0JBQWU7TUFDZixrQkFBaUI7TUFDakIsc0JBQXFCLEVBYXRCO01BcEVMO1FBMERRLFlBQVc7UUFDWCxhQUFZO1FBQ1oseUJBQXdCO1FBQ3hCLGtDQUF5QjtnQkFBekIsMEJBQXlCO1FBQ3pCLGFBQVk7UUFDYixrRUFBaUU7UUFDaEUscUJBQW9CO1FBQ3BCLFdBQVU7UUFDVixZQUFXLEVBQ1o7SUFuRVA7TUF1RU0sV0FBVTtNQUNWLFlBQVcsRUFNWjtNQTlFTDtRQTJFUSxXQUFVO1FBQ1YsWUFDRixFQUFDO0lBN0VQO01BaUZNLGFBQVksRUFDYjtJQWxGTDtNQXFGTSxhQUFZO01BQ1osYUFBWSxFQVFiO01BOUZMO1FBeUZRLGtDQUF5QjtnQkFBekIsMEJBQXlCO1FBQ3pCLFVBQVM7UUFDVCxhQUFZO1FBQ1osWUFBVyxFQUNaO0lBN0ZQO01BaUdNLG1CQUFrQixFQUNuQjtFQWxHTDtJQXNHSSxlQUFjO0lBQ2QsaUJBQWdCO0lBQ2hCLGlCQUFnQjtJQUNoQixZQUFXO0lBQ1gsbUJBQWtCO0lBQ2xCLHFCQUFvQjtJQUNwQixvQkFBbUI7SUFDbkIsbUJBQWtCO0lBQ2xCLFlBQVc7SUFDWCxzQkFBcUI7SUFDckIsZ0JBQWUsRUFDaEI7RUFqSEg7SUFzSE0seURBQW9EO0lBQ3BELHlCQUF3QjtJQUN4QixvQ0FBMkI7WUFBM0IsNEJBQTJCLEVBQzVCOztBbEZ2R0w7RW1GakJFLCtEckVBbUU7RXFFQ25FLG1CQUFrQjtFQUNsQixtQkFBa0I7RUFDbEIsbUNBQWtDO0VBQ2xDLG9DQUFtQztFQUNuQyxtQ0FBa0MsRUF1Qm5DO0VBckJDO0luRlVGO01tRlRJLGtCQUFpQjtNQUNqQixZQUFXO01BQ1gsZ0JBQWU7TUFDZixpQkFBZ0IsRUFpQm5CLEVBQUE7RUE3QkQ7SUFnQkksb0ZBQ3FDLEVBQ3RDO0VBRUQ7SUFwQkY7TUFzQk0saUJBQWdCLEVBQ2pCLEVBQUE7RUF2Qkw7SUEyQkksaUJBQWdCLEVBQ2pCOztBQUdIO0VBQ0UsaUJBQWdCLEVBQ2pCOztBQUVEO0VBQ0UsMEJBQXlCLEVBQzFCOztBQUVEO0VBQ0UsbUJBQWtCO0VBQ2xCLGFBQVk7RUFDWixVQUFTLEVBQ1Y7O0FBRUQ7RUFDRSxlQUFjO0VBQ2QsYUFBWTtFQUNaLGlCQUFnQixFQUNqQjs7QUFFRDtFQUNFLGVBQWM7RUFDZCxhQUFZO0VBQ1osbUJBQWtCO0VBQ2xCLGtCQUFpQixFQU1sQjtFQVZEO0lBUUksa0JBQWlCLEVBQ2xCOztBQUdIO0VBQ0UsZ0JBQWU7RUFDZixrQkFBaUI7RUFDakIsbUJBQWtCO0VBQ2xCLGdCQUFlO0VBQ2YsaUJBQWdCO0VBQ2hCLGFBQVk7RUFDWiwwQnJFN0RxQjtFcUU4RHJCLGNBQWE7RUFDYixxQkFBb0IsRUFDckI7O0FBRUQ7RUFFSSxhckVuRGlCLEVxRXFEbEI7O0FBSkg7RUFPSSxtQnJFeERpQixFcUV5RGxCOztBQVJIO0VBV0ksYXJFM0QwQixFcUVpRTNCO0VBakJIO0lBY00sb0JBQTRDO0lBQzVDLGtCQUFpQixFQUNsQjs7QUFHSDtFQW5CRjtJQXFCTSxjQUFhLEVBS2Q7SUExQkw7TUF3QlEsZ0JBQWUsRUFDaEI7RUF6QlA7SUE2Qk0sc0JBQXFCLEVBQ3RCLEVBQUE7O0FBR0g7RWY1RkY7SWU2RkksdUJBQXNCLEVBb0J6QjtJZmpIRDtNZWdHTSxlQUFjO01BQ2QseUJBQXdCLEVBQ3pCO0lBdkNMO01BMENNLFdBQVU7TUFDVixVQUFTO01BQ1Qsc0NBQXNDO2NBQXRDLDhCQUFzQztNQUN0Qyx1Q0FBOEI7TUFBOUIsK0JBQThCO01BQTlCLDJEQUE4QixFQU8vQjtNQXBETDtRQWdEUSxpQ0FBd0I7Z0JBQXhCLHlCQUF3QjtRQUN4Qix3Q0FBdUM7UUFDdkMsdUNBQThCO1FBQTlCLCtCQUE4QjtRQUE5QiwyREFBOEIsRUFDL0IsRUFBQTs7QW5GdEhQO0VtRjZIRSxtQkFBa0I7RUFDbEIsYUFBWSxFQUNiOztBbkZySEQ7RW1Gd0hFLGlCQUFnQjtFQUNoQixtQkFBa0IsRUFLbkI7O0FuRnhERDtFbUYyREUsZXJFMUlxQjtFcUUySXJCLHNCQUFxQixFQUN0Qjs7QUFFRDtFQUNFLG1CQUFrQjtFQUNsQixZQUEyQjtFQUMzQixVQUFTO0VBQ1QsY0FBYTtFQUNiLFlBQVcsRUFJWjtFQUhDO0lBTkY7TUFPSSxXQUFVLEVBRWIsRUFBQTs7QUFFRDtFQUNFLGFBQVk7RUFDWixnQkFBZTtFQUNmLHNCQUFxQjtFQUNyQixpQkFBZ0I7RUFDaEIsbUJBQWtCO0VBQ2xCLGtCQUFpQjtFQUNqQixZQUFXO0VBQ1gsa0JBQWlCO0VBQ2pCLHNCQUFxQixFQTRDdEI7RUFyREQ7SUFZSSxZQUFXO0lBQ1gsV0FBVTtJQUNWLGlCQUFnQixFQWVqQjtJQWJDO01BaEJKO1FBaUJNLGNBQWEsRUFZaEIsRUFBQTtJQTdCSDtNQXFCTSxvQkFBbUIsRUFDcEI7SUF0Qkw7TUF5Qk0sWUFBVztNQUNYLFlBQVc7TUFDWCxpQkFBZ0IsRUFDakI7RUE1Qkw7SUFnQ0ksZXJFekxtQixFcUUwTHBCO0VBakNIO0lBb0NJLGVBQWM7SUFDZCxnQkFBZTtJQUNmLGdCQUFlO0lBQ2YsZXJFckxtQjtJcUVzTG5CLGlCQUFnQixFQUNqQjtFQXpDSDtJQTRDSSxpQkFBZ0I7SUFDaEIsc0JBQXFCO0lBQ3JCLGVBQWM7SUFDZCxtQkFBa0I7SUFDbEIsYUFBWTtJQUNaLGdCQUFlO0lBQ2YsaUJBQWdCO0lBQ2hCLGNBQWEsRUFDZDs7QUFHSDtFQUNFLG1CQUFrQjtFQUNsQixTQUFRO0VBQ1IsbUJBQWtCO0VBQ2xCLGFBQVk7RUFDWixXQUFVO0VBQ1Ysd0JBQXVCLEVBZ0J4QjtFQXRCRDtJQVNJLGdCQUFlO0lBQ2YsT0FBTSxFQUNQO0VBWEg7SUFjSSxtQkFBa0I7SUFDbEIsV0FBVTtJQUNWLGdCQUFlLEVBS2hCO0lBckJIO01BbUJNLHNCQUFxQixFQUN0Qjs7QUFJTDtFQUdJLGdCQUFlO0VBQ2Ysc0JBQXFCO0VBQ3JCLGtCQUFpQjtFQUNqQixvQkFBbUI7RUFDbkIsZXJFcE9tQjtFcUVxT25CLGdCQUFlO0VBQ2YsaUJBQWdCO0VBQ2hCLG9DQUFtQztFQUNuQyw0Q0FBMkMsRUFZNUM7RUF2Qkg7SUFlTSwwQnJFdlBpQjtJcUV3UGpCLGFBQVksRUFDYjtFQWpCTDtJQW9CTSxlckU1UGlCO0lxRTZQakIsc0JBQXFCLEVBQ3RCOztBQUlMO0VBQ0Usc0JBQXFCLEVBQ3RCOztBQUVEO0VBQ0UsMEJBQXlCO0VBQ3pCLG9CQUFtQjtFQUNuQixhQUFZLEVBQ2I7O0FBRUQ7RUFDRSxtQkFBa0I7RUFDbEIsb0JBQW1CLEVBQ3BCOztBQUVEO0VBQ0UsbUJBQWtCO0VBQ2xCLG1CQUFrQjtFQUNsQixhQUFZLEVBZ0JiO0VBbkJEOztJQVFNLG9CQUFtQixFQVNwQjtJQWpCTDs7O01BV1Esb0JBQW1CLEVBQ3BCO0lBWlA7O01BZVEsV0FBVSxFQUNYOztBQUtQO0VBckJBO0lBdUJJLGNBQWEsRUFZZDtJQW5DSDs7TUE0QlEsb0JBQW1CLEVBS3BCO01BakNQOztRQStCVSxZQUFXLEVBQ1osRUFBQTs7QUFNVDtFQXRDQTtJQXdDSSxjQUFhLEVBT2Q7SUFSRDtNQUtNLG9CQUFtQixFQUNwQixFQUFBOztBQUtQO0VBQ0UsYXJFbFQ0QjtFcUVtVDVCLGNBQWE7RUFDYixnRUFBK0Q7RUFDL0QsdUJyRXJUNEI7RXFFc1Q1QixlQUFjLEVBT2Y7RUFaRDtJQVFJLGlCQUFnQjtJQUNoQixhQUFZO0lBQ1osY0FBYSxFQUNkOztBQUdIO0VBR0UsbUNBQWtDLEVBT25DO0VBVkQ7SUFNSSxpQkFBZ0I7SUFDaEIsYUFBWTtJQUNaLGNBQWEsRUFDZDs7QUFHSDtFQUdFLG1DQUFrQyxFQVFuQztFQVhEO0lBTUksaUJBQWdCO0lBQ2hCLGFBQVk7SUFDWixjQUFhO0lBQ2Isa0JBQWlCLEVBQ2xCOztBQUdIO0VBQ0UsbUJBQWtCO0VBQ2xCLGFBQVk7RUFDWixjQUFhLEVBQ2Q7O0FBRUQ7RUFDRSxpQkFBZ0I7RUFDaEIsa0JBQWlCO0VBQ2pCLG1CQUFrQixFQU9uQjtFQVZEO0lBTUksaUJBQWdCO0lBQ2hCLGVBQWMsRUFDZjs7QUFJSDtFQUNFLGlCQUFnQjtFQUNoQixlQUFjO0VBQ2QsY0FBYTtFQUNiLFdBQVU7RUFDVixtQkFBa0IsRUF5Qm5CO0VBOUJEO0lBUUksc0JBQXFCO0lBQ3JCLDBCQUF5QjtJQUN6QixXQUFVO0lBQ1YsVUFBUztJQUNULGNBQWEsRUFXZDtJQVRDO01BZEo7UUFlTSxlQUFjO1FBQ2QsWUFBVztRQUNYLG1CQUFrQixFQU1yQixFQUFBO0lBdkJIO01BcUJNLGdCQUFlLEVBQ2hCO0VBdEJMO0lBMEJJLGVBQWM7SUFDZCxlQUFjO0lBQ2QsYUFBWSxFQUNiOztBeENoYUg7RXdDb2FFLHVCQUFzQixFQUN2Qjs7QUFFRDtFQUVJLFVBQVM7RUFDVCxrQkFBaUIsRUFDbEI7O0FBSkg7RUFPSSxpQkFBZ0I7RUFDaEIsbUJBQWtCO0VBQ2xCLG1CQUFrQjtFQUNsQiwwQkFBeUI7RUFDekIsZUFBYztFQUNkLGNBQWE7RUFDYixtQkFBa0I7RUFDbEIsa0NBQWlDLEVBTWxDO0VBcEJIO0lBaUJNLFdBQVU7SUFDVixlQUFjLEVBQ2Y7O0FBSUw7RUFHTSx3QkFBdUI7RUFDdkIsb0NBQW1DO0VBQ25DLGlCQUFnQjtFQUNoQixnQkFBZTtFQUNmLGlCQUFnQjtFQUNoQixtQkFBa0I7RUFDbEIsbUJBQWtCO0VBQ2xCLFNBQVEsRUFDVDs7QUFJTDtFQUdNLDBCQUF5QixFQUsxQjtFQVJMO0lBTVEsMEJBQXlCLEVBQzFCOztBNUJ0ZFA7RTRCNGRFLG1CQUFrQixFQUNuQjs7QUFFRDtFQUNFLGtCQUFpQixFQUNsQjs7QUFFRDtFdkJ2ZEU7SXVCeWRFLHlCQUF3QixFQUN6QixFQUFBOztBQUdIO0VBQ0UseUJBQXdCLEVBQ3pCOztBdkZpMmJEO0V1RjkxYkUseUJBQXdCLEVBQ3pCOztBQUVEO0VBQXFDLFdBQVcsRUFBRTs7QUNqZmxEO0VBQ0UsbUJBQWtCLEVBeUJuQjtFQTFCRDtJQUlJLFlBQVc7SUFDWCxpQkFBZ0IsRUFDakI7RUFOSDtJQVNJLGV0RVdtQjtJc0VWbkIsZ0JBQWUsRUFDaEI7RUFYSDtJQWNJLGdCQUFlO0lBQ2YsaUJBQWdCLEVBVWpCO0lBekJIO01Ba0JNLHNCQUFxQjtNQUNyQixpQkFBZ0I7TUFDaEIsc0JBQXFCO01BQ3JCLGtCQUFpQjtNQUNqQixtQkFBa0I7TUFDbEIsU0FBUSxFQUNUOztBQ3hCTDtFQUVJLDREQUEyRCxFQUM1RDs7QUNISDtFQUNDLG9CQUFtQjtFQUNuQixrRkFBaUY7RUFDakYsbUJBQWtCO0VBQ2xCLGFBQVksRUF3R1o7RUE1R0Q7SUFPRSxxREFBb0Q7SUFDcEQsWUFBVztJQUNYLG1CQUFrQjtJQUNsQixPQUFNO0lBQ04sU0FBUTtJQUNSLFVBQVM7SUFDVCxVQUFTLEVBQ1Q7RUFkRjtJQWlCRSxxQkFBYTtJQUFiLGNBQWE7SUFDYixtQkFBa0I7SUFDbEIsdUJBQW1CO1FBQW5CLG9CQUFtQjtJQUNuQixhQUFZLEVBRVo7RUF0QkY7O0lBMEJFLGtCQUFhO1FBQWIsY0FBYSxFQUNiO0VBM0JGO0lBOEJFLG1CQUFrQjtJQUNsQixpRkFBZ0Y7SUFDaEYseUJBQXdCO0lBQ3hCLGFBQVk7SUFDWixrQkFBZ0IsRUFDaEI7RUFuQ0Y7SUFzQ0UsYUFBWTtJQUNaLGtCQUFpQixFQWtCakI7SUF6REY7TUEwQ0csaUJBQWdCO01BQ2hCLGdCQUFlO01BQ2YsbUJBQ0QsRUFBQztJQTdDSDtNQWdERyxnQkFBZTtNQUNmLG1CQUFrQjtNQUNsQixlQUFjLEVBQ2Q7SUFuREg7TUFzREcsZUFBYztNQUNkLG9CQUFtQixFQUNuQjtFQXhESDtJQTZERyxtQkFBa0IsRUFDbEI7RUE5REg7SUFpRUcsZXhFekNvQixFd0UwQ3BCO0VBR0Y7SUFyRUQ7TUFzRUMsb0JBQW1CLEVBc0NuQjtNQTVHRDtRQXlFRSxjQUFhLEVBQ2I7TUExRUY7UUE2RUcsMkJBQXNCO1lBQXRCLHVCQUFzQjtRQUN0QixZQUFXLEVBNEJYO1FBMUdIO1VBaUZJLGNBQWE7VUFDYixZQUFXO1VBQ1gsMENBQXlDO1VBQ3pDLGlCQUFnQixFQUNoQjtRQXJGSjtVQXdGSSx3QkFBdUI7VUFDdkIsbUJBQWtCO1VBQ2xCLG1CQUFrQixFQWVsQjtVQXpHSjtZQTZGSyxxREFBb0Q7WUFDcEQsWUFBVztZQUNYLG1CQUFrQjtZQUNsQixPQUFNO1lBQ04sYUFBWTtZQUNaLFlBQVc7WUFDWCxVQUFTLEVBQ1Q7VUFwR0w7WUF1R0ssbUJBQWtCLEVBQ2xCLEVBQUE7O0FDeEdMO0VBQ0UsYUFBWTtFQUNaLGNBQWE7RUFDYiwwQkFBeUI7RUFDekIsMkRBQTBEO0VBQzFELGlCQUFnQixFQUNqQjs7QUNORDs7RUFHSSwrRDFFRmlFLEUwRW9CbEU7RUFyQkg7Ozs7Ozs7Ozs7SUFVTSxlQUFjO0lBQ2QsNkQxRVg0RCxFMEVZN0Q7RUFaTDs7SUFlTSxzQkFBcUIsRUFDdEI7RUFoQkw7O0lBbUJNLGVBQWMsRUFDZjs7QUFwQkw7RUF3Qkksa0NBQWlDO0VBQ2pDLGtHQUU4QztFQUM5Qyw2QkFBNEI7RUFDNUIsbUJBQWtCO0VBQ2xCLG1CQUFrQjtFQUNsQix1QkFBc0IsRUEwSnZCO0VBekxIO0lBa0NNLGlCQUFnQjtJQUNoQix1QkFBc0IsRUFjdkI7SUFWRztNQXZDUjtRQXdDVSxvQkFBbUIsRUFRdEIsRUFBQTtJQUxDO01BM0NSO1FBNkNZLG9CQUFtQixFQUNwQixFQUFBO0VBOUNYO0lBb0RNLGdCQUFlO0lBQ2YsaUJBQWdCO0lBQ2hCLHVCQUFzQjtJQUN0QixvQkFBbUIsRUFDcEI7RUF4REw7SUEyRE0sZ0JBQWU7SUFDZix1QkFBc0I7SUFDdEIsa0JBQWlCLEVBQ2xCO0VBOURMO0lBaUVNLGtCQUFpQjtJQUNqQixxQkFBYTtJQUFiLGNBQWE7SUFDYixpQkFBZ0I7SUFDaEIsdUJBQW1CO1FBQW5CLG9CQUFtQjtJQUNuQixzQkFBdUI7UUFBdkIsd0JBQXVCO0lBQ3ZCLG9CQUFlO1FBQWYsZ0JBQWUsRUFDaEI7RUF2RUw7SUEwRU0sZ0JBQWUsRUE0QmhCO0lBdEdMO01BNEV3QixnQkFBZSxFQUFJO0lBNUUzQztNQStFUSxnQkFBZTtNQUNmLDZEMUVoRjBEO00wRWlGMUQsd0JBQXVCO01BQ3ZCLDBCQUF5QjtNQUN6QixlQUFjO01BQ2QsbUNBQWtDLEVBVW5DO01BOUZQO1FBdUZVLGVBQTJCLEVBTTVCO1FBN0ZUO1VBMEZZLGVBQTJCO1VBQzNCLG1DQUEwQjtrQkFBMUIsMkJBQTBCLEVBQzNCO0lBNUZYO01BaUdRLGdCQUFlO01BQ2YscUJBQW9CO01BQ3BCLHNCQUFxQjtNQUNyQixtQ0FBa0MsRUFDbkM7RUFyR1A7SUF5R00saUJBQWdCO0lBQ2hCLGtCQUFpQjtJQUNqQixxQkFBb0I7SUFDcEIscUJBQWE7SUFBYixjQUFhO0lBQ2Isb0JBQWU7UUFBZixnQkFBZTtJQUNmLHVCQUE4QjtRQUE5QiwrQkFBOEI7SUFDOUIsdUJBQXNCLEVBaUN2QjtJQWhKTDtNQW1IUSxjQUFhLEVBQ2Q7SUFwSFA7TUF1SFEsaUJBQWdCO01BQ2hCLFdBQVU7TUFDVixpQkFBZ0I7TUFDaEIsaUJBQWdCO01BQ2hCLG1CQUFrQjtNQUNsQixxQkFBb0IsRUFDckI7SUE3SFA7TUFnSVEsZUFBYztNQUNkLGdCQUFlO01BQ2YsdUJBQXNCO01BQ3RCLGtCQUFpQixFQUNsQjtJQXBJUDtNQXVJUSxnQkFBZTtNQUNmLGVBQWM7TUFDZCxlQUFjLEVBQ2Y7SUFFRDtNQTVJTjtRQTZJUSxjQUFhO1FBQ2IsMEJBQTZCO1lBQTdCLDhCQUE2QixFQUVoQyxFQUFBO0VBaEpMOzs7SUFxSk0sd0NBQStCO1lBQS9CLGdDQUErQjtJQUMvQixXQUFVLEVBQ1g7RUF2Skw7SUF5SlMsNkJBQW9CO1lBQXBCLHFCQUFvQixFQUFJO0VBekpqQztJQTJKUSw0QkFBbUI7WUFBbkIsb0JBQW1CLEVBQUk7RUEzSi9CO0lBOEpNLDhCQUFxQjtZQUFyQixzQkFBcUIsRUFPdEI7SUFyS0w7TUFnS3VCLDhCQUFxQjtjQUFyQixzQkFBcUIsRUFBSTtJQWhLaEQ7TUFrS3VCLDhCQUFxQjtjQUFyQixzQkFBcUIsRUFBSTtJQWxLaEQ7TUFvS3VCLDhCQUFxQjtjQUFyQixzQkFBcUIsRUFBSTtFQXBLaEQ7SUF3S00sOEJBQXFCO1lBQXJCLHNCQUFxQixFQU90QjtJQS9LTDtNQTBLdUIsOEJBQXFCO2NBQXJCLHNCQUFxQixFQUFJO0lBMUtoRDtNQTRLdUIsOEJBQXFCO2NBQXJCLHNCQUFxQixFQUFJO0lBNUtoRDtNQThLdUIsOEJBQXFCO2NBQXJCLHNCQUFxQixFQUFJO0VBRzVDO0lBakxKO01Ba0xNLG1DQUEwQjtjQUExQiwyQkFBMEIsRUFPN0I7TUF6TEg7O1FBc0xRLG1DQUEwQjtnQkFBMUIsMkJBQTBCLEVBQzNCLEVBQUE7O0FBdkxQO0VBNExJLGtCQUFpQjtFQUNqQixtQkFBa0I7RUFDbEIsV0FBVTtFQUNWLGlCQUFnQixFQUNqQjs7QUFoTUg7RUFtTUksa0JBQWlCLEVBcUtsQjtFQXhXSDtJQXNNTSxxQkFBYTtJQUFiLGNBQWE7SUFDYix1QkFBbUI7UUFBbkIsb0JBQW1CO0lBQ25CLHVCQUE4QjtRQUE5QiwrQkFBOEIsRUFrQi9CO0lBaEJDO01BMU1OO1FBNk1VLGVBQWM7UUFDZCxrQkFBaUIsRUFDbEI7TUEvTVQ7UUFrTlUsbUJBQWtCLEVBQ25CLEVBQUE7SUFHSDtNQXROTjtRQXVOUSwyQkFBc0I7WUFBdEIsdUJBQXNCO1FBQ3RCLG1CQUFrQixFQUVyQixFQUFBO0VBMU5MO0lBNk5NLGlCQUFnQjtJQUNoQixzQkFBcUIsRUFjdEI7SUE1T0w7TUFpT1EsZ0JBQWU7TUFDZixpQkFBZ0I7TUFDaEIsd0JBQXVCO01BQ3ZCLG9CQUFtQixFQUNwQjtJQXJPUDtNQXdPUSxnQkFBZTtNQUNmLGtCQUFpQjtNQUNqQix3QkFBdUIsRUFDeEI7RUEzT1A7SUErT00sa0JBQWlCLEVBS2xCO0lBcFBMO01Ba1BRLGtCQUFpQixFQUNsQjtFQW5QUDtJQXVQTSxnQkFBZTtJQUNmLHdCQUF1QjtJQUN2Qix1QkFBc0I7SUFDdEIsNkQxRTFQNEQ7STBFMlA1RCxpQkFBZ0I7SUFDaEIseUJBQXdCLEVBQ3pCO0VBN1BMO0lBZ1FNLGlCQUFnQjtJQUNoQixXQUFVO0lBQ1Ysb0JBQW1CO0lBQ25CLHFCQUFhO0lBQWIsY0FBYTtJQUNiLG1CQUFrQjtJQUNsQixRQUFPO0lBQ1AsV0FBVTtJQUNWLHVCQUFzQjtJQUN0Qix5Q0FBZ0M7WUFBaEMsaUNBQWdDLEVBQ2pDO0VBelFMO0lBNFFNLG1CQUFrQixFQTJGbkI7SUF2V0w7TUErUVEsNkJBQTRCO01BQzVCLG1CQUFrQjtNQUNsQixlQUFjO01BQ2QsK0JBQThCLEVBOEQvQjtNQWhWUDtRQXFSVSxtQkFBa0I7UUFDbEIsT0FBTTtRQUNOLFNBQVE7UUFDUixRQUFPO1FBQ1AsVUFBUztRQUNULFlBQVc7UUFDWCw0RUFFNEI7UUFDNUIsb0JBQW1CO1FBQ25CLDREQUFtRDtRQUFuRCxvREFBbUQ7UUFBbkQsZ0ZBQW1ELEVBQ3BEO01BaFNUO1FBbVNVLDBEQUF5RDtRQUN6RCxzQkFBcUI7UUFDckIsbUJBQWtCO1FBQ2xCLFdBQVU7UUFDVixzQkFBcUI7UUFDckIsYUFBWTtRQUNaLFlBQVc7UUFDWCxZQUFXLEVBQ1o7TUNuUkw7UUFDRSwyQkFBdUQsRUFDeEQ7TUFGRDtRQUNFLDZCQUF1RCxFQUN4RDtNQUZEO1FBQ0UsNkJBQXVELEVBQ3hEO01BRkQ7UUFDRSw4QkFBdUQsRUFDeEQ7TUFGRDtRQUNFLDhCQUF1RCxFQUN4RDtNQUZEO1FBQ0UsOEJBQXVELEVBQ3hEO01BRkQ7UUFDRSw4QkFBdUQsRUFDeEQ7TUFGRDtRQUNFLDhCQUF1RCxFQUN4RDtNQUZEO1FBQ0UsOEJBQXVELEVBQ3hEO01BRkQ7UUFDRSw4QkFBdUQsRUFDeEQ7TUFGRDtRQUNFLDhCQUF1RCxFQUN4RDtNQUZEO1FBQ0UsOEJBQXVELEVBQ3hEO01BRkQ7UUFDRSw4QkFBdUQsRUFDeEQ7TUFGRDtRQUNFLDhCQUF1RCxFQUN4RDtNQUZEO1FBQ0UsOEJBQXVELEVBQ3hEO01BRkQ7UUFDRSw4QkFBdUQsRUFDeEQ7TUFGRDtRQUNFLDhCQUF1RCxFQUN4RDtNQUZEO1FBQ0UsOEJBQXVELEVBQ3hEO01BRkQ7UUFDRSw4QkFBdUQsRUFDeEQ7TUFGRDtRQUNFLDhCQUF1RCxFQUN4RDtNQUZEO1FBQ0UsOEJBQXVELEVBQ3hEO01BRkQ7UUFDRSwrQkFBdUQsRUFDeEQ7TUQxQkw7UUF1VVUsb0NBQTJCO2dCQUEzQiw0QkFBMkIsRUFRNUI7UUEvVVQ7VUEwVVksNEVBRTRCO1VBQzVCLDBDQUFpQztrQkFBakMsa0NBQWlDLEVBQ2xDO0lBOVVYOztNQW9WUSxtQkFBa0I7TUFDbEIsV0FBVTtNQUNWLGVBQWM7TUFDZCxvQkFBbUIsRUFDcEI7SUF4VlA7TUEyVlEsaUJBQWdCO01BQ2hCLHVCQUFzQjtNQUN0QixnQkFBZTtNQUNmLGtCQUFpQjtNQUNqQixlQUFjLEVBQ2Y7SUFoV1A7TUFtV1EsZ0JBQWU7TUFDZix1QkFBc0I7TUFDdEIsZUFBYyxFQUNmOztBQXRXUDtFQTJXSSxxQkFBYTtFQUFiLGNBQWE7RUFDYixvQkFBZTtNQUFmLGdCQUFlO0VBQ2YsdUJBQThCO01BQTlCLCtCQUE4QjtFQUM5QixrQkFBaUIsRUErQmxCO0VBN0JDO0lBaFhKO01BaVhNLDBCQUE2QjtVQUE3Qiw4QkFBNkIsRUE0QmhDLEVBQUE7RUE3WUg7SUFxWE0sY0FBYTtJQUNiLG9CQUFtQixFQUtwQjtJQUhDO01BeFhOO1FBeVhRLDBCQUE2QjtZQUE3Qiw4QkFBNkIsRUFFaEMsRUFBQTtFQUVEO0lBN1hKO01BOFhNLGtCQUFpQjtNQUNqQixtQkFBa0IsRUFjckI7TUE3WUg7UUFrWVEsa0JBQWlCO1FBQ2pCLGlCQUFnQjtRQUNoQixjQUFhLEVBQ2QsRUFBQTtFQUdIO0lBeFlKO01BMFlRLGFBQVksRUFDYixFQUFBOztBQTNZUDtFQWdaSSxrRUFBaUU7RUFDakUsbUJBQWtCO0VBQ2xCLG1CQUFrQixFQStJbkI7RUFqaUJIO0lBcVpNLHVCQUFzQjtJQUN0QixpQkFBZ0I7SUFDaEIsbUJBQWtCLEVBY25CO0lBcmFMO01BMFpRLGlCQUFnQjtNQUNoQixnQkFBZTtNQUNmLG9CQUFtQjtNQUNuQix3QkFBdUIsRUFDeEI7SUE5WlA7TUFpYVEsZ0JBQWU7TUFDZix1QkFBc0I7TUFDdEIsa0JBQWlCLEVBQ2xCO0VBcGFQO0lBd2FNLHFCQUFhO0lBQWIsY0FBYTtJQUNiLG9CQUFlO1FBQWYsZ0JBQWU7SUFDZix1QkFBOEI7UUFBOUIsK0JBQThCO0lBQzlCLGNBQWEsRUFNZDtJQWpiTDtNQSthUSxjQUFhLEVBQ2Q7RUFoYlA7SUFvYk0sb0JBQWU7UUFBZixnQkFBZTtJQUNmLGlCQUFnQjtJQUNoQix3QkFBdUI7SUFDdkIsbUJBQWtCO0lBQ2xCLG1CQUFrQjtJQUNsQixvQkFBbUIsRUFtRHBCO0lBNWVMO01BNmJRLFlBQVc7TUFDWCxtQkFBa0IsRUFDbkI7SUEvYlA7TUFrY1EsT0FBTTtNQUNOLFNBQVE7TUFDUixRQUFPO01BQ1AsVUFBUztNQUNULG1CQUFrQjtNQUNsQixxQkFBb0I7TUFDcEIsNkVBRStCO01BQy9CLDREQUEyRCxFQUM1RDtJQTVjUDtNQStjUSxXQUFVO01BQ1Ysd0JBQXVCO01BQ3ZCLDhFQUE2RTtNQUM3RSxzQkFBcUI7TUFDckIsYUFBWTtNQUNaLFlBQVcsRUFDWjtJQzdiSDtNQUNFLDJCQUF1RCxFQUN4RDtJQUZEO01BQ0UsNkJBQXVELEVBQ3hEO0lBRkQ7TUFDRSw4QkFBdUQsRUFDeEQ7SUFGRDtNQUNFLDhCQUF1RCxFQUN4RDtJQUZEO01BQ0UsOEJBQXVELEVBQ3hEO0lBRkQ7TUFDRSw4QkFBdUQsRUFDeEQ7SUFGRDtNQUNFLDhCQUF1RCxFQUN4RDtJQUZEO01BQ0UsOEJBQXVELEVBQ3hEO0lBRkQ7TUFDRSw4QkFBdUQsRUFDeEQ7SUFGRDtNQUNFLDhCQUF1RCxFQUN4RDtJQUZEO01BQ0UsOEJBQXVELEVBQ3hEO0lBRkQ7TUFDRSw4QkFBdUQsRUFDeEQ7SUQxQkw7TUF1ZVEsNkdBRzBCLEVBQzNCO0VBM2VQO0lBK2VNLGVBQWM7SUFDZCxnQkFBZTtJQUNmLGlCQUFnQjtJQUNoQixzQkFBcUIsRUFDdEI7RUFuZkw7SUFzZk0sZ0JBQWU7SUFDZixnQkFBZTtJQUNmLHVCQUFzQixFQVN2QjtJQWpnQkw7TUEyZlEsK0JBQThCLEVBSy9CO01BaGdCUDtRQThmVSxlQUF3QixFQUN6QjtFQS9mVDtJQW9nQk0sbUJBQWtCO0lBQ2xCLFNBQVE7SUFDUixZQUFXO0lBQ1gsWUFBVztJQUNYLGFBQVk7SUFDWixnQkFBZTtJQUNmLGVBQWM7SUFDZCx1REFBc0QsRUFNdkQ7SUFqaEJMO01BOGdCUSxlMUVyZ0JlO00wRXNnQmYsd0NBQStCO2NBQS9CLGdDQUErQixFQUNoQztFQUtIO0lBcmhCSjtNQXVoQlEsZ0JBQWU7TUFDZixpQkFBZ0IsRUFDakI7SUF6aEJQO01BNGhCUSxxQkFBWTtVQUFaLGFBQVk7TUFDWixrQkFBaUI7TUFDakIsbUJBQWtCLEVBQ25CLEVBQUE7O0FBL2hCUDtFQXFpQk0scUJBQWE7RUFBYixjQUFhO0VBQ2IsZ0JBQWU7RUFDZixvQkFBcUI7TUFBckIsc0JBQXFCLEVBcUJ0QjtFQW5CQztJQXppQk47TUEwaUJRLHVCQUFtQjtVQUFuQixvQkFBbUIsRUFrQnRCLEVBQUE7RUFmQztJQTdpQk47TUE4aUJRLDJCQUFzQjtVQUF0Qix1QkFBc0IsRUFjekI7TUE1akJMO1FBaWpCVSxZQUFPO1lBQVAsUUFBTyxFQUNSO01BbGpCVDtRQXFqQlUsWUFBVztRQUNYLGlCQUFnQjtRQUNoQixlQUFjLEVBQ2YsRUFBQTs7QUF4akJUO0VBK2pCTSxrQkFBYTtNQUFiLGNBQWEsRUFlZDtFQTlrQkw7SUFra0JRLGdCQUFlO0lBQ2YsaUJBQWdCO0lBQ2hCLHVCQUFzQixFQUN2QjtFQXJrQlA7SUF3a0JRLGdCQUFlO0lBQ2YsaUJBQWdCO0lBQ2hCLG1CQUFrQjtJQUNsQix1QkFBc0I7SUFDdEIsaUJBQWdCLEVBQ2pCOztBQTdrQlA7RUFpbEJNLGtCQUFpQjtFQUNqQixhQUFZO0VBQ1osb0JBQW1CLEVBZ0JwQjtFQWRDO0lBcmxCTjtNQXNsQlEsa0JBQWlCLEVBYXBCLEVBQUE7RUFubUJMO0lBMGxCUSxnQkFBZTtJQUNmLGlCQUFnQjtJQUNoQix1QkFBc0IsRUFDdkI7RUE3bEJQO0lBZ21CUSxpQkFBZ0I7SUFDaEIsZUFBYyxFQUNmOztBQWxtQlA7RUFzbUJNLFdBQVU7RUFDVixpQkFBZ0I7RUFDaEIscUJBQWE7RUFBYixjQUFhO0VBQ2Isb0JBQWU7TUFBZixnQkFBZTtFQUNmLGlCQUFnQjtFQUNoQix1QkFBOEI7TUFBOUIsK0JBQThCLEVBSy9CO0VBSEM7SUE3bUJOO01BOG1CUSwwQkFBNkI7VUFBN0IsOEJBQTZCLEVBRWhDLEVBQUE7O0FBaG5CTDtFQW1uQk0sb0JBQW1CO0VBQ25CLGFBQVksRUFrRWI7RUF0ckJMO0lBdW5CUSxtQkFBa0I7SUFDbEIsZUFBYztJQUNkLG1CQUFrQixFQThCbkI7SUF2cEJQO01BNG5CVSxpRUFBZ0U7TUFDaEUsc0JBQXFCO01BQ3JCLGFBQVk7TUFDWixZQUFXO01BQ1gsbUJBQWtCO01BQ2xCLFlBQVc7TUFDWCxzQkFBcUI7TUFDckIsV0FBVTtNQUNWLG1DQUFrQztNQUNsQyxvQ0FBMkI7Y0FBM0IsNEJBQTJCO01BQzNCLGlDQUF3QjtjQUF4Qix5QkFBd0I7TUFDeEIsK0JBQThCLEVBQy9CO0lBeG9CVDtNQTRvQlksYUFBWSxFQUNiO0lBN29CWDtNQWdwQlksZUFBMEIsRUFDM0I7SUFqcEJYO01Bb3BCWSxtQ0FBMEI7Y0FBMUIsMkJBQTBCLEVBQzNCO0VDN25CUDtJQUNFLDJCQUF1RCxFQUN4RDtFQUZEO0lBQ0UsNkJBQXVELEVBQ3hEO0VBRkQ7SUFDRSw4QkFBdUQsRUFDeEQ7RUFGRDtJQUNFLDhCQUF1RCxFQUN4RDtFQUZEO0lBQ0UsOEJBQXVELEVBQ3hEO0VBRkQ7SUFDRSw4QkFBdUQsRUFDeEQ7RUFGRDtJQUNFLDhCQUF1RCxFQUN4RDtFQUZEO0lBQ0UsOEJBQXVELEVBQ3hEO0VBRkQ7SUFDRSw4QkFBdUQsRUFDeEQ7RUQxQkw7SUFzcUJRLDJCQUEwQixFQUMzQjtFQXZxQlA7SUEwcUJRLGVBQWM7SUFDZCxpQkFBZ0I7SUFDaEIsZ0JBQWU7SUFDZixlQUFjO0lBQ2QsbUJBQWtCLEVBQ25CO0VBL3FCUDtJQWtyQlEsZ0JBQWU7SUFDZix1QkFBc0I7SUFDdEIsZUFBYyxFQUNmOztBQXJyQlA7RUEwckJJLHlEQUF3RDtFQUN4RCxrQkFBaUI7RUFDakIsbUJBQWtCLEVBeUpuQjtFQXIxQkg7SUErckJNLG9CQUFtQjtJQUNuQixpQkFBZ0I7SUFDaEIsbUJBQWtCLEVBY25CO0lBL3NCTDtNQW9zQlEsaUJBQWdCO01BQ2hCLGdCQUFlO01BQ2YsdUJBQXNCLEVBQ3ZCO0lBdnNCUDtNQTBzQlEsaUJBQWdCO01BQ2hCLGdCQUFlO01BQ2Ysa0JBQWlCO01BQ2pCLHVCQUFzQixFQUN2QjtFQTlzQlA7O0lBbXRCTSxpQkFBZ0I7SUFDaEIsbUJBQWtCLEVBNEhuQjtJQWgxQkw7O01BdXRCUSxnQkFBZTtNQUNmLDBCQUF5QjtNQUN6QixzQkFBcUI7TUFDckIsaUJBQWdCLEVBQ2pCO0lBM3RCUDs7TUE4dEJRLG1CQUFrQjtNQUNsQixlQUFjO01BQ2Qsb0JBQW1CO01BQ25CLG9CQUFtQjtNQUNuQixzQkFBcUI7TUFDckIsMEJBQXlCO01BQ3pCLGlCQUFnQjtNQUNoQixnQkFBZTtNQUNmLHVCQUFzQjtNQUN0QixTQUFRO01BQ1IsVUFBUyxFQU9WO01BL3VCUDs7UUEydUJVLGtCQUFpQjtRQUNqQixnQkFBZTtRQUNmLG9CQUFtQixFQUNwQjtJQTl1QlQ7O01Ba3ZCUSxrQkFBaUI7TUFDakIsaUJBQWdCO01BQ2hCLHFCQUFhO01BQWIsY0FBYTtNQUNiLG9CQUFlO1VBQWYsZ0JBQWU7TUFDZix1QkFBOEI7VUFBOUIsK0JBQThCLEVBQy9CO0lBdnZCUDs7TUEwdkJRLGtCQUFhO1VBQWIsY0FBYTtNQUNiLG9CQUFtQixFQXVFcEI7TUFyRUM7UUE3dkJSOztVQTh2QlUsa0JBQWE7Y0FBYixjQUFhLEVBb0VoQixFQUFBO01BbDBCUDs7UUFrd0JVLGVBQWM7UUFDZCx3QkFBdUI7UUFDdkIsbUJBQWtCLEVBK0JuQjtRQW55QlQ7O1VBdXdCWSxxRUFBb0U7VUFDcEUsc0JBQXFCO1VBQ3JCLGFBQVk7VUFDWixZQUFXO1VBQ1gsWUFBVztVQUNYLG1CQUFrQjtVQUNsQixPQUFNO1VBQ04sUUFBTztVQUNQLG1DQUFrQyxFQUNuQztRQWh4Qlg7O1VBb3hCYyxhQUFZLEVBQ2I7UUFyeEJiOztVQXd4QmMsZUFBMEIsRUFDM0I7UUF6eEJiOztVQTR4QmMsZUFBMEIsRUFDM0I7UUE3eEJiOztVQWd5QmMsbUNBQTBCO2tCQUExQiwyQkFBMEIsRUFDM0I7TUFqeUJiOzs7Ozs7UUF3eUJVLDJCQUEwQixFQUMzQjtNQXp5QlQ7O1FBNHlCVSxlQUFjO1FBQ2Qsd0JBQXVCO1FBQ3ZCLGlCQUFnQjtRQUNoQixvQkFBbUIsRUFDcEI7TUFoekJUOztRQW16QlUsZUFBYztRQUNkLGVBQWM7UUFDZCxnQkFBZTtRQUNmLGdCQUFlO1FBQ2YsbUJBQWtCO1FBQ2xCLHVCQUFzQixFQUN2QjtNQXp6QlQ7O1FBNHpCVSxlQUFjO1FBQ2QsZUFBYztRQUNkLGdCQUFlO1FBQ2YsaUJBQWdCO1FBQ2hCLHNCQUFxQixFQUN0QjtJQUdIO01BcDBCTjs7UUFzMEJVLG1CQUFrQjtRQUNsQixvQkFBbUIsRUFDcEI7TUF4MEJUOztRQTIwQlUscUJBQVk7WUFBWixhQUFZO1FBQ1osa0JBQWlCO1FBQ2pCLG1CQUFrQixFQUNuQixFQUFBO0VBOTBCVDtJQW0xQnFCLDZCQUE0QixFQUFJOztBQW4xQnJEO0VBdzFCSSx5RUFBd0U7RUFDeEUsMkJBQTBCO0VBQzFCLHdCQUF1QjtFQUN2QixpQkFBZ0I7RUFDaEIsbUJBQWtCO0VBQ2xCLHFCQUFvQixFQW9IckI7RUFqOUJIOzs7O0lBbTJCTSxtQkFBa0I7SUFDbEIsYUFBWTtJQUNaLG1CQUFrQjtJQUNsQixXQUFVLEVBQ1g7RUF2MkJMOztJQTIyQk0sWUFBVyxFQUNaO0VBNTJCTDtJQSsyQk0saUJBQWdCLEVBa0JqQjtJQWo0Qkw7TUFrM0JRLGdCQUFlO01BQ2YsaUJBQWdCLEVBQ2pCO0lBcDNCUDtNQXUzQlEsZ0JBQWU7TUFDZixpQkFBZ0I7TUFDaEIsbUJBQWtCO01BQ2xCLHdCQUF1QixFQUN4QjtJQUVEO01BNzNCTjtRQTgzQlEsbUJBQWtCO1FBQ2xCLGVBQWMsRUFFakIsRUFBQTtFQWo0Qkw7SUFvNEJNLGtCQUFpQjtJQUNqQixvQkFBbUI7SUFDbkIsbUJBQWtCO0lBQ2xCLHFCQUFhO0lBQWIsY0FBYTtJQUNiLG9CQUFlO1FBQWYsZ0JBQWU7SUFDZixpQkFBZ0I7SUFDaEIsdUJBQThCO1FBQTlCLCtCQUE4QixFQU0vQjtJQUpDO01BNTRCTjtRQTY0QlEsMEJBQTZCO1lBQTdCLDhCQUE2QixFQUdoQyxFQUFBO0VBaDVCTDtJQW01Qk0sa0JBQWE7UUFBYixjQUFhO0lBQ2IsY0FBYTtJQUNiLG9CQUFtQjtJQUNuQixtQkFBa0I7SUFDbEIsa0JBQWlCLEVBeURsQjtJQWg5Qkw7TUEwNUJRLG1CQUFrQjtNQUNsQixlQUFjO01BQ2QsYUFBWTtNQUNaLG1CQUFrQixFQWlCbkI7TUE5NkJQO1FBZzZCVSxtQkFBa0I7UUFDbEIsT0FBTTtRQUNOLFNBQVE7UUFDUixVQUFTO1FBQ1QsUUFBTztRQUNQLFlBQVc7UUFDWCxvQkFBbUI7UUFDbkIsbUJBQWtCO1FBQ2xCLCtCQUE4QixFQUMvQjtNQXo2QlQ7UUE0NkJVLDBDQUFpQztnQkFBakMsa0NBQWlDLEVBQ2xDO0lBNzZCVDtNQWk3QlEsZ0JBQWU7TUFDZiwwQkFBeUI7TUFDekIsc0JBQXFCO01BQ3JCLG1CQUFrQjtNQUNsQixpQkFBZ0IsRUFDakI7SUF0N0JQO01BeTdCUSxnQkFBZTtNQUNmLGNBQWE7TUFDYixpQkFBZ0I7TUFDaEIsdUJBQXNCLEVBQ3ZCO0lBNzdCUDtNQWc4QlEsbUJBQWtCO01BQ2xCLGFBQVk7TUFDWixnQkFBZTtNQUNmLFdBQVU7TUFDVixZQUFXO01BQ1gsdUJBQXNCO01BQ3RCLG1CQUFrQixFQUNuQjtJQXY4QlA7TUF5OEJpQyxvQkFBbUIsRUFBSTtJQXo4QnhEO01BMDhCaUMsb0JBQW1CLEVBQUk7SUExOEJ4RDtNQTI4QmlDLG9CQUFtQixFQUFJO0lBMzhCeEQ7TUE0OEJpQyxvQkFBbUIsRUFBSTtJQTU4QnhEO01BNjhCaUMsb0JBQW1CLEVBQUk7SUE3OEJ4RDtNQTg4QmlDLG9CQUFtQixFQUFJO0lBOThCeEQ7TUErOEJpQyxvQkFBbUIsRUFBSTs7QUUvOEJ4RDtFQUdJLGVBQWM7RUFDZCw2RDVFSjhEO0U0RUs5RCxpQkFBZ0IsRUFDakI7O0FBTkg7RUFTSSxnQkFBZTtFQUNmLGlCQUFnQjtFQUNoQixtQkFBa0IsRUFLbkI7RUFoQkg7SUFjTSwwQkFBeUIsRUFDMUI7O0FBZkw7RUFtQkksOEJBQTZCO0VBQzdCLGVBQWM7RUFDZCxxQkFBb0I7RUFDcEIsbUJBQWtCO0VBQ2xCLG1CQUFrQixFQUtuQjtFQUhDO0lBekJKO01BMEJNLG1CQUFrQixFQUVyQixFQUFBOztBQTVCSDtFQStCSSxlQUFjO0VBQ2QsZ0JBQWU7RUFDZixpQkFBZ0I7RUFDaEIsd0JBQXVCLEVBQ3hCOztBQW5DSDtFQXNDSSxlQUFjLEVBQ2Y7O0FBdkNIO0VBMENJLHdCQUFvQjtFQUNwQixzQkFBcUI7RUFDckIsV0FBVTtFQUNWLGFBQVk7RUFDWixtQkFBa0I7RUFDbEIsVUFBUztFQUNULG9CQUFtQjtFQUNuQixXQUFVO0VBQ1YsNENBQW1DO1VBQW5DLG9DQUFtQyxFQUNwQzs7QUFFRDtFQUNFO0lBQUssV0FBVSxFQUFBO0VBQ2Y7SUFBTSxhQUFZLEVBQUE7RUFDbEI7SUFBTyxXQUFVLEVBQUEsRUFBQTs7QUFIbkI7RUFDRTtJQUFLLFdBQVUsRUFBQTtFQUNmO0lBQU0sYUFBWSxFQUFBO0VBQ2xCO0lBQU8sV0FBVSxFQUFBLEVBQUE7O0FBeERyQjtFQTRESSxlQUFjO0VBQ2QsZ0JBQWU7RUFDZixrQkFBaUI7RUFDakIsd0JBQXVCO0VBQ3ZCLDJCQUEwQjtFQUMxQixpQkFBZ0IsRUFDakI7O0FBbEVIO0VBcUVJLGtCQUFpQjtFQUNqQixxQkFBb0IsRUFNckI7RUFKQztJQXhFSjtNQXlFTSxtQkFBa0I7TUFDbEIsc0JBQXFCLEVBRXhCLEVBQUE7O0FBNUVIO0VBK0VJLGVBQWM7RUFDZCxnQkFBZTtFQUNmLHdCQUF1QjtFQUN2QixtQkFBa0I7RUFDbEIsZ0JBQWU7RUFDZixnQkFBZSxFQUNoQjs7QUFyRkg7RUF3RkksZUFBYztFQUNkLGlCQUFnQjtFQUNoQixpQkFBZ0I7RUFDaEIsc0JBQXFCLEVBQ3RCOztBQTVGSDs7RUFpR00saUNBQWdDLEVBQ2pDOztBQWxHTDtFQXNHSSxxQkFBYTtFQUFiLGNBQWE7RUFDYixnQkFBZTtFQUNmLGlCQUFnQjtFQUNoQix3QkFBdUIsRUFDeEI7O0FBMUdIO0VBNkdJLDBFQUF5RTtFQUN6RSx5QkFBd0I7RUFDeEIsNkJBQTRCO0VBQzVCLHNCQUFxQjtFQUNyQixlQUFjO0VBQ2QsbUJBQWM7TUFBZCxlQUFjO0VBQ2QsYUFBWTtFQUNaLGtCQUFpQjtFQUNqQixZQUFXLEVBS1o7RUExSEg7SUF1SGdCLHlCQUF3QixFQUFJO0VBdkg1QztJQXdIa0IsNkJBQWdDLEVBQUk7RUF4SHREO0lBeUhlLDZCQUFnQyxFQUFJOztBQXpIbkQ7RUE2SEksZUFBYztFQUNkLGtCQUFpQjtFQUNqQixzQkFBcUIsRUFDdEI7O0FBaElIO0VBbUlJLGVBQWM7RUFDZCxrQkFBaUIsRUFDbEI7O0FBcklIO0VBd0lJLGlCQUFnQjtFQUNoQixnQkFBZTtFQUNmLFdBQVUsRUFDWDs7QUEzSUg7RUE4SUksbUJBQWtCLEVBQ25COztBQUdEO0VBbEpGO0lBb0pNLHFCQUFhO0lBQWIsY0FBYTtJQUNiLFVBQVMsRUFDVjtFQXRKTDtJQXlKTSxZQUFPO1FBQVAsUUFBTztJQUNQLG1CQUFrQjtJQUNsQixtQkFBa0IsRUFDbkI7RUE1Skw7SUErSk0sMkJBQXNCO1FBQXRCLHVCQUFzQixFQUN2QjtFQWhLTDtJQW1LTSxzQkFBcUIsRUFDdEIsRUFBQTs7QUFwS0w7RUF3S0ksbUJBQWtCO0VBQ2xCLGtCQUFpQjtFQUNqQiwwQkFBeUI7RUFDekIsWUFBVztFQUNYLGlCQUFnQixFQXFGakI7RUFqUUg7SUFnTE0sZUFBYztJQUNkLFlBQVc7SUFDWCxZQUFXO0lBQ1gsY0FBYTtJQUNiLG1CQUFrQjtJQUNsQixRQUFPO0lBQ1AsV0FBVTtJQUNWLGFBQVksRUFDYjtFQXhMTDtJQTJMTSxPQUFNO0lBQ04saUZBQXNGLEVBQ3ZGO0VBN0xMO0lBK0xNLFVBQVM7SUFDVCxpRkFBc0YsRUFDdkY7RUFqTUw7SUFvTU0saUJBQWdCO0lBQ2hCLGlCQUFnQjtJQUNoQixtQkFBa0I7SUFDbEIsV0FBVTtJQUNWLG1CQUFrQjtJQUNsQixrQkFBaUI7SUFDakIsbUJBQWtCLEVBQ25CO0VBM01MO0lBOE1NLGdCQUFlO0lBQ2YsZUFBYztJQUNkLHVCQUFzQjtJQUN0QixrQkFBaUI7SUFDakIsaUJBQWdCLEVBQ2pCO0VBbk5MO0lBc05NLGdCQUFlO0lBQ2YsZUFBYztJQUNkLHdCQUF1QjtJQUN2QixrQkFBaUIsRUFDbEI7RUExTkw7SUE2Tk0sWUFBVztJQUNYLGVBQWM7SUFDZCxhQUFZO0lBQ1osY0FBYTtJQUNiLHFFQUFvRTtJQUNwRSw2QkFBNEI7SUFDNUIsNkJBQTRCO0lBQzVCLG1CQUFrQjtJQUNsQixPQUFNO0lBQ04sVUFBUztJQUNULG9DQUEyQjtZQUEzQiw0QkFBMkI7SUFDM0IsYUFBWTtJQUNaLFdBQVUsRUFDWDtFQUVEO0lBNU9KO01BOE9RLGNBQWE7TUFDYixXQUNGLEVBQUM7SUFoUFA7TUFrUFEsYUFBWSxFQUNiLEVBQUE7RUFFSDtJQXJQSjtNQXVQUSxtQ0FBMEI7Y0FBMUIsMkJBQTBCO01BQzFCLFdBQVUsRUFDWDtJQXpQUDtNQTJQUSxpQkFBZ0I7TUFDaEIsZUFBYztNQUNkLGdCQUFlO01BQ2Ysa0JBQWlCLEVBQ2xCLEVBQUE7O0FBL1BQO0VBb1FJLG1CQUFrQjtFQUNsQixPQUFNO0VBQ04sV0FBVTtFQUNWLG1DQUEwQjtVQUExQiwyQkFBMEI7RUFDMUIsV0FBVTtFQUNWLGlCQUFnQixFQVdqQjtFQXBSSDtJQTJRTSxnQkFBZTtJQUNmLHdCQUF1QjtJQUN2QixXQUFVLEVBQ1g7RUFFRDtJQWhSSjtNQWlSTSxhQUFZO01BQ1osbUNBQTBCO2NBQTFCLDJCQUEwQixFQUU3QixFQUFBOztBQXBSSDtFQXVSSSxlQUFjO0VBQ2QscUJBQWE7RUFBYixjQUFhO0VBQ2IsZ0JBQWU7RUFDZixpQkFBZ0I7RUFDaEIsd0JBQXVCLEVBS3hCO0VBSEM7SUE3Uko7TUE4Uk0sMkJBQXNCO1VBQXRCLHVCQUFzQixFQUV6QixFQUFBOztBQWhTSDtFQW1TSSxpQkFBZ0I7RUFDaEIsbUJBQWtCLEVBQ25COztBQXJTSDtFQXdTSSxxQkFBYTtFQUFiLGNBQWE7RUFDYixZQUFPO01BQVAsUUFBTztFQUNQLGNBQWE7RUFDWCxlQUFjLEVBb0JqQjtFQWxCQztJQTdTSjtNQThTTSxjQUFhLEVBaUJoQixFQUFBO0VBYkc7SUFsVE47TUFtVFEsbUJBQXlCO1VBQXpCLDBCQUF5QixFQUU1QixFQUFBO0VBclRMO0lBd1RNLDBCQUF5QixFQUMxQjtFQXpUTDtJQTRUTSwwQkFBeUIsRUFFMUI7O0FBOVRMO0VBa1VJLGdGQUErRTtFQUMvRSw0QkFBMkI7RUFDM0Isc0JBQXFCO0VBQ3JCLDZCQUE0QjtFQUM1QixlQUFjO0VBQ2QsWUFBVztFQUNYLGFBQVk7RUFDWixtQkFBa0I7RUFDbEIsb0JBQW1CO0VBQ25CLHVCQUFzQjtFQUN0QiwyQ0FBd0MsRUFTekM7RUFyVkg7SUErVU0seUJBQXdCLEVBQ3pCO0VBaFZMO0lBbVZNLDZCQUE0QixFQUM3Qjs7QUFwVkw7RUF3VkksYUFBWTtFQUNaLG1CQUFrQjtFQUNsQixpQkFBZ0I7RUFDaEIsVUFBUztFQUNULFdBQVUsRUFDWDs7QUE3Vkg7RUErVkksZUFBYztFQUNkLHFCQUFvQixFQUNyQjs7QUFqV0g7RUFtV0ksZUFBYztFQUNkLGlCQUFnQjtFQUNoQixnQkFBZTtFQUNmLGtCQUFpQixFQVNsQjtFQS9XSDtJQXlXTSxvQkFBbUIsRUFDcEI7RUExV0w7SUE2V00sY0FBYSxFQUNkOztBQTlXTDtFQWtYSSxlQUFjLEVBQ2Y7O0FBblhIO0VBc1hJLGVBQWMsRUFDZjs7QUF2WEg7RUEwWEksbUJBQWtCO0VBQ2xCLHNCQUFxQixFQWV0QjtFQTFZSDtJQThYTSxxQkFBYTtJQUFiLGNBQWEsRUFDZDtFQUVEO0lBallKO01BbVlRLDJCQUFzQjtVQUF0Qix1QkFBc0IsRUFDdkIsRUFBQTtFQUVIO0lBdFlKO01BdVlNLGtCQUFpQjtNQUNqQixxQkFBb0IsRUFFdkIsRUFBQTs7QUExWUg7RUE2WUksb0JBQWU7TUFBZixnQkFBZTtFQUNmLGNBQWE7RUFDYixvQkFBbUI7RUFDbkIsbUZBQTRFO0VBQzVFLG9CQUFtQixFQWtCcEI7RUFuYUg7SUFvWk0sY0FBYTtJQUNiLGlCQUFnQjtJQUNoQixnQkFBZTtJQUNmLHVCQUFzQjtJQUN0QixrQkFBaUI7SUFDakIsZUFBYyxFQUNmO0VBMVpMO0lBNlpNLGlCQUFnQixFQUNqQjtFQUVEO0lBaGFKO01BaWFNLG9CQUFlO1VBQWYsZ0JBQWUsRUFFbEIsRUFBQTs7QUFuYUg7RUFzYUksbUJBQWtCO0VBQ2xCLGlCQUFnQixFQVNqQjtFQWhiSDtJQTBhTSxnQkFBZTtJQUNmLGlCQUFnQjtJQUNoQix3QkFBdUI7SUFDdkIsZUFBYztJQUNkLGlCQUFnQixFQUNqQjs7QUEvYUw7RUFtYkksVUFBUztFQUNULFdBQVU7RUFDVixzQkFBcUIsRUFDdEI7O0FBdGJIO0VBeWJJLG1CQUFrQjtFQUNsQixpQkFBZ0I7RUFDaEIsaUVBQWdFO0VBQ2hFLHNCQUFxQixFQWlCdEI7RUE3Y0g7SUErYk0sZ0JBQWU7SUFDZixpQkFBZ0I7SUFDaEIsZUFBYztJQUNkLGtCQUFpQjtJQUNqQixnQkFBZSxFQUNoQjtFQXBjTDtJQXVjTSxnQkFBZTtJQUNmLGVBQWM7SUFDZCx3QkFBdUI7SUFDdkIsa0JBQWlCO0lBQ2pCLGlCQUFnQixFQUNqQjs7QUFHSDtFQS9jRjtJQWlkTSxtQkFBYztRQUFkLGVBQWM7SUFDZCxjQUFhLEVBVWQ7SUE1ZEw7TUFxZFEsbUJBQWtCO01BQ2xCLGdCQUFlO01BQ2YsZUFBYyxFQUNmLEVBQUE7O0FBT0w7RUEvZEY7SUFpZU0sZ0JBQWUsRUFDaEI7RUFsZUw7SUFvZU0sZ0JBQWUsRUFDaEIsRUFBQTs7QUNsZUg7RUFIRjs7SUFJSSxjQUFhLEVBc0RoQixFQUFBOztBQTFERDs7RUFRSSx1QkFBbUI7TUFBbkIsb0JBQW1CO0VBQ25CLHFCQUFhO0VBQWIsY0FBYTtFQUNiLHNCQUFxQjtFQUNyQixrQkFBaUIsRUFPbEI7RUFMQztJQWJKOztNQWNNLDJCQUFzQjtVQUF0Qix1QkFBc0I7TUFDdEIsa0JBQWlCO01BQ2pCLG1CQUFrQixFQUVyQixFQUFBOztBQWxCSDs7RUFxQkksZ0JBQWU7RUFDZixrQkFBaUI7RUFDakIsZUFBYyxFQUtmO0VBSEM7SUF6Qko7O01BMEJNLGlCQUFnQixFQUVuQixFQUFBOztBQTVCSDs7RUErQkksaUJBQWdCLEVBS2pCO0VBSEM7SUFqQ0o7O01Ba0NNLGdCQUFlLEVBRWxCLEVBQUE7O0FBcENIOztFQXVDSSxpQkFBZ0I7RUFDaEIsbUJBQWtCO0VBQ2xCLGNBQWEsRUFLZDtFQUhDO0lBM0NKOztNQTRDTSxnQkFBZSxFQUVsQixFQUFBOztBQTlDSDs7RUFpREksZUFBYztFQUNkLG1CQUFrQjtFQUNsQixZQUFXLEVBTVo7RUFKQztJQXJESjs7TUFzRE0sZ0JBQWU7TUFDZixtQkFBa0IsRUFFckIsRUFBQTs7QUFHSDs7RUFHRSxxQkFBYTtFQUFiLGNBQWE7RUFDYixrQkFBaUIsRUFrSGxCO0VBdEhEOzs7SUFRSSxjQUFhLEVBQ2Q7RUFUSDs7SUYxREUsdUJBQXNCO0lBQ3RCLG1CQUFrQjtJQUNsQix3RUFDc0M7SUVvRXBDLG9CQUFtQjtJQUNuQixrQkFBaUI7SUFFakIsd0JBQXVCLEVBa0N4QjtJQWxESDs7TUFtQk0sZ0JBQWU7TUFDZixXQUFVLEVBU1g7TUE3Qkw7O1FBdUJRLFlBQVcsRUFDWjtNQXhCUDs7UUEyQlEsY0FBYSxFQUNkO0lBNUJQOztNQWdDTSxtQkFBa0I7TUFDbEIscUJBQW9CLEVBQ3JCO0lBbENMOztNQXFDTSxZQUFXO01BQ1gsY0FBYSxFQUNkO0lBdkNMOztNQTBDTSxZQUFXO01BQ1gsZ0JBQWU7TUFDZix1QkFBc0IsRUFDdkI7SUE3Q0w7O01BZ0RNLGdCQUFlLEVBQ2hCO0VBakRMOztJQXNESSxhQUFZO0lBQ1osa0JBQWlCLEVBK0NsQjtJQXRHSDs7TUEwRE0sZUFBYztNQUNkLFlBQVcsRUFDWjtJQTVETDs7TUErRE0sZUFBYztNQUNkLG1CQUFrQjtNQUNsQixpQkFBZ0I7TUFDaEIsVUFBUztNQUNULFdBQVUsRUFnQlg7TUFuRkw7O1FBc0VRLHFCQUFvQjtRQUNwQixvQkFBbUI7UUFDbkIsbUJBQWtCLEVBVW5CO1FBbEZQOztVQTJFVSxlN0U5SGE7VTZFK0hiLGlCQUFnQjtVQUNoQix3QkFBdUI7VUFDdkIsUUFBTztVQUNQLG1CQUFrQjtVQUNsQixPQUFNLEVBQ1A7SUFqRlQ7O01Bc0ZNLGVBQWM7TUFDZCxtQkFBa0I7TUFDbEIsaUJBQWdCO01BQ2hCLHdCQUF1QjtNQUN2QixlQUFjO01BQ2QsbUJBQWtCO01BQ2xCLDBCQUF5QixFQUMxQjtJQUVEO01BL0ZKOztRQWdHTSxpQkFBZ0IsRUFNbkIsRUFBQTtJQUhDO01BbkdKOztRQW9HTSxjQUFhLEVBRWhCLEVBQUE7O0FDbEtIO0VBRUksK0Q5RURpRTtFOEVFakUsa0JBQWlCLEVBU2xCO0VBWkg7Ozs7O0lBVU0sNkQ5RVY0RCxFOEVXN0Q7O0FBWEw7RUFlTSxnQkFBZTtFQUNmLGlCQUFnQjtFQUNoQixrQkFBaUI7RUFDakIsa0JBQWlCO0VBQ2pCLHNCQUFxQixFQVl0QjtFQS9CTDtJQXNCUSxZQUFXO0lBQ1gsbUZBQWtGO0lBQ2xGLHNCQUFxQjtJQUNyQixZQUFXO0lBQ1gsYUFBWTtJQUNaLHNCQUFxQjtJQUNyQixrQkFBaUI7SUFDakIsc0JBQXFCLEVBQ3RCOztBQTlCUDtFQWtDTSw0QkFBMkIsRUFRNUI7RUExQ0w7SUFxQ1Esd0JBQXVCO0lBQ3ZCLGFBQWE7SUFDYixpQkFBZ0I7SUFDaEIscUJBQW9CLEVBQ3JCOztBQXpDUDtFQThDSSxtQkFBa0I7RUFDbEIsbUJBQWtCO0VBQ2xCLG9CQUFtQjtFQUNuQixnRUFBK0Q7RUFDL0Qsa0JBQWlCLEVBK0dsQjtFQWpLSDtJQXFETSxtQkFBa0IsRUFhbkI7SUFsRUw7TUF3RFEsNkVBQTRFO01BQzVFLHNCQUFxQjtNQUNyQixhQUFZO01BQ1osY0FBYTtNQUNiLFlBQVc7TUFDWCxlQUFjO01BQ2QsbUJBQWtCO01BQ2xCLGFBQVk7TUFDWixXQUFVLEVBQ1g7RUFqRVA7SUFxRU0saUJBQWdCLEVBQ2pCO0VBdEVMO0lBeUVNLGFBQVk7SUFDWix1QkFBc0IsRUFDdkI7RUEzRUw7SUE4RU0sZUFBYztJQUNkLGdCQUFlO0lBQ2Ysd0JBQXVCO0lBQ3ZCLG9CQUFtQjtJQUNuQixpQkFBZ0I7SUFDaEIsbUJBQWtCLEVBQ25CO0VBcEZMO0lBdUZNLGVBQWM7SUFDZCxnQkFBZTtJQUNmLHVCQUFzQjtJQUN0QixtQkFBa0I7SUFDbEIsaUJBQWdCO0lBQ2hCLG1CQUFrQixFQU1uQjtJQWxHTDtNQStGUSxZQUFXO01BQ1gsaUJBQWdCLEVBQ2pCO0VBakdQO0lBcUdNLGlCQUFnQjtJQUNoQiw2QkFBNEI7SUFDNUIsZ0JBQWU7SUFDZiwwQkFBeUI7SUFDekIsc0JBQXFCO0lBQ3JCLG9CQUFtQixFQVVwQjtJQXBITDtNQTZHUSx3QkFBdUI7TUFDdkIsYUFBYTtNQUNiLGdCQUFlO01BQ2YsaUJBQWdCO01BQ2hCLHFCQUFvQjtNQUNwQixpQkFBZ0IsRUFDakI7RUFHSDtJQXRISjtNQXdIUSxpQkFBZ0IsRUFDakIsRUFBQTtFQUdIO0lBNUhKO01BOEhRLGdCQUFlLEVBQ2hCO0lBL0hQOztNQW1JUSxpQkFBZ0IsRUFDakI7SUFwSVA7TUF1SVEsYUFBWTtNQUNaLGNBQWE7TUFDYixhQUFZO01BQ1osV0FBVSxFQUNYLEVBQUE7RUFHSDtJQTlJSjtNQStJTSxtQkFBa0IsRUFrQnJCO01BaktIO1FBa0pRLGFBQVk7UUFDWixjQUFhO1FBQ2Isd0JBQXVCO1FBQ3ZCLFlBQVcsRUFDWjtNQXRKUDtRQXlKUSxtQkFBa0IsRUFDbkI7TUExSlA7O1FBOEpRLGdCQUFlLEVBQ2hCLEVBQUE7O0FBL0pQO0VBb0tJLG1CQUFrQjtFQUNsQixvQkFBbUIsRUFrTXBCO0VBdldIO0lBd0tNLHFCQUFhO0lBQWIsY0FBYSxFQUtkO0lBN0tMO01BMktRLG9CQUFlO1VBQWYsZ0JBQWUsRUFDaEI7RUE1S1A7SUFnTE0sZ0JBQWU7SUFDakIsZ0JBQWU7SUFDZixpQkFBZ0I7SUFDaEIsdUJBQXNCO0lBQ3RCLGlCQUFnQjtJQUNoQixtQkFBa0IsRUFDakI7RUF0TEw7SUF5TE0saUJBQWdCO0lBQ2hCLGdCQUFlO0lBQ2YsaUJBQWdCLEVBQ2pCO0VBNUxMO0lBK0xNLGdCQUFlO0lBQ2YsaUJBQWdCO0lBQ2hCLGlCQUFnQjtJQUNoQix1QkFBc0I7SUFDdEIsb0JBQW1CO0lBQ25CLGVBQWMsRUFLZjtJQXpNTDtNQXVNUSxpQkFBZ0IsRUFDakI7RUF4TVA7SUE0TU0sa0JBQWlCO0lBQ2pCLG9CQUFlO1FBQWYsZ0JBQWU7SUFDZixpQkFBZ0I7SUFDaEIsZ0JBQWUsRUFTaEI7SUFQQztNQWpOTjtRQWtOUSwrQkFBaUI7WUFBakIsa0JBQWlCLEVBTXBCLEVBQUE7SUF4Tkw7TUFzTlEsT0FBTSxFQUNQO0VBdk5QO0lBMk5NLG1CQUFrQjtJQUNsQixnQkFBZTtJQUNmLG1CQUFrQjtJQUNsQixpQkFBZ0I7SUFDaEIsd0JBQXVCO0lBQ3ZCLG9CQUFtQjtJQUNuQixvQkFBbUI7SUFDbkIsZUFBYyxFQVlmO0lBOU9MO01BcU9RLG1GQUFrRjtNQUNsRixzQkFBcUI7TUFDckIsWUFBVztNQUNYLGFBQVk7TUFDWixtQkFBa0I7TUFDbEIsUUFBTztNQUNQLFNBQVE7TUFDUixZQUFXLEVBQ1o7RUFHSDtJQWhQSjtNQWtQUSxlQUFjLEVBS2Y7TUF2UFA7UUFxUFUsbUJBQWtCLEVBQ25CO0lBdFBUO01BMFBRLE9BQU0sRUFDUCxFQUFBO0VBM1BQO0lBK1BNLG9CQUFtQjtJQUNuQixvQkFBbUI7SUFDbkIsbUJBQWtCO0lBQ2xCLGlCQUFnQjtJQUNoQixtQkFBa0I7SUFDbEIsa0JBQWlCLEVBa0dsQjtJQXRXTDtNQXdRUSxzRkFBcUY7TUFDckYsc0JBQXFCO01BQ3JCLGNBQWE7TUFDYixjQUFhO01BQ2IsbUJBQWtCO01BQ2xCLFdBQVU7TUFDVixVQUFTO01BQ1QsVUFBUztNQUNULHFCQUFvQjtNQUNwQixZQUFXO01BQ1gsZ0RBQStDLEVBQ2hEO0lBblJQO01Bc1JRLDRCQUEyQjtNQUMzQixXQUFVO01BQ1YsMENBQWlDO2NBQWpDLGtDQUFpQyxFQUNsQztJQXpSUDtNQTRSUSxpQkFBZ0I7TUFDaEIsZ0JBQWUsRUFDaEI7SUE5UlA7TUFpU1EsaUJBQWdCO01BQ2hCLG9CQUFtQjtNQUNuQixhQUFZO01BQ1osWUFBVztNQUNYLHNCQUFxQjtNQUNyQixrQkFBaUI7TUFDakIscUJBQW9CO01BQ3BCLDZDQUE0QztNQUM1Qyw2QkFBNEI7TUFDNUIsbUJBQWtCO01BQ2xCLGdCQUFlLEVBY2hCO01BelRQO1FBOFNVLGtCQUFpQjtRQUNqQixZQUFXO1FBQ1gsYUFBWTtRQUNaLFlBQVc7UUFDWCx5Q0FBd0M7UUFDeEMsbUJBQWtCO1FBQ2xCLFNBQVE7UUFDUixVQUFTO1FBQ1QsbUJBQWtCO1FBQ2xCLCtCQUE4QixFQUMvQjtJQXhUVDtNQTZUVSxXQUFVO01BQ1YsMENBQWlDO2NBQWpDLGtDQUFpQyxFQUNsQztJQS9UVDtNQWtVVSxXQUFVO01BQ1Ysd0JBQWU7Y0FBZixnQkFBZSxFQUNoQjtJQXBVVDtNQXVVVSwwQkFBeUIsRUFLMUI7TUE1VVQ7UUEwVVksMENBQWlDO2dCQUFqQyxrQ0FBaUMsRUFDbEM7SUFJTDtNQS9VTjtRQWdWUSxrQkFBaUIsRUFzQnBCO1FBdFdMO1VBb1ZVLGFBQVk7VUFDWixjQUFhLEVBQ2QsRUFBQTtJQUdIO01BelZOO1FBMFZRLGtCQUFpQixFQVlwQjtRQXRXTDtVQThWVSxhQUFZO1VBQ1osY0FBYSxFQUNkLEVBQUE7SUFHSDtNQW5XTjtRQW9XUSxjQUFhLEVBRWhCLEVBQUE7O0FBdFdMO0VBMFdJLHFCQUFvQixFQTJGckI7RUFyY0g7SUE2V00sdUJBQXNCLEVBQ3ZCO0VBOVdMO0lBaVhNLGlCQUFnQjtJQUNoQixpQkFBZ0I7SUFDaEIsZ0JBQWU7SUFDZix1QkFBc0IsRUFDdkI7RUFyWEw7SUF3WE0scUJBQWE7SUFBYixjQUFhO0lBQ2Isb0JBQWU7UUFBZixnQkFBZTtJQUNmLFdBQVU7SUFDVixpQkFBZ0I7SUFDaEIsa0JBQWlCO0lBQ2pCLHVCQUE4QjtRQUE5QiwrQkFBOEIsRUFDL0I7RUE5WEw7SUFpWU0sb0JBQWU7UUFBZixnQkFBZTtJQUNmLGdCQUFlO0lBQ2Ysa0JBQWlCO0lBQ2pCLGlCQUFnQjtJQUNoQixtQkFBa0I7SUFDbEIsb0JBQW1CLEVBcUNwQjtJQW5DQztNQXhZTjtRQXlZUSwrQkFBaUI7WUFBakIsa0JBQWlCLEVBa0NwQixFQUFBO0lBM2FMO01BNllRLG1GQUFrRjtNQUNsRixzQkFBcUI7TUFDckIsWUFBVztNQUNYLGFBQVk7TUFDWixZQUFXO01BQ1gsbUJBQWtCO01BQ2xCLE9BQU07TUFDTixRQUFPLEVBQ1I7SUFyWlA7TUF1WjZCLDZCQUE0QixFQUFLO0lBdlo5RDtNQXdadUIsNkJBQTRCLEVBQUs7SUF4WnhEO01BeVowQiw4QkFBNkIsRUFBSztJQXpaNUQ7TUEwWnlCLDhCQUE2QixFQUFLO0lBMVozRDtNQTJaMEIsOEJBQTZCLEVBQUs7SUEzWjVEO01BOFpRLGdCQUFlO01BQ2YsaUJBQWdCO01BQ2hCLDZEOUVoYTBELEU4RWlhM0Q7SUFqYVA7TUFvYVEsZ0JBQWU7TUFDZixpQkFBZ0I7TUFDaEIsaUJBQWdCO01BQ2hCLG1CQUFrQjtNQUNsQix1QkFBc0I7TUFDdEIsZUFBYyxFQUNmO0VBS0g7SUEvYUo7TUFpYlEsZUFBYyxFQUNmO0lBbGJQO01BcWJRLCtCQUFpQjtVQUFqQixrQkFBaUIsRUFDbEIsRUFBQTtFQUtIO0lBM2JKO01BNmJRLDhCQUFnQjtVQUFoQixpQkFBZ0I7TUFDaEIsbUJBQWtCLEVBS25CO01BbmNQO1FBaWNVLHVCQUFzQixFQUN2QixFQUFBOztBQWxjVDs7RUF5Y0ksbUJBQWtCLEVBNEduQjtFQXJqQkg7O0lBNGNNLG1GQUFrRjtJQUNsRixzQkFBcUI7SUFDckIsYUFBWTtJQUNaLGNBQWE7SUFDYixZQUFXO0lBQ1gsbUJBQWtCO0lBQ2xCLE9BQU07SUFDTixhQUFZLEVBTWI7SUFKQztNQXJkTjs7UUFzZFEsYUFBWTtRQUNaLGNBQWEsRUFFaEIsRUFBQTtFQXpkTDs7SUE0ZE0sd0JBQXVCO0lBQ3ZCLGVBQWMsRUFjZjtJQVpDO01BL2ROOztRQWdlUSx3QkFBdUI7UUFDdkIsa0JBQWlCLEVBVXBCO1FBM2VMOztVQW9lVSxrQkFBaUIsRUFDbEIsRUFBQTtJQUdIO01BeGVOOztRQXllUSxhQUFZLEVBRWYsRUFBQTtFQTNlTDs7SUE4ZU0sbUJBQWtCO0lBQ2xCLGlCQUFnQjtJQUNoQixnQkFBZTtJQUNmLHVCQUFzQjtJQUN0QixvQkFBbUIsRUFDcEI7RUFuZkw7O0lBc2ZNLGVBQWM7SUFDZCxpQkFBZ0I7SUFDaEIsdUJBQXNCO0lBQ3RCLG1CQUFrQixFQVNuQjtJQWxnQkw7O01BNGZRLGdCQUFlO01BQ2YsdUJBQXNCO01BQ3RCLG1CQUFrQjtNQUNsQixpQkFBZ0I7TUFDaEIsb0JBQW1CLEVBQ3BCO0VBamdCUDs7SUFxZ0JNLFdBQVU7SUFDVixxQkFBYTtJQUFiLGNBQWE7SUFDYixvQkFBZTtRQUFmLGdCQUFlO0lBQ2YsaUJBQWdCO0lBQ2hCLGlCQUFnQixFQUtqQjtJQUhDO01BM2dCTjs7UUE0Z0JRLGVBQWMsRUFFakIsRUFBQTtFQTlnQkw7O0lBaWhCTSxrQkFBYTtRQUFiLGNBQWE7SUFDYixtQkFBa0I7SUFDbEIsZ0JBQWU7SUFDZixlQUFjO0lBQ2QsbUJBQWtCO0lBQ2xCLG9CQUFtQixFQVlwQjtJQWxpQkw7O01BeWhCUSw4RUFBNkU7TUFDN0Usc0JBQXFCO01BQ3JCLFlBQVc7TUFDWCxhQUFZO01BQ1osWUFBVztNQUNYLG1CQUFrQjtNQUNsQixPQUFNO01BQ04sVUFBUyxFQUNWO0VBR0g7SUFwaUJKOztNQXFpQk0sbUJBQWtCLEVBZ0JyQjtNQXJqQkg7O1FBd2lCUSxXQUFVO1FBQ1YseUJBQXdCLEVBQ3pCO01BMWlCUDs7UUE2aUJRLFlBQVc7UUFDWCxtQkFBa0IsRUFDbkI7TUEvaUJQOztRQWtqQlEsOEJBQWdCO1lBQWhCLGlCQUFnQixFQUNqQixFQUFBOztBQW5qQlA7RUF3akJJLHFCQUFvQixFQTBEckI7RUFsbkJIO0lBMmpCTSxvRkFBbUY7SUFDbkYsc0JBQXFCO0lBQ3JCLGFBQVk7SUFDWixjQUFhO0lBQ2IsV0FBVTtJQUNWLFlBQVc7SUFDWCxZQUFXLEVBQ1o7RUFsa0JMO0lBcWtCTSxrQkFBaUI7SUFDakIsd0JBQXVCLEVBTXhCO0lBSkM7TUF4a0JOO1FBeWtCUSxpQkFBZ0I7UUFDaEIseUJBQXdCLEVBRTNCLEVBQUE7RUFFRDtJQTlrQko7TUFnbEJRLGFBQVk7TUFDWixjQUFhLEVBQ2Q7SUFsbEJQO01BcWxCUSxhQUFZLEVBQ2I7SUF0bEJQO01BeWxCUSxrQkFBaUIsRUFDbEIsRUFBQTtFQUdIO0lBN2xCSjtNQThsQk0sbUJBQWtCLEVBb0JyQjtNQWxuQkg7UUFpbUJRLFVBQVM7UUFDVCx3QkFBdUIsRUFDeEI7TUFubUJQO1FBc21CUSxZQUFXO1FBQ1gsbUJBQWtCLEVBQ25CO01BeG1CUDtRQTJtQlEsa0JBQWlCLEVBQ2xCO01BNW1CUDtRQSttQlEsaUJBQWdCLEVBQ2pCLEVBQUE7O0FBaG5CUDtFQXFuQkksdUZBQXNGO0VBQ3RGLHdCQUF1QixFQXFGeEI7RUEzc0JIO0lBeW5CTSxtQkFBa0I7SUFDbEIsc0JBQXFCLEVBQ3RCO0VBM25CTDtJQStuQk0sbUJBQWtCO0lBQ2xCLGlCQUFnQixFQUNqQjtFQWpvQkw7SUFvb0JNLGFBQVk7SUFDWixnQkFBZTtJQUNmLGlCQUFnQjtJQUNoQix1QkFBc0IsRUFDdkI7RUF4b0JMO0lBMm9CTSxlQUFjO0lBQ2QsaUJBQWdCO0lBQ2hCLGlCQUFnQjtJQUNoQixtQkFBa0I7SUFDbEIsZ0JBQWU7SUFDZix1QkFBc0IsRUFNdkI7SUF0cEJMO01BbXBCUSxhQUFZO01BQ1osaUJBQWdCLEVBQ2pCO0VBcnBCUDtJQXlwQk0sV0FBVTtJQUNWLHFCQUFhO0lBQWIsY0FBYTtJQUNiLG9CQUFlO1FBQWYsZ0JBQWU7SUFDZixpQkFBZ0I7SUFDaEIsaUJBQWdCO0lBQ2hCLHVCQUE4QjtRQUE5QiwrQkFBOEIsRUFDL0I7RUEvcEJMO0lBa3FCTSxvQkFBZTtRQUFmLGdCQUFlO0lBQ2YsbUJBQWtCO0lBQ2xCLGdCQUFlO0lBQ2YsYUFBWTtJQUNaLG1CQUFrQjtJQUNsQixvQkFBbUI7SUFDbkIsaUJBQWdCO0lBQ2hCLHVCQUFzQixFQWdCdkI7SUFkQztNQTNxQk47UUE0cUJRLDBDQUE0QjtZQUE1Qiw2QkFBNEIsRUFhL0IsRUFBQTtJQXpyQkw7TUFnckJRLHNGQUFxRjtNQUNyRixzQkFBcUI7TUFDckIsWUFBVztNQUNYLGFBQVk7TUFDWixZQUFXO01BQ1gsbUJBQWtCO01BQ2xCLE9BQU07TUFDTixRQUFPLEVBQ1I7RUFHSDtJQTNyQko7TUErckJRLGtCQUFpQjtNQUNqQixpQkFBZ0IsRUFDakIsRUFBQTtFQUdIO0lBcHNCSjtNQXFzQk0sdUJBQXNCLEVBTXpCO01BM3NCSDtRQXdzQlEsOEJBQWdCO1lBQWhCLGlCQUFnQixFQUNqQixFQUFBOztBQXpzQlA7RUE4c0JJLGtCQUFpQjtFQUNqQixzQkFBcUIsRUE2Q3RCO0VBNXZCSDtJQW10QlEsMEJBQXlCO0lBQ3pCLHNCQUFxQjtJQUNyQiw2RDlFcnRCMEQsRThFc3RCM0Q7RUF0dEJQO0lBeXRCUSxpQkFBZ0I7SUFDaEIsdUJBQXNCLEVBQ3ZCO0VBM3RCUDtJQTh0QlEsaUJBQWdCO0lBQ2hCLGlCQUFnQjtJQUNoQixnQkFBZTtJQUNmLHVCQUFzQixFQU92QjtJQXh1QlA7TUFvdUJVLGlCQUFnQjtNQUNoQixxQkFBb0I7TUFDcEIsd0JBQXVCLEVBQ3hCO0VBdnVCVDtJQTR1Qk0saUJBQWdCO0lBQ2hCLGlCQUFnQjtJQUNoQixrQkFBaUI7SUFDakIsbUJBQWtCLEVBQ25CO0VBRUQ7SUFsdkJKO01BbXZCTSxlQUFjO01BQ2QscUJBQW9CLEVBUXZCLEVBQUE7RUFMQztJQXZ2Qko7TUF5dkJRLG9DQUFtQyxFQUNwQyxFQUFBOztBQTF2QlA7RUErdkJJLG9CQUFtQixFQXNGcEI7RUFyMUJIO0lBa3dCTSxtQkFBa0I7SUFDbEIsV0FBVTtJQUNWLFVBQVMsRUFDVjtFQXJ3Qkw7SUF3d0JNLGFBQVksRUFDYjtFQXp3Qkw7SUE0d0JNLG1CQUFrQjtJQUNsQix3QkFBdUI7SUFDdkIsc0JBQXFCLEVBV3RCO0lBVEM7TUFoeEJOO1FBaXhCUSxtQkFBa0I7UUFDbEIseUJBQXdCO1FBQ3hCLHNCQUFxQixFQU14QjtRQXp4Qkw7VUFzeEJVLGlCQUFnQixFQUNqQixFQUFBO0VBdnhCVDtJQTR4Qk0saUJBQWdCO0lBQ2hCLHVCQUFzQixFQUN2QjtFQTl4Qkw7SUFpeUJNLGlCQUFnQjtJQUNoQixpQkFBZ0I7SUFDaEIsZ0JBQWU7SUFDZixvQkFBbUI7SUFDbkIsZUFBYztJQUNkLG9CQUFtQjtJQUNuQix1QkFBc0IsRUFDdkI7RUF4eUJMO0lBMnlCTSx3QkFBdUI7SUFDdkIsZ0JBQWUsRUFNaEI7SUFsekJMO01BK3lCUSxZQUFXO01BQ1gsa0JBQWlCLEVBQ2xCO0VBR0g7SUFwekJKO01Bc3pCUSxRQUFPLEVBQ1IsRUFBQTtFQUdIO0lBMXpCSjtNQTZ6QlEsYUFBWSxFQUNiO0lBOXpCUDtNQWkwQlEsa0JBQWlCO01BQ2pCLDBCQUF5QjtNQUN6QixxQkFBb0IsRUFDckIsRUFBQTtFQUdIO0lBdjBCSjtNQXkwQlEsbUJBQWtCLEVBQ25CO0lBMTBCUDtNQTYwQlEsd0JBQXVCLEVBQ3hCO0lBOTBCUDtNQWkxQlEsbUJBQWtCO01BQ2xCLFlBQVcsRUFDWixFQUFBOztBQ24xQlA7RUFFSSxtQkFBa0I7RUFDbEIscUJBQW9CO0VBQ3BCLDZEL0VKOEQsRStFa0IvRDtFQWxCSDtJQU9NLGdCQUFlO0lBQ2YsaUJBQWdCO0lBQ2hCLHdCQUF1QixFQUN4QjtFQVZMO0lBYU0saUJBQWdCO0lBQ2hCLGdCQUFlO0lBQ2YsaUJBQWdCO0lBQ2hCLHVCQUFzQixFQUN2Qjs7QUFqQkw7RUFxQkksaUJBQWdCLEVBeUNqQjtFQTlESDtJQXdCTSxnQkFBZTtJQUNmLGlCQUFnQjtJQUNoQixvQkFBbUI7SUFDbkIsdUJBQXNCO0lBQ3RCLDZEL0U1QjRELEUrRTZCN0Q7RUE3Qkw7SUFnQ00saUJBQWdCO0lBQ2hCLG9CQUFtQjtJQUNuQixnQkFBZTtJQUNmLGlCQUFnQjtJQUNoQiw2RC9FcEM0RDtJK0VxQzVELHdCQUF1QixFQUN4QjtFQXRDTDtJQXlDTSxnQkFBZTtJQUNmLGlCQUFnQjtJQUNoQixzQkFBcUI7SUFDckIsbUJBQWtCO0lBQ2xCLG9CQUFtQixFQUtwQjtJQWxETDtNQWdEUSxrQkFBaUIsRUFDbEI7RUFqRFA7SUFxRE0sbUJBQWtCLEVBQ25CO0VBdERMO0lBeURNLGdCQUFlO0lBQ2YsaUJBQWdCO0lBQ2hCLHdCQUF1QjtJQUN2QixtQkFBa0IsRUFDbkI7O0FBN0RMO0VBaUVJLGlCQUFnQjtFQUNoQixpQkFBZ0I7RUFDaEIsb0JBQW1CO0VBQ25CLG1CQUFrQixFQXdCbkI7RUE1Rkg7SUF1RU0sZUFBYztJQUNkLGdCQUFlO0lBQ2YsaUJBQWdCO0lBQ2hCLDZEL0UxRTREO0krRTJFNUQsdUJBQXNCLEVBTXZCO0lBakZMO01BOEVRLGVBQWM7TUFDZCxtQkFBa0IsRUFDbkI7RUFoRlA7SUFvRk0sdUJBQXNCO0lBQ3RCLFlBQVc7SUFDWCxrQkFBaUI7SUFDakIsa0JBQWlCO0lBQ2pCLG1CQUFrQjtJQUNsQixrQkFBaUI7SUFDakIsMENBQXlDLEVBQzFDOztBQzNGTDtFQUNFLDZEaEZEZ0UsRWdGdTBCakU7RUF2MEJEO0lBS00sb0VBQXFGLEVBQ3RGO0VBTkw7SUFRTSxrQkFBaUI7SUFDakIsa0JBQWlCO0lBQ2pCLGdCQUFlLEVBQ2hCO0VBWEw7O0lBZU0saUJBQWdCO0lBQ2hCLGlCQUFnQixFQU9qQjtJQUxDO01BbEJOOztRQW1CUSxtQkFBa0I7UUFDbEIsa0JBQWlCO1FBQ2pCLG1CQUFrQixFQUVyQixFQUFBO0VBdkJMO0lBMEJNLGdCQUFlO0lBQ2YsaUJBQWdCLEVBQ2pCO0VBNUJMO0lBK0JNLGdCQUFlO0lBQ2Ysa0JBQWlCO0lBQ2pCLGVBQWM7SUFDZCxvQkFBbUIsRUFDcEI7RUFFRDtJQXJDSjtNQXVDUSxrQkFBaUIsRUFDbEI7SUF4Q1A7TUEyQ1Esb0JBQW1CLEVBQ3BCLEVBQUE7RUE1Q1A7SUFpREksYUFBWTtJQUNaLGdCQUFlO0lBQ2Ysa0JBQWlCO0lBQ2pCLGtCQUFpQjtJQUNqQixhQUFZO0lBQ1osc0JBQXFCO0lBQ3JCLHVFQUF1RDtJQUF2RCwrREFBdUQ7SUFBdkQsMkhBQXVELEVBZ0N4RDtJQXZGSDtNQTBETSxpQkFBZ0IsRUFDakI7SUEzREw7TUE4RE0sMEJBQXlCO01BQ3pCLGdCQUFlO01BQ2YsaUJBQWdCO01BQ2hCLHVCQUFzQjtNQUN0QixZQUFXO01BQ1gsVUFBUztNQUNULHlEQUFpRDtjQUFqRCxpREFBaUQsRUFDbEQ7SUFyRUw7TUF3RU0scUNBQTRCO2NBQTVCLDZCQUE0QixFQUM3QjtJQUVEO01BM0VKO1FBNEVNLGNBQWEsRUFXaEI7UUF2Rkg7VUErRVEsaUJBQWdCLEVBQ2pCLEVBQUE7SUFHSDtNQW5GSjtRQW9GTSxZQUFXO1FBQ1gsZUFBYyxFQUVqQixFQUFBO0VBdkZIO0lBMEZJLG1CQUFrQixFQXVzQm5CO0lBcnNCQztNQTVGSjtRQTZGTSxrQkFBaUIsRUFvc0JwQixFQUFBO0lBanlCSDtNQWlHTSxpQ0FBZ0M7TUFDaEMsc0JBQXFCLEVBS3RCO01BSEM7UUFwR047VUFxR1EscUJBQW9CLEVBRXZCLEVBQUE7SUF2R0w7TUEwR00sYUFBWTtNQUNaLG9CQUFtQixFQUNwQjtJQTVHTDtNQStHTSxlQUFjO01BQ2QsaUJBQWdCO01BQ2hCLG1CQUFrQjtNQUNsQixxQkFBb0IsRUFLckI7TUF2SEw7UUFxSFEsaUJBQWdCLEVBQ2pCO0lBdEhQO01BMEhNLGdCQUFlO01BQ2YsaUJBQWdCO01BQ2hCLHdCQUF1QixFQUN4QjtJQTdITDtNQWdJTSxnQkFBZTtNQUNmLGtCQUFpQjtNQUNqQix5QkFBd0I7TUFDeEIsaUJBQWdCLEVBQ2pCO0lBcElMO01BdUlNLGdCQUFlO01BQ2YsaUJBQWdCO01BQ2hCLHdCQUF1QixFQUt4QjtNQTlJTDtRQTRJUSxpQkFBZ0IsRUFDakI7SUE3SVA7TUFpSk0sZ0JBQWU7TUFDZixrQkFBaUI7TUFDakIsZUFBYztNQUNkLDBCQUF5QjtNQUN6QixzQkFBcUI7TUFDckIsaUJBQWdCLEVBQ2pCO0lBdkpMO01BMEpNLCtEaEZ6SitEO01nRjBKL0QsZ0JBQWU7TUFDZixrQkFBaUI7TUFDakIsd0JBQXVCLEVBQ3hCO0lBOUpMO01BaUtNLGdCQUFlO01BQ2YsZUFBYztNQUNkLGlCQUFnQjtNQUNoQixpQkFBZ0IsRUFDakI7SUFyS0w7TUF3S00sVUFBUztNQUNULFdBQVU7TUFDVixVQUFTO01BQ1QsMEJBQXlCO01BQ3pCLG1CQUFrQixFQU9uQjtNQW5MTDtRQStLUSxlQUFjO1FBQ2Qsd0JBQXVCO1FBQ3ZCLGdCQUFlLEVBQ2hCO0lBbExQO01Bc0xNLFlBQVcsRUFDWjtJQXZMTDtNQTBMTSxlQUFjO01BQ2QsV0FBVTtNQUNWLHNCQUFxQixFQUN0QjtJQTdMTDtNQWdNTSxnQ0FBK0I7TUFDL0IscUJBQWE7TUFBYixjQUFhO01BQ2IsbUJBQWtCLEVBd0RuQjtNQTFQTDtRQXFNUSxjQUFhLEVBQ2Q7TUF0TVA7O1FBME1RLGtCQUFpQixFQUtsQjtRQUhDO1VBNU1SOztZQTZNVSxpQkFBZ0IsRUFFbkIsRUFBQTtNQS9NUDtRQWtOUSwrQkFBOEI7UUFDOUIsbUJBQWtCO1FBQ2xCLDRCQUFvQjtRQUFwQixxQkFBb0I7UUFDcEIsc0JBQXVCO1lBQXZCLHdCQUF1QjtRQUN2Qix1QkFBbUI7WUFBbkIsb0JBQW1CO1FBQ25CLFlBQVc7UUFDWCxtQkFBYztZQUFkLGVBQWM7UUFDZCxhQUFZO1FBQ1osZ0JBQWU7UUFDZixpQkFBZ0I7UUFDaEIsMEJBQXlCO1FBQ3pCLFlBQVc7UUFDWCxxQkFBb0IsRUFDckI7TUEvTlA7UUFrT1EsWUFBTztZQUFQLFFBQU8sRUFDUjtNQUVEO1FBck9OO1VBc09RLDJCQUFzQjtjQUF0Qix1QkFBc0I7VUFDdEIsa0JBQWlCLEVBbUJwQjtVQTFQTDtZQTBPVSxvQkFBbUI7WUFDbkIsZ0JBQWU7WUFDZixtQkFBa0I7WUFDbEIsVUFBUztZQUNULE9BQU07WUFDTixvQ0FBMkI7b0JBQTNCLDRCQUEyQixFQUM1QjtVQWhQVDtZQW1QVSxtQkFBa0IsRUFDbkI7VUFwUFQ7WUF1UFUsY0FBYSxFQUNkLEVBQUE7SUF4UFQ7TUE2UE0scUJBQWE7TUFBYixjQUFhO01BQ2IsdUJBQThCO1VBQTlCLCtCQUE4QjtNQUM5QixpQkFBZ0I7TUFDaEIsbUJBQWtCO01BQ2xCLG9CQUFtQixFQW1EcEI7TUFwVEw7UUFvUVEsaUJBQWdCLEVBS2pCO1FBSEM7VUF0UVI7WUF1UVUsaUJBQWdCLEVBRW5CLEVBQUE7TUF6UVA7UUE0UVEsbUJBQWtCO1FBQ2xCLG9CQUFtQixFQUNwQjtNQTlRUDtRQWlSUSxrQkFBYTtZQUFiLGNBQWEsRUFDZDtNQWxSUDtRQXFSUSxrQkFBYTtZQUFiLGNBQWEsRUFDZDtNQXRSUDtRQXlSUSxtQkFBYztZQUFkLGVBQWM7UUFDZCxlQUFjO1FBQ2QsZ0JBQWUsRUFFaEI7TUE3UlA7UUFnU1EsbUJBQWtCLEVBS25CO1FBclNQO1VBbVNVLGdCQUFlLEVBQ2hCO01BR0g7UUF2U047VUF3U1EsZUFBYztVQUNkLGdCQUFlO1VBQ2YsMkJBQXNCO2NBQXRCLHVCQUFzQixFQVV6QjtVQXBUTDtZQTZTVSxtQkFBYztnQkFBZCxlQUFjO1lBQ2QsVUFBUyxFQUNWO1VBL1NUO1lBaVRVLGlCQUFnQixFQUNqQixFQUFBO0lBbFRUO01BdVRNLHFCQUFhO01BQWIsY0FBYTtNQUNiLHVCQUE4QjtVQUE5QiwrQkFBOEIsRUFTL0I7TUFqVUw7UUEyVFEsb0JBQWU7WUFBZixnQkFBZSxFQUNoQjtNQUVEO1FBOVROO1VBK1RRLGVBQWMsRUFFakIsRUFBQTtJQWpVTDtNQW9VTSxjQUFhO01BQ2Isb0JBQW1CO01BQ25CLG1GQUE0RTtNQUM1RSxvQkFBbUIsRUFpR3BCO01BeGFMO1FBMFVRLGNBQWEsRUFDZDtNQTNVUDtRQThVUSxpQkFBZ0I7UUFDaEIsb0JBQW1CLEVBQ3BCO01BaFZQO1FBbVZRLGdCQUFlO1FBQ2YsZUFBYztRQUNkLHlCQUF3QjtRQUN4QixpQkFBZ0I7UUFDaEIsbUJBQWtCLEVBQ25CO01BeFZQOztRQTRWUSx3QkFBdUI7UUFDdkIsZUFBYztRQUNkLFlBQVc7UUFDWCxvQkFBbUI7UUFDbkIsMEJBQXlCO1FBQ3pCLG1CQUFrQjtRQUNsQixtQkFBa0IsRUFNbkI7UUF4V1A7O1VBcVdVLHlCQUF3QjtVQUN4QiwwQkFBeUIsRUFDMUI7TUF2V1Q7O1FBNFdRLHNCQUFxQixFQUN0QjtNQTdXUDtRQWdYUSxlQUFjO1FBQ2QsZ0JBQWU7UUFDZixpQkFBZ0I7UUFDaEIsaUJBQWdCLEVBQ2pCO01BcFhQO1FBdVhRLG9CQUFtQixFQUNwQjtNQXhYUDtRQTJYUSxlQUFjO1FBQ2QsaUJBQWdCLEVBT2pCO1FBbllQO1VBK1hVLGdCQUFlO1VBQ2Ysa0JBQWlCO1VBQ2pCLGdCQUFlLEVBQ2hCO01BbFlUO1FBc1lRLGVBQWM7UUFDZCxZQUFXLEVBQ1o7TUF4WVA7UUEyWVEsZUFBYztRQUNkLG1CQUFrQjtRQUNsQixnQkFBZTtRQUNmLGVBQWM7UUFDZCxpQkFBZ0IsRUFDakI7TUFoWlA7UUFtWlEscUJBQWE7UUFBYixjQUFhO1FBQ2IsdUJBQW1CO1lBQW5CLG9CQUFtQjtRQUNuQixzQkFBdUI7WUFBdkIsd0JBQXVCO1FBQ3ZCLGNBQWE7UUFDYixZQUFXO1FBQ1gsMEJBQXlCO1FBQ3pCLG1CQUFrQjtRQUNsQixpQkFBZ0I7UUFDaEIsZUFBYztRQUNkLGdCQUFlO1FBQ2YsaUJBQWdCLEVBQ2pCO01BOVpQO1FBaWFRLDJCQUEwQjtRQUMxQixpQkFBZ0IsRUFDakI7TUFFRDtRQXJhTjtVQXNhUSxtQkFBa0IsRUFFckIsRUFBQTtJQXhhTDtNQTJhTSxjQUFhO01BQ2IsZUFBYztNQUNkLGdCQUFlO01BQ2Ysa0JBQWlCO01BQ2pCLGlCQUFnQjtNQUNoQixvQkFBbUIsRUFLcEI7TUFyYkw7UUFtYlEsZUFBYyxFQUNmO0lBcGJQO01Bd2JNLGlCQUFnQjtNQUNoQixrQkFBaUI7TUFDakIsaUJBQWdCLEVBOEVqQjtNQXhnQkw7UUE4YlEsZ0JBQWU7UUFDZixrQkFBaUI7UUFDakIsZUFBYztRQUNkLGlCQUFnQixFQU1qQjtRQXZjUDtVQW9jVSxpQkFBZ0I7VUFDaEIsZUFBYyxFQUNmO01BdGNUO1FBMGNRLHNCQUFxQjtRQUNyQixpQkFBZ0I7UUFDaEIsV0FBVSxFQUNYO01BN2NQO1FBZ2RRLGVBQWM7UUFDZCxnQkFBZTtRQUNmLGtCQUFpQjtRQUNqQixpQkFBZ0I7UUFDaEIsbUJBQWtCLEVBQ25CO01BcmRQO1FBd2RRLG1CQUFrQjtRQUNsQixtQkFBa0IsRUE0Qm5CO1FBcmZQO1VBNGRVLGdCQUFlO1VBQ2Ysa0JBQWlCO1VBQ2pCLGVBQWMsRUFDZjtRQS9kVDtVQWtlVSxxQkFBYTtVQUFiLGNBQWE7VUFDYix1QkFBbUI7Y0FBbkIsb0JBQW1CO1VBQ25CLHNCQUF1QjtjQUF2Qix3QkFBdUI7VUFDdkIsWUFBVztVQUNYLGFBQVk7VUFDWixzQkFBcUI7VUFDckIsaUJBQWdCO1VBQ2hCLGVBQWM7VUFDZCxvQkFBbUI7VUFDbkIscUJBQW9CO1VBQ3BCLGlCQUFnQjtVQUNoQixpQkFBZ0I7VUFDaEIsaUJBQWdCO1VBQ2hCLGlCQUFnQjtVQUNoQixtQkFBa0I7VUFDbEIsbUJBQWtCO1VBQ2xCLE9BQU07VUFDTixRQUFPLEVBQ1I7TUFwZlQ7UUF3ZlEsaUJBQWdCLEVBQ2pCO01BRUQ7UUEzZk47VUE0ZlEsY0FBYSxFQVloQjtVQXhnQkw7WUErZlUsaUJBQWdCLEVBQ2pCLEVBQUE7TUFHSDtRQW5nQk47VUFvZ0JRLGtCQUFpQjtVQUNqQixlQUFjO1VBQ2QsaUJBQWdCLEVBRW5CLEVBQUE7SUF4Z0JMO01BMmdCTSxzQkFBcUIsRUFrRnRCO01BN2xCTDtRQThnQlEscUJBQWE7UUFBYixjQUFhO1FBQ2IsdUJBQW1CO1lBQW5CLG9CQUFtQjtRQUNuQix1QkFBOEI7WUFBOUIsK0JBQThCO1FBQzlCLGlCQUFnQixFQUNqQjtNQWxoQlA7UUFxaEJRLHFGQUFvRjtRQUNwRiw2QkFBNEI7UUFDNUIsNkJBQTRCLEVBdUQ3QjtRQTlrQlA7VUEwaEJVLFlBQVc7VUFDWCxhQUFZO1VBQ1oseUJBQXdCLEVBQ3pCO1FBN2hCVDtVQWdpQlUsWUFBVztVQUNYLGFBQVk7VUFDWiw2QkFBNEIsRUFDN0I7UUFuaUJUO1VBc2lCVSxZQUFXO1VBQ1gsYUFBWTtVQUNaLDZCQUE0QixFQUM3QjtRQXppQlQ7VUE0aUJVLGFBQVk7VUFDWixhQUFZO1VBQ1osNkJBQTRCLEVBQzdCO1FBL2lCVDtVQWtqQlUsWUFBVztVQUNYLGFBQVk7VUFDWiw2QkFBNEIsRUFDN0I7UUFyakJUO1VBd2pCVSxZQUFXO1VBQ1gsYUFBWTtVQUNaLDhCQUE2QixFQUM5QjtRQTNqQlQ7VUE4akJVLFlBQVc7VUFDWCxhQUFZO1VBQ1osOEJBQTZCLEVBQzlCO1FBamtCVDtVQW9rQlUsWUFBVztVQUNYLGFBQVk7VUFDWiw4QkFBNkIsRUFDOUI7UUF2a0JUO1VBMGtCVSxZQUFXO1VBQ1gsYUFBWTtVQUNaLDhCQUE2QixFQUM5QjtNQUdIO1FBaGxCTjtVQWtsQlUsc0JBQXVCO2NBQXZCLHdCQUF1QjtVQUN2QixpQkFBZ0I7VUFDaEIsb0JBQW1CO1VBQ25CLG9CQUFlO2NBQWYsZ0JBQWUsRUFDaEI7UUF0bEJUO1VBeWxCVSxvQkFBbUI7VUFDbkIsbUJBQWM7Y0FBZCxlQUFjLEVBQ2YsRUFBQTtJQTNsQlQ7TUFnbUJNLHdCQUF1QjtNQUN2QixlQUFjO01BQ2QsaUJBQWdCO01BQ2hCLGdCQUFlO01BQ2YsMEJBQXlCO01BQ3pCLG1CQUFrQjtNQUNsQixtQkFBa0I7TUFDbEIsZ0JBQWU7TUFDZiw0QkFBb0I7TUFBcEIscUJBQW9CO01BQ3BCLHVCQUFtQjtVQUFuQixvQkFBbUIsRUF3Q3BCO01BanBCTDtRQTRtQlEsc0JBQXFCLEVBQ3RCO01BN21CUDtRQWduQlEsYUFBVztRQUNYLG9CQUFtQjtRQUNuQixlQUFjO1FBQ2QsbUJBQWtCO1FBQ2xCLFlBQVc7UUFDWCxnQkFBZTtRQUNmLHNCQUFxQjtRQUNyQixZQUFXO1FBQ1gsbUJBQWM7WUFBZCxlQUFjO1FBQ2QsYUFBWTtRQUNaLGVBQWM7UUFDZCxxQkFBYTtRQUFiLGNBQWE7UUFDYix1QkFBbUI7WUFBbkIsb0JBQW1CO1FBQ25CLHNCQUF1QjtZQUF2Qix3QkFBdUI7UUFDdkIsbUJBQWtCLEVBQ25CO01BL25CUDtRQWtvQlEsc0JBQXFCO1FBQ3JCLGlCQUFnQjtRQUNoQixnQkFBZTtRQUNmLGlCQUFnQjtRQUNoQixpQkFBZ0I7UUFDaEIsZUFBYztRQUNkLHNCQUFxQjtRQUNyQixvQ0FBMkI7Z0JBQTNCLDRCQUEyQjtRQUMzQiwwQkFBeUI7UUFDekIsa0JBQWE7WUFBYixjQUFhLEVBQ2Q7TUE1b0JQO1FBK29CUSx3Q0FBK0I7Z0JBQS9CLGdDQUErQixFQUNoQztJQWhwQlA7TUFvcEJNLGlGQUFnRjtNQUNoRixtRkFBNEU7TUFDNUUsb0JBQW1CO01BQ25CLHFCQUFvQjtNQUNwQixZQUFXO01BQ1gsbUJBQWtCLEVBdUNuQjtNQWhzQkw7UUE0cEJRLFlBQVc7UUFDWCxlQUFjO1FBQ2QsbUJBQWtCO1FBQ2xCLFdBQVU7UUFDVixVQUFTO1FBQ1Qsb0NBQTJCO2dCQUEzQiw0QkFBMkI7UUFDM0IsWUFBVztRQUNYLGFBQVk7UUFDWix1RUFBc0U7UUFDdEUsc0JBQXFCLEVBQ3RCO01BdHFCUDtRQXlxQlEsaUJBQWdCO1FBQ2hCLGVBQWMsRUFDZjtNQTNxQlA7UUE4cUJRLGdDQUE0QixFQUs3QjtRQW5yQlA7VUFpckJVLFlBQVcsRUFDWjtNQWxyQlQ7UUFzckJRLGlCQUFnQixFQUNqQjtNQUVEO1FBenJCTjtVQTByQlEscUJBQW9CLEVBTXZCO1VBaHNCTDtZQTZyQlUsaUJBQWdCLEVBQ2pCLEVBQUE7SUE5ckJUO01BbXNCTSxxQkFBb0I7TUFDcEIsbUJBQWtCLEVBS25CO01BenNCTDtRQXVzQlEsVUFBUyxFQUNWO0lBeHNCUDtNQTRzQk0sOEJBQTZCLEVBZ0U5QjtNQTV3Qkw7UUErc0JRLGlCQUFnQjtRQUNoQixtQkFBa0I7UUFDbEIsa0JBQWlCLEVBQ2xCO01BbHRCUDtRQXF0QlEsaUJBQWdCO1FBQ2hCLG1CQUFrQjtRQUNsQixvQkFBbUIsRUFtQ3BCO1FBMXZCUDtVQTB0QlUsa0JBQWlCO1VBQ2pCLG1CQUFrQixFQUNuQjtRQTV0QlQ7VUErdEJVLG1CQUFrQjtVQUNsQixxQkFBb0I7VUFDcEIsaUJBQWdCLEVBd0JqQjtVQXp2QlQ7WUFvdUJZLDZCQUE0QjtZQUM1Qix5QkFBd0I7WUFDeEIsc0JBQXFCO1lBQ3JCLFlBQVc7WUFDWCxjQUFhO1lBQ2IsWUFBVztZQUNYLGVBQWM7WUFDZCxtQkFBa0I7WUFDbEIsU0FBUTtZQUNSLHNCQUFxQixFQUN0QjtVQTl1Qlg7WUFpdkJZLGtFQUFpRSxFQUNsRTtVQWx2Qlg7WUFvdkJZLGdFQUErRCxFQUNoRTtVQXJ2Qlg7WUF1dkJZLDZEQUE0RCxFQUM3RDtNQUlMO1FBNXZCTjtVQTh2QlUsa0JBQWlCLEVBQ2xCLEVBQUE7TUFHSDtRQWx3Qk47VUFvd0JVLDJCQUFzQjtjQUF0Qix1QkFBc0IsRUFNdkI7VUExd0JUO1lBdXdCWSxtQkFBYztnQkFBZCxlQUFjO1lBQ2Qsb0JBQW1CLEVBQ3BCLEVBQUE7SUF6d0JYO01BK3dCTSw0QkFBMkI7TUFDM0Isb0JBQW1CO01BQ25CLDZFQUFvRTtNQUNwRSxtQkFBa0I7TUFDbEIsNkJBQTRCLEVBYTdCO01BaHlCTDtRQXN4QlEsZUFDRixFQUFDO01BdnhCUDtRQTB4QlEsZUFBYyxFQUNmO01BM3hCUDtRQTh4QlEsa0ZBQTJFLEVBQzVFO0VBL3hCUDtJQW95QkksMEJBQXlCO0lBQ3pCLGdCQUFlO0lBQ2YsZUFBYztJQUNkLGlCQUFnQjtJQUNoQix1QkFBc0I7SUFDdEIsbUJBQWtCO0lBQ2xCLG1CQUFrQjtJQUNsQiw0QkFBb0I7SUFBcEIscUJBQW9CO0lBQ3BCLHVCQUFtQjtRQUFuQixvQkFBbUIsRUFXcEI7SUF2ekJIO01BK3lCTSxtQ0FBMEI7TUFBMUIsMkJBQTBCO01BQTFCLG1EQUEwQjtNQUMxQixrQkFBaUI7TUFDakIsZ0JBQWUsRUFDaEI7SUFsekJMO01BcXpCTSxxQ0FBNEI7Y0FBNUIsNkJBQTRCLEVBQzdCO0VBdHpCTDtJQTB6QkksbUJBQWtCLEVBWW5CO0lBdDBCSDtNQTZ6Qk0sZ0JBQWUsRUFDaEI7SUE5ekJMO01BaTBCTSxtQkFBa0I7TUFDbEIsT0FBTTtNQUNOLFFBQU87TUFDUCwrQ0FBc0M7Y0FBdEMsdUNBQXNDLEVBQ3ZDOztBQ3IwQkw7O0VBRUUsK0RqRkRtRSxFaUZxVHBFO0VBdFREOzs7Ozs7SUFPSSw2RGpGUDhELEVpRlEvRDtFQVJIOztJQVdJLDBCQUF5QjtJQUN6QixpQ0FBZ0M7SUFDaEMsbUJBQWtCO0lBQ2xCLGtCQUFpQixFQWdDbEI7SUE5Q0g7O01BaUJNLGNBQWEsRUFDZDtJQWxCTDs7TUFxQk0scUJBQWE7TUFBYixjQUFhO01BQ2IsMkJBQXNCO1VBQXRCLHVCQUFzQjtNQUN0QixzQkFBdUI7VUFBdkIsd0JBQXVCO01BQ3ZCLGlCQUFnQjtNQUNoQixrQkFBaUI7TUFDakIscUJBQW9CO01BQ3BCLHFCQUFvQixFQUNyQjtJQTVCTDs7TUErQk0sZUFBYztNQUNkLGdCQUFlO01BQ2YsaUJBQWdCO01BQ2hCLHlCQUF3QjtNQUN4QixvQkFBbUIsRUFDcEI7SUFwQ0w7O01BdUNNLGdCQUFlO01BQ2Ysa0JBQWlCO01BQ2pCLGlCQUFnQjtNQUNoQix3QkFBdUI7TUFDdkIsZUFBYztNQUNkLGlCQUFnQixFQUNqQjtFQTdDTDs7OztJQWtESSxjQUFTO1FBQVQsVUFBUyxFQUNWO0VBbkRIOztJQXNESSxtQkFBa0I7SUFDbEIsb0JBQW1CO0lBQ25CLGdCQUFlO0lBQ2YsZUFBYztJQUNkLHdCQUF1QjtJQUN2QixpQkFBZ0IsRUFDakI7RUE1REg7O0lBK0RJLG1CQUFrQjtJQUNsQixvQkFBbUI7SUFDbkIscUJBQWE7SUFBYixjQUFhO0lBQ2Isb0JBQWU7UUFBZixnQkFBZTtJQUNmLHVCQUE4QjtRQUE5QiwrQkFBOEI7SUFDOUIsa0JBQWlCLEVBbUVsQjtJQXZJSDs7O01Bd0VNLGNBQWEsRUFDZDtJQXpFTDs7TUE0RU0sZUFBYztNQUNkLGdCQUFlO01BQ2Ysa0JBQWlCO01BQ2pCLDJCQUFrQjtjQUFsQixtQkFBa0I7TUFDbEIsb0JBQW1CLEVBc0JwQjtNQXRHTDs7UUFtRlEsbUpBR2lEO1FBQ2pELGlDQUFnQztRQUNoQyw2Q0FBNEM7UUFDNUMsK0NBQThDO1FBQzlDLGNBQWE7UUFDYixhQUFZO1FBQ1osWUFBVztRQUNYLFlBQVc7UUFDWCxpQkFBZ0I7UUFDaEIsbUJBQWtCO1FBQ2xCLG1CQUFrQjtRQUNsQixrQ0FBeUI7Z0JBQXpCLDBCQUF5QjtRQUN6QixrQkFBaUI7UUFDakIsb0JBQW1CO1FBQ25CLDBDQUF3QyxFQUN6QztJQXJHUDs7TUF5R00sdUJBQXNCO01BQ3RCLGlCQUFnQjtNQUNoQixnQkFBZTtNQUNmLG9CQUFtQixFQUNwQjtJQTdHTDs7TUFnSE0sc0JBQXFCO01BQ3JCLFdBQVU7TUFDVixpQkFBZ0IsRUFDakI7SUFuSEw7O01Bc0hNLHNCQUFxQjtNQUNyQixnQkFBZTtNQUNmLGtCQUFpQjtNQUNqQixtQkFBa0I7TUFDbEIsd0JBQXVCLEVBWXhCO01BdElMOztRQTZIUSxpQkFBZ0IsRUFDakI7TUE5SFA7O1FBaUlRLGFBQWE7UUFDYixhQUFZO1FBQ1osbUJBQWtCO1FBQ2xCLFVBQVMsRUFDVjtFQXJJUDs7OztJQTJJSSx3QkFBdUI7SUFDdkIsa0JBQWlCO0lBQ2pCLDhDQUFxQztJQUNyQyxpQkFBZ0I7SUFDaEIsb0JBQW1CLEVBVXBCO0lBekpIOzs7O01Ba0pNLGNBQWE7TUFDYixvQkFBbUI7TUFDbkIsaUJBQWdCO01BQ2hCLGdCQUFlO01BQ2Ysa0JBQWlCO01BQ2pCLHdCQUF1QixFQUN4QjtFQXhKTDs7SUE0SkkscUJBQW9CO0lBQ3BCLG1CQUFrQjtJQUNsQixZQUFXLEVBd0NaO0lBdE1IOztNQWlLTSxlQUFjO01BQ2QsZUFBYztNQUNkLGdCQUFlO01BQ2YsaUJBQWdCO01BQ2hCLG1CQUFrQjtNQUNsQixtQkFBa0I7TUFDbEIsdUJBQXNCO01BQ3RCLGlCQUFnQixFQUNqQjtJQXpLTDs7TUE0S00sZUFBYztNQUNkLGlCQUFnQixFQUNqQjtJQTlLTDs7TUFpTE0scUJBQWE7TUFBYixjQUFhO01BQ2Isb0JBQWU7VUFBZixnQkFBZTtNQUNmLGlCQUFnQjtNQUNoQiw0QkFBNkI7VUFBN0IsOEJBQTZCLEVBaUI5QjtNQXJNTDs7O1FBd0xRLG9FQUFtRTtRQUNuRSxzQkFBcUI7UUFDckIsYUFBWTtRQUNaLGFBQVk7UUFDWixZQUFXO1FBQ1gsZ0JBQWU7UUFDZixvQkFBbUI7UUFDbkIsc0JBQXFCLEVBQ3RCO01BaE1QOztRQW1NUSw4QkFBNkIsRUFDOUI7RUFwTVA7O0lBeU1JLG9CQUFtQjtJQUNuQixlQUFjLEVBaUNmO0lBM09IOztNQTZNTSx1QkFBbUI7VUFBbkIsb0JBQW1CO01BQ25CLHFCQUFhO01BQWIsY0FBYTtNQUNiLHFCQUFvQjtNQUNwQixrQkFBaUIsRUFDbEI7SUFqTkw7O01Bb05NLHdCQUF1QjtNQUN2QixxQkFBWTtVQUFaLGFBQVksRUFDYjtJQXROTDs7TUF5Tk0sZWpGaE5pQjtNaUZpTmpCLGdCQUFlO01BQ2YsaUJBQWdCO01BQ2hCLHdCQUF1QjtNQUN2QixnQkFBZSxFQUNoQjtJQTlOTDs7TUFpT00sZUFBYztNQUNkLGdCQUFlO01BQ2YsaUJBQWdCO01BQ2hCLFVBQVMsRUFDVjtJQXJPTDs7TUF3T00sZ0JBQWU7TUFDZixpQkFBZ0IsRUFDakI7RUFHSDtJQTdPRjs7TUErT00sb0JBQW1CO01BQ25CLG1CQUFrQixFQUNuQjtJQWpQTDs7TUFvUE0sbUJBQWtCO01BQ2xCLGtCQUFpQixFQUNsQjtJQXRQTDs7TUF5UE0sbUJBQWtCLEVBQ25CO0lBMVBMOztNQTZQTSxlQUFjLEVBQ2Y7SUE5UEw7O01BaVFNLGdCQUFlO01BQ2YsaUJBQWdCLEVBQ2pCO0lBblFMOztNQXNRTSxnQkFBZSxFQUNoQjtJQXZRTDs7TUEwUU0sa0JBQWlCLEVBQ2xCO0lBM1FMOztNQThRTSxnQkFBZSxFQUNoQixFQUFBO0VBL1FMOztJQW1SSSxrQkFBaUIsRUFDbEI7RUFwUkg7O0lBdVJJLG1CQUFrQixFQUNuQjtFQXhSSDs7SUE0Uk0sbUJBQWtCO0lBQ2xCLGtCQUFpQjtJQUNqQixpQkFBZ0IsRUFDakI7RUEvUkw7O0lBa1NNLGNBQWEsRUFDZDtFQW5TTDs7SUFzU00sZUFBYyxFQUNmO0VBdlNMOztJQTBTTSxpQkFBZ0IsRUFDakI7RUEzU0w7O0lBOFNNLGNBQWE7SUFDYixvQkFBbUIsRUFDcEI7RUFoVEw7O0lBbVRNLGtCQUFpQixFQUNsQjs7QUNwVEw7RUFFSSw0REFBMkQ7RUFDM0Qsc0JBQXFCO0VBQ3JCLHlCQUF3QjtFQUN4QixjQUFhLEVBQ2Q7O0FDSEg7RUFFRSxrQkFBaUI7RUFDakIsZUFBYztFQUNkLGtCQUFpQjtFQUNqQixtQkFBa0IsRUF3aUJuQjtFQTdpQkQ7SUFRSSxlQUFjLEVBQ2Y7RUFUSDtJQWlCSSxtQkFBa0I7SUFDbEIsbUJBQWtCO0lBQ2xCLE9BQU07SUFDTixTQUFRO0lBQ1IsVUFBUztJQUNULFFBQU87SUFDUCxpQkFBZ0IsRUEyRGpCO0lBbEZIO01BMEJNLGFBQVk7TUFDWixpQkFBZ0I7TUFDaEIsaUJBQWdCO01BQ2hCLG1CQUFrQjtNQUNsQixtQkFBa0IsRUFDbkI7SUEvQkw7TUFrQ00sZ0JBQWU7TUFDZixrQkFBaUI7TUFDakIsb0JBQW1CO01BQ25CLHVCQUFzQixFQUN2QjtJQXRDTDtNQXlDTSxnQkFBZTtNQUNmLGtCQUFpQjtNQUNqQiw2RG5GOUM0RDtNbUYrQzVELHdCQUF1QjtNQUN2QixlQUFjLEVBQ2Y7SUE5Q0w7TUFpRE0sZ0JBQWU7TUFDZixpQkFBZ0I7TUFDaEIsaUJBQWdCO01BQ2hCLG1CQUFrQjtNQUNsQixtQkFBa0I7TUFDbEIscUJBQW9CO01BQ3BCLDBCQUF5QixFQVcxQjtNQWxFTDtRQTBEUSxnQkFBZTtRQUNmLGtCQUFpQjtRQUNqQixxQkFBb0I7UUFDcEIsWUFBVztRQUNYLGFBQVk7UUFDWixzQkFBcUIsRUFFdEI7SUFqRVA7TUFxRU0sZ0NBQThCO01BQzlCLGlCQUFnQjtNQUNoQixnQkFBZSxFQVVoQjtNQWpGTDtRQTBFUSxnQ0FBOEIsRUFNL0I7UUFoRlA7VUE2RVUsZ0NBQThCO1VBQzlCLHNCQUFxQixFQUN0QjtFQS9FVDtJQXFGSSxnRUFBK0Q7SUFDL0Qsc0JBQXFCLEVBeUd0QjtJQS9MSDtNQXlGTSxlQUFjLEVBQ2Y7SUExRkw7TUE2Rk0sV0FBVTtNQUNWLGdCQUFlO01BQ2YsaUJBQWdCLEVBQ2pCO0lBaEdMO01BbUdNLHNCQUFxQjtNQUNyQixrQkFBaUIsRUFlbEI7TUFuSEw7UUF1R1EsZ0JBQWUsRUFNaEI7UUE3R1A7VUEwR1UsYUFBWTtVQUNaLHFCQUFvQixFQUNyQjtNQTVHVDtRQWdIUSxhQUFZO1FBQ1osWUFBVyxFQUNaO0lBbEhQO01Bc0hNLG1CQUFrQjtNQUNsQixVQUFTO01BQ1QsWUFBVztNQUNYLFFBQU87TUFDUCxXQUFVO01BQ1YsVUFBUyxFQW1FVjtNQTlMTDtRQThIUSxtQkFBa0I7UUFDbEIsV0FBVTtRQUNWLDZDQUFvQztnQkFBcEMscUNBQW9DLEVBNkRyQztRQTdMUDtVQW1JVSxpRUFBZ0U7VUFDaEUsc0JBQXFCO1VBQ3JCLGNBQWE7VUFDYixhQUFZO1VBQ1osYUFBWTtVQUNaLGNBQWE7VUFDYiw2QkFBb0I7a0JBQXBCLHFCQUFvQixFQUNyQjtRQTFJVDtVQTZJVSxzRUFBcUU7VUFDckUsc0JBQXFCO1VBQ3JCLGNBQWE7VUFDYixZQUFXO1VBQ1gsYUFBWTtVQUNaLGNBQWE7VUFDYiw2QkFBb0I7a0JBQXBCLHFCQUFvQixFQUNyQjtRQXBKVDtVQXVKVSxzRUFBcUU7VUFDckUsc0JBQXFCO1VBQ3JCLGNBQWE7VUFDYixZQUFXO1VBQ1gsYUFBWTtVQUNaLGNBQWE7VUFDYiw0QkFBbUI7a0JBQW5CLG9CQUFtQixFQUNwQjtRQTlKVDtVQWlLVSx1RUFBc0U7VUFDdEUsc0JBQXFCO1VBQ3JCLGNBQWE7VUFDYixhQUFZO1VBQ1osYUFBWTtVQUNaLGNBQWE7VUFDYiw4QkFBcUI7a0JBQXJCLHNCQUFxQixFQUN0QjtRQXhLVDtVQTJLVSw2REFBNEQ7VUFDNUQsc0JBQXFCO1VBQ3JCLGNBQWE7VUFDYixhQUFZO1VBQ1osYUFBWTtVQUNaLGNBQWE7VUFDYiw4QkFBcUI7a0JBQXJCLHNCQUFxQixFQUN0QjtRQWxMVDtVQXFMVSxnRUFBK0Q7VUFDL0Qsc0JBQXFCO1VBQ3JCLGNBQWE7VUFDYixhQUFZO1VBQ1osY0FBYTtVQUNiLGNBQWE7VUFDYiw4QkFBcUI7a0JBQXJCLHNCQUFxQixFQUN0QjtFQTVMVDtJQWtNSSxvQkFBbUIsRUFrSnBCO0lBcFZIO01BcU1NLGdFQUErRDtNQUMvRCx1QkFBc0I7TUFDdEIsbUJBQWtCO01BQ2xCLE9BQU07TUFDTixTQUFRO01BQ1IsVUFBUztNQUNULFFBQU87TUFDUCxXQUFVO01BQ1YsWUFBVyxFQUNaO0lBOU1MO01BaU5NLGtCQUFpQjtNQUNqQixtQkFBa0I7TUFDbEIsaUJBQWdCLEVBa0RqQjtNQXJRTDtRQXNOUSxzQkFBcUI7UUFDckIsWUFBVztRQUNYLGFBQVksRUFDYjtNQXpOUDtRQTROUSwwQkFBeUI7UUFDekIscUJBQW9CO1FBQ3BCLDhFbkY3TmdGO1FtRjhOaEYsZ0JBQWU7UUFDZixpQkFBZ0I7UUFDaEIsaUJBQWdCO1FBQ2hCLG9CQUFtQixFQUNwQjtNQW5PUDtRQXNPUSx1QkFBc0IsRUFDdkI7TUF2T1A7UUEwT1Esa0JBQWlCO1FBQ2pCLGlCQUFnQixFQUNqQjtNQTVPUDtRQStPUSxpQkFBZ0I7UUFDaEIsc0JBQXFCLEVBb0J0QjtRQXBRUDtVQW1QVSxlQUFjO1VBQ2Qsa0JBQWlCLEVBQ2xCO1FBclBUO1VBd1BVLG9CQUFtQixFQUtwQjtVQTdQVDtZQTJQWSxvQkFBK0IsRUFDaEM7UUE1UFg7VUFnUVUsWUFBVztVQUNYLGFBQVk7VUFDWixpQkFBZ0IsRUFDakI7SUFuUVQ7TUF3UU0sbUJBQWtCO01BQ2xCLGFBQVk7TUFDWixZQUFXO01BQ1gsUUFBTyxFQTBEUjtNQXJVTDtRUk1FLHFCQUFhO1FBQWIsY0FBYTtRQUNiLHFCQUFzQjtZQUF0Qix1QkFBc0I7UUFDdEIsb0JBQWU7WUFBZixnQkFBZTtRQUNmLGdCQUFlO1FRc1FULHVCQUE4QjtZQUE5QiwrQkFBOEI7UUFDOUIsV0FBVSxFQU1YO1FSM1FMO1VBQ0Usa0JBQWlCO1VBQ2pCLGlCQUFnQixFQUNqQjtRUWRIO1VBb1JVLGNBQWEsRUFDZDtNQXJSVDtRQXlSUSxtQkFBa0I7UUFDbEIsa0JBQWlCO1FBQ2pCLGFBQVk7UUFDWixlQUFjO1FBQ2QsbUJBQWtCO1FBQ2xCLHdCQUF1QjtRQUN2QixnQkFBZTtRQUNmLGtCQUFpQjtRQUNqQixvQkFBbUI7UUFDbkIsV0FBVSxFQW9CWDtRQXRUUDtVQXFTVSxvRUFBbUU7VUFDbkUsdUJBQXNCO1VBQ3RCLG1CQUFrQjtVQUNsQixPQUFNO1VBQ04sdUJBQXNCO1VBQ3RCLGFBQVk7VUFDWixZQUFXO1VBQ1gsWUFBVyxFQUNaO1FSeFJMO1VBQ0UsMkJBQXVELEVBQ3hEO1FBRkQ7VUFDRSw2QkFBdUQsRUFDeEQ7UUFGRDtVQUNFLDZCQUF1RCxFQUN4RDtRQUZEO1VBQ0UsOEJBQXVELEVBQ3hEO1FBRkQ7VUFDRSw4QkFBdUQsRUFDeEQ7TVFpU0M7UUF4VE47VUF5VFEsVUFBUyxFQVlaO1VBclVMO1lBNFRVLGlCQUFnQjtZQUNoQixlQUFjO1lBQ2QsMEJBQTZCO2dCQUE3Qiw4QkFBNkIsRUFDOUIsRUFBQTtNQUdIO1FBbFVOO1VBbVVRLGNBQWEsRUFFaEIsRUFBQTtJQXJVTDtNQXlVTSxtREFBMEM7Y0FBMUMsMkNBQTBDLEVBQzNDO0lBMVVMO01BNlVNLGlEQUF3QztjQUF4Qyx5Q0FBd0MsRUFNekM7TUFuVkw7UUErVXdCLDZCQUFvQjtnQkFBcEIscUJBQW9CLEVBQUk7TUEvVWhEO1FBZ1Z3Qiw2QkFBb0I7Z0JBQXBCLHFCQUFvQixFQUFJO01BaFZoRDtRQWlWd0IsNkJBQW9CO2dCQUFwQixxQkFBb0IsRUFBSTtNQWpWaEQ7UUFrVndCLDZCQUFvQjtnQkFBcEIscUJBQW9CLEVBQUk7RUFsVmhEO0lBdVZJLGtCQUFpQjtJQUNqQixtQkFBa0I7SUFDbEIsa0JBQWlCLEVBK01sQjtJQXhpQkg7TUFxV00sc0JBQXFCO01BQ3JCLG9CQUFtQjtNQUNuQixnQkFBZTtNQUNmLGtCQUFpQjtNQUNqQixtQkFBa0I7TUFDbEIsc0JBQXFCO01BQ3JCLHNCQUFxQixFQWF0QjtNQXhYTDtRQThXUSxlQUFjLEVBQ2Y7TUEvV1A7UUFrWFEsYUFBWSxFQUNiO01BRUQ7UUFyWE47VUFzWFEsY0FBYSxFQUVoQixFQUFBO0lBeFhMO01BMlhNLGlCQUFnQjtNQUNoQixlQUFjO01BQ2QsaUJBQWdCO01BQ2hCLG1CQUFrQjtNQUNsQixXQUFVLEVBNEVYO01BM2NMO1FBa1lRLGdCQUFlO1FBQ2Ysa0JBQWlCO1FBQ2pCLGVBQWM7UUFDZCx1QkFBc0I7UUFDdEIsbUJBQWtCLEVBQ25CO01BdllQO1FBMFlRLGdCQUFlO1FBQ2Ysa0JBQWlCO1FBQ2pCLCtCQUFtQjtRQUNuQix1QkFBc0IsRUFDdkI7TUE5WVA7UUFpWlEsb0JBQW1CO1FBQ25CLG9CQUFtQjtRQUNuQiwwQkFBeUI7UUFDekIsaUJBQWdCO1FBQ2hCLGdCQUFlO1FBQ2Ysa0JBQWlCO1FBQ2pCLHdCQUF1QjtRQUN2Qix1QkFBc0IsRUFldkI7UUF2YVA7VUEyWlUsb0JBQStCLEVBQ2hDO1FBNVpUO1VBK1pVLG9CQUFtQixFQUNwQjtRQWhhVDtVQW1hVSxpQkFBZ0I7VUFDaEIsa0JBQWlCO1VBQ2pCLGtCQUFpQixFQUNsQjtNQXRhVDtRQTBhUSxnQkFBZTtRQUNmLGtCQUFpQjtRQUNqQix3QkFBdUI7UUFDdkIsZUFBYyxFQXVCZjtRQXBjUDtVQWdiVSxtQkFBa0I7VUFDbEIsZUFBYyxFQWtCZjtVQW5jVDtZQW9iWSxZQUFXO1lBQ1gsbUJBQWtCO1lBQ2xCLFFBQU87WUFDUCxTQUFRO1lBQ1IsYUFBWTtZQUNaLGlDQUFnQyxFQUNqQztVQTFiWDtZQTZiWSxlbkZ2YlcsRW1GNGJaO1lBbGNYO2NBZ2NjLDZCbkYxYlMsRW1GMmJWO01BS1A7UUF0Y047VUF1Y1EsZ0JBQWU7VUFDZixtQkFBa0I7VUFDbEIsaUJBQWdCLEVBRW5CLEVBQUE7SUEzY0w7TUE4Y00sbUJBQWtCO01BQ2xCLFlBQVc7TUFDWCxXQUFVO01BQ1YsY0FBYTtNQUNiLGFBQVksRUFnQmI7TUFkQztRQXBkTjtVQXFkUSxXQUFVO1VBQ1YsYUFBWSxFQVlmLEVBQUE7TUFUQztRQXpkTjtVQTBkUSxhQUFZO1VBQ1osYUFBWTtVQUNaLFdBQVUsRUFNYixFQUFBO01BSEM7UUEvZE47VUFnZVEsY0FBYSxFQUVoQixFQUFBO0lBbGVMO01BcWVNLFdBQVU7TUFDVixtQkFBa0I7TUFDbEIsYUFBWTtNQUNaLFFBQU87TUFDUCxpQkFBZ0I7TUFDaEIscUJBQWE7TUFBYixjQUFhO01BQ2Isb0JBQWU7VUFBZixnQkFBZSxFQThCaEI7TUF6Z0JMO1FBOGVRLGdCQUFlO1FBQ2Ysa0JBQWlCO1FBQ2pCLHdCQUF1QjtRQUN2QixlQUFjO1FBQ2QsZ0JBQWU7UUFDZixzQkFBcUIsRUFpQnRCO1FBcGdCUDtVQXNmVSxxQkFBb0IsRUFLckI7VUEzZlQ7WUF5ZlkscUJBQW9CLEVBQ3JCO1FBMWZYO1VBOGZVLGVBQTBCLEVBSzNCO1VBbmdCVDtZQWlnQlksY0FBeUIsRUFDMUI7TUFJTDtRQXRnQk47VUF1Z0JRLHdCQUF1QixFQUUxQixFQUFBO0lBemdCTDtNQTRnQk0sYUFBWTtNQUNaLG1CQUFrQjtNQUNsQixhQUFZO01BQ1osWUFBVztNQUNYLDZCQUE0QixFQVc3QjtNQVRDO1FBbGhCTjtVQW1oQlEsY0FBYTtVQUNiLFlBQVc7VUFDWCx3QkFBdUIsRUFNMUIsRUFBQTtNQUhDO1FBeGhCTjtVQXloQlEsV0FBVSxFQUViLEVBQUE7SUFFRDtNQTdoQko7UUE4aEJNLG1CQUFrQjtRQUNsQixzQkFBcUI7UUFDckIsY0FBYSxFQVFoQixFQUFBO0lBTEM7TUFuaUJKO1FBb2lCTSxtQkFBa0I7UUFDbEIsc0JBQXFCO1FBQ3JCLGNBQWEsRUFFaEIsRUFBQTtFQUVEO0lBMWlCRjtNQTJpQkksY0FBYSxFQUVoQixFQUFBOztBQUVEO0VBRUksOEJBQTZCO0VBQzdCLGtCQUFpQjtFQUNqQixxQkFBb0I7RUFDcEIsaUNBQWdDLEVBY2pDO0VBbkJIO0lBUU0sZUFBYztJQUNkLGlCQUFnQixFQUtqQjtJQUhDO01BWE47UUFZUSxZQUFXLEVBRWQsRUFBQTtFQUVEO0lBaEJKO01BaUJNLGNBQWEsRUFFaEIsRUFBQTs7QUFuQkg7RUFzQkksbUJBQWtCO0VBQ2xCLG9CQUFtQjtFQUNuQixzQkFBcUI7RUFDckIsbUJBQWtCLEVBZ0huQjtFQXpJSDtJQTRCTSxtQkFBa0IsRUFDbkI7RUE3Qkw7SUFpQ00scUJBQWE7SUFBYixjQUFhLEVBS2Q7SUF0Q0w7TUFvQ1EsYUFBWSxFQUNiO0VBckNQO0lBeUNNLGtCQUFpQixFQUNsQjtFQTFDTDtJQTZDTSxnQkFBZTtJQUNmLG9CQUFtQjtJQUNuQix1QkFBc0I7SUFDdEIsZUFBYyxFQUNmO0VBakRMO0lBb0RNLGdCQUFlO0lBQ2YseUJBQXdCLEVBQ3pCO0VBdERMO0lBeURNLGdCQUFlO0lBQ2YsZUFBYztJQUNkLHNCQUFxQjtJQUNyQiwwQkFBeUI7SUFDekIsOEVuRjNtQmtGLEVtRmduQm5GO0lBbEVMO01BZ0VRLGlCQUFnQixFQUNqQjtFQWpFUDtJQXFFTSxnQkFBZTtJQUNmLG9CQUFtQjtJQUNuQixpQkFBZ0IsRUFDakI7RUF4RUw7SUEyRU0sZ0JBQWU7SUFDZixlQUFjO0lBQ2QsbUJBQWtCO0lBQ2xCLG9CQUFtQjtJQUNuQix3QkFBdUIsRUFDeEI7RUFoRkw7O0lBb0ZNLGVBQWM7SUFDZCxnQkFBZTtJQUNmLGtCQUFpQjtJQUNqQixvQkFBbUI7SUFDbkIsdUJBQXNCO0lBQ3RCLDZEbkYzb0I0RCxFbUZncEI3RDtJQTlGTDs7TUE0RlEsaUJBQWdCLEVBQ2pCO0VBN0ZQO0lBaUdNLGdCQUFlO0lBQ2YsaUJBQWdCO0lBQ2hCLGVBQWM7SUFDZCxlQUFjO0lBQ2Qsc0JBQXFCO0lBQ3JCLG1CQUFrQjtJQUNsQixpQkFBZ0I7SUFDaEIsdUJBQXNCO0lBQ3RCLGlCQUFnQjtJQUNoQiw2RG5GNXBCNEQ7SW1GNnBCNUQsbUJBQWtCO0lBQ2xCLHdCQUF1QixFQXFCeEI7SUFqSUw7TUErR1EsWUFBVyxFQUNaO0lBaEhQO01BcUhRLHNCQUFxQixFQUN0QjtJQXRIUDtNQXlIUSxZQUFXO01BQ1gsbUJBQWtCO01BQ2xCLGFBQVk7TUFDWixRQUFPO01BQ1AsU0FBUTtNQUNSLGlDQUFnQztNQUNoQyxtQkFBa0IsRUFDbkI7RUFHSDtJQW5JSjtNQXFJUSxZQUFXO01BQ1gsbUJBQWtCLEVBQ25CLEVBQUE7O0FBdklQO0VBNElJLHFCQUFvQixFQWlFckI7RUE3TUg7SUErSU0saUJBQWdCLEVBQ2pCO0VBaEpMO0lBbUpNLHFCQUFhO0lBQWIsY0FBYTtJQUNiLG9CQUFlO1FBQWYsZ0JBQWU7SUFDZixpQkFBZ0I7SUFDaEIsMEJBQTZCO1FBQTdCLDhCQUE2QjtJQUM3QixrQkFBaUI7SUFDakIsNkRuRjFzQjRELEVtRmd0QjdEO0lBOUpMO01BNEpRLGNBQWEsRUFDZDtFQTdKUDtJQWlLTSxpQkFBZ0IsRUEyQ2pCO0lBNU1MO01Bb0tRLGVBQWM7TUFDZCxpQkFBZ0I7TUFDaEIsa0JBQWlCO01BQ2pCLG1CQUFrQjtNQUNsQiwwQkFBeUI7TUFDekIsbUJBQWtCO01BQ2xCLGFBQVk7TUFDWixlQUFjO01BQ2Qsc0JBQXFCO01BQ3JCLHNCQUFxQjtNQUNyQixnQkFBZSxFQXNCaEI7TUFwTVA7UUFrTFUsa0VBQWlFO1FBQ2pFLHNCQUFxQjtRQUNyQixhQUFZO1FBQ1osWUFBVztRQUNYLFlBQVc7UUFDWCxtQkFBa0I7UUFDbEIsT0FBTTtRQUNOLHVCQUFzQixFQUN2QjtNQTFMVDtRQTZMVSxlbkZ0dUJhLEVtRnV1QmQ7TUFFRDtRQWhNUjtVQWlNVSxtQkFBa0I7VUFDbEIsb0JBQW1CLEVBRXRCLEVBQUE7SUFwTVA7TVIvZ0JJLHdCQUF1QixFQUN4QjtJQUVEO01BQ0UsV0FBVSxFQUNYO0lBT0M7TUFDRSxXQUFVLEVBQ1g7SUFNRDtNQUNFLDJCQUF1RCxFQUN4RDtJQUVEO01BQ0UsNkJBQWlFLEVBQ2xFO0lBTkQ7TUFDRSw4QkFBdUQsRUFDeEQ7SUFFRDtNQUNFLDhCQUFpRSxFQUNsRTtJQU5EO01BQ0UsOEJBQXVELEVBQ3hEO0lBRUQ7TUFDRSw4QkFBaUUsRUFDbEU7SUFORDtNQUNFLDhCQUF1RCxFQUN4RDtJQUVEO01BQ0UsOEJBQWlFLEVBQ2xFOztBUXFmTDtFQWdOSSxtQkFBa0I7RUFDbEIsc0JBQXFCO0VBQ3JCLGtCQUFpQixFQTJJbEI7RUE3Vkg7SUFxTk0sb0JBQW1CO0lSOXZCdkIscUJBQWE7SUFBYixjQUFhO0lBQ2IscUJBQXNCO1FBQXRCLHVCQUFzQjtJQUN0QixvQkFBZTtRQUFmLGdCQUFlO0lBQ2YsZ0JBQWUsRVFzeEJaO0lScHhCSDtNQUNFLGtCQUFpQjtNQUNqQixpQkFBZ0IsRUFDakI7SUFIRDtNUTh2Qk0sYUFBWTtNQUNaLFlBQVc7TUFDWCxzQkFBcUI7TUFDckIsc0JBQXFCO01BQ3JCLG1CQUFrQixFQWlCbkI7TUEvT1A7UUFpT1UscUVBQW9FLEVBQ3JFO01BbE9UO1FBcU9VLG1FQUFrRSxFQUNuRTtNQXRPVDtRQXlPVSxpRUFBZ0UsRUFDakU7TUExT1Q7UUE2T1Usd0VBQXVFLEVBQ3hFO0VBOU9UO0lBbVBNLG1CQUFrQjtJQUNsQixVQUFTO0lBQ1QsWUFBVztJQUNYLGNBQWEsRUE4Q2Q7SUFwU0w7TUEyUFUsaURBQXdDO2NBQXhDLHlDQUF3QyxFQUN6QztJQTVQVDtNQThQbUIsNkJBQW9CO2NBQXBCLHFCQUFvQixFQUFJO0lBOVAzQztNQWdRVSwrQ0FBc0M7Y0FBdEMsdUNBQXNDLEVBQ3ZDO0lBalFUOztNQXVRUSxtQkFBa0I7TUFDbEIsWUFBVztNQUNYLFdBQVU7TUFFViw0RUFBMkU7TUFDM0Usc0JBQXFCO01BQ3JCLFVBQVM7TUFDVCxZQUFXO01BQ1gsYUFBWTtNQUNaLGNBQWEsRUFDZDtJQWpSUDtNQW9SUSxtRUFBa0U7TUFDbEUsc0JBQXFCO01BQ3JCLGFBQVk7TUFDWixjQUFhO01BQ2IsU0FBUTtNQUNSLFdBQVUsRUFDWDtJQTFSUDtNQTZSUSxvRUFBbUU7TUFDbkUsc0JBQXFCO01BQ3JCLGNBQWE7TUFDYixjQUFhO01BQ2IsV0FBVTtNQUNWLGNBQWEsRUFDZDtFQUtIO0lBeFNKO01BeVNNLG1CQUFrQixFQW9EckI7TUE3Vkg7UUE0U1EsYUFBWSxFQUNiLEVBQUE7RUFHSDtJQWhUSjtNQWtUUSxtQ0FBdUI7Y0FBdkIsMkJBQXVCO01BQ3ZCLFdBQVUsRUFDWCxFQUFBO0VBR0g7SUF2VEo7TUF3VE0saUJBQWdCO01BQ2hCLHNCQUFxQixFQW9DeEI7TUE3Vkg7UUE0VFEsWUFBVztRQUNYLG1CQUFrQixFQUtuQjtRQWxVUDtVQWdVVSxzQkFBdUI7Y0FBdkIsd0JBQXVCLEVBQ3hCO01BalVUO1FBcVVRLHdCQUF1QjtRQUN2QixlQUFjO1FBQ2QsVUFBUyxFQW9CVjtRQTNWUDtVQTBVVSxVQUFTO1VBQ1QsWUFBVztVQUNYLGFBQVk7VUFDWixjQUFhLEVBQ2Q7UUE5VVQ7VUFpVlUsYUFBWTtVQUNaLGNBQWEsRUFDZDtRQW5WVDtVQXNWVSxhQUFZO1VBQ1osY0FBYTtVQUNiLFdBQVU7VUFDVixjQUFhLEVBQ2QsRUFBQTs7QUExVlQ7RUFnV0ksbUJBQWtCO0VBQ2xCLHNCQUFxQixFQXNFdEI7RUF2YUg7SUFvV00sbUJBQWtCLEVBQ25CO0VBcldMO0lBd1dNLG9CQUFtQjtJUmo1QnZCLHFCQUFhO0lBQWIsY0FBYTtJQUNiLHFCQUFzQjtRQUF0Qix1QkFBc0I7SUFDdEIsb0JBQWU7UUFBZixnQkFBZTtJQUNmLGdCQUFlLEVReTVCWjtJUnY1Qkg7TUFDRSxrQkFBaUI7TUFDakIsaUJBQWdCLEVBQ2pCO0lBSEQ7TVFpNUJNLG1CQUFrQixFQUNuQjtJQTlXUDtNQWlYUSxhQUFZLEVBQ2I7RUFsWFA7SUFzWE0sMEVBQXlFO0lBQ3pFLHNCQUFxQjtJQUNyQixjQUFhO0lBQ2IsY0FBYTtJQUNiLG1CQUFrQjtJQUNsQixVQUFTO0lBQ1QsYUFBWTtJQUNaLFdBQVUsRUFLWDtJQWxZTDtNQWdZUSw2Q0FBb0M7Y0FBcEMscUNBQW9DLEVBQ3JDO0VBR0g7SUFwWUo7TUFxWU0sa0JBQWlCLEVBa0NwQjtNQXZhSDtRQXdZUSxhQUFZLEVBQ2IsRUFBQTtFQUdIO0lBNVlKO01BOFlRLGFBQVk7TUFDWixXQUFVLEVBQ1gsRUFBQTtFQUdIO0lBblpKO01Bb1pNLG1CQUFrQjtNQUNsQixzQkFBcUIsRUFrQnhCO01BdmFIO1FBd1pRLFlBQVcsRUFDWjtNQXpaUDtRQTRaUSxzQkFBdUI7WUFBdkIsd0JBQXVCLEVBQ3hCO01BN1pQO1FBZ2FRLHdCQUF1QjtRQUN2QixhQUFZO1FBQ1osVUFBUztRQUNULGNBQWE7UUFDYixjQUFhLEVBQ2QsRUFBQTs7QUFyYVA7RUEwYUkscUJBQW9CO0VBQ3BCLHFCQUFvQjtFQUNwQixrQkFBaUI7RUFDakIsa0JBQWlCLEVBZ0NsQjtFQTdjSDtJQWdiTSxpQkFBZ0IsRUFDakI7RUFqYkw7SUFvYk0sdUVBQXNFO0lBQ3RFLHVCQUFzQjtJQUN0QixZQUFXO0lBQ1gsbUJBQWtCO0lBQ2xCLHNCQUFxQjtJQUNyQixpQkFBZ0IsRUFRakI7SUFqY0w7TUE0YlEsZUFBYztNQUNkLFdBQVU7TUFDVixtQkFBa0I7TUFDbEIsZ0RBQStDLEVBQ2hEO0VBR0g7SUFuY0o7TUFvY00sa0JBQWlCO01BQ2pCLGNBQWEsRUFRaEI7TUE3Y0g7UUF5Y1UsWUFBVyxFQUNaLEVBQUE7O0FBMWNUO0VBZ2RJLGtCQUFpQjtFQUNqQixvQkFBbUIsRUFvQ3BCO0VBcmZIO0lBb2RNLGlCQUFnQixFQUNqQjtFQXJkTDtJQXdkTSxtQkFBa0I7SUFDbEIsY0FBYTtJQUNiLGVBQWE7SUFDZCxpQkFBZ0I7SUFDaEIsV0FBVTtJQUNULG1CQUFrQjtJQUNsQixXQUFVO0lBQ1YseUNBQWdDO1lBQWhDLGlDQUFnQyxFQXFCakM7SUFwZkw7TUFrZVEsaUJBQWdCO01BQ2hCLG1CQUFrQixFQUNuQjtJQXBlUDtNQXVlUSxtQkFBa0I7TUFDcEIsYUFBWTtNQUNaLG1CQUFrQjtNQUNoQiwwQ0FBaUMsRUFTbEM7TUFuZlA7UUE2ZVUsWUFBVyxFQUNaO01BOWVUO1FBaWZVLFlBQVcsRUFDWjs7QUFsZlQ7RUF3ZkkscUJBQW9CLEVBZ0VyQjtFQXhqQkg7SVJ6aUJFLHFCQUFhO0lBQWIsY0FBYTtJQUNiLHFCQUFzQjtRQUF0Qix1QkFBc0I7SUFDdEIsb0JBQWU7UUFBZixnQkFBZTtJQUNmLGdCQUFlO0lRbWlDWCx1QkFBOEI7UUFBOUIsK0JBQThCO0lBQzlCLGlCQUFnQjtJQUNoQixvQkFBbUIsRUE0QnBCO0lSL2pDSDtNQUNFLGtCQUFpQjtNQUNqQixpQkFBZ0IsRUFDakI7SUFIRDtNUXNpQ00sa0JBQWlCO01BQ2pCLGlCQUFnQjtNQUNoQixtQkFBa0IsRUFzQm5CO01ScGpDSDtRQUNFLDJCQUF1RCxFQUN4RDtNQUZEO1FBQ0UsNkJBQXVELEVBQ3hEO01BRkQ7UUFDRSw2QkFBdUQsRUFDeEQ7TVF3aEJMO1FBNmdCVSxtRUFBa0U7UUFDbEUsc0JBQXFCO1FBQ3JCLG1CQUFrQjtRQUNsQixPQUFNO1FBQ04sUUFBTztRQUNQLGFBQVk7UUFDWixZQUFXO1FBQ1gsWUFBVyxFQUNaO01BcmhCVDtRQXdoQlUsdUJBQXNCLEVBQ3ZCO0VBSUw7SVJqa0NGO01RbWtDTSxpQkFBZ0IsRUFDakIsRUFBQTtFQUdIO0lSdmtDRjtNUXlrQ00saUJBQWdCLEVBQ2pCLEVBQUE7RUFHSDtJQXppQko7TUEwaUJNLG1CQUFrQixFQWNyQjtNQXhqQkg7UUE2aUJRLDBCQUE2QjtZQUE3Qiw4QkFBNkIsRUFTOUI7UVIxbENMO1VRb2xDUSxnQkFBZSxFQUtoQjtVQXJqQlQ7WUFtakJZLHVCQUFzQixFQUN2QixFQUFBOztBQXBqQlg7RUEyakJJLHFCQUFhO0VBQWIsY0FBYTtFQUNiLGtCQUFpQjtFQUNqQixxQkFBb0I7RUFDcEIsaUJBQWdCO0VBQ2hCLDhCQUE2QixFQXdFOUI7RUF2b0JIO0lBa2tCTSxtQkFBa0IsRUFZbkI7SUE5a0JMO01BcWtCUSxnRkFBK0U7TUFDL0Usc0JBQXFCO01BQ3JCLGFBQVk7TUFDWixjQUFhO01BQ2IsWUFBVztNQUNYLG1CQUFrQjtNQUNsQixjQUFhO01BQ2IsV0FBVSxFQUNYO0VBN2tCUDtJQWlsQk0saUJBQWdCO0lBQ2hCLG1CQUFrQjtJQUNsQixrQkFBaUIsRUFDbEI7RUFwbEJMO0lBdWxCTSxnQkFBZTtJQUNmLG9CQUFtQjtJQUNuQixlQUFjLEVBQ2Y7RUExbEJMO0lBNmxCTSxnQkFBZTtJQUNmLGlCQUFnQjtJQUNoQixtQkFBa0I7SUFDbEIsdUJBQXNCO0lBQ3RCLGVBQWMsRUFDZjtFQWxtQkw7SUFxbUJNLHdCQUF1QjtJQUN2QixnQkFBZTtJQUNmLDBCQUF5QixFQUMxQjtFQUVEO0lBMW1CSjtNQTRtQlEsUUFBTyxFQUNSO0lBN21CUDtNQWduQlEsaUJBQWdCLEVBQ2pCLEVBQUE7RUFHSDtJQXBuQko7TUFzbkJRLGVBQWM7TUFDZCxnQkFBZSxFQUNoQjtJQXhuQlA7TUEybkJRLGFBQVk7TUFDWixjQUFhO01BQ2IsU0FBUTtNQUNSLFdBQVUsRUFDWCxFQUFBO0VBR0g7SUFsb0JKO01Bb29CUSxjQUFhLEVBQ2QsRUFBQTs7QUFyb0JQO0VBMG9CSSxtQkFBa0I7RUFDbEIsc0JBQXFCLEVBOEd0QjtFQXp2Qkg7SUE4b0JNLGlCQUFnQjtJQUNoQixlQUFjLEVBTWY7SUFycEJMO01Ba3BCUSxrQkFBaUI7TUFDakIsaUJBQWdCLEVBQ2pCO0VBcHBCUDtJUnppQkUscUJBQWE7SUFBYixjQUFhO0lBQ2IscUJBQXNCO1FBQXRCLHVCQUFzQjtJQUN0QixvQkFBZTtRQUFmLGdCQUFlO0lBQ2YsZ0JBQWU7SVFnc0NYLHVCQUE4QjtRQUE5QiwrQkFBOEI7SUFDOUIsaUJBQWdCLEVBOERqQjtJUjd2Q0g7TUFDRSxrQkFBaUI7TUFDakIsaUJBQWdCLEVBQ2pCO0lBSEQ7TVFrc0NNLG9CQUFlO1VBQWYsZ0JBQWU7TUFDZixnQkFBZTtNQUNmLG9CQUFtQixFQUNwQjtJQWpxQlA7TUFvcUJRLGlCQUFnQjtNQUNoQixtQkFBa0I7TUFDbEIsZUFBYztNQUNkLG1CQUFrQjtNQUNsQix5QkFBd0I7TUFDeEIsNkVBRTZCO01BQzdCLDZEQUdnQixFQVFqQjtNQXZyQlA7UUFrckJVLG9DQUEyQjtnQkFBM0IsNEJBQTJCO1FBQzNCLDZFQUU2QixFQUM5QjtJQXRyQlQ7TUEwckJRLG1CQUFrQjtNQUNsQixPQUFNO01BQ04sUUFBTztNQUNQLFNBQVE7TUFDUixZQUFXO01BQ1gsZUFBYztNQUNkLDZCQUE0QjtNQUM1Qiw0QkFBMkIsRUFDNUI7SUFsc0JQO01BcXNCUSxpQkFBZ0I7TUFDaEIsZUFBYyxFQUNmO0lBdnNCUDtNQTBzQlEsZ0JBQWU7TUFDZix1QkFBc0IsRUFDdkI7SUE1c0JQO01BK3NCUSxnQkFBZTtNQUNmLGtCQUFpQjtNQUNqQixpQkFBZ0I7TUFDaEIsaUJBQWdCO01BQ2hCLHNCQUFxQixFQUt0QjtNQXh0QlA7UUFzdEJVLGNBQWEsRUFDZDtFQXZ0QlQ7SUE0dEJNLGFBQVk7SUFDWixlQUFjO0lBQ2QsdUJBQXNCLEVBQ3ZCO0VBL3RCTDtJQWt1Qk0sZUFBYyxFQUNmO0VBRUQ7SVJ6d0NGO01RMndDTSxvQkFBZTtVQUFmLGdCQUFlLEVBQ2hCLEVBQUE7RUFHSDtJQTN1Qko7TUE4dUJRLDBCQUE2QjtVQUE3Qiw4QkFBNkIsRUFLOUI7TVJ2eENMO1FRcXhDUSxvQkFBZTtZQUFmLGdCQUFlLEVBQ2hCO0lBbHZCVDtNQXN2QlEsWUFBVyxFQUNaLEVBQUE7O0FBdnZCUDtFQTR2Qkksd0RBQXVEO0VBQ3ZELG1CQUFrQjtFQUNsQixzQkFBcUI7RUFDckIsYUFBWTtFQUNaLG1CQUFrQixFQTZDbkI7RUE3eUJIO0lBbXdCTSxnQkFBZTtJQUNmLGlCQUFnQixFQUNqQjtFQXJ3Qkw7SUF3d0JNLGlCQUFnQjtJQUNoQixhQUFZO0lBQ1osZ0JBQWU7SUFDZixrQkFBaUIsRUFDbEI7RUE1d0JMO0lBK3dCTSxpQkFBZ0IsRUFDakI7RUFoeEJMO0lBbXhCTSwwQkFBeUI7SUFDekIsaUJBQWdCO0lBQ2hCLGdCQUFlO0lBQ2Ysd0JBQXVCO0lBQ3ZCLHVCQUFzQjtJQUN0QixvQkFBbUIsRUFvQnBCO0lBNXlCTDtNQTJ4QlEscUJBQW9CO01BQ3BCLHNCQUFxQjtNQUNyQixZQUFXO01BQ1gsYUFBWSxFQUNiO0lBL3hCUDtNQWt5QlEsb0JBQW1CLEVBS3BCO01BdnlCUDtRQXF5QlUsb0JBQStCLEVBQ2hDO0lBdHlCVDtNQTB5QlEsaUJBQWdCLEVBQ2pCOztBQzcxQ1A7RUFFSSxzRXBGR3dFO0VvRkZ4RSxpQkFBZ0IsRUFnRWpCO0VBbkVIOzs7O0lBU00sNkRwRlQ0RCxFb0ZVN0Q7RUFWTDtJQWFNLG1CQUFrQjtJQUNsQixtQkFBa0I7SUFDbEIsaUJBQWdCO0lBQ2hCLGdCQUFlO0lBQ2YsaUJBQWdCO0lBQ2hCLHVCQUFzQjtJQUN0QixrQkFBaUIsRUFvQmxCO0lBdkNMO01Bc0JRLGdFQUErRDtNQUMvRCxzQkFBcUI7TUFDckIsWUFBVztNQUNYLGFBQVk7TUFDWixZQUFXO01BQ1gsbUJBQWtCO01BQ2xCLE9BQU0sRUFDUDtJQTdCUDtNQWdDUSxpQkFBZ0I7TUFDaEIsZ0JBQWU7TUFDZixpQkFBZ0I7TUFDaEIsb0JBQW1CO01BQ25CLHVCQUFzQjtNQUN0QixvQkFBbUIsRUFDcEI7RUF0Q1A7SUEwQ00sZ0JBQWU7SUFDZixlQUFjO0lBQ2Qsc0JBQXFCO0lBQ3JCLG9CQUFtQixFQUNwQjtFQTlDTDs7SUFrRE0saUJBQWdCLEVBQ2pCO0VBbkRMO0lBc0RNLGdCQUFlO0lBQ2YsaUJBQWdCO0lBQ2hCLG9CQUFtQixFQUNwQjtFQXpETDtJQTRETSxvQkFBbUIsRUFDcEI7RUE3REw7SUFnRU0sZ0JBQWU7SUFDZixpQkFBZ0IsRUFDakI7O0FDbEVMO0VBR1EsYUFBVztFQUNYLDRCQUEwQixFQUM3Qjs7QUFMTDtFQVFRLG1CQUFpQixFQUNwQjs7QUFUTDtFQVlRLGlCQUFlO0VBQ2Ysa0JBQWdCLEVBQ25COztBQ2RMO0VBRUksbUJBQWtCO0VBQ2xCLG1CQUFrQjtFQUNsQixrQkFBaUI7RUFDakIsaUJBQWdCO0VBQ2hCLHNCQUFxQjtFQUNyQixxRkFBb0Y7RUFDcEYsd0JBQXVCLEVBK0Z4QjtFQTdGQztJQVZKO01BV00sdUJBQXNCO01BQ3RCLHNCQUNGLEVBMEZELEVBQUE7RUF2R0g7SUFnQk0scUJBQWE7SUFBYixjQUFhO0lBQ2IsdUJBQThCO1FBQTlCLCtCQUE4QixFQUkvQjtJQUhDO01BbEJOO1FBbUJRLDJCQUFzQjtZQUF0Qix1QkFBc0IsRUFFekIsRUFBQTtFQXJCTDs7SUF3Qk0sWUFBVztJQUNYLGNBQWEsRUFDZDtFQTFCTDtJQTZCTSxrQkFBaUI7SUFDakIsZ0JBQWU7SUFDZixtQkFBa0I7SUFDbEIsaUJBQWdCLEVBeUJqQjtJQXpETDtNQW1DUSxzRUFBcUU7TUFDckUsc0JBQXFCO01BQ3JCLGFBQVk7TUFDWixZQUFXO01BQ1gsbUJBQWtCO01BQ2xCLE9BQU07TUFDTixRQUFPO01BQ1AsWUFBVyxFQUNaO0lBM0NQO01BOENRLHVCQUFzQjtNQUN0QixpQkFBZ0I7TUFDaEIsZ0JBQWU7TUFDZixpQkFBZ0IsRUFDakI7SUFsRFA7TUFxRFEsZ0JBQWU7TUFDZixzQkFBcUI7TUFDckIsaUJBQWdCLEVBQ2pCO0VBeERQO0lBNERNLGtCQUFpQixFQTBCbEI7SUF0Rkw7TUErRFEsZ0JBQWU7TUFDZixpQkFBZ0IsRUFjakI7TUE5RVA7UUFtRVUsb0JBQW1CO1FBQ25CLGtCQUFpQjtRQUNqQix3QkFBdUIsRUFFeEI7TUF2RVQ7UUEwRVUsZUFBYztRQUNkLHdCQUF1QjtRQUN2QixrQkFBaUIsRUFDbEI7SUFLSDtNQWxGTjtRQW1GUSxpQkFBZ0I7UUFDaEIsb0JBQW1CLEVBRXRCLEVBQUE7RUFFRDtJQXhGSjtNQTBGUSxVQUFTO01BQ1QscUNBQTRCO2NBQTVCLDZCQUE0QixFQUM3QjtJQTVGUDs7TUErRlEsbUJBQWtCLEVBQ25CO0lBaEdQOztNQW1HUSxrQkFBaUI7TUFDakIsbUJBQWtCLEVBQ25CLEVBQUE7O0FBckdQO0VBMEdJLG9CQUFtQixFQStGcEI7RUF6TUg7SUE2R00sbUJBQWtCO0lBQ2xCLHFCQUFvQixFQUNyQjtFQS9HTDtJQWtITSxrQkFBaUI7SUFDakIsd0JBQXVCO0lBQ3ZCLHFCQUFvQixFQU1yQjtJQUpDO01BdEhOO1FBdUhRLFlBQVc7UUFDWCxtQkFBa0IsRUFFckIsRUFBQTtFQTFITDtJQTZITSxrQkFBaUI7SUFDakIsb0JBQW1CLEVBQ3BCO0VBL0hMO0lBa0lNLGdCQUFlO0lBQ2Ysd0JBQXVCLEVBS3hCO0lBeElMO01Bc0lRLGVBQWMsRUFDZjtFQXZJUDtJQTJJTSxXQUFVO0lBQ1Ysd0JBQXVCLEVBZ0J4QjtJQWRDO01BOUlOO1FBK0lRLGVBQWM7UUFDZCxtQkFBa0I7UUFDbEIsWUFBVyxFQVdkLEVBQUE7SUE1Skw7TUFxSlEsZ0JBQWU7TUFDZixpQkFBZ0I7TUFDaEIsd0JBQXVCO01BQ3ZCLG1CQUFrQjtNQUNsQixvQkFBbUI7TUFDbkIsZUFBYyxFQUNmO0VBM0pQO0lBK0pNLG9CQUFlO1FBQWYsZ0JBQWU7SUFDZixtQkFBa0IsRUFnQm5CO0lBZEM7TUFsS047UUFtS1EsK0JBQWlCO1lBQWpCLGtCQUFpQjtRQUNqQixXQUNGLEVBV0QsRUFBQTtJQWhMTDtNQXdLUSw4REFBNkQ7TUFDN0Qsc0JBQXFCLEVBQ3RCO0lBMUtQO01BNEt1Qix5QkFBd0IsRUFBSTtJQTVLbkQ7TUE2SzRCLDZCQUE0QixFQUFJO0lBN0s1RDtNQThLd0IsNkJBQTRCLEVBQUk7SUE5S3hEO01BK0s0Qiw4QkFBNkIsRUFBSTtFQS9LN0Q7SUFtTE0sc0VBQXFFO0lBQ3JFLHVCQUFzQjtJQUN0QixhQUFZO0lBQ1osY0FBYTtJQUNiLG1CQUFrQjtJQUNsQixVQUFTO0lBQ1QsU0FBUTtJQUNSLFVBQVM7SUFDVCxXQUFVO0lBQ1Ysd0JBQXVCLEVBWXhCO0lBVkM7TUE5TE47UUErTFEsY0FBYSxFQVNoQixFQUFBO0lBUEM7TUFqTU47UUFrTVEsY0FBYSxFQU1oQixFQUFBO0lBeE1MO01Bc01RLFdBQVUsRUFDWDs7QUF2TVA7RUErTVEsbUJBQWtCLEVBZ0JuQjtFQS9OUDtJQWtOVSxzRUFBcUU7SUFDckUsc0JBQXFCO0lBQ3JCLGFBQVk7SUFDWixZQUFXO0lBQ1gsbUJBQWtCO0lBQ2xCLE9BQU07SUFDTixRQUFPO0lBQ1AsWUFBVyxFQUtaO0lBSEM7TUEzTlY7UUE0TlksdUJBQXNCLEVBRXpCLEVBQUE7O0FBR0g7RUFqT047SUFtT1UsY0FBYSxFQUNkLEVBQUE7O0FBcE9UO0VBME9JLGdFQUErRDtFQUMvRCxpQkFBZ0IsRUFvSWpCO0VBL1dIO0lBOE9NLG1CQUFrQjtJQUNsQixzQkFBcUIsRUFNdEI7SUFKQztNQWpQTjtRQWtQUSxZQUFXO1FBQ1gsbUJBQWtCLEVBRXJCLEVBQUE7RUFyUEw7SUF3UE0sa0JBQWlCO0lBQ2pCLG9CQUFtQjtJQUNuQixnQkFBZTtJQUNmLGlCQUFnQjtJQUNoQix3QkFBdUI7SUFDdkIsa0JBQWlCLEVBS2xCO0lBbFFMO01BZ1FRLGFBQVksRUFDYjtFQWpRUDtJQXFRTSxnQkFBZTtJQUNmLHdCQUF1QjtJQUN2QixhQUFZLEVBQ2I7RUF4UUw7SUEyUU0sbUJBQWtCO0lBQ2xCLFNBQVE7SUFDUixXQUFVLEVBaUdYO0lBOVdMOztNQWlSUSxtQkFBa0I7TUFDbEIsYUFBWTtNQUNaLGNBQWE7TUFDYixVQUFTO01BQ1QsU0FBUSxFQTJCVDtNQWhUUDs7UUF3UlUsMEJBQXlCO1FBQ3pCLFdBQVU7UUFDVixtQkFBa0I7UUFDbEIsT0FBTTtRQUNOLFNBQVE7UUFDUixhQUFZO1FBQ1osY0FBYTtRQUNiLFlBQVcsRUFDWjtNQWhTVDs7UUFtU1UsMEJBQXlCO1FBQ3pCLG1CQUFrQjtRQUNsQixVQUFTO1FBQ1QsNENBQW1DO2dCQUFuQyxvQ0FBbUMsRUFTcEM7UUEvU1Q7O1VBeVNZLG9DQUEyQjtrQkFBM0IsNEJBQTJCLEVBQzVCO1FBMVNYOztVQTZTWSxvQ0FBMkI7a0JBQTNCLDRCQUEyQixFQUM1QjtJQTlTWDtNQW1UUSxhQUFZO01BQ1osV0FBVSxFQTRCWDtNQTFCQztRQXRUUjtVQXVUVSxhQUFZLEVBeUJmLEVBQUE7TUFoVlA7UUEyVFUsbUVBQWtFO1FBQ2xFLHVCQUFzQixFQUN2QjtNQTdUVDtRQWdVVSxxRUFBb0U7UUFDcEUsdUJBQXNCO1FBQ3RCLGFBQVk7UUFDWixjQUFhO1FBQ2IsWUFBVyxFQVdaO1FBL1VUO1VBdVVZLHFFQUFvRTtVQUNwRSx1QkFBc0IsRUFDdkI7UUF6VVg7VUE0VVkscUVBQW9FO1VBQ3BFLHVCQUFzQixFQUN2QjtJQTlVWDtNQW9WVSxTQUFRO01BQ1Isb0VBQW1FO01BQ25FLHVCQUFzQixFQUN2QjtJQXZWVDtNQTBWVSxzRUFBcUU7TUFDckUsdUJBQXNCO01BQ3RCLGFBQVk7TUFDWixjQUFhO01BQ2IsWUFBVztNQUNYLDhCQUFxQjtjQUFyQixzQkFBcUIsRUFhdEI7TUE1V1Q7UUFrV1ksc0VBQXFFO1FBQ3JFLHVCQUFzQjtRQUN0Qiw4QkFBcUI7Z0JBQXJCLHNCQUFxQixFQUN0QjtNQXJXWDtRQXdXWSxzRUFBcUU7UUFDckUsdUJBQXNCO1FBQ3RCLDhCQUFxQjtnQkFBckIsc0JBQXFCLEVBQ3RCOztBQTNXWDtFQW1YTSx5QkFBd0I7RUFDeEIsbUJBQWtCO0VBQ2xCLG9CQUFtQjtFQUNuQixzQkFBcUIsRUFXdEI7RUFUQztJQXhYTjtNQXlYUSxXQUFVLEVBUWIsRUFBQTtFQUxDO0lBNVhOO01BNlhRLFlBQVc7TUFDWCxtQkFBa0I7TUFDbEIsaUJBQWdCLEVBRW5CLEVBQUE7O0FBallMO0VBb1lNLGtCQUFpQjtFQUNqQixnQkFBZTtFQUNmLHdCQUF1QjtFQUV2QixvQkFBbUI7RUFDbkIsZ0JBQWU7RUFDZixpQkFBZ0I7RUFDaEIsd0JBQXVCO0VBQ3ZCLGtCQUFpQixFQUtsQjtFQWpaTDtJQStZUSw2QkFBNEIsRUFDN0I7O0FBaFpQO0VBb1pNLGdCQUFlO0VBQ2Ysd0JBQXVCLEVBQ3hCOztBQXRaTDtFQXlaTSwwRUFBeUU7RUFDekUsdUJBQXNCO0VBQ3RCLGFBQVk7RUFFWixtQkFBa0I7RUFDbEIsVUFBUztFQUNULFFBQU87RUFDUCxPQUFNO0VBQ04sV0FBVTtFQUNWLHdCQUF1QixFQVV4QjtFQVJDO0lBcGFOO01BcWFRLHNCQUFxQjtNQUNyQixXQUFVLEVBTWIsRUFBQTtFQTVhTDtJQTBhUSxXQUFVLEVBQ1g7O0FBM2FQO0VBZ2JJLG9CQUFtQixFQXdEcEI7RUF4ZUg7SUFtYk0sbUJBQWtCO0lBQ2xCLHNCQUFxQixFQVV0QjtJQVJDO01BdGJOO1FBdWJRLFdBQVUsRUFPYixFQUFBO0lBSkM7TUExYk47UUEyYlEsWUFBVztRQUNYLG1CQUFrQixFQUVyQixFQUFBO0VBOWJMO0lBaWNNLGtCQUFpQjtJQUNqQixvQkFBbUI7SUFDbkIsZ0JBQWU7SUFDZixpQkFBZ0I7SUFDaEIsd0JBQXVCO0lBQ3ZCLGtCQUFpQixFQUtsQjtJQTNjTDtNQXljUSw4QkFBNkIsRUFDOUI7RUExY1A7SUE4Y00sZ0JBQWU7SUFDZix3QkFBdUIsRUFDeEI7RUFoZEw7SUFtZE0sNkVBQTRFO0lBQzVFLHVCQUFzQjtJQUN0QixhQUFZO0lBQ1osY0FBYTtJQUNiLG1CQUFrQjtJQUNsQixVQUFTO0lBQ1QsU0FBUTtJQUNSLFVBQVM7SUFDVCxXQUFVO0lBQ1Ysd0JBQXVCLEVBV3hCO0lBVEM7TUE5ZE47UUErZFEsc0JBQXFCO1FBQ3JCLCtCQUE4QjtRQUM5QixXQUFVLEVBTWIsRUFBQTtJQXZlTDtNQXFlUSxXQUFVLEVBQ1g7O0FBdGVQO0VBMmVJLG9CQUFtQixFQXlCcEI7RUFwZ0JIO0lBOGVNLGVBQWMsRUFDZjtFQS9lTDtJQWtmTSxlQUFjLEVBQ2Y7RUFuZkw7SUFzZk0sd0JBQXVCO0lBQ3ZCLGdCQUFlO0lBQ2YsdUJBQXNCO0lBQ3RCLGlCQUFnQixFQVVqQjtJQW5nQkw7TUE0ZlEsZUFBYyxFQUNmO0lBN2ZQO01BZ2dCUSxvQkFBbUI7TUFDbkIsa0JBQWlCLEVBQ2xCOztBQ2pnQlA7RUFDRSw2REFBNEQ7RUFDNUQsbUJBQWtCLEVBNlJuQjtFQS9SRDtJQUtJLG1CQUFrQixFQXFCbkI7SUExQkg7TUFRTSx1QkFBc0I7TUFDdEIsaUJBQWdCO01BQ2hCLGdCQUFlLEVBQ2hCO0lBWEw7TUFjTSxnQkFBZTtNQUNmLGlCQUFnQjtNQUNoQixpQkFBZ0I7TUFDaEIsc0JBQXFCO01BQ3JCLHVCQUFzQjtNQUN0QixtQkFBa0I7TUFDbEIsZUFBYyxFQUNmO0lBckJMO01Bd0JNLG1CQUFrQixFQUNuQjtFQXpCTDtJQThCTSxtQkFBa0I7SUFDbEIsbUJBQWtCO0lBQ2xCLGlCQUFnQjtJQUNoQixvQkFBbUIsRUFzQnBCO0lBdkRMO01Bb0NRLGdCQUFlO01BQ2YsaUJBQWdCO01BQ2hCLHVCQUFzQjtNQUN0QixlQUFjLEVBQ2Y7SUF4Q1A7TUEyQ1EsZ0JBQWU7TUFDZixlQUFjO01BQ2QsaUJBQWdCO01BQ2hCLHdCQUF1QjtNQUN2QixtQkFBa0I7TUFDbEIsaUJBQWdCLEVBQ2pCO0lBakRQO01Bb0RRLGVBQWM7TUFDZCxpQkFBZ0IsRUFDakI7RUF0RFA7SUEyREksbUJBQWtCO0lBQ2xCLHFCQUFhO0lBQWIsY0FBYTtJQUNiLHVCQUE4QjtRQUE5QiwrQkFBOEI7SUFDOUIsb0JBQWU7UUFBZixnQkFBZSxFQStDaEI7SUE3R0g7TUFpRU0saUJBQWdCO01BQ2hCLGtCQUFpQjtNQUNqQixtQkFBa0IsRUF5Q25CO01BNUdMO1FBc0VRLDBCQUF5QjtRQUN6QixzQkFBcUI7UUFDckIsYUFBWTtRQUNaLFlBQVc7UUFDWCxZQUFXO1FBQ1gsZUFBYztRQUNkLG1CQUFrQjtRQUNsQixPQUFNLEVBQ1A7TUE5RVA7UUFpRlEsdUJBQXNCO1FBQ3RCLHNCQUFxQjtRQUNyQixnQkFBZTtRQUNmLHFCQUFvQjtRQUNwQix1QkFBc0I7UUFDdEIsZ0JBQWU7UUFDZixvQkFBbUIsRUFDcEI7TUF4RlA7UUEyRlEsZ0JBQWU7UUFDZixpQkFBZ0I7UUFDaEIsd0JBQXVCO1FBQ3ZCLG1CQUFrQjtRQUNsQixvQkFBbUI7UUFDbkIsZUFBYyxFQUNmO01BRUQ7UUFuR047VUFvR1EsZUFBYztVQUNkLDhCQUFnQjtjQUFoQixpQkFBZ0I7VUFDaEIsbUJBQWtCLEVBTXJCO1VBNUdMO1lBeUdVLHVCQUFzQixFQUN2QixFQUFBO0VBMUdUOzs7SUFrSGlCLG1CQUFrQixFQUFJO0VBbEh2Qzs7O0lBcUhNLG1CQUFrQjtJQUNsQixzQkFBcUI7SUFDckIseUJBQXdCO0lBQ3hCLG1CQUFrQixFQTJDbkI7SUF6Q0M7TUExSE47OztRQTJIUSx3QkFBdUIsRUF3QzFCLEVBQUE7SUFuS0w7OztNQStIUSwwQkFBeUI7TUFDekIsc0JBQXFCO01BQ3JCLGFBQVk7TUFDWixZQUFXO01BQ1gsWUFBVztNQUNYLG1CQUFrQjtNQUNsQixXQUFVO01BQ1YsZUFBYyxFQUNmO0lBdklQOzs7TUEwSVEsWUFBVztNQUNYLFlBQVc7TUFDWCxlQUFjLEVBQ2Y7SUE3SVA7OztNQWdKUSxvQkFBbUI7TUFDbkIsZ0JBQWU7TUFDZixpQkFBZ0I7TUFDaEIsd0JBQXVCO01BQ3ZCLGtCQUFpQixFQUNsQjtJQXJKUDs7O01Bd0pRLGdCQUFlO01BQ2YsaUJBQWdCO01BQ2hCLHdCQUF1QjtNQUN2QixtQkFBa0I7TUFDbEIsb0JBQW1CO01BQ25CLGVBQWMsRUFLZjtNQWxLUDs7O1FBZ0tVLGlCQUFnQixFQUNqQjtFQWpLVDs7O0lBc0tNLDRCQUEyQjtJQUMzQixzQkFBcUI7SUFDckIsYUFBWTtJQUNaLG1CQUFrQjtJQUNsQixTQUFRO0lBQ1IsVUFBUztJQUNULE9BQU07SUFDTixXQUFVLEVBZVg7SUE1TEw7OztNQWdMUSwyQkFBa0I7Y0FBbEIsbUJBQWtCO01BQ2xCLG9DQUFtQyxFQU1wQztNQXZMUDs7O1FBb0xVLFdBQVU7UUFDVix3QkFBZTtnQkFBZixnQkFBZSxFQUNoQjtJQUdIO01BekxOOzs7UUEwTFEsWUFBVyxFQUVkLEVBQUE7RUE1TEw7SUFpTU0sYUFBWSxFQUNiO0VBbE1MO0lBcU1NLFlBQVc7SUFDWCxRQUFPLEVBS1I7SUFIQztNQXhNTjtRQXlNUSxXQUFVLEVBRWIsRUFBQTtFQTNNTDtJQWdOTSxxQkFBYTtJQUFiLGNBQWE7SUFDYixZQUFXO0lBQ1gsdUJBQThCO1FBQTlCLCtCQUE4QixFQU0vQjtJQXhOTDtNQXNOUSxjQUFhLEVBQ2Q7RUF2TlA7SUE0TkksMEJBQXlCO0lBQ3pCLHVCQUFzQixFQWlFdkI7SUE5Ukg7TUFnT00scUJBQWE7TUFBYixjQUFhO01BQ2IsbUJBQWtCO01BQ2xCLHNCQUFxQjtNQUNyQixvQkFBZTtVQUFmLGdCQUFlO01BQ2YsdUJBQW1CO1VBQW5CLG9CQUFtQixFQVVwQjtNQTlPTDtRQXdPUSxjQUFhLEVBQ2Q7TUFFRDtRQTNPTjtVQTRPUSxtQkFBa0IsRUFFckIsRUFBQTtJQTlPTDs7TUFrUE0sc0JBQXFCLEVBQ3RCO0lBblBMO01Bc1BNLHFCQUFZO1VBQVosYUFBWSxFQUNiO0lBdlBMO01BMFBNLGFBQVk7TUFDWixnQkFBZTtNQUNmLHVCQUFzQjtNQUN0QixpQkFBZ0I7TUFDaEIsbUJBQWtCO01BQ2xCLGlCQUFnQixFQUNqQjtJQWhRTDtNQW1RTSxnQkFBZTtNQUNmLGlCQUFnQjtNQUNoQix1QkFBc0I7TUFDdEIsZUFBYyxFQUNmO0lBdlFMO01BMlFRLHdCQUF1QjtNQUN2QixnQkFBZTtNQUNmLGlCQUFnQixFQVlqQjtNQXpSUDtRQWdSVSxtQkFBa0IsRUFDbkI7TUFHRDtRQXBSUjtVQXFSVSxtQkFBa0I7VUFDbEIsZUFBYztVQUNkLGtCQUFpQixFQUVwQixFQUFBO0lBQ0Q7TUExUk47UUEyUlEsWUFBVyxFQUVkLEVBQUE7O0FDOVJMO0VBRUksbUJBQWtCO0VBQ2xCLG1CQUFrQjtFQUNsQixvQkFBbUI7RUFDbkIsZ0VBQStEO0VBQy9ELG1CQUFrQixFQTREbkI7RUFsRUg7SUFTTSxrQkFBaUI7SUFDakIsc0JBQXFCO0lBQ3JCLG1CQUFrQixFQVluQjtJQXZCTDtNQWNRLHVFQUFzRTtNQUN0RSxzQkFBcUI7TUFDckIsWUFBVztNQUNYLGFBQVk7TUFDWixZQUFXO01BQ1gsbUJBQWtCO01BQ2xCLE9BQU07TUFDTix1QkFBc0IsRUFDdkI7RUF0QlA7SUEwQk0sYUFBWTtJQUNaLHVCQUFzQjtJQUN0QixpQkFBZ0I7SUFDaEIsZ0JBQWU7SUFDZixpQkFBZ0I7SUFDaEIsa0JBQWlCO0lBQ2pCLG1CQUFrQixFQUNuQjtFQWpDTDtJQW9DTSxlQUFjO0lBQ2QsaUJBQWdCO0lBQ2hCLG9CQUFtQixFQU1wQjtJQTVDTDtNQXlDUSxhQUFZO01BQ1osaUJBQWdCLEVBQ2pCO0VBM0NQO0lBK0NNLGlCQUFnQixFQWtCakI7SUFqRUw7TUFrRFEsZ0JBQWU7TUFDZixpQkFBZ0IsRUFhakI7TUFoRVA7UUFzRFUsb0JBQW1CO1FBQ25CLHdCQUF1QjtRQUN2QixrQkFBaUIsRUFDbEI7TUF6RFQ7UUE0RFUsZUFBYztRQUNkLG9CQUFtQjtRQUNuQix3QkFBdUIsRUFDeEI7O0FBL0RUO0VBdUVJLGNBQWE7RUFDYixhQUFZO0VBQ1osbUJBQWtCO0VBQ2xCLGFBQVk7RUFFWix3QkFBdUI7RUFDdkIsaUJBQWdCLEVBMEVqQjtFQXZKSDtJQWtGTSw4QkFBNkI7SUFDN0IsMGRBb0JDO0lBQ0QsYUFBVztJQUNYLDJCQUF5QjtJQUV6QixnRUFBdUQ7WUFBdkQsd0RBQXVELEVBQ3hEO0VBNUdMOztJQWdITSw4REFBNEQ7SUFDNUQsbUJBQWtCO0lBQ2xCLE9BQU07SUFDTixTQUFRO0lBQ1IsVUFBUztJQUNULFFBQU87SUFDUCxXQUFVO0lBQ1YsZ0VBQXVEO1lBQXZELHdEQUF1RCxFQUN4RDtFQXhITDtJQTJITSxZQUFXO0lBQ1gsZ0VBQXVEO1lBQXZELHdEQUF1RCxFQUN4RDtFQTdITDtJQWdJTSxZQUFXO0lBQ1gsYUFBWTtJQUNaLG1CQUFrQjtJQUNsQixPQUFNLEVBQ1A7RUFwSUw7SUF1SU0sa0JBQWdCO0lBQ2hCLCtCQUF5QjtJQUN6QixzQkFBb0IsRUFDckI7RUExSUw7SUE2SU0sa0JBQWdCO0lBQ2hCLCtCQUF5QjtJQUN6QixzQkFBb0IsRUFDckI7RUFoSkw7SUFtSk0sa0JBQWdCO0lBQ2hCLGdCQUE2QjtJQUM3QixzQkFBb0IsRUFDckI7O0FBdEpMO0VBMkpNLGtCQUFpQixFQUNsQjs7QUE1Skw7RUErSk0saUJBQWUsRUFtQmhCO0VBbExMO0lBa0tRLDBCQUF5QjtJQUN6QixleEZ4SmU7SXdGeUpmLGlCQUFnQjtJQUNoQixzQkFBcUI7SUFDckIsZ0JBQWUsRUFDaEI7RUF2S1A7SUEwS1EsaUJBQWdCLEVBQ2pCO0VBM0tQO0lBK0tVLGlCQUFnQixFQUNqQjs7QUFoTFQ7RUFxTE0scUJBQW9CLEVBK0JyQjtFQXBOTDtJQXdMUSxvQkFBZTtRQUFmLGdCQUFlLEVBaUJoQjtJQWZDO01BMUxSO1FBMkxVLCtCQUFpQjtZQUFqQixrQkFBaUIsRUFjcEIsRUFBQTtJQVhDO01BOUxSO1FBK0xVLDhCQUFnQjtZQUFoQixpQkFBZ0IsRUFVbkIsRUFBQTtJQXpNUDtNQW1NVSx1RUFBc0U7TUFDdEUsc0JBQXFCLEVBQ3RCO0lBck1UO01BdU0wQiw2QkFBNEIsRUFBSTtJQXZNMUQ7TUF3TStCLDZCQUE0QixFQUFJO0VBeE0vRDtJQTRNUSxvQkFBbUIsRUFDcEI7RUE3TVA7SUFnTlEsZ0JBQWU7SUFDZix1QkFBc0I7SUFDdEIsa0JBQWlCLEVBQ2xCOztBQW5OUDtFQXVOTSx3QkFBdUI7RUFDdkIsOEJBQTZCO0VBQzdCLGtCQUFpQjtFQUNqQixxQkFBb0I7RUFDcEIscUJBQWE7RUFBYixjQUFhO0VBQ2IsdUJBQW1CO01BQW5CLG9CQUFtQixFQXlDcEI7RUFyUUw7SUErTlEsaUJBQWdCO0lBQ2hCLGVBQWM7SUFDZCxlQUFjO0lBQ2QsaUJBQWdCLEVBQ2pCO0VBbk9QO0lBc09RLGV4RjNOZTtJd0Y0TmYsaUJBQWdCO0lBQ2hCLGdCQUFlO0lBQ2YsdUJBQXNCO0lBQ3RCLGlCQUFnQixFQUNqQjtFQTNPUDtJQThPUSxjQUFhO0lBQ2IsdUJBQXNCLEVBTXZCO0lBclBQO01Ba1BVLGlCQUFnQjtNQUNoQixrQkFBaUIsRUFDbEI7RUFwUFQ7SUF3UFEsb0J4RjdPZTtJd0Y4T2Ysa0JBQWlCO0lBQ2pCLHdCQUF1QjtJQUN2QixnQkFBZTtJQUNmLGlCQUFnQjtJQUNoQixzQkFBcUIsRUFDdEI7RUFFRDtJQWhRTjtNQWtRVSxZQUFXLEVBQ1osRUFBQTs7QUFuUVQ7OztFQTRRTSwrREFBOEQ7RUFDOUQsc0JBQXFCLEVBS3RCO0VBSEM7SUEvUU47OztNQWdSUSx1QkFBc0IsRUFFekIsRUFBQTs7QUFsUkw7OztFQXFSTSxvQkFBbUI7RUFDbkIsZ0JBQWU7RUFDZixpQkFBZ0I7RUFDaEIsd0JBQXVCO0VBQ3ZCLGtCQUFpQixFQUNsQjs7QUExUkw7OztFQTZSTSxnQkFBZTtFQUNmLHdCQUF1QixFQUN4Qjs7QUFFRDtFQWpTSjs7O0lBbVNRLFlBQVc7SUFDWCxZQUFXO0lBQ1gsbUJBQWtCLEVBQ25CLEVBQUE7O0FBdFNQO0VBMlNJLG9CQUFtQjtFQUNuQixtQkFBa0IsRUF5Qm5CO0VBclVIO0lBK1NNLGlCQUFnQixFQUNqQjtFQWhUTDtJQW1UTSxtQkFBa0I7SUFDbEIsV0FBVSxFQUNYO0VBclRMO0lBd1RNLHFFQUFvRTtJQUNwRSx3QkFBdUI7SUFDdkIsbUNBQWtDO0lBQ2xDLGNBQWEsRUFTZDtJQVBDO01BN1ROO1FBOFRRLFlBQVcsRUFNZCxFQUFBO0lBSEM7TUFqVU47UUFrVVEsY0FBYSxFQUVoQixFQUFBOztBQXBVTDtFQXdVSSxvQkFBbUIsRUFpQnBCO0VBelZIO0lBMFVxQiw2QkFBNEIsRUFBSTtFQTFVckQ7SUE2VU0sZ0VBQStEO0lBQy9ELHVCQUFzQjtJQUN0QixhQUFZLEVBU2I7SUFIQztNQXJWTjtRQXNWUSxjQUFhLEVBRWhCLEVBQUE7O0FBeFZMO0VBNFZJLGdFQUErRCxFQTJCaEU7RUF2WEg7SUErVmtCLDhCQUE2QixFQUFJO0VBL1ZuRDtJQWlXeUIsOEJBQTZCLEVBQUk7RUFqVzFEO0lBcVdNLGFBQVksRUFDYjtFQXRXTDtJQXlXTSxlQUFjLEVBS2Y7SUE5V0w7TUE0V1EsZUFBYyxFQUNmO0VBR0g7SUFoWEo7TUFpWE0saUVBQWdFLEVBTW5FO01BdlhIO1FBb1hRLGVBQWMsRUFDZixFQUFBOztBQXJYUDtFQTBYSSxvQkFBbUIsRUF1QnBCO0VBalpIO0lBNlhNLGVBQWMsRUFDZjtFQTlYTDtJQWlZTSxlQUFjLEVBS2Y7SUF0WUw7TUFvWVEsaUJBQWdCLEVBQ2pCO0VBcllQO0lBMFlRLG9CeEYvWGUsRXdGZ1loQjtFQTNZUDtJQThZUSxleEZuWWUsRXdGb1loQjs7QUMvWVA7RUFFSSxXQUFVLEVBQ1g7O0FBSEg7RUFNSSxZQUFXO0VBQ1gsbUJBQWtCO0VBQ2xCLFlBQVc7RUFDWCxpQkFBZ0I7RUFDaEIsbUJBQWtCO0VBQ2xCLG9CQUFtQjtFQUNuQixnRUFBK0QsRUFxTWhFO0VBak5IO0lBZU0sbUJBQWtCO0lBQ2xCLHNCQUFxQjtJQUNyQixpQkFBZ0I7SUFDaEIsbUJBQWtCO0lBQ2xCLFdBQVUsRUFxRFg7SUF4RUw7TUFzQlEsd0VBQXVFO01BQ3ZFLHNCQUFxQjtNQUNyQixZQUFXO01BQ1gsYUFBWTtNQUNaLFlBQVc7TUFDWCxtQkFBa0I7TUFDbEIsT0FBTTtNQUNOLFdBQVUsRUFDWDtJQTlCUDs7TUFrQ1EsYUFBWSxFQUNiO0lBbkNQO01Bc0NRLGlCQUFnQixFQUNqQjtJQXZDUDtNQTBDUSxnQ0FBaUI7TUFDakIsaUJBQWdCO01BQ2hCLHVCQUFzQjtNQUN0QixtQkFBa0I7TUFDbEIsZ0JBQWUsRUFLaEI7TUFuRFA7UUFpRFUsYUFBaUIsRUFDbEI7SUFsRFQ7TUFzRFEsaUJBQWdCLEVBaUJqQjtNQXZFUDtRQXlEVSxnQkFBZTtRQUNmLGlCQUFnQixFQVlqQjtRQXRFVDtVQTZEWSxvQkFBbUI7VUFDbkIsa0JBQWlCO1VBQ2pCLHdCQUF1QixFQUN4QjtRQWhFWDtVQW1FWSxlQUFjO1VBQ2Qsd0JBQXVCLEVBQ3hCO0VBS1A7SUExRUo7TUE0RVEsVUFBUztNQUNULHFDQUE0QjtjQUE1Qiw2QkFBNEIsRUFDN0I7SUE5RVA7O01BaUZRLG1CQUFrQixFQUNuQjtJQWxGUDs7TUFxRlEsa0JBQWlCO01BQ2pCLG1CQUFrQixFQUNuQixFQUFBO0VBdkZQO0lBMkZNLG1CQUFrQjtJQUNsQixPQUFNO0lBQ04sU0FBUTtJQUNSLFVBQVM7SUFDVCxXQUFVO0lBQ1YsV0FBVSxFQUNYO0VBakdMO0lBb0dNLFdBQVU7SUFDVixtQkFBa0I7SUFDbEIsV0FBVTtJQUNWLGFBQVk7SUFDWixhQUFZO0lBQ1osY0FBYTtJQUNiLHFEQUE0QztZQUE1Qyw2Q0FBNEM7SUFDNUMsV0FBVSxFQXFHWDtJQWhOTDtNQThHUSx5RUFBd0U7TUFDeEUsdUJBQXNCO01BQ3RCLE9BQU07TUFDTixVQUFTO01BQ1QsU0FBUTtNQUNSLFFBQU87TUFDUCxZQUFXO01BQ1gsbUJBQWtCLEVBQ25CO0lBdEhQO01BeUhRLDRFQUEyRTtNQUMzRSxzQkFBcUI7TUFDckIsWUFBVztNQUNYLGNBQWE7TUFDYixZQUFXO01BQ1gsbUJBQWtCO01BQ2xCLFVBQVM7TUFDVCxXQUFVO01BQ1YsZ0RBQXVDO2NBQXZDLHdDQUF1QztNQUN2QyxXQUFVLEVBc0JYO01BeEpQO1FBcUlVLFdBQVU7UUFDVixZQUFXO1FBQ1gsNkJBQW9CO2dCQUFwQixxQkFBb0I7UUFDcEIsK0JBQXNCO2dCQUF0Qix1QkFBc0IsRUFDdkI7TUF6SVQ7UUE0SVUsVUFBUztRQUNULFlBQVc7UUFDWCw4QkFBcUI7Z0JBQXJCLHNCQUFxQjtRQUNyQiwrQkFBc0I7Z0JBQXRCLHVCQUFzQixFQUN2QjtNQWhKVDtRQW1KVSxVQUFTO1FBQ1QsV0FBVTtRQUNWLDhCQUFxQjtnQkFBckIsc0JBQXFCO1FBQ3JCLGdDQUF1QjtnQkFBdkIsd0JBQXVCLEVBQ3hCO0lBdkpUO01BMkpRLE9BQU07TUFDTixRQUFPO01BQ1Asd0NBQTJCO2NBQTNCLGdDQUEyQjtNQUMzQix3Q0FBK0I7Y0FBL0IsZ0NBQStCO01BQy9CLGdDQUF1QjtjQUF2Qix3QkFBdUI7TUFDdkIsNkJBQW9CO2NBQXBCLHFCQUFvQjtNQUNwQixXQUFVLEVBVVg7TUEzS1A7UUFvS1UsV0FBVTtRQUNWLDRCQUFtQjtnQkFBbkIsb0JBQW1CLEVBS3BCO1FBMUtUO1VBdUswQiw0QkFBbUI7a0JBQW5CLG9CQUFtQixFQUFHO1FBdktoRDtVQXdLMEIsNEJBQW1CO2tCQUFuQixvQkFBbUIsRUFBRztRQXhLaEQ7VUF5SzBCLDRCQUFtQjtrQkFBbkIsb0JBQW1CLEVBQUc7SUF6S2hEO01BOEtRLFVBQVM7TUFDVCxhQUFZO01BQ1osd0NBQStCO2NBQS9CLGdDQUErQjtNQUMvQixnQ0FBdUI7Y0FBdkIsd0JBQXVCO01BQ3ZCLDRCQUFtQjtjQUFuQixvQkFBbUI7TUFDbkIsV0FBVSxFQVVYO01BN0xQO1FBc0xVLFdBQVU7UUFDViw2QkFBb0I7Z0JBQXBCLHFCQUFvQixFQUtyQjtRQTVMVDtVQXlMMEIsNkJBQW9CO2tCQUFwQixxQkFBb0IsRUFBRztRQXpMakQ7VUEwTDBCLDZCQUFvQjtrQkFBcEIscUJBQW9CLEVBQUc7UUExTGpEO1VBMkwwQiw2QkFBb0I7a0JBQXBCLHFCQUFvQixFQUFHO0lBM0xqRDtNQWdNUSxXQUFVO01BQ1YsYUFBWTtNQUNaLHdDQUErQjtjQUEvQixnQ0FBK0I7TUFDL0IsZ0NBQXVCO2NBQXZCLHdCQUF1QjtNQUN2Qiw0QkFBbUI7Y0FBbkIsb0JBQW1CO01BQ25CLFdBQVUsRUFVWDtNQS9NUDtRQXdNVSxXQUFVO1FBQ1YsNkJBQW9CO2dCQUFwQixxQkFBb0IsRUFLckI7UUE5TVQ7VUEyTTBCLDZCQUFvQjtrQkFBcEIscUJBQW9CLEVBQUc7UUEzTWpEO1VBNE0wQiw2QkFBb0I7a0JBQXBCLHFCQUFvQixFQUFHO1FBNU1qRDtVQTZNMEIsNkJBQW9CO2tCQUFwQixxQkFBb0IsRUFBRzs7QUE3TWpEO0VBb05JLG1CQUFrQjtFQUNsQixZQUFXO0VBQ1gsK0RBQTZELEVBcUM5RDtFQWxDd0M7SUF6TjNDO01BME5NLG9DQUEyQjtjQUEzQiw0QkFBMkI7TUFDM0IscUNBQXNCLEVBZ0N6QixFQUFBO0VBM1BIO0lBK05NLHVCQUFzQixFQUt2QjtJQUhDO01Bak9OO1FBa09RLGVBQWMsRUFFakIsRUFBQTtFQXBPTDtJQXVPTSxvQkFBZTtRQUFmLGdCQUFlLEVBYWhCO0lBWEM7TUF6T047UUEwT1Esb0JBQWU7WUFBZixnQkFBZSxFQVVsQixFQUFBO0lBcFBMO01BOE9RLCtEQUE4RDtNQUM5RCxzQkFBcUIsRUFDdEI7SUFoUFA7TUFrUHVCLDZCQUE0QixFQUFJO0lBbFB2RDtNQW1Qd0IsNkJBQTRCLEVBQUk7RUFuUHhEO0lBdVBNLHdCQUF1QjtJQUN2QixnQkFBZTtJQUNmLGtCQUFpQixFQUNsQjs7QUExUEw7RUE4UEksbUJBQWtCLEVBQ25COztBQS9QSDtFQWtRSSxvQkFBbUIsRUE4SnBCO0VBaGFIO0lBcVFNLGlCQUFnQjtJQUNoQixtQkFBa0I7SUFDbEIsc0JBQXFCLEVBS3RCO0lBSEM7TUF6UU47UUEwUVEsc0JBQXFCLEVBRXhCLEVBQUE7RUE1UUw7SUErUU0saUJBQWdCLEVBQ2pCO0VBaFJMO0lBbVJNLG1CQUFrQixFQUNuQjtFQXBSTDtJQXVSTSxjQUFhO0lBQ2IsY0FBYTtJQUNiLG1CQUFrQjtJQUNsQixVQUFTO0lBQ1Qsd0JBQXVCLEVBb0l4QjtJQS9aTDtNQThSUSwyRUFBMEU7TUFDMUUsdUJBQXNCO01BQ3RCLGFBQVk7TUFDWixjQUFhO01BQ2IsWUFBVztNQUNYLG1CQUFrQjtNQUNsQixXQUFVO01BQ1YsVUFBUyxFQW9CVjtNQXpUUDtRQXlTVSw0RUFBMkU7UUFDM0UsdUJBQXNCO1FBQ3RCLGFBQVk7UUFDWixjQUFhO1FBQ2IsWUFBVztRQUNYLG1CQUFrQjtRQUNsQixXQUFVO1FBQ1YsU0FBUSxFQUNUO01BalRUO1FBb1RVLGtFQUFpRTtRQUNqRSx1QkFBc0I7UUFDdEIsWUFBVztRQUNYLFVBQVMsRUFDVjtJQXhUVDtNQTRUUSwyRUFBMEU7TUFDMUUsdUJBQXNCO01BQ3RCLGFBQVk7TUFDWixjQUFhO01BQ2IsWUFBVztNQUNYLG1CQUFrQjtNQUNsQixZQUFXO01BQ1gsVUFBUyxFQVlWO01BL1VQO1FBc1VVLDJFQUEwRTtRQUMxRSx1QkFBc0I7UUFDdEIsYUFBWTtRQUNaLGNBQWE7UUFDYixZQUFXO1FBQ1gsbUJBQWtCO1FBQ2xCLGFBQVk7UUFDWixTQUFRLEVBQ1Q7SUE5VVQ7TUFrVlEsY0FBYTtNQUNiLGVBQWMsRUFDZjtJQXBWUDtNQXVWUSx5RUFBd0U7TUFDeEUsdUJBQXNCO01BQ3RCLGFBQVk7TUFDWixjQUFhO01BQ2IsWUFBVztNQUNYLG1CQUFrQjtNQUNsQixZQUFXO01BQ1gsU0FBUSxFQWtCVDtNQWhYUDtRQWlXVSwrRkFBOEY7UUFDOUYsc0JBQXFCO1FBQ3JCLFlBQVc7UUFDWCxhQUFZO1FBQ1osWUFBVztRQUNYLG1CQUFrQjtRQUNsQixZQUFXO1FBQ1gsVUFBUztRQUNULFdBQVU7UUFDVix3QkFBdUIsRUFDeEI7TUEzV1Q7UUE4V1UsV0FBVSxFQUNYO0lBL1dUO01BbVhRLFlBQVc7TUFDWCxXQUFVO01BQ1YsbUJBQWtCO01BQ2xCLFdBQVU7TUFDVixZQUFXO01BQ1gsbUJBQWtCO01BQ2xCLG9CQUFtQixFQTRCcEI7TUFyWlA7UUE0WFUsbUJBQWtCO1FBQ2xCLE9BQU07UUFDTixRQUFPO1FBQ1AsU0FBUTtRQUNSLFVBQVM7UUFDVCxXQUFVO1FBQ1YsWUFBVztRQUNYLG1CQUFrQjtRQUNsQiwwQnpGdFhhO1F5RnVYYix3QkFBdUIsRUFDeEI7TUF0WVQ7UUF5WVUsV0FBVSxFQUNYO01BMVlUO1FBNFl5QixZQUFXLEVBQUk7TUE1WXhDO1FBNll5QixZQUFXLEVBQUk7TUE3WXhDO1FBOFl5QixZQUFXLEVBQUk7TUE5WXhDO1FBK1l5QixZQUFXLEVBQUk7TUEvWXhDO1FBZ1p5QixZQUFXLEVBQUk7TUFoWnhDO1FBaVp5QixZQUFXLEVBQUk7TUFqWnhDO1FBa1p5QixZQUFXLEVBQUk7TUFsWnhDO1FBbVp5QixZQUFXLEVBQUk7TUFuWnhDO1FBb1owQixZQUFXLEVBQUk7SUFHbkM7TUF2Wk47UUF3WlEsd0NBQTJCO2dCQUEzQixnQ0FBMkI7UUFDM0Isd0JBQXVCLEVBTTFCLEVBQUE7SUFIQztNQTVaTjtRQTZaUSx3Q0FBK0I7Z0JBQS9CLGdDQUErQixFQUVsQyxFQUFBOztBQS9aTDtFQW9hTSx5QkFBd0I7RUFDeEIsbUJBQWtCO0VBQ2xCLHNCQUFxQixFQU10QjtFQUpDO0lBeGFOO01BeWFRLFlBQVc7TUFDWCxtQkFBa0IsRUFFckIsRUFBQTs7QUE1YUw7RUErYU0sd0JBQXVCO0VBQ3ZCLG9CQUFtQixFQUNwQjs7QUFqYkw7RUFvYk0sZ0JBQWU7RUFDZix3QkFBdUI7RUFDdkIsbUJBQWtCO0VBQ2xCLG9CQUFtQjtFQUNuQixlQUFjLEVBS2Y7RUE3Ykw7SUEyYlEsaUJBQWdCLEVBQ2pCOztBQTViUDtFQWdjTSxtQkFBa0I7RUFDbEIsaUJBQWdCLEVBYWpCO0VBOWNMO0lBb2NRLHlFQUF3RTtJQUN4RSx1QkFBc0I7SUFDdEIsYUFBWTtJQUNaLGNBQWE7SUFDYixZQUFXO0lBQ1gsbUJBQWtCO0lBQ2xCLFdBQVU7SUFDVixTQUFRO0lBQ1IscUJBQW9CLEVBQ3JCOztBQUdIO0VBaGRKO0lBa2RRLFlBQVc7SUFDWCxtQkFBa0IsRUFDbkI7RUFwZFA7SUF1ZFEsWUFBVyxFQUNaLEVBQUE7O0FBeGRQO0VBOGRJLGdFQUErRCxFQThCaEU7RUE1Zkg7SUFpZU8sbUJBQWtCLEVBQ25CO0VBbGVOO0lBcWVNLGVBQWMsRUFLZjtJQTFlTDtNQXdlUSxpQkFBZ0IsRUFDakI7RUF6ZVA7SUE2ZU0sd0JBQXVCO0lBQ3ZCLGdCQUFlO0lBQ2YsdUJBQXNCO0lBQ3RCLGlCQUFnQixFQVdqQjtJQTNmTDtNQW1mUSxvQkFBbUI7TUFDbkIsa0JBQWlCLEVBQ2xCO0lBcmZQO01Bd2ZRLGtCQUFpQjtNQUNqQixlQUFjLEVBQ2Y7O0FDMWZQOzs7RUFLSSw2RDFGTDhELEUwRk0vRDs7QUFOSDtFQVNJLHVCQUFtQjtNQUFuQixvQkFBbUIsRUFDcEI7O0FBVkg7RUFhSSwwQkFBeUI7RUFDekIsK0ZBRTJDO0VBQzNDLDZCQUE0QjtFQUM1Qiw2QkFBNEI7RUFDNUIsbUJBQWtCO0VBQ2xCLG1CQUFrQjtFQUNsQixtQkFBa0I7RUFDbEIsbUJBQWtCLEVBQ25COztBQXZCSDtFQTBCSSxzQkFBcUIsRUFDdEI7O0FBM0JIO0VBOEJJLGdCQUFlO0VBQ2YsaUJBQWdCO0VBQ2hCLGlCQUFnQixFQUNqQjs7QUFqQ0g7RUFvQ0ksZUFBYztFQUNkLGlCQUFnQixFQUNqQjs7QUF0Q0g7RUF5Q0ksZUFBYyxFQUNmOztBQTFDSDtFQTZDSSxpQkFBZ0IsRUFDakI7O0FBOUNIO0VBaURJLGVBQWM7RUFDZCxnQkFBZTtFQUNmLGlCQUFnQjtFQUNoQixtQkFBa0IsRUFLbkI7RUF6REg7SUF1RE0sMEJBQXlCLEVBQzFCOztBQXhETDtFQTRESSx1QkFBbUI7TUFBbkIsb0JBQW1CO0VBQ25CLHFCQUFhO0VBQWIsY0FBYTtFQUNiLGNBQWE7RUFDYixzQkFBdUI7TUFBdkIsd0JBQXVCO0VBQ3ZCLGlCQUFnQjtFQUNoQixtQkFBa0IsRUF5Qm5CO0VBMUZIO0lBb0VNLHlIQUVpQztJQUNqQyw2QkFBNEI7SUFDNUIsc0NBQXFDO0lBQ3JDLG1CQUFrQjtJQUNsQixZQUFXO0lBQ1gsd0JBQXVCO0lBQ3ZCLFlBQVc7SUFDWCxjQUFhO0lBQ2IsMkJBQWtCO1lBQWxCLG1CQUFrQixFQUNuQjtFQS9FTDtJQWtGTSxpQkFBZ0I7SUFDaEIsV0FBVTtJQUNWLG1CQUFrQixFQUNuQjtFQUVEO0lBdkZKO01Bd0ZNLGNBQWEsRUFFaEIsRUFBQTs7QUExRkg7RUE2RkksNkJBQTRCO0VBQzVCLGlCQUFnQixFQUtqQjtFQUhDO0lBaEdKO01BaUdNLGVBQWMsRUFFakIsRUFBQTs7QUFuR0g7RUFzR0kscUJBQWE7RUFBYixjQUFhO0VBQ2IsMkJBQXNCO01BQXRCLHVCQUFzQixFQUN2Qjs7QUF4R0g7RUEyR0ksb0JBQXFCO01BQXJCLHNCQUFxQixFQUN0Qjs7QUE1R0g7RUErR0ksV0FBVSxFQU1YO0VBSkM7SUFqSEo7TUFrSE0sbUJBQWtCO01BQ2xCLFlBQVcsRUFFZCxFQUFBOztBQXJISDtFQXdISSwwREFBeUQ7RUFDekQsZ0NBQStCO0VBQy9CLDZCQUE0QjtFQUM1QixzQkFBcUI7RUFDckIsc0JBQXFCO0VBQ3JCLGFBQVk7RUFDWixvQkFBbUI7RUFDbkIsWUFBVyxFQUtaO0VBSEM7SUFqSUo7TUFrSU0sb0JBQW1CLEVBRXRCLEVBQUE7O0FBcElIO0VBdUlJLHlCQUF3QixFQUN6Qjs7QUF4SUg7RUEySUksNkJBQTRCLEVBQzdCOztBQTVJSDtFQStJSSw4QkFBNkIsRUFDOUI7O0FBaEpIO0VBbUpJLGVBQWM7RUFDZCxnQkFBZTtFQUNmLGlCQUFnQjtFQUNoQix3QkFBdUI7RUFDdkIsa0JBQWlCO0VBQ2pCLG1CQUFrQixFQUNuQjs7QUF6Skg7RUE0SkksZUFBYyxFQUNmOztBQTdKSDtFQWdLSSxlQUFjO0VBQ2QsZ0JBQWU7RUFDZixpQkFBZ0IsRUFDakI7O0FBbktIO0VBc0tJLHNEQUFxRDtFQUNyRCxrQ0FBaUM7RUFDakMsdUJBQXNCLEVBQ3ZCOztBQXpLSDtFQTRLSSx3REFBdUQ7RUFDdkQsaUNBQWdDO0VBQ2hDLHVCQUFzQixFQUN2Qjs7QUEvS0g7RUFrTEksNkRBQTREO0VBQzVELGtDQUFpQztFQUNqQyx1QkFBc0IsRUFDdkI7O0FBSUM7RUF6TEo7O0lBeUxxQyx5Q0FBd0MsRUFHMUUsRUFBQTs7QUFGQztFQTFMSjs7SUEwTHFDLHlDQUF3QyxFQUUxRSxFQUFBOztBQURDO0VBM0xKOztJQTJMaUMsd0NBQXVDLEVBQ3JFLEVBQUE7O0FBR0M7RUEvTEo7SUErTHFDLHdDQUF1QyxFQUd6RSxFQUFBOztBQUZDO0VBaE1KO0lBZ01xQyx3Q0FBdUMsRUFFekUsRUFBQTs7QUFEQztFQWpNSjtJQWlNaUMsdUNBQXNDLEVBQ3BFLEVBQUE7O0FBS0M7RUF2TUo7OztJQXdNTSx1QkFBc0I7SUFDdEIsZ0JBQWUsRUFFbEIsRUFBQTs7QUEzTUg7RUE4TUksaUJBQWdCLEVBQ2pCOztBQUdDO0VBbE5KO0lBbU5NLFdBQVUsRUFFYixFQUFBOztBQXJOSDtFQXdOSSxlQUFjO0VBQ2QsZ0JBQWU7RUFDZixpQkFBZ0I7RUFDaEIsb0JBQW1CLEVBQ3BCOztBQTVOSDtFQStOSSxlQUFjO0VBQ2QsZ0JBQWU7RUFDZixpQkFBZ0IsRUFDakI7O0FBbE9IO0VBcU9JLDZEQUE0RDtFQUM1RCxhQUFZO0VBQ1osaUJBQWdCO0VBQ2hCLFlBQVcsRUFXWjtFQW5QSDtJQTBPZ0IseUJBQXdCLEVBQUk7RUExTzVDO0lBMk9XLDZCQUFnQyxFQUFJO0VBM08vQztJQTRPYSw2QkFBZ0MsRUFBSTtFQTVPakQ7SUE2T2UsOEJBQWdDLEVBQUk7RUE3T25EO0lBOE9pQiw4QkFBZ0MsRUFBSTtFQTlPckQ7SUErT2lCLDhCQUFnQyxFQUFJO0VBL09yRDtJQWdQVyw4QkFBZ0MsRUFBSTtFQWhQL0M7SUFpUG1CLDhCQUFnQyxFQUFJO0VBalB2RDtJQWtQYyw4QkFBZ0MsRUFBSTs7QUFsUGxEO0VBc1BJLHFCQUFhO0VBQWIsY0FBYTtFQUNiLG9CQUFlO01BQWYsZ0JBQWU7RUFDZixpQkFBZ0I7RUFDaEIsaUJBQWdCO0VBQ2hCLFdBQVUsRUFDWDs7QUEzUEg7RUE4UEkscUJBQWdCO01BQWhCLGlCQUFnQjtFQUNoQixvQkFBbUI7RUFDbkIsbUJBQWtCLEVBV25CO0VBVEM7SUFsUUo7TUFtUU0sa0JBQWE7VUFBYixjQUFhLEVBUWhCLEVBQUE7RUFMQztJQXRRSjtNQXVRTSxtQkFBYztVQUFkLGVBQWM7TUFDZCxpQkFBZ0I7TUFDaEIsbUJBQWtCLEVBRXJCLEVBQUE7O0FBM1FIO0VBOFFJLGVBQWM7RUFDZCxxQkFBYTtFQUFiLGNBQWE7RUFDYixnQkFBZTtFQUNmLGlCQUFnQjtFQUNoQix3QkFBdUIsRUFLeEI7RUFIQztJQXBSSjtNQXFSTSwyQkFBc0I7VUFBdEIsdUJBQXNCLEVBRXpCLEVBQUE7O0FBdlJIO0VBMFJJLGlCQUFnQjtFQUNoQixtQkFBa0IsRUFDbkI7O0FBNVJIOztFQWdTSSxxQkFBYTtFQUFiLGNBQWE7RUFDYixZQUFPO01BQVAsUUFBTztFQUNQLGNBQWEsRUFLZDtFQUhDO0lBcFNKOztNQXFTTSxjQUFhLEVBRWhCLEVBQUE7O0FBdlNIO0VBMFNJLDBCQUF5QjtFQUN6QixtQkFBeUI7TUFBekIsMEJBQXlCLEVBSzFCO0VBSEM7SUE3U0o7TUE4U00scUJBQTJCO1VBQTNCLDRCQUEyQixFQUU5QixFQUFBOztBQWhUSDtFQW1USSwwQkFBeUI7RUFDekIsb0JBQW1CO0VBQ25CLGdDQUE0QjtFQUM1QixzQkFBcUI7RUFDckIsZ0JBQWU7RUFDZixlQUFjO0VBQ2Qsb0JBQW1CO0VBQ25CLHNCQUFxQjtFQUNyQixtQkFBa0I7RUFDbEIsU0FBUTtFQUNSLFNBQVE7RUFDUixvQ0FBbUMsRUFrQnBDO0VBaFZIO0lBaVVNLHFCQUFvQjtJQUNwQixlQUFjLEVBQ2Y7RUFuVUw7SUFzVU0sa0JBQWlCLEVBQ2xCO0VBdlVMO0lBMFVNLGVBQWMsRUFDZjtFQUVEO0lBN1VKO01BOFVNLG1CQUFrQixFQUVyQixFQUFBOztBQWhWSDtFQW1WSSwwQkFBeUIsRUFDMUI7O0FBcFZIO0VBdVZJLHdEQUF1RDtFQUN2RCx5QkFBd0I7RUFDeEIsc0JBQXFCO0VBQ3JCLDZCQUE0QjtFQUM1QixlQUFjO0VBQ2QsYUFBWTtFQUNaLG1CQUFrQjtFQUNsQixhQUFZLEVBQ2I7O0FBL1ZIO0VBa1dJLDZCQUE0QixFQUM3Qjs7QUFuV0g7RUFzV0ksYUFBWTtFQUNaLG1CQUFrQjtFQUNsQixpQkFBZ0I7RUFDaEIsVUFBUztFQUNULFdBQVUsRUFDWDs7QUEzV0g7RUE4V0ksZ0NBQTRCO0VBQzVCLGdCQUFlO0VBQ2Ysa0JBQWlCLEVBVWxCO0VBMVhIO0lBbVhNLFlBQVcsRUFDWjtFQXBYTDtJQXVYTSxxQkFBb0I7SUFDcEIsZUFBYyxFQUNmOztBQXpYTDtFQTZYSSxvQkFBbUI7RUFDbkIsZUFBYyxFQUNmOztBQS9YSDtFQWtZSSx1QkFBbUI7TUFBbkIsb0JBQW1CO0VBQ25CLHFCQUFhO0VBQWIsY0FBYTtFQUNiLHFCQUFvQjtFQUNwQixrQkFBaUIsRUFNbEI7RUFKQztJQXZZSjtNQXdZTSxlQUFjO01BQ2QsbUJBQWtCLEVBRXJCLEVBQUE7O0FBM1lIO0VBOFlJLHdCQUF1QjtFQUN2QixxQkFBWTtNQUFaLGFBQVksRUFLYjtFQUhDO0lBalpKO01Ba1pNLHFCQUFvQixFQUV2QixFQUFBOztBQXBaSDtFQXVaSSxlQUFjO0VBQ2QsZ0JBQWU7RUFDZixpQkFBZ0I7RUFDaEIsd0JBQXVCO0VBQ3ZCLGdCQUFlLEVBQ2hCOztBQTVaSDtFQStaSSxlQUFjO0VBQ2QsZ0JBQWU7RUFDZixpQkFBZ0I7RUFDaEIsVUFBUyxFQUNWOztBQW5hSDtFQXNhSSxnQkFBZTtFQUNmLGlCQUFnQixFQUtqQjtFQTVhSDtJQTBhTSwwQkFBeUIsRUFDMUI7O0FDM2FMO0VBQ0Usa0JBQWlCLEVBZ1VsQjtFQWpVRDtJQUlJLFdBQVUsRUFDWDtFQUxIOzs7SUFVSSxpQkFBZ0IsRUFDakI7RUFYSDtJQWNJLGVBQWM7SUFDZCxpQkFBZ0I7SUFDaEIsaUJBQWdCO0lBQ2hCLGlCQUFnQjtJQUNoQixpQkFBZ0I7SUFDaEIsaUJBQWdCLEVBS2pCO0lBSEM7TUFyQko7UUFzQk0saUJBQWdCLEVBRW5CLEVBQUE7RUF4Qkg7SUEyQkksZUFBYyxFQUNmO0VBNUJIO0lBK0JJLGdCQUFlO0lBQ2YsaUJBQWdCO0lBQ2hCLHNCQUFxQjtJQUNyQixjQUFhO0lBQ2IsMEJBQXlCLEVBQzFCO0VBcENIO0lBdUNJLG1CQUFrQjtJQUNsQiw0RUFBZ0U7SUFDaEUsaUJBQWdCO0lBQ2hCLHdFQUErRDtJQUEvRCxnRUFBK0Q7SUFBL0Qsa0dBQStELEVBY2hFO0lBeERIO01BNkNNLGdCQUFlLEVBQ2hCO0lBOUNMO01BaURNLGFBQVksRUFDYjtJQWxETDtNQXFETSwwRUFBOEQ7TUFDOUQsb0NBQTJCO2NBQTNCLDRCQUEyQixFQUM1QjtFQXZETDtJQTJESSxtQkFBa0IsRUFNbkI7SUFqRUg7TUE4RE0sb0JBQW1CO01BQ25CLG1CQUFrQixFQUNuQjtFQWhFTDtJQW9FSSxrQkFBaUIsRUFDbEI7RUFyRUg7O0lBeUVJLDZEM0Z6RThELEUyRjBFL0Q7RUExRUg7SUErRUksK0NBQThDO0lBQzlDLG1DQUFrQztJQUNsQyx1QkFBc0I7SUFDdEIsaUJBQWdCO0lBQ2hCLG1CQUFrQixFQU1uQjtJQUpDO01BckZKO1FBc0ZNLGNBQWE7UUFDYixtQ0FBa0MsRUFFckMsRUFBQTtFQXpGSDtJQTRGSSxrQkFBaUI7SUFDakIsd0JBQXVCLEVBS3hCO0lBSEM7TUEvRko7UUFnR00sZUFBYyxFQUVqQixFQUFBO0VBbEdIO0lBcUdJLGtCQUFpQjtJQUNqQixzQkFBcUIsRUFDdEI7RUF2R0g7SUEwR0csZUFBYyxFQUNkO0VBM0dIO0lBOEdJLGFBQVk7SUFDWixxQkFBb0IsRUFDckI7RUFoSEg7SUFxSEkscUJBQWE7SUFBYixjQUFhO0lBQ2Isb0JBQWU7UUFBZixnQkFBZTtJQUNmLGlCQUFnQjtJQUNoQixlQUFjO0lBQ2Qsa0JBQWlCO0lBQ2pCLFdBQVU7SUFDVixtQkFBa0IsRUFDbkI7RUE1SEg7SUErSEksa0JBQWE7UUFBYixjQUFhO0lBQ2IsWUFBVyxFQUtaO0lBSEM7TUFsSUo7UUFtSU0sa0JBQWE7WUFBYixjQUFhLEVBRWhCLEVBQUE7RUFySUg7SUF3SUksa0JBQWlCO0lBQ2pCLGlCQUFnQixFQUNqQjtFQTFJSDtJQTZJSSxlQUFjO0lBQ2QsbUJBQWtCO0lBQ2xCLGlCQUFnQixFQUNqQjtFQWhKSDtJQXFKSSx3REFBdUQ7SUFDdkQsOEJBQTZCO0lBQzdCLHNCQUFxQjtJQUNyQixhQUx5QjtJQU16QixvQkFBbUI7SUFDbkIsWUFQeUIsRUFpQjFCO0lBcEtIO01BNEpzQix5QkFBd0IsRUFBSTtJQTVKbEQ7TUE2SnNCLDZCQUErQyxFQUFJO0lBN0p6RTtNQThKc0IsNkJBQStDLEVBQUk7SUE5SnpFO01BK0pzQiw4QkFBK0MsRUFBSTtJQS9KekU7TUFnS3NCLDhCQUErQyxFQUFJO0lBaEt6RTtNQWlLc0IsOEJBQStDLEVBQUk7SUFqS3pFO01Ba0tzQiw4QkFBK0MsRUFBSTtJQWxLekU7TUFtS3NCLDhCQUErQyxFQUFJO0VBR3ZFO0lBdEtGOzs7TUEyS1EsV0FBVTtNQUNWLGlDQUF3QjtjQUF4Qix5QkFBd0IsRUFDekI7SUE3S1A7OztNQWtMTSxvQ0FBMkI7Y0FBM0IsNEJBQTJCO01BQzNCLDRFQUFtRTtNQUFuRSxvRUFBbUU7TUFBbkUscUlBQW1FLEVBQ3BFO0lBcExMO01Bc0xNLFdBQVUsRUFDWCxFQUFBO0VBdkxMO0lBNkxJLDBCQUF5QixFQUMxQjtFQUdDO0lBak1KO01Ba01NLG1CQUFrQjtNQUNsQixvQkFBbUIsRUFFdEIsRUFBQTtFQXJNSDtJQXdNSSxxQkFBYTtJQUFiLGNBQWE7SUFDYixvQkFBZTtRQUFmLGdCQUFlO0lBQ2Ysc0JBQXVCO1FBQXZCLHdCQUF1QixFQUN4QjtFQTNNSDtJQThNSSxtQkFBa0I7SUFDbEIsMkNBQWtDO0lBQ2xDLGFBQVk7SUFDWiwrQkFBOEIsRUFVL0I7SUEzTkg7TUFvTk0sd0VBQTZELEVBQzlEO0lBRUQ7TUF2Tko7UUF3Tk0sZUFBYztRQUNkLGdCQUFlLEVBRWxCLEVBQUE7RUEzTkg7SUE4TkksbUNBQWtDO0lBQ2xDLHVCQUFzQjtJQUN0QixtQkFBa0I7SUFDbEIsZ0NBQWlCO0lBQ2pCLGlCQUFnQjtJQUNoQixVQUFTO0lBQ1Qsb0JBQW1CO0lBQ25CLG1CQUFrQixFQVFuQjtJQTdPSDtNQXVPa0IsdURBQXNELEVBQUk7SUF2TzVFO01Bd09rQix1REFBc0QsRUFBSTtJQXhPNUU7TUF5T2Esa0RBQWlELEVBQUk7SUF6T2xFO01BME9hLGtEQUFpRCxFQUFJO0lBMU9sRTtNQTJPZ0IscURBQW9ELEVBQUk7SUEzT3hFO01BNE9lLG9EQUFtRCxFQUFJO0VBNU90RTtJQWdQSSxVQUFTO0lBQ1QsZ0JBQWU7SUFDZixRQUFPO0lBQ1AsZUFBYztJQUNkLG1CQUFrQjtJQUNsQixTQUFRLEVBTVQ7SUEzUEg7TUF3UE0sYUFBWTtNQUNaLG1CQUFrQixFQUNuQjtFQTFQTDtJQWdRSSxtQkFBa0IsRUFDbkI7RUFqUUg7SUFvUUksZ0JBQWU7SUFDZixpQkFBZ0IsRUFDakI7RUF0UUg7SUF5UUksZUFBYztJQUNkLGdCQUFlO0lBQ2YsaUJBQWdCLEVBQ2pCO0VBNVFIO0lBK1FJLGVBQWMsRUFLZjtJQXBSSDtNQWtSTSxzQkFBcUIsRUFDdEI7RUFuUkw7SUF1UkkscUJBQWE7SUFBYixjQUFhO0lBQ2Isb0JBQWU7UUFBZixnQkFBZTtJQUNmLGlCQUFnQjtJQUNoQixvQkFBbUI7SUFDbkIsV0FBVSxFQUNYO0VBNVJIO0lBK1JJLGtCQUFhO1FBQWIsY0FBYTtJQUNiLHFCQUFvQjtJQUNwQixvQkFBbUIsRUFjcEI7SUFaQztNQW5TSjtRQW9TTSxxQkFBZ0I7WUFBaEIsaUJBQWdCLEVBV25CLEVBQUE7SUFSQztNQXZTSjtRQXdTTSxrQkFBYTtZQUFiLGNBQWEsRUFPaEIsRUFBQTtJQUpDO01BM1NKO1FBNFNNLG1CQUFjO1lBQWQsZUFBYztRQUNkLGlCQUFnQixFQUVuQixFQUFBO0VBL1NIO0lBa1RJLGFBQVk7SUFDWixrQkFBaUI7SUFDakIsbUJBQWtCLEVBS25CO0lBSEM7TUF0VEo7UUF1VE0saUJBQWdCLEVBRW5CLEVBQUE7RUFHQztJQTVUSjtNQTZUTSxtQkFBa0IsRUFFckIsRUFBQTs7QUMvVEg7RUFFSSxjQUFhO0VBQ2IscUZBQW9GO0VBQ3BGLHVCQUFzQjtFQUN0QixhQUFZO0VBQ1osbUJBQWtCO0VBQ2xCLG1CQUFrQjtFQUNsQixrQkFBaUI7RUFDakIsa0JBQWlCO0VBQ2pCLG1CQUFrQjtFQUNsQixvQkFBbUI7RUFDbkIsc0JBQXFCO0VBQ3JCLG1CQUFrQjtFQUNsQixnQkFBZTtFQUNmLDBCQUF5QjtFQUN6QixxQkFBb0I7RUFDcEIsaUJBQWdCO0VBQ2hCLGlCQUFnQjtFQUNoQiwwQ0FBcUMsRUF1RXRDO0VBckVDO0lBckJKO01Bc0JNLG9CQUFtQixFQW9FdEIsRUFBQTtFQTFGSDtJQTBCTSxvQ0FBbUM7SUFDbkMsbUJBQWtCO0lBQ2xCLGtCQUFpQjtJQUNqQixPQUFNO0lBQ04sUUFBTztJQUNQLFNBQVE7SUFDUixVQUFTO0lBQ1QsV0FBVTtJQUNWLHFDQUE0QjtZQUE1Qiw2QkFBNEI7SUFDNUIscUNBQTRCO1lBQTVCLDZCQUE0QjtJQUM1Qix1Q0FBc0MsRUFxRHZDO0lBekZMO01BdUNRLHNGQUFxRjtNQUNyRixzQkFBcUI7TUFDckIsYUFBWTtNQUNaLFlBQVc7TUFDWCxZQUFXO01BQ1gsc0JBQXFCO01BQ3JCLHVCQUFzQjtNQUN0QixtQkFBa0I7TUFDbEIsVUFBUztNQUNULG1CQUFrQixFQUtuQjtNQUhDO1FBbERSO1VBbURVLGtCQUFpQixFQUVwQixFQUFBO0lBckRQO01Bd0RRLFdBQVU7TUFDViwrQkFBc0I7Y0FBdEIsdUJBQXNCLEVBQ3ZCO0lBMURQO01BNkRRLHVEQUFzRDtNQUN0RCx1QkFBc0IsRUFDdkI7SUEvRFA7TUFrRVEsdURBQXNEO01BQ3RELHVCQUFzQixFQUN2QjtJQXBFUDtNQXVFUSx5REFBd0Q7TUFDeEQsdUJBQXNCLEVBQ3ZCO0lBekVQO01BNEVRLHdEQUF1RDtNQUN2RCx1QkFBc0IsRUFDdkI7SUE5RVA7TUFpRlEsMkRBQTBEO01BQzFELHVCQUFzQixFQUN2QjtJQW5GUDtNQXNGUSx1REFBc0Q7TUFDdEQsdUJBQXNCLEVBQ3ZCOztBQXhGUDtFQTZGSSxtQkFBa0I7RUFDbEIsZ0JBQWUsRUFDaEI7O0FBL0ZIO0VBa0dJLGlCQUFnQjtFQUNoQixlQUFjO0VBQ2QsbUJBQWtCO0VBQ2xCLG9CQUFtQixFQXdCcEI7RUE3SEg7SUF3R00sb0JBQW1CO0lBQ25CLDRCQUEyQjtJQUMzQixnQkFBZTtJQUNmLGFBQVksRUFNYjtJQWpITDtNQThHUSxlNUYxRmU7TTRGMkZmLGlCQUFnQixFQUNqQjtJQWhIUDtNQThHUSxlNUYxRmU7TTRGMkZmLGlCQUFnQixFQUNqQjtJQWhIUDtNQThHUSxlNUYxRmU7TTRGMkZmLGlCQUFnQixFQUNqQjtFQWhIUDtJQW9ITSxpQkFBZ0I7SUFDaEIsd0JBQXVCO0lBQ3ZCLG1CQUFrQjtJQUNsQixXQUFVO0lBQ1YsZ0JBQWU7SUFDZixVQUFTO0lBQ1QsZTVGdEdpQjtJNEZ1R2pCLGlCQUFnQixFQUNqQjs7QUE1SEw7RUFnSUkscUJBQWE7RUFBYixjQUFhO0VBQ2Isb0JBQWU7TUFBZixnQkFBZTtFQUNmLG1CQUFrQjtFQUNsQixrQkFBaUIsRUEwR2xCO0VBN09IO0lBeUlVLFNBQVE7SUFDUixXQUFVO0lBQ1YsZ0JBQWU7SUFDZixrQkFBaUI7SUFDakIsc0NBQTZCO1lBQTdCLDhCQUE2QixFQUM5QjtFQTlJVDtJQWlKVSxZQUFXLEVBQ1o7RUFsSlQ7SUFzSlEsZTVGN0llO0k0RjhJZixVQUFTO0lBQ1Qsd0NBQTZCO1lBQTdCLGdDQUE2QjtJQUM3QixrRUFBaUUsRUFDbEU7RUExSlA7SUE4Sk0sZ0JBQWU7SUFDZixtQkFBa0I7SUFDbEIsMEJBQXlCO0lBQ3pCLGlCQUFnQjtJQUNoQixxQkFBb0I7SUFDcEIsbUJBQWtCO0lBQ2xCLFlBQVc7SUFDWCxTQUFRO0lBQ1IsZ0JBQWU7SUFDZiw0Q0FBaUM7WUFBakMsb0NBQWlDO0lBQ2pDLGtFQUFpRSxFQVNsRTtJQWpMTDtNQTJLUSxlNUZsS2UsRTRGbUtoQjtJQTVLUDtNQStLUSxlQUF1QixFQUN4QjtFQWhMUDtJQW9MTSxhQUFZO0lBQ1osbUJBQWtCO0lBQ2xCLHFCQUFvQjtJQUNwQixtQkFBa0I7SUFDbEIsa0JBQWlCO0lBQ2pCLG9HQUMwQyxFQWlCM0M7SUEzTUw7TUE2TFEsa0ZBQWlGO01BQ2pGLHNCQUFxQjtNQUNyQixhQUFZO01BQ1osWUFBVztNQUNYLFlBQVc7TUFDWCxtQkFBa0I7TUFDbEIsV0FBVTtNQUNWLE9BQU0sRUFDUDtJQXJNUDtNQXNNeUIsa0NBQWlDLEVBQUk7SUF0TTlEO01BdU0yQixrQ0FBaUMsRUFBSTtJQXZNaEU7TUF3TThCLGtDQUFpQyxFQUFJO0lBeE1uRTtNQXlNMEIsbUNBQWtDLEVBQUk7SUF6TWhFO01BME00QixtQ0FBa0MsRUFBSTtFQTFNbEU7SUE4TU0sMEJBQXlCO0lBQ3pCLGdCQUFlO0lBQ2Ysb0JBQW1CO0lBQ25CLGdCQUFlO0lBQ2YsZ0JBQWU7SUFDZixpQkFBZ0I7SUFDaEIsc0JBQXFCLEVBQ3RCO0VBck5MO0lBd05NLFdBQVUsRUFDWDtFQXpOTDtJQTROTSxxQkFBb0I7SUFDcEIsaUJBQWdCO0lBQ2hCLGFBQVk7SUFDWixtQkFBa0I7SUFDbEIsc0JBQXFCO0lBQ3JCLG9CQUFtQixFQVdwQjtJQTVPTDtNQW9PUSxnQkFBZTtNQUNmLGlCQUFnQixFQUNqQjtJQXRPUDtNQXlPUSxnQkFBZTtNQUNmLGNBQWEsRUFDZDs7QUMzT1A7RUFDRSw2RDdGRGdFLEU2RnFDakU7RUFyQ0Q7SUFJSSxrQkFBaUI7SUFDakIsa0JBQWlCO0lBQ2pCLGlCQUFnQjtJQUNoQixrQkFBaUI7SUFDakIsbUJBQWtCO0lBQ2xCLG1CQUFrQixFQWVuQjtJQXhCSDtNQWNNLGdCQUFlO01BQ2YsaUJBQWdCO01BQ2hCLHdCQUF1QjtNQUN2QixtQkFBa0IsRUFDbkI7SUFsQkw7TUFxQk0sZ0JBQWU7TUFDZixpQkFBZ0IsRUFDakI7RUF2Qkw7SUEyQkksaUJBQWdCO0lBQ2hCLGlCQUFnQjtJQUNoQixxQkFBb0I7SUFDcEIsa0JBQWlCO0lBQ2pCLG1CQUFrQixFQUtuQjtJQUhDO01BakNKO1FBa0NNLG9CQUFtQixFQUV0QixFQUFBOztBQ3BDSDtFQUdJLGVBQWM7RUFDZCw2RDlGSjhEO0U4Rks5RCxpQkFBZ0IsRUFDakI7O0FBTkg7RUFTSSxnQkFBZTtFQUNmLGlCQUFnQjtFQUNoQixtQkFBa0IsRUFLbkI7RUFoQkg7SUFjTSwwQkFBeUIsRUFDMUI7O0FBZkw7RUFtQkksOEJBQTZCO0VBQzdCLGVBQWM7RUFDZCxxQkFBb0I7RUFDcEIsbUJBQWtCO0VBQ2xCLG1CQUFrQixFQUtuQjtFQUhDO0lBekJKO01BMEJNLG1CQUFrQixFQUVyQixFQUFBOztBQTVCSDtFQStCSSxnQkFBZTtFQUNmLGlCQUFnQjtFQUNoQix3QkFBdUIsRUFDeEI7O0FBbENIO0VBcUNJLGVBQWM7RUFDZCxnQkFBZTtFQUNmLHVCQUFzQjtFQUN0QixpQkFBZ0IsRUFDakI7O0FBekNIO0VBNENJLHVCQUFtQjtNQUFuQixvQkFBbUI7RUFDbkIscUJBQWE7RUFBYixjQUFhO0VBQ2Isc0JBQXVCO01BQXZCLHdCQUF1QjtFQUN2QixxQkFBb0I7RUFDcEIsbUJBQWtCO0VBQ2xCLFdBQVUsRUFDWDs7QUFsREg7RUFxREksaUJBQWdCO0VBQ2hCLFlBQVc7RUFDWCxtQkFBa0I7RUFDbEIsV0FBVSxFQXFCWDtFQTdFSDtJQTJETSxnQkFBZSxFQUNoQjtFQTVETDtJQStETSwrQkFBc0I7WUFBdEIsdUJBQXNCLEVBQ3ZCO0VBaEVMO0lBbUVNLG9EQUEyQztZQUEzQyw0Q0FBMkMsRUFDNUM7RUFwRUw7SUF1RU0sZUFBYyxFQUNmO0VBeEVMO0lBMkVNLGNBQWEsRUFDZDs7QUE1RUw7RUFnRkksY0FBYTtFQUNiLFVBQVM7RUFDVCxtQkFBa0I7RUFDbEIsU0FBUTtFQUNSLGtEQUF5QztVQUF6QywwQ0FBeUM7RUFDekMsNEVBQW1FO0VBQW5FLG9FQUFtRTtFQUFuRSxxSUFBbUU7RUFDbkUsYUFBWTtFQUNaLFdBQVUsRUFDWDs7QUF4Rkg7RUEyRkksaUVBQWdFO0VBQ2hFLG1DQUFrQztFQUNsQyw2QkFBNEI7RUFDNUIseUJBQXdCO0VBQ3hCLG9CQUFtQjtFQUNuQixnRkFBeUU7RUFDekUsVUFBUztFQUNULGlCQUFnQjtFQUNoQix1QkFBc0I7RUFDdEIsbUJBQWtCO0VBQ2xCLDRCQUFtQjtVQUFuQixvQkFBbUI7RUFDbkIsbUVBQTBEO0VBQTFELDJEQUEwRDtFQUExRCxtSEFBMEQsRUFTM0Q7RUEvR0g7SUF5R00sYUFBWTtJQUNaLFFBQU87SUFDUCxtQkFBa0I7SUFDbEIsT0FBTTtJQUNOLFlBQVcsRUFDWjs7QUE5R0w7RUFrSEksdUJBQW1CO01BQW5CLG9CQUFtQjtFQUNuQixxQkFBYTtFQUFiLGNBQWE7RUFDYixpQkFBZ0I7RUFDaEIsb0JBQW1CO0VBQ25CLGFBQVk7RUFDWixtQkFBa0IsRUFxQm5CO0VBNUlIO0lBMEhNLDBCQUF5QjtJQUN6QixZQUFXO0lBQ1gsWUFBVztJQUNYLFVBQVM7SUFDVCxtQkFBa0I7SUFDbEIsU0FBUTtJQUNSLFdBQVUsRUFDWDtFQUVEO0lBbklKO01Bb0lNLDJCQUFzQjtVQUF0Qix1QkFBc0I7TUFDdEIsaUJBQWdCO01BQ2hCLG1CQUFrQixFQU1yQjtNQTVJSDtRQXlJUSxjQUFhLEVBQ2QsRUFBQTs7QUExSVA7RUErSUksWUFBTztNQUFQLFFBQU8sRUFpQlI7RUFoS0g7SUFrSk0sa0JBQWlCLEVBQ2xCO0VBbkpMO0lBc0pNLGlCQUFnQixFQUNqQjtFQUVEO0lBekpKO01BNEpRLGVBQWM7TUFDZCxnQkFBZSxFQUNoQixFQUFBOztBQTlKUDtFQW1LSSxnQkFBZTtFQUNmLGlCQUFnQjtFQUNoQix3QkFBdUI7RUFDdkIsaUJBQWdCLEVBQ2pCOztBQXZLSDtFQTBLSSxhQUFZO0VBQ1osZ0JBQWU7RUFDZixVQUFTO0VBQ1QsV0FBVSxFQUtYO0VBSEM7SUEvS0o7TUFnTE0sa0JBQWlCLEVBRXBCLEVBQUE7O0FBbExIO0VBcUxJLGVBQWM7RUFDZCxlQUFjO0VBQ2Qsa0JBQWlCO0VBQ2pCLGtCQUFpQixFQWNsQjtFQXRNSDtJQTJMTSxjQUFhLEVBQ2Q7RUE1TEw7SUErTE0sbUJBQWtCO0lBQ2xCLGFBQVksRUFDYjtFQUVEO0lBbk1KO01Bb01NLG1CQUFrQixFQUVyQixFQUFBOztBQXRNSDtFQXlNSSxlQUFjO0VBQ2QsZ0JBQWU7RUFDZix3QkFBdUI7RUFDdkIsbUJBQWtCO0VBQ2xCLGdCQUFlO0VBQ2YsZ0JBQWUsRUFDaEI7O0FBL01IO0VBa05JLGVBQWM7RUFDZCxpQkFBZ0I7RUFDaEIsaUJBQWdCO0VBQ2hCLHNCQUFxQixFQUN0Qjs7QUF0Tkg7O0VBMk5NLGlDQUFnQyxFQUNqQzs7QUE1Tkw7RUFnT0kscUJBQWE7RUFBYixjQUFhO0VBQ2IsZ0JBQWU7RUFDZixpQkFBZ0I7RUFDaEIsd0JBQXVCLEVBQ3hCOztBQXBPSDtFQXVPSSxrRUFBaUU7RUFDakUseUJBQXdCO0VBQ3hCLDZCQUE0QjtFQUM1QixzQkFBcUI7RUFDckIsZUFBYztFQUNkLG1CQUFjO01BQWQsZUFBYztFQUNkLGFBQVk7RUFDWixrQkFBaUI7RUFDakIsWUFBVyxFQVdaO0VBMVBIO0lBaVBrQix5QkFBd0IsRUFBSTtFQWpQOUM7SUFrUGtCLDZCQUFnQyxFQUFJO0VBbFB0RDtJQW1Qa0IsNkJBQWdDLEVBQUk7RUFuUHREO0lBb1BrQiw4QkFBZ0MsRUFBSTtFQXBQdEQ7SUFxUGtCLDhCQUFnQyxFQUFJO0VBclB0RDtJQXNQa0IsOEJBQWdDLEVBQUk7RUF0UHREO0lBdVBrQiw4QkFBZ0MsRUFBSTtFQXZQdEQ7SUF3UGtCLDhCQUFnQyxFQUFJO0VBeFB0RDtJQXlQa0IsOEJBQWdDLEVBQUk7O0FBelB0RDtFQTZQSSxlQUFjO0VBQ2Qsa0JBQWlCO0VBQ2pCLHNCQUFxQixFQUN0Qjs7QUFoUUg7RUFtUUksZUFBYztFQUNkLGtCQUFpQixFQUNsQjs7QUFyUUg7RUF3UUksaUJBQWdCO0VBQ2hCLFVBQVM7RUFDVCxXQUFVLEVBQ1g7O0FBM1FIO0VBOFFJLG1CQUFrQixFQUNuQjs7QUEvUUg7RUFrUkksdUJBQW1CO01BQW5CLG9CQUFtQjtFQUNuQixxQkFBYTtFQUFiLGNBQWE7RUFDYiwyQkFBc0I7TUFBdEIsdUJBQXNCLEVBQ3ZCOztBQXJSSDtFQXdSSSxZQUFXLEVBQ1o7O0FBelJIO0VBNFJJLFlBQVc7RUFDWCxrQkFBaUIsRUFDbEI7O0FBOVJIO0VBaVNJLHVCQUFtQjtNQUFuQixvQkFBbUI7RUFDbkIsNEJBQW9CO0VBQXBCLHFCQUFvQjtFQUNwQixnQkFBZTtFQUNmLGlCQUFnQjtFQUNoQix3QkFBdUI7RUFDdkIsYUFBWSxFQUNiOztBQXZTSDtFQTBTSSxrQkFBaUI7RUFDakIsc0JBQXFCO0VBQ3JCLFdBQVUsRUFDWDs7QUE3U0g7RUFnVEksZUFBYztFQUNkLGlCQUFnQjtFQUNoQixrQkFBaUIsRUFLbEI7RUF2VEg7SUFxVE0sYUFBWSxFQUNiOztBQUlEO0VBMVRKO0lBNFRRLHFCQUFhO0lBQWIsY0FBYSxFQUNkO0VBN1RQO0lBZ1VRLFlBQU87UUFBUCxRQUFPO0lBQ1AsbUJBQWtCLEVBQ25CO0VBbFVQO0lBcVVRLDJCQUFzQjtRQUF0Qix1QkFBc0IsRUFDdkI7RUF0VVA7SUF5VVEsc0JBQXFCLEVBQ3RCLEVBQUE7O0FBMVVQOztFQWdWSSxzQkFBcUIsRUFnQnRCO0VBaFdIOztJQW1WTSxxQkFBYTtJQUFiLGNBQWE7SUFDYix1QkFBbUI7UUFBbkIsb0JBQW1CLEVBS3BCO0lBSEM7TUF0Vk47O1FBdVZRLDJCQUFzQjtZQUF0Qix1QkFBc0IsRUFFekIsRUFBQTtFQXpWTDs7SUE0Vk0saUJBQWdCO0lBQ2hCLGlCQUFnQjtJQUNoQixtQkFBa0IsRUFDbkI7O0FBSUQ7RUFuV0o7SUFvV00sZUFBYztJQUNkLG1CQUFrQixFQUVyQixFQUFBOztBQUdDO0VBMVdKO0lBMldNLGtCQUFRO1FBQVIsU0FBUTtJQUNSLGtCQUFpQjtJQUNqQixnQkFBZSxFQUVsQixFQUFBOztBQS9XSDtFQWtYSSxxQkFBYTtFQUFiLGNBQWE7RUFDYiwyQkFBc0I7TUFBdEIsdUJBQXNCLEVBT3ZCO0VBTEM7SUFyWEo7TUFzWE0sdUJBQW1CO1VBQW5CLG9CQUFtQjtNQUNuQix3QkFBbUI7VUFBbkIsb0JBQW1CO01BQ25CLHVCQUE4QjtVQUE5QiwrQkFBOEIsRUFFakMsRUFBQTs7QUExWEg7RUE2WEksa0JBQWlCO0VBQ2pCLHVCQUFzQjtFQUN0QixrQkFBaUI7RUFDakIsMEJBQXlCLEVBSzFCO0VBSEM7SUFsWUo7TUFtWU0sY0FBYSxFQUVoQixFQUFBOztBQXJZSDtFQXdZSSxzQkFBcUIsRUFDdEI7O0FBellIO0VBNFlJLDBCQUF5QjtFQUN6QixvQkFBbUI7RUFDbkIseUVBQWtFO0VBQ2xFLGVBQWM7RUFDZCxxQkFBYTtFQUFiLGNBQWE7RUFDYiwyQkFBc0I7TUFBdEIsdUJBQXNCO0VBQ3RCLGdCQUFlO0VBQ2YsaUJBQWdCO0VBQ2hCLGtCQUFpQjtFQUNqQixjQUFhO0VBQ2IsaUNBQXdCO1VBQXhCLHlCQUF3QjtFQUN4QixnRUFBdUQ7RUFBdkQsd0RBQXVEO0VBQXZELHNGQUF1RDtFQUN2RCxhQUFZLEVBVWI7RUFsYUg7SUEyWk0sc0JBQXFCLEVBQ3RCO0VBNVpMO0lBK1pNLDJDQUF1QztJQUN2QyxvQ0FBMkI7WUFBM0IsNEJBQTJCLEVBQzVCOztBQWphTDtFQXFhSSxnQ0FBK0I7RUFDL0IsaUJBQWdCO0VBQ2hCLHVCQUFzQjtFQUN0QiwwQkFBeUIsRUFDMUI7O0FBemFIO0VBNGFJLHlCQUF3QjtFQUN4QixpQkFBZ0I7RUFDaEIsZ0JBQWUsRUFDaEI7O0FBL2FIO0VBa2JJLGlCQUFnQjtFQUNoQix1QkFBc0I7RUFDdEIsaUJBQWdCO0VBQ2hCLDBCQUF5QixFQUMxQjs7QUF0Ykg7RUF5YkkscUJBQWE7RUFBYixjQUFhO0VBQ2Isb0JBQWU7TUFBZixnQkFBZSxFQXFCaEI7RUEvY0g7SUE2Yk0sd0JBQXVCLEVBU3hCO0lBdGNMO01BK2J1QiwwQkFBeUIsRUFBSTtJQS9icEQ7TUFnY3VCLDBCQUF5QixFQUFJO0lBaGNwRDtNQWljdUIsMEJBQXlCLEVBQUk7SUFqY3BEO01Ba2N1QiwwQkFBeUIsRUFBSTtJQWxjcEQ7TUFtY3VCLDBCQUF5QixFQUFJO0lBbmNwRDtNQW9jdUIsMEJBQXlCLEVBQUk7SUFwY3BEO01BcWN1QiwwQkFBeUIsRUFBSTtFQUdoRDtJQXhjSjtNQXljTSxzQkFBdUI7VUFBdkIsd0JBQXVCLEVBTTFCO01BL2NIO1FBNGNRLG9CQUFtQixFQUNwQixFQUFBOztBQTdjUDtFQWtkSSxlQUFjO0VBQ2QscUJBQWE7RUFBYixjQUFhO0VBQ2IsZ0JBQWU7RUFDZixpQkFBZ0I7RUFDaEIsd0JBQXVCLEVBS3hCO0VBSEM7SUF4ZEo7TUF5ZE0sMkJBQXNCO1VBQXRCLHVCQUFzQixFQUV6QixFQUFBOztBQTNkSDtFQThkSSxpQkFBZ0I7RUFDaEIsbUJBQWtCLEVBQ25COztBQWhlSDtFQW1lSSxxQkFBYTtFQUFiLGNBQWE7RUFDYixZQUFPO01BQVAsUUFBTztFQUNQLGNBQWEsRUE0QmQ7RUExQkM7SUF2ZUo7TUF3ZU0sY0FBYSxFQXlCaEIsRUFBQTtFQXJCRztJQTVlTjtNQTZlUSxtQkFBeUI7VUFBekIsMEJBQXlCLEVBRTVCLEVBQUE7RUEvZUw7SUFrZk0sMEJBQXlCLEVBQzFCO0VBbmZMO0lBc2ZNLDBCQUF5QjtJQUN6QixlQUFjLEVBQ2Y7RUF4Zkw7SUEyZk0sMEJBQXlCLEVBQzFCO0VBNWZMO0lBK2ZNLDBCQUF5QixFQUMxQjs7QUFoZ0JMO0VBb2dCSSxnRUFBK0Q7RUFDL0QseUJBQXdCO0VBQ3hCLHNCQUFxQjtFQUNyQiw2QkFBNEI7RUFDNUIsZUFBYztFQUNkLGFBQVk7RUFDWixtQkFBa0I7RUFDbEIsYUFBWSxFQWlCYjtFQTVoQkg7SUE4Z0JNLHlCQUF3QixFQUN6QjtFQS9nQkw7SUFraEJNLDZCQUE0QixFQUM3QjtFQW5oQkw7SUFzaEJNLDZCQUE0QixFQUM3QjtFQXZoQkw7SUEwaEJNLDhCQUE2QixFQUM5Qjs7QUEzaEJMO0VBK2hCSSxhQUFZO0VBQ1osbUJBQWtCO0VBQ2xCLGlCQUFnQjtFQUNoQixVQUFTO0VBQ1QsV0FBVSxFQUNYOztBQXBpQkg7RUF1aUJJLGVBQWM7RUFDZCxpQkFBZ0I7RUFDaEIsZ0JBQWU7RUFDZixrQkFBaUIsRUFVbEI7RUFwakJIO0lBNmlCTSxhQUFZO0lBQ1osb0JBQW1CLEVBQ3BCO0VBL2lCTDtJQWtqQk0sY0FBYSxFQUNkOztBQW5qQkw7RUF1akJJLDJEQUEwRDtFQUMxRCxnQkFBZSxFQUNoQjs7QUF6akJIO0VBNGpCSSx1QkFBbUI7TUFBbkIsb0JBQW1CO0VBQ25CLHFCQUFhO0VBQWIsY0FBYTtFQUNiLHVCQUE4QjtNQUE5QiwrQkFBOEIsRUFXL0I7RUF6a0JIO0lBa2tCTSxjQUFhLEVBQ2Q7RUFFRDtJQXJrQko7TUFza0JNLDJCQUFzQjtVQUF0Qix1QkFBc0I7TUFDdEIsbUJBQWtCLEVBRXJCLEVBQUE7O0FBemtCSDtFQTRrQkksZUFBYyxFQUNmOztBQTdrQkg7RUFnbEJJLDBCQUF5QixFQUMxQjs7QUFqbEJIOztFQXFsQkksaUJBQWdCO0VBQ2hCLHdCQUF1QixFQUN4Qjs7QUF2bEJIO0VBMGxCSSxlQUFjO0VBQ2QsZ0JBQWUsRUFDaEI7O0FBNWxCSDtFQStsQkksZUFBYztFQUNkLGdCQUFlLEVBS2hCO0VBSEM7SUFsbUJKO01BbW1CTSxtQkFBa0IsRUFFckIsRUFBQTs7QUNybUJIOztFQUdJLCtEL0ZGaUUsRStGVWxFO0VBWEg7Ozs7Ozs7O0lBU00sNkQvRlQ0RCxFK0ZVN0Q7O0FBVkw7RUFlSSxpQkFBZ0I7RUFDaEIsa0JBQWlCO0VBQ2pCLHNCQUFxQixFQVl0QjtFQTdCSDtJQW9CTSxrQkFBaUI7SUFDakIsZ0JBQWU7SUFDZixrQkFBaUI7SUFDakIsd0JBQXVCO0lBQ3ZCLGlCQUFnQjtJQUNoQixxRUFBb0U7SUFDcEUsc0JBQXFCO0lBQ3JCLGVBQWMsRUFDZjs7QUE1Qkw7RUFpQ00sc0JBQXFCO0VBQ3JCLHdCQUF1QixFQU14QjtFQXhDTDtJQXFDUSxlL0Y1QmU7SStGNkJmLFlBQVcsRUFDWjs7QUF2Q1A7RUEyQ00sbUJBQWtCO0VBQ2xCLHNCQUFxQixFQUN0Qjs7QUE3Q0w7RUFnRE0scUJBQWE7RUFBYixjQUFhO0VBQ2IsdUJBQW1CO01BQW5CLG9CQUFtQjtFQUNuQixpQkFBZ0IsRUFNakI7RUF4REw7SUFzRFEsY0FBYSxFQUNkOztBQXZEUDtFQTJETSxlQUFjLEVBQ2Y7O0FBNURMO0VBOERzQixtQkFBa0IsRUFBSTs7QUE5RDVDO0VBK0R1QixvQkFBbUIsRUFBSTs7QUEvRDlDO0VBa0VNLFlBQU87TUFBUCxRQUFPLEVBQ1I7O0FBbkVMO0VBc0VNLDJCQUFzQjtNQUF0Qix1QkFBc0I7RUFDdEIsbUJBQWtCO0VBQ2xCLGlCQUFnQixFQUNqQjs7QUF6RUw7RUE0RU0sZ0JBQWU7RUFDZixrQkFBaUI7RUFDakIsaUJBQWdCO0VBQ2hCLHdCQUF1QjtFQUN2QixvQkFBbUI7RUFDbkIsY0FBYTtFQUNiLGVBQWMsRUFDZjs7QUFuRkw7RUFzRk0sZ0JBQWU7RUFDZixrQkFBaUI7RUFDakIsdUJBQXNCO0VBQ3RCLG9CQUFtQixFQVdwQjtFQXBHTDtJQTRGUSxnQkFBZTtJQUNmLGtCQUFpQjtJQUNqQixzQkFBcUIsRUFDdEI7RUEvRlA7SUFrR1EsaUJBQWdCLEVBQ2pCOztBQW5HUDtFQXVHTSx5REFBd0Q7RUFDeEQscUJBQW9CLEVBaUNyQjtFQXpJTDtJQTJHUSxzQkFBcUIsRUFLdEI7SUFIQztNQTdHUjtRQThHVSxxQkFBb0IsRUFFdkIsRUFBQTtFQWhIUDtJQW1IUSxvQkFBbUI7SUFDbkIsa0JBQWlCLEVBQ2xCO0VBckhQO0lBd0hRLFdBQVU7SUFDVixxQkFBYTtJQUFiLGNBQWE7SUFDYixpQkFBZ0I7SUFDaEIsaUJBQWdCLEVBQ2pCO0VBNUhQO0lBK0hRLGlCQUFnQjtJQUNoQixrRUFBaUU7SUFDakUsc0JBQXFCO0lBQ3JCLFlBQVc7SUFDWCxhQUFZO0lBQ1osbUJBQWtCLEVBSW5CO0lBeElQO01Bc0lnQiw2QkFBNEIsRUFBSTtJQXRJaEQ7TUF1SWUsNkJBQTRCLEVBQUk7O0FBdkkvQztFQTRJTSx5REFBd0Q7RUFDeEQsc0JBQXFCLEVBU3RCO0VBdEpMO0lBZ0pRLG1CQUFrQixFQUNuQjtFQWpKUDtJQW9KUSxtQkFBa0IsRUFDbkI7O0FBckpQO0VBeUpNLHlEQUF3RDtFQUN4RCxtQkFBa0I7RUFDbEIsc0JBQXFCLEVBYXRCO0VBeEtMO0lBOEpRLG9CQUFtQjtJQUNuQixrQkFBaUI7SUFDakIsa0JBQWlCLEVBQ2xCO0VBaktQO0lBb0tRLGdCQUFlO0lBQ2Ysb0JBQW1CO0lBQ25CLGtCQUFpQixFQUNsQjs7QUF2S1A7RUEyS00sMkdBRThDO0VBQzlDLDZCQUE0QjtFQUM1Qiw2QkFBNEI7RUFDNUIsMkJBQTBCO0VBQzFCLG1CQUFrQjtFQUNsQixzQkFBcUIsRUFnRXRCO0VBbFBMO0lBcUxRLGtCQUFpQixFQUNsQjtFQXRMUDtJQXlMUSxtQkFBa0I7SUFDbEIsb0JBQW1CLEVBS3BCO0lBSEM7TUE1TFI7UUE2TFUsbUJBQWtCLEVBRXJCLEVBQUE7RUEvTFA7SUFrTVEsV0FBVTtJQUNWLFVBQVMsRUFDVjtFQXBNUDtJQXVNUSxpQkFBZ0I7SUFDaEIsbUJBQWtCO0lBQ2xCLGVBQWM7SUFDZCxvQkFBbUI7SUFDbkIsZUFBYyxFQXNDZjtJQWpQUDtNQThNVSx3RUFBdUU7TUFDdkUsc0JBQXFCO01BQ3JCLGFBQVk7TUFDWixZQUFXO01BQ1gsWUFBVztNQUNYLG1CQUFrQjtNQUNsQixzQkFBcUI7TUFDckIsUUFBTyxFQUNSO0lBdE5UO01BeU5VLGNBQWEsRUFDZDtJQTFOVDtNQTZOVSxpQkFBZ0IsRUFDakI7SUE5TlQ7TUFpT1UsZUFBYztNQUNkLGdCQUFlO01BQ2YsaUJBQWdCO01BQ2hCLGVBQWM7TUFDZCw2RC9Gck93RDtNK0ZzT3hELGtCQUFpQixFQUNsQjtJQXZPVDtNQTBPVSxlQUFjO01BQ2QsZ0JBQWUsRUFDaEI7SUE1T1Q7TUE4T2lDLDZCQUE0QixFQUFJO0lBOU9qRTtNQStPaUMsOEJBQTZCLEVBQUk7SUEvT2xFO01BZ1BpQyw4QkFBNkIsRUFBSTs7QUFoUGxFO0VBcVBNLDRHQUU4QztFQUM5Qyw2QkFBNEI7RUFDNUIsNkJBQTRCO0VBQzVCLDJCQUEwQjtFQUMxQixzQkFBcUIsRUFXdEI7RUF0UUw7SUE4UFEsMEJBQXlCO0lBQ3pCLGdCQUFlO0lBQ2YsaUJBQWdCO0lBQ2hCLHNCQUFxQjtJQUNyQixjQUFhO0lBQ2Isb0JBQW1CO0lBQ25CLGVBQWMsRUFDZjs7QUFHSDtFQXhRSjtJQTBRUSxpQkFBZ0IsRUFDakI7RUEzUVA7SUE4UVEsa0JBQWlCLEVBQ2xCLEVBQUE7O0FBSUw7RUFuUkY7SUFxUk0scUJBQW9CLEVBQ3JCO0VBdFJMO0lBMFJRLFVBQVMsRUFDVjtFQTNSUDtJQThSUSxrQkFBaUI7SUFDakIscUJBQW9CLEVBVXJCO0lBelNQO01Ba1NVLDJCQUFzQjtVQUF0Qix1QkFBc0IsRUFFdkI7SUFwU1Q7TUF1U1UsbUNBQThCO1VBQTlCLCtCQUE4QixFQUMvQjtFQXhTVDtJQTRTUSx1QkFBbUI7UUFBbkIsb0JBQW1CO0lBQ25CLHNCQUF1QjtRQUF2Qix3QkFBdUI7SUFDdkIsbUJBQWtCLEVBQ25CO0VBL1NQO0lBbVRVLFVBQVMsRUFDVjtFQXBUVDtJQXVUVSxzQkFBdUI7UUFBdkIsd0JBQXVCLEVBQ3hCO0VBeFRUO0lBNFRRLHFCQUFvQixFQUtyQjtJQWpVUDtNQStUVSxpQkFBZ0IsRUFDakI7RUFoVVQ7SUFvVVEsa0JBQWlCO0lBQ2pCLHFCQUFvQixFQUtyQjtJQTFVUDtNQXdVVSxVQUFTLEVBQ1Y7RUF6VVQ7SUE2VVEsa0JBQWlCO0lBQ2pCLHFCQUFvQixFQUtyQjtJQW5WUDtNQWlWVSxvQkFBbUIsRUFDcEI7RUFsVlQ7SUFzVlEscUJBQW9CLEVBQ3JCLEVBQUEiLCJmaWxlIjoic3R5bGVzLmNzcyIsInNvdXJjZXNDb250ZW50IjpbIkBjaGFyc2V0IFwiVVRGLThcIjtcbi8qIVxuICBJb25pY29ucywgdjMuMC4wLWFscGhhLjNcbiAgQ3JlYXRlZCBieSBCZW4gU3BlcnJ5IGZvciB0aGUgSW9uaWMgRnJhbWV3b3JrLCBodHRwOi8vaW9uaWNvbnMuY29tL1xuICBodHRwczovL3R3aXR0ZXIuY29tL2JlbmpzcGVycnkgIGh0dHBzOi8vdHdpdHRlci5jb20vaW9uaWNmcmFtZXdvcmtcbiAgTUlUIExpY2Vuc2U6IGh0dHBzOi8vZ2l0aHViLmNvbS9kcmlmdHljby9pb25pY29uc1xuXG4gIEFuZHJvaWQtc3R5bGUgaWNvbnMgb3JpZ2luYWxseSBidWlsdCBieSBHb29nbGXigJlzXG4gIE1hdGVyaWFsIERlc2lnbiBJY29uczogaHR0cHM6Ly9naXRodWIuY29tL2dvb2dsZS9tYXRlcmlhbC1kZXNpZ24taWNvbnNcbiAgdXNlZCB1bmRlciBDQyBCWSBodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9saWNlbnNlcy9ieS80LjAvXG4gIE1vZGlmaWVkIGljb25zIHRvIGZpdCBpb25pY29u4oCZcyBncmlkIGZyb20gb3JpZ2luYWwuXG4qL1xuQGltcG9ydCB1cmwoXCJodHRwczovL2ZvbnRzLmdvb2dsZWFwaXMuY29tL2Nzcz9mYW1pbHk9Um9ib3RvK01vbm9cIik7XG5AZm9udC1mYWNlIHtcbiAgZm9udC1mYW1pbHk6IFwiSW9uaWNvbnNcIjtcbiAgc3JjOiB1cmwoXCIuLi9mb250cy9pb25pY29ucy5lb3Q/dj0zLjAuMC1hbHBoYS4zXCIpO1xuICBzcmM6IHVybChcIi4uL2ZvbnRzL2lvbmljb25zLmVvdD92PTMuMC4wLWFscGhhLjMjaWVmaXhcIikgZm9ybWF0KFwiZW1iZWRkZWQtb3BlbnR5cGVcIiksIHVybChcIi4uL2ZvbnRzL2lvbmljb25zLndvZmYyP3Y9My4wLjAtYWxwaGEuM1wiKSBmb3JtYXQoXCJ3b2ZmMlwiKSwgdXJsKFwiLi4vZm9udHMvaW9uaWNvbnMud29mZj92PTMuMC4wLWFscGhhLjNcIikgZm9ybWF0KFwid29mZlwiKSwgdXJsKFwiLi4vZm9udHMvaW9uaWNvbnMudHRmP3Y9My4wLjAtYWxwaGEuM1wiKSBmb3JtYXQoXCJ0cnVldHlwZVwiKSwgdXJsKFwiLi4vZm9udHMvaW9uaWNvbnMuc3ZnP3Y9My4wLjAtYWxwaGEuMyNJb25pY29uc1wiKSBmb3JtYXQoXCJzdmdcIik7XG4gIGZvbnQtd2VpZ2h0OiBub3JtYWw7XG4gIGZvbnQtc3R5bGU6IG5vcm1hbDsgfVxuXG4uaW9uLCAuaW9uaWNvbnMsXG4uaW9uLWlvcy1hZGQ6YmVmb3JlLFxuLmlvbi1pb3MtYWRkLWNpcmNsZTpiZWZvcmUsXG4uaW9uLWlvcy1hZGQtY2lyY2xlLW91dGxpbmU6YmVmb3JlLFxuLmlvbi1pb3MtYWRkLW91dGxpbmU6YmVmb3JlLFxuLmlvbi1pb3MtYWxhcm06YmVmb3JlLFxuLmlvbi1pb3MtYWxhcm0tb3V0bGluZTpiZWZvcmUsXG4uaW9uLWlvcy1hbGJ1bXM6YmVmb3JlLFxuLmlvbi1pb3MtYWxidW1zLW91dGxpbmU6YmVmb3JlLFxuLmlvbi1pb3MtYWxlcnQ6YmVmb3JlLFxuLmlvbi1pb3MtYWxlcnQtb3V0bGluZTpiZWZvcmUsXG4uaW9uLWlvcy1hbWVyaWNhbi1mb290YmFsbDpiZWZvcmUsXG4uaW9uLWlvcy1hbWVyaWNhbi1mb290YmFsbC1vdXRsaW5lOmJlZm9yZSxcbi5pb24taW9zLWFuYWx5dGljczpiZWZvcmUsXG4uaW9uLWlvcy1hbmFseXRpY3Mtb3V0bGluZTpiZWZvcmUsXG4uaW9uLWlvcy1hcGVydHVyZTpiZWZvcmUsXG4uaW9uLWlvcy1hcGVydHVyZS1vdXRsaW5lOmJlZm9yZSxcbi5pb24taW9zLWFwcHM6YmVmb3JlLFxuLmlvbi1pb3MtYXBwcy1vdXRsaW5lOmJlZm9yZSxcbi5pb24taW9zLWFwcHN0b3JlOmJlZm9yZSxcbi5pb24taW9zLWFwcHN0b3JlLW91dGxpbmU6YmVmb3JlLFxuLmlvbi1pb3MtYXJjaGl2ZTpiZWZvcmUsXG4uaW9uLWlvcy1hcmNoaXZlLW91dGxpbmU6YmVmb3JlLFxuLmlvbi1pb3MtYXJyb3ctYmFjazpiZWZvcmUsXG4uaW9uLWlvcy1hcnJvdy1iYWNrLW91dGxpbmU6YmVmb3JlLFxuLmlvbi1pb3MtYXJyb3ctZG93bjpiZWZvcmUsXG4uaW9uLWlvcy1hcnJvdy1kb3duLW91dGxpbmU6YmVmb3JlLFxuLmlvbi1pb3MtYXJyb3ctZHJvcGRvd246YmVmb3JlLFxuLmlvbi1pb3MtYXJyb3ctZHJvcGRvd24tY2lyY2xlOmJlZm9yZSxcbi5pb24taW9zLWFycm93LWRyb3Bkb3duLWNpcmNsZS1vdXRsaW5lOmJlZm9yZSxcbi5pb24taW9zLWFycm93LWRyb3Bkb3duLW91dGxpbmU6YmVmb3JlLFxuLmlvbi1pb3MtYXJyb3ctZHJvcGxlZnQ6YmVmb3JlLFxuLmlvbi1pb3MtYXJyb3ctZHJvcGxlZnQtY2lyY2xlOmJlZm9yZSxcbi5pb24taW9zLWFycm93LWRyb3BsZWZ0LWNpcmNsZS1vdXRsaW5lOmJlZm9yZSxcbi5pb24taW9zLWFycm93LWRyb3BsZWZ0LW91dGxpbmU6YmVmb3JlLFxuLmlvbi1pb3MtYXJyb3ctZHJvcHJpZ2h0OmJlZm9yZSxcbi5pb24taW9zLWFycm93LWRyb3ByaWdodC1jaXJjbGU6YmVmb3JlLFxuLmlvbi1pb3MtYXJyb3ctZHJvcHJpZ2h0LWNpcmNsZS1vdXRsaW5lOmJlZm9yZSxcbi5pb24taW9zLWFycm93LWRyb3ByaWdodC1vdXRsaW5lOmJlZm9yZSxcbi5pb24taW9zLWFycm93LWRyb3B1cDpiZWZvcmUsXG4uaW9uLWlvcy1hcnJvdy1kcm9wdXAtY2lyY2xlOmJlZm9yZSxcbi5pb24taW9zLWFycm93LWRyb3B1cC1jaXJjbGUtb3V0bGluZTpiZWZvcmUsXG4uaW9uLWlvcy1hcnJvdy1kcm9wdXAtb3V0bGluZTpiZWZvcmUsXG4uaW9uLWlvcy1hcnJvdy1mb3J3YXJkOmJlZm9yZSxcbi5pb24taW9zLWFycm93LWZvcndhcmQtb3V0bGluZTpiZWZvcmUsXG4uaW9uLWlvcy1hcnJvdy1yb3VuZC1iYWNrOmJlZm9yZSxcbi5pb24taW9zLWFycm93LXJvdW5kLWJhY2stb3V0bGluZTpiZWZvcmUsXG4uaW9uLWlvcy1hcnJvdy1yb3VuZC1kb3duOmJlZm9yZSxcbi5pb24taW9zLWFycm93LXJvdW5kLWRvd24tb3V0bGluZTpiZWZvcmUsXG4uaW9uLWlvcy1hcnJvdy1yb3VuZC1mb3J3YXJkOmJlZm9yZSxcbi5pb24taW9zLWFycm93LXJvdW5kLWZvcndhcmQtb3V0bGluZTpiZWZvcmUsXG4uaW9uLWlvcy1hcnJvdy1yb3VuZC11cDpiZWZvcmUsXG4uaW9uLWlvcy1hcnJvdy1yb3VuZC11cC1vdXRsaW5lOmJlZm9yZSxcbi5pb24taW9zLWFycm93LXVwOmJlZm9yZSxcbi5pb24taW9zLWFycm93LXVwLW91dGxpbmU6YmVmb3JlLFxuLmlvbi1pb3MtYXQ6YmVmb3JlLFxuLmlvbi1pb3MtYXQtb3V0bGluZTpiZWZvcmUsXG4uaW9uLWlvcy1hdHRhY2g6YmVmb3JlLFxuLmlvbi1pb3MtYXR0YWNoLW91dGxpbmU6YmVmb3JlLFxuLmlvbi1pb3MtYmFja3NwYWNlOmJlZm9yZSxcbi5pb24taW9zLWJhY2tzcGFjZS1vdXRsaW5lOmJlZm9yZSxcbi5pb24taW9zLWJhcmNvZGU6YmVmb3JlLFxuLmlvbi1pb3MtYmFyY29kZS1vdXRsaW5lOmJlZm9yZSxcbi5pb24taW9zLWJhc2ViYWxsOmJlZm9yZSxcbi5pb24taW9zLWJhc2ViYWxsLW91dGxpbmU6YmVmb3JlLFxuLmlvbi1pb3MtYmFza2V0OmJlZm9yZSxcbi5pb24taW9zLWJhc2tldC1vdXRsaW5lOmJlZm9yZSxcbi5pb24taW9zLWJhc2tldGJhbGw6YmVmb3JlLFxuLmlvbi1pb3MtYmFza2V0YmFsbC1vdXRsaW5lOmJlZm9yZSxcbi5pb24taW9zLWJhdHRlcnktY2hhcmdpbmc6YmVmb3JlLFxuLmlvbi1pb3MtYmF0dGVyeS1jaGFyZ2luZy1vdXRsaW5lOmJlZm9yZSxcbi5pb24taW9zLWJhdHRlcnktZGVhZDpiZWZvcmUsXG4uaW9uLWlvcy1iYXR0ZXJ5LWRlYWQtb3V0bGluZTpiZWZvcmUsXG4uaW9uLWlvcy1iYXR0ZXJ5LWZ1bGw6YmVmb3JlLFxuLmlvbi1pb3MtYmF0dGVyeS1mdWxsLW91dGxpbmU6YmVmb3JlLFxuLmlvbi1pb3MtYmVha2VyOmJlZm9yZSxcbi5pb24taW9zLWJlYWtlci1vdXRsaW5lOmJlZm9yZSxcbi5pb24taW9zLWJlZXI6YmVmb3JlLFxuLmlvbi1pb3MtYmVlci1vdXRsaW5lOmJlZm9yZSxcbi5pb24taW9zLWJpY3ljbGU6YmVmb3JlLFxuLmlvbi1pb3MtYmljeWNsZS1vdXRsaW5lOmJlZm9yZSxcbi5pb24taW9zLWJsdWV0b290aDpiZWZvcmUsXG4uaW9uLWlvcy1ibHVldG9vdGgtb3V0bGluZTpiZWZvcmUsXG4uaW9uLWlvcy1ib2F0OmJlZm9yZSxcbi5pb24taW9zLWJvYXQtb3V0bGluZTpiZWZvcmUsXG4uaW9uLWlvcy1ib2R5OmJlZm9yZSxcbi5pb24taW9zLWJvZHktb3V0bGluZTpiZWZvcmUsXG4uaW9uLWlvcy1ib25maXJlOmJlZm9yZSxcbi5pb24taW9zLWJvbmZpcmUtb3V0bGluZTpiZWZvcmUsXG4uaW9uLWlvcy1ib29rOmJlZm9yZSxcbi5pb24taW9zLWJvb2stb3V0bGluZTpiZWZvcmUsXG4uaW9uLWlvcy1ib29rbWFyazpiZWZvcmUsXG4uaW9uLWlvcy1ib29rbWFyay1vdXRsaW5lOmJlZm9yZSxcbi5pb24taW9zLWJvb2ttYXJrczpiZWZvcmUsXG4uaW9uLWlvcy1ib29rbWFya3Mtb3V0bGluZTpiZWZvcmUsXG4uaW9uLWlvcy1ib3d0aWU6YmVmb3JlLFxuLmlvbi1pb3MtYm93dGllLW91dGxpbmU6YmVmb3JlLFxuLmlvbi1pb3MtYnJpZWZjYXNlOmJlZm9yZSxcbi5pb24taW9zLWJyaWVmY2FzZS1vdXRsaW5lOmJlZm9yZSxcbi5pb24taW9zLWJyb3dzZXJzOmJlZm9yZSxcbi5pb24taW9zLWJyb3dzZXJzLW91dGxpbmU6YmVmb3JlLFxuLmlvbi1pb3MtYnJ1c2g6YmVmb3JlLFxuLmlvbi1pb3MtYnJ1c2gtb3V0bGluZTpiZWZvcmUsXG4uaW9uLWlvcy1idWc6YmVmb3JlLFxuLmlvbi1pb3MtYnVnLW91dGxpbmU6YmVmb3JlLFxuLmlvbi1pb3MtYnVpbGQ6YmVmb3JlLFxuLmlvbi1pb3MtYnVpbGQtb3V0bGluZTpiZWZvcmUsXG4uaW9uLWlvcy1idWxiOmJlZm9yZSxcbi5pb24taW9zLWJ1bGItb3V0bGluZTpiZWZvcmUsXG4uaW9uLWlvcy1idXM6YmVmb3JlLFxuLmlvbi1pb3MtYnVzLW91dGxpbmU6YmVmb3JlLFxuLmlvbi1pb3MtY2FmZTpiZWZvcmUsXG4uaW9uLWlvcy1jYWZlLW91dGxpbmU6YmVmb3JlLFxuLmlvbi1pb3MtY2FsY3VsYXRvcjpiZWZvcmUsXG4uaW9uLWlvcy1jYWxjdWxhdG9yLW91dGxpbmU6YmVmb3JlLFxuLmlvbi1pb3MtY2FsZW5kYXI6YmVmb3JlLFxuLmlvbi1pb3MtY2FsZW5kYXItb3V0bGluZTpiZWZvcmUsXG4uaW9uLWlvcy1jYWxsOmJlZm9yZSxcbi5pb24taW9zLWNhbGwtb3V0bGluZTpiZWZvcmUsXG4uaW9uLWlvcy1jYW1lcmE6YmVmb3JlLFxuLmlvbi1pb3MtY2FtZXJhLW91dGxpbmU6YmVmb3JlLFxuLmlvbi1pb3MtY2FyOmJlZm9yZSxcbi5pb24taW9zLWNhci1vdXRsaW5lOmJlZm9yZSxcbi5pb24taW9zLWNhcmQ6YmVmb3JlLFxuLmlvbi1pb3MtY2FyZC1vdXRsaW5lOmJlZm9yZSxcbi5pb24taW9zLWNhcnQ6YmVmb3JlLFxuLmlvbi1pb3MtY2FydC1vdXRsaW5lOmJlZm9yZSxcbi5pb24taW9zLWNhc2g6YmVmb3JlLFxuLmlvbi1pb3MtY2FzaC1vdXRsaW5lOmJlZm9yZSxcbi5pb24taW9zLWNoYXRib3hlczpiZWZvcmUsXG4uaW9uLWlvcy1jaGF0Ym94ZXMtb3V0bGluZTpiZWZvcmUsXG4uaW9uLWlvcy1jaGF0YnViYmxlczpiZWZvcmUsXG4uaW9uLWlvcy1jaGF0YnViYmxlcy1vdXRsaW5lOmJlZm9yZSxcbi5pb24taW9zLWNoZWNrYm94OmJlZm9yZSxcbi5pb24taW9zLWNoZWNrYm94LW91dGxpbmU6YmVmb3JlLFxuLmlvbi1pb3MtY2hlY2ttYXJrOmJlZm9yZSxcbi5pb24taW9zLWNoZWNrbWFyay1jaXJjbGU6YmVmb3JlLFxuLmlvbi1pb3MtY2hlY2ttYXJrLWNpcmNsZS1vdXRsaW5lOmJlZm9yZSxcbi5pb24taW9zLWNoZWNrbWFyay1vdXRsaW5lOmJlZm9yZSxcbi5pb24taW9zLWNsaXBib2FyZDpiZWZvcmUsXG4uaW9uLWlvcy1jbGlwYm9hcmQtb3V0bGluZTpiZWZvcmUsXG4uaW9uLWlvcy1jbG9jazpiZWZvcmUsXG4uaW9uLWlvcy1jbG9jay1vdXRsaW5lOmJlZm9yZSxcbi5pb24taW9zLWNsb3NlOmJlZm9yZSxcbi5pb24taW9zLWNsb3NlLWNpcmNsZTpiZWZvcmUsXG4uaW9uLWlvcy1jbG9zZS1jaXJjbGUtb3V0bGluZTpiZWZvcmUsXG4uaW9uLWlvcy1jbG9zZS1vdXRsaW5lOmJlZm9yZSxcbi5pb24taW9zLWNsb3NlZC1jYXB0aW9uaW5nOmJlZm9yZSxcbi5pb24taW9zLWNsb3NlZC1jYXB0aW9uaW5nLW91dGxpbmU6YmVmb3JlLFxuLmlvbi1pb3MtY2xvdWQ6YmVmb3JlLFxuLmlvbi1pb3MtY2xvdWQtY2lyY2xlOmJlZm9yZSxcbi5pb24taW9zLWNsb3VkLWNpcmNsZS1vdXRsaW5lOmJlZm9yZSxcbi5pb24taW9zLWNsb3VkLWRvbmU6YmVmb3JlLFxuLmlvbi1pb3MtY2xvdWQtZG9uZS1vdXRsaW5lOmJlZm9yZSxcbi5pb24taW9zLWNsb3VkLWRvd25sb2FkOmJlZm9yZSxcbi5pb24taW9zLWNsb3VkLWRvd25sb2FkLW91dGxpbmU6YmVmb3JlLFxuLmlvbi1pb3MtY2xvdWQtb3V0bGluZTpiZWZvcmUsXG4uaW9uLWlvcy1jbG91ZC11cGxvYWQ6YmVmb3JlLFxuLmlvbi1pb3MtY2xvdWQtdXBsb2FkLW91dGxpbmU6YmVmb3JlLFxuLmlvbi1pb3MtY2xvdWR5OmJlZm9yZSxcbi5pb24taW9zLWNsb3VkeS1uaWdodDpiZWZvcmUsXG4uaW9uLWlvcy1jbG91ZHktbmlnaHQtb3V0bGluZTpiZWZvcmUsXG4uaW9uLWlvcy1jbG91ZHktb3V0bGluZTpiZWZvcmUsXG4uaW9uLWlvcy1jb2RlOmJlZm9yZSxcbi5pb24taW9zLWNvZGUtZG93bmxvYWQ6YmVmb3JlLFxuLmlvbi1pb3MtY29kZS1kb3dubG9hZC1vdXRsaW5lOmJlZm9yZSxcbi5pb24taW9zLWNvZGUtb3V0bGluZTpiZWZvcmUsXG4uaW9uLWlvcy1jb2RlLXdvcmtpbmc6YmVmb3JlLFxuLmlvbi1pb3MtY29kZS13b3JraW5nLW91dGxpbmU6YmVmb3JlLFxuLmlvbi1pb3MtY29nOmJlZm9yZSxcbi5pb24taW9zLWNvZy1vdXRsaW5lOmJlZm9yZSxcbi5pb24taW9zLWNvbG9yLWZpbGw6YmVmb3JlLFxuLmlvbi1pb3MtY29sb3ItZmlsbC1vdXRsaW5lOmJlZm9yZSxcbi5pb24taW9zLWNvbG9yLWZpbHRlcjpiZWZvcmUsXG4uaW9uLWlvcy1jb2xvci1maWx0ZXItb3V0bGluZTpiZWZvcmUsXG4uaW9uLWlvcy1jb2xvci1wYWxldHRlOmJlZm9yZSxcbi5pb24taW9zLWNvbG9yLXBhbGV0dGUtb3V0bGluZTpiZWZvcmUsXG4uaW9uLWlvcy1jb2xvci13YW5kOmJlZm9yZSxcbi5pb24taW9zLWNvbG9yLXdhbmQtb3V0bGluZTpiZWZvcmUsXG4uaW9uLWlvcy1jb21wYXNzOmJlZm9yZSxcbi5pb24taW9zLWNvbXBhc3Mtb3V0bGluZTpiZWZvcmUsXG4uaW9uLWlvcy1jb25zdHJ1Y3Q6YmVmb3JlLFxuLmlvbi1pb3MtY29uc3RydWN0LW91dGxpbmU6YmVmb3JlLFxuLmlvbi1pb3MtY29udGFjdDpiZWZvcmUsXG4uaW9uLWlvcy1jb250YWN0LW91dGxpbmU6YmVmb3JlLFxuLmlvbi1pb3MtY29udGFjdHM6YmVmb3JlLFxuLmlvbi1pb3MtY29udGFjdHMtb3V0bGluZTpiZWZvcmUsXG4uaW9uLWlvcy1jb250cmFjdDpiZWZvcmUsXG4uaW9uLWlvcy1jb250cmFjdC1vdXRsaW5lOmJlZm9yZSxcbi5pb24taW9zLWNvbnRyYXN0OmJlZm9yZSxcbi5pb24taW9zLWNvbnRyYXN0LW91dGxpbmU6YmVmb3JlLFxuLmlvbi1pb3MtY29weTpiZWZvcmUsXG4uaW9uLWlvcy1jb3B5LW91dGxpbmU6YmVmb3JlLFxuLmlvbi1pb3MtY3JlYXRlOmJlZm9yZSxcbi5pb24taW9zLWNyZWF0ZS1vdXRsaW5lOmJlZm9yZSxcbi5pb24taW9zLWNyb3A6YmVmb3JlLFxuLmlvbi1pb3MtY3JvcC1vdXRsaW5lOmJlZm9yZSxcbi5pb24taW9zLWN1YmU6YmVmb3JlLFxuLmlvbi1pb3MtY3ViZS1vdXRsaW5lOmJlZm9yZSxcbi5pb24taW9zLWN1dDpiZWZvcmUsXG4uaW9uLWlvcy1jdXQtb3V0bGluZTpiZWZvcmUsXG4uaW9uLWlvcy1kZXNrdG9wOmJlZm9yZSxcbi5pb24taW9zLWRlc2t0b3Atb3V0bGluZTpiZWZvcmUsXG4uaW9uLWlvcy1kaXNjOmJlZm9yZSxcbi5pb24taW9zLWRpc2Mtb3V0bGluZTpiZWZvcmUsXG4uaW9uLWlvcy1kb2N1bWVudDpiZWZvcmUsXG4uaW9uLWlvcy1kb2N1bWVudC1vdXRsaW5lOmJlZm9yZSxcbi5pb24taW9zLWRvbmUtYWxsOmJlZm9yZSxcbi5pb24taW9zLWRvbmUtYWxsLW91dGxpbmU6YmVmb3JlLFxuLmlvbi1pb3MtZG93bmxvYWQ6YmVmb3JlLFxuLmlvbi1pb3MtZG93bmxvYWQtb3V0bGluZTpiZWZvcmUsXG4uaW9uLWlvcy1lYXNlbDpiZWZvcmUsXG4uaW9uLWlvcy1lYXNlbC1vdXRsaW5lOmJlZm9yZSxcbi5pb24taW9zLWVnZzpiZWZvcmUsXG4uaW9uLWlvcy1lZ2ctb3V0bGluZTpiZWZvcmUsXG4uaW9uLWlvcy1leGl0OmJlZm9yZSxcbi5pb24taW9zLWV4aXQtb3V0bGluZTpiZWZvcmUsXG4uaW9uLWlvcy1leHBhbmQ6YmVmb3JlLFxuLmlvbi1pb3MtZXhwYW5kLW91dGxpbmU6YmVmb3JlLFxuLmlvbi1pb3MtZXllOmJlZm9yZSxcbi5pb24taW9zLWV5ZS1vZmY6YmVmb3JlLFxuLmlvbi1pb3MtZXllLW9mZi1vdXRsaW5lOmJlZm9yZSxcbi5pb24taW9zLWV5ZS1vdXRsaW5lOmJlZm9yZSxcbi5pb24taW9zLWZhc3Rmb3J3YXJkOmJlZm9yZSxcbi5pb24taW9zLWZhc3Rmb3J3YXJkLW91dGxpbmU6YmVmb3JlLFxuLmlvbi1pb3MtZmVtYWxlOmJlZm9yZSxcbi5pb24taW9zLWZlbWFsZS1vdXRsaW5lOmJlZm9yZSxcbi5pb24taW9zLWZpbGluZzpiZWZvcmUsXG4uaW9uLWlvcy1maWxpbmctb3V0bGluZTpiZWZvcmUsXG4uaW9uLWlvcy1maWxtOmJlZm9yZSxcbi5pb24taW9zLWZpbG0tb3V0bGluZTpiZWZvcmUsXG4uaW9uLWlvcy1maW5nZXItcHJpbnQ6YmVmb3JlLFxuLmlvbi1pb3MtZmluZ2VyLXByaW50LW91dGxpbmU6YmVmb3JlLFxuLmlvbi1pb3MtZmxhZzpiZWZvcmUsXG4uaW9uLWlvcy1mbGFnLW91dGxpbmU6YmVmb3JlLFxuLmlvbi1pb3MtZmxhbWU6YmVmb3JlLFxuLmlvbi1pb3MtZmxhbWUtb3V0bGluZTpiZWZvcmUsXG4uaW9uLWlvcy1mbGFzaDpiZWZvcmUsXG4uaW9uLWlvcy1mbGFzaC1vdXRsaW5lOmJlZm9yZSxcbi5pb24taW9zLWZsYXNrOmJlZm9yZSxcbi5pb24taW9zLWZsYXNrLW91dGxpbmU6YmVmb3JlLFxuLmlvbi1pb3MtZmxvd2VyOmJlZm9yZSxcbi5pb24taW9zLWZsb3dlci1vdXRsaW5lOmJlZm9yZSxcbi5pb24taW9zLWZvbGRlcjpiZWZvcmUsXG4uaW9uLWlvcy1mb2xkZXItb3BlbjpiZWZvcmUsXG4uaW9uLWlvcy1mb2xkZXItb3Blbi1vdXRsaW5lOmJlZm9yZSxcbi5pb24taW9zLWZvbGRlci1vdXRsaW5lOmJlZm9yZSxcbi5pb24taW9zLWZvb3RiYWxsOmJlZm9yZSxcbi5pb24taW9zLWZvb3RiYWxsLW91dGxpbmU6YmVmb3JlLFxuLmlvbi1pb3MtZnVubmVsOmJlZm9yZSxcbi5pb24taW9zLWZ1bm5lbC1vdXRsaW5lOmJlZm9yZSxcbi5pb24taW9zLWdhbWUtY29udHJvbGxlci1hOmJlZm9yZSxcbi5pb24taW9zLWdhbWUtY29udHJvbGxlci1hLW91dGxpbmU6YmVmb3JlLFxuLmlvbi1pb3MtZ2FtZS1jb250cm9sbGVyLWI6YmVmb3JlLFxuLmlvbi1pb3MtZ2FtZS1jb250cm9sbGVyLWItb3V0bGluZTpiZWZvcmUsXG4uaW9uLWlvcy1naXQtYnJhbmNoOmJlZm9yZSxcbi5pb24taW9zLWdpdC1icmFuY2gtb3V0bGluZTpiZWZvcmUsXG4uaW9uLWlvcy1naXQtY29tbWl0OmJlZm9yZSxcbi5pb24taW9zLWdpdC1jb21taXQtb3V0bGluZTpiZWZvcmUsXG4uaW9uLWlvcy1naXQtY29tcGFyZTpiZWZvcmUsXG4uaW9uLWlvcy1naXQtY29tcGFyZS1vdXRsaW5lOmJlZm9yZSxcbi5pb24taW9zLWdpdC1tZXJnZTpiZWZvcmUsXG4uaW9uLWlvcy1naXQtbWVyZ2Utb3V0bGluZTpiZWZvcmUsXG4uaW9uLWlvcy1naXQtbmV0d29yazpiZWZvcmUsXG4uaW9uLWlvcy1naXQtbmV0d29yay1vdXRsaW5lOmJlZm9yZSxcbi5pb24taW9zLWdpdC1wdWxsLXJlcXVlc3Q6YmVmb3JlLFxuLmlvbi1pb3MtZ2l0LXB1bGwtcmVxdWVzdC1vdXRsaW5lOmJlZm9yZSxcbi5pb24taW9zLWdsYXNzZXM6YmVmb3JlLFxuLmlvbi1pb3MtZ2xhc3Nlcy1vdXRsaW5lOmJlZm9yZSxcbi5pb24taW9zLWdsb2JlOmJlZm9yZSxcbi5pb24taW9zLWdsb2JlLW91dGxpbmU6YmVmb3JlLFxuLmlvbi1pb3MtZ3JpZDpiZWZvcmUsXG4uaW9uLWlvcy1ncmlkLW91dGxpbmU6YmVmb3JlLFxuLmlvbi1pb3MtaGFtbWVyOmJlZm9yZSxcbi5pb24taW9zLWhhbW1lci1vdXRsaW5lOmJlZm9yZSxcbi5pb24taW9zLWhhbmQ6YmVmb3JlLFxuLmlvbi1pb3MtaGFuZC1vdXRsaW5lOmJlZm9yZSxcbi5pb24taW9zLWhhcHB5OmJlZm9yZSxcbi5pb24taW9zLWhhcHB5LW91dGxpbmU6YmVmb3JlLFxuLmlvbi1pb3MtaGVhZHNldDpiZWZvcmUsXG4uaW9uLWlvcy1oZWFkc2V0LW91dGxpbmU6YmVmb3JlLFxuLmlvbi1pb3MtaGVhcnQ6YmVmb3JlLFxuLmlvbi1pb3MtaGVhcnQtb3V0bGluZTpiZWZvcmUsXG4uaW9uLWlvcy1oZWxwOmJlZm9yZSxcbi5pb24taW9zLWhlbHAtYnVveTpiZWZvcmUsXG4uaW9uLWlvcy1oZWxwLWJ1b3ktb3V0bGluZTpiZWZvcmUsXG4uaW9uLWlvcy1oZWxwLWNpcmNsZTpiZWZvcmUsXG4uaW9uLWlvcy1oZWxwLWNpcmNsZS1vdXRsaW5lOmJlZm9yZSxcbi5pb24taW9zLWhlbHAtb3V0bGluZTpiZWZvcmUsXG4uaW9uLWlvcy1ob21lOmJlZm9yZSxcbi5pb24taW9zLWhvbWUtb3V0bGluZTpiZWZvcmUsXG4uaW9uLWlvcy1pY2UtY3JlYW06YmVmb3JlLFxuLmlvbi1pb3MtaWNlLWNyZWFtLW91dGxpbmU6YmVmb3JlLFxuLmlvbi1pb3MtaW1hZ2U6YmVmb3JlLFxuLmlvbi1pb3MtaW1hZ2Utb3V0bGluZTpiZWZvcmUsXG4uaW9uLWlvcy1pbWFnZXM6YmVmb3JlLFxuLmlvbi1pb3MtaW1hZ2VzLW91dGxpbmU6YmVmb3JlLFxuLmlvbi1pb3MtaW5maW5pdGU6YmVmb3JlLFxuLmlvbi1pb3MtaW5maW5pdGUtb3V0bGluZTpiZWZvcmUsXG4uaW9uLWlvcy1pbmZvcm1hdGlvbjpiZWZvcmUsXG4uaW9uLWlvcy1pbmZvcm1hdGlvbi1jaXJjbGU6YmVmb3JlLFxuLmlvbi1pb3MtaW5mb3JtYXRpb24tY2lyY2xlLW91dGxpbmU6YmVmb3JlLFxuLmlvbi1pb3MtaW5mb3JtYXRpb24tb3V0bGluZTpiZWZvcmUsXG4uaW9uLWlvcy1pb25pYzpiZWZvcmUsXG4uaW9uLWlvcy1pb25pYy1vdXRsaW5lOmJlZm9yZSxcbi5pb24taW9zLWlvbml0cm9uOmJlZm9yZSxcbi5pb24taW9zLWlvbml0cm9uLW91dGxpbmU6YmVmb3JlLFxuLmlvbi1pb3MtamV0OmJlZm9yZSxcbi5pb24taW9zLWpldC1vdXRsaW5lOmJlZm9yZSxcbi5pb24taW9zLWtleTpiZWZvcmUsXG4uaW9uLWlvcy1rZXktb3V0bGluZTpiZWZvcmUsXG4uaW9uLWlvcy1rZXlwYWQ6YmVmb3JlLFxuLmlvbi1pb3Mta2V5cGFkLW91dGxpbmU6YmVmb3JlLFxuLmlvbi1pb3MtbGFwdG9wOmJlZm9yZSxcbi5pb24taW9zLWxhcHRvcC1vdXRsaW5lOmJlZm9yZSxcbi5pb24taW9zLWxlYWY6YmVmb3JlLFxuLmlvbi1pb3MtbGVhZi1vdXRsaW5lOmJlZm9yZSxcbi5pb24taW9zLWxpbms6YmVmb3JlLFxuLmlvbi1pb3MtbGluay1vdXRsaW5lOmJlZm9yZSxcbi5pb24taW9zLWxpc3Q6YmVmb3JlLFxuLmlvbi1pb3MtbGlzdC1ib3g6YmVmb3JlLFxuLmlvbi1pb3MtbGlzdC1ib3gtb3V0bGluZTpiZWZvcmUsXG4uaW9uLWlvcy1saXN0LW91dGxpbmU6YmVmb3JlLFxuLmlvbi1pb3MtbG9jYXRlOmJlZm9yZSxcbi5pb24taW9zLWxvY2F0ZS1vdXRsaW5lOmJlZm9yZSxcbi5pb24taW9zLWxvY2s6YmVmb3JlLFxuLmlvbi1pb3MtbG9jay1vdXRsaW5lOmJlZm9yZSxcbi5pb24taW9zLWxvZy1pbjpiZWZvcmUsXG4uaW9uLWlvcy1sb2ctaW4tb3V0bGluZTpiZWZvcmUsXG4uaW9uLWlvcy1sb2ctb3V0OmJlZm9yZSxcbi5pb24taW9zLWxvZy1vdXQtb3V0bGluZTpiZWZvcmUsXG4uaW9uLWlvcy1tYWduZXQ6YmVmb3JlLFxuLmlvbi1pb3MtbWFnbmV0LW91dGxpbmU6YmVmb3JlLFxuLmlvbi1pb3MtbWFpbDpiZWZvcmUsXG4uaW9uLWlvcy1tYWlsLW9wZW46YmVmb3JlLFxuLmlvbi1pb3MtbWFpbC1vcGVuLW91dGxpbmU6YmVmb3JlLFxuLmlvbi1pb3MtbWFpbC1vdXRsaW5lOmJlZm9yZSxcbi5pb24taW9zLW1hbGU6YmVmb3JlLFxuLmlvbi1pb3MtbWFsZS1vdXRsaW5lOmJlZm9yZSxcbi5pb24taW9zLW1hbjpiZWZvcmUsXG4uaW9uLWlvcy1tYW4tb3V0bGluZTpiZWZvcmUsXG4uaW9uLWlvcy1tYXA6YmVmb3JlLFxuLmlvbi1pb3MtbWFwLW91dGxpbmU6YmVmb3JlLFxuLmlvbi1pb3MtbWVkYWw6YmVmb3JlLFxuLmlvbi1pb3MtbWVkYWwtb3V0bGluZTpiZWZvcmUsXG4uaW9uLWlvcy1tZWRpY2FsOmJlZm9yZSxcbi5pb24taW9zLW1lZGljYWwtb3V0bGluZTpiZWZvcmUsXG4uaW9uLWlvcy1tZWRraXQ6YmVmb3JlLFxuLmlvbi1pb3MtbWVka2l0LW91dGxpbmU6YmVmb3JlLFxuLmlvbi1pb3MtbWVnYXBob25lOmJlZm9yZSxcbi5pb24taW9zLW1lZ2FwaG9uZS1vdXRsaW5lOmJlZm9yZSxcbi5pb24taW9zLW1lbnU6YmVmb3JlLFxuLmlvbi1pb3MtbWVudS1vdXRsaW5lOmJlZm9yZSxcbi5pb24taW9zLW1pYzpiZWZvcmUsXG4uaW9uLWlvcy1taWMtb2ZmOmJlZm9yZSxcbi5pb24taW9zLW1pYy1vZmYtb3V0bGluZTpiZWZvcmUsXG4uaW9uLWlvcy1taWMtb3V0bGluZTpiZWZvcmUsXG4uaW9uLWlvcy1taWNyb3Bob25lOmJlZm9yZSxcbi5pb24taW9zLW1pY3JvcGhvbmUtb3V0bGluZTpiZWZvcmUsXG4uaW9uLWlvcy1tb29uOmJlZm9yZSxcbi5pb24taW9zLW1vb24tb3V0bGluZTpiZWZvcmUsXG4uaW9uLWlvcy1tb3JlOmJlZm9yZSxcbi5pb24taW9zLW1vcmUtb3V0bGluZTpiZWZvcmUsXG4uaW9uLWlvcy1tb3ZlOmJlZm9yZSxcbi5pb24taW9zLW1vdmUtb3V0bGluZTpiZWZvcmUsXG4uaW9uLWlvcy1tdXNpY2FsLW5vdGU6YmVmb3JlLFxuLmlvbi1pb3MtbXVzaWNhbC1ub3RlLW91dGxpbmU6YmVmb3JlLFxuLmlvbi1pb3MtbXVzaWNhbC1ub3RlczpiZWZvcmUsXG4uaW9uLWlvcy1tdXNpY2FsLW5vdGVzLW91dGxpbmU6YmVmb3JlLFxuLmlvbi1pb3MtbmF2aWdhdGU6YmVmb3JlLFxuLmlvbi1pb3MtbmF2aWdhdGUtb3V0bGluZTpiZWZvcmUsXG4uaW9uLWlvcy1uby1zbW9raW5nOmJlZm9yZSxcbi5pb24taW9zLW5vLXNtb2tpbmctb3V0bGluZTpiZWZvcmUsXG4uaW9uLWlvcy1ub3RpZmljYXRpb25zOmJlZm9yZSxcbi5pb24taW9zLW5vdGlmaWNhdGlvbnMtb2ZmOmJlZm9yZSxcbi5pb24taW9zLW5vdGlmaWNhdGlvbnMtb2ZmLW91dGxpbmU6YmVmb3JlLFxuLmlvbi1pb3Mtbm90aWZpY2F0aW9ucy1vdXRsaW5lOmJlZm9yZSxcbi5pb24taW9zLW51Y2xlYXI6YmVmb3JlLFxuLmlvbi1pb3MtbnVjbGVhci1vdXRsaW5lOmJlZm9yZSxcbi5pb24taW9zLW51dHJpdGlvbjpiZWZvcmUsXG4uaW9uLWlvcy1udXRyaXRpb24tb3V0bGluZTpiZWZvcmUsXG4uaW9uLWlvcy1vcGVuOmJlZm9yZSxcbi5pb24taW9zLW9wZW4tb3V0bGluZTpiZWZvcmUsXG4uaW9uLWlvcy1vcHRpb25zOmJlZm9yZSxcbi5pb24taW9zLW9wdGlvbnMtb3V0bGluZTpiZWZvcmUsXG4uaW9uLWlvcy1vdXRsZXQ6YmVmb3JlLFxuLmlvbi1pb3Mtb3V0bGV0LW91dGxpbmU6YmVmb3JlLFxuLmlvbi1pb3MtcGFwZXI6YmVmb3JlLFxuLmlvbi1pb3MtcGFwZXItb3V0bGluZTpiZWZvcmUsXG4uaW9uLWlvcy1wYXBlci1wbGFuZTpiZWZvcmUsXG4uaW9uLWlvcy1wYXBlci1wbGFuZS1vdXRsaW5lOmJlZm9yZSxcbi5pb24taW9zLXBhcnRseS1zdW5ueTpiZWZvcmUsXG4uaW9uLWlvcy1wYXJ0bHktc3Vubnktb3V0bGluZTpiZWZvcmUsXG4uaW9uLWlvcy1wYXVzZTpiZWZvcmUsXG4uaW9uLWlvcy1wYXVzZS1vdXRsaW5lOmJlZm9yZSxcbi5pb24taW9zLXBhdzpiZWZvcmUsXG4uaW9uLWlvcy1wYXctb3V0bGluZTpiZWZvcmUsXG4uaW9uLWlvcy1wZW9wbGU6YmVmb3JlLFxuLmlvbi1pb3MtcGVvcGxlLW91dGxpbmU6YmVmb3JlLFxuLmlvbi1pb3MtcGVyc29uOmJlZm9yZSxcbi5pb24taW9zLXBlcnNvbi1hZGQ6YmVmb3JlLFxuLmlvbi1pb3MtcGVyc29uLWFkZC1vdXRsaW5lOmJlZm9yZSxcbi5pb24taW9zLXBlcnNvbi1vdXRsaW5lOmJlZm9yZSxcbi5pb24taW9zLXBob25lLWxhbmRzY2FwZTpiZWZvcmUsXG4uaW9uLWlvcy1waG9uZS1sYW5kc2NhcGUtb3V0bGluZTpiZWZvcmUsXG4uaW9uLWlvcy1waG9uZS1wb3J0cmFpdDpiZWZvcmUsXG4uaW9uLWlvcy1waG9uZS1wb3J0cmFpdC1vdXRsaW5lOmJlZm9yZSxcbi5pb24taW9zLXBob3RvczpiZWZvcmUsXG4uaW9uLWlvcy1waG90b3Mtb3V0bGluZTpiZWZvcmUsXG4uaW9uLWlvcy1waWU6YmVmb3JlLFxuLmlvbi1pb3MtcGllLW91dGxpbmU6YmVmb3JlLFxuLmlvbi1pb3MtcGluOmJlZm9yZSxcbi5pb24taW9zLXBpbi1vdXRsaW5lOmJlZm9yZSxcbi5pb24taW9zLXBpbnQ6YmVmb3JlLFxuLmlvbi1pb3MtcGludC1vdXRsaW5lOmJlZm9yZSxcbi5pb24taW9zLXBpenphOmJlZm9yZSxcbi5pb24taW9zLXBpenphLW91dGxpbmU6YmVmb3JlLFxuLmlvbi1pb3MtcGxhbmU6YmVmb3JlLFxuLmlvbi1pb3MtcGxhbmUtb3V0bGluZTpiZWZvcmUsXG4uaW9uLWlvcy1wbGFuZXQ6YmVmb3JlLFxuLmlvbi1pb3MtcGxhbmV0LW91dGxpbmU6YmVmb3JlLFxuLmlvbi1pb3MtcGxheTpiZWZvcmUsXG4uaW9uLWlvcy1wbGF5LW91dGxpbmU6YmVmb3JlLFxuLmlvbi1pb3MtcG9kaXVtOmJlZm9yZSxcbi5pb24taW9zLXBvZGl1bS1vdXRsaW5lOmJlZm9yZSxcbi5pb24taW9zLXBvd2VyOmJlZm9yZSxcbi5pb24taW9zLXBvd2VyLW91dGxpbmU6YmVmb3JlLFxuLmlvbi1pb3MtcHJpY2V0YWc6YmVmb3JlLFxuLmlvbi1pb3MtcHJpY2V0YWctb3V0bGluZTpiZWZvcmUsXG4uaW9uLWlvcy1wcmljZXRhZ3M6YmVmb3JlLFxuLmlvbi1pb3MtcHJpY2V0YWdzLW91dGxpbmU6YmVmb3JlLFxuLmlvbi1pb3MtcHJpbnQ6YmVmb3JlLFxuLmlvbi1pb3MtcHJpbnQtb3V0bGluZTpiZWZvcmUsXG4uaW9uLWlvcy1wdWxzZTpiZWZvcmUsXG4uaW9uLWlvcy1wdWxzZS1vdXRsaW5lOmJlZm9yZSxcbi5pb24taW9zLXFyLXNjYW5uZXI6YmVmb3JlLFxuLmlvbi1pb3MtcXItc2Nhbm5lci1vdXRsaW5lOmJlZm9yZSxcbi5pb24taW9zLXF1b3RlOmJlZm9yZSxcbi5pb24taW9zLXF1b3RlLW91dGxpbmU6YmVmb3JlLFxuLmlvbi1pb3MtcmFkaW86YmVmb3JlLFxuLmlvbi1pb3MtcmFkaW8tYnV0dG9uLW9mZjpiZWZvcmUsXG4uaW9uLWlvcy1yYWRpby1idXR0b24tb2ZmLW91dGxpbmU6YmVmb3JlLFxuLmlvbi1pb3MtcmFkaW8tYnV0dG9uLW9uOmJlZm9yZSxcbi5pb24taW9zLXJhZGlvLWJ1dHRvbi1vbi1vdXRsaW5lOmJlZm9yZSxcbi5pb24taW9zLXJhZGlvLW91dGxpbmU6YmVmb3JlLFxuLmlvbi1pb3MtcmFpbnk6YmVmb3JlLFxuLmlvbi1pb3MtcmFpbnktb3V0bGluZTpiZWZvcmUsXG4uaW9uLWlvcy1yZWNvcmRpbmc6YmVmb3JlLFxuLmlvbi1pb3MtcmVjb3JkaW5nLW91dGxpbmU6YmVmb3JlLFxuLmlvbi1pb3MtcmVkbzpiZWZvcmUsXG4uaW9uLWlvcy1yZWRvLW91dGxpbmU6YmVmb3JlLFxuLmlvbi1pb3MtcmVmcmVzaDpiZWZvcmUsXG4uaW9uLWlvcy1yZWZyZXNoLWNpcmNsZTpiZWZvcmUsXG4uaW9uLWlvcy1yZWZyZXNoLWNpcmNsZS1vdXRsaW5lOmJlZm9yZSxcbi5pb24taW9zLXJlZnJlc2gtb3V0bGluZTpiZWZvcmUsXG4uaW9uLWlvcy1yZW1vdmU6YmVmb3JlLFxuLmlvbi1pb3MtcmVtb3ZlLWNpcmNsZTpiZWZvcmUsXG4uaW9uLWlvcy1yZW1vdmUtY2lyY2xlLW91dGxpbmU6YmVmb3JlLFxuLmlvbi1pb3MtcmVtb3ZlLW91dGxpbmU6YmVmb3JlLFxuLmlvbi1pb3MtcmVvcmRlcjpiZWZvcmUsXG4uaW9uLWlvcy1yZW9yZGVyLW91dGxpbmU6YmVmb3JlLFxuLmlvbi1pb3MtcmVwZWF0OmJlZm9yZSxcbi5pb24taW9zLXJlcGVhdC1vdXRsaW5lOmJlZm9yZSxcbi5pb24taW9zLXJlc2l6ZTpiZWZvcmUsXG4uaW9uLWlvcy1yZXNpemUtb3V0bGluZTpiZWZvcmUsXG4uaW9uLWlvcy1yZXN0YXVyYW50OmJlZm9yZSxcbi5pb24taW9zLXJlc3RhdXJhbnQtb3V0bGluZTpiZWZvcmUsXG4uaW9uLWlvcy1yZXR1cm4tbGVmdDpiZWZvcmUsXG4uaW9uLWlvcy1yZXR1cm4tbGVmdC1vdXRsaW5lOmJlZm9yZSxcbi5pb24taW9zLXJldHVybi1yaWdodDpiZWZvcmUsXG4uaW9uLWlvcy1yZXR1cm4tcmlnaHQtb3V0bGluZTpiZWZvcmUsXG4uaW9uLWlvcy1yZXZlcnNlLWNhbWVyYTpiZWZvcmUsXG4uaW9uLWlvcy1yZXZlcnNlLWNhbWVyYS1vdXRsaW5lOmJlZm9yZSxcbi5pb24taW9zLXJld2luZDpiZWZvcmUsXG4uaW9uLWlvcy1yZXdpbmQtb3V0bGluZTpiZWZvcmUsXG4uaW9uLWlvcy1yaWJib246YmVmb3JlLFxuLmlvbi1pb3MtcmliYm9uLW91dGxpbmU6YmVmb3JlLFxuLmlvbi1pb3Mtcm9zZTpiZWZvcmUsXG4uaW9uLWlvcy1yb3NlLW91dGxpbmU6YmVmb3JlLFxuLmlvbi1pb3Mtc2FkOmJlZm9yZSxcbi5pb24taW9zLXNhZC1vdXRsaW5lOmJlZm9yZSxcbi5pb24taW9zLXNjaG9vbDpiZWZvcmUsXG4uaW9uLWlvcy1zY2hvb2wtb3V0bGluZTpiZWZvcmUsXG4uaW9uLWlvcy1zZWFyY2g6YmVmb3JlLFxuLmlvbi1pb3Mtc2VhcmNoLW91dGxpbmU6YmVmb3JlLFxuLmlvbi1pb3Mtc2VuZDpiZWZvcmUsXG4uaW9uLWlvcy1zZW5kLW91dGxpbmU6YmVmb3JlLFxuLmlvbi1pb3Mtc2V0dGluZ3M6YmVmb3JlLFxuLmlvbi1pb3Mtc2V0dGluZ3Mtb3V0bGluZTpiZWZvcmUsXG4uaW9uLWlvcy1zaGFyZTpiZWZvcmUsXG4uaW9uLWlvcy1zaGFyZS1hbHQ6YmVmb3JlLFxuLmlvbi1pb3Mtc2hhcmUtYWx0LW91dGxpbmU6YmVmb3JlLFxuLmlvbi1pb3Mtc2hhcmUtb3V0bGluZTpiZWZvcmUsXG4uaW9uLWlvcy1zaGlydDpiZWZvcmUsXG4uaW9uLWlvcy1zaGlydC1vdXRsaW5lOmJlZm9yZSxcbi5pb24taW9zLXNodWZmbGU6YmVmb3JlLFxuLmlvbi1pb3Mtc2h1ZmZsZS1vdXRsaW5lOmJlZm9yZSxcbi5pb24taW9zLXNraXAtYmFja3dhcmQ6YmVmb3JlLFxuLmlvbi1pb3Mtc2tpcC1iYWNrd2FyZC1vdXRsaW5lOmJlZm9yZSxcbi5pb24taW9zLXNraXAtZm9yd2FyZDpiZWZvcmUsXG4uaW9uLWlvcy1za2lwLWZvcndhcmQtb3V0bGluZTpiZWZvcmUsXG4uaW9uLWlvcy1zbm93OmJlZm9yZSxcbi5pb24taW9zLXNub3ctb3V0bGluZTpiZWZvcmUsXG4uaW9uLWlvcy1zcGVlZG9tZXRlcjpiZWZvcmUsXG4uaW9uLWlvcy1zcGVlZG9tZXRlci1vdXRsaW5lOmJlZm9yZSxcbi5pb24taW9zLXNxdWFyZTpiZWZvcmUsXG4uaW9uLWlvcy1zcXVhcmUtb3V0bGluZTpiZWZvcmUsXG4uaW9uLWlvcy1zdGFyOmJlZm9yZSxcbi5pb24taW9zLXN0YXItaGFsZjpiZWZvcmUsXG4uaW9uLWlvcy1zdGFyLWhhbGYtb3V0bGluZTpiZWZvcmUsXG4uaW9uLWlvcy1zdGFyLW91dGxpbmU6YmVmb3JlLFxuLmlvbi1pb3Mtc3RhdHM6YmVmb3JlLFxuLmlvbi1pb3Mtc3RhdHMtb3V0bGluZTpiZWZvcmUsXG4uaW9uLWlvcy1zdG9wd2F0Y2g6YmVmb3JlLFxuLmlvbi1pb3Mtc3RvcHdhdGNoLW91dGxpbmU6YmVmb3JlLFxuLmlvbi1pb3Mtc3Vid2F5OmJlZm9yZSxcbi5pb24taW9zLXN1YndheS1vdXRsaW5lOmJlZm9yZSxcbi5pb24taW9zLXN1bm55OmJlZm9yZSxcbi5pb24taW9zLXN1bm55LW91dGxpbmU6YmVmb3JlLFxuLmlvbi1pb3Mtc3dhcDpiZWZvcmUsXG4uaW9uLWlvcy1zd2FwLW91dGxpbmU6YmVmb3JlLFxuLmlvbi1pb3Mtc3dpdGNoOmJlZm9yZSxcbi5pb24taW9zLXN3aXRjaC1vdXRsaW5lOmJlZm9yZSxcbi5pb24taW9zLXN5bmM6YmVmb3JlLFxuLmlvbi1pb3Mtc3luYy1vdXRsaW5lOmJlZm9yZSxcbi5pb24taW9zLXRhYmxldC1sYW5kc2NhcGU6YmVmb3JlLFxuLmlvbi1pb3MtdGFibGV0LWxhbmRzY2FwZS1vdXRsaW5lOmJlZm9yZSxcbi5pb24taW9zLXRhYmxldC1wb3J0cmFpdDpiZWZvcmUsXG4uaW9uLWlvcy10YWJsZXQtcG9ydHJhaXQtb3V0bGluZTpiZWZvcmUsXG4uaW9uLWlvcy10ZW5uaXNiYWxsOmJlZm9yZSxcbi5pb24taW9zLXRlbm5pc2JhbGwtb3V0bGluZTpiZWZvcmUsXG4uaW9uLWlvcy10ZXh0OmJlZm9yZSxcbi5pb24taW9zLXRleHQtb3V0bGluZTpiZWZvcmUsXG4uaW9uLWlvcy10aGVybW9tZXRlcjpiZWZvcmUsXG4uaW9uLWlvcy10aGVybW9tZXRlci1vdXRsaW5lOmJlZm9yZSxcbi5pb24taW9zLXRodW1icy1kb3duOmJlZm9yZSxcbi5pb24taW9zLXRodW1icy1kb3duLW91dGxpbmU6YmVmb3JlLFxuLmlvbi1pb3MtdGh1bWJzLXVwOmJlZm9yZSxcbi5pb24taW9zLXRodW1icy11cC1vdXRsaW5lOmJlZm9yZSxcbi5pb24taW9zLXRodW5kZXJzdG9ybTpiZWZvcmUsXG4uaW9uLWlvcy10aHVuZGVyc3Rvcm0tb3V0bGluZTpiZWZvcmUsXG4uaW9uLWlvcy10aW1lOmJlZm9yZSxcbi5pb24taW9zLXRpbWUtb3V0bGluZTpiZWZvcmUsXG4uaW9uLWlvcy10aW1lcjpiZWZvcmUsXG4uaW9uLWlvcy10aW1lci1vdXRsaW5lOmJlZm9yZSxcbi5pb24taW9zLXRyYWluOmJlZm9yZSxcbi5pb24taW9zLXRyYWluLW91dGxpbmU6YmVmb3JlLFxuLmlvbi1pb3MtdHJhbnNnZW5kZXI6YmVmb3JlLFxuLmlvbi1pb3MtdHJhbnNnZW5kZXItb3V0bGluZTpiZWZvcmUsXG4uaW9uLWlvcy10cmFzaDpiZWZvcmUsXG4uaW9uLWlvcy10cmFzaC1vdXRsaW5lOmJlZm9yZSxcbi5pb24taW9zLXRyZW5kaW5nLWRvd246YmVmb3JlLFxuLmlvbi1pb3MtdHJlbmRpbmctZG93bi1vdXRsaW5lOmJlZm9yZSxcbi5pb24taW9zLXRyZW5kaW5nLXVwOmJlZm9yZSxcbi5pb24taW9zLXRyZW5kaW5nLXVwLW91dGxpbmU6YmVmb3JlLFxuLmlvbi1pb3MtdHJvcGh5OmJlZm9yZSxcbi5pb24taW9zLXRyb3BoeS1vdXRsaW5lOmJlZm9yZSxcbi5pb24taW9zLXVtYnJlbGxhOmJlZm9yZSxcbi5pb24taW9zLXVtYnJlbGxhLW91dGxpbmU6YmVmb3JlLFxuLmlvbi1pb3MtdW5kbzpiZWZvcmUsXG4uaW9uLWlvcy11bmRvLW91dGxpbmU6YmVmb3JlLFxuLmlvbi1pb3MtdW5sb2NrOmJlZm9yZSxcbi5pb24taW9zLXVubG9jay1vdXRsaW5lOmJlZm9yZSxcbi5pb24taW9zLXZpZGVvY2FtOmJlZm9yZSxcbi5pb24taW9zLXZpZGVvY2FtLW91dGxpbmU6YmVmb3JlLFxuLmlvbi1pb3Mtdm9sdW1lLWRvd246YmVmb3JlLFxuLmlvbi1pb3Mtdm9sdW1lLWRvd24tb3V0bGluZTpiZWZvcmUsXG4uaW9uLWlvcy12b2x1bWUtbXV0ZTpiZWZvcmUsXG4uaW9uLWlvcy12b2x1bWUtbXV0ZS1vdXRsaW5lOmJlZm9yZSxcbi5pb24taW9zLXZvbHVtZS1vZmY6YmVmb3JlLFxuLmlvbi1pb3Mtdm9sdW1lLW9mZi1vdXRsaW5lOmJlZm9yZSxcbi5pb24taW9zLXZvbHVtZS11cDpiZWZvcmUsXG4uaW9uLWlvcy12b2x1bWUtdXAtb3V0bGluZTpiZWZvcmUsXG4uaW9uLWlvcy13YWxrOmJlZm9yZSxcbi5pb24taW9zLXdhbGstb3V0bGluZTpiZWZvcmUsXG4uaW9uLWlvcy13YXJuaW5nOmJlZm9yZSxcbi5pb24taW9zLXdhcm5pbmctb3V0bGluZTpiZWZvcmUsXG4uaW9uLWlvcy13YXRjaDpiZWZvcmUsXG4uaW9uLWlvcy13YXRjaC1vdXRsaW5lOmJlZm9yZSxcbi5pb24taW9zLXdhdGVyOmJlZm9yZSxcbi5pb24taW9zLXdhdGVyLW91dGxpbmU6YmVmb3JlLFxuLmlvbi1pb3Mtd2lmaTpiZWZvcmUsXG4uaW9uLWlvcy13aWZpLW91dGxpbmU6YmVmb3JlLFxuLmlvbi1pb3Mtd2luZTpiZWZvcmUsXG4uaW9uLWlvcy13aW5lLW91dGxpbmU6YmVmb3JlLFxuLmlvbi1pb3Mtd29tYW46YmVmb3JlLFxuLmlvbi1pb3Mtd29tYW4tb3V0bGluZTpiZWZvcmUsXG4uaW9uLWxvZ28tYW5kcm9pZDpiZWZvcmUsXG4uaW9uLWxvZ28tYW5ndWxhcjpiZWZvcmUsXG4uaW9uLWxvZ28tYXBwbGU6YmVmb3JlLFxuLmlvbi1sb2dvLWJpdGNvaW46YmVmb3JlLFxuLmlvbi1sb2dvLWJ1ZmZlcjpiZWZvcmUsXG4uaW9uLWxvZ28tY2hyb21lOmJlZm9yZSxcbi5pb24tbG9nby1jb2RlcGVuOmJlZm9yZSxcbi5pb24tbG9nby1jc3MzOmJlZm9yZSxcbi5pb24tbG9nby1kZXNpZ25lcm5ld3M6YmVmb3JlLFxuLmlvbi1sb2dvLWRyaWJiYmxlOmJlZm9yZSxcbi5pb24tbG9nby1kcm9wYm94OmJlZm9yZSxcbi5pb24tbG9nby1ldXJvOmJlZm9yZSxcbi5pb24tbG9nby1mYWNlYm9vazpiZWZvcmUsXG4uaW9uLWxvZ28tZm91cnNxdWFyZTpiZWZvcmUsXG4uaW9uLWxvZ28tZnJlZWJzZC1kZXZpbDpiZWZvcmUsXG4uaW9uLWxvZ28tZ2l0aHViOmJlZm9yZSxcbi5pb24tbG9nby1nb29nbGU6YmVmb3JlLFxuLmlvbi1sb2dvLWdvb2dsZXBsdXM6YmVmb3JlLFxuLmlvbi1sb2dvLWhhY2tlcm5ld3M6YmVmb3JlLFxuLmlvbi1sb2dvLWh0bWw1OmJlZm9yZSxcbi5pb24tbG9nby1pbnN0YWdyYW06YmVmb3JlLFxuLmlvbi1sb2dvLWphdmFzY3JpcHQ6YmVmb3JlLFxuLmlvbi1sb2dvLWxpbmtlZGluOmJlZm9yZSxcbi5pb24tbG9nby1tYXJrZG93bjpiZWZvcmUsXG4uaW9uLWxvZ28tbm9kZWpzOmJlZm9yZSxcbi5pb24tbG9nby1vY3RvY2F0OmJlZm9yZSxcbi5pb24tbG9nby1waW50ZXJlc3Q6YmVmb3JlLFxuLmlvbi1sb2dvLXBsYXlzdGF0aW9uOmJlZm9yZSxcbi5pb24tbG9nby1weXRob246YmVmb3JlLFxuLmlvbi1sb2dvLXJlZGRpdDpiZWZvcmUsXG4uaW9uLWxvZ28tcnNzOmJlZm9yZSxcbi5pb24tbG9nby1zYXNzOmJlZm9yZSxcbi5pb24tbG9nby1za3lwZTpiZWZvcmUsXG4uaW9uLWxvZ28tc25hcGNoYXQ6YmVmb3JlLFxuLmlvbi1sb2dvLXN0ZWFtOmJlZm9yZSxcbi5pb24tbG9nby10dW1ibHI6YmVmb3JlLFxuLmlvbi1sb2dvLXR1eDpiZWZvcmUsXG4uaW9uLWxvZ28tdHdpdGNoOmJlZm9yZSxcbi5pb24tbG9nby10d2l0dGVyOmJlZm9yZSxcbi5pb24tbG9nby11c2Q6YmVmb3JlLFxuLmlvbi1sb2dvLXZpbWVvOmJlZm9yZSxcbi5pb24tbG9nby13aGF0c2FwcDpiZWZvcmUsXG4uaW9uLWxvZ28td2luZG93czpiZWZvcmUsXG4uaW9uLWxvZ28td29yZHByZXNzOmJlZm9yZSxcbi5pb24tbG9nby14Ym94OmJlZm9yZSxcbi5pb24tbG9nby15YWhvbzpiZWZvcmUsXG4uaW9uLWxvZ28teWVuOmJlZm9yZSxcbi5pb24tbG9nby15b3V0dWJlOmJlZm9yZSxcbi5pb24tbWQtYWRkOmJlZm9yZSxcbi5pb24tbWQtYWRkLWNpcmNsZTpiZWZvcmUsXG4uaW9uLW1kLWFsYXJtOmJlZm9yZSxcbi5pb24tbWQtYWxidW1zOmJlZm9yZSxcbi5pb24tbWQtYWxlcnQ6YmVmb3JlLFxuLmlvbi1tZC1hbWVyaWNhbi1mb290YmFsbDpiZWZvcmUsXG4uaW9uLW1kLWFuYWx5dGljczpiZWZvcmUsXG4uaW9uLW1kLWFwZXJ0dXJlOmJlZm9yZSxcbi5pb24tbWQtYXBwczpiZWZvcmUsXG4uaW9uLW1kLWFwcHN0b3JlOmJlZm9yZSxcbi5pb24tbWQtYXJjaGl2ZTpiZWZvcmUsXG4uaW9uLW1kLWFycm93LWJhY2s6YmVmb3JlLFxuLmlvbi1tZC1hcnJvdy1kb3duOmJlZm9yZSxcbi5pb24tbWQtYXJyb3ctZHJvcGRvd246YmVmb3JlLFxuLmlvbi1tZC1hcnJvdy1kcm9wZG93bi1jaXJjbGU6YmVmb3JlLFxuLmlvbi1tZC1hcnJvdy1kcm9wbGVmdDpiZWZvcmUsXG4uaW9uLW1kLWFycm93LWRyb3BsZWZ0LWNpcmNsZTpiZWZvcmUsXG4uaW9uLW1kLWFycm93LWRyb3ByaWdodDpiZWZvcmUsXG4uaW9uLW1kLWFycm93LWRyb3ByaWdodC1jaXJjbGU6YmVmb3JlLFxuLmlvbi1tZC1hcnJvdy1kcm9wdXA6YmVmb3JlLFxuLmlvbi1tZC1hcnJvdy1kcm9wdXAtY2lyY2xlOmJlZm9yZSxcbi5pb24tbWQtYXJyb3ctZm9yd2FyZDpiZWZvcmUsXG4uaW9uLW1kLWFycm93LXJvdW5kLWJhY2s6YmVmb3JlLFxuLmlvbi1tZC1hcnJvdy1yb3VuZC1kb3duOmJlZm9yZSxcbi5pb24tbWQtYXJyb3ctcm91bmQtZm9yd2FyZDpiZWZvcmUsXG4uaW9uLW1kLWFycm93LXJvdW5kLXVwOmJlZm9yZSxcbi5pb24tbWQtYXJyb3ctdXA6YmVmb3JlLFxuLmlvbi1tZC1hdDpiZWZvcmUsXG4uaW9uLW1kLWF0dGFjaDpiZWZvcmUsXG4uaW9uLW1kLWJhY2tzcGFjZTpiZWZvcmUsXG4uaW9uLW1kLWJhcmNvZGU6YmVmb3JlLFxuLmlvbi1tZC1iYXNlYmFsbDpiZWZvcmUsXG4uaW9uLW1kLWJhc2tldDpiZWZvcmUsXG4uaW9uLW1kLWJhc2tldGJhbGw6YmVmb3JlLFxuLmlvbi1tZC1iYXR0ZXJ5LWNoYXJnaW5nOmJlZm9yZSxcbi5pb24tbWQtYmF0dGVyeS1kZWFkOmJlZm9yZSxcbi5pb24tbWQtYmF0dGVyeS1mdWxsOmJlZm9yZSxcbi5pb24tbWQtYmVha2VyOmJlZm9yZSxcbi5pb24tbWQtYmVlcjpiZWZvcmUsXG4uaW9uLW1kLWJpY3ljbGU6YmVmb3JlLFxuLmlvbi1tZC1ibHVldG9vdGg6YmVmb3JlLFxuLmlvbi1tZC1ib2F0OmJlZm9yZSxcbi5pb24tbWQtYm9keTpiZWZvcmUsXG4uaW9uLW1kLWJvbmZpcmU6YmVmb3JlLFxuLmlvbi1tZC1ib29rOmJlZm9yZSxcbi5pb24tbWQtYm9va21hcms6YmVmb3JlLFxuLmlvbi1tZC1ib29rbWFya3M6YmVmb3JlLFxuLmlvbi1tZC1ib3d0aWU6YmVmb3JlLFxuLmlvbi1tZC1icmllZmNhc2U6YmVmb3JlLFxuLmlvbi1tZC1icm93c2VyczpiZWZvcmUsXG4uaW9uLW1kLWJydXNoOmJlZm9yZSxcbi5pb24tbWQtYnVnOmJlZm9yZSxcbi5pb24tbWQtYnVpbGQ6YmVmb3JlLFxuLmlvbi1tZC1idWxiOmJlZm9yZSxcbi5pb24tbWQtYnVzOmJlZm9yZSxcbi5pb24tbWQtY2FmZTpiZWZvcmUsXG4uaW9uLW1kLWNhbGN1bGF0b3I6YmVmb3JlLFxuLmlvbi1tZC1jYWxlbmRhcjpiZWZvcmUsXG4uaW9uLW1kLWNhbGw6YmVmb3JlLFxuLmlvbi1tZC1jYW1lcmE6YmVmb3JlLFxuLmlvbi1tZC1jYXI6YmVmb3JlLFxuLmlvbi1tZC1jYXJkOmJlZm9yZSxcbi5pb24tbWQtY2FydDpiZWZvcmUsXG4uaW9uLW1kLWNhc2g6YmVmb3JlLFxuLmlvbi1tZC1jaGF0Ym94ZXM6YmVmb3JlLFxuLmlvbi1tZC1jaGF0YnViYmxlczpiZWZvcmUsXG4uaW9uLW1kLWNoZWNrYm94OmJlZm9yZSxcbi5pb24tbWQtY2hlY2tib3gtb3V0bGluZTpiZWZvcmUsXG4uaW9uLW1kLWNoZWNrbWFyazpiZWZvcmUsXG4uaW9uLW1kLWNoZWNrbWFyay1jaXJjbGU6YmVmb3JlLFxuLmlvbi1tZC1jaGVja21hcmstY2lyY2xlLW91dGxpbmU6YmVmb3JlLFxuLmlvbi1tZC1jbGlwYm9hcmQ6YmVmb3JlLFxuLmlvbi1tZC1jbG9jazpiZWZvcmUsXG4uaW9uLW1kLWNsb3NlOmJlZm9yZSxcbi5pb24tbWQtY2xvc2UtY2lyY2xlOmJlZm9yZSxcbi5pb24tbWQtY2xvc2VkLWNhcHRpb25pbmc6YmVmb3JlLFxuLmlvbi1tZC1jbG91ZDpiZWZvcmUsXG4uaW9uLW1kLWNsb3VkLWNpcmNsZTpiZWZvcmUsXG4uaW9uLW1kLWNsb3VkLWRvbmU6YmVmb3JlLFxuLmlvbi1tZC1jbG91ZC1kb3dubG9hZDpiZWZvcmUsXG4uaW9uLW1kLWNsb3VkLW91dGxpbmU6YmVmb3JlLFxuLmlvbi1tZC1jbG91ZC11cGxvYWQ6YmVmb3JlLFxuLmlvbi1tZC1jbG91ZHk6YmVmb3JlLFxuLmlvbi1tZC1jbG91ZHktbmlnaHQ6YmVmb3JlLFxuLmlvbi1tZC1jb2RlOmJlZm9yZSxcbi5pb24tbWQtY29kZS1kb3dubG9hZDpiZWZvcmUsXG4uaW9uLW1kLWNvZGUtd29ya2luZzpiZWZvcmUsXG4uaW9uLW1kLWNvZzpiZWZvcmUsXG4uaW9uLW1kLWNvbG9yLWZpbGw6YmVmb3JlLFxuLmlvbi1tZC1jb2xvci1maWx0ZXI6YmVmb3JlLFxuLmlvbi1tZC1jb2xvci1wYWxldHRlOmJlZm9yZSxcbi5pb24tbWQtY29sb3Itd2FuZDpiZWZvcmUsXG4uaW9uLW1kLWNvbXBhc3M6YmVmb3JlLFxuLmlvbi1tZC1jb25zdHJ1Y3Q6YmVmb3JlLFxuLmlvbi1tZC1jb250YWN0OmJlZm9yZSxcbi5pb24tbWQtY29udGFjdHM6YmVmb3JlLFxuLmlvbi1tZC1jb250cmFjdDpiZWZvcmUsXG4uaW9uLW1kLWNvbnRyYXN0OmJlZm9yZSxcbi5pb24tbWQtY29weTpiZWZvcmUsXG4uaW9uLW1kLWNyZWF0ZTpiZWZvcmUsXG4uaW9uLW1kLWNyb3A6YmVmb3JlLFxuLmlvbi1tZC1jdWJlOmJlZm9yZSxcbi5pb24tbWQtY3V0OmJlZm9yZSxcbi5pb24tbWQtZGVza3RvcDpiZWZvcmUsXG4uaW9uLW1kLWRpc2M6YmVmb3JlLFxuLmlvbi1tZC1kb2N1bWVudDpiZWZvcmUsXG4uaW9uLW1kLWRvbmUtYWxsOmJlZm9yZSxcbi5pb24tbWQtZG93bmxvYWQ6YmVmb3JlLFxuLmlvbi1tZC1lYXNlbDpiZWZvcmUsXG4uaW9uLW1kLWVnZzpiZWZvcmUsXG4uaW9uLW1kLWV4aXQ6YmVmb3JlLFxuLmlvbi1tZC1leHBhbmQ6YmVmb3JlLFxuLmlvbi1tZC1leWU6YmVmb3JlLFxuLmlvbi1tZC1leWUtb2ZmOmJlZm9yZSxcbi5pb24tbWQtZmFzdGZvcndhcmQ6YmVmb3JlLFxuLmlvbi1tZC1mZW1hbGU6YmVmb3JlLFxuLmlvbi1tZC1maWxpbmc6YmVmb3JlLFxuLmlvbi1tZC1maWxtOmJlZm9yZSxcbi5pb24tbWQtZmluZ2VyLXByaW50OmJlZm9yZSxcbi5pb24tbWQtZmxhZzpiZWZvcmUsXG4uaW9uLW1kLWZsYW1lOmJlZm9yZSxcbi5pb24tbWQtZmxhc2g6YmVmb3JlLFxuLmlvbi1tZC1mbGFzazpiZWZvcmUsXG4uaW9uLW1kLWZsb3dlcjpiZWZvcmUsXG4uaW9uLW1kLWZvbGRlcjpiZWZvcmUsXG4uaW9uLW1kLWZvbGRlci1vcGVuOmJlZm9yZSxcbi5pb24tbWQtZm9vdGJhbGw6YmVmb3JlLFxuLmlvbi1tZC1mdW5uZWw6YmVmb3JlLFxuLmlvbi1tZC1nYW1lLWNvbnRyb2xsZXItYTpiZWZvcmUsXG4uaW9uLW1kLWdhbWUtY29udHJvbGxlci1iOmJlZm9yZSxcbi5pb24tbWQtZ2l0LWJyYW5jaDpiZWZvcmUsXG4uaW9uLW1kLWdpdC1jb21taXQ6YmVmb3JlLFxuLmlvbi1tZC1naXQtY29tcGFyZTpiZWZvcmUsXG4uaW9uLW1kLWdpdC1tZXJnZTpiZWZvcmUsXG4uaW9uLW1kLWdpdC1uZXR3b3JrOmJlZm9yZSxcbi5pb24tbWQtZ2l0LXB1bGwtcmVxdWVzdDpiZWZvcmUsXG4uaW9uLW1kLWdsYXNzZXM6YmVmb3JlLFxuLmlvbi1tZC1nbG9iZTpiZWZvcmUsXG4uaW9uLW1kLWdyaWQ6YmVmb3JlLFxuLmlvbi1tZC1oYW1tZXI6YmVmb3JlLFxuLmlvbi1tZC1oYW5kOmJlZm9yZSxcbi5pb24tbWQtaGFwcHk6YmVmb3JlLFxuLmlvbi1tZC1oZWFkc2V0OmJlZm9yZSxcbi5pb24tbWQtaGVhcnQ6YmVmb3JlLFxuLmlvbi1tZC1oZWFydC1vdXRsaW5lOmJlZm9yZSxcbi5pb24tbWQtaGVscDpiZWZvcmUsXG4uaW9uLW1kLWhlbHAtYnVveTpiZWZvcmUsXG4uaW9uLW1kLWhlbHAtY2lyY2xlOmJlZm9yZSxcbi5pb24tbWQtaG9tZTpiZWZvcmUsXG4uaW9uLW1kLWljZS1jcmVhbTpiZWZvcmUsXG4uaW9uLW1kLWltYWdlOmJlZm9yZSxcbi5pb24tbWQtaW1hZ2VzOmJlZm9yZSxcbi5pb24tbWQtaW5maW5pdGU6YmVmb3JlLFxuLmlvbi1tZC1pbmZvcm1hdGlvbjpiZWZvcmUsXG4uaW9uLW1kLWluZm9ybWF0aW9uLWNpcmNsZTpiZWZvcmUsXG4uaW9uLW1kLWlvbmljOmJlZm9yZSxcbi5pb24tbWQtaW9uaXRyb246YmVmb3JlLFxuLmlvbi1tZC1qZXQ6YmVmb3JlLFxuLmlvbi1tZC1rZXk6YmVmb3JlLFxuLmlvbi1tZC1rZXlwYWQ6YmVmb3JlLFxuLmlvbi1tZC1sYXB0b3A6YmVmb3JlLFxuLmlvbi1tZC1sZWFmOmJlZm9yZSxcbi5pb24tbWQtbGluazpiZWZvcmUsXG4uaW9uLW1kLWxpc3Q6YmVmb3JlLFxuLmlvbi1tZC1saXN0LWJveDpiZWZvcmUsXG4uaW9uLW1kLWxvY2F0ZTpiZWZvcmUsXG4uaW9uLW1kLWxvY2s6YmVmb3JlLFxuLmlvbi1tZC1sb2ctaW46YmVmb3JlLFxuLmlvbi1tZC1sb2ctb3V0OmJlZm9yZSxcbi5pb24tbWQtbWFnbmV0OmJlZm9yZSxcbi5pb24tbWQtbWFpbDpiZWZvcmUsXG4uaW9uLW1kLW1haWwtb3BlbjpiZWZvcmUsXG4uaW9uLW1kLW1hbGU6YmVmb3JlLFxuLmlvbi1tZC1tYW46YmVmb3JlLFxuLmlvbi1tZC1tYXA6YmVmb3JlLFxuLmlvbi1tZC1tZWRhbDpiZWZvcmUsXG4uaW9uLW1kLW1lZGljYWw6YmVmb3JlLFxuLmlvbi1tZC1tZWRraXQ6YmVmb3JlLFxuLmlvbi1tZC1tZWdhcGhvbmU6YmVmb3JlLFxuLmlvbi1tZC1tZW51OmJlZm9yZSxcbi5pb24tbWQtbWljOmJlZm9yZSxcbi5pb24tbWQtbWljLW9mZjpiZWZvcmUsXG4uaW9uLW1kLW1pY3JvcGhvbmU6YmVmb3JlLFxuLmlvbi1tZC1tb29uOmJlZm9yZSxcbi5pb24tbWQtbW9yZTpiZWZvcmUsXG4uaW9uLW1kLW1vdmU6YmVmb3JlLFxuLmlvbi1tZC1tdXNpY2FsLW5vdGU6YmVmb3JlLFxuLmlvbi1tZC1tdXNpY2FsLW5vdGVzOmJlZm9yZSxcbi5pb24tbWQtbmF2aWdhdGU6YmVmb3JlLFxuLmlvbi1tZC1uby1zbW9raW5nOmJlZm9yZSxcbi5pb24tbWQtbm90aWZpY2F0aW9uczpiZWZvcmUsXG4uaW9uLW1kLW5vdGlmaWNhdGlvbnMtb2ZmOmJlZm9yZSxcbi5pb24tbWQtbm90aWZpY2F0aW9ucy1vdXRsaW5lOmJlZm9yZSxcbi5pb24tbWQtbnVjbGVhcjpiZWZvcmUsXG4uaW9uLW1kLW51dHJpdGlvbjpiZWZvcmUsXG4uaW9uLW1kLW9wZW46YmVmb3JlLFxuLmlvbi1tZC1vcHRpb25zOmJlZm9yZSxcbi5pb24tbWQtb3V0bGV0OmJlZm9yZSxcbi5pb24tbWQtcGFwZXI6YmVmb3JlLFxuLmlvbi1tZC1wYXBlci1wbGFuZTpiZWZvcmUsXG4uaW9uLW1kLXBhcnRseS1zdW5ueTpiZWZvcmUsXG4uaW9uLW1kLXBhdXNlOmJlZm9yZSxcbi5pb24tbWQtcGF3OmJlZm9yZSxcbi5pb24tbWQtcGVvcGxlOmJlZm9yZSxcbi5pb24tbWQtcGVyc29uOmJlZm9yZSxcbi5pb24tbWQtcGVyc29uLWFkZDpiZWZvcmUsXG4uaW9uLW1kLXBob25lLWxhbmRzY2FwZTpiZWZvcmUsXG4uaW9uLW1kLXBob25lLXBvcnRyYWl0OmJlZm9yZSxcbi5pb24tbWQtcGhvdG9zOmJlZm9yZSxcbi5pb24tbWQtcGllOmJlZm9yZSxcbi5pb24tbWQtcGluOmJlZm9yZSxcbi5pb24tbWQtcGludDpiZWZvcmUsXG4uaW9uLW1kLXBpenphOmJlZm9yZSxcbi5pb24tbWQtcGxhbmU6YmVmb3JlLFxuLmlvbi1tZC1wbGFuZXQ6YmVmb3JlLFxuLmlvbi1tZC1wbGF5OmJlZm9yZSxcbi5pb24tbWQtcG9kaXVtOmJlZm9yZSxcbi5pb24tbWQtcG93ZXI6YmVmb3JlLFxuLmlvbi1tZC1wcmljZXRhZzpiZWZvcmUsXG4uaW9uLW1kLXByaWNldGFnczpiZWZvcmUsXG4uaW9uLW1kLXByaW50OmJlZm9yZSxcbi5pb24tbWQtcHVsc2U6YmVmb3JlLFxuLmlvbi1tZC1xci1zY2FubmVyOmJlZm9yZSxcbi5pb24tbWQtcXVvdGU6YmVmb3JlLFxuLmlvbi1tZC1yYWRpbzpiZWZvcmUsXG4uaW9uLW1kLXJhZGlvLWJ1dHRvbi1vZmY6YmVmb3JlLFxuLmlvbi1tZC1yYWRpby1idXR0b24tb246YmVmb3JlLFxuLmlvbi1tZC1yYWlueTpiZWZvcmUsXG4uaW9uLW1kLXJlY29yZGluZzpiZWZvcmUsXG4uaW9uLW1kLXJlZG86YmVmb3JlLFxuLmlvbi1tZC1yZWZyZXNoOmJlZm9yZSxcbi5pb24tbWQtcmVmcmVzaC1jaXJjbGU6YmVmb3JlLFxuLmlvbi1tZC1yZW1vdmU6YmVmb3JlLFxuLmlvbi1tZC1yZW1vdmUtY2lyY2xlOmJlZm9yZSxcbi5pb24tbWQtcmVvcmRlcjpiZWZvcmUsXG4uaW9uLW1kLXJlcGVhdDpiZWZvcmUsXG4uaW9uLW1kLXJlc2l6ZTpiZWZvcmUsXG4uaW9uLW1kLXJlc3RhdXJhbnQ6YmVmb3JlLFxuLmlvbi1tZC1yZXR1cm4tbGVmdDpiZWZvcmUsXG4uaW9uLW1kLXJldHVybi1yaWdodDpiZWZvcmUsXG4uaW9uLW1kLXJldmVyc2UtY2FtZXJhOmJlZm9yZSxcbi5pb24tbWQtcmV3aW5kOmJlZm9yZSxcbi5pb24tbWQtcmliYm9uOmJlZm9yZSxcbi5pb24tbWQtcm9zZTpiZWZvcmUsXG4uaW9uLW1kLXNhZDpiZWZvcmUsXG4uaW9uLW1kLXNjaG9vbDpiZWZvcmUsXG4uaW9uLW1kLXNlYXJjaDpiZWZvcmUsXG4uaW9uLW1kLXNlbmQ6YmVmb3JlLFxuLmlvbi1tZC1zZXR0aW5nczpiZWZvcmUsXG4uaW9uLW1kLXNoYXJlOmJlZm9yZSxcbi5pb24tbWQtc2hhcmUtYWx0OmJlZm9yZSxcbi5pb24tbWQtc2hpcnQ6YmVmb3JlLFxuLmlvbi1tZC1zaHVmZmxlOmJlZm9yZSxcbi5pb24tbWQtc2tpcC1iYWNrd2FyZDpiZWZvcmUsXG4uaW9uLW1kLXNraXAtZm9yd2FyZDpiZWZvcmUsXG4uaW9uLW1kLXNub3c6YmVmb3JlLFxuLmlvbi1tZC1zcGVlZG9tZXRlcjpiZWZvcmUsXG4uaW9uLW1kLXNxdWFyZTpiZWZvcmUsXG4uaW9uLW1kLXNxdWFyZS1vdXRsaW5lOmJlZm9yZSxcbi5pb24tbWQtc3RhcjpiZWZvcmUsXG4uaW9uLW1kLXN0YXItaGFsZjpiZWZvcmUsXG4uaW9uLW1kLXN0YXItb3V0bGluZTpiZWZvcmUsXG4uaW9uLW1kLXN0YXRzOmJlZm9yZSxcbi5pb24tbWQtc3RvcHdhdGNoOmJlZm9yZSxcbi5pb24tbWQtc3Vid2F5OmJlZm9yZSxcbi5pb24tbWQtc3Vubnk6YmVmb3JlLFxuLmlvbi1tZC1zd2FwOmJlZm9yZSxcbi5pb24tbWQtc3dpdGNoOmJlZm9yZSxcbi5pb24tbWQtc3luYzpiZWZvcmUsXG4uaW9uLW1kLXRhYmxldC1sYW5kc2NhcGU6YmVmb3JlLFxuLmlvbi1tZC10YWJsZXQtcG9ydHJhaXQ6YmVmb3JlLFxuLmlvbi1tZC10ZW5uaXNiYWxsOmJlZm9yZSxcbi5pb24tbWQtdGV4dDpiZWZvcmUsXG4uaW9uLW1kLXRoZXJtb21ldGVyOmJlZm9yZSxcbi5pb24tbWQtdGh1bWJzLWRvd246YmVmb3JlLFxuLmlvbi1tZC10aHVtYnMtdXA6YmVmb3JlLFxuLmlvbi1tZC10aHVuZGVyc3Rvcm06YmVmb3JlLFxuLmlvbi1tZC10aW1lOmJlZm9yZSxcbi5pb24tbWQtdGltZXI6YmVmb3JlLFxuLmlvbi1tZC10cmFpbjpiZWZvcmUsXG4uaW9uLW1kLXRyYW5zZ2VuZGVyOmJlZm9yZSxcbi5pb24tbWQtdHJhc2g6YmVmb3JlLFxuLmlvbi1tZC10cmVuZGluZy1kb3duOmJlZm9yZSxcbi5pb24tbWQtdHJlbmRpbmctdXA6YmVmb3JlLFxuLmlvbi1tZC10cm9waHk6YmVmb3JlLFxuLmlvbi1tZC11bWJyZWxsYTpiZWZvcmUsXG4uaW9uLW1kLXVuZG86YmVmb3JlLFxuLmlvbi1tZC11bmxvY2s6YmVmb3JlLFxuLmlvbi1tZC12aWRlb2NhbTpiZWZvcmUsXG4uaW9uLW1kLXZvbHVtZS1kb3duOmJlZm9yZSxcbi5pb24tbWQtdm9sdW1lLW11dGU6YmVmb3JlLFxuLmlvbi1tZC12b2x1bWUtb2ZmOmJlZm9yZSxcbi5pb24tbWQtdm9sdW1lLXVwOmJlZm9yZSxcbi5pb24tbWQtd2FsazpiZWZvcmUsXG4uaW9uLW1kLXdhcm5pbmc6YmVmb3JlLFxuLmlvbi1tZC13YXRjaDpiZWZvcmUsXG4uaW9uLW1kLXdhdGVyOmJlZm9yZSxcbi5pb24tbWQtd2lmaTpiZWZvcmUsXG4uaW9uLW1kLXdpbmU6YmVmb3JlLFxuLmlvbi1tZC13b21hbjpiZWZvcmUge1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIGZvbnQtZmFtaWx5OiBcIklvbmljb25zXCI7XG4gIHNwZWFrOiBub25lO1xuICBmb250LXN0eWxlOiBub3JtYWw7XG4gIGZvbnQtd2VpZ2h0OiBub3JtYWw7XG4gIGZvbnQtdmFyaWFudDogbm9ybWFsO1xuICB0ZXh0LXRyYW5zZm9ybTogbm9uZTtcbiAgdGV4dC1yZW5kZXJpbmc6IGF1dG87XG4gIGxpbmUtaGVpZ2h0OiAxO1xuICAtd2Via2l0LWZvbnQtc21vb3RoaW5nOiBhbnRpYWxpYXNlZDtcbiAgLW1vei1vc3gtZm9udC1zbW9vdGhpbmc6IGdyYXlzY2FsZTsgfVxuXG4uaW9uLWlvcy1hZGQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxMDJcIjsgfVxuXG4uaW9uLWlvcy1hZGQtY2lyY2xlOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMTAxXCI7IH1cblxuLmlvbi1pb3MtYWRkLWNpcmNsZS1vdXRsaW5lOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMTAwXCI7IH1cblxuLmlvbi1pb3MtYWRkLW91dGxpbmU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxMDJcIjsgfVxuXG4uaW9uLWlvcy1hbGFybTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjNjOFwiOyB9XG5cbi5pb24taW9zLWFsYXJtLW91dGxpbmU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYzYzdcIjsgfVxuXG4uaW9uLWlvcy1hbGJ1bXM6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYzY2FcIjsgfVxuXG4uaW9uLWlvcy1hbGJ1bXMtb3V0bGluZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjNjOVwiOyB9XG5cbi5pb24taW9zLWFsZXJ0OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMTA0XCI7IH1cblxuLmlvbi1pb3MtYWxlcnQtb3V0bGluZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjEwM1wiOyB9XG5cbi5pb24taW9zLWFtZXJpY2FuLWZvb3RiYWxsOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMTA2XCI7IH1cblxuLmlvbi1pb3MtYW1lcmljYW4tZm9vdGJhbGwtb3V0bGluZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjEwNVwiOyB9XG5cbi5pb24taW9zLWFuYWx5dGljczpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjNjZVwiOyB9XG5cbi5pb24taW9zLWFuYWx5dGljcy1vdXRsaW5lOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmM2NkXCI7IH1cblxuLmlvbi1pb3MtYXBlcnR1cmU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxMDhcIjsgfVxuXG4uaW9uLWlvcy1hcGVydHVyZS1vdXRsaW5lOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMTA3XCI7IH1cblxuLmlvbi1pb3MtYXBwczpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjEwYVwiOyB9XG5cbi5pb24taW9zLWFwcHMtb3V0bGluZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjEwOVwiOyB9XG5cbi5pb24taW9zLWFwcHN0b3JlOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMTBjXCI7IH1cblxuLmlvbi1pb3MtYXBwc3RvcmUtb3V0bGluZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjEwYlwiOyB9XG5cbi5pb24taW9zLWFyY2hpdmU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxMGVcIjsgfVxuXG4uaW9uLWlvcy1hcmNoaXZlLW91dGxpbmU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxMGRcIjsgfVxuXG4uaW9uLWlvcy1hcnJvdy1iYWNrOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmM2NmXCI7IH1cblxuLmlvbi1pb3MtYXJyb3ctYmFjay1vdXRsaW5lOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmM2NmXCI7IH1cblxuLmlvbi1pb3MtYXJyb3ctZG93bjpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjNkMFwiOyB9XG5cbi5pb24taW9zLWFycm93LWRvd24tb3V0bGluZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjNkMFwiOyB9XG5cbi5pb24taW9zLWFycm93LWRyb3Bkb3duOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMTEwXCI7IH1cblxuLmlvbi1pb3MtYXJyb3ctZHJvcGRvd24tY2lyY2xlOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMTBmXCI7IH1cblxuLmlvbi1pb3MtYXJyb3ctZHJvcGRvd24tY2lyY2xlLW91dGxpbmU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxMGZcIjsgfVxuXG4uaW9uLWlvcy1hcnJvdy1kcm9wZG93bi1vdXRsaW5lOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMTEwXCI7IH1cblxuLmlvbi1pb3MtYXJyb3ctZHJvcGxlZnQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxMTJcIjsgfVxuXG4uaW9uLWlvcy1hcnJvdy1kcm9wbGVmdC1jaXJjbGU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxMTFcIjsgfVxuXG4uaW9uLWlvcy1hcnJvdy1kcm9wbGVmdC1jaXJjbGUtb3V0bGluZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjExMVwiOyB9XG5cbi5pb24taW9zLWFycm93LWRyb3BsZWZ0LW91dGxpbmU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxMTJcIjsgfVxuXG4uaW9uLWlvcy1hcnJvdy1kcm9wcmlnaHQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxMTRcIjsgfVxuXG4uaW9uLWlvcy1hcnJvdy1kcm9wcmlnaHQtY2lyY2xlOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMTEzXCI7IH1cblxuLmlvbi1pb3MtYXJyb3ctZHJvcHJpZ2h0LWNpcmNsZS1vdXRsaW5lOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMTEzXCI7IH1cblxuLmlvbi1pb3MtYXJyb3ctZHJvcHJpZ2h0LW91dGxpbmU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxMTRcIjsgfVxuXG4uaW9uLWlvcy1hcnJvdy1kcm9wdXA6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxMTZcIjsgfVxuXG4uaW9uLWlvcy1hcnJvdy1kcm9wdXAtY2lyY2xlOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMTE1XCI7IH1cblxuLmlvbi1pb3MtYXJyb3ctZHJvcHVwLWNpcmNsZS1vdXRsaW5lOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMTE1XCI7IH1cblxuLmlvbi1pb3MtYXJyb3ctZHJvcHVwLW91dGxpbmU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxMTZcIjsgfVxuXG4uaW9uLWlvcy1hcnJvdy1mb3J3YXJkOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmM2QxXCI7IH1cblxuLmlvbi1pb3MtYXJyb3ctZm9yd2FyZC1vdXRsaW5lOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmM2QxXCI7IH1cblxuLmlvbi1pb3MtYXJyb3ctcm91bmQtYmFjazpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjExN1wiOyB9XG5cbi5pb24taW9zLWFycm93LXJvdW5kLWJhY2stb3V0bGluZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjExN1wiOyB9XG5cbi5pb24taW9zLWFycm93LXJvdW5kLWRvd246YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxMThcIjsgfVxuXG4uaW9uLWlvcy1hcnJvdy1yb3VuZC1kb3duLW91dGxpbmU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxMThcIjsgfVxuXG4uaW9uLWlvcy1hcnJvdy1yb3VuZC1mb3J3YXJkOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMTE5XCI7IH1cblxuLmlvbi1pb3MtYXJyb3ctcm91bmQtZm9yd2FyZC1vdXRsaW5lOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMTE5XCI7IH1cblxuLmlvbi1pb3MtYXJyb3ctcm91bmQtdXA6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxMWFcIjsgfVxuXG4uaW9uLWlvcy1hcnJvdy1yb3VuZC11cC1vdXRsaW5lOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMTFhXCI7IH1cblxuLmlvbi1pb3MtYXJyb3ctdXA6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYzZDhcIjsgfVxuXG4uaW9uLWlvcy1hcnJvdy11cC1vdXRsaW5lOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmM2Q4XCI7IH1cblxuLmlvbi1pb3MtYXQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYzZGFcIjsgfVxuXG4uaW9uLWlvcy1hdC1vdXRsaW5lOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmM2Q5XCI7IH1cblxuLmlvbi1pb3MtYXR0YWNoOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMTFiXCI7IH1cblxuLmlvbi1pb3MtYXR0YWNoLW91dGxpbmU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxMWJcIjsgfVxuXG4uaW9uLWlvcy1iYWNrc3BhY2U6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxMWRcIjsgfVxuXG4uaW9uLWlvcy1iYWNrc3BhY2Utb3V0bGluZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjExY1wiOyB9XG5cbi5pb24taW9zLWJhcmNvZGU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYzZGNcIjsgfVxuXG4uaW9uLWlvcy1iYXJjb2RlLW91dGxpbmU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYzZGJcIjsgfVxuXG4uaW9uLWlvcy1iYXNlYmFsbDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjNkZVwiOyB9XG5cbi5pb24taW9zLWJhc2ViYWxsLW91dGxpbmU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYzZGRcIjsgfVxuXG4uaW9uLWlvcy1iYXNrZXQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxMWZcIjsgfVxuXG4uaW9uLWlvcy1iYXNrZXQtb3V0bGluZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjExZVwiOyB9XG5cbi5pb24taW9zLWJhc2tldGJhbGw6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYzZTBcIjsgfVxuXG4uaW9uLWlvcy1iYXNrZXRiYWxsLW91dGxpbmU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYzZGZcIjsgfVxuXG4uaW9uLWlvcy1iYXR0ZXJ5LWNoYXJnaW5nOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMTIwXCI7IH1cblxuLmlvbi1pb3MtYmF0dGVyeS1jaGFyZ2luZy1vdXRsaW5lOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMTIwXCI7IH1cblxuLmlvbi1pb3MtYmF0dGVyeS1kZWFkOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMTIxXCI7IH1cblxuLmlvbi1pb3MtYmF0dGVyeS1kZWFkLW91dGxpbmU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxMjFcIjsgfVxuXG4uaW9uLWlvcy1iYXR0ZXJ5LWZ1bGw6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxMjJcIjsgfVxuXG4uaW9uLWlvcy1iYXR0ZXJ5LWZ1bGwtb3V0bGluZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjEyMlwiOyB9XG5cbi5pb24taW9zLWJlYWtlcjpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjEyNFwiOyB9XG5cbi5pb24taW9zLWJlYWtlci1vdXRsaW5lOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMTIzXCI7IH1cblxuLmlvbi1pb3MtYmVlcjpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjEyNlwiOyB9XG5cbi5pb24taW9zLWJlZXItb3V0bGluZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjEyNVwiOyB9XG5cbi5pb24taW9zLWJpY3ljbGU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxMjdcIjsgfVxuXG4uaW9uLWlvcy1iaWN5Y2xlLW91dGxpbmU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxMjdcIjsgfVxuXG4uaW9uLWlvcy1ibHVldG9vdGg6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxMjhcIjsgfVxuXG4uaW9uLWlvcy1ibHVldG9vdGgtb3V0bGluZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjEyOFwiOyB9XG5cbi5pb24taW9zLWJvYXQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxMmFcIjsgfVxuXG4uaW9uLWlvcy1ib2F0LW91dGxpbmU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxMjlcIjsgfVxuXG4uaW9uLWlvcy1ib2R5OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmM2U0XCI7IH1cblxuLmlvbi1pb3MtYm9keS1vdXRsaW5lOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmM2UzXCI7IH1cblxuLmlvbi1pb3MtYm9uZmlyZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjEyY1wiOyB9XG5cbi5pb24taW9zLWJvbmZpcmUtb3V0bGluZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjEyYlwiOyB9XG5cbi5pb24taW9zLWJvb2s6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYzZThcIjsgfVxuXG4uaW9uLWlvcy1ib29rLW91dGxpbmU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYzZTdcIjsgfVxuXG4uaW9uLWlvcy1ib29rbWFyazpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjEyZVwiOyB9XG5cbi5pb24taW9zLWJvb2ttYXJrLW91dGxpbmU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxMmRcIjsgfVxuXG4uaW9uLWlvcy1ib29rbWFya3M6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYzZWFcIjsgfVxuXG4uaW9uLWlvcy1ib29rbWFya3Mtb3V0bGluZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjNlOVwiOyB9XG5cbi5pb24taW9zLWJvd3RpZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjEzMFwiOyB9XG5cbi5pb24taW9zLWJvd3RpZS1vdXRsaW5lOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMTJmXCI7IH1cblxuLmlvbi1pb3MtYnJpZWZjYXNlOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmM2VlXCI7IH1cblxuLmlvbi1pb3MtYnJpZWZjYXNlLW91dGxpbmU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYzZWRcIjsgfVxuXG4uaW9uLWlvcy1icm93c2VyczpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjNmMFwiOyB9XG5cbi5pb24taW9zLWJyb3dzZXJzLW91dGxpbmU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYzZWZcIjsgfVxuXG4uaW9uLWlvcy1icnVzaDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjEzMlwiOyB9XG5cbi5pb24taW9zLWJydXNoLW91dGxpbmU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxMzFcIjsgfVxuXG4uaW9uLWlvcy1idWc6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxMzRcIjsgfVxuXG4uaW9uLWlvcy1idWctb3V0bGluZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjEzM1wiOyB9XG5cbi5pb24taW9zLWJ1aWxkOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMTM2XCI7IH1cblxuLmlvbi1pb3MtYnVpbGQtb3V0bGluZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjEzNVwiOyB9XG5cbi5pb24taW9zLWJ1bGI6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxMzhcIjsgfVxuXG4uaW9uLWlvcy1idWxiLW91dGxpbmU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxMzdcIjsgfVxuXG4uaW9uLWlvcy1idXM6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxM2FcIjsgfVxuXG4uaW9uLWlvcy1idXMtb3V0bGluZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjEzOVwiOyB9XG5cbi5pb24taW9zLWNhZmU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxM2NcIjsgfVxuXG4uaW9uLWlvcy1jYWZlLW91dGxpbmU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxM2JcIjsgfVxuXG4uaW9uLWlvcy1jYWxjdWxhdG9yOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmM2YyXCI7IH1cblxuLmlvbi1pb3MtY2FsY3VsYXRvci1vdXRsaW5lOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmM2YxXCI7IH1cblxuLmlvbi1pb3MtY2FsZW5kYXI6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYzZjRcIjsgfVxuXG4uaW9uLWlvcy1jYWxlbmRhci1vdXRsaW5lOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmM2YzXCI7IH1cblxuLmlvbi1pb3MtY2FsbDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjEzZVwiOyB9XG5cbi5pb24taW9zLWNhbGwtb3V0bGluZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjEzZFwiOyB9XG5cbi5pb24taW9zLWNhbWVyYTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjNmNlwiOyB9XG5cbi5pb24taW9zLWNhbWVyYS1vdXRsaW5lOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmM2Y1XCI7IH1cblxuLmlvbi1pb3MtY2FyOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMTQwXCI7IH1cblxuLmlvbi1pb3MtY2FyLW91dGxpbmU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxM2ZcIjsgfVxuXG4uaW9uLWlvcy1jYXJkOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMTQyXCI7IH1cblxuLmlvbi1pb3MtY2FyZC1vdXRsaW5lOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMTQxXCI7IH1cblxuLmlvbi1pb3MtY2FydDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjNmOFwiOyB9XG5cbi5pb24taW9zLWNhcnQtb3V0bGluZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjNmN1wiOyB9XG5cbi5pb24taW9zLWNhc2g6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxNDRcIjsgfVxuXG4uaW9uLWlvcy1jYXNoLW91dGxpbmU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxNDNcIjsgfVxuXG4uaW9uLWlvcy1jaGF0Ym94ZXM6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYzZmFcIjsgfVxuXG4uaW9uLWlvcy1jaGF0Ym94ZXMtb3V0bGluZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjNmOVwiOyB9XG5cbi5pb24taW9zLWNoYXRidWJibGVzOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMTQ2XCI7IH1cblxuLmlvbi1pb3MtY2hhdGJ1YmJsZXMtb3V0bGluZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjE0NVwiOyB9XG5cbi5pb24taW9zLWNoZWNrYm94OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMTQ4XCI7IH1cblxuLmlvbi1pb3MtY2hlY2tib3gtb3V0bGluZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjE0N1wiOyB9XG5cbi5pb24taW9zLWNoZWNrbWFyazpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjNmZlwiOyB9XG5cbi5pb24taW9zLWNoZWNrbWFyay1jaXJjbGU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxNGFcIjsgfVxuXG4uaW9uLWlvcy1jaGVja21hcmstY2lyY2xlLW91dGxpbmU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxNDlcIjsgfVxuXG4uaW9uLWlvcy1jaGVja21hcmstb3V0bGluZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjNmZlwiOyB9XG5cbi5pb24taW9zLWNsaXBib2FyZDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjE0Y1wiOyB9XG5cbi5pb24taW9zLWNsaXBib2FyZC1vdXRsaW5lOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMTRiXCI7IH1cblxuLmlvbi1pb3MtY2xvY2s6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGY0MDNcIjsgfVxuXG4uaW9uLWlvcy1jbG9jay1vdXRsaW5lOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmNDAyXCI7IH1cblxuLmlvbi1pb3MtY2xvc2U6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGY0MDZcIjsgfVxuXG4uaW9uLWlvcy1jbG9zZS1jaXJjbGU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxNGVcIjsgfVxuXG4uaW9uLWlvcy1jbG9zZS1jaXJjbGUtb3V0bGluZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjE0ZFwiOyB9XG5cbi5pb24taW9zLWNsb3NlLW91dGxpbmU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGY0MDZcIjsgfVxuXG4uaW9uLWlvcy1jbG9zZWQtY2FwdGlvbmluZzpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjE1MFwiOyB9XG5cbi5pb24taW9zLWNsb3NlZC1jYXB0aW9uaW5nLW91dGxpbmU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxNGZcIjsgfVxuXG4uaW9uLWlvcy1jbG91ZDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjQwY1wiOyB9XG5cbi5pb24taW9zLWNsb3VkLWNpcmNsZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjE1MlwiOyB9XG5cbi5pb24taW9zLWNsb3VkLWNpcmNsZS1vdXRsaW5lOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMTUxXCI7IH1cblxuLmlvbi1pb3MtY2xvdWQtZG9uZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjE1NFwiOyB9XG5cbi5pb24taW9zLWNsb3VkLWRvbmUtb3V0bGluZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjE1M1wiOyB9XG5cbi5pb24taW9zLWNsb3VkLWRvd25sb2FkOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmNDA4XCI7IH1cblxuLmlvbi1pb3MtY2xvdWQtZG93bmxvYWQtb3V0bGluZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjQwN1wiOyB9XG5cbi5pb24taW9zLWNsb3VkLW91dGxpbmU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGY0MDlcIjsgfVxuXG4uaW9uLWlvcy1jbG91ZC11cGxvYWQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGY0MGJcIjsgfVxuXG4uaW9uLWlvcy1jbG91ZC11cGxvYWQtb3V0bGluZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjQwYVwiOyB9XG5cbi5pb24taW9zLWNsb3VkeTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjQxMFwiOyB9XG5cbi5pb24taW9zLWNsb3VkeS1uaWdodDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjQwZVwiOyB9XG5cbi5pb24taW9zLWNsb3VkeS1uaWdodC1vdXRsaW5lOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmNDBkXCI7IH1cblxuLmlvbi1pb3MtY2xvdWR5LW91dGxpbmU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGY0MGZcIjsgfVxuXG4uaW9uLWlvcy1jb2RlOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMTU3XCI7IH1cblxuLmlvbi1pb3MtY29kZS1kb3dubG9hZDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjE1NVwiOyB9XG5cbi5pb24taW9zLWNvZGUtZG93bmxvYWQtb3V0bGluZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjE1NVwiOyB9XG5cbi5pb24taW9zLWNvZGUtb3V0bGluZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjE1N1wiOyB9XG5cbi5pb24taW9zLWNvZGUtd29ya2luZzpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjE1NlwiOyB9XG5cbi5pb24taW9zLWNvZGUtd29ya2luZy1vdXRsaW5lOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMTU2XCI7IH1cblxuLmlvbi1pb3MtY29nOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmNDEyXCI7IH1cblxuLmlvbi1pb3MtY29nLW91dGxpbmU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGY0MTFcIjsgfVxuXG4uaW9uLWlvcy1jb2xvci1maWxsOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMTU5XCI7IH1cblxuLmlvbi1pb3MtY29sb3ItZmlsbC1vdXRsaW5lOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMTU4XCI7IH1cblxuLmlvbi1pb3MtY29sb3ItZmlsdGVyOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmNDE0XCI7IH1cblxuLmlvbi1pb3MtY29sb3ItZmlsdGVyLW91dGxpbmU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGY0MTNcIjsgfVxuXG4uaW9uLWlvcy1jb2xvci1wYWxldHRlOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMTViXCI7IH1cblxuLmlvbi1pb3MtY29sb3ItcGFsZXR0ZS1vdXRsaW5lOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMTVhXCI7IH1cblxuLmlvbi1pb3MtY29sb3Itd2FuZDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjQxNlwiOyB9XG5cbi5pb24taW9zLWNvbG9yLXdhbmQtb3V0bGluZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjQxNVwiOyB9XG5cbi5pb24taW9zLWNvbXBhc3M6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxNWRcIjsgfVxuXG4uaW9uLWlvcy1jb21wYXNzLW91dGxpbmU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxNWNcIjsgfVxuXG4uaW9uLWlvcy1jb25zdHJ1Y3Q6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxNWZcIjsgfVxuXG4uaW9uLWlvcy1jb25zdHJ1Y3Qtb3V0bGluZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjE1ZVwiOyB9XG5cbi5pb24taW9zLWNvbnRhY3Q6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGY0MWFcIjsgfVxuXG4uaW9uLWlvcy1jb250YWN0LW91dGxpbmU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGY0MTlcIjsgfVxuXG4uaW9uLWlvcy1jb250YWN0czpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjE2MVwiOyB9XG5cbi5pb24taW9zLWNvbnRhY3RzLW91dGxpbmU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxNjBcIjsgfVxuXG4uaW9uLWlvcy1jb250cmFjdDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjE2MlwiOyB9XG5cbi5pb24taW9zLWNvbnRyYWN0LW91dGxpbmU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxNjJcIjsgfVxuXG4uaW9uLWlvcy1jb250cmFzdDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjE2M1wiOyB9XG5cbi5pb24taW9zLWNvbnRyYXN0LW91dGxpbmU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxNjNcIjsgfVxuXG4uaW9uLWlvcy1jb3B5OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmNDFjXCI7IH1cblxuLmlvbi1pb3MtY29weS1vdXRsaW5lOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmNDFiXCI7IH1cblxuLmlvbi1pb3MtY3JlYXRlOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMTY1XCI7IH1cblxuLmlvbi1pb3MtY3JlYXRlLW91dGxpbmU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxNjRcIjsgfVxuXG4uaW9uLWlvcy1jcm9wOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmNDFlXCI7IH1cblxuLmlvbi1pb3MtY3JvcC1vdXRsaW5lOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMTY2XCI7IH1cblxuLmlvbi1pb3MtY3ViZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjE2OFwiOyB9XG5cbi5pb24taW9zLWN1YmUtb3V0bGluZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjE2N1wiOyB9XG5cbi5pb24taW9zLWN1dDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjE2YVwiOyB9XG5cbi5pb24taW9zLWN1dC1vdXRsaW5lOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMTY5XCI7IH1cblxuLmlvbi1pb3MtZGVza3RvcDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjE2Y1wiOyB9XG5cbi5pb24taW9zLWRlc2t0b3Atb3V0bGluZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjE2YlwiOyB9XG5cbi5pb24taW9zLWRpc2M6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxNmVcIjsgfVxuXG4uaW9uLWlvcy1kaXNjLW91dGxpbmU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxNmRcIjsgfVxuXG4uaW9uLWlvcy1kb2N1bWVudDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjE3MFwiOyB9XG5cbi5pb24taW9zLWRvY3VtZW50LW91dGxpbmU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxNmZcIjsgfVxuXG4uaW9uLWlvcy1kb25lLWFsbDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjE3MVwiOyB9XG5cbi5pb24taW9zLWRvbmUtYWxsLW91dGxpbmU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxNzFcIjsgfVxuXG4uaW9uLWlvcy1kb3dubG9hZDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjQyMFwiOyB9XG5cbi5pb24taW9zLWRvd25sb2FkLW91dGxpbmU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGY0MWZcIjsgfVxuXG4uaW9uLWlvcy1lYXNlbDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjE3M1wiOyB9XG5cbi5pb24taW9zLWVhc2VsLW91dGxpbmU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxNzJcIjsgfVxuXG4uaW9uLWlvcy1lZ2c6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxNzVcIjsgfVxuXG4uaW9uLWlvcy1lZ2ctb3V0bGluZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjE3NFwiOyB9XG5cbi5pb24taW9zLWV4aXQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxNzdcIjsgfVxuXG4uaW9uLWlvcy1leGl0LW91dGxpbmU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxNzZcIjsgfVxuXG4uaW9uLWlvcy1leHBhbmQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxNzhcIjsgfVxuXG4uaW9uLWlvcy1leHBhbmQtb3V0bGluZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjE3OFwiOyB9XG5cbi5pb24taW9zLWV5ZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjQyNVwiOyB9XG5cbi5pb24taW9zLWV5ZS1vZmY6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxN2FcIjsgfVxuXG4uaW9uLWlvcy1leWUtb2ZmLW91dGxpbmU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxNzlcIjsgfVxuXG4uaW9uLWlvcy1leWUtb3V0bGluZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjQyNFwiOyB9XG5cbi5pb24taW9zLWZhc3Rmb3J3YXJkOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmNDI3XCI7IH1cblxuLmlvbi1pb3MtZmFzdGZvcndhcmQtb3V0bGluZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjQyNlwiOyB9XG5cbi5pb24taW9zLWZlbWFsZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjE3YlwiOyB9XG5cbi5pb24taW9zLWZlbWFsZS1vdXRsaW5lOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMTdiXCI7IH1cblxuLmlvbi1pb3MtZmlsaW5nOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmNDI5XCI7IH1cblxuLmlvbi1pb3MtZmlsaW5nLW91dGxpbmU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGY0MjhcIjsgfVxuXG4uaW9uLWlvcy1maWxtOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmNDJiXCI7IH1cblxuLmlvbi1pb3MtZmlsbS1vdXRsaW5lOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmNDJhXCI7IH1cblxuLmlvbi1pb3MtZmluZ2VyLXByaW50OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMTdjXCI7IH1cblxuLmlvbi1pb3MtZmluZ2VyLXByaW50LW91dGxpbmU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxN2NcIjsgfVxuXG4uaW9uLWlvcy1mbGFnOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmNDJkXCI7IH1cblxuLmlvbi1pb3MtZmxhZy1vdXRsaW5lOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmNDJjXCI7IH1cblxuLmlvbi1pb3MtZmxhbWU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGY0MmZcIjsgfVxuXG4uaW9uLWlvcy1mbGFtZS1vdXRsaW5lOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmNDJlXCI7IH1cblxuLmlvbi1pb3MtZmxhc2g6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxN2VcIjsgfVxuXG4uaW9uLWlvcy1mbGFzaC1vdXRsaW5lOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMTdkXCI7IH1cblxuLmlvbi1pb3MtZmxhc2s6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGY0MzFcIjsgfVxuXG4uaW9uLWlvcy1mbGFzay1vdXRsaW5lOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmNDMwXCI7IH1cblxuLmlvbi1pb3MtZmxvd2VyOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmNDMzXCI7IH1cblxuLmlvbi1pb3MtZmxvd2VyLW91dGxpbmU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGY0MzJcIjsgfVxuXG4uaW9uLWlvcy1mb2xkZXI6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGY0MzVcIjsgfVxuXG4uaW9uLWlvcy1mb2xkZXItb3BlbjpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjE4MFwiOyB9XG5cbi5pb24taW9zLWZvbGRlci1vcGVuLW91dGxpbmU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxN2ZcIjsgfVxuXG4uaW9uLWlvcy1mb2xkZXItb3V0bGluZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjQzNFwiOyB9XG5cbi5pb24taW9zLWZvb3RiYWxsOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmNDM3XCI7IH1cblxuLmlvbi1pb3MtZm9vdGJhbGwtb3V0bGluZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjQzNlwiOyB9XG5cbi5pb24taW9zLWZ1bm5lbDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjE4MlwiOyB9XG5cbi5pb24taW9zLWZ1bm5lbC1vdXRsaW5lOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMTgxXCI7IH1cblxuLmlvbi1pb3MtZ2FtZS1jb250cm9sbGVyLWE6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGY0MzlcIjsgfVxuXG4uaW9uLWlvcy1nYW1lLWNvbnRyb2xsZXItYS1vdXRsaW5lOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmNDM4XCI7IH1cblxuLmlvbi1pb3MtZ2FtZS1jb250cm9sbGVyLWI6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGY0M2JcIjsgfVxuXG4uaW9uLWlvcy1nYW1lLWNvbnRyb2xsZXItYi1vdXRsaW5lOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmNDNhXCI7IH1cblxuLmlvbi1pb3MtZ2l0LWJyYW5jaDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjE4M1wiOyB9XG5cbi5pb24taW9zLWdpdC1icmFuY2gtb3V0bGluZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjE4M1wiOyB9XG5cbi5pb24taW9zLWdpdC1jb21taXQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxODRcIjsgfVxuXG4uaW9uLWlvcy1naXQtY29tbWl0LW91dGxpbmU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxODRcIjsgfVxuXG4uaW9uLWlvcy1naXQtY29tcGFyZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjE4NVwiOyB9XG5cbi5pb24taW9zLWdpdC1jb21wYXJlLW91dGxpbmU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxODVcIjsgfVxuXG4uaW9uLWlvcy1naXQtbWVyZ2U6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxODZcIjsgfVxuXG4uaW9uLWlvcy1naXQtbWVyZ2Utb3V0bGluZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjE4NlwiOyB9XG5cbi5pb24taW9zLWdpdC1uZXR3b3JrOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMTg3XCI7IH1cblxuLmlvbi1pb3MtZ2l0LW5ldHdvcmstb3V0bGluZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjE4N1wiOyB9XG5cbi5pb24taW9zLWdpdC1wdWxsLXJlcXVlc3Q6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxODhcIjsgfVxuXG4uaW9uLWlvcy1naXQtcHVsbC1yZXF1ZXN0LW91dGxpbmU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxODhcIjsgfVxuXG4uaW9uLWlvcy1nbGFzc2VzOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmNDNmXCI7IH1cblxuLmlvbi1pb3MtZ2xhc3Nlcy1vdXRsaW5lOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmNDNlXCI7IH1cblxuLmlvbi1pb3MtZ2xvYmU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxOGFcIjsgfVxuXG4uaW9uLWlvcy1nbG9iZS1vdXRsaW5lOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMTg5XCI7IH1cblxuLmlvbi1pb3MtZ3JpZDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjE4Y1wiOyB9XG5cbi5pb24taW9zLWdyaWQtb3V0bGluZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjE4YlwiOyB9XG5cbi5pb24taW9zLWhhbW1lcjpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjE4ZVwiOyB9XG5cbi5pb24taW9zLWhhbW1lci1vdXRsaW5lOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMThkXCI7IH1cblxuLmlvbi1pb3MtaGFuZDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjE5MFwiOyB9XG5cbi5pb24taW9zLWhhbmQtb3V0bGluZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjE4ZlwiOyB9XG5cbi5pb24taW9zLWhhcHB5OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMTkyXCI7IH1cblxuLmlvbi1pb3MtaGFwcHktb3V0bGluZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjE5MVwiOyB9XG5cbi5pb24taW9zLWhlYWRzZXQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxOTRcIjsgfVxuXG4uaW9uLWlvcy1oZWFkc2V0LW91dGxpbmU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxOTNcIjsgfVxuXG4uaW9uLWlvcy1oZWFydDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjQ0M1wiOyB9XG5cbi5pb24taW9zLWhlYXJ0LW91dGxpbmU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGY0NDJcIjsgfVxuXG4uaW9uLWlvcy1oZWxwOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmNDQ2XCI7IH1cblxuLmlvbi1pb3MtaGVscC1idW95OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMTk2XCI7IH1cblxuLmlvbi1pb3MtaGVscC1idW95LW91dGxpbmU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxOTVcIjsgfVxuXG4uaW9uLWlvcy1oZWxwLWNpcmNsZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjE5OFwiOyB9XG5cbi5pb24taW9zLWhlbHAtY2lyY2xlLW91dGxpbmU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxOTdcIjsgfVxuXG4uaW9uLWlvcy1oZWxwLW91dGxpbmU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGY0NDZcIjsgfVxuXG4uaW9uLWlvcy1ob21lOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmNDQ4XCI7IH1cblxuLmlvbi1pb3MtaG9tZS1vdXRsaW5lOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmNDQ3XCI7IH1cblxuLmlvbi1pb3MtaWNlLWNyZWFtOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMTlhXCI7IH1cblxuLmlvbi1pb3MtaWNlLWNyZWFtLW91dGxpbmU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxOTlcIjsgfVxuXG4uaW9uLWlvcy1pbWFnZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjE5Y1wiOyB9XG5cbi5pb24taW9zLWltYWdlLW91dGxpbmU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxOWJcIjsgfVxuXG4uaW9uLWlvcy1pbWFnZXM6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxOWVcIjsgfVxuXG4uaW9uLWlvcy1pbWFnZXMtb3V0bGluZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjE5ZFwiOyB9XG5cbi5pb24taW9zLWluZmluaXRlOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmNDRhXCI7IH1cblxuLmlvbi1pb3MtaW5maW5pdGUtb3V0bGluZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjQ0OVwiOyB9XG5cbi5pb24taW9zLWluZm9ybWF0aW9uOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmNDRkXCI7IH1cblxuLmlvbi1pb3MtaW5mb3JtYXRpb24tY2lyY2xlOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMWEwXCI7IH1cblxuLmlvbi1pb3MtaW5mb3JtYXRpb24tY2lyY2xlLW91dGxpbmU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxOWZcIjsgfVxuXG4uaW9uLWlvcy1pbmZvcm1hdGlvbi1vdXRsaW5lOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmNDRkXCI7IH1cblxuLmlvbi1pb3MtaW9uaWM6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxYTFcIjsgfVxuXG4uaW9uLWlvcy1pb25pYy1vdXRsaW5lOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmNDRlXCI7IH1cblxuLmlvbi1pb3MtaW9uaXRyb246YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxYTNcIjsgfVxuXG4uaW9uLWlvcy1pb25pdHJvbi1vdXRsaW5lOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMWEyXCI7IH1cblxuLmlvbi1pb3MtamV0OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMWE1XCI7IH1cblxuLmlvbi1pb3MtamV0LW91dGxpbmU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxYTRcIjsgfVxuXG4uaW9uLWlvcy1rZXk6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxYTdcIjsgfVxuXG4uaW9uLWlvcy1rZXktb3V0bGluZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjFhNlwiOyB9XG5cbi5pb24taW9zLWtleXBhZDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjQ1MFwiOyB9XG5cbi5pb24taW9zLWtleXBhZC1vdXRsaW5lOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmNDRmXCI7IH1cblxuLmlvbi1pb3MtbGFwdG9wOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMWE4XCI7IH1cblxuLmlvbi1pb3MtbGFwdG9wLW91dGxpbmU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxYThcIjsgfVxuXG4uaW9uLWlvcy1sZWFmOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMWFhXCI7IH1cblxuLmlvbi1pb3MtbGVhZi1vdXRsaW5lOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMWE5XCI7IH1cblxuLmlvbi1pb3MtbGluazpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjIyYVwiOyB9XG5cbi5pb24taW9zLWxpbmstb3V0bGluZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjFjYVwiOyB9XG5cbi5pb24taW9zLWxpc3Q6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGY0NTRcIjsgfVxuXG4uaW9uLWlvcy1saXN0LWJveDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjFhY1wiOyB9XG5cbi5pb24taW9zLWxpc3QtYm94LW91dGxpbmU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxYWJcIjsgfVxuXG4uaW9uLWlvcy1saXN0LW91dGxpbmU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGY0NTRcIjsgfVxuXG4uaW9uLWlvcy1sb2NhdGU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxYWVcIjsgfVxuXG4uaW9uLWlvcy1sb2NhdGUtb3V0bGluZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjFhZFwiOyB9XG5cbi5pb24taW9zLWxvY2s6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxYjBcIjsgfVxuXG4uaW9uLWlvcy1sb2NrLW91dGxpbmU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxYWZcIjsgfVxuXG4uaW9uLWlvcy1sb2ctaW46YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxYjFcIjsgfVxuXG4uaW9uLWlvcy1sb2ctaW4tb3V0bGluZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjFiMVwiOyB9XG5cbi5pb24taW9zLWxvZy1vdXQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxYjJcIjsgfVxuXG4uaW9uLWlvcy1sb2ctb3V0LW91dGxpbmU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxYjJcIjsgfVxuXG4uaW9uLWlvcy1tYWduZXQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxYjRcIjsgfVxuXG4uaW9uLWlvcy1tYWduZXQtb3V0bGluZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjFiM1wiOyB9XG5cbi5pb24taW9zLW1haWw6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxYjhcIjsgfVxuXG4uaW9uLWlvcy1tYWlsLW9wZW46YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxYjZcIjsgfVxuXG4uaW9uLWlvcy1tYWlsLW9wZW4tb3V0bGluZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjFiNVwiOyB9XG5cbi5pb24taW9zLW1haWwtb3V0bGluZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjFiN1wiOyB9XG5cbi5pb24taW9zLW1hbGU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxYjlcIjsgfVxuXG4uaW9uLWlvcy1tYWxlLW91dGxpbmU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxYjlcIjsgfVxuXG4uaW9uLWlvcy1tYW46YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxYmJcIjsgfVxuXG4uaW9uLWlvcy1tYW4tb3V0bGluZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjFiYVwiOyB9XG5cbi5pb24taW9zLW1hcDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjFiZFwiOyB9XG5cbi5pb24taW9zLW1hcC1vdXRsaW5lOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMWJjXCI7IH1cblxuLmlvbi1pb3MtbWVkYWw6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxYmZcIjsgfVxuXG4uaW9uLWlvcy1tZWRhbC1vdXRsaW5lOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMWJlXCI7IH1cblxuLmlvbi1pb3MtbWVkaWNhbDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjQ1Y1wiOyB9XG5cbi5pb24taW9zLW1lZGljYWwtb3V0bGluZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjQ1YlwiOyB9XG5cbi5pb24taW9zLW1lZGtpdDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjQ1ZVwiOyB9XG5cbi5pb24taW9zLW1lZGtpdC1vdXRsaW5lOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmNDVkXCI7IH1cblxuLmlvbi1pb3MtbWVnYXBob25lOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMWMxXCI7IH1cblxuLmlvbi1pb3MtbWVnYXBob25lLW91dGxpbmU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxYzBcIjsgfVxuXG4uaW9uLWlvcy1tZW51OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMWMzXCI7IH1cblxuLmlvbi1pb3MtbWVudS1vdXRsaW5lOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMWMyXCI7IH1cblxuLmlvbi1pb3MtbWljOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmNDYxXCI7IH1cblxuLmlvbi1pb3MtbWljLW9mZjpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjQ1ZlwiOyB9XG5cbi5pb24taW9zLW1pYy1vZmYtb3V0bGluZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjFjNFwiOyB9XG5cbi5pb24taW9zLW1pYy1vdXRsaW5lOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmNDYwXCI7IH1cblxuLmlvbi1pb3MtbWljcm9waG9uZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjFjNlwiOyB9XG5cbi5pb24taW9zLW1pY3JvcGhvbmUtb3V0bGluZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjFjNVwiOyB9XG5cbi5pb24taW9zLW1vb246YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGY0NjhcIjsgfVxuXG4uaW9uLWlvcy1tb29uLW91dGxpbmU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGY0NjdcIjsgfVxuXG4uaW9uLWlvcy1tb3JlOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMWM4XCI7IH1cblxuLmlvbi1pb3MtbW9yZS1vdXRsaW5lOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMWM3XCI7IH1cblxuLmlvbi1pb3MtbW92ZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjFjYlwiOyB9XG5cbi5pb24taW9zLW1vdmUtb3V0bGluZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjFjYlwiOyB9XG5cbi5pb24taW9zLW11c2ljYWwtbm90ZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjQ2YlwiOyB9XG5cbi5pb24taW9zLW11c2ljYWwtbm90ZS1vdXRsaW5lOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMWNjXCI7IH1cblxuLmlvbi1pb3MtbXVzaWNhbC1ub3RlczpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjQ2Y1wiOyB9XG5cbi5pb24taW9zLW11c2ljYWwtbm90ZXMtb3V0bGluZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjFjZFwiOyB9XG5cbi5pb24taW9zLW5hdmlnYXRlOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmNDZlXCI7IH1cblxuLmlvbi1pb3MtbmF2aWdhdGUtb3V0bGluZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjQ2ZFwiOyB9XG5cbi5pb24taW9zLW5vLXNtb2tpbmc6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxY2ZcIjsgfVxuXG4uaW9uLWlvcy1uby1zbW9raW5nLW91dGxpbmU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxY2VcIjsgfVxuXG4uaW9uLWlvcy1ub3RpZmljYXRpb25zOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMWQzXCI7IH1cblxuLmlvbi1pb3Mtbm90aWZpY2F0aW9ucy1vZmY6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxZDFcIjsgfVxuXG4uaW9uLWlvcy1ub3RpZmljYXRpb25zLW9mZi1vdXRsaW5lOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMWQwXCI7IH1cblxuLmlvbi1pb3Mtbm90aWZpY2F0aW9ucy1vdXRsaW5lOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMWQyXCI7IH1cblxuLmlvbi1pb3MtbnVjbGVhcjpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjFkNVwiOyB9XG5cbi5pb24taW9zLW51Y2xlYXItb3V0bGluZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjFkNFwiOyB9XG5cbi5pb24taW9zLW51dHJpdGlvbjpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjQ3MFwiOyB9XG5cbi5pb24taW9zLW51dHJpdGlvbi1vdXRsaW5lOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmNDZmXCI7IH1cblxuLmlvbi1pb3Mtb3BlbjpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjFkN1wiOyB9XG5cbi5pb24taW9zLW9wZW4tb3V0bGluZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjFkNlwiOyB9XG5cbi5pb24taW9zLW9wdGlvbnM6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxZDlcIjsgfVxuXG4uaW9uLWlvcy1vcHRpb25zLW91dGxpbmU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxZDhcIjsgfVxuXG4uaW9uLWlvcy1vdXRsZXQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxZGJcIjsgfVxuXG4uaW9uLWlvcy1vdXRsZXQtb3V0bGluZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjFkYVwiOyB9XG5cbi5pb24taW9zLXBhcGVyOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmNDcyXCI7IH1cblxuLmlvbi1pb3MtcGFwZXItb3V0bGluZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjQ3MVwiOyB9XG5cbi5pb24taW9zLXBhcGVyLXBsYW5lOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMWRkXCI7IH1cblxuLmlvbi1pb3MtcGFwZXItcGxhbmUtb3V0bGluZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjFkY1wiOyB9XG5cbi5pb24taW9zLXBhcnRseS1zdW5ueTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjFkZlwiOyB9XG5cbi5pb24taW9zLXBhcnRseS1zdW5ueS1vdXRsaW5lOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMWRlXCI7IH1cblxuLmlvbi1pb3MtcGF1c2U6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGY0NzhcIjsgfVxuXG4uaW9uLWlvcy1wYXVzZS1vdXRsaW5lOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmNDc3XCI7IH1cblxuLmlvbi1pb3MtcGF3OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmNDdhXCI7IH1cblxuLmlvbi1pb3MtcGF3LW91dGxpbmU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGY0NzlcIjsgfVxuXG4uaW9uLWlvcy1wZW9wbGU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGY0N2NcIjsgfVxuXG4uaW9uLWlvcy1wZW9wbGUtb3V0bGluZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjQ3YlwiOyB9XG5cbi5pb24taW9zLXBlcnNvbjpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjQ3ZVwiOyB9XG5cbi5pb24taW9zLXBlcnNvbi1hZGQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxZTFcIjsgfVxuXG4uaW9uLWlvcy1wZXJzb24tYWRkLW91dGxpbmU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxZTBcIjsgfVxuXG4uaW9uLWlvcy1wZXJzb24tb3V0bGluZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjQ3ZFwiOyB9XG5cbi5pb24taW9zLXBob25lLWxhbmRzY2FwZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjFlMlwiOyB9XG5cbi5pb24taW9zLXBob25lLWxhbmRzY2FwZS1vdXRsaW5lOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMWUyXCI7IH1cblxuLmlvbi1pb3MtcGhvbmUtcG9ydHJhaXQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxZTNcIjsgfVxuXG4uaW9uLWlvcy1waG9uZS1wb3J0cmFpdC1vdXRsaW5lOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMWUzXCI7IH1cblxuLmlvbi1pb3MtcGhvdG9zOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmNDgyXCI7IH1cblxuLmlvbi1pb3MtcGhvdG9zLW91dGxpbmU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGY0ODFcIjsgfVxuXG4uaW9uLWlvcy1waWU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGY0ODRcIjsgfVxuXG4uaW9uLWlvcy1waWUtb3V0bGluZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjQ4M1wiOyB9XG5cbi5pb24taW9zLXBpbjpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjFlNVwiOyB9XG5cbi5pb24taW9zLXBpbi1vdXRsaW5lOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMWU0XCI7IH1cblxuLmlvbi1pb3MtcGludDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjQ4NlwiOyB9XG5cbi5pb24taW9zLXBpbnQtb3V0bGluZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjQ4NVwiOyB9XG5cbi5pb24taW9zLXBpenphOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMWU3XCI7IH1cblxuLmlvbi1pb3MtcGl6emEtb3V0bGluZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjFlNlwiOyB9XG5cbi5pb24taW9zLXBsYW5lOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMWU5XCI7IH1cblxuLmlvbi1pb3MtcGxhbmUtb3V0bGluZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjFlOFwiOyB9XG5cbi5pb24taW9zLXBsYW5ldDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjFlYlwiOyB9XG5cbi5pb24taW9zLXBsYW5ldC1vdXRsaW5lOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMWVhXCI7IH1cblxuLmlvbi1pb3MtcGxheTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjQ4OFwiOyB9XG5cbi5pb24taW9zLXBsYXktb3V0bGluZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjQ4N1wiOyB9XG5cbi5pb24taW9zLXBvZGl1bTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjFlZFwiOyB9XG5cbi5pb24taW9zLXBvZGl1bS1vdXRsaW5lOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMWVjXCI7IH1cblxuLmlvbi1pb3MtcG93ZXI6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxZWZcIjsgfVxuXG4uaW9uLWlvcy1wb3dlci1vdXRsaW5lOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMWVlXCI7IH1cblxuLmlvbi1pb3MtcHJpY2V0YWc6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGY0OGRcIjsgfVxuXG4uaW9uLWlvcy1wcmljZXRhZy1vdXRsaW5lOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmNDhjXCI7IH1cblxuLmlvbi1pb3MtcHJpY2V0YWdzOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmNDhmXCI7IH1cblxuLmlvbi1pb3MtcHJpY2V0YWdzLW91dGxpbmU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGY0OGVcIjsgfVxuXG4uaW9uLWlvcy1wcmludDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjFmMVwiOyB9XG5cbi5pb24taW9zLXByaW50LW91dGxpbmU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxZjBcIjsgfVxuXG4uaW9uLWlvcy1wdWxzZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjQ5M1wiOyB9XG5cbi5pb24taW9zLXB1bHNlLW91dGxpbmU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxZjJcIjsgfVxuXG4uaW9uLWlvcy1xci1zY2FubmVyOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMWYzXCI7IH1cblxuLmlvbi1pb3MtcXItc2Nhbm5lci1vdXRsaW5lOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMWYzXCI7IH1cblxuLmlvbi1pb3MtcXVvdGU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxZjVcIjsgfVxuXG4uaW9uLWlvcy1xdW90ZS1vdXRsaW5lOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMWY0XCI7IH1cblxuLmlvbi1pb3MtcmFkaW86YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxZjlcIjsgfVxuXG4uaW9uLWlvcy1yYWRpby1idXR0b24tb2ZmOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMWY2XCI7IH1cblxuLmlvbi1pb3MtcmFkaW8tYnV0dG9uLW9mZi1vdXRsaW5lOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMWY2XCI7IH1cblxuLmlvbi1pb3MtcmFkaW8tYnV0dG9uLW9uOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMWY3XCI7IH1cblxuLmlvbi1pb3MtcmFkaW8tYnV0dG9uLW9uLW91dGxpbmU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxZjdcIjsgfVxuXG4uaW9uLWlvcy1yYWRpby1vdXRsaW5lOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMWY4XCI7IH1cblxuLmlvbi1pb3MtcmFpbnk6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGY0OTVcIjsgfVxuXG4uaW9uLWlvcy1yYWlueS1vdXRsaW5lOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmNDk0XCI7IH1cblxuLmlvbi1pb3MtcmVjb3JkaW5nOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmNDk3XCI7IH1cblxuLmlvbi1pb3MtcmVjb3JkaW5nLW91dGxpbmU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGY0OTZcIjsgfVxuXG4uaW9uLWlvcy1yZWRvOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmNDk5XCI7IH1cblxuLmlvbi1pb3MtcmVkby1vdXRsaW5lOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmNDk4XCI7IH1cblxuLmlvbi1pb3MtcmVmcmVzaDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjQ5Y1wiOyB9XG5cbi5pb24taW9zLXJlZnJlc2gtY2lyY2xlOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMjI2XCI7IH1cblxuLmlvbi1pb3MtcmVmcmVzaC1jaXJjbGUtb3V0bGluZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjIyNFwiOyB9XG5cbi5pb24taW9zLXJlZnJlc2gtb3V0bGluZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjQ5Y1wiOyB9XG5cbi5pb24taW9zLXJlbW92ZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjFmY1wiOyB9XG5cbi5pb24taW9zLXJlbW92ZS1jaXJjbGU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxZmJcIjsgfVxuXG4uaW9uLWlvcy1yZW1vdmUtY2lyY2xlLW91dGxpbmU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxZmFcIjsgfVxuXG4uaW9uLWlvcy1yZW1vdmUtb3V0bGluZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjFmY1wiOyB9XG5cbi5pb24taW9zLXJlb3JkZXI6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxZmRcIjsgfVxuXG4uaW9uLWlvcy1yZW9yZGVyLW91dGxpbmU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxZmRcIjsgfVxuXG4uaW9uLWlvcy1yZXBlYXQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxZmVcIjsgfVxuXG4uaW9uLWlvcy1yZXBlYXQtb3V0bGluZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjFmZVwiOyB9XG5cbi5pb24taW9zLXJlc2l6ZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjFmZlwiOyB9XG5cbi5pb24taW9zLXJlc2l6ZS1vdXRsaW5lOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMWZmXCI7IH1cblxuLmlvbi1pb3MtcmVzdGF1cmFudDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjIwMVwiOyB9XG5cbi5pb24taW9zLXJlc3RhdXJhbnQtb3V0bGluZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjIwMFwiOyB9XG5cbi5pb24taW9zLXJldHVybi1sZWZ0OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMjAyXCI7IH1cblxuLmlvbi1pb3MtcmV0dXJuLWxlZnQtb3V0bGluZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjIwMlwiOyB9XG5cbi5pb24taW9zLXJldHVybi1yaWdodDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjIwM1wiOyB9XG5cbi5pb24taW9zLXJldHVybi1yaWdodC1vdXRsaW5lOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMjAzXCI7IH1cblxuLmlvbi1pb3MtcmV2ZXJzZS1jYW1lcmE6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGY0OWZcIjsgfVxuXG4uaW9uLWlvcy1yZXZlcnNlLWNhbWVyYS1vdXRsaW5lOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmNDllXCI7IH1cblxuLmlvbi1pb3MtcmV3aW5kOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmNGExXCI7IH1cblxuLmlvbi1pb3MtcmV3aW5kLW91dGxpbmU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGY0YTBcIjsgfVxuXG4uaW9uLWlvcy1yaWJib246YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYyMDVcIjsgfVxuXG4uaW9uLWlvcy1yaWJib24tb3V0bGluZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjIwNFwiOyB9XG5cbi5pb24taW9zLXJvc2U6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGY0YTNcIjsgfVxuXG4uaW9uLWlvcy1yb3NlLW91dGxpbmU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGY0YTJcIjsgfVxuXG4uaW9uLWlvcy1zYWQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYyMDdcIjsgfVxuXG4uaW9uLWlvcy1zYWQtb3V0bGluZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjIwNlwiOyB9XG5cbi5pb24taW9zLXNjaG9vbDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjIwOVwiOyB9XG5cbi5pb24taW9zLXNjaG9vbC1vdXRsaW5lOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMjA4XCI7IH1cblxuLmlvbi1pb3Mtc2VhcmNoOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmNGE1XCI7IH1cblxuLmlvbi1pb3Mtc2VhcmNoLW91dGxpbmU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYyMGFcIjsgfVxuXG4uaW9uLWlvcy1zZW5kOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMjBjXCI7IH1cblxuLmlvbi1pb3Mtc2VuZC1vdXRsaW5lOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMjBiXCI7IH1cblxuLmlvbi1pb3Mtc2V0dGluZ3M6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGY0YTdcIjsgfVxuXG4uaW9uLWlvcy1zZXR0aW5ncy1vdXRsaW5lOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMjBkXCI7IH1cblxuLmlvbi1pb3Mtc2hhcmU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYyMTFcIjsgfVxuXG4uaW9uLWlvcy1zaGFyZS1hbHQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYyMGZcIjsgfVxuXG4uaW9uLWlvcy1zaGFyZS1hbHQtb3V0bGluZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjIwZVwiOyB9XG5cbi5pb24taW9zLXNoYXJlLW91dGxpbmU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYyMTBcIjsgfVxuXG4uaW9uLWlvcy1zaGlydDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjIxM1wiOyB9XG5cbi5pb24taW9zLXNoaXJ0LW91dGxpbmU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYyMTJcIjsgfVxuXG4uaW9uLWlvcy1zaHVmZmxlOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmNGE5XCI7IH1cblxuLmlvbi1pb3Mtc2h1ZmZsZS1vdXRsaW5lOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmNGE5XCI7IH1cblxuLmlvbi1pb3Mtc2tpcC1iYWNrd2FyZDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjIxNVwiOyB9XG5cbi5pb24taW9zLXNraXAtYmFja3dhcmQtb3V0bGluZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjIxNFwiOyB9XG5cbi5pb24taW9zLXNraXAtZm9yd2FyZDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjIxN1wiOyB9XG5cbi5pb24taW9zLXNraXAtZm9yd2FyZC1vdXRsaW5lOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMjE2XCI7IH1cblxuLmlvbi1pb3Mtc25vdzpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjIxOFwiOyB9XG5cbi5pb24taW9zLXNub3ctb3V0bGluZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjIyY1wiOyB9XG5cbi5pb24taW9zLXNwZWVkb21ldGVyOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmNGIwXCI7IH1cblxuLmlvbi1pb3Mtc3BlZWRvbWV0ZXItb3V0bGluZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjRhZlwiOyB9XG5cbi5pb24taW9zLXNxdWFyZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjIxYVwiOyB9XG5cbi5pb24taW9zLXNxdWFyZS1vdXRsaW5lOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMjE5XCI7IH1cblxuLmlvbi1pb3Mtc3RhcjpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjRiM1wiOyB9XG5cbi5pb24taW9zLXN0YXItaGFsZjpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjRiMVwiOyB9XG5cbi5pb24taW9zLXN0YXItaGFsZi1vdXRsaW5lOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmNGIxXCI7IH1cblxuLmlvbi1pb3Mtc3Rhci1vdXRsaW5lOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmNGIyXCI7IH1cblxuLmlvbi1pb3Mtc3RhdHM6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYyMWNcIjsgfVxuXG4uaW9uLWlvcy1zdGF0cy1vdXRsaW5lOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMjFiXCI7IH1cblxuLmlvbi1pb3Mtc3RvcHdhdGNoOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmNGI1XCI7IH1cblxuLmlvbi1pb3Mtc3RvcHdhdGNoLW91dGxpbmU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGY0YjRcIjsgfVxuXG4uaW9uLWlvcy1zdWJ3YXk6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYyMWVcIjsgfVxuXG4uaW9uLWlvcy1zdWJ3YXktb3V0bGluZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjIxZFwiOyB9XG5cbi5pb24taW9zLXN1bm55OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmNGI3XCI7IH1cblxuLmlvbi1pb3Mtc3Vubnktb3V0bGluZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjRiNlwiOyB9XG5cbi5pb24taW9zLXN3YXA6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYyMWZcIjsgfVxuXG4uaW9uLWlvcy1zd2FwLW91dGxpbmU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYyMWZcIjsgfVxuXG4uaW9uLWlvcy1zd2l0Y2g6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYyMjFcIjsgfVxuXG4uaW9uLWlvcy1zd2l0Y2gtb3V0bGluZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjIyMFwiOyB9XG5cbi5pb24taW9zLXN5bmM6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYyMjJcIjsgfVxuXG4uaW9uLWlvcy1zeW5jLW91dGxpbmU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYyMjJcIjsgfVxuXG4uaW9uLWlvcy10YWJsZXQtbGFuZHNjYXBlOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMjIzXCI7IH1cblxuLmlvbi1pb3MtdGFibGV0LWxhbmRzY2FwZS1vdXRsaW5lOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMjIzXCI7IH1cblxuLmlvbi1pb3MtdGFibGV0LXBvcnRyYWl0OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMjRlXCI7IH1cblxuLmlvbi1pb3MtdGFibGV0LXBvcnRyYWl0LW91dGxpbmU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYyNGVcIjsgfVxuXG4uaW9uLWlvcy10ZW5uaXNiYWxsOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmNGJiXCI7IH1cblxuLmlvbi1pb3MtdGVubmlzYmFsbC1vdXRsaW5lOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmNGJhXCI7IH1cblxuLmlvbi1pb3MtdGV4dDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjI1MFwiOyB9XG5cbi5pb24taW9zLXRleHQtb3V0bGluZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjI0ZlwiOyB9XG5cbi5pb24taW9zLXRoZXJtb21ldGVyOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMjUyXCI7IH1cblxuLmlvbi1pb3MtdGhlcm1vbWV0ZXItb3V0bGluZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjI1MVwiOyB9XG5cbi5pb24taW9zLXRodW1icy1kb3duOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMjU0XCI7IH1cblxuLmlvbi1pb3MtdGh1bWJzLWRvd24tb3V0bGluZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjI1M1wiOyB9XG5cbi5pb24taW9zLXRodW1icy11cDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjI1NlwiOyB9XG5cbi5pb24taW9zLXRodW1icy11cC1vdXRsaW5lOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMjU1XCI7IH1cblxuLmlvbi1pb3MtdGh1bmRlcnN0b3JtOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmNGJkXCI7IH1cblxuLmlvbi1pb3MtdGh1bmRlcnN0b3JtLW91dGxpbmU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGY0YmNcIjsgfVxuXG4uaW9uLWlvcy10aW1lOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmNGJmXCI7IH1cblxuLmlvbi1pb3MtdGltZS1vdXRsaW5lOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmNGJlXCI7IH1cblxuLmlvbi1pb3MtdGltZXI6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGY0YzFcIjsgfVxuXG4uaW9uLWlvcy10aW1lci1vdXRsaW5lOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmNGMwXCI7IH1cblxuLmlvbi1pb3MtdHJhaW46YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYyNThcIjsgfVxuXG4uaW9uLWlvcy10cmFpbi1vdXRsaW5lOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMjU3XCI7IH1cblxuLmlvbi1pb3MtdHJhbnNnZW5kZXI6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYyNTlcIjsgfVxuXG4uaW9uLWlvcy10cmFuc2dlbmRlci1vdXRsaW5lOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMjU5XCI7IH1cblxuLmlvbi1pb3MtdHJhc2g6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGY0YzVcIjsgfVxuXG4uaW9uLWlvcy10cmFzaC1vdXRsaW5lOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmNGM0XCI7IH1cblxuLmlvbi1pb3MtdHJlbmRpbmctZG93bjpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjI1YVwiOyB9XG5cbi5pb24taW9zLXRyZW5kaW5nLWRvd24tb3V0bGluZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjI1YVwiOyB9XG5cbi5pb24taW9zLXRyZW5kaW5nLXVwOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMjViXCI7IH1cblxuLmlvbi1pb3MtdHJlbmRpbmctdXAtb3V0bGluZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjI1YlwiOyB9XG5cbi5pb24taW9zLXRyb3BoeTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjI1ZFwiOyB9XG5cbi5pb24taW9zLXRyb3BoeS1vdXRsaW5lOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMjVjXCI7IH1cblxuLmlvbi1pb3MtdW1icmVsbGE6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYyNWZcIjsgfVxuXG4uaW9uLWlvcy11bWJyZWxsYS1vdXRsaW5lOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMjVlXCI7IH1cblxuLmlvbi1pb3MtdW5kbzpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjRjN1wiOyB9XG5cbi5pb24taW9zLXVuZG8tb3V0bGluZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjRjNlwiOyB9XG5cbi5pb24taW9zLXVubG9jazpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjI2MVwiOyB9XG5cbi5pb24taW9zLXVubG9jay1vdXRsaW5lOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMjYwXCI7IH1cblxuLmlvbi1pb3MtdmlkZW9jYW06YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGY0Y2RcIjsgfVxuXG4uaW9uLWlvcy12aWRlb2NhbS1vdXRsaW5lOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmNGNjXCI7IH1cblxuLmlvbi1pb3Mtdm9sdW1lLWRvd246YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYyNjJcIjsgfVxuXG4uaW9uLWlvcy12b2x1bWUtZG93bi1vdXRsaW5lOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMjYyXCI7IH1cblxuLmlvbi1pb3Mtdm9sdW1lLW11dGU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYyNjNcIjsgfVxuXG4uaW9uLWlvcy12b2x1bWUtbXV0ZS1vdXRsaW5lOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMjYzXCI7IH1cblxuLmlvbi1pb3Mtdm9sdW1lLW9mZjpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjI2NFwiOyB9XG5cbi5pb24taW9zLXZvbHVtZS1vZmYtb3V0bGluZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjI2NFwiOyB9XG5cbi5pb24taW9zLXZvbHVtZS11cDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjI2NVwiOyB9XG5cbi5pb24taW9zLXZvbHVtZS11cC1vdXRsaW5lOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMjY1XCI7IH1cblxuLmlvbi1pb3Mtd2FsazpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjI2NlwiOyB9XG5cbi5pb24taW9zLXdhbGstb3V0bGluZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjI2NlwiOyB9XG5cbi5pb24taW9zLXdhcm5pbmc6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYyNjhcIjsgfVxuXG4uaW9uLWlvcy13YXJuaW5nLW91dGxpbmU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYyNjdcIjsgfVxuXG4uaW9uLWlvcy13YXRjaDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjI2OVwiOyB9XG5cbi5pb24taW9zLXdhdGNoLW91dGxpbmU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYyNjlcIjsgfVxuXG4uaW9uLWlvcy13YXRlcjpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjI2YlwiOyB9XG5cbi5pb24taW9zLXdhdGVyLW91dGxpbmU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYyNmFcIjsgfVxuXG4uaW9uLWlvcy13aWZpOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMjZkXCI7IH1cblxuLmlvbi1pb3Mtd2lmaS1vdXRsaW5lOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMjZjXCI7IH1cblxuLmlvbi1pb3Mtd2luZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjI2ZlwiOyB9XG5cbi5pb24taW9zLXdpbmUtb3V0bGluZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjI2ZVwiOyB9XG5cbi5pb24taW9zLXdvbWFuOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMjcxXCI7IH1cblxuLmlvbi1pb3Mtd29tYW4tb3V0bGluZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjI3MFwiOyB9XG5cbi5pb24tbG9nby1hbmRyb2lkOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMjI1XCI7IH1cblxuLmlvbi1sb2dvLWFuZ3VsYXI6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYyMjdcIjsgfVxuXG4uaW9uLWxvZ28tYXBwbGU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYyMjlcIjsgfVxuXG4uaW9uLWxvZ28tYml0Y29pbjpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjIyYlwiOyB9XG5cbi5pb24tbG9nby1idWZmZXI6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYyMmRcIjsgfVxuXG4uaW9uLWxvZ28tY2hyb21lOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMjJmXCI7IH1cblxuLmlvbi1sb2dvLWNvZGVwZW46YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYyMzBcIjsgfVxuXG4uaW9uLWxvZ28tY3NzMzpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjIzMVwiOyB9XG5cbi5pb24tbG9nby1kZXNpZ25lcm5ld3M6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYyMzJcIjsgfVxuXG4uaW9uLWxvZ28tZHJpYmJibGU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYyMzNcIjsgfVxuXG4uaW9uLWxvZ28tZHJvcGJveDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjIzNFwiOyB9XG5cbi5pb24tbG9nby1ldXJvOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMjM1XCI7IH1cblxuLmlvbi1sb2dvLWZhY2Vib29rOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMjM2XCI7IH1cblxuLmlvbi1sb2dvLWZvdXJzcXVhcmU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYyMzdcIjsgfVxuXG4uaW9uLWxvZ28tZnJlZWJzZC1kZXZpbDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjIzOFwiOyB9XG5cbi5pb24tbG9nby1naXRodWI6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYyMzlcIjsgfVxuXG4uaW9uLWxvZ28tZ29vZ2xlOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMjNhXCI7IH1cblxuLmlvbi1sb2dvLWdvb2dsZXBsdXM6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYyM2JcIjsgfVxuXG4uaW9uLWxvZ28taGFja2VybmV3czpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjIzY1wiOyB9XG5cbi5pb24tbG9nby1odG1sNTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjIzZFwiOyB9XG5cbi5pb24tbG9nby1pbnN0YWdyYW06YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYyM2VcIjsgfVxuXG4uaW9uLWxvZ28tamF2YXNjcmlwdDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjIzZlwiOyB9XG5cbi5pb24tbG9nby1saW5rZWRpbjpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjI0MFwiOyB9XG5cbi5pb24tbG9nby1tYXJrZG93bjpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjI0MVwiOyB9XG5cbi5pb24tbG9nby1ub2RlanM6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYyNDJcIjsgfVxuXG4uaW9uLWxvZ28tb2N0b2NhdDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjI0M1wiOyB9XG5cbi5pb24tbG9nby1waW50ZXJlc3Q6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYyNDRcIjsgfVxuXG4uaW9uLWxvZ28tcGxheXN0YXRpb246YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYyNDVcIjsgfVxuXG4uaW9uLWxvZ28tcHl0aG9uOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMjQ2XCI7IH1cblxuLmlvbi1sb2dvLXJlZGRpdDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjI0N1wiOyB9XG5cbi5pb24tbG9nby1yc3M6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYyNDhcIjsgfVxuXG4uaW9uLWxvZ28tc2FzczpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjI0OVwiOyB9XG5cbi5pb24tbG9nby1za3lwZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjI0YVwiOyB9XG5cbi5pb24tbG9nby1zbmFwY2hhdDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjI0YlwiOyB9XG5cbi5pb24tbG9nby1zdGVhbTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjI0Y1wiOyB9XG5cbi5pb24tbG9nby10dW1ibHI6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYyNGRcIjsgfVxuXG4uaW9uLWxvZ28tdHV4OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMmFlXCI7IH1cblxuLmlvbi1sb2dvLXR3aXRjaDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjJhZlwiOyB9XG5cbi5pb24tbG9nby10d2l0dGVyOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMmIwXCI7IH1cblxuLmlvbi1sb2dvLXVzZDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjJiMVwiOyB9XG5cbi5pb24tbG9nby12aW1lbzpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjJjNFwiOyB9XG5cbi5pb24tbG9nby13aGF0c2FwcDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjJjNVwiOyB9XG5cbi5pb24tbG9nby13aW5kb3dzOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMzJmXCI7IH1cblxuLmlvbi1sb2dvLXdvcmRwcmVzczpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjMzMFwiOyB9XG5cbi5pb24tbG9nby14Ym94OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMzRjXCI7IH1cblxuLmlvbi1sb2dvLXlhaG9vOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMzRkXCI7IH1cblxuLmlvbi1sb2dvLXllbjpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjM0ZVwiOyB9XG5cbi5pb24tbG9nby15b3V0dWJlOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMzRmXCI7IH1cblxuLmlvbi1tZC1hZGQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYyNzNcIjsgfVxuXG4uaW9uLW1kLWFkZC1jaXJjbGU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYyNzJcIjsgfVxuXG4uaW9uLW1kLWFsYXJtOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMjc0XCI7IH1cblxuLmlvbi1tZC1hbGJ1bXM6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYyNzVcIjsgfVxuXG4uaW9uLW1kLWFsZXJ0OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMjc2XCI7IH1cblxuLmlvbi1tZC1hbWVyaWNhbi1mb290YmFsbDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjI3N1wiOyB9XG5cbi5pb24tbWQtYW5hbHl0aWNzOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMjc4XCI7IH1cblxuLmlvbi1tZC1hcGVydHVyZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjI3OVwiOyB9XG5cbi5pb24tbWQtYXBwczpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjI3YVwiOyB9XG5cbi5pb24tbWQtYXBwc3RvcmU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYyN2JcIjsgfVxuXG4uaW9uLW1kLWFyY2hpdmU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYyN2NcIjsgfVxuXG4uaW9uLW1kLWFycm93LWJhY2s6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYyN2RcIjsgfVxuXG4uaW9uLW1kLWFycm93LWRvd246YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYyN2VcIjsgfVxuXG4uaW9uLW1kLWFycm93LWRyb3Bkb3duOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMjgwXCI7IH1cblxuLmlvbi1tZC1hcnJvdy1kcm9wZG93bi1jaXJjbGU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYyN2ZcIjsgfVxuXG4uaW9uLW1kLWFycm93LWRyb3BsZWZ0OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMjgyXCI7IH1cblxuLmlvbi1tZC1hcnJvdy1kcm9wbGVmdC1jaXJjbGU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYyODFcIjsgfVxuXG4uaW9uLW1kLWFycm93LWRyb3ByaWdodDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjI4NFwiOyB9XG5cbi5pb24tbWQtYXJyb3ctZHJvcHJpZ2h0LWNpcmNsZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjI4M1wiOyB9XG5cbi5pb24tbWQtYXJyb3ctZHJvcHVwOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMjg2XCI7IH1cblxuLmlvbi1tZC1hcnJvdy1kcm9wdXAtY2lyY2xlOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMjg1XCI7IH1cblxuLmlvbi1tZC1hcnJvdy1mb3J3YXJkOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMjg3XCI7IH1cblxuLmlvbi1tZC1hcnJvdy1yb3VuZC1iYWNrOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMjg4XCI7IH1cblxuLmlvbi1tZC1hcnJvdy1yb3VuZC1kb3duOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMjg5XCI7IH1cblxuLmlvbi1tZC1hcnJvdy1yb3VuZC1mb3J3YXJkOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMjhhXCI7IH1cblxuLmlvbi1tZC1hcnJvdy1yb3VuZC11cDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjI4YlwiOyB9XG5cbi5pb24tbWQtYXJyb3ctdXA6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYyOGNcIjsgfVxuXG4uaW9uLW1kLWF0OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMjhkXCI7IH1cblxuLmlvbi1tZC1hdHRhY2g6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYyOGVcIjsgfVxuXG4uaW9uLW1kLWJhY2tzcGFjZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjI4ZlwiOyB9XG5cbi5pb24tbWQtYmFyY29kZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjI5MFwiOyB9XG5cbi5pb24tbWQtYmFzZWJhbGw6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYyOTFcIjsgfVxuXG4uaW9uLW1kLWJhc2tldDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjI5MlwiOyB9XG5cbi5pb24tbWQtYmFza2V0YmFsbDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjI5M1wiOyB9XG5cbi5pb24tbWQtYmF0dGVyeS1jaGFyZ2luZzpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjI5NFwiOyB9XG5cbi5pb24tbWQtYmF0dGVyeS1kZWFkOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMjk1XCI7IH1cblxuLmlvbi1tZC1iYXR0ZXJ5LWZ1bGw6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYyOTZcIjsgfVxuXG4uaW9uLW1kLWJlYWtlcjpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjI5N1wiOyB9XG5cbi5pb24tbWQtYmVlcjpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjI5OFwiOyB9XG5cbi5pb24tbWQtYmljeWNsZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjI5OVwiOyB9XG5cbi5pb24tbWQtYmx1ZXRvb3RoOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMjlhXCI7IH1cblxuLmlvbi1tZC1ib2F0OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMjliXCI7IH1cblxuLmlvbi1tZC1ib2R5OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMjljXCI7IH1cblxuLmlvbi1tZC1ib25maXJlOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMjlkXCI7IH1cblxuLmlvbi1tZC1ib29rOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMjllXCI7IH1cblxuLmlvbi1tZC1ib29rbWFyazpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjI5ZlwiOyB9XG5cbi5pb24tbWQtYm9va21hcmtzOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMmEwXCI7IH1cblxuLmlvbi1tZC1ib3d0aWU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYyYTFcIjsgfVxuXG4uaW9uLW1kLWJyaWVmY2FzZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjJhMlwiOyB9XG5cbi5pb24tbWQtYnJvd3NlcnM6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYyYTNcIjsgfVxuXG4uaW9uLW1kLWJydXNoOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMmE0XCI7IH1cblxuLmlvbi1tZC1idWc6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYyYTVcIjsgfVxuXG4uaW9uLW1kLWJ1aWxkOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMmE2XCI7IH1cblxuLmlvbi1tZC1idWxiOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMmE3XCI7IH1cblxuLmlvbi1tZC1idXM6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYyYThcIjsgfVxuXG4uaW9uLW1kLWNhZmU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYyYTlcIjsgfVxuXG4uaW9uLW1kLWNhbGN1bGF0b3I6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYyYWFcIjsgfVxuXG4uaW9uLW1kLWNhbGVuZGFyOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMmFiXCI7IH1cblxuLmlvbi1tZC1jYWxsOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMmFjXCI7IH1cblxuLmlvbi1tZC1jYW1lcmE6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYyYWRcIjsgfVxuXG4uaW9uLW1kLWNhcjpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjJiMlwiOyB9XG5cbi5pb24tbWQtY2FyZDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjJiM1wiOyB9XG5cbi5pb24tbWQtY2FydDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjJiNFwiOyB9XG5cbi5pb24tbWQtY2FzaDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjJiNVwiOyB9XG5cbi5pb24tbWQtY2hhdGJveGVzOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMmI2XCI7IH1cblxuLmlvbi1tZC1jaGF0YnViYmxlczpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjJiN1wiOyB9XG5cbi5pb24tbWQtY2hlY2tib3g6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYyYjlcIjsgfVxuXG4uaW9uLW1kLWNoZWNrYm94LW91dGxpbmU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYyYjhcIjsgfVxuXG4uaW9uLW1kLWNoZWNrbWFyazpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjJiY1wiOyB9XG5cbi5pb24tbWQtY2hlY2ttYXJrLWNpcmNsZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjJiYlwiOyB9XG5cbi5pb24tbWQtY2hlY2ttYXJrLWNpcmNsZS1vdXRsaW5lOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMmJhXCI7IH1cblxuLmlvbi1tZC1jbGlwYm9hcmQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYyYmRcIjsgfVxuXG4uaW9uLW1kLWNsb2NrOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMmJlXCI7IH1cblxuLmlvbi1tZC1jbG9zZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjJjMFwiOyB9XG5cbi5pb24tbWQtY2xvc2UtY2lyY2xlOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMmJmXCI7IH1cblxuLmlvbi1tZC1jbG9zZWQtY2FwdGlvbmluZzpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjJjMVwiOyB9XG5cbi5pb24tbWQtY2xvdWQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYyYzlcIjsgfVxuXG4uaW9uLW1kLWNsb3VkLWNpcmNsZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjJjMlwiOyB9XG5cbi5pb24tbWQtY2xvdWQtZG9uZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjJjM1wiOyB9XG5cbi5pb24tbWQtY2xvdWQtZG93bmxvYWQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYyYzZcIjsgfVxuXG4uaW9uLW1kLWNsb3VkLW91dGxpbmU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYyYzdcIjsgfVxuXG4uaW9uLW1kLWNsb3VkLXVwbG9hZDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjJjOFwiOyB9XG5cbi5pb24tbWQtY2xvdWR5OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMmNiXCI7IH1cblxuLmlvbi1tZC1jbG91ZHktbmlnaHQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYyY2FcIjsgfVxuXG4uaW9uLW1kLWNvZGU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYyY2VcIjsgfVxuXG4uaW9uLW1kLWNvZGUtZG93bmxvYWQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYyY2NcIjsgfVxuXG4uaW9uLW1kLWNvZGUtd29ya2luZzpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjJjZFwiOyB9XG5cbi5pb24tbWQtY29nOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMmNmXCI7IH1cblxuLmlvbi1tZC1jb2xvci1maWxsOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMmQwXCI7IH1cblxuLmlvbi1tZC1jb2xvci1maWx0ZXI6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYyZDFcIjsgfVxuXG4uaW9uLW1kLWNvbG9yLXBhbGV0dGU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYyZDJcIjsgfVxuXG4uaW9uLW1kLWNvbG9yLXdhbmQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYyZDNcIjsgfVxuXG4uaW9uLW1kLWNvbXBhc3M6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYyZDRcIjsgfVxuXG4uaW9uLW1kLWNvbnN0cnVjdDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjJkNVwiOyB9XG5cbi5pb24tbWQtY29udGFjdDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjJkNlwiOyB9XG5cbi5pb24tbWQtY29udGFjdHM6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYyZDdcIjsgfVxuXG4uaW9uLW1kLWNvbnRyYWN0OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMmQ4XCI7IH1cblxuLmlvbi1tZC1jb250cmFzdDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjJkOVwiOyB9XG5cbi5pb24tbWQtY29weTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjJkYVwiOyB9XG5cbi5pb24tbWQtY3JlYXRlOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMmRiXCI7IH1cblxuLmlvbi1tZC1jcm9wOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMmRjXCI7IH1cblxuLmlvbi1tZC1jdWJlOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMmRkXCI7IH1cblxuLmlvbi1tZC1jdXQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYyZGVcIjsgfVxuXG4uaW9uLW1kLWRlc2t0b3A6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYyZGZcIjsgfVxuXG4uaW9uLW1kLWRpc2M6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYyZTBcIjsgfVxuXG4uaW9uLW1kLWRvY3VtZW50OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMmUxXCI7IH1cblxuLmlvbi1tZC1kb25lLWFsbDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjJlMlwiOyB9XG5cbi5pb24tbWQtZG93bmxvYWQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYyZTNcIjsgfVxuXG4uaW9uLW1kLWVhc2VsOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMmU0XCI7IH1cblxuLmlvbi1tZC1lZ2c6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYyZTVcIjsgfVxuXG4uaW9uLW1kLWV4aXQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYyZTZcIjsgfVxuXG4uaW9uLW1kLWV4cGFuZDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjJlN1wiOyB9XG5cbi5pb24tbWQtZXllOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMmU5XCI7IH1cblxuLmlvbi1tZC1leWUtb2ZmOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMmU4XCI7IH1cblxuLmlvbi1tZC1mYXN0Zm9yd2FyZDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjJlYVwiOyB9XG5cbi5pb24tbWQtZmVtYWxlOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMmViXCI7IH1cblxuLmlvbi1tZC1maWxpbmc6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYyZWNcIjsgfVxuXG4uaW9uLW1kLWZpbG06YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYyZWRcIjsgfVxuXG4uaW9uLW1kLWZpbmdlci1wcmludDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjJlZVwiOyB9XG5cbi5pb24tbWQtZmxhZzpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjJlZlwiOyB9XG5cbi5pb24tbWQtZmxhbWU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYyZjBcIjsgfVxuXG4uaW9uLW1kLWZsYXNoOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMmYxXCI7IH1cblxuLmlvbi1tZC1mbGFzazpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjJmMlwiOyB9XG5cbi5pb24tbWQtZmxvd2VyOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMmYzXCI7IH1cblxuLmlvbi1tZC1mb2xkZXI6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYyZjVcIjsgfVxuXG4uaW9uLW1kLWZvbGRlci1vcGVuOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMmY0XCI7IH1cblxuLmlvbi1tZC1mb290YmFsbDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjJmNlwiOyB9XG5cbi5pb24tbWQtZnVubmVsOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMmY3XCI7IH1cblxuLmlvbi1tZC1nYW1lLWNvbnRyb2xsZXItYTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjJmOFwiOyB9XG5cbi5pb24tbWQtZ2FtZS1jb250cm9sbGVyLWI6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYyZjlcIjsgfVxuXG4uaW9uLW1kLWdpdC1icmFuY2g6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYyZmFcIjsgfVxuXG4uaW9uLW1kLWdpdC1jb21taXQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYyZmJcIjsgfVxuXG4uaW9uLW1kLWdpdC1jb21wYXJlOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMmZjXCI7IH1cblxuLmlvbi1tZC1naXQtbWVyZ2U6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYyZmRcIjsgfVxuXG4uaW9uLW1kLWdpdC1uZXR3b3JrOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMmZlXCI7IH1cblxuLmlvbi1tZC1naXQtcHVsbC1yZXF1ZXN0OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMmZmXCI7IH1cblxuLmlvbi1tZC1nbGFzc2VzOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMzAwXCI7IH1cblxuLmlvbi1tZC1nbG9iZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjMwMVwiOyB9XG5cbi5pb24tbWQtZ3JpZDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjMwMlwiOyB9XG5cbi5pb24tbWQtaGFtbWVyOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMzAzXCI7IH1cblxuLmlvbi1tZC1oYW5kOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMzA0XCI7IH1cblxuLmlvbi1tZC1oYXBweTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjMwNVwiOyB9XG5cbi5pb24tbWQtaGVhZHNldDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjMwNlwiOyB9XG5cbi5pb24tbWQtaGVhcnQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYzMDhcIjsgfVxuXG4uaW9uLW1kLWhlYXJ0LW91dGxpbmU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYzMDdcIjsgfVxuXG4uaW9uLW1kLWhlbHA6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYzMGJcIjsgfVxuXG4uaW9uLW1kLWhlbHAtYnVveTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjMwOVwiOyB9XG5cbi5pb24tbWQtaGVscC1jaXJjbGU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYzMGFcIjsgfVxuXG4uaW9uLW1kLWhvbWU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYzMGNcIjsgfVxuXG4uaW9uLW1kLWljZS1jcmVhbTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjMwZFwiOyB9XG5cbi5pb24tbWQtaW1hZ2U6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYzMGVcIjsgfVxuXG4uaW9uLW1kLWltYWdlczpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjMwZlwiOyB9XG5cbi5pb24tbWQtaW5maW5pdGU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYzMTBcIjsgfVxuXG4uaW9uLW1kLWluZm9ybWF0aW9uOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMzEyXCI7IH1cblxuLmlvbi1tZC1pbmZvcm1hdGlvbi1jaXJjbGU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYzMTFcIjsgfVxuXG4uaW9uLW1kLWlvbmljOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMzEzXCI7IH1cblxuLmlvbi1tZC1pb25pdHJvbjpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjMxNFwiOyB9XG5cbi5pb24tbWQtamV0OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMzE1XCI7IH1cblxuLmlvbi1tZC1rZXk6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYzMTZcIjsgfVxuXG4uaW9uLW1kLWtleXBhZDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjMxN1wiOyB9XG5cbi5pb24tbWQtbGFwdG9wOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMzE4XCI7IH1cblxuLmlvbi1tZC1sZWFmOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMzE5XCI7IH1cblxuLmlvbi1tZC1saW5rOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMjJlXCI7IH1cblxuLmlvbi1tZC1saXN0OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMzFiXCI7IH1cblxuLmlvbi1tZC1saXN0LWJveDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjMxYVwiOyB9XG5cbi5pb24tbWQtbG9jYXRlOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMzFjXCI7IH1cblxuLmlvbi1tZC1sb2NrOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMzFkXCI7IH1cblxuLmlvbi1tZC1sb2ctaW46YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYzMWVcIjsgfVxuXG4uaW9uLW1kLWxvZy1vdXQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYzMWZcIjsgfVxuXG4uaW9uLW1kLW1hZ25ldDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjMyMFwiOyB9XG5cbi5pb24tbWQtbWFpbDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjMyMlwiOyB9XG5cbi5pb24tbWQtbWFpbC1vcGVuOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMzIxXCI7IH1cblxuLmlvbi1tZC1tYWxlOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMzIzXCI7IH1cblxuLmlvbi1tZC1tYW46YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYzMjRcIjsgfVxuXG4uaW9uLW1kLW1hcDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjMyNVwiOyB9XG5cbi5pb24tbWQtbWVkYWw6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYzMjZcIjsgfVxuXG4uaW9uLW1kLW1lZGljYWw6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYzMjdcIjsgfVxuXG4uaW9uLW1kLW1lZGtpdDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjMyOFwiOyB9XG5cbi5pb24tbWQtbWVnYXBob25lOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMzI5XCI7IH1cblxuLmlvbi1tZC1tZW51OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMzJhXCI7IH1cblxuLmlvbi1tZC1taWM6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYzMmNcIjsgfVxuXG4uaW9uLW1kLW1pYy1vZmY6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYzMmJcIjsgfVxuXG4uaW9uLW1kLW1pY3JvcGhvbmU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYzMmRcIjsgfVxuXG4uaW9uLW1kLW1vb246YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYzMmVcIjsgfVxuXG4uaW9uLW1kLW1vcmU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYxYzlcIjsgfVxuXG4uaW9uLW1kLW1vdmU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYzMzFcIjsgfVxuXG4uaW9uLW1kLW11c2ljYWwtbm90ZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjMzMlwiOyB9XG5cbi5pb24tbWQtbXVzaWNhbC1ub3RlczpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjMzM1wiOyB9XG5cbi5pb24tbWQtbmF2aWdhdGU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYzMzRcIjsgfVxuXG4uaW9uLW1kLW5vLXNtb2tpbmc6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYzMzVcIjsgfVxuXG4uaW9uLW1kLW5vdGlmaWNhdGlvbnM6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYzMzhcIjsgfVxuXG4uaW9uLW1kLW5vdGlmaWNhdGlvbnMtb2ZmOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMzM2XCI7IH1cblxuLmlvbi1tZC1ub3RpZmljYXRpb25zLW91dGxpbmU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYzMzdcIjsgfVxuXG4uaW9uLW1kLW51Y2xlYXI6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYzMzlcIjsgfVxuXG4uaW9uLW1kLW51dHJpdGlvbjpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjMzYVwiOyB9XG5cbi5pb24tbWQtb3BlbjpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjMzYlwiOyB9XG5cbi5pb24tbWQtb3B0aW9uczpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjMzY1wiOyB9XG5cbi5pb24tbWQtb3V0bGV0OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMzNkXCI7IH1cblxuLmlvbi1tZC1wYXBlcjpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjMzZlwiOyB9XG5cbi5pb24tbWQtcGFwZXItcGxhbmU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYzM2VcIjsgfVxuXG4uaW9uLW1kLXBhcnRseS1zdW5ueTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjM0MFwiOyB9XG5cbi5pb24tbWQtcGF1c2U6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYzNDFcIjsgfVxuXG4uaW9uLW1kLXBhdzpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjM0MlwiOyB9XG5cbi5pb24tbWQtcGVvcGxlOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMzQzXCI7IH1cblxuLmlvbi1tZC1wZXJzb246YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYzNDVcIjsgfVxuXG4uaW9uLW1kLXBlcnNvbi1hZGQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYzNDRcIjsgfVxuXG4uaW9uLW1kLXBob25lLWxhbmRzY2FwZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjM0NlwiOyB9XG5cbi5pb24tbWQtcGhvbmUtcG9ydHJhaXQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYzNDdcIjsgfVxuXG4uaW9uLW1kLXBob3RvczpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjM0OFwiOyB9XG5cbi5pb24tbWQtcGllOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMzQ5XCI7IH1cblxuLmlvbi1tZC1waW46YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYzNGFcIjsgfVxuXG4uaW9uLW1kLXBpbnQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYzNGJcIjsgfVxuXG4uaW9uLW1kLXBpenphOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMzU0XCI7IH1cblxuLmlvbi1tZC1wbGFuZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjM1NVwiOyB9XG5cbi5pb24tbWQtcGxhbmV0OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMzU2XCI7IH1cblxuLmlvbi1tZC1wbGF5OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMzU3XCI7IH1cblxuLmlvbi1tZC1wb2RpdW06YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYzNThcIjsgfVxuXG4uaW9uLW1kLXBvd2VyOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMzU5XCI7IH1cblxuLmlvbi1tZC1wcmljZXRhZzpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjM1YVwiOyB9XG5cbi5pb24tbWQtcHJpY2V0YWdzOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMzViXCI7IH1cblxuLmlvbi1tZC1wcmludDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjM1Y1wiOyB9XG5cbi5pb24tbWQtcHVsc2U6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYzNWRcIjsgfVxuXG4uaW9uLW1kLXFyLXNjYW5uZXI6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYzNWVcIjsgfVxuXG4uaW9uLW1kLXF1b3RlOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMzVmXCI7IH1cblxuLmlvbi1tZC1yYWRpbzpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjM2MlwiOyB9XG5cbi5pb24tbWQtcmFkaW8tYnV0dG9uLW9mZjpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjM2MFwiOyB9XG5cbi5pb24tbWQtcmFkaW8tYnV0dG9uLW9uOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMzYxXCI7IH1cblxuLmlvbi1tZC1yYWlueTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjM2M1wiOyB9XG5cbi5pb24tbWQtcmVjb3JkaW5nOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMzY0XCI7IH1cblxuLmlvbi1tZC1yZWRvOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMzY1XCI7IH1cblxuLmlvbi1tZC1yZWZyZXNoOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMzY2XCI7IH1cblxuLmlvbi1tZC1yZWZyZXNoLWNpcmNsZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjIyOFwiOyB9XG5cbi5pb24tbWQtcmVtb3ZlOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMzY4XCI7IH1cblxuLmlvbi1tZC1yZW1vdmUtY2lyY2xlOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMzY3XCI7IH1cblxuLmlvbi1tZC1yZW9yZGVyOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMzY5XCI7IH1cblxuLmlvbi1tZC1yZXBlYXQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYzNmFcIjsgfVxuXG4uaW9uLW1kLXJlc2l6ZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjM2YlwiOyB9XG5cbi5pb24tbWQtcmVzdGF1cmFudDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjM2Y1wiOyB9XG5cbi5pb24tbWQtcmV0dXJuLWxlZnQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYzNmRcIjsgfVxuXG4uaW9uLW1kLXJldHVybi1yaWdodDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjM2ZVwiOyB9XG5cbi5pb24tbWQtcmV2ZXJzZS1jYW1lcmE6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYzNmZcIjsgfVxuXG4uaW9uLW1kLXJld2luZDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjM3MFwiOyB9XG5cbi5pb24tbWQtcmliYm9uOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMzcxXCI7IH1cblxuLmlvbi1tZC1yb3NlOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMzcyXCI7IH1cblxuLmlvbi1tZC1zYWQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYzNzNcIjsgfVxuXG4uaW9uLW1kLXNjaG9vbDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjM3NFwiOyB9XG5cbi5pb24tbWQtc2VhcmNoOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMzc1XCI7IH1cblxuLmlvbi1tZC1zZW5kOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMzc2XCI7IH1cblxuLmlvbi1tZC1zZXR0aW5nczpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjM3N1wiOyB9XG5cbi5pb24tbWQtc2hhcmU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYzNzlcIjsgfVxuXG4uaW9uLW1kLXNoYXJlLWFsdDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjM3OFwiOyB9XG5cbi5pb24tbWQtc2hpcnQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYzN2FcIjsgfVxuXG4uaW9uLW1kLXNodWZmbGU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYzN2JcIjsgfVxuXG4uaW9uLW1kLXNraXAtYmFja3dhcmQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYzN2NcIjsgfVxuXG4uaW9uLW1kLXNraXAtZm9yd2FyZDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjM3ZFwiOyB9XG5cbi5pb24tbWQtc25vdzpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjM3ZVwiOyB9XG5cbi5pb24tbWQtc3BlZWRvbWV0ZXI6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYzN2ZcIjsgfVxuXG4uaW9uLW1kLXNxdWFyZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjM4MVwiOyB9XG5cbi5pb24tbWQtc3F1YXJlLW91dGxpbmU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYzODBcIjsgfVxuXG4uaW9uLW1kLXN0YXI6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYzODRcIjsgfVxuXG4uaW9uLW1kLXN0YXItaGFsZjpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjM4MlwiOyB9XG5cbi5pb24tbWQtc3Rhci1vdXRsaW5lOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMzgzXCI7IH1cblxuLmlvbi1tZC1zdGF0czpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjM4NVwiOyB9XG5cbi5pb24tbWQtc3RvcHdhdGNoOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMzg2XCI7IH1cblxuLmlvbi1tZC1zdWJ3YXk6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYzODdcIjsgfVxuXG4uaW9uLW1kLXN1bm55OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMzg4XCI7IH1cblxuLmlvbi1tZC1zd2FwOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMzg5XCI7IH1cblxuLmlvbi1tZC1zd2l0Y2g6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYzOGFcIjsgfVxuXG4uaW9uLW1kLXN5bmM6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYzOGJcIjsgfVxuXG4uaW9uLW1kLXRhYmxldC1sYW5kc2NhcGU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYzOGNcIjsgfVxuXG4uaW9uLW1kLXRhYmxldC1wb3J0cmFpdDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjM4ZFwiOyB9XG5cbi5pb24tbWQtdGVubmlzYmFsbDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjM4ZVwiOyB9XG5cbi5pb24tbWQtdGV4dDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjM4ZlwiOyB9XG5cbi5pb24tbWQtdGhlcm1vbWV0ZXI6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYzOTBcIjsgfVxuXG4uaW9uLW1kLXRodW1icy1kb3duOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMzkxXCI7IH1cblxuLmlvbi1tZC10aHVtYnMtdXA6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYzOTJcIjsgfVxuXG4uaW9uLW1kLXRodW5kZXJzdG9ybTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjM5M1wiOyB9XG5cbi5pb24tbWQtdGltZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjM5NFwiOyB9XG5cbi5pb24tbWQtdGltZXI6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYzOTVcIjsgfVxuXG4uaW9uLW1kLXRyYWluOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMzk2XCI7IH1cblxuLmlvbi1tZC10cmFuc2dlbmRlcjpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjM5N1wiOyB9XG5cbi5pb24tbWQtdHJhc2g6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYzOThcIjsgfVxuXG4uaW9uLW1kLXRyZW5kaW5nLWRvd246YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYzOTlcIjsgfVxuXG4uaW9uLW1kLXRyZW5kaW5nLXVwOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMzlhXCI7IH1cblxuLmlvbi1tZC10cm9waHk6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYzOWJcIjsgfVxuXG4uaW9uLW1kLXVtYnJlbGxhOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMzljXCI7IH1cblxuLmlvbi1tZC11bmRvOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMzlkXCI7IH1cblxuLmlvbi1tZC11bmxvY2s6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYzOWVcIjsgfVxuXG4uaW9uLW1kLXZpZGVvY2FtOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmMzlmXCI7IH1cblxuLmlvbi1tZC12b2x1bWUtZG93bjpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjNhMFwiOyB9XG5cbi5pb24tbWQtdm9sdW1lLW11dGU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYzYTFcIjsgfVxuXG4uaW9uLW1kLXZvbHVtZS1vZmY6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYzYTJcIjsgfVxuXG4uaW9uLW1kLXZvbHVtZS11cDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjNhM1wiOyB9XG5cbi5pb24tbWQtd2FsazpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjNhNFwiOyB9XG5cbi5pb24tbWQtd2FybmluZzpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjNhNVwiOyB9XG5cbi5pb24tbWQtd2F0Y2g6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGYzYTZcIjsgfVxuXG4uaW9uLW1kLXdhdGVyOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmM2E3XCI7IH1cblxuLmlvbi1tZC13aWZpOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmM2E4XCI7IH1cblxuLmlvbi1tZC13aW5lOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmM2E5XCI7IH1cblxuLmlvbi1tZC13b21hbjpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZjNhYVwiOyB9XG5cbkBmb250LWZhY2Uge1xuICBmb250LWZhbWlseTogJ0lvbmljb25zJztcbiAgc3JjOiB1cmwoXCIvZm9udHMvaW9uaWNvbnMud29mZjJcIikgZm9ybWF0KFwid29mZjJcIiksIHVybChcIi9mb250cy9pb25pY29ucy53b2ZmXCIpIGZvcm1hdChcIndvZmZcIiksIHVybChcIi9mb250cy9pb25pY29ucy50dGZcIikgZm9ybWF0KFwidHRmXCIpLCB1cmwoXCIvZm9udHMvaW9uaWNvbnMuZW90I2llZml4XCIpIGZvcm1hdChcImVvdFwiKSB1cmwoXCIvZm9udHMvaW9uaWNvbnMuc3ZnI0lvbmljb25zXCIpIGZvcm1hdChcInN2Z1wiKTtcbiAgZm9udC13ZWlnaHQ6IG5vcm1hbDtcbiAgZm9udC1zdHlsZTogbm9ybWFsOyB9XG5cbkBmb250LWZhY2Uge1xuICBmb250LWZhbWlseTogJ0VpbmEnO1xuICBzcmM6IHVybChcIi9mb250cy9laW5hL2VpbmEtMDEtYm9sZC53b2ZmMlwiKSBmb3JtYXQoXCJ3b2ZmMlwiKSwgdXJsKFwiL2ZvbnRzL2VpbmEvZWluYS0wMS1ib2xkLndvZmZcIikgZm9ybWF0KFwid29mZlwiKSwgdXJsKFwiL2ZvbnRzL2VpbmEvZWluYS0wMS1ib2xkLnR0ZlwiKSBmb3JtYXQoXCJ0dGZcIiksIHVybChcIi9mb250cy9laW5hL2VpbmEtMDEtYm9sZC5lb3Q/I2llZml4XCIpIGZvcm1hdChcImVvdFwiKTtcbiAgZm9udC13ZWlnaHQ6IDcwMDtcbiAgdW5pY29kZS1yYW5nZTogVSswMDAtNUZGOyB9XG5cbkBmb250LWZhY2Uge1xuICBmb250LWZhbWlseTogJ0VpbmEnO1xuICBzcmM6IHVybChcIi9mb250cy9laW5hL2VpbmEtMDEtc2VtaWJvbGQud29mZjJcIikgZm9ybWF0KFwid29mZjJcIiksIHVybChcIi9mb250cy9laW5hL2VpbmEtMDEtc2VtaWJvbGQud29mZlwiKSBmb3JtYXQoXCJ3b2ZmXCIpLCB1cmwoXCIvZm9udHMvZWluYS9laW5hLTAxLXNlbWlib2xkLnR0ZlwiKSBmb3JtYXQoXCJ0dGZcIiksIHVybChcIi9mb250cy9laW5hL2VpbmEtMDEtc2VtaWJvbGQuZW90PyNpZWZpeFwiKSBmb3JtYXQoXCJlb3RcIik7XG4gIGZvbnQtd2VpZ2h0OiA2MDA7XG4gIHVuaWNvZGUtcmFuZ2U6IFUrMDAwLTVGRjsgfVxuXG5AZm9udC1mYWNlIHtcbiAgZm9udC1mYW1pbHk6ICdFaW5hJztcbiAgc3JjOiB1cmwoXCIvZm9udHMvZWluYS9laW5hLTAxLXJlZ3VsYXIud29mZjJcIikgZm9ybWF0KFwid29mZjJcIiksIHVybChcIi9mb250cy9laW5hL2VpbmEtMDEtcmVndWxhci53b2ZmXCIpIGZvcm1hdChcIndvZmZcIiksIHVybChcIi9mb250cy9laW5hL2VpbmEtMDEtcmVndWxhci50dGZcIikgZm9ybWF0KFwidHRmXCIpLCB1cmwoXCIvZm9udHMvZWluYS9laW5hLTAxLXJlZ3VsYXIuZW90PyNpZWZpeFwiKSBmb3JtYXQoXCJlb3RcIik7XG4gIGZvbnQtd2VpZ2h0OiA0MDA7XG4gIHVuaWNvZGUtcmFuZ2U6IFUrMDAwLTVGRjsgfVxuXG5AZm9udC1mYWNlIHtcbiAgZm9udC1mYW1pbHk6ICdJbnRlcic7XG4gIGZvbnQtc3R5bGU6IG5vcm1hbDtcbiAgZm9udC13ZWlnaHQ6IDQwMDtcbiAgdW5pY29kZS1yYW5nZTogVSswMDAtNUZGO1xuICBzcmM6IHVybChcImh0dHBzOi8vY29kZS5pb25pY2ZyYW1ld29yay5jb20vYXNzZXRzL2ZvbnRzL2ludGVyL0ludGVyLVJlZ3VsYXIud29mZjJcIikgZm9ybWF0KFwid29mZjJcIiksIHVybChcImh0dHBzOi8vY29kZS5pb25pY2ZyYW1ld29yay5jb20vYXNzZXRzL2ZvbnRzL2ludGVyL0ludGVyLVJlZ3VsYXIud29mZlwiKSBmb3JtYXQoXCJ3b2ZmXCIpOyB9XG5cbkBmb250LWZhY2Uge1xuICBmb250LWZhbWlseTogJ0ludGVyJztcbiAgZm9udC1zdHlsZTogaXRhbGljO1xuICBmb250LXdlaWdodDogNDAwO1xuICB1bmljb2RlLXJhbmdlOiBVKzAwMC01RkY7XG4gIHNyYzogdXJsKFwiaHR0cHM6Ly9jb2RlLmlvbmljZnJhbWV3b3JrLmNvbS9hc3NldHMvZm9udHMvaW50ZXIvSW50ZXItSXRhbGljLndvZmYyXCIpIGZvcm1hdChcIndvZmYyXCIpLCB1cmwoXCJodHRwczovL2NvZGUuaW9uaWNmcmFtZXdvcmsuY29tL2Fzc2V0cy9mb250cy9pbnRlci9JbnRlci1JdGFsaWMud29mZlwiKSBmb3JtYXQoXCJ3b2ZmXCIpOyB9XG5cbkBmb250LWZhY2Uge1xuICBmb250LWZhbWlseTogJ0ludGVyJztcbiAgZm9udC1zdHlsZTogbm9ybWFsO1xuICBmb250LXdlaWdodDogNTAwO1xuICB1bmljb2RlLXJhbmdlOiBVKzAwMC01RkY7XG4gIHNyYzogdXJsKFwiaHR0cHM6Ly9jb2RlLmlvbmljZnJhbWV3b3JrLmNvbS9hc3NldHMvZm9udHMvaW50ZXIvSW50ZXItTWVkaXVtLndvZmYyXCIpIGZvcm1hdChcIndvZmYyXCIpLCB1cmwoXCJodHRwczovL2NvZGUuaW9uaWNmcmFtZXdvcmsuY29tL2Fzc2V0cy9mb250cy9pbnRlci9JbnRlci1NZWRpdW0ud29mZlwiKSBmb3JtYXQoXCJ3b2ZmXCIpOyB9XG5cbkBmb250LWZhY2Uge1xuICBmb250LWZhbWlseTogJ0ludGVyJztcbiAgZm9udC1zdHlsZTogaXRhbGljO1xuICBmb250LXdlaWdodDogNTAwO1xuICB1bmljb2RlLXJhbmdlOiBVKzAwMC01RkY7XG4gIHNyYzogdXJsKFwiaHR0cHM6Ly9jb2RlLmlvbmljZnJhbWV3b3JrLmNvbS9hc3NldHMvZm9udHMvaW50ZXIvSW50ZXItTWVkaXVtSXRhbGljLndvZmYyXCIpIGZvcm1hdChcIndvZmYyXCIpLCB1cmwoXCJodHRwczovL2NvZGUuaW9uaWNmcmFtZXdvcmsuY29tL2Fzc2V0cy9mb250cy9pbnRlci9JbnRlci1NZWRpdW1JdGFsaWMud29mZlwiKSBmb3JtYXQoXCJ3b2ZmXCIpOyB9XG5cbkBmb250LWZhY2Uge1xuICBmb250LWZhbWlseTogJ0ludGVyJztcbiAgZm9udC1zdHlsZTogbm9ybWFsO1xuICBmb250LXdlaWdodDogNjAwO1xuICB1bmljb2RlLXJhbmdlOiBVKzAwMC01RkY7XG4gIHNyYzogdXJsKFwiaHR0cHM6Ly9jb2RlLmlvbmljZnJhbWV3b3JrLmNvbS9hc3NldHMvZm9udHMvaW50ZXIvSW50ZXItU2VtaUJvbGQud29mZjJcIikgZm9ybWF0KFwid29mZjJcIiksIHVybChcImh0dHBzOi8vY29kZS5pb25pY2ZyYW1ld29yay5jb20vYXNzZXRzL2ZvbnRzL2ludGVyL0ludGVyLVNlbWlCb2xkLndvZmZcIikgZm9ybWF0KFwid29mZlwiKTsgfVxuXG5AZm9udC1mYWNlIHtcbiAgZm9udC1mYW1pbHk6ICdJbnRlcic7XG4gIGZvbnQtc3R5bGU6IGl0YWxpYztcbiAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgdW5pY29kZS1yYW5nZTogVSswMDAtNUZGO1xuICBzcmM6IHVybChcImh0dHBzOi8vY29kZS5pb25pY2ZyYW1ld29yay5jb20vYXNzZXRzL2ZvbnRzL2ludGVyL0ludGVyLVNlbWlCb2xkSXRhbGljLndvZmYyXCIpIGZvcm1hdChcIndvZmYyXCIpLCB1cmwoXCJodHRwczovL2NvZGUuaW9uaWNmcmFtZXdvcmsuY29tL2Fzc2V0cy9mb250cy9pbnRlci9JbnRlci1TZW1pQm9sZEl0YWxpYy53b2ZmXCIpIGZvcm1hdChcIndvZmZcIik7IH1cblxuQGZvbnQtZmFjZSB7XG4gIGZvbnQtZmFtaWx5OiAnSW50ZXInO1xuICBmb250LXN0eWxlOiBub3JtYWw7XG4gIGZvbnQtd2VpZ2h0OiA3MDA7XG4gIHVuaWNvZGUtcmFuZ2U6IFUrMDAwLTVGRjtcbiAgc3JjOiB1cmwoXCJodHRwczovL2NvZGUuaW9uaWNmcmFtZXdvcmsuY29tL2Fzc2V0cy9mb250cy9pbnRlci9JbnRlci1Cb2xkLndvZmYyXCIpIGZvcm1hdChcIndvZmYyXCIpLCB1cmwoXCJodHRwczovL2NvZGUuaW9uaWNmcmFtZXdvcmsuY29tL2Fzc2V0cy9mb250cy9pbnRlci9JbnRlci1Cb2xkLndvZmZcIikgZm9ybWF0KFwid29mZlwiKTsgfVxuXG5AZm9udC1mYWNlIHtcbiAgZm9udC1mYW1pbHk6ICdJbnRlcic7XG4gIGZvbnQtc3R5bGU6IGl0YWxpYztcbiAgZm9udC13ZWlnaHQ6IDcwMDtcbiAgdW5pY29kZS1yYW5nZTogVSswMDAtNUZGO1xuICBzcmM6IHVybChcImh0dHBzOi8vY29kZS5pb25pY2ZyYW1ld29yay5jb20vYXNzZXRzL2ZvbnRzL2ludGVyL0ludGVyLUJvbGRJdGFsaWMud29mZjJcIikgZm9ybWF0KFwid29mZjJcIiksIHVybChcImh0dHBzOi8vY29kZS5pb25pY2ZyYW1ld29yay5jb20vYXNzZXRzL2ZvbnRzL2ludGVyL0ludGVyLUJvbGRJdGFsaWMud29mZlwiKSBmb3JtYXQoXCJ3b2ZmXCIpOyB9XG5cbkBmb250LWZhY2Uge1xuICBmb250LWZhbWlseTogJ0ludGVyJztcbiAgZm9udC1zdHlsZTogbm9ybWFsO1xuICBmb250LXdlaWdodDogODAwO1xuICB1bmljb2RlLXJhbmdlOiBVKzAwMC01RkY7XG4gIHNyYzogdXJsKFwiaHR0cHM6Ly9jb2RlLmlvbmljZnJhbWV3b3JrLmNvbS9hc3NldHMvZm9udHMvaW50ZXIvSW50ZXItRXh0cmFCb2xkLndvZmYyXCIpIGZvcm1hdChcIndvZmYyXCIpLCB1cmwoXCJodHRwczovL2NvZGUuaW9uaWNmcmFtZXdvcmsuY29tL2Fzc2V0cy9mb250cy9pbnRlci9JbnRlci1FeHRyYUJvbGQud29mZlwiKSBmb3JtYXQoXCJ3b2ZmXCIpOyB9XG5cbkBmb250LWZhY2Uge1xuICBmb250LWZhbWlseTogJ0ludGVyJztcbiAgZm9udC1zdHlsZTogaXRhbGljO1xuICBmb250LXdlaWdodDogODAwO1xuICB1bmljb2RlLXJhbmdlOiBVKzAwMC01RkY7XG4gIHNyYzogdXJsKFwiaHR0cHM6Ly9jb2RlLmlvbmljZnJhbWV3b3JrLmNvbS9hc3NldHMvZm9udHMvaW50ZXIvSW50ZXItRXh0cmFCb2xkSXRhbGljLndvZmYyXCIpIGZvcm1hdChcIndvZmYyXCIpLCB1cmwoXCJodHRwczovL2NvZGUuaW9uaWNmcmFtZXdvcmsuY29tL2Fzc2V0cy9mb250cy9pbnRlci9JbnRlci1FeHRyYUJvbGRJdGFsaWMud29mZlwiKSBmb3JtYXQoXCJ3b2ZmXCIpOyB9XG5cbkBmb250LWZhY2Uge1xuICBmb250LWZhbWlseTogJ0ludGVyJztcbiAgZm9udC1zdHlsZTogbm9ybWFsO1xuICBmb250LXdlaWdodDogOTAwO1xuICB1bmljb2RlLXJhbmdlOiBVKzAwMC01RkY7XG4gIHNyYzogdXJsKFwiaHR0cHM6Ly9jb2RlLmlvbmljZnJhbWV3b3JrLmNvbS9hc3NldHMvZm9udHMvaW50ZXIvSW50ZXItQmxhY2sud29mZjJcIikgZm9ybWF0KFwid29mZjJcIiksIHVybChcImh0dHBzOi8vY29kZS5pb25pY2ZyYW1ld29yay5jb20vYXNzZXRzL2ZvbnRzL2ludGVyL0ludGVyLUJsYWNrLndvZmZcIikgZm9ybWF0KFwid29mZlwiKTsgfVxuXG5AZm9udC1mYWNlIHtcbiAgZm9udC1mYW1pbHk6ICdJbnRlcic7XG4gIGZvbnQtc3R5bGU6IGl0YWxpYztcbiAgZm9udC13ZWlnaHQ6IDkwMDtcbiAgdW5pY29kZS1yYW5nZTogVSswMDAtNUZGO1xuICBzcmM6IHVybChcImh0dHBzOi8vY29kZS5pb25pY2ZyYW1ld29yay5jb20vYXNzZXRzL2ZvbnRzL2ludGVyL0ludGVyLUJsYWNrSXRhbGljLndvZmYyXCIpIGZvcm1hdChcIndvZmYyXCIpLCB1cmwoXCJodHRwczovL2NvZGUuaW9uaWNmcmFtZXdvcmsuY29tL2Fzc2V0cy9mb250cy9pbnRlci9JbnRlci1CbGFja0l0YWxpYy53b2ZmXCIpIGZvcm1hdChcIndvZmZcIik7IH1cblxuQGZvbnQtZmFjZSB7XG4gIGZvbnQtZmFtaWx5OiAnRnJlaWdodFRleHRQcm8nO1xuICBmb250LXdlaWdodDogNDAwO1xuICB1bmljb2RlLXJhbmdlOiBVKzAwMC01RkY7XG4gIHNyYzogdXJsKFwiaHR0cHM6Ly9jb2RlLmlvbmljZnJhbWV3b3JrLmNvbS9hc3NldHMvZm9udHMvMjlEMjZBXzBfMC5lb3RcIik7XG4gIHNyYzogdXJsKFwiaHR0cHM6Ly9jb2RlLmlvbmljZnJhbWV3b3JrLmNvbS9hc3NldHMvZm9udHMvMjlEMjZBXzBfMC5lb3Q/I2llZml4XCIpIGZvcm1hdChcImVtYmVkZGVkLW9wZW50eXBlXCIpLCB1cmwoXCJodHRwczovL2NvZGUuaW9uaWNmcmFtZXdvcmsuY29tL2Fzc2V0cy9mb250cy8yOUQyNkFfMF8wLndvZmZcIikgZm9ybWF0KFwid29mZlwiKSwgdXJsKFwiaHR0cHM6Ly9jb2RlLmlvbmljZnJhbWV3b3JrLmNvbS9hc3NldHMvZm9udHMvMjlEMjZBXzBfMC50dGZcIikgZm9ybWF0KFwidHJ1ZXR5cGVcIik7IH1cblxuQGZvbnQtZmFjZSB7XG4gIGZvbnQtZmFtaWx5OiAnRnJlaWdodFRleHRQcm8nO1xuICBmb250LXdlaWdodDogNTAwO1xuICB1bmljb2RlLXJhbmdlOiBVKzAwMC01RkY7XG4gIHNyYzogdXJsKFwiaHR0cHM6Ly9jb2RlLmlvbmljZnJhbWV3b3JrLmNvbS9hc3NldHMvZm9udHMvMjlEMjZBXzFfMC5lb3RcIik7XG4gIHNyYzogdXJsKFwiaHR0cHM6Ly9jb2RlLmlvbmljZnJhbWV3b3JrLmNvbS9hc3NldHMvZm9udHMvMjlEMjZBXzFfMC5lb3Q/I2llZml4XCIpIGZvcm1hdChcImVtYmVkZGVkLW9wZW50eXBlXCIpLCB1cmwoXCJodHRwczovL2NvZGUuaW9uaWNmcmFtZXdvcmsuY29tL2Fzc2V0cy9mb250cy8yOUQyNkFfMV8wLndvZmZcIikgZm9ybWF0KFwid29mZlwiKSwgdXJsKFwiaHR0cHM6Ly9jb2RlLmlvbmljZnJhbWV3b3JrLmNvbS9hc3NldHMvZm9udHMvMjlEMjZBXzFfMC50dGZcIikgZm9ybWF0KFwidHJ1ZXR5cGVcIik7IH1cblxuLyohIG5vcm1hbGl6ZS5jc3MgdjMuMC4yIHwgTUlUIExpY2Vuc2UgfCBnaXQuaW8vbm9ybWFsaXplICovXG5odG1sIHtcbiAgZm9udC1mYW1pbHk6IHNhbnMtc2VyaWY7XG4gIC1tcy10ZXh0LXNpemUtYWRqdXN0OiAxMDAlO1xuICAtd2Via2l0LXRleHQtc2l6ZS1hZGp1c3Q6IDEwMCU7IH1cblxuYm9keSB7XG4gIG1hcmdpbjogMDsgfVxuXG5hcnRpY2xlLFxuYXNpZGUsXG5kZXRhaWxzLFxuZmlnY2FwdGlvbixcbmZpZ3VyZSxcbmZvb3RlcixcbmhlYWRlcixcbmhncm91cCxcbm1haW4sXG5tZW51LFxubmF2LFxuc2VjdGlvbixcbnN1bW1hcnkge1xuICBkaXNwbGF5OiBibG9jazsgfVxuXG5hdWRpbyxcbmNhbnZhcyxcbnByb2dyZXNzLFxudmlkZW8ge1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIHZlcnRpY2FsLWFsaWduOiBiYXNlbGluZTsgfVxuXG5hdWRpbzpub3QoW2NvbnRyb2xzXSkge1xuICBkaXNwbGF5OiBub25lO1xuICBoZWlnaHQ6IDA7IH1cblxuW2hpZGRlbl0sXG50ZW1wbGF0ZSB7XG4gIGRpc3BsYXk6IG5vbmU7IH1cblxuYSB7XG4gIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50OyB9XG5cbmE6YWN0aXZlLFxuYTpob3ZlciB7XG4gIG91dGxpbmU6IDA7IH1cblxuYWJiclt0aXRsZV0ge1xuICBib3JkZXItYm90dG9tOiAxcHggZG90dGVkOyB9XG5cbmIsXG5zdHJvbmcge1xuICBmb250LXdlaWdodDogYm9sZDsgfVxuXG5kZm4ge1xuICBmb250LXN0eWxlOiBpdGFsaWM7IH1cblxuaDEge1xuICBmb250LXNpemU6IDJlbTtcbiAgbWFyZ2luOiAwLjY3ZW0gMDsgfVxuXG5tYXJrIHtcbiAgYmFja2dyb3VuZDogI2ZmMDtcbiAgY29sb3I6ICMwMDA7IH1cblxuc21hbGwge1xuICBmb250LXNpemU6IDgwJTsgfVxuXG5zdWIsXG5zdXAge1xuICBmb250LXNpemU6IDc1JTtcbiAgbGluZS1oZWlnaHQ6IDA7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgdmVydGljYWwtYWxpZ246IGJhc2VsaW5lOyB9XG5cbnN1cCB7XG4gIHRvcDogLTAuNWVtOyB9XG5cbnN1YiB7XG4gIGJvdHRvbTogLTAuMjVlbTsgfVxuXG5pbWcge1xuICBib3JkZXI6IDA7IH1cblxuc3ZnOm5vdCg6cm9vdCkge1xuICBvdmVyZmxvdzogaGlkZGVuOyB9XG5cbmZpZ3VyZSB7XG4gIG1hcmdpbjogMWVtIDQwcHg7IH1cblxuaHIge1xuICAtbW96LWJveC1zaXppbmc6IGNvbnRlbnQtYm94O1xuICBib3gtc2l6aW5nOiBjb250ZW50LWJveDtcbiAgaGVpZ2h0OiAwOyB9XG5cbnByZSB7XG4gIG92ZXJmbG93OiBhdXRvOyB9XG5cbmNvZGUsXG5rYmQsXG5wcmUsXG5zYW1wIHtcbiAgZm9udC1mYW1pbHk6IG1vbm9zcGFjZSwgbW9ub3NwYWNlO1xuICBmb250LXNpemU6IDFlbTsgfVxuXG5idXR0b24sXG5pbnB1dCxcbm9wdGdyb3VwLFxuc2VsZWN0LFxudGV4dGFyZWEge1xuICBjb2xvcjogaW5oZXJpdDtcbiAgZm9udDogaW5oZXJpdDtcbiAgbWFyZ2luOiAwOyB9XG5cbmJ1dHRvbiB7XG4gIG92ZXJmbG93OiB2aXNpYmxlOyB9XG5cbmJ1dHRvbixcbnNlbGVjdCB7XG4gIHRleHQtdHJhbnNmb3JtOiBub25lOyB9XG5cbmJ1dHRvbixcbmh0bWwgaW5wdXRbdHlwZT1cImJ1dHRvblwiXSxcbmlucHV0W3R5cGU9XCJyZXNldFwiXSxcbmlucHV0W3R5cGU9XCJzdWJtaXRcIl0ge1xuICAtd2Via2l0LWFwcGVhcmFuY2U6IGJ1dHRvbjtcbiAgY3Vyc29yOiBwb2ludGVyOyB9XG5cbmJ1dHRvbltkaXNhYmxlZF0sXG5odG1sIGlucHV0W2Rpc2FibGVkXSB7XG4gIGN1cnNvcjogZGVmYXVsdDsgfVxuXG5idXR0b246Oi1tb3otZm9jdXMtaW5uZXIsXG5pbnB1dDo6LW1vei1mb2N1cy1pbm5lciB7XG4gIGJvcmRlcjogMDtcbiAgcGFkZGluZzogMDsgfVxuXG5pbnB1dCB7XG4gIGxpbmUtaGVpZ2h0OiBub3JtYWw7IH1cblxuaW5wdXRbdHlwZT1cImNoZWNrYm94XCJdLFxuaW5wdXRbdHlwZT1cInJhZGlvXCJdIHtcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgcGFkZGluZzogMDsgfVxuXG5pbnB1dFt0eXBlPVwibnVtYmVyXCJdOjotd2Via2l0LWlubmVyLXNwaW4tYnV0dG9uLFxuaW5wdXRbdHlwZT1cIm51bWJlclwiXTo6LXdlYmtpdC1vdXRlci1zcGluLWJ1dHRvbiB7XG4gIGhlaWdodDogYXV0bzsgfVxuXG5pbnB1dFt0eXBlPVwic2VhcmNoXCJdIHtcbiAgLXdlYmtpdC1hcHBlYXJhbmNlOiB0ZXh0ZmllbGQ7XG4gIC1tb3otYm94LXNpemluZzogY29udGVudC1ib3g7XG4gIC13ZWJraXQtYm94LXNpemluZzogY29udGVudC1ib3g7XG4gIGJveC1zaXppbmc6IGNvbnRlbnQtYm94OyB9XG5cbmlucHV0W3R5cGU9XCJzZWFyY2hcIl06Oi13ZWJraXQtc2VhcmNoLWNhbmNlbC1idXR0b24sXG5pbnB1dFt0eXBlPVwic2VhcmNoXCJdOjotd2Via2l0LXNlYXJjaC1kZWNvcmF0aW9uIHtcbiAgLXdlYmtpdC1hcHBlYXJhbmNlOiBub25lOyB9XG5cbmZpZWxkc2V0IHtcbiAgYm9yZGVyOiAxcHggc29saWQgI2MwYzBjMDtcbiAgbWFyZ2luOiAwIDJweDtcbiAgcGFkZGluZzogMC4zNWVtIDAuNjI1ZW0gMC43NWVtOyB9XG5cbmxlZ2VuZCB7XG4gIGJvcmRlcjogMDtcbiAgcGFkZGluZzogMDsgfVxuXG50ZXh0YXJlYSB7XG4gIG92ZXJmbG93OiBhdXRvOyB9XG5cbm9wdGdyb3VwIHtcbiAgZm9udC13ZWlnaHQ6IGJvbGQ7IH1cblxudGFibGUge1xuICBib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlO1xuICBib3JkZXItc3BhY2luZzogMDsgfVxuXG50ZCxcbnRoIHtcbiAgcGFkZGluZzogMDsgfVxuXG4vKiEgU291cmNlOiBodHRwczovL2dpdGh1Yi5jb20vaDVicC9odG1sNS1ib2lsZXJwbGF0ZS9ibG9iL21hc3Rlci9zcmMvY3NzL21haW4uY3NzICovXG5AbWVkaWEgcHJpbnQge1xuICAqLFxuICAqOmJlZm9yZSxcbiAgKjphZnRlciB7XG4gICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQgIWltcG9ydGFudDtcbiAgICBjb2xvcjogIzAwMCAhaW1wb3J0YW50O1xuICAgIGJveC1zaGFkb3c6IG5vbmUgIWltcG9ydGFudDtcbiAgICB0ZXh0LXNoYWRvdzogbm9uZSAhaW1wb3J0YW50OyB9XG4gIGEsXG4gIGE6dmlzaXRlZCB7XG4gICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7IH1cbiAgYVtocmVmXTphZnRlciB7XG4gICAgY29udGVudDogXCIgKFwiIGF0dHIoaHJlZikgXCIpXCI7IH1cbiAgYWJiclt0aXRsZV06YWZ0ZXIge1xuICAgIGNvbnRlbnQ6IFwiIChcIiBhdHRyKHRpdGxlKSBcIilcIjsgfVxuICBhW2hyZWZePVwiI1wiXTphZnRlcixcbiAgYVtocmVmXj1cImphdmFzY3JpcHQ6XCJdOmFmdGVyIHtcbiAgICBjb250ZW50OiBcIlwiOyB9XG4gIHByZSxcbiAgYmxvY2txdW90ZSB7XG4gICAgYm9yZGVyOiAxcHggc29saWQgIzk5OTtcbiAgICBwYWdlLWJyZWFrLWluc2lkZTogYXZvaWQ7IH1cbiAgdGhlYWQge1xuICAgIGRpc3BsYXk6IHRhYmxlLWhlYWRlci1ncm91cDsgfVxuICB0cixcbiAgaW1nIHtcbiAgICBwYWdlLWJyZWFrLWluc2lkZTogYXZvaWQ7IH1cbiAgaW1nIHtcbiAgICBtYXgtd2lkdGg6IDEwMCUgIWltcG9ydGFudDsgfVxuICBwLFxuICBoMixcbiAgaDMge1xuICAgIG9ycGhhbnM6IDM7XG4gICAgd2lkb3dzOiAzOyB9XG4gIGgyLFxuICBoMyB7XG4gICAgcGFnZS1icmVhay1hZnRlcjogYXZvaWQ7IH1cbiAgc2VsZWN0IHtcbiAgICBiYWNrZ3JvdW5kOiAjZmZmICFpbXBvcnRhbnQ7IH1cbiAgLm5hdmJhciB7XG4gICAgZGlzcGxheTogbm9uZTsgfVxuICAuYnRuID4gLmNhcmV0LFxuICAuZHJvcHVwID4gLmJ0biA+IC5jYXJldCB7XG4gICAgYm9yZGVyLXRvcC1jb2xvcjogIzAwMCAhaW1wb3J0YW50OyB9XG4gIC5sYWJlbCB7XG4gICAgYm9yZGVyOiAxcHggc29saWQgIzAwMDsgfVxuICAudGFibGUge1xuICAgIGJvcmRlci1jb2xsYXBzZTogY29sbGFwc2UgIWltcG9ydGFudDsgfVxuICAgIC50YWJsZSB0ZCxcbiAgICAudGFibGUgdGgge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZiAhaW1wb3J0YW50OyB9XG4gIC50YWJsZS1ib3JkZXJlZCB0aCxcbiAgLnRhYmxlLWJvcmRlcmVkIHRkIHtcbiAgICBib3JkZXI6IDFweCBzb2xpZCAjZGRkICFpbXBvcnRhbnQ7IH0gfVxuXG5AZm9udC1mYWNlIHtcbiAgZm9udC1mYW1pbHk6ICdHbHlwaGljb25zIEhhbGZsaW5ncyc7XG4gIHNyYzogdXJsKFwiLi4vZm9udHMvYm9vdHN0cmFwL2dseXBoaWNvbnMtaGFsZmxpbmdzLXJlZ3VsYXIuZW90XCIpO1xuICBzcmM6IHVybChcIi4uL2ZvbnRzL2Jvb3RzdHJhcC9nbHlwaGljb25zLWhhbGZsaW5ncy1yZWd1bGFyLmVvdD8jaWVmaXhcIikgZm9ybWF0KFwiZW1iZWRkZWQtb3BlbnR5cGVcIiksIHVybChcIi4uL2ZvbnRzL2Jvb3RzdHJhcC9nbHlwaGljb25zLWhhbGZsaW5ncy1yZWd1bGFyLndvZmYyXCIpIGZvcm1hdChcIndvZmYyXCIpLCB1cmwoXCIuLi9mb250cy9ib290c3RyYXAvZ2x5cGhpY29ucy1oYWxmbGluZ3MtcmVndWxhci53b2ZmXCIpIGZvcm1hdChcIndvZmZcIiksIHVybChcIi4uL2ZvbnRzL2Jvb3RzdHJhcC9nbHlwaGljb25zLWhhbGZsaW5ncy1yZWd1bGFyLnR0ZlwiKSBmb3JtYXQoXCJ0cnVldHlwZVwiKSwgdXJsKFwiLi4vZm9udHMvYm9vdHN0cmFwL2dseXBoaWNvbnMtaGFsZmxpbmdzLXJlZ3VsYXIuc3ZnI2dseXBoaWNvbnNfaGFsZmxpbmdzcmVndWxhclwiKSBmb3JtYXQoXCJzdmdcIik7IH1cblxuLmdseXBoaWNvbiB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgdG9wOiAxcHg7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgZm9udC1mYW1pbHk6ICdHbHlwaGljb25zIEhhbGZsaW5ncyc7XG4gIGZvbnQtc3R5bGU6IG5vcm1hbDtcbiAgZm9udC13ZWlnaHQ6IG5vcm1hbDtcbiAgbGluZS1oZWlnaHQ6IDE7XG4gIC13ZWJraXQtZm9udC1zbW9vdGhpbmc6IGFudGlhbGlhc2VkO1xuICAtbW96LW9zeC1mb250LXNtb290aGluZzogZ3JheXNjYWxlOyB9XG5cbi5nbHlwaGljb24tYXN0ZXJpc2s6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXDJhXCI7IH1cblxuLmdseXBoaWNvbi1wbHVzOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFwyYlwiOyB9XG5cbi5nbHlwaGljb24tZXVybzpiZWZvcmUsXG4uZ2x5cGhpY29uLWV1cjpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcMjBhY1wiOyB9XG5cbi5nbHlwaGljb24tbWludXM6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXDIyMTJcIjsgfVxuXG4uZ2x5cGhpY29uLWNsb3VkOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFwyNjAxXCI7IH1cblxuLmdseXBoaWNvbi1lbnZlbG9wZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcMjcwOVwiOyB9XG5cbi5nbHlwaGljb24tcGVuY2lsOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFwyNzBmXCI7IH1cblxuLmdseXBoaWNvbi1nbGFzczpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTAwMVwiOyB9XG5cbi5nbHlwaGljb24tbXVzaWM6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUwMDJcIjsgfVxuXG4uZ2x5cGhpY29uLXNlYXJjaDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTAwM1wiOyB9XG5cbi5nbHlwaGljb24taGVhcnQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUwMDVcIjsgfVxuXG4uZ2x5cGhpY29uLXN0YXI6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUwMDZcIjsgfVxuXG4uZ2x5cGhpY29uLXN0YXItZW1wdHk6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUwMDdcIjsgfVxuXG4uZ2x5cGhpY29uLXVzZXI6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUwMDhcIjsgfVxuXG4uZ2x5cGhpY29uLWZpbG06YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUwMDlcIjsgfVxuXG4uZ2x5cGhpY29uLXRoLWxhcmdlOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMDEwXCI7IH1cblxuLmdseXBoaWNvbi10aDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTAxMVwiOyB9XG5cbi5nbHlwaGljb24tdGgtbGlzdDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTAxMlwiOyB9XG5cbi5nbHlwaGljb24tb2s6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUwMTNcIjsgfVxuXG4uZ2x5cGhpY29uLXJlbW92ZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTAxNFwiOyB9XG5cbi5nbHlwaGljb24tem9vbS1pbjpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTAxNVwiOyB9XG5cbi5nbHlwaGljb24tem9vbS1vdXQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUwMTZcIjsgfVxuXG4uZ2x5cGhpY29uLW9mZjpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTAxN1wiOyB9XG5cbi5nbHlwaGljb24tc2lnbmFsOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMDE4XCI7IH1cblxuLmdseXBoaWNvbi1jb2c6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUwMTlcIjsgfVxuXG4uZ2x5cGhpY29uLXRyYXNoOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMDIwXCI7IH1cblxuLmdseXBoaWNvbi1ob21lOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMDIxXCI7IH1cblxuLmdseXBoaWNvbi1maWxlOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMDIyXCI7IH1cblxuLmdseXBoaWNvbi10aW1lOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMDIzXCI7IH1cblxuLmdseXBoaWNvbi1yb2FkOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMDI0XCI7IH1cblxuLmdseXBoaWNvbi1kb3dubG9hZC1hbHQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUwMjVcIjsgfVxuXG4uZ2x5cGhpY29uLWRvd25sb2FkOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMDI2XCI7IH1cblxuLmdseXBoaWNvbi11cGxvYWQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUwMjdcIjsgfVxuXG4uZ2x5cGhpY29uLWluYm94OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMDI4XCI7IH1cblxuLmdseXBoaWNvbi1wbGF5LWNpcmNsZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTAyOVwiOyB9XG5cbi5nbHlwaGljb24tcmVwZWF0OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMDMwXCI7IH1cblxuLmdseXBoaWNvbi1yZWZyZXNoOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMDMxXCI7IH1cblxuLmdseXBoaWNvbi1saXN0LWFsdDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTAzMlwiOyB9XG5cbi5nbHlwaGljb24tbG9jazpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTAzM1wiOyB9XG5cbi5nbHlwaGljb24tZmxhZzpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTAzNFwiOyB9XG5cbi5nbHlwaGljb24taGVhZHBob25lczpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTAzNVwiOyB9XG5cbi5nbHlwaGljb24tdm9sdW1lLW9mZjpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTAzNlwiOyB9XG5cbi5nbHlwaGljb24tdm9sdW1lLWRvd246YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUwMzdcIjsgfVxuXG4uZ2x5cGhpY29uLXZvbHVtZS11cDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTAzOFwiOyB9XG5cbi5nbHlwaGljb24tcXJjb2RlOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMDM5XCI7IH1cblxuLmdseXBoaWNvbi1iYXJjb2RlOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMDQwXCI7IH1cblxuLmdseXBoaWNvbi10YWc6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUwNDFcIjsgfVxuXG4uZ2x5cGhpY29uLXRhZ3M6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUwNDJcIjsgfVxuXG4uZ2x5cGhpY29uLWJvb2s6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUwNDNcIjsgfVxuXG4uZ2x5cGhpY29uLWJvb2ttYXJrOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMDQ0XCI7IH1cblxuLmdseXBoaWNvbi1wcmludDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTA0NVwiOyB9XG5cbi5nbHlwaGljb24tY2FtZXJhOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMDQ2XCI7IH1cblxuLmdseXBoaWNvbi1mb250OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMDQ3XCI7IH1cblxuLmdseXBoaWNvbi1ib2xkOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMDQ4XCI7IH1cblxuLmdseXBoaWNvbi1pdGFsaWM6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUwNDlcIjsgfVxuXG4uZ2x5cGhpY29uLXRleHQtaGVpZ2h0OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMDUwXCI7IH1cblxuLmdseXBoaWNvbi10ZXh0LXdpZHRoOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMDUxXCI7IH1cblxuLmdseXBoaWNvbi1hbGlnbi1sZWZ0OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMDUyXCI7IH1cblxuLmdseXBoaWNvbi1hbGlnbi1jZW50ZXI6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUwNTNcIjsgfVxuXG4uZ2x5cGhpY29uLWFsaWduLXJpZ2h0OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMDU0XCI7IH1cblxuLmdseXBoaWNvbi1hbGlnbi1qdXN0aWZ5OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMDU1XCI7IH1cblxuLmdseXBoaWNvbi1saXN0OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMDU2XCI7IH1cblxuLmdseXBoaWNvbi1pbmRlbnQtbGVmdDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTA1N1wiOyB9XG5cbi5nbHlwaGljb24taW5kZW50LXJpZ2h0OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMDU4XCI7IH1cblxuLmdseXBoaWNvbi1mYWNldGltZS12aWRlbzpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTA1OVwiOyB9XG5cbi5nbHlwaGljb24tcGljdHVyZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTA2MFwiOyB9XG5cbi5nbHlwaGljb24tbWFwLW1hcmtlcjpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTA2MlwiOyB9XG5cbi5nbHlwaGljb24tYWRqdXN0OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMDYzXCI7IH1cblxuLmdseXBoaWNvbi10aW50OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMDY0XCI7IH1cblxuLmdseXBoaWNvbi1lZGl0OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMDY1XCI7IH1cblxuLmdseXBoaWNvbi1zaGFyZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTA2NlwiOyB9XG5cbi5nbHlwaGljb24tY2hlY2s6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUwNjdcIjsgfVxuXG4uZ2x5cGhpY29uLW1vdmU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUwNjhcIjsgfVxuXG4uZ2x5cGhpY29uLXN0ZXAtYmFja3dhcmQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUwNjlcIjsgfVxuXG4uZ2x5cGhpY29uLWZhc3QtYmFja3dhcmQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUwNzBcIjsgfVxuXG4uZ2x5cGhpY29uLWJhY2t3YXJkOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMDcxXCI7IH1cblxuLmdseXBoaWNvbi1wbGF5OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMDcyXCI7IH1cblxuLmdseXBoaWNvbi1wYXVzZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTA3M1wiOyB9XG5cbi5nbHlwaGljb24tc3RvcDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTA3NFwiOyB9XG5cbi5nbHlwaGljb24tZm9yd2FyZDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTA3NVwiOyB9XG5cbi5nbHlwaGljb24tZmFzdC1mb3J3YXJkOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMDc2XCI7IH1cblxuLmdseXBoaWNvbi1zdGVwLWZvcndhcmQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUwNzdcIjsgfVxuXG4uZ2x5cGhpY29uLWVqZWN0OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMDc4XCI7IH1cblxuLmdseXBoaWNvbi1jaGV2cm9uLWxlZnQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUwNzlcIjsgfVxuXG4uZ2x5cGhpY29uLWNoZXZyb24tcmlnaHQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUwODBcIjsgfVxuXG4uZ2x5cGhpY29uLXBsdXMtc2lnbjpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTA4MVwiOyB9XG5cbi5nbHlwaGljb24tbWludXMtc2lnbjpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTA4MlwiOyB9XG5cbi5nbHlwaGljb24tcmVtb3ZlLXNpZ246YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUwODNcIjsgfVxuXG4uZ2x5cGhpY29uLW9rLXNpZ246YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUwODRcIjsgfVxuXG4uZ2x5cGhpY29uLXF1ZXN0aW9uLXNpZ246YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUwODVcIjsgfVxuXG4uZ2x5cGhpY29uLWluZm8tc2lnbjpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTA4NlwiOyB9XG5cbi5nbHlwaGljb24tc2NyZWVuc2hvdDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTA4N1wiOyB9XG5cbi5nbHlwaGljb24tcmVtb3ZlLWNpcmNsZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTA4OFwiOyB9XG5cbi5nbHlwaGljb24tb2stY2lyY2xlOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMDg5XCI7IH1cblxuLmdseXBoaWNvbi1iYW4tY2lyY2xlOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMDkwXCI7IH1cblxuLmdseXBoaWNvbi1hcnJvdy1sZWZ0OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMDkxXCI7IH1cblxuLmdseXBoaWNvbi1hcnJvdy1yaWdodDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTA5MlwiOyB9XG5cbi5nbHlwaGljb24tYXJyb3ctdXA6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUwOTNcIjsgfVxuXG4uZ2x5cGhpY29uLWFycm93LWRvd246YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUwOTRcIjsgfVxuXG4uZ2x5cGhpY29uLXNoYXJlLWFsdDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTA5NVwiOyB9XG5cbi5nbHlwaGljb24tcmVzaXplLWZ1bGw6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUwOTZcIjsgfVxuXG4uZ2x5cGhpY29uLXJlc2l6ZS1zbWFsbDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTA5N1wiOyB9XG5cbi5nbHlwaGljb24tZXhjbGFtYXRpb24tc2lnbjpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTEwMVwiOyB9XG5cbi5nbHlwaGljb24tZ2lmdDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTEwMlwiOyB9XG5cbi5nbHlwaGljb24tbGVhZjpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTEwM1wiOyB9XG5cbi5nbHlwaGljb24tZmlyZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTEwNFwiOyB9XG5cbi5nbHlwaGljb24tZXllLW9wZW46YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUxMDVcIjsgfVxuXG4uZ2x5cGhpY29uLWV5ZS1jbG9zZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTEwNlwiOyB9XG5cbi5nbHlwaGljb24td2FybmluZy1zaWduOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMTA3XCI7IH1cblxuLmdseXBoaWNvbi1wbGFuZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTEwOFwiOyB9XG5cbi5nbHlwaGljb24tY2FsZW5kYXI6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUxMDlcIjsgfVxuXG4uZ2x5cGhpY29uLXJhbmRvbTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTExMFwiOyB9XG5cbi5nbHlwaGljb24tY29tbWVudDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTExMVwiOyB9XG5cbi5nbHlwaGljb24tbWFnbmV0OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMTEyXCI7IH1cblxuLmdseXBoaWNvbi1jaGV2cm9uLXVwOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMTEzXCI7IH1cblxuLmdseXBoaWNvbi1jaGV2cm9uLWRvd246YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUxMTRcIjsgfVxuXG4uZ2x5cGhpY29uLXJldHdlZXQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUxMTVcIjsgfVxuXG4uZ2x5cGhpY29uLXNob3BwaW5nLWNhcnQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUxMTZcIjsgfVxuXG4uZ2x5cGhpY29uLWZvbGRlci1jbG9zZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTExN1wiOyB9XG5cbi5nbHlwaGljb24tZm9sZGVyLW9wZW46YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUxMThcIjsgfVxuXG4uZ2x5cGhpY29uLXJlc2l6ZS12ZXJ0aWNhbDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTExOVwiOyB9XG5cbi5nbHlwaGljb24tcmVzaXplLWhvcml6b250YWw6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUxMjBcIjsgfVxuXG4uZ2x5cGhpY29uLWhkZDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTEyMVwiOyB9XG5cbi5nbHlwaGljb24tYnVsbGhvcm46YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUxMjJcIjsgfVxuXG4uZ2x5cGhpY29uLWJlbGw6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUxMjNcIjsgfVxuXG4uZ2x5cGhpY29uLWNlcnRpZmljYXRlOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMTI0XCI7IH1cblxuLmdseXBoaWNvbi10aHVtYnMtdXA6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUxMjVcIjsgfVxuXG4uZ2x5cGhpY29uLXRodW1icy1kb3duOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMTI2XCI7IH1cblxuLmdseXBoaWNvbi1oYW5kLXJpZ2h0OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMTI3XCI7IH1cblxuLmdseXBoaWNvbi1oYW5kLWxlZnQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUxMjhcIjsgfVxuXG4uZ2x5cGhpY29uLWhhbmQtdXA6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUxMjlcIjsgfVxuXG4uZ2x5cGhpY29uLWhhbmQtZG93bjpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTEzMFwiOyB9XG5cbi5nbHlwaGljb24tY2lyY2xlLWFycm93LXJpZ2h0OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMTMxXCI7IH1cblxuLmdseXBoaWNvbi1jaXJjbGUtYXJyb3ctbGVmdDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTEzMlwiOyB9XG5cbi5nbHlwaGljb24tY2lyY2xlLWFycm93LXVwOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMTMzXCI7IH1cblxuLmdseXBoaWNvbi1jaXJjbGUtYXJyb3ctZG93bjpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTEzNFwiOyB9XG5cbi5nbHlwaGljb24tZ2xvYmU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUxMzVcIjsgfVxuXG4uZ2x5cGhpY29uLXdyZW5jaDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTEzNlwiOyB9XG5cbi5nbHlwaGljb24tdGFza3M6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUxMzdcIjsgfVxuXG4uZ2x5cGhpY29uLWZpbHRlcjpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTEzOFwiOyB9XG5cbi5nbHlwaGljb24tYnJpZWZjYXNlOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMTM5XCI7IH1cblxuLmdseXBoaWNvbi1mdWxsc2NyZWVuOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMTQwXCI7IH1cblxuLmdseXBoaWNvbi1kYXNoYm9hcmQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUxNDFcIjsgfVxuXG4uZ2x5cGhpY29uLXBhcGVyY2xpcDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTE0MlwiOyB9XG5cbi5nbHlwaGljb24taGVhcnQtZW1wdHk6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUxNDNcIjsgfVxuXG4uZ2x5cGhpY29uLWxpbms6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUxNDRcIjsgfVxuXG4uZ2x5cGhpY29uLXBob25lOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMTQ1XCI7IH1cblxuLmdseXBoaWNvbi1wdXNocGluOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMTQ2XCI7IH1cblxuLmdseXBoaWNvbi11c2Q6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUxNDhcIjsgfVxuXG4uZ2x5cGhpY29uLWdicDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTE0OVwiOyB9XG5cbi5nbHlwaGljb24tc29ydDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTE1MFwiOyB9XG5cbi5nbHlwaGljb24tc29ydC1ieS1hbHBoYWJldDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTE1MVwiOyB9XG5cbi5nbHlwaGljb24tc29ydC1ieS1hbHBoYWJldC1hbHQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUxNTJcIjsgfVxuXG4uZ2x5cGhpY29uLXNvcnQtYnktb3JkZXI6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUxNTNcIjsgfVxuXG4uZ2x5cGhpY29uLXNvcnQtYnktb3JkZXItYWx0OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMTU0XCI7IH1cblxuLmdseXBoaWNvbi1zb3J0LWJ5LWF0dHJpYnV0ZXM6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUxNTVcIjsgfVxuXG4uZ2x5cGhpY29uLXNvcnQtYnktYXR0cmlidXRlcy1hbHQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUxNTZcIjsgfVxuXG4uZ2x5cGhpY29uLXVuY2hlY2tlZDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTE1N1wiOyB9XG5cbi5nbHlwaGljb24tZXhwYW5kOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMTU4XCI7IH1cblxuLmdseXBoaWNvbi1jb2xsYXBzZS1kb3duOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMTU5XCI7IH1cblxuLmdseXBoaWNvbi1jb2xsYXBzZS11cDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTE2MFwiOyB9XG5cbi5nbHlwaGljb24tbG9nLWluOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMTYxXCI7IH1cblxuLmdseXBoaWNvbi1mbGFzaDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTE2MlwiOyB9XG5cbi5nbHlwaGljb24tbG9nLW91dDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTE2M1wiOyB9XG5cbi5nbHlwaGljb24tbmV3LXdpbmRvdzpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTE2NFwiOyB9XG5cbi5nbHlwaGljb24tcmVjb3JkOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMTY1XCI7IH1cblxuLmdseXBoaWNvbi1zYXZlOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMTY2XCI7IH1cblxuLmdseXBoaWNvbi1vcGVuOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMTY3XCI7IH1cblxuLmdseXBoaWNvbi1zYXZlZDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTE2OFwiOyB9XG5cbi5nbHlwaGljb24taW1wb3J0OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMTY5XCI7IH1cblxuLmdseXBoaWNvbi1leHBvcnQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUxNzBcIjsgfVxuXG4uZ2x5cGhpY29uLXNlbmQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUxNzFcIjsgfVxuXG4uZ2x5cGhpY29uLWZsb3BweS1kaXNrOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMTcyXCI7IH1cblxuLmdseXBoaWNvbi1mbG9wcHktc2F2ZWQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUxNzNcIjsgfVxuXG4uZ2x5cGhpY29uLWZsb3BweS1yZW1vdmU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUxNzRcIjsgfVxuXG4uZ2x5cGhpY29uLWZsb3BweS1zYXZlOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMTc1XCI7IH1cblxuLmdseXBoaWNvbi1mbG9wcHktb3BlbjpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTE3NlwiOyB9XG5cbi5nbHlwaGljb24tY3JlZGl0LWNhcmQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUxNzdcIjsgfVxuXG4uZ2x5cGhpY29uLXRyYW5zZmVyOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMTc4XCI7IH1cblxuLmdseXBoaWNvbi1jdXRsZXJ5OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMTc5XCI7IH1cblxuLmdseXBoaWNvbi1oZWFkZXI6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUxODBcIjsgfVxuXG4uZ2x5cGhpY29uLWNvbXByZXNzZWQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUxODFcIjsgfVxuXG4uZ2x5cGhpY29uLWVhcnBob25lOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMTgyXCI7IH1cblxuLmdseXBoaWNvbi1waG9uZS1hbHQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUxODNcIjsgfVxuXG4uZ2x5cGhpY29uLXRvd2VyOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMTg0XCI7IH1cblxuLmdseXBoaWNvbi1zdGF0czpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTE4NVwiOyB9XG5cbi5nbHlwaGljb24tc2QtdmlkZW86YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUxODZcIjsgfVxuXG4uZ2x5cGhpY29uLWhkLXZpZGVvOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMTg3XCI7IH1cblxuLmdseXBoaWNvbi1zdWJ0aXRsZXM6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUxODhcIjsgfVxuXG4uZ2x5cGhpY29uLXNvdW5kLXN0ZXJlbzpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTE4OVwiOyB9XG5cbi5nbHlwaGljb24tc291bmQtZG9sYnk6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUxOTBcIjsgfVxuXG4uZ2x5cGhpY29uLXNvdW5kLTUtMTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTE5MVwiOyB9XG5cbi5nbHlwaGljb24tc291bmQtNi0xOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMTkyXCI7IH1cblxuLmdseXBoaWNvbi1zb3VuZC03LTE6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUxOTNcIjsgfVxuXG4uZ2x5cGhpY29uLWNvcHlyaWdodC1tYXJrOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMTk0XCI7IH1cblxuLmdseXBoaWNvbi1yZWdpc3RyYXRpb24tbWFyazpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTE5NVwiOyB9XG5cbi5nbHlwaGljb24tY2xvdWQtZG93bmxvYWQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUxOTdcIjsgfVxuXG4uZ2x5cGhpY29uLWNsb3VkLXVwbG9hZDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTE5OFwiOyB9XG5cbi5nbHlwaGljb24tdHJlZS1jb25pZmVyOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMTk5XCI7IH1cblxuLmdseXBoaWNvbi10cmVlLWRlY2lkdW91czpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTIwMFwiOyB9XG5cbi5nbHlwaGljb24tY2Q6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUyMDFcIjsgfVxuXG4uZ2x5cGhpY29uLXNhdmUtZmlsZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTIwMlwiOyB9XG5cbi5nbHlwaGljb24tb3Blbi1maWxlOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMjAzXCI7IH1cblxuLmdseXBoaWNvbi1sZXZlbC11cDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTIwNFwiOyB9XG5cbi5nbHlwaGljb24tY29weTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTIwNVwiOyB9XG5cbi5nbHlwaGljb24tcGFzdGU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUyMDZcIjsgfVxuXG4uZ2x5cGhpY29uLWFsZXJ0OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMjA5XCI7IH1cblxuLmdseXBoaWNvbi1lcXVhbGl6ZXI6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUyMTBcIjsgfVxuXG4uZ2x5cGhpY29uLWtpbmc6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUyMTFcIjsgfVxuXG4uZ2x5cGhpY29uLXF1ZWVuOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMjEyXCI7IH1cblxuLmdseXBoaWNvbi1wYXduOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMjEzXCI7IH1cblxuLmdseXBoaWNvbi1iaXNob3A6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUyMTRcIjsgfVxuXG4uZ2x5cGhpY29uLWtuaWdodDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTIxNVwiOyB9XG5cbi5nbHlwaGljb24tYmFieS1mb3JtdWxhOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMjE2XCI7IH1cblxuLmdseXBoaWNvbi10ZW50OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFwyNmZhXCI7IH1cblxuLmdseXBoaWNvbi1ibGFja2JvYXJkOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMjE4XCI7IH1cblxuLmdseXBoaWNvbi1iZWQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUyMTlcIjsgfVxuXG4uZ2x5cGhpY29uLWFwcGxlOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxmOGZmXCI7IH1cblxuLmdseXBoaWNvbi1lcmFzZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTIyMVwiOyB9XG5cbi5nbHlwaGljb24taG91cmdsYXNzOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFwyMzFiXCI7IH1cblxuLmdseXBoaWNvbi1sYW1wOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMjIzXCI7IH1cblxuLmdseXBoaWNvbi1kdXBsaWNhdGU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUyMjRcIjsgfVxuXG4uZ2x5cGhpY29uLXBpZ2d5LWJhbms6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUyMjVcIjsgfVxuXG4uZ2x5cGhpY29uLXNjaXNzb3JzOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMjI2XCI7IH1cblxuLmdseXBoaWNvbi1iaXRjb2luOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMjI3XCI7IH1cblxuLmdseXBoaWNvbi1idGM6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUyMjdcIjsgfVxuXG4uZ2x5cGhpY29uLXhidDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTIyN1wiOyB9XG5cbi5nbHlwaGljb24teWVuOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFwwMGE1XCI7IH1cblxuLmdseXBoaWNvbi1qcHk6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXDAwYTVcIjsgfVxuXG4uZ2x5cGhpY29uLXJ1YmxlOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFwyMGJkXCI7IH1cblxuLmdseXBoaWNvbi1ydWI6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXDIwYmRcIjsgfVxuXG4uZ2x5cGhpY29uLXNjYWxlOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMjMwXCI7IH1cblxuLmdseXBoaWNvbi1pY2UtbG9sbHk6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUyMzFcIjsgfVxuXG4uZ2x5cGhpY29uLWljZS1sb2xseS10YXN0ZWQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUyMzJcIjsgfVxuXG4uZ2x5cGhpY29uLWVkdWNhdGlvbjpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTIzM1wiOyB9XG5cbi5nbHlwaGljb24tb3B0aW9uLWhvcml6b250YWw6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUyMzRcIjsgfVxuXG4uZ2x5cGhpY29uLW9wdGlvbi12ZXJ0aWNhbDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTIzNVwiOyB9XG5cbi5nbHlwaGljb24tbWVudS1oYW1idXJnZXI6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUyMzZcIjsgfVxuXG4uZ2x5cGhpY29uLW1vZGFsLXdpbmRvdzpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTIzN1wiOyB9XG5cbi5nbHlwaGljb24tb2lsOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMjM4XCI7IH1cblxuLmdseXBoaWNvbi1ncmFpbjpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTIzOVwiOyB9XG5cbi5nbHlwaGljb24tc3VuZ2xhc3NlczpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTI0MFwiOyB9XG5cbi5nbHlwaGljb24tdGV4dC1zaXplOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMjQxXCI7IH1cblxuLmdseXBoaWNvbi10ZXh0LWNvbG9yOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMjQyXCI7IH1cblxuLmdseXBoaWNvbi10ZXh0LWJhY2tncm91bmQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUyNDNcIjsgfVxuXG4uZ2x5cGhpY29uLW9iamVjdC1hbGlnbi10b3A6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUyNDRcIjsgfVxuXG4uZ2x5cGhpY29uLW9iamVjdC1hbGlnbi1ib3R0b206YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUyNDVcIjsgfVxuXG4uZ2x5cGhpY29uLW9iamVjdC1hbGlnbi1ob3Jpem9udGFsOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMjQ2XCI7IH1cblxuLmdseXBoaWNvbi1vYmplY3QtYWxpZ24tbGVmdDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTI0N1wiOyB9XG5cbi5nbHlwaGljb24tb2JqZWN0LWFsaWduLXZlcnRpY2FsOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMjQ4XCI7IH1cblxuLmdseXBoaWNvbi1vYmplY3QtYWxpZ24tcmlnaHQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUyNDlcIjsgfVxuXG4uZ2x5cGhpY29uLXRyaWFuZ2xlLXJpZ2h0OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMjUwXCI7IH1cblxuLmdseXBoaWNvbi10cmlhbmdsZS1sZWZ0OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMjUxXCI7IH1cblxuLmdseXBoaWNvbi10cmlhbmdsZS1ib3R0b206YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUyNTJcIjsgfVxuXG4uZ2x5cGhpY29uLXRyaWFuZ2xlLXRvcDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTI1M1wiOyB9XG5cbi5nbHlwaGljb24tY29uc29sZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTI1NFwiOyB9XG5cbi5nbHlwaGljb24tc3VwZXJzY3JpcHQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUyNTVcIjsgfVxuXG4uZ2x5cGhpY29uLXN1YnNjcmlwdDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTI1NlwiOyB9XG5cbi5nbHlwaGljb24tbWVudS1sZWZ0OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMjU3XCI7IH1cblxuLmdseXBoaWNvbi1tZW51LXJpZ2h0OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMjU4XCI7IH1cblxuLmdseXBoaWNvbi1tZW51LWRvd246YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUyNTlcIjsgfVxuXG4uZ2x5cGhpY29uLW1lbnUtdXA6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUyNjBcIjsgfVxuXG4qIHtcbiAgLXdlYmtpdC1ib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAtbW96LWJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7IH1cblxuKjpiZWZvcmUsXG4qOmFmdGVyIHtcbiAgLXdlYmtpdC1ib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAtbW96LWJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7IH1cblxuaHRtbCB7XG4gIGZvbnQtc2l6ZTogMTBweDtcbiAgLXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOiByZ2JhKDAsIDAsIDAsIDApOyB9XG5cbmJvZHkge1xuICBmb250LWZhbWlseTogXCJIZWx2ZXRpY2EgTmV1ZVwiLCBIZWx2ZXRpY2EsIEFyaWFsLCBzYW5zLXNlcmlmO1xuICBmb250LXNpemU6IDE0cHg7XG4gIGxpbmUtaGVpZ2h0OiAxLjQyODU3MTQyOTtcbiAgY29sb3I6ICMzMzMzMzM7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmY7IH1cblxuaW5wdXQsXG5idXR0b24sXG5zZWxlY3QsXG50ZXh0YXJlYSB7XG4gIGZvbnQtZmFtaWx5OiBpbmhlcml0O1xuICBmb250LXNpemU6IGluaGVyaXQ7XG4gIGxpbmUtaGVpZ2h0OiBpbmhlcml0OyB9XG5cbmEge1xuICBjb2xvcjogIzMzN2FiNztcbiAgdGV4dC1kZWNvcmF0aW9uOiBub25lOyB9XG4gIGE6aG92ZXIsIGE6Zm9jdXMge1xuICAgIGNvbG9yOiAjMjM1MjdjO1xuICAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOyB9XG4gIGE6Zm9jdXMge1xuICAgIG91dGxpbmU6IHRoaW4gZG90dGVkO1xuICAgIG91dGxpbmU6IDVweCBhdXRvIC13ZWJraXQtZm9jdXMtcmluZy1jb2xvcjtcbiAgICBvdXRsaW5lLW9mZnNldDogLTJweDsgfVxuXG5maWd1cmUge1xuICBtYXJnaW46IDA7IH1cblxuaW1nIHtcbiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTsgfVxuXG4uaW1nLXJlc3BvbnNpdmUge1xuICBkaXNwbGF5OiBibG9jaztcbiAgbWF4LXdpZHRoOiAxMDAlO1xuICBoZWlnaHQ6IGF1dG87IH1cblxuLmltZy1yb3VuZGVkIHtcbiAgYm9yZGVyLXJhZGl1czogNnB4OyB9XG5cbi5pbWctdGh1bWJuYWlsIHtcbiAgcGFkZGluZzogNHB4O1xuICBsaW5lLWhlaWdodDogMS40Mjg1NzE0Mjk7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmY7XG4gIGJvcmRlcjogMXB4IHNvbGlkICNkZGQ7XG4gIGJvcmRlci1yYWRpdXM6IDRweDtcbiAgLXdlYmtpdC10cmFuc2l0aW9uOiBhbGwgMC4ycyBlYXNlLWluLW91dDtcbiAgLW8tdHJhbnNpdGlvbjogYWxsIDAuMnMgZWFzZS1pbi1vdXQ7XG4gIHRyYW5zaXRpb246IGFsbCAwLjJzIGVhc2UtaW4tb3V0O1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIG1heC13aWR0aDogMTAwJTtcbiAgaGVpZ2h0OiBhdXRvOyB9XG5cbi5pbWctY2lyY2xlIHtcbiAgYm9yZGVyLXJhZGl1czogNTAlOyB9XG5cbmhyIHtcbiAgbWFyZ2luLXRvcDogMjBweDtcbiAgbWFyZ2luLWJvdHRvbTogMjBweDtcbiAgYm9yZGVyOiAwO1xuICBib3JkZXItdG9wOiAxcHggc29saWQgI2VlZWVlZTsgfVxuXG4uc3Itb25seSB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgd2lkdGg6IDFweDtcbiAgaGVpZ2h0OiAxcHg7XG4gIG1hcmdpbjogLTFweDtcbiAgcGFkZGluZzogMDtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgY2xpcDogcmVjdCgwLCAwLCAwLCAwKTtcbiAgYm9yZGVyOiAwOyB9XG5cbi5zci1vbmx5LWZvY3VzYWJsZTphY3RpdmUsIC5zci1vbmx5LWZvY3VzYWJsZTpmb2N1cyB7XG4gIHBvc2l0aW9uOiBzdGF0aWM7XG4gIHdpZHRoOiBhdXRvO1xuICBoZWlnaHQ6IGF1dG87XG4gIG1hcmdpbjogMDtcbiAgb3ZlcmZsb3c6IHZpc2libGU7XG4gIGNsaXA6IGF1dG87IH1cblxuW3JvbGU9XCJidXR0b25cIl0ge1xuICBjdXJzb3I6IHBvaW50ZXI7IH1cblxuaDEsIGgyLCBoMywgaDQsIGg1LCBoNixcbi5oMSwgLmgyLCAuaDMsIC5oNCwgLmg1LCAuaDYge1xuICBmb250LWZhbWlseTogaW5oZXJpdDtcbiAgZm9udC13ZWlnaHQ6IDcwMDtcbiAgbGluZS1oZWlnaHQ6IDEuMTtcbiAgY29sb3I6IGluaGVyaXQ7IH1cbiAgaDEgc21hbGwsXG4gIGgxIC5zbWFsbCwgaDIgc21hbGwsXG4gIGgyIC5zbWFsbCwgaDMgc21hbGwsXG4gIGgzIC5zbWFsbCwgaDQgc21hbGwsXG4gIGg0IC5zbWFsbCwgaDUgc21hbGwsXG4gIGg1IC5zbWFsbCwgaDYgc21hbGwsXG4gIGg2IC5zbWFsbCxcbiAgLmgxIHNtYWxsLFxuICAuaDEgLnNtYWxsLCAuaDIgc21hbGwsXG4gIC5oMiAuc21hbGwsIC5oMyBzbWFsbCxcbiAgLmgzIC5zbWFsbCwgLmg0IHNtYWxsLFxuICAuaDQgLnNtYWxsLCAuaDUgc21hbGwsXG4gIC5oNSAuc21hbGwsIC5oNiBzbWFsbCxcbiAgLmg2IC5zbWFsbCB7XG4gICAgZm9udC13ZWlnaHQ6IG5vcm1hbDtcbiAgICBsaW5lLWhlaWdodDogMTtcbiAgICBjb2xvcjogIzc3Nzc3NzsgfVxuXG5oMSwgLmgxLFxuaDIsIC5oMixcbmgzLCAuaDMge1xuICBtYXJnaW4tdG9wOiAyMHB4O1xuICBtYXJnaW4tYm90dG9tOiAxMHB4OyB9XG4gIGgxIHNtYWxsLFxuICBoMSAuc21hbGwsIC5oMSBzbWFsbCxcbiAgLmgxIC5zbWFsbCxcbiAgaDIgc21hbGwsXG4gIGgyIC5zbWFsbCwgLmgyIHNtYWxsLFxuICAuaDIgLnNtYWxsLFxuICBoMyBzbWFsbCxcbiAgaDMgLnNtYWxsLCAuaDMgc21hbGwsXG4gIC5oMyAuc21hbGwge1xuICAgIGZvbnQtc2l6ZTogNjUlOyB9XG5cbmg0LCAuaDQsXG5oNSwgLmg1LFxuaDYsIC5oNiB7XG4gIG1hcmdpbi10b3A6IDEwcHg7XG4gIG1hcmdpbi1ib3R0b206IDEwcHg7IH1cbiAgaDQgc21hbGwsXG4gIGg0IC5zbWFsbCwgLmg0IHNtYWxsLFxuICAuaDQgLnNtYWxsLFxuICBoNSBzbWFsbCxcbiAgaDUgLnNtYWxsLCAuaDUgc21hbGwsXG4gIC5oNSAuc21hbGwsXG4gIGg2IHNtYWxsLFxuICBoNiAuc21hbGwsIC5oNiBzbWFsbCxcbiAgLmg2IC5zbWFsbCB7XG4gICAgZm9udC1zaXplOiA3NSU7IH1cblxuaDEsIC5oMSB7XG4gIGZvbnQtc2l6ZTogMzZweDsgfVxuXG5oMiwgLmgyIHtcbiAgZm9udC1zaXplOiAzMHB4OyB9XG5cbmgzLCAuaDMge1xuICBmb250LXNpemU6IDI0cHg7IH1cblxuaDQsIC5oNCB7XG4gIGZvbnQtc2l6ZTogMThweDsgfVxuXG5oNSwgLmg1IHtcbiAgZm9udC1zaXplOiAxNHB4OyB9XG5cbmg2LCAuaDYge1xuICBmb250LXNpemU6IDEycHg7IH1cblxucCB7XG4gIG1hcmdpbjogMCAwIDEwcHg7IH1cblxuLmxlYWQge1xuICBtYXJnaW4tYm90dG9tOiAyMHB4O1xuICBmb250LXNpemU6IDE2cHg7XG4gIGZvbnQtd2VpZ2h0OiAzMDA7XG4gIGxpbmUtaGVpZ2h0OiAxLjQ7IH1cbiAgQG1lZGlhIChtaW4td2lkdGg6IDc2OHB4KSB7XG4gICAgLmxlYWQge1xuICAgICAgZm9udC1zaXplOiAyMXB4OyB9IH1cblxuc21hbGwsXG4uc21hbGwge1xuICBmb250LXNpemU6IDg1JTsgfVxuXG5tYXJrLFxuLm1hcmsge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmNmOGUzO1xuICBwYWRkaW5nOiAuMmVtOyB9XG5cbi50ZXh0LWxlZnQge1xuICB0ZXh0LWFsaWduOiBsZWZ0OyB9XG5cbi50ZXh0LXJpZ2h0IHtcbiAgdGV4dC1hbGlnbjogcmlnaHQ7IH1cblxuLnRleHQtY2VudGVyIHtcbiAgdGV4dC1hbGlnbjogY2VudGVyOyB9XG5cbi50ZXh0LWp1c3RpZnkge1xuICB0ZXh0LWFsaWduOiBqdXN0aWZ5OyB9XG5cbi50ZXh0LW5vd3JhcCB7XG4gIHdoaXRlLXNwYWNlOiBub3dyYXA7IH1cblxuLnRleHQtbG93ZXJjYXNlIHtcbiAgdGV4dC10cmFuc2Zvcm06IGxvd2VyY2FzZTsgfVxuXG4udGV4dC11cHBlcmNhc2UsIC5pbml0aWFsaXNtIHtcbiAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTsgfVxuXG4udGV4dC1jYXBpdGFsaXplIHtcbiAgdGV4dC10cmFuc2Zvcm06IGNhcGl0YWxpemU7IH1cblxuLnRleHQtbXV0ZWQge1xuICBjb2xvcjogIzc3Nzc3NzsgfVxuXG4udGV4dC1wcmltYXJ5IHtcbiAgY29sb3I6ICMzMzdhYjc7IH1cblxuYS50ZXh0LXByaW1hcnk6aG92ZXIge1xuICBjb2xvcjogIzI4NjA5MDsgfVxuXG4udGV4dC1zdWNjZXNzIHtcbiAgY29sb3I6ICMzYzc2M2Q7IH1cblxuYS50ZXh0LXN1Y2Nlc3M6aG92ZXIge1xuICBjb2xvcjogIzJiNTQyYzsgfVxuXG4udGV4dC1pbmZvIHtcbiAgY29sb3I6ICMzMTcwOGY7IH1cblxuYS50ZXh0LWluZm86aG92ZXIge1xuICBjb2xvcjogIzI0NTI2OTsgfVxuXG4udGV4dC13YXJuaW5nIHtcbiAgY29sb3I6ICM4YTZkM2I7IH1cblxuYS50ZXh0LXdhcm5pbmc6aG92ZXIge1xuICBjb2xvcjogIzY2NTEyYzsgfVxuXG4udGV4dC1kYW5nZXIge1xuICBjb2xvcjogI2E5NDQ0MjsgfVxuXG5hLnRleHQtZGFuZ2VyOmhvdmVyIHtcbiAgY29sb3I6ICM4NDM1MzQ7IH1cblxuLmJnLXByaW1hcnkge1xuICBjb2xvcjogI2ZmZjsgfVxuXG4uYmctcHJpbWFyeSB7XG4gIGJhY2tncm91bmQtY29sb3I6ICMzMzdhYjc7IH1cblxuYS5iZy1wcmltYXJ5OmhvdmVyIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogIzI4NjA5MDsgfVxuXG4uYmctc3VjY2VzcyB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNkZmYwZDg7IH1cblxuYS5iZy1zdWNjZXNzOmhvdmVyIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2MxZTJiMzsgfVxuXG4uYmctaW5mbyB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNkOWVkZjc7IH1cblxuYS5iZy1pbmZvOmhvdmVyIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2FmZDllZTsgfVxuXG4uYmctd2FybmluZyB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmY2Y4ZTM7IH1cblxuYS5iZy13YXJuaW5nOmhvdmVyIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2Y3ZWNiNTsgfVxuXG4uYmctZGFuZ2VyIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2YyZGVkZTsgfVxuXG5hLmJnLWRhbmdlcjpob3ZlciB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNlNGI5Yjk7IH1cblxuLnBhZ2UtaGVhZGVyIHtcbiAgcGFkZGluZy1ib3R0b206IDlweDtcbiAgbWFyZ2luOiA0MHB4IDAgMjBweDtcbiAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNlZWVlZWU7IH1cblxudWwsXG5vbCB7XG4gIG1hcmdpbi10b3A6IDA7XG4gIG1hcmdpbi1ib3R0b206IDEwcHg7IH1cbiAgdWwgdWwsXG4gIHVsIG9sLFxuICBvbCB1bCxcbiAgb2wgb2wge1xuICAgIG1hcmdpbi1ib3R0b206IDA7IH1cblxuLmxpc3QtdW5zdHlsZWQge1xuICBwYWRkaW5nLWxlZnQ6IDA7XG4gIGxpc3Qtc3R5bGU6IG5vbmU7IH1cblxuLmxpc3QtaW5saW5lIHtcbiAgcGFkZGluZy1sZWZ0OiAwO1xuICBsaXN0LXN0eWxlOiBub25lO1xuICBtYXJnaW4tbGVmdDogLTVweDsgfVxuICAubGlzdC1pbmxpbmUgPiBsaSB7XG4gICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgIHBhZGRpbmctbGVmdDogNXB4O1xuICAgIHBhZGRpbmctcmlnaHQ6IDVweDsgfVxuXG5kbCB7XG4gIG1hcmdpbi10b3A6IDA7XG4gIG1hcmdpbi1ib3R0b206IDIwcHg7IH1cblxuZHQsXG5kZCB7XG4gIGxpbmUtaGVpZ2h0OiAxLjQyODU3MTQyOTsgfVxuXG5kdCB7XG4gIGZvbnQtd2VpZ2h0OiBib2xkOyB9XG5cbmRkIHtcbiAgbWFyZ2luLWxlZnQ6IDA7IH1cblxuLmRsLWhvcml6b250YWwgZGQ6YmVmb3JlLCAuZGwtaG9yaXpvbnRhbCBkZDphZnRlciB7XG4gIGNvbnRlbnQ6IFwiIFwiO1xuICBkaXNwbGF5OiB0YWJsZTsgfVxuXG4uZGwtaG9yaXpvbnRhbCBkZDphZnRlciB7XG4gIGNsZWFyOiBib3RoOyB9XG5cbkBtZWRpYSAobWluLXdpZHRoOiA3NjhweCkge1xuICAuZGwtaG9yaXpvbnRhbCBkdCB7XG4gICAgZmxvYXQ6IGxlZnQ7XG4gICAgd2lkdGg6IDE2MHB4O1xuICAgIGNsZWFyOiBsZWZ0O1xuICAgIHRleHQtYWxpZ246IHJpZ2h0O1xuICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7XG4gICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsgfVxuICAuZGwtaG9yaXpvbnRhbCBkZCB7XG4gICAgbWFyZ2luLWxlZnQ6IDE4MHB4OyB9IH1cblxuYWJiclt0aXRsZV0sXG5hYmJyW2RhdGEtb3JpZ2luYWwtdGl0bGVdIHtcbiAgY3Vyc29yOiBoZWxwO1xuICBib3JkZXItYm90dG9tOiAxcHggZG90dGVkICM3Nzc3Nzc7IH1cblxuLmluaXRpYWxpc20ge1xuICBmb250LXNpemU6IDkwJTsgfVxuXG5ibG9ja3F1b3RlIHtcbiAgcGFkZGluZzogMTBweCAyMHB4O1xuICBtYXJnaW46IDAgMCAyMHB4O1xuICBmb250LXNpemU6IDE3LjVweDtcbiAgYm9yZGVyLWxlZnQ6IDVweCBzb2xpZCAjZWVlZWVlOyB9XG4gIGJsb2NrcXVvdGUgcDpsYXN0LWNoaWxkLFxuICBibG9ja3F1b3RlIHVsOmxhc3QtY2hpbGQsXG4gIGJsb2NrcXVvdGUgb2w6bGFzdC1jaGlsZCB7XG4gICAgbWFyZ2luLWJvdHRvbTogMDsgfVxuICBibG9ja3F1b3RlIGZvb3RlcixcbiAgYmxvY2txdW90ZSBzbWFsbCxcbiAgYmxvY2txdW90ZSAuc21hbGwge1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIGZvbnQtc2l6ZTogODAlO1xuICAgIGxpbmUtaGVpZ2h0OiAxLjQyODU3MTQyOTtcbiAgICBjb2xvcjogIzc3Nzc3NzsgfVxuICAgIGJsb2NrcXVvdGUgZm9vdGVyOmJlZm9yZSxcbiAgICBibG9ja3F1b3RlIHNtYWxsOmJlZm9yZSxcbiAgICBibG9ja3F1b3RlIC5zbWFsbDpiZWZvcmUge1xuICAgICAgY29udGVudDogJ1xcMjAxNCBcXDAwQTAnOyB9XG5cbi5ibG9ja3F1b3RlLXJldmVyc2UsXG5ibG9ja3F1b3RlLnB1bGwtcmlnaHQge1xuICBwYWRkaW5nLXJpZ2h0OiAxNXB4O1xuICBwYWRkaW5nLWxlZnQ6IDA7XG4gIGJvcmRlci1yaWdodDogNXB4IHNvbGlkICNlZWVlZWU7XG4gIGJvcmRlci1sZWZ0OiAwO1xuICB0ZXh0LWFsaWduOiByaWdodDsgfVxuICAuYmxvY2txdW90ZS1yZXZlcnNlIGZvb3RlcjpiZWZvcmUsXG4gIC5ibG9ja3F1b3RlLXJldmVyc2Ugc21hbGw6YmVmb3JlLFxuICAuYmxvY2txdW90ZS1yZXZlcnNlIC5zbWFsbDpiZWZvcmUsXG4gIGJsb2NrcXVvdGUucHVsbC1yaWdodCBmb290ZXI6YmVmb3JlLFxuICBibG9ja3F1b3RlLnB1bGwtcmlnaHQgc21hbGw6YmVmb3JlLFxuICBibG9ja3F1b3RlLnB1bGwtcmlnaHQgLnNtYWxsOmJlZm9yZSB7XG4gICAgY29udGVudDogJyc7IH1cbiAgLmJsb2NrcXVvdGUtcmV2ZXJzZSBmb290ZXI6YWZ0ZXIsXG4gIC5ibG9ja3F1b3RlLXJldmVyc2Ugc21hbGw6YWZ0ZXIsXG4gIC5ibG9ja3F1b3RlLXJldmVyc2UgLnNtYWxsOmFmdGVyLFxuICBibG9ja3F1b3RlLnB1bGwtcmlnaHQgZm9vdGVyOmFmdGVyLFxuICBibG9ja3F1b3RlLnB1bGwtcmlnaHQgc21hbGw6YWZ0ZXIsXG4gIGJsb2NrcXVvdGUucHVsbC1yaWdodCAuc21hbGw6YWZ0ZXIge1xuICAgIGNvbnRlbnQ6ICdcXDAwQTAgXFwyMDE0JzsgfVxuXG5hZGRyZXNzIHtcbiAgbWFyZ2luLWJvdHRvbTogMjBweDtcbiAgZm9udC1zdHlsZTogbm9ybWFsO1xuICBsaW5lLWhlaWdodDogMS40Mjg1NzE0Mjk7IH1cblxuY29kZSxcbmtiZCxcbnByZSxcbnNhbXAge1xuICBmb250LWZhbWlseTogXCJSb2JvdG8gTW9ub1wiLCBNZW5sbywgTW9uYWNvLCBDb25zb2xhcywgXCJDb3VyaWVyIE5ld1wiLCBtb25vc3BhY2U7IH1cblxuY29kZSB7XG4gIHBhZGRpbmc6IDJweCA0cHg7XG4gIGZvbnQtc2l6ZTogOTAlO1xuICBjb2xvcjogIzREOENGNDtcbiAgYmFja2dyb3VuZC1jb2xvcjogd2hpdGVzbW9rZTtcbiAgYm9yZGVyLXJhZGl1czogNHB4OyB9XG5cbmtiZCB7XG4gIHBhZGRpbmc6IDJweCA0cHg7XG4gIGZvbnQtc2l6ZTogOTAlO1xuICBjb2xvcjogI2ZmZjtcbiAgYmFja2dyb3VuZC1jb2xvcjogIzMzMztcbiAgYm9yZGVyLXJhZGl1czogM3B4O1xuICBib3gtc2hhZG93OiBpbnNldCAwIC0xcHggMCByZ2JhKDAsIDAsIDAsIDAuMjUpOyB9XG4gIGtiZCBrYmQge1xuICAgIHBhZGRpbmc6IDA7XG4gICAgZm9udC1zaXplOiAxMDAlO1xuICAgIGZvbnQtd2VpZ2h0OiBib2xkO1xuICAgIGJveC1zaGFkb3c6IG5vbmU7IH1cblxucHJlIHtcbiAgZGlzcGxheTogYmxvY2s7XG4gIHBhZGRpbmc6IDkuNXB4O1xuICBtYXJnaW46IDAgMCAxMHB4O1xuICBmb250LXNpemU6IDEzcHg7XG4gIGxpbmUtaGVpZ2h0OiAxLjQyODU3MTQyOTtcbiAgd29yZC1icmVhazogYnJlYWstYWxsO1xuICB3b3JkLXdyYXA6IGJyZWFrLXdvcmQ7XG4gIGNvbG9yOiAjMzMzMzMzO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjVmNWY1O1xuICBib3JkZXI6IDFweCBzb2xpZCAjY2NjO1xuICBib3JkZXItcmFkaXVzOiA0cHg7IH1cbiAgcHJlIGNvZGUge1xuICAgIHBhZGRpbmc6IDA7XG4gICAgZm9udC1zaXplOiBpbmhlcml0O1xuICAgIGNvbG9yOiBpbmhlcml0O1xuICAgIHdoaXRlLXNwYWNlOiBwcmUtd3JhcDtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcbiAgICBib3JkZXItcmFkaXVzOiAwOyB9XG5cbi5wcmUtc2Nyb2xsYWJsZSB7XG4gIG1heC1oZWlnaHQ6IDM0MHB4O1xuICBvdmVyZmxvdy15OiBzY3JvbGw7IH1cblxuLmNvbnRhaW5lciB7XG4gIG1hcmdpbi1yaWdodDogYXV0bztcbiAgbWFyZ2luLWxlZnQ6IGF1dG87XG4gIHBhZGRpbmctbGVmdDogMTVweDtcbiAgcGFkZGluZy1yaWdodDogMTVweDsgfVxuICAuY29udGFpbmVyOmJlZm9yZSwgLmNvbnRhaW5lcjphZnRlciB7XG4gICAgY29udGVudDogXCIgXCI7XG4gICAgZGlzcGxheTogdGFibGU7IH1cbiAgLmNvbnRhaW5lcjphZnRlciB7XG4gICAgY2xlYXI6IGJvdGg7IH1cbiAgQG1lZGlhIChtaW4td2lkdGg6IDc2OHB4KSB7XG4gICAgLmNvbnRhaW5lciB7XG4gICAgICB3aWR0aDogNzUwcHg7IH0gfVxuICBAbWVkaWEgKG1pbi13aWR0aDogOTkycHgpIHtcbiAgICAuY29udGFpbmVyIHtcbiAgICAgIHdpZHRoOiA5NzBweDsgfSB9XG4gIEBtZWRpYSAobWluLXdpZHRoOiAxMjIwcHgpIHtcbiAgICAuY29udGFpbmVyIHtcbiAgICAgIHdpZHRoOiAxMTcwcHg7IH0gfVxuXG4uY29udGFpbmVyLWZsdWlkIHtcbiAgbWFyZ2luLXJpZ2h0OiBhdXRvO1xuICBtYXJnaW4tbGVmdDogYXV0bztcbiAgcGFkZGluZy1sZWZ0OiAxNXB4O1xuICBwYWRkaW5nLXJpZ2h0OiAxNXB4OyB9XG4gIC5jb250YWluZXItZmx1aWQ6YmVmb3JlLCAuY29udGFpbmVyLWZsdWlkOmFmdGVyIHtcbiAgICBjb250ZW50OiBcIiBcIjtcbiAgICBkaXNwbGF5OiB0YWJsZTsgfVxuICAuY29udGFpbmVyLWZsdWlkOmFmdGVyIHtcbiAgICBjbGVhcjogYm90aDsgfVxuXG4ucm93IHtcbiAgbWFyZ2luLWxlZnQ6IC0xNXB4O1xuICBtYXJnaW4tcmlnaHQ6IC0xNXB4OyB9XG4gIC5yb3c6YmVmb3JlLCAucm93OmFmdGVyIHtcbiAgICBjb250ZW50OiBcIiBcIjtcbiAgICBkaXNwbGF5OiB0YWJsZTsgfVxuICAucm93OmFmdGVyIHtcbiAgICBjbGVhcjogYm90aDsgfVxuXG4uY29sLXhzLTEsIC5jb2wtc20tMSwgLmNvbC1tZC0xLCAuY29sLWxnLTEsIC5jb2wteHMtMiwgLmNvbC1zbS0yLCAuY29sLW1kLTIsIC5jb2wtbGctMiwgLmNvbC14cy0zLCAuY29sLXNtLTMsIC5jb2wtbWQtMywgLmNvbC1sZy0zLCAuY29sLXhzLTQsIC5jb2wtc20tNCwgLmNvbC1tZC00LCAuY29sLWxnLTQsIC5jb2wteHMtNSwgLmNvbC1zbS01LCAuY29sLW1kLTUsIC5jb2wtbGctNSwgLmNvbC14cy02LCAuY29sLXNtLTYsIC5jb2wtbWQtNiwgLmNvbC1sZy02LCAuY29sLXhzLTcsIC5jb2wtc20tNywgLmNvbC1tZC03LCAuY29sLWxnLTcsIC5jb2wteHMtOCwgLmNvbC1zbS04LCAuY29sLW1kLTgsIC5jb2wtbGctOCwgLmNvbC14cy05LCAuY29sLXNtLTksIC5jb2wtbWQtOSwgLmNvbC1sZy05LCAuY29sLXhzLTEwLCAuY29sLXNtLTEwLCAuY29sLW1kLTEwLCAuY29sLWxnLTEwLCAuY29sLXhzLTExLCAuY29sLXNtLTExLCAuY29sLW1kLTExLCAuY29sLWxnLTExLCAuY29sLXhzLTEyLCAuY29sLXNtLTEyLCAuY29sLW1kLTEyLCAuY29sLWxnLTEyIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBtaW4taGVpZ2h0OiAxcHg7XG4gIHBhZGRpbmctbGVmdDogMTVweDtcbiAgcGFkZGluZy1yaWdodDogMTVweDsgfVxuXG4uY29sLXhzLTEsIC5jb2wteHMtMiwgLmNvbC14cy0zLCAuY29sLXhzLTQsIC5jb2wteHMtNSwgLmNvbC14cy02LCAuY29sLXhzLTcsIC5jb2wteHMtOCwgLmNvbC14cy05LCAuY29sLXhzLTEwLCAuY29sLXhzLTExLCAuY29sLXhzLTEyIHtcbiAgZmxvYXQ6IGxlZnQ7IH1cblxuLmNvbC14cy0xIHtcbiAgd2lkdGg6IDguMzMzMzMzMzMzMyU7IH1cblxuLmNvbC14cy0yIHtcbiAgd2lkdGg6IDE2LjY2NjY2NjY2NjclOyB9XG5cbi5jb2wteHMtMyB7XG4gIHdpZHRoOiAyNSU7IH1cblxuLmNvbC14cy00IHtcbiAgd2lkdGg6IDMzLjMzMzMzMzMzMzMlOyB9XG5cbi5jb2wteHMtNSB7XG4gIHdpZHRoOiA0MS42NjY2NjY2NjY3JTsgfVxuXG4uY29sLXhzLTYge1xuICB3aWR0aDogNTAlOyB9XG5cbi5jb2wteHMtNyB7XG4gIHdpZHRoOiA1OC4zMzMzMzMzMzMzJTsgfVxuXG4uY29sLXhzLTgge1xuICB3aWR0aDogNjYuNjY2NjY2NjY2NyU7IH1cblxuLmNvbC14cy05IHtcbiAgd2lkdGg6IDc1JTsgfVxuXG4uY29sLXhzLTEwIHtcbiAgd2lkdGg6IDgzLjMzMzMzMzMzMzMlOyB9XG5cbi5jb2wteHMtMTEge1xuICB3aWR0aDogOTEuNjY2NjY2NjY2NyU7IH1cblxuLmNvbC14cy0xMiB7XG4gIHdpZHRoOiAxMDAlOyB9XG5cbi5jb2wteHMtcHVsbC0wIHtcbiAgcmlnaHQ6IGF1dG87IH1cblxuLmNvbC14cy1wdWxsLTEge1xuICByaWdodDogOC4zMzMzMzMzMzMzJTsgfVxuXG4uY29sLXhzLXB1bGwtMiB7XG4gIHJpZ2h0OiAxNi42NjY2NjY2NjY3JTsgfVxuXG4uY29sLXhzLXB1bGwtMyB7XG4gIHJpZ2h0OiAyNSU7IH1cblxuLmNvbC14cy1wdWxsLTQge1xuICByaWdodDogMzMuMzMzMzMzMzMzMyU7IH1cblxuLmNvbC14cy1wdWxsLTUge1xuICByaWdodDogNDEuNjY2NjY2NjY2NyU7IH1cblxuLmNvbC14cy1wdWxsLTYge1xuICByaWdodDogNTAlOyB9XG5cbi5jb2wteHMtcHVsbC03IHtcbiAgcmlnaHQ6IDU4LjMzMzMzMzMzMzMlOyB9XG5cbi5jb2wteHMtcHVsbC04IHtcbiAgcmlnaHQ6IDY2LjY2NjY2NjY2NjclOyB9XG5cbi5jb2wteHMtcHVsbC05IHtcbiAgcmlnaHQ6IDc1JTsgfVxuXG4uY29sLXhzLXB1bGwtMTAge1xuICByaWdodDogODMuMzMzMzMzMzMzMyU7IH1cblxuLmNvbC14cy1wdWxsLTExIHtcbiAgcmlnaHQ6IDkxLjY2NjY2NjY2NjclOyB9XG5cbi5jb2wteHMtcHVsbC0xMiB7XG4gIHJpZ2h0OiAxMDAlOyB9XG5cbi5jb2wteHMtcHVzaC0wIHtcbiAgbGVmdDogYXV0bzsgfVxuXG4uY29sLXhzLXB1c2gtMSB7XG4gIGxlZnQ6IDguMzMzMzMzMzMzMyU7IH1cblxuLmNvbC14cy1wdXNoLTIge1xuICBsZWZ0OiAxNi42NjY2NjY2NjY3JTsgfVxuXG4uY29sLXhzLXB1c2gtMyB7XG4gIGxlZnQ6IDI1JTsgfVxuXG4uY29sLXhzLXB1c2gtNCB7XG4gIGxlZnQ6IDMzLjMzMzMzMzMzMzMlOyB9XG5cbi5jb2wteHMtcHVzaC01IHtcbiAgbGVmdDogNDEuNjY2NjY2NjY2NyU7IH1cblxuLmNvbC14cy1wdXNoLTYge1xuICBsZWZ0OiA1MCU7IH1cblxuLmNvbC14cy1wdXNoLTcge1xuICBsZWZ0OiA1OC4zMzMzMzMzMzMzJTsgfVxuXG4uY29sLXhzLXB1c2gtOCB7XG4gIGxlZnQ6IDY2LjY2NjY2NjY2NjclOyB9XG5cbi5jb2wteHMtcHVzaC05IHtcbiAgbGVmdDogNzUlOyB9XG5cbi5jb2wteHMtcHVzaC0xMCB7XG4gIGxlZnQ6IDgzLjMzMzMzMzMzMzMlOyB9XG5cbi5jb2wteHMtcHVzaC0xMSB7XG4gIGxlZnQ6IDkxLjY2NjY2NjY2NjclOyB9XG5cbi5jb2wteHMtcHVzaC0xMiB7XG4gIGxlZnQ6IDEwMCU7IH1cblxuLmNvbC14cy1vZmZzZXQtMCB7XG4gIG1hcmdpbi1sZWZ0OiAwJTsgfVxuXG4uY29sLXhzLW9mZnNldC0xIHtcbiAgbWFyZ2luLWxlZnQ6IDguMzMzMzMzMzMzMyU7IH1cblxuLmNvbC14cy1vZmZzZXQtMiB7XG4gIG1hcmdpbi1sZWZ0OiAxNi42NjY2NjY2NjY3JTsgfVxuXG4uY29sLXhzLW9mZnNldC0zIHtcbiAgbWFyZ2luLWxlZnQ6IDI1JTsgfVxuXG4uY29sLXhzLW9mZnNldC00IHtcbiAgbWFyZ2luLWxlZnQ6IDMzLjMzMzMzMzMzMzMlOyB9XG5cbi5jb2wteHMtb2Zmc2V0LTUge1xuICBtYXJnaW4tbGVmdDogNDEuNjY2NjY2NjY2NyU7IH1cblxuLmNvbC14cy1vZmZzZXQtNiB7XG4gIG1hcmdpbi1sZWZ0OiA1MCU7IH1cblxuLmNvbC14cy1vZmZzZXQtNyB7XG4gIG1hcmdpbi1sZWZ0OiA1OC4zMzMzMzMzMzMzJTsgfVxuXG4uY29sLXhzLW9mZnNldC04IHtcbiAgbWFyZ2luLWxlZnQ6IDY2LjY2NjY2NjY2NjclOyB9XG5cbi5jb2wteHMtb2Zmc2V0LTkge1xuICBtYXJnaW4tbGVmdDogNzUlOyB9XG5cbi5jb2wteHMtb2Zmc2V0LTEwIHtcbiAgbWFyZ2luLWxlZnQ6IDgzLjMzMzMzMzMzMzMlOyB9XG5cbi5jb2wteHMtb2Zmc2V0LTExIHtcbiAgbWFyZ2luLWxlZnQ6IDkxLjY2NjY2NjY2NjclOyB9XG5cbi5jb2wteHMtb2Zmc2V0LTEyIHtcbiAgbWFyZ2luLWxlZnQ6IDEwMCU7IH1cblxuQG1lZGlhIChtaW4td2lkdGg6IDc2OHB4KSB7XG4gIC5jb2wtc20tMSwgLmNvbC1zbS0yLCAuY29sLXNtLTMsIC5jb2wtc20tNCwgLmNvbC1zbS01LCAuY29sLXNtLTYsIC5jb2wtc20tNywgLmNvbC1zbS04LCAuY29sLXNtLTksIC5jb2wtc20tMTAsIC5jb2wtc20tMTEsIC5jb2wtc20tMTIge1xuICAgIGZsb2F0OiBsZWZ0OyB9XG4gIC5jb2wtc20tMSB7XG4gICAgd2lkdGg6IDguMzMzMzMzMzMzMyU7IH1cbiAgLmNvbC1zbS0yIHtcbiAgICB3aWR0aDogMTYuNjY2NjY2NjY2NyU7IH1cbiAgLmNvbC1zbS0zIHtcbiAgICB3aWR0aDogMjUlOyB9XG4gIC5jb2wtc20tNCB7XG4gICAgd2lkdGg6IDMzLjMzMzMzMzMzMzMlOyB9XG4gIC5jb2wtc20tNSB7XG4gICAgd2lkdGg6IDQxLjY2NjY2NjY2NjclOyB9XG4gIC5jb2wtc20tNiB7XG4gICAgd2lkdGg6IDUwJTsgfVxuICAuY29sLXNtLTcge1xuICAgIHdpZHRoOiA1OC4zMzMzMzMzMzMzJTsgfVxuICAuY29sLXNtLTgge1xuICAgIHdpZHRoOiA2Ni42NjY2NjY2NjY3JTsgfVxuICAuY29sLXNtLTkge1xuICAgIHdpZHRoOiA3NSU7IH1cbiAgLmNvbC1zbS0xMCB7XG4gICAgd2lkdGg6IDgzLjMzMzMzMzMzMzMlOyB9XG4gIC5jb2wtc20tMTEge1xuICAgIHdpZHRoOiA5MS42NjY2NjY2NjY3JTsgfVxuICAuY29sLXNtLTEyIHtcbiAgICB3aWR0aDogMTAwJTsgfVxuICAuY29sLXNtLXB1bGwtMCB7XG4gICAgcmlnaHQ6IGF1dG87IH1cbiAgLmNvbC1zbS1wdWxsLTEge1xuICAgIHJpZ2h0OiA4LjMzMzMzMzMzMzMlOyB9XG4gIC5jb2wtc20tcHVsbC0yIHtcbiAgICByaWdodDogMTYuNjY2NjY2NjY2NyU7IH1cbiAgLmNvbC1zbS1wdWxsLTMge1xuICAgIHJpZ2h0OiAyNSU7IH1cbiAgLmNvbC1zbS1wdWxsLTQge1xuICAgIHJpZ2h0OiAzMy4zMzMzMzMzMzMzJTsgfVxuICAuY29sLXNtLXB1bGwtNSB7XG4gICAgcmlnaHQ6IDQxLjY2NjY2NjY2NjclOyB9XG4gIC5jb2wtc20tcHVsbC02IHtcbiAgICByaWdodDogNTAlOyB9XG4gIC5jb2wtc20tcHVsbC03IHtcbiAgICByaWdodDogNTguMzMzMzMzMzMzMyU7IH1cbiAgLmNvbC1zbS1wdWxsLTgge1xuICAgIHJpZ2h0OiA2Ni42NjY2NjY2NjY3JTsgfVxuICAuY29sLXNtLXB1bGwtOSB7XG4gICAgcmlnaHQ6IDc1JTsgfVxuICAuY29sLXNtLXB1bGwtMTAge1xuICAgIHJpZ2h0OiA4My4zMzMzMzMzMzMzJTsgfVxuICAuY29sLXNtLXB1bGwtMTEge1xuICAgIHJpZ2h0OiA5MS42NjY2NjY2NjY3JTsgfVxuICAuY29sLXNtLXB1bGwtMTIge1xuICAgIHJpZ2h0OiAxMDAlOyB9XG4gIC5jb2wtc20tcHVzaC0wIHtcbiAgICBsZWZ0OiBhdXRvOyB9XG4gIC5jb2wtc20tcHVzaC0xIHtcbiAgICBsZWZ0OiA4LjMzMzMzMzMzMzMlOyB9XG4gIC5jb2wtc20tcHVzaC0yIHtcbiAgICBsZWZ0OiAxNi42NjY2NjY2NjY3JTsgfVxuICAuY29sLXNtLXB1c2gtMyB7XG4gICAgbGVmdDogMjUlOyB9XG4gIC5jb2wtc20tcHVzaC00IHtcbiAgICBsZWZ0OiAzMy4zMzMzMzMzMzMzJTsgfVxuICAuY29sLXNtLXB1c2gtNSB7XG4gICAgbGVmdDogNDEuNjY2NjY2NjY2NyU7IH1cbiAgLmNvbC1zbS1wdXNoLTYge1xuICAgIGxlZnQ6IDUwJTsgfVxuICAuY29sLXNtLXB1c2gtNyB7XG4gICAgbGVmdDogNTguMzMzMzMzMzMzMyU7IH1cbiAgLmNvbC1zbS1wdXNoLTgge1xuICAgIGxlZnQ6IDY2LjY2NjY2NjY2NjclOyB9XG4gIC5jb2wtc20tcHVzaC05IHtcbiAgICBsZWZ0OiA3NSU7IH1cbiAgLmNvbC1zbS1wdXNoLTEwIHtcbiAgICBsZWZ0OiA4My4zMzMzMzMzMzMzJTsgfVxuICAuY29sLXNtLXB1c2gtMTEge1xuICAgIGxlZnQ6IDkxLjY2NjY2NjY2NjclOyB9XG4gIC5jb2wtc20tcHVzaC0xMiB7XG4gICAgbGVmdDogMTAwJTsgfVxuICAuY29sLXNtLW9mZnNldC0wIHtcbiAgICBtYXJnaW4tbGVmdDogMCU7IH1cbiAgLmNvbC1zbS1vZmZzZXQtMSB7XG4gICAgbWFyZ2luLWxlZnQ6IDguMzMzMzMzMzMzMyU7IH1cbiAgLmNvbC1zbS1vZmZzZXQtMiB7XG4gICAgbWFyZ2luLWxlZnQ6IDE2LjY2NjY2NjY2NjclOyB9XG4gIC5jb2wtc20tb2Zmc2V0LTMge1xuICAgIG1hcmdpbi1sZWZ0OiAyNSU7IH1cbiAgLmNvbC1zbS1vZmZzZXQtNCB7XG4gICAgbWFyZ2luLWxlZnQ6IDMzLjMzMzMzMzMzMzMlOyB9XG4gIC5jb2wtc20tb2Zmc2V0LTUge1xuICAgIG1hcmdpbi1sZWZ0OiA0MS42NjY2NjY2NjY3JTsgfVxuICAuY29sLXNtLW9mZnNldC02IHtcbiAgICBtYXJnaW4tbGVmdDogNTAlOyB9XG4gIC5jb2wtc20tb2Zmc2V0LTcge1xuICAgIG1hcmdpbi1sZWZ0OiA1OC4zMzMzMzMzMzMzJTsgfVxuICAuY29sLXNtLW9mZnNldC04IHtcbiAgICBtYXJnaW4tbGVmdDogNjYuNjY2NjY2NjY2NyU7IH1cbiAgLmNvbC1zbS1vZmZzZXQtOSB7XG4gICAgbWFyZ2luLWxlZnQ6IDc1JTsgfVxuICAuY29sLXNtLW9mZnNldC0xMCB7XG4gICAgbWFyZ2luLWxlZnQ6IDgzLjMzMzMzMzMzMzMlOyB9XG4gIC5jb2wtc20tb2Zmc2V0LTExIHtcbiAgICBtYXJnaW4tbGVmdDogOTEuNjY2NjY2NjY2NyU7IH1cbiAgLmNvbC1zbS1vZmZzZXQtMTIge1xuICAgIG1hcmdpbi1sZWZ0OiAxMDAlOyB9IH1cblxuQG1lZGlhIChtaW4td2lkdGg6IDk5MnB4KSB7XG4gIC5jb2wtbWQtMSwgLmNvbC1tZC0yLCAuY29sLW1kLTMsIC5jb2wtbWQtNCwgLmNvbC1tZC01LCAuY29sLW1kLTYsIC5jb2wtbWQtNywgLmNvbC1tZC04LCAuY29sLW1kLTksIC5jb2wtbWQtMTAsIC5jb2wtbWQtMTEsIC5jb2wtbWQtMTIge1xuICAgIGZsb2F0OiBsZWZ0OyB9XG4gIC5jb2wtbWQtMSB7XG4gICAgd2lkdGg6IDguMzMzMzMzMzMzMyU7IH1cbiAgLmNvbC1tZC0yIHtcbiAgICB3aWR0aDogMTYuNjY2NjY2NjY2NyU7IH1cbiAgLmNvbC1tZC0zIHtcbiAgICB3aWR0aDogMjUlOyB9XG4gIC5jb2wtbWQtNCB7XG4gICAgd2lkdGg6IDMzLjMzMzMzMzMzMzMlOyB9XG4gIC5jb2wtbWQtNSB7XG4gICAgd2lkdGg6IDQxLjY2NjY2NjY2NjclOyB9XG4gIC5jb2wtbWQtNiB7XG4gICAgd2lkdGg6IDUwJTsgfVxuICAuY29sLW1kLTcge1xuICAgIHdpZHRoOiA1OC4zMzMzMzMzMzMzJTsgfVxuICAuY29sLW1kLTgge1xuICAgIHdpZHRoOiA2Ni42NjY2NjY2NjY3JTsgfVxuICAuY29sLW1kLTkge1xuICAgIHdpZHRoOiA3NSU7IH1cbiAgLmNvbC1tZC0xMCB7XG4gICAgd2lkdGg6IDgzLjMzMzMzMzMzMzMlOyB9XG4gIC5jb2wtbWQtMTEge1xuICAgIHdpZHRoOiA5MS42NjY2NjY2NjY3JTsgfVxuICAuY29sLW1kLTEyIHtcbiAgICB3aWR0aDogMTAwJTsgfVxuICAuY29sLW1kLXB1bGwtMCB7XG4gICAgcmlnaHQ6IGF1dG87IH1cbiAgLmNvbC1tZC1wdWxsLTEge1xuICAgIHJpZ2h0OiA4LjMzMzMzMzMzMzMlOyB9XG4gIC5jb2wtbWQtcHVsbC0yIHtcbiAgICByaWdodDogMTYuNjY2NjY2NjY2NyU7IH1cbiAgLmNvbC1tZC1wdWxsLTMge1xuICAgIHJpZ2h0OiAyNSU7IH1cbiAgLmNvbC1tZC1wdWxsLTQge1xuICAgIHJpZ2h0OiAzMy4zMzMzMzMzMzMzJTsgfVxuICAuY29sLW1kLXB1bGwtNSB7XG4gICAgcmlnaHQ6IDQxLjY2NjY2NjY2NjclOyB9XG4gIC5jb2wtbWQtcHVsbC02IHtcbiAgICByaWdodDogNTAlOyB9XG4gIC5jb2wtbWQtcHVsbC03IHtcbiAgICByaWdodDogNTguMzMzMzMzMzMzMyU7IH1cbiAgLmNvbC1tZC1wdWxsLTgge1xuICAgIHJpZ2h0OiA2Ni42NjY2NjY2NjY3JTsgfVxuICAuY29sLW1kLXB1bGwtOSB7XG4gICAgcmlnaHQ6IDc1JTsgfVxuICAuY29sLW1kLXB1bGwtMTAge1xuICAgIHJpZ2h0OiA4My4zMzMzMzMzMzMzJTsgfVxuICAuY29sLW1kLXB1bGwtMTEge1xuICAgIHJpZ2h0OiA5MS42NjY2NjY2NjY3JTsgfVxuICAuY29sLW1kLXB1bGwtMTIge1xuICAgIHJpZ2h0OiAxMDAlOyB9XG4gIC5jb2wtbWQtcHVzaC0wIHtcbiAgICBsZWZ0OiBhdXRvOyB9XG4gIC5jb2wtbWQtcHVzaC0xIHtcbiAgICBsZWZ0OiA4LjMzMzMzMzMzMzMlOyB9XG4gIC5jb2wtbWQtcHVzaC0yIHtcbiAgICBsZWZ0OiAxNi42NjY2NjY2NjY3JTsgfVxuICAuY29sLW1kLXB1c2gtMyB7XG4gICAgbGVmdDogMjUlOyB9XG4gIC5jb2wtbWQtcHVzaC00IHtcbiAgICBsZWZ0OiAzMy4zMzMzMzMzMzMzJTsgfVxuICAuY29sLW1kLXB1c2gtNSB7XG4gICAgbGVmdDogNDEuNjY2NjY2NjY2NyU7IH1cbiAgLmNvbC1tZC1wdXNoLTYge1xuICAgIGxlZnQ6IDUwJTsgfVxuICAuY29sLW1kLXB1c2gtNyB7XG4gICAgbGVmdDogNTguMzMzMzMzMzMzMyU7IH1cbiAgLmNvbC1tZC1wdXNoLTgge1xuICAgIGxlZnQ6IDY2LjY2NjY2NjY2NjclOyB9XG4gIC5jb2wtbWQtcHVzaC05IHtcbiAgICBsZWZ0OiA3NSU7IH1cbiAgLmNvbC1tZC1wdXNoLTEwIHtcbiAgICBsZWZ0OiA4My4zMzMzMzMzMzMzJTsgfVxuICAuY29sLW1kLXB1c2gtMTEge1xuICAgIGxlZnQ6IDkxLjY2NjY2NjY2NjclOyB9XG4gIC5jb2wtbWQtcHVzaC0xMiB7XG4gICAgbGVmdDogMTAwJTsgfVxuICAuY29sLW1kLW9mZnNldC0wIHtcbiAgICBtYXJnaW4tbGVmdDogMCU7IH1cbiAgLmNvbC1tZC1vZmZzZXQtMSB7XG4gICAgbWFyZ2luLWxlZnQ6IDguMzMzMzMzMzMzMyU7IH1cbiAgLmNvbC1tZC1vZmZzZXQtMiB7XG4gICAgbWFyZ2luLWxlZnQ6IDE2LjY2NjY2NjY2NjclOyB9XG4gIC5jb2wtbWQtb2Zmc2V0LTMge1xuICAgIG1hcmdpbi1sZWZ0OiAyNSU7IH1cbiAgLmNvbC1tZC1vZmZzZXQtNCB7XG4gICAgbWFyZ2luLWxlZnQ6IDMzLjMzMzMzMzMzMzMlOyB9XG4gIC5jb2wtbWQtb2Zmc2V0LTUge1xuICAgIG1hcmdpbi1sZWZ0OiA0MS42NjY2NjY2NjY3JTsgfVxuICAuY29sLW1kLW9mZnNldC02IHtcbiAgICBtYXJnaW4tbGVmdDogNTAlOyB9XG4gIC5jb2wtbWQtb2Zmc2V0LTcge1xuICAgIG1hcmdpbi1sZWZ0OiA1OC4zMzMzMzMzMzMzJTsgfVxuICAuY29sLW1kLW9mZnNldC04IHtcbiAgICBtYXJnaW4tbGVmdDogNjYuNjY2NjY2NjY2NyU7IH1cbiAgLmNvbC1tZC1vZmZzZXQtOSB7XG4gICAgbWFyZ2luLWxlZnQ6IDc1JTsgfVxuICAuY29sLW1kLW9mZnNldC0xMCB7XG4gICAgbWFyZ2luLWxlZnQ6IDgzLjMzMzMzMzMzMzMlOyB9XG4gIC5jb2wtbWQtb2Zmc2V0LTExIHtcbiAgICBtYXJnaW4tbGVmdDogOTEuNjY2NjY2NjY2NyU7IH1cbiAgLmNvbC1tZC1vZmZzZXQtMTIge1xuICAgIG1hcmdpbi1sZWZ0OiAxMDAlOyB9IH1cblxuQG1lZGlhIChtaW4td2lkdGg6IDEyMjBweCkge1xuICAuY29sLWxnLTEsIC5jb2wtbGctMiwgLmNvbC1sZy0zLCAuY29sLWxnLTQsIC5jb2wtbGctNSwgLmNvbC1sZy02LCAuY29sLWxnLTcsIC5jb2wtbGctOCwgLmNvbC1sZy05LCAuY29sLWxnLTEwLCAuY29sLWxnLTExLCAuY29sLWxnLTEyIHtcbiAgICBmbG9hdDogbGVmdDsgfVxuICAuY29sLWxnLTEge1xuICAgIHdpZHRoOiA4LjMzMzMzMzMzMzMlOyB9XG4gIC5jb2wtbGctMiB7XG4gICAgd2lkdGg6IDE2LjY2NjY2NjY2NjclOyB9XG4gIC5jb2wtbGctMyB7XG4gICAgd2lkdGg6IDI1JTsgfVxuICAuY29sLWxnLTQge1xuICAgIHdpZHRoOiAzMy4zMzMzMzMzMzMzJTsgfVxuICAuY29sLWxnLTUge1xuICAgIHdpZHRoOiA0MS42NjY2NjY2NjY3JTsgfVxuICAuY29sLWxnLTYge1xuICAgIHdpZHRoOiA1MCU7IH1cbiAgLmNvbC1sZy03IHtcbiAgICB3aWR0aDogNTguMzMzMzMzMzMzMyU7IH1cbiAgLmNvbC1sZy04IHtcbiAgICB3aWR0aDogNjYuNjY2NjY2NjY2NyU7IH1cbiAgLmNvbC1sZy05IHtcbiAgICB3aWR0aDogNzUlOyB9XG4gIC5jb2wtbGctMTAge1xuICAgIHdpZHRoOiA4My4zMzMzMzMzMzMzJTsgfVxuICAuY29sLWxnLTExIHtcbiAgICB3aWR0aDogOTEuNjY2NjY2NjY2NyU7IH1cbiAgLmNvbC1sZy0xMiB7XG4gICAgd2lkdGg6IDEwMCU7IH1cbiAgLmNvbC1sZy1wdWxsLTAge1xuICAgIHJpZ2h0OiBhdXRvOyB9XG4gIC5jb2wtbGctcHVsbC0xIHtcbiAgICByaWdodDogOC4zMzMzMzMzMzMzJTsgfVxuICAuY29sLWxnLXB1bGwtMiB7XG4gICAgcmlnaHQ6IDE2LjY2NjY2NjY2NjclOyB9XG4gIC5jb2wtbGctcHVsbC0zIHtcbiAgICByaWdodDogMjUlOyB9XG4gIC5jb2wtbGctcHVsbC00IHtcbiAgICByaWdodDogMzMuMzMzMzMzMzMzMyU7IH1cbiAgLmNvbC1sZy1wdWxsLTUge1xuICAgIHJpZ2h0OiA0MS42NjY2NjY2NjY3JTsgfVxuICAuY29sLWxnLXB1bGwtNiB7XG4gICAgcmlnaHQ6IDUwJTsgfVxuICAuY29sLWxnLXB1bGwtNyB7XG4gICAgcmlnaHQ6IDU4LjMzMzMzMzMzMzMlOyB9XG4gIC5jb2wtbGctcHVsbC04IHtcbiAgICByaWdodDogNjYuNjY2NjY2NjY2NyU7IH1cbiAgLmNvbC1sZy1wdWxsLTkge1xuICAgIHJpZ2h0OiA3NSU7IH1cbiAgLmNvbC1sZy1wdWxsLTEwIHtcbiAgICByaWdodDogODMuMzMzMzMzMzMzMyU7IH1cbiAgLmNvbC1sZy1wdWxsLTExIHtcbiAgICByaWdodDogOTEuNjY2NjY2NjY2NyU7IH1cbiAgLmNvbC1sZy1wdWxsLTEyIHtcbiAgICByaWdodDogMTAwJTsgfVxuICAuY29sLWxnLXB1c2gtMCB7XG4gICAgbGVmdDogYXV0bzsgfVxuICAuY29sLWxnLXB1c2gtMSB7XG4gICAgbGVmdDogOC4zMzMzMzMzMzMzJTsgfVxuICAuY29sLWxnLXB1c2gtMiB7XG4gICAgbGVmdDogMTYuNjY2NjY2NjY2NyU7IH1cbiAgLmNvbC1sZy1wdXNoLTMge1xuICAgIGxlZnQ6IDI1JTsgfVxuICAuY29sLWxnLXB1c2gtNCB7XG4gICAgbGVmdDogMzMuMzMzMzMzMzMzMyU7IH1cbiAgLmNvbC1sZy1wdXNoLTUge1xuICAgIGxlZnQ6IDQxLjY2NjY2NjY2NjclOyB9XG4gIC5jb2wtbGctcHVzaC02IHtcbiAgICBsZWZ0OiA1MCU7IH1cbiAgLmNvbC1sZy1wdXNoLTcge1xuICAgIGxlZnQ6IDU4LjMzMzMzMzMzMzMlOyB9XG4gIC5jb2wtbGctcHVzaC04IHtcbiAgICBsZWZ0OiA2Ni42NjY2NjY2NjY3JTsgfVxuICAuY29sLWxnLXB1c2gtOSB7XG4gICAgbGVmdDogNzUlOyB9XG4gIC5jb2wtbGctcHVzaC0xMCB7XG4gICAgbGVmdDogODMuMzMzMzMzMzMzMyU7IH1cbiAgLmNvbC1sZy1wdXNoLTExIHtcbiAgICBsZWZ0OiA5MS42NjY2NjY2NjY3JTsgfVxuICAuY29sLWxnLXB1c2gtMTIge1xuICAgIGxlZnQ6IDEwMCU7IH1cbiAgLmNvbC1sZy1vZmZzZXQtMCB7XG4gICAgbWFyZ2luLWxlZnQ6IDAlOyB9XG4gIC5jb2wtbGctb2Zmc2V0LTEge1xuICAgIG1hcmdpbi1sZWZ0OiA4LjMzMzMzMzMzMzMlOyB9XG4gIC5jb2wtbGctb2Zmc2V0LTIge1xuICAgIG1hcmdpbi1sZWZ0OiAxNi42NjY2NjY2NjY3JTsgfVxuICAuY29sLWxnLW9mZnNldC0zIHtcbiAgICBtYXJnaW4tbGVmdDogMjUlOyB9XG4gIC5jb2wtbGctb2Zmc2V0LTQge1xuICAgIG1hcmdpbi1sZWZ0OiAzMy4zMzMzMzMzMzMzJTsgfVxuICAuY29sLWxnLW9mZnNldC01IHtcbiAgICBtYXJnaW4tbGVmdDogNDEuNjY2NjY2NjY2NyU7IH1cbiAgLmNvbC1sZy1vZmZzZXQtNiB7XG4gICAgbWFyZ2luLWxlZnQ6IDUwJTsgfVxuICAuY29sLWxnLW9mZnNldC03IHtcbiAgICBtYXJnaW4tbGVmdDogNTguMzMzMzMzMzMzMyU7IH1cbiAgLmNvbC1sZy1vZmZzZXQtOCB7XG4gICAgbWFyZ2luLWxlZnQ6IDY2LjY2NjY2NjY2NjclOyB9XG4gIC5jb2wtbGctb2Zmc2V0LTkge1xuICAgIG1hcmdpbi1sZWZ0OiA3NSU7IH1cbiAgLmNvbC1sZy1vZmZzZXQtMTAge1xuICAgIG1hcmdpbi1sZWZ0OiA4My4zMzMzMzMzMzMzJTsgfVxuICAuY29sLWxnLW9mZnNldC0xMSB7XG4gICAgbWFyZ2luLWxlZnQ6IDkxLjY2NjY2NjY2NjclOyB9XG4gIC5jb2wtbGctb2Zmc2V0LTEyIHtcbiAgICBtYXJnaW4tbGVmdDogMTAwJTsgfSB9XG5cbnRhYmxlIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7IH1cblxuY2FwdGlvbiB7XG4gIHBhZGRpbmctdG9wOiA4cHg7XG4gIHBhZGRpbmctYm90dG9tOiA4cHg7XG4gIGNvbG9yOiAjNzc3Nzc3O1xuICB0ZXh0LWFsaWduOiBsZWZ0OyB9XG5cbnRoIHtcbiAgdGV4dC1hbGlnbjogbGVmdDsgfVxuXG50YWJsZSwgLnRhYmxlIHtcbiAgd2lkdGg6IDEwMCU7XG4gIG1heC13aWR0aDogMTAwJTtcbiAgbWFyZ2luLWJvdHRvbTogMjBweDsgfVxuICB0YWJsZSA+IHRoZWFkID4gdHIgPiB0aCxcbiAgdGFibGUgPiB0aGVhZCA+IHRyID4gdGQsXG4gIHRhYmxlID4gdGJvZHkgPiB0ciA+IHRoLFxuICB0YWJsZSA+IHRib2R5ID4gdHIgPiB0ZCxcbiAgdGFibGUgPiB0Zm9vdCA+IHRyID4gdGgsXG4gIHRhYmxlID4gdGZvb3QgPiB0ciA+IHRkLCAudGFibGUgPiB0aGVhZCA+IHRyID4gdGgsXG4gIC50YWJsZSA+IHRoZWFkID4gdHIgPiB0ZCxcbiAgLnRhYmxlID4gdGJvZHkgPiB0ciA+IHRoLFxuICAudGFibGUgPiB0Ym9keSA+IHRyID4gdGQsXG4gIC50YWJsZSA+IHRmb290ID4gdHIgPiB0aCxcbiAgLnRhYmxlID4gdGZvb3QgPiB0ciA+IHRkIHtcbiAgICBwYWRkaW5nOiA4cHg7XG4gICAgbGluZS1oZWlnaHQ6IDEuNDI4NTcxNDI5O1xuICAgIHZlcnRpY2FsLWFsaWduOiB0b3A7XG4gICAgYm9yZGVyLXRvcDogMXB4IHNvbGlkICNkZGQ7IH1cbiAgdGFibGUgPiB0aGVhZCA+IHRyID4gdGgsIC50YWJsZSA+IHRoZWFkID4gdHIgPiB0aCB7XG4gICAgdmVydGljYWwtYWxpZ246IGJvdHRvbTtcbiAgICBib3JkZXItYm90dG9tOiAycHggc29saWQgI2RkZDsgfVxuICB0YWJsZSA+IGNhcHRpb24gKyB0aGVhZCA+IHRyOmZpcnN0LWNoaWxkID4gdGgsXG4gIHRhYmxlID4gY2FwdGlvbiArIHRoZWFkID4gdHI6Zmlyc3QtY2hpbGQgPiB0ZCxcbiAgdGFibGUgPiBjb2xncm91cCArIHRoZWFkID4gdHI6Zmlyc3QtY2hpbGQgPiB0aCxcbiAgdGFibGUgPiBjb2xncm91cCArIHRoZWFkID4gdHI6Zmlyc3QtY2hpbGQgPiB0ZCxcbiAgdGFibGUgPiB0aGVhZDpmaXJzdC1jaGlsZCA+IHRyOmZpcnN0LWNoaWxkID4gdGgsXG4gIHRhYmxlID4gdGhlYWQ6Zmlyc3QtY2hpbGQgPiB0cjpmaXJzdC1jaGlsZCA+IHRkLCAudGFibGUgPiBjYXB0aW9uICsgdGhlYWQgPiB0cjpmaXJzdC1jaGlsZCA+IHRoLFxuICAudGFibGUgPiBjYXB0aW9uICsgdGhlYWQgPiB0cjpmaXJzdC1jaGlsZCA+IHRkLFxuICAudGFibGUgPiBjb2xncm91cCArIHRoZWFkID4gdHI6Zmlyc3QtY2hpbGQgPiB0aCxcbiAgLnRhYmxlID4gY29sZ3JvdXAgKyB0aGVhZCA+IHRyOmZpcnN0LWNoaWxkID4gdGQsXG4gIC50YWJsZSA+IHRoZWFkOmZpcnN0LWNoaWxkID4gdHI6Zmlyc3QtY2hpbGQgPiB0aCxcbiAgLnRhYmxlID4gdGhlYWQ6Zmlyc3QtY2hpbGQgPiB0cjpmaXJzdC1jaGlsZCA+IHRkIHtcbiAgICBib3JkZXItdG9wOiAwOyB9XG4gIHRhYmxlID4gdGJvZHkgKyB0Ym9keSwgLnRhYmxlID4gdGJvZHkgKyB0Ym9keSB7XG4gICAgYm9yZGVyLXRvcDogMnB4IHNvbGlkICNkZGQ7IH1cbiAgdGFibGUgLnRhYmxlLCAudGFibGUgLnRhYmxlIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmOyB9XG5cbi50YWJsZS1jb25kZW5zZWQgPiB0aGVhZCA+IHRyID4gdGgsXG4udGFibGUtY29uZGVuc2VkID4gdGhlYWQgPiB0ciA+IHRkLFxuLnRhYmxlLWNvbmRlbnNlZCA+IHRib2R5ID4gdHIgPiB0aCxcbi50YWJsZS1jb25kZW5zZWQgPiB0Ym9keSA+IHRyID4gdGQsXG4udGFibGUtY29uZGVuc2VkID4gdGZvb3QgPiB0ciA+IHRoLFxuLnRhYmxlLWNvbmRlbnNlZCA+IHRmb290ID4gdHIgPiB0ZCB7XG4gIHBhZGRpbmc6IDVweDsgfVxuXG4udGFibGUtYm9yZGVyZWQge1xuICBib3JkZXI6IDFweCBzb2xpZCAjZGRkOyB9XG4gIC50YWJsZS1ib3JkZXJlZCA+IHRoZWFkID4gdHIgPiB0aCxcbiAgLnRhYmxlLWJvcmRlcmVkID4gdGhlYWQgPiB0ciA+IHRkLFxuICAudGFibGUtYm9yZGVyZWQgPiB0Ym9keSA+IHRyID4gdGgsXG4gIC50YWJsZS1ib3JkZXJlZCA+IHRib2R5ID4gdHIgPiB0ZCxcbiAgLnRhYmxlLWJvcmRlcmVkID4gdGZvb3QgPiB0ciA+IHRoLFxuICAudGFibGUtYm9yZGVyZWQgPiB0Zm9vdCA+IHRyID4gdGQge1xuICAgIGJvcmRlcjogMXB4IHNvbGlkICNkZGQ7IH1cbiAgLnRhYmxlLWJvcmRlcmVkID4gdGhlYWQgPiB0ciA+IHRoLFxuICAudGFibGUtYm9yZGVyZWQgPiB0aGVhZCA+IHRyID4gdGQge1xuICAgIGJvcmRlci1ib3R0b20td2lkdGg6IDJweDsgfVxuXG4udGFibGUtc3RyaXBlZCA+IHRib2R5ID4gdHI6bnRoLW9mLXR5cGUob2RkKSB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmOWY5Zjk7IH1cblxuLnRhYmxlLWhvdmVyID4gdGJvZHkgPiB0cjpob3ZlciB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmNWY1ZjU7IH1cblxudGFibGUgY29sW2NsYXNzKj1cImNvbC1cIl0ge1xuICBwb3NpdGlvbjogc3RhdGljO1xuICBmbG9hdDogbm9uZTtcbiAgZGlzcGxheTogdGFibGUtY29sdW1uOyB9XG5cbnRhYmxlIHRkW2NsYXNzKj1cImNvbC1cIl0sXG50YWJsZSB0aFtjbGFzcyo9XCJjb2wtXCJdIHtcbiAgcG9zaXRpb246IHN0YXRpYztcbiAgZmxvYXQ6IG5vbmU7XG4gIGRpc3BsYXk6IHRhYmxlLWNlbGw7IH1cblxuLnRhYmxlID4gdGhlYWQgPiB0ciA+IHRkLmFjdGl2ZSxcbi50YWJsZSA+IHRoZWFkID4gdHIgPiB0aC5hY3RpdmUsXG4udGFibGUgPiB0aGVhZCA+IHRyLmFjdGl2ZSA+IHRkLFxuLnRhYmxlID4gdGhlYWQgPiB0ci5hY3RpdmUgPiB0aCxcbi50YWJsZSA+IHRib2R5ID4gdHIgPiB0ZC5hY3RpdmUsXG4udGFibGUgPiB0Ym9keSA+IHRyID4gdGguYWN0aXZlLFxuLnRhYmxlID4gdGJvZHkgPiB0ci5hY3RpdmUgPiB0ZCxcbi50YWJsZSA+IHRib2R5ID4gdHIuYWN0aXZlID4gdGgsXG4udGFibGUgPiB0Zm9vdCA+IHRyID4gdGQuYWN0aXZlLFxuLnRhYmxlID4gdGZvb3QgPiB0ciA+IHRoLmFjdGl2ZSxcbi50YWJsZSA+IHRmb290ID4gdHIuYWN0aXZlID4gdGQsXG4udGFibGUgPiB0Zm9vdCA+IHRyLmFjdGl2ZSA+IHRoIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2Y1ZjVmNTsgfVxuXG4udGFibGUtaG92ZXIgPiB0Ym9keSA+IHRyID4gdGQuYWN0aXZlOmhvdmVyLFxuLnRhYmxlLWhvdmVyID4gdGJvZHkgPiB0ciA+IHRoLmFjdGl2ZTpob3Zlcixcbi50YWJsZS1ob3ZlciA+IHRib2R5ID4gdHIuYWN0aXZlOmhvdmVyID4gdGQsXG4udGFibGUtaG92ZXIgPiB0Ym9keSA+IHRyOmhvdmVyID4gLmFjdGl2ZSxcbi50YWJsZS1ob3ZlciA+IHRib2R5ID4gdHIuYWN0aXZlOmhvdmVyID4gdGgge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZThlOGU4OyB9XG5cbi50YWJsZSA+IHRoZWFkID4gdHIgPiB0ZC5zdWNjZXNzLFxuLnRhYmxlID4gdGhlYWQgPiB0ciA+IHRoLnN1Y2Nlc3MsXG4udGFibGUgPiB0aGVhZCA+IHRyLnN1Y2Nlc3MgPiB0ZCxcbi50YWJsZSA+IHRoZWFkID4gdHIuc3VjY2VzcyA+IHRoLFxuLnRhYmxlID4gdGJvZHkgPiB0ciA+IHRkLnN1Y2Nlc3MsXG4udGFibGUgPiB0Ym9keSA+IHRyID4gdGguc3VjY2Vzcyxcbi50YWJsZSA+IHRib2R5ID4gdHIuc3VjY2VzcyA+IHRkLFxuLnRhYmxlID4gdGJvZHkgPiB0ci5zdWNjZXNzID4gdGgsXG4udGFibGUgPiB0Zm9vdCA+IHRyID4gdGQuc3VjY2Vzcyxcbi50YWJsZSA+IHRmb290ID4gdHIgPiB0aC5zdWNjZXNzLFxuLnRhYmxlID4gdGZvb3QgPiB0ci5zdWNjZXNzID4gdGQsXG4udGFibGUgPiB0Zm9vdCA+IHRyLnN1Y2Nlc3MgPiB0aCB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNkZmYwZDg7IH1cblxuLnRhYmxlLWhvdmVyID4gdGJvZHkgPiB0ciA+IHRkLnN1Y2Nlc3M6aG92ZXIsXG4udGFibGUtaG92ZXIgPiB0Ym9keSA+IHRyID4gdGguc3VjY2Vzczpob3Zlcixcbi50YWJsZS1ob3ZlciA+IHRib2R5ID4gdHIuc3VjY2Vzczpob3ZlciA+IHRkLFxuLnRhYmxlLWhvdmVyID4gdGJvZHkgPiB0cjpob3ZlciA+IC5zdWNjZXNzLFxuLnRhYmxlLWhvdmVyID4gdGJvZHkgPiB0ci5zdWNjZXNzOmhvdmVyID4gdGgge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZDBlOWM2OyB9XG5cbi50YWJsZSA+IHRoZWFkID4gdHIgPiB0ZC5pbmZvLFxuLnRhYmxlID4gdGhlYWQgPiB0ciA+IHRoLmluZm8sXG4udGFibGUgPiB0aGVhZCA+IHRyLmluZm8gPiB0ZCxcbi50YWJsZSA+IHRoZWFkID4gdHIuaW5mbyA+IHRoLFxuLnRhYmxlID4gdGJvZHkgPiB0ciA+IHRkLmluZm8sXG4udGFibGUgPiB0Ym9keSA+IHRyID4gdGguaW5mbyxcbi50YWJsZSA+IHRib2R5ID4gdHIuaW5mbyA+IHRkLFxuLnRhYmxlID4gdGJvZHkgPiB0ci5pbmZvID4gdGgsXG4udGFibGUgPiB0Zm9vdCA+IHRyID4gdGQuaW5mbyxcbi50YWJsZSA+IHRmb290ID4gdHIgPiB0aC5pbmZvLFxuLnRhYmxlID4gdGZvb3QgPiB0ci5pbmZvID4gdGQsXG4udGFibGUgPiB0Zm9vdCA+IHRyLmluZm8gPiB0aCB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNkOWVkZjc7IH1cblxuLnRhYmxlLWhvdmVyID4gdGJvZHkgPiB0ciA+IHRkLmluZm86aG92ZXIsXG4udGFibGUtaG92ZXIgPiB0Ym9keSA+IHRyID4gdGguaW5mbzpob3Zlcixcbi50YWJsZS1ob3ZlciA+IHRib2R5ID4gdHIuaW5mbzpob3ZlciA+IHRkLFxuLnRhYmxlLWhvdmVyID4gdGJvZHkgPiB0cjpob3ZlciA+IC5pbmZvLFxuLnRhYmxlLWhvdmVyID4gdGJvZHkgPiB0ci5pbmZvOmhvdmVyID4gdGgge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjYzRlM2YzOyB9XG5cbi50YWJsZSA+IHRoZWFkID4gdHIgPiB0ZC53YXJuaW5nLFxuLnRhYmxlID4gdGhlYWQgPiB0ciA+IHRoLndhcm5pbmcsXG4udGFibGUgPiB0aGVhZCA+IHRyLndhcm5pbmcgPiB0ZCxcbi50YWJsZSA+IHRoZWFkID4gdHIud2FybmluZyA+IHRoLFxuLnRhYmxlID4gdGJvZHkgPiB0ciA+IHRkLndhcm5pbmcsXG4udGFibGUgPiB0Ym9keSA+IHRyID4gdGgud2FybmluZyxcbi50YWJsZSA+IHRib2R5ID4gdHIud2FybmluZyA+IHRkLFxuLnRhYmxlID4gdGJvZHkgPiB0ci53YXJuaW5nID4gdGgsXG4udGFibGUgPiB0Zm9vdCA+IHRyID4gdGQud2FybmluZyxcbi50YWJsZSA+IHRmb290ID4gdHIgPiB0aC53YXJuaW5nLFxuLnRhYmxlID4gdGZvb3QgPiB0ci53YXJuaW5nID4gdGQsXG4udGFibGUgPiB0Zm9vdCA+IHRyLndhcm5pbmcgPiB0aCB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmY2Y4ZTM7IH1cblxuLnRhYmxlLWhvdmVyID4gdGJvZHkgPiB0ciA+IHRkLndhcm5pbmc6aG92ZXIsXG4udGFibGUtaG92ZXIgPiB0Ym9keSA+IHRyID4gdGgud2FybmluZzpob3Zlcixcbi50YWJsZS1ob3ZlciA+IHRib2R5ID4gdHIud2FybmluZzpob3ZlciA+IHRkLFxuLnRhYmxlLWhvdmVyID4gdGJvZHkgPiB0cjpob3ZlciA+IC53YXJuaW5nLFxuLnRhYmxlLWhvdmVyID4gdGJvZHkgPiB0ci53YXJuaW5nOmhvdmVyID4gdGgge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmFmMmNjOyB9XG5cbi50YWJsZSA+IHRoZWFkID4gdHIgPiB0ZC5kYW5nZXIsXG4udGFibGUgPiB0aGVhZCA+IHRyID4gdGguZGFuZ2VyLFxuLnRhYmxlID4gdGhlYWQgPiB0ci5kYW5nZXIgPiB0ZCxcbi50YWJsZSA+IHRoZWFkID4gdHIuZGFuZ2VyID4gdGgsXG4udGFibGUgPiB0Ym9keSA+IHRyID4gdGQuZGFuZ2VyLFxuLnRhYmxlID4gdGJvZHkgPiB0ciA+IHRoLmRhbmdlcixcbi50YWJsZSA+IHRib2R5ID4gdHIuZGFuZ2VyID4gdGQsXG4udGFibGUgPiB0Ym9keSA+IHRyLmRhbmdlciA+IHRoLFxuLnRhYmxlID4gdGZvb3QgPiB0ciA+IHRkLmRhbmdlcixcbi50YWJsZSA+IHRmb290ID4gdHIgPiB0aC5kYW5nZXIsXG4udGFibGUgPiB0Zm9vdCA+IHRyLmRhbmdlciA+IHRkLFxuLnRhYmxlID4gdGZvb3QgPiB0ci5kYW5nZXIgPiB0aCB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmMmRlZGU7IH1cblxuLnRhYmxlLWhvdmVyID4gdGJvZHkgPiB0ciA+IHRkLmRhbmdlcjpob3Zlcixcbi50YWJsZS1ob3ZlciA+IHRib2R5ID4gdHIgPiB0aC5kYW5nZXI6aG92ZXIsXG4udGFibGUtaG92ZXIgPiB0Ym9keSA+IHRyLmRhbmdlcjpob3ZlciA+IHRkLFxuLnRhYmxlLWhvdmVyID4gdGJvZHkgPiB0cjpob3ZlciA+IC5kYW5nZXIsXG4udGFibGUtaG92ZXIgPiB0Ym9keSA+IHRyLmRhbmdlcjpob3ZlciA+IHRoIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ViY2NjYzsgfVxuXG4udGFibGUtcmVzcG9uc2l2ZSB7XG4gIG92ZXJmbG93LXg6IGF1dG87XG4gIG1pbi1oZWlnaHQ6IDAuMDElOyB9XG4gIEBtZWRpYSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6IDc2N3B4KSB7XG4gICAgLnRhYmxlLXJlc3BvbnNpdmUge1xuICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICBtYXJnaW4tYm90dG9tOiAxNXB4O1xuICAgICAgb3ZlcmZsb3cteTogaGlkZGVuO1xuICAgICAgLW1zLW92ZXJmbG93LXN0eWxlOiAtbXMtYXV0b2hpZGluZy1zY3JvbGxiYXI7XG4gICAgICBib3JkZXI6IDFweCBzb2xpZCAjZGRkOyB9XG4gICAgICAudGFibGUtcmVzcG9uc2l2ZSA+IC50YWJsZSB7XG4gICAgICAgIG1hcmdpbi1ib3R0b206IDA7IH1cbiAgICAgICAgLnRhYmxlLXJlc3BvbnNpdmUgPiAudGFibGUgPiB0aGVhZCA+IHRyID4gdGgsXG4gICAgICAgIC50YWJsZS1yZXNwb25zaXZlID4gLnRhYmxlID4gdGhlYWQgPiB0ciA+IHRkLFxuICAgICAgICAudGFibGUtcmVzcG9uc2l2ZSA+IC50YWJsZSA+IHRib2R5ID4gdHIgPiB0aCxcbiAgICAgICAgLnRhYmxlLXJlc3BvbnNpdmUgPiAudGFibGUgPiB0Ym9keSA+IHRyID4gdGQsXG4gICAgICAgIC50YWJsZS1yZXNwb25zaXZlID4gLnRhYmxlID4gdGZvb3QgPiB0ciA+IHRoLFxuICAgICAgICAudGFibGUtcmVzcG9uc2l2ZSA+IC50YWJsZSA+IHRmb290ID4gdHIgPiB0ZCB7XG4gICAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsgfVxuICAgICAgLnRhYmxlLXJlc3BvbnNpdmUgPiAudGFibGUtYm9yZGVyZWQge1xuICAgICAgICBib3JkZXI6IDA7IH1cbiAgICAgICAgLnRhYmxlLXJlc3BvbnNpdmUgPiAudGFibGUtYm9yZGVyZWQgPiB0aGVhZCA+IHRyID4gdGg6Zmlyc3QtY2hpbGQsXG4gICAgICAgIC50YWJsZS1yZXNwb25zaXZlID4gLnRhYmxlLWJvcmRlcmVkID4gdGhlYWQgPiB0ciA+IHRkOmZpcnN0LWNoaWxkLFxuICAgICAgICAudGFibGUtcmVzcG9uc2l2ZSA+IC50YWJsZS1ib3JkZXJlZCA+IHRib2R5ID4gdHIgPiB0aDpmaXJzdC1jaGlsZCxcbiAgICAgICAgLnRhYmxlLXJlc3BvbnNpdmUgPiAudGFibGUtYm9yZGVyZWQgPiB0Ym9keSA+IHRyID4gdGQ6Zmlyc3QtY2hpbGQsXG4gICAgICAgIC50YWJsZS1yZXNwb25zaXZlID4gLnRhYmxlLWJvcmRlcmVkID4gdGZvb3QgPiB0ciA+IHRoOmZpcnN0LWNoaWxkLFxuICAgICAgICAudGFibGUtcmVzcG9uc2l2ZSA+IC50YWJsZS1ib3JkZXJlZCA+IHRmb290ID4gdHIgPiB0ZDpmaXJzdC1jaGlsZCB7XG4gICAgICAgICAgYm9yZGVyLWxlZnQ6IDA7IH1cbiAgICAgICAgLnRhYmxlLXJlc3BvbnNpdmUgPiAudGFibGUtYm9yZGVyZWQgPiB0aGVhZCA+IHRyID4gdGg6bGFzdC1jaGlsZCxcbiAgICAgICAgLnRhYmxlLXJlc3BvbnNpdmUgPiAudGFibGUtYm9yZGVyZWQgPiB0aGVhZCA+IHRyID4gdGQ6bGFzdC1jaGlsZCxcbiAgICAgICAgLnRhYmxlLXJlc3BvbnNpdmUgPiAudGFibGUtYm9yZGVyZWQgPiB0Ym9keSA+IHRyID4gdGg6bGFzdC1jaGlsZCxcbiAgICAgICAgLnRhYmxlLXJlc3BvbnNpdmUgPiAudGFibGUtYm9yZGVyZWQgPiB0Ym9keSA+IHRyID4gdGQ6bGFzdC1jaGlsZCxcbiAgICAgICAgLnRhYmxlLXJlc3BvbnNpdmUgPiAudGFibGUtYm9yZGVyZWQgPiB0Zm9vdCA+IHRyID4gdGg6bGFzdC1jaGlsZCxcbiAgICAgICAgLnRhYmxlLXJlc3BvbnNpdmUgPiAudGFibGUtYm9yZGVyZWQgPiB0Zm9vdCA+IHRyID4gdGQ6bGFzdC1jaGlsZCB7XG4gICAgICAgICAgYm9yZGVyLXJpZ2h0OiAwOyB9XG4gICAgICAgIC50YWJsZS1yZXNwb25zaXZlID4gLnRhYmxlLWJvcmRlcmVkID4gdGJvZHkgPiB0cjpsYXN0LWNoaWxkID4gdGgsXG4gICAgICAgIC50YWJsZS1yZXNwb25zaXZlID4gLnRhYmxlLWJvcmRlcmVkID4gdGJvZHkgPiB0cjpsYXN0LWNoaWxkID4gdGQsXG4gICAgICAgIC50YWJsZS1yZXNwb25zaXZlID4gLnRhYmxlLWJvcmRlcmVkID4gdGZvb3QgPiB0cjpsYXN0LWNoaWxkID4gdGgsXG4gICAgICAgIC50YWJsZS1yZXNwb25zaXZlID4gLnRhYmxlLWJvcmRlcmVkID4gdGZvb3QgPiB0cjpsYXN0LWNoaWxkID4gdGQge1xuICAgICAgICAgIGJvcmRlci1ib3R0b206IDA7IH0gfVxuXG5maWVsZHNldCB7XG4gIHBhZGRpbmc6IDA7XG4gIG1hcmdpbjogMDtcbiAgYm9yZGVyOiAwO1xuICBtaW4td2lkdGg6IDA7IH1cblxubGVnZW5kIHtcbiAgZGlzcGxheTogYmxvY2s7XG4gIHdpZHRoOiAxMDAlO1xuICBwYWRkaW5nOiAwO1xuICBtYXJnaW4tYm90dG9tOiAyMHB4O1xuICBmb250LXNpemU6IDIxcHg7XG4gIGxpbmUtaGVpZ2h0OiBpbmhlcml0O1xuICBjb2xvcjogIzMzMzMzMztcbiAgYm9yZGVyOiAwO1xuICBib3JkZXItYm90dG9tOiAxcHggc29saWQgI2U1ZTVlNTsgfVxuXG5sYWJlbCB7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgbWF4LXdpZHRoOiAxMDAlO1xuICBtYXJnaW4tYm90dG9tOiA1cHg7XG4gIGZvbnQtd2VpZ2h0OiA2MDA7IH1cblxuaW5wdXRbdHlwZT1cInNlYXJjaFwiXSB7XG4gIC13ZWJraXQtYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgLW1vei1ib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICBib3gtc2l6aW5nOiBib3JkZXItYm94OyB9XG5cbmlucHV0W3R5cGU9XCJyYWRpb1wiXSxcbmlucHV0W3R5cGU9XCJjaGVja2JveFwiXSB7XG4gIG1hcmdpbjogNHB4IDAgMDtcbiAgbWFyZ2luLXRvcDogMXB4IFxcOTtcbiAgbGluZS1oZWlnaHQ6IG5vcm1hbDsgfVxuXG5pbnB1dFt0eXBlPVwiZmlsZVwiXSB7XG4gIGRpc3BsYXk6IGJsb2NrOyB9XG5cbmlucHV0W3R5cGU9XCJyYW5nZVwiXSB7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICB3aWR0aDogMTAwJTsgfVxuXG5zZWxlY3RbbXVsdGlwbGVdLFxuc2VsZWN0W3NpemVdIHtcbiAgaGVpZ2h0OiBhdXRvOyB9XG5cbmlucHV0W3R5cGU9XCJmaWxlXCJdOmZvY3VzLFxuaW5wdXRbdHlwZT1cInJhZGlvXCJdOmZvY3VzLFxuaW5wdXRbdHlwZT1cImNoZWNrYm94XCJdOmZvY3VzIHtcbiAgb3V0bGluZTogdGhpbiBkb3R0ZWQ7XG4gIG91dGxpbmU6IDVweCBhdXRvIC13ZWJraXQtZm9jdXMtcmluZy1jb2xvcjtcbiAgb3V0bGluZS1vZmZzZXQ6IC0ycHg7IH1cblxub3V0cHV0IHtcbiAgZGlzcGxheTogYmxvY2s7XG4gIHBhZGRpbmctdG9wOiA3cHg7XG4gIGZvbnQtc2l6ZTogMTRweDtcbiAgbGluZS1oZWlnaHQ6IDEuNDI4NTcxNDI5O1xuICBjb2xvcjogIzU1NTU1NTsgfVxuXG4uZm9ybS1jb250cm9sIHtcbiAgZGlzcGxheTogYmxvY2s7XG4gIHdpZHRoOiAxMDAlO1xuICBoZWlnaHQ6IDM0cHg7XG4gIHBhZGRpbmc6IDZweCAxMnB4O1xuICBmb250LXNpemU6IDE0cHg7XG4gIGxpbmUtaGVpZ2h0OiAxLjQyODU3MTQyOTtcbiAgY29sb3I6ICM1NTU1NTU7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmY7XG4gIGJhY2tncm91bmQtaW1hZ2U6IG5vbmU7XG4gIGJvcmRlcjogMXB4IHNvbGlkICNjY2M7XG4gIGJvcmRlci1yYWRpdXM6IDRweDtcbiAgLXdlYmtpdC1ib3gtc2hhZG93OiBpbnNldCAwIDFweCAxcHggcmdiYSgwLCAwLCAwLCAwLjA3NSk7XG4gIGJveC1zaGFkb3c6IGluc2V0IDAgMXB4IDFweCByZ2JhKDAsIDAsIDAsIDAuMDc1KTtcbiAgLXdlYmtpdC10cmFuc2l0aW9uOiBib3JkZXItY29sb3IgZWFzZS1pbi1vdXQgMC4xNXMsIGJveC1zaGFkb3cgZWFzZS1pbi1vdXQgMC4xNXM7XG4gIC1vLXRyYW5zaXRpb246IGJvcmRlci1jb2xvciBlYXNlLWluLW91dCAwLjE1cywgYm94LXNoYWRvdyBlYXNlLWluLW91dCAwLjE1cztcbiAgdHJhbnNpdGlvbjogYm9yZGVyLWNvbG9yIGVhc2UtaW4tb3V0IDAuMTVzLCBib3gtc2hhZG93IGVhc2UtaW4tb3V0IDAuMTVzOyB9XG4gIC5mb3JtLWNvbnRyb2w6Zm9jdXMge1xuICAgIGJvcmRlci1jb2xvcjogIzY2YWZlOTtcbiAgICBvdXRsaW5lOiAwO1xuICAgIC13ZWJraXQtYm94LXNoYWRvdzogaW5zZXQgMCAxcHggMXB4IHJnYmEoMCwgMCwgMCwgMC4wNzUpLCAwIDAgOHB4IHJnYmEoMTAyLCAxNzUsIDIzMywgMC42KTtcbiAgICBib3gtc2hhZG93OiBpbnNldCAwIDFweCAxcHggcmdiYSgwLCAwLCAwLCAwLjA3NSksIDAgMCA4cHggcmdiYSgxMDIsIDE3NSwgMjMzLCAwLjYpOyB9XG4gIC5mb3JtLWNvbnRyb2w6Oi1tb3otcGxhY2Vob2xkZXIge1xuICAgIGNvbG9yOiAjOTk5O1xuICAgIG9wYWNpdHk6IDE7IH1cbiAgLmZvcm0tY29udHJvbDotbXMtaW5wdXQtcGxhY2Vob2xkZXIge1xuICAgIGNvbG9yOiAjOTk5OyB9XG4gIC5mb3JtLWNvbnRyb2w6Oi13ZWJraXQtaW5wdXQtcGxhY2Vob2xkZXIge1xuICAgIGNvbG9yOiAjOTk5OyB9XG4gIC5mb3JtLWNvbnRyb2xbZGlzYWJsZWRdLCAuZm9ybS1jb250cm9sW3JlYWRvbmx5XSxcbiAgZmllbGRzZXRbZGlzYWJsZWRdIC5mb3JtLWNvbnRyb2wge1xuICAgIGJhY2tncm91bmQtY29sb3I6ICNlZWVlZWU7XG4gICAgb3BhY2l0eTogMTsgfVxuICAuZm9ybS1jb250cm9sW2Rpc2FibGVkXSxcbiAgZmllbGRzZXRbZGlzYWJsZWRdIC5mb3JtLWNvbnRyb2wge1xuICAgIGN1cnNvcjogbm90LWFsbG93ZWQ7IH1cblxudGV4dGFyZWEuZm9ybS1jb250cm9sIHtcbiAgaGVpZ2h0OiBhdXRvOyB9XG5cbmlucHV0W3R5cGU9XCJzZWFyY2hcIl0ge1xuICAtd2Via2l0LWFwcGVhcmFuY2U6IG5vbmU7IH1cblxuQG1lZGlhIHNjcmVlbiBhbmQgKC13ZWJraXQtbWluLWRldmljZS1waXhlbC1yYXRpbzogMCkge1xuICBpbnB1dFt0eXBlPVwiZGF0ZVwiXSxcbiAgaW5wdXRbdHlwZT1cInRpbWVcIl0sXG4gIGlucHV0W3R5cGU9XCJkYXRldGltZS1sb2NhbFwiXSxcbiAgaW5wdXRbdHlwZT1cIm1vbnRoXCJdIHtcbiAgICBsaW5lLWhlaWdodDogMzRweDsgfVxuICAgIGlucHV0W3R5cGU9XCJkYXRlXCJdLmlucHV0LXNtLCAuaW5wdXQtZ3JvdXAtc20gPiBpbnB1dC5mb3JtLWNvbnRyb2xbdHlwZT1cImRhdGVcIl0sXG4gICAgLmlucHV0LWdyb3VwLXNtID4gaW5wdXQuaW5wdXQtZ3JvdXAtYWRkb25bdHlwZT1cImRhdGVcIl0sXG4gICAgLmlucHV0LWdyb3VwLXNtID4gLmlucHV0LWdyb3VwLWJ0biA+IGlucHV0LmJ0blt0eXBlPVwiZGF0ZVwiXSxcbiAgICAuaW5wdXQtZ3JvdXAtc20gaW5wdXRbdHlwZT1cImRhdGVcIl0sXG4gICAgaW5wdXRbdHlwZT1cInRpbWVcIl0uaW5wdXQtc20sXG4gICAgLmlucHV0LWdyb3VwLXNtID4gaW5wdXQuZm9ybS1jb250cm9sW3R5cGU9XCJ0aW1lXCJdLFxuICAgIC5pbnB1dC1ncm91cC1zbSA+IGlucHV0LmlucHV0LWdyb3VwLWFkZG9uW3R5cGU9XCJ0aW1lXCJdLFxuICAgIC5pbnB1dC1ncm91cC1zbSA+IC5pbnB1dC1ncm91cC1idG4gPiBpbnB1dC5idG5bdHlwZT1cInRpbWVcIl0sXG4gICAgLmlucHV0LWdyb3VwLXNtXG4gICAgaW5wdXRbdHlwZT1cInRpbWVcIl0sXG4gICAgaW5wdXRbdHlwZT1cImRhdGV0aW1lLWxvY2FsXCJdLmlucHV0LXNtLFxuICAgIC5pbnB1dC1ncm91cC1zbSA+IGlucHV0LmZvcm0tY29udHJvbFt0eXBlPVwiZGF0ZXRpbWUtbG9jYWxcIl0sXG4gICAgLmlucHV0LWdyb3VwLXNtID4gaW5wdXQuaW5wdXQtZ3JvdXAtYWRkb25bdHlwZT1cImRhdGV0aW1lLWxvY2FsXCJdLFxuICAgIC5pbnB1dC1ncm91cC1zbSA+IC5pbnB1dC1ncm91cC1idG4gPiBpbnB1dC5idG5bdHlwZT1cImRhdGV0aW1lLWxvY2FsXCJdLFxuICAgIC5pbnB1dC1ncm91cC1zbVxuICAgIGlucHV0W3R5cGU9XCJkYXRldGltZS1sb2NhbFwiXSxcbiAgICBpbnB1dFt0eXBlPVwibW9udGhcIl0uaW5wdXQtc20sXG4gICAgLmlucHV0LWdyb3VwLXNtID4gaW5wdXQuZm9ybS1jb250cm9sW3R5cGU9XCJtb250aFwiXSxcbiAgICAuaW5wdXQtZ3JvdXAtc20gPiBpbnB1dC5pbnB1dC1ncm91cC1hZGRvblt0eXBlPVwibW9udGhcIl0sXG4gICAgLmlucHV0LWdyb3VwLXNtID4gLmlucHV0LWdyb3VwLWJ0biA+IGlucHV0LmJ0blt0eXBlPVwibW9udGhcIl0sXG4gICAgLmlucHV0LWdyb3VwLXNtXG4gICAgaW5wdXRbdHlwZT1cIm1vbnRoXCJdIHtcbiAgICAgIGxpbmUtaGVpZ2h0OiAzMHB4OyB9XG4gICAgaW5wdXRbdHlwZT1cImRhdGVcIl0uaW5wdXQtbGcsIC5pbnB1dC1ncm91cC1sZyA+IGlucHV0LmZvcm0tY29udHJvbFt0eXBlPVwiZGF0ZVwiXSxcbiAgICAuaW5wdXQtZ3JvdXAtbGcgPiBpbnB1dC5pbnB1dC1ncm91cC1hZGRvblt0eXBlPVwiZGF0ZVwiXSxcbiAgICAuaW5wdXQtZ3JvdXAtbGcgPiAuaW5wdXQtZ3JvdXAtYnRuID4gaW5wdXQuYnRuW3R5cGU9XCJkYXRlXCJdLFxuICAgIC5pbnB1dC1ncm91cC1sZyBpbnB1dFt0eXBlPVwiZGF0ZVwiXSxcbiAgICBpbnB1dFt0eXBlPVwidGltZVwiXS5pbnB1dC1sZyxcbiAgICAuaW5wdXQtZ3JvdXAtbGcgPiBpbnB1dC5mb3JtLWNvbnRyb2xbdHlwZT1cInRpbWVcIl0sXG4gICAgLmlucHV0LWdyb3VwLWxnID4gaW5wdXQuaW5wdXQtZ3JvdXAtYWRkb25bdHlwZT1cInRpbWVcIl0sXG4gICAgLmlucHV0LWdyb3VwLWxnID4gLmlucHV0LWdyb3VwLWJ0biA+IGlucHV0LmJ0blt0eXBlPVwidGltZVwiXSxcbiAgICAuaW5wdXQtZ3JvdXAtbGdcbiAgICBpbnB1dFt0eXBlPVwidGltZVwiXSxcbiAgICBpbnB1dFt0eXBlPVwiZGF0ZXRpbWUtbG9jYWxcIl0uaW5wdXQtbGcsXG4gICAgLmlucHV0LWdyb3VwLWxnID4gaW5wdXQuZm9ybS1jb250cm9sW3R5cGU9XCJkYXRldGltZS1sb2NhbFwiXSxcbiAgICAuaW5wdXQtZ3JvdXAtbGcgPiBpbnB1dC5pbnB1dC1ncm91cC1hZGRvblt0eXBlPVwiZGF0ZXRpbWUtbG9jYWxcIl0sXG4gICAgLmlucHV0LWdyb3VwLWxnID4gLmlucHV0LWdyb3VwLWJ0biA+IGlucHV0LmJ0blt0eXBlPVwiZGF0ZXRpbWUtbG9jYWxcIl0sXG4gICAgLmlucHV0LWdyb3VwLWxnXG4gICAgaW5wdXRbdHlwZT1cImRhdGV0aW1lLWxvY2FsXCJdLFxuICAgIGlucHV0W3R5cGU9XCJtb250aFwiXS5pbnB1dC1sZyxcbiAgICAuaW5wdXQtZ3JvdXAtbGcgPiBpbnB1dC5mb3JtLWNvbnRyb2xbdHlwZT1cIm1vbnRoXCJdLFxuICAgIC5pbnB1dC1ncm91cC1sZyA+IGlucHV0LmlucHV0LWdyb3VwLWFkZG9uW3R5cGU9XCJtb250aFwiXSxcbiAgICAuaW5wdXQtZ3JvdXAtbGcgPiAuaW5wdXQtZ3JvdXAtYnRuID4gaW5wdXQuYnRuW3R5cGU9XCJtb250aFwiXSxcbiAgICAuaW5wdXQtZ3JvdXAtbGdcbiAgICBpbnB1dFt0eXBlPVwibW9udGhcIl0ge1xuICAgICAgbGluZS1oZWlnaHQ6IDQ2cHg7IH0gfVxuXG4uZm9ybS1ncm91cCB7XG4gIG1hcmdpbi1ib3R0b206IDE1cHg7IH1cblxuLnJhZGlvLFxuLmNoZWNrYm94IHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBkaXNwbGF5OiBibG9jaztcbiAgbWFyZ2luLXRvcDogMTBweDtcbiAgbWFyZ2luLWJvdHRvbTogMTBweDsgfVxuICAucmFkaW8gbGFiZWwsXG4gIC5jaGVja2JveCBsYWJlbCB7XG4gICAgbWluLWhlaWdodDogMjBweDtcbiAgICBwYWRkaW5nLWxlZnQ6IDIwcHg7XG4gICAgbWFyZ2luLWJvdHRvbTogMDtcbiAgICBmb250LXdlaWdodDogbm9ybWFsO1xuICAgIGN1cnNvcjogcG9pbnRlcjsgfVxuXG4ucmFkaW8gaW5wdXRbdHlwZT1cInJhZGlvXCJdLFxuLnJhZGlvLWlubGluZSBpbnB1dFt0eXBlPVwicmFkaW9cIl0sXG4uY2hlY2tib3ggaW5wdXRbdHlwZT1cImNoZWNrYm94XCJdLFxuLmNoZWNrYm94LWlubGluZSBpbnB1dFt0eXBlPVwiY2hlY2tib3hcIl0ge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIG1hcmdpbi1sZWZ0OiAtMjBweDtcbiAgbWFyZ2luLXRvcDogNHB4IFxcOTsgfVxuXG4ucmFkaW8gKyAucmFkaW8sXG4uY2hlY2tib3ggKyAuY2hlY2tib3gge1xuICBtYXJnaW4tdG9wOiAtNXB4OyB9XG5cbi5yYWRpby1pbmxpbmUsXG4uY2hlY2tib3gtaW5saW5lIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIHBhZGRpbmctbGVmdDogMjBweDtcbiAgbWFyZ2luLWJvdHRvbTogMDtcbiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbiAgZm9udC13ZWlnaHQ6IG5vcm1hbDtcbiAgY3Vyc29yOiBwb2ludGVyOyB9XG5cbi5yYWRpby1pbmxpbmUgKyAucmFkaW8taW5saW5lLFxuLmNoZWNrYm94LWlubGluZSArIC5jaGVja2JveC1pbmxpbmUge1xuICBtYXJnaW4tdG9wOiAwO1xuICBtYXJnaW4tbGVmdDogMTBweDsgfVxuXG5pbnB1dFt0eXBlPVwicmFkaW9cIl1bZGlzYWJsZWRdLCBpbnB1dFt0eXBlPVwicmFkaW9cIl0uZGlzYWJsZWQsXG5maWVsZHNldFtkaXNhYmxlZF0gaW5wdXRbdHlwZT1cInJhZGlvXCJdLFxuaW5wdXRbdHlwZT1cImNoZWNrYm94XCJdW2Rpc2FibGVkXSxcbmlucHV0W3R5cGU9XCJjaGVja2JveFwiXS5kaXNhYmxlZCxcbmZpZWxkc2V0W2Rpc2FibGVkXVxuaW5wdXRbdHlwZT1cImNoZWNrYm94XCJdIHtcbiAgY3Vyc29yOiBub3QtYWxsb3dlZDsgfVxuXG4ucmFkaW8taW5saW5lLmRpc2FibGVkLFxuZmllbGRzZXRbZGlzYWJsZWRdIC5yYWRpby1pbmxpbmUsXG4uY2hlY2tib3gtaW5saW5lLmRpc2FibGVkLFxuZmllbGRzZXRbZGlzYWJsZWRdXG4uY2hlY2tib3gtaW5saW5lIHtcbiAgY3Vyc29yOiBub3QtYWxsb3dlZDsgfVxuXG4ucmFkaW8uZGlzYWJsZWQgbGFiZWwsXG5maWVsZHNldFtkaXNhYmxlZF0gLnJhZGlvIGxhYmVsLFxuLmNoZWNrYm94LmRpc2FibGVkIGxhYmVsLFxuZmllbGRzZXRbZGlzYWJsZWRdXG4uY2hlY2tib3ggbGFiZWwge1xuICBjdXJzb3I6IG5vdC1hbGxvd2VkOyB9XG5cbi5mb3JtLWNvbnRyb2wtc3RhdGljIHtcbiAgcGFkZGluZy10b3A6IDdweDtcbiAgcGFkZGluZy1ib3R0b206IDdweDtcbiAgbWFyZ2luLWJvdHRvbTogMDtcbiAgbWluLWhlaWdodDogMzRweDsgfVxuICAuZm9ybS1jb250cm9sLXN0YXRpYy5pbnB1dC1sZywgLmlucHV0LWdyb3VwLWxnID4gLmZvcm0tY29udHJvbC1zdGF0aWMuZm9ybS1jb250cm9sLFxuICAuaW5wdXQtZ3JvdXAtbGcgPiAuZm9ybS1jb250cm9sLXN0YXRpYy5pbnB1dC1ncm91cC1hZGRvbixcbiAgLmlucHV0LWdyb3VwLWxnID4gLmlucHV0LWdyb3VwLWJ0biA+IC5mb3JtLWNvbnRyb2wtc3RhdGljLmJ0biwgLmZvcm0tY29udHJvbC1zdGF0aWMuaW5wdXQtc20sIC5pbnB1dC1ncm91cC1zbSA+IC5mb3JtLWNvbnRyb2wtc3RhdGljLmZvcm0tY29udHJvbCxcbiAgLmlucHV0LWdyb3VwLXNtID4gLmZvcm0tY29udHJvbC1zdGF0aWMuaW5wdXQtZ3JvdXAtYWRkb24sXG4gIC5pbnB1dC1ncm91cC1zbSA+IC5pbnB1dC1ncm91cC1idG4gPiAuZm9ybS1jb250cm9sLXN0YXRpYy5idG4ge1xuICAgIHBhZGRpbmctbGVmdDogMDtcbiAgICBwYWRkaW5nLXJpZ2h0OiAwOyB9XG5cbi5pbnB1dC1zbSwgLmlucHV0LWdyb3VwLXNtID4gLmZvcm0tY29udHJvbCxcbi5pbnB1dC1ncm91cC1zbSA+IC5pbnB1dC1ncm91cC1hZGRvbixcbi5pbnB1dC1ncm91cC1zbSA+IC5pbnB1dC1ncm91cC1idG4gPiAuYnRuIHtcbiAgaGVpZ2h0OiAzMHB4O1xuICBwYWRkaW5nOiA1cHggMTBweDtcbiAgZm9udC1zaXplOiAxMnB4O1xuICBsaW5lLWhlaWdodDogMS41O1xuICBib3JkZXItcmFkaXVzOiAzcHg7IH1cblxuc2VsZWN0LmlucHV0LXNtLCAuaW5wdXQtZ3JvdXAtc20gPiBzZWxlY3QuZm9ybS1jb250cm9sLFxuLmlucHV0LWdyb3VwLXNtID4gc2VsZWN0LmlucHV0LWdyb3VwLWFkZG9uLFxuLmlucHV0LWdyb3VwLXNtID4gLmlucHV0LWdyb3VwLWJ0biA+IHNlbGVjdC5idG4ge1xuICBoZWlnaHQ6IDMwcHg7XG4gIGxpbmUtaGVpZ2h0OiAzMHB4OyB9XG5cbnRleHRhcmVhLmlucHV0LXNtLCAuaW5wdXQtZ3JvdXAtc20gPiB0ZXh0YXJlYS5mb3JtLWNvbnRyb2wsXG4uaW5wdXQtZ3JvdXAtc20gPiB0ZXh0YXJlYS5pbnB1dC1ncm91cC1hZGRvbixcbi5pbnB1dC1ncm91cC1zbSA+IC5pbnB1dC1ncm91cC1idG4gPiB0ZXh0YXJlYS5idG4sXG5zZWxlY3RbbXVsdGlwbGVdLmlucHV0LXNtLFxuLmlucHV0LWdyb3VwLXNtID4gc2VsZWN0LmZvcm0tY29udHJvbFttdWx0aXBsZV0sXG4uaW5wdXQtZ3JvdXAtc20gPiBzZWxlY3QuaW5wdXQtZ3JvdXAtYWRkb25bbXVsdGlwbGVdLFxuLmlucHV0LWdyb3VwLXNtID4gLmlucHV0LWdyb3VwLWJ0biA+IHNlbGVjdC5idG5bbXVsdGlwbGVdIHtcbiAgaGVpZ2h0OiBhdXRvOyB9XG5cbi5mb3JtLWdyb3VwLXNtIC5mb3JtLWNvbnRyb2wge1xuICBoZWlnaHQ6IDMwcHg7XG4gIHBhZGRpbmc6IDVweCAxMHB4O1xuICBmb250LXNpemU6IDEycHg7XG4gIGxpbmUtaGVpZ2h0OiAxLjU7XG4gIGJvcmRlci1yYWRpdXM6IDNweDsgfVxuXG4uZm9ybS1ncm91cC1zbSBzZWxlY3QuZm9ybS1jb250cm9sIHtcbiAgaGVpZ2h0OiAzMHB4O1xuICBsaW5lLWhlaWdodDogMzBweDsgfVxuXG4uZm9ybS1ncm91cC1zbSB0ZXh0YXJlYS5mb3JtLWNvbnRyb2wsXG4uZm9ybS1ncm91cC1zbSBzZWxlY3RbbXVsdGlwbGVdLmZvcm0tY29udHJvbCB7XG4gIGhlaWdodDogYXV0bzsgfVxuXG4uZm9ybS1ncm91cC1zbSAuZm9ybS1jb250cm9sLXN0YXRpYyB7XG4gIGhlaWdodDogMzBweDtcbiAgcGFkZGluZzogNXB4IDEwcHg7XG4gIGZvbnQtc2l6ZTogMTJweDtcbiAgbGluZS1oZWlnaHQ6IDEuNTtcbiAgbWluLWhlaWdodDogMzJweDsgfVxuXG4uaW5wdXQtbGcsIC5pbnB1dC1ncm91cC1sZyA+IC5mb3JtLWNvbnRyb2wsXG4uaW5wdXQtZ3JvdXAtbGcgPiAuaW5wdXQtZ3JvdXAtYWRkb24sXG4uaW5wdXQtZ3JvdXAtbGcgPiAuaW5wdXQtZ3JvdXAtYnRuID4gLmJ0biB7XG4gIGhlaWdodDogNDZweDtcbiAgcGFkZGluZzogMTBweCAxNnB4O1xuICBmb250LXNpemU6IDE4cHg7XG4gIGxpbmUtaGVpZ2h0OiAxLjMzMzMzMzM7XG4gIGJvcmRlci1yYWRpdXM6IDZweDsgfVxuXG5zZWxlY3QuaW5wdXQtbGcsIC5pbnB1dC1ncm91cC1sZyA+IHNlbGVjdC5mb3JtLWNvbnRyb2wsXG4uaW5wdXQtZ3JvdXAtbGcgPiBzZWxlY3QuaW5wdXQtZ3JvdXAtYWRkb24sXG4uaW5wdXQtZ3JvdXAtbGcgPiAuaW5wdXQtZ3JvdXAtYnRuID4gc2VsZWN0LmJ0biB7XG4gIGhlaWdodDogNDZweDtcbiAgbGluZS1oZWlnaHQ6IDQ2cHg7IH1cblxudGV4dGFyZWEuaW5wdXQtbGcsIC5pbnB1dC1ncm91cC1sZyA+IHRleHRhcmVhLmZvcm0tY29udHJvbCxcbi5pbnB1dC1ncm91cC1sZyA+IHRleHRhcmVhLmlucHV0LWdyb3VwLWFkZG9uLFxuLmlucHV0LWdyb3VwLWxnID4gLmlucHV0LWdyb3VwLWJ0biA+IHRleHRhcmVhLmJ0bixcbnNlbGVjdFttdWx0aXBsZV0uaW5wdXQtbGcsXG4uaW5wdXQtZ3JvdXAtbGcgPiBzZWxlY3QuZm9ybS1jb250cm9sW211bHRpcGxlXSxcbi5pbnB1dC1ncm91cC1sZyA+IHNlbGVjdC5pbnB1dC1ncm91cC1hZGRvblttdWx0aXBsZV0sXG4uaW5wdXQtZ3JvdXAtbGcgPiAuaW5wdXQtZ3JvdXAtYnRuID4gc2VsZWN0LmJ0blttdWx0aXBsZV0ge1xuICBoZWlnaHQ6IGF1dG87IH1cblxuLmZvcm0tZ3JvdXAtbGcgLmZvcm0tY29udHJvbCB7XG4gIGhlaWdodDogNDZweDtcbiAgcGFkZGluZzogMTBweCAxNnB4O1xuICBmb250LXNpemU6IDE4cHg7XG4gIGxpbmUtaGVpZ2h0OiAxLjMzMzMzMzM7XG4gIGJvcmRlci1yYWRpdXM6IDZweDsgfVxuXG4uZm9ybS1ncm91cC1sZyBzZWxlY3QuZm9ybS1jb250cm9sIHtcbiAgaGVpZ2h0OiA0NnB4O1xuICBsaW5lLWhlaWdodDogNDZweDsgfVxuXG4uZm9ybS1ncm91cC1sZyB0ZXh0YXJlYS5mb3JtLWNvbnRyb2wsXG4uZm9ybS1ncm91cC1sZyBzZWxlY3RbbXVsdGlwbGVdLmZvcm0tY29udHJvbCB7XG4gIGhlaWdodDogYXV0bzsgfVxuXG4uZm9ybS1ncm91cC1sZyAuZm9ybS1jb250cm9sLXN0YXRpYyB7XG4gIGhlaWdodDogNDZweDtcbiAgcGFkZGluZzogMTBweCAxNnB4O1xuICBmb250LXNpemU6IDE4cHg7XG4gIGxpbmUtaGVpZ2h0OiAxLjMzMzMzMzM7XG4gIG1pbi1oZWlnaHQ6IDM4cHg7IH1cblxuLmhhcy1mZWVkYmFjayB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTsgfVxuICAuaGFzLWZlZWRiYWNrIC5mb3JtLWNvbnRyb2wge1xuICAgIHBhZGRpbmctcmlnaHQ6IDQyLjVweDsgfVxuXG4uZm9ybS1jb250cm9sLWZlZWRiYWNrIHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB0b3A6IDA7XG4gIHJpZ2h0OiAwO1xuICB6LWluZGV4OiAyO1xuICBkaXNwbGF5OiBibG9jaztcbiAgd2lkdGg6IDM0cHg7XG4gIGhlaWdodDogMzRweDtcbiAgbGluZS1oZWlnaHQ6IDM0cHg7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgcG9pbnRlci1ldmVudHM6IG5vbmU7IH1cblxuLmlucHV0LWxnICsgLmZvcm0tY29udHJvbC1mZWVkYmFjaywgLmlucHV0LWdyb3VwLWxnID4gLmZvcm0tY29udHJvbCArIC5mb3JtLWNvbnRyb2wtZmVlZGJhY2ssIC5pbnB1dC1ncm91cC1sZyA+IC5pbnB1dC1ncm91cC1hZGRvbiArIC5mb3JtLWNvbnRyb2wtZmVlZGJhY2ssIC5pbnB1dC1ncm91cC1sZyA+IC5pbnB1dC1ncm91cC1idG4gPiAuYnRuICsgLmZvcm0tY29udHJvbC1mZWVkYmFjayB7XG4gIHdpZHRoOiA0NnB4O1xuICBoZWlnaHQ6IDQ2cHg7XG4gIGxpbmUtaGVpZ2h0OiA0NnB4OyB9XG5cbi5pbnB1dC1zbSArIC5mb3JtLWNvbnRyb2wtZmVlZGJhY2ssIC5pbnB1dC1ncm91cC1zbSA+IC5mb3JtLWNvbnRyb2wgKyAuZm9ybS1jb250cm9sLWZlZWRiYWNrLCAuaW5wdXQtZ3JvdXAtc20gPiAuaW5wdXQtZ3JvdXAtYWRkb24gKyAuZm9ybS1jb250cm9sLWZlZWRiYWNrLCAuaW5wdXQtZ3JvdXAtc20gPiAuaW5wdXQtZ3JvdXAtYnRuID4gLmJ0biArIC5mb3JtLWNvbnRyb2wtZmVlZGJhY2sge1xuICB3aWR0aDogMzBweDtcbiAgaGVpZ2h0OiAzMHB4O1xuICBsaW5lLWhlaWdodDogMzBweDsgfVxuXG4uaGFzLXN1Y2Nlc3MgLmhlbHAtYmxvY2ssXG4uaGFzLXN1Y2Nlc3MgLmNvbnRyb2wtbGFiZWwsXG4uaGFzLXN1Y2Nlc3MgLnJhZGlvLFxuLmhhcy1zdWNjZXNzIC5jaGVja2JveCxcbi5oYXMtc3VjY2VzcyAucmFkaW8taW5saW5lLFxuLmhhcy1zdWNjZXNzIC5jaGVja2JveC1pbmxpbmUsXG4uaGFzLXN1Y2Nlc3MucmFkaW8gbGFiZWwsXG4uaGFzLXN1Y2Nlc3MuY2hlY2tib3ggbGFiZWwsXG4uaGFzLXN1Y2Nlc3MucmFkaW8taW5saW5lIGxhYmVsLFxuLmhhcy1zdWNjZXNzLmNoZWNrYm94LWlubGluZSBsYWJlbCB7XG4gIGNvbG9yOiAjM2M3NjNkOyB9XG5cbi5oYXMtc3VjY2VzcyAuZm9ybS1jb250cm9sIHtcbiAgYm9yZGVyLWNvbG9yOiAjM2M3NjNkO1xuICAtd2Via2l0LWJveC1zaGFkb3c6IGluc2V0IDAgMXB4IDFweCByZ2JhKDAsIDAsIDAsIDAuMDc1KTtcbiAgYm94LXNoYWRvdzogaW5zZXQgMCAxcHggMXB4IHJnYmEoMCwgMCwgMCwgMC4wNzUpOyB9XG4gIC5oYXMtc3VjY2VzcyAuZm9ybS1jb250cm9sOmZvY3VzIHtcbiAgICBib3JkZXItY29sb3I6ICMyYjU0MmM7XG4gICAgLXdlYmtpdC1ib3gtc2hhZG93OiBpbnNldCAwIDFweCAxcHggcmdiYSgwLCAwLCAwLCAwLjA3NSksIDAgMCA2cHggIzY3YjE2ODtcbiAgICBib3gtc2hhZG93OiBpbnNldCAwIDFweCAxcHggcmdiYSgwLCAwLCAwLCAwLjA3NSksIDAgMCA2cHggIzY3YjE2ODsgfVxuXG4uaGFzLXN1Y2Nlc3MgLmlucHV0LWdyb3VwLWFkZG9uIHtcbiAgY29sb3I6ICMzYzc2M2Q7XG4gIGJvcmRlci1jb2xvcjogIzNjNzYzZDtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2RmZjBkODsgfVxuXG4uaGFzLXN1Y2Nlc3MgLmZvcm0tY29udHJvbC1mZWVkYmFjayB7XG4gIGNvbG9yOiAjM2M3NjNkOyB9XG5cbi5oYXMtd2FybmluZyAuaGVscC1ibG9jayxcbi5oYXMtd2FybmluZyAuY29udHJvbC1sYWJlbCxcbi5oYXMtd2FybmluZyAucmFkaW8sXG4uaGFzLXdhcm5pbmcgLmNoZWNrYm94LFxuLmhhcy13YXJuaW5nIC5yYWRpby1pbmxpbmUsXG4uaGFzLXdhcm5pbmcgLmNoZWNrYm94LWlubGluZSxcbi5oYXMtd2FybmluZy5yYWRpbyBsYWJlbCxcbi5oYXMtd2FybmluZy5jaGVja2JveCBsYWJlbCxcbi5oYXMtd2FybmluZy5yYWRpby1pbmxpbmUgbGFiZWwsXG4uaGFzLXdhcm5pbmcuY2hlY2tib3gtaW5saW5lIGxhYmVsIHtcbiAgY29sb3I6ICM4YTZkM2I7IH1cblxuLmhhcy13YXJuaW5nIC5mb3JtLWNvbnRyb2wge1xuICBib3JkZXItY29sb3I6ICM4YTZkM2I7XG4gIC13ZWJraXQtYm94LXNoYWRvdzogaW5zZXQgMCAxcHggMXB4IHJnYmEoMCwgMCwgMCwgMC4wNzUpO1xuICBib3gtc2hhZG93OiBpbnNldCAwIDFweCAxcHggcmdiYSgwLCAwLCAwLCAwLjA3NSk7IH1cbiAgLmhhcy13YXJuaW5nIC5mb3JtLWNvbnRyb2w6Zm9jdXMge1xuICAgIGJvcmRlci1jb2xvcjogIzY2NTEyYztcbiAgICAtd2Via2l0LWJveC1zaGFkb3c6IGluc2V0IDAgMXB4IDFweCByZ2JhKDAsIDAsIDAsIDAuMDc1KSwgMCAwIDZweCAjYzBhMTZiO1xuICAgIGJveC1zaGFkb3c6IGluc2V0IDAgMXB4IDFweCByZ2JhKDAsIDAsIDAsIDAuMDc1KSwgMCAwIDZweCAjYzBhMTZiOyB9XG5cbi5oYXMtd2FybmluZyAuaW5wdXQtZ3JvdXAtYWRkb24ge1xuICBjb2xvcjogIzhhNmQzYjtcbiAgYm9yZGVyLWNvbG9yOiAjOGE2ZDNiO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmNmOGUzOyB9XG5cbi5oYXMtd2FybmluZyAuZm9ybS1jb250cm9sLWZlZWRiYWNrIHtcbiAgY29sb3I6ICM4YTZkM2I7IH1cblxuLmhhcy1lcnJvciAuaGVscC1ibG9jayxcbi5oYXMtZXJyb3IgLmNvbnRyb2wtbGFiZWwsXG4uaGFzLWVycm9yIC5yYWRpbyxcbi5oYXMtZXJyb3IgLmNoZWNrYm94LFxuLmhhcy1lcnJvciAucmFkaW8taW5saW5lLFxuLmhhcy1lcnJvciAuY2hlY2tib3gtaW5saW5lLFxuLmhhcy1lcnJvci5yYWRpbyBsYWJlbCxcbi5oYXMtZXJyb3IuY2hlY2tib3ggbGFiZWwsXG4uaGFzLWVycm9yLnJhZGlvLWlubGluZSBsYWJlbCxcbi5oYXMtZXJyb3IuY2hlY2tib3gtaW5saW5lIGxhYmVsIHtcbiAgY29sb3I6ICNhOTQ0NDI7IH1cblxuLmhhcy1lcnJvciAuZm9ybS1jb250cm9sIHtcbiAgYm9yZGVyLWNvbG9yOiAjYTk0NDQyO1xuICAtd2Via2l0LWJveC1zaGFkb3c6IGluc2V0IDAgMXB4IDFweCByZ2JhKDAsIDAsIDAsIDAuMDc1KTtcbiAgYm94LXNoYWRvdzogaW5zZXQgMCAxcHggMXB4IHJnYmEoMCwgMCwgMCwgMC4wNzUpOyB9XG4gIC5oYXMtZXJyb3IgLmZvcm0tY29udHJvbDpmb2N1cyB7XG4gICAgYm9yZGVyLWNvbG9yOiAjODQzNTM0O1xuICAgIC13ZWJraXQtYm94LXNoYWRvdzogaW5zZXQgMCAxcHggMXB4IHJnYmEoMCwgMCwgMCwgMC4wNzUpLCAwIDAgNnB4ICNjZTg0ODM7XG4gICAgYm94LXNoYWRvdzogaW5zZXQgMCAxcHggMXB4IHJnYmEoMCwgMCwgMCwgMC4wNzUpLCAwIDAgNnB4ICNjZTg0ODM7IH1cblxuLmhhcy1lcnJvciAuaW5wdXQtZ3JvdXAtYWRkb24ge1xuICBjb2xvcjogI2E5NDQ0MjtcbiAgYm9yZGVyLWNvbG9yOiAjYTk0NDQyO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjJkZWRlOyB9XG5cbi5oYXMtZXJyb3IgLmZvcm0tY29udHJvbC1mZWVkYmFjayB7XG4gIGNvbG9yOiAjYTk0NDQyOyB9XG5cbi5oYXMtZmVlZGJhY2sgbGFiZWwgfiAuZm9ybS1jb250cm9sLWZlZWRiYWNrIHtcbiAgdG9wOiAyNXB4OyB9XG5cbi5oYXMtZmVlZGJhY2sgbGFiZWwuc3Itb25seSB+IC5mb3JtLWNvbnRyb2wtZmVlZGJhY2sge1xuICB0b3A6IDA7IH1cblxuLmhlbHAtYmxvY2sge1xuICBkaXNwbGF5OiBibG9jaztcbiAgbWFyZ2luLXRvcDogNXB4O1xuICBtYXJnaW4tYm90dG9tOiAxMHB4O1xuICBjb2xvcjogIzczNzM3MzsgfVxuXG5AbWVkaWEgKG1pbi13aWR0aDogNzY4cHgpIHtcbiAgLmZvcm0taW5saW5lIC5mb3JtLWdyb3VwIHtcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgbWFyZ2luLWJvdHRvbTogMDtcbiAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOyB9XG4gIC5mb3JtLWlubGluZSAuZm9ybS1jb250cm9sIHtcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgd2lkdGg6IGF1dG87XG4gICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTsgfVxuICAuZm9ybS1pbmxpbmUgLmZvcm0tY29udHJvbC1zdGF0aWMge1xuICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsgfVxuICAuZm9ybS1pbmxpbmUgLmlucHV0LWdyb3VwIHtcbiAgICBkaXNwbGF5OiBpbmxpbmUtdGFibGU7XG4gICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTsgfVxuICAgIC5mb3JtLWlubGluZSAuaW5wdXQtZ3JvdXAgLmlucHV0LWdyb3VwLWFkZG9uLFxuICAgIC5mb3JtLWlubGluZSAuaW5wdXQtZ3JvdXAgLmlucHV0LWdyb3VwLWJ0bixcbiAgICAuZm9ybS1pbmxpbmUgLmlucHV0LWdyb3VwIC5mb3JtLWNvbnRyb2wge1xuICAgICAgd2lkdGg6IGF1dG87IH1cbiAgLmZvcm0taW5saW5lIC5pbnB1dC1ncm91cCA+IC5mb3JtLWNvbnRyb2wge1xuICAgIHdpZHRoOiAxMDAlOyB9XG4gIC5mb3JtLWlubGluZSAuY29udHJvbC1sYWJlbCB7XG4gICAgbWFyZ2luLWJvdHRvbTogMDtcbiAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOyB9XG4gIC5mb3JtLWlubGluZSAucmFkaW8sXG4gIC5mb3JtLWlubGluZSAuY2hlY2tib3gge1xuICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICBtYXJnaW4tdG9wOiAwO1xuICAgIG1hcmdpbi1ib3R0b206IDA7XG4gICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTsgfVxuICAgIC5mb3JtLWlubGluZSAucmFkaW8gbGFiZWwsXG4gICAgLmZvcm0taW5saW5lIC5jaGVja2JveCBsYWJlbCB7XG4gICAgICBwYWRkaW5nLWxlZnQ6IDA7IH1cbiAgLmZvcm0taW5saW5lIC5yYWRpbyBpbnB1dFt0eXBlPVwicmFkaW9cIl0sXG4gIC5mb3JtLWlubGluZSAuY2hlY2tib3ggaW5wdXRbdHlwZT1cImNoZWNrYm94XCJdIHtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgbWFyZ2luLWxlZnQ6IDA7IH1cbiAgLmZvcm0taW5saW5lIC5oYXMtZmVlZGJhY2sgLmZvcm0tY29udHJvbC1mZWVkYmFjayB7XG4gICAgdG9wOiAwOyB9IH1cblxuLmZvcm0taG9yaXpvbnRhbCAucmFkaW8sXG4uZm9ybS1ob3Jpem9udGFsIC5jaGVja2JveCxcbi5mb3JtLWhvcml6b250YWwgLnJhZGlvLWlubGluZSxcbi5mb3JtLWhvcml6b250YWwgLmNoZWNrYm94LWlubGluZSB7XG4gIG1hcmdpbi10b3A6IDA7XG4gIG1hcmdpbi1ib3R0b206IDA7XG4gIHBhZGRpbmctdG9wOiA3cHg7IH1cblxuLmZvcm0taG9yaXpvbnRhbCAucmFkaW8sXG4uZm9ybS1ob3Jpem9udGFsIC5jaGVja2JveCB7XG4gIG1pbi1oZWlnaHQ6IDI3cHg7IH1cblxuLmZvcm0taG9yaXpvbnRhbCAuZm9ybS1ncm91cCB7XG4gIG1hcmdpbi1sZWZ0OiAtMTVweDtcbiAgbWFyZ2luLXJpZ2h0OiAtMTVweDsgfVxuICAuZm9ybS1ob3Jpem9udGFsIC5mb3JtLWdyb3VwOmJlZm9yZSwgLmZvcm0taG9yaXpvbnRhbCAuZm9ybS1ncm91cDphZnRlciB7XG4gICAgY29udGVudDogXCIgXCI7XG4gICAgZGlzcGxheTogdGFibGU7IH1cbiAgLmZvcm0taG9yaXpvbnRhbCAuZm9ybS1ncm91cDphZnRlciB7XG4gICAgY2xlYXI6IGJvdGg7IH1cblxuQG1lZGlhIChtaW4td2lkdGg6IDc2OHB4KSB7XG4gIC5mb3JtLWhvcml6b250YWwgLmNvbnRyb2wtbGFiZWwge1xuICAgIHRleHQtYWxpZ246IHJpZ2h0O1xuICAgIG1hcmdpbi1ib3R0b206IDA7XG4gICAgcGFkZGluZy10b3A6IDdweDsgfSB9XG5cbi5mb3JtLWhvcml6b250YWwgLmhhcy1mZWVkYmFjayAuZm9ybS1jb250cm9sLWZlZWRiYWNrIHtcbiAgcmlnaHQ6IDE1cHg7IH1cblxuQG1lZGlhIChtaW4td2lkdGg6IDc2OHB4KSB7XG4gIC5mb3JtLWhvcml6b250YWwgLmZvcm0tZ3JvdXAtbGcgLmNvbnRyb2wtbGFiZWwge1xuICAgIHBhZGRpbmctdG9wOiAxNC4zMzMzMzNweDsgfSB9XG5cbkBtZWRpYSAobWluLXdpZHRoOiA3NjhweCkge1xuICAuZm9ybS1ob3Jpem9udGFsIC5mb3JtLWdyb3VwLXNtIC5jb250cm9sLWxhYmVsIHtcbiAgICBwYWRkaW5nLXRvcDogNnB4OyB9IH1cblxuLmJ0biB7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgbWFyZ2luLWJvdHRvbTogMDtcbiAgZm9udC13ZWlnaHQ6IG5vcm1hbDtcbiAgZm9udC1mYW1pbHk6IFwiRWluYVwiLCBcIkhlbHZldGljYSBOZXVlXCIsIEhlbHZldGljYSwgc2Fucy1zZXJpZjtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xuICB0b3VjaC1hY3Rpb246IG1hbmlwdWxhdGlvbjtcbiAgY3Vyc29yOiBwb2ludGVyO1xuICBiYWNrZ3JvdW5kLWltYWdlOiBub25lO1xuICBib3JkZXI6IDFweCBzb2xpZCB0cmFuc3BhcmVudDtcbiAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgcGFkZGluZzogNnB4IDEycHg7XG4gIGZvbnQtc2l6ZTogMTRweDtcbiAgbGluZS1oZWlnaHQ6IDEuNDI4NTcxNDI5O1xuICBib3JkZXItcmFkaXVzOiA0cHg7XG4gIC13ZWJraXQtdXNlci1zZWxlY3Q6IG5vbmU7XG4gIC1tb3otdXNlci1zZWxlY3Q6IG5vbmU7XG4gIC1tcy11c2VyLXNlbGVjdDogbm9uZTtcbiAgdXNlci1zZWxlY3Q6IG5vbmU7IH1cbiAgLmJ0bjpmb2N1cywgLmJ0bi5mb2N1cywgLmJ0bjphY3RpdmU6Zm9jdXMsIC5idG46YWN0aXZlLmZvY3VzLCAuYnRuLmFjdGl2ZTpmb2N1cywgLmJ0bi5hY3RpdmUuZm9jdXMge1xuICAgIG91dGxpbmU6IHRoaW4gZG90dGVkO1xuICAgIG91dGxpbmU6IDVweCBhdXRvIC13ZWJraXQtZm9jdXMtcmluZy1jb2xvcjtcbiAgICBvdXRsaW5lLW9mZnNldDogLTJweDsgfVxuICAuYnRuOmhvdmVyLCAuYnRuOmZvY3VzLCAuYnRuLmZvY3VzIHtcbiAgICBjb2xvcjogIzMzMztcbiAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7IH1cbiAgLmJ0bjphY3RpdmUsIC5idG4uYWN0aXZlIHtcbiAgICBvdXRsaW5lOiAwO1xuICAgIGJhY2tncm91bmQtaW1hZ2U6IG5vbmU7XG4gICAgLXdlYmtpdC1ib3gtc2hhZG93OiBpbnNldCAwIDNweCA1cHggcmdiYSgwLCAwLCAwLCAwLjEyNSk7XG4gICAgYm94LXNoYWRvdzogaW5zZXQgMCAzcHggNXB4IHJnYmEoMCwgMCwgMCwgMC4xMjUpOyB9XG4gIC5idG4uZGlzYWJsZWQsIC5idG5bZGlzYWJsZWRdLFxuICBmaWVsZHNldFtkaXNhYmxlZF0gLmJ0biB7XG4gICAgY3Vyc29yOiBub3QtYWxsb3dlZDtcbiAgICBwb2ludGVyLWV2ZW50czogbm9uZTtcbiAgICBvcGFjaXR5OiAwLjY1O1xuICAgIGZpbHRlcjogYWxwaGEob3BhY2l0eT02NSk7XG4gICAgLXdlYmtpdC1ib3gtc2hhZG93OiBub25lO1xuICAgIGJveC1zaGFkb3c6IG5vbmU7IH1cblxuLmJ0bi1kZWZhdWx0IHtcbiAgY29sb3I6ICMzMzM7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmY7XG4gIGJvcmRlci1jb2xvcjogI2NjYzsgfVxuICAuYnRuLWRlZmF1bHQ6aG92ZXIsIC5idG4tZGVmYXVsdDpmb2N1cywgLmJ0bi1kZWZhdWx0LmZvY3VzLCAuYnRuLWRlZmF1bHQ6YWN0aXZlLCAuYnRuLWRlZmF1bHQuYWN0aXZlLFxuICAub3BlbiA+IC5idG4tZGVmYXVsdC5kcm9wZG93bi10b2dnbGUge1xuICAgIGNvbG9yOiAjMzMzO1xuICAgIGJhY2tncm91bmQtY29sb3I6ICNlNmU1ZTU7XG4gICAgYm9yZGVyLWNvbG9yOiAjYWRhZGFkOyB9XG4gIC5idG4tZGVmYXVsdDphY3RpdmUsIC5idG4tZGVmYXVsdC5hY3RpdmUsXG4gIC5vcGVuID4gLmJ0bi1kZWZhdWx0LmRyb3Bkb3duLXRvZ2dsZSB7XG4gICAgYmFja2dyb3VuZC1pbWFnZTogbm9uZTsgfVxuICAuYnRuLWRlZmF1bHQuZGlzYWJsZWQsIC5idG4tZGVmYXVsdC5kaXNhYmxlZDpob3ZlciwgLmJ0bi1kZWZhdWx0LmRpc2FibGVkOmZvY3VzLCAuYnRuLWRlZmF1bHQuZGlzYWJsZWQuZm9jdXMsIC5idG4tZGVmYXVsdC5kaXNhYmxlZDphY3RpdmUsIC5idG4tZGVmYXVsdC5kaXNhYmxlZC5hY3RpdmUsIC5idG4tZGVmYXVsdFtkaXNhYmxlZF0sIC5idG4tZGVmYXVsdFtkaXNhYmxlZF06aG92ZXIsIC5idG4tZGVmYXVsdFtkaXNhYmxlZF06Zm9jdXMsIC5idG4tZGVmYXVsdFtkaXNhYmxlZF0uZm9jdXMsIC5idG4tZGVmYXVsdFtkaXNhYmxlZF06YWN0aXZlLCAuYnRuLWRlZmF1bHRbZGlzYWJsZWRdLmFjdGl2ZSxcbiAgZmllbGRzZXRbZGlzYWJsZWRdIC5idG4tZGVmYXVsdCxcbiAgZmllbGRzZXRbZGlzYWJsZWRdIC5idG4tZGVmYXVsdDpob3ZlcixcbiAgZmllbGRzZXRbZGlzYWJsZWRdIC5idG4tZGVmYXVsdDpmb2N1cyxcbiAgZmllbGRzZXRbZGlzYWJsZWRdIC5idG4tZGVmYXVsdC5mb2N1cyxcbiAgZmllbGRzZXRbZGlzYWJsZWRdIC5idG4tZGVmYXVsdDphY3RpdmUsXG4gIGZpZWxkc2V0W2Rpc2FibGVkXSAuYnRuLWRlZmF1bHQuYWN0aXZlIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xuICAgIGJvcmRlci1jb2xvcjogI2NjYzsgfVxuICAuYnRuLWRlZmF1bHQgLmJhZGdlIHtcbiAgICBjb2xvcjogI2ZmZjtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjMzMzOyB9XG5cbi5idG4tcHJpbWFyeSB7XG4gIGNvbG9yOiAjZmZmO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMzM3YWI3O1xuICBib3JkZXItY29sb3I6ICMyZTZkYTQ7IH1cbiAgLmJ0bi1wcmltYXJ5OmhvdmVyLCAuYnRuLXByaW1hcnk6Zm9jdXMsIC5idG4tcHJpbWFyeS5mb2N1cywgLmJ0bi1wcmltYXJ5OmFjdGl2ZSwgLmJ0bi1wcmltYXJ5LmFjdGl2ZSxcbiAgLm9wZW4gPiAuYnRuLXByaW1hcnkuZHJvcGRvd24tdG9nZ2xlIHtcbiAgICBjb2xvcjogI2ZmZjtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjMjg2MDkwO1xuICAgIGJvcmRlci1jb2xvcjogIzIwNGQ3NDsgfVxuICAuYnRuLXByaW1hcnk6YWN0aXZlLCAuYnRuLXByaW1hcnkuYWN0aXZlLFxuICAub3BlbiA+IC5idG4tcHJpbWFyeS5kcm9wZG93bi10b2dnbGUge1xuICAgIGJhY2tncm91bmQtaW1hZ2U6IG5vbmU7IH1cbiAgLmJ0bi1wcmltYXJ5LmRpc2FibGVkLCAuYnRuLXByaW1hcnkuZGlzYWJsZWQ6aG92ZXIsIC5idG4tcHJpbWFyeS5kaXNhYmxlZDpmb2N1cywgLmJ0bi1wcmltYXJ5LmRpc2FibGVkLmZvY3VzLCAuYnRuLXByaW1hcnkuZGlzYWJsZWQ6YWN0aXZlLCAuYnRuLXByaW1hcnkuZGlzYWJsZWQuYWN0aXZlLCAuYnRuLXByaW1hcnlbZGlzYWJsZWRdLCAuYnRuLXByaW1hcnlbZGlzYWJsZWRdOmhvdmVyLCAuYnRuLXByaW1hcnlbZGlzYWJsZWRdOmZvY3VzLCAuYnRuLXByaW1hcnlbZGlzYWJsZWRdLmZvY3VzLCAuYnRuLXByaW1hcnlbZGlzYWJsZWRdOmFjdGl2ZSwgLmJ0bi1wcmltYXJ5W2Rpc2FibGVkXS5hY3RpdmUsXG4gIGZpZWxkc2V0W2Rpc2FibGVkXSAuYnRuLXByaW1hcnksXG4gIGZpZWxkc2V0W2Rpc2FibGVkXSAuYnRuLXByaW1hcnk6aG92ZXIsXG4gIGZpZWxkc2V0W2Rpc2FibGVkXSAuYnRuLXByaW1hcnk6Zm9jdXMsXG4gIGZpZWxkc2V0W2Rpc2FibGVkXSAuYnRuLXByaW1hcnkuZm9jdXMsXG4gIGZpZWxkc2V0W2Rpc2FibGVkXSAuYnRuLXByaW1hcnk6YWN0aXZlLFxuICBmaWVsZHNldFtkaXNhYmxlZF0gLmJ0bi1wcmltYXJ5LmFjdGl2ZSB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogIzMzN2FiNztcbiAgICBib3JkZXItY29sb3I6ICMyZTZkYTQ7IH1cbiAgLmJ0bi1wcmltYXJ5IC5iYWRnZSB7XG4gICAgY29sb3I6ICMzMzdhYjc7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjsgfVxuXG4uYnRuLXN1Y2Nlc3Mge1xuICBjb2xvcjogI2ZmZjtcbiAgYmFja2dyb3VuZC1jb2xvcjogIzVjYjg1YztcbiAgYm9yZGVyLWNvbG9yOiAjNGNhZTRjOyB9XG4gIC5idG4tc3VjY2Vzczpob3ZlciwgLmJ0bi1zdWNjZXNzOmZvY3VzLCAuYnRuLXN1Y2Nlc3MuZm9jdXMsIC5idG4tc3VjY2VzczphY3RpdmUsIC5idG4tc3VjY2Vzcy5hY3RpdmUsXG4gIC5vcGVuID4gLmJ0bi1zdWNjZXNzLmRyb3Bkb3duLXRvZ2dsZSB7XG4gICAgY29sb3I6ICNmZmY7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogIzQ0OWQ0NDtcbiAgICBib3JkZXItY29sb3I6ICMzOTg0Mzk7IH1cbiAgLmJ0bi1zdWNjZXNzOmFjdGl2ZSwgLmJ0bi1zdWNjZXNzLmFjdGl2ZSxcbiAgLm9wZW4gPiAuYnRuLXN1Y2Nlc3MuZHJvcGRvd24tdG9nZ2xlIHtcbiAgICBiYWNrZ3JvdW5kLWltYWdlOiBub25lOyB9XG4gIC5idG4tc3VjY2Vzcy5kaXNhYmxlZCwgLmJ0bi1zdWNjZXNzLmRpc2FibGVkOmhvdmVyLCAuYnRuLXN1Y2Nlc3MuZGlzYWJsZWQ6Zm9jdXMsIC5idG4tc3VjY2Vzcy5kaXNhYmxlZC5mb2N1cywgLmJ0bi1zdWNjZXNzLmRpc2FibGVkOmFjdGl2ZSwgLmJ0bi1zdWNjZXNzLmRpc2FibGVkLmFjdGl2ZSwgLmJ0bi1zdWNjZXNzW2Rpc2FibGVkXSwgLmJ0bi1zdWNjZXNzW2Rpc2FibGVkXTpob3ZlciwgLmJ0bi1zdWNjZXNzW2Rpc2FibGVkXTpmb2N1cywgLmJ0bi1zdWNjZXNzW2Rpc2FibGVkXS5mb2N1cywgLmJ0bi1zdWNjZXNzW2Rpc2FibGVkXTphY3RpdmUsIC5idG4tc3VjY2Vzc1tkaXNhYmxlZF0uYWN0aXZlLFxuICBmaWVsZHNldFtkaXNhYmxlZF0gLmJ0bi1zdWNjZXNzLFxuICBmaWVsZHNldFtkaXNhYmxlZF0gLmJ0bi1zdWNjZXNzOmhvdmVyLFxuICBmaWVsZHNldFtkaXNhYmxlZF0gLmJ0bi1zdWNjZXNzOmZvY3VzLFxuICBmaWVsZHNldFtkaXNhYmxlZF0gLmJ0bi1zdWNjZXNzLmZvY3VzLFxuICBmaWVsZHNldFtkaXNhYmxlZF0gLmJ0bi1zdWNjZXNzOmFjdGl2ZSxcbiAgZmllbGRzZXRbZGlzYWJsZWRdIC5idG4tc3VjY2Vzcy5hY3RpdmUge1xuICAgIGJhY2tncm91bmQtY29sb3I6ICM1Y2I4NWM7XG4gICAgYm9yZGVyLWNvbG9yOiAjNGNhZTRjOyB9XG4gIC5idG4tc3VjY2VzcyAuYmFkZ2Uge1xuICAgIGNvbG9yOiAjNWNiODVjO1xuICAgIGJhY2tncm91bmQtY29sb3I6ICNmZmY7IH1cblxuLmJ0bi1pbmZvIHtcbiAgY29sb3I6ICNmZmY7XG4gIGJhY2tncm91bmQtY29sb3I6ICM1YmMwZGU7XG4gIGJvcmRlci1jb2xvcjogIzQ2YjhkYTsgfVxuICAuYnRuLWluZm86aG92ZXIsIC5idG4taW5mbzpmb2N1cywgLmJ0bi1pbmZvLmZvY3VzLCAuYnRuLWluZm86YWN0aXZlLCAuYnRuLWluZm8uYWN0aXZlLFxuICAub3BlbiA+IC5idG4taW5mby5kcm9wZG93bi10b2dnbGUge1xuICAgIGNvbG9yOiAjZmZmO1xuICAgIGJhY2tncm91bmQtY29sb3I6ICMzMWIwZDU7XG4gICAgYm9yZGVyLWNvbG9yOiAjMjY5YWJjOyB9XG4gIC5idG4taW5mbzphY3RpdmUsIC5idG4taW5mby5hY3RpdmUsXG4gIC5vcGVuID4gLmJ0bi1pbmZvLmRyb3Bkb3duLXRvZ2dsZSB7XG4gICAgYmFja2dyb3VuZC1pbWFnZTogbm9uZTsgfVxuICAuYnRuLWluZm8uZGlzYWJsZWQsIC5idG4taW5mby5kaXNhYmxlZDpob3ZlciwgLmJ0bi1pbmZvLmRpc2FibGVkOmZvY3VzLCAuYnRuLWluZm8uZGlzYWJsZWQuZm9jdXMsIC5idG4taW5mby5kaXNhYmxlZDphY3RpdmUsIC5idG4taW5mby5kaXNhYmxlZC5hY3RpdmUsIC5idG4taW5mb1tkaXNhYmxlZF0sIC5idG4taW5mb1tkaXNhYmxlZF06aG92ZXIsIC5idG4taW5mb1tkaXNhYmxlZF06Zm9jdXMsIC5idG4taW5mb1tkaXNhYmxlZF0uZm9jdXMsIC5idG4taW5mb1tkaXNhYmxlZF06YWN0aXZlLCAuYnRuLWluZm9bZGlzYWJsZWRdLmFjdGl2ZSxcbiAgZmllbGRzZXRbZGlzYWJsZWRdIC5idG4taW5mbyxcbiAgZmllbGRzZXRbZGlzYWJsZWRdIC5idG4taW5mbzpob3ZlcixcbiAgZmllbGRzZXRbZGlzYWJsZWRdIC5idG4taW5mbzpmb2N1cyxcbiAgZmllbGRzZXRbZGlzYWJsZWRdIC5idG4taW5mby5mb2N1cyxcbiAgZmllbGRzZXRbZGlzYWJsZWRdIC5idG4taW5mbzphY3RpdmUsXG4gIGZpZWxkc2V0W2Rpc2FibGVkXSAuYnRuLWluZm8uYWN0aXZlIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjNWJjMGRlO1xuICAgIGJvcmRlci1jb2xvcjogIzQ2YjhkYTsgfVxuICAuYnRuLWluZm8gLmJhZGdlIHtcbiAgICBjb2xvcjogIzViYzBkZTtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmOyB9XG5cbi5idG4td2FybmluZyB7XG4gIGNvbG9yOiAjZmZmO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjBhZDRlO1xuICBib3JkZXItY29sb3I6ICNlZWEyMzY7IH1cbiAgLmJ0bi13YXJuaW5nOmhvdmVyLCAuYnRuLXdhcm5pbmc6Zm9jdXMsIC5idG4td2FybmluZy5mb2N1cywgLmJ0bi13YXJuaW5nOmFjdGl2ZSwgLmJ0bi13YXJuaW5nLmFjdGl2ZSxcbiAgLm9wZW4gPiAuYnRuLXdhcm5pbmcuZHJvcGRvd24tdG9nZ2xlIHtcbiAgICBjb2xvcjogI2ZmZjtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZWM5NzFmO1xuICAgIGJvcmRlci1jb2xvcjogI2Q1ODUxMjsgfVxuICAuYnRuLXdhcm5pbmc6YWN0aXZlLCAuYnRuLXdhcm5pbmcuYWN0aXZlLFxuICAub3BlbiA+IC5idG4td2FybmluZy5kcm9wZG93bi10b2dnbGUge1xuICAgIGJhY2tncm91bmQtaW1hZ2U6IG5vbmU7IH1cbiAgLmJ0bi13YXJuaW5nLmRpc2FibGVkLCAuYnRuLXdhcm5pbmcuZGlzYWJsZWQ6aG92ZXIsIC5idG4td2FybmluZy5kaXNhYmxlZDpmb2N1cywgLmJ0bi13YXJuaW5nLmRpc2FibGVkLmZvY3VzLCAuYnRuLXdhcm5pbmcuZGlzYWJsZWQ6YWN0aXZlLCAuYnRuLXdhcm5pbmcuZGlzYWJsZWQuYWN0aXZlLCAuYnRuLXdhcm5pbmdbZGlzYWJsZWRdLCAuYnRuLXdhcm5pbmdbZGlzYWJsZWRdOmhvdmVyLCAuYnRuLXdhcm5pbmdbZGlzYWJsZWRdOmZvY3VzLCAuYnRuLXdhcm5pbmdbZGlzYWJsZWRdLmZvY3VzLCAuYnRuLXdhcm5pbmdbZGlzYWJsZWRdOmFjdGl2ZSwgLmJ0bi13YXJuaW5nW2Rpc2FibGVkXS5hY3RpdmUsXG4gIGZpZWxkc2V0W2Rpc2FibGVkXSAuYnRuLXdhcm5pbmcsXG4gIGZpZWxkc2V0W2Rpc2FibGVkXSAuYnRuLXdhcm5pbmc6aG92ZXIsXG4gIGZpZWxkc2V0W2Rpc2FibGVkXSAuYnRuLXdhcm5pbmc6Zm9jdXMsXG4gIGZpZWxkc2V0W2Rpc2FibGVkXSAuYnRuLXdhcm5pbmcuZm9jdXMsXG4gIGZpZWxkc2V0W2Rpc2FibGVkXSAuYnRuLXdhcm5pbmc6YWN0aXZlLFxuICBmaWVsZHNldFtkaXNhYmxlZF0gLmJ0bi13YXJuaW5nLmFjdGl2ZSB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogI2YwYWQ0ZTtcbiAgICBib3JkZXItY29sb3I6ICNlZWEyMzY7IH1cbiAgLmJ0bi13YXJuaW5nIC5iYWRnZSB7XG4gICAgY29sb3I6ICNmMGFkNGU7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjsgfVxuXG4uYnRuLWRhbmdlciB7XG4gIGNvbG9yOiAjZmZmO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZDk1MzRmO1xuICBib3JkZXItY29sb3I6ICNkNDNmM2E7IH1cbiAgLmJ0bi1kYW5nZXI6aG92ZXIsIC5idG4tZGFuZ2VyOmZvY3VzLCAuYnRuLWRhbmdlci5mb2N1cywgLmJ0bi1kYW5nZXI6YWN0aXZlLCAuYnRuLWRhbmdlci5hY3RpdmUsXG4gIC5vcGVuID4gLmJ0bi1kYW5nZXIuZHJvcGRvd24tdG9nZ2xlIHtcbiAgICBjb2xvcjogI2ZmZjtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjYzkzMDJjO1xuICAgIGJvcmRlci1jb2xvcjogI2FjMjkyNTsgfVxuICAuYnRuLWRhbmdlcjphY3RpdmUsIC5idG4tZGFuZ2VyLmFjdGl2ZSxcbiAgLm9wZW4gPiAuYnRuLWRhbmdlci5kcm9wZG93bi10b2dnbGUge1xuICAgIGJhY2tncm91bmQtaW1hZ2U6IG5vbmU7IH1cbiAgLmJ0bi1kYW5nZXIuZGlzYWJsZWQsIC5idG4tZGFuZ2VyLmRpc2FibGVkOmhvdmVyLCAuYnRuLWRhbmdlci5kaXNhYmxlZDpmb2N1cywgLmJ0bi1kYW5nZXIuZGlzYWJsZWQuZm9jdXMsIC5idG4tZGFuZ2VyLmRpc2FibGVkOmFjdGl2ZSwgLmJ0bi1kYW5nZXIuZGlzYWJsZWQuYWN0aXZlLCAuYnRuLWRhbmdlcltkaXNhYmxlZF0sIC5idG4tZGFuZ2VyW2Rpc2FibGVkXTpob3ZlciwgLmJ0bi1kYW5nZXJbZGlzYWJsZWRdOmZvY3VzLCAuYnRuLWRhbmdlcltkaXNhYmxlZF0uZm9jdXMsIC5idG4tZGFuZ2VyW2Rpc2FibGVkXTphY3RpdmUsIC5idG4tZGFuZ2VyW2Rpc2FibGVkXS5hY3RpdmUsXG4gIGZpZWxkc2V0W2Rpc2FibGVkXSAuYnRuLWRhbmdlcixcbiAgZmllbGRzZXRbZGlzYWJsZWRdIC5idG4tZGFuZ2VyOmhvdmVyLFxuICBmaWVsZHNldFtkaXNhYmxlZF0gLmJ0bi1kYW5nZXI6Zm9jdXMsXG4gIGZpZWxkc2V0W2Rpc2FibGVkXSAuYnRuLWRhbmdlci5mb2N1cyxcbiAgZmllbGRzZXRbZGlzYWJsZWRdIC5idG4tZGFuZ2VyOmFjdGl2ZSxcbiAgZmllbGRzZXRbZGlzYWJsZWRdIC5idG4tZGFuZ2VyLmFjdGl2ZSB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogI2Q5NTM0ZjtcbiAgICBib3JkZXItY29sb3I6ICNkNDNmM2E7IH1cbiAgLmJ0bi1kYW5nZXIgLmJhZGdlIHtcbiAgICBjb2xvcjogI2Q5NTM0ZjtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmOyB9XG5cbi5idG4tbGluayB7XG4gIGNvbG9yOiAjMzM3YWI3O1xuICBmb250LXdlaWdodDogbm9ybWFsO1xuICBib3JkZXItcmFkaXVzOiAwOyB9XG4gIC5idG4tbGluaywgLmJ0bi1saW5rOmFjdGl2ZSwgLmJ0bi1saW5rLmFjdGl2ZSwgLmJ0bi1saW5rW2Rpc2FibGVkXSxcbiAgZmllbGRzZXRbZGlzYWJsZWRdIC5idG4tbGluayB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7XG4gICAgLXdlYmtpdC1ib3gtc2hhZG93OiBub25lO1xuICAgIGJveC1zaGFkb3c6IG5vbmU7IH1cbiAgLmJ0bi1saW5rLCAuYnRuLWxpbms6aG92ZXIsIC5idG4tbGluazpmb2N1cywgLmJ0bi1saW5rOmFjdGl2ZSB7XG4gICAgYm9yZGVyLWNvbG9yOiB0cmFuc3BhcmVudDsgfVxuICAuYnRuLWxpbms6aG92ZXIsIC5idG4tbGluazpmb2N1cyB7XG4gICAgY29sb3I6ICMyMzUyN2M7XG4gICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7IH1cbiAgLmJ0bi1saW5rW2Rpc2FibGVkXTpob3ZlciwgLmJ0bi1saW5rW2Rpc2FibGVkXTpmb2N1cyxcbiAgZmllbGRzZXRbZGlzYWJsZWRdIC5idG4tbGluazpob3ZlcixcbiAgZmllbGRzZXRbZGlzYWJsZWRdIC5idG4tbGluazpmb2N1cyB7XG4gICAgY29sb3I6ICM3Nzc3Nzc7XG4gICAgdGV4dC1kZWNvcmF0aW9uOiBub25lOyB9XG5cbi5idG4tbGcsIC5idG4tZ3JvdXAtbGcgPiAuYnRuIHtcbiAgcGFkZGluZzogMTBweCAxNnB4O1xuICBmb250LXNpemU6IDE4cHg7XG4gIGxpbmUtaGVpZ2h0OiAxLjMzMzMzMzM7XG4gIGJvcmRlci1yYWRpdXM6IDZweDsgfVxuXG4uYnRuLXNtLCAuYnRuLWdyb3VwLXNtID4gLmJ0biB7XG4gIHBhZGRpbmc6IDVweCAxMHB4O1xuICBmb250LXNpemU6IDEycHg7XG4gIGxpbmUtaGVpZ2h0OiAxLjU7XG4gIGJvcmRlci1yYWRpdXM6IDNweDsgfVxuXG4uYnRuLXhzLCAuYnRuLWdyb3VwLXhzID4gLmJ0biB7XG4gIHBhZGRpbmc6IDFweCA1cHg7XG4gIGZvbnQtc2l6ZTogMTJweDtcbiAgbGluZS1oZWlnaHQ6IDEuNTtcbiAgYm9yZGVyLXJhZGl1czogM3B4OyB9XG5cbi5idG4tYmxvY2sge1xuICBkaXNwbGF5OiBibG9jaztcbiAgd2lkdGg6IDEwMCU7IH1cblxuLmJ0bi1ibG9jayArIC5idG4tYmxvY2sge1xuICBtYXJnaW4tdG9wOiA1cHg7IH1cblxuaW5wdXRbdHlwZT1cInN1Ym1pdFwiXS5idG4tYmxvY2ssXG5pbnB1dFt0eXBlPVwicmVzZXRcIl0uYnRuLWJsb2NrLFxuaW5wdXRbdHlwZT1cImJ1dHRvblwiXS5idG4tYmxvY2sge1xuICB3aWR0aDogMTAwJTsgfVxuXG4uZmFkZSB7XG4gIG9wYWNpdHk6IDA7XG4gIC13ZWJraXQtdHJhbnNpdGlvbjogb3BhY2l0eSAwLjE1cyBsaW5lYXI7XG4gIC1vLXRyYW5zaXRpb246IG9wYWNpdHkgMC4xNXMgbGluZWFyO1xuICB0cmFuc2l0aW9uOiBvcGFjaXR5IDAuMTVzIGxpbmVhcjsgfVxuICAuZmFkZS5pbiB7XG4gICAgb3BhY2l0eTogMTsgfVxuXG4uY29sbGFwc2Uge1xuICBkaXNwbGF5OiBub25lOyB9XG4gIC5jb2xsYXBzZS5pbiB7XG4gICAgZGlzcGxheTogYmxvY2s7IH1cblxudHIuY29sbGFwc2UuaW4ge1xuICBkaXNwbGF5OiB0YWJsZS1yb3c7IH1cblxudGJvZHkuY29sbGFwc2UuaW4ge1xuICBkaXNwbGF5OiB0YWJsZS1yb3ctZ3JvdXA7IH1cblxuLmNvbGxhcHNpbmcge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIGhlaWdodDogMDtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgLXdlYmtpdC10cmFuc2l0aW9uLXByb3BlcnR5OiBoZWlnaHQsIHZpc2liaWxpdHk7XG4gIHRyYW5zaXRpb24tcHJvcGVydHk6IGhlaWdodCwgdmlzaWJpbGl0eTtcbiAgLXdlYmtpdC10cmFuc2l0aW9uLWR1cmF0aW9uOiAwLjM1cztcbiAgdHJhbnNpdGlvbi1kdXJhdGlvbjogMC4zNXM7XG4gIC13ZWJraXQtdHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb246IGVhc2U7XG4gIHRyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uOiBlYXNlOyB9XG5cbi5jYXJldCB7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgd2lkdGg6IDA7XG4gIGhlaWdodDogMDtcbiAgbWFyZ2luLWxlZnQ6IDJweDtcbiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbiAgYm9yZGVyLXRvcDogNHB4IGRhc2hlZDtcbiAgYm9yZGVyLXJpZ2h0OiA0cHggc29saWQgdHJhbnNwYXJlbnQ7XG4gIGJvcmRlci1sZWZ0OiA0cHggc29saWQgdHJhbnNwYXJlbnQ7IH1cblxuLmRyb3B1cCxcbi5kcm9wZG93biB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTsgfVxuXG4uZHJvcGRvd24tdG9nZ2xlOmZvY3VzIHtcbiAgb3V0bGluZTogMDsgfVxuXG4uZHJvcGRvd24tbWVudSB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgdG9wOiAxMDAlO1xuICBsZWZ0OiAwO1xuICB6LWluZGV4OiAxMDAwO1xuICBkaXNwbGF5OiBub25lO1xuICBmbG9hdDogbGVmdDtcbiAgbWluLXdpZHRoOiAxNjBweDtcbiAgcGFkZGluZzogNXB4IDA7XG4gIG1hcmdpbjogMnB4IDAgMDtcbiAgbGlzdC1zdHlsZTogbm9uZTtcbiAgZm9udC1zaXplOiAxNHB4O1xuICB0ZXh0LWFsaWduOiBsZWZ0O1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xuICBib3JkZXI6IDFweCBzb2xpZCAjY2NjO1xuICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDAsIDAsIDAsIDAuMTUpO1xuICBib3JkZXItcmFkaXVzOiA0cHg7XG4gIC13ZWJraXQtYm94LXNoYWRvdzogMCA2cHggMTJweCByZ2JhKDAsIDAsIDAsIDAuMTc1KTtcbiAgYm94LXNoYWRvdzogMCA2cHggMTJweCByZ2JhKDAsIDAsIDAsIDAuMTc1KTtcbiAgYmFja2dyb3VuZC1jbGlwOiBwYWRkaW5nLWJveDsgfVxuICAuZHJvcGRvd24tbWVudS5wdWxsLXJpZ2h0IHtcbiAgICByaWdodDogMDtcbiAgICBsZWZ0OiBhdXRvOyB9XG4gIC5kcm9wZG93bi1tZW51IC5kaXZpZGVyIHtcbiAgICBoZWlnaHQ6IDFweDtcbiAgICBtYXJnaW46IDlweCAwO1xuICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgYmFja2dyb3VuZC1jb2xvcjogI2U1ZTVlNTsgfVxuICAuZHJvcGRvd24tbWVudSA+IGxpID4gYSB7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgcGFkZGluZzogM3B4IDIwcHg7XG4gICAgY2xlYXI6IGJvdGg7XG4gICAgZm9udC13ZWlnaHQ6IG5vcm1hbDtcbiAgICBsaW5lLWhlaWdodDogMS40Mjg1NzE0Mjk7XG4gICAgY29sb3I6ICMzMzMzMzM7XG4gICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsgfVxuXG4uZHJvcGRvd24tbWVudSA+IGxpID4gYTpob3ZlciwgLmRyb3Bkb3duLW1lbnUgPiBsaSA+IGE6Zm9jdXMge1xuICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG4gIGNvbG9yOiAjMjYyNjI2O1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjVmNWY1OyB9XG5cbi5kcm9wZG93bi1tZW51ID4gLmFjdGl2ZSA+IGEsIC5kcm9wZG93bi1tZW51ID4gLmFjdGl2ZSA+IGE6aG92ZXIsIC5kcm9wZG93bi1tZW51ID4gLmFjdGl2ZSA+IGE6Zm9jdXMge1xuICBjb2xvcjogI2ZmZjtcbiAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xuICBvdXRsaW5lOiAwO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMzM3YWI3OyB9XG5cbi5kcm9wZG93bi1tZW51ID4gLmRpc2FibGVkID4gYSwgLmRyb3Bkb3duLW1lbnUgPiAuZGlzYWJsZWQgPiBhOmhvdmVyLCAuZHJvcGRvd24tbWVudSA+IC5kaXNhYmxlZCA+IGE6Zm9jdXMge1xuICBjb2xvcjogIzc3Nzc3NzsgfVxuXG4uZHJvcGRvd24tbWVudSA+IC5kaXNhYmxlZCA+IGE6aG92ZXIsIC5kcm9wZG93bi1tZW51ID4gLmRpc2FibGVkID4gYTpmb2N1cyB7XG4gIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbiAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7XG4gIGJhY2tncm91bmQtaW1hZ2U6IG5vbmU7XG4gIGZpbHRlcjogcHJvZ2lkOkRYSW1hZ2VUcmFuc2Zvcm0uTWljcm9zb2Z0LmdyYWRpZW50KGVuYWJsZWQgPSBmYWxzZSk7XG4gIGN1cnNvcjogbm90LWFsbG93ZWQ7IH1cblxuLm9wZW4gPiAuZHJvcGRvd24tbWVudSB7XG4gIGRpc3BsYXk6IGJsb2NrOyB9XG5cbi5vcGVuID4gYSB7XG4gIG91dGxpbmU6IDA7IH1cblxuLmRyb3Bkb3duLW1lbnUtcmlnaHQge1xuICBsZWZ0OiBhdXRvO1xuICByaWdodDogMDsgfVxuXG4uZHJvcGRvd24tbWVudS1sZWZ0IHtcbiAgbGVmdDogMDtcbiAgcmlnaHQ6IGF1dG87IH1cblxuLmRyb3Bkb3duLW1lbnUtY2VudGVyIHtcbiAgbGVmdDogNTAlO1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTUwJSk7IH1cblxuLmRyb3Bkb3duLWhlYWRlciB7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICBwYWRkaW5nOiAzcHggMjBweDtcbiAgZm9udC1zaXplOiAxMnB4O1xuICBsaW5lLWhlaWdodDogMS40Mjg1NzE0Mjk7XG4gIGNvbG9yOiAjNzc3Nzc3O1xuICB3aGl0ZS1zcGFjZTogbm93cmFwOyB9XG5cbi5kcm9wZG93bi1iYWNrZHJvcCB7XG4gIHBvc2l0aW9uOiBmaXhlZDtcbiAgbGVmdDogMDtcbiAgcmlnaHQ6IDA7XG4gIGJvdHRvbTogMDtcbiAgdG9wOiAwO1xuICB6LWluZGV4OiA5OTA7IH1cblxuLnB1bGwtcmlnaHQgPiAuZHJvcGRvd24tbWVudSB7XG4gIHJpZ2h0OiAwO1xuICBsZWZ0OiBhdXRvOyB9XG5cbi5kcm9wdXAgLmNhcmV0LFxuLm5hdmJhci1maXhlZC1ib3R0b20gLmRyb3Bkb3duIC5jYXJldCB7XG4gIGJvcmRlci10b3A6IDA7XG4gIGJvcmRlci1ib3R0b206IDRweCBzb2xpZDtcbiAgY29udGVudDogXCJcIjsgfVxuXG4uZHJvcHVwIC5kcm9wZG93bi1tZW51LFxuLm5hdmJhci1maXhlZC1ib3R0b20gLmRyb3Bkb3duIC5kcm9wZG93bi1tZW51IHtcbiAgdG9wOiBhdXRvO1xuICBib3R0b206IDEwMCU7XG4gIG1hcmdpbi1ib3R0b206IDJweDsgfVxuXG5AbWVkaWEgKG1pbi13aWR0aDogNzY4cHgpIHtcbiAgLm5hdmJhci1yaWdodCAuZHJvcGRvd24tbWVudSB7XG4gICAgcmlnaHQ6IDA7XG4gICAgbGVmdDogYXV0bzsgfVxuICAubmF2YmFyLXJpZ2h0IC5kcm9wZG93bi1tZW51LWxlZnQge1xuICAgIGxlZnQ6IDA7XG4gICAgcmlnaHQ6IGF1dG87IH0gfVxuXG4uYnRuLWdyb3VwLFxuLmJ0bi1ncm91cC12ZXJ0aWNhbCB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOyB9XG4gIC5idG4tZ3JvdXAgPiAuYnRuLFxuICAuYnRuLWdyb3VwLXZlcnRpY2FsID4gLmJ0biB7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIGZsb2F0OiBsZWZ0OyB9XG4gICAgLmJ0bi1ncm91cCA+IC5idG46aG92ZXIsIC5idG4tZ3JvdXAgPiAuYnRuOmZvY3VzLCAuYnRuLWdyb3VwID4gLmJ0bjphY3RpdmUsIC5idG4tZ3JvdXAgPiAuYnRuLmFjdGl2ZSxcbiAgICAuYnRuLWdyb3VwLXZlcnRpY2FsID4gLmJ0bjpob3ZlcixcbiAgICAuYnRuLWdyb3VwLXZlcnRpY2FsID4gLmJ0bjpmb2N1cyxcbiAgICAuYnRuLWdyb3VwLXZlcnRpY2FsID4gLmJ0bjphY3RpdmUsXG4gICAgLmJ0bi1ncm91cC12ZXJ0aWNhbCA+IC5idG4uYWN0aXZlIHtcbiAgICAgIHotaW5kZXg6IDI7IH1cblxuLmJ0bi1ncm91cCAuYnRuICsgLmJ0bixcbi5idG4tZ3JvdXAgLmJ0biArIC5idG4tZ3JvdXAsXG4uYnRuLWdyb3VwIC5idG4tZ3JvdXAgKyAuYnRuLFxuLmJ0bi1ncm91cCAuYnRuLWdyb3VwICsgLmJ0bi1ncm91cCB7XG4gIG1hcmdpbi1sZWZ0OiAtMXB4OyB9XG5cbi5idG4tdG9vbGJhciB7XG4gIG1hcmdpbi1sZWZ0OiAtNXB4OyB9XG4gIC5idG4tdG9vbGJhcjpiZWZvcmUsIC5idG4tdG9vbGJhcjphZnRlciB7XG4gICAgY29udGVudDogXCIgXCI7XG4gICAgZGlzcGxheTogdGFibGU7IH1cbiAgLmJ0bi10b29sYmFyOmFmdGVyIHtcbiAgICBjbGVhcjogYm90aDsgfVxuICAuYnRuLXRvb2xiYXIgLmJ0bi1ncm91cCxcbiAgLmJ0bi10b29sYmFyIC5pbnB1dC1ncm91cCB7XG4gICAgZmxvYXQ6IGxlZnQ7IH1cbiAgLmJ0bi10b29sYmFyID4gLmJ0bixcbiAgLmJ0bi10b29sYmFyID4gLmJ0bi1ncm91cCxcbiAgLmJ0bi10b29sYmFyID4gLmlucHV0LWdyb3VwIHtcbiAgICBtYXJnaW4tbGVmdDogNXB4OyB9XG5cbi5idG4tZ3JvdXAgPiAuYnRuOm5vdCg6Zmlyc3QtY2hpbGQpOm5vdCg6bGFzdC1jaGlsZCk6bm90KC5kcm9wZG93bi10b2dnbGUpIHtcbiAgYm9yZGVyLXJhZGl1czogMDsgfVxuXG4uYnRuLWdyb3VwID4gLmJ0bjpmaXJzdC1jaGlsZCB7XG4gIG1hcmdpbi1sZWZ0OiAwOyB9XG4gIC5idG4tZ3JvdXAgPiAuYnRuOmZpcnN0LWNoaWxkOm5vdCg6bGFzdC1jaGlsZCk6bm90KC5kcm9wZG93bi10b2dnbGUpIHtcbiAgICBib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czogMDtcbiAgICBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogMDsgfVxuXG4uYnRuLWdyb3VwID4gLmJ0bjpsYXN0LWNoaWxkOm5vdCg6Zmlyc3QtY2hpbGQpLFxuLmJ0bi1ncm91cCA+IC5kcm9wZG93bi10b2dnbGU6bm90KDpmaXJzdC1jaGlsZCkge1xuICBib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOiAwO1xuICBib3JkZXItdG9wLWxlZnQtcmFkaXVzOiAwOyB9XG5cbi5idG4tZ3JvdXAgPiAuYnRuLWdyb3VwIHtcbiAgZmxvYXQ6IGxlZnQ7IH1cblxuLmJ0bi1ncm91cCA+IC5idG4tZ3JvdXA6bm90KDpmaXJzdC1jaGlsZCk6bm90KDpsYXN0LWNoaWxkKSA+IC5idG4ge1xuICBib3JkZXItcmFkaXVzOiAwOyB9XG5cbi5idG4tZ3JvdXAgPiAuYnRuLWdyb3VwOmZpcnN0LWNoaWxkOm5vdCg6bGFzdC1jaGlsZCkgPiAuYnRuOmxhc3QtY2hpbGQsXG4uYnRuLWdyb3VwID4gLmJ0bi1ncm91cDpmaXJzdC1jaGlsZDpub3QoOmxhc3QtY2hpbGQpID4gLmRyb3Bkb3duLXRvZ2dsZSB7XG4gIGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiAwO1xuICBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogMDsgfVxuXG4uYnRuLWdyb3VwID4gLmJ0bi1ncm91cDpsYXN0LWNoaWxkOm5vdCg6Zmlyc3QtY2hpbGQpID4gLmJ0bjpmaXJzdC1jaGlsZCB7XG4gIGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6IDA7XG4gIGJvcmRlci10b3AtbGVmdC1yYWRpdXM6IDA7IH1cblxuLmJ0bi1ncm91cCAuZHJvcGRvd24tdG9nZ2xlOmFjdGl2ZSxcbi5idG4tZ3JvdXAub3BlbiAuZHJvcGRvd24tdG9nZ2xlIHtcbiAgb3V0bGluZTogMDsgfVxuXG4uYnRuLWdyb3VwID4gLmJ0biArIC5kcm9wZG93bi10b2dnbGUge1xuICBwYWRkaW5nLWxlZnQ6IDhweDtcbiAgcGFkZGluZy1yaWdodDogOHB4OyB9XG5cbi5idG4tZ3JvdXAgPiAuYnRuLWxnICsgLmRyb3Bkb3duLXRvZ2dsZSwgLmJ0bi1ncm91cC1sZy5idG4tZ3JvdXAgPiAuYnRuICsgLmRyb3Bkb3duLXRvZ2dsZSB7XG4gIHBhZGRpbmctbGVmdDogMTJweDtcbiAgcGFkZGluZy1yaWdodDogMTJweDsgfVxuXG4uYnRuLWdyb3VwLm9wZW4gLmRyb3Bkb3duLXRvZ2dsZSB7XG4gIC13ZWJraXQtYm94LXNoYWRvdzogaW5zZXQgMCAzcHggNXB4IHJnYmEoMCwgMCwgMCwgMC4xMjUpO1xuICBib3gtc2hhZG93OiBpbnNldCAwIDNweCA1cHggcmdiYSgwLCAwLCAwLCAwLjEyNSk7IH1cbiAgLmJ0bi1ncm91cC5vcGVuIC5kcm9wZG93bi10b2dnbGUuYnRuLWxpbmsge1xuICAgIC13ZWJraXQtYm94LXNoYWRvdzogbm9uZTtcbiAgICBib3gtc2hhZG93OiBub25lOyB9XG5cbi5idG4gLmNhcmV0IHtcbiAgbWFyZ2luLWxlZnQ6IDA7IH1cblxuLmJ0bi1sZyAuY2FyZXQsIC5idG4tZ3JvdXAtbGcgPiAuYnRuIC5jYXJldCB7XG4gIGJvcmRlci13aWR0aDogNXB4IDVweCAwO1xuICBib3JkZXItYm90dG9tLXdpZHRoOiAwOyB9XG5cbi5kcm9wdXAgLmJ0bi1sZyAuY2FyZXQsIC5kcm9wdXAgLmJ0bi1ncm91cC1sZyA+IC5idG4gLmNhcmV0IHtcbiAgYm9yZGVyLXdpZHRoOiAwIDVweCA1cHg7IH1cblxuLmJ0bi1ncm91cC12ZXJ0aWNhbCA+IC5idG4sXG4uYnRuLWdyb3VwLXZlcnRpY2FsID4gLmJ0bi1ncm91cCxcbi5idG4tZ3JvdXAtdmVydGljYWwgPiAuYnRuLWdyb3VwID4gLmJ0biB7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICBmbG9hdDogbm9uZTtcbiAgd2lkdGg6IDEwMCU7XG4gIG1heC13aWR0aDogMTAwJTsgfVxuXG4uYnRuLWdyb3VwLXZlcnRpY2FsID4gLmJ0bi1ncm91cDpiZWZvcmUsIC5idG4tZ3JvdXAtdmVydGljYWwgPiAuYnRuLWdyb3VwOmFmdGVyIHtcbiAgY29udGVudDogXCIgXCI7XG4gIGRpc3BsYXk6IHRhYmxlOyB9XG5cbi5idG4tZ3JvdXAtdmVydGljYWwgPiAuYnRuLWdyb3VwOmFmdGVyIHtcbiAgY2xlYXI6IGJvdGg7IH1cblxuLmJ0bi1ncm91cC12ZXJ0aWNhbCA+IC5idG4tZ3JvdXAgPiAuYnRuIHtcbiAgZmxvYXQ6IG5vbmU7IH1cblxuLmJ0bi1ncm91cC12ZXJ0aWNhbCA+IC5idG4gKyAuYnRuLFxuLmJ0bi1ncm91cC12ZXJ0aWNhbCA+IC5idG4gKyAuYnRuLWdyb3VwLFxuLmJ0bi1ncm91cC12ZXJ0aWNhbCA+IC5idG4tZ3JvdXAgKyAuYnRuLFxuLmJ0bi1ncm91cC12ZXJ0aWNhbCA+IC5idG4tZ3JvdXAgKyAuYnRuLWdyb3VwIHtcbiAgbWFyZ2luLXRvcDogLTFweDtcbiAgbWFyZ2luLWxlZnQ6IDA7IH1cblxuLmJ0bi1ncm91cC12ZXJ0aWNhbCA+IC5idG46bm90KDpmaXJzdC1jaGlsZCk6bm90KDpsYXN0LWNoaWxkKSB7XG4gIGJvcmRlci1yYWRpdXM6IDA7IH1cblxuLmJ0bi1ncm91cC12ZXJ0aWNhbCA+IC5idG46Zmlyc3QtY2hpbGQ6bm90KDpsYXN0LWNoaWxkKSB7XG4gIGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiA0cHg7XG4gIGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiAwO1xuICBib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOiAwOyB9XG5cbi5idG4tZ3JvdXAtdmVydGljYWwgPiAuYnRuOmxhc3QtY2hpbGQ6bm90KDpmaXJzdC1jaGlsZCkge1xuICBib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOiA0cHg7XG4gIGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiAwO1xuICBib3JkZXItdG9wLWxlZnQtcmFkaXVzOiAwOyB9XG5cbi5idG4tZ3JvdXAtdmVydGljYWwgPiAuYnRuLWdyb3VwOm5vdCg6Zmlyc3QtY2hpbGQpOm5vdCg6bGFzdC1jaGlsZCkgPiAuYnRuIHtcbiAgYm9yZGVyLXJhZGl1czogMDsgfVxuXG4uYnRuLWdyb3VwLXZlcnRpY2FsID4gLmJ0bi1ncm91cDpmaXJzdC1jaGlsZDpub3QoOmxhc3QtY2hpbGQpID4gLmJ0bjpsYXN0LWNoaWxkLFxuLmJ0bi1ncm91cC12ZXJ0aWNhbCA+IC5idG4tZ3JvdXA6Zmlyc3QtY2hpbGQ6bm90KDpsYXN0LWNoaWxkKSA+IC5kcm9wZG93bi10b2dnbGUge1xuICBib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czogMDtcbiAgYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czogMDsgfVxuXG4uYnRuLWdyb3VwLXZlcnRpY2FsID4gLmJ0bi1ncm91cDpsYXN0LWNoaWxkOm5vdCg6Zmlyc3QtY2hpbGQpID4gLmJ0bjpmaXJzdC1jaGlsZCB7XG4gIGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiAwO1xuICBib3JkZXItdG9wLWxlZnQtcmFkaXVzOiAwOyB9XG5cbi5idG4tZ3JvdXAtanVzdGlmaWVkIHtcbiAgZGlzcGxheTogdGFibGU7XG4gIHdpZHRoOiAxMDAlO1xuICB0YWJsZS1sYXlvdXQ6IGZpeGVkO1xuICBib3JkZXItY29sbGFwc2U6IHNlcGFyYXRlOyB9XG4gIC5idG4tZ3JvdXAtanVzdGlmaWVkID4gLmJ0bixcbiAgLmJ0bi1ncm91cC1qdXN0aWZpZWQgPiAuYnRuLWdyb3VwIHtcbiAgICBmbG9hdDogbm9uZTtcbiAgICBkaXNwbGF5OiB0YWJsZS1jZWxsO1xuICAgIHdpZHRoOiAxJTsgfVxuICAuYnRuLWdyb3VwLWp1c3RpZmllZCA+IC5idG4tZ3JvdXAgLmJ0biB7XG4gICAgd2lkdGg6IDEwMCU7IH1cbiAgLmJ0bi1ncm91cC1qdXN0aWZpZWQgPiAuYnRuLWdyb3VwIC5kcm9wZG93bi1tZW51IHtcbiAgICBsZWZ0OiBhdXRvOyB9XG5cbltkYXRhLXRvZ2dsZT1cImJ1dHRvbnNcIl0gPiAuYnRuIGlucHV0W3R5cGU9XCJyYWRpb1wiXSxcbltkYXRhLXRvZ2dsZT1cImJ1dHRvbnNcIl0gPiAuYnRuIGlucHV0W3R5cGU9XCJjaGVja2JveFwiXSxcbltkYXRhLXRvZ2dsZT1cImJ1dHRvbnNcIl0gPiAuYnRuLWdyb3VwID4gLmJ0biBpbnB1dFt0eXBlPVwicmFkaW9cIl0sXG5bZGF0YS10b2dnbGU9XCJidXR0b25zXCJdID4gLmJ0bi1ncm91cCA+IC5idG4gaW5wdXRbdHlwZT1cImNoZWNrYm94XCJdIHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICBjbGlwOiByZWN0KDAsIDAsIDAsIDApO1xuICBwb2ludGVyLWV2ZW50czogbm9uZTsgfVxuXG4uaW5wdXQtZ3JvdXAge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIGRpc3BsYXk6IHRhYmxlO1xuICBib3JkZXItY29sbGFwc2U6IHNlcGFyYXRlOyB9XG4gIC5pbnB1dC1ncm91cFtjbGFzcyo9XCJjb2wtXCJdIHtcbiAgICBmbG9hdDogbm9uZTtcbiAgICBwYWRkaW5nLWxlZnQ6IDA7XG4gICAgcGFkZGluZy1yaWdodDogMDsgfVxuICAuaW5wdXQtZ3JvdXAgLmZvcm0tY29udHJvbCB7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIHotaW5kZXg6IDI7XG4gICAgZmxvYXQ6IGxlZnQ7XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgbWFyZ2luLWJvdHRvbTogMDsgfVxuXG4uaW5wdXQtZ3JvdXAtYWRkb24sXG4uaW5wdXQtZ3JvdXAtYnRuLFxuLmlucHV0LWdyb3VwIC5mb3JtLWNvbnRyb2wge1xuICBkaXNwbGF5OiB0YWJsZS1jZWxsOyB9XG4gIC5pbnB1dC1ncm91cC1hZGRvbjpub3QoOmZpcnN0LWNoaWxkKTpub3QoOmxhc3QtY2hpbGQpLFxuICAuaW5wdXQtZ3JvdXAtYnRuOm5vdCg6Zmlyc3QtY2hpbGQpOm5vdCg6bGFzdC1jaGlsZCksXG4gIC5pbnB1dC1ncm91cCAuZm9ybS1jb250cm9sOm5vdCg6Zmlyc3QtY2hpbGQpOm5vdCg6bGFzdC1jaGlsZCkge1xuICAgIGJvcmRlci1yYWRpdXM6IDA7IH1cblxuLmlucHV0LWdyb3VwLWFkZG9uLFxuLmlucHV0LWdyb3VwLWJ0biB7XG4gIHdpZHRoOiAxJTtcbiAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTsgfVxuXG4uaW5wdXQtZ3JvdXAtYWRkb24ge1xuICBwYWRkaW5nOiA2cHggMTJweDtcbiAgZm9udC1zaXplOiAxNHB4O1xuICBmb250LXdlaWdodDogbm9ybWFsO1xuICBsaW5lLWhlaWdodDogMTtcbiAgY29sb3I6ICM1NTU1NTU7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2VlZWVlZTtcbiAgYm9yZGVyOiAxcHggc29saWQgI2NjYztcbiAgYm9yZGVyLXJhZGl1czogNHB4OyB9XG4gIC5pbnB1dC1ncm91cC1hZGRvbi5pbnB1dC1zbSxcbiAgLmlucHV0LWdyb3VwLXNtID4gLmlucHV0LWdyb3VwLWFkZG9uLFxuICAuaW5wdXQtZ3JvdXAtc20gPiAuaW5wdXQtZ3JvdXAtYnRuID4gLmlucHV0LWdyb3VwLWFkZG9uLmJ0biB7XG4gICAgcGFkZGluZzogNXB4IDEwcHg7XG4gICAgZm9udC1zaXplOiAxMnB4O1xuICAgIGJvcmRlci1yYWRpdXM6IDNweDsgfVxuICAuaW5wdXQtZ3JvdXAtYWRkb24uaW5wdXQtbGcsXG4gIC5pbnB1dC1ncm91cC1sZyA+IC5pbnB1dC1ncm91cC1hZGRvbixcbiAgLmlucHV0LWdyb3VwLWxnID4gLmlucHV0LWdyb3VwLWJ0biA+IC5pbnB1dC1ncm91cC1hZGRvbi5idG4ge1xuICAgIHBhZGRpbmc6IDEwcHggMTZweDtcbiAgICBmb250LXNpemU6IDE4cHg7XG4gICAgYm9yZGVyLXJhZGl1czogNnB4OyB9XG4gIC5pbnB1dC1ncm91cC1hZGRvbiBpbnB1dFt0eXBlPVwicmFkaW9cIl0sXG4gIC5pbnB1dC1ncm91cC1hZGRvbiBpbnB1dFt0eXBlPVwiY2hlY2tib3hcIl0ge1xuICAgIG1hcmdpbi10b3A6IDA7IH1cblxuLmlucHV0LWdyb3VwIC5mb3JtLWNvbnRyb2w6Zmlyc3QtY2hpbGQsXG4uaW5wdXQtZ3JvdXAtYWRkb246Zmlyc3QtY2hpbGQsXG4uaW5wdXQtZ3JvdXAtYnRuOmZpcnN0LWNoaWxkID4gLmJ0bixcbi5pbnB1dC1ncm91cC1idG46Zmlyc3QtY2hpbGQgPiAuYnRuLWdyb3VwID4gLmJ0bixcbi5pbnB1dC1ncm91cC1idG46Zmlyc3QtY2hpbGQgPiAuZHJvcGRvd24tdG9nZ2xlLFxuLmlucHV0LWdyb3VwLWJ0bjpsYXN0LWNoaWxkID4gLmJ0bjpub3QoOmxhc3QtY2hpbGQpOm5vdCguZHJvcGRvd24tdG9nZ2xlKSxcbi5pbnB1dC1ncm91cC1idG46bGFzdC1jaGlsZCA+IC5idG4tZ3JvdXA6bm90KDpsYXN0LWNoaWxkKSA+IC5idG4ge1xuICBib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czogMDtcbiAgYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6IDA7IH1cblxuLmlucHV0LWdyb3VwLWFkZG9uOmZpcnN0LWNoaWxkIHtcbiAgYm9yZGVyLXJpZ2h0OiAwOyB9XG5cbi5pbnB1dC1ncm91cCAuZm9ybS1jb250cm9sOmxhc3QtY2hpbGQsXG4uaW5wdXQtZ3JvdXAtYWRkb246bGFzdC1jaGlsZCxcbi5pbnB1dC1ncm91cC1idG46bGFzdC1jaGlsZCA+IC5idG4sXG4uaW5wdXQtZ3JvdXAtYnRuOmxhc3QtY2hpbGQgPiAuYnRuLWdyb3VwID4gLmJ0bixcbi5pbnB1dC1ncm91cC1idG46bGFzdC1jaGlsZCA+IC5kcm9wZG93bi10b2dnbGUsXG4uaW5wdXQtZ3JvdXAtYnRuOmZpcnN0LWNoaWxkID4gLmJ0bjpub3QoOmZpcnN0LWNoaWxkKSxcbi5pbnB1dC1ncm91cC1idG46Zmlyc3QtY2hpbGQgPiAuYnRuLWdyb3VwOm5vdCg6Zmlyc3QtY2hpbGQpID4gLmJ0biB7XG4gIGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6IDA7XG4gIGJvcmRlci10b3AtbGVmdC1yYWRpdXM6IDA7IH1cblxuLmlucHV0LWdyb3VwLWFkZG9uOmxhc3QtY2hpbGQge1xuICBib3JkZXItbGVmdDogMDsgfVxuXG4uaW5wdXQtZ3JvdXAtYnRuIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBmb250LXNpemU6IDA7XG4gIHdoaXRlLXNwYWNlOiBub3dyYXA7IH1cbiAgLmlucHV0LWdyb3VwLWJ0biA+IC5idG4ge1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsgfVxuICAgIC5pbnB1dC1ncm91cC1idG4gPiAuYnRuICsgLmJ0biB7XG4gICAgICBtYXJnaW4tbGVmdDogLTFweDsgfVxuICAgIC5pbnB1dC1ncm91cC1idG4gPiAuYnRuOmhvdmVyLCAuaW5wdXQtZ3JvdXAtYnRuID4gLmJ0bjpmb2N1cywgLmlucHV0LWdyb3VwLWJ0biA+IC5idG46YWN0aXZlIHtcbiAgICAgIHotaW5kZXg6IDI7IH1cbiAgLmlucHV0LWdyb3VwLWJ0bjpmaXJzdC1jaGlsZCA+IC5idG4sXG4gIC5pbnB1dC1ncm91cC1idG46Zmlyc3QtY2hpbGQgPiAuYnRuLWdyb3VwIHtcbiAgICBtYXJnaW4tcmlnaHQ6IC0xcHg7IH1cbiAgLmlucHV0LWdyb3VwLWJ0bjpsYXN0LWNoaWxkID4gLmJ0bixcbiAgLmlucHV0LWdyb3VwLWJ0bjpsYXN0LWNoaWxkID4gLmJ0bi1ncm91cCB7XG4gICAgbWFyZ2luLWxlZnQ6IC0xcHg7IH1cblxuLm5hdiB7XG4gIG1hcmdpbi1ib3R0b206IDA7XG4gIHBhZGRpbmctbGVmdDogMDtcbiAgbGlzdC1zdHlsZTogbm9uZTsgfVxuICAubmF2OmJlZm9yZSwgLm5hdjphZnRlciB7XG4gICAgY29udGVudDogXCIgXCI7XG4gICAgZGlzcGxheTogdGFibGU7IH1cbiAgLm5hdjphZnRlciB7XG4gICAgY2xlYXI6IGJvdGg7IH1cbiAgLm5hdiA+IGxpIHtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgZGlzcGxheTogYmxvY2s7IH1cbiAgICAubmF2ID4gbGkgPiBhIHtcbiAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgcGFkZGluZzogMTBweCAxNXB4OyB9XG4gICAgICAubmF2ID4gbGkgPiBhOmhvdmVyLCAubmF2ID4gbGkgPiBhOmZvY3VzIHtcbiAgICAgICAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZWVlZWVlOyB9XG4gICAgLm5hdiA+IGxpLmRpc2FibGVkID4gYSB7XG4gICAgICBjb2xvcjogIzc3Nzc3NzsgfVxuICAgICAgLm5hdiA+IGxpLmRpc2FibGVkID4gYTpob3ZlciwgLm5hdiA+IGxpLmRpc2FibGVkID4gYTpmb2N1cyB7XG4gICAgICAgIGNvbG9yOiAjNzc3Nzc3O1xuICAgICAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xuICAgICAgICBjdXJzb3I6IG5vdC1hbGxvd2VkOyB9XG4gIC5uYXYgLm9wZW4gPiBhLCAubmF2IC5vcGVuID4gYTpob3ZlciwgLm5hdiAub3BlbiA+IGE6Zm9jdXMge1xuICAgIGJhY2tncm91bmQtY29sb3I6ICNlZWVlZWU7XG4gICAgYm9yZGVyLWNvbG9yOiAjMzM3YWI3OyB9XG4gIC5uYXYgLm5hdi1kaXZpZGVyIHtcbiAgICBoZWlnaHQ6IDFweDtcbiAgICBtYXJnaW46IDlweCAwO1xuICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgYmFja2dyb3VuZC1jb2xvcjogI2U1ZTVlNTsgfVxuICAubmF2ID4gbGkgPiBhID4gaW1nIHtcbiAgICBtYXgtd2lkdGg6IG5vbmU7IH1cblxuLm5hdi10YWJzIHtcbiAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNkZGQ7IH1cbiAgLm5hdi10YWJzID4gbGkge1xuICAgIGZsb2F0OiBsZWZ0O1xuICAgIG1hcmdpbi1ib3R0b206IC0xcHg7IH1cbiAgICAubmF2LXRhYnMgPiBsaSA+IGEge1xuICAgICAgbWFyZ2luLXJpZ2h0OiAycHg7XG4gICAgICBsaW5lLWhlaWdodDogMS40Mjg1NzE0Mjk7XG4gICAgICBib3JkZXI6IDFweCBzb2xpZCB0cmFuc3BhcmVudDtcbiAgICAgIGJvcmRlci1yYWRpdXM6IDRweCA0cHggMCAwOyB9XG4gICAgICAubmF2LXRhYnMgPiBsaSA+IGE6aG92ZXIge1xuICAgICAgICBib3JkZXItY29sb3I6ICNlZWVlZWUgI2VlZWVlZSAjZGRkOyB9XG4gICAgLm5hdi10YWJzID4gbGkuYWN0aXZlID4gYSwgLm5hdi10YWJzID4gbGkuYWN0aXZlID4gYTpob3ZlciwgLm5hdi10YWJzID4gbGkuYWN0aXZlID4gYTpmb2N1cyB7XG4gICAgICBjb2xvcjogIzU1NTU1NTtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6ICNmZmY7XG4gICAgICBib3JkZXI6IDFweCBzb2xpZCAjZGRkO1xuICAgICAgYm9yZGVyLWJvdHRvbS1jb2xvcjogdHJhbnNwYXJlbnQ7XG4gICAgICBjdXJzb3I6IGRlZmF1bHQ7IH1cblxuLm5hdi1waWxscyA+IGxpIHtcbiAgZmxvYXQ6IGxlZnQ7IH1cbiAgLm5hdi1waWxscyA+IGxpID4gYSB7XG4gICAgYm9yZGVyLXJhZGl1czogNHB4OyB9XG4gIC5uYXYtcGlsbHMgPiBsaSArIGxpIHtcbiAgICBtYXJnaW4tbGVmdDogMnB4OyB9XG4gIC5uYXYtcGlsbHMgPiBsaS5hY3RpdmUgPiBhLCAubmF2LXBpbGxzID4gbGkuYWN0aXZlID4gYTpob3ZlciwgLm5hdi1waWxscyA+IGxpLmFjdGl2ZSA+IGE6Zm9jdXMge1xuICAgIGNvbG9yOiAjZmZmO1xuICAgIGJhY2tncm91bmQtY29sb3I6ICMzMzdhYjc7IH1cblxuLm5hdi1zdGFja2VkID4gbGkge1xuICBmbG9hdDogbm9uZTsgfVxuICAubmF2LXN0YWNrZWQgPiBsaSArIGxpIHtcbiAgICBtYXJnaW4tdG9wOiAycHg7XG4gICAgbWFyZ2luLWxlZnQ6IDA7IH1cblxuLm5hdi1qdXN0aWZpZWQsIC5uYXYtdGFicy5uYXYtanVzdGlmaWVkIHtcbiAgd2lkdGg6IDEwMCU7IH1cbiAgLm5hdi1qdXN0aWZpZWQgPiBsaSwgLm5hdi10YWJzLm5hdi1qdXN0aWZpZWQgPiBsaSB7XG4gICAgZmxvYXQ6IG5vbmU7IH1cbiAgICAubmF2LWp1c3RpZmllZCA+IGxpID4gYSwgLm5hdi10YWJzLm5hdi1qdXN0aWZpZWQgPiBsaSA+IGEge1xuICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgICAgbWFyZ2luLWJvdHRvbTogNXB4OyB9XG4gIC5uYXYtanVzdGlmaWVkID4gLmRyb3Bkb3duIC5kcm9wZG93bi1tZW51IHtcbiAgICB0b3A6IGF1dG87XG4gICAgbGVmdDogYXV0bzsgfVxuICBAbWVkaWEgKG1pbi13aWR0aDogNzY4cHgpIHtcbiAgICAubmF2LWp1c3RpZmllZCA+IGxpLCAubmF2LXRhYnMubmF2LWp1c3RpZmllZCA+IGxpIHtcbiAgICAgIGRpc3BsYXk6IHRhYmxlLWNlbGw7XG4gICAgICB3aWR0aDogMSU7IH1cbiAgICAgIC5uYXYtanVzdGlmaWVkID4gbGkgPiBhLCAubmF2LXRhYnMubmF2LWp1c3RpZmllZCA+IGxpID4gYSB7XG4gICAgICAgIG1hcmdpbi1ib3R0b206IDA7IH0gfVxuXG4ubmF2LXRhYnMtanVzdGlmaWVkLCAubmF2LXRhYnMubmF2LWp1c3RpZmllZCB7XG4gIGJvcmRlci1ib3R0b206IDA7IH1cbiAgLm5hdi10YWJzLWp1c3RpZmllZCA+IGxpID4gYSwgLm5hdi10YWJzLm5hdi1qdXN0aWZpZWQgPiBsaSA+IGEge1xuICAgIG1hcmdpbi1yaWdodDogMDtcbiAgICBib3JkZXItcmFkaXVzOiA0cHg7IH1cbiAgLm5hdi10YWJzLWp1c3RpZmllZCA+IC5hY3RpdmUgPiBhLCAubmF2LXRhYnMubmF2LWp1c3RpZmllZCA+IC5hY3RpdmUgPiBhLFxuICAubmF2LXRhYnMtanVzdGlmaWVkID4gLmFjdGl2ZSA+IGE6aG92ZXIsXG4gIC5uYXYtdGFicy5uYXYtanVzdGlmaWVkID4gLmFjdGl2ZSA+IGE6aG92ZXIsXG4gIC5uYXYtdGFicy1qdXN0aWZpZWQgPiAuYWN0aXZlID4gYTpmb2N1cyxcbiAgLm5hdi10YWJzLm5hdi1qdXN0aWZpZWQgPiAuYWN0aXZlID4gYTpmb2N1cyB7XG4gICAgYm9yZGVyOiAxcHggc29saWQgI2RkZDsgfVxuICBAbWVkaWEgKG1pbi13aWR0aDogNzY4cHgpIHtcbiAgICAubmF2LXRhYnMtanVzdGlmaWVkID4gbGkgPiBhLCAubmF2LXRhYnMubmF2LWp1c3RpZmllZCA+IGxpID4gYSB7XG4gICAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgI2RkZDtcbiAgICAgIGJvcmRlci1yYWRpdXM6IDRweCA0cHggMCAwOyB9XG4gICAgLm5hdi10YWJzLWp1c3RpZmllZCA+IC5hY3RpdmUgPiBhLCAubmF2LXRhYnMubmF2LWp1c3RpZmllZCA+IC5hY3RpdmUgPiBhLFxuICAgIC5uYXYtdGFicy1qdXN0aWZpZWQgPiAuYWN0aXZlID4gYTpob3ZlcixcbiAgICAubmF2LXRhYnMubmF2LWp1c3RpZmllZCA+IC5hY3RpdmUgPiBhOmhvdmVyLFxuICAgIC5uYXYtdGFicy1qdXN0aWZpZWQgPiAuYWN0aXZlID4gYTpmb2N1cyxcbiAgICAubmF2LXRhYnMubmF2LWp1c3RpZmllZCA+IC5hY3RpdmUgPiBhOmZvY3VzIHtcbiAgICAgIGJvcmRlci1ib3R0b20tY29sb3I6ICNmZmY7IH0gfVxuXG4udGFiLWNvbnRlbnQgPiAudGFiLXBhbmUge1xuICBkaXNwbGF5OiBub25lOyB9XG5cbi50YWItY29udGVudCA+IC5hY3RpdmUge1xuICBkaXNwbGF5OiBibG9jazsgfVxuXG4ubmF2LXRhYnMgLmRyb3Bkb3duLW1lbnUge1xuICBtYXJnaW4tdG9wOiAtMXB4O1xuICBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogMDtcbiAgYm9yZGVyLXRvcC1sZWZ0LXJhZGl1czogMDsgfVxuXG4ubmF2YmFyIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBtaW4taGVpZ2h0OiA1MHB4O1xuICBtYXJnaW4tYm90dG9tOiAyMHB4O1xuICBib3JkZXI6IDFweCBzb2xpZCB0cmFuc3BhcmVudDsgfVxuICAubmF2YmFyOmJlZm9yZSwgLm5hdmJhcjphZnRlciB7XG4gICAgY29udGVudDogXCIgXCI7XG4gICAgZGlzcGxheTogdGFibGU7IH1cbiAgLm5hdmJhcjphZnRlciB7XG4gICAgY2xlYXI6IGJvdGg7IH1cbiAgQG1lZGlhIChtaW4td2lkdGg6IDc2OHB4KSB7XG4gICAgLm5hdmJhciB7XG4gICAgICBib3JkZXItcmFkaXVzOiA0cHg7IH0gfVxuXG4ubmF2YmFyLWhlYWRlcjpiZWZvcmUsIC5uYXZiYXItaGVhZGVyOmFmdGVyIHtcbiAgY29udGVudDogXCIgXCI7XG4gIGRpc3BsYXk6IHRhYmxlOyB9XG5cbi5uYXZiYXItaGVhZGVyOmFmdGVyIHtcbiAgY2xlYXI6IGJvdGg7IH1cblxuQG1lZGlhIChtaW4td2lkdGg6IDc2OHB4KSB7XG4gIC5uYXZiYXItaGVhZGVyIHtcbiAgICBmbG9hdDogbGVmdDsgfSB9XG5cbi5uYXZiYXItY29sbGFwc2Uge1xuICBvdmVyZmxvdy14OiB2aXNpYmxlO1xuICBwYWRkaW5nLXJpZ2h0OiAxNXB4O1xuICBwYWRkaW5nLWxlZnQ6IDE1cHg7XG4gIGJvcmRlci10b3A6IDFweCBzb2xpZCB0cmFuc3BhcmVudDtcbiAgYm94LXNoYWRvdzogaW5zZXQgMCAxcHggMCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMSk7XG4gIC13ZWJraXQtb3ZlcmZsb3ctc2Nyb2xsaW5nOiB0b3VjaDsgfVxuICAubmF2YmFyLWNvbGxhcHNlOmJlZm9yZSwgLm5hdmJhci1jb2xsYXBzZTphZnRlciB7XG4gICAgY29udGVudDogXCIgXCI7XG4gICAgZGlzcGxheTogdGFibGU7IH1cbiAgLm5hdmJhci1jb2xsYXBzZTphZnRlciB7XG4gICAgY2xlYXI6IGJvdGg7IH1cbiAgLm5hdmJhci1jb2xsYXBzZS5pbiB7XG4gICAgb3ZlcmZsb3cteTogYXV0bzsgfVxuICBAbWVkaWEgKG1pbi13aWR0aDogNzY4cHgpIHtcbiAgICAubmF2YmFyLWNvbGxhcHNlIHtcbiAgICAgIHdpZHRoOiBhdXRvO1xuICAgICAgYm9yZGVyLXRvcDogMDtcbiAgICAgIGJveC1zaGFkb3c6IG5vbmU7IH1cbiAgICAgIC5uYXZiYXItY29sbGFwc2UuY29sbGFwc2Uge1xuICAgICAgICBkaXNwbGF5OiBibG9jayAhaW1wb3J0YW50O1xuICAgICAgICBoZWlnaHQ6IGF1dG8gIWltcG9ydGFudDtcbiAgICAgICAgcGFkZGluZy1ib3R0b206IDA7XG4gICAgICAgIG92ZXJmbG93OiB2aXNpYmxlICFpbXBvcnRhbnQ7IH1cbiAgICAgIC5uYXZiYXItY29sbGFwc2UuaW4ge1xuICAgICAgICBvdmVyZmxvdy15OiB2aXNpYmxlOyB9XG4gICAgICAubmF2YmFyLWZpeGVkLXRvcCAubmF2YmFyLWNvbGxhcHNlLFxuICAgICAgLm5hdmJhci1zdGF0aWMtdG9wIC5uYXZiYXItY29sbGFwc2UsXG4gICAgICAubmF2YmFyLWZpeGVkLWJvdHRvbSAubmF2YmFyLWNvbGxhcHNlIHtcbiAgICAgICAgcGFkZGluZy1sZWZ0OiAwO1xuICAgICAgICBwYWRkaW5nLXJpZ2h0OiAwOyB9IH1cblxuLm5hdmJhci1maXhlZC10b3AgLm5hdmJhci1jb2xsYXBzZSxcbi5uYXZiYXItZml4ZWQtYm90dG9tIC5uYXZiYXItY29sbGFwc2Uge1xuICBtYXgtaGVpZ2h0OiAzNDBweDsgfVxuICBAbWVkaWEgKG1heC1kZXZpY2Utd2lkdGg6IDQ4MHB4KSBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIHtcbiAgICAubmF2YmFyLWZpeGVkLXRvcCAubmF2YmFyLWNvbGxhcHNlLFxuICAgIC5uYXZiYXItZml4ZWQtYm90dG9tIC5uYXZiYXItY29sbGFwc2Uge1xuICAgICAgbWF4LWhlaWdodDogMjAwcHg7IH0gfVxuXG4uY29udGFpbmVyID4gLm5hdmJhci1oZWFkZXIsXG4uY29udGFpbmVyID4gLm5hdmJhci1jb2xsYXBzZSxcbi5jb250YWluZXItZmx1aWQgPiAubmF2YmFyLWhlYWRlcixcbi5jb250YWluZXItZmx1aWQgPiAubmF2YmFyLWNvbGxhcHNlIHtcbiAgbWFyZ2luLXJpZ2h0OiAtMTVweDtcbiAgbWFyZ2luLWxlZnQ6IC0xNXB4OyB9XG4gIEBtZWRpYSAobWluLXdpZHRoOiA3NjhweCkge1xuICAgIC5jb250YWluZXIgPiAubmF2YmFyLWhlYWRlcixcbiAgICAuY29udGFpbmVyID4gLm5hdmJhci1jb2xsYXBzZSxcbiAgICAuY29udGFpbmVyLWZsdWlkID4gLm5hdmJhci1oZWFkZXIsXG4gICAgLmNvbnRhaW5lci1mbHVpZCA+IC5uYXZiYXItY29sbGFwc2Uge1xuICAgICAgbWFyZ2luLXJpZ2h0OiAwO1xuICAgICAgbWFyZ2luLWxlZnQ6IDA7IH0gfVxuXG4ubmF2YmFyLXN0YXRpYy10b3Age1xuICB6LWluZGV4OiAxMDAwO1xuICBib3JkZXItd2lkdGg6IDAgMCAxcHg7IH1cbiAgQG1lZGlhIChtaW4td2lkdGg6IDc2OHB4KSB7XG4gICAgLm5hdmJhci1zdGF0aWMtdG9wIHtcbiAgICAgIGJvcmRlci1yYWRpdXM6IDA7IH0gfVxuXG4ubmF2YmFyLWZpeGVkLXRvcCxcbi5uYXZiYXItZml4ZWQtYm90dG9tIHtcbiAgcG9zaXRpb246IGZpeGVkO1xuICByaWdodDogMDtcbiAgbGVmdDogMDtcbiAgei1pbmRleDogMTAzMDsgfVxuICBAbWVkaWEgKG1pbi13aWR0aDogNzY4cHgpIHtcbiAgICAubmF2YmFyLWZpeGVkLXRvcCxcbiAgICAubmF2YmFyLWZpeGVkLWJvdHRvbSB7XG4gICAgICBib3JkZXItcmFkaXVzOiAwOyB9IH1cblxuLm5hdmJhci1maXhlZC10b3Age1xuICB0b3A6IDA7XG4gIGJvcmRlci13aWR0aDogMCAwIDFweDsgfVxuXG4ubmF2YmFyLWZpeGVkLWJvdHRvbSB7XG4gIGJvdHRvbTogMDtcbiAgbWFyZ2luLWJvdHRvbTogMDtcbiAgYm9yZGVyLXdpZHRoOiAxcHggMCAwOyB9XG5cbi5uYXZiYXItYnJhbmQge1xuICBmbG9hdDogbGVmdDtcbiAgcGFkZGluZzogMTVweCAxNXB4O1xuICBmb250LXNpemU6IDE4cHg7XG4gIGxpbmUtaGVpZ2h0OiAyMHB4O1xuICBoZWlnaHQ6IDUwcHg7IH1cbiAgLm5hdmJhci1icmFuZDpob3ZlciwgLm5hdmJhci1icmFuZDpmb2N1cyB7XG4gICAgdGV4dC1kZWNvcmF0aW9uOiBub25lOyB9XG4gIC5uYXZiYXItYnJhbmQgPiBpbWcge1xuICAgIGRpc3BsYXk6IGJsb2NrOyB9XG4gIEBtZWRpYSAobWluLXdpZHRoOiA3NjhweCkge1xuICAgIC5uYXZiYXIgPiAuY29udGFpbmVyIC5uYXZiYXItYnJhbmQsXG4gICAgLm5hdmJhciA+IC5jb250YWluZXItZmx1aWQgLm5hdmJhci1icmFuZCB7XG4gICAgICBtYXJnaW4tbGVmdDogLTE1cHg7IH0gfVxuXG4ubmF2YmFyLXRvZ2dsZSB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgZmxvYXQ6IHJpZ2h0O1xuICBtYXJnaW4tcmlnaHQ6IDE1cHg7XG4gIHBhZGRpbmc6IDlweCAxMHB4O1xuICBtYXJnaW4tdG9wOiA4cHg7XG4gIG1hcmdpbi1ib3R0b206IDhweDtcbiAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7XG4gIGJhY2tncm91bmQtaW1hZ2U6IG5vbmU7XG4gIGJvcmRlcjogMXB4IHNvbGlkIHRyYW5zcGFyZW50O1xuICBib3JkZXItcmFkaXVzOiA0cHg7IH1cbiAgLm5hdmJhci10b2dnbGU6Zm9jdXMge1xuICAgIG91dGxpbmU6IDA7IH1cbiAgLm5hdmJhci10b2dnbGUgLmljb24tYmFyIHtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgICB3aWR0aDogMjJweDtcbiAgICBoZWlnaHQ6IDJweDtcbiAgICBib3JkZXItcmFkaXVzOiAxcHg7IH1cbiAgLm5hdmJhci10b2dnbGUgLmljb24tYmFyICsgLmljb24tYmFyIHtcbiAgICBtYXJnaW4tdG9wOiA0cHg7IH1cbiAgQG1lZGlhIChtaW4td2lkdGg6IDc2OHB4KSB7XG4gICAgLm5hdmJhci10b2dnbGUge1xuICAgICAgZGlzcGxheTogbm9uZTsgfSB9XG5cbi5uYXZiYXItbmF2IHtcbiAgbWFyZ2luOiA3LjVweCAtMTVweDsgfVxuICAubmF2YmFyLW5hdiA+IGxpID4gYSB7XG4gICAgcGFkZGluZy10b3A6IDEwcHg7XG4gICAgcGFkZGluZy1ib3R0b206IDEwcHg7XG4gICAgbGluZS1oZWlnaHQ6IDIwcHg7IH1cbiAgQG1lZGlhIChtYXgtd2lkdGg6IDc2N3B4KSB7XG4gICAgLm5hdmJhci1uYXYgLm9wZW4gLmRyb3Bkb3duLW1lbnUge1xuICAgICAgcG9zaXRpb246IHN0YXRpYztcbiAgICAgIGZsb2F0OiBub25lO1xuICAgICAgd2lkdGg6IGF1dG87XG4gICAgICBtYXJnaW4tdG9wOiAwO1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7XG4gICAgICBib3JkZXI6IDA7XG4gICAgICBib3gtc2hhZG93OiBub25lOyB9XG4gICAgICAubmF2YmFyLW5hdiAub3BlbiAuZHJvcGRvd24tbWVudSA+IGxpID4gYSxcbiAgICAgIC5uYXZiYXItbmF2IC5vcGVuIC5kcm9wZG93bi1tZW51IC5kcm9wZG93bi1oZWFkZXIge1xuICAgICAgICBwYWRkaW5nOiA1cHggMTVweCA1cHggMjVweDsgfVxuICAgICAgLm5hdmJhci1uYXYgLm9wZW4gLmRyb3Bkb3duLW1lbnUgPiBsaSA+IGEge1xuICAgICAgICBsaW5lLWhlaWdodDogMjBweDsgfVxuICAgICAgICAubmF2YmFyLW5hdiAub3BlbiAuZHJvcGRvd24tbWVudSA+IGxpID4gYTpob3ZlciwgLm5hdmJhci1uYXYgLm9wZW4gLmRyb3Bkb3duLW1lbnUgPiBsaSA+IGE6Zm9jdXMge1xuICAgICAgICAgIGJhY2tncm91bmQtaW1hZ2U6IG5vbmU7IH0gfVxuICBAbWVkaWEgKG1pbi13aWR0aDogNzY4cHgpIHtcbiAgICAubmF2YmFyLW5hdiB7XG4gICAgICBmbG9hdDogbGVmdDtcbiAgICAgIG1hcmdpbjogMDsgfVxuICAgICAgLm5hdmJhci1uYXYgPiBsaSB7XG4gICAgICAgIGZsb2F0OiBsZWZ0OyB9XG4gICAgICAgIC5uYXZiYXItbmF2ID4gbGkgPiBhIHtcbiAgICAgICAgICBwYWRkaW5nLXRvcDogMTVweDtcbiAgICAgICAgICBwYWRkaW5nLWJvdHRvbTogMTVweDsgfSB9XG5cbi5uYXZiYXItZm9ybSB7XG4gIG1hcmdpbi1sZWZ0OiAtMTVweDtcbiAgbWFyZ2luLXJpZ2h0OiAtMTVweDtcbiAgcGFkZGluZzogMTBweCAxNXB4O1xuICBib3JkZXItdG9wOiAxcHggc29saWQgdHJhbnNwYXJlbnQ7XG4gIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCB0cmFuc3BhcmVudDtcbiAgLXdlYmtpdC1ib3gtc2hhZG93OiBpbnNldCAwIDFweCAwIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xKSwgMCAxcHggMCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMSk7XG4gIGJveC1zaGFkb3c6IGluc2V0IDAgMXB4IDAgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEpLCAwIDFweCAwIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xKTtcbiAgbWFyZ2luLXRvcDogOHB4O1xuICBtYXJnaW4tYm90dG9tOiA4cHg7IH1cbiAgQG1lZGlhIChtaW4td2lkdGg6IDc2OHB4KSB7XG4gICAgLm5hdmJhci1mb3JtIC5mb3JtLWdyb3VwIHtcbiAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICAgIG1hcmdpbi1ib3R0b206IDA7XG4gICAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOyB9XG4gICAgLm5hdmJhci1mb3JtIC5mb3JtLWNvbnRyb2wge1xuICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgICAgd2lkdGg6IGF1dG87XG4gICAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOyB9XG4gICAgLm5hdmJhci1mb3JtIC5mb3JtLWNvbnRyb2wtc3RhdGljIHtcbiAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsgfVxuICAgIC5uYXZiYXItZm9ybSAuaW5wdXQtZ3JvdXAge1xuICAgICAgZGlzcGxheTogaW5saW5lLXRhYmxlO1xuICAgICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTsgfVxuICAgICAgLm5hdmJhci1mb3JtIC5pbnB1dC1ncm91cCAuaW5wdXQtZ3JvdXAtYWRkb24sXG4gICAgICAubmF2YmFyLWZvcm0gLmlucHV0LWdyb3VwIC5pbnB1dC1ncm91cC1idG4sXG4gICAgICAubmF2YmFyLWZvcm0gLmlucHV0LWdyb3VwIC5mb3JtLWNvbnRyb2wge1xuICAgICAgICB3aWR0aDogYXV0bzsgfVxuICAgIC5uYXZiYXItZm9ybSAuaW5wdXQtZ3JvdXAgPiAuZm9ybS1jb250cm9sIHtcbiAgICAgIHdpZHRoOiAxMDAlOyB9XG4gICAgLm5hdmJhci1mb3JtIC5jb250cm9sLWxhYmVsIHtcbiAgICAgIG1hcmdpbi1ib3R0b206IDA7XG4gICAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOyB9XG4gICAgLm5hdmJhci1mb3JtIC5yYWRpbyxcbiAgICAubmF2YmFyLWZvcm0gLmNoZWNrYm94IHtcbiAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICAgIG1hcmdpbi10b3A6IDA7XG4gICAgICBtYXJnaW4tYm90dG9tOiAwO1xuICAgICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTsgfVxuICAgICAgLm5hdmJhci1mb3JtIC5yYWRpbyBsYWJlbCxcbiAgICAgIC5uYXZiYXItZm9ybSAuY2hlY2tib3ggbGFiZWwge1xuICAgICAgICBwYWRkaW5nLWxlZnQ6IDA7IH1cbiAgICAubmF2YmFyLWZvcm0gLnJhZGlvIGlucHV0W3R5cGU9XCJyYWRpb1wiXSxcbiAgICAubmF2YmFyLWZvcm0gLmNoZWNrYm94IGlucHV0W3R5cGU9XCJjaGVja2JveFwiXSB7XG4gICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICBtYXJnaW4tbGVmdDogMDsgfVxuICAgIC5uYXZiYXItZm9ybSAuaGFzLWZlZWRiYWNrIC5mb3JtLWNvbnRyb2wtZmVlZGJhY2sge1xuICAgICAgdG9wOiAwOyB9IH1cbiAgQG1lZGlhIChtYXgtd2lkdGg6IDc2N3B4KSB7XG4gICAgLm5hdmJhci1mb3JtIC5mb3JtLWdyb3VwIHtcbiAgICAgIG1hcmdpbi1ib3R0b206IDVweDsgfVxuICAgICAgLm5hdmJhci1mb3JtIC5mb3JtLWdyb3VwOmxhc3QtY2hpbGQge1xuICAgICAgICBtYXJnaW4tYm90dG9tOiAwOyB9IH1cbiAgQG1lZGlhIChtaW4td2lkdGg6IDc2OHB4KSB7XG4gICAgLm5hdmJhci1mb3JtIHtcbiAgICAgIHdpZHRoOiBhdXRvO1xuICAgICAgYm9yZGVyOiAwO1xuICAgICAgbWFyZ2luLWxlZnQ6IDA7XG4gICAgICBtYXJnaW4tcmlnaHQ6IDA7XG4gICAgICBwYWRkaW5nLXRvcDogMDtcbiAgICAgIHBhZGRpbmctYm90dG9tOiAwO1xuICAgICAgLXdlYmtpdC1ib3gtc2hhZG93OiBub25lO1xuICAgICAgYm94LXNoYWRvdzogbm9uZTsgfSB9XG5cbi5uYXZiYXItbmF2ID4gbGkgPiAuZHJvcGRvd24tbWVudSB7XG4gIG1hcmdpbi10b3A6IDA7XG4gIGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiAwO1xuICBib3JkZXItdG9wLWxlZnQtcmFkaXVzOiAwOyB9XG5cbi5uYXZiYXItZml4ZWQtYm90dG9tIC5uYXZiYXItbmF2ID4gbGkgPiAuZHJvcGRvd24tbWVudSB7XG4gIG1hcmdpbi1ib3R0b206IDA7XG4gIGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiA0cHg7XG4gIGJvcmRlci10b3AtbGVmdC1yYWRpdXM6IDRweDtcbiAgYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6IDA7XG4gIGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6IDA7IH1cblxuLm5hdmJhci1idG4ge1xuICBtYXJnaW4tdG9wOiA4cHg7XG4gIG1hcmdpbi1ib3R0b206IDhweDsgfVxuICAubmF2YmFyLWJ0bi5idG4tc20sIC5idG4tZ3JvdXAtc20gPiAubmF2YmFyLWJ0bi5idG4ge1xuICAgIG1hcmdpbi10b3A6IDEwcHg7XG4gICAgbWFyZ2luLWJvdHRvbTogMTBweDsgfVxuICAubmF2YmFyLWJ0bi5idG4teHMsIC5idG4tZ3JvdXAteHMgPiAubmF2YmFyLWJ0bi5idG4ge1xuICAgIG1hcmdpbi10b3A6IDE0cHg7XG4gICAgbWFyZ2luLWJvdHRvbTogMTRweDsgfVxuXG4ubmF2YmFyLXRleHQge1xuICBtYXJnaW4tdG9wOiAxNXB4O1xuICBtYXJnaW4tYm90dG9tOiAxNXB4OyB9XG4gIEBtZWRpYSAobWluLXdpZHRoOiA3NjhweCkge1xuICAgIC5uYXZiYXItdGV4dCB7XG4gICAgICBmbG9hdDogbGVmdDtcbiAgICAgIG1hcmdpbi1sZWZ0OiAxNXB4O1xuICAgICAgbWFyZ2luLXJpZ2h0OiAxNXB4OyB9IH1cblxuQG1lZGlhIChtaW4td2lkdGg6IDc2OHB4KSB7XG4gIC5uYXZiYXItbGVmdCB7XG4gICAgZmxvYXQ6IGxlZnQgIWltcG9ydGFudDsgfVxuICAubmF2YmFyLXJpZ2h0IHtcbiAgICBmbG9hdDogcmlnaHQgIWltcG9ydGFudDtcbiAgICBtYXJnaW4tcmlnaHQ6IC0xNXB4OyB9XG4gICAgLm5hdmJhci1yaWdodCB+IC5uYXZiYXItcmlnaHQge1xuICAgICAgbWFyZ2luLXJpZ2h0OiAwOyB9IH1cblxuLm5hdmJhci1kZWZhdWx0IHtcbiAgYmFja2dyb3VuZC1jb2xvcjogIzRhOGJmYztcbiAgYm9yZGVyLWNvbG9yOiAjNGE4YmZjOyB9XG4gIC5uYXZiYXItZGVmYXVsdCAubmF2YmFyLWJyYW5kIHtcbiAgICBjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjgpOyB9XG4gICAgLm5hdmJhci1kZWZhdWx0IC5uYXZiYXItYnJhbmQ6aG92ZXIsIC5uYXZiYXItZGVmYXVsdCAubmF2YmFyLWJyYW5kOmZvY3VzIHtcbiAgICAgIGNvbG9yOiAjZmZmO1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7IH1cbiAgLm5hdmJhci1kZWZhdWx0IC5uYXZiYXItdGV4dCB7XG4gICAgY29sb3I6ICM3Nzc7IH1cbiAgLm5hdmJhci1kZWZhdWx0IC5uYXZiYXItbmF2ID4gbGkgPiBhIHtcbiAgICBjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjgpOyB9XG4gICAgLm5hdmJhci1kZWZhdWx0IC5uYXZiYXItbmF2ID4gbGkgPiBhOmhvdmVyLCAubmF2YmFyLWRlZmF1bHQgLm5hdmJhci1uYXYgPiBsaSA+IGE6Zm9jdXMge1xuICAgICAgY29sb3I6ICNmZmY7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDsgfVxuICAubmF2YmFyLWRlZmF1bHQgLm5hdmJhci1uYXYgPiAuYWN0aXZlID4gYSwgLm5hdmJhci1kZWZhdWx0IC5uYXZiYXItbmF2ID4gLmFjdGl2ZSA+IGE6aG92ZXIsIC5uYXZiYXItZGVmYXVsdCAubmF2YmFyLW5hdiA+IC5hY3RpdmUgPiBhOmZvY3VzIHtcbiAgICBjb2xvcjogI2ZmZjtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDsgfVxuICAubmF2YmFyLWRlZmF1bHQgLm5hdmJhci1uYXYgPiAuZGlzYWJsZWQgPiBhLCAubmF2YmFyLWRlZmF1bHQgLm5hdmJhci1uYXYgPiAuZGlzYWJsZWQgPiBhOmhvdmVyLCAubmF2YmFyLWRlZmF1bHQgLm5hdmJhci1uYXYgPiAuZGlzYWJsZWQgPiBhOmZvY3VzIHtcbiAgICBjb2xvcjogI2NjYztcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDsgfVxuICAubmF2YmFyLWRlZmF1bHQgLm5hdmJhci10b2dnbGUge1xuICAgIGJvcmRlci1jb2xvcjogI2RkZDsgfVxuICAgIC5uYXZiYXItZGVmYXVsdCAubmF2YmFyLXRvZ2dsZTpob3ZlciwgLm5hdmJhci1kZWZhdWx0IC5uYXZiYXItdG9nZ2xlOmZvY3VzIHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6ICNkZGQ7IH1cbiAgICAubmF2YmFyLWRlZmF1bHQgLm5hdmJhci10b2dnbGUgLmljb24tYmFyIHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6ICM4ODg7IH1cbiAgLm5hdmJhci1kZWZhdWx0IC5uYXZiYXItY29sbGFwc2UsXG4gIC5uYXZiYXItZGVmYXVsdCAubmF2YmFyLWZvcm0ge1xuICAgIGJvcmRlci1jb2xvcjogIzRhOGJmYzsgfVxuICAubmF2YmFyLWRlZmF1bHQgLm5hdmJhci1uYXYgPiAub3BlbiA+IGEsIC5uYXZiYXItZGVmYXVsdCAubmF2YmFyLW5hdiA+IC5vcGVuID4gYTpob3ZlciwgLm5hdmJhci1kZWZhdWx0IC5uYXZiYXItbmF2ID4gLm9wZW4gPiBhOmZvY3VzIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcbiAgICBjb2xvcjogI2ZmZjsgfVxuICBAbWVkaWEgKG1heC13aWR0aDogNzY3cHgpIHtcbiAgICAubmF2YmFyLWRlZmF1bHQgLm5hdmJhci1uYXYgLm9wZW4gLmRyb3Bkb3duLW1lbnUgPiBsaSA+IGEge1xuICAgICAgY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC44KTsgfVxuICAgICAgLm5hdmJhci1kZWZhdWx0IC5uYXZiYXItbmF2IC5vcGVuIC5kcm9wZG93bi1tZW51ID4gbGkgPiBhOmhvdmVyLCAubmF2YmFyLWRlZmF1bHQgLm5hdmJhci1uYXYgLm9wZW4gLmRyb3Bkb3duLW1lbnUgPiBsaSA+IGE6Zm9jdXMge1xuICAgICAgICBjb2xvcjogI2ZmZjtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7IH1cbiAgICAubmF2YmFyLWRlZmF1bHQgLm5hdmJhci1uYXYgLm9wZW4gLmRyb3Bkb3duLW1lbnUgPiAuYWN0aXZlID4gYSwgLm5hdmJhci1kZWZhdWx0IC5uYXZiYXItbmF2IC5vcGVuIC5kcm9wZG93bi1tZW51ID4gLmFjdGl2ZSA+IGE6aG92ZXIsIC5uYXZiYXItZGVmYXVsdCAubmF2YmFyLW5hdiAub3BlbiAuZHJvcGRvd24tbWVudSA+IC5hY3RpdmUgPiBhOmZvY3VzIHtcbiAgICAgIGNvbG9yOiAjZmZmO1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7IH1cbiAgICAubmF2YmFyLWRlZmF1bHQgLm5hdmJhci1uYXYgLm9wZW4gLmRyb3Bkb3duLW1lbnUgPiAuZGlzYWJsZWQgPiBhLCAubmF2YmFyLWRlZmF1bHQgLm5hdmJhci1uYXYgLm9wZW4gLmRyb3Bkb3duLW1lbnUgPiAuZGlzYWJsZWQgPiBhOmhvdmVyLCAubmF2YmFyLWRlZmF1bHQgLm5hdmJhci1uYXYgLm9wZW4gLmRyb3Bkb3duLW1lbnUgPiAuZGlzYWJsZWQgPiBhOmZvY3VzIHtcbiAgICAgIGNvbG9yOiAjY2NjO1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7IH0gfVxuICAubmF2YmFyLWRlZmF1bHQgLm5hdmJhci1saW5rIHtcbiAgICBjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjgpOyB9XG4gICAgLm5hdmJhci1kZWZhdWx0IC5uYXZiYXItbGluazpob3ZlciB7XG4gICAgICBjb2xvcjogI2ZmZjsgfVxuICAubmF2YmFyLWRlZmF1bHQgLmJ0bi1saW5rIHtcbiAgICBjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjgpOyB9XG4gICAgLm5hdmJhci1kZWZhdWx0IC5idG4tbGluazpob3ZlciwgLm5hdmJhci1kZWZhdWx0IC5idG4tbGluazpmb2N1cyB7XG4gICAgICBjb2xvcjogI2ZmZjsgfVxuICAgIC5uYXZiYXItZGVmYXVsdCAuYnRuLWxpbmtbZGlzYWJsZWRdOmhvdmVyLCAubmF2YmFyLWRlZmF1bHQgLmJ0bi1saW5rW2Rpc2FibGVkXTpmb2N1cyxcbiAgICBmaWVsZHNldFtkaXNhYmxlZF0gLm5hdmJhci1kZWZhdWx0IC5idG4tbGluazpob3ZlcixcbiAgICBmaWVsZHNldFtkaXNhYmxlZF0gLm5hdmJhci1kZWZhdWx0IC5idG4tbGluazpmb2N1cyB7XG4gICAgICBjb2xvcjogI2NjYzsgfVxuXG4ubmF2YmFyLWludmVyc2Uge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMjIyO1xuICBib3JkZXItY29sb3I6ICMwOTA4MDg7IH1cbiAgLm5hdmJhci1pbnZlcnNlIC5uYXZiYXItYnJhbmQge1xuICAgIGNvbG9yOiAjOWQ5ZDlkOyB9XG4gICAgLm5hdmJhci1pbnZlcnNlIC5uYXZiYXItYnJhbmQ6aG92ZXIsIC5uYXZiYXItaW52ZXJzZSAubmF2YmFyLWJyYW5kOmZvY3VzIHtcbiAgICAgIGNvbG9yOiAjZmZmO1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7IH1cbiAgLm5hdmJhci1pbnZlcnNlIC5uYXZiYXItdGV4dCB7XG4gICAgY29sb3I6ICM5ZDlkOWQ7IH1cbiAgLm5hdmJhci1pbnZlcnNlIC5uYXZiYXItbmF2ID4gbGkgPiBhIHtcbiAgICBjb2xvcjogIzlkOWQ5ZDsgfVxuICAgIC5uYXZiYXItaW52ZXJzZSAubmF2YmFyLW5hdiA+IGxpID4gYTpob3ZlciwgLm5hdmJhci1pbnZlcnNlIC5uYXZiYXItbmF2ID4gbGkgPiBhOmZvY3VzIHtcbiAgICAgIGNvbG9yOiAjZmZmO1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7IH1cbiAgLm5hdmJhci1pbnZlcnNlIC5uYXZiYXItbmF2ID4gLmFjdGl2ZSA+IGEsIC5uYXZiYXItaW52ZXJzZSAubmF2YmFyLW5hdiA+IC5hY3RpdmUgPiBhOmhvdmVyLCAubmF2YmFyLWludmVyc2UgLm5hdmJhci1uYXYgPiAuYWN0aXZlID4gYTpmb2N1cyB7XG4gICAgY29sb3I6ICNmZmY7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogIzA5MDgwODsgfVxuICAubmF2YmFyLWludmVyc2UgLm5hdmJhci1uYXYgPiAuZGlzYWJsZWQgPiBhLCAubmF2YmFyLWludmVyc2UgLm5hdmJhci1uYXYgPiAuZGlzYWJsZWQgPiBhOmhvdmVyLCAubmF2YmFyLWludmVyc2UgLm5hdmJhci1uYXYgPiAuZGlzYWJsZWQgPiBhOmZvY3VzIHtcbiAgICBjb2xvcjogIzQ0NDtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDsgfVxuICAubmF2YmFyLWludmVyc2UgLm5hdmJhci10b2dnbGUge1xuICAgIGJvcmRlci1jb2xvcjogIzMzMzsgfVxuICAgIC5uYXZiYXItaW52ZXJzZSAubmF2YmFyLXRvZ2dsZTpob3ZlciwgLm5hdmJhci1pbnZlcnNlIC5uYXZiYXItdG9nZ2xlOmZvY3VzIHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6ICMzMzM7IH1cbiAgICAubmF2YmFyLWludmVyc2UgLm5hdmJhci10b2dnbGUgLmljb24tYmFyIHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6ICNmZmY7IH1cbiAgLm5hdmJhci1pbnZlcnNlIC5uYXZiYXItY29sbGFwc2UsXG4gIC5uYXZiYXItaW52ZXJzZSAubmF2YmFyLWZvcm0ge1xuICAgIGJvcmRlci1jb2xvcjogIzEwMTAxMDsgfVxuICAubmF2YmFyLWludmVyc2UgLm5hdmJhci1uYXYgPiAub3BlbiA+IGEsIC5uYXZiYXItaW52ZXJzZSAubmF2YmFyLW5hdiA+IC5vcGVuID4gYTpob3ZlciwgLm5hdmJhci1pbnZlcnNlIC5uYXZiYXItbmF2ID4gLm9wZW4gPiBhOmZvY3VzIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDkwODA4O1xuICAgIGNvbG9yOiAjZmZmOyB9XG4gIEBtZWRpYSAobWF4LXdpZHRoOiA3NjdweCkge1xuICAgIC5uYXZiYXItaW52ZXJzZSAubmF2YmFyLW5hdiAub3BlbiAuZHJvcGRvd24tbWVudSA+IC5kcm9wZG93bi1oZWFkZXIge1xuICAgICAgYm9yZGVyLWNvbG9yOiAjMDkwODA4OyB9XG4gICAgLm5hdmJhci1pbnZlcnNlIC5uYXZiYXItbmF2IC5vcGVuIC5kcm9wZG93bi1tZW51IC5kaXZpZGVyIHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6ICMwOTA4MDg7IH1cbiAgICAubmF2YmFyLWludmVyc2UgLm5hdmJhci1uYXYgLm9wZW4gLmRyb3Bkb3duLW1lbnUgPiBsaSA+IGEge1xuICAgICAgY29sb3I6ICM5ZDlkOWQ7IH1cbiAgICAgIC5uYXZiYXItaW52ZXJzZSAubmF2YmFyLW5hdiAub3BlbiAuZHJvcGRvd24tbWVudSA+IGxpID4gYTpob3ZlciwgLm5hdmJhci1pbnZlcnNlIC5uYXZiYXItbmF2IC5vcGVuIC5kcm9wZG93bi1tZW51ID4gbGkgPiBhOmZvY3VzIHtcbiAgICAgICAgY29sb3I6ICNmZmY7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50OyB9XG4gICAgLm5hdmJhci1pbnZlcnNlIC5uYXZiYXItbmF2IC5vcGVuIC5kcm9wZG93bi1tZW51ID4gLmFjdGl2ZSA+IGEsIC5uYXZiYXItaW52ZXJzZSAubmF2YmFyLW5hdiAub3BlbiAuZHJvcGRvd24tbWVudSA+IC5hY3RpdmUgPiBhOmhvdmVyLCAubmF2YmFyLWludmVyc2UgLm5hdmJhci1uYXYgLm9wZW4gLmRyb3Bkb3duLW1lbnUgPiAuYWN0aXZlID4gYTpmb2N1cyB7XG4gICAgICBjb2xvcjogI2ZmZjtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6ICMwOTA4MDg7IH1cbiAgICAubmF2YmFyLWludmVyc2UgLm5hdmJhci1uYXYgLm9wZW4gLmRyb3Bkb3duLW1lbnUgPiAuZGlzYWJsZWQgPiBhLCAubmF2YmFyLWludmVyc2UgLm5hdmJhci1uYXYgLm9wZW4gLmRyb3Bkb3duLW1lbnUgPiAuZGlzYWJsZWQgPiBhOmhvdmVyLCAubmF2YmFyLWludmVyc2UgLm5hdmJhci1uYXYgLm9wZW4gLmRyb3Bkb3duLW1lbnUgPiAuZGlzYWJsZWQgPiBhOmZvY3VzIHtcbiAgICAgIGNvbG9yOiAjNDQ0O1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7IH0gfVxuICAubmF2YmFyLWludmVyc2UgLm5hdmJhci1saW5rIHtcbiAgICBjb2xvcjogIzlkOWQ5ZDsgfVxuICAgIC5uYXZiYXItaW52ZXJzZSAubmF2YmFyLWxpbms6aG92ZXIge1xuICAgICAgY29sb3I6ICNmZmY7IH1cbiAgLm5hdmJhci1pbnZlcnNlIC5idG4tbGluayB7XG4gICAgY29sb3I6ICM5ZDlkOWQ7IH1cbiAgICAubmF2YmFyLWludmVyc2UgLmJ0bi1saW5rOmhvdmVyLCAubmF2YmFyLWludmVyc2UgLmJ0bi1saW5rOmZvY3VzIHtcbiAgICAgIGNvbG9yOiAjZmZmOyB9XG4gICAgLm5hdmJhci1pbnZlcnNlIC5idG4tbGlua1tkaXNhYmxlZF06aG92ZXIsIC5uYXZiYXItaW52ZXJzZSAuYnRuLWxpbmtbZGlzYWJsZWRdOmZvY3VzLFxuICAgIGZpZWxkc2V0W2Rpc2FibGVkXSAubmF2YmFyLWludmVyc2UgLmJ0bi1saW5rOmhvdmVyLFxuICAgIGZpZWxkc2V0W2Rpc2FibGVkXSAubmF2YmFyLWludmVyc2UgLmJ0bi1saW5rOmZvY3VzIHtcbiAgICAgIGNvbG9yOiAjNDQ0OyB9XG5cbi5uYXZiYXItZGVmYXVsdC5uYXZiYXItc3RpY2t5IHtcbiAgcG9zaXRpb246IGZpeGVkO1xuICB0b3A6IDA7XG4gIGxlZnQ6IDA7XG4gIHJpZ2h0OiAwO1xuICB6LWluZGV4OiA5OTk5O1xuICBwYWRkaW5nOiAxMHB4IDA7XG4gIG9wYWNpdHk6IDA7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlM2QoMCwgLTEwMCUsIDApO1xuICBib3gtc2hhZG93OiAwIDJweCA2cHggMCByZ2JhKDAsIDAsIDAsIDAuMDcpO1xuICBiYWNrZ3JvdW5kOiAjZmZmOyB9XG4gIEBzdXBwb3J0cyAoYmFja2Ryb3AtZmlsdGVyOiBzYXR1cmF0ZSgxODAlKSBibHVyKDIwcHgpKSB7XG4gICAgLm5hdmJhci1kZWZhdWx0Lm5hdmJhci1zdGlja3kge1xuICAgICAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjkpO1xuICAgICAgYmFja2Ryb3AtZmlsdGVyOiBzYXR1cmF0ZSgxODAlKSBibHVyKDIwcHgpOyB9IH1cbiAgLm5hdmJhci1kZWZhdWx0Lm5hdmJhci1zdGlja3kgLm5hdmJhci1uYXYgPiBsaS5oZWFkZXItYnRuLXdoaXRlIGEge1xuICAgIGJhY2tncm91bmQtY29sb3I6ICM0ODhhZmY7XG4gICAgY29sb3I6ICNmZmY7IH1cbiAgICAubmF2YmFyLWRlZmF1bHQubmF2YmFyLXN0aWNreSAubmF2YmFyLW5hdiA+IGxpLmhlYWRlci1idG4td2hpdGUgYTpob3ZlciB7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDc0LCAxMzksIDI1MiwgMC45KTtcbiAgICAgIGNvbG9yOiAjZmZmOyB9XG4gIC5uYXZiYXItZGVmYXVsdC5uYXZiYXItc3RpY2t5LS1zaG93LCAubmF2YmFyLWRlZmF1bHQubmF2YmFyLXN0aWNreS0taGlkZSB7XG4gICAgYW5pbWF0aW9uLWZpbGwtbW9kZTogZm9yd2FyZHM7IH1cbiAgLm5hdmJhci1kZWZhdWx0Lm5hdmJhci1zdGlja3ktLWhpZGUge1xuICAgIGFuaW1hdGlvbi1kdXJhdGlvbjogMC4xcztcbiAgICBhbmltYXRpb24tbmFtZTogc2xpZGV1cDsgfVxuXG5Aa2V5ZnJhbWVzIHNsaWRldXAge1xuICAwJSB7XG4gICAgb3BhY2l0eTogMTtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZTNkKDAsIDAsIDApOyB9XG4gIDEwMCUge1xuICAgIG9wYWNpdHk6IDA7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUzZCgwLCAtMTAwJSwgMCk7IH0gfVxuICAubmF2YmFyLWRlZmF1bHQubmF2YmFyLXN0aWNreS0tc2hvdyB7XG4gICAgYW5pbWF0aW9uLWR1cmF0aW9uOiAwLjVzO1xuICAgIGFuaW1hdGlvbi1uYW1lOiBzbGlkZWRvd247XG4gICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKDAuMDc1LCAwLjgyLCAwLjE2NSwgMSk7IH1cblxuQGtleWZyYW1lcyBzbGlkZWRvd24ge1xuICAwJSB7XG4gICAgb3BhY2l0eTogMDtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZTNkKDAsIC0xMDAlLCAwKTsgfVxuICAxJSB7XG4gICAgb3BhY2l0eTogMTsgfVxuICAxMDAlIHtcbiAgICBvcGFjaXR5OiAxO1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlM2QoMCwgMCwgMCk7IH0gfVxuICBAbWVkaWEgKG1heC13aWR0aDogNzY3cHgpIHtcbiAgICAubmF2YmFyLWRlZmF1bHQubmF2YmFyLXN0aWNreSB7XG4gICAgICBkaXNwbGF5OiBub25lOyB9IH1cblxuLmJhZGdlIHtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICBtaW4td2lkdGg6IDEwcHg7XG4gIHBhZGRpbmc6IDNweCA3cHg7XG4gIGZvbnQtc2l6ZTogMTJweDtcbiAgZm9udC13ZWlnaHQ6IGJvbGQ7XG4gIGNvbG9yOiAjZmZmO1xuICBsaW5lLWhlaWdodDogMTtcbiAgdmVydGljYWwtYWxpZ246IGJhc2VsaW5lO1xuICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIGJhY2tncm91bmQtY29sb3I6ICM3Nzc3Nzc7XG4gIGJvcmRlci1yYWRpdXM6IDEwcHg7IH1cbiAgLmJhZGdlOmVtcHR5IHtcbiAgICBkaXNwbGF5OiBub25lOyB9XG4gIC5idG4gLmJhZGdlIHtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgdG9wOiAtMXB4OyB9XG4gIC5idG4teHMgLmJhZGdlLCAuYnRuLWdyb3VwLXhzID4gLmJ0biAuYmFkZ2UsXG4gIC5idG4tZ3JvdXAteHMgPiAuYnRuIC5iYWRnZSB7XG4gICAgdG9wOiAwO1xuICAgIHBhZGRpbmc6IDFweCA1cHg7IH1cbiAgLmxpc3QtZ3JvdXAtaXRlbS5hY3RpdmUgPiAuYmFkZ2UsXG4gIC5uYXYtcGlsbHMgPiAuYWN0aXZlID4gYSA+IC5iYWRnZSB7XG4gICAgY29sb3I6ICMzMzdhYjc7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjsgfVxuICAubGlzdC1ncm91cC1pdGVtID4gLmJhZGdlIHtcbiAgICBmbG9hdDogcmlnaHQ7IH1cbiAgLmxpc3QtZ3JvdXAtaXRlbSA+IC5iYWRnZSArIC5iYWRnZSB7XG4gICAgbWFyZ2luLXJpZ2h0OiA1cHg7IH1cbiAgLm5hdi1waWxscyA+IGxpID4gYSA+IC5iYWRnZSB7XG4gICAgbWFyZ2luLWxlZnQ6IDNweDsgfVxuXG5hLmJhZGdlOmhvdmVyLCBhLmJhZGdlOmZvY3VzIHtcbiAgY29sb3I6ICNmZmY7XG4gIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbiAgY3Vyc29yOiBwb2ludGVyOyB9XG5cbi5tb2RhbC1vcGVuIHtcbiAgb3ZlcmZsb3c6IGhpZGRlbjsgfVxuXG4ubW9kYWwge1xuICBkaXNwbGF5OiBub25lO1xuICBvdmVyZmxvdzogaGlkZGVuO1xuICBwb3NpdGlvbjogZml4ZWQ7XG4gIHRvcDogMDtcbiAgcmlnaHQ6IDA7XG4gIGJvdHRvbTogMDtcbiAgbGVmdDogMDtcbiAgei1pbmRleDogMTA1MDtcbiAgLXdlYmtpdC1vdmVyZmxvdy1zY3JvbGxpbmc6IHRvdWNoO1xuICBvdXRsaW5lOiAwOyB9XG4gIC5tb2RhbC5mYWRlIC5tb2RhbC1kaWFsb2cge1xuICAgIC13ZWJraXQtdHJhbnNmb3JtOiB0cmFuc2xhdGUoMCwgLTI1JSk7XG4gICAgLW1zLXRyYW5zZm9ybTogdHJhbnNsYXRlKDAsIC0yNSUpO1xuICAgIC1vLXRyYW5zZm9ybTogdHJhbnNsYXRlKDAsIC0yNSUpO1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlKDAsIC0yNSUpO1xuICAgIC13ZWJraXQtdHJhbnNpdGlvbjogLXdlYmtpdC10cmFuc2Zvcm0gMC4zcyBlYXNlLW91dDtcbiAgICAtbW96LXRyYW5zaXRpb246IC1tb3otdHJhbnNmb3JtIDAuM3MgZWFzZS1vdXQ7XG4gICAgLW8tdHJhbnNpdGlvbjogLW8tdHJhbnNmb3JtIDAuM3MgZWFzZS1vdXQ7XG4gICAgdHJhbnNpdGlvbjogdHJhbnNmb3JtIDAuM3MgZWFzZS1vdXQ7IH1cbiAgLm1vZGFsLmluIC5tb2RhbC1kaWFsb2cge1xuICAgIC13ZWJraXQtdHJhbnNmb3JtOiB0cmFuc2xhdGUoMCwgMCk7XG4gICAgLW1zLXRyYW5zZm9ybTogdHJhbnNsYXRlKDAsIDApO1xuICAgIC1vLXRyYW5zZm9ybTogdHJhbnNsYXRlKDAsIDApO1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlKDAsIDApOyB9XG5cbi5tb2RhbC1vcGVuIC5tb2RhbCB7XG4gIG92ZXJmbG93LXg6IGhpZGRlbjtcbiAgb3ZlcmZsb3cteTogYXV0bzsgfVxuXG4ubW9kYWwtZGlhbG9nIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICB3aWR0aDogYXV0bztcbiAgbWFyZ2luOiAxMHB4OyB9XG5cbi5tb2RhbC1jb250ZW50IHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xuICBib3JkZXI6IDFweCBzb2xpZCAjOTk5O1xuICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDAsIDAsIDAsIDAuMik7XG4gIGJvcmRlci1yYWRpdXM6IDZweDtcbiAgLXdlYmtpdC1ib3gtc2hhZG93OiAwIDNweCA5cHggcmdiYSgwLCAwLCAwLCAwLjUpO1xuICBib3gtc2hhZG93OiAwIDNweCA5cHggcmdiYSgwLCAwLCAwLCAwLjUpO1xuICBiYWNrZ3JvdW5kLWNsaXA6IHBhZGRpbmctYm94O1xuICBvdXRsaW5lOiAwOyB9XG5cbi5tb2RhbC1iYWNrZHJvcCB7XG4gIHBvc2l0aW9uOiBmaXhlZDtcbiAgdG9wOiAwO1xuICByaWdodDogMDtcbiAgYm90dG9tOiAwO1xuICBsZWZ0OiAwO1xuICB6LWluZGV4OiAxMDQwO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDAwOyB9XG4gIC5tb2RhbC1iYWNrZHJvcC5mYWRlIHtcbiAgICBvcGFjaXR5OiAwO1xuICAgIGZpbHRlcjogYWxwaGEob3BhY2l0eT0wKTsgfVxuICAubW9kYWwtYmFja2Ryb3AuaW4ge1xuICAgIG9wYWNpdHk6IDAuNTtcbiAgICBmaWx0ZXI6IGFscGhhKG9wYWNpdHk9NTApOyB9XG5cbi5tb2RhbC1oZWFkZXIge1xuICBwYWRkaW5nOiAxNXB4O1xuICBib3JkZXItYm90dG9tOiAxcHggc29saWQgI2U1ZTVlNTtcbiAgbWluLWhlaWdodDogMTYuNDI4NTcxNDI5cHg7IH1cblxuLm1vZGFsLWhlYWRlciAuY2xvc2Uge1xuICBtYXJnaW4tdG9wOiAtMnB4OyB9XG5cbi5tb2RhbC10aXRsZSB7XG4gIG1hcmdpbjogMDtcbiAgbGluZS1oZWlnaHQ6IDEuNDI4NTcxNDI5OyB9XG5cbi5tb2RhbC1ib2R5IHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBwYWRkaW5nOiAxNXB4OyB9XG5cbi5tb2RhbC1mb290ZXIge1xuICBwYWRkaW5nOiAxNXB4O1xuICB0ZXh0LWFsaWduOiByaWdodDtcbiAgYm9yZGVyLXRvcDogMXB4IHNvbGlkICNlNWU1ZTU7IH1cbiAgLm1vZGFsLWZvb3RlcjpiZWZvcmUsIC5tb2RhbC1mb290ZXI6YWZ0ZXIge1xuICAgIGNvbnRlbnQ6IFwiIFwiO1xuICAgIGRpc3BsYXk6IHRhYmxlOyB9XG4gIC5tb2RhbC1mb290ZXI6YWZ0ZXIge1xuICAgIGNsZWFyOiBib3RoOyB9XG4gIC5tb2RhbC1mb290ZXIgLmJ0biArIC5idG4ge1xuICAgIG1hcmdpbi1sZWZ0OiA1cHg7XG4gICAgbWFyZ2luLWJvdHRvbTogMDsgfVxuICAubW9kYWwtZm9vdGVyIC5idG4tZ3JvdXAgLmJ0biArIC5idG4ge1xuICAgIG1hcmdpbi1sZWZ0OiAtMXB4OyB9XG4gIC5tb2RhbC1mb290ZXIgLmJ0bi1ibG9jayArIC5idG4tYmxvY2sge1xuICAgIG1hcmdpbi1sZWZ0OiAwOyB9XG5cbi5tb2RhbC1zY3JvbGxiYXItbWVhc3VyZSB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgdG9wOiAtOTk5OXB4O1xuICB3aWR0aDogNTBweDtcbiAgaGVpZ2h0OiA1MHB4O1xuICBvdmVyZmxvdzogc2Nyb2xsOyB9XG5cbkBtZWRpYSAobWluLXdpZHRoOiA3NjhweCkge1xuICAubW9kYWwtZGlhbG9nIHtcbiAgICB3aWR0aDogNjAwcHg7XG4gICAgbWFyZ2luOiAzMHB4IGF1dG87IH1cbiAgLm1vZGFsLWNvbnRlbnQge1xuICAgIC13ZWJraXQtYm94LXNoYWRvdzogMCA1cHggMTVweCByZ2JhKDAsIDAsIDAsIDAuNSk7XG4gICAgYm94LXNoYWRvdzogMCA1cHggMTVweCByZ2JhKDAsIDAsIDAsIDAuNSk7IH1cbiAgLm1vZGFsLXNtIHtcbiAgICB3aWR0aDogMzAwcHg7IH0gfVxuXG5AbWVkaWEgKG1pbi13aWR0aDogOTkycHgpIHtcbiAgLm1vZGFsLWxnIHtcbiAgICB3aWR0aDogOTAwcHg7IH0gfVxuXG4udG9vbHRpcCB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgei1pbmRleDogMTA3MDtcbiAgZGlzcGxheTogYmxvY2s7XG4gIGZvbnQtZmFtaWx5OiBcIkhlbHZldGljYSBOZXVlXCIsIEhlbHZldGljYSwgQXJpYWwsIHNhbnMtc2VyaWY7XG4gIGZvbnQtc2l6ZTogMTJweDtcbiAgZm9udC13ZWlnaHQ6IG5vcm1hbDtcbiAgbGluZS1oZWlnaHQ6IDEuNDtcbiAgb3BhY2l0eTogMDtcbiAgZmlsdGVyOiBhbHBoYShvcGFjaXR5PTApOyB9XG4gIC50b29sdGlwLmluIHtcbiAgICBvcGFjaXR5OiAwLjk7XG4gICAgZmlsdGVyOiBhbHBoYShvcGFjaXR5PTkwKTsgfVxuICAudG9vbHRpcC50b3Age1xuICAgIG1hcmdpbi10b3A6IC0zcHg7XG4gICAgcGFkZGluZzogNXB4IDA7IH1cbiAgLnRvb2x0aXAucmlnaHQge1xuICAgIG1hcmdpbi1sZWZ0OiAzcHg7XG4gICAgcGFkZGluZzogMCA1cHg7IH1cbiAgLnRvb2x0aXAuYm90dG9tIHtcbiAgICBtYXJnaW4tdG9wOiAzcHg7XG4gICAgcGFkZGluZzogNXB4IDA7IH1cbiAgLnRvb2x0aXAubGVmdCB7XG4gICAgbWFyZ2luLWxlZnQ6IC0zcHg7XG4gICAgcGFkZGluZzogMCA1cHg7IH1cblxuLnRvb2x0aXAtaW5uZXIge1xuICBtYXgtd2lkdGg6IDIwMHB4O1xuICBwYWRkaW5nOiAzcHggOHB4O1xuICBjb2xvcjogI2ZmZjtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG4gIGJhY2tncm91bmQtY29sb3I6ICMwMDA7XG4gIGJvcmRlci1yYWRpdXM6IDRweDsgfVxuXG4udG9vbHRpcC1hcnJvdyB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgd2lkdGg6IDA7XG4gIGhlaWdodDogMDtcbiAgYm9yZGVyLWNvbG9yOiB0cmFuc3BhcmVudDtcbiAgYm9yZGVyLXN0eWxlOiBzb2xpZDsgfVxuXG4udG9vbHRpcC50b3AgLnRvb2x0aXAtYXJyb3cge1xuICBib3R0b206IDA7XG4gIGxlZnQ6IDUwJTtcbiAgbWFyZ2luLWxlZnQ6IC01cHg7XG4gIGJvcmRlci13aWR0aDogNXB4IDVweCAwO1xuICBib3JkZXItdG9wLWNvbG9yOiAjMDAwOyB9XG5cbi50b29sdGlwLnRvcC1sZWZ0IC50b29sdGlwLWFycm93IHtcbiAgYm90dG9tOiAwO1xuICByaWdodDogNXB4O1xuICBtYXJnaW4tYm90dG9tOiAtNXB4O1xuICBib3JkZXItd2lkdGg6IDVweCA1cHggMDtcbiAgYm9yZGVyLXRvcC1jb2xvcjogIzAwMDsgfVxuXG4udG9vbHRpcC50b3AtcmlnaHQgLnRvb2x0aXAtYXJyb3cge1xuICBib3R0b206IDA7XG4gIGxlZnQ6IDVweDtcbiAgbWFyZ2luLWJvdHRvbTogLTVweDtcbiAgYm9yZGVyLXdpZHRoOiA1cHggNXB4IDA7XG4gIGJvcmRlci10b3AtY29sb3I6ICMwMDA7IH1cblxuLnRvb2x0aXAucmlnaHQgLnRvb2x0aXAtYXJyb3cge1xuICB0b3A6IDUwJTtcbiAgbGVmdDogMDtcbiAgbWFyZ2luLXRvcDogLTVweDtcbiAgYm9yZGVyLXdpZHRoOiA1cHggNXB4IDVweCAwO1xuICBib3JkZXItcmlnaHQtY29sb3I6ICMwMDA7IH1cblxuLnRvb2x0aXAubGVmdCAudG9vbHRpcC1hcnJvdyB7XG4gIHRvcDogNTAlO1xuICByaWdodDogMDtcbiAgbWFyZ2luLXRvcDogLTVweDtcbiAgYm9yZGVyLXdpZHRoOiA1cHggMCA1cHggNXB4O1xuICBib3JkZXItbGVmdC1jb2xvcjogIzAwMDsgfVxuXG4udG9vbHRpcC5ib3R0b20gLnRvb2x0aXAtYXJyb3cge1xuICB0b3A6IDA7XG4gIGxlZnQ6IDUwJTtcbiAgbWFyZ2luLWxlZnQ6IC01cHg7XG4gIGJvcmRlci13aWR0aDogMCA1cHggNXB4O1xuICBib3JkZXItYm90dG9tLWNvbG9yOiAjMDAwOyB9XG5cbi50b29sdGlwLmJvdHRvbS1sZWZ0IC50b29sdGlwLWFycm93IHtcbiAgdG9wOiAwO1xuICByaWdodDogNXB4O1xuICBtYXJnaW4tdG9wOiAtNXB4O1xuICBib3JkZXItd2lkdGg6IDAgNXB4IDVweDtcbiAgYm9yZGVyLWJvdHRvbS1jb2xvcjogIzAwMDsgfVxuXG4udG9vbHRpcC5ib3R0b20tcmlnaHQgLnRvb2x0aXAtYXJyb3cge1xuICB0b3A6IDA7XG4gIGxlZnQ6IDVweDtcbiAgbWFyZ2luLXRvcDogLTVweDtcbiAgYm9yZGVyLXdpZHRoOiAwIDVweCA1cHg7XG4gIGJvcmRlci1ib3R0b20tY29sb3I6ICMwMDA7IH1cblxuLmNsZWFyZml4OmJlZm9yZSwgLmNsZWFyZml4OmFmdGVyIHtcbiAgY29udGVudDogXCIgXCI7XG4gIGRpc3BsYXk6IHRhYmxlOyB9XG5cbi5jbGVhcmZpeDphZnRlciB7XG4gIGNsZWFyOiBib3RoOyB9XG5cbi5jZW50ZXItYmxvY2sge1xuICBkaXNwbGF5OiBibG9jaztcbiAgbWFyZ2luLWxlZnQ6IGF1dG87XG4gIG1hcmdpbi1yaWdodDogYXV0bzsgfVxuXG4ucHVsbC1yaWdodCB7XG4gIGZsb2F0OiByaWdodCAhaW1wb3J0YW50OyB9XG5cbi5wdWxsLWxlZnQge1xuICBmbG9hdDogbGVmdCAhaW1wb3J0YW50OyB9XG5cbi5oaWRlIHtcbiAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50OyB9XG5cbi5zaG93IHtcbiAgZGlzcGxheTogYmxvY2sgIWltcG9ydGFudDsgfVxuXG4uaW52aXNpYmxlIHtcbiAgdmlzaWJpbGl0eTogaGlkZGVuOyB9XG5cbi50ZXh0LWhpZGUge1xuICBmb250OiAwLzAgYTtcbiAgY29sb3I6IHRyYW5zcGFyZW50O1xuICB0ZXh0LXNoYWRvdzogbm9uZTtcbiAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7XG4gIGJvcmRlcjogMDsgfVxuXG4uaGlkZGVuIHtcbiAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50OyB9XG5cbi5hZmZpeCB7XG4gIHBvc2l0aW9uOiBmaXhlZDsgfVxuXG5ALW1zLXZpZXdwb3J0IHtcbiAgd2lkdGg6IGRldmljZS13aWR0aDsgfVxuXG4udmlzaWJsZS14cyB7XG4gIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDsgfVxuXG4udmlzaWJsZS1zbSB7XG4gIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDsgfVxuXG4udmlzaWJsZS1tZCB7XG4gIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDsgfVxuXG4udmlzaWJsZS1sZyB7XG4gIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDsgfVxuXG4udmlzaWJsZS14cy1ibG9jayxcbi52aXNpYmxlLXhzLWlubGluZSxcbi52aXNpYmxlLXhzLWlubGluZS1ibG9jayxcbi52aXNpYmxlLXNtLWJsb2NrLFxuLnZpc2libGUtc20taW5saW5lLFxuLnZpc2libGUtc20taW5saW5lLWJsb2NrLFxuLnZpc2libGUtbWQtYmxvY2ssXG4udmlzaWJsZS1tZC1pbmxpbmUsXG4udmlzaWJsZS1tZC1pbmxpbmUtYmxvY2ssXG4udmlzaWJsZS1sZy1ibG9jayxcbi52aXNpYmxlLWxnLWlubGluZSxcbi52aXNpYmxlLWxnLWlubGluZS1ibG9jayB7XG4gIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDsgfVxuXG5AbWVkaWEgKG1heC13aWR0aDogNzY3cHgpIHtcbiAgLnZpc2libGUteHMge1xuICAgIGRpc3BsYXk6IGJsb2NrICFpbXBvcnRhbnQ7IH1cbiAgdGFibGUudmlzaWJsZS14cyB7XG4gICAgZGlzcGxheTogdGFibGU7IH1cbiAgdHIudmlzaWJsZS14cyB7XG4gICAgZGlzcGxheTogdGFibGUtcm93ICFpbXBvcnRhbnQ7IH1cbiAgdGgudmlzaWJsZS14cyxcbiAgdGQudmlzaWJsZS14cyB7XG4gICAgZGlzcGxheTogdGFibGUtY2VsbCAhaW1wb3J0YW50OyB9IH1cblxuQG1lZGlhIChtYXgtd2lkdGg6IDc2N3B4KSB7XG4gIC52aXNpYmxlLXhzLWJsb2NrIHtcbiAgICBkaXNwbGF5OiBibG9jayAhaW1wb3J0YW50OyB9IH1cblxuQG1lZGlhIChtYXgtd2lkdGg6IDc2N3B4KSB7XG4gIC52aXNpYmxlLXhzLWlubGluZSB7XG4gICAgZGlzcGxheTogaW5saW5lICFpbXBvcnRhbnQ7IH0gfVxuXG5AbWVkaWEgKG1heC13aWR0aDogNzY3cHgpIHtcbiAgLnZpc2libGUteHMtaW5saW5lLWJsb2NrIHtcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2sgIWltcG9ydGFudDsgfSB9XG5cbkBtZWRpYSAobWluLXdpZHRoOiA3NjhweCkgYW5kIChtYXgtd2lkdGg6IDk5MXB4KSB7XG4gIC52aXNpYmxlLXNtIHtcbiAgICBkaXNwbGF5OiBibG9jayAhaW1wb3J0YW50OyB9XG4gIHRhYmxlLnZpc2libGUtc20ge1xuICAgIGRpc3BsYXk6IHRhYmxlOyB9XG4gIHRyLnZpc2libGUtc20ge1xuICAgIGRpc3BsYXk6IHRhYmxlLXJvdyAhaW1wb3J0YW50OyB9XG4gIHRoLnZpc2libGUtc20sXG4gIHRkLnZpc2libGUtc20ge1xuICAgIGRpc3BsYXk6IHRhYmxlLWNlbGwgIWltcG9ydGFudDsgfSB9XG5cbkBtZWRpYSAobWluLXdpZHRoOiA3NjhweCkgYW5kIChtYXgtd2lkdGg6IDk5MXB4KSB7XG4gIC52aXNpYmxlLXNtLWJsb2NrIHtcbiAgICBkaXNwbGF5OiBibG9jayAhaW1wb3J0YW50OyB9IH1cblxuQG1lZGlhIChtaW4td2lkdGg6IDc2OHB4KSBhbmQgKG1heC13aWR0aDogOTkxcHgpIHtcbiAgLnZpc2libGUtc20taW5saW5lIHtcbiAgICBkaXNwbGF5OiBpbmxpbmUgIWltcG9ydGFudDsgfSB9XG5cbkBtZWRpYSAobWluLXdpZHRoOiA3NjhweCkgYW5kIChtYXgtd2lkdGg6IDk5MXB4KSB7XG4gIC52aXNpYmxlLXNtLWlubGluZS1ibG9jayB7XG4gICAgZGlzcGxheTogaW5saW5lLWJsb2NrICFpbXBvcnRhbnQ7IH0gfVxuXG5AbWVkaWEgKG1pbi13aWR0aDogOTkycHgpIGFuZCAobWF4LXdpZHRoOiAxMjE5cHgpIHtcbiAgLnZpc2libGUtbWQge1xuICAgIGRpc3BsYXk6IGJsb2NrICFpbXBvcnRhbnQ7IH1cbiAgdGFibGUudmlzaWJsZS1tZCB7XG4gICAgZGlzcGxheTogdGFibGU7IH1cbiAgdHIudmlzaWJsZS1tZCB7XG4gICAgZGlzcGxheTogdGFibGUtcm93ICFpbXBvcnRhbnQ7IH1cbiAgdGgudmlzaWJsZS1tZCxcbiAgdGQudmlzaWJsZS1tZCB7XG4gICAgZGlzcGxheTogdGFibGUtY2VsbCAhaW1wb3J0YW50OyB9IH1cblxuQG1lZGlhIChtaW4td2lkdGg6IDk5MnB4KSBhbmQgKG1heC13aWR0aDogMTIxOXB4KSB7XG4gIC52aXNpYmxlLW1kLWJsb2NrIHtcbiAgICBkaXNwbGF5OiBibG9jayAhaW1wb3J0YW50OyB9IH1cblxuQG1lZGlhIChtaW4td2lkdGg6IDk5MnB4KSBhbmQgKG1heC13aWR0aDogMTIxOXB4KSB7XG4gIC52aXNpYmxlLW1kLWlubGluZSB7XG4gICAgZGlzcGxheTogaW5saW5lICFpbXBvcnRhbnQ7IH0gfVxuXG5AbWVkaWEgKG1pbi13aWR0aDogOTkycHgpIGFuZCAobWF4LXdpZHRoOiAxMjE5cHgpIHtcbiAgLnZpc2libGUtbWQtaW5saW5lLWJsb2NrIHtcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2sgIWltcG9ydGFudDsgfSB9XG5cbkBtZWRpYSAobWluLXdpZHRoOiAxMjIwcHgpIHtcbiAgLnZpc2libGUtbGcge1xuICAgIGRpc3BsYXk6IGJsb2NrICFpbXBvcnRhbnQ7IH1cbiAgdGFibGUudmlzaWJsZS1sZyB7XG4gICAgZGlzcGxheTogdGFibGU7IH1cbiAgdHIudmlzaWJsZS1sZyB7XG4gICAgZGlzcGxheTogdGFibGUtcm93ICFpbXBvcnRhbnQ7IH1cbiAgdGgudmlzaWJsZS1sZyxcbiAgdGQudmlzaWJsZS1sZyB7XG4gICAgZGlzcGxheTogdGFibGUtY2VsbCAhaW1wb3J0YW50OyB9IH1cblxuQG1lZGlhIChtaW4td2lkdGg6IDEyMjBweCkge1xuICAudmlzaWJsZS1sZy1ibG9jayB7XG4gICAgZGlzcGxheTogYmxvY2sgIWltcG9ydGFudDsgfSB9XG5cbkBtZWRpYSAobWluLXdpZHRoOiAxMjIwcHgpIHtcbiAgLnZpc2libGUtbGctaW5saW5lIHtcbiAgICBkaXNwbGF5OiBpbmxpbmUgIWltcG9ydGFudDsgfSB9XG5cbkBtZWRpYSAobWluLXdpZHRoOiAxMjIwcHgpIHtcbiAgLnZpc2libGUtbGctaW5saW5lLWJsb2NrIHtcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2sgIWltcG9ydGFudDsgfSB9XG5cbkBtZWRpYSAobWF4LXdpZHRoOiA3NjdweCkge1xuICAuaGlkZGVuLXhzIHtcbiAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7IH0gfVxuXG5AbWVkaWEgKG1pbi13aWR0aDogNzY4cHgpIGFuZCAobWF4LXdpZHRoOiA5OTFweCkge1xuICAuaGlkZGVuLXNtIHtcbiAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7IH0gfVxuXG5AbWVkaWEgKG1pbi13aWR0aDogOTkycHgpIGFuZCAobWF4LXdpZHRoOiAxMjE5cHgpIHtcbiAgLmhpZGRlbi1tZCB7XG4gICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50OyB9IH1cblxuQG1lZGlhIChtaW4td2lkdGg6IDEyMjBweCkge1xuICAuaGlkZGVuLWxnIHtcbiAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7IH0gfVxuXG4udmlzaWJsZS1wcmludCB7XG4gIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDsgfVxuXG5AbWVkaWEgcHJpbnQge1xuICAudmlzaWJsZS1wcmludCB7XG4gICAgZGlzcGxheTogYmxvY2sgIWltcG9ydGFudDsgfVxuICB0YWJsZS52aXNpYmxlLXByaW50IHtcbiAgICBkaXNwbGF5OiB0YWJsZTsgfVxuICB0ci52aXNpYmxlLXByaW50IHtcbiAgICBkaXNwbGF5OiB0YWJsZS1yb3cgIWltcG9ydGFudDsgfVxuICB0aC52aXNpYmxlLXByaW50LFxuICB0ZC52aXNpYmxlLXByaW50IHtcbiAgICBkaXNwbGF5OiB0YWJsZS1jZWxsICFpbXBvcnRhbnQ7IH0gfVxuXG4udmlzaWJsZS1wcmludC1ibG9jayB7XG4gIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDsgfVxuICBAbWVkaWEgcHJpbnQge1xuICAgIC52aXNpYmxlLXByaW50LWJsb2NrIHtcbiAgICAgIGRpc3BsYXk6IGJsb2NrICFpbXBvcnRhbnQ7IH0gfVxuXG4udmlzaWJsZS1wcmludC1pbmxpbmUge1xuICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7IH1cbiAgQG1lZGlhIHByaW50IHtcbiAgICAudmlzaWJsZS1wcmludC1pbmxpbmUge1xuICAgICAgZGlzcGxheTogaW5saW5lICFpbXBvcnRhbnQ7IH0gfVxuXG4udmlzaWJsZS1wcmludC1pbmxpbmUtYmxvY2sge1xuICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7IH1cbiAgQG1lZGlhIHByaW50IHtcbiAgICAudmlzaWJsZS1wcmludC1pbmxpbmUtYmxvY2sge1xuICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrICFpbXBvcnRhbnQ7IH0gfVxuXG5AbWVkaWEgcHJpbnQge1xuICAuaGlkZGVuLXByaW50IHtcbiAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7IH0gfVxuXG4uaGlnaGxpZ2h0IHtcbiAgYmFja2dyb3VuZDogI2ZmZmZmZjsgfVxuXG4uaGlnaGxpZ2h0IC5jIHtcbiAgY29sb3I6ICM5OTk5ODg7XG4gIGZvbnQtc3R5bGU6IGl0YWxpYzsgfVxuXG4vKiBDb21tZW50ICovXG4uaGlnaGxpZ2h0IC5lcnIge1xuICBjb2xvcjogI2E2MTcxNztcbiAgYmFja2dyb3VuZC1jb2xvcjogI2UzZDJkMjsgfVxuXG4vKiBFcnJvciAqL1xuLmhpZ2hsaWdodCAuayB7XG4gIGZvbnQtd2VpZ2h0OiBib2xkOyB9XG5cbi8qIEtleXdvcmQgKi9cbi5oaWdobGlnaHQgLm8ge1xuICBmb250LXdlaWdodDogYm9sZDsgfVxuXG4vKiBPcGVyYXRvciAqL1xuLmhpZ2hsaWdodCAuY20ge1xuICBjb2xvcjogIzk5OTk4ODtcbiAgZm9udC1zdHlsZTogaXRhbGljOyB9XG5cbi8qIENvbW1lbnQuTXVsdGlsaW5lICovXG4uaGlnaGxpZ2h0IC5jcCB7XG4gIGNvbG9yOiAjOTk5OTk5O1xuICBmb250LXdlaWdodDogYm9sZDsgfVxuXG4vKiBDb21tZW50LlByZXByb2MgKi9cbi5oaWdobGlnaHQgLmMxIHtcbiAgY29sb3I6ICM5OTk5ODg7XG4gIGZvbnQtc3R5bGU6IGl0YWxpYzsgfVxuXG4vKiBDb21tZW50LlNpbmdsZSAqL1xuLmhpZ2hsaWdodCAuY3Mge1xuICBjb2xvcjogIzk5OTk5OTtcbiAgZm9udC13ZWlnaHQ6IGJvbGQ7XG4gIGZvbnQtc3R5bGU6IGl0YWxpYzsgfVxuXG4vKiBDb21tZW50LlNwZWNpYWwgKi9cbi5oaWdobGlnaHQgLmdkIHtcbiAgY29sb3I6ICMwMDAwMDA7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmRkZGQ7IH1cblxuLyogR2VuZXJpYy5EZWxldGVkICovXG4uaGlnaGxpZ2h0IC5nZCAueCB7XG4gIGNvbG9yOiAjMDAwMDAwO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZhYWFhOyB9XG5cbi8qIEdlbmVyaWMuRGVsZXRlZC5TcGVjaWZpYyAqL1xuLmhpZ2hsaWdodCAuZ2Uge1xuICBmb250LXN0eWxlOiBpdGFsaWM7IH1cblxuLyogR2VuZXJpYy5FbXBoICovXG4uaGlnaGxpZ2h0IC5nciB7XG4gIGNvbG9yOiAjYWEwMDAwOyB9XG5cbi8qIEdlbmVyaWMuRXJyb3IgKi9cbi5oaWdobGlnaHQgLmdoIHtcbiAgY29sb3I6ICM5OTk5OTk7IH1cblxuLyogR2VuZXJpYy5IZWFkaW5nICovXG4uaGlnaGxpZ2h0IC5naSB7XG4gIGNvbG9yOiAjMDAwMDAwO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZGRmZmRkOyB9XG5cbi8qIEdlbmVyaWMuSW5zZXJ0ZWQgKi9cbi5oaWdobGlnaHQgLmdpIC54IHtcbiAgY29sb3I6ICMwMDAwMDA7XG4gIGJhY2tncm91bmQtY29sb3I6ICNhYWZmYWE7IH1cblxuLyogR2VuZXJpYy5JbnNlcnRlZC5TcGVjaWZpYyAqL1xuLmhpZ2hsaWdodCAuZ28ge1xuICBjb2xvcjogIzg4ODg4ODsgfVxuXG4vKiBHZW5lcmljLk91dHB1dCAqL1xuLmhpZ2hsaWdodCAuZ3Age1xuICBjb2xvcjogIzU1NTU1NTsgfVxuXG4vKiBHZW5lcmljLlByb21wdCAqL1xuLmhpZ2hsaWdodCAuZ3Mge1xuICBmb250LXdlaWdodDogYm9sZDsgfVxuXG4vKiBHZW5lcmljLlN0cm9uZyAqL1xuLmhpZ2hsaWdodCAuZ3Uge1xuICBjb2xvcjogI2FhYWFhYTsgfVxuXG4vKiBHZW5lcmljLlN1YmhlYWRpbmcgKi9cbi5oaWdobGlnaHQgLmd0IHtcbiAgY29sb3I6ICNhYTAwMDA7IH1cblxuLyogR2VuZXJpYy5UcmFjZWJhY2sgKi9cbi5oaWdobGlnaHQgLmtjIHtcbiAgZm9udC13ZWlnaHQ6IGJvbGQ7IH1cblxuLyogS2V5d29yZC5Db25zdGFudCAqL1xuLmhpZ2hsaWdodCAua2Qge1xuICBmb250LXdlaWdodDogYm9sZDsgfVxuXG4vKiBLZXl3b3JkLkRlY2xhcmF0aW9uICovXG4uaGlnaGxpZ2h0IC5rcCB7XG4gIGZvbnQtd2VpZ2h0OiBib2xkOyB9XG5cbi8qIEtleXdvcmQuUHNldWRvICovXG4uaGlnaGxpZ2h0IC5rciB7XG4gIGZvbnQtd2VpZ2h0OiBib2xkOyB9XG5cbi8qIEtleXdvcmQuUmVzZXJ2ZWQgKi9cbi5oaWdobGlnaHQgLmt0IHtcbiAgY29sb3I6ICM0NDU1ODg7XG4gIGZvbnQtd2VpZ2h0OiBib2xkOyB9XG5cbi8qIEtleXdvcmQuVHlwZSAqL1xuLmhpZ2hsaWdodCAubSB7XG4gIGNvbG9yOiAjMDA5OTk5OyB9XG5cbi8qIExpdGVyYWwuTnVtYmVyICovXG4uaGlnaGxpZ2h0IC5zIHtcbiAgY29sb3I6ICNkMTQ7IH1cblxuLyogTGl0ZXJhbC5TdHJpbmcgKi9cbi5oaWdobGlnaHQgLm5hIHtcbiAgY29sb3I6ICMwMDgwODA7IH1cblxuLyogTmFtZS5BdHRyaWJ1dGUgKi9cbi5oaWdobGlnaHQgLm5iIHtcbiAgY29sb3I6ICMwMDg2QjM7IH1cblxuLyogTmFtZS5CdWlsdGluICovXG4uaGlnaGxpZ2h0IC5uYyB7XG4gIGNvbG9yOiAjNDQ1NTg4O1xuICBmb250LXdlaWdodDogYm9sZDsgfVxuXG4vKiBOYW1lLkNsYXNzICovXG4uaGlnaGxpZ2h0IC5ubyB7XG4gIGNvbG9yOiAjMDA4MDgwOyB9XG5cbi8qIE5hbWUuQ29uc3RhbnQgKi9cbi5oaWdobGlnaHQgLm5pIHtcbiAgY29sb3I6ICM4MDAwODA7IH1cblxuLyogTmFtZS5FbnRpdHkgKi9cbi5oaWdobGlnaHQgLm5lIHtcbiAgY29sb3I6ICM5OTAwMDA7XG4gIGZvbnQtd2VpZ2h0OiBib2xkOyB9XG5cbi8qIE5hbWUuRXhjZXB0aW9uICovXG4uaGlnaGxpZ2h0IC5uZiB7XG4gIGNvbG9yOiAjOTkwMDAwO1xuICBmb250LXdlaWdodDogYm9sZDsgfVxuXG4vKiBOYW1lLkZ1bmN0aW9uICovXG4uaGlnaGxpZ2h0IC5ubiB7XG4gIGNvbG9yOiAjNTU1NTU1OyB9XG5cbi8qIE5hbWUuTmFtZXNwYWNlICovXG4uaGlnaGxpZ2h0IC5udCB7XG4gIGNvbG9yOiAjMDAwMDgwOyB9XG5cbi8qIE5hbWUuVGFnICovXG4uaGlnaGxpZ2h0IC5udiB7XG4gIGNvbG9yOiAjMDA4MDgwOyB9XG5cbi8qIE5hbWUuVmFyaWFibGUgKi9cbi5oaWdobGlnaHQgLm93IHtcbiAgZm9udC13ZWlnaHQ6IGJvbGQ7IH1cblxuLyogT3BlcmF0b3IuV29yZCAqL1xuLmhpZ2hsaWdodCAudyB7XG4gIGNvbG9yOiAjYmJiYmJiOyB9XG5cbi8qIFRleHQuV2hpdGVzcGFjZSAqL1xuLmhpZ2hsaWdodCAubWYge1xuICBjb2xvcjogIzAwOTk5OTsgfVxuXG4vKiBMaXRlcmFsLk51bWJlci5GbG9hdCAqL1xuLmhpZ2hsaWdodCAubWgge1xuICBjb2xvcjogIzAwOTk5OTsgfVxuXG4vKiBMaXRlcmFsLk51bWJlci5IZXggKi9cbi5oaWdobGlnaHQgLm1pIHtcbiAgY29sb3I6ICMwMDk5OTk7IH1cblxuLyogTGl0ZXJhbC5OdW1iZXIuSW50ZWdlciAqL1xuLmhpZ2hsaWdodCAubW8ge1xuICBjb2xvcjogIzAwOTk5OTsgfVxuXG4vKiBMaXRlcmFsLk51bWJlci5PY3QgKi9cbi5oaWdobGlnaHQgLnNiIHtcbiAgY29sb3I6ICNkMTQ7IH1cblxuLyogTGl0ZXJhbC5TdHJpbmcuQmFja3RpY2sgKi9cbi5oaWdobGlnaHQgLnNjIHtcbiAgY29sb3I6ICNkMTQ7IH1cblxuLyogTGl0ZXJhbC5TdHJpbmcuQ2hhciAqL1xuLmhpZ2hsaWdodCAuc2Qge1xuICBjb2xvcjogI2QxNDsgfVxuXG4vKiBMaXRlcmFsLlN0cmluZy5Eb2MgKi9cbi5oaWdobGlnaHQgLnMyIHtcbiAgY29sb3I6ICNkMTQ7IH1cblxuLyogTGl0ZXJhbC5TdHJpbmcuRG91YmxlICovXG4uaGlnaGxpZ2h0IC5zZSB7XG4gIGNvbG9yOiAjZDE0OyB9XG5cbi8qIExpdGVyYWwuU3RyaW5nLkVzY2FwZSAqL1xuLmhpZ2hsaWdodCAuc2gge1xuICBjb2xvcjogI2QxNDsgfVxuXG4vKiBMaXRlcmFsLlN0cmluZy5IZXJlZG9jICovXG4uaGlnaGxpZ2h0IC5zaSB7XG4gIGNvbG9yOiAjZDE0OyB9XG5cbi8qIExpdGVyYWwuU3RyaW5nLkludGVycG9sICovXG4uaGlnaGxpZ2h0IC5zeCB7XG4gIGNvbG9yOiAjZDE0OyB9XG5cbi8qIExpdGVyYWwuU3RyaW5nLk90aGVyICovXG4uaGlnaGxpZ2h0IC5zciB7XG4gIGNvbG9yOiAjMDA5OTI2OyB9XG5cbi8qIExpdGVyYWwuU3RyaW5nLlJlZ2V4ICovXG4uaGlnaGxpZ2h0IC5zMSB7XG4gIGNvbG9yOiAjZDE0OyB9XG5cbi8qIExpdGVyYWwuU3RyaW5nLlNpbmdsZSAqL1xuLmhpZ2hsaWdodCAuc3Mge1xuICBjb2xvcjogIzk5MDA3MzsgfVxuXG4vKiBMaXRlcmFsLlN0cmluZy5TeW1ib2wgKi9cbi5oaWdobGlnaHQgLmJwIHtcbiAgY29sb3I6ICM5OTk5OTk7IH1cblxuLyogTmFtZS5CdWlsdGluLlBzZXVkbyAqL1xuLmhpZ2hsaWdodCAudmMge1xuICBjb2xvcjogIzAwODA4MDsgfVxuXG4vKiBOYW1lLlZhcmlhYmxlLkNsYXNzICovXG4uaGlnaGxpZ2h0IC52ZyB7XG4gIGNvbG9yOiAjMDA4MDgwOyB9XG5cbi8qIE5hbWUuVmFyaWFibGUuR2xvYmFsICovXG4uaGlnaGxpZ2h0IC52aSB7XG4gIGNvbG9yOiAjMDA4MDgwOyB9XG5cbi8qIE5hbWUuVmFyaWFibGUuSW5zdGFuY2UgKi9cbi5oaWdobGlnaHQgLmlsIHtcbiAgY29sb3I6ICMwMDk5OTk7IH1cblxuLyogTGl0ZXJhbC5OdW1iZXIuSW50ZWdlci5Mb25nICovXG5wcmUge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTsgfVxuXG4uaGxqcyB7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICBwYWRkaW5nOiAwLjVlbTtcbiAgYmFja2dyb3VuZDogI2ZmZmZmZjtcbiAgb3ZlcmZsb3cteDogYXV0bztcbiAgd29yZC13cmFwOiBub3JtYWw7XG4gIHdoaXRlLXNwYWNlOiBwcmU7XG4gIGNvbG9yOiAjMzE0MzYxOyB9XG5cbi5obGpzLWNvbW1lbnQsXG4uaGxqcy10ZW1wbGF0ZV9jb21tZW50LFxuLmhsanMtamF2YWRvYyxcbi5obGpzLWNvbW1lbnQgKiB7XG4gIGNvbG9yOiAjOTk5OTg4O1xuICBmb250LXN0eWxlOiBpdGFsaWM7IH1cblxuLmhsanMta2V5d29yZCxcbi5tZXRob2QsXG4uaGxqcy1saXN0IC5obGpzLXRpdGxlLFxuLmNsb2p1cmUgLmhsanMtYnVpbHRfaW4sXG4ubmdpbnggLmhsanMtdGl0bGUsXG4uaGxqcy10YWcgLmhsanMtdGl0bGUsXG4uc2V0dGluZyAuaGxqcy12YWx1ZSxcbi5obGpzLXdpbnV0aWxzLFxuLnRleCAuaGxqcy1jb21tYW5kLFxuLmh0dHAgLmhsanMtdGl0bGUsXG4uaGxqcy1yZXF1ZXN0LFxuLmhsanMtc3RhdHVzIHtcbiAgY29sb3I6ICM0YTg2ZWY7XG4gIGZvbnQtd2VpZ2h0OiBib2xkOyB9XG5cbi5obGpzLWVudnZhcixcbi50ZXggLmhsanMtc3BlY2lhbCB7XG4gIGNvbG9yOiAjNjYwOyB9XG5cbi5obGpzLXN0cmluZyxcbi5obGpzLXRhZyAuaGxqcy12YWx1ZSxcbi5obGpzLWNkYXRhLFxuLmhsanMtZmlsdGVyIC5obGpzLWFyZ3VtZW50LFxuLmhsanMtYXR0cl9zZWxlY3Rvcixcbi5hcGFjaGUgLmhsanMtY2JyYWNrZXQsXG4uaGxqcy1kYXRlLFxuLmhsanMtcmVnZXhwLFxuLmNvZmZlZXNjcmlwdCAuaGxqcy1hdHRyaWJ1dGUge1xuICBjb2xvcjogI2YyNTc2ZDsgfVxuXG4uaGxqcy1zdWIgLmhsanMtaWRlbnRpZmllcixcbi5obGpzLXBpLFxuLmhsanMtdGFnLFxuLmhsanMtdGFnIC5obGpzLWtleXdvcmQsXG4uaGxqcy1kZWNvcmF0b3IsXG4uaW5pIC5obGpzLXRpdGxlLFxuLmhsanMtc2hlYmFuZyxcbi5obGpzLXByb21wdCxcbi5obGpzLWhleGNvbG9yLFxuLmhsanMtcnVsZXMgLmhsanMtdmFsdWUsXG4uY3NzIC5obGpzLXZhbHVlIC5obGpzLW51bWJlcixcbi5obGpzLWxpdGVyYWwsXG4uaGxqcy1zeW1ib2wsXG4ucnVieSAuaGxqcy1zeW1ib2wgLmhsanMtc3RyaW5nLFxuLmhsanMtbnVtYmVyLFxuLmNzcyAuaGxqcy1mdW5jdGlvbixcbi5jbG9qdXJlIC5obGpzLWF0dHJpYnV0ZSB7XG4gIGNvbG9yOiAjMDBiMDdkOyB9XG5cbi5obGpzLWNsYXNzIC5obGpzLXRpdGxlLFxuLmhhc2tlbGwgLmhsanMtdHlwZSxcbi5zbWFsbHRhbGsgLmhsanMtY2xhc3MsXG4uaGxqcy1qYXZhZG9jdGFnLFxuLmhsanMteWFyZG9jdGFnLFxuLmhsanMtcGhwZG9jLFxuLmhsanMtdHlwZW5hbWUsXG4uaGxqcy10YWcgLmhsanMtYXR0cmlidXRlLFxuLmhsanMtZG9jdHlwZSxcbi5obGpzLWNsYXNzIC5obGpzLWlkLFxuLmhsanMtYnVpbHRfaW4sXG4uc2V0dGluZyxcbi5obGpzLXBhcmFtcyxcbi5obGpzLXZhcmlhYmxlLFxuLmNsb2p1cmUgLmhsanMtdGl0bGUge1xuICBjb2xvcjogIzNkYWZkNDsgfVxuXG4uY3NzIC5obGpzLXRhZyxcbi5obGpzLXJ1bGVzIC5obGpzLXByb3BlcnR5LFxuLmhsanMtcHNldWRvLFxuLmhsanMtc3Vic3Qge1xuICBjb2xvcjogIzAwMDsgfVxuXG4uY3NzIC5obGpzLWNsYXNzLFxuLmNzcyAuaGxqcy1pZCB7XG4gIGNvbG9yOiAjOUI3MDNGOyB9XG5cbi5obGpzLXZhbHVlIC5obGpzLWltcG9ydGFudCB7XG4gIGNvbG9yOiAjZmY3NzAwO1xuICBmb250LXdlaWdodDogYm9sZDsgfVxuXG4uaGxqcy1ydWxlcyAuaGxqcy1rZXl3b3JkIHtcbiAgY29sb3I6ICNDNUFGNzU7IH1cblxuLmhsanMtYW5ub3RhdGlvbixcbi5hcGFjaGUgLmhsanMtc3FicmFja2V0LFxuLm5naW54IC5obGpzLWJ1aWx0X2luIHtcbiAgY29sb3I6ICM5Qjg1OUQ7IH1cblxuLmhsanMtcHJlcHJvY2Vzc29yLFxuLmhsanMtcHJlcHJvY2Vzc29yICosXG4uaGxqcy1wcmFnbWEge1xuICBjb2xvcjogIzQ0NDsgfVxuXG4udGV4IC5obGpzLWZvcm11bGEge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjRUVFO1xuICBmb250LXN0eWxlOiBpdGFsaWM7IH1cblxuLmRpZmYgLmhsanMtaGVhZGVyLFxuLmhsanMtY2h1bmsge1xuICBjb2xvcjogIzgwODA4MDtcbiAgZm9udC13ZWlnaHQ6IGJvbGQ7IH1cblxuLmRpZmYgLmhsanMtY2hhbmdlIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI0JDQ0ZGOTsgfVxuXG4uaGxqcy1hZGRpdGlvbiB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNCQUVFQkE7IH1cblxuLmhsanMtZGVsZXRpb24ge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjRkZDOEJEOyB9XG5cbi5obGpzLWNvbW1lbnQgLmhsanMteWFyZG9jdGFnIHtcbiAgZm9udC13ZWlnaHQ6IGJvbGQ7IH1cblxuaDEsXG5oMixcbmgzLFxuaDQsXG5oNSxcbmg2IHtcbiAgZm9udC1mYW1pbHk6IFwiRWluYVwiLCBcIkhlbHZldGljYSBOZXVlXCIsIEhlbHZldGljYSwgc2Fucy1zZXJpZjtcbiAgbGV0dGVyLXNwYWNpbmc6IC0wLjAyZW07IH1cblxuYSB7XG4gIHRyYW5zaXRpb246IGNvbG9yIC4yczsgfVxuICBhOmhvdmVyIHtcbiAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7IH1cblxucC5sZyB7XG4gIGZvbnQtc2l6ZTogMThweDtcbiAgZm9udC13ZWlnaHQ6IDQwMDtcbiAgY29sb3I6ICM4OTg5ODk7IH1cbiAgcC5sZy5zdHJvbmcge1xuICAgIGZvbnQtd2VpZ2h0OiA1MDA7IH1cbiAgcC5sZy5saWdodCB7XG4gICAgY29sb3I6ICM4OTg5ODk7IH1cblxucC5zbSB7XG4gIGZvbnQtc2l6ZTogMTNweDsgfVxuXG5wLnhzIHtcbiAgZm9udC1zaXplOiAxMXB4OyB9XG5cbi5zdWJoZWFkaW5nIHtcbiAgY29sb3I6ICM4ODg7XG4gIGZvbnQtc2l6ZTogMTVweDsgfVxuXG5Aa2V5ZnJhbWVzIGZhZGVJbiB7XG4gIDAlIHtcbiAgICBvcGFjaXR5OiAwOyB9XG4gIDEwMCUge1xuICAgIG9wYWNpdHk6IDE7IH0gfVxuXG5Aa2V5ZnJhbWVzIGNyb3NzRmFkZUluT3V0IHtcbiAgMCUsIDQwJSwgMTAwJSB7XG4gICAgb3BhY2l0eTogMDsgfVxuICA1MCUsIDkwJSB7XG4gICAgb3BhY2l0eTogMTsgfSB9XG5cbkBrZXlmcmFtZXMgZmFkZUluVXBTbWFsbCB7XG4gIDAlIHtcbiAgICBvcGFjaXR5OiAwO1xuICAgIHRyYW5zZm9ybTogc2NhbGUoMC42NjcsIDAuNjY3KSB0cmFuc2xhdGVZKDIwcHgpOyB9XG4gIDEwMCUge1xuICAgIG9wYWNpdHk6IC41O1xuICAgIHRyYW5zZm9ybTogc2NhbGUoMC42NjcsIDAuNjY3KSB0cmFuc2xhdGVZKDApOyB9IH1cblxuQGtleWZyYW1lcyBmYWRlSW5VcCB7XG4gIDAlIHtcbiAgICBvcGFjaXR5OiAwO1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgyMHB4KTsgfVxuICA1MCUge1xuICAgIG9wYWNpdHk6IDE7IH1cbiAgMTAwJSB7XG4gICAgb3BhY2l0eTogMTtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMCk7IH0gfVxuXG5Aa2V5ZnJhbWVzIGZhZGVJbkRvd24ge1xuICAwJSB7XG4gICAgb3BhY2l0eTogMDtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTIwcHgpOyB9XG4gIDUwJSB7XG4gICAgb3BhY2l0eTogMTsgfVxuICAxMDAlIHtcbiAgICBvcGFjaXR5OiAxO1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgwKTsgfSB9XG5cbkBrZXlmcmFtZXMgZmFkZU91dCB7XG4gIDAlIHtcbiAgICBvcGFjaXR5OiAxOyB9XG4gIDEwMCUge1xuICAgIG9wYWNpdHk6IDA7IH0gfVxuXG5Aa2V5ZnJhbWVzIGZhZGVPdXRVcCB7XG4gIDAlIHtcbiAgICBvcGFjaXR5OiAxO1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgwKTsgfVxuICAxMDAlIHtcbiAgICBvcGFjaXR5OiAwO1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtMjBweCk7IH0gfVxuXG5Aa2V5ZnJhbWVzIHB1bHNlIHtcbiAgMCUge1xuICAgIHRyYW5zZm9ybTogc2NhbGUzZCgxLCAxLCAxKTsgfVxuICAyMCUge1xuICAgIHRyYW5zZm9ybTogc2NhbGUzZCgxLjA1LCAxLjA1LCAxKTsgfVxuICAxMDAlIHtcbiAgICB0cmFuc2Zvcm06IHNjYWxlM2QoMSwgMSwgMSk7IH0gfVxuXG5Aa2V5ZnJhbWVzIHRpbHRJbiB7XG4gIDAlIHtcbiAgICB0cmFuc2Zvcm06IHJvdGF0ZVgoLTMwZGVnKTsgfVxuICAxMDAlIHtcbiAgICB0cmFuc2Zvcm06IHJvdGF0ZVgoMGRlZyk7IH0gfVxuXG5Aa2V5ZnJhbWVzIHNpbXBsZUhvdmVyWSB7XG4gIDAlIHtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZTNkKDAsIDAsIDApOyB9XG4gIDUwJSB7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUzZCgwLCAxMHB4LCAwKTsgfVxuICAxMDAlIHtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZTNkKDAsIDApOyB9IH1cblxuQGtleWZyYW1lcyBzaW1wbGVIb3Zlclgge1xuICAwJSB7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUzZCgwLCAwLCAwKTsgfVxuICA1MCUge1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlM2QoMjI1cHgsIDAsIDApOyB9XG4gIDEwMCUge1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlM2QoMCwgMCk7IH0gfVxuXG5Aa2V5ZnJhbWVzIHNpbXBsZUhvdmVyWFNtYWxsIHtcbiAgMCUge1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlM2QoMCwgMCwgMCk7IH1cbiAgNTAlIHtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZTNkKDUwcHgsIDAsIDApOyB9XG4gIDEwMCUge1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlM2QoMCwgMCk7IH0gfVxuXG5Aa2V5ZnJhbWVzIGluZXJ0aWFUaWx0IHtcbiAgMCUge1xuICAgIHRyYW5zZm9ybTogcm90YXRlKDVkZWcpOyB9XG4gIDE1JSB7XG4gICAgdHJhbnNmb3JtOiByb3RhdGUoLTFkZWcpOyB9XG4gIDMwJSB7XG4gICAgdHJhbnNmb3JtOiByb3RhdGUoMWRlZyk7IH1cbiAgNDAlIHtcbiAgICB0cmFuc2Zvcm06IHJvdGF0ZSgwZGVnKTsgfVxuICA1MCUge1xuICAgIHRyYW5zZm9ybTogcm90YXRlKC01ZGVnKTsgfVxuICA2NSUge1xuICAgIHRyYW5zZm9ybTogcm90YXRlKDFkZWcpOyB9XG4gIDgwJSB7XG4gICAgdHJhbnNmb3JtOiByb3RhdGUoLTFkZWcpOyB9XG4gIDkwJSB7XG4gICAgdHJhbnNmb3JtOiByb3RhdGUoMGRlZyk7IH1cbiAgMTAwJSB7XG4gICAgdHJhbnNmb3JtOiByb3RhdGUoNWRlZyk7IH0gfVxuXG5Aa2V5ZnJhbWVzIGhvdmVyWSB7XG4gIDAlIHtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgwLCAwKSBzY2FsZSgxKTsgfVxuICAxMCUge1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlKDFweCwgMnB4KSBzY2FsZSgxKTsgfVxuICAyMCUge1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlKDAsIC0zcHgpIHNjYWxlKDEpOyB9XG4gIDMwJSB7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoLTFweCwgM3B4KSBzY2FsZSgxKTsgfVxuICA0MCUge1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlKDAsIC0xcHgpIHNjYWxlKDEpOyB9XG4gIDUwJSB7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoLTFweCwgMCkgc2NhbGUoMSk7IH1cbiAgNjAlIHtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgwLCAtM3B4KSBzY2FsZSgxKTsgfVxuICA3MCUge1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlKDFweCwgMnB4KSBzY2FsZSgxKTsgfVxuICA4MCUge1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlKDAsIC0zcHgpIHNjYWxlKDEpOyB9XG4gIDkwJSB7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoLTFweCwgMXB4KSBzY2FsZSgxKTsgfVxuICAxMDAlIHtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgwLCAwKSBzY2FsZSgxKTsgfSB9XG5cbkBrZXlmcmFtZXMgZmlndXJlZWlnaHQge1xuICAwJSB7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUzZCgwLCAwLCAwKTsgfVxuICAyJSB7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUzZCgxcHgsIDAuNXB4LCAwKTsgfVxuICA1JSB7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUzZCgycHgsIDFweCwgMCk7IH1cbiAgNyUge1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlM2QoM3B4LCAxLjVweCwgMCk7IH1cbiAgMTAlIHtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZTNkKDRweCwgMS44cHgsIDApOyB9XG4gIDEyJSB7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUzZCg1cHgsIDJweCwgMCk7IH1cbiAgMTUlIHtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZTNkKDZweCwgMS44cHgsIDApOyB9XG4gIDE3JSB7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUzZCg3cHgsIDEuNXB4LCAwKTsgfVxuICAyMCUge1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlM2QoOHB4LCAxcHgsIDApOyB9XG4gIDIyJSB7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUzZCg4LjZweCwgMC41cHgsIDApOyB9XG4gIDI1JSB7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUzZCg5cHgsIDAsIDApOyB9XG4gIDI3JSB7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUzZCg4LjNweCwgLTAuNXB4LCAwKTsgfVxuICAzMCUge1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlM2QoOHB4LCAtMXB4LCAwKTsgfVxuICAzMiUge1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlM2QoN3B4LCAtMS41cHgsIDApOyB9XG4gIDM1JSB7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUzZCg2cHgsIC0xLjhweCwgMCk7IH1cbiAgMzclIHtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZTNkKDVweCwgLTJweCwgMCk7IH1cbiAgNDAlIHtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZTNkKDRweCwgLTEuOHB4LCAwKTsgfVxuICA0MiUge1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlM2QoM3B4LCAtMS41cHgsIDApOyB9XG4gIDQ1JSB7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUzZCgycHgsIC0xcHgsIDApOyB9XG4gIDQ3JSB7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUzZCgxcHgsIC0wLjVweCwgMCk7IH1cbiAgNTAlIHtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZTNkKDAsIDAsIDApOyB9XG4gIDUyJSB7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUzZCgtMXB4LCAwLjVweCwgMCk7IH1cbiAgNTUlIHtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZTNkKC0ycHgsIDFweCwgMCk7IH1cbiAgNTclIHtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZTNkKC0zcHgsIDEuNXB4LCAwKTsgfVxuICA2MCUge1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlM2QoLTRweCwgMS44cHgsIDApOyB9XG4gIDYyJSB7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUzZCgtNXB4LCAycHgsIDApOyB9XG4gIDY1JSB7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUzZCgtNnB4LCAxLjhweCwgMCk7IH1cbiAgNjclIHtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZTNkKC03cHgsIDEuNXB4LCAwKTsgfVxuICA3MCUge1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlM2QoLThweCwgMXB4LCAwKTsgfVxuICA3MiUge1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlM2QoLTguNnB4LCAwLjVweCwgMCk7IH1cbiAgNzUlIHtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZTNkKC05cHgsIDAsIDApOyB9XG4gIDc3JSB7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUzZCgtOC4zcHgsIC0xcHgsIDApOyB9XG4gIDgwJSB7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUzZCgtOHB4LCAtMnB4LCAwKTsgfVxuICA4MiUge1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlM2QoLTdweCwgLTEuNXB4LCAwKTsgfVxuICA4NSUge1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlM2QoLTZweCwgLTEuOHB4LCAwKTsgfVxuICA4NyUge1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlM2QoLTVweCwgLTJweCwgMCk7IH1cbiAgOTAlIHtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZTNkKC00cHgsIC0xLjhweCwgMCk7IH1cbiAgOTIlIHtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZTNkKC0zcHgsIC0xLjVweCwgMCk7IH1cbiAgOTUlIHtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZTNkKC0ycHgsIC0xcHgsIDApOyB9XG4gIDk3JSB7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUzZCgtMXB4LCAtMC41cHgsIDApOyB9XG4gIDEwMCUge1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlM2QoMCwgMCwgMCk7IH0gfVxuXG5Aa2V5ZnJhbWVzIGRvdEV4cGFuZCB7XG4gIDAlIHtcbiAgICB0cmFuc2Zvcm06IHNjYWxlM2QoMC4xLCAwLjEsIDEpO1xuICAgIG9wYWNpdHk6IDE7IH1cbiAgMTAwJSB7XG4gICAgdHJhbnNmb3JtOiBzY2FsZTNkKDIsIDIsIDEpO1xuICAgIG9wYWNpdHk6IDA7IH0gfVxuXG5Aa2V5ZnJhbWVzIGdsb3cge1xuICAwJSwgMzAlLCAxMDAlIHtcbiAgICBvcGFjaXR5OiAwOyB9XG4gIDE1JSB7XG4gICAgb3BhY2l0eTogMTsgfSB9XG5cbkBrZXlmcmFtZXMgc3ByZWFkIHtcbiAgMCUge1xuICAgIHRyYW5zZm9ybTogc2NhbGVYKDEpO1xuICAgIG9wYWNpdHk6IDE7IH1cbiAgNTAlIHtcbiAgICB0cmFuc2Zvcm06IHNjYWxlWCgwLjgpO1xuICAgIG9wYWNpdHk6IC41OyB9XG4gIDEwMCUge1xuICAgIHRyYW5zZm9ybTogc2NhbGVYKDEpO1xuICAgIG9wYWNpdHk6IDE7IH0gfVxuXG5Aa2V5ZnJhbWVzIHNwaW4ge1xuICAwJSB7XG4gICAgdHJhbnNmb3JtOiByb3RhdGUoMGRlZyk7IH1cbiAgMTAwJSB7XG4gICAgdHJhbnNmb3JtOiByb3RhdGUoMzYwZGVnKTsgfSB9XG5cbkBrZXlmcmFtZXMgZmxvYXRpbmdDbG91ZCB7XG4gIDAlIHtcbiAgICB0cmFuc2Zvcm06IHNjYWxlM2QoMC42LCAwLjYsIDEpO1xuICAgIG9wYWNpdHk6IDA7IH1cbiAgNSUge1xuICAgIG9wYWNpdHk6IC45OyB9XG4gIDEwJSB7XG4gICAgb3BhY2l0eTogMTsgfVxuICA5NSUge1xuICAgIG9wYWNpdHk6IDE7IH1cbiAgMTAwJSB7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUzZCgxNTAlLCAxMDAlLCAwKTtcbiAgICBvcGFjaXR5OiAwOyB9IH1cblxuQGtleWZyYW1lcyBmbG9hdGluZ0Nsb3VkLTIge1xuICAwJSB7XG4gICAgdHJhbnNmb3JtOiBzY2FsZTNkKDAuMiwgMC4yLCAxKTtcbiAgICBvcGFjaXR5OiAwOyB9XG4gIDUlIHtcbiAgICBvcGFjaXR5OiAuOTsgfVxuICAyMCUge1xuICAgIG9wYWNpdHk6IDE7IH1cbiAgOTUlIHtcbiAgICBvcGFjaXR5OiAxOyB9XG4gIDEwMCUge1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlM2QoMTEwJSwgMzAlLCAwKSBzY2FsZTNkKDAuNCwgMC40LCAxKTtcbiAgICBvcGFjaXR5OiAwOyB9IH1cblxuQGtleWZyYW1lcyBmbG9hdGluZ0Nsb3VkLTMge1xuICAwJSB7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUzZCgxNTAlLCA3MCUsIDApIHNjYWxlM2QoMC44LCAwLjgsIDEpO1xuICAgIG9wYWNpdHk6IDA7IH1cbiAgNSUge1xuICAgIG9wYWNpdHk6IDE7IH1cbiAgMjAlIHtcbiAgICBvcGFjaXR5OiAxOyB9XG4gIDkwJSB7XG4gICAgb3BhY2l0eTogLjk7IH1cbiAgMTAwJSB7XG4gICAgdHJhbnNmb3JtOiBzY2FsZTNkKDAuNCwgMC40LCAxKTtcbiAgICBvcGFjaXR5OiAwOyB9IH1cblxuQGtleWZyYW1lcyBmbG9hdGluZ0Nsb3VkLTQge1xuICAwJSB7XG4gICAgdHJhbnNmb3JtOiBzY2FsZTNkKDEuMiwgMS4yLCAxKTtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZTNkKDExMCUsIDE1MCUsIDApO1xuICAgIG9wYWNpdHk6IDA7IH1cbiAgNSUge1xuICAgIG9wYWNpdHk6IDE7IH1cbiAgOTAlIHtcbiAgICBvcGFjaXR5OiAxOyB9XG4gIDk1JSB7XG4gICAgb3BhY2l0eTogLjk7IH1cbiAgMTAwJSB7XG4gICAgdHJhbnNmb3JtOiBzY2FsZTNkKDAuOCwgMC44LCAxKTtcbiAgICBvcGFjaXR5OiAwOyB9IH1cblxuQGtleWZyYW1lcyByYWluRHJvcCB7XG4gIDAlIHtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZTNkKDAsIDAsIDApO1xuICAgIG9wYWNpdHk6IDA7IH1cbiAgNSUge1xuICAgIG9wYWNpdHk6IC45OyB9XG4gIDEwJSB7XG4gICAgb3BhY2l0eTogMTsgfVxuICA5NSUge1xuICAgIG9wYWNpdHk6IDE7IH1cbiAgMTAwJSB7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUzZCgwLCA4MDAlLCAwKTtcbiAgICBvcGFjaXR5OiAwOyB9IH1cblxuQGtleWZyYW1lcyBzY3JlZW5Qb3AtMSB7XG4gIDAlIHtcbiAgICBvcGFjaXR5OiAxO1xuICAgIHotaW5kZXg6IDA7IH1cbiAgODklIHtcbiAgICBvcGFjaXR5OiAxOyB9XG4gIDk1JSB7XG4gICAgdHJhbnNmb3JtOiBzY2FsZTNkKDEsIDEsIDEpO1xuICAgIG9wYWNpdHk6IDA7IH1cbiAgOTYlIHtcbiAgICB0cmFuc2Zvcm06IHNjYWxlM2QoMS4xLCAxLjEsIDEpOyB9XG4gIDEwMCUge1xuICAgIG9wYWNpdHk6IDE7XG4gICAgdHJhbnNmb3JtOiBzY2FsZTNkKDEsIDEsIDEpOyB9IH1cblxuQGtleWZyYW1lcyBzY3JlZW5Qb3AtMiB7XG4gIDAlIHtcbiAgICBvcGFjaXR5OiAwOyB9XG4gIDMwJSB7XG4gICAgdHJhbnNmb3JtOiBzY2FsZTNkKDEsIDEsIDEpO1xuICAgIG9wYWNpdHk6IDA7IH1cbiAgMzElIHtcbiAgICB0cmFuc2Zvcm06IHNjYWxlM2QoMS4xLCAxLjEsIDEpOyB9XG4gIDM1JSB7XG4gICAgdHJhbnNmb3JtOiBzY2FsZTNkKDEsIDEsIDEpO1xuICAgIG9wYWNpdHk6IDE7IH1cbiAgNjklIHtcbiAgICBvcGFjaXR5OiAxOyB9XG4gIDcwJSB7XG4gICAgb3BhY2l0eTogMDsgfVxuICAxMDAlIHtcbiAgICBvcGFjaXR5OiAwOyB9IH1cblxuQGtleWZyYW1lcyBzY3JlZW5Qb3AtMyB7XG4gIDAlIHtcbiAgICBvcGFjaXR5OiAwOyB9XG4gIDYzJSB7XG4gICAgdHJhbnNmb3JtOiBzY2FsZTNkKDEsIDEsIDEpO1xuICAgIG9wYWNpdHk6IDA7IH1cbiAgNjQlIHtcbiAgICB0cmFuc2Zvcm06IHNjYWxlM2QoMS4xLCAxLjEsIDEpOyB9XG4gIDY4JSB7XG4gICAgdHJhbnNmb3JtOiBzY2FsZTNkKDEsIDEsIDEpO1xuICAgIG9wYWNpdHk6IDE7IH1cbiAgOTYlIHtcbiAgICBvcGFjaXR5OiAxOyB9XG4gIDEwMCUge1xuICAgIG9wYWNpdHk6IDA7IH0gfVxuXG5Aa2V5ZnJhbWVzIGhvbWUtYXBwLWdyb3VwLWlwaG9uZSB7XG4gIDAlIHtcbiAgICB0cmFuc2Zvcm06IHJvdGF0ZVkoMTVkZWcpIHRyYW5zbGF0ZTNkKDgwcHgsIDAsIDApOyB9XG4gIDEwMCUge1xuICAgIHRyYW5zZm9ybTogcm90YXRlWSgxNWRlZykgdHJhbnNsYXRlM2QoMCwgMCwgMCk7IH0gfVxuXG5Aa2V5ZnJhbWVzIGhvbWUtYXBwLWdyb3VwLWFuZHJvaWQge1xuICAwJSB7XG4gICAgdHJhbnNmb3JtOiByb3RhdGVZKDE1ZGVnKSB0cmFuc2xhdGUzZCgtNzRweCwgNDBweCwgMCk7IH1cbiAgMTAwJSB7XG4gICAgdHJhbnNmb3JtOiByb3RhdGVZKDE1ZGVnKSB0cmFuc2xhdGUzZCgwLCAwLCAwKTsgfSB9XG5cbkBrZXlmcmFtZXMgaG9tZS1hcHAtaXBob25lIHtcbiAgMCUge1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlM2QoMzBweCwgLTEwcHgsIDApOyB9XG4gIDEwMCUge1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlM2QoMCwgMCwgMCk7IH0gfVxuXG5Aa2V5ZnJhbWVzIGhvbWUtYXBwLWFuZHJvaWQge1xuICAwJSB7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUzZCgxMHB4LCAtNHB4LCAwKTsgfVxuICAxMDAlIHtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZTNkKDAsIDAsIDApOyB9IH1cblxuQGtleWZyYW1lcyBjYXJvdXNlbCB7XG4gIDAlIHtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoMCk7IH1cbiAgMTAwJSB7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC01MCUpOyB9IH1cblxuLmJhbm5lciB7XG4gIHRleHQtYWxpZ246IGNlbnRlcjsgfVxuICAuYmFubmVyLS1oZXJvIC5jb250YWluZXIge1xuICAgIG1heC13aWR0aDogNzAwcHg7IH1cbiAgLmJhbm5lci0taGVybyBoMSB7XG4gICAgbWFyZ2luLXRvcDogMmVtO1xuICAgIGZvbnQtc2l6ZTogMzZweDtcbiAgICBtYXJnaW4tYm90dG9tOiAxLjRlbTsgfVxuICAuYmFubmVyLS1oZXJvIHAge1xuICAgIGZvbnQtc2l6ZTogMTZweDtcbiAgICBsaW5lLWhlaWdodDogMS44ZW07IH1cblxuLmJhci5uYXZ5IHtcbiAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KHRvIHJpZ2h0LCAjMWQyNTM0IDAlLCAjMjQzNDUyIDEwMCUpOyB9XG4gIC5iYXIubmF2eSBoMSxcbiAgLmJhci5uYXZ5IGgyLFxuICAuYmFyLm5hdnkgaDMsXG4gIC5iYXIubmF2eSBoNCxcbiAgLmJhci5uYXZ5IGg1IHtcbiAgICBjb2xvcjogd2hpdGU7IH1cbiAgLmJhci5uYXZ5IHAge1xuICAgIGNvbG9yOiAjYTJiNWQ2OyB9XG5cbi5iYXIgaDEsXG4uYmFyIGgyLFxuLmJhciBoMyxcbi5iYXIgaDQsXG4uYmFyIGg1IHtcbiAgZm9udC13ZWlnaHQ6IDYwMDsgfVxuXG4uYmFyIHAge1xuICBtYXJnaW4tYm90dG9tOiAyN3B4OyB9XG5cbi5iYXIgLmJ0biB7XG4gIHBhZGRpbmc6IDIwcHggMjFweCAxNXB4OyB9XG5cbi5iYXIgLmhlcm8ge1xuICBwYWRkaW5nOiA5NXB4IDAgMTAxcHg7IH1cblxuYmFyLWNoYXJ0LFxuLnN1cnZleS1sYXlvdXQgbWFpbiBzdmcge1xuICB3aWR0aDogMTAwJTtcbiAgZGlzcGxheTogYmxvY2s7XG4gIG1hcmdpbi1ib3R0b206IDQ4cHg7IH1cbiAgYmFyLWNoYXJ0ID4gc3ZnLFxuICAuc3VydmV5LWxheW91dCBtYWluIHN2ZyA+IHN2ZyB7XG4gICAgd2lkdGg6IDEwMCU7IH1cbiAgYmFyLWNoYXJ0IC50aWNrIGxpbmUsXG4gIC5zdXJ2ZXktbGF5b3V0IG1haW4gc3ZnIC50aWNrIGxpbmUge1xuICAgIG9wYWNpdHk6IDA7IH1cbiAgYmFyLWNoYXJ0IC50aWNrIHRzcGFuLFxuICAuc3VydmV5LWxheW91dCBtYWluIHN2ZyAudGljayB0c3BhbiB7XG4gICAgZm9udC1zaXplOiAxMnB4O1xuICAgIGZvbnQtd2VpZ2h0OiA1MDA7XG4gICAgLXdlYmtpdC1mb250LXNtb290aGluZzogc3VicGl4ZWwtYW50aWFsaWFzZWQ7IH1cbiAgYmFyLWNoYXJ0IC5jMy10ZXh0LFxuICAuc3VydmV5LWxheW91dCBtYWluIHN2ZyAuYzMtdGV4dCB7XG4gICAgZm9udC1zaXplOiAxMXB4O1xuICAgIGZvbnQtd2VpZ2h0OiA1MDA7XG4gICAgLXdlYmtpdC1mb250LXNtb290aGluZzogc3VicGl4ZWwtYW50aWFsaWFzZWQ7IH1cbiAgYmFyLWNoYXJ0IC5kb21haW4sXG4gIC5zdXJ2ZXktbGF5b3V0IG1haW4gc3ZnIC5kb21haW4ge1xuICAgIG9wYWNpdHk6IDA7IH1cbiAgYmFyLWNoYXJ0IC5jMy1ncmlkIGxpbmUsXG4gIC5zdXJ2ZXktbGF5b3V0IG1haW4gc3ZnIC5jMy1ncmlkIGxpbmUge1xuICAgIHN0cm9rZTogI2VlZTtcbiAgICBzdHJva2UtZGFzaGFycmF5OiAwOyB9XG4gIGJhci1jaGFydCAuYzMtYmFyLl9leHBhbmRlZF8sXG4gIC5zdXJ2ZXktbGF5b3V0IG1haW4gc3ZnIC5jMy1iYXIuX2V4cGFuZGVkXyB7XG4gICAgZmlsbC1vcGFjaXR5OiAxOyB9XG5cbi5jaGVja21hcmstbGlzdC0tbGFyZ2Uge1xuICBtYXgtd2lkdGg6IDM4MHB4OyB9XG4gIC5jaGVja21hcmstbGlzdC0tbGFyZ2UgbGkge1xuICAgIGxpbmUtaGVpZ2h0OiAyNnB4O1xuICAgIGZvbnQtc2l6ZTogMTZweDtcbiAgICBsZXR0ZXItc3BhY2luZzogLTAuMDFlbTtcbiAgICBjb2xvcjogIzYxNkU3RTtcbiAgICBkaXNwbGF5OiBmbGV4OyB9XG4gIC5jaGVja21hcmstbGlzdC0tbGFyZ2UgbGkgKyBsaSB7XG4gICAgbWFyZ2luLXRvcDogMjBweDsgfVxuICAuY2hlY2ttYXJrLWxpc3QtLWxhcmdlIGkge1xuICAgIG1hcmdpbi1yaWdodDogNnB4O1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICB3aWR0aDogMjRweDtcbiAgICBoZWlnaHQ6IDI0cHg7XG4gICAgZmxleDogMCAwIDI0cHg7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICAgIGJvcmRlci1yYWRpdXM6IDEwMCU7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogIzczODQ5QTtcbiAgICB6LWluZGV4OiAtMTtcbiAgICBtYXJnaW4tcmlnaHQ6IDE2cHg7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDJweCk7IH1cbiAgLmNoZWNrbWFyay1saXN0LS1sYXJnZSBpb24taWNvbiB7XG4gICAgZm9udC1zaXplOiAxNnB4O1xuICAgIGNvbG9yOiAjZmZmOyB9XG4gIC5jaGVja21hcmstbGlzdC0tbGFyZ2UgaGdyb3VwIGg1IHtcbiAgICBtYXJnaW4tdG9wOiAtMnB4O1xuICAgIG1hcmdpbi1ib3R0b206IDA7XG4gICAgbGluZS1oZWlnaHQ6IDMzcHg7XG4gICAgZm9udC1zaXplOiAxNnB4O1xuICAgIGxldHRlci1zcGFjaW5nOiAtMC4wMWVtO1xuICAgIGNvbG9yOiAjM0M1MzZGO1xuICAgIGZvbnQtd2VpZ2h0OiA2MDA7IH1cbiAgLmNoZWNrbWFyay1saXN0LS1sYXJnZSBoZ3JvdXAgcCB7XG4gICAgbGluZS1oZWlnaHQ6IDIzcHg7XG4gICAgZm9udC1zaXplOiAxNHB4O1xuICAgIGxldHRlci1zcGFjaW5nOiAtMC4wMWVtO1xuICAgIGNvbG9yOiAjOTJBMUIzOyB9XG5cbi5jaGVja21hcmstbGlzdC0tc21hbGwge1xuICBtYXJnaW46IDA7XG4gIHBhZGRpbmc6IDA7IH1cbiAgLmNoZWNrbWFyay1saXN0LS1zbWFsbCBsaSB7XG4gICAgbGluZS1oZWlnaHQ6IDEzcHg7XG4gICAgZm9udC1zaXplOiAxMnB4O1xuICAgIGNvbG9yOiAjNUI3MDhCO1xuICAgIGRpc3BsYXk6IGZsZXg7IH1cbiAgLmNoZWNrbWFyay1saXN0LS1zbWFsbCBpb24taWNvbiB7XG4gICAgZm9udC1zaXplOiAxNXB4O1xuICAgIGNvbG9yOiAjOTJBMUIzO1xuICAgIGZsZXg6IDAgMCAxNXB4O1xuICAgIG1hcmdpbi1yaWdodDogNnB4O1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSg0cHgpOyB9XG5cbi5tb2RhbCBmb3JtLFxuLmZvcm0taW5saW5lIHtcbiAgbWF4LXdpZHRoOiA0MjBweDsgfVxuICAubW9kYWwgZm9ybSBpbnB1dCxcbiAgLm1vZGFsIGZvcm0gLnNlbGVjdC13cmFwcGVyLFxuICAubW9kYWwgZm9ybSB0ZXh0YXJlYSxcbiAgLmZvcm0taW5saW5lIGlucHV0LFxuICAuZm9ybS1pbmxpbmUgLnNlbGVjdC13cmFwcGVyLFxuICAuZm9ybS1pbmxpbmUgdGV4dGFyZWEge1xuICAgIGJvcmRlcjogMXB4IHNvbGlkICNlMWU1ZWQ7XG4gICAgZm9udC13ZWlnaHQ6IDUwMDtcbiAgICBmbG9hdDogbGVmdDtcbiAgICBib3JkZXItcmFkaXVzOiA0cHg7XG4gICAgdHJhbnNpdGlvbjogYm9yZGVyLWNvbG9yIC4ycztcbiAgICBib3gtc2hhZG93OiBub25lOyB9XG4gICAgLm1vZGFsIGZvcm0gaW5wdXQ6Oi13ZWJraXQtaW5wdXQtcGxhY2Vob2xkZXIsXG4gICAgLm1vZGFsIGZvcm0gLnNlbGVjdC13cmFwcGVyOjotd2Via2l0LWlucHV0LXBsYWNlaG9sZGVyLFxuICAgIC5tb2RhbCBmb3JtIHRleHRhcmVhOjotd2Via2l0LWlucHV0LXBsYWNlaG9sZGVyLFxuICAgIC5mb3JtLWlubGluZSBpbnB1dDo6LXdlYmtpdC1pbnB1dC1wbGFjZWhvbGRlcixcbiAgICAuZm9ybS1pbmxpbmUgLnNlbGVjdC13cmFwcGVyOjotd2Via2l0LWlucHV0LXBsYWNlaG9sZGVyLFxuICAgIC5mb3JtLWlubGluZSB0ZXh0YXJlYTo6LXdlYmtpdC1pbnB1dC1wbGFjZWhvbGRlciB7XG4gICAgICBjb2xvcjogI2EwYTViMDsgfVxuICAgIC5tb2RhbCBmb3JtIGlucHV0Oi1tcy1pbnB1dC1wbGFjZWhvbGRlcixcbiAgICAubW9kYWwgZm9ybSAuc2VsZWN0LXdyYXBwZXI6LW1zLWlucHV0LXBsYWNlaG9sZGVyLFxuICAgIC5tb2RhbCBmb3JtIHRleHRhcmVhOi1tcy1pbnB1dC1wbGFjZWhvbGRlcixcbiAgICAuZm9ybS1pbmxpbmUgaW5wdXQ6LW1zLWlucHV0LXBsYWNlaG9sZGVyLFxuICAgIC5mb3JtLWlubGluZSAuc2VsZWN0LXdyYXBwZXI6LW1zLWlucHV0LXBsYWNlaG9sZGVyLFxuICAgIC5mb3JtLWlubGluZSB0ZXh0YXJlYTotbXMtaW5wdXQtcGxhY2Vob2xkZXIge1xuICAgICAgY29sb3I6ICNhMGE1YjA7IH1cbiAgICAubW9kYWwgZm9ybSBpbnB1dDp2YWxpZCxcbiAgICAubW9kYWwgZm9ybSAuc2VsZWN0LXdyYXBwZXI6dmFsaWQsXG4gICAgLm1vZGFsIGZvcm0gdGV4dGFyZWE6dmFsaWQsXG4gICAgLmZvcm0taW5saW5lIGlucHV0OnZhbGlkLFxuICAgIC5mb3JtLWlubGluZSAuc2VsZWN0LXdyYXBwZXI6dmFsaWQsXG4gICAgLmZvcm0taW5saW5lIHRleHRhcmVhOnZhbGlkIHtcbiAgICAgIGJvcmRlci1jb2xvcjogI0I0QkJDNTsgfVxuICAgIC5tb2RhbCBmb3JtIGlucHV0OmhvdmVyLCAubW9kYWwgZm9ybSBpbnB1dDpmb2N1cywgLm1vZGFsIGZvcm0gaW5wdXQ6YWN0aXZlLFxuICAgIC5tb2RhbCBmb3JtIC5zZWxlY3Qtd3JhcHBlcjpob3ZlcixcbiAgICAubW9kYWwgZm9ybSAuc2VsZWN0LXdyYXBwZXI6Zm9jdXMsXG4gICAgLm1vZGFsIGZvcm0gLnNlbGVjdC13cmFwcGVyOmFjdGl2ZSxcbiAgICAubW9kYWwgZm9ybSB0ZXh0YXJlYTpob3ZlcixcbiAgICAubW9kYWwgZm9ybSB0ZXh0YXJlYTpmb2N1cyxcbiAgICAubW9kYWwgZm9ybSB0ZXh0YXJlYTphY3RpdmUsXG4gICAgLmZvcm0taW5saW5lIGlucHV0OmhvdmVyLFxuICAgIC5mb3JtLWlubGluZSBpbnB1dDpmb2N1cyxcbiAgICAuZm9ybS1pbmxpbmUgaW5wdXQ6YWN0aXZlLFxuICAgIC5mb3JtLWlubGluZSAuc2VsZWN0LXdyYXBwZXI6aG92ZXIsXG4gICAgLmZvcm0taW5saW5lIC5zZWxlY3Qtd3JhcHBlcjpmb2N1cyxcbiAgICAuZm9ybS1pbmxpbmUgLnNlbGVjdC13cmFwcGVyOmFjdGl2ZSxcbiAgICAuZm9ybS1pbmxpbmUgdGV4dGFyZWE6aG92ZXIsXG4gICAgLmZvcm0taW5saW5lIHRleHRhcmVhOmZvY3VzLFxuICAgIC5mb3JtLWlubGluZSB0ZXh0YXJlYTphY3RpdmUge1xuICAgICAgb3V0bGluZTogbm9uZTtcbiAgICAgIGJvcmRlci1jb2xvcjogIzRhOGJmYztcbiAgICAgIGJveC1zaGFkb3c6IG5vbmU7IH1cbiAgLm1vZGFsIGZvcm0gaW5wdXQuaW52YWxpZCxcbiAgLm1vZGFsIGZvcm0gaW5wdXQubmctdG91Y2hlZDpub3QoOmZvY3VzKTpub3QoOnZhbGlkKSxcbiAgLmZvcm0taW5saW5lIGlucHV0LmludmFsaWQsXG4gIC5mb3JtLWlubGluZSBpbnB1dC5uZy10b3VjaGVkOm5vdCg6Zm9jdXMpOm5vdCg6dmFsaWQpIHtcbiAgICBib3JkZXItY29sb3I6ICNmODU1NmM7IH1cbiAgLm1vZGFsIGZvcm0gaW5wdXQsXG4gIC5tb2RhbCBmb3JtIC5zZWxlY3Qtd3JhcHBlcixcbiAgLm1vZGFsIGZvcm0gaW5wdXQuZm9ybS1jb250cm9sLFxuICAuZm9ybS1pbmxpbmUgaW5wdXQsXG4gIC5mb3JtLWlubGluZSAuc2VsZWN0LXdyYXBwZXIsXG4gIC5mb3JtLWlubGluZSBpbnB1dC5mb3JtLWNvbnRyb2wge1xuICAgIHdpZHRoOiAxOTBweDtcbiAgICBtYXJnaW46IDAgN3B4IDEwcHggMDtcbiAgICBoZWlnaHQ6IDQzcHg7IH1cbiAgICAubW9kYWwgZm9ybSBpbnB1dDpudGgtY2hpbGQoMiksIC5tb2RhbCBmb3JtIGlucHV0Om50aC1jaGlsZCg0KSwgLm1vZGFsIGZvcm0gaW5wdXQ6bnRoLWNoaWxkKDYpLCAubW9kYWwgZm9ybSBpbnB1dDpudGgtY2hpbGQoOCksXG4gICAgLm1vZGFsIGZvcm0gLnNlbGVjdC13cmFwcGVyOm50aC1jaGlsZCgyKSxcbiAgICAubW9kYWwgZm9ybSAuc2VsZWN0LXdyYXBwZXI6bnRoLWNoaWxkKDQpLFxuICAgIC5tb2RhbCBmb3JtIC5zZWxlY3Qtd3JhcHBlcjpudGgtY2hpbGQoNiksXG4gICAgLm1vZGFsIGZvcm0gLnNlbGVjdC13cmFwcGVyOm50aC1jaGlsZCg4KSxcbiAgICAubW9kYWwgZm9ybSBpbnB1dC5mb3JtLWNvbnRyb2w6bnRoLWNoaWxkKDIpLFxuICAgIC5tb2RhbCBmb3JtIGlucHV0LmZvcm0tY29udHJvbDpudGgtY2hpbGQoNCksXG4gICAgLm1vZGFsIGZvcm0gaW5wdXQuZm9ybS1jb250cm9sOm50aC1jaGlsZCg2KSxcbiAgICAubW9kYWwgZm9ybSBpbnB1dC5mb3JtLWNvbnRyb2w6bnRoLWNoaWxkKDgpLFxuICAgIC5mb3JtLWlubGluZSBpbnB1dDpudGgtY2hpbGQoMiksXG4gICAgLmZvcm0taW5saW5lIGlucHV0Om50aC1jaGlsZCg0KSxcbiAgICAuZm9ybS1pbmxpbmUgaW5wdXQ6bnRoLWNoaWxkKDYpLFxuICAgIC5mb3JtLWlubGluZSBpbnB1dDpudGgtY2hpbGQoOCksXG4gICAgLmZvcm0taW5saW5lIC5zZWxlY3Qtd3JhcHBlcjpudGgtY2hpbGQoMiksXG4gICAgLmZvcm0taW5saW5lIC5zZWxlY3Qtd3JhcHBlcjpudGgtY2hpbGQoNCksXG4gICAgLmZvcm0taW5saW5lIC5zZWxlY3Qtd3JhcHBlcjpudGgtY2hpbGQoNiksXG4gICAgLmZvcm0taW5saW5lIC5zZWxlY3Qtd3JhcHBlcjpudGgtY2hpbGQoOCksXG4gICAgLmZvcm0taW5saW5lIGlucHV0LmZvcm0tY29udHJvbDpudGgtY2hpbGQoMiksXG4gICAgLmZvcm0taW5saW5lIGlucHV0LmZvcm0tY29udHJvbDpudGgtY2hpbGQoNCksXG4gICAgLmZvcm0taW5saW5lIGlucHV0LmZvcm0tY29udHJvbDpudGgtY2hpbGQoNiksXG4gICAgLmZvcm0taW5saW5lIGlucHV0LmZvcm0tY29udHJvbDpudGgtY2hpbGQoOCkge1xuICAgICAgbWFyZ2luLXJpZ2h0OiAwO1xuICAgICAgd2lkdGg6IDE5MHB4OyB9XG4gICAgLm1vZGFsIGZvcm0gaW5wdXQuZnVsbC13aWR0aCwgLm1vZGFsIGZvcm0gaW5wdXQuZnVsbC13aWR0aDpudGgtY2hpbGQoMiksIC5tb2RhbCBmb3JtIGlucHV0LmZ1bGwtd2lkdGg6bnRoLWNoaWxkKDQpLCAubW9kYWwgZm9ybSBpbnB1dC5mdWlsbC13aWR0aDpudGgtY2hpbGQoNiksIC5tb2RhbCBmb3JtIGlucHV0LmZ1aWxsLXdpZHRoOm50aC1jaGlsZCg4KSxcbiAgICAubW9kYWwgZm9ybSAuc2VsZWN0LXdyYXBwZXIuZnVsbC13aWR0aCxcbiAgICAubW9kYWwgZm9ybSAuc2VsZWN0LXdyYXBwZXIuZnVsbC13aWR0aDpudGgtY2hpbGQoMiksXG4gICAgLm1vZGFsIGZvcm0gLnNlbGVjdC13cmFwcGVyLmZ1bGwtd2lkdGg6bnRoLWNoaWxkKDQpLFxuICAgIC5tb2RhbCBmb3JtIC5zZWxlY3Qtd3JhcHBlci5mdWlsbC13aWR0aDpudGgtY2hpbGQoNiksXG4gICAgLm1vZGFsIGZvcm0gLnNlbGVjdC13cmFwcGVyLmZ1aWxsLXdpZHRoOm50aC1jaGlsZCg4KSxcbiAgICAubW9kYWwgZm9ybSBpbnB1dC5mb3JtLWNvbnRyb2wuZnVsbC13aWR0aCxcbiAgICAubW9kYWwgZm9ybSBpbnB1dC5mb3JtLWNvbnRyb2wuZnVsbC13aWR0aDpudGgtY2hpbGQoMiksXG4gICAgLm1vZGFsIGZvcm0gaW5wdXQuZm9ybS1jb250cm9sLmZ1bGwtd2lkdGg6bnRoLWNoaWxkKDQpLFxuICAgIC5tb2RhbCBmb3JtIGlucHV0LmZvcm0tY29udHJvbC5mdWlsbC13aWR0aDpudGgtY2hpbGQoNiksXG4gICAgLm1vZGFsIGZvcm0gaW5wdXQuZm9ybS1jb250cm9sLmZ1aWxsLXdpZHRoOm50aC1jaGlsZCg4KSxcbiAgICAuZm9ybS1pbmxpbmUgaW5wdXQuZnVsbC13aWR0aCxcbiAgICAuZm9ybS1pbmxpbmUgaW5wdXQuZnVsbC13aWR0aDpudGgtY2hpbGQoMiksXG4gICAgLmZvcm0taW5saW5lIGlucHV0LmZ1bGwtd2lkdGg6bnRoLWNoaWxkKDQpLFxuICAgIC5mb3JtLWlubGluZSBpbnB1dC5mdWlsbC13aWR0aDpudGgtY2hpbGQoNiksXG4gICAgLmZvcm0taW5saW5lIGlucHV0LmZ1aWxsLXdpZHRoOm50aC1jaGlsZCg4KSxcbiAgICAuZm9ybS1pbmxpbmUgLnNlbGVjdC13cmFwcGVyLmZ1bGwtd2lkdGgsXG4gICAgLmZvcm0taW5saW5lIC5zZWxlY3Qtd3JhcHBlci5mdWxsLXdpZHRoOm50aC1jaGlsZCgyKSxcbiAgICAuZm9ybS1pbmxpbmUgLnNlbGVjdC13cmFwcGVyLmZ1bGwtd2lkdGg6bnRoLWNoaWxkKDQpLFxuICAgIC5mb3JtLWlubGluZSAuc2VsZWN0LXdyYXBwZXIuZnVpbGwtd2lkdGg6bnRoLWNoaWxkKDYpLFxuICAgIC5mb3JtLWlubGluZSAuc2VsZWN0LXdyYXBwZXIuZnVpbGwtd2lkdGg6bnRoLWNoaWxkKDgpLFxuICAgIC5mb3JtLWlubGluZSBpbnB1dC5mb3JtLWNvbnRyb2wuZnVsbC13aWR0aCxcbiAgICAuZm9ybS1pbmxpbmUgaW5wdXQuZm9ybS1jb250cm9sLmZ1bGwtd2lkdGg6bnRoLWNoaWxkKDIpLFxuICAgIC5mb3JtLWlubGluZSBpbnB1dC5mb3JtLWNvbnRyb2wuZnVsbC13aWR0aDpudGgtY2hpbGQoNCksXG4gICAgLmZvcm0taW5saW5lIGlucHV0LmZvcm0tY29udHJvbC5mdWlsbC13aWR0aDpudGgtY2hpbGQoNiksXG4gICAgLmZvcm0taW5saW5lIGlucHV0LmZvcm0tY29udHJvbC5mdWlsbC13aWR0aDpudGgtY2hpbGQoOCkge1xuICAgICAgd2lkdGg6IDEwMCU7IH1cbiAgLm1vZGFsIGZvcm0gLnNlbGVjdC13cmFwcGVyLFxuICAuZm9ybS1pbmxpbmUgLnNlbGVjdC13cmFwcGVyIHtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgYmFja2dyb3VuZDogd2hpdGU7IH1cbiAgICAubW9kYWwgZm9ybSAuc2VsZWN0LXdyYXBwZXIgLnVwLFxuICAgIC5mb3JtLWlubGluZSAuc2VsZWN0LXdyYXBwZXIgLnVwIHtcbiAgICAgIHdpZHRoOiAwO1xuICAgICAgaGVpZ2h0OiAwO1xuICAgICAgYm9yZGVyLWxlZnQ6IDVweCBzb2xpZCB0cmFuc3BhcmVudDtcbiAgICAgIGJvcmRlci1yaWdodDogNXB4IHNvbGlkIHRyYW5zcGFyZW50O1xuICAgICAgYm9yZGVyLWJvdHRvbTogNXB4IHNvbGlkICM5ZGE1YjM7XG4gICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgIG1hcmdpbi1ib3R0b206IDNweDtcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgIHJpZ2h0OiAxMHB4O1xuICAgICAgdG9wOiAxM3B4OyB9XG4gICAgLm1vZGFsIGZvcm0gLnNlbGVjdC13cmFwcGVyIC5kbixcbiAgICAuZm9ybS1pbmxpbmUgLnNlbGVjdC13cmFwcGVyIC5kbiB7XG4gICAgICB3aWR0aDogMDtcbiAgICAgIGhlaWdodDogMDtcbiAgICAgIGJvcmRlci1sZWZ0OiA1cHggc29saWQgdHJhbnNwYXJlbnQ7XG4gICAgICBib3JkZXItcmlnaHQ6IDVweCBzb2xpZCB0cmFuc3BhcmVudDtcbiAgICAgIGJvcmRlci10b3A6IDVweCBzb2xpZCAjOWRhNWIzO1xuICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICByaWdodDogMTBweDtcbiAgICAgIHRvcDogMjBweDsgfVxuICAgIC5tb2RhbCBmb3JtIC5zZWxlY3Qtd3JhcHBlciBzZWxlY3QsXG4gICAgLmZvcm0taW5saW5lIC5zZWxlY3Qtd3JhcHBlciBzZWxlY3Qge1xuICAgICAgLXdlYmtpdC1hcHBlYXJhbmNlOiBub25lO1xuICAgICAgLW1vei1hcHBlYXJhbmNlOiBub25lO1xuICAgICAgLW1zLWFwcGVhcmFuY2U6IG5vbmU7XG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICBsZWZ0OiAwO1xuICAgICAgcmlnaHQ6IDA7XG4gICAgICB0b3A6IDA7XG4gICAgICBib3R0b206IDA7XG4gICAgICBib3JkZXI6IDA7XG4gICAgICBwYWRkaW5nLXRvcDogMTBweDtcbiAgICAgIG91dGxpbmU6IG5vbmU7XG4gICAgICBib3gtc2hhZG93OiBub25lO1xuICAgICAgei1pbmRleDogMTtcbiAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xuICAgICAgd2lkdGg6IDEwMCU7IH1cbiAgICAubW9kYWwgZm9ybSAuc2VsZWN0LXdyYXBwZXIubnVsbCxcbiAgICAuZm9ybS1pbmxpbmUgLnNlbGVjdC13cmFwcGVyLm51bGwge1xuICAgICAgYm9yZGVyLWNvbG9yOiAjZWJlZWYyOyB9XG4gICAgICAubW9kYWwgZm9ybSAuc2VsZWN0LXdyYXBwZXIubnVsbCBzZWxlY3QsXG4gICAgICAuZm9ybS1pbmxpbmUgLnNlbGVjdC13cmFwcGVyLm51bGwgc2VsZWN0IHtcbiAgICAgICAgY29sb3I6ICNhMGE1YjA7IH1cbiAgICAgIC5tb2RhbCBmb3JtIC5zZWxlY3Qtd3JhcHBlci5udWxsIC51cCxcbiAgICAgIC5mb3JtLWlubGluZSAuc2VsZWN0LXdyYXBwZXIubnVsbCAudXAge1xuICAgICAgICBib3JkZXItdG9wLWNvbG9yOiAjYTBhNWIwICFpbXBvcnRhbnQ7IH1cbiAgICAgIC5tb2RhbCBmb3JtIC5zZWxlY3Qtd3JhcHBlci5udWxsIC5kbixcbiAgICAgIC5mb3JtLWlubGluZSAuc2VsZWN0LXdyYXBwZXIubnVsbCAuZG4ge1xuICAgICAgICBib3JkZXItYm90dG9tLWNvbG9yOiAjYTBhNWIwICFpbXBvcnRhbnQ7IH1cbiAgLm1vZGFsIGZvcm0gdGV4dGFyZWEsXG4gIC5mb3JtLWlubGluZSB0ZXh0YXJlYSB7XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgcGFkZGluZzogMTJweDsgfVxuICBAbWVkaWEgKG1heC13aWR0aDogNDIwcHgpIHtcbiAgICAubW9kYWwgZm9ybSBpbnB1dCxcbiAgICAubW9kYWwgZm9ybSBpbnB1dDpudGgtY2hpbGQoMiksXG4gICAgLm1vZGFsIGZvcm0gaW5wdXQ6bnRoLWNoaWxkKDYpLFxuICAgIC5tb2RhbCBmb3JtIHNlbGVjdDpudGgtY2hpbGQoNCksXG4gICAgLmZvcm0taW5saW5lIGlucHV0LFxuICAgIC5mb3JtLWlubGluZSBpbnB1dDpudGgtY2hpbGQoMiksXG4gICAgLmZvcm0taW5saW5lIGlucHV0Om50aC1jaGlsZCg2KSxcbiAgICAuZm9ybS1pbmxpbmUgc2VsZWN0Om50aC1jaGlsZCg0KSB7XG4gICAgICB3aWR0aDogMTAwJTtcbiAgICAgIG1hcmdpbi1yaWdodDogMDsgfSB9XG4gIC5tb2RhbCBmb3JtIGJ1dHRvbixcbiAgLmZvcm0taW5saW5lIGJ1dHRvbiB7XG4gICAgZm9udC1zaXplOiAxM3B4O1xuICAgIHBhZGRpbmc6IDEwcHggMTNweCA4cHg7XG4gICAgaGVpZ2h0OiA0MXB4O1xuICAgIGxpbmUtaGVpZ2h0OiAxMHB4O1xuICAgIG1hcmdpbi10b3A6IDEwcHg7XG4gICAgZmxvYXQ6IHJpZ2h0O1xuICAgIGZvbnQtd2VpZ2h0OiA2MDA7XG4gICAgbGV0dGVyLXNwYWNpbmc6IDA7XG4gICAgdGV4dC10cmFuc2Zvcm06IG5vbmU7IH1cbiAgLm1vZGFsIGZvcm0gLnN1Y2Nlc3MsXG4gIC5mb3JtLWlubGluZSAuc3VjY2VzcyB7XG4gICAgY29sb3I6ICMxZWQxNzY7IH1cbiAgLm1vZGFsIGZvcm0gLmVycm9yLFxuICAuZm9ybS1pbmxpbmUgLmVycm9yIHtcbiAgICBjb2xvcjogI2Y4NTU2YzsgfVxuXG4ubmF2YmFyLWRlZmF1bHQge1xuICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQodG8gcmlnaHQsICMzNDdlZmYsICMxZWEzZmYpO1xuICBmb250LWZhbWlseTogXCJFaW5hXCIsIFwiSGVsdmV0aWNhIE5ldWVcIiwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmO1xuICBtYXJnaW4tYm90dG9tOiAyMHB4O1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIHBhZGRpbmctdG9wOiAyMHB4O1xuICBib3JkZXItcmFkaXVzOiAwO1xuICBtYXJnaW4tYm90dG9tOiAyMHB4O1xuICBtaW4taGVpZ2h0OiAzMnB4O1xuICB6LWluZGV4OiAzMDtcbiAgYm9yZGVyOiAwOyB9XG4gIEBtZWRpYSAobWF4LXdpZHRoOiA3NjdweCkge1xuICAgIC5uYXZiYXItZGVmYXVsdCB7XG4gICAgICBwb3NpdGlvbjogZml4ZWQ7XG4gICAgICB0b3A6IDA7XG4gICAgICB3aWR0aDogMTAwJTtcbiAgICAgIHBhZGRpbmctdG9wOiAxcHg7XG4gICAgICBtaW4taGVpZ2h0OiA1MHB4OyB9XG4gICAgICAubmF2YmFyLWRlZmF1bHQucHJvZHVjdHMtcGFnZSB7XG4gICAgICAgIHBvc2l0aW9uOiBmaXhlZDsgfSB9XG4gIC5uYXZiYXItZGVmYXVsdC5lbnRlcnByaXNlIHtcbiAgICBiYWNrZ3JvdW5kOiAjZmZmOyB9XG4gICAgLm5hdmJhci1kZWZhdWx0LmVudGVycHJpc2UgLm5hdmJhci1icmFuZCBzdmcge1xuICAgICAgZmlsbDogIzAwMDsgfVxuICAgIC5uYXZiYXItZGVmYXVsdC5lbnRlcnByaXNlIC5uYXZiYXItdG9nZ2xlIGkge1xuICAgICAgY29sb3I6ICMwMDA7IH1cbiAgICAubmF2YmFyLWRlZmF1bHQuZW50ZXJwcmlzZSAubmF2YmFyLXRvZ2dsZTpob3ZlciBpIHtcbiAgICAgIGNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuNik7IH1cbiAgQG1lZGlhIChtYXgtd2lkdGg6IDk5MXB4KSB7XG4gICAgLm5hdmJhci1kZWZhdWx0IC5uYXZiYXItaGVhZGVyIHtcbiAgICAgIHdpZHRoOiBhdXRvOyB9IH1cbiAgLm5hdmJhci1kZWZhdWx0IC5uYXZiYXItYnJhbmQge1xuICAgIGhlaWdodDogMzJweDtcbiAgICBwYWRkaW5nOiAxcHggMCAwIDEzcHg7XG4gICAgdHJhbnNpdGlvbjogMC4zcyBvcGFjaXR5OyB9XG4gICAgQG1lZGlhIChtYXgtd2lkdGg6IDc2N3B4KSB7XG4gICAgICAubmF2YmFyLWRlZmF1bHQgLm5hdmJhci1icmFuZCB7XG4gICAgICAgIHBhZGRpbmctdG9wOiA4cHg7IH0gfVxuICAgIC5uYXZiYXItZGVmYXVsdCAubmF2YmFyLWJyYW5kIGltZyB7XG4gICAgICB3aWR0aDogMTI4cHg7IH1cbiAgICAubmF2YmFyLWRlZmF1bHQgLm5hdmJhci1icmFuZDpob3ZlciB7XG4gICAgICBvcGFjaXR5OiAwLjY1OyB9XG4gIC5uYXZiYXItZGVmYXVsdC50cmFuc3BhcmVudCB7XG4gICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7IH1cbiAgICBAbWVkaWEgKG1heC13aWR0aDogNzY3cHgpIHtcbiAgICAgIC5uYXZiYXItZGVmYXVsdC50cmFuc3BhcmVudCB7XG4gICAgICAgIGJhY2tncm91bmQ6ICNmZmY7XG4gICAgICAgIGJveC1zaGFkb3c6IDBweCAxcHggMnB4IDBweCByZ2JhKDAsIDIwLCA1NiwgMC4wNik7IH0gfVxuICBAbWVkaWEgKG1heC13aWR0aDogNzY3cHgpIHtcbiAgICAubmF2YmFyLWRlZmF1bHQgLm5hdmJhci1jb2xsYXBzZSB7XG4gICAgICBib3gtc2hhZG93OiAwIDRweCA0cHggcmdiYSgwLCAwLCAwLCAwLjEpOyB9IH1cbiAgLm5hdmJhci1kZWZhdWx0ICNpb25pYy1pby1sb2dvIHtcbiAgICBmaWxsOiAjZmZmO1xuICAgIGhlaWdodDogMzBweDtcbiAgICB3aWR0aDogOTZweDtcbiAgICBtYXJnaW46IDA7IH1cbiAgICAubGlnaHQgLm5hdmJhci1kZWZhdWx0ICNpb25pYy1pby1sb2dvLCAubmF2YmFyLWRlZmF1bHQgI2lvbmljLWlvLWxvZ28ubGlnaHQge1xuICAgICAgZmlsbDogIzM4ODBGRjsgfVxuICAgIEBtZWRpYSAobWF4LXdpZHRoOiA3NjdweCkge1xuICAgICAgLm5hdmJhci1kZWZhdWx0ICNpb25pYy1pby1sb2dvIHtcbiAgICAgICAgZmlsbDogIzM4ODBGRjsgfSB9XG4gIC5uYXZiYXItZGVmYXVsdCAubmF2YmFyLWNvbGxhcHNlIHtcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgbWF4LWhlaWdodDogMzJweDsgfVxuICAgIEBtZWRpYSAobWF4LXdpZHRoOiA3NjdweCkge1xuICAgICAgLm5hdmJhci1kZWZhdWx0IC5uYXZiYXItY29sbGFwc2Uge1xuICAgICAgICBtYXgtaGVpZ2h0OiA2MDBweDtcbiAgICAgICAgbWFyZ2luLXRvcDogMjBweDsgfSB9XG4gIC5uYXZiYXItZGVmYXVsdCAubmF2YmFyLW5hdi5uYXZiYXItY2VudGVyIHtcbiAgICBmbG9hdDogbm9uZTtcbiAgICBtYXJnaW46IDAgYXV0bztcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7IH1cbiAgQG1lZGlhIChtaW4td2lkdGg6IDk5MnB4KSB7XG4gICAgLm5hdmJhci1kZWZhdWx0IC5uYXZiYXItbmF2Lm5hdmJhci1jZW50ZXIge1xuICAgICAgbWFyZ2luLWxlZnQ6IDBweDsgfSB9XG4gIEBtZWRpYSAobWF4LXdpZHRoOiA3NjdweCkge1xuICAgIC5uYXZiYXItZGVmYXVsdCAubmF2YmFyLW5hdiB7XG4gICAgICBwYWRkaW5nLXJpZ2h0OiA2cHg7XG4gICAgICBwYWRkaW5nLWxlZnQ6IDZweDsgfSB9XG4gIC5uYXZiYXItZGVmYXVsdCAubmF2YmFyLW5hdiA+IGxpIHtcbiAgICBwYWRkaW5nLXRvcDogMDsgfVxuICAgIEBtZWRpYSAobWluLXdpZHRoOiA3NjhweCkgYW5kIChtYXgtd2lkdGg6IDk5MXB4KSB7XG4gICAgICAubmF2YmFyLWRlZmF1bHQgLm5hdmJhci1uYXYgPiBsaS5zbS1oaWRlIHtcbiAgICAgICAgZGlzcGxheTogbm9uZTsgfSB9XG4gICAgQG1lZGlhIChtYXgtd2lkdGg6IDEyMTlweCkge1xuICAgICAgLm5hdmJhci1kZWZhdWx0IC5uYXZiYXItbmF2ID4gbGkuaGlkZS1sdC1sZyxcbiAgICAgIC5uYXZiYXItZGVmYXVsdCAubmF2YmFyLW5hdiA+IGxpIC5oaWRlLWx0LWxnIHtcbiAgICAgICAgZGlzcGxheTogbm9uZTsgfSB9XG4gICAgQG1lZGlhIChtaW4td2lkdGg6IDEyMjBweCkge1xuICAgICAgLm5hdmJhci1kZWZhdWx0IC5uYXZiYXItbmF2ID4gbGkuaGlkZS1ndC1tZCxcbiAgICAgIC5uYXZiYXItZGVmYXVsdCAubmF2YmFyLW5hdiA+IGxpIC5oaWRlLWd0LW1kIHtcbiAgICAgICAgZGlzcGxheTogbm9uZTsgfSB9XG4gICAgLm5hdmJhci1kZWZhdWx0IC5uYXZiYXItbmF2ID4gbGkgPiBhIHtcbiAgICAgIGNvbG9yOiB3aGl0ZTtcbiAgICAgIGZvbnQtc2l6ZTogMTNweDtcbiAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7XG4gICAgICBtYXJnaW4tdG9wOiAwO1xuICAgICAgcGFkZGluZzogNnB4IDhweDtcbiAgICAgIGxldHRlci1zcGFjaW5nOiAtLjAxZW07XG4gICAgICBtYXJnaW4tbGVmdDogMTRweDtcbiAgICAgIG1hcmdpbi1yaWdodDogMTRweDtcbiAgICAgIHRyYW5zaXRpb246IDAuMnMgY29sb3I7XG4gICAgICBib3JkZXItdG9wOiBub25lO1xuICAgICAgYm9yZGVyLXJhZGl1czogNHB4O1xuICAgICAgdHJhbnNpdGlvbi1kdXJhdGlvbjogMC4zczsgfVxuICAgICAgQG1lZGlhIChtYXgtd2lkdGg6IDEyMTlweCkge1xuICAgICAgICAubmF2YmFyLWRlZmF1bHQgLm5hdmJhci1uYXYgPiBsaSA+IGEge1xuICAgICAgICAgIG1hcmdpbi1sZWZ0OiA5cHg7XG4gICAgICAgICAgbWFyZ2luLXJpZ2h0OiA5cHg7IH0gfVxuICAgICAgQG1lZGlhIChtYXgtd2lkdGg6IDk5MXB4KSB7XG4gICAgICAgIC5uYXZiYXItZGVmYXVsdCAubmF2YmFyLW5hdiA+IGxpID4gYSB7XG4gICAgICAgICAgbWFyZ2luLWxlZnQ6IDA7XG4gICAgICAgICAgbWFyZ2luLXJpZ2h0OiAwO1xuICAgICAgICAgIHBhZGRpbmctbGVmdDogMTBweDtcbiAgICAgICAgICBwYWRkaW5nLXJpZ2h0OiAxMHB4OyB9IH1cbiAgICAgIEBtZWRpYSAobWF4LXdpZHRoOiA3NjdweCkge1xuICAgICAgICAubmF2YmFyLWRlZmF1bHQgLm5hdmJhci1uYXYgPiBsaSA+IGEge1xuICAgICAgICAgIHBhZGRpbmc6IDE1cHg7XG4gICAgICAgICAgYm9yZGVyOiAwOyB9IH1cbiAgICAgIC5uYXZiYXItZGVmYXVsdCAubmF2YmFyLW5hdiA+IGxpID4gYTpob3ZlciB7XG4gICAgICAgIGNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNjUpOyB9XG4gICAgLm5hdmJhci1kZWZhdWx0IC5uYXZiYXItbmF2ID4gbGkub3BlbiA+IGEge1xuICAgICAgY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC42NSkgIWltcG9ydGFudDsgfVxuICAgIC5uYXZiYXItZGVmYXVsdCAubmF2YmFyLW5hdiA+IGxpLmFjdGl2ZSA+IGEge1xuICAgICAgY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC40KTtcbiAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOyB9XG4gICAgLm5hdmJhci1kZWZhdWx0IC5uYXZiYXItbmF2ID4gbGkuYWN0aXZlID4gYTpob3ZlciB7XG4gICAgICBjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjY1KTsgfVxuICAgIC5saWdodCAubmF2YmFyLWRlZmF1bHQgLm5hdmJhci1uYXYgPiBsaS5vcGVuID4gYSB7XG4gICAgICBjb2xvcjogIzEzMTkyNCAhaW1wb3J0YW50OyB9XG4gICAgLm5hdmJhci1kZWZhdWx0IC5uYXZiYXItbmF2ID4gbGkuaGVhZGVyLWJ0bi13aGl0ZSBhIHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IHdoaXRlO1xuICAgICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbiAgICAgIHBhZGRpbmc6IDZweCA4cHggNnB4O1xuICAgICAgYm9yZGVyLXJhZGl1czogNHB4O1xuICAgICAgY29sb3I6ICM0YThiZmM7XG4gICAgICBib3gtc2hhZG93OiAwIDFweCAzcHggcmdiYSgwLCAwLCAwLCAwLjEpO1xuICAgICAgbWFyZ2luLXJpZ2h0OiAwO1xuICAgICAgbWFyZ2luLWxlZnQ6IDI0cHg7XG4gICAgICB0cmFuc2l0aW9uOiAwLjNzIGJveC1zaGFkb3csIDAuM3MgYmFja2dyb3VuZDsgfVxuICAgICAgLm5hdmJhci1kZWZhdWx0IC5uYXZiYXItbmF2ID4gbGkuaGVhZGVyLWJ0bi13aGl0ZSBhOmhvdmVyIHtcbiAgICAgICAgb3BhY2l0eTogMTtcbiAgICAgICAgY29sb3I6ICM0YThiZmM7XG4gICAgICAgIGJveC1zaGFkb3c6IDAgM3B4IDVweCByZ2JhKDAsIDAsIDAsIDAuMTUpO1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTsgfVxuICAgICAgLm5hdmJhci1kZWZhdWx0IC5uYXZiYXItbmF2ID4gbGkuaGVhZGVyLWJ0bi13aGl0ZSBhOmFjdGl2ZSB7XG4gICAgICAgIGJveC1zaGFkb3c6IGluc2V0IDAgMXB4IDRweCByZ2JhKDAsIDAsIDAsIDAuMik7IH1cbiAgICBAbWVkaWEgKG1pbi13aWR0aDogNzY4cHgpIHtcbiAgICAgIC5uYXZiYXItZGVmYXVsdCAubmF2YmFyLW5hdiA+IGxpLmhlYWRlci1idG4td2hpdGUuYmx1ZSBhIHtcbiAgICAgICAgY29sb3I6IHdoaXRlO1xuICAgICAgICBiYWNrZ3JvdW5kOiAjNGE4YmZjOyB9XG4gICAgICAgIC5uYXZiYXItZGVmYXVsdCAubmF2YmFyLW5hdiA+IGxpLmhlYWRlci1idG4td2hpdGUuYmx1ZSBhOmhvdmVyIHtcbiAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDc0LCAxMzksIDI1MiwgMC45KTsgfSB9XG4gIC5uYXZiYXItZGVmYXVsdCAuZHJvcGRvd24gLmRyb3Bkb3duLW1lbnUge1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIHZpc2liaWxpdHk6IDA7XG4gICAgb3BhY2l0eTogMDtcbiAgICB0cmFuc2Zvcm06IHNjYWxlWSgwKTtcbiAgICB0cmFuc2Zvcm0tb3JpZ2luOiB0b3A7XG4gICAgdHJhbnNpdGlvbjogdHJhbnNmb3JtIDAuM3MgZWFzZSwgb3BhY2l0eSAwLjNzOyB9XG4gIC5uYXZiYXItZGVmYXVsdCAuZHJvcGRvd24ub3BlbiAuZHJvcGRvd24tbWVudSB7XG4gICAgdmlzaWJpbGl0eTogMTtcbiAgICBvcGFjaXR5OiAxO1xuICAgIHRyYW5zZm9ybTogc2NhbGVZKDEpOyB9XG4gIC5uYXZiYXItZGVmYXVsdCAuZHJvcGRvd24gLmRpdmlkZXIge1xuICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjZWJlZWYyO1xuICAgIG1hcmdpbjogNnB4IDAgMTNweDsgfVxuICBAbWVkaWEgKG1heC13aWR0aDogNzY3cHgpIHtcbiAgICAubmF2YmFyLWRlZmF1bHQgLmRyb3Bkb3duIC5kcm9wZG93bi1tZW51IHtcbiAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsgfSB9XG4gIEBtZWRpYSAobWluLXdpZHRoOiA3NjhweCkge1xuICAgIC5uYXZiYXItZGVmYXVsdCAuZHJvcGRvd24gLmRyb3Bkb3duLW1lbnUge1xuICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICBib3JkZXI6IDA7XG4gICAgICBib3JkZXItcmFkaXVzOiA4cHg7XG4gICAgICB0b3A6IDM5cHg7XG4gICAgICBwYWRkaW5nOiAxOHB4IDA7XG4gICAgICByaWdodDogYXV0bztcbiAgICAgIGxlZnQ6IDUwJTtcbiAgICAgIGJveC1zaGFkb3c6IDAgMTBweCAyOHB4IHJnYmEoMCwgMTYsIDQ0LCAwLjE4KSwgMCAxcHggNXB4IHJnYmEoMCwgMTYsIDQ0LCAwLjIpO1xuICAgICAgb3BhY2l0eTogMDtcbiAgICAgIHRvcDogLTIwMDBweDtcbiAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lO1xuICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUzZCgtNTAlLCAtMTBweCwgMCkgc2NhbGUoMSwgMSkgcGVyc3BlY3RpdmUoMXB4KTtcbiAgICAgIHotaW5kZXg6IDE7XG4gICAgICB0cmFuc2l0aW9uLWRlbGF5OiAwcztcbiAgICAgIHRyYW5zZm9ybS1vcmlnaW46IDUwJSAwO1xuICAgICAgdHJhbnNpdGlvbjogdHJhbnNmb3JtIDAuMnMgY3ViaWMtYmV6aWVyKDAuMzYsIDAuNjYsIDAuMDQsIDEpLCBvcGFjaXR5IDAuMnMgbGluZWFyLCB0b3AgMC4yNXMgc3RlcC1lbmQ7XG4gICAgICBiYWNrZmFjZS12aXNpYmlsaXR5OiBoaWRkZW47IH1cbiAgICAgIC5uYXZiYXItZGVmYXVsdCAuZHJvcGRvd24gLmRyb3Bkb3duLW1lbnVfX3RleHQtLWwxLCAubmF2YmFyLWRlZmF1bHQgLmRyb3Bkb3duIC5kcm9wZG93bi1tZW51X190ZXh0LS1sMiwgLm5hdmJhci1kZWZhdWx0IC5kcm9wZG93biAuZHJvcGRvd24tbWVudV9fdGV4dC0tbDMsIC5uYXZiYXItZGVmYXVsdCAuZHJvcGRvd24gLmRyb3Bkb3duLW1lbnVfX3RleHQtLWw0IHtcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuMztcbiAgICAgICAgbGV0dGVyLXNwYWNpbmc6IC0wLjAxZW07XG4gICAgICAgIGNvbG9yOiAjNTI5MEZFOyB9XG4gICAgICAubmF2YmFyLWRlZmF1bHQgLmRyb3Bkb3duIC5kcm9wZG93bi1tZW51X190ZXh0LS1sMSB7XG4gICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7XG4gICAgICAgIGZvbnQtc2l6ZTogMTZweDsgfVxuICAgICAgICAubmF2YmFyLWRlZmF1bHQgLmRyb3Bkb3duIC5kcm9wZG93bi1tZW51X190ZXh0LS1sMSBpb24taWNvbiB7XG4gICAgICAgICAgdHJhbnNpdGlvbjogdHJhbnNsYXRlIDAuMnM7XG4gICAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoMCwgM3B4KTsgfVxuICAgICAgICAubmF2YmFyLWRlZmF1bHQgLmRyb3Bkb3duIC5kcm9wZG93bi1tZW51X190ZXh0LS1sMTpob3ZlciBpb24taWNvbiB7XG4gICAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoMXB4LCAzcHgpOyB9XG4gICAgICAubmF2YmFyLWRlZmF1bHQgLmRyb3Bkb3duIC5kcm9wZG93bi1tZW51X190ZXh0LS1sMiB7XG4gICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7XG4gICAgICAgIGZvbnQtc2l6ZTogMTRweDsgfVxuICAgICAgLm5hdmJhci1kZWZhdWx0IC5kcm9wZG93biAuZHJvcGRvd24tbWVudV9fdGV4dC0tbDMge1xuICAgICAgICBmb250LXNpemU6IDEzcHg7XG4gICAgICAgIGZvbnQtZmFtaWx5OiBcIkludGVyXCIsIFwiSW50ZXIgVUlcIiwgSGVsdmV0aWNhLCBBcmlhbCwgc2Fucy1zZXJpZjsgfVxuICAgICAgLm5hdmJhci1kZWZhdWx0IC5kcm9wZG93biAuZHJvcGRvd24tbWVudV9fdGV4dC0tbDQge1xuICAgICAgICBmb250LXNpemU6IDEwcHg7XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxO1xuICAgICAgICBsZXR0ZXItc3BhY2luZzogMC4xZW07XG4gICAgICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XG4gICAgICAgIGNvbG9yOiAjQjJCRUNEO1xuICAgICAgICBmb250LXdlaWdodDogNzAwOyB9XG4gICAgICAubmF2YmFyLWRlZmF1bHQgLmRyb3Bkb3duIC5kcm9wZG93bi1tZW51IHVsICsgaDYge1xuICAgICAgICBtYXJnaW4tdG9wOiAyNnB4OyB9XG4gICAgICAubmF2YmFyLWRlZmF1bHQgLmRyb3Bkb3duIC5kcm9wZG93bi1tZW51IGEsXG4gICAgICAubmF2YmFyLWRlZmF1bHQgLmRyb3Bkb3duIC5kcm9wZG93bi1tZW51IGxpLFxuICAgICAgLm5hdmJhci1kZWZhdWx0IC5kcm9wZG93biAuZHJvcGRvd24tbWVudSB1bCB7XG4gICAgICAgIG1hcmdpbjogMDtcbiAgICAgICAgcGFkZGluZzogMDsgfVxuICAgICAgLm5hdmJhci1kZWZhdWx0IC5kcm9wZG93biAuZHJvcGRvd24tbWVudSBsaSB7XG4gICAgICAgIGxpc3Qtc3R5bGUtdHlwZTogbm9uZTtcbiAgICAgICAgcGFkZGluZzogMDsgfVxuICAgICAgLm5hdmJhci1kZWZhdWx0IC5kcm9wZG93biAuZHJvcGRvd24tbWVudSBhLFxuICAgICAgLm5hdmJhci1kZWZhdWx0IC5kcm9wZG93biAuZHJvcGRvd24tbWVudSBzcGFuLFxuICAgICAgLm5hdmJhci1kZWZhdWx0IC5kcm9wZG93biAuZHJvcGRvd24tbWVudSBzdHJvbmcge1xuICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgICAgcGFkZGluZzogOHB4IDI4cHg7XG4gICAgICAgIG1pbi13aWR0aDogMjMwcHg7XG4gICAgICAgIHRyYW5zaXRpb246IDAuMnMgY29sb3I7IH1cbiAgICAgIC5uYXZiYXItZGVmYXVsdCAuZHJvcGRvd24gLmRyb3Bkb3duLW1lbnUgYS5kcm9wZG93bi1tZW51X190ZXh0LS1sMSB7XG4gICAgICAgIHBhZGRpbmc6IDEycHggMjhweDsgfVxuICAgICAgLm5hdmJhci1kZWZhdWx0IC5kcm9wZG93biAuZHJvcGRvd24tbWVudSBhLmRyb3Bkb3duLW1lbnVfX3RleHQtLWwzIHtcbiAgICAgICAgcGFkZGluZzogNXB4IDI4cHg7IH1cbiAgICAgIC5uYXZiYXItZGVmYXVsdCAuZHJvcGRvd24gLmRyb3Bkb3duLW1lbnUgYSB7XG4gICAgICAgIGNvbG9yOiAjNTI5MEZFOyB9XG4gICAgICAubmF2YmFyLWRlZmF1bHQgLmRyb3Bkb3duIC5kcm9wZG93bi1tZW51IC5iaWcgYSB7XG4gICAgICAgIHBhZGRpbmctbGVmdDogNjVweDtcbiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOyB9XG4gICAgICAgIC5uYXZiYXItZGVmYXVsdCAuZHJvcGRvd24gLmRyb3Bkb3duLW1lbnUgLmJpZyBhIHN2ZyB7XG4gICAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICAgIGxlZnQ6IDMwcHg7XG4gICAgICAgICAgdG9wOiAxNXB4OyB9XG4gICAgICAgIC5uYXZiYXItZGVmYXVsdCAuZHJvcGRvd24gLmRyb3Bkb3duLW1lbnUgLmJpZyBhIHNwYW4ge1xuICAgICAgICAgIHBhZGRpbmctdG9wOiAwO1xuICAgICAgICAgIGNvbG9yOiAjNzM4NDlBICFpbXBvcnRhbnQ7IH1cbiAgICAgICAgLm5hdmJhci1kZWZhdWx0IC5kcm9wZG93biAuZHJvcGRvd24tbWVudSAuYmlnIGEgc3Ryb25nIHtcbiAgICAgICAgICBwYWRkaW5nLXRvcDogMTJweDtcbiAgICAgICAgICBwYWRkaW5nLWJvdHRvbTogMDtcbiAgICAgICAgICBjb2xvcjogIzUyOTBGRTsgfVxuICAgICAgLm5hdmJhci1kZWZhdWx0IC5kcm9wZG93biAuZHJvcGRvd24tbWVudS0td2l0aGJpZ3Mge1xuICAgICAgICBwYWRkaW5nLXRvcDogMDsgfVxuICAgICAgICAubmF2YmFyLWRlZmF1bHQgLmRyb3Bkb3duIC5kcm9wZG93bi1tZW51LS13aXRoYmlncyAuYmlnOmZpcnN0LWNoaWxkIHtcbiAgICAgICAgICBtYXJnaW4tdG9wOiAxMnB4ICFpbXBvcnRhbnQ7IH1cbiAgICAgICAgLm5hdmJhci1kZWZhdWx0IC5kcm9wZG93biAuZHJvcGRvd24tbWVudS0td2l0aGJpZ3MgLmJpZyArIC5kaXZpZGVyIHtcbiAgICAgICAgICBtYXJnaW4tdG9wOiAxOHB4OyB9XG4gICAgICAubmF2YmFyLWRlZmF1bHQgLmRyb3Bkb3duIC5kcm9wZG93bi1tZW51IGE6aG92ZXIge1xuICAgICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcbiAgICAgICAgY29sb3I6ICMzMzc2ZTg7IH1cbiAgICAgICAgLm5hdmJhci1kZWZhdWx0IC5kcm9wZG93biAuZHJvcGRvd24tbWVudSBhOmhvdmVyIHN0cm9uZyxcbiAgICAgICAgLm5hdmJhci1kZWZhdWx0IC5kcm9wZG93biAuZHJvcGRvd24tbWVudSBhOmhvdmVyIHNwYW4ge1xuICAgICAgICAgIGNvbG9yOiAjMzM3NmU4OyB9XG4gICAgICAubmF2YmFyLWRlZmF1bHQgLmRyb3Bkb3duIC5kcm9wZG93bi1tZW51IC5kaXZpZGVyIHtcbiAgICAgICAgcGFkZGluZy10b3A6IDIwcHg7XG4gICAgICAgIGJhY2tncm91bmQ6ICNmOGY5ZmI7XG4gICAgICAgIG1hcmdpbi10b3A6IDE0cHg7XG4gICAgICAgIGJvcmRlci1ib3R0b206IG5vbmU7IH1cbiAgICAgICAgLm5hdmJhci1kZWZhdWx0IC5kcm9wZG93biAuZHJvcGRvd24tbWVudSAuZGl2aWRlciB+IGxpIGEsXG4gICAgICAgIC5uYXZiYXItZGVmYXVsdCAuZHJvcGRvd24gLmRyb3Bkb3duLW1lbnUgLmRpdmlkZXIgfiBsaSBzcGFuIHtcbiAgICAgICAgICBiYWNrZ3JvdW5kOiAjRjZGOEZCOyB9XG4gICAgICAgIC5uYXZiYXItZGVmYXVsdCAuZHJvcGRvd24gLmRyb3Bkb3duLW1lbnUgLmRpdmlkZXIgfiBsaTpsYXN0LWNoaWxkIGEge1xuICAgICAgICAgIG1hcmdpbi1ib3R0b206IC0xNXB4O1xuICAgICAgICAgIHBhZGRpbmctYm90dG9tOiAyMXB4O1xuICAgICAgICAgIGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6IDhweDtcbiAgICAgICAgICBib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czogOHB4OyB9XG4gICAgICAubmF2YmFyLWRlZmF1bHQgLmRyb3Bkb3duIC5kcm9wZG93bi1tZW51IC5zcGxpdCB7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIGZsZXgtZGlyZWN0aW9uOiByb3c7XG4gICAgICAgIGZsZXgtd3JhcDogbm93cmFwO1xuICAgICAgICBtaW4td2lkdGg6IDM2MHB4O1xuICAgICAgICBwYWRkaW5nLWJvdHRvbTogOHB4OyB9XG4gICAgICAgIC5uYXZiYXItZGVmYXVsdCAuZHJvcGRvd24gLmRyb3Bkb3duLW1lbnUgLnNwbGl0IGEsXG4gICAgICAgIC5uYXZiYXItZGVmYXVsdCAuZHJvcGRvd24gLmRyb3Bkb3duLW1lbnUgLnNwbGl0IHNwYW4ge1xuICAgICAgICAgIG1pbi13aWR0aDogMDsgfVxuICAgICAgICAubmF2YmFyLWRlZmF1bHQgLmRyb3Bkb3duIC5kcm9wZG93bi1tZW51IC5zcGxpdCAuc20ge1xuICAgICAgICAgIGNvbG9yOiAjNGE4YmZjO1xuICAgICAgICAgIGZvbnQtc2l6ZTogMTJweDtcbiAgICAgICAgICBmb250LXdlaWdodDogNDAwO1xuICAgICAgICAgIHBhZGRpbmc6IDRweCAyOHB4OyB9XG4gICAgICAgICAgLm5hdmJhci1kZWZhdWx0IC5kcm9wZG93biAuZHJvcGRvd24tbWVudSAuc3BsaXQgLnNtOmhvdmVyIHtcbiAgICAgICAgICAgIGNvbG9yOiAjN2NhYmZkOyB9XG4gICAgICAubmF2YmFyLWRlZmF1bHQgLmRyb3Bkb3duIC5kcm9wZG93bi1tZW51OjphZnRlciB7XG4gICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgdG9wOiAtMTBweDtcbiAgICAgICAgY29udGVudDogJyc7XG4gICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgICBoZWlnaHQ6IDE5cHg7IH1cbiAgICAgIC5uYXZiYXItZGVmYXVsdCAuZHJvcGRvd24gLmRyb3Bkb3duLW1lbnU6OmJlZm9yZSB7XG4gICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgd2lkdGg6IDE0cHg7XG4gICAgICAgIGhlaWdodDogMTRweDtcbiAgICAgICAgdG9wOiAtNXB4O1xuICAgICAgICByaWdodDogY2FsYyg1MCUgLSA3cHgpO1xuICAgICAgICBiYWNrZ3JvdW5kOiB3aGl0ZTtcbiAgICAgICAgdHJhbnNmb3JtOiByb3RhdGUoNDVkZWcpO1xuICAgICAgICBib3JkZXItcmFkaXVzOiA0cHg7XG4gICAgICAgIGNvbnRlbnQ6ICcnO1xuICAgICAgICBkaXNwbGF5OiBibG9jazsgfVxuICAgIC5uYXZiYXItZGVmYXVsdCAuZHJvcGRvd24ub3BlbiAuZHJvcGRvd24tbWVudSxcbiAgICAubmF2YmFyLWRlZmF1bHQgLmRyb3Bkb3duOmhvdmVyIC5kcm9wZG93bi1tZW51IHtcbiAgICAgIG9wYWNpdHk6IDE7XG4gICAgICB0b3A6IDM5cHg7XG4gICAgICB6LWluZGV4OiA0O1xuICAgICAgcG9pbnRlci1ldmVudHM6IGFsbDtcbiAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlM2QoLTUwJSwgMCwgMCkgc2NhbGUoMSwgMSkgcGVyc3BlY3RpdmUoMXB4KTtcbiAgICAgIHRyYW5zaXRpb246IHRyYW5zZm9ybSAwLjI1cyBjdWJpYy1iZXppZXIoMC4xNywgMC42NywgMC41MiwgMSksIG9wYWNpdHkgMC4xcyBsaW5lYXIsIHRvcCAwLjI1cyBzdGVwLXN0YXJ0O1xuICAgICAgdHJhbnNpdGlvbi1kZWxheTogMC4yczsgfVxuICAgIC5uYXZiYXItZGVmYXVsdCAuZHJvcGRvd24gLmNhcmV0IHtcbiAgICAgIGJvcmRlci10b3A6IDNweCBkYXNoZWQ7XG4gICAgICBib3JkZXItcmlnaHQ6IDNweCBzb2xpZCB0cmFuc3BhcmVudDtcbiAgICAgIGJvcmRlci1sZWZ0OiAzcHggc29saWQgdHJhbnNwYXJlbnQ7IH0gfVxuICAubmF2YmFyLWRlZmF1bHQgLnZlcnNpb24ge1xuICAgIGZsb2F0OiBsZWZ0O1xuICAgIGxpc3Qtc3R5bGU6IG5vbmU7XG4gICAgcGFkZGluZy1sZWZ0OiAwOyB9XG4gICAgLm5hdmJhci1kZWZhdWx0IC52ZXJzaW9uID4gbGkgPiBhIHtcbiAgICAgIHBhZGRpbmc6IDEycHggNXB4IDA7XG4gICAgICBmb250LXNpemU6IDE4cHg7XG4gICAgICBmb250LXdlaWdodDogNjAwO1xuICAgICAgY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC41KTtcbiAgICAgIGRpc3BsYXk6IGJsb2NrOyB9XG4gICAgICBAbWVkaWEgKG1heC13aWR0aDogNzY3cHgpIHtcbiAgICAgICAgLm5hdmJhci1kZWZhdWx0IC52ZXJzaW9uID4gbGkgPiBhIHtcbiAgICAgICAgICBwYWRkaW5nOiAxM3B4IDEwcHggMDsgfSB9XG4gICAgICAubmF2YmFyLWRlZmF1bHQgLnZlcnNpb24gPiBsaSA+IGE6YWN0aXZlLCAubmF2YmFyLWRlZmF1bHQgLnZlcnNpb24gPiBsaSA+IGE6Zm9jdXMsIC5uYXZiYXItZGVmYXVsdCAudmVyc2lvbiA+IGxpID4gYTpob3ZlciB7XG4gICAgICAgIGNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNyk7XG4gICAgICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTsgfVxuICAgIC5uYXZiYXItZGVmYXVsdCAudmVyc2lvbiAuZHJvcGRvd24tbWVudSB7XG4gICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgIGJvcmRlcjogMDtcbiAgICAgIGJvcmRlci1yYWRpdXM6IDNweDtcbiAgICAgIHBhZGRpbmc6IDEycHggMCAxMHB4O1xuICAgICAgdG9wOiA1MnB4O1xuICAgICAgbGVmdDogNzBweDtcbiAgICAgIHJpZ2h0OiAtMTAwcHg7XG4gICAgICBtaW4td2lkdGg6IDIwNXB4O1xuICAgICAgYm94LXNoYWRvdzogMCAycHggNXB4IHJnYmEoMCwgMCwgMCwgMC4xNSksIDAgMCAxcHggcmdiYSgwLCAwLCAwLCAwLjIpO1xuICAgICAgb3BhY2l0eTogMDtcbiAgICAgIHRyYW5zZm9ybTogc2NhbGUoMC4wMSk7XG4gICAgICB0cmFuc2Zvcm0tb3JpZ2luOiAyMCUgOHB4O1xuICAgICAgdHJhbnNpdGlvbjogYWxsIDAuM3MgY3ViaWMtYmV6aWVyKDAuMTU1LCAxLjEwNSwgMC4yOTUsIDEuMTIpLCBvcGFjaXR5IDAuMXMgbGluZWFyOyB9XG4gICAgICAubmF2YmFyLWRlZmF1bHQgLnZlcnNpb24gLmRyb3Bkb3duLW1lbnUgYSB7XG4gICAgICAgIHBhZGRpbmc6IDZweCAyM3B4O1xuICAgICAgICBsaW5lLWhlaWdodDogMS42O1xuICAgICAgICBmb250LXNpemU6IDEzcHg7XG4gICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7IH1cbiAgICAgICAgLm5hdmJhci1kZWZhdWx0IC52ZXJzaW9uIC5kcm9wZG93bi1tZW51IGEgaTo6YmVmb3JlIHtcbiAgICAgICAgICBmb250LXNpemU6IDMwcHg7XG4gICAgICAgICAgbGluZS1oZWlnaHQ6IDEwcHg7XG4gICAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICAgICAgIHRvcDogN3B4O1xuICAgICAgICAgIG1hcmdpbi1sZWZ0OiA1cHg7IH1cbiAgICAgICAgLm5hdmJhci1kZWZhdWx0IC52ZXJzaW9uIC5kcm9wZG93bi1tZW51IGEuYWN0aXZlLCAubmF2YmFyLWRlZmF1bHQgLnZlcnNpb24gLmRyb3Bkb3duLW1lbnUgYS5hY3RpdmU6aG92ZXIge1xuICAgICAgICAgIGNvbG9yOiAjNGE4YmZjO1xuICAgICAgICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbiAgICAgICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcbiAgICAgICAgICBjdXJzb3I6IGRlZmF1bHQ7IH1cbiAgICAgIC5uYXZiYXItZGVmYXVsdCAudmVyc2lvbiAuZHJvcGRvd24tbWVudTo6YmVmb3JlIHtcbiAgICAgICAgYmFja2dyb3VuZDogdXJsKFwiL2ltZy9pY28tbmF2LWFycm93LnBuZ1wiKSBjZW50ZXIgY2VudGVyIG5vLXJlcGVhdDtcbiAgICAgICAgYmFja2dyb3VuZC1zaXplOiAxNXB4O1xuICAgICAgICB3aWR0aDogMTVweDtcbiAgICAgICAgaGVpZ2h0OiA4cHg7XG4gICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgdG9wOiAtN3B4O1xuICAgICAgICBsZWZ0OiAzNXB4O1xuICAgICAgICBjb250ZW50OiAnJztcbiAgICAgICAgei1pbmRleDogNTsgfVxuICAgIC5uYXZiYXItZGVmYXVsdCAudmVyc2lvbi5vcGVuIC5kcm9wZG93bi1tZW51IHtcbiAgICAgIG9wYWNpdHk6IDE7XG4gICAgICB0cmFuc2Zvcm06IHNjYWxlKDEpOyB9XG4gIC5uYXZiYXItZGVmYXVsdCAuaGVhZGVyLWZvcm0ge1xuICAgIG1hcmdpbjogNnB4IDAgMCAxMTBweDsgfVxuICAgIEBtZWRpYSAobWF4LXdpZHRoOiAxMzMwcHgpIHtcbiAgICAgIC5uYXZiYXItZGVmYXVsdCAuaGVhZGVyLWZvcm0ge1xuICAgICAgICBtYXJnaW4tbGVmdDogMDsgfSB9XG4gICAgLm5hdmJhci1kZWZhdWx0IC5oZWFkZXItZm9ybSAuZm9ybS1ncm91cCB7XG4gICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICBwYWRkaW5nLWxlZnQ6IDA7XG4gICAgICBtYXJnaW4tYm90dG9tOiAwOyB9XG4gICAgICAubmF2YmFyLWRlZmF1bHQgLmhlYWRlci1mb3JtIC5mb3JtLWdyb3VwIGlucHV0IHtcbiAgICAgICAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEpO1xuICAgICAgICBib3gtc2hhZG93OiBub25lO1xuICAgICAgICBib3JkZXI6IDA7XG4gICAgICAgIGNvbG9yOiB3aGl0ZTtcbiAgICAgICAgZm9udC1zaXplOiAxNHB4O1xuICAgICAgICBib3JkZXItcmFkaXVzOiA4MDBweDtcbiAgICAgICAgcGFkZGluZy1sZWZ0OiAzOHB4O1xuICAgICAgICB3aWR0aDogMTUwcHg7XG4gICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjNzIGN1YmljLWJlemllcigwLjIsIDAuODUsIDAuMiwgMS4xKTsgfVxuICAgICAgICAubmF2YmFyLWRlZmF1bHQgLmhlYWRlci1mb3JtIC5mb3JtLWdyb3VwIGlucHV0OmZvY3VzIHtcbiAgICAgICAgICB3aWR0aDogMjcwcHg7XG4gICAgICAgICAgY29sb3I6IHdoaXRlO1xuICAgICAgICAgIGJhY2tncm91bmQ6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xNSk7IH1cbiAgICAgICAgLm5hdmJhci1kZWZhdWx0IC5oZWFkZXItZm9ybSAuZm9ybS1ncm91cCBpbnB1dDo6cGxhY2Vob2xkZXIge1xuICAgICAgICAgIGNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNCk7IH1cbiAgICAgIC5uYXZiYXItZGVmYXVsdCAuaGVhZGVyLWZvcm0gLmZvcm0tZ3JvdXA6OmJlZm9yZSB7XG4gICAgICAgIGZvbnQtZmFtaWx5OiAnSW9uaWNvbnMnO1xuICAgICAgICAtd2Via2l0LWZvbnQtc21vb3RoaW5nOiBhbnRpYWxpYXNlZDtcbiAgICAgICAgY29udGVudDogJ1xcZjRhNSc7XG4gICAgICAgIGZvbnQtc2l6ZTogMThweDtcbiAgICAgICAgZm9udC13ZWlnaHQ6IDgwMDtcbiAgICAgICAgY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC40KTtcbiAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICB0b3A6IDRweDtcbiAgICAgICAgbGVmdDogMTRweDtcbiAgICAgICAgY3Vyc29yOiBwb2ludGVyOyB9XG4gICAgICAgIEBtZWRpYSAobWF4LXdpZHRoOiA3NjdweCkge1xuICAgICAgICAgIC5uYXZiYXItZGVmYXVsdCAuaGVhZGVyLWZvcm0gLmZvcm0tZ3JvdXA6OmJlZm9yZSB7XG4gICAgICAgICAgICBjb2xvcjogd2hpdGU7IH0gfVxuICAgIEBtZWRpYSAobWF4LXdpZHRoOiAxMjE5cHgpIHtcbiAgICAgIC5uYXZiYXItZGVmYXVsdCAuaGVhZGVyLWZvcm0ge1xuICAgICAgICBtYXJnaW4tbGVmdDogNDBweDsgfVxuICAgICAgICAubmF2YmFyLWRlZmF1bHQgLmhlYWRlci1mb3JtIC5mb3JtLWdyb3VwIGlucHV0OmZvY3VzIHtcbiAgICAgICAgICB3aWR0aDogMTkycHg7IH0gfVxuICAgIEBtZWRpYSAobWF4LXdpZHRoOiA3NjdweCkge1xuICAgICAgLm5hdmJhci1kZWZhdWx0IC5oZWFkZXItZm9ybSB7XG4gICAgICAgIGZsb2F0OiByaWdodDtcbiAgICAgICAgbWFyZ2luLWxlZnQ6IDEwcHg7IH1cbiAgICAgICAgLm5hdmJhci1kZWZhdWx0IC5oZWFkZXItZm9ybSAuZm9ybS1ncm91cCBpbnB1dCB7XG4gICAgICAgICAgd2lkdGg6IDQwcHg7XG4gICAgICAgICAgcGFkZGluZzogMHB4O1xuICAgICAgICAgIG9wYWNpdHk6IDA7IH1cbiAgICAgICAgLm5hdmJhci1kZWZhdWx0IC5oZWFkZXItZm9ybSAuZm9ybS1ncm91cCBpbnB1dDpmb2N1cyB7XG4gICAgICAgICAgd2lkdGg6IGNhbGMoMTAwdncgLSAyMHB4KTtcbiAgICAgICAgICBwYWRkaW5nOiA2cHggMTJweDtcbiAgICAgICAgICBwYWRkaW5nLWxlZnQ6IDM4cHg7XG4gICAgICAgICAgb3BhY2l0eTogMTtcbiAgICAgICAgICBtYXJnaW4tYm90dG9tOiAxMHB4O1xuICAgICAgICAgIG1hcmdpbi1yaWdodDogMTBweDsgfSB9XG4gIC5uYXZiYXItZGVmYXVsdCAubmF2YmFyLXRvZ2dsZSxcbiAgLm5hdmJhci1kZWZhdWx0IC5zaWRlYmFyLXRvZ2dsZSB7XG4gICAgYm9yZGVyOiAwO1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsgfVxuICAgIC5uYXZiYXItZGVmYXVsdCAubmF2YmFyLXRvZ2dsZSBpLFxuICAgIC5uYXZiYXItZGVmYXVsdCAuc2lkZWJhci10b2dnbGUgaSB7XG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICBmb250LXNpemU6IDI3cHg7XG4gICAgICB0b3A6IC0zcHg7XG4gICAgICBjb2xvcjogI2ZmZjtcbiAgICAgIHRyYW5zaXRpb246IGNvbG9yIDAuM3MsIHRyYW5zZm9ybSAwLjNzLCBvcGFjaXR5IDAuM3M7IH1cbiAgICAubmF2YmFyLWRlZmF1bHQgLm5hdmJhci10b2dnbGU6YWN0aXZlLCAubmF2YmFyLWRlZmF1bHQgLm5hdmJhci10b2dnbGU6Zm9jdXMsIC5uYXZiYXItZGVmYXVsdCAubmF2YmFyLXRvZ2dsZTpob3ZlcixcbiAgICAubmF2YmFyLWRlZmF1bHQgLnNpZGViYXItdG9nZ2xlOmFjdGl2ZSxcbiAgICAubmF2YmFyLWRlZmF1bHQgLnNpZGViYXItdG9nZ2xlOmZvY3VzLFxuICAgIC5uYXZiYXItZGVmYXVsdCAuc2lkZWJhci10b2dnbGU6aG92ZXIge1xuICAgICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XG4gICAgICBvdXRsaW5lOiBub25lOyB9XG4gICAgICAubmF2YmFyLWRlZmF1bHQgLm5hdmJhci10b2dnbGU6YWN0aXZlIGksIC5uYXZiYXItZGVmYXVsdCAubmF2YmFyLXRvZ2dsZTpmb2N1cyBpLCAubmF2YmFyLWRlZmF1bHQgLm5hdmJhci10b2dnbGU6aG92ZXIgaSxcbiAgICAgIC5uYXZiYXItZGVmYXVsdCAuc2lkZWJhci10b2dnbGU6YWN0aXZlIGksXG4gICAgICAubmF2YmFyLWRlZmF1bHQgLnNpZGViYXItdG9nZ2xlOmZvY3VzIGksXG4gICAgICAubmF2YmFyLWRlZmF1bHQgLnNpZGViYXItdG9nZ2xlOmhvdmVyIGkge1xuICAgICAgICBjb2xvcjogI2ZmZjsgfVxuICAgIC5uYXZiYXItZGVmYXVsdCAubmF2YmFyLXRvZ2dsZSAuaW9uLW1kLWNsb3NlLFxuICAgIC5uYXZiYXItZGVmYXVsdCAuc2lkZWJhci10b2dnbGUgLmlvbi1tZC1jbG9zZSB7XG4gICAgICBvcGFjaXR5OiAwOyB9XG4gICAgLm5hdmJhci1kZWZhdWx0IC5uYXZiYXItdG9nZ2xlLmFjdGl2ZSBpLFxuICAgIC5uYXZiYXItZGVmYXVsdCAuc2lkZWJhci10b2dnbGUuYWN0aXZlIGkge1xuICAgICAgdHJhbnNmb3JtOiByb3RhdGUoOTBkZWcpOyB9XG4gICAgLm5hdmJhci1kZWZhdWx0IC5uYXZiYXItdG9nZ2xlLmFjdGl2ZSBpOm5vdCguaW9uLW1kLWNsb3NlKSxcbiAgICAubmF2YmFyLWRlZmF1bHQgLnNpZGViYXItdG9nZ2xlLmFjdGl2ZSBpOm5vdCguaW9uLW1kLWNsb3NlKSB7XG4gICAgICBvcGFjaXR5OiAwOyB9XG4gICAgLm5hdmJhci1kZWZhdWx0IC5uYXZiYXItdG9nZ2xlLmFjdGl2ZSAuaW9uLW1kLWNsb3NlLFxuICAgIC5uYXZiYXItZGVmYXVsdCAuc2lkZWJhci10b2dnbGUuYWN0aXZlIC5pb24tbWQtY2xvc2Uge1xuICAgICAgdHJhbnNmb3JtOiByb3RhdGUoOTBkZWcpO1xuICAgICAgb3BhY2l0eTogMTsgfVxuICAubmF2YmFyLWRlZmF1bHQudHJhbnNwYXJlbnQgLm5hdmJhci10b2dnbGUgaSxcbiAgLm5hdmJhci1kZWZhdWx0LnRyYW5zcGFyZW50IC5zaWRlYmFyLXRvZ2dsZSBpIHtcbiAgICBjb2xvcjogIzRhOGJmYzsgfVxuICAubmF2YmFyLWRlZmF1bHQudHJhbnNwYXJlbnQgLm5hdmJhci10b2dnbGU6YWN0aXZlIGksIC5uYXZiYXItZGVmYXVsdC50cmFuc3BhcmVudCAubmF2YmFyLXRvZ2dsZTpmb2N1cyBpLCAubmF2YmFyLWRlZmF1bHQudHJhbnNwYXJlbnQgLm5hdmJhci10b2dnbGU6aG92ZXIgaSxcbiAgLm5hdmJhci1kZWZhdWx0LnRyYW5zcGFyZW50IC5zaWRlYmFyLXRvZ2dsZTphY3RpdmUgaSxcbiAgLm5hdmJhci1kZWZhdWx0LnRyYW5zcGFyZW50IC5zaWRlYmFyLXRvZ2dsZTpmb2N1cyBpLFxuICAubmF2YmFyLWRlZmF1bHQudHJhbnNwYXJlbnQgLnNpZGViYXItdG9nZ2xlOmhvdmVyIGkge1xuICAgIGNvbG9yOiAjNGE4YmZjOyB9XG4gIC5uYXZiYXItZGVmYXVsdCAuc2lkZWJhci10b2dnbGUge1xuICAgIGZsb2F0OiBsZWZ0O1xuICAgIG1hcmdpbjogOHB4IDEwcHggMDtcbiAgICBkaXNwbGF5OiBub25lOyB9XG4gICAgQG1lZGlhIChtYXgtd2lkdGg6IDc2N3B4KSB7XG4gICAgICAubmF2YmFyLWRlZmF1bHQgLnNpZGViYXItdG9nZ2xlIHtcbiAgICAgICAgZGlzcGxheTogYmxvY2s7IH0gfVxuICAubmF2YmFyLWRlZmF1bHQgLmNvbnRhaW5lci1mbHVpZCB7XG4gICAgbWluLWhlaWdodDogNjJweDtcbiAgICBwYWRkaW5nLXRvcDogMTNweDtcbiAgICBtYXJnaW4tdG9wOiAtMjdweDsgfVxuICAgIC5uYXZiYXItZGVmYXVsdCAuY29udGFpbmVyLWZsdWlkIC5uYXZiYXItbmF2IHtcbiAgICAgIHBhZGRpbmctdG9wOiA1cHg7IH1cbiAgICAgIEBtZWRpYSAobWF4LXdpZHRoOiAxMjE5cHgpIHtcbiAgICAgICAgLm5hdmJhci1kZWZhdWx0IC5jb250YWluZXItZmx1aWQgLm5hdmJhci1uYXYge1xuICAgICAgICAgIHBhZGRpbmctbGVmdDogNXB4OyB9IH1cbiAgICAgIC5uYXZiYXItZGVmYXVsdCAuY29udGFpbmVyLWZsdWlkIC5uYXZiYXItbmF2ID4gbGkgPiBhIHtcbiAgICAgICAgcGFkZGluZy1sZWZ0OiAyM3B4O1xuICAgICAgICBwYWRkaW5nLXJpZ2h0OiAyM3B4OyB9XG4gICAgLm5hdmJhci1kZWZhdWx0IC5jb250YWluZXItZmx1aWQgLmhlYWRlci1idG4td2hpdGUge1xuICAgICAgbWFyZ2luLXRvcDogMDsgfVxuICAgIEBtZWRpYSAobWF4LXdpZHRoOiA3NjdweCkge1xuICAgICAgLm5hdmJhci1kZWZhdWx0IC5jb250YWluZXItZmx1aWQge1xuICAgICAgICBwYWRkaW5nLXRvcDogMjhweDsgfSB9XG4gICAgQG1lZGlhIChtYXgtd2lkdGg6IDE1MTRweCkge1xuICAgICAgLm5hdmJhci1kZWZhdWx0IC5jb250YWluZXItZmx1aWQgLm5hdmJhci1uYXYgPiBsaSA+IGEge1xuICAgICAgICBwYWRkaW5nLWxlZnQ6IDE0cHg7XG4gICAgICAgIHBhZGRpbmctcmlnaHQ6IDE0cHg7IH0gfVxuICAgIEBtZWRpYSAobWF4LXdpZHRoOiAxMTA2cHgpIGFuZCAobWluLXdpZHRoOiA3NjhweCkge1xuICAgICAgLm5hdmJhci1kZWZhdWx0IC5jb250YWluZXItZmx1aWQgLmhpZGUtc20sXG4gICAgICAubmF2YmFyLWRlZmF1bHQgLmNvbnRhaW5lci1mbHVpZCAuc20taGlkZSB7XG4gICAgICAgIGRpc3BsYXk6IG5vbmU7IH0gfVxuICAgIEBtZWRpYSAobWF4LXdpZHRoOiAxMjE5cHgpIHtcbiAgICAgIC5uYXZiYXItZGVmYXVsdCAuY29udGFpbmVyLWZsdWlkIC5oaWRlLWx0LWxnIHtcbiAgICAgICAgZGlzcGxheTogbm9uZTsgfSB9XG4gICAgQG1lZGlhIChtaW4td2lkdGg6IDEyMjBweCkge1xuICAgICAgLm5hdmJhci1kZWZhdWx0IC5jb250YWluZXItZmx1aWQgLmhpZGUtZ3QtbWQge1xuICAgICAgICBkaXNwbGF5OiBub25lOyB9IH1cbiAgICBAbWVkaWEgKG1heC13aWR0aDogODkycHgpIGFuZCAobWluLXdpZHRoOiA3NjhweCkge1xuICAgICAgLm5hdmJhci1kZWZhdWx0IC5jb250YWluZXItZmx1aWQgLmhlYWRlci1idG4sXG4gICAgICAubmF2YmFyLWRlZmF1bHQgLmNvbnRhaW5lci1mbHVpZCAuaGVhZGVyLWJ0bi13aGl0ZSB7XG4gICAgICAgIGRpc3BsYXk6IG5vbmU7IH0gfVxuICAgIC5uYXZiYXItZGVmYXVsdCAuY29udGFpbmVyLWZsdWlkICNpb25pYy1kb2NzLWJhY2ssXG4gICAgLm5hdmJhci1kZWZhdWx0IC5jb250YWluZXItZmx1aWQgI2lvbmljLWRvY3MtbG9nbyB7XG4gICAgICB3aWR0aDogMzJweDtcbiAgICAgIHRyYW5zaXRpb246IDAuM3MgdHJhbnNmb3JtLCAwLjNzIG9wYWNpdHk7IH1cbiAgICAgIEBtZWRpYSAobWF4LXdpZHRoOiA3NjdweCkge1xuICAgICAgICAubmF2YmFyLWRlZmF1bHQgLmNvbnRhaW5lci1mbHVpZCAjaW9uaWMtZG9jcy1iYWNrLFxuICAgICAgICAubmF2YmFyLWRlZmF1bHQgLmNvbnRhaW5lci1mbHVpZCAjaW9uaWMtZG9jcy1sb2dvIHtcbiAgICAgICAgICBtYXJnaW4tbGVmdDogMTJweDtcbiAgICAgICAgICBtYXJnaW4tcmlnaHQ6IC0xM3B4OyB9IH1cbiAgICAubmF2YmFyLWRlZmF1bHQgLmNvbnRhaW5lci1mbHVpZCAjaW9uaWMtZG9jcy1iYWNrIHtcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgIHRvcDogNnB4O1xuICAgICAgbGVmdDogMTNweDtcbiAgICAgIG9wYWNpdHk6IDA7XG4gICAgICB0cmFuc2Zvcm06IHNjYWxlM2QoMS4xLCAxLjEsIDEpOyB9XG4gICAgLm5hdmJhci1kZWZhdWx0IC5jb250YWluZXItZmx1aWQgI2lvbmljLWRvY3MtdGV4dCB7XG4gICAgICB3aWR0aDogNTZweDtcbiAgICAgIG1hcmdpbi1sZWZ0OiA1cHg7IH1cbiAgICAubmF2YmFyLWRlZmF1bHQgLmNvbnRhaW5lci1mbHVpZCAjaW9uaWMtcHJvLWRvY3MtdGV4dCB7XG4gICAgICB3aWR0aDogMzZweDtcbiAgICAgIG1hcmdpbi1sZWZ0OiA4cHg7IH1cbiAgICAubmF2YmFyLWRlZmF1bHQgLmNvbnRhaW5lci1mbHVpZCAubmF2YmFyLWJyYW5kIHtcbiAgICAgIHBhZGRpbmctdG9wOiA4cHg7IH1cbiAgICAgIC5uYXZiYXItZGVmYXVsdCAuY29udGFpbmVyLWZsdWlkIC5uYXZiYXItYnJhbmQgaW1nIHtcbiAgICAgICAgd2lkdGg6IDg4cHg7IH1cbiAgICAgIC5uYXZiYXItZGVmYXVsdCAuY29udGFpbmVyLWZsdWlkIC5uYXZiYXItYnJhbmQubG9nbyB7XG4gICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgICAgcGFkZGluZy10b3A6IDZweDsgfVxuICAgICAgICAubmF2YmFyLWRlZmF1bHQgLmNvbnRhaW5lci1mbHVpZCAubmF2YmFyLWJyYW5kLmxvZ286aG92ZXIge1xuICAgICAgICAgIG9wYWNpdHk6IDE7IH1cbiAgICAgICAgICAubmF2YmFyLWRlZmF1bHQgLmNvbnRhaW5lci1mbHVpZCAubmF2YmFyLWJyYW5kLmxvZ286aG92ZXIgI2lvbmljLWRvY3MtbG9nbyB7XG4gICAgICAgICAgICBvcGFjaXR5OiAwO1xuICAgICAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUzZCgtM3B4LCAwLCAwKSBzY2FsZTNkKDEuMSwgMS4xLCAxKTsgfVxuICAgICAgICAgIC5uYXZiYXItZGVmYXVsdCAuY29udGFpbmVyLWZsdWlkIC5uYXZiYXItYnJhbmQubG9nbzpob3ZlciAjaW9uaWMtZG9jcy1iYWNrIHtcbiAgICAgICAgICAgIG9wYWNpdHk6IDE7XG4gICAgICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZTNkKC0zcHgsIDAsIDApIHNjYWxlM2QoMSwgMSwgMSk7IH1cbiAgICAgICAgLm5hdmJhci1kZWZhdWx0IC5jb250YWluZXItZmx1aWQgLm5hdmJhci1icmFuZC5sb2dvOmFjdGl2ZSwgLm5hdmJhci1kZWZhdWx0IC5jb250YWluZXItZmx1aWQgLm5hdmJhci1icmFuZC5sb2dvOmZvY3VzLCAubmF2YmFyLWRlZmF1bHQgLmNvbnRhaW5lci1mbHVpZCAubmF2YmFyLWJyYW5kLmxvZ286aG92ZXI6YWN0aXZlIHtcbiAgICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZTNkKC0zcHgsIDAsIDApIHNjYWxlM2QoMC45LCAwLjksIDEpO1xuICAgICAgICAgIHRyYW5zZm9ybS1vcmlnaW46IDEyMCUgODAlOyB9XG4gIC5uYXZiYXItZGVmYXVsdCArIC5jdGEgLmJhciB7XG4gICAgYmFja2dyb3VuZDogcmdiYSgwLCAwLCAwLCAwLjkpO1xuICAgIG1pbi1oZWlnaHQ6IDY0cHg7IH1cbiAgICAubmF2YmFyLWRlZmF1bHQgKyAuY3RhIC5iYXIgLmNvbnRhaW5lciA+IGRpdixcbiAgICAubmF2YmFyLWRlZmF1bHQgKyAuY3RhIC5iYXIgcCB7XG4gICAgICBjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjcpO1xuICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgICAgbWFyZ2luLXRvcDogMTVweDtcbiAgICAgIG1hcmdpbi1ib3R0b206IDE1cHg7XG4gICAgICBmb250LXdlaWdodDogNDAwO1xuICAgICAgZm9udC1zaXplOiAxNnB4OyB9XG4gICAgLm5hdmJhci1kZWZhdWx0ICsgLmN0YSAuYmFyLmFmZml4LXRvcCB7XG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICB6LWluZGV4OiAxOyB9XG4gICAgLm5hdmJhci1kZWZhdWx0ICsgLmN0YSAuYmFyLmFmZml4IHtcbiAgICAgIHRvcDogMDtcbiAgICAgIHBvc2l0aW9uOiBmaXhlZDtcbiAgICAgIHotaW5kZXg6IDEwMDsgfVxuICAgIC5uYXZiYXItZGVmYXVsdCArIC5jdGEgLmJhci50YWJiZWQge1xuICAgICAgYmFja2dyb3VuZDogI2ZiZmNmZDtcbiAgICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjZjlmYWZiO1xuICAgICAgd2lkdGg6IDEwMCU7IH1cbiAgICAgIC5uYXZiYXItZGVmYXVsdCArIC5jdGEgLmJhci50YWJiZWQuYWZmaXgge1xuICAgICAgICBib3JkZXItYm90dG9tLWNvbG9yOiB0cmFuc3BhcmVudDtcbiAgICAgICAgYm94LXNoYWRvdzogMCAxcHggNHB4IHJnYmEoMCwgMCwgMCwgMC4wNSksIDAgMXB4IDAgcmdiYSgwLCAwLCAwLCAwLjA1KTsgfVxuICAgICAgICAubmF2YmFyLWRlZmF1bHQgKyAuY3RhIC5iYXIudGFiYmVkLmFmZml4IHVsIGxpIGEge1xuICAgICAgICAgIG1hcmdpbi1ib3R0b206IC0ycHg7IH1cbiAgICAgIC5uYXZiYXItZGVmYXVsdCArIC5jdGEgLmJhci50YWJiZWQgdWwge1xuICAgICAgICBwYWRkaW5nOiBub25lO1xuICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7IH1cbiAgICAgICAgLm5hdmJhci1kZWZhdWx0ICsgLmN0YSAuYmFyLnRhYmJlZCB1bCBsaSB7XG4gICAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOyB9XG4gICAgICAgICAgLm5hdmJhci1kZWZhdWx0ICsgLmN0YSAuYmFyLnRhYmJlZCB1bCBsaSBhIHtcbiAgICAgICAgICAgIHBhZGRpbmc6IDI1cHggMThweDtcbiAgICAgICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICAgICAgICAgIGxpbmUtaGVpZ2h0OiAxZW07XG4gICAgICAgICAgICBmb250LXNpemU6IDEzcHg7XG4gICAgICAgICAgICBmb250LXdlaWdodDogNTAwO1xuICAgICAgICAgICAgbWFyZ2luOiAwIDE1cHggLTFweDtcbiAgICAgICAgICAgIGNvbG9yOiAjNTc2MDcwO1xuICAgICAgICAgICAgYm9yZGVyLWJvdHRvbTogMnB4IHNvbGlkIHRyYW5zcGFyZW50O1xuICAgICAgICAgICAgdHJhbnNpdGlvbjogY29sb3IgMC4ycywgYm9yZGVyLWNvbG9yIDAuMnM7XG4gICAgICAgICAgICBmb250LWZhbWlseTogXCJFaW5hXCIsIFwiSGVsdmV0aWNhIE5ldWVcIiwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmO1xuICAgICAgICAgICAgZm9udC13ZWlnaHQ6IDYwMDsgfVxuICAgICAgICAgICAgLm5hdmJhci1kZWZhdWx0ICsgLmN0YSAuYmFyLnRhYmJlZCB1bCBsaSBhOmZvY3VzIHtcbiAgICAgICAgICAgICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7IH1cbiAgICAgICAgICAubmF2YmFyLWRlZmF1bHQgKyAuY3RhIC5iYXIudGFiYmVkIHVsIGxpLmFjdGl2ZSBhIHtcbiAgICAgICAgICAgIGJvcmRlci1jb2xvcjogIzRhOGJmYzsgfVxuICAgICAgICAgIC5uYXZiYXItZGVmYXVsdCArIC5jdGEgLmJhci50YWJiZWQgdWwgbGkuYWN0aXZlIGEsXG4gICAgICAgICAgLm5hdmJhci1kZWZhdWx0ICsgLmN0YSAuYmFyLnRhYmJlZCB1bCBsaSBhOmFjdGl2ZSxcbiAgICAgICAgICAubmF2YmFyLWRlZmF1bHQgKyAuY3RhIC5iYXIudGFiYmVkIHVsIGxpIGE6aG92ZXIge1xuICAgICAgICAgICAgY29sb3I6ICM0YThiZmM7XG4gICAgICAgICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsgfVxuICAgICAgICBAbWVkaWEgKG1heC13aWR0aDogNzY3cHgpIHtcbiAgICAgICAgICAubmF2YmFyLWRlZmF1bHQgKyAuY3RhIC5iYXIudGFiYmVkIHVsIHtcbiAgICAgICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47IH1cbiAgICAgICAgICAgIC5uYXZiYXItZGVmYXVsdCArIC5jdGEgLmJhci50YWJiZWQgdWwgbGkgYSB7XG4gICAgICAgICAgICAgIG1hcmdpbi1yaWdodDogMDtcbiAgICAgICAgICAgICAgbWFyZ2luLWxlZnQ6IDA7XG4gICAgICAgICAgICAgIHBhZGRpbmctbGVmdDogNHB4O1xuICAgICAgICAgICAgICBwYWRkaW5nLXJpZ2h0OiA0cHg7IH0gfVxuICBAbWVkaWEgKG1pbi13aWR0aDogNzY4cHgpIHtcbiAgICAubmF2YmFyLWRlZmF1bHQubGlnaHQgI2lvbmljLWlvLWxvZ28ge1xuICAgICAgZmlsbDogIzRmNjM4NDsgfVxuICAgIC5uYXZiYXItZGVmYXVsdC5saWdodCAubmF2YmFyLW5hdiA+IGxpOm5vdCguaGVhZGVyLWJ0bi13aGl0ZSkgPiBhLFxuICAgIC5uYXZiYXItZGVmYXVsdC5saWdodCAubmF2YmFyLW5hdiBpb25pYy1zZWFyY2ggaW9uLWljb24ge1xuICAgICAgY29sb3I6ICM3ODgyOTQ7IH1cbiAgICAgIC5uYXZiYXItZGVmYXVsdC5saWdodCAubmF2YmFyLW5hdiA+IGxpOm5vdCguaGVhZGVyLWJ0bi13aGl0ZSkgPiBhOmhvdmVyLFxuICAgICAgLm5hdmJhci1kZWZhdWx0LmxpZ2h0IC5uYXZiYXItbmF2IGlvbmljLXNlYXJjaCBpb24taWNvbjpob3ZlciB7XG4gICAgICAgIGNvbG9yOiAjNGE4YmZjOyB9XG4gICAgLm5hdmJhci1kZWZhdWx0LmxpZ2h0IC5uYXZiYXItbmF2ID4gbGkuYWN0aXZlID4gYSB7XG4gICAgICBjb2xvcjogI2M3ZDBlMDsgfVxuICAgIC5uYXZiYXItZGVmYXVsdC5lbnRlcnByaXNlIHtcbiAgICAgIGJhY2tncm91bmQ6IG5vbmU7XG4gICAgICBwYWRkaW5nLXRvcDogMzZweDsgfVxuICAgICAgLm5hdmJhci1kZWZhdWx0LmVudGVycHJpc2UgLm5hdmJhci1uYXYgPiBsaTpub3QoLmhlYWRlci1idG4td2hpdGUpID4gYSxcbiAgICAgIC5uYXZiYXItZGVmYXVsdC5lbnRlcnByaXNlIC5uYXZiYXItbmF2IGlvbmljLXNlYXJjaCBpb24taWNvbiB7XG4gICAgICAgIGNvbG9yOiAjNEU1QjZBOyB9XG4gICAgICAgIC5uYXZiYXItZGVmYXVsdC5lbnRlcnByaXNlIC5uYXZiYXItbmF2ID4gbGk6bm90KC5oZWFkZXItYnRuLXdoaXRlKSA+IGE6aG92ZXIsXG4gICAgICAgIC5uYXZiYXItZGVmYXVsdC5lbnRlcnByaXNlIC5uYXZiYXItbmF2IGlvbmljLXNlYXJjaCBpb24taWNvbjpob3ZlciB7XG4gICAgICAgICAgY29sb3I6ICM5MkExQjM7IH1cbiAgICAgIC5uYXZiYXItZGVmYXVsdC5lbnRlcnByaXNlIC5uYXZiYXItbmF2ID4gbGkuYWN0aXZlID4gYSxcbiAgICAgIC5uYXZiYXItZGVmYXVsdC5lbnRlcnByaXNlIC5uYXZiYXItbmF2ID4gbGkub3BlbiA+IGEge1xuICAgICAgICBjb2xvcjogIzkyQTFCMyAhaW1wb3J0YW50OyB9XG4gICAgICAubmF2YmFyLWRlZmF1bHQuZW50ZXJwcmlzZSAubmF2YmFyLW5hdiA+IGxpOm5vdCguaGVhZGVyLWJ0bi13aGl0ZSkgPiBhIHtcbiAgICAgICAgbWFyZ2luLWxlZnQ6IDA7XG4gICAgICAgIG1hcmdpbi1yaWdodDogMDtcbiAgICAgICAgcGFkZGluZzogMCAxNHB4IDEwcHg7XG4gICAgICAgIGZvbnQtZmFtaWx5OiBcIkludGVyXCIsIFwiSW50ZXIgVUlcIiwgSGVsdmV0aWNhLCBBcmlhbCwgc2Fucy1zZXJpZjtcbiAgICAgICAgZm9udC13ZWlnaHQ6IDQwMDtcbiAgICAgICAgZm9udC1zaXplOiAxNHB4OyB9XG4gICAgICAubmF2YmFyLWRlZmF1bHQuZW50ZXJwcmlzZSAubmF2YmFyLW5hdiA+IGxpLmFjdGl2ZSA+IGEge1xuICAgICAgICBjb2xvcjogIzRFNUI2QTsgfVxuICAgICAgLm5hdmJhci1kZWZhdWx0LmVudGVycHJpc2UgLm5hdmJhci1yaWdodCB7XG4gICAgICAgIG1hcmdpbi10b3A6IDNweDsgfVxuICAgICAgLm5hdmJhci1kZWZhdWx0LmVudGVycHJpc2UgLm5hdmJhci1jZW50ZXIge1xuICAgICAgICBtYXJnaW4tdG9wOiA2cHg7XG4gICAgICAgIGZsb2F0OiByaWdodDsgfVxuICAgICAgLm5hdmJhci1kZWZhdWx0LmVudGVycHJpc2UubmF2YmFyLXN0aWNreSB7XG4gICAgICAgIGJhY2tncm91bmQ6IHdoaXRlOyB9XG4gICAgLm5hdmJhci1kZWZhdWx0ICNoZWFkZXItYnRuLW91dGxpbmUge1xuICAgICAgdHJhbnNpdGlvbjogMC4ycyBib3JkZXI7XG4gICAgICBwYWRkaW5nOiAycHggMTBweCA0cHg7XG4gICAgICBtYXJnaW4tbGVmdDogMTRweDtcbiAgICAgIGNvbG9yOiAjMzg4MEZGO1xuICAgICAgYm9yZGVyLXJhZGl1czogMTZweDtcbiAgICAgIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoNTYsIDEyOCwgMjU1LCAwLjQpO1xuICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgICAgIGJveC1zaGFkb3c6IG5vbmU7XG4gICAgICBmb250LXNpemU6IDEzcHg7XG4gICAgICBmb250LXdlaWdodDogNjAwOyB9XG4gICAgICAubmF2YmFyLWRlZmF1bHQgI2hlYWRlci1idG4tb3V0bGluZTpob3ZlciB7XG4gICAgICAgIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoNTYsIDEyOCwgMjU1LCAwLjgpOyB9IH1cbiAgLm5hdmJhci1kZWZhdWx0IC5uYXZiYXItcmlnaHQgPiBsaSA+IGEge1xuICAgIGZvbnQtd2VpZ2h0OiA3MDA7XG4gICAgbWFyZ2luLXJpZ2h0OiAwcHg7XG4gICAgbWFyZ2luLWxlZnQ6IDhweDsgfVxuICAubmF2YmFyLWRlZmF1bHQubmF2YmFyLXN0aWNreSB7XG4gICAgei1pbmRleDogOTk5O1xuICAgIHBhZGRpbmc6IDIwcHggMHB4O1xuICAgIGJveC1zaGFkb3c6IDBweCAycHggNnB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMDQpLCAwcHggNnB4IDEycHggcmdiYSgwLCAwLCAwLCAwLjAyKTsgfVxuICAubmF2YmFyLWRlZmF1bHQgaW9uaWMtc2VhcmNoOm5vdCguaHlkcmF0ZWQpIHtcbiAgICB2aXNpYmlsaXR5OiBoaWRkZW47XG4gICAgd2lkdGg6IDE4cHg7XG4gICAgaGVpZ2h0OiAzMXB4O1xuICAgIGRpc3BsYXk6IGJsb2NrOyB9XG5cbkBtZWRpYSAobWluLXdpZHRoOiA5OTJweCkge1xuICAuZG9jcyAubmF2YmFyLWRlZmF1bHQgLm5hdmJhci1uYXYubmF2YmFyLWNlbnRlciB7XG4gICAgbWFyZ2luLWxlZnQ6IDA7IH0gfVxuXG5ib2R5LnBhZ2UtaGVhZGVyIHtcbiAgcGFkZGluZy1ib3R0b206IDA7XG4gIG1hcmdpbjogMDtcbiAgYm9yZGVyLWJvdHRvbTogMDsgfVxuXG4ubmF2YmFyLWRhcmsge1xuICBiYWNrZ3JvdW5kOiAjMTExOTJhOyB9XG5cbi5leHRlcm5hbC1pY29uIC5leHRlcm5hbC1pY29uX19iYWNrZ3JvdW5kIHtcbiAgZmlsbDogIzk3QkRGRjsgfVxuXG4uZXh0ZXJuYWwtaWNvbiAuZXh0ZXJuYWwtaWNvbl9fZm9yZWdyb3VuZCB7XG4gIGZpbGw6ICNmZmY7IH1cblxuLmxpZ2h0IC5leHRlcm5hbC1pY29uIC5leHRlcm5hbC1pY29uX19iYWNrZ3JvdW5kLFxuLmV4dGVybmFsLWljb24tLWxpZ2h0IC5leHRlcm5hbC1pY29uX19iYWNrZ3JvdW5kIHtcbiAgZmlsbDogI2U1ZTdlYTsgfVxuXG4ubGlnaHQgLmV4dGVybmFsLWljb24gLmV4dGVybmFsLWljb25fX2ZvcmVncm91bmQsXG4uZXh0ZXJuYWwtaWNvbi0tbGlnaHQgLmV4dGVybmFsLWljb25fX2ZvcmVncm91bmQge1xuICBmaWxsOiAjN2E4NDk2OyB9XG5cbi5oYnNwdC1mb3JtIHtcbiAgbWF4LXdpZHRoOiA0MjBweDtcbiAgbWFyZ2luOiAwIGF1dG87XG4gIGZvbnQtd2VpZ2h0OiA0MDA7IH1cbiAgLmhic3B0LWZvcm0gLmhzLWZvcm0tcmVxdWlyZWQge1xuICAgIGRpc3BsYXk6IG5vbmU7IH1cbiAgLmhic3B0LWZvcm0gZm9ybSBmaWVsZHNldC5mb3JtLWNvbHVtbnMtMiAuaW5wdXQge1xuICAgIG1hcmdpbi1yaWdodDogMTJweDsgfVxuICAuaGJzcHQtZm9ybSBmb3JtLnN0YWNrZWQgLmZpZWxkIHtcbiAgICBtYXJnaW4tYm90dG9tOiA0cHg7IH1cbiAgLmhic3B0LWZvcm0gLmhzLWlucHV0LFxuICAuaGJzcHQtZm9ybSBpbnB1dC5ocy1pbnB1dCxcbiAgLmhic3B0LWZvcm0gc2VsZWN0LmhzLWlucHV0IHtcbiAgICBib3JkZXI6IDFweCBzb2xpZCAjZTFlNWVkO1xuICAgIGZvbnQtd2VpZ2h0OiA1MDA7XG4gICAgYm9yZGVyLXJhZGl1czogNHB4O1xuICAgIHRyYW5zaXRpb246IGJvcmRlci1jb2xvciAuMnM7XG4gICAgYm94LXNoYWRvdzogbm9uZTtcbiAgICBvdXRsaW5lOiBub25lO1xuICAgIGhlaWdodDogMzBweDtcbiAgICBwYWRkaW5nOiA2cHggMTJweDtcbiAgICBmb250LXNpemU6IDE0cHg7XG4gICAgbGluZS1oZWlnaHQ6IDEuNDI4NTcxNDI5OyB9XG4gICAgLmhic3B0LWZvcm0gLmhzLWlucHV0OnBsYWNlaG9sZGVyLFxuICAgIC5oYnNwdC1mb3JtIGlucHV0LmhzLWlucHV0OnBsYWNlaG9sZGVyLFxuICAgIC5oYnNwdC1mb3JtIHNlbGVjdC5ocy1pbnB1dDpwbGFjZWhvbGRlciB7XG4gICAgICBjb2xvcjogI2EwYTViMDsgfVxuICAgIC5oYnNwdC1mb3JtIC5ocy1pbnB1dDpob3ZlciwgLmhic3B0LWZvcm0gLmhzLWlucHV0OmZvY3VzLCAuaGJzcHQtZm9ybSAuaHMtaW5wdXQ6YWN0aXZlLFxuICAgIC5oYnNwdC1mb3JtIGlucHV0LmhzLWlucHV0OmhvdmVyLFxuICAgIC5oYnNwdC1mb3JtIGlucHV0LmhzLWlucHV0OmZvY3VzLFxuICAgIC5oYnNwdC1mb3JtIGlucHV0LmhzLWlucHV0OmFjdGl2ZSxcbiAgICAuaGJzcHQtZm9ybSBzZWxlY3QuaHMtaW5wdXQ6aG92ZXIsXG4gICAgLmhic3B0LWZvcm0gc2VsZWN0LmhzLWlucHV0OmZvY3VzLFxuICAgIC5oYnNwdC1mb3JtIHNlbGVjdC5ocy1pbnB1dDphY3RpdmUge1xuICAgICAgb3V0bGluZTogbm9uZTtcbiAgICAgIGJvcmRlci1jb2xvcjogIzRhOGJmYztcbiAgICAgIGJveC1zaGFkb3c6IG5vbmU7IH1cbiAgICAuaGJzcHQtZm9ybSAuaHMtaW5wdXQuaHMtaW5wdXQuZXJyb3IsXG4gICAgLmhic3B0LWZvcm0gaW5wdXQuaHMtaW5wdXQuaHMtaW5wdXQuZXJyb3IsXG4gICAgLmhic3B0LWZvcm0gc2VsZWN0LmhzLWlucHV0LmhzLWlucHV0LmVycm9yIHtcbiAgICAgIGJvcmRlci1jb2xvcjogI2Y4NTU2YzsgfVxuICAuaGJzcHQtZm9ybSBzZWxlY3QuaHMtaW5wdXQge1xuICAgIGhlaWdodDogNDRweDtcbiAgICB3aWR0aDogY2FsYygxMDAlICsgNnB4KSAhaW1wb3J0YW50OyB9XG4gIC5oYnNwdC1mb3JtIHRleHRhcmVhLmhzLWlucHV0IHtcbiAgICBwYWRkaW5nOiAxMnB4O1xuICAgIHdpZHRoOiBjYWxjKDEwMCUgKyAzcHgpICFpbXBvcnRhbnQ7XG4gICAgbWluLWhlaWdodDogMTkycHg7IH1cbiAgLmhic3B0LWZvcm0gLmhzX3N1Ym1pdCBpbnB1dC5ocy1idXR0b24ge1xuICAgIGZvbnQtc2l6ZTogMTNweDtcbiAgICBwYWRkaW5nOiAxMHB4IDE4cHggMTBweDtcbiAgICBtYXJnaW4tcmlnaHQ6IC0xNHB4O1xuICAgIG1hcmdpbi10b3A6IC0zNnB4O1xuICAgIGxpbmUtaGVpZ2h0OiAyM3B4O1xuICAgIGZsb2F0OiByaWdodDtcbiAgICBmb250LXdlaWdodDogNjAwO1xuICAgIGxldHRlci1zcGFjaW5nOiAwO1xuICAgIHRleHQtdHJhbnNmb3JtOiBub25lO1xuICAgIHRleHQtc2hhZG93OiBub25lO1xuICAgIGJhY2tncm91bmQ6ICM0YThiZmM7XG4gICAgYm9yZGVyOiAwO1xuICAgIG91dGxpbmU6IDA7XG4gICAgdHJhbnNpdGlvbjogYWxsIC4ycyBsaW5lYXI7XG4gICAgYm94LXNoYWRvdzogMCAxcHggM3B4IHJnYmEoMCwgMCwgMCwgMC4xMik7IH1cbiAgICAuaGJzcHQtZm9ybSAuaHNfc3VibWl0IGlucHV0LmhzLWJ1dHRvbjpob3ZlciB7XG4gICAgICBib3JkZXI6IDA7XG4gICAgICBib3gtc2hhZG93OiAwIDRweCA4cHggcmdiYSgwLCAwLCAwLCAwLjEyKTtcbiAgICAgIGJhY2tncm91bmQ6ICM1OTk1ZmM7XG4gICAgICBjb2xvcjogI2ZmZjtcbiAgICAgIG91dGxpbmU6IDA7IH1cbiAgICAuaGJzcHQtZm9ybSAuaHNfc3VibWl0IGlucHV0LmhzLWJ1dHRvbjphY3RpdmUsIC5oYnNwdC1mb3JtIC5oc19zdWJtaXQgaW5wdXQuaHMtYnV0dG9uOmFjdGl2ZTpub3QoLmluYWN0aXZlKTpub3QoLmxpbmspLCAuaGJzcHQtZm9ybSAuaHNfc3VibWl0IGlucHV0LmhzLWJ1dHRvbjpmb2N1czpub3QoLmluYWN0aXZlKSB7XG4gICAgICBib3JkZXI6IDA7XG4gICAgICBjb2xvcjogI2ZmZjtcbiAgICAgIGJveC1zaGFkb3c6IGluc2V0IDAgMXB4IDRweCByZ2JhKDAsIDAsIDAsIDAuMik7XG4gICAgICBiYWNrZ3JvdW5kOiAjNTk5NWZjO1xuICAgICAgb3V0bGluZTogMDsgfVxuICAuaGJzcHQtZm9ybSAuc3VibWl0dGVkLW1lc3NhZ2Uge1xuICAgIGZvbnQtc2l6ZTogMThweDtcbiAgICBwYWRkaW5nOiAzNHB4IDAgNzhweDtcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgZm9udC13ZWlnaHQ6IDQwMDtcbiAgICBjb2xvcjogIzM1YWY1NTtcbiAgICBtYXgtd2lkdGg6IDQxMHB4O1xuICAgIGJhY2tncm91bmQtY29sb3I6IHdoaXRlO1xuICAgIG1hcmdpbjogMCBhdXRvOyB9XG4gICAgLmhic3B0LWZvcm0gLnN1Ym1pdHRlZC1tZXNzYWdlOmJlZm9yZSB7XG4gICAgICBjb250ZW50OiAnJztcbiAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFwiL2ltZy9jaGVja21hcmstbGlnaHQtZ3JlZW4uc3ZnXCIpO1xuICAgICAgYmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdDtcbiAgICAgIGJhY2tncm91bmQtc2l6ZTogMTAwJTtcbiAgICAgIHdpZHRoOiA0MnB4O1xuICAgICAgaGVpZ2h0OiA0MnB4O1xuICAgICAgbWFyZ2luLWJvdHRvbTogMTJweDsgfVxuXG4ubW9kYWwgLmhic3B0LWZvcm0gLmhzX3N1Ym1pdCBpbnB1dC5ocy1idXR0b24ge1xuICBwYWRkaW5nOiAwOyB9XG5cbi5odWJzcG90LW92ZXJyaWRlIC5oYnNwdC1mb3JtIHtcbiAgZm9udC1mYW1pbHk6IGFwcGxlLXN5c3RlbSwgQmxpbmtNYWNTeXN0ZW1Gb250LCBSb2JvdG8sIEhlbHZldGljYSwgQXJpYWwsIHNhbnMtc2VyaWY7IH1cbiAgLmh1YnNwb3Qtb3ZlcnJpZGUgLmhic3B0LWZvcm0sXG4gIC5odWJzcG90LW92ZXJyaWRlIC5oYnNwdC1mb3JtIGZpZWxkc2V0IHtcbiAgICBtYXgtd2lkdGg6IDEwMCU7IH1cbiAgLmh1YnNwb3Qtb3ZlcnJpZGUgLmhic3B0LWZvcm0gLmhzLWZvcm0tZmllbGQge1xuICAgIG1hcmdpbi10b3A6IDE2cHg7IH1cbiAgLmh1YnNwb3Qtb3ZlcnJpZGUgLmhic3B0LWZvcm0gbGFiZWwge1xuICAgIG1hcmdpbi1ib3R0b206IDNweDsgfVxuICAuaHVic3BvdC1vdmVycmlkZSAuaGJzcHQtZm9ybSAuaHMtZm9ybS1yZXF1aXJlZCB7XG4gICAgZGlzcGxheTogaW5saW5lO1xuICAgIGNvbG9yOiAjRjQ1NDU0O1xuICAgIG1hcmdpbi1sZWZ0OiA0cHg7IH1cbiAgLmh1YnNwb3Qtb3ZlcnJpZGUgLmhic3B0LWZvcm0gLmhzLXJpY2h0ZXh0IHtcbiAgICBtYXJnaW4tdG9wOiA4cHg7IH1cbiAgLmh1YnNwb3Qtb3ZlcnJpZGUgLmhic3B0LWZvcm0gLmhzLWlucHV0LFxuICAuaHVic3BvdC1vdmVycmlkZSAuaGJzcHQtZm9ybSBpbnB1dC5ocy1pbnB1dCB7XG4gICAgdHJhbnNpdGlvbjogYm9yZGVyIDAuM3M7XG4gICAgZm9udC13ZWlnaHQ6IDUwMDtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xuICAgIGJhY2tncm91bmQtaW1hZ2U6IG5vbmU7XG4gICAgYm9yZGVyOiAxcHggc29saWQgI2NlZDZlMztcbiAgICBsaW5lLWhlaWdodDogMS4zOTI4NjtcbiAgICBib3JkZXItcmFkaXVzOiA0cHg7XG4gICAgcGFkZGluZzogMTFweCAxNXB4O1xuICAgIGZvbnQtc2l6ZTogMTVweDtcbiAgICBtYXJnaW4tYm90dG9tOiAwO1xuICAgIGNvbG9yOiAjNTA1ODYzOyB9XG4gIC5odWJzcG90LW92ZXJyaWRlIC5oYnNwdC1mb3JtIGlucHV0LmhzLWlucHV0W3R5cGU9XCJudW1iZXJcIl0ge1xuICAgIGZsb2F0OiBub25lOyB9XG4gIC5odWJzcG90LW92ZXJyaWRlIC5oYnNwdC1mb3JtIGlucHV0LmhzLWlucHV0W3R5cGU9XCJ0ZXh0XCJdLFxuICAuaHVic3BvdC1vdmVycmlkZSAuaGJzcHQtZm9ybSBpbnB1dC5ocy1pbnB1dFt0eXBlPVwiZW1haWxcIl0sXG4gIC5odWJzcG90LW92ZXJyaWRlIC5oYnNwdC1mb3JtIGlucHV0LmhzLWlucHV0W3R5cGU9XCJ0ZWxcIl0ge1xuICAgIGhlaWdodDogYXV0bztcbiAgICB3aWR0aDogMTAwJTtcbiAgICBmbG9hdDogbm9uZTsgfVxuICAgIC5odWJzcG90LW92ZXJyaWRlIC5oYnNwdC1mb3JtIGlucHV0LmhzLWlucHV0W3R5cGU9XCJ0ZXh0XCJdOmZvY3VzLFxuICAgIC5odWJzcG90LW92ZXJyaWRlIC5oYnNwdC1mb3JtIGlucHV0LmhzLWlucHV0W3R5cGU9XCJlbWFpbFwiXTpmb2N1cyxcbiAgICAuaHVic3BvdC1vdmVycmlkZSAuaGJzcHQtZm9ybSBpbnB1dC5ocy1pbnB1dFt0eXBlPVwidGVsXCJdOmZvY3VzIHtcbiAgICAgIGJvcmRlci1jb2xvcjogIzYyOWVmZjsgfVxuICAuaHVic3BvdC1vdmVycmlkZSAuaGJzcHQtZm9ybSBpbnB1dC5ocy1pbnB1dFt0eXBlPVwicmFkaW9cIl0sXG4gIC5odWJzcG90LW92ZXJyaWRlIC5oYnNwdC1mb3JtIGlucHV0LmhzLWlucHV0W3R5cGU9XCJjaGVja2JveFwiXSB7XG4gICAgaGVpZ2h0OiBhdXRvO1xuICAgIG1hcmdpbi1yaWdodDogOHB4OyB9XG4gIC5odWJzcG90LW92ZXJyaWRlIC5oYnNwdC1mb3JtIC5ocy1mb3JtLWJvb2xlYW5jaGVja2JveC1kaXNwbGF5IHtcbiAgICBkaXNwbGF5OiBmbGV4OyB9XG4gIC5odWJzcG90LW92ZXJyaWRlIC5oYnNwdC1mb3JtIHNlbGVjdC5ocy1pbnB1dCB7XG4gICAgaGVpZ2h0OiA0NHB4O1xuICAgIGFwcGVhcmFuY2U6IG5vbmU7XG4gICAgYmFja2dyb3VuZC1pbWFnZTogbGluZWFyLWdyYWRpZW50KDQ1ZGVnLCB0cmFuc3BhcmVudCA1MCUsIGdyYXkgNTAlKSwgbGluZWFyLWdyYWRpZW50KDEzNWRlZywgZ3JheSA1MCUsIHRyYW5zcGFyZW50IDUwJSk7XG4gICAgYmFja2dyb3VuZC1wb3NpdGlvbjogY2FsYygxMDAlIC0gMjBweCkgNTAlLCBjYWxjKDEwMCUgLSAxNXB4KSA1MCU7XG4gICAgYmFja2dyb3VuZC1zaXplOiA1cHggNXB4LCA1cHggNXB4LCAxcHggMS41ZW07XG4gICAgYmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdDsgfVxuICAuaHVic3BvdC1vdmVycmlkZSAuaGJzcHQtZm9ybSBmb3JtIGZpZWxkc2V0LmZvcm0tY29sdW1ucy0yIC5pbnB1dCB7XG4gICAgbWFyZ2luOiAwOyB9XG4gIC5odWJzcG90LW92ZXJyaWRlIC5oYnNwdC1mb3JtIGZpZWxkc2V0LmZvcm0tY29sdW1ucy0yIC5ocy1mb3JtLWZpZWxkIHtcbiAgICBwYWRkaW5nOiAwIDEwcHg7IH1cbiAgICAuaHVic3BvdC1vdmVycmlkZSAuaGJzcHQtZm9ybSBmaWVsZHNldC5mb3JtLWNvbHVtbnMtMiAuaHMtZm9ybS1maWVsZDpmaXJzdC1jaGlsZCB7XG4gICAgICBwYWRkaW5nLWxlZnQ6IDA7IH1cbiAgICAuaHVic3BvdC1vdmVycmlkZSAuaGJzcHQtZm9ybSBmaWVsZHNldC5mb3JtLWNvbHVtbnMtMiAuaHMtZm9ybS1maWVsZDpsYXN0LWNoaWxkIHtcbiAgICAgIHBhZGRpbmctcmlnaHQ6IDA7IH1cbiAgLmh1YnNwb3Qtb3ZlcnJpZGUgLmhic3B0LWZvcm0gLmlucHV0cy1saXN0LFxuICAuaHVic3BvdC1vdmVycmlkZSAuaGJzcHQtZm9ybSAuaHMtZXJyb3ItbXNncyB7XG4gICAgbWFyZ2luOiAwO1xuICAgIHBhZGRpbmc6IDA7XG4gICAgbGlzdC1zdHlsZS10eXBlOiBub25lOyB9XG4gIC5odWJzcG90LW92ZXJyaWRlIC5oYnNwdC1mb3JtIC5pbnB1dHMtbGlzdC5tdWx0aS1jb250YWluZXIge1xuICAgIG92ZXJmbG93OiBoaWRkZW47IH1cbiAgICAuaHVic3BvdC1vdmVycmlkZSAuaGJzcHQtZm9ybSAuaW5wdXRzLWxpc3QubXVsdGktY29udGFpbmVyIGxpOm50aC1sYXN0LWNoaWxkKG4rNik6Zmlyc3QtY2hpbGQsXG4gICAgLmh1YnNwb3Qtb3ZlcnJpZGUgLmhic3B0LWZvcm0gLmlucHV0cy1saXN0Lm11bHRpLWNvbnRhaW5lciBsaTpudGgtbGFzdC1jaGlsZChuKzYpOmZpcnN0LWNoaWxkIH4gbGkge1xuICAgICAgd2lkdGg6IDUwJTtcbiAgICAgIGZsb2F0OiBsZWZ0O1xuICAgICAgcGFkZGluZy1yaWdodDogMTFweDsgfVxuICAgIC5odWJzcG90LW92ZXJyaWRlIC5oYnNwdC1mb3JtIC5pbnB1dHMtbGlzdC5tdWx0aS1jb250YWluZXIgbGk6bnRoLWxhc3QtY2hpbGQobis2KTpmaXJzdC1jaGlsZCB+IGxpOm50aC1jaGlsZChldmVuKSB7XG4gICAgICBwYWRkaW5nLXJpZ2h0OiAwO1xuICAgICAgcGFkZGluZy1sZWZ0OiAxMXB4OyB9XG4gIC5odWJzcG90LW92ZXJyaWRlIC5oYnNwdC1mb3JtIC5ocy1mb3JtLWNoZWNrYm94LWRpc3BsYXkge1xuICAgIG1hcmdpbi10b3A6IDRweDtcbiAgICBkaXNwbGF5OiBmbGV4OyB9XG4gIC5odWJzcG90LW92ZXJyaWRlIC5oYnNwdC1mb3JtIC5ocy1mb3JtLWNoZWNrYm94LWRpc3BsYXkgLmhzLWlucHV0W3R5cGU9XCJjaGVja2JveFwiXSB7XG4gICAgbWFyZ2luLXJpZ2h0OiAxMHB4OyB9XG4gIC5odWJzcG90LW92ZXJyaWRlIC5oYnNwdC1mb3JtIC5ocy1mb3JtLWNoZWNrYm94LWRpc3BsYXkgc3BhbiB7XG4gICAgZm9udC1zaXplOiAxNXB4O1xuICAgIGNvbG9yOiAjNTA1ODYzOyB9XG4gIC5odWJzcG90LW92ZXJyaWRlIC5oYnNwdC1mb3JtIC5ocy1lcnJvci1tc2dzIHtcbiAgICBwYWRkaW5nOiA1cHggMCAwO1xuICAgIGZvbnQtc2l6ZTogMTFweDtcbiAgICBjb2xvcjogI0Y0NTQ1NDsgfVxuICAuaHVic3BvdC1vdmVycmlkZSAuaGJzcHQtZm9ybSAuaHNfc3VibWl0IHtcbiAgICBtYXJnaW4tdG9wOiAzMHB4OyB9XG4gIC5odWJzcG90LW92ZXJyaWRlIC5oYnNwdC1mb3JtIC5oc19zdWJtaXQgaW5wdXQuaHMtYnV0dG9uIHtcbiAgICB0cmFuc2l0aW9uOiBhbGwgLjNzIGVhc2U7XG4gICAgbWFyZ2luOiAwO1xuICAgIGZsb2F0OiBub25lO1xuICAgIGZvbnQtc2l6ZTogMTZweDtcbiAgICBmb250LXdlaWdodDogNzAwO1xuICAgIHBhZGRpbmc6IDEycHggMjBweDtcbiAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xuICAgIGNvbG9yOiB3aGl0ZTtcbiAgICBiYWNrZ3JvdW5kOiAjMzg4MGZmO1xuICAgIGJveC1zaGFkb3c6IDAgMXB4IDNweCByZ2JhKDAsIDAsIDAsIDAuMDgpLCAwIDJweCA0cHggcmdiYSgwLCAwLCAwLCAwLjEyKTtcbiAgICBib3JkZXItcmFkaXVzOiA0cHg7XG4gICAgbGluZS1oZWlnaHQ6IDE4cHg7XG4gICAgbGV0dGVyLXNwYWNpbmc6IC0wLjAxZW07IH1cbiAgICAuaHVic3BvdC1vdmVycmlkZSAuaGJzcHQtZm9ybSAuaHNfc3VibWl0IGlucHV0LmhzLWJ1dHRvbjpob3ZlciB7XG4gICAgICBib3gtc2hhZG93OiAwIDdweCAxNHB4IHJnYmEoMCwgMCwgMCwgMC4xMiksIDAgM3B4IDZweCByZ2JhKDAsIDAsIDAsIDAuMDgpO1xuICAgICAgYmFja2dyb3VuZDogIzRkOGRmZDtcbiAgICAgIGNvbG9yOiAjZmZmO1xuICAgICAgb3V0bGluZTogbm9uZTsgfVxuICBAbWVkaWEgKG1heC13aWR0aDogNzY4cHgpIHtcbiAgICAuaHVic3BvdC1vdmVycmlkZSAuaGJzcHQtZm9ybSBmaWVsZHNldC5mb3JtLWNvbHVtbnMtMiAuaHMtZm9ybS1maWVsZCB7XG4gICAgICB3aWR0aDogMTAwJTtcbiAgICAgIGZsb2F0OiBub25lO1xuICAgICAgcGFkZGluZzogMDsgfVxuICAgICAgLmh1YnNwb3Qtb3ZlcnJpZGUgLmhic3B0LWZvcm0gZmllbGRzZXQuZm9ybS1jb2x1bW5zLTIgLmhzLWZvcm0tZmllbGQgKyAuaHMtZm9ybS1maWVsZCB7XG4gICAgICAgIG1hcmdpbi10b3A6IDI0cHg7IH1cbiAgICAuaHVic3BvdC1vdmVycmlkZSAuaGJzcHQtZm9ybSAuaW5wdXRzLWxpc3QubXVsdGktY29udGFpbmVyIGxpOm50aC1sYXN0LWNoaWxkKG4rNik6Zmlyc3QtY2hpbGQsXG4gICAgLmh1YnNwb3Qtb3ZlcnJpZGUgLmhic3B0LWZvcm0gLmlucHV0cy1saXN0Lm11bHRpLWNvbnRhaW5lciBsaTpudGgtbGFzdC1jaGlsZChuKzYpOmZpcnN0LWNoaWxkIH4gbGkge1xuICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICBmbG9hdDogbm9uZTtcbiAgICAgIHBhZGRpbmctcmlnaHQ6IDA7IH1cbiAgICAuaHVic3BvdC1vdmVycmlkZSAuaGJzcHQtZm9ybSAuaW5wdXRzLWxpc3QubXVsdGktY29udGFpbmVyIGxpOm50aC1sYXN0LWNoaWxkKG4rNik6Zmlyc3QtY2hpbGQgfiBsaTpudGgtY2hpbGQoZXZlbikge1xuICAgICAgcGFkZGluZy1sZWZ0OiAwOyB9XG4gICAgLmh1YnNwb3Qtb3ZlcnJpZGUgLmhic3B0LWZvcm0gLmhzX3N1Ym1pdCBpbnB1dC5ocy1idXR0b24ge1xuICAgICAgd2lkdGg6IDEwMCU7IH0gfVxuXG4uaHVic3BvdC1vdmVycmlkZS0tbGFyZ2UgLmhic3B0LWZvcm0gbGFiZWw6bm90KC5ocy1mb3JtLWJvb2xlYW5jaGVja2JveC1kaXNwbGF5KSB7XG4gIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XG4gIGZvbnQtc2l6ZTogMTJweDtcbiAgbGV0dGVyLXNwYWNpbmc6IDAuMDVlbTtcbiAgbWFyZ2luLWJvdHRvbTogNnB4OyB9XG5cbi5odWJzcG90LW92ZXJyaWRlLS1sYXJnZSAuaGJzcHQtZm9ybSAuaHMtZm9ybS1ib29sZWFuY2hlY2tib3gtZGlzcGxheSB7XG4gIGZvbnQtc2l6ZTogMTVweDsgfVxuXG4uaHVic3BvdC1vdmVycmlkZS0tbGFyZ2UgLmhic3B0LWZvcm0gLmhzLXJpY2h0ZXh0IHAgc3Bhbixcbi5odWJzcG90LW92ZXJyaWRlLS1sYXJnZSAuaGJzcHQtZm9ybSAuaHMtcmljaHRleHQgcCBhIHtcbiAgZm9udC1zaXplOiAxNXB4OyB9XG5cbi5odWJzcG90LW92ZXJyaWRlLS1sYXJnZSAuaGJzcHQtZm9ybSAuaHMtaW5wdXQsXG4uaHVic3BvdC1vdmVycmlkZS0tbGFyZ2UgLmhic3B0LWZvcm0gaW5wdXQuaHMtaW5wdXQge1xuICBwYWRkaW5nOiAxNnB4IDIwcHggMThweDtcbiAgZm9udC1zaXplOiAxOHB4OyB9XG5cbi5odWJzcG90LW92ZXJyaWRlLS1sYXJnZSAuaGJzcHQtZm9ybSBzZWxlY3QuaHMtaW5wdXQge1xuICB0ZXh0LWluZGVudDogMTBweDtcbiAgaGVpZ2h0OiA2MHB4OyB9XG5cbkAtbW96LWRvY3VtZW50IHVybC1wcmVmaXgoKSB7XG4gIC5odWJzcG90LW92ZXJyaWRlLS1sYXJnZSAuaGJzcHQtZm9ybSBzZWxlY3QuaHMtaW5wdXQge1xuICAgIHRleHQtaW5kZW50OiAwOyB9IH1cblxuLmh1YnNwb3Qtb3ZlcnJpZGUtLWxhcmdlIC5oYnNwdC1mb3JtIC5ocy1lcnJvci1tc2dzIGxhYmVsIHtcbiAgZm9udC1zaXplOiAxMXB4O1xuICBsZXR0ZXItc3BhY2luZzogMDtcbiAgdGV4dC10cmFuc2Zvcm06IG5vbmU7IH1cblxuLmh1YnNwb3Qtb3ZlcnJpZGUtLWxhcmdlIC5oYnNwdC1mb3JtIGZpZWxkc2V0LmZvcm0tY29sdW1ucy0yIC5ocy1mb3JtLWZpZWxkIHtcbiAgcGFkZGluZzogMCAyMHB4OyB9XG5cbi5odWJzcG90LW92ZXJyaWRlLS1sYXJnZSAuaGJzcHQtZm9ybSAuaHNfc3VibWl0IHtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICBwYWRkaW5nLXRvcDogMThweDsgfVxuXG4uaHVic3BvdC1vdmVycmlkZS0tbGFyZ2UgLmhic3B0LWZvcm0gLmhzX3N1Ym1pdCBpbnB1dC5ocy1idXR0b24ge1xuICBwYWRkaW5nOiAyMnB4IDI3cHggMjRweDtcbiAgYm9yZGVyLXJhZGl1czogNnB4OyB9XG5cbkBtZWRpYSAobWF4LXdpZHRoOiA3NjhweCkge1xuICAuaHVic3BvdC1vdmVycmlkZS0tbGFyZ2UgLmhic3B0LWZvcm0gZmllbGRzZXQuZm9ybS1jb2x1bW5zLTIgLmhzLWZvcm0tZmllbGQge1xuICAgIHBhZGRpbmc6IDA7IH0gfVxuXG4uaHVic3BvdC1vdmVycmlkZS0tbWVhc3VyZSB7XG4gIG1heC13aWR0aDogNzQ4cHg7XG4gIG1hcmdpbi1sZWZ0OiBhdXRvO1xuICBtYXJnaW4tcmlnaHQ6IGF1dG87IH1cblxuLyoqXG4gKiBUaGUgU3ViIEhlYWRlciBzaXRzIHVuZGVyIHRoZSBtYWluIG5hdmlnYXRpb24gdG8gZGlzcGxheSBjb250ZXh0LXNwZWNpZmljXG4gKiBwYWdlIGluZm9ybWF0aW9uLCB3aWRnZXRzLCBhbmQgbGlua3MuXG4gKiBTZXB0ZW1iZXIgMjAxN1xuICovXG4uc3ViLWhlYWRlciA+IC5jb250YWluZXIge1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWRpcmVjdGlvbjogcm93O1xuICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGNvbG9yOiAjNjk3Mzg0O1xuICBmb250LXNpemU6IDEzcHg7XG4gIGZvbnQtd2VpZ2h0OiA2MDA7XG4gIGZsZXgtd3JhcDogd3JhcDtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICB6LWluZGV4OiAxOyB9XG4gIC5zdWItaGVhZGVyID4gLmNvbnRhaW5lcjo6YmVmb3JlIHtcbiAgICBib3JkZXItdG9wOiAxcHggc29saWQgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjA2KTtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgICBjb250ZW50OiAnJztcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgdG9wOiAwO1xuICAgIHJpZ2h0OiAxNXB4O1xuICAgIGxlZnQ6IDE1cHg7XG4gICAgZmxleDogMCAwIDEwMCU7IH1cbiAgLnN1Yi1oZWFkZXIgPiAuY29udGFpbmVyOjphZnRlciB7XG4gICAgZGlzcGxheTogbm9uZTsgfVxuXG4uc3ViLWhlYWRlciB1bCB7XG4gIHBhZGRpbmc6IDA7XG4gIGxpc3Qtc3R5bGU6IG5vbmU7IH1cblxuLnN1Yi1oZWFkZXIgbGkge1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIGZvbnQtd2VpZ2h0OiA2MDA7IH1cblxuLnN1Yi1oZWFkZXIgdWw6bm90KC5icmVhZGNydW1icykge1xuICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xuICBsZXR0ZXItc3BhY2luZzogMC4wOGVtO1xuICBmb250LXNpemU6IDExcHg7IH1cbiAgLnN1Yi1oZWFkZXIgdWw6bm90KC5icmVhZGNydW1icykgbGkge1xuICAgIHBhZGRpbmc6IDE4cHggMTVweDsgfVxuICAuc3ViLWhlYWRlciB1bDpub3QoLmJyZWFkY3J1bWJzKSBsaTpsYXN0LWNoaWxkIHtcbiAgICBwYWRkaW5nLXJpZ2h0OiAwOyB9XG4gIC5zdWItaGVhZGVyIHVsOm5vdCguYnJlYWRjcnVtYnMpIGE6bm90KC5idG4pIHtcbiAgICB0cmFuc2l0aW9uOiBjb2xvciAwLjNzO1xuICAgIGNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNik7XG4gICAgcGFkZGluZzogMCAwIDRweDsgfVxuICAuc3ViLWhlYWRlciB1bDpub3QoLmJyZWFkY3J1bWJzKSBhOm5vdCguYnRuKTpub3QoLmFjdGl2ZSk6aG92ZXIge1xuICAgIGNvbG9yOiB3aGl0ZTsgfVxuICAuc3ViLWhlYWRlciB1bDpub3QoLmJyZWFkY3J1bWJzKSBhOm5vdCguYnRuKS5hY3RpdmUge1xuICAgIGNvbG9yOiB3aGl0ZTtcbiAgICBib3JkZXItYm90dG9tOiAycHggc29saWQgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjIpOyB9XG4gIEBtZWRpYSAobWF4LXdpZHRoOiA3NjhweCkge1xuICAgIC5zdWItaGVhZGVyIHVsOm5vdCguYnJlYWRjcnVtYnMpIGxpIHtcbiAgICAgIHBhZGRpbmc6IDE4cHggOHB4OyB9IH1cblxuLnN1Yi1oZWFkZXIgLmJyZWFkY3J1bWJzIHtcbiAgZm9udC1mYW1pbHk6IFwiRWluYVwiLCBcIkhlbHZldGljYSBOZXVlXCIsIEhlbHZldGljYSwgc2Fucy1zZXJpZjtcbiAgZm9udC1zaXplOiAxNnB4OyB9XG4gIC5zdWItaGVhZGVyIC5icmVhZGNydW1icy5zbSB7XG4gICAgZm9udC1zaXplOiAxM3B4OyB9XG4gIC5zdWItaGVhZGVyIC5icmVhZGNydW1icyBsaSB7XG4gICAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgICBjb2xvcjogd2hpdGU7XG4gICAgcGFkZGluZzogMTdweCAwOyB9XG4gICAgLnN1Yi1oZWFkZXIgLmJyZWFkY3J1bWJzIGxpOjphZnRlciB7XG4gICAgICBjb250ZW50OiAnLyc7XG4gICAgICBjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEpO1xuICAgICAgbWFyZ2luLWxlZnQ6IDVweDtcbiAgICAgIG1hcmdpbi1yaWdodDogMXB4O1xuICAgICAgZm9udC1zaXplOiAxNnB4O1xuICAgICAgdmVydGljYWwtYWxpZ246IDBweDsgfVxuICAgIC5zdWItaGVhZGVyIC5icmVhZGNydW1icyBsaTpsYXN0LWNoaWxkOjphZnRlciB7XG4gICAgICBkaXNwbGF5OiBub25lOyB9XG4gICAgLnN1Yi1oZWFkZXIgLmJyZWFkY3J1bWJzIGxpIGEsIC5zdWItaGVhZGVyIC5icmVhZGNydW1icyBsaTo6YWZ0ZXIge1xuICAgICAgZm9udC13ZWlnaHQ6IDYwMDsgfVxuICAuc3ViLWhlYWRlciAuYnJlYWRjcnVtYnMgYSB7XG4gICAgY29sb3I6IHdoaXRlO1xuICAgIHRyYW5zaXRpb246IC4ycyBjb2xvcjtcbiAgICBwYWRkaW5nOiAwO1xuICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICBtYXJnaW4tbGVmdDogLTFweDsgfVxuICAgIC5zdWItaGVhZGVyIC5icmVhZGNydW1icyBhOmhvdmVyIHtcbiAgICAgIGNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMyk7IH1cblxuLnN1Yi1oZWFkZXIgLmJyZWFkY3J1bWJzLS1zbWFsbCxcbi5zdWItaGVhZGVyIC5icmVhZGNydW1icy0tc21hbGwgbGk6YWZ0ZXIge1xuICBmb250LXNpemU6IDEzcHg7IH1cblxuLnN1Yi1oZWFkZXIgLmJyZWFkY3J1bWJzLS1zbWFsbCBsaSBhIHtcbiAgZm9udC13ZWlnaHQ6IDYwMDsgfVxuXG4uc3ViLWhlYWRlciBhIHtcbiAgY29sb3I6IHdoaXRlO1xuICBwYWRkaW5nOiAxOHB4IDE1cHg7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xuICB0cmFuc2l0aW9uOiAuMnMgY29sb3I7IH1cbiAgLnN1Yi1oZWFkZXIgYS5jdXJyZW50LCAuc3ViLWhlYWRlciBhLmFjdGl2ZSB7XG4gICAgY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC40KTsgfVxuICAuc3ViLWhlYWRlciBhOmhvdmVyIHtcbiAgICBjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjQpOyB9XG4gIC5zdWItaGVhZGVyIGEuYnRuIHtcbiAgICBwYWRkaW5nOiA2cHggOHB4IDVweDtcbiAgICBmb250LXNpemU6IDEzcHg7XG4gICAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgICB2ZXJ0aWNhbC1hbGlnbjogMHB4O1xuICAgIGxldHRlci1zcGFjaW5nOiAtLjAxZW07XG4gICAgbWFyZ2luLXJpZ2h0OiAzcHg7XG4gICAgbWFyZ2luLWxlZnQ6IDlweDtcbiAgICB0cmFuc2l0aW9uOiAuM3MgYm94LXNoYWRvdywgLjNzIGJhY2tncm91bmQ7IH1cbiAgICAuc3ViLWhlYWRlciBhLmJ0bjpob3ZlciB7XG4gICAgICBib3gtc2hhZG93OiAwIDNweCA1cHggcmdiYSgwLCAwLCAwLCAwLjE1KTsgfVxuICAgIC5zdWItaGVhZGVyIGEuYnRuOmFjdGl2ZSB7XG4gICAgICBib3gtc2hhZG93OiBpbnNldCAwIDFweCA0cHggcmdiYSgwLCAwLCAwLCAwLjIpOyB9XG5cbmJvZHkubGlnaHQgLnN1Yi1oZWFkZXIgLmNvbnRhaW5lcjo6YmVmb3JlIHtcbiAgYm9yZGVyLXRvcDogMXB4IHNvbGlkIHJnYmEoMCwgMCwgMCwgMC4wNik7IH1cblxuYm9keS5saWdodCAuc3ViLWhlYWRlciAuYnJlYWRjcnVtYnMgbGkge1xuICBjb2xvcjogIzI3MmEyZjsgfVxuICBib2R5LmxpZ2h0IC5zdWItaGVhZGVyIC5icmVhZGNydW1icyBsaTo6YWZ0ZXIge1xuICAgIGNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuMyk7IH1cblxuYm9keS5saWdodCAuc3ViLWhlYWRlciAuYnJlYWRjcnVtYnMgYSB7XG4gIGNvbG9yOiAjN2E4OGEwOyB9XG4gIGJvZHkubGlnaHQgLnN1Yi1oZWFkZXIgLmJyZWFkY3J1bWJzIGE6aG92ZXIge1xuICAgIGNvbG9yOiAjNGE4YmZjOyB9XG5cbmJvZHkubGlnaHQgLnN1Yi1oZWFkZXIgYSB7XG4gIGNvbG9yOiAjNjk3Mzg0OyB9XG4gIGJvZHkubGlnaHQgLnN1Yi1oZWFkZXIgYS5jdXJyZW50LCBib2R5LmxpZ2h0IC5zdWItaGVhZGVyIGEuYWN0aXZlIHtcbiAgICBjb2xvcjogI2IxYmJjYTsgfVxuICBib2R5LmxpZ2h0IC5zdWItaGVhZGVyIGE6aG92ZXIge1xuICAgIGNvbG9yOiAjNGE4YmZjOyB9XG5cbi5oZXJvIHtcbiAgcGFkZGluZy10b3A6IDEyOHB4O1xuICBwYWRkaW5nLWJvdHRvbTogNzJweDtcbiAgcG9zaXRpb246IHJlbGF0aXZlOyB9XG4gIC5oZXJvLmxlZnQgLmNvbnRlbnQge1xuICAgIHdpZHRoOiA0MTVweDsgfVxuICAgIEBtZWRpYSAobWF4LXdpZHRoOiAxMjE5cHgpIHtcbiAgICAgIC5oZXJvLmxlZnQgLmNvbnRlbnQge1xuICAgICAgICB3aWR0aDogNDAwcHg7IH0gfVxuICAgIEBtZWRpYSAobWF4LXdpZHRoOiA3NjdweCkge1xuICAgICAgLmhlcm8ubGVmdCAuY29udGVudCB7XG4gICAgICAgIHdpZHRoOiAxMDAlOyB9IH1cbiAgLmhlcm8ubGVmdCAuZ3JhcGhpY3Mge1xuICAgIHRvcDogMTUwcHg7XG4gICAgcmlnaHQ6IDA7XG4gICAgcG9zaXRpb246IGFic29sdXRlOyB9XG4gIC5oZXJvLnJpZ2h0IC5jb250ZW50IHtcbiAgICB3aWR0aDogNDUxcHg7XG4gICAgZmxvYXQ6IHJpZ2h0OyB9XG4gICAgQG1lZGlhIChtYXgtd2lkdGg6IDc2N3B4KSB7XG4gICAgICAuaGVyby5yaWdodCAuY29udGVudCB7XG4gICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgICBmbG9hdDogbm9uZTsgfSB9XG4gICAgLmhlcm8ucmlnaHQgLmNvbnRlbnQ6YWZ0ZXIge1xuICAgICAgY2xlYXI6IHJpZ2h0OyB9XG4gIC5oZXJvIC5ncmFwaGljcyB7XG4gICAgd2lkdGg6IDUwMHB4OyB9XG4gICAgLmhlcm8gLmdyYXBoaWNzIHZpZGVvIHtcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgIGxlZnQ6IC0ycHg7XG4gICAgICB0b3A6IDEwcHg7IH1cbiAgICAgIC5oZXJvIC5ncmFwaGljcyB2aWRlbzo6LXdlYmtpdC1tZWRpYS1jb250cm9scy1zdGFydC1wbGF5YmFjay1idXR0b24ge1xuICAgICAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7XG4gICAgICAgIC13ZWJraXQtYXBwZWFyYW5jZTogbm9uZTsgfVxuICAgIEBtZWRpYSAobWF4LXdpZHRoOiA3NjdweCkge1xuICAgICAgLmhlcm8gLmdyYXBoaWNzIHtcbiAgICAgICAgd2lkdGg6IDEwMCU7IH1cbiAgICAgICAgLmhlcm8gLmdyYXBoaWNzIHZpZGVvIHtcbiAgICAgICAgICB3aWR0aDogMzAwcHg7XG4gICAgICAgICAgaGVpZ2h0OiAzMDBweDtcbiAgICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICAgICAgbWFyZ2luOiAwIGF1dG87XG4gICAgICAgICAgZGlzcGxheTogYmxvY2s7IH0gfVxuICAuaGVybyBwIHtcbiAgICBmb250LXNpemU6IDE1cHg7XG4gICAgbGluZS1oZWlnaHQ6IDI4cHg7XG4gICAgbGV0dGVyLXNwYWNpbmc6IC0wLjAyZW07XG4gICAgY29sb3I6ICM1NzYwNzA7IH1cbiAgICAuaGVybyBwICsgLmJ0bnMge1xuICAgICAgbWFyZ2luLXRvcDogMzdweDsgfVxuICAuaGVybyAuZmVhdHVyZSB7XG4gICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgZm9udC13ZWlnaHQ6IDcwMDtcbiAgICBmb250LXNpemU6IDEwcHg7XG4gICAgbGV0dGVyLXNwYWNpbmc6IDJweDtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgcGFkZGluZy1ib3R0b206IDE1cHg7XG4gICAgY29sb3I6IGJsYWNrOyB9XG4gICAgLmhlcm8gLmZlYXR1cmUgc3BhbiB7XG4gICAgICB0cmFuc2l0aW9uOiBsZWZ0IDAuM3MgY3ViaWMtYmV6aWVyKDAuMTU1LCAxLjEwNSwgMC4yOTUsIDEuMTIpO1xuICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICAgbGVmdDogMDsgfVxuICAgIC5oZXJvIC5mZWF0dXJlOmFmdGVyIHtcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgIHRvcDogMTRweDtcbiAgICAgIGxlZnQ6IDA7XG4gICAgICByaWdodDogMDtcbiAgICAgIGNvbnRlbnQ6ICcnO1xuICAgICAgYm9yZGVyLWJvdHRvbTogMnB4IHNvbGlkICM0QzU1NUE7XG4gICAgICB0cmFuc2l0aW9uOiByaWdodCAwLjNzIGN1YmljLWJlemllcigwLjE1NSwgMS4xMDUsIDAuMjk1LCAxLjEyKTsgfVxuICAgIC5oZXJvIC5mZWF0dXJlOmJlZm9yZSB7XG4gICAgICBjb250ZW50OiAnJztcbiAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgIHJpZ2h0OiAtMzVweDtcbiAgICAgIHRvcDogOXB4O1xuICAgICAgZm9udC1zaXplOiAyMHB4O1xuICAgICAgdHJhbnNpdGlvbjogdHJhbnNmb3JtIDAuM3MgY3ViaWMtYmV6aWVyKDAuMTU1LCAxLjEwNSwgMC4yOTUsIDEuMTIpO1xuICAgICAgd2lkdGg6IDExcHg7XG4gICAgICBoZWlnaHQ6IDExcHg7XG4gICAgICBib3JkZXItcmFkaXVzOiAycHg7XG4gICAgICBib3JkZXItcmlnaHQ6IDAuMWVtIHNvbGlkO1xuICAgICAgYm9yZGVyLXRvcDogMC4xZW0gc29saWQ7XG4gICAgICB0cmFuc2Zvcm06IHNjYWxlM2QoMCwgMCwgMSkgcm90YXRlKDQ1ZGVnKSB0cmFuc2xhdGUzZCgtMjVweCwgMjVweCwgMCk7XG4gICAgICBtYXJnaW4tcmlnaHQ6IDAuNWVtOyB9XG4gICAgLmhlcm8gLmZlYXR1cmU6aG92ZXIgc3BhbiB7XG4gICAgICBsZWZ0OiA1cHg7IH1cbiAgICAuaGVybyAuZmVhdHVyZTpob3ZlcjpiZWZvcmUge1xuICAgICAgdHJhbnNmb3JtOiBzY2FsZTNkKDEsIDEsIDEpIHJvdGF0ZSg0NWRlZykgdHJhbnNsYXRlM2QoMCwgMCwgMCk7IH1cbiAgICAuaGVybyAuZmVhdHVyZTpob3ZlcjphZnRlciB7XG4gICAgICByaWdodDogLTI1cHg7IH1cbiAgICAuaGVybyAuZmVhdHVyZSArIGgyIHtcbiAgICAgIG1hcmdpbi10b3A6IDI1cHg7XG4gICAgICBtYXJnaW4tYm90dG9tOiAyMHB4O1xuICAgICAgbGV0dGVyLXNwYWNpbmc6IC0wLjAxZW07XG4gICAgICBjb2xvcjogIzI3MmEyZjtcbiAgICAgIGZvbnQtc2l6ZTogMzJweDtcbiAgICAgIGZvbnQtd2VpZ2h0OiA0MDA7IH1cbiAgLmhlcm8gaDIge1xuICAgIGxpbmUtaGVpZ2h0OiA0MnB4OyB9XG4gIC5oZXJvIGgzICsgcCB7XG4gICAgZm9udC1zaXplOiAxN3B4O1xuICAgIGxpbmUtaGVpZ2h0OiAzNHB4OyB9XG5cbi50cmFuc3BhcmVudCAuY3RhIHtcbiAgbWFyZ2luLXRvcDogLTc4cHg7XG4gIHBhZGRpbmctdG9wOiA3OHB4OyB9XG5cbi5jdGEge1xuICBjb2xvcjogd2hpdGU7XG4gIGJhY2tncm91bmQ6ICM0YThiZmM7IH1cbiAgLmN0YS5ncmFkaWVudCB7XG4gICAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KDQ1ZGVnLCAjMzQ3ZWZmIDAlLCAjMjk5MGZmIDUwJSwgIzIyODVmZiA1MCUsICMxZWExZmYgMTAwJSk7IH1cbiAgLmN0YSAuY2VudGVyIHtcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7IH1cbiAgLmN0YSBoZ3JvdXAge1xuICAgIHBhZGRpbmctdG9wOiAzM3B4O1xuICAgIHBhZGRpbmctYm90dG9tOiA5NHB4O1xuICAgIG1heC13aWR0aDogODAwcHg7IH1cbiAgICAuY3RhIGhncm91cCBoMSB7XG4gICAgICBmb250LXNpemU6IDI4cHg7XG4gICAgICBtYXJnaW4tYm90dG9tOiAxMnB4O1xuICAgICAgbGV0dGVyLXNwYWNpbmc6IC0uMDNlbTsgfVxuICAgIC5jdGEgaGdyb3VwIGg0IHtcbiAgICAgIGZvbnQtc2l6ZTogMjBweDtcbiAgICAgIGNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuOCk7XG4gICAgICBsZXR0ZXItc3BhY2luZzogLS4wM2VtO1xuICAgICAgbGluZS1oZWlnaHQ6IDEuNmVtO1xuICAgICAgbWFyZ2luLXRvcDogLTVweDsgfVxuICAgIC5jdGEgaGdyb3VwIHAge1xuICAgICAgY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC43KTtcbiAgICAgIGZvbnQtc2l6ZTogMThweDtcbiAgICAgIGZvbnQtd2VpZ2h0OiA0MDA7IH1cbiAgICAuY3RhIGhncm91cCBhIHtcbiAgICAgIGNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuOSk7IH1cbiAgICAgIC5jdGEgaGdyb3VwIGE6aG92ZXIge1xuICAgICAgICBjb2xvcjogd2hpdGU7XG4gICAgICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTsgfVxuICAgIC5jdGEgaGdyb3VwIHNtYWxsIGEge1xuICAgICAgZm9udC13ZWlnaHQ6IDYwMDsgfVxuICAuY3RhIC50YWJzIHtcbiAgICBiYWNrZ3JvdW5kOiAjZjZmN2ZhOyB9XG4gICAgLmN0YSAudGFicyAuY29udGFpbmVyIHtcbiAgICAgIGZsZXgtd3JhcDogd3JhcDtcbiAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICAgICAgbGlzdC1zdHlsZTogbm9uZTtcbiAgICAgIG1hcmdpbi1ib3R0b206IDA7XG4gICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7IH1cbiAgICAuY3RhIC50YWJzIGxpIHtcbiAgICAgIG1heC13aWR0aDogMzYwcHg7XG4gICAgICBtYXJnaW4tbGVmdDogNDNweDtcbiAgICAgIHRleHQtYWxpZ246IGxlZnQ7XG4gICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7IH1cbiAgICAgIC5jdGEgLnRhYnMgbGk6Zmlyc3QtY2hpbGQge1xuICAgICAgICBtYXJnaW4tbGVmdDogMDsgfVxuICAgICAgQG1lZGlhIChtYXgtd2lkdGg6IDk5MXB4KSB7XG4gICAgICAgIC5jdGEgLnRhYnMgbGkge1xuICAgICAgICAgIG1hcmdpbi1sZWZ0OiAwO1xuICAgICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICAgIG1hcmdpbjogMCBhdXRvOyB9XG4gICAgICAgICAgLmN0YSAudGFicyBsaTpmaXJzdC1jaGlsZCB7XG4gICAgICAgICAgICBtYXJnaW4tbGVmdDogYXV0bzsgfSB9XG4gICAgLmN0YSAudGFicyBoMyB7XG4gICAgICBmb250LXNpemU6IDE2cHg7XG4gICAgICBjb2xvcjogIzI3MmEyZjtcbiAgICAgIG1hcmdpbi1ib3R0b206IDVweDtcbiAgICAgIG1hcmdpbi10b3A6IDA7XG4gICAgICBwb3NpdGlvbjogcmVsYXRpdmU7IH1cbiAgICAuY3RhIC50YWJzIHAge1xuICAgICAgZm9udC1zaXplOiAxNHB4O1xuICAgICAgY29sb3I6ICM3MjdhODc7XG4gICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICBtYXJnaW4tYm90dG9tOiAwOyB9XG4gICAgLmN0YSAudGFicyBhIHtcbiAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgcGFkZGluZzogMzJweCAwIDI4cHggODVweDtcbiAgICAgIHotaW5kZXg6IDE7XG4gICAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgICB1c2VyLXNlbGVjdDogbm9uZTsgfVxuICAgICAgLmN0YSAudGFicyBhOjpiZWZvcmUge1xuICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgIGNvbnRlbnQ6ICcnO1xuICAgICAgICB0b3A6IDA7XG4gICAgICAgIHJpZ2h0OiAwO1xuICAgICAgICBib3R0b206IDA7XG4gICAgICAgIGxlZnQ6IDA7XG4gICAgICAgIHRyYW5zaXRpb246IC4zcyBib3gtc2hhZG93LCAuM3MgdHJhbnNmb3JtLCAuM3MgYmFja2dyb3VuZCwgLjNzIGJvcmRlci1yYWRpdXM7IH1cbiAgICAgIC5jdGEgLnRhYnMgYTpob3ZlciwgLmN0YSAudGFicyBhOmFjdGl2ZSwgLmN0YSAudGFicyBhOmZvY3VzIHtcbiAgICAgICAgdGV4dC1kZWNvcmF0aW9uOiBub25lOyB9XG4gICAgICAgIC5jdGEgLnRhYnMgYTpob3Zlcjo6YmVmb3JlLCAuY3RhIC50YWJzIGE6YWN0aXZlOjpiZWZvcmUsIC5jdGEgLnRhYnMgYTpmb2N1czo6YmVmb3JlIHtcbiAgICAgICAgICBiYWNrZ3JvdW5kOiB3aGl0ZTtcbiAgICAgICAgICBib3JkZXItcmFkaXVzOiA0cHg7XG4gICAgICAgICAgYm94LXNoYWRvdzogMCAwIDRweCByZ2JhKDAsIDAsIDAsIDAuMDUpLCAwIDZweCAxMHB4IHJnYmEoMCwgMCwgMCwgMC4wOCk7XG4gICAgICAgICAgdHJhbnNmb3JtOiBzY2FsZSgxLjEsIDEuMSk7IH1cbiAgICAgICAgLmN0YSAudGFicyBhOmhvdmVyOjphZnRlciwgLmN0YSAudGFicyBhOmFjdGl2ZTo6YWZ0ZXIsIC5jdGEgLnRhYnMgYTpmb2N1czo6YWZ0ZXIge1xuICAgICAgICAgIG9wYWNpdHk6IDE7IH1cbiAgICAgIC5jdGEgLnRhYnMgYS5hY3RpdmU6OmJlZm9yZSB7XG4gICAgICAgIGJhY2tncm91bmQ6IHdoaXRlO1xuICAgICAgICBib3JkZXItcmFkaXVzOiA0cHg7XG4gICAgICAgIGJveC1zaGFkb3c6IDAgMCA0cHggcmdiYSgwLCAwLCAwLCAwLjA1KSwgMCA2cHggMTBweCByZ2JhKDAsIDAsIDAsIDAuMDgpO1xuICAgICAgICB0cmFuc2Zvcm06IHNjYWxlKDEuMiwgMS4yKTsgfVxuICAgICAgLmN0YSAudGFicyBhLmFjdGl2ZTo6YWZ0ZXIge1xuICAgICAgICBvcGFjaXR5OiAxOyB9XG4gICAgICAuY3RhIC50YWJzIGE6OmFmdGVyIHtcbiAgICAgICAgYmFja2dyb3VuZDogdXJsKFwiL2ltZy9nZXR0aW5nLXN0YXJ0ZWQvZ2V0dGluZy1zdGFydGVkLXRvZ2dsZS1pY29ucy5wbmdcIikgbm8tcmVwZWF0IDAgMDtcbiAgICAgICAgYmFja2dyb3VuZC1zaXplOiA3MHB4O1xuICAgICAgICB3aWR0aDogNzBweDtcbiAgICAgICAgaGVpZ2h0OiA3MHB4O1xuICAgICAgICBjb250ZW50OiAnJztcbiAgICAgICAgbGVmdDogNXB4O1xuICAgICAgICB0b3A6IDIwcHg7XG4gICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgIG9wYWNpdHk6IC43O1xuICAgICAgICB0cmFuc2l0aW9uOiAuM3Mgb3BhY2l0eTsgfVxuICAgICAgLmN0YSAudGFicyBhLmNyZWF0b3I6OmFmdGVyIHtcbiAgICAgICAgYmFja2dyb3VuZC1wb3NpdGlvbjogMCAtMTQwcHg7IH1cbiAgLmN0YSAuYWxlcnQge1xuICAgIGNvbG9yOiAjZmZlZWQ2O1xuICAgIGZvbnQtc2l6ZTogMTRweDtcbiAgICBmb250LXdlaWdodDogNTAwO1xuICAgIGJvcmRlci1yYWRpdXM6IDA7XG4gICAgbWFyZ2luLWJvdHRvbTogMDtcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgcGFkZGluZy10b3A6IDEwcHg7XG4gICAgcGFkZGluZy1ib3R0b206IDEwcHg7IH1cbiAgICAuY3RhIC5hbGVydDo6YmVmb3JlIHtcbiAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgIGZvbnQtc2l6ZTogMjBweDtcbiAgICAgIGxpbmUtaGVpZ2h0OiAxNHB4O1xuICAgICAgbGVmdDogMDtcbiAgICAgIHRvcDogMnB4O1xuICAgICAgbWFyZ2luLXJpZ2h0OiA1cHg7XG4gICAgICBjb250ZW50OiBcIlxcZjE3ZVwiOyB9XG4gICAgLmN0YSAuYWxlcnQgYSB7XG4gICAgICBjb2xvcjogI2ZmZmZmZjtcbiAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7IH1cbiAgICAgIC5jdGEgLmFsZXJ0IGE6aG92ZXIge1xuICAgICAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG4gICAgICAgIGNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuOCk7IH1cblxuI3ByZS1mb290ZXIge1xuICBmb250LWZhbWlseTogXCJFaW5hXCIsIFwiSGVsdmV0aWNhIE5ldWVcIiwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmO1xuICBiYWNrZ3JvdW5kOiAjZjlmYWZiO1xuICBjb2xvcjogIzcyN2E4NztcbiAgcGFkZGluZy10b3A6IDgwcHg7XG4gIHBhZGRpbmctYm90dG9tOiA3MnB4OyB9XG4gICNwcmUtZm9vdGVyIHVsIHtcbiAgICBsaXN0LXN0eWxlOiBub25lOyB9XG4gICAgI3ByZS1mb290ZXIgdWw6OmFmdGVyIHtcbiAgICAgIGNvbnRlbnQ6ICcnO1xuICAgICAgY2xlYXI6IGJvdGg7IH1cbiAgICAjcHJlLWZvb3RlciB1bCBsaSB7XG4gICAgICBmbG9hdDogbGVmdDtcbiAgICAgIHdpZHRoOiA0NSU7XG4gICAgICBwYWRkaW5nLWxlZnQ6IDEwOHB4O1xuICAgICAgcG9zaXRpb246IHJlbGF0aXZlOyB9XG4gICAgICAjcHJlLWZvb3RlciB1bCBsaTo6YmVmb3JlIHtcbiAgICAgICAgYmFja2dyb3VuZDogdXJsKFwiL2ltZy9ob21lL2ljb25zLWxnLnBuZz8xXCIpIG5vLXJlcGVhdCAwIC0zNzJweDtcbiAgICAgICAgYmFja2dyb3VuZC1zaXplOiA5M3B4O1xuICAgICAgICBoZWlnaHQ6IDkzcHg7XG4gICAgICAgIHdpZHRoOiA5M3B4O1xuICAgICAgICBjb250ZW50OiAnJztcbiAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgbGVmdDogLTlweDtcbiAgICAgICAgdG9wOiAtNXB4OyB9XG4gICAgICAjcHJlLWZvb3RlciB1bCBsaTo6YWZ0ZXIge1xuICAgICAgICBib3JkZXItcmlnaHQ6IDFweCBzb2xpZCAjZGRlMWVhO1xuICAgICAgICBjb250ZW50OiAnJztcbiAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICByaWdodDogLTEwJTtcbiAgICAgICAgdG9wOiAxNXB4O1xuICAgICAgICBib3R0b206IDE1cHg7XG4gICAgICAgIGRpc3BsYXk6IGJsb2NrOyB9XG4gICAgICAjcHJlLWZvb3RlciB1bCBsaS5leHBsb3ItZG9jczo6YmVmb3JlIHtcbiAgICAgICAgYmFja2dyb3VuZC1wb3NpdGlvbjogMCAtMjc5cHg7IH1cbiAgICAgICNwcmUtZm9vdGVyIHVsIGxpLmZvcnVtOjpiZWZvcmUge1xuICAgICAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwIC00NjVweDsgfVxuICAgICAgI3ByZS1mb290ZXIgdWwgbGkuYmxvZzo6YmVmb3JlIHtcbiAgICAgICAgYmFja2dyb3VuZC1wb3NpdGlvbjogMCAtNTU4cHg7IH1cbiAgICAgICNwcmUtZm9vdGVyIHVsIGxpOmxhc3QtY2hpbGQge1xuICAgICAgICBmbG9hdDogcmlnaHQ7IH1cbiAgICAgICAgI3ByZS1mb290ZXIgdWwgbGk6bGFzdC1jaGlsZDo6YWZ0ZXIge1xuICAgICAgICAgIGRpc3BsYXk6IG5vbmU7IH1cbiAgICAgICNwcmUtZm9vdGVyIHVsIGxpIGEge1xuICAgICAgICBmb250LXdlaWdodDogNjAwO1xuICAgICAgICBmb250LXNpemU6IDIwcHg7XG4gICAgICAgIG1hcmdpbi1ib3R0b206IDVweDtcbiAgICAgICAgbGV0dGVyLXNwYWNpbmc6IC0uMDJlbTsgfVxuICAgICAgICAjcHJlLWZvb3RlciB1bCBsaSBhOjphZnRlciB7XG4gICAgICAgICAgZm9udC1mYW1pbHk6ICdJb25pY29ucyc7XG4gICAgICAgICAgY29udGVudDogJ1xcZjI4Nyc7XG4gICAgICAgICAgZm9udC1zaXplOiAuOWVtO1xuICAgICAgICAgIG1hcmdpbi1sZWZ0OiAxMHB4O1xuICAgICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgICAgICAgdHJhbnNpdGlvbjogLjNzIHRyYW5zZm9ybTsgfVxuICAgICAgICAjcHJlLWZvb3RlciB1bCBsaSBhOmhvdmVyLCAjcHJlLWZvb3RlciB1bCBsaSBhOmFjdGl2ZSwgI3ByZS1mb290ZXIgdWwgbGkgYTpmb2N1cyB7XG4gICAgICAgICAgY29sb3I6ICMxODZiZmI7XG4gICAgICAgICAgdGV4dC1kZWNvcmF0aW9uOiBub25lOyB9XG4gICAgICAgICAgI3ByZS1mb290ZXIgdWwgbGkgYTpob3Zlcjo6YWZ0ZXIsICNwcmUtZm9vdGVyIHVsIGxpIGE6YWN0aXZlOjphZnRlciwgI3ByZS1mb290ZXIgdWwgbGkgYTpmb2N1czo6YWZ0ZXIge1xuICAgICAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUzZCg1cHgsIDAsIDApOyB9XG4gICAgICAjcHJlLWZvb3RlciB1bCBsaSBwIHtcbiAgICAgICAgZm9udC1zaXplOiAxNXB4O1xuICAgICAgICBsaW5lLWhlaWdodDogMS42ZW07XG4gICAgICAgIGNvbG9yOiAjNzI3YTg3O1xuICAgICAgICBtYXJnaW4tdG9wOiAycHg7XG4gICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7XG4gICAgICAgIGxldHRlci1zcGFjaW5nOiAtMC4wMmVtOyB9XG4gICAgICBAbWVkaWEgKG1heC13aWR0aDogNzY3cHgpIHtcbiAgICAgICAgI3ByZS1mb290ZXIgdWwgbGkge1xuICAgICAgICAgIGZsb2F0OiBub25lO1xuICAgICAgICAgIHdpZHRoOiAxMDAlOyB9XG4gICAgICAgICAgI3ByZS1mb290ZXIgdWwgbGk6Zmlyc3QtY2hpbGQge1xuICAgICAgICAgICAgbWFyZ2luLWJvdHRvbTogNDBweDsgfVxuICAgICAgICAgICNwcmUtZm9vdGVyIHVsIGxpOjphZnRlciB7XG4gICAgICAgICAgICBkaXNwbGF5OiBub25lOyB9IH1cblxuLmRvY3MgI3ByZS1mb290ZXIge1xuICBtYXJnaW4tbGVmdDogMjMwcHg7IH1cbiAgQG1lZGlhIChtYXgtd2lkdGg6IDc2N3B4KSB7XG4gICAgLmRvY3MgI3ByZS1mb290ZXIge1xuICAgICAgbWFyZ2luLWxlZnQ6IDA7IH0gfVxuICAuZG9jcyAjcHJlLWZvb3RlciAuY29udGFpbmVyIHtcbiAgICBtYXgtd2lkdGg6IDEwMCU7IH1cblxuLnByZS1oZWFkZXIge1xuICBmb250LWZhbWlseTogXCJJbnRlclwiLCBcIkludGVyIFVJXCIsIEhlbHZldGljYSwgQXJpYWwsIHNhbnMtc2VyaWY7XG4gIGJhY2tncm91bmQ6ICNGOEZBRkM7XG4gIGJveC1zaGFkb3c6IDAgMXB4IDBweCAwIHJnYmEoMCwgMjAsIDU2LCAwLjA2KTtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICB6LWluZGV4OiA5OTk7XG4gIHBhZGRpbmc6IDZweCAwIDdweDtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICBjb2xvcjogIzczODQ5QTsgfVxuICAucHJlLWhlYWRlciAuY29udGFpbmVyIHtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgZm9udC1zaXplOiAxMXB4O1xuICAgIGxpbmUtaGVpZ2h0OiAxLjhlbTtcbiAgICBmb250LXdlaWdodDogNDAwO1xuICAgIGxldHRlci1zcGFjaW5nOiAtLjAxZW07IH1cbiAgICAucHJlLWhlYWRlciAuY29udGFpbmVyOmJlZm9yZSwgLnByZS1oZWFkZXIgLmNvbnRhaW5lcjphZnRlciB7XG4gICAgICBkaXNwbGF5OiBub25lOyB9XG4gIC5wcmUtaGVhZGVyICNvcHRpbWl6ZWx5IHtcbiAgICB0cmFuc2l0aW9uOiAuMnMgb3BhY2l0eTsgfVxuICAucHJlLWhlYWRlciBwIHtcbiAgICBkaXNwbGF5OiBpbmxpbmU7IH1cbiAgLnByZS1oZWFkZXIgc3Ryb25nIHtcbiAgICBmb250LXdlaWdodDogNjAwO1xuICAgIGNvbG9yOiAjMDIwODE0OyB9XG4gIC5wcmUtaGVhZGVyIGEge1xuICAgIGJhY2tncm91bmQtY29sb3I6ICM3M2E1ZmY7XG4gICAgY29sb3I6ICNmZmY7XG4gICAgYm9yZGVyLXJhZGl1czogMTZweDtcbiAgICBtYXJnaW4tbGVmdDogMTJweDtcbiAgICBwYWRkaW5nOiA2cHggOHB4IDVweDtcbiAgICBmb250LXdlaWdodDogNjAwO1xuICAgIGZvbnQtc2l6ZTogOXB4O1xuICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XG4gICAgdmVydGljYWwtYWxpZ246IDA7XG4gICAgd2hpdGUtc3BhY2U6IHByZTtcbiAgICBsZXR0ZXItc3BhY2luZzogLjAyZW07XG4gICAgdHJhbnNpdGlvbjogLjJzIGJhY2tncm91bmQtY29sb3IsIC4ycyBib3gtc2hhZG93OyB9XG4gICAgLnByZS1oZWFkZXIgYTo6YWZ0ZXIge1xuICAgICAgZm9udC1mYW1pbHk6ICdJb25pY29ucyc7XG4gICAgICBjb250ZW50OiAnXFxmM2QxJztcbiAgICAgIG1hcmdpbi1sZWZ0OiAzcHg7IH1cbiAgICAucHJlLWhlYWRlciBhOmhvdmVyIHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6ICM4ZGI1ZmY7XG4gICAgICBib3gtc2hhZG93OiAwIDFweCAycHggcmdiYSgwLCAwLCAwLCAwLjEpOyB9XG4gIEBtZWRpYSAobWF4LXdpZHRoOiA3NjdweCkge1xuICAgIC5wcmUtaGVhZGVyIHtcbiAgICAgIGRpc3BsYXk6IG5vbmU7IH0gfVxuICAucHJlLWhlYWRlci5iYWNrIHtcbiAgICBiYWNrZ3JvdW5kOiAjRjlGOUY5O1xuICAgIHRleHQtYWxpZ246IGxlZnQ7XG4gICAgYm94LXNoYWRvdzogbm9uZTtcbiAgICBwYWRkaW5nOiAzcHggMDsgfVxuICAgIC5wcmUtaGVhZGVyLmJhY2sgYSB7XG4gICAgICBsaW5lLWhlaWdodDogbm9ybWFsO1xuICAgICAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgICAgIGZvbnQtc2l6ZTogMTBweDtcbiAgICAgIGxldHRlci1zcGFjaW5nOiAwLjA1ZW07XG4gICAgICBjb2xvcjogIzM4ODBGRjtcbiAgICAgIGJhY2tncm91bmQ6IG5vbmU7XG4gICAgICBtYXJnaW46IDA7XG4gICAgICBwYWRkaW5nOiAxMHB4IDA7IH1cbiAgICAgIC5wcmUtaGVhZGVyLmJhY2sgYTo6YWZ0ZXIge1xuICAgICAgICBkaXNwbGF5OiBub25lOyB9XG4gICAgICAucHJlLWhlYWRlci5iYWNrIGEgaW9uLWljb24ge1xuICAgICAgICBjb2xvcjogcmdiYSg1NiwgMTI4LCAyNTUsIDAuNyk7XG4gICAgICAgIGZvbnQtc2l6ZTogMTJweDtcbiAgICAgICAgaGVpZ2h0OiAxMnB4O1xuICAgICAgICB3aWR0aDogMTJweDtcbiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogLTJweDtcbiAgICAgICAgb3BhY2l0eTogMDtcbiAgICAgICAgdHJhbnNpdGlvbjogLjJzIHRyYW5zZm9ybSBlYXNlLCAuMnMgb3BhY2l0eTtcbiAgICAgICAgbWFyZ2luLXJpZ2h0OiA0cHg7IH1cbiAgICAgICAgLnByZS1oZWFkZXIuYmFjayBhIGlvbi1pY29uLmh5ZHJhdGVkIHtcbiAgICAgICAgICBvcGFjaXR5OiAxOyB9XG4gICAgICAucHJlLWhlYWRlci5iYWNrIGE6aG92ZXIge1xuICAgICAgICBib3gtc2hhZG93OiBub25lOyB9XG4gICAgICAgIC5wcmUtaGVhZGVyLmJhY2sgYTpob3ZlciBpb24taWNvbiB7XG4gICAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC0ycHgpOyB9XG5cbi5kb2NzLWNvbnRhaW5lciArIGZvb3RlciB7XG4gIGRpc3BsYXk6IG5vbmU7IH1cblxuZm9vdGVyIHtcbiAgYm9yZGVyLXRvcDogMXB4IHNvbGlkICNGM0Y1Rjk7XG4gIHBhZGRpbmctdG9wOiA3MHB4O1xuICBwYWRkaW5nLWJvdHRvbTogMjBweDtcbiAgZm9udC13ZWlnaHQ6IDUwMDtcbiAgZm9udC1mYW1pbHk6IFwiRWluYVwiLCBcIkhlbHZldGljYSBOZXVlXCIsIEhlbHZldGljYSwgc2Fucy1zZXJpZjsgfVxuICBmb290ZXIgLmxvZ28gc3ZnIHtcbiAgICBmaWxsOiAjMzg4MEZGO1xuICAgIHdpZHRoOiA3OHB4O1xuICAgIGhlaWdodDogMjZweDsgfVxuICBmb290ZXIgbmF2IHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjsgfVxuICAgIGZvb3RlciBuYXYuY29udGFpbmVyOjpiZWZvcmUsIGZvb3RlciBuYXYuY29udGFpbmVyOjphZnRlciB7XG4gICAgICBkaXNwbGF5OiBub25lOyB9XG4gICAgZm9vdGVyIG5hdiAubG9nbyxcbiAgICBmb290ZXIgbmF2IHVsIHtcbiAgICAgIGZsZXg6IDE7IH1cbiAgICBmb290ZXIgbmF2IHVsIHtcbiAgICAgIGxpc3Qtc3R5bGU6IG5vbmU7XG4gICAgICBmb250LXdlaWdodDogNTAwO1xuICAgICAgcGFkZGluZy1sZWZ0OiAwOyB9XG4gICAgICBmb290ZXIgbmF2IHVsOmZpcnN0LWNoaWxkIHtcbiAgICAgICAgbWFyZ2luLWxlZnQ6IDFweDsgfVxuICAgICAgZm9vdGVyIG5hdiB1bCBzdHJvbmcge1xuICAgICAgICBjb2xvcjogIzAwMDAwMDtcbiAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7XG4gICAgICAgIGZvbnQtc2l6ZTogMTZweDtcbiAgICAgICAgcGFkZGluZy1ib3R0b206IDRweDtcbiAgICAgICAgbGV0dGVyLXNwYWNpbmc6IC0uMDFlbTsgfVxuICAgICAgZm9vdGVyIG5hdiB1bCBhIHtcbiAgICAgICAgbGluZS1oZWlnaHQ6IDE7XG4gICAgICAgIGZvbnQtc2l6ZTogMTRweDtcbiAgICAgICAgbGV0dGVyLXNwYWNpbmc6IC0wLjAxZW07XG4gICAgICAgIGNvbG9yOiAjNzM4NDlBO1xuICAgICAgICBmb250LXdlaWdodDogNDAwO1xuICAgICAgICBwYWRkaW5nOiAxMXB4IDA7XG4gICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICAgICAgZm9udC1mYW1pbHk6IFwiSW50ZXJcIiwgXCJJbnRlciBVSVwiLCBIZWx2ZXRpY2EsIEFyaWFsLCBzYW5zLXNlcmlmOyB9XG4gICAgICAgIGZvb3RlciBuYXYgdWwgYTpob3ZlciB7XG4gICAgICAgICAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xuICAgICAgICAgIGNvbG9yOiAjNGE4YmZjOyB9XG4gIGZvb3RlciAuc2lnbnVwIHtcbiAgICBtYXJnaW4tdG9wOiA2MHB4O1xuICAgIGRpc3BsYXk6IGZsZXg7IH1cbiAgICBmb290ZXIgLnNpZ251cDo6YmVmb3JlLCBmb290ZXIgLnNpZ251cDo6YWZ0ZXIge1xuICAgICAgZGlzcGxheTogbm9uZTsgfVxuICAgIGZvb3RlciAuc2lnbnVwIGhncm91cCB7XG4gICAgICBmbGV4OiAwIDAgYXV0bzsgfVxuICAgIGZvb3RlciAuc2lnbnVwIGlvbmljLW5ld3NsZXR0ZXItc2lnbnVwIHtcbiAgICAgIGZsZXg6IDE7XG4gICAgICBtYXJnaW4tbGVmdDogNjBweDsgfVxuICAgIGZvb3RlciAuc2lnbnVwIGZvcm0ge1xuICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgIGhlaWdodDogNTBweDsgfVxuICAgIGZvb3RlciAuc2lnbnVwIGhncm91cCB7XG4gICAgICBiYWNrZ3JvdW5kOiB1cmwoXCIvaW1nL2Zvb3Rlci9mb290ZXItbmV3c2xldHRlci1pY29uLnBuZ1wiKSBuby1yZXBlYXQgMXB4IDhweDtcbiAgICAgIGJhY2tncm91bmQtc2l6ZTogNDBweDtcbiAgICAgIHBhZGRpbmctbGVmdDogNjNweDtcbiAgICAgIG1pbi1oZWlnaHQ6IDUwcHg7IH1cbiAgICAgIGZvb3RlciAuc2lnbnVwIGhncm91cCBoMyB7XG4gICAgICAgIGZvbnQtc2l6ZTogMTZweDtcbiAgICAgICAgbWFyZ2luLXRvcDogMDtcbiAgICAgICAgbWFyZ2luLWJvdHRvbTogM3B4O1xuICAgICAgICBwYWRkaW5nLXRvcDogMTFweDtcbiAgICAgICAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgICAgICAgbGV0dGVyLXNwYWNpbmc6IC0uMDJlbTsgfVxuICAgICAgZm9vdGVyIC5zaWdudXAgaGdyb3VwIHAge1xuICAgICAgICBmb250LWZhbWlseTogXCJJbnRlclwiLCBcIkludGVyIFVJXCIsIEhlbHZldGljYSwgQXJpYWwsIHNhbnMtc2VyaWY7XG4gICAgICAgIGZvbnQtc2l6ZTogMTRweDtcbiAgICAgICAgY29sb3I6ICM3Mzg0OUE7XG4gICAgICAgIGxldHRlci1zcGFjaW5nOiAtLjAxNmVtO1xuICAgICAgICBmb250LXdlaWdodDogNDAwOyB9XG4gIEBtZWRpYSAobWF4LXdpZHRoOiA5OTFweCkge1xuICAgIGZvb3RlciB7XG4gICAgICBwYWRkaW5nLXRvcDogNDZweDsgfVxuICAgICAgZm9vdGVyIG5hdiB7XG4gICAgICAgIGZsZXgtd3JhcDogd3JhcDtcbiAgICAgICAganVzdGlmeS1jb250ZW50OiBmbGV4LXN0YXJ0OyB9XG4gICAgICAgIGZvb3RlciBuYXYgLmxvZ28ge1xuICAgICAgICAgIGZsZXg6IDAgMCAxMDAlO1xuICAgICAgICAgIG1hcmdpbi1ib3R0b206IDQwcHg7IH1cbiAgICAgIGZvb3RlciAuc2lnbnVwIHtcbiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsgfVxuICAgICAgICBmb290ZXIgLnNpZ251cCBoZ3JvdXAsXG4gICAgICAgIGZvb3RlciAuc2lnbnVwIGlvbmljLW5ld3NsZXR0ZXItc2lnbnVwIHtcbiAgICAgICAgICBmbGV4OiAwIDAgMTAwJTsgfVxuICAgICAgICBmb290ZXIgLnNpZ251cCBpb25pYy1uZXdzbGV0dGVyLXNpZ251cCB7XG4gICAgICAgICAgbWFyZ2luLXRvcDogNHB4OyB9IH1cbiAgQG1lZGlhIChtYXgtd2lkdGg6IDc2OHB4KSB7XG4gICAgZm9vdGVyIG5hdiAubG9nbyB7XG4gICAgICBkaXNwbGF5OiBub25lOyB9XG4gICAgZm9vdGVyIG5hdiB1bCB7XG4gICAgICBmbGV4OiAwIDAgMzMlO1xuICAgICAgbWFyZ2luLWJvdHRvbTogMzZweDsgfVxuICAgIGZvb3RlciBuYXYgdWwgbGkgYSB7XG4gICAgICBwYWRkaW5nOiA5cHggMDsgfVxuICAgIGZvb3RlciAuc2lnbnVwIHtcbiAgICAgIG1hcmdpbi10b3A6IDA7IH0gfVxuICBAbWVkaWEgKG1heC13aWR0aDogNDgwcHgpIHtcbiAgICBmb290ZXIgbmF2IHVsIHtcbiAgICAgIGZsZXg6IDAgMCA1MCU7IH1cbiAgICBmb290ZXIgLnNpZ251cCBpb25pYy1uZXdzbGV0dGVyLXNpZ251cCB7XG4gICAgICBtYXJnaW4tbGVmdDogMDsgfSB9XG4gIGZvb3RlciAuc3ViLWZvb3RlciB7XG4gICAgZm9udC1zaXplOiAxMnB4O1xuICAgIGNvbG9yOiAjOWRhNWIzO1xuICAgIGJvcmRlci10b3A6IDFweCBzb2xpZCAjZWZmMWY1O1xuICAgIG1hcmdpbi10b3A6IDQwcHg7XG4gICAgcGFkZGluZy10b3A6IDI5cHg7XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xuICAgIGZsZXgtd3JhcDogd3JhcDsgfVxuICAgIGZvb3RlciAuc3ViLWZvb3RlciB1bCB7XG4gICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgZmxleDogMCAwIGF1dG87XG4gICAgICBsaXN0LXN0eWxlOiBub25lO1xuICAgICAgcGFkZGluZy1sZWZ0OiAwOyB9XG4gICAgZm9vdGVyIC5zdWItZm9vdGVyIHVsOmxhc3QtY2hpbGQgbGkgKyBsaSB7XG4gICAgICBtYXJnaW4tbGVmdDogMTVweDsgfVxuICAgIGZvb3RlciAuc3ViLWZvb3RlciAubGljZW5zZSB7XG4gICAgICBtYXJnaW4tbGVmdDogYXV0bztcbiAgICAgIG1hcmdpbi1yaWdodDogLTNweDtcbiAgICAgIHBhZGRpbmctbGVmdDogMTVweDtcbiAgICAgIHRleHQtYWxpZ246IHJpZ2h0OyB9XG4gICAgICBAbWVkaWEgKG1heC13aWR0aDogNzY3cHgpIHtcbiAgICAgICAgZm9vdGVyIC5zdWItZm9vdGVyIC5saWNlbnNlIHtcbiAgICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgICAgICBwYWRkaW5nLWxlZnQ6IDA7IH0gfVxuICAgIGZvb3RlciAuc3ViLWZvb3RlciBhIHtcbiAgICAgIGNvbG9yOiAjYmNjNWQ1OyB9XG4gICAgICBmb290ZXIgLnN1Yi1mb290ZXIgYTpob3ZlciB7XG4gICAgICAgIGNvbG9yOiAjOWRhNWIzOyB9XG4gICAgZm9vdGVyIC5zdWItZm9vdGVyIC5jb3B5cmlnaHQsXG4gICAgZm9vdGVyIC5zdWItZm9vdGVyIC5wcml2YWN5LFxuICAgIGZvb3RlciAuc3ViLWZvb3RlciAudG9zIHtcbiAgICAgIG1hcmdpbi1yaWdodDogOHB4OyB9XG4gICAgZm9vdGVyIC5zdWItZm9vdGVyIC5jb3B5cmlnaHQge1xuICAgICAgZmxleDogMCAwIDc3cHg7IH1cbiAgICBmb290ZXIgLnN1Yi1mb290ZXIgLnByaXZhY3kge1xuICAgICAgaGVpZ2h0OiAxZW07IH1cbiAgICBmb290ZXIgLnN1Yi1mb290ZXIgYVtpZF49YnRuLWZvb3Rlcl0ge1xuICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICAgaGVpZ2h0OiAxNnB4O1xuICAgICAgd2lkdGg6IDE2cHg7XG4gICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgICBvcGFjaXR5OiAwLjY7XG4gICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOyB9XG4gICAgICBmb290ZXIgLnN1Yi1mb290ZXIgYVtpZF49YnRuLWZvb3Rlcl0gc3ZnIHtcbiAgICAgICAgZmlsbDogI0NFRDZFMDsgfVxuICAgICAgZm9vdGVyIC5zdWItZm9vdGVyIGFbaWRePWJ0bi1mb290ZXJdOmhvdmVyIHN2ZyB7XG4gICAgICAgIGZpbGw6ICNCNEJCQzU7IH1cblxuQG1lZGlhIChtYXgtd2lkdGg6IDc2N3B4KSB7XG4gIC5oaWRlLXhzIHtcbiAgICBkaXNwbGF5OiBub25lOyB9XG4gIC5zaG93LXNtLFxuICAuc2hvdy1tZCxcbiAgLnNob3ctbGcge1xuICAgIGRpc3BsYXk6IG5vbmU7IH0gfVxuXG5AbWVkaWEgKG1pbi13aWR0aDogNzY4cHgpIGFuZCAobWF4LXdpZHRoOiA5OTFweCkge1xuICAuaGlkZS1zbSB7XG4gICAgZGlzcGxheTogbm9uZTsgfVxuICAuc2hvdy14cyxcbiAgLnNob3ctbWQsXG4gIC5zaG93LWxnIHtcbiAgICBkaXNwbGF5OiBub25lOyB9IH1cblxuQG1lZGlhIChtaW4td2lkdGg6IDk5MnB4KSBhbmQgKG1heC13aWR0aDogMTIxOXB4KSB7XG4gIC5oaWRlLW1kIHtcbiAgICBkaXNwbGF5OiBub25lOyB9XG4gIC5zaG93LXhzLFxuICAuc2hvdy1zbSxcbiAgLnNob3ctbGcge1xuICAgIGRpc3BsYXk6IG5vbmU7IH0gfVxuXG5AbWVkaWEgKG1pbi13aWR0aDogMTIyMHB4KSB7XG4gIC5oaWRlLWxnIHtcbiAgICBkaXNwbGF5OiBub25lOyB9XG4gIC5zaG93LXhzLFxuICAuc2hvdy1zbSxcbiAgLnNob3ctbWQge1xuICAgIGRpc3BsYXk6IG5vbmU7IH0gfVxuXG4uYnRuLFxuLm5hdmJhciAuYnRuIHtcbiAgZm9udC13ZWlnaHQ6IDUwMDtcbiAgYm9yZGVyLXJhZGl1czogNHB4O1xuICBsaW5lLWhlaWdodDogMS40ZW07XG4gIHBhZGRpbmc6IDE0cHggMzNweCAxNHB4O1xuICBtYXJnaW4tcmlnaHQ6IDEwcHg7XG4gIHRyYW5zaXRpb246IGFsbCAuM3MgZWFzZTtcbiAgZm9udC1zaXplOiAxOHB4O1xuICBib3JkZXI6IDBweCBzb2xpZCByZ2JhKDAsIDAsIDAsIDApO1xuICBjb2xvcjogI2ZmZjtcbiAgYm94LXNoYWRvdzogMCAxcHggM3B4IHJnYmEoMCwgMCwgMCwgMC4wOCksIDAgMnB4IDRweCByZ2JhKDAsIDAsIDAsIDAuMTIpO1xuICBiYWNrZ3JvdW5kOiAjMzg4MGZmO1xuICBsZXR0ZXItc3BhY2luZzogLTAuMDFlbTsgfVxuICAuYnRuOmxhc3QtY2hpbGQsXG4gIC5uYXZiYXIgLmJ0bjpsYXN0LWNoaWxkIHtcbiAgICBtYXJnaW4tcmlnaHQ6IDA7IH1cbiAgLmJ0bjpob3ZlciwgLmJ0bjpmb2N1cyxcbiAgLm5hdmJhciAuYnRuOmhvdmVyLFxuICAubmF2YmFyIC5idG46Zm9jdXMge1xuICAgIGJveC1zaGFkb3c6IDAgN3B4IDE0cHggcmdiYSgwLCAwLCAwLCAwLjEyKSwgMCAzcHggNnB4IHJnYmEoMCwgMCwgMCwgMC4wOCk7XG4gICAgYmFja2dyb3VuZDogIzRkOGRmZDtcbiAgICBjb2xvcjogI2ZmZjtcbiAgICBvdXRsaW5lOiBub25lOyB9XG4gIC5idG46YWN0aXZlLCAuYnRuOmFjdGl2ZTpmb2N1cywgLmJ0bjphY3RpdmU6aG92ZXIsXG4gIC5uYXZiYXIgLmJ0bjphY3RpdmUsXG4gIC5uYXZiYXIgLmJ0bjphY3RpdmU6Zm9jdXMsXG4gIC5uYXZiYXIgLmJ0bjphY3RpdmU6aG92ZXIge1xuICAgIGJveC1zaGFkb3c6IGluc2V0IDAgMXB4IDRweCByZ2JhKDAsIDAsIDAsIDAuMik7XG4gICAgYmFja2dyb3VuZDogIzU5OTVmYztcbiAgICBvdXRsaW5lOiBub25lOyB9XG4gIC5idG4ub3V0bGluZSxcbiAgLm5hdmJhciAuYnRuLm91dGxpbmUge1xuICAgIGJvcmRlci1jb2xvcjogIzRhOGJmYztcbiAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcbiAgICBjb2xvcjogIzRhOGJmYztcbiAgICBib3JkZXItd2lkdGg6IDFweDsgfVxuICAgIC5idG4ub3V0bGluZTpob3ZlciwgLmJ0bi5vdXRsaW5lOmZvY3VzLFxuICAgIC5uYXZiYXIgLmJ0bi5vdXRsaW5lOmhvdmVyLFxuICAgIC5uYXZiYXIgLmJ0bi5vdXRsaW5lOmZvY3VzIHtcbiAgICAgIGJvcmRlci1jb2xvcjogIzU5OTVmYztcbiAgICAgIGJhY2tncm91bmQ6IHJnYmEoNzQsIDEzOSwgMjUyLCAwLjA1KTsgfVxuICAgIC5idG4ub3V0bGluZS5mYWRlZCxcbiAgICAubmF2YmFyIC5idG4ub3V0bGluZS5mYWRlZCB7XG4gICAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDU0LCA3NCwgMTEwLCAwLjUpO1xuICAgICAgY29sb3I6ICNBMUFCQkM7IH1cbiAgICAgIC5idG4ub3V0bGluZS5mYWRlZDpob3ZlciwgLmJ0bi5vdXRsaW5lLmZhZGVkOmZvY3VzLFxuICAgICAgLm5hdmJhciAuYnRuLm91dGxpbmUuZmFkZWQ6aG92ZXIsXG4gICAgICAubmF2YmFyIC5idG4ub3V0bGluZS5mYWRlZDpmb2N1cyB7XG4gICAgICAgIGNvbG9yOiB3aGl0ZTtcbiAgICAgICAgYm9yZGVyLWNvbG9yOiAjYWFiM2MyO1xuICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDE2MSwgMTcxLCAxODgsIDAuMDUpOyB9XG4gIC5idG4uYnRuLXByaW1hcnksIC5idG4ubGlnaHQtYmx1ZSxcbiAgLm5hdmJhciAuYnRuLmJ0bi1wcmltYXJ5LFxuICAubmF2YmFyIC5idG4ubGlnaHQtYmx1ZSB7XG4gICAgYmFja2dyb3VuZDogIzUyOWVmZjsgfVxuICAgIC5idG4uYnRuLXByaW1hcnk6aG92ZXIsIC5idG4uYnRuLXByaW1hcnk6Zm9jdXMsIC5idG4uYnRuLXByaW1hcnk6YWN0aXZlLCAuYnRuLmxpZ2h0LWJsdWU6aG92ZXIsIC5idG4ubGlnaHQtYmx1ZTpmb2N1cywgLmJ0bi5saWdodC1ibHVlOmFjdGl2ZSxcbiAgICAubmF2YmFyIC5idG4uYnRuLXByaW1hcnk6aG92ZXIsXG4gICAgLm5hdmJhciAuYnRuLmJ0bi1wcmltYXJ5OmZvY3VzLFxuICAgIC5uYXZiYXIgLmJ0bi5idG4tcHJpbWFyeTphY3RpdmUsXG4gICAgLm5hdmJhciAuYnRuLmxpZ2h0LWJsdWU6aG92ZXIsXG4gICAgLm5hdmJhciAuYnRuLmxpZ2h0LWJsdWU6Zm9jdXMsXG4gICAgLm5hdmJhciAuYnRuLmxpZ2h0LWJsdWU6YWN0aXZlIHtcbiAgICAgIGJhY2tncm91bmQ6ICM2MWE3ZmY7IH1cbiAgICAuYnRuLmJ0bi1wcmltYXJ5Lm91dGxpbmUsIC5idG4ubGlnaHQtYmx1ZS5vdXRsaW5lLFxuICAgIC5uYXZiYXIgLmJ0bi5idG4tcHJpbWFyeS5vdXRsaW5lLFxuICAgIC5uYXZiYXIgLmJ0bi5saWdodC1ibHVlLm91dGxpbmUge1xuICAgICAgYm9yZGVyLWNvbG9yOiAjNTI5ZWZmO1xuICAgICAgY29sb3I6ICM1MjllZmY7IH1cbiAgLmJ0bi5yZWQsXG4gIC5uYXZiYXIgLmJ0bi5yZWQge1xuICAgIGJhY2tncm91bmQ6ICNmODU1NmM7IH1cbiAgICAuYnRuLnJlZDpob3ZlciwgLmJ0bi5yZWQ6Zm9jdXMsIC5idG4ucmVkOmFjdGl2ZSxcbiAgICAubmF2YmFyIC5idG4ucmVkOmhvdmVyLFxuICAgIC5uYXZiYXIgLmJ0bi5yZWQ6Zm9jdXMsXG4gICAgLm5hdmJhciAuYnRuLnJlZDphY3RpdmUge1xuICAgICAgYmFja2dyb3VuZDogI0ZGNjE3NzsgfVxuICAuYnRuLmxpZ2h0LFxuICAubmF2YmFyIC5idG4ubGlnaHQge1xuICAgIGJhY2tncm91bmQ6ICNGMEY2RkY7XG4gICAgY29sb3I6ICM0YThiZmM7IH1cbiAgICAuYnRuLmxpZ2h0OmhvdmVyLCAuYnRuLmxpZ2h0OmZvY3VzLCAuYnRuLmxpZ2h0OmFjdGl2ZSxcbiAgICAubmF2YmFyIC5idG4ubGlnaHQ6aG92ZXIsXG4gICAgLm5hdmJhciAuYnRuLmxpZ2h0OmZvY3VzLFxuICAgIC5uYXZiYXIgLmJ0bi5saWdodDphY3RpdmUge1xuICAgICAgYmFja2dyb3VuZDogI2U2ZjBmZjsgfVxuICAuYnRuLm5hdnksXG4gIC5uYXZiYXIgLmJ0bi5uYXZ5IHtcbiAgICBiYWNrZ3JvdW5kOiAjMDAzOWEyOyB9XG4gICAgLmJ0bi5uYXZ5OmhvdmVyLCAuYnRuLm5hdnk6Zm9jdXMsIC5idG4ubmF2eTphY3RpdmUsXG4gICAgLm5hdmJhciAuYnRuLm5hdnk6aG92ZXIsXG4gICAgLm5hdmJhciAuYnRuLm5hdnk6Zm9jdXMsXG4gICAgLm5hdmJhciAuYnRuLm5hdnk6YWN0aXZlIHtcbiAgICAgIGJhY2tncm91bmQ6ICMwMDI3NmY7IH1cbiAgLmJ0bi5ncmVlbixcbiAgLm5hdmJhciAuYnRuLmdyZWVuIHtcbiAgICBiYWNrZ3JvdW5kOiAjMWVkMTc2OyB9XG4gICAgLmJ0bi5ncmVlbjpob3ZlciwgLmJ0bi5ncmVlbjpmb2N1cywgLmJ0bi5ncmVlbjphY3RpdmUsIC5idG4uZ3JlZW46YWN0aXZlOmZvY3VzLCAuYnRuLmdyZWVuOmFjdGl2ZTpob3ZlcixcbiAgICAubmF2YmFyIC5idG4uZ3JlZW46aG92ZXIsXG4gICAgLm5hdmJhciAuYnRuLmdyZWVuOmZvY3VzLFxuICAgIC5uYXZiYXIgLmJ0bi5ncmVlbjphY3RpdmUsXG4gICAgLm5hdmJhciAuYnRuLmdyZWVuOmFjdGl2ZTpmb2N1cyxcbiAgICAubmF2YmFyIC5idG4uZ3JlZW46YWN0aXZlOmhvdmVyIHtcbiAgICAgIGJhY2tncm91bmQ6ICMzZmUzOTA7IH1cbiAgLmJ0bi53aGl0ZSxcbiAgLm5hdmJhciAuYnRuLndoaXRlIHtcbiAgICBiYWNrZ3JvdW5kOiB3aGl0ZTtcbiAgICBjb2xvcjogIzRhOGJmYzsgfVxuICAgIC5idG4ud2hpdGU6aG92ZXIsIC5idG4ud2hpdGU6Zm9jdXMsIC5idG4ud2hpdGU6YWN0aXZlLFxuICAgIC5uYXZiYXIgLmJ0bi53aGl0ZTpob3ZlcixcbiAgICAubmF2YmFyIC5idG4ud2hpdGU6Zm9jdXMsXG4gICAgLm5hdmJhciAuYnRuLndoaXRlOmFjdGl2ZSB7XG4gICAgICBjb2xvcjogIzRhOGJmYztcbiAgICAgIGNvbG9yOiAjNjM5YmZjOyB9XG4gICAgLmJ0bi53aGl0ZTphY3RpdmUsIC5idG4ud2hpdGU6YWN0aXZlOmZvY3VzLCAuYnRuLndoaXRlOmFjdGl2ZTpob3ZlcixcbiAgICAubmF2YmFyIC5idG4ud2hpdGU6YWN0aXZlLFxuICAgIC5uYXZiYXIgLmJ0bi53aGl0ZTphY3RpdmU6Zm9jdXMsXG4gICAgLm5hdmJhciAuYnRuLndoaXRlOmFjdGl2ZTpob3ZlciB7XG4gICAgICBiYWNrZ3JvdW5kOiB3aGl0ZTsgfVxuICAgIC5idG4ud2hpdGUub3V0bGluZSxcbiAgICAubmF2YmFyIC5idG4ud2hpdGUub3V0bGluZSB7XG4gICAgICBjb2xvcjogIzRhOGJmYztcbiAgICAgIGJhY2tncm91bmQ6IHdoaXRlOyB9XG4gICAgICAuYnRuLndoaXRlLm91dGxpbmU6aG92ZXIsIC5idG4ud2hpdGUub3V0bGluZTpmb2N1cywgLmJ0bi53aGl0ZS5vdXRsaW5lOmFjdGl2ZSxcbiAgICAgIC5uYXZiYXIgLmJ0bi53aGl0ZS5vdXRsaW5lOmhvdmVyLFxuICAgICAgLm5hdmJhciAuYnRuLndoaXRlLm91dGxpbmU6Zm9jdXMsXG4gICAgICAubmF2YmFyIC5idG4ud2hpdGUub3V0bGluZTphY3RpdmUge1xuICAgICAgICBjb2xvcjogIzE4NmJmYjtcbiAgICAgICAgYmFja2dyb3VuZDogd2hpdGU7IH1cbiAgLmJ0bi5ncmV5LFxuICAubmF2YmFyIC5idG4uZ3JleSB7XG4gICAgYmFja2dyb3VuZDogIzlkYTViMzsgfVxuICAgIC5idG4uZ3JleTpob3ZlciwgLmJ0bi5ncmV5OmZvY3VzLCAuYnRuLmdyZXk6YWN0aXZlLFxuICAgIC5uYXZiYXIgLmJ0bi5ncmV5OmhvdmVyLFxuICAgIC5uYXZiYXIgLmJ0bi5ncmV5OmZvY3VzLFxuICAgIC5uYXZiYXIgLmJ0bi5ncmV5OmFjdGl2ZSB7XG4gICAgICBiYWNrZ3JvdW5kOiAjOWRhNWIzOyB9XG4gICAgLmJ0bi5ncmV5Lm91dGxpbmUsXG4gICAgLm5hdmJhciAuYnRuLmdyZXkub3V0bGluZSB7XG4gICAgICBjb2xvcjogIzlkYTViMztcbiAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OyB9XG4gICAgICAuYnRuLmdyZXkub3V0bGluZTpob3ZlciwgLmJ0bi5ncmV5Lm91dGxpbmU6Zm9jdXMsIC5idG4uZ3JleS5vdXRsaW5lOmFjdGl2ZSwgLmJ0bi5ncmV5Lm91dGxpbmU6YWN0aXZlOmZvY3VzLCAuYnRuLmdyZXkub3V0bGluZTphY3RpdmU6aG92ZXIsXG4gICAgICAubmF2YmFyIC5idG4uZ3JleS5vdXRsaW5lOmhvdmVyLFxuICAgICAgLm5hdmJhciAuYnRuLmdyZXkub3V0bGluZTpmb2N1cyxcbiAgICAgIC5uYXZiYXIgLmJ0bi5ncmV5Lm91dGxpbmU6YWN0aXZlLFxuICAgICAgLm5hdmJhciAuYnRuLmdyZXkub3V0bGluZTphY3RpdmU6Zm9jdXMsXG4gICAgICAubmF2YmFyIC5idG4uZ3JleS5vdXRsaW5lOmFjdGl2ZTpob3ZlciB7XG4gICAgICAgIGNvbG9yOiAjODA4YjlkO1xuICAgICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsgfVxuICAuYnRuLmRhcmssXG4gIC5uYXZiYXIgLmJ0bi5kYXJrIHtcbiAgICBjb2xvcjogd2hpdGU7IH1cbiAgLmJ0bi5kYXJrLXBpbmssXG4gIC5uYXZiYXIgLmJ0bi5kYXJrLXBpbmsge1xuICAgIGJhY2tncm91bmQ6ICMyMTJmNDU7XG4gICAgY29sb3I6ICNmZjU2N2I7IH1cbiAgICAuYnRuLmRhcmstcGluazpob3ZlciwgLmJ0bi5kYXJrLXBpbms6Zm9jdXMsIC5idG4uZGFyay1waW5rOmFjdGl2ZSwgLmJ0bi5kYXJrLXBpbms6YWN0aXZlOmZvY3VzLCAuYnRuLmRhcmstcGluazphY3RpdmU6aG92ZXIsXG4gICAgLm5hdmJhciAuYnRuLmRhcmstcGluazpob3ZlcixcbiAgICAubmF2YmFyIC5idG4uZGFyay1waW5rOmZvY3VzLFxuICAgIC5uYXZiYXIgLmJ0bi5kYXJrLXBpbms6YWN0aXZlLFxuICAgIC5uYXZiYXIgLmJ0bi5kYXJrLXBpbms6YWN0aXZlOmZvY3VzLFxuICAgIC5uYXZiYXIgLmJ0bi5kYXJrLXBpbms6YWN0aXZlOmhvdmVyIHtcbiAgICAgIGNvbG9yOiAjZmY1NjdiO1xuICAgICAgYmFja2dyb3VuZDogIzI5M2I1NjsgfVxuICAuYnRuLm9yYW5nZSxcbiAgLm5hdmJhciAuYnRuLm9yYW5nZSB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogI2ZmYTgwMDsgfVxuICAgIC5idG4ub3JhbmdlOmhvdmVyLFxuICAgIC5uYXZiYXIgLmJ0bi5vcmFuZ2U6aG92ZXIge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2ZlYjMyMzsgfVxuICAuYnRuLnNtLFxuICAubmF2YmFyIC5idG4uc20ge1xuICAgIGZvbnQtd2VpZ2h0OiA2MDA7XG4gICAgYm9yZGVyLXJhZGl1czogNnB4O1xuICAgIGxldHRlci1zcGFjaW5nOiAwO1xuICAgIHRleHQtdHJhbnNmb3JtOiBub25lO1xuICAgIHBhZGRpbmc6IDEycHggMTlweCAxMHB4OyB9XG4gIC5idG4ucm91bmRlZCxcbiAgLm5hdmJhciAuYnRuLnJvdW5kZWQge1xuICAgIGJvcmRlci1yYWRpdXM6IDIuNWVtO1xuICAgIGxldHRlci1zcGFjaW5nOiAwO1xuICAgIHRleHQtdHJhbnNmb3JtOiBub25lO1xuICAgIGZvbnQtd2VpZ2h0OiA1MDA7XG4gICAgZm9udC1zaXplOiAxNnB4O1xuICAgIHBhZGRpbmc6IDE5cHggMjVweCAxOHB4O1xuICAgIGxpbmUtaGVpZ2h0OiAxZW07IH1cbiAgICAuYnRuLnJvdW5kZWQuc20sXG4gICAgLm5hdmJhciAuYnRuLnJvdW5kZWQuc20ge1xuICAgICAgcGFkZGluZzogMTRweCAyNHB4IDE0cHg7XG4gICAgICBmb250LXNpemU6IDE0cHg7XG4gICAgICBmb250LXdlaWdodDogNjAwOyB9XG4gIC5idG4udXBwZXJjYXNlLFxuICAubmF2YmFyIC5idG4udXBwZXJjYXNlIHtcbiAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlOyB9XG4gIC5idG4ubWljcm8sXG4gIC5uYXZiYXIgLmJ0bi5taWNybyB7XG4gICAgZm9udC1mYW1pbHk6IFwiRWluYVwiLCBcIkhlbHZldGljYSBOZXVlXCIsIEhlbHZldGljYSwgc2Fucy1zZXJpZjtcbiAgICBwYWRkaW5nOiA0cHggOHB4O1xuICAgIGZvbnQtc2l6ZTogMTBweDtcbiAgICBsZXR0ZXItc3BhY2luZzogMDtcbiAgICBmb250LXdlaWdodDogNzAwO1xuICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XG4gICAgYmFja2dyb3VuZDogI2ZmZjtcbiAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDU2LCAxMjgsIDI1NSwgMC4zKTtcbiAgICBjb2xvcjogIzM4ODBmZjtcbiAgICBib3gtc2hhZG93OiBub25lOyB9XG4gICAgLmJ0bi5taWNybzpob3ZlcixcbiAgICAubmF2YmFyIC5idG4ubWljcm86aG92ZXIge1xuICAgICAgYm9yZGVyLWNvbG9yOiAjMzg4MGZmOyB9XG4gICAgLmJ0bi5taWNybzphY3RpdmUsIC5idG4ubWljcm86YWN0aXZlOmZvY3VzLCAuYnRuLm1pY3JvOmFjdGl2ZTpob3ZlcixcbiAgICAubmF2YmFyIC5idG4ubWljcm86YWN0aXZlLFxuICAgIC5uYXZiYXIgLmJ0bi5taWNybzphY3RpdmU6Zm9jdXMsXG4gICAgLm5hdmJhciAuYnRuLm1pY3JvOmFjdGl2ZTpob3ZlciB7XG4gICAgICBiYWNrZ3JvdW5kOiAjZjJmOGZmO1xuICAgICAgYm9yZGVyLWNvbG9yOiAjODViMWZmO1xuICAgICAgYm94LXNoYWRvdzogaW5zZXQgMCAxcHggNHB4IHJnYmEoMCwgMCwgMCwgMC4xKTsgfVxuXG4uZHJhZ2dhYmxlIHtcbiAgaGVpZ2h0OiAzNDVweDtcbiAgcG9zaXRpb246IHJlbGF0aXZlOyB9XG4gIC5kcmFnZ2FibGUgLmNvZGUsXG4gIC5kcmFnZ2FibGUgLmFwcCB7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIHRvcDogMDtcbiAgICByaWdodDogMDtcbiAgICBib3R0b206IDA7XG4gICAgbGVmdDogMDtcbiAgICBiYWNrZ3JvdW5kOiB3aGl0ZTtcbiAgICBib3JkZXItcmFkaXVzOiA4cHg7IH1cbiAgLmRyYWdnYWJsZSAuYXBwIHtcbiAgICByaWdodDogMDtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICBwYWRkaW5nOiA5cHggMCAwIDlweDtcbiAgICBiYWNrZ3JvdW5kOiB3aGl0ZSB1cmwoXCIvaW1nL2hvbWUvaW9zLWxpc3QtZGVzaWduLnBuZ1wiKSBuby1yZXBlYXQgMCBib3R0b207XG4gICAgYmFja2dyb3VuZC1zaXplOiA1NDBweDsgfVxuICAuZHJhZ2dhYmxlIC5jb2RlIGNvZGUge1xuICAgIHBhZGRpbmc6IDA7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIHRvcDogMDtcbiAgICBib3R0b206IDA7XG4gICAgcmlnaHQ6IDA7XG4gICAgbGVmdDogMDtcbiAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcbiAgICBwYWRkaW5nLXRvcDogMTVweDsgfVxuICAuZHJhZ2dhYmxlIC5jb2RlIHByZSB7XG4gICAgZm9udC1mYW1pbHk6IG1vbm9zcGFjZTtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICB0b3A6IDA7XG4gICAgcmlnaHQ6IDA7XG4gICAgbGVmdDogMDtcbiAgICBib3R0b206IDA7XG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICBsaW5lLWhlaWdodDogMGVtO1xuICAgIGNvdW50ZXItcmVzZXQ6IGxpbmU7XG4gICAgd2hpdGUtc3BhY2U6IHByZS13cmFwO1xuICAgIHBhZGRpbmc6IDA7XG4gICAgYm9yZGVyOiAwO1xuICAgIG1hcmdpbjogMDsgfVxuICAgIC5kcmFnZ2FibGUgLmNvZGUgcHJlOjpiZWZvcmUge1xuICAgICAgYmFja2dyb3VuZDogI2YzZjdmZjtcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgIHRvcDogMDtcbiAgICAgIGJvdHRvbTogMDtcbiAgICAgIGxlZnQ6IDA7XG4gICAgICB3aWR0aDogNDBweDtcbiAgICAgIGNvbnRlbnQ6ICcnO1xuICAgICAgZGlzcGxheTogYmxvY2s7IH1cbiAgICAuZHJhZ2dhYmxlIC5jb2RlIHByZSBzcGFuLmxpbmUge1xuICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICBwYWRkaW5nOiAxMnB4IDAgMTJweCA1NXB4O1xuICAgICAgcG9zaXRpb246IHJlbGF0aXZlOyB9XG4gICAgICAuZHJhZ2dhYmxlIC5jb2RlIHByZSBzcGFuLmxpbmU6YmVmb3JlIHtcbiAgICAgICAgY291bnRlci1pbmNyZW1lbnQ6IGxpbmU7XG4gICAgICAgIGNvbnRlbnQ6IGNvdW50ZXIobGluZSk7XG4gICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICBjb2xvcjogIzc5YTVmMTtcbiAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICB0b3A6IDA7XG4gICAgICAgIGxlZnQ6IDA7XG4gICAgICAgIGJvdHRvbTogMDtcbiAgICAgICAgd2lkdGg6IDQwcHg7XG4gICAgICAgIHRleHQtYWxpZ246IHJpZ2h0O1xuICAgICAgICBwYWRkaW5nLXRvcDogMTJweDtcbiAgICAgICAgcGFkZGluZy1yaWdodDogOHB4OyB9XG4gIC5kcmFnZ2FibGUgLnRvZ2dsZSB7XG4gICAgd2lkdGg6IDRweDtcbiAgICB0b3A6IDAgIWltcG9ydGFudDtcbiAgICBib3R0b206IDA7XG4gICAgcmlnaHQ6IDA7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIGJveC1zaGFkb3c6IDAgMCAxOHB4IHJnYmEoMCwgMCwgMCwgMC4xKSwgMCAwIDRweCByZ2JhKDAsIDAsIDAsIDAuMDYpO1xuICAgIGJhY2tncm91bmQ6IHdoaXRlO1xuICAgIHotaW5kZXg6IDM7XG4gICAgY3Vyc29yOiBncmFiOyB9XG4gICAgLmRyYWdnYWJsZSAudG9nZ2xlOjphZnRlciB7XG4gICAgICBiYWNrZ3JvdW5kOiB1cmwoXCIvaW1nL2hvbWUvZHJhZy1idXR0b24ucG5nXCIpIG5vLXJlcGVhdCAwIDA7XG4gICAgICBiYWNrZ3JvdW5kLXNpemU6IDY0cHg7XG4gICAgICB3aWR0aDogNjRweDtcbiAgICAgIGhlaWdodDogNjRweDtcbiAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgY29udGVudDogJyc7XG4gICAgICB0b3A6IGNhbGMoNTAlIC0gNDBweCk7XG4gICAgICBsZWZ0OiAtMjhweDtcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsgfVxuXG4vKiEgalF1ZXJ5IFVJIC0gdjEuMTIuMSAtIDIwMTYtMTEtMTRcbiogaHR0cDovL2pxdWVyeXVpLmNvbVxuKiBJbmNsdWRlczogZHJhZ2dhYmxlLmNzcywgdGhlbWUuY3NzXG4qIFRvIHZpZXcgYW5kIG1vZGlmeSB0aGlzIHRoZW1lLCB2aXNpdCBodHRwOi8vanF1ZXJ5dWkuY29tL3RoZW1lcm9sbGVyLz9zY29wZT0mZm9sZGVyTmFtZT1iYXNlJmNvcm5lclJhZGl1c1NoYWRvdz04cHgmb2Zmc2V0TGVmdFNoYWRvdz0wcHgmb2Zmc2V0VG9wU2hhZG93PTBweCZ0aGlja25lc3NTaGFkb3c9NXB4Jm9wYWNpdHlTaGFkb3c9MzAmYmdJbWdPcGFjaXR5U2hhZG93PTAmYmdUZXh0dXJlU2hhZG93PWZsYXQmYmdDb2xvclNoYWRvdz02NjY2NjYmb3BhY2l0eU92ZXJsYXk9MzAmYmdJbWdPcGFjaXR5T3ZlcmxheT0wJmJnVGV4dHVyZU92ZXJsYXk9ZmxhdCZiZ0NvbG9yT3ZlcmxheT1hYWFhYWEmaWNvbkNvbG9yRXJyb3I9Y2MwMDAwJmZjRXJyb3I9NWYzZjNmJmJvcmRlckNvbG9yRXJyb3I9ZjFhODk5JmJnVGV4dHVyZUVycm9yPWZsYXQmYmdDb2xvckVycm9yPWZkZGZkZiZpY29uQ29sb3JIaWdobGlnaHQ9Nzc3NjIwJmZjSGlnaGxpZ2h0PTc3NzYyMCZib3JkZXJDb2xvckhpZ2hsaWdodD1kYWQ1NWUmYmdUZXh0dXJlSGlnaGxpZ2h0PWZsYXQmYmdDb2xvckhpZ2hsaWdodD1mZmZhOTAmaWNvbkNvbG9yQWN0aXZlPWZmZmZmZiZmY0FjdGl2ZT1mZmZmZmYmYm9yZGVyQ29sb3JBY3RpdmU9MDAzZWZmJmJnVGV4dHVyZUFjdGl2ZT1mbGF0JmJnQ29sb3JBY3RpdmU9MDA3ZmZmJmljb25Db2xvckhvdmVyPTU1NTU1NSZmY0hvdmVyPTJiMmIyYiZib3JkZXJDb2xvckhvdmVyPWNjY2NjYyZiZ1RleHR1cmVIb3Zlcj1mbGF0JmJnQ29sb3JIb3Zlcj1lZGVkZWQmaWNvbkNvbG9yRGVmYXVsdD03Nzc3NzcmZmNEZWZhdWx0PTQ1NDU0NSZib3JkZXJDb2xvckRlZmF1bHQ9YzVjNWM1JmJnVGV4dHVyZURlZmF1bHQ9ZmxhdCZiZ0NvbG9yRGVmYXVsdD1mNmY2ZjYmaWNvbkNvbG9yQ29udGVudD00NDQ0NDQmZmNDb250ZW50PTMzMzMzMyZib3JkZXJDb2xvckNvbnRlbnQ9ZGRkZGRkJmJnVGV4dHVyZUNvbnRlbnQ9ZmxhdCZiZ0NvbG9yQ29udGVudD1mZmZmZmYmaWNvbkNvbG9ySGVhZGVyPTQ0NDQ0NCZmY0hlYWRlcj0zMzMzMzMmYm9yZGVyQ29sb3JIZWFkZXI9ZGRkZGRkJmJnVGV4dHVyZUhlYWRlcj1mbGF0JmJnQ29sb3JIZWFkZXI9ZTllOWU5JmNvcm5lclJhZGl1cz0zcHgmZndEZWZhdWx0PW5vcm1hbCZmc0RlZmF1bHQ9MWVtJmZmRGVmYXVsdD1BcmlhbCUyQ0hlbHZldGljYSUyQ3NhbnMtc2VyaWZcbiogQ29weXJpZ2h0IGpRdWVyeSBGb3VuZGF0aW9uIGFuZCBvdGhlciBjb250cmlidXRvcnM7IExpY2Vuc2VkIE1JVCAqL1xuLnVpLWRyYWdnYWJsZS1oYW5kbGUge1xuICAtbXMtdG91Y2gtYWN0aW9uOiBub25lO1xuICB0b3VjaC1hY3Rpb246IG5vbmU7IH1cblxuLyogQ29tcG9uZW50IGNvbnRhaW5lcnNcbi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuLnVpLXdpZGdldCB7XG4gIGZvbnQtZmFtaWx5OiBBcmlhbCxIZWx2ZXRpY2Esc2Fucy1zZXJpZjtcbiAgZm9udC1zaXplOiAxZW07IH1cblxuLnVpLXdpZGdldCAudWktd2lkZ2V0IHtcbiAgZm9udC1zaXplOiAxZW07IH1cblxuLnVpLXdpZGdldCBpbnB1dCxcbi51aS13aWRnZXQgc2VsZWN0LFxuLnVpLXdpZGdldCB0ZXh0YXJlYSxcbi51aS13aWRnZXQgYnV0dG9uIHtcbiAgZm9udC1mYW1pbHk6IEFyaWFsLEhlbHZldGljYSxzYW5zLXNlcmlmO1xuICBmb250LXNpemU6IDFlbTsgfVxuXG4udWktd2lkZ2V0LnVpLXdpZGdldC1jb250ZW50IHtcbiAgYm9yZGVyOiAxcHggc29saWQgI2M1YzVjNTsgfVxuXG4udWktd2lkZ2V0LWNvbnRlbnQge1xuICBib3JkZXI6IDFweCBzb2xpZCAjZGRkZGRkO1xuICBiYWNrZ3JvdW5kOiAjZmZmZmZmO1xuICBjb2xvcjogIzMzMzMzMzsgfVxuXG4udWktd2lkZ2V0LWNvbnRlbnQgYSB7XG4gIGNvbG9yOiAjMzMzMzMzOyB9XG5cbi51aS13aWRnZXQtaGVhZGVyIHtcbiAgYm9yZGVyOiAxcHggc29saWQgI2RkZGRkZDtcbiAgYmFja2dyb3VuZDogI2U5ZTllOTtcbiAgY29sb3I6ICMzMzMzMzM7XG4gIGZvbnQtd2VpZ2h0OiBib2xkOyB9XG5cbi51aS13aWRnZXQtaGVhZGVyIGEge1xuICBjb2xvcjogIzMzMzMzMzsgfVxuXG4vKiBJbnRlcmFjdGlvbiBzdGF0ZXNcbi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuLnVpLXN0YXRlLWRlZmF1bHQsXG4udWktd2lkZ2V0LWNvbnRlbnQgLnVpLXN0YXRlLWRlZmF1bHQsXG4udWktd2lkZ2V0LWhlYWRlciAudWktc3RhdGUtZGVmYXVsdCxcbi51aS1idXR0b24sXG5odG1sIC51aS1idXR0b24udWktc3RhdGUtZGlzYWJsZWQ6aG92ZXIsXG5odG1sIC51aS1idXR0b24udWktc3RhdGUtZGlzYWJsZWQ6YWN0aXZlIHtcbiAgYm9yZGVyOiAxcHggc29saWQgI2M1YzVjNTtcbiAgYmFja2dyb3VuZDogI2Y2ZjZmNjtcbiAgZm9udC13ZWlnaHQ6IG5vcm1hbDtcbiAgY29sb3I6ICM0NTQ1NDU7IH1cblxuLnVpLXN0YXRlLWRlZmF1bHQgYSxcbi51aS1zdGF0ZS1kZWZhdWx0IGE6bGluayxcbi51aS1zdGF0ZS1kZWZhdWx0IGE6dmlzaXRlZCxcbmEudWktYnV0dG9uLFxuYTpsaW5rLnVpLWJ1dHRvbixcbmE6dmlzaXRlZC51aS1idXR0b24sXG4udWktYnV0dG9uIHtcbiAgY29sb3I6ICM0NTQ1NDU7XG4gIHRleHQtZGVjb3JhdGlvbjogbm9uZTsgfVxuXG4udWktc3RhdGUtaG92ZXIsXG4udWktd2lkZ2V0LWNvbnRlbnQgLnVpLXN0YXRlLWhvdmVyLFxuLnVpLXdpZGdldC1oZWFkZXIgLnVpLXN0YXRlLWhvdmVyLFxuLnVpLXN0YXRlLWZvY3VzLFxuLnVpLXdpZGdldC1jb250ZW50IC51aS1zdGF0ZS1mb2N1cyxcbi51aS13aWRnZXQtaGVhZGVyIC51aS1zdGF0ZS1mb2N1cyxcbi51aS1idXR0b246aG92ZXIsXG4udWktYnV0dG9uOmZvY3VzIHtcbiAgYm9yZGVyOiAxcHggc29saWQgI2NjY2NjYztcbiAgYmFja2dyb3VuZDogI2VkZWRlZDtcbiAgZm9udC13ZWlnaHQ6IG5vcm1hbDtcbiAgY29sb3I6ICMyYjJiMmI7IH1cblxuLnVpLXN0YXRlLWhvdmVyIGEsXG4udWktc3RhdGUtaG92ZXIgYTpob3Zlcixcbi51aS1zdGF0ZS1ob3ZlciBhOmxpbmssXG4udWktc3RhdGUtaG92ZXIgYTp2aXNpdGVkLFxuLnVpLXN0YXRlLWZvY3VzIGEsXG4udWktc3RhdGUtZm9jdXMgYTpob3Zlcixcbi51aS1zdGF0ZS1mb2N1cyBhOmxpbmssXG4udWktc3RhdGUtZm9jdXMgYTp2aXNpdGVkLFxuYS51aS1idXR0b246aG92ZXIsXG5hLnVpLWJ1dHRvbjpmb2N1cyB7XG4gIGNvbG9yOiAjMmIyYjJiO1xuICB0ZXh0LWRlY29yYXRpb246IG5vbmU7IH1cblxuLnVpLXZpc3VhbC1mb2N1cyB7XG4gIGJveC1zaGFkb3c6IDAgMCAzcHggMXB4ICM1ZTllZDY7IH1cblxuLnVpLXN0YXRlLWFjdGl2ZSxcbi51aS13aWRnZXQtY29udGVudCAudWktc3RhdGUtYWN0aXZlLFxuLnVpLXdpZGdldC1oZWFkZXIgLnVpLXN0YXRlLWFjdGl2ZSxcbmEudWktYnV0dG9uOmFjdGl2ZSxcbi51aS1idXR0b246YWN0aXZlLFxuLnVpLWJ1dHRvbi51aS1zdGF0ZS1hY3RpdmU6aG92ZXIge1xuICBib3JkZXI6IDFweCBzb2xpZCAjMDAzZWZmO1xuICBiYWNrZ3JvdW5kOiAjMDA3ZmZmO1xuICBmb250LXdlaWdodDogbm9ybWFsO1xuICBjb2xvcjogI2ZmZmZmZjsgfVxuXG4udWktaWNvbi1iYWNrZ3JvdW5kLFxuLnVpLXN0YXRlLWFjdGl2ZSAudWktaWNvbi1iYWNrZ3JvdW5kIHtcbiAgYm9yZGVyOiAjMDAzZWZmO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmZmZmOyB9XG5cbi51aS1zdGF0ZS1hY3RpdmUgYSxcbi51aS1zdGF0ZS1hY3RpdmUgYTpsaW5rLFxuLnVpLXN0YXRlLWFjdGl2ZSBhOnZpc2l0ZWQge1xuICBjb2xvcjogI2ZmZmZmZjtcbiAgdGV4dC1kZWNvcmF0aW9uOiBub25lOyB9XG5cbi8qIEludGVyYWN0aW9uIEN1ZXNcbi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuLnVpLXN0YXRlLWhpZ2hsaWdodCxcbi51aS13aWRnZXQtY29udGVudCAudWktc3RhdGUtaGlnaGxpZ2h0LFxuLnVpLXdpZGdldC1oZWFkZXIgLnVpLXN0YXRlLWhpZ2hsaWdodCB7XG4gIGJvcmRlcjogMXB4IHNvbGlkICNkYWQ1NWU7XG4gIGJhY2tncm91bmQ6ICNmZmZhOTA7XG4gIGNvbG9yOiAjNzc3NjIwOyB9XG5cbi51aS1zdGF0ZS1jaGVja2VkIHtcbiAgYm9yZGVyOiAxcHggc29saWQgI2RhZDU1ZTtcbiAgYmFja2dyb3VuZDogI2ZmZmE5MDsgfVxuXG4udWktc3RhdGUtaGlnaGxpZ2h0IGEsXG4udWktd2lkZ2V0LWNvbnRlbnQgLnVpLXN0YXRlLWhpZ2hsaWdodCBhLFxuLnVpLXdpZGdldC1oZWFkZXIgLnVpLXN0YXRlLWhpZ2hsaWdodCBhIHtcbiAgY29sb3I6ICM3Nzc2MjA7IH1cblxuLnVpLXN0YXRlLWVycm9yLFxuLnVpLXdpZGdldC1jb250ZW50IC51aS1zdGF0ZS1lcnJvcixcbi51aS13aWRnZXQtaGVhZGVyIC51aS1zdGF0ZS1lcnJvciB7XG4gIGJvcmRlcjogMXB4IHNvbGlkICNmMWE4OTk7XG4gIGJhY2tncm91bmQ6ICNmZGRmZGY7XG4gIGNvbG9yOiAjNWYzZjNmOyB9XG5cbi51aS1zdGF0ZS1lcnJvciBhLFxuLnVpLXdpZGdldC1jb250ZW50IC51aS1zdGF0ZS1lcnJvciBhLFxuLnVpLXdpZGdldC1oZWFkZXIgLnVpLXN0YXRlLWVycm9yIGEge1xuICBjb2xvcjogIzVmM2YzZjsgfVxuXG4udWktc3RhdGUtZXJyb3ItdGV4dCxcbi51aS13aWRnZXQtY29udGVudCAudWktc3RhdGUtZXJyb3ItdGV4dCxcbi51aS13aWRnZXQtaGVhZGVyIC51aS1zdGF0ZS1lcnJvci10ZXh0IHtcbiAgY29sb3I6ICM1ZjNmM2Y7IH1cblxuLnVpLXByaW9yaXR5LXByaW1hcnksXG4udWktd2lkZ2V0LWNvbnRlbnQgLnVpLXByaW9yaXR5LXByaW1hcnksXG4udWktd2lkZ2V0LWhlYWRlciAudWktcHJpb3JpdHktcHJpbWFyeSB7XG4gIGZvbnQtd2VpZ2h0OiBib2xkOyB9XG5cbi51aS1wcmlvcml0eS1zZWNvbmRhcnksXG4udWktd2lkZ2V0LWNvbnRlbnQgLnVpLXByaW9yaXR5LXNlY29uZGFyeSxcbi51aS13aWRnZXQtaGVhZGVyIC51aS1wcmlvcml0eS1zZWNvbmRhcnkge1xuICBvcGFjaXR5OiAuNztcbiAgZmlsdGVyOiBBbHBoYShPcGFjaXR5PTcwKTtcbiAgLyogc3VwcG9ydDogSUU4ICovXG4gIGZvbnQtd2VpZ2h0OiBub3JtYWw7IH1cblxuLnVpLXN0YXRlLWRpc2FibGVkLFxuLnVpLXdpZGdldC1jb250ZW50IC51aS1zdGF0ZS1kaXNhYmxlZCxcbi51aS13aWRnZXQtaGVhZGVyIC51aS1zdGF0ZS1kaXNhYmxlZCB7XG4gIG9wYWNpdHk6IC4zNTtcbiAgZmlsdGVyOiBBbHBoYShPcGFjaXR5PTM1KTtcbiAgLyogc3VwcG9ydDogSUU4ICovXG4gIGJhY2tncm91bmQtaW1hZ2U6IG5vbmU7IH1cblxuLnVpLXN0YXRlLWRpc2FibGVkIC51aS1pY29uIHtcbiAgZmlsdGVyOiBBbHBoYShPcGFjaXR5PTM1KTtcbiAgLyogc3VwcG9ydDogSUU4IC0gU2VlICM2MDU5ICovIH1cblxuLyogSWNvbnNcbi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuLyogc3RhdGVzIGFuZCBpbWFnZXMgKi9cbi51aS1pY29uIHtcbiAgd2lkdGg6IDE2cHg7XG4gIGhlaWdodDogMTZweDsgfVxuXG4udWktaWNvbixcbi51aS13aWRnZXQtY29udGVudCAudWktaWNvbiB7XG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcImltYWdlcy91aS1pY29uc180NDQ0NDRfMjU2eDI0MC5wbmdcIik7IH1cblxuLnVpLXdpZGdldC1oZWFkZXIgLnVpLWljb24ge1xuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXCJpbWFnZXMvdWktaWNvbnNfNDQ0NDQ0XzI1NngyNDAucG5nXCIpOyB9XG5cbi51aS1zdGF0ZS1ob3ZlciAudWktaWNvbixcbi51aS1zdGF0ZS1mb2N1cyAudWktaWNvbixcbi51aS1idXR0b246aG92ZXIgLnVpLWljb24sXG4udWktYnV0dG9uOmZvY3VzIC51aS1pY29uIHtcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFwiaW1hZ2VzL3VpLWljb25zXzU1NTU1NV8yNTZ4MjQwLnBuZ1wiKTsgfVxuXG4udWktc3RhdGUtYWN0aXZlIC51aS1pY29uLFxuLnVpLWJ1dHRvbjphY3RpdmUgLnVpLWljb24ge1xuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXCJpbWFnZXMvdWktaWNvbnNfZmZmZmZmXzI1NngyNDAucG5nXCIpOyB9XG5cbi51aS1zdGF0ZS1oaWdobGlnaHQgLnVpLWljb24sXG4udWktYnV0dG9uIC51aS1zdGF0ZS1oaWdobGlnaHQudWktaWNvbiB7XG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcImltYWdlcy91aS1pY29uc183Nzc2MjBfMjU2eDI0MC5wbmdcIik7IH1cblxuLnVpLXN0YXRlLWVycm9yIC51aS1pY29uLFxuLnVpLXN0YXRlLWVycm9yLXRleHQgLnVpLWljb24ge1xuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXCJpbWFnZXMvdWktaWNvbnNfY2MwMDAwXzI1NngyNDAucG5nXCIpOyB9XG5cbi51aS1idXR0b24gLnVpLWljb24ge1xuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXCJpbWFnZXMvdWktaWNvbnNfNzc3Nzc3XzI1NngyNDAucG5nXCIpOyB9XG5cbi8qIHBvc2l0aW9uaW5nICovXG4udWktaWNvbi1ibGFuayB7XG4gIGJhY2tncm91bmQtcG9zaXRpb246IDE2cHggMTZweDsgfVxuXG4udWktaWNvbi1jYXJldC0xLW4ge1xuICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwIDA7IH1cblxuLnVpLWljb24tY2FyZXQtMS1uZSB7XG4gIGJhY2tncm91bmQtcG9zaXRpb246IC0xNnB4IDA7IH1cblxuLnVpLWljb24tY2FyZXQtMS1lIHtcbiAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTMycHggMDsgfVxuXG4udWktaWNvbi1jYXJldC0xLXNlIHtcbiAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTQ4cHggMDsgfVxuXG4udWktaWNvbi1jYXJldC0xLXMge1xuICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtNjVweCAwOyB9XG5cbi51aS1pY29uLWNhcmV0LTEtc3cge1xuICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtODBweCAwOyB9XG5cbi51aS1pY29uLWNhcmV0LTEtdyB7XG4gIGJhY2tncm91bmQtcG9zaXRpb246IC05NnB4IDA7IH1cblxuLnVpLWljb24tY2FyZXQtMS1udyB7XG4gIGJhY2tncm91bmQtcG9zaXRpb246IC0xMTJweCAwOyB9XG5cbi51aS1pY29uLWNhcmV0LTItbi1zIHtcbiAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTEyOHB4IDA7IH1cblxuLnVpLWljb24tY2FyZXQtMi1lLXcge1xuICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTQ0cHggMDsgfVxuXG4udWktaWNvbi10cmlhbmdsZS0xLW4ge1xuICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwIC0xNnB4OyB9XG5cbi51aS1pY29uLXRyaWFuZ2xlLTEtbmUge1xuICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTZweCAtMTZweDsgfVxuXG4udWktaWNvbi10cmlhbmdsZS0xLWUge1xuICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMzJweCAtMTZweDsgfVxuXG4udWktaWNvbi10cmlhbmdsZS0xLXNlIHtcbiAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTQ4cHggLTE2cHg7IH1cblxuLnVpLWljb24tdHJpYW5nbGUtMS1zIHtcbiAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTY1cHggLTE2cHg7IH1cblxuLnVpLWljb24tdHJpYW5nbGUtMS1zdyB7XG4gIGJhY2tncm91bmQtcG9zaXRpb246IC04MHB4IC0xNnB4OyB9XG5cbi51aS1pY29uLXRyaWFuZ2xlLTEtdyB7XG4gIGJhY2tncm91bmQtcG9zaXRpb246IC05NnB4IC0xNnB4OyB9XG5cbi51aS1pY29uLXRyaWFuZ2xlLTEtbncge1xuICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTEycHggLTE2cHg7IH1cblxuLnVpLWljb24tdHJpYW5nbGUtMi1uLXMge1xuICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTI4cHggLTE2cHg7IH1cblxuLnVpLWljb24tdHJpYW5nbGUtMi1lLXcge1xuICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTQ0cHggLTE2cHg7IH1cblxuLnVpLWljb24tYXJyb3ctMS1uIHtcbiAgYmFja2dyb3VuZC1wb3NpdGlvbjogMCAtMzJweDsgfVxuXG4udWktaWNvbi1hcnJvdy0xLW5lIHtcbiAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTE2cHggLTMycHg7IH1cblxuLnVpLWljb24tYXJyb3ctMS1lIHtcbiAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTMycHggLTMycHg7IH1cblxuLnVpLWljb24tYXJyb3ctMS1zZSB7XG4gIGJhY2tncm91bmQtcG9zaXRpb246IC00OHB4IC0zMnB4OyB9XG5cbi51aS1pY29uLWFycm93LTEtcyB7XG4gIGJhY2tncm91bmQtcG9zaXRpb246IC02NXB4IC0zMnB4OyB9XG5cbi51aS1pY29uLWFycm93LTEtc3cge1xuICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtODBweCAtMzJweDsgfVxuXG4udWktaWNvbi1hcnJvdy0xLXcge1xuICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtOTZweCAtMzJweDsgfVxuXG4udWktaWNvbi1hcnJvdy0xLW53IHtcbiAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTExMnB4IC0zMnB4OyB9XG5cbi51aS1pY29uLWFycm93LTItbi1zIHtcbiAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTEyOHB4IC0zMnB4OyB9XG5cbi51aS1pY29uLWFycm93LTItbmUtc3cge1xuICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTQ0cHggLTMycHg7IH1cblxuLnVpLWljb24tYXJyb3ctMi1lLXcge1xuICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTYwcHggLTMycHg7IH1cblxuLnVpLWljb24tYXJyb3ctMi1zZS1udyB7XG4gIGJhY2tncm91bmQtcG9zaXRpb246IC0xNzZweCAtMzJweDsgfVxuXG4udWktaWNvbi1hcnJvd3N0b3AtMS1uIHtcbiAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTE5MnB4IC0zMnB4OyB9XG5cbi51aS1pY29uLWFycm93c3RvcC0xLWUge1xuICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMjA4cHggLTMycHg7IH1cblxuLnVpLWljb24tYXJyb3dzdG9wLTEtcyB7XG4gIGJhY2tncm91bmQtcG9zaXRpb246IC0yMjRweCAtMzJweDsgfVxuXG4udWktaWNvbi1hcnJvd3N0b3AtMS13IHtcbiAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTI0MHB4IC0zMnB4OyB9XG5cbi51aS1pY29uLWFycm93dGhpY2stMS1uIHtcbiAgYmFja2dyb3VuZC1wb3NpdGlvbjogMXB4IC00OHB4OyB9XG5cbi51aS1pY29uLWFycm93dGhpY2stMS1uZSB7XG4gIGJhY2tncm91bmQtcG9zaXRpb246IC0xNnB4IC00OHB4OyB9XG5cbi51aS1pY29uLWFycm93dGhpY2stMS1lIHtcbiAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTMycHggLTQ4cHg7IH1cblxuLnVpLWljb24tYXJyb3d0aGljay0xLXNlIHtcbiAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTQ4cHggLTQ4cHg7IH1cblxuLnVpLWljb24tYXJyb3d0aGljay0xLXMge1xuICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtNjRweCAtNDhweDsgfVxuXG4udWktaWNvbi1hcnJvd3RoaWNrLTEtc3cge1xuICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtODBweCAtNDhweDsgfVxuXG4udWktaWNvbi1hcnJvd3RoaWNrLTEtdyB7XG4gIGJhY2tncm91bmQtcG9zaXRpb246IC05NnB4IC00OHB4OyB9XG5cbi51aS1pY29uLWFycm93dGhpY2stMS1udyB7XG4gIGJhY2tncm91bmQtcG9zaXRpb246IC0xMTJweCAtNDhweDsgfVxuXG4udWktaWNvbi1hcnJvd3RoaWNrLTItbi1zIHtcbiAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTEyOHB4IC00OHB4OyB9XG5cbi51aS1pY29uLWFycm93dGhpY2stMi1uZS1zdyB7XG4gIGJhY2tncm91bmQtcG9zaXRpb246IC0xNDRweCAtNDhweDsgfVxuXG4udWktaWNvbi1hcnJvd3RoaWNrLTItZS13IHtcbiAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTE2MHB4IC00OHB4OyB9XG5cbi51aS1pY29uLWFycm93dGhpY2stMi1zZS1udyB7XG4gIGJhY2tncm91bmQtcG9zaXRpb246IC0xNzZweCAtNDhweDsgfVxuXG4udWktaWNvbi1hcnJvd3RoaWNrc3RvcC0xLW4ge1xuICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTkycHggLTQ4cHg7IH1cblxuLnVpLWljb24tYXJyb3d0aGlja3N0b3AtMS1lIHtcbiAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTIwOHB4IC00OHB4OyB9XG5cbi51aS1pY29uLWFycm93dGhpY2tzdG9wLTEtcyB7XG4gIGJhY2tncm91bmQtcG9zaXRpb246IC0yMjRweCAtNDhweDsgfVxuXG4udWktaWNvbi1hcnJvd3RoaWNrc3RvcC0xLXcge1xuICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMjQwcHggLTQ4cHg7IH1cblxuLnVpLWljb24tYXJyb3dyZXR1cm50aGljay0xLXcge1xuICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwIC02NHB4OyB9XG5cbi51aS1pY29uLWFycm93cmV0dXJudGhpY2stMS1uIHtcbiAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTE2cHggLTY0cHg7IH1cblxuLnVpLWljb24tYXJyb3dyZXR1cm50aGljay0xLWUge1xuICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMzJweCAtNjRweDsgfVxuXG4udWktaWNvbi1hcnJvd3JldHVybnRoaWNrLTEtcyB7XG4gIGJhY2tncm91bmQtcG9zaXRpb246IC00OHB4IC02NHB4OyB9XG5cbi51aS1pY29uLWFycm93cmV0dXJuLTEtdyB7XG4gIGJhY2tncm91bmQtcG9zaXRpb246IC02NHB4IC02NHB4OyB9XG5cbi51aS1pY29uLWFycm93cmV0dXJuLTEtbiB7XG4gIGJhY2tncm91bmQtcG9zaXRpb246IC04MHB4IC02NHB4OyB9XG5cbi51aS1pY29uLWFycm93cmV0dXJuLTEtZSB7XG4gIGJhY2tncm91bmQtcG9zaXRpb246IC05NnB4IC02NHB4OyB9XG5cbi51aS1pY29uLWFycm93cmV0dXJuLTEtcyB7XG4gIGJhY2tncm91bmQtcG9zaXRpb246IC0xMTJweCAtNjRweDsgfVxuXG4udWktaWNvbi1hcnJvd3JlZnJlc2gtMS13IHtcbiAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTEyOHB4IC02NHB4OyB9XG5cbi51aS1pY29uLWFycm93cmVmcmVzaC0xLW4ge1xuICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTQ0cHggLTY0cHg7IH1cblxuLnVpLWljb24tYXJyb3dyZWZyZXNoLTEtZSB7XG4gIGJhY2tncm91bmQtcG9zaXRpb246IC0xNjBweCAtNjRweDsgfVxuXG4udWktaWNvbi1hcnJvd3JlZnJlc2gtMS1zIHtcbiAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTE3NnB4IC02NHB4OyB9XG5cbi51aS1pY29uLWFycm93LTQge1xuICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwIC04MHB4OyB9XG5cbi51aS1pY29uLWFycm93LTQtZGlhZyB7XG4gIGJhY2tncm91bmQtcG9zaXRpb246IC0xNnB4IC04MHB4OyB9XG5cbi51aS1pY29uLWV4dGxpbmsge1xuICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMzJweCAtODBweDsgfVxuXG4udWktaWNvbi1uZXd3aW4ge1xuICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtNDhweCAtODBweDsgfVxuXG4udWktaWNvbi1yZWZyZXNoIHtcbiAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTY0cHggLTgwcHg7IH1cblxuLnVpLWljb24tc2h1ZmZsZSB7XG4gIGJhY2tncm91bmQtcG9zaXRpb246IC04MHB4IC04MHB4OyB9XG5cbi51aS1pY29uLXRyYW5zZmVyLWUtdyB7XG4gIGJhY2tncm91bmQtcG9zaXRpb246IC05NnB4IC04MHB4OyB9XG5cbi51aS1pY29uLXRyYW5zZmVydGhpY2stZS13IHtcbiAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTExMnB4IC04MHB4OyB9XG5cbi51aS1pY29uLWZvbGRlci1jb2xsYXBzZWQge1xuICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwIC05NnB4OyB9XG5cbi51aS1pY29uLWZvbGRlci1vcGVuIHtcbiAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTE2cHggLTk2cHg7IH1cblxuLnVpLWljb24tZG9jdW1lbnQge1xuICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMzJweCAtOTZweDsgfVxuXG4udWktaWNvbi1kb2N1bWVudC1iIHtcbiAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTQ4cHggLTk2cHg7IH1cblxuLnVpLWljb24tbm90ZSB7XG4gIGJhY2tncm91bmQtcG9zaXRpb246IC02NHB4IC05NnB4OyB9XG5cbi51aS1pY29uLW1haWwtY2xvc2VkIHtcbiAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTgwcHggLTk2cHg7IH1cblxuLnVpLWljb24tbWFpbC1vcGVuIHtcbiAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTk2cHggLTk2cHg7IH1cblxuLnVpLWljb24tc3VpdGNhc2Uge1xuICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTEycHggLTk2cHg7IH1cblxuLnVpLWljb24tY29tbWVudCB7XG4gIGJhY2tncm91bmQtcG9zaXRpb246IC0xMjhweCAtOTZweDsgfVxuXG4udWktaWNvbi1wZXJzb24ge1xuICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTQ0cHggLTk2cHg7IH1cblxuLnVpLWljb24tcHJpbnQge1xuICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTYwcHggLTk2cHg7IH1cblxuLnVpLWljb24tdHJhc2gge1xuICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTc2cHggLTk2cHg7IH1cblxuLnVpLWljb24tbG9ja2VkIHtcbiAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTE5MnB4IC05NnB4OyB9XG5cbi51aS1pY29uLXVubG9ja2VkIHtcbiAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTIwOHB4IC05NnB4OyB9XG5cbi51aS1pY29uLWJvb2ttYXJrIHtcbiAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTIyNHB4IC05NnB4OyB9XG5cbi51aS1pY29uLXRhZyB7XG4gIGJhY2tncm91bmQtcG9zaXRpb246IC0yNDBweCAtOTZweDsgfVxuXG4udWktaWNvbi1ob21lIHtcbiAgYmFja2dyb3VuZC1wb3NpdGlvbjogMCAtMTEycHg7IH1cblxuLnVpLWljb24tZmxhZyB7XG4gIGJhY2tncm91bmQtcG9zaXRpb246IC0xNnB4IC0xMTJweDsgfVxuXG4udWktaWNvbi1jYWxlbmRhciB7XG4gIGJhY2tncm91bmQtcG9zaXRpb246IC0zMnB4IC0xMTJweDsgfVxuXG4udWktaWNvbi1jYXJ0IHtcbiAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTQ4cHggLTExMnB4OyB9XG5cbi51aS1pY29uLXBlbmNpbCB7XG4gIGJhY2tncm91bmQtcG9zaXRpb246IC02NHB4IC0xMTJweDsgfVxuXG4udWktaWNvbi1jbG9jayB7XG4gIGJhY2tncm91bmQtcG9zaXRpb246IC04MHB4IC0xMTJweDsgfVxuXG4udWktaWNvbi1kaXNrIHtcbiAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTk2cHggLTExMnB4OyB9XG5cbi51aS1pY29uLWNhbGN1bGF0b3Ige1xuICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTEycHggLTExMnB4OyB9XG5cbi51aS1pY29uLXpvb21pbiB7XG4gIGJhY2tncm91bmQtcG9zaXRpb246IC0xMjhweCAtMTEycHg7IH1cblxuLnVpLWljb24tem9vbW91dCB7XG4gIGJhY2tncm91bmQtcG9zaXRpb246IC0xNDRweCAtMTEycHg7IH1cblxuLnVpLWljb24tc2VhcmNoIHtcbiAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTE2MHB4IC0xMTJweDsgfVxuXG4udWktaWNvbi13cmVuY2gge1xuICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTc2cHggLTExMnB4OyB9XG5cbi51aS1pY29uLWdlYXIge1xuICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTkycHggLTExMnB4OyB9XG5cbi51aS1pY29uLWhlYXJ0IHtcbiAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTIwOHB4IC0xMTJweDsgfVxuXG4udWktaWNvbi1zdGFyIHtcbiAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTIyNHB4IC0xMTJweDsgfVxuXG4udWktaWNvbi1saW5rIHtcbiAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTI0MHB4IC0xMTJweDsgfVxuXG4udWktaWNvbi1jYW5jZWwge1xuICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwIC0xMjhweDsgfVxuXG4udWktaWNvbi1wbHVzIHtcbiAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTE2cHggLTEyOHB4OyB9XG5cbi51aS1pY29uLXBsdXN0aGljayB7XG4gIGJhY2tncm91bmQtcG9zaXRpb246IC0zMnB4IC0xMjhweDsgfVxuXG4udWktaWNvbi1taW51cyB7XG4gIGJhY2tncm91bmQtcG9zaXRpb246IC00OHB4IC0xMjhweDsgfVxuXG4udWktaWNvbi1taW51c3RoaWNrIHtcbiAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTY0cHggLTEyOHB4OyB9XG5cbi51aS1pY29uLWNsb3NlIHtcbiAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTgwcHggLTEyOHB4OyB9XG5cbi51aS1pY29uLWNsb3NldGhpY2sge1xuICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtOTZweCAtMTI4cHg7IH1cblxuLnVpLWljb24ta2V5IHtcbiAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTExMnB4IC0xMjhweDsgfVxuXG4udWktaWNvbi1saWdodGJ1bGIge1xuICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTI4cHggLTEyOHB4OyB9XG5cbi51aS1pY29uLXNjaXNzb3JzIHtcbiAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTE0NHB4IC0xMjhweDsgfVxuXG4udWktaWNvbi1jbGlwYm9hcmQge1xuICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTYwcHggLTEyOHB4OyB9XG5cbi51aS1pY29uLWNvcHkge1xuICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTc2cHggLTEyOHB4OyB9XG5cbi51aS1pY29uLWNvbnRhY3Qge1xuICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTkycHggLTEyOHB4OyB9XG5cbi51aS1pY29uLWltYWdlIHtcbiAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTIwOHB4IC0xMjhweDsgfVxuXG4udWktaWNvbi12aWRlbyB7XG4gIGJhY2tncm91bmQtcG9zaXRpb246IC0yMjRweCAtMTI4cHg7IH1cblxuLnVpLWljb24tc2NyaXB0IHtcbiAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTI0MHB4IC0xMjhweDsgfVxuXG4udWktaWNvbi1hbGVydCB7XG4gIGJhY2tncm91bmQtcG9zaXRpb246IDAgLTE0NHB4OyB9XG5cbi51aS1pY29uLWluZm8ge1xuICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTZweCAtMTQ0cHg7IH1cblxuLnVpLWljb24tbm90aWNlIHtcbiAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTMycHggLTE0NHB4OyB9XG5cbi51aS1pY29uLWhlbHAge1xuICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtNDhweCAtMTQ0cHg7IH1cblxuLnVpLWljb24tY2hlY2sge1xuICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtNjRweCAtMTQ0cHg7IH1cblxuLnVpLWljb24tYnVsbGV0IHtcbiAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTgwcHggLTE0NHB4OyB9XG5cbi51aS1pY29uLXJhZGlvLW9uIHtcbiAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTk2cHggLTE0NHB4OyB9XG5cbi51aS1pY29uLXJhZGlvLW9mZiB7XG4gIGJhY2tncm91bmQtcG9zaXRpb246IC0xMTJweCAtMTQ0cHg7IH1cblxuLnVpLWljb24tcGluLXcge1xuICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTI4cHggLTE0NHB4OyB9XG5cbi51aS1pY29uLXBpbi1zIHtcbiAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTE0NHB4IC0xNDRweDsgfVxuXG4udWktaWNvbi1wbGF5IHtcbiAgYmFja2dyb3VuZC1wb3NpdGlvbjogMCAtMTYwcHg7IH1cblxuLnVpLWljb24tcGF1c2Uge1xuICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTZweCAtMTYwcHg7IH1cblxuLnVpLWljb24tc2Vlay1uZXh0IHtcbiAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTMycHggLTE2MHB4OyB9XG5cbi51aS1pY29uLXNlZWstcHJldiB7XG4gIGJhY2tncm91bmQtcG9zaXRpb246IC00OHB4IC0xNjBweDsgfVxuXG4udWktaWNvbi1zZWVrLWVuZCB7XG4gIGJhY2tncm91bmQtcG9zaXRpb246IC02NHB4IC0xNjBweDsgfVxuXG4udWktaWNvbi1zZWVrLXN0YXJ0IHtcbiAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTgwcHggLTE2MHB4OyB9XG5cbi8qIHVpLWljb24tc2Vlay1maXJzdCBpcyBkZXByZWNhdGVkLCB1c2UgdWktaWNvbi1zZWVrLXN0YXJ0IGluc3RlYWQgKi9cbi51aS1pY29uLXNlZWstZmlyc3Qge1xuICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtODBweCAtMTYwcHg7IH1cblxuLnVpLWljb24tc3RvcCB7XG4gIGJhY2tncm91bmQtcG9zaXRpb246IC05NnB4IC0xNjBweDsgfVxuXG4udWktaWNvbi1lamVjdCB7XG4gIGJhY2tncm91bmQtcG9zaXRpb246IC0xMTJweCAtMTYwcHg7IH1cblxuLnVpLWljb24tdm9sdW1lLW9mZiB7XG4gIGJhY2tncm91bmQtcG9zaXRpb246IC0xMjhweCAtMTYwcHg7IH1cblxuLnVpLWljb24tdm9sdW1lLW9uIHtcbiAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTE0NHB4IC0xNjBweDsgfVxuXG4udWktaWNvbi1wb3dlciB7XG4gIGJhY2tncm91bmQtcG9zaXRpb246IDAgLTE3NnB4OyB9XG5cbi51aS1pY29uLXNpZ25hbC1kaWFnIHtcbiAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTE2cHggLTE3NnB4OyB9XG5cbi51aS1pY29uLXNpZ25hbCB7XG4gIGJhY2tncm91bmQtcG9zaXRpb246IC0zMnB4IC0xNzZweDsgfVxuXG4udWktaWNvbi1iYXR0ZXJ5LTAge1xuICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtNDhweCAtMTc2cHg7IH1cblxuLnVpLWljb24tYmF0dGVyeS0xIHtcbiAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTY0cHggLTE3NnB4OyB9XG5cbi51aS1pY29uLWJhdHRlcnktMiB7XG4gIGJhY2tncm91bmQtcG9zaXRpb246IC04MHB4IC0xNzZweDsgfVxuXG4udWktaWNvbi1iYXR0ZXJ5LTMge1xuICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtOTZweCAtMTc2cHg7IH1cblxuLnVpLWljb24tY2lyY2xlLXBsdXMge1xuICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwIC0xOTJweDsgfVxuXG4udWktaWNvbi1jaXJjbGUtbWludXMge1xuICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTZweCAtMTkycHg7IH1cblxuLnVpLWljb24tY2lyY2xlLWNsb3NlIHtcbiAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTMycHggLTE5MnB4OyB9XG5cbi51aS1pY29uLWNpcmNsZS10cmlhbmdsZS1lIHtcbiAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTQ4cHggLTE5MnB4OyB9XG5cbi51aS1pY29uLWNpcmNsZS10cmlhbmdsZS1zIHtcbiAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTY0cHggLTE5MnB4OyB9XG5cbi51aS1pY29uLWNpcmNsZS10cmlhbmdsZS13IHtcbiAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTgwcHggLTE5MnB4OyB9XG5cbi51aS1pY29uLWNpcmNsZS10cmlhbmdsZS1uIHtcbiAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTk2cHggLTE5MnB4OyB9XG5cbi51aS1pY29uLWNpcmNsZS1hcnJvdy1lIHtcbiAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTExMnB4IC0xOTJweDsgfVxuXG4udWktaWNvbi1jaXJjbGUtYXJyb3ctcyB7XG4gIGJhY2tncm91bmQtcG9zaXRpb246IC0xMjhweCAtMTkycHg7IH1cblxuLnVpLWljb24tY2lyY2xlLWFycm93LXcge1xuICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTQ0cHggLTE5MnB4OyB9XG5cbi51aS1pY29uLWNpcmNsZS1hcnJvdy1uIHtcbiAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTE2MHB4IC0xOTJweDsgfVxuXG4udWktaWNvbi1jaXJjbGUtem9vbWluIHtcbiAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTE3NnB4IC0xOTJweDsgfVxuXG4udWktaWNvbi1jaXJjbGUtem9vbW91dCB7XG4gIGJhY2tncm91bmQtcG9zaXRpb246IC0xOTJweCAtMTkycHg7IH1cblxuLnVpLWljb24tY2lyY2xlLWNoZWNrIHtcbiAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTIwOHB4IC0xOTJweDsgfVxuXG4udWktaWNvbi1jaXJjbGVzbWFsbC1wbHVzIHtcbiAgYmFja2dyb3VuZC1wb3NpdGlvbjogMCAtMjA4cHg7IH1cblxuLnVpLWljb24tY2lyY2xlc21hbGwtbWludXMge1xuICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTZweCAtMjA4cHg7IH1cblxuLnVpLWljb24tY2lyY2xlc21hbGwtY2xvc2Uge1xuICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMzJweCAtMjA4cHg7IH1cblxuLnVpLWljb24tc3F1YXJlc21hbGwtcGx1cyB7XG4gIGJhY2tncm91bmQtcG9zaXRpb246IC00OHB4IC0yMDhweDsgfVxuXG4udWktaWNvbi1zcXVhcmVzbWFsbC1taW51cyB7XG4gIGJhY2tncm91bmQtcG9zaXRpb246IC02NHB4IC0yMDhweDsgfVxuXG4udWktaWNvbi1zcXVhcmVzbWFsbC1jbG9zZSB7XG4gIGJhY2tncm91bmQtcG9zaXRpb246IC04MHB4IC0yMDhweDsgfVxuXG4udWktaWNvbi1ncmlwLWRvdHRlZC12ZXJ0aWNhbCB7XG4gIGJhY2tncm91bmQtcG9zaXRpb246IDAgLTIyNHB4OyB9XG5cbi51aS1pY29uLWdyaXAtZG90dGVkLWhvcml6b250YWwge1xuICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTZweCAtMjI0cHg7IH1cblxuLnVpLWljb24tZ3JpcC1zb2xpZC12ZXJ0aWNhbCB7XG4gIGJhY2tncm91bmQtcG9zaXRpb246IC0zMnB4IC0yMjRweDsgfVxuXG4udWktaWNvbi1ncmlwLXNvbGlkLWhvcml6b250YWwge1xuICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtNDhweCAtMjI0cHg7IH1cblxuLnVpLWljb24tZ3JpcHNtYWxsLWRpYWdvbmFsLXNlIHtcbiAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTY0cHggLTIyNHB4OyB9XG5cbi51aS1pY29uLWdyaXAtZGlhZ29uYWwtc2Uge1xuICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtODBweCAtMjI0cHg7IH1cblxuLyogTWlzYyB2aXN1YWxzXG4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cbi8qIENvcm5lciByYWRpdXMgKi9cbi51aS1jb3JuZXItYWxsLFxuLnVpLWNvcm5lci10b3AsXG4udWktY29ybmVyLWxlZnQsXG4udWktY29ybmVyLXRsIHtcbiAgYm9yZGVyLXRvcC1sZWZ0LXJhZGl1czogM3B4OyB9XG5cbi51aS1jb3JuZXItYWxsLFxuLnVpLWNvcm5lci10b3AsXG4udWktY29ybmVyLXJpZ2h0LFxuLnVpLWNvcm5lci10ciB7XG4gIGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiAzcHg7IH1cblxuLnVpLWNvcm5lci1hbGwsXG4udWktY29ybmVyLWJvdHRvbSxcbi51aS1jb3JuZXItbGVmdCxcbi51aS1jb3JuZXItYmwge1xuICBib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOiAzcHg7IH1cblxuLnVpLWNvcm5lci1hbGwsXG4udWktY29ybmVyLWJvdHRvbSxcbi51aS1jb3JuZXItcmlnaHQsXG4udWktY29ybmVyLWJyIHtcbiAgYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6IDNweDsgfVxuXG4vKiBPdmVybGF5cyAqL1xuLnVpLXdpZGdldC1vdmVybGF5IHtcbiAgYmFja2dyb3VuZDogI2FhYWFhYTtcbiAgb3BhY2l0eTogLjM7XG4gIGZpbHRlcjogQWxwaGEoT3BhY2l0eT0zMCk7XG4gIC8qIHN1cHBvcnQ6IElFOCAqLyB9XG5cbi51aS13aWRnZXQtc2hhZG93IHtcbiAgLXdlYmtpdC1ib3gtc2hhZG93OiAwcHggMHB4IDVweCAjNjY2NjY2O1xuICBib3gtc2hhZG93OiAwcHggMHB4IDVweCAjNjY2NjY2OyB9XG5cbi5hbGVydCxcbi5kb2NzLWNvbnRhaW5lciBtYWluIC5hbGVydCB7XG4gIGJvcmRlci1yYWRpdXM6IDRweDtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICBwYWRkaW5nOiAyMHB4IDI4cHg7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgd2lkdGg6IDEwMCU7XG4gIGZvbnQtd2VpZ2h0OiA0MDA7XG4gIG1hcmdpbjogMCAwIDIwcHg7XG4gIGJhY2tncm91bmQ6IHJnYmEoMjUzLCAyMDAsIDY5LCAwLjEpO1xuICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDI1MywgMjAwLCA2OSwgMC4zKTtcbiAgY29sb3I6ICMzNTM5NDA7XG4gIGZvbnQtc2l6ZTogMTRweDtcbiAgLypcbiAgJjo6YmVmb3JlIHtcbiAgICBjb250ZW50OiAnXFxmMTM3JztcbiAgICBmb250LWZhbWlseTogJ0lvbmljb25zJztcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgbGVmdDogMjVweDtcbiAgICBmb250LXNpemU6IDMwcHg7XG4gICAgZm9udC13ZWlnaHQ6IDMwMDtcbiAgICBjb2xvcjogcmdiYSgyNTUsMjU1LDI1NSwuOSk7XG4gIH1cbiAgKi8gfVxuICAuYWxlcnQgYSxcbiAgLmFsZXJ0IGE6bm90KC5idG4pLFxuICAuZG9jcy1jb250YWluZXIgbWFpbiAuYWxlcnQgYSxcbiAgLmRvY3MtY29udGFpbmVyIG1haW4gLmFsZXJ0IGE6bm90KC5idG4pIHtcbiAgICBjb2xvcjogd2hpdGU7XG4gICAgb3BhY2l0eTogMTsgfVxuICAgIC5hbGVydCBhOmhvdmVyLFxuICAgIC5hbGVydCBhOm5vdCguYnRuKTpob3ZlcixcbiAgICAuZG9jcy1jb250YWluZXIgbWFpbiAuYWxlcnQgYTpob3ZlcixcbiAgICAuZG9jcy1jb250YWluZXIgbWFpbiAuYWxlcnQgYTpub3QoLmJ0bik6aG92ZXIge1xuICAgICAgY29sb3I6ICNmZmY7IH1cbiAgLmFsZXJ0LXN1Y2Nlc3MsXG4gIC5kb2NzLWNvbnRhaW5lciBtYWluIC5hbGVydC1zdWNjZXNzIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDMwLCAyMDksIDExOCwgMC4xKTtcbiAgICBib3JkZXItY29sb3I6IHJnYmEoMzAsIDIwOSwgMTE4LCAwLjMpOyB9XG5cbi5zaWRlLW5hdiB7XG4gIHBvc2l0aW9uOiBmaXhlZDtcbiAgYmFja2dyb3VuZDogI2Y5ZmFmYjtcbiAgb3ZlcmZsb3cteTogc2Nyb2xsO1xuICB0b3A6IDA7XG4gIGJvdHRvbTogMDtcbiAgei1pbmRleDogMTtcbiAgb3ZlcmZsb3cteTogLW1vei1zY3JvbGxiYXJzLW5vbmU7XG4gIC1tcy1vdmVyZmxvdy1zdHlsZTogLW1zLWF1dG9oaWRpbmctc2Nyb2xsYmFyO1xuICAtd2Via2l0LW92ZXJmbG93LXNjcm9sbGluZzogdG91Y2g7XG4gIC13ZWJraXQtdG91Y2gtY2FsbG91dDogbm9uZTtcbiAgdXNlci1zZWxlY3Q6IG5vbmU7XG4gIG92ZXJmbG93LXk6IHNjcm9sbDsgfVxuICAuc2lkZS1uYXY6Oi13ZWJraXQtc2Nyb2xsYmFyIHtcbiAgICBkaXNwbGF5OiBub25lO1xuICAgIHdpZHRoOiAwICFpbXBvcnRhbnQ7IH1cbiAgLnNpZGUtbmF2IC5iYWNrLXRvLW1haW4gYSB7XG4gICAgcGFkZGluZy10b3A6IDVweDtcbiAgICBib3JkZXI6IDFweCBzb2xpZCAjZTZlOWVlO1xuICAgIHBhZGRpbmc6IDEwcHggMTJweCAxM3B4O1xuICAgIG1hcmdpbi1yaWdodDogMjBweDtcbiAgICBtYXJnaW4tdG9wOiAtMTVweDtcbiAgICBib3JkZXItcmFkaXVzOiA0cHg7XG4gICAgbWFyZ2luLWJvdHRvbTogMTBweDtcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgdHJhbnNpdGlvbjogLjJzIGJvcmRlci1jb2xvciwgLjJzIGNvbG9yLCAuMnMgYmFja2dyb3VuZCwgLjJzIGJveC1zaGFkb3c7IH1cbiAgICAuc2lkZS1uYXYgLmJhY2stdG8tbWFpbiBhOjpiZWZvcmUge1xuICAgICAgZm9udC1mYW1pbHk6ICdJb25pY29ucyc7XG4gICAgICAtd2Via2l0LWZvbnQtc21vb3RoaW5nOiBhbnRpYWxpYXNlZDtcbiAgICAgIGNvbnRlbnQ6ICdcXGYzY2YnO1xuICAgICAgZm9udC1zaXplOiAxNnB4O1xuICAgICAgZm9udC13ZWlnaHQ6IDgwMDtcbiAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgIHBhZGRpbmctcmlnaHQ6IDVweDtcbiAgICAgIHRvcDogMnB4OyB9XG4gICAgLnNpZGUtbmF2IC5iYWNrLXRvLW1haW4gYTpob3ZlciB7XG4gICAgICBib3JkZXItY29sb3I6ICNERkUzRTg7XG4gICAgICBjb2xvcjogIzRhOGJmYztcbiAgICAgIGJveC1zaGFkb3c6IDAgMXB4IDJweCByZ2JhKDAsIDAsIDAsIDAuMDYpO1xuICAgICAgYmFja2dyb3VuZDogI2ZkZmRmZDsgfVxuICAgIC5zaWRlLW5hdiAuYmFjay10by1tYWluIGE6Zm9jdXM6OmFmdGVyIHtcbiAgICAgIGJvcmRlci1yaWdodC1jb2xvcjogdHJhbnNwYXJlbnQ7IH1cbiAgLnNpZGUtbmF2IC5mb3JtLWdyb3VwIHtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNlNmU5ZWU7XG4gICAgbWluLWhlaWdodDogNTRweDsgfVxuICAgIC5zaWRlLW5hdiAuZm9ybS1ncm91cC5zZWFyY2gge1xuICAgICAgcGFkZGluZzogMTBweCAyMHB4IDEwcHg7XG4gICAgICBtYXJnaW4tYm90dG9tOiAwOyB9XG4gICAgICAuc2lkZS1uYXYgLmZvcm0tZ3JvdXAuc2VhcmNoOmhvdmVyOjpiZWZvcmUge1xuICAgICAgICBjb2xvcjogI2E0YWJiNTsgfVxuICAgICAgLnNpZGUtbmF2IC5mb3JtLWdyb3VwLnNlYXJjaDo6YmVmb3JlIHtcbiAgICAgICAgZm9udC1mYW1pbHk6ICdJb25pY29ucyc7XG4gICAgICAgIGNvbnRlbnQ6ICdcXGY0YTUnO1xuICAgICAgICBmb250LXNpemU6IDE2cHg7XG4gICAgICAgIGZvbnQtd2VpZ2h0OiA4MDA7XG4gICAgICAgIGNvbG9yOiAjYmRjM2NjO1xuICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgIHRvcDogMTZweDtcbiAgICAgICAgbGVmdDogMzRweDtcbiAgICAgICAgdHJhbnNpdGlvbjogLjJzIGNvbG9yOyB9XG4gICAgICAuc2lkZS1uYXYgLmZvcm0tZ3JvdXAuc2VhcmNoIGlucHV0IHtcbiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgI2U2ZTllZTtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogMjBweDtcbiAgICAgICAgcGFkZGluZzogOHB4IDAgNnB4IDM1cHg7XG4gICAgICAgIGZvbnQtc2l6ZTogMTNweDtcbiAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDtcbiAgICAgICAgY29sb3I6ICNiZGMzY2M7XG4gICAgICAgIGJveC1zaGFkb3c6IG5vbmU7XG4gICAgICAgIHRyYW5zaXRpb246IC4ycyBib3JkZXItY29sb3IsIC4ycyBib3gtc2hhZG93OyB9XG4gICAgICAgIC5zaWRlLW5hdiAuZm9ybS1ncm91cC5zZWFyY2ggaW5wdXQ6Zm9jdXMsIC5zaWRlLW5hdiAuZm9ybS1ncm91cC5zZWFyY2ggaW5wdXQ6aG92ZXIge1xuICAgICAgICAgIGJveC1zaGFkb3c6IDAgMXB4IDJweCByZ2JhKDAsIDAsIDAsIDAuMSk7XG4gICAgICAgICAgYm9yZGVyLWNvbG9yOiAjNGE4YmZjOyB9XG4gICAgLnNpZGUtbmF2IC5mb3JtLWdyb3VwIHNlbGVjdCB7XG4gICAgICBwYWRkaW5nOiAxN3B4IDIwcHg7XG4gICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgYmFja2dyb3VuZDogbm9uZTtcbiAgICAgIGJvcmRlci1yYWRpdXM6IDA7XG4gICAgICBib3JkZXI6IDA7XG4gICAgICBvdXRsaW5lOiBub25lO1xuICAgICAgY29sb3I6ICM5ZGE1YjM7XG4gICAgICAtd2Via2l0LWFwcGVhcmFuY2U6IG5vbmU7XG4gICAgICAtbW96LWFwcGVhcmFuY2U6IG5vbmU7XG4gICAgICBhcHBlYXJhbmNlOiBub25lO1xuICAgICAgdHJhbnNpdGlvbjogLjJzIGJvcmRlci1jb2xvciwgLjJzIGNvbG9yLCAuMnMgYmFja2dyb3VuZCwgLjJzIGJveC1zaGFkb3c7IH1cbiAgICAgIC5zaWRlLW5hdiAuZm9ybS1ncm91cCBzZWxlY3Q6aG92ZXIge1xuICAgICAgICBib3JkZXItY29sb3I6ICM0YThiZmM7XG4gICAgICAgIGNvbG9yOiAjNGE4YmZjO1xuICAgICAgICBib3gtc2hhZG93OiAwIDFweCAycHggcmdiYSgwLCAwLCAwLCAwLjEpO1xuICAgICAgICBiYWNrZ3JvdW5kOiAjZmRmZGZkOyB9XG4gICAgLnNpZGUtbmF2IC5mb3JtLWdyb3VwOmhvdmVyIHtcbiAgICAgIHRyYW5zaXRpb246IC4ycyBib3JkZXItY29sb3I7IH1cbiAgICAgIC5zaWRlLW5hdiAuZm9ybS1ncm91cDpob3Zlcjo6YmVmb3JlIHtcbiAgICAgICAgY29sb3I6ICM0YThiZmM7IH1cbiAgICAuc2lkZS1uYXYgLmZvcm0tZ3JvdXAuYXBpLXNlbGVjdDo6YmVmb3JlIHtcbiAgICAgIGZvbnQtZmFtaWx5OiAnSW9uaWNvbnMnO1xuICAgICAgLXdlYmtpdC1mb250LXNtb290aGluZzogYW50aWFsaWFzZWQ7XG4gICAgICBjb250ZW50OiAnXFxmM2QwJztcbiAgICAgIGZvbnQtc2l6ZTogMTRweDtcbiAgICAgIGZvbnQtd2VpZ2h0OiA4MDA7XG4gICAgICBjb2xvcjogI2E0YWJiNTtcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgIHRvcDogMTdweDtcbiAgICAgIHJpZ2h0OiAyMHB4O1xuICAgICAgdHJhbnNpdGlvbjogLjJzIGNvbG9yOyB9XG4gIC5zaWRlLW5hdiA+IHVsLm5lc3RlZC1tZW51ID4gbGkgPiB1bCA+IGxpID4gYSB7XG4gICAgY29sb3I6ICM5ZGE1YjM7XG4gICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcbiAgICBmb250LXNpemU6IDEwcHg7XG4gICAgZm9udC13ZWlnaHQ6IDcwMDtcbiAgICBsZXR0ZXItc3BhY2luZzogMnB4O1xuICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgICBwYWRkaW5nOiAxMHB4IDA7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIGN1cnNvcjogcG9pbnRlcjsgfVxuICAuc2lkZS1uYXYgPiB1bCA+IC5hY3RpdmUgPiBhIHtcbiAgICBjb2xvcjogIzRmNTM1ODsgfVxuICAuc2lkZS1uYXYgdWwge1xuICAgIGxpc3Qtc3R5bGU6IG5vbmU7XG4gICAgcGFkZGluZzogMThweCAwIDIwcHggMjBweDsgfVxuICAgIC5zaWRlLW5hdiB1bCBhIHtcbiAgICAgIGNvbG9yOiAjOWRhNWIzO1xuICAgICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcbiAgICAgIGZvbnQtc2l6ZTogMTBweDtcbiAgICAgIGZvbnQtd2VpZ2h0OiA3MDA7XG4gICAgICBmb250LWZhbWlseTogXCJFaW5hXCIsIFwiSGVsdmV0aWNhIE5ldWVcIiwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmO1xuICAgICAgbGV0dGVyLXNwYWNpbmc6IDJweDtcbiAgICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbiAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgcGFkZGluZzogMTBweCAwO1xuICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICAgY3Vyc29yOiBwb2ludGVyOyB9XG4gICAgICAuc2lkZS1uYXYgdWwgYTo6YWZ0ZXIge1xuICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICByaWdodDogMDtcbiAgICAgICAgdG9wOiAwO1xuICAgICAgICBib3R0b206IDA7XG4gICAgICAgIGNvbnRlbnQ6ICcnO1xuICAgICAgICBib3JkZXItcmlnaHQ6IDJweCBzb2xpZCAjNGE4YmZjO1xuICAgICAgICB0cmFuc2Zvcm06IHNjYWxlWSgwLjAwMDEpO1xuICAgICAgICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gLjA4cyBlYXNlLWluLW91dDsgfVxuICAgIC5zaWRlLW5hdiB1bCB1bCxcbiAgICAuc2lkZS1uYXYgdWwgLmNhcGl0YWxpemUge1xuICAgICAgcGFkZGluZzogMDtcbiAgICAgIG9wYWNpdHk6IDE7IH1cbiAgICAgIC5zaWRlLW5hdiB1bCB1bCBhLFxuICAgICAgLnNpZGUtbmF2IHVsIC5jYXBpdGFsaXplIGEge1xuICAgICAgICBjb2xvcjogIzRDNTU1QTtcbiAgICAgICAgdGV4dC10cmFuc2Zvcm06IG5vbmU7XG4gICAgICAgIGZvbnQtc2l6ZTogMTNweDtcbiAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDtcbiAgICAgICAgbGV0dGVyLXNwYWNpbmc6IDA7XG4gICAgICAgIGhlaWdodDogMzRweDtcbiAgICAgICAgdHJhbnNpdGlvbjogaGVpZ2h0IGN1YmljLWJlemllcigwLjM2LCAwLjY2LCAwLjA0LCAxKSAwLjNzLCBwYWRkaW5nIGN1YmljLWJlemllcigwLjM2LCAwLjY2LCAwLjA0LCAxKSAwLjNzLCBjb2xvciAwLjJzOyB9XG4gICAgICAgIC5zaWRlLW5hdiB1bCB1bCBhOmVtcHR5LFxuICAgICAgICAuc2lkZS1uYXYgdWwgLmNhcGl0YWxpemUgYTplbXB0eSB7XG4gICAgICAgICAgZGlzcGxheTogbm9uZTsgfVxuICAgICAgLnNpZGUtbmF2IHVsIHVsLm5nLWhpZGUtYWRkLCAuc2lkZS1uYXYgdWwgdWwubmctaGlkZS1yZW1vdmUsXG4gICAgICAuc2lkZS1uYXYgdWwgLmNhcGl0YWxpemUubmctaGlkZS1hZGQsXG4gICAgICAuc2lkZS1uYXYgdWwgLmNhcGl0YWxpemUubmctaGlkZS1yZW1vdmUge1xuICAgICAgICB0cmFuc2l0aW9uOiBvcGFjaXR5IGN1YmljLWJlemllcigwLjM2LCAwLjY2LCAwLjA0LCAxKSAwLjNzOyB9XG4gICAgICAuc2lkZS1uYXYgdWwgdWwubmctaGlkZSxcbiAgICAgIC5zaWRlLW5hdiB1bCAuY2FwaXRhbGl6ZS5uZy1oaWRlIHtcbiAgICAgICAgb3BhY2l0eTogMDsgfVxuICAgICAgICAuc2lkZS1uYXYgdWwgdWwubmctaGlkZSBhLFxuICAgICAgICAuc2lkZS1uYXYgdWwgLmNhcGl0YWxpemUubmctaGlkZSBhIHtcbiAgICAgICAgICBwYWRkaW5nOiAwO1xuICAgICAgICAgIGhlaWdodDogMCAhaW1wb3J0YW50OyB9XG4gICAgLnNpZGUtbmF2IHVsIHVsIC5hY3RpdmUgPiBhLFxuICAgIC5zaWRlLW5hdiB1bCAuY2FwaXRhbGl6ZS5hY3RpdmUgPiBhLFxuICAgIC5zaWRlLW5hdiB1bCBhOmhvdmVyLFxuICAgIC5zaWRlLW5hdiB1bCAuYWN0aXZlLnRvcC1sZXZlbCA+IGEge1xuICAgICAgY29sb3I6ICM0YThiZmM7XG4gICAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG4gICAgICBiYWNrZ3JvdW5kOiBub25lOyB9XG4gICAgLnNpZGUtbmF2IHVsIHVsIC5hY3RpdmUgPiBhOjphZnRlcixcbiAgICAuc2lkZS1uYXYgdWwgLmNhcGl0YWxpemUuYWN0aXZlID4gYTo6YWZ0ZXIsXG4gICAgLnNpZGUtbmF2IHVsIGE6Zm9jdXM6OmFmdGVyLFxuICAgIC5zaWRlLW5hdiB1bCAuYWN0aXZlLnRvcC1sZXZlbCA+IGE6OmFmdGVyIHtcbiAgICAgIHRyYW5zZm9ybTogc2NhbGVZKDEpO1xuICAgICAgb3V0bGluZTogbm9uZTsgfVxuICAuc2lkZS1uYXYgLmJldGEge1xuICAgIGJhY2tncm91bmQ6ICM0YThiZmM7XG4gICAgY29sb3I6IHdoaXRlO1xuICAgIGZvbnQtd2VpZ2h0OiA3MDA7XG4gICAgZm9udC1zaXplOiAxMHB4O1xuICAgIHBhZGRpbmc6IDAgMnB4O1xuICAgIGJvcmRlci1yYWRpdXM6IDNweDtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgdG9wOiAtMnB4OyB9XG4gIC5zaWRlLW5hdiAucGFpZCB7XG4gICAgYmFja2dyb3VuZDogIzRhOGJmYztcbiAgICBjb2xvcjogd2hpdGU7XG4gICAgZm9udC13ZWlnaHQ6IDcwMDtcbiAgICBmb250LXNpemU6IDEwcHg7XG4gICAgcGFkZGluZzogMCAycHg7XG4gICAgYm9yZGVyLXJhZGl1czogM3B4O1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICB0b3A6IC0ycHg7IH1cbiAgLnNpZGUtbmF2IC52NC1iZXRhIHtcbiAgICBtYXJnaW4tdG9wOiA3cHg7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgbWFyZ2luLWJvdHRvbTogMTRweDsgfVxuICAgIC5zaWRlLW5hdiAudjQtYmV0YSBhIHtcbiAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICAgY29sb3I6ICM1OTZjOGM7XG4gICAgICBwYWRkaW5nOiAxNXB4IDE1cHggMTVweCAzOXB4O1xuICAgICAgbWFyZ2luLXJpZ2h0OiAyMHB4OyB9XG4gICAgICAuc2lkZS1uYXYgLnY0LWJldGEgYSA+IHN0cm9uZyxcbiAgICAgIC5zaWRlLW5hdiAudjQtYmV0YSBhID4gaSxcbiAgICAgIC5zaWRlLW5hdiAudjQtYmV0YSBhID4gc3BhbiB7XG4gICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgICAgei1pbmRleDogMTsgfVxuICAgICAgLnNpZGUtbmF2IC52NC1iZXRhIGE6OmJlZm9yZSB7XG4gICAgICAgIGJhY2tncm91bmQ6IHdoaXRlIHVybChcIi9pbWcvZG9jcy9pb25pYy1zaWRlLWljb24ucG5nXCIpIG5vLXJlcGVhdCAwIDUwJTtcbiAgICAgICAgYmFja2dyb3VuZC1zaXplOiAyOHB4O1xuICAgICAgICBib3JkZXItcmFkaXVzOiA2cHg7XG4gICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgY29udGVudDogJyc7XG4gICAgICAgIHRvcDogMDtcbiAgICAgICAgcmlnaHQ6IDA7XG4gICAgICAgIGJvdHRvbTogMDtcbiAgICAgICAgbGVmdDogMDtcbiAgICAgICAgei1pbmRleDogMTtcbiAgICAgICAgYm94LXNoYWRvdzogMCAycHggOHB4IHJnYmEoMCwgMCwgMCwgMC4yKTtcbiAgICAgICAgdHJhbnNpdGlvbjogLjNzIGJveC1zaGFkb3cgZWFzZS1vdXQ7IH1cbiAgICAgIC5zaWRlLW5hdiAudjQtYmV0YSBhOmhvdmVyOjpiZWZvcmUge1xuICAgICAgICBib3gtc2hhZG93OiAwIDRweCAxNnB4IHJnYmEoMCwgMCwgMCwgMC4xNik7IH1cbiAgICAuc2lkZS1uYXYgLnY0LWJldGEgc3Ryb25nIHtcbiAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgZm9udC1zaXplOiAxNHB4O1xuICAgICAgY29sb3I6ICMwZjE2MjI7XG4gICAgICBmb250LXdlaWdodDogNjAwO1xuICAgICAgdGV4dC10cmFuc2Zvcm06IG5vbmU7XG4gICAgICBsZXR0ZXItc3BhY2luZzogLjAxZW07IH1cbiAgICAuc2lkZS1uYXYgLnY0LWJldGEgc3BhbiB7XG4gICAgICBmb250LXNpemU6IDEwcHg7XG4gICAgICBmb250LXdlaWdodDogNDAwO1xuICAgICAgdGV4dC10cmFuc2Zvcm06IG5vbmU7XG4gICAgICBsZXR0ZXItc3BhY2luZzogLjAxZW07IH1cbiAgICAuc2lkZS1uYXYgLnY0LWJldGEgYSA+IGkge1xuICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgcmlnaHQ6IDVweDtcbiAgICAgIGZvbnQtc2l6ZTogMThweDtcbiAgICAgIGNvbG9yOiAjZDJkNmRkO1xuICAgICAgdG9wOiBjYWxjKDUwJSAtIDEwcHgpOyB9XG5cbmJvZHk6bm90KC5uZy1zY29wZSkgLnNpZGUtbmF2IHVsIGEge1xuICB0cmFuc2l0aW9uOiBub25lOyB9XG5cbi50YWJsZSA+IHRoZWFkID4gdHIgPiB0aCxcbi50YWJsZSA+IHRoZWFkID4gdHI6Zmlyc3QtY2hpbGQgPiB0aCxcbi50YWJsZSA+IHRoZWFkOmZpcnN0LWNoaWxkID4gdHIgPiB0aCxcbi50YWJsZSA+IHRoZWFkOmZpcnN0LWNoaWxkID4gdHI6Zmlyc3QtY2hpbGQgPiB0aCxcbi50YWJsZSA+IHRib2R5ID4gdHIgPiB0aCxcbi50YWJsZSA+IHRib2R5ID4gdHI6Zmlyc3QtY2hpbGQgPiB0aCxcbi50YWJsZSA+IHRib2R5OmZpcnN0LWNoaWxkID4gdHIgPiB0aCxcbi50YWJsZSA+IHRib2R5OmZpcnN0LWNoaWxkID4gdHI6Zmlyc3QtY2hpbGQgPiB0aCB7XG4gIHBhZGRpbmc6IDExcHggMTFweCAxMnB4O1xuICBib3JkZXItYm90dG9tOiAxcHggc29saWQgI2VlZTtcbiAgZm9udC13ZWlnaHQ6IDcwMDsgfVxuXG4udGFibGUgPiB0aGVhZCA+IHRyID4gdGQsXG4udGFibGUgPiB0aGVhZCA+IHRyOmZpcnN0LWNoaWxkID4gdGQsXG4udGFibGUgPiB0aGVhZDpmaXJzdC1jaGlsZCA+IHRyID4gdGQsXG4udGFibGUgPiB0aGVhZDpmaXJzdC1jaGlsZCA+IHRyOmZpcnN0LWNoaWxkID4gdGQsXG4udGFibGUgPiB0Ym9keSA+IHRyID4gdGQsXG4udGFibGUgPiB0Ym9keSA+IHRyOmZpcnN0LWNoaWxkID4gdGQsXG4udGFibGUgPiB0Ym9keTpmaXJzdC1jaGlsZCA+IHRyID4gdGQsXG4udGFibGUgPiB0Ym9keTpmaXJzdC1jaGlsZCA+IHRyOmZpcnN0LWNoaWxkID4gdGQge1xuICBwYWRkaW5nOiAxMnB4O1xuICBmb250LXdlaWdodDogNTAwO1xuICBib3JkZXItYm90dG9tOiAxcHggc29saWQgI2VlZTtcbiAgY29sb3I6ICM1NTU7IH1cblxuLnRvYyB7XG4gIG1hcmdpbi10b3A6IDIwcHg7IH1cbiAgLnRvYyAudG9nZ2xlIHtcbiAgICBiYWNrZ3JvdW5kOiBub25lO1xuICAgIGJvcmRlcjogMDtcbiAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xuICAgIGNvbG9yOiAjYjFiYWM4O1xuICAgIGZvbnQtc2l6ZTogMTBweDtcbiAgICBsZXR0ZXItc3BhY2luZzogMnB4O1xuICAgIGZvbnQtd2VpZ2h0OiA3MDA7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIGRpc3BsYXk6IGlubGluZTtcbiAgICB3aWR0aDogMTAwJTtcbiAgICB0ZXh0LWFsaWduOiBsZWZ0O1xuICAgIHBhZGRpbmc6IDA7XG4gICAgb3V0bGluZTogbm9uZTsgfVxuICAgIC50b2MgLnRvZ2dsZTo6YWZ0ZXIge1xuICAgICAgZm9udC1mYW1pbHk6IElvbmljb25zO1xuICAgICAgY29udGVudDogJ1xcZjNkMCc7XG4gICAgICBmbG9hdDogcmlnaHQ7XG4gICAgICBmb250LXNpemU6IDE4cHg7XG4gICAgICBmb250LXdlaWdodDogNDAwO1xuICAgICAgdHJhbnNpdGlvbjogLjNzIHRyYW5zZm9ybSBlYXNlO1xuICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICAgdG9wOiAtNXB4OyB9XG4gIC50b2MgLmV4cGFuZGVkIHVsIHtcbiAgICBsaXN0LXN0eWxlOiBub25lO1xuICAgIHBhZGRpbmctbGVmdDogMTVweDsgfVxuICAgIC50b2MgLmV4cGFuZGVkIHVsIGxpIHtcbiAgICAgIGZvbnQtc2l6ZTogMTRweDtcbiAgICAgIGZvbnQtd2VpZ2h0OiA0MDA7XG4gICAgICBsaW5lLWhlaWdodDogMS44ZW07XG4gICAgICBtYXJnaW4tYm90dG9tOiAwOyB9XG4gICAgICAudG9jIC5leHBhbmRlZCB1bCBsaSBhIHtcbiAgICAgICAgY29sb3I6ICM0YThiZmM7XG4gICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICBtYXgtaGVpZ2h0OiAyNXB4O1xuICAgICAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgICAgICBmb250LXdlaWdodDogNTAwO1xuICAgICAgICB0cmFuc2l0aW9uOiAwLjNzIG1heC1oZWlnaHQgY3ViaWMtYmV6aWVyKDAuMzYsIDAuNjYsIDAuMDQsIDEpO1xuICAgICAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICAgICAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsgfVxuICAudG9jIC5leHBhbmRlZCA+IHVsIHtcbiAgICBwYWRkaW5nLWxlZnQ6IDA7IH1cbiAgICAudG9jIC5leHBhbmRlZCA+IHVsID4gbGkge1xuICAgICAgZm9udC13ZWlnaHQ6IDUwMDtcbiAgICAgIGxpbmUtaGVpZ2h0OiAyZW07IH1cbiAgICAgIC50b2MgLmV4cGFuZGVkID4gdWwgPiBsaSA+IGEge1xuICAgICAgICBmb250LXdlaWdodDogNjAwOyB9XG4gIC50b2MuY29sbGFwc2VkIC50b2dnbGU6OmFmdGVyIHtcbiAgICB0cmFuc2Zvcm06IHJvdGF0ZTNkKDAsIDAsIDEsIC05MGRlZyk7IH1cbiAgLnRvYy5jb2xsYXBzZWQgLmV4cGFuZGVkIHVsIGxpIGEge1xuICAgIG1heC1oZWlnaHQ6IDA7IH1cblxuLnBhZ2UtcHJvLWRvY3MgLmRvY3MtY29udGFpbmVyIG1haW4gaDIge1xuICBwYWRkaW5nLXRvcDogMC41ZW07IH1cblxuLnBhZ2UtcHJvLWRvY3MgLmRvY3MtY29udGFpbmVyIG1haW4gcCB7XG4gIG1hcmdpbi10b3A6IDAuN2VtO1xuICBtYXJnaW4tYm90dG9tOiAwLjdlbTsgfVxuXG4ucGFnZS1wcm8tZG9jcyAuc2lkZS1uYXYgPiB1bC5uZXN0ZWQtbWVudSA+IGxpID4gdWwgPiBsaSA+IGEge1xuICBtYXJnaW4tdG9wOiAxNXB4OyB9XG5cbi5kb2NzLWNvbnRhaW5lciB7XG4gIG1pbi1oZWlnaHQ6IDEwMCU7IH1cbiAgLmRvY3MtY29udGFpbmVyIC5maXhlZC1oZWFkZXIge1xuICAgIHBvc2l0aW9uOiBmaXhlZDtcbiAgICBsZWZ0OiAyMzBweDtcbiAgICB0b3A6IDBweDtcbiAgICB3aWR0aDogMTAwJTtcbiAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgI2U2ZTllZTtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTtcbiAgICBwYWRkaW5nOiAwcHggMzhweDtcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlM2QoMCwgMCwgMCk7IH1cbiAgICAuZG9jcy1jb250YWluZXIgLmZpeGVkLWhlYWRlciA+IGhncm91cCB7XG4gICAgICBoZWlnaHQ6IDc0cHg7XG4gICAgICBsaW5lLWhlaWdodDogNzRweDsgfVxuICAgICAgQG1lZGlhIChtYXgtd2lkdGg6IDc2N3B4KSB7XG4gICAgICAgIC5kb2NzLWNvbnRhaW5lciAuZml4ZWQtaGVhZGVyID4gaGdyb3VwIHtcbiAgICAgICAgICBoZWlnaHQ6IDQ2cHg7XG4gICAgICAgICAgbGluZS1oZWlnaHQ6IDQ2cHg7IH0gfVxuICAgICAgLmRvY3MtY29udGFpbmVyIC5maXhlZC1oZWFkZXIgPiBoZ3JvdXAgPiAqIHtcbiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgICAgICBtYXJnaW46IDBweDtcbiAgICAgICAgbGluZS1oZWlnaHQ6IGluaGVyaXQ7XG4gICAgICAgIHZlcnRpY2FsLWFsaWduOiB0b3A7IH1cbiAgICAgIC5kb2NzLWNvbnRhaW5lciAuZml4ZWQtaGVhZGVyID4gaGdyb3VwIGgzICsgaDQge1xuICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICAgIGhlaWdodDogMTAwJTtcbiAgICAgICAgbWFyZ2luLWxlZnQ6IDMxcHg7XG4gICAgICAgIG9wYWNpdHk6IDE7XG4gICAgICAgIHRyYW5zaXRpb246IG9wYWNpdHkgMC40czsgfVxuICAgICAgICAuZG9jcy1jb250YWluZXIgLmZpeGVkLWhlYWRlciA+IGhncm91cCBoMyArIGg0Lm5vdC1zaG93biB7XG4gICAgICAgICAgb3BhY2l0eTogMDsgfVxuICAgICAgICAuZG9jcy1jb250YWluZXIgLmZpeGVkLWhlYWRlciA+IGhncm91cCBoMyArIGg0OmFmdGVyIHtcbiAgICAgICAgICBjb250ZW50OiAnJztcbiAgICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgICAgbGVmdDogLTI0cHg7XG4gICAgICAgICAgdG9wOiBjYWxjKDUwJSAtIDVweCk7XG4gICAgICAgICAgd2lkdGg6IDEwcHg7XG4gICAgICAgICAgaGVpZ2h0OiAxMHB4O1xuICAgICAgICAgIHRyYW5zZm9ybTogcm90YXRlKDQ1ZGVnKTtcbiAgICAgICAgICBib3JkZXItcmlnaHQ6IDJweCBzb2xpZDtcbiAgICAgICAgICBib3JkZXItdG9wOiAycHggc29saWQ7XG4gICAgICAgICAgYm9yZGVyLWNvbG9yOiAjMzMzMzMzOyB9XG4gICAgICAgIC5kb2NzLWNvbnRhaW5lciAuZml4ZWQtaGVhZGVyID4gaGdyb3VwIGgzICsgaDQgPiBub2JyIHtcbiAgICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgICAgdHJhbnNpdGlvbjogdHJhbnNmb3JtIDAuM3MsIG9wYWNpdHkgMC4zczsgfVxuICAgICAgICAgIC5kb2NzLWNvbnRhaW5lciAuZml4ZWQtaGVhZGVyID4gaGdyb3VwIGgzICsgaDQgPiBub2JyLnRvcCB7XG4gICAgICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTI4cHgpO1xuICAgICAgICAgICAgb3BhY2l0eTogMDsgfVxuICAgICAgICAgIC5kb2NzLWNvbnRhaW5lciAuZml4ZWQtaGVhZGVyID4gaGdyb3VwIGgzICsgaDQgPiBub2JyLm1pZGRsZSwgLmRvY3MtY29udGFpbmVyIC5maXhlZC1oZWFkZXIgPiBoZ3JvdXAgaDMgKyBoNCA+IG5vYnIudG9wLm1pZGRsZSwgLmRvY3MtY29udGFpbmVyIC5maXhlZC1oZWFkZXIgPiBoZ3JvdXAgaDMgKyBoNCA+IG5vYnIuYm90dG9tLm1pZGRsZSB7XG4gICAgICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMnB4KTtcbiAgICAgICAgICAgIG9wYWNpdHk6IDE7IH1cbiAgICAgICAgICAuZG9jcy1jb250YWluZXIgLmZpeGVkLWhlYWRlciA+IGhncm91cCBoMyArIGg0ID4gbm9ici5ib3R0b20ge1xuICAgICAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDMycHgpO1xuICAgICAgICAgICAgb3BhY2l0eTogMDsgfVxuICAgICAgICAgIC5kb2NzLWNvbnRhaW5lciAuZml4ZWQtaGVhZGVyID4gaGdyb3VwIGgzICsgaDQgPiBub2JyLm5vLXRyYW5zaXRpb24ge1xuICAgICAgICAgICAgdHJhbnNpdGlvbi1kdXJhdGlvbjogMHMsIDBzOyB9XG4gIEBtZWRpYSAobWF4LXdpZHRoOiA3NjdweCkge1xuICAgIC5kb2NzLWNvbnRhaW5lciAuZml4ZWQtaGVhZGVyIHtcbiAgICAgIGxlZnQ6IDBweDsgfSB9XG4gIC5kb2NzLWNvbnRhaW5lciBtYWluIHtcbiAgICBwYWRkaW5nOiA1MHB4IDQwcHggMTAwcHg7IH1cbiAgICAuZG9jcy1jb250YWluZXIgbWFpbiBoMSxcbiAgICAuZG9jcy1jb250YWluZXIgbWFpbiBoMixcbiAgICAuZG9jcy1jb250YWluZXIgbWFpbiBoMyxcbiAgICAuZG9jcy1jb250YWluZXIgbWFpbiBoNCxcbiAgICAuZG9jcy1jb250YWluZXIgbWFpbiBoNSB7XG4gICAgICBjb2xvcjogIzI0MjgyZTtcbiAgICAgIGxpbmUtaGVpZ2h0OiAxLjRlbTtcbiAgICAgIG1hcmdpbjogMmVtIDAgMWVtO1xuICAgICAgZm9udC1zaXplOiAyNnB4O1xuICAgICAgZm9udC13ZWlnaHQ6IDcwMDtcbiAgICAgIGxldHRlci1zcGFjaW5nOiAtMC4wMWVtOyB9XG4gICAgICAuZG9jcy1jb250YWluZXIgbWFpbiBoMTpmaXJzdC1jaGlsZCxcbiAgICAgIC5kb2NzLWNvbnRhaW5lciBtYWluIGgyOmZpcnN0LWNoaWxkLFxuICAgICAgLmRvY3MtY29udGFpbmVyIG1haW4gaDM6Zmlyc3QtY2hpbGQsXG4gICAgICAuZG9jcy1jb250YWluZXIgbWFpbiBoNDpmaXJzdC1jaGlsZCxcbiAgICAgIC5kb2NzLWNvbnRhaW5lciBtYWluIGg1OmZpcnN0LWNoaWxkIHtcbiAgICAgICAgbWFyZ2luLXRvcDogMDsgfVxuICAgICAgLmRvY3MtY29udGFpbmVyIG1haW4gaDEgYS5hbmNob3I6OmJlZm9yZSxcbiAgICAgIC5kb2NzLWNvbnRhaW5lciBtYWluIGgyIGEuYW5jaG9yOjpiZWZvcmUsXG4gICAgICAuZG9jcy1jb250YWluZXIgbWFpbiBoMyBhLmFuY2hvcjo6YmVmb3JlLFxuICAgICAgLmRvY3MtY29udGFpbmVyIG1haW4gaDQgYS5hbmNob3I6OmJlZm9yZSxcbiAgICAgIC5kb2NzLWNvbnRhaW5lciBtYWluIGg1IGEuYW5jaG9yOjpiZWZvcmUge1xuICAgICAgICBjb250ZW50OiAnXFxmMjJhJztcbiAgICAgICAgZm9udC1mYW1pbHk6ICdJb25pY29ucyc7XG4gICAgICAgIG1hcmdpbi1sZWZ0OiAtMTVweDtcbiAgICAgICAgbWFyZ2luLXJpZ2h0OiA1cHg7XG4gICAgICAgIGZvbnQtc2l6ZTogMTRweDtcbiAgICAgICAgY29sb3I6ICNlNmU5ZWU7XG4gICAgICAgIHRyYW5zaXRpb246IC4zcyBjb2xvcjsgfVxuICAgICAgLmRvY3MtY29udGFpbmVyIG1haW4gaDEgYS5hbmNob3I6aG92ZXI6OmJlZm9yZSwgLmRvY3MtY29udGFpbmVyIG1haW4gaDEgYS5hbmNob3I6YWN0aXZlOjpiZWZvcmUsXG4gICAgICAuZG9jcy1jb250YWluZXIgbWFpbiBoMiBhLmFuY2hvcjpob3Zlcjo6YmVmb3JlLFxuICAgICAgLmRvY3MtY29udGFpbmVyIG1haW4gaDIgYS5hbmNob3I6YWN0aXZlOjpiZWZvcmUsXG4gICAgICAuZG9jcy1jb250YWluZXIgbWFpbiBoMyBhLmFuY2hvcjpob3Zlcjo6YmVmb3JlLFxuICAgICAgLmRvY3MtY29udGFpbmVyIG1haW4gaDMgYS5hbmNob3I6YWN0aXZlOjpiZWZvcmUsXG4gICAgICAuZG9jcy1jb250YWluZXIgbWFpbiBoNCBhLmFuY2hvcjpob3Zlcjo6YmVmb3JlLFxuICAgICAgLmRvY3MtY29udGFpbmVyIG1haW4gaDQgYS5hbmNob3I6YWN0aXZlOjpiZWZvcmUsXG4gICAgICAuZG9jcy1jb250YWluZXIgbWFpbiBoNSBhLmFuY2hvcjpob3Zlcjo6YmVmb3JlLFxuICAgICAgLmRvY3MtY29udGFpbmVyIG1haW4gaDUgYS5hbmNob3I6YWN0aXZlOjpiZWZvcmUge1xuICAgICAgICBjb2xvcjogcmdiYSg3NCwgMTM5LCAyNTIsIDAuNik7IH1cbiAgICAuZG9jcy1jb250YWluZXIgbWFpbiBoMSB7XG4gICAgICBtYXJnaW4tYm90dG9tOiAwOyB9XG4gICAgICAuZG9jcy1jb250YWluZXIgbWFpbiBoMSBhLmFuY2hvcjo6YmVmb3JlIHtcbiAgICAgICAgbWFyZ2luLWxlZnQ6IC0yM3B4OyB9XG4gICAgLmRvY3MtY29udGFpbmVyIG1haW4gaDIge1xuICAgICAgcGFkZGluZzogMmVtIDAgMDtcbiAgICAgIGZvbnQtc2l6ZTogMjRweDsgfVxuICAgICAgLmRvY3MtY29udGFpbmVyIG1haW4gaDIuc2VjdGlvbi1oZWFkZXIge1xuICAgICAgICBib3JkZXItdG9wOiAxcHggc29saWQgI0YwRjNGNztcbiAgICAgICAgbWFyZ2luLXRvcDogNS42ZW07IH1cbiAgICAuZG9jcy1jb250YWluZXIgbWFpbiBoMyB7XG4gICAgICBtYXJnaW46IDMuMmVtIDAgMDtcbiAgICAgIGZvbnQtc2l6ZTogMThweDsgfVxuICAgICAgLmRvY3MtY29udGFpbmVyIG1haW4gaDMubm8tcGFyYSB7XG4gICAgICAgIG1hcmdpbi1ib3R0b206IDFlbTsgfVxuICAgIC5kb2NzLWNvbnRhaW5lciBtYWluIGg0IHtcbiAgICAgIGZvbnQtc2l6ZTogMTZweDsgfVxuICAgIC5kb2NzLWNvbnRhaW5lciBtYWluIGg1IHtcbiAgICAgIGZvbnQtc2l6ZTogMTRweDsgfVxuICAgIC5kb2NzLWNvbnRhaW5lciBtYWluIGg2IHtcbiAgICAgIGZvbnQtc2l6ZTogMTJweDsgfVxuICAgIC5kb2NzLWNvbnRhaW5lciBtYWluIHAge1xuICAgICAgY29vcjogIzNhM2Y0NztcbiAgICAgIGxpbmUtaGVpZ2h0OiAyLjFlbTtcbiAgICAgIG1hcmdpbjogMS4yZW0gMCAxLjZlbTtcbiAgICAgIGZvbnQtd2VpZ2h0OiA0MDA7XG4gICAgICBmb250LXNpemU6IDE1cHg7IH1cbiAgICAuZG9jcy1jb250YWluZXIgbWFpbiBwcmUge1xuICAgICAgYm9yZGVyOiAxcHggc29saWQgI2U2ZTllZTtcbiAgICAgIGJhY2tncm91bmQ6IHdoaXRlO1xuICAgICAgcGFkZGluZzogMTZweDtcbiAgICAgIGxpbmUtaGVpZ2h0OiAyNHB4OyB9XG4gICAgLmRvY3MtY29udGFpbmVyIG1haW4gYTpub3QoLmJ0bikge1xuICAgICAgY29sb3I6ICM0YThiZmM7XG4gICAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG4gICAgICB0cmFuc2l0aW9uOiAuMnMgY29sb3I7IH1cbiAgICAgIC5kb2NzLWNvbnRhaW5lciBtYWluIGE6bm90KC5idG4pOmhvdmVyIHtcbiAgICAgICAgY29sb3I6ICM5NWJiZmQ7IH1cbiAgICAuZG9jcy1jb250YWluZXIgbWFpbiB0YWJsZSB7XG4gICAgICB3aWR0aDogMTAwJTsgfVxuICAgIC5kb2NzLWNvbnRhaW5lciBtYWluIHRkLFxuICAgIC5kb2NzLWNvbnRhaW5lciBtYWluIHRoIHtcbiAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7IH1cbiAgICAgIC5kb2NzLWNvbnRhaW5lciBtYWluIHRkOmxhc3QtY2hpbGQsXG4gICAgICAuZG9jcy1jb250YWluZXIgbWFpbiB0aDpsYXN0LWNoaWxkIHtcbiAgICAgICAgd2hpdGUtc3BhY2U6IG5vcm1hbDtcbiAgICAgICAgd2lkdGg6IDk5JTsgfVxuICAgIC5kb2NzLWNvbnRhaW5lciBtYWluIGIsXG4gICAgLmRvY3MtY29udGFpbmVyIG1haW4gc3Ryb25nIHtcbiAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7XG4gICAgICBjb2xvcjogIzI2MjkyZTsgfVxuICAgIC5kb2NzLWNvbnRhaW5lciBtYWluIC5maXhlZC13aWR0aCB7XG4gICAgICBmb250LWZhbWlseTogTWVubG8sIE1vbmFjbywgQ29uc29sYXMsIFwiQ291cmllciBOZXdcIiwgbW9ub3NwYWNlOyB9XG4gICAgLmRvY3MtY29udGFpbmVyIG1haW4gLm5hdiBhIHtcbiAgICAgIHBhZGRpbmctdG9wOiA1cHg7XG4gICAgICBwYWRkaW5nLWJvdHRvbTogNXB4OyB9XG4gICAgLmRvY3MtY29udGFpbmVyIG1haW4gYmxvY2txdW90ZSB7XG4gICAgICBwYWRkaW5nOiAwIDE1cHg7XG4gICAgICBtYXJnaW46IDQwcHggMDtcbiAgICAgIGZvbnQtc2l6ZTogMTZweDtcbiAgICAgIGJvcmRlci1sZWZ0OiA0cHggc29saWQgI2VlZWVlZTsgfVxuICAgIC5kb2NzLWNvbnRhaW5lciBtYWluIGltZy5zZWN0aW9uLWhlYWRlciB7XG4gICAgICB3aWR0aDogMTAwJTtcbiAgICAgIG1hcmdpbjogNTBweCAwO1xuICAgICAgbWF4LXdpZHRoOiAxMDM3cHg7XG4gICAgICBkaXNwbGF5OiBibG9jazsgfVxuICAgIC5kb2NzLWNvbnRhaW5lciBtYWluIC5iZXRhIHtcbiAgICAgIGJhY2tncm91bmQ6ICM0YThiZmM7XG4gICAgICBjb2xvcjogd2hpdGU7XG4gICAgICBmb250LXdlaWdodDogNzAwO1xuICAgICAgZm9udC1zaXplOiAxMHB4O1xuICAgICAgcGFkZGluZzogMCAycHg7XG4gICAgICBib3JkZXItcmFkaXVzOiAzcHg7XG4gICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICB0b3A6IC05cHg7XG4gICAgICBjdXJzb3I6IHBvaW50ZXI7IH1cbiAgICAuZG9jcy1jb250YWluZXIgbWFpbiAuYmV0YS1ub3RpY2Uge1xuICAgICAgZm9udC1zdHlsZTogaXRhbGljO1xuICAgICAgZm9udC1zaXplOiAxM3B4O1xuICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICAgcGFkZGluZy1sZWZ0OiAzMHB4OyB9XG4gICAgICAuZG9jcy1jb250YWluZXIgbWFpbiAuYmV0YS1ub3RpY2U6OmJlZm9yZSB7XG4gICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgbGVmdDogMHB4O1xuICAgICAgICB0b3A6IDBweDtcbiAgICAgICAgZm9udC1mYW1pbHk6ICdJb25pY29ucyc7XG4gICAgICAgIGNvbnRlbnQ6ICdcXGYyNzYnO1xuICAgICAgICBjb2xvcjogIzRhOGJmYztcbiAgICAgICAgZm9udC1zaXplOiAyNHB4O1xuICAgICAgICBmb250LXN0eWxlOiBub3JtYWw7XG4gICAgICAgIG1hcmdpbi1yaWdodDogM3B4OyB9XG4gICAgLmRvY3MtY29udGFpbmVyIG1haW4gLnBhaWQge1xuICAgICAgYmFja2dyb3VuZDogIzRhOGJmYztcbiAgICAgIGNvbG9yOiB3aGl0ZTtcbiAgICAgIGZvbnQtd2VpZ2h0OiA3MDA7XG4gICAgICBmb250LXNpemU6IDEwcHg7XG4gICAgICBwYWRkaW5nOiAwIDJweDtcbiAgICAgIGJvcmRlci1yYWRpdXM6IDNweDtcbiAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgIHRvcDogLTlweDtcbiAgICAgIGN1cnNvcjogcG9pbnRlcjsgfVxuICAgIC5kb2NzLWNvbnRhaW5lciBtYWluIC5wYWlkLW5vdGljZSB7XG4gICAgICBmb250LXN0eWxlOiBpdGFsaWM7XG4gICAgICBmb250LXNpemU6IDEzcHg7XG4gICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICBwYWRkaW5nLWxlZnQ6IDMwcHg7IH1cbiAgICAgIC5kb2NzLWNvbnRhaW5lciBtYWluIC5wYWlkLW5vdGljZTo6YmVmb3JlIHtcbiAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICBsZWZ0OiAwcHg7XG4gICAgICAgIHRvcDogMHB4O1xuICAgICAgICBmb250LWZhbWlseTogJ0lvbmljb25zJztcbiAgICAgICAgY29udGVudDogJ1xcZjQ4ZCc7XG4gICAgICAgIGNvbG9yOiAjNGE4YmZjO1xuICAgICAgICBmb250LXNpemU6IDI0cHg7XG4gICAgICAgIGZvbnQtc3R5bGU6IG5vcm1hbDtcbiAgICAgICAgbWFyZ2luLXJpZ2h0OiAzcHg7IH1cbiAgICAuZG9jcy1jb250YWluZXIgbWFpbiAuYXBpLXRpdGxlIC5iZXRhLCAuZG9jcy1jb250YWluZXIgbWFpbiAuYXBpLXRpdGxlIC5wYWlkIHtcbiAgICAgIG1hcmdpbi1sZWZ0OiA2cHg7IH1cbiAgLmRvY3MtY29udGFpbmVyIGltZyB7XG4gICAgbWF4LXdpZHRoOiAxMDAlOyB9XG5cbkBtZWRpYSAobWF4LXdpZHRoOiAxMTAwcHgpIHtcbiAgLnBhZ2UtY29tcG9uZW50cyAuZG9jcy1jb250YWluZXIgaDMge1xuICAgIHdpZHRoOiBjYWxjKDEwMCUgLSAxNzJweCk7XG4gICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7XG4gICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgICBvdmVyZmxvdzogaGlkZGVuOyB9IH1cblxuYm9keS5kb2NzICNzbmFwLWJhciArICNwcm8taGVhZGVyLm5hdmJhciB7XG4gIG1hcmdpbi10b3A6IDIycHg7IH1cblxuI3Byby1oZWFkZXIge1xuICBiYWNrZ3JvdW5kOiB3aGl0ZTsgfVxuICAjcHJvLWhlYWRlciAuY29udGFpbmVyIHtcbiAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgI0VFRjBGMztcbiAgICBwYWRkaW5nLWJvdHRvbTogMTVweDtcbiAgICBwYWRkaW5nLWxlZnQ6IDA7XG4gICAgcGFkZGluZy1yaWdodDogMDsgfVxuICAjcHJvLWhlYWRlciBhIHtcbiAgICBjb2xvcjogIzczN0I4ODsgfVxuXG4jcHJvLWRvY3MgaDEsICNwcm8tZG9jcyBoMiwgI3Byby1kb2NzIGgzLCAjcHJvLWRvY3MgaDQsICNwcm8tZG9jcyBoNSB7XG4gIGZvbnQtd2VpZ2h0OiA3MDA7IH1cblxuI3Byby1kb2NzIHRkOm5vdCg6Zmlyc3QtY2hpbGQpLCAjcHJvLWRvY3MgdGg6bm90KDpmaXJzdC1jaGlsZCkge1xuICB3aGl0ZS1zcGFjZTogaW5oZXJpdDsgfVxuXG4jcHJvLWRvY3MgLnJlc3BvbnNpdmUtc2lkZS1uYXYuYWZmaXggKyBtYWluLFxuI3Byby1kb2NzIC5yZXNwb25zaXZlLXNpZGUtbmF2LmFmZml4LWJvdHRvbSArIG1haW4ge1xuICBtYXJnaW4tbGVmdDogMzAwcHg7IH1cbiAgQG1lZGlhIChtYXgtd2lkdGg6IDc2N3B4KSB7XG4gICAgI3Byby1kb2NzIC5yZXNwb25zaXZlLXNpZGUtbmF2LmFmZml4ICsgbWFpbixcbiAgICAjcHJvLWRvY3MgLnJlc3BvbnNpdmUtc2lkZS1uYXYuYWZmaXgtYm90dG9tICsgbWFpbiB7XG4gICAgICBtYXJnaW4tbGVmdDogMDsgfSB9XG5cbiNwcm8tZG9jcyAucmVzcG9uc2l2ZS1zaWRlLW5hdiB7XG4gIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OyB9XG4gICNwcm8tZG9jcyAucmVzcG9uc2l2ZS1zaWRlLW5hdi5zaWRlLW5hdiB1bCB1bCBhLCAjcHJvLWRvY3MgLnJlc3BvbnNpdmUtc2lkZS1uYXYuc2lkZS1uYXYgdWwgLmNhcGl0YWxpemUgYSB7XG4gICAgaGVpZ2h0OiAyOHB4OyB9XG4gICNwcm8tZG9jcyAucmVzcG9uc2l2ZS1zaWRlLW5hdiB1bCBhOjphZnRlciB7XG4gICAgYm9yZGVyOiBub25lICFpbXBvcnRhbnQ7IH1cbiAgI3Byby1kb2NzIC5yZXNwb25zaXZlLXNpZGUtbmF2IGEge1xuICAgIGxldHRlci1zcGFjaW5nOiAtMC4wMWVtO1xuICAgIHBhZGRpbmc6IDBweCAwOyB9XG4gICAgI3Byby1kb2NzIC5yZXNwb25zaXZlLXNpZGUtbmF2IGEuYWN0aXZlIHtcbiAgICAgIGNvbG9yOiAjNGE4YmZjICFpbXBvcnRhbnQ7XG4gICAgICBmb250LXdlaWdodDogNjAwICFpbXBvcnRhbnQ7IH1cbiAgICAjcHJvLWRvY3MgLnJlc3BvbnNpdmUtc2lkZS1uYXYgYTpob3ZlciB7XG4gICAgICBjb2xvcjogIzNiM2Y0NCAhaW1wb3J0YW50O1xuICAgICAgZm9udC13ZWlnaHQ6IDYwMCAhaW1wb3J0YW50OyB9XG4gICNwcm8tZG9jcyAucmVzcG9uc2l2ZS1zaWRlLW5hdiA+IHVsLm5lc3RlZC1tZW51ID4gbGkgPiB1bCA+IGxpIHtcbiAgICBtYXJnaW4tYm90dG9tOiA4cHg7IH1cbiAgI3Byby1kb2NzIC5yZXNwb25zaXZlLXNpZGUtbmF2ID4gdWwubmVzdGVkLW1lbnUgPiBsaSA+IHVsID4gbGkgPiB1bCB7XG4gICAgbWFyZ2luLWxlZnQ6IDI3cHg7IH1cbiAgICAjcHJvLWRvY3MgLnJlc3BvbnNpdmUtc2lkZS1uYXYgPiB1bC5uZXN0ZWQtbWVudSA+IGxpID4gdWwgPiBsaSA+IHVsID4gbGkgPiBhIHtcbiAgICAgIGZvbnQtc2l6ZTogMTNweDtcbiAgICAgIGNvbG9yOiAjNTA1NjVlO1xuICAgICAgZm9udC13ZWlnaHQ6IDUwMDsgfVxuICAjcHJvLWRvY3MgLnJlc3BvbnNpdmUtc2lkZS1uYXYgPiB1bC5uZXN0ZWQtbWVudSA+IGxpID4gdWwgPiBsaSA+IHVsID4gbGkgPiB1bCB7XG4gICAgbWFyZ2luLWxlZnQ6IDE1cHg7IH1cbiAgI3Byby1kb2NzIC5yZXNwb25zaXZlLXNpZGUtbmF2ID4gdWwjcHJvLW5hdi5uZXN0ZWQtbWVudSA+IGxpID4gdWwgPiBsaSA+IGE6OmJlZm9yZSB7XG4gICAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFwiL2ltZy9wcm8vc2lkZWJhci1pY29uLXNwcml0ZS5wbmdcIik7XG4gICAgYmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdDtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDsgfVxuICAjcHJvLWRvY3MgLnJlc3BvbnNpdmUtc2lkZS1uYXYgPiB1bC5uZXN0ZWQtbWVudSA+IGxpID4gdWwgPiBsaSA+IGEge1xuICAgIG1hcmdpbi10b3A6IDA7XG4gICAgdGV4dC10cmFuc2Zvcm06IG5vbmU7XG4gICAgZm9udC1zaXplOiAxNHB4O1xuICAgIGZvbnQtd2VpZ2h0OiA2MDA7XG4gICAgY29sb3I6ICMyNDI4MmU7XG4gICAgbGV0dGVyLXNwYWNpbmc6IDBweDsgfVxuICAgICNwcm8tZG9jcyAucmVzcG9uc2l2ZS1zaWRlLW5hdiA+IHVsLm5lc3RlZC1tZW51ID4gbGkgPiB1bCA+IGxpID4gYTo6YmVmb3JlIHtcbiAgICAgIHdpZHRoOiAxNnB4O1xuICAgICAgaGVpZ2h0OiAxNnB4O1xuICAgICAgYmFja2dyb3VuZC1zaXplOiAxMDAlO1xuICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbiAgICAgIG1hcmdpbi1yaWdodDogMTBweDtcbiAgICAgIG1hcmdpbi10b3A6IC0ycHg7XG4gICAgICBjb250ZW50OiAnJzsgfVxuICBAbWVkaWEgKG1heC13aWR0aDogNzY3cHgpIHtcbiAgICAjcHJvLWRvY3MgLnJlc3BvbnNpdmUtc2lkZS1uYXYge1xuICAgICAgcG9zaXRpb246IHN0YXRpYyAhaW1wb3J0YW50O1xuICAgICAgbWFyZ2luLWxlZnQ6IDIwcHg7IH1cbiAgICAgICNwcm8tZG9jcyAucmVzcG9uc2l2ZS1zaWRlLW5hdiA+IHVsLm5lc3RlZC1tZW51ID4gbGkgPiB1bCA+IGxpID4gYTo6YmVmb3JlIHtcbiAgICAgICAgZGlzcGxheTogbm9uZTsgfSB9XG5cbiNwcm8tZG9jcyAucHJvLWludHJvLWxpbms6OmJlZm9yZSB7XG4gIGJhY2tncm91bmQtcG9zaXRpb246IDBweCAwcHg7IH1cblxuI3Byby1kb2NzIC5wcm8tdmlldy1saW5rOjpiZWZvcmUge1xuICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwcHggLTQ4cHg7IH1cblxuI3Byby1kb2NzIC5wcm8tZGVwbG95LWxpbms6OmJlZm9yZSB7XG4gIGJhY2tncm91bmQtcG9zaXRpb246IDBweCAtNjRweDsgfVxuXG4jcHJvLWRvY3MgLnByby1wYWNrYWdlLWxpbms6OmJlZm9yZSB7XG4gIGJhY2tncm91bmQtcG9zaXRpb246IDBweCAtODBweDsgfVxuXG4jcHJvLWRvY3MgLnByby1tb25pdG9yaW5nLWxpbms6OmJlZm9yZSB7XG4gIGJhY2tncm91bmQtcG9zaXRpb246IDBweCAtOTZweDsgfVxuXG4jcHJvLWRvY3MgLnByby1kZXZhcHAtbGluazo6YmVmb3JlIHtcbiAgYmFja2dyb3VuZC1wb3NpdGlvbjogMHB4IC0xMjhweDsgfVxuXG4jcHJvLWRvY3MgLnByby1hZHZhbmNlZC1saW5rOjpiZWZvcmUge1xuICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwcHggLTE2MHB4OyB9XG5cbiNicmFuY2gtc21zLWJveCB7XG4gIHBhZGRpbmc6IDIwcHg7XG4gIGJvcmRlcjogMXB4IHNvbGlkICNlZWU7XG4gIGJvcmRlci1yYWRpdXM6IDNweDtcbiAgbWFyZ2luLWJvdHRvbTogMjBweDsgfVxuICAjYnJhbmNoLXNtcy1ib3ggLmJ0biB7XG4gICAgZm9udC1zaXplOiAxNHB4O1xuICAgIG1hcmdpbi10b3A6IDEwcHg7IH1cblxuLnByb21vIHtcbiAgZm9udC1mYW1pbHk6IFwiRWluYVwiLCBcIkhlbHZldGljYSBOZXVlXCIsIEhlbHZldGljYSwgc2Fucy1zZXJpZjtcbiAgcGFkZGluZy10b3A6IDY0cHg7XG4gIHBhZGRpbmctYm90dG9tOiA2NHB4O1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjNmNWY5O1xuICBwb3NpdGlvbjogcmVsYXRpdmU7IH1cbiAgLnByb21vIC5jb250YWluZXIge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAganVzdGlmeS1jb250ZW50OiBmbGV4LWVuZDtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyOyB9XG4gICAgLnByb21vIC5jb250YWluZXI6OmJlZm9yZSwgLnByb21vIC5jb250YWluZXI6OmFmdGVyIHtcbiAgICAgIGRpc3BsYXk6IG5vbmU7IH1cbiAgLnByb21vIGhncm91cCB7XG4gICAgd2lkdGg6IDUwJTtcbiAgICBwYWRkaW5nLWxlZnQ6IDQycHg7IH1cbiAgLnByb21vIGgyLFxuICAucHJvbW8gcCB7XG4gICAgbWF4LXdpZHRoOiA0NjBweDsgfVxuICAucHJvbW8gaDIge1xuICAgIGZvbnQtc2l6ZTogMjRweDtcbiAgICBsZXR0ZXItc3BhY2luZzogLTAuMDNlbTtcbiAgICBmb250LXdlaWdodDogNzAwO1xuICAgIG1hcmdpbi10b3A6IDA7IH1cbiAgLnByb21vIHAge1xuICAgIGZvbnQtc2l6ZTogMTZweDtcbiAgICBsaW5lLWhlaWdodDogMjRweDtcbiAgICBjb2xvcjogIzc4ODQ5NztcbiAgICBtYXJnaW4tdG9wOiAxNnB4O1xuICAgIG1hcmdpbi1ib3R0b206IDIwcHg7IH1cbiAgLnByb21vIC5idG4ge1xuICAgIGZvbnQtc2l6ZTogMTRweDtcbiAgICBmb250LXdlaWdodDogNzAwO1xuICAgIGJhY2tncm91bmQtY29sb3I6ICMyZDc5ZmY7IH1cbiAgICAucHJvbW8gLmJ0bjpob3ZlciB7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjNDQ4NmZiOyB9XG4gICAgLnByb21vIC5idG4ud2hpdGUge1xuICAgICAgYmFja2dyb3VuZDogd2hpdGU7IH1cbiAgICAgIC5wcm9tbyAuYnRuLndoaXRlOmhvdmVyIHtcbiAgICAgICAgYmFja2dyb3VuZDogd2hpdGU7IH1cbiAgLnByb21vLS1kYXJrIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjMTEyMDM3OyB9XG4gICAgLnByb21vLS1kYXJrIGgyIHtcbiAgICAgIGNvbG9yOiAjZmZmOyB9XG4gICAgLnByb21vLS1kYXJrIHAge1xuICAgICAgY29sb3I6ICNhOGIwYmU7IH1cbiAgLnByb21vX19pbGx1c3RyYXRpb24ge1xuICAgIHdpZHRoOiA0NTlweDtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgYm90dG9tOiAwO1xuICAgIGxlZnQ6IDUwJTtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTQ4MHB4KTtcbiAgICB6LWluZGV4OiAzOyB9XG4gIC5wcm9tby5wcm9tby1yZXZlcnNlZCAuY29udGFpbmVyIHtcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtc3RhcnQ7IH1cbiAgICAucHJvbW8ucHJvbW8tcmV2ZXJzZWQgLmNvbnRhaW5lciBoZ3JvdXAge1xuICAgICAgZmxleDogMTsgfVxuICAucHJvbW8gLnByb21vX19pbWFnZSB7XG4gICAgbWF4LXdpZHRoOiAxMDAlO1xuICAgIG1hcmdpbjogMzJweCAxNXB4OyB9XG4gIC5wcm9tby5wcm9tby1idG5zIGhncm91cCwgLnByb21vLnByb21vLW5ld3NsZXR0ZXIgaGdyb3VwIHtcbiAgICBmbGV4OiAxO1xuICAgIHBhZGRpbmc6IDQ2cHggMDsgfVxuICAucHJvbW8ucHJvbW8tYnRucyAuY29udGFpbmVyLCAucHJvbW8ucHJvbW8tbmV3c2xldHRlciAuY29udGFpbmVyIHtcbiAgICBwYWRkaW5nLXRvcDogMzdweDsgfVxuICAucHJvbW8ucHJvbW8tYnRucyBoMixcbiAgLnByb21vLnByb21vLWJ0bnMgcCwgLnByb21vLnByb21vLW5ld3NsZXR0ZXIgaDIsXG4gIC5wcm9tby5wcm9tby1uZXdzbGV0dGVyIHAge1xuICAgIG1heC13aWR0aDogMTAwJTsgfVxuICAucHJvbW8ucHJvbW8tYnRucyBoMiwgLnByb21vLnByb21vLW5ld3NsZXR0ZXIgaDIge1xuICAgIGZvbnQtc2l6ZTogMjhweDtcbiAgICBmb250LXdlaWdodDogNjAwO1xuICAgIG1hcmdpbi1ib3R0b206IDhweDsgfVxuICAucHJvbW8ucHJvbW8tYnRucyBwLCAucHJvbW8ucHJvbW8tbmV3c2xldHRlciBwIHtcbiAgICBtYXJnaW4tdG9wOiA4cHg7XG4gICAgZm9udC1zaXplOiAyMHB4O1xuICAgIGxldHRlci1zcGFjaW5nOiAtLjAzMWVtOyB9XG4gICAgLnByb21vLnByb21vLWJ0bnMgcDpsYXN0LWNoaWxkLCAucHJvbW8ucHJvbW8tbmV3c2xldHRlciBwOmxhc3QtY2hpbGQge1xuICAgICAgbWFyZ2luLWJvdHRvbTogMDsgfVxuICAucHJvbW8ucHJvbW8tYnRucyBoMSxcbiAgLnByb21vLnByb21vLWJ0bnMgaDIsXG4gIC5wcm9tby5wcm9tby1idG5zIGgzLCAucHJvbW8ucHJvbW8tbmV3c2xldHRlciBoMSxcbiAgLnByb21vLnByb21vLW5ld3NsZXR0ZXIgaDIsXG4gIC5wcm9tby5wcm9tby1uZXdzbGV0dGVyIGgzIHtcbiAgICBjb2xvcjogIzRhOGJmYzsgfVxuICAucHJvbW8ucHJvbW8tYnRucyAuYnRucywgLnByb21vLnByb21vLW5ld3NsZXR0ZXIgLmJ0bnMge1xuICAgIG1hcmdpbi1sZWZ0OiAyNHB4OyB9XG4gIEBtZWRpYSAobWF4LXdpZHRoOiA3NjdweCkge1xuICAgIC5wcm9tby5wcm9tby1idG5zLCAucHJvbW8ucHJvbW8tbmV3c2xldHRlciB7XG4gICAgICBwYWRkaW5nLWJvdHRvbTogNjRweDsgfVxuICAgICAgLnByb21vLnByb21vLWJ0bnMgLmJ0bnMsIC5wcm9tby5wcm9tby1uZXdzbGV0dGVyIC5idG5zIHtcbiAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyOyB9XG4gICAgICAucHJvbW8ucHJvbW8tYnRucyAuYnRuLCAucHJvbW8ucHJvbW8tbmV3c2xldHRlciAuYnRuIHtcbiAgICAgICAgbWFyZ2luLWJvdHRvbTogMTJweDsgfSB9XG4gIC5wcm9tby5wcm9tby1uZXdzbGV0dGVyIHtcbiAgICBiYWNrZ3JvdW5kOiB3aGl0ZTsgfVxuICAgIC5wcm9tby5wcm9tby1uZXdzbGV0dGVyIC5jb250YWluZXIge1xuICAgICAgcGFkZGluZy10b3A6IDZweDsgfVxuICAgIC5wcm9tby5wcm9tby1uZXdzbGV0dGVyIHN0cm9uZyB7XG4gICAgICBmb250LXdlaWdodDogNjAwOyB9XG4gICAgLnByb21vLnByb21vLW5ld3NsZXR0ZXIgLmJ0bnMge1xuICAgICAgZmxleDogMCAxIDQ3NnB4OyB9XG4gICAgICBAbWVkaWEgKG1heC13aWR0aDogOTkxcHgpIHtcbiAgICAgICAgLnByb21vLnByb21vLW5ld3NsZXR0ZXIgLmJ0bnMge1xuICAgICAgICAgIGZsZXg6IDA7IH0gfVxuICAgICAgQG1lZGlhIChtYXgtd2lkdGg6IDc2N3B4KSB7XG4gICAgICAgIC5wcm9tby5wcm9tby1uZXdzbGV0dGVyIC5idG5zIHtcbiAgICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgICAgICBtYXgtd2lkdGg6IDQ3NnB4O1xuICAgICAgICAgIG1hcmdpbi1sZWZ0OiAwOyB9IH1cbiAgQG1lZGlhIChtYXgtd2lkdGg6IDk5MXB4KSB7XG4gICAgLnByb21vX19pbGx1c3RyYXRpb24ge1xuICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC00MDBweCk7IH0gfVxuICBAbWVkaWEgKG1heC13aWR0aDogNzY3cHgpIHtcbiAgICAucHJvbW8ge1xuICAgICAgcGFkZGluZy1ib3R0b206IDI3MnB4OyB9XG4gICAgICAucHJvbW8ucHJvbW8taW5saW5lIHtcbiAgICAgICAgcGFkZGluZy1ib3R0b206IDY0cHg7IH1cbiAgICAgIC5wcm9tbyAuY29udGFpbmVyIHtcbiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47IH1cbiAgICAgIC5wcm9tbyBoZ3JvdXAge1xuICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgICAgcGFkZGluZzogMDtcbiAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyOyB9XG4gICAgICAucHJvbW8gaDIsXG4gICAgICAucHJvbW8gcCB7XG4gICAgICAgIG1hcmdpbi1sZWZ0OiBhdXRvO1xuICAgICAgICBtYXJnaW4tcmlnaHQ6IGF1dG87IH1cbiAgICAgIC5wcm9tb19faWxsdXN0cmF0aW9uIHtcbiAgICAgICAgd2lkdGg6IDM4MHB4O1xuICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTE5MHB4KTsgfSB9XG4gIC5wcm9tby0tdHJpLWN0YSB7XG4gICAgYmFja2dyb3VuZDogI0Y2RjhGQjsgfVxuICAgIC5wcm9tby0tdHJpLWN0YSB1bCB7XG4gICAgICBsaXN0LXN0eWxlOiBub25lO1xuICAgICAgbGV0dGVyLXNwYWNpbmc6IC0uMDFlbTsgfVxuICAgIC5wcm9tby0tdHJpLWN0YSBsaSB7XG4gICAgICBtYXJnaW46IDI0cHggNDhweDtcbiAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgIHdpZHRoOiBjYWxjKDMzLjMlIC0gNjRweCk7IH1cbiAgICAgIC5wcm9tby0tdHJpLWN0YSBsaTo6YWZ0ZXIge1xuICAgICAgICBjb250ZW50OiAnJztcbiAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICByaWdodDogMDtcbiAgICAgICAgcmlnaHQ6IC00OHB4O1xuICAgICAgICB0b3A6IGNhbGMoNTAlIC0gNDhweCk7XG4gICAgICAgIGhlaWdodDogOTZweDtcbiAgICAgICAgYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjREVFM0VBOyB9XG4gICAgICAucHJvbW8tLXRyaS1jdGEgbGk6Zmlyc3QtY2hpbGQge1xuICAgICAgICBtYXJnaW4tbGVmdDogMDsgfVxuICAgICAgLnByb21vLS10cmktY3RhIGxpOmxhc3QtY2hpbGQge1xuICAgICAgICBtYXJnaW4tcmlnaHQ6IDA7IH1cbiAgICAgICAgLnByb21vLS10cmktY3RhIGxpOmxhc3QtY2hpbGQ6OmFmdGVyIHtcbiAgICAgICAgICBkaXNwbGF5OiBub25lOyB9XG4gICAgLnByb21vLS10cmktY3RhIGg0IHtcbiAgICAgIGZvbnQtc2l6ZTogMjBweDtcbiAgICAgIGNvbG9yOiBibGFjaztcbiAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7IH1cbiAgICAucHJvbW8tLXRyaS1jdGEgcCB7XG4gICAgICBmb250LWZhbWlseTogXCJJbnRlclwiLCBcIkludGVyIFVJXCIsIEhlbHZldGljYSwgQXJpYWwsIHNhbnMtc2VyaWY7XG4gICAgICBsaW5lLWhlaWdodDogMjlweDtcbiAgICAgIGZvbnQtc2l6ZTogMTZweDtcbiAgICAgIGNvbG9yOiAjNzM4NDlBOyB9XG4gICAgQG1lZGlhIChtYXgtd2lkdGg6IDk5MXB4KSB7XG4gICAgICAucHJvbW8tLXRyaS1jdGEge1xuICAgICAgICBwYWRkaW5nLWJvdHRvbTogNjRweDsgfVxuICAgICAgICAucHJvbW8tLXRyaS1jdGEgbGkge1xuICAgICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgICAgIG1hcmdpbjogMDtcbiAgICAgICAgICBwYWRkaW5nOiA0OHB4IDE2cHg7XG4gICAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyOyB9XG4gICAgICAgICAgLnByb21vLS10cmktY3RhIGxpOjphZnRlciB7XG4gICAgICAgICAgICBkaXNwbGF5OiBub25lOyB9XG4gICAgICAgICAgLnByb21vLS10cmktY3RhIGxpIHAge1xuICAgICAgICAgICAgbWFyZ2luOiAwIDAgMWVtO1xuICAgICAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOyB9XG4gICAgICAgICAgLnByb21vLS10cmktY3RhIGxpIC5idG4ge1xuICAgICAgICAgICAgZGlzcGxheTogYmxvY2s7IH0gfVxuXG4ubW9iaWxlLW5hdiB7XG4gIGZvbnQtZmFtaWx5OiBcIkVpbmFcIiwgXCJIZWx2ZXRpY2EgTmV1ZVwiLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7XG4gIHRyYW5zaXRpb246IG9wYWNpdHkgMC40cztcbiAgcG9zaXRpb246IGZpeGVkO1xuICB6LWluZGV4OiA5OTk5OTtcbiAgdG9wOiAwO1xuICByaWdodDogMDtcbiAgbGVmdDogMDtcbiAgYm90dG9tOiAwO1xuICBiYWNrZ3JvdW5kOiAjZmZmO1xuICBkaXNwbGF5OiBub25lO1xuICBvdmVyZmxvdzogdG91Y2g7IH1cbiAgLm1vYmlsZS1uYXYub3BlbiB7XG4gICAgYW5pbWF0aW9uLW5hbWU6IHJldmVhbEluO1xuICAgIGFuaW1hdGlvbi1kdXJhdGlvbjogMC4ycztcbiAgICBhbmltYXRpb24tZmlsbC1tb2RlOiBmb3J3YXJkcztcbiAgICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoMC4xOSwgMSwgMC4yMiwgMSk7IH1cbiAgLm1vYmlsZS1uYXYuY2xvc2VkIHtcbiAgICBhbmltYXRpb24tbmFtZTogcmV2ZWFsT3V0O1xuICAgIGFuaW1hdGlvbi1kdXJhdGlvbjogMC4ycztcbiAgICBhbmltYXRpb24tZmlsbC1tb2RlOiBmb3J3YXJkczsgfVxuXG5Aa2V5ZnJhbWVzIHJldmVhbEluIHtcbiAgZnJvbSB7XG4gICAgb3BhY2l0eTogMDsgfVxuICB0byB7XG4gICAgb3BhY2l0eTogMTsgfSB9XG5cbkBrZXlmcmFtZXMgcmV2ZWFsT3V0IHtcbiAgZnJvbSB7XG4gICAgb3BhY2l0eTogMTsgfVxuICB0byB7XG4gICAgb3BhY2l0eTogMDsgfSB9XG5cbi5tb2JpbGUtbmF2X193cmFwcGVyIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICB3aWR0aDogMTAwJTtcbiAgaGVpZ2h0OiAxMDB2aDtcbiAgb3ZlcmZsb3c6IGF1dG87XG4gIC13ZWJraXQtb3ZlcmZsb3ctc2Nyb2xsaW5nOiB0b3VjaDsgfVxuXG4ubW9iaWxlLW5hdl9fbWVudSB7XG4gIG1hcmdpbjogMDtcbiAgcGFkZGluZzogMDtcbiAgbGlzdC1zdHlsZTogbm9uZTtcbiAgbGlzdC1zdHlsZS1pbWFnZTogdXJsKGRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQUVBQUFBQkNBUUFBQUMxSEF3Q0FBQUFDMGxFUVZSNDJtTmtZQUFBQUFZQUFqQ0IwQzhBQUFBQVNVVk9SSzVDWUlJPSk7XG4gIGxpc3Qtc3R5bGUtdHlwZTogbm9uZTtcbiAgbWF4LXdpZHRoOiAyNzBweDtcbiAgbWFyZ2luLWxlZnQ6IGF1dG87XG4gIG1hcmdpbi1yaWdodDogYXV0bztcbiAgcGFkZGluZy10b3A6IDgwcHg7XG4gIHBhZGRpbmctYm90dG9tOiAxNjBweDsgfVxuICAubW9iaWxlLW5hdl9fbWVudSBoNiB7XG4gICAgZm9udC1zaXplOiAxMXB4O1xuICAgIGZvbnQtd2VpZ2h0OiA3MDA7XG4gICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcbiAgICBsZXR0ZXItc3BhY2luZzogMC4wNWVtO1xuICAgIGNvbG9yOiAjYjBiY2NmOyB9XG4gIC5vcGVuIC5tb2JpbGUtbmF2X19tZW51IHtcbiAgICBhbmltYXRpb24tbmFtZTogbmF2TWVudUluO1xuICAgIGFuaW1hdGlvbi1kdXJhdGlvbjogMC4ycztcbiAgICBhbmltYXRpb24tZmlsbC1tb2RlOiBmb3J3YXJkcztcbiAgICBhbmltYXRpb24tZGVsYXk6IDAuMXM7XG4gICAgb3BhY2l0eTogMDsgfVxuICAuY2xvc2VkIC5tb2JpbGUtbmF2X19tZW51IHtcbiAgICBhbmltYXRpb24tbmFtZTogbmF2TWVudU91dDtcbiAgICBhbmltYXRpb24tZHVyYXRpb246IDAuMnM7XG4gICAgYW5pbWF0aW9uLWZpbGwtbW9kZTogZm9yd2FyZHM7IH1cblxuQGtleWZyYW1lcyBuYXZNZW51SW4ge1xuICBmcm9tIHtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTZweCk7XG4gICAgb3BhY2l0eTogMDsgfVxuICB0byB7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDApO1xuICAgIG9wYWNpdHk6IDE7IH0gfVxuXG5Aa2V5ZnJhbWVzIG5hdk1lbnVPdXQge1xuICBmcm9tIHtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMCk7XG4gICAgb3BhY2l0eTogMTsgfVxuICB0byB7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC02cHgpO1xuICAgIG9wYWNpdHk6IDA7IH0gfVxuXG4ubW9iaWxlLW5hdi0tZW50ZXJwcmlzZSAubW9iaWxlLW5hdl9fbWVudSB7XG4gIGhlaWdodDogMTAwJTtcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgZGlzcGxheTogZmxleDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gIHBhZGRpbmctdG9wOiAwO1xuICBwYWRkaW5nLWJvdHRvbTogMDsgfVxuXG4ubW9iaWxlLW5hdl9fbWVudWl0ZW0ge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIGZvbnQtc2l6ZTogMjRweDtcbiAgbGV0dGVyLXNwYWNpbmc6IC0wLjAyZW07XG4gIGxpbmUtaGVpZ2h0OiAxO1xuICBmb250LXdlaWdodDogNjAwO1xuICBtYXJnaW4tdG9wOiAyOHB4OyB9XG4gIC5tb2JpbGUtbmF2X19tZW51aXRlbSArIGg2IHtcbiAgICBtYXJnaW4tdG9wOiA0NnB4OyB9XG4gIC5tb2JpbGUtbmF2X19tZW51aXRlbSBhIHtcbiAgICB3aWR0aDogMTAwJTtcbiAgICBjb2xvcjogIzEzMTkyNDtcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7IH1cbiAgLm1vYmlsZS1uYXZfX21lbnVpdGVtLnBybyBhOjpiZWZvcmUge1xuICAgIGJhY2tncm91bmQtcG9zaXRpb246IDAgMDsgfVxuICAubW9iaWxlLW5hdl9fbWVudWl0ZW0ucHJvIGE6OmFmdGVyIHtcbiAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwIC0yNHB4OyB9XG4gIC5tb2JpbGUtbmF2X19tZW51aXRlbS5lbnRlcnByaXNlIGE6OmJlZm9yZSB7XG4gICAgYmFja2dyb3VuZC1wb3NpdGlvbjogMCAtMzM2cHg7IH1cbiAgLm1vYmlsZS1uYXZfX21lbnVpdGVtLmVudGVycHJpc2UgYTo6YWZ0ZXIge1xuICAgIGJhY2tncm91bmQtcG9zaXRpb246IDAgLTM2MHB4OyB9XG4gIC5tb2JpbGUtbmF2X19tZW51aXRlbS5mcmFtZXdvcmsgYTo6YmVmb3JlIHtcbiAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwIC01MjhweDsgfVxuICAubW9iaWxlLW5hdl9fbWVudWl0ZW0uZnJhbWV3b3JrIGE6OmFmdGVyIHtcbiAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwIC01NTJweDsgfVxuICAubW9iaWxlLW5hdl9fbWVudWl0ZW0uc3RlbmNpbCBhOjpiZWZvcmUge1xuICAgIGJhY2tncm91bmQtcG9zaXRpb246IDAgLTEwNTZweDsgfVxuICAubW9iaWxlLW5hdl9fbWVudWl0ZW0uc3RlbmNpbCBhOjphZnRlciB7XG4gICAgYmFja2dyb3VuZC1wb3NpdGlvbjogMCAtMTA4MHB4OyB9XG4gIC5tb2JpbGUtbmF2X19tZW51aXRlbS5jYXBhY2l0b3IgYTo6YmVmb3JlIHtcbiAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwIC0xMTA0cHg7IH1cbiAgLm1vYmlsZS1uYXZfX21lbnVpdGVtLmNhcGFjaXRvciBhOjphZnRlciB7XG4gICAgYmFja2dyb3VuZC1wb3NpdGlvbjogMCAtMTEyOHB4OyB9XG4gIC5tb2JpbGUtbmF2X19tZW51aXRlbS5pb25pY29uIGE6OmJlZm9yZSB7XG4gICAgYmFja2dyb3VuZC1wb3NpdGlvbjogMCAtMTE1MnB4OyB9XG4gIC5tb2JpbGUtbmF2X19tZW51aXRlbS5pb25pY29uIGE6OmFmdGVyIHtcbiAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwIC0xMTc2cHg7IH1cbiAgLm1vYmlsZS1uYXZfX21lbnVpdGVtLmZyYW1ld29yay1kb2NzIGE6OmJlZm9yZSB7XG4gICAgYmFja2dyb3VuZC1wb3NpdGlvbjogMCAtMTQ0MHB4OyB9XG4gIC5tb2JpbGUtbmF2X19tZW51aXRlbS5mcmFtZXdvcmstZG9jcyBhOjphZnRlciB7XG4gICAgYmFja2dyb3VuZC1wb3NpdGlvbjogMCAtMTQ2NHB4OyB9XG4gIC5tb2JpbGUtbmF2X19tZW51aXRlbS5wcm8tZG9jcyBhOjpiZWZvcmUge1xuICAgIGJhY2tncm91bmQtcG9zaXRpb246IDAgLTQ4cHg7IH1cbiAgLm1vYmlsZS1uYXZfX21lbnVpdGVtLnByby1kb2NzIGE6OmFmdGVyIHtcbiAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwIC03MnB4OyB9XG5cbi5tb2JpbGUtbmF2LS1lbnRlcnByaXNlIC5tb2JpbGUtbmF2X19tZW51aXRlbSB7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgZm9udC1zaXplOiAyOHB4O1xuICBtYXJnaW4tdG9wOiAwOyB9XG4gIC5tb2JpbGUtbmF2LS1lbnRlcnByaXNlIC5tb2JpbGUtbmF2X19tZW51aXRlbSArIC5tb2JpbGUtbmF2X19tZW51aXRlbSB7XG4gICAgbWFyZ2luLXRvcDogMzJweDsgfVxuXG4ubW9iaWxlLW5hdi0tZW50ZXJwcmlzZSAubW9iaWxlLW5hdl9fbWVudWl0ZW0tLWN0YSBhIHtcbiAgY29sb3I6ICMzODgwRkY7IH1cblxuLm1vYmlsZS1uYXZfX21lbnVpdGVtLS1zbWFsbCB7XG4gIGZvbnQtc2l6ZTogMThweDtcbiAgbGluZS1oZWlnaHQ6IDE7XG4gIGZvbnQtd2VpZ2h0OiA2MDA7XG4gIG1hcmdpbi10b3A6IDI2cHg7IH1cbiAgLm1vYmlsZS1uYXZfX21lbnVpdGVtICsgLm1vYmlsZS1uYXZfX21lbnVpdGVtLS1zbWFsbCB7XG4gICAgbWFyZ2luLXRvcDogNTZweDsgfVxuICAubW9iaWxlLW5hdl9fbWVudWl0ZW0tLXNtYWxsIGEge1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICBjb2xvcjogIzU5NzdhODsgfVxuXG4ubW9iaWxlLW5hdl9fbG9nbyB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgdG9wOiA5cHg7XG4gIGxlZnQ6IDEzcHg7XG4gIGZpbGw6ICMzODgwRkY7XG4gIHotaW5kZXg6IDI7XG4gIHdpZHRoOiAzMnB4O1xuICBoZWlnaHQ6IDMycHg7XG4gIG1hcmdpbjogMDsgfVxuXG4ubW9iaWxlLW5hdi0tZW50ZXJwcmlzZSAubW9iaWxlLW5hdl9fbG9nbyB7XG4gIGZpbGw6ICMwMDA7IH1cblxuLm1vYmlsZS1uYXZfX2Nsb3NlIHtcbiAgY3Vyc29yOiBwb2ludGVyO1xuICBwb3NpdGlvbjogZml4ZWQ7XG4gIHRvcDogMTVweDtcbiAgcmlnaHQ6IDE1cHg7XG4gIG9wYWNpdHk6IDAuNDtcbiAgdHJhbnNpdGlvbjogb3BhY2l0eSAwLjNzO1xuICB6LWluZGV4OiAyOyB9XG4gIC5tb2JpbGUtbmF2X19jbG9zZTpob3ZlciB7XG4gICAgb3BhY2l0eTogMTsgfVxuICAubW9iaWxlLW5hdl9fY2xvc2Ugc3ZnIHtcbiAgICB3aWR0aDogMTRweDtcbiAgICBoZWlnaHQ6IDE0cHg7XG4gICAgZmlsbDogIzU5NzdhODtcbiAgICBtYXJnaW46IDA7IH1cblxuLm1vYmlsZS1uYXZfX2Zvb3RlciB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmNmY4ZmU7XG4gIHBvc2l0aW9uOiBmaXhlZDtcbiAgbGVmdDogMDtcbiAgYm90dG9tOiAwO1xuICByaWdodDogMDtcbiAgcGFkZGluZzogMTRweDtcbiAgZGlzcGxheTogZmxleDtcbiAganVzdGlmeS1jb250ZW50OiBmbGV4LWVuZDsgfVxuICAubW9iaWxlLW5hdl9fZm9vdGVyIGEge1xuICAgIGZvbnQtd2VpZ2h0OiA3MDA7IH1cbiAgLm1vYmlsZS1uYXZfX2Zvb3RlciBhICsgLmJ0biB7XG4gICAgbWFyZ2luLWxlZnQ6IDEycHg7IH1cbiAgLm1vYmlsZS1uYXZfX2Zvb3RlciAuYnRuIHtcbiAgICBmb250LXNpemU6IDE1cHg7XG4gICAgZm9udC13ZWlnaHQ6IDcwMDtcbiAgICBwYWRkaW5nOiAxMnB4IDE0cHggMTBweDtcbiAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xuICAgIGJvcmRlci1yYWRpdXM6IDRweDtcbiAgICBtYXJnaW4tcmlnaHQ6IDA7IH1cbiAgLm9wZW4gLm1vYmlsZS1uYXZfX2Zvb3RlciB7XG4gICAgYW5pbWF0aW9uLW5hbWU6IG5hdkZvb3RlckluO1xuICAgIGFuaW1hdGlvbi1kdXJhdGlvbjogMC42cztcbiAgICBhbmltYXRpb24tZmlsbC1tb2RlOiBmb3J3YXJkcztcbiAgICBhbmltYXRpb24tZGVsYXk6IDAuMXM7XG4gICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKDAuMTksIDEsIDAuMjIsIDEpO1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgxMDAlKTtcbiAgICBvcGFjaXR5OiAwOyB9XG4gIC5jbG9zZWQgLm1vYmlsZS1uYXZfX2Zvb3RlciB7XG4gICAgYW5pbWF0aW9uLW5hbWU6IG5hdkZvb3Rlck91dDtcbiAgICBhbmltYXRpb24tZHVyYXRpb246IDAuMnM7XG4gICAgYW5pbWF0aW9uLWZpbGwtbW9kZTogZm9yd2FyZHM7IH1cblxuQGtleWZyYW1lcyBuYXZGb290ZXJJbiB7XG4gIGZyb20ge1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgxMDAlKTtcbiAgICBvcGFjaXR5OiAwOyB9XG4gIHRvIHtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMCk7XG4gICAgb3BhY2l0eTogMTsgfSB9XG5cbkBrZXlmcmFtZXMgbmF2Rm9vdGVyT3V0IHtcbiAgZnJvbSB7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDApO1xuICAgIG9wYWNpdHk6IDE7IH1cbiAgdG8ge1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSg2cHgpO1xuICAgIG9wYWNpdHk6IDA7IH0gfVxuXG4ubW9iaWxlLW5hdi0tZW50ZXJwcmlzZSAubW9iaWxlLW5hdl9fZm9vdGVyIHtcbiAgYmFja2dyb3VuZDogI0Y5RjlGOTtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7IH1cbiAgLm1vYmlsZS1uYXYtLWVudGVycHJpc2UgLm1vYmlsZS1uYXZfX2Zvb3RlciBhIHtcbiAgICBsaW5lLWhlaWdodDogbm9ybWFsO1xuICAgIGZvbnQtd2VpZ2h0OiA2MDA7XG4gICAgZm9udC1zaXplOiAxMXB4O1xuICAgIGxldHRlci1zcGFjaW5nOiAwLjA1ZW07XG4gICAgY29sb3I6ICMzODgwRkY7XG4gICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTsgfVxuICAubW9iaWxlLW5hdi0tZW50ZXJwcmlzZSAubW9iaWxlLW5hdl9fZm9vdGVyIGlvbi1pY29uIHtcbiAgICBjb2xvcjogcmdiYSg1NiwgMTI4LCAyNTUsIDAuNyk7XG4gICAgZm9udC1zaXplOiAxMnB4O1xuICAgIGhlaWdodDogMTJweDtcbiAgICB3aWR0aDogMTJweDtcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgdmVydGljYWwtYWxpZ246IC0ycHg7XG4gICAgb3BhY2l0eTogMDtcbiAgICB0cmFuc2l0aW9uOiAuMnMgdHJhbnNmb3JtIGVhc2UsIC4ycyBvcGFjaXR5O1xuICAgIG1hcmdpbi1yaWdodDogNHB4OyB9XG4gICAgLm1vYmlsZS1uYXYtLWVudGVycHJpc2UgLm1vYmlsZS1uYXZfX2Zvb3RlciBpb24taWNvbi5oeWRyYXRlZCB7XG4gICAgICBvcGFjaXR5OiAxOyB9XG5cbi5yZXNwb25zaXZlLWRvY3MtY29udGFpbmVyLmRvY3MtY29udGFpbmVyIHtcbiAgcGFkZGluZy10b3A6IDUwcHg7IH1cbiAgLnJlc3BvbnNpdmUtZG9jcy1jb250YWluZXIuZG9jcy1jb250YWluZXIgLnJlc3BvbnNpdmUtc2lkZS1uYXYge1xuICAgIHdpZHRoOiAzMDBweDtcbiAgICBwb3NpdGlvbjogc3RhdGljO1xuICAgIG92ZXJmbG93LXk6IGF1dG87IH1cbiAgICAucmVzcG9uc2l2ZS1kb2NzLWNvbnRhaW5lci5kb2NzLWNvbnRhaW5lciAucmVzcG9uc2l2ZS1zaWRlLW5hdi5hZmZpeC10b3Age1xuICAgICAgcG9zaXRpb246IHN0YXRpYztcbiAgICAgIHRvcDogMTgycHg7IH1cbiAgICAucmVzcG9uc2l2ZS1kb2NzLWNvbnRhaW5lci5kb2NzLWNvbnRhaW5lciAucmVzcG9uc2l2ZS1zaWRlLW5hdi5hZmZpeCB7XG4gICAgICBwb3NpdGlvbjogZml4ZWQ7XG4gICAgICB0b3A6IDE1cHg7IH1cbiAgICAucmVzcG9uc2l2ZS1kb2NzLWNvbnRhaW5lci5kb2NzLWNvbnRhaW5lciAucmVzcG9uc2l2ZS1zaWRlLW5hdi5hZmZpeC1ib3R0b20ge1xuICAgICAgcG9zaXRpb246IGZpeGVkO1xuICAgICAgdG9wOiAxNXB4ICFpbXBvcnRhbnQ7IH1cbiAgICAucmVzcG9uc2l2ZS1kb2NzLWNvbnRhaW5lci5kb2NzLWNvbnRhaW5lciAucmVzcG9uc2l2ZS1zaWRlLW5hdiAubmVzdGVkLW1lbnUge1xuICAgICAgcGFkZGluZy10b3A6IDA7XG4gICAgICBwYWRkaW5nLWxlZnQ6IDA7IH1cbiAgLnJlc3BvbnNpdmUtZG9jcy1jb250YWluZXIuZG9jcy1jb250YWluZXIgbWFpbiB7XG4gICAgbWFyZ2luLWxlZnQ6IDA7XG4gICAgcGFkZGluZy10b3A6IDA7XG4gICAgY29sb3I6ICMzNTM5NDA7XG4gICAgZm9udC13ZWlnaHQ6IDQwMDtcbiAgICBmb250LXNpemU6IDE1cHg7XG4gICAgbGluZS1oZWlnaHQ6IDI2cHg7IH1cbiAgICAucmVzcG9uc2l2ZS1kb2NzLWNvbnRhaW5lci5kb2NzLWNvbnRhaW5lciBtYWluIHAge1xuICAgICAgY29sb3I6ICMzNTM5NDA7XG4gICAgICBtYXJnaW46IDEuMmVtIDAgMS42ZW07XG4gICAgICBmb250LXdlaWdodDogNDAwO1xuICAgICAgZm9udC1zaXplOiAxNXB4O1xuICAgICAgbGluZS1oZWlnaHQ6IDI2cHg7IH1cbiAgICAucmVzcG9uc2l2ZS1kb2NzLWNvbnRhaW5lci5kb2NzLWNvbnRhaW5lciBtYWluIGgxIHtcbiAgICAgIGNvbG9yOiAjMjQyODJlO1xuICAgICAgbGluZS1oZWlnaHQ6IDEuNGVtO1xuICAgICAgbWFyZ2luOiAyZW0gMCAxZW07XG4gICAgICBmb250LXNpemU6IDI2cHg7XG4gICAgICBmb250LXdlaWdodDogNzAwO1xuICAgICAgbGV0dGVyLXNwYWNpbmc6IC0wLjAyZW07IH1cbiAgICAgIC5yZXNwb25zaXZlLWRvY3MtY29udGFpbmVyLmRvY3MtY29udGFpbmVyIG1haW4gaDE6Zmlyc3QtY2hpbGQge1xuICAgICAgICBtYXJnaW4tdG9wOiAwOyB9XG4gICAgLnJlc3BvbnNpdmUtZG9jcy1jb250YWluZXIuZG9jcy1jb250YWluZXIgbWFpbiBoMiB7XG4gICAgICBwYWRkaW5nLXRvcDogMGVtOyB9XG5cbi5yZXNvdXJjZS1jYXJkLWxpc3Qge1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LXdyYXA6IHdyYXA7XG4gIG1hcmdpbi1sZWZ0OiAtMTZweDtcbiAgbWFyZ2luLXJpZ2h0OiAtMTZweDsgfVxuXG4ucmVzb3VyY2UtY2FyZCB7XG4gIHBhZGRpbmc6IDE2cHg7XG4gIGZvbnQtZmFtaWx5OiBcIkVpbmFcIiwgXCJIZWx2ZXRpY2EgTmV1ZVwiLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7IH1cblxuLnJlc291cmNlLWNhcmQtbGlzdC0tdGhpcmQgLnJlc291cmNlLWNhcmQge1xuICB3aWR0aDogMzMuMzMlOyB9XG5cbi5yZXNvdXJjZS1jYXJkLWxpc3QtLXF1YXJ0ZXIgLnJlc291cmNlLWNhcmQge1xuICB3aWR0aDogMjUlOyB9XG5cbkBtZWRpYSAobWF4LXdpZHRoOiA5OTJweCkge1xuICAucmVzb3VyY2UtY2FyZC1saXN0IHtcbiAgICBtYXJnaW4tbGVmdDogLTEycHg7XG4gICAgbWFyZ2luLXJpZ2h0OiAtMTJweDsgfVxuICAucmVzb3VyY2UtY2FyZCB7XG4gICAgcGFkZGluZzogMTJweDsgfVxuICAucmVzb3VyY2UtY2FyZC1saXN0LS10aGlyZCAucmVzb3VyY2UtY2FyZCB7XG4gICAgd2lkdGg6IDEwMCU7IH1cbiAgLnJlc291cmNlLWNhcmQtbGlzdC0tcXVhcnRlciAucmVzb3VyY2UtY2FyZCB7XG4gICAgd2lkdGg6IDUwJTsgfSB9XG5cbkBtZWRpYSAobWF4LXdpZHRoOiA3NjhweCkge1xuICAucmVzb3VyY2UtY2FyZC1saXN0IHtcbiAgICBtYXJnaW4tbGVmdDogLThweDtcbiAgICBtYXJnaW4tcmlnaHQ6IC04cHg7IH1cbiAgLnJlc291cmNlLWNhcmQge1xuICAgIHBhZGRpbmc6IDhweDsgfSB9XG5cbkBtZWRpYSAobWF4LXdpZHRoOiA1MDBweCkge1xuICAucmVzb3VyY2UtY2FyZC1saXN0LS1xdWFydGVyIC5yZXNvdXJjZS1jYXJkIHtcbiAgICB3aWR0aDogMTAwJTsgfSB9XG5cbi5yZXNvdXJjZS1jYXJkX19pbm5lciB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgaGVpZ2h0OiAxMDAlOyB9XG5cbi5yZXNvdXJjZS1jYXJkIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gMC4zcztcbiAgaGVpZ2h0OiAyNzJweDsgfVxuICAucmVzb3VyY2UtY2FyZCBhIHtcbiAgICB0cmFuc2l0aW9uOiBib3gtc2hhZG93IDAuNHM7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgaGVpZ2h0OiAxMDAlO1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICB0b3A6IDA7XG4gICAgbGVmdDogMDtcbiAgICBwYWRkaW5nOiAxOHB4IDIycHg7XG4gICAgYm9yZGVyLXJhZGl1czogMTZweDtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjMjQyODJlO1xuICAgIGJveC1zaGFkb3c6IDBweCA4cHggMTZweCAwcHggcmdiYSgwLCAwLCAwLCAwLjEpLCAwcHggMnB4IDRweCAwcHggcmdiYSgwLCAwLCAwLCAwLjA4KTtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xuICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbiAgICBiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0O1xuICAgIGJhY2tncm91bmQtc2l6ZTogYXV0byAxMDAlO1xuICAgIGJhY2tncm91bmQtcG9zaXRpb246IGJvdHRvbSByaWdodDsgfVxuICAgIC5yZXNvdXJjZS1jYXJkIGEgLnRpdGxlIHtcbiAgICAgIGNvbG9yOiAjZmZmO1xuICAgICAgZm9udC13ZWlnaHQ6IDcwMDtcbiAgICAgIGZvbnQtc2l6ZTogMjBweDtcbiAgICAgIGxpbmUtaGVpZ2h0OiAxLjRlbTtcbiAgICAgIG1hcmdpbi10b3A6IDA7XG4gICAgICBtYXgtd2lkdGg6IDM1MHB4OyB9XG4gICAgLnJlc291cmNlLWNhcmQgYSAuZXllYnJvdyB7XG4gICAgICBmb250LXNpemU6IDEwcHg7XG4gICAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xuICAgICAgbGV0dGVyLXNwYWNpbmc6IDAuMWVtO1xuICAgICAgY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC41KTtcbiAgICAgIGZvbnQtd2VpZ2h0OiA3MDA7XG4gICAgICBtYXJnaW4tYm90dG9tOiA2cHg7XG4gICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7IH1cbiAgICAucmVzb3VyY2UtY2FyZCBhIC5hY3Rpb24ge1xuICAgICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcbiAgICAgIGZvbnQtc2l6ZTogMTRweDtcbiAgICAgIGZvbnQtd2VpZ2h0OiBib2xkO1xuICAgICAgbGV0dGVyLXNwYWNpbmc6IDAuMDhlbTtcbiAgICAgIGNvbG9yOiAjZmZmOyB9XG4gIC5yZXNvdXJjZS1jYXJkOmhvdmVyIHtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTFweCk7IH1cbiAgLnJlc291cmNlLWNhcmQ6aG92ZXIgYSB7XG4gICAgYm94LXNoYWRvdzogMHB4IDEycHggMjRweCAwcHggcmdiYSgwLCAwLCAwLCAwLjEpOyB9XG5cbi5yZXNvdXJjZS1jYXJkLS1saWdodCBhIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjsgfVxuICAucmVzb3VyY2UtY2FyZC0tbGlnaHQgYSAudGl0bGUge1xuICAgIGNvbG9yOiAjMjQyODJlOyB9XG4gIC5yZXNvdXJjZS1jYXJkLS1saWdodCBhIC5leWVicm93IHtcbiAgICBjb2xvcjogcmdiYSgwLCAwLCAwLCAwLjUpOyB9XG4gIC5yZXNvdXJjZS1jYXJkLS1saWdodCBhIC5hY3Rpb24ge1xuICAgIGNvbG9yOiAjNGE4YmZjOyB9XG5cbi5yZXNvdXJjZS1jYXJkLWxhcmdlIGEgLnRpdGxlIHtcbiAgZm9udC1zaXplOiAyNHB4O1xuICBsaW5lLWhlaWdodDogMzJweDsgfVxuXG4ucmVzb3VyY2UtY2FyZC1sYXJnZSBhIC5leWVicm93IHtcbiAgbWFyZ2luLWJvdHRvbTogMTZweDsgfVxuXG4ucmVzb3VyY2UtY2FyZC1sYXJnZSBhIC5hY3Rpb246OmFmdGVyIHtcbiAgdHJhbnNpdGlvbjogdHJhbnNmb3JtIDAuM3M7XG4gIGZvbnQtZmFtaWx5OiAnSW9uaWNvbnMnO1xuICBjb250ZW50OiAnXFxmMjg3JztcbiAgZm9udC1zaXplOiAxNnB4O1xuICBtYXJnaW4tbGVmdDogNnB4O1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7IH1cblxuLnJlc291cmNlLWNhcmQtbGFyZ2UgYTpob3ZlciAuYWN0aW9uOjphZnRlciB7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlM2QoM3B4LCAwLCAwKTsgfVxuXG4ubW9kYWwgLmNvbnRyb2wtbGFiZWwge1xuICBmb250LXdlaWdodDogNjAwOyB9XG5cbi5tb2RhbCAuZm9ybS1jb250cm9sIHtcbiAgZm9udC13ZWlnaHQ6IDUwMDsgfVxuXG4ubW9kYWwgLmNsb3NlLFxuLm1vZGFsIC5nby1iYWNrIHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB0b3A6IC0xMHB4O1xuICByaWdodDogLTEwcHg7XG4gIGJhY2tncm91bmQ6IHdoaXRlO1xuICBib3JkZXI6IDA7XG4gIGJvcmRlci1yYWRpdXM6IDUwJTtcbiAgaGVpZ2h0OiAzMHB4O1xuICB3aWR0aDogMzBweDtcbiAgYm94LXNoYWRvdzogMXB4IDFweCA1cHggcmdiYSgwLCAwLCAwLCAwLjUpO1xuICBvdXRsaW5lOiBub25lOyB9XG4gIC5tb2RhbCAuY2xvc2U6OmJlZm9yZSxcbiAgLm1vZGFsIC5nby1iYWNrOjpiZWZvcmUge1xuICAgIGZvbnQtZmFtaWx5OiAnSW9uaWNvbnMnO1xuICAgIGNvbnRlbnQ6ICdcXGYyYzAnO1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIGNvbG9yOiAjNTc2MDcwO1xuICAgIGZvbnQtc2l6ZTogMjBweDsgfVxuICAubW9kYWwgLmNsb3NlIHNwYW4sXG4gIC5tb2RhbCAuZ28tYmFjayBzcGFuIHtcbiAgICBkaXNwbGF5OiBub25lOyB9XG5cbi5tb2RhbCAuZ28tYmFjayB7XG4gIHJpZ2h0OiBhdXRvO1xuICBsZWZ0OiAtMTBweDsgfVxuICAubW9kYWwgLmdvLWJhY2s6OmJlZm9yZSB7XG4gICAgY29udGVudDogJ1xcZjI3ZCc7IH1cblxuLm1vZGFsLmZ1bGxzY3JlZW4gLmNvbnRhaW5lciB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTsgfVxuXG4ubW9kYWwuZnVsbHNjcmVlbiAuY2xvc2Uge1xuICByaWdodDogMzZweDtcbiAgdG9wOiAyN3B4O1xuICBib3gtc2hhZG93OiBub25lO1xuICBiYWNrZ3JvdW5kOiAjZWJlZmY1OyB9XG4gIC5tb2RhbC5mdWxsc2NyZWVuIC5jbG9zZTo6YmVmb3JlIHtcbiAgICBjb2xvcjogIzgzOGZhNTsgfVxuXG4ubW9kYWwuZnVsbHNjcmVlbiAubW9kYWwtZGlhbG9nIHtcbiAgd2lkdGg6IDY1MXB4O1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgwLCAtMTAlKTtcbiAgdHJhbnNpdGlvbjogdHJhbnNmb3JtIDAuNXMgY3ViaWMtYmV6aWVyKDAsIDAsIDAsIDEpOyB9XG5cbi5tb2RhbC5mdWxsc2NyZWVuLmluIC5tb2RhbC1kaWFsb2cge1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgwLCAwKTsgfVxuXG4ubW9kYWwuZnVsbHNjcmVlbiAubW9kYWwtY29udGVudCB7XG4gIGJveC1zaGFkb3c6IG5vbmU7XG4gIGJvcmRlcjogMDtcbiAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7IH1cblxuLnNpdGUtc2VhcmNoIHtcbiAgZm9udC1mYW1pbHk6IFwiRWluYVwiLCBcIkhlbHZldGljYSBOZXVlXCIsIEhlbHZldGljYSwgc2Fucy1zZXJpZjtcbiAgZGlzcGxheTogZmxleDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgbWFyZ2luLXJpZ2h0OiAxNnB4OyB9XG5cbi5zaXRlLXNlYXJjaF9fdHJpZ2dlciB7XG4gIGN1cnNvcjogcG9pbnRlcjsgfVxuICAuc2l0ZS1zZWFyY2hfX3RyaWdnZXIgc3ZnIHtcbiAgICB0cmFuc2l0aW9uOiBmaWxsIDAuMnM7XG4gICAgbWFyZ2luOiAwO1xuICAgIGZpbGw6ICNhOGIwYmU7XG4gICAgd2lkdGg6IDE2cHg7XG4gICAgaGVpZ2h0OiAxNnB4OyB9XG4gIC5zaXRlLXNlYXJjaF9fdHJpZ2dlcjpob3ZlciBzdmcge1xuICAgIGZpbGw6ICM2MDZjODI7IH1cblxuLnNpdGUtc2VhcmNoX19pbnB1dCB7XG4gIGRpc3BsYXk6IG5vbmU7IH1cblxuI3NuYXAtYmFyIHtcbiAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KHRvIHJpZ2h0LCAjMDcwOTBlLCAjMmY0NTYyKTtcbiAgY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC41KTtcbiAgcGFkZGluZzogMTNweCAxMHB4IDlweDtcbiAgZm9udC13ZWlnaHQ6IDUwMDtcbiAgZm9udC1zaXplOiAxM3B4O1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIHotaW5kZXg6IDEwO1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIGxldHRlci1zcGFjaW5nOiAuMDA0ZW07IH1cbiAgI3NuYXAtYmFyIHN0cm9uZyB7XG4gICAgbWFyZ2luLXJpZ2h0OiAzcHg7XG4gICAgZm9udC1zaXplOiAxM3B4O1xuICAgIGxldHRlci1zcGFjaW5nOiAuMDA0ZW07XG4gICAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgICBjb2xvcjogd2hpdGU7IH1cbiAgI3NuYXAtYmFyIC5sb2FkaW5nIHtcbiAgICB3aWR0aDogMTZweDtcbiAgICBtYXJnaW4tcmlnaHQ6IDVweDtcbiAgICB2ZXJ0aWNhbC1hbGlnbjogdGV4dC1ib3R0b207IH1cbiAgI3NuYXAtYmFyIGEge1xuICAgIG1hcmdpbi1sZWZ0OiAxNXB4O1xuICAgIGJhY2tncm91bmQ6ICMwYTBmMTY7XG4gICAgY29sb3I6ICM2YWIwZmY7XG4gICAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgICBwYWRkaW5nOiA2cHggN3B4IDVweCAxMnB4O1xuICAgIGZvbnQtc2l6ZTogMTBweDtcbiAgICBsZXR0ZXItc3BhY2luZzogLjA5ZW07XG4gICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcbiAgICBib3JkZXItcmFkaXVzOiAxMHB4O1xuICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbiAgICB0cmFuc2l0aW9uOiAuMnMgY29sb3I7IH1cbiAgICAjc25hcC1iYXIgYTpob3ZlciB7XG4gICAgICBjb2xvcjogd2hpdGU7XG4gICAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7IH1cbiAgI3NuYXAtYmFyIGkge1xuICAgIGZvbnQtc2l6ZTogMTNweDtcbiAgICB2ZXJ0aWNhbC1hbGlnbjogLTFweDsgfVxuICAjc25hcC1iYXIgKyAubmF2YmFyIHtcbiAgICBtYXJnaW4tdG9wOiA2cHg7IH1cbiAgICBAbWVkaWEgKG1heC13aWR0aDogNzY3cHgpIHtcbiAgICAgICNzbmFwLWJhciArIC5uYXZiYXIge1xuICAgICAgICBtYXJnaW4tdG9wOiAwO1xuICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICAgIG1pbi1oZWlnaHQ6IDQ4cHg7IH0gfVxuXG5ib2R5LmRvY3MgI3NuYXAtYmFyICsgLm5hdmJhciB7XG4gIG1hcmdpbi10b3A6IDA7IH1cbiAgQG1lZGlhIChtYXgtd2lkdGg6IDc2N3B4KSB7XG4gICAgYm9keS5kb2NzICNzbmFwLWJhciArIC5uYXZiYXIge1xuICAgICAgcGFkZGluZy10b3A6IDA7IH0gfVxuXG5ib2R5Lmhhcy1zbmFwIHtcbiAgbWFyZ2luLXRvcDogMDsgfVxuICBib2R5Lmhhcy1zbmFwIC5zaWRlLW5hdi5hZmZpeC10b3Age1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICB0b3A6IDM4cHg7IH1cbiAgQG1lZGlhIChtYXgtd2lkdGg6IDc2N3B4KSB7XG4gICAgYm9keS5oYXMtc25hcCB7XG4gICAgICBtYXJnaW4tdG9wOiAwOyB9IH1cblxuYm9keS5kb2NzICNzbmFwLWJhciB+IC5kb2NzLWNvbnRhaW5lciAuc2lkZS1uYXYge1xuICBwYWRkaW5nLXRvcDogMzZweDsgfVxuXG5pb25pYy1zbmFwLWJhcjpub3QoLmh5ZHJhdGVkKSB7XG4gIGRpc3BsYXk6IG5vbmU7IH1cblxuQG1lZGlhIChtYXgtd2lkdGg6IDc2N3B4KSB7XG4gIGlvbmljLXNuYXAtYmFyIHtcbiAgICBkaXNwbGF5OiBub25lOyB9IH1cblxuI3NvY2lhbC1zaGFyZS1zaWRlYmFyIHtcbiAgcmlnaHQ6IGF1dG87XG4gIGxlZnQ6IDUwcHg7XG4gIGNvbG9yOiAjYmFjMmNmO1xuICB3aWR0aDogMjAwcHg7XG4gIHBvc2l0aW9uOiBmaXhlZDtcbiAgdG9wOiAyMDBweDtcbiAgb3BhY2l0eTogMDtcbiAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG4gIHRyYW5zaXRpb246IC41cyBvcGFjaXR5OyB9XG4gIEBtZWRpYSAobWF4LXdpZHRoOiAxMTIwcHgpIHtcbiAgICAjc29jaWFsLXNoYXJlLXNpZGViYXIge1xuICAgICAgZGlzcGxheTogbm9uZTsgfSB9XG4gICNzb2NpYWwtc2hhcmUtc2lkZWJhci5hZmZpeCB7XG4gICAgcG9zaXRpb246IGZpeGVkO1xuICAgIHRvcDogMjAwcHg7XG4gICAgb3BhY2l0eTogMTtcbiAgICBwb2ludGVyLWV2ZW50czogYWxsOyB9XG4gICNzb2NpYWwtc2hhcmUtc2lkZWJhciBoNCB7XG4gICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcbiAgICBsZXR0ZXItc3BhY2luZzogMC4xZW07XG4gICAgZm9udC1zaXplOiAxMHB4O1xuICAgIGZvbnQtd2VpZ2h0OiA3MDA7XG4gICAgY29sb3I6ICNiYWMyY2Y7XG4gICAgbWFyZ2luLWJvdHRvbTogMTVweDtcbiAgICBvcGFjaXR5OiAwO1xuICAgIGFuaW1hdGlvbjogLjVzIGZhZGVJbiBsaW5lYXIgM3M7XG4gICAgYW5pbWF0aW9uLWZpbGwtbW9kZTogZm9yd2FyZHM7IH1cbiAgI3NvY2lhbC1zaGFyZS1zaWRlYmFyIHVsIHtcbiAgICBsaXN0LXN0eWxlOiBub25lO1xuICAgIHBhZGRpbmctbGVmdDogMDsgfVxuICAjc29jaWFsLXNoYXJlLXNpZGViYXIgbGkge1xuICAgIG9wYWNpdHk6IDA7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDIwcHgpO1xuICAgIGFuaW1hdGlvbjogLjVzIGZhZGVJblVwIGxpbmVhciAzLjVzO1xuICAgIGFuaW1hdGlvbi1maWxsLW1vZGU6IGZvcndhcmRzOyB9XG4gICAgI3NvY2lhbC1zaGFyZS1zaWRlYmFyIGxpOm50aC1jaGlsZCgyKSB7XG4gICAgICBhbmltYXRpb24tZGVsYXk6IDMuOHM7IH1cbiAgICAjc29jaWFsLXNoYXJlLXNpZGViYXIgbGk6bnRoLWNoaWxkKDMpIHtcbiAgICAgIGFuaW1hdGlvbi1kZWxheTogNC4xczsgfVxuICAgICNzb2NpYWwtc2hhcmUtc2lkZWJhciBsaTpudGgtY2hpbGQoNCkge1xuICAgICAgYW5pbWF0aW9uLWRlbGF5OiA0LjNzOyB9XG4gICNzb2NpYWwtc2hhcmUtc2lkZWJhciBhIHtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgd2lkdGg6IDIwcHg7XG4gICAgaGVpZ2h0OiAyMHB4O1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICBtYXJnaW4tYm90dG9tOiAxOHB4O1xuICAgIG1hcmdpbi1sZWZ0OiA4cHg7IH1cbiAgICAjc29jaWFsLXNoYXJlLXNpZGViYXIgYTo6YmVmb3JlLCAjc29jaWFsLXNoYXJlLXNpZGViYXIgYTo6YWZ0ZXIge1xuICAgICAgYmFja2dyb3VuZDogdXJsKFwiL2ltZy9zdXJ2ZXkvYmxvZy1zaGFyZS1pY29ucy5wbmdcIikgbm8tcmVwZWF0IDAgMDtcbiAgICAgIGJhY2tncm91bmQtc2l6ZTogMjBweDtcbiAgICAgIHdpZHRoOiAyMHB4O1xuICAgICAgaGVpZ2h0OiAyMHB4O1xuICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICBjb250ZW50OiAnJztcbiAgICAgIHRyYW5zaXRpb246IDAuMnMgb3BhY2l0eTsgfVxuICAgICNzb2NpYWwtc2hhcmUtc2lkZWJhciBhOjphZnRlciB7XG4gICAgICBvcGFjaXR5OiAwO1xuICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgdG9wOiAwO1xuICAgICAgcmlnaHQ6IDA7XG4gICAgICBib3R0b206IDA7XG4gICAgICBsZWZ0OiAwOyB9XG4gICAgI3NvY2lhbC1zaGFyZS1zaWRlYmFyIGE6aG92ZXI6OmFmdGVyIHtcbiAgICAgIG9wYWNpdHk6IDE7IH1cbiAgICAjc29jaWFsLXNoYXJlLXNpZGViYXIgYS50d2l0dGVyOjphZnRlciB7XG4gICAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwIC0yMHB4OyB9XG4gICAgI3NvY2lhbC1zaGFyZS1zaWRlYmFyIGEuZmFjZWJvb2s6OmJlZm9yZSB7XG4gICAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwIC00MHB4OyB9XG4gICAgI3NvY2lhbC1zaGFyZS1zaWRlYmFyIGEuZmFjZWJvb2s6OmFmdGVyIHtcbiAgICAgIGJhY2tncm91bmQtcG9zaXRpb246IDAgLTYwcHg7IH1cbiAgICAjc29jaWFsLXNoYXJlLXNpZGViYXIgYS5nb29nbGUtcGx1czo6YmVmb3JlIHtcbiAgICAgIGJhY2tncm91bmQtcG9zaXRpb246IDAgLTgwcHg7IH1cbiAgICAjc29jaWFsLXNoYXJlLXNpZGViYXIgYS5nb29nbGUtcGx1czo6YWZ0ZXIge1xuICAgICAgYmFja2dyb3VuZC1wb3NpdGlvbjogMCAtMTAwcHg7IH1cbiAgICAjc29jaWFsLXNoYXJlLXNpZGViYXIgYS5idWZmZXI6OmJlZm9yZSB7XG4gICAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwIC0xMjBweDsgfVxuICAgICNzb2NpYWwtc2hhcmUtc2lkZWJhciBhLmJ1ZmZlcjo6YWZ0ZXIge1xuICAgICAgYmFja2dyb3VuZC1wb3NpdGlvbjogMCAtMTQwcHg7IH1cblxuLnJvdW5kZWQtdGFicyB7XG4gIGJhY2tncm91bmQ6IG5vbmU7XG4gIG1hcmdpbjogMCAwIDAgLTIwcHg7XG4gIHBhZGRpbmc6IDA7XG4gIGRpc3BsYXk6IGZsZXg7IH1cbiAgQG1lZGlhIChtYXgtd2lkdGg6IDc2N3B4KSB7XG4gICAgLnJvdW5kZWQtdGFicyB7XG4gICAgICBtYXJnaW46IDA7XG4gICAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG4gICAgICBtYXgtd2lkdGg6IDQ2MHB4O1xuICAgICAgbWFyZ2luLWxlZnQ6IGF1dG87XG4gICAgICBtYXJnaW4tcmlnaHQ6IGF1dG87IH0gfVxuXG4ucm91bmRlZC10YWJzX190YWIge1xuICBwYWRkaW5nOiAwO1xuICBkaXNwbGF5OiBmbGV4O1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIG1heC13aWR0aDogMTAwJTtcbiAgbWFyZ2luOiAwOyB9XG4gIC5yb3VuZGVkLXRhYnNfX3RhYjo6YmVmb3JlLCAucm91bmRlZC10YWJzX190YWI6OmFmdGVyIHtcbiAgICBjb250ZW50OiAnJztcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgICBvcGFjaXR5OiAwO1xuICAgIHdpZHRoOiA1NnB4O1xuICAgIGhlaWdodDogNjRweDtcbiAgICBmbGV4OiAwIDAgNTZweDtcbiAgICBiYWNrZ3JvdW5kLXNpemU6IDU2cHggNjRweDtcbiAgICBiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0OyB9XG4gIC5yb3VuZGVkLXRhYnNfX3RhYjo6YmVmb3JlIHtcbiAgICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXCIvaW1nL2dldHRpbmctc3RhcnRlZC90YWItYm9yZGVyLWxlZnQucG5nXCIpOyB9XG4gIC5yb3VuZGVkLXRhYnNfX3RhYjo6YWZ0ZXIge1xuICAgIGJhY2tncm91bmQtaW1hZ2U6IHVybChcIi9pbWcvZ2V0dGluZy1zdGFydGVkL3RhYi1ib3JkZXItcmlnaHQucG5nXCIpOyB9XG4gIC5yb3VuZGVkLXRhYnNfX3RhYiArIC5yb3VuZGVkLXRhYnNfX3RhYiB7XG4gICAgbWFyZ2luLWxlZnQ6IC01NHB4OyB9XG4gIEBtZWRpYSAobWF4LXdpZHRoOiA3NjdweCkge1xuICAgIC5yb3VuZGVkLXRhYnNfX3RhYiB7XG4gICAgICB0cmFuc2l0aW9uOiBib3JkZXIgMC4zcztcbiAgICAgIGJvcmRlci1ib3R0b206IDRweCBzb2xpZCB0cmFuc3BhcmVudDsgfVxuICAgICAgLnJvdW5kZWQtdGFic19fdGFiOjpiZWZvcmUsIC5yb3VuZGVkLXRhYnNfX3RhYjo6YWZ0ZXIge1xuICAgICAgICBkaXNwbGF5OiBub25lOyB9XG4gICAgICAucm91bmRlZC10YWJzX190YWIgKyAucm91bmRlZC10YWJzX190YWIge1xuICAgICAgICBtYXJnaW4tbGVmdDogMjhweDsgfSB9XG5cbi5yb3VuZGVkLXRhYnNfX3RhYi1pbm5lciB7XG4gIGZvbnQtc2l6ZTogMTZweDtcbiAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgbGV0dGVyLXNwYWNpbmc6IC0wLjAyZW07XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGhlaWdodDogNjRweDtcbiAgbWFyZ2luLWxlZnQ6IC0xcHg7XG4gIG1hcmdpbi1yaWdodDogLTFweDtcbiAgcGFkZGluZzogMCAycHg7XG4gIGZsZXg6IDAgMCBhdXRvO1xuICBjdXJzb3I6IHBvaW50ZXI7XG4gIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xuICBjb2xvcjogI0Q1RUFGRjsgfVxuICAucm91bmRlZC10YWJzX190YWItaW5uZXIgc3ZnIHtcbiAgICBtYXJnaW4tcmlnaHQ6IDhweDtcbiAgICBmbGV4OiAwIDAgMjBweDsgfVxuICAucm91bmRlZC10YWJzX190YWItaW5uZXIgc3BhbiB7XG4gICAgZmxleDogMCAwIGF1dG87IH1cbiAgLnJvdW5kZWQtdGFic19fdGFiLWlubmVyIC5mcm9udCB7XG4gICAgZmlsbDogI0UxRjBGRjsgfVxuICAucm91bmRlZC10YWJzX190YWItaW5uZXIgLm1pZGRsZSB7XG4gICAgZmlsbDogIzhEQzBGRjsgfVxuICAucm91bmRlZC10YWJzX190YWItaW5uZXIgLmJhY2sge1xuICAgIGZpbGw6ICM2RkFERkY7IH1cbiAgLnJvdW5kZWQtdGFic19fdGFiLWlubmVyIC5mcm9udC0tYm9yZGVyIHtcbiAgICBzdHJva2U6ICM0RDkyRkY7IH1cbiAgLnJvdW5kZWQtdGFic19fdGFiLWlubmVyIC5taWRkbGUtLWJvcmRlciB7XG4gICAgc3Ryb2tlOiAjNEQ5M0ZGOyB9XG4gIC5yb3VuZGVkLXRhYnNfX3RhYi1pbm5lcjpob3ZlciB7XG4gICAgdHJhbnNpdGlvbjogY29sb3IgMC4ycztcbiAgICBjb2xvcjogI2ZmZjsgfVxuICAgIC5yb3VuZGVkLXRhYnNfX3RhYi1pbm5lcjpob3ZlciAuZnJvbnQge1xuICAgICAgZmlsbDogI2ZmZjsgfVxuICBAbWVkaWEgKG1heC13aWR0aDogNzY3cHgpIHtcbiAgICAucm91bmRlZC10YWJzX190YWItaW5uZXIge1xuICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICAgIGZvbnQtc2l6ZTogMTRweDtcbiAgICAgIGhlaWdodDogYXV0bztcbiAgICAgIHBhZGRpbmctYm90dG9tOiAxNHB4O1xuICAgICAgZmxleDogMTtcbiAgICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICAgIGxpbmUtaGVpZ2h0OiAxNnB4OyB9XG4gICAgICAucm91bmRlZC10YWJzX190YWItaW5uZXIgc3ZnIHtcbiAgICAgICAgbWFyZ2luOiA4cHggMCAxMHB4OyB9IH1cblxuLnJvdW5kZWQtdGFic19fdGFiLS1hY3RpdmUge1xuICBwb2ludGVyLWV2ZW50czogbm9uZTsgfVxuICBAbWVkaWEgKG1pbi13aWR0aDogNzY4cHgpIHtcbiAgICAucm91bmRlZC10YWJzX190YWItLWFjdGl2ZTo6YmVmb3JlLCAucm91bmRlZC10YWJzX190YWItLWFjdGl2ZTo6YWZ0ZXIge1xuICAgICAgb3BhY2l0eTogMTsgfVxuICAgIC5yb3VuZGVkLXRhYnNfX3RhYi0tYWN0aXZlIC5yb3VuZGVkLXRhYnNfX3RhYi1pbm5lcixcbiAgICAucm91bmRlZC10YWJzX190YWItLWFjdGl2ZSAucm91bmRlZC10YWJzX190YWItaW5uZXI6aG92ZXIge1xuICAgICAgYmFja2dyb3VuZDogI2ZmZjtcbiAgICAgIGNvbG9yOiAjMTYxQTFGOyB9XG4gICAgICAucm91bmRlZC10YWJzX190YWItLWFjdGl2ZSAucm91bmRlZC10YWJzX190YWItaW5uZXIgLmZyb250LFxuICAgICAgLnJvdW5kZWQtdGFic19fdGFiLS1hY3RpdmUgLnJvdW5kZWQtdGFic19fdGFiLWlubmVyOmhvdmVyIC5mcm9udCB7XG4gICAgICAgIGZpbGw6ICMzODgwRkY7IH1cbiAgICAucm91bmRlZC10YWJzX190YWItLWFjdGl2ZSAuZnJvbnQge1xuICAgICAgZmlsbDogIzM4ODBGRjsgfVxuICAgIC5yb3VuZGVkLXRhYnNfX3RhYi0tYWN0aXZlIC5taWRkbGUge1xuICAgICAgZmlsbDogI0IxRDlGRjsgfVxuICAgIC5yb3VuZGVkLXRhYnNfX3RhYi0tYWN0aXZlIC5iYWNrIHtcbiAgICAgIGZpbGw6ICNDRkU3RkY7IH1cbiAgICAucm91bmRlZC10YWJzX190YWItLWFjdGl2ZSAuZnJvbnQtLWJvcmRlcixcbiAgICAucm91bmRlZC10YWJzX190YWItLWFjdGl2ZSAubWlkZGxlLS1ib3JkZXIge1xuICAgICAgc3Ryb2tlOiAjZmZmOyB9IH1cbiAgQG1lZGlhIChtYXgtd2lkdGg6IDc2N3B4KSB7XG4gICAgLnJvdW5kZWQtdGFic19fdGFiLS1hY3RpdmUge1xuICAgICAgYm9yZGVyLWJvdHRvbTogNHB4IHNvbGlkIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC44KTsgfVxuICAgICAgLnJvdW5kZWQtdGFic19fdGFiLS1hY3RpdmUgLnJvdW5kZWQtdGFic19fdGFiLWlubmVyIHtcbiAgICAgICAgY29sb3I6ICNmZmY7IH1cbiAgICAgICAgLnJvdW5kZWQtdGFic19fdGFiLS1hY3RpdmUgLnJvdW5kZWQtdGFic19fdGFiLWlubmVyIC5mcm9udCB7XG4gICAgICAgICAgZmlsbDogI2ZmZjsgfSB9XG5cbiNwYWdlLXByaWNpbmcgLnRhYi1jb250ZW50LFxuI3BhZ2UtZ2V0dGluZy1zdGFydGVkIC50YWItY29udGVudCB7XG4gIGRpc3BsYXk6IG5vbmU7IH1cbiAgI3BhZ2UtcHJpY2luZyAudGFiLWNvbnRlbnQtLWFjdGl2ZSxcbiAgI3BhZ2UtZ2V0dGluZy1zdGFydGVkIC50YWItY29udGVudC0tYWN0aXZlIHtcbiAgICBkaXNwbGF5OiBibG9jazsgfVxuXG4udGFnLFxuLmRvY3MtY29udGFpbmVyIG1haW4gLnRhZyB7XG4gIGJhY2tncm91bmQ6ICM0YThiZmM7XG4gIG1hcmdpbi1sZWZ0OiAxMHB4O1xuICBwYWRkaW5nOiA1cHggN3B4IDRweDtcbiAgYm9yZGVyLXJhZGl1czogNHB4O1xuICBjb2xvcjogd2hpdGU7XG4gIGZvbnQtd2VpZ2h0OiA3MDA7XG4gIGZvbnQtc2l6ZTogMTBweDtcbiAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcbiAgbGV0dGVyLXNwYWNpbmc6IC41cHg7IH1cbiAgLnRhZy5ncmV5LFxuICAuZG9jcy1jb250YWluZXIgbWFpbiAudGFnLmdyZXkge1xuICAgIGJhY2tncm91bmQ6ICM4OTg5ODk7IH1cblxuLnRlc3RpbW9uaWFsLXNsaWRlcyB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgdHJhbnNpdGlvbjogaGVpZ2h0IDAuNHM7IH1cbiAgQG1lZGlhIChtYXgtd2lkdGg6IDk5MXB4KSB7XG4gICAgLnRlc3RpbW9uaWFsLXNsaWRlcyB7XG4gICAgICBtaW4taGVpZ2h0OiAzNjBweDsgfSB9XG4gIEBtZWRpYSAobWF4LXdpZHRoOiA1NjBweCkge1xuICAgIC50ZXN0aW1vbmlhbC1zbGlkZXMge1xuICAgICAgbWluLWhlaWdodDogNDAwcHg7IH0gfVxuICAudGVzdGltb25pYWwtc2xpZGVzIC5zbGlkZSB7XG4gICAgcGFkZGluZzogOTBweCAwIDE0NnB4O1xuICAgIHRvcDogMDtcbiAgICBsZWZ0OiAwO1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIGhlaWdodDogMTAwJTsgfVxuICAgIC50ZXN0aW1vbmlhbC1zbGlkZXMgLnNsaWRlIGg1IHtcbiAgICAgIGNvbG9yOiAjZmZmO1xuICAgICAgZm9udC1zaXplOiAyMHB4O1xuICAgICAgbGluZS1oZWlnaHQ6IDMycHg7XG4gICAgICBsZXR0ZXItc3BhY2luZzogLTAuMDJlbTtcbiAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7XG4gICAgICBtYXJnaW46IDQwcHggMDsgfVxuICAgIC50ZXN0aW1vbmlhbC1zbGlkZXMgLnNsaWRlIC5hdHRyaWJ1dGlvbiB7XG4gICAgICBmb250LXNpemU6IDE0cHg7XG4gICAgICBmb250LXdlaWdodDogNjAwO1xuICAgICAgbGV0dGVyLXNwYWNpbmc6IC0wLjAyZW07IH1cbiAgICAgIC50ZXN0aW1vbmlhbC1zbGlkZXMgLnNsaWRlIC5hdHRyaWJ1dGlvbiBiIHtcbiAgICAgICAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgICAgICAgY29sb3I6ICNmZmY7XG4gICAgICAgIG1hcmdpbi1yaWdodDogOHB4OyB9XG4gICAgLnRlc3RpbW9uaWFsLXNsaWRlcyAuc2xpZGUgaGdyb3VwIHtcbiAgICAgIHdpZHRoOiA1MCU7XG4gICAgICBwYWRkaW5nLXJpZ2h0OiA3NHB4OyB9XG4gICAgLnRlc3RpbW9uaWFsLXNsaWRlcyAuc2xpZGUgLnNsaWRlX190b3BiYXIge1xuICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcbiAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7IH1cbiAgICAudGVzdGltb25pYWwtc2xpZGVzIC5zbGlkZSAuc2xpZGVfX2N0YSB7XG4gICAgICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kIDAuM3M7XG4gICAgICBwYWRkaW5nOiA0cHggOHB4IDNweDtcbiAgICAgIGJvcmRlci1yYWRpdXM6IDEwMHB4O1xuICAgICAgZGlzcGxheTogaW5saW5lLWZsZXg7XG4gICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgICAgIGZvbnQtc2l6ZTogMTJweDtcbiAgICAgIGxpbmUtaGVpZ2h0OiAxMnB4O1xuICAgICAgbGV0dGVyLXNwYWNpbmc6IC0wLjAyZW07XG4gICAgICBjdXJzb3I6IHBvaW50ZXI7IH1cbiAgICAgIC50ZXN0aW1vbmlhbC1zbGlkZXMgLnNsaWRlIC5zbGlkZV9fY3RhIGIge1xuICAgICAgICBmb250LXdlaWdodDogNjAwO1xuICAgICAgICBjb2xvcjogI2ZmZjtcbiAgICAgICAgbWFyZ2luLWxlZnQ6IDRweDsgfVxuICAgICAgLnRlc3RpbW9uaWFsLXNsaWRlcyAuc2xpZGUgLnNsaWRlX19jdGEgc3ZnIHtcbiAgICAgICAgdHJhbnNpdGlvbjogZmlsbCAwLjJzO1xuICAgICAgICBkaXNwbGF5OiBpbmxpbmU7XG4gICAgICAgIHdpZHRoOiAxMnB4O1xuICAgICAgICBoZWlnaHQ6IDEycHg7XG4gICAgICAgIG1hcmdpbjogMDtcbiAgICAgICAgZmlsbDogI2ZmZjsgfVxuICAgICAgLnRlc3RpbW9uaWFsLXNsaWRlcyAuc2xpZGUgLnNsaWRlX19jdGEgc3ZnOmZpcnN0LWNoaWxkIHtcbiAgICAgICAgd2lkdGg6IDE4cHg7XG4gICAgICAgIGhlaWdodDogMThweDtcbiAgICAgICAgbWFyZ2luLXJpZ2h0OiA2cHg7IH1cbiAgICAgIC50ZXN0aW1vbmlhbC1zbGlkZXMgLnNsaWRlIC5zbGlkZV9fY3RhOmhvdmVyIHN2ZzpsYXN0LWNoaWxkIHtcbiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKDFweCk7IH1cbiAgICBAbWVkaWEgKG1heC13aWR0aDogOTkxcHgpIHtcbiAgICAgIC50ZXN0aW1vbmlhbC1zbGlkZXMgLnNsaWRlIHtcbiAgICAgICAgcGFkZGluZzogMzJweCAwIDEwNnB4OyB9XG4gICAgICAgIC50ZXN0aW1vbmlhbC1zbGlkZXMgLnNsaWRlIC5zbGlkZV9fdG9wYmFyIHtcbiAgICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uLXJldmVyc2U7XG4gICAgICAgICAgYWxpZ24taXRlbXM6IGZsZXgtc3RhcnQ7IH1cbiAgICAgICAgLnRlc3RpbW9uaWFsLXNsaWRlcyAuc2xpZGUgLnNsaWRlX19jdGEge1xuICAgICAgICAgIG1hcmdpbi1ib3R0b206IDMwcHg7IH1cbiAgICAgICAgLnRlc3RpbW9uaWFsLXNsaWRlcyAuc2xpZGUgaDUge1xuICAgICAgICAgIG1hcmdpbjogMjBweCAwOyB9XG4gICAgICAgIC50ZXN0aW1vbmlhbC1zbGlkZXMgLnNsaWRlIGhncm91cCB7XG4gICAgICAgICAgcGFkZGluZy1yaWdodDogMjRweDsgfSB9XG4gICAgQG1lZGlhIChtYXgtd2lkdGg6IDk5MXB4KSB7XG4gICAgICAudGVzdGltb25pYWwtc2xpZGVzIC5zbGlkZSBoZ3JvdXAge1xuICAgICAgICB3aWR0aDogMTAwJTsgfVxuICAgICAgLnRlc3RpbW9uaWFsLXNsaWRlcyAuc2xpZGUgLnNsaWRlX190b3BiYXIge1xuICAgICAgICBmbGV4LWRpcmVjdGlvbjogcm93OyB9XG4gICAgICAudGVzdGltb25pYWwtc2xpZGVzIC5zbGlkZSBoNSB7XG4gICAgICAgIG1hcmdpbjogMzBweCAwOyB9IH1cbiAgICBAbWVkaWEgKG1heC13aWR0aDogNTYwcHgpIHtcbiAgICAgIC50ZXN0aW1vbmlhbC1zbGlkZXMgLnNsaWRlIC5zbGlkZV9fdG9wYmFyIHtcbiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbi1yZXZlcnNlOyB9IH1cbiAgLnRlc3RpbW9uaWFsLXNsaWRlcyAuc2xpZGUtLWFpcmJ1cyAubG9nbyB7XG4gICAgYmFja2dyb3VuZDogdXJsKFwiL2ltZy90ZXN0aW1vbmlhbHMvbG9nby1zcHJpdGUucG5nXCIpIG5vLXJlcGVhdCAwIC0zOHB4O1xuICAgIGJhY2tncm91bmQtc2l6ZTogMTk4cHggNjlweDtcbiAgICB3aWR0aDogMTMxcHg7XG4gICAgaGVpZ2h0OiAzMXB4OyB9XG4gIC50ZXN0aW1vbmlhbC1zbGlkZXMgLnNsaWRlLS1haXJidXMgLmF0dHJpYnV0aW9uIHtcbiAgICBjb2xvcjogIzkzOWNkNTsgfVxuICAudGVzdGltb25pYWwtc2xpZGVzIC5zbGlkZS0tYWlyYnVzIC5zbGlkZV9fY3RhIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjMjUzNjk5O1xuICAgIGNvbG9yOiAjYjViYmUyOyB9XG4gICAgLnRlc3RpbW9uaWFsLXNsaWRlcyAuc2xpZGUtLWFpcmJ1cyAuc2xpZGVfX2N0YSBzdmc6Zmlyc3QtY2hpbGQge1xuICAgICAgZmlsbDogI2E4YWVkNjsgfVxuICAgIC50ZXN0aW1vbmlhbC1zbGlkZXMgLnNsaWRlLS1haXJidXMgLnNsaWRlX19jdGE6aG92ZXIge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogIzI4M2FhNTsgfVxuICAudGVzdGltb25pYWwtc2xpZGVzIC5zbGlkZS0tbWFya2V0d2F0Y2ggLmxvZ28ge1xuICAgIGJhY2tncm91bmQ6IHVybChcIi9pbWcvdGVzdGltb25pYWxzL2xvZ28tc3ByaXRlLnBuZ1wiKSBuby1yZXBlYXQgMCAwO1xuICAgIGJhY2tncm91bmQtc2l6ZTogMTk4cHggNjlweDtcbiAgICB3aWR0aDogMTk4cHg7XG4gICAgaGVpZ2h0OiAzMXB4OyB9XG4gIC50ZXN0aW1vbmlhbC1zbGlkZXMgLnNsaWRlLS1tYXJrZXR3YXRjaCAuYXR0cmlidXRpb24ge1xuICAgIGNvbG9yOiAjODY4ODkzOyB9XG4gIC50ZXN0aW1vbmlhbC1zbGlkZXMgLnNsaWRlLS1tYXJrZXR3YXRjaCAuc2xpZGVfX2N0YSB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogIzBhMmUzNjtcbiAgICBjb2xvcjogI2E4YjBiZTsgfVxuICAgIC50ZXN0aW1vbmlhbC1zbGlkZXMgLnNsaWRlLS1tYXJrZXR3YXRjaCAuc2xpZGVfX2N0YSBzdmc6Zmlyc3QtY2hpbGQge1xuICAgICAgZmlsbDogIzlkYWJhZjsgfVxuICAgIC50ZXN0aW1vbmlhbC1zbGlkZXMgLnNsaWRlLS1tYXJrZXR3YXRjaCAuc2xpZGVfX2N0YTpob3ZlciB7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjMGMzOTQzOyB9XG4gIC50ZXN0aW1vbmlhbC1zbGlkZXMgLnNsaWRlLWltZ3Mge1xuICAgIHdpZHRoOiA1MCU7XG4gICAgaGVpZ2h0OiAxMDAlO1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICBvcGFjaXR5OiAwLjU7XG4gICAgcmlnaHQ6IDA7XG4gICAgdG9wOiAwO1xuICAgIG92ZXJmbG93OiBoaWRkZW47IH1cbiAgICBAbWVkaWEgKG1heC13aWR0aDogOTkxcHgpIHtcbiAgICAgIC50ZXN0aW1vbmlhbC1zbGlkZXMgLnNsaWRlLWltZ3Mge1xuICAgICAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7IH0gfVxuICAudGVzdGltb25pYWwtc2xpZGVzIC5zbGlkZS1pbWcge1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIGhlaWdodDogMTAwJTtcbiAgICBiYWNrZ3JvdW5kLXNpemU6IGNvdmVyO1xuICAgIGJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7XG4gICAgYmFja2dyb3VuZC1wb3NpdGlvbjogY2VudGVyIGNlbnRlcjtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgdG9wOiAwO1xuICAgIGxlZnQ6IDA7IH1cbiAgICAudGVzdGltb25pYWwtc2xpZGVzIC5zbGlkZS1pbWctLWFpcmJ1cyB7XG4gICAgICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXCIvaW1nL3Rlc3RpbW9uaWFscy90ZXN0aW1vbmlhbC1iZy1haXJidXMuanBnXCIpOyB9XG4gICAgLnRlc3RpbW9uaWFsLXNsaWRlcyAuc2xpZGUtaW1nLS1tYXJrZXR3YXRjaCB7XG4gICAgICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXCIvaW1nL3Rlc3RpbW9uaWFscy90ZXN0aW1vbmlhbC1iZy1tYXJrZXR3YXRjaC5qcGdcIik7IH1cbiAgLnRlc3RpbW9uaWFsLXNsaWRlcyAuc2xpZGUtaW5kaWNhdG9yIHtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgei1pbmRleDogMTA7XG4gICAgYm90dG9tOiAxNnB4O1xuICAgIGxlZnQ6IDA7XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgcGFkZGluZzogMjBweCAwO1xuICAgIGN1cnNvcjogcG9pbnRlcjsgfVxuICAgIC50ZXN0aW1vbmlhbC1zbGlkZXMgLnNsaWRlLWluZGljYXRvciBzcGFuIHtcbiAgICAgIHRyYW5zaXRpb246IG9wYWNpdHkgMC4zcztcbiAgICAgIGRpc3BsYXk6IGlubGluZS1mbGV4O1xuICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgd2lkdGg6IDE0cHg7XG4gICAgICBoZWlnaHQ6IDI0cHg7XG4gICAgICBvcGFjaXR5OiAwLjI7IH1cbiAgICAgIC50ZXN0aW1vbmlhbC1zbGlkZXMgLnNsaWRlLWluZGljYXRvciBzcGFuOmFmdGVyIHtcbiAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuM3M7XG4gICAgICAgIHRyYW5zZm9ybS1vcmlnaW46IGNlbnRlciBjZW50ZXI7XG4gICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICBjb250ZW50OiAnJztcbiAgICAgICAgd2lkdGg6IDhweDtcbiAgICAgICAgaGVpZ2h0OiA4cHg7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6ICNmZmY7XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDhweDsgfVxuICAgICAgLnRlc3RpbW9uaWFsLXNsaWRlcyAuc2xpZGUtaW5kaWNhdG9yIHNwYW46aG92ZXI6bm90KC5hY3RpdmUpOmFmdGVyIHtcbiAgICAgICAgdHJhbnNmb3JtOiBzY2FsZSgxLjQpOyB9XG4gICAgICAudGVzdGltb25pYWwtc2xpZGVzIC5zbGlkZS1pbmRpY2F0b3Igc3Bhbjpob3ZlciwgLnRlc3RpbW9uaWFsLXNsaWRlcyAuc2xpZGUtaW5kaWNhdG9yIHNwYW4uYWN0aXZlIHtcbiAgICAgICAgb3BhY2l0eTogMTsgfVxuICAgICAgLnRlc3RpbW9uaWFsLXNsaWRlcyAuc2xpZGUtaW5kaWNhdG9yIHNwYW4uYWN0aXZlIHtcbiAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG4gICAgICAgIGN1cnNvcjogZGVmYXVsdDsgfVxuXG4udG9vbHRpcCB7XG4gIHdpZHRoOiAzMDBweDsgfVxuICAudG9vbHRpcCAudG9vbHRpcC1pbm5lciB7XG4gICAgcGFkZGluZzogMTBweDtcbiAgICBiYWNrZ3JvdW5kOiByZ2JhKDAsIDAsIDAsIDAuODUpOyB9XG4gIC50b29sdGlwIC50b29sdGlwLWFycm93IHtcbiAgICBvcGFjaXR5OiAuODU7IH1cblxudGlwcHkge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7IH1cbiAgdGlwcHkgLnRpcCB7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIHRyYW5zZm9ybTogc2NhbGUzZCgwLCAwLCAxKTtcbiAgICB0cmFuc2l0aW9uOiAuMTVzIHRyYW5zZm9ybSBsaW5lYXI7XG4gICAgYmFja2dyb3VuZDogcmdiYSgwLCAwLCAwLCAwLjgpO1xuICAgIGJvcmRlci1yYWRpdXM6IDRweDtcbiAgICBwYWRkaW5nOiAxNXB4IDIwcHg7XG4gICAgY29sb3I6IHdoaXRlO1xuICAgIHotaW5kZXg6IDE7XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgbWluLXdpZHRoOiAyMDBweDsgfVxuICAgIHRpcHB5IC50aXA6OmJlZm9yZSB7XG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICB0b3A6IC01cHg7XG4gICAgICBoZWlnaHQ6IDVweDtcbiAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgbGVmdDogMDtcbiAgICAgIGNvbnRlbnQ6ICcnOyB9XG4gICAgdGlwcHkgLnRpcDo6YWZ0ZXIge1xuICAgICAgY29udGVudDogJyc7XG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICB3aWR0aDogMDtcbiAgICAgIGhlaWdodDogMDtcbiAgICAgIGJvcmRlci1zdHlsZTogc29saWQ7XG4gICAgICBib3JkZXItd2lkdGg6IDAgNXB4IDVweCA1cHg7XG4gICAgICBib3JkZXItY29sb3I6IHRyYW5zcGFyZW50IHRyYW5zcGFyZW50IHJnYmEoMCwgMCwgMCwgMC44KTtcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgIHRvcDogLTVweDtcbiAgICAgIHJpZ2h0OiA2cHg7IH1cbiAgICB0aXBweSAudGlwIGEge1xuICAgICAgY3Vyc29yOiBwb2ludGVyOyB9XG4gICAgICB0aXBweSAudGlwIGE6aG92ZXIge1xuICAgICAgICBjb2xvcjogd2hpdGU7IH1cbiAgICB0aXBweSAudGlwLnJpZ2h0LCB0aXBweSAudGlwLmxlZnQge1xuICAgICAgbGVmdDogMjhweDtcbiAgICAgIHJpZ2h0OiBhdXRvO1xuICAgICAgd2lkdGg6IDI1N3B4O1xuICAgICAgdG9wOiAtNzZweDtcbiAgICAgIGJhY2tncm91bmQ6ICMzYjQzNGY7XG4gICAgICBwYWRkaW5nOiAxNHB4IDIwcHggNnB4O1xuICAgICAgZm9udC1zaXplOiAxMXB4O1xuICAgICAgbGluZS1oZWlnaHQ6IDIwcHg7XG4gICAgICBsZXR0ZXItc3BhY2luZzogLjA3cHg7IH1cbiAgICAgIHRpcHB5IC50aXAucmlnaHQ6OmFmdGVyLCB0aXBweSAudGlwLmxlZnQ6OmFmdGVyIHtcbiAgICAgICAgd2lkdGg6IDEycHg7XG4gICAgICAgIGhlaWdodDogMTJweDtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogMCAwIDRweCAwO1xuICAgICAgICB0cmFuc2Zvcm06IHJvdGF0ZSgxMzVkZWcpO1xuICAgICAgICBib3JkZXI6IG5vbmU7XG4gICAgICAgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCgtNDVkZWcsICMzYjQzNGYgNTAlLCB0cmFuc3BhcmVudCA1MCUpO1xuICAgICAgICB0b3A6IGNhbGMoNTAlICsgN3B4KTtcbiAgICAgICAgbGVmdDogLTZweDtcbiAgICAgICAgcmlnaHQ6IGF1dG87IH1cbiAgICB0aXBweSAudGlwLmxlZnQge1xuICAgICAgbGVmdDogYXV0bztcbiAgICAgIHJpZ2h0OiAyOHB4OyB9XG4gICAgICB0aXBweSAudGlwLmxlZnQ6OmFmdGVyIHtcbiAgICAgICAgbGVmdDogYXV0bztcbiAgICAgICAgcmlnaHQ6IC02cHg7IH1cbiAgICB0aXBweSAudGlwLmJvdHRvbSB7XG4gICAgICBsZWZ0OiAtMTcwcHg7IH1cbiAgICB0aXBweSAudGlwLnRvcCB7XG4gICAgICBsZWZ0OiAtMTcwcHg7XG4gICAgICBib3R0b206IDIzcHg7IH1cbiAgICAgIHRpcHB5IC50aXAudG9wOjphZnRlciB7XG4gICAgICAgIHRyYW5zZm9ybTogcm90YXRlKDE4MGRlZyk7XG4gICAgICAgIHRvcDogYXV0bztcbiAgICAgICAgYm90dG9tOiAtNXB4O1xuICAgICAgICByaWdodDogMThweDsgfVxuICAgIHRpcHB5IC50aXAgcCB7XG4gICAgICBtYXJnaW4tYm90dG9tOiA4cHg7IH1cbiAgdGlwcHkgPiBpIHtcbiAgICBmb250LXNpemU6IDY3JTtcbiAgICBmb250LXdlaWdodDogNzAwO1xuICAgIGxpbmUtaGVpZ2h0OiAxZW07XG4gICAgY29sb3I6ICNmZmY7XG4gICAgYm9yZGVyLXJhZGl1czogMWVtO1xuICAgIHBhZGRpbmc6IDNweCA1cHggMnB4O1xuICAgIGJhY2tncm91bmQ6ICNjMmM4ZDI7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIHRvcDogLTAuMmVtO1xuICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICBjdXJzb3I6IHBvaW50ZXI7IH1cbiAgdGlwcHk6aG92ZXIgLnRpcCwgdGlwcHkuYWN0aXZlIC50aXAge1xuICAgIHRyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoMCwgMS41LCAwLjUsIDEpO1xuICAgIHRyYW5zaXRpb24tZHVyYXRpb246IC4zcztcbiAgICB0cmFuc2Zvcm06IHNjYWxlM2QoMSwgMSwgMSk7IH1cblxuYm9keSB7XG4gIGZvbnQtZmFtaWx5OiBcIkludGVyXCIsIFwiSW50ZXIgVUlcIiwgSGVsdmV0aWNhLCBBcmlhbCwgc2Fucy1zZXJpZjtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBvdmVyZmxvdy14OiBoaWRkZW47XG4gIC1tb3otb3N4LWZvbnQtc21vb3RoaW5nOiBncmF5c2NhbGU7XG4gIC13ZWJraXQtZm9udC1zbW9vdGhpbmc6IGFudGlhbGlhc2VkO1xuICB0ZXh0LXJlbmRlcmluZzogb3B0aW1pemVMZWdpYmlsaXR5OyB9XG4gIEBtZWRpYSAobWF4LXdpZHRoOiA3NjdweCkge1xuICAgIGJvZHkge1xuICAgICAgcGFkZGluZy10b3A6IDUwcHg7XG4gICAgICB3aWR0aDogMTAwJTtcbiAgICAgIG1pbi13aWR0aDogMTAwJTtcbiAgICAgIGJhY2tncm91bmQ6ICNmZmY7IH0gfVxuICBib2R5IC5kb2NzIHtcbiAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoOTBkZWcsICNmOWZhZmIsICNmOWZhZmIgMjMwcHgsIHdoaXRlIDIzMHB4LCB3aGl0ZSAxMDAlKTsgfVxuICBAbWVkaWEgKG1heC13aWR0aDogNzY4cHgpIHtcbiAgICBib2R5I3BhZ2UtcHJpY2luZy10YWJsZSB7XG4gICAgICBwYWRkaW5nLXRvcDogMHB4OyB9IH1cbiAgYm9keS5uby1zY3JvbGwge1xuICAgIG92ZXJmbG93OiBoaWRkZW47IH1cblxubWFpbiB7XG4gIG92ZXJmbG93OiBoaWRkZW47IH1cblxuI2NvbXBvbmVudHMtaW5kZXggdWwubmF2ID4gbGkgPiBhIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI0Y5RkFGQjsgfVxuXG4uaW1wcm92ZS1kb2NzIHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICByaWdodDogMy41ZW07XG4gIHRvcDogMjBweDsgfVxuXG4uaW1wcm92ZS12Mi1kb2NzIHtcbiAgZGlzcGxheTogYmxvY2s7XG4gIGZsb2F0OiByaWdodDtcbiAgbWFyZ2luLXRvcDogLTdlbTsgfVxuXG4uY29tcG9uZW50LWRvYy1kZW1vIHtcbiAgZGlzcGxheTogYmxvY2s7XG4gIGZsb2F0OiByaWdodDtcbiAgbWFyZ2luLXRvcDogLTMuMWVtO1xuICBsaW5lLWhlaWdodDogMjVweDsgfVxuICAuY29tcG9uZW50LWRvYy1kZW1vIC5jb21wb25lbnQtZG9jLWRlbW8tbW9iaWxlIHtcbiAgICBtYXJnaW4tcmlnaHQ6IDZweDsgfVxuXG4uY29tcG9uZW50LWRvYy1kZW1vLW1vYmlsZSB7XG4gIGN1cnNvcjogcG9pbnRlcjtcbiAgcGFkZGluZzogM3B4IDEycHg7XG4gIGJvcmRlci1yYWRpdXM6IDRweDtcbiAgZm9udC1zaXplOiAxNXB4O1xuICBmb250LXdlaWdodDogNTAwO1xuICBjb2xvcjogd2hpdGU7XG4gIGJhY2tncm91bmQtY29sb3I6ICM0YThiZmM7XG4gIGRpc3BsYXk6IG5vbmU7XG4gIGxpbmUtaGVpZ2h0OiBpbmhlcml0OyB9XG5cbi5kb2NzLWNvbnRhaW5lciAuc2lkZS1uYXYge1xuICB3aWR0aDogMjMwcHg7IH1cblxuLmRvY3MtY29udGFpbmVyID4gbWFpbiB7XG4gIG1hcmdpbi1sZWZ0OiAyMzBweDsgfVxuXG4uZG9jcy1jb250YWluZXIgPiBhc2lkZSB7XG4gIHdpZHRoOiA0NjdweDsgfVxuICAuZG9jcy1jb250YWluZXIgPiBhc2lkZSArIG1haW4ge1xuICAgIG1hcmdpbi1yaWdodDogNDA3cHg7XG4gICAgbWluLWhlaWdodDogNzc3cHg7IH1cblxuQG1lZGlhIChtYXgtd2lkdGg6IDExMDBweCkge1xuICAuZG9jcy1jb250YWluZXIgYXNpZGUge1xuICAgIGRpc3BsYXk6IG5vbmU7IH1cbiAgICAuZG9jcy1jb250YWluZXIgYXNpZGUgKyBtYWluIHtcbiAgICAgIG1hcmdpbi1yaWdodDogMDsgfVxuICAuZG9jcy1jb250YWluZXIgLmNvbXBvbmVudC1kb2MtZGVtby1tb2JpbGUge1xuICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsgfSB9XG5cbkBtZWRpYSAobWF4LXdpZHRoOiA3NjdweCkge1xuICAuZG9jcy1jb250YWluZXIge1xuICAgIGJhY2tncm91bmQtY29sb3I6ICNmZmY7IH1cbiAgICAuZG9jcy1jb250YWluZXIgbWFpbiB7XG4gICAgICBtYXJnaW4tbGVmdDogMDtcbiAgICAgIHBhZGRpbmc6IDMwcHggMjBweCAxMDBweDsgfVxuICAgIC5kb2NzLWNvbnRhaW5lciAjc2lkZS1uYXYge1xuICAgICAgei1pbmRleDogMTtcbiAgICAgIHRvcDogLTRweDtcbiAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgtMjMwcHgpO1xuICAgICAgdHJhbnNpdGlvbjogdHJhbnNmb3JtIC4zcyBlYXNlOyB9XG4gICAgICAuZG9jcy1jb250YWluZXIgI3NpZGUtbmF2LnNob3duIHtcbiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKDApO1xuICAgICAgICBib3gtc2hhZG93OiAwIDAgMTVweCByZ2JhKDAsIDAsIDAsIDAuNSk7XG4gICAgICAgIHRyYW5zaXRpb246IHRyYW5zZm9ybSAuM3MgZWFzZTsgfSB9XG5cbmh0bWwge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIGhlaWdodDogMTAwJTsgfVxuXG5ib2R5IHtcbiAgbWluLWhlaWdodDogMTAwJTtcbiAgbWFyZ2luOiAwIDAgLTEzMHB4OyB9XG5cbmEge1xuICBjb2xvcjogIzRhOGJmYztcbiAgdHJhbnNpdGlvbjogLjNzIGNvbG9yOyB9XG5cbi5mb290ZXItbGlua3Mge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIGxlZnQ6IDI3MHB4O1xuICBib3R0b206IDA7XG4gIGhlaWdodDogMTMwcHg7XG4gIHJpZ2h0OiA0MHB4OyB9XG4gIEBtZWRpYSAobWF4LXdpZHRoOiA3NjdweCkge1xuICAgIC5mb290ZXItbGlua3Mge1xuICAgICAgbGVmdDogNDBweDsgfSB9XG5cbmEuZm9vdGVyLWxpbmsge1xuICBjb2xvcjogYmxhY2s7XG4gIGZvbnQtc2l6ZTogMThweDtcbiAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xuICBmb250LXdlaWdodDogNTAwO1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHBhZGRpbmctdG9wOiAxMHB4O1xuICByaWdodDogNDBweDtcbiAgdGV4dC1hbGlnbjogcmlnaHQ7XG4gIHRyYW5zaXRpb246IGNvbG9yIC4yczsgfVxuICBhLmZvb3Rlci1saW5rLnByZXYge1xuICAgIHJpZ2h0OiBhdXRvO1xuICAgIGxlZnQ6IDQwcHg7XG4gICAgdGV4dC1hbGlnbjogbGVmdDsgfVxuICAgIEBtZWRpYSAobWF4LXdpZHRoOiA1MDBweCkge1xuICAgICAgYS5mb290ZXItbGluay5wcmV2IHtcbiAgICAgICAgZGlzcGxheTogbm9uZTsgfSB9XG4gICAgYS5mb290ZXItbGluay5wcmV2OjpiZWZvcmUge1xuICAgICAgY29udGVudDogJ1ByZXZpb3VzJzsgfVxuICAgIGEuZm9vdGVyLWxpbmsucHJldjo6YWZ0ZXIge1xuICAgICAgcmlnaHQ6IGF1dG87XG4gICAgICBsZWZ0OiAtMjVweDtcbiAgICAgIGNvbnRlbnQ6ICdcXGYxMTcnOyB9XG4gIGEuZm9vdGVyLWxpbms6aG92ZXIge1xuICAgIGNvbG9yOiAjNGE4YmZjOyB9XG4gIGEuZm9vdGVyLWxpbms6OmJlZm9yZSB7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgY29udGVudDogJ05leHQnO1xuICAgIGZvbnQtc2l6ZTogMTNweDtcbiAgICBjb2xvcjogIzlkYTViMztcbiAgICBmb250LXdlaWdodDogNDAwOyB9XG4gIGEuZm9vdGVyLWxpbms6OmFmdGVyIHtcbiAgICBjb250ZW50OiAnXFxmMTE5JztcbiAgICBmb250LWZhbWlseTogSW9uaWNvbnM7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIHJpZ2h0OiAtMjVweDtcbiAgICBmb250LXNpemU6IDMycHg7XG4gICAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgICBib3R0b206IC0xMHB4OyB9XG5cbi5wbGF0Zm9ybS1wcmV2aWV3IHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICByaWdodDogMDtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICByaWdodDogLTIwcHg7XG4gIHotaW5kZXg6IDE7XG4gIGJhY2tncm91bmQtY29sb3I6IHdoaXRlOyB9XG4gIC5wbGF0Zm9ybS1wcmV2aWV3LmZpeGV5IHtcbiAgICBwb3NpdGlvbjogZml4ZWQ7XG4gICAgdG9wOiAwOyB9XG4gIC5wbGF0Zm9ybS1wcmV2aWV3ID4gYSB7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIHRvcDogLTI1cHg7XG4gICAgZm9udC1zaXplOiAxNXB4OyB9XG4gICAgLnBsYXRmb3JtLXByZXZpZXcgPiBhLCAucGxhdGZvcm0tcHJldmlldyA+IGE6aG92ZXIsIC5wbGF0Zm9ybS1wcmV2aWV3ID4gYTphY3RpdmUsIC5wbGF0Zm9ybS1wcmV2aWV3ID4gYTpmb2N1cyB7XG4gICAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7IH1cblxuLnBsYXRmb3JtLXByZXZpZXcgLnBsYXRmb3JtLXRvZ2dsZSBhLCAuZG9jcy1jb250YWluZXIgLnNhc3MtcGxhdGZvcm0tdG9nZ2xlIGEge1xuICBjdXJzb3I6IHBvaW50ZXI7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgcGFkZGluZzogNHB4IDE2cHg7XG4gIGJvcmRlci1yYWRpdXM6IDE2cHg7XG4gIGNvbG9yOiAjOWRhNWIzO1xuICBmb250LXNpemU6IDE0cHg7XG4gIGZvbnQtd2VpZ2h0OiA1MDA7XG4gIC13ZWJraXQtZm9udC1zbW9vdGhpbmc6IGFudGlhbGlhc2VkO1xuICB0cmFuc2l0aW9uOiAuMnMgY29sb3IsIC4ycyBiYWNrZ3JvdW5kLWNvbG9yOyB9XG4gIC5wbGF0Zm9ybS1wcmV2aWV3IC5wbGF0Zm9ybS10b2dnbGUgYS5hY3RpdmUsIC5wbGF0Zm9ybS1wcmV2aWV3IC5wbGF0Zm9ybS10b2dnbGUgYS5hY3RpdmU6aG92ZXIsIC5kb2NzLWNvbnRhaW5lciAuc2Fzcy1wbGF0Zm9ybS10b2dnbGUgYS5hY3RpdmUsIC5kb2NzLWNvbnRhaW5lciAuc2Fzcy1wbGF0Zm9ybS10b2dnbGUgYS5hY3RpdmU6aG92ZXIge1xuICAgIGJhY2tncm91bmQtY29sb3I6ICM0YThiZmM7XG4gICAgY29sb3I6IHdoaXRlOyB9XG4gIC5wbGF0Zm9ybS1wcmV2aWV3IC5wbGF0Zm9ybS10b2dnbGUgYTpob3ZlciwgLmRvY3MtY29udGFpbmVyIC5zYXNzLXBsYXRmb3JtLXRvZ2dsZSBhOmhvdmVyIHtcbiAgICBjb2xvcjogIzRhOGJmYztcbiAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7IH1cblxuLnBsYXRmb3JtLXByZXZpZXcgLnBsYXRmb3JtLXRvZ2dsZSB7XG4gIHBhZGRpbmc6IDhweCAxMHB4IDRweDsgfVxuXG4uZG9jcy1jb250YWluZXIgLnNhc3MtcGxhdGZvcm0tdG9nZ2xlIHtcbiAgcGFkZGluZy10b3A6IDBweCAxMHB4IDRweDtcbiAgbWFyZ2luLWJvdHRvbTogMTBweDtcbiAgZmxvYXQ6IHJpZ2h0OyB9XG5cbiNzYXNzLXZhcmlhYmxlLWhlYWRlciB7XG4gIG1hcmdpbi1ib3R0b206IDBweDtcbiAgcGFkZGluZy1ib3R0b206IDBweDsgfVxuXG4jc2Fzcy12YXJpYWJsZXMge1xuICBtYXJnaW4tYm90dG9tOiAwcHg7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgYm90dG9tOiAxNXB4OyB9XG4gICNzYXNzLXZhcmlhYmxlcyAudGFibGUucGFyYW0tdGFibGUgdGQsXG4gICNzYXNzLXZhcmlhYmxlcyAudGFibGUucGFyYW0tdGFibGUgdGgge1xuICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7IH1cbiAgICAjc2Fzcy12YXJpYWJsZXMgLnRhYmxlLnBhcmFtLXRhYmxlIHRkOmxhc3QtY2hpbGQsICNzYXNzLXZhcmlhYmxlcyAudGFibGUucGFyYW0tdGFibGUgdGQ6bnRoLWxhc3QtY2hpbGQoMiksXG4gICAgI3Nhc3MtdmFyaWFibGVzIC50YWJsZS5wYXJhbS10YWJsZSB0aDpsYXN0LWNoaWxkLFxuICAgICNzYXNzLXZhcmlhYmxlcyAudGFibGUucGFyYW0tdGFibGUgdGg6bnRoLWxhc3QtY2hpbGQoMikge1xuICAgICAgd2hpdGUtc3BhY2U6IG5vcm1hbDsgfVxuICAgICNzYXNzLXZhcmlhYmxlcyAudGFibGUucGFyYW0tdGFibGUgdGQ6bnRoLWxhc3QtY2hpbGQoMiksXG4gICAgI3Nhc3MtdmFyaWFibGVzIC50YWJsZS5wYXJhbS10YWJsZSB0aDpudGgtbGFzdC1jaGlsZCgyKSB7XG4gICAgICB3aWR0aDogMTAlOyB9XG5cbkBtZWRpYSAobWF4LXdpZHRoOiAxMzAwcHgpIGFuZCAobWluLXdpZHRoOiA0ODBweCkge1xuICAjc2Fzcy12YXJpYWJsZXMge1xuICAgIGJvdHRvbTogLTEwcHg7IH1cbiAgICAjc2Fzcy12YXJpYWJsZXMgLnRhYmxlLnBhcmFtLXRhYmxlIHRkLFxuICAgICNzYXNzLXZhcmlhYmxlcyAudGFibGUucGFyYW0tdGFibGUgdGgge1xuICAgICAgd2hpdGUtc3BhY2U6IG5vcm1hbDsgfVxuICAgICAgI3Nhc3MtdmFyaWFibGVzIC50YWJsZS5wYXJhbS10YWJsZSB0ZDpudGgtbGFzdC1jaGlsZCgyKSxcbiAgICAgICNzYXNzLXZhcmlhYmxlcyAudGFibGUucGFyYW0tdGFibGUgdGg6bnRoLWxhc3QtY2hpbGQoMikge1xuICAgICAgICB3aWR0aDogYXV0bzsgfSB9XG5cbkBtZWRpYSAobWF4LXdpZHRoOiA0ODBweCkge1xuICAjc2Fzcy12YXJpYWJsZXMge1xuICAgIGJvdHRvbTogLTI1cHg7IH1cbiAgICAjc2Fzcy12YXJpYWJsZXMgLnRhYmxlLnBhcmFtLXRhYmxlIHRyLCAjc2Fzcy12YXJpYWJsZXMgLnRhYmxlLnBhcmFtLXRhYmxlIHRkIHtcbiAgICAgIHdoaXRlLXNwYWNlOiBub3JtYWw7IH0gfVxuXG4jZGVtby1kZXZpY2UtaW9zLCAjZGVtby1kZXZpY2UtYW5kcm9pZCwgI2RlbW8tZGV2aWNlLXdpbmRvd3Mge1xuICB3aWR0aDogNDY3cHg7XG4gIGhlaWdodDogODAwcHg7XG4gIGJhY2tncm91bmQ6IGNlbnRlciB0b3Agbm8tcmVwZWF0IHVybChcIi9pbWcvZGV2aWNlcy1zcHJpdGUuanBnXCIpO1xuICBiYWNrZ3JvdW5kLXNpemU6IDQ2N3B4O1xuICBtYXJnaW46IDAgYXV0bzsgfVxuICAjZGVtby1kZXZpY2UtaW9zIGlmcmFtZSwgI2RlbW8tZGV2aWNlLWFuZHJvaWQgaWZyYW1lLCAjZGVtby1kZXZpY2Utd2luZG93cyBpZnJhbWUge1xuICAgIG1hcmdpbi10b3A6IDg1cHg7XG4gICAgd2lkdGg6IDMyMHB4O1xuICAgIGhlaWdodDogNTY4cHg7IH1cblxuI2RlbW8tZGV2aWNlLWFuZHJvaWQge1xuICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiBjZW50ZXIgY2VudGVyOyB9XG4gICNkZW1vLWRldmljZS1hbmRyb2lkIGlmcmFtZSB7XG4gICAgbWFyZ2luLXRvcDogNjRweDtcbiAgICB3aWR0aDogMzYwcHg7XG4gICAgaGVpZ2h0OiA1OTBweDsgfVxuXG4jZGVtby1kZXZpY2Utd2luZG93cyB7XG4gIGJhY2tncm91bmQtcG9zaXRpb246IGNlbnRlciBib3R0b207IH1cbiAgI2RlbW8tZGV2aWNlLXdpbmRvd3MgaWZyYW1lIHtcbiAgICBtYXJnaW4tdG9wOiA3MnB4O1xuICAgIHdpZHRoOiAzNTBweDtcbiAgICBoZWlnaHQ6IDYyMnB4O1xuICAgIGJhY2tncm91bmQ6IHdoaXRlOyB9XG5cbmxpLm5hdi1pdGVtLWhpZGRlbiB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgdG9wOiAtOTk5OXB4O1xuICBsZWZ0OiAtOTk5OXB4OyB9XG5cbnVsLmRvY3MtY29udGVudCB7XG4gIGxpc3Qtc3R5bGU6IG5vbmU7XG4gIGxpbmUtaGVpZ2h0OiAyNnB4O1xuICBwYWRkaW5nLWxlZnQ6IDE2cHg7IH1cbiAgdWwuZG9jcy1jb250ZW50IGxpLmRvY3MtY29udGVudC1oZWFkZXIge1xuICAgIGZvbnQtd2VpZ2h0OiA0MDA7XG4gICAgY29sb3I6ICNCOUJFQzU7IH1cblxudWwuZG9jcy1leGFtcGxlIHtcbiAgbGlzdC1zdHlsZTogbm9uZTtcbiAgZGlzcGxheTogYmxvY2s7XG4gIG1hcmdpbjogM2VtIDA7XG4gIHBhZGRpbmc6IDA7XG4gIGJvcmRlci1yYWRpdXM6IDRweDsgfVxuICB1bC5kb2NzLWV4YW1wbGUgbGkge1xuICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICBib3JkZXI6IDFweCBzb2xpZCAjZTZlOWVlO1xuICAgIHdpZHRoOiAzMiU7XG4gICAgbWFyZ2luOiAwO1xuICAgIHBhZGRpbmc6IDglIDA7IH1cbiAgICBAbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiA3NjdweCkge1xuICAgICAgdWwuZG9jcy1leGFtcGxlIGxpIHtcbiAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgICBtYXJnaW4tYm90dG9tOiAxZW07IH0gfVxuICAgIHVsLmRvY3MtZXhhbXBsZSBsaTpub3QoOmZpcnN0LWNoaWxkKSB7XG4gICAgICBtYXJnaW4tbGVmdDogMSU7IH1cbiAgdWwuZG9jcy1leGFtcGxlIGxpIGltZyB7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgbWFyZ2luOiAwIGF1dG87XG4gICAgd2lkdGg6IDU1LjclOyB9XG5cbi5oaWdobGlnaHQgLmVyciB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmY7IH1cblxuLnBhcmFtLXRhYmxlIHRkIHAge1xuICBtYXJnaW46IDA7XG4gIGxpbmUtaGVpZ2h0OiAyMnB4OyB9XG5cbi5wYXJhbS10YWJsZSB0ZCB1bCB7XG4gIGxpc3Qtc3R5bGU6IG5vbmU7XG4gIG1hcmdpbi1yaWdodDogLTdweDtcbiAgbWFyZ2luLWxlZnQ6IC05MnB4O1xuICBib3JkZXI6IDFweCBzb2xpZCAjZTZlOWVlO1xuICBib3JkZXItbGVmdDogMDtcbiAgYm9yZGVyLXRvcDogMDtcbiAgcGFkZGluZzogMTBweCAxN3B4O1xuICBib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czogMC41ZW07IH1cbiAgLnBhcmFtLXRhYmxlIHRkIHVsIGxpIHtcbiAgICBwYWRkaW5nOiAwO1xuICAgIG1hcmdpbjogMTdweCAwOyB9XG5cbi5yZXR1cm4tdmFsdWUgYjo6YmVmb3JlIHtcbiAgZm9udC1mYW1pbHk6ICdJb25pY29ucyc7XG4gIC13ZWJraXQtZm9udC1zbW9vdGhpbmc6IGFudGlhbGlhc2VkO1xuICBjb250ZW50OiAnXFxmMjAzJztcbiAgZm9udC1zaXplOiAxNnB4O1xuICBmb250LXdlaWdodDogODAwO1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIHBhZGRpbmctcmlnaHQ6IDVweDtcbiAgdG9wOiAycHg7IH1cblxuLmRvY3MtY29udGFpbmVyIGgyIGE6bm90KFtyb2xlPVwiYnV0dG9uXCJdKSwgLmRvY3MtY29udGFpbmVyIGgzIGE6bm90KFtyb2xlPVwiYnV0dG9uXCJdKSB7XG4gIGNvbG9yOiAjMjYyOTJlICFpbXBvcnRhbnQ7IH1cbiAgLmRvY3MtY29udGFpbmVyIGgyIGE6bm90KFtyb2xlPVwiYnV0dG9uXCJdKTpob3ZlciwgLmRvY3MtY29udGFpbmVyIGgzIGE6bm90KFtyb2xlPVwiYnV0dG9uXCJdKTpob3ZlciB7XG4gICAgY29sb3I6ICMyNjI5MmUgIWltcG9ydGFudDsgfVxuXG4uaGVybyB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTsgfVxuXG4uZmFxLXNlY3Rpb24ge1xuICBtYXJnaW46IDgwcHggYXV0bzsgfVxuXG5AbWVkaWEgKG1heC13aWR0aDogOTkxcHgpIGFuZCAobWluLXdpZHRoOiA3NjhweCkge1xuICAuaGlkZS1zbSB7XG4gICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50OyB9IH1cblxuLm5hdGl2ZS1kb2NzIGEge1xuICBtYXJnaW4tdG9wOiAwICFpbXBvcnRhbnQ7IH1cblxuW25nXFw6Y2xvYWtdLCBbbmctY2xvYWtdLCBbZGF0YS1uZy1jbG9ha10sIFt4LW5nLWNsb2FrXSwgLm5nLWNsb2FrLCAueC1uZy1jbG9hayB7XG4gIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDsgfVxuXG4jaHVic3BvdC1tZXNzYWdlcy1pZnJhbWUtY29udGFpbmVyIHtcbiAgei1pbmRleDogMTsgfVxuXG4ucGFnZS00MDQgLmZvdXItb2gtZm91ciB7XG4gIHRleHQtYWxpZ246IGNlbnRlcjsgfVxuICAucGFnZS00MDQgLmZvdXItb2gtZm91ciBpbWcge1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIG1heC13aWR0aDogMzM2cHg7IH1cbiAgLnBhZ2UtNDA0IC5mb3VyLW9oLWZvdXIgcCB7XG4gICAgY29sb3I6ICM5ZGE1YjM7XG4gICAgZm9udC1zaXplOiAxOHB4OyB9XG4gIC5wYWdlLTQwNCAuZm91ci1vaC1mb3VyIGEge1xuICAgIGZvbnQtc2l6ZTogMTZweDtcbiAgICBmb250LXdlaWdodDogNTAwOyB9XG4gICAgLnBhZ2UtNDA0IC5mb3VyLW9oLWZvdXIgYTo6YWZ0ZXIge1xuICAgICAgZm9udC1mYW1pbHk6IElvbmljb25zO1xuICAgICAgY29udGVudDogJ1xcZjI4Nyc7XG4gICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgICBtYXJnaW4tbGVmdDogMTBweDtcbiAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgIHRvcDogMnB4OyB9XG5cbiNwYWdlLWFydGljbGVzLXdoeS1oeWJyaWQgLnNpZ251cC1mb3JtIC5jYXJkIHtcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFwiL2ltZy9hcnRpY2xlcy93aHktaHlicmlkLWNvdmVyLmpwZ1wiKTsgfVxuXG4jcGFnZS1ib29rcy1uYXRpdmUtdi1oeWJyaWQge1xuICBiYWNrZ3JvdW5kOiAjZTFlNmVmO1xuICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQodG8gcmlnaHQsICNlMWU2ZWYsICNlMWU2ZWYgNTAlLCAjMTIyMTM4IDUwJSwgIzEyMjU0MSk7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgaGVpZ2h0OiAxMDAlOyB9XG4gICNwYWdlLWJvb2tzLW5hdGl2ZS12LWh5YnJpZDo6YmVmb3JlIHtcbiAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoNDVkZWcsICMxMTFjMmMsICMxMjI1NDEpO1xuICAgIGNvbnRlbnQ6ICcnO1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICB0b3A6IDA7XG4gICAgcmlnaHQ6IDA7XG4gICAgbGVmdDogNTAlO1xuICAgIGJvdHRvbTogMDsgfVxuICAjcGFnZS1ib29rcy1uYXRpdmUtdi1oeWJyaWQgbWFpbiB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICBoZWlnaHQ6IDEwMCU7IH1cbiAgI3BhZ2UtYm9va3MtbmF0aXZlLXYtaHlicmlkIGFzaWRlLFxuICAjcGFnZS1ib29rcy1uYXRpdmUtdi1oeWJyaWQgaGdyb3VwIHtcbiAgICBmbGV4OiAwIDAgNTAlOyB9XG4gICNwYWdlLWJvb2tzLW5hdGl2ZS12LWh5YnJpZCBhc2lkZSB7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIGJhY2tncm91bmQ6IHVybChcIi9pbWcvYm9va3Mvd2ViLWVib29rLWNvdmVyLmpwZ1wiKSBuby1yZXBlYXQgY2FsYygxMDAlIC0gMXB4KSA1MCU7XG4gICAgYmFja2dyb3VuZC1zaXplOiBjb250YWluO1xuICAgIGhlaWdodDogMTAwJTtcbiAgICBtYXJnaW4tdG9wOiAxNjBweDsgfVxuICAjcGFnZS1ib29rcy1uYXRpdmUtdi1oeWJyaWQgaGdyb3VwIHtcbiAgICBjb2xvcjogd2hpdGU7XG4gICAgcGFkZGluZy1sZWZ0OiAxMCU7IH1cbiAgICAjcGFnZS1ib29rcy1uYXRpdmUtdi1oeWJyaWQgaGdyb3VwIGgxIHtcbiAgICAgIGZvbnQtd2VpZ2h0OiA3MDA7XG4gICAgICBmb250LXNpemU6IDQ0cHg7XG4gICAgICBsaW5lLWhlaWdodDogMS40ZW07IH1cbiAgICAjcGFnZS1ib29rcy1uYXRpdmUtdi1oeWJyaWQgaGdyb3VwIHAge1xuICAgICAgZm9udC1zaXplOiAxOHB4O1xuICAgICAgbGluZS1oZWlnaHQ6IDEuN2VtO1xuICAgICAgbWFyZ2luOiAzOHB4IDA7IH1cbiAgICAjcGFnZS1ib29rcy1uYXRpdmUtdi1oeWJyaWQgaGdyb3VwIC5idG4ge1xuICAgICAgY29sb3I6ICM3NzNlMDA7XG4gICAgICBiYWNrZ3JvdW5kOiAjZmZjYjJjOyB9XG4gICNwYWdlLWJvb2tzLW5hdGl2ZS12LWh5YnJpZCAubW9kYWwgaGdyb3VwIHtcbiAgICBwYWRkaW5nLXJpZ2h0OiAxMCU7IH1cbiAgI3BhZ2UtYm9va3MtbmF0aXZlLXYtaHlicmlkIC5tb2RhbCBoMyB7XG4gICAgY29sb3I6ICMyNDI4MmU7IH1cbiAgQG1lZGlhIChtYXgtd2lkdGg6IDk5MXB4KSB7XG4gICAgI3BhZ2UtYm9va3MtbmF0aXZlLXYtaHlicmlkIHtcbiAgICAgIGJhY2tncm91bmQ6ICNlMWU2ZWY7IH1cbiAgICAgICNwYWdlLWJvb2tzLW5hdGl2ZS12LWh5YnJpZDo6YmVmb3JlIHtcbiAgICAgICAgZGlzcGxheTogbm9uZTsgfVxuICAgICAgI3BhZ2UtYm9va3MtbmF0aXZlLXYtaHlicmlkIG1haW4ge1xuICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgICAgICB3aWR0aDogMTAwJTsgfVxuICAgICAgICAjcGFnZS1ib29rcy1uYXRpdmUtdi1oeWJyaWQgbWFpbiBhc2lkZSB7XG4gICAgICAgICAgaGVpZ2h0OiA0MDBweDtcbiAgICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgICAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiBjYWxjKDUwJSArIDMzcHgpIDUwJTtcbiAgICAgICAgICBtYXJnaW4tdG9wOiA2NHB4OyB9XG4gICAgICAgICNwYWdlLWJvb2tzLW5hdGl2ZS12LWh5YnJpZCBtYWluIGhncm91cCB7XG4gICAgICAgICAgcGFkZGluZzogMjBweCAyMHB4IDQ4cHg7XG4gICAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsgfVxuICAgICAgICAgICNwYWdlLWJvb2tzLW5hdGl2ZS12LWh5YnJpZCBtYWluIGhncm91cDo6YmVmb3JlIHtcbiAgICAgICAgICAgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCg0NWRlZywgIzExMWMyYywgIzEyMjU0MSk7XG4gICAgICAgICAgICBjb250ZW50OiAnJztcbiAgICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgICAgIHRvcDogMDtcbiAgICAgICAgICAgIHJpZ2h0OiAtMTVweDtcbiAgICAgICAgICAgIGxlZnQ6IC0xNXB4O1xuICAgICAgICAgICAgYm90dG9tOiAwOyB9XG4gICAgICAgICAgI3BhZ2UtYm9va3MtbmF0aXZlLXYtaHlicmlkIG1haW4gaGdyb3VwID4gKiB7XG4gICAgICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7IH0gfVxuXG4uYm9vay1wcmV2aWV3IHtcbiAgd2lkdGg6IDEwMHZ3O1xuICBoZWlnaHQ6IDEwMHZoO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMTIyNTQxO1xuICBiYWNrZ3JvdW5kLWltYWdlOiBsaW5lYXItZ3JhZGllbnQoNDVkZWcsICMxMTFjMmMsICMxMjI1NDEpO1xuICBvdmVyZmxvdzogaGlkZGVuOyB9XG5cbiNwYWdlLWNvbW11bml0eSAuYmFubmVyLFxuI3BhZ2UtY29tbXVuaXR5IG1haW4ge1xuICBmb250LWZhbWlseTogXCJJbnRlclwiLCBcIkludGVyIFVJXCIsIEhlbHZldGljYSwgQXJpYWwsIHNhbnMtc2VyaWY7IH1cbiAgI3BhZ2UtY29tbXVuaXR5IC5iYW5uZXIgaDEsXG4gICNwYWdlLWNvbW11bml0eSAuYmFubmVyIGgyLFxuICAjcGFnZS1jb21tdW5pdHkgLmJhbm5lciBoMyxcbiAgI3BhZ2UtY29tbXVuaXR5IC5iYW5uZXIgaDQsXG4gICNwYWdlLWNvbW11bml0eSAuYmFubmVyIHN0cm9uZyxcbiAgI3BhZ2UtY29tbXVuaXR5IG1haW4gaDEsXG4gICNwYWdlLWNvbW11bml0eSBtYWluIGgyLFxuICAjcGFnZS1jb21tdW5pdHkgbWFpbiBoMyxcbiAgI3BhZ2UtY29tbXVuaXR5IG1haW4gaDQsXG4gICNwYWdlLWNvbW11bml0eSBtYWluIHN0cm9uZyB7XG4gICAgY29sb3I6ICMwZjE2MjI7XG4gICAgZm9udC1mYW1pbHk6IFwiRWluYVwiLCBcIkhlbHZldGljYSBOZXVlXCIsIEhlbHZldGljYSwgc2Fucy1zZXJpZjsgfVxuICAjcGFnZS1jb21tdW5pdHkgLmJhbm5lciBhLFxuICAjcGFnZS1jb21tdW5pdHkgbWFpbiBhIHtcbiAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7IH1cbiAgI3BhZ2UtY29tbXVuaXR5IC5iYW5uZXIgaGdyb3VwIHAsXG4gICNwYWdlLWNvbW11bml0eSBtYWluIGhncm91cCBwIHtcbiAgICBjb2xvcjogIzRhNTg2ZjsgfVxuXG4jcGFnZS1jb21tdW5pdHkgLmJhbm5lciB7XG4gIGJhY2tncm91bmQ6ICNmY2ZkZmYgbm8tcmVwZWF0IDAgMDtcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFwiL2ltZy9jb21tdW5pdHkvaGVyby1iZy5qcGdcIiksIGxpbmVhci1ncmFkaWVudCh0byBib3R0b20sICNmYWZjZmQsICNmNGY1ZjcpO1xuICBiYWNrZ3JvdW5kLXNpemU6IGNvdmVyLCAxMDAlO1xuICBwYWRkaW5nLXRvcDogMjI2cHg7XG4gIG1hcmdpbi10b3A6IC0xMTBweDtcbiAgd2lsbC1jaGFuZ2U6IHRyYXNuZm9ybTsgfVxuICAjcGFnZS1jb21tdW5pdHkgLmJhbm5lciBoZ3JvdXAge1xuICAgIG1heC13aWR0aDogNzY4cHg7XG4gICAgd2lsbC1jaGFuZ2U6IHRyYXNuZm9ybTsgfVxuICAgIEBtZWRpYSAobWF4LXdpZHRoOiA3NjdweCkge1xuICAgICAgI3BhZ2UtY29tbXVuaXR5IC5iYW5uZXIgaGdyb3VwIGxpIHtcbiAgICAgICAgcGFkZGluZy1yaWdodDogMTVweDsgfSB9XG4gICAgQG1lZGlhIChtYXgtd2lkdGg6IDc2N3B4KSB7XG4gICAgICAjcGFnZS1jb21tdW5pdHkgLmJhbm5lciBoZ3JvdXAgbGkgbGkge1xuICAgICAgICBtYXJnaW4tYm90dG9tOiAxNnB4OyB9IH1cbiAgI3BhZ2UtY29tbXVuaXR5IC5iYW5uZXIgaDEge1xuICAgIGZvbnQtc2l6ZTogNDhweDtcbiAgICBmb250LXdlaWdodDogNzAwO1xuICAgIGxldHRlci1zcGFjaW5nOiAtLjA0ZW07XG4gICAgbWFyZ2luLWJvdHRvbTogMjNweDsgfVxuICAjcGFnZS1jb21tdW5pdHkgLmJhbm5lciBwIHtcbiAgICBmb250LXNpemU6IDIycHg7XG4gICAgbGV0dGVyLXNwYWNpbmc6IC0uMDNlbTtcbiAgICBsaW5lLWhlaWdodDogMzZweDsgfVxuICAjcGFnZS1jb21tdW5pdHkgLmJhbm5lciB1bCB7XG4gICAgcGFkZGluZzogMzNweCAwIDA7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBsaXN0LXN0eWxlOiBub25lO1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gICAgZmxleC13cmFwOiB3cmFwOyB9XG4gICNwYWdlLWNvbW11bml0eSAuYmFubmVyIGxpIHtcbiAgICBmb250LXNpemU6IDI0cHg7IH1cbiAgICAjcGFnZS1jb21tdW5pdHkgLmJhbm5lciBsaTpmaXJzdC1jaGlsZCBhIHtcbiAgICAgIHBhZGRpbmctbGVmdDogMDsgfVxuICAgICNwYWdlLWNvbW11bml0eSAuYmFubmVyIGxpIGEge1xuICAgICAgcGFkZGluZzogMCAyMHB4O1xuICAgICAgZm9udC1mYW1pbHk6IFwiRWluYVwiLCBcIkhlbHZldGljYSBOZXVlXCIsIEhlbHZldGljYSwgc2Fucy1zZXJpZjtcbiAgICAgIGxldHRlci1zcGFjaW5nOiAtLjAyNGVtO1xuICAgICAgdHJhbnNpdGlvbjogYWxsIC4xNXMgZWFzZTtcbiAgICAgIGNvbG9yOiAjMDA3OWZmO1xuICAgICAgdHJhbnNpdGlvbjogLjFzIG9wYWNpdHksIC4xcyBjb2xvcjsgfVxuICAgICAgI3BhZ2UtY29tbXVuaXR5IC5iYW5uZXIgbGkgYTpob3ZlciB7XG4gICAgICAgIGNvbG9yOiAjNGRhMWZmOyB9XG4gICAgICAgICNwYWdlLWNvbW11bml0eSAuYmFubmVyIGxpIGE6aG92ZXIgaW9uLWljb24ge1xuICAgICAgICAgIGNvbG9yOiAjNGRhMWZmO1xuICAgICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgycHgpOyB9XG4gICAgI3BhZ2UtY29tbXVuaXR5IC5iYW5uZXIgbGkgaW9uLWljb24ge1xuICAgICAgZm9udC1zaXplOiAxOXB4O1xuICAgICAgdmVydGljYWwtYWxpZ246IC0xMCU7XG4gICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgICB0cmFuc2l0aW9uOiAuMXMgdHJhbnNmb3JtIGVhc2Utb3V0OyB9XG4gICNwYWdlLWNvbW11bml0eSAuYmFubmVyIC5mZWF0dXJlcyB7XG4gICAgbWF4LXdpZHRoOiA5ODJweDtcbiAgICBtYXJnaW4tdG9wOiAxMjBweDtcbiAgICBwYWRkaW5nLWJvdHRvbTogMjdweDtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGZsZXgtd3JhcDogd3JhcDtcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG4gICAgd2lsbC1jaGFuZ2U6IHRyYXNuZm9ybTsgfVxuICAgICNwYWdlLWNvbW11bml0eSAuYmFubmVyIC5mZWF0dXJlczo6YmVmb3JlLCAjcGFnZS1jb21tdW5pdHkgLmJhbm5lciAuZmVhdHVyZXM6OmFmdGVyIHtcbiAgICAgIGRpc3BsYXk6IG5vbmU7IH1cbiAgICAjcGFnZS1jb21tdW5pdHkgLmJhbm5lciAuZmVhdHVyZXMgbGkge1xuICAgICAgbGlzdC1zdHlsZTogbm9uZTtcbiAgICAgIHBhZGRpbmc6IDA7XG4gICAgICB0ZXh0LWFsaWduOiBsZWZ0O1xuICAgICAgbWluLXdpZHRoOiAxMjhweDtcbiAgICAgIHBhZGRpbmctbGVmdDogMTVweDtcbiAgICAgIHBhZGRpbmctYm90dG9tOiAzMnB4OyB9XG4gICAgI3BhZ2UtY29tbXVuaXR5IC5iYW5uZXIgLmZlYXR1cmVzIHN0cm9uZyB7XG4gICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgIGZvbnQtc2l6ZTogMzdweDtcbiAgICAgIGxldHRlci1zcGFjaW5nOiAtLjA0ZW07XG4gICAgICBsaW5lLWhlaWdodDogNDBweDsgfVxuICAgICNwYWdlLWNvbW11bml0eSAuYmFubmVyIC5mZWF0dXJlcyBzcGFuIHtcbiAgICAgIGZvbnQtc2l6ZTogMTlweDtcbiAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgY29sb3I6ICM3MjdjOGU7IH1cbiAgICBAbWVkaWEgKG1heC13aWR0aDogNzY3cHgpIHtcbiAgICAgICNwYWdlLWNvbW11bml0eSAuYmFubmVyIC5mZWF0dXJlcyB7XG4gICAgICAgIG1hcmdpbi10b3A6IDA7XG4gICAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYXJvdW5kOyB9IH1cbiAgI3BhZ2UtY29tbXVuaXR5IC5iYW5uZXIgaDEsXG4gICNwYWdlLWNvbW11bml0eSAuYmFubmVyIHAsXG4gICNwYWdlLWNvbW11bml0eSAuYmFubmVyIGxpIHtcbiAgICBhbmltYXRpb246IDFzIGZhZGVJblVwIGZvcndhcmRzO1xuICAgIG9wYWNpdHk6IDA7IH1cbiAgI3BhZ2UtY29tbXVuaXR5IC5iYW5uZXIgaDEge1xuICAgIGFuaW1hdGlvbi1kZWxheTogLjhzOyB9XG4gICNwYWdlLWNvbW11bml0eSAuYmFubmVyIHAge1xuICAgIGFuaW1hdGlvbi1kZWxheTogMXM7IH1cbiAgI3BhZ2UtY29tbXVuaXR5IC5iYW5uZXIgaGdyb3VwIGxpIHtcbiAgICBhbmltYXRpb24tZGVsYXk6IDEuNnM7IH1cbiAgICAjcGFnZS1jb21tdW5pdHkgLmJhbm5lciBoZ3JvdXAgbGk6bnRoLWNoaWxkKDIpIHtcbiAgICAgIGFuaW1hdGlvbi1kZWxheTogMS43czsgfVxuICAgICNwYWdlLWNvbW11bml0eSAuYmFubmVyIGhncm91cCBsaTpudGgtY2hpbGQoMykge1xuICAgICAgYW5pbWF0aW9uLWRlbGF5OiAxLjhzOyB9XG4gICAgI3BhZ2UtY29tbXVuaXR5IC5iYW5uZXIgaGdyb3VwIGxpOm50aC1jaGlsZCg0KSB7XG4gICAgICBhbmltYXRpb24tZGVsYXk6IDEuOXM7IH1cbiAgI3BhZ2UtY29tbXVuaXR5IC5iYW5uZXIgLmZlYXR1cmVzIGxpIHtcbiAgICBhbmltYXRpb24tZGVsYXk6IDIuMnM7IH1cbiAgICAjcGFnZS1jb21tdW5pdHkgLmJhbm5lciAuZmVhdHVyZXMgbGk6bnRoLWNoaWxkKDIpIHtcbiAgICAgIGFuaW1hdGlvbi1kZWxheTogMi4zczsgfVxuICAgICNwYWdlLWNvbW11bml0eSAuYmFubmVyIC5mZWF0dXJlcyBsaTpudGgtY2hpbGQoMykge1xuICAgICAgYW5pbWF0aW9uLWRlbGF5OiAyLjRzOyB9XG4gICAgI3BhZ2UtY29tbXVuaXR5IC5iYW5uZXIgLmZlYXR1cmVzIGxpOm50aC1jaGlsZCg0KSB7XG4gICAgICBhbmltYXRpb24tZGVsYXk6IDIuNXM7IH1cbiAgQG1lZGlhIChtYXgtd2lkdGg6IDc2N3B4KSB7XG4gICAgI3BhZ2UtY29tbXVuaXR5IC5iYW5uZXIge1xuICAgICAgdHJhbnNmb3JtOiBub25lICFpbXBvcnRhbnQ7IH1cbiAgICAgICNwYWdlLWNvbW11bml0eSAuYmFubmVyIGhncm91cCxcbiAgICAgICNwYWdlLWNvbW11bml0eSAuYmFubmVyIC5mZWF0dXJlcyB7XG4gICAgICAgIHRyYW5zZm9ybTogbm9uZSAhaW1wb3J0YW50OyB9IH1cblxuI3BhZ2UtY29tbXVuaXR5IG1haW4ge1xuICBiYWNrZ3JvdW5kOiB3aGl0ZTtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICB6LWluZGV4OiAxO1xuICBvdmVyZmxvdzogaGlkZGVuOyB9XG5cbiNwYWdlLWNvbW11bml0eSAubWVldHVwcyB7XG4gIHBhZGRpbmctdG9wOiA5NnB4OyB9XG4gICNwYWdlLWNvbW11bml0eSAubWVldHVwcyAuc3BsaXQge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47IH1cbiAgICBAbWVkaWEgKG1heC13aWR0aDogMTIxOXB4KSBhbmQgKG1pbi13aWR0aDogOTkycHgpIHtcbiAgICAgICNwYWdlLWNvbW11bml0eSAubWVldHVwcyAuc3BsaXQgLmJ0bnMge1xuICAgICAgICBwYWRkaW5nLXRvcDogMDtcbiAgICAgICAgbWFyZ2luLWxlZnQ6IDI0cHg7IH1cbiAgICAgICNwYWdlLWNvbW11bml0eSAubWVldHVwcyAuc3BsaXQgLmJ0biB7XG4gICAgICAgIG1hcmdpbi1ib3R0b206IDhweDsgfSB9XG4gICAgQG1lZGlhIChtYXgtd2lkdGg6IDc2N3B4KSB7XG4gICAgICAjcGFnZS1jb21tdW5pdHkgLm1lZXR1cHMgLnNwbGl0IHtcbiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyOyB9IH1cbiAgI3BhZ2UtY29tbXVuaXR5IC5tZWV0dXBzIGhncm91cCB7XG4gICAgbWF4LXdpZHRoOiA1OTJweDtcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7IH1cbiAgICAjcGFnZS1jb21tdW5pdHkgLm1lZXR1cHMgaGdyb3VwIGgyIHtcbiAgICAgIGZvbnQtc2l6ZTogMzFweDtcbiAgICAgIGZvbnQtd2VpZ2h0OiA3MDA7XG4gICAgICBsZXR0ZXItc3BhY2luZzogLS4wMDZlbTtcbiAgICAgIG1hcmdpbi1ib3R0b206IDEycHg7IH1cbiAgICAjcGFnZS1jb21tdW5pdHkgLm1lZXR1cHMgaGdyb3VwIHAge1xuICAgICAgZm9udC1zaXplOiAxOHB4O1xuICAgICAgbGluZS1oZWlnaHQ6IDI4cHg7XG4gICAgICBsZXR0ZXItc3BhY2luZzogLS4wMDVlbTsgfVxuICAjcGFnZS1jb21tdW5pdHkgLm1lZXR1cHMgLmJ0bnMge1xuICAgIHBhZGRpbmctdG9wOiA3OHB4OyB9XG4gICAgI3BhZ2UtY29tbXVuaXR5IC5tZWV0dXBzIC5idG5zIDpmaXJzdC1jaGlsZCB7XG4gICAgICBtYXJnaW4tcmlnaHQ6IDZweDsgfVxuICAjcGFnZS1jb21tdW5pdHkgLm1lZXR1cHMgLmJ0biB7XG4gICAgZm9udC1zaXplOiAxNnB4O1xuICAgIHBhZGRpbmc6IDE0cHggMThweCAxMnB4O1xuICAgIGxldHRlci1zcGFjaW5nOiAtLjAxZW07XG4gICAgZm9udC1mYW1pbHk6IFwiRWluYVwiLCBcIkhlbHZldGljYSBOZXVlXCIsIEhlbHZldGljYSwgc2Fucy1zZXJpZjtcbiAgICBmb250LXdlaWdodDogNzAwO1xuICAgIHRyYW5zaXRpb246IGFsbCAuMnMgZWFzZTsgfVxuICAjcGFnZS1jb21tdW5pdHkgLm1lZXR1cHMgdWwge1xuICAgIGxpc3Qtc3R5bGU6IG5vbmU7XG4gICAgcGFkZGluZzogMDtcbiAgICBtYXJnaW46IDY0cHggMCA4MHB4O1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIGxlZnQ6IDA7XG4gICAgb3BhY2l0eTogMDtcbiAgICB3aWxsLWNoYW5nZTogdHJhbnNmb3JtO1xuICAgIGFuaW1hdGlvbjogMXMgZmFkZUluIGZvcndhcmRzIDFzOyB9XG4gICNwYWdlLWNvbW11bml0eSAubWVldHVwcyBsaSB7XG4gICAgbWFyZ2luLXJpZ2h0OiA4MHB4OyB9XG4gICAgI3BhZ2UtY29tbXVuaXR5IC5tZWV0dXBzIGxpIGEge1xuICAgICAgcGFkZGluZzogMTZweCAzNXB4IDE0cHggNzNweDtcbiAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgdHJhbnNpdGlvbjogLjRzIHRyYW5zZm9ybSBlYXNlOyB9XG4gICAgICAjcGFnZS1jb21tdW5pdHkgLm1lZXR1cHMgbGkgYTo6YmVmb3JlIHtcbiAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICB0b3A6IDA7XG4gICAgICAgIHJpZ2h0OiAwO1xuICAgICAgICBsZWZ0OiAwO1xuICAgICAgICBib3R0b206IDA7XG4gICAgICAgIGNvbnRlbnQ6ICcnO1xuICAgICAgICBib3gtc2hhZG93OiAwIDZweCAxMnB4IHJnYmEoMCwgOCwgMjQsIDAuMDgpLCAwIDJweCA0cHggcmdiYSgwLCA4LCAyNCwgMC4wNCk7XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDMwcHg7XG4gICAgICAgIHRyYW5zaXRpb246IGJveC1zaGFkb3cgLjFzIGVhc2UsIHRyYW5zZm9ybSAuMXMgZWFzZTsgfVxuICAgICAgI3BhZ2UtY29tbXVuaXR5IC5tZWV0dXBzIGxpIGE6OmFmdGVyIHtcbiAgICAgICAgYmFja2dyb3VuZDogdXJsKFwiL2ltZy9jb21tdW5pdHkvZmxhZ3MucG5nXCIpIDAgMCBuby1yZXBlYXQ7XG4gICAgICAgIGJhY2tncm91bmQtc2l6ZTogNDhweDtcbiAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICBsZWZ0OiAxMXB4O1xuICAgICAgICB0b3A6IGNhbGMoNTAlIC0gMjRweCk7XG4gICAgICAgIGhlaWdodDogNDhweDtcbiAgICAgICAgd2lkdGg6IDQ4cHg7XG4gICAgICAgIGNvbnRlbnQ6ICcnOyB9XG4gICAgICAjcGFnZS1jb21tdW5pdHkgLm1lZXR1cHMgbGkgYS51azo6YWZ0ZXIge1xuICAgICAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwIDBweDsgfVxuICAgICAgI3BhZ2UtY29tbXVuaXR5IC5tZWV0dXBzIGxpIGEuY2g6OmFmdGVyIHtcbiAgICAgICAgYmFja2dyb3VuZC1wb3NpdGlvbjogMCAtNDhweDsgfVxuICAgICAgI3BhZ2UtY29tbXVuaXR5IC5tZWV0dXBzIGxpIGEuZGU6OmFmdGVyIHtcbiAgICAgICAgYmFja2dyb3VuZC1wb3NpdGlvbjogMCAtOTZweDsgfVxuICAgICAgI3BhZ2UtY29tbXVuaXR5IC5tZWV0dXBzIGxpIGEuaWw6OmFmdGVyIHtcbiAgICAgICAgYmFja2dyb3VuZC1wb3NpdGlvbjogMCAtMTQ0cHg7IH1cbiAgICAgICNwYWdlLWNvbW11bml0eSAubWVldHVwcyBsaSBhLnVzOjphZnRlciB7XG4gICAgICAgIGJhY2tncm91bmQtcG9zaXRpb246IDAgLTE5MnB4OyB9XG4gICAgICAjcGFnZS1jb21tdW5pdHkgLm1lZXR1cHMgbGkgYS5icjo6YWZ0ZXIge1xuICAgICAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwIC0yNDBweDsgfVxuICAgICAgI3BhZ2UtY29tbXVuaXR5IC5tZWV0dXBzIGxpIGEubmw6OmFmdGVyIHtcbiAgICAgICAgYmFja2dyb3VuZC1wb3NpdGlvbjogMCAtMjg4cHg7IH1cbiAgICAgICNwYWdlLWNvbW11bml0eSAubWVldHVwcyBsaSBhLmVzOjphZnRlciB7XG4gICAgICAgIGJhY2tncm91bmQtcG9zaXRpb246IDAgLTMzNnB4OyB9XG4gICAgICAjcGFnZS1jb21tdW5pdHkgLm1lZXR1cHMgbGkgYS5hbXM6OmFmdGVyIHtcbiAgICAgICAgYmFja2dyb3VuZC1wb3NpdGlvbjogMCAtMzg0cHg7IH1cbiAgICAgICNwYWdlLWNvbW11bml0eSAubWVldHVwcyBsaSBhLmluOjphZnRlciB7XG4gICAgICAgIGJhY2tncm91bmQtcG9zaXRpb246IDAgLTQzMnB4OyB9XG4gICAgICAjcGFnZS1jb21tdW5pdHkgLm1lZXR1cHMgbGkgYS55dnI6OmFmdGVyIHtcbiAgICAgICAgYmFja2dyb3VuZC1wb3NpdGlvbjogMCAtNDgwcHg7IH1cbiAgICAgICNwYWdlLWNvbW11bml0eSAubWVldHVwcyBsaSBhLnRyOjphZnRlciB7XG4gICAgICAgIGJhY2tncm91bmQtcG9zaXRpb246IDAgLTUyOHB4OyB9XG4gICAgICAjcGFnZS1jb21tdW5pdHkgLm1lZXR1cHMgbGkgYS5hdTo6YWZ0ZXIge1xuICAgICAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwIC01NzZweDsgfVxuICAgICAgI3BhZ2UtY29tbXVuaXR5IC5tZWV0dXBzIGxpIGEuZGs6OmFmdGVyIHtcbiAgICAgICAgYmFja2dyb3VuZC1wb3NpdGlvbjogMCAtNjI0cHg7IH1cbiAgICAgICNwYWdlLWNvbW11bml0eSAubWVldHVwcyBsaSBhLmh1OjphZnRlciB7XG4gICAgICAgIGJhY2tncm91bmQtcG9zaXRpb246IDAgLTY3MnB4OyB9XG4gICAgICAjcGFnZS1jb21tdW5pdHkgLm1lZXR1cHMgbGkgYS5jbzo6YWZ0ZXIge1xuICAgICAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwIC03MjBweDsgfVxuICAgICAgI3BhZ2UtY29tbXVuaXR5IC5tZWV0dXBzIGxpIGEuanA6OmFmdGVyIHtcbiAgICAgICAgYmFja2dyb3VuZC1wb3NpdGlvbjogMCAtNzY4cHg7IH1cbiAgICAgICNwYWdlLWNvbW11bml0eSAubWVldHVwcyBsaSBhLnVnOjphZnRlciB7XG4gICAgICAgIGJhY2tncm91bmQtcG9zaXRpb246IDAgLTgxNnB4OyB9XG4gICAgICAjcGFnZS1jb21tdW5pdHkgLm1lZXR1cHMgbGkgYS5oazo6YWZ0ZXIge1xuICAgICAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwIC04NjRweDsgfVxuICAgICAgI3BhZ2UtY29tbXVuaXR5IC5tZWV0dXBzIGxpIGEubmc6OmFmdGVyIHtcbiAgICAgICAgYmFja2dyb3VuZC1wb3NpdGlvbjogMCAtOTEycHg7IH1cbiAgICAgICNwYWdlLWNvbW11bml0eSAubWVldHVwcyBsaSBhLnR6OjphZnRlciB7XG4gICAgICAgIGJhY2tncm91bmQtcG9zaXRpb246IDAgLTk2MHB4OyB9XG4gICAgICAjcGFnZS1jb21tdW5pdHkgLm1lZXR1cHMgbGkgYS50aDo6YWZ0ZXIge1xuICAgICAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwIC0xMDA4cHg7IH1cbiAgICAgICNwYWdlLWNvbW11bml0eSAubWVldHVwcyBsaSBhOmhvdmVyIHtcbiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC0xcHgpOyB9XG4gICAgICAgICNwYWdlLWNvbW11bml0eSAubWVldHVwcyBsaSBhOmhvdmVyOjpiZWZvcmUge1xuICAgICAgICAgIGJveC1zaGFkb3c6IDAgMTBweCAxOHB4IHJnYmEoMCwgOCwgMjQsIDAuMSksIDAgNHB4IDhweCByZ2JhKDAsIDgsIDI0LCAwLjA4KTtcbiAgICAgICAgICB0cmFuc2Zvcm06IHNjYWxlM2QoMS4wMSwgMS4wMiwgMSk7IH1cbiAgICAjcGFnZS1jb21tdW5pdHkgLm1lZXR1cHMgbGkgc3Ryb25nLFxuICAgICNwYWdlLWNvbW11bml0eSAubWVldHVwcyBsaSBzcGFuIHtcbiAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgIHotaW5kZXg6IDE7XG4gICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7IH1cbiAgICAjcGFnZS1jb21tdW5pdHkgLm1lZXR1cHMgbGkgc3Ryb25nIHtcbiAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7XG4gICAgICBsZXR0ZXItc3BhY2luZzogLS4wMWVtO1xuICAgICAgZm9udC1zaXplOiAxNHB4O1xuICAgICAgbGluZS1oZWlnaHQ6IDE2cHg7XG4gICAgICBjb2xvcjogIzBmMTYyMjsgfVxuICAgICNwYWdlLWNvbW11bml0eSAubWVldHVwcyBsaSBzcGFuIHtcbiAgICAgIGZvbnQtc2l6ZTogMTJweDtcbiAgICAgIGxldHRlci1zcGFjaW5nOiAtLjAxZW07XG4gICAgICBjb2xvcjogIzUwNjE3NjsgfVxuXG4jcGFnZS1jb21tdW5pdHkgLmltYWdlLXdhbGwge1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LXdyYXA6IHdyYXA7XG4gIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcbiAgbWFyZ2luLXRvcDogMjIwcHg7IH1cbiAgQG1lZGlhIChtYXgtd2lkdGg6IDEyMTlweCkge1xuICAgICNwYWdlLWNvbW11bml0eSAuaW1hZ2Utd2FsbCB7XG4gICAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWFyb3VuZDsgfSB9XG4gICNwYWdlLWNvbW11bml0eSAuaW1hZ2Utd2FsbCBpbWcge1xuICAgIGhlaWdodDogMjU2cHg7XG4gICAgbWFyZ2luLWJvdHRvbTogMTRweDsgfVxuICAgIEBtZWRpYSAobWF4LXdpZHRoOiAxMjE5cHgpIHtcbiAgICAgICNwYWdlLWNvbW11bml0eSAuaW1hZ2Utd2FsbCBpbWcge1xuICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWFyb3VuZDsgfSB9XG4gIEBtZWRpYSAobWF4LXdpZHRoOiA3NjdweCkge1xuICAgICNwYWdlLWNvbW11bml0eSAuaW1hZ2Utd2FsbCB7XG4gICAgICBtYXJnaW4tbGVmdDogLTVweDtcbiAgICAgIG1hcmdpbi1yaWdodDogLTVweDsgfVxuICAgICAgI3BhZ2UtY29tbXVuaXR5IC5pbWFnZS13YWxsIGltZyB7XG4gICAgICAgIG1hcmdpbi1yaWdodDogNXB4O1xuICAgICAgICBtYXJnaW4tbGVmdDogNXB4O1xuICAgICAgICBoZWlnaHQ6IDEyOHB4OyB9IH1cbiAgQG1lZGlhIChtYXgtd2lkdGg6IDQ0MHB4KSB7XG4gICAgI3BhZ2UtY29tbXVuaXR5IC5pbWFnZS13YWxsIGltZyB7XG4gICAgICBoZWlnaHQ6IDY0cHg7IH0gfVxuXG4jcGFnZS1jb21tdW5pdHkgLmxlYWRlcnMge1xuICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQodG8gYm90dG9tLCAjZjdmOWZiLCB3aGl0ZSA1MCUsIHdoaXRlKTtcbiAgbWFyZ2luLXRvcDogLTE0MnB4O1xuICBwYWRkaW5nLXRvcDogMTgycHg7IH1cbiAgI3BhZ2UtY29tbXVuaXR5IC5sZWFkZXJzIGhncm91cCB7XG4gICAgbWFyZ2luOiA4NHB4IGF1dG8gNjZweDtcbiAgICBtYXgtd2lkdGg6IDY4NHB4O1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjsgfVxuICAgICNwYWdlLWNvbW11bml0eSAubGVhZGVycyBoZ3JvdXAgaDIge1xuICAgICAgZm9udC13ZWlnaHQ6IDcwMDtcbiAgICAgIGZvbnQtc2l6ZTogMzJweDtcbiAgICAgIG1hcmdpbi1ib3R0b206IDEzcHg7XG4gICAgICBsZXR0ZXItc3BhY2luZzogLTAuMDFlbTsgfVxuICAgICNwYWdlLWNvbW11bml0eSAubGVhZGVycyBoZ3JvdXAgcCB7XG4gICAgICBmb250LXNpemU6IDE4cHg7XG4gICAgICBsZXR0ZXItc3BhY2luZzogLS4wMWVtO1xuICAgICAgbGluZS1oZWlnaHQ6IDI4cHg7IH1cbiAgI3BhZ2UtY29tbXVuaXR5IC5sZWFkZXJzIHVsIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGZsZXgtd3JhcDogd3JhcDtcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG4gICAgcGFkZGluZzogMTVweDsgfVxuICAgICNwYWdlLWNvbW11bml0eSAubGVhZGVycyB1bDo6YmVmb3JlLCAjcGFnZS1jb21tdW5pdHkgLmxlYWRlcnMgdWw6OmFmdGVyIHtcbiAgICAgIGRpc3BsYXk6IG5vbmU7IH1cbiAgI3BhZ2UtY29tbXVuaXR5IC5sZWFkZXJzIGxpIHtcbiAgICBmbGV4OiAwIDAgMjcxcHg7XG4gICAgbGlzdC1zdHlsZTogbm9uZTtcbiAgICBwYWRkaW5nOiA4MnB4IDI0cHggMThweDtcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIG1hcmdpbi1ib3R0b206IDU1cHg7IH1cbiAgICAjcGFnZS1jb21tdW5pdHkgLmxlYWRlcnMgbGk6OmJlZm9yZSwgI3BhZ2UtY29tbXVuaXR5IC5sZWFkZXJzIGxpOjphZnRlciB7XG4gICAgICBjb250ZW50OiAnJztcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsgfVxuICAgICNwYWdlLWNvbW11bml0eSAubGVhZGVycyBsaTo6YmVmb3JlIHtcbiAgICAgIHRvcDogMDtcbiAgICAgIHJpZ2h0OiAwO1xuICAgICAgbGVmdDogMDtcbiAgICAgIGJvdHRvbTogMDtcbiAgICAgIGJvcmRlci1yYWRpdXM6IDhweDtcbiAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lO1xuICAgICAgYm94LXNoYWRvdzogMCA0cHggOHB4IHJnYmEoMCwgOCwgMjQsIDAuMDgpLCAwcHggOHB4IDMycHggcmdiYSgwLCA4LCAyNCwgMC4xKTtcbiAgICAgIHRyYW5zaXRpb246IC4ycyBib3gtc2hhZG93IGVhc2Utb3V0LCAuMnMgdHJhbnNmb3JtIGVhc2Utb3V0OyB9XG4gICAgI3BhZ2UtY29tbXVuaXR5IC5sZWFkZXJzIGxpOjphZnRlciB7XG4gICAgICB0b3A6IC0yMHB4O1xuICAgICAgcmlnaHQ6IGNhbGMoNTAlIC0gNDVweCk7XG4gICAgICBiYWNrZ3JvdW5kOiB1cmwoXCIvaW1nL2NvbW11bml0eS9jb21tdW5pdHktbGVhZGVycy1hdmF0YXJzLnBuZ1wiKSAwIDAgbm8tcmVwZWF0O1xuICAgICAgYmFja2dyb3VuZC1zaXplOiA5MHB4O1xuICAgICAgaGVpZ2h0OiA5MHB4O1xuICAgICAgd2lkdGg6IDkwcHg7IH1cbiAgICAjcGFnZS1jb21tdW5pdHkgLmxlYWRlcnMgbGkuc2ltb246OmFmdGVyIHtcbiAgICAgIGJhY2tncm91bmQtcG9zaXRpb246IDAgMHB4OyB9XG4gICAgI3BhZ2UtY29tbXVuaXR5IC5sZWFkZXJzIGxpLmpvc2g6OmFmdGVyIHtcbiAgICAgIGJhY2tncm91bmQtcG9zaXRpb246IDAgLTkwcHg7IH1cbiAgICAjcGFnZS1jb21tdW5pdHkgLmxlYWRlcnMgbGkuam9yZ2U6OmFmdGVyIHtcbiAgICAgIGJhY2tncm91bmQtcG9zaXRpb246IDAgLTE4MHB4OyB9XG4gICAgI3BhZ2UtY29tbXVuaXR5IC5sZWFkZXJzIGxpLnZlbmk6OmFmdGVyIHtcbiAgICAgIGJhY2tncm91bmQtcG9zaXRpb246IDAgLTI3MHB4OyB9XG4gICAgI3BhZ2UtY29tbXVuaXR5IC5sZWFkZXJzIGxpLmFzaHRleWE6OmFmdGVyIHtcbiAgICAgIGJhY2tncm91bmQtcG9zaXRpb246IDAgLTM2MHB4OyB9XG4gICAgI3BhZ2UtY29tbXVuaXR5IC5sZWFkZXJzIGxpLnBhdWw6OmFmdGVyIHtcbiAgICAgIGJhY2tncm91bmQtcG9zaXRpb246IDAgLTQ1MHB4OyB9XG4gICAgI3BhZ2UtY29tbXVuaXR5IC5sZWFkZXJzIGxpLnNhbmk6OmFmdGVyIHtcbiAgICAgIGJhY2tncm91bmQtcG9zaXRpb246IDAgLTU0MHB4OyB9XG4gICAgI3BhZ2UtY29tbXVuaXR5IC5sZWFkZXJzIGxpLmxlaWY6OmFmdGVyIHtcbiAgICAgIGJhY2tncm91bmQtcG9zaXRpb246IDAgLTYzMHB4OyB9XG4gICAgI3BhZ2UtY29tbXVuaXR5IC5sZWFkZXJzIGxpLmRhdmlkOjphZnRlciB7XG4gICAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwIC03MjBweDsgfVxuICAgICNwYWdlLWNvbW11bml0eSAubGVhZGVycyBsaS5jaHJpczo6YWZ0ZXIge1xuICAgICAgYmFja2dyb3VuZC1wb3NpdGlvbjogMCAtODEwcHg7IH1cbiAgICAjcGFnZS1jb21tdW5pdHkgLmxlYWRlcnMgbGkuZGF5YW5hOjphZnRlciB7XG4gICAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwIC05MDBweDsgfVxuICAgICNwYWdlLWNvbW11bml0eSAubGVhZGVycyBsaS5hYXJvbjo6YWZ0ZXIge1xuICAgICAgYmFja2dyb3VuZC1wb3NpdGlvbjogMCAtOTkwcHg7IH1cbiAgICAjcGFnZS1jb21tdW5pdHkgLmxlYWRlcnMgbGk6aG92ZXI6OmJlZm9yZSB7XG4gICAgICBib3gtc2hhZG93OiAwIDJweCA4cHggcmdiYSgwLCA4LCAyNCwgMC4wOCksIDBweCA4cHggMzJweCByZ2JhKDAsIDgsIDI0LCAwLjEpLCAwIDhweCAxOHB4IHJnYmEoMCwgOCwgMjQsIDAuMSk7IH1cbiAgI3BhZ2UtY29tbXVuaXR5IC5sZWFkZXJzIHN0cm9uZyB7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgZm9udC1zaXplOiAxNXB4O1xuICAgIGZvbnQtd2VpZ2h0OiA2MDA7XG4gICAgbGV0dGVyLXNwYWNpbmc6IC4wMWVtOyB9XG4gICNwYWdlLWNvbW11bml0eSAubGVhZGVycyBwIHtcbiAgICBmb250LXNpemU6IDE0cHg7XG4gICAgbWFyZ2luLXRvcDogN3B4O1xuICAgIGxldHRlci1zcGFjaW5nOiAtLjAyZW07IH1cbiAgICAjcGFnZS1jb21tdW5pdHkgLmxlYWRlcnMgcCBhIHtcbiAgICAgIHRyYW5zaXRpb246IC4ycyBjb2xvciBlYXNlLW91dDsgfVxuICAgICAgI3BhZ2UtY29tbXVuaXR5IC5sZWFkZXJzIHAgYTpob3ZlciB7XG4gICAgICAgIGNvbG9yOiAjMDQ1Y2Y1OyB9XG4gICNwYWdlLWNvbW11bml0eSAubGVhZGVycyAudHdpdHRlciB7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIHRvcDogOXB4O1xuICAgIHJpZ2h0OiAxNXB4O1xuICAgIHdpZHRoOiAyMHB4O1xuICAgIGhlaWdodDogMjBweDtcbiAgICBmb250LXNpemU6IDIwcHg7XG4gICAgY29sb3I6ICNkNmRkZWE7XG4gICAgdHJhbnNpdGlvbjogLjJzIHRyYW5zZm9ybSBlYXNlLW91dCwgLjJzIGNvbG9yIGVhc2Utb3V0OyB9XG4gICAgI3BhZ2UtY29tbXVuaXR5IC5sZWFkZXJzIC50d2l0dGVyOmhvdmVyIHtcbiAgICAgIGNvbG9yOiAjNGE4YmZjO1xuICAgICAgdHJhbnNmb3JtOiBzY2FsZTNkKDEuMiwgMS4yLCAxKTsgfVxuICBAbWVkaWEgKG1heC13aWR0aDogOTkxcHgpIHtcbiAgICAjcGFnZS1jb21tdW5pdHkgLmxlYWRlcnMgdWwge1xuICAgICAgcGFkZGluZy1sZWZ0OiAwO1xuICAgICAgcGFkZGluZy1yaWdodDogMDsgfVxuICAgICNwYWdlLWNvbW11bml0eSAubGVhZGVycyBsaSB7XG4gICAgICBmbGV4LWdyb3c6IDE7XG4gICAgICBtYXJnaW4tbGVmdDogMTVweDtcbiAgICAgIG1hcmdpbi1yaWdodDogMTVweDsgfSB9XG5cbiNwYWdlLWNvbW11bml0eSAuam9pbiAuc3BsaXQge1xuICBkaXNwbGF5OiBmbGV4O1xuICBwYWRkaW5nOiA2MHB4IDA7XG4gIGFsaWduLWl0ZW1zOiBmbGV4LWVuZDsgfVxuICBAbWVkaWEgKG1heC13aWR0aDogOTkxcHgpIHtcbiAgICAjcGFnZS1jb21tdW5pdHkgLmpvaW4gLnNwbGl0IHtcbiAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7IH0gfVxuICBAbWVkaWEgKG1heC13aWR0aDogNzY3cHgpIHtcbiAgICAjcGFnZS1jb21tdW5pdHkgLmpvaW4gLnNwbGl0IHtcbiAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47IH1cbiAgICAgICNwYWdlLWNvbW11bml0eSAuam9pbiAuc3BsaXQgaGdyb3VwIHtcbiAgICAgICAgZmxleDogMDsgfVxuICAgICAgI3BhZ2UtY29tbXVuaXR5IC5qb2luIC5zcGxpdCBhc2lkZSB7XG4gICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgICBtYXJnaW4tdG9wOiAyNHB4O1xuICAgICAgICBtYXJnaW4tbGVmdDogMDsgfSB9XG5cbiNwYWdlLWNvbW11bml0eSAuam9pbiBoZ3JvdXAge1xuICBmbGV4OiAwIDUwOHB4OyB9XG4gICNwYWdlLWNvbW11bml0eSAuam9pbiBoZ3JvdXAgaDIge1xuICAgIGZvbnQtc2l6ZTogMjRweDtcbiAgICBmb250LXdlaWdodDogNzAwO1xuICAgIGxldHRlci1zcGFjaW5nOiAtLjAxZW07IH1cbiAgI3BhZ2UtY29tbXVuaXR5IC5qb2luIGhncm91cCBwIHtcbiAgICBmb250LXNpemU6IDE2cHg7XG4gICAgbWFyZ2luLXRvcDogMTdweDtcbiAgICBsaW5lLWhlaWdodDogMS41ZW07XG4gICAgbGV0dGVyLXNwYWNpbmc6IC0uMDJlbTtcbiAgICBtYXJnaW4tYm90dG9tOiAwOyB9XG5cbiNwYWdlLWNvbW11bml0eSAuam9pbiBhc2lkZSB7XG4gIG1hcmdpbi1sZWZ0OiBhdXRvO1xuICB3aWR0aDogNDYwcHg7XG4gIHBhZGRpbmctYm90dG9tOiAycHg7IH1cbiAgQG1lZGlhIChtYXgtd2lkdGg6IDk5MXB4KSB7XG4gICAgI3BhZ2UtY29tbXVuaXR5IC5qb2luIGFzaWRlIHtcbiAgICAgIG1hcmdpbi1sZWZ0OiAyMHB4OyB9IH1cbiAgI3BhZ2UtY29tbXVuaXR5IC5qb2luIGFzaWRlIGgzIHtcbiAgICBmb250LXNpemU6IDE2cHg7XG4gICAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgICBsZXR0ZXItc3BhY2luZzogLS4wMWVtOyB9XG4gICNwYWdlLWNvbW11bml0eSAuam9pbiBhc2lkZSBpb25pYy1uZXdzbGV0dGVyLXNpZ251cCB7XG4gICAgbWFyZ2luLXRvcDogMTFweDtcbiAgICBkaXNwbGF5OiBibG9jazsgfVxuXG4jcGFnZS1jb21tdW5pdHkgLmpvaW4gdWwge1xuICBwYWRkaW5nOiAwO1xuICBsaXN0LXN0eWxlOiBub25lO1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LXdyYXA6IHdyYXA7XG4gIG1hcmdpbi10b3A6IDI3cHg7XG4gIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjsgfVxuICBAbWVkaWEgKG1heC13aWR0aDogMTIxOXB4KSB7XG4gICAgI3BhZ2UtY29tbXVuaXR5IC5qb2luIHVsIHtcbiAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYXJvdW5kOyB9IH1cblxuI3BhZ2UtY29tbXVuaXR5IC5qb2luIGxpIHtcbiAgbWFyZ2luLWJvdHRvbTogNThweDtcbiAgd2lkdGg6IDMzN3B4OyB9XG4gICNwYWdlLWNvbW11bml0eSAuam9pbiBsaSBhIHtcbiAgICBwYWRkaW5nLWxlZnQ6IDgycHg7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlOyB9XG4gICAgI3BhZ2UtY29tbXVuaXR5IC5qb2luIGxpIGE6OmJlZm9yZSB7XG4gICAgICBiYWNrZ3JvdW5kOiB1cmwoXCIvaW1nL2NvbW11bml0eS9zb2NpYWwtaWNvbnMucG5nXCIpIDAgMCBuby1yZXBlYXQ7XG4gICAgICBiYWNrZ3JvdW5kLXNpemU6IDcwcHg7XG4gICAgICBoZWlnaHQ6IDcwcHg7XG4gICAgICB3aWR0aDogNzBweDtcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgIGNvbnRlbnQ6ICcnO1xuICAgICAgdG9wOiBjYWxjKDUwJSAtIDMzcHgpO1xuICAgICAgbGVmdDogLTJweDtcbiAgICAgIHRyYW5zaXRpb246IC4ycyB0cmFuc2Zvcm0gZWFzZS1vdXQ7XG4gICAgICBiYWNrZmFjZS12aXNpYmlsaXR5OiBoaWRkZW47XG4gICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoMCk7XG4gICAgICBvdXRsaW5lOiAxcHggc29saWQgdHJhbnNwYXJlbnQ7IH1cbiAgICAjcGFnZS1jb21tdW5pdHkgLmpvaW4gbGkgYTpob3ZlciBzdHJvbmcge1xuICAgICAgY29sb3I6IGJsYWNrOyB9XG4gICAgI3BhZ2UtY29tbXVuaXR5IC5qb2luIGxpIGE6aG92ZXIgc3BhbiB7XG4gICAgICBjb2xvcjogIzRjNTg2OTsgfVxuICAgICNwYWdlLWNvbW11bml0eSAuam9pbiBsaSBhOmhvdmVyOjpiZWZvcmUge1xuICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKDJweCk7IH1cbiAgI3BhZ2UtY29tbXVuaXR5IC5qb2luIGxpLnNsYWNrIGE6OmJlZm9yZSB7XG4gICAgYmFja2dyb3VuZC1wb3NpdGlvbjogMCAwcHg7IH1cbiAgI3BhZ2UtY29tbXVuaXR5IC5qb2luIGxpLmZvcnVtIGE6OmJlZm9yZSB7XG4gICAgYmFja2dyb3VuZC1wb3NpdGlvbjogMCAtNzBweDsgfVxuICAjcGFnZS1jb21tdW5pdHkgLmpvaW4gbGkudHdpdHRlciBhOjpiZWZvcmUge1xuICAgIGJhY2tncm91bmQtcG9zaXRpb246IDAgLTE0MHB4OyB9XG4gICNwYWdlLWNvbW11bml0eSAuam9pbiBsaS5naXRodWIgYTo6YmVmb3JlIHtcbiAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwIC0yMTBweDsgfVxuICAjcGFnZS1jb21tdW5pdHkgLmpvaW4gbGkuc28gYTo6YmVmb3JlIHtcbiAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwIC0yODBweDsgfVxuICAjcGFnZS1jb21tdW5pdHkgLmpvaW4gbGkuZmFjZWJvb2sgYTo6YmVmb3JlIHtcbiAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwIC0zNTBweDsgfVxuICAjcGFnZS1jb21tdW5pdHkgLmpvaW4gbGkueW91dHViZSBhOjpiZWZvcmUge1xuICAgIGJhY2tncm91bmQtcG9zaXRpb246IDAgLTQyMHB4OyB9XG4gICNwYWdlLWNvbW11bml0eSAuam9pbiBsaS5ibG9nIGE6OmJlZm9yZSB7XG4gICAgYmFja2dyb3VuZC1wb3NpdGlvbjogMCAtNDkwcHg7IH1cbiAgI3BhZ2UtY29tbXVuaXR5IC5qb2luIGxpLm1lZGl1bSBhOjpiZWZvcmUge1xuICAgIGJhY2tncm91bmQtcG9zaXRpb246IDAgLTU2MHB4OyB9XG4gICNwYWdlLWNvbW11bml0eSAuam9pbiBsaSBzdHJvbmcge1xuICAgIHRyYW5zaXRpb246IC4ycyBjb2xvciBlYXNlOyB9XG4gICNwYWdlLWNvbW11bml0eSAuam9pbiBsaSBzdHJvbmcge1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIGZvbnQtd2VpZ2h0OiA2MDA7XG4gICAgZm9udC1zaXplOiAxN3B4O1xuICAgIGNvbG9yOiAjMGYxNjIyO1xuICAgIG1hcmdpbi1ib3R0b206IDJweDsgfVxuICAjcGFnZS1jb21tdW5pdHkgLmpvaW4gbGkgc3BhbiB7XG4gICAgZm9udC1zaXplOiAxM3B4O1xuICAgIGxldHRlci1zcGFjaW5nOiAuMDE0ZW07XG4gICAgY29sb3I6ICM2YzdlOTU7IH1cblxuI3BhZ2UtY29tbXVuaXR5IC5sYXRlc3Qge1xuICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQodG8gYm90dG9tLCAjZjdmOWZjLCAjZmVmZWZmKTtcbiAgbWFyZ2luLXRvcDogMTAxcHg7XG4gIHBhZGRpbmctdG9wOiAxMzhweDsgfVxuICAjcGFnZS1jb21tdW5pdHkgLmxhdGVzdCBoZ3JvdXAge1xuICAgIG1hcmdpbjogMCBhdXRvIDcycHg7XG4gICAgbWF4LXdpZHRoOiA1NjBweDtcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7IH1cbiAgICAjcGFnZS1jb21tdW5pdHkgLmxhdGVzdCBoZ3JvdXAgaDIge1xuICAgICAgZm9udC13ZWlnaHQ6IDcwMDtcbiAgICAgIGZvbnQtc2l6ZTogMzJweDtcbiAgICAgIGxldHRlci1zcGFjaW5nOiAtLjAyZW07IH1cbiAgICAjcGFnZS1jb21tdW5pdHkgLmxhdGVzdCBoZ3JvdXAgcCB7XG4gICAgICBtYXJnaW4tdG9wOiAxMnB4O1xuICAgICAgZm9udC1zaXplOiAxOHB4O1xuICAgICAgbGluZS1oZWlnaHQ6IDI4cHg7XG4gICAgICBsZXR0ZXItc3BhY2luZzogLjAwNmVtOyB9XG4gICNwYWdlLWNvbW11bml0eSAubGF0ZXN0IC50dXRvcmlhbHMsXG4gICNwYWdlLWNvbW11bml0eSAubGF0ZXN0IC52aWRlb3Mge1xuICAgIG1hcmdpbi10b3A6IDI2cHg7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlOyB9XG4gICAgI3BhZ2UtY29tbXVuaXR5IC5sYXRlc3QgLnR1dG9yaWFscyBoMyxcbiAgICAjcGFnZS1jb21tdW5pdHkgLmxhdGVzdCAudmlkZW9zIGgzIHtcbiAgICAgIGZvbnQtc2l6ZTogMjBweDtcbiAgICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XG4gICAgICBsZXR0ZXItc3BhY2luZzogLjA4ZW07XG4gICAgICBmb250LXdlaWdodDogNzAwOyB9XG4gICAgI3BhZ2UtY29tbXVuaXR5IC5sYXRlc3QgLnR1dG9yaWFscyAuc3Vic2NyaWJlLFxuICAgICNwYWdlLWNvbW11bml0eSAubGF0ZXN0IC52aWRlb3MgLnN1YnNjcmliZSB7XG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICBjb2xvcjogIzM4ODBmZjtcbiAgICAgIGJhY2tncm91bmQ6ICNkZmVkZmY7XG4gICAgICBib3JkZXItcmFkaXVzOiAxNnB4O1xuICAgICAgcGFkZGluZzogNHB4IDExcHggNXB4O1xuICAgICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcbiAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7XG4gICAgICBmb250LXNpemU6IDExcHg7XG4gICAgICBsZXR0ZXItc3BhY2luZzogMC4wNGVtO1xuICAgICAgcmlnaHQ6IDA7XG4gICAgICB0b3A6IC0ycHg7IH1cbiAgICAgICNwYWdlLWNvbW11bml0eSAubGF0ZXN0IC50dXRvcmlhbHMgLnN1YnNjcmliZSBpb24taWNvbixcbiAgICAgICNwYWdlLWNvbW11bml0eSAubGF0ZXN0IC52aWRlb3MgLnN1YnNjcmliZSBpb24taWNvbiB7XG4gICAgICAgIG1hcmdpbi1yaWdodDogMXB4O1xuICAgICAgICBmb250LXNpemU6IDEwcHg7XG4gICAgICAgIHZlcnRpY2FsLWFsaWduOiAtNSU7IH1cbiAgICAjcGFnZS1jb21tdW5pdHkgLmxhdGVzdCAudHV0b3JpYWxzIHVsLFxuICAgICNwYWdlLWNvbW11bml0eSAubGF0ZXN0IC52aWRlb3MgdWwge1xuICAgICAgcGFkZGluZzogMjRweCAwcHg7XG4gICAgICBsaXN0LXN0eWxlOiBub25lO1xuICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgIGZsZXgtd3JhcDogd3JhcDtcbiAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjsgfVxuICAgICNwYWdlLWNvbW11bml0eSAubGF0ZXN0IC50dXRvcmlhbHMgbGksXG4gICAgI3BhZ2UtY29tbXVuaXR5IC5sYXRlc3QgLnZpZGVvcyBsaSB7XG4gICAgICBmbGV4OiAwIDMzM3B4O1xuICAgICAgbWFyZ2luLWJvdHRvbTogMjhweDsgfVxuICAgICAgQG1lZGlhIChtYXgtd2lkdGg6IDEyMTlweCkge1xuICAgICAgICAjcGFnZS1jb21tdW5pdHkgLmxhdGVzdCAudHV0b3JpYWxzIGxpLFxuICAgICAgICAjcGFnZS1jb21tdW5pdHkgLmxhdGVzdCAudmlkZW9zIGxpIHtcbiAgICAgICAgICBmbGV4OiAwIDMwMHB4OyB9IH1cbiAgICAgICNwYWdlLWNvbW11bml0eSAubGF0ZXN0IC50dXRvcmlhbHMgbGkgYSxcbiAgICAgICNwYWdlLWNvbW11bml0eSAubGF0ZXN0IC52aWRlb3MgbGkgYSB7XG4gICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICBwYWRkaW5nOiAxcHggMCAxcHggMzlweDtcbiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOyB9XG4gICAgICAgICNwYWdlLWNvbW11bml0eSAubGF0ZXN0IC50dXRvcmlhbHMgbGkgYTo6YmVmb3JlLFxuICAgICAgICAjcGFnZS1jb21tdW5pdHkgLmxhdGVzdCAudmlkZW9zIGxpIGE6OmJlZm9yZSB7XG4gICAgICAgICAgYmFja2dyb3VuZDogdXJsKFwiL2ltZy9jb21tdW5pdHkvbGF0ZXN0LXJzcy1pY29ucy5wbmdcIikgMCAwIG5vLXJlcGVhdDtcbiAgICAgICAgICBiYWNrZ3JvdW5kLXNpemU6IDI4cHg7XG4gICAgICAgICAgaGVpZ2h0OiAyOHB4O1xuICAgICAgICAgIHdpZHRoOiAyOHB4O1xuICAgICAgICAgIGNvbnRlbnQ6ICcnO1xuICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgICB0b3A6IDA7XG4gICAgICAgICAgbGVmdDogMDtcbiAgICAgICAgICB0cmFuc2l0aW9uOiAuMnMgdHJhbnNmb3JtIGVhc2Utb3V0OyB9XG4gICAgICAgICNwYWdlLWNvbW11bml0eSAubGF0ZXN0IC50dXRvcmlhbHMgbGkgYTpob3ZlciBzdHJvbmcsXG4gICAgICAgICNwYWdlLWNvbW11bml0eSAubGF0ZXN0IC52aWRlb3MgbGkgYTpob3ZlciBzdHJvbmcge1xuICAgICAgICAgIGNvbG9yOiBibGFjazsgfVxuICAgICAgICAjcGFnZS1jb21tdW5pdHkgLmxhdGVzdCAudHV0b3JpYWxzIGxpIGE6aG92ZXIgcCxcbiAgICAgICAgI3BhZ2UtY29tbXVuaXR5IC5sYXRlc3QgLnZpZGVvcyBsaSBhOmhvdmVyIHAge1xuICAgICAgICAgIGNvbG9yOiAjMzIzYzRjOyB9XG4gICAgICAgICNwYWdlLWNvbW11bml0eSAubGF0ZXN0IC50dXRvcmlhbHMgbGkgYTpob3ZlciBzcGFuLFxuICAgICAgICAjcGFnZS1jb21tdW5pdHkgLmxhdGVzdCAudmlkZW9zIGxpIGE6aG92ZXIgc3BhbiB7XG4gICAgICAgICAgY29sb3I6ICM1ZjcwODU7IH1cbiAgICAgICAgI3BhZ2UtY29tbXVuaXR5IC5sYXRlc3QgLnR1dG9yaWFscyBsaSBhOmhvdmVyOjpiZWZvcmUsXG4gICAgICAgICNwYWdlLWNvbW11bml0eSAubGF0ZXN0IC52aWRlb3MgbGkgYTpob3Zlcjo6YmVmb3JlIHtcbiAgICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoMnB4KTsgfVxuICAgICAgI3BhZ2UtY29tbXVuaXR5IC5sYXRlc3QgLnR1dG9yaWFscyBsaSBzdHJvbmcsXG4gICAgICAjcGFnZS1jb21tdW5pdHkgLmxhdGVzdCAudHV0b3JpYWxzIGxpIHAsXG4gICAgICAjcGFnZS1jb21tdW5pdHkgLmxhdGVzdCAudHV0b3JpYWxzIGxpIHNwYW4sXG4gICAgICAjcGFnZS1jb21tdW5pdHkgLmxhdGVzdCAudmlkZW9zIGxpIHN0cm9uZyxcbiAgICAgICNwYWdlLWNvbW11bml0eSAubGF0ZXN0IC52aWRlb3MgbGkgcCxcbiAgICAgICNwYWdlLWNvbW11bml0eSAubGF0ZXN0IC52aWRlb3MgbGkgc3BhbiB7XG4gICAgICAgIHRyYW5zaXRpb246IC4ycyBjb2xvciBlYXNlOyB9XG4gICAgICAjcGFnZS1jb21tdW5pdHkgLmxhdGVzdCAudHV0b3JpYWxzIGxpIHN0cm9uZyxcbiAgICAgICNwYWdlLWNvbW11bml0eSAubGF0ZXN0IC52aWRlb3MgbGkgc3Ryb25nIHtcbiAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgIGxldHRlci1zcGFjaW5nOiAtLjAxOGVtO1xuICAgICAgICBmb250LXdlaWdodDogNjAwO1xuICAgICAgICBsaW5lLWhlaWdodDogMS43NWVtOyB9XG4gICAgICAjcGFnZS1jb21tdW5pdHkgLmxhdGVzdCAudHV0b3JpYWxzIGxpIHAsXG4gICAgICAjcGFnZS1jb21tdW5pdHkgLmxhdGVzdCAudmlkZW9zIGxpIHAge1xuICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgICAgY29sb3I6ICM1MTYwN2E7XG4gICAgICAgIG1hcmdpbi10b3A6IDNweDtcbiAgICAgICAgZm9udC1zaXplOiAxM3B4O1xuICAgICAgICBsaW5lLWhlaWdodDogMS45ZW07XG4gICAgICAgIGxldHRlci1zcGFjaW5nOiAtLjAyZW07IH1cbiAgICAgICNwYWdlLWNvbW11bml0eSAubGF0ZXN0IC50dXRvcmlhbHMgbGkgc3BhbixcbiAgICAgICNwYWdlLWNvbW11bml0eSAubGF0ZXN0IC52aWRlb3MgbGkgc3BhbiB7XG4gICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICBjb2xvcjogIzg3OTZhOTtcbiAgICAgICAgZm9udC1zaXplOiAxMnB4O1xuICAgICAgICBtYXJnaW4tdG9wOiAxMnB4O1xuICAgICAgICBsZXR0ZXItc3BhY2luZzogLjAzZW07IH1cbiAgICBAbWVkaWEgKG1heC13aWR0aDogMTIxOXB4KSB7XG4gICAgICAjcGFnZS1jb21tdW5pdHkgLmxhdGVzdCAudHV0b3JpYWxzIHVsLFxuICAgICAgI3BhZ2UtY29tbXVuaXR5IC5sYXRlc3QgLnZpZGVvcyB1bCB7XG4gICAgICAgIG1hcmdpbi1sZWZ0OiAtMTVweDtcbiAgICAgICAgbWFyZ2luLXJpZ2h0OiAtMTVweDsgfVxuICAgICAgI3BhZ2UtY29tbXVuaXR5IC5sYXRlc3QgLnR1dG9yaWFscyBsaSxcbiAgICAgICNwYWdlLWNvbW11bml0eSAubGF0ZXN0IC52aWRlb3MgbGkge1xuICAgICAgICBmbGV4LWdyb3c6IDE7XG4gICAgICAgIG1hcmdpbi1sZWZ0OiAxNXB4O1xuICAgICAgICBtYXJnaW4tcmlnaHQ6IDE1cHg7IH0gfVxuICAjcGFnZS1jb21tdW5pdHkgLmxhdGVzdCAudmlkZW9zIGxpIGE6OmJlZm9yZSB7XG4gICAgYmFja2dyb3VuZC1wb3NpdGlvbjogMCAtMjhweDsgfVxuXG4jcGFnZS1jb21tdW5pdHkgLmVkdWNhdGlvbiB7XG4gIGJhY2tncm91bmQ6ICMxMjFiMmMgdXJsKFwiL2ltZy9jb21tdW5pdHkvY29tbXVuaXR5LWVkdS1iZy5qcGdcIikgbm8tcmVwZWF0O1xuICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiA1MCUgMDtcbiAgYmFja2dyb3VuZC1zaXplOiAxNjgwcHg7XG4gIG1hcmdpbi10b3A6IDkzcHg7XG4gIHBhZGRpbmctdG9wOiAxMzhweDtcbiAgcGFkZGluZy1ib3R0b206IDc1cHg7IH1cbiAgI3BhZ2UtY29tbXVuaXR5IC5lZHVjYXRpb24gaDIsXG4gICNwYWdlLWNvbW11bml0eSAuZWR1Y2F0aW9uIGgzLFxuICAjcGFnZS1jb21tdW5pdHkgLmVkdWNhdGlvbiBoNCxcbiAgI3BhZ2UtY29tbXVuaXR5IC5lZHVjYXRpb24gcCB7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIGNvbG9yOiB3aGl0ZTtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgei1pbmRleDogMTsgfVxuICAjcGFnZS1jb21tdW5pdHkgLmVkdWNhdGlvbiBwLFxuICAjcGFnZS1jb21tdW5pdHkgLmVkdWNhdGlvbiBoNCB7XG4gICAgb3BhY2l0eTogLjg7IH1cbiAgI3BhZ2UtY29tbXVuaXR5IC5lZHVjYXRpb24gaGdyb3VwIHtcbiAgICBtYXgtd2lkdGg6IDU4MHB4OyB9XG4gICAgI3BhZ2UtY29tbXVuaXR5IC5lZHVjYXRpb24gaGdyb3VwIGgyIHtcbiAgICAgIGZvbnQtc2l6ZTogMzFweDtcbiAgICAgIGZvbnQtd2VpZ2h0OiA3MDA7IH1cbiAgICAjcGFnZS1jb21tdW5pdHkgLmVkdWNhdGlvbiBoZ3JvdXAgcCB7XG4gICAgICBmb250LXNpemU6IDE4cHg7XG4gICAgICBtYXJnaW4tdG9wOiAxM3B4O1xuICAgICAgbGluZS1oZWlnaHQ6IDEuNmVtO1xuICAgICAgbGV0dGVyLXNwYWNpbmc6IC0uMDI2ZW07IH1cbiAgICBAbWVkaWEgKG1heC13aWR0aDogOTkxcHgpIHtcbiAgICAgICNwYWdlLWNvbW11bml0eSAuZWR1Y2F0aW9uIGhncm91cCB7XG4gICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICAgICAgbWFyZ2luOiAwIGF1dG87IH0gfVxuICAjcGFnZS1jb21tdW5pdHkgLmVkdWNhdGlvbiB1bCB7XG4gICAgcGFkZGluZzogNDdweCAxcHg7XG4gICAgbWFyZ2luLXJpZ2h0OiAtMTVweDtcbiAgICBtYXJnaW4tbGVmdDogLTE1cHg7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBmbGV4LXdyYXA6IHdyYXA7XG4gICAgbGlzdC1zdHlsZTogbm9uZTtcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47IH1cbiAgICBAbWVkaWEgKG1heC13aWR0aDogMTIxOXB4KSB7XG4gICAgICAjcGFnZS1jb21tdW5pdHkgLmVkdWNhdGlvbiB1bCB7XG4gICAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYXJvdW5kOyB9IH1cbiAgI3BhZ2UtY29tbXVuaXR5IC5lZHVjYXRpb24gbGkge1xuICAgIGZsZXg6IDAgMjcwcHg7XG4gICAgaGVpZ2h0OiAyMzBweDtcbiAgICBtYXJnaW4tYm90dG9tOiAyOHB4O1xuICAgIG1hcmdpbi1yaWdodDogMTFweDtcbiAgICBtYXJnaW4tbGVmdDogMTFweDsgfVxuICAgICNwYWdlLWNvbW11bml0eSAuZWR1Y2F0aW9uIGxpIGEge1xuICAgICAgcGFkZGluZzogMTJweCAyOXB4O1xuICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICBoZWlnaHQ6IDEwMCU7XG4gICAgICBwb3NpdGlvbjogcmVsYXRpdmU7IH1cbiAgICAgICNwYWdlLWNvbW11bml0eSAuZWR1Y2F0aW9uIGxpIGE6OmJlZm9yZSB7XG4gICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgdG9wOiAwO1xuICAgICAgICByaWdodDogMDtcbiAgICAgICAgYm90dG9tOiAwO1xuICAgICAgICBsZWZ0OiAwO1xuICAgICAgICBjb250ZW50OiAnJztcbiAgICAgICAgYmFja2dyb3VuZDogIzM4ODBmZjtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogOHB4O1xuICAgICAgICB0cmFuc2l0aW9uOiAuMnMgdHJhbnNmb3JtIGVhc2U7IH1cbiAgICAgICNwYWdlLWNvbW11bml0eSAuZWR1Y2F0aW9uIGxpIGE6aG92ZXI6OmJlZm9yZSB7XG4gICAgICAgIHRyYW5zZm9ybTogc2NhbGUzZCgxLjAxLCAxLjAxLCAxKTsgfVxuICAgICNwYWdlLWNvbW11bml0eSAuZWR1Y2F0aW9uIGxpIGg0IHtcbiAgICAgIGZvbnQtc2l6ZTogMTFweDtcbiAgICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XG4gICAgICBsZXR0ZXItc3BhY2luZzogLjE1ZW07XG4gICAgICBtYXJnaW4tYm90dG9tOiA4cHg7XG4gICAgICBmb250LXdlaWdodDogNzAwOyB9XG4gICAgI3BhZ2UtY29tbXVuaXR5IC5lZHVjYXRpb24gbGkgaDMge1xuICAgICAgZm9udC1zaXplOiAyMXB4O1xuICAgICAgbWFyZ2luLXRvcDogMDtcbiAgICAgIGZvbnQtd2VpZ2h0OiA3MDA7XG4gICAgICBsZXR0ZXItc3BhY2luZzogLS4wMWVtOyB9XG4gICAgI3BhZ2UtY29tbXVuaXR5IC5lZHVjYXRpb24gbGkgcCB7XG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICBib3R0b206IDE1cHg7XG4gICAgICBmb250LXNpemU6IDEycHg7XG4gICAgICBsZWZ0OiAyOHB4O1xuICAgICAgcmlnaHQ6IDI4cHg7XG4gICAgICBsZXR0ZXItc3BhY2luZzogLS4wMWVtO1xuICAgICAgbGluZS1oZWlnaHQ6IDEuNGVtOyB9XG4gICAgI3BhZ2UtY29tbXVuaXR5IC5lZHVjYXRpb24gbGk6bnRoLWNoaWxkKDIpIGE6OmJlZm9yZSB7XG4gICAgICBiYWNrZ3JvdW5kOiAjMjg3ZWExOyB9XG4gICAgI3BhZ2UtY29tbXVuaXR5IC5lZHVjYXRpb24gbGk6bnRoLWNoaWxkKDMpIGE6OmJlZm9yZSB7XG4gICAgICBiYWNrZ3JvdW5kOiAjZGE1YjcwOyB9XG4gICAgI3BhZ2UtY29tbXVuaXR5IC5lZHVjYXRpb24gbGk6bnRoLWNoaWxkKDQpIGE6OmJlZm9yZSB7XG4gICAgICBiYWNrZ3JvdW5kOiAjOTViMjUxOyB9XG4gICAgI3BhZ2UtY29tbXVuaXR5IC5lZHVjYXRpb24gbGk6bnRoLWNoaWxkKDUpIGE6OmJlZm9yZSB7XG4gICAgICBiYWNrZ3JvdW5kOiAjMzBhZWViOyB9XG4gICAgI3BhZ2UtY29tbXVuaXR5IC5lZHVjYXRpb24gbGk6bnRoLWNoaWxkKDYpIGE6OmJlZm9yZSB7XG4gICAgICBiYWNrZ3JvdW5kOiAjNGE2MjhhOyB9XG4gICAgI3BhZ2UtY29tbXVuaXR5IC5lZHVjYXRpb24gbGk6bnRoLWNoaWxkKDcpIGE6OmJlZm9yZSB7XG4gICAgICBiYWNrZ3JvdW5kOiAjOGQ1Y2UzOyB9XG4gICAgI3BhZ2UtY29tbXVuaXR5IC5lZHVjYXRpb24gbGk6bnRoLWNoaWxkKDgpIGE6OmJlZm9yZSB7XG4gICAgICBiYWNrZ3JvdW5kOiAjZjQ4ZjYzOyB9XG5cbiNwYWdlLWNvbnRyaWJ1dG9ycyBtYWluIHtcbiAgY29sb3I6ICMxNjFhMWY7XG4gIGZvbnQtZmFtaWx5OiBcIkVpbmFcIiwgXCJIZWx2ZXRpY2EgTmV1ZVwiLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7XG4gIGZvbnQtd2VpZ2h0OiA2MDA7IH1cblxuI3BhZ2UtY29udHJpYnV0b3JzIC5idG4ge1xuICBmb250LXNpemU6IDE2cHg7XG4gIGZvbnQtd2VpZ2h0OiA3MDA7XG4gIHBhZGRpbmc6IDEycHggMjBweDsgfVxuICAjcGFnZS1jb250cmlidXRvcnMgLmJ0bi0tc2Vjb25kYXJ5IHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjMTAyMjQyOyB9XG5cbiNwYWdlLWNvbnRyaWJ1dG9ycyAuY3RhIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7XG4gIGNvbG9yOiBpbmhlcml0O1xuICBwYWRkaW5nLWJvdHRvbTogNjBweDtcbiAgcGFkZGluZy10b3A6IDEyMHB4O1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7IH1cbiAgQG1lZGlhIChtYXgtd2lkdGg6IDc2OHB4KSB7XG4gICAgI3BhZ2UtY29udHJpYnV0b3JzIC5jdGEge1xuICAgICAgcGFkZGluZy10b3A6IDE4MHB4OyB9IH1cblxuI3BhZ2UtY29udHJpYnV0b3JzIC5jdGEgaDEge1xuICBjb2xvcjogIzczQUJGRjtcbiAgZm9udC1zaXplOiA0OHB4O1xuICBmb250LXdlaWdodDogNzAwO1xuICBsZXR0ZXItc3BhY2luZzogLTAuMDJlbTsgfVxuXG4jcGFnZS1jb250cmlidXRvcnMgLmN0YSBoMSBzcGFuIHtcbiAgY29sb3I6ICMzODgwRkY7IH1cblxuI3BhZ2UtY29udHJpYnV0b3JzIC5jdGEgLnR5cGVkLWN1cnNvciB7XG4gIGNvbG9yOiByZ2JhKDAsIDAsIDAsIDApO1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIHdpZHRoOiA0cHg7XG4gIGhlaWdodDogNTZweDtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICB0b3A6IC00cHg7XG4gIGJhY2tncm91bmQ6ICNCRkQ2RkY7XG4gIG9wYWNpdHk6IDE7XG4gIGFuaW1hdGlvbjogdHlwZWRqc0JsaW5rIDFzIGluZmluaXRlOyB9XG5cbkBrZXlmcmFtZXMgdHlwZWRqc0JsaW5rIHtcbiAgMCUge1xuICAgIG9wYWNpdHk6IDE7IH1cbiAgNTAlIHtcbiAgICBvcGFjaXR5OiAwLjA7IH1cbiAgMTAwJSB7XG4gICAgb3BhY2l0eTogMTsgfSB9XG5cbiNwYWdlLWNvbnRyaWJ1dG9ycyAuY3RhIHAge1xuICBjb2xvcjogIzUwNTg2MztcbiAgZm9udC1zaXplOiAxOHB4O1xuICBsaW5lLWhlaWdodDogMzBweDtcbiAgbGV0dGVyLXNwYWNpbmc6IC0wLjAzZW07XG4gIG1hcmdpbjogMC43NWVtIGF1dG8gMS4yNWVtO1xuICBtYXgtd2lkdGg6IDU3MHB4OyB9XG5cbiNwYWdlLWNvbnRyaWJ1dG9ycyAuY3RhIC5jb250YWluZXIge1xuICBwYWRkaW5nLXRvcDogNTBweDtcbiAgcGFkZGluZy1ib3R0b206IDUwcHg7IH1cbiAgQG1lZGlhIChtaW4td2lkdGg6IDc2OHB4KSB7XG4gICAgI3BhZ2UtY29udHJpYnV0b3JzIC5jdGEgLmNvbnRhaW5lciB7XG4gICAgICBwYWRkaW5nLXRvcDogMTAwcHg7XG4gICAgICBwYWRkaW5nLWJvdHRvbTogMTAwcHg7IH0gfVxuXG4jcGFnZS1jb250cmlidXRvcnMgLnNlY3Rpb24taGVhZGVyIHtcbiAgY29sb3I6ICMyZjM3NDQ7XG4gIGZvbnQtc2l6ZTogMjBweDtcbiAgbGV0dGVyLXNwYWNpbmc6IC0wLjAyZW07XG4gIG1hcmdpbi1ib3R0b206IDRlbTtcbiAgbWFyZ2luLXRvcDogNGVtO1xuICBtYXgtd2lkdGg6IDMyZW07IH1cblxuI3BhZ2UtY29udHJpYnV0b3JzIC5zZWN0aW9uLWhlYWRlciBoMiB7XG4gIGNvbG9yOiAjMjQyODJlO1xuICBmb250LXNpemU6IDEuOGVtO1xuICBmb250LXdlaWdodDogNzAwO1xuICBtYXJnaW4tYm90dG9tOiAwLjY1ZW07IH1cblxuI3BhZ2UtY29udHJpYnV0b3JzIC5vc3MgLnNlY3Rpb24taGVhZGVyIGgyIHNwYW4sXG4jcGFnZS1jb250cmlidXRvcnMgLnBybyAuc2VjdGlvbi1oZWFkZXIgaDIgc3BhbiB7XG4gIGJvcmRlci1ib3R0b206IHNvbGlkIDRweCAjMjQyODJlOyB9XG5cbiNwYWdlLWNvbnRyaWJ1dG9ycyAuZmVhdHVyZSB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZvbnQtc2l6ZTogMTZweDtcbiAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgbGV0dGVyLXNwYWNpbmc6IC0wLjAxZW07IH1cblxuI3BhZ2UtY29udHJpYnV0b3JzIC5mZWF0dXJlX19pY29uIHtcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFwiL2ltZy9jb250cmlidXRvcnMvY29udHJpYnV0b3JzLWZlYXR1cmUtaWNvbnMucG5nXCIpO1xuICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiB0b3A7XG4gIGJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7XG4gIGJhY2tncm91bmQtc2l6ZTogMTAwJTtcbiAgZGlzcGxheTogYmxvY2s7XG4gIGZsZXg6IDAgMCA0OHB4O1xuICBoZWlnaHQ6IDQ4cHg7XG4gIG1hcmdpbi1yaWdodDogMmVtO1xuICB3aWR0aDogNDhweDsgfVxuICAjcGFnZS1jb250cmlidXRvcnMgLmZlYXR1cmVfX2ljb24udGFsayB7XG4gICAgYmFja2dyb3VuZC1wb3NpdGlvbi15OiAwOyB9XG4gICNwYWdlLWNvbnRyaWJ1dG9ycyAuZmVhdHVyZV9faWNvbi5zdG9yeSB7XG4gICAgYmFja2dyb3VuZC1wb3NpdGlvbi15OiAtNDhweDsgfVxuICAjcGFnZS1jb250cmlidXRvcnMgLmZlYXR1cmVfX2ljb24uYmxvZyB7XG4gICAgYmFja2dyb3VuZC1wb3NpdGlvbi15OiAtOTZweDsgfVxuXG4jcGFnZS1jb250cmlidXRvcnMgLmZlYXR1cmVfX3RleHQgc3Ryb25nIHtcbiAgZGlzcGxheTogYmxvY2s7XG4gIGZvbnQtc2l6ZTogMS4yNWVtO1xuICBtYXJnaW4tYm90dG9tOiAwLjc1ZW07IH1cblxuI3BhZ2UtY29udHJpYnV0b3JzIC5mZWF0dXJlX190ZXh0IHAge1xuICBjb2xvcjogIzc4ODQ5NztcbiAgbGluZS1oZWlnaHQ6IDEuNjU7IH1cblxuI3BhZ2UtY29udHJpYnV0b3JzIC5mZWF0dXJlLWxpc3Qge1xuICBsaXN0LXN0eWxlOiBub25lO1xuICBtYXJnaW46IDAgMCA0ZW07XG4gIHBhZGRpbmc6IDA7IH1cblxuI3BhZ2UtY29udHJpYnV0b3JzIC5mZWF0dXJlLWxpc3QgPiBsaSB7XG4gIG1hcmdpbi1ib3R0b206IDJlbTsgfVxuXG5AbWVkaWEgKG1pbi13aWR0aDogNzY4cHgpIHtcbiAgI3BhZ2UtY29udHJpYnV0b3JzIC5mZWF0dXJlLWxpc3Qge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgbWFyZ2luOiAwOyB9XG4gICNwYWdlLWNvbnRyaWJ1dG9ycyAuZmVhdHVyZS1saXN0ID4gbGkge1xuICAgIGZsZXg6IDE7XG4gICAgcGFkZGluZy1yaWdodDogM2VtO1xuICAgIG1hcmdpbi1ib3R0b206IDRlbTsgfVxuICAjcGFnZS1jb250cmlidXRvcnMgLmZlYXR1cmUge1xuICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47IH1cbiAgI3BhZ2UtY29udHJpYnV0b3JzIC5mZWF0dXJlX19pY29uIHtcbiAgICBtYXJnaW4tYm90dG9tOiAxLjI1ZW07IH0gfVxuXG4jcGFnZS1jb250cmlidXRvcnMgLnRvcGljcyB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgbWluLWhlaWdodDogNjYwcHg7XG4gIGJhY2tncm91bmQtY29sb3I6ICMyNDIzNTU7XG4gIGNvbG9yOiAjZmZmO1xuICBvdmVyZmxvdzogaGlkZGVuOyB9XG4gICNwYWdlLWNvbnRyaWJ1dG9ycyAudG9waWNzOmJlZm9yZSwgI3BhZ2UtY29udHJpYnV0b3JzIC50b3BpY3M6YWZ0ZXIge1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIGNvbnRlbnQ6ICcnO1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIGhlaWdodDogMTAwcHg7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIGxlZnQ6IDA7XG4gICAgei1pbmRleDogMjtcbiAgICBvcGFjaXR5OiAwLjQ7IH1cbiAgI3BhZ2UtY29udHJpYnV0b3JzIC50b3BpY3M6YmVmb3JlIHtcbiAgICB0b3A6IDA7XG4gICAgYmFja2dyb3VuZC1pbWFnZTogbGluZWFyLWdyYWRpZW50KC0xODBkZWcsICMyNDIzNTUgMCUsIHJnYmEoMzYsIDM1LCA4NSwgMCkgMTAwJSk7IH1cbiAgI3BhZ2UtY29udHJpYnV0b3JzIC50b3BpY3M6YWZ0ZXIge1xuICAgIGJvdHRvbTogMDtcbiAgICBiYWNrZ3JvdW5kLWltYWdlOiBsaW5lYXItZ3JhZGllbnQoLTE4MGRlZywgcmdiYSgzNiwgMzUsIDg1LCAwKSAwJSwgIzI0MjM1NSAxMDAlKTsgfVxuICAjcGFnZS1jb250cmlidXRvcnMgLnRvcGljcyBoZ3JvdXAge1xuICAgIG1heC13aWR0aDogNDQwcHg7XG4gICAgbWFyZ2luLXRvcDogNzJweDtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgei1pbmRleDogMztcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgbWFyZ2luLWxlZnQ6IGF1dG87XG4gICAgbWFyZ2luLXJpZ2h0OiBhdXRvOyB9XG4gICNwYWdlLWNvbnRyaWJ1dG9ycyAudG9waWNzIGgxIHtcbiAgICBmb250LXNpemU6IDM2cHg7XG4gICAgY29sb3I6ICNGRkZGRkY7XG4gICAgbGV0dGVyLXNwYWNpbmc6IC0xLjJweDtcbiAgICBsaW5lLWhlaWdodDogNDhweDtcbiAgICBmb250LXdlaWdodDogNzAwOyB9XG4gICNwYWdlLWNvbnRyaWJ1dG9ycyAudG9waWNzIHAge1xuICAgIGZvbnQtc2l6ZTogMThweDtcbiAgICBjb2xvcjogI0JGQzVFNTtcbiAgICBsZXR0ZXItc3BhY2luZzogLTAuNjJweDtcbiAgICBsaW5lLWhlaWdodDogMzBweDsgfVxuICAjcGFnZS1jb250cmlidXRvcnMgLnRvcGljcy5pbWFnZS1mYWxsYmFjazphZnRlciB7XG4gICAgY29udGVudDogJyc7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgd2lkdGg6IDM4OHB4O1xuICAgIGhlaWdodDogNjU4cHg7XG4gICAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFwiLi4vaW1nL2NvbnRyaWJ1dG9ycy9jb250cmlidXRvcnMtdG9waWNzLnBuZ1wiKTtcbiAgICBiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0O1xuICAgIGJhY2tncm91bmQtc2l6ZTogMzg4cHggNjU4cHg7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIHRvcDogMDtcbiAgICBsZWZ0OiA1MCU7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC01MCUpO1xuICAgIG9wYWNpdHk6IDAuNTtcbiAgICB6LWluZGV4OiAxOyB9XG4gIEBtZWRpYSAobWF4LXdpZHRoOiA3NjhweCkge1xuICAgICNwYWdlLWNvbnRyaWJ1dG9ycyAudG9waWNzOmJlZm9yZSB7XG4gICAgICBoZWlnaHQ6IDQwMHB4O1xuICAgICAgb3BhY2l0eTogMTsgfVxuICAgICNwYWdlLWNvbnRyaWJ1dG9ycyAudG9waWNzOmFmdGVyIHtcbiAgICAgIG9wYWNpdHk6IDAuMzsgfSB9XG4gIEBtZWRpYSAobWluLXdpZHRoOiA3NjhweCkge1xuICAgICNwYWdlLWNvbnRyaWJ1dG9ycyAudG9waWNzLmltYWdlLWZhbGxiYWNrOmFmdGVyIHtcbiAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgxMCUpO1xuICAgICAgb3BhY2l0eTogMTsgfVxuICAgICNwYWdlLWNvbnRyaWJ1dG9ycyAudG9waWNzIGhncm91cCB7XG4gICAgICB0ZXh0LWFsaWduOiBsZWZ0O1xuICAgICAgbWFyZ2luLWxlZnQ6IDA7XG4gICAgICBtYXJnaW4tcmlnaHQ6IDA7XG4gICAgICBtYXJnaW4tdG9wOiAxMzZweDsgfSB9XG5cbiNwYWdlLWNvbnRyaWJ1dG9ycyAudG9waWNzX19hbmltYXRpb24ge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHRvcDogMDtcbiAgcmlnaHQ6IDUwJTtcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKDkwJSk7XG4gIHotaW5kZXg6IDE7XG4gIG92ZXJmbG93OiBoaWRkZW47IH1cbiAgI3BhZ2UtY29udHJpYnV0b3JzIC50b3BpY3NfX2FuaW1hdGlvbiAudGV4dCB7XG4gICAgZm9udC1zaXplOiAxOHB4O1xuICAgIGxldHRlci1zcGFjaW5nOiAtMC4wM2VtO1xuICAgIGZpbGw6ICNmZmY7IH1cbiAgQG1lZGlhIChtYXgtd2lkdGg6IDc2OHB4KSB7XG4gICAgI3BhZ2UtY29udHJpYnV0b3JzIC50b3BpY3NfX2FuaW1hdGlvbiB7XG4gICAgICBvcGFjaXR5OiAwLjg7XG4gICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoNTAlKTsgfSB9XG5cbiNwYWdlLWNvbnRyaWJ1dG9ycyAucXVvdGVzIHtcbiAgY29sb3I6ICNmZmZmZmY7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZvbnQtc2l6ZTogMjBweDtcbiAgZm9udC13ZWlnaHQ6IDcwMDtcbiAgbGV0dGVyLXNwYWNpbmc6IC0wLjAxZW07IH1cbiAgQG1lZGlhIChtYXgtd2lkdGg6IDc2OHB4KSB7XG4gICAgI3BhZ2UtY29udHJpYnV0b3JzIC5xdW90ZXMge1xuICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsgfSB9XG5cbiNwYWdlLWNvbnRyaWJ1dG9ycyAucXVvdGVzX19jb250ZW50IHtcbiAgbWF4LXdpZHRoOiA0OTBweDtcbiAgcG9zaXRpb246IHJlbGF0aXZlOyB9XG5cbiNwYWdlLWNvbnRyaWJ1dG9ycyAucXVvdGVzX19xdW90ZSB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXg6IDE7XG4gIHBhZGRpbmc6IDgwcHg7XG4gIGNvbG9yOiAjMjQyODJlOyB9XG4gIEBtZWRpYSAobWF4LXdpZHRoOiA0ODBweCkge1xuICAgICNwYWdlLWNvbnRyaWJ1dG9ycyAucXVvdGVzX19xdW90ZSB7XG4gICAgICBwYWRkaW5nOiA0MHB4OyB9IH1cbiAgQG1lZGlhIChtaW4td2lkdGg6IDc2OHB4KSB7XG4gICAgI3BhZ2UtY29udHJpYnV0b3JzIC5xdW90ZXNfX3F1b3RlOmZpcnN0LWNoaWxkIHtcbiAgICAgIGp1c3RpZnktY29udGVudDogZmxleC1lbmQ7IH0gfVxuICAjcGFnZS1jb250cmlidXRvcnMgLnF1b3Rlc19fcXVvdGUubW9yb255IHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjRTlGMkZGOyB9XG4gICNwYWdlLWNvbnRyaWJ1dG9ycyAucXVvdGVzX19xdW90ZS52ZXJnYW5hcmEge1xuICAgIGJhY2tncm91bmQtY29sb3I6ICNEMEUyRkQ7IH1cblxuI3BhZ2UtY29udHJpYnV0b3JzIC5xdW90ZXNfX2F2YXRhciB7XG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcIi9pbWcvY29udHJpYnV0b3JzL2NvbnRyaWJ1dG9ycy10ZXN0aW1vbmlhbC1hdmF0YXJzLnBuZ1wiKTtcbiAgYmFja2dyb3VuZC1wb3NpdGlvbjogY2VudGVyO1xuICBiYWNrZ3JvdW5kLXNpemU6IDEwMCU7XG4gIGJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICB3aWR0aDogNjJweDtcbiAgaGVpZ2h0OiA2MnB4O1xuICBtYXJnaW4tYm90dG9tOiAxZW07XG4gIGJvcmRlci1yYWRpdXM6IDYycHg7XG4gIGJvcmRlcjogM3B4IHNvbGlkICNmZmY7XG4gIGJveC1zaGFkb3c6IDAgMnB4IDRweCAwIHJnYmEoMCwgMCwgMCwgMC4xKTsgfVxuICAjcGFnZS1jb250cmlidXRvcnMgLnF1b3Rlc19fYXZhdGFyLm1vcm9ueSB7XG4gICAgYmFja2dyb3VuZC1wb3NpdGlvbi15OiAwOyB9XG4gICNwYWdlLWNvbnRyaWJ1dG9ycyAucXVvdGVzX19hdmF0YXIudmVyZ2FuYXJhIHtcbiAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uLXk6IC01NnB4OyB9XG5cbiNwYWdlLWNvbnRyaWJ1dG9ycyAucXVvdGVzIGJsb2NrcXVvdGUge1xuICBib3JkZXI6IG5vbmU7XG4gIGZvbnQtc2l6ZTogaW5oZXJpdDtcbiAgbGluZS1oZWlnaHQ6IDEuNTtcbiAgbWFyZ2luOiAwO1xuICBwYWRkaW5nOiAwOyB9XG5cbiNwYWdlLWNvbnRyaWJ1dG9ycyAucXVvdGVzIGEge1xuICBjb2xvcjogaW5pdGlhbDtcbiAgdGV4dC11bmRlcmxpbmU6IG5vbmU7IH1cblxuI3BhZ2UtY29udHJpYnV0b3JzIC5xdW90ZXMgYSBibG9ja3F1b3RlID4gc21hbGwge1xuICBjb2xvcjogaW5oZXJpdDtcbiAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgbWFyZ2luLXRvcDogMmVtO1xuICB0ZXh0LWFsaWduOiByaWdodDsgfVxuICAjcGFnZS1jb250cmlidXRvcnMgLnF1b3RlcyBhIGJsb2NrcXVvdGUgPiBzbWFsbCA+IHNwYW4ge1xuICAgIHBhZGRpbmctbGVmdDogMC41ZW07IH1cbiAgI3BhZ2UtY29udHJpYnV0b3JzIC5xdW90ZXMgYSBibG9ja3F1b3RlID4gc21hbGw6YmVmb3JlIHtcbiAgICBkaXNwbGF5OiBub25lOyB9XG5cbiNwYWdlLWNvbnRyaWJ1dG9ycyAubW9yb255IGEgYmxvY2txdW90ZSA+IHNtYWxsID4gc3BhbiB7XG4gIGNvbG9yOiAjOTNBOEM2OyB9XG5cbiNwYWdlLWNvbnRyaWJ1dG9ycyAudmVyZ2FuYXJhIGEgYmxvY2txdW90ZSA+IHNtYWxsID4gc3BhbiB7XG4gIGNvbG9yOiAjNUM3NDlCOyB9XG5cbiNwYWdlLWNvbnRyaWJ1dG9ycyAuYXBwbHkge1xuICBwYWRkaW5nLXRvcDogMTAwcHg7XG4gIHBhZGRpbmctYm90dG9tOiAxMDBweDsgfVxuICAjcGFnZS1jb250cmlidXRvcnMgLmFwcGx5IC5jb250YWluZXIge1xuICAgIGRpc3BsYXk6IGZsZXg7IH1cbiAgQG1lZGlhIChtYXgtd2lkdGg6IDk5MnB4KSB7XG4gICAgI3BhZ2UtY29udHJpYnV0b3JzIC5hcHBseSAuY29udGFpbmVyIHtcbiAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47IH0gfVxuICBAbWVkaWEgKG1heC13aWR0aDogNzY4cHgpIHtcbiAgICAjcGFnZS1jb250cmlidXRvcnMgLmFwcGx5IHtcbiAgICAgIHBhZGRpbmctdG9wOiA1MHB4O1xuICAgICAgcGFkZGluZy1ib3R0b206IDUwcHg7IH0gfVxuXG4jcGFnZS1jb250cmlidXRvcnMgLmFwcGx5X19mb3JtIHtcbiAgZmxleDogMCAwIDY4NXB4O1xuICBwYWRkaW5nOiA0NnB4O1xuICBiYWNrZ3JvdW5kOiAjRkZGRkZGO1xuICBib3gtc2hhZG93OiAwIDJweCA4cHggMCByZ2JhKDAsIDE0LCAzOSwgMC4xMiksIDAgMTBweCAyMHB4IDAgcmdiYSgwLCAxNCwgMzksIDAuMTIpO1xuICBib3JkZXItcmFkaXVzOiAxNXB4OyB9XG4gICNwYWdlLWNvbnRyaWJ1dG9ycyAuYXBwbHlfX2Zvcm0gaDIge1xuICAgIG1hcmdpbi10b3A6IDA7XG4gICAgZm9udC13ZWlnaHQ6IDcwMDtcbiAgICBmb250LXNpemU6IDM2cHg7XG4gICAgbGV0dGVyLXNwYWNpbmc6IC0xLjJweDtcbiAgICBsaW5lLWhlaWdodDogNDhweDtcbiAgICBjb2xvcjogIzE2MUExRjsgfVxuICAjcGFnZS1jb250cmlidXRvcnMgLmFwcGx5X19mb3JtIC5oYnNwdC1mb3JtIHtcbiAgICBtYXJnaW46IDQ0cHggMCAwOyB9XG4gIEBtZWRpYSAobWF4LXdpZHRoOiAxMjIwcHgpIHtcbiAgICAjcGFnZS1jb250cmlidXRvcnMgLmFwcGx5X19mb3JtIHtcbiAgICAgIGZsZXg6IDAgMCA1ODBweDsgfSB9XG5cbiNwYWdlLWNvbnRyaWJ1dG9ycyAuYXBwbHlfX2JlbmVmaXRzIHtcbiAgcGFkZGluZy1sZWZ0OiA1MHB4O1xuICBtYXJnaW4tdG9wOiA2MnB4OyB9XG4gICNwYWdlLWNvbnRyaWJ1dG9ycyAuYXBwbHlfX2JlbmVmaXRzIGg0IHtcbiAgICBmb250LXNpemU6IDIycHg7XG4gICAgZm9udC13ZWlnaHQ6IDcwMDtcbiAgICBsZXR0ZXItc3BhY2luZzogLTAuMDNlbTtcbiAgICBjb2xvcjogIzE2MUExRjtcbiAgICBtYXJnaW46IDAgMCAzNnB4OyB9XG5cbiNwYWdlLWNvbnRyaWJ1dG9ycyAuYmVuZWZpdC1saXN0IHtcbiAgbWFyZ2luOiAwO1xuICBwYWRkaW5nOiAwO1xuICBsaXN0LXN0eWxlLXR5cGU6IG5vbmU7IH1cblxuI3BhZ2UtY29udHJpYnV0b3JzIC5iZW5lZml0LWxpc3RfX2l0ZW0ge1xuICBwYWRkaW5nLWxlZnQ6IDQycHg7XG4gIG1hcmdpbi10b3A6IDI4cHg7XG4gIGJhY2tncm91bmQ6IHVybCgvaW1nL2ZyYW1ld29yay9jaGVja21hcmstaWNvbi5wbmcpIG5vLXJlcGVhdCAwIDA7XG4gIGJhY2tncm91bmQtc2l6ZTogMjRweDsgfVxuICAjcGFnZS1jb250cmlidXRvcnMgLmJlbmVmaXQtbGlzdF9faXRlbSBoNSB7XG4gICAgZm9udC1zaXplOiAxOHB4O1xuICAgIGZvbnQtd2VpZ2h0OiA2MDA7XG4gICAgY29sb3I6ICMxNjFBMUY7XG4gICAgbGluZS1oZWlnaHQ6IDIycHg7XG4gICAgbWFyZ2luOiAwIDAgNXB4OyB9XG4gICNwYWdlLWNvbnRyaWJ1dG9ycyAuYmVuZWZpdC1saXN0X19pdGVtIHAge1xuICAgIGZvbnQtc2l6ZTogMTRweDtcbiAgICBjb2xvcjogIzc0N0Y5MjtcbiAgICBsZXR0ZXItc3BhY2luZzogLTAuMjVweDtcbiAgICBsaW5lLWhlaWdodDogMjRweDtcbiAgICBtYXgtd2lkdGg6IDI4MHB4OyB9XG5cbkBtZWRpYSAobWF4LXdpZHRoOiA3NjhweCkge1xuICAjcGFnZS1jb250cmlidXRvcnMgLmFwcGx5X19mb3JtIHtcbiAgICBmbGV4OiAwIDAgYXV0bztcbiAgICBwYWRkaW5nOiAyNnB4OyB9XG4gICAgI3BhZ2UtY29udHJpYnV0b3JzIC5hcHBseV9fZm9ybSBoMiB7XG4gICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgICBmb250LXNpemU6IDMwcHg7XG4gICAgICBtYXJnaW46IDE2cHggMDsgfSB9XG5cbkBtZWRpYSAobWF4LXdpZHRoOiA5OTJweCkge1xuICAjcGFnZS1jb250cmlidXRvcnMgLmFwcGx5X19iZW5lZml0cyB7XG4gICAgcGFkZGluZy1sZWZ0OiAwOyB9XG4gICNwYWdlLWNvbnRyaWJ1dG9ycyAuYmVuZWZpdC1saXN0X19pdGVtIHAge1xuICAgIG1heC13aWR0aDogbm9uZTsgfSB9XG5cbkBtZWRpYSAobWF4LXdpZHRoOiA3NjdweCkge1xuICAjcGFnZS1kZW1vIC5kZW1vLWN0YSxcbiAgI3BhZ2Utc3RyYXRlZ3ktc2Vzc2lvbiAuZGVtby1jdGEge1xuICAgIG1hcmdpbi10b3A6IDA7IH0gfVxuXG4jcGFnZS1kZW1vIC5kZW1vLWN0YSA+IC5jb250YWluZXIsXG4jcGFnZS1zdHJhdGVneS1zZXNzaW9uIC5kZW1vLWN0YSA+IC5jb250YWluZXIge1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBkaXNwbGF5OiBmbGV4O1xuICBwYWRkaW5nLWJvdHRvbTogMTA0cHg7XG4gIHBhZGRpbmctdG9wOiA1M3B4OyB9XG4gIEBtZWRpYSAobWF4LXdpZHRoOiA3NjdweCkge1xuICAgICNwYWdlLWRlbW8gLmRlbW8tY3RhID4gLmNvbnRhaW5lcixcbiAgICAjcGFnZS1zdHJhdGVneS1zZXNzaW9uIC5kZW1vLWN0YSA+IC5jb250YWluZXIge1xuICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICAgIHBhZGRpbmctdG9wOiAyM3B4O1xuICAgICAgdGV4dC1hbGlnbjogY2VudGVyOyB9IH1cblxuI3BhZ2UtZGVtbyAuZGVtby1jdGEgaGdyb3VwLFxuI3BhZ2Utc3RyYXRlZ3ktc2Vzc2lvbiAuZGVtby1jdGEgaGdyb3VwIHtcbiAgbWF4LXdpZHRoOiBub25lO1xuICBwYWRkaW5nLWJvdHRvbTogMDtcbiAgcGFkZGluZy10b3A6IDA7IH1cbiAgQG1lZGlhIChtYXgtd2lkdGg6IDc2N3B4KSB7XG4gICAgI3BhZ2UtZGVtbyAuZGVtby1jdGEgaGdyb3VwLFxuICAgICNwYWdlLXN0cmF0ZWd5LXNlc3Npb24gLmRlbW8tY3RhIGhncm91cCB7XG4gICAgICBtYXgtd2lkdGg6IDQ4MHB4OyB9IH1cblxuI3BhZ2UtZGVtbyAuZGVtby1jdGEgaGdyb3VwIHAsXG4jcGFnZS1zdHJhdGVneS1zZXNzaW9uIC5kZW1vLWN0YSBoZ3JvdXAgcCB7XG4gIG1hcmdpbi1ib3R0b206IDA7IH1cbiAgQG1lZGlhIChtYXgtd2lkdGg6IDc2N3B4KSB7XG4gICAgI3BhZ2UtZGVtbyAuZGVtby1jdGEgaGdyb3VwIHAsXG4gICAgI3BhZ2Utc3RyYXRlZ3ktc2Vzc2lvbiAuZGVtby1jdGEgaGdyb3VwIHAge1xuICAgICAgZm9udC1zaXplOiAxNXB4OyB9IH1cblxuI3BhZ2UtZGVtbyAuZGVtby1jdGEgaDEsXG4jcGFnZS1zdHJhdGVneS1zZXNzaW9uIC5kZW1vLWN0YSBoMSB7XG4gIGZvbnQtd2VpZ2h0OiA2MDA7XG4gIG1hcmdpbi1ib3R0b206IDhweDtcbiAgbWFyZ2luLXRvcDogMDsgfVxuICBAbWVkaWEgKG1pbi13aWR0aDogOTkycHgpIHtcbiAgICAjcGFnZS1kZW1vIC5kZW1vLWN0YSBoMSxcbiAgICAjcGFnZS1zdHJhdGVneS1zZXNzaW9uIC5kZW1vLWN0YSBoMSB7XG4gICAgICBmb250LXNpemU6IDMycHg7IH0gfVxuXG4jcGFnZS1kZW1vIC5kZW1vLWN0YV9faWNvbixcbiNwYWdlLXN0cmF0ZWd5LXNlc3Npb24gLmRlbW8tY3RhX19pY29uIHtcbiAgZGlzcGxheTogYmxvY2s7XG4gIG1hcmdpbi1yaWdodDogMjBweDtcbiAgd2lkdGg6IDY0cHg7IH1cbiAgQG1lZGlhIChtYXgtd2lkdGg6IDc2N3B4KSB7XG4gICAgI3BhZ2UtZGVtbyAuZGVtby1jdGFfX2ljb24sXG4gICAgI3BhZ2Utc3RyYXRlZ3ktc2Vzc2lvbiAuZGVtby1jdGFfX2ljb24ge1xuICAgICAgbWFyZ2luLXJpZ2h0OiAwO1xuICAgICAgbWFyZ2luLWJvdHRvbTogMmVtOyB9IH1cblxuI3BhZ2UtZGVtbyAuZGVtby1mb3JtLFxuI3BhZ2Utc3RyYXRlZ3ktc2Vzc2lvbiAuZGVtby1mb3JtIHtcbiAgZGlzcGxheTogZmxleDtcbiAgb3ZlcmZsb3c6IHZpc2libGU7IH1cbiAgI3BhZ2UtZGVtbyAuZGVtby1mb3JtOjpiZWZvcmUsICNwYWdlLWRlbW8gLmRlbW8tZm9ybTo6YWZ0ZXIsXG4gICNwYWdlLXN0cmF0ZWd5LXNlc3Npb24gLmRlbW8tZm9ybTo6YmVmb3JlLFxuICAjcGFnZS1zdHJhdGVneS1zZXNzaW9uIC5kZW1vLWZvcm06OmFmdGVyIHtcbiAgICBkaXNwbGF5OiBub25lOyB9XG4gICNwYWdlLWRlbW8gLmRlbW8tZm9ybSAuaGJzcHQtZm9ybSxcbiAgI3BhZ2Utc3RyYXRlZ3ktc2Vzc2lvbiAuZGVtby1mb3JtIC5oYnNwdC1mb3JtIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xuICAgIGJvcmRlci1yYWRpdXM6IDZweDtcbiAgICBib3gtc2hhZG93OiAwIDhweCAzMnB4IHJnYmEoMCwgMCwgMCwgMC4xKSwgMCAycHggOHB4IHJnYmEoMCwgMCwgMCwgMC4xKTtcbiAgICBtYXJnaW4tYm90dG9tOiA1MHB4O1xuICAgIG1hcmdpbi10b3A6IC00MHB4O1xuICAgIHBhZGRpbmc6IDY0cHggNjRweCAyNHB4OyB9XG4gICAgI3BhZ2UtZGVtbyAuZGVtby1mb3JtIC5oYnNwdC1mb3JtIGZvcm0sXG4gICAgI3BhZ2Utc3RyYXRlZ3ktc2Vzc2lvbiAuZGVtby1mb3JtIC5oYnNwdC1mb3JtIGZvcm0ge1xuICAgICAgbWF4LXdpZHRoOiAxMDAlO1xuICAgICAgcGFkZGluZzogMDsgfVxuICAgICAgI3BhZ2UtZGVtbyAuZGVtby1mb3JtIC5oYnNwdC1mb3JtIGZvcm0gaDMsXG4gICAgICAjcGFnZS1zdHJhdGVneS1zZXNzaW9uIC5kZW1vLWZvcm0gLmhic3B0LWZvcm0gZm9ybSBoMyB7XG4gICAgICAgIHdpZHRoOiAxMDAlOyB9XG4gICAgICAjcGFnZS1kZW1vIC5kZW1vLWZvcm0gLmhic3B0LWZvcm0gZm9ybTpiZWZvcmUsXG4gICAgICAjcGFnZS1zdHJhdGVneS1zZXNzaW9uIC5kZW1vLWZvcm0gLmhic3B0LWZvcm0gZm9ybTpiZWZvcmUge1xuICAgICAgICBkaXNwbGF5OiBub25lOyB9XG4gICAgI3BhZ2UtZGVtbyAuZGVtby1mb3JtIC5oYnNwdC1mb3JtIC5ocy1mb3JtLXJlcXVpcmVkLFxuICAgICNwYWdlLXN0cmF0ZWd5LXNlc3Npb24gLmRlbW8tZm9ybSAuaGJzcHQtZm9ybSAuaHMtZm9ybS1yZXF1aXJlZCB7XG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsgfVxuICAgICNwYWdlLWRlbW8gLmRlbW8tZm9ybSAuaGJzcHQtZm9ybSBidXR0b24sXG4gICAgI3BhZ2Utc3RyYXRlZ3ktc2Vzc2lvbiAuZGVtby1mb3JtIC5oYnNwdC1mb3JtIGJ1dHRvbiB7XG4gICAgICBmbG9hdDogbm9uZTtcbiAgICAgIG1hcmdpbi10b3A6IDA7IH1cbiAgICAjcGFnZS1kZW1vIC5kZW1vLWZvcm0gLmhic3B0LWZvcm0gLmhzLWlucHV0LFxuICAgICNwYWdlLXN0cmF0ZWd5LXNlc3Npb24gLmRlbW8tZm9ybSAuaGJzcHQtZm9ybSAuaHMtaW5wdXQge1xuICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICBtYXgtd2lkdGg6IDEwMCU7XG4gICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94OyB9XG4gICAgI3BhZ2UtZGVtbyAuZGVtby1mb3JtIC5oYnNwdC1mb3JtIC5mb3JtLWNvbHVtbnMtMSAuaW5wdXQsXG4gICAgI3BhZ2Utc3RyYXRlZ3ktc2Vzc2lvbiAuZGVtby1mb3JtIC5oYnNwdC1mb3JtIC5mb3JtLWNvbHVtbnMtMSAuaW5wdXQge1xuICAgICAgbWFyZ2luLXJpZ2h0OiAwOyB9XG4gICNwYWdlLWRlbW8gLmRlbW8tZm9ybV9fYXNpZGUsXG4gICNwYWdlLXN0cmF0ZWd5LXNlc3Npb24gLmRlbW8tZm9ybV9fYXNpZGUge1xuICAgIHBhZGRpbmc6IDRlbTtcbiAgICBtYXJnaW4tbGVmdDogYXV0bzsgfVxuICAgICNwYWdlLWRlbW8gLmRlbW8tZm9ybV9fYXNpZGUgaW1nLFxuICAgICNwYWdlLXN0cmF0ZWd5LXNlc3Npb24gLmRlbW8tZm9ybV9fYXNpZGUgaW1nIHtcbiAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgd2lkdGg6IDEwMCU7IH1cbiAgICAjcGFnZS1kZW1vIC5kZW1vLWZvcm1fX2FzaWRlIHVsLFxuICAgICNwYWdlLXN0cmF0ZWd5LXNlc3Npb24gLmRlbW8tZm9ybV9fYXNpZGUgdWwge1xuICAgICAgY29sb3I6ICM3MjdhODc7XG4gICAgICBmb250LXNpemU6IDEuMTI1ZW07XG4gICAgICBsaXN0LXN0eWxlOiBub25lO1xuICAgICAgbWFyZ2luOiAwO1xuICAgICAgcGFkZGluZzogMDsgfVxuICAgICAgI3BhZ2UtZGVtbyAuZGVtby1mb3JtX19hc2lkZSB1bCA+IGxpLFxuICAgICAgI3BhZ2Utc3RyYXRlZ3ktc2Vzc2lvbiAuZGVtby1mb3JtX19hc2lkZSB1bCA+IGxpIHtcbiAgICAgICAgbWFyZ2luLWJvdHRvbTogMS41ZW07XG4gICAgICAgIHBhZGRpbmctbGVmdDogMS41ZW07XG4gICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsgfVxuICAgICAgICAjcGFnZS1kZW1vIC5kZW1vLWZvcm1fX2FzaWRlIHVsID4gbGk6YmVmb3JlLFxuICAgICAgICAjcGFnZS1zdHJhdGVneS1zZXNzaW9uIC5kZW1vLWZvcm1fX2FzaWRlIHVsID4gbGk6YmVmb3JlIHtcbiAgICAgICAgICBjb2xvcjogIzRhOGJmYztcbiAgICAgICAgICBjb250ZW50OiAnXFxmMmJhJztcbiAgICAgICAgICBmb250LWZhbWlseTogJ0lvbmljb25zJztcbiAgICAgICAgICBsZWZ0OiAwO1xuICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgICB0b3A6IDA7IH1cbiAgICAjcGFnZS1kZW1vIC5kZW1vLWZvcm1fX2FzaWRlID4gcCxcbiAgICAjcGFnZS1zdHJhdGVneS1zZXNzaW9uIC5kZW1vLWZvcm1fX2FzaWRlID4gcCB7XG4gICAgICBjb2xvcjogIzcwN2M4ODtcbiAgICAgIGZvbnQtc2l6ZTogMC44NzVlbTtcbiAgICAgIGZvbnQtd2VpZ2h0OiA3MDA7XG4gICAgICBsZXR0ZXItc3BhY2luZzogMC4wNzVlbTtcbiAgICAgIGxpbmUtaGVpZ2h0OiAyO1xuICAgICAgbWFyZ2luLWJvdHRvbTogM2VtO1xuICAgICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTsgfVxuICAgIEBtZWRpYSAobWF4LXdpZHRoOiAxMjE5cHgpIHtcbiAgICAgICNwYWdlLWRlbW8gLmRlbW8tZm9ybV9fYXNpZGUsXG4gICAgICAjcGFnZS1zdHJhdGVneS1zZXNzaW9uIC5kZW1vLWZvcm1fX2FzaWRlIHtcbiAgICAgICAgcGFkZGluZy1yaWdodDogMDsgfSB9XG4gICAgQG1lZGlhIChtYXgtd2lkdGg6IDk5MXB4KSB7XG4gICAgICAjcGFnZS1kZW1vIC5kZW1vLWZvcm1fX2FzaWRlLFxuICAgICAgI3BhZ2Utc3RyYXRlZ3ktc2Vzc2lvbiAuZGVtby1mb3JtX19hc2lkZSB7XG4gICAgICAgIGRpc3BsYXk6IG5vbmU7IH0gfVxuXG4jcGFnZS1pZGVudGl0eS12YXVsdCBtYWluIHtcbiAgZm9udC1mYW1pbHk6IFwiSW50ZXJcIiwgXCJJbnRlciBVSVwiLCBIZWx2ZXRpY2EsIEFyaWFsLCBzYW5zLXNlcmlmO1xuICBvdmVyZmxvdzogdmlzaWJsZTsgfVxuICAjcGFnZS1pZGVudGl0eS12YXVsdCBtYWluIGgxLFxuICAjcGFnZS1pZGVudGl0eS12YXVsdCBtYWluIGgyLFxuICAjcGFnZS1pZGVudGl0eS12YXVsdCBtYWluIGgzLFxuICAjcGFnZS1pZGVudGl0eS12YXVsdCBtYWluIGg0LFxuICAjcGFnZS1pZGVudGl0eS12YXVsdCBtYWluIC5idG4ge1xuICAgIGZvbnQtZmFtaWx5OiBcIkVpbmFcIiwgXCJIZWx2ZXRpY2EgTmV1ZVwiLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7IH1cblxuI3BhZ2UtaWRlbnRpdHktdmF1bHQgLnN1Yi1oZWFkZXIgLnZhdWx0LWxpbmsge1xuICBmb250LXNpemU6IDE1cHg7XG4gIGZvbnQtd2VpZ2h0OiA3MDA7XG4gIHBhZGRpbmctbGVmdDogMXB4O1xuICBwYWRkaW5nLXRvcDogMTdweDtcbiAgbGV0dGVyLXNwYWNpbmc6IC4wM2VtOyB9XG4gICNwYWdlLWlkZW50aXR5LXZhdWx0IC5zdWItaGVhZGVyIC52YXVsdC1saW5rOmJlZm9yZSB7XG4gICAgY29udGVudDogJyc7XG4gICAgYmFja2dyb3VuZDogdXJsKFwiL2ltZy9lbnRlcnByaXNlL2lkZW50aXR5LXZhdWx0L3ZhdWx0LW5hdi1sb2dvLnBuZ1wiKSAwIDAgbm8tcmVwZWF0O1xuICAgIGJhY2tncm91bmQtc2l6ZTogMTAwJTtcbiAgICB3aWR0aDogMzJweDtcbiAgICBoZWlnaHQ6IDMycHg7XG4gICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgIG1hcmdpbi1yaWdodDogOXB4O1xuICAgIHZlcnRpY2FsLWFsaWduOiAtMTFweDsgfVxuXG4jcGFnZS1pZGVudGl0eS12YXVsdCAuc3ViLWhlYWRlciAuZGVtbyB7XG4gIHBhZGRpbmc6IDE5cHggMXB4IDE4cHggMTVweDsgfVxuICAjcGFnZS1pZGVudGl0eS12YXVsdCAuc3ViLWhlYWRlciAuZGVtbzo6YWZ0ZXIge1xuICAgIGZvbnQtZmFtaWx5OiAnSW9uaWNvbnMnO1xuICAgIGNvbnRlbnQ6IFwi74+RXCI7XG4gICAgbWFyZ2luLWxlZnQ6IDNweDtcbiAgICB2ZXJ0aWNhbC1hbGlnbjogLTFweDsgfVxuXG4jcGFnZS1pZGVudGl0eS12YXVsdCAudG9wIHtcbiAgbWFyZ2luLXRvcDogLTE3MnB4O1xuICBwYWRkaW5nLXRvcDogMjc2cHg7XG4gIGJhY2tncm91bmQ6ICMwYzFjMWM7XG4gIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCh0byByaWdodCwgIzBlMWUyZSAwJSwgIzIwM2U1YSAxMDAlKTtcbiAgbWluLWhlaWdodDogOTcycHg7IH1cbiAgI3BhZ2UtaWRlbnRpdHktdmF1bHQgLnRvcCAuY29udGFpbmVyIHtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7IH1cbiAgICAjcGFnZS1pZGVudGl0eS12YXVsdCAudG9wIC5jb250YWluZXI6OmFmdGVyIHtcbiAgICAgIGJhY2tncm91bmQ6IHVybChcIi9pbWcvZW50ZXJwcmlzZS9pZGVudGl0eS12YXVsdC9oZXJvLWltZy5wbmdcIikgMCAwIG5vLXJlcGVhdDtcbiAgICAgIGJhY2tncm91bmQtc2l6ZTogMTAwJTtcbiAgICAgIHdpZHRoOiA1ODlweDtcbiAgICAgIGhlaWdodDogNzYwcHg7XG4gICAgICBjb250ZW50OiAnJztcbiAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgcmlnaHQ6IC04MnB4O1xuICAgICAgdG9wOiAtNzJweDsgfVxuICAjcGFnZS1pZGVudGl0eS12YXVsdCAudG9wIGhncm91cCB7XG4gICAgbWF4LXdpZHRoOiA1NDBweDsgfVxuICAjcGFnZS1pZGVudGl0eS12YXVsdCAudG9wIGgxIHtcbiAgICBjb2xvcjogd2hpdGU7XG4gICAgbGV0dGVyLXNwYWNpbmc6IC0uMDJlbTsgfVxuICAjcGFnZS1pZGVudGl0eS12YXVsdCAudG9wIGgzIHtcbiAgICBjb2xvcjogIzdiYmZmZjtcbiAgICBmb250LXNpemU6IDM1cHg7XG4gICAgbGV0dGVyLXNwYWNpbmc6IC0uMDE2ZW07XG4gICAgbGluZS1oZWlnaHQ6IDEuMzllbTtcbiAgICBtYXJnaW4tdG9wOiAxNXB4O1xuICAgIG1hcmdpbi1ib3R0b206IDlweDsgfVxuICAjcGFnZS1pZGVudGl0eS12YXVsdCAudG9wIHAge1xuICAgIGNvbG9yOiAjYzNjZWRmO1xuICAgIGZvbnQtc2l6ZTogMThweDtcbiAgICBsZXR0ZXItc3BhY2luZzogLS4wMmVtO1xuICAgIG1hcmdpbi1ib3R0b206IDFweDtcbiAgICBmb250LXdlaWdodDogNDAwO1xuICAgIGxpbmUtaGVpZ2h0OiAxLjVlbTsgfVxuICAgICNwYWdlLWlkZW50aXR5LXZhdWx0IC50b3AgcCBzdHJvbmcge1xuICAgICAgY29sb3I6ICNmZmY7XG4gICAgICBmb250LXdlaWdodDogNDAwOyB9XG4gICNwYWdlLWlkZW50aXR5LXZhdWx0IC50b3AgLmJ0biB7XG4gICAgbWFyZ2luLXRvcDogNTFweDtcbiAgICBwYWRkaW5nOiAxNHB4IDE2cHggMTJweCAxOXB4O1xuICAgIGZvbnQtc2l6ZTogMTRweDtcbiAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xuICAgIGxldHRlci1zcGFjaW5nOiAuMDZlbTtcbiAgICBtYXJnaW4tYm90dG9tOiA4MHB4OyB9XG4gICAgI3BhZ2UtaWRlbnRpdHktdmF1bHQgLnRvcCAuYnRuOjphZnRlciB7XG4gICAgICBmb250LWZhbWlseTogJ0lvbmljb25zJztcbiAgICAgIGNvbnRlbnQ6ICfvj5EnO1xuICAgICAgZm9udC1zaXplOiAyM3B4O1xuICAgICAgZm9udC13ZWlnaHQ6IDQwMDtcbiAgICAgIHZlcnRpY2FsLWFsaWduOiAtNHB4O1xuICAgICAgbWFyZ2luLWxlZnQ6IDVweDsgfVxuICBAbWVkaWEgKG1heC13aWR0aDogMTIxOXB4KSB7XG4gICAgI3BhZ2UtaWRlbnRpdHktdmF1bHQgLnRvcCBoZ3JvdXAge1xuICAgICAgbWF4LXdpZHRoOiA0MjBweDsgfSB9XG4gIEBtZWRpYSAobWF4LXdpZHRoOiA5OTFweCkge1xuICAgICNwYWdlLWlkZW50aXR5LXZhdWx0IC50b3AgaGdyb3VwIHtcbiAgICAgIG1heC13aWR0aDogMTAwJTsgfVxuICAgICNwYWdlLWlkZW50aXR5LXZhdWx0IC50b3AgaDEsXG4gICAgI3BhZ2UtaWRlbnRpdHktdmF1bHQgLnRvcCBoMyB7XG4gICAgICBtYXgtd2lkdGg6IDQ2MHB4OyB9XG4gICAgI3BhZ2UtaWRlbnRpdHktdmF1bHQgLnRvcCAuY29udGFpbmVyOjphZnRlciB7XG4gICAgICB3aWR0aDogMjk0cHg7XG4gICAgICBoZWlnaHQ6IDM4MHB4O1xuICAgICAgcmlnaHQ6IC0zMXB4O1xuICAgICAgdG9wOiAtODBweDsgfSB9XG4gIEBtZWRpYSAobWF4LXdpZHRoOiA3NjdweCkge1xuICAgICNwYWdlLWlkZW50aXR5LXZhdWx0IC50b3Age1xuICAgICAgcGFkZGluZy10b3A6IDQwMHB4OyB9XG4gICAgICAjcGFnZS1pZGVudGl0eS12YXVsdCAudG9wIC5jb250YWluZXI6OmFmdGVyIHtcbiAgICAgICAgd2lkdGg6IDE0N3B4O1xuICAgICAgICBoZWlnaHQ6IDE5MHB4O1xuICAgICAgICByaWdodDogY2FsYyg1MCUgLSA5NXB4KTtcbiAgICAgICAgdG9wOiAtMTkwcHg7IH1cbiAgICAgICNwYWdlLWlkZW50aXR5LXZhdWx0IC50b3AgaGdyb3VwIHtcbiAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyOyB9XG4gICAgICAjcGFnZS1pZGVudGl0eS12YXVsdCAudG9wIGgxLFxuICAgICAgI3BhZ2UtaWRlbnRpdHktdmF1bHQgLnRvcCBoMyB7XG4gICAgICAgIG1heC13aWR0aDogMTAwJTsgfSB9XG5cbiNwYWdlLWlkZW50aXR5LXZhdWx0IC5nYW5kYWxmIHtcbiAgcGFkZGluZy10b3A6IDEwNHB4O1xuICBtYXJnaW4tYm90dG9tOiA4MHB4OyB9XG4gICNwYWdlLWlkZW50aXR5LXZhdWx0IC5nYW5kYWxmIC5zcGxpdCB7XG4gICAgZGlzcGxheTogZmxleDsgfVxuICAgICNwYWdlLWlkZW50aXR5LXZhdWx0IC5nYW5kYWxmIC5zcGxpdCA+IGRpdiB7XG4gICAgICBmbGV4OiAwIDEgNTIwcHg7IH1cbiAgI3BhZ2UtaWRlbnRpdHktdmF1bHQgLmdhbmRhbGYgaDIge1xuICAgIG1hcmdpbi10b3A6IDdweDtcbiAgICBmb250LXNpemU6IDM2cHg7XG4gICAgbWFyZ2luLWxlZnQ6IDFweDtcbiAgICBsZXR0ZXItc3BhY2luZzogLS4wMmVtO1xuICAgIGZvbnQtd2VpZ2h0OiA3MDA7XG4gICAgbGluZS1oZWlnaHQ6IDEuOGVtOyB9XG4gICNwYWdlLWlkZW50aXR5LXZhdWx0IC5nYW5kYWxmIGgzIHtcbiAgICBtYXJnaW4tdG9wOiA2OHB4O1xuICAgIGZvbnQtc2l6ZTogMjdweDtcbiAgICBmb250LXdlaWdodDogNjAwOyB9XG4gICNwYWdlLWlkZW50aXR5LXZhdWx0IC5nYW5kYWxmIHAge1xuICAgIGZvbnQtc2l6ZTogMTlweDtcbiAgICBtYXJnaW4tdG9wOiAyNHB4O1xuICAgIG1hcmdpbi1sZWZ0OiAxcHg7XG4gICAgbGV0dGVyLXNwYWNpbmc6IC4wMDVlbTtcbiAgICBsaW5lLWhlaWdodDogMS45MmVtO1xuICAgIGNvbG9yOiAjNTE2NTdkOyB9XG4gICAgI3BhZ2UtaWRlbnRpdHktdmF1bHQgLmdhbmRhbGYgcCBzdHJvbmcge1xuICAgICAgZm9udC13ZWlnaHQ6IDUwMDsgfVxuICAjcGFnZS1pZGVudGl0eS12YXVsdCAuZ2FuZGFsZiB1bCB7XG4gICAgbWFyZ2luLWxlZnQ6IGF1dG87XG4gICAgZmxleDogMCAxIDUxNHB4O1xuICAgIG1hcmdpbi10b3A6IDM0cHg7XG4gICAgcGFkZGluZy1sZWZ0OiAwOyB9XG4gICAgQG1lZGlhIChtYXgtd2lkdGg6IDEyMTlweCkge1xuICAgICAgI3BhZ2UtaWRlbnRpdHktdmF1bHQgLmdhbmRhbGYgdWwge1xuICAgICAgICBmbGV4LWJhc2lzOiAzOTJweDsgfSB9XG4gICAgI3BhZ2UtaWRlbnRpdHktdmF1bHQgLmdhbmRhbGYgdWwgbGk6OmJlZm9yZSB7XG4gICAgICB0b3A6IDA7IH1cbiAgI3BhZ2UtaWRlbnRpdHktdmF1bHQgLmdhbmRhbGYgbGkge1xuICAgIHBhZGRpbmctbGVmdDogNTVweDtcbiAgICBmb250LXNpemU6IDE0cHg7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIGxpc3Qtc3R5bGU6IG5vbmU7XG4gICAgbGV0dGVyLXNwYWNpbmc6IC0uMDIyZW07XG4gICAgbGluZS1oZWlnaHQ6IDEuNzhlbTtcbiAgICBtYXJnaW4tYm90dG9tOiAzNnB4O1xuICAgIGNvbG9yOiAjNTE2NTdkOyB9XG4gICAgI3BhZ2UtaWRlbnRpdHktdmF1bHQgLmdhbmRhbGYgbGk6OmJlZm9yZSB7XG4gICAgICBiYWNrZ3JvdW5kOiB1cmwoXCIvaW1nL2VudGVycHJpc2UvaWRlbnRpdHktdmF1bHQvbG9jay1jaGVja21hcmsucG5nXCIpIDAgMCBuby1yZXBlYXQ7XG4gICAgICBiYWNrZ3JvdW5kLXNpemU6IDMycHg7XG4gICAgICB3aWR0aDogMzJweDtcbiAgICAgIGhlaWdodDogMzJweDtcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgIGxlZnQ6IDA7XG4gICAgICB0b3A6IDdweDtcbiAgICAgIGNvbnRlbnQ6ICcnOyB9XG4gIEBtZWRpYSAobWF4LXdpZHRoOiA5OTFweCkge1xuICAgICNwYWdlLWlkZW50aXR5LXZhdWx0IC5nYW5kYWxmIC5zcGxpdCB7XG4gICAgICBkaXNwbGF5OiBibG9jazsgfVxuICAgICAgI3BhZ2UtaWRlbnRpdHktdmF1bHQgLmdhbmRhbGYgLnNwbGl0ID4gZGl2IHtcbiAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyOyB9XG4gICAgI3BhZ2UtaWRlbnRpdHktdmF1bHQgLmdhbmRhbGYgbGkge1xuICAgICAgdG9wOiAwOyB9IH1cbiAgI3BhZ2UtaWRlbnRpdHktdmF1bHQgLmdhbmRhbGYgZmlndXJlIHtcbiAgICBiYWNrZ3JvdW5kOiAjZjNmNWY4O1xuICAgIGJvcmRlci1yYWRpdXM6IDE0cHg7XG4gICAgcGFkZGluZzogMjRweCAzMHB4O1xuICAgIG1hcmdpbi10b3A6IDU5cHg7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIG1pbi1oZWlnaHQ6IDI3OHB4OyB9XG4gICAgI3BhZ2UtaWRlbnRpdHktdmF1bHQgLmdhbmRhbGYgZmlndXJlOjpiZWZvcmUsICNwYWdlLWlkZW50aXR5LXZhdWx0IC5nYW5kYWxmIGZpZ3VyZTo6YWZ0ZXIge1xuICAgICAgYmFja2dyb3VuZDogdXJsKFwiL2ltZy9lbnRlcnByaXNlL2lkZW50aXR5LXZhdWx0L2l2LWRpYWdyYW0tc3RhdGVzLnBuZ1wiKSAwIDAgbm8tcmVwZWF0O1xuICAgICAgYmFja2dyb3VuZC1zaXplOiAxMDAlO1xuICAgICAgd2lkdGg6IDExMDBweDtcbiAgICAgIGhlaWdodDogMjQycHg7XG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICBsZWZ0OiAyMXB4O1xuICAgICAgdG9wOiAyNHB4O1xuICAgICAgYm90dG9tOiAwO1xuICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG4gICAgICBjb250ZW50OiAnJztcbiAgICAgIHRyYW5zaXRpb246IC4ycyBvcGFjaXR5LCAuMnMgdHJhbnNmb3JtIGVhc2Utb3V0OyB9XG4gICAgI3BhZ2UtaWRlbnRpdHktdmF1bHQgLmdhbmRhbGYgZmlndXJlOjphZnRlciB7XG4gICAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwIDEwMCU7XG4gICAgICBvcGFjaXR5OiAwO1xuICAgICAgdHJhbnNmb3JtOiBzY2FsZTNkKDEuMDUsIDEuMDUsIDEpOyB9XG4gICAgI3BhZ2UtaWRlbnRpdHktdmF1bHQgLmdhbmRhbGYgZmlndXJlIHN0cm9uZyB7XG4gICAgICBmb250LXdlaWdodDogNjAwO1xuICAgICAgZm9udC1zaXplOiAxNXB4OyB9XG4gICAgI3BhZ2UtaWRlbnRpdHktdmF1bHQgLmdhbmRhbGYgZmlndXJlIGEge1xuICAgICAgYmFja2dyb3VuZDogI2VlZTtcbiAgICAgIGJvcmRlci1yYWRpdXM6IDEwcHg7XG4gICAgICBoZWlnaHQ6IDE4cHg7XG4gICAgICB3aWR0aDogMjhweDtcbiAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICAgIG1hcmdpbi1sZWZ0OiAxM3B4O1xuICAgICAgdmVydGljYWwtYWxpZ246IC00cHg7XG4gICAgICBib3gtc2hhZG93OiAwIDAgNHB4IGluc2V0IHJnYmEoMCwgMCwgMCwgMC4xKTtcbiAgICAgIHRyYW5zaXRpb246IC4ycyBib3JkZXItY29sb3I7XG4gICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICBjdXJzb3I6IHBvaW50ZXI7IH1cbiAgICAgICNwYWdlLWlkZW50aXR5LXZhdWx0IC5nYW5kYWxmIGZpZ3VyZSBhOjpiZWZvcmUge1xuICAgICAgICBiYWNrZ3JvdW5kOiB3aGl0ZTtcbiAgICAgICAgd2lkdGg6IDE2cHg7XG4gICAgICAgIGhlaWdodDogMTZweDtcbiAgICAgICAgY29udGVudDogJyc7XG4gICAgICAgIGJveC1zaGFkb3c6IDAgMXB4IDRweCByZ2JhKDAsIDAsIDAsIDAuMSk7XG4gICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgdG9wOiAxcHg7XG4gICAgICAgIGxlZnQ6IDJweDtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogOXB4O1xuICAgICAgICB0cmFuc2l0aW9uOiAuMnMgdHJhbnNmb3JtIGVhc2U7IH1cbiAgICAjcGFnZS1pZGVudGl0eS12YXVsdCAuZ2FuZGFsZiBmaWd1cmUuYWN0aXZlOjpiZWZvcmUge1xuICAgICAgb3BhY2l0eTogMDtcbiAgICAgIHRyYW5zZm9ybTogc2NhbGUzZCgxLjA1LCAxLjA1LCAxKTsgfVxuICAgICNwYWdlLWlkZW50aXR5LXZhdWx0IC5nYW5kYWxmIGZpZ3VyZS5hY3RpdmU6OmFmdGVyIHtcbiAgICAgIG9wYWNpdHk6IDE7XG4gICAgICB0cmFuc2Zvcm06IG5vbmU7IH1cbiAgICAjcGFnZS1pZGVudGl0eS12YXVsdCAuZ2FuZGFsZiBmaWd1cmUuYWN0aXZlIGEge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogIzVkYWZmZTsgfVxuICAgICAgI3BhZ2UtaWRlbnRpdHktdmF1bHQgLmdhbmRhbGYgZmlndXJlLmFjdGl2ZSBhOjpiZWZvcmUge1xuICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZTNkKDlweCwgMCwgMCk7IH1cbiAgICBAbWVkaWEgKG1heC13aWR0aDogMTIxOXB4KSB7XG4gICAgICAjcGFnZS1pZGVudGl0eS12YXVsdCAuZ2FuZGFsZiBmaWd1cmUge1xuICAgICAgICBtaW4taGVpZ2h0OiAyNDRweDsgfVxuICAgICAgICAjcGFnZS1pZGVudGl0eS12YXVsdCAuZ2FuZGFsZiBmaWd1cmU6OmJlZm9yZSwgI3BhZ2UtaWRlbnRpdHktdmF1bHQgLmdhbmRhbGYgZmlndXJlOjphZnRlciB7XG4gICAgICAgICAgd2lkdGg6IDg5NnB4O1xuICAgICAgICAgIGhlaWdodDogMTk2cHg7IH0gfVxuICAgIEBtZWRpYSAobWF4LXdpZHRoOiA5OTFweCkge1xuICAgICAgI3BhZ2UtaWRlbnRpdHktdmF1bHQgLmdhbmRhbGYgZmlndXJlIHtcbiAgICAgICAgbWluLWhlaWdodDogMTk0cHg7IH1cbiAgICAgICAgI3BhZ2UtaWRlbnRpdHktdmF1bHQgLmdhbmRhbGYgZmlndXJlOjpiZWZvcmUsICNwYWdlLWlkZW50aXR5LXZhdWx0IC5nYW5kYWxmIGZpZ3VyZTo6YWZ0ZXIge1xuICAgICAgICAgIHdpZHRoOiA2NzhweDtcbiAgICAgICAgICBoZWlnaHQ6IDE0OXB4OyB9IH1cbiAgICBAbWVkaWEgKG1heC13aWR0aDogNzY3cHgpIHtcbiAgICAgICNwYWdlLWlkZW50aXR5LXZhdWx0IC5nYW5kYWxmIGZpZ3VyZSB7XG4gICAgICAgIGRpc3BsYXk6IG5vbmU7IH0gfVxuXG4jcGFnZS1pZGVudGl0eS12YXVsdCAucG9pbnRzIHtcbiAgbWFyZ2luLWJvdHRvbTogMTAwcHg7IH1cbiAgI3BhZ2UtaWRlbnRpdHktdmF1bHQgLnBvaW50cyBoMiB7XG4gICAgbGV0dGVyLXNwYWNpbmc6IC0uMDJlbTsgfVxuICAjcGFnZS1pZGVudGl0eS12YXVsdCAucG9pbnRzIHAge1xuICAgIG1hcmdpbi10b3A6IDE3cHg7XG4gICAgZm9udC13ZWlnaHQ6IDQwMDtcbiAgICBmb250LXNpemU6IDIwcHg7XG4gICAgbGV0dGVyLXNwYWNpbmc6IC0uMDJlbTsgfVxuICAjcGFnZS1pZGVudGl0eS12YXVsdCAucG9pbnRzIHVsIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGZsZXgtd3JhcDogd3JhcDtcbiAgICBwYWRkaW5nOiAwO1xuICAgIGxpc3Qtc3R5bGU6IG5vbmU7XG4gICAgcGFkZGluZy10b3A6IDY4cHg7XG4gICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOyB9XG4gICNwYWdlLWlkZW50aXR5LXZhdWx0IC5wb2ludHMgbGkge1xuICAgIGZsZXg6IDAgMCAzMjBweDtcbiAgICBwYWRkaW5nLWxlZnQ6IDA7XG4gICAgcGFkZGluZy10b3A6IDY5cHg7XG4gICAgbWFyZ2luLWxlZnQ6IDFweDtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgbWFyZ2luLWJvdHRvbTogNjFweDsgfVxuICAgIEBtZWRpYSAobWF4LXdpZHRoOiAxMjE5cHgpIHtcbiAgICAgICNwYWdlLWlkZW50aXR5LXZhdWx0IC5wb2ludHMgbGkge1xuICAgICAgICBmbGV4LWJhc2lzOiAyNTZweDsgfSB9XG4gICAgI3BhZ2UtaWRlbnRpdHktdmF1bHQgLnBvaW50cyBsaTo6YmVmb3JlIHtcbiAgICAgIGJhY2tncm91bmQ6IHVybChcIi9pbWcvZW50ZXJwcmlzZS9pZGVudGl0eS12YXVsdC9iZW5lZml0cy1pY29ucy5wbmdcIikgMCAwIG5vLXJlcGVhdDtcbiAgICAgIGJhY2tncm91bmQtc2l6ZTogNDhweDtcbiAgICAgIHdpZHRoOiA0OHB4O1xuICAgICAgaGVpZ2h0OiA0OHB4O1xuICAgICAgY29udGVudDogJyc7XG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICB0b3A6IDA7XG4gICAgICBsZWZ0OiAwOyB9XG4gICAgI3BhZ2UtaWRlbnRpdHktdmF1bHQgLnBvaW50cyBsaS5wcm90ZWN0aW9uOjpiZWZvcmUge1xuICAgICAgYmFja2dyb3VuZC1wb3NpdGlvbjogMCAtNDhweDsgfVxuICAgICNwYWdlLWlkZW50aXR5LXZhdWx0IC5wb2ludHMgbGkuY29kZTo6YmVmb3JlIHtcbiAgICAgIGJhY2tncm91bmQtcG9zaXRpb246IDAgLTk2cHg7IH1cbiAgICAjcGFnZS1pZGVudGl0eS12YXVsdCAucG9pbnRzIGxpLmJhY2tlbmQ6OmJlZm9yZSB7XG4gICAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwIC0xNDRweDsgfVxuICAgICNwYWdlLWlkZW50aXR5LXZhdWx0IC5wb2ludHMgbGkudG9rZW5zOjpiZWZvcmUge1xuICAgICAgYmFja2dyb3VuZC1wb3NpdGlvbjogMCAtMTkycHg7IH1cbiAgICAjcGFnZS1pZGVudGl0eS12YXVsdCAucG9pbnRzIGxpLnN1cHBvcnQ6OmJlZm9yZSB7XG4gICAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwIC0yNDBweDsgfVxuICAgICNwYWdlLWlkZW50aXR5LXZhdWx0IC5wb2ludHMgbGkgc3Ryb25nIHtcbiAgICAgIGZvbnQtc2l6ZTogMjBweDtcbiAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7XG4gICAgICBmb250LWZhbWlseTogXCJFaW5hXCIsIFwiSGVsdmV0aWNhIE5ldWVcIiwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmOyB9XG4gICAgI3BhZ2UtaWRlbnRpdHktdmF1bHQgLnBvaW50cyBsaSBwIHtcbiAgICAgIGZvbnQtc2l6ZTogMTZweDtcbiAgICAgIG1hcmdpbi10b3A6IDE1cHg7XG4gICAgICBmb250LXdlaWdodDogNDAwO1xuICAgICAgbGluZS1oZWlnaHQ6IDEuOGVtO1xuICAgICAgbGV0dGVyLXNwYWNpbmc6IC0uMDFlbTtcbiAgICAgIGNvbG9yOiAjNTE2NTdkOyB9XG4gIEBtZWRpYSAobWF4LXdpZHRoOiA5OTFweCkge1xuICAgICNwYWdlLWlkZW50aXR5LXZhdWx0IC5wb2ludHMgaGdyb3VwIHtcbiAgICAgIHBhZGRpbmctdG9wOiAwOyB9XG4gICAgI3BhZ2UtaWRlbnRpdHktdmF1bHQgLnBvaW50cyBsaSB7XG4gICAgICBmbGV4LWJhc2lzOiAzNDBweDsgfSB9XG4gIEBtZWRpYSAobWF4LXdpZHRoOiA3NjdweCkge1xuICAgICNwYWdlLWlkZW50aXR5LXZhdWx0IC5wb2ludHMgbGkge1xuICAgICAgZmxleC1iYXNpczogMTAwJTtcbiAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsgfVxuICAgICAgI3BhZ2UtaWRlbnRpdHktdmF1bHQgLnBvaW50cyBsaTo6YmVmb3JlIHtcbiAgICAgICAgbGVmdDogY2FsYyg1MCUgLSAyNHB4KTsgfSB9XG5cbiNwYWdlLWlkZW50aXR5LXZhdWx0IC5wcm90ZWN0LFxuI3BhZ2UtaWRlbnRpdHktdmF1bHQgLmludGVncmF0aW9ucyB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTsgfVxuICAjcGFnZS1pZGVudGl0eS12YXVsdCAucHJvdGVjdDo6YmVmb3JlLFxuICAjcGFnZS1pZGVudGl0eS12YXVsdCAuaW50ZWdyYXRpb25zOjpiZWZvcmUge1xuICAgIGJhY2tncm91bmQ6IHVybChcIi9pbWcvZW50ZXJwcmlzZS9pZGVudGl0eS12YXVsdC9wcm90ZWN0aW9uLWltZy5wbmdcIikgMCAwIG5vLXJlcGVhdDtcbiAgICBiYWNrZ3JvdW5kLXNpemU6IDEwMCU7XG4gICAgd2lkdGg6IDU2MHB4O1xuICAgIGhlaWdodDogNTYwcHg7XG4gICAgY29udGVudDogJyc7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIHRvcDogMDtcbiAgICByaWdodDogLTEwcHg7IH1cbiAgICBAbWVkaWEgKG1heC13aWR0aDogOTkxcHgpIHtcbiAgICAgICNwYWdlLWlkZW50aXR5LXZhdWx0IC5wcm90ZWN0OjpiZWZvcmUsXG4gICAgICAjcGFnZS1pZGVudGl0eS12YXVsdCAuaW50ZWdyYXRpb25zOjpiZWZvcmUge1xuICAgICAgICB3aWR0aDogMjgwcHg7XG4gICAgICAgIGhlaWdodDogMjgwcHg7IH0gfVxuICAjcGFnZS1pZGVudGl0eS12YXVsdCAucHJvdGVjdCBoZ3JvdXAsXG4gICNwYWdlLWlkZW50aXR5LXZhdWx0IC5pbnRlZ3JhdGlvbnMgaGdyb3VwIHtcbiAgICB3aWR0aDogY2FsYyg1MCUgLSA0NnB4KTtcbiAgICBwYWRkaW5nLXRvcDogMDsgfVxuICAgIEBtZWRpYSAobWF4LXdpZHRoOiAxMjE5cHgpIHtcbiAgICAgICNwYWdlLWlkZW50aXR5LXZhdWx0IC5wcm90ZWN0IGhncm91cCxcbiAgICAgICNwYWdlLWlkZW50aXR5LXZhdWx0IC5pbnRlZ3JhdGlvbnMgaGdyb3VwIHtcbiAgICAgICAgd2lkdGg6IGNhbGMoNTAlIC0gNjZweCk7XG4gICAgICAgIHBhZGRpbmctYm90dG9tOiAwOyB9XG4gICAgICAgICNwYWdlLWlkZW50aXR5LXZhdWx0IC5wcm90ZWN0IGhncm91cCBoMyxcbiAgICAgICAgI3BhZ2UtaWRlbnRpdHktdmF1bHQgLmludGVncmF0aW9ucyBoZ3JvdXAgaDMge1xuICAgICAgICAgIHBhZGRpbmctdG9wOiA0MHB4OyB9IH1cbiAgICBAbWVkaWEgKG1heC13aWR0aDogOTkxcHgpIHtcbiAgICAgICNwYWdlLWlkZW50aXR5LXZhdWx0IC5wcm90ZWN0IGhncm91cCxcbiAgICAgICNwYWdlLWlkZW50aXR5LXZhdWx0IC5pbnRlZ3JhdGlvbnMgaGdyb3VwIHtcbiAgICAgICAgd2lkdGg6IDQ2MHB4OyB9IH1cbiAgI3BhZ2UtaWRlbnRpdHktdmF1bHQgLnByb3RlY3QgaDMsXG4gICNwYWdlLWlkZW50aXR5LXZhdWx0IC5pbnRlZ3JhdGlvbnMgaDMge1xuICAgIHBhZGRpbmctdG9wOiAxMTVweDtcbiAgICBmb250LXdlaWdodDogNjAwO1xuICAgIGZvbnQtc2l6ZTogMjhweDtcbiAgICBsZXR0ZXItc3BhY2luZzogLS4wMmVtO1xuICAgIG1hcmdpbi1ib3R0b206IDI0cHg7IH1cbiAgI3BhZ2UtaWRlbnRpdHktdmF1bHQgLnByb3RlY3QgcCxcbiAgI3BhZ2UtaWRlbnRpdHktdmF1bHQgLmludGVncmF0aW9ucyBwIHtcbiAgICBjb2xvcjogIzUxNjU3ZDtcbiAgICBmb250LXdlaWdodDogNDAwO1xuICAgIGxldHRlci1zcGFjaW5nOiAtLjAyZW07XG4gICAgbGluZS1oZWlnaHQ6IDEuOGVtOyB9XG4gICAgI3BhZ2UtaWRlbnRpdHktdmF1bHQgLnByb3RlY3QgcC5sZyxcbiAgICAjcGFnZS1pZGVudGl0eS12YXVsdCAuaW50ZWdyYXRpb25zIHAubGcge1xuICAgICAgZm9udC1zaXplOiAxOXB4O1xuICAgICAgbGV0dGVyLXNwYWNpbmc6IC4wMDRlbTtcbiAgICAgIGxpbmUtaGVpZ2h0OiAxLjllbTtcbiAgICAgIGZvbnQtd2VpZ2h0OiA0MDA7XG4gICAgICBtYXJnaW4tYm90dG9tOiAxN3B4OyB9XG4gICNwYWdlLWlkZW50aXR5LXZhdWx0IC5wcm90ZWN0IHVsLFxuICAjcGFnZS1pZGVudGl0eS12YXVsdCAuaW50ZWdyYXRpb25zIHVsIHtcbiAgICBwYWRkaW5nOiAwO1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgZmxleC13cmFwOiB3cmFwO1xuICAgIGxpc3Qtc3R5bGU6IG5vbmU7XG4gICAgbWFyZ2luLXRvcDogMzlweDsgfVxuICAgIEBtZWRpYSAobWF4LXdpZHRoOiAxMjE5cHgpIHtcbiAgICAgICNwYWdlLWlkZW50aXR5LXZhdWx0IC5wcm90ZWN0IHVsLFxuICAgICAgI3BhZ2UtaWRlbnRpdHktdmF1bHQgLmludGVncmF0aW9ucyB1bCB7XG4gICAgICAgIGRpc3BsYXk6IGJsb2NrOyB9IH1cbiAgI3BhZ2UtaWRlbnRpdHktdmF1bHQgLnByb3RlY3QgbGksXG4gICNwYWdlLWlkZW50aXR5LXZhdWx0IC5pbnRlZ3JhdGlvbnMgbGkge1xuICAgIGZsZXg6IDAgMCA1MCU7XG4gICAgcGFkZGluZy1sZWZ0OiAzMXB4O1xuICAgIGZvbnQtc2l6ZTogMTZweDtcbiAgICBjb2xvcjogIzM4ODBmZjtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgbWFyZ2luLWJvdHRvbTogMjJweDsgfVxuICAgICNwYWdlLWlkZW50aXR5LXZhdWx0IC5wcm90ZWN0IGxpOjpiZWZvcmUsXG4gICAgI3BhZ2UtaWRlbnRpdHktdmF1bHQgLmludGVncmF0aW9ucyBsaTo6YmVmb3JlIHtcbiAgICAgIGJhY2tncm91bmQ6IHVybChcIi9pbWcvZW50ZXJwcmlzZS9pZGVudGl0eS12YXVsdC9jaGVja21hcmsucG5nXCIpIDAgMCBuby1yZXBlYXQ7XG4gICAgICBiYWNrZ3JvdW5kLXNpemU6IDIwcHg7XG4gICAgICB3aWR0aDogMjBweDtcbiAgICAgIGhlaWdodDogMjBweDtcbiAgICAgIGNvbnRlbnQ6ICcnO1xuICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgdG9wOiAwO1xuICAgICAgbGVmdDogMXB4OyB9XG4gIEBtZWRpYSAobWF4LXdpZHRoOiA3NjdweCkge1xuICAgICNwYWdlLWlkZW50aXR5LXZhdWx0IC5wcm90ZWN0LFxuICAgICNwYWdlLWlkZW50aXR5LXZhdWx0IC5pbnRlZ3JhdGlvbnMge1xuICAgICAgcGFkZGluZy10b3A6IDIwMHB4OyB9XG4gICAgICAjcGFnZS1pZGVudGl0eS12YXVsdCAucHJvdGVjdDo6YmVmb3JlLFxuICAgICAgI3BhZ2UtaWRlbnRpdHktdmF1bHQgLmludGVncmF0aW9uczo6YmVmb3JlIHtcbiAgICAgICAgdG9wOiAtMzBweDtcbiAgICAgICAgcmlnaHQ6IGNhbGMoNTAlIC0gMTQwcHgpOyB9XG4gICAgICAjcGFnZS1pZGVudGl0eS12YXVsdCAucHJvdGVjdCBoZ3JvdXAsXG4gICAgICAjcGFnZS1pZGVudGl0eS12YXVsdCAuaW50ZWdyYXRpb25zIGhncm91cCB7XG4gICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7IH1cbiAgICAgICNwYWdlLWlkZW50aXR5LXZhdWx0IC5wcm90ZWN0IGxpLFxuICAgICAgI3BhZ2UtaWRlbnRpdHktdmF1bHQgLmludGVncmF0aW9ucyBsaSB7XG4gICAgICAgIGZsZXgtYmFzaXM6IDEwMCU7IH0gfVxuXG4jcGFnZS1pZGVudGl0eS12YXVsdCAuaW50ZWdyYXRpb25zIHtcbiAgcGFkZGluZy1ib3R0b206IDk5cHg7IH1cbiAgI3BhZ2UtaWRlbnRpdHktdmF1bHQgLmludGVncmF0aW9uczo6YmVmb3JlIHtcbiAgICBiYWNrZ3JvdW5kOiB1cmwoXCIvaW1nL2VudGVycHJpc2UvaWRlbnRpdHktdmF1bHQvaW50ZWdyYXRpb24taW1nLnBuZ1wiKSAwIDAgbm8tcmVwZWF0O1xuICAgIGJhY2tncm91bmQtc2l6ZTogMTAwJTtcbiAgICB3aWR0aDogNTYwcHg7XG4gICAgaGVpZ2h0OiA1NjBweDtcbiAgICB0b3A6IDEwMXB4O1xuICAgIGxlZnQ6IC0xMXB4O1xuICAgIHJpZ2h0OiBhdXRvOyB9XG4gICNwYWdlLWlkZW50aXR5LXZhdWx0IC5pbnRlZ3JhdGlvbnMgaGdyb3VwIHtcbiAgICBwYWRkaW5nLXRvcDogNTZweDtcbiAgICB3aWR0aDogY2FsYyg1MCUgLSA1OXB4KTsgfVxuICAgIEBtZWRpYSAobWF4LXdpZHRoOiAxMjE5cHgpIHtcbiAgICAgICNwYWdlLWlkZW50aXR5LXZhdWx0IC5pbnRlZ3JhdGlvbnMgaGdyb3VwIHtcbiAgICAgICAgcGFkZGluZy10b3A6IDBweDtcbiAgICAgICAgd2lkdGg6IGNhbGMoNTAlIC0gMTAwcHgpOyB9IH1cbiAgQG1lZGlhIChtYXgtd2lkdGg6IDk5MXB4KSB7XG4gICAgI3BhZ2UtaWRlbnRpdHktdmF1bHQgLmludGVncmF0aW9uczo6YmVmb3JlIHtcbiAgICAgIHdpZHRoOiAyODBweDtcbiAgICAgIGhlaWdodDogMjgwcHg7IH1cbiAgICAjcGFnZS1pZGVudGl0eS12YXVsdCAuaW50ZWdyYXRpb25zIGhncm91cCB7XG4gICAgICB3aWR0aDogNDQwcHg7IH1cbiAgICAjcGFnZS1pZGVudGl0eS12YXVsdCAuaW50ZWdyYXRpb25zIGgzIHtcbiAgICAgIHBhZGRpbmctdG9wOiA1MHB4OyB9IH1cbiAgQG1lZGlhIChtYXgtd2lkdGg6IDc2N3B4KSB7XG4gICAgI3BhZ2UtaWRlbnRpdHktdmF1bHQgLmludGVncmF0aW9ucyB7XG4gICAgICBwYWRkaW5nLXRvcDogMzMwcHg7IH1cbiAgICAgICNwYWdlLWlkZW50aXR5LXZhdWx0IC5pbnRlZ3JhdGlvbnM6OmJlZm9yZSB7XG4gICAgICAgIHRvcDogODBweDtcbiAgICAgICAgbGVmdDogY2FsYyg1MCUgLSAxNDBweCk7IH1cbiAgICAgICNwYWdlLWlkZW50aXR5LXZhdWx0IC5pbnRlZ3JhdGlvbnMgaGdyb3VwIHtcbiAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsgfVxuICAgICAgI3BhZ2UtaWRlbnRpdHktdmF1bHQgLmludGVncmF0aW9ucyBoMyB7XG4gICAgICAgIHBhZGRpbmctdG9wOiA1MHB4OyB9XG4gICAgICAjcGFnZS1pZGVudGl0eS12YXVsdCAuaW50ZWdyYXRpb25zIGxpIHtcbiAgICAgICAgdGV4dC1hbGlnbjogbGVmdDsgfSB9XG5cbiNwYWdlLWlkZW50aXR5LXZhdWx0IC53aGF0LXlvdS1nb3Qge1xuICBiYWNrZ3JvdW5kOiAjMTAxOTI4IHVybChcIi9pbWcvZW50ZXJwcmlzZS9pZGVudGl0eS12YXVsdC9iZy1wYW5lcy5wbmdcIikgNTAlIDAgbm8tcmVwZWF0O1xuICBiYWNrZ3JvdW5kLXNpemU6IDEwMDBweDsgfVxuICAjcGFnZS1pZGVudGl0eS12YXVsdCAud2hhdC15b3UtZ290IC5jb250YWluZXIge1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICBwYWRkaW5nLWJvdHRvbTogMTUwcHg7IH1cbiAgI3BhZ2UtaWRlbnRpdHktdmF1bHQgLndoYXQteW91LWdvdCBoZ3JvdXAge1xuICAgIHBhZGRpbmctdG9wOiAxNzhweDtcbiAgICBtYXgtd2lkdGg6IDcxMnB4OyB9XG4gICNwYWdlLWlkZW50aXR5LXZhdWx0IC53aGF0LXlvdS1nb3QgaDMge1xuICAgIGNvbG9yOiB3aGl0ZTtcbiAgICBmb250LXNpemU6IDM2cHg7XG4gICAgZm9udC13ZWlnaHQ6IDcwMDtcbiAgICBsZXR0ZXItc3BhY2luZzogLS4wMmVtOyB9XG4gICNwYWdlLWlkZW50aXR5LXZhdWx0IC53aGF0LXlvdS1nb3QgcCB7XG4gICAgY29sb3I6ICNiNmMzZDY7XG4gICAgZm9udC13ZWlnaHQ6IDQwMDtcbiAgICBtYXJnaW4tdG9wOiAxN3B4O1xuICAgIGxpbmUtaGVpZ2h0OiAxLjhlbTtcbiAgICBmb250LXNpemU6IDIwcHg7XG4gICAgbGV0dGVyLXNwYWNpbmc6IC0uMDJlbTsgfVxuICAgICNwYWdlLWlkZW50aXR5LXZhdWx0IC53aGF0LXlvdS1nb3QgcCBzdHJvbmcge1xuICAgICAgY29sb3I6IHdoaXRlO1xuICAgICAgZm9udC13ZWlnaHQ6IDQwMDsgfVxuICAjcGFnZS1pZGVudGl0eS12YXVsdCAud2hhdC15b3UtZ290IHVsIHtcbiAgICBwYWRkaW5nOiAwO1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgZmxleC13cmFwOiB3cmFwO1xuICAgIGxpc3Qtc3R5bGU6IG5vbmU7XG4gICAgbWFyZ2luLXRvcDogNjlweDtcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47IH1cbiAgI3BhZ2UtaWRlbnRpdHktdmF1bHQgLndoYXQteW91LWdvdCBsaSB7XG4gICAgZmxleDogMCAwIDUxOHB4O1xuICAgIHBhZGRpbmctbGVmdDogNTZweDtcbiAgICBmb250LXNpemU6IDE2cHg7XG4gICAgY29sb3I6IHdoaXRlO1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICBtYXJnaW4tYm90dG9tOiA0NXB4O1xuICAgIHBhZGRpbmctdG9wOiA1cHg7XG4gICAgbGV0dGVyLXNwYWNpbmc6IC0uMDJlbTsgfVxuICAgIEBtZWRpYSAobWF4LXdpZHRoOiAxMjE5cHgpIHtcbiAgICAgICNwYWdlLWlkZW50aXR5LXZhdWx0IC53aGF0LXlvdS1nb3QgbGkge1xuICAgICAgICBmbGV4LWJhc2lzOiBjYWxjKDUwJSAtIDUwcHgpOyB9IH1cbiAgICAjcGFnZS1pZGVudGl0eS12YXVsdCAud2hhdC15b3UtZ290IGxpOjpiZWZvcmUge1xuICAgICAgYmFja2dyb3VuZDogdXJsKFwiL2ltZy9lbnRlcnByaXNlL2lkZW50aXR5LXZhdWx0L2xvY2stY2hlY2ttYXJrLnBuZ1wiKSAwIDEwMCUgbm8tcmVwZWF0O1xuICAgICAgYmFja2dyb3VuZC1zaXplOiAzMnB4O1xuICAgICAgd2lkdGg6IDMycHg7XG4gICAgICBoZWlnaHQ6IDMycHg7XG4gICAgICBjb250ZW50OiAnJztcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgIHRvcDogMDtcbiAgICAgIGxlZnQ6IDA7IH1cbiAgQG1lZGlhIChtYXgtd2lkdGg6IDk5MXB4KSB7XG4gICAgI3BhZ2UtaWRlbnRpdHktdmF1bHQgLndoYXQteW91LWdvdCBoZ3JvdXAge1xuICAgICAgcGFkZGluZy10b3A6IDkycHg7XG4gICAgICBtYXgtd2lkdGg6IDcxMnB4OyB9IH1cbiAgQG1lZGlhIChtYXgtd2lkdGg6IDc2N3B4KSB7XG4gICAgI3BhZ2UtaWRlbnRpdHktdmF1bHQgLndoYXQteW91LWdvdCB7XG4gICAgICBiYWNrZ3JvdW5kLXNpemU6IGNvdmVyOyB9XG4gICAgICAjcGFnZS1pZGVudGl0eS12YXVsdCAud2hhdC15b3UtZ290IGxpIHtcbiAgICAgICAgZmxleC1iYXNpczogMTAwJTsgfSB9XG5cbiNwYWdlLWlkZW50aXR5LXZhdWx0IC5kZW1vIHtcbiAgcGFkZGluZy10b3A6IDk3cHg7XG4gIHBhZGRpbmctYm90dG9tOiAxMTBweDsgfVxuICAjcGFnZS1pZGVudGl0eS12YXVsdCAuZGVtbyBoZ3JvdXAgc3Ryb25nIHtcbiAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xuICAgIGxldHRlci1zcGFjaW5nOiAuMDZlbTtcbiAgICBmb250LWZhbWlseTogXCJFaW5hXCIsIFwiSGVsdmV0aWNhIE5ldWVcIiwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmOyB9XG4gICNwYWdlLWlkZW50aXR5LXZhdWx0IC5kZW1vIGhncm91cCBoMiB7XG4gICAgbWFyZ2luLXRvcDogMzlweDtcbiAgICBsZXR0ZXItc3BhY2luZzogLS4wMWVtOyB9XG4gICNwYWdlLWlkZW50aXR5LXZhdWx0IC5kZW1vIGhncm91cCBwIHtcbiAgICBtYXJnaW4tdG9wOiAxNnB4O1xuICAgIGZvbnQtd2VpZ2h0OiA0MDA7XG4gICAgZm9udC1zaXplOiAyMHB4O1xuICAgIGxldHRlci1zcGFjaW5nOiAtLjAyZW07IH1cbiAgICAjcGFnZS1pZGVudGl0eS12YXVsdCAuZGVtbyBoZ3JvdXAgcCBzdHJvbmcge1xuICAgICAgZm9udC13ZWlnaHQ6IDQwMDtcbiAgICAgIHRleHQtdHJhbnNmb3JtOiBub25lO1xuICAgICAgbGV0dGVyLXNwYWNpbmc6IGluaGVyaXQ7IH1cbiAgI3BhZ2UtaWRlbnRpdHktdmF1bHQgLmRlbW8gLmZvcm0ge1xuICAgIG1hcmdpbi10b3A6IDUwcHg7XG4gICAgbWF4LXdpZHRoOiA5MzBweDtcbiAgICBtYXJnaW4tbGVmdDogYXV0bztcbiAgICBtYXJnaW4tcmlnaHQ6IGF1dG87IH1cbiAgQG1lZGlhIChtYXgtd2lkdGg6IDk5MXB4KSB7XG4gICAgI3BhZ2UtaWRlbnRpdHktdmF1bHQgLmRlbW8ge1xuICAgICAgcGFkZGluZy10b3A6IDA7XG4gICAgICBwYWRkaW5nLWJvdHRvbTogNDBweDsgfSB9XG4gIEBtZWRpYSAobWF4LXdpZHRoOiA3NjdweCkge1xuICAgICNwYWdlLWlkZW50aXR5LXZhdWx0IC5kZW1vIC5mb3JtIHRleHRhcmVhLmhzLWlucHV0IHtcbiAgICAgIHdpZHRoOiBjYWxjKDEwMCUgLSAxOHB4KSAhaW1wb3J0YW50OyB9IH1cblxuI3BhZ2UtaWRlbnRpdHktdmF1bHQgLndhdGNoIHtcbiAgYmFja2dyb3VuZDogI2Y2ZjhmYjsgfVxuICAjcGFnZS1pZGVudGl0eS12YXVsdCAud2F0Y2ggLmNhcmQge1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICBsZWZ0OiA4NXB4O1xuICAgIHRvcDogNjhweDsgfVxuICAjcGFnZS1pZGVudGl0eS12YXVsdCAud2F0Y2ggaW1nIHtcbiAgICB3aWR0aDogNDYwcHg7IH1cbiAgI3BhZ2UtaWRlbnRpdHktdmF1bHQgLndhdGNoIGhncm91cCB7XG4gICAgcGFkZGluZy10b3A6IDExOXB4O1xuICAgIHdpZHRoOiBjYWxjKDUwJSAtIDUwcHgpO1xuICAgIHBhZGRpbmctYm90dG9tOiAxNDBweDsgfVxuICAgIEBtZWRpYSAobWF4LXdpZHRoOiAxMjE5cHgpIHtcbiAgICAgICNwYWdlLWlkZW50aXR5LXZhdWx0IC53YXRjaCBoZ3JvdXAge1xuICAgICAgICBwYWRkaW5nLXRvcDogMTAwcHg7XG4gICAgICAgIHdpZHRoOiBjYWxjKDUwJSAtIDEwMHB4KTtcbiAgICAgICAgcGFkZGluZy1ib3R0b206IDEyMHB4OyB9XG4gICAgICAgICNwYWdlLWlkZW50aXR5LXZhdWx0IC53YXRjaCBoZ3JvdXAgcCB7XG4gICAgICAgICAgcGFkZGluZy1yaWdodDogMDsgfSB9XG4gICNwYWdlLWlkZW50aXR5LXZhdWx0IC53YXRjaCBoMyB7XG4gICAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgICBsZXR0ZXItc3BhY2luZzogLS4wMmVtOyB9XG4gICNwYWdlLWlkZW50aXR5LXZhdWx0IC53YXRjaCBwIHtcbiAgICBtYXJnaW4tdG9wOiAyNHB4O1xuICAgIGZvbnQtd2VpZ2h0OiA0MDA7XG4gICAgZm9udC1zaXplOiAxOHB4O1xuICAgIHBhZGRpbmctcmlnaHQ6IDgwcHg7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgbWFyZ2luLWJvdHRvbTogMjJweDtcbiAgICBsZXR0ZXItc3BhY2luZzogLS4wMmVtOyB9XG4gICNwYWdlLWlkZW50aXR5LXZhdWx0IC53YXRjaCAuYnRuIHtcbiAgICBwYWRkaW5nOiAxNHB4IDE2cHggMTBweDtcbiAgICBmb250LXNpemU6IDE0cHg7IH1cbiAgICAjcGFnZS1pZGVudGl0eS12YXVsdCAud2F0Y2ggLmJ0biBpbWcge1xuICAgICAgd2lkdGg6IDE2cHg7XG4gICAgICBtYXJnaW4tcmlnaHQ6IDVweDsgfVxuICBAbWVkaWEgKG1heC13aWR0aDogMTIxOXB4KSB7XG4gICAgI3BhZ2UtaWRlbnRpdHktdmF1bHQgLndhdGNoIC5jYXJkIHtcbiAgICAgIGxlZnQ6IDA7IH0gfVxuICBAbWVkaWEgKG1heC13aWR0aDogOTkxcHgpIHtcbiAgICAjcGFnZS1pZGVudGl0eS12YXVsdCAud2F0Y2ggaW1nIHtcbiAgICAgIHdpZHRoOiAyMzBweDsgfVxuICAgICNwYWdlLWlkZW50aXR5LXZhdWx0IC53YXRjaCBoZ3JvdXAge1xuICAgICAgcGFkZGluZy10b3A6IDUwcHg7XG4gICAgICB3aWR0aDogY2FsYygxMDAlIC0gMjYwcHgpO1xuICAgICAgcGFkZGluZy1ib3R0b206IDYwcHg7IH0gfVxuICBAbWVkaWEgKG1heC13aWR0aDogNzY3cHgpIHtcbiAgICAjcGFnZS1pZGVudGl0eS12YXVsdCAud2F0Y2ggLmNvbnRhaW5lciB7XG4gICAgICBwYWRkaW5nLXRvcDogMjAwcHg7IH1cbiAgICAjcGFnZS1pZGVudGl0eS12YXVsdCAud2F0Y2ggLmNhcmQge1xuICAgICAgbGVmdDogY2FsYyg1MCUgLSAxMTVweCk7IH1cbiAgICAjcGFnZS1pZGVudGl0eS12YXVsdCAud2F0Y2ggaGdyb3VwIHtcbiAgICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICAgIHdpZHRoOiAxMDAlOyB9IH1cblxuI3BhZ2UtZW50ZXJwcmlzZS10cmFpbmluZyAuYmFubmVyIHtcbiAgcGFkZGluZy10b3A6IDE5OHB4O1xuICBwYWRkaW5nLWJvdHRvbTogOTBweDtcbiAgZm9udC1mYW1pbHk6IFwiRWluYVwiLCBcIkhlbHZldGljYSBOZXVlXCIsIEhlbHZldGljYSwgc2Fucy1zZXJpZjsgfVxuICAjcGFnZS1lbnRlcnByaXNlLXRyYWluaW5nIC5iYW5uZXIgaDEge1xuICAgIGZvbnQtc2l6ZTogNDhweDtcbiAgICBmb250LXdlaWdodDogNjAwO1xuICAgIGxldHRlci1zcGFjaW5nOiAtLjAxOGVtOyB9XG4gICNwYWdlLWVudGVycHJpc2UtdHJhaW5pbmcgLmJhbm5lciBwIHtcbiAgICBtYXJnaW4tdG9wOiAxNXB4O1xuICAgIGZvbnQtc2l6ZTogMjBweDtcbiAgICBmb250LXdlaWdodDogNjAwO1xuICAgIGxldHRlci1zcGFjaW5nOiAtLjAzZW07IH1cblxuI3BhZ2UtZW50ZXJwcmlzZS10cmFpbmluZyBtYWluIHtcbiAgbWF4LXdpZHRoOiA2MzBweDsgfVxuICAjcGFnZS1lbnRlcnByaXNlLXRyYWluaW5nIG1haW4gaDIge1xuICAgIGZvbnQtc2l6ZTogMjlweDtcbiAgICBmb250LXdlaWdodDogNzAwO1xuICAgIG1hcmdpbi1ib3R0b206IDE4cHg7XG4gICAgbGV0dGVyLXNwYWNpbmc6IC0uMDRlbTtcbiAgICBmb250LWZhbWlseTogXCJFaW5hXCIsIFwiSGVsdmV0aWNhIE5ldWVcIiwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmOyB9XG4gICNwYWdlLWVudGVycHJpc2UtdHJhaW5pbmcgbWFpbiBoMyB7XG4gICAgbWFyZ2luLXRvcDogMzlweDtcbiAgICBtYXJnaW4tYm90dG9tOiAyMXB4O1xuICAgIGZvbnQtc2l6ZTogMTlweDtcbiAgICBmb250LXdlaWdodDogNzAwO1xuICAgIGZvbnQtZmFtaWx5OiBcIkVpbmFcIiwgXCJIZWx2ZXRpY2EgTmV1ZVwiLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7XG4gICAgbGV0dGVyLXNwYWNpbmc6IC0uMDA1ZW07IH1cbiAgI3BhZ2UtZW50ZXJwcmlzZS10cmFpbmluZyBtYWluIHAge1xuICAgIGZvbnQtc2l6ZTogMTdweDtcbiAgICBmb250LXdlaWdodDogNTAwO1xuICAgIGxldHRlci1zcGFjaW5nOiAuMDJlbTtcbiAgICBsaW5lLWhlaWdodDogMS45ZW07XG4gICAgbWFyZ2luLWJvdHRvbTogMzJweDsgfVxuICAgICNwYWdlLWVudGVycHJpc2UtdHJhaW5pbmcgbWFpbiBwICsgdWwge1xuICAgICAgbWFyZ2luLXRvcDogLTE2cHg7IH1cbiAgI3BhZ2UtZW50ZXJwcmlzZS10cmFpbmluZyBtYWluIHVsIHtcbiAgICBwYWRkaW5nLWxlZnQ6IDI2cHg7IH1cbiAgI3BhZ2UtZW50ZXJwcmlzZS10cmFpbmluZyBtYWluIGxpIHtcbiAgICBmb250LXNpemU6IDE4cHg7XG4gICAgZm9udC13ZWlnaHQ6IDUwMDtcbiAgICBsZXR0ZXItc3BhY2luZzogLS4wMDVlbTtcbiAgICBsaW5lLWhlaWdodDogMS44ZW07IH1cblxuI3BhZ2UtZW50ZXJwcmlzZS10cmFpbmluZyBhc2lkZSB7XG4gIG1heC13aWR0aDogNTIwcHg7XG4gIG1hcmdpbi10b3A6IDQ2cHg7XG4gIG1hcmdpbi1ib3R0b206IDc4cHg7XG4gIHRleHQtYWxpZ246IGNlbnRlcjsgfVxuICAjcGFnZS1lbnRlcnByaXNlLXRyYWluaW5nIGFzaWRlIGgzIHtcbiAgICBjb2xvcjogIzM4ODBmZjtcbiAgICBmb250LXNpemU6IDI4cHg7XG4gICAgZm9udC13ZWlnaHQ6IDcwMDtcbiAgICBmb250LWZhbWlseTogXCJFaW5hXCIsIFwiSGVsdmV0aWNhIE5ldWVcIiwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmO1xuICAgIGxldHRlci1zcGFjaW5nOiAtLjAzZW07IH1cbiAgICAjcGFnZS1lbnRlcnByaXNlLXRyYWluaW5nIGFzaWRlIGgzIGkge1xuICAgICAgY29sb3I6ICM5M2EyYmM7XG4gICAgICBmb250LXN0eWxlOiBub3JtYWw7IH1cbiAgI3BhZ2UtZW50ZXJwcmlzZS10cmFpbmluZyBhc2lkZSAuY2FyZCB7XG4gICAgcGFkZGluZzogMzBweCAzMHB4IDFweDtcbiAgICB3aWR0aDogMTAwJTtcbiAgICBtaW4taGVpZ2h0OiAzMDBweDtcbiAgICBiYWNrZ3JvdW5kOiB3aGl0ZTtcbiAgICBib3JkZXItcmFkaXVzOiA4cHg7XG4gICAgbWFyZ2luOiAzMnB4IGF1dG87XG4gICAgYm94LXNoYWRvdzogMCA2cHggMjBweCByZ2JhKDAsIDAsIDAsIDAuMik7IH1cblxuI3BhZ2UtZ2V0dGluZy1zdGFydGVkIHtcbiAgZm9udC1mYW1pbHk6IFwiRWluYVwiLCBcIkhlbHZldGljYSBOZXVlXCIsIEhlbHZldGljYSwgc2Fucy1zZXJpZjsgfVxuICAjcGFnZS1nZXR0aW5nLXN0YXJ0ZWQgLmN0YS5ncmFkaWVudCB7XG4gICAgYmFja2dyb3VuZC1pbWFnZTogbGluZWFyLWdyYWRpZW50KDkwZGVnLCAjMzg4MGZmIDE1JSwgIzY3YTdmZiAxMDAlKTsgfVxuICAjcGFnZS1nZXR0aW5nLXN0YXJ0ZWQgLmN0YSBoZ3JvdXAge1xuICAgIHBhZGRpbmctdG9wOiA2MnB4O1xuICAgIHBhZGRpbmctYm90dG9tOiAwO1xuICAgIG1heC13aWR0aDogMTAwJTsgfVxuICAjcGFnZS1nZXR0aW5nLXN0YXJ0ZWQgLmN0YSBoMSxcbiAgI3BhZ2UtZ2V0dGluZy1zdGFydGVkIC5jdGEgaDQge1xuICAgIHRleHQtYWxpZ246IGxlZnQ7XG4gICAgbWF4LXdpZHRoOiA1NDBweDsgfVxuICAgIEBtZWRpYSAobWF4LXdpZHRoOiA3NjdweCkge1xuICAgICAgI3BhZ2UtZ2V0dGluZy1zdGFydGVkIC5jdGEgaDEsXG4gICAgICAjcGFnZS1nZXR0aW5nLXN0YXJ0ZWQgLmN0YSBoNCB7XG4gICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICAgICAgbWFyZ2luLWxlZnQ6IGF1dG87XG4gICAgICAgIG1hcmdpbi1yaWdodDogYXV0bzsgfSB9XG4gICNwYWdlLWdldHRpbmctc3RhcnRlZCAuY3RhIGgxIHtcbiAgICBmb250LXNpemU6IDM2cHg7XG4gICAgZm9udC13ZWlnaHQ6IDcwMDsgfVxuICAjcGFnZS1nZXR0aW5nLXN0YXJ0ZWQgLmN0YSBoNCB7XG4gICAgZm9udC1zaXplOiAyMHB4O1xuICAgIGxpbmUtaGVpZ2h0OiAzMnB4O1xuICAgIGNvbG9yOiAjRTNFOUY0O1xuICAgIG1hcmdpbi1ib3R0b206IDYwcHg7IH1cbiAgQG1lZGlhIChtYXgtd2lkdGg6IDc2N3B4KSB7XG4gICAgI3BhZ2UtZ2V0dGluZy1zdGFydGVkIC5jdGEgaGdyb3VwIHtcbiAgICAgIHBhZGRpbmctdG9wOiA0MnB4OyB9XG4gICAgI3BhZ2UtZ2V0dGluZy1zdGFydGVkIC5jdGEgaDQge1xuICAgICAgbWFyZ2luLWJvdHRvbTogMzBweDsgfSB9XG4gICNwYWdlLWdldHRpbmctc3RhcnRlZCAuY3Jhc2gtY291cnNlIHtcbiAgICBmbG9hdDogcmlnaHQ7XG4gICAgY3Vyc29yOiBwb2ludGVyO1xuICAgIG1hcmdpbi10b3A6IC0zMHB4O1xuICAgIG1hcmdpbi1sZWZ0OiAzMHB4O1xuICAgIGNvbG9yOiB3aGl0ZTtcbiAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG4gICAgdHJhbnNpdGlvbjogMC4ycyB0cmFuc2Zvcm0gY3ViaWMtYmV6aWVyKDAuMiwgMC43OCwgMC42NiwgMS43Myk7IH1cbiAgICAjcGFnZS1nZXR0aW5nLXN0YXJ0ZWQgLmNyYXNoLWNvdXJzZSBpbWcge1xuICAgICAgbWF4LXdpZHRoOiAzNThweDsgfVxuICAgICNwYWdlLWdldHRpbmctc3RhcnRlZCAuY3Jhc2gtY291cnNlIGgzIHtcbiAgICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XG4gICAgICBmb250LXNpemU6IDExcHg7XG4gICAgICBmb250LXdlaWdodDogNzAwO1xuICAgICAgbGV0dGVyLXNwYWNpbmc6IDAuMDhlbTtcbiAgICAgIGNvbG9yOiAjZmZmO1xuICAgICAgbWFyZ2luOiAwO1xuICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoLThweCwgLTkxcHgpIHJvdGF0ZSgzLjdkZWcpOyB9XG4gICAgI3BhZ2UtZ2V0dGluZy1zdGFydGVkIC5jcmFzaC1jb3Vyc2U6aG92ZXIge1xuICAgICAgdHJhbnNmb3JtOiBzY2FsZSgxLjAyLCAxLjAyKTsgfVxuICAgIEBtZWRpYSAobWF4LXdpZHRoOiA5OTJweCkge1xuICAgICAgI3BhZ2UtZ2V0dGluZy1zdGFydGVkIC5jcmFzaC1jb3Vyc2Uge1xuICAgICAgICBtYXJnaW4tdG9wOiAwOyB9XG4gICAgICAgICNwYWdlLWdldHRpbmctc3RhcnRlZCAuY3Jhc2gtY291cnNlIGltZyB7XG4gICAgICAgICAgbWF4LXdpZHRoOiAzMDBweDsgfSB9XG4gICAgQG1lZGlhIChtYXgtd2lkdGg6IDc2N3B4KSB7XG4gICAgICAjcGFnZS1nZXR0aW5nLXN0YXJ0ZWQgLmNyYXNoLWNvdXJzZSB7XG4gICAgICAgIGZsb2F0OiBub25lO1xuICAgICAgICBtYXJnaW4tbGVmdDogMDsgfSB9XG4gICNwYWdlLWdldHRpbmctc3RhcnRlZCAudGFiLWNvbnRlbnQge1xuICAgIHBhZGRpbmc6IDEwMHB4IDAgMDsgfVxuICAgIEBtZWRpYSAobWF4LXdpZHRoOiA3NjdweCkge1xuICAgICAgI3BhZ2UtZ2V0dGluZy1zdGFydGVkIC50YWItY29udGVudCB7XG4gICAgICAgIHBhZGRpbmc6IDgwcHggMCAwOyB9IH1cbiAgICAjcGFnZS1nZXR0aW5nLXN0YXJ0ZWQgLnRhYi1jb250ZW50IC5jb250YWluZXI6bGFzdC1jaGlsZCB7XG4gICAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgI2VkZjJmNztcbiAgICAgIHBhZGRpbmctYm90dG9tOiAxMjBweDsgfVxuICAgICAgQG1lZGlhIChtYXgtd2lkdGg6IDk5MXB4KSB7XG4gICAgICAgICNwYWdlLWdldHRpbmctc3RhcnRlZCAudGFiLWNvbnRlbnQgLmNvbnRhaW5lcjpsYXN0LWNoaWxkIHtcbiAgICAgICAgICBwYWRkaW5nLWJvdHRvbTogNzBweDsgfSB9XG4gICAgI3BhZ2UtZ2V0dGluZy1zdGFydGVkIC50YWItY29udGVudCAubG9nbyB7XG4gICAgICB3aWR0aDogMTU4cHg7XG4gICAgICBtYXJnaW4tYm90dG9tOiAyNHB4OyB9XG4gICAgI3BhZ2UtZ2V0dGluZy1zdGFydGVkIC50YWItY29udGVudCBoZ3JvdXAge1xuICAgICAgbWFyZ2luOiAwIGF1dG87XG4gICAgICBtYXgtd2lkdGg6IDU4MHB4O1xuICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgICAgcGFkZGluZy1ib3R0b206IDYwcHg7IH1cbiAgICAgICNwYWdlLWdldHRpbmctc3RhcnRlZCAudGFiLWNvbnRlbnQgaGdyb3VwIC5idG4ge1xuICAgICAgICBtYXJnaW4tdG9wOiAzMnB4OyB9XG4gICAgI3BhZ2UtZ2V0dGluZy1zdGFydGVkIC50YWItY29udGVudCBoMSB7XG4gICAgICBmb250LXNpemU6IDI0cHg7XG4gICAgICBmb250LXdlaWdodDogNzAwO1xuICAgICAgbGV0dGVyLXNwYWNpbmc6IC0wLjAyZW07IH1cbiAgICAjcGFnZS1nZXR0aW5nLXN0YXJ0ZWQgLnRhYi1jb250ZW50IGgyIHtcbiAgICAgIGZvbnQtc2l6ZTogMThweDtcbiAgICAgIGxpbmUtaGVpZ2h0OiAyOHB4O1xuICAgICAgbGV0dGVyLXNwYWNpbmc6IC0wLjAxMmVtO1xuICAgICAgbWFyZ2luLXRvcDogMTRweDsgfVxuICAgICNwYWdlLWdldHRpbmctc3RhcnRlZCAudGFiLWNvbnRlbnQgaDMge1xuICAgICAgZm9udC1zaXplOiAyMHB4O1xuICAgICAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgICAgIGxldHRlci1zcGFjaW5nOiAtMC4wMmVtOyB9XG4gICAgICAjcGFnZS1nZXR0aW5nLXN0YXJ0ZWQgLnRhYi1jb250ZW50IGgzLnRoaW4ge1xuICAgICAgICBmb250LXdlaWdodDogNDAwOyB9XG4gICAgI3BhZ2UtZ2V0dGluZy1zdGFydGVkIC50YWItY29udGVudCBoNCB7XG4gICAgICBmb250LXNpemU6IDE2cHg7XG4gICAgICBsaW5lLWhlaWdodDogMjJweDtcbiAgICAgIGNvbG9yOiAjMEYxNjIwO1xuICAgICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcbiAgICAgIGxldHRlci1zcGFjaW5nOiAwLjFlbTtcbiAgICAgIGZvbnQtd2VpZ2h0OiA3MDA7IH1cbiAgICAjcGFnZS1nZXR0aW5nLXN0YXJ0ZWQgLnRhYi1jb250ZW50IHAge1xuICAgICAgZm9udC1mYW1pbHk6IFwiSW50ZXJcIiwgXCJJbnRlciBVSVwiLCBIZWx2ZXRpY2EsIEFyaWFsLCBzYW5zLXNlcmlmO1xuICAgICAgZm9udC1zaXplOiAxNXB4O1xuICAgICAgbGluZS1oZWlnaHQ6IDI4cHg7XG4gICAgICBsZXR0ZXItc3BhY2luZzogLTAuMDFlbTsgfVxuICAgICNwYWdlLWdldHRpbmctc3RhcnRlZCAudGFiLWNvbnRlbnQgY29kZSB7XG4gICAgICBmb250LXNpemU6IDE1cHg7XG4gICAgICBjb2xvcjogI0UwNUM3QjtcbiAgICAgIGJhY2tncm91bmQ6IG5vbmU7XG4gICAgICBmb250LXdlaWdodDogNTAwOyB9XG4gICAgI3BhZ2UtZ2V0dGluZy1zdGFydGVkIC50YWItY29udGVudCBwcmUge1xuICAgICAgYm9yZGVyOiAwO1xuICAgICAgcGFkZGluZzogMDtcbiAgICAgIG1hcmdpbjogMDtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6ICNGNUY3RkE7XG4gICAgICBib3JkZXItcmFkaXVzOiA2cHg7IH1cbiAgICAgICNwYWdlLWdldHRpbmctc3RhcnRlZCAudGFiLWNvbnRlbnQgcHJlIGNvZGUge1xuICAgICAgICBjb2xvcjogIzI3MkEyRjtcbiAgICAgICAgcGFkZGluZzogMTZweCAyNHB4IDIwcHg7XG4gICAgICAgIG1hcmdpbi10b3A6IDRweDsgfVxuICAgICNwYWdlLWdldHRpbmctc3RhcnRlZCAudGFiLWNvbnRlbnQgLmltZyB7XG4gICAgICB3aWR0aDogMTAwJTsgfVxuICAgICNwYWdlLWdldHRpbmctc3RhcnRlZCAudGFiLWNvbnRlbnQgb2wge1xuICAgICAgbWFyZ2luLWxlZnQ6IDA7XG4gICAgICBwYWRkaW5nOiAwO1xuICAgICAgbGlzdC1zdHlsZS10eXBlOiBub25lOyB9XG4gICAgI3BhZ2UtZ2V0dGluZy1zdGFydGVkIC50YWItY29udGVudCBvbCBsaSB7XG4gICAgICBjb3VudGVyLWluY3JlbWVudDogc3RlcC1jb3VudGVyO1xuICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsgfVxuICAgICAgI3BhZ2UtZ2V0dGluZy1zdGFydGVkIC50YWItY29udGVudCBvbCBsaSBoMSB7XG4gICAgICAgIG1hcmdpbi10b3A6IDA7IH1cbiAgICAgICNwYWdlLWdldHRpbmctc3RhcnRlZCAudGFiLWNvbnRlbnQgb2wgbGkgKyBsaSxcbiAgICAgICNwYWdlLWdldHRpbmctc3RhcnRlZCAudGFiLWNvbnRlbnQgb2wgbGkgKyAuc3VwZXJjaGFyZ2Uge1xuICAgICAgICBtYXJnaW4tdG9wOiAxNDBweDsgfVxuICAgICAgICBAbWVkaWEgKG1heC13aWR0aDogNzY3cHgpIHtcbiAgICAgICAgICAjcGFnZS1nZXR0aW5nLXN0YXJ0ZWQgLnRhYi1jb250ZW50IG9sIGxpICsgbGksXG4gICAgICAgICAgI3BhZ2UtZ2V0dGluZy1zdGFydGVkIC50YWItY29udGVudCBvbCBsaSArIC5zdXBlcmNoYXJnZSB7XG4gICAgICAgICAgICBtYXJnaW4tdG9wOiA2MHB4OyB9IH1cbiAgICAgICNwYWdlLWdldHRpbmctc3RhcnRlZCAudGFiLWNvbnRlbnQgb2wgbGk6OmJlZm9yZSB7XG4gICAgICAgIGNvbnRlbnQ6IGNvdW50ZXIoc3RlcC1jb3VudGVyKTtcbiAgICAgICAgbWFyZ2luLXJpZ2h0OiAxNHB4O1xuICAgICAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDtcbiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICAgIHdpZHRoOiAyNXB4O1xuICAgICAgICBmbGV4OiAwIDAgMjVweDtcbiAgICAgICAgaGVpZ2h0OiAyNXB4O1xuICAgICAgICBmb250LXNpemU6IDE0cHg7XG4gICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6ICMzODgwRkY7XG4gICAgICAgIGNvbG9yOiAjZmZmO1xuICAgICAgICBib3JkZXItcmFkaXVzOiAxMDBweDsgfVxuICAgICAgI3BhZ2UtZ2V0dGluZy1zdGFydGVkIC50YWItY29udGVudCBvbCBsaSA+IGRpdiB7XG4gICAgICAgIGZsZXg6IDE7IH1cbiAgICAgIEBtZWRpYSAobWF4LXdpZHRoOiA3NjdweCkge1xuICAgICAgICAjcGFnZS1nZXR0aW5nLXN0YXJ0ZWQgLnRhYi1jb250ZW50IG9sIGxpIHtcbiAgICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgICAgICAgIHBhZGRpbmctdG9wOiA0MHB4OyB9XG4gICAgICAgICAgI3BhZ2UtZ2V0dGluZy1zdGFydGVkIC50YWItY29udGVudCBvbCBsaTo6YmVmb3JlIHtcbiAgICAgICAgICAgIG1hcmdpbi1ib3R0b206IDE4cHg7XG4gICAgICAgICAgICBtYXJnaW4tcmlnaHQ6IDA7XG4gICAgICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgICAgICBsZWZ0OiA1MCU7XG4gICAgICAgICAgICB0b3A6IDA7XG4gICAgICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTUwJSk7IH1cbiAgICAgICAgICAjcGFnZS1nZXR0aW5nLXN0YXJ0ZWQgLnRhYi1jb250ZW50IG9sIGxpIGgxIHtcbiAgICAgICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsgfVxuICAgICAgICAgICNwYWdlLWdldHRpbmctc3RhcnRlZCAudGFiLWNvbnRlbnQgb2wgbGkgKyAuc3VwZXJjaGFyZ2UgbGk6OmJlZm9yZSB7XG4gICAgICAgICAgICBkaXNwbGF5OiBub25lOyB9IH1cbiAgICAjcGFnZS1nZXR0aW5nLXN0YXJ0ZWQgLnRhYi1jb250ZW50IC5jb250ZW50LXJvdyB7XG4gICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xuICAgICAgbWFyZ2luLXRvcDogMjRweDtcbiAgICAgIG1hcmdpbi1sZWZ0OiAtMjRweDtcbiAgICAgIG1hcmdpbi1yaWdodDogLTI0cHg7IH1cbiAgICAgICNwYWdlLWdldHRpbmctc3RhcnRlZCAudGFiLWNvbnRlbnQgLmNvbnRlbnQtcm93ICsgLmNvbnRlbnQtcm93IHtcbiAgICAgICAgbWFyZ2luLXRvcDogODBweDsgfVxuICAgICAgICBAbWVkaWEgKG1heC13aWR0aDogNzY3cHgpIHtcbiAgICAgICAgICAjcGFnZS1nZXR0aW5nLXN0YXJ0ZWQgLnRhYi1jb250ZW50IC5jb250ZW50LXJvdyArIC5jb250ZW50LXJvdyB7XG4gICAgICAgICAgICBtYXJnaW4tdG9wOiAyNHB4OyB9IH1cbiAgICAgICNwYWdlLWdldHRpbmctc3RhcnRlZCAudGFiLWNvbnRlbnQgLmNvbnRlbnQtcm93IC5jb2wge1xuICAgICAgICBwYWRkaW5nLWxlZnQ6IDI0cHg7XG4gICAgICAgIHBhZGRpbmctcmlnaHQ6IDI0cHg7IH1cbiAgICAgICNwYWdlLWdldHRpbmctc3RhcnRlZCAudGFiLWNvbnRlbnQgLmNvbnRlbnQtcm93IC5jb2wtLWhhbGYge1xuICAgICAgICBmbGV4OiAwIDAgNTAlOyB9XG4gICAgICAjcGFnZS1nZXR0aW5nLXN0YXJ0ZWQgLnRhYi1jb250ZW50IC5jb250ZW50LXJvdyAuY29sLS10aGlyZCB7XG4gICAgICAgIGZsZXg6IDAgMCAzMyU7IH1cbiAgICAgICNwYWdlLWdldHRpbmctc3RhcnRlZCAudGFiLWNvbnRlbnQgLmNvbnRlbnQtcm93IC5jb2wtLWZ1bGwge1xuICAgICAgICBmbGV4OiAwIDAgMTAwJTtcbiAgICAgICAgbWFyZ2luLWxlZnQ6IDA7XG4gICAgICAgIG1hcmdpbi1yaWdodDogMDsgfVxuICAgICAgI3BhZ2UtZ2V0dGluZy1zdGFydGVkIC50YWItY29udGVudCAuY29udGVudC1yb3cgLmNvbC0tY2VudGVyZWQge1xuICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7IH1cbiAgICAgICAgI3BhZ2UtZ2V0dGluZy1zdGFydGVkIC50YWItY29udGVudCAuY29udGVudC1yb3cgLmNvbC0tY2VudGVyZWQgY29kZSB7XG4gICAgICAgICAgZm9udC1zaXplOiAxNHB4OyB9XG4gICAgICBAbWVkaWEgKG1heC13aWR0aDogNzY4cHgpIHtcbiAgICAgICAgI3BhZ2UtZ2V0dGluZy1zdGFydGVkIC50YWItY29udGVudCAuY29udGVudC1yb3cge1xuICAgICAgICAgIG1hcmdpbi1sZWZ0OiAwO1xuICAgICAgICAgIG1hcmdpbi1yaWdodDogMDtcbiAgICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOyB9XG4gICAgICAgICAgI3BhZ2UtZ2V0dGluZy1zdGFydGVkIC50YWItY29udGVudCAuY29udGVudC1yb3cgLmNvbCB7XG4gICAgICAgICAgICBmbGV4OiAwIDAgMTAwJTtcbiAgICAgICAgICAgIG1hcmdpbjogMDsgfVxuICAgICAgICAgICNwYWdlLWdldHRpbmctc3RhcnRlZCAudGFiLWNvbnRlbnQgLmNvbnRlbnQtcm93IC5jb2wgKyAuY29sIHtcbiAgICAgICAgICAgIG1hcmdpbi10b3A6IDI0cHg7IH0gfVxuICAgICNwYWdlLWdldHRpbmctc3RhcnRlZCAudGFiLWNvbnRlbnQgLmZvcm0tcm93IHtcbiAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47IH1cbiAgICAgICNwYWdlLWdldHRpbmctc3RhcnRlZCAudGFiLWNvbnRlbnQgLmZvcm0tcm93IC5mb3JtLXdyYXBwZXIge1xuICAgICAgICBmbGV4OiAwIDAgNjQwcHg7IH1cbiAgICAgIEBtZWRpYSAobWF4LXdpZHRoOiA5OTFweCkge1xuICAgICAgICAjcGFnZS1nZXR0aW5nLXN0YXJ0ZWQgLnRhYi1jb250ZW50IC5mb3JtLXJvdyB7XG4gICAgICAgICAgZGlzcGxheTogYmxvY2s7IH0gfVxuICAgICNwYWdlLWdldHRpbmctc3RhcnRlZCAudGFiLWNvbnRlbnQgLmZvcm0ge1xuICAgICAgcGFkZGluZzogNjRweDtcbiAgICAgIGJhY2tncm91bmQ6ICNGRkZGRkY7XG4gICAgICBib3gtc2hhZG93OiAwIDEwcHggMjBweCAwIHJnYmEoMCwgMTMsIDM2LCAwLjE2KSwgMCAycHggOHB4IDAgcmdiYSgwLCAxMywgMzYsIDAuMDgpO1xuICAgICAgYm9yZGVyLXJhZGl1czogMTZweDsgfVxuICAgICAgI3BhZ2UtZ2V0dGluZy1zdGFydGVkIC50YWItY29udGVudCAuZm9ybSBoMSB7XG4gICAgICAgIG1hcmdpbi10b3A6IDA7IH1cbiAgICAgICNwYWdlLWdldHRpbmctc3RhcnRlZCAudGFiLWNvbnRlbnQgLmZvcm0gaDIge1xuICAgICAgICBtYXJnaW4tdG9wOiAxMHB4O1xuICAgICAgICBtYXJnaW4tYm90dG9tOiA0MnB4OyB9XG4gICAgICAjcGFnZS1nZXR0aW5nLXN0YXJ0ZWQgLnRhYi1jb250ZW50IC5mb3JtIGxhYmVsIHtcbiAgICAgICAgZm9udC1zaXplOiAxM3B4O1xuICAgICAgICBjb2xvcjogIzNCNDM0RDtcbiAgICAgICAgbGV0dGVyLXNwYWNpbmc6IC0wLjAxNWVtO1xuICAgICAgICBmb250LXdlaWdodDogNjAwO1xuICAgICAgICBtYXJnaW4tYm90dG9tOiAzcHg7IH1cbiAgICAgICNwYWdlLWdldHRpbmctc3RhcnRlZCAudGFiLWNvbnRlbnQgLmZvcm0gaW5wdXRbdHlwZT1cInRleHRcIl0sXG4gICAgICAjcGFnZS1nZXR0aW5nLXN0YXJ0ZWQgLnRhYi1jb250ZW50IC5mb3JtIGlucHV0W3R5cGU9XCJwYXNzd29yZFwiXSB7XG4gICAgICAgIHRyYW5zaXRpb246IGJvcmRlciAwLjJzO1xuICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgIGJhY2tncm91bmQ6ICNGRkZGRkY7XG4gICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICNDM0NEREY7XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDZweDtcbiAgICAgICAgcGFkZGluZzogMTFweCAxNnB4OyB9XG4gICAgICAgICNwYWdlLWdldHRpbmctc3RhcnRlZCAudGFiLWNvbnRlbnQgLmZvcm0gaW5wdXRbdHlwZT1cInRleHRcIl06Zm9jdXMsXG4gICAgICAgICNwYWdlLWdldHRpbmctc3RhcnRlZCAudGFiLWNvbnRlbnQgLmZvcm0gaW5wdXRbdHlwZT1cInBhc3N3b3JkXCJdOmZvY3VzIHtcbiAgICAgICAgICBvdXRsaW5lOiBub25lICFpbXBvcnRhbnQ7XG4gICAgICAgICAgYm9yZGVyOiAxcHggc29saWQgIzM4ODBmZjsgfVxuICAgICAgI3BhZ2UtZ2V0dGluZy1zdGFydGVkIC50YWItY29udGVudCAuZm9ybSAuZXJyb3IgaW5wdXRbdHlwZT1cInRleHRcIl0sXG4gICAgICAjcGFnZS1nZXR0aW5nLXN0YXJ0ZWQgLnRhYi1jb250ZW50IC5mb3JtIC5lcnJvciBpbnB1dFt0eXBlPVwicGFzc3dvcmRcIl0ge1xuICAgICAgICBib3JkZXItY29sb3I6ICNmNDU0NTQ7IH1cbiAgICAgICNwYWdlLWdldHRpbmctc3RhcnRlZCAudGFiLWNvbnRlbnQgLmZvcm0gLmNoZWNrYm94LWxhYmVsIHtcbiAgICAgICAgY29sb3I6ICM3MjdBODc7XG4gICAgICAgIGZvbnQtc2l6ZTogMTFweDtcbiAgICAgICAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgICAgICAgbWFyZ2luLWxlZnQ6IDRweDsgfVxuICAgICAgI3BhZ2UtZ2V0dGluZy1zdGFydGVkIC50YWItY29udGVudCAuZm9ybSAuZm9ybS1ncm91cCB7XG4gICAgICAgIG1hcmdpbi1ib3R0b206IDIwcHg7IH1cbiAgICAgICNwYWdlLWdldHRpbmctc3RhcnRlZCAudGFiLWNvbnRlbnQgLmZvcm0gLmZvcm0tbWVzc2FnZSB7XG4gICAgICAgIGNvbG9yOiAjZjQ1NDU0O1xuICAgICAgICBmb250LXdlaWdodDogNjAwOyB9XG4gICAgICAgICNwYWdlLWdldHRpbmctc3RhcnRlZCAudGFiLWNvbnRlbnQgLmZvcm0gLmZvcm0tbWVzc2FnZS0tc21hbGwge1xuICAgICAgICAgIGZvbnQtc2l6ZTogMTFweDtcbiAgICAgICAgICBsaW5lLWhlaWdodDogMTZweDtcbiAgICAgICAgICBtYXJnaW4tdG9wOiA2cHg7IH1cbiAgICAgICNwYWdlLWdldHRpbmctc3RhcnRlZCAudGFiLWNvbnRlbnQgLmZvcm0gLmJ0biB7XG4gICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICB3aWR0aDogMTAwJTsgfVxuICAgICAgI3BhZ2UtZ2V0dGluZy1zdGFydGVkIC50YWItY29udGVudCAuZm9ybSAuZGlzY2xhaW1lciB7XG4gICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgICAgIGZvbnQtc2l6ZTogMTFweDtcbiAgICAgICAgY29sb3I6ICNhMGE5Yjc7XG4gICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7IH1cbiAgICAgICNwYWdlLWdldHRpbmctc3RhcnRlZCAudGFiLWNvbnRlbnQgLmZvcm0gLndlbGwge1xuICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgICAgICAgcGFkZGluZzogMTJweDtcbiAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICNFMUU1RUQ7XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDZweDtcbiAgICAgICAgbWFyZ2luLXRvcDogMTZweDtcbiAgICAgICAgY29sb3I6ICMzQjQyNEQ7XG4gICAgICAgIGZvbnQtc2l6ZTogMTRweDtcbiAgICAgICAgZm9udC13ZWlnaHQ6IDYwMDsgfVxuICAgICAgI3BhZ2UtZ2V0dGluZy1zdGFydGVkIC50YWItY29udGVudCAuZm9ybSAudGV4dC1saW5rIHtcbiAgICAgICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XG4gICAgICAgIG1hcmdpbi1sZWZ0OiA4cHg7IH1cbiAgICAgIEBtZWRpYSAobWF4LXdpZHRoOiA0ODBweCkge1xuICAgICAgICAjcGFnZS1nZXR0aW5nLXN0YXJ0ZWQgLnRhYi1jb250ZW50IC5mb3JtIHtcbiAgICAgICAgICBwYWRkaW5nOiAzNnB4IDI4cHg7IH0gfVxuICAgICNwYWdlLWdldHRpbmctc3RhcnRlZCAudGFiLWNvbnRlbnQgLmVycm9ybGlzdCB7XG4gICAgICBkaXNwbGF5OiBub25lO1xuICAgICAgY29sb3I6ICNmNDU0NTQ7XG4gICAgICBmb250LXNpemU6IDE0cHg7XG4gICAgICBsaW5lLWhlaWdodDogMjBweDtcbiAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7XG4gICAgICBtYXJnaW4tYm90dG9tOiAyOHB4OyB9XG4gICAgICAjcGFnZS1nZXR0aW5nLXN0YXJ0ZWQgLnRhYi1jb250ZW50IC5lcnJvcmxpc3QuZXJyb3Ige1xuICAgICAgICBkaXNwbGF5OiBibG9jazsgfVxuICAgICNwYWdlLWdldHRpbmctc3RhcnRlZCAudGFiLWNvbnRlbnQgLmJlbmVmaXRzIHtcbiAgICAgIG1heC13aWR0aDogMzkwcHg7XG4gICAgICBtYXJnaW4tbGVmdDogNDhweDtcbiAgICAgIG1hcmdpbi10b3A6IDc2cHg7IH1cbiAgICAgICNwYWdlLWdldHRpbmctc3RhcnRlZCAudGFiLWNvbnRlbnQgLmJlbmVmaXRzID4gcCB7XG4gICAgICAgIGZvbnQtc2l6ZTogMTZweDtcbiAgICAgICAgbGluZS1oZWlnaHQ6IDI4cHg7XG4gICAgICAgIGNvbG9yOiAjNDI0QzVBO1xuICAgICAgICBtYXJnaW4tdG9wOiAxOHB4OyB9XG4gICAgICAgICNwYWdlLWdldHRpbmctc3RhcnRlZCAudGFiLWNvbnRlbnQgLmJlbmVmaXRzID4gcCBiIHtcbiAgICAgICAgICBmb250LXdlaWdodDogNTAwO1xuICAgICAgICAgIGNvbG9yOiAjNDI0QzVBOyB9XG4gICAgICAjcGFnZS1nZXR0aW5nLXN0YXJ0ZWQgLnRhYi1jb250ZW50IC5iZW5lZml0cyB1bCB7XG4gICAgICAgIGxpc3Qtc3R5bGUtdHlwZTogbm9uZTtcbiAgICAgICAgbWFyZ2luOiA2MHB4IDAgMDtcbiAgICAgICAgcGFkZGluZzogMDsgfVxuICAgICAgI3BhZ2UtZ2V0dGluZy1zdGFydGVkIC50YWItY29udGVudCAuYmVuZWZpdHMgaDUge1xuICAgICAgICBjb2xvcjogIzE2MUExRjtcbiAgICAgICAgZm9udC1zaXplOiAxNnB4O1xuICAgICAgICBsaW5lLWhlaWdodDogMjJweDtcbiAgICAgICAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgICAgICAgbWFyZ2luLWJvdHRvbTogNHB4OyB9XG4gICAgICAjcGFnZS1nZXR0aW5nLXN0YXJ0ZWQgLnRhYi1jb250ZW50IC5iZW5lZml0cyBsaSB7XG4gICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgICAgcGFkZGluZy1sZWZ0OiA0MnB4OyB9XG4gICAgICAgICNwYWdlLWdldHRpbmctc3RhcnRlZCAudGFiLWNvbnRlbnQgLmJlbmVmaXRzIGxpIHAge1xuICAgICAgICAgIGZvbnQtc2l6ZTogMTRweDtcbiAgICAgICAgICBsaW5lLWhlaWdodDogMjRweDtcbiAgICAgICAgICBjb2xvcjogIzU0NUM2QTsgfVxuICAgICAgICAjcGFnZS1nZXR0aW5nLXN0YXJ0ZWQgLnRhYi1jb250ZW50IC5iZW5lZml0cyBsaTo6YmVmb3JlIHtcbiAgICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gICAgICAgICAgd2lkdGg6IDI0cHg7XG4gICAgICAgICAgaGVpZ2h0OiAyNHB4O1xuICAgICAgICAgIGZvbnQtZmFtaWx5OiBJb25pY29ucztcbiAgICAgICAgICBjb250ZW50OiAnXFxmMmJjJztcbiAgICAgICAgICBjb2xvcjogI0QwRTZGRjtcbiAgICAgICAgICBiYWNrZ3JvdW5kOiAjNjdBMkZGO1xuICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDEwMHB4O1xuICAgICAgICAgIGZvbnQtc2l6ZTogMS4yZW07XG4gICAgICAgICAgbWFyZ2luLWxlZnQ6IDVweDtcbiAgICAgICAgICBmb250LXdlaWdodDogNDAwO1xuICAgICAgICAgIGxpbmUtaGVpZ2h0OiAxZW07XG4gICAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgICB0b3A6IDA7XG4gICAgICAgICAgbGVmdDogMDsgfVxuICAgICAgI3BhZ2UtZ2V0dGluZy1zdGFydGVkIC50YWItY29udGVudCAuYmVuZWZpdHMgbGkgKyBsaSB7XG4gICAgICAgIG1hcmdpbi10b3A6IDQwcHg7IH1cbiAgICAgIEBtZWRpYSAobWF4LXdpZHRoOiAxMjE5cHgpIHtcbiAgICAgICAgI3BhZ2UtZ2V0dGluZy1zdGFydGVkIC50YWItY29udGVudCAuYmVuZWZpdHMge1xuICAgICAgICAgIG1hcmdpbi10b3A6IDA7IH1cbiAgICAgICAgICAjcGFnZS1nZXR0aW5nLXN0YXJ0ZWQgLnRhYi1jb250ZW50IC5iZW5lZml0cyB1bCB7XG4gICAgICAgICAgICBtYXJnaW4tdG9wOiA0MHB4OyB9IH1cbiAgICAgIEBtZWRpYSAobWF4LXdpZHRoOiA5OTFweCkge1xuICAgICAgICAjcGFnZS1nZXR0aW5nLXN0YXJ0ZWQgLnRhYi1jb250ZW50IC5iZW5lZml0cyB7XG4gICAgICAgICAgbWFyZ2luLXRvcDogMTAwcHg7XG4gICAgICAgICAgbWFyZ2luLWxlZnQ6IDA7XG4gICAgICAgICAgbWF4LXdpZHRoOiA1OTBweDsgfSB9XG4gICAgI3BhZ2UtZ2V0dGluZy1zdGFydGVkIC50YWItY29udGVudCAuc2lnbi11cC1sb2dvcyB7XG4gICAgICBwYWRkaW5nOiAxMDBweCAwIDQwcHg7IH1cbiAgICAgICNwYWdlLWdldHRpbmctc3RhcnRlZCAudGFiLWNvbnRlbnQgLnNpZ24tdXAtbG9nb3MgLnNpZ24tdXAtbG9nb3NfX2NvbnRlbnQge1xuICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG4gICAgICAgIG1hcmdpbi10b3A6IDM0cHg7IH1cbiAgICAgICNwYWdlLWdldHRpbmctc3RhcnRlZCAudGFiLWNvbnRlbnQgLnNpZ24tdXAtbG9nb3MgLnNpZ24tdXAtbG9nb3NfX2NvbnRlbnQgPiBkaXYge1xuICAgICAgICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXCIvaW1nL2dldHRpbmctc3RhcnRlZC9nZXR0aW5nLXN0YXJ0ZWQtc2lnbnVwLWxvZ28tc3ByaXRlLnBuZ1wiKTtcbiAgICAgICAgYmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdDtcbiAgICAgICAgYmFja2dyb3VuZC1zaXplOiAxMjhweCAxODZweDsgfVxuICAgICAgICAjcGFnZS1nZXR0aW5nLXN0YXJ0ZWQgLnRhYi1jb250ZW50IC5zaWduLXVwLWxvZ29zIC5zaWduLXVwLWxvZ29zX19jb250ZW50ID4gZGl2LnRhcmdldCB7XG4gICAgICAgICAgd2lkdGg6IDIycHg7XG4gICAgICAgICAgaGVpZ2h0OiAyMnB4O1xuICAgICAgICAgIGJhY2tncm91bmQtcG9zaXRpb246IDAgMDsgfVxuICAgICAgICAjcGFnZS1nZXR0aW5nLXN0YXJ0ZWQgLnRhYi1jb250ZW50IC5zaWduLXVwLWxvZ29zIC5zaWduLXVwLWxvZ29zX19jb250ZW50ID4gZGl2LnZlcml6b24ge1xuICAgICAgICAgIHdpZHRoOiA3OXB4O1xuICAgICAgICAgIGhlaWdodDogMThweDtcbiAgICAgICAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwIC0yM3B4OyB9XG4gICAgICAgICNwYWdlLWdldHRpbmctc3RhcnRlZCAudGFiLWNvbnRlbnQgLnNpZ24tdXAtbG9nb3MgLnNpZ24tdXAtbG9nb3NfX2NvbnRlbnQgPiBkaXYuYW10cmFrIHtcbiAgICAgICAgICB3aWR0aDogNTJweDtcbiAgICAgICAgICBoZWlnaHQ6IDIycHg7XG4gICAgICAgICAgYmFja2dyb3VuZC1wb3NpdGlvbjogMCAtNDJweDsgfVxuICAgICAgICAjcGFnZS1nZXR0aW5nLXN0YXJ0ZWQgLnRhYi1jb250ZW50IC5zaWduLXVwLWxvZ29zIC5zaWduLXVwLWxvZ29zX19jb250ZW50ID4gZGl2Lm1hcmtldHdhdGNoIHtcbiAgICAgICAgICB3aWR0aDogMTI5cHg7XG4gICAgICAgICAgaGVpZ2h0OiAxOHB4O1xuICAgICAgICAgIGJhY2tncm91bmQtcG9zaXRpb246IDAgLTY1cHg7IH1cbiAgICAgICAgI3BhZ2UtZ2V0dGluZy1zdGFydGVkIC50YWItY29udGVudCAuc2lnbi11cC1sb2dvcyAuc2lnbi11cC1sb2dvc19fY29udGVudCA+IGRpdi51c2FybXkge1xuICAgICAgICAgIHdpZHRoOiA1MnB4O1xuICAgICAgICAgIGhlaWdodDogMThweDtcbiAgICAgICAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwIC04NHB4OyB9XG4gICAgICAgICNwYWdlLWdldHRpbmctc3RhcnRlZCAudGFiLWNvbnRlbnQgLnNpZ24tdXAtbG9nb3MgLnNpZ24tdXAtbG9nb3NfX2NvbnRlbnQgPiBkaXYuZ2Uge1xuICAgICAgICAgIHdpZHRoOiAyMnB4O1xuICAgICAgICAgIGhlaWdodDogMjJweDtcbiAgICAgICAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwIC0xMDNweDsgfVxuICAgICAgICAjcGFnZS1nZXR0aW5nLXN0YXJ0ZWQgLnRhYi1jb250ZW50IC5zaWduLXVwLWxvZ29zIC5zaWduLXVwLWxvZ29zX19jb250ZW50ID4gZGl2LmNvbWNhc3Qge1xuICAgICAgICAgIHdpZHRoOiA4MHB4O1xuICAgICAgICAgIGhlaWdodDogMjJweDtcbiAgICAgICAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwIC0xMjZweDsgfVxuICAgICAgICAjcGFnZS1nZXR0aW5nLXN0YXJ0ZWQgLnRhYi1jb250ZW50IC5zaWduLXVwLWxvZ29zIC5zaWduLXVwLWxvZ29zX19jb250ZW50ID4gZGl2LmVhIHtcbiAgICAgICAgICB3aWR0aDogMzdweDtcbiAgICAgICAgICBoZWlnaHQ6IDE4cHg7XG4gICAgICAgICAgYmFja2dyb3VuZC1wb3NpdGlvbjogMCAtMTQ5cHg7IH1cbiAgICAgICAgI3BhZ2UtZ2V0dGluZy1zdGFydGVkIC50YWItY29udGVudCAuc2lnbi11cC1sb2dvcyAuc2lnbi11cC1sb2dvc19fY29udGVudCA+IGRpdi5pYm0ge1xuICAgICAgICAgIHdpZHRoOiA0OHB4O1xuICAgICAgICAgIGhlaWdodDogMThweDtcbiAgICAgICAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwIC0xNjhweDsgfVxuICAgICAgQG1lZGlhIChtYXgtd2lkdGg6IDc2OHB4KSB7XG4gICAgICAgICNwYWdlLWdldHRpbmctc3RhcnRlZCAudGFiLWNvbnRlbnQgLnNpZ24tdXAtbG9nb3MgLnNpZ24tdXAtbG9nb3NfX2NvbnRlbnQge1xuICAgICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICAgICAgICAgIG1heC13aWR0aDogNTkwcHg7XG4gICAgICAgICAgbWFyZ2luOiAzNHB4IGF1dG8gMDtcbiAgICAgICAgICBmbGV4LXdyYXA6IHdyYXA7IH1cbiAgICAgICAgI3BhZ2UtZ2V0dGluZy1zdGFydGVkIC50YWItY29udGVudCAuc2lnbi11cC1sb2dvcyAuc2lnbi11cC1sb2dvc19fY29udGVudCA+IGRpdiB7XG4gICAgICAgICAgbWFyZ2luOiAwIDIwcHggMzBweDtcbiAgICAgICAgICBmbGV4OiAwIDAgYXV0bzsgfSB9XG4gICAgI3BhZ2UtZ2V0dGluZy1zdGFydGVkIC50YWItY29udGVudCAuY29udGVudC10aXAge1xuICAgICAgdHJhbnNpdGlvbjogYm9yZGVyIDAuMnM7XG4gICAgICBjb2xvcjogIzg1OTRBRjtcbiAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7XG4gICAgICBmb250LXNpemU6IDEzcHg7XG4gICAgICBib3JkZXI6IDFweCBzb2xpZCAjRTFFNUVEO1xuICAgICAgcGFkZGluZzogMTJweCAxNHB4O1xuICAgICAgYm9yZGVyLXJhZGl1czogNnB4O1xuICAgICAgbWFyZ2luLXRvcDogOHB4O1xuICAgICAgZGlzcGxheTogaW5saW5lLWZsZXg7XG4gICAgICBhbGlnbi1pdGVtczogY2VudGVyOyB9XG4gICAgICAjcGFnZS1nZXR0aW5nLXN0YXJ0ZWQgLnRhYi1jb250ZW50IC5jb250ZW50LXRpcDpob3ZlciB7XG4gICAgICAgIGJvcmRlci1jb2xvcjogI2M1Y2ZlMjsgfVxuICAgICAgI3BhZ2UtZ2V0dGluZy1zdGFydGVkIC50YWItY29udGVudCAuY29udGVudC10aXA6OmJlZm9yZSB7XG4gICAgICAgIGNvbnRlbnQ6ICc/JztcbiAgICAgICAgYmFja2dyb3VuZDogI0FCQjhDRTtcbiAgICAgICAgcGFkZGluZzogMCAycHg7XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDRweDtcbiAgICAgICAgY29sb3I6ICNmZmY7XG4gICAgICAgIGZvbnQtc2l6ZTogMTFweDtcbiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgICAgICB3aWR0aDogMTRweDtcbiAgICAgICAgZmxleDogMCAwIDE0cHg7XG4gICAgICAgIGhlaWdodDogMTRweDtcbiAgICAgICAgbGluZS1oZWlnaHQ6IDE7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICAgICAgICBtYXJnaW4tcmlnaHQ6IDEycHg7IH1cbiAgICAgICNwYWdlLWdldHRpbmctc3RhcnRlZCAudGFiLWNvbnRlbnQgLmNvbnRlbnQtdGlwOjphZnRlciB7XG4gICAgICAgIGZvbnQtZmFtaWx5OiBJb25pY29ucztcbiAgICAgICAgY29udGVudDogJ1xcZjNkMSc7XG4gICAgICAgIGZvbnQtc2l6ZTogMThweDtcbiAgICAgICAgbWFyZ2luLWxlZnQ6IDhweDtcbiAgICAgICAgZm9udC13ZWlnaHQ6IDQwMDtcbiAgICAgICAgbGluZS1oZWlnaHQ6IDE7XG4gICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC0xcHgpO1xuICAgICAgICB0cmFuc2l0aW9uOiAuM3MgdHJhbnNmb3JtO1xuICAgICAgICBmbGV4OiAwIDAgNnB4OyB9XG4gICAgICAjcGFnZS1nZXR0aW5nLXN0YXJ0ZWQgLnRhYi1jb250ZW50IC5jb250ZW50LXRpcDpob3Zlcjo6YWZ0ZXIge1xuICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgycHgsIC0xcHgpOyB9XG4gICAgI3BhZ2UtZ2V0dGluZy1zdGFydGVkIC50YWItY29udGVudCAuc3VwZXJjaGFyZ2Uge1xuICAgICAgYmFja2dyb3VuZC1pbWFnZTogbGluZWFyLWdyYWRpZW50KC05MGRlZywgIzcyNDVEOSAwJSwgIzRDNUJFMyA1MiUsICMyNDcyRUYgMTAwJSk7XG4gICAgICBib3gtc2hhZG93OiAwIDEwcHggMjBweCAwIHJnYmEoMCwgMTMsIDM2LCAwLjE2KSwgMCAycHggOHB4IDAgcmdiYSgwLCAxMywgMzYsIDAuMDgpO1xuICAgICAgYm9yZGVyLXJhZGl1czogMTFweDtcbiAgICAgIHBhZGRpbmc6IDQwcHggNDBweCAwO1xuICAgICAgY29sb3I6ICNmZmY7XG4gICAgICBwb3NpdGlvbjogcmVsYXRpdmU7IH1cbiAgICAgICNwYWdlLWdldHRpbmctc3RhcnRlZCAudGFiLWNvbnRlbnQgLnN1cGVyY2hhcmdlOjpiZWZvcmUge1xuICAgICAgICBjb250ZW50OiAnJztcbiAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgdG9wOiAtMzRweDtcbiAgICAgICAgbGVmdDogNTAlO1xuICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTUwJSk7XG4gICAgICAgIHdpZHRoOiA2OHB4O1xuICAgICAgICBoZWlnaHQ6IDY4cHg7XG4gICAgICAgIGJhY2tncm91bmQ6IHVybChcIi9pbWcvZ2V0dGluZy1zdGFydGVkL3N1cGVyY2hhcmdlLWxvZ28ucG5nXCIpIG5vLXJlcGVhdDtcbiAgICAgICAgYmFja2dyb3VuZC1zaXplOiAxMDAlOyB9XG4gICAgICAjcGFnZS1nZXR0aW5nLXN0YXJ0ZWQgLnRhYi1jb250ZW50IC5zdXBlcmNoYXJnZSBsaTo6YmVmb3JlIHtcbiAgICAgICAgYmFja2dyb3VuZDogI2ZmZjtcbiAgICAgICAgY29sb3I6ICMzODgwRkY7IH1cbiAgICAgICNwYWdlLWdldHRpbmctc3RhcnRlZCAudGFiLWNvbnRlbnQgLnN1cGVyY2hhcmdlIHByZSB7XG4gICAgICAgIGJhY2tncm91bmQ6IHJnYmEoMCwgMCwgMCwgMC4xOCk7IH1cbiAgICAgICAgI3BhZ2UtZ2V0dGluZy1zdGFydGVkIC50YWItY29udGVudCAuc3VwZXJjaGFyZ2UgcHJlIGNvZGUge1xuICAgICAgICAgIGNvbG9yOiAjZmZmOyB9XG4gICAgICAjcGFnZS1nZXR0aW5nLXN0YXJ0ZWQgLnRhYi1jb250ZW50IC5zdXBlcmNoYXJnZSAuaW1nIHtcbiAgICAgICAgbWFyZ2luLXRvcDogNDhweDsgfVxuICAgICAgQG1lZGlhIChtYXgtd2lkdGg6IDc2N3B4KSB7XG4gICAgICAgICNwYWdlLWdldHRpbmctc3RhcnRlZCAudGFiLWNvbnRlbnQgLnN1cGVyY2hhcmdlIHtcbiAgICAgICAgICBwYWRkaW5nOiAyMHB4IDIwcHggMDsgfVxuICAgICAgICAgICNwYWdlLWdldHRpbmctc3RhcnRlZCAudGFiLWNvbnRlbnQgLnN1cGVyY2hhcmdlIC5pbWcge1xuICAgICAgICAgICAgbWFyZ2luLXRvcDogMjBweDsgfSB9XG4gICAgI3BhZ2UtZ2V0dGluZy1zdGFydGVkIC50YWItY29udGVudCAubGVhcm4tbW9yZSB7XG4gICAgICBwYWRkaW5nOiA1MHB4IDAgNjBweDtcbiAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsgfVxuICAgICAgI3BhZ2UtZ2V0dGluZy1zdGFydGVkIC50YWItY29udGVudCAubGVhcm4tbW9yZSBwIHtcbiAgICAgICAgbWFyZ2luOiAwOyB9XG4gICAgI3BhZ2UtZ2V0dGluZy1zdGFydGVkIC50YWItY29udGVudCAubmV4dC1zdGVwcyB7XG4gICAgICBib3JkZXItdG9wOiAxcHggc29saWQgI0VERURFRDsgfVxuICAgICAgI3BhZ2UtZ2V0dGluZy1zdGFydGVkIC50YWItY29udGVudCAubmV4dC1zdGVwcyBoZ3JvdXAge1xuICAgICAgICBtYXgtd2lkdGg6IDkwMHB4O1xuICAgICAgICBwYWRkaW5nLXRvcDogMTAwcHg7XG4gICAgICAgIHBhZGRpbmctYm90dG9tOiAwOyB9XG4gICAgICAjcGFnZS1nZXR0aW5nLXN0YXJ0ZWQgLnRhYi1jb250ZW50IC5uZXh0LXN0ZXBzIC5jb250ZW50LXJvdyB7XG4gICAgICAgIG1hcmdpbi10b3A6IDQ0cHg7XG4gICAgICAgIG1hcmdpbi1sZWZ0OiAtMTJweDtcbiAgICAgICAgbWFyZ2luLXJpZ2h0OiAtMTJweDsgfVxuICAgICAgICAjcGFnZS1nZXR0aW5nLXN0YXJ0ZWQgLnRhYi1jb250ZW50IC5uZXh0LXN0ZXBzIC5jb250ZW50LXJvdyAuY29sIHtcbiAgICAgICAgICBtYXJnaW4tbGVmdDogMTJweDtcbiAgICAgICAgICBtYXJnaW4tcmlnaHQ6IDEycHg7IH1cbiAgICAgICAgI3BhZ2UtZ2V0dGluZy1zdGFydGVkIC50YWItY29udGVudCAubmV4dC1zdGVwcyAuY29udGVudC1yb3cgLmNvbnRlbnQtY2FyZCB7XG4gICAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICAgICAgIHBhZGRpbmctcmlnaHQ6IDEwMHB4O1xuICAgICAgICAgIG92ZXJmbG93OiBoaWRkZW47IH1cbiAgICAgICAgICAjcGFnZS1nZXR0aW5nLXN0YXJ0ZWQgLnRhYi1jb250ZW50IC5uZXh0LXN0ZXBzIC5jb250ZW50LXJvdyAuY29udGVudC1jYXJkOjphZnRlciB7XG4gICAgICAgICAgICBiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0O1xuICAgICAgICAgICAgYmFja2dyb3VuZC1wb3NpdGlvbjogMCAwO1xuICAgICAgICAgICAgYmFja2dyb3VuZC1zaXplOiA4MHB4O1xuICAgICAgICAgICAgd2lkdGg6IDgwcHg7XG4gICAgICAgICAgICBoZWlnaHQ6IDE0NHB4O1xuICAgICAgICAgICAgY29udGVudDogJyc7XG4gICAgICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgICAgIHJpZ2h0OiAwO1xuICAgICAgICAgICAgdG9wOiBjYWxjKDUwJSAtIDcycHgpOyB9XG4gICAgICAgICAgI3BhZ2UtZ2V0dGluZy1zdGFydGVkIC50YWItY29udGVudCAubmV4dC1zdGVwcyAuY29udGVudC1yb3cgLmNvbnRlbnQtY2FyZDpudGgtY2hpbGQoMSk6OmFmdGVyIHtcbiAgICAgICAgICAgIGJhY2tncm91bmQtaW1hZ2U6IHVybCgvaW1nL2dldHRpbmctc3RhcnRlZC9pb25pYy1uYXRpdmUtY2FyZC5wbmcpOyB9XG4gICAgICAgICAgI3BhZ2UtZ2V0dGluZy1zdGFydGVkIC50YWItY29udGVudCAubmV4dC1zdGVwcyAuY29udGVudC1yb3cgLmNvbnRlbnQtY2FyZDpudGgtY2hpbGQoMik6OmFmdGVyIHtcbiAgICAgICAgICAgIGJhY2tncm91bmQtaW1hZ2U6IHVybCgvaW1nL2dldHRpbmctc3RhcnRlZC9jb21wb25lbnRzLWNhcmQucG5nKTsgfVxuICAgICAgICAgICNwYWdlLWdldHRpbmctc3RhcnRlZCAudGFiLWNvbnRlbnQgLm5leHQtc3RlcHMgLmNvbnRlbnQtcm93IC5jb250ZW50LWNhcmQ6bnRoLWNoaWxkKDMpOjphZnRlciB7XG4gICAgICAgICAgICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoL2ltZy9nZXR0aW5nLXN0YXJ0ZWQvdGhlbWluZy1jYXJkLnBuZyk7IH1cbiAgICAgIEBtZWRpYSAobWF4LXdpZHRoOiA5OTFweCkge1xuICAgICAgICAjcGFnZS1nZXR0aW5nLXN0YXJ0ZWQgLnRhYi1jb250ZW50IC5uZXh0LXN0ZXBzIGhncm91cCB7XG4gICAgICAgICAgcGFkZGluZy10b3A6IDQycHg7IH0gfVxuICAgICAgQG1lZGlhIChtYXgtd2lkdGg6IDEyMTlweCkge1xuICAgICAgICAjcGFnZS1nZXR0aW5nLXN0YXJ0ZWQgLnRhYi1jb250ZW50IC5uZXh0LXN0ZXBzIC5jb250ZW50LXJvdyB7XG4gICAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsgfVxuICAgICAgICAgICNwYWdlLWdldHRpbmctc3RhcnRlZCAudGFiLWNvbnRlbnQgLm5leHQtc3RlcHMgLmNvbnRlbnQtcm93IC5jb2wge1xuICAgICAgICAgICAgZmxleDogMCAwIDEwMCU7XG4gICAgICAgICAgICBtYXJnaW46IDEycHggMTJweCAwOyB9IH1cbiAgICAjcGFnZS1nZXR0aW5nLXN0YXJ0ZWQgLnRhYi1jb250ZW50IC5jb250ZW50LWNhcmQge1xuICAgICAgdHJhbnNpdGlvbjogYm94LXNoYWRvdyAwLjNzO1xuICAgICAgYmFja2dyb3VuZDogI0ZGRkZGRjtcbiAgICAgIGJveC1zaGFkb3c6IDAgOHB4IDE2cHggMCByZ2JhKDAsIDAsIDAsIDAuMSksIDAgMnB4IDRweCAwIHJnYmEoMCwgMCwgMCwgMC4wOCk7XG4gICAgICBib3JkZXItcmFkaXVzOiA4cHg7XG4gICAgICBwYWRkaW5nOiAxNnB4IDkycHggMTZweCAzMnB4OyB9XG4gICAgICAjcGFnZS1nZXR0aW5nLXN0YXJ0ZWQgLnRhYi1jb250ZW50IC5jb250ZW50LWNhcmQgaDMge1xuICAgICAgICBjb2xvcjogIzBGMTYyMDsgfVxuICAgICAgI3BhZ2UtZ2V0dGluZy1zdGFydGVkIC50YWItY29udGVudCAuY29udGVudC1jYXJkIHAge1xuICAgICAgICBjb2xvcjogIzU0NUM2QTsgfVxuICAgICAgI3BhZ2UtZ2V0dGluZy1zdGFydGVkIC50YWItY29udGVudCAuY29udGVudC1jYXJkOmhvdmVyIHtcbiAgICAgICAgYm94LXNoYWRvdzogMCA1cHggMTBweCAwIHJnYmEoMCwgMTMsIDM2LCAwLjA4KSwgMCAycHggOHB4IDAgcmdiYSgwLCAxMywgMzYsIDAuMDgpOyB9XG4gICNwYWdlLWdldHRpbmctc3RhcnRlZCAuYnRuIHtcbiAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xuICAgIGZvbnQtc2l6ZTogMTNweDtcbiAgICBsaW5lLWhlaWdodDogMTtcbiAgICBmb250LXdlaWdodDogNzAwO1xuICAgIGxldHRlci1zcGFjaW5nOiAwLjA4ZW07XG4gICAgYm9yZGVyLXJhZGl1czogNnB4O1xuICAgIHBhZGRpbmc6IDIwcHggMjJweDtcbiAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyOyB9XG4gICAgI3BhZ2UtZ2V0dGluZy1zdGFydGVkIC5idG4gaSB7XG4gICAgICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gMC4ycztcbiAgICAgIG1hcmdpbi1sZWZ0OiAxMHB4O1xuICAgICAgZm9udC1zaXplOiAxOHB4OyB9XG4gICAgI3BhZ2UtZ2V0dGluZy1zdGFydGVkIC5idG46aG92ZXIgaSB7XG4gICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgycHgsIDApOyB9XG4gICNwYWdlLWdldHRpbmctc3RhcnRlZCAuc2NyZWVuc2hvdC1ncm91cCB7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlOyB9XG4gICAgI3BhZ2UtZ2V0dGluZy1zdGFydGVkIC5zY3JlZW5zaG90LWdyb3VwIGltZyB7XG4gICAgICBtYXgtd2lkdGg6IDEwMCU7IH1cbiAgICAjcGFnZS1nZXR0aW5nLXN0YXJ0ZWQgLnNjcmVlbnNob3QtZ3JvdXAgaW1nOm5vdCg6Zmlyc3QtY2hpbGQpIHtcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgIHRvcDogMDtcbiAgICAgIGxlZnQ6IDA7XG4gICAgICBhbmltYXRpb246IDEwcyBjcm9zc0ZhZGVJbk91dCBpbmZpbml0ZTsgfVxuXG4jcGFnZS1nby1wd2EtYXJjaGl0ZWN0cy1ndWlkZSxcbiNwYWdlLWdvLXdoeS1oeWJyaWQge1xuICBmb250LWZhbWlseTogXCJJbnRlclwiLCBcIkludGVyIFVJXCIsIEhlbHZldGljYSwgQXJpYWwsIHNhbnMtc2VyaWY7IH1cbiAgI3BhZ2UtZ28tcHdhLWFyY2hpdGVjdHMtZ3VpZGUgaDEsXG4gICNwYWdlLWdvLXB3YS1hcmNoaXRlY3RzLWd1aWRlIGgyLFxuICAjcGFnZS1nby1wd2EtYXJjaGl0ZWN0cy1ndWlkZSBoMyxcbiAgI3BhZ2UtZ28td2h5LWh5YnJpZCBoMSxcbiAgI3BhZ2UtZ28td2h5LWh5YnJpZCBoMixcbiAgI3BhZ2UtZ28td2h5LWh5YnJpZCBoMyB7XG4gICAgZm9udC1mYW1pbHk6IFwiRWluYVwiLCBcIkhlbHZldGljYSBOZXVlXCIsIEhlbHZldGljYSwgc2Fucy1zZXJpZjsgfVxuICAjcGFnZS1nby1wd2EtYXJjaGl0ZWN0cy1ndWlkZSAuYmFubmVyLFxuICAjcGFnZS1nby13aHktaHlicmlkIC5iYW5uZXIge1xuICAgIGJhY2tncm91bmQtY29sb3I6ICNmNmY4ZmM7XG4gICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNlNWU3ZWI7XG4gICAgbWFyZ2luLXRvcDogLTEzOHB4O1xuICAgIHBhZGRpbmctdG9wOiA3OHB4OyB9XG4gICAgI3BhZ2UtZ28tcHdhLWFyY2hpdGVjdHMtZ3VpZGUgLmJhbm5lciBzdmcsXG4gICAgI3BhZ2UtZ28td2h5LWh5YnJpZCAuYmFubmVyIHN2ZyB7XG4gICAgICBmaWxsOiAjNGY2Mzg0OyB9XG4gICAgI3BhZ2UtZ28tcHdhLWFyY2hpdGVjdHMtZ3VpZGUgLmJhbm5lciBoZ3JvdXAsXG4gICAgI3BhZ2UtZ28td2h5LWh5YnJpZCAuYmFubmVyIGhncm91cCB7XG4gICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICAgIGFsaWduLWl0ZW1zOiBmbGV4LXN0YXJ0O1xuICAgICAgdGV4dC1hbGlnbjogbGVmdDtcbiAgICAgIHBhZGRpbmctdG9wOiA4MXB4O1xuICAgICAgcGFkZGluZy1ib3R0b206IDcycHg7XG4gICAgICBwYWRkaW5nLXJpZ2h0OiA2MzJweDsgfVxuICAgICNwYWdlLWdvLXB3YS1hcmNoaXRlY3RzLWd1aWRlIC5iYW5uZXIgaDEsXG4gICAgI3BhZ2UtZ28td2h5LWh5YnJpZCAuYmFubmVyIGgxIHtcbiAgICAgIGNvbG9yOiAjMjQyODJlO1xuICAgICAgZm9udC1zaXplOiAzN3B4O1xuICAgICAgZm9udC13ZWlnaHQ6IDcwMDtcbiAgICAgIGxldHRlci1zcGFjaW5nOiAtMC4wMzRlbTtcbiAgICAgIG1hcmdpbjogNzdweCAwIDIycHg7IH1cbiAgICAjcGFnZS1nby1wd2EtYXJjaGl0ZWN0cy1ndWlkZSAuYmFubmVyIHAsXG4gICAgI3BhZ2UtZ28td2h5LWh5YnJpZCAuYmFubmVyIHAge1xuICAgICAgZm9udC1zaXplOiAxOHB4O1xuICAgICAgbGluZS1oZWlnaHQ6IDMycHg7XG4gICAgICBmb250LXdlaWdodDogNDAwO1xuICAgICAgbGV0dGVyLXNwYWNpbmc6IC0wLjAyZW07XG4gICAgICBjb2xvcjogIzYyNmM3ZDtcbiAgICAgIG1heC13aWR0aDogODAwcHg7IH1cbiAgI3BhZ2UtZ28tcHdhLWFyY2hpdGVjdHMtZ3VpZGUgLmNvbnRlbnQsXG4gICNwYWdlLWdvLXB3YS1hcmNoaXRlY3RzLWd1aWRlIC5zaWdudXAtZm9ybSxcbiAgI3BhZ2UtZ28td2h5LWh5YnJpZCAuY29udGVudCxcbiAgI3BhZ2UtZ28td2h5LWh5YnJpZCAuc2lnbnVwLWZvcm0ge1xuICAgIGZsZXg6IDEgMDsgfVxuICAjcGFnZS1nby1wd2EtYXJjaGl0ZWN0cy1ndWlkZSAuY29udGVudCxcbiAgI3BhZ2UtZ28td2h5LWh5YnJpZCAuY29udGVudCB7XG4gICAgcGFkZGluZy10b3A6IDI3OXB4O1xuICAgIHBhZGRpbmctcmlnaHQ6IDMwcHg7XG4gICAgZm9udC1zaXplOiAxNHB4O1xuICAgIGNvbG9yOiAjNGU1NDVlO1xuICAgIGxldHRlci1zcGFjaW5nOiAtMC4wMmVtO1xuICAgIG1heC13aWR0aDogNTI2cHg7IH1cbiAgI3BhZ2UtZ28tcHdhLWFyY2hpdGVjdHMtZ3VpZGUgbWFpbixcbiAgI3BhZ2UtZ28td2h5LWh5YnJpZCBtYWluIHtcbiAgICBtYXJnaW4tdG9wOiAtMjQwcHg7XG4gICAgcGFkZGluZy1ib3R0b206IDBweDtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGZsZXgtd3JhcDogd3JhcDtcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG4gICAgb3ZlcmZsb3c6IHZpc2libGU7IH1cbiAgICAjcGFnZS1nby1wd2EtYXJjaGl0ZWN0cy1ndWlkZSBtYWluOjpiZWZvcmUsICNwYWdlLWdvLXB3YS1hcmNoaXRlY3RzLWd1aWRlIG1haW46OmFmdGVyLFxuICAgICNwYWdlLWdvLXdoeS1oeWJyaWQgbWFpbjo6YmVmb3JlLFxuICAgICNwYWdlLWdvLXdoeS1oeWJyaWQgbWFpbjo6YWZ0ZXIge1xuICAgICAgZGlzcGxheTogbm9uZTsgfVxuICAgICNwYWdlLWdvLXB3YS1hcmNoaXRlY3RzLWd1aWRlIG1haW4gLmxnLFxuICAgICNwYWdlLWdvLXdoeS1oeWJyaWQgbWFpbiAubGcge1xuICAgICAgY29sb3I6ICM2ZTdmOTk7XG4gICAgICBmb250LXNpemU6IDE4cHg7XG4gICAgICBsaW5lLWhlaWdodDogMzZweDtcbiAgICAgIHBlcnNwZWN0aXZlOiA2MDBweDtcbiAgICAgIG1hcmdpbi1ib3R0b206IDQ4cHg7IH1cbiAgICAgICNwYWdlLWdvLXB3YS1hcmNoaXRlY3RzLWd1aWRlIG1haW4gLmxnOjpiZWZvcmUsXG4gICAgICAjcGFnZS1nby13aHktaHlicmlkIG1haW4gLmxnOjpiZWZvcmUge1xuICAgICAgICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXCIvaW1nL2FydGljbGVzL3B3YS1jb3Zlci10aXRsZS5wbmdcIiksIHVybChcIi9pbWcvYXJ0aWNsZXMvcHdhLWNvdmVyLWJnLnBuZ1wiKSwgbGluZWFyLWdyYWRpZW50KDYwZGVnLCAjNzNjNWZmIDAsICMzODgwZmYgMTAwJSk7XG4gICAgICAgIGJhY2tncm91bmQtc2l6ZTogNjQlLCAxMDAlLCAxMDAlO1xuICAgICAgICBiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0LCByZXBlYXQsIHJlcGVhdDtcbiAgICAgICAgYmFja2dyb3VuZC1wb3NpdGlvbjogMjAlIDEyJSwgNTAlIDUwJSwgNTAlIDUwJTtcbiAgICAgICAgaGVpZ2h0OiAyODFweDtcbiAgICAgICAgd2lkdGg6IDE4NnB4O1xuICAgICAgICBjb250ZW50OiAnJztcbiAgICAgICAgZmxvYXQ6IGxlZnQ7XG4gICAgICAgIG1hcmdpbi1sZWZ0OiA2cHg7XG4gICAgICAgIG1hcmdpbi1yaWdodDogNjFweDtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogOHB4O1xuICAgICAgICB0cmFuc2Zvcm06IHJvdGF0ZVkoMTJkZWcpO1xuICAgICAgICBtYXJnaW4tdG9wOiAtNjRweDtcbiAgICAgICAgbWFyZ2luLWJvdHRvbTogMTJweDtcbiAgICAgICAgYm94LXNoYWRvdzogMCAycHggMTZweCByZ2JhKDAsIDAsIDAsIDAuMik7IH1cbiAgICAjcGFnZS1nby1wd2EtYXJjaGl0ZWN0cy1ndWlkZSBtYWluIHAsXG4gICAgI3BhZ2UtZ28td2h5LWh5YnJpZCBtYWluIHAge1xuICAgICAgbGV0dGVyLXNwYWNpbmc6IC0uMDJlbTtcbiAgICAgIGxpbmUtaGVpZ2h0OiAyZW07XG4gICAgICBmb250LXNpemU6IDE2cHg7XG4gICAgICBtYXJnaW4tYm90dG9tOiAxNnB4OyB9XG4gICAgI3BhZ2UtZ28tcHdhLWFyY2hpdGVjdHMtZ3VpZGUgbWFpbiB1bCxcbiAgICAjcGFnZS1nby13aHktaHlicmlkIG1haW4gdWwge1xuICAgICAgbGlzdC1zdHlsZS10eXBlOiBub25lO1xuICAgICAgcGFkZGluZzogMDtcbiAgICAgIG1hcmdpbjogMCAwIDQ2cHg7IH1cbiAgICAjcGFnZS1nby1wd2EtYXJjaGl0ZWN0cy1ndWlkZSBtYWluIGxpLFxuICAgICNwYWdlLWdvLXdoeS1oeWJyaWQgbWFpbiBsaSB7XG4gICAgICBwYWRkaW5nOiAwcHggMCAwIDIxcHg7XG4gICAgICBmb250LXNpemU6IDE2cHg7XG4gICAgICBsaW5lLWhlaWdodDogMzJweDtcbiAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgIGxldHRlci1zcGFjaW5nOiAtLjAyMWVtOyB9XG4gICAgICAjcGFnZS1nby1wd2EtYXJjaGl0ZWN0cy1ndWlkZSBtYWluIGxpIHN0cm9uZyxcbiAgICAgICNwYWdlLWdvLXdoeS1oeWJyaWQgbWFpbiBsaSBzdHJvbmcge1xuICAgICAgICBmb250LXdlaWdodDogNTAwOyB9XG4gICAgICAjcGFnZS1nby1wd2EtYXJjaGl0ZWN0cy1ndWlkZSBtYWluIGxpOmJlZm9yZSxcbiAgICAgICNwYWdlLWdvLXdoeS1oeWJyaWQgbWFpbiBsaTpiZWZvcmUge1xuICAgICAgICBjb250ZW50OiAn4oCiJztcbiAgICAgICAgb3BhY2l0eTogMC44O1xuICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgIGxlZnQ6IDdweDsgfVxuICAjcGFnZS1nby1wd2EtYXJjaGl0ZWN0cy1ndWlkZSAuc2lnbnVwLWZvcm0sXG4gICNwYWdlLWdvLXB3YS1hcmNoaXRlY3RzLWd1aWRlIC50aGFuay15b3UgYXNpZGUsXG4gICNwYWdlLWdvLXdoeS1oeWJyaWQgLnNpZ251cC1mb3JtLFxuICAjcGFnZS1nby13aHktaHlicmlkIC50aGFuay15b3UgYXNpZGUge1xuICAgIHBhZGRpbmc6IDQycHggNDhweCA0OHB4O1xuICAgIGJhY2tncm91bmQ6IHdoaXRlO1xuICAgIGJveC1zaGFkb3c6IDAgOHB4IDQ4cHggMHB4IHJnYmEoMCwgMCwgMCwgMC4yKTtcbiAgICBtYXgtd2lkdGg6IDUzNnB4O1xuICAgIGJvcmRlci1yYWRpdXM6IDEwcHg7IH1cbiAgICAjcGFnZS1nby1wd2EtYXJjaGl0ZWN0cy1ndWlkZSAuc2lnbnVwLWZvcm0gaDMsXG4gICAgI3BhZ2UtZ28tcHdhLWFyY2hpdGVjdHMtZ3VpZGUgLnRoYW5rLXlvdSBhc2lkZSBoMyxcbiAgICAjcGFnZS1nby13aHktaHlicmlkIC5zaWdudXAtZm9ybSBoMyxcbiAgICAjcGFnZS1nby13aHktaHlicmlkIC50aGFuay15b3UgYXNpZGUgaDMge1xuICAgICAgbWFyZ2luLXRvcDogMDtcbiAgICAgIG1hcmdpbi1ib3R0b206IDMwcHg7XG4gICAgICBmb250LXdlaWdodDogNzAwO1xuICAgICAgZm9udC1zaXplOiAyOHB4O1xuICAgICAgbGluZS1oZWlnaHQ6IDM2cHg7XG4gICAgICBsZXR0ZXItc3BhY2luZzogLTAuMDNlbTsgfVxuICAjcGFnZS1nby1wd2EtYXJjaGl0ZWN0cy1ndWlkZSAuY29tcGFueSxcbiAgI3BhZ2UtZ28td2h5LWh5YnJpZCAuY29tcGFueSB7XG4gICAgbWFyZ2luOiAyMzJweCAwIDY4cHg7XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgIHdpZHRoOiAxMDAlOyB9XG4gICAgI3BhZ2UtZ28tcHdhLWFyY2hpdGVjdHMtZ3VpZGUgLmNvbXBhbnkgaDIsXG4gICAgI3BhZ2UtZ28td2h5LWh5YnJpZCAuY29tcGFueSBoMiB7XG4gICAgICBjb2xvcjogIzdmOGZhYjtcbiAgICAgIG1hcmdpbjogMCBhdXRvO1xuICAgICAgZm9udC1zaXplOiAyOHB4O1xuICAgICAgbWF4LXdpZHRoOiA3NjBweDtcbiAgICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICAgIGxpbmUtaGVpZ2h0OiAxLjRlbTtcbiAgICAgIGxldHRlci1zcGFjaW5nOiAtLjA0ZW07XG4gICAgICBmb250LXdlaWdodDogNjAwOyB9XG4gICAgI3BhZ2UtZ28tcHdhLWFyY2hpdGVjdHMtZ3VpZGUgLmNvbXBhbnkgc3Ryb25nLFxuICAgICNwYWdlLWdvLXdoeS1oeWJyaWQgLmNvbXBhbnkgc3Ryb25nIHtcbiAgICAgIGNvbG9yOiAjMTMxOTI0O1xuICAgICAgZm9udC13ZWlnaHQ6IDcwMDsgfVxuICAgICNwYWdlLWdvLXB3YS1hcmNoaXRlY3RzLWd1aWRlIC5jb21wYW55IC5sb2dvcyxcbiAgICAjcGFnZS1nby13aHktaHlicmlkIC5jb21wYW55IC5sb2dvcyB7XG4gICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgZmxleC13cmFwOiB3cmFwO1xuICAgICAgbWFyZ2luLXRvcDogNTFweDtcbiAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtZXZlbmx5OyB9XG4gICAgICAjcGFnZS1nby1wd2EtYXJjaGl0ZWN0cy1ndWlkZSAuY29tcGFueSAubG9nb3M6OmJlZm9yZSwgI3BhZ2UtZ28tcHdhLWFyY2hpdGVjdHMtZ3VpZGUgLmNvbXBhbnkgLmxvZ29zOjphZnRlcixcbiAgICAgICNwYWdlLWdvLXdoeS1oeWJyaWQgLmNvbXBhbnkgLmxvZ29zOjpiZWZvcmUsXG4gICAgICAjcGFnZS1nby13aHktaHlicmlkIC5jb21wYW55IC5sb2dvczo6YWZ0ZXIge1xuICAgICAgICBiYWNrZ3JvdW5kOiB1cmwoXCIvaW1nL2hvbWVwYWdlL2VudGVycHJpc2UtbG9nb3MucG5nXCIpIDAgMCBuby1yZXBlYXQ7XG4gICAgICAgIGJhY2tncm91bmQtc2l6ZTogMTAwJTtcbiAgICAgICAgd2lkdGg6IDQ5NHB4O1xuICAgICAgICBoZWlnaHQ6IDQycHg7XG4gICAgICAgIGNvbnRlbnQ6ICcnO1xuICAgICAgICBtYXgtd2lkdGg6IDEwMCU7XG4gICAgICAgIG1hcmdpbi1ib3R0b206IDMycHg7XG4gICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsgfVxuICAgICAgI3BhZ2UtZ28tcHdhLWFyY2hpdGVjdHMtZ3VpZGUgLmNvbXBhbnkgLmxvZ29zOjphZnRlcixcbiAgICAgICNwYWdlLWdvLXdoeS1oeWJyaWQgLmNvbXBhbnkgLmxvZ29zOjphZnRlciB7XG4gICAgICAgIGJhY2tncm91bmQtcG9zaXRpb246IDAgYm90dG9tOyB9XG4gICNwYWdlLWdvLXB3YS1hcmNoaXRlY3RzLWd1aWRlIC5nZXQtc3RhcnRlZCxcbiAgI3BhZ2UtZ28td2h5LWh5YnJpZCAuZ2V0LXN0YXJ0ZWQge1xuICAgIGJhY2tncm91bmQ6ICNmMWY0Zjg7XG4gICAgb3ZlcmZsb3c6IGF1dG87IH1cbiAgICAjcGFnZS1nby1wd2EtYXJjaGl0ZWN0cy1ndWlkZSAuZ2V0LXN0YXJ0ZWQgLmNvbnRhaW5lcixcbiAgICAjcGFnZS1nby13aHktaHlicmlkIC5nZXQtc3RhcnRlZCAuY29udGFpbmVyIHtcbiAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgbWFyZ2luLWJvdHRvbTogMTEwcHg7XG4gICAgICBtYXJnaW4tdG9wOiAxMTBweDsgfVxuICAgICNwYWdlLWdvLXB3YS1hcmNoaXRlY3RzLWd1aWRlIC5nZXQtc3RhcnRlZCBoZ3JvdXAsXG4gICAgI3BhZ2UtZ28td2h5LWh5YnJpZCAuZ2V0LXN0YXJ0ZWQgaGdyb3VwIHtcbiAgICAgIGxldHRlci1zcGFjaW5nOiAtLjAyNWVtO1xuICAgICAgZmxleC1ncm93OiAxOyB9XG4gICAgI3BhZ2UtZ28tcHdhLWFyY2hpdGVjdHMtZ3VpZGUgLmdldC1zdGFydGVkIGgyLFxuICAgICNwYWdlLWdvLXdoeS1oeWJyaWQgLmdldC1zdGFydGVkIGgyIHtcbiAgICAgIGNvbG9yOiAjNGE4YmZjO1xuICAgICAgZm9udC1zaXplOiAyOHB4O1xuICAgICAgZm9udC13ZWlnaHQ6IDcwMDtcbiAgICAgIGxldHRlci1zcGFjaW5nOiBpbmhlcml0O1xuICAgICAgbWFyZ2luOiAwIDAgNXB4OyB9XG4gICAgI3BhZ2UtZ28tcHdhLWFyY2hpdGVjdHMtZ3VpZGUgLmdldC1zdGFydGVkIHAsXG4gICAgI3BhZ2UtZ28td2h5LWh5YnJpZCAuZ2V0LXN0YXJ0ZWQgcCB7XG4gICAgICBjb2xvcjogIzI0MjgyZTtcbiAgICAgIGZvbnQtc2l6ZTogMjBweDtcbiAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7XG4gICAgICBtYXJnaW46IDA7IH1cbiAgICAjcGFnZS1nby1wd2EtYXJjaGl0ZWN0cy1ndWlkZSAuZ2V0LXN0YXJ0ZWQgLmJ0bixcbiAgICAjcGFnZS1nby13aHktaHlicmlkIC5nZXQtc3RhcnRlZCAuYnRuIHtcbiAgICAgIGZvbnQtc2l6ZTogMTZweDtcbiAgICAgIGZvbnQtd2VpZ2h0OiA3MDA7IH1cbiAgQG1lZGlhIChtYXgtd2lkdGg6IDk5MXB4KSB7XG4gICAgI3BhZ2UtZ28tcHdhLWFyY2hpdGVjdHMtZ3VpZGUgLmJhbm5lciBoZ3JvdXAsXG4gICAgI3BhZ2UtZ28td2h5LWh5YnJpZCAuYmFubmVyIGhncm91cCB7XG4gICAgICBwYWRkaW5nLXJpZ2h0OiAxNXB4O1xuICAgICAgdGV4dC1hbGlnbjogY2VudGVyOyB9XG4gICAgI3BhZ2UtZ28tcHdhLWFyY2hpdGVjdHMtZ3VpZGUgaDEsXG4gICAgI3BhZ2UtZ28td2h5LWh5YnJpZCBoMSB7XG4gICAgICBtYXJnaW4tcmlnaHQ6IGF1dG87XG4gICAgICBtYXJnaW4tbGVmdDogYXV0bzsgfVxuICAgICNwYWdlLWdvLXB3YS1hcmNoaXRlY3RzLWd1aWRlIHAubGcsXG4gICAgI3BhZ2UtZ28td2h5LWh5YnJpZCBwLmxnIHtcbiAgICAgIG1hcmdpbi1yaWdodDogMjRweDsgfVxuICAgICNwYWdlLWdvLXB3YS1hcmNoaXRlY3RzLWd1aWRlIG1haW4sXG4gICAgI3BhZ2UtZ28td2h5LWh5YnJpZCBtYWluIHtcbiAgICAgIGRpc3BsYXk6IGJsb2NrOyB9XG4gICAgI3BhZ2UtZ28tcHdhLWFyY2hpdGVjdHMtZ3VpZGUgLmNvbnRlbnQsXG4gICAgI3BhZ2UtZ28td2h5LWh5YnJpZCAuY29udGVudCB7XG4gICAgICBtYXgtd2lkdGg6IDEwMCU7XG4gICAgICBwYWRkaW5nLXJpZ2h0OiAwOyB9XG4gICAgI3BhZ2UtZ28tcHdhLWFyY2hpdGVjdHMtZ3VpZGUgLnNpZ251cC1mb3JtLFxuICAgICNwYWdlLWdvLXdoeS1oeWJyaWQgLnNpZ251cC1mb3JtIHtcbiAgICAgIG1heC13aWR0aDogMTAwJTsgfVxuICAgICNwYWdlLWdvLXB3YS1hcmNoaXRlY3RzLWd1aWRlIC5jb21wYW55LFxuICAgICNwYWdlLWdvLXdoeS1oeWJyaWQgLmNvbXBhbnkge1xuICAgICAgbWFyZ2luLXRvcDogMTI4cHg7IH1cbiAgICAjcGFnZS1nby1wd2EtYXJjaGl0ZWN0cy1ndWlkZSAuZ2V0LXN0YXJ0ZWQgLmJ0biArIC5idG4sXG4gICAgI3BhZ2UtZ28td2h5LWh5YnJpZCAuZ2V0LXN0YXJ0ZWQgLmJ0biArIC5idG4ge1xuICAgICAgbWFyZ2luLXRvcDogOHB4OyB9IH1cbiAgI3BhZ2UtZ28tcHdhLWFyY2hpdGVjdHMtZ3VpZGUgLmJhbm5lciAudGhhbmsteW91LFxuICAjcGFnZS1nby13aHktaHlicmlkIC5iYW5uZXIgLnRoYW5rLXlvdSB7XG4gICAgbWluLWhlaWdodDogNDkwcHg7IH1cbiAgI3BhZ2UtZ28tcHdhLWFyY2hpdGVjdHMtZ3VpZGUgbWFpbi50aGFuay15b3UsXG4gICNwYWdlLWdvLXdoeS1oeWJyaWQgbWFpbi50aGFuay15b3Uge1xuICAgIG1hcmdpbi10b3A6IC0zNDBweDsgfVxuICAjcGFnZS1nby1wd2EtYXJjaGl0ZWN0cy1ndWlkZSAudGhhbmsteW91IGFzaWRlLFxuICAjcGFnZS1nby13aHktaHlicmlkIC50aGFuay15b3UgYXNpZGUge1xuICAgIG1hcmdpbi1yaWdodDogYXV0bztcbiAgICBtYXJnaW4tbGVmdDogYXV0bztcbiAgICBtYXgtd2lkdGg6IDUwMHB4OyB9XG4gICNwYWdlLWdvLXB3YS1hcmNoaXRlY3RzLWd1aWRlIC50aGFuay15b3UgcDo6YmVmb3JlLFxuICAjcGFnZS1nby13aHktaHlicmlkIC50aGFuay15b3UgcDo6YmVmb3JlIHtcbiAgICBjb250ZW50OiBub25lOyB9XG4gICNwYWdlLWdvLXB3YS1hcmNoaXRlY3RzLWd1aWRlIC50aGFuay15b3UgLmJ0bixcbiAgI3BhZ2UtZ28td2h5LWh5YnJpZCAudGhhbmsteW91IC5idG4ge1xuICAgIGRpc3BsYXk6IGJsb2NrOyB9XG4gICNwYWdlLWdvLXB3YS1hcmNoaXRlY3RzLWd1aWRlIC50aGFuay15b3UgcC5sZyxcbiAgI3BhZ2UtZ28td2h5LWh5YnJpZCAudGhhbmsteW91IHAubGcge1xuICAgIG1hcmdpbi1ib3R0b206IDA7IH1cbiAgI3BhZ2UtZ28tcHdhLWFyY2hpdGVjdHMtZ3VpZGUgLnRoYW5rLXlvdSAuYWxzbyxcbiAgI3BhZ2UtZ28td2h5LWh5YnJpZCAudGhhbmsteW91IC5hbHNvIHtcbiAgICBtYXJnaW4tdG9wOiAwO1xuICAgIG1hcmdpbi1ib3R0b206IDY0cHg7IH1cbiAgI3BhZ2UtZ28tcHdhLWFyY2hpdGVjdHMtZ3VpZGUgLnRoYW5rLXlvdSAuY29tcGFueSxcbiAgI3BhZ2UtZ28td2h5LWh5YnJpZCAudGhhbmsteW91IC5jb21wYW55IHtcbiAgICBtYXJnaW4tdG9wOiAxMjhweDsgfVxuXG4jcGFnZS1nby13aHktaHlicmlkIG1haW4gLmxnOjpiZWZvcmUge1xuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXCIvaW1nL2FydGljbGVzL3doeS1oeWJyaWQtY292ZXIuanBnXCIpO1xuICBiYWNrZ3JvdW5kLXNpemU6IDEwMCU7XG4gIGJhY2tncm91bmQtcG9zaXRpb246IDAgMDtcbiAgaGVpZ2h0OiAyNDJweDsgfVxuXG4jaW9uaWMtc2xpZGVyIHtcbiAgbWFyZ2luLXRvcDogLTcycHg7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICBtaW4taGVpZ2h0OiA4NjBweDtcbiAgcG9zaXRpb246IHJlbGF0aXZlOyB9XG4gICNpb25pYy1zbGlkZXIgW3Nsb3Q9XCJzbGlkZS0wXCJdIHtcbiAgICBkaXNwbGF5OiBibG9jazsgfVxuICAjaW9uaWMtc2xpZGVyIFtzbG90Xj1cInNsaWRlLVwiXSB7XG4gICAgcGFkZGluZy10b3A6IDEwMHB4O1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICB0b3A6IDA7XG4gICAgcmlnaHQ6IDA7XG4gICAgYm90dG9tOiAwO1xuICAgIGxlZnQ6IDA7XG4gICAgb3ZlcmZsb3c6IGhpZGRlbjsgfVxuICAgICNpb25pYy1zbGlkZXIgW3Nsb3RePVwic2xpZGUtXCJdIGhncm91cCB7XG4gICAgICBjb2xvcjogd2hpdGU7XG4gICAgICBtYXgtd2lkdGg6IDUwMHB4O1xuICAgICAgbWFyZ2luLXRvcDogMTNweDtcbiAgICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsgfVxuICAgICNpb25pYy1zbGlkZXIgW3Nsb3RePVwic2xpZGUtXCJdIGgxIHtcbiAgICAgIGZvbnQtc2l6ZTogNjRweDtcbiAgICAgIGxpbmUtaGVpZ2h0OiA3NHB4O1xuICAgICAgbWFyZ2luLWJvdHRvbTogMTZweDtcbiAgICAgIGxldHRlci1zcGFjaW5nOiAtLjAzZW07IH1cbiAgICAjaW9uaWMtc2xpZGVyIFtzbG90Xj1cInNsaWRlLVwiXSBwIHtcbiAgICAgIGZvbnQtc2l6ZTogMjRweDtcbiAgICAgIGxpbmUtaGVpZ2h0OiAzNnB4O1xuICAgICAgZm9udC1mYW1pbHk6IFwiRWluYVwiLCBcIkhlbHZldGljYSBOZXVlXCIsIEhlbHZldGljYSwgc2Fucy1zZXJpZjtcbiAgICAgIGxldHRlci1zcGFjaW5nOiAtMC4wM2VtO1xuICAgICAgY29sb3I6ICNlNGYxZmY7IH1cbiAgICAjaW9uaWMtc2xpZGVyIFtzbG90Xj1cInNsaWRlLVwiXSAuYnRuIHtcbiAgICAgIGZvbnQtc2l6ZTogMTVweDtcbiAgICAgIGZvbnQtd2VpZ2h0OiA3MDA7XG4gICAgICBtYXJnaW4tdG9wOiAxOHB4O1xuICAgICAgcGFkZGluZzogMjBweCAyMnB4O1xuICAgICAgbWFyZ2luLXJpZ2h0OiAtNHB4O1xuICAgICAgbGV0dGVyLXNwYWNpbmc6IC4xZW07XG4gICAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlOyB9XG4gICAgICAjaW9uaWMtc2xpZGVyIFtzbG90Xj1cInNsaWRlLVwiXSAuYnRuIGlvbi1pY29uIHtcbiAgICAgICAgZm9udC1zaXplOiAxNnB4O1xuICAgICAgICBtYXJnaW4tbGVmdDogLTRweDtcbiAgICAgICAgdmVydGljYWwtYWxpZ246IC0ycHg7XG4gICAgICAgIHdpZHRoOiAxNnB4O1xuICAgICAgICBoZWlnaHQ6IDE2cHg7XG4gICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsgfVxuICAgICNpb25pYy1zbGlkZXIgW3Nsb3RePVwic2xpZGUtXCJdIC52ZXJzaW9uLXRleHQge1xuICAgICAgY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC42KTtcbiAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7XG4gICAgICBmb250LXNpemU6IDExcHg7IH1cbiAgICAgICNpb25pYy1zbGlkZXIgW3Nsb3RePVwic2xpZGUtXCJdIC52ZXJzaW9uLXRleHQgYSB7XG4gICAgICAgIGNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNik7IH1cbiAgICAgICAgI2lvbmljLXNsaWRlciBbc2xvdF49XCJzbGlkZS1cIl0gLnZlcnNpb24tdGV4dCBhOmhvdmVyIHtcbiAgICAgICAgICBjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjgpO1xuICAgICAgICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTsgfVxuICAjaW9uaWMtc2xpZGVyICNzbGlkZS1saW1pdGxlc3Mge1xuICAgIGJhY2tncm91bmQ6ICM1NDhmZmYgbGluZWFyLWdyYWRpZW50KHRvIHJpZ2h0LCAjNDI3OGZmLCAjNjdhN2ZmKTtcbiAgICBiYWNrZ3JvdW5kLXNpemU6IDEwMCU7IH1cbiAgICAjaW9uaWMtc2xpZGVyICNzbGlkZS1saW1pdGxlc3MgLmJ0biB7XG4gICAgICBjb2xvcjogIzM4ODBmZjsgfVxuICAgICNpb25pYy1zbGlkZXIgI3NsaWRlLWxpbWl0bGVzcyB1bCB7XG4gICAgICBwYWRkaW5nOiAwO1xuICAgICAgbWFyZ2luLXRvcDogOHB4O1xuICAgICAgbGlzdC1zdHlsZTogbm9uZTsgfVxuICAgICNpb25pYy1zbGlkZXIgI3NsaWRlLWxpbWl0bGVzcyBsaSB7XG4gICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgICBtYXJnaW4tcmlnaHQ6IDhweDsgfVxuICAgICAgI2lvbmljLXNsaWRlciAjc2xpZGUtbGltaXRsZXNzIGxpOmxhc3QtY2hpbGQge1xuICAgICAgICBtYXJnaW4tcmlnaHQ6IDA7IH1cbiAgICAgICAgI2lvbmljLXNsaWRlciAjc2xpZGUtbGltaXRsZXNzIGxpOmxhc3QtY2hpbGQgaW1nIHtcbiAgICAgICAgICBoZWlnaHQ6IDIzcHg7XG4gICAgICAgICAgdmVydGljYWwtYWxpZ246IC04cHg7IH1cbiAgICAgICNpb25pYy1zbGlkZXIgI3NsaWRlLWxpbWl0bGVzcyBsaSBpbWcge1xuICAgICAgICBoZWlnaHQ6IDEzcHg7XG4gICAgICAgIG9wYWNpdHk6IC42OyB9XG4gICAgI2lvbmljLXNsaWRlciAjc2xpZGUtbGltaXRsZXNzIC5ncmFwaGljcyB7XG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICBib3R0b206IDA7XG4gICAgICB3aWR0aDogMTAwJTtcbiAgICAgIGxlZnQ6IDA7XG4gICAgICBwYWRkaW5nOiAwO1xuICAgICAgbWFyZ2luOiAwOyB9XG4gICAgICAjaW9uaWMtc2xpZGVyICNzbGlkZS1saW1pdGxlc3MgLmdyYXBoaWNzIGxpIHtcbiAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICBvcGFjaXR5OiAwO1xuICAgICAgICBhbmltYXRpb246IGZhZGVJblVwIDFzIGVhc2UgZm9yd2FyZHM7IH1cbiAgICAgICAgI2lvbmljLXNsaWRlciAjc2xpZGUtbGltaXRsZXNzIC5ncmFwaGljcyBsaS5pcGhvbmUteCB7XG4gICAgICAgICAgYmFja2dyb3VuZDogdXJsKFwiL2ltZy9ob21lcGFnZS9oZXJvLWlwaG9uZS14LnBuZ1wiKSAwIDAgbm8tcmVwZWF0O1xuICAgICAgICAgIGJhY2tncm91bmQtc2l6ZTogMTAwJTtcbiAgICAgICAgICBib3R0b206IC02M3B4O1xuICAgICAgICAgIGxlZnQ6IC0xOTFweDtcbiAgICAgICAgICB3aWR0aDogNDAwcHg7XG4gICAgICAgICAgaGVpZ2h0OiAzMDZweDtcbiAgICAgICAgICBhbmltYXRpb24tZGVsYXk6IC44czsgfVxuICAgICAgICAjaW9uaWMtc2xpZGVyICNzbGlkZS1saW1pdGxlc3MgLmdyYXBoaWNzIGxpLmlwaG9uZS14cy1tYXgge1xuICAgICAgICAgIGJhY2tncm91bmQ6IHVybChcIi9pbWcvaG9tZXBhZ2UvaGVyby1pcGhvbmUteHMtbWF4LnBuZ1wiKSAwIDAgbm8tcmVwZWF0O1xuICAgICAgICAgIGJhY2tncm91bmQtc2l6ZTogMTAwJTtcbiAgICAgICAgICBib3R0b206IC0zOXB4O1xuICAgICAgICAgIGxlZnQ6IDE3MHB4O1xuICAgICAgICAgIHdpZHRoOiA0OTBweDtcbiAgICAgICAgICBoZWlnaHQ6IDM3OHB4O1xuICAgICAgICAgIGFuaW1hdGlvbi1kZWxheTogLjlzOyB9XG4gICAgICAgICNpb25pYy1zbGlkZXIgI3NsaWRlLWxpbWl0bGVzcyAuZ3JhcGhpY3MgbGkucGl4ZWwtMyB7XG4gICAgICAgICAgYmFja2dyb3VuZDogdXJsKFwiL2ltZy9ob21lcGFnZS9oZXJvLWdvb2dsZS1waXhlbDMucG5nXCIpIDAgMCBuby1yZXBlYXQ7XG4gICAgICAgICAgYmFja2dyb3VuZC1zaXplOiAxMDAlO1xuICAgICAgICAgIGJvdHRvbTogLTQwcHg7XG4gICAgICAgICAgbGVmdDogNjA3cHg7XG4gICAgICAgICAgd2lkdGg6IDQ5MHB4O1xuICAgICAgICAgIGhlaWdodDogNDAwcHg7XG4gICAgICAgICAgYW5pbWF0aW9uLWRlbGF5OiAxczsgfVxuICAgICAgICAjaW9uaWMtc2xpZGVyICNzbGlkZS1saW1pdGxlc3MgLmdyYXBoaWNzIGxpLmdhbGF4eSB7XG4gICAgICAgICAgYmFja2dyb3VuZDogdXJsKFwiL2ltZy9ob21lcGFnZS9oZXJvLWFuZHJvaWQtZ2FsYXh5LnBuZ1wiKSAwIDAgbm8tcmVwZWF0O1xuICAgICAgICAgIGJhY2tncm91bmQtc2l6ZTogMTAwJTtcbiAgICAgICAgICBib3R0b206IC00MXB4O1xuICAgICAgICAgIGxlZnQ6IDEwNjNweDtcbiAgICAgICAgICB3aWR0aDogNDUwcHg7XG4gICAgICAgICAgaGVpZ2h0OiAzNTZweDtcbiAgICAgICAgICBhbmltYXRpb24tZGVsYXk6IDEuMXM7IH1cbiAgICAgICAgI2lvbmljLXNsaWRlciAjc2xpZGUtbGltaXRsZXNzIC5ncmFwaGljcyBsaS5pcGFkIHtcbiAgICAgICAgICBiYWNrZ3JvdW5kOiB1cmwoXCIvaW1nL2hvbWVwYWdlL2hlcm8taXBhZC5wbmdcIikgMCAwIG5vLXJlcGVhdDtcbiAgICAgICAgICBiYWNrZ3JvdW5kLXNpemU6IDEwMCU7XG4gICAgICAgICAgYm90dG9tOiAtNDRweDtcbiAgICAgICAgICBsZWZ0OiAxNDg0cHg7XG4gICAgICAgICAgd2lkdGg6IDYxMHB4O1xuICAgICAgICAgIGhlaWdodDogNTI0cHg7XG4gICAgICAgICAgYW5pbWF0aW9uLWRlbGF5OiAxLjJzOyB9XG4gICAgICAgICNpb25pYy1zbGlkZXIgI3NsaWRlLWxpbWl0bGVzcyAuZ3JhcGhpY3MgbGkubWFjYm9vayB7XG4gICAgICAgICAgYmFja2dyb3VuZDogdXJsKFwiL2ltZy9ob21lcGFnZS9oZXJvLW1hY2Jvb2sucG5nXCIpIDAgMCBuby1yZXBlYXQ7XG4gICAgICAgICAgYmFja2dyb3VuZC1zaXplOiAxMDAlO1xuICAgICAgICAgIGJvdHRvbTogLTYzcHg7XG4gICAgICAgICAgbGVmdDogMjA2MXB4O1xuICAgICAgICAgIHdpZHRoOiAxNDcwcHg7XG4gICAgICAgICAgaGVpZ2h0OiA1NzBweDtcbiAgICAgICAgICBhbmltYXRpb24tZGVsYXk6IDEuM3M7IH1cbiAgI2lvbmljLXNsaWRlciAjc2xpZGUtdjQge1xuICAgIGJhY2tncm91bmQ6ICMwMTA1MGM7IH1cbiAgICAjaW9uaWMtc2xpZGVyICNzbGlkZS12NDo6YmVmb3JlIHtcbiAgICAgIGJhY2tncm91bmQ6IHVybChcIi9pbWcvaG9tZXBhZ2UvYmctcGhvbmUucG5nXCIpIG5vLXJlcGVhdCA1MCUgNTAlO1xuICAgICAgYmFja2dyb3VuZC1zaXplOiBjb3ZlcjtcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgIHRvcDogMDtcbiAgICAgIHJpZ2h0OiAwO1xuICAgICAgYm90dG9tOiAwO1xuICAgICAgbGVmdDogMDtcbiAgICAgIG9wYWNpdHk6IDA7XG4gICAgICBjb250ZW50OiAnJzsgfVxuICAgICNpb25pYy1zbGlkZXIgI3NsaWRlLXY0IGhncm91cCB7XG4gICAgICBwYWRkaW5nLXRvcDogNThweDtcbiAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgIG1heC13aWR0aDogNjIwcHg7IH1cbiAgICAgICNpb25pYy1zbGlkZXIgI3NsaWRlLXY0IGhncm91cCBpbWcge1xuICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgICAgIHdpZHRoOiA0OHB4O1xuICAgICAgICBoZWlnaHQ6IDQ4cHg7IH1cbiAgICAgICNpb25pYy1zbGlkZXIgI3NsaWRlLXY0IGhncm91cCBoNCB7XG4gICAgICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XG4gICAgICAgIGxldHRlci1zcGFjaW5nOiAuMWVtO1xuICAgICAgICBmb250LWZhbWlseTogXCJSb2JvdG8gTW9ub1wiLCBNZW5sbywgTW9uYWNvLCBDb25zb2xhcywgXCJDb3VyaWVyIE5ld1wiLCBtb25vc3BhY2U7XG4gICAgICAgIGZvbnQtc2l6ZTogMTJweDtcbiAgICAgICAgZm9udC13ZWlnaHQ6IDQwMDtcbiAgICAgICAgbWFyZ2luLXRvcDogMTVweDtcbiAgICAgICAgbWFyZ2luLWJvdHRvbTogMzNweDsgfVxuICAgICAgI2lvbmljLXNsaWRlciAjc2xpZGUtdjQgaGdyb3VwIGgxIHtcbiAgICAgICAgbGV0dGVyLXNwYWNpbmc6IC0uMDJlbTsgfVxuICAgICAgI2lvbmljLXNsaWRlciAjc2xpZGUtdjQgaGdyb3VwIHAge1xuICAgICAgICBsaW5lLWhlaWdodDogMzJweDtcbiAgICAgICAgbWFyZ2luLXRvcDogMThweDsgfVxuICAgICAgI2lvbmljLXNsaWRlciAjc2xpZGUtdjQgaGdyb3VwIC5idG4ge1xuICAgICAgICBtYXJnaW4tdG9wOiAyN3B4O1xuICAgICAgICBsZXR0ZXItc3BhY2luZzogLjA4ZW07IH1cbiAgICAgICAgI2lvbmljLXNsaWRlciAjc2xpZGUtdjQgaGdyb3VwIC5idG4ud2hpdGUge1xuICAgICAgICAgIGNvbG9yOiAjMTMxYTI2O1xuICAgICAgICAgIG1hcmdpbi1yaWdodDogOHB4OyB9XG4gICAgICAgICNpb25pYy1zbGlkZXIgI3NsaWRlLXY0IGhncm91cCAuYnRuLmRhcmsge1xuICAgICAgICAgIGJhY2tncm91bmQ6ICMzNDNkNGQ7IH1cbiAgICAgICAgICAjaW9uaWMtc2xpZGVyICNzbGlkZS12NCBoZ3JvdXAgLmJ0bi5kYXJrOmhvdmVyIHtcbiAgICAgICAgICAgIGJhY2tncm91bmQ6ICMzZTQ5NWM7IH1cbiAgICAgICAgI2lvbmljLXNsaWRlciAjc2xpZGUtdjQgaGdyb3VwIC5idG4gaW9uLWljb24ge1xuICAgICAgICAgIHdpZHRoOiAxNnB4O1xuICAgICAgICAgIGhlaWdodDogMTZweDtcbiAgICAgICAgICBtYXJnaW4tbGVmdDogOHB4OyB9XG4gICAgI2lvbmljLXNsaWRlciAjc2xpZGUtdjQgLmZlYXR1cmVzIHtcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgIGJvdHRvbTogMzVweDtcbiAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgbGVmdDogMDsgfVxuICAgICAgI2lvbmljLXNsaWRlciAjc2xpZGUtdjQgLmZlYXR1cmVzIHVsIHtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAganVzdGlmeS1jb250ZW50OiBzdGFydDtcbiAgICAgICAgZmxleC13cmFwOiB3cmFwO1xuICAgICAgICBwYWRkaW5nLWxlZnQ6IDA7XG4gICAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcbiAgICAgICAgcGFkZGluZzogMDsgfVxuICAgICAgICAjaW9uaWMtc2xpZGVyICNzbGlkZS12NCAuZmVhdHVyZXMgdWwgbGkge1xuICAgICAgICAgIG1hcmdpbi1yaWdodDogMWVtO1xuICAgICAgICAgIGxpc3Qtc3R5bGU6IG5vbmU7IH1cbiAgICAgICAgI2lvbmljLXNsaWRlciAjc2xpZGUtdjQgLmZlYXR1cmVzIHVsOjpiZWZvcmUsICNpb25pYy1zbGlkZXIgI3NsaWRlLXY0IC5mZWF0dXJlcyB1bDo6YWZ0ZXIge1xuICAgICAgICAgIGRpc3BsYXk6IG5vbmU7IH1cbiAgICAgICNpb25pYy1zbGlkZXIgI3NsaWRlLXY0IC5mZWF0dXJlcyBsaSB7XG4gICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgICAgcGFkZGluZy10b3A6IDY1cHg7XG4gICAgICAgIHdpZHRoOiAxNDVweDtcbiAgICAgICAgY29sb3I6ICM4YTk0YTM7XG4gICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICAgICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XG4gICAgICAgIGZvbnQtc2l6ZTogMTJweDtcbiAgICAgICAgbGluZS1oZWlnaHQ6IDIwcHg7XG4gICAgICAgIG1hcmdpbi1ib3R0b206IDMycHg7XG4gICAgICAgIG9wYWNpdHk6IDA7IH1cbiAgICAgICAgI2lvbmljLXNsaWRlciAjc2xpZGUtdjQgLmZlYXR1cmVzIGxpOjpiZWZvcmUge1xuICAgICAgICAgIGJhY2tncm91bmQ6IHVybChcIi9pbWcvaG9tZXBhZ2UvdjQtZmVhdHVyZS1pY29ucy5wbmdcIikgMCAwIG5vLXJlcGVhdDtcbiAgICAgICAgICBiYWNrZ3JvdW5kLXNpemU6IGNvdmVyO1xuICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgICB0b3A6IDA7XG4gICAgICAgICAgbGVmdDogY2FsYyg1MCUgLSAyNHB4KTtcbiAgICAgICAgICBoZWlnaHQ6IDQ4cHg7XG4gICAgICAgICAgd2lkdGg6IDQ4cHg7XG4gICAgICAgICAgY29udGVudDogJyc7IH1cbiAgICAgICAgI2lvbmljLXNsaWRlciAjc2xpZGUtdjQgLmZlYXR1cmVzIGxpLnBlcmZvcm1hbmNlOjpiZWZvcmUge1xuICAgICAgICAgIGJhY2tncm91bmQtcG9zaXRpb246IDAgMHB4OyB9XG4gICAgICAgICNpb25pYy1zbGlkZXIgI3NsaWRlLXY0IC5mZWF0dXJlcyBsaS50aGVtaW5nOjpiZWZvcmUge1xuICAgICAgICAgIGJhY2tncm91bmQtcG9zaXRpb246IDAgLTQ4cHg7IH1cbiAgICAgICAgI2lvbmljLXNsaWRlciAjc2xpZGUtdjQgLmZlYXR1cmVzIGxpLnN0YW5kYXJkczo6YmVmb3JlIHtcbiAgICAgICAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwIC05NnB4OyB9XG4gICAgICAgICNpb25pYy1zbGlkZXIgI3NsaWRlLXY0IC5mZWF0dXJlcyBsaS5jb21wYXRpYmxlOjpiZWZvcmUge1xuICAgICAgICAgIGJhY2tncm91bmQtcG9zaXRpb246IDAgLTE0NHB4OyB9XG4gICAgICAgICNpb25pYy1zbGlkZXIgI3NsaWRlLXY0IC5mZWF0dXJlcyBsaS5kb2NzOjpiZWZvcmUge1xuICAgICAgICAgIGJhY2tncm91bmQtcG9zaXRpb246IDAgLTE5MnB4OyB9XG4gICAgICBAbWVkaWEgKG1heC13aWR0aDogOTkxcHgpIHtcbiAgICAgICAgI2lvbmljLXNsaWRlciAjc2xpZGUtdjQgLmZlYXR1cmVzIHtcbiAgICAgICAgICBib3R0b206IDA7IH1cbiAgICAgICAgICAjaW9uaWMtc2xpZGVyICNzbGlkZS12NCAuZmVhdHVyZXMgdWwge1xuICAgICAgICAgICAgbWF4LXdpZHRoOiA2MDBweDtcbiAgICAgICAgICAgIG1hcmdpbjogMCBhdXRvO1xuICAgICAgICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1hcm91bmQ7IH0gfVxuICAgICAgQG1lZGlhIChtYXgtd2lkdGg6IDU3MHB4KSB7XG4gICAgICAgICNpb25pYy1zbGlkZXIgI3NsaWRlLXY0IC5mZWF0dXJlcyB7XG4gICAgICAgICAgZGlzcGxheTogbm9uZTsgfSB9XG4gICAgI2lvbmljLXNsaWRlciAjc2xpZGUtdjQ6OmJlZm9yZSB7XG4gICAgICBhbmltYXRpb246IGZhZGVJblVwIDEuNnMgLjhzIGVhc2UgZm9yd2FyZHM7IH1cbiAgICAjaW9uaWMtc2xpZGVyICNzbGlkZS12NCAuZmVhdHVyZXMgbGkge1xuICAgICAgYW5pbWF0aW9uOiBmYWRlSW5VcCAxcyAuMXMgZWFzZSBmb3J3YXJkczsgfVxuICAgICAgI2lvbmljLXNsaWRlciAjc2xpZGUtdjQgLmZlYXR1cmVzIGxpOm50aC1jaGlsZCgyKSB7XG4gICAgICAgIGFuaW1hdGlvbi1kZWxheTogLjJzOyB9XG4gICAgICAjaW9uaWMtc2xpZGVyICNzbGlkZS12NCAuZmVhdHVyZXMgbGk6bnRoLWNoaWxkKDMpIHtcbiAgICAgICAgYW5pbWF0aW9uLWRlbGF5OiAuM3M7IH1cbiAgICAgICNpb25pYy1zbGlkZXIgI3NsaWRlLXY0IC5mZWF0dXJlcyBsaTpudGgtY2hpbGQoNCkge1xuICAgICAgICBhbmltYXRpb24tZGVsYXk6IC40czsgfVxuICAgICAgI2lvbmljLXNsaWRlciAjc2xpZGUtdjQgLmZlYXR1cmVzIGxpOm50aC1jaGlsZCg1KSB7XG4gICAgICAgIGFuaW1hdGlvbi1kZWxheTogLjVzOyB9XG4gICNpb25pYy1zbGlkZXIgI3NsaWRlLW9uZS1hbnkge1xuICAgIGJhY2tncm91bmQ6IHdoaXRlO1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICBtaW4taGVpZ2h0OiA4NDBweDsgfVxuICAgICNpb25pYy1zbGlkZXIgI3NsaWRlLW9uZS1hbnkgLm5vdGlmaWNhdGlvbiB7XG4gICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgICBiYWNrZ3JvdW5kOiAjRjZGOEZCO1xuICAgICAgZm9udC1zaXplOiAxMXB4O1xuICAgICAgbGluZS1oZWlnaHQ6IDE2cHg7XG4gICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgICBsZXR0ZXItc3BhY2luZzogMC4xZW07XG4gICAgICBwYWRkaW5nOiA3cHggMTVweCA3cHg7IH1cbiAgICAgICNpb25pYy1zbGlkZXIgI3NsaWRlLW9uZS1hbnkgLm5vdGlmaWNhdGlvbiBzdHJvbmcge1xuICAgICAgICBjb2xvcjogIzFBMjMyRjsgfVxuICAgICAgI2lvbmljLXNsaWRlciAjc2xpZGUtb25lLWFueSAubm90aWZpY2F0aW9uOjphZnRlciB7XG4gICAgICAgIGNvbnRlbnQ6ICc+JzsgfVxuICAgICAgQG1lZGlhIChtYXgtd2lkdGg6IDc2N3B4KSB7XG4gICAgICAgICNpb25pYy1zbGlkZXIgI3NsaWRlLW9uZS1hbnkgLm5vdGlmaWNhdGlvbiB7XG4gICAgICAgICAgZGlzcGxheTogbm9uZTsgfSB9XG4gICAgI2lvbmljLXNsaWRlciAjc2xpZGUtb25lLWFueSBoZ3JvdXAge1xuICAgICAgbWF4LXdpZHRoOiA0NjRweDtcbiAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgbWFyZ2luLXRvcDogNTZweDtcbiAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgIHotaW5kZXg6IDE7IH1cbiAgICAgICNpb25pYy1zbGlkZXIgI3NsaWRlLW9uZS1hbnkgaGdyb3VwIGgxIHtcbiAgICAgICAgZm9udC1zaXplOiA2NHB4O1xuICAgICAgICBsaW5lLWhlaWdodDogNjRweDtcbiAgICAgICAgY29sb3I6ICMwMjA4MTQ7XG4gICAgICAgIGxldHRlci1zcGFjaW5nOiAtLjA0ZW07XG4gICAgICAgIG1hcmdpbi1ib3R0b206IDdweDsgfVxuICAgICAgI2lvbmljLXNsaWRlciAjc2xpZGUtb25lLWFueSBoZ3JvdXAgcCB7XG4gICAgICAgIGZvbnQtc2l6ZTogMjJweDtcbiAgICAgICAgbGluZS1oZWlnaHQ6IDM3cHg7XG4gICAgICAgIGNvbG9yOiByZ2JhKDkxLCAxMTIsIDEzOSwgMC45KTtcbiAgICAgICAgbGV0dGVyLXNwYWNpbmc6IC0uMDRlbTsgfVxuICAgICAgI2lvbmljLXNsaWRlciAjc2xpZGUtb25lLWFueSBoZ3JvdXAgLmJ0biB7XG4gICAgICAgIGJhY2tncm91bmQ6ICM0RDhERkY7XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDEwcHg7XG4gICAgICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XG4gICAgICAgIG1hcmdpbi10b3A6IDEycHg7XG4gICAgICAgIGZvbnQtc2l6ZTogMTVweDtcbiAgICAgICAgbGluZS1oZWlnaHQ6IDIxcHg7XG4gICAgICAgIHBhZGRpbmc6IDE2cHggMTZweCAxMnB4O1xuICAgICAgICBsZXR0ZXItc3BhY2luZzogMC4wOGVtOyB9XG4gICAgICAgICNpb25pYy1zbGlkZXIgI3NsaWRlLW9uZS1hbnkgaGdyb3VwIC5idG46aG92ZXIge1xuICAgICAgICAgIGJhY2tncm91bmQ6ICM2NzlkZmY7IH1cbiAgICAgICAgI2lvbmljLXNsaWRlciAjc2xpZGUtb25lLWFueSBoZ3JvdXAgLmJ0bjphY3RpdmUge1xuICAgICAgICAgIGJhY2tncm91bmQ6ICM0RDhERkY7IH1cbiAgICAgICAgI2lvbmljLXNsaWRlciAjc2xpZGUtb25lLWFueSBoZ3JvdXAgLmJ0biBpbWcge1xuICAgICAgICAgIG1hcmdpbi1sZWZ0OiAycHg7XG4gICAgICAgICAgdmVydGljYWwtYWxpZ246IDA7XG4gICAgICAgICAgbWFyZ2luLXJpZ2h0OiAycHg7IH1cbiAgICAgICNpb25pYy1zbGlkZXIgI3NsaWRlLW9uZS1hbnkgaGdyb3VwIHNtYWxsIHtcbiAgICAgICAgZm9udC1zaXplOiAxMXB4O1xuICAgICAgICBsaW5lLWhlaWdodDogMjFweDtcbiAgICAgICAgbGV0dGVyLXNwYWNpbmc6IC0wLjAyZW07XG4gICAgICAgIGNvbG9yOiAjQjJCRUNEOyB9XG4gICAgICAgICNpb25pYy1zbGlkZXIgI3NsaWRlLW9uZS1hbnkgaGdyb3VwIHNtYWxsIGEge1xuICAgICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgICAgICBjb2xvcjogIzkyYTBiMzsgfVxuICAgICAgICAgICNpb25pYy1zbGlkZXIgI3NsaWRlLW9uZS1hbnkgaGdyb3VwIHNtYWxsIGE6OmFmdGVyIHtcbiAgICAgICAgICAgIGNvbnRlbnQ6ICcnO1xuICAgICAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICAgICAgbGVmdDogMDtcbiAgICAgICAgICAgIHJpZ2h0OiAwO1xuICAgICAgICAgICAgYm90dG9tOiAtMnB4O1xuICAgICAgICAgICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNkZWUzZWE7IH1cbiAgICAgICAgICAjaW9uaWMtc2xpZGVyICNzbGlkZS1vbmUtYW55IGhncm91cCBzbWFsbCBhOmhvdmVyIHtcbiAgICAgICAgICAgIGNvbG9yOiAjNGE4YmZjOyB9XG4gICAgICAgICAgICAjaW9uaWMtc2xpZGVyICNzbGlkZS1vbmUtYW55IGhncm91cCBzbWFsbCBhOmhvdmVyOjphZnRlciB7XG4gICAgICAgICAgICAgIGJvcmRlci1ib3R0b20tY29sb3I6ICM0YThiZmM7IH1cbiAgICAgIEBtZWRpYSAobWF4LXdpZHRoOiA3NjdweCkge1xuICAgICAgICAjaW9uaWMtc2xpZGVyICNzbGlkZS1vbmUtYW55IGhncm91cCB7XG4gICAgICAgICAgbWF4LXdpZHRoOiAxMDAlO1xuICAgICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICAgICAgICBtYXJnaW4tdG9wOiA2NHB4OyB9IH1cbiAgICAjaW9uaWMtc2xpZGVyICNzbGlkZS1vbmUtYW55IC5ncmFwaGljIHtcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgIHJpZ2h0OiAyMHB4O1xuICAgICAgdG9wOiAxMjBweDtcbiAgICAgIGhlaWdodDogNTYzcHg7XG4gICAgICB3aWR0aDogNTkwcHg7IH1cbiAgICAgIEBtZWRpYSAobWF4LXdpZHRoOiAxMjE5cHgpIHtcbiAgICAgICAgI2lvbmljLXNsaWRlciAjc2xpZGUtb25lLWFueSAuZ3JhcGhpYyB7XG4gICAgICAgICAgdG9wOiAxMjhweDtcbiAgICAgICAgICByaWdodDogLTY0cHg7IH0gfVxuICAgICAgQG1lZGlhIChtYXgtd2lkdGg6IDk5MXB4KSB7XG4gICAgICAgICNpb25pYy1zbGlkZXIgI3NsaWRlLW9uZS1hbnkgLmdyYXBoaWMge1xuICAgICAgICAgIHdpZHRoOiAzMDJweDtcbiAgICAgICAgICBoZWlnaHQ6IGF1dG87XG4gICAgICAgICAgdG9wOiAxODBweDsgfSB9XG4gICAgICBAbWVkaWEgKG1heC13aWR0aDogNzY3cHgpIHtcbiAgICAgICAgI2lvbmljLXNsaWRlciAjc2xpZGUtb25lLWFueSAuZ3JhcGhpYyB7XG4gICAgICAgICAgZGlzcGxheTogbm9uZTsgfSB9XG4gICAgI2lvbmljLXNsaWRlciAjc2xpZGUtb25lLWFueSAuc3RhdHMge1xuICAgICAgcGFkZGluZzogMDtcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgIGJvdHRvbTogMjFweDtcbiAgICAgIGxlZnQ6IDA7XG4gICAgICBsaXN0LXN0eWxlOiBub25lO1xuICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgIGZsZXgtd3JhcDogd3JhcDsgfVxuICAgICAgI2lvbmljLXNsaWRlciAjc2xpZGUtb25lLWFueSAuc3RhdHMgYSB7XG4gICAgICAgIGZvbnQtc2l6ZTogMTRweDtcbiAgICAgICAgbGluZS1oZWlnaHQ6IDE3cHg7XG4gICAgICAgIGxldHRlci1zcGFjaW5nOiAtMC4wMmVtO1xuICAgICAgICBjb2xvcjogIzkyQTFCMztcbiAgICAgICAgcGFkZGluZzogMCAxOHB4O1xuICAgICAgICB0cmFuc2l0aW9uOiAuM3MgY29sb3I7IH1cbiAgICAgICAgI2lvbmljLXNsaWRlciAjc2xpZGUtb25lLWFueSAuc3RhdHMgYSBzdmcge1xuICAgICAgICAgIHZlcnRpY2FsLWFsaWduOiAtM3B4OyB9XG4gICAgICAgICAgI2lvbmljLXNsaWRlciAjc2xpZGUtb25lLWFueSAuc3RhdHMgYSBzdmcgcGF0aCB7XG4gICAgICAgICAgICB0cmFuc2l0aW9uOiAuM3MgZmlsbDsgfVxuICAgICAgICAjaW9uaWMtc2xpZGVyICNzbGlkZS1vbmUtYW55IC5zdGF0cyBhOmhvdmVyIHtcbiAgICAgICAgICBjb2xvcjogIzc0ODc5ZTsgfVxuICAgICAgICAgICNpb25pYy1zbGlkZXIgI3NsaWRlLW9uZS1hbnkgLnN0YXRzIGE6aG92ZXIgc3ZnIHBhdGgge1xuICAgICAgICAgICAgZmlsbDogIzc0ODc5ZTsgfVxuICAgICAgQG1lZGlhIChtYXgtd2lkdGg6IDc2N3B4KSB7XG4gICAgICAgICNpb25pYy1zbGlkZXIgI3NsaWRlLW9uZS1hbnkgLnN0YXRzIHtcbiAgICAgICAgICBsZWZ0OiBjYWxjKDUwJSAtIDE0MHB4KTsgfSB9XG4gICAgI2lvbmljLXNsaWRlciAjc2xpZGUtb25lLWFueSBpb25pYy1uZXdzbGV0dGVyLXNpZ251cCB7XG4gICAgICB3aWR0aDogNDAwcHg7XG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICBib3R0b206IDI5cHg7XG4gICAgICByaWdodDogMjBweDtcbiAgICAgIG1heC13aWR0aDogY2FsYygxMDAlIC0gMzBweCk7IH1cbiAgICAgIEBtZWRpYSAobWF4LXdpZHRoOiA3NjdweCkge1xuICAgICAgICAjaW9uaWMtc2xpZGVyICNzbGlkZS1vbmUtYW55IGlvbmljLW5ld3NsZXR0ZXItc2lnbnVwIHtcbiAgICAgICAgICBib3R0b206IC0yNnB4O1xuICAgICAgICAgIHJpZ2h0OiBhdXRvO1xuICAgICAgICAgIGxlZnQ6IGNhbGMoNTAlIC0gMjAwcHgpOyB9IH1cbiAgICAgIEBtZWRpYSAobWF4LXdpZHRoOiA0NjBweCkge1xuICAgICAgICAjaW9uaWMtc2xpZGVyICNzbGlkZS1vbmUtYW55IGlvbmljLW5ld3NsZXR0ZXItc2lnbnVwIHtcbiAgICAgICAgICBsZWZ0OiAxNXB4OyB9IH1cbiAgICBAbWVkaWEgKG1heC13aWR0aDogOTkxcHgpIHtcbiAgICAgICNpb25pYy1zbGlkZXIgI3NsaWRlLW9uZS1hbnkge1xuICAgICAgICBwYWRkaW5nLXRvcDogMTAwcHg7XG4gICAgICAgIHBhZGRpbmctYm90dG9tOiAxMDBweDtcbiAgICAgICAgbWluLWhlaWdodDogMDsgfSB9XG4gICAgQG1lZGlhIChtYXgtd2lkdGg6IDc2N3B4KSB7XG4gICAgICAjaW9uaWMtc2xpZGVyICNzbGlkZS1vbmUtYW55IHtcbiAgICAgICAgcGFkZGluZy10b3A6IDEwMHB4O1xuICAgICAgICBwYWRkaW5nLWJvdHRvbTogMTAwcHg7XG4gICAgICAgIG1pbi1oZWlnaHQ6IDA7IH0gfVxuICBAbWVkaWEgKG1heC13aWR0aDogOTkxcHgpIHtcbiAgICAjaW9uaWMtc2xpZGVyIHtcbiAgICAgIG1pbi1oZWlnaHQ6IDA7IH0gfVxuXG4jcGFnZS1ob21lICN1c2VkLWJ5IHtcbiAgYm9yZGVyLXRvcDogMXB4ICNFRkYzRjggc29saWQ7XG4gIHBhZGRpbmctdG9wOiA2MHB4O1xuICBwYWRkaW5nLWJvdHRvbTogNThweDtcbiAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNFRkYzRjg7IH1cbiAgI3BhZ2UtaG9tZSAjdXNlZC1ieSAuY29udGFpbmVyIHtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgICBtYXgtd2lkdGg6IDk1MHB4OyB9XG4gICAgQG1lZGlhIChtYXgtd2lkdGg6IDk5MXB4KSB7XG4gICAgICAjcGFnZS1ob21lICN1c2VkLWJ5IC5jb250YWluZXIge1xuICAgICAgICB3aWR0aDogMTAwJTsgfSB9XG4gIEBtZWRpYSAobWF4LXdpZHRoOiA5OTFweCkge1xuICAgICNwYWdlLWhvbWUgI3VzZWQtYnkge1xuICAgICAgZGlzcGxheTogbm9uZTsgfSB9XG5cbiNwYWdlLWhvbWUgc2VjdGlvbiB7XG4gIHBhZGRpbmctdG9wOiAxNzBweDtcbiAgbGluZS1oZWlnaHQ6IDEuNzVlbTtcbiAgcGFkZGluZy1ib3R0b206IDE3MHB4O1xuICBwb3NpdGlvbjogcmVsYXRpdmU7IH1cbiAgI3BhZ2UtaG9tZSBzZWN0aW9uLmNlbnRlciB7XG4gICAgdGV4dC1hbGlnbjogY2VudGVyOyB9XG4gICNwYWdlLWhvbWUgc2VjdGlvbi5sZWZ0LCAjcGFnZS1ob21lIHNlY3Rpb24ucmlnaHQge1xuICAgIGRpc3BsYXk6IGZsZXg7IH1cbiAgICAjcGFnZS1ob21lIHNlY3Rpb24ubGVmdCAuY29udGVudCwgI3BhZ2UtaG9tZSBzZWN0aW9uLnJpZ2h0IC5jb250ZW50IHtcbiAgICAgIHdpZHRoOiA0NzBweDsgfVxuICAjcGFnZS1ob21lIHNlY3Rpb24ucmlnaHQgLmNvbnRlbnQge1xuICAgIG1hcmdpbi1sZWZ0OiBhdXRvOyB9XG4gICNwYWdlLWhvbWUgc2VjdGlvbiBoMiB7XG4gICAgZm9udC1zaXplOiA0N3B4O1xuICAgIG1hcmdpbi1ib3R0b206IDE1cHg7XG4gICAgbGV0dGVyLXNwYWNpbmc6IC0uMDJlbTtcbiAgICBjb2xvcjogIzBkMTIxYzsgfVxuICAjcGFnZS1ob21lIHNlY3Rpb24gaDMge1xuICAgIGZvbnQtc2l6ZTogMzVweDtcbiAgICBsZXR0ZXItc3BhY2luZzogLTAuMDE2ZW07IH1cbiAgI3BhZ2UtaG9tZSBzZWN0aW9uIGg0IHtcbiAgICBmb250LXNpemU6IDEycHg7XG4gICAgY29sb3I6ICM4MDhmYTc7XG4gICAgbGV0dGVyLXNwYWNpbmc6IC4xNGVtO1xuICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XG4gICAgZm9udC1mYW1pbHk6IFwiUm9ib3RvIE1vbm9cIiwgTWVubG8sIE1vbmFjbywgQ29uc29sYXMsIFwiQ291cmllciBOZXdcIiwgbW9ub3NwYWNlOyB9XG4gICAgI3BhZ2UtaG9tZSBzZWN0aW9uIGg0ICsgaDIge1xuICAgICAgbWFyZ2luLXRvcDogMzZweDsgfVxuICAjcGFnZS1ob21lIHNlY3Rpb24gaDUge1xuICAgIGZvbnQtc2l6ZTogMjBweDtcbiAgICBtYXJnaW4tYm90dG9tOiAxNnB4O1xuICAgIGZvbnQtd2VpZ2h0OiA2MDA7IH1cbiAgI3BhZ2UtaG9tZSBzZWN0aW9uIHAge1xuICAgIGZvbnQtc2l6ZTogMTZweDtcbiAgICBjb2xvcjogIzhjOWJiOTtcbiAgICBtYXJnaW4tYm90dG9tOiA4cHg7XG4gICAgbGluZS1oZWlnaHQ6IDEuNzhlbTtcbiAgICBsZXR0ZXItc3BhY2luZzogLS4wMjhlbTsgfVxuICAjcGFnZS1ob21lIHNlY3Rpb24gaGdyb3VwIHAsXG4gICNwYWdlLWhvbWUgc2VjdGlvbiBwLmxnIHtcbiAgICBjb2xvcjogIzU5NmE4OTtcbiAgICBmb250LXNpemU6IDIycHg7XG4gICAgbGluZS1oZWlnaHQ6IDM2cHg7XG4gICAgbWFyZ2luLWJvdHRvbTogMjNweDtcbiAgICBsZXR0ZXItc3BhY2luZzogLS4wMmVtO1xuICAgIGZvbnQtZmFtaWx5OiBcIkVpbmFcIiwgXCJIZWx2ZXRpY2EgTmV1ZVwiLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7IH1cbiAgICAjcGFnZS1ob21lIHNlY3Rpb24gaGdyb3VwIHAgc3Ryb25nLFxuICAgICNwYWdlLWhvbWUgc2VjdGlvbiBwLmxnIHN0cm9uZyB7XG4gICAgICBmb250LXdlaWdodDogNjAwOyB9XG4gICNwYWdlLWhvbWUgc2VjdGlvbiAuY3RhIHtcbiAgICBmb250LXNpemU6IDIwcHg7XG4gICAgbWFyZ2luLXRvcDogMTFweDtcbiAgICBwYWRkaW5nLXRvcDogMDtcbiAgICBjb2xvcjogIzVhOThmZjtcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIGJhY2tncm91bmQ6IG5vbmU7XG4gICAgbGV0dGVyLXNwYWNpbmc6IC0uMDJlbTtcbiAgICBmb250LXdlaWdodDogNjAwO1xuICAgIGZvbnQtZmFtaWx5OiBcIkVpbmFcIiwgXCJIZWx2ZXRpY2EgTmV1ZVwiLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIHRyYW5zaXRpb246IC4zcyBvcGFjaXR5OyB9XG4gICAgI3BhZ2UtaG9tZSBzZWN0aW9uIC5jdGE6aG92ZXIge1xuICAgICAgb3BhY2l0eTogLjY7IH1cbiAgICAjcGFnZS1ob21lIHNlY3Rpb24gLmN0YTpob3ZlciwgI3BhZ2UtaG9tZSBzZWN0aW9uIC5jdGE6YWN0aXZlLCAjcGFnZS1ob21lIHNlY3Rpb24gLmN0YTpmb2N1cyB7XG4gICAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7IH1cbiAgICAjcGFnZS1ob21lIHNlY3Rpb24gLmN0YTo6YWZ0ZXIge1xuICAgICAgY29udGVudDogJyc7XG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICBib3R0b206IC0xcHg7XG4gICAgICBsZWZ0OiAwO1xuICAgICAgcmlnaHQ6IDA7XG4gICAgICBib3JkZXItYm90dG9tOiAycHggc29saWQgI2RiZTZmZjtcbiAgICAgIGJvcmRlci1yYWRpdXM6IDJweDsgfVxuICBAbWVkaWEgKG1heC13aWR0aDogOTkxcHgpIHtcbiAgICAjcGFnZS1ob21lIHNlY3Rpb24gLmNvbnRlbnQge1xuICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7IH0gfVxuXG4jcGFnZS1ob21lICNmb3ItZGV2cyB7XG4gIHBhZGRpbmctYm90dG9tOiA4N3B4OyB9XG4gICNwYWdlLWhvbWUgI2Zvci1kZXZzIGhncm91cCB7XG4gICAgbWF4LXdpZHRoOiA3NDBweDsgfVxuICAjcGFnZS1ob21lICNmb3ItZGV2cyB1bCB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBmbGV4LXdyYXA6IHdyYXA7XG4gICAgbWFyZ2luLXRvcDogNDZweDtcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWFyb3VuZDtcbiAgICBtYXgtd2lkdGg6IDEwNjRweDtcbiAgICBmb250LWZhbWlseTogXCJFaW5hXCIsIFwiSGVsdmV0aWNhIE5ldWVcIiwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmOyB9XG4gICAgI3BhZ2UtaG9tZSAjZm9yLWRldnMgdWw6OmJlZm9yZSwgI3BhZ2UtaG9tZSAjZm9yLWRldnMgdWw6OmFmdGVyIHtcbiAgICAgIGRpc3BsYXk6IG5vbmU7IH1cbiAgI3BhZ2UtaG9tZSAjZm9yLWRldnMgbGkge1xuICAgIGxpc3Qtc3R5bGU6IG5vbmU7IH1cbiAgICAjcGFnZS1ob21lICNmb3ItZGV2cyBsaSBhIHtcbiAgICAgIGNvbG9yOiAjNzk4ZmI4O1xuICAgICAgZm9udC13ZWlnaHQ6IDcwMDtcbiAgICAgIHBhZGRpbmctdG9wOiA3M3B4O1xuICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcbiAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgIHdpZHRoOiAxMzBweDtcbiAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgbGV0dGVyLXNwYWNpbmc6IC4wOGVtO1xuICAgICAgdHJhbnNpdGlvbjogLjJzIGNvbG9yO1xuICAgICAgZm9udC1zaXplOiAxM3B4OyB9XG4gICAgICAjcGFnZS1ob21lICNmb3ItZGV2cyBsaSBhOjpiZWZvcmUsICNwYWdlLWhvbWUgI2Zvci1kZXZzIGxpIGE6OmFmdGVyIHtcbiAgICAgICAgYmFja2dyb3VuZDogdXJsKFwiL2ltZy9ob21lcGFnZS9vZmZlcmluZy1pY29ucy5wbmdcIikgMCAwIG5vLXJlcGVhdDtcbiAgICAgICAgYmFja2dyb3VuZC1zaXplOiA1NnB4O1xuICAgICAgICBoZWlnaHQ6IDU2cHg7XG4gICAgICAgIHdpZHRoOiA1NnB4O1xuICAgICAgICBjb250ZW50OiAnJztcbiAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICB0b3A6IDA7XG4gICAgICAgIGxlZnQ6IGNhbGMoNTAlIC0gMjhweCk7IH1cbiAgICAgICNwYWdlLWhvbWUgI2Zvci1kZXZzIGxpIGE6aG92ZXIge1xuICAgICAgICBjb2xvcjogIzRhOGJmYzsgfVxuICAgICAgQG1lZGlhIChtYXgtd2lkdGg6IDU2MHB4KSB7XG4gICAgICAgICNwYWdlLWhvbWUgI2Zvci1kZXZzIGxpIGEge1xuICAgICAgICAgIGxpbmUtaGVpZ2h0OiAxLjZlbTtcbiAgICAgICAgICBtYXJnaW4tYm90dG9tOiA0OHB4OyB9IH1cbiAgICAjcGFnZS1ob21lICNmb3ItZGV2cyBsaSBhOjpiZWZvcmUsICNwYWdlLWhvbWUgI2Zvci1kZXZzIGxpIGE6OmFmdGVyIHtcbiAgICAgIHRyYW5zaXRpb246IC4ycyBvcGFjaXR5OyB9XG4gICAgI3BhZ2UtaG9tZSAjZm9yLWRldnMgbGkgYTo6YWZ0ZXIge1xuICAgICAgb3BhY2l0eTogMDsgfVxuICAgICNwYWdlLWhvbWUgI2Zvci1kZXZzIGxpOmhvdmVyIGE6OmFmdGVyIHtcbiAgICAgIG9wYWNpdHk6IDE7IH1cbiAgICAjcGFnZS1ob21lICNmb3ItZGV2cyBsaS5vc3MgYTo6YmVmb3JlIHtcbiAgICAgIGJhY2tncm91bmQtcG9zaXRpb246IDAgMHB4OyB9XG4gICAgI3BhZ2UtaG9tZSAjZm9yLWRldnMgbGkub3NzIGE6OmFmdGVyIHtcbiAgICAgIGJhY2tncm91bmQtcG9zaXRpb246IDAgLTU2cHg7IH1cbiAgICAjcGFnZS1ob21lICNmb3ItZGV2cyBsaS5kZXZvcHMgYTo6YmVmb3JlIHtcbiAgICAgIGJhY2tncm91bmQtcG9zaXRpb246IDAgLTExMnB4OyB9XG4gICAgI3BhZ2UtaG9tZSAjZm9yLWRldnMgbGkuZGV2b3BzIGE6OmFmdGVyIHtcbiAgICAgIGJhY2tncm91bmQtcG9zaXRpb246IDAgLTE2OHB4OyB9XG4gICAgI3BhZ2UtaG9tZSAjZm9yLWRldnMgbGkuaWRlIGE6OmJlZm9yZSB7XG4gICAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwIC0yMjRweDsgfVxuICAgICNwYWdlLWhvbWUgI2Zvci1kZXZzIGxpLmlkZSBhOjphZnRlciB7XG4gICAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwIC0yODBweDsgfVxuICAgICNwYWdlLWhvbWUgI2Zvci1kZXZzIGxpLmludGVncmF0aW9uIGE6OmJlZm9yZSB7XG4gICAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwIC0zMzZweDsgfVxuICAgICNwYWdlLWhvbWUgI2Zvci1kZXZzIGxpLmludGVncmF0aW9uIGE6OmFmdGVyIHtcbiAgICAgIGJhY2tncm91bmQtcG9zaXRpb246IDAgLTM5MnB4OyB9XG5cbiNwYWdlLWhvbWUgI29zcyB7XG4gIHBhZGRpbmctdG9wOiAxNzZweDtcbiAgcGFkZGluZy1ib3R0b206IDQwMHB4O1xuICBtYXJnaW4tdG9wOiAxMDBweDsgfVxuICAjcGFnZS1ob21lICNvc3MgLmZyYW1ld29ya3Mge1xuICAgIG1hcmdpbi1ib3R0b206IDMzcHg7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IHN0YXJ0O1xuICAgIGZsZXgtd3JhcDogd3JhcDtcbiAgICBwYWRkaW5nLWxlZnQ6IDA7IH1cbiAgICAjcGFnZS1ob21lICNvc3MgLmZyYW1ld29ya3MgbGkge1xuICAgICAgbWFyZ2luLXJpZ2h0OiAxZW07XG4gICAgICBsaXN0LXN0eWxlOiBub25lOyB9XG4gICAgI3BhZ2UtaG9tZSAjb3NzIC5mcmFtZXdvcmtzIGxpIHtcbiAgICAgIGhlaWdodDogMzJweDtcbiAgICAgIHdpZHRoOiAzMnB4O1xuICAgICAgYmFja2dyb3VuZC1zaXplOiAxMDAlO1xuICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgICAgbWFyZ2luLXJpZ2h0OiAxMnB4OyB9XG4gICAgICAjcGFnZS1ob21lICNvc3MgLmZyYW1ld29ya3MgbGkuZnJhbWV3b3Jrc19fYW5ndWxhciB7XG4gICAgICAgIGJhY2tncm91bmQtaW1hZ2U6IHVybChcIi9pbWcvaG9tZXBhZ2UvZnJhbWV3b3JrLXN1cHBvcnQtYW5ndWxhci5wbmdcIik7IH1cbiAgICAgICNwYWdlLWhvbWUgI29zcyAuZnJhbWV3b3JrcyBsaS5mcmFtZXdvcmtzX19yZWFjdCB7XG4gICAgICAgIGJhY2tncm91bmQtaW1hZ2U6IHVybChcIi9pbWcvaG9tZXBhZ2UvZnJhbWV3b3JrLXN1cHBvcnQtcmVhY3QucG5nXCIpOyB9XG4gICAgICAjcGFnZS1ob21lICNvc3MgLmZyYW1ld29ya3MgbGkuZnJhbWV3b3Jrc19fdnVlIHtcbiAgICAgICAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFwiL2ltZy9ob21lcGFnZS9mcmFtZXdvcmstc3VwcG9ydC12dWUucG5nXCIpOyB9XG4gICAgICAjcGFnZS1ob21lICNvc3MgLmZyYW1ld29ya3MgbGkuZnJhbWV3b3Jrc19fanMge1xuICAgICAgICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXCIvaW1nL2hvbWVwYWdlL2ZyYW1ld29yay1zdXBwb3J0LWphdmFzY3JpcHQucG5nXCIpOyB9XG4gICNwYWdlLWhvbWUgI29zcyAuZ3JhcGhpY3Mge1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICB0b3A6IDI1cHg7XG4gICAgcmlnaHQ6IDE1cHg7XG4gICAgaGVpZ2h0OiA1MDBweDsgfVxuICAgICNwYWdlLWhvbWUgI29zcyAuZ3JhcGhpY3MuYWN0aXZlOjpiZWZvcmUsICNwYWdlLWhvbWUgI29zcyAuZ3JhcGhpY3MuYWN0aXZlOjphZnRlciB7XG4gICAgICBhbmltYXRpb246IGZhZGVJblVwIDFzIC44cyBlYXNlIGZvcndhcmRzOyB9XG4gICAgI3BhZ2UtaG9tZSAjb3NzIC5ncmFwaGljcy5hY3RpdmU6OmFmdGVyIHtcbiAgICAgIGFuaW1hdGlvbi1kZWxheTogLjRzOyB9XG4gICAgI3BhZ2UtaG9tZSAjb3NzIC5ncmFwaGljcy5hY3RpdmUgLnNoYWRvdyB7XG4gICAgICBhbmltYXRpb246IGZhZGVJbiAycyAuMnMgZWFzZSBmb3J3YXJkczsgfVxuICAgICNwYWdlLWhvbWUgI29zcyAuZ3JhcGhpY3M6OmJlZm9yZSwgI3BhZ2UtaG9tZSAjb3NzIC5ncmFwaGljczo6YWZ0ZXIsXG4gICAgI3BhZ2UtaG9tZSAjb3NzIC5ncmFwaGljcyAuc2hhZG93IHtcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgIGNvbnRlbnQ6ICcnO1xuICAgICAgb3BhY2l0eTogMDtcbiAgICAgIGJhY2tncm91bmQ6IHVybChcIi9pbWcvaG9tZXBhZ2UvZnJhbWV3b3JrLWRldmljZS1hbmRyb2lkLmpwZ1wiKSAwIDAgbm8tcmVwZWF0O1xuICAgICAgYmFja2dyb3VuZC1zaXplOiAxMDAlO1xuICAgICAgdG9wOiA3OHB4O1xuICAgICAgcmlnaHQ6IDk5cHg7XG4gICAgICB3aWR0aDogNDcwcHg7XG4gICAgICBoZWlnaHQ6IDYyNHB4OyB9XG4gICAgI3BhZ2UtaG9tZSAjb3NzIC5ncmFwaGljczo6YWZ0ZXIge1xuICAgICAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFwiL2ltZy9ob21lcGFnZS9mcmFtZXdvcmstZGV2aWNlLWlwaG9uZS5wbmdcIik7XG4gICAgICBiYWNrZ3JvdW5kLXNpemU6IDEwMCU7XG4gICAgICB3aWR0aDogNDkwcHg7XG4gICAgICBoZWlnaHQ6IDc5MHB4O1xuICAgICAgdG9wOiAwcHg7XG4gICAgICByaWdodDogMHB4OyB9XG4gICAgI3BhZ2UtaG9tZSAjb3NzIC5ncmFwaGljcyAuc2hhZG93IHtcbiAgICAgIGJhY2tncm91bmQtaW1hZ2U6IHVybChcIi9pbWcvaG9tZXBhZ2UvZnJhbWV3b3JrLWRldmljZXMtc2hhZG93LnBuZ1wiKTtcbiAgICAgIGJhY2tncm91bmQtc2l6ZTogMTAwJTtcbiAgICAgIHdpZHRoOiAxMjY2cHg7XG4gICAgICBoZWlnaHQ6IDIxNHB4O1xuICAgICAgdG9wOiA2NTRweDtcbiAgICAgIHJpZ2h0OiAtMjAwcHg7IH1cbiAgQG1lZGlhIChtYXgtd2lkdGg6IDEyMTlweCkge1xuICAgICNwYWdlLWhvbWUgI29zcyB7XG4gICAgICBwYWRkaW5nLXRvcDogMTIwcHg7IH1cbiAgICAgICNwYWdlLWhvbWUgI29zcyAuY29udGVudCB7XG4gICAgICAgIHdpZHRoOiAzODBweDsgfSB9XG4gIEBtZWRpYSAobWF4LXdpZHRoOiA5OTFweCkge1xuICAgICNwYWdlLWhvbWUgI29zcyAuZ3JhcGhpY3Mge1xuICAgICAgdHJhbnNmb3JtOiBzY2FsZSgwLjUsIDAuNSk7XG4gICAgICB0b3A6IDIwMHB4OyB9IH1cbiAgQG1lZGlhIChtYXgtd2lkdGg6IDc2N3B4KSB7XG4gICAgI3BhZ2UtaG9tZSAjb3NzIHtcbiAgICAgIHBhZGRpbmctdG9wOiAwcHg7XG4gICAgICBwYWRkaW5nLWJvdHRvbTogMzI4cHg7IH1cbiAgICAgICNwYWdlLWhvbWUgI29zcyAuY29udGVudCB7XG4gICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7IH1cbiAgICAgICAgI3BhZ2UtaG9tZSAjb3NzIC5jb250ZW50IC5mcmFtZXdvcmtzIHtcbiAgICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsgfVxuICAgICAgI3BhZ2UtaG9tZSAjb3NzIC5ncmFwaGljcyB7XG4gICAgICAgIHJpZ2h0OiBjYWxjKDUwJSAtIDYwcHgpO1xuICAgICAgICBib3R0b206IC0xMDFweDtcbiAgICAgICAgdG9wOiBhdXRvOyB9XG4gICAgICAgICNwYWdlLWhvbWUgI29zcyAuZ3JhcGhpY3M6OmJlZm9yZSB7XG4gICAgICAgICAgdG9wOiAzOXB4O1xuICAgICAgICAgIHJpZ2h0OiA1MHB4O1xuICAgICAgICAgIHdpZHRoOiAyMzVweDtcbiAgICAgICAgICBoZWlnaHQ6IDMxMnB4OyB9XG4gICAgICAgICNwYWdlLWhvbWUgI29zcyAuZ3JhcGhpY3M6OmFmdGVyIHtcbiAgICAgICAgICB3aWR0aDogMjQ1cHg7XG4gICAgICAgICAgaGVpZ2h0OiAzOTVweDsgfVxuICAgICAgICAjcGFnZS1ob21lICNvc3MgLmdyYXBoaWNzIC5zaGFkb3cge1xuICAgICAgICAgIHdpZHRoOiA2MzNweDtcbiAgICAgICAgICBoZWlnaHQ6IDEwN3B4O1xuICAgICAgICAgIHRvcDogMzI3cHg7XG4gICAgICAgICAgcmlnaHQ6IC0xMDBweDsgfSB9XG5cbiNwYWdlLWhvbWUgI2Rldm9wcyB7XG4gIHBhZGRpbmctdG9wOiAyMDRweDtcbiAgcGFkZGluZy1ib3R0b206IDI1MnB4OyB9XG4gICNwYWdlLWhvbWUgI2Rldm9wcyAuY29udGVudCB7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlOyB9XG4gICNwYWdlLWhvbWUgI2Rldm9wcyAuZ2l0LWhvc3RzIHtcbiAgICBtYXJnaW4tYm90dG9tOiA0MnB4O1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAganVzdGlmeS1jb250ZW50OiBzdGFydDtcbiAgICBmbGV4LXdyYXA6IHdyYXA7XG4gICAgcGFkZGluZy1sZWZ0OiAwOyB9XG4gICAgI3BhZ2UtaG9tZSAjZGV2b3BzIC5naXQtaG9zdHMgbGkge1xuICAgICAgbWFyZ2luLXJpZ2h0OiAxZW07XG4gICAgICBsaXN0LXN0eWxlOiBub25lOyB9XG4gICAgI3BhZ2UtaG9tZSAjZGV2b3BzIC5naXQtaG9zdHMgbGkge1xuICAgICAgbWFyZ2luLXJpZ2h0OiAxOXB4OyB9XG4gICAgI3BhZ2UtaG9tZSAjZGV2b3BzIC5naXQtaG9zdHMgaW1nIHtcbiAgICAgIGhlaWdodDogMjBweDsgfVxuICAjcGFnZS1ob21lICNkZXZvcHMgLmdyYXBoaWNzIHtcbiAgICBiYWNrZ3JvdW5kOiB1cmwoXCIvaW1nL2hvbWVwYWdlL2Rldm9wcy1hcHBmbG93LXByZXZpZXcucG5nXCIpIDAgMCBuby1yZXBlYXQ7XG4gICAgYmFja2dyb3VuZC1zaXplOiAxMDAlO1xuICAgIHdpZHRoOiAxMzI0cHg7XG4gICAgaGVpZ2h0OiA4MTJweDtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgdG9wOiAxNHB4O1xuICAgIGxlZnQ6IC0yMjdweDtcbiAgICBvcGFjaXR5OiAwOyB9XG4gICAgI3BhZ2UtaG9tZSAjZGV2b3BzIC5ncmFwaGljcy5hY3RpdmUge1xuICAgICAgYW5pbWF0aW9uOiBmYWRlSW5VcCAxcyBlYXNlIGZvcndhcmRzOyB9XG4gIEBtZWRpYSAobWF4LXdpZHRoOiAxMjE5cHgpIHtcbiAgICAjcGFnZS1ob21lICNkZXZvcHMge1xuICAgICAgcGFkZGluZy10b3A6IDYwcHg7IH1cbiAgICAgICNwYWdlLWhvbWUgI2Rldm9wcyAuZ3JhcGhpY3Mge1xuICAgICAgICB3aWR0aDogOTMzcHg7IH0gfVxuICBAbWVkaWEgKG1heC13aWR0aDogOTkxcHgpIHtcbiAgICAjcGFnZS1ob21lICNkZXZvcHMgLmdyYXBoaWNzIHtcbiAgICAgIHdpZHRoOiA2NjJweDtcbiAgICAgIHRvcDogMTgwcHg7IH0gfVxuICBAbWVkaWEgKG1heC13aWR0aDogNzY3cHgpIHtcbiAgICAjcGFnZS1ob21lICNkZXZvcHMge1xuICAgICAgcGFkZGluZy10b3A6IDE2MHB4O1xuICAgICAgcGFkZGluZy1ib3R0b206IDQyMHB4OyB9XG4gICAgICAjcGFnZS1ob21lICNkZXZvcHMgLmNvbnRlbnQge1xuICAgICAgICB3aWR0aDogMTAwJTsgfVxuICAgICAgI3BhZ2UtaG9tZSAjZGV2b3BzIC5naXQtaG9zdHMge1xuICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsgfVxuICAgICAgI3BhZ2UtaG9tZSAjZGV2b3BzIC5ncmFwaGljcyB7XG4gICAgICAgIGxlZnQ6IGNhbGMoNTAlIC0gMTUwcHgpO1xuICAgICAgICB3aWR0aDogMzMxcHg7XG4gICAgICAgIHRvcDogYXV0bztcbiAgICAgICAgaGVpZ2h0OiAyMDNweDtcbiAgICAgICAgYm90dG9tOiAxNzBweDsgfSB9XG5cbiNwYWdlLWhvbWUgI3N0dWRpbyB7XG4gIHBhZGRpbmctYm90dG9tOiA1NHB4O1xuICBtYXJnaW4tYm90dG9tOiAxNTBweDtcbiAgcGFkZGluZy10b3A6IDIwcHg7XG4gIG1hcmdpbi10b3A6IDE1MHB4OyB9XG4gICNwYWdlLWhvbWUgI3N0dWRpbyAuY29udGVudCB7XG4gICAgbWF4LXdpZHRoOiA3MjBweDsgfVxuICAjcGFnZS1ob21lICNzdHVkaW8gLmdyYXBoaWNzIHtcbiAgICBiYWNrZ3JvdW5kOiB1cmwoXCIvaW1nL2hvbWVwYWdlL3N0dWRpby1kZXNrdG9wLWJnLmpwZ1wiKSA1MCUgMCBuby1yZXBlYXQ7XG4gICAgYmFja2dyb3VuZC1zaXplOiBjb3ZlcjtcbiAgICB3aWR0aDogMTAwJTtcbiAgICBwYWRkaW5nLXRvcDogMTAwcHg7XG4gICAgcGFkZGluZy1ib3R0b206IDEwMHB4O1xuICAgIG1hcmdpbi10b3A6IDU4cHg7IH1cbiAgICAjcGFnZS1ob21lICNzdHVkaW8gLmdyYXBoaWNzIHZpZGVvIHtcbiAgICAgIG1hcmdpbjogMCBhdXRvO1xuICAgICAgcGFkZGluZzogMDtcbiAgICAgIGJvcmRlci1yYWRpdXM6IDZweDtcbiAgICAgIGJveC1zaGFkb3c6IDAgMjJweCA3MHB4IDRweCByZ2JhKDAsIDAsIDAsIDAuNTYpOyB9XG4gIEBtZWRpYSAobWF4LXdpZHRoOiA3NjdweCkge1xuICAgICNwYWdlLWhvbWUgI3N0dWRpbyB7XG4gICAgICBwYWRkaW5nLXRvcDogODBweDtcbiAgICAgIG1hcmdpbi10b3A6IDA7IH1cbiAgICAgICNwYWdlLWhvbWUgI3N0dWRpbyAuZ3JhcGhpY3MgdmlkZW8ge1xuICAgICAgICB3aWR0aDogMTAwJTsgfSB9XG5cbiNwYWdlLWhvbWUgI2ludGVncmF0aW9ucyB7XG4gIHBhZGRpbmctdG9wOiAyMHB4O1xuICBwYWRkaW5nLWJvdHRvbTogNHB4OyB9XG4gICNwYWdlLWhvbWUgI2ludGVncmF0aW9ucyAuY29udGVudCB7XG4gICAgbWF4LXdpZHRoOiA4OTRweDsgfVxuICAjcGFnZS1ob21lICNpbnRlZ3JhdGlvbnMgLmludGVncmF0aW9uLWxpc3Qge1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICBoZWlnaHQ6IDM2MHB4O1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIG1hcmdpbjogMCAwIDQ4cHg7XG4gICAgcGFkZGluZzogMDtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgb3BhY2l0eTogMDtcbiAgICBhbmltYXRpb246IGZhZGVJbiAxcyAxcyBmb3J3YXJkczsgfVxuICAgICNwYWdlLWhvbWUgI2ludGVncmF0aW9ucyAuaW50ZWdyYXRpb24tbGlzdCBsaSB7XG4gICAgICBsaXN0LXN0eWxlOiBub25lO1xuICAgICAgcG9zaXRpb246IGFic29sdXRlOyB9XG4gICAgI3BhZ2UtaG9tZSAjaW50ZWdyYXRpb25zIC5pbnRlZ3JhdGlvbi1saXN0IGltZyB7XG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICB3aWR0aDogMTI4cHg7XG4gICAgICBib3JkZXItcmFkaXVzOiA1MCU7XG4gICAgICBib3gtc2hhZG93OiAwIDZweCAyNHB4IHJnYmEoMCwgMCwgMCwgMC4xKTsgfVxuICAgICAgI3BhZ2UtaG9tZSAjaW50ZWdyYXRpb25zIC5pbnRlZ3JhdGlvbi1saXN0IGltZy5tIHtcbiAgICAgICAgd2lkdGg6IDY0cHg7IH1cbiAgICAgICNwYWdlLWhvbWUgI2ludGVncmF0aW9ucyAuaW50ZWdyYXRpb24tbGlzdCBpbWcubSB7XG4gICAgICAgIHdpZHRoOiA5NnB4OyB9XG5cbiNwYWdlLWhvbWUgI3doeS1idWlsZCB7XG4gIHBhZGRpbmctYm90dG9tOiA5MHB4OyB9XG4gICNwYWdlLWhvbWUgI3doeS1idWlsZCAud2h5IHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGp1c3RpZnktY29udGVudDogc3RhcnQ7XG4gICAgZmxleC13cmFwOiB3cmFwO1xuICAgIHBhZGRpbmctbGVmdDogMDtcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG4gICAgbWFyZ2luLXRvcDogNzVweDtcbiAgICBtYXJnaW4tYm90dG9tOiA3NXB4OyB9XG4gICAgI3BhZ2UtaG9tZSAjd2h5LWJ1aWxkIC53aHkgbGkge1xuICAgICAgbWFyZ2luLXJpZ2h0OiAxZW07XG4gICAgICBsaXN0LXN0eWxlOiBub25lOyB9XG4gICAgI3BhZ2UtaG9tZSAjd2h5LWJ1aWxkIC53aHkgbGkge1xuICAgICAgcGFkZGluZy10b3A6IDYxcHg7XG4gICAgICBtYXgtd2lkdGg6IDMxMHB4O1xuICAgICAgcG9zaXRpb246IHJlbGF0aXZlOyB9XG4gICAgICAjcGFnZS1ob21lICN3aHktYnVpbGQgLndoeSBsaS53aHlfX2Z1dHVyZS1wcm9vZjo6YmVmb3JlIHtcbiAgICAgICAgYmFja2dyb3VuZC1wb3NpdGlvbjogMCAwcHg7IH1cbiAgICAgICNwYWdlLWhvbWUgI3doeS1idWlsZCAud2h5IGxpLndoeV9fY29tbXVuaXR5OjpiZWZvcmUge1xuICAgICAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwIC00OHB4OyB9XG4gICAgICAjcGFnZS1ob21lICN3aHktYnVpbGQgLndoeSBsaS53aHlfX29zOjpiZWZvcmUge1xuICAgICAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwIC05NnB4OyB9XG4gICAgICAjcGFnZS1ob21lICN3aHktYnVpbGQgLndoeSBsaTo6YmVmb3JlIHtcbiAgICAgICAgYmFja2dyb3VuZDogdXJsKFwiL2ltZy9ob21lcGFnZS93aHktYnVpbGQtaWNvbnMucG5nXCIpIDAgMCBuby1yZXBlYXQ7XG4gICAgICAgIGJhY2tncm91bmQtc2l6ZTogMTAwJTtcbiAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICB0b3A6IDA7XG4gICAgICAgIGxlZnQ6IDA7XG4gICAgICAgIGhlaWdodDogNDhweDtcbiAgICAgICAgd2lkdGg6IDQ4cHg7XG4gICAgICAgIGNvbnRlbnQ6ICcnOyB9XG4gICAgICAjcGFnZS1ob21lICN3aHktYnVpbGQgLndoeSBsaSBwIHtcbiAgICAgICAgbGV0dGVyLXNwYWNpbmc6IC0uMDFlbTsgfVxuICBAbWVkaWEgKG1heC13aWR0aDogMTIxOXB4KSB7XG4gICAgI3BhZ2UtaG9tZSAjd2h5LWJ1aWxkIC53aHkgbGkge1xuICAgICAgbWF4LXdpZHRoOiAyODBweDsgfSB9XG4gIEBtZWRpYSAobWF4LXdpZHRoOiA5OTFweCkge1xuICAgICNwYWdlLWhvbWUgI3doeS1idWlsZCAud2h5IGxpIHtcbiAgICAgIG1heC13aWR0aDogMjEwcHg7IH0gfVxuICBAbWVkaWEgKG1heC13aWR0aDogNzY3cHgpIHtcbiAgICAjcGFnZS1ob21lICN3aHktYnVpbGQge1xuICAgICAgdGV4dC1hbGlnbjogY2VudGVyOyB9XG4gICAgICAjcGFnZS1ob21lICN3aHktYnVpbGQgLndoeSB7XG4gICAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYXJvdW5kOyB9XG4gICAgICAgICNwYWdlLWhvbWUgI3doeS1idWlsZCAud2h5IGxpIHtcbiAgICAgICAgICBtYXgtd2lkdGg6IDEwMCU7IH1cbiAgICAgICAgICAjcGFnZS1ob21lICN3aHktYnVpbGQgLndoeSBsaTo6YmVmb3JlIHtcbiAgICAgICAgICAgIGxlZnQ6IGNhbGMoNTAlIC0gMjRweCk7IH0gfVxuXG4jcGFnZS1ob21lICNkaWZmZXJlbmNlIHtcbiAgZGlzcGxheTogZmxleDtcbiAgcGFkZGluZy10b3A6IDYwcHg7XG4gIHBhZGRpbmctYm90dG9tOiA2OXB4O1xuICBtYXJnaW4tdG9wOiAxNnB4O1xuICBib3JkZXItYm90dG9tOiAxcHggc29saWQgI2VlZTsgfVxuICAjcGFnZS1ob21lICNkaWZmZXJlbmNlIC5jb250YWluZXIge1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsgfVxuICAgICNwYWdlLWhvbWUgI2RpZmZlcmVuY2UgLmNvbnRhaW5lcjo6YmVmb3JlIHtcbiAgICAgIGJhY2tncm91bmQ6IHVybChcIi9pbWcvaG9tZXBhZ2UvaHlicmlkLXZzLW5hdGl2ZS1pb25pYy1lYm9vay5wbmdcIikgMCAwIG5vLXJlcGVhdDtcbiAgICAgIGJhY2tncm91bmQtc2l6ZTogMTAwJTtcbiAgICAgIHdpZHRoOiA0MjRweDtcbiAgICAgIGhlaWdodDogMzEwcHg7XG4gICAgICBjb250ZW50OiAnJztcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgIGJvdHRvbTogLTY5cHg7XG4gICAgICBsZWZ0OiA1MnB4OyB9XG4gICNwYWdlLWhvbWUgI2RpZmZlcmVuY2UgaGdyb3VwIHtcbiAgICBtYXgtd2lkdGg6IDU1MHB4O1xuICAgIG1hcmdpbi1yaWdodDogNTBweDtcbiAgICBtYXJnaW4tbGVmdDogYXV0bzsgfVxuICAjcGFnZS1ob21lICNkaWZmZXJlbmNlIGg1IHtcbiAgICBmb250LXNpemU6IDE4cHg7XG4gICAgbWFyZ2luLWJvdHRvbTogMTFweDtcbiAgICBjb2xvcjogIzFmMzI1NjsgfVxuICAjcGFnZS1ob21lICNkaWZmZXJlbmNlIHAge1xuICAgIGZvbnQtc2l6ZTogMTZweDtcbiAgICBmb250LXdlaWdodDogNDAwO1xuICAgIGxpbmUtaGVpZ2h0OiAxLjZlbTtcbiAgICBsZXR0ZXItc3BhY2luZzogLS4wMWVtO1xuICAgIGNvbG9yOiAjNmM4MWE2OyB9XG4gICNwYWdlLWhvbWUgI2RpZmZlcmVuY2UgLmJ0biB7XG4gICAgcGFkZGluZzogMTJweCAxM3B4IDEwcHg7XG4gICAgZm9udC1zaXplOiAxNHB4O1xuICAgIGJhY2tncm91bmQtY29sb3I6ICM2NjhiZmY7IH1cbiAgQG1lZGlhIChtYXgtd2lkdGg6IDEyMTlweCkge1xuICAgICNwYWdlLWhvbWUgI2RpZmZlcmVuY2UgLmNvbnRhaW5lcjo6YmVmb3JlIHtcbiAgICAgIGxlZnQ6IDA7IH1cbiAgICAjcGFnZS1ob21lICNkaWZmZXJlbmNlIGhncm91cCB7XG4gICAgICBtYXgtd2lkdGg6IDUwMHB4OyB9IH1cbiAgQG1lZGlhIChtYXgtd2lkdGg6IDk5MXB4KSB7XG4gICAgI3BhZ2UtaG9tZSAjZGlmZmVyZW5jZSBoZ3JvdXAge1xuICAgICAgbWFyZ2luOiAwIGF1dG87XG4gICAgICBtYXgtd2lkdGg6IDEwMCU7IH1cbiAgICAjcGFnZS1ob21lICNkaWZmZXJlbmNlIC5jb250YWluZXI6OmJlZm9yZSB7XG4gICAgICB3aWR0aDogMjEycHg7XG4gICAgICBoZWlnaHQ6IDE1NXB4O1xuICAgICAgcmlnaHQ6IDA7XG4gICAgICBsZWZ0OiBhdXRvOyB9IH1cbiAgQG1lZGlhIChtYXgtd2lkdGg6IDM3MHB4KSB7XG4gICAgI3BhZ2UtaG9tZSAjZGlmZmVyZW5jZSAuY29udGFpbmVyOjpiZWZvcmUge1xuICAgICAgZGlzcGxheTogbm9uZTsgfSB9XG5cbiNwYWdlLWhvbWUgI2dvb2QtY29tcGFueSB7XG4gIHBhZGRpbmctdG9wOiAxNTlweDtcbiAgcGFkZGluZy1ib3R0b206IDIwMnB4OyB9XG4gICNwYWdlLWhvbWUgI2dvb2QtY29tcGFueSBoZ3JvdXAge1xuICAgIG1heC13aWR0aDogNzMycHg7XG4gICAgbWFyZ2luOiAwIGF1dG87IH1cbiAgICAjcGFnZS1ob21lICNnb29kLWNvbXBhbnkgaGdyb3VwIHAge1xuICAgICAgbGluZS1oZWlnaHQ6IDMycHg7XG4gICAgICBtYXJnaW4tdG9wOiAxNXB4OyB9XG4gICNwYWdlLWhvbWUgI2dvb2QtY29tcGFueSAuY2FzZS1zdHVkaWVzIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGp1c3RpZnktY29udGVudDogc3RhcnQ7XG4gICAgZmxleC13cmFwOiB3cmFwO1xuICAgIHBhZGRpbmctbGVmdDogMDtcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG4gICAgbWFyZ2luLXRvcDogNTRweDsgfVxuICAgICNwYWdlLWhvbWUgI2dvb2QtY29tcGFueSAuY2FzZS1zdHVkaWVzIGxpIHtcbiAgICAgIG1hcmdpbi1yaWdodDogMWVtO1xuICAgICAgbGlzdC1zdHlsZTogbm9uZTsgfVxuICAgICNwYWdlLWhvbWUgI2dvb2QtY29tcGFueSAuY2FzZS1zdHVkaWVzIGxpIHtcbiAgICAgIGZsZXg6IDAgMCAyNzBweDtcbiAgICAgIG1hcmdpbi1yaWdodDogMDtcbiAgICAgIG1hcmdpbi1ib3R0b206IDMycHg7IH1cbiAgICAjcGFnZS1ob21lICNnb29kLWNvbXBhbnkgLmNhc2Utc3R1ZGllcyBhIHtcbiAgICAgIHRleHQtYWxpZ246IGxlZnQ7XG4gICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgIGJvcmRlci1yYWRpdXM6IDhweDtcbiAgICAgIHBhZGRpbmc6IDIzNnB4IDI3cHggMjNweDtcbiAgICAgIGJveC1zaGFkb3c6IDAgNHB4IDhweCByZ2JhKDAsIDMwLCA4NCwgMC4xMiksIDAgMXB4IDNweCByZ2JhKDAsIDMwLCA4NCwgMC4wOCk7XG4gICAgICB0cmFuc2l0aW9uOiAuMTVzIGJveC1zaGFkb3cgZWFzZSwgLjE1cyBjb2xvciwgLjE1cyB0cmFuc2Zvcm07IH1cbiAgICAgICNwYWdlLWhvbWUgI2dvb2QtY29tcGFueSAuY2FzZS1zdHVkaWVzIGE6aG92ZXIge1xuICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTFweCk7XG4gICAgICAgIGJveC1zaGFkb3c6IDAgOHB4IDE2cHggcmdiYSgwLCAzMCwgODQsIDAuMSksIDAgM3B4IDZweCByZ2JhKDAsIDMwLCA4NCwgMC4wOCk7IH1cbiAgICAjcGFnZS1ob21lICNnb29kLWNvbXBhbnkgLmNhc2Utc3R1ZGllcyBpbWcge1xuICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgdG9wOiAwO1xuICAgICAgbGVmdDogMDtcbiAgICAgIHJpZ2h0OiAwO1xuICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgIGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiA4cHg7XG4gICAgICBib3JkZXItdG9wLWxlZnQtcmFkaXVzOiA4cHg7IH1cbiAgICAjcGFnZS1ob21lICNnb29kLWNvbXBhbnkgLmNhc2Utc3R1ZGllcyBzdHJvbmcge1xuICAgICAgZm9udC13ZWlnaHQ6IDQwMDtcbiAgICAgIGNvbG9yOiAjMjUzOTUwOyB9XG4gICAgI3BhZ2UtaG9tZSAjZ29vZC1jb21wYW55IC5jYXNlLXN0dWRpZXMgcCB7XG4gICAgICBmb250LXNpemU6IDE0cHg7XG4gICAgICBsZXR0ZXItc3BhY2luZzogLS4wMWVtOyB9XG4gICAgI3BhZ2UtaG9tZSAjZ29vZC1jb21wYW55IC5jYXNlLXN0dWRpZXMgLmN0YSB7XG4gICAgICBmb250LXNpemU6IDE1cHg7XG4gICAgICBmb250LWZhbWlseTogRWluYTtcbiAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7XG4gICAgICBtYXJnaW4tdG9wOiAxMHB4O1xuICAgICAgbGV0dGVyLXNwYWNpbmc6IC4wM2VtOyB9XG4gICAgICAjcGFnZS1ob21lICNnb29kLWNvbXBhbnkgLmNhc2Utc3R1ZGllcyAuY3RhOjphZnRlciB7XG4gICAgICAgIGRpc3BsYXk6IG5vbmU7IH1cbiAgI3BhZ2UtaG9tZSAjZ29vZC1jb21wYW55IC5vdGhlcnMge1xuICAgIHdpZHRoOiA4MDdweDtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgICBtYXJnaW46IDQ5cHggYXV0byAzNXB4OyB9XG4gICNwYWdlLWhvbWUgI2dvb2QtY29tcGFueSAuY3RhOjphZnRlciB7XG4gICAgY29sb3I6ICNkYmU2ZmY7IH1cbiAgQG1lZGlhIChtYXgtd2lkdGg6IDEyMTlweCkge1xuICAgICNwYWdlLWhvbWUgI2dvb2QtY29tcGFueSAuY2FzZS1zdHVkaWVzIGxpIHtcbiAgICAgIGZsZXg6IDAgMCAyMjBweDsgfSB9XG4gIEBtZWRpYSAobWF4LXdpZHRoOiA3NjdweCkge1xuICAgICNwYWdlLWhvbWUgI2dvb2QtY29tcGFueSAuY2FzZS1zdHVkaWVzIHtcbiAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYXJvdW5kOyB9XG4gICAgICAjcGFnZS1ob21lICNnb29kLWNvbXBhbnkgLmNhc2Utc3R1ZGllcyBsaSB7XG4gICAgICAgIGZsZXg6IDAgMCAyODBweDsgfVxuICAgICNwYWdlLWhvbWUgI2dvb2QtY29tcGFueSAub3RoZXJzIHtcbiAgICAgIHdpZHRoOiAxMDAlOyB9IH1cblxuI3BhZ2UtaG9tZSAjam9pbiB7XG4gIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCh0byByaWdodCwgIzRmNzRmZSwgIzcwYWFmYik7XG4gIHBhZGRpbmctdG9wOiAxMzJweDtcbiAgcGFkZGluZy1ib3R0b206IDE2MHB4O1xuICBjb2xvcjogd2hpdGU7XG4gIHRleHQtYWxpZ246IGNlbnRlcjsgfVxuICAjcGFnZS1ob21lICNqb2luIGhncm91cCB7XG4gICAgZm9udC1zaXplOiAyM3B4O1xuICAgIG1heC13aWR0aDogNzkwcHg7IH1cbiAgI3BhZ2UtaG9tZSAjam9pbiBoMSB7XG4gICAgZm9udC13ZWlnaHQ6IDQwMDtcbiAgICBjb2xvcjogd2hpdGU7XG4gICAgZm9udC1zaXplOiA0NnB4O1xuICAgIGxpbmUtaGVpZ2h0OiA2NHB4OyB9XG4gICNwYWdlLWhvbWUgI2pvaW4gLmJ0bnMge1xuICAgIG1hcmdpbi10b3A6IDQ0cHg7IH1cbiAgI3BhZ2UtaG9tZSAjam9pbiAuYnRuIHtcbiAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xuICAgIGZvbnQtd2VpZ2h0OiA3MDA7XG4gICAgZm9udC1zaXplOiAxNXB4O1xuICAgIHBhZGRpbmc6IDIxcHggMjRweCAxOXB4O1xuICAgIGxldHRlci1zcGFjaW5nOiAuMDk2ZW07XG4gICAgbWFyZ2luLWJvdHRvbTogMTZweDsgfVxuICAgICNwYWdlLWhvbWUgI2pvaW4gLmJ0biBpb24taWNvbiB7XG4gICAgICB2ZXJ0aWNhbC1hbGlnbjogLTJweDtcbiAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICAgIHdpZHRoOiAxNXB4O1xuICAgICAgaGVpZ2h0OiAxNXB4OyB9XG4gICAgI3BhZ2UtaG9tZSAjam9pbiAuYnRuLmxpZ2h0IHtcbiAgICAgIGJhY2tncm91bmQ6ICM3YmIzZmY7IH1cbiAgICAgICNwYWdlLWhvbWUgI2pvaW4gLmJ0bi5saWdodDpob3ZlciB7XG4gICAgICAgIGJhY2tncm91bmQ6ICM5NWMyZmY7IH1cbiAgICAjcGFnZS1ob21lICNqb2luIC5idG46bm90KDpob3Zlcik6bm90KDphY3RpdmUpIHtcbiAgICAgIGJveC1zaGFkb3c6IG5vbmU7IH1cblxuYm9keS5wcmVzcy1yZWxlYXNlIG1haW4uY29udGFpbmVyIHtcbiAgZm9udC1mYW1pbHk6IFwiQWRvYmUgQ2FzbG9uXCIsIEdlb3JnaWEsIFRpbWVzLCBcIlRpbWVzIE5ldyBSb21hblwiLCBzZXJpZjtcbiAgbWF4LXdpZHRoOiA3MzBweDsgfVxuICBib2R5LnByZXNzLXJlbGVhc2UgbWFpbi5jb250YWluZXIgaDEsXG4gIGJvZHkucHJlc3MtcmVsZWFzZSBtYWluLmNvbnRhaW5lciBoMixcbiAgYm9keS5wcmVzcy1yZWxlYXNlIG1haW4uY29udGFpbmVyIGgzLFxuICBib2R5LnByZXNzLXJlbGVhc2UgbWFpbi5jb250YWluZXIgaDQge1xuICAgIGZvbnQtZmFtaWx5OiBcIkVpbmFcIiwgXCJIZWx2ZXRpY2EgTmV1ZVwiLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7IH1cbiAgYm9keS5wcmVzcy1yZWxlYXNlIG1haW4uY29udGFpbmVyIGgxIHtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgcGFkZGluZy10b3A6IDEwMXB4O1xuICAgIG1hcmdpbi10b3A6IDY3cHg7XG4gICAgZm9udC1zaXplOiAzMnB4O1xuICAgIGZvbnQtd2VpZ2h0OiA3MDA7XG4gICAgbGV0dGVyLXNwYWNpbmc6IC0uMDJlbTtcbiAgICBsaW5lLWhlaWdodDogNDRweDsgfVxuICAgIGJvZHkucHJlc3MtcmVsZWFzZSBtYWluLmNvbnRhaW5lciBoMTo6YmVmb3JlIHtcbiAgICAgIGJhY2tncm91bmQ6IHVybChcIi9pbWcvcHJlc3MvcHJlc3MtdGh1bWJuYWlsLnBuZ1wiKSBuby1yZXBlYXQgMCAwO1xuICAgICAgYmFja2dyb3VuZC1zaXplOiA3MnB4O1xuICAgICAgd2lkdGg6IDcycHg7XG4gICAgICBoZWlnaHQ6IDcycHg7XG4gICAgICBjb250ZW50OiAnJztcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgIHRvcDogMDsgfVxuICAgIGJvZHkucHJlc3MtcmVsZWFzZSBtYWluLmNvbnRhaW5lciBoMSArIGgzIHtcbiAgICAgIG1hcmdpbi10b3A6IDEwcHg7XG4gICAgICBmb250LXNpemU6IDE5cHg7XG4gICAgICBmb250LXdlaWdodDogNjAwO1xuICAgICAgbGluZS1oZWlnaHQ6IDEuNTVlbTtcbiAgICAgIGxldHRlci1zcGFjaW5nOiAuMDAzZW07XG4gICAgICBtYXJnaW4tYm90dG9tOiAyNXB4OyB9XG4gIGJvZHkucHJlc3MtcmVsZWFzZSBtYWluLmNvbnRhaW5lciBoMyArIGg0IHtcbiAgICBmb250LXNpemU6IDEycHg7XG4gICAgY29sb3I6ICM5MjljYWM7XG4gICAgbGV0dGVyLXNwYWNpbmc6IC4wMmVtO1xuICAgIG1hcmdpbi1ib3R0b206IDU4cHg7IH1cbiAgYm9keS5wcmVzcy1yZWxlYXNlIG1haW4uY29udGFpbmVyIGgyLFxuICBib2R5LnByZXNzLXJlbGVhc2UgbWFpbi5jb250YWluZXIgaDMge1xuICAgIGZvbnQtd2VpZ2h0OiA2MDA7IH1cbiAgYm9keS5wcmVzcy1yZWxlYXNlIG1haW4uY29udGFpbmVyIHAge1xuICAgIGZvbnQtc2l6ZTogMjBweDtcbiAgICBsaW5lLWhlaWdodDogMmVtO1xuICAgIG1hcmdpbi1ib3R0b206IDQwcHg7IH1cbiAgYm9keS5wcmVzcy1yZWxlYXNlIG1haW4uY29udGFpbmVyIHVsIHtcbiAgICBtYXJnaW4tYm90dG9tOiA0MHB4OyB9XG4gIGJvZHkucHJlc3MtcmVsZWFzZSBtYWluLmNvbnRhaW5lciBsaSB7XG4gICAgZm9udC1zaXplOiAyMHB4O1xuICAgIGxpbmUtaGVpZ2h0OiAyZW07IH1cblxuI3BhZ2UtcHJvZHVjdHMtY29udGFjdCAucHJpY2luZy1zdXJ2ZXkge1xuICB3aWR0aDogNjAwcHg7XG4gIG1hcmdpbjogNDBweCBhdXRvIDQwcHggYXV0bzsgfVxuXG4jcGFnZS1wcm9kdWN0cy1jb250YWN0IC5jdGEge1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7IH1cblxuI3BhZ2UtcHJvZHVjdHMtY29udGFjdCAuYnV0dG9uLWNvbnRhaW5lciB7XG4gIG1hcmdpbi10b3A6IDI1cHg7XG4gIHRleHQtYWxpZ246IHJpZ2h0OyB9XG5cbiNwYWdlLXByb2R1Y3RzLWRlcGxveSAudG9wIHtcbiAgbWFyZ2luLXRvcDogLTEzOHB4O1xuICBwYWRkaW5nLXRvcDogMTcwcHg7XG4gIGJhY2tncm91bmQ6IHdoaXRlO1xuICB0ZXh0LWFsaWduOiBsZWZ0O1xuICBwYWRkaW5nLWJvdHRvbTogNTIycHg7XG4gIGJhY2tncm91bmQ6IHdoaXRlIHVybChcIi9pbWcvcHJvL2RlcGxveS9kZXBsb3ktaGVyby1mbGF0LWltZy5wbmdcIikgNTAlIDEwMCUgbm8tcmVwZWF0O1xuICBiYWNrZ3JvdW5kLXNpemU6IDExMDhweDsgfVxuICBAbWVkaWEgKG1heC13aWR0aDogNzY3cHgpIHtcbiAgICAjcGFnZS1wcm9kdWN0cy1kZXBsb3kgLnRvcCB7XG4gICAgICBiYWNrZ3JvdW5kLXNpemU6IDc4MHB4O1xuICAgICAgcGFkZGluZy1ib3R0b206IDM2MHB4OyB9IH1cbiAgI3BhZ2UtcHJvZHVjdHMtZGVwbG95IC50b3AgLmNvbnRhaW5lciB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47IH1cbiAgICBAbWVkaWEgKG1heC13aWR0aDogMTIxOXB4KSB7XG4gICAgICAjcGFnZS1wcm9kdWN0cy1kZXBsb3kgLnRvcCAuY29udGFpbmVyIHtcbiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsgfSB9XG4gICNwYWdlLXByb2R1Y3RzLWRlcGxveSAudG9wIC5jb250YWluZXI6YmVmb3JlLFxuICAjcGFnZS1wcm9kdWN0cy1kZXBsb3kgLnRvcCAuY29udGFpbmVyOmFmdGVyIHtcbiAgICBjb250ZW50OiAnJztcbiAgICBkaXNwbGF5OiBub25lOyB9XG4gICNwYWdlLXByb2R1Y3RzLWRlcGxveSAudG9wIGhncm91cCB7XG4gICAgcGFkZGluZy10b3A6IDk5cHg7XG4gICAgbWF4LXdpZHRoOiAxMDAlO1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICBtYXgtd2lkdGg6IDU1NXB4OyB9XG4gICAgI3BhZ2UtcHJvZHVjdHMtZGVwbG95IC50b3AgaGdyb3VwOjpiZWZvcmUge1xuICAgICAgYmFja2dyb3VuZDogdXJsKFwiL2ltZy9wcm8vZGVwbG95L2RlcGxveS1oZXJvLWljb24ucG5nXCIpIDAgMCBuby1yZXBlYXQ7XG4gICAgICBiYWNrZ3JvdW5kLXNpemU6IDgwcHg7XG4gICAgICBoZWlnaHQ6IDgwcHg7XG4gICAgICB3aWR0aDogODBweDtcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgIHRvcDogMDtcbiAgICAgIGxlZnQ6IDA7XG4gICAgICBjb250ZW50OiAnJzsgfVxuICAgICNwYWdlLXByb2R1Y3RzLWRlcGxveSAudG9wIGhncm91cCBoMSB7XG4gICAgICBsZXR0ZXItc3BhY2luZzogLS4wM2VtO1xuICAgICAgZm9udC13ZWlnaHQ6IDcwMDtcbiAgICAgIGZvbnQtc2l6ZTogNDhweDtcbiAgICAgIG1heC13aWR0aDogNDIwcHg7IH1cbiAgICAjcGFnZS1wcm9kdWN0cy1kZXBsb3kgLnRvcCBoZ3JvdXAgcCB7XG4gICAgICBmb250LXNpemU6IDIwcHg7XG4gICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgICBtYXJnaW4tdG9wOiAxMnB4OyB9XG4gICNwYWdlLXByb2R1Y3RzLWRlcGxveSAudG9wIC5idG5zIHtcbiAgICBtYXJnaW4tdG9wOiAxNTBweDsgfVxuICAgICNwYWdlLXByb2R1Y3RzLWRlcGxveSAudG9wIC5idG5zIC5idG4ge1xuICAgICAgZm9udC1zaXplOiAxNnB4O1xuICAgICAgZm9udC13ZWlnaHQ6IDcwMDsgfVxuICAgICAgI3BhZ2UtcHJvZHVjdHMtZGVwbG95IC50b3AgLmJ0bnMgLmJ0bi5wdXJwbGUge1xuICAgICAgICBiYWNrZ3JvdW5kOiAjNTY1N2ZiO1xuICAgICAgICBtYXJnaW4tcmlnaHQ6IDlweDtcbiAgICAgICAgcGFkZGluZzogMTJweCAxOXB4IDEwcHg7IH1cbiAgICAgICNwYWdlLXByb2R1Y3RzLWRlcGxveSAudG9wIC5idG5zIC5idG4ud2hpdGUge1xuICAgICAgICBjb2xvcjogIzU2NTdmYjtcbiAgICAgICAgcGFkZGluZzogMTJweCAxOXB4IDEwcHg7XG4gICAgICAgIG1hcmdpbi1yaWdodDogM3B4OyB9XG4gICAgQG1lZGlhIChtYXgtd2lkdGg6IDEyMTlweCkge1xuICAgICAgI3BhZ2UtcHJvZHVjdHMtZGVwbG95IC50b3AgLmJ0bnMge1xuICAgICAgICBtYXJnaW4tdG9wOiAyMnB4O1xuICAgICAgICBtYXJnaW4tYm90dG9tOiAzMnB4OyB9IH1cbiAgQG1lZGlhIChtYXgtd2lkdGg6IDc2N3B4KSB7XG4gICAgI3BhZ2UtcHJvZHVjdHMtZGVwbG95IC50b3AgaGdyb3VwOmJlZm9yZSB7XG4gICAgICBsZWZ0OiA1MCU7XG4gICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTQwcHgpOyB9XG4gICAgI3BhZ2UtcHJvZHVjdHMtZGVwbG95IC50b3AgaGdyb3VwLFxuICAgICNwYWdlLXByb2R1Y3RzLWRlcGxveSAudG9wIC5idG5zIHtcbiAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsgfVxuICAgICNwYWdlLXByb2R1Y3RzLWRlcGxveSAudG9wIGhncm91cCxcbiAgICAjcGFnZS1wcm9kdWN0cy1kZXBsb3kgLnRvcCBoZ3JvdXAgaDEge1xuICAgICAgbWFyZ2luLWxlZnQ6IGF1dG87XG4gICAgICBtYXJnaW4tcmlnaHQ6IGF1dG87IH0gfVxuXG4jcGFnZS1wcm9kdWN0cy1kZXBsb3kgc2VjdGlvbi5za2lwIHtcbiAgYmFja2dyb3VuZDogI2Y2ZjhmYzsgfVxuICAjcGFnZS1wcm9kdWN0cy1kZXBsb3kgc2VjdGlvbi5za2lwIC5jb250YWluZXIge1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICBwYWRkaW5nLWJvdHRvbTogMzhweDsgfVxuICAjcGFnZS1wcm9kdWN0cy1kZXBsb3kgc2VjdGlvbi5za2lwIGhncm91cCB7XG4gICAgcGFkZGluZy10b3A6IDcycHg7XG4gICAgd2lkdGg6IGNhbGMoNTAlIC0gNzdweCk7XG4gICAgcGFkZGluZy1ib3R0b206IDUwcHg7IH1cbiAgICBAbWVkaWEgKG1heC13aWR0aDogMTIxOXB4KSB7XG4gICAgICAjcGFnZS1wcm9kdWN0cy1kZXBsb3kgc2VjdGlvbi5za2lwIGhncm91cCB7XG4gICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7IH0gfVxuICAjcGFnZS1wcm9kdWN0cy1kZXBsb3kgc2VjdGlvbi5za2lwIGgyIHtcbiAgICBsaW5lLWhlaWdodDogNDFweDtcbiAgICBtYXJnaW4tYm90dG9tOiAyMnB4OyB9XG4gICNwYWdlLXByb2R1Y3RzLWRlcGxveSBzZWN0aW9uLnNraXAgcCB7XG4gICAgZm9udC1zaXplOiAxNnB4O1xuICAgIGxldHRlci1zcGFjaW5nOiAtMC4wMmVtOyB9XG4gICAgI3BhZ2UtcHJvZHVjdHMtZGVwbG95IHNlY3Rpb24uc2tpcCBwIHN0cm9uZyB7XG4gICAgICBjb2xvcjogIzM2M2E0MDsgfVxuICAjcGFnZS1wcm9kdWN0cy1kZXBsb3kgc2VjdGlvbi5za2lwIC5pdGVtcyB7XG4gICAgcGFkZGluZzogMDtcbiAgICB3aWR0aDogY2FsYyg1MCUgLSA1MHB4KTsgfVxuICAgIEBtZWRpYSAobWF4LXdpZHRoOiA3NjdweCkge1xuICAgICAgI3BhZ2UtcHJvZHVjdHMtZGVwbG95IHNlY3Rpb24uc2tpcCAuaXRlbXMge1xuICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgICAgICB3aWR0aDogMTAwJTsgfSB9XG4gICAgI3BhZ2UtcHJvZHVjdHMtZGVwbG95IHNlY3Rpb24uc2tpcCAuaXRlbXMgcCB7XG4gICAgICBmb250LXNpemU6IDE2cHg7XG4gICAgICBmb250LXdlaWdodDogNjAwO1xuICAgICAgbGV0dGVyLXNwYWNpbmc6IC0uMDI2ZW07XG4gICAgICBsaW5lLWhlaWdodDogMS44ZW07XG4gICAgICBtYXJnaW4tYm90dG9tOiAzMHB4O1xuICAgICAgY29sb3I6ICM1ZTY3Nzc7IH1cbiAgI3BhZ2UtcHJvZHVjdHMtZGVwbG95IHNlY3Rpb24uc2tpcCBsaSB7XG4gICAgZmxleDogMCAxIDI1NHB4O1xuICAgIHBhZGRpbmctcmlnaHQ6IDZweDsgfVxuICAgIEBtZWRpYSAobWF4LXdpZHRoOiAxMjE5cHgpIHtcbiAgICAgICNwYWdlLXByb2R1Y3RzLWRlcGxveSBzZWN0aW9uLnNraXAgbGkge1xuICAgICAgICBmbGV4LWJhc2lzOiAzMjFweDtcbiAgICAgICAgei1pbmRleDogMTsgfSB9XG4gICAgI3BhZ2UtcHJvZHVjdHMtZGVwbG95IHNlY3Rpb24uc2tpcCBsaTo6YmVmb3JlIHtcbiAgICAgIGJhY2tncm91bmQtaW1hZ2U6IHVybChcIi9pbWcvcHJvL2RlcGxveS9mZWF0dXJlLWljb25zLXNtLnBuZ1wiKTtcbiAgICAgIGJhY2tncm91bmQtc2l6ZTogNDhweDsgfVxuICAgICNwYWdlLXByb2R1Y3RzLWRlcGxveSBzZWN0aW9uLnNraXAgbGkubGl2ZTo6YmVmb3JlIHtcbiAgICAgIGJhY2tncm91bmQtcG9zaXRpb246IDAgMDsgfVxuICAgICNwYWdlLXByb2R1Y3RzLWRlcGxveSBzZWN0aW9uLnNraXAgbGkuYXV0b21hdGljOjpiZWZvcmUge1xuICAgICAgYmFja2dyb3VuZC1wb3NpdGlvbjogMCAtNDhweDsgfVxuICAgICNwYWdlLXByb2R1Y3RzLWRlcGxveSBzZWN0aW9uLnNraXAgbGkuc3BsaXQ6OmJlZm9yZSB7XG4gICAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwIC05NnB4OyB9XG4gICAgI3BhZ2UtcHJvZHVjdHMtZGVwbG95IHNlY3Rpb24uc2tpcCBsaS5jb21wbGlhbnQ6OmJlZm9yZSB7XG4gICAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwIC0xNDRweDsgfVxuICAjcGFnZS1wcm9kdWN0cy1kZXBsb3kgc2VjdGlvbi5za2lwIC5ncmFwaGljcyB7XG4gICAgYmFja2dyb3VuZDogdXJsKFwiL2ltZy9wcm8vZGVwbG95L2ZlYXR1cmUtaW1nLXNraXAucG5nXCIpIDAgMCBuby1yZXBlYXQ7XG4gICAgYmFja2dyb3VuZC1zaXplOiA3MjRweDtcbiAgICB3aWR0aDogNzI0cHg7XG4gICAgaGVpZ2h0OiA3MzlweDtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgYm90dG9tOiAwO1xuICAgIHJpZ2h0OiAwO1xuICAgIHRvcDogYXV0bztcbiAgICBvcGFjaXR5OiAwO1xuICAgIHRyYW5zaXRpb246IC4ycyBvcGFjaXR5OyB9XG4gICAgQG1lZGlhIChtYXgtd2lkdGg6IDk5MXB4KSB7XG4gICAgICAjcGFnZS1wcm9kdWN0cy1kZXBsb3kgc2VjdGlvbi5za2lwIC5ncmFwaGljcyB7XG4gICAgICAgIHJpZ2h0OiAtMTYwcHg7IH0gfVxuICAgIEBtZWRpYSAobWF4LXdpZHRoOiA3NjdweCkge1xuICAgICAgI3BhZ2UtcHJvZHVjdHMtZGVwbG95IHNlY3Rpb24uc2tpcCAuZ3JhcGhpY3Mge1xuICAgICAgICBkaXNwbGF5OiBub25lOyB9IH1cbiAgICAjcGFnZS1wcm9kdWN0cy1kZXBsb3kgc2VjdGlvbi5za2lwIC5ncmFwaGljcy5hY3RpdmUge1xuICAgICAgb3BhY2l0eTogMTsgfVxuXG4jcGFnZS1wcm9kdWN0cy1kZXBsb3kgc2VjdGlvbi5saXZlIGgyLCAjcGFnZS1wcm9kdWN0cy1kZXBsb3kgc2VjdGlvbi5sYXRlc3QgaDIsICNwYWdlLXByb2R1Y3RzLWRlcGxveSBzZWN0aW9uLnJ1biBoMiB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTsgfVxuICAjcGFnZS1wcm9kdWN0cy1kZXBsb3kgc2VjdGlvbi5saXZlIGgyOjpiZWZvcmUsICNwYWdlLXByb2R1Y3RzLWRlcGxveSBzZWN0aW9uLmxhdGVzdCBoMjo6YmVmb3JlLCAjcGFnZS1wcm9kdWN0cy1kZXBsb3kgc2VjdGlvbi5ydW4gaDI6OmJlZm9yZSB7XG4gICAgYmFja2dyb3VuZDogdXJsKFwiL2ltZy9wcm8vZGVwbG95L2ZlYXR1cmUtaWNvbnMtbGcucG5nXCIpIDAgMCBuby1yZXBlYXQ7XG4gICAgYmFja2dyb3VuZC1zaXplOiA2NHB4O1xuICAgIGhlaWdodDogNjRweDtcbiAgICB3aWR0aDogNjRweDtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgdG9wOiAwO1xuICAgIGxlZnQ6IDA7XG4gICAgY29udGVudDogJyc7IH1cbiAgICBAbWVkaWEgKG1heC13aWR0aDogNzY3cHgpIHtcbiAgICAgICNwYWdlLXByb2R1Y3RzLWRlcGxveSBzZWN0aW9uLmxpdmUgaDI6OmJlZm9yZSwgI3BhZ2UtcHJvZHVjdHMtZGVwbG95IHNlY3Rpb24ubGF0ZXN0IGgyOjpiZWZvcmUsICNwYWdlLXByb2R1Y3RzLWRlcGxveSBzZWN0aW9uLnJ1biBoMjo6YmVmb3JlIHtcbiAgICAgICAgbGVmdDogY2FsYyg1MCUgLSAzMnB4KTsgfSB9XG5cbkBtZWRpYSAobWF4LXdpZHRoOiA3NjdweCkge1xuICAjcGFnZS1wcm9kdWN0cy1kZXBsb3kgc2VjdGlvbi5saXZlIC5ncmFwaGljcywgI3BhZ2UtcHJvZHVjdHMtZGVwbG95IHNlY3Rpb24ubGF0ZXN0IC5ncmFwaGljcywgI3BhZ2UtcHJvZHVjdHMtZGVwbG95IHNlY3Rpb24ucnVuIC5ncmFwaGljcyB7XG4gICAgZGlzcGxheTogbm9uZTsgfSB9XG5cbiNwYWdlLXByb2R1Y3RzLWRlcGxveSBzZWN0aW9uLmxpdmUge1xuICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQodG8gcmlnaHQsICM1YjRjZmMgMCUsICM4ZTgzZmYgMTAwJSk7XG4gIG92ZXJmbG93OiBoaWRkZW47IH1cbiAgI3BhZ2UtcHJvZHVjdHMtZGVwbG95IHNlY3Rpb24ubGl2ZSBoZ3JvdXAge1xuICAgIHBhZGRpbmctdG9wOiAxMjdweDtcbiAgICBwYWRkaW5nLWJvdHRvbTogMTA3cHg7IH1cbiAgICBAbWVkaWEgKG1heC13aWR0aDogNzY3cHgpIHtcbiAgICAgICNwYWdlLXByb2R1Y3RzLWRlcGxveSBzZWN0aW9uLmxpdmUgaGdyb3VwIHtcbiAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsgfSB9XG4gICNwYWdlLXByb2R1Y3RzLWRlcGxveSBzZWN0aW9uLmxpdmUgaDIge1xuICAgIHBhZGRpbmctdG9wOiA4M3B4O1xuICAgIG1hcmdpbi1ib3R0b206IDIwcHg7XG4gICAgZm9udC1zaXplOiAzNnB4O1xuICAgIGZvbnQtd2VpZ2h0OiA3MDA7XG4gICAgbGV0dGVyLXNwYWNpbmc6IC0wLjAzZW07XG4gICAgbGluZS1oZWlnaHQ6IDQycHg7IH1cbiAgICAjcGFnZS1wcm9kdWN0cy1kZXBsb3kgc2VjdGlvbi5saXZlIGgyIHNwYW4ge1xuICAgICAgY29sb3I6IHdoaXRlOyB9XG4gICNwYWdlLXByb2R1Y3RzLWRlcGxveSBzZWN0aW9uLmxpdmUgcCB7XG4gICAgZm9udC1zaXplOiAxNnB4O1xuICAgIGxldHRlci1zcGFjaW5nOiAtMC4wMmVtO1xuICAgIGNvbG9yOiB3aGl0ZTsgfVxuICAjcGFnZS1wcm9kdWN0cy1kZXBsb3kgc2VjdGlvbi5saXZlIC5ncmFwaGljcyB7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIHJpZ2h0OiAwO1xuICAgIHdpZHRoOiA1MCU7IH1cbiAgICAjcGFnZS1wcm9kdWN0cy1kZXBsb3kgc2VjdGlvbi5saXZlIC5ncmFwaGljcyAuaXBob25lLFxuICAgICNwYWdlLXByb2R1Y3RzLWRlcGxveSBzZWN0aW9uLmxpdmUgLmdyYXBoaWNzIC5hbmRyb2lkIHtcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgIHdpZHRoOiAzMzBweDtcbiAgICAgIGhlaWdodDogNTE4cHg7XG4gICAgICBib3R0b206IDA7XG4gICAgICByaWdodDogMDsgfVxuICAgICAgI3BhZ2UtcHJvZHVjdHMtZGVwbG95IHNlY3Rpb24ubGl2ZSAuZ3JhcGhpY3MgLmlwaG9uZTo6YWZ0ZXIsXG4gICAgICAjcGFnZS1wcm9kdWN0cy1kZXBsb3kgc2VjdGlvbi5saXZlIC5ncmFwaGljcyAuYW5kcm9pZDo6YWZ0ZXIge1xuICAgICAgICBiYWNrZ3JvdW5kOiBuby1yZXBlYXQgMCAwO1xuICAgICAgICB6LWluZGV4OiAxO1xuICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgIHRvcDogMDtcbiAgICAgICAgcmlnaHQ6IDA7XG4gICAgICAgIHdpZHRoOiAzMzBweDtcbiAgICAgICAgaGVpZ2h0OiA1MThweDtcbiAgICAgICAgY29udGVudDogJyc7IH1cbiAgICAgICNwYWdlLXByb2R1Y3RzLWRlcGxveSBzZWN0aW9uLmxpdmUgLmdyYXBoaWNzIC5pcGhvbmUgLnNjcmVlbixcbiAgICAgICNwYWdlLXByb2R1Y3RzLWRlcGxveSBzZWN0aW9uLmxpdmUgLmdyYXBoaWNzIC5hbmRyb2lkIC5zY3JlZW4ge1xuICAgICAgICBiYWNrZ3JvdW5kOiBuby1yZXBlYXQgMCAwO1xuICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgIGJvdHRvbTogMDtcbiAgICAgICAgYW5pbWF0aW9uOiAxMHMgc2NyZWVuUG9wLTEgaW5maW5pdGU7IH1cbiAgICAgICAgI3BhZ2UtcHJvZHVjdHMtZGVwbG95IHNlY3Rpb24ubGl2ZSAuZ3JhcGhpY3MgLmlwaG9uZSAuc2NyZWVuOm50aC1jaGlsZCgyKSxcbiAgICAgICAgI3BhZ2UtcHJvZHVjdHMtZGVwbG95IHNlY3Rpb24ubGl2ZSAuZ3JhcGhpY3MgLmFuZHJvaWQgLnNjcmVlbjpudGgtY2hpbGQoMikge1xuICAgICAgICAgIGFuaW1hdGlvbi1uYW1lOiBzY3JlZW5Qb3AtMjsgfVxuICAgICAgICAjcGFnZS1wcm9kdWN0cy1kZXBsb3kgc2VjdGlvbi5saXZlIC5ncmFwaGljcyAuaXBob25lIC5zY3JlZW46bnRoLWNoaWxkKDMpLFxuICAgICAgICAjcGFnZS1wcm9kdWN0cy1kZXBsb3kgc2VjdGlvbi5saXZlIC5ncmFwaGljcyAuYW5kcm9pZCAuc2NyZWVuOm50aC1jaGlsZCgzKSB7XG4gICAgICAgICAgYW5pbWF0aW9uLW5hbWU6IHNjcmVlblBvcC0zOyB9XG4gICAgI3BhZ2UtcHJvZHVjdHMtZGVwbG95IHNlY3Rpb24ubGl2ZSAuZ3JhcGhpY3MgLmlwaG9uZSB7XG4gICAgICByaWdodDogMjUwcHg7XG4gICAgICB6LWluZGV4OiAxOyB9XG4gICAgICBAbWVkaWEgKG1heC13aWR0aDogOTkxcHgpIHtcbiAgICAgICAgI3BhZ2UtcHJvZHVjdHMtZGVwbG95IHNlY3Rpb24ubGl2ZSAuZ3JhcGhpY3MgLmlwaG9uZSB7XG4gICAgICAgICAgcmlnaHQ6IDEwMHB4OyB9IH1cbiAgICAgICNwYWdlLXByb2R1Y3RzLWRlcGxveSBzZWN0aW9uLmxpdmUgLmdyYXBoaWNzIC5pcGhvbmU6OmFmdGVyIHtcbiAgICAgICAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFwiL2ltZy9wcm8vZGVwbG95L2ZlYXR1cmUtaXBob25lLWRldmljZS5wbmdcIik7XG4gICAgICAgIGJhY2tncm91bmQtc2l6ZTogMzMwcHg7IH1cbiAgICAgICNwYWdlLXByb2R1Y3RzLWRlcGxveSBzZWN0aW9uLmxpdmUgLmdyYXBoaWNzIC5pcGhvbmUgLnNjcmVlbiB7XG4gICAgICAgIGJhY2tncm91bmQtaW1hZ2U6IHVybChcIi9pbWcvcHJvL2RlcGxveS9mZWF0dXJlLWlwaG9uZS1zY3JlZW4tMS5wbmdcIik7XG4gICAgICAgIGJhY2tncm91bmQtc2l6ZTogMjY2cHg7XG4gICAgICAgIHdpZHRoOiAyNjZweDtcbiAgICAgICAgaGVpZ2h0OiAzOTZweDtcbiAgICAgICAgcmlnaHQ6IDMycHg7IH1cbiAgICAgICAgI3BhZ2UtcHJvZHVjdHMtZGVwbG95IHNlY3Rpb24ubGl2ZSAuZ3JhcGhpY3MgLmlwaG9uZSAuc2NyZWVuOm50aC1jaGlsZCgyKSB7XG4gICAgICAgICAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFwiL2ltZy9wcm8vZGVwbG95L2ZlYXR1cmUtaXBob25lLXNjcmVlbi0yLnBuZ1wiKTtcbiAgICAgICAgICBiYWNrZ3JvdW5kLXNpemU6IDI2NnB4OyB9XG4gICAgICAgICNwYWdlLXByb2R1Y3RzLWRlcGxveSBzZWN0aW9uLmxpdmUgLmdyYXBoaWNzIC5pcGhvbmUgLnNjcmVlbjpudGgtY2hpbGQoMykge1xuICAgICAgICAgIGJhY2tncm91bmQtaW1hZ2U6IHVybChcIi9pbWcvcHJvL2RlcGxveS9mZWF0dXJlLWlwaG9uZS1zY3JlZW4tMy5wbmdcIik7XG4gICAgICAgICAgYmFja2dyb3VuZC1zaXplOiAyNjZweDsgfVxuICAgICNwYWdlLXByb2R1Y3RzLWRlcGxveSBzZWN0aW9uLmxpdmUgLmdyYXBoaWNzIC5hbmRyb2lkOjphZnRlciB7XG4gICAgICByaWdodDogMDtcbiAgICAgIGJhY2tncm91bmQtaW1hZ2U6IHVybChcIi9pbWcvcHJvL2RlcGxveS9mZWF0dXJlLWFuZHJvaWQtZGV2aWNlLnBuZ1wiKTtcbiAgICAgIGJhY2tncm91bmQtc2l6ZTogMzMwcHg7IH1cbiAgICAjcGFnZS1wcm9kdWN0cy1kZXBsb3kgc2VjdGlvbi5saXZlIC5ncmFwaGljcyAuYW5kcm9pZCAuc2NyZWVuIHtcbiAgICAgIGJhY2tncm91bmQtaW1hZ2U6IHVybChcIi9pbWcvcHJvL2RlcGxveS9mZWF0dXJlLWFuZHJvaWQtc2NyZWVuLTEucG5nXCIpO1xuICAgICAgYmFja2dyb3VuZC1zaXplOiAyODBweDtcbiAgICAgIHdpZHRoOiAyODBweDtcbiAgICAgIGhlaWdodDogNDYycHg7XG4gICAgICByaWdodDogMjZweDtcbiAgICAgIGFuaW1hdGlvbi1kZWxheTogLjI1czsgfVxuICAgICAgI3BhZ2UtcHJvZHVjdHMtZGVwbG95IHNlY3Rpb24ubGl2ZSAuZ3JhcGhpY3MgLmFuZHJvaWQgLnNjcmVlbjpudGgtY2hpbGQoMikge1xuICAgICAgICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXCIvaW1nL3Byby9kZXBsb3kvZmVhdHVyZS1hbmRyb2lkLXNjcmVlbi0yLnBuZ1wiKTtcbiAgICAgICAgYmFja2dyb3VuZC1zaXplOiAyODBweDtcbiAgICAgICAgYW5pbWF0aW9uLWRlbGF5OiAuMjVzOyB9XG4gICAgICAjcGFnZS1wcm9kdWN0cy1kZXBsb3kgc2VjdGlvbi5saXZlIC5ncmFwaGljcyAuYW5kcm9pZCAuc2NyZWVuOm50aC1jaGlsZCgzKSB7XG4gICAgICAgIGJhY2tncm91bmQtaW1hZ2U6IHVybChcIi9pbWcvcHJvL2RlcGxveS9mZWF0dXJlLWFuZHJvaWQtc2NyZWVuLTMucG5nXCIpO1xuICAgICAgICBiYWNrZ3JvdW5kLXNpemU6IDI4MHB4O1xuICAgICAgICBhbmltYXRpb24tZGVsYXk6IC4yNXM7IH1cblxuI3BhZ2UtcHJvZHVjdHMtZGVwbG95IHNlY3Rpb24ubGF0ZXN0IGhncm91cCB7XG4gIHdpZHRoOiBjYWxjKDUwJSAtIDEwOHB4KTtcbiAgcGFkZGluZy10b3A6IDEzMnB4O1xuICBwYWRkaW5nLXJpZ2h0OiAyNXB4O1xuICBwYWRkaW5nLWJvdHRvbTogMTIxcHg7IH1cbiAgQG1lZGlhIChtYXgtd2lkdGg6IDk5MXB4KSB7XG4gICAgI3BhZ2UtcHJvZHVjdHMtZGVwbG95IHNlY3Rpb24ubGF0ZXN0IGhncm91cCB7XG4gICAgICB3aWR0aDogNDUlOyB9IH1cbiAgQG1lZGlhIChtYXgtd2lkdGg6IDc2N3B4KSB7XG4gICAgI3BhZ2UtcHJvZHVjdHMtZGVwbG95IHNlY3Rpb24ubGF0ZXN0IGhncm91cCB7XG4gICAgICB3aWR0aDogMTAwJTtcbiAgICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICAgIHBhZGRpbmctcmlnaHQ6IDA7IH0gfVxuXG4jcGFnZS1wcm9kdWN0cy1kZXBsb3kgc2VjdGlvbi5sYXRlc3QgaDIge1xuICBwYWRkaW5nLXRvcDogODdweDtcbiAgZm9udC1zaXplOiAyN3B4O1xuICBsZXR0ZXItc3BhY2luZzogLS4wMjRlbTtcbiAgbWFyZ2luLWJvdHRvbTogMjBweDtcbiAgZm9udC1zaXplOiAzNnB4O1xuICBmb250LXdlaWdodDogNzAwO1xuICBsZXR0ZXItc3BhY2luZzogLTAuMDNlbTtcbiAgbGluZS1oZWlnaHQ6IDQycHg7IH1cbiAgI3BhZ2UtcHJvZHVjdHMtZGVwbG95IHNlY3Rpb24ubGF0ZXN0IGgyOjpiZWZvcmUge1xuICAgIGJhY2tncm91bmQtcG9zaXRpb246IDAgLTY0cHg7IH1cblxuI3BhZ2UtcHJvZHVjdHMtZGVwbG95IHNlY3Rpb24ubGF0ZXN0IHAge1xuICBmb250LXNpemU6IDE2cHg7XG4gIGxldHRlci1zcGFjaW5nOiAtMC4wMmVtOyB9XG5cbiNwYWdlLXByb2R1Y3RzLWRlcGxveSBzZWN0aW9uLmxhdGVzdCAuZ3JhcGhpY3Mge1xuICBiYWNrZ3JvdW5kOiB1cmwoXCIvaW1nL3Byby9kZXBsb3kvZmVhdHVyZS1pbWctbGF0ZXN0LnBuZ1wiKSAwIDUwJSBuby1yZXBlYXQ7XG4gIGJhY2tncm91bmQtc2l6ZTogNTg5cHg7XG4gIHdpZHRoOiA1ODlweDtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICBib3R0b206IDA7XG4gIGxlZnQ6IDA7XG4gIHRvcDogMDtcbiAgb3BhY2l0eTogMDtcbiAgdHJhbnNpdGlvbjogLjJzIG9wYWNpdHk7IH1cbiAgQG1lZGlhIChtYXgtd2lkdGg6IDk5MXB4KSB7XG4gICAgI3BhZ2UtcHJvZHVjdHMtZGVwbG95IHNlY3Rpb24ubGF0ZXN0IC5ncmFwaGljcyB7XG4gICAgICBiYWNrZ3JvdW5kLXNpemU6IDEwMCU7XG4gICAgICB3aWR0aDogNTAlOyB9IH1cbiAgI3BhZ2UtcHJvZHVjdHMtZGVwbG95IHNlY3Rpb24ubGF0ZXN0IC5ncmFwaGljcy5hY3RpdmUge1xuICAgIG9wYWNpdHk6IDE7IH1cblxuI3BhZ2UtcHJvZHVjdHMtZGVwbG95IHNlY3Rpb24ucnVuIHtcbiAgYmFja2dyb3VuZDogI2Y2ZjhmYzsgfVxuICAjcGFnZS1wcm9kdWN0cy1kZXBsb3kgc2VjdGlvbi5ydW4gaGdyb3VwIHtcbiAgICBwYWRkaW5nLXRvcDogMTI2cHg7XG4gICAgcGFkZGluZy1ib3R0b206IDEwOHB4OyB9XG4gICAgQG1lZGlhIChtYXgtd2lkdGg6IDk5MXB4KSB7XG4gICAgICAjcGFnZS1wcm9kdWN0cy1kZXBsb3kgc2VjdGlvbi5ydW4gaGdyb3VwIHtcbiAgICAgICAgd2lkdGg6IDQ1JTsgfSB9XG4gICAgQG1lZGlhIChtYXgtd2lkdGg6IDc2N3B4KSB7XG4gICAgICAjcGFnZS1wcm9kdWN0cy1kZXBsb3kgc2VjdGlvbi5ydW4gaGdyb3VwIHtcbiAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsgfSB9XG4gICNwYWdlLXByb2R1Y3RzLWRlcGxveSBzZWN0aW9uLnJ1biBoMiB7XG4gICAgcGFkZGluZy10b3A6IDgzcHg7XG4gICAgbWFyZ2luLWJvdHRvbTogMjBweDtcbiAgICBmb250LXNpemU6IDM2cHg7XG4gICAgZm9udC13ZWlnaHQ6IDcwMDtcbiAgICBsZXR0ZXItc3BhY2luZzogLTAuMDNlbTtcbiAgICBsaW5lLWhlaWdodDogNDJweDsgfVxuICAgICNwYWdlLXByb2R1Y3RzLWRlcGxveSBzZWN0aW9uLnJ1biBoMjo6YmVmb3JlIHtcbiAgICAgIGJhY2tncm91bmQtcG9zaXRpb246IDAgLTEyOHB4OyB9XG4gICNwYWdlLXByb2R1Y3RzLWRlcGxveSBzZWN0aW9uLnJ1biBwIHtcbiAgICBmb250LXNpemU6IDE2cHg7XG4gICAgbGV0dGVyLXNwYWNpbmc6IC0wLjAyZW07IH1cbiAgI3BhZ2UtcHJvZHVjdHMtZGVwbG95IHNlY3Rpb24ucnVuIC5ncmFwaGljcyB7XG4gICAgYmFja2dyb3VuZDogdXJsKFwiL2ltZy9wcm8vZGVwbG95L2ZlYXR1cmUtaW1nLWFidGVzdC5wbmdcIikgNTAlIDEwMCUgbm8tcmVwZWF0O1xuICAgIGJhY2tncm91bmQtc2l6ZTogNTI2cHg7XG4gICAgd2lkdGg6IDUyNnB4O1xuICAgIGhlaWdodDogNTEzcHg7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIGJvdHRvbTogMDtcbiAgICByaWdodDogMDtcbiAgICB0b3A6IGF1dG87XG4gICAgb3BhY2l0eTogMDtcbiAgICB0cmFuc2l0aW9uOiAuMnMgb3BhY2l0eTsgfVxuICAgIEBtZWRpYSAobWF4LXdpZHRoOiA5OTFweCkge1xuICAgICAgI3BhZ2UtcHJvZHVjdHMtZGVwbG95IHNlY3Rpb24ucnVuIC5ncmFwaGljcyB7XG4gICAgICAgIGJhY2tncm91bmQtc2l6ZTogMTAwJTtcbiAgICAgICAgYmFja2dyb3VuZC1wb3NpdGlvbjogMTAwJSAxMDAlO1xuICAgICAgICB3aWR0aDogNTAlOyB9IH1cbiAgICAjcGFnZS1wcm9kdWN0cy1kZXBsb3kgc2VjdGlvbi5ydW4gLmdyYXBoaWNzLmFjdGl2ZSB7XG4gICAgICBvcGFjaXR5OiAxOyB9XG5cbiNwYWdlLXByb2R1Y3RzLWRlcGxveSBzZWN0aW9uLmdldC1zdGFydGVkIHtcbiAgYmFja2dyb3VuZDogI2U3ZWNmNjsgfVxuICAjcGFnZS1wcm9kdWN0cy1kZXBsb3kgc2VjdGlvbi5nZXQtc3RhcnRlZCBoMiB7XG4gICAgY29sb3I6ICMyNzJhMmY7IH1cbiAgI3BhZ2UtcHJvZHVjdHMtZGVwbG95IHNlY3Rpb24uZ2V0LXN0YXJ0ZWQgcCB7XG4gICAgY29sb3I6ICM1ZTY3Nzc7IH1cbiAgI3BhZ2UtcHJvZHVjdHMtZGVwbG95IHNlY3Rpb24uZ2V0LXN0YXJ0ZWQgLmJ0biB7XG4gICAgcGFkZGluZzogMTJweCAxOXB4IDEwcHg7XG4gICAgZm9udC1zaXplOiAxNnB4O1xuICAgIGxldHRlci1zcGFjaW5nOiAtLjAyZW07XG4gICAgZm9udC13ZWlnaHQ6IDcwMDsgfVxuICAgICNwYWdlLXByb2R1Y3RzLWRlcGxveSBzZWN0aW9uLmdldC1zdGFydGVkIC5idG4ud2hpdGUge1xuICAgICAgY29sb3I6ICM1MjQ0ZmY7IH1cbiAgICAjcGFnZS1wcm9kdWN0cy1kZXBsb3kgc2VjdGlvbi5nZXQtc3RhcnRlZCAuYnRuLnB1cnBsZSB7XG4gICAgICBiYWNrZ3JvdW5kOiAjNWE0ZGZjO1xuICAgICAgbWFyZ2luLXJpZ2h0OiAycHg7IH1cblxuLnByb2R1Y3RzLXBhZ2Uge1xuICBmb250LWZhbWlseTogXCJFaW5hXCIsIFwiSGVsdmV0aWNhIE5ldWVcIiwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmO1xuICBwb3NpdGlvbjogcmVsYXRpdmU7IH1cbiAgLnByb2R1Y3RzLXBhZ2UgLnRvcCB7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlOyB9XG4gICAgLnByb2R1Y3RzLXBhZ2UgLnRvcCBoMSB7XG4gICAgICBsZXR0ZXItc3BhY2luZzogLS4wM2VtO1xuICAgICAgZm9udC13ZWlnaHQ6IDcwMDtcbiAgICAgIGZvbnQtc2l6ZTogNDhweDsgfVxuICAgIC5wcm9kdWN0cy1wYWdlIC50b3AgcCB7XG4gICAgICBmb250LXNpemU6IDIwcHg7XG4gICAgICBmb250LXdlaWdodDogNjAwO1xuICAgICAgbWFyZ2luLXRvcDogMTdweDtcbiAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICAgIGxldHRlci1zcGFjaW5nOiAtLjAzZW07XG4gICAgICBsaW5lLWhlaWdodDogMS41ZW07XG4gICAgICBjb2xvcjogIzJmMzc0NDsgfVxuICAgIC5wcm9kdWN0cy1wYWdlIC50b3AgLmdyYXBoaWNzIHtcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsgfVxuICAucHJvZHVjdHMtcGFnZSAuY2VudGVyIGhncm91cCB7XG4gICAgcGFkZGluZy10b3A6IDEwMHB4O1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICBtYXgtd2lkdGg6IDc0OHB4O1xuICAgIG1hcmdpbjogMCBhdXRvIDE4cHg7IH1cbiAgICAucHJvZHVjdHMtcGFnZSAuY2VudGVyIGhncm91cCBoMiB7XG4gICAgICBmb250LXNpemU6IDM2cHg7XG4gICAgICBmb250LXdlaWdodDogNzAwO1xuICAgICAgbGV0dGVyLXNwYWNpbmc6IC0uMDNlbTtcbiAgICAgIGNvbG9yOiAjMTYxYTFmOyB9XG4gICAgLnByb2R1Y3RzLXBhZ2UgLmNlbnRlciBoZ3JvdXAgcCB7XG4gICAgICBmb250LXNpemU6IDE4cHg7XG4gICAgICBjb2xvcjogIzVlNjc3NztcbiAgICAgIG1hcmdpbi10b3A6IDI5cHg7XG4gICAgICBsZXR0ZXItc3BhY2luZzogLTAuMDNlbTtcbiAgICAgIGxpbmUtaGVpZ2h0OiAxLjhlbTtcbiAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7IH1cbiAgICAucHJvZHVjdHMtcGFnZSAuY2VudGVyIGhncm91cCBwIHN0cm9uZyB7XG4gICAgICBjb2xvcjogIzI3MmEyZjtcbiAgICAgIGZvbnQtd2VpZ2h0OiA3MDA7IH1cbiAgLnByb2R1Y3RzLXBhZ2UgdWwuaXRlbXMge1xuICAgIHBhZGRpbmc6IDQ4cHggMTRweDtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcbiAgICBmbGV4LXdyYXA6IHdyYXA7IH1cbiAgICAucHJvZHVjdHMtcGFnZSB1bC5pdGVtcyBsaSB7XG4gICAgICBsaXN0LXN0eWxlOiBub25lO1xuICAgICAgcGFkZGluZy10b3A6IDY3cHg7XG4gICAgICBwb3NpdGlvbjogcmVsYXRpdmU7IH1cbiAgICAgIC5wcm9kdWN0cy1wYWdlIHVsLml0ZW1zIGxpOjpiZWZvcmUge1xuICAgICAgICBiYWNrZ3JvdW5kOiAwIDAgbm8tcmVwZWF0O1xuICAgICAgICBiYWNrZ3JvdW5kLXNpemU6IDEwMCU7XG4gICAgICAgIGhlaWdodDogNDhweDtcbiAgICAgICAgd2lkdGg6IDQ4cHg7XG4gICAgICAgIGNvbnRlbnQ6ICcnO1xuICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICB0b3A6IDA7IH1cbiAgICAgIC5wcm9kdWN0cy1wYWdlIHVsLml0ZW1zIGxpIHN0cm9uZyB7XG4gICAgICAgIGxldHRlci1zcGFjaW5nOiAtLjAzZW07XG4gICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICAgICAgZm9udC1zaXplOiAxN3B4O1xuICAgICAgICB0ZXh0LXRyYW5zZm9ybTogbm9uZTtcbiAgICAgICAgbGV0dGVyLXNwYWNpbmc6IC4wMDFlbTtcbiAgICAgICAgbWFyZ2luLXRvcDogNHB4O1xuICAgICAgICBtYXJnaW4tYm90dG9tOiAxMHB4OyB9XG4gICAgICAucHJvZHVjdHMtcGFnZSB1bC5pdGVtcyBsaSBwIHtcbiAgICAgICAgZm9udC1zaXplOiAxNnB4O1xuICAgICAgICBmb250LXdlaWdodDogNjAwO1xuICAgICAgICBsZXR0ZXItc3BhY2luZzogLS4wMjZlbTtcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuOGVtO1xuICAgICAgICBtYXJnaW4tYm90dG9tOiAzMHB4O1xuICAgICAgICBjb2xvcjogIzVlNjc3NzsgfVxuICAgICAgQG1lZGlhIChtYXgtd2lkdGg6IDc2N3B4KSB7XG4gICAgICAgIC5wcm9kdWN0cy1wYWdlIHVsLml0ZW1zIGxpIHtcbiAgICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgICAgICBmbGV4LWJhc2lzOiAxMDAlO1xuICAgICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsgfVxuICAgICAgICAgIC5wcm9kdWN0cy1wYWdlIHVsLml0ZW1zIGxpOjpiZWZvcmUge1xuICAgICAgICAgICAgbGVmdDogY2FsYyg1MCUgLSAyNHB4KTsgfSB9XG4gIC5wcm9kdWN0cy1wYWdlIHNlY3Rpb24ubGVmdCAuY29udGFpbmVyLFxuICAucHJvZHVjdHMtcGFnZSBzZWN0aW9uLnJpZ2h0IC5jb250YWluZXIsXG4gIC5wcm9kdWN0cy1wYWdlIHNlY3Rpb24uYm90aCAuY29udGFpbmVyIHtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7IH1cbiAgLnByb2R1Y3RzLXBhZ2Ugc2VjdGlvbi5sZWZ0IGhncm91cCxcbiAgLnByb2R1Y3RzLXBhZ2Ugc2VjdGlvbi5yaWdodCBoZ3JvdXAsXG4gIC5wcm9kdWN0cy1wYWdlIHNlY3Rpb24uYm90aCBoZ3JvdXAge1xuICAgIHBhZGRpbmctdG9wOiAyMDhweDtcbiAgICBwYWRkaW5nLWJvdHRvbTogMTUxcHg7XG4gICAgd2lkdGg6IGNhbGMoNTAlIC0gMTQ3cHgpO1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsgfVxuICAgIEBtZWRpYSAobWF4LXdpZHRoOiA5OTFweCkge1xuICAgICAgLnByb2R1Y3RzLXBhZ2Ugc2VjdGlvbi5sZWZ0IGhncm91cCxcbiAgICAgIC5wcm9kdWN0cy1wYWdlIHNlY3Rpb24ucmlnaHQgaGdyb3VwLFxuICAgICAgLnByb2R1Y3RzLXBhZ2Ugc2VjdGlvbi5ib3RoIGhncm91cCB7XG4gICAgICAgIHdpZHRoOiBjYWxjKDUwJSAtIDQ4cHgpOyB9IH1cbiAgICAucHJvZHVjdHMtcGFnZSBzZWN0aW9uLmxlZnQgaGdyb3VwOjpiZWZvcmUsXG4gICAgLnByb2R1Y3RzLXBhZ2Ugc2VjdGlvbi5yaWdodCBoZ3JvdXA6OmJlZm9yZSxcbiAgICAucHJvZHVjdHMtcGFnZSBzZWN0aW9uLmJvdGggaGdyb3VwOjpiZWZvcmUge1xuICAgICAgYmFja2dyb3VuZDogMCAwIG5vLXJlcGVhdDtcbiAgICAgIGJhY2tncm91bmQtc2l6ZTogMTAwJTtcbiAgICAgIGhlaWdodDogNjRweDtcbiAgICAgIHdpZHRoOiA2NHB4O1xuICAgICAgY29udGVudDogJyc7XG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICB0b3A6IDEyNnB4O1xuICAgICAgZGlzcGxheTogYmxvY2s7IH1cbiAgICAucHJvZHVjdHMtcGFnZSBzZWN0aW9uLmxlZnQgaGdyb3VwOjphZnRlcixcbiAgICAucHJvZHVjdHMtcGFnZSBzZWN0aW9uLnJpZ2h0IGhncm91cDo6YWZ0ZXIsXG4gICAgLnByb2R1Y3RzLXBhZ2Ugc2VjdGlvbi5ib3RoIGhncm91cDo6YWZ0ZXIge1xuICAgICAgY29udGVudDogJyc7XG4gICAgICBjbGVhcjogYm90aDtcbiAgICAgIGRpc3BsYXk6IHRhYmxlOyB9XG4gICAgLnByb2R1Y3RzLXBhZ2Ugc2VjdGlvbi5sZWZ0IGhncm91cCBoMixcbiAgICAucHJvZHVjdHMtcGFnZSBzZWN0aW9uLnJpZ2h0IGhncm91cCBoMixcbiAgICAucHJvZHVjdHMtcGFnZSBzZWN0aW9uLmJvdGggaGdyb3VwIGgyIHtcbiAgICAgIG1hcmdpbi1ib3R0b206IDIwcHg7XG4gICAgICBmb250LXNpemU6IDM2cHg7XG4gICAgICBmb250LXdlaWdodDogNzAwO1xuICAgICAgbGV0dGVyLXNwYWNpbmc6IC0wLjAzZW07XG4gICAgICBsaW5lLWhlaWdodDogNDJweDsgfVxuICAgIC5wcm9kdWN0cy1wYWdlIHNlY3Rpb24ubGVmdCBoZ3JvdXAgcCxcbiAgICAucHJvZHVjdHMtcGFnZSBzZWN0aW9uLnJpZ2h0IGhncm91cCBwLFxuICAgIC5wcm9kdWN0cy1wYWdlIHNlY3Rpb24uYm90aCBoZ3JvdXAgcCB7XG4gICAgICBmb250LXNpemU6IDE2cHg7XG4gICAgICBmb250LXdlaWdodDogNjAwO1xuICAgICAgbGV0dGVyLXNwYWNpbmc6IC0uMDI2ZW07XG4gICAgICBsaW5lLWhlaWdodDogMS44ZW07XG4gICAgICBtYXJnaW4tYm90dG9tOiAzMHB4O1xuICAgICAgY29sb3I6ICM1ZTY3Nzc7IH1cbiAgICAgIC5wcm9kdWN0cy1wYWdlIHNlY3Rpb24ubGVmdCBoZ3JvdXAgcCBzdHJvbmcsXG4gICAgICAucHJvZHVjdHMtcGFnZSBzZWN0aW9uLnJpZ2h0IGhncm91cCBwIHN0cm9uZyxcbiAgICAgIC5wcm9kdWN0cy1wYWdlIHNlY3Rpb24uYm90aCBoZ3JvdXAgcCBzdHJvbmcge1xuICAgICAgICBmb250LXdlaWdodDogNjAwOyB9XG4gIC5wcm9kdWN0cy1wYWdlIHNlY3Rpb24ubGVmdCAuZ3JhcGhpY3MsXG4gIC5wcm9kdWN0cy1wYWdlIHNlY3Rpb24ucmlnaHQgLmdyYXBoaWNzLFxuICAucHJvZHVjdHMtcGFnZSBzZWN0aW9uLmJvdGggLmdyYXBoaWNzIHtcbiAgICBiYWNrZ3JvdW5kOiAwIDUwJSBuby1yZXBlYXQ7XG4gICAgYmFja2dyb3VuZC1zaXplOiAxMDAlO1xuICAgIHdpZHRoOiA0NzBweDtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgcmlnaHQ6IDA7XG4gICAgYm90dG9tOiAwO1xuICAgIHRvcDogMDtcbiAgICBvcGFjaXR5OiAwOyB9XG4gICAgLnByb2R1Y3RzLXBhZ2Ugc2VjdGlvbi5sZWZ0IC5ncmFwaGljcy5hY3RpdmF0ZU9uU2Nyb2xsLFxuICAgIC5wcm9kdWN0cy1wYWdlIHNlY3Rpb24ucmlnaHQgLmdyYXBoaWNzLmFjdGl2YXRlT25TY3JvbGwsXG4gICAgLnByb2R1Y3RzLXBhZ2Ugc2VjdGlvbi5ib3RoIC5ncmFwaGljcy5hY3RpdmF0ZU9uU2Nyb2xsIHtcbiAgICAgIGZpbHRlcjogYmx1cigxMHB4KTtcbiAgICAgIHRyYW5zaXRpb246IC40cyBvcGFjaXR5LCAuNHMgZmlsdGVyOyB9XG4gICAgICAucHJvZHVjdHMtcGFnZSBzZWN0aW9uLmxlZnQgLmdyYXBoaWNzLmFjdGl2YXRlT25TY3JvbGwuYWN0aXZlLFxuICAgICAgLnByb2R1Y3RzLXBhZ2Ugc2VjdGlvbi5yaWdodCAuZ3JhcGhpY3MuYWN0aXZhdGVPblNjcm9sbC5hY3RpdmUsXG4gICAgICAucHJvZHVjdHMtcGFnZSBzZWN0aW9uLmJvdGggLmdyYXBoaWNzLmFjdGl2YXRlT25TY3JvbGwuYWN0aXZlIHtcbiAgICAgICAgb3BhY2l0eTogMTtcbiAgICAgICAgZmlsdGVyOiBibHVyKDApOyB9XG4gICAgQG1lZGlhIChtYXgtd2lkdGg6IDk5MXB4KSB7XG4gICAgICAucHJvZHVjdHMtcGFnZSBzZWN0aW9uLmxlZnQgLmdyYXBoaWNzLFxuICAgICAgLnByb2R1Y3RzLXBhZ2Ugc2VjdGlvbi5yaWdodCAuZ3JhcGhpY3MsXG4gICAgICAucHJvZHVjdHMtcGFnZSBzZWN0aW9uLmJvdGggLmdyYXBoaWNzIHtcbiAgICAgICAgcmlnaHQ6IC0yMCU7IH0gfVxuICAucHJvZHVjdHMtcGFnZSBzZWN0aW9uLnJpZ2h0IGhncm91cCB7XG4gICAgZmxvYXQ6IHJpZ2h0OyB9XG4gIC5wcm9kdWN0cy1wYWdlIHNlY3Rpb24ucmlnaHQgLmdyYXBoaWNzIHtcbiAgICByaWdodDogYXV0bztcbiAgICBsZWZ0OiAwOyB9XG4gICAgQG1lZGlhIChtYXgtd2lkdGg6IDk5MXB4KSB7XG4gICAgICAucHJvZHVjdHMtcGFnZSBzZWN0aW9uLnJpZ2h0IC5ncmFwaGljcyB7XG4gICAgICAgIGxlZnQ6IC0yMCU7IH0gfVxuICAucHJvZHVjdHMtcGFnZSBzZWN0aW9uLmJvdGggLmNvbnRhaW5lciB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBjbGVhcjogYm90aDtcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47IH1cbiAgICAucHJvZHVjdHMtcGFnZSBzZWN0aW9uLmJvdGggLmNvbnRhaW5lcjo6YmVmb3JlLCAucHJvZHVjdHMtcGFnZSBzZWN0aW9uLmJvdGggLmNvbnRhaW5lcjo6YWZ0ZXIge1xuICAgICAgZGlzcGxheTogbm9uZTsgfVxuICAucHJvZHVjdHMtcGFnZSAuZ2V0LXN0YXJ0ZWQge1xuICAgIGJhY2tncm91bmQ6IDAgMCBuby1yZXBlYXQ7XG4gICAgYmFja2dyb3VuZC1zaXplOiBjb3ZlcjsgfVxuICAgIC5wcm9kdWN0cy1wYWdlIC5nZXQtc3RhcnRlZCAuY29udGFpbmVyIHtcbiAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICBwYWRkaW5nLXRvcDogMTAxcHg7XG4gICAgICBwYWRkaW5nLWJvdHRvbTogMTAycHg7XG4gICAgICBmbGV4LXdyYXA6IHdyYXA7XG4gICAgICBhbGlnbi1pdGVtczogY2VudGVyOyB9XG4gICAgICAucHJvZHVjdHMtcGFnZSAuZ2V0LXN0YXJ0ZWQgLmNvbnRhaW5lcjo6YmVmb3JlLCAucHJvZHVjdHMtcGFnZSAuZ2V0LXN0YXJ0ZWQgLmNvbnRhaW5lcjo6YWZ0ZXIge1xuICAgICAgICBkaXNwbGF5OiBub25lOyB9XG4gICAgICBAbWVkaWEgKG1heC13aWR0aDogOTkxcHgpIHtcbiAgICAgICAgLnByb2R1Y3RzLXBhZ2UgLmdldC1zdGFydGVkIC5jb250YWluZXIge1xuICAgICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsgfSB9XG4gICAgLnByb2R1Y3RzLXBhZ2UgLmdldC1zdGFydGVkIGhncm91cCxcbiAgICAucHJvZHVjdHMtcGFnZSAuZ2V0LXN0YXJ0ZWQgLmJ0bnMge1xuICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOyB9XG4gICAgLnByb2R1Y3RzLXBhZ2UgLmdldC1zdGFydGVkIGhncm91cCB7XG4gICAgICBmbGV4LWdyb3c6IDE7IH1cbiAgICAucHJvZHVjdHMtcGFnZSAuZ2V0LXN0YXJ0ZWQgaDIge1xuICAgICAgY29sb3I6IHdoaXRlO1xuICAgICAgZm9udC1zaXplOiAyOHB4O1xuICAgICAgbGV0dGVyLXNwYWNpbmc6IC0uMDNlbTtcbiAgICAgIG1hcmdpbi10b3A6IDMwcHg7XG4gICAgICBtYXJnaW4tYm90dG9tOiA1cHg7XG4gICAgICBmb250LXdlaWdodDogNjAwOyB9XG4gICAgLnByb2R1Y3RzLXBhZ2UgLmdldC1zdGFydGVkIHAge1xuICAgICAgZm9udC1zaXplOiAyMHB4O1xuICAgICAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgICAgIGxldHRlci1zcGFjaW5nOiAtLjAyZW07XG4gICAgICBjb2xvcjogIzAwM2U4MjsgfVxuICAgIC5wcm9kdWN0cy1wYWdlIC5nZXQtc3RhcnRlZCAuYnRucyAuYnRuIHtcbiAgICAgIHBhZGRpbmc6IDEycHggMTlweCAxMHB4O1xuICAgICAgZm9udC1zaXplOiAxNnB4O1xuICAgICAgZm9udC13ZWlnaHQ6IDcwMDsgfVxuICAgICAgLnByb2R1Y3RzLXBhZ2UgLmdldC1zdGFydGVkIC5idG5zIC5idG46bGFzdC1jaGlsZCB7XG4gICAgICAgIG1hcmdpbi1yaWdodDogLTVweDsgfVxuICAgICAgQG1lZGlhIChtYXgtd2lkdGg6IDc2N3B4KSB7XG4gICAgICAgIC5wcm9kdWN0cy1wYWdlIC5nZXQtc3RhcnRlZCAuYnRucyAuYnRuIHtcbiAgICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgICAgbWFyZ2luOiAxNnB4IGF1dG87IH0gfVxuICAgIEBtZWRpYSAobWF4LXdpZHRoOiA5OTFweCkge1xuICAgICAgLnByb2R1Y3RzLXBhZ2UgLmdldC1zdGFydGVkIC5idG5zIHtcbiAgICAgICAgd2lkdGg6IDEwMCU7IH0gfVxuXG4jcGFnZS1wcm9kdWN0cy1tb25pdG9yIC50b3Age1xuICBtYXJnaW4tdG9wOiAtMTUwcHg7XG4gIHBhZGRpbmctdG9wOiAxNzRweDtcbiAgYmFja2dyb3VuZDogIzBjMWMxYztcbiAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KHRvIHJpZ2h0LCAjMDUxMzEyIDAlLCAjMTEyNjI0IDEwMCUpO1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7IH1cbiAgI3BhZ2UtcHJvZHVjdHMtbW9uaXRvciAudG9wIGhncm91cCB7XG4gICAgcGFkZGluZy10b3A6IDk3cHg7XG4gICAgcGFkZGluZy1ib3R0b206IDM1NXB4O1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsgfVxuICAgICNwYWdlLXByb2R1Y3RzLW1vbml0b3IgLnRvcCBoZ3JvdXA6OmJlZm9yZSB7XG4gICAgICBiYWNrZ3JvdW5kOiB1cmwoXCIvaW1nL3Byby9tb25pdG9yL21vbml0b3ItY3RhLWljb24ucG5nXCIpIDAgMCBuby1yZXBlYXQ7XG4gICAgICBiYWNrZ3JvdW5kLXNpemU6IDgwcHg7XG4gICAgICB3aWR0aDogODBweDtcbiAgICAgIGhlaWdodDogODBweDtcbiAgICAgIGNvbnRlbnQ6ICcnO1xuICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgdG9wOiAwO1xuICAgICAgbGVmdDogY2FsYyg1MCUgLSA0MHB4KTsgfVxuICAjcGFnZS1wcm9kdWN0cy1tb25pdG9yIC50b3AgaDEge1xuICAgIGNvbG9yOiB3aGl0ZTtcbiAgICBsZXR0ZXItc3BhY2luZzogLS4wM2VtO1xuICAgIGZvbnQtd2VpZ2h0OiA3MDA7XG4gICAgZm9udC1zaXplOiA0OHB4O1xuICAgIG1heC13aWR0aDogODYwcHg7XG4gICAgbWFyZ2luLWxlZnQ6IGF1dG87XG4gICAgbWFyZ2luLXJpZ2h0OiBhdXRvOyB9XG4gICNwYWdlLXByb2R1Y3RzLW1vbml0b3IgLnRvcCBwIHtcbiAgICBjb2xvcjogI2FiYjNiMjtcbiAgICBtYXgtd2lkdGg6IDc2MHB4O1xuICAgIG1hcmdpbi1ib3R0b206IDMycHg7IH1cbiAgICAjcGFnZS1wcm9kdWN0cy1tb25pdG9yIC50b3AgcCBzdHJvbmcge1xuICAgICAgY29sb3I6IHdoaXRlO1xuICAgICAgZm9udC13ZWlnaHQ6IDcwMDsgfVxuICAjcGFnZS1wcm9kdWN0cy1tb25pdG9yIC50b3AgLmJ0bnMge1xuICAgIG1hcmdpbi10b3A6IDE2cHg7IH1cbiAgICAjcGFnZS1wcm9kdWN0cy1tb25pdG9yIC50b3AgLmJ0bnMgLmJ0biB7XG4gICAgICBmb250LXNpemU6IDE2cHg7XG4gICAgICBmb250LXdlaWdodDogNzAwOyB9XG4gICAgICAjcGFnZS1wcm9kdWN0cy1tb25pdG9yIC50b3AgLmJ0bnMgLmJ0bi5ncmVlbiB7XG4gICAgICAgIGJhY2tncm91bmQ6ICMzMWNhNzQ7XG4gICAgICAgIHBhZGRpbmc6IDEycHggMTlweCAxMHB4O1xuICAgICAgICBtYXJnaW4tcmlnaHQ6IDlweDsgfVxuICAgICAgI3BhZ2UtcHJvZHVjdHMtbW9uaXRvciAudG9wIC5idG5zIC5idG4uZGFyayB7XG4gICAgICAgIGNvbG9yOiAjMzFjYTc0O1xuICAgICAgICBiYWNrZ3JvdW5kOiAjMzEzZjNmO1xuICAgICAgICBwYWRkaW5nOiAxMnB4IDE5cHggMTBweDsgfVxuXG4jcGFnZS1wcm9kdWN0cy1tb25pdG9yICNoZWFydC1tb25pdG9yLXN0YWdlIHtcbiAgaGVpZ2h0OiAyNTBweDtcbiAgd2lkdGg6IDQwMHB4O1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIGJvdHRvbTogNjRweDtcbiAgbGVmdDogY2FsYyg1MCUgLSAyMDBweCk7XG4gIG92ZXJmbG93OiBoaWRkZW47IH1cbiAgI3BhZ2UtcHJvZHVjdHMtbW9uaXRvciAjaGVhcnQtbW9uaXRvci1zdGFnZSAjZ3JpZCB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7XG4gICAgYmFja2dyb3VuZC1pbWFnZTogbGluZWFyLWdyYWRpZW50KDBkZWcsIHRyYW5zcGFyZW50IDI0JSwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjA1KSAyNSUsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wNSkgMjYlLCB0cmFuc3BhcmVudCAyNyUsIHRyYW5zcGFyZW50IDc0JSwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjA1KSA3NSUsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wNSkgNzYlLCB0cmFuc3BhcmVudCA3NyUsIHRyYW5zcGFyZW50KSwgbGluZWFyLWdyYWRpZW50KDkwZGVnLCB0cmFuc3BhcmVudCAyNCUsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wNSkgMjUlLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDUpIDI2JSwgdHJhbnNwYXJlbnQgMjclLCB0cmFuc3BhcmVudCA3NCUsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wNSkgNzUlLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDUpIDc2JSwgdHJhbnNwYXJlbnQgNzclLCB0cmFuc3BhcmVudCk7XG4gICAgaGVpZ2h0OiAxMDAlO1xuICAgIGJhY2tncm91bmQtc2l6ZTogNTBweCA1MHB4O1xuICAgIG1hc2staW1hZ2U6IHJhZGlhbC1ncmFkaWVudChibGFjayAyMCUsIHRyYW5zcGFyZW50IDcwJSk7IH1cbiAgI3BhZ2UtcHJvZHVjdHMtbW9uaXRvciAjaGVhcnQtbW9uaXRvci1zdGFnZSAjZWRnZXMsXG4gICNwYWdlLXByb2R1Y3RzLW1vbml0b3IgI2hlYXJ0LW1vbml0b3Itc3RhZ2UgI3Nwb3RsaWdodCB7XG4gICAgYmFja2dyb3VuZC1pbWFnZTogbGluZWFyLWdyYWRpZW50KHRvIHJpZ2h0LCAjMDUxNDEzLCAjMTAyNjI0KTtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgdG9wOiAwO1xuICAgIHJpZ2h0OiAwO1xuICAgIGJvdHRvbTogMDtcbiAgICBsZWZ0OiAwO1xuICAgIHotaW5kZXg6IDE7XG4gICAgbWFzay1pbWFnZTogcmFkaWFsLWdyYWRpZW50KHRyYW5zcGFyZW50IDUwJSwgYmxhY2sgNzAlKTsgfVxuICAjcGFnZS1wcm9kdWN0cy1tb25pdG9yICNoZWFydC1tb25pdG9yLXN0YWdlICNzcG90bGlnaHQge1xuICAgIGxlZnQ6IC0xMDAlO1xuICAgIG1hc2staW1hZ2U6IHJhZGlhbC1ncmFkaWVudCh0cmFuc3BhcmVudCAzMCUsIGJsYWNrIDgwJSk7IH1cbiAgI3BhZ2UtcHJvZHVjdHMtbW9uaXRvciAjaGVhcnQtbW9uaXRvci1zdGFnZSBzdmcge1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIGhlaWdodDogMTAwJTtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgdG9wOiAwOyB9XG4gICNwYWdlLXByb2R1Y3RzLW1vbml0b3IgI2hlYXJ0LW1vbml0b3Itc3RhZ2UgLnBhdGgge1xuICAgIGZpbGw6IHRyYW5zcGFyZW50O1xuICAgIHN0cm9rZTogcmdiYSgwLCAyMDAsIDEyNiwgMC41KTtcbiAgICBzdHJva2UtbWl0ZXJsaW1pdDogMTA7IH1cbiAgI3BhZ2UtcHJvZHVjdHMtbW9uaXRvciAjaGVhcnQtbW9uaXRvci1zdGFnZSAucGF0aC0zIHtcbiAgICBmaWxsOiB0cmFuc3BhcmVudDtcbiAgICBzdHJva2U6IHJnYmEoMCwgMjAwLCAxMjYsIDAuOCk7XG4gICAgc3Ryb2tlLW1pdGVybGltaXQ6IDEwOyB9XG4gICNwYWdlLXByb2R1Y3RzLW1vbml0b3IgI2hlYXJ0LW1vbml0b3Itc3RhZ2UgLnBhdGgtMiB7XG4gICAgZmlsbDogdHJhbnNwYXJlbnQ7XG4gICAgc3Ryb2tlOiAjOWFmZmMwO1xuICAgIHN0cm9rZS1taXRlcmxpbWl0OiAyMDsgfVxuXG4jcGFnZS1wcm9kdWN0cy1tb25pdG9yIC5waW5wb2ludCAuY29udGFpbmVyIHtcbiAgbWF4LXdpZHRoOiAxMDkycHg7IH1cblxuI3BhZ2UtcHJvZHVjdHMtbW9uaXRvciAucGlucG9pbnQgaGdyb3VwIHtcbiAgbWF4LXdpZHRoOiA5NjBweDsgfVxuICAjcGFnZS1wcm9kdWN0cy1tb25pdG9yIC5waW5wb2ludCBoZ3JvdXAgaDMge1xuICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XG4gICAgY29sb3I6ICMxZWQxNzY7XG4gICAgZm9udC13ZWlnaHQ6IDcwMDtcbiAgICBsZXR0ZXItc3BhY2luZzogLjA2ZW07XG4gICAgZm9udC1zaXplOiAyNHB4OyB9XG4gICNwYWdlLXByb2R1Y3RzLW1vbml0b3IgLnBpbnBvaW50IGhncm91cCBoMiB7XG4gICAgbWFyZ2luLXRvcDogMTVweDsgfVxuICAjcGFnZS1wcm9kdWN0cy1tb25pdG9yIC5waW5wb2ludCBoZ3JvdXAgcCBzdHJvbmcge1xuICAgIGZvbnQtd2VpZ2h0OiA2MDA7IH1cblxuI3BhZ2UtcHJvZHVjdHMtbW9uaXRvciAucGlucG9pbnQgLml0ZW1zIHtcbiAgcGFkZGluZzogNTBweCAwIDQ2cHg7IH1cbiAgI3BhZ2UtcHJvZHVjdHMtbW9uaXRvciAucGlucG9pbnQgLml0ZW1zIGxpIHtcbiAgICBmbGV4OiAwIDEgMzAzcHg7IH1cbiAgICBAbWVkaWEgKG1heC13aWR0aDogOTkxcHgpIHtcbiAgICAgICNwYWdlLXByb2R1Y3RzLW1vbml0b3IgLnBpbnBvaW50IC5pdGVtcyBsaSB7XG4gICAgICAgIGZsZXgtYmFzaXM6IDIwMHB4OyB9IH1cbiAgICBAbWVkaWEgKG1heC13aWR0aDogNzY3cHgpIHtcbiAgICAgICNwYWdlLXByb2R1Y3RzLW1vbml0b3IgLnBpbnBvaW50IC5pdGVtcyBsaSB7XG4gICAgICAgIGZsZXgtYmFzaXM6IDEwMCU7IH0gfVxuICAgICNwYWdlLXByb2R1Y3RzLW1vbml0b3IgLnBpbnBvaW50IC5pdGVtcyBsaTo6YmVmb3JlIHtcbiAgICAgIGJhY2tncm91bmQ6IHVybChcIi9pbWcvcHJvL21vbml0b3IvZmVhdHVyZS1pY29ucy1zbS5wbmdcIikgMCAwIG5vLXJlcGVhdDtcbiAgICAgIGJhY2tncm91bmQtc2l6ZTogNDhweDsgfVxuICAgICNwYWdlLXByb2R1Y3RzLW1vbml0b3IgLnBpbnBvaW50IC5pdGVtcyBsaS5idWlsdDo6YmVmb3JlIHtcbiAgICAgIGJhY2tncm91bmQtcG9zaXRpb246IDAgLTQ4cHg7IH1cbiAgICAjcGFnZS1wcm9kdWN0cy1tb25pdG9yIC5waW5wb2ludCAuaXRlbXMgbGkudHlwZXNjcmlwdDo6YmVmb3JlIHtcbiAgICAgIGJhY2tncm91bmQtcG9zaXRpb246IDAgLTk2cHg7IH1cbiAgI3BhZ2UtcHJvZHVjdHMtbW9uaXRvciAucGlucG9pbnQgLml0ZW1zIHN0cm9uZyB7XG4gICAgbWFyZ2luLWJvdHRvbTogMTBweDsgfVxuICAjcGFnZS1wcm9kdWN0cy1tb25pdG9yIC5waW5wb2ludCAuaXRlbXMgcCB7XG4gICAgZm9udC1zaXplOiAxNnB4O1xuICAgIGxldHRlci1zcGFjaW5nOiAtLjAyZW07XG4gICAgbGluZS1oZWlnaHQ6IDI4cHg7IH1cblxuI3BhZ2UtcHJvZHVjdHMtbW9uaXRvciAucGlucG9pbnQgLmdldC1zdGFydGVkIHtcbiAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XG4gIGJvcmRlci10b3A6IDFweCBzb2xpZCAjZjBmNGY4O1xuICBwYWRkaW5nLXRvcDogMzBweDtcbiAgcGFkZGluZy1ib3R0b206IDY0cHg7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7IH1cbiAgI3BhZ2UtcHJvZHVjdHMtbW9uaXRvciAucGlucG9pbnQgLmdldC1zdGFydGVkIGhncm91cCB7XG4gICAgdGV4dC1hbGlnbjogbGVmdDtcbiAgICBtYXJnaW4tbGVmdDogMDtcbiAgICBwYWRkaW5nLXRvcDogMDtcbiAgICBtYXJnaW4tdG9wOiAyMHB4OyB9XG4gICNwYWdlLXByb2R1Y3RzLW1vbml0b3IgLnBpbnBvaW50IC5nZXQtc3RhcnRlZCBoMiB7XG4gICAgY29sb3I6ICMxZWQxNzY7XG4gICAgbWFyZ2luLWJvdHRvbTogMDtcbiAgICBmb250LXNpemU6IDI4cHg7XG4gICAgbGV0dGVyLXNwYWNpbmc6IC0uMDNlbTtcbiAgICBmb250LXdlaWdodDogNjAwOyB9XG4gICNwYWdlLXByb2R1Y3RzLW1vbml0b3IgLnBpbnBvaW50IC5nZXQtc3RhcnRlZCBwIHtcbiAgICBtYXJnaW4tdG9wOiAwO1xuICAgIGxldHRlci1zcGFjaW5nOiAtLjAyZW07IH1cbiAgICAjcGFnZS1wcm9kdWN0cy1tb25pdG9yIC5waW5wb2ludCAuZ2V0LXN0YXJ0ZWQgcCBzdHJvbmcge1xuICAgICAgZm9udC13ZWlnaHQ6IDcwMDtcbiAgICAgIGxldHRlci1zcGFjaW5nOiAwOyB9XG4gICNwYWdlLXByb2R1Y3RzLW1vbml0b3IgLnBpbnBvaW50IC5nZXQtc3RhcnRlZCAuYnRuIHtcbiAgICBiYWNrZ3JvdW5kOiAjMWVkMTc2O1xuICAgIG1hcmdpbi1yaWdodDogNHB4O1xuICAgIHBhZGRpbmc6IDEycHggMTlweCAxMHB4O1xuICAgIGZvbnQtc2l6ZTogMTZweDtcbiAgICBmb250LXdlaWdodDogNzAwO1xuICAgIGxldHRlci1zcGFjaW5nOiAuMDFlbTsgfVxuICBAbWVkaWEgKG1heC13aWR0aDogOTkxcHgpIHtcbiAgICAjcGFnZS1wcm9kdWN0cy1tb25pdG9yIC5waW5wb2ludCAuZ2V0LXN0YXJ0ZWQgLmJ0bnMge1xuICAgICAgd2lkdGg6IGF1dG87IH0gfVxuXG4jcGFnZS1wcm9kdWN0cy1tb25pdG9yIHNlY3Rpb24ubGVmdCBoZ3JvdXA6OmJlZm9yZSxcbiNwYWdlLXByb2R1Y3RzLW1vbml0b3Igc2VjdGlvbi5yaWdodCBoZ3JvdXA6OmJlZm9yZSxcbiNwYWdlLXByb2R1Y3RzLW1vbml0b3Igc2VjdGlvbi5ib3RoIGhncm91cDo6YmVmb3JlIHtcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFwiL2ltZy9wcm8vbW9uaXRvci9mZWF0dXJlLWljb25zLWxnLnBuZ1wiKTtcbiAgYmFja2dyb3VuZC1zaXplOiA2NHB4OyB9XG4gIEBtZWRpYSAobWF4LXdpZHRoOiA5OTFweCkge1xuICAgICNwYWdlLXByb2R1Y3RzLW1vbml0b3Igc2VjdGlvbi5sZWZ0IGhncm91cDo6YmVmb3JlLFxuICAgICNwYWdlLXByb2R1Y3RzLW1vbml0b3Igc2VjdGlvbi5yaWdodCBoZ3JvdXA6OmJlZm9yZSxcbiAgICAjcGFnZS1wcm9kdWN0cy1tb25pdG9yIHNlY3Rpb24uYm90aCBoZ3JvdXA6OmJlZm9yZSB7XG4gICAgICBsZWZ0OiBjYWxjKDUwJSAtIDMycHgpOyB9IH1cblxuI3BhZ2UtcHJvZHVjdHMtbW9uaXRvciBzZWN0aW9uLmxlZnQgaDIsXG4jcGFnZS1wcm9kdWN0cy1tb25pdG9yIHNlY3Rpb24ucmlnaHQgaDIsXG4jcGFnZS1wcm9kdWN0cy1tb25pdG9yIHNlY3Rpb24uYm90aCBoMiB7XG4gIG1hcmdpbi1ib3R0b206IDIwcHg7XG4gIGZvbnQtc2l6ZTogMzZweDtcbiAgZm9udC13ZWlnaHQ6IDcwMDtcbiAgbGV0dGVyLXNwYWNpbmc6IC0wLjAzZW07XG4gIGxpbmUtaGVpZ2h0OiA0MnB4OyB9XG5cbiNwYWdlLXByb2R1Y3RzLW1vbml0b3Igc2VjdGlvbi5sZWZ0IHAsXG4jcGFnZS1wcm9kdWN0cy1tb25pdG9yIHNlY3Rpb24ucmlnaHQgcCxcbiNwYWdlLXByb2R1Y3RzLW1vbml0b3Igc2VjdGlvbi5ib3RoIHAge1xuICBmb250LXNpemU6IDE3cHg7XG4gIGxldHRlci1zcGFjaW5nOiAtLjAwOGVtOyB9XG5cbkBtZWRpYSAobWF4LXdpZHRoOiA5OTFweCkge1xuICAjcGFnZS1wcm9kdWN0cy1tb25pdG9yIHNlY3Rpb24ubGVmdCBoZ3JvdXAsXG4gICNwYWdlLXByb2R1Y3RzLW1vbml0b3Igc2VjdGlvbi5yaWdodCBoZ3JvdXAsXG4gICNwYWdlLXByb2R1Y3RzLW1vbml0b3Igc2VjdGlvbi5ib3RoIGhncm91cCB7XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgZmxvYXQ6IG5vbmU7XG4gICAgdGV4dC1hbGlnbjogY2VudGVyOyB9IH1cblxuI3BhZ2UtcHJvZHVjdHMtbW9uaXRvciAuY29uZmlkZW5jZSB7XG4gIGJhY2tncm91bmQ6ICNmNGY5Zjc7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTsgfVxuICAjcGFnZS1wcm9kdWN0cy1tb25pdG9yIC5jb25maWRlbmNlIC5jb250YWluZXIge1xuICAgIHBvc2l0aW9uOiBzdGF0aWM7IH1cbiAgI3BhZ2UtcHJvZHVjdHMtbW9uaXRvciAuY29uZmlkZW5jZSBoZ3JvdXAge1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICB6LWluZGV4OiAxOyB9XG4gICNwYWdlLXByb2R1Y3RzLW1vbml0b3IgLmNvbmZpZGVuY2UgLmdyYXBoaWNzIHtcbiAgICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXCIvaW1nL3Byby9tb25pdG9yL2ZlYXR1cmUtaW1nLWNvbmZpZGVuY2UucG5nXCIpO1xuICAgIGJhY2tncm91bmQtc2l6ZTogMTE0NXB4O1xuICAgIGJhY2tncm91bmQtcG9zaXRpb246IGJvdHRvbSBjZW50ZXI7XG4gICAgd2lkdGg6IDExNDVweDsgfVxuICAgIEBtZWRpYSAobWF4LXdpZHRoOiAxMjE5cHgpIHtcbiAgICAgICNwYWdlLXByb2R1Y3RzLW1vbml0b3IgLmNvbmZpZGVuY2UgLmdyYXBoaWNzIHtcbiAgICAgICAgcmlnaHQ6IC0yMCU7IH0gfVxuICAgIEBtZWRpYSAobWF4LXdpZHRoOiA5OTFweCkge1xuICAgICAgI3BhZ2UtcHJvZHVjdHMtbW9uaXRvciAuY29uZmlkZW5jZSAuZ3JhcGhpY3Mge1xuICAgICAgICBkaXNwbGF5OiBub25lOyB9IH1cblxuI3BhZ2UtcHJvZHVjdHMtbW9uaXRvciAuYWhlYWQge1xuICBiYWNrZ3JvdW5kOiAjZTFlYmU5OyB9XG4gICNwYWdlLXByb2R1Y3RzLW1vbml0b3IgLmFoZWFkIGhncm91cDo6YmVmb3JlIHtcbiAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwIC02NHB4OyB9XG4gICNwYWdlLXByb2R1Y3RzLW1vbml0b3IgLmFoZWFkIC5ncmFwaGljcyB7XG4gICAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFwiL2ltZy9wcm8vbW9uaXRvci9mZWF0dXJlLWltZy1haGVhZC5wbmdcIik7XG4gICAgYmFja2dyb3VuZC1zaXplOiA2MjFweDtcbiAgICB3aWR0aDogNjIxcHg7IH1cbiAgICBAbWVkaWEgKG1heC13aWR0aDogOTkxcHgpIHtcbiAgICAgICNwYWdlLXByb2R1Y3RzLW1vbml0b3IgLmFoZWFkIC5ncmFwaGljcyB7XG4gICAgICAgIGRpc3BsYXk6IG5vbmU7IH0gfVxuXG4jcGFnZS1wcm9kdWN0cy1tb25pdG9yIC5ib3RoIHtcbiAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KHRvIHJpZ2h0LCAjN2M5YzkxIDUwJSwgIzRlNzM2NiA1MCUpOyB9XG4gICNwYWdlLXByb2R1Y3RzLW1vbml0b3IgLmJvdGggaGdyb3VwOjpiZWZvcmUge1xuICAgIGJhY2tncm91bmQtcG9zaXRpb246IDAgLTEyOHB4OyB9XG4gICNwYWdlLXByb2R1Y3RzLW1vbml0b3IgLmJvdGggaGdyb3VwICsgaGdyb3VwOjpiZWZvcmUge1xuICAgIGJhY2tncm91bmQtcG9zaXRpb246IDAgLTE5MnB4OyB9XG4gICNwYWdlLXByb2R1Y3RzLW1vbml0b3IgLmJvdGggaDIge1xuICAgIGNvbG9yOiB3aGl0ZTsgfVxuICAjcGFnZS1wcm9kdWN0cy1tb25pdG9yIC5ib3RoIHAge1xuICAgIGNvbG9yOiAjYmRkOGQzOyB9XG4gICAgI3BhZ2UtcHJvZHVjdHMtbW9uaXRvciAuYm90aCBwIHN0cm9uZyB7XG4gICAgICBjb2xvcjogI2U1ZmVmYTsgfVxuICBAbWVkaWEgKG1heC13aWR0aDogOTkxcHgpIHtcbiAgICAjcGFnZS1wcm9kdWN0cy1tb25pdG9yIC5ib3RoIHtcbiAgICAgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCh0byBib3R0b20sICM3YzljOTEgNTAlLCAjNGU3MzY2IDUwJSk7IH1cbiAgICAgICNwYWdlLXByb2R1Y3RzLW1vbml0b3IgLmJvdGggLmNvbnRhaW5lciB7XG4gICAgICAgIGRpc3BsYXk6IGJsb2NrOyB9IH1cblxuI3BhZ2UtcHJvZHVjdHMtbW9uaXRvciBzZWN0aW9uLmdldC1zdGFydGVkIHtcbiAgYmFja2dyb3VuZDogI2U2ZjFlZDsgfVxuICAjcGFnZS1wcm9kdWN0cy1tb25pdG9yIHNlY3Rpb24uZ2V0LXN0YXJ0ZWQgaDIge1xuICAgIGNvbG9yOiAjMjAyNjI0OyB9XG4gICNwYWdlLXByb2R1Y3RzLW1vbml0b3Igc2VjdGlvbi5nZXQtc3RhcnRlZCBwIHtcbiAgICBjb2xvcjogIzU1Njg2MTsgfVxuICAgICNwYWdlLXByb2R1Y3RzLW1vbml0b3Igc2VjdGlvbi5nZXQtc3RhcnRlZCBwIHN0cm9uZyB7XG4gICAgICBmb250LXdlaWdodDogNjAwOyB9XG4gICNwYWdlLXByb2R1Y3RzLW1vbml0b3Igc2VjdGlvbi5nZXQtc3RhcnRlZCAuYnRuLmdyZWVuIHtcbiAgICBiYWNrZ3JvdW5kOiAjMWVkMTc2OyB9XG4gICNwYWdlLXByb2R1Y3RzLW1vbml0b3Igc2VjdGlvbi5nZXQtc3RhcnRlZCAuYnRuLndoaXRlIHtcbiAgICBjb2xvcjogIzFlZDE3NjsgfVxuXG4jcGFnZS1wcm9kdWN0cy1wYWNrYWdlIC5zdWItaGVhZGVyID4gLmNvbnRhaW5lciB7XG4gIHotaW5kZXg6IDI7IH1cblxuI3BhZ2UtcHJvZHVjdHMtcGFja2FnZSAudG9wIHtcbiAgY2xlYXI6IGJvdGg7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgdG9wOiAtMTQ0cHg7XG4gIG92ZXJmbG93OiBoaWRkZW47XG4gIHBhZGRpbmctdG9wOiAxNzhweDtcbiAgYmFja2dyb3VuZDogI2U3YTJkZDtcbiAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KHRvIHJpZ2h0LCAjYzY5NmY4IDAlLCAjZmNhNWE3IDEwMCUpOyB9XG4gICNwYWdlLXByb2R1Y3RzLXBhY2thZ2UgLnRvcCBoZ3JvdXAge1xuICAgIHBhZGRpbmctdG9wOiAxMDNweDtcbiAgICBwYWRkaW5nLWJvdHRvbTogMTQ4cHg7XG4gICAgdGV4dC1hbGlnbjogbGVmdDtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgei1pbmRleDogNTsgfVxuICAgICNwYWdlLXByb2R1Y3RzLXBhY2thZ2UgLnRvcCBoZ3JvdXA6OmJlZm9yZSB7XG4gICAgICBiYWNrZ3JvdW5kOiB1cmwoXCIvaW1nL3Byby9wYWNrYWdlL3BhY2thZ2UtaGVyby1pY29uLnBuZ1wiKSBuby1yZXBlYXQgMCAwO1xuICAgICAgYmFja2dyb3VuZC1zaXplOiA4MHB4O1xuICAgICAgd2lkdGg6IDgwcHg7XG4gICAgICBoZWlnaHQ6IDgwcHg7XG4gICAgICBjb250ZW50OiAnJztcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgIHRvcDogMDtcbiAgICAgIGxlZnQ6IDE1cHg7IH1cbiAgICAjcGFnZS1wcm9kdWN0cy1wYWNrYWdlIC50b3AgaGdyb3VwIGgxLFxuICAgICNwYWdlLXByb2R1Y3RzLXBhY2thZ2UgLnRvcCBoZ3JvdXAgcCB7XG4gICAgICBjb2xvcjogd2hpdGU7IH1cbiAgICAjcGFnZS1wcm9kdWN0cy1wYWNrYWdlIC50b3AgaGdyb3VwIGgxIHtcbiAgICAgIG1heC13aWR0aDogMzUwcHg7IH1cbiAgICAjcGFnZS1wcm9kdWN0cy1wYWNrYWdlIC50b3AgaGdyb3VwIHAge1xuICAgICAgY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC45KTtcbiAgICAgIG1heC13aWR0aDogNDc1cHg7XG4gICAgICBsZXR0ZXItc3BhY2luZzogLS4wM2VtO1xuICAgICAgbGluZS1oZWlnaHQ6IDEuNWVtO1xuICAgICAgZm9udC1zaXplOiAyMHB4OyB9XG4gICAgICAjcGFnZS1wcm9kdWN0cy1wYWNrYWdlIC50b3AgaGdyb3VwIHAgc3Ryb25nIHtcbiAgICAgICAgY29sb3I6IHdoaXRlOyB9XG4gICAgI3BhZ2UtcHJvZHVjdHMtcGFja2FnZSAudG9wIGhncm91cCAuYnRucyB7XG4gICAgICBtYXJnaW4tdG9wOiAzMnB4OyB9XG4gICAgICAjcGFnZS1wcm9kdWN0cy1wYWNrYWdlIC50b3AgaGdyb3VwIC5idG5zIC5idG4ge1xuICAgICAgICBmb250LXNpemU6IDE2cHg7XG4gICAgICAgIGZvbnQtd2VpZ2h0OiA3MDA7IH1cbiAgICAgICAgI3BhZ2UtcHJvZHVjdHMtcGFja2FnZSAudG9wIGhncm91cCAuYnRucyAuYnRuLnBpbmsge1xuICAgICAgICAgIGJhY2tncm91bmQ6ICNlMzM3NjY7XG4gICAgICAgICAgbWFyZ2luLXJpZ2h0OiA5cHg7XG4gICAgICAgICAgcGFkZGluZzogMTJweCAxOXB4IDEycHg7IH1cbiAgICAgICAgI3BhZ2UtcHJvZHVjdHMtcGFja2FnZSAudG9wIGhncm91cCAuYnRucyAuYnRuLndoaXRlIHtcbiAgICAgICAgICBjb2xvcjogI2UzMzc2NjtcbiAgICAgICAgICBwYWRkaW5nOiAxMnB4IDE5cHggMTJweDsgfVxuICBAbWVkaWEgKG1heC13aWR0aDogNzY3cHgpIHtcbiAgICAjcGFnZS1wcm9kdWN0cy1wYWNrYWdlIC50b3AgaGdyb3VwOmJlZm9yZSB7XG4gICAgICBsZWZ0OiA1MCU7XG4gICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTQwcHgpOyB9XG4gICAgI3BhZ2UtcHJvZHVjdHMtcGFja2FnZSAudG9wIGhncm91cCxcbiAgICAjcGFnZS1wcm9kdWN0cy1wYWNrYWdlIC50b3AgLmJ0bnMge1xuICAgICAgdGV4dC1hbGlnbjogY2VudGVyOyB9XG4gICAgI3BhZ2UtcHJvZHVjdHMtcGFja2FnZSAudG9wIGhncm91cCxcbiAgICAjcGFnZS1wcm9kdWN0cy1wYWNrYWdlIC50b3AgaGdyb3VwIGgxIHtcbiAgICAgIG1hcmdpbi1sZWZ0OiBhdXRvO1xuICAgICAgbWFyZ2luLXJpZ2h0OiBhdXRvOyB9IH1cbiAgI3BhZ2UtcHJvZHVjdHMtcGFja2FnZSAudG9wIC5ncmFwaGljcyB7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIHRvcDogMDtcbiAgICByaWdodDogMDtcbiAgICBib3R0b206IDA7XG4gICAgd2lkdGg6IDUwJTtcbiAgICB6LWluZGV4OiAxOyB9XG4gICNwYWdlLXByb2R1Y3RzLXBhY2thZ2UgLnRvcCAuY2xvdWQge1xuICAgIG9wYWNpdHk6IDA7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIHRvcDogMjAwcHg7XG4gICAgbGVmdDogLTIwMHB4O1xuICAgIHdpZHRoOiAzNDZweDtcbiAgICBoZWlnaHQ6IDMxMnB4O1xuICAgIGFuaW1hdGlvbjogNDBzIGZsb2F0aW5nQ2xvdWQgbGluZWFyIGluZmluaXRlO1xuICAgIHotaW5kZXg6IDU7IH1cbiAgICAjcGFnZS1wcm9kdWN0cy1wYWNrYWdlIC50b3AgLmNsb3VkOjpiZWZvcmUge1xuICAgICAgYmFja2dyb3VuZDogdXJsKFwiL2ltZy9wcm8vcGFja2FnZS9wYWNrYWdlLWhlcm8tY2xvdWQucG5nXCIpIG5vLXJlcGVhdCAwIDA7XG4gICAgICBiYWNrZ3JvdW5kLXNpemU6IDM0NnB4O1xuICAgICAgdG9wOiAwO1xuICAgICAgYm90dG9tOiAwO1xuICAgICAgcmlnaHQ6IDA7XG4gICAgICBsZWZ0OiAwO1xuICAgICAgY29udGVudDogJyc7XG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGU7IH1cbiAgICAjcGFnZS1wcm9kdWN0cy1wYWNrYWdlIC50b3AgLmNsb3VkIC5idWlsZCB7XG4gICAgICBiYWNrZ3JvdW5kOiB1cmwoXCIvaW1nL3Byby9wYWNrYWdlL3BhY2thZ2UtaGVyby1hcHAtaWNvbi5wbmdcIikgbm8tcmVwZWF0IDAgMDtcbiAgICAgIGJhY2tncm91bmQtc2l6ZTogODdweDtcbiAgICAgIHdpZHRoOiA4N3B4O1xuICAgICAgaGVpZ2h0OiAxMTZweDtcbiAgICAgIGNvbnRlbnQ6ICcnO1xuICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgdG9wOiAzMHB4O1xuICAgICAgbGVmdDogMjBweDtcbiAgICAgIGFuaW1hdGlvbjogMTBzIHJhaW5Ecm9wIGxpbmVhciBpbmZpbml0ZTtcbiAgICAgIHotaW5kZXg6IDY7IH1cbiAgICAgICNwYWdlLXByb2R1Y3RzLXBhY2thZ2UgLnRvcCAuY2xvdWQgLmJ1aWxkOm50aC1jaGlsZCgyKSB7XG4gICAgICAgIHRvcDogMTY2cHg7XG4gICAgICAgIGxlZnQ6IDIyMHB4O1xuICAgICAgICBhbmltYXRpb24tZGVsYXk6IC44cztcbiAgICAgICAgYW5pbWF0aW9uLWR1cmF0aW9uOiA4czsgfVxuICAgICAgI3BhZ2UtcHJvZHVjdHMtcGFja2FnZSAudG9wIC5jbG91ZCAuYnVpbGQ6bnRoLWNoaWxkKDMpIHtcbiAgICAgICAgdG9wOiAzM3B4O1xuICAgICAgICBsZWZ0OiAxMzBweDtcbiAgICAgICAgYW5pbWF0aW9uLWRlbGF5OiAxLjhzO1xuICAgICAgICBhbmltYXRpb24tZHVyYXRpb246IDlzOyB9XG4gICAgICAjcGFnZS1wcm9kdWN0cy1wYWNrYWdlIC50b3AgLmNsb3VkIC5idWlsZDpudGgtY2hpbGQoNCkge1xuICAgICAgICB0b3A6IDUwcHg7XG4gICAgICAgIGxlZnQ6IDYwcHg7XG4gICAgICAgIGFuaW1hdGlvbi1kZWxheTogMi44cztcbiAgICAgICAgYW5pbWF0aW9uLWR1cmF0aW9uOiAxMnM7IH1cbiAgICAjcGFnZS1wcm9kdWN0cy1wYWNrYWdlIC50b3AgLmNsb3VkOm50aC1jaGlsZCgyKSB7XG4gICAgICB0b3A6IDA7XG4gICAgICBsZWZ0OiAwO1xuICAgICAgdHJhbnNmb3JtOiBzY2FsZTNkKDAuNSwgMC41LCAxKTtcbiAgICAgIGFuaW1hdGlvbi1uYW1lOiBmbG9hdGluZ0Nsb3VkLTI7XG4gICAgICBhbmltYXRpb24tZHVyYXRpb246IDYwcztcbiAgICAgIGFuaW1hdGlvbi1kZWxheTogMTBzO1xuICAgICAgei1pbmRleDogMTsgfVxuICAgICAgI3BhZ2UtcHJvZHVjdHMtcGFja2FnZSAudG9wIC5jbG91ZDpudGgtY2hpbGQoMikgLmJ1aWxkIHtcbiAgICAgICAgei1pbmRleDogMjtcbiAgICAgICAgYW5pbWF0aW9uLWRlbGF5OiAxczsgfVxuICAgICAgICAjcGFnZS1wcm9kdWN0cy1wYWNrYWdlIC50b3AgLmNsb3VkOm50aC1jaGlsZCgyKSAuYnVpbGQ6bnRoLWNoaWxkKDIpIHtcbiAgICAgICAgICBhbmltYXRpb24tZGVsYXk6IDJzOyB9XG4gICAgICAgICNwYWdlLXByb2R1Y3RzLXBhY2thZ2UgLnRvcCAuY2xvdWQ6bnRoLWNoaWxkKDIpIC5idWlsZDpudGgtY2hpbGQoMykge1xuICAgICAgICAgIGFuaW1hdGlvbi1kZWxheTogM3M7IH1cbiAgICAgICAgI3BhZ2UtcHJvZHVjdHMtcGFja2FnZSAudG9wIC5jbG91ZDpudGgtY2hpbGQoMikgLmJ1aWxkOm50aC1jaGlsZCg0KSB7XG4gICAgICAgICAgYW5pbWF0aW9uLWRlbGF5OiA0czsgfVxuICAgICNwYWdlLXByb2R1Y3RzLXBhY2thZ2UgLnRvcCAuY2xvdWQ6bnRoLWNoaWxkKDMpIHtcbiAgICAgIHRvcDogMTBweDtcbiAgICAgIGxlZnQ6IC0xNTBweDtcbiAgICAgIGFuaW1hdGlvbi1uYW1lOiBmbG9hdGluZ0Nsb3VkLTM7XG4gICAgICBhbmltYXRpb24tZHVyYXRpb246IDUwcztcbiAgICAgIGFuaW1hdGlvbi1kZWxheTogMnM7XG4gICAgICB6LWluZGV4OiAzOyB9XG4gICAgICAjcGFnZS1wcm9kdWN0cy1wYWNrYWdlIC50b3AgLmNsb3VkOm50aC1jaGlsZCgzKSAuYnVpbGQge1xuICAgICAgICB6LWluZGV4OiA0O1xuICAgICAgICBhbmltYXRpb24tZGVsYXk6IC4xczsgfVxuICAgICAgICAjcGFnZS1wcm9kdWN0cy1wYWNrYWdlIC50b3AgLmNsb3VkOm50aC1jaGlsZCgzKSAuYnVpbGQ6bnRoLWNoaWxkKDIpIHtcbiAgICAgICAgICBhbmltYXRpb24tZGVsYXk6IC4yczsgfVxuICAgICAgICAjcGFnZS1wcm9kdWN0cy1wYWNrYWdlIC50b3AgLmNsb3VkOm50aC1jaGlsZCgzKSAuYnVpbGQ6bnRoLWNoaWxkKDMpIHtcbiAgICAgICAgICBhbmltYXRpb24tZGVsYXk6IC4zczsgfVxuICAgICAgICAjcGFnZS1wcm9kdWN0cy1wYWNrYWdlIC50b3AgLmNsb3VkOm50aC1jaGlsZCgzKSAuYnVpbGQ6bnRoLWNoaWxkKDQpIHtcbiAgICAgICAgICBhbmltYXRpb24tZGVsYXk6IC40czsgfVxuICAgICNwYWdlLXByb2R1Y3RzLXBhY2thZ2UgLnRvcCAuY2xvdWQ6bnRoLWNoaWxkKDQpIHtcbiAgICAgIHRvcDogMzAwcHg7XG4gICAgICBsZWZ0OiAtMjUwcHg7XG4gICAgICBhbmltYXRpb24tbmFtZTogZmxvYXRpbmdDbG91ZC00O1xuICAgICAgYW5pbWF0aW9uLWR1cmF0aW9uOiAzMHM7XG4gICAgICBhbmltYXRpb24tZGVsYXk6IDJzO1xuICAgICAgei1pbmRleDogMzsgfVxuICAgICAgI3BhZ2UtcHJvZHVjdHMtcGFja2FnZSAudG9wIC5jbG91ZDpudGgtY2hpbGQoNCkgLmJ1aWxkIHtcbiAgICAgICAgei1pbmRleDogNDtcbiAgICAgICAgYW5pbWF0aW9uLWRlbGF5OiAuMXM7IH1cbiAgICAgICAgI3BhZ2UtcHJvZHVjdHMtcGFja2FnZSAudG9wIC5jbG91ZDpudGgtY2hpbGQoNCkgLmJ1aWxkOm50aC1jaGlsZCgyKSB7XG4gICAgICAgICAgYW5pbWF0aW9uLWRlbGF5OiAuMnM7IH1cbiAgICAgICAgI3BhZ2UtcHJvZHVjdHMtcGFja2FnZSAudG9wIC5jbG91ZDpudGgtY2hpbGQoNCkgLmJ1aWxkOm50aC1jaGlsZCgzKSB7XG4gICAgICAgICAgYW5pbWF0aW9uLWRlbGF5OiAuM3M7IH1cbiAgICAgICAgI3BhZ2UtcHJvZHVjdHMtcGFja2FnZSAudG9wIC5jbG91ZDpudGgtY2hpbGQoNCkgLmJ1aWxkOm50aC1jaGlsZCg0KSB7XG4gICAgICAgICAgYW5pbWF0aW9uLWRlbGF5OiAuNHM7IH1cblxuI3BhZ2UtcHJvZHVjdHMtcGFja2FnZSAuZmVhdHVyZXMge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIHotaW5kZXg6IDEwO1xuICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQodG8gcmlnaHQsICNlZmRkZmYgMCwgI2ZmZTNlNCAxMDAlKTsgfVxuICBAc3VwcG9ydHMgKGJhY2tkcm9wLWZpbHRlcjogYmx1cigxMHB4KSkge1xuICAgICNwYWdlLXByb2R1Y3RzLXBhY2thZ2UgLmZlYXR1cmVzIHtcbiAgICAgIGJhY2tkcm9wLWZpbHRlcjogYmx1cigxMHB4KTtcbiAgICAgIGJhY2tncm91bmQ6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC42KTsgfSB9XG4gICNwYWdlLXByb2R1Y3RzLXBhY2thZ2UgLmZlYXR1cmVzIHVsIHtcbiAgICBwYWRkaW5nOiA3MXB4IDBweCA0NXB4OyB9XG4gICAgQG1lZGlhIChtYXgtd2lkdGg6IDc2N3B4KSB7XG4gICAgICAjcGFnZS1wcm9kdWN0cy1wYWNrYWdlIC5mZWF0dXJlcyB1bCB7XG4gICAgICAgIGRpc3BsYXk6IGJsb2NrOyB9IH1cbiAgI3BhZ2UtcHJvZHVjdHMtcGFja2FnZSAuZmVhdHVyZXMgbGkge1xuICAgIGZsZXg6IDAgMSAzMTVweDsgfVxuICAgIEBtZWRpYSAobWF4LXdpZHRoOiAxMjE5cHgpIHtcbiAgICAgICNwYWdlLXByb2R1Y3RzLXBhY2thZ2UgLmZlYXR1cmVzIGxpIHtcbiAgICAgICAgZmxleDogMCAxIDMwM3B4OyB9IH1cbiAgICAjcGFnZS1wcm9kdWN0cy1wYWNrYWdlIC5mZWF0dXJlcyBsaTo6YmVmb3JlIHtcbiAgICAgIGJhY2tncm91bmQtaW1hZ2U6IHVybChcIi9pbWcvcHJvL3BhY2thZ2UvZmVhdHVyZS1pY29ucy1zbS5wbmdcIik7XG4gICAgICBiYWNrZ3JvdW5kLXNpemU6IDQ4cHg7IH1cbiAgICAjcGFnZS1wcm9kdWN0cy1wYWNrYWdlIC5mZWF0dXJlcyBsaS56ZXJvOjpiZWZvcmUge1xuICAgICAgYmFja2dyb3VuZC1wb3NpdGlvbjogMCAtNDhweDsgfVxuICAgICNwYWdlLXByb2R1Y3RzLXBhY2thZ2UgLmZlYXR1cmVzIGxpLnBlYWNlOjpiZWZvcmUge1xuICAgICAgYmFja2dyb3VuZC1wb3NpdGlvbjogMCAtOTZweDsgfVxuICAjcGFnZS1wcm9kdWN0cy1wYWNrYWdlIC5mZWF0dXJlcyBwIHtcbiAgICBsZXR0ZXItc3BhY2luZzogLTAuMDJlbTtcbiAgICBtYXJnaW4tdG9wOiAycHg7XG4gICAgbWFyZ2luLXJpZ2h0OiA1cHg7IH1cblxuI3BhZ2UtcHJvZHVjdHMtcGFja2FnZSBtYWluIHtcbiAgbWFyZ2luLXRvcDogLTE0NHB4OyB9XG5cbiNwYWdlLXByb2R1Y3RzLXBhY2thZ2UgLnR1cm4ge1xuICBiYWNrZ3JvdW5kOiAjZjhmNWZiOyB9XG4gICNwYWdlLXByb2R1Y3RzLXBhY2thZ2UgLnR1cm4gaGdyb3VwIHtcbiAgICBtYXgtd2lkdGg6IDc0MHB4O1xuICAgIHBhZGRpbmctdG9wOiAxMDBweDtcbiAgICBwYWRkaW5nLWJvdHRvbTogNDIzcHg7IH1cbiAgICBAbWVkaWEgKG1heC13aWR0aDogMTIxOXB4KSB7XG4gICAgICAjcGFnZS1wcm9kdWN0cy1wYWNrYWdlIC50dXJuIGhncm91cCB7XG4gICAgICAgIHBhZGRpbmctYm90dG9tOiAzMTRweDsgfSB9XG4gICNwYWdlLXByb2R1Y3RzLXBhY2thZ2UgLnR1cm4gcCB7XG4gICAgbWFyZ2luLXRvcDogMzBweDsgfVxuICAjcGFnZS1wcm9kdWN0cy1wYWNrYWdlIC50dXJuIC5jb250YWluZXIge1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsgfVxuICAjcGFnZS1wcm9kdWN0cy1wYWNrYWdlIC50dXJuIC5ncmFwaGljcyB7XG4gICAgd2lkdGg6IDEwNTZweDtcbiAgICBoZWlnaHQ6IDQwMXB4O1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICBib3R0b206IDA7XG4gICAgbGVmdDogY2FsYyg1MCUgLSA1NDRweCk7IH1cbiAgICAjcGFnZS1wcm9kdWN0cy1wYWNrYWdlIC50dXJuIC5ncmFwaGljcyAuaHRtbCB7XG4gICAgICBiYWNrZ3JvdW5kOiBuby1yZXBlYXQgMCAwIHVybChcIi9pbWcvcHJvL3BhY2thZ2UvcGFja2FnZS1pbWctY3NzLWZpbGUucG5nXCIpO1xuICAgICAgYmFja2dyb3VuZC1zaXplOiAxNTBweDtcbiAgICAgIHdpZHRoOiAxNTBweDtcbiAgICAgIGhlaWdodDogMTgwcHg7XG4gICAgICBjb250ZW50OiAnJztcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgIGxlZnQ6IC0zcHg7XG4gICAgICB0b3A6IDc2cHg7IH1cbiAgICAgICNwYWdlLXByb2R1Y3RzLXBhY2thZ2UgLnR1cm4gLmdyYXBoaWNzIC5odG1sOjpiZWZvcmUsICNwYWdlLXByb2R1Y3RzLXBhY2thZ2UgLnR1cm4gLmdyYXBoaWNzIC5odG1sOjphZnRlciB7XG4gICAgICAgIGJhY2tncm91bmQ6IG5vLXJlcGVhdCAwIDAgdXJsKFwiL2ltZy9wcm8vcGFja2FnZS9wYWNrYWdlLWltZy1odG1sLWZpbGUucG5nXCIpO1xuICAgICAgICBiYWNrZ3JvdW5kLXNpemU6IDE1MHB4O1xuICAgICAgICB3aWR0aDogMTUwcHg7XG4gICAgICAgIGhlaWdodDogMTgwcHg7XG4gICAgICAgIGNvbnRlbnQ6ICcnO1xuICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgIGxlZnQ6IDY3cHg7XG4gICAgICAgIHRvcDogNXB4OyB9XG4gICAgICAjcGFnZS1wcm9kdWN0cy1wYWNrYWdlIC50dXJuIC5ncmFwaGljcyAuaHRtbDo6YWZ0ZXIge1xuICAgICAgICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXCIvaW1nL3Byby9wYWNrYWdlL3BhY2thZ2UtaW1nLWpzLWZpbGUucG5nXCIpO1xuICAgICAgICBiYWNrZ3JvdW5kLXNpemU6IDE1MHB4O1xuICAgICAgICBsZWZ0OiAxMzdweDtcbiAgICAgICAgdG9wOiAtMnB4OyB9XG4gICAgI3BhZ2UtcHJvZHVjdHMtcGFja2FnZSAudHVybiAuZ3JhcGhpY3MgLmFwcCB7XG4gICAgICBiYWNrZ3JvdW5kOiBuby1yZXBlYXQgMCAwIHVybChcIi9pbWcvcHJvL3BhY2thZ2UvcGFja2FnZS1pbWctaXBhLWZpbGUucG5nXCIpO1xuICAgICAgYmFja2dyb3VuZC1zaXplOiAxNTBweDtcbiAgICAgIHdpZHRoOiAxNTBweDtcbiAgICAgIGhlaWdodDogMTgwcHg7XG4gICAgICBjb250ZW50OiAnJztcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgIGxlZnQ6IDkxMnB4O1xuICAgICAgdG9wOiA4MXB4OyB9XG4gICAgICAjcGFnZS1wcm9kdWN0cy1wYWNrYWdlIC50dXJuIC5ncmFwaGljcyAuYXBwOjpiZWZvcmUge1xuICAgICAgICBiYWNrZ3JvdW5kOiBuby1yZXBlYXQgMCAwIHVybChcIi9pbWcvcHJvL3BhY2thZ2UvcGFja2FnZS1pbWctYXBrLWZpbGUucG5nXCIpO1xuICAgICAgICBiYWNrZ3JvdW5kLXNpemU6IDE1MHB4O1xuICAgICAgICB3aWR0aDogMTUwcHg7XG4gICAgICAgIGhlaWdodDogMTgwcHg7XG4gICAgICAgIGNvbnRlbnQ6ICcnO1xuICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgIGxlZnQ6IC0xMDBweDtcbiAgICAgICAgdG9wOiAycHg7IH1cbiAgICAjcGFnZS1wcm9kdWN0cy1wYWNrYWdlIC50dXJuIC5ncmFwaGljcyAuY2lyY2xlcyB7XG4gICAgICB3aWR0aDogMTA1NnB4O1xuICAgICAgbWFyZ2luOiAwIGF1dG87IH1cbiAgICAjcGFnZS1wcm9kdWN0cy1wYWNrYWdlIC50dXJuIC5ncmFwaGljcyAuYm94IHtcbiAgICAgIGJhY2tncm91bmQ6IG5vLXJlcGVhdCAwIDAgdXJsKFwiL2ltZy9wcm8vcGFja2FnZS9wYWNrYWdlLWltZy1zZXJ2ZXIucG5nXCIpO1xuICAgICAgYmFja2dyb3VuZC1zaXplOiA0NjBweDtcbiAgICAgIHdpZHRoOiA0NjBweDtcbiAgICAgIGhlaWdodDogNDAycHg7XG4gICAgICBjb250ZW50OiAnJztcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgIGxlZnQ6IDM3NXB4O1xuICAgICAgdG9wOiAxcHg7IH1cbiAgICAgICNwYWdlLXByb2R1Y3RzLXBhY2thZ2UgLnR1cm4gLmdyYXBoaWNzIC5ib3g6OmJlZm9yZSB7XG4gICAgICAgIGJhY2tncm91bmQ6IG5vLXJlcGVhdCBjZW50ZXIgY2VudGVyIHVybChcIi9pbWcvcHJvL3BhY2thZ2UvaW9uaWMtcGFja2FnZS1zZXJ2ZXItbGlnaHQuanBnLnBuZ1wiKTtcbiAgICAgICAgYmFja2dyb3VuZC1zaXplOiA0NXB4O1xuICAgICAgICB3aWR0aDogNDRweDtcbiAgICAgICAgaGVpZ2h0OiA0NHB4O1xuICAgICAgICBjb250ZW50OiAnJztcbiAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICBsZWZ0OiAyNjJweDtcbiAgICAgICAgdG9wOiA5NXB4O1xuICAgICAgICBvcGFjaXR5OiAwO1xuICAgICAgICB0cmFuc2l0aW9uOiBvcGFjaXR5IC4zczsgfVxuICAgICAgI3BhZ2UtcHJvZHVjdHMtcGFja2FnZSAudHVybiAuZ3JhcGhpY3MgLmJveC5hY3RpdmU6OmJlZm9yZSB7XG4gICAgICAgIG9wYWNpdHk6IDE7IH1cbiAgICAjcGFnZS1wcm9kdWN0cy1wYWNrYWdlIC50dXJuIC5ncmFwaGljcyAuY2lyY2xlIHtcbiAgICAgIGhlaWdodDogN3B4O1xuICAgICAgd2lkdGg6IDdweDtcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgIHRvcDogMTY5cHg7XG4gICAgICBsZWZ0OiAyODhweDtcbiAgICAgIGJvcmRlci1yYWRpdXM6IDUwJTtcbiAgICAgIGJhY2tncm91bmQ6ICNlNWU5ZjE7IH1cbiAgICAgICNwYWdlLXByb2R1Y3RzLXBhY2thZ2UgLnR1cm4gLmdyYXBoaWNzIC5jaXJjbGU6OmJlZm9yZSB7XG4gICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgdG9wOiAwO1xuICAgICAgICBsZWZ0OiAwO1xuICAgICAgICByaWdodDogMDtcbiAgICAgICAgYm90dG9tOiAwO1xuICAgICAgICBvcGFjaXR5OiAwO1xuICAgICAgICBjb250ZW50OiAnJztcbiAgICAgICAgYm9yZGVyLXJhZGl1czogNTAlO1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjg1NTZjO1xuICAgICAgICB0cmFuc2l0aW9uOiBvcGFjaXR5IC42czsgfVxuICAgICAgI3BhZ2UtcHJvZHVjdHMtcGFja2FnZSAudHVybiAuZ3JhcGhpY3MgLmNpcmNsZS5hY3RpdmU6OmJlZm9yZSB7XG4gICAgICAgIG9wYWNpdHk6IDE7IH1cbiAgICAgICNwYWdlLXByb2R1Y3RzLXBhY2thZ2UgLnR1cm4gLmdyYXBoaWNzIC5jaXJjbGU6bnRoLWNoaWxkKDIpIHtcbiAgICAgICAgbGVmdDogMzA4cHg7IH1cbiAgICAgICNwYWdlLXByb2R1Y3RzLXBhY2thZ2UgLnR1cm4gLmdyYXBoaWNzIC5jaXJjbGU6bnRoLWNoaWxkKDMpIHtcbiAgICAgICAgbGVmdDogMzI4cHg7IH1cbiAgICAgICNwYWdlLXByb2R1Y3RzLXBhY2thZ2UgLnR1cm4gLmdyYXBoaWNzIC5jaXJjbGU6bnRoLWNoaWxkKDQpIHtcbiAgICAgICAgbGVmdDogMzQ4cHg7IH1cbiAgICAgICNwYWdlLXByb2R1Y3RzLXBhY2thZ2UgLnR1cm4gLmdyYXBoaWNzIC5jaXJjbGU6bnRoLWNoaWxkKDUpIHtcbiAgICAgICAgbGVmdDogMzY3cHg7IH1cbiAgICAgICNwYWdlLXByb2R1Y3RzLXBhY2thZ2UgLnR1cm4gLmdyYXBoaWNzIC5jaXJjbGU6bnRoLWNoaWxkKDYpIHtcbiAgICAgICAgbGVmdDogNzExcHg7IH1cbiAgICAgICNwYWdlLXByb2R1Y3RzLXBhY2thZ2UgLnR1cm4gLmdyYXBoaWNzIC5jaXJjbGU6bnRoLWNoaWxkKDcpIHtcbiAgICAgICAgbGVmdDogNzMxcHg7IH1cbiAgICAgICNwYWdlLXByb2R1Y3RzLXBhY2thZ2UgLnR1cm4gLmdyYXBoaWNzIC5jaXJjbGU6bnRoLWNoaWxkKDgpIHtcbiAgICAgICAgbGVmdDogNzUwcHg7IH1cbiAgICAgICNwYWdlLXByb2R1Y3RzLXBhY2thZ2UgLnR1cm4gLmdyYXBoaWNzIC5jaXJjbGU6bnRoLWNoaWxkKDkpIHtcbiAgICAgICAgbGVmdDogNzcwcHg7IH1cbiAgICAgICNwYWdlLXByb2R1Y3RzLXBhY2thZ2UgLnR1cm4gLmdyYXBoaWNzIC5jaXJjbGU6bnRoLWNoaWxkKDEwKSB7XG4gICAgICAgIGxlZnQ6IDc5MHB4OyB9XG4gICAgQG1lZGlhIChtYXgtd2lkdGg6IDEyMTlweCkge1xuICAgICAgI3BhZ2UtcHJvZHVjdHMtcGFja2FnZSAudHVybiAuZ3JhcGhpY3Mge1xuICAgICAgICB0cmFuc2Zvcm06IHNjYWxlM2QoMC41LCAwLjUsIDEpO1xuICAgICAgICBsZWZ0OiBjYWxjKDUwJSAtIDUyNnB4KTsgfSB9XG4gICAgQG1lZGlhIChtYXgtd2lkdGg6IDc2N3B4KSB7XG4gICAgICAjcGFnZS1wcm9kdWN0cy1wYWNrYWdlIC50dXJuIC5ncmFwaGljcyB7XG4gICAgICAgIHRyYW5zZm9ybTogc2NhbGUzZCgwLjMsIDAuMywgMSk7IH0gfVxuXG4jcGFnZS1wcm9kdWN0cy1wYWNrYWdlIC5sZWF2ZSBoZ3JvdXAge1xuICB3aWR0aDogY2FsYyg1MCUgLSAxMzBweCk7XG4gIHBhZGRpbmctdG9wOiAxMDBweDtcbiAgcGFkZGluZy1ib3R0b206IDEwMHB4OyB9XG4gIEBtZWRpYSAobWF4LXdpZHRoOiA3NjdweCkge1xuICAgICNwYWdlLXByb2R1Y3RzLXBhY2thZ2UgLmxlYXZlIGhncm91cCB7XG4gICAgICB3aWR0aDogMTAwJTtcbiAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsgfSB9XG5cbiNwYWdlLXByb2R1Y3RzLXBhY2thZ2UgLmxlYXZlIGgyIHtcbiAgbGV0dGVyLXNwYWNpbmc6IC0uMDE1ZW07XG4gIG1hcmdpbi1ib3R0b206IDMxcHg7IH1cblxuI3BhZ2UtcHJvZHVjdHMtcGFja2FnZSAubGVhdmUgcCB7XG4gIGZvbnQtc2l6ZTogMTZweDtcbiAgbGV0dGVyLXNwYWNpbmc6IC0wLjAyZW07XG4gIGxpbmUtaGVpZ2h0OiAxLjhlbTtcbiAgbWFyZ2luLWJvdHRvbTogMThweDtcbiAgY29sb3I6ICM1ZTY3Nzc7IH1cbiAgI3BhZ2UtcHJvZHVjdHMtcGFja2FnZSAubGVhdmUgcCBzdHJvbmcge1xuICAgIGZvbnQtd2VpZ2h0OiA2MDA7IH1cblxuI3BhZ2UtcHJvZHVjdHMtcGFja2FnZSAubGVhdmUgLmNvbnRhaW5lciB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgb3ZlcmZsb3c6IGhpZGRlbjsgfVxuICAjcGFnZS1wcm9kdWN0cy1wYWNrYWdlIC5sZWF2ZSAuY29udGFpbmVyOjphZnRlciB7XG4gICAgYmFja2dyb3VuZDogdXJsKFwiL2ltZy9wcm8vcGFja2FnZS9mbG9hdGluZy1hcHAtaWNvbnMucG5nXCIpIDAgMCBuby1yZXBlYXQ7XG4gICAgYmFja2dyb3VuZC1zaXplOiA2ODJweDtcbiAgICB3aWR0aDogNjgycHg7XG4gICAgaGVpZ2h0OiA2NTBweDtcbiAgICBjb250ZW50OiAnJztcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgdG9wOiAtOTZweDtcbiAgICByaWdodDogMDtcbiAgICBwb2ludGVyLWV2ZW50czogbm9uZTsgfVxuXG5AbWVkaWEgKG1heC13aWR0aDogOTkxcHgpIHtcbiAgI3BhZ2UtcHJvZHVjdHMtcGFja2FnZSAubGVhdmUgaGdyb3VwIHtcbiAgICB3aWR0aDogMTAwJTtcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7IH1cbiAgI3BhZ2UtcHJvZHVjdHMtcGFja2FnZSAubGVhdmUgLmNvbnRhaW5lcjo6YWZ0ZXIge1xuICAgIG9wYWNpdHk6IC41OyB9IH1cblxuI3BhZ2UtcHJvZHVjdHMtcGFja2FnZSAuZ2V0LXN0YXJ0ZWQge1xuICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQodG8gcmlnaHQsICNjNjk2ZjggMCUsICNmY2E1YTcgMTAwJSk7IH1cbiAgI3BhZ2UtcHJvZHVjdHMtcGFja2FnZSAuZ2V0LXN0YXJ0ZWQgaDIge1xuICAgIG1hcmdpbi1ib3R0b206IDdweDsgfVxuICAjcGFnZS1wcm9kdWN0cy1wYWNrYWdlIC5nZXQtc3RhcnRlZCBwIHtcbiAgICBjb2xvcjogIzYwMWJhYTsgfVxuICAgICNwYWdlLXByb2R1Y3RzLXBhY2thZ2UgLmdldC1zdGFydGVkIHAgc3Ryb25nIHtcbiAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7IH1cbiAgI3BhZ2UtcHJvZHVjdHMtcGFja2FnZSAuZ2V0LXN0YXJ0ZWQgLmJ0biB7XG4gICAgcGFkZGluZzogMTJweCAxOXB4IDEwcHg7XG4gICAgZm9udC1zaXplOiAxNnB4O1xuICAgIGxldHRlci1zcGFjaW5nOiAtLjAyZW07XG4gICAgZm9udC13ZWlnaHQ6IDcwMDsgfVxuICAgICNwYWdlLXByb2R1Y3RzLXBhY2thZ2UgLmdldC1zdGFydGVkIC5idG4ucGluayB7XG4gICAgICBiYWNrZ3JvdW5kOiAjZjM0OTcxO1xuICAgICAgbWFyZ2luLXJpZ2h0OiAycHg7IH1cbiAgICAjcGFnZS1wcm9kdWN0cy1wYWNrYWdlIC5nZXQtc3RhcnRlZCAuYnRuLndoaXRlIHtcbiAgICAgIGJhY2tncm91bmQ6IHdoaXRlO1xuICAgICAgY29sb3I6ICNlOTM2Nzc7IH1cblxuI3BhZ2UtcHJvZHVjdHMtZm9yLXRlYW1zIG1haW4sXG4jcGFnZS1wcm9kdWN0cy1mb3ItdGVhbXMgLnN1Yi1oZWFkZXIsXG4jcGFnZS1wcm9kdWN0cy1mb3ItdGVhbXMgLmN0YSB7XG4gIGZvbnQtZmFtaWx5OiBcIkVpbmFcIiwgXCJIZWx2ZXRpY2EgTmV1ZVwiLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7IH1cblxuI3BhZ2UtcHJvZHVjdHMtZm9yLXRlYW1zIC5zdWItaGVhZGVyID4gLmNvbnRhaW5lciB7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7IH1cblxuI3BhZ2UtcHJvZHVjdHMtZm9yLXRlYW1zIC5jdGEge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMTIyMjNhO1xuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXCIvaW1nL3Byby90ZWFtcy1oZXJvLWJnLmpwZ1wiKSwgbGluZWFyLWdyYWRpZW50KDEyMGRlZywgIzEyMjIzYSwgIzAwMGExYyk7XG4gIGJhY2tncm91bmQtc2l6ZTogY292ZXIsIDEwMCU7XG4gIGJhY2tncm91bmQtcG9zaXRpb246IDUwJSA1MCU7XG4gIG1hcmdpbi10b3A6IC0xMzZweDtcbiAgcGFkZGluZy10b3A6IDEzNnB4O1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTsgfVxuXG4jcGFnZS1wcm9kdWN0cy1mb3ItdGVhbXMgLmN0YSBoZ3JvdXAge1xuICBwYWRkaW5nLWJvdHRvbTogMTE0cHg7IH1cblxuI3BhZ2UtcHJvZHVjdHMtZm9yLXRlYW1zIC5jdGEgaDEge1xuICBmb250LXNpemU6IDQ4cHg7XG4gIGZvbnQtd2VpZ2h0OiA3MDA7XG4gIG1hcmdpbi10b3A6IDMwcHg7IH1cblxuI3BhZ2UtcHJvZHVjdHMtZm9yLXRlYW1zIC5jdGEgcCB7XG4gIGNvbG9yOiAjYTBhYmJmO1xuICBmb250LXdlaWdodDogNjAwOyB9XG5cbiNwYWdlLXByb2R1Y3RzLWZvci10ZWFtcyAuY3RhIHAgc3Ryb25nIHtcbiAgY29sb3I6ICNjY2Q0ZTM7IH1cblxuI3BhZ2UtcHJvZHVjdHMtZm9yLXRlYW1zIC5jdGEtYnV0dG9ucyB7XG4gIG1hcmdpbi10b3A6IDUwcHg7IH1cblxuI3BhZ2UtcHJvZHVjdHMtZm9yLXRlYW1zIC5jdGEgLmJ0biB7XG4gIGNvbG9yOiAjZmZmZmZmO1xuICBmb250LXNpemU6IDE2cHg7XG4gIGZvbnQtd2VpZ2h0OiA3MDA7XG4gIHBhZGRpbmc6IDE0cHggMjRweDsgfVxuICAjcGFnZS1wcm9kdWN0cy1mb3ItdGVhbXMgLmN0YSAuYnRuLnNlY29uZGFyeSB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogIzIxMzE0ZTsgfVxuXG4jcGFnZS1wcm9kdWN0cy1mb3ItdGVhbXMgLmN0YSAubG9nby1maWVsZCB7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGhlaWdodDogMTIwcHg7XG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICBvdmVyZmxvdzogaGlkZGVuO1xuICBwb3NpdGlvbjogcmVsYXRpdmU7IH1cbiAgI3BhZ2UtcHJvZHVjdHMtZm9yLXRlYW1zIC5jdGEgLmxvZ28tZmllbGQ6OmJlZm9yZSB7XG4gICAgYmFja2dyb3VuZC1pbWFnZTogbGluZWFyLWdyYWRpZW50KHJnYmEoMjAwLCAyMjUsIDI1NSwgMC4wOCksIHJnYmEoMjAwLCAyMjAsIDI1NSwgMC4wOCkpLCB1cmwoL2ltZy9wcm8vdGVhbXMtaGVyby1iZy5qcGcpO1xuICAgIGJhY2tncm91bmQtc2l6ZTogMTAwJSwgY292ZXI7XG4gICAgYmFja2dyb3VuZC1wb3NpdGlvbjogNTAlIDUwJSwgNTAlIDUwJTtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgY29udGVudDogJyc7XG4gICAgdG9wOiBjYWxjKDEwMCUgLSA2NjFweCk7XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgaGVpZ2h0OiA2NjFweDtcbiAgICBmaWx0ZXI6IGJsdXIoMjRweCk7IH1cbiAgI3BhZ2UtcHJvZHVjdHMtZm9yLXRlYW1zIC5jdGEgLmxvZ28tZmllbGQgaW1nIHtcbiAgICBtYXgtd2lkdGg6IDg5NXB4O1xuICAgIHdpZHRoOiA4MCU7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlOyB9XG4gIEBtZWRpYSAobWF4LXdpZHRoOiA3NjhweCkge1xuICAgICNwYWdlLXByb2R1Y3RzLWZvci10ZWFtcyAuY3RhIC5sb2dvLWZpZWxkIHtcbiAgICAgIGRpc3BsYXk6IG5vbmU7IH0gfVxuXG4jcGFnZS1wcm9kdWN0cy1mb3ItdGVhbXMgLmhlcm8ge1xuICBiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0O1xuICBwYWRkaW5nOiAyNjBweCAwOyB9XG4gIEBtZWRpYSAobWF4LXdpZHRoOiAxMjIwcHgpIHtcbiAgICAjcGFnZS1wcm9kdWN0cy1mb3ItdGVhbXMgLmhlcm8ge1xuICAgICAgcGFkZGluZzogMjAlIDA7IH0gfVxuXG4jcGFnZS1wcm9kdWN0cy1mb3ItdGVhbXMgLmhlcm8gLmNvbnRhaW5lciB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47IH1cblxuI3BhZ2UtcHJvZHVjdHMtZm9yLXRlYW1zIC5oZXJvLmZsaXBwZWQgLmNvbnRhaW5lciB7XG4gIGFsaWduLWl0ZW1zOiBmbGV4LWVuZDsgfVxuXG4jcGFnZS1wcm9kdWN0cy1mb3ItdGVhbXMgLmhlcm9fX2NvbnRlbnQge1xuICB3aWR0aDogNDAlOyB9XG4gIEBtZWRpYSAobWF4LXdpZHRoOiA3NjhweCkge1xuICAgICNwYWdlLXByb2R1Y3RzLWZvci10ZWFtcyAuaGVyb19fY29udGVudCB7XG4gICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgICB3aWR0aDogMTAwJTsgfSB9XG5cbiNwYWdlLXByb2R1Y3RzLWZvci10ZWFtcyAuaGVyb19faWNvbiB7XG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcIi9pbWcvcHJvL3RlYW1zLWZlYXR1cmUtaWNvbnMucG5nXCIpO1xuICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiB0b3AgY2VudGVyO1xuICBiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0O1xuICBiYWNrZ3JvdW5kLXNpemU6IDEwMCU7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgaGVpZ2h0OiA2NHB4O1xuICBtYXJnaW4tYm90dG9tOiA0MHB4O1xuICB3aWR0aDogNjRweDsgfVxuICBAbWVkaWEgKG1heC13aWR0aDogNzY4cHgpIHtcbiAgICAjcGFnZS1wcm9kdWN0cy1mb3ItdGVhbXMgLmhlcm9fX2ljb24ge1xuICAgICAgbWFyZ2luLWJvdHRvbTogMjBweDsgfSB9XG5cbiNwYWdlLXByb2R1Y3RzLWZvci10ZWFtcyAuc2hpcCAuaGVyb19faWNvbiB7XG4gIGJhY2tncm91bmQtcG9zaXRpb24teTogMDsgfVxuXG4jcGFnZS1wcm9kdWN0cy1mb3ItdGVhbXMgLmxpc3RlbiAuaGVyb19faWNvbiB7XG4gIGJhY2tncm91bmQtcG9zaXRpb24teTogLTY0cHg7IH1cblxuI3BhZ2UtcHJvZHVjdHMtZm9yLXRlYW1zIC5jb2xsYWJvcmF0ZSAuaGVyb19faWNvbiB7XG4gIGJhY2tncm91bmQtcG9zaXRpb24teTogLTEyOHB4OyB9XG5cbiNwYWdlLXByb2R1Y3RzLWZvci10ZWFtcyAuaGVybyBoMiB7XG4gIGNvbG9yOiAjOWFhYWMxO1xuICBmb250LXNpemU6IDM2cHg7XG4gIGZvbnQtd2VpZ2h0OiA3MDA7XG4gIGxldHRlci1zcGFjaW5nOiAtMC4wM2VtO1xuICBsaW5lLWhlaWdodDogNDZweDtcbiAgbWFyZ2luLWJvdHRvbTogMWVtOyB9XG5cbiNwYWdlLXByb2R1Y3RzLWZvci10ZWFtcyAuaGVybyBoMiBzdHJvbmcge1xuICBjb2xvcjogIzI0MjgyZTsgfVxuXG4jcGFnZS1wcm9kdWN0cy1mb3ItdGVhbXMgLmhlcm8gcCB7XG4gIGNvbG9yOiAjNTA1ODYzO1xuICBmb250LXNpemU6IDE4cHg7XG4gIGZvbnQtd2VpZ2h0OiA2MDA7IH1cblxuI3BhZ2UtcHJvZHVjdHMtZm9yLXRlYW1zIC5zaGlwIHtcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFwiL2ltZy9wcm8vdGVhbXMtc2hpcC1oZXJvLmpwZ1wiKTtcbiAgYmFja2dyb3VuZC1wb3NpdGlvbjogcmlnaHQgY2VudGVyO1xuICBiYWNrZ3JvdW5kLXNpemU6IDgxMXB4OyB9XG5cbiNwYWdlLXByb2R1Y3RzLWZvci10ZWFtcyAubGlzdGVuIHtcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFwiL2ltZy9wcm8vdGVhbXMtbGlzdGVuLWhlcm8ucG5nXCIpO1xuICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiBsZWZ0IGNlbnRlcjtcbiAgYmFja2dyb3VuZC1zaXplOiA4MTFweDsgfVxuXG4jcGFnZS1wcm9kdWN0cy1mb3ItdGVhbXMgLmNvbGxhYm9yYXRlIHtcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFwiL2ltZy9wcm8vdGVhbXMtY29sbGFib3JhdGUtaGVyby5qcGdcIik7XG4gIGJhY2tncm91bmQtcG9zaXRpb246IHJpZ2h0IGNlbnRlcjtcbiAgYmFja2dyb3VuZC1zaXplOiA4MTFweDsgfVxuXG5AbWVkaWEgKG1pbi13aWR0aDogNzY4cHgpIHtcbiAgI3BhZ2UtcHJvZHVjdHMtZm9yLXRlYW1zIC5zaGlwLFxuICAjcGFnZS1wcm9kdWN0cy1mb3ItdGVhbXMgLmNvbGxhYm9yYXRlIHtcbiAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiBjZW50ZXIgcmlnaHQgLTQwMHB4OyB9IH1cblxuQG1lZGlhIChtaW4td2lkdGg6IDEyMjBweCkge1xuICAjcGFnZS1wcm9kdWN0cy1mb3ItdGVhbXMgLnNoaXAsXG4gICNwYWdlLXByb2R1Y3RzLWZvci10ZWFtcyAuY29sbGFib3JhdGUge1xuICAgIGJhY2tncm91bmQtcG9zaXRpb246IGNlbnRlciByaWdodCAtMTUwcHg7IH0gfVxuXG5AbWVkaWEgKG1pbi13aWR0aDogMTQwMHB4KSB7XG4gICNwYWdlLXByb2R1Y3RzLWZvci10ZWFtcyAuc2hpcCxcbiAgI3BhZ2UtcHJvZHVjdHMtZm9yLXRlYW1zIC5jb2xsYWJvcmF0ZSB7XG4gICAgYmFja2dyb3VuZC1wb3NpdGlvbjogY2VudGVyIHJpZ2h0IC01MHB4OyB9IH1cblxuQG1lZGlhIChtaW4td2lkdGg6IDc2OHB4KSB7XG4gICNwYWdlLXByb2R1Y3RzLWZvci10ZWFtcyAubGlzdGVuIHtcbiAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiBjZW50ZXIgbGVmdCAtMzUwcHg7IH0gfVxuXG5AbWVkaWEgKG1pbi13aWR0aDogMTIyMHB4KSB7XG4gICNwYWdlLXByb2R1Y3RzLWZvci10ZWFtcyAubGlzdGVuIHtcbiAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiBjZW50ZXIgbGVmdCAtMTUwcHg7IH0gfVxuXG5AbWVkaWEgKG1pbi13aWR0aDogMTQwMHB4KSB7XG4gICNwYWdlLXByb2R1Y3RzLWZvci10ZWFtcyAubGlzdGVuIHtcbiAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiBjZW50ZXIgbGVmdCAtNTBweDsgfSB9XG5cbkBtZWRpYSAobWF4LXdpZHRoOiA3NjhweCkge1xuICAjcGFnZS1wcm9kdWN0cy1mb3ItdGVhbXMgLnNoaXAsXG4gICNwYWdlLXByb2R1Y3RzLWZvci10ZWFtcyAubGlzdGVuLFxuICAjcGFnZS1wcm9kdWN0cy1mb3ItdGVhbXMgLmNvbGxhYm9yYXRlIHtcbiAgICBiYWNrZ3JvdW5kLWltYWdlOiBub25lO1xuICAgIHBhZGRpbmc6IDYwcHggMDsgfSB9XG5cbiNwYWdlLXByb2R1Y3RzLWZvci10ZWFtcyAuZmVhdHVyZXMge1xuICBwYWRkaW5nOiAxMDBweCAwOyB9XG5cbkBtZWRpYSAobWluLXdpZHRoOiA3NjhweCkge1xuICAjcGFnZS1wcm9kdWN0cy1mb3ItdGVhbXMgLmZlYXR1cmVzIC5oZXJvX19jb250ZW50IHtcbiAgICB3aWR0aDogNzAlOyB9IH1cblxuI3BhZ2UtcHJvZHVjdHMtZm9yLXRlYW1zIC5mZWF0dXJlcyBoMyB7XG4gIGNvbG9yOiAjMjQyODJlO1xuICBmb250LXNpemU6IDIwcHg7XG4gIGZvbnQtd2VpZ2h0OiA3MDA7XG4gIG1hcmdpbi1ib3R0b206IDIwcHg7IH1cblxuI3BhZ2UtcHJvZHVjdHMtZm9yLXRlYW1zIC5mZWF0dXJlcyBwIHtcbiAgY29sb3I6ICM3NDdmOTI7XG4gIGZvbnQtc2l6ZTogMTZweDtcbiAgbGluZS1oZWlnaHQ6IDEuNjsgfVxuXG4jcGFnZS1wcm9kdWN0cy1mb3ItdGVhbXMgLmZlYXR1cmVzIC5oZXJvX19pY29uIHtcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFwiL2ltZy9wcm8vdGVhbXMtc3ViZmVhdHVyZS1pY29ucy5wbmdcIik7XG4gIGhlaWdodDogNDhweDtcbiAgbWFyZ2luLWJvdHRvbTogMDtcbiAgd2lkdGg6IDQ4cHg7IH1cbiAgI3BhZ2UtcHJvZHVjdHMtZm9yLXRlYW1zIC5mZWF0dXJlcyAuaGVyb19faWNvbi5zaGFyaW5nIHtcbiAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uLXk6IDA7IH1cbiAgI3BhZ2UtcHJvZHVjdHMtZm9yLXRlYW1zIC5mZWF0dXJlcyAuaGVyb19faWNvbi5jaSB7XG4gICAgYmFja2dyb3VuZC1wb3NpdGlvbi15OiAtNDhweDsgfVxuICAjcGFnZS1wcm9kdWN0cy1mb3ItdGVhbXMgLmZlYXR1cmVzIC5oZXJvX19pY29uLmZlZWQge1xuICAgIGJhY2tncm91bmQtcG9zaXRpb24teTogLTk2cHg7IH1cbiAgI3BhZ2UtcHJvZHVjdHMtZm9yLXRlYW1zIC5mZWF0dXJlcyAuaGVyb19faWNvbi5jb2xsYWIge1xuICAgIGJhY2tncm91bmQtcG9zaXRpb24teTogLTE0NHB4OyB9XG4gICNwYWdlLXByb2R1Y3RzLWZvci10ZWFtcyAuZmVhdHVyZXMgLmhlcm9fX2ljb24uYmluYXJpZXMge1xuICAgIGJhY2tncm91bmQtcG9zaXRpb24teTogLTE5MnB4OyB9XG4gICNwYWdlLXByb2R1Y3RzLWZvci10ZWFtcyAuZmVhdHVyZXMgLmhlcm9fX2ljb24uY2hhbm5lbHMge1xuICAgIGJhY2tncm91bmQtcG9zaXRpb24teTogLTI0MHB4OyB9XG4gICNwYWdlLXByb2R1Y3RzLWZvci10ZWFtcyAuZmVhdHVyZXMgLmhlcm9fX2ljb24uY2Qge1xuICAgIGJhY2tncm91bmQtcG9zaXRpb24teTogLTI4OHB4OyB9XG4gICNwYWdlLXByb2R1Y3RzLWZvci10ZWFtcyAuZmVhdHVyZXMgLmhlcm9fX2ljb24ubW9uaXRvcmluZyB7XG4gICAgYmFja2dyb3VuZC1wb3NpdGlvbi15OiAtMzM2cHg7IH1cbiAgI3BhZ2UtcHJvZHVjdHMtZm9yLXRlYW1zIC5mZWF0dXJlcyAuaGVyb19faWNvbi5yYXBpZCB7XG4gICAgYmFja2dyb3VuZC1wb3NpdGlvbi15OiAtMzg0cHg7IH1cblxuI3BhZ2UtcHJvZHVjdHMtZm9yLXRlYW1zIC5mZWF0dXJlc19fbGlzdCB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtd3JhcDogd3JhcDtcbiAgbGlzdC1zdHlsZTogbm9uZTtcbiAgbWFyZ2luOiA3MHB4IDAgMDtcbiAgcGFkZGluZzogMDsgfVxuXG4jcGFnZS1wcm9kdWN0cy1mb3ItdGVhbXMgLmZlYXR1cmVzX19saXN0IGxpIHtcbiAgZmxleDogMCAwIDMzLjMzJTtcbiAgcGFkZGluZy1ib3R0b206IDRlbTtcbiAgcGFkZGluZy1yaWdodDogNGVtOyB9XG4gIEBtZWRpYSAobWF4LXdpZHRoOiA5OTJweCkge1xuICAgICNwYWdlLXByb2R1Y3RzLWZvci10ZWFtcyAuZmVhdHVyZXNfX2xpc3QgbGkge1xuICAgICAgZmxleDogMCAwIDUwJTsgfSB9XG4gIEBtZWRpYSAobWF4LXdpZHRoOiA3NjhweCkge1xuICAgICNwYWdlLXByb2R1Y3RzLWZvci10ZWFtcyAuZmVhdHVyZXNfX2xpc3QgbGkge1xuICAgICAgZmxleDogMCAwIDEwMCU7XG4gICAgICBwYWRkaW5nLXJpZ2h0OiAwO1xuICAgICAgdGV4dC1hbGlnbjogY2VudGVyOyB9IH1cblxuI3BhZ2UtcHJvZHVjdHMtZm9yLXRlYW1zIC5xdW90ZXMge1xuICBjb2xvcjogI2ZmZmZmZjtcbiAgZGlzcGxheTogZmxleDtcbiAgZm9udC1zaXplOiAyMHB4O1xuICBmb250LXdlaWdodDogNjAwO1xuICBsZXR0ZXItc3BhY2luZzogLTAuMDFlbTsgfVxuICBAbWVkaWEgKG1heC13aWR0aDogNzY4cHgpIHtcbiAgICAjcGFnZS1wcm9kdWN0cy1mb3ItdGVhbXMgLnF1b3RlcyB7XG4gICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOyB9IH1cblxuI3BhZ2UtcHJvZHVjdHMtZm9yLXRlYW1zIC5xdW90ZXNfX2NvbnRlbnQge1xuICBtYXgtd2lkdGg6IDQ5MHB4O1xuICBwb3NpdGlvbjogcmVsYXRpdmU7IH1cblxuI3BhZ2UtcHJvZHVjdHMtZm9yLXRlYW1zIC5xdW90ZXNfX25hcGEsXG4jcGFnZS1wcm9kdWN0cy1mb3ItdGVhbXMgLnF1b3Rlc19faG1iIHtcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleDogMTtcbiAgcGFkZGluZzogODBweDsgfVxuICBAbWVkaWEgKG1heC13aWR0aDogNDgwcHgpIHtcbiAgICAjcGFnZS1wcm9kdWN0cy1mb3ItdGVhbXMgLnF1b3Rlc19fbmFwYSxcbiAgICAjcGFnZS1wcm9kdWN0cy1mb3ItdGVhbXMgLnF1b3Rlc19faG1iIHtcbiAgICAgIHBhZGRpbmc6IDQwcHg7IH0gfVxuXG4jcGFnZS1wcm9kdWN0cy1mb3ItdGVhbXMgLnF1b3Rlc19fbmFwYSB7XG4gIGJhY2tncm91bmQtY29sb3I6ICM2YjU2ZDQ7XG4gIGp1c3RpZnktY29udGVudDogZmxleC1lbmQ7IH1cbiAgQG1lZGlhIChtYXgtd2lkdGg6IDc2OHB4KSB7XG4gICAgI3BhZ2UtcHJvZHVjdHMtZm9yLXRlYW1zIC5xdW90ZXNfX25hcGEge1xuICAgICAganVzdGlmeS1jb250ZW50OiBmbGV4LXN0YXJ0OyB9IH1cblxuI3BhZ2UtcHJvZHVjdHMtZm9yLXRlYW1zIC5xdW90ZXNfX25hcGEgLmNhc2Utc3R1ZHktcGlsbCB7XG4gIGJhY2tncm91bmQtY29sb3I6ICM1NjM1YzI7XG4gIGJvcmRlci1yYWRpdXM6IDIwcHg7XG4gIGNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNik7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgZm9udC1zaXplOiAxMnB4O1xuICBsaW5lLWhlaWdodDogMTtcbiAgbWFyZ2luLWJvdHRvbTogMzBweDtcbiAgcGFkZGluZzogN3B4IDEwcHggNnB4O1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHJpZ2h0OiAwO1xuICB0b3A6IDdweDtcbiAgdHJhbnNpdGlvbjogY29sb3IgMjAwbXMgZWFzZS1pbi1vdXQ7IH1cbiAgI3BhZ2UtcHJvZHVjdHMtZm9yLXRlYW1zIC5xdW90ZXNfX25hcGEgLmNhc2Utc3R1ZHktcGlsbCBzdHJvbmcge1xuICAgIGZvbnQtd2VpZ2h0OiBpbmhlcml0O1xuICAgIGNvbG9yOiAjZmZmZmZmOyB9XG4gICNwYWdlLXByb2R1Y3RzLWZvci10ZWFtcyAucXVvdGVzX19uYXBhIC5jYXNlLXN0dWR5LXBpbGw6YWZ0ZXIge1xuICAgIGNvbnRlbnQ6IFwiIFxcMjAzYVwiOyB9XG4gICNwYWdlLXByb2R1Y3RzLWZvci10ZWFtcyAucXVvdGVzX19uYXBhIC5jYXNlLXN0dWR5LXBpbGw6aG92ZXIge1xuICAgIGNvbG9yOiAjZmZmZmZmOyB9XG4gIEBtZWRpYSAobWF4LXdpZHRoOiAxMjIwcHgpIHtcbiAgICAjcGFnZS1wcm9kdWN0cy1mb3ItdGVhbXMgLnF1b3Rlc19fbmFwYSAuY2FzZS1zdHVkeS1waWxsIHtcbiAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsgfSB9XG5cbiNwYWdlLXByb2R1Y3RzLWZvci10ZWFtcyAucXVvdGVzX19obWIge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjNDI0YjU4OyB9XG5cbiNwYWdlLXByb2R1Y3RzLWZvci10ZWFtcyAucXVvdGVzX19sb2dvIHtcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFwiL2ltZy9wcm8vdGVhbXMtcXVvdGUtbG9nb3MucG5nXCIpO1xuICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiB0b3A7XG4gIGJhY2tncm91bmQtc2l6ZTogMTAwJTtcbiAgYmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdDtcbiAgZGlzcGxheTogYmxvY2s7XG4gIGhlaWdodDogNDBweDtcbiAgbWFyZ2luLWJvdHRvbTogMmVtO1xuICB3aWR0aDogMjYwcHg7IH1cblxuI3BhZ2UtcHJvZHVjdHMtZm9yLXRlYW1zIC5xdW90ZXNfX2htYiAucXVvdGVzX19sb2dvIHtcbiAgYmFja2dyb3VuZC1wb3NpdGlvbi15OiAtNDBweDsgfVxuXG4jcGFnZS1wcm9kdWN0cy1mb3ItdGVhbXMgLnF1b3RlcyBibG9ja3F1b3RlIHtcbiAgYm9yZGVyOiBub25lO1xuICBmb250LXNpemU6IGluaGVyaXQ7XG4gIGxpbmUtaGVpZ2h0OiAxLjU7XG4gIG1hcmdpbjogMDtcbiAgcGFkZGluZzogMDsgfVxuXG4jcGFnZS1wcm9kdWN0cy1mb3ItdGVhbXMgLnF1b3RlcyBibG9ja3F1b3RlID4gc21hbGwge1xuICBjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjYpO1xuICBtYXJnaW4tdG9wOiAyZW07XG4gIHRleHQtYWxpZ246IHJpZ2h0OyB9XG4gICNwYWdlLXByb2R1Y3RzLWZvci10ZWFtcyAucXVvdGVzIGJsb2NrcXVvdGUgPiBzbWFsbDo6YmVmb3JlIHtcbiAgICBjb250ZW50OiBcIlwiOyB9XG4gICNwYWdlLXByb2R1Y3RzLWZvci10ZWFtcyAucXVvdGVzIGJsb2NrcXVvdGUgPiBzbWFsbCBzdHJvbmcge1xuICAgIGZvbnQtd2VpZ2h0OiBpbmhlcml0O1xuICAgIGNvbG9yOiAjZmZmZmZmOyB9XG5cbiNwYWdlLXByb2R1Y3RzLWZvci10ZWFtcyAuZ2V0LXN0YXJ0ZWQge1xuICBiYWNrZ3JvdW5kOiAjMWIyMTJhO1xuICBvdmVyZmxvdzogYXV0bzsgfVxuXG4jcGFnZS1wcm9kdWN0cy1mb3ItdGVhbXMgLmdldC1zdGFydGVkIC5jb250YWluZXIge1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBkaXNwbGF5OiBmbGV4O1xuICBtYXJnaW4tYm90dG9tOiAxMTBweDtcbiAgbWFyZ2luLXRvcDogMTEwcHg7IH1cbiAgQG1lZGlhIChtYXgtd2lkdGg6IDk5MXB4KSB7XG4gICAgI3BhZ2UtcHJvZHVjdHMtZm9yLXRlYW1zIC5nZXQtc3RhcnRlZCAuY29udGFpbmVyIHtcbiAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgdGV4dC1hbGlnbjogY2VudGVyOyB9IH1cblxuI3BhZ2UtcHJvZHVjdHMtZm9yLXRlYW1zIC5nZXQtc3RhcnRlZCBoZ3JvdXAge1xuICBsZXR0ZXItc3BhY2luZzogLS4wMjVlbTtcbiAgZmxleC1ncm93OiAxOyB9XG4gIEBtZWRpYSAobWF4LXdpZHRoOiA5OTFweCkge1xuICAgICNwYWdlLXByb2R1Y3RzLWZvci10ZWFtcyAuZ2V0LXN0YXJ0ZWQgaGdyb3VwIHtcbiAgICAgIHBhZGRpbmctYm90dG9tOiAxNnB4OyB9IH1cblxuI3BhZ2UtcHJvZHVjdHMtZm9yLXRlYW1zIC5nZXQtc3RhcnRlZCBoMiB7XG4gIGNvbG9yOiAjZmZmZmZmO1xuICBmb250LXNpemU6IDI4cHg7XG4gIGZvbnQtd2VpZ2h0OiA3MDA7XG4gIGxldHRlci1zcGFjaW5nOiBpbmhlcml0O1xuICBtYXJnaW46IDAgMCA1cHg7IH1cblxuI3BhZ2UtcHJvZHVjdHMtZm9yLXRlYW1zIC5nZXQtc3RhcnRlZCBwIHtcbiAgY29sb3I6ICM5OGEzYjI7XG4gIGZvbnQtc2l6ZTogMjBweDtcbiAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgbWFyZ2luOiAwOyB9XG5cbiNwYWdlLXByb2R1Y3RzLWZvci10ZWFtcyAuZ2V0LXN0YXJ0ZWQgLmJ0biB7XG4gIGZvbnQtc2l6ZTogMTZweDtcbiAgZm9udC13ZWlnaHQ6IDcwMDsgfVxuICAjcGFnZS1wcm9kdWN0cy1mb3ItdGVhbXMgLmdldC1zdGFydGVkIC5idG4uc2Vjb25kYXJ5IHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjM2Q0YjVmOyB9XG5cbiNwYWdlLXB3YSB7XG4gIGZvbnQtc2l6ZTogMS40cmVtOyB9XG4gICNwYWdlLXB3YSAjc29jaWFsLXNoYXJlLXNpZGViYXIge1xuICAgIGxlZnQ6IDM1cHg7IH1cbiAgI3BhZ2UtcHdhIGgxLFxuICAjcGFnZS1wd2EgaDIsXG4gICNwYWdlLXB3YSBoMyB7XG4gICAgZm9udC13ZWlnaHQ6IDcwMDsgfVxuICAjcGFnZS1wd2EgLmxlZGUge1xuICAgIGNvbG9yOiAjNzQ4MTk2O1xuICAgIGZvbnQtc2l6ZTogMS4zZW07XG4gICAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgICBsaW5lLWhlaWdodDogMS42O1xuICAgIG1hcmdpbjogMWVtIGF1dG87XG4gICAgbWF4LXdpZHRoOiA3MnJlbTsgfVxuICAgIEBtZWRpYSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6IDc2N3B4KSB7XG4gICAgICAjcGFnZS1wd2EgLmxlZGUge1xuICAgICAgICBmb250LXNpemU6IDEuMmVtOyB9IH1cbiAgI3BhZ2UtcHdhIC5sZWRlID4gc3Ryb25nIHtcbiAgICBjb2xvcjogIzMzMzMzMzsgfVxuICAjcGFnZS1wd2EgLmV5ZWJyb3cge1xuICAgIGZvbnQtc2l6ZTogMnJlbTtcbiAgICBmb250LXdlaWdodDogNzAwO1xuICAgIGxldHRlci1zcGFjaW5nOiAwLjFlbTtcbiAgICBtYXJnaW46IDFlbSAwO1xuICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7IH1cbiAgI3BhZ2UtcHdhIC5jYXJkIHtcbiAgICBib3JkZXItcmFkaXVzOiA2cHg7XG4gICAgYm94LXNoYWRvdzogMHB4IDRweCA2cHggcmdiYSgwLCAwLCAwLCAwLjEpLCAwcHggMXB4IDNweCByZ2JhKDAsIDAsIDAsIDAuMDgpO1xuICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgdHJhbnNpdGlvbjogdHJhbnNmb3JtIDEwMG1zIGVhc2Utb3V0LCBib3gtc2hhZG93IDEyMG1zIGVhc2Utb3V0OyB9XG4gICAgI3BhZ2UtcHdhIC5jYXJkX19pbWFnZSB7XG4gICAgICBtYXgtd2lkdGg6IDEwMCU7IH1cbiAgICAjcGFnZS1wd2EgLmNhcmRfX2NvbnRlbnQge1xuICAgICAgcGFkZGluZzogMWVtOyB9XG4gICAgI3BhZ2UtcHdhIC5jYXJkOmhvdmVyIHtcbiAgICAgIGJveC1zaGFkb3c6IDAgOHB4IDE2cHggcmdiYSgwLCAwLCAwLCAwLjA4KSwgMCAzcHggNnB4IHJnYmEoMCwgMCwgMCwgMC4wOCk7XG4gICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTJweCk7IH1cbiAgI3BhZ2UtcHdhIC5wYW5lbCB7XG4gICAgcGFkZGluZzogOHJlbSA0cmVtOyB9XG4gICAgI3BhZ2UtcHdhIC5wYW5lbF9faGVhZGVyIHtcbiAgICAgIG1hcmdpbi1ib3R0b206IDZyZW07XG4gICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7IH1cbiAgI3BhZ2UtcHdhIC5wYW5lbCAuY29udGFpbmVyIHtcbiAgICBtYXgtd2lkdGg6IDExNDBweDsgfVxuICAjcGFnZS1wd2EgLmN0YSxcbiAgI3BhZ2UtcHdhIC5wYW5lbCB7XG4gICAgZm9udC1mYW1pbHk6IFwiRWluYVwiLCBcIkhlbHZldGljYSBOZXVlXCIsIEhlbHZldGljYSwgc2Fucy1zZXJpZjsgfVxuICAjcGFnZS1wd2EgLmN0YSB7XG4gICAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFwiL2ltZy9wd2EvcHdhLWhlcm8uanBnXCIpO1xuICAgIGJhY2tncm91bmQtcG9zaXRpb246IGNlbnRlciBjZW50ZXI7XG4gICAgYmFja2dyb3VuZC1zaXplOiBjb3ZlcjtcbiAgICBwYWRkaW5nOiAxNnJlbSAwO1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjsgfVxuICAgIEBtZWRpYSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6IDc2N3B4KSB7XG4gICAgICAjcGFnZS1wd2EgLmN0YSB7XG4gICAgICAgIG1hcmdpbi10b3A6IDA7XG4gICAgICAgIHBhZGRpbmctYm90dG9tOiBjYWxjKDE2cmVtIC0gNzBweCk7IH0gfVxuICAjcGFnZS1wd2EgLmN0YSBoMSB7XG4gICAgZm9udC1zaXplOiAzLjQ1ZW07XG4gICAgbGV0dGVyLXNwYWNpbmc6IC0wLjAyZW07IH1cbiAgICBAbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiA3NjdweCkge1xuICAgICAgI3BhZ2UtcHdhIC5jdGEgaDEge1xuICAgICAgICBmb250LXNpemU6IDNlbTsgfSB9XG4gICNwYWdlLXB3YSAuY3RhIC5leWVicm93IHtcbiAgICBmb250LXNpemU6IDEuNHJlbTtcbiAgICBsZXR0ZXItc3BhY2luZzogMC4yZW07IH1cbiAgI3BhZ2UtcHdhIC5jdGEgLmxlZGUge1xuICAgIGNvbG9yOiAjY2ZlMWZhOyB9XG4gICNwYWdlLXB3YSAuY3RhIC5sZWRlID4gc3Ryb25nIHtcbiAgICBjb2xvcjogd2hpdGU7XG4gICAgZm9udC13ZWlnaHQ6IGluaGVyaXQ7IH1cbiAgI3BhZ2UtcHdhIC5mZWF0dXJlcyB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBmbGV4LXdyYXA6IHdyYXA7XG4gICAgbGlzdC1zdHlsZTogbm9uZTtcbiAgICBtYXJnaW46IDAgYXV0bztcbiAgICBtYXgtd2lkdGg6IDEwMHJlbTtcbiAgICBwYWRkaW5nOiAwO1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjsgfVxuICAjcGFnZS1wd2EgLmZlYXR1cmVzID4gbGkge1xuICAgIGZsZXg6IDAgMCAyNSU7XG4gICAgcGFkZGluZzogMiU7IH1cbiAgICBAbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiA3NjdweCkge1xuICAgICAgI3BhZ2UtcHdhIC5mZWF0dXJlcyA+IGxpIHtcbiAgICAgICAgZmxleDogMCAwIDUwJTsgfSB9XG4gICNwYWdlLXB3YSAuZmVhdHVyZXMgaDQge1xuICAgIGZvbnQtc2l6ZTogMS4xNWVtO1xuICAgIGZvbnQtd2VpZ2h0OiA2MDA7IH1cbiAgI3BhZ2UtcHdhIC5mZWF0dXJlcyBwIHtcbiAgICBjb2xvcjogIzc0ODE5NjtcbiAgICBmb250LXNpemU6IDAuOTI1ZW07XG4gICAgZm9udC13ZWlnaHQ6IDYwMDsgfVxuICAjcGFnZS1wd2EgLmZlYXR1cmVzX19pY29uIHtcbiAgICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXCIvaW1nL3B3YS9wd2EtZmVhdHVyZS1pY29ucy5wbmdcIik7XG4gICAgYmFja2dyb3VuZC1wb3NpdGlvbjogdG9wIGxlZnQ7XG4gICAgYmFja2dyb3VuZC1zaXplOiAxMDAlO1xuICAgIGhlaWdodDogNDhweDtcbiAgICBtYXJnaW46IDAgYXV0byAycmVtO1xuICAgIHdpZHRoOiA0OHB4OyB9XG4gICAgI3BhZ2UtcHdhIC5mZWF0dXJlc19faWNvbi0tcmVsaWFibGUge1xuICAgICAgYmFja2dyb3VuZC1wb3NpdGlvbi15OiAwOyB9XG4gICAgI3BhZ2UtcHdhIC5mZWF0dXJlc19faWNvbi0tZmFzdCB7XG4gICAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uLXk6IC00OHB4OyB9XG4gICAgI3BhZ2UtcHdhIC5mZWF0dXJlc19faWNvbi0tYWNjZXNzaWJsZSB7XG4gICAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uLXk6IC05NnB4OyB9XG4gICAgI3BhZ2UtcHdhIC5mZWF0dXJlc19faWNvbi0td2ViLWJhc2VkIHtcbiAgICAgIGJhY2tncm91bmQtcG9zaXRpb24teTogLTE0NHB4OyB9XG4gICAgI3BhZ2UtcHdhIC5mZWF0dXJlc19faWNvbi0tZGlzY292ZXJhYmxlIHtcbiAgICAgIGJhY2tncm91bmQtcG9zaXRpb24teTogLTE5MnB4OyB9XG4gICAgI3BhZ2UtcHdhIC5mZWF0dXJlc19faWNvbi0tc21hbGwge1xuICAgICAgYmFja2dyb3VuZC1wb3NpdGlvbi15OiAtMjQwcHg7IH1cbiAgICAjcGFnZS1wd2EgLmZlYXR1cmVzX19pY29uLS1pbnN0YW50IHtcbiAgICAgIGJhY2tncm91bmQtcG9zaXRpb24teTogLTI4OHB4OyB9XG4gICAgI3BhZ2UtcHdhIC5mZWF0dXJlc19faWNvbi0tc2ltcGxlIHtcbiAgICAgIGJhY2tncm91bmQtcG9zaXRpb24teTogLTMzNnB4OyB9XG4gIEBtZWRpYSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDk5MnB4KSB7XG4gICAgI3BhZ2UtcHdhIC5mZWF0dXJlcyA+IGxpOmhvdmVyIHAsXG4gICAgI3BhZ2UtcHdhIC5mZWF0dXJlcyA+IGxpOmhvdmVyIGg0LFxuICAgICNwYWdlLXB3YSAuZmVhdHVyZXMgPiBsaTpob3ZlciAuZmVhdHVyZXNfX2ljb24ge1xuICAgICAgb3BhY2l0eTogMTtcbiAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgwKTsgfVxuICAgICNwYWdlLXB3YSAuZmVhdHVyZXMgaDQsXG4gICAgI3BhZ2UtcHdhIC5mZWF0dXJlcyBwLFxuICAgICNwYWdlLXB3YSAuZmVhdHVyZXNfX2ljb24ge1xuICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDIwcHgpO1xuICAgICAgdHJhbnNpdGlvbjogdHJhbnNmb3JtIDIwMG1zIGN1YmljLWJlemllcigwLjE3NSwgMC44ODUsIDAuMzIsIDEuMjc1KTsgfVxuICAgICNwYWdlLXB3YSAuZmVhdHVyZXMgcCB7XG4gICAgICBvcGFjaXR5OiAwOyB9IH1cbiAgI3BhZ2UtcHdhIC5leGFtcGxlcyB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogI2Y2ZjlmYzsgfVxuICBAbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiA3NjdweCkge1xuICAgICNwYWdlLXB3YSAuZXhhbXBsZXMucGFuZWwge1xuICAgICAgcGFkZGluZy1sZWZ0OiAxcmVtO1xuICAgICAgcGFkZGluZy1yaWdodDogMXJlbTsgfSB9XG4gICNwYWdlLXB3YSAuZXhhbXBsZXNfX2xpc3Qge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgZmxleC13cmFwOiB3cmFwO1xuICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOyB9XG4gICNwYWdlLXB3YSAuZXhhbXBsZXNfX2xpc3QgPiAuY2FyZCB7XG4gICAgYm9yZGVyLXJhZGl1czogOHB4O1xuICAgIGJveC1zaGFkb3c6IDBweCAzcHggOHB4IHJnYmEoMCwgMCwgMCwgMC4xKTtcbiAgICBtYXJnaW46IDFyZW07XG4gICAgd2lkdGg6IGNhbGMoMTExMHB4IC8gMyAtIDJyZW0pOyB9XG4gICAgI3BhZ2UtcHdhIC5leGFtcGxlc19fbGlzdCA+IC5jYXJkOmhvdmVyIHtcbiAgICAgIGJveC1zaGFkb3c6IDAgOHB4IDE2cHggcmdiYSgwLCAwLCAwLCAwLjEpLCAwIDNweCA2cHggcmdiYSgwLCAwLCAwLCAwLjEpOyB9XG4gICAgQG1lZGlhIHNjcmVlbiBhbmQgKG1heC13aWR0aDogNzY3cHgpIHtcbiAgICAgICNwYWdlLXB3YSAuZXhhbXBsZXNfX2xpc3QgPiAuY2FyZCB7XG4gICAgICAgIG1hcmdpbi1sZWZ0OiAwO1xuICAgICAgICBtYXJnaW4tcmlnaHQ6IDA7IH0gfVxuICAjcGFnZS1wd2EgLmV4YW1wbGUge1xuICAgIGJhY2tncm91bmQtcG9zaXRpb246IGNlbnRlciBjZW50ZXI7XG4gICAgYmFja2dyb3VuZC1zaXplOiBjb3ZlcjtcbiAgICBib3JkZXItcmFkaXVzOiA4cHg7XG4gICAgY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC44KTtcbiAgICBmb250LXdlaWdodDogNjAwO1xuICAgIGhlaWdodDogMDtcbiAgICBwYWRkaW5nLWJvdHRvbTogODglO1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsgfVxuICAgICNwYWdlLXB3YSAuZXhhbXBsZS5zdGFyYnVja3Mge1xuICAgICAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFwiL2ltZy9wd2EvcHdhLXN0YXJidWNrcy1iZy5qcGdcIik7IH1cbiAgICAjcGFnZS1wd2EgLmV4YW1wbGUucGludGVyZXN0IHtcbiAgICAgIGJhY2tncm91bmQtaW1hZ2U6IHVybChcIi9pbWcvcHdhL3B3YS1waW50ZXJlc3QtYmcuanBnXCIpOyB9XG4gICAgI3BhZ2UtcHdhIC5leGFtcGxlLnViZXIge1xuICAgICAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFwiL2ltZy9wd2EvcHdhLXViZXItYmcuanBnXCIpOyB9XG4gICAgI3BhZ2UtcHdhIC5leGFtcGxlLmx5ZnQge1xuICAgICAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFwiL2ltZy9wd2EvcHdhLWx5ZnQtYmcuanBnXCIpOyB9XG4gICAgI3BhZ2UtcHdhIC5leGFtcGxlLnR3aXR0ZXIge1xuICAgICAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFwiL2ltZy9wd2EvcHdhLXR3aXR0ZXItYmcuanBnXCIpOyB9XG4gICAgI3BhZ2UtcHdhIC5leGFtcGxlLmZvcmJlcyB7XG4gICAgICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXCIvaW1nL3B3YS9wd2EtZm9yYmVzLWJnLmpwZ1wiKTsgfVxuICAjcGFnZS1wd2EgLmV4YW1wbGVfX2NvbnRlbnQge1xuICAgIGJvdHRvbTogMDtcbiAgICBoZWlnaHQ6IDQ2Ljg3NSU7XG4gICAgbGVmdDogMDtcbiAgICBwYWRkaW5nOiAxLjRlbTtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgcmlnaHQ6IDA7IH1cbiAgICAjcGFnZS1wd2EgLmV4YW1wbGVfX2NvbnRlbnQgaW1nIHtcbiAgICAgIGhlaWdodDogNDBweDtcbiAgICAgIG1hcmdpbi1ib3R0b206IDFlbTsgfVxuICAjcGFnZS1wd2EgLmxpYnJhcnkgPiAuY29udGFpbmVyID4gc2VjdGlvbiB7XG4gICAgcGFkZGluZy1sZWZ0OiAycmVtOyB9XG4gICNwYWdlLXB3YSAubGlicmFyeV9fbGlzdCBoNCB7XG4gICAgZm9udC1zaXplOiAxNnB4O1xuICAgIGZvbnQtd2VpZ2h0OiA2MDA7IH1cbiAgI3BhZ2UtcHdhIC5saWJyYXJ5X19saXN0IHAge1xuICAgIGNvbG9yOiAjNzQ4MTk2O1xuICAgIGZvbnQtc2l6ZTogMTNweDtcbiAgICBmb250LXdlaWdodDogNjAwOyB9XG4gICNwYWdlLXB3YSAubGlicmFyeV9fbGlzdCBhIHtcbiAgICBjb2xvcjogaW5oZXJpdDsgfVxuICAgICNwYWdlLXB3YSAubGlicmFyeV9fbGlzdCBhOmZvY3VzIHtcbiAgICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTsgfVxuICAjcGFnZS1wd2EgLmxpYnJhcnlfX2xpc3Qge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgZmxleC13cmFwOiB3cmFwO1xuICAgIGxpc3Qtc3R5bGU6IG5vbmU7XG4gICAgbWFyZ2luOiAyZW0gMCA0ZW0gMDtcbiAgICBwYWRkaW5nOiAwOyB9XG4gICNwYWdlLXB3YSAubGlicmFyeV9fbGlzdCA+IGxpIHtcbiAgICBmbGV4OiAwIDAgMjUlO1xuICAgIHBhZGRpbmctYm90dG9tOiAycmVtO1xuICAgIHBhZGRpbmctcmlnaHQ6IDJyZW07IH1cbiAgICBAbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiAxMjE5cHgpIHtcbiAgICAgICNwYWdlLXB3YSAubGlicmFyeV9fbGlzdCA+IGxpIHtcbiAgICAgICAgZmxleDogMCAwIDMzLjMzJTsgfSB9XG4gICAgQG1lZGlhIHNjcmVlbiBhbmQgKG1heC13aWR0aDogOTkxcHgpIHtcbiAgICAgICNwYWdlLXB3YSAubGlicmFyeV9fbGlzdCA+IGxpIHtcbiAgICAgICAgZmxleDogMCAwIDUwJTsgfSB9XG4gICAgQG1lZGlhIHNjcmVlbiBhbmQgKG1heC13aWR0aDogNzY3cHgpIHtcbiAgICAgICNwYWdlLXB3YSAubGlicmFyeV9fbGlzdCA+IGxpIHtcbiAgICAgICAgZmxleDogMCAwIDEwMCU7XG4gICAgICAgIHBhZGRpbmctcmlnaHQ6IDA7IH0gfVxuICAjcGFnZS1wd2EgLmxpYnJhcnlfX2xpc3QgLmNhcmQge1xuICAgIGhlaWdodDogMTAwJTtcbiAgICBtYXJnaW4tbGVmdDogYXV0bztcbiAgICBtYXJnaW4tcmlnaHQ6IGF1dG87IH1cbiAgICBAbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiA3NjdweCkge1xuICAgICAgI3BhZ2UtcHdhIC5saWJyYXJ5X19saXN0IC5jYXJkIHtcbiAgICAgICAgbWF4LXdpZHRoOiAyNjBweDsgfSB9XG4gIEBtZWRpYSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6IDc2N3B4KSB7XG4gICAgI3BhZ2UtcHdhIC5saWJyYXJ5IC5leWVicm93IHtcbiAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsgfSB9XG5cbiNkb2NzLXBhZ2UtcmVzb3VyY2VzLWluZGV4IG1haW4gaDEuYmFubmVyIHtcbiAgaGVpZ2h0OiAxNzhweDtcbiAgYmFja2dyb3VuZDogbm8tcmVwZWF0IGNlbnRlciB0b3AgdXJsKFwiL2ltZy9kb2NzL3Jlc291cmNlcy9yZXNvdXJjZXMtaGVhZGVyLWltZy5qcGdcIik7XG4gIGJhY2tncm91bmQtc2l6ZTogY292ZXI7XG4gIGNvbG9yOiB3aGl0ZTtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIHBhZGRpbmctdG9wOiA5MnB4O1xuICBtYXJnaW4tdG9wOiAtNTBweDtcbiAgbWFyZ2luLWxlZnQ6IC00MHB4O1xuICBtYXJnaW4tcmlnaHQ6IC00MHB4O1xuICBwYWRkaW5nLWJvdHRvbTogMTUwcHg7XG4gIHBhZGRpbmctbGVmdDogNTBweDtcbiAgZm9udC1zaXplOiAzNnB4O1xuICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xuICBsZXR0ZXItc3BhY2luZzogMTRweDtcbiAgZm9udC13ZWlnaHQ6IDUwMDtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgdGV4dC1zaGFkb3c6IDAgMXB4IDRweCByZ2JhKDAsIDAsIDAsIDAuMSk7IH1cbiAgQG1lZGlhIChtYXgtd2lkdGg6IDQyMHB4KSB7XG4gICAgI2RvY3MtcGFnZS1yZXNvdXJjZXMtaW5kZXggbWFpbiBoMS5iYW5uZXIge1xuICAgICAgbGV0dGVyLXNwYWNpbmc6IDRweDsgfSB9XG4gICNkb2NzLXBhZ2UtcmVzb3VyY2VzLWluZGV4IG1haW4gaDEuYmFubmVyIC5iZyB7XG4gICAgYmFja2dyb3VuZDogbm8tcmVwZWF0IGNlbnRlciBjZW50ZXI7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIHBhZGRpbmctdG9wOiA5MnB4O1xuICAgIHRvcDogMDtcbiAgICBsZWZ0OiAwO1xuICAgIHJpZ2h0OiAwO1xuICAgIGJvdHRvbTogMDtcbiAgICBvcGFjaXR5OiAwO1xuICAgIHRyYW5zZm9ybTogc2NhbGUoMS4wMSwgMS4wMSk7XG4gICAgdHJhbnNmb3JtLW9yaWdpbjogdG9wIGNlbnRlcjtcbiAgICB0cmFuc2l0aW9uOiAuM3MgdHJhbnNmb3JtLCAuM3Mgb3BhY2l0eTsgfVxuICAgICNkb2NzLXBhZ2UtcmVzb3VyY2VzLWluZGV4IG1haW4gaDEuYmFubmVyIC5iZzo6YmVmb3JlIHtcbiAgICAgIGJhY2tncm91bmQ6IG5vLXJlcGVhdCBjZW50ZXIgdG9wIHVybChcIi9pbWcvZG9jcy9yZXNvdXJjZXMvcmVzb3VyY2VzLWhlYWRlci1pY29uLnBuZ1wiKTtcbiAgICAgIGJhY2tncm91bmQtc2l6ZTogNjBweDtcbiAgICAgIGhlaWdodDogNjBweDtcbiAgICAgIHdpZHRoOiA2MHB4O1xuICAgICAgY29udGVudDogJyc7XG4gICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xuICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICAgdG9wOiAtNXB4O1xuICAgICAgbWFyZ2luLXJpZ2h0OiAyMHB4OyB9XG4gICAgICBAbWVkaWEgKG1heC13aWR0aDogNDIwcHgpIHtcbiAgICAgICAgI2RvY3MtcGFnZS1yZXNvdXJjZXMtaW5kZXggbWFpbiBoMS5iYW5uZXIgLmJnOjpiZWZvcmUge1xuICAgICAgICAgIG1hcmdpbi1yaWdodDogNXB4OyB9IH1cbiAgICAjZG9jcy1wYWdlLXJlc291cmNlcy1pbmRleCBtYWluIGgxLmJhbm5lciAuYmcuYWN0aXZlIHtcbiAgICAgIG9wYWNpdHk6IDE7XG4gICAgICB0cmFuc2Zvcm06IHNjYWxlKDEsIDEpOyB9XG4gICAgI2RvY3MtcGFnZS1yZXNvdXJjZXMtaW5kZXggbWFpbiBoMS5iYW5uZXIgLmJnLnZpZGVvcyB7XG4gICAgICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXCIvaW1nL2RvY3MvcmVzb3VyY2VzL3ZpZGVvLmpwZ1wiKTtcbiAgICAgIGJhY2tncm91bmQtc2l6ZTogY292ZXI7IH1cbiAgICAjZG9jcy1wYWdlLXJlc291cmNlcy1pbmRleCBtYWluIGgxLmJhbm5lciAuYmcuYm9va3Mge1xuICAgICAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFwiL2ltZy9kb2NzL3Jlc291cmNlcy9ib29rcy5qcGdcIik7XG4gICAgICBiYWNrZ3JvdW5kLXNpemU6IGNvdmVyOyB9XG4gICAgI2RvY3MtcGFnZS1yZXNvdXJjZXMtaW5kZXggbWFpbiBoMS5iYW5uZXIgLmJnLmNvdXJzZXMge1xuICAgICAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFwiL2ltZy9kb2NzL3Jlc291cmNlcy9jb3Vyc2VzLmpwZ1wiKTtcbiAgICAgIGJhY2tncm91bmQtc2l6ZTogY292ZXI7IH1cbiAgICAjZG9jcy1wYWdlLXJlc291cmNlcy1pbmRleCBtYWluIGgxLmJhbm5lciAuYmcuZ3VpZGVzIHtcbiAgICAgIGJhY2tncm91bmQtaW1hZ2U6IHVybChcIi9pbWcvZG9jcy9yZXNvdXJjZXMvZ3VpZGVzLmpwZ1wiKTtcbiAgICAgIGJhY2tncm91bmQtc2l6ZTogY292ZXI7IH1cbiAgICAjZG9jcy1wYWdlLXJlc291cmNlcy1pbmRleCBtYWluIGgxLmJhbm5lciAuYmcuY29tbXVuaXR5IHtcbiAgICAgIGJhY2tncm91bmQtaW1hZ2U6IHVybChcIi9pbWcvZG9jcy9yZXNvdXJjZXMvY29tbXVuaXR5LmpwZ1wiKTtcbiAgICAgIGJhY2tncm91bmQtc2l6ZTogY292ZXI7IH1cbiAgICAjZG9jcy1wYWdlLXJlc291cmNlcy1pbmRleCBtYWluIGgxLmJhbm5lciAuYmcudG9vbHMge1xuICAgICAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFwiL2ltZy9kb2NzL3Jlc291cmNlcy90b29scy5qcGdcIik7XG4gICAgICBiYWNrZ3JvdW5kLXNpemU6IGNvdmVyOyB9XG5cbiNkb2NzLXBhZ2UtcmVzb3VyY2VzLWluZGV4IG1haW4gaDIge1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIGZvbnQtc2l6ZTogMzJweDsgfVxuXG4jZG9jcy1wYWdlLXJlc291cmNlcy1pbmRleCBtYWluIGZvcm0ge1xuICBtYXgtd2lkdGg6IDcyMnB4O1xuICBtYXJnaW46IDAgYXV0bztcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBtYXJnaW4tYm90dG9tOiA0MHB4OyB9XG4gICNkb2NzLXBhZ2UtcmVzb3VyY2VzLWluZGV4IG1haW4gZm9ybSBpbnB1dCB7XG4gICAgYm9yZGVyLXJhZGl1czogNTBweDtcbiAgICBwYWRkaW5nOiAxOHB4IDVweCAxN3B4IDU5cHg7XG4gICAgZm9udC1zaXplOiAxNnB4O1xuICAgIGhlaWdodDogNTZweDsgfVxuICAgICNkb2NzLXBhZ2UtcmVzb3VyY2VzLWluZGV4IG1haW4gZm9ybSBpbnB1dDo6cGxhY2Vob2xkZXIge1xuICAgICAgY29sb3I6ICM5ZGE1YjM7XG4gICAgICBmb250LXdlaWdodDogMzAwOyB9XG4gICNkb2NzLXBhZ2UtcmVzb3VyY2VzLWluZGV4IG1haW4gZm9ybTo6YmVmb3JlIHtcbiAgICBjb250ZW50OiAnXFxmMjBhJztcbiAgICBmb250LWZhbWlseTogJ0lvbmljb25zJztcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgbGVmdDogMjVweDtcbiAgICBmb250LXNpemU6IDI2cHg7XG4gICAgdG9wOiAxMHB4O1xuICAgIGNvbG9yOiAjOWRhNWIzO1xuICAgIGZvbnQtd2VpZ2h0OiAzMDA7IH1cblxuI2RvY3MtcGFnZS1yZXNvdXJjZXMtaW5kZXggbWFpbiAuc2VjdGlvbnMge1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LXdyYXA6IHdyYXA7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgcGFkZGluZy10b3A6IDUwcHg7IH1cbiAgI2RvY3MtcGFnZS1yZXNvdXJjZXMtaW5kZXggbWFpbiAuc2VjdGlvbnMuZmlsdGVyZWQgc2VjdGlvbjpub3QoLmFjdGl2ZSkge1xuICAgIHdpZHRoOiAwO1xuICAgIG9wYWNpdHk6IDA7XG4gICAgcGFkZGluZy1sZWZ0OiAwO1xuICAgIHBhZGRpbmctYm90dG9tOiAwO1xuICAgIHRyYW5zZm9ybS1vcmlnaW46IGxlZnQgY2VudGVyOyB9XG4gICNkb2NzLXBhZ2UtcmVzb3VyY2VzLWluZGV4IG1haW4gLnNlY3Rpb25zLmZpbHRlcmVkIHNlY3Rpb24uYWN0aXZlIHtcbiAgICB3aWR0aDogMTAwJTsgfVxuICAjZG9jcy1wYWdlLXJlc291cmNlcy1pbmRleCBtYWluIC5zZWN0aW9ucy5maWx0ZXJlZCAuc2hvdy1hbGwge1xuICAgIGNvbG9yOiAjNGE4YmZjO1xuICAgIHRvcDogMjBweDtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZTNkKDAsIDAsIDApO1xuICAgIHRyYW5zaXRpb246IC41cyBjb2xvciwgLjVzIHRyYW5zZm9ybSBlYXNlLWluLW91dCwgLjUgdG9wIHN0ZXAtZW5kOyB9XG4gICNkb2NzLXBhZ2UtcmVzb3VyY2VzLWluZGV4IG1haW4gLnNlY3Rpb25zIC5zaG93LWFsbCB7XG4gICAgZm9udC1zaXplOiAxM3B4O1xuICAgIGNvbG9yOiB0cmFuc3BhcmVudDtcbiAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xuICAgIGZvbnQtd2VpZ2h0OiA3MDA7XG4gICAgbGV0dGVyLXNwYWNpbmc6IC4xZW07XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIHRvcDogLTkwMHB4O1xuICAgIHJpZ2h0OiAwO1xuICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZTNkKDAsIC0xNXB4LCAwKTtcbiAgICB0cmFuc2l0aW9uOiAuNXMgY29sb3IsIC41cyB0cmFuc2Zvcm0gZWFzZS1pbi1vdXQsIC41IHRvcCBzdGVwLWVuZDsgfVxuICAgICNkb2NzLXBhZ2UtcmVzb3VyY2VzLWluZGV4IG1haW4gLnNlY3Rpb25zIC5zaG93LWFsbC5hY3RpdmUge1xuICAgICAgY29sb3I6ICM0YThiZmM7IH1cbiAgICAjZG9jcy1wYWdlLXJlc291cmNlcy1pbmRleCBtYWluIC5zZWN0aW9ucyAuc2hvdy1hbGw6aG92ZXIge1xuICAgICAgY29sb3I6ICMzMTdiZmM7IH1cbiAgI2RvY3MtcGFnZS1yZXNvdXJjZXMtaW5kZXggbWFpbiAuc2VjdGlvbnMgc2VjdGlvbiB7XG4gICAgd2lkdGg6IDMyNXB4O1xuICAgIHBhZGRpbmctbGVmdDogNjhweDtcbiAgICBwYWRkaW5nLWJvdHRvbTogNTBweDtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgb3ZlcmZsb3c6IHZpc2libGU7XG4gICAgdHJhbnNpdGlvbjogLjNzIHRyYW5zZm9ybSwgLjNzIHdpZHRoLCAuM3Mgb3BhY2l0eSwgLjNzIHBhZGRpbmctbGVmdCwgLjNzIGhlaWdodCwgLjNzIHBhZGRpbmctYm90dG9tOyB9XG4gICAgI2RvY3MtcGFnZS1yZXNvdXJjZXMtaW5kZXggbWFpbiAuc2VjdGlvbnMgc2VjdGlvbjo6YmVmb3JlIHtcbiAgICAgIGJhY2tncm91bmQ6IG5vLXJlcGVhdCBjZW50ZXIgdG9wIHVybChcIi9pbWcvZG9jcy9yZXNvdXJjZXMvcmVzb3VyY2VzLWljb25zLnBuZz8xXCIpO1xuICAgICAgYmFja2dyb3VuZC1zaXplOiAzMnB4O1xuICAgICAgaGVpZ2h0OiAzMnB4O1xuICAgICAgd2lkdGg6IDMycHg7XG4gICAgICBjb250ZW50OiAnJztcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgIGxlZnQ6IDE1cHg7XG4gICAgICB0b3A6IDA7IH1cbiAgICAjZG9jcy1wYWdlLXJlc291cmNlcy1pbmRleCBtYWluIC5zZWN0aW9ucyBzZWN0aW9uLmd1aWRlczo6YmVmb3JlIHtcbiAgICAgIGJhY2tncm91bmQtcG9zaXRpb246IGNlbnRlciAtMzJweDsgfVxuICAgICNkb2NzLXBhZ2UtcmVzb3VyY2VzLWluZGV4IG1haW4gLnNlY3Rpb25zIHNlY3Rpb24udG9vbHM6OmJlZm9yZSB7XG4gICAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiBjZW50ZXIgLTY0cHg7IH1cbiAgICAjZG9jcy1wYWdlLXJlc291cmNlcy1pbmRleCBtYWluIC5zZWN0aW9ucyBzZWN0aW9uLmNvbW11bml0eTo6YmVmb3JlIHtcbiAgICAgIGJhY2tncm91bmQtcG9zaXRpb246IGNlbnRlciAtOTZweDsgfVxuICAgICNkb2NzLXBhZ2UtcmVzb3VyY2VzLWluZGV4IG1haW4gLnNlY3Rpb25zIHNlY3Rpb24uYm9va3M6OmJlZm9yZSB7XG4gICAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiBjZW50ZXIgLTEyOHB4OyB9XG4gICAgI2RvY3MtcGFnZS1yZXNvdXJjZXMtaW5kZXggbWFpbiAuc2VjdGlvbnMgc2VjdGlvbi5jb3Vyc2VzOjpiZWZvcmUge1xuICAgICAgYmFja2dyb3VuZC1wb3NpdGlvbjogY2VudGVyIC0xNjBweDsgfVxuICAjZG9jcy1wYWdlLXJlc291cmNlcy1pbmRleCBtYWluIC5zZWN0aW9ucyBoMyB7XG4gICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcbiAgICBmb250LXNpemU6IDE1cHg7XG4gICAgbWFyZ2luLWJvdHRvbTogNDBweDtcbiAgICBtYXJnaW4tdG9wOiA2cHg7XG4gICAgY3Vyc29yOiBwb2ludGVyO1xuICAgIGZvbnQtd2VpZ2h0OiA2MDA7XG4gICAgbGV0dGVyLXNwYWNpbmc6IDAuMWVtOyB9XG4gICNkb2NzLXBhZ2UtcmVzb3VyY2VzLWluZGV4IG1haW4gLnNlY3Rpb25zIHVsIHtcbiAgICBwYWRkaW5nOiAwOyB9XG4gICNkb2NzLXBhZ2UtcmVzb3VyY2VzLWluZGV4IG1haW4gLnNlY3Rpb25zIGxpIHtcbiAgICBwYWRkaW5nLWJvdHRvbTogMjVweDtcbiAgICBsaXN0LXN0eWxlOiBub25lO1xuICAgIHdpZHRoOiAzMDBweDtcbiAgICBtYXJnaW4tcmlnaHQ6IDI1cHg7XG4gICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgIHZlcnRpY2FsLWFsaWduOiB0b3A7IH1cbiAgICAjZG9jcy1wYWdlLXJlc291cmNlcy1pbmRleCBtYWluIC5zZWN0aW9ucyBsaSBhIHtcbiAgICAgIGZvbnQtc2l6ZTogMTRweDtcbiAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7IH1cbiAgICAjZG9jcy1wYWdlLXJlc291cmNlcy1pbmRleCBtYWluIC5zZWN0aW9ucyBsaSBwIHtcbiAgICAgIGZvbnQtc2l6ZTogMTNweDtcbiAgICAgIG1hcmdpbi10b3A6IDA7IH1cblxuI3BhZ2Utc2FsZXMge1xuICBmb250LWZhbWlseTogXCJFaW5hXCIsIFwiSGVsdmV0aWNhIE5ldWVcIiwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmOyB9XG4gICNwYWdlLXNhbGVzIC5oZXJvIHtcbiAgICBwYWRkaW5nLXRvcDogNjBweDtcbiAgICBwYWRkaW5nLWJvdHRvbTogMDtcbiAgICBtYXgtd2lkdGg6IDc2MHB4O1xuICAgIG1hcmdpbi1sZWZ0OiBhdXRvO1xuICAgIG1hcmdpbi1yaWdodDogYXV0bztcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7IH1cbiAgICAjcGFnZS1zYWxlcyAuaGVybyBoMSB7XG4gICAgICBmb250LXNpemU6IDM2cHg7XG4gICAgICBmb250LXdlaWdodDogNzAwO1xuICAgICAgbGV0dGVyLXNwYWNpbmc6IC0wLjAzZW07XG4gICAgICBtYXJnaW4tYm90dG9tOiA4cHg7IH1cbiAgICAjcGFnZS1zYWxlcyAuaGVybyBwIHtcbiAgICAgIGZvbnQtc2l6ZTogMjBweDtcbiAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7IH1cbiAgI3BhZ2Utc2FsZXMgLmh1YnNwb3Qtb3ZlcnJpZGUge1xuICAgIG1heC13aWR0aDogODYwcHg7XG4gICAgbWFyZ2luLXRvcDogNDBweDtcbiAgICBtYXJnaW4tYm90dG9tOiAxMjBweDtcbiAgICBtYXJnaW4tbGVmdDogYXV0bztcbiAgICBtYXJnaW4tcmlnaHQ6IGF1dG87IH1cbiAgICBAbWVkaWEgKG1heC13aWR0aDogNzY4cHgpIHtcbiAgICAgICNwYWdlLXNhbGVzIC5odWJzcG90LW92ZXJyaWRlIHtcbiAgICAgICAgbWFyZ2luLWJvdHRvbTogNjBweDsgfSB9XG5cbiNwYWdlLXN0YXJ0dXBzIG1haW4ge1xuICBjb2xvcjogIzE2MWExZjtcbiAgZm9udC1mYW1pbHk6IFwiRWluYVwiLCBcIkhlbHZldGljYSBOZXVlXCIsIEhlbHZldGljYSwgc2Fucy1zZXJpZjtcbiAgZm9udC13ZWlnaHQ6IDYwMDsgfVxuXG4jcGFnZS1zdGFydHVwcyAuYnRuIHtcbiAgZm9udC1zaXplOiAxNnB4O1xuICBmb250LXdlaWdodDogNzAwO1xuICBwYWRkaW5nOiAxMnB4IDIwcHg7IH1cbiAgI3BhZ2Utc3RhcnR1cHMgLmJ0bi0tc2Vjb25kYXJ5IHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjMTAyMjQyOyB9XG5cbiNwYWdlLXN0YXJ0dXBzIC5jdGEge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcbiAgY29sb3I6IGluaGVyaXQ7XG4gIHBhZGRpbmctYm90dG9tOiA2MHB4O1xuICBwYWRkaW5nLXRvcDogMTIwcHg7XG4gIHRleHQtYWxpZ246IGNlbnRlcjsgfVxuICBAbWVkaWEgKG1heC13aWR0aDogNzY4cHgpIHtcbiAgICAjcGFnZS1zdGFydHVwcyAuY3RhIHtcbiAgICAgIHBhZGRpbmctdG9wOiAxNDBweDsgfSB9XG5cbiNwYWdlLXN0YXJ0dXBzIC5jdGEgaDEge1xuICBmb250LXNpemU6IDQ4cHg7XG4gIGZvbnQtd2VpZ2h0OiA3MDA7XG4gIGxldHRlci1zcGFjaW5nOiAtMC4wMmVtOyB9XG5cbiNwYWdlLXN0YXJ0dXBzIC5jdGEgcCB7XG4gIGNvbG9yOiAjMmYzNzQ0O1xuICBmb250LXNpemU6IDE4cHg7XG4gIG1hcmdpbjogMWVtIGF1dG8gMS41ZW07XG4gIG1heC13aWR0aDogNzIwcHg7IH1cblxuI3BhZ2Utc3RhcnR1cHMgLnZpZGVvIHtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgZGlzcGxheTogZmxleDtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gIHBhZGRpbmc6IDFlbSAxZW0gMmVtO1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIHotaW5kZXg6IDE7IH1cblxuI3BhZ2Utc3RhcnR1cHMgLnZpZGVvLXBsYXllciB7XG4gIG1heC13aWR0aDogOTAwcHg7XG4gIHdpZHRoOiAxMDAlO1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIHotaW5kZXg6IDI7IH1cbiAgI3BhZ2Utc3RhcnR1cHMgLnZpZGVvLXBsYXllcjpob3ZlciB7XG4gICAgY3Vyc29yOiBwb2ludGVyOyB9XG4gICNwYWdlLXN0YXJ0dXBzIC52aWRlby1wbGF5ZXI6bm90KC5pcy1wbGF5aW5nKTpob3ZlciAudmlkZW8tcGxheWVyLWZyYW1lIHtcbiAgICB0cmFuc2Zvcm06IHNjYWxlKDAuOTkpOyB9XG4gICNwYWdlLXN0YXJ0dXBzIC52aWRlby1wbGF5ZXI6bm90KC5pcy1wbGF5aW5nKTpob3ZlciAudmlkZW8tcGxheWVyLWJ1dHRvbiB7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoLTUwJSwgLTUwJSkgc2NhbGUoMS4xKTsgfVxuICAjcGFnZS1zdGFydHVwcyAudmlkZW8tcGxheWVyLmlzLXJlYWR5IC52aWRlby1wbGF5ZXItYnV0dG9uIHtcbiAgICBkaXNwbGF5OiBibG9jazsgfVxuICAjcGFnZS1zdGFydHVwcyAudmlkZW8tcGxheWVyLmlzLXBsYXlpbmcgLnZpZGVvLXBsYXllci1idXR0b24ge1xuICAgIGRpc3BsYXk6IG5vbmU7IH1cblxuI3BhZ2Utc3RhcnR1cHMgLnZpZGVvLXBsYXllci1idXR0b24ge1xuICBkaXNwbGF5OiBub25lO1xuICBsZWZ0OiA1MCU7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgdG9wOiA1MCU7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsIC01MCUpIHNjYWxlKDEpO1xuICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gNDAwbXMgY3ViaWMtYmV6aWVyKDAuMTc1LCAwLjg4NSwgMC4zMiwgMS4yNzUpO1xuICB3aWR0aDogMTIwcHg7XG4gIHotaW5kZXg6IDE7IH1cblxuI3BhZ2Utc3RhcnR1cHMgLnZpZGVvLXBsYXllci1mcmFtZSB7XG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcIi9pbWcvc3RhcnR1cHMvc3RhcnR1cHMtdmlkZW8tcG9zdGVyLmpwZ1wiKTtcbiAgYmFja2dyb3VuZC1wb3NpdGlvbjogY2VudGVyIGNlbnRlcjtcbiAgYmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdDtcbiAgYmFja2dyb3VuZC1zaXplOiBjb250YWluO1xuICBib3JkZXItcmFkaXVzOiAyMHB4O1xuICBib3gtc2hhZG93OiAwIDhweCAxNnB4IHJnYmEoMCwgMTQsIDQxLCAwLjA4KSwgMCAzMHB4IDYwcHggcmdiYSgwLCAxMSwgMzQsIDAuMTUpO1xuICBoZWlnaHQ6IDA7XG4gIG92ZXJmbG93OiBoaWRkZW47XG4gIHBhZGRpbmctYm90dG9tOiA1Ni4yNSU7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgdHJhbnNmb3JtOiBzY2FsZSgxKTtcbiAgdHJhbnNpdGlvbjogdHJhbnNmb3JtIDQwMG1zIGN1YmljLWJlemllcigwLjE5LCAxLCAwLjIyLCAxKTsgfVxuICAjcGFnZS1zdGFydHVwcyAudmlkZW8tcGxheWVyLWZyYW1lID4gaWZyYW1lIHtcbiAgICBoZWlnaHQ6IDEwMCU7XG4gICAgbGVmdDogMDtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgdG9wOiAwO1xuICAgIHdpZHRoOiAxMDAlOyB9XG5cbiNwYWdlLXN0YXJ0dXBzIC52aWRlby1mb290ZXIge1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBkaXNwbGF5OiBmbGV4O1xuICBtYXgtd2lkdGg6IDkwMHB4O1xuICBtYXJnaW46IDAgYXV0byA2MHB4O1xuICBwYWRkaW5nOiAxZW07XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTsgfVxuICAjcGFnZS1zdGFydHVwcyAudmlkZW8tZm9vdGVyOmJlZm9yZSB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogI2U4ZWJmMTtcbiAgICBjb250ZW50OiBcIlwiO1xuICAgIGhlaWdodDogNTAlO1xuICAgIGxlZnQ6IDUwJTtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgdG9wOiAyNSU7XG4gICAgd2lkdGg6IDFweDsgfVxuICBAbWVkaWEgKG1heC13aWR0aDogNzY4cHgpIHtcbiAgICAjcGFnZS1zdGFydHVwcyAudmlkZW8tZm9vdGVyIHtcbiAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICBtYXJnaW4tYm90dG9tOiAwO1xuICAgICAgdGV4dC1hbGlnbjogY2VudGVyOyB9XG4gICAgICAjcGFnZS1zdGFydHVwcyAudmlkZW8tZm9vdGVyOmJlZm9yZSB7XG4gICAgICAgIGRpc3BsYXk6IG5vbmU7IH0gfVxuXG4jcGFnZS1zdGFydHVwcyAudmlkZW8tZm9vdGVyID4gKiB7XG4gIGZsZXg6IDE7IH1cbiAgI3BhZ2Utc3RhcnR1cHMgLnZpZGVvLWZvb3RlciA+ICo6Zmlyc3QtY2hpbGQge1xuICAgIG1hcmdpbi1yaWdodDogM2VtOyB9XG4gICNwYWdlLXN0YXJ0dXBzIC52aWRlby1mb290ZXIgPiAqOmxhc3QtY2hpbGQge1xuICAgIG1hcmdpbi1sZWZ0OiAzZW07IH1cbiAgQG1lZGlhIChtYXgtd2lkdGg6IDc2OHB4KSB7XG4gICAgI3BhZ2Utc3RhcnR1cHMgLnZpZGVvLWZvb3RlciA+ICo6Zmlyc3QtY2hpbGQsICNwYWdlLXN0YXJ0dXBzIC52aWRlby1mb290ZXIgPiAqOmxhc3QtY2hpbGQge1xuICAgICAgbWFyZ2luLWxlZnQ6IDA7XG4gICAgICBtYXJnaW4tcmlnaHQ6IDA7IH0gfVxuXG4jcGFnZS1zdGFydHVwcyAudmlkZW8tZm9vdGVyID4gcCB7XG4gIGZvbnQtc2l6ZTogMjBweDtcbiAgZm9udC13ZWlnaHQ6IDcwMDtcbiAgbGV0dGVyLXNwYWNpbmc6IC0wLjAyZW07XG4gIGxpbmUtaGVpZ2h0OiAxLjU7IH1cblxuI3BhZ2Utc3RhcnR1cHMgLnZpZGVvLWZvb3RlciA+IGJsb2NrcXVvdGUge1xuICBib3JkZXI6IG5vbmU7XG4gIGZvbnQtc2l6ZTogMTRweDtcbiAgbWFyZ2luOiAwO1xuICBwYWRkaW5nOiAwOyB9XG4gIEBtZWRpYSAobWF4LXdpZHRoOiA3NjhweCkge1xuICAgICNwYWdlLXN0YXJ0dXBzIC52aWRlby1mb290ZXIgPiBibG9ja3F1b3RlIHtcbiAgICAgIG1hcmdpbjogMWVtIDAgMCAwOyB9IH1cblxuI3BhZ2Utc3RhcnR1cHMgLnZpZGVvLWZvb3RlciA+IGJsb2NrcXVvdGUgc21hbGwge1xuICBjb2xvcjogIzc4ODQ5NztcbiAgZGlzcGxheTogYmxvY2s7XG4gIG1hcmdpbi10b3A6IDEuNWVtO1xuICB0ZXh0LWFsaWduOiByaWdodDsgfVxuICAjcGFnZS1zdGFydHVwcyAudmlkZW8tZm9vdGVyID4gYmxvY2txdW90ZSBzbWFsbDpiZWZvcmUge1xuICAgIGRpc3BsYXk6IG5vbmU7IH1cbiAgI3BhZ2Utc3RhcnR1cHMgLnZpZGVvLWZvb3RlciA+IGJsb2NrcXVvdGUgc21hbGwgPiBzcGFuIHtcbiAgICBtYXJnaW4tbGVmdDogMC41ZW07XG4gICAgb3BhY2l0eTogMC41OyB9XG4gIEBtZWRpYSAobWF4LXdpZHRoOiA3NjhweCkge1xuICAgICNwYWdlLXN0YXJ0dXBzIC52aWRlby1mb290ZXIgPiBibG9ja3F1b3RlIHNtYWxsIHtcbiAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsgfSB9XG5cbiNwYWdlLXN0YXJ0dXBzIC5zZWN0aW9uLWhlYWRlciB7XG4gIGNvbG9yOiAjMmYzNzQ0O1xuICBmb250LXNpemU6IDIwcHg7XG4gIGxldHRlci1zcGFjaW5nOiAtMC4wMmVtO1xuICBtYXJnaW4tYm90dG9tOiA0ZW07XG4gIG1hcmdpbi10b3A6IDRlbTtcbiAgbWF4LXdpZHRoOiAzMmVtOyB9XG5cbiNwYWdlLXN0YXJ0dXBzIC5zZWN0aW9uLWhlYWRlciBoMiB7XG4gIGNvbG9yOiAjMjQyODJlO1xuICBmb250LXNpemU6IDEuOGVtO1xuICBmb250LXdlaWdodDogNzAwO1xuICBtYXJnaW4tYm90dG9tOiAwLjY1ZW07IH1cblxuI3BhZ2Utc3RhcnR1cHMgLm9zcyAuc2VjdGlvbi1oZWFkZXIgaDIgc3BhbixcbiNwYWdlLXN0YXJ0dXBzIC5wcm8gLnNlY3Rpb24taGVhZGVyIGgyIHNwYW4ge1xuICBib3JkZXItYm90dG9tOiBzb2xpZCA0cHggIzI0MjgyZTsgfVxuXG4jcGFnZS1zdGFydHVwcyAuZmVhdHVyZSB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZvbnQtc2l6ZTogMTZweDtcbiAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgbGV0dGVyLXNwYWNpbmc6IC0wLjAxZW07IH1cblxuI3BhZ2Utc3RhcnR1cHMgLmZlYXR1cmVfX2ljb24ge1xuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXCIvaW1nL3N0YXJ0dXBzL3N0YXJ0dXBzLWZlYXR1cmUtaWNvbnMucG5nXCIpO1xuICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiB0b3A7XG4gIGJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7XG4gIGJhY2tncm91bmQtc2l6ZTogMTAwJTtcbiAgZGlzcGxheTogYmxvY2s7XG4gIGZsZXg6IDAgMCA0OHB4O1xuICBoZWlnaHQ6IDQ4cHg7XG4gIG1hcmdpbi1yaWdodDogMmVtO1xuICB3aWR0aDogNDhweDsgfVxuICAjcGFnZS1zdGFydHVwcyAuZmVhdHVyZV9faWNvbi5kYXp6bGUge1xuICAgIGJhY2tncm91bmQtcG9zaXRpb24teTogMDsgfVxuICAjcGFnZS1zdGFydHVwcyAuZmVhdHVyZV9faWNvbi5zcGVlZCB7XG4gICAgYmFja2dyb3VuZC1wb3NpdGlvbi15OiAtNDhweDsgfVxuICAjcGFnZS1zdGFydHVwcyAuZmVhdHVyZV9faWNvbi50YWtlb2ZmIHtcbiAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uLXk6IC05NnB4OyB9XG4gICNwYWdlLXN0YXJ0dXBzIC5mZWF0dXJlX19pY29uLnBsYXRmb3JtcyB7XG4gICAgYmFja2dyb3VuZC1wb3NpdGlvbi15OiAtMTQ0cHg7IH1cbiAgI3BhZ2Utc3RhcnR1cHMgLmZlYXR1cmVfX2ljb24ubmF0aXZlIHtcbiAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uLXk6IC0xOTJweDsgfVxuICAjcGFnZS1zdGFydHVwcyAuZmVhdHVyZV9faWNvbi53b3JsZHdpZGUge1xuICAgIGJhY2tncm91bmQtcG9zaXRpb24teTogLTI0MHB4OyB9XG4gICNwYWdlLXN0YXJ0dXBzIC5mZWF0dXJlX19pY29uLmRlcGxveSB7XG4gICAgYmFja2dyb3VuZC1wb3NpdGlvbi15OiAtMjg4cHg7IH1cbiAgI3BhZ2Utc3RhcnR1cHMgLmZlYXR1cmVfX2ljb24uY29tcGlsZSB7XG4gICAgYmFja2dyb3VuZC1wb3NpdGlvbi15OiAtMzM2cHg7IH1cbiAgI3BhZ2Utc3RhcnR1cHMgLmZlYXR1cmVfX2ljb24ubW9uaXRvciB7XG4gICAgYmFja2dyb3VuZC1wb3NpdGlvbi15OiAtMzg0cHg7IH1cblxuI3BhZ2Utc3RhcnR1cHMgLmZlYXR1cmVfX3RleHQgc3Ryb25nIHtcbiAgZGlzcGxheTogYmxvY2s7XG4gIGZvbnQtc2l6ZTogMS4yNWVtO1xuICBtYXJnaW4tYm90dG9tOiAwLjc1ZW07IH1cblxuI3BhZ2Utc3RhcnR1cHMgLmZlYXR1cmVfX3RleHQgcCB7XG4gIGNvbG9yOiAjNzg4NDk3O1xuICBsaW5lLWhlaWdodDogMS42NTsgfVxuXG4jcGFnZS1zdGFydHVwcyAuZmVhdHVyZS1saXN0IHtcbiAgbGlzdC1zdHlsZTogbm9uZTtcbiAgbWFyZ2luOiAwO1xuICBwYWRkaW5nOiAwOyB9XG5cbiNwYWdlLXN0YXJ0dXBzIC5mZWF0dXJlLWxpc3QgPiBsaTpub3QoOmxhc3QtY2hpbGQpIHtcbiAgbWFyZ2luLWJvdHRvbTogMmVtOyB9XG5cbiNwYWdlLXN0YXJ0dXBzIC5hcHAtc2hvd2Nhc2Uge1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOyB9XG5cbiNwYWdlLXN0YXJ0dXBzIC5hcHAtc2hvd2Nhc2VfX2ltYWdlIHtcbiAgd2lkdGg6IDEwMCU7IH1cblxuI3BhZ2Utc3RhcnR1cHMgLmFwcC1zaG93Y2FzZV9faWNvbiB7XG4gIHdpZHRoOiA5M3B4O1xuICBtYXJnaW4tcmlnaHQ6IDFlbTsgfVxuXG4jcGFnZS1zdGFydHVwcyAuYXBwLXNob3djYXNlX19mb290ZXIge1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBkaXNwbGF5OiBpbmxpbmUtZmxleDtcbiAgZm9udC1zaXplOiAxNnB4O1xuICBmb250LXdlaWdodDogNzAwO1xuICBsZXR0ZXItc3BhY2luZzogLTAuMDFlbTtcbiAgcGFkZGluZzogMWVtOyB9XG5cbiNwYWdlLXN0YXJ0dXBzIC5hcHAtc2hvd2Nhc2VfX2Zvb3RlciBibG9ja3F1b3RlIHtcbiAgYm9yZGVyLWxlZnQ6IG5vbmU7XG4gIG1hcmdpbi1ib3R0b206IDAuNzVlbTtcbiAgcGFkZGluZzogMDsgfVxuXG4jcGFnZS1zdGFydHVwcyAuYXBwLXNob3djYXNlX19mb290ZXIgc21hbGwge1xuICBkaXNwbGF5OiBibG9jaztcbiAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgdGV4dC1hbGlnbjogcmlnaHQ7IH1cbiAgI3BhZ2Utc3RhcnR1cHMgLmFwcC1zaG93Y2FzZV9fZm9vdGVyIHNtYWxsID4gc3BhbiB7XG4gICAgb3BhY2l0eTogMC41OyB9XG5cbkBtZWRpYSAobWluLXdpZHRoOiA3NjhweCkge1xuICAjcGFnZS1zdGFydHVwcyAua2V5LWJlbmVmaXRzIC5mZWF0dXJlLWxpc3Qge1xuICAgIGRpc3BsYXk6IGZsZXg7IH1cbiAgI3BhZ2Utc3RhcnR1cHMgLmtleS1iZW5lZml0cyAuZmVhdHVyZS1saXN0ID4gbGkge1xuICAgIGZsZXg6IDE7XG4gICAgcGFkZGluZy1yaWdodDogM2VtOyB9XG4gICNwYWdlLXN0YXJ0dXBzIC5rZXktYmVuZWZpdHMgLmZlYXR1cmUge1xuICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47IH1cbiAgI3BhZ2Utc3RhcnR1cHMgLmtleS1iZW5lZml0cyAuZmVhdHVyZV9faWNvbiB7XG4gICAgbWFyZ2luLWJvdHRvbTogMS4yNWVtOyB9IH1cblxuI3BhZ2Utc3RhcnR1cHMgLm9zcyxcbiNwYWdlLXN0YXJ0dXBzIC5wcm8ge1xuICBwYWRkaW5nLWJvdHRvbTogMTAwcHg7IH1cbiAgI3BhZ2Utc3RhcnR1cHMgLm9zcyAuY29udGFpbmVyLFxuICAjcGFnZS1zdGFydHVwcyAucHJvIC5jb250YWluZXIge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjsgfVxuICAgIEBtZWRpYSAobWF4LXdpZHRoOiA3NjhweCkge1xuICAgICAgI3BhZ2Utc3RhcnR1cHMgLm9zcyAuY29udGFpbmVyLFxuICAgICAgI3BhZ2Utc3RhcnR1cHMgLnBybyAuY29udGFpbmVyIHtcbiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsgfSB9XG4gICNwYWdlLXN0YXJ0dXBzIC5vc3MgLmFwcC1zaG93Y2FzZSxcbiAgI3BhZ2Utc3RhcnR1cHMgLnBybyAuYXBwLXNob3djYXNlIHtcbiAgICBtYXJnaW46IGF1dG8gMTAlO1xuICAgIG1heC13aWR0aDogODYwcHg7XG4gICAgcGFkZGluZy10b3A6IDEwMHB4OyB9XG5cbkBtZWRpYSAobWluLXdpZHRoOiA3NjhweCkge1xuICAjcGFnZS1zdGFydHVwcyAub3NzIC5hcHAtc2hvd2Nhc2Uge1xuICAgIG1hcmdpbi1sZWZ0OiAwO1xuICAgIG1hcmdpbi1yaWdodDogODBweDsgfSB9XG5cbkBtZWRpYSAobWluLXdpZHRoOiA3NjhweCkge1xuICAjcGFnZS1zdGFydHVwcyAucHJvIC5hcHAtc2hvd2Nhc2Uge1xuICAgIG9yZGVyOiAxO1xuICAgIG1hcmdpbi1sZWZ0OiA4MHB4O1xuICAgIG1hcmdpbi1yaWdodDogMDsgfSB9XG5cbiNwYWdlLXN0YXJ0dXBzIC5wcm8gLmZlYXR1cmVfX3RleHQgc3Ryb25nIHtcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsgfVxuICBAbWVkaWEgKG1pbi13aWR0aDogMTIyMHB4KSB7XG4gICAgI3BhZ2Utc3RhcnR1cHMgLnBybyAuZmVhdHVyZV9fdGV4dCBzdHJvbmcge1xuICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgIGZsZXgtZGlyZWN0aW9uOiByb3c7XG4gICAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47IH0gfVxuXG4jcGFnZS1zdGFydHVwcyAucHJvIC5mZWF0dXJlX190ZXh0IHN0cm9uZyBhIHtcbiAgZm9udC1zaXplOiAwLjU1ZW07XG4gIGxldHRlci1zcGFjaW5nOiAwLjA1ZW07XG4gIG1hcmdpbi10b3A6IDAuNWVtO1xuICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlOyB9XG4gIEBtZWRpYSAobWluLXdpZHRoOiAxMjIwcHgpIHtcbiAgICAjcGFnZS1zdGFydHVwcyAucHJvIC5mZWF0dXJlX190ZXh0IHN0cm9uZyBhIHtcbiAgICAgIG1hcmdpbi10b3A6IDA7IH0gfVxuXG4jcGFnZS1zdGFydHVwcyBzZWN0aW9uLnJlc291cmNlcyB7XG4gIHBhZGRpbmctYm90dG9tOiAxMDBweDsgfVxuXG4jcGFnZS1zdGFydHVwcyAucmVzb3VyY2UtY2FyZCB7XG4gIGJhY2tncm91bmQtY29sb3I6ICMzODNkM2Y7XG4gIGJvcmRlci1yYWRpdXM6IDE2cHg7XG4gIGJveC1zaGFkb3c6IDAgOHB4IDE2cHggcmdiYSgwLCAwLCAwLCAwLjEpLCAwIDJweCA0cHggcmdiYSgwLCAwLCAwLCAwLjA4KTtcbiAgY29sb3I6ICNmZmZmZmY7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gIGZvbnQtc2l6ZTogMjBweDtcbiAgZm9udC13ZWlnaHQ6IDcwMDtcbiAgbWluLWhlaWdodDogMjU1cHg7XG4gIHBhZGRpbmc6IDI2cHg7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgwKTtcbiAgdHJhbnNpdGlvbjogYm94LXNoYWRvdyAyNTBtcyBlYXNlLCB0cmFuc2Zvcm0gMjAwbXMgZWFzZTtcbiAgd2lkdGg6IDI1NXB4OyB9XG4gICNwYWdlLXN0YXJ0dXBzIC5yZXNvdXJjZS1jYXJkOmZvY3VzIHtcbiAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7IH1cbiAgI3BhZ2Utc3RhcnR1cHMgLnJlc291cmNlLWNhcmQ6aG92ZXIge1xuICAgIGJveC1zaGFkb3c6IDAgMTJweCAyNHB4IHJnYmEoMCwgMCwgMCwgMC4xKTtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTFweCk7IH1cblxuI3BhZ2Utc3RhcnR1cHMgLnJlc291cmNlLWNhcmRfX2V5ZWJyb3cge1xuICBjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjUpO1xuICBmb250LXNpemU6IDAuNWVtO1xuICBsZXR0ZXItc3BhY2luZzogMC4xNWVtO1xuICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlOyB9XG5cbiNwYWdlLXN0YXJ0dXBzIC5yZXNvdXJjZS1jYXJkX190aXRsZSB7XG4gIGxldHRlci1zcGFjaW5nOiAtMC4wMTVlbTtcbiAgbGluZS1oZWlnaHQ6IDEuMztcbiAgbWFyZ2luOiAwLjVlbSAwOyB9XG5cbiNwYWdlLXN0YXJ0dXBzIC5yZXNvdXJjZS1jYXJkX19jdGEge1xuICBmb250LXNpemU6IDAuN2VtO1xuICBsZXR0ZXItc3BhY2luZzogMC4xNWVtO1xuICBtYXJnaW4tdG9wOiBhdXRvO1xuICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlOyB9XG5cbiNwYWdlLXN0YXJ0dXBzIC5yZXNvdXJjZS1jYXJkLWxpc3Qge1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LXdyYXA6IHdyYXA7IH1cbiAgI3BhZ2Utc3RhcnR1cHMgLnJlc291cmNlLWNhcmQtbGlzdCAucmVzb3VyY2UtY2FyZCB7XG4gICAgbWFyZ2luOiAwIDEuNWVtIDEuNWVtIDA7IH1cbiAgICAjcGFnZS1zdGFydHVwcyAucmVzb3VyY2UtY2FyZC1saXN0IC5yZXNvdXJjZS1jYXJkOm50aC1jaGlsZCgxKSB7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmY2NjQ0OyB9XG4gICAgI3BhZ2Utc3RhcnR1cHMgLnJlc291cmNlLWNhcmQtbGlzdCAucmVzb3VyY2UtY2FyZDpudGgtY2hpbGQoMikge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogIzAzM2Y4MDsgfVxuICAgICNwYWdlLXN0YXJ0dXBzIC5yZXNvdXJjZS1jYXJkLWxpc3QgLnJlc291cmNlLWNhcmQ6bnRoLWNoaWxkKDMpIHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6ICNmZmJmNjk7IH1cbiAgICAjcGFnZS1zdGFydHVwcyAucmVzb3VyY2UtY2FyZC1saXN0IC5yZXNvdXJjZS1jYXJkOm50aC1jaGlsZCg0KSB7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjODQ2YWMyOyB9XG4gICAgI3BhZ2Utc3RhcnR1cHMgLnJlc291cmNlLWNhcmQtbGlzdCAucmVzb3VyY2UtY2FyZDpudGgtY2hpbGQoNSkge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogIzBlOGVmYjsgfVxuICAgICNwYWdlLXN0YXJ0dXBzIC5yZXNvdXJjZS1jYXJkLWxpc3QgLnJlc291cmNlLWNhcmQ6bnRoLWNoaWxkKDYpIHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6ICMwMDM5NTM7IH1cbiAgICAjcGFnZS1zdGFydHVwcyAucmVzb3VyY2UtY2FyZC1saXN0IC5yZXNvdXJjZS1jYXJkOm50aC1jaGlsZCg3KSB7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjNDRiY2MwOyB9XG4gIEBtZWRpYSAobWF4LXdpZHRoOiA3NjhweCkge1xuICAgICNwYWdlLXN0YXJ0dXBzIC5yZXNvdXJjZS1jYXJkLWxpc3Qge1xuICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7IH1cbiAgICAgICNwYWdlLXN0YXJ0dXBzIC5yZXNvdXJjZS1jYXJkLWxpc3QgLnJlc291cmNlLWNhcmQge1xuICAgICAgICBtYXJnaW46IDAgMC41ZW0gMWVtOyB9IH1cblxuI3BhZ2Utc3RhcnR1cHMgLnF1b3RlcyB7XG4gIGNvbG9yOiAjZmZmZmZmO1xuICBkaXNwbGF5OiBmbGV4O1xuICBmb250LXNpemU6IDIwcHg7XG4gIGZvbnQtd2VpZ2h0OiA3MDA7XG4gIGxldHRlci1zcGFjaW5nOiAtMC4wMWVtOyB9XG4gIEBtZWRpYSAobWF4LXdpZHRoOiA3NjhweCkge1xuICAgICNwYWdlLXN0YXJ0dXBzIC5xdW90ZXMge1xuICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsgfSB9XG5cbiNwYWdlLXN0YXJ0dXBzIC5xdW90ZXNfX2NvbnRlbnQge1xuICBtYXgtd2lkdGg6IDQ5MHB4O1xuICBwb3NpdGlvbjogcmVsYXRpdmU7IH1cblxuI3BhZ2Utc3RhcnR1cHMgLnF1b3Rlc19fcXVvdGUge1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4OiAxO1xuICBwYWRkaW5nOiA4MHB4OyB9XG4gIEBtZWRpYSAobWF4LXdpZHRoOiA0ODBweCkge1xuICAgICNwYWdlLXN0YXJ0dXBzIC5xdW90ZXNfX3F1b3RlIHtcbiAgICAgIHBhZGRpbmc6IDQwcHg7IH0gfVxuICBAbWVkaWEgKG1pbi13aWR0aDogNzY4cHgpIHtcbiAgICAjcGFnZS1zdGFydHVwcyAucXVvdGVzX19xdW90ZTpmaXJzdC1jaGlsZCB7XG4gICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtZW5kOyB9IH1cbiAgI3BhZ2Utc3RhcnR1cHMgLnF1b3Rlc19fcXVvdGUuam91bGUge1xuICAgIGJhY2tncm91bmQtY29sb3I6ICNmZjY3NGQ7IH1cbiAgI3BhZ2Utc3RhcnR1cHMgLnF1b3Rlc19fcXVvdGUuY29taWNoYXVzIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZThlYmYxO1xuICAgIGNvbG9yOiAjMjQyODJlOyB9XG4gICNwYWdlLXN0YXJ0dXBzIC5xdW90ZXNfX3F1b3RlLnBhY2lmaWNhIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjNGVkYWIxOyB9XG4gICNwYWdlLXN0YXJ0dXBzIC5xdW90ZXNfX3F1b3RlLm5hdHVyYWwtY3ljbGVzIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjNzU0NWYwOyB9XG5cbiNwYWdlLXN0YXJ0dXBzIC5xdW90ZXNfX2xvZ28ge1xuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXCIvaW1nL3N0YXJ0dXBzL3N0YXJ0dXBzLXF1b3RlLWxvZ29zLnBuZ1wiKTtcbiAgYmFja2dyb3VuZC1wb3NpdGlvbjogdG9wO1xuICBiYWNrZ3JvdW5kLXNpemU6IDEwMCU7XG4gIGJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICBoZWlnaHQ6IDQwcHg7XG4gIG1hcmdpbi1ib3R0b206IDJlbTtcbiAgd2lkdGg6IDE2MHB4OyB9XG4gICNwYWdlLXN0YXJ0dXBzIC5xdW90ZXNfX2xvZ28uam91bGUge1xuICAgIGJhY2tncm91bmQtcG9zaXRpb24teTogMDsgfVxuICAjcGFnZS1zdGFydHVwcyAucXVvdGVzX19sb2dvLmNvbWljaGF1cyB7XG4gICAgYmFja2dyb3VuZC1wb3NpdGlvbi15OiAtNDBweDsgfVxuICAjcGFnZS1zdGFydHVwcyAucXVvdGVzX19sb2dvLnBhY2lmaWNhIHtcbiAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uLXk6IC04MHB4OyB9XG4gICNwYWdlLXN0YXJ0dXBzIC5xdW90ZXNfX2xvZ28ubmF0dXJhbC1jeWNsZXMge1xuICAgIGJhY2tncm91bmQtcG9zaXRpb24teTogLTEyMHB4OyB9XG5cbiNwYWdlLXN0YXJ0dXBzIC5xdW90ZXMgYmxvY2txdW90ZSB7XG4gIGJvcmRlcjogbm9uZTtcbiAgZm9udC1zaXplOiBpbmhlcml0O1xuICBsaW5lLWhlaWdodDogMS41O1xuICBtYXJnaW46IDA7XG4gIHBhZGRpbmc6IDA7IH1cblxuI3BhZ2Utc3RhcnR1cHMgLnF1b3RlcyBibG9ja3F1b3RlID4gc21hbGwge1xuICBjb2xvcjogaW5oZXJpdDtcbiAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgbWFyZ2luLXRvcDogMmVtO1xuICB0ZXh0LWFsaWduOiByaWdodDsgfVxuICAjcGFnZS1zdGFydHVwcyAucXVvdGVzIGJsb2NrcXVvdGUgPiBzbWFsbCA+IHNwYW4ge1xuICAgIG9wYWNpdHk6IDAuNTtcbiAgICBwYWRkaW5nLWxlZnQ6IDAuNWVtOyB9XG4gICNwYWdlLXN0YXJ0dXBzIC5xdW90ZXMgYmxvY2txdW90ZSA+IHNtYWxsOmJlZm9yZSB7XG4gICAgZGlzcGxheTogbm9uZTsgfVxuXG4jcGFnZS1zdGFydHVwcyAuZ2V0LXN0YXJ0ZWQge1xuICBiYWNrZ3JvdW5kLWltYWdlOiBsaW5lYXItZ3JhZGllbnQoOTBkZWcsICMzODgwZmYsICM2N2MwZmYpO1xuICBwYWRkaW5nOiA4MHB4IDA7IH1cblxuI3BhZ2Utc3RhcnR1cHMgLmdldC1zdGFydGVkIC5jb250YWluZXIge1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBkaXNwbGF5OiBmbGV4O1xuICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47IH1cbiAgI3BhZ2Utc3RhcnR1cHMgLmdldC1zdGFydGVkIC5jb250YWluZXI6YWZ0ZXIsICNwYWdlLXN0YXJ0dXBzIC5nZXQtc3RhcnRlZCAuY29udGFpbmVyOmJlZm9yZSB7XG4gICAgZGlzcGxheTogbm9uZTsgfVxuICBAbWVkaWEgKG1heC13aWR0aDogMTIyMHB4KSB7XG4gICAgI3BhZ2Utc3RhcnR1cHMgLmdldC1zdGFydGVkIC5jb250YWluZXIge1xuICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsgfSB9XG5cbiNwYWdlLXN0YXJ0dXBzIC5nZXQtc3RhcnRlZCAuYnRuIHtcbiAgbWFyZ2luOiAwLjM1ZW07IH1cblxuI3BhZ2Utc3RhcnR1cHMgLmdldC1zdGFydGVkIC5idG4tLXNlY29uZGFyeSB7XG4gIGJhY2tncm91bmQtY29sb3I6ICMwMDc4ZmY7IH1cblxuI3BhZ2Utc3RhcnR1cHMgLmdldC1zdGFydGVkIGgyLFxuI3BhZ2Utc3RhcnR1cHMgLmdldC1zdGFydGVkIHAge1xuICBmb250LXdlaWdodDogNjAwO1xuICBsZXR0ZXItc3BhY2luZzogLTAuMDJlbTsgfVxuXG4jcGFnZS1zdGFydHVwcyAuZ2V0LXN0YXJ0ZWQgaDIge1xuICBjb2xvcjogI2ZmZmZmZjtcbiAgZm9udC1zaXplOiAyOHB4OyB9XG5cbiNwYWdlLXN0YXJ0dXBzIC5nZXQtc3RhcnRlZCBwIHtcbiAgY29sb3I6ICMwMDNlODI7XG4gIGZvbnQtc2l6ZTogMjBweDsgfVxuICBAbWVkaWEgKG1heC13aWR0aDogMTIyMHB4KSB7XG4gICAgI3BhZ2Utc3RhcnR1cHMgLmdldC1zdGFydGVkIHAge1xuICAgICAgbWFyZ2luLWJvdHRvbTogMWVtOyB9IH1cblxuI3BhZ2Utd2hhdC1pcy1pb25pYyAuYmFubmVyLFxuI3BhZ2Utd2hhdC1pcy1pb25pYyBtYWluIHtcbiAgZm9udC1mYW1pbHk6IFwiSW50ZXJcIiwgXCJJbnRlciBVSVwiLCBIZWx2ZXRpY2EsIEFyaWFsLCBzYW5zLXNlcmlmOyB9XG4gICNwYWdlLXdoYXQtaXMtaW9uaWMgLmJhbm5lciBoMSxcbiAgI3BhZ2Utd2hhdC1pcy1pb25pYyAuYmFubmVyIGgyLFxuICAjcGFnZS13aGF0LWlzLWlvbmljIC5iYW5uZXIgaDMsXG4gICNwYWdlLXdoYXQtaXMtaW9uaWMgLmJhbm5lciBoNCxcbiAgI3BhZ2Utd2hhdC1pcy1pb25pYyBtYWluIGgxLFxuICAjcGFnZS13aGF0LWlzLWlvbmljIG1haW4gaDIsXG4gICNwYWdlLXdoYXQtaXMtaW9uaWMgbWFpbiBoMyxcbiAgI3BhZ2Utd2hhdC1pcy1pb25pYyBtYWluIGg0IHtcbiAgICBmb250LWZhbWlseTogXCJFaW5hXCIsIFwiSGVsdmV0aWNhIE5ldWVcIiwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmOyB9XG5cbiNwYWdlLXdoYXQtaXMtaW9uaWMgLmJhbm5lciB7XG4gIG1heC13aWR0aDogODAwcHg7XG4gIHBhZGRpbmctdG9wOiA3MnB4O1xuICBwYWRkaW5nLWJvdHRvbTogMTUwcHg7IH1cbiAgI3BhZ2Utd2hhdC1pcy1pb25pYyAuYmFubmVyIGgxIHtcbiAgICBwYWRkaW5nLXRvcDogODBweDtcbiAgICBmb250LXNpemU6IDQwcHg7XG4gICAgbGluZS1oZWlnaHQ6IDUycHg7XG4gICAgbGV0dGVyLXNwYWNpbmc6IC0uMDA4ZW07XG4gICAgZm9udC13ZWlnaHQ6IDcwMDtcbiAgICBiYWNrZ3JvdW5kOiB1cmwoXCIvaW1nL3doYXQtaXMtaW9uaWMvaW9uaWMtaWNvbi5wbmdcIikgbm8tcmVwZWF0IDUwJSAwO1xuICAgIGJhY2tncm91bmQtc2l6ZTogNDhweDtcbiAgICBjb2xvcjogIzBmMTYyMjsgfVxuXG4jcGFnZS13aGF0LWlzLWlvbmljIG1haW4gYSB7XG4gIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbiAgdHJhbnNpdGlvbjogLjJzIG9wYWNpdHk7IH1cbiAgI3BhZ2Utd2hhdC1pcy1pb25pYyBtYWluIGE6aG92ZXIge1xuICAgIGNvbG9yOiAjNGE4YmZjO1xuICAgIG9wYWNpdHk6IC44OyB9XG5cbiNwYWdlLXdoYXQtaXMtaW9uaWMgbWFpbiBzZWN0aW9uIHtcbiAgcGFkZGluZy10b3A6IDIwMHB4O1xuICBwYWRkaW5nLWJvdHRvbTogMjAwcHg7IH1cblxuI3BhZ2Utd2hhdC1pcy1pb25pYyBtYWluIC5jb250YWluZXIge1xuICBkaXNwbGF5OiBmbGV4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBtYXgtd2lkdGg6IDk4MHB4OyB9XG4gICNwYWdlLXdoYXQtaXMtaW9uaWMgbWFpbiAuY29udGFpbmVyOjpiZWZvcmUsICNwYWdlLXdoYXQtaXMtaW9uaWMgbWFpbiAuY29udGFpbmVyOjphZnRlciB7XG4gICAgZGlzcGxheTogbm9uZTsgfVxuXG4jcGFnZS13aGF0LWlzLWlvbmljIG1haW4gLmdyYXBoaWMge1xuICBkaXNwbGF5OiBibG9jazsgfVxuXG4jcGFnZS13aGF0LWlzLWlvbmljIG1haW4gLmxlZnQgLmdyYXBoaWMge1xuICBtYXJnaW4tbGVmdDogMTA0cHg7IH1cblxuI3BhZ2Utd2hhdC1pcy1pb25pYyBtYWluIC5yaWdodCAuZ3JhcGhpYyB7XG4gIG1hcmdpbi1yaWdodDogMTA0cHg7IH1cblxuI3BhZ2Utd2hhdC1pcy1pb25pYyBtYWluIC5jb250ZW50IHtcbiAgZmxleDogMTsgfVxuXG4jcGFnZS13aGF0LWlzLWlvbmljIG1haW4gLmNlbnRlciAuY29udGFpbmVyIHtcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICBtYXgtd2lkdGg6IDY4MHB4OyB9XG5cbiNwYWdlLXdoYXQtaXMtaW9uaWMgbWFpbiBoMiB7XG4gIGZvbnQtc2l6ZTogMzVweDtcbiAgbGluZS1oZWlnaHQ6IDQ3cHg7XG4gIGZvbnQtd2VpZ2h0OiA3MDA7XG4gIGxldHRlci1zcGFjaW5nOiAtLjAwOGVtO1xuICBtYXJnaW4tYm90dG9tOiAyMHB4O1xuICBtYXJnaW4tdG9wOiAwO1xuICBjb2xvcjogIzBmMTYyMjsgfVxuXG4jcGFnZS13aGF0LWlzLWlvbmljIG1haW4gcCB7XG4gIGZvbnQtc2l6ZTogMjBweDtcbiAgbGluZS1oZWlnaHQ6IDM2cHg7XG4gIGxldHRlci1zcGFjaW5nOiAtLjAyZW07XG4gIG1hcmdpbi1ib3R0b206IDMycHg7IH1cbiAgI3BhZ2Utd2hhdC1pcy1pb25pYyBtYWluIHAuc20ge1xuICAgIGZvbnQtc2l6ZTogMTVweDtcbiAgICBsaW5lLWhlaWdodDogMzJweDtcbiAgICBsZXR0ZXItc3BhY2luZzogLjAxZW07IH1cbiAgI3BhZ2Utd2hhdC1pcy1pb25pYyBtYWluIHA6bGFzdC1jaGlsZCB7XG4gICAgbWFyZ2luLWJvdHRvbTogMDsgfVxuXG4jcGFnZS13aGF0LWlzLWlvbmljIG1haW4gLndoYXQge1xuICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQodG8gYm90dG9tLCAjZjdmOWZjLCAjZmRmZWZlKTtcbiAgcGFkZGluZy1ib3R0b206IDg4cHg7IH1cbiAgI3BhZ2Utd2hhdC1pcy1pb25pYyBtYWluIC53aGF0IC5jb250ZW50IHtcbiAgICBwYWRkaW5nLWJvdHRvbTogMTM0cHg7IH1cbiAgICBAbWVkaWEgKG1heC13aWR0aDogOTkxcHgpIHtcbiAgICAgICNwYWdlLXdoYXQtaXMtaW9uaWMgbWFpbiAud2hhdCAuY29udGVudCB7XG4gICAgICAgIHBhZGRpbmctYm90dG9tOiAyMHB4OyB9IH1cbiAgI3BhZ2Utd2hhdC1pcy1pb25pYyBtYWluIC53aGF0IC5ncmFwaGljIGltZyB7XG4gICAgbWFyZ2luLXJpZ2h0OiAtNTBweDtcbiAgICBtYXJnaW4tdG9wOiAtMjBweDsgfVxuICAjcGFnZS13aGF0LWlzLWlvbmljIG1haW4gLndoYXQgdWwge1xuICAgIHBhZGRpbmc6IDA7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBtYXJnaW4tdG9wOiA0M3B4O1xuICAgIG1hcmdpbi1ib3R0b206IDA7IH1cbiAgI3BhZ2Utd2hhdC1pcy1pb25pYyBtYWluIC53aGF0IGxpIHtcbiAgICBsaXN0LXN0eWxlOiBub25lO1xuICAgIGJhY2tncm91bmQ6IHVybChcIi9pbWcvd2hhdC1pcy1pb25pYy93ZWItaWNvbnMucG5nXCIpIG5vLXJlcGVhdCAwIDA7XG4gICAgYmFja2dyb3VuZC1zaXplOiA0MHB4O1xuICAgIHdpZHRoOiA0MHB4O1xuICAgIGhlaWdodDogNDBweDtcbiAgICBtYXJnaW4tcmlnaHQ6IDIycHg7IH1cbiAgICAjcGFnZS13aGF0LWlzLWlvbmljIG1haW4gLndoYXQgbGkuY3NzIHtcbiAgICAgIGJhY2tncm91bmQtcG9zaXRpb246IDAgLTQwcHg7IH1cbiAgICAjcGFnZS13aGF0LWlzLWlvbmljIG1haW4gLndoYXQgbGkuanMge1xuICAgICAgYmFja2dyb3VuZC1wb3NpdGlvbjogMCAtODBweDsgfVxuXG4jcGFnZS13aGF0LWlzLWlvbmljIG1haW4gLmtpdCB7XG4gIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCh0byBib3R0b20sICNmN2Y5ZmIsICNmZWZlZmUpO1xuICBwYWRkaW5nLWJvdHRvbTogMTkwcHg7IH1cbiAgI3BhZ2Utd2hhdC1pcy1pb25pYyBtYWluIC5raXQgLmdyYXBoaWMge1xuICAgIG1hcmdpbi1yaWdodDogNjhweDsgfVxuICAjcGFnZS13aGF0LWlzLWlvbmljIG1haW4gLmtpdCAuY29udGVudCB7XG4gICAgbWFyZ2luLWJvdHRvbTogOHB4OyB9XG5cbiNwYWdlLXdoYXQtaXMtaW9uaWMgbWFpbiAudGVhbXMge1xuICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQodG8gYm90dG9tLCAjZjhmOWZiLCAjZmVmZWZlKTtcbiAgcGFkZGluZy10b3A6IDE4M3B4O1xuICBwYWRkaW5nLWJvdHRvbTogMTc2cHg7IH1cbiAgI3BhZ2Utd2hhdC1pcy1pb25pYyBtYWluIC50ZWFtcyAuZ3JhcGhpYyB7XG4gICAgbWFyZ2luLXJpZ2h0OiAtNjVweDtcbiAgICBwYWRkaW5nLXRvcDogMzRweDtcbiAgICBwYWRkaW5nLWxlZnQ6IDFweDsgfVxuICAjcGFnZS13aGF0LWlzLWlvbmljIG1haW4gLnRlYW1zIGlvbi1pY29uIHtcbiAgICBmb250LXNpemU6IC45ZW07XG4gICAgdmVydGljYWwtYWxpZ246IC03JTtcbiAgICBtYXJnaW4tbGVmdDogLTJweDsgfVxuXG4jcGFnZS13aGF0LWlzLWlvbmljIG1haW4gLmdsb2JhbCB7XG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcIi9pbWcvd2hhdC1pcy1pb25pYy9jb21tdW5pdHktYmcucG5nXCIpLCBsaW5lYXItZ3JhZGllbnQodG8gYm90dG9tLCAjZjdmOWZjLCAjZmVmZWZlKTtcbiAgYmFja2dyb3VuZC1zaXplOiBjb3ZlciwgMTAwJTtcbiAgYmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdDtcbiAgYmFja2dyb3VuZC1wb3NpdGlvbjogNTAlIDA7XG4gIHBhZGRpbmctdG9wOiAyMDRweDtcbiAgcGFkZGluZy1ib3R0b206IDE5OHB4OyB9XG4gICNwYWdlLXdoYXQtaXMtaW9uaWMgbWFpbiAuZ2xvYmFsIC5jb250ZW50IHtcbiAgICBtYXJnaW4tdG9wOiAtMTBweDsgfVxuICAjcGFnZS13aGF0LWlzLWlvbmljIG1haW4gLmdsb2JhbCAuZ3JhcGhpYyB7XG4gICAgbWFyZ2luLWxlZnQ6IC0xMnB4O1xuICAgIG1hcmdpbi1yaWdodDogMTI0cHg7IH1cbiAgICBAbWVkaWEgKG1heC13aWR0aDogOTkxcHgpIHtcbiAgICAgICNwYWdlLXdoYXQtaXMtaW9uaWMgbWFpbiAuZ2xvYmFsIC5ncmFwaGljIHtcbiAgICAgICAgbWFyZ2luLXJpZ2h0OiAyNHB4OyB9IH1cbiAgI3BhZ2Utd2hhdC1pcy1pb25pYyBtYWluIC5nbG9iYWwgdWwge1xuICAgIHBhZGRpbmc6IDA7XG4gICAgbWFyZ2luOiAwOyB9XG4gICNwYWdlLXdoYXQtaXMtaW9uaWMgbWFpbiAuZ2xvYmFsIGxpIHtcbiAgICBsaXN0LXN0eWxlOiBub25lO1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgICBwYWRkaW5nLWxlZnQ6IDEwOHB4O1xuICAgIG1hcmdpbjogNTdweCAwOyB9XG4gICAgI3BhZ2Utd2hhdC1pcy1pb25pYyBtYWluIC5nbG9iYWwgbGk6OmJlZm9yZSB7XG4gICAgICBiYWNrZ3JvdW5kOiB1cmwoXCIvaW1nL3doYXQtaXMtaW9uaWMvY29tbXVuaXR5LWljb25zLnBuZ1wiKSBuby1yZXBlYXQgMCAwO1xuICAgICAgYmFja2dyb3VuZC1zaXplOiA4OHB4O1xuICAgICAgaGVpZ2h0OiA4OHB4O1xuICAgICAgd2lkdGg6IDg4cHg7XG4gICAgICBjb250ZW50OiAnJztcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgIHRvcDogY2FsYyg1MCUgLSA0NHB4KTtcbiAgICAgIGxlZnQ6IDA7IH1cbiAgICAjcGFnZS13aGF0LWlzLWlvbmljIG1haW4gLmdsb2JhbCBsaTpmaXJzdC1jaGlsZCB7XG4gICAgICBtYXJnaW4tdG9wOiAwOyB9XG4gICAgI3BhZ2Utd2hhdC1pcy1pb25pYyBtYWluIC5nbG9iYWwgbGk6bGFzdC1jaGlsZCB7XG4gICAgICBtYXJnaW4tYm90dG9tOiAwOyB9XG4gICAgI3BhZ2Utd2hhdC1pcy1pb25pYyBtYWluIC5nbG9iYWwgbGkgc3Ryb25nIHtcbiAgICAgIGNvbG9yOiAjMzg4MGZmO1xuICAgICAgZm9udC1zaXplOiAzNHB4O1xuICAgICAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgZm9udC1mYW1pbHk6IFwiRWluYVwiLCBcIkhlbHZldGljYSBOZXVlXCIsIEhlbHZldGljYSwgc2Fucy1zZXJpZjtcbiAgICAgIGxpbmUtaGVpZ2h0OiAzM3B4OyB9XG4gICAgI3BhZ2Utd2hhdC1pcy1pb25pYyBtYWluIC5nbG9iYWwgbGkgc3BhbiB7XG4gICAgICBjb2xvcjogIzY4YjRmZjtcbiAgICAgIGZvbnQtc2l6ZTogMTlweDsgfVxuICAgICNwYWdlLXdoYXQtaXMtaW9uaWMgbWFpbiAuZ2xvYmFsIGxpOm50aC1jaGlsZCgyKTo6YmVmb3JlIHtcbiAgICAgIGJhY2tncm91bmQtcG9zaXRpb246IDAgLTg4cHg7IH1cbiAgICAjcGFnZS13aGF0LWlzLWlvbmljIG1haW4gLmdsb2JhbCBsaTpudGgtY2hpbGQoMyk6OmJlZm9yZSB7XG4gICAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwIC0xNzZweDsgfVxuICAgICNwYWdlLXdoYXQtaXMtaW9uaWMgbWFpbiAuZ2xvYmFsIGxpOm50aC1jaGlsZCg0KTo6YmVmb3JlIHtcbiAgICAgIGJhY2tncm91bmQtcG9zaXRpb246IDAgLTI2NHB4OyB9XG5cbiNwYWdlLXdoYXQtaXMtaW9uaWMgbWFpbiAud2ViIHtcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFwiL2ltZy93aGF0LWlzLWlvbmljL3BoaWxvc29waHktYmcucG5nXCIpLCBsaW5lYXItZ3JhZGllbnQodG8gYm90dG9tLCAjZjdmOWZjLCAjZmVmZWZlKTtcbiAgYmFja2dyb3VuZC1zaXplOiBjb3ZlciwgMTAwJTtcbiAgYmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdDtcbiAgYmFja2dyb3VuZC1wb3NpdGlvbjogNTAlIDA7XG4gIHBhZGRpbmctYm90dG9tOiAxOTBweDsgfVxuICAjcGFnZS13aGF0LWlzLWlvbmljIG1haW4gLndlYiBoNCB7XG4gICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcbiAgICBmb250LXNpemU6IDEycHg7XG4gICAgZm9udC13ZWlnaHQ6IDcwMDtcbiAgICBsZXR0ZXItc3BhY2luZzogLjE0ZW07XG4gICAgbWFyZ2luLXRvcDogMDtcbiAgICBtYXJnaW4tYm90dG9tOiAyNHB4O1xuICAgIGNvbG9yOiAjMGYxNjIyOyB9XG5cbkBtZWRpYSAobWF4LXdpZHRoOiA5OTFweCkge1xuICAjcGFnZS13aGF0LWlzLWlvbmljIG1haW4gaW1nIHtcbiAgICBtYXgtd2lkdGg6IDMyMHB4OyB9XG4gICNwYWdlLXdoYXQtaXMtaW9uaWMgbWFpbiAubGVmdCAuZ3JhcGhpYyB7XG4gICAgbWFyZ2luLWxlZnQ6IDIwcHg7IH0gfVxuXG5AbWVkaWEgKG1heC13aWR0aDogNzY3cHgpIHtcbiAgI3BhZ2Utd2hhdC1pcy1pb25pYyAuYmFubmVyIHtcbiAgICBwYWRkaW5nLWJvdHRvbTogNjRweDsgfVxuICAjcGFnZS13aGF0LWlzLWlvbmljIG1haW4gLmdyYXBoaWMge1xuICAgIG1hcmdpbjogMDsgfVxuICAjcGFnZS13aGF0LWlzLWlvbmljIG1haW4gc2VjdGlvbiB7XG4gICAgcGFkZGluZy10b3A6IDk2cHg7XG4gICAgcGFkZGluZy1ib3R0b206IDk2cHg7IH1cbiAgICAjcGFnZS13aGF0LWlzLWlvbmljIG1haW4gc2VjdGlvbiAuY29udGFpbmVyIHtcbiAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47IH1cbiAgICAjcGFnZS13aGF0LWlzLWlvbmljIG1haW4gc2VjdGlvbi5sZWZ0IC5jb250YWluZXIge1xuICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbi1yZXZlcnNlOyB9XG4gICNwYWdlLXdoYXQtaXMtaW9uaWMgbWFpbiAuY29udGFpbmVyIHtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjsgfVxuICAjcGFnZS13aGF0LWlzLWlvbmljIG1haW4gLndoYXQgLmdyYXBoaWMge1xuICAgIG1hcmdpbjogMDsgfVxuICAjcGFnZS13aGF0LWlzLWlvbmljIG1haW4gLndoYXQgdWwge1xuICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOyB9XG4gICNwYWdlLXdoYXQtaXMtaW9uaWMgbWFpbiAua2l0IHtcbiAgICBwYWRkaW5nLWJvdHRvbTogOTZweDsgfVxuICAgICNwYWdlLXdoYXQtaXMtaW9uaWMgbWFpbiAua2l0IC5ncmFwaGljIHtcbiAgICAgIG1hcmdpbjogMCAwIDQycHg7IH1cbiAgI3BhZ2Utd2hhdC1pcy1pb25pYyBtYWluIC50ZWFtcyB7XG4gICAgcGFkZGluZy10b3A6IDk2cHg7XG4gICAgcGFkZGluZy1ib3R0b206IDk2cHg7IH1cbiAgICAjcGFnZS13aGF0LWlzLWlvbmljIG1haW4gLnRlYW1zIC5ncmFwaGljIHtcbiAgICAgIG1hcmdpbjogMDsgfVxuICAjcGFnZS13aGF0LWlzLWlvbmljIG1haW4gLmdsb2JhbCB7XG4gICAgcGFkZGluZy10b3A6IDk2cHg7XG4gICAgcGFkZGluZy1ib3R0b206IDk2cHg7IH1cbiAgICAjcGFnZS13aGF0LWlzLWlvbmljIG1haW4gLmdsb2JhbCAuZ3JhcGhpYyB7XG4gICAgICBtYXJnaW4tYm90dG9tOiA2NHB4OyB9XG4gICNwYWdlLXdoYXQtaXMtaW9uaWMgbWFpbiAud2ViIHtcbiAgICBwYWRkaW5nLWJvdHRvbTogNjRweDsgfSB9XG4iLCJAaW1wb3J0IFwiaW9uaWNvbnMtdmFyaWFibGVzXCI7XG4vKiFcbiAgSW9uaWNvbnMsIHYjeyRpb25pY29ucy12ZXJzaW9ufVxuICBDcmVhdGVkIGJ5IEJlbiBTcGVycnkgZm9yIHRoZSBJb25pYyBGcmFtZXdvcmssIGh0dHA6Ly9pb25pY29ucy5jb20vXG4gIGh0dHBzOi8vdHdpdHRlci5jb20vYmVuanNwZXJyeSAgaHR0cHM6Ly90d2l0dGVyLmNvbS9pb25pY2ZyYW1ld29ya1xuICBNSVQgTGljZW5zZTogaHR0cHM6Ly9naXRodWIuY29tL2RyaWZ0eWNvL2lvbmljb25zXG5cbiAgQW5kcm9pZC1zdHlsZSBpY29ucyBvcmlnaW5hbGx5IGJ1aWx0IGJ5IEdvb2dsZeKAmXNcbiAgTWF0ZXJpYWwgRGVzaWduIEljb25zOiBodHRwczovL2dpdGh1Yi5jb20vZ29vZ2xlL21hdGVyaWFsLWRlc2lnbi1pY29uc1xuICB1c2VkIHVuZGVyIENDIEJZIGh0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL2xpY2Vuc2VzL2J5LzQuMC9cbiAgTW9kaWZpZWQgaWNvbnMgdG8gZml0IGlvbmljb27igJlzIGdyaWQgZnJvbSBvcmlnaW5hbC5cbiovXG5cbi8vIElvbmljb25zXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5AZm9udC1mYWNlIHtcbiBmb250LWZhbWlseTogXCJJb25pY29uc1wiO1xuIHNyYzp1cmwoXCIjeyRpb25pY29ucy1mb250LXBhdGh9L2lvbmljb25zLmVvdD92PSN7JGlvbmljb25zLXZlcnNpb259XCIpO1xuIHNyYzp1cmwoXCIjeyRpb25pY29ucy1mb250LXBhdGh9L2lvbmljb25zLmVvdD92PSN7JGlvbmljb25zLXZlcnNpb259I2llZml4XCIpIGZvcm1hdChcImVtYmVkZGVkLW9wZW50eXBlXCIpLFxuICB1cmwoXCIjeyRpb25pY29ucy1mb250LXBhdGh9L2lvbmljb25zLndvZmYyP3Y9I3skaW9uaWNvbnMtdmVyc2lvbn1cIikgZm9ybWF0KFwid29mZjJcIiksXG4gIHVybChcIiN7JGlvbmljb25zLWZvbnQtcGF0aH0vaW9uaWNvbnMud29mZj92PSN7JGlvbmljb25zLXZlcnNpb259XCIpIGZvcm1hdChcIndvZmZcIiksXG4gIHVybChcIiN7JGlvbmljb25zLWZvbnQtcGF0aH0vaW9uaWNvbnMudHRmP3Y9I3skaW9uaWNvbnMtdmVyc2lvbn1cIikgZm9ybWF0KFwidHJ1ZXR5cGVcIiksXG4gIHVybChcIiN7JGlvbmljb25zLWZvbnQtcGF0aH0vaW9uaWNvbnMuc3ZnP3Y9I3skaW9uaWNvbnMtdmVyc2lvbn0jSW9uaWNvbnNcIikgZm9ybWF0KFwic3ZnXCIpO1xuIGZvbnQtd2VpZ2h0OiBub3JtYWw7XG4gZm9udC1zdHlsZTogbm9ybWFsO1xufVxuXG4uaW9uIHtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICBmb250LWZhbWlseTogXCJJb25pY29uc1wiO1xuICBzcGVhazogbm9uZTtcbiAgZm9udC1zdHlsZTogbm9ybWFsO1xuICBmb250LXdlaWdodDogbm9ybWFsO1xuICBmb250LXZhcmlhbnQ6IG5vcm1hbDtcbiAgdGV4dC10cmFuc2Zvcm06IG5vbmU7XG4gIHRleHQtcmVuZGVyaW5nOiBhdXRvO1xuICBsaW5lLWhlaWdodDogMTtcbiAgLXdlYmtpdC1mb250LXNtb290aGluZzogYW50aWFsaWFzZWQ7XG4gIC1tb3otb3N4LWZvbnQtc21vb3RoaW5nOiBncmF5c2NhbGU7XG59XG5cbkBpbXBvcnQgXCJpb25pY29ucy1jb21tb25cIjtcbkBpbXBvcnQgXCJpb25pY29ucy1pY29uc1wiO1xuIiwiQGltcG9ydCB1cmwoJ2h0dHBzOi8vZm9udHMuZ29vZ2xlYXBpcy5jb20vY3NzP2ZhbWlseT1Sb2JvdG8rTW9ubycpO1xuXG4kY2RuOiAnaHR0cHM6Ly9jb2RlLmlvbmljZnJhbWV3b3JrLmNvbS9hc3NldHMvZm9udHMvJztcbiRmb250c0RpcjogJy9mb250cy8nO1xuJGVpbmFEaXI6ICRmb250c0RpciArICdlaW5hLyc7XG4kZ3JhcGhpa0RpcjogJGZvbnRzRGlyICsgJ2dyYXBoaWsvJztcblxuQGZvbnQtZmFjZSB7XG4gIGZvbnQtZmFtaWx5OiAnSW9uaWNvbnMnO1xuICBzcmM6XG4gICAgdXJsKCRmb250c0RpciArICdpb25pY29ucy53b2ZmMicpIGZvcm1hdCgnd29mZjInKSxcbiAgICB1cmwoJGZvbnRzRGlyICsgJ2lvbmljb25zLndvZmYnKSBmb3JtYXQoJ3dvZmYnKSxcbiAgICB1cmwoJGZvbnRzRGlyICsgJ2lvbmljb25zLnR0ZicpIGZvcm1hdCgndHRmJyksXG4gICAgdXJsKCRmb250c0RpciArICdpb25pY29ucy5lb3QjaWVmaXgnKSBmb3JtYXQoJ2VvdCcpXG4gICAgdXJsKCRmb250c0RpciArICdpb25pY29ucy5zdmcjSW9uaWNvbnMnKSBmb3JtYXQoJ3N2ZycpO1xuICBmb250LXdlaWdodDogbm9ybWFsO1xuICBmb250LXN0eWxlOiBub3JtYWw7XG59XG5cbkBmb250LWZhY2Uge1xuICBmb250LWZhbWlseTogJ0VpbmEnO1xuICBzcmM6IHVybCgkZWluYURpciArICdlaW5hLTAxLWJvbGQud29mZjInKSBmb3JtYXQoJ3dvZmYyJyksXG4gICAgICAgdXJsKCRlaW5hRGlyICsgJ2VpbmEtMDEtYm9sZC53b2ZmJykgZm9ybWF0KCd3b2ZmJyksXG4gICAgICAgdXJsKCRlaW5hRGlyICsgJ2VpbmEtMDEtYm9sZC50dGYnKSBmb3JtYXQoJ3R0ZicpLFxuICAgICAgIHVybCgkZWluYURpciArICdlaW5hLTAxLWJvbGQuZW90PyNpZWZpeCcpIGZvcm1hdCgnZW90Jyk7XG4gIGZvbnQtd2VpZ2h0OiA3MDA7XG4gIHVuaWNvZGUtcmFuZ2U6IFUrMDAwLTVGRjtcbn1cbkBmb250LWZhY2Uge1xuICBmb250LWZhbWlseTogJ0VpbmEnO1xuICBzcmM6IHVybCgkZWluYURpciArICdlaW5hLTAxLXNlbWlib2xkLndvZmYyJykgZm9ybWF0KCd3b2ZmMicpLFxuICAgICAgIHVybCgkZWluYURpciArICdlaW5hLTAxLXNlbWlib2xkLndvZmYnKSBmb3JtYXQoJ3dvZmYnKSxcbiAgICAgICB1cmwoJGVpbmFEaXIgKyAnZWluYS0wMS1zZW1pYm9sZC50dGYnKSBmb3JtYXQoJ3R0ZicpLFxuICAgICAgIHVybCgkZWluYURpciArICdlaW5hLTAxLXNlbWlib2xkLmVvdD8jaWVmaXgnKSBmb3JtYXQoJ2VvdCcpO1xuICBmb250LXdlaWdodDogNjAwO1xuICB1bmljb2RlLXJhbmdlOiBVKzAwMC01RkY7XG59XG5AZm9udC1mYWNlIHtcbiAgZm9udC1mYW1pbHk6ICdFaW5hJztcbiAgc3JjOiB1cmwoJGVpbmFEaXIgKyAnZWluYS0wMS1yZWd1bGFyLndvZmYyJykgZm9ybWF0KCd3b2ZmMicpLFxuICAgICAgIHVybCgkZWluYURpciArICdlaW5hLTAxLXJlZ3VsYXIud29mZicpIGZvcm1hdCgnd29mZicpLFxuICAgICAgIHVybCgkZWluYURpciArICdlaW5hLTAxLXJlZ3VsYXIudHRmJykgZm9ybWF0KCd0dGYnKSxcbiAgICAgICB1cmwoJGVpbmFEaXIgKyAnZWluYS0wMS1yZWd1bGFyLmVvdD8jaWVmaXgnKSBmb3JtYXQoJ2VvdCcpO1xuICBmb250LXdlaWdodDogNDAwO1xuICB1bmljb2RlLXJhbmdlOiBVKzAwMC01RkY7XG59XG5cbkBmb250LWZhY2Uge1xuICBmb250LWZhbWlseTogJ0ludGVyJztcbiAgZm9udC1zdHlsZTogIG5vcm1hbDtcbiAgZm9udC13ZWlnaHQ6IDQwMDtcbiAgdW5pY29kZS1yYW5nZTogVSswMDAtNUZGO1xuICBzcmM6IHVybCgkY2RuICsgJ2ludGVyL0ludGVyLVJlZ3VsYXIud29mZjInKSBmb3JtYXQoJ3dvZmYyJyksXG4gICAgICAgdXJsKCRjZG4gKyAnaW50ZXIvSW50ZXItUmVndWxhci53b2ZmJykgZm9ybWF0KCd3b2ZmJyk7XG59XG5AZm9udC1mYWNlIHtcbiAgZm9udC1mYW1pbHk6ICdJbnRlcic7XG4gIGZvbnQtc3R5bGU6ICBpdGFsaWM7XG4gIGZvbnQtd2VpZ2h0OiA0MDA7XG4gIHVuaWNvZGUtcmFuZ2U6IFUrMDAwLTVGRjtcbiAgc3JjOiB1cmwoJGNkbiArICdpbnRlci9JbnRlci1JdGFsaWMud29mZjInKSBmb3JtYXQoJ3dvZmYyJyksXG4gICAgICAgdXJsKCRjZG4gKyAnaW50ZXIvSW50ZXItSXRhbGljLndvZmYnKSBmb3JtYXQoJ3dvZmYnKTtcbn1cblxuQGZvbnQtZmFjZSB7XG4gIGZvbnQtZmFtaWx5OiAnSW50ZXInO1xuICBmb250LXN0eWxlOiAgbm9ybWFsO1xuICBmb250LXdlaWdodDogNTAwO1xuICB1bmljb2RlLXJhbmdlOiBVKzAwMC01RkY7XG4gIHNyYzogdXJsKCRjZG4gKyAnaW50ZXIvSW50ZXItTWVkaXVtLndvZmYyJykgZm9ybWF0KCd3b2ZmMicpLFxuICAgICAgIHVybCgkY2RuICsgJ2ludGVyL0ludGVyLU1lZGl1bS53b2ZmJykgZm9ybWF0KCd3b2ZmJyk7XG59XG5AZm9udC1mYWNlIHtcbiAgZm9udC1mYW1pbHk6ICdJbnRlcic7XG4gIGZvbnQtc3R5bGU6ICBpdGFsaWM7XG4gIGZvbnQtd2VpZ2h0OiA1MDA7XG4gIHVuaWNvZGUtcmFuZ2U6IFUrMDAwLTVGRjtcbiAgc3JjOiB1cmwoJGNkbiArICdpbnRlci9JbnRlci1NZWRpdW1JdGFsaWMud29mZjInKSBmb3JtYXQoJ3dvZmYyJyksXG4gICAgICAgdXJsKCRjZG4gKyAnaW50ZXIvSW50ZXItTWVkaXVtSXRhbGljLndvZmYnKSBmb3JtYXQoJ3dvZmYnKTtcbn1cblxuQGZvbnQtZmFjZSB7XG4gIGZvbnQtZmFtaWx5OiAnSW50ZXInO1xuICBmb250LXN0eWxlOiAgbm9ybWFsO1xuICBmb250LXdlaWdodDogNjAwO1xuICB1bmljb2RlLXJhbmdlOiBVKzAwMC01RkY7XG4gIHNyYzogdXJsKCRjZG4gKyAnaW50ZXIvSW50ZXItU2VtaUJvbGQud29mZjInKSBmb3JtYXQoJ3dvZmYyJyksXG4gICAgICAgdXJsKCRjZG4gKyAnaW50ZXIvSW50ZXItU2VtaUJvbGQud29mZicpIGZvcm1hdCgnd29mZicpO1xufVxuQGZvbnQtZmFjZSB7XG4gIGZvbnQtZmFtaWx5OiAnSW50ZXInO1xuICBmb250LXN0eWxlOiAgaXRhbGljO1xuICBmb250LXdlaWdodDogNjAwO1xuICB1bmljb2RlLXJhbmdlOiBVKzAwMC01RkY7XG4gIHNyYzogdXJsKCRjZG4gKyAnaW50ZXIvSW50ZXItU2VtaUJvbGRJdGFsaWMud29mZjInKSBmb3JtYXQoJ3dvZmYyJyksXG4gICAgICAgdXJsKCRjZG4gKyAnaW50ZXIvSW50ZXItU2VtaUJvbGRJdGFsaWMud29mZicpIGZvcm1hdCgnd29mZicpO1xufVxuXG5AZm9udC1mYWNlIHtcbiAgZm9udC1mYW1pbHk6ICdJbnRlcic7XG4gIGZvbnQtc3R5bGU6ICBub3JtYWw7XG4gIGZvbnQtd2VpZ2h0OiA3MDA7XG4gIHVuaWNvZGUtcmFuZ2U6IFUrMDAwLTVGRjtcbiAgc3JjOiB1cmwoJGNkbiArICdpbnRlci9JbnRlci1Cb2xkLndvZmYyJykgZm9ybWF0KCd3b2ZmMicpLFxuICAgICAgIHVybCgkY2RuICsgJ2ludGVyL0ludGVyLUJvbGQud29mZicpIGZvcm1hdCgnd29mZicpO1xufVxuQGZvbnQtZmFjZSB7XG4gIGZvbnQtZmFtaWx5OiAnSW50ZXInO1xuICBmb250LXN0eWxlOiAgaXRhbGljO1xuICBmb250LXdlaWdodDogNzAwO1xuICB1bmljb2RlLXJhbmdlOiBVKzAwMC01RkY7XG4gIHNyYzogdXJsKCRjZG4gKyAnaW50ZXIvSW50ZXItQm9sZEl0YWxpYy53b2ZmMicpIGZvcm1hdCgnd29mZjInKSxcbiAgICAgICB1cmwoJGNkbiArICdpbnRlci9JbnRlci1Cb2xkSXRhbGljLndvZmYnKSBmb3JtYXQoJ3dvZmYnKTtcbn1cblxuQGZvbnQtZmFjZSB7XG4gIGZvbnQtZmFtaWx5OiAnSW50ZXInO1xuICBmb250LXN0eWxlOiAgbm9ybWFsO1xuICBmb250LXdlaWdodDogODAwO1xuICB1bmljb2RlLXJhbmdlOiBVKzAwMC01RkY7XG4gIHNyYzogdXJsKCRjZG4gKyAnaW50ZXIvSW50ZXItRXh0cmFCb2xkLndvZmYyJykgZm9ybWF0KCd3b2ZmMicpLFxuICAgICAgIHVybCgkY2RuICsgJ2ludGVyL0ludGVyLUV4dHJhQm9sZC53b2ZmJykgZm9ybWF0KCd3b2ZmJyk7XG59XG5AZm9udC1mYWNlIHtcbiAgZm9udC1mYW1pbHk6ICdJbnRlcic7XG4gIGZvbnQtc3R5bGU6ICBpdGFsaWM7XG4gIGZvbnQtd2VpZ2h0OiA4MDA7XG4gIHVuaWNvZGUtcmFuZ2U6IFUrMDAwLTVGRjtcbiAgc3JjOiB1cmwoJGNkbiArICdpbnRlci9JbnRlci1FeHRyYUJvbGRJdGFsaWMud29mZjInKSBmb3JtYXQoJ3dvZmYyJyksXG4gICAgICAgdXJsKCRjZG4gKyAnaW50ZXIvSW50ZXItRXh0cmFCb2xkSXRhbGljLndvZmYnKSBmb3JtYXQoJ3dvZmYnKTtcbn1cblxuQGZvbnQtZmFjZSB7XG4gIGZvbnQtZmFtaWx5OiAnSW50ZXInO1xuICBmb250LXN0eWxlOiAgbm9ybWFsO1xuICBmb250LXdlaWdodDogOTAwO1xuICB1bmljb2RlLXJhbmdlOiBVKzAwMC01RkY7XG4gIHNyYzogdXJsKCRjZG4gKyAnaW50ZXIvSW50ZXItQmxhY2sud29mZjInKSBmb3JtYXQoJ3dvZmYyJyksXG4gICAgICAgdXJsKCRjZG4gKyAnaW50ZXIvSW50ZXItQmxhY2sud29mZicpIGZvcm1hdCgnd29mZicpO1xufVxuQGZvbnQtZmFjZSB7XG4gIGZvbnQtZmFtaWx5OiAnSW50ZXInO1xuICBmb250LXN0eWxlOiAgaXRhbGljO1xuICBmb250LXdlaWdodDogOTAwO1xuICB1bmljb2RlLXJhbmdlOiBVKzAwMC01RkY7XG4gIHNyYzogdXJsKCRjZG4gKyAnaW50ZXIvSW50ZXItQmxhY2tJdGFsaWMud29mZjInKSBmb3JtYXQoJ3dvZmYyJyksXG4gICAgICAgdXJsKCRjZG4gKyAnaW50ZXIvSW50ZXItQmxhY2tJdGFsaWMud29mZicpIGZvcm1hdCgnd29mZicpO1xufVxuXG5AZm9udC1mYWNlIHtcbiAgZm9udC1mYW1pbHk6ICdGcmVpZ2h0VGV4dFBybyc7XG4gIGZvbnQtd2VpZ2h0OiA0MDA7XG4gIHVuaWNvZGUtcmFuZ2U6IFUrMDAwLTVGRjtcbiAgc3JjOiB1cmwoJGNkbiArICcyOUQyNkFfMF8wLmVvdCcpO1xuICBzcmM6IHVybCgkY2RuICsgJzI5RDI2QV8wXzAuZW90PyNpZWZpeCcpIGZvcm1hdCgnZW1iZWRkZWQtb3BlbnR5cGUnKSxcbiAgICAgICB1cmwoJGNkbiArICcyOUQyNkFfMF8wLndvZmYnKSBmb3JtYXQoJ3dvZmYnKSxcbiAgICAgICB1cmwoJGNkbiArICcyOUQyNkFfMF8wLnR0ZicpIGZvcm1hdCgndHJ1ZXR5cGUnKTtcbn1cblxuQGZvbnQtZmFjZSB7XG4gIGZvbnQtZmFtaWx5OiAnRnJlaWdodFRleHRQcm8nO1xuICBmb250LXdlaWdodDogNTAwO1xuICB1bmljb2RlLXJhbmdlOiBVKzAwMC01RkY7XG4gIHNyYzogdXJsKCRjZG4gKyAnMjlEMjZBXzFfMC5lb3QnKTtcbiAgc3JjOiB1cmwoJGNkbiArICcyOUQyNkFfMV8wLmVvdD8jaWVmaXgnKSBmb3JtYXQoJ2VtYmVkZGVkLW9wZW50eXBlJyksXG4gICAgICAgdXJsKCRjZG4gKyAnMjlEMjZBXzFfMC53b2ZmJykgZm9ybWF0KCd3b2ZmJyksXG4gICAgICAgdXJsKCRjZG4gKyAnMjlEMjZBXzFfMC50dGYnKSBmb3JtYXQoJ3RydWV0eXBlJyk7XG59XG4iLCJAY2hhcnNldCBcIlVURi04XCI7XG4vLyBJb25pY29ucyBJY29uIEZvbnQgQ1NTXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4uaW9uLWlvcy1hZGQ6YmVmb3JlIHsgY29udGVudDogXCJcXGYxMDJcIjsgfVxuLmlvbi1pb3MtYWRkLWNpcmNsZTpiZWZvcmUgeyBjb250ZW50OiBcIlxcZjEwMVwiOyB9XG4uaW9uLWlvcy1hZGQtY2lyY2xlLW91dGxpbmU6YmVmb3JlIHsgY29udGVudDogXCJcXGYxMDBcIjsgfVxuLmlvbi1pb3MtYWRkLW91dGxpbmU6YmVmb3JlIHsgY29udGVudDogXCJcXGYxMDJcIjsgfVxuLmlvbi1pb3MtYWxhcm06YmVmb3JlIHsgY29udGVudDogXCJcXGYzYzhcIjsgfVxuLmlvbi1pb3MtYWxhcm0tb3V0bGluZTpiZWZvcmUgeyBjb250ZW50OiBcIlxcZjNjN1wiOyB9XG4uaW9uLWlvcy1hbGJ1bXM6YmVmb3JlIHsgY29udGVudDogXCJcXGYzY2FcIjsgfVxuLmlvbi1pb3MtYWxidW1zLW91dGxpbmU6YmVmb3JlIHsgY29udGVudDogXCJcXGYzYzlcIjsgfVxuLmlvbi1pb3MtYWxlcnQ6YmVmb3JlIHsgY29udGVudDogXCJcXGYxMDRcIjsgfVxuLmlvbi1pb3MtYWxlcnQtb3V0bGluZTpiZWZvcmUgeyBjb250ZW50OiBcIlxcZjEwM1wiOyB9XG4uaW9uLWlvcy1hbWVyaWNhbi1mb290YmFsbDpiZWZvcmUgeyBjb250ZW50OiBcIlxcZjEwNlwiOyB9XG4uaW9uLWlvcy1hbWVyaWNhbi1mb290YmFsbC1vdXRsaW5lOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxmMTA1XCI7IH1cbi5pb24taW9zLWFuYWx5dGljczpiZWZvcmUgeyBjb250ZW50OiBcIlxcZjNjZVwiOyB9XG4uaW9uLWlvcy1hbmFseXRpY3Mtb3V0bGluZTpiZWZvcmUgeyBjb250ZW50OiBcIlxcZjNjZFwiOyB9XG4uaW9uLWlvcy1hcGVydHVyZTpiZWZvcmUgeyBjb250ZW50OiBcIlxcZjEwOFwiOyB9XG4uaW9uLWlvcy1hcGVydHVyZS1vdXRsaW5lOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxmMTA3XCI7IH1cbi5pb24taW9zLWFwcHM6YmVmb3JlIHsgY29udGVudDogXCJcXGYxMGFcIjsgfVxuLmlvbi1pb3MtYXBwcy1vdXRsaW5lOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxmMTA5XCI7IH1cbi5pb24taW9zLWFwcHN0b3JlOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxmMTBjXCI7IH1cbi5pb24taW9zLWFwcHN0b3JlLW91dGxpbmU6YmVmb3JlIHsgY29udGVudDogXCJcXGYxMGJcIjsgfVxuLmlvbi1pb3MtYXJjaGl2ZTpiZWZvcmUgeyBjb250ZW50OiBcIlxcZjEwZVwiOyB9XG4uaW9uLWlvcy1hcmNoaXZlLW91dGxpbmU6YmVmb3JlIHsgY29udGVudDogXCJcXGYxMGRcIjsgfVxuLmlvbi1pb3MtYXJyb3ctYmFjazpiZWZvcmUgeyBjb250ZW50OiBcIlxcZjNjZlwiOyB9XG4uaW9uLWlvcy1hcnJvdy1iYWNrLW91dGxpbmU6YmVmb3JlIHsgY29udGVudDogXCJcXGYzY2ZcIjsgfVxuLmlvbi1pb3MtYXJyb3ctZG93bjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZjNkMFwiOyB9XG4uaW9uLWlvcy1hcnJvdy1kb3duLW91dGxpbmU6YmVmb3JlIHsgY29udGVudDogXCJcXGYzZDBcIjsgfVxuLmlvbi1pb3MtYXJyb3ctZHJvcGRvd246YmVmb3JlIHsgY29udGVudDogXCJcXGYxMTBcIjsgfVxuLmlvbi1pb3MtYXJyb3ctZHJvcGRvd24tY2lyY2xlOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxmMTBmXCI7IH1cbi5pb24taW9zLWFycm93LWRyb3Bkb3duLWNpcmNsZS1vdXRsaW5lOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxmMTBmXCI7IH1cbi5pb24taW9zLWFycm93LWRyb3Bkb3duLW91dGxpbmU6YmVmb3JlIHsgY29udGVudDogXCJcXGYxMTBcIjsgfVxuLmlvbi1pb3MtYXJyb3ctZHJvcGxlZnQ6YmVmb3JlIHsgY29udGVudDogXCJcXGYxMTJcIjsgfVxuLmlvbi1pb3MtYXJyb3ctZHJvcGxlZnQtY2lyY2xlOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxmMTExXCI7IH1cbi5pb24taW9zLWFycm93LWRyb3BsZWZ0LWNpcmNsZS1vdXRsaW5lOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxmMTExXCI7IH1cbi5pb24taW9zLWFycm93LWRyb3BsZWZ0LW91dGxpbmU6YmVmb3JlIHsgY29udGVudDogXCJcXGYxMTJcIjsgfVxuLmlvbi1pb3MtYXJyb3ctZHJvcHJpZ2h0OmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxmMTE0XCI7IH1cbi5pb24taW9zLWFycm93LWRyb3ByaWdodC1jaXJjbGU6YmVmb3JlIHsgY29udGVudDogXCJcXGYxMTNcIjsgfVxuLmlvbi1pb3MtYXJyb3ctZHJvcHJpZ2h0LWNpcmNsZS1vdXRsaW5lOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxmMTEzXCI7IH1cbi5pb24taW9zLWFycm93LWRyb3ByaWdodC1vdXRsaW5lOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxmMTE0XCI7IH1cbi5pb24taW9zLWFycm93LWRyb3B1cDpiZWZvcmUgeyBjb250ZW50OiBcIlxcZjExNlwiOyB9XG4uaW9uLWlvcy1hcnJvdy1kcm9wdXAtY2lyY2xlOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxmMTE1XCI7IH1cbi5pb24taW9zLWFycm93LWRyb3B1cC1jaXJjbGUtb3V0bGluZTpiZWZvcmUgeyBjb250ZW50OiBcIlxcZjExNVwiOyB9XG4uaW9uLWlvcy1hcnJvdy1kcm9wdXAtb3V0bGluZTpiZWZvcmUgeyBjb250ZW50OiBcIlxcZjExNlwiOyB9XG4uaW9uLWlvcy1hcnJvdy1mb3J3YXJkOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxmM2QxXCI7IH1cbi5pb24taW9zLWFycm93LWZvcndhcmQtb3V0bGluZTpiZWZvcmUgeyBjb250ZW50OiBcIlxcZjNkMVwiOyB9XG4uaW9uLWlvcy1hcnJvdy1yb3VuZC1iYWNrOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxmMTE3XCI7IH1cbi5pb24taW9zLWFycm93LXJvdW5kLWJhY2stb3V0bGluZTpiZWZvcmUgeyBjb250ZW50OiBcIlxcZjExN1wiOyB9XG4uaW9uLWlvcy1hcnJvdy1yb3VuZC1kb3duOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxmMTE4XCI7IH1cbi5pb24taW9zLWFycm93LXJvdW5kLWRvd24tb3V0bGluZTpiZWZvcmUgeyBjb250ZW50OiBcIlxcZjExOFwiOyB9XG4uaW9uLWlvcy1hcnJvdy1yb3VuZC1mb3J3YXJkOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxmMTE5XCI7IH1cbi5pb24taW9zLWFycm93LXJvdW5kLWZvcndhcmQtb3V0bGluZTpiZWZvcmUgeyBjb250ZW50OiBcIlxcZjExOVwiOyB9XG4uaW9uLWlvcy1hcnJvdy1yb3VuZC11cDpiZWZvcmUgeyBjb250ZW50OiBcIlxcZjExYVwiOyB9XG4uaW9uLWlvcy1hcnJvdy1yb3VuZC11cC1vdXRsaW5lOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxmMTFhXCI7IH1cbi5pb24taW9zLWFycm93LXVwOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxmM2Q4XCI7IH1cbi5pb24taW9zLWFycm93LXVwLW91dGxpbmU6YmVmb3JlIHsgY29udGVudDogXCJcXGYzZDhcIjsgfVxuLmlvbi1pb3MtYXQ6YmVmb3JlIHsgY29udGVudDogXCJcXGYzZGFcIjsgfVxuLmlvbi1pb3MtYXQtb3V0bGluZTpiZWZvcmUgeyBjb250ZW50OiBcIlxcZjNkOVwiOyB9XG4uaW9uLWlvcy1hdHRhY2g6YmVmb3JlIHsgY29udGVudDogXCJcXGYxMWJcIjsgfVxuLmlvbi1pb3MtYXR0YWNoLW91dGxpbmU6YmVmb3JlIHsgY29udGVudDogXCJcXGYxMWJcIjsgfVxuLmlvbi1pb3MtYmFja3NwYWNlOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxmMTFkXCI7IH1cbi5pb24taW9zLWJhY2tzcGFjZS1vdXRsaW5lOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxmMTFjXCI7IH1cbi5pb24taW9zLWJhcmNvZGU6YmVmb3JlIHsgY29udGVudDogXCJcXGYzZGNcIjsgfVxuLmlvbi1pb3MtYmFyY29kZS1vdXRsaW5lOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxmM2RiXCI7IH1cbi5pb24taW9zLWJhc2ViYWxsOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxmM2RlXCI7IH1cbi5pb24taW9zLWJhc2ViYWxsLW91dGxpbmU6YmVmb3JlIHsgY29udGVudDogXCJcXGYzZGRcIjsgfVxuLmlvbi1pb3MtYmFza2V0OmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxmMTFmXCI7IH1cbi5pb24taW9zLWJhc2tldC1vdXRsaW5lOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxmMTFlXCI7IH1cbi5pb24taW9zLWJhc2tldGJhbGw6YmVmb3JlIHsgY29udGVudDogXCJcXGYzZTBcIjsgfVxuLmlvbi1pb3MtYmFza2V0YmFsbC1vdXRsaW5lOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxmM2RmXCI7IH1cbi5pb24taW9zLWJhdHRlcnktY2hhcmdpbmc6YmVmb3JlIHsgY29udGVudDogXCJcXGYxMjBcIjsgfVxuLmlvbi1pb3MtYmF0dGVyeS1jaGFyZ2luZy1vdXRsaW5lOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxmMTIwXCI7IH1cbi5pb24taW9zLWJhdHRlcnktZGVhZDpiZWZvcmUgeyBjb250ZW50OiBcIlxcZjEyMVwiOyB9XG4uaW9uLWlvcy1iYXR0ZXJ5LWRlYWQtb3V0bGluZTpiZWZvcmUgeyBjb250ZW50OiBcIlxcZjEyMVwiOyB9XG4uaW9uLWlvcy1iYXR0ZXJ5LWZ1bGw6YmVmb3JlIHsgY29udGVudDogXCJcXGYxMjJcIjsgfVxuLmlvbi1pb3MtYmF0dGVyeS1mdWxsLW91dGxpbmU6YmVmb3JlIHsgY29udGVudDogXCJcXGYxMjJcIjsgfVxuLmlvbi1pb3MtYmVha2VyOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxmMTI0XCI7IH1cbi5pb24taW9zLWJlYWtlci1vdXRsaW5lOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxmMTIzXCI7IH1cbi5pb24taW9zLWJlZXI6YmVmb3JlIHsgY29udGVudDogXCJcXGYxMjZcIjsgfVxuLmlvbi1pb3MtYmVlci1vdXRsaW5lOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxmMTI1XCI7IH1cbi5pb24taW9zLWJpY3ljbGU6YmVmb3JlIHsgY29udGVudDogXCJcXGYxMjdcIjsgfVxuLmlvbi1pb3MtYmljeWNsZS1vdXRsaW5lOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxmMTI3XCI7IH1cbi5pb24taW9zLWJsdWV0b290aDpiZWZvcmUgeyBjb250ZW50OiBcIlxcZjEyOFwiOyB9XG4uaW9uLWlvcy1ibHVldG9vdGgtb3V0bGluZTpiZWZvcmUgeyBjb250ZW50OiBcIlxcZjEyOFwiOyB9XG4uaW9uLWlvcy1ib2F0OmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxmMTJhXCI7IH1cbi5pb24taW9zLWJvYXQtb3V0bGluZTpiZWZvcmUgeyBjb250ZW50OiBcIlxcZjEyOVwiOyB9XG4uaW9uLWlvcy1ib2R5OmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxmM2U0XCI7IH1cbi5pb24taW9zLWJvZHktb3V0bGluZTpiZWZvcmUgeyBjb250ZW50OiBcIlxcZjNlM1wiOyB9XG4uaW9uLWlvcy1ib25maXJlOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxmMTJjXCI7IH1cbi5pb24taW9zLWJvbmZpcmUtb3V0bGluZTpiZWZvcmUgeyBjb250ZW50OiBcIlxcZjEyYlwiOyB9XG4uaW9uLWlvcy1ib29rOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxmM2U4XCI7IH1cbi5pb24taW9zLWJvb2stb3V0bGluZTpiZWZvcmUgeyBjb250ZW50OiBcIlxcZjNlN1wiOyB9XG4uaW9uLWlvcy1ib29rbWFyazpiZWZvcmUgeyBjb250ZW50OiBcIlxcZjEyZVwiOyB9XG4uaW9uLWlvcy1ib29rbWFyay1vdXRsaW5lOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxmMTJkXCI7IH1cbi5pb24taW9zLWJvb2ttYXJrczpiZWZvcmUgeyBjb250ZW50OiBcIlxcZjNlYVwiOyB9XG4uaW9uLWlvcy1ib29rbWFya3Mtb3V0bGluZTpiZWZvcmUgeyBjb250ZW50OiBcIlxcZjNlOVwiOyB9XG4uaW9uLWlvcy1ib3d0aWU6YmVmb3JlIHsgY29udGVudDogXCJcXGYxMzBcIjsgfVxuLmlvbi1pb3MtYm93dGllLW91dGxpbmU6YmVmb3JlIHsgY29udGVudDogXCJcXGYxMmZcIjsgfVxuLmlvbi1pb3MtYnJpZWZjYXNlOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxmM2VlXCI7IH1cbi5pb24taW9zLWJyaWVmY2FzZS1vdXRsaW5lOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxmM2VkXCI7IH1cbi5pb24taW9zLWJyb3dzZXJzOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxmM2YwXCI7IH1cbi5pb24taW9zLWJyb3dzZXJzLW91dGxpbmU6YmVmb3JlIHsgY29udGVudDogXCJcXGYzZWZcIjsgfVxuLmlvbi1pb3MtYnJ1c2g6YmVmb3JlIHsgY29udGVudDogXCJcXGYxMzJcIjsgfVxuLmlvbi1pb3MtYnJ1c2gtb3V0bGluZTpiZWZvcmUgeyBjb250ZW50OiBcIlxcZjEzMVwiOyB9XG4uaW9uLWlvcy1idWc6YmVmb3JlIHsgY29udGVudDogXCJcXGYxMzRcIjsgfVxuLmlvbi1pb3MtYnVnLW91dGxpbmU6YmVmb3JlIHsgY29udGVudDogXCJcXGYxMzNcIjsgfVxuLmlvbi1pb3MtYnVpbGQ6YmVmb3JlIHsgY29udGVudDogXCJcXGYxMzZcIjsgfVxuLmlvbi1pb3MtYnVpbGQtb3V0bGluZTpiZWZvcmUgeyBjb250ZW50OiBcIlxcZjEzNVwiOyB9XG4uaW9uLWlvcy1idWxiOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxmMTM4XCI7IH1cbi5pb24taW9zLWJ1bGItb3V0bGluZTpiZWZvcmUgeyBjb250ZW50OiBcIlxcZjEzN1wiOyB9XG4uaW9uLWlvcy1idXM6YmVmb3JlIHsgY29udGVudDogXCJcXGYxM2FcIjsgfVxuLmlvbi1pb3MtYnVzLW91dGxpbmU6YmVmb3JlIHsgY29udGVudDogXCJcXGYxMzlcIjsgfVxuLmlvbi1pb3MtY2FmZTpiZWZvcmUgeyBjb250ZW50OiBcIlxcZjEzY1wiOyB9XG4uaW9uLWlvcy1jYWZlLW91dGxpbmU6YmVmb3JlIHsgY29udGVudDogXCJcXGYxM2JcIjsgfVxuLmlvbi1pb3MtY2FsY3VsYXRvcjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZjNmMlwiOyB9XG4uaW9uLWlvcy1jYWxjdWxhdG9yLW91dGxpbmU6YmVmb3JlIHsgY29udGVudDogXCJcXGYzZjFcIjsgfVxuLmlvbi1pb3MtY2FsZW5kYXI6YmVmb3JlIHsgY29udGVudDogXCJcXGYzZjRcIjsgfVxuLmlvbi1pb3MtY2FsZW5kYXItb3V0bGluZTpiZWZvcmUgeyBjb250ZW50OiBcIlxcZjNmM1wiOyB9XG4uaW9uLWlvcy1jYWxsOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxmMTNlXCI7IH1cbi5pb24taW9zLWNhbGwtb3V0bGluZTpiZWZvcmUgeyBjb250ZW50OiBcIlxcZjEzZFwiOyB9XG4uaW9uLWlvcy1jYW1lcmE6YmVmb3JlIHsgY29udGVudDogXCJcXGYzZjZcIjsgfVxuLmlvbi1pb3MtY2FtZXJhLW91dGxpbmU6YmVmb3JlIHsgY29udGVudDogXCJcXGYzZjVcIjsgfVxuLmlvbi1pb3MtY2FyOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxmMTQwXCI7IH1cbi5pb24taW9zLWNhci1vdXRsaW5lOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxmMTNmXCI7IH1cbi5pb24taW9zLWNhcmQ6YmVmb3JlIHsgY29udGVudDogXCJcXGYxNDJcIjsgfVxuLmlvbi1pb3MtY2FyZC1vdXRsaW5lOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxmMTQxXCI7IH1cbi5pb24taW9zLWNhcnQ6YmVmb3JlIHsgY29udGVudDogXCJcXGYzZjhcIjsgfVxuLmlvbi1pb3MtY2FydC1vdXRsaW5lOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxmM2Y3XCI7IH1cbi5pb24taW9zLWNhc2g6YmVmb3JlIHsgY29udGVudDogXCJcXGYxNDRcIjsgfVxuLmlvbi1pb3MtY2FzaC1vdXRsaW5lOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxmMTQzXCI7IH1cbi5pb24taW9zLWNoYXRib3hlczpiZWZvcmUgeyBjb250ZW50OiBcIlxcZjNmYVwiOyB9XG4uaW9uLWlvcy1jaGF0Ym94ZXMtb3V0bGluZTpiZWZvcmUgeyBjb250ZW50OiBcIlxcZjNmOVwiOyB9XG4uaW9uLWlvcy1jaGF0YnViYmxlczpiZWZvcmUgeyBjb250ZW50OiBcIlxcZjE0NlwiOyB9XG4uaW9uLWlvcy1jaGF0YnViYmxlcy1vdXRsaW5lOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxmMTQ1XCI7IH1cbi5pb24taW9zLWNoZWNrYm94OmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxmMTQ4XCI7IH1cbi5pb24taW9zLWNoZWNrYm94LW91dGxpbmU6YmVmb3JlIHsgY29udGVudDogXCJcXGYxNDdcIjsgfVxuLmlvbi1pb3MtY2hlY2ttYXJrOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxmM2ZmXCI7IH1cbi5pb24taW9zLWNoZWNrbWFyay1jaXJjbGU6YmVmb3JlIHsgY29udGVudDogXCJcXGYxNGFcIjsgfVxuLmlvbi1pb3MtY2hlY2ttYXJrLWNpcmNsZS1vdXRsaW5lOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxmMTQ5XCI7IH1cbi5pb24taW9zLWNoZWNrbWFyay1vdXRsaW5lOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxmM2ZmXCI7IH1cbi5pb24taW9zLWNsaXBib2FyZDpiZWZvcmUgeyBjb250ZW50OiBcIlxcZjE0Y1wiOyB9XG4uaW9uLWlvcy1jbGlwYm9hcmQtb3V0bGluZTpiZWZvcmUgeyBjb250ZW50OiBcIlxcZjE0YlwiOyB9XG4uaW9uLWlvcy1jbG9jazpiZWZvcmUgeyBjb250ZW50OiBcIlxcZjQwM1wiOyB9XG4uaW9uLWlvcy1jbG9jay1vdXRsaW5lOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxmNDAyXCI7IH1cbi5pb24taW9zLWNsb3NlOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxmNDA2XCI7IH1cbi5pb24taW9zLWNsb3NlLWNpcmNsZTpiZWZvcmUgeyBjb250ZW50OiBcIlxcZjE0ZVwiOyB9XG4uaW9uLWlvcy1jbG9zZS1jaXJjbGUtb3V0bGluZTpiZWZvcmUgeyBjb250ZW50OiBcIlxcZjE0ZFwiOyB9XG4uaW9uLWlvcy1jbG9zZS1vdXRsaW5lOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxmNDA2XCI7IH1cbi5pb24taW9zLWNsb3NlZC1jYXB0aW9uaW5nOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxmMTUwXCI7IH1cbi5pb24taW9zLWNsb3NlZC1jYXB0aW9uaW5nLW91dGxpbmU6YmVmb3JlIHsgY29udGVudDogXCJcXGYxNGZcIjsgfVxuLmlvbi1pb3MtY2xvdWQ6YmVmb3JlIHsgY29udGVudDogXCJcXGY0MGNcIjsgfVxuLmlvbi1pb3MtY2xvdWQtY2lyY2xlOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxmMTUyXCI7IH1cbi5pb24taW9zLWNsb3VkLWNpcmNsZS1vdXRsaW5lOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxmMTUxXCI7IH1cbi5pb24taW9zLWNsb3VkLWRvbmU6YmVmb3JlIHsgY29udGVudDogXCJcXGYxNTRcIjsgfVxuLmlvbi1pb3MtY2xvdWQtZG9uZS1vdXRsaW5lOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxmMTUzXCI7IH1cbi5pb24taW9zLWNsb3VkLWRvd25sb2FkOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxmNDA4XCI7IH1cbi5pb24taW9zLWNsb3VkLWRvd25sb2FkLW91dGxpbmU6YmVmb3JlIHsgY29udGVudDogXCJcXGY0MDdcIjsgfVxuLmlvbi1pb3MtY2xvdWQtb3V0bGluZTpiZWZvcmUgeyBjb250ZW50OiBcIlxcZjQwOVwiOyB9XG4uaW9uLWlvcy1jbG91ZC11cGxvYWQ6YmVmb3JlIHsgY29udGVudDogXCJcXGY0MGJcIjsgfVxuLmlvbi1pb3MtY2xvdWQtdXBsb2FkLW91dGxpbmU6YmVmb3JlIHsgY29udGVudDogXCJcXGY0MGFcIjsgfVxuLmlvbi1pb3MtY2xvdWR5OmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxmNDEwXCI7IH1cbi5pb24taW9zLWNsb3VkeS1uaWdodDpiZWZvcmUgeyBjb250ZW50OiBcIlxcZjQwZVwiOyB9XG4uaW9uLWlvcy1jbG91ZHktbmlnaHQtb3V0bGluZTpiZWZvcmUgeyBjb250ZW50OiBcIlxcZjQwZFwiOyB9XG4uaW9uLWlvcy1jbG91ZHktb3V0bGluZTpiZWZvcmUgeyBjb250ZW50OiBcIlxcZjQwZlwiOyB9XG4uaW9uLWlvcy1jb2RlOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxmMTU3XCI7IH1cbi5pb24taW9zLWNvZGUtZG93bmxvYWQ6YmVmb3JlIHsgY29udGVudDogXCJcXGYxNTVcIjsgfVxuLmlvbi1pb3MtY29kZS1kb3dubG9hZC1vdXRsaW5lOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxmMTU1XCI7IH1cbi5pb24taW9zLWNvZGUtb3V0bGluZTpiZWZvcmUgeyBjb250ZW50OiBcIlxcZjE1N1wiOyB9XG4uaW9uLWlvcy1jb2RlLXdvcmtpbmc6YmVmb3JlIHsgY29udGVudDogXCJcXGYxNTZcIjsgfVxuLmlvbi1pb3MtY29kZS13b3JraW5nLW91dGxpbmU6YmVmb3JlIHsgY29udGVudDogXCJcXGYxNTZcIjsgfVxuLmlvbi1pb3MtY29nOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxmNDEyXCI7IH1cbi5pb24taW9zLWNvZy1vdXRsaW5lOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxmNDExXCI7IH1cbi5pb24taW9zLWNvbG9yLWZpbGw6YmVmb3JlIHsgY29udGVudDogXCJcXGYxNTlcIjsgfVxuLmlvbi1pb3MtY29sb3ItZmlsbC1vdXRsaW5lOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxmMTU4XCI7IH1cbi5pb24taW9zLWNvbG9yLWZpbHRlcjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZjQxNFwiOyB9XG4uaW9uLWlvcy1jb2xvci1maWx0ZXItb3V0bGluZTpiZWZvcmUgeyBjb250ZW50OiBcIlxcZjQxM1wiOyB9XG4uaW9uLWlvcy1jb2xvci1wYWxldHRlOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxmMTViXCI7IH1cbi5pb24taW9zLWNvbG9yLXBhbGV0dGUtb3V0bGluZTpiZWZvcmUgeyBjb250ZW50OiBcIlxcZjE1YVwiOyB9XG4uaW9uLWlvcy1jb2xvci13YW5kOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxmNDE2XCI7IH1cbi5pb24taW9zLWNvbG9yLXdhbmQtb3V0bGluZTpiZWZvcmUgeyBjb250ZW50OiBcIlxcZjQxNVwiOyB9XG4uaW9uLWlvcy1jb21wYXNzOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxmMTVkXCI7IH1cbi5pb24taW9zLWNvbXBhc3Mtb3V0bGluZTpiZWZvcmUgeyBjb250ZW50OiBcIlxcZjE1Y1wiOyB9XG4uaW9uLWlvcy1jb25zdHJ1Y3Q6YmVmb3JlIHsgY29udGVudDogXCJcXGYxNWZcIjsgfVxuLmlvbi1pb3MtY29uc3RydWN0LW91dGxpbmU6YmVmb3JlIHsgY29udGVudDogXCJcXGYxNWVcIjsgfVxuLmlvbi1pb3MtY29udGFjdDpiZWZvcmUgeyBjb250ZW50OiBcIlxcZjQxYVwiOyB9XG4uaW9uLWlvcy1jb250YWN0LW91dGxpbmU6YmVmb3JlIHsgY29udGVudDogXCJcXGY0MTlcIjsgfVxuLmlvbi1pb3MtY29udGFjdHM6YmVmb3JlIHsgY29udGVudDogXCJcXGYxNjFcIjsgfVxuLmlvbi1pb3MtY29udGFjdHMtb3V0bGluZTpiZWZvcmUgeyBjb250ZW50OiBcIlxcZjE2MFwiOyB9XG4uaW9uLWlvcy1jb250cmFjdDpiZWZvcmUgeyBjb250ZW50OiBcIlxcZjE2MlwiOyB9XG4uaW9uLWlvcy1jb250cmFjdC1vdXRsaW5lOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxmMTYyXCI7IH1cbi5pb24taW9zLWNvbnRyYXN0OmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxmMTYzXCI7IH1cbi5pb24taW9zLWNvbnRyYXN0LW91dGxpbmU6YmVmb3JlIHsgY29udGVudDogXCJcXGYxNjNcIjsgfVxuLmlvbi1pb3MtY29weTpiZWZvcmUgeyBjb250ZW50OiBcIlxcZjQxY1wiOyB9XG4uaW9uLWlvcy1jb3B5LW91dGxpbmU6YmVmb3JlIHsgY29udGVudDogXCJcXGY0MWJcIjsgfVxuLmlvbi1pb3MtY3JlYXRlOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxmMTY1XCI7IH1cbi5pb24taW9zLWNyZWF0ZS1vdXRsaW5lOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxmMTY0XCI7IH1cbi5pb24taW9zLWNyb3A6YmVmb3JlIHsgY29udGVudDogXCJcXGY0MWVcIjsgfVxuLmlvbi1pb3MtY3JvcC1vdXRsaW5lOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxmMTY2XCI7IH1cbi5pb24taW9zLWN1YmU6YmVmb3JlIHsgY29udGVudDogXCJcXGYxNjhcIjsgfVxuLmlvbi1pb3MtY3ViZS1vdXRsaW5lOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxmMTY3XCI7IH1cbi5pb24taW9zLWN1dDpiZWZvcmUgeyBjb250ZW50OiBcIlxcZjE2YVwiOyB9XG4uaW9uLWlvcy1jdXQtb3V0bGluZTpiZWZvcmUgeyBjb250ZW50OiBcIlxcZjE2OVwiOyB9XG4uaW9uLWlvcy1kZXNrdG9wOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxmMTZjXCI7IH1cbi5pb24taW9zLWRlc2t0b3Atb3V0bGluZTpiZWZvcmUgeyBjb250ZW50OiBcIlxcZjE2YlwiOyB9XG4uaW9uLWlvcy1kaXNjOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxmMTZlXCI7IH1cbi5pb24taW9zLWRpc2Mtb3V0bGluZTpiZWZvcmUgeyBjb250ZW50OiBcIlxcZjE2ZFwiOyB9XG4uaW9uLWlvcy1kb2N1bWVudDpiZWZvcmUgeyBjb250ZW50OiBcIlxcZjE3MFwiOyB9XG4uaW9uLWlvcy1kb2N1bWVudC1vdXRsaW5lOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxmMTZmXCI7IH1cbi5pb24taW9zLWRvbmUtYWxsOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxmMTcxXCI7IH1cbi5pb24taW9zLWRvbmUtYWxsLW91dGxpbmU6YmVmb3JlIHsgY29udGVudDogXCJcXGYxNzFcIjsgfVxuLmlvbi1pb3MtZG93bmxvYWQ6YmVmb3JlIHsgY29udGVudDogXCJcXGY0MjBcIjsgfVxuLmlvbi1pb3MtZG93bmxvYWQtb3V0bGluZTpiZWZvcmUgeyBjb250ZW50OiBcIlxcZjQxZlwiOyB9XG4uaW9uLWlvcy1lYXNlbDpiZWZvcmUgeyBjb250ZW50OiBcIlxcZjE3M1wiOyB9XG4uaW9uLWlvcy1lYXNlbC1vdXRsaW5lOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxmMTcyXCI7IH1cbi5pb24taW9zLWVnZzpiZWZvcmUgeyBjb250ZW50OiBcIlxcZjE3NVwiOyB9XG4uaW9uLWlvcy1lZ2ctb3V0bGluZTpiZWZvcmUgeyBjb250ZW50OiBcIlxcZjE3NFwiOyB9XG4uaW9uLWlvcy1leGl0OmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxmMTc3XCI7IH1cbi5pb24taW9zLWV4aXQtb3V0bGluZTpiZWZvcmUgeyBjb250ZW50OiBcIlxcZjE3NlwiOyB9XG4uaW9uLWlvcy1leHBhbmQ6YmVmb3JlIHsgY29udGVudDogXCJcXGYxNzhcIjsgfVxuLmlvbi1pb3MtZXhwYW5kLW91dGxpbmU6YmVmb3JlIHsgY29udGVudDogXCJcXGYxNzhcIjsgfVxuLmlvbi1pb3MtZXllOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxmNDI1XCI7IH1cbi5pb24taW9zLWV5ZS1vZmY6YmVmb3JlIHsgY29udGVudDogXCJcXGYxN2FcIjsgfVxuLmlvbi1pb3MtZXllLW9mZi1vdXRsaW5lOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxmMTc5XCI7IH1cbi5pb24taW9zLWV5ZS1vdXRsaW5lOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxmNDI0XCI7IH1cbi5pb24taW9zLWZhc3Rmb3J3YXJkOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxmNDI3XCI7IH1cbi5pb24taW9zLWZhc3Rmb3J3YXJkLW91dGxpbmU6YmVmb3JlIHsgY29udGVudDogXCJcXGY0MjZcIjsgfVxuLmlvbi1pb3MtZmVtYWxlOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxmMTdiXCI7IH1cbi5pb24taW9zLWZlbWFsZS1vdXRsaW5lOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxmMTdiXCI7IH1cbi5pb24taW9zLWZpbGluZzpiZWZvcmUgeyBjb250ZW50OiBcIlxcZjQyOVwiOyB9XG4uaW9uLWlvcy1maWxpbmctb3V0bGluZTpiZWZvcmUgeyBjb250ZW50OiBcIlxcZjQyOFwiOyB9XG4uaW9uLWlvcy1maWxtOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxmNDJiXCI7IH1cbi5pb24taW9zLWZpbG0tb3V0bGluZTpiZWZvcmUgeyBjb250ZW50OiBcIlxcZjQyYVwiOyB9XG4uaW9uLWlvcy1maW5nZXItcHJpbnQ6YmVmb3JlIHsgY29udGVudDogXCJcXGYxN2NcIjsgfVxuLmlvbi1pb3MtZmluZ2VyLXByaW50LW91dGxpbmU6YmVmb3JlIHsgY29udGVudDogXCJcXGYxN2NcIjsgfVxuLmlvbi1pb3MtZmxhZzpiZWZvcmUgeyBjb250ZW50OiBcIlxcZjQyZFwiOyB9XG4uaW9uLWlvcy1mbGFnLW91dGxpbmU6YmVmb3JlIHsgY29udGVudDogXCJcXGY0MmNcIjsgfVxuLmlvbi1pb3MtZmxhbWU6YmVmb3JlIHsgY29udGVudDogXCJcXGY0MmZcIjsgfVxuLmlvbi1pb3MtZmxhbWUtb3V0bGluZTpiZWZvcmUgeyBjb250ZW50OiBcIlxcZjQyZVwiOyB9XG4uaW9uLWlvcy1mbGFzaDpiZWZvcmUgeyBjb250ZW50OiBcIlxcZjE3ZVwiOyB9XG4uaW9uLWlvcy1mbGFzaC1vdXRsaW5lOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxmMTdkXCI7IH1cbi5pb24taW9zLWZsYXNrOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxmNDMxXCI7IH1cbi5pb24taW9zLWZsYXNrLW91dGxpbmU6YmVmb3JlIHsgY29udGVudDogXCJcXGY0MzBcIjsgfVxuLmlvbi1pb3MtZmxvd2VyOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxmNDMzXCI7IH1cbi5pb24taW9zLWZsb3dlci1vdXRsaW5lOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxmNDMyXCI7IH1cbi5pb24taW9zLWZvbGRlcjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZjQzNVwiOyB9XG4uaW9uLWlvcy1mb2xkZXItb3BlbjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZjE4MFwiOyB9XG4uaW9uLWlvcy1mb2xkZXItb3Blbi1vdXRsaW5lOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxmMTdmXCI7IH1cbi5pb24taW9zLWZvbGRlci1vdXRsaW5lOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxmNDM0XCI7IH1cbi5pb24taW9zLWZvb3RiYWxsOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxmNDM3XCI7IH1cbi5pb24taW9zLWZvb3RiYWxsLW91dGxpbmU6YmVmb3JlIHsgY29udGVudDogXCJcXGY0MzZcIjsgfVxuLmlvbi1pb3MtZnVubmVsOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxmMTgyXCI7IH1cbi5pb24taW9zLWZ1bm5lbC1vdXRsaW5lOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxmMTgxXCI7IH1cbi5pb24taW9zLWdhbWUtY29udHJvbGxlci1hOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxmNDM5XCI7IH1cbi5pb24taW9zLWdhbWUtY29udHJvbGxlci1hLW91dGxpbmU6YmVmb3JlIHsgY29udGVudDogXCJcXGY0MzhcIjsgfVxuLmlvbi1pb3MtZ2FtZS1jb250cm9sbGVyLWI6YmVmb3JlIHsgY29udGVudDogXCJcXGY0M2JcIjsgfVxuLmlvbi1pb3MtZ2FtZS1jb250cm9sbGVyLWItb3V0bGluZTpiZWZvcmUgeyBjb250ZW50OiBcIlxcZjQzYVwiOyB9XG4uaW9uLWlvcy1naXQtYnJhbmNoOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxmMTgzXCI7IH1cbi5pb24taW9zLWdpdC1icmFuY2gtb3V0bGluZTpiZWZvcmUgeyBjb250ZW50OiBcIlxcZjE4M1wiOyB9XG4uaW9uLWlvcy1naXQtY29tbWl0OmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxmMTg0XCI7IH1cbi5pb24taW9zLWdpdC1jb21taXQtb3V0bGluZTpiZWZvcmUgeyBjb250ZW50OiBcIlxcZjE4NFwiOyB9XG4uaW9uLWlvcy1naXQtY29tcGFyZTpiZWZvcmUgeyBjb250ZW50OiBcIlxcZjE4NVwiOyB9XG4uaW9uLWlvcy1naXQtY29tcGFyZS1vdXRsaW5lOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxmMTg1XCI7IH1cbi5pb24taW9zLWdpdC1tZXJnZTpiZWZvcmUgeyBjb250ZW50OiBcIlxcZjE4NlwiOyB9XG4uaW9uLWlvcy1naXQtbWVyZ2Utb3V0bGluZTpiZWZvcmUgeyBjb250ZW50OiBcIlxcZjE4NlwiOyB9XG4uaW9uLWlvcy1naXQtbmV0d29yazpiZWZvcmUgeyBjb250ZW50OiBcIlxcZjE4N1wiOyB9XG4uaW9uLWlvcy1naXQtbmV0d29yay1vdXRsaW5lOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxmMTg3XCI7IH1cbi5pb24taW9zLWdpdC1wdWxsLXJlcXVlc3Q6YmVmb3JlIHsgY29udGVudDogXCJcXGYxODhcIjsgfVxuLmlvbi1pb3MtZ2l0LXB1bGwtcmVxdWVzdC1vdXRsaW5lOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxmMTg4XCI7IH1cbi5pb24taW9zLWdsYXNzZXM6YmVmb3JlIHsgY29udGVudDogXCJcXGY0M2ZcIjsgfVxuLmlvbi1pb3MtZ2xhc3Nlcy1vdXRsaW5lOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxmNDNlXCI7IH1cbi5pb24taW9zLWdsb2JlOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxmMThhXCI7IH1cbi5pb24taW9zLWdsb2JlLW91dGxpbmU6YmVmb3JlIHsgY29udGVudDogXCJcXGYxODlcIjsgfVxuLmlvbi1pb3MtZ3JpZDpiZWZvcmUgeyBjb250ZW50OiBcIlxcZjE4Y1wiOyB9XG4uaW9uLWlvcy1ncmlkLW91dGxpbmU6YmVmb3JlIHsgY29udGVudDogXCJcXGYxOGJcIjsgfVxuLmlvbi1pb3MtaGFtbWVyOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxmMThlXCI7IH1cbi5pb24taW9zLWhhbW1lci1vdXRsaW5lOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxmMThkXCI7IH1cbi5pb24taW9zLWhhbmQ6YmVmb3JlIHsgY29udGVudDogXCJcXGYxOTBcIjsgfVxuLmlvbi1pb3MtaGFuZC1vdXRsaW5lOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxmMThmXCI7IH1cbi5pb24taW9zLWhhcHB5OmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxmMTkyXCI7IH1cbi5pb24taW9zLWhhcHB5LW91dGxpbmU6YmVmb3JlIHsgY29udGVudDogXCJcXGYxOTFcIjsgfVxuLmlvbi1pb3MtaGVhZHNldDpiZWZvcmUgeyBjb250ZW50OiBcIlxcZjE5NFwiOyB9XG4uaW9uLWlvcy1oZWFkc2V0LW91dGxpbmU6YmVmb3JlIHsgY29udGVudDogXCJcXGYxOTNcIjsgfVxuLmlvbi1pb3MtaGVhcnQ6YmVmb3JlIHsgY29udGVudDogXCJcXGY0NDNcIjsgfVxuLmlvbi1pb3MtaGVhcnQtb3V0bGluZTpiZWZvcmUgeyBjb250ZW50OiBcIlxcZjQ0MlwiOyB9XG4uaW9uLWlvcy1oZWxwOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxmNDQ2XCI7IH1cbi5pb24taW9zLWhlbHAtYnVveTpiZWZvcmUgeyBjb250ZW50OiBcIlxcZjE5NlwiOyB9XG4uaW9uLWlvcy1oZWxwLWJ1b3ktb3V0bGluZTpiZWZvcmUgeyBjb250ZW50OiBcIlxcZjE5NVwiOyB9XG4uaW9uLWlvcy1oZWxwLWNpcmNsZTpiZWZvcmUgeyBjb250ZW50OiBcIlxcZjE5OFwiOyB9XG4uaW9uLWlvcy1oZWxwLWNpcmNsZS1vdXRsaW5lOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxmMTk3XCI7IH1cbi5pb24taW9zLWhlbHAtb3V0bGluZTpiZWZvcmUgeyBjb250ZW50OiBcIlxcZjQ0NlwiOyB9XG4uaW9uLWlvcy1ob21lOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxmNDQ4XCI7IH1cbi5pb24taW9zLWhvbWUtb3V0bGluZTpiZWZvcmUgeyBjb250ZW50OiBcIlxcZjQ0N1wiOyB9XG4uaW9uLWlvcy1pY2UtY3JlYW06YmVmb3JlIHsgY29udGVudDogXCJcXGYxOWFcIjsgfVxuLmlvbi1pb3MtaWNlLWNyZWFtLW91dGxpbmU6YmVmb3JlIHsgY29udGVudDogXCJcXGYxOTlcIjsgfVxuLmlvbi1pb3MtaW1hZ2U6YmVmb3JlIHsgY29udGVudDogXCJcXGYxOWNcIjsgfVxuLmlvbi1pb3MtaW1hZ2Utb3V0bGluZTpiZWZvcmUgeyBjb250ZW50OiBcIlxcZjE5YlwiOyB9XG4uaW9uLWlvcy1pbWFnZXM6YmVmb3JlIHsgY29udGVudDogXCJcXGYxOWVcIjsgfVxuLmlvbi1pb3MtaW1hZ2VzLW91dGxpbmU6YmVmb3JlIHsgY29udGVudDogXCJcXGYxOWRcIjsgfVxuLmlvbi1pb3MtaW5maW5pdGU6YmVmb3JlIHsgY29udGVudDogXCJcXGY0NGFcIjsgfVxuLmlvbi1pb3MtaW5maW5pdGUtb3V0bGluZTpiZWZvcmUgeyBjb250ZW50OiBcIlxcZjQ0OVwiOyB9XG4uaW9uLWlvcy1pbmZvcm1hdGlvbjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZjQ0ZFwiOyB9XG4uaW9uLWlvcy1pbmZvcm1hdGlvbi1jaXJjbGU6YmVmb3JlIHsgY29udGVudDogXCJcXGYxYTBcIjsgfVxuLmlvbi1pb3MtaW5mb3JtYXRpb24tY2lyY2xlLW91dGxpbmU6YmVmb3JlIHsgY29udGVudDogXCJcXGYxOWZcIjsgfVxuLmlvbi1pb3MtaW5mb3JtYXRpb24tb3V0bGluZTpiZWZvcmUgeyBjb250ZW50OiBcIlxcZjQ0ZFwiOyB9XG4uaW9uLWlvcy1pb25pYzpiZWZvcmUgeyBjb250ZW50OiBcIlxcZjFhMVwiOyB9XG4uaW9uLWlvcy1pb25pYy1vdXRsaW5lOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxmNDRlXCI7IH1cbi5pb24taW9zLWlvbml0cm9uOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxmMWEzXCI7IH1cbi5pb24taW9zLWlvbml0cm9uLW91dGxpbmU6YmVmb3JlIHsgY29udGVudDogXCJcXGYxYTJcIjsgfVxuLmlvbi1pb3MtamV0OmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxmMWE1XCI7IH1cbi5pb24taW9zLWpldC1vdXRsaW5lOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxmMWE0XCI7IH1cbi5pb24taW9zLWtleTpiZWZvcmUgeyBjb250ZW50OiBcIlxcZjFhN1wiOyB9XG4uaW9uLWlvcy1rZXktb3V0bGluZTpiZWZvcmUgeyBjb250ZW50OiBcIlxcZjFhNlwiOyB9XG4uaW9uLWlvcy1rZXlwYWQ6YmVmb3JlIHsgY29udGVudDogXCJcXGY0NTBcIjsgfVxuLmlvbi1pb3Mta2V5cGFkLW91dGxpbmU6YmVmb3JlIHsgY29udGVudDogXCJcXGY0NGZcIjsgfVxuLmlvbi1pb3MtbGFwdG9wOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxmMWE4XCI7IH1cbi5pb24taW9zLWxhcHRvcC1vdXRsaW5lOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxmMWE4XCI7IH1cbi5pb24taW9zLWxlYWY6YmVmb3JlIHsgY29udGVudDogXCJcXGYxYWFcIjsgfVxuLmlvbi1pb3MtbGVhZi1vdXRsaW5lOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxmMWE5XCI7IH1cbi5pb24taW9zLWxpbms6YmVmb3JlIHsgY29udGVudDogXCJcXGYyMmFcIjsgfVxuLmlvbi1pb3MtbGluay1vdXRsaW5lOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxmMWNhXCI7IH1cbi5pb24taW9zLWxpc3Q6YmVmb3JlIHsgY29udGVudDogXCJcXGY0NTRcIjsgfVxuLmlvbi1pb3MtbGlzdC1ib3g6YmVmb3JlIHsgY29udGVudDogXCJcXGYxYWNcIjsgfVxuLmlvbi1pb3MtbGlzdC1ib3gtb3V0bGluZTpiZWZvcmUgeyBjb250ZW50OiBcIlxcZjFhYlwiOyB9XG4uaW9uLWlvcy1saXN0LW91dGxpbmU6YmVmb3JlIHsgY29udGVudDogXCJcXGY0NTRcIjsgfVxuLmlvbi1pb3MtbG9jYXRlOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxmMWFlXCI7IH1cbi5pb24taW9zLWxvY2F0ZS1vdXRsaW5lOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxmMWFkXCI7IH1cbi5pb24taW9zLWxvY2s6YmVmb3JlIHsgY29udGVudDogXCJcXGYxYjBcIjsgfVxuLmlvbi1pb3MtbG9jay1vdXRsaW5lOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxmMWFmXCI7IH1cbi5pb24taW9zLWxvZy1pbjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZjFiMVwiOyB9XG4uaW9uLWlvcy1sb2ctaW4tb3V0bGluZTpiZWZvcmUgeyBjb250ZW50OiBcIlxcZjFiMVwiOyB9XG4uaW9uLWlvcy1sb2ctb3V0OmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxmMWIyXCI7IH1cbi5pb24taW9zLWxvZy1vdXQtb3V0bGluZTpiZWZvcmUgeyBjb250ZW50OiBcIlxcZjFiMlwiOyB9XG4uaW9uLWlvcy1tYWduZXQ6YmVmb3JlIHsgY29udGVudDogXCJcXGYxYjRcIjsgfVxuLmlvbi1pb3MtbWFnbmV0LW91dGxpbmU6YmVmb3JlIHsgY29udGVudDogXCJcXGYxYjNcIjsgfVxuLmlvbi1pb3MtbWFpbDpiZWZvcmUgeyBjb250ZW50OiBcIlxcZjFiOFwiOyB9XG4uaW9uLWlvcy1tYWlsLW9wZW46YmVmb3JlIHsgY29udGVudDogXCJcXGYxYjZcIjsgfVxuLmlvbi1pb3MtbWFpbC1vcGVuLW91dGxpbmU6YmVmb3JlIHsgY29udGVudDogXCJcXGYxYjVcIjsgfVxuLmlvbi1pb3MtbWFpbC1vdXRsaW5lOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxmMWI3XCI7IH1cbi5pb24taW9zLW1hbGU6YmVmb3JlIHsgY29udGVudDogXCJcXGYxYjlcIjsgfVxuLmlvbi1pb3MtbWFsZS1vdXRsaW5lOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxmMWI5XCI7IH1cbi5pb24taW9zLW1hbjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZjFiYlwiOyB9XG4uaW9uLWlvcy1tYW4tb3V0bGluZTpiZWZvcmUgeyBjb250ZW50OiBcIlxcZjFiYVwiOyB9XG4uaW9uLWlvcy1tYXA6YmVmb3JlIHsgY29udGVudDogXCJcXGYxYmRcIjsgfVxuLmlvbi1pb3MtbWFwLW91dGxpbmU6YmVmb3JlIHsgY29udGVudDogXCJcXGYxYmNcIjsgfVxuLmlvbi1pb3MtbWVkYWw6YmVmb3JlIHsgY29udGVudDogXCJcXGYxYmZcIjsgfVxuLmlvbi1pb3MtbWVkYWwtb3V0bGluZTpiZWZvcmUgeyBjb250ZW50OiBcIlxcZjFiZVwiOyB9XG4uaW9uLWlvcy1tZWRpY2FsOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxmNDVjXCI7IH1cbi5pb24taW9zLW1lZGljYWwtb3V0bGluZTpiZWZvcmUgeyBjb250ZW50OiBcIlxcZjQ1YlwiOyB9XG4uaW9uLWlvcy1tZWRraXQ6YmVmb3JlIHsgY29udGVudDogXCJcXGY0NWVcIjsgfVxuLmlvbi1pb3MtbWVka2l0LW91dGxpbmU6YmVmb3JlIHsgY29udGVudDogXCJcXGY0NWRcIjsgfVxuLmlvbi1pb3MtbWVnYXBob25lOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxmMWMxXCI7IH1cbi5pb24taW9zLW1lZ2FwaG9uZS1vdXRsaW5lOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxmMWMwXCI7IH1cbi5pb24taW9zLW1lbnU6YmVmb3JlIHsgY29udGVudDogXCJcXGYxYzNcIjsgfVxuLmlvbi1pb3MtbWVudS1vdXRsaW5lOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxmMWMyXCI7IH1cbi5pb24taW9zLW1pYzpiZWZvcmUgeyBjb250ZW50OiBcIlxcZjQ2MVwiOyB9XG4uaW9uLWlvcy1taWMtb2ZmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxmNDVmXCI7IH1cbi5pb24taW9zLW1pYy1vZmYtb3V0bGluZTpiZWZvcmUgeyBjb250ZW50OiBcIlxcZjFjNFwiOyB9XG4uaW9uLWlvcy1taWMtb3V0bGluZTpiZWZvcmUgeyBjb250ZW50OiBcIlxcZjQ2MFwiOyB9XG4uaW9uLWlvcy1taWNyb3Bob25lOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxmMWM2XCI7IH1cbi5pb24taW9zLW1pY3JvcGhvbmUtb3V0bGluZTpiZWZvcmUgeyBjb250ZW50OiBcIlxcZjFjNVwiOyB9XG4uaW9uLWlvcy1tb29uOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxmNDY4XCI7IH1cbi5pb24taW9zLW1vb24tb3V0bGluZTpiZWZvcmUgeyBjb250ZW50OiBcIlxcZjQ2N1wiOyB9XG4uaW9uLWlvcy1tb3JlOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxmMWM4XCI7IH1cbi5pb24taW9zLW1vcmUtb3V0bGluZTpiZWZvcmUgeyBjb250ZW50OiBcIlxcZjFjN1wiOyB9XG4uaW9uLWlvcy1tb3ZlOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxmMWNiXCI7IH1cbi5pb24taW9zLW1vdmUtb3V0bGluZTpiZWZvcmUgeyBjb250ZW50OiBcIlxcZjFjYlwiOyB9XG4uaW9uLWlvcy1tdXNpY2FsLW5vdGU6YmVmb3JlIHsgY29udGVudDogXCJcXGY0NmJcIjsgfVxuLmlvbi1pb3MtbXVzaWNhbC1ub3RlLW91dGxpbmU6YmVmb3JlIHsgY29udGVudDogXCJcXGYxY2NcIjsgfVxuLmlvbi1pb3MtbXVzaWNhbC1ub3RlczpiZWZvcmUgeyBjb250ZW50OiBcIlxcZjQ2Y1wiOyB9XG4uaW9uLWlvcy1tdXNpY2FsLW5vdGVzLW91dGxpbmU6YmVmb3JlIHsgY29udGVudDogXCJcXGYxY2RcIjsgfVxuLmlvbi1pb3MtbmF2aWdhdGU6YmVmb3JlIHsgY29udGVudDogXCJcXGY0NmVcIjsgfVxuLmlvbi1pb3MtbmF2aWdhdGUtb3V0bGluZTpiZWZvcmUgeyBjb250ZW50OiBcIlxcZjQ2ZFwiOyB9XG4uaW9uLWlvcy1uby1zbW9raW5nOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxmMWNmXCI7IH1cbi5pb24taW9zLW5vLXNtb2tpbmctb3V0bGluZTpiZWZvcmUgeyBjb250ZW50OiBcIlxcZjFjZVwiOyB9XG4uaW9uLWlvcy1ub3RpZmljYXRpb25zOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxmMWQzXCI7IH1cbi5pb24taW9zLW5vdGlmaWNhdGlvbnMtb2ZmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxmMWQxXCI7IH1cbi5pb24taW9zLW5vdGlmaWNhdGlvbnMtb2ZmLW91dGxpbmU6YmVmb3JlIHsgY29udGVudDogXCJcXGYxZDBcIjsgfVxuLmlvbi1pb3Mtbm90aWZpY2F0aW9ucy1vdXRsaW5lOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxmMWQyXCI7IH1cbi5pb24taW9zLW51Y2xlYXI6YmVmb3JlIHsgY29udGVudDogXCJcXGYxZDVcIjsgfVxuLmlvbi1pb3MtbnVjbGVhci1vdXRsaW5lOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxmMWQ0XCI7IH1cbi5pb24taW9zLW51dHJpdGlvbjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZjQ3MFwiOyB9XG4uaW9uLWlvcy1udXRyaXRpb24tb3V0bGluZTpiZWZvcmUgeyBjb250ZW50OiBcIlxcZjQ2ZlwiOyB9XG4uaW9uLWlvcy1vcGVuOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxmMWQ3XCI7IH1cbi5pb24taW9zLW9wZW4tb3V0bGluZTpiZWZvcmUgeyBjb250ZW50OiBcIlxcZjFkNlwiOyB9XG4uaW9uLWlvcy1vcHRpb25zOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxmMWQ5XCI7IH1cbi5pb24taW9zLW9wdGlvbnMtb3V0bGluZTpiZWZvcmUgeyBjb250ZW50OiBcIlxcZjFkOFwiOyB9XG4uaW9uLWlvcy1vdXRsZXQ6YmVmb3JlIHsgY29udGVudDogXCJcXGYxZGJcIjsgfVxuLmlvbi1pb3Mtb3V0bGV0LW91dGxpbmU6YmVmb3JlIHsgY29udGVudDogXCJcXGYxZGFcIjsgfVxuLmlvbi1pb3MtcGFwZXI6YmVmb3JlIHsgY29udGVudDogXCJcXGY0NzJcIjsgfVxuLmlvbi1pb3MtcGFwZXItb3V0bGluZTpiZWZvcmUgeyBjb250ZW50OiBcIlxcZjQ3MVwiOyB9XG4uaW9uLWlvcy1wYXBlci1wbGFuZTpiZWZvcmUgeyBjb250ZW50OiBcIlxcZjFkZFwiOyB9XG4uaW9uLWlvcy1wYXBlci1wbGFuZS1vdXRsaW5lOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxmMWRjXCI7IH1cbi5pb24taW9zLXBhcnRseS1zdW5ueTpiZWZvcmUgeyBjb250ZW50OiBcIlxcZjFkZlwiOyB9XG4uaW9uLWlvcy1wYXJ0bHktc3Vubnktb3V0bGluZTpiZWZvcmUgeyBjb250ZW50OiBcIlxcZjFkZVwiOyB9XG4uaW9uLWlvcy1wYXVzZTpiZWZvcmUgeyBjb250ZW50OiBcIlxcZjQ3OFwiOyB9XG4uaW9uLWlvcy1wYXVzZS1vdXRsaW5lOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxmNDc3XCI7IH1cbi5pb24taW9zLXBhdzpiZWZvcmUgeyBjb250ZW50OiBcIlxcZjQ3YVwiOyB9XG4uaW9uLWlvcy1wYXctb3V0bGluZTpiZWZvcmUgeyBjb250ZW50OiBcIlxcZjQ3OVwiOyB9XG4uaW9uLWlvcy1wZW9wbGU6YmVmb3JlIHsgY29udGVudDogXCJcXGY0N2NcIjsgfVxuLmlvbi1pb3MtcGVvcGxlLW91dGxpbmU6YmVmb3JlIHsgY29udGVudDogXCJcXGY0N2JcIjsgfVxuLmlvbi1pb3MtcGVyc29uOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxmNDdlXCI7IH1cbi5pb24taW9zLXBlcnNvbi1hZGQ6YmVmb3JlIHsgY29udGVudDogXCJcXGYxZTFcIjsgfVxuLmlvbi1pb3MtcGVyc29uLWFkZC1vdXRsaW5lOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxmMWUwXCI7IH1cbi5pb24taW9zLXBlcnNvbi1vdXRsaW5lOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxmNDdkXCI7IH1cbi5pb24taW9zLXBob25lLWxhbmRzY2FwZTpiZWZvcmUgeyBjb250ZW50OiBcIlxcZjFlMlwiOyB9XG4uaW9uLWlvcy1waG9uZS1sYW5kc2NhcGUtb3V0bGluZTpiZWZvcmUgeyBjb250ZW50OiBcIlxcZjFlMlwiOyB9XG4uaW9uLWlvcy1waG9uZS1wb3J0cmFpdDpiZWZvcmUgeyBjb250ZW50OiBcIlxcZjFlM1wiOyB9XG4uaW9uLWlvcy1waG9uZS1wb3J0cmFpdC1vdXRsaW5lOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxmMWUzXCI7IH1cbi5pb24taW9zLXBob3RvczpiZWZvcmUgeyBjb250ZW50OiBcIlxcZjQ4MlwiOyB9XG4uaW9uLWlvcy1waG90b3Mtb3V0bGluZTpiZWZvcmUgeyBjb250ZW50OiBcIlxcZjQ4MVwiOyB9XG4uaW9uLWlvcy1waWU6YmVmb3JlIHsgY29udGVudDogXCJcXGY0ODRcIjsgfVxuLmlvbi1pb3MtcGllLW91dGxpbmU6YmVmb3JlIHsgY29udGVudDogXCJcXGY0ODNcIjsgfVxuLmlvbi1pb3MtcGluOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxmMWU1XCI7IH1cbi5pb24taW9zLXBpbi1vdXRsaW5lOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxmMWU0XCI7IH1cbi5pb24taW9zLXBpbnQ6YmVmb3JlIHsgY29udGVudDogXCJcXGY0ODZcIjsgfVxuLmlvbi1pb3MtcGludC1vdXRsaW5lOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxmNDg1XCI7IH1cbi5pb24taW9zLXBpenphOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxmMWU3XCI7IH1cbi5pb24taW9zLXBpenphLW91dGxpbmU6YmVmb3JlIHsgY29udGVudDogXCJcXGYxZTZcIjsgfVxuLmlvbi1pb3MtcGxhbmU6YmVmb3JlIHsgY29udGVudDogXCJcXGYxZTlcIjsgfVxuLmlvbi1pb3MtcGxhbmUtb3V0bGluZTpiZWZvcmUgeyBjb250ZW50OiBcIlxcZjFlOFwiOyB9XG4uaW9uLWlvcy1wbGFuZXQ6YmVmb3JlIHsgY29udGVudDogXCJcXGYxZWJcIjsgfVxuLmlvbi1pb3MtcGxhbmV0LW91dGxpbmU6YmVmb3JlIHsgY29udGVudDogXCJcXGYxZWFcIjsgfVxuLmlvbi1pb3MtcGxheTpiZWZvcmUgeyBjb250ZW50OiBcIlxcZjQ4OFwiOyB9XG4uaW9uLWlvcy1wbGF5LW91dGxpbmU6YmVmb3JlIHsgY29udGVudDogXCJcXGY0ODdcIjsgfVxuLmlvbi1pb3MtcG9kaXVtOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxmMWVkXCI7IH1cbi5pb24taW9zLXBvZGl1bS1vdXRsaW5lOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxmMWVjXCI7IH1cbi5pb24taW9zLXBvd2VyOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxmMWVmXCI7IH1cbi5pb24taW9zLXBvd2VyLW91dGxpbmU6YmVmb3JlIHsgY29udGVudDogXCJcXGYxZWVcIjsgfVxuLmlvbi1pb3MtcHJpY2V0YWc6YmVmb3JlIHsgY29udGVudDogXCJcXGY0OGRcIjsgfVxuLmlvbi1pb3MtcHJpY2V0YWctb3V0bGluZTpiZWZvcmUgeyBjb250ZW50OiBcIlxcZjQ4Y1wiOyB9XG4uaW9uLWlvcy1wcmljZXRhZ3M6YmVmb3JlIHsgY29udGVudDogXCJcXGY0OGZcIjsgfVxuLmlvbi1pb3MtcHJpY2V0YWdzLW91dGxpbmU6YmVmb3JlIHsgY29udGVudDogXCJcXGY0OGVcIjsgfVxuLmlvbi1pb3MtcHJpbnQ6YmVmb3JlIHsgY29udGVudDogXCJcXGYxZjFcIjsgfVxuLmlvbi1pb3MtcHJpbnQtb3V0bGluZTpiZWZvcmUgeyBjb250ZW50OiBcIlxcZjFmMFwiOyB9XG4uaW9uLWlvcy1wdWxzZTpiZWZvcmUgeyBjb250ZW50OiBcIlxcZjQ5M1wiOyB9XG4uaW9uLWlvcy1wdWxzZS1vdXRsaW5lOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxmMWYyXCI7IH1cbi5pb24taW9zLXFyLXNjYW5uZXI6YmVmb3JlIHsgY29udGVudDogXCJcXGYxZjNcIjsgfVxuLmlvbi1pb3MtcXItc2Nhbm5lci1vdXRsaW5lOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxmMWYzXCI7IH1cbi5pb24taW9zLXF1b3RlOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxmMWY1XCI7IH1cbi5pb24taW9zLXF1b3RlLW91dGxpbmU6YmVmb3JlIHsgY29udGVudDogXCJcXGYxZjRcIjsgfVxuLmlvbi1pb3MtcmFkaW86YmVmb3JlIHsgY29udGVudDogXCJcXGYxZjlcIjsgfVxuLmlvbi1pb3MtcmFkaW8tYnV0dG9uLW9mZjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZjFmNlwiOyB9XG4uaW9uLWlvcy1yYWRpby1idXR0b24tb2ZmLW91dGxpbmU6YmVmb3JlIHsgY29udGVudDogXCJcXGYxZjZcIjsgfVxuLmlvbi1pb3MtcmFkaW8tYnV0dG9uLW9uOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxmMWY3XCI7IH1cbi5pb24taW9zLXJhZGlvLWJ1dHRvbi1vbi1vdXRsaW5lOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxmMWY3XCI7IH1cbi5pb24taW9zLXJhZGlvLW91dGxpbmU6YmVmb3JlIHsgY29udGVudDogXCJcXGYxZjhcIjsgfVxuLmlvbi1pb3MtcmFpbnk6YmVmb3JlIHsgY29udGVudDogXCJcXGY0OTVcIjsgfVxuLmlvbi1pb3MtcmFpbnktb3V0bGluZTpiZWZvcmUgeyBjb250ZW50OiBcIlxcZjQ5NFwiOyB9XG4uaW9uLWlvcy1yZWNvcmRpbmc6YmVmb3JlIHsgY29udGVudDogXCJcXGY0OTdcIjsgfVxuLmlvbi1pb3MtcmVjb3JkaW5nLW91dGxpbmU6YmVmb3JlIHsgY29udGVudDogXCJcXGY0OTZcIjsgfVxuLmlvbi1pb3MtcmVkbzpiZWZvcmUgeyBjb250ZW50OiBcIlxcZjQ5OVwiOyB9XG4uaW9uLWlvcy1yZWRvLW91dGxpbmU6YmVmb3JlIHsgY29udGVudDogXCJcXGY0OThcIjsgfVxuLmlvbi1pb3MtcmVmcmVzaDpiZWZvcmUgeyBjb250ZW50OiBcIlxcZjQ5Y1wiOyB9XG4uaW9uLWlvcy1yZWZyZXNoLWNpcmNsZTpiZWZvcmUgeyBjb250ZW50OiBcIlxcZjIyNlwiOyB9XG4uaW9uLWlvcy1yZWZyZXNoLWNpcmNsZS1vdXRsaW5lOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxmMjI0XCI7IH1cbi5pb24taW9zLXJlZnJlc2gtb3V0bGluZTpiZWZvcmUgeyBjb250ZW50OiBcIlxcZjQ5Y1wiOyB9XG4uaW9uLWlvcy1yZW1vdmU6YmVmb3JlIHsgY29udGVudDogXCJcXGYxZmNcIjsgfVxuLmlvbi1pb3MtcmVtb3ZlLWNpcmNsZTpiZWZvcmUgeyBjb250ZW50OiBcIlxcZjFmYlwiOyB9XG4uaW9uLWlvcy1yZW1vdmUtY2lyY2xlLW91dGxpbmU6YmVmb3JlIHsgY29udGVudDogXCJcXGYxZmFcIjsgfVxuLmlvbi1pb3MtcmVtb3ZlLW91dGxpbmU6YmVmb3JlIHsgY29udGVudDogXCJcXGYxZmNcIjsgfVxuLmlvbi1pb3MtcmVvcmRlcjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZjFmZFwiOyB9XG4uaW9uLWlvcy1yZW9yZGVyLW91dGxpbmU6YmVmb3JlIHsgY29udGVudDogXCJcXGYxZmRcIjsgfVxuLmlvbi1pb3MtcmVwZWF0OmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxmMWZlXCI7IH1cbi5pb24taW9zLXJlcGVhdC1vdXRsaW5lOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxmMWZlXCI7IH1cbi5pb24taW9zLXJlc2l6ZTpiZWZvcmUgeyBjb250ZW50OiBcIlxcZjFmZlwiOyB9XG4uaW9uLWlvcy1yZXNpemUtb3V0bGluZTpiZWZvcmUgeyBjb250ZW50OiBcIlxcZjFmZlwiOyB9XG4uaW9uLWlvcy1yZXN0YXVyYW50OmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxmMjAxXCI7IH1cbi5pb24taW9zLXJlc3RhdXJhbnQtb3V0bGluZTpiZWZvcmUgeyBjb250ZW50OiBcIlxcZjIwMFwiOyB9XG4uaW9uLWlvcy1yZXR1cm4tbGVmdDpiZWZvcmUgeyBjb250ZW50OiBcIlxcZjIwMlwiOyB9XG4uaW9uLWlvcy1yZXR1cm4tbGVmdC1vdXRsaW5lOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxmMjAyXCI7IH1cbi5pb24taW9zLXJldHVybi1yaWdodDpiZWZvcmUgeyBjb250ZW50OiBcIlxcZjIwM1wiOyB9XG4uaW9uLWlvcy1yZXR1cm4tcmlnaHQtb3V0bGluZTpiZWZvcmUgeyBjb250ZW50OiBcIlxcZjIwM1wiOyB9XG4uaW9uLWlvcy1yZXZlcnNlLWNhbWVyYTpiZWZvcmUgeyBjb250ZW50OiBcIlxcZjQ5ZlwiOyB9XG4uaW9uLWlvcy1yZXZlcnNlLWNhbWVyYS1vdXRsaW5lOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxmNDllXCI7IH1cbi5pb24taW9zLXJld2luZDpiZWZvcmUgeyBjb250ZW50OiBcIlxcZjRhMVwiOyB9XG4uaW9uLWlvcy1yZXdpbmQtb3V0bGluZTpiZWZvcmUgeyBjb250ZW50OiBcIlxcZjRhMFwiOyB9XG4uaW9uLWlvcy1yaWJib246YmVmb3JlIHsgY29udGVudDogXCJcXGYyMDVcIjsgfVxuLmlvbi1pb3MtcmliYm9uLW91dGxpbmU6YmVmb3JlIHsgY29udGVudDogXCJcXGYyMDRcIjsgfVxuLmlvbi1pb3Mtcm9zZTpiZWZvcmUgeyBjb250ZW50OiBcIlxcZjRhM1wiOyB9XG4uaW9uLWlvcy1yb3NlLW91dGxpbmU6YmVmb3JlIHsgY29udGVudDogXCJcXGY0YTJcIjsgfVxuLmlvbi1pb3Mtc2FkOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxmMjA3XCI7IH1cbi5pb24taW9zLXNhZC1vdXRsaW5lOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxmMjA2XCI7IH1cbi5pb24taW9zLXNjaG9vbDpiZWZvcmUgeyBjb250ZW50OiBcIlxcZjIwOVwiOyB9XG4uaW9uLWlvcy1zY2hvb2wtb3V0bGluZTpiZWZvcmUgeyBjb250ZW50OiBcIlxcZjIwOFwiOyB9XG4uaW9uLWlvcy1zZWFyY2g6YmVmb3JlIHsgY29udGVudDogXCJcXGY0YTVcIjsgfVxuLmlvbi1pb3Mtc2VhcmNoLW91dGxpbmU6YmVmb3JlIHsgY29udGVudDogXCJcXGYyMGFcIjsgfVxuLmlvbi1pb3Mtc2VuZDpiZWZvcmUgeyBjb250ZW50OiBcIlxcZjIwY1wiOyB9XG4uaW9uLWlvcy1zZW5kLW91dGxpbmU6YmVmb3JlIHsgY29udGVudDogXCJcXGYyMGJcIjsgfVxuLmlvbi1pb3Mtc2V0dGluZ3M6YmVmb3JlIHsgY29udGVudDogXCJcXGY0YTdcIjsgfVxuLmlvbi1pb3Mtc2V0dGluZ3Mtb3V0bGluZTpiZWZvcmUgeyBjb250ZW50OiBcIlxcZjIwZFwiOyB9XG4uaW9uLWlvcy1zaGFyZTpiZWZvcmUgeyBjb250ZW50OiBcIlxcZjIxMVwiOyB9XG4uaW9uLWlvcy1zaGFyZS1hbHQ6YmVmb3JlIHsgY29udGVudDogXCJcXGYyMGZcIjsgfVxuLmlvbi1pb3Mtc2hhcmUtYWx0LW91dGxpbmU6YmVmb3JlIHsgY29udGVudDogXCJcXGYyMGVcIjsgfVxuLmlvbi1pb3Mtc2hhcmUtb3V0bGluZTpiZWZvcmUgeyBjb250ZW50OiBcIlxcZjIxMFwiOyB9XG4uaW9uLWlvcy1zaGlydDpiZWZvcmUgeyBjb250ZW50OiBcIlxcZjIxM1wiOyB9XG4uaW9uLWlvcy1zaGlydC1vdXRsaW5lOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxmMjEyXCI7IH1cbi5pb24taW9zLXNodWZmbGU6YmVmb3JlIHsgY29udGVudDogXCJcXGY0YTlcIjsgfVxuLmlvbi1pb3Mtc2h1ZmZsZS1vdXRsaW5lOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxmNGE5XCI7IH1cbi5pb24taW9zLXNraXAtYmFja3dhcmQ6YmVmb3JlIHsgY29udGVudDogXCJcXGYyMTVcIjsgfVxuLmlvbi1pb3Mtc2tpcC1iYWNrd2FyZC1vdXRsaW5lOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxmMjE0XCI7IH1cbi5pb24taW9zLXNraXAtZm9yd2FyZDpiZWZvcmUgeyBjb250ZW50OiBcIlxcZjIxN1wiOyB9XG4uaW9uLWlvcy1za2lwLWZvcndhcmQtb3V0bGluZTpiZWZvcmUgeyBjb250ZW50OiBcIlxcZjIxNlwiOyB9XG4uaW9uLWlvcy1zbm93OmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxmMjE4XCI7IH1cbi5pb24taW9zLXNub3ctb3V0bGluZTpiZWZvcmUgeyBjb250ZW50OiBcIlxcZjIyY1wiOyB9XG4uaW9uLWlvcy1zcGVlZG9tZXRlcjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZjRiMFwiOyB9XG4uaW9uLWlvcy1zcGVlZG9tZXRlci1vdXRsaW5lOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxmNGFmXCI7IH1cbi5pb24taW9zLXNxdWFyZTpiZWZvcmUgeyBjb250ZW50OiBcIlxcZjIxYVwiOyB9XG4uaW9uLWlvcy1zcXVhcmUtb3V0bGluZTpiZWZvcmUgeyBjb250ZW50OiBcIlxcZjIxOVwiOyB9XG4uaW9uLWlvcy1zdGFyOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxmNGIzXCI7IH1cbi5pb24taW9zLXN0YXItaGFsZjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZjRiMVwiOyB9XG4uaW9uLWlvcy1zdGFyLWhhbGYtb3V0bGluZTpiZWZvcmUgeyBjb250ZW50OiBcIlxcZjRiMVwiOyB9XG4uaW9uLWlvcy1zdGFyLW91dGxpbmU6YmVmb3JlIHsgY29udGVudDogXCJcXGY0YjJcIjsgfVxuLmlvbi1pb3Mtc3RhdHM6YmVmb3JlIHsgY29udGVudDogXCJcXGYyMWNcIjsgfVxuLmlvbi1pb3Mtc3RhdHMtb3V0bGluZTpiZWZvcmUgeyBjb250ZW50OiBcIlxcZjIxYlwiOyB9XG4uaW9uLWlvcy1zdG9wd2F0Y2g6YmVmb3JlIHsgY29udGVudDogXCJcXGY0YjVcIjsgfVxuLmlvbi1pb3Mtc3RvcHdhdGNoLW91dGxpbmU6YmVmb3JlIHsgY29udGVudDogXCJcXGY0YjRcIjsgfVxuLmlvbi1pb3Mtc3Vid2F5OmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxmMjFlXCI7IH1cbi5pb24taW9zLXN1YndheS1vdXRsaW5lOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxmMjFkXCI7IH1cbi5pb24taW9zLXN1bm55OmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxmNGI3XCI7IH1cbi5pb24taW9zLXN1bm55LW91dGxpbmU6YmVmb3JlIHsgY29udGVudDogXCJcXGY0YjZcIjsgfVxuLmlvbi1pb3Mtc3dhcDpiZWZvcmUgeyBjb250ZW50OiBcIlxcZjIxZlwiOyB9XG4uaW9uLWlvcy1zd2FwLW91dGxpbmU6YmVmb3JlIHsgY29udGVudDogXCJcXGYyMWZcIjsgfVxuLmlvbi1pb3Mtc3dpdGNoOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxmMjIxXCI7IH1cbi5pb24taW9zLXN3aXRjaC1vdXRsaW5lOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxmMjIwXCI7IH1cbi5pb24taW9zLXN5bmM6YmVmb3JlIHsgY29udGVudDogXCJcXGYyMjJcIjsgfVxuLmlvbi1pb3Mtc3luYy1vdXRsaW5lOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxmMjIyXCI7IH1cbi5pb24taW9zLXRhYmxldC1sYW5kc2NhcGU6YmVmb3JlIHsgY29udGVudDogXCJcXGYyMjNcIjsgfVxuLmlvbi1pb3MtdGFibGV0LWxhbmRzY2FwZS1vdXRsaW5lOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxmMjIzXCI7IH1cbi5pb24taW9zLXRhYmxldC1wb3J0cmFpdDpiZWZvcmUgeyBjb250ZW50OiBcIlxcZjI0ZVwiOyB9XG4uaW9uLWlvcy10YWJsZXQtcG9ydHJhaXQtb3V0bGluZTpiZWZvcmUgeyBjb250ZW50OiBcIlxcZjI0ZVwiOyB9XG4uaW9uLWlvcy10ZW5uaXNiYWxsOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxmNGJiXCI7IH1cbi5pb24taW9zLXRlbm5pc2JhbGwtb3V0bGluZTpiZWZvcmUgeyBjb250ZW50OiBcIlxcZjRiYVwiOyB9XG4uaW9uLWlvcy10ZXh0OmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxmMjUwXCI7IH1cbi5pb24taW9zLXRleHQtb3V0bGluZTpiZWZvcmUgeyBjb250ZW50OiBcIlxcZjI0ZlwiOyB9XG4uaW9uLWlvcy10aGVybW9tZXRlcjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZjI1MlwiOyB9XG4uaW9uLWlvcy10aGVybW9tZXRlci1vdXRsaW5lOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxmMjUxXCI7IH1cbi5pb24taW9zLXRodW1icy1kb3duOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxmMjU0XCI7IH1cbi5pb24taW9zLXRodW1icy1kb3duLW91dGxpbmU6YmVmb3JlIHsgY29udGVudDogXCJcXGYyNTNcIjsgfVxuLmlvbi1pb3MtdGh1bWJzLXVwOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxmMjU2XCI7IH1cbi5pb24taW9zLXRodW1icy11cC1vdXRsaW5lOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxmMjU1XCI7IH1cbi5pb24taW9zLXRodW5kZXJzdG9ybTpiZWZvcmUgeyBjb250ZW50OiBcIlxcZjRiZFwiOyB9XG4uaW9uLWlvcy10aHVuZGVyc3Rvcm0tb3V0bGluZTpiZWZvcmUgeyBjb250ZW50OiBcIlxcZjRiY1wiOyB9XG4uaW9uLWlvcy10aW1lOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxmNGJmXCI7IH1cbi5pb24taW9zLXRpbWUtb3V0bGluZTpiZWZvcmUgeyBjb250ZW50OiBcIlxcZjRiZVwiOyB9XG4uaW9uLWlvcy10aW1lcjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZjRjMVwiOyB9XG4uaW9uLWlvcy10aW1lci1vdXRsaW5lOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxmNGMwXCI7IH1cbi5pb24taW9zLXRyYWluOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxmMjU4XCI7IH1cbi5pb24taW9zLXRyYWluLW91dGxpbmU6YmVmb3JlIHsgY29udGVudDogXCJcXGYyNTdcIjsgfVxuLmlvbi1pb3MtdHJhbnNnZW5kZXI6YmVmb3JlIHsgY29udGVudDogXCJcXGYyNTlcIjsgfVxuLmlvbi1pb3MtdHJhbnNnZW5kZXItb3V0bGluZTpiZWZvcmUgeyBjb250ZW50OiBcIlxcZjI1OVwiOyB9XG4uaW9uLWlvcy10cmFzaDpiZWZvcmUgeyBjb250ZW50OiBcIlxcZjRjNVwiOyB9XG4uaW9uLWlvcy10cmFzaC1vdXRsaW5lOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxmNGM0XCI7IH1cbi5pb24taW9zLXRyZW5kaW5nLWRvd246YmVmb3JlIHsgY29udGVudDogXCJcXGYyNWFcIjsgfVxuLmlvbi1pb3MtdHJlbmRpbmctZG93bi1vdXRsaW5lOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxmMjVhXCI7IH1cbi5pb24taW9zLXRyZW5kaW5nLXVwOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxmMjViXCI7IH1cbi5pb24taW9zLXRyZW5kaW5nLXVwLW91dGxpbmU6YmVmb3JlIHsgY29udGVudDogXCJcXGYyNWJcIjsgfVxuLmlvbi1pb3MtdHJvcGh5OmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxmMjVkXCI7IH1cbi5pb24taW9zLXRyb3BoeS1vdXRsaW5lOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxmMjVjXCI7IH1cbi5pb24taW9zLXVtYnJlbGxhOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxmMjVmXCI7IH1cbi5pb24taW9zLXVtYnJlbGxhLW91dGxpbmU6YmVmb3JlIHsgY29udGVudDogXCJcXGYyNWVcIjsgfVxuLmlvbi1pb3MtdW5kbzpiZWZvcmUgeyBjb250ZW50OiBcIlxcZjRjN1wiOyB9XG4uaW9uLWlvcy11bmRvLW91dGxpbmU6YmVmb3JlIHsgY29udGVudDogXCJcXGY0YzZcIjsgfVxuLmlvbi1pb3MtdW5sb2NrOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxmMjYxXCI7IH1cbi5pb24taW9zLXVubG9jay1vdXRsaW5lOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxmMjYwXCI7IH1cbi5pb24taW9zLXZpZGVvY2FtOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxmNGNkXCI7IH1cbi5pb24taW9zLXZpZGVvY2FtLW91dGxpbmU6YmVmb3JlIHsgY29udGVudDogXCJcXGY0Y2NcIjsgfVxuLmlvbi1pb3Mtdm9sdW1lLWRvd246YmVmb3JlIHsgY29udGVudDogXCJcXGYyNjJcIjsgfVxuLmlvbi1pb3Mtdm9sdW1lLWRvd24tb3V0bGluZTpiZWZvcmUgeyBjb250ZW50OiBcIlxcZjI2MlwiOyB9XG4uaW9uLWlvcy12b2x1bWUtbXV0ZTpiZWZvcmUgeyBjb250ZW50OiBcIlxcZjI2M1wiOyB9XG4uaW9uLWlvcy12b2x1bWUtbXV0ZS1vdXRsaW5lOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxmMjYzXCI7IH1cbi5pb24taW9zLXZvbHVtZS1vZmY6YmVmb3JlIHsgY29udGVudDogXCJcXGYyNjRcIjsgfVxuLmlvbi1pb3Mtdm9sdW1lLW9mZi1vdXRsaW5lOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxmMjY0XCI7IH1cbi5pb24taW9zLXZvbHVtZS11cDpiZWZvcmUgeyBjb250ZW50OiBcIlxcZjI2NVwiOyB9XG4uaW9uLWlvcy12b2x1bWUtdXAtb3V0bGluZTpiZWZvcmUgeyBjb250ZW50OiBcIlxcZjI2NVwiOyB9XG4uaW9uLWlvcy13YWxrOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxmMjY2XCI7IH1cbi5pb24taW9zLXdhbGstb3V0bGluZTpiZWZvcmUgeyBjb250ZW50OiBcIlxcZjI2NlwiOyB9XG4uaW9uLWlvcy13YXJuaW5nOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxmMjY4XCI7IH1cbi5pb24taW9zLXdhcm5pbmctb3V0bGluZTpiZWZvcmUgeyBjb250ZW50OiBcIlxcZjI2N1wiOyB9XG4uaW9uLWlvcy13YXRjaDpiZWZvcmUgeyBjb250ZW50OiBcIlxcZjI2OVwiOyB9XG4uaW9uLWlvcy13YXRjaC1vdXRsaW5lOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxmMjY5XCI7IH1cbi5pb24taW9zLXdhdGVyOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxmMjZiXCI7IH1cbi5pb24taW9zLXdhdGVyLW91dGxpbmU6YmVmb3JlIHsgY29udGVudDogXCJcXGYyNmFcIjsgfVxuLmlvbi1pb3Mtd2lmaTpiZWZvcmUgeyBjb250ZW50OiBcIlxcZjI2ZFwiOyB9XG4uaW9uLWlvcy13aWZpLW91dGxpbmU6YmVmb3JlIHsgY29udGVudDogXCJcXGYyNmNcIjsgfVxuLmlvbi1pb3Mtd2luZTpiZWZvcmUgeyBjb250ZW50OiBcIlxcZjI2ZlwiOyB9XG4uaW9uLWlvcy13aW5lLW91dGxpbmU6YmVmb3JlIHsgY29udGVudDogXCJcXGYyNmVcIjsgfVxuLmlvbi1pb3Mtd29tYW46YmVmb3JlIHsgY29udGVudDogXCJcXGYyNzFcIjsgfVxuLmlvbi1pb3Mtd29tYW4tb3V0bGluZTpiZWZvcmUgeyBjb250ZW50OiBcIlxcZjI3MFwiOyB9XG4uaW9uLWxvZ28tYW5kcm9pZDpiZWZvcmUgeyBjb250ZW50OiBcIlxcZjIyNVwiOyB9XG4uaW9uLWxvZ28tYW5ndWxhcjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZjIyN1wiOyB9XG4uaW9uLWxvZ28tYXBwbGU6YmVmb3JlIHsgY29udGVudDogXCJcXGYyMjlcIjsgfVxuLmlvbi1sb2dvLWJpdGNvaW46YmVmb3JlIHsgY29udGVudDogXCJcXGYyMmJcIjsgfVxuLmlvbi1sb2dvLWJ1ZmZlcjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZjIyZFwiOyB9XG4uaW9uLWxvZ28tY2hyb21lOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxmMjJmXCI7IH1cbi5pb24tbG9nby1jb2RlcGVuOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxmMjMwXCI7IH1cbi5pb24tbG9nby1jc3MzOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxmMjMxXCI7IH1cbi5pb24tbG9nby1kZXNpZ25lcm5ld3M6YmVmb3JlIHsgY29udGVudDogXCJcXGYyMzJcIjsgfVxuLmlvbi1sb2dvLWRyaWJiYmxlOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxmMjMzXCI7IH1cbi5pb24tbG9nby1kcm9wYm94OmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxmMjM0XCI7IH1cbi5pb24tbG9nby1ldXJvOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxmMjM1XCI7IH1cbi5pb24tbG9nby1mYWNlYm9vazpiZWZvcmUgeyBjb250ZW50OiBcIlxcZjIzNlwiOyB9XG4uaW9uLWxvZ28tZm91cnNxdWFyZTpiZWZvcmUgeyBjb250ZW50OiBcIlxcZjIzN1wiOyB9XG4uaW9uLWxvZ28tZnJlZWJzZC1kZXZpbDpiZWZvcmUgeyBjb250ZW50OiBcIlxcZjIzOFwiOyB9XG4uaW9uLWxvZ28tZ2l0aHViOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxmMjM5XCI7IH1cbi5pb24tbG9nby1nb29nbGU6YmVmb3JlIHsgY29udGVudDogXCJcXGYyM2FcIjsgfVxuLmlvbi1sb2dvLWdvb2dsZXBsdXM6YmVmb3JlIHsgY29udGVudDogXCJcXGYyM2JcIjsgfVxuLmlvbi1sb2dvLWhhY2tlcm5ld3M6YmVmb3JlIHsgY29udGVudDogXCJcXGYyM2NcIjsgfVxuLmlvbi1sb2dvLWh0bWw1OmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxmMjNkXCI7IH1cbi5pb24tbG9nby1pbnN0YWdyYW06YmVmb3JlIHsgY29udGVudDogXCJcXGYyM2VcIjsgfVxuLmlvbi1sb2dvLWphdmFzY3JpcHQ6YmVmb3JlIHsgY29udGVudDogXCJcXGYyM2ZcIjsgfVxuLmlvbi1sb2dvLWxpbmtlZGluOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxmMjQwXCI7IH1cbi5pb24tbG9nby1tYXJrZG93bjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZjI0MVwiOyB9XG4uaW9uLWxvZ28tbm9kZWpzOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxmMjQyXCI7IH1cbi5pb24tbG9nby1vY3RvY2F0OmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxmMjQzXCI7IH1cbi5pb24tbG9nby1waW50ZXJlc3Q6YmVmb3JlIHsgY29udGVudDogXCJcXGYyNDRcIjsgfVxuLmlvbi1sb2dvLXBsYXlzdGF0aW9uOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxmMjQ1XCI7IH1cbi5pb24tbG9nby1weXRob246YmVmb3JlIHsgY29udGVudDogXCJcXGYyNDZcIjsgfVxuLmlvbi1sb2dvLXJlZGRpdDpiZWZvcmUgeyBjb250ZW50OiBcIlxcZjI0N1wiOyB9XG4uaW9uLWxvZ28tcnNzOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxmMjQ4XCI7IH1cbi5pb24tbG9nby1zYXNzOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxmMjQ5XCI7IH1cbi5pb24tbG9nby1za3lwZTpiZWZvcmUgeyBjb250ZW50OiBcIlxcZjI0YVwiOyB9XG4uaW9uLWxvZ28tc25hcGNoYXQ6YmVmb3JlIHsgY29udGVudDogXCJcXGYyNGJcIjsgfVxuLmlvbi1sb2dvLXN0ZWFtOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxmMjRjXCI7IH1cbi5pb24tbG9nby10dW1ibHI6YmVmb3JlIHsgY29udGVudDogXCJcXGYyNGRcIjsgfVxuLmlvbi1sb2dvLXR1eDpiZWZvcmUgeyBjb250ZW50OiBcIlxcZjJhZVwiOyB9XG4uaW9uLWxvZ28tdHdpdGNoOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxmMmFmXCI7IH1cbi5pb24tbG9nby10d2l0dGVyOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxmMmIwXCI7IH1cbi5pb24tbG9nby11c2Q6YmVmb3JlIHsgY29udGVudDogXCJcXGYyYjFcIjsgfVxuLmlvbi1sb2dvLXZpbWVvOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxmMmM0XCI7IH1cbi5pb24tbG9nby13aGF0c2FwcDpiZWZvcmUgeyBjb250ZW50OiBcIlxcZjJjNVwiOyB9XG4uaW9uLWxvZ28td2luZG93czpiZWZvcmUgeyBjb250ZW50OiBcIlxcZjMyZlwiOyB9XG4uaW9uLWxvZ28td29yZHByZXNzOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxmMzMwXCI7IH1cbi5pb24tbG9nby14Ym94OmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxmMzRjXCI7IH1cbi5pb24tbG9nby15YWhvbzpiZWZvcmUgeyBjb250ZW50OiBcIlxcZjM0ZFwiOyB9XG4uaW9uLWxvZ28teWVuOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxmMzRlXCI7IH1cbi5pb24tbG9nby15b3V0dWJlOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxmMzRmXCI7IH1cbi5pb24tbWQtYWRkOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxmMjczXCI7IH1cbi5pb24tbWQtYWRkLWNpcmNsZTpiZWZvcmUgeyBjb250ZW50OiBcIlxcZjI3MlwiOyB9XG4uaW9uLW1kLWFsYXJtOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxmMjc0XCI7IH1cbi5pb24tbWQtYWxidW1zOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxmMjc1XCI7IH1cbi5pb24tbWQtYWxlcnQ6YmVmb3JlIHsgY29udGVudDogXCJcXGYyNzZcIjsgfVxuLmlvbi1tZC1hbWVyaWNhbi1mb290YmFsbDpiZWZvcmUgeyBjb250ZW50OiBcIlxcZjI3N1wiOyB9XG4uaW9uLW1kLWFuYWx5dGljczpiZWZvcmUgeyBjb250ZW50OiBcIlxcZjI3OFwiOyB9XG4uaW9uLW1kLWFwZXJ0dXJlOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxmMjc5XCI7IH1cbi5pb24tbWQtYXBwczpiZWZvcmUgeyBjb250ZW50OiBcIlxcZjI3YVwiOyB9XG4uaW9uLW1kLWFwcHN0b3JlOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxmMjdiXCI7IH1cbi5pb24tbWQtYXJjaGl2ZTpiZWZvcmUgeyBjb250ZW50OiBcIlxcZjI3Y1wiOyB9XG4uaW9uLW1kLWFycm93LWJhY2s6YmVmb3JlIHsgY29udGVudDogXCJcXGYyN2RcIjsgfVxuLmlvbi1tZC1hcnJvdy1kb3duOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxmMjdlXCI7IH1cbi5pb24tbWQtYXJyb3ctZHJvcGRvd246YmVmb3JlIHsgY29udGVudDogXCJcXGYyODBcIjsgfVxuLmlvbi1tZC1hcnJvdy1kcm9wZG93bi1jaXJjbGU6YmVmb3JlIHsgY29udGVudDogXCJcXGYyN2ZcIjsgfVxuLmlvbi1tZC1hcnJvdy1kcm9wbGVmdDpiZWZvcmUgeyBjb250ZW50OiBcIlxcZjI4MlwiOyB9XG4uaW9uLW1kLWFycm93LWRyb3BsZWZ0LWNpcmNsZTpiZWZvcmUgeyBjb250ZW50OiBcIlxcZjI4MVwiOyB9XG4uaW9uLW1kLWFycm93LWRyb3ByaWdodDpiZWZvcmUgeyBjb250ZW50OiBcIlxcZjI4NFwiOyB9XG4uaW9uLW1kLWFycm93LWRyb3ByaWdodC1jaXJjbGU6YmVmb3JlIHsgY29udGVudDogXCJcXGYyODNcIjsgfVxuLmlvbi1tZC1hcnJvdy1kcm9wdXA6YmVmb3JlIHsgY29udGVudDogXCJcXGYyODZcIjsgfVxuLmlvbi1tZC1hcnJvdy1kcm9wdXAtY2lyY2xlOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxmMjg1XCI7IH1cbi5pb24tbWQtYXJyb3ctZm9yd2FyZDpiZWZvcmUgeyBjb250ZW50OiBcIlxcZjI4N1wiOyB9XG4uaW9uLW1kLWFycm93LXJvdW5kLWJhY2s6YmVmb3JlIHsgY29udGVudDogXCJcXGYyODhcIjsgfVxuLmlvbi1tZC1hcnJvdy1yb3VuZC1kb3duOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxmMjg5XCI7IH1cbi5pb24tbWQtYXJyb3ctcm91bmQtZm9yd2FyZDpiZWZvcmUgeyBjb250ZW50OiBcIlxcZjI4YVwiOyB9XG4uaW9uLW1kLWFycm93LXJvdW5kLXVwOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxmMjhiXCI7IH1cbi5pb24tbWQtYXJyb3ctdXA6YmVmb3JlIHsgY29udGVudDogXCJcXGYyOGNcIjsgfVxuLmlvbi1tZC1hdDpiZWZvcmUgeyBjb250ZW50OiBcIlxcZjI4ZFwiOyB9XG4uaW9uLW1kLWF0dGFjaDpiZWZvcmUgeyBjb250ZW50OiBcIlxcZjI4ZVwiOyB9XG4uaW9uLW1kLWJhY2tzcGFjZTpiZWZvcmUgeyBjb250ZW50OiBcIlxcZjI4ZlwiOyB9XG4uaW9uLW1kLWJhcmNvZGU6YmVmb3JlIHsgY29udGVudDogXCJcXGYyOTBcIjsgfVxuLmlvbi1tZC1iYXNlYmFsbDpiZWZvcmUgeyBjb250ZW50OiBcIlxcZjI5MVwiOyB9XG4uaW9uLW1kLWJhc2tldDpiZWZvcmUgeyBjb250ZW50OiBcIlxcZjI5MlwiOyB9XG4uaW9uLW1kLWJhc2tldGJhbGw6YmVmb3JlIHsgY29udGVudDogXCJcXGYyOTNcIjsgfVxuLmlvbi1tZC1iYXR0ZXJ5LWNoYXJnaW5nOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxmMjk0XCI7IH1cbi5pb24tbWQtYmF0dGVyeS1kZWFkOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxmMjk1XCI7IH1cbi5pb24tbWQtYmF0dGVyeS1mdWxsOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxmMjk2XCI7IH1cbi5pb24tbWQtYmVha2VyOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxmMjk3XCI7IH1cbi5pb24tbWQtYmVlcjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZjI5OFwiOyB9XG4uaW9uLW1kLWJpY3ljbGU6YmVmb3JlIHsgY29udGVudDogXCJcXGYyOTlcIjsgfVxuLmlvbi1tZC1ibHVldG9vdGg6YmVmb3JlIHsgY29udGVudDogXCJcXGYyOWFcIjsgfVxuLmlvbi1tZC1ib2F0OmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxmMjliXCI7IH1cbi5pb24tbWQtYm9keTpiZWZvcmUgeyBjb250ZW50OiBcIlxcZjI5Y1wiOyB9XG4uaW9uLW1kLWJvbmZpcmU6YmVmb3JlIHsgY29udGVudDogXCJcXGYyOWRcIjsgfVxuLmlvbi1tZC1ib29rOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxmMjllXCI7IH1cbi5pb24tbWQtYm9va21hcms6YmVmb3JlIHsgY29udGVudDogXCJcXGYyOWZcIjsgfVxuLmlvbi1tZC1ib29rbWFya3M6YmVmb3JlIHsgY29udGVudDogXCJcXGYyYTBcIjsgfVxuLmlvbi1tZC1ib3d0aWU6YmVmb3JlIHsgY29udGVudDogXCJcXGYyYTFcIjsgfVxuLmlvbi1tZC1icmllZmNhc2U6YmVmb3JlIHsgY29udGVudDogXCJcXGYyYTJcIjsgfVxuLmlvbi1tZC1icm93c2VyczpiZWZvcmUgeyBjb250ZW50OiBcIlxcZjJhM1wiOyB9XG4uaW9uLW1kLWJydXNoOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxmMmE0XCI7IH1cbi5pb24tbWQtYnVnOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxmMmE1XCI7IH1cbi5pb24tbWQtYnVpbGQ6YmVmb3JlIHsgY29udGVudDogXCJcXGYyYTZcIjsgfVxuLmlvbi1tZC1idWxiOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxmMmE3XCI7IH1cbi5pb24tbWQtYnVzOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxmMmE4XCI7IH1cbi5pb24tbWQtY2FmZTpiZWZvcmUgeyBjb250ZW50OiBcIlxcZjJhOVwiOyB9XG4uaW9uLW1kLWNhbGN1bGF0b3I6YmVmb3JlIHsgY29udGVudDogXCJcXGYyYWFcIjsgfVxuLmlvbi1tZC1jYWxlbmRhcjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZjJhYlwiOyB9XG4uaW9uLW1kLWNhbGw6YmVmb3JlIHsgY29udGVudDogXCJcXGYyYWNcIjsgfVxuLmlvbi1tZC1jYW1lcmE6YmVmb3JlIHsgY29udGVudDogXCJcXGYyYWRcIjsgfVxuLmlvbi1tZC1jYXI6YmVmb3JlIHsgY29udGVudDogXCJcXGYyYjJcIjsgfVxuLmlvbi1tZC1jYXJkOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxmMmIzXCI7IH1cbi5pb24tbWQtY2FydDpiZWZvcmUgeyBjb250ZW50OiBcIlxcZjJiNFwiOyB9XG4uaW9uLW1kLWNhc2g6YmVmb3JlIHsgY29udGVudDogXCJcXGYyYjVcIjsgfVxuLmlvbi1tZC1jaGF0Ym94ZXM6YmVmb3JlIHsgY29udGVudDogXCJcXGYyYjZcIjsgfVxuLmlvbi1tZC1jaGF0YnViYmxlczpiZWZvcmUgeyBjb250ZW50OiBcIlxcZjJiN1wiOyB9XG4uaW9uLW1kLWNoZWNrYm94OmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxmMmI5XCI7IH1cbi5pb24tbWQtY2hlY2tib3gtb3V0bGluZTpiZWZvcmUgeyBjb250ZW50OiBcIlxcZjJiOFwiOyB9XG4uaW9uLW1kLWNoZWNrbWFyazpiZWZvcmUgeyBjb250ZW50OiBcIlxcZjJiY1wiOyB9XG4uaW9uLW1kLWNoZWNrbWFyay1jaXJjbGU6YmVmb3JlIHsgY29udGVudDogXCJcXGYyYmJcIjsgfVxuLmlvbi1tZC1jaGVja21hcmstY2lyY2xlLW91dGxpbmU6YmVmb3JlIHsgY29udGVudDogXCJcXGYyYmFcIjsgfVxuLmlvbi1tZC1jbGlwYm9hcmQ6YmVmb3JlIHsgY29udGVudDogXCJcXGYyYmRcIjsgfVxuLmlvbi1tZC1jbG9jazpiZWZvcmUgeyBjb250ZW50OiBcIlxcZjJiZVwiOyB9XG4uaW9uLW1kLWNsb3NlOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxmMmMwXCI7IH1cbi5pb24tbWQtY2xvc2UtY2lyY2xlOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxmMmJmXCI7IH1cbi5pb24tbWQtY2xvc2VkLWNhcHRpb25pbmc6YmVmb3JlIHsgY29udGVudDogXCJcXGYyYzFcIjsgfVxuLmlvbi1tZC1jbG91ZDpiZWZvcmUgeyBjb250ZW50OiBcIlxcZjJjOVwiOyB9XG4uaW9uLW1kLWNsb3VkLWNpcmNsZTpiZWZvcmUgeyBjb250ZW50OiBcIlxcZjJjMlwiOyB9XG4uaW9uLW1kLWNsb3VkLWRvbmU6YmVmb3JlIHsgY29udGVudDogXCJcXGYyYzNcIjsgfVxuLmlvbi1tZC1jbG91ZC1kb3dubG9hZDpiZWZvcmUgeyBjb250ZW50OiBcIlxcZjJjNlwiOyB9XG4uaW9uLW1kLWNsb3VkLW91dGxpbmU6YmVmb3JlIHsgY29udGVudDogXCJcXGYyYzdcIjsgfVxuLmlvbi1tZC1jbG91ZC11cGxvYWQ6YmVmb3JlIHsgY29udGVudDogXCJcXGYyYzhcIjsgfVxuLmlvbi1tZC1jbG91ZHk6YmVmb3JlIHsgY29udGVudDogXCJcXGYyY2JcIjsgfVxuLmlvbi1tZC1jbG91ZHktbmlnaHQ6YmVmb3JlIHsgY29udGVudDogXCJcXGYyY2FcIjsgfVxuLmlvbi1tZC1jb2RlOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxmMmNlXCI7IH1cbi5pb24tbWQtY29kZS1kb3dubG9hZDpiZWZvcmUgeyBjb250ZW50OiBcIlxcZjJjY1wiOyB9XG4uaW9uLW1kLWNvZGUtd29ya2luZzpiZWZvcmUgeyBjb250ZW50OiBcIlxcZjJjZFwiOyB9XG4uaW9uLW1kLWNvZzpiZWZvcmUgeyBjb250ZW50OiBcIlxcZjJjZlwiOyB9XG4uaW9uLW1kLWNvbG9yLWZpbGw6YmVmb3JlIHsgY29udGVudDogXCJcXGYyZDBcIjsgfVxuLmlvbi1tZC1jb2xvci1maWx0ZXI6YmVmb3JlIHsgY29udGVudDogXCJcXGYyZDFcIjsgfVxuLmlvbi1tZC1jb2xvci1wYWxldHRlOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxmMmQyXCI7IH1cbi5pb24tbWQtY29sb3Itd2FuZDpiZWZvcmUgeyBjb250ZW50OiBcIlxcZjJkM1wiOyB9XG4uaW9uLW1kLWNvbXBhc3M6YmVmb3JlIHsgY29udGVudDogXCJcXGYyZDRcIjsgfVxuLmlvbi1tZC1jb25zdHJ1Y3Q6YmVmb3JlIHsgY29udGVudDogXCJcXGYyZDVcIjsgfVxuLmlvbi1tZC1jb250YWN0OmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxmMmQ2XCI7IH1cbi5pb24tbWQtY29udGFjdHM6YmVmb3JlIHsgY29udGVudDogXCJcXGYyZDdcIjsgfVxuLmlvbi1tZC1jb250cmFjdDpiZWZvcmUgeyBjb250ZW50OiBcIlxcZjJkOFwiOyB9XG4uaW9uLW1kLWNvbnRyYXN0OmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxmMmQ5XCI7IH1cbi5pb24tbWQtY29weTpiZWZvcmUgeyBjb250ZW50OiBcIlxcZjJkYVwiOyB9XG4uaW9uLW1kLWNyZWF0ZTpiZWZvcmUgeyBjb250ZW50OiBcIlxcZjJkYlwiOyB9XG4uaW9uLW1kLWNyb3A6YmVmb3JlIHsgY29udGVudDogXCJcXGYyZGNcIjsgfVxuLmlvbi1tZC1jdWJlOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxmMmRkXCI7IH1cbi5pb24tbWQtY3V0OmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxmMmRlXCI7IH1cbi5pb24tbWQtZGVza3RvcDpiZWZvcmUgeyBjb250ZW50OiBcIlxcZjJkZlwiOyB9XG4uaW9uLW1kLWRpc2M6YmVmb3JlIHsgY29udGVudDogXCJcXGYyZTBcIjsgfVxuLmlvbi1tZC1kb2N1bWVudDpiZWZvcmUgeyBjb250ZW50OiBcIlxcZjJlMVwiOyB9XG4uaW9uLW1kLWRvbmUtYWxsOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxmMmUyXCI7IH1cbi5pb24tbWQtZG93bmxvYWQ6YmVmb3JlIHsgY29udGVudDogXCJcXGYyZTNcIjsgfVxuLmlvbi1tZC1lYXNlbDpiZWZvcmUgeyBjb250ZW50OiBcIlxcZjJlNFwiOyB9XG4uaW9uLW1kLWVnZzpiZWZvcmUgeyBjb250ZW50OiBcIlxcZjJlNVwiOyB9XG4uaW9uLW1kLWV4aXQ6YmVmb3JlIHsgY29udGVudDogXCJcXGYyZTZcIjsgfVxuLmlvbi1tZC1leHBhbmQ6YmVmb3JlIHsgY29udGVudDogXCJcXGYyZTdcIjsgfVxuLmlvbi1tZC1leWU6YmVmb3JlIHsgY29udGVudDogXCJcXGYyZTlcIjsgfVxuLmlvbi1tZC1leWUtb2ZmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxmMmU4XCI7IH1cbi5pb24tbWQtZmFzdGZvcndhcmQ6YmVmb3JlIHsgY29udGVudDogXCJcXGYyZWFcIjsgfVxuLmlvbi1tZC1mZW1hbGU6YmVmb3JlIHsgY29udGVudDogXCJcXGYyZWJcIjsgfVxuLmlvbi1tZC1maWxpbmc6YmVmb3JlIHsgY29udGVudDogXCJcXGYyZWNcIjsgfVxuLmlvbi1tZC1maWxtOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxmMmVkXCI7IH1cbi5pb24tbWQtZmluZ2VyLXByaW50OmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxmMmVlXCI7IH1cbi5pb24tbWQtZmxhZzpiZWZvcmUgeyBjb250ZW50OiBcIlxcZjJlZlwiOyB9XG4uaW9uLW1kLWZsYW1lOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxmMmYwXCI7IH1cbi5pb24tbWQtZmxhc2g6YmVmb3JlIHsgY29udGVudDogXCJcXGYyZjFcIjsgfVxuLmlvbi1tZC1mbGFzazpiZWZvcmUgeyBjb250ZW50OiBcIlxcZjJmMlwiOyB9XG4uaW9uLW1kLWZsb3dlcjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZjJmM1wiOyB9XG4uaW9uLW1kLWZvbGRlcjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZjJmNVwiOyB9XG4uaW9uLW1kLWZvbGRlci1vcGVuOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxmMmY0XCI7IH1cbi5pb24tbWQtZm9vdGJhbGw6YmVmb3JlIHsgY29udGVudDogXCJcXGYyZjZcIjsgfVxuLmlvbi1tZC1mdW5uZWw6YmVmb3JlIHsgY29udGVudDogXCJcXGYyZjdcIjsgfVxuLmlvbi1tZC1nYW1lLWNvbnRyb2xsZXItYTpiZWZvcmUgeyBjb250ZW50OiBcIlxcZjJmOFwiOyB9XG4uaW9uLW1kLWdhbWUtY29udHJvbGxlci1iOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxmMmY5XCI7IH1cbi5pb24tbWQtZ2l0LWJyYW5jaDpiZWZvcmUgeyBjb250ZW50OiBcIlxcZjJmYVwiOyB9XG4uaW9uLW1kLWdpdC1jb21taXQ6YmVmb3JlIHsgY29udGVudDogXCJcXGYyZmJcIjsgfVxuLmlvbi1tZC1naXQtY29tcGFyZTpiZWZvcmUgeyBjb250ZW50OiBcIlxcZjJmY1wiOyB9XG4uaW9uLW1kLWdpdC1tZXJnZTpiZWZvcmUgeyBjb250ZW50OiBcIlxcZjJmZFwiOyB9XG4uaW9uLW1kLWdpdC1uZXR3b3JrOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxmMmZlXCI7IH1cbi5pb24tbWQtZ2l0LXB1bGwtcmVxdWVzdDpiZWZvcmUgeyBjb250ZW50OiBcIlxcZjJmZlwiOyB9XG4uaW9uLW1kLWdsYXNzZXM6YmVmb3JlIHsgY29udGVudDogXCJcXGYzMDBcIjsgfVxuLmlvbi1tZC1nbG9iZTpiZWZvcmUgeyBjb250ZW50OiBcIlxcZjMwMVwiOyB9XG4uaW9uLW1kLWdyaWQ6YmVmb3JlIHsgY29udGVudDogXCJcXGYzMDJcIjsgfVxuLmlvbi1tZC1oYW1tZXI6YmVmb3JlIHsgY29udGVudDogXCJcXGYzMDNcIjsgfVxuLmlvbi1tZC1oYW5kOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxmMzA0XCI7IH1cbi5pb24tbWQtaGFwcHk6YmVmb3JlIHsgY29udGVudDogXCJcXGYzMDVcIjsgfVxuLmlvbi1tZC1oZWFkc2V0OmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxmMzA2XCI7IH1cbi5pb24tbWQtaGVhcnQ6YmVmb3JlIHsgY29udGVudDogXCJcXGYzMDhcIjsgfVxuLmlvbi1tZC1oZWFydC1vdXRsaW5lOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxmMzA3XCI7IH1cbi5pb24tbWQtaGVscDpiZWZvcmUgeyBjb250ZW50OiBcIlxcZjMwYlwiOyB9XG4uaW9uLW1kLWhlbHAtYnVveTpiZWZvcmUgeyBjb250ZW50OiBcIlxcZjMwOVwiOyB9XG4uaW9uLW1kLWhlbHAtY2lyY2xlOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxmMzBhXCI7IH1cbi5pb24tbWQtaG9tZTpiZWZvcmUgeyBjb250ZW50OiBcIlxcZjMwY1wiOyB9XG4uaW9uLW1kLWljZS1jcmVhbTpiZWZvcmUgeyBjb250ZW50OiBcIlxcZjMwZFwiOyB9XG4uaW9uLW1kLWltYWdlOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxmMzBlXCI7IH1cbi5pb24tbWQtaW1hZ2VzOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxmMzBmXCI7IH1cbi5pb24tbWQtaW5maW5pdGU6YmVmb3JlIHsgY29udGVudDogXCJcXGYzMTBcIjsgfVxuLmlvbi1tZC1pbmZvcm1hdGlvbjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZjMxMlwiOyB9XG4uaW9uLW1kLWluZm9ybWF0aW9uLWNpcmNsZTpiZWZvcmUgeyBjb250ZW50OiBcIlxcZjMxMVwiOyB9XG4uaW9uLW1kLWlvbmljOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxmMzEzXCI7IH1cbi5pb24tbWQtaW9uaXRyb246YmVmb3JlIHsgY29udGVudDogXCJcXGYzMTRcIjsgfVxuLmlvbi1tZC1qZXQ6YmVmb3JlIHsgY29udGVudDogXCJcXGYzMTVcIjsgfVxuLmlvbi1tZC1rZXk6YmVmb3JlIHsgY29udGVudDogXCJcXGYzMTZcIjsgfVxuLmlvbi1tZC1rZXlwYWQ6YmVmb3JlIHsgY29udGVudDogXCJcXGYzMTdcIjsgfVxuLmlvbi1tZC1sYXB0b3A6YmVmb3JlIHsgY29udGVudDogXCJcXGYzMThcIjsgfVxuLmlvbi1tZC1sZWFmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxmMzE5XCI7IH1cbi5pb24tbWQtbGluazpiZWZvcmUgeyBjb250ZW50OiBcIlxcZjIyZVwiOyB9XG4uaW9uLW1kLWxpc3Q6YmVmb3JlIHsgY29udGVudDogXCJcXGYzMWJcIjsgfVxuLmlvbi1tZC1saXN0LWJveDpiZWZvcmUgeyBjb250ZW50OiBcIlxcZjMxYVwiOyB9XG4uaW9uLW1kLWxvY2F0ZTpiZWZvcmUgeyBjb250ZW50OiBcIlxcZjMxY1wiOyB9XG4uaW9uLW1kLWxvY2s6YmVmb3JlIHsgY29udGVudDogXCJcXGYzMWRcIjsgfVxuLmlvbi1tZC1sb2ctaW46YmVmb3JlIHsgY29udGVudDogXCJcXGYzMWVcIjsgfVxuLmlvbi1tZC1sb2ctb3V0OmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxmMzFmXCI7IH1cbi5pb24tbWQtbWFnbmV0OmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxmMzIwXCI7IH1cbi5pb24tbWQtbWFpbDpiZWZvcmUgeyBjb250ZW50OiBcIlxcZjMyMlwiOyB9XG4uaW9uLW1kLW1haWwtb3BlbjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZjMyMVwiOyB9XG4uaW9uLW1kLW1hbGU6YmVmb3JlIHsgY29udGVudDogXCJcXGYzMjNcIjsgfVxuLmlvbi1tZC1tYW46YmVmb3JlIHsgY29udGVudDogXCJcXGYzMjRcIjsgfVxuLmlvbi1tZC1tYXA6YmVmb3JlIHsgY29udGVudDogXCJcXGYzMjVcIjsgfVxuLmlvbi1tZC1tZWRhbDpiZWZvcmUgeyBjb250ZW50OiBcIlxcZjMyNlwiOyB9XG4uaW9uLW1kLW1lZGljYWw6YmVmb3JlIHsgY29udGVudDogXCJcXGYzMjdcIjsgfVxuLmlvbi1tZC1tZWRraXQ6YmVmb3JlIHsgY29udGVudDogXCJcXGYzMjhcIjsgfVxuLmlvbi1tZC1tZWdhcGhvbmU6YmVmb3JlIHsgY29udGVudDogXCJcXGYzMjlcIjsgfVxuLmlvbi1tZC1tZW51OmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxmMzJhXCI7IH1cbi5pb24tbWQtbWljOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxmMzJjXCI7IH1cbi5pb24tbWQtbWljLW9mZjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZjMyYlwiOyB9XG4uaW9uLW1kLW1pY3JvcGhvbmU6YmVmb3JlIHsgY29udGVudDogXCJcXGYzMmRcIjsgfVxuLmlvbi1tZC1tb29uOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxmMzJlXCI7IH1cbi5pb24tbWQtbW9yZTpiZWZvcmUgeyBjb250ZW50OiBcIlxcZjFjOVwiOyB9XG4uaW9uLW1kLW1vdmU6YmVmb3JlIHsgY29udGVudDogXCJcXGYzMzFcIjsgfVxuLmlvbi1tZC1tdXNpY2FsLW5vdGU6YmVmb3JlIHsgY29udGVudDogXCJcXGYzMzJcIjsgfVxuLmlvbi1tZC1tdXNpY2FsLW5vdGVzOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxmMzMzXCI7IH1cbi5pb24tbWQtbmF2aWdhdGU6YmVmb3JlIHsgY29udGVudDogXCJcXGYzMzRcIjsgfVxuLmlvbi1tZC1uby1zbW9raW5nOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxmMzM1XCI7IH1cbi5pb24tbWQtbm90aWZpY2F0aW9uczpiZWZvcmUgeyBjb250ZW50OiBcIlxcZjMzOFwiOyB9XG4uaW9uLW1kLW5vdGlmaWNhdGlvbnMtb2ZmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxmMzM2XCI7IH1cbi5pb24tbWQtbm90aWZpY2F0aW9ucy1vdXRsaW5lOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxmMzM3XCI7IH1cbi5pb24tbWQtbnVjbGVhcjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZjMzOVwiOyB9XG4uaW9uLW1kLW51dHJpdGlvbjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZjMzYVwiOyB9XG4uaW9uLW1kLW9wZW46YmVmb3JlIHsgY29udGVudDogXCJcXGYzM2JcIjsgfVxuLmlvbi1tZC1vcHRpb25zOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxmMzNjXCI7IH1cbi5pb24tbWQtb3V0bGV0OmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxmMzNkXCI7IH1cbi5pb24tbWQtcGFwZXI6YmVmb3JlIHsgY29udGVudDogXCJcXGYzM2ZcIjsgfVxuLmlvbi1tZC1wYXBlci1wbGFuZTpiZWZvcmUgeyBjb250ZW50OiBcIlxcZjMzZVwiOyB9XG4uaW9uLW1kLXBhcnRseS1zdW5ueTpiZWZvcmUgeyBjb250ZW50OiBcIlxcZjM0MFwiOyB9XG4uaW9uLW1kLXBhdXNlOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxmMzQxXCI7IH1cbi5pb24tbWQtcGF3OmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxmMzQyXCI7IH1cbi5pb24tbWQtcGVvcGxlOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxmMzQzXCI7IH1cbi5pb24tbWQtcGVyc29uOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxmMzQ1XCI7IH1cbi5pb24tbWQtcGVyc29uLWFkZDpiZWZvcmUgeyBjb250ZW50OiBcIlxcZjM0NFwiOyB9XG4uaW9uLW1kLXBob25lLWxhbmRzY2FwZTpiZWZvcmUgeyBjb250ZW50OiBcIlxcZjM0NlwiOyB9XG4uaW9uLW1kLXBob25lLXBvcnRyYWl0OmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxmMzQ3XCI7IH1cbi5pb24tbWQtcGhvdG9zOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxmMzQ4XCI7IH1cbi5pb24tbWQtcGllOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxmMzQ5XCI7IH1cbi5pb24tbWQtcGluOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxmMzRhXCI7IH1cbi5pb24tbWQtcGludDpiZWZvcmUgeyBjb250ZW50OiBcIlxcZjM0YlwiOyB9XG4uaW9uLW1kLXBpenphOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxmMzU0XCI7IH1cbi5pb24tbWQtcGxhbmU6YmVmb3JlIHsgY29udGVudDogXCJcXGYzNTVcIjsgfVxuLmlvbi1tZC1wbGFuZXQ6YmVmb3JlIHsgY29udGVudDogXCJcXGYzNTZcIjsgfVxuLmlvbi1tZC1wbGF5OmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxmMzU3XCI7IH1cbi5pb24tbWQtcG9kaXVtOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxmMzU4XCI7IH1cbi5pb24tbWQtcG93ZXI6YmVmb3JlIHsgY29udGVudDogXCJcXGYzNTlcIjsgfVxuLmlvbi1tZC1wcmljZXRhZzpiZWZvcmUgeyBjb250ZW50OiBcIlxcZjM1YVwiOyB9XG4uaW9uLW1kLXByaWNldGFnczpiZWZvcmUgeyBjb250ZW50OiBcIlxcZjM1YlwiOyB9XG4uaW9uLW1kLXByaW50OmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxmMzVjXCI7IH1cbi5pb24tbWQtcHVsc2U6YmVmb3JlIHsgY29udGVudDogXCJcXGYzNWRcIjsgfVxuLmlvbi1tZC1xci1zY2FubmVyOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxmMzVlXCI7IH1cbi5pb24tbWQtcXVvdGU6YmVmb3JlIHsgY29udGVudDogXCJcXGYzNWZcIjsgfVxuLmlvbi1tZC1yYWRpbzpiZWZvcmUgeyBjb250ZW50OiBcIlxcZjM2MlwiOyB9XG4uaW9uLW1kLXJhZGlvLWJ1dHRvbi1vZmY6YmVmb3JlIHsgY29udGVudDogXCJcXGYzNjBcIjsgfVxuLmlvbi1tZC1yYWRpby1idXR0b24tb246YmVmb3JlIHsgY29udGVudDogXCJcXGYzNjFcIjsgfVxuLmlvbi1tZC1yYWlueTpiZWZvcmUgeyBjb250ZW50OiBcIlxcZjM2M1wiOyB9XG4uaW9uLW1kLXJlY29yZGluZzpiZWZvcmUgeyBjb250ZW50OiBcIlxcZjM2NFwiOyB9XG4uaW9uLW1kLXJlZG86YmVmb3JlIHsgY29udGVudDogXCJcXGYzNjVcIjsgfVxuLmlvbi1tZC1yZWZyZXNoOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxmMzY2XCI7IH1cbi5pb24tbWQtcmVmcmVzaC1jaXJjbGU6YmVmb3JlIHsgY29udGVudDogXCJcXGYyMjhcIjsgfVxuLmlvbi1tZC1yZW1vdmU6YmVmb3JlIHsgY29udGVudDogXCJcXGYzNjhcIjsgfVxuLmlvbi1tZC1yZW1vdmUtY2lyY2xlOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxmMzY3XCI7IH1cbi5pb24tbWQtcmVvcmRlcjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZjM2OVwiOyB9XG4uaW9uLW1kLXJlcGVhdDpiZWZvcmUgeyBjb250ZW50OiBcIlxcZjM2YVwiOyB9XG4uaW9uLW1kLXJlc2l6ZTpiZWZvcmUgeyBjb250ZW50OiBcIlxcZjM2YlwiOyB9XG4uaW9uLW1kLXJlc3RhdXJhbnQ6YmVmb3JlIHsgY29udGVudDogXCJcXGYzNmNcIjsgfVxuLmlvbi1tZC1yZXR1cm4tbGVmdDpiZWZvcmUgeyBjb250ZW50OiBcIlxcZjM2ZFwiOyB9XG4uaW9uLW1kLXJldHVybi1yaWdodDpiZWZvcmUgeyBjb250ZW50OiBcIlxcZjM2ZVwiOyB9XG4uaW9uLW1kLXJldmVyc2UtY2FtZXJhOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxmMzZmXCI7IH1cbi5pb24tbWQtcmV3aW5kOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxmMzcwXCI7IH1cbi5pb24tbWQtcmliYm9uOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxmMzcxXCI7IH1cbi5pb24tbWQtcm9zZTpiZWZvcmUgeyBjb250ZW50OiBcIlxcZjM3MlwiOyB9XG4uaW9uLW1kLXNhZDpiZWZvcmUgeyBjb250ZW50OiBcIlxcZjM3M1wiOyB9XG4uaW9uLW1kLXNjaG9vbDpiZWZvcmUgeyBjb250ZW50OiBcIlxcZjM3NFwiOyB9XG4uaW9uLW1kLXNlYXJjaDpiZWZvcmUgeyBjb250ZW50OiBcIlxcZjM3NVwiOyB9XG4uaW9uLW1kLXNlbmQ6YmVmb3JlIHsgY29udGVudDogXCJcXGYzNzZcIjsgfVxuLmlvbi1tZC1zZXR0aW5nczpiZWZvcmUgeyBjb250ZW50OiBcIlxcZjM3N1wiOyB9XG4uaW9uLW1kLXNoYXJlOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxmMzc5XCI7IH1cbi5pb24tbWQtc2hhcmUtYWx0OmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxmMzc4XCI7IH1cbi5pb24tbWQtc2hpcnQ6YmVmb3JlIHsgY29udGVudDogXCJcXGYzN2FcIjsgfVxuLmlvbi1tZC1zaHVmZmxlOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxmMzdiXCI7IH1cbi5pb24tbWQtc2tpcC1iYWNrd2FyZDpiZWZvcmUgeyBjb250ZW50OiBcIlxcZjM3Y1wiOyB9XG4uaW9uLW1kLXNraXAtZm9yd2FyZDpiZWZvcmUgeyBjb250ZW50OiBcIlxcZjM3ZFwiOyB9XG4uaW9uLW1kLXNub3c6YmVmb3JlIHsgY29udGVudDogXCJcXGYzN2VcIjsgfVxuLmlvbi1tZC1zcGVlZG9tZXRlcjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZjM3ZlwiOyB9XG4uaW9uLW1kLXNxdWFyZTpiZWZvcmUgeyBjb250ZW50OiBcIlxcZjM4MVwiOyB9XG4uaW9uLW1kLXNxdWFyZS1vdXRsaW5lOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxmMzgwXCI7IH1cbi5pb24tbWQtc3RhcjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZjM4NFwiOyB9XG4uaW9uLW1kLXN0YXItaGFsZjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZjM4MlwiOyB9XG4uaW9uLW1kLXN0YXItb3V0bGluZTpiZWZvcmUgeyBjb250ZW50OiBcIlxcZjM4M1wiOyB9XG4uaW9uLW1kLXN0YXRzOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxmMzg1XCI7IH1cbi5pb24tbWQtc3RvcHdhdGNoOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxmMzg2XCI7IH1cbi5pb24tbWQtc3Vid2F5OmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxmMzg3XCI7IH1cbi5pb24tbWQtc3Vubnk6YmVmb3JlIHsgY29udGVudDogXCJcXGYzODhcIjsgfVxuLmlvbi1tZC1zd2FwOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxmMzg5XCI7IH1cbi5pb24tbWQtc3dpdGNoOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxmMzhhXCI7IH1cbi5pb24tbWQtc3luYzpiZWZvcmUgeyBjb250ZW50OiBcIlxcZjM4YlwiOyB9XG4uaW9uLW1kLXRhYmxldC1sYW5kc2NhcGU6YmVmb3JlIHsgY29udGVudDogXCJcXGYzOGNcIjsgfVxuLmlvbi1tZC10YWJsZXQtcG9ydHJhaXQ6YmVmb3JlIHsgY29udGVudDogXCJcXGYzOGRcIjsgfVxuLmlvbi1tZC10ZW5uaXNiYWxsOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxmMzhlXCI7IH1cbi5pb24tbWQtdGV4dDpiZWZvcmUgeyBjb250ZW50OiBcIlxcZjM4ZlwiOyB9XG4uaW9uLW1kLXRoZXJtb21ldGVyOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxmMzkwXCI7IH1cbi5pb24tbWQtdGh1bWJzLWRvd246YmVmb3JlIHsgY29udGVudDogXCJcXGYzOTFcIjsgfVxuLmlvbi1tZC10aHVtYnMtdXA6YmVmb3JlIHsgY29udGVudDogXCJcXGYzOTJcIjsgfVxuLmlvbi1tZC10aHVuZGVyc3Rvcm06YmVmb3JlIHsgY29udGVudDogXCJcXGYzOTNcIjsgfVxuLmlvbi1tZC10aW1lOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxmMzk0XCI7IH1cbi5pb24tbWQtdGltZXI6YmVmb3JlIHsgY29udGVudDogXCJcXGYzOTVcIjsgfVxuLmlvbi1tZC10cmFpbjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZjM5NlwiOyB9XG4uaW9uLW1kLXRyYW5zZ2VuZGVyOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxmMzk3XCI7IH1cbi5pb24tbWQtdHJhc2g6YmVmb3JlIHsgY29udGVudDogXCJcXGYzOThcIjsgfVxuLmlvbi1tZC10cmVuZGluZy1kb3duOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxmMzk5XCI7IH1cbi5pb24tbWQtdHJlbmRpbmctdXA6YmVmb3JlIHsgY29udGVudDogXCJcXGYzOWFcIjsgfVxuLmlvbi1tZC10cm9waHk6YmVmb3JlIHsgY29udGVudDogXCJcXGYzOWJcIjsgfVxuLmlvbi1tZC11bWJyZWxsYTpiZWZvcmUgeyBjb250ZW50OiBcIlxcZjM5Y1wiOyB9XG4uaW9uLW1kLXVuZG86YmVmb3JlIHsgY29udGVudDogXCJcXGYzOWRcIjsgfVxuLmlvbi1tZC11bmxvY2s6YmVmb3JlIHsgY29udGVudDogXCJcXGYzOWVcIjsgfVxuLmlvbi1tZC12aWRlb2NhbTpiZWZvcmUgeyBjb250ZW50OiBcIlxcZjM5ZlwiOyB9XG4uaW9uLW1kLXZvbHVtZS1kb3duOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxmM2EwXCI7IH1cbi5pb24tbWQtdm9sdW1lLW11dGU6YmVmb3JlIHsgY29udGVudDogXCJcXGYzYTFcIjsgfVxuLmlvbi1tZC12b2x1bWUtb2ZmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxmM2EyXCI7IH1cbi5pb24tbWQtdm9sdW1lLXVwOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxmM2EzXCI7IH1cbi5pb24tbWQtd2FsazpiZWZvcmUgeyBjb250ZW50OiBcIlxcZjNhNFwiOyB9XG4uaW9uLW1kLXdhcm5pbmc6YmVmb3JlIHsgY29udGVudDogXCJcXGYzYTVcIjsgfVxuLmlvbi1tZC13YXRjaDpiZWZvcmUgeyBjb250ZW50OiBcIlxcZjNhNlwiOyB9XG4uaW9uLW1kLXdhdGVyOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxmM2E3XCI7IH1cbi5pb24tbWQtd2lmaTpiZWZvcmUgeyBjb250ZW50OiBcIlxcZjNhOFwiOyB9XG4uaW9uLW1kLXdpbmU6YmVmb3JlIHsgY29udGVudDogXCJcXGYzYTlcIjsgfVxuLmlvbi1tZC13b21hbjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZjNhYVwiOyB9IiwiLyohIG5vcm1hbGl6ZS5jc3MgdjMuMC4yIHwgTUlUIExpY2Vuc2UgfCBnaXQuaW8vbm9ybWFsaXplICovXG5cbi8vXG4vLyAxLiBTZXQgZGVmYXVsdCBmb250IGZhbWlseSB0byBzYW5zLXNlcmlmLlxuLy8gMi4gUHJldmVudCBpT1MgdGV4dCBzaXplIGFkanVzdCBhZnRlciBvcmllbnRhdGlvbiBjaGFuZ2UsIHdpdGhvdXQgZGlzYWJsaW5nXG4vLyAgICB1c2VyIHpvb20uXG4vL1xuXG5odG1sIHtcbiAgZm9udC1mYW1pbHk6IHNhbnMtc2VyaWY7IC8vIDFcbiAgLW1zLXRleHQtc2l6ZS1hZGp1c3Q6IDEwMCU7IC8vIDJcbiAgLXdlYmtpdC10ZXh0LXNpemUtYWRqdXN0OiAxMDAlOyAvLyAyXG59XG5cbi8vXG4vLyBSZW1vdmUgZGVmYXVsdCBtYXJnaW4uXG4vL1xuXG5ib2R5IHtcbiAgbWFyZ2luOiAwO1xufVxuXG4vLyBIVE1MNSBkaXNwbGF5IGRlZmluaXRpb25zXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4vL1xuLy8gQ29ycmVjdCBgYmxvY2tgIGRpc3BsYXkgbm90IGRlZmluZWQgZm9yIGFueSBIVE1MNSBlbGVtZW50IGluIElFIDgvOS5cbi8vIENvcnJlY3QgYGJsb2NrYCBkaXNwbGF5IG5vdCBkZWZpbmVkIGZvciBgZGV0YWlsc2Agb3IgYHN1bW1hcnlgIGluIElFIDEwLzExXG4vLyBhbmQgRmlyZWZveC5cbi8vIENvcnJlY3QgYGJsb2NrYCBkaXNwbGF5IG5vdCBkZWZpbmVkIGZvciBgbWFpbmAgaW4gSUUgMTEuXG4vL1xuXG5hcnRpY2xlLFxuYXNpZGUsXG5kZXRhaWxzLFxuZmlnY2FwdGlvbixcbmZpZ3VyZSxcbmZvb3RlcixcbmhlYWRlcixcbmhncm91cCxcbm1haW4sXG5tZW51LFxubmF2LFxuc2VjdGlvbixcbnN1bW1hcnkge1xuICBkaXNwbGF5OiBibG9jaztcbn1cblxuLy9cbi8vIDEuIENvcnJlY3QgYGlubGluZS1ibG9ja2AgZGlzcGxheSBub3QgZGVmaW5lZCBpbiBJRSA4LzkuXG4vLyAyLiBOb3JtYWxpemUgdmVydGljYWwgYWxpZ25tZW50IG9mIGBwcm9ncmVzc2AgaW4gQ2hyb21lLCBGaXJlZm94LCBhbmQgT3BlcmEuXG4vL1xuXG5hdWRpbyxcbmNhbnZhcyxcbnByb2dyZXNzLFxudmlkZW8ge1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7IC8vIDFcbiAgdmVydGljYWwtYWxpZ246IGJhc2VsaW5lOyAvLyAyXG59XG5cbi8vXG4vLyBQcmV2ZW50IG1vZGVybiBicm93c2VycyBmcm9tIGRpc3BsYXlpbmcgYGF1ZGlvYCB3aXRob3V0IGNvbnRyb2xzLlxuLy8gUmVtb3ZlIGV4Y2VzcyBoZWlnaHQgaW4gaU9TIDUgZGV2aWNlcy5cbi8vXG5cbmF1ZGlvOm5vdChbY29udHJvbHNdKSB7XG4gIGRpc3BsYXk6IG5vbmU7XG4gIGhlaWdodDogMDtcbn1cblxuLy9cbi8vIEFkZHJlc3MgYFtoaWRkZW5dYCBzdHlsaW5nIG5vdCBwcmVzZW50IGluIElFIDgvOS8xMC5cbi8vIEhpZGUgdGhlIGB0ZW1wbGF0ZWAgZWxlbWVudCBpbiBJRSA4LzkvMTEsIFNhZmFyaSwgYW5kIEZpcmVmb3ggPCAyMi5cbi8vXG5cbltoaWRkZW5dLFxudGVtcGxhdGUge1xuICBkaXNwbGF5OiBub25lO1xufVxuXG4vLyBMaW5rc1xuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuLy9cbi8vIFJlbW92ZSB0aGUgZ3JheSBiYWNrZ3JvdW5kIGNvbG9yIGZyb20gYWN0aXZlIGxpbmtzIGluIElFIDEwLlxuLy9cblxuYSB7XG4gIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xufVxuXG4vL1xuLy8gSW1wcm92ZSByZWFkYWJpbGl0eSB3aGVuIGZvY3VzZWQgYW5kIGFsc28gbW91c2UgaG92ZXJlZCBpbiBhbGwgYnJvd3NlcnMuXG4vL1xuXG5hOmFjdGl2ZSxcbmE6aG92ZXIge1xuICBvdXRsaW5lOiAwO1xufVxuXG4vLyBUZXh0LWxldmVsIHNlbWFudGljc1xuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuLy9cbi8vIEFkZHJlc3Mgc3R5bGluZyBub3QgcHJlc2VudCBpbiBJRSA4LzkvMTAvMTEsIFNhZmFyaSwgYW5kIENocm9tZS5cbi8vXG5cbmFiYnJbdGl0bGVdIHtcbiAgYm9yZGVyLWJvdHRvbTogMXB4IGRvdHRlZDtcbn1cblxuLy9cbi8vIEFkZHJlc3Mgc3R5bGUgc2V0IHRvIGBib2xkZXJgIGluIEZpcmVmb3ggNCssIFNhZmFyaSwgYW5kIENocm9tZS5cbi8vXG5cbmIsXG5zdHJvbmcge1xuICBmb250LXdlaWdodDogYm9sZDtcbn1cblxuLy9cbi8vIEFkZHJlc3Mgc3R5bGluZyBub3QgcHJlc2VudCBpbiBTYWZhcmkgYW5kIENocm9tZS5cbi8vXG5cbmRmbiB7XG4gIGZvbnQtc3R5bGU6IGl0YWxpYztcbn1cblxuLy9cbi8vIEFkZHJlc3MgdmFyaWFibGUgYGgxYCBmb250LXNpemUgYW5kIG1hcmdpbiB3aXRoaW4gYHNlY3Rpb25gIGFuZCBgYXJ0aWNsZWBcbi8vIGNvbnRleHRzIGluIEZpcmVmb3ggNCssIFNhZmFyaSwgYW5kIENocm9tZS5cbi8vXG5cbmgxIHtcbiAgZm9udC1zaXplOiAyZW07XG4gIG1hcmdpbjogMC42N2VtIDA7XG59XG5cbi8vXG4vLyBBZGRyZXNzIHN0eWxpbmcgbm90IHByZXNlbnQgaW4gSUUgOC85LlxuLy9cblxubWFyayB7XG4gIGJhY2tncm91bmQ6ICNmZjA7XG4gIGNvbG9yOiAjMDAwO1xufVxuXG4vL1xuLy8gQWRkcmVzcyBpbmNvbnNpc3RlbnQgYW5kIHZhcmlhYmxlIGZvbnQgc2l6ZSBpbiBhbGwgYnJvd3NlcnMuXG4vL1xuXG5zbWFsbCB7XG4gIGZvbnQtc2l6ZTogODAlO1xufVxuXG4vL1xuLy8gUHJldmVudCBgc3ViYCBhbmQgYHN1cGAgYWZmZWN0aW5nIGBsaW5lLWhlaWdodGAgaW4gYWxsIGJyb3dzZXJzLlxuLy9cblxuc3ViLFxuc3VwIHtcbiAgZm9udC1zaXplOiA3NSU7XG4gIGxpbmUtaGVpZ2h0OiAwO1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIHZlcnRpY2FsLWFsaWduOiBiYXNlbGluZTtcbn1cblxuc3VwIHtcbiAgdG9wOiAtMC41ZW07XG59XG5cbnN1YiB7XG4gIGJvdHRvbTogLTAuMjVlbTtcbn1cblxuLy8gRW1iZWRkZWQgY29udGVudFxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuLy9cbi8vIFJlbW92ZSBib3JkZXIgd2hlbiBpbnNpZGUgYGFgIGVsZW1lbnQgaW4gSUUgOC85LzEwLlxuLy9cblxuaW1nIHtcbiAgYm9yZGVyOiAwO1xufVxuXG4vL1xuLy8gQ29ycmVjdCBvdmVyZmxvdyBub3QgaGlkZGVuIGluIElFIDkvMTAvMTEuXG4vL1xuXG5zdmc6bm90KDpyb290KSB7XG4gIG92ZXJmbG93OiBoaWRkZW47XG59XG5cbi8vIEdyb3VwaW5nIGNvbnRlbnRcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbi8vXG4vLyBBZGRyZXNzIG1hcmdpbiBub3QgcHJlc2VudCBpbiBJRSA4LzkgYW5kIFNhZmFyaS5cbi8vXG5cbmZpZ3VyZSB7XG4gIG1hcmdpbjogMWVtIDQwcHg7XG59XG5cbi8vXG4vLyBBZGRyZXNzIGRpZmZlcmVuY2VzIGJldHdlZW4gRmlyZWZveCBhbmQgb3RoZXIgYnJvd3NlcnMuXG4vL1xuXG5ociB7XG4gIC1tb3otYm94LXNpemluZzogY29udGVudC1ib3g7XG4gIGJveC1zaXppbmc6IGNvbnRlbnQtYm94O1xuICBoZWlnaHQ6IDA7XG59XG5cbi8vXG4vLyBDb250YWluIG92ZXJmbG93IGluIGFsbCBicm93c2Vycy5cbi8vXG5cbnByZSB7XG4gIG92ZXJmbG93OiBhdXRvO1xufVxuXG4vL1xuLy8gQWRkcmVzcyBvZGQgYGVtYC11bml0IGZvbnQgc2l6ZSByZW5kZXJpbmcgaW4gYWxsIGJyb3dzZXJzLlxuLy9cblxuY29kZSxcbmtiZCxcbnByZSxcbnNhbXAge1xuICBmb250LWZhbWlseTogbW9ub3NwYWNlLCBtb25vc3BhY2U7XG4gIGZvbnQtc2l6ZTogMWVtO1xufVxuXG4vLyBGb3Jtc1xuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuLy9cbi8vIEtub3duIGxpbWl0YXRpb246IGJ5IGRlZmF1bHQsIENocm9tZSBhbmQgU2FmYXJpIG9uIE9TIFggYWxsb3cgdmVyeSBsaW1pdGVkXG4vLyBzdHlsaW5nIG9mIGBzZWxlY3RgLCB1bmxlc3MgYSBgYm9yZGVyYCBwcm9wZXJ0eSBpcyBzZXQuXG4vL1xuXG4vL1xuLy8gMS4gQ29ycmVjdCBjb2xvciBub3QgYmVpbmcgaW5oZXJpdGVkLlxuLy8gICAgS25vd24gaXNzdWU6IGFmZmVjdHMgY29sb3Igb2YgZGlzYWJsZWQgZWxlbWVudHMuXG4vLyAyLiBDb3JyZWN0IGZvbnQgcHJvcGVydGllcyBub3QgYmVpbmcgaW5oZXJpdGVkLlxuLy8gMy4gQWRkcmVzcyBtYXJnaW5zIHNldCBkaWZmZXJlbnRseSBpbiBGaXJlZm94IDQrLCBTYWZhcmksIGFuZCBDaHJvbWUuXG4vL1xuXG5idXR0b24sXG5pbnB1dCxcbm9wdGdyb3VwLFxuc2VsZWN0LFxudGV4dGFyZWEge1xuICBjb2xvcjogaW5oZXJpdDsgLy8gMVxuICBmb250OiBpbmhlcml0OyAvLyAyXG4gIG1hcmdpbjogMDsgLy8gM1xufVxuXG4vL1xuLy8gQWRkcmVzcyBgb3ZlcmZsb3dgIHNldCB0byBgaGlkZGVuYCBpbiBJRSA4LzkvMTAvMTEuXG4vL1xuXG5idXR0b24ge1xuICBvdmVyZmxvdzogdmlzaWJsZTtcbn1cblxuLy9cbi8vIEFkZHJlc3MgaW5jb25zaXN0ZW50IGB0ZXh0LXRyYW5zZm9ybWAgaW5oZXJpdGFuY2UgZm9yIGBidXR0b25gIGFuZCBgc2VsZWN0YC5cbi8vIEFsbCBvdGhlciBmb3JtIGNvbnRyb2wgZWxlbWVudHMgZG8gbm90IGluaGVyaXQgYHRleHQtdHJhbnNmb3JtYCB2YWx1ZXMuXG4vLyBDb3JyZWN0IGBidXR0b25gIHN0eWxlIGluaGVyaXRhbmNlIGluIEZpcmVmb3gsIElFIDgvOS8xMC8xMSwgYW5kIE9wZXJhLlxuLy8gQ29ycmVjdCBgc2VsZWN0YCBzdHlsZSBpbmhlcml0YW5jZSBpbiBGaXJlZm94LlxuLy9cblxuYnV0dG9uLFxuc2VsZWN0IHtcbiAgdGV4dC10cmFuc2Zvcm06IG5vbmU7XG59XG5cbi8vXG4vLyAxLiBBdm9pZCB0aGUgV2ViS2l0IGJ1ZyBpbiBBbmRyb2lkIDQuMC4qIHdoZXJlICgyKSBkZXN0cm95cyBuYXRpdmUgYGF1ZGlvYFxuLy8gICAgYW5kIGB2aWRlb2AgY29udHJvbHMuXG4vLyAyLiBDb3JyZWN0IGluYWJpbGl0eSB0byBzdHlsZSBjbGlja2FibGUgYGlucHV0YCB0eXBlcyBpbiBpT1MuXG4vLyAzLiBJbXByb3ZlIHVzYWJpbGl0eSBhbmQgY29uc2lzdGVuY3kgb2YgY3Vyc29yIHN0eWxlIGJldHdlZW4gaW1hZ2UtdHlwZVxuLy8gICAgYGlucHV0YCBhbmQgb3RoZXJzLlxuLy9cblxuYnV0dG9uLFxuaHRtbCBpbnB1dFt0eXBlPVwiYnV0dG9uXCJdLCAvLyAxXG5pbnB1dFt0eXBlPVwicmVzZXRcIl0sXG5pbnB1dFt0eXBlPVwic3VibWl0XCJdIHtcbiAgLXdlYmtpdC1hcHBlYXJhbmNlOiBidXR0b247IC8vIDJcbiAgY3Vyc29yOiBwb2ludGVyOyAvLyAzXG59XG5cbi8vXG4vLyBSZS1zZXQgZGVmYXVsdCBjdXJzb3IgZm9yIGRpc2FibGVkIGVsZW1lbnRzLlxuLy9cblxuYnV0dG9uW2Rpc2FibGVkXSxcbmh0bWwgaW5wdXRbZGlzYWJsZWRdIHtcbiAgY3Vyc29yOiBkZWZhdWx0O1xufVxuXG4vL1xuLy8gUmVtb3ZlIGlubmVyIHBhZGRpbmcgYW5kIGJvcmRlciBpbiBGaXJlZm94IDQrLlxuLy9cblxuYnV0dG9uOjotbW96LWZvY3VzLWlubmVyLFxuaW5wdXQ6Oi1tb3otZm9jdXMtaW5uZXIge1xuICBib3JkZXI6IDA7XG4gIHBhZGRpbmc6IDA7XG59XG5cbi8vXG4vLyBBZGRyZXNzIEZpcmVmb3ggNCsgc2V0dGluZyBgbGluZS1oZWlnaHRgIG9uIGBpbnB1dGAgdXNpbmcgYCFpbXBvcnRhbnRgIGluXG4vLyB0aGUgVUEgc3R5bGVzaGVldC5cbi8vXG5cbmlucHV0IHtcbiAgbGluZS1oZWlnaHQ6IG5vcm1hbDtcbn1cblxuLy9cbi8vIEl0J3MgcmVjb21tZW5kZWQgdGhhdCB5b3UgZG9uJ3QgYXR0ZW1wdCB0byBzdHlsZSB0aGVzZSBlbGVtZW50cy5cbi8vIEZpcmVmb3gncyBpbXBsZW1lbnRhdGlvbiBkb2Vzbid0IHJlc3BlY3QgYm94LXNpemluZywgcGFkZGluZywgb3Igd2lkdGguXG4vL1xuLy8gMS4gQWRkcmVzcyBib3ggc2l6aW5nIHNldCB0byBgY29udGVudC1ib3hgIGluIElFIDgvOS8xMC5cbi8vIDIuIFJlbW92ZSBleGNlc3MgcGFkZGluZyBpbiBJRSA4LzkvMTAuXG4vL1xuXG5pbnB1dFt0eXBlPVwiY2hlY2tib3hcIl0sXG5pbnB1dFt0eXBlPVwicmFkaW9cIl0ge1xuICBib3gtc2l6aW5nOiBib3JkZXItYm94OyAvLyAxXG4gIHBhZGRpbmc6IDA7IC8vIDJcbn1cblxuLy9cbi8vIEZpeCB0aGUgY3Vyc29yIHN0eWxlIGZvciBDaHJvbWUncyBpbmNyZW1lbnQvZGVjcmVtZW50IGJ1dHRvbnMuIEZvciBjZXJ0YWluXG4vLyBgZm9udC1zaXplYCB2YWx1ZXMgb2YgdGhlIGBpbnB1dGAsIGl0IGNhdXNlcyB0aGUgY3Vyc29yIHN0eWxlIG9mIHRoZVxuLy8gZGVjcmVtZW50IGJ1dHRvbiB0byBjaGFuZ2UgZnJvbSBgZGVmYXVsdGAgdG8gYHRleHRgLlxuLy9cblxuaW5wdXRbdHlwZT1cIm51bWJlclwiXTo6LXdlYmtpdC1pbm5lci1zcGluLWJ1dHRvbixcbmlucHV0W3R5cGU9XCJudW1iZXJcIl06Oi13ZWJraXQtb3V0ZXItc3Bpbi1idXR0b24ge1xuICBoZWlnaHQ6IGF1dG87XG59XG5cbi8vXG4vLyAxLiBBZGRyZXNzIGBhcHBlYXJhbmNlYCBzZXQgdG8gYHNlYXJjaGZpZWxkYCBpbiBTYWZhcmkgYW5kIENocm9tZS5cbi8vIDIuIEFkZHJlc3MgYGJveC1zaXppbmdgIHNldCB0byBgYm9yZGVyLWJveGAgaW4gU2FmYXJpIGFuZCBDaHJvbWVcbi8vICAgIChpbmNsdWRlIGAtbW96YCB0byBmdXR1cmUtcHJvb2YpLlxuLy9cblxuaW5wdXRbdHlwZT1cInNlYXJjaFwiXSB7XG4gIC13ZWJraXQtYXBwZWFyYW5jZTogdGV4dGZpZWxkOyAvLyAxXG4gIC1tb3otYm94LXNpemluZzogY29udGVudC1ib3g7XG4gIC13ZWJraXQtYm94LXNpemluZzogY29udGVudC1ib3g7IC8vIDJcbiAgYm94LXNpemluZzogY29udGVudC1ib3g7XG59XG5cbi8vXG4vLyBSZW1vdmUgaW5uZXIgcGFkZGluZyBhbmQgc2VhcmNoIGNhbmNlbCBidXR0b24gaW4gU2FmYXJpIGFuZCBDaHJvbWUgb24gT1MgWC5cbi8vIFNhZmFyaSAoYnV0IG5vdCBDaHJvbWUpIGNsaXBzIHRoZSBjYW5jZWwgYnV0dG9uIHdoZW4gdGhlIHNlYXJjaCBpbnB1dCBoYXNcbi8vIHBhZGRpbmcgKGFuZCBgdGV4dGZpZWxkYCBhcHBlYXJhbmNlKS5cbi8vXG5cbmlucHV0W3R5cGU9XCJzZWFyY2hcIl06Oi13ZWJraXQtc2VhcmNoLWNhbmNlbC1idXR0b24sXG5pbnB1dFt0eXBlPVwic2VhcmNoXCJdOjotd2Via2l0LXNlYXJjaC1kZWNvcmF0aW9uIHtcbiAgLXdlYmtpdC1hcHBlYXJhbmNlOiBub25lO1xufVxuXG4vL1xuLy8gRGVmaW5lIGNvbnNpc3RlbnQgYm9yZGVyLCBtYXJnaW4sIGFuZCBwYWRkaW5nLlxuLy9cblxuZmllbGRzZXQge1xuICBib3JkZXI6IDFweCBzb2xpZCAjYzBjMGMwO1xuICBtYXJnaW46IDAgMnB4O1xuICBwYWRkaW5nOiAwLjM1ZW0gMC42MjVlbSAwLjc1ZW07XG59XG5cbi8vXG4vLyAxLiBDb3JyZWN0IGBjb2xvcmAgbm90IGJlaW5nIGluaGVyaXRlZCBpbiBJRSA4LzkvMTAvMTEuXG4vLyAyLiBSZW1vdmUgcGFkZGluZyBzbyBwZW9wbGUgYXJlbid0IGNhdWdodCBvdXQgaWYgdGhleSB6ZXJvIG91dCBmaWVsZHNldHMuXG4vL1xuXG5sZWdlbmQge1xuICBib3JkZXI6IDA7IC8vIDFcbiAgcGFkZGluZzogMDsgLy8gMlxufVxuXG4vL1xuLy8gUmVtb3ZlIGRlZmF1bHQgdmVydGljYWwgc2Nyb2xsYmFyIGluIElFIDgvOS8xMC8xMS5cbi8vXG5cbnRleHRhcmVhIHtcbiAgb3ZlcmZsb3c6IGF1dG87XG59XG5cbi8vXG4vLyBEb24ndCBpbmhlcml0IHRoZSBgZm9udC13ZWlnaHRgIChhcHBsaWVkIGJ5IGEgcnVsZSBhYm92ZSkuXG4vLyBOT1RFOiB0aGUgZGVmYXVsdCBjYW5ub3Qgc2FmZWx5IGJlIGNoYW5nZWQgaW4gQ2hyb21lIGFuZCBTYWZhcmkgb24gT1MgWC5cbi8vXG5cbm9wdGdyb3VwIHtcbiAgZm9udC13ZWlnaHQ6IGJvbGQ7XG59XG5cbi8vIFRhYmxlc1xuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuLy9cbi8vIFJlbW92ZSBtb3N0IHNwYWNpbmcgYmV0d2VlbiB0YWJsZSBjZWxscy5cbi8vXG5cbnRhYmxlIHtcbiAgYm9yZGVyLWNvbGxhcHNlOiBjb2xsYXBzZTtcbiAgYm9yZGVyLXNwYWNpbmc6IDA7XG59XG5cbnRkLFxudGgge1xuICBwYWRkaW5nOiAwO1xufVxuIiwiLyohIFNvdXJjZTogaHR0cHM6Ly9naXRodWIuY29tL2g1YnAvaHRtbDUtYm9pbGVycGxhdGUvYmxvYi9tYXN0ZXIvc3JjL2Nzcy9tYWluLmNzcyAqL1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gUHJpbnQgc3R5bGVzLlxuLy8gSW5saW5lZCB0byBhdm9pZCB0aGUgYWRkaXRpb25hbCBIVFRQIHJlcXVlc3Q6IGg1YnAuY29tL3Jcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbkBtZWRpYSBwcmludCB7XG4gICAgKixcbiAgICAqOmJlZm9yZSxcbiAgICAqOmFmdGVyIHtcbiAgICAgICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQgIWltcG9ydGFudDtcbiAgICAgICAgY29sb3I6ICMwMDAgIWltcG9ydGFudDsgLy8gQmxhY2sgcHJpbnRzIGZhc3RlcjogaDVicC5jb20vc1xuICAgICAgICBib3gtc2hhZG93OiBub25lICFpbXBvcnRhbnQ7XG4gICAgICAgIHRleHQtc2hhZG93OiBub25lICFpbXBvcnRhbnQ7XG4gICAgfVxuXG4gICAgYSxcbiAgICBhOnZpc2l0ZWQge1xuICAgICAgICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTtcbiAgICB9XG5cbiAgICBhW2hyZWZdOmFmdGVyIHtcbiAgICAgICAgY29udGVudDogXCIgKFwiIGF0dHIoaHJlZikgXCIpXCI7XG4gICAgfVxuXG4gICAgYWJiclt0aXRsZV06YWZ0ZXIge1xuICAgICAgICBjb250ZW50OiBcIiAoXCIgYXR0cih0aXRsZSkgXCIpXCI7XG4gICAgfVxuXG4gICAgLy8gRG9uJ3Qgc2hvdyBsaW5rcyB0aGF0IGFyZSBmcmFnbWVudCBpZGVudGlmaWVycyxcbiAgICAvLyBvciB1c2UgdGhlIGBqYXZhc2NyaXB0OmAgcHNldWRvIHByb3RvY29sXG4gICAgYVtocmVmXj1cIiNcIl06YWZ0ZXIsXG4gICAgYVtocmVmXj1cImphdmFzY3JpcHQ6XCJdOmFmdGVyIHtcbiAgICAgICAgY29udGVudDogXCJcIjtcbiAgICB9XG5cbiAgICBwcmUsXG4gICAgYmxvY2txdW90ZSB7XG4gICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICM5OTk7XG4gICAgICAgIHBhZ2UtYnJlYWstaW5zaWRlOiBhdm9pZDtcbiAgICB9XG5cbiAgICB0aGVhZCB7XG4gICAgICAgIGRpc3BsYXk6IHRhYmxlLWhlYWRlci1ncm91cDsgLy8gaDVicC5jb20vdFxuICAgIH1cblxuICAgIHRyLFxuICAgIGltZyB7XG4gICAgICAgIHBhZ2UtYnJlYWstaW5zaWRlOiBhdm9pZDtcbiAgICB9XG5cbiAgICBpbWcge1xuICAgICAgICBtYXgtd2lkdGg6IDEwMCUgIWltcG9ydGFudDtcbiAgICB9XG5cbiAgICBwLFxuICAgIGgyLFxuICAgIGgzIHtcbiAgICAgICAgb3JwaGFuczogMztcbiAgICAgICAgd2lkb3dzOiAzO1xuICAgIH1cblxuICAgIGgyLFxuICAgIGgzIHtcbiAgICAgICAgcGFnZS1icmVhay1hZnRlcjogYXZvaWQ7XG4gICAgfVxuXG4gICAgLy8gQm9vdHN0cmFwIHNwZWNpZmljIGNoYW5nZXMgc3RhcnRcbiAgICAvL1xuICAgIC8vIENocm9tZSAoT1NYKSBmaXggZm9yIGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9pc3N1ZXMvMTEyNDVcbiAgICAvLyBPbmNlIGZpeGVkLCB3ZSBjYW4ganVzdCBzdHJhaWdodCB1cCByZW1vdmUgdGhpcy5cbiAgICBzZWxlY3Qge1xuICAgICAgICBiYWNrZ3JvdW5kOiAjZmZmICFpbXBvcnRhbnQ7XG4gICAgfVxuXG4gICAgLy8gQm9vdHN0cmFwIGNvbXBvbmVudHNcbiAgICAubmF2YmFyIHtcbiAgICAgICAgZGlzcGxheTogbm9uZTtcbiAgICB9XG4gICAgLmJ0bixcbiAgICAuZHJvcHVwID4gLmJ0biB7XG4gICAgICAgID4gLmNhcmV0IHtcbiAgICAgICAgICAgIGJvcmRlci10b3AtY29sb3I6ICMwMDAgIWltcG9ydGFudDtcbiAgICAgICAgfVxuICAgIH1cbiAgICAubGFiZWwge1xuICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAjMDAwO1xuICAgIH1cblxuICAgIC50YWJsZSB7XG4gICAgICAgIGJvcmRlci1jb2xsYXBzZTogY29sbGFwc2UgIWltcG9ydGFudDtcblxuICAgICAgICB0ZCxcbiAgICAgICAgdGgge1xuICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZiAhaW1wb3J0YW50O1xuICAgICAgICB9XG4gICAgfVxuICAgIC50YWJsZS1ib3JkZXJlZCB7XG4gICAgICAgIHRoLFxuICAgICAgICB0ZCB7XG4gICAgICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAjZGRkICFpbXBvcnRhbnQ7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBCb290c3RyYXAgc3BlY2lmaWMgY2hhbmdlcyBlbmRcbn1cbiIsIi8vXG4vLyBHbHlwaGljb25zIGZvciBCb290c3RyYXBcbi8vXG4vLyBTaW5jZSBpY29ucyBhcmUgZm9udHMsIHRoZXkgY2FuIGJlIHBsYWNlZCBhbnl3aGVyZSB0ZXh0IGlzIHBsYWNlZCBhbmQgYXJlXG4vLyB0aHVzIGF1dG9tYXRpY2FsbHkgc2l6ZWQgdG8gbWF0Y2ggdGhlIHN1cnJvdW5kaW5nIGNoaWxkLiBUbyB1c2UsIGNyZWF0ZSBhblxuLy8gaW5saW5lIGVsZW1lbnQgd2l0aCB0aGUgYXBwcm9wcmlhdGUgY2xhc3NlcywgbGlrZSBzbzpcbi8vXG4vLyA8YSBocmVmPVwiI1wiPjxzcGFuIGNsYXNzPVwiZ2x5cGhpY29uIGdseXBoaWNvbi1zdGFyXCI+PC9zcGFuPiBTdGFyPC9hPlxuXG4vLyBJbXBvcnQgdGhlIGZvbnRzXG5AZm9udC1mYWNlIHtcbiAgZm9udC1mYW1pbHk6ICdHbHlwaGljb25zIEhhbGZsaW5ncyc7XG4gIHNyYzogdXJsKGlmKCRib290c3RyYXAtc2Fzcy1hc3NldC1oZWxwZXIsIHR3YnMtZm9udC1wYXRoKCcjeyRpY29uLWZvbnQtcGF0aH0jeyRpY29uLWZvbnQtbmFtZX0uZW90JyksICcjeyRpY29uLWZvbnQtcGF0aH0jeyRpY29uLWZvbnQtbmFtZX0uZW90JykpO1xuICBzcmM6IHVybChpZigkYm9vdHN0cmFwLXNhc3MtYXNzZXQtaGVscGVyLCB0d2JzLWZvbnQtcGF0aCgnI3skaWNvbi1mb250LXBhdGh9I3skaWNvbi1mb250LW5hbWV9LmVvdD8jaWVmaXgnKSwgJyN7JGljb24tZm9udC1wYXRofSN7JGljb24tZm9udC1uYW1lfS5lb3Q/I2llZml4JykpIGZvcm1hdCgnZW1iZWRkZWQtb3BlbnR5cGUnKSxcbiAgICAgICB1cmwoaWYoJGJvb3RzdHJhcC1zYXNzLWFzc2V0LWhlbHBlciwgdHdicy1mb250LXBhdGgoJyN7JGljb24tZm9udC1wYXRofSN7JGljb24tZm9udC1uYW1lfS53b2ZmMicpLCAnI3skaWNvbi1mb250LXBhdGh9I3skaWNvbi1mb250LW5hbWV9LndvZmYyJykpIGZvcm1hdCgnd29mZjInKSxcbiAgICAgICB1cmwoaWYoJGJvb3RzdHJhcC1zYXNzLWFzc2V0LWhlbHBlciwgdHdicy1mb250LXBhdGgoJyN7JGljb24tZm9udC1wYXRofSN7JGljb24tZm9udC1uYW1lfS53b2ZmJyksICcjeyRpY29uLWZvbnQtcGF0aH0jeyRpY29uLWZvbnQtbmFtZX0ud29mZicpKSBmb3JtYXQoJ3dvZmYnKSxcbiAgICAgICB1cmwoaWYoJGJvb3RzdHJhcC1zYXNzLWFzc2V0LWhlbHBlciwgdHdicy1mb250LXBhdGgoJyN7JGljb24tZm9udC1wYXRofSN7JGljb24tZm9udC1uYW1lfS50dGYnKSwgJyN7JGljb24tZm9udC1wYXRofSN7JGljb24tZm9udC1uYW1lfS50dGYnKSkgZm9ybWF0KCd0cnVldHlwZScpLFxuICAgICAgIHVybChpZigkYm9vdHN0cmFwLXNhc3MtYXNzZXQtaGVscGVyLCB0d2JzLWZvbnQtcGF0aCgnI3skaWNvbi1mb250LXBhdGh9I3skaWNvbi1mb250LW5hbWV9LnN2ZyMjeyRpY29uLWZvbnQtc3ZnLWlkfScpLCAnI3skaWNvbi1mb250LXBhdGh9I3skaWNvbi1mb250LW5hbWV9LnN2ZyMjeyRpY29uLWZvbnQtc3ZnLWlkfScpKSBmb3JtYXQoJ3N2ZycpO1xufVxuXG4vLyBDYXRjaGFsbCBiYXNlY2xhc3Ncbi5nbHlwaGljb24ge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIHRvcDogMXB4O1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIGZvbnQtZmFtaWx5OiAnR2x5cGhpY29ucyBIYWxmbGluZ3MnO1xuICBmb250LXN0eWxlOiBub3JtYWw7XG4gIGZvbnQtd2VpZ2h0OiBub3JtYWw7XG4gIGxpbmUtaGVpZ2h0OiAxO1xuICAtd2Via2l0LWZvbnQtc21vb3RoaW5nOiBhbnRpYWxpYXNlZDtcbiAgLW1vei1vc3gtZm9udC1zbW9vdGhpbmc6IGdyYXlzY2FsZTtcbn1cblxuLy8gSW5kaXZpZHVhbCBpY29uc1xuLmdseXBoaWNvbi1hc3RlcmlzayAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcMmFcIjsgfSB9XG4uZ2x5cGhpY29uLXBsdXMgICAgICAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFwyYlwiOyB9IH1cbi5nbHlwaGljb24tZXVybyxcbi5nbHlwaGljb24tZXVyICAgICAgICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXDIwYWNcIjsgfSB9XG4uZ2x5cGhpY29uLW1pbnVzICAgICAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFwyMjEyXCI7IH0gfVxuLmdseXBoaWNvbi1jbG91ZCAgICAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcMjYwMVwiOyB9IH1cbi5nbHlwaGljb24tZW52ZWxvcGUgICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXDI3MDlcIjsgfSB9XG4uZ2x5cGhpY29uLXBlbmNpbCAgICAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFwyNzBmXCI7IH0gfVxuLmdseXBoaWNvbi1nbGFzcyAgICAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTAwMVwiOyB9IH1cbi5nbHlwaGljb24tbXVzaWMgICAgICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUwMDJcIjsgfSB9XG4uZ2x5cGhpY29uLXNlYXJjaCAgICAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMDAzXCI7IH0gfVxuLmdseXBoaWNvbi1oZWFydCAgICAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTAwNVwiOyB9IH1cbi5nbHlwaGljb24tc3RhciAgICAgICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUwMDZcIjsgfSB9XG4uZ2x5cGhpY29uLXN0YXItZW1wdHkgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMDA3XCI7IH0gfVxuLmdseXBoaWNvbi11c2VyICAgICAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTAwOFwiOyB9IH1cbi5nbHlwaGljb24tZmlsbSAgICAgICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUwMDlcIjsgfSB9XG4uZ2x5cGhpY29uLXRoLWxhcmdlICAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMDEwXCI7IH0gfVxuLmdseXBoaWNvbi10aCAgICAgICAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTAxMVwiOyB9IH1cbi5nbHlwaGljb24tdGgtbGlzdCAgICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUwMTJcIjsgfSB9XG4uZ2x5cGhpY29uLW9rICAgICAgICAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMDEzXCI7IH0gfVxuLmdseXBoaWNvbi1yZW1vdmUgICAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTAxNFwiOyB9IH1cbi5nbHlwaGljb24tem9vbS1pbiAgICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUwMTVcIjsgfSB9XG4uZ2x5cGhpY29uLXpvb20tb3V0ICAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMDE2XCI7IH0gfVxuLmdseXBoaWNvbi1vZmYgICAgICAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTAxN1wiOyB9IH1cbi5nbHlwaGljb24tc2lnbmFsICAgICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUwMThcIjsgfSB9XG4uZ2x5cGhpY29uLWNvZyAgICAgICAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMDE5XCI7IH0gfVxuLmdseXBoaWNvbi10cmFzaCAgICAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTAyMFwiOyB9IH1cbi5nbHlwaGljb24taG9tZSAgICAgICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUwMjFcIjsgfSB9XG4uZ2x5cGhpY29uLWZpbGUgICAgICAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMDIyXCI7IH0gfVxuLmdseXBoaWNvbi10aW1lICAgICAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTAyM1wiOyB9IH1cbi5nbHlwaGljb24tcm9hZCAgICAgICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUwMjRcIjsgfSB9XG4uZ2x5cGhpY29uLWRvd25sb2FkLWFsdCAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMDI1XCI7IH0gfVxuLmdseXBoaWNvbi1kb3dubG9hZCAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTAyNlwiOyB9IH1cbi5nbHlwaGljb24tdXBsb2FkICAgICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUwMjdcIjsgfSB9XG4uZ2x5cGhpY29uLWluYm94ICAgICAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMDI4XCI7IH0gfVxuLmdseXBoaWNvbi1wbGF5LWNpcmNsZSAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTAyOVwiOyB9IH1cbi5nbHlwaGljb24tcmVwZWF0ICAgICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUwMzBcIjsgfSB9XG4uZ2x5cGhpY29uLXJlZnJlc2ggICAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMDMxXCI7IH0gfVxuLmdseXBoaWNvbi1saXN0LWFsdCAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTAzMlwiOyB9IH1cbi5nbHlwaGljb24tbG9jayAgICAgICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUwMzNcIjsgfSB9XG4uZ2x5cGhpY29uLWZsYWcgICAgICAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMDM0XCI7IH0gfVxuLmdseXBoaWNvbi1oZWFkcGhvbmVzICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTAzNVwiOyB9IH1cbi5nbHlwaGljb24tdm9sdW1lLW9mZiAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUwMzZcIjsgfSB9XG4uZ2x5cGhpY29uLXZvbHVtZS1kb3duICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMDM3XCI7IH0gfVxuLmdseXBoaWNvbi12b2x1bWUtdXAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTAzOFwiOyB9IH1cbi5nbHlwaGljb24tcXJjb2RlICAgICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUwMzlcIjsgfSB9XG4uZ2x5cGhpY29uLWJhcmNvZGUgICAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMDQwXCI7IH0gfVxuLmdseXBoaWNvbi10YWcgICAgICAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTA0MVwiOyB9IH1cbi5nbHlwaGljb24tdGFncyAgICAgICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUwNDJcIjsgfSB9XG4uZ2x5cGhpY29uLWJvb2sgICAgICAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMDQzXCI7IH0gfVxuLmdseXBoaWNvbi1ib29rbWFyayAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTA0NFwiOyB9IH1cbi5nbHlwaGljb24tcHJpbnQgICAgICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUwNDVcIjsgfSB9XG4uZ2x5cGhpY29uLWNhbWVyYSAgICAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMDQ2XCI7IH0gfVxuLmdseXBoaWNvbi1mb250ICAgICAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTA0N1wiOyB9IH1cbi5nbHlwaGljb24tYm9sZCAgICAgICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUwNDhcIjsgfSB9XG4uZ2x5cGhpY29uLWl0YWxpYyAgICAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMDQ5XCI7IH0gfVxuLmdseXBoaWNvbi10ZXh0LWhlaWdodCAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTA1MFwiOyB9IH1cbi5nbHlwaGljb24tdGV4dC13aWR0aCAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUwNTFcIjsgfSB9XG4uZ2x5cGhpY29uLWFsaWduLWxlZnQgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMDUyXCI7IH0gfVxuLmdseXBoaWNvbi1hbGlnbi1jZW50ZXIgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTA1M1wiOyB9IH1cbi5nbHlwaGljb24tYWxpZ24tcmlnaHQgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUwNTRcIjsgfSB9XG4uZ2x5cGhpY29uLWFsaWduLWp1c3RpZnkgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMDU1XCI7IH0gfVxuLmdseXBoaWNvbi1saXN0ICAgICAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTA1NlwiOyB9IH1cbi5nbHlwaGljb24taW5kZW50LWxlZnQgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUwNTdcIjsgfSB9XG4uZ2x5cGhpY29uLWluZGVudC1yaWdodCAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMDU4XCI7IH0gfVxuLmdseXBoaWNvbi1mYWNldGltZS12aWRlbyAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTA1OVwiOyB9IH1cbi5nbHlwaGljb24tcGljdHVyZSAgICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUwNjBcIjsgfSB9XG4uZ2x5cGhpY29uLW1hcC1tYXJrZXIgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMDYyXCI7IH0gfVxuLmdseXBoaWNvbi1hZGp1c3QgICAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTA2M1wiOyB9IH1cbi5nbHlwaGljb24tdGludCAgICAgICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUwNjRcIjsgfSB9XG4uZ2x5cGhpY29uLWVkaXQgICAgICAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMDY1XCI7IH0gfVxuLmdseXBoaWNvbi1zaGFyZSAgICAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTA2NlwiOyB9IH1cbi5nbHlwaGljb24tY2hlY2sgICAgICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUwNjdcIjsgfSB9XG4uZ2x5cGhpY29uLW1vdmUgICAgICAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMDY4XCI7IH0gfVxuLmdseXBoaWNvbi1zdGVwLWJhY2t3YXJkICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTA2OVwiOyB9IH1cbi5nbHlwaGljb24tZmFzdC1iYWNrd2FyZCAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUwNzBcIjsgfSB9XG4uZ2x5cGhpY29uLWJhY2t3YXJkICAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMDcxXCI7IH0gfVxuLmdseXBoaWNvbi1wbGF5ICAgICAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTA3MlwiOyB9IH1cbi5nbHlwaGljb24tcGF1c2UgICAgICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUwNzNcIjsgfSB9XG4uZ2x5cGhpY29uLXN0b3AgICAgICAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMDc0XCI7IH0gfVxuLmdseXBoaWNvbi1mb3J3YXJkICAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTA3NVwiOyB9IH1cbi5nbHlwaGljb24tZmFzdC1mb3J3YXJkICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUwNzZcIjsgfSB9XG4uZ2x5cGhpY29uLXN0ZXAtZm9yd2FyZCAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMDc3XCI7IH0gfVxuLmdseXBoaWNvbi1lamVjdCAgICAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTA3OFwiOyB9IH1cbi5nbHlwaGljb24tY2hldnJvbi1sZWZ0ICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUwNzlcIjsgfSB9XG4uZ2x5cGhpY29uLWNoZXZyb24tcmlnaHQgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMDgwXCI7IH0gfVxuLmdseXBoaWNvbi1wbHVzLXNpZ24gICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTA4MVwiOyB9IH1cbi5nbHlwaGljb24tbWludXMtc2lnbiAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUwODJcIjsgfSB9XG4uZ2x5cGhpY29uLXJlbW92ZS1zaWduICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMDgzXCI7IH0gfVxuLmdseXBoaWNvbi1vay1zaWduICAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTA4NFwiOyB9IH1cbi5nbHlwaGljb24tcXVlc3Rpb24tc2lnbiAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUwODVcIjsgfSB9XG4uZ2x5cGhpY29uLWluZm8tc2lnbiAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMDg2XCI7IH0gfVxuLmdseXBoaWNvbi1zY3JlZW5zaG90ICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTA4N1wiOyB9IH1cbi5nbHlwaGljb24tcmVtb3ZlLWNpcmNsZSAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUwODhcIjsgfSB9XG4uZ2x5cGhpY29uLW9rLWNpcmNsZSAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMDg5XCI7IH0gfVxuLmdseXBoaWNvbi1iYW4tY2lyY2xlICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTA5MFwiOyB9IH1cbi5nbHlwaGljb24tYXJyb3ctbGVmdCAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUwOTFcIjsgfSB9XG4uZ2x5cGhpY29uLWFycm93LXJpZ2h0ICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMDkyXCI7IH0gfVxuLmdseXBoaWNvbi1hcnJvdy11cCAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTA5M1wiOyB9IH1cbi5nbHlwaGljb24tYXJyb3ctZG93biAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUwOTRcIjsgfSB9XG4uZ2x5cGhpY29uLXNoYXJlLWFsdCAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMDk1XCI7IH0gfVxuLmdseXBoaWNvbi1yZXNpemUtZnVsbCAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTA5NlwiOyB9IH1cbi5nbHlwaGljb24tcmVzaXplLXNtYWxsICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUwOTdcIjsgfSB9XG4uZ2x5cGhpY29uLWV4Y2xhbWF0aW9uLXNpZ24gICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMTAxXCI7IH0gfVxuLmdseXBoaWNvbi1naWZ0ICAgICAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTEwMlwiOyB9IH1cbi5nbHlwaGljb24tbGVhZiAgICAgICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUxMDNcIjsgfSB9XG4uZ2x5cGhpY29uLWZpcmUgICAgICAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMTA0XCI7IH0gfVxuLmdseXBoaWNvbi1leWUtb3BlbiAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTEwNVwiOyB9IH1cbi5nbHlwaGljb24tZXllLWNsb3NlICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUxMDZcIjsgfSB9XG4uZ2x5cGhpY29uLXdhcm5pbmctc2lnbiAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMTA3XCI7IH0gfVxuLmdseXBoaWNvbi1wbGFuZSAgICAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTEwOFwiOyB9IH1cbi5nbHlwaGljb24tY2FsZW5kYXIgICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUxMDlcIjsgfSB9XG4uZ2x5cGhpY29uLXJhbmRvbSAgICAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMTEwXCI7IH0gfVxuLmdseXBoaWNvbi1jb21tZW50ICAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTExMVwiOyB9IH1cbi5nbHlwaGljb24tbWFnbmV0ICAgICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUxMTJcIjsgfSB9XG4uZ2x5cGhpY29uLWNoZXZyb24tdXAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMTEzXCI7IH0gfVxuLmdseXBoaWNvbi1jaGV2cm9uLWRvd24gICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTExNFwiOyB9IH1cbi5nbHlwaGljb24tcmV0d2VldCAgICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUxMTVcIjsgfSB9XG4uZ2x5cGhpY29uLXNob3BwaW5nLWNhcnQgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMTE2XCI7IH0gfVxuLmdseXBoaWNvbi1mb2xkZXItY2xvc2UgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTExN1wiOyB9IH1cbi5nbHlwaGljb24tZm9sZGVyLW9wZW4gICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUxMThcIjsgfSB9XG4uZ2x5cGhpY29uLXJlc2l6ZS12ZXJ0aWNhbCAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMTE5XCI7IH0gfVxuLmdseXBoaWNvbi1yZXNpemUtaG9yaXpvbnRhbCAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTEyMFwiOyB9IH1cbi5nbHlwaGljb24taGRkICAgICAgICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUxMjFcIjsgfSB9XG4uZ2x5cGhpY29uLWJ1bGxob3JuICAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMTIyXCI7IH0gfVxuLmdseXBoaWNvbi1iZWxsICAgICAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTEyM1wiOyB9IH1cbi5nbHlwaGljb24tY2VydGlmaWNhdGUgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUxMjRcIjsgfSB9XG4uZ2x5cGhpY29uLXRodW1icy11cCAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMTI1XCI7IH0gfVxuLmdseXBoaWNvbi10aHVtYnMtZG93biAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTEyNlwiOyB9IH1cbi5nbHlwaGljb24taGFuZC1yaWdodCAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUxMjdcIjsgfSB9XG4uZ2x5cGhpY29uLWhhbmQtbGVmdCAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMTI4XCI7IH0gfVxuLmdseXBoaWNvbi1oYW5kLXVwICAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTEyOVwiOyB9IH1cbi5nbHlwaGljb24taGFuZC1kb3duICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUxMzBcIjsgfSB9XG4uZ2x5cGhpY29uLWNpcmNsZS1hcnJvdy1yaWdodCAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMTMxXCI7IH0gfVxuLmdseXBoaWNvbi1jaXJjbGUtYXJyb3ctbGVmdCAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTEzMlwiOyB9IH1cbi5nbHlwaGljb24tY2lyY2xlLWFycm93LXVwICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUxMzNcIjsgfSB9XG4uZ2x5cGhpY29uLWNpcmNsZS1hcnJvdy1kb3duICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMTM0XCI7IH0gfVxuLmdseXBoaWNvbi1nbG9iZSAgICAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTEzNVwiOyB9IH1cbi5nbHlwaGljb24td3JlbmNoICAgICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUxMzZcIjsgfSB9XG4uZ2x5cGhpY29uLXRhc2tzICAgICAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMTM3XCI7IH0gfVxuLmdseXBoaWNvbi1maWx0ZXIgICAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTEzOFwiOyB9IH1cbi5nbHlwaGljb24tYnJpZWZjYXNlICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUxMzlcIjsgfSB9XG4uZ2x5cGhpY29uLWZ1bGxzY3JlZW4gICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMTQwXCI7IH0gfVxuLmdseXBoaWNvbi1kYXNoYm9hcmQgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTE0MVwiOyB9IH1cbi5nbHlwaGljb24tcGFwZXJjbGlwICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUxNDJcIjsgfSB9XG4uZ2x5cGhpY29uLWhlYXJ0LWVtcHR5ICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMTQzXCI7IH0gfVxuLmdseXBoaWNvbi1saW5rICAgICAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTE0NFwiOyB9IH1cbi5nbHlwaGljb24tcGhvbmUgICAgICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUxNDVcIjsgfSB9XG4uZ2x5cGhpY29uLXB1c2hwaW4gICAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMTQ2XCI7IH0gfVxuLmdseXBoaWNvbi11c2QgICAgICAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTE0OFwiOyB9IH1cbi5nbHlwaGljb24tZ2JwICAgICAgICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUxNDlcIjsgfSB9XG4uZ2x5cGhpY29uLXNvcnQgICAgICAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMTUwXCI7IH0gfVxuLmdseXBoaWNvbi1zb3J0LWJ5LWFscGhhYmV0ICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTE1MVwiOyB9IH1cbi5nbHlwaGljb24tc29ydC1ieS1hbHBoYWJldC1hbHQgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUxNTJcIjsgfSB9XG4uZ2x5cGhpY29uLXNvcnQtYnktb3JkZXIgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMTUzXCI7IH0gfVxuLmdseXBoaWNvbi1zb3J0LWJ5LW9yZGVyLWFsdCAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTE1NFwiOyB9IH1cbi5nbHlwaGljb24tc29ydC1ieS1hdHRyaWJ1dGVzICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUxNTVcIjsgfSB9XG4uZ2x5cGhpY29uLXNvcnQtYnktYXR0cmlidXRlcy1hbHQgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMTU2XCI7IH0gfVxuLmdseXBoaWNvbi11bmNoZWNrZWQgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTE1N1wiOyB9IH1cbi5nbHlwaGljb24tZXhwYW5kICAgICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUxNThcIjsgfSB9XG4uZ2x5cGhpY29uLWNvbGxhcHNlLWRvd24gICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMTU5XCI7IH0gfVxuLmdseXBoaWNvbi1jb2xsYXBzZS11cCAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTE2MFwiOyB9IH1cbi5nbHlwaGljb24tbG9nLWluICAgICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUxNjFcIjsgfSB9XG4uZ2x5cGhpY29uLWZsYXNoICAgICAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMTYyXCI7IH0gfVxuLmdseXBoaWNvbi1sb2ctb3V0ICAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTE2M1wiOyB9IH1cbi5nbHlwaGljb24tbmV3LXdpbmRvdyAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUxNjRcIjsgfSB9XG4uZ2x5cGhpY29uLXJlY29yZCAgICAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMTY1XCI7IH0gfVxuLmdseXBoaWNvbi1zYXZlICAgICAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTE2NlwiOyB9IH1cbi5nbHlwaGljb24tb3BlbiAgICAgICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUxNjdcIjsgfSB9XG4uZ2x5cGhpY29uLXNhdmVkICAgICAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMTY4XCI7IH0gfVxuLmdseXBoaWNvbi1pbXBvcnQgICAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTE2OVwiOyB9IH1cbi5nbHlwaGljb24tZXhwb3J0ICAgICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUxNzBcIjsgfSB9XG4uZ2x5cGhpY29uLXNlbmQgICAgICAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMTcxXCI7IH0gfVxuLmdseXBoaWNvbi1mbG9wcHktZGlzayAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTE3MlwiOyB9IH1cbi5nbHlwaGljb24tZmxvcHB5LXNhdmVkICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUxNzNcIjsgfSB9XG4uZ2x5cGhpY29uLWZsb3BweS1yZW1vdmUgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMTc0XCI7IH0gfVxuLmdseXBoaWNvbi1mbG9wcHktc2F2ZSAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTE3NVwiOyB9IH1cbi5nbHlwaGljb24tZmxvcHB5LW9wZW4gICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUxNzZcIjsgfSB9XG4uZ2x5cGhpY29uLWNyZWRpdC1jYXJkICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMTc3XCI7IH0gfVxuLmdseXBoaWNvbi10cmFuc2ZlciAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTE3OFwiOyB9IH1cbi5nbHlwaGljb24tY3V0bGVyeSAgICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUxNzlcIjsgfSB9XG4uZ2x5cGhpY29uLWhlYWRlciAgICAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMTgwXCI7IH0gfVxuLmdseXBoaWNvbi1jb21wcmVzc2VkICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTE4MVwiOyB9IH1cbi5nbHlwaGljb24tZWFycGhvbmUgICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUxODJcIjsgfSB9XG4uZ2x5cGhpY29uLXBob25lLWFsdCAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMTgzXCI7IH0gfVxuLmdseXBoaWNvbi10b3dlciAgICAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTE4NFwiOyB9IH1cbi5nbHlwaGljb24tc3RhdHMgICAgICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUxODVcIjsgfSB9XG4uZ2x5cGhpY29uLXNkLXZpZGVvICAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMTg2XCI7IH0gfVxuLmdseXBoaWNvbi1oZC12aWRlbyAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTE4N1wiOyB9IH1cbi5nbHlwaGljb24tc3VidGl0bGVzICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUxODhcIjsgfSB9XG4uZ2x5cGhpY29uLXNvdW5kLXN0ZXJlbyAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMTg5XCI7IH0gfVxuLmdseXBoaWNvbi1zb3VuZC1kb2xieSAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTE5MFwiOyB9IH1cbi5nbHlwaGljb24tc291bmQtNS0xICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUxOTFcIjsgfSB9XG4uZ2x5cGhpY29uLXNvdW5kLTYtMSAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMTkyXCI7IH0gfVxuLmdseXBoaWNvbi1zb3VuZC03LTEgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTE5M1wiOyB9IH1cbi5nbHlwaGljb24tY29weXJpZ2h0LW1hcmsgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUxOTRcIjsgfSB9XG4uZ2x5cGhpY29uLXJlZ2lzdHJhdGlvbi1tYXJrICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMTk1XCI7IH0gfVxuLmdseXBoaWNvbi1jbG91ZC1kb3dubG9hZCAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTE5N1wiOyB9IH1cbi5nbHlwaGljb24tY2xvdWQtdXBsb2FkICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUxOThcIjsgfSB9XG4uZ2x5cGhpY29uLXRyZWUtY29uaWZlciAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMTk5XCI7IH0gfVxuLmdseXBoaWNvbi10cmVlLWRlY2lkdW91cyAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTIwMFwiOyB9IH1cbi5nbHlwaGljb24tY2QgICAgICAgICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUyMDFcIjsgfSB9XG4uZ2x5cGhpY29uLXNhdmUtZmlsZSAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMjAyXCI7IH0gfVxuLmdseXBoaWNvbi1vcGVuLWZpbGUgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTIwM1wiOyB9IH1cbi5nbHlwaGljb24tbGV2ZWwtdXAgICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUyMDRcIjsgfSB9XG4uZ2x5cGhpY29uLWNvcHkgICAgICAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMjA1XCI7IH0gfVxuLmdseXBoaWNvbi1wYXN0ZSAgICAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTIwNlwiOyB9IH1cbi8vIFRoZSBmb2xsb3dpbmcgMiBHbHlwaGljb25zIGFyZSBvbWl0dGVkIGZvciB0aGUgdGltZSBiZWluZyBiZWNhdXNlXG4vLyB0aGV5IGN1cnJlbnRseSB1c2UgVW5pY29kZSBjb2RlcG9pbnRzIHRoYXQgYXJlIG91dHNpZGUgdGhlXG4vLyBCYXNpYyBNdWx0aWxpbmd1YWwgUGxhbmUgKEJNUCkuIE9sZGVyIGJ1Z2d5IHZlcnNpb25zIG9mIFdlYktpdCBjYW4ndCBoYW5kbGVcbi8vIG5vbi1CTVAgY29kZXBvaW50cyBpbiBDU1Mgc3RyaW5nIGVzY2FwZXMsIGFuZCB0aHVzIGNhbid0IGRpc3BsYXkgdGhlc2UgdHdvIGljb25zLlxuLy8gTm90YWJseSwgdGhlIGJ1ZyBhZmZlY3RzIHNvbWUgb2xkZXIgdmVyc2lvbnMgb2YgdGhlIEFuZHJvaWQgQnJvd3Nlci5cbi8vIE1vcmUgaW5mbzogaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2lzc3Vlcy8xMDEwNlxuLy8gLmdseXBoaWNvbi1kb29yICAgICAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcMWY2YWFcIjsgfSB9XG4vLyAuZ2x5cGhpY29uLWtleSAgICAgICAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFwxZjUxMVwiOyB9IH1cbi5nbHlwaGljb24tYWxlcnQgICAgICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUyMDlcIjsgfSB9XG4uZ2x5cGhpY29uLWVxdWFsaXplciAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMjEwXCI7IH0gfVxuLmdseXBoaWNvbi1raW5nICAgICAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTIxMVwiOyB9IH1cbi5nbHlwaGljb24tcXVlZW4gICAgICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUyMTJcIjsgfSB9XG4uZ2x5cGhpY29uLXBhd24gICAgICAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMjEzXCI7IH0gfVxuLmdseXBoaWNvbi1iaXNob3AgICAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTIxNFwiOyB9IH1cbi5nbHlwaGljb24ta25pZ2h0ICAgICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUyMTVcIjsgfSB9XG4uZ2x5cGhpY29uLWJhYnktZm9ybXVsYSAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMjE2XCI7IH0gfVxuLmdseXBoaWNvbi10ZW50ICAgICAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcMjZmYVwiOyB9IH1cbi5nbHlwaGljb24tYmxhY2tib2FyZCAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUyMThcIjsgfSB9XG4uZ2x5cGhpY29uLWJlZCAgICAgICAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMjE5XCI7IH0gfVxuLmdseXBoaWNvbi1hcHBsZSAgICAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZjhmZlwiOyB9IH1cbi5nbHlwaGljb24tZXJhc2UgICAgICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUyMjFcIjsgfSB9XG4uZ2x5cGhpY29uLWhvdXJnbGFzcyAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFwyMzFiXCI7IH0gfVxuLmdseXBoaWNvbi1sYW1wICAgICAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTIyM1wiOyB9IH1cbi5nbHlwaGljb24tZHVwbGljYXRlICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUyMjRcIjsgfSB9XG4uZ2x5cGhpY29uLXBpZ2d5LWJhbmsgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMjI1XCI7IH0gfVxuLmdseXBoaWNvbi1zY2lzc29ycyAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTIyNlwiOyB9IH1cbi5nbHlwaGljb24tYml0Y29pbiAgICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUyMjdcIjsgfSB9XG4uZ2x5cGhpY29uLWJ0YyAgICAgICAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMjI3XCI7IH0gfVxuLmdseXBoaWNvbi14YnQgICAgICAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTIyN1wiOyB9IH1cbi5nbHlwaGljb24teWVuICAgICAgICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXDAwYTVcIjsgfSB9XG4uZ2x5cGhpY29uLWpweSAgICAgICAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFwwMGE1XCI7IH0gfVxuLmdseXBoaWNvbi1ydWJsZSAgICAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcMjBiZFwiOyB9IH1cbi5nbHlwaGljb24tcnViICAgICAgICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXDIwYmRcIjsgfSB9XG4uZ2x5cGhpY29uLXNjYWxlICAgICAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMjMwXCI7IH0gfVxuLmdseXBoaWNvbi1pY2UtbG9sbHkgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTIzMVwiOyB9IH1cbi5nbHlwaGljb24taWNlLWxvbGx5LXRhc3RlZCAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUyMzJcIjsgfSB9XG4uZ2x5cGhpY29uLWVkdWNhdGlvbiAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMjMzXCI7IH0gfVxuLmdseXBoaWNvbi1vcHRpb24taG9yaXpvbnRhbCAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTIzNFwiOyB9IH1cbi5nbHlwaGljb24tb3B0aW9uLXZlcnRpY2FsICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUyMzVcIjsgfSB9XG4uZ2x5cGhpY29uLW1lbnUtaGFtYnVyZ2VyICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMjM2XCI7IH0gfVxuLmdseXBoaWNvbi1tb2RhbC13aW5kb3cgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTIzN1wiOyB9IH1cbi5nbHlwaGljb24tb2lsICAgICAgICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUyMzhcIjsgfSB9XG4uZ2x5cGhpY29uLWdyYWluICAgICAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMjM5XCI7IH0gfVxuLmdseXBoaWNvbi1zdW5nbGFzc2VzICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTI0MFwiOyB9IH1cbi5nbHlwaGljb24tdGV4dC1zaXplICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUyNDFcIjsgfSB9XG4uZ2x5cGhpY29uLXRleHQtY29sb3IgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMjQyXCI7IH0gfVxuLmdseXBoaWNvbi10ZXh0LWJhY2tncm91bmQgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTI0M1wiOyB9IH1cbi5nbHlwaGljb24tb2JqZWN0LWFsaWduLXRvcCAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUyNDRcIjsgfSB9XG4uZ2x5cGhpY29uLW9iamVjdC1hbGlnbi1ib3R0b20gICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMjQ1XCI7IH0gfVxuLmdseXBoaWNvbi1vYmplY3QtYWxpZ24taG9yaXpvbnRhbHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTI0NlwiOyB9IH1cbi5nbHlwaGljb24tb2JqZWN0LWFsaWduLWxlZnQgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUyNDdcIjsgfSB9XG4uZ2x5cGhpY29uLW9iamVjdC1hbGlnbi12ZXJ0aWNhbCAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMjQ4XCI7IH0gfVxuLmdseXBoaWNvbi1vYmplY3QtYWxpZ24tcmlnaHQgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTI0OVwiOyB9IH1cbi5nbHlwaGljb24tdHJpYW5nbGUtcmlnaHQgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUyNTBcIjsgfSB9XG4uZ2x5cGhpY29uLXRyaWFuZ2xlLWxlZnQgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMjUxXCI7IH0gfVxuLmdseXBoaWNvbi10cmlhbmdsZS1ib3R0b20gICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTI1MlwiOyB9IH1cbi5nbHlwaGljb24tdHJpYW5nbGUtdG9wICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUyNTNcIjsgfSB9XG4uZ2x5cGhpY29uLWNvbnNvbGUgICAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMjU0XCI7IH0gfVxuLmdseXBoaWNvbi1zdXBlcnNjcmlwdCAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTI1NVwiOyB9IH1cbi5nbHlwaGljb24tc3Vic2NyaXB0ICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUyNTZcIjsgfSB9XG4uZ2x5cGhpY29uLW1lbnUtbGVmdCAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMjU3XCI7IH0gfVxuLmdseXBoaWNvbi1tZW51LXJpZ2h0ICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTI1OFwiOyB9IH1cbi5nbHlwaGljb24tbWVudS1kb3duICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUyNTlcIjsgfSB9XG4uZ2x5cGhpY29uLW1lbnUtdXAgICAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMjYwXCI7IH0gfVxuIiwiLy9cbi8vIFNjYWZmb2xkaW5nXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5cbi8vIFJlc2V0IHRoZSBib3gtc2l6aW5nXG4vL1xuLy8gSGVhZHMgdXAhIFRoaXMgcmVzZXQgbWF5IGNhdXNlIGNvbmZsaWN0cyB3aXRoIHNvbWUgdGhpcmQtcGFydHkgd2lkZ2V0cy5cbi8vIEZvciByZWNvbW1lbmRhdGlvbnMgb24gcmVzb2x2aW5nIHN1Y2ggY29uZmxpY3RzLCBzZWVcbi8vIGh0dHA6Ly9nZXRib290c3RyYXAuY29tL2dldHRpbmctc3RhcnRlZC8jdGhpcmQtYm94LXNpemluZ1xuKiB7XG4gIEBpbmNsdWRlIGJveC1zaXppbmcoYm9yZGVyLWJveCk7XG59XG4qOmJlZm9yZSxcbio6YWZ0ZXIge1xuICBAaW5jbHVkZSBib3gtc2l6aW5nKGJvcmRlci1ib3gpO1xufVxuXG5cbi8vIEJvZHkgcmVzZXRcblxuaHRtbCB7XG4gIGZvbnQtc2l6ZTogMTBweDtcbiAgLXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOiByZ2JhKDAsMCwwLDApO1xufVxuXG5ib2R5IHtcbiAgZm9udC1mYW1pbHk6ICRmb250LWZhbWlseS1iYXNlO1xuICBmb250LXNpemU6ICRmb250LXNpemUtYmFzZTtcbiAgbGluZS1oZWlnaHQ6ICRsaW5lLWhlaWdodC1iYXNlO1xuICBjb2xvcjogJHRleHQtY29sb3I7XG4gIGJhY2tncm91bmQtY29sb3I6ICRib2R5LWJnO1xufVxuXG4vLyBSZXNldCBmb250cyBmb3IgcmVsZXZhbnQgZWxlbWVudHNcbmlucHV0LFxuYnV0dG9uLFxuc2VsZWN0LFxudGV4dGFyZWEge1xuICBmb250LWZhbWlseTogaW5oZXJpdDtcbiAgZm9udC1zaXplOiBpbmhlcml0O1xuICBsaW5lLWhlaWdodDogaW5oZXJpdDtcbn1cblxuXG4vLyBMaW5rc1xuXG5hIHtcbiAgY29sb3I6ICRsaW5rLWNvbG9yO1xuICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG5cbiAgJjpob3ZlcixcbiAgJjpmb2N1cyB7XG4gICAgY29sb3I6ICRsaW5rLWhvdmVyLWNvbG9yO1xuICAgIHRleHQtZGVjb3JhdGlvbjogJGxpbmstaG92ZXItZGVjb3JhdGlvbjtcbiAgfVxuXG4gICY6Zm9jdXMge1xuICAgIEBpbmNsdWRlIHRhYi1mb2N1cztcbiAgfVxufVxuXG5cbi8vIEZpZ3VyZXNcbi8vXG4vLyBXZSByZXNldCB0aGlzIGhlcmUgYmVjYXVzZSBwcmV2aW91c2x5IE5vcm1hbGl6ZSBoYWQgbm8gYGZpZ3VyZWAgbWFyZ2lucy4gVGhpc1xuLy8gZW5zdXJlcyB3ZSBkb24ndCBicmVhayBhbnlvbmUncyB1c2Ugb2YgdGhlIGVsZW1lbnQuXG5cbmZpZ3VyZSB7XG4gIG1hcmdpbjogMDtcbn1cblxuXG4vLyBJbWFnZXNcblxuaW1nIHtcbiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbn1cblxuLy8gUmVzcG9uc2l2ZSBpbWFnZXMgKGVuc3VyZSBpbWFnZXMgZG9uJ3Qgc2NhbGUgYmV5b25kIHRoZWlyIHBhcmVudHMpXG4uaW1nLXJlc3BvbnNpdmUge1xuICBAaW5jbHVkZSBpbWctcmVzcG9uc2l2ZTtcbn1cblxuLy8gUm91bmRlZCBjb3JuZXJzXG4uaW1nLXJvdW5kZWQge1xuICBib3JkZXItcmFkaXVzOiAkYm9yZGVyLXJhZGl1cy1sYXJnZTtcbn1cblxuLy8gSW1hZ2UgdGh1bWJuYWlsc1xuLy9cbi8vIEhlYWRzIHVwISBUaGlzIGlzIG1peGluLWVkIGludG8gdGh1bWJuYWlscy5sZXNzIGZvciBgLnRodW1ibmFpbGAuXG4uaW1nLXRodW1ibmFpbCB7XG4gIHBhZGRpbmc6ICR0aHVtYm5haWwtcGFkZGluZztcbiAgbGluZS1oZWlnaHQ6ICRsaW5lLWhlaWdodC1iYXNlO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAkdGh1bWJuYWlsLWJnO1xuICBib3JkZXI6IDFweCBzb2xpZCAkdGh1bWJuYWlsLWJvcmRlcjtcbiAgYm9yZGVyLXJhZGl1czogJHRodW1ibmFpbC1ib3JkZXItcmFkaXVzO1xuICBAaW5jbHVkZSB0cmFuc2l0aW9uKGFsbCAuMnMgZWFzZS1pbi1vdXQpO1xuXG4gIC8vIEtlZXAgdGhlbSBhdCBtb3N0IDEwMCUgd2lkZVxuICBAaW5jbHVkZSBpbWctcmVzcG9uc2l2ZShpbmxpbmUtYmxvY2spO1xufVxuXG4vLyBQZXJmZWN0IGNpcmNsZVxuLmltZy1jaXJjbGUge1xuICBib3JkZXItcmFkaXVzOiA1MCU7IC8vIHNldCByYWRpdXMgaW4gcGVyY2VudHNcbn1cblxuXG4vLyBIb3Jpem9udGFsIHJ1bGVzXG5cbmhyIHtcbiAgbWFyZ2luLXRvcDogICAgJGxpbmUtaGVpZ2h0LWNvbXB1dGVkO1xuICBtYXJnaW4tYm90dG9tOiAkbGluZS1oZWlnaHQtY29tcHV0ZWQ7XG4gIGJvcmRlcjogMDtcbiAgYm9yZGVyLXRvcDogMXB4IHNvbGlkICRoci1ib3JkZXI7XG59XG5cblxuLy8gT25seSBkaXNwbGF5IGNvbnRlbnQgdG8gc2NyZWVuIHJlYWRlcnNcbi8vXG4vLyBTZWU6IGh0dHA6Ly9hMTF5cHJvamVjdC5jb20vcG9zdHMvaG93LXRvLWhpZGUtY29udGVudC9cblxuLnNyLW9ubHkge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHdpZHRoOiAxcHg7XG4gIGhlaWdodDogMXB4O1xuICBtYXJnaW46IC0xcHg7XG4gIHBhZGRpbmc6IDA7XG4gIG92ZXJmbG93OiBoaWRkZW47XG4gIGNsaXA6IHJlY3QoMCwwLDAsMCk7XG4gIGJvcmRlcjogMDtcbn1cblxuLy8gVXNlIGluIGNvbmp1bmN0aW9uIHdpdGggLnNyLW9ubHkgdG8gb25seSBkaXNwbGF5IGNvbnRlbnQgd2hlbiBpdCdzIGZvY3VzZWQuXG4vLyBVc2VmdWwgZm9yIFwiU2tpcCB0byBtYWluIGNvbnRlbnRcIiBsaW5rczsgc2VlIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMTMvTk9URS1XQ0FHMjAtVEVDSFMtMjAxMzA5MDUvRzFcbi8vIENyZWRpdDogSFRNTDUgQm9pbGVycGxhdGVcblxuLnNyLW9ubHktZm9jdXNhYmxlIHtcbiAgJjphY3RpdmUsXG4gICY6Zm9jdXMge1xuICAgIHBvc2l0aW9uOiBzdGF0aWM7XG4gICAgd2lkdGg6IGF1dG87XG4gICAgaGVpZ2h0OiBhdXRvO1xuICAgIG1hcmdpbjogMDtcbiAgICBvdmVyZmxvdzogdmlzaWJsZTtcbiAgICBjbGlwOiBhdXRvO1xuICB9XG59XG5cblxuLy8gaU9TIFwiY2xpY2thYmxlIGVsZW1lbnRzXCIgZml4IGZvciByb2xlPVwiYnV0dG9uXCJcbi8vXG4vLyBGaXhlcyBcImNsaWNrYWJpbGl0eVwiIGlzc3VlIChhbmQgbW9yZSBnZW5lcmFsbHksIHRoZSBmaXJpbmcgb2YgZXZlbnRzIHN1Y2ggYXMgZm9jdXMgYXMgd2VsbClcbi8vIGZvciB0cmFkaXRpb25hbGx5IG5vbi1mb2N1c2FibGUgZWxlbWVudHMgd2l0aCByb2xlPVwiYnV0dG9uXCJcbi8vIHNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9FdmVudHMvY2xpY2sjU2FmYXJpX01vYmlsZVxuLy8gVXBzdHJlYW0gcGF0Y2ggZm9yIG5vcm1hbGl6ZS5jc3Mgc3VibWl0dGVkOiBodHRwczovL2dpdGh1Yi5jb20vbmVjb2xhcy9ub3JtYWxpemUuY3NzL3B1bGwvMzc5IC0gcmVtb3ZlIHRoaXMgZml4IG9uY2UgdGhhdCBpcyBtZXJnZWRcblxuW3JvbGU9XCJidXR0b25cIl0ge1xuICBjdXJzb3I6IHBvaW50ZXI7XG59IiwiLy8gVmVuZG9yIFByZWZpeGVzXG4vL1xuLy8gQWxsIHZlbmRvciBtaXhpbnMgYXJlIGRlcHJlY2F0ZWQgYXMgb2YgdjMuMi4wIGR1ZSB0byB0aGUgaW50cm9kdWN0aW9uIG9mXG4vLyBBdXRvcHJlZml4ZXIgaW4gb3VyIEdydW50ZmlsZS4gVGhleSB3aWxsIGJlIHJlbW92ZWQgaW4gdjQuXG5cbi8vIC0gQW5pbWF0aW9uc1xuLy8gLSBCYWNrZmFjZSB2aXNpYmlsaXR5XG4vLyAtIEJveCBzaGFkb3dcbi8vIC0gQm94IHNpemluZ1xuLy8gLSBDb250ZW50IGNvbHVtbnNcbi8vIC0gSHlwaGVuc1xuLy8gLSBQbGFjZWhvbGRlciB0ZXh0XG4vLyAtIFRyYW5zZm9ybWF0aW9uc1xuLy8gLSBUcmFuc2l0aW9uc1xuLy8gLSBVc2VyIFNlbGVjdFxuXG5cbi8vIEFuaW1hdGlvbnNcbkBtaXhpbiBhbmltYXRpb24oJGFuaW1hdGlvbikge1xuICAtd2Via2l0LWFuaW1hdGlvbjogJGFuaW1hdGlvbjtcbiAgICAgICAtby1hbmltYXRpb246ICRhbmltYXRpb247XG4gICAgICAgICAgYW5pbWF0aW9uOiAkYW5pbWF0aW9uO1xufVxuQG1peGluIGFuaW1hdGlvbi1uYW1lKCRuYW1lKSB7XG4gIC13ZWJraXQtYW5pbWF0aW9uLW5hbWU6ICRuYW1lO1xuICAgICAgICAgIGFuaW1hdGlvbi1uYW1lOiAkbmFtZTtcbn1cbkBtaXhpbiBhbmltYXRpb24tZHVyYXRpb24oJGR1cmF0aW9uKSB7XG4gIC13ZWJraXQtYW5pbWF0aW9uLWR1cmF0aW9uOiAkZHVyYXRpb247XG4gICAgICAgICAgYW5pbWF0aW9uLWR1cmF0aW9uOiAkZHVyYXRpb247XG59XG5AbWl4aW4gYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbigkdGltaW5nLWZ1bmN0aW9uKSB7XG4gIC13ZWJraXQtYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogJHRpbWluZy1mdW5jdGlvbjtcbiAgICAgICAgICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiAkdGltaW5nLWZ1bmN0aW9uO1xufVxuQG1peGluIGFuaW1hdGlvbi1kZWxheSgkZGVsYXkpIHtcbiAgLXdlYmtpdC1hbmltYXRpb24tZGVsYXk6ICRkZWxheTtcbiAgICAgICAgICBhbmltYXRpb24tZGVsYXk6ICRkZWxheTtcbn1cbkBtaXhpbiBhbmltYXRpb24taXRlcmF0aW9uLWNvdW50KCRpdGVyYXRpb24tY291bnQpIHtcbiAgLXdlYmtpdC1hbmltYXRpb24taXRlcmF0aW9uLWNvdW50OiAkaXRlcmF0aW9uLWNvdW50O1xuICAgICAgICAgIGFuaW1hdGlvbi1pdGVyYXRpb24tY291bnQ6ICRpdGVyYXRpb24tY291bnQ7XG59XG5AbWl4aW4gYW5pbWF0aW9uLWRpcmVjdGlvbigkZGlyZWN0aW9uKSB7XG4gIC13ZWJraXQtYW5pbWF0aW9uLWRpcmVjdGlvbjogJGRpcmVjdGlvbjtcbiAgICAgICAgICBhbmltYXRpb24tZGlyZWN0aW9uOiAkZGlyZWN0aW9uO1xufVxuQG1peGluIGFuaW1hdGlvbi1maWxsLW1vZGUoJGZpbGwtbW9kZSkge1xuICAtd2Via2l0LWFuaW1hdGlvbi1maWxsLW1vZGU6ICRmaWxsLW1vZGU7XG4gICAgICAgICAgYW5pbWF0aW9uLWZpbGwtbW9kZTogJGZpbGwtbW9kZTtcbn1cblxuLy8gQmFja2ZhY2UgdmlzaWJpbGl0eVxuLy8gUHJldmVudCBicm93c2VycyBmcm9tIGZsaWNrZXJpbmcgd2hlbiB1c2luZyBDU1MgM0QgdHJhbnNmb3Jtcy5cbi8vIERlZmF1bHQgdmFsdWUgaXMgYHZpc2libGVgLCBidXQgY2FuIGJlIGNoYW5nZWQgdG8gYGhpZGRlbmBcblxuQG1peGluIGJhY2tmYWNlLXZpc2liaWxpdHkoJHZpc2liaWxpdHkpe1xuICAtd2Via2l0LWJhY2tmYWNlLXZpc2liaWxpdHk6ICR2aXNpYmlsaXR5O1xuICAgICAtbW96LWJhY2tmYWNlLXZpc2liaWxpdHk6ICR2aXNpYmlsaXR5O1xuICAgICAgICAgIGJhY2tmYWNlLXZpc2liaWxpdHk6ICR2aXNpYmlsaXR5O1xufVxuXG4vLyBEcm9wIHNoYWRvd3Ncbi8vXG4vLyBOb3RlOiBEZXByZWNhdGVkIGAuYm94LXNoYWRvdygpYCBhcyBvZiB2My4xLjAgc2luY2UgYWxsIG9mIEJvb3RzdHJhcCdzXG4vLyBzdXBwb3J0ZWQgYnJvd3NlcnMgdGhhdCBoYXZlIGJveCBzaGFkb3cgY2FwYWJpbGl0aWVzIG5vdyBzdXBwb3J0IGl0LlxuXG5AbWl4aW4gYm94LXNoYWRvdygkc2hhZG93Li4uKSB7XG4gIC13ZWJraXQtYm94LXNoYWRvdzogJHNoYWRvdzsgLy8gaU9TIDw0LjMgJiBBbmRyb2lkIDw0LjFcbiAgICAgICAgICBib3gtc2hhZG93OiAkc2hhZG93O1xufVxuXG4vLyBCb3ggc2l6aW5nXG5AbWl4aW4gYm94LXNpemluZygkYm94bW9kZWwpIHtcbiAgLXdlYmtpdC1ib3gtc2l6aW5nOiAkYm94bW9kZWw7XG4gICAgIC1tb3otYm94LXNpemluZzogJGJveG1vZGVsO1xuICAgICAgICAgIGJveC1zaXppbmc6ICRib3htb2RlbDtcbn1cblxuLy8gQ1NTMyBDb250ZW50IENvbHVtbnNcbkBtaXhpbiBjb250ZW50LWNvbHVtbnMoJGNvbHVtbi1jb3VudCwgJGNvbHVtbi1nYXA6ICRncmlkLWd1dHRlci13aWR0aCkge1xuICAtd2Via2l0LWNvbHVtbi1jb3VudDogJGNvbHVtbi1jb3VudDtcbiAgICAgLW1vei1jb2x1bW4tY291bnQ6ICRjb2x1bW4tY291bnQ7XG4gICAgICAgICAgY29sdW1uLWNvdW50OiAkY29sdW1uLWNvdW50O1xuICAtd2Via2l0LWNvbHVtbi1nYXA6ICRjb2x1bW4tZ2FwO1xuICAgICAtbW96LWNvbHVtbi1nYXA6ICRjb2x1bW4tZ2FwO1xuICAgICAgICAgIGNvbHVtbi1nYXA6ICRjb2x1bW4tZ2FwO1xufVxuXG4vLyBPcHRpb25hbCBoeXBoZW5hdGlvblxuQG1peGluIGh5cGhlbnMoJG1vZGU6IGF1dG8pIHtcbiAgd29yZC13cmFwOiBicmVhay13b3JkO1xuICAtd2Via2l0LWh5cGhlbnM6ICRtb2RlO1xuICAgICAtbW96LWh5cGhlbnM6ICRtb2RlO1xuICAgICAgLW1zLWh5cGhlbnM6ICRtb2RlOyAvLyBJRTEwK1xuICAgICAgIC1vLWh5cGhlbnM6ICRtb2RlO1xuICAgICAgICAgIGh5cGhlbnM6ICRtb2RlO1xufVxuXG4vLyBQbGFjZWhvbGRlciB0ZXh0XG5AbWl4aW4gcGxhY2Vob2xkZXIoJGNvbG9yOiAkaW5wdXQtY29sb3ItcGxhY2Vob2xkZXIpIHtcbiAgLy8gRmlyZWZveFxuICAmOjotbW96LXBsYWNlaG9sZGVyIHtcbiAgICBjb2xvcjogJGNvbG9yO1xuICAgIG9wYWNpdHk6IDE7IC8vIE92ZXJyaWRlIEZpcmVmb3gncyB1bnVzdWFsIGRlZmF1bHQgb3BhY2l0eTsgc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9wdWxsLzExNTI2XG4gIH1cbiAgJjotbXMtaW5wdXQtcGxhY2Vob2xkZXIgeyBjb2xvcjogJGNvbG9yOyB9IC8vIEludGVybmV0IEV4cGxvcmVyIDEwK1xuICAmOjotd2Via2l0LWlucHV0LXBsYWNlaG9sZGVyICB7IGNvbG9yOiAkY29sb3I7IH0gLy8gU2FmYXJpIGFuZCBDaHJvbWVcbn1cblxuLy8gVHJhbnNmb3JtYXRpb25zXG5AbWl4aW4gc2NhbGUoJHJhdGlvLi4uKSB7XG4gIC13ZWJraXQtdHJhbnNmb3JtOiBzY2FsZSgkcmF0aW8pO1xuICAgICAgLW1zLXRyYW5zZm9ybTogc2NhbGUoJHJhdGlvKTsgLy8gSUU5IG9ubHlcbiAgICAgICAtby10cmFuc2Zvcm06IHNjYWxlKCRyYXRpbyk7XG4gICAgICAgICAgdHJhbnNmb3JtOiBzY2FsZSgkcmF0aW8pO1xufVxuXG5AbWl4aW4gc2NhbGVYKCRyYXRpbykge1xuICAtd2Via2l0LXRyYW5zZm9ybTogc2NhbGVYKCRyYXRpbyk7XG4gICAgICAtbXMtdHJhbnNmb3JtOiBzY2FsZVgoJHJhdGlvKTsgLy8gSUU5IG9ubHlcbiAgICAgICAtby10cmFuc2Zvcm06IHNjYWxlWCgkcmF0aW8pO1xuICAgICAgICAgIHRyYW5zZm9ybTogc2NhbGVYKCRyYXRpbyk7XG59XG5AbWl4aW4gc2NhbGVZKCRyYXRpbykge1xuICAtd2Via2l0LXRyYW5zZm9ybTogc2NhbGVZKCRyYXRpbyk7XG4gICAgICAtbXMtdHJhbnNmb3JtOiBzY2FsZVkoJHJhdGlvKTsgLy8gSUU5IG9ubHlcbiAgICAgICAtby10cmFuc2Zvcm06IHNjYWxlWSgkcmF0aW8pO1xuICAgICAgICAgIHRyYW5zZm9ybTogc2NhbGVZKCRyYXRpbyk7XG59XG5AbWl4aW4gc2tldygkeCwgJHkpIHtcbiAgLXdlYmtpdC10cmFuc2Zvcm06IHNrZXdYKCR4KSBza2V3WSgkeSk7XG4gICAgICAtbXMtdHJhbnNmb3JtOiBza2V3WCgkeCkgc2tld1koJHkpOyAvLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2lzc3Vlcy80ODg1OyBJRTkrXG4gICAgICAgLW8tdHJhbnNmb3JtOiBza2V3WCgkeCkgc2tld1koJHkpO1xuICAgICAgICAgIHRyYW5zZm9ybTogc2tld1goJHgpIHNrZXdZKCR5KTtcbn1cbkBtaXhpbiB0cmFuc2xhdGUoJHgsICR5KSB7XG4gIC13ZWJraXQtdHJhbnNmb3JtOiB0cmFuc2xhdGUoJHgsICR5KTtcbiAgICAgIC1tcy10cmFuc2Zvcm06IHRyYW5zbGF0ZSgkeCwgJHkpOyAvLyBJRTkgb25seVxuICAgICAgIC1vLXRyYW5zZm9ybTogdHJhbnNsYXRlKCR4LCAkeSk7XG4gICAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoJHgsICR5KTtcbn1cbkBtaXhpbiB0cmFuc2xhdGUzZCgkeCwgJHksICR6KSB7XG4gIC13ZWJraXQtdHJhbnNmb3JtOiB0cmFuc2xhdGUzZCgkeCwgJHksICR6KTtcbiAgICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZTNkKCR4LCAkeSwgJHopO1xufVxuQG1peGluIHJvdGF0ZSgkZGVncmVlcykge1xuICAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKCRkZWdyZWVzKTtcbiAgICAgIC1tcy10cmFuc2Zvcm06IHJvdGF0ZSgkZGVncmVlcyk7IC8vIElFOSBvbmx5XG4gICAgICAgLW8tdHJhbnNmb3JtOiByb3RhdGUoJGRlZ3JlZXMpO1xuICAgICAgICAgIHRyYW5zZm9ybTogcm90YXRlKCRkZWdyZWVzKTtcbn1cbkBtaXhpbiByb3RhdGVYKCRkZWdyZWVzKSB7XG4gIC13ZWJraXQtdHJhbnNmb3JtOiByb3RhdGVYKCRkZWdyZWVzKTtcbiAgICAgIC1tcy10cmFuc2Zvcm06IHJvdGF0ZVgoJGRlZ3JlZXMpOyAvLyBJRTkgb25seVxuICAgICAgIC1vLXRyYW5zZm9ybTogcm90YXRlWCgkZGVncmVlcyk7XG4gICAgICAgICAgdHJhbnNmb3JtOiByb3RhdGVYKCRkZWdyZWVzKTtcbn1cbkBtaXhpbiByb3RhdGVZKCRkZWdyZWVzKSB7XG4gIC13ZWJraXQtdHJhbnNmb3JtOiByb3RhdGVZKCRkZWdyZWVzKTtcbiAgICAgIC1tcy10cmFuc2Zvcm06IHJvdGF0ZVkoJGRlZ3JlZXMpOyAvLyBJRTkgb25seVxuICAgICAgIC1vLXRyYW5zZm9ybTogcm90YXRlWSgkZGVncmVlcyk7XG4gICAgICAgICAgdHJhbnNmb3JtOiByb3RhdGVZKCRkZWdyZWVzKTtcbn1cbkBtaXhpbiBwZXJzcGVjdGl2ZSgkcGVyc3BlY3RpdmUpIHtcbiAgLXdlYmtpdC1wZXJzcGVjdGl2ZTogJHBlcnNwZWN0aXZlO1xuICAgICAtbW96LXBlcnNwZWN0aXZlOiAkcGVyc3BlY3RpdmU7XG4gICAgICAgICAgcGVyc3BlY3RpdmU6ICRwZXJzcGVjdGl2ZTtcbn1cbkBtaXhpbiBwZXJzcGVjdGl2ZS1vcmlnaW4oJHBlcnNwZWN0aXZlKSB7XG4gIC13ZWJraXQtcGVyc3BlY3RpdmUtb3JpZ2luOiAkcGVyc3BlY3RpdmU7XG4gICAgIC1tb3otcGVyc3BlY3RpdmUtb3JpZ2luOiAkcGVyc3BlY3RpdmU7XG4gICAgICAgICAgcGVyc3BlY3RpdmUtb3JpZ2luOiAkcGVyc3BlY3RpdmU7XG59XG5AbWl4aW4gdHJhbnNmb3JtLW9yaWdpbigkb3JpZ2luKSB7XG4gIC13ZWJraXQtdHJhbnNmb3JtLW9yaWdpbjogJG9yaWdpbjtcbiAgICAgLW1vei10cmFuc2Zvcm0tb3JpZ2luOiAkb3JpZ2luO1xuICAgICAgLW1zLXRyYW5zZm9ybS1vcmlnaW46ICRvcmlnaW47IC8vIElFOSBvbmx5XG4gICAgICAgICAgdHJhbnNmb3JtLW9yaWdpbjogJG9yaWdpbjtcbn1cblxuXG4vLyBUcmFuc2l0aW9uc1xuXG5AbWl4aW4gdHJhbnNpdGlvbigkdHJhbnNpdGlvbi4uLikge1xuICAtd2Via2l0LXRyYW5zaXRpb246ICR0cmFuc2l0aW9uO1xuICAgICAgIC1vLXRyYW5zaXRpb246ICR0cmFuc2l0aW9uO1xuICAgICAgICAgIHRyYW5zaXRpb246ICR0cmFuc2l0aW9uO1xufVxuQG1peGluIHRyYW5zaXRpb24tcHJvcGVydHkoJHRyYW5zaXRpb24tcHJvcGVydHkuLi4pIHtcbiAgLXdlYmtpdC10cmFuc2l0aW9uLXByb3BlcnR5OiAkdHJhbnNpdGlvbi1wcm9wZXJ0eTtcbiAgICAgICAgICB0cmFuc2l0aW9uLXByb3BlcnR5OiAkdHJhbnNpdGlvbi1wcm9wZXJ0eTtcbn1cbkBtaXhpbiB0cmFuc2l0aW9uLWRlbGF5KCR0cmFuc2l0aW9uLWRlbGF5KSB7XG4gIC13ZWJraXQtdHJhbnNpdGlvbi1kZWxheTogJHRyYW5zaXRpb24tZGVsYXk7XG4gICAgICAgICAgdHJhbnNpdGlvbi1kZWxheTogJHRyYW5zaXRpb24tZGVsYXk7XG59XG5AbWl4aW4gdHJhbnNpdGlvbi1kdXJhdGlvbigkdHJhbnNpdGlvbi1kdXJhdGlvbi4uLikge1xuICAtd2Via2l0LXRyYW5zaXRpb24tZHVyYXRpb246ICR0cmFuc2l0aW9uLWR1cmF0aW9uO1xuICAgICAgICAgIHRyYW5zaXRpb24tZHVyYXRpb246ICR0cmFuc2l0aW9uLWR1cmF0aW9uO1xufVxuQG1peGluIHRyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uKCR0aW1pbmctZnVuY3Rpb24pIHtcbiAgLXdlYmtpdC10cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbjogJHRpbWluZy1mdW5jdGlvbjtcbiAgICAgICAgICB0cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbjogJHRpbWluZy1mdW5jdGlvbjtcbn1cbkBtaXhpbiB0cmFuc2l0aW9uLXRyYW5zZm9ybSgkdHJhbnNpdGlvbi4uLikge1xuICAtd2Via2l0LXRyYW5zaXRpb246IC13ZWJraXQtdHJhbnNmb3JtICR0cmFuc2l0aW9uO1xuICAgICAtbW96LXRyYW5zaXRpb246IC1tb3otdHJhbnNmb3JtICR0cmFuc2l0aW9uO1xuICAgICAgIC1vLXRyYW5zaXRpb246IC1vLXRyYW5zZm9ybSAkdHJhbnNpdGlvbjtcbiAgICAgICAgICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gJHRyYW5zaXRpb247XG59XG5cblxuLy8gVXNlciBzZWxlY3Rcbi8vIEZvciBzZWxlY3RpbmcgdGV4dCBvbiB0aGUgcGFnZVxuXG5AbWl4aW4gdXNlci1zZWxlY3QoJHNlbGVjdCkge1xuICAtd2Via2l0LXVzZXItc2VsZWN0OiAkc2VsZWN0O1xuICAgICAtbW96LXVzZXItc2VsZWN0OiAkc2VsZWN0O1xuICAgICAgLW1zLXVzZXItc2VsZWN0OiAkc2VsZWN0OyAvLyBJRTEwK1xuICAgICAgICAgIHVzZXItc2VsZWN0OiAkc2VsZWN0O1xufVxuIiwiJGJvb3RzdHJhcC1zYXNzLWFzc2V0LWhlbHBlcjogZmFsc2UgIWRlZmF1bHQ7XG4vL1xuLy8gVmFyaWFibGVzXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5cbi8vPT0gQ29sb3JzXG4vL1xuLy8jIyBHcmF5IGFuZCBicmFuZCBjb2xvcnMgZm9yIHVzZSBhY3Jvc3MgQm9vdHN0cmFwLlxuXG4kZ3JheS1iYXNlOiAgICAgICAgICAgICAgIzAwMCAhZGVmYXVsdDtcbiRncmF5LWRhcmtlcjogICAgICAgICAgICBsaWdodGVuKCRncmF5LWJhc2UsIDEzLjUlKSAhZGVmYXVsdDsgLy8gIzIyMlxuJGdyYXktZGFyazogICAgICAgICAgICAgIGxpZ2h0ZW4oJGdyYXktYmFzZSwgMjAlKSAhZGVmYXVsdDsgICAvLyAjMzMzXG4kZ3JheTogICAgICAgICAgICAgICAgICAgbGlnaHRlbigkZ3JheS1iYXNlLCAzMy41JSkgIWRlZmF1bHQ7IC8vICM1NTVcbiRncmF5LWxpZ2h0OiAgICAgICAgICAgICBsaWdodGVuKCRncmF5LWJhc2UsIDQ2LjclKSAhZGVmYXVsdDsgLy8gIzc3N1xuJGdyYXktbGlnaHRlcjogICAgICAgICAgIGxpZ2h0ZW4oJGdyYXktYmFzZSwgOTMuNSUpICFkZWZhdWx0OyAvLyAjZWVlXG5cbiRicmFuZC1wcmltYXJ5OiAgICAgICAgIGRhcmtlbigjNDI4YmNhLCA2LjUlKSAhZGVmYXVsdDsgLy8gIzMzN2FiN1xuJGJyYW5kLXN1Y2Nlc3M6ICAgICAgICAgIzVjYjg1YyAhZGVmYXVsdDtcbiRicmFuZC1pbmZvOiAgICAgICAgICAgICM1YmMwZGUgIWRlZmF1bHQ7XG4kYnJhbmQtd2FybmluZzogICAgICAgICAjZjBhZDRlICFkZWZhdWx0O1xuJGJyYW5kLWRhbmdlcjogICAgICAgICAgI2Q5NTM0ZiAhZGVmYXVsdDtcblxuXG4vLz09IFNjYWZmb2xkaW5nXG4vL1xuLy8jIyBTZXR0aW5ncyBmb3Igc29tZSBvZiB0aGUgbW9zdCBnbG9iYWwgc3R5bGVzLlxuXG4vLyoqIEJhY2tncm91bmQgY29sb3IgZm9yIGA8Ym9keT5gLlxuJGJvZHktYmc6ICAgICAgICAgICAgICAgI2ZmZiAhZGVmYXVsdDtcbi8vKiogR2xvYmFsIHRleHQgY29sb3Igb24gYDxib2R5PmAuXG4kdGV4dC1jb2xvcjogICAgICAgICAgICAkZ3JheS1kYXJrICFkZWZhdWx0O1xuXG4vLyoqIEdsb2JhbCB0ZXh0dWFsIGxpbmsgY29sb3IuXG4kbGluay1jb2xvcjogICAgICAgICAgICAkYnJhbmQtcHJpbWFyeSAhZGVmYXVsdDtcbi8vKiogTGluayBob3ZlciBjb2xvciBzZXQgdmlhIGBkYXJrZW4oKWAgZnVuY3Rpb24uXG4kbGluay1ob3Zlci1jb2xvcjogICAgICBkYXJrZW4oJGxpbmstY29sb3IsIDE1JSkgIWRlZmF1bHQ7XG4vLyoqIExpbmsgaG92ZXIgZGVjb3JhdGlvbi5cbiRsaW5rLWhvdmVyLWRlY29yYXRpb246IHVuZGVybGluZSAhZGVmYXVsdDtcblxuXG4vLz09IFR5cG9ncmFwaHlcbi8vXG4vLyMjIEZvbnQsIGxpbmUtaGVpZ2h0LCBhbmQgY29sb3IgZm9yIGJvZHkgdGV4dCwgaGVhZGluZ3MsIGFuZCBtb3JlLlxuXG4kZm9udC1mYW1pbHktc2Fucy1zZXJpZjogIFwiSGVsdmV0aWNhIE5ldWVcIiwgSGVsdmV0aWNhLCBBcmlhbCwgc2Fucy1zZXJpZiAhZGVmYXVsdDtcbiRmb250LWZhbWlseS1zZXJpZjogICAgICAgR2VvcmdpYSwgXCJUaW1lcyBOZXcgUm9tYW5cIiwgVGltZXMsIHNlcmlmICFkZWZhdWx0O1xuLy8qKiBEZWZhdWx0IG1vbm9zcGFjZSBmb250cyBmb3IgYDxjb2RlPmAsIGA8a2JkPmAsIGFuZCBgPHByZT5gLlxuJGZvbnQtZmFtaWx5LW1vbm9zcGFjZTogICBNZW5sbywgTW9uYWNvLCBDb25zb2xhcywgXCJDb3VyaWVyIE5ld1wiLCBtb25vc3BhY2UgIWRlZmF1bHQ7XG4kZm9udC1mYW1pbHktYmFzZTogICAgICAgICRmb250LWZhbWlseS1zYW5zLXNlcmlmICFkZWZhdWx0O1xuXG4kZm9udC1zaXplLWJhc2U6ICAgICAgICAgIDE0cHggIWRlZmF1bHQ7XG4kZm9udC1zaXplLWxhcmdlOiAgICAgICAgIGNlaWwoKCRmb250LXNpemUtYmFzZSAqIDEuMjUpKSAhZGVmYXVsdDsgLy8gfjE4cHhcbiRmb250LXNpemUtc21hbGw6ICAgICAgICAgY2VpbCgoJGZvbnQtc2l6ZS1iYXNlICogMC44NSkpICFkZWZhdWx0OyAvLyB+MTJweFxuXG4kZm9udC1zaXplLWgxOiAgICAgICAgICAgIGZsb29yKCgkZm9udC1zaXplLWJhc2UgKiAyLjYpKSAhZGVmYXVsdDsgLy8gfjM2cHhcbiRmb250LXNpemUtaDI6ICAgICAgICAgICAgZmxvb3IoKCRmb250LXNpemUtYmFzZSAqIDIuMTUpKSAhZGVmYXVsdDsgLy8gfjMwcHhcbiRmb250LXNpemUtaDM6ICAgICAgICAgICAgY2VpbCgoJGZvbnQtc2l6ZS1iYXNlICogMS43KSkgIWRlZmF1bHQ7IC8vIH4yNHB4XG4kZm9udC1zaXplLWg0OiAgICAgICAgICAgIGNlaWwoKCRmb250LXNpemUtYmFzZSAqIDEuMjUpKSAhZGVmYXVsdDsgLy8gfjE4cHhcbiRmb250LXNpemUtaDU6ICAgICAgICAgICAgJGZvbnQtc2l6ZS1iYXNlICFkZWZhdWx0O1xuJGZvbnQtc2l6ZS1oNjogICAgICAgICAgICBjZWlsKCgkZm9udC1zaXplLWJhc2UgKiAwLjg1KSkgIWRlZmF1bHQ7IC8vIH4xMnB4XG5cbi8vKiogVW5pdC1sZXNzIGBsaW5lLWhlaWdodGAgZm9yIHVzZSBpbiBjb21wb25lbnRzIGxpa2UgYnV0dG9ucy5cbiRsaW5lLWhlaWdodC1iYXNlOiAgICAgICAgMS40Mjg1NzE0MjkgIWRlZmF1bHQ7IC8vIDIwLzE0XG4vLyoqIENvbXB1dGVkIFwibGluZS1oZWlnaHRcIiAoYGZvbnQtc2l6ZWAgKiBgbGluZS1oZWlnaHRgKSBmb3IgdXNlIHdpdGggYG1hcmdpbmAsIGBwYWRkaW5nYCwgZXRjLlxuJGxpbmUtaGVpZ2h0LWNvbXB1dGVkOiAgICBmbG9vcigoJGZvbnQtc2l6ZS1iYXNlICogJGxpbmUtaGVpZ2h0LWJhc2UpKSAhZGVmYXVsdDsgLy8gfjIwcHhcblxuLy8qKiBCeSBkZWZhdWx0LCB0aGlzIGluaGVyaXRzIGZyb20gdGhlIGA8Ym9keT5gLlxuJGhlYWRpbmdzLWZvbnQtZmFtaWx5OiAgICBpbmhlcml0ICFkZWZhdWx0O1xuJGhlYWRpbmdzLWZvbnQtd2VpZ2h0OiAgICA3MDAgIWRlZmF1bHQ7XG4kaGVhZGluZ3MtbGluZS1oZWlnaHQ6ICAgIDEuMSAhZGVmYXVsdDtcbiRoZWFkaW5ncy1jb2xvcjogICAgICAgICAgaW5oZXJpdCAhZGVmYXVsdDtcblxuXG4vLz09IEljb25vZ3JhcGh5XG4vL1xuLy8jIyBTcGVjaWZ5IGN1c3RvbSBsb2NhdGlvbiBhbmQgZmlsZW5hbWUgb2YgdGhlIGluY2x1ZGVkIEdseXBoaWNvbnMgaWNvbiBmb250LiBVc2VmdWwgZm9yIHRob3NlIGluY2x1ZGluZyBCb290c3RyYXAgdmlhIEJvd2VyLlxuXG4vLyoqIExvYWQgZm9udHMgZnJvbSB0aGlzIGRpcmVjdG9yeS5cblxuLy8gW2NvbnZlcnRlcl0gSWYgJGJvb3RzdHJhcC1zYXNzLWFzc2V0LWhlbHBlciBpZiB1c2VkLCBwcm92aWRlIHBhdGggcmVsYXRpdmUgdG8gdGhlIGFzc2V0cyBsb2FkIHBhdGguXG4vLyBbY29udmVydGVyXSBUaGlzIGlzIGJlY2F1c2Ugc29tZSBhc3NldCBoZWxwZXJzLCBzdWNoIGFzIFNwcm9ja2V0cywgZG8gbm90IHdvcmsgd2l0aCBmaWxlLXJlbGF0aXZlIHBhdGhzLlxuJGljb24tZm9udC1wYXRoOiBpZigkYm9vdHN0cmFwLXNhc3MtYXNzZXQtaGVscGVyLCBcImJvb3RzdHJhcC9cIiwgXCIuLi9mb250cy9ib290c3RyYXAvXCIpICFkZWZhdWx0O1xuXG4vLyoqIEZpbGUgbmFtZSBmb3IgYWxsIGZvbnQgZmlsZXMuXG4kaWNvbi1mb250LW5hbWU6ICAgICAgICAgIFwiZ2x5cGhpY29ucy1oYWxmbGluZ3MtcmVndWxhclwiICFkZWZhdWx0O1xuLy8qKiBFbGVtZW50IElEIHdpdGhpbiBTVkcgaWNvbiBmaWxlLlxuJGljb24tZm9udC1zdmctaWQ6ICAgICAgICBcImdseXBoaWNvbnNfaGFsZmxpbmdzcmVndWxhclwiICFkZWZhdWx0O1xuXG5cbi8vPT0gQ29tcG9uZW50c1xuLy9cbi8vIyMgRGVmaW5lIGNvbW1vbiBwYWRkaW5nIGFuZCBib3JkZXIgcmFkaXVzIHNpemVzIGFuZCBtb3JlLiBWYWx1ZXMgYmFzZWQgb24gMTRweCB0ZXh0IGFuZCAxLjQyOCBsaW5lLWhlaWdodCAofjIwcHggdG8gc3RhcnQpLlxuXG4kcGFkZGluZy1iYXNlLXZlcnRpY2FsOiAgICAgNnB4ICFkZWZhdWx0O1xuJHBhZGRpbmctYmFzZS1ob3Jpem9udGFsOiAgIDEycHggIWRlZmF1bHQ7XG5cbiRwYWRkaW5nLWxhcmdlLXZlcnRpY2FsOiAgICAxMHB4ICFkZWZhdWx0O1xuJHBhZGRpbmctbGFyZ2UtaG9yaXpvbnRhbDogIDE2cHggIWRlZmF1bHQ7XG5cbiRwYWRkaW5nLXNtYWxsLXZlcnRpY2FsOiAgICA1cHggIWRlZmF1bHQ7XG4kcGFkZGluZy1zbWFsbC1ob3Jpem9udGFsOiAgMTBweCAhZGVmYXVsdDtcblxuJHBhZGRpbmcteHMtdmVydGljYWw6ICAgICAgIDFweCAhZGVmYXVsdDtcbiRwYWRkaW5nLXhzLWhvcml6b250YWw6ICAgICA1cHggIWRlZmF1bHQ7XG5cbiRsaW5lLWhlaWdodC1sYXJnZTogICAgICAgICAxLjMzMzMzMzMgIWRlZmF1bHQ7IC8vIGV4dHJhIGRlY2ltYWxzIGZvciBXaW4gOC4xIENocm9tZVxuJGxpbmUtaGVpZ2h0LXNtYWxsOiAgICAgICAgIDEuNSAhZGVmYXVsdDtcblxuJGJvcmRlci1yYWRpdXMtYmFzZTogICAgICAgIDRweCAhZGVmYXVsdDtcbiRib3JkZXItcmFkaXVzLWxhcmdlOiAgICAgICA2cHggIWRlZmF1bHQ7XG4kYm9yZGVyLXJhZGl1cy1zbWFsbDogICAgICAgM3B4ICFkZWZhdWx0O1xuXG4vLyoqIEdsb2JhbCBjb2xvciBmb3IgYWN0aXZlIGl0ZW1zIChlLmcuLCBuYXZzIG9yIGRyb3Bkb3ducykuXG4kY29tcG9uZW50LWFjdGl2ZS1jb2xvcjogICAgI2ZmZiAhZGVmYXVsdDtcbi8vKiogR2xvYmFsIGJhY2tncm91bmQgY29sb3IgZm9yIGFjdGl2ZSBpdGVtcyAoZS5nLiwgbmF2cyBvciBkcm9wZG93bnMpLlxuJGNvbXBvbmVudC1hY3RpdmUtYmc6ICAgICAgICRicmFuZC1wcmltYXJ5ICFkZWZhdWx0O1xuXG4vLyoqIFdpZHRoIG9mIHRoZSBgYm9yZGVyYCBmb3IgZ2VuZXJhdGluZyBjYXJldHMgdGhhdCBpbmRpY2F0b3IgZHJvcGRvd25zLlxuJGNhcmV0LXdpZHRoLWJhc2U6ICAgICAgICAgIDRweCAhZGVmYXVsdDtcbi8vKiogQ2FyZXRzIGluY3JlYXNlIHNsaWdodGx5IGluIHNpemUgZm9yIGxhcmdlciBjb21wb25lbnRzLlxuJGNhcmV0LXdpZHRoLWxhcmdlOiAgICAgICAgIDVweCAhZGVmYXVsdDtcblxuXG4vLz09IFRhYmxlc1xuLy9cbi8vIyMgQ3VzdG9taXplcyB0aGUgYC50YWJsZWAgY29tcG9uZW50IHdpdGggYmFzaWMgdmFsdWVzLCBlYWNoIHVzZWQgYWNyb3NzIGFsbCB0YWJsZSB2YXJpYXRpb25zLlxuXG4vLyoqIFBhZGRpbmcgZm9yIGA8dGg+YHMgYW5kIGA8dGQ+YHMuXG4kdGFibGUtY2VsbC1wYWRkaW5nOiAgICAgICAgICAgIDhweCAhZGVmYXVsdDtcbi8vKiogUGFkZGluZyBmb3IgY2VsbHMgaW4gYC50YWJsZS1jb25kZW5zZWRgLlxuJHRhYmxlLWNvbmRlbnNlZC1jZWxsLXBhZGRpbmc6ICA1cHggIWRlZmF1bHQ7XG5cbi8vKiogRGVmYXVsdCBiYWNrZ3JvdW5kIGNvbG9yIHVzZWQgZm9yIGFsbCB0YWJsZXMuXG4kdGFibGUtYmc6ICAgICAgICAgICAgICAgICAgICAgIHRyYW5zcGFyZW50ICFkZWZhdWx0O1xuLy8qKiBCYWNrZ3JvdW5kIGNvbG9yIHVzZWQgZm9yIGAudGFibGUtc3RyaXBlZGAuXG4kdGFibGUtYmctYWNjZW50OiAgICAgICAgICAgICAgICNmOWY5ZjkgIWRlZmF1bHQ7XG4vLyoqIEJhY2tncm91bmQgY29sb3IgdXNlZCBmb3IgYC50YWJsZS1ob3ZlcmAuXG4kdGFibGUtYmctaG92ZXI6ICAgICAgICAgICAgICAgICNmNWY1ZjUgIWRlZmF1bHQ7XG4kdGFibGUtYmctYWN0aXZlOiAgICAgICAgICAgICAgICR0YWJsZS1iZy1ob3ZlciAhZGVmYXVsdDtcblxuLy8qKiBCb3JkZXIgY29sb3IgZm9yIHRhYmxlIGFuZCBjZWxsIGJvcmRlcnMuXG4kdGFibGUtYm9yZGVyLWNvbG9yOiAgICAgICAgICAgICNkZGQgIWRlZmF1bHQ7XG5cblxuLy89PSBCdXR0b25zXG4vL1xuLy8jIyBGb3IgZWFjaCBvZiBCb290c3RyYXAncyBidXR0b25zLCBkZWZpbmUgdGV4dCwgYmFja2dyb3VuZCBhbmQgYm9yZGVyIGNvbG9yLlxuXG4kYnRuLWZvbnQtd2VpZ2h0OiAgICAgICAgICAgICAgICBub3JtYWwgIWRlZmF1bHQ7XG5cbiRidG4tZGVmYXVsdC1jb2xvcjogICAgICAgICAgICAgICMzMzMgIWRlZmF1bHQ7XG4kYnRuLWRlZmF1bHQtYmc6ICAgICAgICAgICAgICAgICAjZmZmICFkZWZhdWx0O1xuJGJ0bi1kZWZhdWx0LWJvcmRlcjogICAgICAgICAgICAgI2NjYyAhZGVmYXVsdDtcblxuJGJ0bi1wcmltYXJ5LWNvbG9yOiAgICAgICAgICAgICAgI2ZmZiAhZGVmYXVsdDtcbiRidG4tcHJpbWFyeS1iZzogICAgICAgICAgICAgICAgICRicmFuZC1wcmltYXJ5ICFkZWZhdWx0O1xuJGJ0bi1wcmltYXJ5LWJvcmRlcjogICAgICAgICAgICAgZGFya2VuKCRidG4tcHJpbWFyeS1iZywgNSUpICFkZWZhdWx0O1xuXG4kYnRuLXN1Y2Nlc3MtY29sb3I6ICAgICAgICAgICAgICAjZmZmICFkZWZhdWx0O1xuJGJ0bi1zdWNjZXNzLWJnOiAgICAgICAgICAgICAgICAgJGJyYW5kLXN1Y2Nlc3MgIWRlZmF1bHQ7XG4kYnRuLXN1Y2Nlc3MtYm9yZGVyOiAgICAgICAgICAgICBkYXJrZW4oJGJ0bi1zdWNjZXNzLWJnLCA1JSkgIWRlZmF1bHQ7XG5cbiRidG4taW5mby1jb2xvcjogICAgICAgICAgICAgICAgICNmZmYgIWRlZmF1bHQ7XG4kYnRuLWluZm8tYmc6ICAgICAgICAgICAgICAgICAgICAkYnJhbmQtaW5mbyAhZGVmYXVsdDtcbiRidG4taW5mby1ib3JkZXI6ICAgICAgICAgICAgICAgIGRhcmtlbigkYnRuLWluZm8tYmcsIDUlKSAhZGVmYXVsdDtcblxuJGJ0bi13YXJuaW5nLWNvbG9yOiAgICAgICAgICAgICAgI2ZmZiAhZGVmYXVsdDtcbiRidG4td2FybmluZy1iZzogICAgICAgICAgICAgICAgICRicmFuZC13YXJuaW5nICFkZWZhdWx0O1xuJGJ0bi13YXJuaW5nLWJvcmRlcjogICAgICAgICAgICAgZGFya2VuKCRidG4td2FybmluZy1iZywgNSUpICFkZWZhdWx0O1xuXG4kYnRuLWRhbmdlci1jb2xvcjogICAgICAgICAgICAgICAjZmZmICFkZWZhdWx0O1xuJGJ0bi1kYW5nZXItYmc6ICAgICAgICAgICAgICAgICAgJGJyYW5kLWRhbmdlciAhZGVmYXVsdDtcbiRidG4tZGFuZ2VyLWJvcmRlcjogICAgICAgICAgICAgIGRhcmtlbigkYnRuLWRhbmdlci1iZywgNSUpICFkZWZhdWx0O1xuXG4kYnRuLWxpbmstZGlzYWJsZWQtY29sb3I6ICAgICAgICAkZ3JheS1saWdodCAhZGVmYXVsdDtcblxuXG4vLz09IEZvcm1zXG4vL1xuLy8jI1xuXG4vLyoqIGA8aW5wdXQ+YCBiYWNrZ3JvdW5kIGNvbG9yXG4kaW5wdXQtYmc6ICAgICAgICAgICAgICAgICAgICAgICAjZmZmICFkZWZhdWx0O1xuLy8qKiBgPGlucHV0IGRpc2FibGVkPmAgYmFja2dyb3VuZCBjb2xvclxuJGlucHV0LWJnLWRpc2FibGVkOiAgICAgICAgICAgICAgJGdyYXktbGlnaHRlciAhZGVmYXVsdDtcblxuLy8qKiBUZXh0IGNvbG9yIGZvciBgPGlucHV0PmBzXG4kaW5wdXQtY29sb3I6ICAgICAgICAgICAgICAgICAgICAkZ3JheSAhZGVmYXVsdDtcbi8vKiogYDxpbnB1dD5gIGJvcmRlciBjb2xvclxuJGlucHV0LWJvcmRlcjogICAgICAgICAgICAgICAgICAgI2NjYyAhZGVmYXVsdDtcblxuLy8gVE9ETzogUmVuYW1lIGAkaW5wdXQtYm9yZGVyLXJhZGl1c2AgdG8gYCRpbnB1dC1ib3JkZXItcmFkaXVzLWJhc2VgIGluIHY0XG4vLyoqIERlZmF1bHQgYC5mb3JtLWNvbnRyb2xgIGJvcmRlciByYWRpdXNcbi8vIFRoaXMgaGFzIG5vIGVmZmVjdCBvbiBgPHNlbGVjdD5gcyBpbiBzb21lIGJyb3dzZXJzLCBkdWUgdG8gdGhlIGxpbWl0ZWQgc3R5bGFiaWxpdHkgb2YgYDxzZWxlY3Q+YHMgaW4gQ1NTLlxuJGlucHV0LWJvcmRlci1yYWRpdXM6ICAgICAgICAgICAgJGJvcmRlci1yYWRpdXMtYmFzZSAhZGVmYXVsdDtcbi8vKiogTGFyZ2UgYC5mb3JtLWNvbnRyb2xgIGJvcmRlciByYWRpdXNcbiRpbnB1dC1ib3JkZXItcmFkaXVzLWxhcmdlOiAgICAgICRib3JkZXItcmFkaXVzLWxhcmdlICFkZWZhdWx0O1xuLy8qKiBTbWFsbCBgLmZvcm0tY29udHJvbGAgYm9yZGVyIHJhZGl1c1xuJGlucHV0LWJvcmRlci1yYWRpdXMtc21hbGw6ICAgICAgJGJvcmRlci1yYWRpdXMtc21hbGwgIWRlZmF1bHQ7XG5cbi8vKiogQm9yZGVyIGNvbG9yIGZvciBpbnB1dHMgb24gZm9jdXNcbiRpbnB1dC1ib3JkZXItZm9jdXM6ICAgICAgICAgICAgICM2NmFmZTkgIWRlZmF1bHQ7XG5cbi8vKiogUGxhY2Vob2xkZXIgdGV4dCBjb2xvclxuJGlucHV0LWNvbG9yLXBsYWNlaG9sZGVyOiAgICAgICAgIzk5OSAhZGVmYXVsdDtcblxuLy8qKiBEZWZhdWx0IGAuZm9ybS1jb250cm9sYCBoZWlnaHRcbiRpbnB1dC1oZWlnaHQtYmFzZTogICAgICAgICAgICAgICgkbGluZS1oZWlnaHQtY29tcHV0ZWQgKyAoJHBhZGRpbmctYmFzZS12ZXJ0aWNhbCAqIDIpICsgMikgIWRlZmF1bHQ7XG4vLyoqIExhcmdlIGAuZm9ybS1jb250cm9sYCBoZWlnaHRcbiRpbnB1dC1oZWlnaHQtbGFyZ2U6ICAgICAgICAgICAgIChjZWlsKCRmb250LXNpemUtbGFyZ2UgKiAkbGluZS1oZWlnaHQtbGFyZ2UpICsgKCRwYWRkaW5nLWxhcmdlLXZlcnRpY2FsICogMikgKyAyKSAhZGVmYXVsdDtcbi8vKiogU21hbGwgYC5mb3JtLWNvbnRyb2xgIGhlaWdodFxuJGlucHV0LWhlaWdodC1zbWFsbDogICAgICAgICAgICAgKGZsb29yKCRmb250LXNpemUtc21hbGwgKiAkbGluZS1oZWlnaHQtc21hbGwpICsgKCRwYWRkaW5nLXNtYWxsLXZlcnRpY2FsICogMikgKyAyKSAhZGVmYXVsdDtcblxuLy8qKiBgLmZvcm0tZ3JvdXBgIG1hcmdpblxuJGZvcm0tZ3JvdXAtbWFyZ2luLWJvdHRvbTogICAgICAgMTVweCAhZGVmYXVsdDtcblxuJGxlZ2VuZC1jb2xvcjogICAgICAgICAgICAgICAgICAgJGdyYXktZGFyayAhZGVmYXVsdDtcbiRsZWdlbmQtYm9yZGVyLWNvbG9yOiAgICAgICAgICAgICNlNWU1ZTUgIWRlZmF1bHQ7XG5cbi8vKiogQmFja2dyb3VuZCBjb2xvciBmb3IgdGV4dHVhbCBpbnB1dCBhZGRvbnNcbiRpbnB1dC1ncm91cC1hZGRvbi1iZzogICAgICAgICAgICRncmF5LWxpZ2h0ZXIgIWRlZmF1bHQ7XG4vLyoqIEJvcmRlciBjb2xvciBmb3IgdGV4dHVhbCBpbnB1dCBhZGRvbnNcbiRpbnB1dC1ncm91cC1hZGRvbi1ib3JkZXItY29sb3I6ICRpbnB1dC1ib3JkZXIgIWRlZmF1bHQ7XG5cbi8vKiogRGlzYWJsZWQgY3Vyc29yIGZvciBmb3JtIGNvbnRyb2xzIGFuZCBidXR0b25zLlxuJGN1cnNvci1kaXNhYmxlZDogICAgICAgICAgICAgICAgbm90LWFsbG93ZWQgIWRlZmF1bHQ7XG5cblxuLy89PSBEcm9wZG93bnNcbi8vXG4vLyMjIERyb3Bkb3duIG1lbnUgY29udGFpbmVyIGFuZCBjb250ZW50cy5cblxuLy8qKiBCYWNrZ3JvdW5kIGZvciB0aGUgZHJvcGRvd24gbWVudS5cbiRkcm9wZG93bi1iZzogICAgICAgICAgICAgICAgICAgICNmZmYgIWRlZmF1bHQ7XG4vLyoqIERyb3Bkb3duIG1lbnUgYGJvcmRlci1jb2xvcmAuXG4kZHJvcGRvd24tYm9yZGVyOiAgICAgICAgICAgICAgICByZ2JhKDAsMCwwLC4xNSkgIWRlZmF1bHQ7XG4vLyoqIERyb3Bkb3duIG1lbnUgYGJvcmRlci1jb2xvcmAgKipmb3IgSUU4KiouXG4kZHJvcGRvd24tZmFsbGJhY2stYm9yZGVyOiAgICAgICAjY2NjICFkZWZhdWx0O1xuLy8qKiBEaXZpZGVyIGNvbG9yIGZvciBiZXR3ZWVuIGRyb3Bkb3duIGl0ZW1zLlxuJGRyb3Bkb3duLWRpdmlkZXItYmc6ICAgICAgICAgICAgI2U1ZTVlNSAhZGVmYXVsdDtcblxuLy8qKiBEcm9wZG93biBsaW5rIHRleHQgY29sb3IuXG4kZHJvcGRvd24tbGluay1jb2xvcjogICAgICAgICAgICAkZ3JheS1kYXJrICFkZWZhdWx0O1xuLy8qKiBIb3ZlciBjb2xvciBmb3IgZHJvcGRvd24gbGlua3MuXG4kZHJvcGRvd24tbGluay1ob3Zlci1jb2xvcjogICAgICBkYXJrZW4oJGdyYXktZGFyaywgNSUpICFkZWZhdWx0O1xuLy8qKiBIb3ZlciBiYWNrZ3JvdW5kIGZvciBkcm9wZG93biBsaW5rcy5cbiRkcm9wZG93bi1saW5rLWhvdmVyLWJnOiAgICAgICAgICNmNWY1ZjUgIWRlZmF1bHQ7XG5cbi8vKiogQWN0aXZlIGRyb3Bkb3duIG1lbnUgaXRlbSB0ZXh0IGNvbG9yLlxuJGRyb3Bkb3duLWxpbmstYWN0aXZlLWNvbG9yOiAgICAgJGNvbXBvbmVudC1hY3RpdmUtY29sb3IgIWRlZmF1bHQ7XG4vLyoqIEFjdGl2ZSBkcm9wZG93biBtZW51IGl0ZW0gYmFja2dyb3VuZCBjb2xvci5cbiRkcm9wZG93bi1saW5rLWFjdGl2ZS1iZzogICAgICAgICRjb21wb25lbnQtYWN0aXZlLWJnICFkZWZhdWx0O1xuXG4vLyoqIERpc2FibGVkIGRyb3Bkb3duIG1lbnUgaXRlbSBiYWNrZ3JvdW5kIGNvbG9yLlxuJGRyb3Bkb3duLWxpbmstZGlzYWJsZWQtY29sb3I6ICAgJGdyYXktbGlnaHQgIWRlZmF1bHQ7XG5cbi8vKiogVGV4dCBjb2xvciBmb3IgaGVhZGVycyB3aXRoaW4gZHJvcGRvd24gbWVudXMuXG4kZHJvcGRvd24taGVhZGVyLWNvbG9yOiAgICAgICAgICAkZ3JheS1saWdodCAhZGVmYXVsdDtcblxuLy8qKiBEZXByZWNhdGVkIGAkZHJvcGRvd24tY2FyZXQtY29sb3JgIGFzIG9mIHYzLjEuMFxuJGRyb3Bkb3duLWNhcmV0LWNvbG9yOiAgICAgICAgICAgIzAwMCAhZGVmYXVsdDtcblxuXG4vLy0tIFotaW5kZXggbWFzdGVyIGxpc3Rcbi8vXG4vLyBXYXJuaW5nOiBBdm9pZCBjdXN0b21pemluZyB0aGVzZSB2YWx1ZXMuIFRoZXkncmUgdXNlZCBmb3IgYSBiaXJkJ3MgZXllIHZpZXdcbi8vIG9mIGNvbXBvbmVudHMgZGVwZW5kZW50IG9uIHRoZSB6LWF4aXMgYW5kIGFyZSBkZXNpZ25lZCB0byBhbGwgd29yayB0b2dldGhlci5cbi8vXG4vLyBOb3RlOiBUaGVzZSB2YXJpYWJsZXMgYXJlIG5vdCBnZW5lcmF0ZWQgaW50byB0aGUgQ3VzdG9taXplci5cblxuJHppbmRleC1uYXZiYXI6ICAgICAgICAgICAgMTAwMCAhZGVmYXVsdDtcbiR6aW5kZXgtZHJvcGRvd246ICAgICAgICAgIDEwMDAgIWRlZmF1bHQ7XG4kemluZGV4LXBvcG92ZXI6ICAgICAgICAgICAxMDYwICFkZWZhdWx0O1xuJHppbmRleC10b29sdGlwOiAgICAgICAgICAgMTA3MCAhZGVmYXVsdDtcbiR6aW5kZXgtbmF2YmFyLWZpeGVkOiAgICAgIDEwMzAgIWRlZmF1bHQ7XG4kemluZGV4LW1vZGFsLWJhY2tncm91bmQ6ICAxMDQwICFkZWZhdWx0O1xuJHppbmRleC1tb2RhbDogICAgICAgICAgICAgMTA1MCAhZGVmYXVsdDtcblxuXG4vLz09IE1lZGlhIHF1ZXJpZXMgYnJlYWtwb2ludHNcbi8vXG4vLyMjIERlZmluZSB0aGUgYnJlYWtwb2ludHMgYXQgd2hpY2ggeW91ciBsYXlvdXQgd2lsbCBjaGFuZ2UsIGFkYXB0aW5nIHRvIGRpZmZlcmVudCBzY3JlZW4gc2l6ZXMuXG5cbi8vIEV4dHJhIHNtYWxsIHNjcmVlbiAvIHBob25lXG4vLyoqIERlcHJlY2F0ZWQgYCRzY3JlZW4teHNgIGFzIG9mIHYzLjAuMVxuJHNjcmVlbi14czogICAgICAgICAgICAgICAgICA0ODBweCAhZGVmYXVsdDtcbi8vKiogRGVwcmVjYXRlZCBgJHNjcmVlbi14cy1taW5gIGFzIG9mIHYzLjIuMFxuJHNjcmVlbi14cy1taW46ICAgICAgICAgICAgICAkc2NyZWVuLXhzICFkZWZhdWx0O1xuLy8qKiBEZXByZWNhdGVkIGAkc2NyZWVuLXBob25lYCBhcyBvZiB2My4wLjFcbiRzY3JlZW4tcGhvbmU6ICAgICAgICAgICAgICAgJHNjcmVlbi14cy1taW4gIWRlZmF1bHQ7XG5cbi8vIFNtYWxsIHNjcmVlbiAvIHRhYmxldFxuLy8qKiBEZXByZWNhdGVkIGAkc2NyZWVuLXNtYCBhcyBvZiB2My4wLjFcbiRzY3JlZW4tc206ICAgICAgICAgICAgICAgICAgNzY4cHggIWRlZmF1bHQ7XG4kc2NyZWVuLXNtLW1pbjogICAgICAgICAgICAgICRzY3JlZW4tc20gIWRlZmF1bHQ7XG4vLyoqIERlcHJlY2F0ZWQgYCRzY3JlZW4tdGFibGV0YCBhcyBvZiB2My4wLjFcbiRzY3JlZW4tdGFibGV0OiAgICAgICAgICAgICAgJHNjcmVlbi1zbS1taW4gIWRlZmF1bHQ7XG5cbi8vIE1lZGl1bSBzY3JlZW4gLyBkZXNrdG9wXG4vLyoqIERlcHJlY2F0ZWQgYCRzY3JlZW4tbWRgIGFzIG9mIHYzLjAuMVxuJHNjcmVlbi1tZDogICAgICAgICAgICAgICAgICA5OTJweCAhZGVmYXVsdDtcbiRzY3JlZW4tbWQtbWluOiAgICAgICAgICAgICAgJHNjcmVlbi1tZCAhZGVmYXVsdDtcbi8vKiogRGVwcmVjYXRlZCBgJHNjcmVlbi1kZXNrdG9wYCBhcyBvZiB2My4wLjFcbiRzY3JlZW4tZGVza3RvcDogICAgICAgICAgICAgJHNjcmVlbi1tZC1taW4gIWRlZmF1bHQ7XG5cbi8vIExhcmdlIHNjcmVlbiAvIHdpZGUgZGVza3RvcFxuLy8qKiBEZXByZWNhdGVkIGAkc2NyZWVuLWxnYCBhcyBvZiB2My4wLjFcbiRzY3JlZW4tbGc6ICAgICAgICAgICAgICAgICAgMTIyMHB4ICFkZWZhdWx0O1xuJHNjcmVlbi1sZy1taW46ICAgICAgICAgICAgICAkc2NyZWVuLWxnICFkZWZhdWx0O1xuLy8qKiBEZXByZWNhdGVkIGAkc2NyZWVuLWxnLWRlc2t0b3BgIGFzIG9mIHYzLjAuMVxuJHNjcmVlbi1sZy1kZXNrdG9wOiAgICAgICAgICAkc2NyZWVuLWxnLW1pbiAhZGVmYXVsdDtcblxuLy8gU28gbWVkaWEgcXVlcmllcyBkb24ndCBvdmVybGFwIHdoZW4gcmVxdWlyZWQsIHByb3ZpZGUgYSBtYXhpbXVtXG4kc2NyZWVuLXhzLW1heDogICAgICAgICAgICAgICgkc2NyZWVuLXNtLW1pbiAtIDEpICFkZWZhdWx0O1xuJHNjcmVlbi1zbS1tYXg6ICAgICAgICAgICAgICAoJHNjcmVlbi1tZC1taW4gLSAxKSAhZGVmYXVsdDtcbiRzY3JlZW4tbWQtbWF4OiAgICAgICAgICAgICAgKCRzY3JlZW4tbGctbWluIC0gMSkgIWRlZmF1bHQ7XG5cblxuLy89PSBHcmlkIHN5c3RlbVxuLy9cbi8vIyMgRGVmaW5lIHlvdXIgY3VzdG9tIHJlc3BvbnNpdmUgZ3JpZC5cblxuLy8qKiBOdW1iZXIgb2YgY29sdW1ucyBpbiB0aGUgZ3JpZC5cbiRncmlkLWNvbHVtbnM6ICAgICAgICAgICAgICAxMiAhZGVmYXVsdDtcbi8vKiogUGFkZGluZyBiZXR3ZWVuIGNvbHVtbnMuIEdldHMgZGl2aWRlZCBpbiBoYWxmIGZvciB0aGUgbGVmdCBhbmQgcmlnaHQuXG4kZ3JpZC1ndXR0ZXItd2lkdGg6ICAgICAgICAgMzBweCAhZGVmYXVsdDtcbi8vIE5hdmJhciBjb2xsYXBzZVxuLy8qKiBQb2ludCBhdCB3aGljaCB0aGUgbmF2YmFyIGJlY29tZXMgdW5jb2xsYXBzZWQuXG4kZ3JpZC1mbG9hdC1icmVha3BvaW50OiAgICAgJHNjcmVlbi1zbS1taW4gIWRlZmF1bHQ7XG4vLyoqIFBvaW50IGF0IHdoaWNoIHRoZSBuYXZiYXIgYmVnaW5zIGNvbGxhcHNpbmcuXG4kZ3JpZC1mbG9hdC1icmVha3BvaW50LW1heDogKCRncmlkLWZsb2F0LWJyZWFrcG9pbnQgLSAxKSAhZGVmYXVsdDtcblxuXG4vLz09IENvbnRhaW5lciBzaXplc1xuLy9cbi8vIyMgRGVmaW5lIHRoZSBtYXhpbXVtIHdpZHRoIG9mIGAuY29udGFpbmVyYCBmb3IgZGlmZmVyZW50IHNjcmVlbiBzaXplcy5cblxuLy8gU21hbGwgc2NyZWVuIC8gdGFibGV0XG4kY29udGFpbmVyLXRhYmxldDogICAgICAgICAgICAgKDcyMHB4ICsgJGdyaWQtZ3V0dGVyLXdpZHRoKSAhZGVmYXVsdDtcbi8vKiogRm9yIGAkc2NyZWVuLXNtLW1pbmAgYW5kIHVwLlxuJGNvbnRhaW5lci1zbTogICAgICAgICAgICAgICAgICRjb250YWluZXItdGFibGV0ICFkZWZhdWx0O1xuXG4vLyBNZWRpdW0gc2NyZWVuIC8gZGVza3RvcFxuJGNvbnRhaW5lci1kZXNrdG9wOiAgICAgICAgICAgICg5NDBweCArICRncmlkLWd1dHRlci13aWR0aCkgIWRlZmF1bHQ7XG4vLyoqIEZvciBgJHNjcmVlbi1tZC1taW5gIGFuZCB1cC5cbiRjb250YWluZXItbWQ6ICAgICAgICAgICAgICAgICAkY29udGFpbmVyLWRlc2t0b3AgIWRlZmF1bHQ7XG5cbi8vIExhcmdlIHNjcmVlbiAvIHdpZGUgZGVza3RvcFxuJGNvbnRhaW5lci1sYXJnZS1kZXNrdG9wOiAgICAgICgxMTQwcHggKyAkZ3JpZC1ndXR0ZXItd2lkdGgpICFkZWZhdWx0O1xuLy8qKiBGb3IgYCRzY3JlZW4tbGctbWluYCBhbmQgdXAuXG4kY29udGFpbmVyLWxnOiAgICAgICAgICAgICAgICAgJGNvbnRhaW5lci1sYXJnZS1kZXNrdG9wICFkZWZhdWx0O1xuXG5cbi8vPT0gTmF2YmFyXG4vL1xuLy8jI1xuXG4vLyBCYXNpY3Mgb2YgYSBuYXZiYXJcbiRuYXZiYXItaGVpZ2h0OiAgICAgICAgICAgICAgICAgICAgNTBweCAhZGVmYXVsdDtcbiRuYXZiYXItbWFyZ2luLWJvdHRvbTogICAgICAgICAgICAgJGxpbmUtaGVpZ2h0LWNvbXB1dGVkICFkZWZhdWx0O1xuJG5hdmJhci1ib3JkZXItcmFkaXVzOiAgICAgICAgICAgICAkYm9yZGVyLXJhZGl1cy1iYXNlICFkZWZhdWx0O1xuJG5hdmJhci1wYWRkaW5nLWhvcml6b250YWw6ICAgICAgICBmbG9vcigoJGdyaWQtZ3V0dGVyLXdpZHRoIC8gMikpICFkZWZhdWx0O1xuJG5hdmJhci1wYWRkaW5nLXZlcnRpY2FsOiAgICAgICAgICAoKCRuYXZiYXItaGVpZ2h0IC0gJGxpbmUtaGVpZ2h0LWNvbXB1dGVkKSAvIDIpICFkZWZhdWx0O1xuJG5hdmJhci1jb2xsYXBzZS1tYXgtaGVpZ2h0OiAgICAgICAzNDBweCAhZGVmYXVsdDtcblxuJG5hdmJhci1kZWZhdWx0LWNvbG9yOiAgICAgICAgICAgICAjNzc3ICFkZWZhdWx0O1xuJG5hdmJhci1kZWZhdWx0LWJnOiAgICAgICAgICAgICAgICAjZjhmOGY4ICFkZWZhdWx0O1xuJG5hdmJhci1kZWZhdWx0LWJvcmRlcjogICAgICAgICAgICBkYXJrZW4oJG5hdmJhci1kZWZhdWx0LWJnLCA2LjUlKSAhZGVmYXVsdDtcblxuLy8gTmF2YmFyIGxpbmtzXG4kbmF2YmFyLWRlZmF1bHQtbGluay1jb2xvcjogICAgICAgICAgICAgICAgIzc3NyAhZGVmYXVsdDtcbiRuYXZiYXItZGVmYXVsdC1saW5rLWhvdmVyLWNvbG9yOiAgICAgICAgICAjMzMzICFkZWZhdWx0O1xuJG5hdmJhci1kZWZhdWx0LWxpbmstaG92ZXItYmc6ICAgICAgICAgICAgIHRyYW5zcGFyZW50ICFkZWZhdWx0O1xuJG5hdmJhci1kZWZhdWx0LWxpbmstYWN0aXZlLWNvbG9yOiAgICAgICAgICM1NTUgIWRlZmF1bHQ7XG4kbmF2YmFyLWRlZmF1bHQtbGluay1hY3RpdmUtYmc6ICAgICAgICAgICAgZGFya2VuKCRuYXZiYXItZGVmYXVsdC1iZywgNi41JSkgIWRlZmF1bHQ7XG4kbmF2YmFyLWRlZmF1bHQtbGluay1kaXNhYmxlZC1jb2xvcjogICAgICAgI2NjYyAhZGVmYXVsdDtcbiRuYXZiYXItZGVmYXVsdC1saW5rLWRpc2FibGVkLWJnOiAgICAgICAgICB0cmFuc3BhcmVudCAhZGVmYXVsdDtcblxuLy8gTmF2YmFyIGJyYW5kIGxhYmVsXG4kbmF2YmFyLWRlZmF1bHQtYnJhbmQtY29sb3I6ICAgICAgICAgICAgICAgJG5hdmJhci1kZWZhdWx0LWxpbmstY29sb3IgIWRlZmF1bHQ7XG4kbmF2YmFyLWRlZmF1bHQtYnJhbmQtaG92ZXItY29sb3I6ICAgICAgICAgZGFya2VuKCRuYXZiYXItZGVmYXVsdC1icmFuZC1jb2xvciwgMTAlKSAhZGVmYXVsdDtcbiRuYXZiYXItZGVmYXVsdC1icmFuZC1ob3Zlci1iZzogICAgICAgICAgICB0cmFuc3BhcmVudCAhZGVmYXVsdDtcblxuLy8gTmF2YmFyIHRvZ2dsZVxuJG5hdmJhci1kZWZhdWx0LXRvZ2dsZS1ob3Zlci1iZzogICAgICAgICAgICNkZGQgIWRlZmF1bHQ7XG4kbmF2YmFyLWRlZmF1bHQtdG9nZ2xlLWljb24tYmFyLWJnOiAgICAgICAgIzg4OCAhZGVmYXVsdDtcbiRuYXZiYXItZGVmYXVsdC10b2dnbGUtYm9yZGVyLWNvbG9yOiAgICAgICAjZGRkICFkZWZhdWx0O1xuXG5cbi8vIEludmVydGVkIG5hdmJhclxuLy8gUmVzZXQgaW52ZXJ0ZWQgbmF2YmFyIGJhc2ljc1xuJG5hdmJhci1pbnZlcnNlLWNvbG9yOiAgICAgICAgICAgICAgICAgICAgICBsaWdodGVuKCRncmF5LWxpZ2h0LCAxNSUpICFkZWZhdWx0O1xuJG5hdmJhci1pbnZlcnNlLWJnOiAgICAgICAgICAgICAgICAgICAgICAgICAjMjIyICFkZWZhdWx0O1xuJG5hdmJhci1pbnZlcnNlLWJvcmRlcjogICAgICAgICAgICAgICAgICAgICBkYXJrZW4oJG5hdmJhci1pbnZlcnNlLWJnLCAxMCUpICFkZWZhdWx0O1xuXG4vLyBJbnZlcnRlZCBuYXZiYXIgbGlua3NcbiRuYXZiYXItaW52ZXJzZS1saW5rLWNvbG9yOiAgICAgICAgICAgICAgICAgbGlnaHRlbigkZ3JheS1saWdodCwgMTUlKSAhZGVmYXVsdDtcbiRuYXZiYXItaW52ZXJzZS1saW5rLWhvdmVyLWNvbG9yOiAgICAgICAgICAgI2ZmZiAhZGVmYXVsdDtcbiRuYXZiYXItaW52ZXJzZS1saW5rLWhvdmVyLWJnOiAgICAgICAgICAgICAgdHJhbnNwYXJlbnQgIWRlZmF1bHQ7XG4kbmF2YmFyLWludmVyc2UtbGluay1hY3RpdmUtY29sb3I6ICAgICAgICAgICRuYXZiYXItaW52ZXJzZS1saW5rLWhvdmVyLWNvbG9yICFkZWZhdWx0O1xuJG5hdmJhci1pbnZlcnNlLWxpbmstYWN0aXZlLWJnOiAgICAgICAgICAgICBkYXJrZW4oJG5hdmJhci1pbnZlcnNlLWJnLCAxMCUpICFkZWZhdWx0O1xuJG5hdmJhci1pbnZlcnNlLWxpbmstZGlzYWJsZWQtY29sb3I6ICAgICAgICAjNDQ0ICFkZWZhdWx0O1xuJG5hdmJhci1pbnZlcnNlLWxpbmstZGlzYWJsZWQtYmc6ICAgICAgICAgICB0cmFuc3BhcmVudCAhZGVmYXVsdDtcblxuLy8gSW52ZXJ0ZWQgbmF2YmFyIGJyYW5kIGxhYmVsXG4kbmF2YmFyLWludmVyc2UtYnJhbmQtY29sb3I6ICAgICAgICAgICAgICAgICRuYXZiYXItaW52ZXJzZS1saW5rLWNvbG9yICFkZWZhdWx0O1xuJG5hdmJhci1pbnZlcnNlLWJyYW5kLWhvdmVyLWNvbG9yOiAgICAgICAgICAjZmZmICFkZWZhdWx0O1xuJG5hdmJhci1pbnZlcnNlLWJyYW5kLWhvdmVyLWJnOiAgICAgICAgICAgICB0cmFuc3BhcmVudCAhZGVmYXVsdDtcblxuLy8gSW52ZXJ0ZWQgbmF2YmFyIHRvZ2dsZVxuJG5hdmJhci1pbnZlcnNlLXRvZ2dsZS1ob3Zlci1iZzogICAgICAgICAgICAjMzMzICFkZWZhdWx0O1xuJG5hdmJhci1pbnZlcnNlLXRvZ2dsZS1pY29uLWJhci1iZzogICAgICAgICAjZmZmICFkZWZhdWx0O1xuJG5hdmJhci1pbnZlcnNlLXRvZ2dsZS1ib3JkZXItY29sb3I6ICAgICAgICAjMzMzICFkZWZhdWx0O1xuXG5cbi8vPT0gTmF2c1xuLy9cbi8vIyNcblxuLy89PT0gU2hhcmVkIG5hdiBzdHlsZXNcbiRuYXYtbGluay1wYWRkaW5nOiAgICAgICAgICAgICAgICAgICAgICAgICAgMTBweCAxNXB4ICFkZWZhdWx0O1xuJG5hdi1saW5rLWhvdmVyLWJnOiAgICAgICAgICAgICAgICAgICAgICAgICAkZ3JheS1saWdodGVyICFkZWZhdWx0O1xuXG4kbmF2LWRpc2FibGVkLWxpbmstY29sb3I6ICAgICAgICAgICAgICAgICAgICRncmF5LWxpZ2h0ICFkZWZhdWx0O1xuJG5hdi1kaXNhYmxlZC1saW5rLWhvdmVyLWNvbG9yOiAgICAgICAgICAgICAkZ3JheS1saWdodCAhZGVmYXVsdDtcblxuLy89PSBUYWJzXG4kbmF2LXRhYnMtYm9yZGVyLWNvbG9yOiAgICAgICAgICAgICAgICAgICAgICNkZGQgIWRlZmF1bHQ7XG5cbiRuYXYtdGFicy1saW5rLWhvdmVyLWJvcmRlci1jb2xvcjogICAgICAgICAgJGdyYXktbGlnaHRlciAhZGVmYXVsdDtcblxuJG5hdi10YWJzLWFjdGl2ZS1saW5rLWhvdmVyLWJnOiAgICAgICAgICAgICAkYm9keS1iZyAhZGVmYXVsdDtcbiRuYXYtdGFicy1hY3RpdmUtbGluay1ob3Zlci1jb2xvcjogICAgICAgICAgJGdyYXkgIWRlZmF1bHQ7XG4kbmF2LXRhYnMtYWN0aXZlLWxpbmstaG92ZXItYm9yZGVyLWNvbG9yOiAgICNkZGQgIWRlZmF1bHQ7XG5cbiRuYXYtdGFicy1qdXN0aWZpZWQtbGluay1ib3JkZXItY29sb3I6ICAgICAgICAgICAgI2RkZCAhZGVmYXVsdDtcbiRuYXYtdGFicy1qdXN0aWZpZWQtYWN0aXZlLWxpbmstYm9yZGVyLWNvbG9yOiAgICAgJGJvZHktYmcgIWRlZmF1bHQ7XG5cbi8vPT0gUGlsbHNcbiRuYXYtcGlsbHMtYm9yZGVyLXJhZGl1czogICAgICAgICAgICAgICAgICAgJGJvcmRlci1yYWRpdXMtYmFzZSAhZGVmYXVsdDtcbiRuYXYtcGlsbHMtYWN0aXZlLWxpbmstaG92ZXItYmc6ICAgICAgICAgICAgJGNvbXBvbmVudC1hY3RpdmUtYmcgIWRlZmF1bHQ7XG4kbmF2LXBpbGxzLWFjdGl2ZS1saW5rLWhvdmVyLWNvbG9yOiAgICAgICAgICRjb21wb25lbnQtYWN0aXZlLWNvbG9yICFkZWZhdWx0O1xuXG5cbi8vPT0gUGFnaW5hdGlvblxuLy9cbi8vIyNcblxuJHBhZ2luYXRpb24tY29sb3I6ICAgICAgICAgICAgICAgICAgICAgJGxpbmstY29sb3IgIWRlZmF1bHQ7XG4kcGFnaW5hdGlvbi1iZzogICAgICAgICAgICAgICAgICAgICAgICAjZmZmICFkZWZhdWx0O1xuJHBhZ2luYXRpb24tYm9yZGVyOiAgICAgICAgICAgICAgICAgICAgI2RkZCAhZGVmYXVsdDtcblxuJHBhZ2luYXRpb24taG92ZXItY29sb3I6ICAgICAgICAgICAgICAgJGxpbmstaG92ZXItY29sb3IgIWRlZmF1bHQ7XG4kcGFnaW5hdGlvbi1ob3Zlci1iZzogICAgICAgICAgICAgICAgICAkZ3JheS1saWdodGVyICFkZWZhdWx0O1xuJHBhZ2luYXRpb24taG92ZXItYm9yZGVyOiAgICAgICAgICAgICAgI2RkZCAhZGVmYXVsdDtcblxuJHBhZ2luYXRpb24tYWN0aXZlLWNvbG9yOiAgICAgICAgICAgICAgI2ZmZiAhZGVmYXVsdDtcbiRwYWdpbmF0aW9uLWFjdGl2ZS1iZzogICAgICAgICAgICAgICAgICRicmFuZC1wcmltYXJ5ICFkZWZhdWx0O1xuJHBhZ2luYXRpb24tYWN0aXZlLWJvcmRlcjogICAgICAgICAgICAgJGJyYW5kLXByaW1hcnkgIWRlZmF1bHQ7XG5cbiRwYWdpbmF0aW9uLWRpc2FibGVkLWNvbG9yOiAgICAgICAgICAgICRncmF5LWxpZ2h0ICFkZWZhdWx0O1xuJHBhZ2luYXRpb24tZGlzYWJsZWQtYmc6ICAgICAgICAgICAgICAgI2ZmZiAhZGVmYXVsdDtcbiRwYWdpbmF0aW9uLWRpc2FibGVkLWJvcmRlcjogICAgICAgICAgICNkZGQgIWRlZmF1bHQ7XG5cblxuLy89PSBQYWdlclxuLy9cbi8vIyNcblxuJHBhZ2VyLWJnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHBhZ2luYXRpb24tYmcgIWRlZmF1bHQ7XG4kcGFnZXItYm9yZGVyOiAgICAgICAgICAgICAgICAgICAgICAgICAkcGFnaW5hdGlvbi1ib3JkZXIgIWRlZmF1bHQ7XG4kcGFnZXItYm9yZGVyLXJhZGl1czogICAgICAgICAgICAgICAgICAxNXB4ICFkZWZhdWx0O1xuXG4kcGFnZXItaG92ZXItYmc6ICAgICAgICAgICAgICAgICAgICAgICAkcGFnaW5hdGlvbi1ob3Zlci1iZyAhZGVmYXVsdDtcblxuJHBhZ2VyLWFjdGl2ZS1iZzogICAgICAgICAgICAgICAgICAgICAgJHBhZ2luYXRpb24tYWN0aXZlLWJnICFkZWZhdWx0O1xuJHBhZ2VyLWFjdGl2ZS1jb2xvcjogICAgICAgICAgICAgICAgICAgJHBhZ2luYXRpb24tYWN0aXZlLWNvbG9yICFkZWZhdWx0O1xuXG4kcGFnZXItZGlzYWJsZWQtY29sb3I6ICAgICAgICAgICAgICAgICAkcGFnaW5hdGlvbi1kaXNhYmxlZC1jb2xvciAhZGVmYXVsdDtcblxuXG4vLz09IEp1bWJvdHJvblxuLy9cbi8vIyNcblxuJGp1bWJvdHJvbi1wYWRkaW5nOiAgICAgICAgICAgICAgMzBweCAhZGVmYXVsdDtcbiRqdW1ib3Ryb24tY29sb3I6ICAgICAgICAgICAgICAgIGluaGVyaXQgIWRlZmF1bHQ7XG4kanVtYm90cm9uLWJnOiAgICAgICAgICAgICAgICAgICAkZ3JheS1saWdodGVyICFkZWZhdWx0O1xuJGp1bWJvdHJvbi1oZWFkaW5nLWNvbG9yOiAgICAgICAgaW5oZXJpdCAhZGVmYXVsdDtcbiRqdW1ib3Ryb24tZm9udC1zaXplOiAgICAgICAgICAgIGNlaWwoKCRmb250LXNpemUtYmFzZSAqIDEuNSkpICFkZWZhdWx0O1xuXG5cbi8vPT0gRm9ybSBzdGF0ZXMgYW5kIGFsZXJ0c1xuLy9cbi8vIyMgRGVmaW5lIGNvbG9ycyBmb3IgZm9ybSBmZWVkYmFjayBzdGF0ZXMgYW5kLCBieSBkZWZhdWx0LCBhbGVydHMuXG5cbiRzdGF0ZS1zdWNjZXNzLXRleHQ6ICAgICAgICAgICAgICMzYzc2M2QgIWRlZmF1bHQ7XG4kc3RhdGUtc3VjY2Vzcy1iZzogICAgICAgICAgICAgICAjZGZmMGQ4ICFkZWZhdWx0O1xuJHN0YXRlLXN1Y2Nlc3MtYm9yZGVyOiAgICAgICAgICAgZGFya2VuKGFkanVzdC1odWUoJHN0YXRlLXN1Y2Nlc3MtYmcsIC0xMCksIDUlKSAhZGVmYXVsdDtcblxuJHN0YXRlLWluZm8tdGV4dDogICAgICAgICAgICAgICAgIzMxNzA4ZiAhZGVmYXVsdDtcbiRzdGF0ZS1pbmZvLWJnOiAgICAgICAgICAgICAgICAgICNkOWVkZjcgIWRlZmF1bHQ7XG4kc3RhdGUtaW5mby1ib3JkZXI6ICAgICAgICAgICAgICBkYXJrZW4oYWRqdXN0LWh1ZSgkc3RhdGUtaW5mby1iZywgLTEwKSwgNyUpICFkZWZhdWx0O1xuXG4kc3RhdGUtd2FybmluZy10ZXh0OiAgICAgICAgICAgICAjOGE2ZDNiICFkZWZhdWx0O1xuJHN0YXRlLXdhcm5pbmctYmc6ICAgICAgICAgICAgICAgI2ZjZjhlMyAhZGVmYXVsdDtcbiRzdGF0ZS13YXJuaW5nLWJvcmRlcjogICAgICAgICAgIGRhcmtlbihhZGp1c3QtaHVlKCRzdGF0ZS13YXJuaW5nLWJnLCAtMTApLCA1JSkgIWRlZmF1bHQ7XG5cbiRzdGF0ZS1kYW5nZXItdGV4dDogICAgICAgICAgICAgICNhOTQ0NDIgIWRlZmF1bHQ7XG4kc3RhdGUtZGFuZ2VyLWJnOiAgICAgICAgICAgICAgICAjZjJkZWRlICFkZWZhdWx0O1xuJHN0YXRlLWRhbmdlci1ib3JkZXI6ICAgICAgICAgICAgZGFya2VuKGFkanVzdC1odWUoJHN0YXRlLWRhbmdlci1iZywgLTEwKSwgNSUpICFkZWZhdWx0O1xuXG5cbi8vPT0gVG9vbHRpcHNcbi8vXG4vLyMjXG5cbi8vKiogVG9vbHRpcCBtYXggd2lkdGhcbiR0b29sdGlwLW1heC13aWR0aDogICAgICAgICAgIDIwMHB4ICFkZWZhdWx0O1xuLy8qKiBUb29sdGlwIHRleHQgY29sb3JcbiR0b29sdGlwLWNvbG9yOiAgICAgICAgICAgICAgICNmZmYgIWRlZmF1bHQ7XG4vLyoqIFRvb2x0aXAgYmFja2dyb3VuZCBjb2xvclxuJHRvb2x0aXAtYmc6ICAgICAgICAgICAgICAgICAgIzAwMCAhZGVmYXVsdDtcbiR0b29sdGlwLW9wYWNpdHk6ICAgICAgICAgICAgIC45ICFkZWZhdWx0O1xuXG4vLyoqIFRvb2x0aXAgYXJyb3cgd2lkdGhcbiR0b29sdGlwLWFycm93LXdpZHRoOiAgICAgICAgIDVweCAhZGVmYXVsdDtcbi8vKiogVG9vbHRpcCBhcnJvdyBjb2xvclxuJHRvb2x0aXAtYXJyb3ctY29sb3I6ICAgICAgICAgJHRvb2x0aXAtYmcgIWRlZmF1bHQ7XG5cblxuLy89PSBQb3BvdmVyc1xuLy9cbi8vIyNcblxuLy8qKiBQb3BvdmVyIGJvZHkgYmFja2dyb3VuZCBjb2xvclxuJHBvcG92ZXItYmc6ICAgICAgICAgICAgICAgICAgICAgICAgICAjZmZmICFkZWZhdWx0O1xuLy8qKiBQb3BvdmVyIG1heGltdW0gd2lkdGhcbiRwb3BvdmVyLW1heC13aWR0aDogICAgICAgICAgICAgICAgICAgMjc2cHggIWRlZmF1bHQ7XG4vLyoqIFBvcG92ZXIgYm9yZGVyIGNvbG9yXG4kcG9wb3Zlci1ib3JkZXItY29sb3I6ICAgICAgICAgICAgICAgIHJnYmEoMCwwLDAsLjIpICFkZWZhdWx0O1xuLy8qKiBQb3BvdmVyIGZhbGxiYWNrIGJvcmRlciBjb2xvclxuJHBvcG92ZXItZmFsbGJhY2stYm9yZGVyLWNvbG9yOiAgICAgICAjY2NjICFkZWZhdWx0O1xuXG4vLyoqIFBvcG92ZXIgdGl0bGUgYmFja2dyb3VuZCBjb2xvclxuJHBvcG92ZXItdGl0bGUtYmc6ICAgICAgICAgICAgICAgICAgICBkYXJrZW4oJHBvcG92ZXItYmcsIDMlKSAhZGVmYXVsdDtcblxuLy8qKiBQb3BvdmVyIGFycm93IHdpZHRoXG4kcG9wb3Zlci1hcnJvdy13aWR0aDogICAgICAgICAgICAgICAgIDEwcHggIWRlZmF1bHQ7XG4vLyoqIFBvcG92ZXIgYXJyb3cgY29sb3JcbiRwb3BvdmVyLWFycm93LWNvbG9yOiAgICAgICAgICAgICAgICAgJHBvcG92ZXItYmcgIWRlZmF1bHQ7XG5cbi8vKiogUG9wb3ZlciBvdXRlciBhcnJvdyB3aWR0aFxuJHBvcG92ZXItYXJyb3ctb3V0ZXItd2lkdGg6ICAgICAgICAgICAoJHBvcG92ZXItYXJyb3ctd2lkdGggKyAxKSAhZGVmYXVsdDtcbi8vKiogUG9wb3ZlciBvdXRlciBhcnJvdyBjb2xvclxuJHBvcG92ZXItYXJyb3ctb3V0ZXItY29sb3I6ICAgICAgICAgICBmYWRlX2luKCRwb3BvdmVyLWJvcmRlci1jb2xvciwgMC4wNSkgIWRlZmF1bHQ7XG4vLyoqIFBvcG92ZXIgb3V0ZXIgYXJyb3cgZmFsbGJhY2sgY29sb3JcbiRwb3BvdmVyLWFycm93LW91dGVyLWZhbGxiYWNrLWNvbG9yOiAgZGFya2VuKCRwb3BvdmVyLWZhbGxiYWNrLWJvcmRlci1jb2xvciwgMjAlKSAhZGVmYXVsdDtcblxuXG4vLz09IExhYmVsc1xuLy9cbi8vIyNcblxuLy8qKiBEZWZhdWx0IGxhYmVsIGJhY2tncm91bmQgY29sb3JcbiRsYWJlbC1kZWZhdWx0LWJnOiAgICAgICAgICAgICRncmF5LWxpZ2h0ICFkZWZhdWx0O1xuLy8qKiBQcmltYXJ5IGxhYmVsIGJhY2tncm91bmQgY29sb3JcbiRsYWJlbC1wcmltYXJ5LWJnOiAgICAgICAgICAgICRicmFuZC1wcmltYXJ5ICFkZWZhdWx0O1xuLy8qKiBTdWNjZXNzIGxhYmVsIGJhY2tncm91bmQgY29sb3JcbiRsYWJlbC1zdWNjZXNzLWJnOiAgICAgICAgICAgICRicmFuZC1zdWNjZXNzICFkZWZhdWx0O1xuLy8qKiBJbmZvIGxhYmVsIGJhY2tncm91bmQgY29sb3JcbiRsYWJlbC1pbmZvLWJnOiAgICAgICAgICAgICAgICRicmFuZC1pbmZvICFkZWZhdWx0O1xuLy8qKiBXYXJuaW5nIGxhYmVsIGJhY2tncm91bmQgY29sb3JcbiRsYWJlbC13YXJuaW5nLWJnOiAgICAgICAgICAgICRicmFuZC13YXJuaW5nICFkZWZhdWx0O1xuLy8qKiBEYW5nZXIgbGFiZWwgYmFja2dyb3VuZCBjb2xvclxuJGxhYmVsLWRhbmdlci1iZzogICAgICAgICAgICAgJGJyYW5kLWRhbmdlciAhZGVmYXVsdDtcblxuLy8qKiBEZWZhdWx0IGxhYmVsIHRleHQgY29sb3JcbiRsYWJlbC1jb2xvcjogICAgICAgICAgICAgICAgICNmZmYgIWRlZmF1bHQ7XG4vLyoqIERlZmF1bHQgdGV4dCBjb2xvciBvZiBhIGxpbmtlZCBsYWJlbFxuJGxhYmVsLWxpbmstaG92ZXItY29sb3I6ICAgICAgI2ZmZiAhZGVmYXVsdDtcblxuXG4vLz09IE1vZGFsc1xuLy9cbi8vIyNcblxuLy8qKiBQYWRkaW5nIGFwcGxpZWQgdG8gdGhlIG1vZGFsIGJvZHlcbiRtb2RhbC1pbm5lci1wYWRkaW5nOiAgICAgICAgIDE1cHggIWRlZmF1bHQ7XG5cbi8vKiogUGFkZGluZyBhcHBsaWVkIHRvIHRoZSBtb2RhbCB0aXRsZVxuJG1vZGFsLXRpdGxlLXBhZGRpbmc6ICAgICAgICAgMTVweCAhZGVmYXVsdDtcbi8vKiogTW9kYWwgdGl0bGUgbGluZS1oZWlnaHRcbiRtb2RhbC10aXRsZS1saW5lLWhlaWdodDogICAgICRsaW5lLWhlaWdodC1iYXNlICFkZWZhdWx0O1xuXG4vLyoqIEJhY2tncm91bmQgY29sb3Igb2YgbW9kYWwgY29udGVudCBhcmVhXG4kbW9kYWwtY29udGVudC1iZzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICNmZmYgIWRlZmF1bHQ7XG4vLyoqIE1vZGFsIGNvbnRlbnQgYm9yZGVyIGNvbG9yXG4kbW9kYWwtY29udGVudC1ib3JkZXItY29sb3I6ICAgICAgICAgICAgICAgICAgIHJnYmEoMCwwLDAsLjIpICFkZWZhdWx0O1xuLy8qKiBNb2RhbCBjb250ZW50IGJvcmRlciBjb2xvciAqKmZvciBJRTgqKlxuJG1vZGFsLWNvbnRlbnQtZmFsbGJhY2stYm9yZGVyLWNvbG9yOiAgICAgICAgICAjOTk5ICFkZWZhdWx0O1xuXG4vLyoqIE1vZGFsIGJhY2tkcm9wIGJhY2tncm91bmQgY29sb3JcbiRtb2RhbC1iYWNrZHJvcC1iZzogICAgICAgICAgICMwMDAgIWRlZmF1bHQ7XG4vLyoqIE1vZGFsIGJhY2tkcm9wIG9wYWNpdHlcbiRtb2RhbC1iYWNrZHJvcC1vcGFjaXR5OiAgICAgIC41ICFkZWZhdWx0O1xuLy8qKiBNb2RhbCBoZWFkZXIgYm9yZGVyIGNvbG9yXG4kbW9kYWwtaGVhZGVyLWJvcmRlci1jb2xvcjogICAjZTVlNWU1ICFkZWZhdWx0O1xuLy8qKiBNb2RhbCBmb290ZXIgYm9yZGVyIGNvbG9yXG4kbW9kYWwtZm9vdGVyLWJvcmRlci1jb2xvcjogICAkbW9kYWwtaGVhZGVyLWJvcmRlci1jb2xvciAhZGVmYXVsdDtcblxuJG1vZGFsLWxnOiAgICAgICAgICAgICAgICAgICAgOTAwcHggIWRlZmF1bHQ7XG4kbW9kYWwtbWQ6ICAgICAgICAgICAgICAgICAgICA2MDBweCAhZGVmYXVsdDtcbiRtb2RhbC1zbTogICAgICAgICAgICAgICAgICAgIDMwMHB4ICFkZWZhdWx0O1xuXG5cbi8vPT0gQWxlcnRzXG4vL1xuLy8jIyBEZWZpbmUgYWxlcnQgY29sb3JzLCBib3JkZXIgcmFkaXVzLCBhbmQgcGFkZGluZy5cblxuJGFsZXJ0LXBhZGRpbmc6ICAgICAgICAgICAgICAgMTVweCAhZGVmYXVsdDtcbiRhbGVydC1ib3JkZXItcmFkaXVzOiAgICAgICAgICRib3JkZXItcmFkaXVzLWJhc2UgIWRlZmF1bHQ7XG4kYWxlcnQtbGluay1mb250LXdlaWdodDogICAgICBib2xkICFkZWZhdWx0O1xuXG4kYWxlcnQtc3VjY2Vzcy1iZzogICAgICAgICAgICAkc3RhdGUtc3VjY2Vzcy1iZyAhZGVmYXVsdDtcbiRhbGVydC1zdWNjZXNzLXRleHQ6ICAgICAgICAgICRzdGF0ZS1zdWNjZXNzLXRleHQgIWRlZmF1bHQ7XG4kYWxlcnQtc3VjY2Vzcy1ib3JkZXI6ICAgICAgICAkc3RhdGUtc3VjY2Vzcy1ib3JkZXIgIWRlZmF1bHQ7XG5cbiRhbGVydC1pbmZvLWJnOiAgICAgICAgICAgICAgICRzdGF0ZS1pbmZvLWJnICFkZWZhdWx0O1xuJGFsZXJ0LWluZm8tdGV4dDogICAgICAgICAgICAgJHN0YXRlLWluZm8tdGV4dCAhZGVmYXVsdDtcbiRhbGVydC1pbmZvLWJvcmRlcjogICAgICAgICAgICRzdGF0ZS1pbmZvLWJvcmRlciAhZGVmYXVsdDtcblxuJGFsZXJ0LXdhcm5pbmctYmc6ICAgICAgICAgICAgJHN0YXRlLXdhcm5pbmctYmcgIWRlZmF1bHQ7XG4kYWxlcnQtd2FybmluZy10ZXh0OiAgICAgICAgICAkc3RhdGUtd2FybmluZy10ZXh0ICFkZWZhdWx0O1xuJGFsZXJ0LXdhcm5pbmctYm9yZGVyOiAgICAgICAgJHN0YXRlLXdhcm5pbmctYm9yZGVyICFkZWZhdWx0O1xuXG4kYWxlcnQtZGFuZ2VyLWJnOiAgICAgICAgICAgICAkc3RhdGUtZGFuZ2VyLWJnICFkZWZhdWx0O1xuJGFsZXJ0LWRhbmdlci10ZXh0OiAgICAgICAgICAgJHN0YXRlLWRhbmdlci10ZXh0ICFkZWZhdWx0O1xuJGFsZXJ0LWRhbmdlci1ib3JkZXI6ICAgICAgICAgJHN0YXRlLWRhbmdlci1ib3JkZXIgIWRlZmF1bHQ7XG5cblxuLy89PSBQcm9ncmVzcyBiYXJzXG4vL1xuLy8jI1xuXG4vLyoqIEJhY2tncm91bmQgY29sb3Igb2YgdGhlIHdob2xlIHByb2dyZXNzIGNvbXBvbmVudFxuJHByb2dyZXNzLWJnOiAgICAgICAgICAgICAgICAgI2Y1ZjVmNSAhZGVmYXVsdDtcbi8vKiogUHJvZ3Jlc3MgYmFyIHRleHQgY29sb3JcbiRwcm9ncmVzcy1iYXItY29sb3I6ICAgICAgICAgICNmZmYgIWRlZmF1bHQ7XG4vLyoqIFZhcmlhYmxlIGZvciBzZXR0aW5nIHJvdW5kZWQgY29ybmVycyBvbiBwcm9ncmVzcyBiYXIuXG4kcHJvZ3Jlc3MtYm9yZGVyLXJhZGl1czogICAgICAkYm9yZGVyLXJhZGl1cy1iYXNlICFkZWZhdWx0O1xuXG4vLyoqIERlZmF1bHQgcHJvZ3Jlc3MgYmFyIGNvbG9yXG4kcHJvZ3Jlc3MtYmFyLWJnOiAgICAgICAgICAgICAkYnJhbmQtcHJpbWFyeSAhZGVmYXVsdDtcbi8vKiogU3VjY2VzcyBwcm9ncmVzcyBiYXIgY29sb3JcbiRwcm9ncmVzcy1iYXItc3VjY2Vzcy1iZzogICAgICRicmFuZC1zdWNjZXNzICFkZWZhdWx0O1xuLy8qKiBXYXJuaW5nIHByb2dyZXNzIGJhciBjb2xvclxuJHByb2dyZXNzLWJhci13YXJuaW5nLWJnOiAgICAgJGJyYW5kLXdhcm5pbmcgIWRlZmF1bHQ7XG4vLyoqIERhbmdlciBwcm9ncmVzcyBiYXIgY29sb3JcbiRwcm9ncmVzcy1iYXItZGFuZ2VyLWJnOiAgICAgICRicmFuZC1kYW5nZXIgIWRlZmF1bHQ7XG4vLyoqIEluZm8gcHJvZ3Jlc3MgYmFyIGNvbG9yXG4kcHJvZ3Jlc3MtYmFyLWluZm8tYmc6ICAgICAgICAkYnJhbmQtaW5mbyAhZGVmYXVsdDtcblxuXG4vLz09IExpc3QgZ3JvdXBcbi8vXG4vLyMjXG5cbi8vKiogQmFja2dyb3VuZCBjb2xvciBvbiBgLmxpc3QtZ3JvdXAtaXRlbWBcbiRsaXN0LWdyb3VwLWJnOiAgICAgICAgICAgICAgICAgI2ZmZiAhZGVmYXVsdDtcbi8vKiogYC5saXN0LWdyb3VwLWl0ZW1gIGJvcmRlciBjb2xvclxuJGxpc3QtZ3JvdXAtYm9yZGVyOiAgICAgICAgICAgICAjZGRkICFkZWZhdWx0O1xuLy8qKiBMaXN0IGdyb3VwIGJvcmRlciByYWRpdXNcbiRsaXN0LWdyb3VwLWJvcmRlci1yYWRpdXM6ICAgICAgJGJvcmRlci1yYWRpdXMtYmFzZSAhZGVmYXVsdDtcblxuLy8qKiBCYWNrZ3JvdW5kIGNvbG9yIG9mIHNpbmdsZSBsaXN0IGl0ZW1zIG9uIGhvdmVyXG4kbGlzdC1ncm91cC1ob3Zlci1iZzogICAgICAgICAgICNmNWY1ZjUgIWRlZmF1bHQ7XG4vLyoqIFRleHQgY29sb3Igb2YgYWN0aXZlIGxpc3QgaXRlbXNcbiRsaXN0LWdyb3VwLWFjdGl2ZS1jb2xvcjogICAgICAgJGNvbXBvbmVudC1hY3RpdmUtY29sb3IgIWRlZmF1bHQ7XG4vLyoqIEJhY2tncm91bmQgY29sb3Igb2YgYWN0aXZlIGxpc3QgaXRlbXNcbiRsaXN0LWdyb3VwLWFjdGl2ZS1iZzogICAgICAgICAgJGNvbXBvbmVudC1hY3RpdmUtYmcgIWRlZmF1bHQ7XG4vLyoqIEJvcmRlciBjb2xvciBvZiBhY3RpdmUgbGlzdCBlbGVtZW50c1xuJGxpc3QtZ3JvdXAtYWN0aXZlLWJvcmRlcjogICAgICAkbGlzdC1ncm91cC1hY3RpdmUtYmcgIWRlZmF1bHQ7XG4vLyoqIFRleHQgY29sb3IgZm9yIGNvbnRlbnQgd2l0aGluIGFjdGl2ZSBsaXN0IGl0ZW1zXG4kbGlzdC1ncm91cC1hY3RpdmUtdGV4dC1jb2xvcjogIGxpZ2h0ZW4oJGxpc3QtZ3JvdXAtYWN0aXZlLWJnLCA0MCUpICFkZWZhdWx0O1xuXG4vLyoqIFRleHQgY29sb3Igb2YgZGlzYWJsZWQgbGlzdCBpdGVtc1xuJGxpc3QtZ3JvdXAtZGlzYWJsZWQtY29sb3I6ICAgICAgJGdyYXktbGlnaHQgIWRlZmF1bHQ7XG4vLyoqIEJhY2tncm91bmQgY29sb3Igb2YgZGlzYWJsZWQgbGlzdCBpdGVtc1xuJGxpc3QtZ3JvdXAtZGlzYWJsZWQtYmc6ICAgICAgICAgJGdyYXktbGlnaHRlciAhZGVmYXVsdDtcbi8vKiogVGV4dCBjb2xvciBmb3IgY29udGVudCB3aXRoaW4gZGlzYWJsZWQgbGlzdCBpdGVtc1xuJGxpc3QtZ3JvdXAtZGlzYWJsZWQtdGV4dC1jb2xvcjogJGxpc3QtZ3JvdXAtZGlzYWJsZWQtY29sb3IgIWRlZmF1bHQ7XG5cbiRsaXN0LWdyb3VwLWxpbmstY29sb3I6ICAgICAgICAgIzU1NSAhZGVmYXVsdDtcbiRsaXN0LWdyb3VwLWxpbmstaG92ZXItY29sb3I6ICAgJGxpc3QtZ3JvdXAtbGluay1jb2xvciAhZGVmYXVsdDtcbiRsaXN0LWdyb3VwLWxpbmstaGVhZGluZy1jb2xvcjogIzMzMyAhZGVmYXVsdDtcblxuXG4vLz09IFBhbmVsc1xuLy9cbi8vIyNcblxuJHBhbmVsLWJnOiAgICAgICAgICAgICAgICAgICAgI2ZmZiAhZGVmYXVsdDtcbiRwYW5lbC1ib2R5LXBhZGRpbmc6ICAgICAgICAgIDE1cHggIWRlZmF1bHQ7XG4kcGFuZWwtaGVhZGluZy1wYWRkaW5nOiAgICAgICAxMHB4IDE1cHggIWRlZmF1bHQ7XG4kcGFuZWwtZm9vdGVyLXBhZGRpbmc6ICAgICAgICAkcGFuZWwtaGVhZGluZy1wYWRkaW5nICFkZWZhdWx0O1xuJHBhbmVsLWJvcmRlci1yYWRpdXM6ICAgICAgICAgJGJvcmRlci1yYWRpdXMtYmFzZSAhZGVmYXVsdDtcblxuLy8qKiBCb3JkZXIgY29sb3IgZm9yIGVsZW1lbnRzIHdpdGhpbiBwYW5lbHNcbiRwYW5lbC1pbm5lci1ib3JkZXI6ICAgICAgICAgICNkZGQgIWRlZmF1bHQ7XG4kcGFuZWwtZm9vdGVyLWJnOiAgICAgICAgICAgICAjZjVmNWY1ICFkZWZhdWx0O1xuXG4kcGFuZWwtZGVmYXVsdC10ZXh0OiAgICAgICAgICAkZ3JheS1kYXJrICFkZWZhdWx0O1xuJHBhbmVsLWRlZmF1bHQtYm9yZGVyOiAgICAgICAgI2RkZCAhZGVmYXVsdDtcbiRwYW5lbC1kZWZhdWx0LWhlYWRpbmctYmc6ICAgICNmNWY1ZjUgIWRlZmF1bHQ7XG5cbiRwYW5lbC1wcmltYXJ5LXRleHQ6ICAgICAgICAgICNmZmYgIWRlZmF1bHQ7XG4kcGFuZWwtcHJpbWFyeS1ib3JkZXI6ICAgICAgICAkYnJhbmQtcHJpbWFyeSAhZGVmYXVsdDtcbiRwYW5lbC1wcmltYXJ5LWhlYWRpbmctYmc6ICAgICRicmFuZC1wcmltYXJ5ICFkZWZhdWx0O1xuXG4kcGFuZWwtc3VjY2Vzcy10ZXh0OiAgICAgICAgICAkc3RhdGUtc3VjY2Vzcy10ZXh0ICFkZWZhdWx0O1xuJHBhbmVsLXN1Y2Nlc3MtYm9yZGVyOiAgICAgICAgJHN0YXRlLXN1Y2Nlc3MtYm9yZGVyICFkZWZhdWx0O1xuJHBhbmVsLXN1Y2Nlc3MtaGVhZGluZy1iZzogICAgJHN0YXRlLXN1Y2Nlc3MtYmcgIWRlZmF1bHQ7XG5cbiRwYW5lbC1pbmZvLXRleHQ6ICAgICAgICAgICAgICRzdGF0ZS1pbmZvLXRleHQgIWRlZmF1bHQ7XG4kcGFuZWwtaW5mby1ib3JkZXI6ICAgICAgICAgICAkc3RhdGUtaW5mby1ib3JkZXIgIWRlZmF1bHQ7XG4kcGFuZWwtaW5mby1oZWFkaW5nLWJnOiAgICAgICAkc3RhdGUtaW5mby1iZyAhZGVmYXVsdDtcblxuJHBhbmVsLXdhcm5pbmctdGV4dDogICAgICAgICAgJHN0YXRlLXdhcm5pbmctdGV4dCAhZGVmYXVsdDtcbiRwYW5lbC13YXJuaW5nLWJvcmRlcjogICAgICAgICRzdGF0ZS13YXJuaW5nLWJvcmRlciAhZGVmYXVsdDtcbiRwYW5lbC13YXJuaW5nLWhlYWRpbmctYmc6ICAgICRzdGF0ZS13YXJuaW5nLWJnICFkZWZhdWx0O1xuXG4kcGFuZWwtZGFuZ2VyLXRleHQ6ICAgICAgICAgICAkc3RhdGUtZGFuZ2VyLXRleHQgIWRlZmF1bHQ7XG4kcGFuZWwtZGFuZ2VyLWJvcmRlcjogICAgICAgICAkc3RhdGUtZGFuZ2VyLWJvcmRlciAhZGVmYXVsdDtcbiRwYW5lbC1kYW5nZXItaGVhZGluZy1iZzogICAgICRzdGF0ZS1kYW5nZXItYmcgIWRlZmF1bHQ7XG5cblxuLy89PSBUaHVtYm5haWxzXG4vL1xuLy8jI1xuXG4vLyoqIFBhZGRpbmcgYXJvdW5kIHRoZSB0aHVtYm5haWwgaW1hZ2VcbiR0aHVtYm5haWwtcGFkZGluZzogICAgICAgICAgIDRweCAhZGVmYXVsdDtcbi8vKiogVGh1bWJuYWlsIGJhY2tncm91bmQgY29sb3JcbiR0aHVtYm5haWwtYmc6ICAgICAgICAgICAgICAgICRib2R5LWJnICFkZWZhdWx0O1xuLy8qKiBUaHVtYm5haWwgYm9yZGVyIGNvbG9yXG4kdGh1bWJuYWlsLWJvcmRlcjogICAgICAgICAgICAjZGRkICFkZWZhdWx0O1xuLy8qKiBUaHVtYm5haWwgYm9yZGVyIHJhZGl1c1xuJHRodW1ibmFpbC1ib3JkZXItcmFkaXVzOiAgICAgJGJvcmRlci1yYWRpdXMtYmFzZSAhZGVmYXVsdDtcblxuLy8qKiBDdXN0b20gdGV4dCBjb2xvciBmb3IgdGh1bWJuYWlsIGNhcHRpb25zXG4kdGh1bWJuYWlsLWNhcHRpb24tY29sb3I6ICAgICAkdGV4dC1jb2xvciAhZGVmYXVsdDtcbi8vKiogUGFkZGluZyBhcm91bmQgdGhlIHRodW1ibmFpbCBjYXB0aW9uXG4kdGh1bWJuYWlsLWNhcHRpb24tcGFkZGluZzogICA5cHggIWRlZmF1bHQ7XG5cblxuLy89PSBXZWxsc1xuLy9cbi8vIyNcblxuJHdlbGwtYmc6ICAgICAgICAgICAgICAgICAgICAgI2Y1ZjVmNSAhZGVmYXVsdDtcbiR3ZWxsLWJvcmRlcjogICAgICAgICAgICAgICAgIGRhcmtlbigkd2VsbC1iZywgNyUpICFkZWZhdWx0O1xuXG5cbi8vPT0gQmFkZ2VzXG4vL1xuLy8jI1xuXG4kYmFkZ2UtY29sb3I6ICAgICAgICAgICAgICAgICAjZmZmICFkZWZhdWx0O1xuLy8qKiBMaW5rZWQgYmFkZ2UgdGV4dCBjb2xvciBvbiBob3ZlclxuJGJhZGdlLWxpbmstaG92ZXItY29sb3I6ICAgICAgI2ZmZiAhZGVmYXVsdDtcbiRiYWRnZS1iZzogICAgICAgICAgICAgICAgICAgICRncmF5LWxpZ2h0ICFkZWZhdWx0O1xuXG4vLyoqIEJhZGdlIHRleHQgY29sb3IgaW4gYWN0aXZlIG5hdiBsaW5rXG4kYmFkZ2UtYWN0aXZlLWNvbG9yOiAgICAgICAgICAkbGluay1jb2xvciAhZGVmYXVsdDtcbi8vKiogQmFkZ2UgYmFja2dyb3VuZCBjb2xvciBpbiBhY3RpdmUgbmF2IGxpbmtcbiRiYWRnZS1hY3RpdmUtYmc6ICAgICAgICAgICAgICNmZmYgIWRlZmF1bHQ7XG5cbiRiYWRnZS1mb250LXdlaWdodDogICAgICAgICAgIGJvbGQgIWRlZmF1bHQ7XG4kYmFkZ2UtbGluZS1oZWlnaHQ6ICAgICAgICAgICAxICFkZWZhdWx0O1xuJGJhZGdlLWJvcmRlci1yYWRpdXM6ICAgICAgICAgMTBweCAhZGVmYXVsdDtcblxuXG4vLz09IEJyZWFkY3J1bWJzXG4vL1xuLy8jI1xuXG4kYnJlYWRjcnVtYi1wYWRkaW5nLXZlcnRpY2FsOiAgIDhweCAhZGVmYXVsdDtcbiRicmVhZGNydW1iLXBhZGRpbmctaG9yaXpvbnRhbDogMTVweCAhZGVmYXVsdDtcbi8vKiogQnJlYWRjcnVtYiBiYWNrZ3JvdW5kIGNvbG9yXG4kYnJlYWRjcnVtYi1iZzogICAgICAgICAgICAgICAgICNmNWY1ZjUgIWRlZmF1bHQ7XG4vLyoqIEJyZWFkY3J1bWIgdGV4dCBjb2xvclxuJGJyZWFkY3J1bWItY29sb3I6ICAgICAgICAgICAgICAjY2NjICFkZWZhdWx0O1xuLy8qKiBUZXh0IGNvbG9yIG9mIGN1cnJlbnQgcGFnZSBpbiB0aGUgYnJlYWRjcnVtYlxuJGJyZWFkY3J1bWItYWN0aXZlLWNvbG9yOiAgICAgICAkZ3JheS1saWdodCAhZGVmYXVsdDtcbi8vKiogVGV4dHVhbCBzZXBhcmF0b3IgZm9yIGJldHdlZW4gYnJlYWRjcnVtYiBlbGVtZW50c1xuJGJyZWFkY3J1bWItc2VwYXJhdG9yOiAgICAgICAgICBcIi9cIiAhZGVmYXVsdDtcblxuXG4vLz09IENhcm91c2VsXG4vL1xuLy8jI1xuXG4kY2Fyb3VzZWwtdGV4dC1zaGFkb3c6ICAgICAgICAgICAgICAgICAgICAgICAgMCAxcHggMnB4IHJnYmEoMCwwLDAsLjYpICFkZWZhdWx0O1xuXG4kY2Fyb3VzZWwtY29udHJvbC1jb2xvcjogICAgICAgICAgICAgICAgICAgICAgI2ZmZiAhZGVmYXVsdDtcbiRjYXJvdXNlbC1jb250cm9sLXdpZHRoOiAgICAgICAgICAgICAgICAgICAgICAxNSUgIWRlZmF1bHQ7XG4kY2Fyb3VzZWwtY29udHJvbC1vcGFjaXR5OiAgICAgICAgICAgICAgICAgICAgLjUgIWRlZmF1bHQ7XG4kY2Fyb3VzZWwtY29udHJvbC1mb250LXNpemU6ICAgICAgICAgICAgICAgICAgMjBweCAhZGVmYXVsdDtcblxuJGNhcm91c2VsLWluZGljYXRvci1hY3RpdmUtYmc6ICAgICAgICAgICAgICAgICNmZmYgIWRlZmF1bHQ7XG4kY2Fyb3VzZWwtaW5kaWNhdG9yLWJvcmRlci1jb2xvcjogICAgICAgICAgICAgI2ZmZiAhZGVmYXVsdDtcblxuJGNhcm91c2VsLWNhcHRpb24tY29sb3I6ICAgICAgICAgICAgICAgICAgICAgICNmZmYgIWRlZmF1bHQ7XG5cblxuLy89PSBDbG9zZVxuLy9cbi8vIyNcblxuJGNsb3NlLWZvbnQtd2VpZ2h0OiAgICAgICAgICAgYm9sZCAhZGVmYXVsdDtcbiRjbG9zZS1jb2xvcjogICAgICAgICAgICAgICAgICMwMDAgIWRlZmF1bHQ7XG4kY2xvc2UtdGV4dC1zaGFkb3c6ICAgICAgICAgICAwIDFweCAwICNmZmYgIWRlZmF1bHQ7XG5cblxuLy89PSBDb2RlXG4vL1xuLy8jI1xuXG4kY29kZS1jb2xvcjogICAgICAgICAgICAgICAgICAjNEQ4Q0Y0ICFkZWZhdWx0O1xuJGNvZGUtYmc6ICAgICAgICAgICAgICAgICAgICAgd2hpdGVzbW9rZSAhZGVmYXVsdDtcblxuJGtiZC1jb2xvcjogICAgICAgICAgICAgICAgICAgI2ZmZiAhZGVmYXVsdDtcbiRrYmQtYmc6ICAgICAgICAgICAgICAgICAgICAgICMzMzMgIWRlZmF1bHQ7XG5cbiRwcmUtYmc6ICAgICAgICAgICAgICAgICAgICAgICNmNWY1ZjUgIWRlZmF1bHQ7XG4kcHJlLWNvbG9yOiAgICAgICAgICAgICAgICAgICAkZ3JheS1kYXJrICFkZWZhdWx0O1xuJHByZS1ib3JkZXItY29sb3I6ICAgICAgICAgICAgI2NjYyAhZGVmYXVsdDtcbiRwcmUtc2Nyb2xsYWJsZS1tYXgtaGVpZ2h0OiAgIDM0MHB4ICFkZWZhdWx0O1xuXG5cbi8vPT0gVHlwZVxuLy9cbi8vIyNcblxuLy8qKiBIb3Jpem9udGFsIG9mZnNldCBmb3IgZm9ybXMgYW5kIGxpc3RzLlxuJGNvbXBvbmVudC1vZmZzZXQtaG9yaXpvbnRhbDogMTgwcHggIWRlZmF1bHQ7XG4vLyoqIFRleHQgbXV0ZWQgY29sb3JcbiR0ZXh0LW11dGVkOiAgICAgICAgICAgICAgICAgICRncmF5LWxpZ2h0ICFkZWZhdWx0O1xuLy8qKiBBYmJyZXZpYXRpb25zIGFuZCBhY3JvbnltcyBib3JkZXIgY29sb3JcbiRhYmJyLWJvcmRlci1jb2xvcjogICAgICAgICAgICRncmF5LWxpZ2h0ICFkZWZhdWx0O1xuLy8qKiBIZWFkaW5ncyBzbWFsbCBjb2xvclxuJGhlYWRpbmdzLXNtYWxsLWNvbG9yOiAgICAgICAgJGdyYXktbGlnaHQgIWRlZmF1bHQ7XG4vLyoqIEJsb2NrcXVvdGUgc21hbGwgY29sb3JcbiRibG9ja3F1b3RlLXNtYWxsLWNvbG9yOiAgICAgICRncmF5LWxpZ2h0ICFkZWZhdWx0O1xuLy8qKiBCbG9ja3F1b3RlIGZvbnQgc2l6ZVxuJGJsb2NrcXVvdGUtZm9udC1zaXplOiAgICAgICAgKCRmb250LXNpemUtYmFzZSAqIDEuMjUpICFkZWZhdWx0O1xuLy8qKiBCbG9ja3F1b3RlIGJvcmRlciBjb2xvclxuJGJsb2NrcXVvdGUtYm9yZGVyLWNvbG9yOiAgICAgJGdyYXktbGlnaHRlciAhZGVmYXVsdDtcbi8vKiogUGFnZSBoZWFkZXIgYm9yZGVyIGNvbG9yXG4kcGFnZS1oZWFkZXItYm9yZGVyLWNvbG9yOiAgICAkZ3JheS1saWdodGVyICFkZWZhdWx0O1xuLy8qKiBXaWR0aCBvZiBob3Jpem9udGFsIGRlc2NyaXB0aW9uIGxpc3QgdGl0bGVzXG4kZGwtaG9yaXpvbnRhbC1vZmZzZXQ6ICAgICAgICAkY29tcG9uZW50LW9mZnNldC1ob3Jpem9udGFsICFkZWZhdWx0O1xuLy8qKiBIb3Jpem9udGFsIGxpbmUgY29sb3IuXG4kaHItYm9yZGVyOiAgICAgICAgICAgICAgICAgICAkZ3JheS1saWdodGVyICFkZWZhdWx0O1xuIiwiLy8gV2ViS2l0LXN0eWxlIGZvY3VzXG5cbkBtaXhpbiB0YWItZm9jdXMoKSB7XG4gIC8vIERlZmF1bHRcbiAgb3V0bGluZTogdGhpbiBkb3R0ZWQ7XG4gIC8vIFdlYktpdFxuICBvdXRsaW5lOiA1cHggYXV0byAtd2Via2l0LWZvY3VzLXJpbmctY29sb3I7XG4gIG91dGxpbmUtb2Zmc2V0OiAtMnB4O1xufVxuIiwiLy8gSW1hZ2UgTWl4aW5zXG4vLyAtIFJlc3BvbnNpdmUgaW1hZ2Vcbi8vIC0gUmV0aW5hIGltYWdlXG5cblxuLy8gUmVzcG9uc2l2ZSBpbWFnZVxuLy9cbi8vIEtlZXAgaW1hZ2VzIGZyb20gc2NhbGluZyBiZXlvbmQgdGhlIHdpZHRoIG9mIHRoZWlyIHBhcmVudHMuXG5AbWl4aW4gaW1nLXJlc3BvbnNpdmUoJGRpc3BsYXk6IGJsb2NrKSB7XG4gIGRpc3BsYXk6ICRkaXNwbGF5O1xuICBtYXgtd2lkdGg6IDEwMCU7IC8vIFBhcnQgMTogU2V0IGEgbWF4aW11bSByZWxhdGl2ZSB0byB0aGUgcGFyZW50XG4gIGhlaWdodDogYXV0bzsgLy8gUGFydCAyOiBTY2FsZSB0aGUgaGVpZ2h0IGFjY29yZGluZyB0byB0aGUgd2lkdGgsIG90aGVyd2lzZSB5b3UgZ2V0IHN0cmV0Y2hpbmdcbn1cblxuXG4vLyBSZXRpbmEgaW1hZ2Vcbi8vXG4vLyBTaG9ydCByZXRpbmEgbWl4aW4gZm9yIHNldHRpbmcgYmFja2dyb3VuZC1pbWFnZSBhbmQgLXNpemUuIE5vdGUgdGhhdCB0aGVcbi8vIHNwZWxsaW5nIG9mIGBtaW4tLW1vei1kZXZpY2UtcGl4ZWwtcmF0aW9gIGlzIGludGVudGlvbmFsLlxuQG1peGluIGltZy1yZXRpbmEoJGZpbGUtMXgsICRmaWxlLTJ4LCAkd2lkdGgtMXgsICRoZWlnaHQtMXgpIHtcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKGlmKCRib290c3RyYXAtc2Fzcy1hc3NldC1oZWxwZXIsIHR3YnMtaW1hZ2UtcGF0aChcIiN7JGZpbGUtMXh9XCIpLCBcIiN7JGZpbGUtMXh9XCIpKTtcblxuICBAbWVkaWFcbiAgb25seSBzY3JlZW4gYW5kICgtd2Via2l0LW1pbi1kZXZpY2UtcGl4ZWwtcmF0aW86IDIpLFxuICBvbmx5IHNjcmVlbiBhbmQgKCAgIG1pbi0tbW96LWRldmljZS1waXhlbC1yYXRpbzogMiksXG4gIG9ubHkgc2NyZWVuIGFuZCAoICAgICAtby1taW4tZGV2aWNlLXBpeGVsLXJhdGlvOiAyLzEpLFxuICBvbmx5IHNjcmVlbiBhbmQgKCAgICAgICAgbWluLWRldmljZS1waXhlbC1yYXRpbzogMiksXG4gIG9ubHkgc2NyZWVuIGFuZCAoICAgICAgICAgICAgICAgIG1pbi1yZXNvbHV0aW9uOiAxOTJkcGkpLFxuICBvbmx5IHNjcmVlbiBhbmQgKCAgICAgICAgICAgICAgICBtaW4tcmVzb2x1dGlvbjogMmRwcHgpIHtcbiAgICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoaWYoJGJvb3RzdHJhcC1zYXNzLWFzc2V0LWhlbHBlciwgdHdicy1pbWFnZS1wYXRoKFwiI3skZmlsZS0yeH1cIiksIFwiI3skZmlsZS0yeH1cIikpO1xuICAgIGJhY2tncm91bmQtc2l6ZTogJHdpZHRoLTF4ICRoZWlnaHQtMXg7XG4gIH1cbn1cbiIsIi8vXG4vLyBUeXBvZ3JhcGh5XG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5cbi8vIEhlYWRpbmdzXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbmgxLCBoMiwgaDMsIGg0LCBoNSwgaDYsXG4uaDEsIC5oMiwgLmgzLCAuaDQsIC5oNSwgLmg2IHtcbiAgZm9udC1mYW1pbHk6ICRoZWFkaW5ncy1mb250LWZhbWlseTtcbiAgZm9udC13ZWlnaHQ6ICRoZWFkaW5ncy1mb250LXdlaWdodDtcbiAgbGluZS1oZWlnaHQ6ICRoZWFkaW5ncy1saW5lLWhlaWdodDtcbiAgY29sb3I6ICRoZWFkaW5ncy1jb2xvcjtcblxuICBzbWFsbCxcbiAgLnNtYWxsIHtcbiAgICBmb250LXdlaWdodDogbm9ybWFsO1xuICAgIGxpbmUtaGVpZ2h0OiAxO1xuICAgIGNvbG9yOiAkaGVhZGluZ3Mtc21hbGwtY29sb3I7XG4gIH1cbn1cblxuaDEsIC5oMSxcbmgyLCAuaDIsXG5oMywgLmgzIHtcbiAgbWFyZ2luLXRvcDogJGxpbmUtaGVpZ2h0LWNvbXB1dGVkO1xuICBtYXJnaW4tYm90dG9tOiAoJGxpbmUtaGVpZ2h0LWNvbXB1dGVkIC8gMik7XG5cbiAgc21hbGwsXG4gIC5zbWFsbCB7XG4gICAgZm9udC1zaXplOiA2NSU7XG4gIH1cbn1cbmg0LCAuaDQsXG5oNSwgLmg1LFxuaDYsIC5oNiB7XG4gIG1hcmdpbi10b3A6ICgkbGluZS1oZWlnaHQtY29tcHV0ZWQgLyAyKTtcbiAgbWFyZ2luLWJvdHRvbTogKCRsaW5lLWhlaWdodC1jb21wdXRlZCAvIDIpO1xuXG4gIHNtYWxsLFxuICAuc21hbGwge1xuICAgIGZvbnQtc2l6ZTogNzUlO1xuICB9XG59XG5cbmgxLCAuaDEgeyBmb250LXNpemU6ICRmb250LXNpemUtaDE7IH1cbmgyLCAuaDIgeyBmb250LXNpemU6ICRmb250LXNpemUtaDI7IH1cbmgzLCAuaDMgeyBmb250LXNpemU6ICRmb250LXNpemUtaDM7IH1cbmg0LCAuaDQgeyBmb250LXNpemU6ICRmb250LXNpemUtaDQ7IH1cbmg1LCAuaDUgeyBmb250LXNpemU6ICRmb250LXNpemUtaDU7IH1cbmg2LCAuaDYgeyBmb250LXNpemU6ICRmb250LXNpemUtaDY7IH1cblxuXG4vLyBCb2R5IHRleHRcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxucCB7XG4gIG1hcmdpbjogMCAwICgkbGluZS1oZWlnaHQtY29tcHV0ZWQgLyAyKTtcbn1cblxuLmxlYWQge1xuICBtYXJnaW4tYm90dG9tOiAkbGluZS1oZWlnaHQtY29tcHV0ZWQ7XG4gIGZvbnQtc2l6ZTogZmxvb3IoKCRmb250LXNpemUtYmFzZSAqIDEuMTUpKTtcbiAgZm9udC13ZWlnaHQ6IDMwMDtcbiAgbGluZS1oZWlnaHQ6IDEuNDtcblxuICBAbWVkaWEgKG1pbi13aWR0aDogJHNjcmVlbi1zbS1taW4pIHtcbiAgICBmb250LXNpemU6ICgkZm9udC1zaXplLWJhc2UgKiAxLjUpO1xuICB9XG59XG5cblxuLy8gRW1waGFzaXMgJiBtaXNjXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi8vIEV4OiAoMTJweCBzbWFsbCBmb250IC8gMTRweCBiYXNlIGZvbnQpICogMTAwJSA9IGFib3V0IDg1JVxuc21hbGwsXG4uc21hbGwge1xuICBmb250LXNpemU6IGZsb29yKCgxMDAlICogJGZvbnQtc2l6ZS1zbWFsbCAvICRmb250LXNpemUtYmFzZSkpO1xufVxuXG5tYXJrLFxuLm1hcmsge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAkc3RhdGUtd2FybmluZy1iZztcbiAgcGFkZGluZzogLjJlbTtcbn1cblxuLy8gQWxpZ25tZW50XG4udGV4dC1sZWZ0ICAgICAgICAgICB7IHRleHQtYWxpZ246IGxlZnQ7IH1cbi50ZXh0LXJpZ2h0ICAgICAgICAgIHsgdGV4dC1hbGlnbjogcmlnaHQ7IH1cbi50ZXh0LWNlbnRlciAgICAgICAgIHsgdGV4dC1hbGlnbjogY2VudGVyOyB9XG4udGV4dC1qdXN0aWZ5ICAgICAgICB7IHRleHQtYWxpZ246IGp1c3RpZnk7IH1cbi50ZXh0LW5vd3JhcCAgICAgICAgIHsgd2hpdGUtc3BhY2U6IG5vd3JhcDsgfVxuXG4vLyBUcmFuc2Zvcm1hdGlvblxuLnRleHQtbG93ZXJjYXNlICAgICAgeyB0ZXh0LXRyYW5zZm9ybTogbG93ZXJjYXNlOyB9XG4udGV4dC11cHBlcmNhc2UgICAgICB7IHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7IH1cbi50ZXh0LWNhcGl0YWxpemUgICAgIHsgdGV4dC10cmFuc2Zvcm06IGNhcGl0YWxpemU7IH1cblxuLy8gQ29udGV4dHVhbCBjb2xvcnNcbi50ZXh0LW11dGVkIHtcbiAgY29sb3I6ICR0ZXh0LW11dGVkO1xufVxuXG5AaW5jbHVkZSB0ZXh0LWVtcGhhc2lzLXZhcmlhbnQoJy50ZXh0LXByaW1hcnknLCAkYnJhbmQtcHJpbWFyeSk7XG5cbkBpbmNsdWRlIHRleHQtZW1waGFzaXMtdmFyaWFudCgnLnRleHQtc3VjY2VzcycsICRzdGF0ZS1zdWNjZXNzLXRleHQpO1xuXG5AaW5jbHVkZSB0ZXh0LWVtcGhhc2lzLXZhcmlhbnQoJy50ZXh0LWluZm8nLCAkc3RhdGUtaW5mby10ZXh0KTtcblxuQGluY2x1ZGUgdGV4dC1lbXBoYXNpcy12YXJpYW50KCcudGV4dC13YXJuaW5nJywgJHN0YXRlLXdhcm5pbmctdGV4dCk7XG5cbkBpbmNsdWRlIHRleHQtZW1waGFzaXMtdmFyaWFudCgnLnRleHQtZGFuZ2VyJywgJHN0YXRlLWRhbmdlci10ZXh0KTtcblxuLy8gQ29udGV4dHVhbCBiYWNrZ3JvdW5kc1xuLy8gRm9yIG5vdyB3ZSdsbCBsZWF2ZSB0aGVzZSBhbG9uZ3NpZGUgdGhlIHRleHQgY2xhc3NlcyB1bnRpbCB2NCB3aGVuIHdlIGNhblxuLy8gc2FmZWx5IHNoaWZ0IHRoaW5ncyBhcm91bmQgKHBlciBTZW1WZXIgcnVsZXMpLlxuLmJnLXByaW1hcnkge1xuICAvLyBHaXZlbiB0aGUgY29udHJhc3QgaGVyZSwgdGhpcyBpcyB0aGUgb25seSBjbGFzcyB0byBoYXZlIGl0cyBjb2xvciBpbnZlcnRlZFxuICAvLyBhdXRvbWF0aWNhbGx5LlxuICBjb2xvcjogI2ZmZjtcbn1cbkBpbmNsdWRlIGJnLXZhcmlhbnQoJy5iZy1wcmltYXJ5JywgJGJyYW5kLXByaW1hcnkpO1xuXG5AaW5jbHVkZSBiZy12YXJpYW50KCcuYmctc3VjY2VzcycsICRzdGF0ZS1zdWNjZXNzLWJnKTtcblxuQGluY2x1ZGUgYmctdmFyaWFudCgnLmJnLWluZm8nLCAkc3RhdGUtaW5mby1iZyk7XG5cbkBpbmNsdWRlIGJnLXZhcmlhbnQoJy5iZy13YXJuaW5nJywgJHN0YXRlLXdhcm5pbmctYmcpO1xuXG5AaW5jbHVkZSBiZy12YXJpYW50KCcuYmctZGFuZ2VyJywgJHN0YXRlLWRhbmdlci1iZyk7XG5cblxuLy8gUGFnZSBoZWFkZXJcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLnBhZ2UtaGVhZGVyIHtcbiAgcGFkZGluZy1ib3R0b206ICgoJGxpbmUtaGVpZ2h0LWNvbXB1dGVkIC8gMikgLSAxKTtcbiAgbWFyZ2luOiAoJGxpbmUtaGVpZ2h0LWNvbXB1dGVkICogMikgMCAkbGluZS1oZWlnaHQtY29tcHV0ZWQ7XG4gIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAkcGFnZS1oZWFkZXItYm9yZGVyLWNvbG9yO1xufVxuXG5cbi8vIExpc3RzXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi8vIFVub3JkZXJlZCBhbmQgT3JkZXJlZCBsaXN0c1xudWwsXG5vbCB7XG4gIG1hcmdpbi10b3A6IDA7XG4gIG1hcmdpbi1ib3R0b206ICgkbGluZS1oZWlnaHQtY29tcHV0ZWQgLyAyKTtcbiAgdWwsXG4gIG9sIHtcbiAgICBtYXJnaW4tYm90dG9tOiAwO1xuICB9XG59XG5cbi8vIExpc3Qgb3B0aW9uc1xuXG4vLyBbY29udmVydGVyXSBleHRyYWN0ZWQgZnJvbSBgLmxpc3QtdW5zdHlsZWRgIGZvciBsaWJzYXNzIGNvbXBhdGliaWxpdHlcbkBtaXhpbiBsaXN0LXVuc3R5bGVkIHtcbiAgcGFkZGluZy1sZWZ0OiAwO1xuICBsaXN0LXN0eWxlOiBub25lO1xufVxuLy8gW2NvbnZlcnRlcl0gZXh0cmFjdGVkIGFzIGBAbWl4aW4gbGlzdC11bnN0eWxlZGAgZm9yIGxpYnNhc3MgY29tcGF0aWJpbGl0eVxuLmxpc3QtdW5zdHlsZWQge1xuICBAaW5jbHVkZSBsaXN0LXVuc3R5bGVkO1xufVxuXG5cbi8vIElubGluZSB0dXJucyBsaXN0IGl0ZW1zIGludG8gaW5saW5lLWJsb2NrXG4ubGlzdC1pbmxpbmUge1xuICBAaW5jbHVkZSBsaXN0LXVuc3R5bGVkO1xuICBtYXJnaW4tbGVmdDogLTVweDtcblxuICA+IGxpIHtcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgcGFkZGluZy1sZWZ0OiA1cHg7XG4gICAgcGFkZGluZy1yaWdodDogNXB4O1xuICB9XG59XG5cbi8vIERlc2NyaXB0aW9uIExpc3RzXG5kbCB7XG4gIG1hcmdpbi10b3A6IDA7IC8vIFJlbW92ZSBicm93c2VyIGRlZmF1bHRcbiAgbWFyZ2luLWJvdHRvbTogJGxpbmUtaGVpZ2h0LWNvbXB1dGVkO1xufVxuZHQsXG5kZCB7XG4gIGxpbmUtaGVpZ2h0OiAkbGluZS1oZWlnaHQtYmFzZTtcbn1cbmR0IHtcbiAgZm9udC13ZWlnaHQ6IGJvbGQ7XG59XG5kZCB7XG4gIG1hcmdpbi1sZWZ0OiAwOyAvLyBVbmRvIGJyb3dzZXIgZGVmYXVsdFxufVxuXG4vLyBIb3Jpem9udGFsIGRlc2NyaXB0aW9uIGxpc3RzXG4vL1xuLy8gRGVmYXVsdHMgdG8gYmVpbmcgc3RhY2tlZCB3aXRob3V0IGFueSBvZiB0aGUgYmVsb3cgc3R5bGVzIGFwcGxpZWQsIHVudGlsIHRoZVxuLy8gZ3JpZCBicmVha3BvaW50IGlzIHJlYWNoZWQgKGRlZmF1bHQgb2Ygfjc2OHB4KS5cblxuLmRsLWhvcml6b250YWwge1xuICBkZCB7XG4gICAgQGluY2x1ZGUgY2xlYXJmaXg7IC8vIENsZWFyIHRoZSBmbG9hdGVkIGBkdGAgaWYgYW4gZW1wdHkgYGRkYCBpcyBwcmVzZW50XG4gIH1cblxuICBAbWVkaWEgKG1pbi13aWR0aDogJGdyaWQtZmxvYXQtYnJlYWtwb2ludCkge1xuICAgIGR0IHtcbiAgICAgIGZsb2F0OiBsZWZ0O1xuICAgICAgd2lkdGg6ICgkZGwtaG9yaXpvbnRhbC1vZmZzZXQgLSAyMCk7XG4gICAgICBjbGVhcjogbGVmdDtcbiAgICAgIHRleHQtYWxpZ246IHJpZ2h0O1xuICAgICAgQGluY2x1ZGUgdGV4dC1vdmVyZmxvdztcbiAgICB9XG4gICAgZGQge1xuICAgICAgbWFyZ2luLWxlZnQ6ICRkbC1ob3Jpem9udGFsLW9mZnNldDtcbiAgICB9XG4gIH1cbn1cblxuXG4vLyBNaXNjXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi8vIEFiYnJldmlhdGlvbnMgYW5kIGFjcm9ueW1zXG5hYmJyW3RpdGxlXSxcbi8vIEFkZCBkYXRhLSogYXR0cmlidXRlIHRvIGhlbHAgb3V0IG91ciB0b29sdGlwIHBsdWdpbiwgcGVyIGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9pc3N1ZXMvNTI1N1xuYWJicltkYXRhLW9yaWdpbmFsLXRpdGxlXSB7XG4gIGN1cnNvcjogaGVscDtcbiAgYm9yZGVyLWJvdHRvbTogMXB4IGRvdHRlZCAkYWJici1ib3JkZXItY29sb3I7XG59XG4uaW5pdGlhbGlzbSB7XG4gIGZvbnQtc2l6ZTogOTAlO1xuICBAZXh0ZW5kIC50ZXh0LXVwcGVyY2FzZTtcbn1cblxuLy8gQmxvY2txdW90ZXNcbmJsb2NrcXVvdGUge1xuICBwYWRkaW5nOiAoJGxpbmUtaGVpZ2h0LWNvbXB1dGVkIC8gMikgJGxpbmUtaGVpZ2h0LWNvbXB1dGVkO1xuICBtYXJnaW46IDAgMCAkbGluZS1oZWlnaHQtY29tcHV0ZWQ7XG4gIGZvbnQtc2l6ZTogJGJsb2NrcXVvdGUtZm9udC1zaXplO1xuICBib3JkZXItbGVmdDogNXB4IHNvbGlkICRibG9ja3F1b3RlLWJvcmRlci1jb2xvcjtcblxuICBwLFxuICB1bCxcbiAgb2wge1xuICAgICY6bGFzdC1jaGlsZCB7XG4gICAgICBtYXJnaW4tYm90dG9tOiAwO1xuICAgIH1cbiAgfVxuXG4gIC8vIE5vdGU6IERlcHJlY2F0ZWQgc21hbGwgYW5kIC5zbWFsbCBhcyBvZiB2My4xLjBcbiAgLy8gQ29udGV4dDogaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2lzc3Vlcy8xMTY2MFxuICBmb290ZXIsXG4gIHNtYWxsLFxuICAuc21hbGwge1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIGZvbnQtc2l6ZTogODAlOyAvLyBiYWNrIHRvIGRlZmF1bHQgZm9udC1zaXplXG4gICAgbGluZS1oZWlnaHQ6ICRsaW5lLWhlaWdodC1iYXNlO1xuICAgIGNvbG9yOiAkYmxvY2txdW90ZS1zbWFsbC1jb2xvcjtcblxuICAgICY6YmVmb3JlIHtcbiAgICAgIGNvbnRlbnQ6ICdcXDIwMTQgXFwwMEEwJzsgLy8gZW0gZGFzaCwgbmJzcFxuICAgIH1cbiAgfVxufVxuXG4vLyBPcHBvc2l0ZSBhbGlnbm1lbnQgb2YgYmxvY2txdW90ZVxuLy9cbi8vIEhlYWRzIHVwOiBgYmxvY2txdW90ZS5wdWxsLXJpZ2h0YCBoYXMgYmVlbiBkZXByZWNhdGVkIGFzIG9mIHYzLjEuMC5cbi5ibG9ja3F1b3RlLXJldmVyc2UsXG5ibG9ja3F1b3RlLnB1bGwtcmlnaHQge1xuICBwYWRkaW5nLXJpZ2h0OiAxNXB4O1xuICBwYWRkaW5nLWxlZnQ6IDA7XG4gIGJvcmRlci1yaWdodDogNXB4IHNvbGlkICRibG9ja3F1b3RlLWJvcmRlci1jb2xvcjtcbiAgYm9yZGVyLWxlZnQ6IDA7XG4gIHRleHQtYWxpZ246IHJpZ2h0O1xuXG4gIC8vIEFjY291bnQgZm9yIGNpdGF0aW9uXG4gIGZvb3RlcixcbiAgc21hbGwsXG4gIC5zbWFsbCB7XG4gICAgJjpiZWZvcmUgeyBjb250ZW50OiAnJzsgfVxuICAgICY6YWZ0ZXIge1xuICAgICAgY29udGVudDogJ1xcMDBBMCBcXDIwMTQnOyAvLyBuYnNwLCBlbSBkYXNoXG4gICAgfVxuICB9XG59XG5cbi8vIEFkZHJlc3Nlc1xuYWRkcmVzcyB7XG4gIG1hcmdpbi1ib3R0b206ICRsaW5lLWhlaWdodC1jb21wdXRlZDtcbiAgZm9udC1zdHlsZTogbm9ybWFsO1xuICBsaW5lLWhlaWdodDogJGxpbmUtaGVpZ2h0LWJhc2U7XG59XG4iLCIvLyBUeXBvZ3JhcGh5XG5cbi8vIFtjb252ZXJ0ZXJdICRwYXJlbnQgaGFja1xuQG1peGluIHRleHQtZW1waGFzaXMtdmFyaWFudCgkcGFyZW50LCAkY29sb3IpIHtcbiAgI3skcGFyZW50fSB7XG4gICAgY29sb3I6ICRjb2xvcjtcbiAgfVxuICBhI3skcGFyZW50fTpob3ZlciB7XG4gICAgY29sb3I6IGRhcmtlbigkY29sb3IsIDEwJSk7XG4gIH1cbn1cbiIsIi8vIENvbnRleHR1YWwgYmFja2dyb3VuZHNcblxuLy8gW2NvbnZlcnRlcl0gJHBhcmVudCBoYWNrXG5AbWl4aW4gYmctdmFyaWFudCgkcGFyZW50LCAkY29sb3IpIHtcbiAgI3skcGFyZW50fSB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogJGNvbG9yO1xuICB9XG4gIGEjeyRwYXJlbnR9OmhvdmVyIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiBkYXJrZW4oJGNvbG9yLCAxMCUpO1xuICB9XG59XG4iLCIvLyBDbGVhcmZpeFxuLy9cbi8vIEZvciBtb2Rlcm4gYnJvd3NlcnNcbi8vIDEuIFRoZSBzcGFjZSBjb250ZW50IGlzIG9uZSB3YXkgdG8gYXZvaWQgYW4gT3BlcmEgYnVnIHdoZW4gdGhlXG4vLyAgICBjb250ZW50ZWRpdGFibGUgYXR0cmlidXRlIGlzIGluY2x1ZGVkIGFueXdoZXJlIGVsc2UgaW4gdGhlIGRvY3VtZW50LlxuLy8gICAgT3RoZXJ3aXNlIGl0IGNhdXNlcyBzcGFjZSB0byBhcHBlYXIgYXQgdGhlIHRvcCBhbmQgYm90dG9tIG9mIGVsZW1lbnRzXG4vLyAgICB0aGF0IGFyZSBjbGVhcmZpeGVkLlxuLy8gMi4gVGhlIHVzZSBvZiBgdGFibGVgIHJhdGhlciB0aGFuIGBibG9ja2AgaXMgb25seSBuZWNlc3NhcnkgaWYgdXNpbmdcbi8vICAgIGA6YmVmb3JlYCB0byBjb250YWluIHRoZSB0b3AtbWFyZ2lucyBvZiBjaGlsZCBlbGVtZW50cy5cbi8vXG4vLyBTb3VyY2U6IGh0dHA6Ly9uaWNvbGFzZ2FsbGFnaGVyLmNvbS9taWNyby1jbGVhcmZpeC1oYWNrL1xuXG5AbWl4aW4gY2xlYXJmaXgoKSB7XG4gICY6YmVmb3JlLFxuICAmOmFmdGVyIHtcbiAgICBjb250ZW50OiBcIiBcIjsgLy8gMVxuICAgIGRpc3BsYXk6IHRhYmxlOyAvLyAyXG4gIH1cbiAgJjphZnRlciB7XG4gICAgY2xlYXI6IGJvdGg7XG4gIH1cbn1cbiIsIi8vIFRleHQgb3ZlcmZsb3dcbi8vIFJlcXVpcmVzIGlubGluZS1ibG9jayBvciBibG9jayBmb3IgcHJvcGVyIHN0eWxpbmdcblxuQG1peGluIHRleHQtb3ZlcmZsb3coKSB7XG4gIG92ZXJmbG93OiBoaWRkZW47XG4gIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzO1xuICB3aGl0ZS1zcGFjZTogbm93cmFwO1xufVxuIiwiLy9cbi8vIENvZGUgKGlubGluZSBhbmQgYmxvY2spXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5cbi8vIElubGluZSBhbmQgYmxvY2sgY29kZSBzdHlsZXNcbmNvZGUsXG5rYmQsXG5wcmUsXG5zYW1wIHtcbiAgZm9udC1mYW1pbHk6ICRmb250LWZhbWlseS1tb25vc3BhY2U7XG59XG5cbi8vIElubGluZSBjb2RlXG5jb2RlIHtcbiAgcGFkZGluZzogMnB4IDRweDtcbiAgZm9udC1zaXplOiA5MCU7XG4gIGNvbG9yOiAkY29kZS1jb2xvcjtcbiAgYmFja2dyb3VuZC1jb2xvcjogJGNvZGUtYmc7XG4gIGJvcmRlci1yYWRpdXM6ICRib3JkZXItcmFkaXVzLWJhc2U7XG59XG5cbi8vIFVzZXIgaW5wdXQgdHlwaWNhbGx5IGVudGVyZWQgdmlhIGtleWJvYXJkXG5rYmQge1xuICBwYWRkaW5nOiAycHggNHB4O1xuICBmb250LXNpemU6IDkwJTtcbiAgY29sb3I6ICRrYmQtY29sb3I7XG4gIGJhY2tncm91bmQtY29sb3I6ICRrYmQtYmc7XG4gIGJvcmRlci1yYWRpdXM6ICRib3JkZXItcmFkaXVzLXNtYWxsO1xuICBib3gtc2hhZG93OiBpbnNldCAwIC0xcHggMCByZ2JhKDAsMCwwLC4yNSk7XG5cbiAga2JkIHtcbiAgICBwYWRkaW5nOiAwO1xuICAgIGZvbnQtc2l6ZTogMTAwJTtcbiAgICBmb250LXdlaWdodDogYm9sZDtcbiAgICBib3gtc2hhZG93OiBub25lO1xuICB9XG59XG5cbi8vIEJsb2NrcyBvZiBjb2RlXG5wcmUge1xuICBkaXNwbGF5OiBibG9jaztcbiAgcGFkZGluZzogKCgkbGluZS1oZWlnaHQtY29tcHV0ZWQgLSAxKSAvIDIpO1xuICBtYXJnaW46IDAgMCAoJGxpbmUtaGVpZ2h0LWNvbXB1dGVkIC8gMik7XG4gIGZvbnQtc2l6ZTogKCRmb250LXNpemUtYmFzZSAtIDEpOyAvLyAxNHB4IHRvIDEzcHhcbiAgbGluZS1oZWlnaHQ6ICRsaW5lLWhlaWdodC1iYXNlO1xuICB3b3JkLWJyZWFrOiBicmVhay1hbGw7XG4gIHdvcmQtd3JhcDogYnJlYWstd29yZDtcbiAgY29sb3I6ICRwcmUtY29sb3I7XG4gIGJhY2tncm91bmQtY29sb3I6ICRwcmUtYmc7XG4gIGJvcmRlcjogMXB4IHNvbGlkICRwcmUtYm9yZGVyLWNvbG9yO1xuICBib3JkZXItcmFkaXVzOiAkYm9yZGVyLXJhZGl1cy1iYXNlO1xuXG4gIC8vIEFjY291bnQgZm9yIHNvbWUgY29kZSBvdXRwdXRzIHRoYXQgcGxhY2UgY29kZSB0YWdzIGluIHByZSB0YWdzXG4gIGNvZGUge1xuICAgIHBhZGRpbmc6IDA7XG4gICAgZm9udC1zaXplOiBpbmhlcml0O1xuICAgIGNvbG9yOiBpbmhlcml0O1xuICAgIHdoaXRlLXNwYWNlOiBwcmUtd3JhcDtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcbiAgICBib3JkZXItcmFkaXVzOiAwO1xuICB9XG59XG5cbi8vIEVuYWJsZSBzY3JvbGxhYmxlIGJsb2NrcyBvZiBjb2RlXG4ucHJlLXNjcm9sbGFibGUge1xuICBtYXgtaGVpZ2h0OiAkcHJlLXNjcm9sbGFibGUtbWF4LWhlaWdodDtcbiAgb3ZlcmZsb3cteTogc2Nyb2xsO1xufVxuIiwiJGZvbnQtZmFtaWx5LWVpbmE6ICdFaW5hJywgJ0hlbHZldGljYSBOZXVlJywgSGVsdmV0aWNhLCBzYW5zLXNlcmlmO1xuJGZvbnQtZmFtaWx5LWludGVyOiAnSW50ZXInLCAnSW50ZXIgVUknLCBIZWx2ZXRpY2EsIEFyaWFsLCBzYW5zLXNlcmlmO1xuJGZvbnQtZmFtaWx5LXN5c3RlbTogYXBwbGUtc3lzdGVtLCBCbGlua01hY1N5c3RlbUZvbnQsIFJvYm90bywgSGVsdmV0aWNhLCBBcmlhbCwgc2Fucy1zZXJpZjtcblxuJGZvbnQtZmFtaWx5LW1vbm9zcGFjZTogJ1JvYm90byBNb25vJywgTWVubG8sIE1vbmFjbywgQ29uc29sYXMsICdDb3VyaWVyIE5ldycsIG1vbm9zcGFjZTtcbiRmb250LWZhbWlseS1zZXJpZjogJ0Fkb2JlIENhc2xvbicsIEdlb3JnaWEsIFRpbWVzLCAnVGltZXMgTmV3IFJvbWFuJywgc2VyaWY7XG5cbiRmb250LWZhbWlseS1kZWZhdWx0OiAkZm9udC1mYW1pbHktaW50ZXI7XG5cbiRibHVlOiAgICAgICAgICAjNGE4YmZjO1xuJGxpZ2h0LWJsdWU6ICAgICM1MjllZmY7XG4kZ3JlZW46ICAgICAgICAgIzFlZDE3NjtcbiRvcmFuZ2U6ICAgICAgICAjZmNiNTJjO1xuJHB1cnBsZTogICAgICAgICM4YjdkZjE7XG4kcmVkOiAgICAgICAgICAgI2Y4NTU2YztcblxuJHdoaXRlaXNoOiAgICAgICNmOWZhZmI7XG4kbGlnaHRlci1ncmV5OiAgI2ViZWVmMjtcbiRsaWdodC1ncmV5OiAgICAjZTZlOWVlO1xuJGxpZ2h0aXNoLWdyZXk6ICNhMGE1YjA7XG4kZ3JleTogICAgICAgICAgIzlkYTViMztcbiRkYXJraXNoLWdyZXk6ICAjODk4OTg5O1xuJGRhcmstZ3JleTogICAgICM1NzYwNzA7XG4kYmxhY2tpc2g6ICAgICAgIzRDNTU1QTtcbiRibGFja2VyOiAgICAgICAjMjQyODJlO1xuXG4kc2lkZW5hdi13aWR0aDogMjMwcHg7XG4kcGxhdGZvcm0tcHJldmlldy13aWR0aDogNDY3cHg7XG5cbi8vIGJvb3RzdHJhcCBvdmVycmlkZXNcbiRuYXZiYXItZGVmYXVsdC1iZzogICAgICRibHVlO1xuJG5hdmJhci1kZWZhdWx0LWJvcmRlcjogJGJsdWU7XG4kbmF2YmFyLWRlZmF1bHQtYnJhbmQtY29sb3I6IHJnYmEod2hpdGUsIC44KTtcbiRuYXZiYXItZGVmYXVsdC1saW5rLWNvbG9yOiAgcmdiYSh3aGl0ZSwgLjgpO1xuJG5hdmJhci1kZWZhdWx0LWJyYW5kLWhvdmVyLWNvbG9yOiAjZmZmO1xuJG5hdmJhci1kZWZhdWx0LWxpbmstaG92ZXItY29sb3I6ICAjZmZmO1xuJG5hdmJhci1kZWZhdWx0LWxpbmstYWN0aXZlLWNvbG9yOiAjZmZmO1xuJG5hdmJhci1kZWZhdWx0LWxpbmstYWN0aXZlLWJnOiB0cmFuc3BhcmVudDtcblxuLy8gJG5hdmJhci1kZWZhdWx0LWJyYW5kLWhvdmVyLWJnO1xuLy8gJG5hdmJhci1kZWZhdWx0LWxpbmstaG92ZXItYmc7XG4vLyAkbmF2YmFyLWRlZmF1bHQtbGluay1kaXNhYmxlZC1jb2xvcjtcbi8vICRuYXZiYXItZGVmYXVsdC1saW5rLWRpc2FibGVkLWJnO1xuLy8gJG5hdmJhci1kZWZhdWx0LXRvZ2dsZS1ib3JkZXItY29sb3I7XG4vLyAkbmF2YmFyLWRlZmF1bHQtdG9nZ2xlLWhvdmVyLWJnO1xuLy8gJG5hdmJhci1kZWZhdWx0LXRvZ2dsZS1pY29uLWJhci1iZztcblxuLy8gYm9vdHN0cmFwIHZhcmlhYmxlcyBhbmQgbWl4aW5zXG5AaW1wb3J0ICdib290c3RyYXAvdmFyaWFibGVzJztcbkBpbXBvcnQgJ2Jvb3RzdHJhcC9taXhpbnMnO1xuIiwiLy9cbi8vIEdyaWQgc3lzdGVtXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5cbi8vIENvbnRhaW5lciB3aWR0aHNcbi8vXG4vLyBTZXQgdGhlIGNvbnRhaW5lciB3aWR0aCwgYW5kIG92ZXJyaWRlIGl0IGZvciBmaXhlZCBuYXZiYXJzIGluIG1lZGlhIHF1ZXJpZXMuXG5cbi5jb250YWluZXIge1xuICBAaW5jbHVkZSBjb250YWluZXItZml4ZWQ7XG5cbiAgQG1lZGlhIChtaW4td2lkdGg6ICRzY3JlZW4tc20tbWluKSB7XG4gICAgd2lkdGg6ICRjb250YWluZXItc207XG4gIH1cbiAgQG1lZGlhIChtaW4td2lkdGg6ICRzY3JlZW4tbWQtbWluKSB7XG4gICAgd2lkdGg6ICRjb250YWluZXItbWQ7XG4gIH1cbiAgQG1lZGlhIChtaW4td2lkdGg6ICRzY3JlZW4tbGctbWluKSB7XG4gICAgd2lkdGg6ICRjb250YWluZXItbGc7XG4gIH1cbn1cblxuXG4vLyBGbHVpZCBjb250YWluZXJcbi8vXG4vLyBVdGlsaXplcyB0aGUgbWl4aW4gbWVhbnQgZm9yIGZpeGVkIHdpZHRoIGNvbnRhaW5lcnMsIGJ1dCB3aXRob3V0IGFueSBkZWZpbmVkXG4vLyB3aWR0aCBmb3IgZmx1aWQsIGZ1bGwgd2lkdGggbGF5b3V0cy5cblxuLmNvbnRhaW5lci1mbHVpZCB7XG4gIEBpbmNsdWRlIGNvbnRhaW5lci1maXhlZDtcbn1cblxuXG4vLyBSb3dcbi8vXG4vLyBSb3dzIGNvbnRhaW4gYW5kIGNsZWFyIHRoZSBmbG9hdHMgb2YgeW91ciBjb2x1bW5zLlxuXG4ucm93IHtcbiAgQGluY2x1ZGUgbWFrZS1yb3c7XG59XG5cblxuLy8gQ29sdW1uc1xuLy9cbi8vIENvbW1vbiBzdHlsZXMgZm9yIHNtYWxsIGFuZCBsYXJnZSBncmlkIGNvbHVtbnNcblxuQGluY2x1ZGUgbWFrZS1ncmlkLWNvbHVtbnM7XG5cblxuLy8gRXh0cmEgc21hbGwgZ3JpZFxuLy9cbi8vIENvbHVtbnMsIG9mZnNldHMsIHB1c2hlcywgYW5kIHB1bGxzIGZvciBleHRyYSBzbWFsbCBkZXZpY2VzIGxpa2Vcbi8vIHNtYXJ0cGhvbmVzLlxuXG5AaW5jbHVkZSBtYWtlLWdyaWQoeHMpO1xuXG5cbi8vIFNtYWxsIGdyaWRcbi8vXG4vLyBDb2x1bW5zLCBvZmZzZXRzLCBwdXNoZXMsIGFuZCBwdWxscyBmb3IgdGhlIHNtYWxsIGRldmljZSByYW5nZSwgZnJvbSBwaG9uZXNcbi8vIHRvIHRhYmxldHMuXG5cbkBtZWRpYSAobWluLXdpZHRoOiAkc2NyZWVuLXNtLW1pbikge1xuICBAaW5jbHVkZSBtYWtlLWdyaWQoc20pO1xufVxuXG5cbi8vIE1lZGl1bSBncmlkXG4vL1xuLy8gQ29sdW1ucywgb2Zmc2V0cywgcHVzaGVzLCBhbmQgcHVsbHMgZm9yIHRoZSBkZXNrdG9wIGRldmljZSByYW5nZS5cblxuQG1lZGlhIChtaW4td2lkdGg6ICRzY3JlZW4tbWQtbWluKSB7XG4gIEBpbmNsdWRlIG1ha2UtZ3JpZChtZCk7XG59XG5cblxuLy8gTGFyZ2UgZ3JpZFxuLy9cbi8vIENvbHVtbnMsIG9mZnNldHMsIHB1c2hlcywgYW5kIHB1bGxzIGZvciB0aGUgbGFyZ2UgZGVza3RvcCBkZXZpY2UgcmFuZ2UuXG5cbkBtZWRpYSAobWluLXdpZHRoOiAkc2NyZWVuLWxnLW1pbikge1xuICBAaW5jbHVkZSBtYWtlLWdyaWQobGcpO1xufVxuIiwiLy8gR3JpZCBzeXN0ZW1cbi8vXG4vLyBHZW5lcmF0ZSBzZW1hbnRpYyBncmlkIGNvbHVtbnMgd2l0aCB0aGVzZSBtaXhpbnMuXG5cbi8vIENlbnRlcmVkIGNvbnRhaW5lciBlbGVtZW50XG5AbWl4aW4gY29udGFpbmVyLWZpeGVkKCRndXR0ZXI6ICRncmlkLWd1dHRlci13aWR0aCkge1xuICBtYXJnaW4tcmlnaHQ6IGF1dG87XG4gIG1hcmdpbi1sZWZ0OiBhdXRvO1xuICBwYWRkaW5nLWxlZnQ6ICAoJGd1dHRlciAvIDIpO1xuICBwYWRkaW5nLXJpZ2h0OiAoJGd1dHRlciAvIDIpO1xuICBAaW5jbHVkZSBjbGVhcmZpeDtcbn1cblxuLy8gQ3JlYXRlcyBhIHdyYXBwZXIgZm9yIGEgc2VyaWVzIG9mIGNvbHVtbnNcbkBtaXhpbiBtYWtlLXJvdygkZ3V0dGVyOiAkZ3JpZC1ndXR0ZXItd2lkdGgpIHtcbiAgbWFyZ2luLWxlZnQ6ICAoJGd1dHRlciAvIC0yKTtcbiAgbWFyZ2luLXJpZ2h0OiAoJGd1dHRlciAvIC0yKTtcbiAgQGluY2x1ZGUgY2xlYXJmaXg7XG59XG5cbi8vIEdlbmVyYXRlIHRoZSBleHRyYSBzbWFsbCBjb2x1bW5zXG5AbWl4aW4gbWFrZS14cy1jb2x1bW4oJGNvbHVtbnMsICRndXR0ZXI6ICRncmlkLWd1dHRlci13aWR0aCkge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIGZsb2F0OiBsZWZ0O1xuICB3aWR0aDogcGVyY2VudGFnZSgoJGNvbHVtbnMgLyAkZ3JpZC1jb2x1bW5zKSk7XG4gIG1pbi1oZWlnaHQ6IDFweDtcbiAgcGFkZGluZy1sZWZ0OiAgKCRndXR0ZXIgLyAyKTtcbiAgcGFkZGluZy1yaWdodDogKCRndXR0ZXIgLyAyKTtcbn1cbkBtaXhpbiBtYWtlLXhzLWNvbHVtbi1vZmZzZXQoJGNvbHVtbnMpIHtcbiAgbWFyZ2luLWxlZnQ6IHBlcmNlbnRhZ2UoKCRjb2x1bW5zIC8gJGdyaWQtY29sdW1ucykpO1xufVxuQG1peGluIG1ha2UteHMtY29sdW1uLXB1c2goJGNvbHVtbnMpIHtcbiAgbGVmdDogcGVyY2VudGFnZSgoJGNvbHVtbnMgLyAkZ3JpZC1jb2x1bW5zKSk7XG59XG5AbWl4aW4gbWFrZS14cy1jb2x1bW4tcHVsbCgkY29sdW1ucykge1xuICByaWdodDogcGVyY2VudGFnZSgoJGNvbHVtbnMgLyAkZ3JpZC1jb2x1bW5zKSk7XG59XG5cbi8vIEdlbmVyYXRlIHRoZSBzbWFsbCBjb2x1bW5zXG5AbWl4aW4gbWFrZS1zbS1jb2x1bW4oJGNvbHVtbnMsICRndXR0ZXI6ICRncmlkLWd1dHRlci13aWR0aCkge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIG1pbi1oZWlnaHQ6IDFweDtcbiAgcGFkZGluZy1sZWZ0OiAgKCRndXR0ZXIgLyAyKTtcbiAgcGFkZGluZy1yaWdodDogKCRndXR0ZXIgLyAyKTtcblxuICBAbWVkaWEgKG1pbi13aWR0aDogJHNjcmVlbi1zbS1taW4pIHtcbiAgICBmbG9hdDogbGVmdDtcbiAgICB3aWR0aDogcGVyY2VudGFnZSgoJGNvbHVtbnMgLyAkZ3JpZC1jb2x1bW5zKSk7XG4gIH1cbn1cbkBtaXhpbiBtYWtlLXNtLWNvbHVtbi1vZmZzZXQoJGNvbHVtbnMpIHtcbiAgQG1lZGlhIChtaW4td2lkdGg6ICRzY3JlZW4tc20tbWluKSB7XG4gICAgbWFyZ2luLWxlZnQ6IHBlcmNlbnRhZ2UoKCRjb2x1bW5zIC8gJGdyaWQtY29sdW1ucykpO1xuICB9XG59XG5AbWl4aW4gbWFrZS1zbS1jb2x1bW4tcHVzaCgkY29sdW1ucykge1xuICBAbWVkaWEgKG1pbi13aWR0aDogJHNjcmVlbi1zbS1taW4pIHtcbiAgICBsZWZ0OiBwZXJjZW50YWdlKCgkY29sdW1ucyAvICRncmlkLWNvbHVtbnMpKTtcbiAgfVxufVxuQG1peGluIG1ha2Utc20tY29sdW1uLXB1bGwoJGNvbHVtbnMpIHtcbiAgQG1lZGlhIChtaW4td2lkdGg6ICRzY3JlZW4tc20tbWluKSB7XG4gICAgcmlnaHQ6IHBlcmNlbnRhZ2UoKCRjb2x1bW5zIC8gJGdyaWQtY29sdW1ucykpO1xuICB9XG59XG5cbi8vIEdlbmVyYXRlIHRoZSBtZWRpdW0gY29sdW1uc1xuQG1peGluIG1ha2UtbWQtY29sdW1uKCRjb2x1bW5zLCAkZ3V0dGVyOiAkZ3JpZC1ndXR0ZXItd2lkdGgpIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBtaW4taGVpZ2h0OiAxcHg7XG4gIHBhZGRpbmctbGVmdDogICgkZ3V0dGVyIC8gMik7XG4gIHBhZGRpbmctcmlnaHQ6ICgkZ3V0dGVyIC8gMik7XG5cbiAgQG1lZGlhIChtaW4td2lkdGg6ICRzY3JlZW4tbWQtbWluKSB7XG4gICAgZmxvYXQ6IGxlZnQ7XG4gICAgd2lkdGg6IHBlcmNlbnRhZ2UoKCRjb2x1bW5zIC8gJGdyaWQtY29sdW1ucykpO1xuICB9XG59XG5AbWl4aW4gbWFrZS1tZC1jb2x1bW4tb2Zmc2V0KCRjb2x1bW5zKSB7XG4gIEBtZWRpYSAobWluLXdpZHRoOiAkc2NyZWVuLW1kLW1pbikge1xuICAgIG1hcmdpbi1sZWZ0OiBwZXJjZW50YWdlKCgkY29sdW1ucyAvICRncmlkLWNvbHVtbnMpKTtcbiAgfVxufVxuQG1peGluIG1ha2UtbWQtY29sdW1uLXB1c2goJGNvbHVtbnMpIHtcbiAgQG1lZGlhIChtaW4td2lkdGg6ICRzY3JlZW4tbWQtbWluKSB7XG4gICAgbGVmdDogcGVyY2VudGFnZSgoJGNvbHVtbnMgLyAkZ3JpZC1jb2x1bW5zKSk7XG4gIH1cbn1cbkBtaXhpbiBtYWtlLW1kLWNvbHVtbi1wdWxsKCRjb2x1bW5zKSB7XG4gIEBtZWRpYSAobWluLXdpZHRoOiAkc2NyZWVuLW1kLW1pbikge1xuICAgIHJpZ2h0OiBwZXJjZW50YWdlKCgkY29sdW1ucyAvICRncmlkLWNvbHVtbnMpKTtcbiAgfVxufVxuXG4vLyBHZW5lcmF0ZSB0aGUgbGFyZ2UgY29sdW1uc1xuQG1peGluIG1ha2UtbGctY29sdW1uKCRjb2x1bW5zLCAkZ3V0dGVyOiAkZ3JpZC1ndXR0ZXItd2lkdGgpIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBtaW4taGVpZ2h0OiAxcHg7XG4gIHBhZGRpbmctbGVmdDogICgkZ3V0dGVyIC8gMik7XG4gIHBhZGRpbmctcmlnaHQ6ICgkZ3V0dGVyIC8gMik7XG5cbiAgQG1lZGlhIChtaW4td2lkdGg6ICRzY3JlZW4tbGctbWluKSB7XG4gICAgZmxvYXQ6IGxlZnQ7XG4gICAgd2lkdGg6IHBlcmNlbnRhZ2UoKCRjb2x1bW5zIC8gJGdyaWQtY29sdW1ucykpO1xuICB9XG59XG5AbWl4aW4gbWFrZS1sZy1jb2x1bW4tb2Zmc2V0KCRjb2x1bW5zKSB7XG4gIEBtZWRpYSAobWluLXdpZHRoOiAkc2NyZWVuLWxnLW1pbikge1xuICAgIG1hcmdpbi1sZWZ0OiBwZXJjZW50YWdlKCgkY29sdW1ucyAvICRncmlkLWNvbHVtbnMpKTtcbiAgfVxufVxuQG1peGluIG1ha2UtbGctY29sdW1uLXB1c2goJGNvbHVtbnMpIHtcbiAgQG1lZGlhIChtaW4td2lkdGg6ICRzY3JlZW4tbGctbWluKSB7XG4gICAgbGVmdDogcGVyY2VudGFnZSgoJGNvbHVtbnMgLyAkZ3JpZC1jb2x1bW5zKSk7XG4gIH1cbn1cbkBtaXhpbiBtYWtlLWxnLWNvbHVtbi1wdWxsKCRjb2x1bW5zKSB7XG4gIEBtZWRpYSAobWluLXdpZHRoOiAkc2NyZWVuLWxnLW1pbikge1xuICAgIHJpZ2h0OiBwZXJjZW50YWdlKCgkY29sdW1ucyAvICRncmlkLWNvbHVtbnMpKTtcbiAgfVxufVxuIiwiLy8gRnJhbWV3b3JrIGdyaWQgZ2VuZXJhdGlvblxuLy9cbi8vIFVzZWQgb25seSBieSBCb290c3RyYXAgdG8gZ2VuZXJhdGUgdGhlIGNvcnJlY3QgbnVtYmVyIG9mIGdyaWQgY2xhc3NlcyBnaXZlblxuLy8gYW55IHZhbHVlIG9mIGAkZ3JpZC1jb2x1bW5zYC5cblxuLy8gW2NvbnZlcnRlcl0gVGhpcyBpcyBkZWZpbmVkIHJlY3Vyc2l2ZWx5IGluIExFU1MsIGJ1dCBTYXNzIHN1cHBvcnRzIHJlYWwgbG9vcHNcbkBtaXhpbiBtYWtlLWdyaWQtY29sdW1ucygkaTogMSwgJGxpc3Q6IFwiLmNvbC14cy0jeyRpfSwgLmNvbC1zbS0jeyRpfSwgLmNvbC1tZC0jeyRpfSwgLmNvbC1sZy0jeyRpfVwiKSB7XG4gIEBmb3IgJGkgZnJvbSAoMSArIDEpIHRocm91Z2ggJGdyaWQtY29sdW1ucyB7XG4gICAgJGxpc3Q6IFwiI3skbGlzdH0sIC5jb2wteHMtI3skaX0sIC5jb2wtc20tI3skaX0sIC5jb2wtbWQtI3skaX0sIC5jb2wtbGctI3skaX1cIjtcbiAgfVxuICAjeyRsaXN0fSB7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIC8vIFByZXZlbnQgY29sdW1ucyBmcm9tIGNvbGxhcHNpbmcgd2hlbiBlbXB0eVxuICAgIG1pbi1oZWlnaHQ6IDFweDtcbiAgICAvLyBJbm5lciBndXR0ZXIgdmlhIHBhZGRpbmdcbiAgICBwYWRkaW5nLWxlZnQ6ICAoJGdyaWQtZ3V0dGVyLXdpZHRoIC8gMik7XG4gICAgcGFkZGluZy1yaWdodDogKCRncmlkLWd1dHRlci13aWR0aCAvIDIpO1xuICB9XG59XG5cblxuLy8gW2NvbnZlcnRlcl0gVGhpcyBpcyBkZWZpbmVkIHJlY3Vyc2l2ZWx5IGluIExFU1MsIGJ1dCBTYXNzIHN1cHBvcnRzIHJlYWwgbG9vcHNcbkBtaXhpbiBmbG9hdC1ncmlkLWNvbHVtbnMoJGNsYXNzLCAkaTogMSwgJGxpc3Q6IFwiLmNvbC0jeyRjbGFzc30tI3skaX1cIikge1xuICBAZm9yICRpIGZyb20gKDEgKyAxKSB0aHJvdWdoICRncmlkLWNvbHVtbnMge1xuICAgICRsaXN0OiBcIiN7JGxpc3R9LCAuY29sLSN7JGNsYXNzfS0jeyRpfVwiO1xuICB9XG4gICN7JGxpc3R9IHtcbiAgICBmbG9hdDogbGVmdDtcbiAgfVxufVxuXG5cbkBtaXhpbiBjYWxjLWdyaWQtY29sdW1uKCRpbmRleCwgJGNsYXNzLCAkdHlwZSkge1xuICBAaWYgKCR0eXBlID09IHdpZHRoKSBhbmQgKCRpbmRleCA+IDApIHtcbiAgICAuY29sLSN7JGNsYXNzfS0jeyRpbmRleH0ge1xuICAgICAgd2lkdGg6IHBlcmNlbnRhZ2UoKCRpbmRleCAvICRncmlkLWNvbHVtbnMpKTtcbiAgICB9XG4gIH1cbiAgQGlmICgkdHlwZSA9PSBwdXNoKSBhbmQgKCRpbmRleCA+IDApIHtcbiAgICAuY29sLSN7JGNsYXNzfS1wdXNoLSN7JGluZGV4fSB7XG4gICAgICBsZWZ0OiBwZXJjZW50YWdlKCgkaW5kZXggLyAkZ3JpZC1jb2x1bW5zKSk7XG4gICAgfVxuICB9XG4gIEBpZiAoJHR5cGUgPT0gcHVzaCkgYW5kICgkaW5kZXggPT0gMCkge1xuICAgIC5jb2wtI3skY2xhc3N9LXB1c2gtMCB7XG4gICAgICBsZWZ0OiBhdXRvO1xuICAgIH1cbiAgfVxuICBAaWYgKCR0eXBlID09IHB1bGwpIGFuZCAoJGluZGV4ID4gMCkge1xuICAgIC5jb2wtI3skY2xhc3N9LXB1bGwtI3skaW5kZXh9IHtcbiAgICAgIHJpZ2h0OiBwZXJjZW50YWdlKCgkaW5kZXggLyAkZ3JpZC1jb2x1bW5zKSk7XG4gICAgfVxuICB9XG4gIEBpZiAoJHR5cGUgPT0gcHVsbCkgYW5kICgkaW5kZXggPT0gMCkge1xuICAgIC5jb2wtI3skY2xhc3N9LXB1bGwtMCB7XG4gICAgICByaWdodDogYXV0bztcbiAgICB9XG4gIH1cbiAgQGlmICgkdHlwZSA9PSBvZmZzZXQpIHtcbiAgICAuY29sLSN7JGNsYXNzfS1vZmZzZXQtI3skaW5kZXh9IHtcbiAgICAgIG1hcmdpbi1sZWZ0OiBwZXJjZW50YWdlKCgkaW5kZXggLyAkZ3JpZC1jb2x1bW5zKSk7XG4gICAgfVxuICB9XG59XG5cbi8vIFtjb252ZXJ0ZXJdIFRoaXMgaXMgZGVmaW5lZCByZWN1cnNpdmVseSBpbiBMRVNTLCBidXQgU2FzcyBzdXBwb3J0cyByZWFsIGxvb3BzXG5AbWl4aW4gbG9vcC1ncmlkLWNvbHVtbnMoJGNvbHVtbnMsICRjbGFzcywgJHR5cGUpIHtcbiAgQGZvciAkaSBmcm9tIDAgdGhyb3VnaCAkY29sdW1ucyB7XG4gICAgQGluY2x1ZGUgY2FsYy1ncmlkLWNvbHVtbigkaSwgJGNsYXNzLCAkdHlwZSk7XG4gIH1cbn1cblxuXG4vLyBDcmVhdGUgZ3JpZCBmb3Igc3BlY2lmaWMgY2xhc3NcbkBtaXhpbiBtYWtlLWdyaWQoJGNsYXNzKSB7XG4gIEBpbmNsdWRlIGZsb2F0LWdyaWQtY29sdW1ucygkY2xhc3MpO1xuICBAaW5jbHVkZSBsb29wLWdyaWQtY29sdW1ucygkZ3JpZC1jb2x1bW5zLCAkY2xhc3MsIHdpZHRoKTtcbiAgQGluY2x1ZGUgbG9vcC1ncmlkLWNvbHVtbnMoJGdyaWQtY29sdW1ucywgJGNsYXNzLCBwdWxsKTtcbiAgQGluY2x1ZGUgbG9vcC1ncmlkLWNvbHVtbnMoJGdyaWQtY29sdW1ucywgJGNsYXNzLCBwdXNoKTtcbiAgQGluY2x1ZGUgbG9vcC1ncmlkLWNvbHVtbnMoJGdyaWQtY29sdW1ucywgJGNsYXNzLCBvZmZzZXQpO1xufVxuIiwiLy9cbi8vIFRhYmxlc1xuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuXG50YWJsZSB7XG4gIGJhY2tncm91bmQtY29sb3I6ICR0YWJsZS1iZztcbn1cbmNhcHRpb24ge1xuICBwYWRkaW5nLXRvcDogJHRhYmxlLWNlbGwtcGFkZGluZztcbiAgcGFkZGluZy1ib3R0b206ICR0YWJsZS1jZWxsLXBhZGRpbmc7XG4gIGNvbG9yOiAkdGV4dC1tdXRlZDtcbiAgdGV4dC1hbGlnbjogbGVmdDtcbn1cbnRoIHtcbiAgdGV4dC1hbGlnbjogbGVmdDtcbn1cblxuXG4vLyBCYXNlbGluZSBzdHlsZXNcblxudGFibGUsIC50YWJsZSB7XG4gIHdpZHRoOiAxMDAlO1xuICBtYXgtd2lkdGg6IDEwMCU7XG4gIG1hcmdpbi1ib3R0b206ICRsaW5lLWhlaWdodC1jb21wdXRlZDtcbiAgLy8gQ2VsbHNcbiAgPiB0aGVhZCxcbiAgPiB0Ym9keSxcbiAgPiB0Zm9vdCB7XG4gICAgPiB0ciB7XG4gICAgICA+IHRoLFxuICAgICAgPiB0ZCB7XG4gICAgICAgIHBhZGRpbmc6ICR0YWJsZS1jZWxsLXBhZGRpbmc7XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAkbGluZS1oZWlnaHQtYmFzZTtcbiAgICAgICAgdmVydGljYWwtYWxpZ246IHRvcDtcbiAgICAgICAgYm9yZGVyLXRvcDogMXB4IHNvbGlkICR0YWJsZS1ib3JkZXItY29sb3I7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIC8vIEJvdHRvbSBhbGlnbiBmb3IgY29sdW1uIGhlYWRpbmdzXG4gID4gdGhlYWQgPiB0ciA+IHRoIHtcbiAgICB2ZXJ0aWNhbC1hbGlnbjogYm90dG9tO1xuICAgIGJvcmRlci1ib3R0b206IDJweCBzb2xpZCAkdGFibGUtYm9yZGVyLWNvbG9yO1xuICB9XG4gIC8vIFJlbW92ZSB0b3AgYm9yZGVyIGZyb20gdGhlYWQgYnkgZGVmYXVsdFxuICA+IGNhcHRpb24gKyB0aGVhZCxcbiAgPiBjb2xncm91cCArIHRoZWFkLFxuICA+IHRoZWFkOmZpcnN0LWNoaWxkIHtcbiAgICA+IHRyOmZpcnN0LWNoaWxkIHtcbiAgICAgID4gdGgsXG4gICAgICA+IHRkIHtcbiAgICAgICAgYm9yZGVyLXRvcDogMDtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgLy8gQWNjb3VudCBmb3IgbXVsdGlwbGUgdGJvZHkgaW5zdGFuY2VzXG4gID4gdGJvZHkgKyB0Ym9keSB7XG4gICAgYm9yZGVyLXRvcDogMnB4IHNvbGlkICR0YWJsZS1ib3JkZXItY29sb3I7XG4gIH1cblxuICAvLyBOZXN0aW5nXG4gIC50YWJsZSB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogJGJvZHktYmc7XG4gIH1cbn1cblxuXG4vLyBDb25kZW5zZWQgdGFibGUgdy8gaGFsZiBwYWRkaW5nXG5cbi50YWJsZS1jb25kZW5zZWQge1xuICA+IHRoZWFkLFxuICA+IHRib2R5LFxuICA+IHRmb290IHtcbiAgICA+IHRyIHtcbiAgICAgID4gdGgsXG4gICAgICA+IHRkIHtcbiAgICAgICAgcGFkZGluZzogJHRhYmxlLWNvbmRlbnNlZC1jZWxsLXBhZGRpbmc7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cblxuLy8gQm9yZGVyZWQgdmVyc2lvblxuLy9cbi8vIEFkZCBib3JkZXJzIGFsbCBhcm91bmQgdGhlIHRhYmxlIGFuZCBiZXR3ZWVuIGFsbCB0aGUgY29sdW1ucy5cblxuLnRhYmxlLWJvcmRlcmVkIHtcbiAgYm9yZGVyOiAxcHggc29saWQgJHRhYmxlLWJvcmRlci1jb2xvcjtcbiAgPiB0aGVhZCxcbiAgPiB0Ym9keSxcbiAgPiB0Zm9vdCB7XG4gICAgPiB0ciB7XG4gICAgICA+IHRoLFxuICAgICAgPiB0ZCB7XG4gICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICR0YWJsZS1ib3JkZXItY29sb3I7XG4gICAgICB9XG4gICAgfVxuICB9XG4gID4gdGhlYWQgPiB0ciB7XG4gICAgPiB0aCxcbiAgICA+IHRkIHtcbiAgICAgIGJvcmRlci1ib3R0b20td2lkdGg6IDJweDtcbiAgICB9XG4gIH1cbn1cblxuXG4vLyBaZWJyYS1zdHJpcGluZ1xuLy9cbi8vIERlZmF1bHQgemVicmEtc3RyaXBlIHN0eWxlcyAoYWx0ZXJuYXRpbmcgZ3JheSBhbmQgdHJhbnNwYXJlbnQgYmFja2dyb3VuZHMpXG5cbi50YWJsZS1zdHJpcGVkIHtcbiAgPiB0Ym9keSA+IHRyOm50aC1vZi10eXBlKG9kZCkge1xuICAgIGJhY2tncm91bmQtY29sb3I6ICR0YWJsZS1iZy1hY2NlbnQ7XG4gIH1cbn1cblxuXG4vLyBIb3ZlciBlZmZlY3Rcbi8vXG4vLyBQbGFjZWQgaGVyZSBzaW5jZSBpdCBoYXMgdG8gY29tZSBhZnRlciB0aGUgcG90ZW50aWFsIHplYnJhIHN0cmlwaW5nXG5cbi50YWJsZS1ob3ZlciB7XG4gID4gdGJvZHkgPiB0cjpob3ZlciB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogJHRhYmxlLWJnLWhvdmVyO1xuICB9XG59XG5cblxuLy8gVGFibGUgY2VsbCBzaXppbmdcbi8vXG4vLyBSZXNldCBkZWZhdWx0IHRhYmxlIGJlaGF2aW9yXG5cbnRhYmxlIGNvbFtjbGFzcyo9XCJjb2wtXCJdIHtcbiAgcG9zaXRpb246IHN0YXRpYzsgLy8gUHJldmVudCBib3JkZXIgaGlkaW5nIGluIEZpcmVmb3ggYW5kIElFOS0xMSAoc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9pc3N1ZXMvMTE2MjMpXG4gIGZsb2F0OiBub25lO1xuICBkaXNwbGF5OiB0YWJsZS1jb2x1bW47XG59XG50YWJsZSB7XG4gIHRkLFxuICB0aCB7XG4gICAgJltjbGFzcyo9XCJjb2wtXCJdIHtcbiAgICAgIHBvc2l0aW9uOiBzdGF0aWM7IC8vIFByZXZlbnQgYm9yZGVyIGhpZGluZyBpbiBGaXJlZm94IGFuZCBJRTktMTEgKHNlZSBodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvaXNzdWVzLzExNjIzKVxuICAgICAgZmxvYXQ6IG5vbmU7XG4gICAgICBkaXNwbGF5OiB0YWJsZS1jZWxsO1xuICAgIH1cbiAgfVxufVxuXG5cbi8vIFRhYmxlIGJhY2tncm91bmRzXG4vL1xuLy8gRXhhY3Qgc2VsZWN0b3JzIGJlbG93IHJlcXVpcmVkIHRvIG92ZXJyaWRlIGAudGFibGUtc3RyaXBlZGAgYW5kIHByZXZlbnRcbi8vIGluaGVyaXRhbmNlIHRvIG5lc3RlZCB0YWJsZXMuXG5cbi8vIEdlbmVyYXRlIHRoZSBjb250ZXh0dWFsIHZhcmlhbnRzXG5AaW5jbHVkZSB0YWJsZS1yb3ctdmFyaWFudCgnYWN0aXZlJywgJHRhYmxlLWJnLWFjdGl2ZSk7XG5AaW5jbHVkZSB0YWJsZS1yb3ctdmFyaWFudCgnc3VjY2VzcycsICRzdGF0ZS1zdWNjZXNzLWJnKTtcbkBpbmNsdWRlIHRhYmxlLXJvdy12YXJpYW50KCdpbmZvJywgJHN0YXRlLWluZm8tYmcpO1xuQGluY2x1ZGUgdGFibGUtcm93LXZhcmlhbnQoJ3dhcm5pbmcnLCAkc3RhdGUtd2FybmluZy1iZyk7XG5AaW5jbHVkZSB0YWJsZS1yb3ctdmFyaWFudCgnZGFuZ2VyJywgJHN0YXRlLWRhbmdlci1iZyk7XG5cblxuLy8gUmVzcG9uc2l2ZSB0YWJsZXNcbi8vXG4vLyBXcmFwIHlvdXIgdGFibGVzIGluIGAudGFibGUtcmVzcG9uc2l2ZWAgYW5kIHdlJ2xsIG1ha2UgdGhlbSBtb2JpbGUgZnJpZW5kbHlcbi8vIGJ5IGVuYWJsaW5nIGhvcml6b250YWwgc2Nyb2xsaW5nLiBPbmx5IGFwcGxpZXMgPDc2OHB4LiBFdmVyeXRoaW5nIGFib3ZlIHRoYXRcbi8vIHdpbGwgZGlzcGxheSBub3JtYWxseS5cblxuLnRhYmxlLXJlc3BvbnNpdmUge1xuICBvdmVyZmxvdy14OiBhdXRvO1xuICBtaW4taGVpZ2h0OiAwLjAxJTsgLy8gV29ya2Fyb3VuZCBmb3IgSUU5IGJ1ZyAoc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9pc3N1ZXMvMTQ4MzcpXG5cbiAgQG1lZGlhIHNjcmVlbiBhbmQgKG1heC13aWR0aDogJHNjcmVlbi14cy1tYXgpIHtcbiAgICB3aWR0aDogMTAwJTtcbiAgICBtYXJnaW4tYm90dG9tOiAoJGxpbmUtaGVpZ2h0LWNvbXB1dGVkICogMC43NSk7XG4gICAgb3ZlcmZsb3cteTogaGlkZGVuO1xuICAgIC1tcy1vdmVyZmxvdy1zdHlsZTogLW1zLWF1dG9oaWRpbmctc2Nyb2xsYmFyO1xuICAgIGJvcmRlcjogMXB4IHNvbGlkICR0YWJsZS1ib3JkZXItY29sb3I7XG5cbiAgICAvLyBUaWdodGVuIHVwIHNwYWNpbmdcbiAgICA+IC50YWJsZSB7XG4gICAgICBtYXJnaW4tYm90dG9tOiAwO1xuXG4gICAgICAvLyBFbnN1cmUgdGhlIGNvbnRlbnQgZG9lc24ndCB3cmFwXG4gICAgICA+IHRoZWFkLFxuICAgICAgPiB0Ym9keSxcbiAgICAgID4gdGZvb3Qge1xuICAgICAgICA+IHRyIHtcbiAgICAgICAgICA+IHRoLFxuICAgICAgICAgID4gdGQge1xuICAgICAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBTcGVjaWFsIG92ZXJyaWRlcyBmb3IgdGhlIGJvcmRlcmVkIHRhYmxlc1xuICAgID4gLnRhYmxlLWJvcmRlcmVkIHtcbiAgICAgIGJvcmRlcjogMDtcblxuICAgICAgLy8gTnVrZSB0aGUgYXBwcm9wcmlhdGUgYm9yZGVycyBzbyB0aGF0IHRoZSBwYXJlbnQgY2FuIGhhbmRsZSB0aGVtXG4gICAgICA+IHRoZWFkLFxuICAgICAgPiB0Ym9keSxcbiAgICAgID4gdGZvb3Qge1xuICAgICAgICA+IHRyIHtcbiAgICAgICAgICA+IHRoOmZpcnN0LWNoaWxkLFxuICAgICAgICAgID4gdGQ6Zmlyc3QtY2hpbGQge1xuICAgICAgICAgICAgYm9yZGVyLWxlZnQ6IDA7XG4gICAgICAgICAgfVxuICAgICAgICAgID4gdGg6bGFzdC1jaGlsZCxcbiAgICAgICAgICA+IHRkOmxhc3QtY2hpbGQge1xuICAgICAgICAgICAgYm9yZGVyLXJpZ2h0OiAwO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBPbmx5IG51a2UgdGhlIGxhc3Qgcm93J3MgYm90dG9tLWJvcmRlciBpbiBgdGJvZHlgIGFuZCBgdGZvb3RgIHNpbmNlXG4gICAgICAvLyBjaGFuY2VzIGFyZSB0aGVyZSB3aWxsIGJlIG9ubHkgb25lIGB0cmAgaW4gYSBgdGhlYWRgIGFuZCB0aGF0IHdvdWxkXG4gICAgICAvLyByZW1vdmUgdGhlIGJvcmRlciBhbHRvZ2V0aGVyLlxuICAgICAgPiB0Ym9keSxcbiAgICAgID4gdGZvb3Qge1xuICAgICAgICA+IHRyOmxhc3QtY2hpbGQge1xuICAgICAgICAgID4gdGgsXG4gICAgICAgICAgPiB0ZCB7XG4gICAgICAgICAgICBib3JkZXItYm90dG9tOiAwO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgfVxuICB9XG59XG4iLCIvLyBUYWJsZXNcblxuQG1peGluIHRhYmxlLXJvdy12YXJpYW50KCRzdGF0ZSwgJGJhY2tncm91bmQpIHtcbiAgLy8gRXhhY3Qgc2VsZWN0b3JzIGJlbG93IHJlcXVpcmVkIHRvIG92ZXJyaWRlIGAudGFibGUtc3RyaXBlZGAgYW5kIHByZXZlbnRcbiAgLy8gaW5oZXJpdGFuY2UgdG8gbmVzdGVkIHRhYmxlcy5cbiAgLnRhYmxlID4gdGhlYWQgPiB0cixcbiAgLnRhYmxlID4gdGJvZHkgPiB0cixcbiAgLnRhYmxlID4gdGZvb3QgPiB0ciB7XG4gICAgPiB0ZC4jeyRzdGF0ZX0sXG4gICAgPiB0aC4jeyRzdGF0ZX0sXG4gICAgJi4jeyRzdGF0ZX0gPiB0ZCxcbiAgICAmLiN7JHN0YXRlfSA+IHRoIHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6ICRiYWNrZ3JvdW5kO1xuICAgIH1cbiAgfVxuXG4gIC8vIEhvdmVyIHN0YXRlcyBmb3IgYC50YWJsZS1ob3ZlcmBcbiAgLy8gTm90ZTogdGhpcyBpcyBub3QgYXZhaWxhYmxlIGZvciBjZWxscyBvciByb3dzIHdpdGhpbiBgdGhlYWRgIG9yIGB0Zm9vdGAuXG4gIC50YWJsZS1ob3ZlciA+IHRib2R5ID4gdHIge1xuICAgID4gdGQuI3skc3RhdGV9OmhvdmVyLFxuICAgID4gdGguI3skc3RhdGV9OmhvdmVyLFxuICAgICYuI3skc3RhdGV9OmhvdmVyID4gdGQsXG4gICAgJjpob3ZlciA+IC4jeyRzdGF0ZX0sXG4gICAgJi4jeyRzdGF0ZX06aG92ZXIgPiB0aCB7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBkYXJrZW4oJGJhY2tncm91bmQsIDUlKTtcbiAgICB9XG4gIH1cbn1cbiIsIi8vXG4vLyBGb3Jtc1xuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuXG4vLyBOb3JtYWxpemUgbm9uLWNvbnRyb2xzXG4vL1xuLy8gUmVzdHlsZSBhbmQgYmFzZWxpbmUgbm9uLWNvbnRyb2wgZm9ybSBlbGVtZW50cy5cblxuZmllbGRzZXQge1xuICBwYWRkaW5nOiAwO1xuICBtYXJnaW46IDA7XG4gIGJvcmRlcjogMDtcbiAgLy8gQ2hyb21lIGFuZCBGaXJlZm94IHNldCBhIGBtaW4td2lkdGg6IG1pbi1jb250ZW50O2Agb24gZmllbGRzZXRzLFxuICAvLyBzbyB3ZSByZXNldCB0aGF0IHRvIGVuc3VyZSBpdCBiZWhhdmVzIG1vcmUgbGlrZSBhIHN0YW5kYXJkIGJsb2NrIGVsZW1lbnQuXG4gIC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvaXNzdWVzLzEyMzU5LlxuICBtaW4td2lkdGg6IDA7XG59XG5cbmxlZ2VuZCB7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICB3aWR0aDogMTAwJTtcbiAgcGFkZGluZzogMDtcbiAgbWFyZ2luLWJvdHRvbTogJGxpbmUtaGVpZ2h0LWNvbXB1dGVkO1xuICBmb250LXNpemU6ICgkZm9udC1zaXplLWJhc2UgKiAxLjUpO1xuICBsaW5lLWhlaWdodDogaW5oZXJpdDtcbiAgY29sb3I6ICRsZWdlbmQtY29sb3I7XG4gIGJvcmRlcjogMDtcbiAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICRsZWdlbmQtYm9yZGVyLWNvbG9yO1xufVxuXG5sYWJlbCB7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgbWF4LXdpZHRoOiAxMDAlOyAvLyBGb3JjZSBJRTggdG8gd3JhcCBsb25nIGNvbnRlbnQgKHNlZSBodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvaXNzdWVzLzEzMTQxKVxuICBtYXJnaW4tYm90dG9tOiA1cHg7XG4gIGZvbnQtd2VpZ2h0OiA2MDA7XG59XG5cblxuLy8gTm9ybWFsaXplIGZvcm0gY29udHJvbHNcbi8vXG4vLyBXaGlsZSBtb3N0IG9mIG91ciBmb3JtIHN0eWxlcyByZXF1aXJlIGV4dHJhIGNsYXNzZXMsIHNvbWUgYmFzaWMgbm9ybWFsaXphdGlvblxuLy8gaXMgcmVxdWlyZWQgdG8gZW5zdXJlIG9wdGltdW0gZGlzcGxheSB3aXRoIG9yIHdpdGhvdXQgdGhvc2UgY2xhc3NlcyB0byBiZXR0ZXJcbi8vIGFkZHJlc3MgYnJvd3NlciBpbmNvbnNpc3RlbmNpZXMuXG5cbi8vIE92ZXJyaWRlIGNvbnRlbnQtYm94IGluIE5vcm1hbGl6ZSAoKiBpc24ndCBzcGVjaWZpYyBlbm91Z2gpXG5pbnB1dFt0eXBlPVwic2VhcmNoXCJdIHtcbiAgQGluY2x1ZGUgYm94LXNpemluZyhib3JkZXItYm94KTtcbn1cblxuLy8gUG9zaXRpb24gcmFkaW9zIGFuZCBjaGVja2JveGVzIGJldHRlclxuaW5wdXRbdHlwZT1cInJhZGlvXCJdLFxuaW5wdXRbdHlwZT1cImNoZWNrYm94XCJdIHtcbiAgbWFyZ2luOiA0cHggMCAwO1xuICBtYXJnaW4tdG9wOiAxcHggXFw5OyAvLyBJRTgtOVxuICBsaW5lLWhlaWdodDogbm9ybWFsO1xufVxuXG4vLyBTZXQgdGhlIGhlaWdodCBvZiBmaWxlIGNvbnRyb2xzIHRvIG1hdGNoIHRleHQgaW5wdXRzXG5pbnB1dFt0eXBlPVwiZmlsZVwiXSB7XG4gIGRpc3BsYXk6IGJsb2NrO1xufVxuXG4vLyBNYWtlIHJhbmdlIGlucHV0cyBiZWhhdmUgbGlrZSB0ZXh0dWFsIGZvcm0gY29udHJvbHNcbmlucHV0W3R5cGU9XCJyYW5nZVwiXSB7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICB3aWR0aDogMTAwJTtcbn1cblxuLy8gTWFrZSBtdWx0aXBsZSBzZWxlY3QgZWxlbWVudHMgaGVpZ2h0IG5vdCBmaXhlZFxuc2VsZWN0W211bHRpcGxlXSxcbnNlbGVjdFtzaXplXSB7XG4gIGhlaWdodDogYXV0bztcbn1cblxuLy8gRm9jdXMgZm9yIGZpbGUsIHJhZGlvLCBhbmQgY2hlY2tib3hcbmlucHV0W3R5cGU9XCJmaWxlXCJdOmZvY3VzLFxuaW5wdXRbdHlwZT1cInJhZGlvXCJdOmZvY3VzLFxuaW5wdXRbdHlwZT1cImNoZWNrYm94XCJdOmZvY3VzIHtcbiAgQGluY2x1ZGUgdGFiLWZvY3VzO1xufVxuXG4vLyBBZGp1c3Qgb3V0cHV0IGVsZW1lbnRcbm91dHB1dCB7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICBwYWRkaW5nLXRvcDogKCRwYWRkaW5nLWJhc2UtdmVydGljYWwgKyAxKTtcbiAgZm9udC1zaXplOiAkZm9udC1zaXplLWJhc2U7XG4gIGxpbmUtaGVpZ2h0OiAkbGluZS1oZWlnaHQtYmFzZTtcbiAgY29sb3I6ICRpbnB1dC1jb2xvcjtcbn1cblxuXG4vLyBDb21tb24gZm9ybSBjb250cm9sc1xuLy9cbi8vIFNoYXJlZCBzaXplIGFuZCB0eXBlIHJlc2V0cyBmb3IgZm9ybSBjb250cm9scy4gQXBwbHkgYC5mb3JtLWNvbnRyb2xgIHRvIGFueVxuLy8gb2YgdGhlIGZvbGxvd2luZyBmb3JtIGNvbnRyb2xzOlxuLy9cbi8vIHNlbGVjdFxuLy8gdGV4dGFyZWFcbi8vIGlucHV0W3R5cGU9XCJ0ZXh0XCJdXG4vLyBpbnB1dFt0eXBlPVwicGFzc3dvcmRcIl1cbi8vIGlucHV0W3R5cGU9XCJkYXRldGltZVwiXVxuLy8gaW5wdXRbdHlwZT1cImRhdGV0aW1lLWxvY2FsXCJdXG4vLyBpbnB1dFt0eXBlPVwiZGF0ZVwiXVxuLy8gaW5wdXRbdHlwZT1cIm1vbnRoXCJdXG4vLyBpbnB1dFt0eXBlPVwidGltZVwiXVxuLy8gaW5wdXRbdHlwZT1cIndlZWtcIl1cbi8vIGlucHV0W3R5cGU9XCJudW1iZXJcIl1cbi8vIGlucHV0W3R5cGU9XCJlbWFpbFwiXVxuLy8gaW5wdXRbdHlwZT1cInVybFwiXVxuLy8gaW5wdXRbdHlwZT1cInNlYXJjaFwiXVxuLy8gaW5wdXRbdHlwZT1cInRlbFwiXVxuLy8gaW5wdXRbdHlwZT1cImNvbG9yXCJdXG5cbi5mb3JtLWNvbnRyb2wge1xuICBkaXNwbGF5OiBibG9jaztcbiAgd2lkdGg6IDEwMCU7XG4gIGhlaWdodDogJGlucHV0LWhlaWdodC1iYXNlOyAvLyBNYWtlIGlucHV0cyBhdCBsZWFzdCB0aGUgaGVpZ2h0IG9mIHRoZWlyIGJ1dHRvbiBjb3VudGVycGFydCAoYmFzZSBsaW5lLWhlaWdodCArIHBhZGRpbmcgKyBib3JkZXIpXG4gIHBhZGRpbmc6ICRwYWRkaW5nLWJhc2UtdmVydGljYWwgJHBhZGRpbmctYmFzZS1ob3Jpem9udGFsO1xuICBmb250LXNpemU6ICRmb250LXNpemUtYmFzZTtcbiAgbGluZS1oZWlnaHQ6ICRsaW5lLWhlaWdodC1iYXNlO1xuICBjb2xvcjogJGlucHV0LWNvbG9yO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAkaW5wdXQtYmc7XG4gIGJhY2tncm91bmQtaW1hZ2U6IG5vbmU7IC8vIFJlc2V0IHVudXN1YWwgRmlyZWZveC1vbi1BbmRyb2lkIGRlZmF1bHQgc3R5bGU7IHNlZSBodHRwczovL2dpdGh1Yi5jb20vbmVjb2xhcy9ub3JtYWxpemUuY3NzL2lzc3Vlcy8yMTRcbiAgYm9yZGVyOiAxcHggc29saWQgJGlucHV0LWJvcmRlcjtcbiAgYm9yZGVyLXJhZGl1czogJGlucHV0LWJvcmRlci1yYWRpdXM7IC8vIE5vdGU6IFRoaXMgaGFzIG5vIGVmZmVjdCBvbiA8c2VsZWN0PnMgaW4gc29tZSBicm93c2VycywgZHVlIHRvIHRoZSBsaW1pdGVkIHN0eWxhYmlsaXR5IG9mIDxzZWxlY3Q+cyBpbiBDU1MuXG4gIEBpbmNsdWRlIGJveC1zaGFkb3coaW5zZXQgMCAxcHggMXB4IHJnYmEoMCwwLDAsLjA3NSkpO1xuICBAaW5jbHVkZSB0cmFuc2l0aW9uKGJvcmRlci1jb2xvciBlYXNlLWluLW91dCAuMTVzLCBib3gtc2hhZG93IGVhc2UtaW4tb3V0IC4xNXMpO1xuXG4gIC8vIEN1c3RvbWl6ZSB0aGUgYDpmb2N1c2Agc3RhdGUgdG8gaW1pdGF0ZSBuYXRpdmUgV2ViS2l0IHN0eWxlcy5cbiAgQGluY2x1ZGUgZm9ybS1jb250cm9sLWZvY3VzO1xuXG4gIC8vIFBsYWNlaG9sZGVyXG4gIEBpbmNsdWRlIHBsYWNlaG9sZGVyO1xuXG4gIC8vIERpc2FibGVkIGFuZCByZWFkLW9ubHkgaW5wdXRzXG4gIC8vXG4gIC8vIEhUTUw1IHNheXMgdGhhdCBjb250cm9scyB1bmRlciBhIGZpZWxkc2V0ID4gbGVnZW5kOmZpcnN0LWNoaWxkIHdvbid0IGJlXG4gIC8vIGRpc2FibGVkIGlmIHRoZSBmaWVsZHNldCBpcyBkaXNhYmxlZC4gRHVlIHRvIGltcGxlbWVudGF0aW9uIGRpZmZpY3VsdHksIHdlXG4gIC8vIGRvbid0IGhvbm9yIHRoYXQgZWRnZSBjYXNlOyB3ZSBzdHlsZSB0aGVtIGFzIGRpc2FibGVkIGFueXdheS5cbiAgJltkaXNhYmxlZF0sXG4gICZbcmVhZG9ubHldLFxuICBmaWVsZHNldFtkaXNhYmxlZF0gJiB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogJGlucHV0LWJnLWRpc2FibGVkO1xuICAgIG9wYWNpdHk6IDE7IC8vIGlPUyBmaXggZm9yIHVucmVhZGFibGUgZGlzYWJsZWQgY29udGVudDsgc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9pc3N1ZXMvMTE2NTVcbiAgfVxuXG4gICZbZGlzYWJsZWRdLFxuICBmaWVsZHNldFtkaXNhYmxlZF0gJiB7XG4gICAgY3Vyc29yOiAkY3Vyc29yLWRpc2FibGVkO1xuICB9XG5cbiAgLy8gW2NvbnZlcnRlcl0gZXh0cmFjdGVkIHRleHRhcmVhJiB0byB0ZXh0YXJlYS5mb3JtLWNvbnRyb2xcbn1cblxuLy8gUmVzZXQgaGVpZ2h0IGZvciBgdGV4dGFyZWFgc1xudGV4dGFyZWEuZm9ybS1jb250cm9sIHtcbiAgaGVpZ2h0OiBhdXRvO1xufVxuXG5cbi8vIFNlYXJjaCBpbnB1dHMgaW4gaU9TXG4vL1xuLy8gVGhpcyBvdmVycmlkZXMgdGhlIGV4dHJhIHJvdW5kZWQgY29ybmVycyBvbiBzZWFyY2ggaW5wdXRzIGluIGlPUyBzbyB0aGF0IG91clxuLy8gYC5mb3JtLWNvbnRyb2xgIGNsYXNzIGNhbiBwcm9wZXJseSBzdHlsZSB0aGVtLiBOb3RlIHRoYXQgdGhpcyBjYW5ub3Qgc2ltcGx5XG4vLyBiZSBhZGRlZCB0byBgLmZvcm0tY29udHJvbGAgYXMgaXQncyBub3Qgc3BlY2lmaWMgZW5vdWdoLiBGb3IgZGV0YWlscywgc2VlXG4vLyBodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvaXNzdWVzLzExNTg2LlxuXG5pbnB1dFt0eXBlPVwic2VhcmNoXCJdIHtcbiAgLXdlYmtpdC1hcHBlYXJhbmNlOiBub25lO1xufVxuXG5cbi8vIFNwZWNpYWwgc3R5bGVzIGZvciBpT1MgdGVtcG9yYWwgaW5wdXRzXG4vL1xuLy8gSW4gTW9iaWxlIFNhZmFyaSwgc2V0dGluZyBgZGlzcGxheTogYmxvY2tgIG9uIHRlbXBvcmFsIGlucHV0cyBjYXVzZXMgdGhlXG4vLyB0ZXh0IHdpdGhpbiB0aGUgaW5wdXQgdG8gYmVjb21lIHZlcnRpY2FsbHkgbWlzYWxpZ25lZC4gQXMgYSB3b3JrYXJvdW5kLCB3ZVxuLy8gc2V0IGEgcGl4ZWwgbGluZS1oZWlnaHQgdGhhdCBtYXRjaGVzIHRoZSBnaXZlbiBoZWlnaHQgb2YgdGhlIGlucHV0LCBidXQgb25seVxuLy8gZm9yIFNhZmFyaS4gU2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzk4NDhcblxuQG1lZGlhIHNjcmVlbiBhbmQgKC13ZWJraXQtbWluLWRldmljZS1waXhlbC1yYXRpbzogMCkge1xuICBpbnB1dFt0eXBlPVwiZGF0ZVwiXSxcbiAgaW5wdXRbdHlwZT1cInRpbWVcIl0sXG4gIGlucHV0W3R5cGU9XCJkYXRldGltZS1sb2NhbFwiXSxcbiAgaW5wdXRbdHlwZT1cIm1vbnRoXCJdIHtcbiAgICBsaW5lLWhlaWdodDogJGlucHV0LWhlaWdodC1iYXNlO1xuXG4gICAgJi5pbnB1dC1zbSxcbiAgICAuaW5wdXQtZ3JvdXAtc20gJiB7XG4gICAgICBsaW5lLWhlaWdodDogJGlucHV0LWhlaWdodC1zbWFsbDtcbiAgICB9XG5cbiAgICAmLmlucHV0LWxnLFxuICAgIC5pbnB1dC1ncm91cC1sZyAmIHtcbiAgICAgIGxpbmUtaGVpZ2h0OiAkaW5wdXQtaGVpZ2h0LWxhcmdlO1xuICAgIH1cbiAgfVxufVxuXG5cbi8vIEZvcm0gZ3JvdXBzXG4vL1xuLy8gRGVzaWduZWQgdG8gaGVscCB3aXRoIHRoZSBvcmdhbml6YXRpb24gYW5kIHNwYWNpbmcgb2YgdmVydGljYWwgZm9ybXMuIEZvclxuLy8gaG9yaXpvbnRhbCBmb3JtcywgdXNlIHRoZSBwcmVkZWZpbmVkIGdyaWQgY2xhc3Nlcy5cblxuLmZvcm0tZ3JvdXAge1xuICBtYXJnaW4tYm90dG9tOiAkZm9ybS1ncm91cC1tYXJnaW4tYm90dG9tO1xufVxuXG5cbi8vIENoZWNrYm94ZXMgYW5kIHJhZGlvc1xuLy9cbi8vIEluZGVudCB0aGUgbGFiZWxzIHRvIHBvc2l0aW9uIHJhZGlvcy9jaGVja2JveGVzIGFzIGhhbmdpbmcgY29udHJvbHMuXG5cbi5yYWRpbyxcbi5jaGVja2JveCB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgZGlzcGxheTogYmxvY2s7XG4gIG1hcmdpbi10b3A6IDEwcHg7XG4gIG1hcmdpbi1ib3R0b206IDEwcHg7XG5cbiAgbGFiZWwge1xuICAgIG1pbi1oZWlnaHQ6ICRsaW5lLWhlaWdodC1jb21wdXRlZDsgLy8gRW5zdXJlIHRoZSBpbnB1dCBkb2Vzbid0IGp1bXAgd2hlbiB0aGVyZSBpcyBubyB0ZXh0XG4gICAgcGFkZGluZy1sZWZ0OiAyMHB4O1xuICAgIG1hcmdpbi1ib3R0b206IDA7XG4gICAgZm9udC13ZWlnaHQ6IG5vcm1hbDtcbiAgICBjdXJzb3I6IHBvaW50ZXI7XG4gIH1cbn1cbi5yYWRpbyBpbnB1dFt0eXBlPVwicmFkaW9cIl0sXG4ucmFkaW8taW5saW5lIGlucHV0W3R5cGU9XCJyYWRpb1wiXSxcbi5jaGVja2JveCBpbnB1dFt0eXBlPVwiY2hlY2tib3hcIl0sXG4uY2hlY2tib3gtaW5saW5lIGlucHV0W3R5cGU9XCJjaGVja2JveFwiXSB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgbWFyZ2luLWxlZnQ6IC0yMHB4O1xuICBtYXJnaW4tdG9wOiA0cHggXFw5O1xufVxuXG4ucmFkaW8gKyAucmFkaW8sXG4uY2hlY2tib3ggKyAuY2hlY2tib3gge1xuICBtYXJnaW4tdG9wOiAtNXB4OyAvLyBNb3ZlIHVwIHNpYmxpbmcgcmFkaW9zIG9yIGNoZWNrYm94ZXMgZm9yIHRpZ2h0ZXIgc3BhY2luZ1xufVxuXG4vLyBSYWRpb3MgYW5kIGNoZWNrYm94ZXMgb24gc2FtZSBsaW5lXG4ucmFkaW8taW5saW5lLFxuLmNoZWNrYm94LWlubGluZSB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICBwYWRkaW5nLWxlZnQ6IDIwcHg7XG4gIG1hcmdpbi1ib3R0b206IDA7XG4gIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG4gIGZvbnQtd2VpZ2h0OiBub3JtYWw7XG4gIGN1cnNvcjogcG9pbnRlcjtcbn1cbi5yYWRpby1pbmxpbmUgKyAucmFkaW8taW5saW5lLFxuLmNoZWNrYm94LWlubGluZSArIC5jaGVja2JveC1pbmxpbmUge1xuICBtYXJnaW4tdG9wOiAwO1xuICBtYXJnaW4tbGVmdDogMTBweDsgLy8gc3BhY2Ugb3V0IGNvbnNlY3V0aXZlIGlubGluZSBjb250cm9sc1xufVxuXG4vLyBBcHBseSBzYW1lIGRpc2FibGVkIGN1cnNvciB0d2VhayBhcyBmb3IgaW5wdXRzXG4vLyBTb21lIHNwZWNpYWwgY2FyZSBpcyBuZWVkZWQgYmVjYXVzZSA8bGFiZWw+cyBkb24ndCBpbmhlcml0IHRoZWlyIHBhcmVudCdzIGBjdXJzb3JgLlxuLy9cbi8vIE5vdGU6IE5laXRoZXIgcmFkaW9zIG5vciBjaGVja2JveGVzIGNhbiBiZSByZWFkb25seS5cbmlucHV0W3R5cGU9XCJyYWRpb1wiXSxcbmlucHV0W3R5cGU9XCJjaGVja2JveFwiXSB7XG4gICZbZGlzYWJsZWRdLFxuICAmLmRpc2FibGVkLFxuICBmaWVsZHNldFtkaXNhYmxlZF0gJiB7XG4gICAgY3Vyc29yOiAkY3Vyc29yLWRpc2FibGVkO1xuICB9XG59XG4vLyBUaGVzZSBjbGFzc2VzIGFyZSB1c2VkIGRpcmVjdGx5IG9uIDxsYWJlbD5zXG4ucmFkaW8taW5saW5lLFxuLmNoZWNrYm94LWlubGluZSB7XG4gICYuZGlzYWJsZWQsXG4gIGZpZWxkc2V0W2Rpc2FibGVkXSAmIHtcbiAgICBjdXJzb3I6ICRjdXJzb3ItZGlzYWJsZWQ7XG4gIH1cbn1cbi8vIFRoZXNlIGNsYXNzZXMgYXJlIHVzZWQgb24gZWxlbWVudHMgd2l0aCA8bGFiZWw+IGRlc2NlbmRhbnRzXG4ucmFkaW8sXG4uY2hlY2tib3gge1xuICAmLmRpc2FibGVkLFxuICBmaWVsZHNldFtkaXNhYmxlZF0gJiB7XG4gICAgbGFiZWwge1xuICAgICAgY3Vyc29yOiAkY3Vyc29yLWRpc2FibGVkO1xuICAgIH1cbiAgfVxufVxuXG5cbi8vIFN0YXRpYyBmb3JtIGNvbnRyb2wgdGV4dFxuLy9cbi8vIEFwcGx5IGNsYXNzIHRvIGEgYHBgIGVsZW1lbnQgdG8gbWFrZSBhbnkgc3RyaW5nIG9mIHRleHQgYWxpZ24gd2l0aCBsYWJlbHMgaW5cbi8vIGEgaG9yaXpvbnRhbCBmb3JtIGxheW91dC5cblxuLmZvcm0tY29udHJvbC1zdGF0aWMge1xuICAvLyBTaXplIGl0IGFwcHJvcHJpYXRlbHkgbmV4dCB0byByZWFsIGZvcm0gY29udHJvbHNcbiAgcGFkZGluZy10b3A6ICgkcGFkZGluZy1iYXNlLXZlcnRpY2FsICsgMSk7XG4gIHBhZGRpbmctYm90dG9tOiAoJHBhZGRpbmctYmFzZS12ZXJ0aWNhbCArIDEpO1xuICAvLyBSZW1vdmUgZGVmYXVsdCBtYXJnaW4gZnJvbSBgcGBcbiAgbWFyZ2luLWJvdHRvbTogMDtcbiAgbWluLWhlaWdodDogKCRsaW5lLWhlaWdodC1jb21wdXRlZCArICRmb250LXNpemUtYmFzZSk7XG5cbiAgJi5pbnB1dC1sZyxcbiAgJi5pbnB1dC1zbSB7XG4gICAgcGFkZGluZy1sZWZ0OiAwO1xuICAgIHBhZGRpbmctcmlnaHQ6IDA7XG4gIH1cbn1cblxuXG4vLyBGb3JtIGNvbnRyb2wgc2l6aW5nXG4vL1xuLy8gQnVpbGQgb24gYC5mb3JtLWNvbnRyb2xgIHdpdGggbW9kaWZpZXIgY2xhc3NlcyB0byBkZWNyZWFzZSBvciBpbmNyZWFzZSB0aGVcbi8vIGhlaWdodCBhbmQgZm9udC1zaXplIG9mIGZvcm0gY29udHJvbHMuXG4vL1xuLy8gVGhlIGAuZm9ybS1ncm91cC0qIGZvcm0tY29udHJvbGAgdmFyaWF0aW9ucyBhcmUgc2FkbHkgZHVwbGljYXRlZCB0byBhdm9pZCB0aGVcbi8vIGlzc3VlIGRvY3VtZW50ZWQgaW4gaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2lzc3Vlcy8xNTA3NC5cblxuQGluY2x1ZGUgaW5wdXQtc2l6ZSgnLmlucHV0LXNtJywgJGlucHV0LWhlaWdodC1zbWFsbCwgJHBhZGRpbmctc21hbGwtdmVydGljYWwsICRwYWRkaW5nLXNtYWxsLWhvcml6b250YWwsICRmb250LXNpemUtc21hbGwsICRsaW5lLWhlaWdodC1zbWFsbCwgJGlucHV0LWJvcmRlci1yYWRpdXMtc21hbGwpO1xuLmZvcm0tZ3JvdXAtc20ge1xuXG4gIEBpbmNsdWRlIGlucHV0LXNpemUoJy5mb3JtLWNvbnRyb2wnLCAkaW5wdXQtaGVpZ2h0LXNtYWxsLCAkcGFkZGluZy1zbWFsbC12ZXJ0aWNhbCwgJHBhZGRpbmctc21hbGwtaG9yaXpvbnRhbCwgJGZvbnQtc2l6ZS1zbWFsbCwgJGxpbmUtaGVpZ2h0LXNtYWxsLCAkaW5wdXQtYm9yZGVyLXJhZGl1cy1zbWFsbCk7XG5cbiAgLmZvcm0tY29udHJvbC1zdGF0aWMge1xuICAgIGhlaWdodDogJGlucHV0LWhlaWdodC1zbWFsbDtcbiAgICBwYWRkaW5nOiAkcGFkZGluZy1zbWFsbC12ZXJ0aWNhbCAkcGFkZGluZy1zbWFsbC1ob3Jpem9udGFsO1xuICAgIGZvbnQtc2l6ZTogJGZvbnQtc2l6ZS1zbWFsbDtcbiAgICBsaW5lLWhlaWdodDogJGxpbmUtaGVpZ2h0LXNtYWxsO1xuICAgIG1pbi1oZWlnaHQ6ICgkbGluZS1oZWlnaHQtY29tcHV0ZWQgKyAkZm9udC1zaXplLXNtYWxsKTtcbiAgfVxufVxuXG5AaW5jbHVkZSBpbnB1dC1zaXplKCcuaW5wdXQtbGcnLCAkaW5wdXQtaGVpZ2h0LWxhcmdlLCAkcGFkZGluZy1sYXJnZS12ZXJ0aWNhbCwgJHBhZGRpbmctbGFyZ2UtaG9yaXpvbnRhbCwgJGZvbnQtc2l6ZS1sYXJnZSwgJGxpbmUtaGVpZ2h0LWxhcmdlLCAkaW5wdXQtYm9yZGVyLXJhZGl1cy1sYXJnZSk7XG4uZm9ybS1ncm91cC1sZyB7XG5cbiAgQGluY2x1ZGUgaW5wdXQtc2l6ZSgnLmZvcm0tY29udHJvbCcsICRpbnB1dC1oZWlnaHQtbGFyZ2UsICRwYWRkaW5nLWxhcmdlLXZlcnRpY2FsLCAkcGFkZGluZy1sYXJnZS1ob3Jpem9udGFsLCAkZm9udC1zaXplLWxhcmdlLCAkbGluZS1oZWlnaHQtbGFyZ2UsICRpbnB1dC1ib3JkZXItcmFkaXVzLWxhcmdlKTtcblxuICAuZm9ybS1jb250cm9sLXN0YXRpYyB7XG4gICAgaGVpZ2h0OiAkaW5wdXQtaGVpZ2h0LWxhcmdlO1xuICAgIHBhZGRpbmc6ICRwYWRkaW5nLWxhcmdlLXZlcnRpY2FsICRwYWRkaW5nLWxhcmdlLWhvcml6b250YWw7XG4gICAgZm9udC1zaXplOiAkZm9udC1zaXplLWxhcmdlO1xuICAgIGxpbmUtaGVpZ2h0OiAkbGluZS1oZWlnaHQtbGFyZ2U7XG4gICAgbWluLWhlaWdodDogKCRsaW5lLWhlaWdodC1jb21wdXRlZCArICRmb250LXNpemUtbGFyZ2UpO1xuICB9XG59XG5cblxuLy8gRm9ybSBjb250cm9sIGZlZWRiYWNrIHN0YXRlc1xuLy9cbi8vIEFwcGx5IGNvbnRleHR1YWwgYW5kIHNlbWFudGljIHN0YXRlcyB0byBpbmRpdmlkdWFsIGZvcm0gY29udHJvbHMuXG5cbi5oYXMtZmVlZGJhY2sge1xuICAvLyBFbmFibGUgYWJzb2x1dGUgcG9zaXRpb25pbmdcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuXG4gIC8vIEVuc3VyZSBpY29ucyBkb24ndCBvdmVybGFwIHRleHRcbiAgLmZvcm0tY29udHJvbCB7XG4gICAgcGFkZGluZy1yaWdodDogKCRpbnB1dC1oZWlnaHQtYmFzZSAqIDEuMjUpO1xuICB9XG59XG4vLyBGZWVkYmFjayBpY29uIChyZXF1aXJlcyAuZ2x5cGhpY29uIGNsYXNzZXMpXG4uZm9ybS1jb250cm9sLWZlZWRiYWNrIHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB0b3A6IDA7XG4gIHJpZ2h0OiAwO1xuICB6LWluZGV4OiAyOyAvLyBFbnN1cmUgaWNvbiBpcyBhYm92ZSBpbnB1dCBncm91cHNcbiAgZGlzcGxheTogYmxvY2s7XG4gIHdpZHRoOiAkaW5wdXQtaGVpZ2h0LWJhc2U7XG4gIGhlaWdodDogJGlucHV0LWhlaWdodC1iYXNlO1xuICBsaW5lLWhlaWdodDogJGlucHV0LWhlaWdodC1iYXNlO1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIHBvaW50ZXItZXZlbnRzOiBub25lO1xufVxuLmlucHV0LWxnICsgLmZvcm0tY29udHJvbC1mZWVkYmFjayB7XG4gIHdpZHRoOiAkaW5wdXQtaGVpZ2h0LWxhcmdlO1xuICBoZWlnaHQ6ICRpbnB1dC1oZWlnaHQtbGFyZ2U7XG4gIGxpbmUtaGVpZ2h0OiAkaW5wdXQtaGVpZ2h0LWxhcmdlO1xufVxuLmlucHV0LXNtICsgLmZvcm0tY29udHJvbC1mZWVkYmFjayB7XG4gIHdpZHRoOiAkaW5wdXQtaGVpZ2h0LXNtYWxsO1xuICBoZWlnaHQ6ICRpbnB1dC1oZWlnaHQtc21hbGw7XG4gIGxpbmUtaGVpZ2h0OiAkaW5wdXQtaGVpZ2h0LXNtYWxsO1xufVxuXG4vLyBGZWVkYmFjayBzdGF0ZXNcbi5oYXMtc3VjY2VzcyB7XG4gIEBpbmNsdWRlIGZvcm0tY29udHJvbC12YWxpZGF0aW9uKCRzdGF0ZS1zdWNjZXNzLXRleHQsICRzdGF0ZS1zdWNjZXNzLXRleHQsICRzdGF0ZS1zdWNjZXNzLWJnKTtcbn1cbi5oYXMtd2FybmluZyB7XG4gIEBpbmNsdWRlIGZvcm0tY29udHJvbC12YWxpZGF0aW9uKCRzdGF0ZS13YXJuaW5nLXRleHQsICRzdGF0ZS13YXJuaW5nLXRleHQsICRzdGF0ZS13YXJuaW5nLWJnKTtcbn1cbi5oYXMtZXJyb3Ige1xuICBAaW5jbHVkZSBmb3JtLWNvbnRyb2wtdmFsaWRhdGlvbigkc3RhdGUtZGFuZ2VyLXRleHQsICRzdGF0ZS1kYW5nZXItdGV4dCwgJHN0YXRlLWRhbmdlci1iZyk7XG59XG5cbi8vIFJlcG9zaXRpb24gZmVlZGJhY2sgaWNvbiBpZiBpbnB1dCBoYXMgdmlzaWJsZSBsYWJlbCBhYm92ZVxuLmhhcy1mZWVkYmFjayBsYWJlbCB7XG5cbiAgJiB+IC5mb3JtLWNvbnRyb2wtZmVlZGJhY2sge1xuICAgICB0b3A6ICgkbGluZS1oZWlnaHQtY29tcHV0ZWQgKyA1KTsgLy8gSGVpZ2h0IG9mIHRoZSBgbGFiZWxgIGFuZCBpdHMgbWFyZ2luXG4gIH1cbiAgJi5zci1vbmx5IH4gLmZvcm0tY29udHJvbC1mZWVkYmFjayB7XG4gICAgIHRvcDogMDtcbiAgfVxufVxuXG5cbi8vIEhlbHAgdGV4dFxuLy9cbi8vIEFwcGx5IHRvIGFueSBlbGVtZW50IHlvdSB3aXNoIHRvIGNyZWF0ZSBsaWdodCB0ZXh0IGZvciBwbGFjZW1lbnQgaW1tZWRpYXRlbHlcbi8vIGJlbG93IGEgZm9ybSBjb250cm9sLiBVc2UgZm9yIGdlbmVyYWwgaGVscCwgZm9ybWF0dGluZywgb3IgaW5zdHJ1Y3Rpb25hbCB0ZXh0LlxuXG4uaGVscC1ibG9jayB7XG4gIGRpc3BsYXk6IGJsb2NrOyAvLyBhY2NvdW50IGZvciBhbnkgZWxlbWVudCB1c2luZyBoZWxwLWJsb2NrXG4gIG1hcmdpbi10b3A6IDVweDtcbiAgbWFyZ2luLWJvdHRvbTogMTBweDtcbiAgY29sb3I6IGxpZ2h0ZW4oJHRleHQtY29sb3IsIDI1JSk7IC8vIGxpZ2h0ZW4gdGhlIHRleHQgc29tZSBmb3IgY29udHJhc3Rcbn1cblxuXG4vLyBJbmxpbmUgZm9ybXNcbi8vXG4vLyBNYWtlIGZvcm1zIGFwcGVhciBpbmxpbmUoLWJsb2NrKSBieSBhZGRpbmcgdGhlIGAuZm9ybS1pbmxpbmVgIGNsYXNzLiBJbmxpbmVcbi8vIGZvcm1zIGJlZ2luIHN0YWNrZWQgb24gZXh0cmEgc21hbGwgKG1vYmlsZSkgZGV2aWNlcyBhbmQgdGhlbiBnbyBpbmxpbmUgd2hlblxuLy8gdmlld3BvcnRzIHJlYWNoIDw3NjhweC5cbi8vXG4vLyBSZXF1aXJlcyB3cmFwcGluZyBpbnB1dHMgYW5kIGxhYmVscyB3aXRoIGAuZm9ybS1ncm91cGAgZm9yIHByb3BlciBkaXNwbGF5IG9mXG4vLyBkZWZhdWx0IEhUTUwgZm9ybSBjb250cm9scyBhbmQgb3VyIGN1c3RvbSBmb3JtIGNvbnRyb2xzIChlLmcuLCBpbnB1dCBncm91cHMpLlxuLy9cbi8vIEhlYWRzIHVwISBUaGlzIGlzIG1peGluLWVkIGludG8gYC5uYXZiYXItZm9ybWAgaW4gbmF2YmFycy5sZXNzLlxuXG4vLyBbY29udmVydGVyXSBleHRyYWN0ZWQgZnJvbSBgLmZvcm0taW5saW5lYCBmb3IgbGlic2FzcyBjb21wYXRpYmlsaXR5XG5AbWl4aW4gZm9ybS1pbmxpbmUge1xuXG4gIC8vIEtpY2sgaW4gdGhlIGlubGluZVxuICBAbWVkaWEgKG1pbi13aWR0aDogJHNjcmVlbi1zbS1taW4pIHtcbiAgICAvLyBJbmxpbmUtYmxvY2sgYWxsIHRoZSB0aGluZ3MgZm9yIFwiaW5saW5lXCJcbiAgICAuZm9ybS1ncm91cCB7XG4gICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgICBtYXJnaW4tYm90dG9tOiAwO1xuICAgICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbiAgICB9XG5cbiAgICAvLyBJbiBuYXZiYXItZm9ybSwgYWxsb3cgZm9sa3MgdG8gKm5vdCogdXNlIGAuZm9ybS1ncm91cGBcbiAgICAuZm9ybS1jb250cm9sIHtcbiAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICAgIHdpZHRoOiBhdXRvOyAvLyBQcmV2ZW50IGxhYmVscyBmcm9tIHN0YWNraW5nIGFib3ZlIGlucHV0cyBpbiBgLmZvcm0tZ3JvdXBgXG4gICAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xuICAgIH1cblxuICAgIC8vIE1ha2Ugc3RhdGljIGNvbnRyb2xzIGJlaGF2ZSBsaWtlIHJlZ3VsYXIgb25lc1xuICAgIC5mb3JtLWNvbnRyb2wtc3RhdGljIHtcbiAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICB9XG5cbiAgICAuaW5wdXQtZ3JvdXAge1xuICAgICAgZGlzcGxheTogaW5saW5lLXRhYmxlO1xuICAgICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcblxuICAgICAgLmlucHV0LWdyb3VwLWFkZG9uLFxuICAgICAgLmlucHV0LWdyb3VwLWJ0bixcbiAgICAgIC5mb3JtLWNvbnRyb2wge1xuICAgICAgICB3aWR0aDogYXV0bztcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBJbnB1dCBncm91cHMgbmVlZCB0aGF0IDEwMCUgd2lkdGggdGhvdWdoXG4gICAgLmlucHV0LWdyb3VwID4gLmZvcm0tY29udHJvbCB7XG4gICAgICB3aWR0aDogMTAwJTtcbiAgICB9XG5cbiAgICAuY29udHJvbC1sYWJlbCB7XG4gICAgICBtYXJnaW4tYm90dG9tOiAwO1xuICAgICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbiAgICB9XG5cbiAgICAvLyBSZW1vdmUgZGVmYXVsdCBtYXJnaW4gb24gcmFkaW9zL2NoZWNrYm94ZXMgdGhhdCB3ZXJlIHVzZWQgZm9yIHN0YWNraW5nLCBhbmRcbiAgICAvLyB0aGVuIHVuZG8gdGhlIGZsb2F0aW5nIG9mIHJhZGlvcyBhbmQgY2hlY2tib3hlcyB0byBtYXRjaC5cbiAgICAucmFkaW8sXG4gICAgLmNoZWNrYm94IHtcbiAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICAgIG1hcmdpbi10b3A6IDA7XG4gICAgICBtYXJnaW4tYm90dG9tOiAwO1xuICAgICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcblxuICAgICAgbGFiZWwge1xuICAgICAgICBwYWRkaW5nLWxlZnQ6IDA7XG4gICAgICB9XG4gICAgfVxuICAgIC5yYWRpbyBpbnB1dFt0eXBlPVwicmFkaW9cIl0sXG4gICAgLmNoZWNrYm94IGlucHV0W3R5cGU9XCJjaGVja2JveFwiXSB7XG4gICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICBtYXJnaW4tbGVmdDogMDtcbiAgICB9XG5cbiAgICAvLyBSZS1vdmVycmlkZSB0aGUgZmVlZGJhY2sgaWNvbi5cbiAgICAuaGFzLWZlZWRiYWNrIC5mb3JtLWNvbnRyb2wtZmVlZGJhY2sge1xuICAgICAgdG9wOiAwO1xuICAgIH1cbiAgfVxufVxuLy8gW2NvbnZlcnRlcl0gZXh0cmFjdGVkIGFzIGBAbWl4aW4gZm9ybS1pbmxpbmVgIGZvciBsaWJzYXNzIGNvbXBhdGliaWxpdHlcbi5mb3JtLWlubGluZSB7XG4gIEBpbmNsdWRlIGZvcm0taW5saW5lO1xufVxuXG5cblxuLy8gSG9yaXpvbnRhbCBmb3Jtc1xuLy9cbi8vIEhvcml6b250YWwgZm9ybXMgYXJlIGJ1aWx0IG9uIGdyaWQgY2xhc3NlcyBhbmQgYWxsb3cgeW91IHRvIGNyZWF0ZSBmb3JtcyB3aXRoXG4vLyBsYWJlbHMgb24gdGhlIGxlZnQgYW5kIGlucHV0cyBvbiB0aGUgcmlnaHQuXG5cbi5mb3JtLWhvcml6b250YWwge1xuXG4gIC8vIENvbnNpc3RlbnQgdmVydGljYWwgYWxpZ25tZW50IG9mIHJhZGlvcyBhbmQgY2hlY2tib3hlc1xuICAvL1xuICAvLyBMYWJlbHMgYWxzbyBnZXQgc29tZSByZXNldCBzdHlsZXMsIGJ1dCB0aGF0IGlzIHNjb3BlZCB0byBhIG1lZGlhIHF1ZXJ5IGJlbG93LlxuICAucmFkaW8sXG4gIC5jaGVja2JveCxcbiAgLnJhZGlvLWlubGluZSxcbiAgLmNoZWNrYm94LWlubGluZSB7XG4gICAgbWFyZ2luLXRvcDogMDtcbiAgICBtYXJnaW4tYm90dG9tOiAwO1xuICAgIHBhZGRpbmctdG9wOiAoJHBhZGRpbmctYmFzZS12ZXJ0aWNhbCArIDEpOyAvLyBEZWZhdWx0IHBhZGRpbmcgcGx1cyBhIGJvcmRlclxuICB9XG4gIC8vIEFjY291bnQgZm9yIHBhZGRpbmcgd2UncmUgYWRkaW5nIHRvIGVuc3VyZSB0aGUgYWxpZ25tZW50IGFuZCBvZiBoZWxwIHRleHRcbiAgLy8gYW5kIG90aGVyIGNvbnRlbnQgYmVsb3cgaXRlbXNcbiAgLnJhZGlvLFxuICAuY2hlY2tib3gge1xuICAgIG1pbi1oZWlnaHQ6ICgkbGluZS1oZWlnaHQtY29tcHV0ZWQgKyAoJHBhZGRpbmctYmFzZS12ZXJ0aWNhbCArIDEpKTtcbiAgfVxuXG4gIC8vIE1ha2UgZm9ybSBncm91cHMgYmVoYXZlIGxpa2Ugcm93c1xuICAuZm9ybS1ncm91cCB7XG4gICAgQGluY2x1ZGUgbWFrZS1yb3c7XG4gIH1cblxuICAvLyBSZXNldCBzcGFjaW5nIGFuZCByaWdodCBhbGlnbiBsYWJlbHMsIGJ1dCBzY29wZSB0byBtZWRpYSBxdWVyaWVzIHNvIHRoYXRcbiAgLy8gbGFiZWxzIG9uIG5hcnJvdyB2aWV3cG9ydHMgc3RhY2sgdGhlIHNhbWUgYXMgYSBkZWZhdWx0IGZvcm0gZXhhbXBsZS5cbiAgQG1lZGlhIChtaW4td2lkdGg6ICRzY3JlZW4tc20tbWluKSB7XG4gICAgLmNvbnRyb2wtbGFiZWwge1xuICAgICAgdGV4dC1hbGlnbjogcmlnaHQ7XG4gICAgICBtYXJnaW4tYm90dG9tOiAwO1xuICAgICAgcGFkZGluZy10b3A6ICgkcGFkZGluZy1iYXNlLXZlcnRpY2FsICsgMSk7IC8vIERlZmF1bHQgcGFkZGluZyBwbHVzIGEgYm9yZGVyXG4gICAgfVxuICB9XG5cbiAgLy8gVmFsaWRhdGlvbiBzdGF0ZXNcbiAgLy9cbiAgLy8gUmVwb3NpdGlvbiB0aGUgaWNvbiBiZWNhdXNlIGl0J3Mgbm93IHdpdGhpbiBhIGdyaWQgY29sdW1uIGFuZCBjb2x1bW5zIGhhdmVcbiAgLy8gYHBvc2l0aW9uOiByZWxhdGl2ZTtgIG9uIHRoZW0uIEFsc28gYWNjb3VudHMgZm9yIHRoZSBncmlkIGd1dHRlciBwYWRkaW5nLlxuICAuaGFzLWZlZWRiYWNrIC5mb3JtLWNvbnRyb2wtZmVlZGJhY2sge1xuICAgIHJpZ2h0OiAoJGdyaWQtZ3V0dGVyLXdpZHRoIC8gMik7XG4gIH1cblxuICAvLyBGb3JtIGdyb3VwIHNpemVzXG4gIC8vXG4gIC8vIFF1aWNrIHV0aWxpdHkgY2xhc3MgZm9yIGFwcGx5aW5nIGAuaW5wdXQtbGdgIGFuZCBgLmlucHV0LXNtYCBzdHlsZXMgdG8gdGhlXG4gIC8vIGlucHV0cyBhbmQgbGFiZWxzIHdpdGhpbiBhIGAuZm9ybS1ncm91cGAuXG4gIC5mb3JtLWdyb3VwLWxnIHtcbiAgICBAbWVkaWEgKG1pbi13aWR0aDogJHNjcmVlbi1zbS1taW4pIHtcbiAgICAgIC5jb250cm9sLWxhYmVsIHtcbiAgICAgICAgcGFkZGluZy10b3A6ICgoJHBhZGRpbmctbGFyZ2UtdmVydGljYWwgKiAkbGluZS1oZWlnaHQtbGFyZ2UpICsgMSk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIC5mb3JtLWdyb3VwLXNtIHtcbiAgICBAbWVkaWEgKG1pbi13aWR0aDogJHNjcmVlbi1zbS1taW4pIHtcbiAgICAgIC5jb250cm9sLWxhYmVsIHtcbiAgICAgICAgcGFkZGluZy10b3A6ICgkcGFkZGluZy1zbWFsbC12ZXJ0aWNhbCArIDEpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuIiwiLy8gRm9ybSB2YWxpZGF0aW9uIHN0YXRlc1xuLy9cbi8vIFVzZWQgaW4gZm9ybXMubGVzcyB0byBnZW5lcmF0ZSB0aGUgZm9ybSB2YWxpZGF0aW9uIENTUyBmb3Igd2FybmluZ3MsIGVycm9ycyxcbi8vIGFuZCBzdWNjZXNzZXMuXG5cbkBtaXhpbiBmb3JtLWNvbnRyb2wtdmFsaWRhdGlvbigkdGV4dC1jb2xvcjogIzU1NSwgJGJvcmRlci1jb2xvcjogI2NjYywgJGJhY2tncm91bmQtY29sb3I6ICNmNWY1ZjUpIHtcbiAgLy8gQ29sb3IgdGhlIGxhYmVsIGFuZCBoZWxwIHRleHRcbiAgLmhlbHAtYmxvY2ssXG4gIC5jb250cm9sLWxhYmVsLFxuICAucmFkaW8sXG4gIC5jaGVja2JveCxcbiAgLnJhZGlvLWlubGluZSxcbiAgLmNoZWNrYm94LWlubGluZSxcbiAgJi5yYWRpbyBsYWJlbCxcbiAgJi5jaGVja2JveCBsYWJlbCxcbiAgJi5yYWRpby1pbmxpbmUgbGFiZWwsXG4gICYuY2hlY2tib3gtaW5saW5lIGxhYmVsICB7XG4gICAgY29sb3I6ICR0ZXh0LWNvbG9yO1xuICB9XG4gIC8vIFNldCB0aGUgYm9yZGVyIGFuZCBib3ggc2hhZG93IG9uIHNwZWNpZmljIGlucHV0cyB0byBtYXRjaFxuICAuZm9ybS1jb250cm9sIHtcbiAgICBib3JkZXItY29sb3I6ICRib3JkZXItY29sb3I7XG4gICAgQGluY2x1ZGUgYm94LXNoYWRvdyhpbnNldCAwIDFweCAxcHggcmdiYSgwLDAsMCwuMDc1KSk7IC8vIFJlZGVjbGFyZSBzbyB0cmFuc2l0aW9ucyB3b3JrXG4gICAgJjpmb2N1cyB7XG4gICAgICBib3JkZXItY29sb3I6IGRhcmtlbigkYm9yZGVyLWNvbG9yLCAxMCUpO1xuICAgICAgJHNoYWRvdzogaW5zZXQgMCAxcHggMXB4IHJnYmEoMCwwLDAsLjA3NSksIDAgMCA2cHggbGlnaHRlbigkYm9yZGVyLWNvbG9yLCAyMCUpO1xuICAgICAgQGluY2x1ZGUgYm94LXNoYWRvdygkc2hhZG93KTtcbiAgICB9XG4gIH1cbiAgLy8gU2V0IHZhbGlkYXRpb24gc3RhdGVzIGFsc28gZm9yIGFkZG9uc1xuICAuaW5wdXQtZ3JvdXAtYWRkb24ge1xuICAgIGNvbG9yOiAkdGV4dC1jb2xvcjtcbiAgICBib3JkZXItY29sb3I6ICRib3JkZXItY29sb3I7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogJGJhY2tncm91bmQtY29sb3I7XG4gIH1cbiAgLy8gT3B0aW9uYWwgZmVlZGJhY2sgaWNvblxuICAuZm9ybS1jb250cm9sLWZlZWRiYWNrIHtcbiAgICBjb2xvcjogJHRleHQtY29sb3I7XG4gIH1cbn1cblxuXG4vLyBGb3JtIGNvbnRyb2wgZm9jdXMgc3RhdGVcbi8vXG4vLyBHZW5lcmF0ZSBhIGN1c3RvbWl6ZWQgZm9jdXMgc3RhdGUgYW5kIGZvciBhbnkgaW5wdXQgd2l0aCB0aGUgc3BlY2lmaWVkIGNvbG9yLFxuLy8gd2hpY2ggZGVmYXVsdHMgdG8gdGhlIGAkaW5wdXQtYm9yZGVyLWZvY3VzYCB2YXJpYWJsZS5cbi8vXG4vLyBXZSBoaWdobHkgZW5jb3VyYWdlIHlvdSB0byBub3QgY3VzdG9taXplIHRoZSBkZWZhdWx0IHZhbHVlLCBidXQgaW5zdGVhZCB1c2Vcbi8vIHRoaXMgdG8gdHdlYWsgY29sb3JzIG9uIGFuIGFzLW5lZWRlZCBiYXNpcy4gVGhpcyBhZXN0aGV0aWMgY2hhbmdlIGlzIGJhc2VkIG9uXG4vLyBXZWJLaXQncyBkZWZhdWx0IHN0eWxlcywgYnV0IGFwcGxpY2FibGUgdG8gYSB3aWRlciByYW5nZSBvZiBicm93c2Vycy4gSXRzXG4vLyB1c2FiaWxpdHkgYW5kIGFjY2Vzc2liaWxpdHkgc2hvdWxkIGJlIHRha2VuIGludG8gYWNjb3VudCB3aXRoIGFueSBjaGFuZ2UuXG4vL1xuLy8gRXhhbXBsZSB1c2FnZTogY2hhbmdlIHRoZSBkZWZhdWx0IGJsdWUgYm9yZGVyIGFuZCBzaGFkb3cgdG8gd2hpdGUgZm9yIGJldHRlclxuLy8gY29udHJhc3QgYWdhaW5zdCBhIGRhcmsgZ3JheSBiYWNrZ3JvdW5kLlxuQG1peGluIGZvcm0tY29udHJvbC1mb2N1cygkY29sb3I6ICRpbnB1dC1ib3JkZXItZm9jdXMpIHtcbiAgJGNvbG9yLXJnYmE6IHJnYmEocmVkKCRjb2xvciksIGdyZWVuKCRjb2xvciksIGJsdWUoJGNvbG9yKSwgLjYpO1xuICAmOmZvY3VzIHtcbiAgICBib3JkZXItY29sb3I6ICRjb2xvcjtcbiAgICBvdXRsaW5lOiAwO1xuICAgIEBpbmNsdWRlIGJveC1zaGFkb3coaW5zZXQgMCAxcHggMXB4IHJnYmEoMCwwLDAsLjA3NSksIDAgMCA4cHggJGNvbG9yLXJnYmEpO1xuICB9XG59XG5cbi8vIEZvcm0gY29udHJvbCBzaXppbmdcbi8vXG4vLyBSZWxhdGl2ZSB0ZXh0IHNpemUsIHBhZGRpbmcsIGFuZCBib3JkZXItcmFkaWkgY2hhbmdlcyBmb3IgZm9ybSBjb250cm9scy4gRm9yXG4vLyBob3Jpem9udGFsIHNpemluZywgd3JhcCBjb250cm9scyBpbiB0aGUgcHJlZGVmaW5lZCBncmlkIGNsYXNzZXMuIGA8c2VsZWN0PmBcbi8vIGVsZW1lbnQgZ2V0cyBzcGVjaWFsIGxvdmUgYmVjYXVzZSBpdCdzIHNwZWNpYWwsIGFuZCB0aGF0J3MgYSBmYWN0IVxuLy8gW2NvbnZlcnRlcl0gJHBhcmVudCBoYWNrXG5AbWl4aW4gaW5wdXQtc2l6ZSgkcGFyZW50LCAkaW5wdXQtaGVpZ2h0LCAkcGFkZGluZy12ZXJ0aWNhbCwgJHBhZGRpbmctaG9yaXpvbnRhbCwgJGZvbnQtc2l6ZSwgJGxpbmUtaGVpZ2h0LCAkYm9yZGVyLXJhZGl1cykge1xuICAjeyRwYXJlbnR9IHtcbiAgICBoZWlnaHQ6ICRpbnB1dC1oZWlnaHQ7XG4gICAgcGFkZGluZzogJHBhZGRpbmctdmVydGljYWwgJHBhZGRpbmctaG9yaXpvbnRhbDtcbiAgICBmb250LXNpemU6ICRmb250LXNpemU7XG4gICAgbGluZS1oZWlnaHQ6ICRsaW5lLWhlaWdodDtcbiAgICBib3JkZXItcmFkaXVzOiAkYm9yZGVyLXJhZGl1cztcbiAgfVxuXG4gIHNlbGVjdCN7JHBhcmVudH0ge1xuICAgIGhlaWdodDogJGlucHV0LWhlaWdodDtcbiAgICBsaW5lLWhlaWdodDogJGlucHV0LWhlaWdodDtcbiAgfVxuXG4gIHRleHRhcmVhI3skcGFyZW50fSxcbiAgc2VsZWN0W211bHRpcGxlXSN7JHBhcmVudH0ge1xuICAgIGhlaWdodDogYXV0bztcbiAgfVxufVxuIiwiLy9cbi8vIEJ1dHRvbnNcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cblxuLy8gQmFzZSBzdHlsZXNcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi5idG4ge1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIG1hcmdpbi1ib3R0b206IDA7IC8vIEZvciBpbnB1dC5idG5cbiAgZm9udC13ZWlnaHQ6ICRidG4tZm9udC13ZWlnaHQ7XG4gIGZvbnQtZmFtaWx5OiAkZm9udC1mYW1pbHktZWluYTtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xuICB0b3VjaC1hY3Rpb246IG1hbmlwdWxhdGlvbjtcbiAgY3Vyc29yOiBwb2ludGVyO1xuICBiYWNrZ3JvdW5kLWltYWdlOiBub25lOyAvLyBSZXNldCB1bnVzdWFsIEZpcmVmb3gtb24tQW5kcm9pZCBkZWZhdWx0IHN0eWxlOyBzZWUgaHR0cHM6Ly9naXRodWIuY29tL25lY29sYXMvbm9ybWFsaXplLmNzcy9pc3N1ZXMvMjE0XG4gIGJvcmRlcjogMXB4IHNvbGlkIHRyYW5zcGFyZW50O1xuICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICBAaW5jbHVkZSBidXR0b24tc2l6ZSgkcGFkZGluZy1iYXNlLXZlcnRpY2FsLCAkcGFkZGluZy1iYXNlLWhvcml6b250YWwsICRmb250LXNpemUtYmFzZSwgJGxpbmUtaGVpZ2h0LWJhc2UsICRib3JkZXItcmFkaXVzLWJhc2UpO1xuICBAaW5jbHVkZSB1c2VyLXNlbGVjdChub25lKTtcblxuICAmLFxuICAmOmFjdGl2ZSxcbiAgJi5hY3RpdmUge1xuICAgICY6Zm9jdXMsXG4gICAgJi5mb2N1cyB7XG4gICAgICBAaW5jbHVkZSB0YWItZm9jdXM7XG4gICAgfVxuICB9XG5cbiAgJjpob3ZlcixcbiAgJjpmb2N1cyxcbiAgJi5mb2N1cyB7XG4gICAgY29sb3I6ICRidG4tZGVmYXVsdC1jb2xvcjtcbiAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG4gIH1cblxuICAmOmFjdGl2ZSxcbiAgJi5hY3RpdmUge1xuICAgIG91dGxpbmU6IDA7XG4gICAgYmFja2dyb3VuZC1pbWFnZTogbm9uZTtcbiAgICBAaW5jbHVkZSBib3gtc2hhZG93KGluc2V0IDAgM3B4IDVweCByZ2JhKDAsMCwwLC4xMjUpKTtcbiAgfVxuXG4gICYuZGlzYWJsZWQsXG4gICZbZGlzYWJsZWRdLFxuICBmaWVsZHNldFtkaXNhYmxlZF0gJiB7XG4gICAgY3Vyc29yOiAkY3Vyc29yLWRpc2FibGVkO1xuICAgIHBvaW50ZXItZXZlbnRzOiBub25lOyAvLyBGdXR1cmUtcHJvb2YgZGlzYWJsaW5nIG9mIGNsaWNrc1xuICAgIEBpbmNsdWRlIG9wYWNpdHkoLjY1KTtcbiAgICBAaW5jbHVkZSBib3gtc2hhZG93KG5vbmUpO1xuICB9XG59XG5cblxuLy8gQWx0ZXJuYXRlIGJ1dHRvbnNcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi5idG4tZGVmYXVsdCB7XG4gIEBpbmNsdWRlIGJ1dHRvbi12YXJpYW50KCRidG4tZGVmYXVsdC1jb2xvciwgJGJ0bi1kZWZhdWx0LWJnLCAkYnRuLWRlZmF1bHQtYm9yZGVyKTtcbn1cbi5idG4tcHJpbWFyeSB7XG4gIEBpbmNsdWRlIGJ1dHRvbi12YXJpYW50KCRidG4tcHJpbWFyeS1jb2xvciwgJGJ0bi1wcmltYXJ5LWJnLCAkYnRuLXByaW1hcnktYm9yZGVyKTtcbn1cbi8vIFN1Y2Nlc3MgYXBwZWFycyBhcyBncmVlblxuLmJ0bi1zdWNjZXNzIHtcbiAgQGluY2x1ZGUgYnV0dG9uLXZhcmlhbnQoJGJ0bi1zdWNjZXNzLWNvbG9yLCAkYnRuLXN1Y2Nlc3MtYmcsICRidG4tc3VjY2Vzcy1ib3JkZXIpO1xufVxuLy8gSW5mbyBhcHBlYXJzIGFzIGJsdWUtZ3JlZW5cbi5idG4taW5mbyB7XG4gIEBpbmNsdWRlIGJ1dHRvbi12YXJpYW50KCRidG4taW5mby1jb2xvciwgJGJ0bi1pbmZvLWJnLCAkYnRuLWluZm8tYm9yZGVyKTtcbn1cbi8vIFdhcm5pbmcgYXBwZWFycyBhcyBvcmFuZ2Vcbi5idG4td2FybmluZyB7XG4gIEBpbmNsdWRlIGJ1dHRvbi12YXJpYW50KCRidG4td2FybmluZy1jb2xvciwgJGJ0bi13YXJuaW5nLWJnLCAkYnRuLXdhcm5pbmctYm9yZGVyKTtcbn1cbi8vIERhbmdlciBhbmQgZXJyb3IgYXBwZWFyIGFzIHJlZFxuLmJ0bi1kYW5nZXIge1xuICBAaW5jbHVkZSBidXR0b24tdmFyaWFudCgkYnRuLWRhbmdlci1jb2xvciwgJGJ0bi1kYW5nZXItYmcsICRidG4tZGFuZ2VyLWJvcmRlcik7XG59XG5cblxuLy8gTGluayBidXR0b25zXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi8vIE1ha2UgYSBidXR0b24gbG9vayBhbmQgYmVoYXZlIGxpa2UgYSBsaW5rXG4uYnRuLWxpbmsge1xuICBjb2xvcjogJGxpbmstY29sb3I7XG4gIGZvbnQtd2VpZ2h0OiBub3JtYWw7XG4gIGJvcmRlci1yYWRpdXM6IDA7XG5cbiAgJixcbiAgJjphY3RpdmUsXG4gICYuYWN0aXZlLFxuICAmW2Rpc2FibGVkXSxcbiAgZmllbGRzZXRbZGlzYWJsZWRdICYge1xuICAgIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xuICAgIEBpbmNsdWRlIGJveC1zaGFkb3cobm9uZSk7XG4gIH1cbiAgJixcbiAgJjpob3ZlcixcbiAgJjpmb2N1cyxcbiAgJjphY3RpdmUge1xuICAgIGJvcmRlci1jb2xvcjogdHJhbnNwYXJlbnQ7XG4gIH1cbiAgJjpob3ZlcixcbiAgJjpmb2N1cyB7XG4gICAgY29sb3I6ICRsaW5rLWhvdmVyLWNvbG9yO1xuICAgIHRleHQtZGVjb3JhdGlvbjogJGxpbmstaG92ZXItZGVjb3JhdGlvbjtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcbiAgfVxuICAmW2Rpc2FibGVkXSxcbiAgZmllbGRzZXRbZGlzYWJsZWRdICYge1xuICAgICY6aG92ZXIsXG4gICAgJjpmb2N1cyB7XG4gICAgICBjb2xvcjogJGJ0bi1saW5rLWRpc2FibGVkLWNvbG9yO1xuICAgICAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xuICAgIH1cbiAgfVxufVxuXG5cbi8vIEJ1dHRvbiBTaXplc1xuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLmJ0bi1sZyB7XG4gIC8vIGxpbmUtaGVpZ2h0OiBlbnN1cmUgZXZlbi1udW1iZXJlZCBoZWlnaHQgb2YgYnV0dG9uIG5leHQgdG8gbGFyZ2UgaW5wdXRcbiAgQGluY2x1ZGUgYnV0dG9uLXNpemUoJHBhZGRpbmctbGFyZ2UtdmVydGljYWwsICRwYWRkaW5nLWxhcmdlLWhvcml6b250YWwsICRmb250LXNpemUtbGFyZ2UsICRsaW5lLWhlaWdodC1sYXJnZSwgJGJvcmRlci1yYWRpdXMtbGFyZ2UpO1xufVxuLmJ0bi1zbSB7XG4gIC8vIGxpbmUtaGVpZ2h0OiBlbnN1cmUgcHJvcGVyIGhlaWdodCBvZiBidXR0b24gbmV4dCB0byBzbWFsbCBpbnB1dFxuICBAaW5jbHVkZSBidXR0b24tc2l6ZSgkcGFkZGluZy1zbWFsbC12ZXJ0aWNhbCwgJHBhZGRpbmctc21hbGwtaG9yaXpvbnRhbCwgJGZvbnQtc2l6ZS1zbWFsbCwgJGxpbmUtaGVpZ2h0LXNtYWxsLCAkYm9yZGVyLXJhZGl1cy1zbWFsbCk7XG59XG4uYnRuLXhzIHtcbiAgQGluY2x1ZGUgYnV0dG9uLXNpemUoJHBhZGRpbmcteHMtdmVydGljYWwsICRwYWRkaW5nLXhzLWhvcml6b250YWwsICRmb250LXNpemUtc21hbGwsICRsaW5lLWhlaWdodC1zbWFsbCwgJGJvcmRlci1yYWRpdXMtc21hbGwpO1xufVxuXG5cbi8vIEJsb2NrIGJ1dHRvblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLmJ0bi1ibG9jayB7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICB3aWR0aDogMTAwJTtcbn1cblxuLy8gVmVydGljYWxseSBzcGFjZSBvdXQgbXVsdGlwbGUgYmxvY2sgYnV0dG9uc1xuLmJ0bi1ibG9jayArIC5idG4tYmxvY2sge1xuICBtYXJnaW4tdG9wOiA1cHg7XG59XG5cbi8vIFNwZWNpZmljaXR5IG92ZXJyaWRlc1xuaW5wdXRbdHlwZT1cInN1Ym1pdFwiXSxcbmlucHV0W3R5cGU9XCJyZXNldFwiXSxcbmlucHV0W3R5cGU9XCJidXR0b25cIl0ge1xuICAmLmJ0bi1ibG9jayB7XG4gICAgd2lkdGg6IDEwMCU7XG4gIH1cbn1cbiIsIi8vIEJ1dHRvbiB2YXJpYW50c1xuLy9cbi8vIEVhc2lseSBwdW1wIG91dCBkZWZhdWx0IHN0eWxlcywgYXMgd2VsbCBhcyA6aG92ZXIsIDpmb2N1cywgOmFjdGl2ZSxcbi8vIGFuZCBkaXNhYmxlZCBvcHRpb25zIGZvciBhbGwgYnV0dG9uc1xuXG5AbWl4aW4gYnV0dG9uLXZhcmlhbnQoJGNvbG9yLCAkYmFja2dyb3VuZCwgJGJvcmRlcikge1xuICBjb2xvcjogJGNvbG9yO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAkYmFja2dyb3VuZDtcbiAgYm9yZGVyLWNvbG9yOiAkYm9yZGVyO1xuXG4gICY6aG92ZXIsXG4gICY6Zm9jdXMsXG4gICYuZm9jdXMsXG4gICY6YWN0aXZlLFxuICAmLmFjdGl2ZSxcbiAgLm9wZW4gPiAmLmRyb3Bkb3duLXRvZ2dsZSB7XG4gICAgY29sb3I6ICRjb2xvcjtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiBkYXJrZW4oJGJhY2tncm91bmQsIDEwJSk7XG4gICAgICAgIGJvcmRlci1jb2xvcjogZGFya2VuKCRib3JkZXIsIDEyJSk7XG4gIH1cbiAgJjphY3RpdmUsXG4gICYuYWN0aXZlLFxuICAub3BlbiA+ICYuZHJvcGRvd24tdG9nZ2xlIHtcbiAgICBiYWNrZ3JvdW5kLWltYWdlOiBub25lO1xuICB9XG4gICYuZGlzYWJsZWQsXG4gICZbZGlzYWJsZWRdLFxuICBmaWVsZHNldFtkaXNhYmxlZF0gJiB7XG4gICAgJixcbiAgICAmOmhvdmVyLFxuICAgICY6Zm9jdXMsXG4gICAgJi5mb2N1cyxcbiAgICAmOmFjdGl2ZSxcbiAgICAmLmFjdGl2ZSB7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkYmFja2dyb3VuZDtcbiAgICAgICAgICBib3JkZXItY29sb3I6ICRib3JkZXI7XG4gICAgfVxuICB9XG5cbiAgLmJhZGdlIHtcbiAgICBjb2xvcjogJGJhY2tncm91bmQ7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogJGNvbG9yO1xuICB9XG59XG5cbi8vIEJ1dHRvbiBzaXplc1xuQG1peGluIGJ1dHRvbi1zaXplKCRwYWRkaW5nLXZlcnRpY2FsLCAkcGFkZGluZy1ob3Jpem9udGFsLCAkZm9udC1zaXplLCAkbGluZS1oZWlnaHQsICRib3JkZXItcmFkaXVzKSB7XG4gIHBhZGRpbmc6ICRwYWRkaW5nLXZlcnRpY2FsICRwYWRkaW5nLWhvcml6b250YWw7XG4gIGZvbnQtc2l6ZTogJGZvbnQtc2l6ZTtcbiAgbGluZS1oZWlnaHQ6ICRsaW5lLWhlaWdodDtcbiAgYm9yZGVyLXJhZGl1czogJGJvcmRlci1yYWRpdXM7XG59XG4iLCIvLyBPcGFjaXR5XG5cbkBtaXhpbiBvcGFjaXR5KCRvcGFjaXR5KSB7XG4gIG9wYWNpdHk6ICRvcGFjaXR5O1xuICAvLyBJRTggZmlsdGVyXG4gICRvcGFjaXR5LWllOiAoJG9wYWNpdHkgKiAxMDApO1xuICBmaWx0ZXI6IGFscGhhKG9wYWNpdHk9JG9wYWNpdHktaWUpO1xufVxuIiwiLy9cbi8vIENvbXBvbmVudCBhbmltYXRpb25zXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4vLyBIZWFkcyB1cCFcbi8vXG4vLyBXZSBkb24ndCB1c2UgdGhlIGAub3BhY2l0eSgpYCBtaXhpbiBoZXJlIHNpbmNlIGl0IGNhdXNlcyBhIGJ1ZyB3aXRoIHRleHRcbi8vIGZpZWxkcyBpbiBJRTctOC4gU291cmNlOiBodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvcHVsbC8zNTUyLlxuXG4uZmFkZSB7XG4gIG9wYWNpdHk6IDA7XG4gIEBpbmNsdWRlIHRyYW5zaXRpb24ob3BhY2l0eSAuMTVzIGxpbmVhcik7XG4gICYuaW4ge1xuICAgIG9wYWNpdHk6IDE7XG4gIH1cbn1cblxuLmNvbGxhcHNlIHtcbiAgZGlzcGxheTogbm9uZTtcblxuICAmLmluICAgICAgeyBkaXNwbGF5OiBibG9jazsgfVxuICAvLyBbY29udmVydGVyXSBleHRyYWN0ZWQgdHImLmluIHRvIHRyLmNvbGxhcHNlLmluXG4gIC8vIFtjb252ZXJ0ZXJdIGV4dHJhY3RlZCB0Ym9keSYuaW4gdG8gdGJvZHkuY29sbGFwc2UuaW5cbn1cblxudHIuY29sbGFwc2UuaW4gICAgeyBkaXNwbGF5OiB0YWJsZS1yb3c7IH1cblxudGJvZHkuY29sbGFwc2UuaW4geyBkaXNwbGF5OiB0YWJsZS1yb3ctZ3JvdXA7IH1cblxuLmNvbGxhcHNpbmcge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIGhlaWdodDogMDtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgQGluY2x1ZGUgdHJhbnNpdGlvbi1wcm9wZXJ0eShoZWlnaHQsIHZpc2liaWxpdHkpO1xuICBAaW5jbHVkZSB0cmFuc2l0aW9uLWR1cmF0aW9uKC4zNXMpO1xuICBAaW5jbHVkZSB0cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbihlYXNlKTtcbn1cbiIsIi8vXG4vLyBEcm9wZG93biBtZW51c1xuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuXG4vLyBEcm9wZG93biBhcnJvdy9jYXJldFxuLmNhcmV0IHtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICB3aWR0aDogMDtcbiAgaGVpZ2h0OiAwO1xuICBtYXJnaW4tbGVmdDogMnB4O1xuICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xuICBib3JkZXItdG9wOiAgICRjYXJldC13aWR0aC1iYXNlIGRhc2hlZDtcbiAgYm9yZGVyLXJpZ2h0OiAkY2FyZXQtd2lkdGgtYmFzZSBzb2xpZCB0cmFuc3BhcmVudDtcbiAgYm9yZGVyLWxlZnQ6ICAkY2FyZXQtd2lkdGgtYmFzZSBzb2xpZCB0cmFuc3BhcmVudDtcbn1cblxuLy8gVGhlIGRyb3Bkb3duIHdyYXBwZXIgKGRpdilcbi5kcm9wdXAsXG4uZHJvcGRvd24ge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG59XG5cbi8vIFByZXZlbnQgdGhlIGZvY3VzIG9uIHRoZSBkcm9wZG93biB0b2dnbGUgd2hlbiBjbG9zaW5nIGRyb3Bkb3duc1xuLmRyb3Bkb3duLXRvZ2dsZTpmb2N1cyB7XG4gIG91dGxpbmU6IDA7XG59XG5cbi8vIFRoZSBkcm9wZG93biBtZW51ICh1bClcbi5kcm9wZG93bi1tZW51IHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB0b3A6IDEwMCU7XG4gIGxlZnQ6IDA7XG4gIHotaW5kZXg6ICR6aW5kZXgtZHJvcGRvd247XG4gIGRpc3BsYXk6IG5vbmU7IC8vIG5vbmUgYnkgZGVmYXVsdCwgYnV0IGJsb2NrIG9uIFwib3BlblwiIG9mIHRoZSBtZW51XG4gIGZsb2F0OiBsZWZ0O1xuICBtaW4td2lkdGg6IDE2MHB4O1xuICBwYWRkaW5nOiA1cHggMDtcbiAgbWFyZ2luOiAycHggMCAwOyAvLyBvdmVycmlkZSBkZWZhdWx0IHVsXG4gIGxpc3Qtc3R5bGU6IG5vbmU7XG4gIGZvbnQtc2l6ZTogJGZvbnQtc2l6ZS1iYXNlO1xuICB0ZXh0LWFsaWduOiBsZWZ0OyAvLyBFbnN1cmVzIHByb3BlciBhbGlnbm1lbnQgaWYgcGFyZW50IGhhcyBpdCBjaGFuZ2VkIChlLmcuLCBtb2RhbCBmb290ZXIpXG4gIGJhY2tncm91bmQtY29sb3I6ICRkcm9wZG93bi1iZztcbiAgYm9yZGVyOiAxcHggc29saWQgJGRyb3Bkb3duLWZhbGxiYWNrLWJvcmRlcjsgLy8gSUU4IGZhbGxiYWNrXG4gIGJvcmRlcjogMXB4IHNvbGlkICRkcm9wZG93bi1ib3JkZXI7XG4gIGJvcmRlci1yYWRpdXM6ICRib3JkZXItcmFkaXVzLWJhc2U7XG4gIEBpbmNsdWRlIGJveC1zaGFkb3coMCA2cHggMTJweCByZ2JhKDAsMCwwLC4xNzUpKTtcbiAgYmFja2dyb3VuZC1jbGlwOiBwYWRkaW5nLWJveDtcblxuICAvLyBBbGlnbnMgdGhlIGRyb3Bkb3duIG1lbnUgdG8gcmlnaHRcbiAgLy9cbiAgLy8gRGVwcmVjYXRlZCBhcyBvZiAzLjEuMCBpbiBmYXZvciBvZiBgLmRyb3Bkb3duLW1lbnUtW2Rpcl1gXG4gICYucHVsbC1yaWdodCB7XG4gICAgcmlnaHQ6IDA7XG4gICAgbGVmdDogYXV0bztcbiAgfVxuXG4gIC8vIERpdmlkZXJzIChiYXNpY2FsbHkgYW4gaHIpIHdpdGhpbiB0aGUgZHJvcGRvd25cbiAgLmRpdmlkZXIge1xuICAgIEBpbmNsdWRlIG5hdi1kaXZpZGVyKCRkcm9wZG93bi1kaXZpZGVyLWJnKTtcbiAgfVxuXG4gIC8vIExpbmtzIHdpdGhpbiB0aGUgZHJvcGRvd24gbWVudVxuICA+IGxpID4gYSB7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgcGFkZGluZzogM3B4IDIwcHg7XG4gICAgY2xlYXI6IGJvdGg7XG4gICAgZm9udC13ZWlnaHQ6IG5vcm1hbDtcbiAgICBsaW5lLWhlaWdodDogJGxpbmUtaGVpZ2h0LWJhc2U7XG4gICAgY29sb3I6ICRkcm9wZG93bi1saW5rLWNvbG9yO1xuICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7IC8vIHByZXZlbnQgbGlua3MgZnJvbSByYW5kb21seSBicmVha2luZyBvbnRvIG5ldyBsaW5lc1xuICB9XG59XG5cbi8vIEhvdmVyL0ZvY3VzIHN0YXRlXG4uZHJvcGRvd24tbWVudSA+IGxpID4gYSB7XG4gICY6aG92ZXIsXG4gICY6Zm9jdXMge1xuICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbiAgICBjb2xvcjogJGRyb3Bkb3duLWxpbmstaG92ZXItY29sb3I7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogJGRyb3Bkb3duLWxpbmstaG92ZXItYmc7XG4gIH1cbn1cblxuLy8gQWN0aXZlIHN0YXRlXG4uZHJvcGRvd24tbWVudSA+IC5hY3RpdmUgPiBhIHtcbiAgJixcbiAgJjpob3ZlcixcbiAgJjpmb2N1cyB7XG4gICAgY29sb3I6ICRkcm9wZG93bi1saW5rLWFjdGl2ZS1jb2xvcjtcbiAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG4gICAgb3V0bGluZTogMDtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkZHJvcGRvd24tbGluay1hY3RpdmUtYmc7XG4gIH1cbn1cblxuLy8gRGlzYWJsZWQgc3RhdGVcbi8vXG4vLyBHcmF5IG91dCB0ZXh0IGFuZCBlbnN1cmUgdGhlIGhvdmVyL2ZvY3VzIHN0YXRlIHJlbWFpbnMgZ3JheVxuXG4uZHJvcGRvd24tbWVudSA+IC5kaXNhYmxlZCA+IGEge1xuICAmLFxuICAmOmhvdmVyLFxuICAmOmZvY3VzIHtcbiAgICBjb2xvcjogJGRyb3Bkb3duLWxpbmstZGlzYWJsZWQtY29sb3I7XG4gIH1cblxuICAvLyBOdWtlIGhvdmVyL2ZvY3VzIGVmZmVjdHNcbiAgJjpob3ZlcixcbiAgJjpmb2N1cyB7XG4gICAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xuICAgIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xuICAgIGJhY2tncm91bmQtaW1hZ2U6IG5vbmU7IC8vIFJlbW92ZSBDU1MgZ3JhZGllbnRcbiAgICBAaW5jbHVkZSByZXNldC1maWx0ZXI7XG4gICAgY3Vyc29yOiAkY3Vyc29yLWRpc2FibGVkO1xuICB9XG59XG5cbi8vIE9wZW4gc3RhdGUgZm9yIHRoZSBkcm9wZG93blxuLm9wZW4ge1xuICAvLyBTaG93IHRoZSBtZW51XG4gID4gLmRyb3Bkb3duLW1lbnUge1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICB9XG5cbiAgLy8gUmVtb3ZlIHRoZSBvdXRsaW5lIHdoZW4gOmZvY3VzIGlzIHRyaWdnZXJlZFxuICA+IGEge1xuICAgIG91dGxpbmU6IDA7XG4gIH1cbn1cblxuLy8gTWVudSBwb3NpdGlvbmluZ1xuLy9cbi8vIEFkZCBleHRyYSBjbGFzcyB0byBgLmRyb3Bkb3duLW1lbnVgIHRvIGZsaXAgdGhlIGFsaWdubWVudCBvZiB0aGUgZHJvcGRvd25cbi8vIG1lbnUgd2l0aCB0aGUgcGFyZW50LlxuLmRyb3Bkb3duLW1lbnUtcmlnaHQge1xuICBsZWZ0OiBhdXRvOyAvLyBSZXNldCB0aGUgZGVmYXVsdCBmcm9tIGAuZHJvcGRvd24tbWVudWBcbiAgcmlnaHQ6IDA7XG59XG4vLyBXaXRoIHYzLCB3ZSBlbmFibGVkIGF1dG8tZmxpcHBpbmcgaWYgeW91IGhhdmUgYSBkcm9wZG93biB3aXRoaW4gYSByaWdodFxuLy8gYWxpZ25lZCBuYXYgY29tcG9uZW50LiBUbyBlbmFibGUgdGhlIHVuZG9pbmcgb2YgdGhhdCwgd2UgcHJvdmlkZSBhbiBvdmVycmlkZVxuLy8gdG8gcmVzdG9yZSB0aGUgZGVmYXVsdCBkcm9wZG93biBtZW51IGFsaWdubWVudC5cbi8vXG4vLyBUaGlzIGlzIG9ubHkgZm9yIGxlZnQtYWxpZ25pbmcgYSBkcm9wZG93biBtZW51IHdpdGhpbiBhIGAubmF2YmFyLXJpZ2h0YCBvclxuLy8gYC5wdWxsLXJpZ2h0YCBuYXYgY29tcG9uZW50LlxuLmRyb3Bkb3duLW1lbnUtbGVmdCB7XG4gIGxlZnQ6IDA7XG4gIHJpZ2h0OiBhdXRvO1xufVxuLy9jZW50ZXJlZCBkcm9wZG93biBtZW51XG4uZHJvcGRvd24tbWVudS1jZW50ZXIge1xuICBsZWZ0OiA1MCU7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgtNTAlKTtcbn1cblxuLy8gRHJvcGRvd24gc2VjdGlvbiBoZWFkZXJzXG4uZHJvcGRvd24taGVhZGVyIHtcbiAgZGlzcGxheTogYmxvY2s7XG4gIHBhZGRpbmc6IDNweCAyMHB4O1xuICBmb250LXNpemU6ICRmb250LXNpemUtc21hbGw7XG4gIGxpbmUtaGVpZ2h0OiAkbGluZS1oZWlnaHQtYmFzZTtcbiAgY29sb3I6ICRkcm9wZG93bi1oZWFkZXItY29sb3I7XG4gIHdoaXRlLXNwYWNlOiBub3dyYXA7IC8vIGFzIHdpdGggPiBsaSA+IGFcbn1cblxuLy8gQmFja2Ryb3AgdG8gY2F0Y2ggYm9keSBjbGlja3Mgb24gbW9iaWxlLCBldGMuXG4uZHJvcGRvd24tYmFja2Ryb3Age1xuICBwb3NpdGlvbjogZml4ZWQ7XG4gIGxlZnQ6IDA7XG4gIHJpZ2h0OiAwO1xuICBib3R0b206IDA7XG4gIHRvcDogMDtcbiAgei1pbmRleDogKCR6aW5kZXgtZHJvcGRvd24gLSAxMCk7XG59XG5cbi8vIFJpZ2h0IGFsaWduZWQgZHJvcGRvd25zXG4ucHVsbC1yaWdodCA+IC5kcm9wZG93bi1tZW51IHtcbiAgcmlnaHQ6IDA7XG4gIGxlZnQ6IGF1dG87XG59XG5cbi8vIEFsbG93IGZvciBkcm9wZG93bnMgdG8gZ28gYm90dG9tIHVwIChha2EsIGRyb3B1cC1tZW51KVxuLy9cbi8vIEp1c3QgYWRkIC5kcm9wdXAgYWZ0ZXIgdGhlIHN0YW5kYXJkIC5kcm9wZG93biBjbGFzcyBhbmQgeW91J3JlIHNldCwgYnJvLlxuLy8gVE9ETzogYWJzdHJhY3QgdGhpcyBzbyB0aGF0IHRoZSBuYXZiYXIgZml4ZWQgc3R5bGVzIGFyZSBub3QgcGxhY2VkIGhlcmU/XG5cbi5kcm9wdXAsXG4ubmF2YmFyLWZpeGVkLWJvdHRvbSAuZHJvcGRvd24ge1xuICAvLyBSZXZlcnNlIHRoZSBjYXJldFxuICAuY2FyZXQge1xuICAgIGJvcmRlci10b3A6IDA7XG4gICAgYm9yZGVyLWJvdHRvbTogJGNhcmV0LXdpZHRoLWJhc2Ugc29saWQ7XG4gICAgY29udGVudDogXCJcIjtcbiAgfVxuICAvLyBEaWZmZXJlbnQgcG9zaXRpb25pbmcgZm9yIGJvdHRvbSB1cCBtZW51XG4gIC5kcm9wZG93bi1tZW51IHtcbiAgICB0b3A6IGF1dG87XG4gICAgYm90dG9tOiAxMDAlO1xuICAgIG1hcmdpbi1ib3R0b206IDJweDtcbiAgfVxufVxuXG5cbi8vIENvbXBvbmVudCBhbGlnbm1lbnRcbi8vXG4vLyBSZWl0ZXJhdGUgcGVyIG5hdmJhci5sZXNzIGFuZCB0aGUgbW9kaWZpZWQgY29tcG9uZW50IGFsaWdubWVudCB0aGVyZS5cblxuQG1lZGlhIChtaW4td2lkdGg6ICRncmlkLWZsb2F0LWJyZWFrcG9pbnQpIHtcbiAgLm5hdmJhci1yaWdodCB7XG4gICAgLmRyb3Bkb3duLW1lbnUge1xuICAgICAgcmlnaHQ6IDA7IGxlZnQ6IGF1dG87XG4gICAgfVxuICAgIC8vIE5lY2Vzc2FyeSBmb3Igb3ZlcnJpZGVzIG9mIHRoZSBkZWZhdWx0IHJpZ2h0IGFsaWduZWQgbWVudS5cbiAgICAvLyBXaWxsIHJlbW92ZSBjb21lIHY0IGluIGFsbCBsaWtlbGlob29kLlxuICAgIC5kcm9wZG93bi1tZW51LWxlZnQge1xuICAgICAgbGVmdDogMDsgcmlnaHQ6IGF1dG87XG4gICAgfVxuICB9XG59XG4iLCIvLyBIb3Jpem9udGFsIGRpdmlkZXJzXG4vL1xuLy8gRGl2aWRlcnMgKGJhc2ljYWxseSBhbiBocikgd2l0aGluIGRyb3Bkb3ducyBhbmQgbmF2IGxpc3RzXG5cbkBtaXhpbiBuYXYtZGl2aWRlcigkY29sb3I6ICNlNWU1ZTUpIHtcbiAgaGVpZ2h0OiAxcHg7XG4gIG1hcmdpbjogKCgkbGluZS1oZWlnaHQtY29tcHV0ZWQgLyAyKSAtIDEpIDA7XG4gIG92ZXJmbG93OiBoaWRkZW47XG4gIGJhY2tncm91bmQtY29sb3I6ICRjb2xvcjtcbn1cbiIsIi8vIFJlc2V0IGZpbHRlcnMgZm9yIElFXG4vL1xuLy8gV2hlbiB5b3UgbmVlZCB0byByZW1vdmUgYSBncmFkaWVudCBiYWNrZ3JvdW5kLCBkbyBub3QgZm9yZ2V0IHRvIHVzZSB0aGlzIHRvIHJlc2V0XG4vLyB0aGUgSUUgZmlsdGVyIGZvciBJRTkgYW5kIGJlbG93LlxuXG5AbWl4aW4gcmVzZXQtZmlsdGVyKCkge1xuICBmaWx0ZXI6IHByb2dpZDpEWEltYWdlVHJhbnNmb3JtLk1pY3Jvc29mdC5ncmFkaWVudChlbmFibGVkID0gZmFsc2UpO1xufVxuIiwiLy9cbi8vIEJ1dHRvbiBncm91cHNcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi8vIE1ha2UgdGhlIGRpdiBiZWhhdmUgbGlrZSBhIGJ1dHRvblxuLmJ0bi1ncm91cCxcbi5idG4tZ3JvdXAtdmVydGljYWwge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTsgLy8gbWF0Y2ggLmJ0biBhbGlnbm1lbnQgZ2l2ZW4gZm9udC1zaXplIGhhY2sgYWJvdmVcbiAgPiAuYnRuIHtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgZmxvYXQ6IGxlZnQ7XG4gICAgLy8gQnJpbmcgdGhlIFwiYWN0aXZlXCIgYnV0dG9uIHRvIHRoZSBmcm9udFxuICAgICY6aG92ZXIsXG4gICAgJjpmb2N1cyxcbiAgICAmOmFjdGl2ZSxcbiAgICAmLmFjdGl2ZSB7XG4gICAgICB6LWluZGV4OiAyO1xuICAgIH1cbiAgfVxufVxuXG4vLyBQcmV2ZW50IGRvdWJsZSBib3JkZXJzIHdoZW4gYnV0dG9ucyBhcmUgbmV4dCB0byBlYWNoIG90aGVyXG4uYnRuLWdyb3VwIHtcbiAgLmJ0biArIC5idG4sXG4gIC5idG4gKyAuYnRuLWdyb3VwLFxuICAuYnRuLWdyb3VwICsgLmJ0bixcbiAgLmJ0bi1ncm91cCArIC5idG4tZ3JvdXAge1xuICAgIG1hcmdpbi1sZWZ0OiAtMXB4O1xuICB9XG59XG5cbi8vIE9wdGlvbmFsOiBHcm91cCBtdWx0aXBsZSBidXR0b24gZ3JvdXBzIHRvZ2V0aGVyIGZvciBhIHRvb2xiYXJcbi5idG4tdG9vbGJhciB7XG4gIG1hcmdpbi1sZWZ0OiAtNXB4OyAvLyBPZmZzZXQgdGhlIGZpcnN0IGNoaWxkJ3MgbWFyZ2luXG4gIEBpbmNsdWRlIGNsZWFyZml4O1xuXG4gIC5idG4tZ3JvdXAsXG4gIC5pbnB1dC1ncm91cCB7XG4gICAgZmxvYXQ6IGxlZnQ7XG4gIH1cbiAgPiAuYnRuLFxuICA+IC5idG4tZ3JvdXAsXG4gID4gLmlucHV0LWdyb3VwIHtcbiAgICBtYXJnaW4tbGVmdDogNXB4O1xuICB9XG59XG5cbi5idG4tZ3JvdXAgPiAuYnRuOm5vdCg6Zmlyc3QtY2hpbGQpOm5vdCg6bGFzdC1jaGlsZCk6bm90KC5kcm9wZG93bi10b2dnbGUpIHtcbiAgYm9yZGVyLXJhZGl1czogMDtcbn1cblxuLy8gU2V0IGNvcm5lcnMgaW5kaXZpZHVhbCBiZWNhdXNlIHNvbWV0aW1lcyBhIHNpbmdsZSBidXR0b24gY2FuIGJlIGluIGEgLmJ0bi1ncm91cCBhbmQgd2UgbmVlZCA6Zmlyc3QtY2hpbGQgYW5kIDpsYXN0LWNoaWxkIHRvIGJvdGggbWF0Y2hcbi5idG4tZ3JvdXAgPiAuYnRuOmZpcnN0LWNoaWxkIHtcbiAgbWFyZ2luLWxlZnQ6IDA7XG4gICY6bm90KDpsYXN0LWNoaWxkKTpub3QoLmRyb3Bkb3duLXRvZ2dsZSkge1xuICAgIEBpbmNsdWRlIGJvcmRlci1yaWdodC1yYWRpdXMoMCk7XG4gIH1cbn1cbi8vIE5lZWQgLmRyb3Bkb3duLXRvZ2dsZSBzaW5jZSA6bGFzdC1jaGlsZCBkb2Vzbid0IGFwcGx5IGdpdmVuIGEgLmRyb3Bkb3duLW1lbnUgaW1tZWRpYXRlbHkgYWZ0ZXIgaXRcbi5idG4tZ3JvdXAgPiAuYnRuOmxhc3QtY2hpbGQ6bm90KDpmaXJzdC1jaGlsZCksXG4uYnRuLWdyb3VwID4gLmRyb3Bkb3duLXRvZ2dsZTpub3QoOmZpcnN0LWNoaWxkKSB7XG4gIEBpbmNsdWRlIGJvcmRlci1sZWZ0LXJhZGl1cygwKTtcbn1cblxuLy8gQ3VzdG9tIGVkaXRzIGZvciBpbmNsdWRpbmcgYnRuLWdyb3VwcyB3aXRoaW4gYnRuLWdyb3VwcyAodXNlZnVsIGZvciBpbmNsdWRpbmcgZHJvcGRvd24gYnV0dG9ucyB3aXRoaW4gYSBidG4tZ3JvdXApXG4uYnRuLWdyb3VwID4gLmJ0bi1ncm91cCB7XG4gIGZsb2F0OiBsZWZ0O1xufVxuLmJ0bi1ncm91cCA+IC5idG4tZ3JvdXA6bm90KDpmaXJzdC1jaGlsZCk6bm90KDpsYXN0LWNoaWxkKSA+IC5idG4ge1xuICBib3JkZXItcmFkaXVzOiAwO1xufVxuLmJ0bi1ncm91cCA+IC5idG4tZ3JvdXA6Zmlyc3QtY2hpbGQ6bm90KDpsYXN0LWNoaWxkKSB7XG4gID4gLmJ0bjpsYXN0LWNoaWxkLFxuICA+IC5kcm9wZG93bi10b2dnbGUge1xuICAgIEBpbmNsdWRlIGJvcmRlci1yaWdodC1yYWRpdXMoMCk7XG4gIH1cbn1cbi5idG4tZ3JvdXAgPiAuYnRuLWdyb3VwOmxhc3QtY2hpbGQ6bm90KDpmaXJzdC1jaGlsZCkgPiAuYnRuOmZpcnN0LWNoaWxkIHtcbiAgQGluY2x1ZGUgYm9yZGVyLWxlZnQtcmFkaXVzKDApO1xufVxuXG4vLyBPbiBhY3RpdmUgYW5kIG9wZW4sIGRvbid0IHNob3cgb3V0bGluZVxuLmJ0bi1ncm91cCAuZHJvcGRvd24tdG9nZ2xlOmFjdGl2ZSxcbi5idG4tZ3JvdXAub3BlbiAuZHJvcGRvd24tdG9nZ2xlIHtcbiAgb3V0bGluZTogMDtcbn1cblxuXG4vLyBTaXppbmdcbi8vXG4vLyBSZW1peCB0aGUgZGVmYXVsdCBidXR0b24gc2l6aW5nIGNsYXNzZXMgaW50byBuZXcgb25lcyBmb3IgZWFzaWVyIG1hbmlwdWxhdGlvbi5cblxuLmJ0bi1ncm91cC14cyA+IC5idG4geyBAZXh0ZW5kIC5idG4teHM7IH1cbi5idG4tZ3JvdXAtc20gPiAuYnRuIHsgQGV4dGVuZCAuYnRuLXNtOyB9XG4uYnRuLWdyb3VwLWxnID4gLmJ0biB7IEBleHRlbmQgLmJ0bi1sZzsgfVxuXG5cbi8vIFNwbGl0IGJ1dHRvbiBkcm9wZG93bnNcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLy8gR2l2ZSB0aGUgbGluZSBiZXR3ZWVuIGJ1dHRvbnMgc29tZSBkZXB0aFxuLmJ0bi1ncm91cCA+IC5idG4gKyAuZHJvcGRvd24tdG9nZ2xlIHtcbiAgcGFkZGluZy1sZWZ0OiA4cHg7XG4gIHBhZGRpbmctcmlnaHQ6IDhweDtcbn1cbi5idG4tZ3JvdXAgPiAuYnRuLWxnICsgLmRyb3Bkb3duLXRvZ2dsZSB7XG4gIHBhZGRpbmctbGVmdDogMTJweDtcbiAgcGFkZGluZy1yaWdodDogMTJweDtcbn1cblxuLy8gVGhlIGNsaWNrYWJsZSBidXR0b24gZm9yIHRvZ2dsaW5nIHRoZSBtZW51XG4vLyBSZW1vdmUgdGhlIGdyYWRpZW50IGFuZCBzZXQgdGhlIHNhbWUgaW5zZXQgc2hhZG93IGFzIHRoZSA6YWN0aXZlIHN0YXRlXG4uYnRuLWdyb3VwLm9wZW4gLmRyb3Bkb3duLXRvZ2dsZSB7XG4gIEBpbmNsdWRlIGJveC1zaGFkb3coaW5zZXQgMCAzcHggNXB4IHJnYmEoMCwwLDAsLjEyNSkpO1xuXG4gIC8vIFNob3cgbm8gc2hhZG93IGZvciBgLmJ0bi1saW5rYCBzaW5jZSBpdCBoYXMgbm8gb3RoZXIgYnV0dG9uIHN0eWxlcy5cbiAgJi5idG4tbGluayB7XG4gICAgQGluY2x1ZGUgYm94LXNoYWRvdyhub25lKTtcbiAgfVxufVxuXG5cbi8vIFJlcG9zaXRpb24gdGhlIGNhcmV0XG4uYnRuIC5jYXJldCB7XG4gIG1hcmdpbi1sZWZ0OiAwO1xufVxuLy8gQ2FyZXRzIGluIG90aGVyIGJ1dHRvbiBzaXplc1xuLmJ0bi1sZyAuY2FyZXQge1xuICBib3JkZXItd2lkdGg6ICRjYXJldC13aWR0aC1sYXJnZSAkY2FyZXQtd2lkdGgtbGFyZ2UgMDtcbiAgYm9yZGVyLWJvdHRvbS13aWR0aDogMDtcbn1cbi8vIFVwc2lkZSBkb3duIGNhcmV0cyBmb3IgLmRyb3B1cFxuLmRyb3B1cCAuYnRuLWxnIC5jYXJldCB7XG4gIGJvcmRlci13aWR0aDogMCAkY2FyZXQtd2lkdGgtbGFyZ2UgJGNhcmV0LXdpZHRoLWxhcmdlO1xufVxuXG5cbi8vIFZlcnRpY2FsIGJ1dHRvbiBncm91cHNcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLmJ0bi1ncm91cC12ZXJ0aWNhbCB7XG4gID4gLmJ0bixcbiAgPiAuYnRuLWdyb3VwLFxuICA+IC5idG4tZ3JvdXAgPiAuYnRuIHtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgICBmbG9hdDogbm9uZTtcbiAgICB3aWR0aDogMTAwJTtcbiAgICBtYXgtd2lkdGg6IDEwMCU7XG4gIH1cblxuICAvLyBDbGVhciBmbG9hdHMgc28gZHJvcGRvd24gbWVudXMgY2FuIGJlIHByb3Blcmx5IHBsYWNlZFxuICA+IC5idG4tZ3JvdXAge1xuICAgIEBpbmNsdWRlIGNsZWFyZml4O1xuICAgID4gLmJ0biB7XG4gICAgICBmbG9hdDogbm9uZTtcbiAgICB9XG4gIH1cblxuICA+IC5idG4gKyAuYnRuLFxuICA+IC5idG4gKyAuYnRuLWdyb3VwLFxuICA+IC5idG4tZ3JvdXAgKyAuYnRuLFxuICA+IC5idG4tZ3JvdXAgKyAuYnRuLWdyb3VwIHtcbiAgICBtYXJnaW4tdG9wOiAtMXB4O1xuICAgIG1hcmdpbi1sZWZ0OiAwO1xuICB9XG59XG5cbi5idG4tZ3JvdXAtdmVydGljYWwgPiAuYnRuIHtcbiAgJjpub3QoOmZpcnN0LWNoaWxkKTpub3QoOmxhc3QtY2hpbGQpIHtcbiAgICBib3JkZXItcmFkaXVzOiAwO1xuICB9XG4gICY6Zmlyc3QtY2hpbGQ6bm90KDpsYXN0LWNoaWxkKSB7XG4gICAgYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6ICRib3JkZXItcmFkaXVzLWJhc2U7XG4gICAgQGluY2x1ZGUgYm9yZGVyLWJvdHRvbS1yYWRpdXMoMCk7XG4gIH1cbiAgJjpsYXN0LWNoaWxkOm5vdCg6Zmlyc3QtY2hpbGQpIHtcbiAgICBib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOiAkYm9yZGVyLXJhZGl1cy1iYXNlO1xuICAgIEBpbmNsdWRlIGJvcmRlci10b3AtcmFkaXVzKDApO1xuICB9XG59XG4uYnRuLWdyb3VwLXZlcnRpY2FsID4gLmJ0bi1ncm91cDpub3QoOmZpcnN0LWNoaWxkKTpub3QoOmxhc3QtY2hpbGQpID4gLmJ0biB7XG4gIGJvcmRlci1yYWRpdXM6IDA7XG59XG4uYnRuLWdyb3VwLXZlcnRpY2FsID4gLmJ0bi1ncm91cDpmaXJzdC1jaGlsZDpub3QoOmxhc3QtY2hpbGQpIHtcbiAgPiAuYnRuOmxhc3QtY2hpbGQsXG4gID4gLmRyb3Bkb3duLXRvZ2dsZSB7XG4gICAgQGluY2x1ZGUgYm9yZGVyLWJvdHRvbS1yYWRpdXMoMCk7XG4gIH1cbn1cbi5idG4tZ3JvdXAtdmVydGljYWwgPiAuYnRuLWdyb3VwOmxhc3QtY2hpbGQ6bm90KDpmaXJzdC1jaGlsZCkgPiAuYnRuOmZpcnN0LWNoaWxkIHtcbiAgQGluY2x1ZGUgYm9yZGVyLXRvcC1yYWRpdXMoMCk7XG59XG5cblxuLy8gSnVzdGlmaWVkIGJ1dHRvbiBncm91cHNcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLmJ0bi1ncm91cC1qdXN0aWZpZWQge1xuICBkaXNwbGF5OiB0YWJsZTtcbiAgd2lkdGg6IDEwMCU7XG4gIHRhYmxlLWxheW91dDogZml4ZWQ7XG4gIGJvcmRlci1jb2xsYXBzZTogc2VwYXJhdGU7XG4gID4gLmJ0bixcbiAgPiAuYnRuLWdyb3VwIHtcbiAgICBmbG9hdDogbm9uZTtcbiAgICBkaXNwbGF5OiB0YWJsZS1jZWxsO1xuICAgIHdpZHRoOiAxJTtcbiAgfVxuICA+IC5idG4tZ3JvdXAgLmJ0biB7XG4gICAgd2lkdGg6IDEwMCU7XG4gIH1cblxuICA+IC5idG4tZ3JvdXAgLmRyb3Bkb3duLW1lbnUge1xuICAgIGxlZnQ6IGF1dG87XG4gIH1cbn1cblxuXG4vLyBDaGVja2JveCBhbmQgcmFkaW8gb3B0aW9uc1xuLy9cbi8vIEluIG9yZGVyIHRvIHN1cHBvcnQgdGhlIGJyb3dzZXIncyBmb3JtIHZhbGlkYXRpb24gZmVlZGJhY2ssIHBvd2VyZWQgYnkgdGhlXG4vLyBgcmVxdWlyZWRgIGF0dHJpYnV0ZSwgd2UgaGF2ZSB0byBcImhpZGVcIiB0aGUgaW5wdXRzIHZpYSBgY2xpcGAuIFdlIGNhbm5vdCB1c2Vcbi8vIGBkaXNwbGF5OiBub25lO2Agb3IgYHZpc2liaWxpdHk6IGhpZGRlbjtgIGFzIHRoYXQgYWxzbyBoaWRlcyB0aGUgcG9wb3Zlci5cbi8vIFNpbXBseSB2aXN1YWxseSBoaWRpbmcgdGhlIGlucHV0cyB2aWEgYG9wYWNpdHlgIHdvdWxkIGxlYXZlIHRoZW0gY2xpY2thYmxlIGluXG4vLyBjZXJ0YWluIGNhc2VzIHdoaWNoIGlzIHByZXZlbnRlZCBieSB1c2luZyBgY2xpcGAgYW5kIGBwb2ludGVyLWV2ZW50c2AuXG4vLyBUaGlzIHdheSwgd2UgZW5zdXJlIGEgRE9NIGVsZW1lbnQgaXMgdmlzaWJsZSB0byBwb3NpdGlvbiB0aGUgcG9wb3ZlciBmcm9tLlxuLy9cbi8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvcHVsbC8xMjc5NCBhbmRcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9wdWxsLzE0NTU5IGZvciBtb3JlIGluZm9ybWF0aW9uLlxuXG5bZGF0YS10b2dnbGU9XCJidXR0b25zXCJdIHtcbiAgPiAuYnRuLFxuICA+IC5idG4tZ3JvdXAgPiAuYnRuIHtcbiAgICBpbnB1dFt0eXBlPVwicmFkaW9cIl0sXG4gICAgaW5wdXRbdHlwZT1cImNoZWNrYm94XCJdIHtcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgIGNsaXA6IHJlY3QoMCwwLDAsMCk7XG4gICAgICBwb2ludGVyLWV2ZW50czogbm9uZTtcbiAgICB9XG4gIH1cbn1cbiIsIi8vIFNpbmdsZSBzaWRlIGJvcmRlci1yYWRpdXNcblxuQG1peGluIGJvcmRlci10b3AtcmFkaXVzKCRyYWRpdXMpIHtcbiAgYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6ICRyYWRpdXM7XG4gICBib3JkZXItdG9wLWxlZnQtcmFkaXVzOiAkcmFkaXVzO1xufVxuQG1peGluIGJvcmRlci1yaWdodC1yYWRpdXMoJHJhZGl1cykge1xuICBib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czogJHJhZGl1cztcbiAgICAgYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6ICRyYWRpdXM7XG59XG5AbWl4aW4gYm9yZGVyLWJvdHRvbS1yYWRpdXMoJHJhZGl1cykge1xuICBib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czogJHJhZGl1cztcbiAgIGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6ICRyYWRpdXM7XG59XG5AbWl4aW4gYm9yZGVyLWxlZnQtcmFkaXVzKCRyYWRpdXMpIHtcbiAgYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czogJHJhZGl1cztcbiAgICAgYm9yZGVyLXRvcC1sZWZ0LXJhZGl1czogJHJhZGl1cztcbn1cbiIsIi8vXG4vLyBJbnB1dCBncm91cHNcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi8vIEJhc2Ugc3R5bGVzXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4uaW5wdXQtZ3JvdXAge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7IC8vIEZvciBkcm9wZG93bnNcbiAgZGlzcGxheTogdGFibGU7XG4gIGJvcmRlci1jb2xsYXBzZTogc2VwYXJhdGU7IC8vIHByZXZlbnQgaW5wdXQgZ3JvdXBzIGZyb20gaW5oZXJpdGluZyBib3JkZXIgc3R5bGVzIGZyb20gdGFibGUgY2VsbHMgd2hlbiBwbGFjZWQgd2l0aGluIGEgdGFibGVcblxuICAvLyBVbmRvIHBhZGRpbmcgYW5kIGZsb2F0IG9mIGdyaWQgY2xhc3Nlc1xuICAmW2NsYXNzKj1cImNvbC1cIl0ge1xuICAgIGZsb2F0OiBub25lO1xuICAgIHBhZGRpbmctbGVmdDogMDtcbiAgICBwYWRkaW5nLXJpZ2h0OiAwO1xuICB9XG5cbiAgLmZvcm0tY29udHJvbCB7XG4gICAgLy8gRW5zdXJlIHRoYXQgdGhlIGlucHV0IGlzIGFsd2F5cyBhYm92ZSB0aGUgKmFwcGVuZGVkKiBhZGRvbiBidXR0b24gZm9yXG4gICAgLy8gcHJvcGVyIGJvcmRlciBjb2xvcnMuXG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIHotaW5kZXg6IDI7XG5cbiAgICAvLyBJRTkgZnViYXJzIHRoZSBwbGFjZWhvbGRlciBhdHRyaWJ1dGUgaW4gdGV4dCBpbnB1dHMgYW5kIHRoZSBhcnJvd3Mgb25cbiAgICAvLyBzZWxlY3QgZWxlbWVudHMgaW4gaW5wdXQgZ3JvdXBzLiBUbyBmaXggaXQsIHdlIGZsb2F0IHRoZSBpbnB1dC4gRGV0YWlsczpcbiAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvaXNzdWVzLzExNTYxI2lzc3VlY29tbWVudC0yODkzNjg1NVxuICAgIGZsb2F0OiBsZWZ0O1xuXG4gICAgd2lkdGg6IDEwMCU7XG4gICAgbWFyZ2luLWJvdHRvbTogMDtcbiAgfVxufVxuXG4vLyBTaXppbmcgb3B0aW9uc1xuLy9cbi8vIFJlbWl4IHRoZSBkZWZhdWx0IGZvcm0gY29udHJvbCBzaXppbmcgY2xhc3NlcyBpbnRvIG5ldyBvbmVzIGZvciBlYXNpZXJcbi8vIG1hbmlwdWxhdGlvbi5cblxuLmlucHV0LWdyb3VwLWxnID4gLmZvcm0tY29udHJvbCxcbi5pbnB1dC1ncm91cC1sZyA+IC5pbnB1dC1ncm91cC1hZGRvbixcbi5pbnB1dC1ncm91cC1sZyA+IC5pbnB1dC1ncm91cC1idG4gPiAuYnRuIHtcbiAgQGV4dGVuZCAuaW5wdXQtbGc7XG59XG4uaW5wdXQtZ3JvdXAtc20gPiAuZm9ybS1jb250cm9sLFxuLmlucHV0LWdyb3VwLXNtID4gLmlucHV0LWdyb3VwLWFkZG9uLFxuLmlucHV0LWdyb3VwLXNtID4gLmlucHV0LWdyb3VwLWJ0biA+IC5idG4ge1xuICBAZXh0ZW5kIC5pbnB1dC1zbTtcbn1cblxuXG4vLyBEaXNwbGF5IGFzIHRhYmxlLWNlbGxcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi5pbnB1dC1ncm91cC1hZGRvbixcbi5pbnB1dC1ncm91cC1idG4sXG4uaW5wdXQtZ3JvdXAgLmZvcm0tY29udHJvbCB7XG4gIGRpc3BsYXk6IHRhYmxlLWNlbGw7XG5cbiAgJjpub3QoOmZpcnN0LWNoaWxkKTpub3QoOmxhc3QtY2hpbGQpIHtcbiAgICBib3JkZXItcmFkaXVzOiAwO1xuICB9XG59XG4vLyBBZGRvbiBhbmQgYWRkb24gd3JhcHBlciBmb3IgYnV0dG9uc1xuLmlucHV0LWdyb3VwLWFkZG9uLFxuLmlucHV0LWdyb3VwLWJ0biB7XG4gIHdpZHRoOiAxJTtcbiAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTsgLy8gTWF0Y2ggdGhlIGlucHV0c1xufVxuXG4vLyBUZXh0IGlucHV0IGdyb3Vwc1xuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLmlucHV0LWdyb3VwLWFkZG9uIHtcbiAgcGFkZGluZzogJHBhZGRpbmctYmFzZS12ZXJ0aWNhbCAkcGFkZGluZy1iYXNlLWhvcml6b250YWw7XG4gIGZvbnQtc2l6ZTogJGZvbnQtc2l6ZS1iYXNlO1xuICBmb250LXdlaWdodDogbm9ybWFsO1xuICBsaW5lLWhlaWdodDogMTtcbiAgY29sb3I6ICRpbnB1dC1jb2xvcjtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAkaW5wdXQtZ3JvdXAtYWRkb24tYmc7XG4gIGJvcmRlcjogMXB4IHNvbGlkICRpbnB1dC1ncm91cC1hZGRvbi1ib3JkZXItY29sb3I7XG4gIGJvcmRlci1yYWRpdXM6ICRib3JkZXItcmFkaXVzLWJhc2U7XG5cbiAgLy8gU2l6aW5nXG4gICYuaW5wdXQtc20ge1xuICAgIHBhZGRpbmc6ICRwYWRkaW5nLXNtYWxsLXZlcnRpY2FsICRwYWRkaW5nLXNtYWxsLWhvcml6b250YWw7XG4gICAgZm9udC1zaXplOiAkZm9udC1zaXplLXNtYWxsO1xuICAgIGJvcmRlci1yYWRpdXM6ICRib3JkZXItcmFkaXVzLXNtYWxsO1xuICB9XG4gICYuaW5wdXQtbGcge1xuICAgIHBhZGRpbmc6ICRwYWRkaW5nLWxhcmdlLXZlcnRpY2FsICRwYWRkaW5nLWxhcmdlLWhvcml6b250YWw7XG4gICAgZm9udC1zaXplOiAkZm9udC1zaXplLWxhcmdlO1xuICAgIGJvcmRlci1yYWRpdXM6ICRib3JkZXItcmFkaXVzLWxhcmdlO1xuICB9XG5cbiAgLy8gTnVrZSBkZWZhdWx0IG1hcmdpbnMgZnJvbSBjaGVja2JveGVzIGFuZCByYWRpb3MgdG8gdmVydGljYWxseSBjZW50ZXIgd2l0aGluLlxuICBpbnB1dFt0eXBlPVwicmFkaW9cIl0sXG4gIGlucHV0W3R5cGU9XCJjaGVja2JveFwiXSB7XG4gICAgbWFyZ2luLXRvcDogMDtcbiAgfVxufVxuXG4vLyBSZXNldCByb3VuZGVkIGNvcm5lcnNcbi5pbnB1dC1ncm91cCAuZm9ybS1jb250cm9sOmZpcnN0LWNoaWxkLFxuLmlucHV0LWdyb3VwLWFkZG9uOmZpcnN0LWNoaWxkLFxuLmlucHV0LWdyb3VwLWJ0bjpmaXJzdC1jaGlsZCA+IC5idG4sXG4uaW5wdXQtZ3JvdXAtYnRuOmZpcnN0LWNoaWxkID4gLmJ0bi1ncm91cCA+IC5idG4sXG4uaW5wdXQtZ3JvdXAtYnRuOmZpcnN0LWNoaWxkID4gLmRyb3Bkb3duLXRvZ2dsZSxcbi5pbnB1dC1ncm91cC1idG46bGFzdC1jaGlsZCA+IC5idG46bm90KDpsYXN0LWNoaWxkKTpub3QoLmRyb3Bkb3duLXRvZ2dsZSksXG4uaW5wdXQtZ3JvdXAtYnRuOmxhc3QtY2hpbGQgPiAuYnRuLWdyb3VwOm5vdCg6bGFzdC1jaGlsZCkgPiAuYnRuIHtcbiAgQGluY2x1ZGUgYm9yZGVyLXJpZ2h0LXJhZGl1cygwKTtcbn1cbi5pbnB1dC1ncm91cC1hZGRvbjpmaXJzdC1jaGlsZCB7XG4gIGJvcmRlci1yaWdodDogMDtcbn1cbi5pbnB1dC1ncm91cCAuZm9ybS1jb250cm9sOmxhc3QtY2hpbGQsXG4uaW5wdXQtZ3JvdXAtYWRkb246bGFzdC1jaGlsZCxcbi5pbnB1dC1ncm91cC1idG46bGFzdC1jaGlsZCA+IC5idG4sXG4uaW5wdXQtZ3JvdXAtYnRuOmxhc3QtY2hpbGQgPiAuYnRuLWdyb3VwID4gLmJ0bixcbi5pbnB1dC1ncm91cC1idG46bGFzdC1jaGlsZCA+IC5kcm9wZG93bi10b2dnbGUsXG4uaW5wdXQtZ3JvdXAtYnRuOmZpcnN0LWNoaWxkID4gLmJ0bjpub3QoOmZpcnN0LWNoaWxkKSxcbi5pbnB1dC1ncm91cC1idG46Zmlyc3QtY2hpbGQgPiAuYnRuLWdyb3VwOm5vdCg6Zmlyc3QtY2hpbGQpID4gLmJ0biB7XG4gIEBpbmNsdWRlIGJvcmRlci1sZWZ0LXJhZGl1cygwKTtcbn1cbi5pbnB1dC1ncm91cC1hZGRvbjpsYXN0LWNoaWxkIHtcbiAgYm9yZGVyLWxlZnQ6IDA7XG59XG5cbi8vIEJ1dHRvbiBpbnB1dCBncm91cHNcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi5pbnB1dC1ncm91cC1idG4ge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIC8vIEphbmtpbHkgcHJldmVudCBpbnB1dCBidXR0b24gZ3JvdXBzIGZyb20gd3JhcHBpbmcgd2l0aCBgd2hpdGUtc3BhY2VgIGFuZFxuICAvLyBgZm9udC1zaXplYCBpbiBjb21iaW5hdGlvbiB3aXRoIGBpbmxpbmUtYmxvY2tgIG9uIGJ1dHRvbnMuXG4gIGZvbnQtc2l6ZTogMDtcbiAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcblxuICAvLyBOZWdhdGl2ZSBtYXJnaW4gZm9yIHNwYWNpbmcsIHBvc2l0aW9uIGZvciBicmluZ2luZyBob3ZlcmVkL2ZvY3VzZWQvYWN0aXZlZFxuICAvLyBlbGVtZW50IGFib3ZlIHRoZSBzaWJsaW5ncy5cbiAgPiAuYnRuIHtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgKyAuYnRuIHtcbiAgICAgIG1hcmdpbi1sZWZ0OiAtMXB4O1xuICAgIH1cbiAgICAvLyBCcmluZyB0aGUgXCJhY3RpdmVcIiBidXR0b24gdG8gdGhlIGZyb250XG4gICAgJjpob3ZlcixcbiAgICAmOmZvY3VzLFxuICAgICY6YWN0aXZlIHtcbiAgICAgIHotaW5kZXg6IDI7XG4gICAgfVxuICB9XG5cbiAgLy8gTmVnYXRpdmUgbWFyZ2luIHRvIG9ubHkgaGF2ZSBhIDFweCBib3JkZXIgYmV0d2VlbiB0aGUgdHdvXG4gICY6Zmlyc3QtY2hpbGQge1xuICAgID4gLmJ0bixcbiAgICA+IC5idG4tZ3JvdXAge1xuICAgICAgbWFyZ2luLXJpZ2h0OiAtMXB4O1xuICAgIH1cbiAgfVxuICAmOmxhc3QtY2hpbGQge1xuICAgID4gLmJ0bixcbiAgICA+IC5idG4tZ3JvdXAge1xuICAgICAgbWFyZ2luLWxlZnQ6IC0xcHg7XG4gICAgfVxuICB9XG59XG4iLCIvL1xuLy8gTmF2c1xuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuXG4vLyBCYXNlIGNsYXNzXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4ubmF2IHtcbiAgbWFyZ2luLWJvdHRvbTogMDtcbiAgcGFkZGluZy1sZWZ0OiAwOyAvLyBPdmVycmlkZSBkZWZhdWx0IHVsL29sXG4gIGxpc3Qtc3R5bGU6IG5vbmU7XG4gIEBpbmNsdWRlIGNsZWFyZml4O1xuXG4gID4gbGkge1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICBkaXNwbGF5OiBibG9jaztcblxuICAgID4gYSB7XG4gICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgIHBhZGRpbmc6ICRuYXYtbGluay1wYWRkaW5nO1xuICAgICAgJjpob3ZlcixcbiAgICAgICY6Zm9jdXMge1xuICAgICAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6ICRuYXYtbGluay1ob3Zlci1iZztcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBEaXNhYmxlZCBzdGF0ZSBzZXRzIHRleHQgdG8gZ3JheSBhbmQgbnVrZXMgaG92ZXIvdGFiIGVmZmVjdHNcbiAgICAmLmRpc2FibGVkID4gYSB7XG4gICAgICBjb2xvcjogJG5hdi1kaXNhYmxlZC1saW5rLWNvbG9yO1xuXG4gICAgICAmOmhvdmVyLFxuICAgICAgJjpmb2N1cyB7XG4gICAgICAgIGNvbG9yOiAkbmF2LWRpc2FibGVkLWxpbmstaG92ZXItY29sb3I7XG4gICAgICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7XG4gICAgICAgIGN1cnNvcjogJGN1cnNvci1kaXNhYmxlZDtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBPcGVuIGRyb3Bkb3duc1xuICAub3BlbiA+IGEge1xuICAgICYsXG4gICAgJjpob3ZlcixcbiAgICAmOmZvY3VzIHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6ICRuYXYtbGluay1ob3Zlci1iZztcbiAgICAgIGJvcmRlci1jb2xvcjogJGxpbmstY29sb3I7XG4gICAgfVxuICB9XG5cbiAgLy8gTmF2IGRpdmlkZXJzIChkZXByZWNhdGVkIHdpdGggdjMuMC4xKVxuICAvL1xuICAvLyBUaGlzIHNob3VsZCBoYXZlIGJlZW4gcmVtb3ZlZCBpbiB2MyB3aXRoIHRoZSBkcm9wcGluZyBvZiBgLm5hdi1saXN0YCwgYnV0XG4gIC8vIHdlIG1pc3NlZCBpdC4gV2UgZG9uJ3QgY3VycmVudGx5IHN1cHBvcnQgdGhpcyBhbnl3aGVyZSwgYnV0IGluIHRoZSBpbnRlcmVzdFxuICAvLyBvZiBtYWludGFpbmluZyBiYWNrd2FyZCBjb21wYXRpYmlsaXR5IGluIGNhc2UgeW91IHVzZSBpdCwgaXQncyBkZXByZWNhdGVkLlxuICAubmF2LWRpdmlkZXIge1xuICAgIEBpbmNsdWRlIG5hdi1kaXZpZGVyO1xuICB9XG5cbiAgLy8gUHJldmVudCBJRTggZnJvbSBtaXNwbGFjaW5nIGltZ3NcbiAgLy9cbiAgLy8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9oNWJwL2h0bWw1LWJvaWxlcnBsYXRlL2lzc3Vlcy85ODQjaXNzdWVjb21tZW50LTM5ODU5ODlcbiAgPiBsaSA+IGEgPiBpbWcge1xuICAgIG1heC13aWR0aDogbm9uZTtcbiAgfVxufVxuXG5cbi8vIFRhYnNcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLy8gR2l2ZSB0aGUgdGFicyBzb21ldGhpbmcgdG8gc2l0IG9uXG4ubmF2LXRhYnMge1xuICBib3JkZXItYm90dG9tOiAxcHggc29saWQgJG5hdi10YWJzLWJvcmRlci1jb2xvcjtcbiAgPiBsaSB7XG4gICAgZmxvYXQ6IGxlZnQ7XG4gICAgLy8gTWFrZSB0aGUgbGlzdC1pdGVtcyBvdmVybGF5IHRoZSBib3R0b20gYm9yZGVyXG4gICAgbWFyZ2luLWJvdHRvbTogLTFweDtcblxuICAgIC8vIEFjdHVhbCB0YWJzIChhcyBsaW5rcylcbiAgICA+IGEge1xuICAgICAgbWFyZ2luLXJpZ2h0OiAycHg7XG4gICAgICBsaW5lLWhlaWdodDogJGxpbmUtaGVpZ2h0LWJhc2U7XG4gICAgICBib3JkZXI6IDFweCBzb2xpZCB0cmFuc3BhcmVudDtcbiAgICAgIGJvcmRlci1yYWRpdXM6ICRib3JkZXItcmFkaXVzLWJhc2UgJGJvcmRlci1yYWRpdXMtYmFzZSAwIDA7XG4gICAgICAmOmhvdmVyIHtcbiAgICAgICAgYm9yZGVyLWNvbG9yOiAkbmF2LXRhYnMtbGluay1ob3Zlci1ib3JkZXItY29sb3IgJG5hdi10YWJzLWxpbmstaG92ZXItYm9yZGVyLWNvbG9yICRuYXYtdGFicy1ib3JkZXItY29sb3I7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gQWN0aXZlIHN0YXRlLCBhbmQgaXRzIDpob3ZlciB0byBvdmVycmlkZSBub3JtYWwgOmhvdmVyXG4gICAgJi5hY3RpdmUgPiBhIHtcbiAgICAgICYsXG4gICAgICAmOmhvdmVyLFxuICAgICAgJjpmb2N1cyB7XG4gICAgICAgIGNvbG9yOiAkbmF2LXRhYnMtYWN0aXZlLWxpbmstaG92ZXItY29sb3I7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6ICRuYXYtdGFicy1hY3RpdmUtbGluay1ob3Zlci1iZztcbiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgJG5hdi10YWJzLWFjdGl2ZS1saW5rLWhvdmVyLWJvcmRlci1jb2xvcjtcbiAgICAgICAgYm9yZGVyLWJvdHRvbS1jb2xvcjogdHJhbnNwYXJlbnQ7XG4gICAgICAgIGN1cnNvcjogZGVmYXVsdDtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgLy8gcHVsbGluZyB0aGlzIGluIG1haW5seSBmb3IgbGVzcyBzaG9ydGhhbmRcbiAgJi5uYXYtanVzdGlmaWVkIHtcbiAgICBAZXh0ZW5kIC5uYXYtanVzdGlmaWVkO1xuICAgIEBleHRlbmQgLm5hdi10YWJzLWp1c3RpZmllZDtcbiAgfVxufVxuXG5cbi8vIFBpbGxzXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4ubmF2LXBpbGxzIHtcbiAgPiBsaSB7XG4gICAgZmxvYXQ6IGxlZnQ7XG5cbiAgICAvLyBMaW5rcyByZW5kZXJlZCBhcyBwaWxsc1xuICAgID4gYSB7XG4gICAgICBib3JkZXItcmFkaXVzOiAkbmF2LXBpbGxzLWJvcmRlci1yYWRpdXM7XG4gICAgfVxuICAgICsgbGkge1xuICAgICAgbWFyZ2luLWxlZnQ6IDJweDtcbiAgICB9XG5cbiAgICAvLyBBY3RpdmUgc3RhdGVcbiAgICAmLmFjdGl2ZSA+IGEge1xuICAgICAgJixcbiAgICAgICY6aG92ZXIsXG4gICAgICAmOmZvY3VzIHtcbiAgICAgICAgY29sb3I6ICRuYXYtcGlsbHMtYWN0aXZlLWxpbmstaG92ZXItY29sb3I7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6ICRuYXYtcGlsbHMtYWN0aXZlLWxpbmstaG92ZXItYmc7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cblxuLy8gU3RhY2tlZCBwaWxsc1xuLm5hdi1zdGFja2VkIHtcbiAgPiBsaSB7XG4gICAgZmxvYXQ6IG5vbmU7XG4gICAgKyBsaSB7XG4gICAgICBtYXJnaW4tdG9wOiAycHg7XG4gICAgICBtYXJnaW4tbGVmdDogMDsgLy8gbm8gbmVlZCBmb3IgdGhpcyBnYXAgYmV0d2VlbiBuYXYgaXRlbXNcbiAgICB9XG4gIH1cbn1cblxuXG4vLyBOYXYgdmFyaWF0aW9uc1xuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLy8gSnVzdGlmaWVkIG5hdiBsaW5rc1xuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4ubmF2LWp1c3RpZmllZCB7XG4gIHdpZHRoOiAxMDAlO1xuXG4gID4gbGkge1xuICAgIGZsb2F0OiBub25lO1xuICAgID4gYSB7XG4gICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgICBtYXJnaW4tYm90dG9tOiA1cHg7XG4gICAgfVxuICB9XG5cbiAgPiAuZHJvcGRvd24gLmRyb3Bkb3duLW1lbnUge1xuICAgIHRvcDogYXV0bztcbiAgICBsZWZ0OiBhdXRvO1xuICB9XG5cbiAgQG1lZGlhIChtaW4td2lkdGg6ICRzY3JlZW4tc20tbWluKSB7XG4gICAgPiBsaSB7XG4gICAgICBkaXNwbGF5OiB0YWJsZS1jZWxsO1xuICAgICAgd2lkdGg6IDElO1xuICAgICAgPiBhIHtcbiAgICAgICAgbWFyZ2luLWJvdHRvbTogMDtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuLy8gTW92ZSBib3JkZXJzIHRvIGFuY2hvcnMgaW5zdGVhZCBvZiBib3R0b20gb2YgbGlzdFxuLy9cbi8vIE1peGluIGZvciBhZGRpbmcgb24gdG9wIHRoZSBzaGFyZWQgYC5uYXYtanVzdGlmaWVkYCBzdHlsZXMgZm9yIG91ciB0YWJzXG4ubmF2LXRhYnMtanVzdGlmaWVkIHtcbiAgYm9yZGVyLWJvdHRvbTogMDtcblxuICA+IGxpID4gYSB7XG4gICAgLy8gT3ZlcnJpZGUgbWFyZ2luIGZyb20gLm5hdi10YWJzXG4gICAgbWFyZ2luLXJpZ2h0OiAwO1xuICAgIGJvcmRlci1yYWRpdXM6ICRib3JkZXItcmFkaXVzLWJhc2U7XG4gIH1cblxuICA+IC5hY3RpdmUgPiBhLFxuICA+IC5hY3RpdmUgPiBhOmhvdmVyLFxuICA+IC5hY3RpdmUgPiBhOmZvY3VzIHtcbiAgICBib3JkZXI6IDFweCBzb2xpZCAkbmF2LXRhYnMtanVzdGlmaWVkLWxpbmstYm9yZGVyLWNvbG9yO1xuICB9XG5cbiAgQG1lZGlhIChtaW4td2lkdGg6ICRzY3JlZW4tc20tbWluKSB7XG4gICAgPiBsaSA+IGEge1xuICAgICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICRuYXYtdGFicy1qdXN0aWZpZWQtbGluay1ib3JkZXItY29sb3I7XG4gICAgICBib3JkZXItcmFkaXVzOiAkYm9yZGVyLXJhZGl1cy1iYXNlICRib3JkZXItcmFkaXVzLWJhc2UgMCAwO1xuICAgIH1cbiAgICA+IC5hY3RpdmUgPiBhLFxuICAgID4gLmFjdGl2ZSA+IGE6aG92ZXIsXG4gICAgPiAuYWN0aXZlID4gYTpmb2N1cyB7XG4gICAgICBib3JkZXItYm90dG9tLWNvbG9yOiAkbmF2LXRhYnMtanVzdGlmaWVkLWFjdGl2ZS1saW5rLWJvcmRlci1jb2xvcjtcbiAgICB9XG4gIH1cbn1cblxuXG4vLyBUYWJiYWJsZSB0YWJzXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi8vIEhpZGUgdGFiYmFibGUgcGFuZXMgdG8gc3RhcnQsIHNob3cgdGhlbSB3aGVuIGAuYWN0aXZlYFxuLnRhYi1jb250ZW50IHtcbiAgPiAudGFiLXBhbmUge1xuICAgIGRpc3BsYXk6IG5vbmU7XG4gIH1cbiAgPiAuYWN0aXZlIHtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgfVxufVxuXG5cbi8vIERyb3Bkb3duc1xuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4vLyBTcGVjaWZpYyBkcm9wZG93bnNcbi5uYXYtdGFicyAuZHJvcGRvd24tbWVudSB7XG4gIC8vIG1ha2UgZHJvcGRvd24gYm9yZGVyIG92ZXJsYXAgdGFiIGJvcmRlclxuICBtYXJnaW4tdG9wOiAtMXB4O1xuICAvLyBSZW1vdmUgdGhlIHRvcCByb3VuZGVkIGNvcm5lcnMgaGVyZSBzaW5jZSB0aGVyZSBpcyBhIGhhcmQgZWRnZSBhYm92ZSB0aGUgbWVudVxuICBAaW5jbHVkZSBib3JkZXItdG9wLXJhZGl1cygwKTtcbn1cbiIsIi8vXG4vLyBOYXZiYXJzXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5cbi8vIFdyYXBwZXIgYW5kIGJhc2UgY2xhc3Ncbi8vXG4vLyBQcm92aWRlIGEgc3RhdGljIG5hdmJhciBmcm9tIHdoaWNoIHdlIGV4cGFuZCB0byBjcmVhdGUgZnVsbC13aWR0aCwgZml4ZWQsIGFuZFxuLy8gb3RoZXIgbmF2YmFyIHZhcmlhdGlvbnMuXG5cbi5uYXZiYXIge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIG1pbi1oZWlnaHQ6ICRuYXZiYXItaGVpZ2h0OyAvLyBFbnN1cmUgYSBuYXZiYXIgYWx3YXlzIHNob3dzIChlLmcuLCB3aXRob3V0IGEgLm5hdmJhci1icmFuZCBpbiBjb2xsYXBzZWQgbW9kZSlcbiAgbWFyZ2luLWJvdHRvbTogJG5hdmJhci1tYXJnaW4tYm90dG9tO1xuICBib3JkZXI6IDFweCBzb2xpZCB0cmFuc3BhcmVudDtcblxuICAvLyBQcmV2ZW50IGZsb2F0cyBmcm9tIGJyZWFraW5nIHRoZSBuYXZiYXJcbiAgQGluY2x1ZGUgY2xlYXJmaXg7XG5cbiAgQG1lZGlhIChtaW4td2lkdGg6ICRncmlkLWZsb2F0LWJyZWFrcG9pbnQpIHtcbiAgICBib3JkZXItcmFkaXVzOiAkbmF2YmFyLWJvcmRlci1yYWRpdXM7XG4gIH1cbn1cblxuXG4vLyBOYXZiYXIgaGVhZGluZ1xuLy9cbi8vIEdyb3VwcyBgLm5hdmJhci1icmFuZGAgYW5kIGAubmF2YmFyLXRvZ2dsZWAgaW50byBhIHNpbmdsZSBjb21wb25lbnQgZm9yIGVhc3lcbi8vIHN0eWxpbmcgb2YgcmVzcG9uc2l2ZSBhc3BlY3RzLlxuXG4ubmF2YmFyLWhlYWRlciB7XG4gIEBpbmNsdWRlIGNsZWFyZml4O1xuXG4gIEBtZWRpYSAobWluLXdpZHRoOiAkZ3JpZC1mbG9hdC1icmVha3BvaW50KSB7XG4gICAgZmxvYXQ6IGxlZnQ7XG4gIH1cbn1cblxuXG4vLyBOYXZiYXIgY29sbGFwc2UgKGJvZHkpXG4vL1xuLy8gR3JvdXAgeW91ciBuYXZiYXIgY29udGVudCBpbnRvIHRoaXMgZm9yIGVhc3kgY29sbGFwc2luZyBhbmQgZXhwYW5kaW5nIGFjcm9zc1xuLy8gdmFyaW91cyBkZXZpY2Ugc2l6ZXMuIEJ5IGRlZmF1bHQsIHRoaXMgY29udGVudCBpcyBjb2xsYXBzZWQgd2hlbiA8NzY4cHgsIGJ1dFxuLy8gd2lsbCBleHBhbmQgcGFzdCB0aGF0IGZvciBhIGhvcml6b250YWwgZGlzcGxheS5cbi8vXG4vLyBUbyBzdGFydCAob24gbW9iaWxlIGRldmljZXMpIHRoZSBuYXZiYXIgbGlua3MsIGZvcm1zLCBhbmQgYnV0dG9ucyBhcmUgc3RhY2tlZFxuLy8gdmVydGljYWxseSBhbmQgaW5jbHVkZSBhIGBtYXgtaGVpZ2h0YCB0byBvdmVyZmxvdyBpbiBjYXNlIHlvdSBoYXZlIHRvbyBtdWNoXG4vLyBjb250ZW50IGZvciB0aGUgdXNlcidzIHZpZXdwb3J0LlxuXG4ubmF2YmFyLWNvbGxhcHNlIHtcbiAgb3ZlcmZsb3cteDogdmlzaWJsZTtcbiAgcGFkZGluZy1yaWdodDogJG5hdmJhci1wYWRkaW5nLWhvcml6b250YWw7XG4gIHBhZGRpbmctbGVmdDogICRuYXZiYXItcGFkZGluZy1ob3Jpem9udGFsO1xuICBib3JkZXItdG9wOiAxcHggc29saWQgdHJhbnNwYXJlbnQ7XG4gIGJveC1zaGFkb3c6IGluc2V0IDAgMXB4IDAgcmdiYSgyNTUsMjU1LDI1NSwuMSk7XG4gIEBpbmNsdWRlIGNsZWFyZml4O1xuICAtd2Via2l0LW92ZXJmbG93LXNjcm9sbGluZzogdG91Y2g7XG5cbiAgJi5pbiB7XG4gICAgb3ZlcmZsb3cteTogYXV0bztcbiAgfVxuXG4gIEBtZWRpYSAobWluLXdpZHRoOiAkZ3JpZC1mbG9hdC1icmVha3BvaW50KSB7XG4gICAgd2lkdGg6IGF1dG87XG4gICAgYm9yZGVyLXRvcDogMDtcbiAgICBib3gtc2hhZG93OiBub25lO1xuXG4gICAgJi5jb2xsYXBzZSB7XG4gICAgICBkaXNwbGF5OiBibG9jayAhaW1wb3J0YW50O1xuICAgICAgaGVpZ2h0OiBhdXRvICFpbXBvcnRhbnQ7XG4gICAgICBwYWRkaW5nLWJvdHRvbTogMDsgLy8gT3ZlcnJpZGUgZGVmYXVsdCBzZXR0aW5nXG4gICAgICBvdmVyZmxvdzogdmlzaWJsZSAhaW1wb3J0YW50O1xuICAgIH1cblxuICAgICYuaW4ge1xuICAgICAgb3ZlcmZsb3cteTogdmlzaWJsZTtcbiAgICB9XG5cbiAgICAvLyBVbmRvIHRoZSBjb2xsYXBzZSBzaWRlIHBhZGRpbmcgZm9yIG5hdmJhcnMgd2l0aCBjb250YWluZXJzIHRvIGVuc3VyZVxuICAgIC8vIGFsaWdubWVudCBvZiByaWdodC1hbGlnbmVkIGNvbnRlbnRzLlxuICAgIC5uYXZiYXItZml4ZWQtdG9wICYsXG4gICAgLm5hdmJhci1zdGF0aWMtdG9wICYsXG4gICAgLm5hdmJhci1maXhlZC1ib3R0b20gJiB7XG4gICAgICBwYWRkaW5nLWxlZnQ6IDA7XG4gICAgICBwYWRkaW5nLXJpZ2h0OiAwO1xuICAgIH1cbiAgfVxufVxuXG4ubmF2YmFyLWZpeGVkLXRvcCxcbi5uYXZiYXItZml4ZWQtYm90dG9tIHtcbiAgLm5hdmJhci1jb2xsYXBzZSB7XG4gICAgbWF4LWhlaWdodDogJG5hdmJhci1jb2xsYXBzZS1tYXgtaGVpZ2h0O1xuXG4gICAgQG1lZGlhIChtYXgtZGV2aWNlLXdpZHRoOiAkc2NyZWVuLXhzLW1pbikgYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSB7XG4gICAgICBtYXgtaGVpZ2h0OiAyMDBweDtcbiAgICB9XG4gIH1cbn1cblxuXG4vLyBCb3RoIG5hdmJhciBoZWFkZXIgYW5kIGNvbGxhcHNlXG4vL1xuLy8gV2hlbiBhIGNvbnRhaW5lciBpcyBwcmVzZW50LCBjaGFuZ2UgdGhlIGJlaGF2aW9yIG9mIHRoZSBoZWFkZXIgYW5kIGNvbGxhcHNlLlxuXG4uY29udGFpbmVyLFxuLmNvbnRhaW5lci1mbHVpZCB7XG4gID4gLm5hdmJhci1oZWFkZXIsXG4gID4gLm5hdmJhci1jb2xsYXBzZSB7XG4gICAgbWFyZ2luLXJpZ2h0OiAtJG5hdmJhci1wYWRkaW5nLWhvcml6b250YWw7XG4gICAgbWFyZ2luLWxlZnQ6ICAtJG5hdmJhci1wYWRkaW5nLWhvcml6b250YWw7XG5cbiAgICBAbWVkaWEgKG1pbi13aWR0aDogJGdyaWQtZmxvYXQtYnJlYWtwb2ludCkge1xuICAgICAgbWFyZ2luLXJpZ2h0OiAwO1xuICAgICAgbWFyZ2luLWxlZnQ6ICAwO1xuICAgIH1cbiAgfVxufVxuXG5cbi8vXG4vLyBOYXZiYXIgYWxpZ25tZW50IG9wdGlvbnNcbi8vXG4vLyBEaXNwbGF5IHRoZSBuYXZiYXIgYWNyb3NzIHRoZSBlbnRpcmV0eSBvZiB0aGUgcGFnZSBvciBmaXhlZCBpdCB0byB0aGUgdG9wIG9yXG4vLyBib3R0b20gb2YgdGhlIHBhZ2UuXG5cbi8vIFN0YXRpYyB0b3AgKHVuZml4ZWQsIGJ1dCAxMDAlIHdpZGUpIG5hdmJhclxuLm5hdmJhci1zdGF0aWMtdG9wIHtcbiAgei1pbmRleDogJHppbmRleC1uYXZiYXI7XG4gIGJvcmRlci13aWR0aDogMCAwIDFweDtcblxuICBAbWVkaWEgKG1pbi13aWR0aDogJGdyaWQtZmxvYXQtYnJlYWtwb2ludCkge1xuICAgIGJvcmRlci1yYWRpdXM6IDA7XG4gIH1cbn1cblxuLy8gRml4IHRoZSB0b3AvYm90dG9tIG5hdmJhcnMgd2hlbiBzY3JlZW4gcmVhbCBlc3RhdGUgc3VwcG9ydHMgaXRcbi5uYXZiYXItZml4ZWQtdG9wLFxuLm5hdmJhci1maXhlZC1ib3R0b20ge1xuICBwb3NpdGlvbjogZml4ZWQ7XG4gIHJpZ2h0OiAwO1xuICBsZWZ0OiAwO1xuICB6LWluZGV4OiAkemluZGV4LW5hdmJhci1maXhlZDtcblxuICAvLyBVbmRvIHRoZSByb3VuZGVkIGNvcm5lcnNcbiAgQG1lZGlhIChtaW4td2lkdGg6ICRncmlkLWZsb2F0LWJyZWFrcG9pbnQpIHtcbiAgICBib3JkZXItcmFkaXVzOiAwO1xuICB9XG59XG4ubmF2YmFyLWZpeGVkLXRvcCB7XG4gIHRvcDogMDtcbiAgYm9yZGVyLXdpZHRoOiAwIDAgMXB4O1xufVxuLm5hdmJhci1maXhlZC1ib3R0b20ge1xuICBib3R0b206IDA7XG4gIG1hcmdpbi1ib3R0b206IDA7IC8vIG92ZXJyaWRlIC5uYXZiYXIgZGVmYXVsdHNcbiAgYm9yZGVyLXdpZHRoOiAxcHggMCAwO1xufVxuXG5cbi8vIEJyYW5kL3Byb2plY3QgbmFtZVxuXG4ubmF2YmFyLWJyYW5kIHtcbiAgZmxvYXQ6IGxlZnQ7XG4gIHBhZGRpbmc6ICRuYXZiYXItcGFkZGluZy12ZXJ0aWNhbCAkbmF2YmFyLXBhZGRpbmctaG9yaXpvbnRhbDtcbiAgZm9udC1zaXplOiAkZm9udC1zaXplLWxhcmdlO1xuICBsaW5lLWhlaWdodDogJGxpbmUtaGVpZ2h0LWNvbXB1dGVkO1xuICBoZWlnaHQ6ICRuYXZiYXItaGVpZ2h0O1xuXG4gICY6aG92ZXIsXG4gICY6Zm9jdXMge1xuICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbiAgfVxuXG4gID4gaW1nIHtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgfVxuXG4gIEBtZWRpYSAobWluLXdpZHRoOiAkZ3JpZC1mbG9hdC1icmVha3BvaW50KSB7XG4gICAgLm5hdmJhciA+IC5jb250YWluZXIgJixcbiAgICAubmF2YmFyID4gLmNvbnRhaW5lci1mbHVpZCAmIHtcbiAgICAgIG1hcmdpbi1sZWZ0OiAtJG5hdmJhci1wYWRkaW5nLWhvcml6b250YWw7XG4gICAgfVxuICB9XG59XG5cblxuLy8gTmF2YmFyIHRvZ2dsZVxuLy9cbi8vIEN1c3RvbSBidXR0b24gZm9yIHRvZ2dsaW5nIHRoZSBgLm5hdmJhci1jb2xsYXBzZWAsIHBvd2VyZWQgYnkgdGhlIGNvbGxhcHNlXG4vLyBKYXZhU2NyaXB0IHBsdWdpbi5cblxuLm5hdmJhci10b2dnbGUge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIGZsb2F0OiByaWdodDtcbiAgbWFyZ2luLXJpZ2h0OiAkbmF2YmFyLXBhZGRpbmctaG9yaXpvbnRhbDtcbiAgcGFkZGluZzogOXB4IDEwcHg7XG4gIEBpbmNsdWRlIG5hdmJhci12ZXJ0aWNhbC1hbGlnbigzNHB4KTtcbiAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7XG4gIGJhY2tncm91bmQtaW1hZ2U6IG5vbmU7IC8vIFJlc2V0IHVudXN1YWwgRmlyZWZveC1vbi1BbmRyb2lkIGRlZmF1bHQgc3R5bGU7IHNlZSBodHRwczovL2dpdGh1Yi5jb20vbmVjb2xhcy9ub3JtYWxpemUuY3NzL2lzc3Vlcy8yMTRcbiAgYm9yZGVyOiAxcHggc29saWQgdHJhbnNwYXJlbnQ7XG4gIGJvcmRlci1yYWRpdXM6ICRib3JkZXItcmFkaXVzLWJhc2U7XG5cbiAgLy8gV2UgcmVtb3ZlIHRoZSBgb3V0bGluZWAgaGVyZSwgYnV0IGxhdGVyIGNvbXBlbnNhdGUgYnkgYXR0YWNoaW5nIGA6aG92ZXJgXG4gIC8vIHN0eWxlcyB0byBgOmZvY3VzYC5cbiAgJjpmb2N1cyB7XG4gICAgb3V0bGluZTogMDtcbiAgfVxuXG4gIC8vIEJhcnNcbiAgLmljb24tYmFyIHtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgICB3aWR0aDogMjJweDtcbiAgICBoZWlnaHQ6IDJweDtcbiAgICBib3JkZXItcmFkaXVzOiAxcHg7XG4gIH1cbiAgLmljb24tYmFyICsgLmljb24tYmFyIHtcbiAgICBtYXJnaW4tdG9wOiA0cHg7XG4gIH1cblxuICBAbWVkaWEgKG1pbi13aWR0aDogJGdyaWQtZmxvYXQtYnJlYWtwb2ludCkge1xuICAgIGRpc3BsYXk6IG5vbmU7XG4gIH1cbn1cblxuXG4vLyBOYXZiYXIgbmF2IGxpbmtzXG4vL1xuLy8gQnVpbGRzIG9uIHRvcCBvZiB0aGUgYC5uYXZgIGNvbXBvbmVudHMgd2l0aCBpdHMgb3duIG1vZGlmaWVyIGNsYXNzIHRvIG1ha2Vcbi8vIHRoZSBuYXYgdGhlIGZ1bGwgaGVpZ2h0IG9mIHRoZSBob3Jpem9udGFsIG5hdiAoYWJvdmUgNzY4cHgpLlxuXG4ubmF2YmFyLW5hdiB7XG4gIG1hcmdpbjogKCRuYXZiYXItcGFkZGluZy12ZXJ0aWNhbCAvIDIpICgtJG5hdmJhci1wYWRkaW5nLWhvcml6b250YWwpO1xuXG4gID4gbGkgPiBhIHtcbiAgICBwYWRkaW5nLXRvcDogICAgMTBweDtcbiAgICBwYWRkaW5nLWJvdHRvbTogMTBweDtcbiAgICBsaW5lLWhlaWdodDogJGxpbmUtaGVpZ2h0LWNvbXB1dGVkO1xuICB9XG5cbiAgQG1lZGlhIChtYXgtd2lkdGg6ICRncmlkLWZsb2F0LWJyZWFrcG9pbnQtbWF4KSB7XG4gICAgLy8gRHJvcGRvd25zIGdldCBjdXN0b20gZGlzcGxheSB3aGVuIGNvbGxhcHNlZFxuICAgIC5vcGVuIC5kcm9wZG93bi1tZW51IHtcbiAgICAgIHBvc2l0aW9uOiBzdGF0aWM7XG4gICAgICBmbG9hdDogbm9uZTtcbiAgICAgIHdpZHRoOiBhdXRvO1xuICAgICAgbWFyZ2luLXRvcDogMDtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xuICAgICAgYm9yZGVyOiAwO1xuICAgICAgYm94LXNoYWRvdzogbm9uZTtcbiAgICAgID4gbGkgPiBhLFxuICAgICAgLmRyb3Bkb3duLWhlYWRlciB7XG4gICAgICAgIHBhZGRpbmc6IDVweCAxNXB4IDVweCAyNXB4O1xuICAgICAgfVxuICAgICAgPiBsaSA+IGEge1xuICAgICAgICBsaW5lLWhlaWdodDogJGxpbmUtaGVpZ2h0LWNvbXB1dGVkO1xuICAgICAgICAmOmhvdmVyLFxuICAgICAgICAmOmZvY3VzIHtcbiAgICAgICAgICBiYWNrZ3JvdW5kLWltYWdlOiBub25lO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gVW5jb2xsYXBzZSB0aGUgbmF2XG4gIEBtZWRpYSAobWluLXdpZHRoOiAkZ3JpZC1mbG9hdC1icmVha3BvaW50KSB7XG4gICAgZmxvYXQ6IGxlZnQ7XG4gICAgbWFyZ2luOiAwO1xuXG4gICAgPiBsaSB7XG4gICAgICBmbG9hdDogbGVmdDtcbiAgICAgID4gYSB7XG4gICAgICAgIHBhZGRpbmctdG9wOiAgICAkbmF2YmFyLXBhZGRpbmctdmVydGljYWw7XG4gICAgICAgIHBhZGRpbmctYm90dG9tOiAkbmF2YmFyLXBhZGRpbmctdmVydGljYWw7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cblxuLy8gTmF2YmFyIGZvcm1cbi8vXG4vLyBFeHRlbnNpb24gb2YgdGhlIGAuZm9ybS1pbmxpbmVgIHdpdGggc29tZSBleHRyYSBmbGF2b3IgZm9yIG9wdGltdW0gZGlzcGxheSBpblxuLy8gb3VyIG5hdmJhcnMuXG5cbi5uYXZiYXItZm9ybSB7XG4gIG1hcmdpbi1sZWZ0OiAtJG5hdmJhci1wYWRkaW5nLWhvcml6b250YWw7XG4gIG1hcmdpbi1yaWdodDogLSRuYXZiYXItcGFkZGluZy1ob3Jpem9udGFsO1xuICBwYWRkaW5nOiAxMHB4ICRuYXZiYXItcGFkZGluZy1ob3Jpem9udGFsO1xuICBib3JkZXItdG9wOiAxcHggc29saWQgdHJhbnNwYXJlbnQ7XG4gIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCB0cmFuc3BhcmVudDtcbiAgJHNoYWRvdzogaW5zZXQgMCAxcHggMCByZ2JhKDI1NSwyNTUsMjU1LC4xKSwgMCAxcHggMCByZ2JhKDI1NSwyNTUsMjU1LC4xKTtcbiAgQGluY2x1ZGUgYm94LXNoYWRvdygkc2hhZG93KTtcblxuICAvLyBNaXhpbiBiZWhhdmlvciBmb3Igb3B0aW11bSBkaXNwbGF5XG4gIEBpbmNsdWRlIGZvcm0taW5saW5lO1xuXG4gIC5mb3JtLWdyb3VwIHtcbiAgICBAbWVkaWEgKG1heC13aWR0aDogJGdyaWQtZmxvYXQtYnJlYWtwb2ludC1tYXgpIHtcbiAgICAgIG1hcmdpbi1ib3R0b206IDVweDtcblxuICAgICAgJjpsYXN0LWNoaWxkIHtcbiAgICAgICAgbWFyZ2luLWJvdHRvbTogMDtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBWZXJ0aWNhbGx5IGNlbnRlciBpbiBleHBhbmRlZCwgaG9yaXpvbnRhbCBuYXZiYXJcbiAgQGluY2x1ZGUgbmF2YmFyLXZlcnRpY2FsLWFsaWduKCRpbnB1dC1oZWlnaHQtYmFzZSk7XG5cbiAgLy8gVW5kbyAxMDAlIHdpZHRoIGZvciBwdWxsIGNsYXNzZXNcbiAgQG1lZGlhIChtaW4td2lkdGg6ICRncmlkLWZsb2F0LWJyZWFrcG9pbnQpIHtcbiAgICB3aWR0aDogYXV0bztcbiAgICBib3JkZXI6IDA7XG4gICAgbWFyZ2luLWxlZnQ6IDA7XG4gICAgbWFyZ2luLXJpZ2h0OiAwO1xuICAgIHBhZGRpbmctdG9wOiAwO1xuICAgIHBhZGRpbmctYm90dG9tOiAwO1xuICAgIEBpbmNsdWRlIGJveC1zaGFkb3cobm9uZSk7XG4gIH1cbn1cblxuXG4vLyBEcm9wZG93biBtZW51c1xuXG4vLyBNZW51IHBvc2l0aW9uIGFuZCBtZW51IGNhcmV0c1xuLm5hdmJhci1uYXYgPiBsaSA+IC5kcm9wZG93bi1tZW51IHtcbiAgbWFyZ2luLXRvcDogMDtcbiAgQGluY2x1ZGUgYm9yZGVyLXRvcC1yYWRpdXMoMCk7XG59XG4vLyBNZW51IHBvc2l0aW9uIGFuZCBtZW51IGNhcmV0IHN1cHBvcnQgZm9yIGRyb3B1cHMgdmlhIGV4dHJhIGRyb3B1cCBjbGFzc1xuLm5hdmJhci1maXhlZC1ib3R0b20gLm5hdmJhci1uYXYgPiBsaSA+IC5kcm9wZG93bi1tZW51IHtcbiAgbWFyZ2luLWJvdHRvbTogMDtcbiAgQGluY2x1ZGUgYm9yZGVyLXRvcC1yYWRpdXMoJG5hdmJhci1ib3JkZXItcmFkaXVzKTtcbiAgQGluY2x1ZGUgYm9yZGVyLWJvdHRvbS1yYWRpdXMoMCk7XG59XG5cblxuLy8gQnV0dG9ucyBpbiBuYXZiYXJzXG4vL1xuLy8gVmVydGljYWxseSBjZW50ZXIgYSBidXR0b24gd2l0aGluIGEgbmF2YmFyICh3aGVuICpub3QqIGluIGEgZm9ybSkuXG5cbi5uYXZiYXItYnRuIHtcbiAgQGluY2x1ZGUgbmF2YmFyLXZlcnRpY2FsLWFsaWduKCRpbnB1dC1oZWlnaHQtYmFzZSk7XG5cbiAgJi5idG4tc20ge1xuICAgIEBpbmNsdWRlIG5hdmJhci12ZXJ0aWNhbC1hbGlnbigkaW5wdXQtaGVpZ2h0LXNtYWxsKTtcbiAgfVxuICAmLmJ0bi14cyB7XG4gICAgQGluY2x1ZGUgbmF2YmFyLXZlcnRpY2FsLWFsaWduKDIyKTtcbiAgfVxufVxuXG5cbi8vIFRleHQgaW4gbmF2YmFyc1xuLy9cbi8vIEFkZCBhIGNsYXNzIHRvIG1ha2UgYW55IGVsZW1lbnQgcHJvcGVybHkgYWxpZ24gaXRzZWxmIHZlcnRpY2FsbHkgd2l0aGluIHRoZSBuYXZiYXJzLlxuXG4ubmF2YmFyLXRleHQge1xuICBAaW5jbHVkZSBuYXZiYXItdmVydGljYWwtYWxpZ24oJGxpbmUtaGVpZ2h0LWNvbXB1dGVkKTtcblxuICBAbWVkaWEgKG1pbi13aWR0aDogJGdyaWQtZmxvYXQtYnJlYWtwb2ludCkge1xuICAgIGZsb2F0OiBsZWZ0O1xuICAgIG1hcmdpbi1sZWZ0OiAkbmF2YmFyLXBhZGRpbmctaG9yaXpvbnRhbDtcbiAgICBtYXJnaW4tcmlnaHQ6ICRuYXZiYXItcGFkZGluZy1ob3Jpem9udGFsO1xuICB9XG59XG5cblxuLy8gQ29tcG9uZW50IGFsaWdubWVudFxuLy9cbi8vIFJlcHVycG9zZSB0aGUgcHVsbCB1dGlsaXRpZXMgYXMgdGhlaXIgb3duIG5hdmJhciB1dGlsaXRpZXMgdG8gYXZvaWQgc3BlY2lmaWNpdHlcbi8vIGlzc3VlcyB3aXRoIHBhcmVudHMgYW5kIGNoYWluaW5nLiBPbmx5IGRvIHRoaXMgd2hlbiB0aGUgbmF2YmFyIGlzIHVuY29sbGFwc2VkXG4vLyB0aG91Z2ggc28gdGhhdCBuYXZiYXIgY29udGVudHMgcHJvcGVybHkgc3RhY2sgYW5kIGFsaWduIGluIG1vYmlsZS5cbi8vXG4vLyBEZWNsYXJlZCBhZnRlciB0aGUgbmF2YmFyIGNvbXBvbmVudHMgdG8gZW5zdXJlIG1vcmUgc3BlY2lmaWNpdHkgb24gdGhlIG1hcmdpbnMuXG5cbkBtZWRpYSAobWluLXdpZHRoOiAkZ3JpZC1mbG9hdC1icmVha3BvaW50KSB7XG4gIC5uYXZiYXItbGVmdCB7XG4gICAgZmxvYXQ6IGxlZnQgIWltcG9ydGFudDtcbiAgfVxuICAubmF2YmFyLXJpZ2h0IHtcbiAgICBmbG9hdDogcmlnaHQgIWltcG9ydGFudDtcbiAgbWFyZ2luLXJpZ2h0OiAtJG5hdmJhci1wYWRkaW5nLWhvcml6b250YWw7XG5cbiAgICB+IC5uYXZiYXItcmlnaHQge1xuICAgICAgbWFyZ2luLXJpZ2h0OiAwO1xuICAgIH1cbiAgfVxufVxuXG5cbi8vIEFsdGVybmF0ZSBuYXZiYXJzXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4vLyBEZWZhdWx0IG5hdmJhclxuLm5hdmJhci1kZWZhdWx0IHtcbiAgYmFja2dyb3VuZC1jb2xvcjogJG5hdmJhci1kZWZhdWx0LWJnO1xuICBib3JkZXItY29sb3I6ICRuYXZiYXItZGVmYXVsdC1ib3JkZXI7XG5cbiAgLm5hdmJhci1icmFuZCB7XG4gICAgY29sb3I6ICRuYXZiYXItZGVmYXVsdC1icmFuZC1jb2xvcjtcbiAgICAmOmhvdmVyLFxuICAgICY6Zm9jdXMge1xuICAgICAgY29sb3I6ICRuYXZiYXItZGVmYXVsdC1icmFuZC1ob3Zlci1jb2xvcjtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6ICRuYXZiYXItZGVmYXVsdC1icmFuZC1ob3Zlci1iZztcbiAgICB9XG4gIH1cblxuICAubmF2YmFyLXRleHQge1xuICAgIGNvbG9yOiAkbmF2YmFyLWRlZmF1bHQtY29sb3I7XG4gIH1cblxuICAubmF2YmFyLW5hdiB7XG4gICAgPiBsaSA+IGEge1xuICAgICAgY29sb3I6ICRuYXZiYXItZGVmYXVsdC1saW5rLWNvbG9yO1xuXG4gICAgICAmOmhvdmVyLFxuICAgICAgJjpmb2N1cyB7XG4gICAgICAgIGNvbG9yOiAkbmF2YmFyLWRlZmF1bHQtbGluay1ob3Zlci1jb2xvcjtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogJG5hdmJhci1kZWZhdWx0LWxpbmstaG92ZXItYmc7XG4gICAgICB9XG4gICAgfVxuICAgID4gLmFjdGl2ZSA+IGEge1xuICAgICAgJixcbiAgICAgICY6aG92ZXIsXG4gICAgICAmOmZvY3VzIHtcbiAgICAgICAgY29sb3I6ICRuYXZiYXItZGVmYXVsdC1saW5rLWFjdGl2ZS1jb2xvcjtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogJG5hdmJhci1kZWZhdWx0LWxpbmstYWN0aXZlLWJnO1xuICAgICAgfVxuICAgIH1cbiAgICA+IC5kaXNhYmxlZCA+IGEge1xuICAgICAgJixcbiAgICAgICY6aG92ZXIsXG4gICAgICAmOmZvY3VzIHtcbiAgICAgICAgY29sb3I6ICRuYXZiYXItZGVmYXVsdC1saW5rLWRpc2FibGVkLWNvbG9yO1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkbmF2YmFyLWRlZmF1bHQtbGluay1kaXNhYmxlZC1iZztcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAubmF2YmFyLXRvZ2dsZSB7XG4gICAgYm9yZGVyLWNvbG9yOiAkbmF2YmFyLWRlZmF1bHQtdG9nZ2xlLWJvcmRlci1jb2xvcjtcbiAgICAmOmhvdmVyLFxuICAgICY6Zm9jdXMge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogJG5hdmJhci1kZWZhdWx0LXRvZ2dsZS1ob3Zlci1iZztcbiAgICB9XG4gICAgLmljb24tYmFyIHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6ICRuYXZiYXItZGVmYXVsdC10b2dnbGUtaWNvbi1iYXItYmc7XG4gICAgfVxuICB9XG5cbiAgLm5hdmJhci1jb2xsYXBzZSxcbiAgLm5hdmJhci1mb3JtIHtcbiAgICBib3JkZXItY29sb3I6ICRuYXZiYXItZGVmYXVsdC1ib3JkZXI7XG4gIH1cblxuICAvLyBEcm9wZG93biBtZW51IGl0ZW1zXG4gIC5uYXZiYXItbmF2IHtcbiAgICAvLyBSZW1vdmUgYmFja2dyb3VuZCBjb2xvciBmcm9tIG9wZW4gZHJvcGRvd25cbiAgICA+IC5vcGVuID4gYSB7XG4gICAgICAmLFxuICAgICAgJjpob3ZlcixcbiAgICAgICY6Zm9jdXMge1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkbmF2YmFyLWRlZmF1bHQtbGluay1hY3RpdmUtYmc7XG4gICAgICAgIGNvbG9yOiAkbmF2YmFyLWRlZmF1bHQtbGluay1hY3RpdmUtY29sb3I7XG4gICAgICB9XG4gICAgfVxuXG4gICAgQG1lZGlhIChtYXgtd2lkdGg6ICRncmlkLWZsb2F0LWJyZWFrcG9pbnQtbWF4KSB7XG4gICAgICAvLyBEcm9wZG93bnMgZ2V0IGN1c3RvbSBkaXNwbGF5IHdoZW4gY29sbGFwc2VkXG4gICAgICAub3BlbiAuZHJvcGRvd24tbWVudSB7XG4gICAgICAgID4gbGkgPiBhIHtcbiAgICAgICAgICBjb2xvcjogJG5hdmJhci1kZWZhdWx0LWxpbmstY29sb3I7XG4gICAgICAgICAgJjpob3ZlcixcbiAgICAgICAgICAmOmZvY3VzIHtcbiAgICAgICAgICAgIGNvbG9yOiAkbmF2YmFyLWRlZmF1bHQtbGluay1ob3Zlci1jb2xvcjtcbiAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICRuYXZiYXItZGVmYXVsdC1saW5rLWhvdmVyLWJnO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICA+IC5hY3RpdmUgPiBhIHtcbiAgICAgICAgICAmLFxuICAgICAgICAgICY6aG92ZXIsXG4gICAgICAgICAgJjpmb2N1cyB7XG4gICAgICAgICAgICBjb2xvcjogJG5hdmJhci1kZWZhdWx0LWxpbmstYWN0aXZlLWNvbG9yO1xuICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogJG5hdmJhci1kZWZhdWx0LWxpbmstYWN0aXZlLWJnO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICA+IC5kaXNhYmxlZCA+IGEge1xuICAgICAgICAgICYsXG4gICAgICAgICAgJjpob3ZlcixcbiAgICAgICAgICAmOmZvY3VzIHtcbiAgICAgICAgICAgIGNvbG9yOiAkbmF2YmFyLWRlZmF1bHQtbGluay1kaXNhYmxlZC1jb2xvcjtcbiAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICRuYXZiYXItZGVmYXVsdC1saW5rLWRpc2FibGVkLWJnO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG5cbiAgLy8gTGlua3MgaW4gbmF2YmFyc1xuICAvL1xuICAvLyBBZGQgYSBjbGFzcyB0byBlbnN1cmUgbGlua3Mgb3V0c2lkZSB0aGUgbmF2YmFyIG5hdiBhcmUgY29sb3JlZCBjb3JyZWN0bHkuXG5cbiAgLm5hdmJhci1saW5rIHtcbiAgICBjb2xvcjogJG5hdmJhci1kZWZhdWx0LWxpbmstY29sb3I7XG4gICAgJjpob3ZlciB7XG4gICAgICBjb2xvcjogJG5hdmJhci1kZWZhdWx0LWxpbmstaG92ZXItY29sb3I7XG4gICAgfVxuICB9XG5cbiAgLmJ0bi1saW5rIHtcbiAgICBjb2xvcjogJG5hdmJhci1kZWZhdWx0LWxpbmstY29sb3I7XG4gICAgJjpob3ZlcixcbiAgICAmOmZvY3VzIHtcbiAgICAgIGNvbG9yOiAkbmF2YmFyLWRlZmF1bHQtbGluay1ob3Zlci1jb2xvcjtcbiAgICB9XG4gICAgJltkaXNhYmxlZF0sXG4gICAgZmllbGRzZXRbZGlzYWJsZWRdICYge1xuICAgICAgJjpob3ZlcixcbiAgICAgICY6Zm9jdXMge1xuICAgICAgICBjb2xvcjogJG5hdmJhci1kZWZhdWx0LWxpbmstZGlzYWJsZWQtY29sb3I7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbi8vIEludmVyc2UgbmF2YmFyXG5cbi5uYXZiYXItaW52ZXJzZSB7XG4gIGJhY2tncm91bmQtY29sb3I6ICRuYXZiYXItaW52ZXJzZS1iZztcbiAgYm9yZGVyLWNvbG9yOiAkbmF2YmFyLWludmVyc2UtYm9yZGVyO1xuXG4gIC5uYXZiYXItYnJhbmQge1xuICAgIGNvbG9yOiAkbmF2YmFyLWludmVyc2UtYnJhbmQtY29sb3I7XG4gICAgJjpob3ZlcixcbiAgICAmOmZvY3VzIHtcbiAgICAgIGNvbG9yOiAkbmF2YmFyLWludmVyc2UtYnJhbmQtaG92ZXItY29sb3I7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkbmF2YmFyLWludmVyc2UtYnJhbmQtaG92ZXItYmc7XG4gICAgfVxuICB9XG5cbiAgLm5hdmJhci10ZXh0IHtcbiAgICBjb2xvcjogJG5hdmJhci1pbnZlcnNlLWNvbG9yO1xuICB9XG5cbiAgLm5hdmJhci1uYXYge1xuICAgID4gbGkgPiBhIHtcbiAgICAgIGNvbG9yOiAkbmF2YmFyLWludmVyc2UtbGluay1jb2xvcjtcblxuICAgICAgJjpob3ZlcixcbiAgICAgICY6Zm9jdXMge1xuICAgICAgICBjb2xvcjogJG5hdmJhci1pbnZlcnNlLWxpbmstaG92ZXItY29sb3I7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6ICRuYXZiYXItaW52ZXJzZS1saW5rLWhvdmVyLWJnO1xuICAgICAgfVxuICAgIH1cbiAgICA+IC5hY3RpdmUgPiBhIHtcbiAgICAgICYsXG4gICAgICAmOmhvdmVyLFxuICAgICAgJjpmb2N1cyB7XG4gICAgICAgIGNvbG9yOiAkbmF2YmFyLWludmVyc2UtbGluay1hY3RpdmUtY29sb3I7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6ICRuYXZiYXItaW52ZXJzZS1saW5rLWFjdGl2ZS1iZztcbiAgICAgIH1cbiAgICB9XG4gICAgPiAuZGlzYWJsZWQgPiBhIHtcbiAgICAgICYsXG4gICAgICAmOmhvdmVyLFxuICAgICAgJjpmb2N1cyB7XG4gICAgICAgIGNvbG9yOiAkbmF2YmFyLWludmVyc2UtbGluay1kaXNhYmxlZC1jb2xvcjtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogJG5hdmJhci1pbnZlcnNlLWxpbmstZGlzYWJsZWQtYmc7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gRGFya2VuIHRoZSByZXNwb25zaXZlIG5hdiB0b2dnbGVcbiAgLm5hdmJhci10b2dnbGUge1xuICAgIGJvcmRlci1jb2xvcjogJG5hdmJhci1pbnZlcnNlLXRvZ2dsZS1ib3JkZXItY29sb3I7XG4gICAgJjpob3ZlcixcbiAgICAmOmZvY3VzIHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6ICRuYXZiYXItaW52ZXJzZS10b2dnbGUtaG92ZXItYmc7XG4gICAgfVxuICAgIC5pY29uLWJhciB7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkbmF2YmFyLWludmVyc2UtdG9nZ2xlLWljb24tYmFyLWJnO1xuICAgIH1cbiAgfVxuXG4gIC5uYXZiYXItY29sbGFwc2UsXG4gIC5uYXZiYXItZm9ybSB7XG4gICAgYm9yZGVyLWNvbG9yOiBkYXJrZW4oJG5hdmJhci1pbnZlcnNlLWJnLCA3JSk7XG4gIH1cblxuICAvLyBEcm9wZG93bnNcbiAgLm5hdmJhci1uYXYge1xuICAgID4gLm9wZW4gPiBhIHtcbiAgICAgICYsXG4gICAgICAmOmhvdmVyLFxuICAgICAgJjpmb2N1cyB7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6ICRuYXZiYXItaW52ZXJzZS1saW5rLWFjdGl2ZS1iZztcbiAgICAgICAgY29sb3I6ICRuYXZiYXItaW52ZXJzZS1saW5rLWFjdGl2ZS1jb2xvcjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBAbWVkaWEgKG1heC13aWR0aDogJGdyaWQtZmxvYXQtYnJlYWtwb2ludC1tYXgpIHtcbiAgICAgIC8vIERyb3Bkb3ducyBnZXQgY3VzdG9tIGRpc3BsYXlcbiAgICAgIC5vcGVuIC5kcm9wZG93bi1tZW51IHtcbiAgICAgICAgPiAuZHJvcGRvd24taGVhZGVyIHtcbiAgICAgICAgICBib3JkZXItY29sb3I6ICRuYXZiYXItaW52ZXJzZS1ib3JkZXI7XG4gICAgICAgIH1cbiAgICAgICAgLmRpdmlkZXIge1xuICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICRuYXZiYXItaW52ZXJzZS1ib3JkZXI7XG4gICAgICAgIH1cbiAgICAgICAgPiBsaSA+IGEge1xuICAgICAgICAgIGNvbG9yOiAkbmF2YmFyLWludmVyc2UtbGluay1jb2xvcjtcbiAgICAgICAgICAmOmhvdmVyLFxuICAgICAgICAgICY6Zm9jdXMge1xuICAgICAgICAgICAgY29sb3I6ICRuYXZiYXItaW52ZXJzZS1saW5rLWhvdmVyLWNvbG9yO1xuICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogJG5hdmJhci1pbnZlcnNlLWxpbmstaG92ZXItYmc7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgID4gLmFjdGl2ZSA+IGEge1xuICAgICAgICAgICYsXG4gICAgICAgICAgJjpob3ZlcixcbiAgICAgICAgICAmOmZvY3VzIHtcbiAgICAgICAgICAgIGNvbG9yOiAkbmF2YmFyLWludmVyc2UtbGluay1hY3RpdmUtY29sb3I7XG4gICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkbmF2YmFyLWludmVyc2UtbGluay1hY3RpdmUtYmc7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgID4gLmRpc2FibGVkID4gYSB7XG4gICAgICAgICAgJixcbiAgICAgICAgICAmOmhvdmVyLFxuICAgICAgICAgICY6Zm9jdXMge1xuICAgICAgICAgICAgY29sb3I6ICRuYXZiYXItaW52ZXJzZS1saW5rLWRpc2FibGVkLWNvbG9yO1xuICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogJG5hdmJhci1pbnZlcnNlLWxpbmstZGlzYWJsZWQtYmc7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLm5hdmJhci1saW5rIHtcbiAgICBjb2xvcjogJG5hdmJhci1pbnZlcnNlLWxpbmstY29sb3I7XG4gICAgJjpob3ZlciB7XG4gICAgICBjb2xvcjogJG5hdmJhci1pbnZlcnNlLWxpbmstaG92ZXItY29sb3I7XG4gICAgfVxuICB9XG5cbiAgLmJ0bi1saW5rIHtcbiAgICBjb2xvcjogJG5hdmJhci1pbnZlcnNlLWxpbmstY29sb3I7XG4gICAgJjpob3ZlcixcbiAgICAmOmZvY3VzIHtcbiAgICAgIGNvbG9yOiAkbmF2YmFyLWludmVyc2UtbGluay1ob3Zlci1jb2xvcjtcbiAgICB9XG4gICAgJltkaXNhYmxlZF0sXG4gICAgZmllbGRzZXRbZGlzYWJsZWRdICYge1xuICAgICAgJjpob3ZlcixcbiAgICAgICY6Zm9jdXMge1xuICAgICAgICBjb2xvcjogJG5hdmJhci1pbnZlcnNlLWxpbmstZGlzYWJsZWQtY29sb3I7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbi5uYXZiYXItZGVmYXVsdC5uYXZiYXItc3RpY2t5IHtcbiAgcG9zaXRpb246IGZpeGVkO1xuICB0b3A6IDA7XG4gIGxlZnQ6IDA7XG4gIHJpZ2h0OiAwO1xuICB6LWluZGV4OiA5OTk5O1xuICBwYWRkaW5nOiAxMHB4IDA7XG4gIG9wYWNpdHk6IDA7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlM2QoMCwgLTEwMCUsIDApO1xuICBib3gtc2hhZG93OiAwIDJweCA2cHggMCByZ2JhKDAsMCwwLDAuMDcpO1xuICBiYWNrZ3JvdW5kOiAjZmZmO1xuXG4gIEBzdXBwb3J0cyAoYmFja2Ryb3AtZmlsdGVyOiBzYXR1cmF0ZSgxODAlKSBibHVyKDIwcHgpKSB7XG4gICAgYmFja2dyb3VuZDogcmdiYSgjZmZmLCAwLjkpO1xuICAgIGJhY2tkcm9wLWZpbHRlcjogc2F0dXJhdGUoMTgwJSkgYmx1cigyMHB4KTtcbiAgfVxuXG4gIC5uYXZiYXItbmF2ID4gbGkuaGVhZGVyLWJ0bi13aGl0ZSBhIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjNDg4YWZmO1xuICAgIGNvbG9yOiAjZmZmO1xuXG4gICAgJjpob3ZlciB7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDc0LDEzOSwyNTIsLjkpO1xuICAgICAgY29sb3I6ICNmZmY7XG4gICAgfVxuICB9XG5cbiAgJi0tc2hvdyxcbiAgJi0taGlkZSB7XG4gICAgYW5pbWF0aW9uLWZpbGwtbW9kZTpmb3J3YXJkcztcbiAgfVxuXG4gICYtLWhpZGUge1xuICAgIGFuaW1hdGlvbi1kdXJhdGlvbjogMC4xcztcbiAgICBhbmltYXRpb24tbmFtZTogc2xpZGV1cDtcblxuICAgIEBrZXlmcmFtZXMgc2xpZGV1cCB7XG4gICAgICAwJSB7XG4gICAgICAgIG9wYWNpdHk6IDE7XG4gICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlM2QoMCwgMCwgMCk7XG4gICAgICB9XG4gICAgICAxMDAlIHtcbiAgICAgICAgb3BhY2l0eTogMDtcbiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUzZCgwLCAtMTAwJSwgMCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgJi0tc2hvdyB7XG4gICAgYW5pbWF0aW9uLWR1cmF0aW9uOiAwLjVzO1xuICAgIGFuaW1hdGlvbi1uYW1lOiBzbGlkZWRvd247XG4gICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKDAuMDc1LCAwLjgyLCAwLjE2NSwgMSk7XG5cbiAgICBAa2V5ZnJhbWVzIHNsaWRlZG93biB7XG4gICAgICAwJSB7XG4gICAgICAgIG9wYWNpdHk6IDA7XG4gICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlM2QoMCwgLTEwMCUsIDApO1xuICAgICAgfVxuICAgICAgMSUge1xuICAgICAgICBvcGFjaXR5OiAxO1xuICAgICAgfVxuICAgICAgMTAwJSB7XG4gICAgICAgIG9wYWNpdHk6IDE7XG4gICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlM2QoMCwgMCwgMCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgQG1lZGlhIChtYXgtd2lkdGg6ICRzY3JlZW4teHMtbWF4KSB7XG4gICAgZGlzcGxheTogbm9uZTtcbiAgfVxufVxuIiwiLy8gTmF2YmFyIHZlcnRpY2FsIGFsaWduXG4vL1xuLy8gVmVydGljYWxseSBjZW50ZXIgZWxlbWVudHMgaW4gdGhlIG5hdmJhci5cbi8vIEV4YW1wbGU6IGFuIGVsZW1lbnQgaGFzIGEgaGVpZ2h0IG9mIDMwcHgsIHNvIHdyaXRlIG91dCBgLm5hdmJhci12ZXJ0aWNhbC1hbGlnbigzMHB4KTtgIHRvIGNhbGN1bGF0ZSB0aGUgYXBwcm9wcmlhdGUgdG9wIG1hcmdpbi5cblxuQG1peGluIG5hdmJhci12ZXJ0aWNhbC1hbGlnbigkZWxlbWVudC1oZWlnaHQpIHtcbiAgbWFyZ2luLXRvcDogKCgkbmF2YmFyLWhlaWdodCAtICRlbGVtZW50LWhlaWdodCkgLyAyKTtcbiAgbWFyZ2luLWJvdHRvbTogKCgkbmF2YmFyLWhlaWdodCAtICRlbGVtZW50LWhlaWdodCkgLyAyKTtcbn1cbiIsIi8vXG4vLyBCYWRnZXNcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cblxuLy8gQmFzZSBjbGFzc1xuLmJhZGdlIHtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICBtaW4td2lkdGg6IDEwcHg7XG4gIHBhZGRpbmc6IDNweCA3cHg7XG4gIGZvbnQtc2l6ZTogJGZvbnQtc2l6ZS1zbWFsbDtcbiAgZm9udC13ZWlnaHQ6ICRiYWRnZS1mb250LXdlaWdodDtcbiAgY29sb3I6ICRiYWRnZS1jb2xvcjtcbiAgbGluZS1oZWlnaHQ6ICRiYWRnZS1saW5lLWhlaWdodDtcbiAgdmVydGljYWwtYWxpZ246IGJhc2VsaW5lO1xuICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIGJhY2tncm91bmQtY29sb3I6ICRiYWRnZS1iZztcbiAgYm9yZGVyLXJhZGl1czogJGJhZGdlLWJvcmRlci1yYWRpdXM7XG5cbiAgLy8gRW1wdHkgYmFkZ2VzIGNvbGxhcHNlIGF1dG9tYXRpY2FsbHkgKG5vdCBhdmFpbGFibGUgaW4gSUU4KVxuICAmOmVtcHR5IHtcbiAgICBkaXNwbGF5OiBub25lO1xuICB9XG5cbiAgLy8gUXVpY2sgZml4IGZvciBiYWRnZXMgaW4gYnV0dG9uc1xuICAuYnRuICYge1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICB0b3A6IC0xcHg7XG4gIH1cblxuICAuYnRuLXhzICYsXG4gIC5idG4tZ3JvdXAteHMgPiAuYnRuICYge1xuICAgIHRvcDogMDtcbiAgICBwYWRkaW5nOiAxcHggNXB4O1xuICB9XG5cbiAgLy8gW2NvbnZlcnRlcl0gZXh0cmFjdGVkIGEmIHRvIGEuYmFkZ2VcblxuICAvLyBBY2NvdW50IGZvciBiYWRnZXMgaW4gbmF2c1xuICAubGlzdC1ncm91cC1pdGVtLmFjdGl2ZSA+ICYsXG4gIC5uYXYtcGlsbHMgPiAuYWN0aXZlID4gYSA+ICYge1xuICAgIGNvbG9yOiAkYmFkZ2UtYWN0aXZlLWNvbG9yO1xuICAgIGJhY2tncm91bmQtY29sb3I6ICRiYWRnZS1hY3RpdmUtYmc7XG4gIH1cblxuICAubGlzdC1ncm91cC1pdGVtID4gJiB7XG4gICAgZmxvYXQ6IHJpZ2h0O1xuICB9XG5cbiAgLmxpc3QtZ3JvdXAtaXRlbSA+ICYgKyAmIHtcbiAgICBtYXJnaW4tcmlnaHQ6IDVweDtcbiAgfVxuXG4gIC5uYXYtcGlsbHMgPiBsaSA+IGEgPiAmIHtcbiAgICBtYXJnaW4tbGVmdDogM3B4O1xuICB9XG59XG5cbi8vIEhvdmVyIHN0YXRlLCBidXQgb25seSBmb3IgbGlua3NcbmEuYmFkZ2Uge1xuICAmOmhvdmVyLFxuICAmOmZvY3VzIHtcbiAgICBjb2xvcjogJGJhZGdlLWxpbmstaG92ZXItY29sb3I7XG4gICAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xuICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgfVxufVxuIiwiLy9cbi8vIE1vZGFsc1xuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLy8gLm1vZGFsLW9wZW4gICAgICAtIGJvZHkgY2xhc3MgZm9yIGtpbGxpbmcgdGhlIHNjcm9sbFxuLy8gLm1vZGFsICAgICAgICAgICAtIGNvbnRhaW5lciB0byBzY3JvbGwgd2l0aGluXG4vLyAubW9kYWwtZGlhbG9nICAgIC0gcG9zaXRpb25pbmcgc2hlbGwgZm9yIHRoZSBhY3R1YWwgbW9kYWxcbi8vIC5tb2RhbC1jb250ZW50ICAgLSBhY3R1YWwgbW9kYWwgdy8gYmcgYW5kIGNvcm5lcnMgYW5kIHNoaXRcblxuLy8gS2lsbCB0aGUgc2Nyb2xsIG9uIHRoZSBib2R5XG4ubW9kYWwtb3BlbiB7XG4gIG92ZXJmbG93OiBoaWRkZW47XG59XG5cbi8vIENvbnRhaW5lciB0aGF0IHRoZSBtb2RhbCBzY3JvbGxzIHdpdGhpblxuLm1vZGFsIHtcbiAgZGlzcGxheTogbm9uZTtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgcG9zaXRpb246IGZpeGVkO1xuICB0b3A6IDA7XG4gIHJpZ2h0OiAwO1xuICBib3R0b206IDA7XG4gIGxlZnQ6IDA7XG4gIHotaW5kZXg6ICR6aW5kZXgtbW9kYWw7XG4gIC13ZWJraXQtb3ZlcmZsb3ctc2Nyb2xsaW5nOiB0b3VjaDtcblxuICAvLyBQcmV2ZW50IENocm9tZSBvbiBXaW5kb3dzIGZyb20gYWRkaW5nIGEgZm9jdXMgb3V0bGluZS4gRm9yIGRldGFpbHMsIHNlZVxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvcHVsbC8xMDk1MS5cbiAgb3V0bGluZTogMDtcblxuICAvLyBXaGVuIGZhZGluZyBpbiB0aGUgbW9kYWwsIGFuaW1hdGUgaXQgdG8gc2xpZGUgZG93blxuICAmLmZhZGUgLm1vZGFsLWRpYWxvZyB7XG4gICAgQGluY2x1ZGUgdHJhbnNsYXRlKDAsIC0yNSUpO1xuICAgIEBpbmNsdWRlIHRyYW5zaXRpb24tdHJhbnNmb3JtKDAuM3MgZWFzZS1vdXQpO1xuICB9XG4gICYuaW4gLm1vZGFsLWRpYWxvZyB7IEBpbmNsdWRlIHRyYW5zbGF0ZSgwLCAwKSB9XG59XG4ubW9kYWwtb3BlbiAubW9kYWwge1xuICBvdmVyZmxvdy14OiBoaWRkZW47XG4gIG92ZXJmbG93LXk6IGF1dG87XG59XG5cbi8vIFNoZWxsIGRpdiB0byBwb3NpdGlvbiB0aGUgbW9kYWwgd2l0aCBib3R0b20gcGFkZGluZ1xuLm1vZGFsLWRpYWxvZyB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgd2lkdGg6IGF1dG87XG4gIG1hcmdpbjogMTBweDtcbn1cblxuLy8gQWN0dWFsIG1vZGFsXG4ubW9kYWwtY29udGVudCB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgYmFja2dyb3VuZC1jb2xvcjogJG1vZGFsLWNvbnRlbnQtYmc7XG4gIGJvcmRlcjogMXB4IHNvbGlkICRtb2RhbC1jb250ZW50LWZhbGxiYWNrLWJvcmRlci1jb2xvcjsgLy9vbGQgYnJvd3NlcnMgZmFsbGJhY2sgKGllOCBldGMpXG4gIGJvcmRlcjogMXB4IHNvbGlkICRtb2RhbC1jb250ZW50LWJvcmRlci1jb2xvcjtcbiAgYm9yZGVyLXJhZGl1czogJGJvcmRlci1yYWRpdXMtbGFyZ2U7XG4gIEBpbmNsdWRlIGJveC1zaGFkb3coMCAzcHggOXB4IHJnYmEoMCwwLDAsLjUpKTtcbiAgYmFja2dyb3VuZC1jbGlwOiBwYWRkaW5nLWJveDtcbiAgLy8gUmVtb3ZlIGZvY3VzIG91dGxpbmUgZnJvbSBvcGVuZWQgbW9kYWxcbiAgb3V0bGluZTogMDtcbn1cblxuLy8gTW9kYWwgYmFja2dyb3VuZFxuLm1vZGFsLWJhY2tkcm9wIHtcbiAgcG9zaXRpb246IGZpeGVkO1xuICB0b3A6IDA7XG4gIHJpZ2h0OiAwO1xuICBib3R0b206IDA7XG4gIGxlZnQ6IDA7XG4gIHotaW5kZXg6ICR6aW5kZXgtbW9kYWwtYmFja2dyb3VuZDtcbiAgYmFja2dyb3VuZC1jb2xvcjogJG1vZGFsLWJhY2tkcm9wLWJnO1xuICAvLyBGYWRlIGZvciBiYWNrZHJvcFxuICAmLmZhZGUgeyBAaW5jbHVkZSBvcGFjaXR5KDApOyB9XG4gICYuaW4geyBAaW5jbHVkZSBvcGFjaXR5KCRtb2RhbC1iYWNrZHJvcC1vcGFjaXR5KTsgfVxufVxuXG4vLyBNb2RhbCBoZWFkZXJcbi8vIFRvcCBzZWN0aW9uIG9mIHRoZSBtb2RhbCB3LyB0aXRsZSBhbmQgZGlzbWlzc1xuLm1vZGFsLWhlYWRlciB7XG4gIHBhZGRpbmc6ICRtb2RhbC10aXRsZS1wYWRkaW5nO1xuICBib3JkZXItYm90dG9tOiAxcHggc29saWQgJG1vZGFsLWhlYWRlci1ib3JkZXItY29sb3I7XG4gIG1pbi1oZWlnaHQ6ICgkbW9kYWwtdGl0bGUtcGFkZGluZyArICRtb2RhbC10aXRsZS1saW5lLWhlaWdodCk7XG59XG4vLyBDbG9zZSBpY29uXG4ubW9kYWwtaGVhZGVyIC5jbG9zZSB7XG4gIG1hcmdpbi10b3A6IC0ycHg7XG59XG5cbi8vIFRpdGxlIHRleHQgd2l0aGluIGhlYWRlclxuLm1vZGFsLXRpdGxlIHtcbiAgbWFyZ2luOiAwO1xuICBsaW5lLWhlaWdodDogJG1vZGFsLXRpdGxlLWxpbmUtaGVpZ2h0O1xufVxuXG4vLyBNb2RhbCBib2R5XG4vLyBXaGVyZSBhbGwgbW9kYWwgY29udGVudCByZXNpZGVzIChzaWJsaW5nIG9mIC5tb2RhbC1oZWFkZXIgYW5kIC5tb2RhbC1mb290ZXIpXG4ubW9kYWwtYm9keSB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgcGFkZGluZzogJG1vZGFsLWlubmVyLXBhZGRpbmc7XG59XG5cbi8vIEZvb3RlciAoZm9yIGFjdGlvbnMpXG4ubW9kYWwtZm9vdGVyIHtcbiAgcGFkZGluZzogJG1vZGFsLWlubmVyLXBhZGRpbmc7XG4gIHRleHQtYWxpZ246IHJpZ2h0OyAvLyByaWdodCBhbGlnbiBidXR0b25zXG4gIGJvcmRlci10b3A6IDFweCBzb2xpZCAkbW9kYWwtZm9vdGVyLWJvcmRlci1jb2xvcjtcbiAgQGluY2x1ZGUgY2xlYXJmaXg7IC8vIGNsZWFyIGl0IGluIGNhc2UgZm9sa3MgdXNlIC5wdWxsLSogY2xhc3NlcyBvbiBidXR0b25zXG5cbiAgLy8gUHJvcGVybHkgc3BhY2Ugb3V0IGJ1dHRvbnNcbiAgLmJ0biArIC5idG4ge1xuICAgIG1hcmdpbi1sZWZ0OiA1cHg7XG4gICAgbWFyZ2luLWJvdHRvbTogMDsgLy8gYWNjb3VudCBmb3IgaW5wdXRbdHlwZT1cInN1Ym1pdFwiXSB3aGljaCBnZXRzIHRoZSBib3R0b20gbWFyZ2luIGxpa2UgYWxsIG90aGVyIGlucHV0c1xuICB9XG4gIC8vIGJ1dCBvdmVycmlkZSB0aGF0IGZvciBidXR0b24gZ3JvdXBzXG4gIC5idG4tZ3JvdXAgLmJ0biArIC5idG4ge1xuICAgIG1hcmdpbi1sZWZ0OiAtMXB4O1xuICB9XG4gIC8vIGFuZCBvdmVycmlkZSBpdCBmb3IgYmxvY2sgYnV0dG9ucyBhcyB3ZWxsXG4gIC5idG4tYmxvY2sgKyAuYnRuLWJsb2NrIHtcbiAgICBtYXJnaW4tbGVmdDogMDtcbiAgfVxufVxuXG4vLyBNZWFzdXJlIHNjcm9sbGJhciB3aWR0aCBmb3IgcGFkZGluZyBib2R5IGR1cmluZyBtb2RhbCBzaG93L2hpZGVcbi5tb2RhbC1zY3JvbGxiYXItbWVhc3VyZSB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgdG9wOiAtOTk5OXB4O1xuICB3aWR0aDogNTBweDtcbiAgaGVpZ2h0OiA1MHB4O1xuICBvdmVyZmxvdzogc2Nyb2xsO1xufVxuXG4vLyBTY2FsZSB1cCB0aGUgbW9kYWxcbkBtZWRpYSAobWluLXdpZHRoOiAkc2NyZWVuLXNtLW1pbikge1xuICAvLyBBdXRvbWF0aWNhbGx5IHNldCBtb2RhbCdzIHdpZHRoIGZvciBsYXJnZXIgdmlld3BvcnRzXG4gIC5tb2RhbC1kaWFsb2cge1xuICAgIHdpZHRoOiAkbW9kYWwtbWQ7XG4gICAgbWFyZ2luOiAzMHB4IGF1dG87XG4gIH1cbiAgLm1vZGFsLWNvbnRlbnQge1xuICAgIEBpbmNsdWRlIGJveC1zaGFkb3coMCA1cHggMTVweCByZ2JhKDAsMCwwLC41KSk7XG4gIH1cblxuICAvLyBNb2RhbCBzaXplc1xuICAubW9kYWwtc20geyB3aWR0aDogJG1vZGFsLXNtOyB9XG59XG5cbkBtZWRpYSAobWluLXdpZHRoOiAkc2NyZWVuLW1kLW1pbikge1xuICAubW9kYWwtbGcgeyB3aWR0aDogJG1vZGFsLWxnOyB9XG59XG4iLCIvL1xuLy8gVG9vbHRpcHNcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cblxuLy8gQmFzZSBjbGFzc1xuLnRvb2x0aXAge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHotaW5kZXg6ICR6aW5kZXgtdG9vbHRpcDtcbiAgZGlzcGxheTogYmxvY2s7XG4gIC8vIFJlc2V0IGZvbnQgYW5kIHRleHQgcHJvcGVydGllcyBnaXZlbiBuZXcgaW5zZXJ0aW9uIG1ldGhvZFxuICBmb250LWZhbWlseTogJGZvbnQtZmFtaWx5LWJhc2U7XG4gIGZvbnQtc2l6ZTogJGZvbnQtc2l6ZS1zbWFsbDtcbiAgZm9udC13ZWlnaHQ6IG5vcm1hbDtcbiAgbGluZS1oZWlnaHQ6IDEuNDtcbiAgQGluY2x1ZGUgb3BhY2l0eSgwKTtcblxuICAmLmluICAgICB7IEBpbmNsdWRlIG9wYWNpdHkoJHRvb2x0aXAtb3BhY2l0eSk7IH1cbiAgJi50b3AgICAgeyBtYXJnaW4tdG9wOiAgLTNweDsgcGFkZGluZzogJHRvb2x0aXAtYXJyb3ctd2lkdGggMDsgfVxuICAmLnJpZ2h0ICB7IG1hcmdpbi1sZWZ0OiAgM3B4OyBwYWRkaW5nOiAwICR0b29sdGlwLWFycm93LXdpZHRoOyB9XG4gICYuYm90dG9tIHsgbWFyZ2luLXRvcDogICAzcHg7IHBhZGRpbmc6ICR0b29sdGlwLWFycm93LXdpZHRoIDA7IH1cbiAgJi5sZWZ0ICAgeyBtYXJnaW4tbGVmdDogLTNweDsgcGFkZGluZzogMCAkdG9vbHRpcC1hcnJvdy13aWR0aDsgfVxufVxuXG4vLyBXcmFwcGVyIGZvciB0aGUgdG9vbHRpcCBjb250ZW50XG4udG9vbHRpcC1pbm5lciB7XG4gIG1heC13aWR0aDogJHRvb2x0aXAtbWF4LXdpZHRoO1xuICBwYWRkaW5nOiAzcHggOHB4O1xuICBjb2xvcjogJHRvb2x0aXAtY29sb3I7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAkdG9vbHRpcC1iZztcbiAgYm9yZGVyLXJhZGl1czogJGJvcmRlci1yYWRpdXMtYmFzZTtcbn1cblxuLy8gQXJyb3dzXG4udG9vbHRpcC1hcnJvdyB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgd2lkdGg6IDA7XG4gIGhlaWdodDogMDtcbiAgYm9yZGVyLWNvbG9yOiB0cmFuc3BhcmVudDtcbiAgYm9yZGVyLXN0eWxlOiBzb2xpZDtcbn1cbi8vIE5vdGU6IERlcHJlY2F0ZWQgLnRvcC1sZWZ0LCAudG9wLXJpZ2h0LCAuYm90dG9tLWxlZnQsIGFuZCAuYm90dG9tLXJpZ2h0IGFzIG9mIHYzLjMuMVxuLnRvb2x0aXAge1xuICAmLnRvcCAudG9vbHRpcC1hcnJvdyB7XG4gICAgYm90dG9tOiAwO1xuICAgIGxlZnQ6IDUwJTtcbiAgICBtYXJnaW4tbGVmdDogLSR0b29sdGlwLWFycm93LXdpZHRoO1xuICAgIGJvcmRlci13aWR0aDogJHRvb2x0aXAtYXJyb3ctd2lkdGggJHRvb2x0aXAtYXJyb3ctd2lkdGggMDtcbiAgICBib3JkZXItdG9wLWNvbG9yOiAkdG9vbHRpcC1hcnJvdy1jb2xvcjtcbiAgfVxuICAmLnRvcC1sZWZ0IC50b29sdGlwLWFycm93IHtcbiAgICBib3R0b206IDA7XG4gICAgcmlnaHQ6ICR0b29sdGlwLWFycm93LXdpZHRoO1xuICAgIG1hcmdpbi1ib3R0b206IC0kdG9vbHRpcC1hcnJvdy13aWR0aDtcbiAgICBib3JkZXItd2lkdGg6ICR0b29sdGlwLWFycm93LXdpZHRoICR0b29sdGlwLWFycm93LXdpZHRoIDA7XG4gICAgYm9yZGVyLXRvcC1jb2xvcjogJHRvb2x0aXAtYXJyb3ctY29sb3I7XG4gIH1cbiAgJi50b3AtcmlnaHQgLnRvb2x0aXAtYXJyb3cge1xuICAgIGJvdHRvbTogMDtcbiAgICBsZWZ0OiAkdG9vbHRpcC1hcnJvdy13aWR0aDtcbiAgICBtYXJnaW4tYm90dG9tOiAtJHRvb2x0aXAtYXJyb3ctd2lkdGg7XG4gICAgYm9yZGVyLXdpZHRoOiAkdG9vbHRpcC1hcnJvdy13aWR0aCAkdG9vbHRpcC1hcnJvdy13aWR0aCAwO1xuICAgIGJvcmRlci10b3AtY29sb3I6ICR0b29sdGlwLWFycm93LWNvbG9yO1xuICB9XG4gICYucmlnaHQgLnRvb2x0aXAtYXJyb3cge1xuICAgIHRvcDogNTAlO1xuICAgIGxlZnQ6IDA7XG4gICAgbWFyZ2luLXRvcDogLSR0b29sdGlwLWFycm93LXdpZHRoO1xuICAgIGJvcmRlci13aWR0aDogJHRvb2x0aXAtYXJyb3ctd2lkdGggJHRvb2x0aXAtYXJyb3ctd2lkdGggJHRvb2x0aXAtYXJyb3ctd2lkdGggMDtcbiAgICBib3JkZXItcmlnaHQtY29sb3I6ICR0b29sdGlwLWFycm93LWNvbG9yO1xuICB9XG4gICYubGVmdCAudG9vbHRpcC1hcnJvdyB7XG4gICAgdG9wOiA1MCU7XG4gICAgcmlnaHQ6IDA7XG4gICAgbWFyZ2luLXRvcDogLSR0b29sdGlwLWFycm93LXdpZHRoO1xuICAgIGJvcmRlci13aWR0aDogJHRvb2x0aXAtYXJyb3ctd2lkdGggMCAkdG9vbHRpcC1hcnJvdy13aWR0aCAkdG9vbHRpcC1hcnJvdy13aWR0aDtcbiAgICBib3JkZXItbGVmdC1jb2xvcjogJHRvb2x0aXAtYXJyb3ctY29sb3I7XG4gIH1cbiAgJi5ib3R0b20gLnRvb2x0aXAtYXJyb3cge1xuICAgIHRvcDogMDtcbiAgICBsZWZ0OiA1MCU7XG4gICAgbWFyZ2luLWxlZnQ6IC0kdG9vbHRpcC1hcnJvdy13aWR0aDtcbiAgICBib3JkZXItd2lkdGg6IDAgJHRvb2x0aXAtYXJyb3ctd2lkdGggJHRvb2x0aXAtYXJyb3ctd2lkdGg7XG4gICAgYm9yZGVyLWJvdHRvbS1jb2xvcjogJHRvb2x0aXAtYXJyb3ctY29sb3I7XG4gIH1cbiAgJi5ib3R0b20tbGVmdCAudG9vbHRpcC1hcnJvdyB7XG4gICAgdG9wOiAwO1xuICAgIHJpZ2h0OiAkdG9vbHRpcC1hcnJvdy13aWR0aDtcbiAgICBtYXJnaW4tdG9wOiAtJHRvb2x0aXAtYXJyb3ctd2lkdGg7XG4gICAgYm9yZGVyLXdpZHRoOiAwICR0b29sdGlwLWFycm93LXdpZHRoICR0b29sdGlwLWFycm93LXdpZHRoO1xuICAgIGJvcmRlci1ib3R0b20tY29sb3I6ICR0b29sdGlwLWFycm93LWNvbG9yO1xuICB9XG4gICYuYm90dG9tLXJpZ2h0IC50b29sdGlwLWFycm93IHtcbiAgICB0b3A6IDA7XG4gICAgbGVmdDogJHRvb2x0aXAtYXJyb3ctd2lkdGg7XG4gICAgbWFyZ2luLXRvcDogLSR0b29sdGlwLWFycm93LXdpZHRoO1xuICAgIGJvcmRlci13aWR0aDogMCAkdG9vbHRpcC1hcnJvdy13aWR0aCAkdG9vbHRpcC1hcnJvdy13aWR0aDtcbiAgICBib3JkZXItYm90dG9tLWNvbG9yOiAkdG9vbHRpcC1hcnJvdy1jb2xvcjtcbiAgfVxufVxuIiwiLy9cbi8vIFV0aWxpdHkgY2xhc3Nlc1xuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuXG4vLyBGbG9hdHNcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLmNsZWFyZml4IHtcbiAgQGluY2x1ZGUgY2xlYXJmaXg7XG59XG4uY2VudGVyLWJsb2NrIHtcbiAgQGluY2x1ZGUgY2VudGVyLWJsb2NrO1xufVxuLnB1bGwtcmlnaHQge1xuICBmbG9hdDogcmlnaHQgIWltcG9ydGFudDtcbn1cbi5wdWxsLWxlZnQge1xuICBmbG9hdDogbGVmdCAhaW1wb3J0YW50O1xufVxuXG5cbi8vIFRvZ2dsaW5nIGNvbnRlbnRcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLy8gTm90ZTogRGVwcmVjYXRlZCAuaGlkZSBpbiBmYXZvciBvZiAuaGlkZGVuIG9yIC5zci1vbmx5IChhcyBhcHByb3ByaWF0ZSkgaW4gdjMuMC4xXG4uaGlkZSB7XG4gIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDtcbn1cbi5zaG93IHtcbiAgZGlzcGxheTogYmxvY2sgIWltcG9ydGFudDtcbn1cbi5pbnZpc2libGUge1xuICB2aXNpYmlsaXR5OiBoaWRkZW47XG59XG4udGV4dC1oaWRlIHtcbiAgQGluY2x1ZGUgdGV4dC1oaWRlO1xufVxuXG5cbi8vIEhpZGUgZnJvbSBzY3JlZW5yZWFkZXJzIGFuZCBicm93c2Vyc1xuLy9cbi8vIENyZWRpdDogSFRNTDUgQm9pbGVycGxhdGVcblxuLmhpZGRlbiB7XG4gIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDtcbn1cblxuXG4vLyBGb3IgQWZmaXggcGx1Z2luXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi5hZmZpeCB7XG4gIHBvc2l0aW9uOiBmaXhlZDtcbn1cbiIsIi8vIENlbnRlci1hbGlnbiBhIGJsb2NrIGxldmVsIGVsZW1lbnRcblxuQG1peGluIGNlbnRlci1ibG9jaygpIHtcbiAgZGlzcGxheTogYmxvY2s7XG4gIG1hcmdpbi1sZWZ0OiBhdXRvO1xuICBtYXJnaW4tcmlnaHQ6IGF1dG87XG59XG4iLCIvLyBDU1MgaW1hZ2UgcmVwbGFjZW1lbnRcbi8vXG4vLyBIZWFkcyB1cCEgdjMgbGF1bmNoZWQgd2l0aCB3aXRoIG9ubHkgYC5oaWRlLXRleHQoKWAsIGJ1dCBwZXIgb3VyIHBhdHRlcm4gZm9yXG4vLyBtaXhpbnMgYmVpbmcgcmV1c2VkIGFzIGNsYXNzZXMgd2l0aCB0aGUgc2FtZSBuYW1lLCB0aGlzIGRvZXNuJ3QgaG9sZCB1cC4gQXNcbi8vIG9mIHYzLjAuMSB3ZSBoYXZlIGFkZGVkIGAudGV4dC1oaWRlKClgIGFuZCBkZXByZWNhdGVkIGAuaGlkZS10ZXh0KClgLlxuLy9cbi8vIFNvdXJjZTogaHR0cHM6Ly9naXRodWIuY29tL2g1YnAvaHRtbDUtYm9pbGVycGxhdGUvY29tbWl0L2FhMDM5NmVhZTc1N1xuXG4vLyBEZXByZWNhdGVkIGFzIG9mIHYzLjAuMSAod2lsbCBiZSByZW1vdmVkIGluIHY0KVxuQG1peGluIGhpZGUtdGV4dCgpIHtcbiAgZm9udDogMC8wIGE7XG4gIGNvbG9yOiB0cmFuc3BhcmVudDtcbiAgdGV4dC1zaGFkb3c6IG5vbmU7XG4gIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xuICBib3JkZXI6IDA7XG59XG5cbi8vIE5ldyBtaXhpbiB0byB1c2UgYXMgb2YgdjMuMC4xXG5AbWl4aW4gdGV4dC1oaWRlKCkge1xuICBAaW5jbHVkZSBoaWRlLXRleHQ7XG59XG4iLCIvL1xuLy8gUmVzcG9uc2l2ZTogVXRpbGl0eSBjbGFzc2VzXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5cbi8vIElFMTAgaW4gV2luZG93cyAoUGhvbmUpIDhcbi8vXG4vLyBTdXBwb3J0IGZvciByZXNwb25zaXZlIHZpZXdzIHZpYSBtZWRpYSBxdWVyaWVzIGlzIGtpbmQgb2YgYm9ya2VkIGluIElFMTAsIGZvclxuLy8gU3VyZmFjZS9kZXNrdG9wIGluIHNwbGl0IHZpZXcgYW5kIGZvciBXaW5kb3dzIFBob25lIDguIFRoaXMgcGFydGljdWxhciBmaXhcbi8vIG11c3QgYmUgYWNjb21wYW5pZWQgYnkgYSBzbmlwcGV0IG9mIEphdmFTY3JpcHQgdG8gc25pZmYgdGhlIHVzZXIgYWdlbnQgYW5kXG4vLyBhcHBseSBzb21lIGNvbmRpdGlvbmFsIENTUyB0byAqb25seSogdGhlIFN1cmZhY2UvZGVza3RvcCBXaW5kb3dzIDguIExvb2sgYXRcbi8vIG91ciBHZXR0aW5nIFN0YXJ0ZWQgcGFnZSBmb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGlzIGJ1Zy5cbi8vXG4vLyBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIHRoZSBmb2xsb3dpbmc6XG4vL1xuLy8gSXNzdWU6IGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9pc3N1ZXMvMTA0OTdcbi8vIERvY3M6IGh0dHA6Ly9nZXRib290c3RyYXAuY29tL2dldHRpbmctc3RhcnRlZC8jc3VwcG9ydC1pZTEwLXdpZHRoXG4vLyBTb3VyY2U6IGh0dHA6Ly90aW1rYWRsZWMuY29tLzIwMTMvMDEvd2luZG93cy1waG9uZS04LWFuZC1kZXZpY2Utd2lkdGgvXG4vLyBTb3VyY2U6IGh0dHA6Ly90aW1rYWRsZWMuY29tLzIwMTIvMTAvaWUxMC1zbmFwLW1vZGUtYW5kLXJlc3BvbnNpdmUtZGVzaWduL1xuXG5ALW1zLXZpZXdwb3J0IHtcbiAgd2lkdGg6IGRldmljZS13aWR0aDtcbn1cblxuXG4vLyBWaXNpYmlsaXR5IHV0aWxpdGllc1xuLy8gTm90ZTogRGVwcmVjYXRlZCAudmlzaWJsZS14cywgLnZpc2libGUtc20sIC52aXNpYmxlLW1kLCBhbmQgLnZpc2libGUtbGcgYXMgb2YgdjMuMi4wXG5cbkBpbmNsdWRlIHJlc3BvbnNpdmUtaW52aXNpYmlsaXR5KCcudmlzaWJsZS14cycpO1xuQGluY2x1ZGUgcmVzcG9uc2l2ZS1pbnZpc2liaWxpdHkoJy52aXNpYmxlLXNtJyk7XG5AaW5jbHVkZSByZXNwb25zaXZlLWludmlzaWJpbGl0eSgnLnZpc2libGUtbWQnKTtcbkBpbmNsdWRlIHJlc3BvbnNpdmUtaW52aXNpYmlsaXR5KCcudmlzaWJsZS1sZycpO1xuXG4udmlzaWJsZS14cy1ibG9jayxcbi52aXNpYmxlLXhzLWlubGluZSxcbi52aXNpYmxlLXhzLWlubGluZS1ibG9jayxcbi52aXNpYmxlLXNtLWJsb2NrLFxuLnZpc2libGUtc20taW5saW5lLFxuLnZpc2libGUtc20taW5saW5lLWJsb2NrLFxuLnZpc2libGUtbWQtYmxvY2ssXG4udmlzaWJsZS1tZC1pbmxpbmUsXG4udmlzaWJsZS1tZC1pbmxpbmUtYmxvY2ssXG4udmlzaWJsZS1sZy1ibG9jayxcbi52aXNpYmxlLWxnLWlubGluZSxcbi52aXNpYmxlLWxnLWlubGluZS1ibG9jayB7XG4gIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDtcbn1cblxuQG1lZGlhIChtYXgtd2lkdGg6ICRzY3JlZW4teHMtbWF4KSB7XG4gIEBpbmNsdWRlIHJlc3BvbnNpdmUtdmlzaWJpbGl0eSgnLnZpc2libGUteHMnKTtcbn1cbi52aXNpYmxlLXhzLWJsb2NrIHtcbiAgQG1lZGlhIChtYXgtd2lkdGg6ICRzY3JlZW4teHMtbWF4KSB7XG4gICAgZGlzcGxheTogYmxvY2sgIWltcG9ydGFudDtcbiAgfVxufVxuLnZpc2libGUteHMtaW5saW5lIHtcbiAgQG1lZGlhIChtYXgtd2lkdGg6ICRzY3JlZW4teHMtbWF4KSB7XG4gICAgZGlzcGxheTogaW5saW5lICFpbXBvcnRhbnQ7XG4gIH1cbn1cbi52aXNpYmxlLXhzLWlubGluZS1ibG9jayB7XG4gIEBtZWRpYSAobWF4LXdpZHRoOiAkc2NyZWVuLXhzLW1heCkge1xuICAgIGRpc3BsYXk6IGlubGluZS1ibG9jayAhaW1wb3J0YW50O1xuICB9XG59XG5cbkBtZWRpYSAobWluLXdpZHRoOiAkc2NyZWVuLXNtLW1pbikgYW5kIChtYXgtd2lkdGg6ICRzY3JlZW4tc20tbWF4KSB7XG4gIEBpbmNsdWRlIHJlc3BvbnNpdmUtdmlzaWJpbGl0eSgnLnZpc2libGUtc20nKTtcbn1cbi52aXNpYmxlLXNtLWJsb2NrIHtcbiAgQG1lZGlhIChtaW4td2lkdGg6ICRzY3JlZW4tc20tbWluKSBhbmQgKG1heC13aWR0aDogJHNjcmVlbi1zbS1tYXgpIHtcbiAgICBkaXNwbGF5OiBibG9jayAhaW1wb3J0YW50O1xuICB9XG59XG4udmlzaWJsZS1zbS1pbmxpbmUge1xuICBAbWVkaWEgKG1pbi13aWR0aDogJHNjcmVlbi1zbS1taW4pIGFuZCAobWF4LXdpZHRoOiAkc2NyZWVuLXNtLW1heCkge1xuICAgIGRpc3BsYXk6IGlubGluZSAhaW1wb3J0YW50O1xuICB9XG59XG4udmlzaWJsZS1zbS1pbmxpbmUtYmxvY2sge1xuICBAbWVkaWEgKG1pbi13aWR0aDogJHNjcmVlbi1zbS1taW4pIGFuZCAobWF4LXdpZHRoOiAkc2NyZWVuLXNtLW1heCkge1xuICAgIGRpc3BsYXk6IGlubGluZS1ibG9jayAhaW1wb3J0YW50O1xuICB9XG59XG5cbkBtZWRpYSAobWluLXdpZHRoOiAkc2NyZWVuLW1kLW1pbikgYW5kIChtYXgtd2lkdGg6ICRzY3JlZW4tbWQtbWF4KSB7XG4gIEBpbmNsdWRlIHJlc3BvbnNpdmUtdmlzaWJpbGl0eSgnLnZpc2libGUtbWQnKTtcbn1cbi52aXNpYmxlLW1kLWJsb2NrIHtcbiAgQG1lZGlhIChtaW4td2lkdGg6ICRzY3JlZW4tbWQtbWluKSBhbmQgKG1heC13aWR0aDogJHNjcmVlbi1tZC1tYXgpIHtcbiAgICBkaXNwbGF5OiBibG9jayAhaW1wb3J0YW50O1xuICB9XG59XG4udmlzaWJsZS1tZC1pbmxpbmUge1xuICBAbWVkaWEgKG1pbi13aWR0aDogJHNjcmVlbi1tZC1taW4pIGFuZCAobWF4LXdpZHRoOiAkc2NyZWVuLW1kLW1heCkge1xuICAgIGRpc3BsYXk6IGlubGluZSAhaW1wb3J0YW50O1xuICB9XG59XG4udmlzaWJsZS1tZC1pbmxpbmUtYmxvY2sge1xuICBAbWVkaWEgKG1pbi13aWR0aDogJHNjcmVlbi1tZC1taW4pIGFuZCAobWF4LXdpZHRoOiAkc2NyZWVuLW1kLW1heCkge1xuICAgIGRpc3BsYXk6IGlubGluZS1ibG9jayAhaW1wb3J0YW50O1xuICB9XG59XG5cbkBtZWRpYSAobWluLXdpZHRoOiAkc2NyZWVuLWxnLW1pbikge1xuICBAaW5jbHVkZSByZXNwb25zaXZlLXZpc2liaWxpdHkoJy52aXNpYmxlLWxnJyk7XG59XG4udmlzaWJsZS1sZy1ibG9jayB7XG4gIEBtZWRpYSAobWluLXdpZHRoOiAkc2NyZWVuLWxnLW1pbikge1xuICAgIGRpc3BsYXk6IGJsb2NrICFpbXBvcnRhbnQ7XG4gIH1cbn1cbi52aXNpYmxlLWxnLWlubGluZSB7XG4gIEBtZWRpYSAobWluLXdpZHRoOiAkc2NyZWVuLWxnLW1pbikge1xuICAgIGRpc3BsYXk6IGlubGluZSAhaW1wb3J0YW50O1xuICB9XG59XG4udmlzaWJsZS1sZy1pbmxpbmUtYmxvY2sge1xuICBAbWVkaWEgKG1pbi13aWR0aDogJHNjcmVlbi1sZy1taW4pIHtcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2sgIWltcG9ydGFudDtcbiAgfVxufVxuXG5AbWVkaWEgKG1heC13aWR0aDogJHNjcmVlbi14cy1tYXgpIHtcbiAgQGluY2x1ZGUgcmVzcG9uc2l2ZS1pbnZpc2liaWxpdHkoJy5oaWRkZW4teHMnKTtcbn1cblxuQG1lZGlhIChtaW4td2lkdGg6ICRzY3JlZW4tc20tbWluKSBhbmQgKG1heC13aWR0aDogJHNjcmVlbi1zbS1tYXgpIHtcbiAgQGluY2x1ZGUgcmVzcG9uc2l2ZS1pbnZpc2liaWxpdHkoJy5oaWRkZW4tc20nKTtcbn1cblxuQG1lZGlhIChtaW4td2lkdGg6ICRzY3JlZW4tbWQtbWluKSBhbmQgKG1heC13aWR0aDogJHNjcmVlbi1tZC1tYXgpIHtcbiAgQGluY2x1ZGUgcmVzcG9uc2l2ZS1pbnZpc2liaWxpdHkoJy5oaWRkZW4tbWQnKTtcbn1cblxuQG1lZGlhIChtaW4td2lkdGg6ICRzY3JlZW4tbGctbWluKSB7XG4gIEBpbmNsdWRlIHJlc3BvbnNpdmUtaW52aXNpYmlsaXR5KCcuaGlkZGVuLWxnJyk7XG59XG5cblxuLy8gUHJpbnQgdXRpbGl0aWVzXG4vL1xuLy8gTWVkaWEgcXVlcmllcyBhcmUgcGxhY2VkIG9uIHRoZSBpbnNpZGUgdG8gYmUgbWl4aW4tZnJpZW5kbHkuXG5cbi8vIE5vdGU6IERlcHJlY2F0ZWQgLnZpc2libGUtcHJpbnQgYXMgb2YgdjMuMi4wXG5cbkBpbmNsdWRlIHJlc3BvbnNpdmUtaW52aXNpYmlsaXR5KCcudmlzaWJsZS1wcmludCcpO1xuXG5AbWVkaWEgcHJpbnQge1xuICBAaW5jbHVkZSByZXNwb25zaXZlLXZpc2liaWxpdHkoJy52aXNpYmxlLXByaW50Jyk7XG59XG4udmlzaWJsZS1wcmludC1ibG9jayB7XG4gIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDtcblxuICBAbWVkaWEgcHJpbnQge1xuICAgIGRpc3BsYXk6IGJsb2NrICFpbXBvcnRhbnQ7XG4gIH1cbn1cbi52aXNpYmxlLXByaW50LWlubGluZSB7XG4gIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDtcblxuICBAbWVkaWEgcHJpbnQge1xuICAgIGRpc3BsYXk6IGlubGluZSAhaW1wb3J0YW50O1xuICB9XG59XG4udmlzaWJsZS1wcmludC1pbmxpbmUtYmxvY2sge1xuICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7XG5cbiAgQG1lZGlhIHByaW50IHtcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2sgIWltcG9ydGFudDtcbiAgfVxufVxuXG5AbWVkaWEgcHJpbnQge1xuICBAaW5jbHVkZSByZXNwb25zaXZlLWludmlzaWJpbGl0eSgnLmhpZGRlbi1wcmludCcpO1xufVxuIiwiLy8gUmVzcG9uc2l2ZSB1dGlsaXRpZXNcblxuLy9cbi8vIE1vcmUgZWFzaWx5IGluY2x1ZGUgYWxsIHRoZSBzdGF0ZXMgZm9yIHJlc3BvbnNpdmUtdXRpbGl0aWVzLmxlc3MuXG4vLyBbY29udmVydGVyXSAkcGFyZW50IGhhY2tcbkBtaXhpbiByZXNwb25zaXZlLXZpc2liaWxpdHkoJHBhcmVudCkge1xuICAjeyRwYXJlbnR9IHtcbiAgICBkaXNwbGF5OiBibG9jayAhaW1wb3J0YW50O1xuICB9XG4gIHRhYmxlI3skcGFyZW50fSAgeyBkaXNwbGF5OiB0YWJsZTsgfVxuICB0ciN7JHBhcmVudH0gICAgIHsgZGlzcGxheTogdGFibGUtcm93ICFpbXBvcnRhbnQ7IH1cbiAgdGgjeyRwYXJlbnR9LFxuICB0ZCN7JHBhcmVudH0gICAgIHsgZGlzcGxheTogdGFibGUtY2VsbCAhaW1wb3J0YW50OyB9XG59XG5cbi8vIFtjb252ZXJ0ZXJdICRwYXJlbnQgaGFja1xuQG1peGluIHJlc3BvbnNpdmUtaW52aXNpYmlsaXR5KCRwYXJlbnQpIHtcbiAgI3skcGFyZW50fSB7XG4gICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50O1xuICB9XG59XG4iLCIuaGlnaGxpZ2h0ICB7IGJhY2tncm91bmQ6ICNmZmZmZmY7IH1cbi5oaWdobGlnaHQgLmMgeyBjb2xvcjogIzk5OTk4ODsgZm9udC1zdHlsZTogaXRhbGljIH0gLyogQ29tbWVudCAqL1xuLmhpZ2hsaWdodCAuZXJyIHsgY29sb3I6ICNhNjE3MTc7IGJhY2tncm91bmQtY29sb3I6ICNlM2QyZDIgfSAvKiBFcnJvciAqL1xuLmhpZ2hsaWdodCAuayB7IGZvbnQtd2VpZ2h0OiBib2xkIH0gLyogS2V5d29yZCAqL1xuLmhpZ2hsaWdodCAubyB7IGZvbnQtd2VpZ2h0OiBib2xkIH0gLyogT3BlcmF0b3IgKi9cbi5oaWdobGlnaHQgLmNtIHsgY29sb3I6ICM5OTk5ODg7IGZvbnQtc3R5bGU6IGl0YWxpYyB9IC8qIENvbW1lbnQuTXVsdGlsaW5lICovXG4uaGlnaGxpZ2h0IC5jcCB7IGNvbG9yOiAjOTk5OTk5OyBmb250LXdlaWdodDogYm9sZCB9IC8qIENvbW1lbnQuUHJlcHJvYyAqL1xuLmhpZ2hsaWdodCAuYzEgeyBjb2xvcjogIzk5OTk4ODsgZm9udC1zdHlsZTogaXRhbGljIH0gLyogQ29tbWVudC5TaW5nbGUgKi9cbi5oaWdobGlnaHQgLmNzIHsgY29sb3I6ICM5OTk5OTk7IGZvbnQtd2VpZ2h0OiBib2xkOyBmb250LXN0eWxlOiBpdGFsaWMgfSAvKiBDb21tZW50LlNwZWNpYWwgKi9cbi5oaWdobGlnaHQgLmdkIHsgY29sb3I6ICMwMDAwMDA7IGJhY2tncm91bmQtY29sb3I6ICNmZmRkZGQgfSAvKiBHZW5lcmljLkRlbGV0ZWQgKi9cbi5oaWdobGlnaHQgLmdkIC54IHsgY29sb3I6ICMwMDAwMDA7IGJhY2tncm91bmQtY29sb3I6ICNmZmFhYWEgfSAvKiBHZW5lcmljLkRlbGV0ZWQuU3BlY2lmaWMgKi9cbi5oaWdobGlnaHQgLmdlIHsgZm9udC1zdHlsZTogaXRhbGljIH0gLyogR2VuZXJpYy5FbXBoICovXG4uaGlnaGxpZ2h0IC5nciB7IGNvbG9yOiAjYWEwMDAwIH0gLyogR2VuZXJpYy5FcnJvciAqL1xuLmhpZ2hsaWdodCAuZ2ggeyBjb2xvcjogIzk5OTk5OSB9IC8qIEdlbmVyaWMuSGVhZGluZyAqL1xuLmhpZ2hsaWdodCAuZ2kgeyBjb2xvcjogIzAwMDAwMDsgYmFja2dyb3VuZC1jb2xvcjogI2RkZmZkZCB9IC8qIEdlbmVyaWMuSW5zZXJ0ZWQgKi9cbi5oaWdobGlnaHQgLmdpIC54IHsgY29sb3I6ICMwMDAwMDA7IGJhY2tncm91bmQtY29sb3I6ICNhYWZmYWEgfSAvKiBHZW5lcmljLkluc2VydGVkLlNwZWNpZmljICovXG4uaGlnaGxpZ2h0IC5nbyB7IGNvbG9yOiAjODg4ODg4IH0gLyogR2VuZXJpYy5PdXRwdXQgKi9cbi5oaWdobGlnaHQgLmdwIHsgY29sb3I6ICM1NTU1NTUgfSAvKiBHZW5lcmljLlByb21wdCAqL1xuLmhpZ2hsaWdodCAuZ3MgeyBmb250LXdlaWdodDogYm9sZCB9IC8qIEdlbmVyaWMuU3Ryb25nICovXG4uaGlnaGxpZ2h0IC5ndSB7IGNvbG9yOiAjYWFhYWFhIH0gLyogR2VuZXJpYy5TdWJoZWFkaW5nICovXG4uaGlnaGxpZ2h0IC5ndCB7IGNvbG9yOiAjYWEwMDAwIH0gLyogR2VuZXJpYy5UcmFjZWJhY2sgKi9cbi5oaWdobGlnaHQgLmtjIHsgZm9udC13ZWlnaHQ6IGJvbGQgfSAvKiBLZXl3b3JkLkNvbnN0YW50ICovXG4uaGlnaGxpZ2h0IC5rZCB7IGZvbnQtd2VpZ2h0OiBib2xkIH0gLyogS2V5d29yZC5EZWNsYXJhdGlvbiAqL1xuLmhpZ2hsaWdodCAua3AgeyBmb250LXdlaWdodDogYm9sZCB9IC8qIEtleXdvcmQuUHNldWRvICovXG4uaGlnaGxpZ2h0IC5rciB7IGZvbnQtd2VpZ2h0OiBib2xkIH0gLyogS2V5d29yZC5SZXNlcnZlZCAqL1xuLmhpZ2hsaWdodCAua3QgeyBjb2xvcjogIzQ0NTU4ODsgZm9udC13ZWlnaHQ6IGJvbGQgfSAvKiBLZXl3b3JkLlR5cGUgKi9cbi5oaWdobGlnaHQgLm0geyBjb2xvcjogIzAwOTk5OSB9IC8qIExpdGVyYWwuTnVtYmVyICovXG4uaGlnaGxpZ2h0IC5zIHsgY29sb3I6ICNkMTQgfSAvKiBMaXRlcmFsLlN0cmluZyAqL1xuLmhpZ2hsaWdodCAubmEgeyBjb2xvcjogIzAwODA4MCB9IC8qIE5hbWUuQXR0cmlidXRlICovXG4uaGlnaGxpZ2h0IC5uYiB7IGNvbG9yOiAjMDA4NkIzIH0gLyogTmFtZS5CdWlsdGluICovXG4uaGlnaGxpZ2h0IC5uYyB7IGNvbG9yOiAjNDQ1NTg4OyBmb250LXdlaWdodDogYm9sZCB9IC8qIE5hbWUuQ2xhc3MgKi9cbi5oaWdobGlnaHQgLm5vIHsgY29sb3I6ICMwMDgwODAgfSAvKiBOYW1lLkNvbnN0YW50ICovXG4uaGlnaGxpZ2h0IC5uaSB7IGNvbG9yOiAjODAwMDgwIH0gLyogTmFtZS5FbnRpdHkgKi9cbi5oaWdobGlnaHQgLm5lIHsgY29sb3I6ICM5OTAwMDA7IGZvbnQtd2VpZ2h0OiBib2xkIH0gLyogTmFtZS5FeGNlcHRpb24gKi9cbi5oaWdobGlnaHQgLm5mIHsgY29sb3I6ICM5OTAwMDA7IGZvbnQtd2VpZ2h0OiBib2xkIH0gLyogTmFtZS5GdW5jdGlvbiAqL1xuLmhpZ2hsaWdodCAubm4geyBjb2xvcjogIzU1NTU1NSB9IC8qIE5hbWUuTmFtZXNwYWNlICovXG4uaGlnaGxpZ2h0IC5udCB7IGNvbG9yOiAjMDAwMDgwIH0gLyogTmFtZS5UYWcgKi9cbi5oaWdobGlnaHQgLm52IHsgY29sb3I6ICMwMDgwODAgfSAvKiBOYW1lLlZhcmlhYmxlICovXG4uaGlnaGxpZ2h0IC5vdyB7IGZvbnQtd2VpZ2h0OiBib2xkIH0gLyogT3BlcmF0b3IuV29yZCAqL1xuLmhpZ2hsaWdodCAudyB7IGNvbG9yOiAjYmJiYmJiIH0gLyogVGV4dC5XaGl0ZXNwYWNlICovXG4uaGlnaGxpZ2h0IC5tZiB7IGNvbG9yOiAjMDA5OTk5IH0gLyogTGl0ZXJhbC5OdW1iZXIuRmxvYXQgKi9cbi5oaWdobGlnaHQgLm1oIHsgY29sb3I6ICMwMDk5OTkgfSAvKiBMaXRlcmFsLk51bWJlci5IZXggKi9cbi5oaWdobGlnaHQgLm1pIHsgY29sb3I6ICMwMDk5OTkgfSAvKiBMaXRlcmFsLk51bWJlci5JbnRlZ2VyICovXG4uaGlnaGxpZ2h0IC5tbyB7IGNvbG9yOiAjMDA5OTk5IH0gLyogTGl0ZXJhbC5OdW1iZXIuT2N0ICovXG4uaGlnaGxpZ2h0IC5zYiB7IGNvbG9yOiAjZDE0IH0gLyogTGl0ZXJhbC5TdHJpbmcuQmFja3RpY2sgKi9cbi5oaWdobGlnaHQgLnNjIHsgY29sb3I6ICNkMTQgfSAvKiBMaXRlcmFsLlN0cmluZy5DaGFyICovXG4uaGlnaGxpZ2h0IC5zZCB7IGNvbG9yOiAjZDE0IH0gLyogTGl0ZXJhbC5TdHJpbmcuRG9jICovXG4uaGlnaGxpZ2h0IC5zMiB7IGNvbG9yOiAjZDE0IH0gLyogTGl0ZXJhbC5TdHJpbmcuRG91YmxlICovXG4uaGlnaGxpZ2h0IC5zZSB7IGNvbG9yOiAjZDE0IH0gLyogTGl0ZXJhbC5TdHJpbmcuRXNjYXBlICovXG4uaGlnaGxpZ2h0IC5zaCB7IGNvbG9yOiAjZDE0IH0gLyogTGl0ZXJhbC5TdHJpbmcuSGVyZWRvYyAqL1xuLmhpZ2hsaWdodCAuc2kgeyBjb2xvcjogI2QxNCB9IC8qIExpdGVyYWwuU3RyaW5nLkludGVycG9sICovXG4uaGlnaGxpZ2h0IC5zeCB7IGNvbG9yOiAjZDE0IH0gLyogTGl0ZXJhbC5TdHJpbmcuT3RoZXIgKi9cbi5oaWdobGlnaHQgLnNyIHsgY29sb3I6ICMwMDk5MjYgfSAvKiBMaXRlcmFsLlN0cmluZy5SZWdleCAqL1xuLmhpZ2hsaWdodCAuczEgeyBjb2xvcjogI2QxNCB9IC8qIExpdGVyYWwuU3RyaW5nLlNpbmdsZSAqL1xuLmhpZ2hsaWdodCAuc3MgeyBjb2xvcjogIzk5MDA3MyB9IC8qIExpdGVyYWwuU3RyaW5nLlN5bWJvbCAqL1xuLmhpZ2hsaWdodCAuYnAgeyBjb2xvcjogIzk5OTk5OSB9IC8qIE5hbWUuQnVpbHRpbi5Qc2V1ZG8gKi9cbi5oaWdobGlnaHQgLnZjIHsgY29sb3I6ICMwMDgwODAgfSAvKiBOYW1lLlZhcmlhYmxlLkNsYXNzICovXG4uaGlnaGxpZ2h0IC52ZyB7IGNvbG9yOiAjMDA4MDgwIH0gLyogTmFtZS5WYXJpYWJsZS5HbG9iYWwgKi9cbi5oaWdobGlnaHQgLnZpIHsgY29sb3I6ICMwMDgwODAgfSAvKiBOYW1lLlZhcmlhYmxlLkluc3RhbmNlICovXG4uaGlnaGxpZ2h0IC5pbCB7IGNvbG9yOiAjMDA5OTk5IH0gLyogTGl0ZXJhbC5OdW1iZXIuSW50ZWdlci5Mb25nICovXG4iLCJwcmUge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTtcbn1cblxuLmhsanMge1xuICBkaXNwbGF5OiBibG9jaztcbiAgcGFkZGluZzogMC41ZW07XG4gIGJhY2tncm91bmQ6ICNmZmZmZmY7XG4gIG92ZXJmbG93LXg6IGF1dG87XG4gIHdvcmQtd3JhcDogbm9ybWFsO1xuICB3aGl0ZS1zcGFjZTogcHJlO1xuICBjb2xvcjogIzMxNDM2MTtcbn1cblxuXG4vLyBEb25lXG5cbi5obGpzLWNvbW1lbnQsXG4uaGxqcy10ZW1wbGF0ZV9jb21tZW50LFxuLmhsanMtamF2YWRvYyxcbi5obGpzLWNvbW1lbnQgKiB7XG4gIGNvbG9yOiAjOTk5OTg4O1xuICBmb250LXN0eWxlOiBpdGFsaWM7XG59XG5cblxuLy8gRG9uZVxuXG4uaGxqcy1rZXl3b3JkLFxuLm1ldGhvZCxcbi5obGpzLWxpc3QgLmhsanMtdGl0bGUsXG4uY2xvanVyZSAuaGxqcy1idWlsdF9pbixcbi5uZ2lueCAuaGxqcy10aXRsZSxcbi5obGpzLXRhZyAuaGxqcy10aXRsZSxcbi5zZXR0aW5nIC5obGpzLXZhbHVlLFxuLmhsanMtd2ludXRpbHMsXG4udGV4IC5obGpzLWNvbW1hbmQsXG4uaHR0cCAuaGxqcy10aXRsZSxcbi5obGpzLXJlcXVlc3QsXG4uaGxqcy1zdGF0dXMge1xuICBjb2xvcjogIzRhODZlZjtcbiAgZm9udC13ZWlnaHQ6IGJvbGQ7XG59XG5cbi5obGpzLWVudnZhcixcbi50ZXggLmhsanMtc3BlY2lhbCB7XG4gIGNvbG9yOiAjNjYwO1xufVxuXG5cbi8vIERvbmVcblxuLmhsanMtc3RyaW5nLFxuLmhsanMtdGFnIC5obGpzLXZhbHVlLFxuLmhsanMtY2RhdGEsXG4uaGxqcy1maWx0ZXIgLmhsanMtYXJndW1lbnQsXG4uaGxqcy1hdHRyX3NlbGVjdG9yLFxuLmFwYWNoZSAuaGxqcy1jYnJhY2tldCxcbi5obGpzLWRhdGUsXG4uaGxqcy1yZWdleHAsXG4uY29mZmVlc2NyaXB0IC5obGpzLWF0dHJpYnV0ZSB7XG4gIGNvbG9yOiAjZjI1NzZkO1xufVxuXG4uaGxqcy1zdWIgLmhsanMtaWRlbnRpZmllcixcbi5obGpzLXBpLFxuLmhsanMtdGFnLFxuLmhsanMtdGFnIC5obGpzLWtleXdvcmQsXG4uaGxqcy1kZWNvcmF0b3IsXG4uaW5pIC5obGpzLXRpdGxlLFxuLmhsanMtc2hlYmFuZyxcbi5obGpzLXByb21wdCxcbi5obGpzLWhleGNvbG9yLFxuLmhsanMtcnVsZXMgLmhsanMtdmFsdWUsXG4uY3NzIC5obGpzLXZhbHVlIC5obGpzLW51bWJlcixcbi5obGpzLWxpdGVyYWwsXG4uaGxqcy1zeW1ib2wsXG4ucnVieSAuaGxqcy1zeW1ib2wgLmhsanMtc3RyaW5nLFxuLmhsanMtbnVtYmVyLFxuLmNzcyAuaGxqcy1mdW5jdGlvbixcbi5jbG9qdXJlIC5obGpzLWF0dHJpYnV0ZSB7XG4gIGNvbG9yOiAjMDBiMDdkO1xufVxuXG4uaGxqcy1jbGFzcyAuaGxqcy10aXRsZSxcbi5oYXNrZWxsIC5obGpzLXR5cGUsXG4uc21hbGx0YWxrIC5obGpzLWNsYXNzLFxuLmhsanMtamF2YWRvY3RhZyxcbi5obGpzLXlhcmRvY3RhZyxcbi5obGpzLXBocGRvYyxcbi5obGpzLXR5cGVuYW1lLFxuLmhsanMtdGFnIC5obGpzLWF0dHJpYnV0ZSxcbi5obGpzLWRvY3R5cGUsXG4uaGxqcy1jbGFzcyAuaGxqcy1pZCxcbi5obGpzLWJ1aWx0X2luLFxuLnNldHRpbmcsXG4uaGxqcy1wYXJhbXMsXG4uaGxqcy12YXJpYWJsZSxcbi5jbG9qdXJlIC5obGpzLXRpdGxlIHtcbiAgY29sb3I6ICMzZGFmZDQ7XG59XG5cbi5jc3MgLmhsanMtdGFnLFxuLmhsanMtcnVsZXMgLmhsanMtcHJvcGVydHksXG4uaGxqcy1wc2V1ZG8sXG4uaGxqcy1zdWJzdCB7XG4gIGNvbG9yOiAjMDAwO1xufVxuXG4uY3NzIC5obGpzLWNsYXNzLFxuLmNzcyAuaGxqcy1pZCB7XG4gIGNvbG9yOiAjOUI3MDNGO1xufVxuXG4uaGxqcy12YWx1ZSAuaGxqcy1pbXBvcnRhbnQge1xuICBjb2xvcjogI2ZmNzcwMDtcbiAgZm9udC13ZWlnaHQ6IGJvbGQ7XG59XG5cbi5obGpzLXJ1bGVzIC5obGpzLWtleXdvcmQge1xuICBjb2xvcjogI0M1QUY3NTtcbn1cblxuLmhsanMtYW5ub3RhdGlvbixcbi5hcGFjaGUgLmhsanMtc3FicmFja2V0LFxuLm5naW54IC5obGpzLWJ1aWx0X2luIHtcbiAgY29sb3I6ICM5Qjg1OUQ7XG59XG5cbi5obGpzLXByZXByb2Nlc3Nvcixcbi5obGpzLXByZXByb2Nlc3NvciAqLFxuLmhsanMtcHJhZ21hIHtcbiAgY29sb3I6ICM0NDQ7XG59XG5cbi50ZXggLmhsanMtZm9ybXVsYSB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNFRUU7XG4gIGZvbnQtc3R5bGU6IGl0YWxpYztcbn1cblxuLmRpZmYgLmhsanMtaGVhZGVyLFxuLmhsanMtY2h1bmsge1xuICBjb2xvcjogIzgwODA4MDtcbiAgZm9udC13ZWlnaHQ6IGJvbGQ7XG59XG5cbi5kaWZmIC5obGpzLWNoYW5nZSB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNCQ0NGRjk7XG59XG5cbi5obGpzLWFkZGl0aW9uIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI0JBRUVCQTtcbn1cblxuLmhsanMtZGVsZXRpb24ge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjRkZDOEJEO1xufVxuXG4uaGxqcy1jb21tZW50IC5obGpzLXlhcmRvY3RhZyB7XG4gIGZvbnQtd2VpZ2h0OiBib2xkO1xufVxuIiwiaDEsXG5oMixcbmgzLFxuaDQsXG5oNSxcbmg2IHtcbiAgZm9udC1mYW1pbHk6ICRmb250LWZhbWlseS1laW5hO1xuICBsZXR0ZXItc3BhY2luZzogLTAuMDJlbTtcbn1cblxuYSB7XG4gIHRyYW5zaXRpb246IGNvbG9yIC4ycztcblxuICAmOmhvdmVyIHtcbiAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG4gIH1cbn1cblxucCB7XG4gICYubGcge1xuICAgIGZvbnQtc2l6ZTogMThweDtcbiAgICBmb250LXdlaWdodDogNDAwO1xuICAgIGNvbG9yOiAkZGFya2lzaC1ncmV5O1xuXG4gICAgJi5zdHJvbmcge1xuICAgICAgZm9udC13ZWlnaHQ6IDUwMDtcbiAgICB9XG5cbiAgICAmLmxpZ2h0IHtcbiAgICAgIGNvbG9yOiAkZGFya2lzaC1ncmV5O1xuICAgIH1cbiAgfVxuXG4gICYuc20ge1xuICAgIGZvbnQtc2l6ZTogMTNweDtcbiAgfVxuXG4gICYueHMge1xuICAgIGZvbnQtc2l6ZTogMTFweDtcbiAgfVxufVxuXG4uc3ViaGVhZGluZyB7XG4gIGNvbG9yOiAjODg4O1xuICBmb250LXNpemU6IDE1cHg7XG59XG4iLCJAa2V5ZnJhbWVzIGZhZGVJbiB7XG4gIDAlIHsgb3BhY2l0eTogMDsgfVxuICAxMDAlIHsgb3BhY2l0eTogMTsgfVxufVxuXG5Aa2V5ZnJhbWVzIGNyb3NzRmFkZUluT3V0IHtcbiAgMCUsIDQwJSwgMTAwJSB7IG9wYWNpdHk6IDA7fVxuICA1MCUsIDkwJSB7IG9wYWNpdHk6IDE7IH1cbn1cblxuQGtleWZyYW1lcyBmYWRlSW5VcFNtYWxsIHtcbiAgMCUge1xuICAgIG9wYWNpdHk6IDA7XG4gICAgdHJhbnNmb3JtOiBzY2FsZSguNjY3LCAuNjY3KSB0cmFuc2xhdGVZKDIwcHgpO1xuICB9XG5cbiAgMTAwJSB7XG4gICAgb3BhY2l0eTogLjU7XG4gICAgdHJhbnNmb3JtOiBzY2FsZSguNjY3LCAuNjY3KSB0cmFuc2xhdGVZKDApO1xuICB9XG59XG5cbkBrZXlmcmFtZXMgZmFkZUluVXAge1xuICAwJSB7XG4gICAgb3BhY2l0eTogMDtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMjBweCk7XG4gIH1cblxuICA1MCUgeyBvcGFjaXR5OiAxOyB9XG5cbiAgMTAwJSB7XG4gICAgb3BhY2l0eTogMTtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMCk7XG4gIH1cbn1cblxuQGtleWZyYW1lcyBmYWRlSW5Eb3duIHtcbiAgMCUge1xuICAgIG9wYWNpdHk6IDA7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC0yMHB4KTtcbiAgfVxuXG4gIDUwJSB7IG9wYWNpdHk6IDE7IH1cblxuICAxMDAlIHtcbiAgICBvcGFjaXR5OiAxO1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgwKTtcbiAgfVxufVxuXG5Aa2V5ZnJhbWVzIGZhZGVPdXQge1xuICAwJSB7IG9wYWNpdHk6IDE7IH1cbiAgMTAwJSB7IG9wYWNpdHk6IDA7IH1cbn1cblxuQGtleWZyYW1lcyBmYWRlT3V0VXAge1xuICAwJSB7XG4gICAgb3BhY2l0eTogMTtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMCk7XG4gIH1cblxuICAxMDAlIHtcbiAgICBvcGFjaXR5OiAwO1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtMjBweCk7XG4gIH1cbn1cblxuQGtleWZyYW1lcyBwdWxzZSB7XG4gIDAlIHsgdHJhbnNmb3JtOiBzY2FsZTNkKDEsIDEsIDEpOyB9XG4gIDIwJSB7IHRyYW5zZm9ybTogc2NhbGUzZCgxLjA1LCAxLjA1LCAxKTsgfVxuICAxMDAlIHsgdHJhbnNmb3JtOiBzY2FsZTNkKDEsIDEsIDEpOyB9XG59XG5cbkBrZXlmcmFtZXMgdGlsdEluIHtcbiAgMCUgeyB0cmFuc2Zvcm06IHJvdGF0ZVgoLTMwZGVnKTsgfVxuICAxMDAlIHsgdHJhbnNmb3JtOiByb3RhdGVYKDBkZWcpOyB9XG59XG5cbkBrZXlmcmFtZXMgc2ltcGxlSG92ZXJZIHtcbiAgMCUge3RyYW5zZm9ybTogdHJhbnNsYXRlM2QoMCwgMCwgMCk7fVxuICA1MCUge3RyYW5zZm9ybTogdHJhbnNsYXRlM2QoMCwgMTBweCwgMCk7fVxuICAxMDAlIHt0cmFuc2Zvcm06IHRyYW5zbGF0ZTNkKDAsIDApO31cbn1cblxuQGtleWZyYW1lcyBzaW1wbGVIb3Zlclgge1xuICAwJSB7dHJhbnNmb3JtOiB0cmFuc2xhdGUzZCgwLCAwLCAwKTt9XG4gIDUwJSB7dHJhbnNmb3JtOiB0cmFuc2xhdGUzZCgyMjVweCwgMCwgMCk7fVxuICAxMDAlIHt0cmFuc2Zvcm06IHRyYW5zbGF0ZTNkKDAsIDApO31cbn1cblxuQGtleWZyYW1lcyBzaW1wbGVIb3ZlclhTbWFsbCB7XG4gIDAlIHt0cmFuc2Zvcm06IHRyYW5zbGF0ZTNkKDAsIDAsIDApO31cbiAgNTAlIHt0cmFuc2Zvcm06IHRyYW5zbGF0ZTNkKDUwcHgsIDAsIDApO31cbiAgMTAwJSB7dHJhbnNmb3JtOiB0cmFuc2xhdGUzZCgwLCAwKTt9XG59XG5cbkBrZXlmcmFtZXMgaW5lcnRpYVRpbHQge1xuICAwJSB7dHJhbnNmb3JtOiByb3RhdGUoNWRlZyk7fVxuICAxNSUge3RyYW5zZm9ybTogcm90YXRlKC0xZGVnKTt9XG4gIDMwJSB7dHJhbnNmb3JtOiByb3RhdGUoMWRlZyk7fVxuICA0MCUge3RyYW5zZm9ybTogcm90YXRlKDBkZWcpO31cbiAgNTAlIHt0cmFuc2Zvcm06IHJvdGF0ZSgtNWRlZyk7fVxuICA2NSUge3RyYW5zZm9ybTogcm90YXRlKDFkZWcpO31cbiAgODAlIHt0cmFuc2Zvcm06IHJvdGF0ZSgtMWRlZyk7fVxuICA5MCUge3RyYW5zZm9ybTogcm90YXRlKDBkZWcpO31cbiAgMTAwJSB7dHJhbnNmb3JtOiByb3RhdGUoNWRlZyk7fVxufVxuXG5Aa2V5ZnJhbWVzIGhvdmVyWSB7XG4gIDAlIHt0cmFuc2Zvcm06IHRyYW5zbGF0ZSgwLCAwKSBzY2FsZSgxKTt9XG4gIDEwJSB7dHJhbnNmb3JtOiB0cmFuc2xhdGUoMXB4LCAycHgpIHNjYWxlKDEpO31cbiAgMjAlIHt0cmFuc2Zvcm06IHRyYW5zbGF0ZSgwLCAtM3B4KSBzY2FsZSgxKTt9XG4gIDMwJSB7dHJhbnNmb3JtOiB0cmFuc2xhdGUoLTFweCwgM3B4KSBzY2FsZSgxKTt9XG4gIDQwJSB7dHJhbnNmb3JtOiB0cmFuc2xhdGUoMCwgLTFweCkgc2NhbGUoMSk7fVxuICA1MCUge3RyYW5zZm9ybTogdHJhbnNsYXRlKC0xcHgsIDApIHNjYWxlKDEpO31cbiAgNjAlIHt0cmFuc2Zvcm06IHRyYW5zbGF0ZSgwLCAtM3B4KSBzY2FsZSgxKTt9XG4gIDcwJSB7dHJhbnNmb3JtOiB0cmFuc2xhdGUoMXB4LCAycHgpIHNjYWxlKDEpO31cbiAgODAlIHt0cmFuc2Zvcm06IHRyYW5zbGF0ZSgwLCAtM3B4KSBzY2FsZSgxKTt9XG4gIDkwJSB7dHJhbnNmb3JtOiB0cmFuc2xhdGUoLTFweCwgMXB4KSBzY2FsZSgxKTt9XG4gIDEwMCUge3RyYW5zZm9ybTogdHJhbnNsYXRlKDAsIDApIHNjYWxlKDEpO31cbn1cblxuQGtleWZyYW1lcyBmaWd1cmVlaWdodCB7XG4gIDAlIHt0cmFuc2Zvcm06IHRyYW5zbGF0ZTNkKDAsIDAsIDApO31cbiAgMiUge3RyYW5zZm9ybTogdHJhbnNsYXRlM2QoMXB4LCAuNXB4LCAwKTt9XG4gIDUlIHt0cmFuc2Zvcm06IHRyYW5zbGF0ZTNkKDJweCwgMXB4LCAwKTt9XG4gIDclIHt0cmFuc2Zvcm06IHRyYW5zbGF0ZTNkKDNweCwgMS41cHgsIDApO31cbiAgMTAlIHt0cmFuc2Zvcm06IHRyYW5zbGF0ZTNkKDRweCwgMS44cHgsIDApO31cbiAgMTIlIHt0cmFuc2Zvcm06IHRyYW5zbGF0ZTNkKDVweCwgMnB4LCAwKTt9XG4gIDE1JSB7dHJhbnNmb3JtOiB0cmFuc2xhdGUzZCg2cHgsIDEuOHB4LCAwKTt9XG4gIDE3JSB7dHJhbnNmb3JtOiB0cmFuc2xhdGUzZCg3cHgsIDEuNXB4LCAwKTt9XG4gIDIwJSB7dHJhbnNmb3JtOiB0cmFuc2xhdGUzZCg4cHgsIDFweCwgMCk7fVxuICAyMiUge3RyYW5zZm9ybTogdHJhbnNsYXRlM2QoOC42cHgsIC41cHgsIDApO31cbiAgMjUlIHt0cmFuc2Zvcm06IHRyYW5zbGF0ZTNkKDlweCwgMCwgMCk7fVxuICAyNyUge3RyYW5zZm9ybTogdHJhbnNsYXRlM2QoOC4zcHgsIC0uNXB4LCAwKTt9XG4gIDMwJSB7dHJhbnNmb3JtOiB0cmFuc2xhdGUzZCg4cHgsIC0xcHgsIDApO31cbiAgMzIlIHt0cmFuc2Zvcm06IHRyYW5zbGF0ZTNkKDdweCwgLTEuNXB4LCAwKTt9XG4gIDM1JSB7dHJhbnNmb3JtOiB0cmFuc2xhdGUzZCg2cHgsIC0xLjhweCwgMCk7fVxuICAzNyUge3RyYW5zZm9ybTogdHJhbnNsYXRlM2QoNXB4LCAtMnB4LCAwKTt9XG4gIDQwJSB7dHJhbnNmb3JtOiB0cmFuc2xhdGUzZCg0cHgsIC0xLjhweCwgMCk7fVxuICA0MiUge3RyYW5zZm9ybTogdHJhbnNsYXRlM2QoM3B4LCAtMS41cHgsIDApO31cbiAgNDUlIHt0cmFuc2Zvcm06IHRyYW5zbGF0ZTNkKDJweCwgLTFweCwgMCk7fVxuICA0NyUge3RyYW5zZm9ybTogdHJhbnNsYXRlM2QoMXB4LCAtLjVweCwgMCk7fVxuICA1MCUge3RyYW5zZm9ybTogdHJhbnNsYXRlM2QoMCwgMCwgMCk7fVxuICA1MiUge3RyYW5zZm9ybTogdHJhbnNsYXRlM2QoLTFweCwgLjVweCwgMCk7fVxuICA1NSUge3RyYW5zZm9ybTogdHJhbnNsYXRlM2QoLTJweCwgMXB4LCAwKTt9XG4gIDU3JSB7dHJhbnNmb3JtOiB0cmFuc2xhdGUzZCgtM3B4LCAxLjVweCwgMCk7fVxuICA2MCUge3RyYW5zZm9ybTogdHJhbnNsYXRlM2QoLTRweCwgMS44cHgsIDApO31cbiAgNjIlIHt0cmFuc2Zvcm06IHRyYW5zbGF0ZTNkKC01cHgsIDJweCwgMCk7fVxuICA2NSUge3RyYW5zZm9ybTogdHJhbnNsYXRlM2QoLTZweCwgMS44cHgsIDApO31cbiAgNjclIHt0cmFuc2Zvcm06IHRyYW5zbGF0ZTNkKC03cHgsIDEuNXB4LCAwKTt9XG4gIDcwJSB7dHJhbnNmb3JtOiB0cmFuc2xhdGUzZCgtOHB4LCAxcHgsIDApO31cbiAgNzIlIHt0cmFuc2Zvcm06IHRyYW5zbGF0ZTNkKC04LjZweCwgLjVweCwgMCk7fVxuICA3NSUge3RyYW5zZm9ybTogdHJhbnNsYXRlM2QoLTlweCwgMCwgMCk7fVxuICA3NyUge3RyYW5zZm9ybTogdHJhbnNsYXRlM2QoLTguM3B4LCAtMXB4LCAwKTt9XG4gIDgwJSB7dHJhbnNmb3JtOiB0cmFuc2xhdGUzZCgtOHB4LCAtMnB4LCAwKTt9XG4gIDgyJSB7dHJhbnNmb3JtOiB0cmFuc2xhdGUzZCgtN3B4LCAtMS41cHgsIDApO31cbiAgODUlIHt0cmFuc2Zvcm06IHRyYW5zbGF0ZTNkKC02cHgsIC0xLjhweCwgMCk7fVxuICA4NyUge3RyYW5zZm9ybTogdHJhbnNsYXRlM2QoLTVweCwgLTJweCwgMCk7fVxuICA5MCUge3RyYW5zZm9ybTogdHJhbnNsYXRlM2QoLTRweCwgLTEuOHB4LCAwKTt9XG4gIDkyJSB7dHJhbnNmb3JtOiB0cmFuc2xhdGUzZCgtM3B4LCAtMS41cHgsIDApO31cbiAgOTUlIHt0cmFuc2Zvcm06IHRyYW5zbGF0ZTNkKC0ycHgsIC0xcHgsIDApO31cbiAgOTclIHt0cmFuc2Zvcm06IHRyYW5zbGF0ZTNkKC0xcHgsIC0uNXB4LCAwKTt9XG4gIDEwMCUge3RyYW5zZm9ybTogdHJhbnNsYXRlM2QoMCwgMCwgMCk7fVxufVxuXG5Aa2V5ZnJhbWVzIGRvdEV4cGFuZCB7XG4gIDAlIHtcbiAgICB0cmFuc2Zvcm06IHNjYWxlM2QoLjEsIC4xLCAxKTtcbiAgICBvcGFjaXR5OiAxO1xuICB9XG5cbiAgMTAwJSB7XG4gICAgdHJhbnNmb3JtOiBzY2FsZTNkKDIsIDIsIDEpO1xuICAgIG9wYWNpdHk6IDA7XG4gIH1cbn1cblxuQGtleWZyYW1lcyBnbG93IHtcbiAgMCUsIDMwJSwgMTAwJSB7IG9wYWNpdHk6IDA7IH1cbiAgMTUlIHsgb3BhY2l0eTogMTsgfVxufVxuXG5Aa2V5ZnJhbWVzIHNwcmVhZCB7XG4gIDAlIHt0cmFuc2Zvcm06IHNjYWxlWCgxKTsgb3BhY2l0eTogMTt9XG4gIDUwJSB7dHJhbnNmb3JtOiBzY2FsZVgoLjgpOyBvcGFjaXR5OiAuNTt9XG4gIDEwMCUge3RyYW5zZm9ybTogc2NhbGVYKDEpOyBvcGFjaXR5OiAxO31cbn1cblxuQGtleWZyYW1lcyBzcGluIHtcbiAgMCUge3RyYW5zZm9ybTogcm90YXRlKDBkZWcpO31cbiAgMTAwJSB7dHJhbnNmb3JtOiByb3RhdGUoMzYwZGVnKTt9XG59XG5cbkBrZXlmcmFtZXMgZmxvYXRpbmdDbG91ZCB7XG4gIDAlIHtcbiAgICB0cmFuc2Zvcm06IHNjYWxlM2QoLjYsLjYsMSk7XG4gICAgb3BhY2l0eTogMDtcbiAgfVxuICA1JSB7b3BhY2l0eTogLjl9XG4gIDEwJSB7b3BhY2l0eTogMX1cbiAgOTUlIHtvcGFjaXR5OiAxfVxuICAxMDAlIHtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZTNkKDE1MCUsIDEwMCUsIDApO1xuICAgIG9wYWNpdHk6IDA7XG4gIH1cbn1cblxuQGtleWZyYW1lcyBmbG9hdGluZ0Nsb3VkLTIge1xuICAwJSB7XG4gICAgdHJhbnNmb3JtOiBzY2FsZTNkKC4yLC4yLDEpO1xuICAgIG9wYWNpdHk6IDA7XG4gIH1cbiAgNSUge29wYWNpdHk6IC45fVxuICAyMCUge29wYWNpdHk6IDF9XG4gIDk1JSB7b3BhY2l0eTogMX1cbiAgMTAwJSB7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUzZCgxMTAlLCAzMCUsIDApIHNjYWxlM2QoLjQsLjQsMSk7XG4gICAgb3BhY2l0eTogMDtcbiAgfVxufVxuXG5Aa2V5ZnJhbWVzIGZsb2F0aW5nQ2xvdWQtMyB7XG4gIDAlIHtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZTNkKDE1MCUsIDcwJSwgMCkgc2NhbGUzZCguOCwuOCwxKTtcbiAgICBvcGFjaXR5OiAwO1xuICB9XG4gIDUlIHtvcGFjaXR5OiAxfVxuICAyMCUge29wYWNpdHk6IDF9XG4gIDkwJSB7b3BhY2l0eTogLjl9XG4gIDEwMCUge1xuICAgIHRyYW5zZm9ybTogc2NhbGUzZCguNCwuNCwxKTtcbiAgICBvcGFjaXR5OiAwO1xuICB9XG59XG5cbkBrZXlmcmFtZXMgZmxvYXRpbmdDbG91ZC00IHtcbiAgMCUge1xuICAgIHRyYW5zZm9ybTogc2NhbGUzZCgxLjIsMS4yLDEpO1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlM2QoMTEwJSwgMTUwJSwgMCk7XG4gICAgb3BhY2l0eTogMDtcbiAgfVxuICA1JSB7b3BhY2l0eTogMX1cbiAgOTAlIHtvcGFjaXR5OiAxfVxuICA5NSUge29wYWNpdHk6IC45fVxuICAxMDAlIHtcbiAgICB0cmFuc2Zvcm06IHNjYWxlM2QoLjgsLjgsMSk7XG4gICAgb3BhY2l0eTogMDtcbiAgfVxufVxuXG5Aa2V5ZnJhbWVzIHJhaW5Ecm9wIHtcbiAgMCUge1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlM2QoMCwgMCwgMCk7XG4gICAgb3BhY2l0eTogMDtcbiAgfVxuICA1JSB7b3BhY2l0eTogLjl9XG4gIDEwJSB7b3BhY2l0eTogMX1cbiAgOTUlIHtvcGFjaXR5OiAxfVxuICAxMDAlIHtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZTNkKDAsIDgwMCUsIDApO1xuICAgIG9wYWNpdHk6IDA7XG4gIH1cbn1cblxuQGtleWZyYW1lcyBzY3JlZW5Qb3AtMSB7XG4gIDAlIHtcbiAgICBvcGFjaXR5OiAxO1xuICAgIHotaW5kZXg6IDA7XG4gIH1cbiAgODklIHsgIG9wYWNpdHk6IDE7IH1cbiAgOTUlIHtcbiAgICB0cmFuc2Zvcm06IHNjYWxlM2QoMSwxLDEpO1xuICAgIG9wYWNpdHk6IDA7XG4gIH1cbiAgOTYlIHsgIHRyYW5zZm9ybTogc2NhbGUzZCgxLjEsIDEuMSwgMSk7IH1cbiAgMTAwJSB7XG4gICAgb3BhY2l0eTogMTtcbiAgICB0cmFuc2Zvcm06IHNjYWxlM2QoMSwxLDEpO1xuICB9XG59XG5cblxuQGtleWZyYW1lcyBzY3JlZW5Qb3AtMiB7XG4gIDAlIHsgb3BhY2l0eTogMDsgfVxuICAzMCUge1xuICAgIHRyYW5zZm9ybTogc2NhbGUzZCgxLDEsMSk7XG4gICAgb3BhY2l0eTogMDtcbiAgfVxuICAzMSUgeyAgdHJhbnNmb3JtOiBzY2FsZTNkKDEuMSwgMS4xLCAxKTsgfVxuICAzNSUge1xuICAgIHRyYW5zZm9ybTogc2NhbGUzZCgxLDEsMSk7XG4gICAgb3BhY2l0eTogMTtcbiAgfVxuICA2OSUgeyBvcGFjaXR5OiAxOyB9XG4gIDcwJSB7IG9wYWNpdHk6IDA7IH1cbiAgMTAwJSB7IG9wYWNpdHk6IDA7IH1cbn1cblxuQGtleWZyYW1lcyBzY3JlZW5Qb3AtMyB7XG4gIDAlIHsgb3BhY2l0eTogMDsgfVxuICA2MyUge1xuICAgIHRyYW5zZm9ybTogc2NhbGUzZCgxLDEsMSk7XG4gICAgb3BhY2l0eTogMDtcbiAgfVxuICA2NCUgeyAgdHJhbnNmb3JtOiBzY2FsZTNkKDEuMSwgMS4xLCAxKTsgfVxuICA2OCUge1xuICAgIHRyYW5zZm9ybTogc2NhbGUzZCgxLDEsMSk7XG4gICAgb3BhY2l0eTogMTtcbiAgfVxuICA5NiUgeyBvcGFjaXR5OiAxOyB9XG4gIDEwMCUgeyBvcGFjaXR5OiAwOyB9XG59XG5cbkBrZXlmcmFtZXMgaG9tZS1hcHAtZ3JvdXAtaXBob25lIHtcbiAgMCUgeyB0cmFuc2Zvcm06IHJvdGF0ZVkoMTVkZWcpIHRyYW5zbGF0ZTNkKDgwcHgsIDAsIDApOyB9XG4gIDEwMCUgeyB0cmFuc2Zvcm06IHJvdGF0ZVkoMTVkZWcpIHRyYW5zbGF0ZTNkKDAsIDAsIDApOyB9XG59XG5cbkBrZXlmcmFtZXMgaG9tZS1hcHAtZ3JvdXAtYW5kcm9pZCB7XG4gIDAlIHsgdHJhbnNmb3JtOiByb3RhdGVZKDE1ZGVnKSB0cmFuc2xhdGUzZCgtNzRweCwgNDBweCwgMCk7IH1cbiAgMTAwJSB7IHRyYW5zZm9ybTogcm90YXRlWSgxNWRlZykgdHJhbnNsYXRlM2QoMCwgMCwgMCk7IH1cbn1cblxuQGtleWZyYW1lcyBob21lLWFwcC1pcGhvbmUge1xuICAwJSB7IHRyYW5zZm9ybTogdHJhbnNsYXRlM2QoMzBweCwgLTEwcHgsIDApOyB9XG4gIDEwMCUgeyB0cmFuc2Zvcm06IHRyYW5zbGF0ZTNkKDAsIDAsIDApOyB9XG59XG5cbkBrZXlmcmFtZXMgaG9tZS1hcHAtYW5kcm9pZCB7XG4gIDAlIHsgdHJhbnNmb3JtOiB0cmFuc2xhdGUzZCgxMHB4LCAtNHB4LCAwKTsgfVxuICAxMDAlIHsgdHJhbnNmb3JtOiB0cmFuc2xhdGUzZCgwLCAwLCAwKTsgfVxufVxuXG5Aa2V5ZnJhbWVzIGNhcm91c2VsIHtcbiAgMCUgeyAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKDApIH1cbiAgMTAwJSB7ICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTUwJSkgfVxufSIsIi5iYW5uZXIge1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG5cbiAgJi0taGVybyB7XG4gICAgLmNvbnRhaW5lciB7XG4gICAgICBtYXgtd2lkdGg6IDcwMHB4O1xuICAgIH1cblxuICAgIGgxIHtcbiAgICAgIG1hcmdpbi10b3A6IDJlbTtcbiAgICAgIGZvbnQtc2l6ZTogMzZweDtcbiAgICAgIG1hcmdpbi1ib3R0b206IDEuNGVtO1xuICAgIH1cblxuICAgIHAge1xuICAgICAgZm9udC1zaXplOiAxNnB4O1xuICAgICAgbGluZS1oZWlnaHQ6IDEuOGVtO1xuICAgIH1cbiAgfVxufVxuIiwiLmJhciB7XG4gICYubmF2eSB7XG4gICAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KHRvIHJpZ2h0LCAjMWQyNTM0IDAlLCMyNDM0NTIgMTAwJSk7XG5cbiAgICBoMSxcbiAgICBoMixcbiAgICBoMyxcbiAgICBoNCxcbiAgICBoNSB7XG4gICAgICBjb2xvcjogd2hpdGU7XG4gICAgfVxuXG4gICAgcCB7XG4gICAgICBjb2xvcjogI2EyYjVkNjtcbiAgICB9XG4gIH1cblxuICBoMSxcbiAgaDIsXG4gIGgzLFxuICBoNCxcbiAgaDUge1xuICAgIGZvbnQtd2VpZ2h0OiA2MDA7XG4gIH1cblxuICBwIHtcbiAgICBtYXJnaW4tYm90dG9tOiAyN3B4O1xuICB9XG5cbiAgLmJ0biB7XG4gICAgcGFkZGluZzogMjBweCAyMXB4IDE1cHg7XG4gIH1cblxuICAuaGVybyB7XG4gICAgcGFkZGluZzogOTVweCAwIDEwMXB4O1xuICB9XG59XG4iLCJiYXItY2hhcnQsXG4uc3VydmV5LWxheW91dCBtYWluIHN2ZyB7XG4gIHdpZHRoOiAxMDAlO1xuICBkaXNwbGF5OiBibG9jaztcbiAgbWFyZ2luLWJvdHRvbTogNDhweDtcblxuICA+IHN2ZyB7XG4gICAgd2lkdGg6IDEwMCU7XG4gIH1cblxuICAudGljayB7XG4gICAgbGluZSB7XG4gICAgICBvcGFjaXR5OiAwO1xuICAgIH1cblxuICAgIHRzcGFuIHtcbiAgICAgIGZvbnQtc2l6ZTogMTJweDtcbiAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7XG4gICAgICAtd2Via2l0LWZvbnQtc21vb3RoaW5nOiBzdWJwaXhlbC1hbnRpYWxpYXNlZDtcbiAgICB9XG4gIH1cblxuICAuYzMtdGV4dCB7XG4gICAgZm9udC1zaXplOiAxMXB4O1xuICAgIGZvbnQtd2VpZ2h0OiA1MDA7XG4gICAgLXdlYmtpdC1mb250LXNtb290aGluZzogc3VicGl4ZWwtYW50aWFsaWFzZWQ7XG4gIH1cblxuICAuZG9tYWluIHtcbiAgICBvcGFjaXR5OiAwO1xuICB9IFxuXG4gIC5jMy1ncmlkIGxpbmUge1xuICAgIHN0cm9rZTogI2VlZTtcbiAgICBzdHJva2UtZGFzaGFycmF5OiAwO1xuICB9XG5cbiAgLmMzLWJhci5fZXhwYW5kZWRfIHtcbiAgICBmaWxsLW9wYWNpdHk6IDE7XG4gIH1cbn1cblxuIiwiLmNoZWNrbWFyay1saXN0IHtcbiAgJi0tbGFyZ2Uge1xuICAgIG1heC13aWR0aDogMzgwcHg7XG5cbiAgICBsaSB7XG4gICAgICBsaW5lLWhlaWdodDogMjZweDtcbiAgICAgIGZvbnQtc2l6ZTogMTZweDtcbiAgICAgIGxldHRlci1zcGFjaW5nOiAtMC4wMWVtO1xuICAgICAgY29sb3I6ICM2MTZFN0U7XG4gICAgICBkaXNwbGF5OiBmbGV4O1xuICAgIH1cblxuICAgIGxpICsgbGkge1xuICAgICAgbWFyZ2luLXRvcDogMjBweDtcbiAgICB9XG5cbiAgICBpIHtcbiAgICAgIG1hcmdpbi1yaWdodDogNnB4O1xuICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICAgd2lkdGg6IDI0cHg7XG4gICAgICBoZWlnaHQ6IDI0cHg7XG4gICAgICBmbGV4OiAwIDAgMjRweDtcbiAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gICAgICBib3JkZXItcmFkaXVzOiAxMDAlO1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogIzczODQ5QTs7XG4gICAgICB6LWluZGV4OiAtMTtcbiAgICAgIG1hcmdpbi1yaWdodDogMTZweDtcbiAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgycHgpO1xuICAgIH1cblxuICAgIGlvbi1pY29uIHtcbiAgICAgIGZvbnQtc2l6ZTogMTZweDtcbiAgICAgIGNvbG9yOiAjZmZmO1xuICAgIH1cblxuICAgIGhncm91cCB7XG4gICAgICBoNSB7XG4gICAgICAgIG1hcmdpbi10b3A6IC0ycHg7XG4gICAgICAgIG1hcmdpbi1ib3R0b206IDA7XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAzM3B4O1xuICAgICAgICBmb250LXNpemU6IDE2cHg7XG4gICAgICAgIGxldHRlci1zcGFjaW5nOiAtMC4wMWVtO1xuICAgICAgICBjb2xvcjogIzNDNTM2RjtcbiAgICAgICAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgICAgIH1cbiAgICAgIHAge1xuICAgICAgICBsaW5lLWhlaWdodDogMjNweDtcbiAgICAgICAgZm9udC1zaXplOiAxNHB4O1xuICAgICAgICBsZXR0ZXItc3BhY2luZzogLTAuMDFlbTtcbiAgICAgICAgY29sb3I6ICM5MkExQjM7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgJi0tc21hbGwge1xuICAgIG1hcmdpbjogMDtcbiAgICBwYWRkaW5nOiAwO1xuXG4gICAgbGkge1xuICAgICAgbGluZS1oZWlnaHQ6IDEzcHg7XG4gICAgICBmb250LXNpemU6IDEycHg7XG4gICAgICBjb2xvcjogIzVCNzA4QjtcbiAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgfVxuXG4gICAgaW9uLWljb24ge1xuICAgICAgZm9udC1zaXplOiAxNXB4O1xuICAgICAgY29sb3I6ICM5MkExQjM7XG4gICAgICBmbGV4OiAwIDAgMTVweDtcbiAgICAgIG1hcmdpbi1yaWdodDogNnB4O1xuICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDRweCk7XG4gICAgfVxuICB9XG59XG4iLCIubW9kYWwgZm9ybSxcbi5mb3JtLWlubGluZSB7XG4gIG1heC13aWR0aDogNDIwcHg7XG5cbiAgaW5wdXQsXG4gIC5zZWxlY3Qtd3JhcHBlcixcbiAgdGV4dGFyZWEge1xuICAgIGJvcmRlcjogMXB4IHNvbGlkICNlMWU1ZWQ7XG4gICAgLy8gcGFkZGluZzogMTVweCA1cHggMTVweCAxOHB4O1xuICAgIGZvbnQtd2VpZ2h0OiA1MDA7XG4gICAgZmxvYXQ6IGxlZnQ7XG4gICAgYm9yZGVyLXJhZGl1czogNHB4O1xuICAgIHRyYW5zaXRpb246IGJvcmRlci1jb2xvciAuMnM7XG4gICAgYm94LXNoYWRvdzogbm9uZTtcblxuICAgICY6Oi13ZWJraXQtaW5wdXQtcGxhY2Vob2xkZXIge1xuICAgICAgY29sb3I6ICRsaWdodGlzaC1ncmV5O1xuICAgIH1cblxuICAgICY6LW1zLWlucHV0LXBsYWNlaG9sZGVyIHtcbiAgICAgIGNvbG9yOiAkbGlnaHRpc2gtZ3JleTtcbiAgICB9XG4gICAgXG4gICAgJjp2YWxpZCB7XG4gICAgICBib3JkZXItY29sb3I6ICNCNEJCQzU7XG4gICAgfVxuXG4gICAgJjpob3ZlcixcbiAgICAmOmZvY3VzLFxuICAgICY6YWN0aXZlIHtcbiAgICAgIG91dGxpbmU6IG5vbmU7XG4gICAgICBib3JkZXItY29sb3I6ICRibHVlO1xuICAgICAgYm94LXNoYWRvdzogbm9uZTtcbiAgICB9XG4gIH1cblxuICBpbnB1dC5pbnZhbGlkLFxuICBpbnB1dC5uZy10b3VjaGVkOm5vdCg6Zm9jdXMpOm5vdCg6dmFsaWQpIHtcbiAgICBib3JkZXItY29sb3I6ICRyZWQ7XG4gIH1cblxuICBpbnB1dCxcbiAgLnNlbGVjdC13cmFwcGVyLFxuICBpbnB1dC5mb3JtLWNvbnRyb2wge1xuICAgIHdpZHRoOiAxOTBweDtcbiAgICBtYXJnaW46IDAgN3B4IDEwcHggMDtcbiAgICBoZWlnaHQ6IDQzcHg7XG5cbiAgICAmOm50aC1jaGlsZCgyKSxcbiAgICAmOm50aC1jaGlsZCg0KSxcbiAgICAmOm50aC1jaGlsZCg2KSxcbiAgICAmOm50aC1jaGlsZCg4KSB7XG4gICAgICBtYXJnaW4tcmlnaHQ6IDA7XG4gICAgICB3aWR0aDogMTkwcHg7XG4gICAgfVxuXG4gICAgJi5mdWxsLXdpZHRoLFxuICAgICYuZnVsbC13aWR0aDpudGgtY2hpbGQoMiksXG4gICAgJi5mdWxsLXdpZHRoOm50aC1jaGlsZCg0KSxcbiAgICAmLmZ1aWxsLXdpZHRoOm50aC1jaGlsZCg2KSxcbiAgICAmLmZ1aWxsLXdpZHRoOm50aC1jaGlsZCg4KSB7XG4gICAgICB3aWR0aDogMTAwJTtcbiAgICB9XG4gIH1cblxuICAuc2VsZWN0LXdyYXBwZXIge1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICBiYWNrZ3JvdW5kOiB3aGl0ZTtcbiAgICAvLyBib3JkZXItY29sb3I6ICNCNEJCQzU7XG5cbiAgICAudXAge1xuICAgICAgd2lkdGg6IDA7XG4gICAgICBoZWlnaHQ6IDA7XG4gICAgICBib3JkZXItbGVmdDogNXB4IHNvbGlkIHRyYW5zcGFyZW50O1xuICAgICAgYm9yZGVyLXJpZ2h0OiA1cHggc29saWQgdHJhbnNwYXJlbnQ7XG4gICAgICBib3JkZXItYm90dG9tOiA1cHggc29saWQgJGdyZXk7XG4gICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgIG1hcmdpbi1ib3R0b206IDNweDtcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgIHJpZ2h0OiAxMHB4O1xuICAgICAgdG9wOiAxM3B4O1xuICAgIH1cblxuICAgIC5kbiB7XG4gICAgICB3aWR0aDogMDtcbiAgICAgIGhlaWdodDogMDtcbiAgICAgIGJvcmRlci1sZWZ0OiA1cHggc29saWQgdHJhbnNwYXJlbnQ7XG4gICAgICBib3JkZXItcmlnaHQ6IDVweCBzb2xpZCB0cmFuc3BhcmVudDtcbiAgICAgIGJvcmRlci10b3A6IDVweCBzb2xpZCAkZ3JleTtcbiAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgcmlnaHQ6IDEwcHg7XG4gICAgICB0b3A6IDIwcHg7XG4gICAgfVxuXG4gICAgc2VsZWN0IHtcbiAgICAgIC13ZWJraXQtYXBwZWFyYW5jZTogbm9uZTtcbiAgICAgIC1tb3otYXBwZWFyYW5jZTogbm9uZTtcbiAgICAgIC1tcy1hcHBlYXJhbmNlOiBub25lO1xuICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgbGVmdDogMDtcbiAgICAgIHJpZ2h0OiAwO1xuICAgICAgdG9wOiAwO1xuICAgICAgYm90dG9tOiAwO1xuICAgICAgYm9yZGVyOiAwO1xuICAgICAgcGFkZGluZy10b3A6IDEwcHg7XG4gICAgICBvdXRsaW5lOiBub25lO1xuICAgICAgYm94LXNoYWRvdzogbm9uZTtcbiAgICAgIHotaW5kZXg6IDE7XG4gICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcbiAgICAgIHdpZHRoOiAxMDAlO1xuICAgIH1cblxuICAgICYubnVsbCB7XG4gICAgICBib3JkZXItY29sb3I6ICRsaWdodGVyLWdyZXk7XG5cbiAgICAgIHNlbGVjdCB7XG4gICAgICAgIGNvbG9yOiAkbGlnaHRpc2gtZ3JleTtcbiAgICAgIH1cblxuICAgICAgLnVwIHtcbiAgICAgICAgYm9yZGVyLXRvcC1jb2xvcjogJGxpZ2h0aXNoLWdyZXkgIWltcG9ydGFudDtcbiAgICAgIH1cblxuICAgICAgLmRuIHtcbiAgICAgICAgYm9yZGVyLWJvdHRvbS1jb2xvcjogJGxpZ2h0aXNoLWdyZXkgIWltcG9ydGFudDtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICB0ZXh0YXJlYSB7XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgcGFkZGluZzogMTJweDtcbiAgfVxuXG4gIEBtZWRpYSAobWF4LXdpZHRoOiA0MjBweCkgIHtcbiAgICBpbnB1dCxcbiAgICBpbnB1dDpudGgtY2hpbGQoMiksXG4gICAgaW5wdXQ6bnRoLWNoaWxkKDYpLFxuICAgIHNlbGVjdDpudGgtY2hpbGQoNCkge1xuICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICBtYXJnaW4tcmlnaHQ6IDA7XG4gICAgfVxuICB9XG5cbiAgYnV0dG9uIHtcbiAgICBmb250LXNpemU6IDEzcHg7XG4gICAgcGFkZGluZzogMTBweCAxM3B4IDhweDtcbiAgICBoZWlnaHQ6IDQxcHg7XG4gICAgbGluZS1oZWlnaHQ6IDEwcHg7XG4gICAgbWFyZ2luLXRvcDogMTBweDtcbiAgICBmbG9hdDogcmlnaHQ7XG4gICAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgICBsZXR0ZXItc3BhY2luZzogMDtcbiAgICB0ZXh0LXRyYW5zZm9ybTogbm9uZTtcbiAgfVxuXG4gIC5zdWNjZXNzIHtcbiAgICBjb2xvcjogJGdyZWVuO1xuICB9XG5cbiAgLmVycm9yIHtcbiAgICBjb2xvcjogJHJlZDtcbiAgfVxufVxuIiwiLm5hdmJhci1kZWZhdWx0IHtcbiAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KHRvIHJpZ2h0LCAjMzQ3ZWZmLCAjMWVhM2ZmKTtcbiAgZm9udC1mYW1pbHk6ICRmb250LWZhbWlseS1laW5hO1xuICBtYXJnaW4tYm90dG9tOiAyMHB4O1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIHBhZGRpbmctdG9wOiAyMHB4O1xuICBib3JkZXItcmFkaXVzOiAwO1xuICBtYXJnaW4tYm90dG9tOiAyMHB4O1xuICBtaW4taGVpZ2h0OiAzMnB4O1xuICB6LWluZGV4OiAzMDtcbiAgYm9yZGVyOiAwO1xuXG4gIEBtZWRpYSAobWF4LXdpZHRoOiAkc2NyZWVuLXhzLW1heCkge1xuICAgIHBvc2l0aW9uOiBmaXhlZDtcbiAgICB0b3A6IDA7XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgcGFkZGluZy10b3A6IDFweDtcbiAgICBtaW4taGVpZ2h0OiA1MHB4O1xuXG4gICAgJi5wcm9kdWN0cy1wYWdlIHtcbiAgICAgIHBvc2l0aW9uOiBmaXhlZDtcbiAgICB9XG4gIH1cblxuXG4gICYuZW50ZXJwcmlzZSB7XG4gICAgYmFja2dyb3VuZDogI2ZmZjtcblxuICAgIC5uYXZiYXItYnJhbmQgc3ZnIHtcbiAgICAgIGZpbGw6ICMwMDA7XG4gICAgfVxuXG4gICAgLm5hdmJhci10b2dnbGUgaSB7XG4gICAgICBjb2xvcjogIzAwMDtcbiAgICB9XG5cbiAgICAubmF2YmFyLXRvZ2dsZTpob3ZlciBpIHtcbiAgICAgIGNvbG9yOiByZ2JhKCMwMDAsIDAuNik7XG4gICAgfVxuICB9XG5cbiAgLm5hdmJhci1oZWFkZXIge1xuICAgIC8vIHdpZHRoOiAxMzJweDtcbiAgICBAbWVkaWEgKG1heC13aWR0aDogJHNjcmVlbi1zbS1tYXgpIHtcbiAgICAgIHdpZHRoOiBhdXRvO1xuICAgIH1cbiAgfVxuXG4gIC5uYXZiYXItYnJhbmQge1xuICAgIGhlaWdodDogMzJweDtcbiAgICBwYWRkaW5nOiAxcHggMCAwIDEzcHg7XG4gICAgdHJhbnNpdGlvbjogMC4zcyBvcGFjaXR5O1xuXG4gICAgQG1lZGlhIChtYXgtd2lkdGg6ICRzY3JlZW4teHMtbWF4KSB7XG4gICAgICBwYWRkaW5nLXRvcDogOHB4O1xuICAgIH1cblxuICAgIGltZyB7XG4gICAgICB3aWR0aDogMTI4cHg7XG4gICAgfVxuXG4gICAgJjpob3ZlciB7XG4gICAgICBvcGFjaXR5OiAwLjY1O1xuICAgIH1cbiAgfVxuXG4gICYudHJhbnNwYXJlbnQge1xuICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xuXG4gICAgQG1lZGlhIChtYXgtd2lkdGg6ICRzY3JlZW4teHMtbWF4KSB7XG4gICAgICBiYWNrZ3JvdW5kOiAjZmZmO1xuICAgICAgYm94LXNoYWRvdzogMHB4IDFweCAycHggMHB4IHJnYmEoMCwgMjAsIDU2LCAwLjA2KTtcbiAgICB9XG4gIH1cblxuICBAbWVkaWEgKG1heC13aWR0aDogJHNjcmVlbi14cy1tYXgpIHtcbiAgICAubmF2YmFyLWNvbGxhcHNlIHtcbiAgICAgIGJveC1zaGFkb3c6IDAgNHB4IDRweCByZ2JhKDAsIDAsIDAsIC4xKTtcbiAgICB9XG4gIH1cblxuXG4gICNpb25pYy1pby1sb2dvIHtcbiAgICBmaWxsOiAjZmZmO1xuICAgIGhlaWdodDogMzBweDtcbiAgICB3aWR0aDogOTZweDtcbiAgICBtYXJnaW46IDA7XG5cbiAgICAubGlnaHQgJixcbiAgICAmLmxpZ2h0IHtcbiAgICAgIGZpbGw6ICMzODgwRkY7XG4gICAgfVxuXG4gICAgQG1lZGlhIChtYXgtd2lkdGg6ICRzY3JlZW4teHMtbWF4KSB7XG4gICAgICBmaWxsOiAjMzg4MEZGO1xuICAgIH1cbiAgfVxuXG4gIC5uYXZiYXItY29sbGFwc2Uge1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICBtYXgtaGVpZ2h0OiAzMnB4O1xuICAgIEBtZWRpYSAobWF4LXdpZHRoOiAkc2NyZWVuLXhzLW1heCkge1xuICAgICAgbWF4LWhlaWdodDogNjAwcHg7XG4gICAgICBtYXJnaW4tdG9wOiAyMHB4O1xuICAgIH1cbiAgfVxuXG4gIC5uYXZiYXItbmF2IHtcbiAgICAmLm5hdmJhci1jZW50ZXIge1xuICAgICAgZmxvYXQ6IG5vbmU7XG4gICAgICBtYXJnaW46IDAgYXV0bztcbiAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICB9XG4gICAgQG1lZGlhIChtaW4td2lkdGg6ICRzY3JlZW4tbWQtbWluKSB7XG4gICAgICAmLm5hdmJhci1jZW50ZXIge1xuICAgICAgICBtYXJnaW4tbGVmdDogMHB4OyAvL29mZnNldCB0byBhbGlnbiB3aXRoIHByZS1oZWFkZXIgYW5ub3VuY2VtZW50XG4gICAgICB9XG4gICAgfVxuICAgIEBtZWRpYSAobWF4LXdpZHRoOiAkc2NyZWVuLXhzLW1heCkge1xuICAgICAgcGFkZGluZy1yaWdodDogNnB4O1xuICAgICAgcGFkZGluZy1sZWZ0OiA2cHg7XG4gICAgfVxuXG4gICAgPiBsaSB7XG4gICAgICBwYWRkaW5nLXRvcDogMDtcblxuICAgICAgJi5zbS1oaWRlIHtcbiAgICAgICAgQG1lZGlhIChtaW4td2lkdGg6ICRzY3JlZW4tc20tbWluKSBhbmQgKG1heC13aWR0aDogJHNjcmVlbi1zbS1tYXgpIHtcbiAgICAgICAgICBkaXNwbGF5OiBub25lO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBAbWVkaWEgKG1heC13aWR0aDogJHNjcmVlbi1tZC1tYXgpIHtcbiAgICAgICAgJi5oaWRlLWx0LWxnLFxuICAgICAgICAuaGlkZS1sdC1sZyB7XG4gICAgICAgICAgZGlzcGxheTogbm9uZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgQG1lZGlhIChtaW4td2lkdGg6ICRzY3JlZW4tbGctbWluKSB7XG4gICAgICAgICYuaGlkZS1ndC1tZCxcbiAgICAgICAgLmhpZGUtZ3QtbWQge1xuICAgICAgICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgPiBhIHtcbiAgICAgICAgY29sb3I6IHdoaXRlO1xuICAgICAgICBmb250LXNpemU6IDEzcHg7XG4gICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7XG4gICAgICAgIG1hcmdpbi10b3A6IDA7XG4gICAgICAgIHBhZGRpbmc6IDZweCA4cHg7XG4gICAgICAgIGxldHRlci1zcGFjaW5nOiAtLjAxZW07XG4gICAgICAgIG1hcmdpbi1sZWZ0OiAxNHB4O1xuICAgICAgICBtYXJnaW4tcmlnaHQ6IDE0cHg7XG4gICAgICAgIHRyYW5zaXRpb246IDAuMnMgY29sb3I7XG4gICAgICAgIGJvcmRlci10b3A6IG5vbmU7XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDRweDtcbiAgICAgICAgdHJhbnNpdGlvbi1kdXJhdGlvbjogMC4zcztcbiAgICAgICAgQG1lZGlhIChtYXgtd2lkdGg6ICRzY3JlZW4tbWQtbWF4KSB7XG4gICAgICAgICAgbWFyZ2luLWxlZnQ6IDlweDtcbiAgICAgICAgICBtYXJnaW4tcmlnaHQ6IDlweDtcbiAgICAgICAgfVxuICAgICAgICBAbWVkaWEgKG1heC13aWR0aDogJHNjcmVlbi1zbS1tYXgpIHtcbiAgICAgICAgICBtYXJnaW4tbGVmdDogMDtcbiAgICAgICAgICBtYXJnaW4tcmlnaHQ6IDA7XG4gICAgICAgICAgcGFkZGluZy1sZWZ0OiAxMHB4O1xuICAgICAgICAgIHBhZGRpbmctcmlnaHQ6IDEwcHg7XG4gICAgICAgIH1cbiAgICAgICAgQG1lZGlhIChtYXgtd2lkdGg6ICRzY3JlZW4teHMtbWF4KSB7XG4gICAgICAgICAgcGFkZGluZzogMTVweDtcbiAgICAgICAgICBib3JkZXI6IDA7XG4gICAgICAgIH1cblxuICAgICAgICAmOmhvdmVyIHtcbiAgICAgICAgICBjb2xvcjogcmdiYSh3aGl0ZSwgLjY1KTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAmLm9wZW4gPiBhIHtcbiAgICAgICAgY29sb3I6IHJnYmEod2hpdGUsIC42NSkgIWltcG9ydGFudDtcbiAgICAgIH1cblxuICAgICAgJi5hY3RpdmUgPiBhIHtcbiAgICAgICAgY29sb3I6IHJnYmEod2hpdGUsIDAuNCk7XG4gICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lO1xuICAgICAgfVxuXG4gICAgICAmLmFjdGl2ZSA+IGE6aG92ZXIge1xuICAgICAgICBjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjY1KTtcbiAgICAgIH1cblxuICAgICAgLmxpZ2h0ICYub3BlbiA+IGEge1xuICAgICAgICBjb2xvcjogIzEzMTkyNCAhaW1wb3J0YW50O1xuICAgICAgfVxuXG4gICAgICAmLmhlYWRlci1idG4td2hpdGUge1xuICAgICAgICBhIHtcbiAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKHdoaXRlLCAxKTtcbiAgICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xuICAgICAgICAgIHBhZGRpbmc6IDZweCA4cHggNnB4O1xuICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDRweDtcbiAgICAgICAgICBjb2xvcjogJGJsdWU7XG4gICAgICAgICAgYm94LXNoYWRvdzogMCAxcHggM3B4IHJnYmEoMCwwLDAsMC4xKTtcbiAgICAgICAgICBtYXJnaW4tcmlnaHQ6IDA7XG4gICAgICAgICAgbWFyZ2luLWxlZnQ6IDI0cHg7XG4gICAgICAgICAgdHJhbnNpdGlvbjogMC4zcyBib3gtc2hhZG93LCAwLjNzIGJhY2tncm91bmQ7XG5cbiAgICAgICAgICAmOmhvdmVyIHtcbiAgICAgICAgICAgIG9wYWNpdHk6IDE7XG4gICAgICAgICAgICBjb2xvcjogJGJsdWU7XG4gICAgICAgICAgICBib3gtc2hhZG93OiAwIDNweCA1cHggcmdiYShibGFjaywgLjE1KTtcbiAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6IHJnYmEod2hpdGUsIDEpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgICY6YWN0aXZlIHtcbiAgICAgICAgICAgIGJveC1zaGFkb3c6IGluc2V0IDAgMXB4IDRweCByZ2JhKDAsMCwwLC4yKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAmLmJsdWUge1xuICAgICAgICAgIEBtZWRpYSAobWluLXdpZHRoOiAkc2NyZWVuLXNtLW1pbikge1xuICAgICAgICAgICAgYSB7XG4gICAgICAgICAgICAgIGNvbG9yOiB3aGl0ZTtcbiAgICAgICAgICAgICAgYmFja2dyb3VuZDogJGJsdWU7XG5cbiAgICAgICAgICAgICAgJjpob3ZlciB7XG4gICAgICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgkYmx1ZSwgLjkpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cblxuXG4gIC8vIG1vYmlsZSB3aWR0aCBhbmltYXRpb24gJiBkZWZhdWx0IHN0eWxlc1xuICAuZHJvcGRvd24ge1xuICAgIC5kcm9wZG93bi1tZW51IHtcbiAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgdmlzaWJpbGl0eTogMDtcbiAgICAgIG9wYWNpdHk6IDA7XG4gICAgICB0cmFuc2Zvcm06IHNjYWxlWSgwKTtcbiAgICAgIHRyYW5zZm9ybS1vcmlnaW46IHRvcDtcbiAgICAgIHRyYW5zaXRpb246IHRyYW5zZm9ybSAwLjNzIGVhc2UsIG9wYWNpdHkgMC4zcztcbiAgICB9XG5cbiAgICAmLm9wZW4gLmRyb3Bkb3duLW1lbnUge1xuICAgICAgLy8gJjpob3ZlciAuZHJvcGRvd24tbWVudSB7XG4gICAgICB2aXNpYmlsaXR5OiAxO1xuICAgICAgb3BhY2l0eTogMTtcbiAgICAgIHRyYW5zZm9ybTogc2NhbGVZKDEpO1xuICAgIH1cblxuICAgIC5kaXZpZGVyIHtcbiAgICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjZWJlZWYyO1xuICAgICAgbWFyZ2luOiA2cHggMCAxM3B4O1xuICAgIH1cbiAgICBAbWVkaWEgKG1heC13aWR0aDogJHNjcmVlbi14cy1tYXgpIHtcbiAgICAgIC5kcm9wZG93bi1tZW51IHtcbiAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICAvLyBkZXNrdG9wIHdpZHRoIGFuaW1hdGlvblxuICBAbWVkaWEgKG1pbi13aWR0aDogJHNjcmVlbi1zbS1taW4pIHtcbiAgICAuZHJvcGRvd24ge1xuICAgICAgLmRyb3Bkb3duLW1lbnUge1xuICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICBib3JkZXI6IDA7XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDhweDtcbiAgICAgICAgdG9wOiAzOXB4O1xuICAgICAgICBwYWRkaW5nOiAxOHB4IDA7XG4gICAgICAgIHJpZ2h0OiBhdXRvO1xuICAgICAgICBsZWZ0OiA1MCU7XG4gICAgICAgIGJveC1zaGFkb3c6IDAgMTBweCAyOHB4IHJnYmEoMCwgMTYsIDQ0LCAwLjE4KSwgMCAxcHggNXB4IHJnYmEoMCwgMTYsIDQ0LCAwLjIpO1xuICAgICAgICBvcGFjaXR5OiAwO1xuICAgICAgICB0b3A6IC0yMDAwcHg7XG4gICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lO1xuICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZTNkKC01MCUsIC0xMHB4LCAwKSBzY2FsZSgxLDEpIHBlcnNwZWN0aXZlKDFweCk7XG4gICAgICAgIHotaW5kZXg6IDE7XG4gICAgICAgIHRyYW5zaXRpb24tZGVsYXk6IDBzO1xuICAgICAgICB0cmFuc2Zvcm0tb3JpZ2luOiA1MCUgMDtcbiAgICAgICAgdHJhbnNpdGlvbjogdHJhbnNmb3JtIDAuMnMgY3ViaWMtYmV6aWVyKDAuMzYsMC42NiwwLjA0LDEpLCBvcGFjaXR5IDAuMnMgbGluZWFyLCB0b3AgMC4yNXMgc3RlcC1lbmQ7XG4gICAgICAgIGJhY2tmYWNlLXZpc2liaWxpdHk6IGhpZGRlbjtcblxuXG4gICAgICAgICZfX3RleHQtLWwxLFxuICAgICAgICAmX190ZXh0LS1sMixcbiAgICAgICAgJl9fdGV4dC0tbDMsXG4gICAgICAgICZfX3RleHQtLWw0IHtcbiAgICAgICAgICBsaW5lLWhlaWdodDogMS4zO1xuICAgICAgICAgIGxldHRlci1zcGFjaW5nOiAtMC4wMWVtO1xuICAgICAgICAgIGNvbG9yOiAjNTI5MEZFO1xuICAgICAgICB9XG5cbiAgICAgICAgJl9fdGV4dC0tbDEge1xuICAgICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7XG4gICAgICAgICAgZm9udC1zaXplOiAxNnB4O1xuXG4gICAgICAgICAgaW9uLWljb24ge1xuICAgICAgICAgICAgdHJhbnNpdGlvbjogdHJhbnNsYXRlIDAuMnM7XG4gICAgICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgwLCAzcHgpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgICY6aG92ZXIgaW9uLWljb24ge1xuICAgICAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoMXB4LCAzcHgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgICZfX3RleHQtLWwyIHtcbiAgICAgICAgICBmb250LXdlaWdodDogNjAwO1xuICAgICAgICAgIGZvbnQtc2l6ZTogMTRweDtcbiAgICAgICAgfVxuXG4gICAgICAgICZfX3RleHQtLWwzIHtcbiAgICAgICAgICBmb250LXNpemU6IDEzcHg7XG4gICAgICAgICAgZm9udC1mYW1pbHk6ICRmb250LWZhbWlseS1pbnRlcjtcbiAgICAgICAgfVxuXG4gICAgICAgICZfX3RleHQtLWw0IHtcbiAgICAgICAgICBmb250LXNpemU6IDEwcHg7XG4gICAgICAgICAgbGluZS1oZWlnaHQ6IDE7XG4gICAgICAgICAgbGV0dGVyLXNwYWNpbmc6IDAuMWVtO1xuICAgICAgICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XG4gICAgICAgICAgY29sb3I6ICNCMkJFQ0Q7XG4gICAgICAgICAgZm9udC13ZWlnaHQ6IDcwMDtcbiAgICAgICAgfVxuXG4gICAgICAgIHVsICsgaDYge1xuICAgICAgICAgIG1hcmdpbi10b3A6IDI2cHg7XG4gICAgICAgIH1cblxuICAgICAgICBhLFxuICAgICAgICBsaSxcbiAgICAgICAgdWwge1xuICAgICAgICAgIG1hcmdpbjogMDtcbiAgICAgICAgICBwYWRkaW5nOiAwO1xuICAgICAgICB9XG5cbiAgICAgICAgbGkge1xuICAgICAgICAgIGxpc3Qtc3R5bGUtdHlwZTogbm9uZTtcbiAgICAgICAgICBwYWRkaW5nOiAwO1xuICAgICAgICB9XG5cbiAgICAgICAgYSxcbiAgICAgICAgc3BhbixcbiAgICAgICAgc3Ryb25nIHtcbiAgICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgICAgICBwYWRkaW5nOiA4cHggMjhweDtcbiAgICAgICAgICBtaW4td2lkdGg6IDIzMHB4O1xuICAgICAgICAgIHRyYW5zaXRpb246IDAuMnMgY29sb3I7XG4gICAgICAgIH1cblxuICAgICAgICBhLmRyb3Bkb3duLW1lbnVfX3RleHQtLWwxIHtcbiAgICAgICAgICBwYWRkaW5nOiAxMnB4IDI4cHg7XG4gICAgICAgIH1cblxuICAgICAgICBhLmRyb3Bkb3duLW1lbnVfX3RleHQtLWwzIHtcbiAgICAgICAgICBwYWRkaW5nOiA1cHggMjhweDtcbiAgICAgICAgfVxuXG4gICAgICAgIGEge1xuICAgICAgICAgIGNvbG9yOiAjNTI5MEZFO1xuICAgICAgICB9XG5cbiAgICAgICAgLmJpZyBhIHtcbiAgICAgICAgICBwYWRkaW5nLWxlZnQ6IDY1cHg7XG4gICAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuXG4gICAgICAgICAgc3ZnIHtcbiAgICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgICAgIGxlZnQ6IDMwcHg7XG4gICAgICAgICAgICB0b3A6IDE1cHg7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgc3BhbiB7XG4gICAgICAgICAgICBwYWRkaW5nLXRvcDogMDtcbiAgICAgICAgICAgIGNvbG9yOiAjNzM4NDlBICFpbXBvcnRhbnQ7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgc3Ryb25nIHtcbiAgICAgICAgICAgIHBhZGRpbmctdG9wOiAxMnB4O1xuICAgICAgICAgICAgcGFkZGluZy1ib3R0b206IDA7XG4gICAgICAgICAgICBjb2xvcjogIzUyOTBGRTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAmLS13aXRoYmlncyB7XG4gICAgICAgICAgIHBhZGRpbmctdG9wOiAwO1xuXG4gICAgICAgICAgIC5iaWc6Zmlyc3QtY2hpbGQge1xuICAgICAgICAgICAgIG1hcmdpbi10b3A6IDEycHggIWltcG9ydGFudDtcbiAgICAgICAgICAgfVxuXG4gICAgICAgICAgIC5iaWcgKyAuZGl2aWRlciB7XG4gICAgICAgICAgICAgbWFyZ2luLXRvcDogMThweDtcbiAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgYTpob3ZlciB7XG4gICAgICAgICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XG4gICAgICAgICAgY29sb3I6ICMzMzc2ZTg7XG5cbiAgICAgICAgICBzdHJvbmcsXG4gICAgICAgICAgc3BhbiB7XG4gICAgICAgICAgICBjb2xvcjogIzMzNzZlODtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAuZGl2aWRlciB7XG4gICAgICAgICAgcGFkZGluZy10b3A6IDIwcHg7XG4gICAgICAgICAgYmFja2dyb3VuZDogI2Y4ZjlmYjtcbiAgICAgICAgICBtYXJnaW4tdG9wOiAxNHB4O1xuICAgICAgICAgIGJvcmRlci1ib3R0b206IG5vbmU7XG5cbiAgICAgICAgICB+IGxpIGEsXG4gICAgICAgICAgfiBsaSBzcGFuIHtcbiAgICAgICAgICAgIGJhY2tncm91bmQ6ICNGNkY4RkI7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgfiBsaTpsYXN0LWNoaWxkIGEge1xuICAgICAgICAgICAgbWFyZ2luLWJvdHRvbTogLTE1cHg7XG4gICAgICAgICAgICBwYWRkaW5nLWJvdHRvbTogMjFweDtcbiAgICAgICAgICAgIGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6IDhweDtcbiAgICAgICAgICAgIGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiA4cHg7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLnNwbGl0IHtcbiAgICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICAgIGZsZXgtZGlyZWN0aW9uOiByb3c7XG4gICAgICAgICAgZmxleC13cmFwOiBub3dyYXA7XG4gICAgICAgICAgbWluLXdpZHRoOiAzNjBweDtcbiAgICAgICAgICBwYWRkaW5nLWJvdHRvbTogOHB4O1xuXG4gICAgICAgICAgYSxcbiAgICAgICAgICBzcGFuIHtcbiAgICAgICAgICAgIG1pbi13aWR0aDogMDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAuc20ge1xuICAgICAgICAgICAgY29sb3I6ICRibHVlO1xuICAgICAgICAgICAgZm9udC1zaXplOiAxMnB4O1xuICAgICAgICAgICAgZm9udC13ZWlnaHQ6IDQwMDtcbiAgICAgICAgICAgIHBhZGRpbmc6IDRweCAyOHB4O1xuXG4gICAgICAgICAgICAmOmhvdmVyIHtcbiAgICAgICAgICAgICAgY29sb3I6IGxpZ2h0ZW4oJGJsdWUsIDEwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAmOjphZnRlciB7XG4gICAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICAgIHRvcDogLTEwcHg7XG4gICAgICAgICAgY29udGVudDogJyc7XG4gICAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgICAgaGVpZ2h0OiAxOXB4O1xuICAgICAgICB9XG5cbiAgICAgICAgJjo6YmVmb3JlIHtcbiAgICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgICAgIHdpZHRoOiAxNHB4O1xuICAgICAgICAgICAgaGVpZ2h0OiAxNHB4O1xuICAgICAgICAgICAgdG9wOiAtNXB4O1xuICAgICAgICAgICAgcmlnaHQ6IGNhbGMoNTAlIC0gN3B4KTtcbiAgICAgICAgICAgIGJhY2tncm91bmQ6IHdoaXRlO1xuICAgICAgICAgICAgdHJhbnNmb3JtOiByb3RhdGUoNDVkZWcpO1xuICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4O1xuICAgICAgICAgICAgY29udGVudDogJyc7XG4gICAgICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAmLm9wZW4gLmRyb3Bkb3duLW1lbnUsXG4gICAgICAmOmhvdmVyIC5kcm9wZG93bi1tZW51IHtcbiAgICAgICAgb3BhY2l0eTogMTtcbiAgICAgICAgdG9wOiAzOXB4O1xuICAgICAgICB6LWluZGV4OiA0O1xuICAgICAgICBwb2ludGVyLWV2ZW50czogYWxsO1xuICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZTNkKC01MCUsIDAsIDApIHNjYWxlKDEsMSkgcGVyc3BlY3RpdmUoMXB4KTtcbiAgICAgICAgdHJhbnNpdGlvbjogdHJhbnNmb3JtIDAuMjVzIGN1YmljLWJlemllciguMTcsLjY3LC41MiwxKSwgb3BhY2l0eSAwLjFzIGxpbmVhciwgdG9wIDAuMjVzIHN0ZXAtc3RhcnQ7XG4gICAgICAgIHRyYW5zaXRpb24tZGVsYXk6IDAuMnM7XG4gICAgICB9XG5cbiAgICAgIC5jYXJldCB7XG4gICAgICAgIGJvcmRlci10b3A6IDNweCBkYXNoZWQ7XG4gICAgICAgIGJvcmRlci1yaWdodDogM3B4IHNvbGlkIHRyYW5zcGFyZW50O1xuICAgICAgICBib3JkZXItbGVmdDogM3B4IHNvbGlkIHRyYW5zcGFyZW50O1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC52ZXJzaW9uIHtcbiAgICBmbG9hdDogbGVmdDtcbiAgICBsaXN0LXN0eWxlOiBub25lO1xuICAgIHBhZGRpbmctbGVmdDogMDtcblxuICAgID4gbGkgPiBhIHtcbiAgICAgIHBhZGRpbmc6IDEycHggNXB4IDA7XG4gICAgICBmb250LXNpemU6IDE4cHg7XG4gICAgICBmb250LXdlaWdodDogNjAwO1xuICAgICAgY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgLjUpO1xuICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICBAbWVkaWEgKG1heC13aWR0aDogJHNjcmVlbi14cy1tYXgpIHtcbiAgICAgICAgcGFkZGluZzogMTNweCAxMHB4IDA7XG4gICAgICB9XG5cbiAgICAgICY6YWN0aXZlLFxuICAgICAgJjpmb2N1cyxcbiAgICAgICY6aG92ZXIge1xuICAgICAgICBjb2xvcjogcmdiYSh3aGl0ZSwgLjcpO1xuICAgICAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLmRyb3Bkb3duLW1lbnUge1xuICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICBib3JkZXI6IDA7XG4gICAgICBib3JkZXItcmFkaXVzOiAzcHg7XG4gICAgICBwYWRkaW5nOiAxMnB4IDAgMTBweDtcbiAgICAgIHRvcDogNTJweDtcbiAgICAgIGxlZnQ6IDcwcHg7XG4gICAgICByaWdodDogLTEwMHB4O1xuICAgICAgbWluLXdpZHRoOiAyMDVweDtcbiAgICAgIGJveC1zaGFkb3c6IDAgMnB4IDVweCByZ2JhKDAsIDAsIDAsIC4xNSksIDAgMCAxcHggcmdiYSgwLCAwLCAwLCAuMik7XG4gICAgICBvcGFjaXR5OiAwO1xuICAgICAgdHJhbnNmb3JtOiBzY2FsZSguMDEpO1xuICAgICAgdHJhbnNmb3JtLW9yaWdpbjogMjAlIDhweDtcbiAgICAgIHRyYW5zaXRpb246IGFsbCAwLjNzIGN1YmljLWJlemllciguMTU1LCAxLjEwNSwgLjI5NSwgMS4xMiksIG9wYWNpdHkgMC4xcyBsaW5lYXI7XG5cbiAgICAgIGEge1xuICAgICAgICBwYWRkaW5nOiA2cHggMjNweDtcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuNjtcbiAgICAgICAgZm9udC1zaXplOiAxM3B4O1xuICAgICAgICBmb250LXdlaWdodDogNTAwO1xuXG4gICAgICAgIGk6OmJlZm9yZSB7XG4gICAgICAgICAgZm9udC1zaXplOiAzMHB4O1xuICAgICAgICAgIGxpbmUtaGVpZ2h0OiAxMHB4O1xuICAgICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgICAgICB0b3A6IDdweDtcbiAgICAgICAgICBtYXJnaW4tbGVmdDogNXB4O1xuICAgICAgICB9XG5cbiAgICAgICAgJi5hY3RpdmUsXG4gICAgICAgICYuYWN0aXZlOmhvdmVyIHtcbiAgICAgICAgICBjb2xvcjogJGJsdWU7XG4gICAgICAgICAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xuICAgICAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xuICAgICAgICAgIGN1cnNvcjogZGVmYXVsdDtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAmOjpiZWZvcmUge1xuICAgICAgICBiYWNrZ3JvdW5kOiB1cmwoJy9pbWcvaWNvLW5hdi1hcnJvdy5wbmcnKSBjZW50ZXIgY2VudGVyIG5vLXJlcGVhdDtcbiAgICAgICAgYmFja2dyb3VuZC1zaXplOiAxNXB4O1xuICAgICAgICB3aWR0aDogMTVweDtcbiAgICAgICAgaGVpZ2h0OiA4cHg7XG4gICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgdG9wOiAtN3B4O1xuICAgICAgICBsZWZ0OiAzNXB4O1xuICAgICAgICBjb250ZW50OiAnJztcbiAgICAgICAgei1pbmRleDogNTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAmLm9wZW4gLmRyb3Bkb3duLW1lbnUge1xuICAgICAgb3BhY2l0eTogMTtcbiAgICAgIHRyYW5zZm9ybTogc2NhbGUoMSk7XG4gICAgfVxuICB9XG5cbiAgLmhlYWRlci1mb3JtIHtcbiAgICBtYXJnaW46IDZweCAwIDAgMTEwcHg7XG5cbiAgICBAbWVkaWEgKG1heC13aWR0aDogMTMzMHB4KSB7XG4gICAgICBtYXJnaW4tbGVmdDogMDtcbiAgICB9XG5cbiAgICAuZm9ybS1ncm91cCB7XG4gICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICBwYWRkaW5nLWxlZnQ6IDA7XG4gICAgICBtYXJnaW4tYm90dG9tOiAwO1xuXG4gICAgICBpbnB1dCB7XG4gICAgICAgIGJhY2tncm91bmQ6IHJnYmEoMjU1LCAyNTUsIDI1NSwgLjEpO1xuICAgICAgICBib3gtc2hhZG93OiBub25lO1xuICAgICAgICBib3JkZXI6IDA7XG4gICAgICAgIGNvbG9yOiB3aGl0ZTtcbiAgICAgICAgZm9udC1zaXplOiAxNHB4O1xuICAgICAgICBib3JkZXItcmFkaXVzOiA4MDBweDtcbiAgICAgICAgcGFkZGluZy1sZWZ0OiAzOHB4O1xuICAgICAgICB3aWR0aDogMTUwcHg7XG4gICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjNzIGN1YmljLWJlemllcigwLjIsIDAuODUsIDAuMiwgMS4xKTtcblxuICAgICAgICAmOmZvY3VzIHtcbiAgICAgICAgICB3aWR0aDogMjcwcHg7XG4gICAgICAgICAgY29sb3I6IHdoaXRlO1xuICAgICAgICAgIGJhY2tncm91bmQ6IHJnYmEoMjU1LCAyNTUsIDI1NSwgLjE1KTtcbiAgICAgICAgfVxuXG4gICAgICAgICY6OnBsYWNlaG9sZGVyIHtcbiAgICAgICAgICBjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAuNCk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgJjo6YmVmb3JlIHtcbiAgICAgICAgZm9udC1mYW1pbHk6ICdJb25pY29ucyc7XG4gICAgICAgIC13ZWJraXQtZm9udC1zbW9vdGhpbmc6IGFudGlhbGlhc2VkO1xuICAgICAgICBjb250ZW50OiAnXFxmNGE1JztcbiAgICAgICAgZm9udC1zaXplOiAxOHB4O1xuICAgICAgICBmb250LXdlaWdodDogODAwO1xuICAgICAgICBjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAuNCk7XG4gICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgdG9wOiA0cHg7XG4gICAgICAgIGxlZnQ6IDE0cHg7XG4gICAgICAgIGN1cnNvcjogcG9pbnRlcjtcblxuICAgICAgICBAbWVkaWEgKG1heC13aWR0aDogJHNjcmVlbi14cy1tYXgpIHtcbiAgICAgICAgICBjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAxKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBAbWVkaWEgKG1heC13aWR0aDogJHNjcmVlbi1tZC1tYXgpIHtcbiAgICAgIG1hcmdpbi1sZWZ0OiA0MHB4O1xuXG4gICAgICAuZm9ybS1ncm91cCBpbnB1dDpmb2N1cyB7XG4gICAgICAgIHdpZHRoOiAxOTJweDtcbiAgICAgIH1cbiAgICB9XG4gICAgQG1lZGlhIChtYXgtd2lkdGg6ICRzY3JlZW4teHMtbWF4KSB7XG4gICAgICBmbG9hdDogcmlnaHQ7XG4gICAgICBtYXJnaW4tbGVmdDogMTBweDtcblxuICAgICAgLmZvcm0tZ3JvdXAgaW5wdXQge1xuICAgICAgICB3aWR0aDogNDBweDtcbiAgICAgICAgcGFkZGluZzogMHB4O1xuICAgICAgICBvcGFjaXR5OiAwO1xuICAgICAgfVxuXG4gICAgICAuZm9ybS1ncm91cCBpbnB1dDpmb2N1cyB7XG4gICAgICAgIHdpZHRoOiBjYWxjKDEwMHZ3IC0gMjBweCk7XG4gICAgICAgIHBhZGRpbmc6IDZweCAxMnB4O1xuICAgICAgICBwYWRkaW5nLWxlZnQ6IDM4cHg7XG4gICAgICAgIG9wYWNpdHk6IDE7XG4gICAgICAgIG1hcmdpbi1ib3R0b206IDEwcHg7XG4gICAgICAgIG1hcmdpbi1yaWdodDogMTBweDtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAubmF2YmFyLXRvZ2dsZSxcbiAgLnNpZGViYXItdG9nZ2xlIHtcbiAgICBib3JkZXI6IDA7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xuXG4gICAgaSB7XG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICBmb250LXNpemU6IDI3cHg7XG4gICAgICB0b3A6IC0zcHg7XG4gICAgICBjb2xvcjogI2ZmZjtcbiAgICAgIHRyYW5zaXRpb246IGNvbG9yIDAuM3MsIHRyYW5zZm9ybSAwLjNzLCBvcGFjaXR5IDAuM3M7XG4gICAgfVxuXG4gICAgJjphY3RpdmUsXG4gICAgJjpmb2N1cyxcbiAgICAmOmhvdmVyIHtcbiAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xuICAgICAgb3V0bGluZTogbm9uZTtcblxuICAgICAgaSB7XG4gICAgICAgIGNvbG9yOiAjZmZmO1xuICAgICAgfVxuICAgIH1cblxuICAgIC5pb24tbWQtY2xvc2Uge1xuICAgICAgb3BhY2l0eTogMDtcbiAgICB9XG5cbiAgICAmLmFjdGl2ZSB7XG4gICAgICBpIHtcbiAgICAgICAgdHJhbnNmb3JtOiByb3RhdGUoOTBkZWcpO1xuICAgICAgfVxuXG4gICAgICBpOm5vdCguaW9uLW1kLWNsb3NlKSB7XG4gICAgICAgIG9wYWNpdHk6IDA7XG4gICAgICB9XG5cbiAgICAgIC5pb24tbWQtY2xvc2Uge1xuICAgICAgICB0cmFuc2Zvcm06IHJvdGF0ZSg5MGRlZyk7XG4gICAgICAgIG9wYWNpdHk6IDE7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgJi50cmFuc3BhcmVudCAubmF2YmFyLXRvZ2dsZSxcbiAgJi50cmFuc3BhcmVudCAuc2lkZWJhci10b2dnbGUge1xuICAgIGkge1xuICAgICAgY29sb3I6ICRibHVlO1xuICAgIH1cblxuICAgICY6YWN0aXZlLFxuICAgICY6Zm9jdXMsXG4gICAgJjpob3ZlciB7XG4gICAgICBpIHtcbiAgICAgICAgY29sb3I6ICRibHVlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG5cbiAgLnNpZGViYXItdG9nZ2xlIHtcbiAgICBmbG9hdDogbGVmdDtcbiAgICBtYXJnaW46IDhweCAxMHB4IDA7XG4gICAgZGlzcGxheTogbm9uZTtcbiAgICBAbWVkaWEgKG1heC13aWR0aDogJHNjcmVlbi14cy1tYXgpIHtcbiAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIH1cbiAgfVxuXG4gIC5jb250YWluZXItZmx1aWQge1xuICAgIG1pbi1oZWlnaHQ6IDYycHg7XG4gICAgcGFkZGluZy10b3A6IDEzcHg7XG4gICAgbWFyZ2luLXRvcDogLTI3cHg7XG5cbiAgICAubmF2YmFyLW5hdiB7XG4gICAgICBwYWRkaW5nLXRvcDogNXB4O1xuICAgICAgQG1lZGlhIChtYXgtd2lkdGg6ICRzY3JlZW4tbWQtbWF4KSB7XG4gICAgICAgIHBhZGRpbmctbGVmdDogNXB4O1xuICAgICAgfVxuXG4gICAgICA+IGxpID4gYSB7XG4gICAgICAgIHBhZGRpbmctbGVmdDogMjNweDtcbiAgICAgICAgcGFkZGluZy1yaWdodDogMjNweDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAuaGVhZGVyLWJ0bi13aGl0ZSB7XG4gICAgICBtYXJnaW4tdG9wOiAwO1xuICAgIH1cbiAgICBAbWVkaWEgKG1heC13aWR0aDogJHNjcmVlbi14cy1tYXgpIHtcbiAgICAgIHBhZGRpbmctdG9wOiAyOHB4O1xuICAgIH1cbiAgICBAbWVkaWEgKG1heC13aWR0aDogMTUxNHB4KSB7XG4gICAgICAubmF2YmFyLW5hdiA+IGxpID4gYSB7XG4gICAgICAgIHBhZGRpbmctbGVmdDogMTRweDtcbiAgICAgICAgcGFkZGluZy1yaWdodDogMTRweDtcbiAgICAgIH1cbiAgICB9XG4gICAgLy8gQG1lZGlhIChtYXgtd2lkdGg6IDEyMjZweCkge1xuICAgIC8vICAgLm5hdmJhci1uYXYgPiBsaSA+IGEge1xuICAgIC8vICAgICBwYWRkaW5nLWxlZnQ6IDVweDtcbiAgICAvLyAgICAgcGFkZGluZy1yaWdodDogNHB4O1xuICAgIC8vICAgfVxuICAgIC8vIH1cbiAgICBAbWVkaWEgKG1heC13aWR0aDogMTEwNnB4KSBhbmQgKG1pbi13aWR0aDogJHNjcmVlbi1zbS1taW4pIHtcbiAgICAgICNoZWFkZXItc2VhcmNoIHtcbiAgICAgICAgLy8gZGlzcGxheTogbm9uZTtcbiAgICAgIH1cbiAgICB9XG4gICAgQG1lZGlhIChtYXgtd2lkdGg6IDExMDZweCkgYW5kIChtaW4td2lkdGg6ICRzY3JlZW4tc20tbWluKSB7XG4gICAgICAuaGlkZS1zbSxcbiAgICAgIC5zbS1oaWRlIHtcbiAgICAgICAgZGlzcGxheTogbm9uZTtcbiAgICAgIH1cbiAgICB9XG4gICAgQG1lZGlhIChtYXgtd2lkdGg6ICRzY3JlZW4tbWQtbWF4KSB7XG4gICAgICAuaGlkZS1sdC1sZyB7XG4gICAgICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgICB9XG4gICAgfVxuICAgIEBtZWRpYSAobWluLXdpZHRoOiAkc2NyZWVuLWxnLW1pbikge1xuICAgICAgLmhpZGUtZ3QtbWQge1xuICAgICAgICBkaXNwbGF5OiBub25lO1xuICAgICAgfVxuICAgIH1cbiAgICBAbWVkaWEgKG1heC13aWR0aDogODkycHgpIGFuZCAobWluLXdpZHRoOiAkc2NyZWVuLXNtLW1pbikge1xuICAgICAgLmhlYWRlci1idG4sXG4gICAgICAuaGVhZGVyLWJ0bi13aGl0ZSB7XG4gICAgICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgI2lvbmljLWRvY3MtYmFjayxcbiAgICAjaW9uaWMtZG9jcy1sb2dvIHtcbiAgICAgIHdpZHRoOiAzMnB4O1xuICAgICAgdHJhbnNpdGlvbjogMC4zcyB0cmFuc2Zvcm0sIDAuM3Mgb3BhY2l0eTtcbiAgICAgIEBtZWRpYSAobWF4LXdpZHRoOiAkc2NyZWVuLXhzLW1heCkge1xuICAgICAgICBtYXJnaW4tbGVmdDogMTJweDtcbiAgICAgICAgbWFyZ2luLXJpZ2h0OiAtMTNweDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAjaW9uaWMtZG9jcy1iYWNrIHtcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgIHRvcDogNnB4O1xuICAgICAgbGVmdDogMTNweDtcbiAgICAgIG9wYWNpdHk6IDA7XG4gICAgICB0cmFuc2Zvcm06IHNjYWxlM2QoMS4xLCAxLjEsIDEpO1xuICAgIH1cblxuICAgICNpb25pYy1kb2NzLXRleHQge1xuICAgICAgd2lkdGg6IDU2cHg7XG4gICAgICBtYXJnaW4tbGVmdDogNXB4O1xuICAgIH1cblxuICAgICNpb25pYy1wcm8tZG9jcy10ZXh0IHtcbiAgICAgIHdpZHRoOiAzNnB4O1xuICAgICAgbWFyZ2luLWxlZnQ6IDhweDtcbiAgICB9XG5cbiAgICAubmF2YmFyLWJyYW5kIHtcbiAgICAgIHBhZGRpbmctdG9wOiA4cHg7XG5cbiAgICAgIGltZyB7XG4gICAgICAgIHdpZHRoOiA4OHB4O1xuICAgICAgfVxuXG4gICAgICAmLmxvZ28ge1xuICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICAgIHBhZGRpbmctdG9wOiA2cHg7XG5cbiAgICAgICAgJjpob3ZlciB7XG4gICAgICAgICAgb3BhY2l0eTogMTtcblxuICAgICAgICAgICNpb25pYy1kb2NzLWxvZ28ge1xuICAgICAgICAgICAgb3BhY2l0eTogMDtcbiAgICAgICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlM2QoLTNweCwgMCwgMCkgc2NhbGUzZCgxLjEsIDEuMSwgMSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgI2lvbmljLWRvY3MtYmFjayB7XG4gICAgICAgICAgICBvcGFjaXR5OiAxO1xuICAgICAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUzZCgtM3B4LCAwLCAwKSBzY2FsZTNkKDEsIDEsIDEpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgICY6YWN0aXZlLFxuICAgICAgICAmOmZvY3VzLFxuICAgICAgICAmOmhvdmVyOmFjdGl2ZSB7XG4gICAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUzZCgtM3B4LCAwLCAwKSBzY2FsZTNkKC45LCAuOSwgMSk7XG4gICAgICAgICAgdHJhbnNmb3JtLW9yaWdpbjogMTIwJSA4MCU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICArIC5jdGEge1xuICAgIC5iYXIge1xuICAgICAgYmFja2dyb3VuZDogcmdiYShibGFjaywgLjkpO1xuICAgICAgbWluLWhlaWdodDogNjRweDtcblxuICAgICAgLmNvbnRhaW5lciA+IGRpdixcbiAgICAgIHAge1xuICAgICAgICBjb2xvcjogcmdiYSh3aGl0ZSwuNyk7XG4gICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICAgICAgbWFyZ2luLXRvcDogMTVweDtcbiAgICAgICAgbWFyZ2luLWJvdHRvbTogMTVweDtcbiAgICAgICAgZm9udC13ZWlnaHQ6IDQwMDtcbiAgICAgICAgZm9udC1zaXplOiAxNnB4O1xuICAgICAgfVxuXG4gICAgICAmLmFmZml4LXRvcCB7XG4gICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgei1pbmRleDogMTtcbiAgICAgIH1cblxuICAgICAgJi5hZmZpeCB7XG4gICAgICAgIHRvcDogMDtcbiAgICAgICAgcG9zaXRpb246IGZpeGVkO1xuICAgICAgICB6LWluZGV4OiAxMDA7XG4gICAgICB9XG5cbiAgICAgICYudGFiYmVkIHtcbiAgICAgICAgYmFja2dyb3VuZDogI2ZiZmNmZDtcbiAgICAgICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICR3aGl0ZWlzaDtcbiAgICAgICAgd2lkdGg6IDEwMCU7XG5cbiAgICAgICAgJi5hZmZpeCB7XG4gICAgICAgICAgYm9yZGVyLWJvdHRvbS1jb2xvcjogdHJhbnNwYXJlbnQ7XG4gICAgICAgICAgYm94LXNoYWRvdzogMCAxcHggNHB4IHJnYmEoMCwgMCwgMCwgMC4wNSksIDAgMXB4IDAgcmdiYSgwLCAwLCAwLCAwLjA1KTtcblxuICAgICAgICAgIHVsIGxpIGEge1xuICAgICAgICAgICAgbWFyZ2luLWJvdHRvbTogLTJweDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB1bCB7XG4gICAgICAgICAgcGFkZGluZzogbm9uZTtcbiAgICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG5cbiAgICAgICAgICBsaSB7XG4gICAgICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG5cbiAgICAgICAgICAgIGEge1xuICAgICAgICAgICAgICBwYWRkaW5nOiAyNXB4IDE4cHg7XG4gICAgICAgICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICAgICAgICAgICAgbGluZS1oZWlnaHQ6IDFlbTtcbiAgICAgICAgICAgICAgZm9udC1zaXplOiAxM3B4O1xuICAgICAgICAgICAgICBmb250LXdlaWdodDogNTAwO1xuICAgICAgICAgICAgICBtYXJnaW46IDAgMTVweCAtMXB4O1xuICAgICAgICAgICAgICBjb2xvcjogJGRhcmstZ3JleTtcbiAgICAgICAgICAgICAgYm9yZGVyLWJvdHRvbTogMnB4IHNvbGlkIHRyYW5zcGFyZW50O1xuICAgICAgICAgICAgICB0cmFuc2l0aW9uOiBjb2xvciAwLjJzLCBib3JkZXItY29sb3IgMC4ycztcbiAgICAgICAgICAgICAgZm9udC1mYW1pbHk6ICRmb250LWZhbWlseS1laW5hO1xuICAgICAgICAgICAgICBmb250LXdlaWdodDogNjAwO1xuXG4gICAgICAgICAgICAgICY6Zm9jdXMge1xuICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICYuYWN0aXZlIGEge1xuICAgICAgICAgICAgICBib3JkZXItY29sb3I6ICRibHVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAmLmFjdGl2ZSBhLFxuICAgICAgICAgICAgYTphY3RpdmUsXG4gICAgICAgICAgICBhOmhvdmVyIHtcbiAgICAgICAgICAgICAgY29sb3I6ICRibHVlO1xuICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgQG1lZGlhIChtYXgtd2lkdGg6ICRzY3JlZW4teHMtbWF4KSB7XG4gICAgICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xuXG4gICAgICAgICAgICBsaSBhIHtcbiAgICAgICAgICAgICAgbWFyZ2luLXJpZ2h0OiAwO1xuICAgICAgICAgICAgICBtYXJnaW4tbGVmdDogMDtcbiAgICAgICAgICAgICAgcGFkZGluZy1sZWZ0OiA0cHg7XG4gICAgICAgICAgICAgIHBhZGRpbmctcmlnaHQ6IDRweDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgQG1lZGlhIChtaW4td2lkdGg6ICRzY3JlZW4tc20tbWluKSB7XG4gICAgJi5saWdodCB7XG4gICAgICAjaW9uaWMtaW8tbG9nbyB7XG4gICAgICAgIGZpbGw6ICM0ZjYzODQ7XG4gICAgICB9XG5cbiAgICAgIC5uYXZiYXItbmF2ID4gbGk6bm90KC5oZWFkZXItYnRuLXdoaXRlKSA+IGEsXG4gICAgICAubmF2YmFyLW5hdiBpb25pYy1zZWFyY2ggaW9uLWljb24ge1xuICAgICAgICBjb2xvcjogIzc4ODI5NDtcblxuICAgICAgICAmOmhvdmVyIHtcbiAgICAgICAgICBjb2xvcjogJGJsdWU7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLm5hdmJhci1uYXYgPiBsaS5hY3RpdmUgPiBhIHtcbiAgICAgICAgY29sb3I6ICNjN2QwZTA7XG4gICAgICB9XG4gICAgfVxuXG4gICAgJi5lbnRlcnByaXNlIHtcbiAgICAgIGJhY2tncm91bmQ6IG5vbmU7XG4gICAgICBwYWRkaW5nLXRvcDogIDM2cHg7XG5cbiAgICAgIC5uYXZiYXItbmF2ID4gbGk6bm90KC5oZWFkZXItYnRuLXdoaXRlKSA+IGEsXG4gICAgICAubmF2YmFyLW5hdiBpb25pYy1zZWFyY2ggaW9uLWljb24ge1xuICAgICAgICBjb2xvcjogIzRFNUI2QTtcblxuICAgICAgICAmOmhvdmVyIHtcbiAgICAgICAgICBjb2xvcjogIzkyQTFCMztcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAubmF2YmFyLW5hdiA+IGxpLmFjdGl2ZSA+IGEsXG4gICAgICAubmF2YmFyLW5hdiA+IGxpLm9wZW4gPiBhIHtcbiAgICAgICAgY29sb3I6ICM5MkExQjMgIWltcG9ydGFudDtcbiAgICAgIH1cblxuICAgICAgLm5hdmJhci1uYXYgPiBsaTpub3QoLmhlYWRlci1idG4td2hpdGUpID4gYSB7XG4gICAgICAgIG1hcmdpbi1sZWZ0OiAwO1xuICAgICAgICBtYXJnaW4tcmlnaHQ6IDA7XG4gICAgICAgIHBhZGRpbmc6IDAgMTRweCAxMHB4O1xuICAgICAgICBmb250LWZhbWlseTogJGZvbnQtZmFtaWx5LWludGVyO1xuICAgICAgICBmb250LXdlaWdodDogNDAwO1xuICAgICAgICBmb250LXNpemU6IDE0cHg7XG4gICAgICB9XG5cbiAgICAgIC5uYXZiYXItbmF2ID4gbGkuYWN0aXZlID4gYSB7XG4gICAgICAgIGNvbG9yOiAjNEU1QjZBO1xuICAgICAgfVxuXG4gICAgICAubmF2YmFyLXJpZ2h0IHtcbiAgICAgICAgbWFyZ2luLXRvcDogM3B4O1xuICAgICAgfVxuXG4gICAgICAubmF2YmFyLWNlbnRlciB7XG4gICAgICAgIG1hcmdpbi10b3A6IDZweDtcbiAgICAgICAgZmxvYXQ6IHJpZ2h0O1xuICAgICAgfVxuXG4gICAgICAmLm5hdmJhci1zdGlja3kge1xuICAgICAgICBiYWNrZ3JvdW5kOiB3aGl0ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAjaGVhZGVyLWJ0bi1vdXRsaW5lIHtcbiAgICAgIHRyYW5zaXRpb246IDAuMnMgYm9yZGVyO1xuICAgICAgcGFkZGluZzogMnB4IDEwcHggNHB4O1xuICAgICAgbWFyZ2luLWxlZnQ6IDE0cHg7XG4gICAgICBjb2xvcjogIzM4ODBGRjtcbiAgICAgIGJvcmRlci1yYWRpdXM6IDE2cHg7XG4gICAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKCMzODgwRkYsIDAuNCk7XG4gICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAgICAgYm94LXNoYWRvdzogbm9uZTtcbiAgICAgIGZvbnQtc2l6ZTogMTNweDtcbiAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7XG5cbiAgICAgICY6aG92ZXIge1xuICAgICAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKCMzODgwRkYsIDAuOCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLm5hdmJhci1yaWdodCA+IGxpID4gYSB7XG4gICAgZm9udC13ZWlnaHQ6IDcwMDtcbiAgICBtYXJnaW4tcmlnaHQ6IDBweDtcbiAgICBtYXJnaW4tbGVmdDogOHB4O1xuICB9XG5cbiAgJi5uYXZiYXItc3RpY2t5IHtcbiAgICB6LWluZGV4OiA5OTk7XG4gICAgcGFkZGluZzogMjBweCAwcHg7XG4gICAgYm94LXNoYWRvdzpcbiAgICAgIDBweCAycHggNnB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMDQpLFxuICAgICAgMHB4IDZweCAxMnB4IHJnYmEoMCwgMCwgMCwgMC4wMik7XG4gIH1cblxuICBpb25pYy1zZWFyY2g6bm90KC5oeWRyYXRlZCkge1xuICAgIHZpc2liaWxpdHk6IGhpZGRlbjtcbiAgICB3aWR0aDogMThweDtcbiAgICBoZWlnaHQ6IDMxcHg7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gIH1cblxuXG59XG5cbi5kb2NzIC5uYXZiYXItZGVmYXVsdCAubmF2YmFyLW5hdiB7XG4gIEBtZWRpYSAobWluLXdpZHRoOiAkc2NyZWVuLW1kLW1pbikge1xuICAgICYubmF2YmFyLWNlbnRlciB7XG4gICAgICBtYXJnaW4tbGVmdDogMDtcbiAgICB9XG4gIH1cbn1cblxuLy8gZml4IGZvciB0aGUgaGVhZGVyIGNvbXBvbmVudCBBUEkgZG9jcyBwYWdlLiBpdCBjb25mbGljdHMgdy8gYSBib290c3RyYXBcbi8vIGNvbXBvbmVudFxuXG5ib2R5LnBhZ2UtaGVhZGVyIHtcbiAgcGFkZGluZy1ib3R0b206IDA7XG4gIG1hcmdpbjogMDtcbiAgYm9yZGVyLWJvdHRvbTogMDtcbn1cblxuLm5hdmJhci1kYXJrIHtcbiAgYmFja2dyb3VuZDogIzExMTkyYTtcbn1cblxuLmV4dGVybmFsLWljb24ge1xuICAuZXh0ZXJuYWwtaWNvbl9fYmFja2dyb3VuZCB7XG4gICAgZmlsbDogIzk3QkRGRjtcbiAgfVxuICAuZXh0ZXJuYWwtaWNvbl9fZm9yZWdyb3VuZCB7XG4gICAgZmlsbDogI2ZmZjtcbiAgfVxufVxuXG4ubGlnaHQgLmV4dGVybmFsLWljb24sXG4uZXh0ZXJuYWwtaWNvbi0tbGlnaHQge1xuICAuZXh0ZXJuYWwtaWNvbl9fYmFja2dyb3VuZCB7XG4gICAgZmlsbDogI2U1ZTdlYTtcbiAgfVxuICAuZXh0ZXJuYWwtaWNvbl9fZm9yZWdyb3VuZCB7XG4gICAgZmlsbDogIzdhODQ5NjtcbiAgfVxufVxuIiwiLmhic3B0LWZvcm0ge1xuICBtYXgtd2lkdGg6IDQyMHB4O1xuICBtYXJnaW46IDAgYXV0bztcbiAgZm9udC13ZWlnaHQ6IDQwMDtcblxuICAuaHMtZm9ybS1yZXF1aXJlZCB7XG4gICAgZGlzcGxheTogbm9uZTtcbiAgfVxuXG4gIGZvcm0ge1xuICAgIGZpZWxkc2V0LmZvcm0tY29sdW1ucy0yIC5pbnB1dCB7XG4gICAgICBtYXJnaW4tcmlnaHQ6IDEycHg7XG4gICAgfVxuXG4gICAgJi5zdGFja2VkIC5maWVsZCB7XG4gICAgICBtYXJnaW4tYm90dG9tOiA0cHg7XG4gICAgfVxuICB9XG5cbiAgLmhzLWlucHV0LFxuICBpbnB1dC5ocy1pbnB1dCxcbiAgc2VsZWN0LmhzLWlucHV0IHtcbiAgICBib3JkZXI6IDFweCBzb2xpZCAjZTFlNWVkO1xuICAgIC8vIHBhZGRpbmc6IDE1cHggNXB4IDE1cHggMThweDtcbiAgICBmb250LXdlaWdodDogNTAwO1xuICAgIGJvcmRlci1yYWRpdXM6IDRweDtcbiAgICB0cmFuc2l0aW9uOiBib3JkZXItY29sb3IgLjJzO1xuICAgIGJveC1zaGFkb3c6IG5vbmU7XG4gICAgb3V0bGluZTogbm9uZTtcbiAgICBoZWlnaHQ6IDMwcHg7XG4gICAgcGFkZGluZzogNnB4IDEycHg7XG4gICAgZm9udC1zaXplOiAxNHB4O1xuICAgIGxpbmUtaGVpZ2h0OiAxLjQyODU3MTQyOTtcblxuICAgICY6cGxhY2Vob2xkZXIge1xuICAgICAgY29sb3I6ICRsaWdodGlzaC1ncmV5O1xuICAgIH1cblxuICAgICY6dmFsaWQge1xuICAgICAgLy8gYm9yZGVyLWNvbG9yOiAjQjRCQkM1O1xuICAgIH1cblxuICAgICY6aG92ZXIsXG4gICAgJjpmb2N1cyxcbiAgICAmOmFjdGl2ZSwge1xuICAgICAgb3V0bGluZTogbm9uZTtcbiAgICAgIGJvcmRlci1jb2xvcjogJGJsdWU7XG4gICAgICBib3gtc2hhZG93OiBub25lO1xuICAgIH1cblxuICAgICYuaHMtaW5wdXQuZXJyb3Ige1xuICAgICAgYm9yZGVyLWNvbG9yOiAkcmVkO1xuICAgIH1cbiAgfVxuXG4gIHNlbGVjdC5ocy1pbnB1dCB7XG4gICAgaGVpZ2h0OiA0NHB4O1xuICAgIHdpZHRoOiBjYWxjKDEwMCUgKyA2cHgpICFpbXBvcnRhbnQ7XG4gIH1cblxuICB0ZXh0YXJlYS5ocy1pbnB1dCB7XG4gICAgcGFkZGluZzogMTJweDtcbiAgICB3aWR0aDogY2FsYygxMDAlICsgM3B4KSAhaW1wb3J0YW50O1xuICAgIG1pbi1oZWlnaHQ6IDE5MnB4O1xuICB9XG5cbiAgLmhzX3N1Ym1pdCBpbnB1dC5ocy1idXR0b24ge1xuICAgIGZvbnQtc2l6ZTogMTNweDtcbiAgICBwYWRkaW5nOiAxMHB4IDE4cHggMTBweDtcbiAgICBtYXJnaW4tcmlnaHQ6IC0xNHB4O1xuICAgIG1hcmdpbi10b3A6IC0zNnB4O1xuICAgIGxpbmUtaGVpZ2h0OiAyM3B4O1xuICAgIGZsb2F0OiByaWdodDtcbiAgICBmb250LXdlaWdodDogNjAwO1xuICAgIGxldHRlci1zcGFjaW5nOiAwO1xuICAgIHRleHQtdHJhbnNmb3JtOiBub25lO1xuICAgIHRleHQtc2hhZG93OiBub25lO1xuICAgIGJhY2tncm91bmQ6ICRibHVlO1xuICAgIGJvcmRlcjogMDtcbiAgICBvdXRsaW5lOiAwO1xuICAgIHRyYW5zaXRpb246IGFsbCAuMnMgbGluZWFyO1xuICAgIGJveC1zaGFkb3c6IDAgMXB4IDNweCByZ2JhKDAsMCwwLC4xMik7XG5cbiAgICAmOmhvdmVyIHtcbiAgICAgIGJvcmRlcjogMDtcbiAgICAgIGJveC1zaGFkb3c6IDAgNHB4IDhweCByZ2JhKDAsMCwwLC4xMik7XG4gICAgICBiYWNrZ3JvdW5kOiAjNTk5NWZjO1xuICAgICAgY29sb3I6ICNmZmY7XG4gICAgICBvdXRsaW5lOiAwO1xuICAgIH1cblxuICAgICY6YWN0aXZlLFxuICAgICY6YWN0aXZlOm5vdCguaW5hY3RpdmUpOm5vdCgubGluayksXG4gICAgJjpmb2N1czpub3QoLmluYWN0aXZlKSB7XG4gICAgICBib3JkZXI6IDA7XG4gICAgICBjb2xvcjogI2ZmZjtcbiAgICAgIGJveC1zaGFkb3c6IGluc2V0IDAgMXB4IDRweCByZ2JhKDAsMCwwLC4yKTtcbiAgICAgIGJhY2tncm91bmQ6ICM1OTk1ZmM7XG4gICAgICBvdXRsaW5lOiAwO1xuICAgIH1cbiAgfVxuXG4gIC5zdWJtaXR0ZWQtbWVzc2FnZSB7XG4gICAgJjpiZWZvcmUge1xuICAgICAgY29udGVudDogJyc7XG4gICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgIGJhY2tncm91bmQtaW1hZ2U6IHVybCgnL2ltZy9jaGVja21hcmstbGlnaHQtZ3JlZW4uc3ZnJyk7XG4gICAgICBiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0O1xuICAgICAgYmFja2dyb3VuZC1zaXplOiAxMDAlO1xuICAgICAgd2lkdGg6IDQycHg7XG4gICAgICBoZWlnaHQ6IDQycHg7XG4gICAgICBtYXJnaW4tYm90dG9tOiAxMnB4O1xuICAgIH1cblxuICAgIGZvbnQtc2l6ZTogMThweDtcbiAgICBwYWRkaW5nOiAzNHB4IDAgNzhweDtcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgZm9udC13ZWlnaHQ6IDQwMDtcbiAgICBjb2xvcjogIzM1YWY1NTtcbiAgICBtYXgtd2lkdGg6IDQxMHB4O1xuICAgIGJhY2tncm91bmQtY29sb3I6IHdoaXRlO1xuICAgIG1hcmdpbjogMCBhdXRvO1xuICB9XG59XG5cbi5tb2RhbCAuaGJzcHQtZm9ybSAuaHNfc3VibWl0IGlucHV0LmhzLWJ1dHRvbiB7XG4gIHBhZGRpbmc6IDA7XG59XG5cbi5odWJzcG90LW92ZXJyaWRlIC5oYnNwdC1mb3JtIHtcbiAgZm9udC1mYW1pbHk6ICRmb250LWZhbWlseS1zeXN0ZW07XG4gIC8vIFRPRE8gdGhlc2Ugc3R5bGVzIGFyZSBvbmx5IHVzZWQgb24gY29udHJpYnV0b3JzIGxhbmRpbmcsXG4gIC8vIG5lZWQgdG8gYmUgYXBwbGllZCB0byBhbGwgaHVic3BvdCBmb3Jtc1xuXG4gICYsXG4gICYgZmllbGRzZXQge1xuICAgIG1heC13aWR0aDogMTAwJTtcbiAgfVxuXG4gIC8vIGZpZWxkc2V0ICsgZmllbGRzZXQsXG4gIC8vIGZvcm0uc3RhY2tlZCAuaHMtZm9ybS1maWVsZCArIC5ocy1mb3JtLWZpZWxkLFxuICAvLyBmaWVsZHNldCAuaHMtZm9ybS1maWVsZCArIC5ocy1mb3JtLWZpZWxkLFxuICAvLyBmb3JtLnN0YWNrZWQgLmhzLWZvcm0tZmllbGQgKyAuaHMtZGVwZW5kZW50LWZpZWxkIHtcbiAgLy8gICBtYXJnaW4tdG9wOiAyNnB4O1xuICAvLyB9XG4gICAuaHMtZm9ybS1maWVsZCB7XG4gICAgIG1hcmdpbi10b3A6IDE2cHg7XG4gICB9XG5cbiAgbGFiZWwge1xuICAgIG1hcmdpbi1ib3R0b206IDNweDtcbiAgfVxuXG4gIC5ocy1mb3JtLXJlcXVpcmVkIHtcbiAgICBkaXNwbGF5OiBpbmxpbmU7XG4gICAgY29sb3I6ICNGNDU0NTQ7XG4gICAgbWFyZ2luLWxlZnQ6IDRweFxuICB9XG5cbiAgLmhzLXJpY2h0ZXh0IHtcbiAgICBtYXJnaW4tdG9wOiA4cHg7XG4gIH1cblxuICAuaHMtaW5wdXQsXG4gIGlucHV0LmhzLWlucHV0IHtcbiAgICB0cmFuc2l0aW9uOiBib3JkZXIgMC4zcztcbiAgICBmb250LXdlaWdodDogNTAwO1xuICAgIGJhY2tncm91bmQtY29sb3I6ICNmZmY7XG4gICAgYmFja2dyb3VuZC1pbWFnZTogbm9uZTtcbiAgICBib3JkZXI6IDFweCBzb2xpZCAjY2VkNmUzO1xuICAgIGxpbmUtaGVpZ2h0OiAxLjM5Mjg2O1xuICAgIGJvcmRlci1yYWRpdXM6IDRweDtcbiAgICBwYWRkaW5nOiAxMXB4IDE1cHg7XG4gICAgZm9udC1zaXplOiAxNXB4O1xuICAgIG1hcmdpbi1ib3R0b206IDA7XG4gICAgY29sb3I6ICM1MDU4NjM7XG4gIH1cblxuICBpbnB1dC5ocy1pbnB1dFt0eXBlPVwibnVtYmVyXCJdIHtcbiAgICBmbG9hdDogbm9uZTtcbiAgfVxuXG4gIGlucHV0LmhzLWlucHV0W3R5cGU9XCJ0ZXh0XCJdLFxuICBpbnB1dC5ocy1pbnB1dFt0eXBlPVwiZW1haWxcIl0sXG4gIGlucHV0LmhzLWlucHV0W3R5cGU9XCJ0ZWxcIl0gIHtcbiAgICBoZWlnaHQ6IGF1dG87XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgZmxvYXQ6IG5vbmU7XG5cbiAgICAmOmZvY3VzIHtcbiAgICAgIGJvcmRlci1jb2xvcjogIzYyOWVmZjtcbiAgICB9XG4gIH1cblxuICBpbnB1dC5ocy1pbnB1dFt0eXBlPVwicmFkaW9cIl0sXG4gIGlucHV0LmhzLWlucHV0W3R5cGU9XCJjaGVja2JveFwiXSB7XG4gICAgaGVpZ2h0OiBhdXRvO1xuICAgIG1hcmdpbi1yaWdodDogOHB4O1xuICB9XG5cbiAgLmhzLWZvcm0tYm9vbGVhbmNoZWNrYm94LWRpc3BsYXkge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gIH1cblxuICBzZWxlY3QuaHMtaW5wdXQge1xuICAgIGhlaWdodDogNDRweDtcblxuXG4gICAgYXBwZWFyYW5jZTogbm9uZTtcbiAgICBiYWNrZ3JvdW5kLWltYWdlOlxuICAgICAgbGluZWFyLWdyYWRpZW50KDQ1ZGVnLCB0cmFuc3BhcmVudCA1MCUsIGdyYXkgNTAlKSxcbiAgICAgIGxpbmVhci1ncmFkaWVudCgxMzVkZWcsIGdyYXkgNTAlLCB0cmFuc3BhcmVudCA1MCUpO1xuICAgIGJhY2tncm91bmQtcG9zaXRpb246XG4gICAgICBjYWxjKDEwMCUgLSAyMHB4KSA1MCUsXG4gICAgICBjYWxjKDEwMCUgLSAxNXB4KSA1MCU7XG4gICAgYmFja2dyb3VuZC1zaXplOlxuICAgICAgNXB4IDVweCxcbiAgICAgIDVweCA1cHgsXG4gICAgICAxcHggMS41ZW07XG4gICAgYmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdDtcbiAgfVxuXG4gIGZvcm0gZmllbGRzZXQuZm9ybS1jb2x1bW5zLTIgLmlucHV0IHtcbiAgICBtYXJnaW46IDA7XG4gIH1cblxuICBmaWVsZHNldC5mb3JtLWNvbHVtbnMtMiAuaHMtZm9ybS1maWVsZCB7XG4gICAgcGFkZGluZzogMCAxMHB4O1xuXG4gICAgJjpmaXJzdC1jaGlsZCB7XG4gICAgICBwYWRkaW5nLWxlZnQ6IDA7XG4gICAgfVxuICAgICY6bGFzdC1jaGlsZCB7XG4gICAgICBwYWRkaW5nLXJpZ2h0OiAwO1xuICAgIH1cbiAgfVxuXG4gIC5pbnB1dHMtbGlzdCxcbiAgLmhzLWVycm9yLW1zZ3Mge1xuICAgIG1hcmdpbjogMDtcbiAgICBwYWRkaW5nOiAwO1xuICAgIGxpc3Qtc3R5bGUtdHlwZTogbm9uZTtcbiAgfVxuXG4gIC5pbnB1dHMtbGlzdC5tdWx0aS1jb250YWluZXIge1xuICAgIG92ZXJmbG93OiBoaWRkZW47XG5cbiAgICBsaTpudGgtbGFzdC1jaGlsZChuKzYpOmZpcnN0LWNoaWxkLFxuICAgIGxpOm50aC1sYXN0LWNoaWxkKG4rNik6Zmlyc3QtY2hpbGQgfiBsaSB7XG4gICAgICB3aWR0aDogNTAlO1xuICAgICAgZmxvYXQ6IGxlZnQ7XG4gICAgICBwYWRkaW5nLXJpZ2h0OiAxMXB4O1xuICAgIH1cbiAgICBsaTpudGgtbGFzdC1jaGlsZChuKzYpOmZpcnN0LWNoaWxkIH4gbGk6bnRoLWNoaWxkKGV2ZW4pIHtcbiAgICAgIHBhZGRpbmctcmlnaHQ6IDA7XG4gICAgICBwYWRkaW5nLWxlZnQ6IDExcHg7XG4gICAgfVxuICB9XG5cbiAgLmhzLWZvcm0tY2hlY2tib3gtZGlzcGxheSB7XG4gICAgbWFyZ2luLXRvcDogNHB4O1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gIH1cblxuICAuaHMtZm9ybS1jaGVja2JveC1kaXNwbGF5IC5ocy1pbnB1dFt0eXBlPVwiY2hlY2tib3hcIl17XG4gICAgbWFyZ2luLXJpZ2h0OiAxMHB4O1xuICB9XG5cbiAgLmhzLWZvcm0tY2hlY2tib3gtZGlzcGxheSBzcGFuIHtcbiAgICBmb250LXNpemU6IDE1cHg7XG4gICAgY29sb3I6ICM1MDU4NjM7XG4gIH1cblxuXG4gIC5ocy1lcnJvci1tc2dzIHtcbiAgICBwYWRkaW5nOiA1cHggMCAwO1xuICAgIGZvbnQtc2l6ZTogMTFweDtcbiAgICBjb2xvcjogI0Y0NTQ1NDtcbiAgfVxuXG4gIC5oc19zdWJtaXQge1xuICAgIG1hcmdpbi10b3A6IDMwcHg7XG4gIH1cblxuICAuaHNfc3VibWl0IGlucHV0LmhzLWJ1dHRvbiB7XG4gICAgdHJhbnNpdGlvbjogYWxsIC4zcyBlYXNlO1xuICAgIG1hcmdpbjogMDtcbiAgICBmbG9hdDogbm9uZTtcbiAgICBmb250LXNpemU6IDE2cHg7XG4gICAgZm9udC13ZWlnaHQ6IDcwMDtcbiAgICBwYWRkaW5nOiAxMnB4IDIwcHg7XG4gICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbiAgICBjb2xvcjogd2hpdGU7XG4gICAgYmFja2dyb3VuZDogIzM4ODBmZjtcbiAgICBib3gtc2hhZG93OiAwIDFweCAzcHggcmdiYSgwLCAwLCAwLCAwLjA4KSwgMCAycHggNHB4IHJnYmEoMCwgMCwgMCwgMC4xMik7XG4gICAgYm9yZGVyLXJhZGl1czogNHB4O1xuICAgIGxpbmUtaGVpZ2h0OiAxOHB4O1xuICAgIGxldHRlci1zcGFjaW5nOiAtMC4wMWVtO1xuXG4gICAgJjpob3ZlciB7XG4gICAgICBib3gtc2hhZG93OiAwIDdweCAxNHB4IHJnYmEoMCwgMCwgMCwgMC4xMiksIDAgM3B4IDZweCByZ2JhKDAsIDAsIDAsIDAuMDgpO1xuICAgICAgYmFja2dyb3VuZDogIzRkOGRmZDtcbiAgICAgIGNvbG9yOiAjZmZmO1xuICAgICAgb3V0bGluZTogbm9uZTtcbiAgICB9XG4gIH1cblxuICBAbWVkaWEgKG1heC13aWR0aDogJHNjcmVlbi1zbSkge1xuICAgIGZpZWxkc2V0LmZvcm0tY29sdW1ucy0yIC5ocy1mb3JtLWZpZWxkIHtcbiAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgZmxvYXQ6IG5vbmU7XG4gICAgICBwYWRkaW5nOiAwO1xuXG4gICAgICAmICsgLmhzLWZvcm0tZmllbGQge1xuICAgICAgICBtYXJnaW4tdG9wOiAyNHB4O1xuICAgICAgfVxuICAgIH1cbiAgICAuaW5wdXRzLWxpc3QubXVsdGktY29udGFpbmVyIHtcbiAgICAgIGxpOm50aC1sYXN0LWNoaWxkKG4rNik6Zmlyc3QtY2hpbGQsXG4gICAgICBsaTpudGgtbGFzdC1jaGlsZChuKzYpOmZpcnN0LWNoaWxkIH4gbGkge1xuICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgICAgZmxvYXQ6IG5vbmU7XG4gICAgICAgIHBhZGRpbmctcmlnaHQ6IDA7XG4gICAgICB9XG4gICAgICBsaTpudGgtbGFzdC1jaGlsZChuKzYpOmZpcnN0LWNoaWxkIH4gbGk6bnRoLWNoaWxkKGV2ZW4pIHtcbiAgICAgICAgcGFkZGluZy1sZWZ0OiAwO1xuICAgICAgfVxuICAgIH1cbiAgICAuaHNfc3VibWl0IGlucHV0LmhzLWJ1dHRvbiB7XG4gICAgICB3aWR0aDogMTAwJTtcbiAgICB9XG4gIH1cbn1cblxuLmh1YnNwb3Qtb3ZlcnJpZGUtLWxhcmdlIC5oYnNwdC1mb3JtIHtcbiAgbGFiZWw6bm90KC5ocy1mb3JtLWJvb2xlYW5jaGVja2JveC1kaXNwbGF5KSB7XG4gICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcbiAgICBmb250LXNpemU6IDEycHg7XG4gICAgbGV0dGVyLXNwYWNpbmc6IDAuMDVlbTtcbiAgICBtYXJnaW4tYm90dG9tOiA2cHg7XG4gIH1cblxuICAuaHMtZm9ybS1ib29sZWFuY2hlY2tib3gtZGlzcGxheSB7XG4gICAgZm9udC1zaXplOiAxNXB4O1xuICB9XG5cbiAgLmhzLXJpY2h0ZXh0IHtcbiAgICBwIHNwYW4sXG4gICAgcCBhIHtcbiAgICAgIGZvbnQtc2l6ZTogMTVweDtcbiAgICB9XG4gIH1cblxuICAuaHMtaW5wdXQsXG4gIGlucHV0LmhzLWlucHV0IHtcbiAgICBwYWRkaW5nOiAxNnB4IDIwcHggMThweDtcbiAgICBmb250LXNpemU6IDE4cHg7XG4gIH1cblxuICBzZWxlY3QuaHMtaW5wdXQge1xuICAgIHRleHQtaW5kZW50OiAxMHB4O1xuICAgIGhlaWdodDogNjBweDtcbiAgfVxuICBALW1vei1kb2N1bWVudCB1cmwtcHJlZml4KCkge1xuICAgIHNlbGVjdC5ocy1pbnB1dCB7XG4gICAgICAgdGV4dC1pbmRlbnQ6IDA7XG4gICAgfVxuICB9XG5cbiAgLmhzLWVycm9yLW1zZ3MgbGFiZWwge1xuICAgIGZvbnQtc2l6ZTogMTFweDtcbiAgICBsZXR0ZXItc3BhY2luZzogMDtcbiAgICB0ZXh0LXRyYW5zZm9ybTogbm9uZTtcbiAgfVxuXG4gIGZpZWxkc2V0LmZvcm0tY29sdW1ucy0yIC5ocy1mb3JtLWZpZWxkIHtcbiAgICBwYWRkaW5nOiAwIDIwcHg7XG4gIH1cblxuICAuaHNfc3VibWl0IHtcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgcGFkZGluZy10b3A6IDE4cHg7XG4gIH1cblxuICAuaHNfc3VibWl0IGlucHV0LmhzLWJ1dHRvbiB7XG4gICAgcGFkZGluZzogMjJweCAyN3B4IDI0cHg7XG4gICAgYm9yZGVyLXJhZGl1czogNnB4O1xuICB9XG5cbiAgQG1lZGlhIChtYXgtd2lkdGg6ICRzY3JlZW4tc20pIHtcbiAgICBmaWVsZHNldC5mb3JtLWNvbHVtbnMtMiAuaHMtZm9ybS1maWVsZCB7XG4gICAgICBwYWRkaW5nOiAwO1xuICAgIH1cbiAgfVxufVxuXG4uaHVic3BvdC1vdmVycmlkZS0tbWVhc3VyZSB7XG4gIG1heC13aWR0aDogNzQ4cHg7XG4gIG1hcmdpbi1sZWZ0OiBhdXRvO1xuICBtYXJnaW4tcmlnaHQ6IGF1dG87XG59XG4iLCIvKipcbiAqIFRoZSBTdWIgSGVhZGVyIHNpdHMgdW5kZXIgdGhlIG1haW4gbmF2aWdhdGlvbiB0byBkaXNwbGF5IGNvbnRleHQtc3BlY2lmaWNcbiAqIHBhZ2UgaW5mb3JtYXRpb24sIHdpZGdldHMsIGFuZCBsaW5rcy5cbiAqIFNlcHRlbWJlciAyMDE3XG4gKi9cbi5zdWItaGVhZGVyIHtcbiAgJiA+IC5jb250YWluZXIge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgZmxleC1kaXJlY3Rpb246IHJvdztcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICBjb2xvcjogIzY5NzM4NDtcbiAgICBmb250LXNpemU6IDEzcHg7XG4gICAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgICBmbGV4LXdyYXA6IHdyYXA7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIHotaW5kZXg6IDE7XG5cbiAgICAmOjpiZWZvcmUge1xuICAgICAgYm9yZGVyLXRvcDogMXB4IHNvbGlkIHJnYmEod2hpdGUsIC4wNik7XG4gICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgIGNvbnRlbnQ6ICcnO1xuICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgdG9wOiAwO1xuICAgICAgcmlnaHQ6IDE1cHg7XG4gICAgICBsZWZ0OiAxNXB4O1xuICAgICAgZmxleDogMCAwIDEwMCVcbiAgICB9XG4gICAgJjo6YWZ0ZXIgeyBkaXNwbGF5OiBub25lOyB9XG4gIH1cblxuICB1bCB7XG4gICAgcGFkZGluZzogMDtcbiAgICBsaXN0LXN0eWxlOiBub25lO1xuICB9XG5cbiAgbGkge1xuICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICBmb250LXdlaWdodDogNjAwO1xuICB9XG5cbiAgdWw6bm90KC5icmVhZGNydW1icykge1xuICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XG4gICAgbGV0dGVyLXNwYWNpbmc6IDAuMDhlbTtcbiAgICBmb250LXNpemU6IDExcHg7XG5cbiAgICBsaSB7XG4gICAgICBwYWRkaW5nOiAxOHB4IDE1cHg7XG4gICAgfVxuXG4gICAgbGk6bGFzdC1jaGlsZCB7XG4gICAgICBwYWRkaW5nLXJpZ2h0OiAwO1xuICAgIH1cblxuICAgIGE6bm90KC5idG4pIHtcbiAgICAgIHRyYW5zaXRpb246IGNvbG9yIDAuM3M7XG4gICAgICBjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjYpO1xuICAgICAgcGFkZGluZzogMCAwIDRweDtcbiAgICB9XG5cbiAgICBhOm5vdCguYnRuKTpub3QoLmFjdGl2ZSk6aG92ZXIge1xuICAgICAgY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMSk7XG4gICAgfVxuXG4gICAgYTpub3QoLmJ0bikuYWN0aXZlIHtcbiAgICAgIGNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDEpO1xuICAgICAgYm9yZGVyLWJvdHRvbTogMnB4IHNvbGlkIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4yKTtcbiAgICB9XG5cbiAgICBAbWVkaWEgKG1heC13aWR0aDogJHNjcmVlbi1zbS1taW4pICB7XG4gICAgICBsaSB7XG4gICAgICAgIHBhZGRpbmc6IDE4cHggOHB4O1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC5icmVhZGNydW1icyB7XG4gICAgZm9udC1mYW1pbHk6IFwiRWluYVwiLCBcIkhlbHZldGljYSBOZXVlXCIsIEhlbHZldGljYSwgc2Fucy1zZXJpZjsgLy8gdG9kbzogU2V0IEVpbmEgZ2xvYmFsbHlcbiAgICBmb250LXNpemU6IDE2cHg7XG5cbiAgICAmLnNtIHtcbiAgICAgIGZvbnQtc2l6ZTogMTNweDtcbiAgICB9XG5cbiAgICBsaSB7XG4gICAgICBmb250LXdlaWdodDogNjAwO1xuICAgICAgY29sb3I6IHdoaXRlO1xuICAgICAgcGFkZGluZzogMTdweCAwO1xuXG4gICAgICAmOjphZnRlciB7XG4gICAgICAgIGNvbnRlbnQ6ICcvJztcbiAgICAgICAgY29sb3I6IHJnYmEod2hpdGUsIC4xKTtcbiAgICAgICAgbWFyZ2luLWxlZnQ6IDVweDtcbiAgICAgICAgbWFyZ2luLXJpZ2h0OiAxcHg7XG4gICAgICAgIGZvbnQtc2l6ZTogMTZweDtcbiAgICAgICAgdmVydGljYWwtYWxpZ246IDBweDtcbiAgICAgIH1cblxuICAgICAgJjpsYXN0LWNoaWxkOjphZnRlciB7XG4gICAgICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgICB9XG5cbiAgICAgIGEsXG4gICAgICAmOjphZnRlciB7XG4gICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7XG4gICAgICB9XG4gICAgfVxuXG4gICAgYSB7XG4gICAgICBjb2xvcjogcmdiYSh3aGl0ZSwgMSk7XG4gICAgICB0cmFuc2l0aW9uOiAuMnMgY29sb3I7XG4gICAgICBwYWRkaW5nOiAwO1xuICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgICAgbWFyZ2luLWxlZnQ6IC0xcHg7XG5cblxuICAgICAgJjpob3ZlciB7XG4gICAgICAgIGNvbG9yOiByZ2JhKHdoaXRlLCAuMyk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLmJyZWFkY3J1bWJzLS1zbWFsbCB7XG4gICAgJixcbiAgICBsaTphZnRlciB7XG4gICAgICBmb250LXNpemU6IDEzcHg7XG4gICAgfVxuXG4gICAgbGkgYSB7XG4gICAgICBmb250LXdlaWdodDogNjAwO1xuICAgIH1cbiAgfVxuXG4gIGEge1xuICAgIGNvbG9yOiB3aGl0ZTtcbiAgICBwYWRkaW5nOiAxOHB4IDE1cHg7XG4gICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbiAgICB0cmFuc2l0aW9uOiAuMnMgY29sb3I7XG5cbiAgICAmLmN1cnJlbnQsXG4gICAgJi5hY3RpdmUge1xuICAgICAgY29sb3I6IHJnYmEod2hpdGUsIC40KVxuICAgIH1cblxuICAgICY6aG92ZXIge1xuICAgICAgY29sb3I6IHJnYmEod2hpdGUsIC40KTtcbiAgICB9XG5cbiAgICAmLmJ0biB7XG4gICAgICBwYWRkaW5nOiA2cHggOHB4IDVweDtcbiAgICAgIGZvbnQtc2l6ZTogMTNweDtcbiAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7XG4gICAgICB2ZXJ0aWNhbC1hbGlnbjogMHB4O1xuICAgICAgbGV0dGVyLXNwYWNpbmc6IC0uMDFlbTtcbiAgICAgIG1hcmdpbi1yaWdodDogM3B4O1xuICAgICAgbWFyZ2luLWxlZnQ6IDlweDtcbiAgICAgIHRyYW5zaXRpb246IC4zcyBib3gtc2hhZG93LCAuM3MgYmFja2dyb3VuZDtcblxuICAgICAgJjpob3ZlciB7XG4gICAgICAgIGJveC1zaGFkb3c6IDAgM3B4IDVweCByZ2JhKDAsIDAsIDAsIDAuMTUpO1xuICAgICAgfVxuXG4gICAgICAmOmFjdGl2ZSB7XG4gICAgICAgIGJveC1zaGFkb3c6IGluc2V0IDAgMXB4IDRweCByZ2JhKDAsMCwwLC4yKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbmJvZHkubGlnaHQgLnN1Yi1oZWFkZXIge1xuICAuY29udGFpbmVyOjpiZWZvcmUge1xuICAgIGJvcmRlci10b3A6IDFweCBzb2xpZCByZ2JhKGJsYWNrLCAuMDYpO1xuICB9XG5cbiAgLmJyZWFkY3J1bWJzIHtcbiAgICBsaSB7XG4gICAgICBjb2xvcjogIzI3MmEyZjtcblxuICAgICAgJjo6YWZ0ZXIge1xuICAgICAgICBjb2xvcjpyZ2JhKGJsYWNrLCAuMylcbiAgICAgIH1cbiAgICB9XG5cbiAgICBhIHtcbiAgICAgIGNvbG9yOiAjN2E4OGEwO1xuXG4gICAgICAmOmhvdmVyIHtcbiAgICAgICAgY29sb3I6ICRibHVlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGEge1xuICAgIGNvbG9yOiAjNjk3Mzg0O1xuXG4gICAgJi5jdXJyZW50LFxuICAgICYuYWN0aXZlIHtcbiAgICAgIGNvbG9yOiAjYjFiYmNhO1xuICAgIH1cblxuICAgICY6aG92ZXIge1xuICAgICAgY29sb3I6ICRibHVlO1xuICAgIH1cbiAgfVxufVxuIiwiLmhlcm8ge1xuICBwYWRkaW5nLXRvcDogMTI4cHg7XG4gIHBhZGRpbmctYm90dG9tOiA3MnB4O1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG5cbiAgJi5sZWZ0IHtcbiAgICAuY29udGVudCB7XG4gICAgICB3aWR0aDogNDE1cHg7XG4gICAgICBAbWVkaWEgKG1heC13aWR0aDogJHNjcmVlbi1tZC1tYXgpICB7XG4gICAgICAgIHdpZHRoOiA0MDBweDtcbiAgICAgIH1cbiAgICAgIEBtZWRpYSAobWF4LXdpZHRoOiAkc2NyZWVuLXhzLW1heCkgIHtcbiAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLmdyYXBoaWNzIHtcbiAgICAgIHRvcDogMTUwcHg7XG4gICAgICByaWdodDogMDtcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICB9XG4gIH1cblxuICAmLnJpZ2h0IHtcbiAgICAuY29udGVudCB7XG4gICAgICB3aWR0aDogNDUxcHg7XG4gICAgICBmbG9hdDogcmlnaHQ7XG4gICAgICBAbWVkaWEgKG1heC13aWR0aDogJHNjcmVlbi14cy1tYXgpICB7XG4gICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgICBmbG9hdDogbm9uZTtcbiAgICAgIH1cblxuICAgICAgJjphZnRlciB7XG4gICAgICAgIGNsZWFyOiByaWdodDtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAuZ3JhcGhpY3Mge1xuICAgIHdpZHRoOiA1MDBweDtcblxuICAgIHZpZGVvIHtcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgIGxlZnQ6IC0ycHg7XG4gICAgICB0b3A6IDEwcHg7XG5cbiAgICAgICY6Oi13ZWJraXQtbWVkaWEtY29udHJvbHMtc3RhcnQtcGxheWJhY2stYnV0dG9uIHtcbiAgICAgICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50O1xuICAgICAgICAtd2Via2l0LWFwcGVhcmFuY2U6IG5vbmU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgQG1lZGlhIChtYXgtd2lkdGg6ICRzY3JlZW4teHMtbWF4KSAge1xuICAgICAgd2lkdGg6IDEwMCU7XG5cbiAgICAgIHZpZGVvIHtcbiAgICAgICAgd2lkdGg6IDMwMHB4O1xuICAgICAgICBoZWlnaHQ6IDMwMHB4O1xuICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICAgIG1hcmdpbjogMCBhdXRvO1xuICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwIHtcbiAgICBmb250LXNpemU6IDE1cHg7XG4gICAgbGluZS1oZWlnaHQ6IDI4cHg7XG4gICAgbGV0dGVyLXNwYWNpbmc6IC0wLjAyZW07XG4gICAgY29sb3I6ICRkYXJrLWdyZXk7XG5cbiAgICAmICsgLmJ0bnMge1xuICAgICAgbWFyZ2luLXRvcDogMzdweDtcbiAgICB9XG4gIH1cblxuICAuZmVhdHVyZSB7XG4gICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgZm9udC13ZWlnaHQ6IDcwMDtcbiAgICBmb250LXNpemU6IDEwcHg7XG4gICAgbGV0dGVyLXNwYWNpbmc6IDJweDtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgcGFkZGluZy1ib3R0b206IDE1cHg7XG4gICAgY29sb3I6IGJsYWNrO1xuXG4gICAgc3BhbiB7XG4gICAgICB0cmFuc2l0aW9uOiBsZWZ0IC4zcyBjdWJpYy1iZXppZXIoMC4xNTUsIDEuMTA1LCAwLjI5NSwgMS4xMik7XG4gICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICBsZWZ0OiAwO1xuICAgIH1cblxuICAgICY6YWZ0ZXIge1xuICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgdG9wOiAxNHB4O1xuICAgICAgbGVmdDogMDtcbiAgICAgIHJpZ2h0OiAwO1xuICAgICAgY29udGVudDogJyc7XG4gICAgICBib3JkZXItYm90dG9tOiAycHggc29saWQgJGJsYWNraXNoO1xuICAgICAgdHJhbnNpdGlvbjogcmlnaHQgLjNzIGN1YmljLWJlemllcigwLjE1NSwgMS4xMDUsIDAuMjk1LCAxLjEyKTtcbiAgICB9XG5cbiAgICAmOmJlZm9yZSB7XG4gICAgICBjb250ZW50OiAnJztcbiAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgIHJpZ2h0OiAtMzVweDtcbiAgICAgIHRvcDogOXB4O1xuICAgICAgZm9udC1zaXplOiAyMHB4O1xuICAgICAgdHJhbnNpdGlvbjogdHJhbnNmb3JtIC4zcyBjdWJpYy1iZXppZXIoMC4xNTUsIDEuMTA1LCAwLjI5NSwgMS4xMik7XG4gICAgICB3aWR0aDogMTFweDtcbiAgICAgIGhlaWdodDogMTFweDtcbiAgICAgIGJvcmRlci1yYWRpdXM6IDJweDtcbiAgICAgIGJvcmRlci1yaWdodDogMC4xZW0gc29saWQ7XG4gICAgICBib3JkZXItdG9wOiAwLjFlbSBzb2xpZDtcbiAgICAgIHRyYW5zZm9ybTogc2NhbGUzZCgwLDAsMSkgcm90YXRlKDQ1ZGVnKSB0cmFuc2xhdGUzZCgtMjVweCwgMjVweCwgMCk7XG4gICAgICBtYXJnaW4tcmlnaHQ6IDAuNWVtO1xuICAgIH1cblxuICAgICY6aG92ZXIge1xuICAgICAgc3BhbiB7XG4gICAgICAgIC8vdHJhbnNmb3JtOiB0cmFuc2xhdGUzZCgxNXB4LCAwLCAwKTtcbiAgICAgICAgbGVmdDogNXB4O1xuICAgICAgfVxuXG4gICAgICAmOmJlZm9yZSB7XG4gICAgICAgIHRyYW5zZm9ybTogc2NhbGUzZCgxLDEsMSkgcm90YXRlKDQ1ZGVnKSB0cmFuc2xhdGUzZCgwLCAwLCAwKTtcbiAgICAgIH1cblxuICAgICAgJjphZnRlciB7XG4gICAgICAgIHJpZ2h0OiAtMjVweDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICArIGgyIHtcbiAgICAgIG1hcmdpbi10b3A6IDI1cHg7XG4gICAgICBtYXJnaW4tYm90dG9tOiAyMHB4O1xuICAgICAgbGV0dGVyLXNwYWNpbmc6IC0wLjAxZW07XG4gICAgICBjb2xvcjogIzI3MmEyZjtcbiAgICAgIGZvbnQtc2l6ZTogMzJweDtcbiAgICAgIGZvbnQtd2VpZ2h0OiA0MDA7XG4gICAgfVxuICB9XG5cbiAgaDIge1xuICAgIGxpbmUtaGVpZ2h0OiA0MnB4O1xuICB9XG5cbiAgaDMgKyBwIHtcbiAgICBmb250LXNpemU6IDE3cHg7XG4gICAgbGluZS1oZWlnaHQ6IDM0cHg7XG4gIH1cbn1cbiIsIi50cmFuc3BhcmVudCAuY3RhIHtcbiAgbWFyZ2luLXRvcDogLTc4cHg7XG4gIHBhZGRpbmctdG9wOiA3OHB4O1xufVxuXG4uY3RhIHtcbiAgY29sb3I6IHdoaXRlO1xuICBiYWNrZ3JvdW5kOiAkYmx1ZTtcblxuICAmLmdyYWRpZW50IHtcbiAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoNDVkZWcsIHJnYmEoNTIsMTI2LDI1NSwxKSAwJSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJnYmEoNDEsMTQ0LDI1NSwxKSA1MCUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZ2JhKDM0LDEzMywyNTUsMSkgNTAlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmdiYSgzMCwxNjEsMjU1LDEpIDEwMCUpO1xuICB9XG5cbiAgLmNlbnRlciB7XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICB9XG5cbiAgaGdyb3VwIHtcbiAgICBwYWRkaW5nLXRvcDogMzNweDtcbiAgICBwYWRkaW5nLWJvdHRvbTogOTRweDtcbiAgICBtYXgtd2lkdGg6IDgwMHB4O1xuXG4gICAgaDEge1xuICAgICAgZm9udC1zaXplOiAyOHB4O1xuICAgICAgbWFyZ2luLWJvdHRvbTogMTJweDtcbiAgICAgIGxldHRlci1zcGFjaW5nOiAtLjAzZW07XG4gICAgfVxuXG4gICAgaDQge1xuICAgICAgZm9udC1zaXplOiAyMHB4O1xuICAgICAgY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgLjgpO1xuICAgICAgbGV0dGVyLXNwYWNpbmc6IC0uMDNlbTtcbiAgICAgIGxpbmUtaGVpZ2h0OiAxLjZlbTtcbiAgICAgIG1hcmdpbi10b3A6IC01cHg7XG4gICAgfVxuXG4gICAgcCB7XG4gICAgICBjb2xvcjogcmdiYSh3aGl0ZSwgLjcpO1xuICAgICAgZm9udC1zaXplOiAxOHB4O1xuICAgICAgZm9udC13ZWlnaHQ6IDQwMDtcbiAgICB9XG5cbiAgICBhIHtcbiAgICAgIGNvbG9yOiByZ2JhKHdoaXRlLCAuOSk7XG5cbiAgICAgICY6aG92ZXIge1xuICAgICAgICBjb2xvcjogd2hpdGU7XG4gICAgICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBzbWFsbCB7XG4gICAgICBhIHtcbiAgICAgICAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAudGFicyB7XG4gICAgYmFja2dyb3VuZDogI2Y2ZjdmYTtcblxuICAgIC5jb250YWluZXIge1xuICAgICAgZmxleC13cmFwOiB3cmFwO1xuICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gICAgICBsaXN0LXN0eWxlOiBub25lO1xuICAgICAgbWFyZ2luLWJvdHRvbTogMDtcbiAgICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICB9XG5cbiAgICBsaSB7XG4gICAgICBtYXgtd2lkdGg6IDM2MHB4O1xuICAgICAgbWFyZ2luLWxlZnQ6IDQzcHg7XG4gICAgICB0ZXh0LWFsaWduOiBsZWZ0O1xuICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuXG4gICAgICAmOmZpcnN0LWNoaWxkIHtcbiAgICAgICAgbWFyZ2luLWxlZnQ6IDA7XG4gICAgICB9XG5cblxuICAgICAgQG1lZGlhIChtYXgtd2lkdGg6IDk5MXB4KSB7XG4gICAgICAgIG1hcmdpbi1sZWZ0OiAwO1xuICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgICAgbWFyZ2luOiAwIGF1dG87XG5cbiAgICAgICAgJjpmaXJzdC1jaGlsZCB7XG4gICAgICAgICAgbWFyZ2luLWxlZnQ6IGF1dG87XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBoMyB7XG4gICAgICBmb250LXNpemU6IDE2cHg7XG4gICAgICBjb2xvcjogIzI3MmEyZjtcbiAgICAgIG1hcmdpbi1ib3R0b206IDVweDtcbiAgICAgIG1hcmdpbi10b3A6IDA7XG4gICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgfVxuXG4gICAgcCB7XG4gICAgICBmb250LXNpemU6IDE0cHg7XG4gICAgICBjb2xvcjogIzcyN2E4NztcbiAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgIG1hcmdpbi1ib3R0b206IDA7XG4gICAgfVxuXG4gICAgYSB7XG4gICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgIHBhZGRpbmc6IDMycHggMCAyOHB4IDg1cHg7XG4gICAgICB6LWluZGV4OiAxO1xuICAgICAgY3Vyc29yOiBwb2ludGVyO1xuICAgICAgdXNlci1zZWxlY3Q6IG5vbmU7XG5cbiAgICAgICY6OmJlZm9yZSB7XG4gICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgY29udGVudDogJyc7XG4gICAgICAgIHRvcDogMDtcbiAgICAgICAgcmlnaHQ6IDA7XG4gICAgICAgIGJvdHRvbTogMDtcbiAgICAgICAgbGVmdDogMDtcbiAgICAgICAgdHJhbnNpdGlvbjogLjNzIGJveC1zaGFkb3csIC4zcyB0cmFuc2Zvcm0sIC4zcyBiYWNrZ3JvdW5kLCAuM3MgYm9yZGVyLXJhZGl1cztcbiAgICAgIH1cblxuICAgICAgJjpob3ZlcixcbiAgICAgICY6YWN0aXZlLFxuICAgICAgJjpmb2N1cyB7XG4gICAgICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcblxuICAgICAgICAmOjpiZWZvcmUge1xuICAgICAgICAgIGJhY2tncm91bmQ6IHdoaXRlO1xuICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDRweDtcbiAgICAgICAgICBib3gtc2hhZG93OiAwIDAgNHB4IHJnYmEoMCwgMCwgMCwgLjA1KSwgMCA2cHggMTBweCByZ2JhKDAsIDAsIDAsIC4wOCk7XG4gICAgICAgICAgdHJhbnNmb3JtOiBzY2FsZSgxLjEsIDEuMSk7XG4gICAgICAgIH1cblxuICAgICAgICAmOjphZnRlciB7XG4gICAgICAgICAgb3BhY2l0eTogMTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAmLmFjdGl2ZSB7XG4gICAgICAgICY6OmJlZm9yZSB7XG4gICAgICAgICAgYmFja2dyb3VuZDogd2hpdGU7XG4gICAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4O1xuICAgICAgICAgIGJveC1zaGFkb3c6IDAgMCA0cHggcmdiYSgwLCAwLCAwLCAuMDUpLCAwIDZweCAxMHB4IHJnYmEoMCwgMCwgMCwgLjA4KTtcbiAgICAgICAgICB0cmFuc2Zvcm06IHNjYWxlKDEuMiwgMS4yKTtcbiAgICAgICAgfVxuXG4gICAgICAgICY6OmFmdGVyIHtcbiAgICAgICAgICBvcGFjaXR5OiAxO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgICY6OmFmdGVyIHtcbiAgICAgICAgYmFja2dyb3VuZDogdXJsKCcvaW1nL2dldHRpbmctc3RhcnRlZC9nZXR0aW5nLXN0YXJ0ZWQtdG9nZ2xlLWljb25zLnBuZycpIG5vLXJlcGVhdCAwIDA7XG4gICAgICAgIGJhY2tncm91bmQtc2l6ZTogNzBweDtcbiAgICAgICAgd2lkdGg6IDcwcHg7XG4gICAgICAgIGhlaWdodDogNzBweDtcbiAgICAgICAgY29udGVudDogJyc7XG4gICAgICAgIGxlZnQ6IDVweDtcbiAgICAgICAgdG9wOiAyMHB4O1xuICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICBvcGFjaXR5OiAuNztcbiAgICAgICAgdHJhbnNpdGlvbjogLjNzIG9wYWNpdHk7XG4gICAgICB9XG5cbiAgICAgICYuY3JlYXRvcjo6YWZ0ZXIge1xuICAgICAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwIC0xNDBweDtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAuYWxlcnQge1xuICAgIGNvbG9yOiAjZmZlZWQ2O1xuICAgIGZvbnQtc2l6ZTogMTRweDtcbiAgICBmb250LXdlaWdodDogNTAwO1xuICAgIGJvcmRlci1yYWRpdXM6IDA7XG4gICAgbWFyZ2luLWJvdHRvbTogMDtcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgcGFkZGluZy10b3A6IDEwcHg7XG4gICAgcGFkZGluZy1ib3R0b206IDEwcHg7XG5cbiAgICAmOjpiZWZvcmUge1xuICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICAgZm9udC1zaXplOiAyMHB4O1xuICAgICAgbGluZS1oZWlnaHQ6IDE0cHg7XG4gICAgICBsZWZ0OiAwO1xuICAgICAgdG9wOiAycHg7XG4gICAgICBtYXJnaW4tcmlnaHQ6IDVweDtcbiAgICAgIGNvbnRlbnQ6IFwiXFxmMTdlXCI7XG4gICAgfVxuXG4gICAgYSB7XG4gICAgICBjb2xvcjogI2ZmZmZmZjtcbiAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7XG5cbiAgICAgICY6aG92ZXIge1xuICAgICAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG4gICAgICAgIGNvbG9yOiByZ2JhKHdoaXRlLCAuOCk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG4iLCIjcHJlLWZvb3RlciB7XG4gIGZvbnQtZmFtaWx5OiBcIkVpbmFcIiwgXCJIZWx2ZXRpY2EgTmV1ZVwiLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7IC8vIHRvZG86IFNldCBFaW5hIGdsb2JhbGx5XG4gIGJhY2tncm91bmQ6ICR3aGl0ZWlzaDtcbiAgY29sb3I6ICM3MjdhODc7XG4gIHBhZGRpbmctdG9wOiA4MHB4O1xuICBwYWRkaW5nLWJvdHRvbTogNzJweDtcblxuICB1bCB7XG4gICAgbGlzdC1zdHlsZTogbm9uZTtcblxuICAgICY6OmFmdGVyIHtcbiAgICAgIGNvbnRlbnQ6ICcnO1xuICAgICAgY2xlYXI6IGJvdGg7XG4gICAgfVxuXG4gICAgbGkge1xuICAgICAgZmxvYXQ6IGxlZnQ7XG4gICAgICB3aWR0aDogNDUlO1xuICAgICAgcGFkZGluZy1sZWZ0OiAxMDhweDtcbiAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcblxuICAgICAgJjo6YmVmb3JlIHtcbiAgICAgICAgYmFja2dyb3VuZDogdXJsKCcvaW1nL2hvbWUvaWNvbnMtbGcucG5nPzEnKSBuby1yZXBlYXQgMCAtMzcycHg7XG4gICAgICAgIGJhY2tncm91bmQtc2l6ZTogOTNweDtcbiAgICAgICAgaGVpZ2h0OiA5M3B4O1xuICAgICAgICB3aWR0aDogOTNweDtcbiAgICAgICAgY29udGVudDogJyc7XG4gICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgIGxlZnQ6IC05cHg7XG4gICAgICAgIHRvcDogLTVweDtcbiAgICAgIH1cblxuICAgICAgJjo6YWZ0ZXIge1xuICAgICAgICBib3JkZXItcmlnaHQ6IDFweCBzb2xpZCAjZGRlMWVhO1xuICAgICAgICBjb250ZW50OiAnJztcbiAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICByaWdodDogLTEwJTtcbiAgICAgICAgdG9wOiAxNXB4O1xuICAgICAgICBib3R0b206IDE1cHg7XG4gICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgfVxuXG4gICAgICAmLmV4cGxvci1kb2NzOjpiZWZvcmUge1xuICAgICAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwIC0yNzlweDtcbiAgICAgIH1cblxuICAgICAgJi5mb3J1bTo6YmVmb3JlIHtcbiAgICAgICAgYmFja2dyb3VuZC1wb3NpdGlvbjogMCAtNDY1cHg7XG4gICAgICB9XG5cbiAgICAgICYuYmxvZzo6YmVmb3JlIHtcbiAgICAgICAgYmFja2dyb3VuZC1wb3NpdGlvbjogMCAtNTU4cHg7XG4gICAgICB9XG5cbiAgICAgICY6bGFzdC1jaGlsZCB7XG4gICAgICAgIGZsb2F0OiByaWdodDtcblxuICAgICAgICAmOjphZnRlciB7XG4gICAgICAgICAgZGlzcGxheTogbm9uZTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBhIHtcbiAgICAgICAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgICAgICAgZm9udC1zaXplOiAyMHB4O1xuICAgICAgICBtYXJnaW4tYm90dG9tOiA1cHg7XG4gICAgICAgIGxldHRlci1zcGFjaW5nOiAtLjAyZW07XG5cbiAgICAgICAgJjo6YWZ0ZXIge1xuICAgICAgICAgIGZvbnQtZmFtaWx5OiAnSW9uaWNvbnMnO1xuICAgICAgICAgIGNvbnRlbnQ6ICdcXGYyODcnO1xuICAgICAgICAgIGZvbnQtc2l6ZTogLjllbTtcbiAgICAgICAgICBtYXJnaW4tbGVmdDogMTBweDtcbiAgICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgICAgICAgIHRyYW5zaXRpb246IC4zcyB0cmFuc2Zvcm07XG4gICAgICAgIH1cblxuICAgICAgICAmOmhvdmVyLFxuICAgICAgICAmOmFjdGl2ZSxcbiAgICAgICAgJjpmb2N1cyAge1xuICAgICAgICAgIGNvbG9yOiBkYXJrZW4oJGJsdWUsIDEwKTtcbiAgICAgICAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG5cbiAgICAgICAgICAmOjphZnRlciB7XG4gICAgICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZTNkKDVweCwgMCwgMCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHAge1xuICAgICAgICBmb250LXNpemU6IDE1cHg7XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjZlbTtcbiAgICAgICAgY29sb3I6ICM3MjdhODc7XG4gICAgICAgIG1hcmdpbi10b3A6IDJweDtcbiAgICAgICAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgICAgICAgbGV0dGVyLXNwYWNpbmc6IC0wLjAyZW07XG4gICAgICB9XG5cblxuICAgICAgQG1lZGlhIChtYXgtd2lkdGg6ICRzY3JlZW4teHMtbWF4KSB7XG4gICAgICAgIGZsb2F0OiBub25lO1xuICAgICAgICB3aWR0aDogMTAwJTtcblxuICAgICAgICAmOmZpcnN0LWNoaWxkIHtcbiAgICAgICAgICBtYXJnaW4tYm90dG9tOiA0MHB4O1xuICAgICAgICB9XG5cbiAgICAgICAgJjo6YWZ0ZXIge1xuICAgICAgICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbi5kb2NzICNwcmUtZm9vdGVyIHtcbiAgbWFyZ2luLWxlZnQ6IDIzMHB4O1xuXG4gIEBtZWRpYSAobWF4LXdpZHRoOiAkc2NyZWVuLXhzLW1heCkge1xuICAgIG1hcmdpbi1sZWZ0OiAwO1xuICB9XG5cbiAgLmNvbnRhaW5lciB7XG4gICAgbWF4LXdpZHRoOiAxMDAlO1xuICB9XG59XG4iLCIucHJlLWhlYWRlciB7XG4gIGZvbnQtZmFtaWx5OiAkZm9udC1mYW1pbHktaW50ZXI7XG4gIGJhY2tncm91bmQ6ICNGOEZBRkM7XG4gICAgYm94LXNoYWRvdzogMCAxcHggMHB4IDAgcmdiYSgwLDIwLDU2LC4wNik7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIHotaW5kZXg6IDk5OTtcbiAgICBwYWRkaW5nOiA2cHggMCA3cHg7XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgIGNvbG9yOiAjNzM4NDlBO1xuXG4gIC5jb250YWluZXIge1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICBmb250LXNpemU6IDExcHg7XG4gICAgbGluZS1oZWlnaHQ6IDEuOGVtO1xuICAgIGZvbnQtd2VpZ2h0OiA0MDA7XG4gICAgbGV0dGVyLXNwYWNpbmc6IC0uMDFlbTtcblxuICAgICY6YmVmb3JlLFxuICAgICY6YWZ0ZXIge1xuICAgICAgZGlzcGxheTogbm9uZTtcbiAgICB9XG4gIH1cblxuICAjb3B0aW1pemVseSB7XG4gICAgdHJhbnNpdGlvbjogLjJzIG9wYWNpdHk7XG4gIH1cblxuICBwIHtcbiAgICBkaXNwbGF5OiBpbmxpbmU7XG4gIH1cblxuICBzdHJvbmcge1xuICAgIGZvbnQtd2VpZ2h0OiA2MDA7XG4gICAgY29sb3I6ICMwMjA4MTQ7XG4gIH1cblxuICBhIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjNzNhNWZmO1xuICAgIGNvbG9yOiAjZmZmO1xuICAgIGJvcmRlci1yYWRpdXM6IDE2cHg7XG4gICAgbWFyZ2luLWxlZnQ6IDEycHg7XG4gICAgcGFkZGluZzogNnB4IDhweCA1cHg7XG4gICAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgICBmb250LXNpemU6IDlweDtcbiAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xuICAgIHZlcnRpY2FsLWFsaWduOiAwO1xuICAgIHdoaXRlLXNwYWNlOiBwcmU7XG4gICAgbGV0dGVyLXNwYWNpbmc6IC4wMmVtO1xuICAgIHRyYW5zaXRpb246IC4ycyBiYWNrZ3JvdW5kLWNvbG9yLCAuMnMgYm94LXNoYWRvdztcblxuICAgICY6OmFmdGVyIHtcbiAgICAgIGZvbnQtZmFtaWx5OiAnSW9uaWNvbnMnO1xuICAgICAgY29udGVudDogJ1xcZjNkMSc7XG4gICAgICBtYXJnaW4tbGVmdDogM3B4O1xuICAgIH1cblxuICAgICY6aG92ZXIge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogbGlnaHRlbigjNzNhNWZmLCA1KTtcbiAgICAgIC8vIGJhY2tncm91bmQtY29sb3I6IGxpZ2h0ZW4oIzMwNDI3ZSwgNSk7XG4gICAgICBib3gtc2hhZG93OiAwIDFweCAycHggcmdiYShibGFjaywgLjEpO1xuICAgIH1cbiAgfVxuXG4gIEBtZWRpYSAobWF4LXdpZHRoOiAkc2NyZWVuLXhzLW1heCkge1xuICAgIGRpc3BsYXk6IG5vbmU7XG4gIH1cblxuICAmLmJhY2sge1xuICAgIGJhY2tncm91bmQ6ICNGOUY5Rjk7XG4gICAgdGV4dC1hbGlnbjogbGVmdDtcbiAgICBib3gtc2hhZG93OiBub25lO1xuICAgIHBhZGRpbmc6IDNweCAwO1xuXG4gICAgYSB7XG4gICAgICBsaW5lLWhlaWdodDogbm9ybWFsO1xuICAgICAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgICAgIGZvbnQtc2l6ZTogMTBweDtcbiAgICAgIGxldHRlci1zcGFjaW5nOiAwLjA1ZW07XG4gICAgICBjb2xvcjogIzM4ODBGRjtcbiAgICAgIGJhY2tncm91bmQ6IG5vbmU7XG4gICAgICBtYXJnaW46IDA7XG4gICAgICBwYWRkaW5nOiAxMHB4IDA7XG5cbiAgICAgICY6OmFmdGVyIHtcbiAgICAgICAgZGlzcGxheTogbm9uZTtcbiAgICAgIH1cblxuICAgICAgaW9uLWljb24ge1xuICAgICAgICBjb2xvcjogcmdiYSg1NiwgMTI4LCAyNTUsIDAuNyk7XG4gICAgICAgIGZvbnQtc2l6ZTogMTJweDtcbiAgICAgICAgaGVpZ2h0OiAxMnB4O1xuICAgICAgICB3aWR0aDogMTJweDtcbiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogLTJweDtcbiAgICAgICAgb3BhY2l0eTogMDtcbiAgICAgICAgdHJhbnNpdGlvbjogLjJzIHRyYW5zZm9ybSBlYXNlLCAuMnMgb3BhY2l0eTtcbiAgICAgICAgbWFyZ2luLXJpZ2h0OiA0cHg7XG5cbiAgICAgICAgJi5oeWRyYXRlZCB7XG4gICAgICAgICAgb3BhY2l0eTogMTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAmOmhvdmVyIHtcbiAgICAgICAgYm94LXNoYWRvdzogbm9uZTtcblxuICAgICAgICBpb24taWNvbiB7XG4gICAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC0ycHgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59XG4iLCIuZG9jcy1jb250YWluZXIgKyBmb290ZXIge1xuICBkaXNwbGF5OiBub25lO1xufVxuXG5mb290ZXIge1xuICBib3JkZXItdG9wOiAxcHggc29saWQgI0YzRjVGOTtcbiAgcGFkZGluZy10b3A6IDcwcHg7XG4gIHBhZGRpbmctYm90dG9tOiAyMHB4O1xuICBmb250LXdlaWdodDogNTAwO1xuICBmb250LWZhbWlseTogJGZvbnQtZmFtaWx5LWVpbmE7XG5cbiAgLmxvZ28gc3ZnIHtcbiAgICBmaWxsOiAjMzg4MEZGO1xuICAgIHdpZHRoOiA3OHB4O1xuICAgIGhlaWdodDogMjZweDtcbiAgfVxuXG4gIG5hdiAge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xuXG4gICAgJi5jb250YWluZXIge1xuICAgICAgJjo6YmVmb3JlLFxuICAgICAgJjo6YWZ0ZXIge1xuICAgICAgICBkaXNwbGF5OiBub25lO1xuICAgICAgfVxuICAgIH1cblxuICAgIC5sb2dvLFxuICAgIHVsIHtcbiAgICAgIGZsZXg6IDE7XG4gICAgfVxuXG4gICAgdWwge1xuICAgICAgbGlzdC1zdHlsZTogbm9uZTtcbiAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7XG4gICAgICBwYWRkaW5nLWxlZnQ6IDA7XG5cbiAgICAgICY6Zmlyc3QtY2hpbGQge1xuICAgICAgICBtYXJnaW4tbGVmdDogMXB4O1xuICAgICAgfVxuXG4gICAgICBzdHJvbmcge1xuICAgICAgICBjb2xvcjogIzAwMDAwMDtcbiAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7XG4gICAgICAgIGZvbnQtc2l6ZTogMTZweDtcbiAgICAgICAgcGFkZGluZy1ib3R0b206IDRweDtcbiAgICAgICAgbGV0dGVyLXNwYWNpbmc6IC0uMDFlbTtcbiAgICAgIH1cblxuICAgICAgYSB7XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxO1xuICAgICAgICBmb250LXNpemU6IDE0cHg7XG4gICAgICAgIGxldHRlci1zcGFjaW5nOiAtMC4wMWVtO1xuICAgICAgICBjb2xvcjogIzczODQ5QTtcbiAgICAgICAgZm9udC13ZWlnaHQ6IDQwMDtcbiAgICAgICAgcGFkZGluZzogMTFweCAwO1xuICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgICAgIGZvbnQtZmFtaWx5OiAkZm9udC1mYW1pbHktaW50ZXI7XG5cbiAgICAgICAgJjpob3ZlciB7XG4gICAgICAgICAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xuICAgICAgICAgIGNvbG9yOiAkYmx1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC5zaWdudXAge1xuICAgIG1hcmdpbi10b3A6IDYwcHg7XG4gICAgZGlzcGxheTogZmxleDtcblxuICAgICY6OmJlZm9yZSxcbiAgICAmOjphZnRlciB7XG4gICAgICBkaXNwbGF5OiBub25lO1xuICAgIH1cblxuICAgIGhncm91cCB7XG4gICAgICBmbGV4OiAwIDAgYXV0bztcbiAgICB9XG5cbiAgICBpb25pYy1uZXdzbGV0dGVyLXNpZ251cCB7XG4gICAgICBmbGV4OiAxO1xuICAgICAgbWFyZ2luLWxlZnQ6IDYwcHg7XG4gICAgfVxuXG4gICAgZm9ybSB7XG4gICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgaGVpZ2h0OiA1MHB4O1xuICAgIH1cblxuICAgIGhncm91cCB7XG4gICAgICBiYWNrZ3JvdW5kOiB1cmwoJy9pbWcvZm9vdGVyL2Zvb3Rlci1uZXdzbGV0dGVyLWljb24ucG5nJykgbm8tcmVwZWF0IDFweCA4cHg7XG4gICAgICBiYWNrZ3JvdW5kLXNpemU6IDQwcHg7XG4gICAgICBwYWRkaW5nLWxlZnQ6IDYzcHg7XG4gICAgICBtaW4taGVpZ2h0OiA1MHB4O1xuXG4gICAgICBoMyB7XG4gICAgICAgIGZvbnQtc2l6ZTogMTZweDtcbiAgICAgICAgbWFyZ2luLXRvcDogMDtcbiAgICAgICAgbWFyZ2luLWJvdHRvbTogM3B4O1xuICAgICAgICBwYWRkaW5nLXRvcDogMTFweDtcbiAgICAgICAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgICAgICAgbGV0dGVyLXNwYWNpbmc6IC0uMDJlbTtcbiAgICAgIH1cblxuICAgICAgcCB7XG4gICAgICAgIGZvbnQtZmFtaWx5OiAkZm9udC1mYW1pbHktaW50ZXI7XG4gICAgICAgIGZvbnQtc2l6ZTogMTRweDtcbiAgICAgICAgY29sb3I6ICM3Mzg0OUE7XG4gICAgICAgIGxldHRlci1zcGFjaW5nOiAtLjAxNmVtO1xuICAgICAgICBmb250LXdlaWdodDogNDAwO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIEBtZWRpYSAobWF4LXdpZHRoOiAkc2NyZWVuLXNtLW1heCkge1xuICAgIHBhZGRpbmctdG9wOiA0NnB4O1xuXG4gICAgbmF2IHtcbiAgICAgIGZsZXgtd3JhcDogd3JhcDtcbiAgICAgIGp1c3RpZnktY29udGVudDogZmxleC1zdGFydDtcblxuICAgICAgLmxvZ28ge1xuICAgICAgICBmbGV4OiAwIDAgMTAwJTtcbiAgICAgICAgbWFyZ2luLWJvdHRvbTogNDBweDtcbiAgICAgIH1cblxuXG4gICAgfVxuXG4gICAgLnNpZ251cCB7XG4gICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuXG4gICAgICBoZ3JvdXAsXG4gICAgICBpb25pYy1uZXdzbGV0dGVyLXNpZ251cCB7XG4gICAgICAgIGZsZXg6IDAgMCAxMDAlO1xuICAgICAgfVxuXG4gICAgICBpb25pYy1uZXdzbGV0dGVyLXNpZ251cCB7XG4gICAgICAgIG1hcmdpbi10b3A6IDRweDtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBAbWVkaWEgKG1heC13aWR0aDogJHNjcmVlbi1zbS1taW4pIHtcbiAgICBuYXYge1xuICAgICAgLmxvZ28ge1xuICAgICAgICBkaXNwbGF5OiBub25lO1xuICAgICAgfVxuXG4gICAgICB1bCB7XG4gICAgICAgIGZsZXg6IDAgMCAzMyU7XG4gICAgICAgIG1hcmdpbi1ib3R0b206IDM2cHhcbiAgICAgIH1cblxuICAgICAgdWwgbGkgYSB7XG4gICAgICAgIHBhZGRpbmc6IDlweCAwO1xuICAgICAgfVxuICAgIH1cblxuICAgIC5zaWdudXAge1xuICAgICAgbWFyZ2luLXRvcDogMDtcbiAgICB9XG4gIH1cblxuICBAbWVkaWEgKG1heC13aWR0aDogJHNjcmVlbi14cy1taW4pIHtcbiAgICBuYXYgdWwge1xuICAgICAgZmxleDogMCAwIDUwJTtcbiAgICB9XG5cbiAgICAuc2lnbnVwIGlvbmljLW5ld3NsZXR0ZXItc2lnbnVwIHtcbiAgICAgIG1hcmdpbi1sZWZ0OiAwO1xuICAgIH1cbiAgfVxuXG4gIC5zdWItZm9vdGVyIHtcbiAgICBmb250LXNpemU6IDEycHg7XG4gICAgY29sb3I6ICRncmV5O1xuICAgIGJvcmRlci10b3A6IDFweCBzb2xpZCAjZWZmMWY1O1xuICAgIG1hcmdpbi10b3A6IDQwcHg7XG4gICAgcGFkZGluZy10b3A6IDI5cHg7XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xuICAgIGZsZXgtd3JhcDogd3JhcDtcblxuICAgIHVsIHtcbiAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICBmbGV4OiAwIDAgYXV0bztcbiAgICAgIGxpc3Qtc3R5bGU6IG5vbmU7XG4gICAgICBwYWRkaW5nLWxlZnQ6IDA7XG4gICAgfVxuXG4gICAgdWw6bGFzdC1jaGlsZCBsaSArIGxpIHtcbiAgICAgIG1hcmdpbi1sZWZ0OiAxNXB4O1xuICAgIH1cblxuICAgIC5saWNlbnNlIHtcbiAgICAgIG1hcmdpbi1sZWZ0OiBhdXRvO1xuICAgICAgbWFyZ2luLXJpZ2h0OiAtM3B4O1xuICAgICAgcGFkZGluZy1sZWZ0OiAxNXB4O1xuICAgICAgdGV4dC1hbGlnbjogcmlnaHQ7XG5cbiAgICAgIEBtZWRpYSAobWF4LXdpZHRoOiAkc2NyZWVuLXhzLW1heCkge1xuICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgICAgcGFkZGluZy1sZWZ0OiAwO1xuICAgICAgfVxuICAgIH1cblxuICAgIGEge1xuICAgICAgY29sb3I6ICNiY2M1ZDU7XG5cbiAgICAgICY6aG92ZXIge1xuICAgICAgICBjb2xvcjogJGdyZXk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLmNvcHlyaWdodCxcbiAgICAucHJpdmFjeSxcbiAgICAudG9zIHtcbiAgICAgIG1hcmdpbi1yaWdodDogOHB4O1xuICAgIH1cblxuICAgIC5jb3B5cmlnaHQge1xuICAgICAgZmxleDogMCAwIDc3cHg7XG4gICAgfVxuXG4gICAgLnByaXZhY3kge1xuICAgICAgaGVpZ2h0OiAxZW07XG4gICAgfVxuXG4gICAgYVtpZF49YnRuLWZvb3Rlcl0ge1xuICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICAgaGVpZ2h0OiAxNnB4O1xuICAgICAgd2lkdGg6IDE2cHg7XG4gICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgICBvcGFjaXR5OiAwLjY7XG4gICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuXG4gICAgICBzdmcge1xuICAgICAgICBmaWxsOiAjQ0VENkUwO1xuICAgICAgfVxuXG4gICAgICAmOmhvdmVyIHN2ZyB7XG4gICAgICAgIGZpbGw6ICNCNEJCQzU7XG4gICAgICB9XG5cbiAgICB9XG5cbiAgfVxufVxuIiwiQG1lZGlhIChtYXgtd2lkdGg6ICRzY3JlZW4teHMtbWF4KSB7XG4gIC5oaWRlLXhzIHtcbiAgICBkaXNwbGF5OiBub25lO1xuICB9XG4gIC5zaG93LXNtLFxuICAuc2hvdy1tZCxcbiAgLnNob3ctbGcge1xuICAgIGRpc3BsYXk6IG5vbmU7XG4gIH1cbn1cblxuQG1lZGlhIChtaW4td2lkdGg6ICRzY3JlZW4tc20tbWluKSBhbmQgKG1heC13aWR0aDogJHNjcmVlbi1zbS1tYXgpIHtcbiAgLmhpZGUtc20ge1xuICAgIGRpc3BsYXk6IG5vbmU7XG4gIH1cbiAgLnNob3cteHMsXG4gIC5zaG93LW1kLFxuICAuc2hvdy1sZyB7XG4gICAgZGlzcGxheTogbm9uZTtcbiAgfVxufVxuXG5AbWVkaWEgKG1pbi13aWR0aDogJHNjcmVlbi1tZC1taW4pIGFuZCAobWF4LXdpZHRoOiAkc2NyZWVuLW1kLW1heCkge1xuICAuaGlkZS1tZCB7XG4gICAgZGlzcGxheTogbm9uZTtcbiAgfVxuICAuc2hvdy14cyxcbiAgLnNob3ctc20sXG4gIC5zaG93LWxnIHtcbiAgICBkaXNwbGF5OiBub25lO1xuICB9XG59XG5cbkBtZWRpYSAobWluLXdpZHRoOiAkc2NyZWVuLWxnLW1pbiApIHtcbiAgLmhpZGUtbGcge1xuICAgIGRpc3BsYXk6IG5vbmU7XG4gIH1cbiAgLnNob3cteHMsXG4gIC5zaG93LXNtLFxuICAuc2hvdy1tZCB7XG4gICAgZGlzcGxheTogbm9uZTtcbiAgfVxufVxuIiwiLmJ0bixcbi5uYXZiYXIgLmJ0biB7XG4gIGZvbnQtd2VpZ2h0OiA1MDA7XG4gIGJvcmRlci1yYWRpdXM6IDRweDtcbiAgbGluZS1oZWlnaHQ6IDEuNGVtO1xuICBwYWRkaW5nOiAxNHB4IDMzcHggMTRweDtcbiAgbWFyZ2luLXJpZ2h0OiAxMHB4O1xuICB0cmFuc2l0aW9uOiBhbGwgLjNzIGVhc2U7XG4gIGZvbnQtc2l6ZTogMThweDtcbiAgYm9yZGVyOiAwcHggc29saWQgcmdiYSgwLCAwLCAwLCAwKTtcbiAgY29sb3I6ICNmZmY7XG4gIGJveC1zaGFkb3c6IDAgMXB4IDNweCByZ2JhKDAsMCwwLC4wOCksIDAgMnB4IDRweCByZ2JhKDAsMCwwLDAuMTIpO1xuICBiYWNrZ3JvdW5kOiAjMzg4MGZmO1xuICBsZXR0ZXItc3BhY2luZzogLTAuMDFlbTtcblxuICAmOmxhc3QtY2hpbGQge1xuICAgIG1hcmdpbi1yaWdodDogMDtcbiAgfVxuXG4gICY6aG92ZXIsXG4gICY6Zm9jdXMge1xuICAgIGJveC1zaGFkb3c6IDAgN3B4IDE0cHggcmdiYSgwLDAsMCwuMTIpLCAwIDNweCA2cHggcmdiYSgwLDAsMCwuMDgpO1xuICAgIGJhY2tncm91bmQ6ICM0ZDhkZmQ7XG4gICAgY29sb3I6ICNmZmY7XG4gICAgb3V0bGluZTogbm9uZTtcbiAgfVxuXG4gICY6YWN0aXZlLFxuICAmOmFjdGl2ZTpmb2N1cyxcbiAgJjphY3RpdmU6aG92ZXIge1xuICAgIGJveC1zaGFkb3c6IGluc2V0IDAgMXB4IDRweCByZ2JhKDAsIDAsIDAsIDAuMik7XG4gICAgYmFja2dyb3VuZDogbGlnaHRlbigkYmx1ZSwgMyk7XG4gICAgb3V0bGluZTogbm9uZTtcbiAgfVxuXG4gICYub3V0bGluZSB7XG4gICAgYm9yZGVyLWNvbG9yOiAkYmx1ZTtcbiAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcbiAgICBjb2xvcjogJGJsdWU7XG4gICAgYm9yZGVyLXdpZHRoOiAxcHg7XG5cbiAgICAmOmhvdmVyLFxuICAgICY6Zm9jdXMge1xuICAgICAgYm9yZGVyLWNvbG9yOiBsaWdodGVuKCRibHVlLCAzKTtcbiAgICAgIGJhY2tncm91bmQ6IHJnYmEoJGJsdWUsIC4wNSk7XG4gICAgfVxuXG4gICAgJi5mYWRlZCB7XG4gICAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDU0LCA3NCwgMTEwLCAwLjUpO1xuICAgICAgY29sb3I6ICNBMUFCQkM7XG5cbiAgICAgICY6aG92ZXIsXG4gICAgICAmOmZvY3VzIHtcbiAgICAgICAgY29sb3I6IHdoaXRlO1xuICAgICAgICBib3JkZXItY29sb3I6IGxpZ2h0ZW4oI0ExQUJCQywgMyk7XG4gICAgICAgIGJhY2tncm91bmQ6IHJnYmEoI0ExQUJCQywgLjA1KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAmLmJ0bi1wcmltYXJ5LFxuICAmLmxpZ2h0LWJsdWUge1xuICAgIGJhY2tncm91bmQ6ICRsaWdodC1ibHVlO1xuXG4gICAgJjpob3ZlcixcbiAgICAmOmZvY3VzLFxuICAgICY6YWN0aXZlIHtcbiAgICAgIGJhY2tncm91bmQ6IGxpZ2h0ZW4oJGxpZ2h0LWJsdWUsIDMpO1xuICAgIH1cblxuICAgICYub3V0bGluZSB7XG4gICAgICBib3JkZXItY29sb3I6ICRsaWdodC1ibHVlO1xuICAgICAgY29sb3I6ICRsaWdodC1ibHVlO1xuICAgIH1cbiAgfVxuXG4gICYucmVkIHtcbiAgICBiYWNrZ3JvdW5kOiAkcmVkO1xuXG4gICAgJjpob3ZlcixcbiAgICAmOmZvY3VzLFxuICAgICY6YWN0aXZlIHtcbiAgICAgIGJhY2tncm91bmQ6ICNGRjYxNzc7XG4gICAgfVxuICB9XG5cbiAgJi5saWdodCB7XG4gICAgYmFja2dyb3VuZDogI0YwRjZGRjtcbiAgICBjb2xvcjogJGJsdWU7XG5cbiAgICAmOmhvdmVyLFxuICAgICY6Zm9jdXMsXG4gICAgJjphY3RpdmUge1xuICAgICAgYmFja2dyb3VuZDogZGFya2VuKCNGMEY2RkYsIDIpO1xuICAgIH1cbiAgfVxuXG4gICYubmF2eSB7XG4gICAgYmFja2dyb3VuZDogIzAwMzlhMjtcblxuICAgICY6aG92ZXIsXG4gICAgJjpmb2N1cyxcbiAgICAmOmFjdGl2ZSB7XG4gICAgICBiYWNrZ3JvdW5kOiBkYXJrZW4oIzAwMzlhMiwgMTApO1xuICAgIH1cbiAgfVxuXG4gICYuZ3JlZW4ge1xuICAgIGJhY2tncm91bmQ6ICRncmVlbjtcblxuICAgICY6aG92ZXIsXG4gICAgJjpmb2N1cyxcbiAgICAmOmFjdGl2ZSxcbiAgICAmOmFjdGl2ZTpmb2N1cyxcbiAgICAmOmFjdGl2ZTpob3ZlciAge1xuICAgICAgYmFja2dyb3VuZDogbGlnaHRlbigkZ3JlZW4sIDEwKTtcbiAgICB9XG4gIH1cblxuICAmLndoaXRlIHtcbiAgICBiYWNrZ3JvdW5kOiB3aGl0ZTtcbiAgICAvLyBib3gtc2hhZG93OiAwIDFweCA0cHggcmdiYSgwLCAwLCAwLCAuMSk7XG4gICAgY29sb3I6ICRibHVlO1xuXG4gICAgJjpob3ZlcixcbiAgICAmOmZvY3VzLFxuICAgICY6YWN0aXZlIHtcbiAgICAgIGNvbG9yOiAkYmx1ZTtcbiAgICAgIC8vIGJveC1zaGFkb3c6IDAgMXB4IDRweCByZ2JhKDAsIDAsIDAsIDAuMTUpO1xuICAgICAgY29sb3I6IGxpZ2h0ZW4oJGJsdWUsIDUpO1xuICAgIH1cblxuICAgICY6YWN0aXZlLFxuICAgICY6YWN0aXZlOmZvY3VzLFxuICAgICY6YWN0aXZlOmhvdmVyICB7XG4gICAgICBiYWNrZ3JvdW5kOiB3aGl0ZTtcbiAgICAgIC8vIGJveC1zaGFkb3c6IGluc2V0IDAgMXB4IDRweCByZ2JhKDAsIDAsIDAsIC4yKTtcbiAgICB9XG5cbiAgICAmLm91dGxpbmUge1xuICAgICAgY29sb3I6ICRibHVlO1xuICAgICAgYmFja2dyb3VuZDogd2hpdGU7XG5cbiAgICAgICY6aG92ZXIsXG4gICAgICAmOmZvY3VzLFxuICAgICAgJjphY3RpdmUge1xuICAgICAgICBjb2xvcjogZGFya2VuKCRibHVlLCAxMCk7XG4gICAgICAgIGJhY2tncm91bmQ6IHdoaXRlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gICYuZ3JleSB7XG4gICAgYmFja2dyb3VuZDogJGdyZXk7XG5cbiAgICAmOmhvdmVyLFxuICAgICY6Zm9jdXMsXG4gICAgJjphY3RpdmUge1xuICAgICAgYmFja2dyb3VuZDogJGdyZXk7XG4gICAgfVxuXG4gICAgJi5vdXRsaW5lIHtcbiAgICAgIGNvbG9yOiAkZ3JleTtcbiAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xuXG4gICAgICAmOmhvdmVyLFxuICAgICAgJjpmb2N1cyxcbiAgICAgICY6YWN0aXZlLFxuICAgICAgJjphY3RpdmU6Zm9jdXMsXG4gICAgICAmOmFjdGl2ZTpob3ZlciAge1xuICAgICAgICBjb2xvcjogZGFya2VuKCRncmV5LCAxMCk7XG4gICAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gICYuZGFyayB7XG4gICAgY29sb3I6IHdoaXRlO1xuICB9XG5cbiAgJi5kYXJrLXBpbmsge1xuICAgIGJhY2tncm91bmQ6ICMyMTJmNDU7XG4gICAgLy8gYm94LXNoYWRvdzogMCAxcHggNHB4IHJnYmEoMCwgMCwgMCwgLjEpO1xuICAgIGNvbG9yOiAjZmY1NjdiO1xuXG4gICAgJjpob3ZlcixcbiAgICAmOmZvY3VzLFxuICAgICY6YWN0aXZlLFxuICAgICY6YWN0aXZlOmZvY3VzLFxuICAgICY6YWN0aXZlOmhvdmVyICB7XG4gICAgICBjb2xvcjogI2ZmNTY3YjtcbiAgICAgIGJhY2tncm91bmQ6IGxpZ2h0ZW4oIzIxMmY0NSwgNSlcbiAgICB9XG4gIH1cblxuICAmLm9yYW5nZSB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogI2ZmYTgwMDtcblxuICAgICY6aG92ZXIge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2ZlYjMyMztcbiAgICB9XG4gIH1cblxuICAmLnNtIHtcbiAgICBmb250LXdlaWdodDogNjAwO1xuICAgIGJvcmRlci1yYWRpdXM6IDZweDtcbiAgICBsZXR0ZXItc3BhY2luZzogMDtcbiAgICB0ZXh0LXRyYW5zZm9ybTogbm9uZTtcbiAgICBwYWRkaW5nOiAxMnB4IDE5cHggMTBweDtcbiAgfVxuXG4gICYucm91bmRlZCB7XG4gICAgYm9yZGVyLXJhZGl1czogMi41ZW07XG4gICAgbGV0dGVyLXNwYWNpbmc6IDA7XG4gICAgdGV4dC10cmFuc2Zvcm06IG5vbmU7XG4gICAgZm9udC13ZWlnaHQ6IDUwMDtcbiAgICBmb250LXNpemU6IDE2cHg7XG4gICAgcGFkZGluZzogMTlweCAyNXB4IDE4cHg7XG4gICAgbGluZS1oZWlnaHQ6IDFlbTtcblxuICAgICYuc20ge1xuICAgICAgcGFkZGluZzogMTRweCAyNHB4IDE0cHg7XG4gICAgICBmb250LXNpemU6IDE0cHg7XG4gICAgICBmb250LXdlaWdodDogNjAwO1xuICAgIH1cbiAgfVxuXG4gICYudXBwZXJjYXNlIHtcbiAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xuICB9XG5cbiAgJi5taWNybyB7XG4gICAgZm9udC1mYW1pbHk6ICRmb250LWZhbWlseS1laW5hO1xuICAgIHBhZGRpbmc6IDRweCA4cHg7XG4gICAgZm9udC1zaXplOiAxMHB4O1xuICAgIGxldHRlci1zcGFjaW5nOiAwO1xuICAgIGZvbnQtd2VpZ2h0OiA3MDA7XG4gICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcbiAgICBiYWNrZ3JvdW5kOiAjZmZmO1xuICAgIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoIzM4ODBmZiwgMC4zKTtcbiAgICBjb2xvcjogIzM4ODBmZjtcbiAgICBib3gtc2hhZG93OiBub25lO1xuXG4gICAgJjpob3ZlciB7XG4gICAgICBib3JkZXItY29sb3I6ICMzODgwZmY7XG4gICAgfVxuXG4gICAgJjphY3RpdmUsXG4gICAgJjphY3RpdmU6Zm9jdXMsXG4gICAgJjphY3RpdmU6aG92ZXIgIHtcbiAgICAgIGJhY2tncm91bmQ6ICNmMmY4ZmY7XG4gICAgICBib3JkZXItY29sb3I6IGxpZ2h0ZW4oIzM4ODBmZiwgMTUlKTtcbiAgICAgIGJveC1zaGFkb3c6IGluc2V0IDAgMXB4IDRweCByZ2JhKDAsIDAsIDAsIDAuMSk7XG4gICAgfVxuXG4gIH1cbn1cbiIsIi5kcmFnZ2FibGUge1xuICBoZWlnaHQ6IDM0NXB4O1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG5cbiAgLmNvZGUsXG4gIC5hcHAge1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICB0b3A6IDA7XG4gICAgcmlnaHQ6IDA7XG4gICAgYm90dG9tOiAwO1xuICAgIGxlZnQ6IDA7XG4gICAgYmFja2dyb3VuZDogd2hpdGU7XG4gICAgYm9yZGVyLXJhZGl1czogOHB4O1xuICB9XG5cbiAgLmFwcCB7XG4gICAgcmlnaHQ6IDA7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgcGFkZGluZzogOXB4IDAgMCA5cHg7XG4gICAgYmFja2dyb3VuZDogd2hpdGUgdXJsKCcvaW1nL2hvbWUvaW9zLWxpc3QtZGVzaWduLnBuZycpIG5vLXJlcGVhdCAwIGJvdHRvbTtcbiAgICBiYWNrZ3JvdW5kLXNpemU6IDU0MHB4O1xuICB9XG5cbiAgLmNvZGUge1xuICAgIGNvZGUge1xuICAgICAgcGFkZGluZzogMDtcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgIHRvcDogMDtcbiAgICAgIGJvdHRvbTogMDtcbiAgICAgIHJpZ2h0OiAwO1xuICAgICAgbGVmdDogMDtcbiAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xuICAgICAgcGFkZGluZy10b3A6IDE1cHg7XG4gICAgfVxuXG4gICAgcHJlIHtcbiAgICAgIGZvbnQtZmFtaWx5OiBtb25vc3BhY2U7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xuICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgdG9wOiAwO1xuICAgICAgcmlnaHQ6IDA7XG4gICAgICBsZWZ0OiAwO1xuICAgICAgYm90dG9tOiAwO1xuICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICAgIGxpbmUtaGVpZ2h0OiAwZW07XG4gICAgICBjb3VudGVyLXJlc2V0OiBsaW5lO1xuICAgICAgd2hpdGUtc3BhY2U6IHByZS13cmFwO1xuICAgICAgcGFkZGluZzogMDtcbiAgICAgIGJvcmRlcjogMDtcbiAgICAgIG1hcmdpbjogMDtcblxuICAgICAgJjo6YmVmb3JlIHtcbiAgICAgICAgYmFja2dyb3VuZDogI2YzZjdmZjtcbiAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICB0b3A6IDA7XG4gICAgICAgIGJvdHRvbTogMDtcbiAgICAgICAgbGVmdDogMDtcbiAgICAgICAgd2lkdGg6IDQwcHg7XG4gICAgICAgIGNvbnRlbnQ6ICcnO1xuICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgIH1cblxuICAgICAgc3Bhbi5saW5lIHtcbiAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgIHBhZGRpbmc6IDEycHggMCAxMnB4IDU1cHg7XG4gICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcblxuICAgICAgICAmOmJlZm9yZSB7XG4gICAgICAgICAgY291bnRlci1pbmNyZW1lbnQ6IGxpbmU7XG4gICAgICAgICAgY29udGVudDogY291bnRlcihsaW5lKTtcbiAgICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgICAgICBjb2xvcjogIzc5YTVmMTtcbiAgICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgICAgdG9wOiAwO1xuICAgICAgICAgIGxlZnQ6IDA7XG4gICAgICAgICAgYm90dG9tOiAwO1xuICAgICAgICAgIHdpZHRoOiA0MHB4O1xuICAgICAgICAgIHRleHQtYWxpZ246IHJpZ2h0O1xuICAgICAgICAgIHBhZGRpbmctdG9wOiAxMnB4O1xuICAgICAgICAgIHBhZGRpbmctcmlnaHQ6IDhweDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC50b2dnbGUge1xuICAgIHdpZHRoOiA0cHg7XG4gICAgdG9wOiAwICFpbXBvcnRhbnQ7XG4gICAgYm90dG9tOiAwO1xuICAgIHJpZ2h0OiAwO1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICBib3gtc2hhZG93OiAwIDAgMThweCByZ2JhKDAsMCwwLC4xKSwwIDAgNHB4IHJnYmEoMCwwLDAsLjA2KTtcbiAgICBiYWNrZ3JvdW5kOiB3aGl0ZTtcbiAgICB6LWluZGV4OiAzO1xuICAgIGN1cnNvcjogZ3JhYjtcblxuICAgICY6OmFmdGVyIHtcbiAgICAgIGJhY2tncm91bmQ6IHVybCgnL2ltZy9ob21lL2RyYWctYnV0dG9uLnBuZycpIG5vLXJlcGVhdCAwIDA7XG4gICAgICBiYWNrZ3JvdW5kLXNpemU6IDY0cHg7XG4gICAgICB3aWR0aDogNjRweDtcbiAgICAgIGhlaWdodDogNjRweDtcbiAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgY29udGVudDogJyc7XG4gICAgICB0b3A6IGNhbGMoNTAlIC0gNDBweCk7XG4gICAgICBsZWZ0OiAtMjhweDtcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICB9XG4gIH1cbn1cbiIsIi8qISBqUXVlcnkgVUkgLSB2MS4xMi4xIC0gMjAxNi0xMS0xNFxuKiBodHRwOi8vanF1ZXJ5dWkuY29tXG4qIEluY2x1ZGVzOiBkcmFnZ2FibGUuY3NzLCB0aGVtZS5jc3NcbiogVG8gdmlldyBhbmQgbW9kaWZ5IHRoaXMgdGhlbWUsIHZpc2l0IGh0dHA6Ly9qcXVlcnl1aS5jb20vdGhlbWVyb2xsZXIvP3Njb3BlPSZmb2xkZXJOYW1lPWJhc2UmY29ybmVyUmFkaXVzU2hhZG93PThweCZvZmZzZXRMZWZ0U2hhZG93PTBweCZvZmZzZXRUb3BTaGFkb3c9MHB4JnRoaWNrbmVzc1NoYWRvdz01cHgmb3BhY2l0eVNoYWRvdz0zMCZiZ0ltZ09wYWNpdHlTaGFkb3c9MCZiZ1RleHR1cmVTaGFkb3c9ZmxhdCZiZ0NvbG9yU2hhZG93PTY2NjY2NiZvcGFjaXR5T3ZlcmxheT0zMCZiZ0ltZ09wYWNpdHlPdmVybGF5PTAmYmdUZXh0dXJlT3ZlcmxheT1mbGF0JmJnQ29sb3JPdmVybGF5PWFhYWFhYSZpY29uQ29sb3JFcnJvcj1jYzAwMDAmZmNFcnJvcj01ZjNmM2YmYm9yZGVyQ29sb3JFcnJvcj1mMWE4OTkmYmdUZXh0dXJlRXJyb3I9ZmxhdCZiZ0NvbG9yRXJyb3I9ZmRkZmRmJmljb25Db2xvckhpZ2hsaWdodD03Nzc2MjAmZmNIaWdobGlnaHQ9Nzc3NjIwJmJvcmRlckNvbG9ySGlnaGxpZ2h0PWRhZDU1ZSZiZ1RleHR1cmVIaWdobGlnaHQ9ZmxhdCZiZ0NvbG9ySGlnaGxpZ2h0PWZmZmE5MCZpY29uQ29sb3JBY3RpdmU9ZmZmZmZmJmZjQWN0aXZlPWZmZmZmZiZib3JkZXJDb2xvckFjdGl2ZT0wMDNlZmYmYmdUZXh0dXJlQWN0aXZlPWZsYXQmYmdDb2xvckFjdGl2ZT0wMDdmZmYmaWNvbkNvbG9ySG92ZXI9NTU1NTU1JmZjSG92ZXI9MmIyYjJiJmJvcmRlckNvbG9ySG92ZXI9Y2NjY2NjJmJnVGV4dHVyZUhvdmVyPWZsYXQmYmdDb2xvckhvdmVyPWVkZWRlZCZpY29uQ29sb3JEZWZhdWx0PTc3Nzc3NyZmY0RlZmF1bHQ9NDU0NTQ1JmJvcmRlckNvbG9yRGVmYXVsdD1jNWM1YzUmYmdUZXh0dXJlRGVmYXVsdD1mbGF0JmJnQ29sb3JEZWZhdWx0PWY2ZjZmNiZpY29uQ29sb3JDb250ZW50PTQ0NDQ0NCZmY0NvbnRlbnQ9MzMzMzMzJmJvcmRlckNvbG9yQ29udGVudD1kZGRkZGQmYmdUZXh0dXJlQ29udGVudD1mbGF0JmJnQ29sb3JDb250ZW50PWZmZmZmZiZpY29uQ29sb3JIZWFkZXI9NDQ0NDQ0JmZjSGVhZGVyPTMzMzMzMyZib3JkZXJDb2xvckhlYWRlcj1kZGRkZGQmYmdUZXh0dXJlSGVhZGVyPWZsYXQmYmdDb2xvckhlYWRlcj1lOWU5ZTkmY29ybmVyUmFkaXVzPTNweCZmd0RlZmF1bHQ9bm9ybWFsJmZzRGVmYXVsdD0xZW0mZmZEZWZhdWx0PUFyaWFsJTJDSGVsdmV0aWNhJTJDc2Fucy1zZXJpZlxuKiBDb3B5cmlnaHQgalF1ZXJ5IEZvdW5kYXRpb24gYW5kIG90aGVyIGNvbnRyaWJ1dG9yczsgTGljZW5zZWQgTUlUICovXG5cbi51aS1kcmFnZ2FibGUtaGFuZGxlIHtcblx0LW1zLXRvdWNoLWFjdGlvbjogbm9uZTtcblx0dG91Y2gtYWN0aW9uOiBub25lO1xufVxuXG4vKiBDb21wb25lbnQgY29udGFpbmVyc1xuLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG4udWktd2lkZ2V0IHtcblx0Zm9udC1mYW1pbHk6IEFyaWFsLEhlbHZldGljYSxzYW5zLXNlcmlmO1xuXHRmb250LXNpemU6IDFlbTtcbn1cbi51aS13aWRnZXQgLnVpLXdpZGdldCB7XG5cdGZvbnQtc2l6ZTogMWVtO1xufVxuLnVpLXdpZGdldCBpbnB1dCxcbi51aS13aWRnZXQgc2VsZWN0LFxuLnVpLXdpZGdldCB0ZXh0YXJlYSxcbi51aS13aWRnZXQgYnV0dG9uIHtcblx0Zm9udC1mYW1pbHk6IEFyaWFsLEhlbHZldGljYSxzYW5zLXNlcmlmO1xuXHRmb250LXNpemU6IDFlbTtcbn1cbi51aS13aWRnZXQudWktd2lkZ2V0LWNvbnRlbnQge1xuXHRib3JkZXI6IDFweCBzb2xpZCAjYzVjNWM1O1xufVxuLnVpLXdpZGdldC1jb250ZW50IHtcblx0Ym9yZGVyOiAxcHggc29saWQgI2RkZGRkZDtcblx0YmFja2dyb3VuZDogI2ZmZmZmZjtcblx0Y29sb3I6ICMzMzMzMzM7XG59XG4udWktd2lkZ2V0LWNvbnRlbnQgYSB7XG5cdGNvbG9yOiAjMzMzMzMzO1xufVxuLnVpLXdpZGdldC1oZWFkZXIge1xuXHRib3JkZXI6IDFweCBzb2xpZCAjZGRkZGRkO1xuXHRiYWNrZ3JvdW5kOiAjZTllOWU5O1xuXHRjb2xvcjogIzMzMzMzMztcblx0Zm9udC13ZWlnaHQ6IGJvbGQ7XG59XG4udWktd2lkZ2V0LWhlYWRlciBhIHtcblx0Y29sb3I6ICMzMzMzMzM7XG59XG5cbi8qIEludGVyYWN0aW9uIHN0YXRlc1xuLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG4udWktc3RhdGUtZGVmYXVsdCxcbi51aS13aWRnZXQtY29udGVudCAudWktc3RhdGUtZGVmYXVsdCxcbi51aS13aWRnZXQtaGVhZGVyIC51aS1zdGF0ZS1kZWZhdWx0LFxuLnVpLWJ1dHRvbixcblxuLyogV2UgdXNlIGh0bWwgaGVyZSBiZWNhdXNlIHdlIG5lZWQgYSBncmVhdGVyIHNwZWNpZmljaXR5IHRvIG1ha2Ugc3VyZSBkaXNhYmxlZFxud29ya3MgcHJvcGVybHkgd2hlbiBjbGlja2VkIG9yIGhvdmVyZWQgKi9cbmh0bWwgLnVpLWJ1dHRvbi51aS1zdGF0ZS1kaXNhYmxlZDpob3Zlcixcbmh0bWwgLnVpLWJ1dHRvbi51aS1zdGF0ZS1kaXNhYmxlZDphY3RpdmUge1xuXHRib3JkZXI6IDFweCBzb2xpZCAjYzVjNWM1O1xuXHRiYWNrZ3JvdW5kOiAjZjZmNmY2O1xuXHRmb250LXdlaWdodDogbm9ybWFsO1xuXHRjb2xvcjogIzQ1NDU0NTtcbn1cbi51aS1zdGF0ZS1kZWZhdWx0IGEsXG4udWktc3RhdGUtZGVmYXVsdCBhOmxpbmssXG4udWktc3RhdGUtZGVmYXVsdCBhOnZpc2l0ZWQsXG5hLnVpLWJ1dHRvbixcbmE6bGluay51aS1idXR0b24sXG5hOnZpc2l0ZWQudWktYnV0dG9uLFxuLnVpLWJ1dHRvbiB7XG5cdGNvbG9yOiAjNDU0NTQ1O1xuXHR0ZXh0LWRlY29yYXRpb246IG5vbmU7XG59XG4udWktc3RhdGUtaG92ZXIsXG4udWktd2lkZ2V0LWNvbnRlbnQgLnVpLXN0YXRlLWhvdmVyLFxuLnVpLXdpZGdldC1oZWFkZXIgLnVpLXN0YXRlLWhvdmVyLFxuLnVpLXN0YXRlLWZvY3VzLFxuLnVpLXdpZGdldC1jb250ZW50IC51aS1zdGF0ZS1mb2N1cyxcbi51aS13aWRnZXQtaGVhZGVyIC51aS1zdGF0ZS1mb2N1cyxcbi51aS1idXR0b246aG92ZXIsXG4udWktYnV0dG9uOmZvY3VzIHtcblx0Ym9yZGVyOiAxcHggc29saWQgI2NjY2NjYztcblx0YmFja2dyb3VuZDogI2VkZWRlZDtcblx0Zm9udC13ZWlnaHQ6IG5vcm1hbDtcblx0Y29sb3I6ICMyYjJiMmI7XG59XG4udWktc3RhdGUtaG92ZXIgYSxcbi51aS1zdGF0ZS1ob3ZlciBhOmhvdmVyLFxuLnVpLXN0YXRlLWhvdmVyIGE6bGluayxcbi51aS1zdGF0ZS1ob3ZlciBhOnZpc2l0ZWQsXG4udWktc3RhdGUtZm9jdXMgYSxcbi51aS1zdGF0ZS1mb2N1cyBhOmhvdmVyLFxuLnVpLXN0YXRlLWZvY3VzIGE6bGluayxcbi51aS1zdGF0ZS1mb2N1cyBhOnZpc2l0ZWQsXG5hLnVpLWJ1dHRvbjpob3ZlcixcbmEudWktYnV0dG9uOmZvY3VzIHtcblx0Y29sb3I6ICMyYjJiMmI7XG5cdHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbn1cblxuLnVpLXZpc3VhbC1mb2N1cyB7XG5cdGJveC1zaGFkb3c6IDAgMCAzcHggMXB4IHJnYig5NCwgMTU4LCAyMTQpO1xufVxuLnVpLXN0YXRlLWFjdGl2ZSxcbi51aS13aWRnZXQtY29udGVudCAudWktc3RhdGUtYWN0aXZlLFxuLnVpLXdpZGdldC1oZWFkZXIgLnVpLXN0YXRlLWFjdGl2ZSxcbmEudWktYnV0dG9uOmFjdGl2ZSxcbi51aS1idXR0b246YWN0aXZlLFxuLnVpLWJ1dHRvbi51aS1zdGF0ZS1hY3RpdmU6aG92ZXIge1xuXHRib3JkZXI6IDFweCBzb2xpZCAjMDAzZWZmO1xuXHRiYWNrZ3JvdW5kOiAjMDA3ZmZmO1xuXHRmb250LXdlaWdodDogbm9ybWFsO1xuXHRjb2xvcjogI2ZmZmZmZjtcbn1cbi51aS1pY29uLWJhY2tncm91bmQsXG4udWktc3RhdGUtYWN0aXZlIC51aS1pY29uLWJhY2tncm91bmQge1xuXHRib3JkZXI6ICMwMDNlZmY7XG5cdGJhY2tncm91bmQtY29sb3I6ICNmZmZmZmY7XG59XG4udWktc3RhdGUtYWN0aXZlIGEsXG4udWktc3RhdGUtYWN0aXZlIGE6bGluayxcbi51aS1zdGF0ZS1hY3RpdmUgYTp2aXNpdGVkIHtcblx0Y29sb3I6ICNmZmZmZmY7XG5cdHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbn1cblxuLyogSW50ZXJhY3Rpb24gQ3Vlc1xuLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG4udWktc3RhdGUtaGlnaGxpZ2h0LFxuLnVpLXdpZGdldC1jb250ZW50IC51aS1zdGF0ZS1oaWdobGlnaHQsXG4udWktd2lkZ2V0LWhlYWRlciAudWktc3RhdGUtaGlnaGxpZ2h0IHtcblx0Ym9yZGVyOiAxcHggc29saWQgI2RhZDU1ZTtcblx0YmFja2dyb3VuZDogI2ZmZmE5MDtcblx0Y29sb3I6ICM3Nzc2MjA7XG59XG4udWktc3RhdGUtY2hlY2tlZCB7XG5cdGJvcmRlcjogMXB4IHNvbGlkICNkYWQ1NWU7XG5cdGJhY2tncm91bmQ6ICNmZmZhOTA7XG59XG4udWktc3RhdGUtaGlnaGxpZ2h0IGEsXG4udWktd2lkZ2V0LWNvbnRlbnQgLnVpLXN0YXRlLWhpZ2hsaWdodCBhLFxuLnVpLXdpZGdldC1oZWFkZXIgLnVpLXN0YXRlLWhpZ2hsaWdodCBhIHtcblx0Y29sb3I6ICM3Nzc2MjA7XG59XG4udWktc3RhdGUtZXJyb3IsXG4udWktd2lkZ2V0LWNvbnRlbnQgLnVpLXN0YXRlLWVycm9yLFxuLnVpLXdpZGdldC1oZWFkZXIgLnVpLXN0YXRlLWVycm9yIHtcblx0Ym9yZGVyOiAxcHggc29saWQgI2YxYTg5OTtcblx0YmFja2dyb3VuZDogI2ZkZGZkZjtcblx0Y29sb3I6ICM1ZjNmM2Y7XG59XG4udWktc3RhdGUtZXJyb3IgYSxcbi51aS13aWRnZXQtY29udGVudCAudWktc3RhdGUtZXJyb3IgYSxcbi51aS13aWRnZXQtaGVhZGVyIC51aS1zdGF0ZS1lcnJvciBhIHtcblx0Y29sb3I6ICM1ZjNmM2Y7XG59XG4udWktc3RhdGUtZXJyb3ItdGV4dCxcbi51aS13aWRnZXQtY29udGVudCAudWktc3RhdGUtZXJyb3ItdGV4dCxcbi51aS13aWRnZXQtaGVhZGVyIC51aS1zdGF0ZS1lcnJvci10ZXh0IHtcblx0Y29sb3I6ICM1ZjNmM2Y7XG59XG4udWktcHJpb3JpdHktcHJpbWFyeSxcbi51aS13aWRnZXQtY29udGVudCAudWktcHJpb3JpdHktcHJpbWFyeSxcbi51aS13aWRnZXQtaGVhZGVyIC51aS1wcmlvcml0eS1wcmltYXJ5IHtcblx0Zm9udC13ZWlnaHQ6IGJvbGQ7XG59XG4udWktcHJpb3JpdHktc2Vjb25kYXJ5LFxuLnVpLXdpZGdldC1jb250ZW50IC51aS1wcmlvcml0eS1zZWNvbmRhcnksXG4udWktd2lkZ2V0LWhlYWRlciAudWktcHJpb3JpdHktc2Vjb25kYXJ5IHtcblx0b3BhY2l0eTogLjc7XG5cdGZpbHRlcjpBbHBoYShPcGFjaXR5PTcwKTsgLyogc3VwcG9ydDogSUU4ICovXG5cdGZvbnQtd2VpZ2h0OiBub3JtYWw7XG59XG4udWktc3RhdGUtZGlzYWJsZWQsXG4udWktd2lkZ2V0LWNvbnRlbnQgLnVpLXN0YXRlLWRpc2FibGVkLFxuLnVpLXdpZGdldC1oZWFkZXIgLnVpLXN0YXRlLWRpc2FibGVkIHtcblx0b3BhY2l0eTogLjM1O1xuXHRmaWx0ZXI6QWxwaGEoT3BhY2l0eT0zNSk7IC8qIHN1cHBvcnQ6IElFOCAqL1xuXHRiYWNrZ3JvdW5kLWltYWdlOiBub25lO1xufVxuLnVpLXN0YXRlLWRpc2FibGVkIC51aS1pY29uIHtcblx0ZmlsdGVyOkFscGhhKE9wYWNpdHk9MzUpOyAvKiBzdXBwb3J0OiBJRTggLSBTZWUgIzYwNTkgKi9cbn1cblxuLyogSWNvbnNcbi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG4vKiBzdGF0ZXMgYW5kIGltYWdlcyAqL1xuLnVpLWljb24ge1xuXHR3aWR0aDogMTZweDtcblx0aGVpZ2h0OiAxNnB4O1xufVxuLnVpLWljb24sXG4udWktd2lkZ2V0LWNvbnRlbnQgLnVpLWljb24ge1xuXHRiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXCJpbWFnZXMvdWktaWNvbnNfNDQ0NDQ0XzI1NngyNDAucG5nXCIpO1xufVxuLnVpLXdpZGdldC1oZWFkZXIgLnVpLWljb24ge1xuXHRiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXCJpbWFnZXMvdWktaWNvbnNfNDQ0NDQ0XzI1NngyNDAucG5nXCIpO1xufVxuLnVpLXN0YXRlLWhvdmVyIC51aS1pY29uLFxuLnVpLXN0YXRlLWZvY3VzIC51aS1pY29uLFxuLnVpLWJ1dHRvbjpob3ZlciAudWktaWNvbixcbi51aS1idXR0b246Zm9jdXMgLnVpLWljb24ge1xuXHRiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXCJpbWFnZXMvdWktaWNvbnNfNTU1NTU1XzI1NngyNDAucG5nXCIpO1xufVxuLnVpLXN0YXRlLWFjdGl2ZSAudWktaWNvbixcbi51aS1idXR0b246YWN0aXZlIC51aS1pY29uIHtcblx0YmFja2dyb3VuZC1pbWFnZTogdXJsKFwiaW1hZ2VzL3VpLWljb25zX2ZmZmZmZl8yNTZ4MjQwLnBuZ1wiKTtcbn1cbi51aS1zdGF0ZS1oaWdobGlnaHQgLnVpLWljb24sXG4udWktYnV0dG9uIC51aS1zdGF0ZS1oaWdobGlnaHQudWktaWNvbiB7XG5cdGJhY2tncm91bmQtaW1hZ2U6IHVybChcImltYWdlcy91aS1pY29uc183Nzc2MjBfMjU2eDI0MC5wbmdcIik7XG59XG4udWktc3RhdGUtZXJyb3IgLnVpLWljb24sXG4udWktc3RhdGUtZXJyb3ItdGV4dCAudWktaWNvbiB7XG5cdGJhY2tncm91bmQtaW1hZ2U6IHVybChcImltYWdlcy91aS1pY29uc19jYzAwMDBfMjU2eDI0MC5wbmdcIik7XG59XG4udWktYnV0dG9uIC51aS1pY29uIHtcblx0YmFja2dyb3VuZC1pbWFnZTogdXJsKFwiaW1hZ2VzL3VpLWljb25zXzc3Nzc3N18yNTZ4MjQwLnBuZ1wiKTtcbn1cblxuLyogcG9zaXRpb25pbmcgKi9cbi51aS1pY29uLWJsYW5rIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogMTZweCAxNnB4OyB9XG4udWktaWNvbi1jYXJldC0xLW4geyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwIDA7IH1cbi51aS1pY29uLWNhcmV0LTEtbmUgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTZweCAwOyB9XG4udWktaWNvbi1jYXJldC0xLWUgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMzJweCAwOyB9XG4udWktaWNvbi1jYXJldC0xLXNlIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTQ4cHggMDsgfVxuLnVpLWljb24tY2FyZXQtMS1zIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTY1cHggMDsgfVxuLnVpLWljb24tY2FyZXQtMS1zdyB7IGJhY2tncm91bmQtcG9zaXRpb246IC04MHB4IDA7IH1cbi51aS1pY29uLWNhcmV0LTEtdyB7IGJhY2tncm91bmQtcG9zaXRpb246IC05NnB4IDA7IH1cbi51aS1pY29uLWNhcmV0LTEtbncgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTEycHggMDsgfVxuLnVpLWljb24tY2FyZXQtMi1uLXMgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTI4cHggMDsgfVxuLnVpLWljb24tY2FyZXQtMi1lLXcgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTQ0cHggMDsgfVxuLnVpLWljb24tdHJpYW5nbGUtMS1uIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogMCAtMTZweDsgfVxuLnVpLWljb24tdHJpYW5nbGUtMS1uZSB7IGJhY2tncm91bmQtcG9zaXRpb246IC0xNnB4IC0xNnB4OyB9XG4udWktaWNvbi10cmlhbmdsZS0xLWUgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMzJweCAtMTZweDsgfVxuLnVpLWljb24tdHJpYW5nbGUtMS1zZSB7IGJhY2tncm91bmQtcG9zaXRpb246IC00OHB4IC0xNnB4OyB9XG4udWktaWNvbi10cmlhbmdsZS0xLXMgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtNjVweCAtMTZweDsgfVxuLnVpLWljb24tdHJpYW5nbGUtMS1zdyB7IGJhY2tncm91bmQtcG9zaXRpb246IC04MHB4IC0xNnB4OyB9XG4udWktaWNvbi10cmlhbmdsZS0xLXcgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtOTZweCAtMTZweDsgfVxuLnVpLWljb24tdHJpYW5nbGUtMS1udyB7IGJhY2tncm91bmQtcG9zaXRpb246IC0xMTJweCAtMTZweDsgfVxuLnVpLWljb24tdHJpYW5nbGUtMi1uLXMgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTI4cHggLTE2cHg7IH1cbi51aS1pY29uLXRyaWFuZ2xlLTItZS13IHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTE0NHB4IC0xNnB4OyB9XG4udWktaWNvbi1hcnJvdy0xLW4geyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwIC0zMnB4OyB9XG4udWktaWNvbi1hcnJvdy0xLW5lIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTE2cHggLTMycHg7IH1cbi51aS1pY29uLWFycm93LTEtZSB7IGJhY2tncm91bmQtcG9zaXRpb246IC0zMnB4IC0zMnB4OyB9XG4udWktaWNvbi1hcnJvdy0xLXNlIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTQ4cHggLTMycHg7IH1cbi51aS1pY29uLWFycm93LTEtcyB7IGJhY2tncm91bmQtcG9zaXRpb246IC02NXB4IC0zMnB4OyB9XG4udWktaWNvbi1hcnJvdy0xLXN3IHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTgwcHggLTMycHg7IH1cbi51aS1pY29uLWFycm93LTEtdyB7IGJhY2tncm91bmQtcG9zaXRpb246IC05NnB4IC0zMnB4OyB9XG4udWktaWNvbi1hcnJvdy0xLW53IHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTExMnB4IC0zMnB4OyB9XG4udWktaWNvbi1hcnJvdy0yLW4tcyB7IGJhY2tncm91bmQtcG9zaXRpb246IC0xMjhweCAtMzJweDsgfVxuLnVpLWljb24tYXJyb3ctMi1uZS1zdyB7IGJhY2tncm91bmQtcG9zaXRpb246IC0xNDRweCAtMzJweDsgfVxuLnVpLWljb24tYXJyb3ctMi1lLXcgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTYwcHggLTMycHg7IH1cbi51aS1pY29uLWFycm93LTItc2UtbncgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTc2cHggLTMycHg7IH1cbi51aS1pY29uLWFycm93c3RvcC0xLW4geyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTkycHggLTMycHg7IH1cbi51aS1pY29uLWFycm93c3RvcC0xLWUgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMjA4cHggLTMycHg7IH1cbi51aS1pY29uLWFycm93c3RvcC0xLXMgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMjI0cHggLTMycHg7IH1cbi51aS1pY29uLWFycm93c3RvcC0xLXcgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMjQwcHggLTMycHg7IH1cbi51aS1pY29uLWFycm93dGhpY2stMS1uIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogMXB4IC00OHB4OyB9XG4udWktaWNvbi1hcnJvd3RoaWNrLTEtbmUgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTZweCAtNDhweDsgfVxuLnVpLWljb24tYXJyb3d0aGljay0xLWUgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMzJweCAtNDhweDsgfVxuLnVpLWljb24tYXJyb3d0aGljay0xLXNlIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTQ4cHggLTQ4cHg7IH1cbi51aS1pY29uLWFycm93dGhpY2stMS1zIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTY0cHggLTQ4cHg7IH1cbi51aS1pY29uLWFycm93dGhpY2stMS1zdyB7IGJhY2tncm91bmQtcG9zaXRpb246IC04MHB4IC00OHB4OyB9XG4udWktaWNvbi1hcnJvd3RoaWNrLTEtdyB7IGJhY2tncm91bmQtcG9zaXRpb246IC05NnB4IC00OHB4OyB9XG4udWktaWNvbi1hcnJvd3RoaWNrLTEtbncgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTEycHggLTQ4cHg7IH1cbi51aS1pY29uLWFycm93dGhpY2stMi1uLXMgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTI4cHggLTQ4cHg7IH1cbi51aS1pY29uLWFycm93dGhpY2stMi1uZS1zdyB7IGJhY2tncm91bmQtcG9zaXRpb246IC0xNDRweCAtNDhweDsgfVxuLnVpLWljb24tYXJyb3d0aGljay0yLWUtdyB7IGJhY2tncm91bmQtcG9zaXRpb246IC0xNjBweCAtNDhweDsgfVxuLnVpLWljb24tYXJyb3d0aGljay0yLXNlLW53IHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTE3NnB4IC00OHB4OyB9XG4udWktaWNvbi1hcnJvd3RoaWNrc3RvcC0xLW4geyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTkycHggLTQ4cHg7IH1cbi51aS1pY29uLWFycm93dGhpY2tzdG9wLTEtZSB7IGJhY2tncm91bmQtcG9zaXRpb246IC0yMDhweCAtNDhweDsgfVxuLnVpLWljb24tYXJyb3d0aGlja3N0b3AtMS1zIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTIyNHB4IC00OHB4OyB9XG4udWktaWNvbi1hcnJvd3RoaWNrc3RvcC0xLXcgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMjQwcHggLTQ4cHg7IH1cbi51aS1pY29uLWFycm93cmV0dXJudGhpY2stMS13IHsgYmFja2dyb3VuZC1wb3NpdGlvbjogMCAtNjRweDsgfVxuLnVpLWljb24tYXJyb3dyZXR1cm50aGljay0xLW4geyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTZweCAtNjRweDsgfVxuLnVpLWljb24tYXJyb3dyZXR1cm50aGljay0xLWUgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMzJweCAtNjRweDsgfVxuLnVpLWljb24tYXJyb3dyZXR1cm50aGljay0xLXMgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtNDhweCAtNjRweDsgfVxuLnVpLWljb24tYXJyb3dyZXR1cm4tMS13IHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTY0cHggLTY0cHg7IH1cbi51aS1pY29uLWFycm93cmV0dXJuLTEtbiB7IGJhY2tncm91bmQtcG9zaXRpb246IC04MHB4IC02NHB4OyB9XG4udWktaWNvbi1hcnJvd3JldHVybi0xLWUgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtOTZweCAtNjRweDsgfVxuLnVpLWljb24tYXJyb3dyZXR1cm4tMS1zIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTExMnB4IC02NHB4OyB9XG4udWktaWNvbi1hcnJvd3JlZnJlc2gtMS13IHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTEyOHB4IC02NHB4OyB9XG4udWktaWNvbi1hcnJvd3JlZnJlc2gtMS1uIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTE0NHB4IC02NHB4OyB9XG4udWktaWNvbi1hcnJvd3JlZnJlc2gtMS1lIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTE2MHB4IC02NHB4OyB9XG4udWktaWNvbi1hcnJvd3JlZnJlc2gtMS1zIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTE3NnB4IC02NHB4OyB9XG4udWktaWNvbi1hcnJvdy00IHsgYmFja2dyb3VuZC1wb3NpdGlvbjogMCAtODBweDsgfVxuLnVpLWljb24tYXJyb3ctNC1kaWFnIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTE2cHggLTgwcHg7IH1cbi51aS1pY29uLWV4dGxpbmsgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMzJweCAtODBweDsgfVxuLnVpLWljb24tbmV3d2luIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTQ4cHggLTgwcHg7IH1cbi51aS1pY29uLXJlZnJlc2ggeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtNjRweCAtODBweDsgfVxuLnVpLWljb24tc2h1ZmZsZSB7IGJhY2tncm91bmQtcG9zaXRpb246IC04MHB4IC04MHB4OyB9XG4udWktaWNvbi10cmFuc2Zlci1lLXcgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtOTZweCAtODBweDsgfVxuLnVpLWljb24tdHJhbnNmZXJ0aGljay1lLXcgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTEycHggLTgwcHg7IH1cbi51aS1pY29uLWZvbGRlci1jb2xsYXBzZWQgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwIC05NnB4OyB9XG4udWktaWNvbi1mb2xkZXItb3BlbiB7IGJhY2tncm91bmQtcG9zaXRpb246IC0xNnB4IC05NnB4OyB9XG4udWktaWNvbi1kb2N1bWVudCB7IGJhY2tncm91bmQtcG9zaXRpb246IC0zMnB4IC05NnB4OyB9XG4udWktaWNvbi1kb2N1bWVudC1iIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTQ4cHggLTk2cHg7IH1cbi51aS1pY29uLW5vdGUgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtNjRweCAtOTZweDsgfVxuLnVpLWljb24tbWFpbC1jbG9zZWQgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtODBweCAtOTZweDsgfVxuLnVpLWljb24tbWFpbC1vcGVuIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTk2cHggLTk2cHg7IH1cbi51aS1pY29uLXN1aXRjYXNlIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTExMnB4IC05NnB4OyB9XG4udWktaWNvbi1jb21tZW50IHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTEyOHB4IC05NnB4OyB9XG4udWktaWNvbi1wZXJzb24geyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTQ0cHggLTk2cHg7IH1cbi51aS1pY29uLXByaW50IHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTE2MHB4IC05NnB4OyB9XG4udWktaWNvbi10cmFzaCB7IGJhY2tncm91bmQtcG9zaXRpb246IC0xNzZweCAtOTZweDsgfVxuLnVpLWljb24tbG9ja2VkIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTE5MnB4IC05NnB4OyB9XG4udWktaWNvbi11bmxvY2tlZCB7IGJhY2tncm91bmQtcG9zaXRpb246IC0yMDhweCAtOTZweDsgfVxuLnVpLWljb24tYm9va21hcmsgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMjI0cHggLTk2cHg7IH1cbi51aS1pY29uLXRhZyB7IGJhY2tncm91bmQtcG9zaXRpb246IC0yNDBweCAtOTZweDsgfVxuLnVpLWljb24taG9tZSB7IGJhY2tncm91bmQtcG9zaXRpb246IDAgLTExMnB4OyB9XG4udWktaWNvbi1mbGFnIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTE2cHggLTExMnB4OyB9XG4udWktaWNvbi1jYWxlbmRhciB7IGJhY2tncm91bmQtcG9zaXRpb246IC0zMnB4IC0xMTJweDsgfVxuLnVpLWljb24tY2FydCB7IGJhY2tncm91bmQtcG9zaXRpb246IC00OHB4IC0xMTJweDsgfVxuLnVpLWljb24tcGVuY2lsIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTY0cHggLTExMnB4OyB9XG4udWktaWNvbi1jbG9jayB7IGJhY2tncm91bmQtcG9zaXRpb246IC04MHB4IC0xMTJweDsgfVxuLnVpLWljb24tZGlzayB7IGJhY2tncm91bmQtcG9zaXRpb246IC05NnB4IC0xMTJweDsgfVxuLnVpLWljb24tY2FsY3VsYXRvciB7IGJhY2tncm91bmQtcG9zaXRpb246IC0xMTJweCAtMTEycHg7IH1cbi51aS1pY29uLXpvb21pbiB7IGJhY2tncm91bmQtcG9zaXRpb246IC0xMjhweCAtMTEycHg7IH1cbi51aS1pY29uLXpvb21vdXQgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTQ0cHggLTExMnB4OyB9XG4udWktaWNvbi1zZWFyY2ggeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTYwcHggLTExMnB4OyB9XG4udWktaWNvbi13cmVuY2ggeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTc2cHggLTExMnB4OyB9XG4udWktaWNvbi1nZWFyIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTE5MnB4IC0xMTJweDsgfVxuLnVpLWljb24taGVhcnQgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMjA4cHggLTExMnB4OyB9XG4udWktaWNvbi1zdGFyIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTIyNHB4IC0xMTJweDsgfVxuLnVpLWljb24tbGluayB7IGJhY2tncm91bmQtcG9zaXRpb246IC0yNDBweCAtMTEycHg7IH1cbi51aS1pY29uLWNhbmNlbCB7IGJhY2tncm91bmQtcG9zaXRpb246IDAgLTEyOHB4OyB9XG4udWktaWNvbi1wbHVzIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTE2cHggLTEyOHB4OyB9XG4udWktaWNvbi1wbHVzdGhpY2sgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMzJweCAtMTI4cHg7IH1cbi51aS1pY29uLW1pbnVzIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTQ4cHggLTEyOHB4OyB9XG4udWktaWNvbi1taW51c3RoaWNrIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTY0cHggLTEyOHB4OyB9XG4udWktaWNvbi1jbG9zZSB7IGJhY2tncm91bmQtcG9zaXRpb246IC04MHB4IC0xMjhweDsgfVxuLnVpLWljb24tY2xvc2V0aGljayB7IGJhY2tncm91bmQtcG9zaXRpb246IC05NnB4IC0xMjhweDsgfVxuLnVpLWljb24ta2V5IHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTExMnB4IC0xMjhweDsgfVxuLnVpLWljb24tbGlnaHRidWxiIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTEyOHB4IC0xMjhweDsgfVxuLnVpLWljb24tc2Npc3NvcnMgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTQ0cHggLTEyOHB4OyB9XG4udWktaWNvbi1jbGlwYm9hcmQgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTYwcHggLTEyOHB4OyB9XG4udWktaWNvbi1jb3B5IHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTE3NnB4IC0xMjhweDsgfVxuLnVpLWljb24tY29udGFjdCB7IGJhY2tncm91bmQtcG9zaXRpb246IC0xOTJweCAtMTI4cHg7IH1cbi51aS1pY29uLWltYWdlIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTIwOHB4IC0xMjhweDsgfVxuLnVpLWljb24tdmlkZW8geyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMjI0cHggLTEyOHB4OyB9XG4udWktaWNvbi1zY3JpcHQgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMjQwcHggLTEyOHB4OyB9XG4udWktaWNvbi1hbGVydCB7IGJhY2tncm91bmQtcG9zaXRpb246IDAgLTE0NHB4OyB9XG4udWktaWNvbi1pbmZvIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTE2cHggLTE0NHB4OyB9XG4udWktaWNvbi1ub3RpY2UgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMzJweCAtMTQ0cHg7IH1cbi51aS1pY29uLWhlbHAgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtNDhweCAtMTQ0cHg7IH1cbi51aS1pY29uLWNoZWNrIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTY0cHggLTE0NHB4OyB9XG4udWktaWNvbi1idWxsZXQgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtODBweCAtMTQ0cHg7IH1cbi51aS1pY29uLXJhZGlvLW9uIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTk2cHggLTE0NHB4OyB9XG4udWktaWNvbi1yYWRpby1vZmYgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTEycHggLTE0NHB4OyB9XG4udWktaWNvbi1waW4tdyB7IGJhY2tncm91bmQtcG9zaXRpb246IC0xMjhweCAtMTQ0cHg7IH1cbi51aS1pY29uLXBpbi1zIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTE0NHB4IC0xNDRweDsgfVxuLnVpLWljb24tcGxheSB7IGJhY2tncm91bmQtcG9zaXRpb246IDAgLTE2MHB4OyB9XG4udWktaWNvbi1wYXVzZSB7IGJhY2tncm91bmQtcG9zaXRpb246IC0xNnB4IC0xNjBweDsgfVxuLnVpLWljb24tc2Vlay1uZXh0IHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTMycHggLTE2MHB4OyB9XG4udWktaWNvbi1zZWVrLXByZXYgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtNDhweCAtMTYwcHg7IH1cbi51aS1pY29uLXNlZWstZW5kIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTY0cHggLTE2MHB4OyB9XG4udWktaWNvbi1zZWVrLXN0YXJ0IHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTgwcHggLTE2MHB4OyB9XG4vKiB1aS1pY29uLXNlZWstZmlyc3QgaXMgZGVwcmVjYXRlZCwgdXNlIHVpLWljb24tc2Vlay1zdGFydCBpbnN0ZWFkICovXG4udWktaWNvbi1zZWVrLWZpcnN0IHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTgwcHggLTE2MHB4OyB9XG4udWktaWNvbi1zdG9wIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTk2cHggLTE2MHB4OyB9XG4udWktaWNvbi1lamVjdCB7IGJhY2tncm91bmQtcG9zaXRpb246IC0xMTJweCAtMTYwcHg7IH1cbi51aS1pY29uLXZvbHVtZS1vZmYgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTI4cHggLTE2MHB4OyB9XG4udWktaWNvbi12b2x1bWUtb24geyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTQ0cHggLTE2MHB4OyB9XG4udWktaWNvbi1wb3dlciB7IGJhY2tncm91bmQtcG9zaXRpb246IDAgLTE3NnB4OyB9XG4udWktaWNvbi1zaWduYWwtZGlhZyB7IGJhY2tncm91bmQtcG9zaXRpb246IC0xNnB4IC0xNzZweDsgfVxuLnVpLWljb24tc2lnbmFsIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTMycHggLTE3NnB4OyB9XG4udWktaWNvbi1iYXR0ZXJ5LTAgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtNDhweCAtMTc2cHg7IH1cbi51aS1pY29uLWJhdHRlcnktMSB7IGJhY2tncm91bmQtcG9zaXRpb246IC02NHB4IC0xNzZweDsgfVxuLnVpLWljb24tYmF0dGVyeS0yIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTgwcHggLTE3NnB4OyB9XG4udWktaWNvbi1iYXR0ZXJ5LTMgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtOTZweCAtMTc2cHg7IH1cbi51aS1pY29uLWNpcmNsZS1wbHVzIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogMCAtMTkycHg7IH1cbi51aS1pY29uLWNpcmNsZS1taW51cyB7IGJhY2tncm91bmQtcG9zaXRpb246IC0xNnB4IC0xOTJweDsgfVxuLnVpLWljb24tY2lyY2xlLWNsb3NlIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTMycHggLTE5MnB4OyB9XG4udWktaWNvbi1jaXJjbGUtdHJpYW5nbGUtZSB7IGJhY2tncm91bmQtcG9zaXRpb246IC00OHB4IC0xOTJweDsgfVxuLnVpLWljb24tY2lyY2xlLXRyaWFuZ2xlLXMgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtNjRweCAtMTkycHg7IH1cbi51aS1pY29uLWNpcmNsZS10cmlhbmdsZS13IHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTgwcHggLTE5MnB4OyB9XG4udWktaWNvbi1jaXJjbGUtdHJpYW5nbGUtbiB7IGJhY2tncm91bmQtcG9zaXRpb246IC05NnB4IC0xOTJweDsgfVxuLnVpLWljb24tY2lyY2xlLWFycm93LWUgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTEycHggLTE5MnB4OyB9XG4udWktaWNvbi1jaXJjbGUtYXJyb3ctcyB7IGJhY2tncm91bmQtcG9zaXRpb246IC0xMjhweCAtMTkycHg7IH1cbi51aS1pY29uLWNpcmNsZS1hcnJvdy13IHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTE0NHB4IC0xOTJweDsgfVxuLnVpLWljb24tY2lyY2xlLWFycm93LW4geyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTYwcHggLTE5MnB4OyB9XG4udWktaWNvbi1jaXJjbGUtem9vbWluIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTE3NnB4IC0xOTJweDsgfVxuLnVpLWljb24tY2lyY2xlLXpvb21vdXQgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTkycHggLTE5MnB4OyB9XG4udWktaWNvbi1jaXJjbGUtY2hlY2sgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMjA4cHggLTE5MnB4OyB9XG4udWktaWNvbi1jaXJjbGVzbWFsbC1wbHVzIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogMCAtMjA4cHg7IH1cbi51aS1pY29uLWNpcmNsZXNtYWxsLW1pbnVzIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTE2cHggLTIwOHB4OyB9XG4udWktaWNvbi1jaXJjbGVzbWFsbC1jbG9zZSB7IGJhY2tncm91bmQtcG9zaXRpb246IC0zMnB4IC0yMDhweDsgfVxuLnVpLWljb24tc3F1YXJlc21hbGwtcGx1cyB7IGJhY2tncm91bmQtcG9zaXRpb246IC00OHB4IC0yMDhweDsgfVxuLnVpLWljb24tc3F1YXJlc21hbGwtbWludXMgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtNjRweCAtMjA4cHg7IH1cbi51aS1pY29uLXNxdWFyZXNtYWxsLWNsb3NlIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTgwcHggLTIwOHB4OyB9XG4udWktaWNvbi1ncmlwLWRvdHRlZC12ZXJ0aWNhbCB7IGJhY2tncm91bmQtcG9zaXRpb246IDAgLTIyNHB4OyB9XG4udWktaWNvbi1ncmlwLWRvdHRlZC1ob3Jpem9udGFsIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTE2cHggLTIyNHB4OyB9XG4udWktaWNvbi1ncmlwLXNvbGlkLXZlcnRpY2FsIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTMycHggLTIyNHB4OyB9XG4udWktaWNvbi1ncmlwLXNvbGlkLWhvcml6b250YWwgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtNDhweCAtMjI0cHg7IH1cbi51aS1pY29uLWdyaXBzbWFsbC1kaWFnb25hbC1zZSB7IGJhY2tncm91bmQtcG9zaXRpb246IC02NHB4IC0yMjRweDsgfVxuLnVpLWljb24tZ3JpcC1kaWFnb25hbC1zZSB7IGJhY2tncm91bmQtcG9zaXRpb246IC04MHB4IC0yMjRweDsgfVxuXG5cbi8qIE1pc2MgdmlzdWFsc1xuLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5cbi8qIENvcm5lciByYWRpdXMgKi9cbi51aS1jb3JuZXItYWxsLFxuLnVpLWNvcm5lci10b3AsXG4udWktY29ybmVyLWxlZnQsXG4udWktY29ybmVyLXRsIHtcblx0Ym9yZGVyLXRvcC1sZWZ0LXJhZGl1czogM3B4O1xufVxuLnVpLWNvcm5lci1hbGwsXG4udWktY29ybmVyLXRvcCxcbi51aS1jb3JuZXItcmlnaHQsXG4udWktY29ybmVyLXRyIHtcblx0Ym9yZGVyLXRvcC1yaWdodC1yYWRpdXM6IDNweDtcbn1cbi51aS1jb3JuZXItYWxsLFxuLnVpLWNvcm5lci1ib3R0b20sXG4udWktY29ybmVyLWxlZnQsXG4udWktY29ybmVyLWJsIHtcblx0Ym9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czogM3B4O1xufVxuLnVpLWNvcm5lci1hbGwsXG4udWktY29ybmVyLWJvdHRvbSxcbi51aS1jb3JuZXItcmlnaHQsXG4udWktY29ybmVyLWJyIHtcblx0Ym9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6IDNweDtcbn1cblxuLyogT3ZlcmxheXMgKi9cbi51aS13aWRnZXQtb3ZlcmxheSB7XG5cdGJhY2tncm91bmQ6ICNhYWFhYWE7XG5cdG9wYWNpdHk6IC4zO1xuXHRmaWx0ZXI6IEFscGhhKE9wYWNpdHk9MzApOyAvKiBzdXBwb3J0OiBJRTggKi9cbn1cbi51aS13aWRnZXQtc2hhZG93IHtcblx0LXdlYmtpdC1ib3gtc2hhZG93OiAwcHggMHB4IDVweCAjNjY2NjY2O1xuXHRib3gtc2hhZG93OiAwcHggMHB4IDVweCAjNjY2NjY2O1xufVxuIiwiLmFsZXJ0LFxuLmRvY3MtY29udGFpbmVyIG1haW4gLmFsZXJ0IHtcbiAgYm9yZGVyLXJhZGl1czogNHB4O1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIHBhZGRpbmc6IDIwcHggMjhweDtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICB3aWR0aDogMTAwJTtcbiAgZm9udC13ZWlnaHQ6IDQwMDtcbiAgbWFyZ2luOiAwIDAgMjBweDtcbiAgYmFja2dyb3VuZDogcmdiYSgyNTMsMjAwLDY5LC4xKTtcbiAgYm9yZGVyOiAxcHggc29saWQgcmdiYSgyNTMsMjAwLDY5LC4zKTtcbiAgY29sb3I6ICMzNTM5NDA7XG4gIGZvbnQtc2l6ZTogMTRweDtcblxuICAvKlxuICAmOjpiZWZvcmUge1xuICAgIGNvbnRlbnQ6ICdcXGYxMzcnO1xuICAgIGZvbnQtZmFtaWx5OiAnSW9uaWNvbnMnO1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICBsZWZ0OiAyNXB4O1xuICAgIGZvbnQtc2l6ZTogMzBweDtcbiAgICBmb250LXdlaWdodDogMzAwO1xuICAgIGNvbG9yOiByZ2JhKDI1NSwyNTUsMjU1LC45KTtcbiAgfVxuICAqL1xuXG4gIGEsXG4gIGE6bm90KC5idG4pIHtcbiAgICBjb2xvcjogcmdiYSgyNTUsMjU1LDI1NSwgMSk7XG4gICAgb3BhY2l0eTogMTtcblxuICAgICY6aG92ZXIge1xuICAgICAgY29sb3I6ICNmZmY7XG4gICAgfVxuICB9XG5cbiAgJi1zdWNjZXNzIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKCRncmVlbiwgMC4xKTtcbiAgICBib3JkZXItY29sb3I6IHJnYmEoJGdyZWVuLCAwLjMpO1xuICB9XG59XG4iLCIuc2lkZS1uYXYge1xuICBwb3NpdGlvbjogZml4ZWQ7XG4gIGJhY2tncm91bmQ6ICR3aGl0ZWlzaDtcbiAgb3ZlcmZsb3cteTogc2Nyb2xsO1xuICB0b3A6IDA7XG4gIGJvdHRvbTogMDtcbiAgei1pbmRleDogMTtcbiAgb3ZlcmZsb3cteTogLW1vei1zY3JvbGxiYXJzLW5vbmU7XG4gIC1tcy1vdmVyZmxvdy1zdHlsZTogLW1zLWF1dG9oaWRpbmctc2Nyb2xsYmFyO1xuICAtd2Via2l0LW92ZXJmbG93LXNjcm9sbGluZzogdG91Y2g7XG4gIC13ZWJraXQtdG91Y2gtY2FsbG91dDogbm9uZTtcbiAgdXNlci1zZWxlY3Q6IG5vbmU7XG4gIG92ZXJmbG93LXk6IHNjcm9sbDtcblxuICAmOjotd2Via2l0LXNjcm9sbGJhciB7XG4gICAgZGlzcGxheTogbm9uZTtcbiAgICB3aWR0aDogMCAhaW1wb3J0YW50O1xuICB9XG5cbiAgLmJhY2stdG8tbWFpbiB7XG4gICAgYSB7XG4gICAgICBwYWRkaW5nLXRvcDogNXB4O1xuICAgICAgYm9yZGVyOiAxcHggc29saWQgI2U2ZTllZTtcbiAgICAgIHBhZGRpbmc6IDEwcHggMTJweCAxM3B4O1xuICAgICAgbWFyZ2luLXJpZ2h0OiAyMHB4O1xuICAgICAgbWFyZ2luLXRvcDogLTE1cHg7XG4gICAgICBib3JkZXItcmFkaXVzOiA0cHg7XG4gICAgICBtYXJnaW4tYm90dG9tOiAxMHB4O1xuICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgICAgdHJhbnNpdGlvbjogLjJzIGJvcmRlci1jb2xvciwgLjJzIGNvbG9yLCAuMnMgYmFja2dyb3VuZCwgLjJzIGJveC1zaGFkb3c7XG5cbiAgICAgICY6OmJlZm9yZSB7XG4gICAgICAgIGZvbnQtZmFtaWx5OiAnSW9uaWNvbnMnO1xuICAgICAgICAtd2Via2l0LWZvbnQtc21vb3RoaW5nOiBhbnRpYWxpYXNlZDtcbiAgICAgICAgY29udGVudDogJ1xcZjNjZic7XG4gICAgICAgIGZvbnQtc2l6ZTogMTZweDtcbiAgICAgICAgZm9udC13ZWlnaHQ6IDgwMDtcbiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICAgICBwYWRkaW5nLXJpZ2h0OiA1cHg7XG4gICAgICAgIHRvcDogMnB4O1xuICAgICAgfVxuXG4gICAgICAmOmhvdmVyIHtcbiAgICAgICAgYm9yZGVyLWNvbG9yOiAjREZFM0U4O1xuICAgICAgICBjb2xvcjogJGJsdWU7XG4gICAgICAgIGJveC1zaGFkb3c6IDAgMXB4IDJweCByZ2JhKDAsIDAsIDAsIDAuMDYpO1xuICAgICAgICBiYWNrZ3JvdW5kOiAjZmRmZGZkO1xuICAgICAgfVxuXG4gICAgICAmOmZvY3VzOjphZnRlciB7XG4gICAgICAgIGJvcmRlci1yaWdodC1jb2xvcjogdHJhbnNwYXJlbnQ7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLmZvcm0tZ3JvdXAge1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgJGxpZ2h0LWdyZXk7XG4gICAgbWluLWhlaWdodDogNTRweDtcblxuICAgICYuc2VhcmNoIHtcbiAgICAgIHBhZGRpbmc6IDEwcHggMjBweCAxMHB4O1xuICAgICAgbWFyZ2luLWJvdHRvbTogMDtcblxuICAgICAgJjpob3Zlcjo6YmVmb3JlIHtcbiAgICAgICAgY29sb3I6ICNhNGFiYjU7XG4gICAgICB9XG5cbiAgICAgICY6OmJlZm9yZSB7XG4gICAgICAgIGZvbnQtZmFtaWx5OiAnSW9uaWNvbnMnO1xuICAgICAgICBjb250ZW50OiAnXFxmNGE1JztcbiAgICAgICAgZm9udC1zaXplOiAxNnB4O1xuICAgICAgICBmb250LXdlaWdodDogODAwO1xuICAgICAgICBjb2xvcjogI2JkYzNjYztcbiAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICB0b3A6IDE2cHg7XG4gICAgICAgIGxlZnQ6IDM0cHg7XG4gICAgICAgIHRyYW5zaXRpb246IC4ycyBjb2xvcjtcbiAgICAgIH1cblxuICAgICAgaW5wdXQge1xuICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAjZTZlOWVlO1xuICAgICAgICBib3JkZXItcmFkaXVzOiAyMHB4O1xuICAgICAgICBwYWRkaW5nOiA4cHggMCA2cHggMzVweDtcbiAgICAgICAgZm9udC1zaXplOiAxM3B4O1xuICAgICAgICBmb250LXdlaWdodDogNTAwO1xuICAgICAgICBjb2xvcjogI2JkYzNjYztcbiAgICAgICAgYm94LXNoYWRvdzogbm9uZTtcbiAgICAgICAgdHJhbnNpdGlvbjogLjJzIGJvcmRlci1jb2xvciwgLjJzIGJveC1zaGFkb3c7XG5cbiAgICAgICAgJjpmb2N1cyxcbiAgICAgICAgJjpob3ZlciB7XG4gICAgICAgICAgYm94LXNoYWRvdzogMCAxcHggMnB4IHJnYmEoMCwgMCwgMCwgMC4xKTtcbiAgICAgICAgICBib3JkZXItY29sb3I6ICRibHVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgc2VsZWN0IHtcbiAgICAgIHBhZGRpbmc6IDE3cHggMjBweDtcbiAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICBiYWNrZ3JvdW5kOiBub25lO1xuICAgICAgYm9yZGVyLXJhZGl1czogMDtcbiAgICAgIGJvcmRlcjogMDtcbiAgICAgIG91dGxpbmU6IG5vbmU7XG4gICAgICBjb2xvcjogJGdyZXk7XG4gICAgICAtd2Via2l0LWFwcGVhcmFuY2U6IG5vbmU7XG4gICAgICAtbW96LWFwcGVhcmFuY2U6IG5vbmU7XG4gICAgICBhcHBlYXJhbmNlOiBub25lO1xuICAgICAgdHJhbnNpdGlvbjogLjJzIGJvcmRlci1jb2xvciwgLjJzIGNvbG9yLCAuMnMgYmFja2dyb3VuZCwgLjJzIGJveC1zaGFkb3c7XG5cbiAgICAgICY6aG92ZXIge1xuICAgICAgICBib3JkZXItY29sb3I6ICRibHVlO1xuICAgICAgICBjb2xvcjogJGJsdWU7XG4gICAgICAgIGJveC1zaGFkb3c6IDAgMXB4IDJweCByZ2JhKDAsIDAsIDAsIDAuMSk7XG4gICAgICAgIGJhY2tncm91bmQ6ICNmZGZkZmQ7XG4gICAgICB9XG4gICAgfVxuXG4gICAgJjpob3ZlciB7XG4gICAgICB0cmFuc2l0aW9uOiAuMnMgYm9yZGVyLWNvbG9yO1xuXG4gICAgICAmOjpiZWZvcmUge1xuICAgICAgICBjb2xvcjogJGJsdWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgJi5hcGktc2VsZWN0OjpiZWZvcmUge1xuICAgICAgZm9udC1mYW1pbHk6ICdJb25pY29ucyc7XG4gICAgICAtd2Via2l0LWZvbnQtc21vb3RoaW5nOiBhbnRpYWxpYXNlZDtcbiAgICAgIGNvbnRlbnQ6ICdcXGYzZDAnO1xuICAgICAgZm9udC1zaXplOiAxNHB4O1xuICAgICAgZm9udC13ZWlnaHQ6IDgwMDtcbiAgICAgIGNvbG9yOiAjYTRhYmI1O1xuICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgdG9wOiAxN3B4O1xuICAgICAgcmlnaHQ6IDIwcHg7XG4gICAgICB0cmFuc2l0aW9uOiAuMnMgY29sb3I7XG4gICAgfVxuICB9XG5cbiAgPiB1bC5uZXN0ZWQtbWVudSB7XG4gICAgPiBsaSA+IHVsID4gbGkgPiBhIHtcbiAgICAgIGNvbG9yOiAjOWRhNWIzO1xuICAgICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcbiAgICAgIGZvbnQtc2l6ZTogMTBweDtcbiAgICAgIGZvbnQtd2VpZ2h0OiA3MDA7XG4gICAgICBsZXR0ZXItc3BhY2luZzogMnB4O1xuICAgICAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xuICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICBwYWRkaW5nOiAxMHB4IDA7XG4gICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgfVxuICAgID4gbGkgPiB1bCA+IGxpID4gdWwge1xuICAgICAgLy9tYXJnaW4tbGVmdDogMjBweDtcbiAgICB9XG4gIH1cblxuICA+IHVsID4gLmFjdGl2ZSA+IGEge1xuICAgIGNvbG9yOiAjNGY1MzU4O1xuICB9XG5cbiAgdWwge1xuICAgIGxpc3Qtc3R5bGU6IG5vbmU7XG4gICAgcGFkZGluZzogMThweCAwIDIwcHggMjBweDtcblxuICAgIGEge1xuICAgICAgY29sb3I6ICRncmV5O1xuICAgICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcbiAgICAgIGZvbnQtc2l6ZTogMTBweDtcbiAgICAgIGZvbnQtd2VpZ2h0OiA3MDA7XG4gICAgICBmb250LWZhbWlseTogJGZvbnQtZmFtaWx5LWVpbmE7XG4gICAgICBsZXR0ZXItc3BhY2luZzogMnB4O1xuICAgICAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xuICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICBwYWRkaW5nOiAxMHB4IDA7XG4gICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICBjdXJzb3I6IHBvaW50ZXI7XG5cbiAgICAgICY6OmFmdGVyIHtcbiAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgcmlnaHQ6IDA7XG4gICAgICAgIHRvcDogMDtcbiAgICAgICAgYm90dG9tOiAwO1xuICAgICAgICBjb250ZW50OiAnJztcbiAgICAgICAgYm9yZGVyLXJpZ2h0OiAycHggc29saWQgJGJsdWU7XG4gICAgICAgIHRyYW5zZm9ybTogc2NhbGVZKDAuMDAwMSk7XG4gICAgICAgIHRyYW5zaXRpb246IHRyYW5zZm9ybSAuMDhzIGVhc2UtaW4tb3V0O1xuICAgICAgfVxuICAgIH1cblxuICAgIHVsLFxuICAgIC5jYXBpdGFsaXplIHtcbiAgICAgIHBhZGRpbmc6IDA7XG4gICAgICBvcGFjaXR5OiAxO1xuXG4gICAgICBhIHtcbiAgICAgICAgY29sb3I6ICRibGFja2lzaDtcbiAgICAgICAgdGV4dC10cmFuc2Zvcm06IG5vbmU7XG4gICAgICAgIGZvbnQtc2l6ZTogMTNweDtcbiAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDtcbiAgICAgICAgbGV0dGVyLXNwYWNpbmc6IDA7XG4gICAgICAgIGhlaWdodDogMzRweDtcbiAgICAgICAgdHJhbnNpdGlvbjogaGVpZ2h0IGN1YmljLWJlemllcigwLjM2LCAwLjY2LCAwLjA0LCAxKSAwLjNzLFxuICAgICAgICAgICAgICAgICAgICBwYWRkaW5nIGN1YmljLWJlemllcigwLjM2LCAwLjY2LCAwLjA0LCAxKSAwLjNzLFxuICAgICAgICAgICAgICAgICAgICBjb2xvciAwLjJzO1xuXG4gICAgICAgICY6ZW1wdHkge1xuICAgICAgICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgJi5uZy1oaWRlLWFkZCxcbiAgICAgICYubmctaGlkZS1yZW1vdmUge1xuICAgICAgICB0cmFuc2l0aW9uOiBvcGFjaXR5IGN1YmljLWJlemllcigwLjM2LCAwLjY2LCAwLjA0LCAxKSAwLjNzO1xuICAgICAgfVxuXG4gICAgICAmLm5nLWhpZGUge1xuICAgICAgICBvcGFjaXR5OiAwO1xuXG4gICAgICAgIGEge1xuICAgICAgICAgIHBhZGRpbmc6IDA7XG4gICAgICAgICAgaGVpZ2h0OiAwICFpbXBvcnRhbnQ7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICB1bCAuYWN0aXZlID4gYSxcbiAgICAuY2FwaXRhbGl6ZS5hY3RpdmUgPiBhLFxuICAgIGE6aG92ZXIsXG4gICAgLmFjdGl2ZS50b3AtbGV2ZWwgPiBhIHtcbiAgICAgIGNvbG9yOiAkYmx1ZTtcbiAgICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbiAgICAgIGJhY2tncm91bmQ6IG5vbmU7XG4gICAgfVxuXG4gICAgdWwgLmFjdGl2ZSA+IGE6OmFmdGVyLFxuICAgIC5jYXBpdGFsaXplLmFjdGl2ZSA+IGE6OmFmdGVyLFxuICAgIGE6Zm9jdXM6OmFmdGVyLFxuICAgIC5hY3RpdmUudG9wLWxldmVsID4gYTo6YWZ0ZXIge1xuICAgICAgdHJhbnNmb3JtOiBzY2FsZVkoMSk7XG4gICAgICBvdXRsaW5lOiBub25lO1xuICAgIH1cbiAgfVxuXG4gIC5iZXRhIHtcbiAgICBiYWNrZ3JvdW5kOiAkYmx1ZTtcbiAgICBjb2xvcjogd2hpdGU7XG4gICAgZm9udC13ZWlnaHQ6IDcwMDtcbiAgICBmb250LXNpemU6IDEwcHg7XG4gICAgcGFkZGluZzogMCAycHg7XG4gICAgYm9yZGVyLXJhZGl1czogM3B4O1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICB0b3A6IC0ycHg7XG4gIH1cblxuICAucGFpZCB7XG4gICAgYmFja2dyb3VuZDogJGJsdWU7XG4gICAgY29sb3I6IHdoaXRlO1xuICAgIGZvbnQtd2VpZ2h0OiA3MDA7XG4gICAgZm9udC1zaXplOiAxMHB4O1xuICAgIHBhZGRpbmc6IDAgMnB4O1xuICAgIGJvcmRlci1yYWRpdXM6IDNweDtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgdG9wOiAtMnB4O1xuICB9XG5cbiAgLnY0LWJldGEge1xuICAgIG1hcmdpbi10b3A6IDdweDtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgICBtYXJnaW4tYm90dG9tOiAxNHB4O1xuXG4gICAgYSB7XG4gICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgIGNvbG9yOiAjNTk2YzhjO1xuICAgICAgcGFkZGluZzogMTVweCAxNXB4IDE1cHggMzlweDtcbiAgICAgIG1hcmdpbi1yaWdodDogMjBweDtcblxuICAgICAgPiBzdHJvbmcsXG4gICAgICA+IGksXG4gICAgICA+IHNwYW4ge1xuICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICAgIHotaW5kZXg6IDE7XG4gICAgICB9XG5cbiAgICAgICY6OmJlZm9yZSB7XG4gICAgICAgIGJhY2tncm91bmQ6IHdoaXRlIHVybCgnL2ltZy9kb2NzL2lvbmljLXNpZGUtaWNvbi5wbmcnKSBuby1yZXBlYXQgMCA1MCU7XG4gICAgICAgIGJhY2tncm91bmQtc2l6ZTogMjhweDtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogNnB4O1xuICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgIGNvbnRlbnQ6ICcnO1xuICAgICAgICB0b3A6IDA7XG4gICAgICAgIHJpZ2h0OiAwO1xuICAgICAgICBib3R0b206IDA7XG4gICAgICAgIGxlZnQ6IDA7XG4gICAgICAgIHotaW5kZXg6IDE7XG4gICAgICAgIGJveC1zaGFkb3c6IDAgMnB4IDhweCByZ2JhKGJsYWNrLCAwLjIpO1xuICAgICAgICB0cmFuc2l0aW9uOiAuM3MgYm94LXNoYWRvdyBlYXNlLW91dDtcbiAgICAgIH1cblxuICAgICAgJjpob3Zlcjo6YmVmb3JlIHtcbiAgICAgICAgYm94LXNoYWRvdzogMCA0cHggMTZweCByZ2JhKGJsYWNrLCAwLjE2KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBzdHJvbmcge1xuICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICBmb250LXNpemU6IDE0cHg7XG4gICAgICBjb2xvcjogIzBmMTYyMjtcbiAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7XG4gICAgICB0ZXh0LXRyYW5zZm9ybTogbm9uZTtcbiAgICAgIGxldHRlci1zcGFjaW5nOiAuMDFlbTtcbiAgICB9XG5cbiAgICBzcGFuIHtcbiAgICAgIGZvbnQtc2l6ZTogMTBweDtcbiAgICAgIGZvbnQtd2VpZ2h0OiA0MDA7XG4gICAgICB0ZXh0LXRyYW5zZm9ybTogbm9uZTtcbiAgICAgIGxldHRlci1zcGFjaW5nOiAuMDFlbTtcbiAgICB9XG5cbiAgICBhID4gaSB7XG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICByaWdodDogNXB4O1xuICAgICAgZm9udC1zaXplOiAxOHB4O1xuICAgICAgY29sb3I6ICNkMmQ2ZGQ7XG4gICAgICB0b3A6IGNhbGMoNTAlIC0gMTBweCk7XG4gICAgfVxuICB9XG59XG5cblxuYm9keTpub3QoLm5nLXNjb3BlKSB7XG4gIC5zaWRlLW5hdiB1bCBhIHtcbiAgICB0cmFuc2l0aW9uOiBub25lO1xuICB9XG59XG4iLCIudGFibGUge1xuICA+IHRoZWFkLFxuICA+IHRoZWFkOmZpcnN0LWNoaWxkLFxuICA+IHRib2R5LFxuICA+IHRib2R5OmZpcnN0LWNoaWxkIHtcbiAgICA+IHRyLFxuICAgID4gdHI6Zmlyc3QtY2hpbGQge1xuICAgICAgPiB0aCB7XG4gICAgICAgIHBhZGRpbmc6IDExcHggMTFweCAxMnB4O1xuICAgICAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgI2VlZTtcbiAgICAgICAgZm9udC13ZWlnaHQ6IDcwMDtcbiAgICAgIH1cblxuICAgICAgPiB0ZCB7XG4gICAgICAgIHBhZGRpbmc6IDEycHg7XG4gICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7XG4gICAgICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjZWVlO1xuICAgICAgICBjb2xvcjogIzU1NTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbiIsIi50b2Mge1xuICBtYXJnaW4tdG9wOiAyMHB4O1xuICAvLyBib3JkZXItYm90dG9tOiAxcHggc29saWQgI2JiYjtcblxuICAudG9nZ2xlIHtcbiAgICBiYWNrZ3JvdW5kOiBub25lO1xuICAgIGJvcmRlcjogMDtcbiAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xuICAgIGNvbG9yOiAjYjFiYWM4O1xuICAgIGZvbnQtc2l6ZTogMTBweDtcbiAgICBsZXR0ZXItc3BhY2luZzogMnB4O1xuICAgIGZvbnQtd2VpZ2h0OiA3MDA7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIGRpc3BsYXk6IGlubGluZTtcbiAgICB3aWR0aDogMTAwJTtcbiAgICB0ZXh0LWFsaWduOiBsZWZ0O1xuICAgIHBhZGRpbmc6IDA7XG4gICAgb3V0bGluZTogbm9uZTtcblxuICAgICY6OmFmdGVyIHtcbiAgICAgIGZvbnQtZmFtaWx5OiBJb25pY29ucztcbiAgICAgIGNvbnRlbnQ6ICdcXGYzZDAnO1xuICAgICAgZmxvYXQ6IHJpZ2h0O1xuICAgICAgZm9udC1zaXplOiAxOHB4O1xuICAgICAgZm9udC13ZWlnaHQ6IDQwMDtcbiAgICAgIHRyYW5zaXRpb246IC4zcyB0cmFuc2Zvcm0gZWFzZTtcbiAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgIHRvcDogLTVweDtcbiAgICB9XG4gIH1cblxuICAuZXhwYW5kZWQge1xuICAgIHVsIHtcbiAgICAgIGxpc3Qtc3R5bGU6IG5vbmU7XG4gICAgICBwYWRkaW5nLWxlZnQ6IDE1cHg7XG5cbiAgICAgIGxpIHtcbiAgICAgICAgZm9udC1zaXplOiAxNHB4O1xuICAgICAgICBmb250LXdlaWdodDogNDAwO1xuICAgICAgICBsaW5lLWhlaWdodDogMS44ZW07XG4gICAgICAgIG1hcmdpbi1ib3R0b206IDA7XG5cbiAgICAgICAgYSB7XG4gICAgICAgICAgY29sb3I6ICRibHVlO1xuICAgICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICAgIG1heC1oZWlnaHQ6IDI1cHg7XG4gICAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICAgICAgICBmb250LXdlaWdodDogNTAwO1xuICAgICAgICAgIHRyYW5zaXRpb246IC4zcyBtYXgtaGVpZ2h0IGN1YmljLWJlemllcigwLjM2LCAwLjY2LCAwLjA0LCAxKTtcbiAgICAgICAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gICAgICAgICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICA+IHVsIHtcbiAgICAgIHBhZGRpbmctbGVmdDogMDtcblxuICAgICAgPiBsaSB7XG4gICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAyZW07XG5cbiAgICAgICAgPiBhIHtcbiAgICAgICAgICBmb250LXdlaWdodDogNjAwO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgJi5jb2xsYXBzZWQge1xuICAgIC50b2dnbGU6OmFmdGVyIHtcbiAgICAgIHRyYW5zZm9ybTogcm90YXRlM2QoMCwgMCwgMSwgLTkwZGVnKTtcbiAgICB9XG5cbiAgICAuZXhwYW5kZWQgdWwgbGkgYSB7XG4gICAgICBtYXgtaGVpZ2h0OiAwO1xuICAgIH1cbiAgfVxufVxuIiwiLnBhZ2UtcHJvLWRvY3Mge1xuICAuZG9jcy1jb250YWluZXIge1xuICAgIG1haW4gaDIge1xuICAgICAgcGFkZGluZy10b3A6IDAuNWVtO1xuICAgIH1cbiAgICBtYWluIHAge1xuICAgICAgbWFyZ2luLXRvcDogMC43ZW07XG4gICAgICBtYXJnaW4tYm90dG9tOiAwLjdlbTtcbiAgICB9XG4gIH1cblxuICAuc2lkZS1uYXYgPiB1bC5uZXN0ZWQtbWVudSA+IGxpID4gdWwgPiBsaSA+IGEge1xuICAgIG1hcmdpbi10b3A6IDE1cHg7XG4gIH1cbn1cblxuLmRvY3MtY29udGFpbmVyIHtcbiAgbWluLWhlaWdodDogMTAwJTtcblxuICAuZml4ZWQtaGVhZGVyIHtcbiAgICBwb3NpdGlvbjogZml4ZWQ7XG4gICAgbGVmdDogMjMwcHg7XG4gICAgdG9wOiAwcHg7XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICRsaWdodC1ncmV5O1xuICAgIGJhY2tncm91bmQtY29sb3I6IHdoaXRlO1xuICAgIHBhZGRpbmc6IDBweCAzOHB4O1xuICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUzZCgwLCAwLCAwKTtcblxuICAgID4gaGdyb3VwIHtcbiAgICAgIGhlaWdodDogNzRweDtcbiAgICAgIGxpbmUtaGVpZ2h0OiA3NHB4O1xuXG4gICAgICBAbWVkaWEgKG1heC13aWR0aDogJHNjcmVlbi14cy1tYXgpIHtcbiAgICAgICAgaGVpZ2h0OiA0NnB4O1xuICAgICAgICBsaW5lLWhlaWdodDogNDZweDtcbiAgICAgIH1cblxuICAgICAgPiAqIHtcbiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgICAgICBtYXJnaW46IDBweDtcbiAgICAgICAgbGluZS1oZWlnaHQ6IGluaGVyaXQ7XG4gICAgICAgIHZlcnRpY2FsLWFsaWduOiB0b3A7XG4gICAgICB9XG5cbiAgICAgIGgzICsgaDQge1xuICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICAgIGhlaWdodDogMTAwJTtcbiAgICAgICAgbWFyZ2luLWxlZnQ6IDMxcHg7XG4gICAgICAgIG9wYWNpdHk6IDE7XG4gICAgICAgIHRyYW5zaXRpb246IG9wYWNpdHkgMC40cztcblxuICAgICAgICAmLm5vdC1zaG93biB7XG4gICAgICAgICAgb3BhY2l0eTogMDtcbiAgICAgICAgfVxuXG4gICAgICAgICY6YWZ0ZXIge1xuICAgICAgICAgIGNvbnRlbnQ6ICcnO1xuICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgICBsZWZ0OiAtMjRweDtcbiAgICAgICAgICB0b3A6IGNhbGMoNTAlIC0gNXB4KTtcbiAgICAgICAgICB3aWR0aDogMTBweDtcbiAgICAgICAgICBoZWlnaHQ6IDEwcHg7XG4gICAgICAgICAgdHJhbnNmb3JtOiByb3RhdGUoNDVkZWcpO1xuICAgICAgICAgIGJvcmRlci1yaWdodDogMnB4IHNvbGlkO1xuICAgICAgICAgIGJvcmRlci10b3A6IDJweCBzb2xpZDtcbiAgICAgICAgICBib3JkZXItY29sb3I6ICMzMzMzMzM7XG4gICAgICAgIH1cblxuICAgICAgICA+IG5vYnIge1xuICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gMC4zcywgb3BhY2l0eSAwLjNzO1xuXG4gICAgICAgICAgJi50b3Age1xuICAgICAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC0yOHB4KTtcbiAgICAgICAgICAgIG9wYWNpdHk6IDA7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgJi5taWRkbGUsICYudG9wLm1pZGRsZSwgJi5ib3R0b20ubWlkZGxlIHtcbiAgICAgICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgycHgpO1xuICAgICAgICAgICAgb3BhY2l0eTogMTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAmLmJvdHRvbSB7XG4gICAgICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMzJweCk7XG4gICAgICAgICAgICBvcGFjaXR5OiAwO1xuICAgICAgICAgIH1cblxuICAgICAgICAgICYubm8tdHJhbnNpdGlvbiB7XG4gICAgICAgICAgICB0cmFuc2l0aW9uLWR1cmF0aW9uOiAwcywgMHM7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cblxuICBAbWVkaWEgKG1heC13aWR0aDogJHNjcmVlbi14cy1tYXgpIHtcbiAgICAuZml4ZWQtaGVhZGVyIHtcbiAgICAgIGxlZnQ6IDBweDtcbiAgICB9XG4gIH1cblxuICBtYWluIHtcbiAgICBwYWRkaW5nOiA1MHB4IDQwcHggMTAwcHg7XG5cbiAgICBoMSxcbiAgICBoMixcbiAgICBoMyxcbiAgICBoNCxcbiAgICBoNSB7XG4gICAgICBjb2xvcjogJGJsYWNrZXI7XG4gICAgICBsaW5lLWhlaWdodDogMS40ZW07XG4gICAgICBtYXJnaW46IDJlbSAwIDFlbTtcbiAgICAgIGZvbnQtc2l6ZTogMjZweDtcbiAgICAgIGZvbnQtd2VpZ2h0OiA3MDA7XG4gICAgICBsZXR0ZXItc3BhY2luZzogLTAuMDFlbTtcbiAgICAgIC8vIHBvc2l0aW9uOiByZWxhdGl2ZTtcblxuICAgICAgJjpmaXJzdC1jaGlsZCB7XG4gICAgICAgIG1hcmdpbi10b3A6IDA7XG4gICAgICB9XG5cbiAgICAgIGEuYW5jaG9yIHtcbiAgICAgICAgJjo6YmVmb3JlIHtcbiAgICAgICAgICBjb250ZW50OiAnXFxmMjJhJztcbiAgICAgICAgICBmb250LWZhbWlseTogJ0lvbmljb25zJztcbiAgICAgICAgICBtYXJnaW4tbGVmdDogLTE1cHg7XG4gICAgICAgICAgbWFyZ2luLXJpZ2h0OiA1cHg7XG4gICAgICAgICAgZm9udC1zaXplOiAxNHB4O1xuICAgICAgICAgIGNvbG9yOiAkbGlnaHQtZ3JleTtcbiAgICAgICAgICB0cmFuc2l0aW9uOiAuM3MgY29sb3I7XG4gICAgICAgIH1cblxuICAgICAgICAmOmhvdmVyOjpiZWZvcmUsXG4gICAgICAgICY6YWN0aXZlOjpiZWZvcmUge1xuICAgICAgICAgIGNvbG9yOiByZ2JhKCRibHVlLCAuNik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBoMSB7XG4gICAgICBtYXJnaW4tYm90dG9tOiAwO1xuXG4gICAgICBhLmFuY2hvcjo6YmVmb3JlIHtcbiAgICAgICAgbWFyZ2luLWxlZnQ6IC0yM3B4O1xuICAgICAgfVxuICAgIH1cblxuICAgIGgyIHtcbiAgICAgIHBhZGRpbmc6IDJlbSAwIDA7XG4gICAgICBmb250LXNpemU6IDI0cHg7XG5cbiAgICAgICYuc2VjdGlvbi1oZWFkZXIge1xuICAgICAgICBib3JkZXItdG9wOiAxcHggc29saWQgI0YwRjNGNztcbiAgICAgICAgbWFyZ2luLXRvcDogNS42ZW07XG4gICAgICB9XG4gICAgfVxuXG4gICAgaDMge1xuICAgICAgbWFyZ2luOiAzLjJlbSAwIDA7XG4gICAgICBmb250LXNpemU6IDE4cHg7XG5cbiAgICAgICYubm8tcGFyYSB7XG4gICAgICAgIG1hcmdpbi1ib3R0b206IDFlbTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBoNCB7XG4gICAgICBmb250LXNpemU6IDE2cHg7XG4gICAgfVxuXG4gICAgaDUge1xuICAgICAgZm9udC1zaXplOiAxNHB4O1xuICAgIH1cblxuICAgIGg2IHtcbiAgICAgIGZvbnQtc2l6ZTogMTJweDtcbiAgICB9XG5cbiAgICBwIHtcbiAgICAgIGNvb3I6ICMzYTNmNDc7XG4gICAgICBsaW5lLWhlaWdodDogMi4xZW07XG4gICAgICBtYXJnaW46IDEuMmVtIDAgMS42ZW07XG4gICAgICBmb250LXdlaWdodDogNDAwO1xuICAgICAgZm9udC1zaXplOiAxNXB4O1xuICAgIH1cblxuICAgIHByZSB7XG4gICAgICBib3JkZXI6IDFweCBzb2xpZCAkbGlnaHQtZ3JleTtcbiAgICAgIGJhY2tncm91bmQ6IHdoaXRlO1xuICAgICAgcGFkZGluZzogMTZweDtcbiAgICAgIGxpbmUtaGVpZ2h0OiAyNHB4O1xuICAgIH1cblxuICAgIGE6bm90KC5idG4pIHtcbiAgICAgIGNvbG9yOiAkYmx1ZTtcbiAgICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbiAgICAgIHRyYW5zaXRpb246IC4ycyBjb2xvcjtcblxuICAgICAgJjpob3ZlciB7XG4gICAgICAgIGNvbG9yOiBsaWdodGVuKCRibHVlLCAxNSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGFibGUge1xuICAgICAgd2lkdGg6IDEwMCU7XG4gICAgfVxuXG4gICAgdGQsXG4gICAgdGgge1xuICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcblxuICAgICAgJjpsYXN0LWNoaWxkIHtcbiAgICAgICAgd2hpdGUtc3BhY2U6IG5vcm1hbDtcbiAgICAgICAgd2lkdGg6IDk5JTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBiLFxuICAgIHN0cm9uZyB7XG4gICAgICBmb250LXdlaWdodDogNTAwO1xuICAgICAgY29sb3I6ICMyNjI5MmU7XG4gICAgfVxuXG4gICAgLmZpeGVkLXdpZHRoIHtcbiAgICAgIGZvbnQtZmFtaWx5OiBNZW5sbywgTW9uYWNvLCBDb25zb2xhcywgXCJDb3VyaWVyIE5ld1wiLCBtb25vc3BhY2U7XG4gICAgfVxuXG4gICAgLm5hdiB7XG4gICAgICBhIHtcbiAgICAgICAgcGFkZGluZy10b3A6IDVweDtcbiAgICAgICAgcGFkZGluZy1ib3R0b206IDVweDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBibG9ja3F1b3RlIHtcbiAgICAgIHBhZGRpbmc6IDAgMTVweDtcbiAgICAgIG1hcmdpbjogNDBweCAwO1xuICAgICAgZm9udC1zaXplOiAxNnB4O1xuICAgICAgYm9yZGVyLWxlZnQ6IDRweCBzb2xpZCAjZWVlZWVlO1xuICAgIH1cblxuICAgIGltZy5zZWN0aW9uLWhlYWRlciB7XG4gICAgICB3aWR0aDogMTAwJTtcbiAgICAgIG1hcmdpbjogNTBweCAwO1xuICAgICAgbWF4LXdpZHRoOiAxMDM3cHg7XG4gICAgICBkaXNwbGF5OiBibG9jaztcbiAgICB9XG5cbiAgICAuYmV0YSB7XG4gICAgICBiYWNrZ3JvdW5kOiAkYmx1ZTtcbiAgICAgIGNvbG9yOiB3aGl0ZTtcbiAgICAgIGZvbnQtd2VpZ2h0OiA3MDA7XG4gICAgICBmb250LXNpemU6IDEwcHg7XG4gICAgICBwYWRkaW5nOiAwIDJweDtcbiAgICAgIGJvcmRlci1yYWRpdXM6IDNweDtcbiAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgIHRvcDogLTlweDtcbiAgICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICB9XG5cbiAgICAuYmV0YS1ub3RpY2Uge1xuICAgICAgZm9udC1zdHlsZTogaXRhbGljO1xuICAgICAgZm9udC1zaXplOiAxM3B4O1xuICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICAgcGFkZGluZy1sZWZ0OiAzMHB4O1xuXG4gICAgICAmOjpiZWZvcmUge1xuICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgIGxlZnQ6IDBweDtcbiAgICAgICAgdG9wOiAwcHg7XG4gICAgICAgIGZvbnQtZmFtaWx5OiAnSW9uaWNvbnMnO1xuICAgICAgICBjb250ZW50OiAnXFxmMjc2JztcbiAgICAgICAgY29sb3I6ICRibHVlO1xuICAgICAgICBmb250LXNpemU6IDI0cHg7XG4gICAgICAgIGZvbnQtc3R5bGU6IG5vcm1hbDtcbiAgICAgICAgbWFyZ2luLXJpZ2h0OiAzcHg7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLnBhaWQge1xuICAgICAgYmFja2dyb3VuZDogJGJsdWU7XG4gICAgICBjb2xvcjogd2hpdGU7XG4gICAgICBmb250LXdlaWdodDogNzAwO1xuICAgICAgZm9udC1zaXplOiAxMHB4O1xuICAgICAgcGFkZGluZzogMCAycHg7XG4gICAgICBib3JkZXItcmFkaXVzOiAzcHg7XG4gICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICB0b3A6IC05cHg7XG4gICAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgfVxuXG4gICAgLnBhaWQtbm90aWNlIHtcbiAgICAgIGZvbnQtc3R5bGU6IGl0YWxpYztcbiAgICAgIGZvbnQtc2l6ZTogMTNweDtcbiAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgIHBhZGRpbmctbGVmdDogMzBweDtcblxuICAgICAgJjo6YmVmb3JlIHtcbiAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICBsZWZ0OiAwcHg7XG4gICAgICAgIHRvcDogMHB4O1xuICAgICAgICBmb250LWZhbWlseTogJ0lvbmljb25zJztcbiAgICAgICAgY29udGVudDogJ1xcZjQ4ZCc7XG4gICAgICAgIGNvbG9yOiAkYmx1ZTtcbiAgICAgICAgZm9udC1zaXplOiAyNHB4O1xuICAgICAgICBmb250LXN0eWxlOiBub3JtYWw7XG4gICAgICAgIG1hcmdpbi1yaWdodDogM3B4O1xuICAgICAgfVxuICAgIH1cblxuICAgIC5hcGktdGl0bGUge1xuICAgICAgLmJldGEsIC5wYWlkIHtcbiAgICAgICAgbWFyZ2luLWxlZnQ6IDZweDtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBpbWcge1xuICAgIG1heC13aWR0aDogMTAwJTtcbiAgfVxufVxuXG5cbi5wYWdlLWNvbXBvbmVudHMgLmRvY3MtY29udGFpbmVyIGgzIHtcbiAgQG1lZGlhIChtYXgtd2lkdGg6IDExMDBweCkge1xuICAgIHdpZHRoOiBjYWxjKDEwMCUgLSAxNzJweCk7XG4gICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7XG4gICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xuICB9XG59XG4iLCJib2R5LmRvY3MgI3NuYXAtYmFyICsgI3Byby1oZWFkZXIubmF2YmFyIHtcbiAgbWFyZ2luLXRvcDogMjJweDtcbn1cblxuI3Byby1oZWFkZXIge1xuICBiYWNrZ3JvdW5kOiB3aGl0ZTtcblxuICAuY29udGFpbmVyIHtcbiAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgI0VFRjBGMztcbiAgICBwYWRkaW5nLWJvdHRvbTogMTVweDtcbiAgICBwYWRkaW5nLWxlZnQ6IDA7XG4gICAgcGFkZGluZy1yaWdodDogMDtcbiAgfVxuXG4gIGEge1xuICAgIGNvbG9yOiAjNzM3Qjg4O1xuICB9XG59XG5cbiNwcm8tZG9jcyB7XG4gIGgxLCBoMiwgaDMsIGg0LCBoNSB7XG4gICAgZm9udC13ZWlnaHQ6IDcwMDtcbiAgfVxuXG4gIHRkOm5vdCg6Zmlyc3QtY2hpbGQpLCB0aDpub3QoOmZpcnN0LWNoaWxkKSB7XG4gICAgd2hpdGUtc3BhY2U6IGluaGVyaXQ7XG4gIH1cblxuICAucmVzcG9uc2l2ZS1zaWRlLW5hdi5hZmZpeCArIG1haW4sXG4gIC5yZXNwb25zaXZlLXNpZGUtbmF2LmFmZml4LWJvdHRvbSArIG1haW4ge1xuICAgIC8vIFRoZSBuYXYgYmFyJ3Mgd2lkdGggbWludXMgaXQncyBuZWdhdGl2ZSBsZWZ0IG1hcmdpblxuICAgIG1hcmdpbi1sZWZ0OiAzMDBweDtcblxuICAgIEBtZWRpYSAobWF4LXdpZHRoOiAkc2NyZWVuLXhzLW1heCkge1xuICAgICAgbWFyZ2luLWxlZnQ6IDA7XG4gICAgfVxuICB9XG5cbiAgLnJlc3BvbnNpdmUtc2lkZS1uYXYge1xuICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xuICAgIC8vbWFyZ2luLWxlZnQ6IC0yNnB4O1xuXG4gICAgJi5zaWRlLW5hdiB1bCB1bCBhLCAmLnNpZGUtbmF2IHVsIC5jYXBpdGFsaXplIGEge1xuICAgICAgaGVpZ2h0OiAyOHB4O1xuICAgIH1cblxuICAgIHVsIGE6OmFmdGVyIHtcbiAgICAgIGJvcmRlcjogbm9uZSAhaW1wb3J0YW50O1xuICAgIH1cblxuICAgIGEge1xuICAgICAgbGV0dGVyLXNwYWNpbmc6IC0wLjAxZW07XG5cbiAgICAgIHBhZGRpbmc6IDBweCAwO1xuXG4gICAgICAmLmFjdGl2ZSB7XG4gICAgICAgIGNvbG9yOiAjNGE4YmZjICFpbXBvcnRhbnQ7XG4gICAgICAgIGZvbnQtd2VpZ2h0OiA2MDAgIWltcG9ydGFudDtcbiAgICAgIH1cblxuICAgICAgJjpob3ZlciB7XG4gICAgICAgIGNvbG9yOiAjM2IzZjQ0ICFpbXBvcnRhbnQ7XG4gICAgICAgIGZvbnQtd2VpZ2h0OiA2MDAgIWltcG9ydGFudDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAmID4gdWwubmVzdGVkLW1lbnUgPiBsaSA+IHVsID4gbGkge1xuICAgICAgbWFyZ2luLWJvdHRvbTogOHB4O1xuICAgIH1cblxuICAgICYgPiB1bC5uZXN0ZWQtbWVudSA+IGxpID4gdWwgPiBsaSA+IHVsIHtcbiAgICAgIC8vIE1hcmdpbiBpbiBmcm9tIHRoZSBpY29uIHRvIHRoZSBsYWJlbCBzdGFydCBvZiB0aGUgaGVhZGluZyBsaW5rXG4gICAgICBtYXJnaW4tbGVmdDogMjdweDtcblxuICAgICAgJiA+IGxpID4gYSB7XG4gICAgICAgIGZvbnQtc2l6ZTogMTNweDtcbiAgICAgICAgY29sb3I6ICM1MDU2NWU7XG4gICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7XG5cbiAgICAgIH1cbiAgICB9XG5cbiAgICAmID4gdWwubmVzdGVkLW1lbnUgPiBsaSA+IHVsID4gbGkgPiB1bCA+IGxpID4gdWwge1xuICAgICAgbWFyZ2luLWxlZnQ6IDE1cHg7XG4gICAgfVxuXG4gICAgJiA+IHVsI3Byby1uYXYubmVzdGVkLW1lbnUgPiBsaSA+IHVsID4gbGkgPiBhIHtcbiAgICAgICY6OmJlZm9yZSB7XG4gICAgICAgIGJhY2tncm91bmQtaW1hZ2U6IHVybCgnL2ltZy9wcm8vc2lkZWJhci1pY29uLXNwcml0ZS5wbmcnKTtcbiAgICAgICAgYmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdDtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7XG4gICAgICB9XG4gICAgfVxuXG4gICAgJiA+IHVsLm5lc3RlZC1tZW51ID4gbGkgPiB1bCA+IGxpID4gYSB7XG4gICAgICAmOjpiZWZvcmUge1xuICAgICAgICB3aWR0aDogMTZweDtcbiAgICAgICAgaGVpZ2h0OiAxNnB4O1xuICAgICAgICBiYWNrZ3JvdW5kLXNpemU6IDEwMCU7XG4gICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICAgICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbiAgICAgICAgbWFyZ2luLXJpZ2h0OiAxMHB4O1xuICAgICAgICBtYXJnaW4tdG9wOiAtMnB4O1xuICAgICAgICBjb250ZW50OiAnJztcbiAgICAgIH1cblxuICAgICAgbWFyZ2luLXRvcDogMDtcbiAgICAgIHRleHQtdHJhbnNmb3JtOiBub25lO1xuICAgICAgZm9udC1zaXplOiAxNHB4O1xuICAgICAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgICAgIGNvbG9yOiAjMjQyODJlO1xuICAgICAgbGV0dGVyLXNwYWNpbmc6IDBweDtcbiAgICB9XG5cbiAgICBAbWVkaWEgKG1heC13aWR0aDogJHNjcmVlbi14cy1tYXgpIHtcbiAgICAgIHBvc2l0aW9uOiBzdGF0aWMgIWltcG9ydGFudDtcblxuICAgICAgbWFyZ2luLWxlZnQ6IDIwcHg7XG4gICAgICAmID4gdWwubmVzdGVkLW1lbnUgPiBsaSA+IHVsID4gbGkgPiBhIHtcbiAgICAgICAgJjo6YmVmb3JlIHtcbiAgICAgICAgICBkaXNwbGF5OiBub25lO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLnByby1pbnRyby1saW5rOjpiZWZvcmUgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwcHggMHB4IH1cbiAgLnByby12aWV3LWxpbms6OmJlZm9yZSB7IGJhY2tncm91bmQtcG9zaXRpb246IDBweCAtNDhweCB9XG4gIC5wcm8tZGVwbG95LWxpbms6OmJlZm9yZSB7IGJhY2tncm91bmQtcG9zaXRpb246IDBweCAtNjRweCB9XG4gIC5wcm8tcGFja2FnZS1saW5rOjpiZWZvcmUgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwcHggLTgwcHggfVxuICAucHJvLW1vbml0b3JpbmctbGluazo6YmVmb3JlIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogMHB4IC05NnB4IH1cbiAgLnByby1kZXZhcHAtbGluazo6YmVmb3JlIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogMHB4IC0xMjhweCB9XG4gIC5wcm8tYWR2YW5jZWQtbGluazo6YmVmb3JlIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogMHB4IC0xNjBweCB9XG59XG5cbiNicmFuY2gtc21zLWJveCB7XG4gIHBhZGRpbmc6IDIwcHg7XG4gIGJvcmRlcjogMXB4IHNvbGlkICNlZWU7XG4gIGJvcmRlci1yYWRpdXM6IDNweDtcbiAgbWFyZ2luLWJvdHRvbTogMjBweDtcblxuICAuYnRuIHtcbiAgICBmb250LXNpemU6IDE0cHg7XG4gICAgbWFyZ2luLXRvcDogMTBweDtcbiAgfVxufVxuIiwiLnByb21vIHtcbiAgZm9udC1mYW1pbHk6ICRmb250LWZhbWlseS1laW5hO1xuICBwYWRkaW5nLXRvcDogNjRweDtcbiAgcGFkZGluZy1ib3R0b206IDY0cHg7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmM2Y1Zjk7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcblxuICAuY29udGFpbmVyIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGp1c3RpZnktY29udGVudDogZmxleC1lbmQ7XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcblxuICAgICY6OmJlZm9yZSxcbiAgICAmOjphZnRlciB7XG4gICAgICBkaXNwbGF5OiBub25lO1xuICAgIH1cbiAgfVxuXG4gIGhncm91cCB7XG4gICAgd2lkdGg6IDUwJTtcbiAgICBwYWRkaW5nLWxlZnQ6IDQycHg7XG4gIH1cblxuICBoMixcbiAgcCB7XG4gICAgbWF4LXdpZHRoOiA0NjBweDtcbiAgfVxuXG4gIGgyIHtcbiAgICBmb250LXNpemU6IDI0cHg7XG4gICAgbGV0dGVyLXNwYWNpbmc6IC0wLjAzZW07XG4gICAgZm9udC13ZWlnaHQ6IDcwMDtcbiAgICBtYXJnaW4tdG9wOiAwO1xuICB9XG5cbiAgcCB7XG4gICAgZm9udC1zaXplOiAxNnB4O1xuICAgIGxpbmUtaGVpZ2h0OiAyNHB4O1xuICAgIGNvbG9yOiAjNzg4NDk3O1xuICAgIG1hcmdpbi10b3A6IDE2cHg7XG4gICAgbWFyZ2luLWJvdHRvbTogMjBweDtcbiAgfVxuXG4gIC5idG4ge1xuICAgIGZvbnQtc2l6ZTogMTRweDtcbiAgICBmb250LXdlaWdodDogNzAwO1xuICAgIGJhY2tncm91bmQtY29sb3I6ICMyZDc5ZmY7XG5cbiAgICAmOmhvdmVyIHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6ICM0NDg2ZmI7XG4gICAgfVxuXG4gICAgJi53aGl0ZSB7XG4gICAgICBiYWNrZ3JvdW5kOiB3aGl0ZTtcblxuICAgICAgJjpob3ZlciB7XG4gICAgICAgIGJhY2tncm91bmQ6IHdoaXRlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gICYtLWRhcmsge1xuICAgIGJhY2tncm91bmQtY29sb3I6ICMxMTIwMzc7XG5cbiAgICBoMiB7XG4gICAgICBjb2xvcjogI2ZmZjtcbiAgICB9XG4gICAgcCB7XG4gICAgICBjb2xvcjogI2E4YjBiZTtcbiAgICB9XG4gIH1cblxuICAmX19pbGx1c3RyYXRpb24ge1xuICAgIHdpZHRoOiA0NTlweDtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgYm90dG9tOiAwO1xuICAgIGxlZnQ6IDUwJTtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTQ4MHB4KTtcbiAgICB6LWluZGV4OiAzO1xuICB9XG5cbiAgJi5wcm9tby1yZXZlcnNlZCAuY29udGFpbmVyIHtcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtc3RhcnQ7XG5cbiAgICBoZ3JvdXAge1xuICAgICAgZmxleDogMTtcbiAgICB9XG4gIH1cblxuICAucHJvbW9fX2ltYWdlIHtcbiAgICBtYXgtd2lkdGg6IDEwMCU7XG4gICAgbWFyZ2luOiAzMnB4IDE1cHg7XG4gIH1cblxuICAmLnByb21vLWJ0bnMsXG4gICYucHJvbW8tbmV3c2xldHRlciB7XG4gICAgaGdyb3VwIHtcbiAgICAgIGZsZXg6IDE7XG4gICAgICBwYWRkaW5nOiA0NnB4IDA7XG4gICAgfVxuXG4gICAgLmNvbnRhaW5lciB7XG4gICAgICBwYWRkaW5nLXRvcDogMzdweDtcbiAgICB9XG5cbiAgICBoMixcbiAgICBwIHtcbiAgICAgIG1heC13aWR0aDogMTAwJTtcbiAgICB9XG5cbiAgICBoMiB7XG4gICAgICBmb250LXNpemU6IDI4cHg7XG4gICAgICBmb250LXdlaWdodDogNjAwO1xuICAgICAgbWFyZ2luLWJvdHRvbTogOHB4O1xuICAgIH1cblxuICAgIHAge1xuICAgICAgbWFyZ2luLXRvcDogOHB4O1xuICAgICAgZm9udC1zaXplOiAyMHB4O1xuICAgICAgbGV0dGVyLXNwYWNpbmc6IC0uMDMxZW07XG5cbiAgICAgICY6bGFzdC1jaGlsZCB7XG4gICAgICAgIG1hcmdpbi1ib3R0b206IDA7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaDEsXG4gICAgaDIsXG4gICAgaDMge1xuICAgICAgY29sb3I6ICRibHVlO1xuICAgIH1cblxuICAgIC5idG5zIHtcbiAgICAgIG1hcmdpbi1sZWZ0OiAyNHB4O1xuICAgIH1cblxuICAgIEBtZWRpYSAobWF4LXdpZHRoOiAkc2NyZWVuLXhzLW1heCkge1xuICAgICAgcGFkZGluZy1ib3R0b206IDY0cHg7XG5cbiAgICAgIC5idG5zIHtcbiAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgICAgfVxuXG4gICAgICAuYnRuIHtcbiAgICAgICAgbWFyZ2luLWJvdHRvbTogMTJweDtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAmLnByb21vLW5ld3NsZXR0ZXIge1xuICAgIGJhY2tncm91bmQ6IHdoaXRlO1xuXG4gICAgLmNvbnRhaW5lciB7XG4gICAgICBwYWRkaW5nLXRvcDogNnB4O1xuICAgIH1cblxuICAgIHN0cm9uZyB7XG4gICAgICBmb250LXdlaWdodDogNjAwO1xuICAgIH1cblxuICAgIC5idG5zIHtcbiAgICAgIGZsZXg6IDAgMSA0NzZweDtcblxuICAgICAgQG1lZGlhIChtYXgtd2lkdGg6ICRzY3JlZW4tc20tbWF4KSB7XG4gICAgICAgIGZsZXg6IDA7XG4gICAgICB9XG5cbiAgICAgIEBtZWRpYSAobWF4LXdpZHRoOiAkc2NyZWVuLXhzLW1heCkge1xuICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgICAgbWF4LXdpZHRoOiA0NzZweDtcbiAgICAgICAgbWFyZ2luLWxlZnQ6IDA7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgQG1lZGlhIChtYXgtd2lkdGg6ICRzY3JlZW4tc20tbWF4KSB7XG4gICAgJl9faWxsdXN0cmF0aW9uIHtcbiAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgtNDAwcHgpO1xuICAgIH1cbiAgfVxuXG4gIEBtZWRpYSAobWF4LXdpZHRoOiAkc2NyZWVuLXhzLW1heCkge1xuICAgIHBhZGRpbmctYm90dG9tOiAyNzJweDtcblxuICAgICYucHJvbW8taW5saW5lIHtcbiAgICAgIHBhZGRpbmctYm90dG9tOiA2NHB4O1xuICAgIH1cblxuICAgIC5jb250YWluZXIge1xuICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgIH1cblxuICAgIGhncm91cCB7XG4gICAgICB3aWR0aDogMTAwJTtcbiAgICAgIHBhZGRpbmc6IDA7XG4gICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgfVxuXG4gICAgaDIsXG4gICAgcCB7XG4gICAgICBtYXJnaW4tbGVmdDogYXV0bztcbiAgICAgIG1hcmdpbi1yaWdodDogYXV0bztcbiAgICB9XG5cbiAgICAmX19pbGx1c3RyYXRpb24ge1xuICAgICAgd2lkdGg6IDM4MHB4O1xuICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC0xOTBweCk7XG4gICAgfVxuICB9XG5cbiAgJi0tdHJpLWN0YSB7XG4gICAgYmFja2dyb3VuZDogI0Y2RjhGQjtcblxuICAgIHVsIHtcbiAgICAgIGxpc3Qtc3R5bGU6IG5vbmU7XG4gICAgICBsZXR0ZXItc3BhY2luZzogLS4wMWVtO1xuICAgIH1cblxuICAgIGxpIHtcbiAgICAgIG1hcmdpbjogMjRweCA0OHB4O1xuICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICAgd2lkdGg6IGNhbGMoMzMuMyUgLSA2NHB4KTtcblxuICAgICAgJjo6YWZ0ZXIge1xuICAgICAgICBjb250ZW50OiAnJztcbiAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICByaWdodDogMDtcbiAgICAgICAgcmlnaHQ6IC00OHB4O1xuICAgICAgICB0b3A6IGNhbGMoNTAlIC0gNDhweCk7XG4gICAgICAgIGhlaWdodDogOTZweDtcbiAgICAgICAgYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjREVFM0VBO1xuICAgICAgfVxuXG4gICAgICAmOmZpcnN0LWNoaWxkIHtcbiAgICAgICAgbWFyZ2luLWxlZnQ6IDA7XG4gICAgICB9XG5cbiAgICAgICY6bGFzdC1jaGlsZCB7XG4gICAgICAgIG1hcmdpbi1yaWdodDogMDtcblxuICAgICAgICAmOjphZnRlciB7XG4gICAgICAgICAgZGlzcGxheTogbm9uZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGg0IHtcbiAgICAgIGZvbnQtc2l6ZTogMjBweDtcbiAgICAgIGNvbG9yOiBibGFjaztcbiAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7XG4gICAgfVxuXG4gICAgcCB7XG4gICAgICBmb250LWZhbWlseTogJGZvbnQtZmFtaWx5LWludGVyO1xuICAgICAgbGluZS1oZWlnaHQ6IDI5cHg7XG4gICAgICBmb250LXNpemU6IDE2cHg7XG4gICAgICBjb2xvcjogIzczODQ5QTtcbiAgICB9XG5cblxuXG4gICAgQG1lZGlhIChtYXgtd2lkdGg6ICRzY3JlZW4tc20tbWF4KSB7XG4gICAgICBwYWRkaW5nLWJvdHRvbTogNjRweDtcblxuICAgICAgbGkge1xuICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgICAgbWFyZ2luOiAwO1xuICAgICAgICBwYWRkaW5nOiA0OHB4IDE2cHg7XG4gICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjtcblxuICAgICAgICAmOjphZnRlciB7XG4gICAgICAgICAgZGlzcGxheTogbm9uZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHAge1xuICAgICAgICAgIG1hcmdpbjogMCAwIDFlbTtcbiAgICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgICAgIH1cblxuICAgICAgICAuYnRuIHtcbiAgICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuIiwiLm1vYmlsZS1uYXYge1xuICBmb250LWZhbWlseTogJGZvbnQtZmFtaWx5LWVpbmE7XG4gIHRyYW5zaXRpb246IG9wYWNpdHkgMC40cztcbiAgcG9zaXRpb246IGZpeGVkO1xuICB6LWluZGV4OiA5OTk5OTtcbiAgdG9wOiAwO1xuICByaWdodDogMDtcbiAgbGVmdDogMDtcbiAgYm90dG9tOiAwO1xuICBiYWNrZ3JvdW5kOiAjZmZmO1xuICBkaXNwbGF5OiBub25lO1xuICBvdmVyZmxvdzogdG91Y2g7XG5cbiAgJi5vcGVuIHtcbiAgICBhbmltYXRpb24tbmFtZTogcmV2ZWFsSW47XG4gICAgYW5pbWF0aW9uLWR1cmF0aW9uOiAwLjJzO1xuICAgIGFuaW1hdGlvbi1maWxsLW1vZGU6IGZvcndhcmRzO1xuICAgIGFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IGN1YmljLWJlemllcigwLjE5LCAxLCAwLjIyLCAxKTtcbiAgfVxuXG4gICYuY2xvc2VkIHtcbiAgICBhbmltYXRpb24tbmFtZTogcmV2ZWFsT3V0O1xuICAgIGFuaW1hdGlvbi1kdXJhdGlvbjogMC4ycztcbiAgICBhbmltYXRpb24tZmlsbC1tb2RlOiBmb3J3YXJkcztcbiAgfVxuXG4gIEBrZXlmcmFtZXMgcmV2ZWFsSW4ge1xuICAgIGZyb20ge1xuICAgICAgb3BhY2l0eTogMDtcbiAgICB9XG4gICAgdG8ge1xuICAgICAgb3BhY2l0eTogMTtcbiAgICB9XG4gIH1cblxuICBAa2V5ZnJhbWVzIHJldmVhbE91dCB7XG4gICAgZnJvbSB7XG4gICAgICBvcGFjaXR5OiAxO1xuICAgIH1cbiAgICB0byB7XG4gICAgICBvcGFjaXR5OiAwO1xuICAgIH1cbiAgfVxufVxuXG4ubW9iaWxlLW5hdl9fd3JhcHBlciB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgd2lkdGg6IDEwMCU7XG4gIGhlaWdodDogMTAwdmg7XG4gIG92ZXJmbG93OiBhdXRvO1xuICAtd2Via2l0LW92ZXJmbG93LXNjcm9sbGluZzogdG91Y2g7XG59XG5cbi5tb2JpbGUtbmF2X19tZW51IHtcbiAgbWFyZ2luOiAwO1xuICBwYWRkaW5nOiAwO1xuICAvL2RlYWwgd2l0aCBpZSBlZGdlIGJ1ZyBhbHdheXMgcmVuZGVyaW5nIGJ1bGxldHNcbiAgbGlzdC1zdHlsZTogbm9uZTtcbiAgbGlzdC1zdHlsZS1pbWFnZTogdXJsKGRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQUVBQUFBQkNBUUFBQUMxSEF3Q0FBQUFDMGxFUVZSNDJtTmtZQUFBQUFZQUFqQ0IwQzhBQUFBQVNVVk9SSzVDWUlJPSk7XG4gIGxpc3Qtc3R5bGUtdHlwZTogbm9uZTtcbiAgbWF4LXdpZHRoOiAyNzBweDtcbiAgbWFyZ2luLWxlZnQ6IGF1dG87XG4gIG1hcmdpbi1yaWdodDogYXV0bztcbiAgcGFkZGluZy10b3A6IDgwcHg7XG4gIHBhZGRpbmctYm90dG9tOiAxNjBweDtcblxuICBoNiB7XG4gICAgZm9udC1zaXplOiAxMXB4O1xuICAgIGZvbnQtd2VpZ2h0OiA3MDA7XG4gICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcbiAgICBsZXR0ZXItc3BhY2luZzogMC4wNWVtO1xuICAgIGNvbG9yOiAjYjBiY2NmO1xuICB9XG5cbiAgLm9wZW4gJiB7XG4gICAgYW5pbWF0aW9uLW5hbWU6IG5hdk1lbnVJbjtcbiAgICBhbmltYXRpb24tZHVyYXRpb246IDAuMnM7XG4gICAgYW5pbWF0aW9uLWZpbGwtbW9kZTogZm9yd2FyZHM7XG4gICAgYW5pbWF0aW9uLWRlbGF5OiAwLjFzO1xuICAgIG9wYWNpdHk6IDA7XG4gIH1cblxuICAuY2xvc2VkICYge1xuICAgIGFuaW1hdGlvbi1uYW1lOiBuYXZNZW51T3V0O1xuICAgIGFuaW1hdGlvbi1kdXJhdGlvbjogMC4ycztcbiAgICBhbmltYXRpb24tZmlsbC1tb2RlOiBmb3J3YXJkcztcbiAgfVxuXG4gIEBrZXlmcmFtZXMgbmF2TWVudUluIHtcbiAgICBmcm9tIHtcbiAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtNnB4KTtcbiAgICAgIG9wYWNpdHk6IDA7XG4gICAgfVxuICAgIHRvIHtcbiAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgwKTtcbiAgICAgIG9wYWNpdHk6IDE7XG4gICAgfVxuICB9XG5cbiAgQGtleWZyYW1lcyBuYXZNZW51T3V0IHtcbiAgICBmcm9tIHtcbiAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgwKTtcbiAgICAgIG9wYWNpdHk6IDE7XG4gICAgfVxuICAgIHRvIHtcbiAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtNnB4KTtcbiAgICAgIG9wYWNpdHk6IDA7XG4gICAgfVxuICB9XG59XG5cbi5tb2JpbGUtbmF2LS1lbnRlcnByaXNlIC5tb2JpbGUtbmF2X19tZW51IHtcbiAgaGVpZ2h0OiAxMDAlO1xuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICBkaXNwbGF5OiBmbGV4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgcGFkZGluZy10b3A6IDA7XG4gIHBhZGRpbmctYm90dG9tOiAwO1xufVxuXG4ubW9iaWxlLW5hdl9fbWVudWl0ZW0ge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIGZvbnQtc2l6ZTogMjRweDtcbiAgbGV0dGVyLXNwYWNpbmc6IC0wLjAyZW07XG4gIGxpbmUtaGVpZ2h0OiAxO1xuICBmb250LXdlaWdodDogNjAwO1xuICBtYXJnaW4tdG9wOiAyOHB4O1xuXG4gICYgKyBoNiB7XG4gICAgbWFyZ2luLXRvcDogNDZweDtcbiAgfVxuXG4gIGEge1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIGNvbG9yOiAjMTMxOTI0O1xuICAgIC8vIHBhZGRpbmctbGVmdDogMzZweDtcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG5cbiAgICAvLyAmOjphZnRlcixcbiAgICAvLyAmOjpiZWZvcmUge1xuICAgIC8vICAgYmFja2dyb3VuZDogdXJsKCcvaW1nL2Ryb3Bkb3duLWljb25zLXhzLnBuZycpIDAgMCBuby1yZXBlYXQ7XG4gICAgLy8gICBiYWNrZ3JvdW5kLXNpemU6IDI0cHg7XG4gICAgLy8gICBjb250ZW50OiAnJztcbiAgICAvLyAgIHdpZHRoOiAyNHB4O1xuICAgIC8vICAgaGVpZ2h0OiAyNHB4O1xuICAgIC8vICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIC8vICAgbGVmdDogMDtcbiAgICAvLyAgIHRvcDogNTAlO1xuICAgIC8vICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC01MCUpO1xuICAgIC8vICAgdHJhbnNpdGlvbjogMC4ycyBvcGFjaXR5O1xuICAgIC8vIH1cbiAgICAvL1xuICAgIC8vICY6OmFmdGVyIHtcbiAgICAvLyAgIG9wYWNpdHk6IDA7XG4gICAgLy8gfVxuICAgIC8vXG4gICAgLy8gJjpob3Zlcjo6YWZ0ZXIge1xuICAgIC8vICAgb3BhY2l0eTogMTtcbiAgICAvLyB9XG4gIH1cblxuICAmLnBybyBhIHtcbiAgICAmOjpiZWZvcmUge1xuICAgICAgYmFja2dyb3VuZC1wb3NpdGlvbjogMCAwO1xuICAgIH1cblxuICAgICY6OmFmdGVyIHtcbiAgICAgIGJhY2tncm91bmQtcG9zaXRpb246IDAgLTI0cHg7XG4gICAgfVxuICB9XG5cbiAgJi5lbnRlcnByaXNlIGEge1xuICAgICY6OmJlZm9yZSB7XG4gICAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwIDE0ICogLTI0cHg7XG4gICAgfVxuXG4gICAgJjo6YWZ0ZXIge1xuICAgICAgYmFja2dyb3VuZC1wb3NpdGlvbjogMCAxNSAqIC0yNHB4O1xuICAgIH1cbiAgfVxuXG4gICYuZnJhbWV3b3JrIGEge1xuICAgICY6OmJlZm9yZSB7XG4gICAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwIDIyICogLTI0cHg7XG4gICAgfVxuXG4gICAgJjo6YWZ0ZXIge1xuICAgICAgYmFja2dyb3VuZC1wb3NpdGlvbjogMCAyMyAqIC0yNHB4O1xuICAgIH1cbiAgfVxuXG4gICYuc3RlbmNpbCBhIHtcbiAgICAmOjpiZWZvcmUge1xuICAgICAgYmFja2dyb3VuZC1wb3NpdGlvbjogMCA0NCAqIC0yNHB4O1xuICAgIH1cblxuICAgICY6OmFmdGVyIHtcbiAgICAgIGJhY2tncm91bmQtcG9zaXRpb246IDAgNDUgKiAtMjRweDtcbiAgICB9XG4gIH1cblxuICAmLmNhcGFjaXRvciBhIHtcbiAgICAmOjpiZWZvcmUge1xuICAgICAgYmFja2dyb3VuZC1wb3NpdGlvbjogMCA0NiAqIC0yNHB4O1xuICAgIH1cblxuICAgICY6OmFmdGVyIHtcbiAgICAgIGJhY2tncm91bmQtcG9zaXRpb246IDAgNDcgKiAtMjRweDtcbiAgICB9XG4gIH1cblxuICAmLmlvbmljb24gYSB7XG4gICAgJjo6YmVmb3JlIHtcbiAgICAgIGJhY2tncm91bmQtcG9zaXRpb246IDAgNDggKiAtMjRweDtcbiAgICB9XG5cbiAgICAmOjphZnRlciB7XG4gICAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwIDQ5ICogLTI0cHg7XG4gICAgfVxuICB9XG5cbiAgJi5mcmFtZXdvcmstZG9jcyBhIHtcbiAgICAmOjpiZWZvcmUge1xuICAgICAgYmFja2dyb3VuZC1wb3NpdGlvbjogMCA2MCAqIC0yNHB4O1xuICAgIH1cblxuICAgICY6OmFmdGVyIHtcbiAgICAgIGJhY2tncm91bmQtcG9zaXRpb246IDAgNjEgKiAtMjRweDtcbiAgICB9XG4gIH1cblxuICAmLnByby1kb2NzIGEge1xuICAgICY6OmJlZm9yZSB7XG4gICAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwIDIgKiAtMjRweDtcbiAgICB9XG5cbiAgICAmOjphZnRlciB7XG4gICAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwIDMgKiAtMjRweDtcbiAgICB9XG4gIH1cbn1cblxuLm1vYmlsZS1uYXYtLWVudGVycHJpc2UgLm1vYmlsZS1uYXZfX21lbnVpdGVtIHtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICBmb250LXNpemU6IDI4cHg7XG4gIG1hcmdpbi10b3A6IDA7XG5cbiAgJiArIC5tb2JpbGUtbmF2X19tZW51aXRlbSB7XG4gICAgbWFyZ2luLXRvcDogMzJweDtcbiAgfVxufVxuXG4ubW9iaWxlLW5hdi0tZW50ZXJwcmlzZSAubW9iaWxlLW5hdl9fbWVudWl0ZW0tLWN0YSBhIHtcbiAgY29sb3I6ICMzODgwRkY7XG59XG5cbi5tb2JpbGUtbmF2X19tZW51aXRlbS0tc21hbGwge1xuICBmb250LXNpemU6IDE4cHg7XG4gIGxpbmUtaGVpZ2h0OiAxO1xuICBmb250LXdlaWdodDogNjAwO1xuICBtYXJnaW4tdG9wOiAyNnB4O1xuXG4gIC5tb2JpbGUtbmF2X19tZW51aXRlbSArICYge1xuICAgIG1hcmdpbi10b3A6IDU2cHg7XG4gIH1cblxuICBhIHtcbiAgICB3aWR0aDogMTAwJTtcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgY29sb3I6ICM1OTc3YTg7XG4gIH1cbn1cblxuLm1vYmlsZS1uYXZfX2xvZ28ge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHRvcDogOXB4O1xuICBsZWZ0OiAxM3B4O1xuICBmaWxsOiAjMzg4MEZGO1xuICB6LWluZGV4OiAyO1xuICB3aWR0aDogMzJweDtcbiAgaGVpZ2h0OiAzMnB4O1xuICBtYXJnaW46IDA7XG59XG5cbi5tb2JpbGUtbmF2LS1lbnRlcnByaXNlIC5tb2JpbGUtbmF2X19sb2dvIHtcbiAgZmlsbDogIzAwMDtcbn1cblxuLm1vYmlsZS1uYXZfX2Nsb3NlIHtcbiAgY3Vyc29yOiBwb2ludGVyO1xuICBwb3NpdGlvbjogZml4ZWQ7XG4gIHRvcDogMTVweDtcbiAgcmlnaHQ6IDE1cHg7XG4gIG9wYWNpdHk6IDAuNDtcbiAgdHJhbnNpdGlvbjogb3BhY2l0eSAwLjNzO1xuICB6LWluZGV4OiAyO1xuXG4gICY6aG92ZXIge1xuICAgIG9wYWNpdHk6IDE7XG4gIH1cblxuICBzdmcge1xuICAgIHdpZHRoOiAxNHB4O1xuICAgIGhlaWdodDogMTRweDtcbiAgICBmaWxsOiAjNTk3N2E4O1xuICAgIG1hcmdpbjogMDtcbiAgfVxufVxuXG4ubW9iaWxlLW5hdl9fZm9vdGVyIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2Y2ZjhmZTtcbiAgcG9zaXRpb246IGZpeGVkO1xuICBsZWZ0OiAwO1xuICBib3R0b206IDA7XG4gIHJpZ2h0OiAwO1xuICBwYWRkaW5nOiAxNHB4O1xuICBkaXNwbGF5OiBmbGV4O1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtZW5kO1xuXG4gIGEge1xuICAgIGZvbnQtd2VpZ2h0OiA3MDA7XG4gIH1cblxuICBhICsgLmJ0biB7XG4gICAgbWFyZ2luLWxlZnQ6IDEycHg7XG4gIH1cblxuICAmID4gZGl2IHtcbiAgfVxuXG4gIC5idG4ge1xuICAgIGZvbnQtc2l6ZTogMTVweDtcbiAgICBmb250LXdlaWdodDogNzAwO1xuICAgIHBhZGRpbmc6IDEycHggMTRweCAxMHB4O1xuICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG4gICAgYm9yZGVyLXJhZGl1czogNHB4O1xuICAgIG1hcmdpbi1yaWdodDogMDtcbiAgfVxuXG4gIC5vcGVuICYge1xuICAgIGFuaW1hdGlvbi1uYW1lOiBuYXZGb290ZXJJbjtcbiAgICBhbmltYXRpb24tZHVyYXRpb246IDAuNnM7XG4gICAgYW5pbWF0aW9uLWZpbGwtbW9kZTogZm9yd2FyZHM7XG4gICAgYW5pbWF0aW9uLWRlbGF5OiAwLjFzO1xuICAgIGFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IGN1YmljLWJlemllcigwLjE5LCAxLCAwLjIyLCAxKTtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMTAwJSk7XG4gICAgb3BhY2l0eTogMDtcbiAgfVxuXG4gIC5jbG9zZWQgJiB7XG4gICAgYW5pbWF0aW9uLW5hbWU6IG5hdkZvb3Rlck91dDtcbiAgICBhbmltYXRpb24tZHVyYXRpb246IDAuMnM7XG4gICAgYW5pbWF0aW9uLWZpbGwtbW9kZTogZm9yd2FyZHM7XG4gIH1cblxuICBAa2V5ZnJhbWVzIG5hdkZvb3RlckluIHtcbiAgICBmcm9tIHtcbiAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgxMDAlKTtcbiAgICAgIG9wYWNpdHk6IDA7XG4gICAgfVxuICAgIHRvIHtcbiAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgwKTtcbiAgICAgIG9wYWNpdHk6IDE7XG4gICAgfVxuICB9XG5cbiAgQGtleWZyYW1lcyBuYXZGb290ZXJPdXQge1xuICAgIGZyb20ge1xuICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDApO1xuICAgICAgb3BhY2l0eTogMTtcbiAgICB9XG4gICAgdG8ge1xuICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDZweCk7XG4gICAgICBvcGFjaXR5OiAwO1xuICAgIH1cbiAgfVxufVxuXG4ubW9iaWxlLW5hdi0tZW50ZXJwcmlzZSAubW9iaWxlLW5hdl9fZm9vdGVyIHtcbiAgYmFja2dyb3VuZDogI0Y5RjlGOTtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG5cbiAgYSB7XG4gICAgbGluZS1oZWlnaHQ6IG5vcm1hbDtcbiAgICBmb250LXdlaWdodDogNjAwO1xuICAgIGZvbnQtc2l6ZTogMTFweDtcbiAgICBsZXR0ZXItc3BhY2luZzogMC4wNWVtO1xuICAgIGNvbG9yOiAjMzg4MEZGO1xuICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XG4gIH1cblxuICBpb24taWNvbiB7XG4gICAgY29sb3I6IHJnYmEoNTYsIDEyOCwgMjU1LCAwLjcpO1xuICAgIGZvbnQtc2l6ZTogMTJweDtcbiAgICBoZWlnaHQ6IDEycHg7XG4gICAgd2lkdGg6IDEycHg7XG4gICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgIHZlcnRpY2FsLWFsaWduOiAtMnB4O1xuICAgIG9wYWNpdHk6IDA7XG4gICAgdHJhbnNpdGlvbjogLjJzIHRyYW5zZm9ybSBlYXNlLCAuMnMgb3BhY2l0eTtcbiAgICBtYXJnaW4tcmlnaHQ6IDRweDtcblxuICAgICYuaHlkcmF0ZWQge1xuICAgICAgb3BhY2l0eTogMTtcbiAgICB9XG4gIH1cbn1cbiIsIi5yZXNwb25zaXZlLWRvY3MtY29udGFpbmVyLmRvY3MtY29udGFpbmVyIHtcbiAgcGFkZGluZy10b3A6IDUwcHg7XG5cbiAgLnJlc3BvbnNpdmUtc2lkZS1uYXYge1xuICAgIHdpZHRoOiAzMDBweDtcbiAgICBwb3NpdGlvbjogc3RhdGljO1xuICAgIG92ZXJmbG93LXk6IGF1dG87XG5cbiAgICAmLmFmZml4LXRvcCB7XG4gICAgICBwb3NpdGlvbjogc3RhdGljO1xuICAgICAgdG9wOiAxODJweDtcbiAgICB9XG5cbiAgICAmLmFmZml4IHtcbiAgICAgIHBvc2l0aW9uOiBmaXhlZDtcbiAgICAgIHRvcDogMTVweDtcbiAgICB9XG5cbiAgICAmLmFmZml4LWJvdHRvbSB7XG4gICAgICBwb3NpdGlvbjogZml4ZWQ7XG4gICAgICB0b3A6IDE1cHggIWltcG9ydGFudDtcbiAgICB9XG5cbiAgICAvL3dpZHRoOiAxMDAlO1xuXG4gICAgLm5lc3RlZC1tZW51IHtcbiAgICAgIHBhZGRpbmctdG9wOiAwO1xuICAgICAgcGFkZGluZy1sZWZ0OiAwO1xuICAgIH1cbiAgfVxuXG4gIG1haW4ge1xuICAgIG1hcmdpbi1sZWZ0OiAwO1xuICAgIHBhZGRpbmctdG9wOiAwO1xuXG4gICAgY29sb3I6ICMzNTM5NDA7XG4gICAgZm9udC13ZWlnaHQ6IDQwMDtcbiAgICBmb250LXNpemU6IDE1cHg7XG4gICAgbGluZS1oZWlnaHQ6IDI2cHg7XG5cbiAgICBwIHtcbiAgICAgIGNvbG9yOiAjMzUzOTQwO1xuICAgICAgbWFyZ2luOiAxLjJlbSAwIDEuNmVtO1xuICAgICAgZm9udC13ZWlnaHQ6IDQwMDtcbiAgICAgIGZvbnQtc2l6ZTogMTVweDtcbiAgICAgIGxpbmUtaGVpZ2h0OiAyNnB4O1xuICAgIH1cblxuICAgIGgxIHtcbiAgICAgIGNvbG9yOiAjMjQyODJlO1xuICAgICAgbGluZS1oZWlnaHQ6IDEuNGVtO1xuICAgICAgbWFyZ2luOiAyZW0gMCAxZW07XG4gICAgICBmb250LXNpemU6IDI2cHg7XG4gICAgICBmb250LXdlaWdodDogNzAwO1xuICAgICAgbGV0dGVyLXNwYWNpbmc6IC0wLjAyZW07XG5cbiAgICAgICY6Zmlyc3QtY2hpbGQge1xuICAgICAgICBtYXJnaW4tdG9wOiAwO1xuICAgICAgfVxuICAgIH1cblxuICAgIGgyIHtcbiAgICAgIHBhZGRpbmctdG9wOiAwZW07XG4gICAgfVxuICB9XG59XG4iLCIucmVzb3VyY2UtY2FyZC1saXN0IHtcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC13cmFwOiB3cmFwO1xuICBtYXJnaW4tbGVmdDogLTE2cHg7XG4gIG1hcmdpbi1yaWdodDogLTE2cHg7XG59XG5cbi5yZXNvdXJjZS1jYXJkIHtcbiAgcGFkZGluZzogMTZweDtcbiAgZm9udC1mYW1pbHk6ICRmb250LWZhbWlseS1laW5hO1xufVxuXG4ucmVzb3VyY2UtY2FyZC1saXN0LS10aGlyZCAucmVzb3VyY2UtY2FyZCB7XG4gIHdpZHRoOiAzMy4zMyU7XG59XG5cbi5yZXNvdXJjZS1jYXJkLWxpc3QtLXF1YXJ0ZXIgLnJlc291cmNlLWNhcmQge1xuICB3aWR0aDogMjUlO1xufVxuXG5AbWVkaWEgKG1heC13aWR0aDogJHNjcmVlbi1tZC1taW4pIHtcbiAgLnJlc291cmNlLWNhcmQtbGlzdCB7XG4gICAgbWFyZ2luLWxlZnQ6IC0xMnB4O1xuICAgIG1hcmdpbi1yaWdodDogLTEycHg7XG4gIH1cblxuICAucmVzb3VyY2UtY2FyZCB7XG4gICAgcGFkZGluZzogMTJweDtcbiAgfVxuXG4gIC5yZXNvdXJjZS1jYXJkLWxpc3QtLXRoaXJkIC5yZXNvdXJjZS1jYXJkIHtcbiAgICB3aWR0aDogMTAwJTtcbiAgfVxuXG4gIC5yZXNvdXJjZS1jYXJkLWxpc3QtLXF1YXJ0ZXIgLnJlc291cmNlLWNhcmQge1xuICAgIHdpZHRoOiA1MCU7XG4gIH1cbn1cblxuQG1lZGlhIChtYXgtd2lkdGg6ICRzY3JlZW4tc20tbWluKSB7XG4gIC5yZXNvdXJjZS1jYXJkLWxpc3Qge1xuICAgIG1hcmdpbi1sZWZ0OiAtOHB4O1xuICAgIG1hcmdpbi1yaWdodDogLThweDtcbiAgfVxuXG4gIC5yZXNvdXJjZS1jYXJkIHtcbiAgICBwYWRkaW5nOiA4cHg7XG4gIH1cbn1cblxuQG1lZGlhIChtYXgtd2lkdGg6IDUwMHB4KSB7XG4gIC5yZXNvdXJjZS1jYXJkLWxpc3QtLXF1YXJ0ZXIge1xuICAgIC5yZXNvdXJjZS1jYXJkIHtcbiAgICAgIHdpZHRoOiAxMDAlO1xuICAgIH1cbiAgfVxufVxuXG4ucmVzb3VyY2UtY2FyZF9faW5uZXIge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIGhlaWdodDogMTAwJTtcbn1cblxuLnJlc291cmNlLWNhcmQge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIHRyYW5zaXRpb246IHRyYW5zZm9ybSAwLjNzO1xuICBoZWlnaHQ6IDI3MnB4O1xuXG4gIGEge1xuICAgIHRyYW5zaXRpb246IGJveC1zaGFkb3cgMC40cztcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgICB3aWR0aDogMTAwJTtcbiAgICBoZWlnaHQ6IDEwMCU7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIHRvcDogMDtcbiAgICBsZWZ0OiAwO1xuICAgIHBhZGRpbmc6IDE4cHggMjJweDtcbiAgICBib3JkZXItcmFkaXVzOiAxNnB4O1xuICAgIGJhY2tncm91bmQtY29sb3I6IHJnYigzNiwgNDAsIDQ2KTtcbiAgICBib3gtc2hhZG93OiBcbiAgICAgIDBweCA4cHggMTZweCAwcHggcmdiYSgwLCAwLCAwLCAwLjEpLCBcbiAgICAgIDBweCAycHggNHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMDgpO1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG4gICAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xuICAgIGJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7XG4gICAgYmFja2dyb3VuZC1zaXplOiBhdXRvIDEwMCU7XG4gICAgYmFja2dyb3VuZC1wb3NpdGlvbjogYm90dG9tIHJpZ2h0O1xuXG4gICAgLnRpdGxlIHtcbiAgICAgIGNvbG9yOiAjZmZmO1xuICAgICAgZm9udC13ZWlnaHQ6IDcwMDtcbiAgICAgIGZvbnQtc2l6ZTogMjBweDtcbiAgICAgIGxpbmUtaGVpZ2h0OiAxLjRlbTtcbiAgICAgIG1hcmdpbi10b3A6IDA7XG4gICAgICBtYXgtd2lkdGg6IDM1MHB4O1xuICAgIH1cblxuICAgIC5leWVicm93IHtcbiAgICAgIGZvbnQtc2l6ZTogMTBweDtcbiAgICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XG4gICAgICBsZXR0ZXItc3BhY2luZzogMC4xZW07XG4gICAgICBjb2xvcjogcmdiYSgjZmZmLCAwLjUpO1xuICAgICAgZm9udC13ZWlnaHQ6IDcwMDtcbiAgICAgIG1hcmdpbi1ib3R0b206IDZweDtcbiAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICB9XG5cbiAgICAuYWN0aW9uIHtcbiAgICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XG4gICAgICBmb250LXNpemU6IDE0cHg7XG4gICAgICBmb250LXdlaWdodDogYm9sZDtcbiAgICAgIGxldHRlci1zcGFjaW5nOiAwLjA4ZW07XG4gICAgICBjb2xvcjogI2ZmZjtcbiAgICB9XG4gIH1cblxuICAmOmhvdmVyIHtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTFweCk7XG4gIH1cblxuICAmOmhvdmVyIGEge1xuICAgIGJveC1zaGFkb3c6IDBweCAxMnB4IDI0cHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xKTtcbiAgfVxufVxuXG4ucmVzb3VyY2UtY2FyZC0tbGlnaHQge1xuICBhIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xuXG4gICAgLnRpdGxlIHtcbiAgICAgIGNvbG9yOiByZ2IoMzYsIDQwLCA0Nik7XG4gICAgfVxuICBcbiAgICAuZXllYnJvdyB7XG4gICAgICBjb2xvcjogcmdiYSgjMDAwLCAwLjUpO1xuICAgIH1cbiAgXG4gICAgLmFjdGlvbiB7XG4gICAgICBjb2xvcjogJGJsdWU7XG4gICAgfVxuICB9XG59XG5cbi5yZXNvdXJjZS1jYXJkLWxhcmdlIHtcbiAgYSB7XG4gICAgLnRpdGxlIHtcbiAgICAgIGZvbnQtc2l6ZTogMjRweDtcbiAgICAgIGxpbmUtaGVpZ2h0OiAzMnB4O1xuICAgIH1cblxuICAgIC5leWVicm93IHtcbiAgICAgIG1hcmdpbi1ib3R0b206IDE2cHg7XG4gICAgfVxuXG4gICAgLmFjdGlvbjo6YWZ0ZXIge1xuICAgICAgdHJhbnNpdGlvbjogdHJhbnNmb3JtIDAuM3M7XG4gICAgICBmb250LWZhbWlseTogJ0lvbmljb25zJztcbiAgICAgIGNvbnRlbnQ6ICdcXGYyODcnO1xuICAgICAgZm9udC1zaXplOiAxNnB4O1xuICAgICAgbWFyZ2luLWxlZnQ6IDZweDtcbiAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICB9XG5cbiAgICAmOmhvdmVyIC5hY3Rpb246OmFmdGVyIHtcbiAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlM2QoM3B4LCAwLCAwKTtcbiAgICB9XG4gIH1cbn1cbiIsIi5tb2RhbCB7XG4gIC5jb250cm9sLWxhYmVsIHtcbiAgICBmb250LXdlaWdodDogNjAwO1xuICB9XG5cbiAgLmZvcm0tY29udHJvbCB7XG4gICAgZm9udC13ZWlnaHQ6IDUwMDtcbiAgfVxuXG4gIC5jbG9zZSxcbiAgLmdvLWJhY2sge1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICB0b3A6IC0xMHB4O1xuICAgIHJpZ2h0OiAtMTBweDtcbiAgICBiYWNrZ3JvdW5kOiB3aGl0ZTtcbiAgICBib3JkZXI6IDA7XG4gICAgYm9yZGVyLXJhZGl1czogNTAlO1xuICAgIGhlaWdodDogMzBweDtcbiAgICB3aWR0aDogMzBweDtcbiAgICBib3gtc2hhZG93OiAxcHggMXB4IDVweCByZ2JhKDAsMCwwLC41KTtcbiAgICBvdXRsaW5lOiBub25lO1xuXG4gICAgJjo6YmVmb3JlIHtcbiAgICAgIGZvbnQtZmFtaWx5OiAnSW9uaWNvbnMnO1xuICAgICAgY29udGVudDogJ1xcZjJjMCc7XG4gICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgIGNvbG9yOiAkZGFyay1ncmV5O1xuICAgICAgZm9udC1zaXplOiAyMHB4O1xuICAgIH1cblxuICAgIHNwYW4ge1xuICAgICAgZGlzcGxheTogbm9uZTtcbiAgICB9XG4gIH1cblxuICAuZ28tYmFjayB7XG4gICAgcmlnaHQ6IGF1dG87XG4gICAgbGVmdDogLTEwcHg7XG5cbiAgICAmOjpiZWZvcmUge1xuICAgICAgY29udGVudDogJ1xcZjI3ZCc7XG4gICAgfVxuICB9XG5cbiAgJi5mdWxsc2NyZWVuIHtcbiAgICAuY29udGFpbmVyIHtcbiAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICB9XG5cbiAgICAuY2xvc2Uge1xuICAgICAgcmlnaHQ6IDM2cHg7XG4gICAgICB0b3A6IDI3cHg7XG4gICAgICBib3gtc2hhZG93OiBub25lO1xuICAgICAgYmFja2dyb3VuZDogI2ViZWZmNTtcblxuICAgICAgJjo6YmVmb3JlIHtcbiAgICAgICAgY29sb3I6ICM4MzhmYTU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLm1vZGFsLWRpYWxvZyB7XG4gICAgICB3aWR0aDogNjUxcHg7XG4gICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgwLCAtMTAlKTtcbiAgICAgIHRyYW5zaXRpb246IHRyYW5zZm9ybSAuNXMgY3ViaWMtYmV6aWVyKDAsMCwwLDEpO1xuICAgIH1cblxuICAgICYuaW4gLm1vZGFsLWRpYWxvZyB7XG4gICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgwLCAwKTtcbiAgICB9XG5cbiAgICAubW9kYWwtY29udGVudCB7XG4gICAgICBib3gtc2hhZG93OiBub25lO1xuICAgICAgYm9yZGVyOiAwO1xuICAgICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XG4gICAgfVxuICB9XG59XG4iLCIuc2l0ZS1zZWFyY2gge1xuICBmb250LWZhbWlseTogJGZvbnQtZmFtaWx5LWVpbmE7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIG1hcmdpbi1yaWdodDogMTZweDtcbn1cblxuLnNpdGUtc2VhcmNoX190cmlnZ2VyIHtcbiAgY3Vyc29yOiBwb2ludGVyO1xuXG4gIHN2ZyB7XG4gICAgdHJhbnNpdGlvbjogZmlsbCAwLjJzO1xuICAgIG1hcmdpbjogMDtcbiAgICBmaWxsOiAjYThiMGJlO1xuICAgIHdpZHRoOiAxNnB4O1xuICAgIGhlaWdodDogMTZweDtcbiAgfVxuXG4gICY6aG92ZXIgc3ZnIHtcbiAgICBmaWxsOiAjNjA2YzgyO1xuICB9XG59XG5cbi5zaXRlLXNlYXJjaF9faW5wdXQge1xuICBkaXNwbGF5OiBub25lO1xufVxuIiwiI3NuYXAtYmFyIHtcbiAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KHRvIHJpZ2h0LCAjMDcwOTBlLCAjMmY0NTYyKTtcbiAgY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgLjUpO1xuICBwYWRkaW5nOiAxM3B4IDEwcHggOXB4O1xuICBmb250LXdlaWdodDogNTAwO1xuICBmb250LXNpemU6IDEzcHg7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgei1pbmRleDogMTA7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgbGV0dGVyLXNwYWNpbmc6IC4wMDRlbTtcblxuICBzdHJvbmcge1xuICAgIG1hcmdpbi1yaWdodDogM3B4O1xuICAgIGZvbnQtc2l6ZTogMTNweDtcbiAgICBsZXR0ZXItc3BhY2luZzogLjAwNGVtO1xuICAgIGZvbnQtd2VpZ2h0OiA2MDA7XG4gICAgY29sb3I6IHdoaXRlO1xuICB9XG5cbiAgLmxvYWRpbmcge1xuICAgIHdpZHRoOiAxNnB4O1xuICAgIG1hcmdpbi1yaWdodDogNXB4O1xuICAgIHZlcnRpY2FsLWFsaWduOiB0ZXh0LWJvdHRvbTtcbiAgfVxuXG4gIGEge1xuICAgIG1hcmdpbi1sZWZ0OiAxNXB4O1xuICAgIGJhY2tncm91bmQ6ICMwYTBmMTY7XG4gICAgY29sb3I6ICM2YWIwZmY7XG4gICAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgICBwYWRkaW5nOiA2cHggN3B4IDVweCAxMnB4O1xuICAgIGZvbnQtc2l6ZTogMTBweDtcbiAgICBsZXR0ZXItc3BhY2luZzogLjA5ZW07XG4gICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcbiAgICBib3JkZXItcmFkaXVzOiAxMHB4O1xuICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbiAgICB0cmFuc2l0aW9uOiAuMnMgY29sb3I7XG5cbiAgICAmOmhvdmVyIHtcbiAgICAgIGNvbG9yOiB3aGl0ZTtcbiAgICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbiAgICB9XG4gIH1cblxuICBpIHtcbiAgICBmb250LXNpemU6IDEzcHg7XG4gICAgdmVydGljYWwtYWxpZ246IC0xcHg7XG4gIH1cblxuICArIC5uYXZiYXIge1xuICAgIG1hcmdpbi10b3A6IDZweDtcblxuICAgIEBtZWRpYSAobWF4LXdpZHRoOiAkc2NyZWVuLXhzLW1heCkge1xuICAgICAgLy8gcGFkZGluZy10b3A6IDIwcHg7XG4gICAgICBtYXJnaW4tdG9wOjA7XG4gICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICBtaW4taGVpZ2h0OiA0OHB4O1xuICAgIH1cbiAgfVxufVxuYm9keS5kb2NzICNzbmFwLWJhciB7XG4gICsgLm5hdmJhciB7XG4gICAgbWFyZ2luLXRvcDogMDtcblxuICAgIEBtZWRpYSAobWF4LXdpZHRoOiAkc2NyZWVuLXhzLW1heCkge1xuICAgICAgcGFkZGluZy10b3A6IDA7XG4gICAgfVxuICB9XG59XG5ib2R5Lmhhcy1zbmFwIHtcbiAgbWFyZ2luLXRvcDogMDtcblxuICAuc2lkZS1uYXYuYWZmaXgtdG9wIHtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgdG9wOiAzOHB4O1xuICB9XG5cbiAgQG1lZGlhIChtYXgtd2lkdGg6ICRzY3JlZW4teHMtbWF4KSB7XG4gICAgbWFyZ2luLXRvcDogMDtcbiAgfVxufVxuXG5ib2R5LmRvY3MgI3NuYXAtYmFyIH4gLmRvY3MtY29udGFpbmVyIC5zaWRlLW5hdiB7XG4gIHBhZGRpbmctdG9wOiAzNnB4O1xufVxuXG5pb25pYy1zbmFwLWJhciB7XG4gICY6bm90KC5oeWRyYXRlZCkge1xuICAgIGRpc3BsYXk6IG5vbmU7XG4gIH1cblxuICBAbWVkaWEgKG1heC13aWR0aDogJHNjcmVlbi14cy1tYXgpIHtcbiAgICBkaXNwbGF5OiBub25lO1xuICB9XG59IiwiI3NvY2lhbC1zaGFyZS1zaWRlYmFyIHtcbiAgcmlnaHQ6IGF1dG87XG4gIGxlZnQ6IDUwcHg7XG4gIGNvbG9yOiAjYmFjMmNmO1xuICB3aWR0aDogMjAwcHg7XG4gIHBvc2l0aW9uOiBmaXhlZDtcbiAgdG9wOiAyMDBweDtcbiAgb3BhY2l0eTogMDtcbiAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG4gIHRyYW5zaXRpb246IC41cyBvcGFjaXR5O1xuXG4gIEBtZWRpYSAobWF4LXdpZHRoOiAxMTIwcHgpIHtcbiAgICBkaXNwbGF5OiBub25lO1xuICB9XG5cblxuICAmLmFmZml4IHtcbiAgICBwb3NpdGlvbjogZml4ZWQ7XG4gICAgdG9wOiAyMDBweDtcbiAgICBvcGFjaXR5OiAxO1xuICAgIHBvaW50ZXItZXZlbnRzOiBhbGw7XG4gIH1cblxuICBoNCB7XG4gICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcbiAgICBsZXR0ZXItc3BhY2luZzogMC4xZW07XG4gICAgZm9udC1zaXplOiAxMHB4O1xuICAgIGZvbnQtd2VpZ2h0OiA3MDA7XG4gICAgY29sb3I6ICNiYWMyY2Y7XG4gICAgbWFyZ2luLWJvdHRvbTogMTVweDtcbiAgICBvcGFjaXR5OiAwO1xuICAgIGFuaW1hdGlvbjogLjVzIGZhZGVJbiBsaW5lYXIgM3M7XG4gICAgYW5pbWF0aW9uLWZpbGwtbW9kZTogZm9yd2FyZHM7XG4gIH1cblxuICB1bCB7XG4gICAgbGlzdC1zdHlsZTogbm9uZTtcbiAgICBwYWRkaW5nLWxlZnQ6IDA7XG4gIH1cblxuICBsaSB7XG4gICAgb3BhY2l0eTogMDtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMjBweCk7XG4gICAgYW5pbWF0aW9uOiAuNXMgZmFkZUluVXAgbGluZWFyIDMuNXM7XG4gICAgYW5pbWF0aW9uLWZpbGwtbW9kZTogZm9yd2FyZHM7XG5cbiAgICAmOm50aC1jaGlsZCgyKSB7IGFuaW1hdGlvbi1kZWxheTogMy44czsgfVxuICAgICY6bnRoLWNoaWxkKDMpIHsgYW5pbWF0aW9uLWRlbGF5OiA0LjFzOyB9XG4gICAgJjpudGgtY2hpbGQoNCkgeyBhbmltYXRpb24tZGVsYXk6IDQuM3M7IH1cbiAgfVxuXG4gIGEge1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICB3aWR0aDogMjBweDtcbiAgICBoZWlnaHQ6IDIwcHg7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgY3Vyc29yOiBwb2ludGVyO1xuICAgIG1hcmdpbi1ib3R0b206IDE4cHg7XG4gICAgbWFyZ2luLWxlZnQ6IDhweDtcblxuICAgICY6OmJlZm9yZSxcbiAgICAmOjphZnRlciB7XG4gICAgICBiYWNrZ3JvdW5kOiB1cmwoJy9pbWcvc3VydmV5L2Jsb2ctc2hhcmUtaWNvbnMucG5nJykgbm8tcmVwZWF0IDAgMDtcbiAgICAgIGJhY2tncm91bmQtc2l6ZTogMjBweDtcbiAgICAgIHdpZHRoOiAyMHB4O1xuICAgICAgaGVpZ2h0OiAyMHB4O1xuICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICBjb250ZW50OiAnJztcbiAgICAgIHRyYW5zaXRpb246IDAuMnMgb3BhY2l0eTtcbiAgICB9XG5cbiAgICAmOjphZnRlciB7XG4gICAgICBvcGFjaXR5OiAwO1xuICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgdG9wOiAwO1xuICAgICAgcmlnaHQ6IDA7XG4gICAgICBib3R0b206IDA7XG4gICAgICBsZWZ0OiAwO1xuICAgIH1cblxuICAgICY6aG92ZXIge1xuICAgICAgJjo6YWZ0ZXIge1xuICAgICAgICBvcGFjaXR5OiAxO1xuICAgICAgfVxuICAgIH1cblxuICAgICYudHdpdHRlcjo6YWZ0ZXIgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwIC0yMHB4OyB9XG4gICAgJi5mYWNlYm9vazo6YmVmb3JlIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogMCAtNDBweDsgfVxuICAgICYuZmFjZWJvb2s6OmFmdGVyIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogMCAtNjBweDsgfVxuICAgICYuZ29vZ2xlLXBsdXM6OmJlZm9yZSB7IGJhY2tncm91bmQtcG9zaXRpb246IDAgLTgwcHg7IH1cbiAgICAmLmdvb2dsZS1wbHVzOjphZnRlciB7IGJhY2tncm91bmQtcG9zaXRpb246IDAgLTEwMHB4OyB9XG4gICAgJi5idWZmZXI6OmJlZm9yZSB7IGJhY2tncm91bmQtcG9zaXRpb246IDAgLTEyMHB4OyB9XG4gICAgJi5idWZmZXI6OmFmdGVyIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogMCAtMTQwcHg7IH1cbiAgfVxufSIsIi5yb3VuZGVkLXRhYnMge1xuICBiYWNrZ3JvdW5kOiBub25lO1xuICBtYXJnaW46IDAgMCAwIC0yMHB4O1xuICBwYWRkaW5nOiAwO1xuICBkaXNwbGF5OiBmbGV4O1xuXG4gIEBtZWRpYSAobWF4LXdpZHRoOiAkc2NyZWVuLXhzLW1heCkge1xuICAgIG1hcmdpbjogMDtcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG4gICAgbWF4LXdpZHRoOiA0NjBweDtcbiAgICBtYXJnaW4tbGVmdDogYXV0bztcbiAgICBtYXJnaW4tcmlnaHQ6IGF1dG87XG4gIH1cbn1cblxuLnJvdW5kZWQtdGFic19fdGFiIHtcbiAgcGFkZGluZzogMDtcbiAgZGlzcGxheTogZmxleDtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBtYXgtd2lkdGg6IDEwMCU7XG4gIG1hcmdpbjogMDtcblxuICAmOjpiZWZvcmUsXG4gICY6OmFmdGVyIHtcbiAgICBjb250ZW50OiAnJztcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgICBvcGFjaXR5OiAwO1xuICAgIHdpZHRoOiA1NnB4O1xuICAgIGhlaWdodDogNjRweDtcbiAgICBmbGV4OiAwIDAgNTZweDtcbiAgICBiYWNrZ3JvdW5kLXNpemU6IDU2cHggNjRweDtcbiAgICBiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0O1xuICB9XG5cbiAgJjo6YmVmb3JlIHtcbiAgICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoJy9pbWcvZ2V0dGluZy1zdGFydGVkL3RhYi1ib3JkZXItbGVmdC5wbmcnKTtcbiAgfVxuXG4gICY6OmFmdGVyIHtcbiAgICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoJy9pbWcvZ2V0dGluZy1zdGFydGVkL3RhYi1ib3JkZXItcmlnaHQucG5nJyk7XG4gIH1cblxuICAmICsgLnJvdW5kZWQtdGFic19fdGFiIHtcbiAgICBtYXJnaW4tbGVmdDogLTU0cHg7XG4gIH1cblxuICBAbWVkaWEgKG1heC13aWR0aDogJHNjcmVlbi14cy1tYXgpIHtcbiAgICB0cmFuc2l0aW9uOiBib3JkZXIgMC4zcztcbiAgICBib3JkZXItYm90dG9tOiA0cHggc29saWQgdHJhbnNwYXJlbnQ7XG5cbiAgICAmOjpiZWZvcmUsXG4gICAgJjo6YWZ0ZXIge1xuICAgICAgZGlzcGxheTogbm9uZTtcbiAgICB9XG5cbiAgICAmICsgLnJvdW5kZWQtdGFic19fdGFiIHtcbiAgICAgIG1hcmdpbi1sZWZ0OiAyOHB4O1xuICAgIH1cbiAgfVxufVxuXG4ucm91bmRlZC10YWJzX190YWItaW5uZXIge1xuICBmb250LXNpemU6IDE2cHg7XG4gIGZvbnQtd2VpZ2h0OiA2MDA7XG4gIGxldHRlci1zcGFjaW5nOiAtMC4wMmVtO1xuICBkaXNwbGF5OiBmbGV4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBoZWlnaHQ6IDY0cHg7XG4gIG1hcmdpbi1sZWZ0OiAtMXB4O1xuICBtYXJnaW4tcmlnaHQ6IC0xcHg7XG4gIHBhZGRpbmc6IDAgMnB4O1xuICBmbGV4OiAwIDAgYXV0bztcbiAgY3Vyc29yOiBwb2ludGVyO1xuXG4gIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xuICBjb2xvcjogI0Q1RUFGRjtcblxuICBzdmcge1xuICAgIG1hcmdpbi1yaWdodDogOHB4O1xuICAgIGZsZXg6IDAgMCAyMHB4O1xuICB9XG5cbiAgc3BhbiB7XG4gICAgZmxleDogMCAwIGF1dG87XG4gIH1cblxuICAuZnJvbnQge1xuICAgIGZpbGw6ICNFMUYwRkY7XG4gIH1cbiAgLm1pZGRsZSB7XG4gICAgZmlsbDogIzhEQzBGRjtcbiAgfVxuICAuYmFjayB7XG4gICAgZmlsbDogIzZGQURGRjtcbiAgfVxuICAuZnJvbnQtLWJvcmRlciB7XG4gICAgc3Ryb2tlOiAjNEQ5MkZGO1xuICB9XG4gIC5taWRkbGUtLWJvcmRlciB7XG4gICAgc3Ryb2tlOiAjNEQ5M0ZGO1xuICB9XG5cbiAgJjpob3ZlciB7XG4gICAgdHJhbnNpdGlvbjogY29sb3IgMC4ycztcbiAgICBjb2xvcjogI2ZmZjtcblxuICAgIC5mcm9udCB7XG4gICAgICBmaWxsOiAjZmZmO1xuICAgIH1cbiAgfVxuXG4gIEBtZWRpYSAobWF4LXdpZHRoOiAkc2NyZWVuLXhzLW1heCkge1xuICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgZm9udC1zaXplOiAxNHB4O1xuICAgIGhlaWdodDogYXV0bztcbiAgICBwYWRkaW5nLWJvdHRvbTogMTRweDtcbiAgICBmbGV4OiAxO1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICBsaW5lLWhlaWdodDogMTZweDtcblxuICAgIHN2ZyB7XG4gICAgICBtYXJnaW46IDhweCAwIDEwcHg7XG4gICAgfVxuICB9XG59XG5cbi5yb3VuZGVkLXRhYnNfX3RhYi0tYWN0aXZlIHtcbiAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG5cbiAgQG1lZGlhIChtaW4td2lkdGg6IDc2OHB4KSB7XG4gICAgJjo6YmVmb3JlLFxuICAgICY6OmFmdGVyIHtcbiAgICAgIG9wYWNpdHk6IDE7XG4gICAgfVxuXG4gICAgLnJvdW5kZWQtdGFic19fdGFiLWlubmVyLFxuICAgIC5yb3VuZGVkLXRhYnNfX3RhYi1pbm5lcjpob3ZlciB7XG4gICAgICBiYWNrZ3JvdW5kOiAjZmZmO1xuICAgICAgY29sb3I6ICMxNjFBMUY7XG5cbiAgICAgIC5mcm9udCB7XG4gICAgICAgIGZpbGw6ICMzODgwRkY7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLmZyb250IHtcbiAgICAgIGZpbGw6ICMzODgwRkY7XG4gICAgfVxuICAgIC5taWRkbGUge1xuICAgICAgZmlsbDogI0IxRDlGRjtcbiAgICB9XG4gICAgLmJhY2sge1xuICAgICAgZmlsbDogI0NGRTdGRjtcbiAgICB9XG5cbiAgICAuZnJvbnQtLWJvcmRlcixcbiAgICAubWlkZGxlLS1ib3JkZXIge1xuICAgICAgc3Ryb2tlOiAjZmZmO1xuICAgIH1cbiAgfVxuXG4gIEBtZWRpYSAobWF4LXdpZHRoOiAkc2NyZWVuLXhzLW1heCkge1xuICAgIGJvcmRlci1ib3R0b206IDRweCBzb2xpZCByZ2JhKCNmZmYsIDAuOCk7XG5cbiAgICAucm91bmRlZC10YWJzX190YWItaW5uZXIge1xuICAgICAgY29sb3I6ICNmZmY7XG4gICAgICAuZnJvbnQge1xuICAgICAgICBmaWxsOiAjZmZmO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG4jcGFnZS1wcmljaW5nLFxuI3BhZ2UtZ2V0dGluZy1zdGFydGVkIHtcbiAgLnRhYi1jb250ZW50IHtcbiAgICBkaXNwbGF5OiBub25lO1xuICBcbiAgICAmLS1hY3RpdmUge1xuICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgfVxuICB9XG59XG4iLCIudGFnLFxuLmRvY3MtY29udGFpbmVyIG1haW4gLnRhZyB7XG4gIGJhY2tncm91bmQ6ICRibHVlO1xuICBtYXJnaW4tbGVmdDogMTBweDtcbiAgcGFkZGluZzogNXB4IDdweCA0cHg7XG4gIGJvcmRlci1yYWRpdXM6IDRweDtcbiAgY29sb3I6IHdoaXRlO1xuICBmb250LXdlaWdodDogNzAwO1xuICBmb250LXNpemU6IDEwcHg7XG4gIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XG4gIGxldHRlci1zcGFjaW5nOiAuNXB4O1xuXG4gICYuZ3JleSB7XG4gICAgYmFja2dyb3VuZDogJGRhcmtpc2gtZ3JleTtcbiAgfVxufSIsIi50ZXN0aW1vbmlhbC1zbGlkZXMge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIHRyYW5zaXRpb246IGhlaWdodCAwLjRzO1xuXG4gIEBtZWRpYSAobWF4LXdpZHRoOiAkc2NyZWVuLXNtLW1heCkge1xuICAgIG1pbi1oZWlnaHQ6IDM2MHB4O1xuICB9XG5cbiAgQG1lZGlhIChtYXgtd2lkdGg6IDU2MHB4KSB7XG4gICAgbWluLWhlaWdodDogNDAwcHg7XG4gIH1cblxuICAuc2xpZGUge1xuICAgIHBhZGRpbmc6IDkwcHggMCAxNDZweDtcbiAgICB0b3A6IDA7XG4gICAgbGVmdDogMDtcbiAgICB3aWR0aDogMTAwJTtcbiAgICBoZWlnaHQ6IDEwMCU7XG4gICAgLy8gYmFja2dyb3VuZDogIzY2NjtcblxuICAgIGg1IHtcbiAgICAgIGNvbG9yOiAjZmZmO1xuICAgICAgZm9udC1zaXplOiAyMHB4O1xuICAgICAgbGluZS1oZWlnaHQ6IDMycHg7XG4gICAgICBsZXR0ZXItc3BhY2luZzogLTAuMDJlbTtcbiAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7XG4gICAgICBtYXJnaW46IDQwcHggMDtcbiAgICB9XG5cbiAgICAuYXR0cmlidXRpb24ge1xuICAgICAgZm9udC1zaXplOiAxNHB4O1xuICAgICAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgICAgIGxldHRlci1zcGFjaW5nOiAtMC4wMmVtO1xuXG4gICAgICBiIHtcbiAgICAgICAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgICAgICAgY29sb3I6ICNmZmY7bWFyZ2luLXJpZ2h0OiA4cHg7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaGdyb3VwIHtcbiAgICAgIHdpZHRoOiA1MCU7XG4gICAgICBwYWRkaW5nLXJpZ2h0OiA3NHB4O1xuICAgIH1cblxuICAgIC5zbGlkZV9fdG9wYmFyIHtcbiAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG4gICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgIH1cblxuICAgIC5zbGlkZV9fY3RhIHtcbiAgICAgIHRyYW5zaXRpb246IGJhY2tncm91bmQgMC4zcztcbiAgICAgIHBhZGRpbmc6IDRweCA4cHggM3B4O1xuICAgICAgYm9yZGVyLXJhZGl1czogMTAwcHg7XG4gICAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDtcbiAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICBmb250LXdlaWdodDogNjAwO1xuICAgICAgZm9udC1zaXplOiAxMnB4O1xuICAgICAgbGluZS1oZWlnaHQ6IDEycHg7XG4gICAgICBsZXR0ZXItc3BhY2luZzogLTAuMDJlbTtcbiAgICAgIGN1cnNvcjogcG9pbnRlcjtcblxuICAgICAgYiB7XG4gICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7XG4gICAgICAgIGNvbG9yOiAjZmZmO1xuICAgICAgICBtYXJnaW4tbGVmdDogNHB4O1xuICAgICAgfVxuXG4gICAgICBzdmcge1xuICAgICAgICB0cmFuc2l0aW9uOiBmaWxsIDAuMnM7XG4gICAgICAgIGRpc3BsYXk6IGlubGluZTtcbiAgICAgICAgd2lkdGg6IDEycHg7XG4gICAgICAgIGhlaWdodDogMTJweDtcbiAgICAgICAgbWFyZ2luOiAwO1xuICAgICAgICBmaWxsOiAjZmZmO1xuICAgICAgfVxuXG4gICAgICBzdmc6Zmlyc3QtY2hpbGQge1xuICAgICAgICB3aWR0aDogMThweDtcbiAgICAgICAgaGVpZ2h0OiAxOHB4O1xuICAgICAgICBtYXJnaW4tcmlnaHQ6IDZweDtcbiAgICAgIH1cblxuICAgICAgJjpob3ZlciBzdmc6bGFzdC1jaGlsZCB7XG4gICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgxcHgpO1xuICAgICAgfVxuICAgIH1cblxuICAgIEBtZWRpYSAobWF4LXdpZHRoOiAkc2NyZWVuLXNtLW1heCkge1xuICAgICAgcGFkZGluZzogMzJweCAwIDEwNnB4O1xuXG4gICAgICAuc2xpZGVfX3RvcGJhciB7XG4gICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW4tcmV2ZXJzZTtcbiAgICAgICAgYWxpZ24taXRlbXM6IGZsZXgtc3RhcnQ7XG4gICAgICB9XG5cbiAgICAgIC5zbGlkZV9fY3RhIHtcbiAgICAgICAgbWFyZ2luLWJvdHRvbTogMzBweDtcbiAgICAgIH1cblxuICAgICAgaDUge1xuICAgICAgICBtYXJnaW46IDIwcHggMDtcbiAgICAgIH1cblxuICAgICAgaGdyb3VwIHtcbiAgICAgICAgcGFkZGluZy1yaWdodDogMjRweDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBAbWVkaWEgKG1heC13aWR0aDogJHNjcmVlbi1zbS1tYXgpIHtcbiAgICAgIGhncm91cCB7XG4gICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgfVxuXG4gICAgICAuc2xpZGVfX3RvcGJhciB7XG4gICAgICAgIGZsZXgtZGlyZWN0aW9uOiByb3c7XG4gICAgICB9XG5cbiAgICAgIGg1IHtcbiAgICAgICAgbWFyZ2luOiAzMHB4IDA7XG4gICAgICB9XG4gICAgfVxuXG4gICAgQG1lZGlhIChtYXgtd2lkdGg6IDU2MHB4KSB7XG4gICAgICAuc2xpZGVfX3RvcGJhciB7XG4gICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW4tcmV2ZXJzZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAuc2xpZGUtLWFpcmJ1cyB7XG4gICAgLmxvZ28ge1xuICAgICAgYmFja2dyb3VuZDogdXJsKCcvaW1nL3Rlc3RpbW9uaWFscy9sb2dvLXNwcml0ZS5wbmcnKSBuby1yZXBlYXQgMCAtMzhweDtcbiAgICAgIGJhY2tncm91bmQtc2l6ZTogMTk4cHggNjlweDtcbiAgICAgIHdpZHRoOiAxMzFweDtcbiAgICAgIGhlaWdodDogMzFweDtcbiAgICB9XG5cbiAgICAuYXR0cmlidXRpb24ge1xuICAgICAgY29sb3I6ICM5MzljZDU7XG4gICAgfVxuXG4gICAgLnNsaWRlX19jdGEge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogIzI1MzY5OTtcbiAgICAgIGNvbG9yOiAjYjViYmUyO1xuXG4gICAgICBzdmc6Zmlyc3QtY2hpbGQge1xuICAgICAgICBmaWxsOiAjYThhZWQ2O1xuICAgICAgfVxuXG4gICAgICAmOmhvdmVyICB7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6IGxpZ2h0ZW4oIzI1MzY5OSwgMyUpO1xuICAgICAgfVxuICAgIH1cblxuXG4gIH1cblxuICAuc2xpZGUtLW1hcmtldHdhdGNoIHtcbiAgICAubG9nbyB7XG4gICAgICBiYWNrZ3JvdW5kOiB1cmwoJy9pbWcvdGVzdGltb25pYWxzL2xvZ28tc3ByaXRlLnBuZycpIG5vLXJlcGVhdCAwIDA7XG4gICAgICBiYWNrZ3JvdW5kLXNpemU6IDE5OHB4IDY5cHg7XG4gICAgICB3aWR0aDogMTk4cHg7XG4gICAgICBoZWlnaHQ6IDMxcHg7XG4gICAgfVxuXG4gICAgLmF0dHJpYnV0aW9uIHtcbiAgICAgIGNvbG9yOiAjODY4ODkzXG4gICAgfVxuXG4gICAgLnNsaWRlX19jdGEge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogIzBhMmUzNjtcbiAgICAgIGNvbG9yOiAjYThiMGJlO1xuXG4gICAgICBzdmc6Zmlyc3QtY2hpbGQge1xuICAgICAgICBmaWxsOiAjOWRhYmFmO1xuICAgICAgfVxuXG4gICAgICAmOmhvdmVyICB7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6IGxpZ2h0ZW4oIzBhMmUzNiwgMyUpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC5zbGlkZS1pbWdzIHtcbiAgICB3aWR0aDogNTAlO1xuICAgIGhlaWdodDogMTAwJTtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgb3BhY2l0eTogMC41O1xuICAgIHJpZ2h0OiAwO1xuICAgIHRvcDogMDtcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xuXG4gICAgQG1lZGlhIChtYXgtd2lkdGg6ICRzY3JlZW4tc20tbWF4KSB7XG4gICAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7XG4gICAgfVxuICB9XG5cbiAgLnNsaWRlLWltZyB7XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgaGVpZ2h0OiAxMDAlO1xuICAgIGJhY2tncm91bmQtc2l6ZTogY292ZXI7XG4gICAgYmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdDtcbiAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiBjZW50ZXIgY2VudGVyO1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICB0b3A6IDA7XG4gICAgbGVmdDogMDtcblxuICAgICYtLWFpcmJ1cyB7XG4gICAgICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoJy9pbWcvdGVzdGltb25pYWxzL3Rlc3RpbW9uaWFsLWJnLWFpcmJ1cy5qcGcnKTtcbiAgICB9XG4gICAgJi0tbWFya2V0d2F0Y2gge1xuICAgICAgYmFja2dyb3VuZC1pbWFnZTogdXJsKCcvaW1nL3Rlc3RpbW9uaWFscy90ZXN0aW1vbmlhbC1iZy1tYXJrZXR3YXRjaC5qcGcnKTtcbiAgICB9XG4gIH1cblxuICAuc2xpZGUtaW5kaWNhdG9yIHtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgei1pbmRleDogMTA7XG4gICAgYm90dG9tOiAxNnB4O1xuICAgIGxlZnQ6IDA7XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgcGFkZGluZzogMjBweCAwO1xuICAgIGN1cnNvcjogcG9pbnRlcjtcblxuICAgIHNwYW4ge1xuICAgICAgdHJhbnNpdGlvbjogb3BhY2l0eSAwLjNzO1xuICAgICAgZGlzcGxheTogaW5saW5lLWZsZXg7XG4gICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICB3aWR0aDogMTRweDtcbiAgICAgIGhlaWdodDogMjRweDtcbiAgICAgIG9wYWNpdHk6IDAuMjtcblxuICAgICAgJjphZnRlciB7XG4gICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjNzO1xuICAgICAgICB0cmFuc2Zvcm0tb3JpZ2luOiBjZW50ZXIgY2VudGVyO1xuICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgICAgY29udGVudDogJyc7XG4gICAgICAgIHdpZHRoOiA4cHg7XG4gICAgICAgIGhlaWdodDogOHB4O1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xuICAgICAgICBib3JkZXItcmFkaXVzOiA4cHg7XG4gICAgICB9XG5cbiAgICAgICY6aG92ZXI6bm90KC5hY3RpdmUpOmFmdGVyIHtcbiAgICAgICAgdHJhbnNmb3JtOiBzY2FsZSgxLjQpO1xuICAgICAgfVxuXG4gICAgICAmOmhvdmVyLFxuICAgICAgJi5hY3RpdmUge1xuICAgICAgICBvcGFjaXR5OiAxO1xuICAgICAgfVxuXG4gICAgICAmLmFjdGl2ZSB7XG4gICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lO1xuICAgICAgICBjdXJzb3I6IGRlZmF1bHQ7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG4iLCIudG9vbHRpcCB7XG4gIHdpZHRoOiAzMDBweDtcblxuICAudG9vbHRpcC1pbm5lciB7XG4gICAgcGFkZGluZzogMTBweDtcbiAgICBiYWNrZ3JvdW5kOiByZ2JhKGJsYWNrLCAuODUpO1xuICB9XG5cbiAgLnRvb2x0aXAtYXJyb3cge1xuICAgIG9wYWNpdHk6IC44NTtcbiAgfVxufVxuIiwidGlwcHkge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG5cbiAgLnRpcCB7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIHRyYW5zZm9ybTogc2NhbGUzZCgwLCAwLCAxKTtcbiAgICB0cmFuc2l0aW9uOiAuMTVzIHRyYW5zZm9ybSBsaW5lYXI7XG4gICAgYmFja2dyb3VuZDogcmdiYShibGFjaywuOCk7XG4gICAgYm9yZGVyLXJhZGl1czogNHB4O1xuICAgIHBhZGRpbmc6IDE1cHggMjBweDtcbiAgICBjb2xvcjogd2hpdGU7XG4gICAgei1pbmRleDogMTtcbiAgICB3aWR0aDogMTAwJTtcbiAgICBtaW4td2lkdGg6IDIwMHB4O1xuXG4gICAgJjo6YmVmb3JlIHtcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgIHRvcDogLTVweDtcbiAgICAgIGhlaWdodDogNXB4O1xuICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICBsZWZ0OiAwO1xuICAgICAgY29udGVudDogJyc7XG4gICAgfVxuXG4gICAgJjo6YWZ0ZXIge1xuICAgICAgY29udGVudDogJyc7XG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICB3aWR0aDogMDtcbiAgICAgIGhlaWdodDogMDtcbiAgICAgIGJvcmRlci1zdHlsZTogc29saWQ7XG4gICAgICBib3JkZXItd2lkdGg6IDAgNXB4IDVweCA1cHg7XG4gICAgICBib3JkZXItY29sb3I6IHRyYW5zcGFyZW50IHRyYW5zcGFyZW50IHJnYmEoYmxhY2ssIC44KTtcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgIHRvcDogLTVweDtcbiAgICAgIHJpZ2h0OiA2cHg7XG4gICAgfVxuXG4gICAgYSB7XG4gICAgICBjdXJzb3I6IHBvaW50ZXI7XG5cbiAgICAgICY6aG92ZXIge1xuICAgICAgICBjb2xvcjogd2hpdGU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgJi5yaWdodCxcbiAgICAmLmxlZnQge1xuICAgICAgbGVmdDogMjhweDtcbiAgICAgIHJpZ2h0OiBhdXRvO1xuICAgICAgd2lkdGg6IDI1N3B4O1xuICAgICAgdG9wOiAtNzZweDtcbiAgICAgIGJhY2tncm91bmQ6ICMzYjQzNGY7XG4gICAgICBwYWRkaW5nOiAxNHB4IDIwcHggNnB4O1xuICAgICAgZm9udC1zaXplOiAxMXB4O1xuICAgICAgbGluZS1oZWlnaHQ6IDIwcHg7XG4gICAgICBsZXR0ZXItc3BhY2luZzogLjA3cHg7XG5cbiAgICAgICY6OmFmdGVyIHtcbiAgICAgICAgd2lkdGg6IDEycHg7XG4gICAgICAgIGhlaWdodDogMTJweDtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogMCAwIDRweCAwO1xuICAgICAgICB0cmFuc2Zvcm06IHJvdGF0ZSgxMzVkZWcpO1xuICAgICAgICBib3JkZXI6IG5vbmU7XG5cdCAgICAgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCgtNDVkZWcsICMzYjQzNGYgNTAlLCB0cmFuc3BhcmVudCA1MCUpO1xuICAgICAgICB0b3A6IGNhbGMoNTAlICsgN3B4KTtcbiAgICAgICAgbGVmdDogLTZweDtcbiAgICAgICAgcmlnaHQ6IGF1dG87XG4gICAgICB9XG4gICAgfVxuXG4gICAgJi5sZWZ0IHtcbiAgICAgIGxlZnQ6IGF1dG87XG4gICAgICByaWdodDogMjhweDtcblxuICAgICAgJjo6YWZ0ZXIge1xuICAgICAgICBsZWZ0OiBhdXRvO1xuICAgICAgICByaWdodDogLTZweFxuICAgICAgfVxuICAgIH1cblxuICAgICYuYm90dG9tIHtcbiAgICAgIGxlZnQ6IC0xNzBweDtcbiAgICB9XG5cbiAgICAmLnRvcCB7XG4gICAgICBsZWZ0OiAtMTcwcHg7XG4gICAgICBib3R0b206IDIzcHg7XG5cbiAgICAgICY6OmFmdGVyIHtcbiAgICAgICAgdHJhbnNmb3JtOiByb3RhdGUoMTgwZGVnKTtcbiAgICAgICAgdG9wOiBhdXRvO1xuICAgICAgICBib3R0b206IC01cHg7XG4gICAgICAgIHJpZ2h0OiAxOHB4O1xuICAgICAgfVxuICAgIH1cblxuICAgIHAge1xuICAgICAgbWFyZ2luLWJvdHRvbTogOHB4O1xuICAgIH1cbiAgfVxuXG4gID4gaSB7XG4gICAgZm9udC1zaXplOiA2NyU7XG4gICAgZm9udC13ZWlnaHQ6IDcwMDtcbiAgICBsaW5lLWhlaWdodDogMWVtO1xuICAgIGNvbG9yOiAjZmZmO1xuICAgIGJvcmRlci1yYWRpdXM6IDFlbTtcbiAgICBwYWRkaW5nOiAzcHggNXB4IDJweDtcbiAgICBiYWNrZ3JvdW5kOiAjYzJjOGQyO1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICB0b3A6IC0wLjJlbTtcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgY3Vyc29yOiBwb2ludGVyO1xuICB9XG5cbiAgJjpob3ZlcixcbiAgJi5hY3RpdmUge1xuICAgIC50aXAge1xuICAgICAgdHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb246IGN1YmljLWJlemllcigwLDEuNSwuNSwxKTtcbiAgICAgIHRyYW5zaXRpb24tZHVyYXRpb246IC4zcztcbiAgICAgIHRyYW5zZm9ybTogc2NhbGUzZCgxLCAxLCAxKTtcbiAgICB9XG4gIH1cbn1cbiIsImJvZHkge1xuICBmb250LWZhbWlseTogJGZvbnQtZmFtaWx5LWRlZmF1bHQ7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgb3ZlcmZsb3cteDogaGlkZGVuO1xuICAtbW96LW9zeC1mb250LXNtb290aGluZzogZ3JheXNjYWxlO1xuICAtd2Via2l0LWZvbnQtc21vb3RoaW5nOiBhbnRpYWxpYXNlZDtcbiAgdGV4dC1yZW5kZXJpbmc6IG9wdGltaXplTGVnaWJpbGl0eTtcblxuICBAbWVkaWEgKG1heC13aWR0aDogJHNjcmVlbi14cy1tYXgpIHtcbiAgICBwYWRkaW5nLXRvcDogNTBweDtcbiAgICB3aWR0aDogMTAwJTtcbiAgICBtaW4td2lkdGg6IDEwMCU7XG4gICAgYmFja2dyb3VuZDogI2ZmZjtcbiAgfVxuXG4gIC5kb2NzIHtcbiAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoOTBkZWcsICR3aGl0ZWlzaCwgJHdoaXRlaXNoICgkc2lkZW5hdi13aWR0aCksXG4gICAgICB3aGl0ZSAoJHNpZGVuYXYtd2lkdGgpLCB3aGl0ZSAxMDAlKTtcbiAgfVxuXG4gIEBtZWRpYSAobWF4LXdpZHRoOiAkc2NyZWVuLXNtLW1pbikge1xuICAgICYjcGFnZS1wcmljaW5nLXRhYmxlIHtcbiAgICAgIHBhZGRpbmctdG9wOiAwcHg7XG4gICAgfVxuICB9XG5cbiAgJi5uby1zY3JvbGwge1xuICAgIG92ZXJmbG93OiBoaWRkZW47XG4gIH1cbn1cblxubWFpbiB7XG4gIG92ZXJmbG93OiBoaWRkZW47XG59XG5cbiNjb21wb25lbnRzLWluZGV4IHVsLm5hdiA+IGxpID4gYSB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNGOUZBRkI7XG59XG5cbi5pbXByb3ZlLWRvY3Mge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHJpZ2h0OiAzLjVlbTtcbiAgdG9wOiAyMHB4O1xufVxuXG4uaW1wcm92ZS12Mi1kb2NzIHtcbiAgZGlzcGxheTogYmxvY2s7XG4gIGZsb2F0OiByaWdodDtcbiAgbWFyZ2luLXRvcDogLTdlbTtcbn1cblxuLmNvbXBvbmVudC1kb2MtZGVtbyB7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICBmbG9hdDogcmlnaHQ7XG4gIG1hcmdpbi10b3A6IC0zLjFlbTtcbiAgbGluZS1oZWlnaHQ6IDI1cHg7XG5cblxuICAuY29tcG9uZW50LWRvYy1kZW1vLW1vYmlsZSB7XG4gICAgbWFyZ2luLXJpZ2h0OiA2cHg7XG4gIH1cbn1cblxuLmNvbXBvbmVudC1kb2MtZGVtby1tb2JpbGUge1xuICBjdXJzb3I6IHBvaW50ZXI7XG4gIHBhZGRpbmc6IDNweCAxMnB4O1xuICBib3JkZXItcmFkaXVzOiA0cHg7XG4gIGZvbnQtc2l6ZTogMTVweDtcbiAgZm9udC13ZWlnaHQ6IDUwMDtcbiAgY29sb3I6IHdoaXRlO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAkYmx1ZTtcbiAgZGlzcGxheTogbm9uZTtcbiAgbGluZS1oZWlnaHQ6IGluaGVyaXQ7XG59XG5cbi5kb2NzLWNvbnRhaW5lciB7XG4gIC5zaWRlLW5hdiB7XG4gICAgd2lkdGg6ICRzaWRlbmF2LXdpZHRoO1xuICAgIC8vIHBhZGRpbmctdG9wOiA3M3B4O1xuICB9XG5cbiAgPiBtYWluIHtcbiAgICBtYXJnaW4tbGVmdDogJHNpZGVuYXYtd2lkdGg7XG4gIH1cblxuICA+IGFzaWRlIHtcbiAgICB3aWR0aDogJHBsYXRmb3JtLXByZXZpZXctd2lkdGg7XG5cbiAgICArIG1haW4ge1xuICAgICAgbWFyZ2luLXJpZ2h0OiAkcGxhdGZvcm0tcHJldmlldy13aWR0aCAtIDYwcHg7XG4gICAgICBtaW4taGVpZ2h0OiA3NzdweDtcbiAgICB9XG4gIH1cblxuICBAbWVkaWEgKG1heC13aWR0aDogMTEwMHB4KSB7XG4gICAgYXNpZGUge1xuICAgICAgZGlzcGxheTogbm9uZTtcblxuICAgICAgJiArIG1haW4ge1xuICAgICAgICBtYXJnaW4tcmlnaHQ6IDA7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLmNvbXBvbmVudC1kb2MtZGVtby1tb2JpbGUge1xuICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgIH1cbiAgfVxuXG4gIEBtZWRpYSAobWF4LXdpZHRoOiAkc2NyZWVuLXhzLW1heCkge1xuICAgIGJhY2tncm91bmQtY29sb3I6ICNmZmY7XG5cbiAgICBtYWluIHtcbiAgICAgIG1hcmdpbi1sZWZ0OiAwO1xuICAgICAgcGFkZGluZzogMzBweCAyMHB4IDEwMHB4O1xuICAgIH1cblxuICAgICNzaWRlLW5hdiB7XG4gICAgICB6LWluZGV4OiAxO1xuICAgICAgdG9wOiAtNHB4O1xuICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC0kc2lkZW5hdi13aWR0aCk7XG4gICAgICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gLjNzIGVhc2U7XG5cbiAgICAgICYuc2hvd24ge1xuICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoMCk7XG4gICAgICAgIGJveC1zaGFkb3c6IDAgMCAxNXB4IHJnYmEoMCwgMCwgMCwgMC41KTtcbiAgICAgICAgdHJhbnNpdGlvbjogdHJhbnNmb3JtIC4zcyBlYXNlO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG4vLyBzdGlja3kgZm9vdGVyXG5odG1sIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBoZWlnaHQ6IDEwMCU7XG59XG5cbmJvZHkge1xuICBtaW4taGVpZ2h0OiAxMDAlO1xuICBtYXJnaW46IDAgMCAtMTMwcHg7IC8vIGJvdHRvbSA9IGZvb3RlciBoZWlnaHRcblxuICBAbWVkaWEgKG1heC13aWR0aDogJHNjcmVlbi14cy1tYXgpIHtcbiAgICAvLyBtYXJnaW4tdG9wOiA1MHB4O1xuICB9XG59XG5cbmEge1xuICBjb2xvcjogJGJsdWU7XG4gIHRyYW5zaXRpb246IC4zcyBjb2xvcjtcbn1cblxuLmZvb3Rlci1saW5rcyB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgbGVmdDogJHNpZGVuYXYtd2lkdGggKyA0MHB4O1xuICBib3R0b206IDA7XG4gIGhlaWdodDogMTMwcHg7XG4gIHJpZ2h0OiA0MHB4O1xuICBAbWVkaWEgKG1heC13aWR0aDogJHNjcmVlbi14cy1tYXgpIHtcbiAgICBsZWZ0OiA0MHB4O1xuICB9XG59XG5cbmEuZm9vdGVyLWxpbmsge1xuICBjb2xvcjogYmxhY2s7XG4gIGZvbnQtc2l6ZTogMThweDtcbiAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xuICBmb250LXdlaWdodDogNTAwO1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHBhZGRpbmctdG9wOiAxMHB4O1xuICByaWdodDogNDBweDtcbiAgdGV4dC1hbGlnbjogcmlnaHQ7XG4gIHRyYW5zaXRpb246IGNvbG9yIC4ycztcblxuICAmLnByZXYge1xuICAgIHJpZ2h0OiBhdXRvO1xuICAgIGxlZnQ6IDQwcHg7XG4gICAgdGV4dC1hbGlnbjogbGVmdDtcblxuICAgIEBtZWRpYSAobWF4LXdpZHRoOiA1MDBweCkge1xuICAgICAgZGlzcGxheTogbm9uZTtcbiAgICB9XG5cbiAgICAmOjpiZWZvcmUge1xuICAgICAgY29udGVudDogJ1ByZXZpb3VzJztcbiAgICB9XG5cbiAgICAmOjphZnRlciB7XG4gICAgICByaWdodDogYXV0bztcbiAgICAgIGxlZnQ6IC0yNXB4O1xuICAgICAgY29udGVudDogJ1xcZjExNyc7XG4gICAgfVxuICB9XG5cbiAgJjpob3ZlciB7XG4gICAgY29sb3I6ICRibHVlO1xuICB9XG5cbiAgJjo6YmVmb3JlIHtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgICBjb250ZW50OiAnTmV4dCc7XG4gICAgZm9udC1zaXplOiAxM3B4O1xuICAgIGNvbG9yOiAkZ3JleTtcbiAgICBmb250LXdlaWdodDogNDAwO1xuICB9XG5cbiAgJjo6YWZ0ZXIge1xuICAgIGNvbnRlbnQ6ICdcXGYxMTknO1xuICAgIGZvbnQtZmFtaWx5OiBJb25pY29ucztcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgcmlnaHQ6IC0yNXB4O1xuICAgIGZvbnQtc2l6ZTogMzJweDtcbiAgICBmb250LXdlaWdodDogNjAwO1xuICAgIGJvdHRvbTogLTEwcHg7XG4gIH1cbn1cblxuLnBsYXRmb3JtLXByZXZpZXcge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHJpZ2h0OiAwO1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIHJpZ2h0OiAtMjBweDtcbiAgei1pbmRleDogMTtcbiAgYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7XG5cbiAgJi5maXhleSB7XG4gICAgcG9zaXRpb246IGZpeGVkO1xuICAgIHRvcDogMDtcbiAgfVxuXG4gID4gYSB7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIHRvcDogLTI1cHg7XG4gICAgZm9udC1zaXplOiAxNXB4O1xuXG4gICAgJiwgJjpob3ZlciwgJjphY3RpdmUsICY6Zm9jdXMge1xuICAgICAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xuICAgIH1cbiAgfVxufVxuXG4ucGxhdGZvcm0tcHJldmlldyAucGxhdGZvcm0tdG9nZ2xlLCAuZG9jcy1jb250YWluZXIgLnNhc3MtcGxhdGZvcm0tdG9nZ2xlIHtcblxuICBhIHtcbiAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgIHBhZGRpbmc6IDRweCAxNnB4O1xuICAgIGJvcmRlci1yYWRpdXM6IDE2cHg7XG4gICAgY29sb3I6ICRncmV5O1xuICAgIGZvbnQtc2l6ZTogMTRweDtcbiAgICBmb250LXdlaWdodDogNTAwO1xuICAgIC13ZWJraXQtZm9udC1zbW9vdGhpbmc6IGFudGlhbGlhc2VkO1xuICAgIHRyYW5zaXRpb246IC4ycyBjb2xvciwgLjJzIGJhY2tncm91bmQtY29sb3I7XG5cbiAgICAmLmFjdGl2ZSxcbiAgICAmLmFjdGl2ZTpob3ZlciB7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkYmx1ZTtcbiAgICAgIGNvbG9yOiB3aGl0ZTtcbiAgICB9XG5cbiAgICAmOmhvdmVyIHtcbiAgICAgIGNvbG9yOiAkYmx1ZTtcbiAgICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbiAgICB9XG4gIH1cbn1cblxuLnBsYXRmb3JtLXByZXZpZXcgIC5wbGF0Zm9ybS10b2dnbGUge1xuICBwYWRkaW5nOiA4cHggMTBweCA0cHg7XG59XG5cbi5kb2NzLWNvbnRhaW5lciAuc2Fzcy1wbGF0Zm9ybS10b2dnbGUge1xuICBwYWRkaW5nLXRvcDogMHB4IDEwcHggNHB4O1xuICBtYXJnaW4tYm90dG9tOiAxMHB4O1xuICBmbG9hdDogcmlnaHQ7XG59XG5cbiNzYXNzLXZhcmlhYmxlLWhlYWRlciB7XG4gIG1hcmdpbi1ib3R0b206IDBweDtcbiAgcGFkZGluZy1ib3R0b206IDBweDtcbn1cblxuI3Nhc3MtdmFyaWFibGVzIHtcbiAgbWFyZ2luLWJvdHRvbTogMHB4O1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIGJvdHRvbTogMTVweDtcblxuICAudGFibGUucGFyYW0tdGFibGUge1xuICAgIHRkLFxuICAgIHRoIHtcbiAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XG5cbiAgICAgICY6bGFzdC1jaGlsZCwgJjpudGgtbGFzdC1jaGlsZCgyKSB7XG4gICAgICAgIHdoaXRlLXNwYWNlOiBub3JtYWw7XG4gICAgICB9XG5cbiAgICAgICY6bnRoLWxhc3QtY2hpbGQoMikge1xuICAgICAgICB3aWR0aDogMTAlO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5AbWVkaWEgKG1heC13aWR0aDogMTMwMHB4KSBhbmQgKG1pbi13aWR0aDogJHNjcmVlbi14cykge1xuICAjc2Fzcy12YXJpYWJsZXMge1xuICAgIGJvdHRvbTogLTEwcHg7XG5cbiAgICAudGFibGUucGFyYW0tdGFibGUge1xuICAgICAgdGQsXG4gICAgICB0aCB7XG4gICAgICAgIHdoaXRlLXNwYWNlOiBub3JtYWw7XG5cbiAgICAgICAgJjpudGgtbGFzdC1jaGlsZCgyKSB7XG4gICAgICAgICAgd2lkdGg6IGF1dG87XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuQG1lZGlhIChtYXgtd2lkdGg6ICRzY3JlZW4teHMpIHtcbiAgI3Nhc3MtdmFyaWFibGVzIHtcbiAgICBib3R0b206IC0yNXB4O1xuXG4gICAgLnRhYmxlLnBhcmFtLXRhYmxlIHtcbiAgICAgIHRyLHRkIHtcbiAgICAgICAgd2hpdGUtc3BhY2U6IG5vcm1hbDtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuI2RlbW8tZGV2aWNlLWlvcyB7XG4gIHdpZHRoOiAkcGxhdGZvcm0tcHJldmlldy13aWR0aDtcbiAgaGVpZ2h0OiA4MDBweDtcbiAgYmFja2dyb3VuZDogY2VudGVyIHRvcCBuby1yZXBlYXQgdXJsKCcvaW1nL2RldmljZXMtc3ByaXRlLmpwZycpO1xuICBiYWNrZ3JvdW5kLXNpemU6ICRwbGF0Zm9ybS1wcmV2aWV3LXdpZHRoO1xuICBtYXJnaW46IDAgYXV0bztcblxuICBpZnJhbWUge1xuICAgIG1hcmdpbi10b3A6IDg1cHg7XG4gICAgd2lkdGg6IDMyMHB4O1xuICAgIGhlaWdodDogNTY4cHg7XG4gIH1cbn1cblxuI2RlbW8tZGV2aWNlLWFuZHJvaWQge1xuICBAZXh0ZW5kICNkZW1vLWRldmljZS1pb3M7XG5cbiAgYmFja2dyb3VuZC1wb3NpdGlvbjogY2VudGVyIGNlbnRlcjtcblxuICBpZnJhbWUge1xuICAgIG1hcmdpbi10b3A6IDY0cHg7XG4gICAgd2lkdGg6IDM2MHB4O1xuICAgIGhlaWdodDogNTkwcHg7XG4gIH1cbn1cblxuI2RlbW8tZGV2aWNlLXdpbmRvd3Mge1xuICBAZXh0ZW5kICNkZW1vLWRldmljZS1pb3M7XG5cbiAgYmFja2dyb3VuZC1wb3NpdGlvbjogY2VudGVyIGJvdHRvbTtcblxuICBpZnJhbWUge1xuICAgIG1hcmdpbi10b3A6IDcycHg7XG4gICAgd2lkdGg6IDM1MHB4O1xuICAgIGhlaWdodDogNjIycHg7XG4gICAgYmFja2dyb3VuZDogd2hpdGU7XG4gIH1cbn1cblxubGkubmF2LWl0ZW0taGlkZGVuIHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB0b3A6IC05OTk5cHg7XG4gIGxlZnQ6IC05OTk5cHg7XG59XG5cbnVsLmRvY3MtY29udGVudCB7XG4gIGxpc3Qtc3R5bGU6IG5vbmU7XG4gIGxpbmUtaGVpZ2h0OiAyNnB4O1xuICBwYWRkaW5nLWxlZnQ6IDE2cHg7XG5cbiAgbGkuZG9jcy1jb250ZW50LWhlYWRlciB7XG4gICAgZm9udC13ZWlnaHQ6IDQwMDtcbiAgICBjb2xvcjogI0I5QkVDNTtcbiAgfVxuXG59XG5cbnVsLmRvY3MtZXhhbXBsZSB7XG4gIGxpc3Qtc3R5bGU6IG5vbmU7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICBtYXJnaW46IDNlbSAwO1xuICBwYWRkaW5nOiAwO1xuICBib3JkZXItcmFkaXVzOiA0cHg7XG5cbiAgbGkge1xuICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICBib3JkZXI6IDFweCBzb2xpZCAjZTZlOWVlO1xuICAgIHdpZHRoOiAzMiU7XG4gICAgbWFyZ2luOiAwO1xuICAgIHBhZGRpbmc6IDglIDA7XG5cbiAgICBAbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiAkc2NyZWVuLXhzLW1heCkge1xuICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICB3aWR0aDogMTAwJTtcbiAgICAgIG1hcmdpbi1ib3R0b206IDFlbTtcbiAgICB9XG5cbiAgICAmOm5vdCg6Zmlyc3QtY2hpbGQpIHtcbiAgICAgIG1hcmdpbi1sZWZ0OiAxJTtcbiAgICB9XG4gIH1cblxuICBsaSBpbWcge1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIG1hcmdpbjogMCBhdXRvO1xuICAgIHdpZHRoOiA1NS43JTtcbiAgfVxufVxuXG4uaGlnaGxpZ2h0IC5lcnIge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xufVxuXG4ucGFyYW0tdGFibGUge1xuICB0ZCBwIHtcbiAgICBtYXJnaW46IDA7XG4gICAgbGluZS1oZWlnaHQ6IDIycHg7XG4gIH1cblxuICB0ZCB1bCB7XG4gICAgbGlzdC1zdHlsZTogbm9uZTtcbiAgICBtYXJnaW4tcmlnaHQ6IC03cHg7XG4gICAgbWFyZ2luLWxlZnQ6IC05MnB4O1xuICAgIGJvcmRlcjogMXB4IHNvbGlkICNlNmU5ZWU7XG4gICAgYm9yZGVyLWxlZnQ6IDA7XG4gICAgYm9yZGVyLXRvcDogMDtcbiAgICBwYWRkaW5nOiAxMHB4IDE3cHg7XG4gICAgYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6IDAuNWVtO1xuXG4gICAgbGkge1xuICAgICAgcGFkZGluZzogMDtcbiAgICAgIG1hcmdpbjogMTdweCAwO1xuICAgIH1cbiAgfVxufVxuXG4ucmV0dXJuLXZhbHVlIHtcbiAgYiB7XG4gICAgJjo6YmVmb3JlIHtcbiAgICAgIGZvbnQtZmFtaWx5OiAnSW9uaWNvbnMnO1xuICAgICAgLXdlYmtpdC1mb250LXNtb290aGluZzogYW50aWFsaWFzZWQ7XG4gICAgICBjb250ZW50OiAnXFxmMjAzJztcbiAgICAgIGZvbnQtc2l6ZTogMTZweDtcbiAgICAgIGZvbnQtd2VpZ2h0OiA4MDA7XG4gICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICBwYWRkaW5nLXJpZ2h0OiA1cHg7XG4gICAgICB0b3A6IDJweDtcbiAgICB9XG4gIH1cbn1cblxuLmRvY3MtY29udGFpbmVyIHtcbiAgaDIsIGgzIHtcbiAgICBhOm5vdChbcm9sZT0nYnV0dG9uJ10pIHtcbiAgICAgIGNvbG9yOiAjMjYyOTJlICFpbXBvcnRhbnQ7XG5cbiAgICAgICY6aG92ZXIge1xuICAgICAgICBjb2xvcjogIzI2MjkyZSAhaW1wb3J0YW50O1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG4uaGVybyB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbn1cblxuLmZhcS1zZWN0aW9uIHtcbiAgbWFyZ2luOiA4MHB4IGF1dG87XG59XG5cbkBtZWRpYSAobWF4LXdpZHRoOiAkc2NyZWVuLXNtLW1heCkgYW5kIChtaW4td2lkdGg6ICRzY3JlZW4tc20tbWluKXtcbiAgLmhpZGUtc20ge1xuICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDtcbiAgfVxufVxuXG4ubmF0aXZlLWRvY3MgYXtcbiAgbWFyZ2luLXRvcDogMCAhaW1wb3J0YW50O1xufVxuXG5bbmdcXDpjbG9ha10sIFtuZy1jbG9ha10sIFtkYXRhLW5nLWNsb2FrXSwgW3gtbmctY2xvYWtdLCAubmctY2xvYWssIC54LW5nLWNsb2FrIHtcbiAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50O1xufVxuXG4jaHVic3BvdC1tZXNzYWdlcy1pZnJhbWUtY29udGFpbmVyIHsgei1pbmRleDogMSB9IC8vc28gaHVic3BvdCBtZXNzYWdlcyBidXR0b24gZG9lc24ndCBjb3ZlciBtcG9iaWxlIG5hdiwgbW9kYWxzLCBldGMuXG4iLCIucGFnZS00MDQgLmZvdXItb2gtZm91ciB7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcblxuICBpbWcge1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIG1heC13aWR0aDogMzM2cHg7XG4gIH1cblxuICBwIHtcbiAgICBjb2xvcjogJGdyZXk7XG4gICAgZm9udC1zaXplOiAxOHB4O1xuICB9XG5cbiAgYSB7XG4gICAgZm9udC1zaXplOiAxNnB4O1xuICAgIGZvbnQtd2VpZ2h0OiA1MDA7XG5cbiAgICAmOjphZnRlciB7XG4gICAgICBmb250LWZhbWlseTogSW9uaWNvbnM7XG4gICAgICBjb250ZW50OiAnXFxmMjg3JztcbiAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICAgIG1hcmdpbi1sZWZ0OiAxMHB4O1xuICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICAgdG9wOiAycHg7XG4gICAgfVxuICB9XG59XG4iLCIjcGFnZS1hcnRpY2xlcy13aHktaHlicmlkIHtcbiAgLnNpZ251cC1mb3JtIC5jYXJkIHtcbiAgICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoJy9pbWcvYXJ0aWNsZXMvd2h5LWh5YnJpZC1jb3Zlci5qcGcnKTtcbiAgfVxufSIsIiNwYWdlLWJvb2tzLW5hdGl2ZS12LWh5YnJpZCB7XG5cdGJhY2tncm91bmQ6ICNlMWU2ZWY7XG5cdGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCh0byByaWdodCwgI2UxZTZlZiwgI2UxZTZlZiA1MCUsICMxMjIxMzggNTAlLCAjMTIyNTQxKTtcblx0cG9zaXRpb246IHJlbGF0aXZlO1xuXHRoZWlnaHQ6IDEwMCU7XG5cblx0Jjo6YmVmb3JlIHtcblx0XHRiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoNDVkZWcsICMxMTFjMmMsICMxMjI1NDEpO1xuXHRcdGNvbnRlbnQ6ICcnO1xuXHRcdHBvc2l0aW9uOiBhYnNvbHV0ZTtcblx0XHR0b3A6IDA7XG5cdFx0cmlnaHQ6IDA7XG5cdFx0bGVmdDogNTAlO1xuXHRcdGJvdHRvbTogMDtcblx0fVxuXG5cdG1haW4ge1xuXHRcdGRpc3BsYXk6IGZsZXg7XG5cdFx0cG9zaXRpb246IHJlbGF0aXZlO1xuXHRcdGFsaWduLWl0ZW1zOiBjZW50ZXI7XG5cdFx0aGVpZ2h0OiAxMDAlO1xuXG5cdH1cblxuXHRhc2lkZSxcblx0aGdyb3VwIHtcblx0XHRmbGV4OiAwIDAgNTAlO1xuXHR9XG5cblx0YXNpZGUge1xuXHRcdHBvc2l0aW9uOiByZWxhdGl2ZTtcblx0XHRiYWNrZ3JvdW5kOiB1cmwoXCIvaW1nL2Jvb2tzL3dlYi1lYm9vay1jb3Zlci5qcGdcIikgbm8tcmVwZWF0IGNhbGMoMTAwJSAtIDFweCkgNTAlO1xuXHRcdGJhY2tncm91bmQtc2l6ZTogY29udGFpbjtcblx0XHRoZWlnaHQ6IDEwMCU7XG5cdFx0bWFyZ2luLXRvcDoxNjBweDtcblx0fVxuXG5cdGhncm91cCB7XG5cdFx0Y29sb3I6IHdoaXRlO1xuXHRcdHBhZGRpbmctbGVmdDogMTAlO1xuXG5cdFx0aDEge1xuXHRcdFx0Zm9udC13ZWlnaHQ6IDcwMDtcblx0XHRcdGZvbnQtc2l6ZTogNDRweDtcblx0XHRcdGxpbmUtaGVpZ2h0OiAxLjRlbVxuXHRcdH1cblxuXHRcdHAge1xuXHRcdFx0Zm9udC1zaXplOiAxOHB4O1xuXHRcdFx0bGluZS1oZWlnaHQ6IDEuN2VtO1xuXHRcdFx0bWFyZ2luOiAzOHB4IDA7XG5cdFx0fVxuXG5cdFx0LmJ0biB7XG5cdFx0XHRjb2xvcjogIzc3M2UwMDtcblx0XHRcdGJhY2tncm91bmQ6ICNmZmNiMmM7XG5cdFx0fVxuXHR9XG5cblx0Lm1vZGFsIHtcblx0XHRoZ3JvdXAge1xuXHRcdFx0cGFkZGluZy1yaWdodDogMTAlO1xuXHRcdH1cblxuXHRcdGgzIHtcblx0XHRcdGNvbG9yOiAkYmxhY2tlcjtcblx0XHR9XG5cdH1cblxuXHRAbWVkaWEgKG1heC13aWR0aDogJHNjcmVlbi1zbS1tYXgpICB7XG5cdGJhY2tncm91bmQ6ICNlMWU2ZWY7XG5cblx0Jjo6YmVmb3JlIHtcblx0XHRkaXNwbGF5OiBub25lO1xuXHR9XG5cblx0XHRtYWluIHtcblx0XHRcdGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG5cdFx0XHR3aWR0aDogMTAwJTtcblxuXHRcdFx0YXNpZGUge1xuXHRcdFx0XHRoZWlnaHQ6IDQwMHB4O1xuXHRcdFx0XHR3aWR0aDogMTAwJTtcblx0XHRcdFx0YmFja2dyb3VuZC1wb3NpdGlvbjogY2FsYyg1MCUgKyAzM3B4KSA1MCU7XG5cdFx0XHRcdG1hcmdpbi10b3A6IDY0cHg7XG5cdFx0XHR9XG5cdFxuXHRcdFx0aGdyb3VwIHtcblx0XHRcdFx0cGFkZGluZzogMjBweCAyMHB4IDQ4cHg7XG5cdFx0XHRcdHBvc2l0aW9uOiByZWxhdGl2ZTtcblx0XHRcdFx0dGV4dC1hbGlnbjogY2VudGVyO1xuXHRcblx0XHRcdFx0Jjo6YmVmb3JlIHtcblx0XHRcdFx0XHRiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoNDVkZWcsICMxMTFjMmMsICMxMjI1NDEpO1xuXHRcdFx0XHRcdGNvbnRlbnQ6ICcnO1xuXHRcdFx0XHRcdHBvc2l0aW9uOiBhYnNvbHV0ZTtcblx0XHRcdFx0XHR0b3A6IDA7XG5cdFx0XHRcdFx0cmlnaHQ6IC0xNXB4O1xuXHRcdFx0XHRcdGxlZnQ6IC0xNXB4O1xuXHRcdFx0XHRcdGJvdHRvbTogMDtcblx0XHRcdFx0fVxuXHRcblx0XHRcdFx0PiAqIHtcblx0XHRcdFx0XHRwb3NpdGlvbjogcmVsYXRpdmU7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cbn1cbiIsIi5ib29rLXByZXZpZXcge1xuICB3aWR0aDogMTAwdnc7XG4gIGhlaWdodDogMTAwdmg7XG4gIGJhY2tncm91bmQtY29sb3I6ICMxMjI1NDE7XG4gIGJhY2tncm91bmQtaW1hZ2U6IGxpbmVhci1ncmFkaWVudCg0NWRlZywgIzExMWMyYywgIzEyMjU0MSk7XG4gIG92ZXJmbG93OiBoaWRkZW47XG59XG4iLCIjcGFnZS1jb21tdW5pdHkge1xuICAuYmFubmVyLFxuICBtYWluIHtcbiAgICBmb250LWZhbWlseTogJGZvbnQtZmFtaWx5LWludGVyO1xuXG4gICAgaDEsXG4gICAgaDIsXG4gICAgaDMsXG4gICAgaDQsXG4gICAgc3Ryb25nIHtcbiAgICAgIGNvbG9yOiAjMGYxNjIyO1xuICAgICAgZm9udC1mYW1pbHk6ICRmb250LWZhbWlseS1laW5hO1xuICAgIH1cblxuICAgIGEge1xuICAgICAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xuICAgIH1cblxuICAgIGhncm91cCBwIHtcbiAgICAgIGNvbG9yOiAjNGE1ODZmO1xuICAgIH1cbiAgfVxuXG4gIC5iYW5uZXIge1xuICAgIGJhY2tncm91bmQ6ICNmY2ZkZmYgbm8tcmVwZWF0IDAgMDtcbiAgICBiYWNrZ3JvdW5kLWltYWdlOlxuICAgICAgdXJsKCcvaW1nL2NvbW11bml0eS9oZXJvLWJnLmpwZycpLFxuICAgICAgbGluZWFyLWdyYWRpZW50KHRvIGJvdHRvbSwgI2ZhZmNmZCwgI2Y0ZjVmNyk7XG4gICAgYmFja2dyb3VuZC1zaXplOiBjb3ZlciwgMTAwJTtcbiAgICBwYWRkaW5nLXRvcDogMjI2cHg7XG4gICAgbWFyZ2luLXRvcDogLTExMHB4O1xuICAgIHdpbGwtY2hhbmdlOiB0cmFzbmZvcm07XG5cbiAgICBoZ3JvdXAge1xuICAgICAgbWF4LXdpZHRoOiA3NjhweDtcbiAgICAgIHdpbGwtY2hhbmdlOiB0cmFzbmZvcm07XG5cbiAgICAgIGxpIHtcblxuICAgICAgICBAbWVkaWEgKG1heC13aWR0aDogJHNjcmVlbi14cy1tYXgpIHtcbiAgICAgICAgICBwYWRkaW5nLXJpZ2h0OiAxNXB4O1xuICAgICAgICB9XG5cbiAgICAgICAgQG1lZGlhIChtYXgtd2lkdGg6ICRzY3JlZW4teHMtbWF4KSB7XG4gICAgICAgICAgbGkge1xuICAgICAgICAgICAgbWFyZ2luLWJvdHRvbTogMTZweDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBoMSB7XG4gICAgICBmb250LXNpemU6IDQ4cHg7XG4gICAgICBmb250LXdlaWdodDogNzAwO1xuICAgICAgbGV0dGVyLXNwYWNpbmc6IC0uMDRlbTtcbiAgICAgIG1hcmdpbi1ib3R0b206IDIzcHg7XG4gICAgfVxuXG4gICAgcCB7XG4gICAgICBmb250LXNpemU6IDIycHg7XG4gICAgICBsZXR0ZXItc3BhY2luZzogLS4wM2VtO1xuICAgICAgbGluZS1oZWlnaHQ6IDM2cHg7XG4gICAgfVxuXG4gICAgdWwge1xuICAgICAgcGFkZGluZzogMzNweCAwIDA7XG4gICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgbGlzdC1zdHlsZTogbm9uZTtcbiAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgICAgIGZsZXgtd3JhcDogd3JhcDtcbiAgICB9XG5cbiAgICBsaSB7XG4gICAgICBmb250LXNpemU6IDI0cHg7XG5cbiAgICAgICY6Zmlyc3QtY2hpbGQgYSB7IHBhZGRpbmctbGVmdDogMDsgfVxuXG4gICAgICBhIHtcbiAgICAgICAgcGFkZGluZzogMCAyMHB4O1xuICAgICAgICBmb250LWZhbWlseTogJGZvbnQtZmFtaWx5LWVpbmE7XG4gICAgICAgIGxldHRlci1zcGFjaW5nOiAtLjAyNGVtO1xuICAgICAgICB0cmFuc2l0aW9uOiBhbGwgLjE1cyBlYXNlO1xuICAgICAgICBjb2xvcjogIzAwNzlmZjtcbiAgICAgICAgdHJhbnNpdGlvbjogLjFzIG9wYWNpdHksIC4xcyBjb2xvcjtcblxuICAgICAgICAmOmhvdmVyIHtcbiAgICAgICAgICBjb2xvcjogbGlnaHRlbigjMDA3OWZmLCAxNSk7XG5cbiAgICAgICAgICBpb24taWNvbiB7XG4gICAgICAgICAgICBjb2xvcjogbGlnaHRlbigjMDA3OWZmLCAxNSk7XG4gICAgICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoMnB4KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaW9uLWljb24ge1xuICAgICAgICBmb250LXNpemU6IDE5cHg7XG4gICAgICAgIHZlcnRpY2FsLWFsaWduOiAtMTAlO1xuICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgICAgIHRyYW5zaXRpb246IC4xcyB0cmFuc2Zvcm0gZWFzZS1vdXQ7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLmZlYXR1cmVzIHtcbiAgICAgIG1heC13aWR0aDogOTgycHg7XG4gICAgICBtYXJnaW4tdG9wOiAxMjBweDtcbiAgICAgIHBhZGRpbmctYm90dG9tOiAyN3B4O1xuICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgIGZsZXgtd3JhcDogd3JhcDtcbiAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcbiAgICAgIHdpbGwtY2hhbmdlOiB0cmFzbmZvcm07XG5cbiAgICAgICY6OmJlZm9yZSxcbiAgICAgICY6OmFmdGVyIHtcbiAgICAgICAgZGlzcGxheTogbm9uZTtcbiAgICAgIH1cblxuICAgICAgbGkge1xuICAgICAgICBsaXN0LXN0eWxlOiBub25lO1xuICAgICAgICBwYWRkaW5nOiAwO1xuICAgICAgICB0ZXh0LWFsaWduOiBsZWZ0O1xuICAgICAgICBtaW4td2lkdGg6IDEyOHB4O1xuICAgICAgICBwYWRkaW5nLWxlZnQ6IDE1cHg7XG4gICAgICAgIHBhZGRpbmctYm90dG9tOiAzMnB4O1xuICAgICAgfVxuXG4gICAgICBzdHJvbmcge1xuICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgICAgZm9udC1zaXplOiAzN3B4O1xuICAgICAgICBsZXR0ZXItc3BhY2luZzogLS4wNGVtO1xuICAgICAgICBsaW5lLWhlaWdodDogNDBweDtcbiAgICAgIH1cblxuICAgICAgc3BhbiB7XG4gICAgICAgIGZvbnQtc2l6ZTogMTlweDtcbiAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgIGNvbG9yOiAjNzI3YzhlO1xuICAgICAgfVxuXG4gICAgICBAbWVkaWEgKG1heC13aWR0aDogJHNjcmVlbi14cy1tYXgpIHtcbiAgICAgICAgbWFyZ2luLXRvcDogMDtcbiAgICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1hcm91bmQ7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaDEsXG4gICAgcCxcbiAgICBsaSB7XG4gICAgICBhbmltYXRpb246IDFzIGZhZGVJblVwIGZvcndhcmRzO1xuICAgICAgb3BhY2l0eTogMDtcbiAgICB9XG5cbiAgICBoMSB7IGFuaW1hdGlvbi1kZWxheTogLjhzOyB9XG5cbiAgICBwIHsgYW5pbWF0aW9uLWRlbGF5OiAxczsgfVxuXG4gICAgaGdyb3VwIGxpIHtcbiAgICAgIGFuaW1hdGlvbi1kZWxheTogMS42cztcblxuICAgICAgJjpudGgtY2hpbGQoMikgeyBhbmltYXRpb24tZGVsYXk6IDEuN3M7IH1cblxuICAgICAgJjpudGgtY2hpbGQoMykgeyBhbmltYXRpb24tZGVsYXk6IDEuOHM7IH1cblxuICAgICAgJjpudGgtY2hpbGQoNCkgeyBhbmltYXRpb24tZGVsYXk6IDEuOXM7IH1cbiAgICB9XG5cbiAgICAuZmVhdHVyZXMgbGkge1xuICAgICAgYW5pbWF0aW9uLWRlbGF5OiAyLjJzO1xuXG4gICAgICAmOm50aC1jaGlsZCgyKSB7IGFuaW1hdGlvbi1kZWxheTogMi4zczsgfVxuXG4gICAgICAmOm50aC1jaGlsZCgzKSB7IGFuaW1hdGlvbi1kZWxheTogMi40czsgfVxuXG4gICAgICAmOm50aC1jaGlsZCg0KSB7IGFuaW1hdGlvbi1kZWxheTogMi41czsgfVxuICAgIH1cblxuICAgIEBtZWRpYSAobWF4LXdpZHRoOiAkc2NyZWVuLXhzLW1heCkge1xuICAgICAgdHJhbnNmb3JtOiBub25lICFpbXBvcnRhbnQ7XG5cbiAgICAgIGhncm91cCxcbiAgICAgIC5mZWF0dXJlcyB7XG4gICAgICAgIHRyYW5zZm9ybTogbm9uZSAhaW1wb3J0YW50O1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIG1haW4ge1xuICAgIGJhY2tncm91bmQ6IHdoaXRlO1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICB6LWluZGV4OiAxO1xuICAgIG92ZXJmbG93OiBoaWRkZW47XG4gIH1cblxuICAubWVldHVwcyB7XG4gICAgcGFkZGluZy10b3A6IDk2cHg7XG5cbiAgICAuc3BsaXQge1xuICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG5cbiAgICAgIEBtZWRpYSAobWF4LXdpZHRoOiAkc2NyZWVuLW1kLW1heCkgYW5kIChtaW4td2lkdGg6ICRzY3JlZW4tbWQtbWluKSB7XG5cbiAgICAgICAgLmJ0bnMge1xuICAgICAgICAgIHBhZGRpbmctdG9wOiAwO1xuICAgICAgICAgIG1hcmdpbi1sZWZ0OiAyNHB4O1xuICAgICAgICB9XG5cbiAgICAgICAgLmJ0biB7XG4gICAgICAgICAgbWFyZ2luLWJvdHRvbTogOHB4O1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIEBtZWRpYSAobWF4LXdpZHRoOiAkc2NyZWVuLXhzLW1heCkge1xuICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaGdyb3VwIHtcbiAgICAgIG1heC13aWR0aDogNTkycHg7XG4gICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG5cbiAgICAgIGgyIHtcbiAgICAgICAgZm9udC1zaXplOiAzMXB4O1xuICAgICAgICBmb250LXdlaWdodDogNzAwO1xuICAgICAgICBsZXR0ZXItc3BhY2luZzogLS4wMDZlbTtcbiAgICAgICAgbWFyZ2luLWJvdHRvbTogMTJweDtcbiAgICAgIH1cblxuICAgICAgcCB7XG4gICAgICAgIGZvbnQtc2l6ZTogMThweDtcbiAgICAgICAgbGluZS1oZWlnaHQ6IDI4cHg7XG4gICAgICAgIGxldHRlci1zcGFjaW5nOiAtLjAwNWVtO1xuICAgICAgfVxuICAgIH1cblxuICAgIC5idG5zIHtcbiAgICAgIHBhZGRpbmctdG9wOiA3OHB4O1xuXG4gICAgICA6Zmlyc3QtY2hpbGQge1xuICAgICAgICBtYXJnaW4tcmlnaHQ6IDZweDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAuYnRuIHtcbiAgICAgIGZvbnQtc2l6ZTogMTZweDtcbiAgICAgIHBhZGRpbmc6IDE0cHggMThweCAxMnB4O1xuICAgICAgbGV0dGVyLXNwYWNpbmc6IC0uMDFlbTtcbiAgICAgIGZvbnQtZmFtaWx5OiAkZm9udC1mYW1pbHktZWluYTtcbiAgICAgIGZvbnQtd2VpZ2h0OiA3MDA7XG4gICAgICB0cmFuc2l0aW9uOiBhbGwgLjJzIGVhc2U7XG4gICAgfVxuXG4gICAgdWwge1xuICAgICAgbGlzdC1zdHlsZTogbm9uZTtcbiAgICAgIHBhZGRpbmc6IDA7XG4gICAgICBtYXJnaW46IDY0cHggMCA4MHB4O1xuICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgIGxlZnQ6IDA7XG4gICAgICBvcGFjaXR5OiAwO1xuICAgICAgd2lsbC1jaGFuZ2U6IHRyYW5zZm9ybTtcbiAgICAgIGFuaW1hdGlvbjogMXMgZmFkZUluIGZvcndhcmRzIDFzO1xuICAgIH1cblxuICAgIGxpIHtcbiAgICAgIG1hcmdpbi1yaWdodDogODBweDtcblxuICAgICAgYSB7XG4gICAgICAgIHBhZGRpbmc6IDE2cHggMzVweCAxNHB4IDczcHg7XG4gICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgIHRyYW5zaXRpb246IC40cyB0cmFuc2Zvcm0gZWFzZTtcblxuICAgICAgICAmOjpiZWZvcmUge1xuICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgICB0b3A6IDA7XG4gICAgICAgICAgcmlnaHQ6IDA7XG4gICAgICAgICAgbGVmdDogMDtcbiAgICAgICAgICBib3R0b206IDA7XG4gICAgICAgICAgY29udGVudDogJyc7XG4gICAgICAgICAgYm94LXNoYWRvdzpcbiAgICAgICAgICAgIDAgNnB4IDEycHggcmdiYSgwLDgsMjQsLjA4KSxcbiAgICAgICAgICAgIDAgMnB4IDRweCByZ2JhKDAsOCwyNCwuMDQpO1xuICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDMwcHg7XG4gICAgICAgICAgdHJhbnNpdGlvbjogYm94LXNoYWRvdyAuMXMgZWFzZSwgdHJhbnNmb3JtIC4xcyBlYXNlO1xuICAgICAgICB9XG5cbiAgICAgICAgJjo6YWZ0ZXIge1xuICAgICAgICAgIGJhY2tncm91bmQ6IHVybCgnL2ltZy9jb21tdW5pdHkvZmxhZ3MucG5nJykgMCAwIG5vLXJlcGVhdDtcbiAgICAgICAgICBiYWNrZ3JvdW5kLXNpemU6IDQ4cHg7XG4gICAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICAgIGxlZnQ6IDExcHg7XG4gICAgICAgICAgdG9wOiBjYWxjKDUwJSAtIDI0cHgpO1xuICAgICAgICAgIGhlaWdodDogNDhweDtcbiAgICAgICAgICB3aWR0aDogNDhweDtcbiAgICAgICAgICBjb250ZW50OiAnJztcbiAgICAgICAgfVxuXG4gICAgICAgIEBpbmNsdWRlIHNwcml0ZShcbiAgICAgICAgICAndWsnXG4gICAgICAgICAgJ2NoJ1xuICAgICAgICAgICdkZSdcbiAgICAgICAgICAnaWwnXG4gICAgICAgICAgJ3VzJ1xuICAgICAgICAgICdicidcbiAgICAgICAgICAnbmwnXG4gICAgICAgICAgJ2VzJ1xuICAgICAgICAgICdhbXMnXG4gICAgICAgICAgJ2luJ1xuICAgICAgICAgICd5dnInXG4gICAgICAgICAgJ3RyJ1xuICAgICAgICAgICdhdSdcbiAgICAgICAgICAnZGsnXG4gICAgICAgICAgJ2h1J1xuICAgICAgICAgICdjbydcbiAgICAgICAgICAnanAnXG4gICAgICAgICAgJ3VnJ1xuICAgICAgICAgICdoaydcbiAgICAgICAgICAnbmcnXG4gICAgICAgICAgJ3R6J1xuICAgICAgICAgICd0aCdcbiAgICAgICAgLCA0OCwgJzo6YWZ0ZXInKTtcblxuICAgICAgICAmOmhvdmVyIHtcbiAgICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTFweCk7XG5cbiAgICAgICAgICAmOjpiZWZvcmUge1xuICAgICAgICAgICAgYm94LXNoYWRvdzpcbiAgICAgICAgICAgICAgMCAxMHB4IDE4cHggcmdiYSgwLDgsMjQsLjEpLFxuICAgICAgICAgICAgICAwIDRweCA4cHggcmdiYSgwLDgsMjQsLjA4KTtcbiAgICAgICAgICAgIHRyYW5zZm9ybTogc2NhbGUzZCgxLjAxLCAxLjAyLCAxKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgc3Ryb25nLFxuICAgICAgc3BhbiB7XG4gICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgICAgei1pbmRleDogMTtcbiAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gICAgICB9XG5cbiAgICAgIHN0cm9uZyB7XG4gICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7XG4gICAgICAgIGxldHRlci1zcGFjaW5nOiAtLjAxZW07XG4gICAgICAgIGZvbnQtc2l6ZTogMTRweDtcbiAgICAgICAgbGluZS1oZWlnaHQ6IDE2cHg7XG4gICAgICAgIGNvbG9yOiAjMGYxNjIyO1xuICAgICAgfVxuXG4gICAgICBzcGFuIHtcbiAgICAgICAgZm9udC1zaXplOiAxMnB4O1xuICAgICAgICBsZXR0ZXItc3BhY2luZzogLS4wMWVtO1xuICAgICAgICBjb2xvcjogIzUwNjE3NjtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAuaW1hZ2Utd2FsbCB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBmbGV4LXdyYXA6IHdyYXA7XG4gICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xuICAgIG1hcmdpbi10b3A6IDIyMHB4O1xuXG4gICAgQG1lZGlhIChtYXgtd2lkdGg6ICRzY3JlZW4tbWQtbWF4KSB7XG4gICAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWFyb3VuZDtcbiAgICB9XG5cbiAgICBpbWcge1xuICAgICAgaGVpZ2h0OiAyNTZweDtcbiAgICAgIG1hcmdpbi1ib3R0b206IDE0cHg7XG5cbiAgICAgIEBtZWRpYSAobWF4LXdpZHRoOiAkc2NyZWVuLW1kLW1heCkge1xuICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWFyb3VuZDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBAbWVkaWEgKG1heC13aWR0aDogJHNjcmVlbi14cy1tYXgpIHtcbiAgICAgIG1hcmdpbi1sZWZ0OiAtNXB4O1xuICAgICAgbWFyZ2luLXJpZ2h0OiAtNXB4O1xuXG4gICAgICBpbWcge1xuICAgICAgICBtYXJnaW4tcmlnaHQ6IDVweDtcbiAgICAgICAgbWFyZ2luLWxlZnQ6IDVweDtcbiAgICAgICAgaGVpZ2h0OiAxMjhweDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBAbWVkaWEgKG1heC13aWR0aDogNDQwcHgpIHtcbiAgICAgIGltZyB7XG4gICAgICAgIGhlaWdodDogNjRweDtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAubGVhZGVycyB7XG4gICAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KHRvIGJvdHRvbSwgI2Y3ZjlmYiwgd2hpdGUgNTAlLCB3aGl0ZSk7XG4gICAgbWFyZ2luLXRvcDogLTE0MnB4O1xuICAgIHBhZGRpbmctdG9wOiAxODJweDtcblxuICAgIGhncm91cCB7XG4gICAgICBtYXJnaW46IDg0cHggYXV0byA2NnB4O1xuICAgICAgbWF4LXdpZHRoOiA2ODRweDtcbiAgICAgIHRleHQtYWxpZ246IGNlbnRlcjtcblxuICAgICAgaDIge1xuICAgICAgICBmb250LXdlaWdodDogNzAwO1xuICAgICAgICBmb250LXNpemU6IDMycHg7XG4gICAgICAgIG1hcmdpbi1ib3R0b206IDEzcHg7XG4gICAgICAgIGxldHRlci1zcGFjaW5nOiAtMC4wMWVtO1xuICAgICAgfVxuXG4gICAgICBwIHtcbiAgICAgICAgZm9udC1zaXplOiAxOHB4O1xuICAgICAgICBsZXR0ZXItc3BhY2luZzogLS4wMWVtO1xuICAgICAgICBsaW5lLWhlaWdodDogMjhweDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB1bCB7XG4gICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgZmxleC13cmFwOiB3cmFwO1xuICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xuICAgICAgcGFkZGluZzogMTVweDtcblxuICAgICAgJjo6YmVmb3JlLFxuICAgICAgJjo6YWZ0ZXIge1xuICAgICAgICBkaXNwbGF5OiBub25lO1xuICAgICAgfVxuICAgIH1cblxuICAgIGxpIHtcbiAgICAgIGZsZXg6IDAgMCAyNzFweDtcbiAgICAgIGxpc3Qtc3R5bGU6IG5vbmU7XG4gICAgICBwYWRkaW5nOiA4MnB4IDI0cHggMThweDtcbiAgICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgIG1hcmdpbi1ib3R0b206IDU1cHg7XG5cbiAgICAgICY6OmJlZm9yZSxcbiAgICAgICY6OmFmdGVyIHtcbiAgICAgICAgY29udGVudDogJyc7XG4gICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgIH1cblxuICAgICAgJjo6YmVmb3JlIHtcbiAgICAgICAgdG9wOiAwO1xuICAgICAgICByaWdodDogMDtcbiAgICAgICAgbGVmdDogMDtcbiAgICAgICAgYm90dG9tOiAwO1xuICAgICAgICBib3JkZXItcmFkaXVzOiA4cHg7XG4gICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lO1xuICAgICAgICBib3gtc2hhZG93OlxuICAgICAgICAgIDAgNHB4IDhweCByZ2JhKDAsOCwyNCwuMDgpLFxuICAgICAgICAgIDBweCA4cHggMzJweCByZ2JhKDAsOCwyNCwwLjEpO1xuICAgICAgICB0cmFuc2l0aW9uOiAuMnMgYm94LXNoYWRvdyBlYXNlLW91dCwgLjJzIHRyYW5zZm9ybSBlYXNlLW91dDtcbiAgICAgIH1cblxuICAgICAgJjo6YWZ0ZXIge1xuICAgICAgICB0b3A6IC0yMHB4O1xuICAgICAgICByaWdodDogY2FsYyg1MCUgLSA0NXB4KTtcbiAgICAgICAgYmFja2dyb3VuZDogdXJsKCcvaW1nL2NvbW11bml0eS9jb21tdW5pdHktbGVhZGVycy1hdmF0YXJzLnBuZycpIDAgMCBuby1yZXBlYXQ7XG4gICAgICAgIGJhY2tncm91bmQtc2l6ZTogOTBweDtcbiAgICAgICAgaGVpZ2h0OiA5MHB4O1xuICAgICAgICB3aWR0aDogOTBweDtcbiAgICAgIH1cblxuICAgICAgQGluY2x1ZGUgc3ByaXRlKFxuICAgICAgICAnc2ltb24nXG4gICAgICAgICdqb3NoJ1xuICAgICAgICAnam9yZ2UnXG4gICAgICAgICd2ZW5pJ1xuICAgICAgICAnYXNodGV5YSdcbiAgICAgICAgJ3BhdWwnXG4gICAgICAgICdzYW5pJ1xuICAgICAgICAnbGVpZidcbiAgICAgICAgJ2RhdmlkJ1xuICAgICAgICAnY2hyaXMnXG4gICAgICAgICdkYXlhbmEnXG4gICAgICAgICdhYXJvbidcbiAgICAgICwgOTAsICc6OmFmdGVyJyk7XG5cbiAgICAgICY6aG92ZXI6OmJlZm9yZSB7XG4gICAgICAgIGJveC1zaGFkb3c6XG4gICAgICAgIDAgMnB4IDhweCByZ2JhKDAsOCwyNCwuMDgpLFxuICAgICAgICAwcHggOHB4IDMycHggcmdiYSgwLDgsMjQsMC4xKSxcbiAgICAgICAgMCA4cHggMThweCByZ2JhKDAsOCwyNCwuMSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgc3Ryb25nIHtcbiAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgZm9udC1zaXplOiAxNXB4O1xuICAgICAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgICAgIGxldHRlci1zcGFjaW5nOiAuMDFlbTtcbiAgICB9XG5cbiAgICBwIHtcbiAgICAgIGZvbnQtc2l6ZTogMTRweDtcbiAgICAgIG1hcmdpbi10b3A6IDdweDtcbiAgICAgIGxldHRlci1zcGFjaW5nOiAtLjAyZW07XG5cbiAgICAgIGEge1xuICAgICAgICB0cmFuc2l0aW9uOiAuMnMgY29sb3IgZWFzZS1vdXQ7XG5cbiAgICAgICAgJjpob3ZlciB7XG4gICAgICAgICAgY29sb3I6IGRhcmtlbigkYmx1ZSwgMTUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLnR3aXR0ZXIge1xuICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgdG9wOiA5cHg7XG4gICAgICByaWdodDogMTVweDtcbiAgICAgIHdpZHRoOiAyMHB4O1xuICAgICAgaGVpZ2h0OiAyMHB4O1xuICAgICAgZm9udC1zaXplOiAyMHB4O1xuICAgICAgY29sb3I6ICNkNmRkZWE7XG4gICAgICB0cmFuc2l0aW9uOiAuMnMgdHJhbnNmb3JtIGVhc2Utb3V0LCAuMnMgY29sb3IgZWFzZS1vdXQ7XG5cbiAgICAgICY6aG92ZXIge1xuICAgICAgICBjb2xvcjogJGJsdWU7XG4gICAgICAgIHRyYW5zZm9ybTogc2NhbGUzZCgxLjIsIDEuMiwgMSk7XG4gICAgICB9XG4gICAgfVxuXG5cblxuICAgIEBtZWRpYSAobWF4LXdpZHRoOiAkc2NyZWVuLXNtLW1heCkge1xuICAgICAgdWwge1xuICAgICAgICBwYWRkaW5nLWxlZnQ6IDA7XG4gICAgICAgIHBhZGRpbmctcmlnaHQ6IDA7XG4gICAgICB9XG5cbiAgICAgIGxpIHtcbiAgICAgICAgZmxleC1ncm93OiAxO1xuICAgICAgICBtYXJnaW4tbGVmdDogMTVweDtcbiAgICAgICAgbWFyZ2luLXJpZ2h0OiAxNXB4O1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC5qb2luIHtcbiAgICAuc3BsaXQge1xuICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgIHBhZGRpbmc6IDYwcHggMDtcbiAgICAgIGFsaWduLWl0ZW1zOiBmbGV4LWVuZDtcblxuICAgICAgQG1lZGlhIChtYXgtd2lkdGg6ICRzY3JlZW4tc20tbWF4KSB7XG4gICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICB9XG5cbiAgICAgIEBtZWRpYSAobWF4LXdpZHRoOiAkc2NyZWVuLXhzLW1heCkge1xuICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuXG4gICAgICAgIGhncm91cCB7XG4gICAgICAgICAgZmxleDogMDtcbiAgICAgICAgfVxuXG4gICAgICAgIGFzaWRlIHtcbiAgICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgICAgICBtYXJnaW4tdG9wOiAyNHB4O1xuICAgICAgICAgIG1hcmdpbi1sZWZ0OiAwO1xuICAgICAgICB9XG5cblxuICAgICAgfVxuICAgIH1cblxuICAgIGhncm91cCB7XG4gICAgICBmbGV4OiAwIDUwOHB4O1xuXG4gICAgICBoMiB7XG4gICAgICAgIGZvbnQtc2l6ZTogMjRweDtcbiAgICAgICAgZm9udC13ZWlnaHQ6IDcwMDtcbiAgICAgICAgbGV0dGVyLXNwYWNpbmc6IC0uMDFlbTtcbiAgICAgIH1cblxuICAgICAgcCB7XG4gICAgICAgIGZvbnQtc2l6ZTogMTZweDtcbiAgICAgICAgbWFyZ2luLXRvcDogMTdweDtcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuNWVtO1xuICAgICAgICBsZXR0ZXItc3BhY2luZzogLS4wMmVtO1xuICAgICAgICBtYXJnaW4tYm90dG9tOiAwO1xuICAgICAgfVxuICAgIH1cblxuICAgIGFzaWRlIHtcbiAgICAgIG1hcmdpbi1sZWZ0OiBhdXRvO1xuICAgICAgd2lkdGg6IDQ2MHB4O1xuICAgICAgcGFkZGluZy1ib3R0b206IDJweDtcblxuICAgICAgQG1lZGlhIChtYXgtd2lkdGg6ICRzY3JlZW4tc20tbWF4KSB7XG4gICAgICAgIG1hcmdpbi1sZWZ0OiAyMHB4O1xuICAgICAgfVxuXG4gICAgICBoMyB7XG4gICAgICAgIGZvbnQtc2l6ZTogMTZweDtcbiAgICAgICAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgICAgICAgbGV0dGVyLXNwYWNpbmc6IC0uMDFlbTtcbiAgICAgIH1cblxuICAgICAgaW9uaWMtbmV3c2xldHRlci1zaWdudXAge1xuICAgICAgICBtYXJnaW4tdG9wOiAxMXB4O1xuICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgIH1cbiAgICB9XG5cbiAgICB1bCB7XG4gICAgICBwYWRkaW5nOiAwO1xuICAgICAgbGlzdC1zdHlsZTogbm9uZTtcbiAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICBmbGV4LXdyYXA6IHdyYXA7XG4gICAgICBtYXJnaW4tdG9wOiAyN3B4O1xuICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xuXG4gICAgICBAbWVkaWEgKG1heC13aWR0aDogJHNjcmVlbi1tZC1tYXgpIHtcbiAgICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1hcm91bmQ7XG4gICAgICB9XG4gICAgfVxuXG4gICAgbGkge1xuICAgICAgbWFyZ2luLWJvdHRvbTogNThweDtcbiAgICAgIHdpZHRoOiAzMzdweDtcblxuICAgICAgYSB7XG4gICAgICAgIHBhZGRpbmctbGVmdDogODJweDtcbiAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcblxuICAgICAgICAmOjpiZWZvcmUge1xuICAgICAgICAgIGJhY2tncm91bmQ6IHVybCgnL2ltZy9jb21tdW5pdHkvc29jaWFsLWljb25zLnBuZycpIDAgMCBuby1yZXBlYXQ7XG4gICAgICAgICAgYmFja2dyb3VuZC1zaXplOiA3MHB4O1xuICAgICAgICAgIGhlaWdodDogNzBweDtcbiAgICAgICAgICB3aWR0aDogNzBweDtcbiAgICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgICAgY29udGVudDogJyc7XG4gICAgICAgICAgdG9wOiBjYWxjKDUwJSAtIDMzcHgpO1xuICAgICAgICAgIGxlZnQ6IC0ycHg7XG4gICAgICAgICAgdHJhbnNpdGlvbjogLjJzIHRyYW5zZm9ybSBlYXNlLW91dDtcbiAgICAgICAgICBiYWNrZmFjZS12aXNpYmlsaXR5OiBoaWRkZW47XG4gICAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKDApO1xuICAgICAgICAgIG91dGxpbmU6IDFweCBzb2xpZCB0cmFuc3BhcmVudDtcbiAgICAgICAgfVxuXG4gICAgICAgICY6aG92ZXIge1xuICAgICAgICAgIHN0cm9uZyB7XG4gICAgICAgICAgICBjb2xvcjogYmxhY2s7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgc3BhbiB7XG4gICAgICAgICAgICBjb2xvcjogZGFya2VuKCM2YzdlOTUsIDE1KTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAmOjpiZWZvcmUge1xuICAgICAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKDJweCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIEBpbmNsdWRlIHNwcml0ZShcbiAgICAgICAgJ3NsYWNrJ1xuICAgICAgICAnZm9ydW0nXG4gICAgICAgICd0d2l0dGVyJ1xuICAgICAgICAnZ2l0aHViJ1xuICAgICAgICAnc28nXG4gICAgICAgICdmYWNlYm9vaydcbiAgICAgICAgJ3lvdXR1YmUnXG4gICAgICAgICdibG9nJ1xuICAgICAgICAnbWVkaXVtJ1xuICAgICAgLCA3MCwgJyBhOjpiZWZvcmUnKTtcblxuICAgICAgc3Ryb25nIHtcbiAgICAgICAgdHJhbnNpdGlvbjogLjJzIGNvbG9yIGVhc2U7XG4gICAgICB9XG5cbiAgICAgIHN0cm9uZyB7XG4gICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICBmb250LXdlaWdodDogNjAwO1xuICAgICAgICBmb250LXNpemU6IDE3cHg7XG4gICAgICAgIGNvbG9yOiAjMGYxNjIyO1xuICAgICAgICBtYXJnaW4tYm90dG9tOiAycHg7XG4gICAgICB9XG5cbiAgICAgIHNwYW4ge1xuICAgICAgICBmb250LXNpemU6IDEzcHg7XG4gICAgICAgIGxldHRlci1zcGFjaW5nOiAuMDE0ZW07XG4gICAgICAgIGNvbG9yOiAjNmM3ZTk1O1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC5sYXRlc3Qge1xuICAgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCh0byBib3R0b20sICNmN2Y5ZmMsICNmZWZlZmYpO1xuICAgIG1hcmdpbi10b3A6IDEwMXB4O1xuICAgIHBhZGRpbmctdG9wOiAxMzhweDtcblxuICAgIGhncm91cCB7XG4gICAgICBtYXJnaW46IDAgYXV0byA3MnB4O1xuICAgICAgbWF4LXdpZHRoOiA1NjBweDtcbiAgICAgIHRleHQtYWxpZ246IGNlbnRlcjtcblxuICAgICAgaDIge1xuICAgICAgICBmb250LXdlaWdodDogNzAwO1xuICAgICAgICBmb250LXNpemU6IDMycHg7XG4gICAgICAgIGxldHRlci1zcGFjaW5nOiAtLjAyZW07XG4gICAgICB9XG5cbiAgICAgIHAge1xuICAgICAgICBtYXJnaW4tdG9wOiAxMnB4O1xuICAgICAgICBmb250LXNpemU6IDE4cHg7XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAyOHB4O1xuICAgICAgICBsZXR0ZXItc3BhY2luZzogLjAwNmVtO1xuICAgICAgfVxuICAgIH1cblxuICAgIC50dXRvcmlhbHMsXG4gICAgLnZpZGVvcyB7XG4gICAgICBtYXJnaW4tdG9wOiAyNnB4O1xuICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuXG4gICAgICBoMyB7XG4gICAgICAgIGZvbnQtc2l6ZTogMjBweDtcbiAgICAgICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcbiAgICAgICAgbGV0dGVyLXNwYWNpbmc6IC4wOGVtO1xuICAgICAgICBmb250LXdlaWdodDogNzAwO1xuICAgICAgfVxuXG4gICAgICAuc3Vic2NyaWJlIHtcbiAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICBjb2xvcjogIzM4ODBmZjtcbiAgICAgICAgYmFja2dyb3VuZDogI2RmZWRmZjtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogMTZweDtcbiAgICAgICAgcGFkZGluZzogNHB4IDExcHggNXB4O1xuICAgICAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xuICAgICAgICBmb250LXdlaWdodDogNTAwO1xuICAgICAgICBmb250LXNpemU6IDExcHg7XG4gICAgICAgIGxldHRlci1zcGFjaW5nOiAwLjA0ZW07XG4gICAgICAgIHJpZ2h0OiAwO1xuICAgICAgICB0b3A6IC0ycHg7XG5cbiAgICAgICAgaW9uLWljb24ge1xuICAgICAgICAgIG1hcmdpbi1yaWdodDogMXB4O1xuICAgICAgICAgIGZvbnQtc2l6ZTogMTBweDtcbiAgICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogLTUlO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHVsIHtcbiAgICAgICAgcGFkZGluZzogMjRweCAwcHg7XG4gICAgICAgIGxpc3Qtc3R5bGU6IG5vbmU7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIGZsZXgtd3JhcDogd3JhcDtcbiAgICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xuICAgICAgfVxuXG4gICAgICBsaSB7XG4gICAgICAgIGZsZXg6IDAgMzMzcHg7XG4gICAgICAgIG1hcmdpbi1ib3R0b206IDI4cHg7XG5cbiAgICAgICAgQG1lZGlhIChtYXgtd2lkdGg6ICRzY3JlZW4tbWQtbWF4KSB7XG4gICAgICAgICAgZmxleDogMCAzMDBweDtcbiAgICAgICAgfVxuXG4gICAgICAgIGEge1xuICAgICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICAgIHBhZGRpbmc6IDFweCAwIDFweCAzOXB4O1xuICAgICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcblxuICAgICAgICAgICY6OmJlZm9yZSB7XG4gICAgICAgICAgICBiYWNrZ3JvdW5kOiB1cmwoJy9pbWcvY29tbXVuaXR5L2xhdGVzdC1yc3MtaWNvbnMucG5nJykgMCAwIG5vLXJlcGVhdDtcbiAgICAgICAgICAgIGJhY2tncm91bmQtc2l6ZTogMjhweDtcbiAgICAgICAgICAgIGhlaWdodDogMjhweDtcbiAgICAgICAgICAgIHdpZHRoOiAyOHB4O1xuICAgICAgICAgICAgY29udGVudDogJyc7XG4gICAgICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgICAgICB0b3A6IDA7XG4gICAgICAgICAgICBsZWZ0OiAwO1xuICAgICAgICAgICAgdHJhbnNpdGlvbjogLjJzIHRyYW5zZm9ybSBlYXNlLW91dDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAmOmhvdmVyIHtcbiAgICAgICAgICAgIHN0cm9uZyB7XG4gICAgICAgICAgICAgIGNvbG9yOiBibGFjaztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcCB7XG4gICAgICAgICAgICAgIGNvbG9yOiBkYXJrZW4oIzUxNjA3YSwgMTUpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBzcGFuIHtcbiAgICAgICAgICAgICAgY29sb3I6IGRhcmtlbigjODc5NmE5LCAxNSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICY6OmJlZm9yZSB7XG4gICAgICAgICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgycHgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHN0cm9uZyxcbiAgICAgICAgcCxcbiAgICAgICAgc3BhbiB7XG4gICAgICAgICAgdHJhbnNpdGlvbjogLjJzIGNvbG9yIGVhc2U7XG4gICAgICAgIH1cblxuICAgICAgICBzdHJvbmcge1xuICAgICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICAgIGxldHRlci1zcGFjaW5nOiAtLjAxOGVtO1xuICAgICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7XG4gICAgICAgICAgbGluZS1oZWlnaHQ6IDEuNzVlbTtcbiAgICAgICAgfVxuXG4gICAgICAgIHAge1xuICAgICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICAgIGNvbG9yOiAjNTE2MDdhO1xuICAgICAgICAgIG1hcmdpbi10b3A6IDNweDtcbiAgICAgICAgICBmb250LXNpemU6IDEzcHg7XG4gICAgICAgICAgbGluZS1oZWlnaHQ6IDEuOWVtO1xuICAgICAgICAgIGxldHRlci1zcGFjaW5nOiAtLjAyZW07XG4gICAgICAgIH1cblxuICAgICAgICBzcGFuIHtcbiAgICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgICAgICBjb2xvcjogIzg3OTZhOTtcbiAgICAgICAgICBmb250LXNpemU6IDEycHg7XG4gICAgICAgICAgbWFyZ2luLXRvcDogMTJweDtcbiAgICAgICAgICBsZXR0ZXItc3BhY2luZzogLjAzZW07XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgQG1lZGlhIChtYXgtd2lkdGg6ICRzY3JlZW4tbWQtbWF4KSB7XG4gICAgICAgIHVsIHtcbiAgICAgICAgICBtYXJnaW4tbGVmdDogLTE1cHg7XG4gICAgICAgICAgbWFyZ2luLXJpZ2h0OiAtMTVweDtcbiAgICAgICAgfVxuXG4gICAgICAgIGxpIHtcbiAgICAgICAgICBmbGV4LWdyb3c6IDE7XG4gICAgICAgICAgbWFyZ2luLWxlZnQ6IDE1cHg7XG4gICAgICAgICAgbWFyZ2luLXJpZ2h0OiAxNXB4O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLnZpZGVvcyB7XG4gICAgICBsaSBhOjpiZWZvcmUgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwIC0yOHB4OyB9XG4gICAgfVxuICB9XG5cbiAgLmVkdWNhdGlvbiB7XG4gICAgYmFja2dyb3VuZDogIzEyMWIyYyB1cmwoJy9pbWcvY29tbXVuaXR5L2NvbW11bml0eS1lZHUtYmcuanBnJykgbm8tcmVwZWF0O1xuICAgIGJhY2tncm91bmQtcG9zaXRpb246IDUwJSAwO1xuICAgIGJhY2tncm91bmQtc2l6ZTogMTY4MHB4O1xuICAgIG1hcmdpbi10b3A6IDkzcHg7XG4gICAgcGFkZGluZy10b3A6IDEzOHB4O1xuICAgIHBhZGRpbmctYm90dG9tOiA3NXB4O1xuXG4gICAgaDIsXG4gICAgaDMsXG4gICAgaDQsXG4gICAgcCB7XG4gICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICBjb2xvcjogd2hpdGU7XG4gICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICB6LWluZGV4OiAxO1xuICAgIH1cblxuICAgIHAsXG4gICAgaDQge1xuICAgICAgb3BhY2l0eTogLjg7XG4gICAgfVxuXG4gICAgaGdyb3VwIHtcbiAgICAgIG1heC13aWR0aDogNTgwcHg7XG5cbiAgICAgIGgyIHtcbiAgICAgICAgZm9udC1zaXplOiAzMXB4O1xuICAgICAgICBmb250LXdlaWdodDogNzAwO1xuICAgICAgfVxuXG4gICAgICBwIHtcbiAgICAgICAgZm9udC1zaXplOiAxOHB4O1xuICAgICAgICBtYXJnaW4tdG9wOiAxM3B4O1xuICAgICAgICBsaW5lLWhlaWdodDogMS42ZW07XG4gICAgICAgIGxldHRlci1zcGFjaW5nOiAtLjAyNmVtO1xuICAgICAgfVxuXG4gICAgICBAbWVkaWEgKG1heC13aWR0aDogJHNjcmVlbi1zbS1tYXgpIHtcbiAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgICAgICBtYXJnaW46IDAgYXV0bztcbiAgICAgIH1cbiAgICB9XG5cbiAgICB1bCB7XG4gICAgICBwYWRkaW5nOiA0N3B4IDFweDtcbiAgICAgIG1hcmdpbi1yaWdodDogLTE1cHg7XG4gICAgICBtYXJnaW4tbGVmdDogLTE1cHg7XG4gICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgZmxleC13cmFwOiB3cmFwO1xuICAgICAgbGlzdC1zdHlsZTogbm9uZTtcbiAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcblxuICAgICAgQG1lZGlhIChtYXgtd2lkdGg6ICRzY3JlZW4tbWQtbWF4KSB7XG4gICAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYXJvdW5kO1xuICAgICAgfVxuXG4gICAgfVxuXG4gICAgbGkge1xuICAgICAgZmxleDogMCAyNzBweDtcbiAgICAgIGhlaWdodDogMjMwcHg7XG4gICAgICBtYXJnaW4tYm90dG9tOiAyOHB4O1xuICAgICAgbWFyZ2luLXJpZ2h0OiAxMXB4O1xuICAgICAgbWFyZ2luLWxlZnQ6IDExcHg7XG5cbiAgICAgIGEge1xuICAgICAgICBwYWRkaW5nOiAxMnB4IDI5cHg7XG4gICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICBoZWlnaHQ6IDEwMCU7XG4gICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcblxuICAgICAgICAmOjpiZWZvcmUge1xuICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgICB0b3A6IDA7XG4gICAgICAgICAgcmlnaHQ6IDA7XG4gICAgICAgICAgYm90dG9tOiAwO1xuICAgICAgICAgIGxlZnQ6IDA7XG4gICAgICAgICAgY29udGVudDogJyc7XG4gICAgICAgICAgYmFja2dyb3VuZDogIzM4ODBmZjtcbiAgICAgICAgICBib3JkZXItcmFkaXVzOiA4cHg7XG4gICAgICAgICAgdHJhbnNpdGlvbjogLjJzIHRyYW5zZm9ybSBlYXNlO1xuICAgICAgICB9XG5cbiAgICAgICAgJjpob3Zlcjo6YmVmb3JlIHtcbiAgICAgICAgICB0cmFuc2Zvcm06IHNjYWxlM2QoMS4wMSwgMS4wMSwgMSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaDQge1xuICAgICAgICBmb250LXNpemU6IDExcHg7XG4gICAgICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XG4gICAgICAgIGxldHRlci1zcGFjaW5nOiAuMTVlbTtcbiAgICAgICAgbWFyZ2luLWJvdHRvbTogOHB4O1xuICAgICAgICBmb250LXdlaWdodDogNzAwO1xuICAgICAgfVxuXG4gICAgICBoMyB7XG4gICAgICAgIGZvbnQtc2l6ZTogMjFweDtcbiAgICAgICAgbWFyZ2luLXRvcDogMDtcbiAgICAgICAgZm9udC13ZWlnaHQ6IDcwMDtcbiAgICAgICAgbGV0dGVyLXNwYWNpbmc6IC0uMDFlbTtcbiAgICAgIH1cblxuICAgICAgcCB7XG4gICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgYm90dG9tOiAxNXB4O1xuICAgICAgICBmb250LXNpemU6IDEycHg7XG4gICAgICAgIGxlZnQ6IDI4cHg7XG4gICAgICAgIHJpZ2h0OiAyOHB4O1xuICAgICAgICBsZXR0ZXItc3BhY2luZzogLS4wMWVtO1xuICAgICAgICBsaW5lLWhlaWdodDogMS40ZW07XG4gICAgICB9XG5cbiAgICAgICY6bnRoLWNoaWxkKDIpIGE6OmJlZm9yZSB7IGJhY2tncm91bmQ6ICMyODdlYTE7IH1cbiAgICAgICY6bnRoLWNoaWxkKDMpIGE6OmJlZm9yZSB7IGJhY2tncm91bmQ6ICNkYTViNzA7IH1cbiAgICAgICY6bnRoLWNoaWxkKDQpIGE6OmJlZm9yZSB7IGJhY2tncm91bmQ6ICM5NWIyNTE7IH1cbiAgICAgICY6bnRoLWNoaWxkKDUpIGE6OmJlZm9yZSB7IGJhY2tncm91bmQ6ICMzMGFlZWI7IH1cbiAgICAgICY6bnRoLWNoaWxkKDYpIGE6OmJlZm9yZSB7IGJhY2tncm91bmQ6ICM0YTYyOGE7IH1cbiAgICAgICY6bnRoLWNoaWxkKDcpIGE6OmJlZm9yZSB7IGJhY2tncm91bmQ6ICM4ZDVjZTM7IH1cbiAgICAgICY6bnRoLWNoaWxkKDgpIGE6OmJlZm9yZSB7IGJhY2tncm91bmQ6ICNmNDhmNjM7IH1cbiAgICB9XG4gIH1cbn1cbiIsIi8vIG1peGluc1xuQG1peGluIGJveCB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmY7XG4gIGJvcmRlci1yYWRpdXM6IDZweDtcbiAgYm94LXNoYWRvdzogMCA4cHggMzJweCByZ2JhKDAsMCwwLDAuMSksXG4gICAgICAgICAgICAgIDAgMnB4IDhweCAgcmdiYSgwLDAsMCwwLjEpO1xufVxuXG5AbWl4aW4gZmxleC1saXN0IHtcbiAgZGlzcGxheTogZmxleDtcbiAganVzdGlmeS1jb250ZW50OiBzdGFydDtcbiAgZmxleC13cmFwOiB3cmFwO1xuICBwYWRkaW5nLWxlZnQ6IDA7XG5cbiAgbGkge1xuICAgIG1hcmdpbi1yaWdodDogMWVtO1xuICAgIGxpc3Qtc3R5bGU6IG5vbmU7XG4gIH1cbn1cblxuQG1peGluIHNwcml0ZSgkaXRlbXMsICRoZWlnaHQ6IDY0LCAkc2VsZWN0b3I6ICc6OmJlZm9yZScpIHtcbiAgQGVhY2ggJGljb24gaW4gJGl0ZW1zIHtcbiAgICAkaTogaW5kZXgoJGl0ZW1zLCAkaWNvbik7XG5cbiAgICAmLiN7JGljb259I3skc2VsZWN0b3J9IHtcbiAgICAgIGJhY2tncm91bmQtcG9zaXRpb246IDAgI3soJGhlaWdodCAqICgkaSAtIDEpICogLTEpfXB4O1xuICAgIH1cbiAgfVxufVxuXG5AbWl4aW4gaG92ZXJTcHJpdGUoXG4gICRpdGVtcywgJGhlaWdodDogNjQsICRzZWxlY3RvcjE6ICc6OmJlZm9yZScsICRzZWxlY3RvcjI6ICc6OmFmdGVyJ1xuKSB7XG4gICYjeyRzZWxlY3RvcjF9LCBcbiAgJiN7JHNlbGVjdG9yMn0ge1xuICAgIHRyYW5zaXRpb246IC4ycyBvcGFjaXR5O1xuICB9XG5cbiAgJiN7JHNlbGVjdG9yMn0ge1xuICAgIG9wYWNpdHk6IDA7XG4gIH1cblxuICAmOmhvdmVyIHtcbiAgICAmI3skc2VsZWN0b3IxfSB7XG4gICAgICAvLyBvcGFjaXR5OiAwO1xuICAgIH1cblxuICAgICYjeyRzZWxlY3RvcjJ9IHtcbiAgICAgIG9wYWNpdHk6IDE7XG4gICAgfVxuICB9XG5cbiAgQGVhY2ggJGljb24gaW4gJGl0ZW1zIHtcbiAgICAkaTogaW5kZXgoJGl0ZW1zLCAkaWNvbik7XG5cbiAgICAmLiN7JGljb259I3skc2VsZWN0b3IxfSB7XG4gICAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwICN7KCRoZWlnaHQgKiAoJGkgLSAxKSAqIC0yKX1weDtcbiAgICB9XG5cbiAgICAmLiN7JGljb259I3skc2VsZWN0b3IyfSB7XG4gICAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwICN7KCRoZWlnaHQgKiAoJGkgLSAxKSAqIC0yKSAtICRoZWlnaHR9cHg7XG4gICAgfVxuICB9XG59IiwiI3BhZ2UtY29udHJpYnV0b3JzIHtcblxuICBtYWluIHtcbiAgICBjb2xvcjogIzE2MWExZjtcbiAgICBmb250LWZhbWlseTogJGZvbnQtZmFtaWx5LWVpbmE7XG4gICAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgfVxuXG4gIC5idG4ge1xuICAgIGZvbnQtc2l6ZTogMTZweDtcbiAgICBmb250LXdlaWdodDogNzAwO1xuICAgIHBhZGRpbmc6IDEycHggMjBweDtcblxuICAgICYtLXNlY29uZGFyeSB7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjMTAyMjQyO1xuICAgIH1cbiAgfVxuXG4gIC5jdGEge1xuICAgIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xuICAgIGNvbG9yOiBpbmhlcml0O1xuICAgIHBhZGRpbmctYm90dG9tOiA2MHB4O1xuICAgIHBhZGRpbmctdG9wOiAxMjBweDtcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG5cbiAgICBAbWVkaWEgKG1heC13aWR0aDogJHNjcmVlbi1zbSkge1xuICAgICAgcGFkZGluZy10b3A6IDE4MHB4O1xuICAgIH1cbiAgfVxuXG4gIC5jdGEgaDEge1xuICAgIGNvbG9yOiAjNzNBQkZGO1xuICAgIGZvbnQtc2l6ZTogNDhweDtcbiAgICBmb250LXdlaWdodDogNzAwO1xuICAgIGxldHRlci1zcGFjaW5nOiAtMC4wMmVtO1xuICB9XG5cbiAgLmN0YSBoMSBzcGFuIHtcbiAgICBjb2xvcjogIzM4ODBGRjtcbiAgfVxuXG4gIC5jdGEgLnR5cGVkLWN1cnNvciB7XG4gICAgY29sb3I6IHJnYmEoMCwwLDAsMCk7XG4gICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgIHdpZHRoOiA0cHg7XG4gICAgaGVpZ2h0OiA1NnB4O1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICB0b3A6IC00cHg7XG4gICAgYmFja2dyb3VuZDogI0JGRDZGRjtcbiAgICBvcGFjaXR5OiAxO1xuICAgIGFuaW1hdGlvbjogdHlwZWRqc0JsaW5rIDFzIGluZmluaXRlO1xuICB9XG5cbiAgQGtleWZyYW1lcyB0eXBlZGpzQmxpbmt7XG4gICAgMCUgeyBvcGFjaXR5OiAxOyB9XG4gICAgNTAlIHsgb3BhY2l0eTogMC4wOyB9XG4gICAgMTAwJSB7IG9wYWNpdHk6IDE7IH1cbiAgfVxuXG4gIC5jdGEgcCB7XG4gICAgY29sb3I6ICM1MDU4NjM7XG4gICAgZm9udC1zaXplOiAxOHB4O1xuICAgIGxpbmUtaGVpZ2h0OiAzMHB4O1xuICAgIGxldHRlci1zcGFjaW5nOiAtMC4wM2VtO1xuICAgIG1hcmdpbjogMC43NWVtIGF1dG8gMS4yNWVtO1xuICAgIG1heC13aWR0aDogNTcwcHg7XG4gIH1cblxuICAuY3RhIC5jb250YWluZXIge1xuICAgIHBhZGRpbmctdG9wOiA1MHB4O1xuICAgIHBhZGRpbmctYm90dG9tOiA1MHB4O1xuXG4gICAgQG1lZGlhIChtaW4td2lkdGg6ICRzY3JlZW4tc20pIHtcbiAgICAgIHBhZGRpbmctdG9wOiAxMDBweDtcbiAgICAgIHBhZGRpbmctYm90dG9tOiAxMDBweDtcbiAgICB9XG4gIH1cblxuICAuc2VjdGlvbi1oZWFkZXIge1xuICAgIGNvbG9yOiAjMmYzNzQ0O1xuICAgIGZvbnQtc2l6ZTogMjBweDtcbiAgICBsZXR0ZXItc3BhY2luZzogLTAuMDJlbTtcbiAgICBtYXJnaW4tYm90dG9tOiA0ZW07XG4gICAgbWFyZ2luLXRvcDogNGVtO1xuICAgIG1heC13aWR0aDogMzJlbTtcbiAgfVxuXG4gIC5zZWN0aW9uLWhlYWRlciBoMiB7XG4gICAgY29sb3I6ICMyNDI4MmU7XG4gICAgZm9udC1zaXplOiAxLjhlbTtcbiAgICBmb250LXdlaWdodDogNzAwO1xuICAgIG1hcmdpbi1ib3R0b206IDAuNjVlbTtcbiAgfVxuXG4gIC5vc3MsXG4gIC5wcm8ge1xuICAgIC5zZWN0aW9uLWhlYWRlciBoMiBzcGFuIHtcbiAgICAgIGJvcmRlci1ib3R0b206IHNvbGlkIDRweCAjMjQyODJlO1xuICAgIH1cbiAgfVxuXG4gIC5mZWF0dXJlIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGZvbnQtc2l6ZTogMTZweDtcbiAgICBmb250LXdlaWdodDogNjAwO1xuICAgIGxldHRlci1zcGFjaW5nOiAtMC4wMWVtO1xuICB9XG5cbiAgLmZlYXR1cmVfX2ljb24ge1xuICAgIGJhY2tncm91bmQtaW1hZ2U6IHVybChcIi9pbWcvY29udHJpYnV0b3JzL2NvbnRyaWJ1dG9ycy1mZWF0dXJlLWljb25zLnBuZ1wiKTtcbiAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiB0b3A7XG4gICAgYmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdDtcbiAgICBiYWNrZ3JvdW5kLXNpemU6IDEwMCU7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgZmxleDogMCAwIDQ4cHg7XG4gICAgaGVpZ2h0OiA0OHB4O1xuICAgIG1hcmdpbi1yaWdodDogMmVtO1xuICAgIHdpZHRoOiA0OHB4O1xuXG4gICAgJi50YWxrICAgIHsgYmFja2dyb3VuZC1wb3NpdGlvbi15OiAwOyB9XG4gICAgJi5zdG9yeSAgICAgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uLXk6IC00OHB4ICogMTsgfVxuICAgICYuYmxvZyAgIHsgYmFja2dyb3VuZC1wb3NpdGlvbi15OiAtNDhweCAqIDI7IH1cbiAgfVxuXG4gIC5mZWF0dXJlX190ZXh0IHN0cm9uZyB7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgZm9udC1zaXplOiAxLjI1ZW07XG4gICAgbWFyZ2luLWJvdHRvbTogMC43NWVtO1xuICB9XG5cbiAgLmZlYXR1cmVfX3RleHQgcCB7XG4gICAgY29sb3I6ICM3ODg0OTc7XG4gICAgbGluZS1oZWlnaHQ6IDEuNjU7XG4gIH1cblxuICAuZmVhdHVyZS1saXN0IHtcbiAgICBsaXN0LXN0eWxlOiBub25lO1xuICAgIG1hcmdpbjogMCAwIDRlbTtcbiAgICBwYWRkaW5nOiAwO1xuICB9XG5cbiAgLmZlYXR1cmUtbGlzdCA+IGxpIHtcbiAgICBtYXJnaW4tYm90dG9tOiAyZW07XG4gIH1cblxuXG4gIEBtZWRpYSAobWluLXdpZHRoOiAkc2NyZWVuLXNtKSB7XG4gICAgLmZlYXR1cmUtbGlzdCB7XG4gICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgbWFyZ2luOiAwO1xuICAgIH1cblxuICAgIC5mZWF0dXJlLWxpc3QgPiBsaSB7XG4gICAgICBmbGV4OiAxO1xuICAgICAgcGFkZGluZy1yaWdodDogM2VtO1xuICAgICAgbWFyZ2luLWJvdHRvbTogNGVtO1xuICAgIH1cblxuICAgIC5mZWF0dXJlIHtcbiAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgfVxuXG4gICAgLmZlYXR1cmVfX2ljb24ge1xuICAgICAgbWFyZ2luLWJvdHRvbTogMS4yNWVtO1xuICAgIH1cbiAgfVxuXG4gIC50b3BpY3Mge1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICBtaW4taGVpZ2h0OiA2NjBweDtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjMjQyMzU1O1xuICAgIGNvbG9yOiAjZmZmO1xuICAgIG92ZXJmbG93OiBoaWRkZW47XG5cbiAgICAmOmJlZm9yZSxcbiAgICAmOmFmdGVyIHtcbiAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgY29udGVudDogJyc7XG4gICAgICB3aWR0aDogMTAwJTtcbiAgICAgIGhlaWdodDogMTAwcHg7XG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICBsZWZ0OiAwO1xuICAgICAgei1pbmRleDogMjtcbiAgICAgIG9wYWNpdHk6IDAuNDtcbiAgICB9XG5cbiAgICAmOmJlZm9yZSB7XG4gICAgICB0b3A6IDA7XG4gICAgICBiYWNrZ3JvdW5kLWltYWdlOiBsaW5lYXItZ3JhZGllbnQoLTE4MGRlZywgcmdiYSgjMjQyMzU1LCAxKSAwJSwgcmdiYSgjMjQyMzU1LCAwKSAxMDAlKTtcbiAgICB9XG4gICAgJjphZnRlciB7XG4gICAgICBib3R0b206IDA7XG4gICAgICBiYWNrZ3JvdW5kLWltYWdlOiBsaW5lYXItZ3JhZGllbnQoLTE4MGRlZywgcmdiYSgjMjQyMzU1LCAwKSAwJSwgcmdiYSgjMjQyMzU1LCAxKSAxMDAlKTtcbiAgICB9XG5cbiAgICBoZ3JvdXAge1xuICAgICAgbWF4LXdpZHRoOiA0NDBweDtcbiAgICAgIG1hcmdpbi10b3A6IDcycHg7XG4gICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICB6LWluZGV4OiAzO1xuICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgICAgbWFyZ2luLWxlZnQ6IGF1dG87XG4gICAgICBtYXJnaW4tcmlnaHQ6IGF1dG87XG4gICAgfVxuXG4gICAgaDEge1xuICAgICAgZm9udC1zaXplOiAzNnB4O1xuICAgICAgY29sb3I6ICNGRkZGRkY7XG4gICAgICBsZXR0ZXItc3BhY2luZzogLTEuMnB4O1xuICAgICAgbGluZS1oZWlnaHQ6IDQ4cHg7XG4gICAgICBmb250LXdlaWdodDogNzAwO1xuICAgIH1cblxuICAgIHAge1xuICAgICAgZm9udC1zaXplOiAxOHB4O1xuICAgICAgY29sb3I6ICNCRkM1RTU7XG4gICAgICBsZXR0ZXItc3BhY2luZzogLTAuNjJweDtcbiAgICAgIGxpbmUtaGVpZ2h0OiAzMHB4O1xuICAgIH1cblxuICAgICYuaW1hZ2UtZmFsbGJhY2s6YWZ0ZXIge1xuICAgICAgY29udGVudDogJyc7XG4gICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgIHdpZHRoOiAzODhweDtcbiAgICAgIGhlaWdodDogNjU4cHg7XG4gICAgICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoJy4uL2ltZy9jb250cmlidXRvcnMvY29udHJpYnV0b3JzLXRvcGljcy5wbmcnKTtcbiAgICAgIGJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7XG4gICAgICBiYWNrZ3JvdW5kLXNpemU6IDM4OHB4IDY1OHB4O1xuICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgdG9wOiAwO1xuICAgICAgbGVmdDogNTAlO1xuICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC01MCUpO1xuICAgICAgb3BhY2l0eTogMC41O1xuICAgICAgei1pbmRleDogMTtcbiAgICB9XG5cbiAgICBAbWVkaWEgKG1heC13aWR0aDogJHNjcmVlbi1zbSkge1xuICAgICAgJjpiZWZvcmUge1xuICAgICAgICBoZWlnaHQ6IDQwMHB4O1xuICAgICAgICBvcGFjaXR5OiAxXG4gICAgICB9XG4gICAgICAmOmFmdGVyIHtcbiAgICAgICAgb3BhY2l0eTogMC4zO1xuICAgICAgfVxuICAgIH1cbiAgICBAbWVkaWEgKG1pbi13aWR0aDogJHNjcmVlbi1zbSkge1xuICAgICAgJi5pbWFnZS1mYWxsYmFjazphZnRlciB7XG4gICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgxMCUpO1xuICAgICAgICBvcGFjaXR5OiAxO1xuICAgICAgfVxuICAgICAgaGdyb3VwIHtcbiAgICAgICAgdGV4dC1hbGlnbjogbGVmdDtcbiAgICAgICAgbWFyZ2luLWxlZnQ6IDA7XG4gICAgICAgIG1hcmdpbi1yaWdodDogMDtcbiAgICAgICAgbWFyZ2luLXRvcDogMTM2cHg7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLnRvcGljc19fYW5pbWF0aW9uIHtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgdG9wOiAwO1xuICAgIHJpZ2h0OiA1MCU7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKDkwJSk7XG4gICAgei1pbmRleDogMTtcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgIC50ZXh0IHtcbiAgICAgIGZvbnQtc2l6ZTogMThweDtcbiAgICAgIGxldHRlci1zcGFjaW5nOiAtMC4wM2VtO1xuICAgICAgZmlsbDogI2ZmZjtcbiAgICB9XG5cbiAgICBAbWVkaWEgKG1heC13aWR0aDogJHNjcmVlbi1zbSkge1xuICAgICAgb3BhY2l0eTogMC44O1xuICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKDUwJSk7XG4gICAgfVxuICB9XG5cbiAgLnF1b3RlcyB7XG4gICAgY29sb3I6ICNmZmZmZmY7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBmb250LXNpemU6IDIwcHg7XG4gICAgZm9udC13ZWlnaHQ6IDcwMDtcbiAgICBsZXR0ZXItc3BhY2luZzogLTAuMDFlbTtcblxuICAgIEBtZWRpYSAobWF4LXdpZHRoOiAkc2NyZWVuLXNtKSB7XG4gICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgIH1cbiAgfVxuXG4gIC5xdW90ZXNfX2NvbnRlbnQge1xuICAgIG1heC13aWR0aDogNDkwcHg7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICB9XG5cbiAgLnF1b3Rlc19fcXVvdGUge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgZmxleDogMTtcbiAgICBwYWRkaW5nOiA4MHB4O1xuICAgICAgY29sb3I6ICMyNDI4MmU7XG5cbiAgICBAbWVkaWEgKG1heC13aWR0aDogJHNjcmVlbi14cykge1xuICAgICAgcGFkZGluZzogNDBweDtcbiAgICB9XG5cbiAgICAmOmZpcnN0LWNoaWxkIHtcbiAgICAgIEBtZWRpYSAobWluLXdpZHRoOiAkc2NyZWVuLXNtKSB7XG4gICAgICAgIGp1c3RpZnktY29udGVudDogZmxleC1lbmQ7XG4gICAgICB9XG4gICAgfVxuXG4gICAgJi5tb3Jvbnkge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogI0U5RjJGRjtcbiAgICB9XG5cbiAgICAmLnZlcmdhbmFyYSB7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjRDBFMkZEO1xuXG4gICAgfVxuICB9XG5cbiAgLnF1b3Rlc19fYXZhdGFyIHtcbiAgICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXCIvaW1nL2NvbnRyaWJ1dG9ycy9jb250cmlidXRvcnMtdGVzdGltb25pYWwtYXZhdGFycy5wbmdcIik7XG4gICAgYmFja2dyb3VuZC1wb3NpdGlvbjogY2VudGVyO1xuICAgIGJhY2tncm91bmQtc2l6ZTogMTAwJTtcbiAgICBiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0O1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIHdpZHRoOiA2MnB4O1xuICAgIGhlaWdodDogNjJweDtcbiAgICBtYXJnaW4tYm90dG9tOiAxZW07XG4gICAgYm9yZGVyLXJhZGl1czogNjJweDtcbiAgICBib3JkZXI6IDNweCBzb2xpZCAjZmZmO1xuICAgIGJveC1zaGFkb3c6IDAgMnB4IDRweCAwIHJnYmEoMCwwLDAsMC4xMCk7XG5cbiAgICAmLm1vcm9ueSB7XG4gICAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uLXk6IDA7XG4gICAgfVxuXG4gICAgJi52ZXJnYW5hcmEge1xuICAgICAgYmFja2dyb3VuZC1wb3NpdGlvbi15OiAtNTZweDtcbiAgICB9XG4gIH1cblxuICAucXVvdGVzIGJsb2NrcXVvdGUge1xuICAgIGJvcmRlcjogbm9uZTtcbiAgICBmb250LXNpemU6IGluaGVyaXQ7XG4gICAgbGluZS1oZWlnaHQ6IDEuNTtcbiAgICBtYXJnaW46IDA7XG4gICAgcGFkZGluZzogMDtcbiAgfVxuICAucXVvdGVzIGEge1xuICAgIGNvbG9yOiBpbml0aWFsO1xuICAgIHRleHQtdW5kZXJsaW5lOiBub25lO1xuICB9XG4gIC5xdW90ZXMgYSBibG9ja3F1b3RlID4gc21hbGwge1xuICAgIGNvbG9yOiBpbmhlcml0O1xuICAgIGZvbnQtd2VpZ2h0OiA2MDA7XG4gICAgbWFyZ2luLXRvcDogMmVtO1xuICAgIHRleHQtYWxpZ246IHJpZ2h0O1xuXG4gICAgPiBzcGFuIHtcbiAgICAgIHBhZGRpbmctbGVmdDogMC41ZW07XG4gICAgfVxuXG4gICAgJjpiZWZvcmUge1xuICAgICAgZGlzcGxheTogbm9uZTtcbiAgICB9XG4gIH1cblxuICAubW9yb255IGEgYmxvY2txdW90ZSA+IHNtYWxsID4gc3BhbiB7XG4gICAgY29sb3I6ICM5M0E4QzY7XG4gIH1cblxuICAudmVyZ2FuYXJhIGEgYmxvY2txdW90ZSA+IHNtYWxsID4gc3BhbiB7XG4gICAgY29sb3I6ICM1Qzc0OUI7XG4gIH1cblxuICAuYXBwbHkge1xuICAgIHBhZGRpbmctdG9wOiAxMDBweDtcbiAgICBwYWRkaW5nLWJvdHRvbTogMTAwcHg7XG5cbiAgICAuY29udGFpbmVyIHtcbiAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgfVxuXG4gICAgQG1lZGlhIChtYXgtd2lkdGg6ICRzY3JlZW4tbWQpIHtcbiAgICAgIC5jb250YWluZXIge1xuICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgICAgfVxuICAgIH1cbiAgICBAbWVkaWEgKG1heC13aWR0aDogJHNjcmVlbi1zbSkge1xuICAgICAgcGFkZGluZy10b3A6IDUwcHg7XG4gICAgICBwYWRkaW5nLWJvdHRvbTogNTBweDtcbiAgICB9XG4gIH1cblxuICAuYXBwbHlfX2Zvcm0ge1xuICAgIGZsZXg6IDAgMCA2ODVweDtcbiAgICBwYWRkaW5nOiA0NnB4O1xuICAgIGJhY2tncm91bmQ6ICNGRkZGRkY7XG4gICAgYm94LXNoYWRvdzogMCAycHggOHB4IDAgcmdiYSgwLDE0LDM5LDAuMTIpLCAwIDEwcHggMjBweCAwIHJnYmEoMCwxNCwzOSwwLjEyKTtcbiAgICBib3JkZXItcmFkaXVzOiAxNXB4O1xuXG4gICAgaDIge1xuICAgICAgbWFyZ2luLXRvcDogMDtcbiAgICAgIGZvbnQtd2VpZ2h0OiA3MDA7XG4gICAgICBmb250LXNpemU6IDM2cHg7XG4gICAgICBsZXR0ZXItc3BhY2luZzogLTEuMnB4O1xuICAgICAgbGluZS1oZWlnaHQ6IDQ4cHg7XG4gICAgICBjb2xvcjogIzE2MUExRjtcbiAgICB9XG5cbiAgICAuaGJzcHQtZm9ybSB7XG4gICAgICBtYXJnaW46IDQ0cHggMCAwO1xuICAgIH1cblxuICAgIEBtZWRpYSAobWF4LXdpZHRoOiAkc2NyZWVuLWxnKSB7XG4gICAgICBmbGV4OiAwIDAgNTgwcHg7XG4gICAgfVxuICB9XG5cbiAgLmFwcGx5X19iZW5lZml0cyB7XG4gICAgcGFkZGluZy1sZWZ0OiA1MHB4O1xuICAgIG1hcmdpbi10b3A6IDYycHg7XG5cbiAgICBoNCB7XG4gICAgICBmb250LXNpemU6IDIycHg7XG4gICAgICBmb250LXdlaWdodDogNzAwO1xuICAgICAgbGV0dGVyLXNwYWNpbmc6IC0wLjAzZW07XG4gICAgICBjb2xvcjogIzE2MUExRjtcbiAgICAgIG1hcmdpbjogMCAwIDM2cHg7XG4gICAgfVxuICB9XG5cbiAgLmJlbmVmaXQtbGlzdCB7XG4gICAgbWFyZ2luOiAwO1xuICAgIHBhZGRpbmc6IDA7XG4gICAgbGlzdC1zdHlsZS10eXBlOiBub25lO1xuICB9XG5cbiAgLmJlbmVmaXQtbGlzdF9faXRlbSB7XG4gICAgcGFkZGluZy1sZWZ0OiA0MnB4O1xuICAgIG1hcmdpbi10b3A6IDI4cHg7XG4gICAgYmFja2dyb3VuZDogdXJsKC9pbWcvZnJhbWV3b3JrL2NoZWNrbWFyay1pY29uLnBuZykgbm8tcmVwZWF0IDAgMDtcbiAgICBiYWNrZ3JvdW5kLXNpemU6IDI0cHg7XG5cbiAgICBoNSB7XG4gICAgICBmb250LXNpemU6IDE4cHg7XG4gICAgICBmb250LXdlaWdodDogNjAwO1xuICAgICAgY29sb3I6ICMxNjFBMUY7XG4gICAgICBsaW5lLWhlaWdodDogMjJweDtcbiAgICAgIG1hcmdpbjogMCAwIDVweDtcbiAgICB9XG5cbiAgICBwIHtcbiAgICAgIGZvbnQtc2l6ZTogMTRweDtcbiAgICAgIGNvbG9yOiAjNzQ3RjkyO1xuICAgICAgbGV0dGVyLXNwYWNpbmc6IC0wLjI1cHg7XG4gICAgICBsaW5lLWhlaWdodDogMjRweDtcbiAgICAgIG1heC13aWR0aDogMjgwcHg7XG4gICAgfVxuICB9XG5cbiAgQG1lZGlhIChtYXgtd2lkdGg6ICRzY3JlZW4tc20pIHtcbiAgICAuYXBwbHlfX2Zvcm0ge1xuICAgICAgZmxleDogMCAwIGF1dG87XG4gICAgICBwYWRkaW5nOiAyNnB4O1xuXG4gICAgICBoMiB7XG4gICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICAgICAgZm9udC1zaXplOiAzMHB4O1xuICAgICAgICBtYXJnaW46IDE2cHggMDtcbiAgICAgIH1cbiAgICAgIC5oYnNwdC1mb3JtIHtcbiAgICAgICAgLy8gbWFyZ2luOiAyNHB4IDAgMDtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBAbWVkaWEgKG1heC13aWR0aDogJHNjcmVlbi1tZCkge1xuICAgIC5hcHBseV9fYmVuZWZpdHMge1xuICAgICAgcGFkZGluZy1sZWZ0OiAwO1xuICAgIH1cbiAgICAuYmVuZWZpdC1saXN0X19pdGVtIHB7XG4gICAgICBtYXgtd2lkdGg6IG5vbmU7XG4gICAgfVxuICB9XG59XG4iLCIjcGFnZS1kZW1vIC5kZW1vLWN0YSxcbiNwYWdlLXN0cmF0ZWd5LXNlc3Npb24gLmRlbW8tY3RhIHtcblxuICBAbWVkaWEgKG1heC13aWR0aDogJHNjcmVlbi14cy1tYXgpIHtcbiAgICBtYXJnaW4tdG9wOiAwO1xuICB9XG5cbiAgPiAuY29udGFpbmVyIHtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgcGFkZGluZy1ib3R0b206IDEwNHB4O1xuICAgIHBhZGRpbmctdG9wOiA1M3B4O1xuXG4gICAgQG1lZGlhIChtYXgtd2lkdGg6ICRzY3JlZW4teHMtbWF4KSB7XG4gICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgICAgcGFkZGluZy10b3A6IDIzcHg7XG4gICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgfVxuICB9XG5cbiAgaGdyb3VwIHtcbiAgICBtYXgtd2lkdGg6IG5vbmU7XG4gICAgcGFkZGluZy1ib3R0b206IDA7XG4gICAgcGFkZGluZy10b3A6IDA7XG5cbiAgICBAbWVkaWEgKG1heC13aWR0aDogJHNjcmVlbi14cy1tYXgpIHtcbiAgICAgIG1heC13aWR0aDogNDgwcHg7XG4gICAgfVxuICB9XG5cbiAgaGdyb3VwIHAge1xuICAgIG1hcmdpbi1ib3R0b206IDA7XG5cbiAgICBAbWVkaWEgKG1heC13aWR0aDogJHNjcmVlbi14cy1tYXgpIHtcbiAgICAgIGZvbnQtc2l6ZTogMTVweDtcbiAgICB9XG4gIH1cblxuICBoMSB7XG4gICAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgICBtYXJnaW4tYm90dG9tOiA4cHg7XG4gICAgbWFyZ2luLXRvcDogMDtcblxuICAgIEBtZWRpYSAobWluLXdpZHRoOiAkc2NyZWVuLW1kLW1pbikge1xuICAgICAgZm9udC1zaXplOiAzMnB4O1xuICAgIH1cbiAgfVxuXG4gICZfX2ljb24ge1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIG1hcmdpbi1yaWdodDogMjBweDtcbiAgICB3aWR0aDogNjRweDtcblxuICAgIEBtZWRpYSAobWF4LXdpZHRoOiAkc2NyZWVuLXhzLW1heCkge1xuICAgICAgbWFyZ2luLXJpZ2h0OiAwO1xuICAgICAgbWFyZ2luLWJvdHRvbTogMmVtO1xuICAgIH1cbiAgfVxufVxuXG4jcGFnZS1kZW1vIC5kZW1vLWZvcm0sXG4jcGFnZS1zdHJhdGVneS1zZXNzaW9uIC5kZW1vLWZvcm0ge1xuXG4gIGRpc3BsYXk6IGZsZXg7XG4gIG92ZXJmbG93OiB2aXNpYmxlO1xuXG4gICY6OmJlZm9yZSxcbiAgJjo6YWZ0ZXIge1xuICAgIGRpc3BsYXk6IG5vbmU7XG4gIH1cblxuICAuaGJzcHQtZm9ybSB7XG4gICAgQGluY2x1ZGUgYm94O1xuICAgIG1hcmdpbi1ib3R0b206IDUwcHg7XG4gICAgbWFyZ2luLXRvcDogLTQwcHg7XG4gICAgLy8gbWluLXdpZHRoOiA2MzBweDtcbiAgICBwYWRkaW5nOiA2NHB4IDY0cHggMjRweDtcblxuICAgIGZvcm0ge1xuICAgICAgbWF4LXdpZHRoOiAxMDAlO1xuICAgICAgcGFkZGluZzogMDtcblxuICAgICAgaDMge1xuICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgIH1cblxuICAgICAgJjpiZWZvcmUge1xuICAgICAgICBkaXNwbGF5OiBub25lOyAvLyBCb290c3RyYXAgY2xlYXJmaXggbWVzc2VzIHVwIGZsZXggYWxpZ25tZW50XG4gICAgICB9XG4gICAgfVxuXG4gICAgLmhzLWZvcm0tcmVxdWlyZWQge1xuICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG4gICAgfVxuXG4gICAgYnV0dG9uIHtcbiAgICAgIGZsb2F0OiBub25lO1xuICAgICAgbWFyZ2luLXRvcDogMDtcbiAgICB9XG5cbiAgICAuaHMtaW5wdXQge1xuICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICBtYXgtd2lkdGg6IDEwMCU7XG4gICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAgIH1cblxuICAgIC5mb3JtLWNvbHVtbnMtMSAuaW5wdXQge1xuICAgICAgbWFyZ2luLXJpZ2h0OiAwO1xuICAgIH1cbiAgfVxuXG4gICZfX2FzaWRlIHtcbiAgICAvLyBtYXgtd2lkdGg6IDMzJTtcbiAgICBwYWRkaW5nOiA0ZW07XG4gICAgbWFyZ2luLWxlZnQ6IGF1dG87XG5cbiAgICBpbWcge1xuICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICB3aWR0aDogMTAwJTtcbiAgICB9XG5cbiAgICB1bCB7XG4gICAgICBjb2xvcjogIzcyN2E4NztcbiAgICAgIGZvbnQtc2l6ZTogMS4xMjVlbTtcbiAgICAgIGxpc3Qtc3R5bGU6IG5vbmU7XG4gICAgICBtYXJnaW46IDA7XG4gICAgICBwYWRkaW5nOiAwO1xuXG4gICAgICA+IGxpIHtcbiAgICAgICAgbWFyZ2luLWJvdHRvbTogMS41ZW07XG4gICAgICAgIHBhZGRpbmctbGVmdDogMS41ZW07XG4gICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcblxuICAgICAgICAmOmJlZm9yZSB7XG4gICAgICAgICAgY29sb3I6ICRibHVlO1xuICAgICAgICAgIGNvbnRlbnQ6ICdcXGYyYmEnO1xuICAgICAgICAgIGZvbnQtZmFtaWx5OiAnSW9uaWNvbnMnO1xuICAgICAgICAgIGxlZnQ6IDA7XG4gICAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICAgIHRvcDogMDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgID4gcCB7XG4gICAgICBjb2xvcjogIzcwN2M4ODtcbiAgICAgIGZvbnQtc2l6ZTogMC44NzVlbTtcbiAgICAgIGZvbnQtd2VpZ2h0OiA3MDA7XG4gICAgICBsZXR0ZXItc3BhY2luZzogMC4wNzVlbTtcbiAgICAgIGxpbmUtaGVpZ2h0OiAyO1xuICAgICAgbWFyZ2luLWJvdHRvbTogM2VtO1xuICAgICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcbiAgICB9XG5cbiAgICBAbWVkaWEgKG1heC13aWR0aDogJHNjcmVlbi1tZC1tYXgpIHtcbiAgICAgIHBhZGRpbmctcmlnaHQ6IDA7XG4gICAgfVxuXG4gICAgQG1lZGlhIChtYXgtd2lkdGg6ICRzY3JlZW4tc20tbWF4KSB7XG4gICAgICBkaXNwbGF5OiBub25lO1xuICAgIH1cbiAgfVxuXG4gIC8vIHRleHRhcmVhLFxuICAvLyAuZm9ybS1jb250cm9sLFxuICAvLyAuc2VsZWN0LXdyYXBwZXIge1xuICAvLyAgIG1hcmdpbi1ib3R0b206IDEycHg7XG4gIC8vICAgbWFyZ2luLXJpZ2h0OiAwO1xuICAvLyB9XG5cbiAgLy8gZm9ybSA+IC5mb3JtLWNvbnRyb2wge1xuICAvLyAgIHdpZHRoOiA0OSU7XG5cbiAgLy8gICBAbWVkaWEgKG1heC13aWR0aDogNTIwcHgpIHtcbiAgLy8gICAgIHdpZHRoOiAxMDAlO1xuICAvLyAgIH1cbiAgLy8gfVxufVxuIiwiI3BhZ2UtaWRlbnRpdHktdmF1bHQge1xuICBtYWluIHtcbiAgICBmb250LWZhbWlseTogJGZvbnQtZmFtaWx5LWludGVyO1xuICAgIG92ZXJmbG93OiB2aXNpYmxlO1xuXG4gICAgaDEsXG4gICAgaDIsXG4gICAgaDMsXG4gICAgaDQsXG4gICAgLmJ0biB7XG4gICAgICBmb250LWZhbWlseTogJGZvbnQtZmFtaWx5LWVpbmE7XG4gICAgfVxuICB9XG4gIC5zdWItaGVhZGVyIHtcbiAgICAudmF1bHQtbGluayB7XG4gICAgICBmb250LXNpemU6IDE1cHg7XG4gICAgICBmb250LXdlaWdodDogNzAwO1xuICAgICAgcGFkZGluZy1sZWZ0OiAxcHg7XG4gICAgICBwYWRkaW5nLXRvcDogMTdweDtcbiAgICAgIGxldHRlci1zcGFjaW5nOiAuMDNlbTtcblxuICAgICAgJjpiZWZvcmUge1xuICAgICAgICBjb250ZW50OiAnJztcbiAgICAgICAgYmFja2dyb3VuZDogdXJsKCcvaW1nL2VudGVycHJpc2UvaWRlbnRpdHktdmF1bHQvdmF1bHQtbmF2LWxvZ28ucG5nJykgMCAwIG5vLXJlcGVhdDtcbiAgICAgICAgYmFja2dyb3VuZC1zaXplOiAxMDAlO1xuICAgICAgICB3aWR0aDogMzJweDtcbiAgICAgICAgaGVpZ2h0OiAzMnB4O1xuICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgICAgIG1hcmdpbi1yaWdodDogOXB4O1xuICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogLTExcHg7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLmRlbW8ge1xuICAgICAgcGFkZGluZzogMTlweCAxcHggMThweCAxNXB4O1xuXG4gICAgICAmOjphZnRlciB7XG4gICAgICAgIGZvbnQtZmFtaWx5OiAnSW9uaWNvbnMnO1xuICAgICAgICBjb250ZW50OiBcIu+PkVwiO1xuICAgICAgICBtYXJnaW4tbGVmdDogM3B4O1xuICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogLTFweDtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAudG9wIHtcbiAgICBtYXJnaW4tdG9wOiAtMTcycHg7XG4gICAgcGFkZGluZy10b3A6IDI3NnB4O1xuICAgIGJhY2tncm91bmQ6ICMwYzFjMWM7XG4gICAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KHRvIHJpZ2h0LCAjMGUxZTJlIDAlLCAjMjAzZTVhIDEwMCUpO1xuICAgIG1pbi1oZWlnaHQ6IDk3MnB4O1xuXG4gICAgLmNvbnRhaW5lciB7XG4gICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG5cbiAgICAgICY6OmFmdGVyIHtcbiAgICAgICAgYmFja2dyb3VuZDogdXJsKCcvaW1nL2VudGVycHJpc2UvaWRlbnRpdHktdmF1bHQvaGVyby1pbWcucG5nJykgMCAwIG5vLXJlcGVhdDtcbiAgICAgICAgYmFja2dyb3VuZC1zaXplOiAxMDAlO1xuICAgICAgICB3aWR0aDogNTg5cHg7XG4gICAgICAgIGhlaWdodDogNzYwcHg7XG4gICAgICAgIGNvbnRlbnQ6ICcnO1xuICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICByaWdodDogLTgycHg7XG4gICAgICAgIHRvcDogLTcycHg7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaGdyb3VwIHtcbiAgICAgIG1heC13aWR0aDogNTQwcHg7XG4gICAgfVxuXG4gICAgaDEge1xuICAgICAgY29sb3I6IHdoaXRlO1xuICAgICAgbGV0dGVyLXNwYWNpbmc6IC0uMDJlbTtcbiAgICB9XG5cbiAgICBoMyB7XG4gICAgICBjb2xvcjogIzdiYmZmZjtcbiAgICAgIGZvbnQtc2l6ZTogMzVweDtcbiAgICAgIGxldHRlci1zcGFjaW5nOiAtLjAxNmVtO1xuICAgICAgbGluZS1oZWlnaHQ6IDEuMzllbTtcbiAgICAgIG1hcmdpbi10b3A6IDE1cHg7XG4gICAgICBtYXJnaW4tYm90dG9tOiA5cHg7XG4gICAgfVxuXG4gICAgcCB7XG4gICAgICBjb2xvcjogI2MzY2VkZjtcbiAgICAgIGZvbnQtc2l6ZTogMThweDtcbiAgICAgIGxldHRlci1zcGFjaW5nOiAtLjAyZW07XG4gICAgICBtYXJnaW4tYm90dG9tOiAxcHg7XG4gICAgICBmb250LXdlaWdodDogNDAwO1xuICAgICAgbGluZS1oZWlnaHQ6IDEuNWVtO1xuXG4gICAgICBzdHJvbmcge1xuICAgICAgICBjb2xvcjogI2ZmZjtcbiAgICAgICAgZm9udC13ZWlnaHQ6IDQwMDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAuYnRuIHtcbiAgICAgIG1hcmdpbi10b3A6IDUxcHg7XG4gICAgICBwYWRkaW5nOiAxNHB4IDE2cHggMTJweCAxOXB4O1xuICAgICAgZm9udC1zaXplOiAxNHB4O1xuICAgICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcbiAgICAgIGxldHRlci1zcGFjaW5nOiAuMDZlbTtcbiAgICAgIG1hcmdpbi1ib3R0b206IDgwcHg7XG5cbiAgICAgICY6OmFmdGVyIHtcbiAgICAgICAgZm9udC1mYW1pbHk6ICdJb25pY29ucyc7XG4gICAgICAgIGNvbnRlbnQ6ICfvj5EnO1xuICAgICAgICBmb250LXNpemU6IDIzcHg7XG4gICAgICAgIGZvbnQtd2VpZ2h0OiA0MDA7XG4gICAgICAgIHZlcnRpY2FsLWFsaWduOiAtNHB4O1xuICAgICAgICBtYXJnaW4tbGVmdDogNXB4O1xuICAgICAgfVxuICAgIH1cblxuICAgIEBtZWRpYSAobWF4LXdpZHRoOiAkc2NyZWVuLW1kLW1heCkgIHtcbiAgICAgIGhncm91cCB7XG4gICAgICAgIG1heC13aWR0aDogNDIwcHg7XG4gICAgICB9XG4gICAgfVxuXG4gICAgQG1lZGlhIChtYXgtd2lkdGg6ICRzY3JlZW4tc20tbWF4KSAge1xuICAgICAgaGdyb3VwIHtcbiAgICAgICAgbWF4LXdpZHRoOiAxMDAlO1xuICAgICAgfVxuXG4gICAgICBoMSxcbiAgICAgIGgzIHtcbiAgICAgICAgbWF4LXdpZHRoOiA0NjBweDtcbiAgICAgIH1cblxuICAgICAgLmNvbnRhaW5lcjo6YWZ0ZXIge1xuICAgICAgICB3aWR0aDogMjk0cHg7XG4gICAgICAgIGhlaWdodDogMzgwcHg7XG4gICAgICAgIHJpZ2h0OiAtMzFweDtcbiAgICAgICAgdG9wOiAtODBweDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBAbWVkaWEgKG1heC13aWR0aDogJHNjcmVlbi14cy1tYXgpICB7XG4gICAgICBwYWRkaW5nLXRvcDogNDAwcHg7XG5cbiAgICAgIC5jb250YWluZXI6OmFmdGVyIHtcbiAgICAgICAgd2lkdGg6IDE0N3B4O1xuICAgICAgICBoZWlnaHQ6IDE5MHB4O1xuICAgICAgICByaWdodDogY2FsYyg1MCUgLSA5NXB4KTtcbiAgICAgICAgdG9wOiAtMTkwcHg7XG4gICAgICB9XG5cbiAgICAgIGhncm91cCB7XG4gICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICAgIH1cblxuICAgICAgaDEsXG4gICAgICBoMyB7XG4gICAgICAgIG1heC13aWR0aDogMTAwJTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAuZ2FuZGFsZiB7XG4gICAgcGFkZGluZy10b3A6IDEwNHB4O1xuICAgIG1hcmdpbi1ib3R0b206IDgwcHg7XG5cbiAgICAuc3BsaXQge1xuICAgICAgZGlzcGxheTogZmxleDtcblxuICAgICAgPiBkaXYge1xuICAgICAgICBmbGV4OiAwIDEgNTIwcHg7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaDIge1xuICAgICAgbWFyZ2luLXRvcDogN3B4O1xuICAgIGZvbnQtc2l6ZTogMzZweDtcbiAgICBtYXJnaW4tbGVmdDogMXB4O1xuICAgIGxldHRlci1zcGFjaW5nOiAtLjAyZW07XG4gICAgZm9udC13ZWlnaHQ6IDcwMDtcbiAgICBsaW5lLWhlaWdodDogMS44ZW07XG4gICAgfVxuXG4gICAgaDMge1xuICAgICAgbWFyZ2luLXRvcDogNjhweDtcbiAgICAgIGZvbnQtc2l6ZTogMjdweDtcbiAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7XG4gICAgfVxuXG4gICAgcCB7XG4gICAgICBmb250LXNpemU6IDE5cHg7XG4gICAgICBtYXJnaW4tdG9wOiAyNHB4O1xuICAgICAgbWFyZ2luLWxlZnQ6IDFweDtcbiAgICAgIGxldHRlci1zcGFjaW5nOiAuMDA1ZW07XG4gICAgICBsaW5lLWhlaWdodDogMS45MmVtO1xuICAgICAgY29sb3I6ICM1MTY1N2Q7XG5cbiAgICAgIHN0cm9uZyB7XG4gICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdWwge1xuICAgICAgbWFyZ2luLWxlZnQ6IGF1dG87XG4gICAgICBmbGV4OiAwIDEgNTE0cHg7XG4gICAgICBtYXJnaW4tdG9wOiAzNHB4O1xuICAgICAgcGFkZGluZy1sZWZ0OiAwO1xuXG4gICAgICBAbWVkaWEgKG1heC13aWR0aDogJHNjcmVlbi1tZC1tYXgpICB7XG4gICAgICAgIGZsZXgtYmFzaXM6IDM5MnB4O1xuICAgICAgfVxuXG4gICAgICBsaTo6YmVmb3JlIHtcbiAgICAgICAgdG9wOiAwO1xuICAgICAgfVxuICAgIH1cblxuICAgIGxpIHtcbiAgICAgIHBhZGRpbmctbGVmdDogNTVweDtcbiAgICAgIGZvbnQtc2l6ZTogMTRweDtcbiAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgIGxpc3Qtc3R5bGU6IG5vbmU7XG4gICAgICBsZXR0ZXItc3BhY2luZzogLS4wMjJlbTtcbiAgICAgIGxpbmUtaGVpZ2h0OiAxLjc4ZW07XG4gICAgICBtYXJnaW4tYm90dG9tOiAzNnB4O1xuICAgICAgY29sb3I6ICM1MTY1N2Q7XG5cbiAgICAgICY6OmJlZm9yZSB7XG4gICAgICAgIGJhY2tncm91bmQ6IHVybCgnL2ltZy9lbnRlcnByaXNlL2lkZW50aXR5LXZhdWx0L2xvY2stY2hlY2ttYXJrLnBuZycpIDAgMCBuby1yZXBlYXQ7XG4gICAgICAgIGJhY2tncm91bmQtc2l6ZTogMzJweDtcbiAgICAgICAgd2lkdGg6IDMycHg7XG4gICAgICAgIGhlaWdodDogMzJweDtcbiAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICBsZWZ0OiAwO1xuICAgICAgICB0b3A6IDdweDtcbiAgICAgICAgY29udGVudDogJyc7XG4gICAgICB9XG4gICAgfVxuXG4gICAgQG1lZGlhIChtYXgtd2lkdGg6ICRzY3JlZW4tc20tbWF4KSAge1xuICAgICAgLnNwbGl0IHtcbiAgICAgICAgZGlzcGxheTogYmxvY2s7XG5cbiAgICAgICAgPiBkaXYge1xuICAgICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBsaSB7XG4gICAgICAgIHRvcDogMDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmaWd1cmUge1xuICAgICAgYmFja2dyb3VuZDogI2YzZjVmODtcbiAgICAgIGJvcmRlci1yYWRpdXM6IDE0cHg7XG4gICAgICBwYWRkaW5nOiAyNHB4IDMwcHg7XG4gICAgICBtYXJnaW4tdG9wOiA1OXB4O1xuICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICAgbWluLWhlaWdodDogMjc4cHg7XG5cbiAgICAgICY6OmJlZm9yZSxcbiAgICAgICY6OmFmdGVyIHtcbiAgICAgICAgYmFja2dyb3VuZDogdXJsKCcvaW1nL2VudGVycHJpc2UvaWRlbnRpdHktdmF1bHQvaXYtZGlhZ3JhbS1zdGF0ZXMucG5nJykgMCAwIG5vLXJlcGVhdDtcbiAgICAgICAgYmFja2dyb3VuZC1zaXplOiAxMDAlO1xuICAgICAgICB3aWR0aDogMTEwMHB4O1xuICAgICAgICBoZWlnaHQ6IDI0MnB4O1xuICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgIGxlZnQ6IDIxcHg7XG4gICAgICAgIHRvcDogMjRweDtcbiAgICAgICAgYm90dG9tOiAwO1xuICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTtcbiAgICAgICAgY29udGVudDogJyc7XG4gICAgICAgIHRyYW5zaXRpb246IC4ycyBvcGFjaXR5LCAuMnMgdHJhbnNmb3JtIGVhc2Utb3V0O1xuICAgICAgfVxuXG4gICAgICAmOjphZnRlciB7XG4gICAgICAgIGJhY2tncm91bmQtcG9zaXRpb246IDAgMTAwJTtcbiAgICAgICAgb3BhY2l0eTogMDtcbiAgICAgICAgdHJhbnNmb3JtOiBzY2FsZTNkKDEuMDUsIDEuMDUsIDEpO1xuICAgICAgfVxuXG4gICAgICBzdHJvbmcge1xuICAgICAgICBmb250LXdlaWdodDogNjAwO1xuICAgICAgICBmb250LXNpemU6IDE1cHg7XG4gICAgICB9XG5cbiAgICAgIGEge1xuICAgICAgICBiYWNrZ3JvdW5kOiAjZWVlO1xuICAgICAgICBib3JkZXItcmFkaXVzOiAxMHB4O1xuICAgICAgICBoZWlnaHQ6IDE4cHg7XG4gICAgICAgIHdpZHRoOiAyOHB4O1xuICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgICAgIG1hcmdpbi1sZWZ0OiAxM3B4O1xuICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogLTRweDtcbiAgICAgICAgYm94LXNoYWRvdzogMCAwIDRweCBpbnNldCByZ2JhKDAsIDAsIDAsIDAuMSk7XG4gICAgICAgIHRyYW5zaXRpb246IC4ycyBib3JkZXItY29sb3I7XG4gICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgICAgY3Vyc29yOiBwb2ludGVyO1xuXG4gICAgICAgICY6OmJlZm9yZSB7XG4gICAgICAgICAgYmFja2dyb3VuZDogd2hpdGU7XG4gICAgICAgICAgd2lkdGg6IDE2cHg7XG4gICAgICAgICAgaGVpZ2h0OiAxNnB4O1xuICAgICAgICAgIGNvbnRlbnQ6ICcnO1xuICAgICAgICAgIGJveC1zaGFkb3c6IDAgMXB4IDRweCByZ2JhKDAsIDAsIDAsIDAuMSk7XG4gICAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICAgIHRvcDogMXB4O1xuICAgICAgICAgIGxlZnQ6IDJweDtcbiAgICAgICAgICBib3JkZXItcmFkaXVzOiA5cHg7XG4gICAgICAgICAgdHJhbnNpdGlvbjogLjJzIHRyYW5zZm9ybSBlYXNlO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgICYuYWN0aXZlIHtcbiAgICAgICAgJjo6YmVmb3JlIHtcbiAgICAgICAgICBvcGFjaXR5OiAwO1xuICAgICAgICAgIHRyYW5zZm9ybTogc2NhbGUzZCgxLjA1LCAxLjA1LCAxKTtcbiAgICAgICAgfVxuXG4gICAgICAgICY6OmFmdGVyIHtcbiAgICAgICAgICBvcGFjaXR5OiAxO1xuICAgICAgICAgIHRyYW5zZm9ybTogbm9uZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGEge1xuICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICM1ZGFmZmU7XG5cbiAgICAgICAgICAmOjpiZWZvcmUge1xuICAgICAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUzZCg5cHgsIDAsIDApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBAbWVkaWEgKG1heC13aWR0aDogJHNjcmVlbi1tZC1tYXgpICB7XG4gICAgICAgIG1pbi1oZWlnaHQ6IDI0NHB4O1xuXG4gICAgICAgICY6OmJlZm9yZSxcbiAgICAgICAgJjo6YWZ0ZXIge1xuICAgICAgICAgIHdpZHRoOiA4OTZweDtcbiAgICAgICAgICBoZWlnaHQ6IDE5NnB4O1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIEBtZWRpYSAobWF4LXdpZHRoOiAkc2NyZWVuLXNtLW1heCkgIHtcbiAgICAgICAgbWluLWhlaWdodDogMTk0cHg7XG5cbiAgICAgICAgJjo6YmVmb3JlLFxuICAgICAgICAmOjphZnRlciB7XG4gICAgICAgICAgd2lkdGg6IDY3OHB4O1xuICAgICAgICAgIGhlaWdodDogMTQ5cHg7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgQG1lZGlhIChtYXgtd2lkdGg6ICRzY3JlZW4teHMtbWF4KSAge1xuICAgICAgICBkaXNwbGF5OiBub25lO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC5wb2ludHMge1xuICAgIG1hcmdpbi1ib3R0b206IDEwMHB4O1xuXG4gICAgaDIge1xuICAgICAgbGV0dGVyLXNwYWNpbmc6IC0uMDJlbTtcbiAgICB9XG5cbiAgICBwIHtcbiAgICAgIG1hcmdpbi10b3A6IDE3cHg7XG4gICAgICBmb250LXdlaWdodDogNDAwO1xuICAgICAgZm9udC1zaXplOiAyMHB4O1xuICAgICAgbGV0dGVyLXNwYWNpbmc6IC0uMDJlbTtcbiAgICB9XG5cbiAgICB1bCB7XG4gICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgZmxleC13cmFwOiB3cmFwO1xuICAgICAgcGFkZGluZzogMDtcbiAgICAgIGxpc3Qtc3R5bGU6IG5vbmU7XG4gICAgICBwYWRkaW5nLXRvcDogNjhweDtcbiAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcbiAgICB9XG5cbiAgICBsaSB7XG4gICAgICBmbGV4OiAwIDAgMzIwcHg7XG4gICAgICBwYWRkaW5nLWxlZnQ6IDA7XG4gICAgICBwYWRkaW5nLXRvcDogNjlweDtcbiAgICAgIG1hcmdpbi1sZWZ0OiAxcHg7XG4gICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICBtYXJnaW4tYm90dG9tOiA2MXB4O1xuXG4gICAgICBAbWVkaWEgKG1heC13aWR0aDogJHNjcmVlbi1tZC1tYXgpICB7XG4gICAgICAgIGZsZXgtYmFzaXM6IDI1NnB4O1xuICAgICAgfVxuXG4gICAgICAmOjpiZWZvcmUge1xuICAgICAgICBiYWNrZ3JvdW5kOiB1cmwoJy9pbWcvZW50ZXJwcmlzZS9pZGVudGl0eS12YXVsdC9iZW5lZml0cy1pY29ucy5wbmcnKSAwIDAgbm8tcmVwZWF0O1xuICAgICAgICBiYWNrZ3JvdW5kLXNpemU6IDQ4cHg7XG4gICAgICAgIHdpZHRoOiA0OHB4O1xuICAgICAgICBoZWlnaHQ6IDQ4cHg7XG4gICAgICAgIGNvbnRlbnQ6ICcnO1xuICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgIHRvcDogMDtcbiAgICAgICAgbGVmdDogMDtcbiAgICAgIH1cblxuICAgICAgJi5wcm90ZWN0aW9uOjpiZWZvcmUgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwIC00OHB4OyAgfVxuICAgICAgJi5jb2RlOjpiZWZvcmUgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwIC05NnB4OyAgfVxuICAgICAgJi5iYWNrZW5kOjpiZWZvcmUgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwIC0xNDRweDsgIH1cbiAgICAgICYudG9rZW5zOjpiZWZvcmUgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwIC0xOTJweDsgIH1cbiAgICAgICYuc3VwcG9ydDo6YmVmb3JlIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogMCAtMjQwcHg7ICB9XG5cbiAgICAgIHN0cm9uZyB7XG4gICAgICAgIGZvbnQtc2l6ZTogMjBweDtcbiAgICAgICAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgICAgICAgZm9udC1mYW1pbHk6ICRmb250LWZhbWlseS1laW5hO1xuICAgICAgfVxuXG4gICAgICBwIHtcbiAgICAgICAgZm9udC1zaXplOiAxNnB4O1xuICAgICAgICBtYXJnaW4tdG9wOiAxNXB4O1xuICAgICAgICBmb250LXdlaWdodDogNDAwO1xuICAgICAgICBsaW5lLWhlaWdodDogMS44ZW07XG4gICAgICAgIGxldHRlci1zcGFjaW5nOiAtLjAxZW07XG4gICAgICAgIGNvbG9yOiAjNTE2NTdkO1xuICAgICAgfVxuICAgIH1cblxuXG5cbiAgICBAbWVkaWEgKG1heC13aWR0aDogJHNjcmVlbi1zbS1tYXgpICB7XG4gICAgICBoZ3JvdXAge1xuICAgICAgICBwYWRkaW5nLXRvcDogMDtcbiAgICAgIH1cblxuICAgICAgbGkge1xuICAgICAgICBmbGV4LWJhc2lzOiAzNDBweDtcbiAgICAgIH1cbiAgICB9XG5cblxuXG4gICAgQG1lZGlhIChtYXgtd2lkdGg6ICRzY3JlZW4teHMtbWF4KSAge1xuICAgICAgbGkge1xuICAgICAgICBmbGV4LWJhc2lzOiAxMDAlO1xuICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG5cbiAgICAgICAgJjo6YmVmb3JlIHtcbiAgICAgICAgICBsZWZ0OiBjYWxjKDUwJSAtIDI0cHgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLnByb3RlY3QsXG4gIC5pbnRlZ3JhdGlvbnMge1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcblxuICAgICY6OmJlZm9yZSB7XG4gICAgICBiYWNrZ3JvdW5kOiB1cmwoJy9pbWcvZW50ZXJwcmlzZS9pZGVudGl0eS12YXVsdC9wcm90ZWN0aW9uLWltZy5wbmcnKSAwIDAgbm8tcmVwZWF0O1xuICAgICAgYmFja2dyb3VuZC1zaXplOiAxMDAlO1xuICAgICAgd2lkdGg6IDU2MHB4O1xuICAgICAgaGVpZ2h0OiA1NjBweDtcbiAgICAgIGNvbnRlbnQ6ICcnO1xuICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgdG9wOiAwO1xuICAgICAgcmlnaHQ6IC0xMHB4O1xuXG4gICAgICBAbWVkaWEgKG1heC13aWR0aDogJHNjcmVlbi1zbS1tYXgpICB7XG4gICAgICAgIHdpZHRoOiAyODBweDtcbiAgICAgICAgaGVpZ2h0OiAyODBweDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBoZ3JvdXAge1xuICAgICAgd2lkdGg6IGNhbGMoNTAlIC0gNDZweCk7XG4gICAgICBwYWRkaW5nLXRvcDogMDtcblxuICAgICAgQG1lZGlhIChtYXgtd2lkdGg6ICRzY3JlZW4tbWQtbWF4KSAge1xuICAgICAgICB3aWR0aDogY2FsYyg1MCUgLSA2NnB4KTtcbiAgICAgICAgcGFkZGluZy1ib3R0b206IDA7XG5cbiAgICAgICAgaDMge1xuICAgICAgICAgIHBhZGRpbmctdG9wOiA0MHB4O1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIEBtZWRpYSAobWF4LXdpZHRoOiAkc2NyZWVuLXNtLW1heCkgIHtcbiAgICAgICAgd2lkdGg6IDQ2MHB4O1xuICAgICAgfVxuICAgIH1cblxuICAgIGgzIHtcbiAgICAgIHBhZGRpbmctdG9wOiAxMTVweDtcbiAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7XG4gICAgICBmb250LXNpemU6IDI4cHg7XG4gICAgICBsZXR0ZXItc3BhY2luZzogLS4wMmVtO1xuICAgICAgbWFyZ2luLWJvdHRvbTogMjRweDtcbiAgICB9XG5cbiAgICBwIHtcbiAgICAgIGNvbG9yOiAjNTE2NTdkO1xuICAgICAgZm9udC13ZWlnaHQ6IDQwMDtcbiAgICAgIGxldHRlci1zcGFjaW5nOiAtLjAyZW07XG4gICAgICBsaW5lLWhlaWdodDogMS44ZW07XG5cbiAgICAgICYubGcge1xuICAgICAgICBmb250LXNpemU6IDE5cHg7XG4gICAgICAgIGxldHRlci1zcGFjaW5nOiAuMDA0ZW07XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjllbTtcbiAgICAgICAgZm9udC13ZWlnaHQ6IDQwMDtcbiAgICAgICAgbWFyZ2luLWJvdHRvbTogMTdweDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB1bCB7XG4gICAgICBwYWRkaW5nOiAwO1xuICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgIGZsZXgtd3JhcDogd3JhcDtcbiAgICAgIGxpc3Qtc3R5bGU6IG5vbmU7XG4gICAgICBtYXJnaW4tdG9wOiAzOXB4O1xuXG4gICAgICBAbWVkaWEgKG1heC13aWR0aDogJHNjcmVlbi1tZC1tYXgpICB7XG4gICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgfVxuICAgIH1cblxuICAgIGxpIHtcbiAgICAgIGZsZXg6IDAgMCA1MCU7XG4gICAgICBwYWRkaW5nLWxlZnQ6IDMxcHg7XG4gICAgICBmb250LXNpemU6IDE2cHg7XG4gICAgICBjb2xvcjogIzM4ODBmZjtcbiAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgIG1hcmdpbi1ib3R0b206IDIycHg7XG5cbiAgICAgICY6OmJlZm9yZSB7XG4gICAgICAgIGJhY2tncm91bmQ6IHVybCgnL2ltZy9lbnRlcnByaXNlL2lkZW50aXR5LXZhdWx0L2NoZWNrbWFyay5wbmcnKSAwIDAgbm8tcmVwZWF0O1xuICAgICAgICBiYWNrZ3JvdW5kLXNpemU6IDIwcHg7XG4gICAgICAgIHdpZHRoOiAyMHB4O1xuICAgICAgICBoZWlnaHQ6IDIwcHg7XG4gICAgICAgIGNvbnRlbnQ6ICcnO1xuICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgIHRvcDogMDtcbiAgICAgICAgbGVmdDogMXB4O1xuICAgICAgfVxuICAgIH1cblxuICAgIEBtZWRpYSAobWF4LXdpZHRoOiAkc2NyZWVuLXhzLW1heCkgIHtcbiAgICAgIHBhZGRpbmctdG9wOiAyMDBweDtcblxuICAgICAgJjo6YmVmb3JlIHtcbiAgICAgICAgdG9wOiAtMzBweDtcbiAgICAgICAgcmlnaHQ6IGNhbGMoNTAlIC0gMTQwcHgpO1xuICAgICAgfVxuXG4gICAgICBoZ3JvdXAge1xuICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgICAgfVxuXG4gICAgICBsaSB7XG4gICAgICAgIGZsZXgtYmFzaXM6IDEwMCU7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLmludGVncmF0aW9ucyB7XG4gICAgcGFkZGluZy1ib3R0b206IDk5cHg7XG5cbiAgICAmOjpiZWZvcmUge1xuICAgICAgYmFja2dyb3VuZDogdXJsKCcvaW1nL2VudGVycHJpc2UvaWRlbnRpdHktdmF1bHQvaW50ZWdyYXRpb24taW1nLnBuZycpIDAgMCBuby1yZXBlYXQ7XG4gICAgICBiYWNrZ3JvdW5kLXNpemU6IDEwMCU7XG4gICAgICB3aWR0aDogNTYwcHg7XG4gICAgICBoZWlnaHQ6IDU2MHB4O1xuICAgICAgdG9wOiAxMDFweDtcbiAgICAgIGxlZnQ6IC0xMXB4O1xuICAgICAgcmlnaHQ6IGF1dG87XG4gICAgfVxuXG4gICAgaGdyb3VwIHtcbiAgICAgIHBhZGRpbmctdG9wOiA1NnB4O1xuICAgICAgd2lkdGg6IGNhbGMoNTAlIC0gNTlweCk7XG5cbiAgICAgIEBtZWRpYSAobWF4LXdpZHRoOiAkc2NyZWVuLW1kLW1heCkgIHtcbiAgICAgICAgcGFkZGluZy10b3A6IDBweDtcbiAgICAgICAgd2lkdGg6IGNhbGMoNTAlIC0gMTAwcHgpO1xuICAgICAgfVxuICAgIH1cblxuICAgIEBtZWRpYSAobWF4LXdpZHRoOiAkc2NyZWVuLXNtLW1heCkgIHtcbiAgICAgICY6OmJlZm9yZSB7XG4gICAgICAgIHdpZHRoOiAyODBweDtcbiAgICAgICAgaGVpZ2h0OiAyODBweDtcbiAgICAgIH1cblxuICAgICAgaGdyb3VwIHtcbiAgICAgICAgd2lkdGg6IDQ0MHB4O1xuICAgICAgfVxuXG4gICAgICBoMyB7XG4gICAgICAgIHBhZGRpbmctdG9wOiA1MHB4O1xuICAgICAgfVxuICAgIH1cblxuICAgIEBtZWRpYSAobWF4LXdpZHRoOiAkc2NyZWVuLXhzLW1heCkgIHtcbiAgICAgIHBhZGRpbmctdG9wOiAzMzBweDtcblxuICAgICAgJjo6YmVmb3JlIHtcbiAgICAgICAgdG9wOiA4MHB4O1xuICAgICAgICBsZWZ0OiBjYWxjKDUwJSAtIDE0MHB4KTtcbiAgICAgIH1cblxuICAgICAgaGdyb3VwIHtcbiAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICAgIH1cblxuICAgICAgaDMge1xuICAgICAgICBwYWRkaW5nLXRvcDogNTBweDtcbiAgICAgIH1cblxuICAgICAgbGkge1xuICAgICAgICB0ZXh0LWFsaWduOiBsZWZ0O1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC53aGF0LXlvdS1nb3Qge1xuICAgIGJhY2tncm91bmQ6ICMxMDE5MjggdXJsKCcvaW1nL2VudGVycHJpc2UvaWRlbnRpdHktdmF1bHQvYmctcGFuZXMucG5nJykgNTAlIDAgbm8tcmVwZWF0O1xuICAgIGJhY2tncm91bmQtc2l6ZTogMTAwMHB4O1xuXG4gICAgLmNvbnRhaW5lciB7XG4gICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICBwYWRkaW5nLWJvdHRvbTogMTUwcHg7XG4gICAgfVxuXG5cbiAgICBoZ3JvdXAge1xuICAgICAgcGFkZGluZy10b3A6IDE3OHB4O1xuICAgICAgbWF4LXdpZHRoOiA3MTJweDtcbiAgICB9XG5cbiAgICBoMyB7XG4gICAgICBjb2xvcjogd2hpdGU7XG4gICAgICBmb250LXNpemU6IDM2cHg7XG4gICAgICBmb250LXdlaWdodDogNzAwO1xuICAgICAgbGV0dGVyLXNwYWNpbmc6IC0uMDJlbTtcbiAgICB9XG5cbiAgICBwIHtcbiAgICAgIGNvbG9yOiAjYjZjM2Q2O1xuICAgICAgZm9udC13ZWlnaHQ6IDQwMDtcbiAgICAgIG1hcmdpbi10b3A6IDE3cHg7XG4gICAgICBsaW5lLWhlaWdodDogMS44ZW07XG4gICAgICBmb250LXNpemU6IDIwcHg7XG4gICAgICBsZXR0ZXItc3BhY2luZzogLS4wMmVtO1xuXG4gICAgICBzdHJvbmcge1xuICAgICAgICBjb2xvcjogd2hpdGU7XG4gICAgICAgIGZvbnQtd2VpZ2h0OiA0MDA7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdWwge1xuICAgICAgcGFkZGluZzogMDtcbiAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICBmbGV4LXdyYXA6IHdyYXA7XG4gICAgICBsaXN0LXN0eWxlOiBub25lO1xuICAgICAgbWFyZ2luLXRvcDogNjlweDtcbiAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcbiAgICB9XG5cbiAgICBsaSB7XG4gICAgICBmbGV4OiAwIDAgNTE4cHg7XG4gICAgICBwYWRkaW5nLWxlZnQ6IDU2cHg7XG4gICAgICBmb250LXNpemU6IDE2cHg7XG4gICAgICBjb2xvcjogd2hpdGU7XG4gICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICBtYXJnaW4tYm90dG9tOiA0NXB4O1xuICAgICAgcGFkZGluZy10b3A6IDVweDtcbiAgICAgIGxldHRlci1zcGFjaW5nOiAtLjAyZW07XG5cbiAgICAgIEBtZWRpYSAobWF4LXdpZHRoOiAkc2NyZWVuLW1kLW1heCkgIHtcbiAgICAgICAgZmxleC1iYXNpczogY2FsYyg1MCUgLSA1MHB4KTtcbiAgICAgIH1cblxuICAgICAgJjo6YmVmb3JlIHtcbiAgICAgICAgYmFja2dyb3VuZDogdXJsKCcvaW1nL2VudGVycHJpc2UvaWRlbnRpdHktdmF1bHQvbG9jay1jaGVja21hcmsucG5nJykgMCAxMDAlIG5vLXJlcGVhdDtcbiAgICAgICAgYmFja2dyb3VuZC1zaXplOiAzMnB4O1xuICAgICAgICB3aWR0aDogMzJweDtcbiAgICAgICAgaGVpZ2h0OiAzMnB4O1xuICAgICAgICBjb250ZW50OiAnJztcbiAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICB0b3A6IDA7XG4gICAgICAgIGxlZnQ6IDA7XG4gICAgICB9XG4gICAgfVxuXG4gICAgQG1lZGlhIChtYXgtd2lkdGg6ICRzY3JlZW4tc20tbWF4KSAge1xuICAgICAgLy8gcGFkZGluZy1ib3R0b206IDEwMHB4O1xuXG4gICAgICBoZ3JvdXAge1xuICAgICAgICBwYWRkaW5nLXRvcDogOTJweDtcbiAgICAgICAgbWF4LXdpZHRoOiA3MTJweDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBAbWVkaWEgKG1heC13aWR0aDogJHNjcmVlbi14cy1tYXgpICB7XG4gICAgICBiYWNrZ3JvdW5kLXNpemU6IGNvdmVyO1xuXG4gICAgICBsaSB7XG4gICAgICAgIGZsZXgtYmFzaXM6IDEwMCU7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLmRlbW8ge1xuICAgIHBhZGRpbmctdG9wOiA5N3B4O1xuICAgIHBhZGRpbmctYm90dG9tOiAxMTBweDtcblxuICAgIGhncm91cCB7XG4gICAgICBzdHJvbmcge1xuICAgICAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xuICAgICAgICBsZXR0ZXItc3BhY2luZzogLjA2ZW07XG4gICAgICAgIGZvbnQtZmFtaWx5OiAkZm9udC1mYW1pbHktZWluYTtcbiAgICAgIH1cblxuICAgICAgaDIge1xuICAgICAgICBtYXJnaW4tdG9wOiAzOXB4O1xuICAgICAgICBsZXR0ZXItc3BhY2luZzogLS4wMWVtO1xuICAgICAgfVxuXG4gICAgICBwIHtcbiAgICAgICAgbWFyZ2luLXRvcDogMTZweDtcbiAgICAgICAgZm9udC13ZWlnaHQ6IDQwMDtcbiAgICAgICAgZm9udC1zaXplOiAyMHB4O1xuICAgICAgICBsZXR0ZXItc3BhY2luZzogLS4wMmVtO1xuXG4gICAgICAgIHN0cm9uZyB7XG4gICAgICAgICAgZm9udC13ZWlnaHQ6IDQwMDtcbiAgICAgICAgICB0ZXh0LXRyYW5zZm9ybTogbm9uZTtcbiAgICAgICAgICBsZXR0ZXItc3BhY2luZzogaW5oZXJpdDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIC5mb3JtIHtcbiAgICAgIG1hcmdpbi10b3A6IDUwcHg7XG4gICAgICBtYXgtd2lkdGg6IDkzMHB4O1xuICAgICAgbWFyZ2luLWxlZnQ6IGF1dG87XG4gICAgICBtYXJnaW4tcmlnaHQ6IGF1dG87XG4gICAgfVxuXG4gICAgQG1lZGlhIChtYXgtd2lkdGg6ICRzY3JlZW4tc20tbWF4KSAge1xuICAgICAgcGFkZGluZy10b3A6IDA7XG4gICAgICBwYWRkaW5nLWJvdHRvbTogNDBweDtcbiAgICB9XG5cbiAgICBAbWVkaWEgKG1heC13aWR0aDogJHNjcmVlbi14cy1tYXgpICB7XG4gICAgICAuZm9ybSB0ZXh0YXJlYS5ocy1pbnB1dCB7XG4gICAgICAgIHdpZHRoOiBjYWxjKDEwMCUgLSAxOHB4KSAhaW1wb3J0YW50O1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC53YXRjaCB7XG4gICAgYmFja2dyb3VuZDogI2Y2ZjhmYjtcblxuICAgIC5jYXJkIHtcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgIGxlZnQ6IDg1cHg7XG4gICAgICB0b3A6IDY4cHg7XG4gICAgfVxuXG4gICAgaW1nIHtcbiAgICAgIHdpZHRoOiA0NjBweDtcbiAgICB9XG5cbiAgICBoZ3JvdXAge1xuICAgICAgcGFkZGluZy10b3A6IDExOXB4O1xuICAgICAgd2lkdGg6IGNhbGMoNTAlIC0gNTBweCk7XG4gICAgICBwYWRkaW5nLWJvdHRvbTogMTQwcHg7XG5cbiAgICAgIEBtZWRpYSAobWF4LXdpZHRoOiAkc2NyZWVuLW1kLW1heCkgIHtcbiAgICAgICAgcGFkZGluZy10b3A6IDEwMHB4O1xuICAgICAgICB3aWR0aDogY2FsYyg1MCUgLSAxMDBweCk7XG4gICAgICAgIHBhZGRpbmctYm90dG9tOiAxMjBweDtcblxuICAgICAgICBwIHtcbiAgICAgICAgICBwYWRkaW5nLXJpZ2h0OiAwO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaDMge1xuICAgICAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgICAgIGxldHRlci1zcGFjaW5nOiAtLjAyZW07XG4gICAgfVxuXG4gICAgcCB7XG4gICAgICBtYXJnaW4tdG9wOiAyNHB4O1xuICAgICAgZm9udC13ZWlnaHQ6IDQwMDtcbiAgICAgIGZvbnQtc2l6ZTogMThweDtcbiAgICAgIHBhZGRpbmctcmlnaHQ6IDgwcHg7XG4gICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgIG1hcmdpbi1ib3R0b206IDIycHg7XG4gICAgICBsZXR0ZXItc3BhY2luZzogLS4wMmVtO1xuICAgIH1cblxuICAgIC5idG4ge1xuICAgICAgcGFkZGluZzogMTRweCAxNnB4IDEwcHg7XG4gICAgICBmb250LXNpemU6IDE0cHg7XG5cbiAgICAgIGltZyB7XG4gICAgICAgIHdpZHRoOiAxNnB4O1xuICAgICAgICBtYXJnaW4tcmlnaHQ6IDVweDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBAbWVkaWEgKG1heC13aWR0aDogJHNjcmVlbi1tZC1tYXgpICB7XG4gICAgICAuY2FyZCB7XG4gICAgICAgIGxlZnQ6IDA7XG4gICAgICB9XG4gICAgfVxuXG4gICAgQG1lZGlhIChtYXgtd2lkdGg6ICRzY3JlZW4tc20tbWF4KSAge1xuXG4gICAgICBpbWcge1xuICAgICAgICB3aWR0aDogMjMwcHg7XG4gICAgICB9XG5cbiAgICAgIGhncm91cCB7XG4gICAgICAgIHBhZGRpbmctdG9wOiA1MHB4O1xuICAgICAgICB3aWR0aDogY2FsYygxMDAlIC0gMjYwcHgpO1xuICAgICAgICBwYWRkaW5nLWJvdHRvbTogNjBweDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBAbWVkaWEgKG1heC13aWR0aDogJHNjcmVlbi14cy1tYXgpICB7XG4gICAgICAuY29udGFpbmVyIHtcbiAgICAgICAgcGFkZGluZy10b3A6IDIwMHB4O1xuICAgICAgfVxuXG4gICAgICAuY2FyZCB7XG4gICAgICAgIGxlZnQ6IGNhbGMoNTAlIC0gMTE1cHgpO1xuICAgICAgfVxuXG4gICAgICBoZ3JvdXAgIHtcbiAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbiIsIiNwYWdlLWVudGVycHJpc2UtdHJhaW5pbmcge1xuICAuYmFubmVyIHtcbiAgICBwYWRkaW5nLXRvcDogMTk4cHg7XG4gICAgcGFkZGluZy1ib3R0b206IDkwcHg7XG4gICAgZm9udC1mYW1pbHk6ICRmb250LWZhbWlseS1laW5hO1xuXG4gICAgaDEge1xuICAgICAgZm9udC1zaXplOiA0OHB4O1xuICAgICAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgICAgIGxldHRlci1zcGFjaW5nOiAtLjAxOGVtO1xuICAgIH1cblxuICAgIHAge1xuICAgICAgbWFyZ2luLXRvcDogMTVweDtcbiAgICAgIGZvbnQtc2l6ZTogMjBweDtcbiAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7XG4gICAgICBsZXR0ZXItc3BhY2luZzogLS4wM2VtO1xuICAgIH1cbiAgfVxuXG4gIG1haW4ge1xuICAgIG1heC13aWR0aDogNjMwcHg7XG5cbiAgICBoMiB7XG4gICAgICBmb250LXNpemU6IDI5cHg7XG4gICAgICBmb250LXdlaWdodDogNzAwO1xuICAgICAgbWFyZ2luLWJvdHRvbTogMThweDtcbiAgICAgIGxldHRlci1zcGFjaW5nOiAtLjA0ZW07XG4gICAgICBmb250LWZhbWlseTogJGZvbnQtZmFtaWx5LWVpbmE7XG4gICAgfVxuXG4gICAgaDMge1xuICAgICAgbWFyZ2luLXRvcDogMzlweDtcbiAgICAgIG1hcmdpbi1ib3R0b206IDIxcHg7XG4gICAgICBmb250LXNpemU6IDE5cHg7XG4gICAgICBmb250LXdlaWdodDogNzAwO1xuICAgICAgZm9udC1mYW1pbHk6ICRmb250LWZhbWlseS1laW5hO1xuICAgICAgbGV0dGVyLXNwYWNpbmc6IC0uMDA1ZW07XG4gICAgfVxuXG4gICAgcCB7XG4gICAgICBmb250LXNpemU6IDE3cHg7XG4gICAgICBmb250LXdlaWdodDogNTAwO1xuICAgICAgbGV0dGVyLXNwYWNpbmc6IC4wMmVtO1xuICAgICAgbGluZS1oZWlnaHQ6IDEuOWVtO1xuICAgICAgbWFyZ2luLWJvdHRvbTogMzJweDtcblxuICAgICAgKyB1bCB7XG4gICAgICAgIG1hcmdpbi10b3A6IC0xNnB4O1xuICAgICAgfVxuICAgIH1cblxuICAgIHVsIHtcbiAgICAgIHBhZGRpbmctbGVmdDogMjZweDtcbiAgICB9XG5cbiAgICBsaSB7XG4gICAgICBmb250LXNpemU6IDE4cHg7XG4gICAgICBmb250LXdlaWdodDogNTAwO1xuICAgICAgbGV0dGVyLXNwYWNpbmc6IC0uMDA1ZW07XG4gICAgICBsaW5lLWhlaWdodDogMS44ZW07XG4gICAgfVxuICB9XG5cbiAgYXNpZGUge1xuICAgIG1heC13aWR0aDogNTIwcHg7XG4gICAgbWFyZ2luLXRvcDogNDZweDtcbiAgICBtYXJnaW4tYm90dG9tOiA3OHB4O1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcblxuICAgIGgzIHtcbiAgICAgIGNvbG9yOiAjMzg4MGZmO1xuICAgICAgZm9udC1zaXplOiAyOHB4O1xuICAgICAgZm9udC13ZWlnaHQ6IDcwMDtcbiAgICAgIGZvbnQtZmFtaWx5OiAkZm9udC1mYW1pbHktZWluYTtcbiAgICAgIGxldHRlci1zcGFjaW5nOiAtLjAzZW07XG5cbiAgICAgIGkge1xuICAgICAgICBjb2xvcjogIzkzYTJiYztcbiAgICAgICAgZm9udC1zdHlsZTogbm9ybWFsO1xuICAgICAgfVxuICAgIH1cblxuICAgIC5jYXJkIHtcbiAgICAgIHBhZGRpbmc6IDMwcHggMzBweCAxcHg7XG4gICAgICB3aWR0aDogMTAwJTtcbiAgICAgIG1pbi1oZWlnaHQ6IDMwMHB4O1xuICAgICAgYmFja2dyb3VuZDogd2hpdGU7XG4gICAgICBib3JkZXItcmFkaXVzOiA4cHg7XG4gICAgICBtYXJnaW46IDMycHggYXV0bztcbiAgICAgIGJveC1zaGFkb3c6IDAgNnB4IDIwcHggcmdiYSgwLCAwLCAwLCAwLjIpO1xuICAgIH1cbiAgfVxufSIsIiNwYWdlLWdldHRpbmctc3RhcnRlZCB7XG4gIGZvbnQtZmFtaWx5OiAkZm9udC1mYW1pbHktZWluYTtcblxuICAuY3RhIHtcbiAgICAmLmdyYWRpZW50IHtcbiAgICAgIGJhY2tncm91bmQtaW1hZ2U6IGxpbmVhci1ncmFkaWVudCggOTBkZWcsIHJnYig1NiwxMjgsMjU1KSAxNSUsIHJnYigxMDMsMTY3LDI1NSkgMTAwJSk7XG4gICAgfVxuICAgIGhncm91cCB7XG4gICAgICBwYWRkaW5nLXRvcDogNjJweDtcbiAgICAgIHBhZGRpbmctYm90dG9tOiAwO1xuICAgICAgbWF4LXdpZHRoOiAxMDAlO1xuICAgIH1cblxuICAgIGgxLFxuICAgIGg0IHtcbiAgICAgIHRleHQtYWxpZ246IGxlZnQ7XG4gICAgICBtYXgtd2lkdGg6IDU0MHB4O1xuXG4gICAgICBAbWVkaWEgKG1heC13aWR0aDogJHNjcmVlbi14cy1tYXgpIHtcbiAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgICAgICBtYXJnaW4tbGVmdDogYXV0bztcbiAgICAgICAgbWFyZ2luLXJpZ2h0OiBhdXRvO1xuICAgICAgfVxuICAgIH1cblxuICAgIGgxIHtcbiAgICAgIGZvbnQtc2l6ZTogMzZweDtcbiAgICAgIGZvbnQtd2VpZ2h0OiA3MDA7XG4gICAgfVxuXG4gICAgaDQge1xuICAgICAgZm9udC1zaXplOiAyMHB4O1xuICAgICAgbGluZS1oZWlnaHQ6IDMycHg7XG4gICAgICBjb2xvcjogI0UzRTlGNDtcbiAgICAgIG1hcmdpbi1ib3R0b206IDYwcHg7XG4gICAgfVxuXG4gICAgQG1lZGlhIChtYXgtd2lkdGg6ICRzY3JlZW4teHMtbWF4KSB7XG4gICAgICBoZ3JvdXAge1xuICAgICAgICBwYWRkaW5nLXRvcDogNDJweDtcbiAgICAgIH1cblxuICAgICAgaDQge1xuICAgICAgICBtYXJnaW4tYm90dG9tOiAzMHB4O1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC5jcmFzaC1jb3Vyc2Uge1xuICAgIGZsb2F0OiByaWdodDtcbiAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgbWFyZ2luLXRvcDogLTMwcHg7XG4gICAgbWFyZ2luLWxlZnQ6IDMwcHg7XG4gICAgY29sb3I6IHdoaXRlO1xuICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbiAgICB0cmFuc2l0aW9uOiAuMnMgdHJhbnNmb3JtIGN1YmljLWJlemllciguMiwuNzgsLjY2LDEuNzMpO1xuXG4gICAgaW1nIHtcbiAgICAgIG1heC13aWR0aDogMzU4cHg7XG4gICAgfVxuXG4gICAgaDMge1xuICAgICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcbiAgICAgIGZvbnQtc2l6ZTogMTFweDtcbiAgICAgIGZvbnQtd2VpZ2h0OiA3MDA7XG4gICAgICBsZXR0ZXItc3BhY2luZzogMC4wOGVtO1xuICAgICAgY29sb3I6ICNmZmY7XG4gICAgICBtYXJnaW46IDA7XG4gICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtOHB4LCAtOTFweCkgcm90YXRlKDMuNzBkZWcpO1xuICAgIH1cblxuICAgICY6aG92ZXIge1xuICAgICAgdHJhbnNmb3JtOiBzY2FsZSgxLjAyLCAxLjAyKTtcbiAgICB9XG5cbiAgICBAbWVkaWEgKG1heC13aWR0aDogJHNjcmVlbi1tZC1taW4pIHtcbiAgICAgIG1hcmdpbi10b3A6IDA7XG5cbiAgICAgIGltZyB7XG4gICAgICAgIG1heC13aWR0aDogMzAwcHg7XG4gICAgICB9XG4gICAgfVxuXG4gICAgQG1lZGlhIChtYXgtd2lkdGg6ICRzY3JlZW4teHMtbWF4KSB7XG4gICAgICBmbG9hdDogbm9uZTtcbiAgICAgIG1hcmdpbi1sZWZ0OiAwO1xuICAgIH1cbiAgfVxuXG4gIC50YWItY29udGVudCB7XG4gICAgcGFkZGluZzogMTAwcHggMCAwO1xuXG4gICAgQG1lZGlhIChtYXgtd2lkdGg6ICRzY3JlZW4teHMtbWF4KSB7XG4gICAgICBwYWRkaW5nOiA4MHB4IDAgMDtcbiAgICB9XG5cbiAgICAuY29udGFpbmVyOmxhc3QtY2hpbGQge1xuICAgICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNlZGYyZjc7XG4gICAgICBwYWRkaW5nLWJvdHRvbTogMTIwcHg7XG5cbiAgICAgIEBtZWRpYSAobWF4LXdpZHRoOiAkc2NyZWVuLXNtLW1heCkge1xuICAgICAgICBwYWRkaW5nLWJvdHRvbTogNzBweDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAubG9nbyB7XG4gICAgICB3aWR0aDogMTU4cHg7XG4gICAgICBtYXJnaW4tYm90dG9tOiAyNHB4O1xuICAgIH1cblxuICAgIGhncm91cCB7XG4gICAgICBtYXJnaW46IDAgYXV0bztcbiAgICAgIG1heC13aWR0aDogNTgwcHg7XG4gICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgICBwYWRkaW5nLWJvdHRvbTogNjBweDtcblxuICAgICAgLmJ0biB7XG4gICAgICAgIG1hcmdpbi10b3A6IDMycHg7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaDEge1xuICAgICAgZm9udC1zaXplOiAyNHB4O1xuICAgICAgZm9udC13ZWlnaHQ6IDcwMDtcbiAgICAgIGxldHRlci1zcGFjaW5nOiAtMC4wMmVtO1xuICAgIH1cblxuICAgIGgyIHtcbiAgICAgIGZvbnQtc2l6ZTogMThweDtcbiAgICAgIGxpbmUtaGVpZ2h0OiAyOHB4O1xuICAgICAgbGV0dGVyLXNwYWNpbmc6IC0wLjAxMmVtO1xuICAgICAgbWFyZ2luLXRvcDogMTRweDtcbiAgICB9XG5cbiAgICBoMyB7XG4gICAgICBmb250LXNpemU6IDIwcHg7XG4gICAgICBmb250LXdlaWdodDogNjAwO1xuICAgICAgbGV0dGVyLXNwYWNpbmc6IC0wLjAyZW07XG5cbiAgICAgICYudGhpbiB7XG4gICAgICAgIGZvbnQtd2VpZ2h0OiA0MDA7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaDQge1xuICAgICAgZm9udC1zaXplOiAxNnB4O1xuICAgICAgbGluZS1oZWlnaHQ6IDIycHg7XG4gICAgICBjb2xvcjogIzBGMTYyMDtcbiAgICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XG4gICAgICBsZXR0ZXItc3BhY2luZzogMC4xZW07XG4gICAgICBmb250LXdlaWdodDogNzAwO1xuICAgIH1cblxuICAgIHAge1xuICAgICAgZm9udC1mYW1pbHk6ICRmb250LWZhbWlseS1pbnRlcjtcbiAgICAgIGZvbnQtc2l6ZTogMTVweDtcbiAgICAgIGxpbmUtaGVpZ2h0OiAyOHB4O1xuICAgICAgbGV0dGVyLXNwYWNpbmc6IC0wLjAxZW07XG4gICAgfVxuXG4gICAgY29kZSB7XG4gICAgICBmb250LXNpemU6IDE1cHg7XG4gICAgICBjb2xvcjogI0UwNUM3QjtcbiAgICAgIGJhY2tncm91bmQ6IG5vbmU7XG4gICAgICBmb250LXdlaWdodDogNTAwO1xuICAgIH1cblxuICAgIHByZSB7XG4gICAgICBib3JkZXI6IDA7XG4gICAgICBwYWRkaW5nOiAwO1xuICAgICAgbWFyZ2luOiAwO1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogI0Y1RjdGQTtcbiAgICAgIGJvcmRlci1yYWRpdXM6IDZweDtcblxuICAgICAgY29kZSB7XG4gICAgICAgIGNvbG9yOiAjMjcyQTJGO1xuICAgICAgICBwYWRkaW5nOiAxNnB4IDI0cHggMjBweDtcbiAgICAgICAgbWFyZ2luLXRvcDogNHB4O1xuICAgICAgfVxuICAgIH1cblxuICAgIC5pbWcge1xuICAgICAgd2lkdGg6IDEwMCU7XG4gICAgfVxuXG4gICAgb2wge1xuICAgICAgbWFyZ2luLWxlZnQ6IDA7XG4gICAgICBwYWRkaW5nOiAwO1xuICAgICAgbGlzdC1zdHlsZS10eXBlOiBub25lO1xuICAgIH1cblxuICAgIG9sIGxpIHtcbiAgICAgIGNvdW50ZXItaW5jcmVtZW50OiBzdGVwLWNvdW50ZXI7XG4gICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuXG4gICAgICBoMSB7XG4gICAgICAgIG1hcmdpbi10b3A6IDA7XG4gICAgICB9XG5cbiAgICAgICYgKyBsaSxcbiAgICAgICYgKyAuc3VwZXJjaGFyZ2Uge1xuICAgICAgICBtYXJnaW4tdG9wOiAxNDBweDtcblxuICAgICAgICBAbWVkaWEgKG1heC13aWR0aDogJHNjcmVlbi14cy1tYXgpIHtcbiAgICAgICAgICBtYXJnaW4tdG9wOiA2MHB4O1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgICY6OmJlZm9yZSB7XG4gICAgICAgIGNvbnRlbnQ6IGNvdW50ZXIoc3RlcC1jb3VudGVyKTtcbiAgICAgICAgbWFyZ2luLXJpZ2h0OiAxNHB4O1xuICAgICAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDtcbiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICAgIHdpZHRoOiAyNXB4O1xuICAgICAgICBmbGV4OiAwIDAgMjVweDtcbiAgICAgICAgaGVpZ2h0OiAyNXB4O1xuICAgICAgICBmb250LXNpemU6IDE0cHg7XG4gICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6ICMzODgwRkY7XG4gICAgICAgIGNvbG9yOiAjZmZmO1xuICAgICAgICBib3JkZXItcmFkaXVzOiAxMDBweDtcbiAgICAgIH1cblxuICAgICAgJiA+IGRpdiB7XG4gICAgICAgIGZsZXg6IDE7XG4gICAgICB9XG5cbiAgICAgIEBtZWRpYSAobWF4LXdpZHRoOiAkc2NyZWVuLXhzLW1heCkge1xuICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgICAgICBwYWRkaW5nLXRvcDogNDBweDtcblxuICAgICAgICAmOjpiZWZvcmUge1xuICAgICAgICAgIG1hcmdpbi1ib3R0b206IDE4cHg7XG4gICAgICAgICAgbWFyZ2luLXJpZ2h0OiAwO1xuICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgICBsZWZ0OiA1MCU7XG4gICAgICAgICAgdG9wOiAwO1xuICAgICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgtNTAlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGgxIHtcbiAgICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgICAgIH1cblxuICAgICAgICAmICsgLnN1cGVyY2hhcmdlIGxpOjpiZWZvcmUge1xuICAgICAgICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAuY29udGVudC1yb3cge1xuICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcbiAgICAgIG1hcmdpbi10b3A6IDI0cHg7XG4gICAgICBtYXJnaW4tbGVmdDogLTI0cHg7XG4gICAgICBtYXJnaW4tcmlnaHQ6IC0yNHB4O1xuXG4gICAgICAmICsgLmNvbnRlbnQtcm93IHtcbiAgICAgICAgbWFyZ2luLXRvcDogODBweDtcblxuICAgICAgICBAbWVkaWEgKG1heC13aWR0aDogJHNjcmVlbi14cy1tYXgpIHtcbiAgICAgICAgICBtYXJnaW4tdG9wOiAyNHB4O1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC5jb2wge1xuICAgICAgICBwYWRkaW5nLWxlZnQ6IDI0cHg7XG4gICAgICAgIHBhZGRpbmctcmlnaHQ6IDI0cHg7XG4gICAgICB9XG5cbiAgICAgIC5jb2wtLWhhbGYge1xuICAgICAgICBmbGV4OiAwIDAgNTAlO1xuICAgICAgfVxuXG4gICAgICAuY29sLS10aGlyZCB7XG4gICAgICAgIGZsZXg6IDAgMCAzMyU7XG4gICAgICB9XG5cbiAgICAgIC5jb2wtLWZ1bGwge1xuICAgICAgICBmbGV4OiAwIDAgMTAwJTtcbiAgICAgICAgbWFyZ2luLWxlZnQ6IDA7XG4gICAgICAgIG1hcmdpbi1yaWdodDogMDtcblxuICAgICAgfVxuXG4gICAgICAuY29sLS1jZW50ZXJlZCB7XG4gICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjtcblxuICAgICAgICBjb2RlIHtcbiAgICAgICAgICBmb250LXNpemU6IDE0cHg7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgQG1lZGlhIChtYXgtd2lkdGg6ICRzY3JlZW4tc20tbWluKSB7XG4gICAgICAgIG1hcmdpbi1sZWZ0OiAwO1xuICAgICAgICBtYXJnaW4tcmlnaHQ6IDA7XG4gICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG5cbiAgICAgICAgLmNvbCB7XG4gICAgICAgICAgZmxleDogMCAwIDEwMCU7XG4gICAgICAgICAgbWFyZ2luOiAwO1xuICAgICAgICB9XG4gICAgICAgIC5jb2wgKyAuY29sIHtcbiAgICAgICAgICBtYXJnaW4tdG9wOiAyNHB4O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLmZvcm0tcm93IHtcbiAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG5cbiAgICAgIC5mb3JtLXdyYXBwZXIge1xuICAgICAgICBmbGV4OiAwIDAgNjQwcHg7XG4gICAgICB9XG5cbiAgICAgIEBtZWRpYSAobWF4LXdpZHRoOiAkc2NyZWVuLXNtLW1heCkge1xuICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgIH1cbiAgICB9XG5cbiAgICAuZm9ybSB7XG4gICAgICBwYWRkaW5nOiA2NHB4O1xuICAgICAgYmFja2dyb3VuZDogI0ZGRkZGRjtcbiAgICAgIGJveC1zaGFkb3c6IDAgMTBweCAyMHB4IDAgcmdiYSgwLDEzLDM2LDAuMTYpLCAwIDJweCA4cHggMCByZ2JhKDAsMTMsMzYsMC4wOCk7XG4gICAgICBib3JkZXItcmFkaXVzOiAxNnB4O1xuXG4gICAgICBoMSB7XG4gICAgICAgIG1hcmdpbi10b3A6IDA7XG4gICAgICB9XG5cbiAgICAgIGgyIHtcbiAgICAgICAgbWFyZ2luLXRvcDogMTBweDtcbiAgICAgICAgbWFyZ2luLWJvdHRvbTogNDJweDtcbiAgICAgIH1cblxuICAgICAgbGFiZWwge1xuICAgICAgICBmb250LXNpemU6IDEzcHg7XG4gICAgICAgIGNvbG9yOiAjM0I0MzREO1xuICAgICAgICBsZXR0ZXItc3BhY2luZzogLTAuMDE1ZW07XG4gICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7XG4gICAgICAgIG1hcmdpbi1ib3R0b206IDNweDtcbiAgICAgIH1cblxuICAgICAgaW5wdXRbdHlwZT1cInRleHRcIl0sXG4gICAgICBpbnB1dFt0eXBlPVwicGFzc3dvcmRcIl0ge1xuICAgICAgICB0cmFuc2l0aW9uOiBib3JkZXIgMC4ycztcbiAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgICBiYWNrZ3JvdW5kOiAjRkZGRkZGO1xuICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAjQzNDRERGO1xuICAgICAgICBib3JkZXItcmFkaXVzOiA2cHg7XG4gICAgICAgIHBhZGRpbmc6IDExcHggMTZweDtcblxuICAgICAgICAmOmZvY3VzIHtcbiAgICAgICAgICBvdXRsaW5lOiBub25lICFpbXBvcnRhbnQ7XG4gICAgICAgICAgYm9yZGVyOiAxcHggc29saWQgIzM4ODBmZjtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAuZXJyb3IgaW5wdXRbdHlwZT1cInRleHRcIl0sXG4gICAgICAuZXJyb3IgaW5wdXRbdHlwZT1cInBhc3N3b3JkXCJdIHtcbiAgICAgICAgYm9yZGVyLWNvbG9yOiAjZjQ1NDU0O1xuICAgICAgfVxuXG4gICAgICAuY2hlY2tib3gtbGFiZWwge1xuICAgICAgICBjb2xvcjogIzcyN0E4NztcbiAgICAgICAgZm9udC1zaXplOiAxMXB4O1xuICAgICAgICBmb250LXdlaWdodDogNjAwO1xuICAgICAgICBtYXJnaW4tbGVmdDogNHB4O1xuICAgICAgfVxuXG4gICAgICAuZm9ybS1ncm91cCB7XG4gICAgICAgIG1hcmdpbi1ib3R0b206IDIwcHg7XG4gICAgICB9XG5cbiAgICAgIC5mb3JtLW1lc3NhZ2Uge1xuICAgICAgICBjb2xvcjogI2Y0NTQ1NDtcbiAgICAgICAgZm9udC13ZWlnaHQ6IDYwMDtcblxuICAgICAgICAmLS1zbWFsbCB7XG4gICAgICAgICAgZm9udC1zaXplOiAxMXB4O1xuICAgICAgICAgIGxpbmUtaGVpZ2h0OiAxNnB4O1xuICAgICAgICAgIG1hcmdpbi10b3A6IDZweDtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAuYnRuIHtcbiAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgfVxuXG4gICAgICAuZGlzY2xhaW1lciB7XG4gICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgICAgIGZvbnQtc2l6ZTogMTFweDtcbiAgICAgICAgY29sb3I6ICNhMGE5Yjc7XG4gICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7XG4gICAgICB9XG5cbiAgICAgIC53ZWxsIHtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gICAgICAgIHBhZGRpbmc6IDEycHg7XG4gICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAjRTFFNUVEO1xuICAgICAgICBib3JkZXItcmFkaXVzOiA2cHg7XG4gICAgICAgIG1hcmdpbi10b3A6IDE2cHg7XG4gICAgICAgIGNvbG9yOiAjM0I0MjREO1xuICAgICAgICBmb250LXNpemU6IDE0cHg7XG4gICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7XG4gICAgICB9XG5cbiAgICAgIC50ZXh0LWxpbmsge1xuICAgICAgICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTtcbiAgICAgICAgbWFyZ2luLWxlZnQ6IDhweDtcbiAgICAgIH1cblxuICAgICAgQG1lZGlhIChtYXgtd2lkdGg6ICRzY3JlZW4teHMtbWluKSB7XG4gICAgICAgIHBhZGRpbmc6IDM2cHggMjhweDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAuZXJyb3JsaXN0IHtcbiAgICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgICBjb2xvcjogI2Y0NTQ1NDtcbiAgICAgIGZvbnQtc2l6ZTogMTRweDtcbiAgICAgIGxpbmUtaGVpZ2h0OiAyMHB4O1xuICAgICAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgICAgIG1hcmdpbi1ib3R0b206IDI4cHg7XG5cbiAgICAgICYuZXJyb3Ige1xuICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgIH1cbiAgICB9XG5cbiAgICAuYmVuZWZpdHMge1xuICAgICAgbWF4LXdpZHRoOiAzOTBweDtcbiAgICAgIG1hcmdpbi1sZWZ0OiA0OHB4O1xuICAgICAgbWFyZ2luLXRvcDogNzZweDtcblxuXG4gICAgICAmID4gcCB7XG4gICAgICAgIGZvbnQtc2l6ZTogMTZweDtcbiAgICAgICAgbGluZS1oZWlnaHQ6IDI4cHg7XG4gICAgICAgIGNvbG9yOiAjNDI0QzVBO1xuICAgICAgICBtYXJnaW4tdG9wOiAxOHB4O1xuXG4gICAgICAgIGIge1xuICAgICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7XG4gICAgICAgICAgY29sb3I6ICM0MjRDNUE7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdWwge1xuICAgICAgICBsaXN0LXN0eWxlLXR5cGU6IG5vbmU7XG4gICAgICAgIG1hcmdpbjogNjBweCAwIDA7XG4gICAgICAgIHBhZGRpbmc6IDA7XG4gICAgICB9XG5cbiAgICAgIGg1IHtcbiAgICAgICAgY29sb3I6ICMxNjFBMUY7XG4gICAgICAgIGZvbnQtc2l6ZTogMTZweDtcbiAgICAgICAgbGluZS1oZWlnaHQ6IDIycHg7XG4gICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7XG4gICAgICAgIG1hcmdpbi1ib3R0b206IDRweDtcbiAgICAgIH1cblxuICAgICAgbGkge1xuICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICAgIHBhZGRpbmctbGVmdDogNDJweDtcblxuICAgICAgICBwIHtcbiAgICAgICAgICBmb250LXNpemU6IDE0cHg7XG4gICAgICAgICAgbGluZS1oZWlnaHQ6IDI0cHg7XG4gICAgICAgICAgY29sb3I6ICM1NDVDNkE7XG4gICAgICAgIH1cblxuICAgICAgICAmOjpiZWZvcmUge1xuICAgICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgICAgICAgICB3aWR0aDogMjRweDtcbiAgICAgICAgICBoZWlnaHQ6IDI0cHg7XG4gICAgICAgICAgZm9udC1mYW1pbHk6IElvbmljb25zO1xuICAgICAgICAgIGNvbnRlbnQ6ICdcXGYyYmMnO1xuICAgICAgICAgIGNvbG9yOiAjRDBFNkZGO1xuICAgICAgICAgIGJhY2tncm91bmQ6ICM2N0EyRkY7XG4gICAgICAgICAgYm9yZGVyLXJhZGl1czogMTAwcHg7XG4gICAgICAgICAgZm9udC1zaXplOiAxLjJlbTtcbiAgICAgICAgICBtYXJnaW4tbGVmdDogNXB4O1xuICAgICAgICAgIGZvbnQtd2VpZ2h0OiA0MDA7XG4gICAgICAgICAgbGluZS1oZWlnaHQ6IDFlbTtcbiAgICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICAgIHRvcDogMDtcbiAgICAgICAgICBsZWZ0OiAwO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGxpICsgbGkge1xuICAgICAgICBtYXJnaW4tdG9wOiA0MHB4O1xuICAgICAgfVxuXG4gICAgICBAbWVkaWEgKG1heC13aWR0aDogJHNjcmVlbi1tZC1tYXgpIHtcbiAgICAgICAgbWFyZ2luLXRvcDogMDtcblxuICAgICAgICB1bCB7XG4gICAgICAgICAgbWFyZ2luLXRvcDogNDBweDtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBAbWVkaWEgKG1heC13aWR0aDogJHNjcmVlbi1zbS1tYXgpIHtcbiAgICAgICAgbWFyZ2luLXRvcDogMTAwcHg7XG4gICAgICAgIG1hcmdpbi1sZWZ0OiAwO1xuICAgICAgICBtYXgtd2lkdGg6IDU5MHB4O1xuICAgICAgfVxuICAgIH1cblxuICAgIC5zaWduLXVwLWxvZ29zIHtcbiAgICAgIHBhZGRpbmc6IDEwMHB4IDAgNDBweDtcblxuICAgICAgLnNpZ24tdXAtbG9nb3NfX2NvbnRlbnQge1xuICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG4gICAgICAgIG1hcmdpbi10b3A6IDM0cHg7XG4gICAgICB9XG5cbiAgICAgIC5zaWduLXVwLWxvZ29zX19jb250ZW50ID4gZGl2IHtcbiAgICAgICAgYmFja2dyb3VuZC1pbWFnZTogdXJsKCcvaW1nL2dldHRpbmctc3RhcnRlZC9nZXR0aW5nLXN0YXJ0ZWQtc2lnbnVwLWxvZ28tc3ByaXRlLnBuZycpO1xuICAgICAgICBiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0O1xuICAgICAgICBiYWNrZ3JvdW5kLXNpemU6IDEyOHB4IDE4NnB4O1xuXG4gICAgICAgICYudGFyZ2V0IHtcbiAgICAgICAgICB3aWR0aDogMjJweDtcbiAgICAgICAgICBoZWlnaHQ6IDIycHg7XG4gICAgICAgICAgYmFja2dyb3VuZC1wb3NpdGlvbjogMCAwO1xuICAgICAgICB9XG5cbiAgICAgICAgJi52ZXJpem9uIHtcbiAgICAgICAgICB3aWR0aDogNzlweDtcbiAgICAgICAgICBoZWlnaHQ6IDE4cHg7XG4gICAgICAgICAgYmFja2dyb3VuZC1wb3NpdGlvbjogMCAtMjNweDtcbiAgICAgICAgfVxuXG4gICAgICAgICYuYW10cmFrIHtcbiAgICAgICAgICB3aWR0aDogNTJweDtcbiAgICAgICAgICBoZWlnaHQ6IDIycHg7XG4gICAgICAgICAgYmFja2dyb3VuZC1wb3NpdGlvbjogMCAtNDJweDtcbiAgICAgICAgfVxuXG4gICAgICAgICYubWFya2V0d2F0Y2gge1xuICAgICAgICAgIHdpZHRoOiAxMjlweDtcbiAgICAgICAgICBoZWlnaHQ6IDE4cHg7XG4gICAgICAgICAgYmFja2dyb3VuZC1wb3NpdGlvbjogMCAtNjVweDtcbiAgICAgICAgfVxuXG4gICAgICAgICYudXNhcm15IHtcbiAgICAgICAgICB3aWR0aDogNTJweDtcbiAgICAgICAgICBoZWlnaHQ6IDE4cHg7XG4gICAgICAgICAgYmFja2dyb3VuZC1wb3NpdGlvbjogMCAtODRweDtcbiAgICAgICAgfVxuXG4gICAgICAgICYuZ2Uge1xuICAgICAgICAgIHdpZHRoOiAyMnB4O1xuICAgICAgICAgIGhlaWdodDogMjJweDtcbiAgICAgICAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwIC0xMDNweDtcbiAgICAgICAgfVxuXG4gICAgICAgICYuY29tY2FzdCB7XG4gICAgICAgICAgd2lkdGg6IDgwcHg7XG4gICAgICAgICAgaGVpZ2h0OiAyMnB4O1xuICAgICAgICAgIGJhY2tncm91bmQtcG9zaXRpb246IDAgLTEyNnB4O1xuICAgICAgICB9XG5cbiAgICAgICAgJi5lYSB7XG4gICAgICAgICAgd2lkdGg6IDM3cHg7XG4gICAgICAgICAgaGVpZ2h0OiAxOHB4O1xuICAgICAgICAgIGJhY2tncm91bmQtcG9zaXRpb246IDAgLTE0OXB4O1xuICAgICAgICB9XG5cbiAgICAgICAgJi5pYm0ge1xuICAgICAgICAgIHdpZHRoOiA0OHB4O1xuICAgICAgICAgIGhlaWdodDogMThweDtcbiAgICAgICAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwIC0xNjhweDtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBAbWVkaWEgKG1heC13aWR0aDogJHNjcmVlbi1zbS1taW4pIHtcbiAgICAgICAgLnNpZ24tdXAtbG9nb3NfX2NvbnRlbnQge1xuICAgICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICAgICAgICAgIG1heC13aWR0aDogNTkwcHg7XG4gICAgICAgICAgbWFyZ2luOiAzNHB4IGF1dG8gMDtcbiAgICAgICAgICBmbGV4LXdyYXA6IHdyYXA7XG4gICAgICAgIH1cblxuICAgICAgICAuc2lnbi11cC1sb2dvc19fY29udGVudCA+IGRpdiB7XG4gICAgICAgICAgbWFyZ2luOiAwIDIwcHggMzBweDtcbiAgICAgICAgICBmbGV4OiAwIDAgYXV0bztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIC5jb250ZW50LXRpcCB7XG4gICAgICB0cmFuc2l0aW9uOiBib3JkZXIgMC4ycztcbiAgICAgIGNvbG9yOiAjODU5NEFGO1xuICAgICAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgICAgIGZvbnQtc2l6ZTogMTNweDtcbiAgICAgIGJvcmRlcjogMXB4IHNvbGlkICNFMUU1RUQ7XG4gICAgICBwYWRkaW5nOiAxMnB4IDE0cHg7XG4gICAgICBib3JkZXItcmFkaXVzOiA2cHg7XG4gICAgICBtYXJnaW4tdG9wOiA4cHg7XG4gICAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDtcbiAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG5cbiAgICAgICY6aG92ZXIge1xuICAgICAgICBib3JkZXItY29sb3I6ICNjNWNmZTI7XG4gICAgICB9XG5cbiAgICAgICY6OmJlZm9yZSB7XG4gICAgICAgIGNvbnRlbnQ6Jz8nO1xuICAgICAgICBiYWNrZ3JvdW5kOiAjQUJCOENFO1xuICAgICAgICBwYWRkaW5nOiAwIDJweDtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4O1xuICAgICAgICBjb2xvcjogI2ZmZjtcbiAgICAgICAgZm9udC1zaXplOiAxMXB4O1xuICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgICAgIHdpZHRoOiAxNHB4O1xuICAgICAgICBmbGV4OiAwIDAgMTRweDtcbiAgICAgICAgaGVpZ2h0OiAxNHB4O1xuICAgICAgICBsaW5lLWhlaWdodDogMTtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gICAgICAgIG1hcmdpbi1yaWdodDogMTJweDtcbiAgICAgIH1cblxuICAgICAgJjo6YWZ0ZXIge1xuICAgICAgICBmb250LWZhbWlseTogSW9uaWNvbnM7XG4gICAgICAgIGNvbnRlbnQ6ICdcXGYzZDEnO1xuICAgICAgICBmb250LXNpemU6IDE4cHg7XG4gICAgICAgIG1hcmdpbi1sZWZ0OiA4cHg7XG4gICAgICAgIGZvbnQtd2VpZ2h0OiA0MDA7XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxO1xuICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtMXB4KTtcbiAgICAgICAgdHJhbnNpdGlvbjogLjNzIHRyYW5zZm9ybTtcbiAgICAgICAgZmxleDogMCAwIDZweDtcbiAgICAgIH1cblxuICAgICAgJjpob3Zlcjo6YWZ0ZXIge1xuICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgycHgsIC0xcHgpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC5zdXBlcmNoYXJnZSB7XG4gICAgICBiYWNrZ3JvdW5kLWltYWdlOiBsaW5lYXItZ3JhZGllbnQoLTkwZGVnLCAjNzI0NUQ5IDAlLCAjNEM1QkUzIDUyJSwgIzI0NzJFRiAxMDAlKTtcbiAgICAgIGJveC1zaGFkb3c6IDAgMTBweCAyMHB4IDAgcmdiYSgwLDEzLDM2LDAuMTYpLCAwIDJweCA4cHggMCByZ2JhKDAsMTMsMzYsMC4wOCk7XG4gICAgICBib3JkZXItcmFkaXVzOiAxMXB4O1xuICAgICAgcGFkZGluZzogNDBweCA0MHB4IDA7XG4gICAgICBjb2xvcjogI2ZmZjtcbiAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcblxuICAgICAgJjo6YmVmb3JlIHtcbiAgICAgICAgY29udGVudDogJyc7XG4gICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgIHRvcDogLTM0cHg7XG4gICAgICAgIGxlZnQ6IDUwJTtcbiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC01MCUpO1xuICAgICAgICB3aWR0aDogNjhweDtcbiAgICAgICAgaGVpZ2h0OiA2OHB4O1xuICAgICAgICBiYWNrZ3JvdW5kOiB1cmwoJy9pbWcvZ2V0dGluZy1zdGFydGVkL3N1cGVyY2hhcmdlLWxvZ28ucG5nJykgbm8tcmVwZWF0O1xuICAgICAgICBiYWNrZ3JvdW5kLXNpemU6IDEwMCU7XG4gICAgICB9XG5cbiAgICAgIGxpOjpiZWZvcmUge1xuICAgICAgICBiYWNrZ3JvdW5kOiAjZmZmO1xuICAgICAgICBjb2xvcjogIzM4ODBGRjtcbiAgICAgIH1cblxuICAgICAgcHJlIHtcbiAgICAgICAgYmFja2dyb3VuZDogcmdiYSgwLDAsMCwwLjE4KTtcblxuICAgICAgICBjb2RlIHtcbiAgICAgICAgICBjb2xvcjogI2ZmZjtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAuaW1nIHtcbiAgICAgICAgbWFyZ2luLXRvcDogNDhweDtcbiAgICAgIH1cblxuICAgICAgQG1lZGlhIChtYXgtd2lkdGg6ICRzY3JlZW4teHMtbWF4KSB7XG4gICAgICAgIHBhZGRpbmc6IDIwcHggMjBweCAwO1xuXG4gICAgICAgIC5pbWcge1xuICAgICAgICAgIG1hcmdpbi10b3A6IDIwcHg7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAubGVhcm4tbW9yZSB7XG4gICAgICBwYWRkaW5nOiA1MHB4IDAgNjBweDtcbiAgICAgIHRleHQtYWxpZ246IGNlbnRlcjtcblxuICAgICAgcCB7XG4gICAgICAgIG1hcmdpbjogMDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAubmV4dC1zdGVwcyB7XG4gICAgICBib3JkZXItdG9wOiAxcHggc29saWQgI0VERURFRDtcblxuICAgICAgaGdyb3VwIHtcbiAgICAgICAgbWF4LXdpZHRoOiA5MDBweDtcbiAgICAgICAgcGFkZGluZy10b3A6IDEwMHB4O1xuICAgICAgICBwYWRkaW5nLWJvdHRvbTogMDtcbiAgICAgIH1cblxuICAgICAgLmNvbnRlbnQtcm93IHtcbiAgICAgICAgbWFyZ2luLXRvcDogNDRweDtcbiAgICAgICAgbWFyZ2luLWxlZnQ6IC0xMnB4O1xuICAgICAgICBtYXJnaW4tcmlnaHQ6IC0xMnB4O1xuXG4gICAgICAgIC5jb2wge1xuICAgICAgICAgIG1hcmdpbi1sZWZ0OiAxMnB4O1xuICAgICAgICAgIG1hcmdpbi1yaWdodDogMTJweDtcbiAgICAgICAgfVxuXG4gICAgICAgIC5jb250ZW50LWNhcmQge1xuICAgICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgICAgICBwYWRkaW5nLXJpZ2h0OiAxMDBweDtcbiAgICAgICAgICBvdmVyZmxvdzogaGlkZGVuO1xuXG4gICAgICAgICAgJjo6YWZ0ZXIge1xuICAgICAgICAgICAgYmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdDtcbiAgICAgICAgICAgIGJhY2tncm91bmQtcG9zaXRpb246IDAgMDtcbiAgICAgICAgICAgIGJhY2tncm91bmQtc2l6ZTogODBweDtcbiAgICAgICAgICAgIHdpZHRoOiA4MHB4O1xuICAgICAgICAgICAgaGVpZ2h0OiAxNDRweDtcbiAgICAgICAgICAgIGNvbnRlbnQ6ICcnO1xuICAgICAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgICAgICByaWdodDogMDtcbiAgICAgICAgICAgIHRvcDogY2FsYyg1MCUgLSA3MnB4KTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAmOm50aC1jaGlsZCgxKTo6YWZ0ZXIge1xuICAgICAgICAgICAgYmFja2dyb3VuZC1pbWFnZTogdXJsKC9pbWcvZ2V0dGluZy1zdGFydGVkL2lvbmljLW5hdGl2ZS1jYXJkLnBuZyk7XG4gICAgICAgICAgfVxuICAgICAgICAgICY6bnRoLWNoaWxkKDIpOjphZnRlciB7XG4gICAgICAgICAgICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoL2ltZy9nZXR0aW5nLXN0YXJ0ZWQvY29tcG9uZW50cy1jYXJkLnBuZyk7XG4gICAgICAgICAgfVxuICAgICAgICAgICY6bnRoLWNoaWxkKDMpOjphZnRlciB7XG4gICAgICAgICAgICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoL2ltZy9nZXR0aW5nLXN0YXJ0ZWQvdGhlbWluZy1jYXJkLnBuZyk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIEBtZWRpYSAobWF4LXdpZHRoOiAkc2NyZWVuLXNtLW1heCkge1xuICAgICAgICBoZ3JvdXAge1xuICAgICAgICAgIHBhZGRpbmctdG9wOiA0MnB4O1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIEBtZWRpYSAobWF4LXdpZHRoOiAkc2NyZWVuLW1kLW1heCkge1xuICAgICAgICAuY29udGVudC1yb3cge1xuICAgICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG5cbiAgICAgICAgICAuY29sIHtcbiAgICAgICAgICAgIGZsZXg6IDAgMCAxMDAlO1xuICAgICAgICAgICAgbWFyZ2luOiAxMnB4IDEycHggMDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAuY29udGVudC1jYXJkIHtcbiAgICAgIHRyYW5zaXRpb246IGJveC1zaGFkb3cgMC4zcztcbiAgICAgIGJhY2tncm91bmQ6ICNGRkZGRkY7XG4gICAgICBib3gtc2hhZG93OiAwIDhweCAxNnB4IDAgcmdiYSgwLDAsMCwuMSksIDAgMnB4IDRweCAwIHJnYmEoMCwwLDAsLjA4KTtcbiAgICAgIGJvcmRlci1yYWRpdXM6IDhweDtcbiAgICAgIHBhZGRpbmc6IDE2cHggOTJweCAxNnB4IDMycHg7XG5cbiAgICAgIGgzIHtcbiAgICAgICAgY29sb3I6ICMwRjE2MjBcbiAgICAgIH1cblxuICAgICAgcCB7XG4gICAgICAgIGNvbG9yOiAjNTQ1QzZBO1xuICAgICAgfVxuXG4gICAgICAmOmhvdmVyIHtcbiAgICAgICAgYm94LXNoYWRvdzogMCA1cHggMTBweCAwIHJnYmEoMCwxMywzNiwwLjA4KSwgMCAycHggOHB4IDAgcmdiYSgwLDEzLDM2LDAuMDgpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC5idG4ge1xuICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XG4gICAgZm9udC1zaXplOiAxM3B4O1xuICAgIGxpbmUtaGVpZ2h0OiAxO1xuICAgIGZvbnQtd2VpZ2h0OiA3MDA7XG4gICAgbGV0dGVyLXNwYWNpbmc6IDAuMDhlbTtcbiAgICBib3JkZXItcmFkaXVzOiA2cHg7XG4gICAgcGFkZGluZzogMjBweCAyMnB4O1xuICAgIGRpc3BsYXk6IGlubGluZS1mbGV4O1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG5cbiAgICBpIHtcbiAgICAgIHRyYW5zaXRpb246IHRyYW5zZm9ybSAwLjJzO1xuICAgICAgbWFyZ2luLWxlZnQ6IDEwcHg7XG4gICAgICBmb250LXNpemU6IDE4cHg7XG4gICAgfVxuXG4gICAgJjpob3ZlciBpIHtcbiAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlKDJweCwgMCk7XG4gICAgfVxuICB9XG5cbiAgLnNjcmVlbnNob3QtZ3JvdXAge1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcblxuICAgIGltZyB7XG4gICAgICBtYXgtd2lkdGg6IDEwMCU7XG4gICAgfVxuXG4gICAgaW1nOm5vdCg6Zmlyc3QtY2hpbGQpIHtcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgIHRvcDogMDtcbiAgICAgIGxlZnQ6IDA7XG4gICAgICBhbmltYXRpb246IDEwcyBjcm9zc0ZhZGVJbk91dCBpbmZpbml0ZTtcbiAgICB9XG4gIH1cbn1cbiIsIiNwYWdlLWdvLXB3YS1hcmNoaXRlY3RzLWd1aWRlLFxuI3BhZ2UtZ28td2h5LWh5YnJpZCB7XG4gIGZvbnQtZmFtaWx5OiAkZm9udC1mYW1pbHktaW50ZXI7XG5cbiAgaDEsXG4gIGgyLFxuICBoMyB7XG4gICAgZm9udC1mYW1pbHk6ICRmb250LWZhbWlseS1laW5hO1xuICB9XG5cbiAgLmJhbm5lciB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogI2Y2ZjhmYztcbiAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgI2U1ZTdlYjtcbiAgICBtYXJnaW4tdG9wOiAtMTM4cHg7XG4gICAgcGFkZGluZy10b3A6IDc4cHg7XG5cbiAgICBzdmcge1xuICAgICAgZmlsbDogIzRmNjM4NDtcbiAgICB9XG5cbiAgICBoZ3JvdXAge1xuICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICBhbGlnbi1pdGVtczogZmxleC1zdGFydDtcbiAgICAgIHRleHQtYWxpZ246IGxlZnQ7XG4gICAgICBwYWRkaW5nLXRvcDogODFweDtcbiAgICAgIHBhZGRpbmctYm90dG9tOiA3MnB4O1xuICAgICAgcGFkZGluZy1yaWdodDogNjMycHg7XG4gICAgfVxuXG4gICAgaDEge1xuICAgICAgY29sb3I6ICMyNDI4MmU7XG4gICAgICBmb250LXNpemU6IDM3cHg7XG4gICAgICBmb250LXdlaWdodDogNzAwO1xuICAgICAgbGV0dGVyLXNwYWNpbmc6IC0wLjAzNGVtO1xuICAgICAgbWFyZ2luOiA3N3B4IDAgMjJweDtcbiAgICB9XG5cbiAgICBwIHtcbiAgICAgIGZvbnQtc2l6ZTogMThweDtcbiAgICAgIGxpbmUtaGVpZ2h0OiAzMnB4O1xuICAgICAgZm9udC13ZWlnaHQ6IDQwMDtcbiAgICAgIGxldHRlci1zcGFjaW5nOiAtMC4wMmVtO1xuICAgICAgY29sb3I6ICM2MjZjN2Q7XG4gICAgICBtYXgtd2lkdGg6IDgwMHB4O1xuICAgIH1cbiAgfVxuXG4gIC5jb250ZW50LFxuICAuc2lnbnVwLWZvcm0ge1xuICAgIGZsZXg6IDEgMDtcbiAgfVxuXG4gIC5jb250ZW50IHtcbiAgICBwYWRkaW5nLXRvcDogMjc5cHg7XG4gICAgcGFkZGluZy1yaWdodDogMzBweDtcbiAgICBmb250LXNpemU6IDE0cHg7XG4gICAgY29sb3I6ICM0ZTU0NWU7XG4gICAgbGV0dGVyLXNwYWNpbmc6IC0wLjAyZW07XG4gICAgbWF4LXdpZHRoOiA1MjZweDtcbiAgfVxuXG4gIG1haW4ge1xuICAgIG1hcmdpbi10b3A6IC0yNDBweDtcbiAgICBwYWRkaW5nLWJvdHRvbTogMHB4O1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgZmxleC13cmFwOiB3cmFwO1xuICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcbiAgICBvdmVyZmxvdzogdmlzaWJsZTtcblxuICAgICY6OmJlZm9yZSxcbiAgICAmOjphZnRlciB7XG4gICAgICBkaXNwbGF5OiBub25lO1xuICAgIH1cblxuICAgIC5sZyB7XG4gICAgICBjb2xvcjogIzZlN2Y5OTtcbiAgICAgIGZvbnQtc2l6ZTogMThweDtcbiAgICAgIGxpbmUtaGVpZ2h0OiAzNnB4O1xuICAgICAgcGVyc3BlY3RpdmU6IDYwMHB4O1xuICAgICAgbWFyZ2luLWJvdHRvbTogNDhweDtcblxuICAgICAgJjo6YmVmb3JlIHtcbiAgICAgICAgYmFja2dyb3VuZC1pbWFnZTpcbiAgICAgICAgICB1cmwoJy9pbWcvYXJ0aWNsZXMvcHdhLWNvdmVyLXRpdGxlLnBuZycpLFxuICAgICAgICAgIHVybCgnL2ltZy9hcnRpY2xlcy9wd2EtY292ZXItYmcucG5nJyksXG4gICAgICAgICAgbGluZWFyLWdyYWRpZW50KDYwZGVnLCAjNzNjNWZmIDAsICMzODgwZmYgMTAwJSk7XG4gICAgICAgIGJhY2tncm91bmQtc2l6ZTogNjQlLCAxMDAlLCAxMDAlO1xuICAgICAgICBiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0LCByZXBlYXQsIHJlcGVhdDtcbiAgICAgICAgYmFja2dyb3VuZC1wb3NpdGlvbjogMjAlIDEyJSwgNTAlIDUwJSwgNTAlIDUwJTtcbiAgICAgICAgaGVpZ2h0OiAyODFweDtcbiAgICAgICAgd2lkdGg6IDE4NnB4O1xuICAgICAgICBjb250ZW50OiAnJztcbiAgICAgICAgZmxvYXQ6IGxlZnQ7XG4gICAgICAgIG1hcmdpbi1sZWZ0OiA2cHg7XG4gICAgICAgIG1hcmdpbi1yaWdodDogNjFweDtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogOHB4O1xuICAgICAgICB0cmFuc2Zvcm06IHJvdGF0ZVkoMTJkZWcpO1xuICAgICAgICBtYXJnaW4tdG9wOiAtNjRweDtcbiAgICAgICAgbWFyZ2luLWJvdHRvbTogMTJweDtcbiAgICAgICAgYm94LXNoYWRvdzogMCAycHggMTZweCByZ2JhKDAsIDAsIDAsIC4yKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBwIHtcbiAgICAgIGxldHRlci1zcGFjaW5nOiAtLjAyZW07XG4gICAgICBsaW5lLWhlaWdodDogMmVtO1xuICAgICAgZm9udC1zaXplOiAxNnB4O1xuICAgICAgbWFyZ2luLWJvdHRvbTogMTZweDtcbiAgICB9XG5cbiAgICB1bCB7XG4gICAgICBsaXN0LXN0eWxlLXR5cGU6IG5vbmU7XG4gICAgICBwYWRkaW5nOiAwO1xuICAgICAgbWFyZ2luOiAwIDAgNDZweDtcbiAgICB9XG5cbiAgICBsaSB7XG4gICAgICBwYWRkaW5nOiAwcHggMCAwIDIxcHg7XG4gICAgICBmb250LXNpemU6IDE2cHg7XG4gICAgICBsaW5lLWhlaWdodDogMzJweDtcbiAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgIGxldHRlci1zcGFjaW5nOiAtLjAyMWVtO1xuXG4gICAgICBzdHJvbmcge1xuICAgICAgICBmb250LXdlaWdodDogNTAwO1xuICAgICAgfVxuXG4gICAgICAmOmJlZm9yZSB7XG4gICAgICAgIGNvbnRlbnQ6ICfigKInO1xuICAgICAgICBvcGFjaXR5OiAwLjg7XG4gICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgbGVmdDogN3B4O1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC5zaWdudXAtZm9ybSxcbiAgLnRoYW5rLXlvdSBhc2lkZSB7XG4gICAgcGFkZGluZzogNDJweCA0OHB4IDQ4cHg7XG4gICAgYmFja2dyb3VuZDogd2hpdGU7XG4gICAgYm94LXNoYWRvdzogMCA4cHggNDhweCAwcHggcmdiYShibGFjaywgMC4yKTtcbiAgICBtYXgtd2lkdGg6IDUzNnB4O1xuICAgIGJvcmRlci1yYWRpdXM6IDEwcHg7XG5cbiAgICBoMyB7XG4gICAgICBtYXJnaW4tdG9wOiAwO1xuICAgICAgbWFyZ2luLWJvdHRvbTogMzBweDtcbiAgICAgIGZvbnQtd2VpZ2h0OiA3MDA7XG4gICAgICBmb250LXNpemU6IDI4cHg7XG4gICAgICBsaW5lLWhlaWdodDogMzZweDtcbiAgICAgIGxldHRlci1zcGFjaW5nOiAtMC4wM2VtO1xuICAgIH1cbiAgfVxuXG4gIC5jb21wYW55IHtcbiAgICBtYXJnaW46IDIzMnB4IDAgNjhweDtcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgd2lkdGg6IDEwMCU7XG5cbiAgICBoMiB7XG4gICAgICBjb2xvcjogIzdmOGZhYjtcbiAgICAgIG1hcmdpbjogMCBhdXRvO1xuICAgICAgZm9udC1zaXplOiAyOHB4O1xuICAgICAgbWF4LXdpZHRoOiA3NjBweDtcbiAgICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICAgIGxpbmUtaGVpZ2h0OiAxLjRlbTtcbiAgICAgIGxldHRlci1zcGFjaW5nOiAtLjA0ZW07XG4gICAgICBmb250LXdlaWdodDogNjAwO1xuICAgIH1cblxuICAgIHN0cm9uZyB7XG4gICAgICBjb2xvcjogIzEzMTkyNDtcbiAgICAgIGZvbnQtd2VpZ2h0OiA3MDA7XG4gICAgfVxuXG4gICAgLmxvZ29zIHtcbiAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICBmbGV4LXdyYXA6IHdyYXA7XG4gICAgICBtYXJnaW4tdG9wOiA1MXB4O1xuICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1ldmVubHk7XG5cbiAgICAgICY6OmJlZm9yZSxcbiAgICAgICY6OmFmdGVyIHtcbiAgICAgICAgYmFja2dyb3VuZDogdXJsKCcvaW1nL2hvbWVwYWdlL2VudGVycHJpc2UtbG9nb3MucG5nJykgMCAwIG5vLXJlcGVhdDtcbiAgICAgICAgYmFja2dyb3VuZC1zaXplOiAxMDAlO1xuICAgICAgICB3aWR0aDogNDk0cHg7XG4gICAgICAgIGhlaWdodDogNDJweDtcbiAgICAgICAgY29udGVudDogJyc7XG4gICAgICAgIG1heC13aWR0aDogMTAwJTtcbiAgICAgICAgbWFyZ2luLWJvdHRvbTogMzJweDtcbiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgICAgfVxuXG4gICAgICAmOjphZnRlciB7XG4gICAgICAgIGJhY2tncm91bmQtcG9zaXRpb246IDAgYm90dG9tO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC5nZXQtc3RhcnRlZCB7XG4gICAgYmFja2dyb3VuZDogI2YxZjRmODtcbiAgICBvdmVyZmxvdzogYXV0bztcblxuICAgIC5jb250YWluZXIge1xuICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICBtYXJnaW4tYm90dG9tOiAxMTBweDtcbiAgICAgIG1hcmdpbi10b3A6IDExMHB4O1xuICAgIH1cblxuICAgIGhncm91cCB7XG4gICAgICBsZXR0ZXItc3BhY2luZzogLS4wMjVlbTtcbiAgICAgIGZsZXgtZ3JvdzogMTtcbiAgICB9XG5cbiAgICBoMiB7XG4gICAgICBjb2xvcjogJGJsdWU7XG4gICAgICBmb250LXNpemU6IDI4cHg7XG4gICAgICBmb250LXdlaWdodDogNzAwO1xuICAgICAgbGV0dGVyLXNwYWNpbmc6IGluaGVyaXQ7XG4gICAgICBtYXJnaW46IDAgMCA1cHg7XG4gICAgfVxuXG4gICAgcCB7XG4gICAgICBjb2xvcjogIzI0MjgyZTtcbiAgICAgIGZvbnQtc2l6ZTogMjBweDtcbiAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7XG4gICAgICBtYXJnaW46IDA7XG4gICAgfVxuXG4gICAgLmJ0biB7XG4gICAgICBmb250LXNpemU6IDE2cHg7XG4gICAgICBmb250LXdlaWdodDogNzAwO1xuICAgIH1cbiAgfVxuXG4gIEBtZWRpYSAobWF4LXdpZHRoOiAkc2NyZWVuLXNtLW1heCkge1xuICAgIC5iYW5uZXIgaGdyb3VwIHtcbiAgICAgIHBhZGRpbmctcmlnaHQ6IDE1cHg7XG4gICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgfVxuXG4gICAgaDEge1xuICAgICAgbWFyZ2luLXJpZ2h0OiBhdXRvO1xuICAgICAgbWFyZ2luLWxlZnQ6IGF1dG87XG4gICAgfVxuXG4gICAgcC5sZyB7XG4gICAgICBtYXJnaW4tcmlnaHQ6IDI0cHg7XG4gICAgfVxuXG4gICAgbWFpbiB7XG4gICAgICBkaXNwbGF5OiBibG9jaztcbiAgICB9XG5cbiAgICAuY29udGVudCB7XG4gICAgICBtYXgtd2lkdGg6IDEwMCU7XG4gICAgICBwYWRkaW5nLXJpZ2h0OiAwO1xuICAgIH1cblxuICAgIC5zaWdudXAtZm9ybSB7XG4gICAgICBtYXgtd2lkdGg6IDEwMCU7XG4gICAgfVxuXG4gICAgLmNvbXBhbnkge1xuICAgICAgbWFyZ2luLXRvcDogMTI4cHg7XG4gICAgfVxuXG4gICAgLmdldC1zdGFydGVkIC5idG4gKyAuYnRuICB7XG4gICAgICBtYXJnaW4tdG9wOiA4cHg7XG4gICAgfVxuICB9XG5cbiAgLmJhbm5lciAudGhhbmsteW91IHtcbiAgICBtaW4taGVpZ2h0OiA0OTBweDtcbiAgfVxuXG4gIG1haW4udGhhbmsteW91IHtcbiAgICBtYXJnaW4tdG9wOiAtMzQwcHg7XG4gIH1cblxuICAudGhhbmsteW91IHtcbiAgICBhc2lkZSB7XG4gICAgICBtYXJnaW4tcmlnaHQ6IGF1dG87XG4gICAgICBtYXJnaW4tbGVmdDogYXV0bztcbiAgICAgIG1heC13aWR0aDogNTAwcHg7XG4gICAgfVxuXG4gICAgcDo6YmVmb3JlIHtcbiAgICAgIGNvbnRlbnQ6IG5vbmU7XG4gICAgfVxuXG4gICAgLmJ0biB7XG4gICAgICBkaXNwbGF5OiBibG9jaztcbiAgICB9XG5cbiAgICBwLmxnIHtcbiAgICAgIG1hcmdpbi1ib3R0b206IDA7XG4gICAgfVxuXG4gICAgLmFsc28ge1xuICAgICAgbWFyZ2luLXRvcDogMDtcbiAgICAgIG1hcmdpbi1ib3R0b206IDY0cHg7XG4gICAgfVxuXG4gICAgLmNvbXBhbnkge1xuICAgICAgbWFyZ2luLXRvcDogMTI4cHg7XG4gICAgfVxuICB9XG59XG4iLCIjcGFnZS1nby13aHktaHlicmlkIHtcbiAgbWFpbiAubGc6OmJlZm9yZSB7XG4gICAgYmFja2dyb3VuZC1pbWFnZTogdXJsKCcvaW1nL2FydGljbGVzL3doeS1oeWJyaWQtY292ZXIuanBnJyk7XG4gICAgYmFja2dyb3VuZC1zaXplOiAxMDAlO1xuICAgIGJhY2tncm91bmQtcG9zaXRpb246IDAgMDtcbiAgICBoZWlnaHQ6IDI0MnB4O1xuICB9XG59IiwiQGltcG9ydCAnLi4vdmFycyc7XG5AaW1wb3J0ICcuLi9taXhpbnMnO1xuXG4jaW9uaWMtc2xpZGVyIHtcbiAgLy8gYmFja2dyb3VuZDogIzAxMDUwYztcbiAgbWFyZ2luLXRvcDogLTcycHg7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICBtaW4taGVpZ2h0OiA4NjBweDtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuXG4gIFtzbG90PVwic2xpZGUtMFwiXSB7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gIH1cblxuICBbc2xvdD1cInNsaWRlLTFcIl0sXG4gIFtzbG90PVwic2xpZGUtMlwiXSB7XG4gICAgLy8gZGlzcGxheTogbm9uZTtcbiAgfVxuXG4gIFtzbG90Xj1cInNsaWRlLVwiXSB7XG4gICAgcGFkZGluZy10b3A6IDEwMHB4O1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICB0b3A6IDA7XG4gICAgcmlnaHQ6IDA7XG4gICAgYm90dG9tOiAwO1xuICAgIGxlZnQ6IDA7XG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcblxuICAgIGhncm91cCB7XG4gICAgICBjb2xvcjogd2hpdGU7XG4gICAgICBtYXgtd2lkdGg6IDUwMHB4O1xuICAgICAgbWFyZ2luLXRvcDogMTNweDtcbiAgICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICB9XG5cbiAgICBoMSB7XG4gICAgICBmb250LXNpemU6IDY0cHg7XG4gICAgICBsaW5lLWhlaWdodDogNzRweDtcbiAgICAgIG1hcmdpbi1ib3R0b206IDE2cHg7XG4gICAgICBsZXR0ZXItc3BhY2luZzogLS4wM2VtO1xuICAgIH1cblxuICAgIHAge1xuICAgICAgZm9udC1zaXplOiAyNHB4O1xuICAgICAgbGluZS1oZWlnaHQ6IDM2cHg7XG4gICAgICBmb250LWZhbWlseTogJGZvbnQtZmFtaWx5LWVpbmE7XG4gICAgICBsZXR0ZXItc3BhY2luZzogLTAuMDNlbTtcbiAgICAgIGNvbG9yOiAjZTRmMWZmO1xuICAgIH1cblxuICAgIC5idG4ge1xuICAgICAgZm9udC1zaXplOiAxNXB4O1xuICAgICAgZm9udC13ZWlnaHQ6IDcwMDtcbiAgICAgIG1hcmdpbi10b3A6IDE4cHg7XG4gICAgICBwYWRkaW5nOiAyMHB4IDIycHg7XG4gICAgICBtYXJnaW4tcmlnaHQ6IC00cHg7XG4gICAgICBsZXR0ZXItc3BhY2luZzogLjFlbTtcbiAgICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XG5cbiAgICAgIGlvbi1pY29uIHtcbiAgICAgICAgZm9udC1zaXplOiAxNnB4O1xuICAgICAgICBtYXJnaW4tbGVmdDogLTRweDtcbiAgICAgICAgdmVydGljYWwtYWxpZ246IC0ycHg7XG4gICAgICAgIHdpZHRoOiAxNnB4O1xuICAgICAgICBoZWlnaHQ6IDE2cHg7XG4gICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcblxuICAgICAgfVxuICAgIH1cblxuICAgIC52ZXJzaW9uLXRleHQge1xuICAgICAgY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgLjYpO1xuICAgICAgZm9udC13ZWlnaHQ6IDUwMDtcbiAgICAgIGZvbnQtc2l6ZTogMTFweDtcbiAgICAgIFxuICAgICAgYSB7XG4gICAgICAgIGNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIC42KTtcbiAgXG4gICAgICAgICY6aG92ZXIge1xuICAgICAgICAgIGNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIC44KTtcbiAgICAgICAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAjc2xpZGUtbGltaXRsZXNzIHtcbiAgICBiYWNrZ3JvdW5kOiAjNTQ4ZmZmIGxpbmVhci1ncmFkaWVudCh0byByaWdodCwgIzQyNzhmZiwgIzY3YTdmZik7XG4gICAgYmFja2dyb3VuZC1zaXplOiAxMDAlO1xuXG4gICAgLmJ0biB7XG4gICAgICBjb2xvcjogIzM4ODBmZjtcbiAgICB9XG5cbiAgICB1bCB7XG4gICAgICBwYWRkaW5nOiAwO1xuICAgICAgbWFyZ2luLXRvcDogOHB4O1xuICAgICAgbGlzdC1zdHlsZTogbm9uZTtcbiAgICB9XG5cbiAgICBsaSB7XG4gICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgICBtYXJnaW4tcmlnaHQ6IDhweDtcblxuICAgICAgJjpsYXN0LWNoaWxkIHtcbiAgICAgICAgbWFyZ2luLXJpZ2h0OiAwO1xuXG4gICAgICAgIGltZyB7XG4gICAgICAgICAgaGVpZ2h0OiAyM3B4O1xuICAgICAgICAgIHZlcnRpY2FsLWFsaWduOiAtOHB4O1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGltZyB7XG4gICAgICAgIGhlaWdodDogMTNweDtcbiAgICAgICAgb3BhY2l0eTogLjY7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLmdyYXBoaWNzIHtcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgIGJvdHRvbTogMDtcbiAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgbGVmdDogMDtcbiAgICAgIHBhZGRpbmc6IDA7XG4gICAgICBtYXJnaW46IDA7XG5cbiAgICAgIGxpIHtcbiAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICBvcGFjaXR5OiAwO1xuICAgICAgICBhbmltYXRpb246IGZhZGVJblVwIDFzIGVhc2UgZm9yd2FyZHM7XG5cbiAgICAgICAgJi5pcGhvbmUteCB7XG4gICAgICAgICAgYmFja2dyb3VuZDogdXJsKCcvaW1nL2hvbWVwYWdlL2hlcm8taXBob25lLXgucG5nJykgMCAwIG5vLXJlcGVhdDtcbiAgICAgICAgICBiYWNrZ3JvdW5kLXNpemU6IDEwMCU7XG4gICAgICAgICAgYm90dG9tOiAtNjNweDtcbiAgICAgICAgICBsZWZ0OiAtMTkxcHg7XG4gICAgICAgICAgd2lkdGg6IDQwMHB4O1xuICAgICAgICAgIGhlaWdodDogMzA2cHg7XG4gICAgICAgICAgYW5pbWF0aW9uLWRlbGF5OiAuOHM7XG4gICAgICAgIH1cblxuICAgICAgICAmLmlwaG9uZS14cy1tYXgge1xuICAgICAgICAgIGJhY2tncm91bmQ6IHVybCgnL2ltZy9ob21lcGFnZS9oZXJvLWlwaG9uZS14cy1tYXgucG5nJykgMCAwIG5vLXJlcGVhdDtcbiAgICAgICAgICBiYWNrZ3JvdW5kLXNpemU6IDEwMCU7XG4gICAgICAgICAgYm90dG9tOiAtMzlweDtcbiAgICAgICAgICBsZWZ0OiAxNzBweDtcbiAgICAgICAgICB3aWR0aDogNDkwcHg7XG4gICAgICAgICAgaGVpZ2h0OiAzNzhweDtcbiAgICAgICAgICBhbmltYXRpb24tZGVsYXk6IC45cztcbiAgICAgICAgfVxuXG4gICAgICAgICYucGl4ZWwtMyB7XG4gICAgICAgICAgYmFja2dyb3VuZDogdXJsKCcvaW1nL2hvbWVwYWdlL2hlcm8tZ29vZ2xlLXBpeGVsMy5wbmcnKSAwIDAgbm8tcmVwZWF0O1xuICAgICAgICAgIGJhY2tncm91bmQtc2l6ZTogMTAwJTtcbiAgICAgICAgICBib3R0b206IC00MHB4O1xuICAgICAgICAgIGxlZnQ6IDYwN3B4O1xuICAgICAgICAgIHdpZHRoOiA0OTBweDtcbiAgICAgICAgICBoZWlnaHQ6IDQwMHB4O1xuICAgICAgICAgIGFuaW1hdGlvbi1kZWxheTogMXM7XG4gICAgICAgIH1cblxuICAgICAgICAmLmdhbGF4eSB7XG4gICAgICAgICAgYmFja2dyb3VuZDogdXJsKCcvaW1nL2hvbWVwYWdlL2hlcm8tYW5kcm9pZC1nYWxheHkucG5nJykgMCAwIG5vLXJlcGVhdDtcbiAgICAgICAgICBiYWNrZ3JvdW5kLXNpemU6IDEwMCU7XG4gICAgICAgICAgYm90dG9tOiAtNDFweDtcbiAgICAgICAgICBsZWZ0OiAxMDYzcHg7XG4gICAgICAgICAgd2lkdGg6IDQ1MHB4O1xuICAgICAgICAgIGhlaWdodDogMzU2cHg7XG4gICAgICAgICAgYW5pbWF0aW9uLWRlbGF5OiAxLjFzO1xuICAgICAgICB9XG5cbiAgICAgICAgJi5pcGFkIHtcbiAgICAgICAgICBiYWNrZ3JvdW5kOiB1cmwoJy9pbWcvaG9tZXBhZ2UvaGVyby1pcGFkLnBuZycpIDAgMCBuby1yZXBlYXQ7XG4gICAgICAgICAgYmFja2dyb3VuZC1zaXplOiAxMDAlO1xuICAgICAgICAgIGJvdHRvbTogLTQ0cHg7XG4gICAgICAgICAgbGVmdDogMTQ4NHB4O1xuICAgICAgICAgIHdpZHRoOiA2MTBweDtcbiAgICAgICAgICBoZWlnaHQ6IDUyNHB4O1xuICAgICAgICAgIGFuaW1hdGlvbi1kZWxheTogMS4ycztcbiAgICAgICAgfVxuXG4gICAgICAgICYubWFjYm9vayB7XG4gICAgICAgICAgYmFja2dyb3VuZDogdXJsKCcvaW1nL2hvbWVwYWdlL2hlcm8tbWFjYm9vay5wbmcnKSAwIDAgbm8tcmVwZWF0O1xuICAgICAgICAgIGJhY2tncm91bmQtc2l6ZTogMTAwJTtcbiAgICAgICAgICBib3R0b206IC02M3B4O1xuICAgICAgICAgIGxlZnQ6IDIwNjFweDtcbiAgICAgICAgICB3aWR0aDogMTQ3MHB4O1xuICAgICAgICAgIGhlaWdodDogNTcwcHg7XG4gICAgICAgICAgYW5pbWF0aW9uLWRlbGF5OiAxLjNzO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgI3NsaWRlLXY0IHtcbiAgICBiYWNrZ3JvdW5kOiAjMDEwNTBjO1xuXG4gICAgJjo6YmVmb3JlIHtcbiAgICAgIGJhY2tncm91bmQ6IHVybCgnL2ltZy9ob21lcGFnZS9iZy1waG9uZS5wbmcnKSBuby1yZXBlYXQgNTAlIDUwJTtcbiAgICAgIGJhY2tncm91bmQtc2l6ZTogY292ZXI7XG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICB0b3A6IDA7XG4gICAgICByaWdodDogMDtcbiAgICAgIGJvdHRvbTogMDtcbiAgICAgIGxlZnQ6IDA7XG4gICAgICBvcGFjaXR5OiAwO1xuICAgICAgY29udGVudDogJyc7XG4gICAgfVxuXG4gICAgaGdyb3VwIHtcbiAgICAgIHBhZGRpbmctdG9wOiA1OHB4O1xuICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICAgbWF4LXdpZHRoOiA2MjBweDtcblxuICAgICAgaW1nIHtcbiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgICAgICB3aWR0aDogNDhweDtcbiAgICAgICAgaGVpZ2h0OiA0OHB4O1xuICAgICAgfVxuXG4gICAgICBoNCB7XG4gICAgICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XG4gICAgICAgIGxldHRlci1zcGFjaW5nOiAuMWVtO1xuICAgICAgICBmb250LWZhbWlseTogJGZvbnQtZmFtaWx5LW1vbm9zcGFjZTtcbiAgICAgICAgZm9udC1zaXplOiAxMnB4O1xuICAgICAgICBmb250LXdlaWdodDogNDAwO1xuICAgICAgICBtYXJnaW4tdG9wOiAxNXB4O1xuICAgICAgICBtYXJnaW4tYm90dG9tOiAzM3B4O1xuICAgICAgfVxuXG4gICAgICBoMSB7XG4gICAgICAgIGxldHRlci1zcGFjaW5nOiAtLjAyZW07XG4gICAgICB9XG5cbiAgICAgIHAge1xuICAgICAgICBsaW5lLWhlaWdodDogMzJweDtcbiAgICAgICAgbWFyZ2luLXRvcDogMThweDtcbiAgICAgIH1cblxuICAgICAgLmJ0biB7XG4gICAgICAgIG1hcmdpbi10b3A6IDI3cHg7XG4gICAgICAgIGxldHRlci1zcGFjaW5nOiAuMDhlbTtcblxuICAgICAgICAmLndoaXRlIHtcbiAgICAgICAgICBjb2xvcjogIzEzMWEyNjtcbiAgICAgICAgICBtYXJnaW4tcmlnaHQ6IDhweDtcbiAgICAgICAgfVxuXG4gICAgICAgICYuZGFyayB7XG4gICAgICAgICAgYmFja2dyb3VuZDogIzM0M2Q0ZDtcblxuICAgICAgICAgICY6aG92ZXIge1xuICAgICAgICAgICAgYmFja2dyb3VuZDogbGlnaHRlbigjMzQzZDRkLCA1KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpb24taWNvbiB7XG4gICAgICAgICAgd2lkdGg6IDE2cHg7XG4gICAgICAgICAgaGVpZ2h0OiAxNnB4O1xuICAgICAgICAgIG1hcmdpbi1sZWZ0OiA4cHg7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAuZmVhdHVyZXMge1xuICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgYm90dG9tOiAzNXB4O1xuICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICBsZWZ0OiAwO1xuXG4gICAgICB1bCB7XG4gICAgICAgIEBpbmNsdWRlIGZsZXgtbGlzdCgpO1xuICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG4gICAgICAgIHBhZGRpbmc6IDA7XG5cbiAgICAgICAgJjo6YmVmb3JlLFxuICAgICAgICAmOjphZnRlciB7XG4gICAgICAgICAgZGlzcGxheTogbm9uZTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBsaSB7XG4gICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgICAgcGFkZGluZy10b3A6IDY1cHg7XG4gICAgICAgIHdpZHRoOiAxNDVweDtcbiAgICAgICAgY29sb3I6ICM4YTk0YTM7XG4gICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICAgICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XG4gICAgICAgIGZvbnQtc2l6ZTogMTJweDtcbiAgICAgICAgbGluZS1oZWlnaHQ6IDIwcHg7XG4gICAgICAgIG1hcmdpbi1ib3R0b206IDMycHg7XG4gICAgICAgIG9wYWNpdHk6IDA7XG5cbiAgICAgICAgJjo6YmVmb3JlIHtcbiAgICAgICAgICBiYWNrZ3JvdW5kOiB1cmwoJy9pbWcvaG9tZXBhZ2UvdjQtZmVhdHVyZS1pY29ucy5wbmcnKSAwIDAgbm8tcmVwZWF0O1xuICAgICAgICAgIGJhY2tncm91bmQtc2l6ZTogY292ZXI7XG4gICAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICAgIHRvcDogMDtcbiAgICAgICAgICBsZWZ0OiBjYWxjKDUwJSAtIDI0cHgpO1xuICAgICAgICAgIGhlaWdodDogNDhweDtcbiAgICAgICAgICB3aWR0aDogNDhweDtcbiAgICAgICAgICBjb250ZW50OiAnJztcbiAgICAgICAgfVxuXG4gICAgICAgIEBpbmNsdWRlIHNwcml0ZShcbiAgICAgICAgICAncGVyZm9ybWFuY2UnXG4gICAgICAgICAgJ3RoZW1pbmcnXG4gICAgICAgICAgJ3N0YW5kYXJkcydcbiAgICAgICAgICAnY29tcGF0aWJsZSdcbiAgICAgICAgICAnZG9jcydcbiAgICAgICAgLCA0OCk7XG4gICAgICB9XG5cbiAgICAgIEBtZWRpYSAobWF4LXdpZHRoOiAkc2NyZWVuLXNtLW1heCkge1xuICAgICAgICBib3R0b206IDA7XG5cbiAgICAgICAgdWwge1xuICAgICAgICAgIG1heC13aWR0aDogNjAwcHg7XG4gICAgICAgICAgbWFyZ2luOiAwIGF1dG87XG4gICAgICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1hcm91bmQ7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgQG1lZGlhIChtYXgtd2lkdGg6IDU3MHB4KSB7XG4gICAgICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gZmFkZSBpbiBhbmltYXRpb25zXG4gICAgJjo6YmVmb3JlIHtcbiAgICAgIGFuaW1hdGlvbjogZmFkZUluVXAgMS42cyAuOHMgZWFzZSBmb3J3YXJkcztcbiAgICB9XG5cbiAgICAuZmVhdHVyZXMgbGkge1xuICAgICAgYW5pbWF0aW9uOiBmYWRlSW5VcCAxcyAuMXMgZWFzZSBmb3J3YXJkcztcblxuICAgICAgJjpudGgtY2hpbGQoMikgeyAgYW5pbWF0aW9uLWRlbGF5OiAuMnM7IH1cbiAgICAgICY6bnRoLWNoaWxkKDMpIHsgIGFuaW1hdGlvbi1kZWxheTogLjNzOyB9XG4gICAgICAmOm50aC1jaGlsZCg0KSB7ICBhbmltYXRpb24tZGVsYXk6IC40czsgfVxuICAgICAgJjpudGgtY2hpbGQoNSkgeyAgYW5pbWF0aW9uLWRlbGF5OiAuNXM7IH1cbiAgICB9XG4gIH1cblxuICAjc2xpZGUtb25lLWFueSB7XG4gICAgYmFja2dyb3VuZDogd2hpdGU7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIG1pbi1oZWlnaHQ6IDg0MHB4O1xuXG4gICAgLy8gJjo6YmVmb3JlIHtcbiAgICAvLyAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAvLyAgIGNvbnRlbnQ6ICcnO1xuICAgIC8vICAgZGlzcGxheTogYmxvY2s7XG4gICAgLy8gICB3aWR0aDogMXZ3O1xuICAgIC8vICAgbGVmdDogMXZ3O1xuICAgIC8vICAgcmlnaHQ6IDF2dztcbiAgICAvLyB9XG5cbiAgICAubm90aWZpY2F0aW9uIHtcbiAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICAgIGJhY2tncm91bmQ6ICNGNkY4RkI7XG4gICAgICBmb250LXNpemU6IDExcHg7XG4gICAgICBsaW5lLWhlaWdodDogMTZweDtcbiAgICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICAgIGxldHRlci1zcGFjaW5nOiAwLjFlbTtcbiAgICAgIHBhZGRpbmc6IDdweCAxNXB4IDdweDtcblxuICAgICAgc3Ryb25nIHtcbiAgICAgICAgY29sb3I6ICMxQTIzMkY7XG4gICAgICB9XG5cbiAgICAgICY6OmFmdGVyIHtcbiAgICAgICAgY29udGVudDogJz4nO1xuICAgICAgfVxuXG4gICAgICBAbWVkaWEgKG1heC13aWR0aDogJHNjcmVlbi14cy1tYXgpIHtcbiAgICAgICAgZGlzcGxheTogbm9uZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBoZ3JvdXAge1xuICAgICAgbWF4LXdpZHRoOiA0NjRweDtcbiAgICAgIGRpc3BsYXk6IGJsb2NrOyBcbiAgICAgIG1hcmdpbi10b3A6IDU2cHg7XG4gICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICB6LWluZGV4OiAxO1xuXG4gICAgICBoMSB7XG4gICAgICAgIGZvbnQtc2l6ZTogNjRweDtcbiAgICAgICAgbGluZS1oZWlnaHQ6IDY0cHg7XG4gICAgICAgIGNvbG9yOiAjMDIwODE0O1xuICAgICAgICBsZXR0ZXItc3BhY2luZzogLS4wNGVtO1xuICAgICAgICBtYXJnaW4tYm90dG9tOiA3cHg7XG4gICAgICB9XG5cbiAgICAgIHAge1xuICAgICAgICBmb250LXNpemU6IDIycHg7XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAzN3B4O1xuICAgICAgICBjb2xvcjogcmdiYSgjNUI3MDhCLCAuOSk7XG4gICAgICAgIGxldHRlci1zcGFjaW5nOiAtLjA0ZW07XG4gICAgICB9XG5cbiAgICAgIC5idG4ge1xuICAgICAgICBiYWNrZ3JvdW5kOiAjNEQ4REZGO1xuICAgICAgICBib3JkZXItcmFkaXVzOiAxMHB4O1xuICAgICAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xuICAgICAgICBtYXJnaW4tdG9wOiAxMnB4O1xuICAgICAgICBmb250LXNpemU6IDE1cHg7XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAyMXB4O1xuICAgICAgICBwYWRkaW5nOiAxNnB4IDE2cHggMTJweDtcbiAgICAgICAgbGV0dGVyLXNwYWNpbmc6IDAuMDhlbTtcblxuICAgICAgICAmOmhvdmVyIHtcbiAgICAgICAgICBiYWNrZ3JvdW5kOiBsaWdodGVuKCM0RDhERkYsIDUpO1xuICAgICAgICB9XG5cbiAgICAgICAgJjphY3RpdmUge1xuICAgICAgICAgIGJhY2tncm91bmQ6ICM0RDhERkY7XG4gICAgICAgIH1cblxuICAgICAgICBpbWcge1xuICAgICAgICAgIG1hcmdpbi1sZWZ0OiAycHg7XG4gICAgICAgICAgdmVydGljYWwtYWxpZ246IDA7XG4gICAgICAgICAgbWFyZ2luLXJpZ2h0OiAycHg7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgc21hbGwge1xuICAgICAgICBmb250LXNpemU6IDExcHg7XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAyMXB4O1xuICAgICAgICBsZXR0ZXItc3BhY2luZzogLTAuMDJlbTtcbiAgICAgICAgY29sb3I6ICNCMkJFQ0Q7XG5cbiAgICAgICAgYSB7XG4gICAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICAgICAgIGNvbG9yOiAjOTJhMGIzO1xuXG4gICAgICAgICAgJjo6YWZ0ZXIge1xuICAgICAgICAgICAgY29udGVudDogJyc7XG4gICAgICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgICAgICBsZWZ0OiAwO1xuICAgICAgICAgICAgcmlnaHQ6IDA7XG4gICAgICAgICAgICBib3R0b206IC0ycHg7XG4gICAgICAgICAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgI2RlZTNlYTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAmOmhvdmVyIHtcbiAgICAgICAgICAgIGNvbG9yOiAkYmx1ZTtcblxuICAgICAgICAgICAgJjo6YWZ0ZXIge1xuICAgICAgICAgICAgICBib3JkZXItYm90dG9tLWNvbG9yOiAkYmx1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgQG1lZGlhIChtYXgtd2lkdGg6ICRzY3JlZW4teHMtbWF4KSB7XG4gICAgICAgIG1heC13aWR0aDogMTAwJTtcbiAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgICAgICBtYXJnaW4tdG9wOiA2NHB4O1xuICAgICAgfVxuICAgIH1cblxuICAgIC5ncmFwaGljIHtcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgIHJpZ2h0OiAyMHB4O1xuICAgICAgdG9wOiAxMjBweDtcbiAgICAgIGhlaWdodDogNTYzcHg7XG4gICAgICB3aWR0aDogNTkwcHg7XG5cbiAgICAgIEBtZWRpYSAobWF4LXdpZHRoOiAkc2NyZWVuLW1kLW1heCkge1xuICAgICAgICB0b3A6IDEyOHB4O1xuICAgICAgICByaWdodDogLTY0cHg7XG4gICAgICB9XG5cbiAgICAgIEBtZWRpYSAobWF4LXdpZHRoOiAkc2NyZWVuLXNtLW1heCkge1xuICAgICAgICB3aWR0aDogMzAycHg7XG4gICAgICAgIGhlaWdodDogYXV0bztcbiAgICAgICAgdG9wOiAxODBweDtcbiAgICAgIH1cblxuICAgICAgQG1lZGlhIChtYXgtd2lkdGg6ICRzY3JlZW4teHMtbWF4KSB7XG4gICAgICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLnN0YXRzIHtcbiAgICAgIHBhZGRpbmc6IDA7XG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICBib3R0b206IDIxcHg7XG4gICAgICBsZWZ0OiAwO1xuICAgICAgbGlzdC1zdHlsZTogbm9uZTtcbiAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICBmbGV4LXdyYXA6IHdyYXA7XG4gIFxuICAgICAgYSB7XG4gICAgICAgIGZvbnQtc2l6ZTogMTRweDtcbiAgICAgICAgbGluZS1oZWlnaHQ6IDE3cHg7XG4gICAgICAgIGxldHRlci1zcGFjaW5nOiAtMC4wMmVtO1xuICAgICAgICBjb2xvcjogIzkyQTFCMztcbiAgICAgICAgcGFkZGluZzogMCAxOHB4O1xuICAgICAgICB0cmFuc2l0aW9uOiAuM3MgY29sb3I7XG4gIFxuICAgICAgICBzdmcge1xuICAgICAgICAgIHZlcnRpY2FsLWFsaWduOiAtM3B4O1xuXG4gICAgICAgICAgcGF0aCB7XG4gICAgICAgICAgICB0cmFuc2l0aW9uOiAuM3MgZmlsbDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgXG4gICAgICAgICY6aG92ZXIge1xuICAgICAgICAgIGNvbG9yOiBkYXJrZW4oIzkyQTFCMywgMTApO1xuICBcbiAgICAgICAgICBzdmcgcGF0aCB7XG4gICAgICAgICAgICBmaWxsOiBkYXJrZW4oIzkyQTFCMywgMTApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBAbWVkaWEgKG1heC13aWR0aDogJHNjcmVlbi14cy1tYXgpIHtcbiAgICAgICAgbGVmdDogY2FsYyg1MCUgLSAxNDBweCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaW9uaWMtbmV3c2xldHRlci1zaWdudXAge1xuICAgICAgd2lkdGg6IDQwMHB4O1xuICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgYm90dG9tOiAyOXB4O1xuICAgICAgcmlnaHQ6IDIwcHg7XG4gICAgICBtYXgtd2lkdGg6IGNhbGMoMTAwJSAtIDMwcHgpO1xuICBcbiAgICAgIEBtZWRpYSAobWF4LXdpZHRoOiAkc2NyZWVuLXhzLW1heCkge1xuICAgICAgICBib3R0b206IC0yNnB4O1xuICAgICAgICByaWdodDogYXV0bztcbiAgICAgICAgbGVmdDogY2FsYyg1MCUgLSAyMDBweCk7XG4gICAgICB9XG5cbiAgICAgIEBtZWRpYSAobWF4LXdpZHRoOiA0NjBweCkge1xuICAgICAgICBsZWZ0OiAxNXB4O1xuICAgICAgfVxuICAgIH1cblxuICAgIEBtZWRpYSAobWF4LXdpZHRoOiAkc2NyZWVuLXNtLW1heCkge1xuICAgICAgcGFkZGluZy10b3A6IDEwMHB4O1xuICAgICAgcGFkZGluZy1ib3R0b206IDEwMHB4O1xuICAgICAgbWluLWhlaWdodDogMDtcbiAgICB9XG5cbiAgICBAbWVkaWEgKG1heC13aWR0aDogJHNjcmVlbi14cy1tYXgpIHtcbiAgICAgIHBhZGRpbmctdG9wOiAxMDBweDtcbiAgICAgIHBhZGRpbmctYm90dG9tOiAxMDBweDtcbiAgICAgIG1pbi1oZWlnaHQ6IDA7XG4gICAgfVxuICB9XG5cbiAgQG1lZGlhIChtYXgtd2lkdGg6ICRzY3JlZW4tc20tbWF4KSB7XG4gICAgbWluLWhlaWdodDogMDtcbiAgfVxufVxuXG4jcGFnZS1ob21lIHtcbiAgI3VzZWQtYnkge1xuICAgIGJvcmRlci10b3A6IDFweCAjRUZGM0Y4IHNvbGlkO1xuICAgIHBhZGRpbmctdG9wOiA2MHB4O1xuICAgIHBhZGRpbmctYm90dG9tOiA1OHB4O1xuICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjRUZGM0Y4O1xuXG4gICAgLmNvbnRhaW5lciB7XG4gICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgIG1heC13aWR0aDogOTUwcHg7XG5cbiAgICAgIEBtZWRpYSAobWF4LXdpZHRoOiAkc2NyZWVuLXNtLW1heCkge1xuICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBAbWVkaWEgKG1heC13aWR0aDogJHNjcmVlbi1zbS1tYXgpIHtcbiAgICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgfVxuICB9XG5cbiAgc2VjdGlvbiB7XG4gICAgcGFkZGluZy10b3A6IDE3MHB4O1xuICAgIGxpbmUtaGVpZ2h0OiAxLjc1ZW07XG4gICAgcGFkZGluZy1ib3R0b206IDE3MHB4O1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcblxuICAgICYuY2VudGVyIHtcbiAgICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICB9XG5cbiAgICAmLmxlZnQsXG4gICAgJi5yaWdodCB7XG4gICAgICBkaXNwbGF5OiBmbGV4O1xuXG4gICAgICAuY29udGVudCB7XG4gICAgICAgIHdpZHRoOiA0NzBweDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAmLnJpZ2h0IC5jb250ZW50IHtcbiAgICAgIG1hcmdpbi1sZWZ0OiBhdXRvO1xuICAgIH1cblxuICAgIGgyIHtcbiAgICAgIGZvbnQtc2l6ZTogNDdweDtcbiAgICAgIG1hcmdpbi1ib3R0b206IDE1cHg7XG4gICAgICBsZXR0ZXItc3BhY2luZzogLS4wMmVtO1xuICAgICAgY29sb3I6ICMwZDEyMWM7XG4gICAgfVxuXG4gICAgaDMge1xuICAgICAgZm9udC1zaXplOiAzNXB4O1xuICAgICAgbGV0dGVyLXNwYWNpbmc6IC0wLjAxNmVtO1xuICAgIH1cblxuICAgIGg0IHtcbiAgICAgIGZvbnQtc2l6ZTogMTJweDtcbiAgICAgIGNvbG9yOiAjODA4ZmE3O1xuICAgICAgbGV0dGVyLXNwYWNpbmc6IC4xNGVtO1xuICAgICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcbiAgICAgIGZvbnQtZmFtaWx5OiAkZm9udC1mYW1pbHktbW9ub3NwYWNlO1xuXG4gICAgICArIGgyIHtcbiAgICAgICAgbWFyZ2luLXRvcDogMzZweDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBoNSB7XG4gICAgICBmb250LXNpemU6IDIwcHg7XG4gICAgICBtYXJnaW4tYm90dG9tOiAxNnB4O1xuICAgICAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgICB9XG5cbiAgICBwIHtcbiAgICAgIGZvbnQtc2l6ZTogMTZweDtcbiAgICAgIGNvbG9yOiAjOGM5YmI5O1xuICAgICAgbWFyZ2luLWJvdHRvbTogOHB4O1xuICAgICAgbGluZS1oZWlnaHQ6IDEuNzhlbTtcbiAgICAgIGxldHRlci1zcGFjaW5nOiAtLjAyOGVtO1xuICAgIH1cblxuICAgIGhncm91cCBwLFxuICAgIHAubGcge1xuICAgICAgY29sb3I6ICM1OTZhODk7XG4gICAgICBmb250LXNpemU6IDIycHg7XG4gICAgICBsaW5lLWhlaWdodDogMzZweDtcbiAgICAgIG1hcmdpbi1ib3R0b206IDIzcHg7XG4gICAgICBsZXR0ZXItc3BhY2luZzogLS4wMmVtO1xuICAgICAgZm9udC1mYW1pbHk6ICRmb250LWZhbWlseS1laW5hO1xuXG4gICAgICBzdHJvbmcge1xuICAgICAgICBmb250LXdlaWdodDogNjAwO1xuICAgICAgfVxuICAgIH1cblxuICAgIC5jdGEge1xuICAgICAgZm9udC1zaXplOiAyMHB4O1xuICAgICAgbWFyZ2luLXRvcDogMTFweDtcbiAgICAgIHBhZGRpbmctdG9wOiAwO1xuICAgICAgY29sb3I6ICM1YTk4ZmY7XG4gICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICBiYWNrZ3JvdW5kOiBub25lO1xuICAgICAgbGV0dGVyLXNwYWNpbmc6IC0uMDJlbTtcbiAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7XG4gICAgICBmb250LWZhbWlseTogJGZvbnQtZmFtaWx5LWVpbmE7XG4gICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICB0cmFuc2l0aW9uOiAuM3Mgb3BhY2l0eTtcblxuICAgICAgJjpob3ZlciB7XG4gICAgICAgIG9wYWNpdHk6IC42O1xuICAgICAgfVxuXG4gICAgICAmOmhvdmVyLFxuICAgICAgJjphY3RpdmUsXG4gICAgICAmOmZvY3VzIHtcbiAgICAgICAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xuICAgICAgfVxuXG4gICAgICAmOjphZnRlciB7XG4gICAgICAgIGNvbnRlbnQ6ICcnO1xuICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgIGJvdHRvbTogLTFweDtcbiAgICAgICAgbGVmdDogMDtcbiAgICAgICAgcmlnaHQ6IDA7XG4gICAgICAgIGJvcmRlci1ib3R0b206IDJweCBzb2xpZCAjZGJlNmZmO1xuICAgICAgICBib3JkZXItcmFkaXVzOiAycHg7XG4gICAgICB9XG4gICAgfVxuXG4gICAgQG1lZGlhIChtYXgtd2lkdGg6ICRzY3JlZW4tc20tbWF4KSB7XG4gICAgICAuY29udGVudCB7XG4gICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgI2Zvci1kZXZzIHtcbiAgICBwYWRkaW5nLWJvdHRvbTogODdweDtcblxuICAgIGhncm91cCB7XG4gICAgICBtYXgtd2lkdGg6IDc0MHB4O1xuICAgIH1cblxuICAgIHVsIHtcbiAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICBmbGV4LXdyYXA6IHdyYXA7XG4gICAgICBtYXJnaW4tdG9wOiA0NnB4O1xuICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1hcm91bmQ7XG4gICAgICBtYXgtd2lkdGg6IDEwNjRweDtcbiAgICAgIGZvbnQtZmFtaWx5OiAkZm9udC1mYW1pbHktZWluYTtcblxuICAgICAgJjo6YmVmb3JlLFxuICAgICAgJjo6YWZ0ZXIge1xuICAgICAgICBkaXNwbGF5OiBub25lO1xuICAgICAgfVxuICAgIH1cblxuICAgIGxpIHtcbiAgICAgIGxpc3Qtc3R5bGU6IG5vbmU7XG5cbiAgICAgIGEge1xuICAgICAgICBjb2xvcjogIzc5OGZiODtcbiAgICAgICAgZm9udC13ZWlnaHQ6IDcwMDtcbiAgICAgICAgcGFkZGluZy10b3A6IDczcHg7XG4gICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICAgICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcbiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICAgICB3aWR0aDogMTMwcHg7XG4gICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICBsZXR0ZXItc3BhY2luZzogLjA4ZW07XG4gICAgICAgIHRyYW5zaXRpb246IC4ycyBjb2xvcjtcbiAgICAgICAgZm9udC1zaXplOiAxM3B4O1xuXG4gICAgICAgICY6OmJlZm9yZSxcbiAgICAgICAgJjo6YWZ0ZXIge1xuICAgICAgICAgIGJhY2tncm91bmQ6IHVybCgnL2ltZy9ob21lcGFnZS9vZmZlcmluZy1pY29ucy5wbmcnKSAwIDAgbm8tcmVwZWF0O1xuICAgICAgICAgIGJhY2tncm91bmQtc2l6ZTogNTZweDtcbiAgICAgICAgICBoZWlnaHQ6IDU2cHg7XG4gICAgICAgICAgd2lkdGg6IDU2cHg7XG4gICAgICAgICAgY29udGVudDogJyc7XG4gICAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICAgIHRvcDogMDtcbiAgICAgICAgICBsZWZ0OiBjYWxjKDUwJSAtIDI4cHgpO1xuICAgICAgICB9XG5cbiAgICAgICAgJjpob3ZlciB7XG4gICAgICAgICAgY29sb3I6ICRibHVlO1xuICAgICAgICB9XG5cbiAgICAgICAgQG1lZGlhIChtYXgtd2lkdGg6IDU2MHB4KSB7XG4gICAgICAgICAgbGluZS1oZWlnaHQ6IDEuNmVtO1xuICAgICAgICAgIG1hcmdpbi1ib3R0b206IDQ4cHg7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgQGluY2x1ZGUgaG92ZXJTcHJpdGUoXG4gICAgICAgICdvc3MnXG4gICAgICAgICdkZXZvcHMnXG4gICAgICAgICdpZGUnXG4gICAgICAgICdpbnRlZ3JhdGlvbidcbiAgICAgICwgNTYsICcgYTo6YmVmb3JlJywgJyBhOjphZnRlcicpO1xuICAgIH1cbiAgfVxuXG4gICNvc3Mge1xuICAgIHBhZGRpbmctdG9wOiAxNzZweDtcbiAgICBwYWRkaW5nLWJvdHRvbTogNDAwcHg7XG4gICAgbWFyZ2luLXRvcDogMTAwcHg7XG5cbiAgICAuZnJhbWV3b3JrcyB7XG4gICAgICBtYXJnaW4tYm90dG9tOiAzM3B4O1xuXG4gICAgICBAaW5jbHVkZSBmbGV4LWxpc3QoKTtcblxuICAgICAgbGkge1xuICAgICAgICBoZWlnaHQ6IDMycHg7XG4gICAgICAgIHdpZHRoOiAzMnB4O1xuICAgICAgICBiYWNrZ3JvdW5kLXNpemU6IDEwMCU7XG4gICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICAgICAgbWFyZ2luLXJpZ2h0OiAxMnB4O1xuXG4gICAgICAgICYuZnJhbWV3b3Jrc19fYW5ndWxhciB7XG4gICAgICAgICAgYmFja2dyb3VuZC1pbWFnZTogdXJsKCcvaW1nL2hvbWVwYWdlL2ZyYW1ld29yay1zdXBwb3J0LWFuZ3VsYXIucG5nJylcbiAgICAgICAgfVxuXG4gICAgICAgICYuZnJhbWV3b3Jrc19fcmVhY3Qge1xuICAgICAgICAgIGJhY2tncm91bmQtaW1hZ2U6IHVybCgnL2ltZy9ob21lcGFnZS9mcmFtZXdvcmstc3VwcG9ydC1yZWFjdC5wbmcnKVxuICAgICAgICB9XG5cbiAgICAgICAgJi5mcmFtZXdvcmtzX192dWUge1xuICAgICAgICAgIGJhY2tncm91bmQtaW1hZ2U6IHVybCgnL2ltZy9ob21lcGFnZS9mcmFtZXdvcmstc3VwcG9ydC12dWUucG5nJylcbiAgICAgICAgfVxuXG4gICAgICAgICYuZnJhbWV3b3Jrc19fanMge1xuICAgICAgICAgIGJhY2tncm91bmQtaW1hZ2U6IHVybCgnL2ltZy9ob21lcGFnZS9mcmFtZXdvcmstc3VwcG9ydC1qYXZhc2NyaXB0LnBuZycpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAuZ3JhcGhpY3Mge1xuICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgdG9wOiAyNXB4O1xuICAgICAgcmlnaHQ6IDE1cHg7XG4gICAgICBoZWlnaHQ6IDUwMHB4O1xuXG4gICAgICAmLmFjdGl2ZSB7XG4gICAgICAgICY6OmJlZm9yZSxcbiAgICAgICAgJjo6YWZ0ZXIge1xuICAgICAgICAgIGFuaW1hdGlvbjogZmFkZUluVXAgMXMgLjhzIGVhc2UgZm9yd2FyZHM7XG4gICAgICAgIH1cblxuICAgICAgICAmOjphZnRlciB7IGFuaW1hdGlvbi1kZWxheTogLjRzOyB9XG4gICAgICAgIC5zaGFkb3cge1xuICAgICAgICAgIGFuaW1hdGlvbjogZmFkZUluIDJzIC4ycyBlYXNlIGZvcndhcmRzO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgICY6OmJlZm9yZSxcbiAgICAgICY6OmFmdGVyLFxuICAgICAgLnNoYWRvdyB7XG4gICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgY29udGVudDogJyc7XG4gICAgICAgIG9wYWNpdHk6IDA7XG5cbiAgICAgICAgYmFja2dyb3VuZDogdXJsKCcvaW1nL2hvbWVwYWdlL2ZyYW1ld29yay1kZXZpY2UtYW5kcm9pZC5qcGcnKSAwIDAgbm8tcmVwZWF0O1xuICAgICAgICBiYWNrZ3JvdW5kLXNpemU6IDEwMCU7XG4gICAgICAgIHRvcDogNzhweDtcbiAgICAgICAgcmlnaHQ6IDk5cHg7XG4gICAgICAgIHdpZHRoOiA0NzBweDtcbiAgICAgICAgaGVpZ2h0OiA2MjRweDtcbiAgICAgIH1cblxuICAgICAgJjo6YWZ0ZXIge1xuICAgICAgICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoJy9pbWcvaG9tZXBhZ2UvZnJhbWV3b3JrLWRldmljZS1pcGhvbmUucG5nJyk7XG4gICAgICAgIGJhY2tncm91bmQtc2l6ZTogMTAwJTtcbiAgICAgICAgd2lkdGg6IDQ5MHB4O1xuICAgICAgICBoZWlnaHQ6IDc5MHB4O1xuICAgICAgICB0b3A6IDBweDtcbiAgICAgICAgcmlnaHQ6IDBweDtcbiAgICAgIH1cblxuICAgICAgLnNoYWRvdyB7XG4gICAgICAgIGJhY2tncm91bmQtaW1hZ2U6IHVybCgnL2ltZy9ob21lcGFnZS9mcmFtZXdvcmstZGV2aWNlcy1zaGFkb3cucG5nJyk7XG4gICAgICAgIGJhY2tncm91bmQtc2l6ZTogMTAwJTtcbiAgICAgICAgd2lkdGg6IDEyNjZweDtcbiAgICAgICAgaGVpZ2h0OiAyMTRweDtcbiAgICAgICAgdG9wOiA2NTRweDtcbiAgICAgICAgcmlnaHQ6IC0yMDBweDtcbiAgICAgIH1cbiAgICB9XG5cblxuXG4gICAgQG1lZGlhIChtYXgtd2lkdGg6ICRzY3JlZW4tbWQtbWF4KSB7XG4gICAgICBwYWRkaW5nLXRvcDogMTIwcHg7XG5cbiAgICAgIC5jb250ZW50IHtcbiAgICAgICAgd2lkdGg6IDM4MHB4O1xuICAgICAgfVxuICAgIH1cblxuICAgIEBtZWRpYSAobWF4LXdpZHRoOiAkc2NyZWVuLXNtLW1heCkge1xuICAgICAgLmdyYXBoaWNzIHtcbiAgICAgICAgdHJhbnNmb3JtOiBzY2FsZSguNSwuNSk7XG4gICAgICAgIHRvcDogMjAwcHg7XG4gICAgICB9XG4gICAgfVxuXG4gICAgQG1lZGlhIChtYXgtd2lkdGg6ICRzY3JlZW4teHMtbWF4KSB7XG4gICAgICBwYWRkaW5nLXRvcDogMHB4O1xuICAgICAgcGFkZGluZy1ib3R0b206IDMyOHB4O1xuXG4gICAgICAuY29udGVudCB7XG4gICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG5cbiAgICAgICAgLmZyYW1ld29ya3Mge1xuICAgICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC5ncmFwaGljcyB7XG4gICAgICAgIHJpZ2h0OiBjYWxjKDUwJSAtIDYwcHgpO1xuICAgICAgICBib3R0b206IC0xMDFweDtcbiAgICAgICAgdG9wOiBhdXRvO1xuXG4gICAgICAgICY6OmJlZm9yZSB7XG4gICAgICAgICAgdG9wOiAzOXB4O1xuICAgICAgICAgIHJpZ2h0OiA1MHB4O1xuICAgICAgICAgIHdpZHRoOiAyMzVweDtcbiAgICAgICAgICBoZWlnaHQ6IDMxMnB4O1xuICAgICAgICB9XG5cbiAgICAgICAgJjo6YWZ0ZXIge1xuICAgICAgICAgIHdpZHRoOiAyNDVweDtcbiAgICAgICAgICBoZWlnaHQ6IDM5NXB4O1xuICAgICAgICB9XG5cbiAgICAgICAgLnNoYWRvdyB7XG4gICAgICAgICAgd2lkdGg6IDYzM3B4O1xuICAgICAgICAgIGhlaWdodDogMTA3cHg7XG4gICAgICAgICAgdG9wOiAzMjdweDtcbiAgICAgICAgICByaWdodDogLTEwMHB4O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgI2Rldm9wcyB7XG4gICAgcGFkZGluZy10b3A6IDIwNHB4O1xuICAgIHBhZGRpbmctYm90dG9tOiAyNTJweDtcblxuICAgIC5jb250ZW50IHtcbiAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICB9XG5cbiAgICAuZ2l0LWhvc3RzIHtcbiAgICAgIG1hcmdpbi1ib3R0b206IDQycHg7XG5cbiAgICAgIEBpbmNsdWRlIGZsZXgtbGlzdCgpO1xuXG4gICAgICBsaSB7XG4gICAgICAgIG1hcmdpbi1yaWdodDogMTlweDtcbiAgICAgIH1cblxuICAgICAgaW1nIHtcbiAgICAgICAgaGVpZ2h0OiAyMHB4O1xuICAgICAgfVxuICAgIH1cblxuICAgIC5ncmFwaGljcyB7XG4gICAgICBiYWNrZ3JvdW5kOiB1cmwoJy9pbWcvaG9tZXBhZ2UvZGV2b3BzLWFwcGZsb3ctcHJldmlldy5wbmcnKSAwIDAgbm8tcmVwZWF0O1xuICAgICAgYmFja2dyb3VuZC1zaXplOiAxMDAlO1xuICAgICAgd2lkdGg6IDEzMjRweDtcbiAgICAgIGhlaWdodDogODEycHg7XG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICB0b3A6IDE0cHg7XG4gICAgICBsZWZ0OiAtMjI3cHg7XG4gICAgICBvcGFjaXR5OiAwO1xuXG4gICAgICAmLmFjdGl2ZSB7XG4gICAgICAgIGFuaW1hdGlvbjogZmFkZUluVXAgMXMgZWFzZSBmb3J3YXJkcztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBAbWVkaWEgKG1heC13aWR0aDogJHNjcmVlbi1tZC1tYXgpIHtcbiAgICAgIHBhZGRpbmctdG9wOiA2MHB4O1xuXG4gICAgICAuZ3JhcGhpY3Mge1xuICAgICAgICB3aWR0aDogOTMzcHg7XG4gICAgICB9XG4gICAgfVxuXG4gICAgQG1lZGlhIChtYXgtd2lkdGg6ICRzY3JlZW4tc20tbWF4KSB7XG4gICAgICAuZ3JhcGhpY3Mge1xuICAgICAgICB3aWR0aDogNjYycHg7XG4gICAgICAgIHRvcDogMTgwcHg7XG4gICAgICB9XG4gICAgfVxuXG4gICAgQG1lZGlhIChtYXgtd2lkdGg6ICRzY3JlZW4teHMtbWF4KSB7XG4gICAgICBwYWRkaW5nLXRvcDogMTYwcHg7XG4gICAgICBwYWRkaW5nLWJvdHRvbTogNDIwcHg7XG5cbiAgICAgIC5jb250ZW50IHtcbiAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICB9XG5cbiAgICAgIC5naXQtaG9zdHMge1xuICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgICAgIH1cblxuICAgICAgLmdyYXBoaWNzIHtcbiAgICAgICAgbGVmdDogY2FsYyg1MCUgLSAxNTBweCk7XG4gICAgICAgIHdpZHRoOiAzMzFweDtcbiAgICAgICAgdG9wOiBhdXRvO1xuICAgICAgICBoZWlnaHQ6IDIwM3B4O1xuICAgICAgICBib3R0b206IDE3MHB4O1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gICNzdHVkaW8ge1xuICAgIHBhZGRpbmctYm90dG9tOiA1NHB4O1xuICAgIG1hcmdpbi1ib3R0b206IDE1MHB4O1xuICAgIHBhZGRpbmctdG9wOiAyMHB4O1xuICAgIG1hcmdpbi10b3A6IDE1MHB4O1xuXG4gICAgLmNvbnRlbnQge1xuICAgICAgbWF4LXdpZHRoOiA3MjBweDtcbiAgICB9XG5cbiAgICAuZ3JhcGhpY3Mge1xuICAgICAgYmFja2dyb3VuZDogdXJsKCcvaW1nL2hvbWVwYWdlL3N0dWRpby1kZXNrdG9wLWJnLmpwZycpIDUwJSAwIG5vLXJlcGVhdDtcbiAgICAgIGJhY2tncm91bmQtc2l6ZTogY292ZXI7XG4gICAgICB3aWR0aDogMTAwJTtcbiAgICAgIHBhZGRpbmctdG9wOiAxMDBweDtcbiAgICAgIHBhZGRpbmctYm90dG9tOiAxMDBweDtcbiAgICAgIG1hcmdpbi10b3A6IDU4cHg7XG5cbiAgICAgIHZpZGVvIHtcbiAgICAgICAgbWFyZ2luOiAwIGF1dG87XG4gICAgICAgIHBhZGRpbmc6IDA7XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDZweDtcbiAgICAgICAgYm94LXNoYWRvdzogMCAyMnB4IDcwcHggNHB4IHJnYmEoMCwgMCwgMCwgMC41Nik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgQG1lZGlhIChtYXgtd2lkdGg6ICRzY3JlZW4teHMtbWF4KSB7XG4gICAgICBwYWRkaW5nLXRvcDogODBweDtcbiAgICAgIG1hcmdpbi10b3A6IDA7XG5cbiAgICAgIC5ncmFwaGljcyB7XG4gICAgICAgIHZpZGVvIHtcbiAgICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gICNpbnRlZ3JhdGlvbnMge1xuICAgIHBhZGRpbmctdG9wOiAyMHB4O1xuICAgIHBhZGRpbmctYm90dG9tOiA0cHg7XG5cbiAgICAuY29udGVudCB7XG4gICAgICBtYXgtd2lkdGg6IDg5NHB4O1xuICAgIH1cblxuICAgIC5pbnRlZ3JhdGlvbi1saXN0IHtcbiAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgIGhlaWdodDogMzYwcHg7XG4gICAgICBkaXNwbGF5OmJsb2NrO1xuXHQgICAgbWFyZ2luOiAwIDAgNDhweDtcblx0ICAgIHBhZGRpbmc6IDA7XG4gICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICBvcGFjaXR5OiAwO1xuICAgICAgYW5pbWF0aW9uOiBmYWRlSW4gMXMgMXMgZm9yd2FyZHM7XG5cbiAgICAgIGxpIHtcbiAgICAgICAgbGlzdC1zdHlsZTogbm9uZTtcbiAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgfVxuXG4gICAgICBpbWcge1xuICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG5cdFx0ICAgIHdpZHRoOiAxMjhweDtcblx0XHQgICAgYm9yZGVyLXJhZGl1czogNTAlO1xuICAgICAgICBib3gtc2hhZG93OiAwIDZweCAyNHB4IHJnYmEoYmxhY2ssIC4xKTtcblxuICAgICAgICAmLm0ge1xuICAgICAgICAgIHdpZHRoOiA2NHB4O1xuICAgICAgICB9XG5cbiAgICAgICAgJi5tIHtcbiAgICAgICAgICB3aWR0aDogOTZweDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gICN3aHktYnVpbGQge1xuICAgIHBhZGRpbmctYm90dG9tOiA5MHB4O1xuXG4gICAgLndoeSB7XG4gICAgICBAaW5jbHVkZSBmbGV4LWxpc3QoKTtcblxuICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xuICAgICAgbWFyZ2luLXRvcDogNzVweDtcbiAgICAgIG1hcmdpbi1ib3R0b206IDc1cHg7XG5cbiAgICAgIGxpIHtcbiAgICAgICAgcGFkZGluZy10b3A6IDYxcHg7XG4gICAgICAgIG1heC13aWR0aDogMzEwcHg7XG4gICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcblxuICAgICAgICBAaW5jbHVkZSBzcHJpdGUoXG4gICAgICAgICAgJ3doeV9fZnV0dXJlLXByb29mJ1xuICAgICAgICAgICd3aHlfX2NvbW11bml0eSdcbiAgICAgICAgICAnd2h5X19vcydcbiAgICAgICAgLCA0OCk7XG5cbiAgICAgICAgJjo6YmVmb3JlIHtcbiAgICAgICAgICBiYWNrZ3JvdW5kOiB1cmwoJy9pbWcvaG9tZXBhZ2Uvd2h5LWJ1aWxkLWljb25zLnBuZycpIDAgMCBuby1yZXBlYXQ7XG4gICAgICAgICAgYmFja2dyb3VuZC1zaXplOiAxMDAlO1xuICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgICB0b3A6IDA7XG4gICAgICAgICAgbGVmdDogMDtcbiAgICAgICAgICBoZWlnaHQ6IDQ4cHg7XG4gICAgICAgICAgd2lkdGg6IDQ4cHg7XG4gICAgICAgICAgY29udGVudDogJyc7XG4gICAgICAgIH1cblxuICAgICAgICBwIHtcbiAgICAgICAgICBsZXR0ZXItc3BhY2luZzogLS4wMWVtO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgQG1lZGlhIChtYXgtd2lkdGg6ICRzY3JlZW4tbWQtbWF4KSB7XG4gICAgICAud2h5IGxpIHtcbiAgICAgICAgbWF4LXdpZHRoOiAyODBweDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBAbWVkaWEgKG1heC13aWR0aDogJHNjcmVlbi1zbS1tYXgpIHtcbiAgICAgIC53aHkgbGkge1xuICAgICAgICBtYXgtd2lkdGg6IDIxMHB4O1xuICAgICAgfVxuICAgIH1cblxuICAgIEBtZWRpYSAobWF4LXdpZHRoOiAkc2NyZWVuLXhzLW1heCkge1xuICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xuXG4gICAgICAud2h5IHtcbiAgICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1hcm91bmQ7XG5cbiAgICAgICAgbGkge1xuICAgICAgICAgIG1heC13aWR0aDogMTAwJTtcblxuICAgICAgICAgICY6OmJlZm9yZSB7XG4gICAgICAgICAgICBsZWZ0OiBjYWxjKDUwJSAtIDI0cHgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gICNkaWZmZXJlbmNlIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIHBhZGRpbmctdG9wOiA2MHB4O1xuICAgIHBhZGRpbmctYm90dG9tOiA2OXB4O1xuICAgIG1hcmdpbi10b3A6IDE2cHg7XG4gICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNlZWU7XG5cbiAgICAuY29udGFpbmVyIHtcbiAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcblxuICAgICAgJjo6YmVmb3JlIHtcbiAgICAgICAgYmFja2dyb3VuZDogdXJsKCcvaW1nL2hvbWVwYWdlL2h5YnJpZC12cy1uYXRpdmUtaW9uaWMtZWJvb2sucG5nJykgMCAwIG5vLXJlcGVhdDtcbiAgICAgICAgYmFja2dyb3VuZC1zaXplOiAxMDAlO1xuICAgICAgICB3aWR0aDogNDI0cHg7XG4gICAgICAgIGhlaWdodDogMzEwcHg7XG4gICAgICAgIGNvbnRlbnQ6ICcnO1xuICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgIGJvdHRvbTogLTY5cHg7XG4gICAgICAgIGxlZnQ6IDUycHg7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaGdyb3VwIHtcbiAgICAgIG1heC13aWR0aDogNTUwcHg7XG4gICAgICBtYXJnaW4tcmlnaHQ6IDUwcHg7XG4gICAgICBtYXJnaW4tbGVmdDogYXV0bztcbiAgICB9XG5cbiAgICBoNSB7XG4gICAgICBmb250LXNpemU6IDE4cHg7XG4gICAgICBtYXJnaW4tYm90dG9tOiAxMXB4O1xuICAgICAgY29sb3I6ICMxZjMyNTY7XG4gICAgfVxuXG4gICAgcCB7XG4gICAgICBmb250LXNpemU6IDE2cHg7XG4gICAgICBmb250LXdlaWdodDogNDAwO1xuICAgICAgbGluZS1oZWlnaHQ6IDEuNmVtO1xuICAgICAgbGV0dGVyLXNwYWNpbmc6IC0uMDFlbTtcbiAgICAgIGNvbG9yOiAjNmM4MWE2O1xuICAgIH1cblxuICAgIC5idG4ge1xuICAgICAgcGFkZGluZzogMTJweCAxM3B4IDEwcHg7XG4gICAgICBmb250LXNpemU6IDE0cHg7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjNjY4YmZmO1xuICAgIH1cblxuICAgIEBtZWRpYSAobWF4LXdpZHRoOiAkc2NyZWVuLW1kLW1heCkge1xuICAgICAgLmNvbnRhaW5lcjo6YmVmb3JlIHtcbiAgICAgICAgbGVmdDogMDtcbiAgICAgIH1cblxuICAgICAgaGdyb3VwIHtcbiAgICAgICAgbWF4LXdpZHRoOiA1MDBweDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBAbWVkaWEgKG1heC13aWR0aDogJHNjcmVlbi1zbS1tYXgpIHtcbiAgICAgIGhncm91cCB7XG4gICAgICAgIG1hcmdpbjogMCBhdXRvO1xuICAgICAgICBtYXgtd2lkdGg6IDEwMCU7XG4gICAgICB9XG5cbiAgICAgIC5jb250YWluZXI6OmJlZm9yZSB7XG4gICAgICAgIHdpZHRoOiAyMTJweDtcbiAgICAgICAgaGVpZ2h0OiAxNTVweDtcbiAgICAgICAgcmlnaHQ6IDA7XG4gICAgICAgIGxlZnQ6IGF1dG87XG4gICAgICB9XG4gICAgfVxuXG4gICAgQG1lZGlhIChtYXgtd2lkdGg6IDM3MHB4KSB7XG4gICAgICAuY29udGFpbmVyOjpiZWZvcmUge1xuICAgICAgICBkaXNwbGF5OiBub25lO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gICNnb29kLWNvbXBhbnkge1xuICAgIHBhZGRpbmctdG9wOiAxNTlweDtcbiAgICBwYWRkaW5nLWJvdHRvbTogMjAycHg7XG5cbiAgICBoZ3JvdXAge1xuICAgICAgbWF4LXdpZHRoOiA3MzJweDtcbiAgICAgIG1hcmdpbjogMCBhdXRvO1xuXG4gICAgICBwIHtcbiAgICAgICAgbGluZS1oZWlnaHQ6IDMycHg7XG4gICAgICAgIG1hcmdpbi10b3A6IDE1cHg7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLmNhc2Utc3R1ZGllcyB7XG4gICAgICBAaW5jbHVkZSBmbGV4LWxpc3QoKTtcblxuICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xuICAgICAgbWFyZ2luLXRvcDogNTRweDtcblxuICAgICAgbGkge1xuICAgICAgICBmbGV4OiAwIDAgMjcwcHg7XG4gICAgICAgIG1hcmdpbi1yaWdodDogMDtcbiAgICAgICAgbWFyZ2luLWJvdHRvbTogMzJweDtcbiAgICAgIH1cblxuICAgICAgYSB7XG4gICAgICAgIHRleHQtYWxpZ246IGxlZnQ7XG4gICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDhweDtcbiAgICAgICAgcGFkZGluZzogMjM2cHggMjdweCAyM3B4O1xuICAgICAgICBib3gtc2hhZG93OlxuICAgICAgICAgIDAgNHB4IDhweCByZ2JhKDAsMzAsODQsLjEyKSxcbiAgICAgICAgICAwIDFweCAzcHggcmdiYSgwLDMwLDg0LC4wOCk7XG4gICAgICAgIHRyYW5zaXRpb246XG4gICAgICAgICAgLjE1cyBib3gtc2hhZG93IGVhc2UsXG4gICAgICAgICAgLjE1cyBjb2xvcixcbiAgICAgICAgICAuMTVzIHRyYW5zZm9ybTtcblxuICAgICAgICAmOmhvdmVyIHtcbiAgICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTFweCk7XG4gICAgICAgICAgYm94LXNoYWRvdzpcbiAgICAgICAgICAgIDAgOHB4IDE2cHggcmdiYSgwLDMwLDg0LC4xKSxcbiAgICAgICAgICAgIDAgM3B4IDZweCByZ2JhKDAsMzAsODQsLjA4KTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpbWcge1xuICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgIHRvcDogMDtcbiAgICAgICAgbGVmdDogMDtcbiAgICAgICAgcmlnaHQ6IDA7XG4gICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgICAgYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6IDhweDtcbiAgICAgICAgYm9yZGVyLXRvcC1sZWZ0LXJhZGl1czogOHB4O1xuICAgICAgfVxuXG4gICAgICBzdHJvbmcge1xuICAgICAgICBmb250LXdlaWdodDogNDAwO1xuICAgICAgICBjb2xvcjogIzI1Mzk1MDtcbiAgICAgIH1cblxuICAgICAgcCB7XG4gICAgICAgIGZvbnQtc2l6ZTogMTRweDtcbiAgICAgICAgbGV0dGVyLXNwYWNpbmc6IC0uMDFlbTtcbiAgICAgIH1cblxuICAgICAgLmN0YSB7XG4gICAgICAgIGZvbnQtc2l6ZTogMTVweDtcbiAgICAgICAgZm9udC1mYW1pbHk6IEVpbmE7XG4gICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7XG4gICAgICAgIG1hcmdpbi10b3A6IDEwcHg7XG4gICAgICAgIGxldHRlci1zcGFjaW5nOiAuMDNlbTtcblxuICAgICAgICAmOjphZnRlciB7XG4gICAgICAgICAgZGlzcGxheTogbm9uZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIC5vdGhlcnMge1xuICAgICAgd2lkdGg6IDgwN3B4O1xuICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICBtYXJnaW46IDQ5cHggYXV0byAzNXB4O1xuICAgIH1cblxuICAgIC5jdGE6OmFmdGVyIHtcbiAgICAgIGNvbG9yOiAjZGJlNmZmO1xuICAgIH1cblxuICAgIEBtZWRpYSAobWF4LXdpZHRoOiAkc2NyZWVuLW1kLW1heCkge1xuICAgICAgLmNhc2Utc3R1ZGllcyBsaSB7XG4gICAgICAgIGZsZXg6IDAgMCAyMjBweDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBAbWVkaWEgKG1heC13aWR0aDogJHNjcmVlbi14cy1tYXgpIHtcblxuICAgICAgLmNhc2Utc3R1ZGllcyB7XG4gICAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYXJvdW5kO1xuXG4gICAgICAgIGxpIHtcbiAgICAgICAgICBmbGV4OiAwIDAgMjgwcHg7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLm90aGVycyB7XG4gICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gICNqb2luIHtcbiAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQodG8gcmlnaHQsICM0Zjc0ZmUsICM3MGFhZmIpO1xuICAgIHBhZGRpbmctdG9wOiAxMzJweDtcbiAgICBwYWRkaW5nLWJvdHRvbTogMTYwcHg7XG4gICAgY29sb3I6IHdoaXRlO1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcblxuICAgIGhncm91cCB7XG4gICAgICBmb250LXNpemU6IDIzcHg7XG4gICAgICBtYXgtd2lkdGg6IDc5MHB4O1xuICAgIH1cblxuICAgIGgxIHtcbiAgICAgIGZvbnQtd2VpZ2h0OiA0MDA7XG4gICAgICBjb2xvcjogd2hpdGU7XG4gICAgICBmb250LXNpemU6IDQ2cHg7XG4gICAgICBsaW5lLWhlaWdodDogNjRweDtcbiAgICB9XG5cbiAgICAuYnRucyB7XG4gICAgICBtYXJnaW4tdG9wOiA0NHB4O1xuICAgIH1cblxuICAgIC5idG4ge1xuICAgICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcbiAgICAgIGZvbnQtd2VpZ2h0OiA3MDA7XG4gICAgICBmb250LXNpemU6IDE1cHg7XG4gICAgICBwYWRkaW5nOiAyMXB4IDI0cHggMTlweDtcbiAgICAgIGxldHRlci1zcGFjaW5nOiAuMDk2ZW07XG4gICAgICBtYXJnaW4tYm90dG9tOiAxNnB4O1xuXG4gICAgICBpb24taWNvbiB7XG4gICAgICAgIHZlcnRpY2FsLWFsaWduOiAtMnB4O1xuICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgICAgIHdpZHRoOiAxNXB4O1xuICAgICAgICBoZWlnaHQ6IDE1cHg7XG4gICAgICB9XG5cbiAgICAgICYubGlnaHQge1xuICAgICAgICBiYWNrZ3JvdW5kOiAjN2JiM2ZmO1xuXG4gICAgICAgICY6aG92ZXIge1xuICAgICAgICAgIGJhY2tncm91bmQ6IGxpZ2h0ZW4oIzdiYjNmZiwgNSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgJjpub3QoOmhvdmVyKTpub3QoOmFjdGl2ZSkge1xuICAgICAgICBib3gtc2hhZG93OiBub25lO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuIiwiYm9keS5wcmVzcy1yZWxlYXNlIHtcbiAgbWFpbi5jb250YWluZXIge1xuICAgIGZvbnQtZmFtaWx5OiAkZm9udC1mYW1pbHktc2VyaWY7XG4gICAgbWF4LXdpZHRoOiA3MzBweDtcblxuICAgIGgxLFxuICAgIGgyLFxuICAgIGgzLFxuICAgIGg0IHtcbiAgICAgIGZvbnQtZmFtaWx5OiAkZm9udC1mYW1pbHktZWluYTtcbiAgICB9XG4gIFxuICAgIGgxIHtcbiAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgIHBhZGRpbmctdG9wOiAxMDFweDtcbiAgICAgIG1hcmdpbi10b3A6IDY3cHg7XG4gICAgICBmb250LXNpemU6IDMycHg7XG4gICAgICBmb250LXdlaWdodDogNzAwO1xuICAgICAgbGV0dGVyLXNwYWNpbmc6IC0uMDJlbTtcbiAgICAgIGxpbmUtaGVpZ2h0OiA0NHB4O1xuICBcbiAgICAgICY6OmJlZm9yZSB7XG4gICAgICAgIGJhY2tncm91bmQ6IHVybCgnL2ltZy9wcmVzcy9wcmVzcy10aHVtYm5haWwucG5nJykgbm8tcmVwZWF0IDAgMDtcbiAgICAgICAgYmFja2dyb3VuZC1zaXplOiA3MnB4O1xuICAgICAgICB3aWR0aDogNzJweDtcbiAgICAgICAgaGVpZ2h0OiA3MnB4O1xuICAgICAgICBjb250ZW50OiAnJztcbiAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICB0b3A6IDA7XG4gICAgICB9XG4gIFxuICAgICAgKyBoMyB7XG4gICAgICAgIG1hcmdpbi10b3A6IDEwcHg7XG4gICAgICAgIGZvbnQtc2l6ZTogMTlweDtcbiAgICAgICAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuNTVlbTtcbiAgICAgICAgbGV0dGVyLXNwYWNpbmc6IC4wMDNlbTtcbiAgICAgICAgbWFyZ2luLWJvdHRvbTogMjVweDtcbiAgICAgIH1cbiAgICB9XG4gIFxuICAgIGgzICsgaDQge1xuICAgICAgZm9udC1zaXplOiAxMnB4O1xuICAgICAgY29sb3I6ICM5MjljYWM7XG4gICAgICBsZXR0ZXItc3BhY2luZzogLjAyZW07XG4gICAgICBtYXJnaW4tYm90dG9tOiA1OHB4O1xuICAgIH1cblxuICAgIGgyLFxuICAgIGgzIHtcbiAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7XG4gICAgfVxuXG4gICAgcCB7XG4gICAgICBmb250LXNpemU6IDIwcHg7XG4gICAgICBsaW5lLWhlaWdodDogMmVtO1xuICAgICAgbWFyZ2luLWJvdHRvbTogNDBweDtcbiAgICB9XG5cbiAgICB1bCB7XG4gICAgICBtYXJnaW4tYm90dG9tOiA0MHB4O1xuICAgIH1cblxuICAgIGxpIHtcbiAgICAgIGZvbnQtc2l6ZTogMjBweDtcbiAgICAgIGxpbmUtaGVpZ2h0OiAyZW07XG4gICAgfVxuICB9ICBcbn0iLCIjcGFnZS1wcm9kdWN0cy1jb250YWN0e1xuXG4gICAgLnByaWNpbmctc3VydmV5e1xuICAgICAgICB3aWR0aDo2MDBweDtcbiAgICAgICAgbWFyZ2luOjQwcHggYXV0byA0MHB4IGF1dG87XG4gICAgfVxuICAgIFxuICAgIC5jdGF7XG4gICAgICAgIHRleHQtYWxpZ246Y2VudGVyO1xuICAgIH1cblxuICAgIC5idXR0b24tY29udGFpbmVye1xuICAgICAgICBtYXJnaW4tdG9wOjI1cHg7XG4gICAgICAgIHRleHQtYWxpZ246cmlnaHQ7XG4gICAgfVxuXG59IiwiI3BhZ2UtcHJvZHVjdHMtZGVwbG95IHtcbiAgLnRvcCB7XG4gICAgbWFyZ2luLXRvcDogLTEzOHB4O1xuICAgIHBhZGRpbmctdG9wOiAxNzBweDtcbiAgICBiYWNrZ3JvdW5kOiB3aGl0ZTtcbiAgICB0ZXh0LWFsaWduOiBsZWZ0O1xuICAgIHBhZGRpbmctYm90dG9tOiA1MjJweDtcbiAgICBiYWNrZ3JvdW5kOiB3aGl0ZSB1cmwoJy9pbWcvcHJvL2RlcGxveS9kZXBsb3ktaGVyby1mbGF0LWltZy5wbmcnKSA1MCUgMTAwJSBuby1yZXBlYXQ7XG4gICAgYmFja2dyb3VuZC1zaXplOiAxMTA4cHg7XG5cbiAgICBAbWVkaWEgKG1heC13aWR0aDogJHNjcmVlbi14cy1tYXgpICB7XG4gICAgICBiYWNrZ3JvdW5kLXNpemU6IDc4MHB4O1xuICAgICAgcGFkZGluZy1ib3R0b206IDM2MHB4XG4gICAgfVxuXG4gICAgLmNvbnRhaW5lciB7XG4gICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xuICAgICAgQG1lZGlhIChtYXgtd2lkdGg6ICRzY3JlZW4tbWQtbWF4KSAge1xuICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgICAgfVxuICAgIH1cbiAgICAuY29udGFpbmVyOmJlZm9yZSxcbiAgICAuY29udGFpbmVyOmFmdGVyIHtcbiAgICAgIGNvbnRlbnQ6ICcnO1xuICAgICAgZGlzcGxheTogbm9uZTtcbiAgICB9XG5cbiAgICBoZ3JvdXAge1xuICAgICAgcGFkZGluZy10b3A6IDk5cHg7XG4gICAgICBtYXgtd2lkdGg6IDEwMCU7XG4gICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICBtYXgtd2lkdGg6IDU1NXB4O1xuXG4gICAgICAmOjpiZWZvcmUge1xuICAgICAgICBiYWNrZ3JvdW5kOiB1cmwoJy9pbWcvcHJvL2RlcGxveS9kZXBsb3ktaGVyby1pY29uLnBuZycpIDAgMCBuby1yZXBlYXQ7XG4gICAgICAgIGJhY2tncm91bmQtc2l6ZTogODBweDtcbiAgICAgICAgaGVpZ2h0OiA4MHB4O1xuICAgICAgICB3aWR0aDogODBweDtcbiAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICB0b3A6IDA7XG4gICAgICAgIGxlZnQ6IDA7XG4gICAgICAgIGNvbnRlbnQ6ICcnO1xuICAgICAgfVxuXG4gICAgICBoMSB7XG4gICAgICAgIGxldHRlci1zcGFjaW5nOiAtLjAzZW07XG4gICAgICAgIGZvbnQtd2VpZ2h0OiA3MDA7XG4gICAgICAgIGZvbnQtc2l6ZTogNDhweDtcbiAgICAgICAgbWF4LXdpZHRoOiA0MjBweDtcbiAgICAgIH1cblxuICAgICAgcCB7XG4gICAgICAgIGZvbnQtc2l6ZTogMjBweDtcbiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgICAgICBtYXJnaW4tdG9wOiAxMnB4O1xuICAgICAgfVxuICAgIH1cblxuICAgIC5idG5zIHtcbiAgICAgIG1hcmdpbi10b3A6IDE1MHB4O1xuXG4gICAgICAuYnRuIHtcbiAgICAgICAgZm9udC1zaXplOiAxNnB4O1xuICAgICAgICBmb250LXdlaWdodDogNzAwO1xuXG4gICAgICAgICYucHVycGxlIHtcbiAgICAgICAgICBiYWNrZ3JvdW5kOiAjNTY1N2ZiO1xuICAgICAgICAgIG1hcmdpbi1yaWdodDogOXB4O1xuICAgICAgICAgIHBhZGRpbmc6IDEycHggMTlweCAxMHB4O1xuXG4gICAgICAgIH1cblxuICAgICAgICAmLndoaXRlICB7XG4gICAgICAgICAgY29sb3I6ICM1NjU3ZmI7XG4gICAgICAgICAgcGFkZGluZzogMTJweCAxOXB4IDEwcHg7XG4gICAgICAgICAgbWFyZ2luLXJpZ2h0OiAzcHg7XG4gICAgICAgIH1cbiAgICAgIH1cblxuXG5cbiAgICAgIEBtZWRpYSAobWF4LXdpZHRoOiAkc2NyZWVuLW1kLW1heCkgIHtcbiAgICAgICAgbWFyZ2luLXRvcDogMjJweDtcbiAgICAgICAgbWFyZ2luLWJvdHRvbTogMzJweDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBAbWVkaWEgKG1heC13aWR0aDogJHNjcmVlbi14cy1tYXgpICB7XG4gICAgICBoZ3JvdXA6YmVmb3JlIHtcbiAgICAgICAgbGVmdDogNTAlO1xuICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTQwcHgpO1xuICAgICAgfVxuICAgICAgaGdyb3VwLFxuICAgICAgLmJ0bnMge1xuICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgICB9XG4gICAgICBoZ3JvdXAsXG4gICAgICBoZ3JvdXAgaDEge1xuICAgICAgICBtYXJnaW4tbGVmdDogYXV0bztcbiAgICAgICAgbWFyZ2luLXJpZ2h0OiBhdXRvO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHNlY3Rpb24uc2tpcCB7XG4gICAgYmFja2dyb3VuZDogI2Y2ZjhmYztcblxuICAgIC5jb250YWluZXIge1xuICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICAgcGFkZGluZy1ib3R0b206IDM4cHg7XG4gICAgfVxuXG4gICAgaGdyb3VwIHtcbiAgICAgIHBhZGRpbmctdG9wOiA3MnB4O1xuICAgICAgd2lkdGg6IGNhbGMoNTAlIC0gNzdweCk7XG4gICAgICBwYWRkaW5nLWJvdHRvbTogNTBweDtcblxuICAgICAgQG1lZGlhIChtYXgtd2lkdGg6ICRzY3JlZW4tbWQtbWF4KSAge1xuICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgICAgfVxuICAgIH1cblxuICAgIGgyIHtcbiAgICAgIGxpbmUtaGVpZ2h0OiA0MXB4O1xuICAgICAgbWFyZ2luLWJvdHRvbTogMjJweDtcbiAgICB9XG5cbiAgICBwIHtcbiAgICAgIGZvbnQtc2l6ZTogMTZweDtcbiAgICAgIGxldHRlci1zcGFjaW5nOiAtMC4wMmVtO1xuXG4gICAgICBzdHJvbmcge1xuICAgICAgICBjb2xvcjogIzM2M2E0MDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAuaXRlbXMge1xuICAgICAgcGFkZGluZzogMDtcbiAgICAgIHdpZHRoOiBjYWxjKDUwJSAtIDUwcHgpO1xuXG4gICAgICBAbWVkaWEgKG1heC13aWR0aDogJHNjcmVlbi14cy1tYXgpICB7XG4gICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgfVxuXG4gICAgICBwIHtcbiAgICAgICAgZm9udC1zaXplOiAxNnB4O1xuICAgICAgICBmb250LXdlaWdodDogNjAwO1xuICAgICAgICBsZXR0ZXItc3BhY2luZzogLS4wMjZlbTtcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuOGVtO1xuICAgICAgICBtYXJnaW4tYm90dG9tOiAzMHB4O1xuICAgICAgICBjb2xvcjogIzVlNjc3NztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBsaSB7XG4gICAgICBmbGV4OiAwIDEgMjU0cHg7XG4gICAgICBwYWRkaW5nLXJpZ2h0OiA2cHg7XG5cbiAgICAgIEBtZWRpYSAobWF4LXdpZHRoOiAkc2NyZWVuLW1kLW1heCkgIHtcbiAgICAgICAgZmxleC1iYXNpczogMzIxcHg7XG4gICAgICAgIHotaW5kZXg6IDFcbiAgICAgIH1cblxuICAgICAgJjo6YmVmb3JlIHtcbiAgICAgICAgYmFja2dyb3VuZC1pbWFnZTogdXJsKCcvaW1nL3Byby9kZXBsb3kvZmVhdHVyZS1pY29ucy1zbS5wbmcnKTtcbiAgICAgICAgYmFja2dyb3VuZC1zaXplOiA0OHB4O1xuICAgICAgfVxuXG4gICAgICAmLmxpdmU6OmJlZm9yZSB7IGJhY2tncm91bmQtcG9zaXRpb246IDAgMDsgfVxuICAgICAgJi5hdXRvbWF0aWM6OmJlZm9yZSB7IGJhY2tncm91bmQtcG9zaXRpb246IDAgLTQ4cHg7IH1cbiAgICAgICYuc3BsaXQ6OmJlZm9yZSB7IGJhY2tncm91bmQtcG9zaXRpb246IDAgLTk2cHg7IH1cbiAgICAgICYuY29tcGxpYW50OjpiZWZvcmUgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwIC0xNDRweDsgfVxuICAgIH1cblxuICAgIC5ncmFwaGljcyB7XG4gICAgICBiYWNrZ3JvdW5kOiB1cmwoJy9pbWcvcHJvL2RlcGxveS9mZWF0dXJlLWltZy1za2lwLnBuZycpIDAgMCBuby1yZXBlYXQ7XG4gICAgICBiYWNrZ3JvdW5kLXNpemU6IDcyNHB4O1xuICAgICAgd2lkdGg6IDcyNHB4O1xuICAgICAgaGVpZ2h0OiA3MzlweDtcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgIGJvdHRvbTogMDtcbiAgICAgIHJpZ2h0OiAwO1xuICAgICAgdG9wOiBhdXRvO1xuICAgICAgb3BhY2l0eTogMDtcbiAgICAgIHRyYW5zaXRpb246IC4ycyBvcGFjaXR5O1xuXG4gICAgICBAbWVkaWEgKG1heC13aWR0aDogJHNjcmVlbi1zbS1tYXgpICB7XG4gICAgICAgIHJpZ2h0OiAtMTYwcHg7XG4gICAgICB9XG4gICAgICBAbWVkaWEgKG1heC13aWR0aDogJHNjcmVlbi14cy1tYXgpICB7XG4gICAgICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgICB9XG5cbiAgICAgICYuYWN0aXZlIHtcbiAgICAgICAgb3BhY2l0eTogMTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgc2VjdGlvbiB7XG4gICAgJi5saXZlLFxuICAgICYubGF0ZXN0LFxuICAgICYucnVuIHtcbiAgICAgIGgyIHtcbiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuXG4gICAgICAgICY6OmJlZm9yZSB7XG4gICAgICAgICAgYmFja2dyb3VuZDogdXJsKCcvaW1nL3Byby9kZXBsb3kvZmVhdHVyZS1pY29ucy1sZy5wbmcnKSAwIDAgbm8tcmVwZWF0O1xuICAgICAgICAgIGJhY2tncm91bmQtc2l6ZTogNjRweDtcbiAgICAgICAgICBoZWlnaHQ6IDY0cHg7XG4gICAgICAgICAgd2lkdGg6IDY0cHg7XG4gICAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICAgIHRvcDogMDtcbiAgICAgICAgICBsZWZ0OiAwO1xuICAgICAgICAgIGNvbnRlbnQ6ICcnO1xuXG4gICAgICAgICAgQG1lZGlhIChtYXgtd2lkdGg6ICRzY3JlZW4teHMtbWF4KSAge1xuICAgICAgICAgICAgbGVmdDogY2FsYyg1MCUgLSAzMnB4KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgQG1lZGlhIChtYXgtd2lkdGg6ICRzY3JlZW4teHMtbWF4KSAge1xuICAgICAgICAuZ3JhcGhpY3Mge1xuICAgICAgICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBzZWN0aW9uLmxpdmUge1xuICAgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCh0byByaWdodCwgIzViNGNmYyAwJSwgIzhlODNmZiAxMDAlKTtcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xuXG4gICAgaGdyb3VwIHtcbiAgICAgIHBhZGRpbmctdG9wOiAxMjdweDtcbiAgICAgIHBhZGRpbmctYm90dG9tOiAxMDdweDtcblxuICAgICAgQG1lZGlhIChtYXgtd2lkdGg6ICRzY3JlZW4teHMtbWF4KSAge1xuICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgICAgfVxuICAgIH1cblxuICAgIGgyIHtcbiAgICAgIHBhZGRpbmctdG9wOiA4M3B4O1xuICAgICAgbWFyZ2luLWJvdHRvbTogMjBweDtcbiAgICAgIGZvbnQtc2l6ZTogMzZweDtcbiAgICAgIGZvbnQtd2VpZ2h0OiA3MDA7XG4gICAgICBsZXR0ZXItc3BhY2luZzogLTAuMDNlbTtcbiAgICAgIGxpbmUtaGVpZ2h0OiA0MnB4O1xuXG4gICAgICBzcGFuIHtcbiAgICAgICAgY29sb3I6IHdoaXRlO1xuICAgICAgfVxuICAgIH1cblxuICAgIHAge1xuICAgICAgZm9udC1zaXplOiAxNnB4O1xuICAgICAgbGV0dGVyLXNwYWNpbmc6IC0wLjAyZW07XG4gICAgICBjb2xvcjogd2hpdGU7XG4gICAgfVxuXG4gICAgLmdyYXBoaWNzIHtcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgIHJpZ2h0OiAwO1xuICAgICAgd2lkdGg6IDUwJTtcblxuICAgICAgLmlwaG9uZSxcbiAgICAgIC5hbmRyb2lkIHtcbiAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICB3aWR0aDogMzMwcHg7XG4gICAgICAgIGhlaWdodDogNTE4cHg7XG4gICAgICAgIGJvdHRvbTogMDtcbiAgICAgICAgcmlnaHQ6IDA7XG5cbiAgICAgICAgJjo6YWZ0ZXIge1xuICAgICAgICAgIGJhY2tncm91bmQ6IG5vLXJlcGVhdCAwIDA7XG4gICAgICAgICAgei1pbmRleDogMTtcbiAgICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgICAgdG9wOiAwO1xuICAgICAgICAgIHJpZ2h0OiAwO1xuICAgICAgICAgIHdpZHRoOiAzMzBweDtcbiAgICAgICAgICBoZWlnaHQ6IDUxOHB4O1xuICAgICAgICAgIGNvbnRlbnQ6ICcnO1xuICAgICAgICB9XG5cbiAgICAgICAgLnNjcmVlbiB7XG4gICAgICAgICAgYmFja2dyb3VuZDogbm8tcmVwZWF0IDAgMDtcbiAgICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgICAgYm90dG9tOiAwO1xuICAgICAgICAgIGFuaW1hdGlvbjogMTBzIHNjcmVlblBvcC0xIGluZmluaXRlO1xuXG4gICAgICAgICAgJjpudGgtY2hpbGQoMikge1xuICAgICAgICAgICAgYW5pbWF0aW9uLW5hbWU6IHNjcmVlblBvcC0yO1xuICAgICAgICAgIH1cblxuICAgICAgICAgICY6bnRoLWNoaWxkKDMpIHtcbiAgICAgICAgICAgIGFuaW1hdGlvbi1uYW1lOiBzY3JlZW5Qb3AtMztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLmlwaG9uZSB7XG4gICAgICAgIHJpZ2h0OiAyNTBweDtcbiAgICAgICAgei1pbmRleDogMTtcblxuICAgICAgICBAbWVkaWEgKG1heC13aWR0aDogJHNjcmVlbi1zbS1tYXgpICB7XG4gICAgICAgICAgcmlnaHQ6IDEwMHB4O1xuICAgICAgICB9XG5cbiAgICAgICAgJjo6YWZ0ZXIge1xuICAgICAgICAgIGJhY2tncm91bmQtaW1hZ2U6IHVybCgnL2ltZy9wcm8vZGVwbG95L2ZlYXR1cmUtaXBob25lLWRldmljZS5wbmcnKTtcbiAgICAgICAgICBiYWNrZ3JvdW5kLXNpemU6IDMzMHB4O1xuICAgICAgICB9XG5cbiAgICAgICAgLnNjcmVlbiB7XG4gICAgICAgICAgYmFja2dyb3VuZC1pbWFnZTogdXJsKCcvaW1nL3Byby9kZXBsb3kvZmVhdHVyZS1pcGhvbmUtc2NyZWVuLTEucG5nJyk7XG4gICAgICAgICAgYmFja2dyb3VuZC1zaXplOiAyNjZweDtcbiAgICAgICAgICB3aWR0aDogMjY2cHg7XG4gICAgICAgICAgaGVpZ2h0OiAzOTZweDtcbiAgICAgICAgICByaWdodDogMzJweDtcblxuICAgICAgICAgICY6bnRoLWNoaWxkKDIpIHtcbiAgICAgICAgICAgIGJhY2tncm91bmQtaW1hZ2U6IHVybCgnL2ltZy9wcm8vZGVwbG95L2ZlYXR1cmUtaXBob25lLXNjcmVlbi0yLnBuZycpO1xuICAgICAgICAgICAgYmFja2dyb3VuZC1zaXplOiAyNjZweDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAmOm50aC1jaGlsZCgzKSB7XG4gICAgICAgICAgICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoJy9pbWcvcHJvL2RlcGxveS9mZWF0dXJlLWlwaG9uZS1zY3JlZW4tMy5wbmcnKTtcbiAgICAgICAgICAgIGJhY2tncm91bmQtc2l6ZTogMjY2cHg7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC5hbmRyb2lkIHtcbiAgICAgICAgJjo6YWZ0ZXIge1xuICAgICAgICAgIHJpZ2h0OiAwO1xuICAgICAgICAgIGJhY2tncm91bmQtaW1hZ2U6IHVybCgnL2ltZy9wcm8vZGVwbG95L2ZlYXR1cmUtYW5kcm9pZC1kZXZpY2UucG5nJyk7XG4gICAgICAgICAgYmFja2dyb3VuZC1zaXplOiAzMzBweDtcbiAgICAgICAgfVxuXG4gICAgICAgIC5zY3JlZW4ge1xuICAgICAgICAgIGJhY2tncm91bmQtaW1hZ2U6IHVybCgnL2ltZy9wcm8vZGVwbG95L2ZlYXR1cmUtYW5kcm9pZC1zY3JlZW4tMS5wbmcnKTtcbiAgICAgICAgICBiYWNrZ3JvdW5kLXNpemU6IDI4MHB4O1xuICAgICAgICAgIHdpZHRoOiAyODBweDtcbiAgICAgICAgICBoZWlnaHQ6IDQ2MnB4O1xuICAgICAgICAgIHJpZ2h0OiAyNnB4O1xuICAgICAgICAgIGFuaW1hdGlvbi1kZWxheTogLjI1cztcblxuICAgICAgICAgICY6bnRoLWNoaWxkKDIpIHtcbiAgICAgICAgICAgIGJhY2tncm91bmQtaW1hZ2U6IHVybCgnL2ltZy9wcm8vZGVwbG95L2ZlYXR1cmUtYW5kcm9pZC1zY3JlZW4tMi5wbmcnKTtcbiAgICAgICAgICAgIGJhY2tncm91bmQtc2l6ZTogMjgwcHg7XG4gICAgICAgICAgICBhbmltYXRpb24tZGVsYXk6IC4yNXM7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgJjpudGgtY2hpbGQoMykge1xuICAgICAgICAgICAgYmFja2dyb3VuZC1pbWFnZTogdXJsKCcvaW1nL3Byby9kZXBsb3kvZmVhdHVyZS1hbmRyb2lkLXNjcmVlbi0zLnBuZycpO1xuICAgICAgICAgICAgYmFja2dyb3VuZC1zaXplOiAyODBweDtcbiAgICAgICAgICAgIGFuaW1hdGlvbi1kZWxheTogLjI1cztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBzZWN0aW9uLmxhdGVzdCB7XG4gICAgaGdyb3VwIHtcbiAgICAgIHdpZHRoOiBjYWxjKDUwJSAtIDEwOHB4KTtcbiAgICAgIHBhZGRpbmctdG9wOiAxMzJweDtcbiAgICAgIHBhZGRpbmctcmlnaHQ6IDI1cHg7XG4gICAgICBwYWRkaW5nLWJvdHRvbTogMTIxcHg7XG5cbiAgICAgIEBtZWRpYSAobWF4LXdpZHRoOiAkc2NyZWVuLXNtLW1heCkgIHtcbiAgICAgICAgd2lkdGg6IDQ1JTtcbiAgICAgIH1cblxuICAgICAgQG1lZGlhIChtYXgtd2lkdGg6ICRzY3JlZW4teHMtbWF4KSAge1xuICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgICAgICBwYWRkaW5nLXJpZ2h0OiAwO1xuICAgICAgfVxuICAgIH1cblxuICAgIGgyIHtcbiAgICAgIHBhZGRpbmctdG9wOiA4N3B4O1xuICAgICAgZm9udC1zaXplOiAyN3B4O1xuICAgICAgbGV0dGVyLXNwYWNpbmc6IC0uMDI0ZW07XG5cbiAgICAgIG1hcmdpbi1ib3R0b206IDIwcHg7XG4gICAgICBmb250LXNpemU6IDM2cHg7XG4gICAgICBmb250LXdlaWdodDogNzAwO1xuICAgICAgbGV0dGVyLXNwYWNpbmc6IC0wLjAzZW07XG4gICAgICBsaW5lLWhlaWdodDogNDJweDtcblxuICAgICAgJjo6YmVmb3JlIHtcbiAgICAgICAgYmFja2dyb3VuZC1wb3NpdGlvbjogMCAtNjRweDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBwIHtcbiAgICAgIGZvbnQtc2l6ZTogMTZweDtcbiAgICAgIGxldHRlci1zcGFjaW5nOiAtMC4wMmVtO1xuICAgIH1cblxuICAgIC5ncmFwaGljcyB7XG4gICAgICBiYWNrZ3JvdW5kOiB1cmwoJy9pbWcvcHJvL2RlcGxveS9mZWF0dXJlLWltZy1sYXRlc3QucG5nJykgMCA1MCUgbm8tcmVwZWF0O1xuICAgICAgYmFja2dyb3VuZC1zaXplOiA1ODlweDtcbiAgICAgIHdpZHRoOiA1ODlweDtcbiAgICAgIC8vIGhlaWdodDogMzc4cHg7XG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICBib3R0b206IDA7XG4gICAgICBsZWZ0OiAwO1xuICAgICAgdG9wOiAwO1xuICAgICAgb3BhY2l0eTogMDtcbiAgICAgIHRyYW5zaXRpb246IC4ycyBvcGFjaXR5O1xuXG4gICAgICBAbWVkaWEgKG1heC13aWR0aDogJHNjcmVlbi1zbS1tYXgpICB7XG4gICAgICAgIGJhY2tncm91bmQtc2l6ZTogMTAwJTtcbiAgICAgICAgd2lkdGg6IDUwJTtcbiAgICAgIH1cblxuICAgICAgJi5hY3RpdmUge1xuICAgICAgICBvcGFjaXR5OiAxO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHNlY3Rpb24ucnVuIHtcbiAgICBiYWNrZ3JvdW5kOiAjZjZmOGZjO1xuXG4gICAgaGdyb3VwIHtcbiAgICAgIHBhZGRpbmctdG9wOiAxMjZweDtcbiAgICAgIHBhZGRpbmctYm90dG9tOiAxMDhweDtcblxuICAgICAgQG1lZGlhIChtYXgtd2lkdGg6ICRzY3JlZW4tc20tbWF4KSAge1xuICAgICAgICB3aWR0aDogNDUlO1xuICAgICAgfVxuXG4gICAgICBAbWVkaWEgKG1heC13aWR0aDogJHNjcmVlbi14cy1tYXgpICB7XG4gICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaDIge1xuICAgICAgcGFkZGluZy10b3A6IDgzcHg7XG4gICAgICBtYXJnaW4tYm90dG9tOiAyMHB4O1xuICAgICAgZm9udC1zaXplOiAzNnB4O1xuICAgICAgZm9udC13ZWlnaHQ6IDcwMDtcbiAgICAgIGxldHRlci1zcGFjaW5nOiAtMC4wM2VtO1xuICAgICAgbGluZS1oZWlnaHQ6IDQycHg7XG5cbiAgICAgICY6OmJlZm9yZSB7XG4gICAgICAgIGJhY2tncm91bmQtcG9zaXRpb246IDAgLTEyOHB4O1xuICAgICAgfVxuICAgIH1cblxuICAgIHAge1xuICAgICAgZm9udC1zaXplOiAxNnB4O1xuICAgICAgbGV0dGVyLXNwYWNpbmc6IC0wLjAyZW07XG4gICAgfVxuXG4gICAgLmdyYXBoaWNzIHtcbiAgICAgIGJhY2tncm91bmQ6IHVybCgnL2ltZy9wcm8vZGVwbG95L2ZlYXR1cmUtaW1nLWFidGVzdC5wbmcnKSA1MCUgMTAwJSBuby1yZXBlYXQ7XG4gICAgICBiYWNrZ3JvdW5kLXNpemU6IDUyNnB4O1xuICAgICAgd2lkdGg6IDUyNnB4O1xuICAgICAgaGVpZ2h0OiA1MTNweDtcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgIGJvdHRvbTogMDtcbiAgICAgIHJpZ2h0OiAwO1xuICAgICAgdG9wOiBhdXRvO1xuICAgICAgb3BhY2l0eTogMDtcbiAgICAgIHRyYW5zaXRpb246IC4ycyBvcGFjaXR5O1xuXG4gICAgICBAbWVkaWEgKG1heC13aWR0aDogJHNjcmVlbi1zbS1tYXgpICB7XG4gICAgICAgIGJhY2tncm91bmQtc2l6ZTogMTAwJTtcbiAgICAgICAgYmFja2dyb3VuZC1wb3NpdGlvbjogMTAwJSAxMDAlO1xuICAgICAgICB3aWR0aDogNTAlO1xuICAgICAgfVxuXG4gICAgICAmLmFjdGl2ZSB7XG4gICAgICAgIG9wYWNpdHk6IDE7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgc2VjdGlvbi5nZXQtc3RhcnRlZCB7XG4gICAgYmFja2dyb3VuZDogI2U3ZWNmNjtcblxuICAgIGgyIHtcbiAgICAgIGNvbG9yOiAjMjcyYTJmO1xuICAgIH1cblxuICAgIHAge1xuICAgICAgY29sb3I6ICM1ZTY3Nzc7XG4gICAgfVxuXG4gICAgLmJ0biB7XG4gICAgICBwYWRkaW5nOiAxMnB4IDE5cHggMTBweDtcbiAgICAgIGZvbnQtc2l6ZTogMTZweDtcbiAgICAgIGxldHRlci1zcGFjaW5nOiAtLjAyZW07XG4gICAgICBmb250LXdlaWdodDogNzAwO1xuXG4gICAgICAmLndoaXRlIHtcbiAgICAgICAgY29sb3I6ICM1MjQ0ZmY7XG4gICAgICB9XG5cbiAgICAgICYucHVycGxlIHtcbiAgICAgICAgYmFja2dyb3VuZDogIzVhNGRmYztcbiAgICAgICAgbWFyZ2luLXJpZ2h0OiAycHg7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG4iLCIvLyBUaGlzIGlzIGEgY29sbGVjdGlvbiBvZiBnZW5lcmljcyBmb3IgdGhlIHByb2R1Y3RzIHBhZ2VzXG4ucHJvZHVjdHMtcGFnZSB7XG4gIGZvbnQtZmFtaWx5OiBcIkVpbmFcIiwgXCJIZWx2ZXRpY2EgTmV1ZVwiLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7IC8vIHRvZG86IFNldCBFaW5hIGdsb2JhbGx5XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcblxuICAudG9wIHtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG5cbiAgICBoMSB7XG4gICAgICBsZXR0ZXItc3BhY2luZzogLS4wM2VtO1xuICAgICAgZm9udC13ZWlnaHQ6IDcwMDtcbiAgICAgIGZvbnQtc2l6ZTogNDhweDtcbiAgICB9XG5cbiAgICBwIHtcbiAgICAgIGZvbnQtc2l6ZTogMjBweDtcbiAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7XG4gICAgICBtYXJnaW4tdG9wOiAxN3B4O1xuICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgICAgbGV0dGVyLXNwYWNpbmc6IC0uMDNlbTtcbiAgICAgIGxpbmUtaGVpZ2h0OiAxLjVlbTtcbiAgICAgIGNvbG9yOiAjMmYzNzQ0O1xuICAgIH1cblxuICAgIC5ncmFwaGljcyB7XG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgfVxuICB9XG5cbiAgLmNlbnRlciB7XG4gICAgaGdyb3VwIHtcbiAgICAgIHBhZGRpbmctdG9wOiAxMDBweDtcbiAgICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICAgIG1heC13aWR0aDogNzQ4cHg7XG4gICAgICBtYXJnaW46IDAgYXV0byAxOHB4O1xuXG4gICAgICBoMiB7XG4gICAgICAgIGZvbnQtc2l6ZTogMzZweDtcbiAgICAgICAgZm9udC13ZWlnaHQ6IDcwMDtcbiAgICAgICAgbGV0dGVyLXNwYWNpbmc6IC0uMDNlbTtcbiAgICAgICAgY29sb3I6ICMxNjFhMWY7XG4gICAgICB9XG5cbiAgICAgIHAge1xuICAgICAgICBmb250LXNpemU6IDE4cHg7XG4gICAgICAgIGNvbG9yOiAjNWU2Nzc3O1xuICAgICAgICBtYXJnaW4tdG9wOiAyOXB4O1xuICAgICAgICBsZXR0ZXItc3BhY2luZzogLTAuMDNlbTtcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuOGVtO1xuICAgICAgICBmb250LXdlaWdodDogNjAwO1xuICAgICAgfVxuXG4gICAgICBwIHN0cm9uZyB7XG4gICAgICAgIGNvbG9yOiAjMjcyYTJmO1xuICAgICAgICBmb250LXdlaWdodDogNzAwO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHVsLml0ZW1zIHtcbiAgICBwYWRkaW5nOiA0OHB4IDE0cHg7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG4gICAgZmxleC13cmFwOiB3cmFwO1xuXG4gICAgbGkge1xuICAgICAgbGlzdC1zdHlsZTogbm9uZTtcbiAgICAgIHBhZGRpbmctdG9wOiA2N3B4O1xuICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuXG4gICAgICAmOjpiZWZvcmUge1xuICAgICAgICBiYWNrZ3JvdW5kOiAwIDAgbm8tcmVwZWF0O1xuICAgICAgICBiYWNrZ3JvdW5kLXNpemU6IDEwMCU7XG4gICAgICAgIGhlaWdodDogNDhweDtcbiAgICAgICAgd2lkdGg6IDQ4cHg7XG4gICAgICAgIGNvbnRlbnQ6ICcnO1xuICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICB0b3A6IDA7XG4gICAgICB9XG5cbiAgICAgIHN0cm9uZyB7XG4gICAgICAgIGxldHRlci1zcGFjaW5nOiAtLjAzZW07XG4gICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICAgICAgZm9udC1zaXplOiAxN3B4O1xuICAgICAgICB0ZXh0LXRyYW5zZm9ybTogbm9uZTtcbiAgICAgICAgbGV0dGVyLXNwYWNpbmc6IC4wMDFlbTtcbiAgICAgICAgbWFyZ2luLXRvcDogNHB4O1xuICAgICAgICBtYXJnaW4tYm90dG9tOiAxMHB4O1xuICAgICAgfVxuXG4gICAgICBwIHtcbiAgICAgICAgZm9udC1zaXplOiAxNnB4O1xuICAgICAgICBmb250LXdlaWdodDogNjAwO1xuICAgICAgICBsZXR0ZXItc3BhY2luZzogLS4wMjZlbTtcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuOGVtO1xuICAgICAgICBtYXJnaW4tYm90dG9tOiAzMHB4O1xuICAgICAgICBjb2xvcjogIzVlNjc3NztcbiAgICAgIH1cblxuICAgICAgQG1lZGlhIChtYXgtd2lkdGg6ICRzY3JlZW4teHMtbWF4KSAge1xuICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgICAgZmxleC1iYXNpczogMTAwJTtcbiAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xuXG4gICAgICAgICY6OmJlZm9yZSB7XG4gICAgICAgICAgbGVmdDogY2FsYyg1MCUgLSAyNHB4KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHNlY3Rpb24ubGVmdCxcbiAgc2VjdGlvbi5yaWdodCxcbiAgc2VjdGlvbi5ib3RoICB7XG4gICAgLmNvbnRhaW5lciB7IHBvc2l0aW9uOiByZWxhdGl2ZTsgfVxuXG4gICAgaGdyb3VwIHtcbiAgICAgIHBhZGRpbmctdG9wOiAyMDhweDtcbiAgICAgIHBhZGRpbmctYm90dG9tOiAxNTFweDtcbiAgICAgIHdpZHRoOiBjYWxjKDUwJSAtIDE0N3B4KTtcbiAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcblxuICAgICAgQG1lZGlhIChtYXgtd2lkdGg6ICRzY3JlZW4tc20tbWF4KSAge1xuICAgICAgICB3aWR0aDogY2FsYyg1MCUgLSA0OHB4KTtcbiAgICAgIH1cblxuICAgICAgJjo6YmVmb3JlIHtcbiAgICAgICAgYmFja2dyb3VuZDogMCAwIG5vLXJlcGVhdDtcbiAgICAgICAgYmFja2dyb3VuZC1zaXplOiAxMDAlO1xuICAgICAgICBoZWlnaHQ6IDY0cHg7XG4gICAgICAgIHdpZHRoOiA2NHB4O1xuICAgICAgICBjb250ZW50OiAnJztcbiAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICB0b3A6IDEyNnB4O1xuICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgIH1cblxuICAgICAgJjo6YWZ0ZXIge1xuICAgICAgICBjb250ZW50OiAnJztcbiAgICAgICAgY2xlYXI6IGJvdGg7XG4gICAgICAgIGRpc3BsYXk6IHRhYmxlO1xuICAgICAgfVxuXG4gICAgICBoMiB7XG4gICAgICAgIG1hcmdpbi1ib3R0b206IDIwcHg7XG4gICAgICAgIGZvbnQtc2l6ZTogMzZweDtcbiAgICAgICAgZm9udC13ZWlnaHQ6IDcwMDtcbiAgICAgICAgbGV0dGVyLXNwYWNpbmc6IC0wLjAzZW07XG4gICAgICAgIGxpbmUtaGVpZ2h0OiA0MnB4O1xuICAgICAgfVxuXG4gICAgICBwIHtcbiAgICAgICAgZm9udC1zaXplOiAxNnB4O1xuICAgICAgICBmb250LXdlaWdodDogNjAwO1xuICAgICAgICBsZXR0ZXItc3BhY2luZzogLS4wMjZlbTtcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuOGVtO1xuICAgICAgICBtYXJnaW4tYm90dG9tOiAzMHB4O1xuICAgICAgICBjb2xvcjogIzVlNjc3NztcblxuICAgICAgICBzdHJvbmcge1xuICAgICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAuZ3JhcGhpY3Mge1xuICAgICAgYmFja2dyb3VuZDogMCA1MCUgbm8tcmVwZWF0O1xuICAgICAgYmFja2dyb3VuZC1zaXplOiAxMDAlO1xuICAgICAgd2lkdGg6IDQ3MHB4O1xuICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgcmlnaHQ6IDA7XG4gICAgICBib3R0b206IDA7XG4gICAgICB0b3A6IDA7XG4gICAgICBvcGFjaXR5OiAwO1xuXG4gICAgICAmLmFjdGl2YXRlT25TY3JvbGwge1xuICAgICAgICBmaWx0ZXI6IGJsdXIoMTBweCk7XG4gICAgICAgIHRyYW5zaXRpb246IC40cyBvcGFjaXR5LCAuNHMgZmlsdGVyO1xuXG4gICAgICAgICYuYWN0aXZlIHtcbiAgICAgICAgICBvcGFjaXR5OiAxO1xuICAgICAgICAgIGZpbHRlcjogYmx1cigwKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBAbWVkaWEgKG1heC13aWR0aDogJHNjcmVlbi1zbS1tYXgpICB7XG4gICAgICAgIHJpZ2h0OiAtMjAlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHNlY3Rpb24ucmlnaHQge1xuICAgIGhncm91cCB7XG4gICAgICBmbG9hdDogcmlnaHQ7XG4gICAgfVxuXG4gICAgLmdyYXBoaWNzIHtcbiAgICAgIHJpZ2h0OiBhdXRvO1xuICAgICAgbGVmdDogMDtcblxuICAgICAgQG1lZGlhIChtYXgtd2lkdGg6ICRzY3JlZW4tc20tbWF4KSAge1xuICAgICAgICBsZWZ0OiAtMjAlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHNlY3Rpb24uYm90aCB7XG4gICAgLmNvbnRhaW5lciB7XG4gICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgY2xlYXI6IGJvdGg7XG4gICAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG5cbiAgICAgICY6OmJlZm9yZSxcbiAgICAgICY6OmFmdGVyIHtcbiAgICAgICAgZGlzcGxheTogbm9uZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAuZ2V0LXN0YXJ0ZWQge1xuICAgIGJhY2tncm91bmQ6IDAgMCBuby1yZXBlYXQ7XG4gICAgYmFja2dyb3VuZC1zaXplOiBjb3ZlcjtcblxuICAgIC5jb250YWluZXIge1xuICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgIHBhZGRpbmctdG9wOiAxMDFweDtcbiAgICAgIHBhZGRpbmctYm90dG9tOiAxMDJweDtcbiAgICAgIGZsZXgtd3JhcDogd3JhcDtcbiAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG5cbiAgICAgICY6OmJlZm9yZSxcbiAgICAgICY6OmFmdGVyIHtcbiAgICAgICAgZGlzcGxheTogbm9uZTtcbiAgICAgIH1cblxuICAgICAgQG1lZGlhIChtYXgtd2lkdGg6ICRzY3JlZW4tc20tbWF4KSAge1xuICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaGdyb3VwLFxuICAgIC5idG5zIHtcbiAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICB9XG5cbiAgICBoZ3JvdXAge1xuICAgICAgZmxleC1ncm93OiAxO1xuICAgIH1cblxuICAgIGgyIHtcbiAgICAgIGNvbG9yOiB3aGl0ZTtcbiAgICAgIGZvbnQtc2l6ZTogMjhweDtcbiAgICAgIGxldHRlci1zcGFjaW5nOiAtLjAzZW07XG4gICAgICBtYXJnaW4tdG9wOiAzMHB4O1xuICAgICAgbWFyZ2luLWJvdHRvbTogNXB4O1xuICAgICAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgICB9XG5cbiAgICBwIHtcbiAgICAgIGZvbnQtc2l6ZTogMjBweDtcbiAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7XG4gICAgICBsZXR0ZXItc3BhY2luZzogLS4wMmVtO1xuICAgICAgY29sb3I6ICMwMDNlODI7XG4gICAgfVxuXG4gICAgLmJ0bnMge1xuICAgICAgLmJ0biB7XG4gICAgICAgIHBhZGRpbmc6IDEycHggMTlweCAxMHB4O1xuICAgICAgICBmb250LXNpemU6IDE2cHg7XG4gICAgICAgIGZvbnQtd2VpZ2h0OiA3MDA7XG5cbiAgICAgICAgJjpsYXN0LWNoaWxkIHtcbiAgICAgICAgICBtYXJnaW4tcmlnaHQ6IC01cHg7XG4gICAgICAgIH1cblxuXG4gICAgICAgIEBtZWRpYSAobWF4LXdpZHRoOiAkc2NyZWVuLXhzLW1heCkgIHtcbiAgICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgICAgbWFyZ2luOiAxNnB4IGF1dG87XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIEBtZWRpYSAobWF4LXdpZHRoOiAkc2NyZWVuLXNtLW1heCkgIHtcbiAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG4iLCIjcGFnZS1wcm9kdWN0cy1tb25pdG9yIHtcbiAgLnRvcCB7XG4gICAgbWFyZ2luLXRvcDogLTE1MHB4O1xuICAgIHBhZGRpbmctdG9wOiAxNzRweDtcbiAgICBiYWNrZ3JvdW5kOiAjMGMxYzFjO1xuICAgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCh0byByaWdodCwgIzA1MTMxMiAwJSwgIzExMjYyNCAxMDAlKTtcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG5cbiAgICBoZ3JvdXAge1xuICAgICAgcGFkZGluZy10b3A6IDk3cHg7XG4gICAgICBwYWRkaW5nLWJvdHRvbTogMzU1cHg7XG4gICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG5cbiAgICAgICY6OmJlZm9yZSB7XG4gICAgICAgIGJhY2tncm91bmQ6IHVybCgnL2ltZy9wcm8vbW9uaXRvci9tb25pdG9yLWN0YS1pY29uLnBuZycpIDAgMCBuby1yZXBlYXQ7XG4gICAgICAgIGJhY2tncm91bmQtc2l6ZTogODBweDtcbiAgICAgICAgd2lkdGg6IDgwcHg7XG4gICAgICAgIGhlaWdodDogODBweDtcbiAgICAgICAgY29udGVudDogJyc7XG4gICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgdG9wOiAwO1xuICAgICAgICBsZWZ0OiBjYWxjKDUwJSAtIDQwcHgpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGgxIHtcbiAgICAgIGNvbG9yOiB3aGl0ZTtcbiAgICAgIGxldHRlci1zcGFjaW5nOiAtLjAzZW07XG4gICAgICBmb250LXdlaWdodDogNzAwO1xuICAgICAgZm9udC1zaXplOiA0OHB4O1xuICAgICAgbWF4LXdpZHRoOiA4NjBweDtcbiAgICAgIG1hcmdpbi1sZWZ0OiBhdXRvO1xuICAgICAgbWFyZ2luLXJpZ2h0OiBhdXRvO1xuICAgIH1cblxuICAgIHAge1xuICAgICAgY29sb3I6ICNhYmIzYjI7XG4gICAgICBtYXgtd2lkdGg6IDc2MHB4O1xuICAgICAgbWFyZ2luLWJvdHRvbTogMzJweDtcblxuICAgICAgc3Ryb25nIHtcbiAgICAgICAgY29sb3I6IHdoaXRlO1xuICAgICAgICBmb250LXdlaWdodDogNzAwO1xuICAgICAgfVxuICAgIH1cblxuICAgIC5idG5zIHtcbiAgICAgIG1hcmdpbi10b3A6IDE2cHg7XG5cbiAgICAgIC5idG4ge1xuICAgICAgICBmb250LXNpemU6IDE2cHg7XG4gICAgICAgIGZvbnQtd2VpZ2h0OiA3MDA7XG5cbiAgICAgICAgJi5ncmVlbiB7XG4gICAgICAgICAgYmFja2dyb3VuZDogIzMxY2E3NDtcbiAgICAgICAgICBwYWRkaW5nOiAxMnB4IDE5cHggMTBweDtcbiAgICAgICAgICBtYXJnaW4tcmlnaHQ6IDlweDtcbiAgICAgICAgfVxuXG4gICAgICAgICYuZGFyayAge1xuICAgICAgICAgIGNvbG9yOiAjMzFjYTc0O1xuICAgICAgICAgIGJhY2tncm91bmQ6ICMzMTNmM2Y7XG4gICAgICAgICAgcGFkZGluZzogMTJweCAxOXB4IDEwcHg7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAjaGVhcnQtbW9uaXRvci1zdGFnZSB7XG4gICAgLy8gaGVpZ2h0OiBjYWxjKDEwMHZ3ICogLjM1KTtcbiAgICAvLyB3aWR0aDogMTAwJTtcbiAgICBoZWlnaHQ6IDI1MHB4O1xuICAgIHdpZHRoOiA0MDBweDtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgYm90dG9tOiA2NHB4O1xuICAgIC8vIGxlZnQ6IDA7XG4gICAgbGVmdDogY2FsYyg1MCUgLSAyMDBweCk7XG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICAvLyBiYWNrZ3JvdW5kLWNvbG9yOiAjNDM0MzQzO1xuICAgIC8vIGJhY2tncm91bmQtaW1hZ2U6bGluZWFyLWdyYWRpZW50KHRvIHJpZ2h0LCAjMDUxNDEzLCAjMTAyNjI0KTtcblxuICAgICNncmlkIHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xuICAgICAgYmFja2dyb3VuZC1pbWFnZTogbGluZWFyLWdyYWRpZW50KDBkZWcsXG4gICAgICAgIHRyYW5zcGFyZW50IDI0JSxcbiAgICAgICAgcmdiYSgyNTUsIDI1NSwgMjU1LCAuMDUpIDI1JSxcbiAgICAgICAgcmdiYSgyNTUsIDI1NSwgMjU1LCAuMDUpIDI2JSxcbiAgICAgICAgdHJhbnNwYXJlbnQgMjclLFxuICAgICAgICB0cmFuc3BhcmVudCA3NCUsXG4gICAgICAgIHJnYmEoMjU1LCAyNTUsIDI1NSwgLjA1KSA3NSUsXG4gICAgICAgIHJnYmEoMjU1LCAyNTUsIDI1NSwgLjA1KSA3NiUsXG4gICAgICAgIHRyYW5zcGFyZW50IDc3JSxcbiAgICAgICAgdHJhbnNwYXJlbnRcbiAgICAgICksIGxpbmVhci1ncmFkaWVudCg5MGRlZyxcbiAgICAgICAgdHJhbnNwYXJlbnQgMjQlLFxuICAgICAgICByZ2JhKDI1NSwgMjU1LCAyNTUsIC4wNSkgMjUlLFxuICAgICAgICByZ2JhKDI1NSwgMjU1LCAyNTUsIC4wNSkgMjYlLFxuICAgICAgICB0cmFuc3BhcmVudCAyNyUsXG4gICAgICAgIHRyYW5zcGFyZW50IDc0JSxcbiAgICAgICAgcmdiYSgyNTUsIDI1NSwgMjU1LCAuMDUpIDc1JSxcbiAgICAgICAgcmdiYSgyNTUsIDI1NSwgMjU1LCAuMDUpIDc2JSxcbiAgICAgICAgdHJhbnNwYXJlbnQgNzclLFxuICAgICAgICB0cmFuc3BhcmVudFxuICAgICAgKTtcbiAgICAgIGhlaWdodDoxMDAlO1xuICAgICAgYmFja2dyb3VuZC1zaXplOjUwcHggNTBweDtcbiAgICAgIC8vIG1hc2staW1hZ2U6IHJhZGlhbC1ncmFkaWVudChibGFjayA1MCUsIHRyYW5zcGFyZW50IDgwJSk7XG4gICAgICBtYXNrLWltYWdlOiByYWRpYWwtZ3JhZGllbnQoYmxhY2sgMjAlLCB0cmFuc3BhcmVudCA3MCUpO1xuICAgIH1cblxuICAgICNlZGdlcyxcbiAgICAjc3BvdGxpZ2h0IHtcbiAgICAgIGJhY2tncm91bmQtaW1hZ2U6bGluZWFyLWdyYWRpZW50KHRvIHJpZ2h0LCAjMDUxNDEzLCAjMTAyNjI0KTtcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgIHRvcDogMDtcbiAgICAgIHJpZ2h0OiAwO1xuICAgICAgYm90dG9tOiAwO1xuICAgICAgbGVmdDogMDtcbiAgICAgIHotaW5kZXg6IDE7XG4gICAgICBtYXNrLWltYWdlOiByYWRpYWwtZ3JhZGllbnQodHJhbnNwYXJlbnQgNTAlLCBibGFjayA3MCUpO1xuICAgIH1cblxuICAgICNzcG90bGlnaHQge1xuICAgICAgbGVmdDogLTEwMCU7XG4gICAgICBtYXNrLWltYWdlOiByYWRpYWwtZ3JhZGllbnQodHJhbnNwYXJlbnQgMzAlLCBibGFjayA4MCUpO1xuICAgIH1cblxuICAgIHN2ZyB7XG4gICAgICB3aWR0aDogMTAwJTtcbiAgICAgIGhlaWdodDogMTAwJTtcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgIHRvcDogMDtcbiAgICB9XG5cbiAgICAucGF0aCB7XG4gICAgICBmaWxsOnRyYW5zcGFyZW50O1xuICAgICAgc3Ryb2tlOnJnYmEoMCwyMDAsMTI2LC41KTtcbiAgICAgIHN0cm9rZS1taXRlcmxpbWl0OjEwO1xuICAgIH1cblxuICAgIC5wYXRoLTMge1xuICAgICAgZmlsbDp0cmFuc3BhcmVudDtcbiAgICAgIHN0cm9rZTpyZ2JhKDAsMjAwLDEyNiwuOCk7XG4gICAgICBzdHJva2UtbWl0ZXJsaW1pdDoxMDtcbiAgICB9XG5cbiAgICAucGF0aC0yIHtcbiAgICAgIGZpbGw6dHJhbnNwYXJlbnQ7XG4gICAgICBzdHJva2U6cmdiYSgxNTQsIDI1NSwgMTkyLCAxKTtcbiAgICAgIHN0cm9rZS1taXRlcmxpbWl0OjIwO1xuICAgIH1cbiAgfVxuXG4gIC5waW5wb2ludCB7XG4gICAgLmNvbnRhaW5lciB7XG4gICAgICBtYXgtd2lkdGg6IDEwOTJweDtcbiAgICB9XG5cbiAgICBoZ3JvdXAge1xuICAgICAgbWF4LXdpZHRoOjk2MHB4O1xuXG4gICAgICBoMyB7XG4gICAgICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XG4gICAgICAgIGNvbG9yOiAkZ3JlZW47XG4gICAgICAgIGZvbnQtd2VpZ2h0OiA3MDA7XG4gICAgICAgIGxldHRlci1zcGFjaW5nOiAuMDZlbTtcbiAgICAgICAgZm9udC1zaXplOiAyNHB4O1xuICAgICAgfVxuXG4gICAgICBoMiB7XG4gICAgICAgIG1hcmdpbi10b3A6IDE1cHg7XG4gICAgICB9XG5cbiAgICAgIHAge1xuICAgICAgICBzdHJvbmcge1xuICAgICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAuaXRlbXMge1xuICAgICAgcGFkZGluZzogNTBweCAwIDQ2cHg7XG5cbiAgICAgIGxpIHtcbiAgICAgICAgZmxleDogMCAxIDMwM3B4O1xuXG4gICAgICAgIEBtZWRpYSAobWF4LXdpZHRoOiAkc2NyZWVuLXNtLW1heCkgIHtcbiAgICAgICAgICBmbGV4LWJhc2lzOiAyMDBweDtcbiAgICAgICAgfVxuXG4gICAgICAgIEBtZWRpYSAobWF4LXdpZHRoOiAkc2NyZWVuLXhzLW1heCkgIHtcbiAgICAgICAgICBmbGV4LWJhc2lzOiAxMDAlO1xuICAgICAgICB9XG5cbiAgICAgICAgJjo6YmVmb3JlIHtcbiAgICAgICAgICBiYWNrZ3JvdW5kOiB1cmwoJy9pbWcvcHJvL21vbml0b3IvZmVhdHVyZS1pY29ucy1zbS5wbmcnKSAwIDAgbm8tcmVwZWF0O1xuICAgICAgICAgIGJhY2tncm91bmQtc2l6ZTogNDhweDtcbiAgICAgICAgfVxuXG4gICAgICAgICYuYnVpbHQ6OmJlZm9yZSB7IGJhY2tncm91bmQtcG9zaXRpb246IDAgLTQ4cHg7IH1cbiAgICAgICAgJi50eXBlc2NyaXB0OjpiZWZvcmUgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwIC05NnB4OyB9XG4gICAgICB9XG5cbiAgICAgIHN0cm9uZyB7XG4gICAgICAgIG1hcmdpbi1ib3R0b206IDEwcHg7XG4gICAgICB9XG5cbiAgICAgIHAge1xuICAgICAgICBmb250LXNpemU6IDE2cHg7XG4gICAgICAgIGxldHRlci1zcGFjaW5nOiAtLjAyZW07XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAyOHB4O1xuICAgICAgfVxuICAgIH1cblxuICAgIC5nZXQtc3RhcnRlZCB7XG4gICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcbiAgICAgIGJvcmRlci10b3A6IDFweCBzb2xpZCAjZjBmNGY4O1xuICAgICAgcGFkZGluZy10b3A6IDMwcHg7XG4gICAgICBwYWRkaW5nLWJvdHRvbTogNjRweDtcbiAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuXG4gICAgICBoZ3JvdXAge1xuICAgICAgICB0ZXh0LWFsaWduOiBsZWZ0O1xuICAgICAgICBtYXJnaW4tbGVmdDogMDtcbiAgICAgICAgcGFkZGluZy10b3A6IDA7XG4gICAgICAgIG1hcmdpbi10b3A6IDIwcHg7XG4gICAgICB9XG5cbiAgICAgIGgyIHtcbiAgICAgICAgY29sb3I6ICRncmVlbjtcbiAgICAgICAgbWFyZ2luLWJvdHRvbTogMDtcbiAgICAgICAgZm9udC1zaXplOiAyOHB4O1xuICAgICAgICBsZXR0ZXItc3BhY2luZzogLS4wM2VtO1xuICAgICAgICBmb250LXdlaWdodDogNjAwO1xuICAgICAgfVxuXG4gICAgICBwIHtcbiAgICAgICAgbWFyZ2luLXRvcDogMDtcbiAgICAgICAgbGV0dGVyLXNwYWNpbmc6IC0uMDJlbTtcblxuICAgICAgICBzdHJvbmcge1xuICAgICAgICAgIGZvbnQtd2VpZ2h0OiA3MDA7XG4gICAgICAgICAgbGV0dGVyLXNwYWNpbmc6IDA7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLmJ0biB7XG4gICAgICAgIGJhY2tncm91bmQ6ICRncmVlbjtcbiAgICAgICAgbWFyZ2luLXJpZ2h0OiA0cHg7XG4gICAgICAgIHBhZGRpbmc6IDEycHggMTlweCAxMHB4O1xuICAgICAgICBmb250LXNpemU6IDE2cHg7XG4gICAgICAgIGZvbnQtd2VpZ2h0OiA3MDA7XG4gICAgICAgIGxldHRlci1zcGFjaW5nOiAuMDFlbTtcbiAgICAgIH1cblxuICAgICAgQG1lZGlhIChtYXgtd2lkdGg6ICRzY3JlZW4tc20tbWF4KSAge1xuICAgICAgICAuYnRucyB7XG4gICAgICAgICAgd2lkdGg6IGF1dG87XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBzZWN0aW9uLmxlZnQsXG4gIHNlY3Rpb24ucmlnaHQsXG4gIHNlY3Rpb24uYm90aCB7XG4gICAgaGdyb3VwOjpiZWZvcmUge1xuICAgICAgYmFja2dyb3VuZC1pbWFnZTogdXJsKCcvaW1nL3Byby9tb25pdG9yL2ZlYXR1cmUtaWNvbnMtbGcucG5nJyk7XG4gICAgICBiYWNrZ3JvdW5kLXNpemU6IDY0cHg7XG5cbiAgICAgIEBtZWRpYSAobWF4LXdpZHRoOiAkc2NyZWVuLXNtLW1heCkgIHtcbiAgICAgICAgbGVmdDogY2FsYyg1MCUgLSAzMnB4KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBoMiB7XG4gICAgICBtYXJnaW4tYm90dG9tOiAyMHB4O1xuICAgICAgZm9udC1zaXplOiAzNnB4O1xuICAgICAgZm9udC13ZWlnaHQ6IDcwMDtcbiAgICAgIGxldHRlci1zcGFjaW5nOiAtMC4wM2VtO1xuICAgICAgbGluZS1oZWlnaHQ6IDQycHg7XG4gICAgfVxuXG4gICAgcCB7XG4gICAgICBmb250LXNpemU6IDE3cHg7XG4gICAgICBsZXR0ZXItc3BhY2luZzogLS4wMDhlbTtcbiAgICB9XG5cbiAgICBAbWVkaWEgKG1heC13aWR0aDogJHNjcmVlbi1zbS1tYXgpICB7XG4gICAgICBoZ3JvdXAge1xuICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgICAgZmxvYXQ6IG5vbmU7XG4gICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAuY29uZmlkZW5jZSB7XG4gICAgYmFja2dyb3VuZDogI2Y0ZjlmNztcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG5cbiAgICAuY29udGFpbmVyIHtcbiAgICAgIHBvc2l0aW9uOiBzdGF0aWM7XG4gICAgfVxuXG4gICAgaGdyb3VwIHtcbiAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgIHotaW5kZXg6IDE7XG4gICAgfVxuXG4gICAgLmdyYXBoaWNzIHtcbiAgICAgIGJhY2tncm91bmQtaW1hZ2U6IHVybCgnL2ltZy9wcm8vbW9uaXRvci9mZWF0dXJlLWltZy1jb25maWRlbmNlLnBuZycpO1xuICAgICAgYmFja2dyb3VuZC1zaXplOiAxMTQ1cHg7XG4gICAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiBib3R0b20gY2VudGVyO1xuICAgICAgd2lkdGg6IDExNDVweDtcblxuICAgICAgQG1lZGlhIChtYXgtd2lkdGg6ICRzY3JlZW4tbWQtbWF4KSAge1xuICAgICAgICByaWdodDogLTIwJTtcbiAgICAgIH1cblxuICAgICAgQG1lZGlhIChtYXgtd2lkdGg6ICRzY3JlZW4tc20tbWF4KSAge1xuICAgICAgICBkaXNwbGF5OiBub25lO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC5haGVhZCB7XG4gICAgYmFja2dyb3VuZDogI2UxZWJlOTtcblxuICAgIGhncm91cDo6YmVmb3JlIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogMCAtNjRweDsgfVxuXG4gICAgLmdyYXBoaWNzIHtcbiAgICAgIGJhY2tncm91bmQtaW1hZ2U6IHVybCgnL2ltZy9wcm8vbW9uaXRvci9mZWF0dXJlLWltZy1haGVhZC5wbmcnKTtcbiAgICAgIGJhY2tncm91bmQtc2l6ZTogNjIxcHg7XG4gICAgICB3aWR0aDogNjIxcHg7XG5cbiAgICAgIEBtZWRpYSAobWF4LXdpZHRoOiAkc2NyZWVuLW1kLW1heCkgIHtcbiAgICAgICAgLy8gcmlnaHQ6IC0yMCU7XG4gICAgICB9XG5cbiAgICAgIEBtZWRpYSAobWF4LXdpZHRoOiAkc2NyZWVuLXNtLW1heCkgIHtcbiAgICAgICAgZGlzcGxheTogbm9uZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAuYm90aCB7XG4gICAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KHRvIHJpZ2h0LCAjN2M5YzkxIDUwJSwgIzRlNzM2NiA1MCUpO1xuXG4gICAgaGdyb3VwIHtcbiAgICAgICY6OmJlZm9yZSB7IGJhY2tncm91bmQtcG9zaXRpb246IDAgLTEyOHB4OyB9XG5cbiAgICAgICsgaGdyb3VwOjpiZWZvcmUgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwIC0xOTJweDsgfVxuICAgIH1cblxuICAgIGgyIHtcbiAgICAgIGNvbG9yOiB3aGl0ZTtcbiAgICB9XG5cbiAgICBwIHtcbiAgICAgIGNvbG9yOiAjYmRkOGQzO1xuXG4gICAgICBzdHJvbmcge1xuICAgICAgICBjb2xvcjogI2U1ZmVmYTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBAbWVkaWEgKG1heC13aWR0aDogJHNjcmVlbi1zbS1tYXgpICB7XG4gICAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQodG8gYm90dG9tLCAjN2M5YzkxIDUwJSwgIzRlNzM2NiA1MCUpO1xuXG4gICAgICAuY29udGFpbmVyIHtcbiAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgc2VjdGlvbi5nZXQtc3RhcnRlZCB7XG4gICAgYmFja2dyb3VuZDogI2U2ZjFlZDtcblxuICAgIGgyIHtcbiAgICAgIGNvbG9yOiAjMjAyNjI0O1xuICAgIH1cblxuICAgIHAge1xuICAgICAgY29sb3I6ICM1NTY4NjE7XG5cbiAgICAgIHN0cm9uZyB7XG4gICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLmJ0biB7XG4gICAgICAmLmdyZWVuIHtcbiAgICAgICAgYmFja2dyb3VuZDogJGdyZWVuO1xuICAgICAgfVxuXG4gICAgICAmLndoaXRlIHtcbiAgICAgICAgY29sb3I6ICRncmVlbjtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxufVxuIiwiI3BhZ2UtcHJvZHVjdHMtcGFja2FnZSB7XG4gIC5zdWItaGVhZGVyID4gLmNvbnRhaW5lciB7XG4gICAgei1pbmRleDogMjtcbiAgfVxuXG4gIC50b3Age1xuICAgIGNsZWFyOiBib3RoO1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICB0b3A6IC0xNDRweDtcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgIHBhZGRpbmctdG9wOiAxNzhweDtcbiAgICBiYWNrZ3JvdW5kOiAjZTdhMmRkO1xuICAgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCh0byByaWdodCwgI2M2OTZmOCAwJSwgI2ZjYTVhNyAxMDAlKTtcblxuICAgIGhncm91cCB7XG4gICAgICBwYWRkaW5nLXRvcDogMTAzcHg7XG4gICAgICBwYWRkaW5nLWJvdHRvbTogMTQ4cHg7XG4gICAgICB0ZXh0LWFsaWduOiBsZWZ0O1xuICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICAgei1pbmRleDogNTtcblxuICAgICAgJjo6YmVmb3JlIHtcbiAgICAgICAgYmFja2dyb3VuZDogdXJsKCcvaW1nL3Byby9wYWNrYWdlL3BhY2thZ2UtaGVyby1pY29uLnBuZycpIG5vLXJlcGVhdCAwIDA7XG4gICAgICAgIGJhY2tncm91bmQtc2l6ZTogODBweDtcbiAgICAgICAgd2lkdGg6IDgwcHg7XG4gICAgICAgIGhlaWdodDogODBweDtcbiAgICAgICAgY29udGVudDogJyc7XG4gICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgdG9wOiAwO1xuICAgICAgICBsZWZ0OiAxNXB4O1xuICAgICAgfVxuXG4gICAgICBoMSxcbiAgICAgIHAge1xuICAgICAgICBjb2xvcjogd2hpdGU7XG4gICAgICB9XG5cbiAgICAgIGgxIHtcbiAgICAgICAgbWF4LXdpZHRoOiAzNTBweDtcbiAgICAgIH1cblxuICAgICAgcCB7XG4gICAgICAgIGNvbG9yOiByZ2JhKHdoaXRlLCAuOSk7XG4gICAgICAgIG1heC13aWR0aDogNDc1cHg7XG4gICAgICAgIGxldHRlci1zcGFjaW5nOiAtLjAzZW07XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjVlbTtcbiAgICAgICAgZm9udC1zaXplOiAyMHB4O1xuXG4gICAgICAgIHN0cm9uZyB7XG4gICAgICAgICAgY29sb3I6IHJnYmEod2hpdGUsIDEpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC5idG5zIHtcbiAgICAgICAgbWFyZ2luLXRvcDogMzJweDtcblxuICAgICAgICAuYnRuIHtcbiAgICAgICAgICBmb250LXNpemU6IDE2cHg7XG4gICAgICAgICAgZm9udC13ZWlnaHQ6IDcwMDtcblxuICAgICAgICAgICYucGluayB7XG4gICAgICAgICAgICBiYWNrZ3JvdW5kOiAjZTMzNzY2O1xuICAgICAgICAgICAgbWFyZ2luLXJpZ2h0OiA5cHg7XG4gICAgICAgICAgICBwYWRkaW5nOiAxMnB4IDE5cHggMTJweDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAmLndoaXRlICB7XG4gICAgICAgICAgICBjb2xvcjogI2UzMzc2NjtcbiAgICAgICAgICAgIHBhZGRpbmc6IDEycHggMTlweCAxMnB4O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIEBtZWRpYSAobWF4LXdpZHRoOiAkc2NyZWVuLXhzLW1heCkgIHtcbiAgICAgIGhncm91cDpiZWZvcmUge1xuICAgICAgICBsZWZ0OiA1MCU7XG4gICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgtNDBweCk7XG4gICAgICB9XG4gICAgICBoZ3JvdXAsXG4gICAgICAuYnRucyB7XG4gICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICAgIH1cbiAgICAgIGhncm91cCxcbiAgICAgIGhncm91cCBoMSB7XG4gICAgICAgIG1hcmdpbi1sZWZ0OiBhdXRvO1xuICAgICAgICBtYXJnaW4tcmlnaHQ6IGF1dG87XG4gICAgICB9XG4gICAgfVxuXG4gICAgLmdyYXBoaWNzIHtcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgIHRvcDogMDtcbiAgICAgIHJpZ2h0OiAwO1xuICAgICAgYm90dG9tOiAwO1xuICAgICAgd2lkdGg6IDUwJTtcbiAgICAgIHotaW5kZXg6IDE7XG4gICAgfVxuXG4gICAgLmNsb3VkIHtcbiAgICAgIG9wYWNpdHk6IDA7XG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICB0b3A6IDIwMHB4O1xuICAgICAgbGVmdDogLTIwMHB4O1xuICAgICAgd2lkdGg6IDM0NnB4O1xuICAgICAgaGVpZ2h0OiAzMTJweDtcbiAgICAgIGFuaW1hdGlvbjogNDBzIGZsb2F0aW5nQ2xvdWQgbGluZWFyIGluZmluaXRlO1xuICAgICAgei1pbmRleDogNTtcblxuICAgICAgJjo6YmVmb3JlIHtcbiAgICAgICAgYmFja2dyb3VuZDogdXJsKCcvaW1nL3Byby9wYWNrYWdlL3BhY2thZ2UtaGVyby1jbG91ZC5wbmcnKSBuby1yZXBlYXQgMCAwO1xuICAgICAgICBiYWNrZ3JvdW5kLXNpemU6IDM0NnB4O1xuICAgICAgICB0b3A6IDA7XG4gICAgICAgIGJvdHRvbTogMDtcbiAgICAgICAgcmlnaHQ6IDA7XG4gICAgICAgIGxlZnQ6IDA7XG4gICAgICAgIGNvbnRlbnQ6ICcnO1xuICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICB9XG5cbiAgICAgIC5idWlsZCB7XG4gICAgICAgIGJhY2tncm91bmQ6IHVybCgnL2ltZy9wcm8vcGFja2FnZS9wYWNrYWdlLWhlcm8tYXBwLWljb24ucG5nJykgbm8tcmVwZWF0IDAgMDtcbiAgICAgICAgYmFja2dyb3VuZC1zaXplOiA4N3B4O1xuICAgICAgICB3aWR0aDogODdweDtcbiAgICAgICAgaGVpZ2h0OiAxMTZweDtcbiAgICAgICAgY29udGVudDogJyc7XG4gICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgdG9wOiAzMHB4O1xuICAgICAgICBsZWZ0OiAyMHB4O1xuICAgICAgICBhbmltYXRpb246IDEwcyByYWluRHJvcCBsaW5lYXIgaW5maW5pdGU7XG4gICAgICAgIHotaW5kZXg6IDY7XG5cbiAgICAgICAgJjpudGgtY2hpbGQoMikge1xuICAgICAgICAgIHRvcDogMTY2cHg7XG4gICAgICAgICAgbGVmdDogMjIwcHg7XG4gICAgICAgICAgYW5pbWF0aW9uLWRlbGF5OiAuOHM7XG4gICAgICAgICAgYW5pbWF0aW9uLWR1cmF0aW9uOiA4cztcbiAgICAgICAgfVxuXG4gICAgICAgICY6bnRoLWNoaWxkKDMpIHtcbiAgICAgICAgICB0b3A6IDMzcHg7XG4gICAgICAgICAgbGVmdDogMTMwcHg7XG4gICAgICAgICAgYW5pbWF0aW9uLWRlbGF5OiAxLjhzO1xuICAgICAgICAgIGFuaW1hdGlvbi1kdXJhdGlvbjogOXM7XG4gICAgICAgIH1cblxuICAgICAgICAmOm50aC1jaGlsZCg0KSB7XG4gICAgICAgICAgdG9wOiA1MHB4O1xuICAgICAgICAgIGxlZnQ6IDYwcHg7XG4gICAgICAgICAgYW5pbWF0aW9uLWRlbGF5OiAyLjhzO1xuICAgICAgICAgIGFuaW1hdGlvbi1kdXJhdGlvbjogMTJzO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgICY6bnRoLWNoaWxkKDIpIHtcbiAgICAgICAgdG9wOiAwO1xuICAgICAgICBsZWZ0OiAwO1xuICAgICAgICB0cmFuc2Zvcm06IHNjYWxlM2QoLjUsLjUsMSk7XG4gICAgICAgIGFuaW1hdGlvbi1uYW1lOiBmbG9hdGluZ0Nsb3VkLTI7XG4gICAgICAgIGFuaW1hdGlvbi1kdXJhdGlvbjogNjBzO1xuICAgICAgICBhbmltYXRpb24tZGVsYXk6IDEwcztcbiAgICAgICAgei1pbmRleDogMTtcblxuICAgICAgICAuYnVpbGQge1xuICAgICAgICAgIHotaW5kZXg6IDI7XG4gICAgICAgICAgYW5pbWF0aW9uLWRlbGF5OiAxcztcblxuICAgICAgICAgICY6bnRoLWNoaWxkKDIpIHthbmltYXRpb24tZGVsYXk6IDJzO31cbiAgICAgICAgICAmOm50aC1jaGlsZCgzKSB7YW5pbWF0aW9uLWRlbGF5OiAzczt9XG4gICAgICAgICAgJjpudGgtY2hpbGQoNCkge2FuaW1hdGlvbi1kZWxheTogNHM7fVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgICY6bnRoLWNoaWxkKDMpIHtcbiAgICAgICAgdG9wOiAxMHB4O1xuICAgICAgICBsZWZ0OiAtMTUwcHg7XG4gICAgICAgIGFuaW1hdGlvbi1uYW1lOiBmbG9hdGluZ0Nsb3VkLTM7XG4gICAgICAgIGFuaW1hdGlvbi1kdXJhdGlvbjogNTBzO1xuICAgICAgICBhbmltYXRpb24tZGVsYXk6IDJzO1xuICAgICAgICB6LWluZGV4OiAzO1xuXG4gICAgICAgIC5idWlsZCB7XG4gICAgICAgICAgei1pbmRleDogNDtcbiAgICAgICAgICBhbmltYXRpb24tZGVsYXk6IC4xcztcblxuICAgICAgICAgICY6bnRoLWNoaWxkKDIpIHthbmltYXRpb24tZGVsYXk6IC4yczt9XG4gICAgICAgICAgJjpudGgtY2hpbGQoMykge2FuaW1hdGlvbi1kZWxheTogLjNzO31cbiAgICAgICAgICAmOm50aC1jaGlsZCg0KSB7YW5pbWF0aW9uLWRlbGF5OiAuNHM7fVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgICY6bnRoLWNoaWxkKDQpIHtcbiAgICAgICAgdG9wOiAzMDBweDtcbiAgICAgICAgbGVmdDogLTI1MHB4O1xuICAgICAgICBhbmltYXRpb24tbmFtZTogZmxvYXRpbmdDbG91ZC00O1xuICAgICAgICBhbmltYXRpb24tZHVyYXRpb246IDMwcztcbiAgICAgICAgYW5pbWF0aW9uLWRlbGF5OiAycztcbiAgICAgICAgei1pbmRleDogMztcblxuICAgICAgICAuYnVpbGQge1xuICAgICAgICAgIHotaW5kZXg6IDQ7XG4gICAgICAgICAgYW5pbWF0aW9uLWRlbGF5OiAuMXM7XG5cbiAgICAgICAgICAmOm50aC1jaGlsZCgyKSB7YW5pbWF0aW9uLWRlbGF5OiAuMnM7fVxuICAgICAgICAgICY6bnRoLWNoaWxkKDMpIHthbmltYXRpb24tZGVsYXk6IC4zczt9XG4gICAgICAgICAgJjpudGgtY2hpbGQoNCkge2FuaW1hdGlvbi1kZWxheTogLjRzO31cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC5mZWF0dXJlcyB7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIHotaW5kZXg6IDEwO1xuICAgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCh0byByaWdodCwgI2VmZGRmZiAwLCNmZmUzZTQgMTAwJSk7XG5cbiAgICAvLyBjb29sIGJsdXIgZWZmZWN0IGluIHdlYmtpdFxuICAgIEBzdXBwb3J0cyAoYmFja2Ryb3AtZmlsdGVyOiBibHVyKDEwcHgpKSB7XG4gICAgICBiYWNrZHJvcC1maWx0ZXI6IGJsdXIoMTBweCk7XG4gICAgICBiYWNrZ3JvdW5kOiByZ2JhKHdoaXRlLC42KTtcbiAgICB9XG5cbiAgICB1bCB7XG4gICAgICBwYWRkaW5nOiA3MXB4IDBweCA0NXB4O1xuXG4gICAgICBAbWVkaWEgKG1heC13aWR0aDogJHNjcmVlbi14cy1tYXgpICB7XG4gICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgfVxuICAgIH1cblxuICAgIGxpIHtcbiAgICAgIGZsZXg6IDAgMSAzMTVweDtcblxuICAgICAgQG1lZGlhIChtYXgtd2lkdGg6ICRzY3JlZW4tbWQtbWF4KSAge1xuICAgICAgICBmbGV4OiAwIDEgMzAzcHg7XG4gICAgICB9XG5cbiAgICAgICY6OmJlZm9yZSB7XG4gICAgICAgIGJhY2tncm91bmQtaW1hZ2U6IHVybCgnL2ltZy9wcm8vcGFja2FnZS9mZWF0dXJlLWljb25zLXNtLnBuZycpO1xuICAgICAgICBiYWNrZ3JvdW5kLXNpemU6IDQ4cHg7XG4gICAgICB9XG5cbiAgICAgICYuemVybzo6YmVmb3JlIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogMCAtNDhweDsgfVxuICAgICAgJi5wZWFjZTo6YmVmb3JlIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogMCAtOTZweDsgfVxuICAgIH1cblxuICAgIHAge1xuICAgICAgbGV0dGVyLXNwYWNpbmc6IC0wLjAyZW07XG4gICAgICBtYXJnaW4tdG9wOiAycHg7XG4gICAgICBtYXJnaW4tcmlnaHQ6IDVweDtcbiAgICB9XG4gIH1cblxuICBtYWluIHtcbiAgICBtYXJnaW4tdG9wOiAtMTQ0cHg7XG4gIH1cblxuICAudHVybiB7XG4gICAgYmFja2dyb3VuZDogI2Y4ZjVmYjtcblxuICAgIGhncm91cCB7XG4gICAgICBtYXgtd2lkdGg6IDc0MHB4O1xuICAgICAgcGFkZGluZy10b3A6IDEwMHB4O1xuICAgICAgcGFkZGluZy1ib3R0b206IDQyM3B4O1xuXG4gICAgICBAbWVkaWEgKG1heC13aWR0aDogJHNjcmVlbi1tZC1tYXgpICB7XG4gICAgICAgIHBhZGRpbmctYm90dG9tOiAzMTRweDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBwIHtcbiAgICAgIG1hcmdpbi10b3A6IDMwcHg7XG4gICAgfVxuXG4gICAgLmNvbnRhaW5lciB7XG4gICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgfVxuXG4gICAgLmdyYXBoaWNzIHtcbiAgICAgIHdpZHRoOiAxMDU2cHg7XG4gICAgICBoZWlnaHQ6IDQwMXB4O1xuICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgYm90dG9tOiAwO1xuICAgICAgbGVmdDogY2FsYyg1MCUgLSA1NDRweCk7XG5cbiAgICAgIC5odG1sIHtcbiAgICAgICAgYmFja2dyb3VuZDogbm8tcmVwZWF0IDAgMCB1cmwoJy9pbWcvcHJvL3BhY2thZ2UvcGFja2FnZS1pbWctY3NzLWZpbGUucG5nJyk7XG4gICAgICAgIGJhY2tncm91bmQtc2l6ZTogMTUwcHg7XG4gICAgICAgIHdpZHRoOiAxNTBweDtcbiAgICAgICAgaGVpZ2h0OiAxODBweDtcbiAgICAgICAgY29udGVudDogJyc7XG4gICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgbGVmdDogLTNweDtcbiAgICAgICAgdG9wOiA3NnB4O1xuXG4gICAgICAgICY6OmJlZm9yZSxcbiAgICAgICAgJjo6YWZ0ZXIge1xuICAgICAgICAgIGJhY2tncm91bmQ6IG5vLXJlcGVhdCAwIDAgdXJsKCcvaW1nL3Byby9wYWNrYWdlL3BhY2thZ2UtaW1nLWh0bWwtZmlsZS5wbmcnKTtcbiAgICAgICAgICBiYWNrZ3JvdW5kLXNpemU6IDE1MHB4O1xuICAgICAgICAgIHdpZHRoOiAxNTBweDtcbiAgICAgICAgICBoZWlnaHQ6IDE4MHB4O1xuICAgICAgICAgIGNvbnRlbnQ6ICcnO1xuICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgICBsZWZ0OiA2N3B4O1xuICAgICAgICAgIHRvcDogNXB4O1xuICAgICAgICB9XG5cbiAgICAgICAgJjo6YWZ0ZXIge1xuICAgICAgICAgIGJhY2tncm91bmQtaW1hZ2U6IHVybCgnL2ltZy9wcm8vcGFja2FnZS9wYWNrYWdlLWltZy1qcy1maWxlLnBuZycpO1xuICAgICAgICAgIGJhY2tncm91bmQtc2l6ZTogMTUwcHg7XG4gICAgICAgICAgbGVmdDogMTM3cHg7XG4gICAgICAgICAgdG9wOiAtMnB4O1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC5hcHAge1xuICAgICAgICBiYWNrZ3JvdW5kOiBuby1yZXBlYXQgMCAwIHVybCgnL2ltZy9wcm8vcGFja2FnZS9wYWNrYWdlLWltZy1pcGEtZmlsZS5wbmcnKTtcbiAgICAgICAgYmFja2dyb3VuZC1zaXplOiAxNTBweDtcbiAgICAgICAgd2lkdGg6IDE1MHB4O1xuICAgICAgICBoZWlnaHQ6IDE4MHB4O1xuICAgICAgICBjb250ZW50OiAnJztcbiAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICBsZWZ0OiA5MTJweDtcbiAgICAgICAgdG9wOiA4MXB4O1xuXG4gICAgICAgICY6OmJlZm9yZSB7XG4gICAgICAgICAgYmFja2dyb3VuZDogbm8tcmVwZWF0IDAgMCB1cmwoJy9pbWcvcHJvL3BhY2thZ2UvcGFja2FnZS1pbWctYXBrLWZpbGUucG5nJyk7XG4gICAgICAgICAgYmFja2dyb3VuZC1zaXplOiAxNTBweDtcbiAgICAgICAgICB3aWR0aDogMTUwcHg7XG4gICAgICAgICAgaGVpZ2h0OiAxODBweDtcbiAgICAgICAgICBjb250ZW50OiAnJztcbiAgICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgICAgbGVmdDogLTEwMHB4O1xuICAgICAgICAgIHRvcDogMnB4O1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC5jaXJjbGVzIHtcbiAgICAgICAgd2lkdGg6IDEwNTZweDtcbiAgICAgICAgbWFyZ2luOiAwIGF1dG87XG4gICAgICB9XG5cbiAgICAgIC5ib3gge1xuICAgICAgICBiYWNrZ3JvdW5kOiBuby1yZXBlYXQgMCAwIHVybCgnL2ltZy9wcm8vcGFja2FnZS9wYWNrYWdlLWltZy1zZXJ2ZXIucG5nJyk7XG4gICAgICAgIGJhY2tncm91bmQtc2l6ZTogNDYwcHg7XG4gICAgICAgIHdpZHRoOiA0NjBweDtcbiAgICAgICAgaGVpZ2h0OiA0MDJweDtcbiAgICAgICAgY29udGVudDogJyc7XG4gICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgbGVmdDogMzc1cHg7XG4gICAgICAgIHRvcDogMXB4O1xuXG4gICAgICAgICY6OmJlZm9yZSB7XG4gICAgICAgICAgYmFja2dyb3VuZDogbm8tcmVwZWF0IGNlbnRlciBjZW50ZXIgdXJsKCcvaW1nL3Byby9wYWNrYWdlL2lvbmljLXBhY2thZ2Utc2VydmVyLWxpZ2h0LmpwZy5wbmcnKTtcbiAgICAgICAgICBiYWNrZ3JvdW5kLXNpemU6IDQ1cHg7XG4gICAgICAgICAgd2lkdGg6IDQ0cHg7XG4gICAgICAgICAgaGVpZ2h0OiA0NHB4O1xuICAgICAgICAgIGNvbnRlbnQ6ICcnO1xuICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgICBsZWZ0OiAyNjJweDtcbiAgICAgICAgICB0b3A6IDk1cHg7XG4gICAgICAgICAgb3BhY2l0eTogMDtcbiAgICAgICAgICB0cmFuc2l0aW9uOiBvcGFjaXR5IC4zcztcbiAgICAgICAgfVxuXG4gICAgICAgICYuYWN0aXZlOjpiZWZvcmUge1xuICAgICAgICAgIG9wYWNpdHk6IDE7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLmNpcmNsZSB7XG4gICAgICAgIGhlaWdodDogN3B4O1xuICAgICAgICB3aWR0aDogN3B4O1xuICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgIHRvcDogMTY5cHg7XG4gICAgICAgIGxlZnQ6IDI4OHB4O1xuICAgICAgICBib3JkZXItcmFkaXVzOiA1MCU7XG4gICAgICAgIGJhY2tncm91bmQ6ICNlNWU5ZjE7XG5cbiAgICAgICAgJjo6YmVmb3JlIHtcbiAgICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgICAgdG9wOiAwO1xuICAgICAgICAgIGxlZnQ6IDA7XG4gICAgICAgICAgcmlnaHQ6IDA7XG4gICAgICAgICAgYm90dG9tOiAwO1xuICAgICAgICAgIG9wYWNpdHk6IDA7XG4gICAgICAgICAgY29udGVudDogJyc7XG4gICAgICAgICAgYm9yZGVyLXJhZGl1czogNTAlO1xuICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICRyZWQ7XG4gICAgICAgICAgdHJhbnNpdGlvbjogb3BhY2l0eSAuNnM7XG4gICAgICAgIH1cblxuICAgICAgICAmLmFjdGl2ZTo6YmVmb3JlIHtcbiAgICAgICAgICBvcGFjaXR5OiAxO1xuICAgICAgICB9XG5cbiAgICAgICAgJjpudGgtY2hpbGQoMikgeyBsZWZ0OiAzMDhweDsgfVxuICAgICAgICAmOm50aC1jaGlsZCgzKSB7IGxlZnQ6IDMyOHB4OyB9XG4gICAgICAgICY6bnRoLWNoaWxkKDQpIHsgbGVmdDogMzQ4cHg7IH1cbiAgICAgICAgJjpudGgtY2hpbGQoNSkgeyBsZWZ0OiAzNjdweDsgfVxuICAgICAgICAmOm50aC1jaGlsZCg2KSB7IGxlZnQ6IDcxMXB4OyB9XG4gICAgICAgICY6bnRoLWNoaWxkKDcpIHsgbGVmdDogNzMxcHg7IH1cbiAgICAgICAgJjpudGgtY2hpbGQoOCkgeyBsZWZ0OiA3NTBweDsgfVxuICAgICAgICAmOm50aC1jaGlsZCg5KSB7IGxlZnQ6IDc3MHB4OyB9XG4gICAgICAgICY6bnRoLWNoaWxkKDEwKSB7IGxlZnQ6IDc5MHB4OyB9XG4gICAgICB9XG5cbiAgICAgIEBtZWRpYSAobWF4LXdpZHRoOiAkc2NyZWVuLW1kLW1heCkgIHtcbiAgICAgICAgdHJhbnNmb3JtOiBzY2FsZTNkKC41LC41LDEpO1xuICAgICAgICBsZWZ0OiBjYWxjKDUwJSAtIDUyNnB4KTtcbiAgICAgIH1cblxuICAgICAgQG1lZGlhIChtYXgtd2lkdGg6ICRzY3JlZW4teHMtbWF4KSAge1xuICAgICAgICB0cmFuc2Zvcm06IHNjYWxlM2QoMC4zLCAwLjMsIDEpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC5sZWF2ZSB7XG4gICAgaGdyb3VwIHtcbiAgICAgIHdpZHRoOiBjYWxjKDUwJSAtIDEzMHB4KTtcbiAgICAgIHBhZGRpbmctdG9wOiAxMDBweDtcbiAgICAgIHBhZGRpbmctYm90dG9tOiAxMDBweDtcblxuICAgICAgQG1lZGlhIChtYXgtd2lkdGg6ICRzY3JlZW4teHMtbWF4KSAge1xuICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgICAgfVxuICAgIH1cblxuICAgIGgyIHtcbiAgICAgIGxldHRlci1zcGFjaW5nOiAtLjAxNWVtO1xuICAgICAgbWFyZ2luLWJvdHRvbTogMzFweDtcbiAgICB9XG5cbiAgICBwIHtcbiAgICAgIGZvbnQtc2l6ZTogMTZweDtcbiAgICAgIGxldHRlci1zcGFjaW5nOiAtMC4wMmVtO1xuICAgICAgbGluZS1oZWlnaHQ6IDEuOGVtO1xuICAgICAgbWFyZ2luLWJvdHRvbTogMThweDtcbiAgICAgIGNvbG9yOiAjNWU2Nzc3O1xuXG4gICAgICBzdHJvbmcge1xuICAgICAgICBmb250LXdlaWdodDogNjAwO1xuICAgICAgfVxuICAgIH1cblxuICAgIC5jb250YWluZXIge1xuICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcblxuICAgICAgJjo6YWZ0ZXIge1xuICAgICAgICBiYWNrZ3JvdW5kOiB1cmwoJy9pbWcvcHJvL3BhY2thZ2UvZmxvYXRpbmctYXBwLWljb25zLnBuZycpIDAgMCBuby1yZXBlYXQ7XG4gICAgICAgIGJhY2tncm91bmQtc2l6ZTogNjgycHg7XG4gICAgICAgIHdpZHRoOiA2ODJweDtcbiAgICAgICAgaGVpZ2h0OiA2NTBweDtcbiAgICAgICAgY29udGVudDogJyc7XG4gICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgdG9wOiAtOTZweDtcbiAgICAgICAgcmlnaHQ6IDA7XG4gICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lO1xuICAgICAgfVxuICAgIH1cblxuICAgIEBtZWRpYSAobWF4LXdpZHRoOiAkc2NyZWVuLXNtLW1heCkgIHtcbiAgICAgIGhncm91cCB7XG4gICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgICB9XG5cbiAgICAgIC5jb250YWluZXI6OmFmdGVyIHtcbiAgICAgICAgb3BhY2l0eTogLjU7XG4gICAgICB9XG4gICAgfVxuXG4gIH1cblxuICAuZ2V0LXN0YXJ0ZWQge1xuICAgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCh0byByaWdodCwgI2M2OTZmOCAwJSwgI2ZjYTVhNyAxMDAlKTtcblxuICAgICBoMiB7XG4gICAgICAgbWFyZ2luLWJvdHRvbTogN3B4O1xuICAgICB9XG5cbiAgICAgcCB7XG4gICAgICBjb2xvcjogIzYwMWJhYTtcblxuICAgICAgc3Ryb25nIHtcbiAgICAgICAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAuYnRuIHtcbiAgICAgIHBhZGRpbmc6IDEycHggMTlweCAxMHB4O1xuICAgICAgZm9udC1zaXplOiAxNnB4O1xuICAgICAgbGV0dGVyLXNwYWNpbmc6IC0uMDJlbTtcbiAgICAgIGZvbnQtd2VpZ2h0OiA3MDA7XG5cbiAgICAgICYucGluayB7XG4gICAgICAgIGJhY2tncm91bmQ6ICNmMzQ5NzE7XG4gICAgICAgIG1hcmdpbi1yaWdodDogMnB4O1xuICAgICAgfVxuXG4gICAgICAmLndoaXRlIHtcbiAgICAgICAgYmFja2dyb3VuZDogd2hpdGU7XG4gICAgICAgIGNvbG9yOiAjZTkzNjc3O1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuIiwiI3BhZ2UtcHJvZHVjdHMtZm9yLXRlYW1zIHtcblxuICBtYWluLFxuICAuc3ViLWhlYWRlcixcbiAgLmN0YSB7XG4gICAgZm9udC1mYW1pbHk6ICRmb250LWZhbWlseS1laW5hO1xuICB9XG5cbiAgLnN1Yi1oZWFkZXIgPiAuY29udGFpbmVyIHtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICB9XG5cbiAgLmN0YSB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogIzEyMjIzYTtcbiAgICBiYWNrZ3JvdW5kLWltYWdlOlxuICAgICAgdXJsKCcvaW1nL3Byby90ZWFtcy1oZXJvLWJnLmpwZycpLFxuICAgICAgbGluZWFyLWdyYWRpZW50KDEyMGRlZywgIzEyMjIzYSwgIzAwMGExYyk7XG4gICAgYmFja2dyb3VuZC1zaXplOiBjb3ZlciwgMTAwJTtcbiAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiA1MCUgNTAlO1xuICAgIG1hcmdpbi10b3A6IC0xMzZweDtcbiAgICBwYWRkaW5nLXRvcDogMTM2cHg7XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgfVxuXG4gIC5jdGEgaGdyb3VwIHtcbiAgICBwYWRkaW5nLWJvdHRvbTogMTE0cHg7XG4gIH1cblxuICAuY3RhIGgxIHtcbiAgICBmb250LXNpemU6IDQ4cHg7XG4gICAgZm9udC13ZWlnaHQ6IDcwMDtcbiAgICBtYXJnaW4tdG9wOiAzMHB4O1xuICB9XG5cbiAgLmN0YSBwIHtcbiAgICBjb2xvcjogI2EwYWJiZjtcbiAgICBmb250LXdlaWdodDogNjAwO1xuICB9XG5cbiAgLmN0YSBwIHN0cm9uZyB7XG4gICAgY29sb3I6ICNjY2Q0ZTM7XG4gIH1cblxuICAuY3RhLWJ1dHRvbnMge1xuICAgIG1hcmdpbi10b3A6IDUwcHg7XG4gIH1cblxuICAuY3RhIC5idG4ge1xuICAgIGNvbG9yOiAjZmZmZmZmO1xuICAgIGZvbnQtc2l6ZTogMTZweDtcbiAgICBmb250LXdlaWdodDogNzAwO1xuICAgIHBhZGRpbmc6IDE0cHggMjRweDtcblxuICAgICYuc2Vjb25kYXJ5IHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6ICMyMTMxNGU7XG4gICAgfVxuICB9XG5cbiAgLmN0YSAubG9nby1maWVsZCB7XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGhlaWdodDogMTIwcHg7XG4gICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG5cbiAgICAmOjpiZWZvcmUge1xuICAgICAgYmFja2dyb3VuZC1pbWFnZTpcbiAgICAgICAgbGluZWFyLWdyYWRpZW50KHJnYmEoMjAwLCAyMjUsIDI1NSwgMC4wOCksIHJnYmEoMjAwLCAyMjAsIDI1NSwgMC4wOCkpLFxuICAgICAgICB1cmwoL2ltZy9wcm8vdGVhbXMtaGVyby1iZy5qcGcpO1xuICAgICAgYmFja2dyb3VuZC1zaXplOiAxMDAlLCBjb3ZlcjtcbiAgICAgIGJhY2tncm91bmQtcG9zaXRpb246IDUwJSA1MCUsIDUwJSA1MCU7XG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICBjb250ZW50OiAnJztcbiAgICAgIHRvcDogY2FsYygxMDAlIC0gNjYxcHgpO1xuICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICBoZWlnaHQ6IDY2MXB4O1xuICAgICAgZmlsdGVyOiBibHVyKDI0cHgpO1xuICAgIH1cblxuICAgIGltZyB7XG4gICAgICBtYXgtd2lkdGg6IDg5NXB4O1xuICAgICAgd2lkdGg6IDgwJTtcbiAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICB9XG5cbiAgICBAbWVkaWEgKG1heC13aWR0aDogJHNjcmVlbi1zbSkge1xuICAgICAgZGlzcGxheTogbm9uZTtcbiAgICB9XG4gIH1cblxuICAuaGVybyB7XG4gICAgYmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdDtcbiAgICBwYWRkaW5nOiAyNjBweCAwO1xuXG4gICAgQG1lZGlhIChtYXgtd2lkdGg6ICRzY3JlZW4tbGcpIHtcbiAgICAgIHBhZGRpbmc6IDIwJSAwO1xuICAgIH1cbiAgfVxuXG4gIC5oZXJvIC5jb250YWluZXIge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgfVxuXG4gIC5oZXJvLmZsaXBwZWQgLmNvbnRhaW5lciB7XG4gICAgYWxpZ24taXRlbXM6IGZsZXgtZW5kO1xuICB9XG5cbiAgLmhlcm9fX2NvbnRlbnQge1xuICAgIHdpZHRoOiA0MCU7XG5cbiAgICBAbWVkaWEgKG1heC13aWR0aDogJHNjcmVlbi1zbSkge1xuICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgICAgd2lkdGg6IDEwMCU7XG4gICAgfVxuICB9XG5cbiAgLmhlcm9fX2ljb24ge1xuICAgIGJhY2tncm91bmQtaW1hZ2U6IHVybChcIi9pbWcvcHJvL3RlYW1zLWZlYXR1cmUtaWNvbnMucG5nXCIpO1xuICAgIGJhY2tncm91bmQtcG9zaXRpb246IHRvcCBjZW50ZXI7XG4gICAgYmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdDtcbiAgICBiYWNrZ3JvdW5kLXNpemU6IDEwMCU7XG4gICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgIGhlaWdodDogNjRweDtcbiAgICBtYXJnaW4tYm90dG9tOiA0MHB4O1xuICAgIHdpZHRoOiA2NHB4O1xuXG4gICAgQG1lZGlhIChtYXgtd2lkdGg6ICRzY3JlZW4tc20pIHtcbiAgICAgIG1hcmdpbi1ib3R0b206IDIwcHg7XG4gICAgfVxuICB9XG5cbiAgLnNoaXAgLmhlcm9fX2ljb24ge1xuICAgIGJhY2tncm91bmQtcG9zaXRpb24teTogMDtcbiAgfVxuXG4gIC5saXN0ZW4gLmhlcm9fX2ljb24ge1xuICAgIGJhY2tncm91bmQtcG9zaXRpb24teTogLTY0cHg7XG4gIH1cblxuICAuY29sbGFib3JhdGUgLmhlcm9fX2ljb24ge1xuICAgIGJhY2tncm91bmQtcG9zaXRpb24teTogLTEyOHB4O1xuICB9XG5cbiAgLmhlcm8gaDIge1xuICAgIGNvbG9yOiAjOWFhYWMxO1xuICAgIGZvbnQtc2l6ZTogMzZweDtcbiAgICBmb250LXdlaWdodDogNzAwO1xuICAgIGxldHRlci1zcGFjaW5nOiAtMC4wM2VtO1xuICAgIGxpbmUtaGVpZ2h0OiA0NnB4O1xuICAgIG1hcmdpbi1ib3R0b206IDFlbTtcbiAgfVxuXG4gIC5oZXJvIGgyIHN0cm9uZyB7XG4gICAgY29sb3I6ICMyNDI4MmU7XG4gIH1cblxuICAuaGVybyBwIHtcbiAgICBjb2xvcjogIzUwNTg2MztcbiAgICBmb250LXNpemU6IDE4cHg7XG4gICAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgfVxuXG4gIC5zaGlwIHtcbiAgICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXCIvaW1nL3Byby90ZWFtcy1zaGlwLWhlcm8uanBnXCIpO1xuICAgIGJhY2tncm91bmQtcG9zaXRpb246IHJpZ2h0IGNlbnRlcjtcbiAgICBiYWNrZ3JvdW5kLXNpemU6IDgxMXB4O1xuICB9XG5cbiAgLmxpc3RlbiB7XG4gICAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFwiL2ltZy9wcm8vdGVhbXMtbGlzdGVuLWhlcm8ucG5nXCIpO1xuICAgIGJhY2tncm91bmQtcG9zaXRpb246IGxlZnQgY2VudGVyO1xuICAgIGJhY2tncm91bmQtc2l6ZTogODExcHg7XG4gIH1cblxuICAuY29sbGFib3JhdGUge1xuICAgIGJhY2tncm91bmQtaW1hZ2U6IHVybChcIi9pbWcvcHJvL3RlYW1zLWNvbGxhYm9yYXRlLWhlcm8uanBnXCIpO1xuICAgIGJhY2tncm91bmQtcG9zaXRpb246IHJpZ2h0IGNlbnRlcjtcbiAgICBiYWNrZ3JvdW5kLXNpemU6IDgxMXB4O1xuICB9XG5cbiAgLnNoaXAsXG4gIC5jb2xsYWJvcmF0ZSB7XG4gICAgQG1lZGlhIChtaW4td2lkdGg6ICRzY3JlZW4tc20pIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogY2VudGVyIHJpZ2h0IC00MDBweDsgfVxuICAgIEBtZWRpYSAobWluLXdpZHRoOiAkc2NyZWVuLWxnKSB7IGJhY2tncm91bmQtcG9zaXRpb246IGNlbnRlciByaWdodCAtMTUwcHg7IH1cbiAgICBAbWVkaWEgKG1pbi13aWR0aDogMTQwMHB4KSB7IGJhY2tncm91bmQtcG9zaXRpb246IGNlbnRlciByaWdodCAtNTBweDsgfVxuICB9XG5cbiAgLmxpc3RlbiB7XG4gICAgQG1lZGlhIChtaW4td2lkdGg6ICRzY3JlZW4tc20pIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogY2VudGVyIGxlZnQgLTM1MHB4OyB9XG4gICAgQG1lZGlhIChtaW4td2lkdGg6ICRzY3JlZW4tbGcpIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogY2VudGVyIGxlZnQgLTE1MHB4OyB9XG4gICAgQG1lZGlhIChtaW4td2lkdGg6IDE0MDBweCkgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiBjZW50ZXIgbGVmdCAtNTBweDsgfVxuICB9XG5cbiAgLnNoaXAsXG4gIC5saXN0ZW4sXG4gIC5jb2xsYWJvcmF0ZSB7XG4gICAgQG1lZGlhIChtYXgtd2lkdGg6ICRzY3JlZW4tc20pIHtcbiAgICAgIGJhY2tncm91bmQtaW1hZ2U6IG5vbmU7XG4gICAgICBwYWRkaW5nOiA2MHB4IDA7XG4gICAgfVxuICB9XG5cbiAgLmZlYXR1cmVzIHtcbiAgICBwYWRkaW5nOiAxMDBweCAwO1xuICB9XG5cbiAgLmZlYXR1cmVzIC5oZXJvX19jb250ZW50IHtcbiAgICBAbWVkaWEgKG1pbi13aWR0aDogJHNjcmVlbi1zbSkge1xuICAgICAgd2lkdGg6IDcwJTtcbiAgICB9XG4gIH1cblxuICAuZmVhdHVyZXMgaDMge1xuICAgIGNvbG9yOiAjMjQyODJlO1xuICAgIGZvbnQtc2l6ZTogMjBweDtcbiAgICBmb250LXdlaWdodDogNzAwO1xuICAgIG1hcmdpbi1ib3R0b206IDIwcHg7XG4gIH1cblxuICAuZmVhdHVyZXMgcCB7XG4gICAgY29sb3I6ICM3NDdmOTI7XG4gICAgZm9udC1zaXplOiAxNnB4O1xuICAgIGxpbmUtaGVpZ2h0OiAxLjY7XG4gIH1cblxuICAuZmVhdHVyZXMgLmhlcm9fX2ljb24ge1xuICAgIGJhY2tncm91bmQtaW1hZ2U6IHVybChcIi9pbWcvcHJvL3RlYW1zLXN1YmZlYXR1cmUtaWNvbnMucG5nXCIpO1xuICAgIGhlaWdodDogNDhweDtcbiAgICBtYXJnaW4tYm90dG9tOiAwO1xuICAgIHdpZHRoOiA0OHB4O1xuXG4gICAgJi5zaGFyaW5nIHsgYmFja2dyb3VuZC1wb3NpdGlvbi15OiAwOyB9XG4gICAgJi5jaSB7IGJhY2tncm91bmQtcG9zaXRpb24teTogLTQ4cHggKiAxOyB9XG4gICAgJi5mZWVkIHsgYmFja2dyb3VuZC1wb3NpdGlvbi15OiAtNDhweCAqIDI7IH1cbiAgICAmLmNvbGxhYiB7IGJhY2tncm91bmQtcG9zaXRpb24teTogLTQ4cHggKiAzOyB9XG4gICAgJi5iaW5hcmllcyB7IGJhY2tncm91bmQtcG9zaXRpb24teTogLTQ4cHggKiA0OyB9XG4gICAgJi5jaGFubmVscyB7IGJhY2tncm91bmQtcG9zaXRpb24teTogLTQ4cHggKiA1OyB9XG4gICAgJi5jZCB7IGJhY2tncm91bmQtcG9zaXRpb24teTogLTQ4cHggKiA2OyB9XG4gICAgJi5tb25pdG9yaW5nIHsgYmFja2dyb3VuZC1wb3NpdGlvbi15OiAtNDhweCAqIDc7IH1cbiAgICAmLnJhcGlkIHsgYmFja2dyb3VuZC1wb3NpdGlvbi15OiAtNDhweCAqIDg7IH1cbiAgfVxuXG4gIC5mZWF0dXJlc19fbGlzdCB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBmbGV4LXdyYXA6IHdyYXA7XG4gICAgbGlzdC1zdHlsZTogbm9uZTtcbiAgICBtYXJnaW46IDcwcHggMCAwO1xuICAgIHBhZGRpbmc6IDA7XG4gIH1cblxuICAuZmVhdHVyZXNfX2xpc3QgbGkge1xuICAgIGZsZXg6IDAgMCAzMy4zMyU7XG4gICAgcGFkZGluZy1ib3R0b206IDRlbTtcbiAgICBwYWRkaW5nLXJpZ2h0OiA0ZW07XG5cbiAgICBAbWVkaWEgKG1heC13aWR0aDogJHNjcmVlbi1tZCkge1xuICAgICAgZmxleDogMCAwIDUwJTtcbiAgICB9XG5cbiAgICBAbWVkaWEgKG1heC13aWR0aDogJHNjcmVlbi1zbSkge1xuICAgICAgZmxleDogMCAwIDEwMCU7XG4gICAgICBwYWRkaW5nLXJpZ2h0OiAwO1xuICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgIH1cbiAgfVxuXG4gIC5xdW90ZXMge1xuICAgIGNvbG9yOiAjZmZmZmZmO1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgZm9udC1zaXplOiAyMHB4O1xuICAgIGZvbnQtd2VpZ2h0OiA2MDA7XG4gICAgbGV0dGVyLXNwYWNpbmc6IC0wLjAxZW07XG5cbiAgICBAbWVkaWEgKG1heC13aWR0aDogJHNjcmVlbi1zbSkge1xuICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICB9XG4gIH1cblxuICAucXVvdGVzX19jb250ZW50IHtcbiAgICBtYXgtd2lkdGg6IDQ5MHB4O1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgfVxuXG4gIC5xdW90ZXNfX25hcGEsXG4gIC5xdW90ZXNfX2htYiB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBmbGV4OiAxO1xuICAgIHBhZGRpbmc6IDgwcHg7XG5cbiAgICBAbWVkaWEgKG1heC13aWR0aDogJHNjcmVlbi14cykge1xuICAgICAgcGFkZGluZzogNDBweDtcbiAgICB9XG4gIH1cblxuICAucXVvdGVzX19uYXBhIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjNmI1NmQ0O1xuICAgIGp1c3RpZnktY29udGVudDogZmxleC1lbmQ7XG5cbiAgICBAbWVkaWEgKG1heC13aWR0aDogJHNjcmVlbi1zbSkge1xuICAgICAganVzdGlmeS1jb250ZW50OiBmbGV4LXN0YXJ0O1xuICAgIH1cbiAgfVxuXG4gIC5xdW90ZXNfX25hcGEgLmNhc2Utc3R1ZHktcGlsbCB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogIzU2MzVjMjtcbiAgICBib3JkZXItcmFkaXVzOiAyMHB4O1xuICAgIGNvbG9yOiByZ2JhKDI1NSwyNTUsMjU1LDAuNik7XG4gICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgIGZvbnQtc2l6ZTogMTJweDtcbiAgICBsaW5lLWhlaWdodDogMTtcbiAgICBtYXJnaW4tYm90dG9tOiAzMHB4O1xuICAgIHBhZGRpbmc6IDdweCAxMHB4IDZweDtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgcmlnaHQ6IDA7XG4gICAgdG9wOiA3cHg7XG4gICAgdHJhbnNpdGlvbjogY29sb3IgMjAwbXMgZWFzZS1pbi1vdXQ7XG5cbiAgICBzdHJvbmcge1xuICAgICAgZm9udC13ZWlnaHQ6IGluaGVyaXQ7XG4gICAgICBjb2xvcjogI2ZmZmZmZjtcbiAgICB9XG5cbiAgICAmOmFmdGVyIHtcbiAgICAgIGNvbnRlbnQ6IFwiIFxcMjAzYVwiO1xuICAgIH1cblxuICAgICY6aG92ZXIge1xuICAgICAgY29sb3I6ICNmZmZmZmY7XG4gICAgfVxuXG4gICAgQG1lZGlhIChtYXgtd2lkdGg6ICRzY3JlZW4tbGcpIHtcbiAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICB9XG4gIH1cblxuICAucXVvdGVzX19obWIge1xuICAgIGJhY2tncm91bmQtY29sb3I6ICM0MjRiNTg7XG4gIH1cblxuICAucXVvdGVzX19sb2dvIHtcbiAgICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXCIvaW1nL3Byby90ZWFtcy1xdW90ZS1sb2dvcy5wbmdcIik7XG4gICAgYmFja2dyb3VuZC1wb3NpdGlvbjogdG9wO1xuICAgIGJhY2tncm91bmQtc2l6ZTogMTAwJTtcbiAgICBiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0O1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIGhlaWdodDogNDBweDtcbiAgICBtYXJnaW4tYm90dG9tOiAyZW07XG4gICAgd2lkdGg6IDI2MHB4O1xuICB9XG5cbiAgLnF1b3Rlc19faG1iIC5xdW90ZXNfX2xvZ28ge1xuICAgIGJhY2tncm91bmQtcG9zaXRpb24teTogLTQwcHg7XG4gIH1cblxuICAucXVvdGVzIGJsb2NrcXVvdGUge1xuICAgIGJvcmRlcjogbm9uZTtcbiAgICBmb250LXNpemU6IGluaGVyaXQ7XG4gICAgbGluZS1oZWlnaHQ6IDEuNTtcbiAgICBtYXJnaW46IDA7XG4gICAgcGFkZGluZzogMDtcbiAgfVxuXG4gIC5xdW90ZXMgYmxvY2txdW90ZSA+IHNtYWxsIHtcbiAgICBjb2xvcjogcmdiYSgyNTUsMjU1LDI1NSwwLjYpO1xuICAgIG1hcmdpbi10b3A6IDJlbTtcbiAgICB0ZXh0LWFsaWduOiByaWdodDtcblxuICAgICY6OmJlZm9yZSB7XG4gICAgICBjb250ZW50OiBcIlwiO1xuICAgIH1cblxuICAgIHN0cm9uZyB7XG4gICAgICBmb250LXdlaWdodDogaW5oZXJpdDtcbiAgICAgIGNvbG9yOiAjZmZmZmZmO1xuICAgIH1cbiAgfVxuXG4gIC5nZXQtc3RhcnRlZCB7XG4gICAgYmFja2dyb3VuZDogIzFiMjEyYTtcbiAgICBvdmVyZmxvdzogYXV0bztcbiAgfVxuXG4gIC5nZXQtc3RhcnRlZCAuY29udGFpbmVyIHtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgbWFyZ2luLWJvdHRvbTogMTEwcHg7XG4gICAgbWFyZ2luLXRvcDogMTEwcHg7XG5cbiAgICBAbWVkaWEgKG1heC13aWR0aDogJHNjcmVlbi1zbS1tYXgpIHtcbiAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgIH1cbiAgfVxuXG4gIC5nZXQtc3RhcnRlZCBoZ3JvdXAge1xuICAgIGxldHRlci1zcGFjaW5nOiAtLjAyNWVtO1xuICAgIGZsZXgtZ3JvdzogMTtcblxuICAgIEBtZWRpYSAobWF4LXdpZHRoOiAkc2NyZWVuLXNtLW1heCkge1xuICAgICAgcGFkZGluZy1ib3R0b206IDE2cHg7XG4gICAgfVxuICB9XG5cbiAgLmdldC1zdGFydGVkIGgyIHtcbiAgICBjb2xvcjogI2ZmZmZmZjtcbiAgICBmb250LXNpemU6IDI4cHg7XG4gICAgZm9udC13ZWlnaHQ6IDcwMDtcbiAgICBsZXR0ZXItc3BhY2luZzogaW5oZXJpdDtcbiAgICBtYXJnaW46IDAgMCA1cHg7XG4gIH1cblxuICAuZ2V0LXN0YXJ0ZWQgcCB7XG4gICAgY29sb3I6ICM5OGEzYjI7XG4gICAgZm9udC1zaXplOiAyMHB4O1xuICAgIGZvbnQtd2VpZ2h0OiA2MDA7XG4gICAgbWFyZ2luOiAwO1xuICB9XG5cbiAgLmdldC1zdGFydGVkIC5idG4ge1xuICAgIGZvbnQtc2l6ZTogMTZweDtcbiAgICBmb250LXdlaWdodDogNzAwO1xuXG4gICAgJi5zZWNvbmRhcnkge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogIzNkNGI1ZjtcbiAgICB9XG4gIH1cblxufVxuIiwiI3BhZ2UtcHdhIHtcbiAgZm9udC1zaXplOiAxLjRyZW07XG5cbiAgI3NvY2lhbC1zaGFyZS1zaWRlYmFyIHtcbiAgICBsZWZ0OiAzNXB4O1xuICB9XG5cbiAgaDEsXG4gIGgyLFxuICBoMyB7XG4gICAgZm9udC13ZWlnaHQ6IDcwMDtcbiAgfVxuXG4gIC5sZWRlIHtcbiAgICBjb2xvcjogIzc0ODE5NjtcbiAgICBmb250LXNpemU6IDEuM2VtO1xuICAgIGZvbnQtd2VpZ2h0OiA2MDA7XG4gICAgbGluZS1oZWlnaHQ6IDEuNjtcbiAgICBtYXJnaW46IDFlbSBhdXRvO1xuICAgIG1heC13aWR0aDogNzJyZW07XG5cbiAgICBAbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiAkc2NyZWVuLXhzLW1heCkge1xuICAgICAgZm9udC1zaXplOiAxLjJlbTtcbiAgICB9XG4gIH1cblxuICAubGVkZSA+IHN0cm9uZyB7XG4gICAgY29sb3I6ICMzMzMzMzM7XG4gIH1cblxuICAuZXllYnJvdyB7XG4gICAgZm9udC1zaXplOiAycmVtO1xuICAgIGZvbnQtd2VpZ2h0OiA3MDA7XG4gICAgbGV0dGVyLXNwYWNpbmc6IDAuMWVtO1xuICAgIG1hcmdpbjogMWVtIDA7XG4gICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcbiAgfVxuXG4gIC5jYXJkIHtcbiAgICBib3JkZXItcmFkaXVzOiA2cHg7XG4gICAgYm94LXNoYWRvdzogMHB4IDRweCA2cHggcmdiYShibGFjaywgMC4xKSwgMHB4IDFweCAzcHggcmdiYShibGFjaywgMC4wOCk7XG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gMTAwbXMgZWFzZS1vdXQsIGJveC1zaGFkb3cgMTIwbXMgZWFzZS1vdXQ7XG5cbiAgICAmX19pbWFnZSB7XG4gICAgICBtYXgtd2lkdGg6IDEwMCU7XG4gICAgfVxuXG4gICAgJl9fY29udGVudCB7XG4gICAgICBwYWRkaW5nOiAxZW07XG4gICAgfVxuXG4gICAgJjpob3ZlciB7XG4gICAgICBib3gtc2hhZG93OiAwIDhweCAxNnB4IHJnYmEoYmxhY2ssIDAuMDgpLCAwIDNweCA2cHggcmdiYShibGFjaywgMC4wOCk7XG4gICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTJweCk7XG4gICAgfVxuICB9XG5cbiAgLnBhbmVsIHtcbiAgICBwYWRkaW5nOiA4cmVtIDRyZW07XG5cbiAgICAmX19oZWFkZXIge1xuICAgICAgbWFyZ2luLWJvdHRvbTogNnJlbTtcbiAgICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICB9XG4gIH1cblxuICAucGFuZWwgLmNvbnRhaW5lciB7XG4gICAgbWF4LXdpZHRoOiAxMTQwcHg7XG4gIH1cblxuICAuY3RhLFxuICAucGFuZWwge1xuICAgIGZvbnQtZmFtaWx5OiAkZm9udC1mYW1pbHktZWluYTtcbiAgfVxuXG4gIC8vIENUQVxuXG4gIC5jdGEge1xuICAgIGJhY2tncm91bmQtaW1hZ2U6IHVybChcIi9pbWcvcHdhL3B3YS1oZXJvLmpwZ1wiKTtcbiAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiBjZW50ZXIgY2VudGVyO1xuICAgIGJhY2tncm91bmQtc2l6ZTogY292ZXI7XG4gICAgcGFkZGluZzogMTZyZW0gMDtcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG5cbiAgICBAbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiAkc2NyZWVuLXhzLW1heCkge1xuICAgICAgbWFyZ2luLXRvcDogMDtcbiAgICAgIHBhZGRpbmctYm90dG9tOiBjYWxjKDE2cmVtIC0gNzBweCk7XG4gICAgfVxuICB9XG5cbiAgLmN0YSBoMSB7XG4gICAgZm9udC1zaXplOiAzLjQ1ZW07XG4gICAgbGV0dGVyLXNwYWNpbmc6IC0wLjAyZW07XG5cbiAgICBAbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiAkc2NyZWVuLXhzLW1heCkge1xuICAgICAgZm9udC1zaXplOiAzZW07XG4gICAgfVxuICB9XG5cbiAgLmN0YSAuZXllYnJvdyB7XG4gICAgZm9udC1zaXplOiAxLjRyZW07XG4gICAgbGV0dGVyLXNwYWNpbmc6IDAuMmVtO1xuICB9XG5cbiAgLmN0YSAubGVkZSB7XG4gICBjb2xvcjogI2NmZTFmYTtcbiAgfVxuXG4gIC5jdGEgLmxlZGUgPiBzdHJvbmcge1xuICAgIGNvbG9yOiB3aGl0ZTtcbiAgICBmb250LXdlaWdodDogaW5oZXJpdDtcbiAgfVxuXG4gIC8vIEZlYXR1cmVzXG5cbiAgLmZlYXR1cmVzIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGZsZXgtd3JhcDogd3JhcDtcbiAgICBsaXN0LXN0eWxlOiBub25lO1xuICAgIG1hcmdpbjogMCBhdXRvO1xuICAgIG1heC13aWR0aDogMTAwcmVtO1xuICAgIHBhZGRpbmc6IDA7XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICB9XG5cbiAgLmZlYXR1cmVzID4gbGkge1xuICAgIGZsZXg6IDAgMCAyNSU7XG4gICAgcGFkZGluZzogMiU7XG5cbiAgICBAbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiAkc2NyZWVuLXhzLW1heCkge1xuICAgICAgZmxleDogMCAwIDUwJTtcbiAgICB9XG4gIH1cblxuICAuZmVhdHVyZXMgaDQge1xuICAgIGZvbnQtc2l6ZTogMS4xNWVtO1xuICAgIGZvbnQtd2VpZ2h0OiA2MDA7XG4gIH1cblxuICAuZmVhdHVyZXMgcCB7XG4gICAgY29sb3I6ICM3NDgxOTY7XG4gICAgZm9udC1zaXplOiAwLjkyNWVtO1xuICAgIGZvbnQtd2VpZ2h0OiA2MDA7XG4gIH1cblxuICAuZmVhdHVyZXNfX2ljb24ge1xuICAgICRmZWF0dXJlcy1pY29uLXNpemU6IDQ4cHg7XG5cbiAgICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXCIvaW1nL3B3YS9wd2EtZmVhdHVyZS1pY29ucy5wbmdcIik7XG4gICAgYmFja2dyb3VuZC1wb3NpdGlvbjogdG9wIGxlZnQ7XG4gICAgYmFja2dyb3VuZC1zaXplOiAxMDAlO1xuICAgIGhlaWdodDogJGZlYXR1cmVzLWljb24tc2l6ZTtcbiAgICBtYXJnaW46IDAgYXV0byAycmVtO1xuICAgIHdpZHRoOiAkZmVhdHVyZXMtaWNvbi1zaXplO1xuXG4gICAgJi0tcmVsaWFibGUgICAgIHsgYmFja2dyb3VuZC1wb3NpdGlvbi15OiAwOyB9XG4gICAgJi0tZmFzdCAgICAgICAgIHsgYmFja2dyb3VuZC1wb3NpdGlvbi15OiAkZmVhdHVyZXMtaWNvbi1zaXplICogLTE7IH1cbiAgICAmLS1hY2Nlc3NpYmxlICAgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uLXk6ICRmZWF0dXJlcy1pY29uLXNpemUgKiAtMjsgfVxuICAgICYtLXdlYi1iYXNlZCAgICB7IGJhY2tncm91bmQtcG9zaXRpb24teTogJGZlYXR1cmVzLWljb24tc2l6ZSAqIC0zOyB9XG4gICAgJi0tZGlzY292ZXJhYmxlIHsgYmFja2dyb3VuZC1wb3NpdGlvbi15OiAkZmVhdHVyZXMtaWNvbi1zaXplICogLTQ7IH1cbiAgICAmLS1zbWFsbCAgICAgICAgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uLXk6ICRmZWF0dXJlcy1pY29uLXNpemUgKiAtNTsgfVxuICAgICYtLWluc3RhbnQgICAgICB7IGJhY2tncm91bmQtcG9zaXRpb24teTogJGZlYXR1cmVzLWljb24tc2l6ZSAqIC02OyB9XG4gICAgJi0tc2ltcGxlICAgICAgIHsgYmFja2dyb3VuZC1wb3NpdGlvbi15OiAkZmVhdHVyZXMtaWNvbi1zaXplICogLTc7IH1cbiAgfVxuXG4gIEBtZWRpYSBzY3JlZW4gYW5kIChtaW4td2lkdGg6ICRzY3JlZW4tbWQtbWluKSB7XG4gICAgLmZlYXR1cmVzID4gbGk6aG92ZXIge1xuICAgICAgcCxcbiAgICAgIGg0LFxuICAgICAgLmZlYXR1cmVzX19pY29uIHtcbiAgICAgICAgb3BhY2l0eTogMTtcbiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDApO1xuICAgICAgfVxuICAgIH1cbiAgICAuZmVhdHVyZXMgaDQsXG4gICAgLmZlYXR1cmVzIHAsXG4gICAgLmZlYXR1cmVzX19pY29uIHtcbiAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgyMHB4KTtcbiAgICAgIHRyYW5zaXRpb246IHRyYW5zZm9ybSAyMDBtcyBjdWJpYy1iZXppZXIoMC4xNzUsIDAuODg1LCAwLjMyLCAxLjI3NSk7XG4gICAgfVxuICAgIC5mZWF0dXJlcyBwIHtcbiAgICAgIG9wYWNpdHk6IDA7XG4gICAgfVxuICB9XG5cbiAgLy8gRXhhbXBsZXNcblxuICAuZXhhbXBsZXMge1xuICAgIGJhY2tncm91bmQtY29sb3I6ICNmNmY5ZmM7XG4gIH1cblxuICAuZXhhbXBsZXMucGFuZWwge1xuICAgIEBtZWRpYSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6ICRzY3JlZW4teHMtbWF4KSB7XG4gICAgICBwYWRkaW5nLWxlZnQ6IDFyZW07XG4gICAgICBwYWRkaW5nLXJpZ2h0OiAxcmVtO1xuICAgIH1cbiAgfVxuXG4gIC5leGFtcGxlc19fbGlzdCB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBmbGV4LXdyYXA6IHdyYXA7XG4gICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gIH1cblxuICAuZXhhbXBsZXNfX2xpc3QgPiAuY2FyZCB7XG4gICAgYm9yZGVyLXJhZGl1czogOHB4O1xuICAgIGJveC1zaGFkb3c6IDBweCAzcHggOHB4IHJnYmEoYmxhY2ssIDAuMSk7XG4gICAgbWFyZ2luOiAxcmVtO1xuICAgIHdpZHRoOiBjYWxjKDExMTBweCAvIDMgLSAycmVtKTtcblxuICAgICY6aG92ZXIge1xuICAgICAgYm94LXNoYWRvdzogMCA4cHggMTZweCByZ2JhKGJsYWNrLCAwLjEpLCAwIDNweCA2cHggcmdiYShibGFjaywgMC4xKTtcbiAgICB9XG5cbiAgICBAbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiAkc2NyZWVuLXhzLW1heCkge1xuICAgICAgbWFyZ2luLWxlZnQ6IDA7XG4gICAgICBtYXJnaW4tcmlnaHQ6IDA7XG4gICAgfVxuICB9XG5cbiAgLmV4YW1wbGUge1xuICAgIGJhY2tncm91bmQtcG9zaXRpb246IGNlbnRlciBjZW50ZXI7XG4gICAgYmFja2dyb3VuZC1zaXplOiBjb3ZlcjtcbiAgICBib3JkZXItcmFkaXVzOiA4cHg7XG4gICAgY29sb3I6IHJnYmEod2hpdGUsIDAuOCk7XG4gICAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgICBoZWlnaHQ6IDA7XG4gICAgcGFkZGluZy1ib3R0b206IDg4JTtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG5cbiAgICAmLnN0YXJidWNrcyB7IGJhY2tncm91bmQtaW1hZ2U6IHVybChcIi9pbWcvcHdhL3B3YS1zdGFyYnVja3MtYmcuanBnXCIpOyB9XG4gICAgJi5waW50ZXJlc3QgeyBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXCIvaW1nL3B3YS9wd2EtcGludGVyZXN0LWJnLmpwZ1wiKTsgfVxuICAgICYudWJlciB7IGJhY2tncm91bmQtaW1hZ2U6IHVybChcIi9pbWcvcHdhL3B3YS11YmVyLWJnLmpwZ1wiKTsgfVxuICAgICYubHlmdCB7IGJhY2tncm91bmQtaW1hZ2U6IHVybChcIi9pbWcvcHdhL3B3YS1seWZ0LWJnLmpwZ1wiKTsgfVxuICAgICYudHdpdHRlciB7IGJhY2tncm91bmQtaW1hZ2U6IHVybChcIi9pbWcvcHdhL3B3YS10d2l0dGVyLWJnLmpwZ1wiKTsgfVxuICAgICYuZm9yYmVzIHsgYmFja2dyb3VuZC1pbWFnZTogdXJsKFwiL2ltZy9wd2EvcHdhLWZvcmJlcy1iZy5qcGdcIik7IH1cbiAgfVxuXG4gIC5leGFtcGxlX19jb250ZW50IHtcbiAgICBib3R0b206IDA7XG4gICAgaGVpZ2h0OiA0Ni44NzUlO1xuICAgIGxlZnQ6IDA7XG4gICAgcGFkZGluZzogMS40ZW07XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIHJpZ2h0OiAwO1xuXG4gICAgaW1nIHtcbiAgICAgIGhlaWdodDogNDBweDtcbiAgICAgIG1hcmdpbi1ib3R0b206IDFlbTtcbiAgICB9XG4gIH1cblxuICAvLyBMaWJyYXJ5XG5cbiAgLmxpYnJhcnkgPiAuY29udGFpbmVyID4gc2VjdGlvbiB7XG4gICAgcGFkZGluZy1sZWZ0OiAycmVtO1xuICB9XG5cbiAgLmxpYnJhcnlfX2xpc3QgaDQge1xuICAgIGZvbnQtc2l6ZTogMTZweDtcbiAgICBmb250LXdlaWdodDogNjAwO1xuICB9XG5cbiAgLmxpYnJhcnlfX2xpc3QgcCB7XG4gICAgY29sb3I6ICM3NDgxOTY7XG4gICAgZm9udC1zaXplOiAxM3B4O1xuICAgIGZvbnQtd2VpZ2h0OiA2MDA7XG4gIH1cblxuICAubGlicmFyeV9fbGlzdCBhIHtcbiAgICBjb2xvcjogaW5oZXJpdDtcblxuICAgICY6Zm9jdXMge1xuICAgICAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xuICAgIH1cbiAgfVxuXG4gIC5saWJyYXJ5X19saXN0IHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGZsZXgtd3JhcDogd3JhcDtcbiAgICBsaXN0LXN0eWxlOiBub25lO1xuICAgIG1hcmdpbjogMmVtIDAgNGVtIDA7XG4gICAgcGFkZGluZzogMDtcbiAgfVxuXG4gIC5saWJyYXJ5X19saXN0ID4gbGkge1xuICAgIGZsZXg6IDAgMCAyNSU7XG4gICAgcGFkZGluZy1ib3R0b206IDJyZW07XG4gICAgcGFkZGluZy1yaWdodDogMnJlbTtcblxuICAgIEBtZWRpYSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6ICRzY3JlZW4tbWQtbWF4KSB7XG4gICAgICBmbGV4OiAwIDAgMzMuMzMlO1xuICAgIH1cblxuICAgIEBtZWRpYSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6ICRzY3JlZW4tc20tbWF4KSB7XG4gICAgICBmbGV4OiAwIDAgNTAlO1xuICAgIH1cblxuICAgIEBtZWRpYSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6ICRzY3JlZW4teHMtbWF4KSB7XG4gICAgICBmbGV4OiAwIDAgMTAwJTtcbiAgICAgIHBhZGRpbmctcmlnaHQ6IDA7XG4gICAgfVxuICB9XG5cbiAgLmxpYnJhcnlfX2xpc3QgLmNhcmQge1xuICAgIGhlaWdodDogMTAwJTtcbiAgICBtYXJnaW4tbGVmdDogYXV0bztcbiAgICBtYXJnaW4tcmlnaHQ6IGF1dG87XG5cbiAgICBAbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiAkc2NyZWVuLXhzLW1heCkge1xuICAgICAgbWF4LXdpZHRoOiAyNjBweDtcbiAgICB9XG4gIH1cblxuICAubGlicmFyeSAuZXllYnJvdyB7XG4gICAgQG1lZGlhIHNjcmVlbiBhbmQgKG1heC13aWR0aDogJHNjcmVlbi14cy1tYXgpIHtcbiAgICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICB9XG4gIH1cblxufVxuIiwiI2RvY3MtcGFnZS1yZXNvdXJjZXMtaW5kZXggbWFpbiB7XG4gIGgxLmJhbm5lciB7XG4gICAgaGVpZ2h0OiAxNzhweDtcbiAgICBiYWNrZ3JvdW5kOiBuby1yZXBlYXQgY2VudGVyIHRvcCB1cmwoJy9pbWcvZG9jcy9yZXNvdXJjZXMvcmVzb3VyY2VzLWhlYWRlci1pbWcuanBnJyk7XG4gICAgYmFja2dyb3VuZC1zaXplOiBjb3ZlcjtcbiAgICBjb2xvcjogd2hpdGU7XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICBwYWRkaW5nLXRvcDogOTJweDtcbiAgICBtYXJnaW4tdG9wOiAtNTBweDtcbiAgICBtYXJnaW4tbGVmdDogLTQwcHg7XG4gICAgbWFyZ2luLXJpZ2h0OiAtNDBweDtcbiAgICBwYWRkaW5nLWJvdHRvbTogMTUwcHg7XG4gICAgcGFkZGluZy1sZWZ0OiA1MHB4O1xuICAgIGZvbnQtc2l6ZTogMzZweDtcbiAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xuICAgIGxldHRlci1zcGFjaW5nOiAxNHB4O1xuICAgIGZvbnQtd2VpZ2h0OiA1MDA7XG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICB0ZXh0LXNoYWRvdzogMCAxcHggNHB4IHJnYmEoMCwwLDAsLjEpO1xuXG4gICAgQG1lZGlhIChtYXgtd2lkdGg6IDQyMHB4KSB7XG4gICAgICBsZXR0ZXItc3BhY2luZzogNHB4O1xuICAgIH1cblxuICAgIC5iZyB7XG4gICAgICBiYWNrZ3JvdW5kOiBuby1yZXBlYXQgY2VudGVyIGNlbnRlcjtcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgIHBhZGRpbmctdG9wOiA5MnB4O1xuICAgICAgdG9wOiAwO1xuICAgICAgbGVmdDogMDtcbiAgICAgIHJpZ2h0OiAwO1xuICAgICAgYm90dG9tOiAwO1xuICAgICAgb3BhY2l0eTogMDtcbiAgICAgIHRyYW5zZm9ybTogc2NhbGUoMS4wMSwgMS4wMSk7XG4gICAgICB0cmFuc2Zvcm0tb3JpZ2luOiB0b3AgY2VudGVyO1xuICAgICAgdHJhbnNpdGlvbjogLjNzIHRyYW5zZm9ybSwgLjNzIG9wYWNpdHk7XG5cbiAgICAgICY6OmJlZm9yZSB7XG4gICAgICAgIGJhY2tncm91bmQ6IG5vLXJlcGVhdCBjZW50ZXIgdG9wIHVybCgnL2ltZy9kb2NzL3Jlc291cmNlcy9yZXNvdXJjZXMtaGVhZGVyLWljb24ucG5nJyk7XG4gICAgICAgIGJhY2tncm91bmQtc2l6ZTogNjBweDtcbiAgICAgICAgaGVpZ2h0OiA2MHB4O1xuICAgICAgICB3aWR0aDogNjBweDtcbiAgICAgICAgY29udGVudDogJyc7XG4gICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICAgICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICAgICB0b3A6IC01cHg7XG4gICAgICAgIG1hcmdpbi1yaWdodDogMjBweDtcblxuICAgICAgICBAbWVkaWEgKG1heC13aWR0aDogNDIwcHgpIHtcbiAgICAgICAgICBtYXJnaW4tcmlnaHQ6IDVweDtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAmLmFjdGl2ZSB7XG4gICAgICAgIG9wYWNpdHk6IDE7XG4gICAgICAgIHRyYW5zZm9ybTogc2NhbGUoMSwgMSk7XG4gICAgICB9XG5cbiAgICAgICYudmlkZW9zIHtcbiAgICAgICAgYmFja2dyb3VuZC1pbWFnZTogdXJsKCcvaW1nL2RvY3MvcmVzb3VyY2VzL3ZpZGVvLmpwZycpO1xuICAgICAgICBiYWNrZ3JvdW5kLXNpemU6IGNvdmVyO1xuICAgICAgfVxuXG4gICAgICAmLmJvb2tzIHtcbiAgICAgICAgYmFja2dyb3VuZC1pbWFnZTogdXJsKCcvaW1nL2RvY3MvcmVzb3VyY2VzL2Jvb2tzLmpwZycpO1xuICAgICAgICBiYWNrZ3JvdW5kLXNpemU6IGNvdmVyO1xuICAgICAgfVxuXG4gICAgICAmLmNvdXJzZXMge1xuICAgICAgICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoJy9pbWcvZG9jcy9yZXNvdXJjZXMvY291cnNlcy5qcGcnKTtcbiAgICAgICAgYmFja2dyb3VuZC1zaXplOiBjb3ZlcjtcbiAgICAgIH1cblxuICAgICAgJi5ndWlkZXMge1xuICAgICAgICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoJy9pbWcvZG9jcy9yZXNvdXJjZXMvZ3VpZGVzLmpwZycpO1xuICAgICAgICBiYWNrZ3JvdW5kLXNpemU6IGNvdmVyO1xuICAgICAgfVxuXG4gICAgICAmLmNvbW11bml0eSB7XG4gICAgICAgIGJhY2tncm91bmQtaW1hZ2U6IHVybCgnL2ltZy9kb2NzL3Jlc291cmNlcy9jb21tdW5pdHkuanBnJyk7XG4gICAgICAgIGJhY2tncm91bmQtc2l6ZTogY292ZXI7XG4gICAgICB9XG5cbiAgICAgICYudG9vbHMge1xuICAgICAgICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoJy9pbWcvZG9jcy9yZXNvdXJjZXMvdG9vbHMuanBnJyk7XG4gICAgICAgIGJhY2tncm91bmQtc2l6ZTogY292ZXI7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaDIge1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICBmb250LXNpemU6IDMycHg7XG4gIH1cblxuICBmb3JtIHtcbiAgICBtYXgtd2lkdGg6IDcyMnB4O1xuICAgIG1hcmdpbjogMCBhdXRvO1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICBtYXJnaW4tYm90dG9tOiA0MHB4O1xuXG4gICAgaW5wdXQge1xuICAgICAgYm9yZGVyLXJhZGl1czogNTBweDtcbiAgICAgIHBhZGRpbmc6IDE4cHggNXB4IDE3cHggNTlweDtcbiAgICAgIGZvbnQtc2l6ZTogMTZweDtcbiAgICAgIGhlaWdodDogNTZweDtcblxuICAgICAgJjo6cGxhY2Vob2xkZXIge1xuICAgICAgICBjb2xvcjogJGdyZXk7XG4gICAgICAgIGZvbnQtd2VpZ2h0OiAzMDA7XG4gICAgICB9XG4gICAgfVxuXG4gICAgJjo6YmVmb3JlIHtcbiAgICAgIGNvbnRlbnQ6ICdcXGYyMGEnO1xuICAgICAgZm9udC1mYW1pbHk6ICdJb25pY29ucyc7XG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICBsZWZ0OiAyNXB4O1xuICAgICAgZm9udC1zaXplOiAyNnB4O1xuICAgICAgdG9wOiAxMHB4O1xuICAgICAgY29sb3I6ICRncmV5O1xuICAgICAgZm9udC13ZWlnaHQ6IDMwMDtcbiAgICB9XG4gIH1cblxuICAuc2VjdGlvbnMge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgZmxleC13cmFwOiB3cmFwO1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICBwYWRkaW5nLXRvcDogNTBweDtcblxuXG4gICAgJi5maWx0ZXJlZCB7XG4gICAgICBzZWN0aW9uIHtcbiAgICAgICAgJjpub3QoLmFjdGl2ZSkge1xuICAgICAgICAgIHdpZHRoOiAwO1xuICAgICAgICAgIG9wYWNpdHk6IDA7XG4gICAgICAgICAgcGFkZGluZy1sZWZ0OiAwO1xuICAgICAgICAgIHBhZGRpbmctYm90dG9tOiAwO1xuICAgICAgICAgIHRyYW5zZm9ybS1vcmlnaW46IGxlZnQgY2VudGVyO1xuICAgICAgICB9XG5cbiAgICAgICAgJi5hY3RpdmUge1xuICAgICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC5zaG93LWFsbCB7XG4gICAgICAgIGNvbG9yOiAkYmx1ZTtcbiAgICAgICAgdG9wOiAyMHB4O1xuICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZTNkKDAsMCwwKTtcbiAgICAgICAgdHJhbnNpdGlvbjogLjVzIGNvbG9yLCAuNXMgdHJhbnNmb3JtIGVhc2UtaW4tb3V0LCAuNSB0b3Agc3RlcC1lbmQ7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLnNob3ctYWxsIHtcbiAgICAgIGZvbnQtc2l6ZTogMTNweDtcbiAgICAgIGNvbG9yOiB0cmFuc3BhcmVudDtcbiAgICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XG4gICAgICBmb250LXdlaWdodDogNzAwO1xuICAgICAgbGV0dGVyLXNwYWNpbmc6IC4xZW07XG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICB0b3A6IC05MDBweDtcbiAgICAgIHJpZ2h0OiAwO1xuICAgICAgY3Vyc29yOiBwb2ludGVyO1xuICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUzZCgwLC0xNXB4LDApO1xuICAgICAgdHJhbnNpdGlvbjogLjVzIGNvbG9yLCAuNXMgdHJhbnNmb3JtIGVhc2UtaW4tb3V0LCAuNSB0b3Agc3RlcC1lbmQ7XG5cbiAgICAgICYuYWN0aXZlIHtcbiAgICAgICAgY29sb3I6ICRibHVlO1xuICAgICAgfVxuXG4gICAgICAmOmhvdmVyIHtcbiAgICAgICAgY29sb3I6IGRhcmtlbigkYmx1ZSwgNSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgc2VjdGlvbiB7XG4gICAgICB3aWR0aDogMzI1cHg7XG4gICAgICBwYWRkaW5nLWxlZnQ6IDY4cHg7XG4gICAgICBwYWRkaW5nLWJvdHRvbTogNTBweDtcbiAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgIG92ZXJmbG93OiB2aXNpYmxlO1xuICAgICAgdHJhbnNpdGlvbjogLjNzIHRyYW5zZm9ybSwgLjNzIHdpZHRoLCAuM3Mgb3BhY2l0eSwgLjNzIHBhZGRpbmctbGVmdCxcbiAgICAgICAgICAgICAgICAgIC4zcyBoZWlnaHQsIC4zcyBwYWRkaW5nLWJvdHRvbTtcblxuICAgICAgJjo6YmVmb3JlIHtcbiAgICAgICAgYmFja2dyb3VuZDogbm8tcmVwZWF0IGNlbnRlciB0b3AgdXJsKCcvaW1nL2RvY3MvcmVzb3VyY2VzL3Jlc291cmNlcy1pY29ucy5wbmc/MScpO1xuICAgICAgICBiYWNrZ3JvdW5kLXNpemU6IDMycHg7XG4gICAgICAgIGhlaWdodDogMzJweDtcbiAgICAgICAgd2lkdGg6IDMycHg7XG4gICAgICAgIGNvbnRlbnQ6ICcnO1xuICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgIGxlZnQ6IDE1cHg7XG4gICAgICAgIHRvcDogMDtcbiAgICAgIH1cbiAgICAgICYuZ3VpZGVzOjpiZWZvcmUgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiBjZW50ZXIgLTMycHg7IH1cbiAgICAgICYudG9vbHM6OmJlZm9yZSB7ICAgIGJhY2tncm91bmQtcG9zaXRpb246IGNlbnRlciAtNjRweDsgfVxuICAgICAgJi5jb21tdW5pdHk6OmJlZm9yZSB7ICAgYmFja2dyb3VuZC1wb3NpdGlvbjogY2VudGVyIC05NnB4OyB9XG4gICAgICAmLmJvb2tzOjpiZWZvcmUgeyAgIGJhY2tncm91bmQtcG9zaXRpb246IGNlbnRlciAtMTI4cHg7IH1cbiAgICAgICYuY291cnNlczo6YmVmb3JlIHsgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiBjZW50ZXIgLTE2MHB4OyB9XG4gICAgfVxuXG4gICAgaDMge1xuICAgICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcbiAgICAgIGZvbnQtc2l6ZTogMTVweDtcbiAgICAgIG1hcmdpbi1ib3R0b206IDQwcHg7XG4gICAgICBtYXJnaW4tdG9wOiA2cHg7XG4gICAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgICBmb250LXdlaWdodDogNjAwO1xuICAgICAgbGV0dGVyLXNwYWNpbmc6IDAuMWVtO1xuICAgIH1cblxuICAgIHVsIHtcbiAgICAgIHBhZGRpbmc6IDA7XG4gICAgfVxuXG4gICAgbGkge1xuICAgICAgcGFkZGluZy1ib3R0b206IDI1cHg7XG4gICAgICBsaXN0LXN0eWxlOiBub25lO1xuICAgICAgd2lkdGg6IDMwMHB4O1xuICAgICAgbWFyZ2luLXJpZ2h0OiAyNXB4O1xuICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgICAgdmVydGljYWwtYWxpZ246IHRvcDtcblxuICAgICAgYSB7XG4gICAgICAgIGZvbnQtc2l6ZTogMTRweDtcbiAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDtcbiAgICAgIH1cblxuICAgICAgcCB7XG4gICAgICAgIGZvbnQtc2l6ZTogMTNweDtcbiAgICAgICAgbWFyZ2luLXRvcDogMDtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbiIsIiNwYWdlLXNhbGVzIHtcbiAgZm9udC1mYW1pbHk6JGZvbnQtZmFtaWx5LWVpbmE7XG5cbiAgLmhlcm8ge1xuICAgIHBhZGRpbmctdG9wOiA2MHB4O1xuICAgIHBhZGRpbmctYm90dG9tOiAwO1xuICAgIG1heC13aWR0aDogNzYwcHg7XG4gICAgbWFyZ2luLWxlZnQ6IGF1dG87XG4gICAgbWFyZ2luLXJpZ2h0OiBhdXRvO1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcblxuXG5cbiAgICBoMSB7XG4gICAgICBmb250LXNpemU6IDM2cHg7XG4gICAgICBmb250LXdlaWdodDogNzAwO1xuICAgICAgbGV0dGVyLXNwYWNpbmc6IC0wLjAzZW07XG4gICAgICBtYXJnaW4tYm90dG9tOiA4cHg7XG4gICAgfVxuXG4gICAgcCB7XG4gICAgICBmb250LXNpemU6IDIwcHg7XG4gICAgICBmb250LXdlaWdodDogNTAwO1xuICAgIH1cbiAgfVxuXG4gIC5odWJzcG90LW92ZXJyaWRlIHtcbiAgICBtYXgtd2lkdGg6IDg2MHB4O1xuICAgIG1hcmdpbi10b3A6IDQwcHg7XG4gICAgbWFyZ2luLWJvdHRvbTogMTIwcHg7XG4gICAgbWFyZ2luLWxlZnQ6IGF1dG87XG4gICAgbWFyZ2luLXJpZ2h0OiBhdXRvO1xuXG4gICAgQG1lZGlhIChtYXgtd2lkdGg6ICRzY3JlZW4tc20pIHtcbiAgICAgIG1hcmdpbi1ib3R0b206IDYwcHg7XG4gICAgfVxuICB9XG59XG4iLCIjcGFnZS1zdGFydHVwcyB7XG5cbiAgbWFpbiB7XG4gICAgY29sb3I6ICMxNjFhMWY7XG4gICAgZm9udC1mYW1pbHk6ICRmb250LWZhbWlseS1laW5hO1xuICAgIGZvbnQtd2VpZ2h0OiA2MDA7XG4gIH1cblxuICAuYnRuIHtcbiAgICBmb250LXNpemU6IDE2cHg7XG4gICAgZm9udC13ZWlnaHQ6IDcwMDtcbiAgICBwYWRkaW5nOiAxMnB4IDIwcHg7XG5cbiAgICAmLS1zZWNvbmRhcnkge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogIzEwMjI0MjtcbiAgICB9XG4gIH1cblxuICAuY3RhIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcbiAgICBjb2xvcjogaW5oZXJpdDtcbiAgICBwYWRkaW5nLWJvdHRvbTogNjBweDtcbiAgICBwYWRkaW5nLXRvcDogMTIwcHg7XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xuXG4gICAgQG1lZGlhIChtYXgtd2lkdGg6ICRzY3JlZW4tc20pIHtcbiAgICAgIHBhZGRpbmctdG9wOiAxNDBweDtcbiAgICB9XG4gIH1cblxuICAuY3RhIGgxIHtcbiAgICBmb250LXNpemU6IDQ4cHg7XG4gICAgZm9udC13ZWlnaHQ6IDcwMDtcbiAgICBsZXR0ZXItc3BhY2luZzogLTAuMDJlbTtcbiAgfVxuXG4gIC5jdGEgcCB7XG4gICAgY29sb3I6ICMyZjM3NDQ7XG4gICAgZm9udC1zaXplOiAxOHB4O1xuICAgIG1hcmdpbjogMWVtIGF1dG8gMS41ZW07XG4gICAgbWF4LXdpZHRoOiA3MjBweDtcbiAgfVxuXG4gIC52aWRlbyB7XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICAgIHBhZGRpbmc6IDFlbSAxZW0gMmVtO1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICB6LWluZGV4OiAxO1xuICB9XG5cbiAgLnZpZGVvLXBsYXllciB7XG4gICAgbWF4LXdpZHRoOiA5MDBweDtcbiAgICB3aWR0aDogMTAwJTtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgei1pbmRleDogMjtcblxuICAgICY6aG92ZXIge1xuICAgICAgY3Vyc29yOiBwb2ludGVyO1xuICAgIH1cblxuICAgICY6bm90KC5pcy1wbGF5aW5nKTpob3ZlciAudmlkZW8tcGxheWVyLWZyYW1lIHtcbiAgICAgIHRyYW5zZm9ybTogc2NhbGUoMC45OSk7XG4gICAgfVxuXG4gICAgJjpub3QoLmlzLXBsYXlpbmcpOmhvdmVyIC52aWRlby1wbGF5ZXItYnV0dG9uIHtcbiAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsIC01MCUpIHNjYWxlKDEuMSk7XG4gICAgfVxuXG4gICAgJi5pcy1yZWFkeSAudmlkZW8tcGxheWVyLWJ1dHRvbiB7XG4gICAgICBkaXNwbGF5OiBibG9jaztcbiAgICB9XG5cbiAgICAmLmlzLXBsYXlpbmcgLnZpZGVvLXBsYXllci1idXR0b24ge1xuICAgICAgZGlzcGxheTogbm9uZTtcbiAgICB9XG4gIH1cblxuICAudmlkZW8tcGxheWVyLWJ1dHRvbiB7XG4gICAgZGlzcGxheTogbm9uZTtcbiAgICBsZWZ0OiA1MCU7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIHRvcDogNTAlO1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsIC01MCUpIHNjYWxlKDEpO1xuICAgIHRyYW5zaXRpb246IHRyYW5zZm9ybSA0MDBtcyBjdWJpYy1iZXppZXIoMC4xNzUsIDAuODg1LCAwLjMyLCAxLjI3NSk7XG4gICAgd2lkdGg6IDEyMHB4O1xuICAgIHotaW5kZXg6IDE7XG4gIH1cblxuICAudmlkZW8tcGxheWVyLWZyYW1lIHtcbiAgICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXCIvaW1nL3N0YXJ0dXBzL3N0YXJ0dXBzLXZpZGVvLXBvc3Rlci5qcGdcIik7XG4gICAgYmFja2dyb3VuZC1wb3NpdGlvbjogY2VudGVyIGNlbnRlcjtcbiAgICBiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0O1xuICAgIGJhY2tncm91bmQtc2l6ZTogY29udGFpbjtcbiAgICBib3JkZXItcmFkaXVzOiAyMHB4O1xuICAgIGJveC1zaGFkb3c6IDAgOHB4IDE2cHggcmdiYSgwLDE0LDQxLDAuMDgpLCAwIDMwcHggNjBweCByZ2JhKDAsMTEsMzQsMC4xNSk7XG4gICAgaGVpZ2h0OiAwO1xuICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgcGFkZGluZy1ib3R0b206IDU2LjI1JTtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgdHJhbnNmb3JtOiBzY2FsZSgxKTtcbiAgICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gNDAwbXMgY3ViaWMtYmV6aWVyKDAuMTksIDEsIDAuMjIsIDEpO1xuXG4gICAgPiBpZnJhbWUge1xuICAgICAgaGVpZ2h0OiAxMDAlO1xuICAgICAgbGVmdDogMDtcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgIHRvcDogMDtcbiAgICAgIHdpZHRoOiAxMDAlO1xuICAgIH1cbiAgfVxuXG4gIC52aWRlby1mb290ZXIge1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBtYXgtd2lkdGg6IDkwMHB4O1xuICAgIG1hcmdpbjogMCBhdXRvIDYwcHg7XG4gICAgcGFkZGluZzogMWVtO1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcblxuICAgICY6YmVmb3JlIHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6ICNlOGViZjE7XG4gICAgICBjb250ZW50OiBcIlwiO1xuICAgICAgaGVpZ2h0OiA1MCU7XG4gICAgICBsZWZ0OiA1MCU7XG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICB0b3A6IDI1JTtcbiAgICAgIHdpZHRoOiAxcHg7XG4gICAgfVxuXG4gICAgQG1lZGlhIChtYXgtd2lkdGg6ICRzY3JlZW4tc20pIHtcbiAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICBtYXJnaW4tYm90dG9tOiAwO1xuICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xuXG4gICAgICAmOmJlZm9yZSB7XG4gICAgICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLnZpZGVvLWZvb3RlciA+ICoge1xuICAgIGZsZXg6IDE7XG5cbiAgICAmOmZpcnN0LWNoaWxkIHtcbiAgICAgIG1hcmdpbi1yaWdodDogM2VtO1xuICAgIH1cblxuICAgICY6bGFzdC1jaGlsZCB7XG4gICAgICBtYXJnaW4tbGVmdDogM2VtO1xuICAgIH1cblxuICAgIEBtZWRpYSAobWF4LXdpZHRoOiAkc2NyZWVuLXNtKSB7XG4gICAgICAmOmZpcnN0LWNoaWxkLFxuICAgICAgJjpsYXN0LWNoaWxkIHtcbiAgICAgICAgbWFyZ2luLWxlZnQ6IDA7XG4gICAgICAgIG1hcmdpbi1yaWdodDogMDtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAudmlkZW8tZm9vdGVyID4gcCB7XG4gICAgZm9udC1zaXplOiAyMHB4O1xuICAgIGZvbnQtd2VpZ2h0OiA3MDA7XG4gICAgbGV0dGVyLXNwYWNpbmc6IC0wLjAyZW07XG4gICAgbGluZS1oZWlnaHQ6IDEuNTtcbiAgfVxuXG4gIC52aWRlby1mb290ZXIgPiBibG9ja3F1b3RlIHtcbiAgICBib3JkZXI6IG5vbmU7XG4gICAgZm9udC1zaXplOiAxNHB4O1xuICAgIG1hcmdpbjogMDtcbiAgICBwYWRkaW5nOiAwO1xuXG4gICAgQG1lZGlhIChtYXgtd2lkdGg6ICRzY3JlZW4tc20pIHtcbiAgICAgIG1hcmdpbjogMWVtIDAgMCAwO1xuICAgIH1cbiAgfVxuXG4gIC52aWRlby1mb290ZXIgPiBibG9ja3F1b3RlIHNtYWxsIHtcbiAgICBjb2xvcjogIzc4ODQ5NztcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgICBtYXJnaW4tdG9wOiAxLjVlbTtcbiAgICB0ZXh0LWFsaWduOiByaWdodDtcblxuICAgICY6YmVmb3JlIHtcbiAgICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgfVxuXG4gICAgPiBzcGFuIHtcbiAgICAgIG1hcmdpbi1sZWZ0OiAwLjVlbTtcbiAgICAgIG9wYWNpdHk6IDAuNTtcbiAgICB9XG5cbiAgICBAbWVkaWEgKG1heC13aWR0aDogJHNjcmVlbi1zbSkge1xuICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgIH1cbiAgfVxuXG4gIC5zZWN0aW9uLWhlYWRlciB7XG4gICAgY29sb3I6ICMyZjM3NDQ7XG4gICAgZm9udC1zaXplOiAyMHB4O1xuICAgIGxldHRlci1zcGFjaW5nOiAtMC4wMmVtO1xuICAgIG1hcmdpbi1ib3R0b206IDRlbTtcbiAgICBtYXJnaW4tdG9wOiA0ZW07XG4gICAgbWF4LXdpZHRoOiAzMmVtO1xuICB9XG5cbiAgLnNlY3Rpb24taGVhZGVyIGgyIHtcbiAgICBjb2xvcjogIzI0MjgyZTtcbiAgICBmb250LXNpemU6IDEuOGVtO1xuICAgIGZvbnQtd2VpZ2h0OiA3MDA7XG4gICAgbWFyZ2luLWJvdHRvbTogMC42NWVtO1xuICB9XG5cbiAgLm9zcyxcbiAgLnBybyB7XG4gICAgLnNlY3Rpb24taGVhZGVyIGgyIHNwYW4ge1xuICAgICAgYm9yZGVyLWJvdHRvbTogc29saWQgNHB4ICMyNDI4MmU7XG4gICAgfVxuICB9XG5cbiAgLmZlYXR1cmUge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgZm9udC1zaXplOiAxNnB4O1xuICAgIGZvbnQtd2VpZ2h0OiA2MDA7XG4gICAgbGV0dGVyLXNwYWNpbmc6IC0wLjAxZW07XG4gIH1cblxuICAuZmVhdHVyZV9faWNvbiB7XG4gICAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFwiL2ltZy9zdGFydHVwcy9zdGFydHVwcy1mZWF0dXJlLWljb25zLnBuZ1wiKTtcbiAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiB0b3A7XG4gICAgYmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdDtcbiAgICBiYWNrZ3JvdW5kLXNpemU6IDEwMCU7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgZmxleDogMCAwIDQ4cHg7XG4gICAgaGVpZ2h0OiA0OHB4O1xuICAgIG1hcmdpbi1yaWdodDogMmVtO1xuICAgIHdpZHRoOiA0OHB4O1xuXG4gICAgJi5kYXp6bGUgICAgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uLXk6IDA7IH1cbiAgICAmLnNwZWVkICAgICB7IGJhY2tncm91bmQtcG9zaXRpb24teTogLTQ4cHggKiAxOyB9XG4gICAgJi50YWtlb2ZmICAgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uLXk6IC00OHB4ICogMjsgfVxuICAgICYucGxhdGZvcm1zIHsgYmFja2dyb3VuZC1wb3NpdGlvbi15OiAtNDhweCAqIDM7IH1cbiAgICAmLm5hdGl2ZSAgICB7IGJhY2tncm91bmQtcG9zaXRpb24teTogLTQ4cHggKiA0OyB9XG4gICAgJi53b3JsZHdpZGUgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uLXk6IC00OHB4ICogNTsgfVxuICAgICYuZGVwbG95ICAgIHsgYmFja2dyb3VuZC1wb3NpdGlvbi15OiAtNDhweCAqIDY7IH1cbiAgICAmLmNvbXBpbGUgICB7IGJhY2tncm91bmQtcG9zaXRpb24teTogLTQ4cHggKiA3OyB9XG4gICAgJi5tb25pdG9yICAgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uLXk6IC00OHB4ICogODsgfVxuICB9XG5cbiAgLmZlYXR1cmVfX3RleHQgc3Ryb25nIHtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgICBmb250LXNpemU6IDEuMjVlbTtcbiAgICBtYXJnaW4tYm90dG9tOiAwLjc1ZW07XG4gIH1cblxuICAuZmVhdHVyZV9fdGV4dCBwIHtcbiAgICBjb2xvcjogIzc4ODQ5NztcbiAgICBsaW5lLWhlaWdodDogMS42NTtcbiAgfVxuXG4gIC5mZWF0dXJlLWxpc3Qge1xuICAgIGxpc3Qtc3R5bGU6IG5vbmU7XG4gICAgbWFyZ2luOiAwO1xuICAgIHBhZGRpbmc6IDA7XG4gIH1cblxuICAuZmVhdHVyZS1saXN0ID4gbGk6bm90KDpsYXN0LWNoaWxkKSB7XG4gICAgbWFyZ2luLWJvdHRvbTogMmVtO1xuICB9XG5cbiAgLmFwcC1zaG93Y2FzZSB7XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gIH1cblxuICAuYXBwLXNob3djYXNlX19pbWFnZSB7XG4gICAgd2lkdGg6IDEwMCU7XG4gIH1cblxuICAuYXBwLXNob3djYXNlX19pY29uIHtcbiAgICB3aWR0aDogOTNweDtcbiAgICBtYXJnaW4tcmlnaHQ6IDFlbTtcbiAgfVxuXG4gIC5hcHAtc2hvd2Nhc2VfX2Zvb3RlciB7XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDtcbiAgICBmb250LXNpemU6IDE2cHg7XG4gICAgZm9udC13ZWlnaHQ6IDcwMDtcbiAgICBsZXR0ZXItc3BhY2luZzogLTAuMDFlbTtcbiAgICBwYWRkaW5nOiAxZW07XG4gIH1cblxuICAuYXBwLXNob3djYXNlX19mb290ZXIgYmxvY2txdW90ZSB7XG4gICAgYm9yZGVyLWxlZnQ6IG5vbmU7XG4gICAgbWFyZ2luLWJvdHRvbTogMC43NWVtO1xuICAgIHBhZGRpbmc6IDA7XG4gIH1cblxuICAuYXBwLXNob3djYXNlX19mb290ZXIgc21hbGwge1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIGZvbnQtd2VpZ2h0OiA2MDA7XG4gICAgdGV4dC1hbGlnbjogcmlnaHQ7XG5cbiAgICA+IHNwYW4ge1xuICAgICAgb3BhY2l0eTogMC41O1xuICAgIH1cbiAgfVxuXG4gIC5rZXktYmVuZWZpdHMge1xuICAgIEBtZWRpYSAobWluLXdpZHRoOiAkc2NyZWVuLXNtKSB7XG4gICAgICAuZmVhdHVyZS1saXN0IHtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgIH1cblxuICAgICAgLmZlYXR1cmUtbGlzdCA+IGxpIHtcbiAgICAgICAgZmxleDogMTtcbiAgICAgICAgcGFkZGluZy1yaWdodDogM2VtO1xuICAgICAgfVxuXG4gICAgICAuZmVhdHVyZSB7XG4gICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICB9XG5cbiAgICAgIC5mZWF0dXJlX19pY29uIHtcbiAgICAgICAgbWFyZ2luLWJvdHRvbTogMS4yNWVtO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC5vc3MsXG4gIC5wcm8ge1xuICAgIHBhZGRpbmctYm90dG9tOiAxMDBweDtcblxuICAgIC5jb250YWluZXIge1xuICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG5cbiAgICAgIEBtZWRpYSAobWF4LXdpZHRoOiAkc2NyZWVuLXNtKSB7XG4gICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICB9XG4gICAgfVxuXG4gICAgLmFwcC1zaG93Y2FzZSB7XG4gICAgICBtYXJnaW46IGF1dG8gMTAlO1xuICAgICAgbWF4LXdpZHRoOiA4NjBweDtcbiAgICAgIHBhZGRpbmctdG9wOiAxMDBweDtcbiAgICB9XG4gIH1cblxuICAub3NzIC5hcHAtc2hvd2Nhc2Uge1xuICAgIEBtZWRpYSAobWluLXdpZHRoOiAkc2NyZWVuLXNtKSB7XG4gICAgICBtYXJnaW4tbGVmdDogMDtcbiAgICAgIG1hcmdpbi1yaWdodDogODBweDtcbiAgICB9XG4gIH1cblxuICAucHJvIC5hcHAtc2hvd2Nhc2Uge1xuICAgIEBtZWRpYSAobWluLXdpZHRoOiAkc2NyZWVuLXNtKSB7XG4gICAgICBvcmRlcjogMTtcbiAgICAgIG1hcmdpbi1sZWZ0OiA4MHB4O1xuICAgICAgbWFyZ2luLXJpZ2h0OiAwO1xuICAgIH1cbiAgfVxuXG4gIC5wcm8gLmZlYXR1cmVfX3RleHQgc3Ryb25nIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG5cbiAgICBAbWVkaWEgKG1pbi13aWR0aDogJHNjcmVlbi1sZykge1xuICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgIGZsZXgtZGlyZWN0aW9uOiByb3c7XG4gICAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG4gICAgfVxuICB9XG5cbiAgLnBybyAuZmVhdHVyZV9fdGV4dCBzdHJvbmcgYSB7XG4gICAgZm9udC1zaXplOiAwLjU1ZW07XG4gICAgbGV0dGVyLXNwYWNpbmc6IDAuMDVlbTtcbiAgICBtYXJnaW4tdG9wOiAwLjVlbTtcbiAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xuXG4gICAgQG1lZGlhIChtaW4td2lkdGg6ICRzY3JlZW4tbGcpIHtcbiAgICAgIG1hcmdpbi10b3A6IDA7XG4gICAgfVxuICB9XG5cbiAgc2VjdGlvbi5yZXNvdXJjZXMge1xuICAgIHBhZGRpbmctYm90dG9tOiAxMDBweDtcbiAgfVxuXG4gIC5yZXNvdXJjZS1jYXJkIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjMzgzZDNmO1xuICAgIGJvcmRlci1yYWRpdXM6IDE2cHg7XG4gICAgYm94LXNoYWRvdzogMCA4cHggMTZweCByZ2JhKDAsMCwwLDAuMSksIDAgMnB4IDRweCByZ2JhKDAsMCwwLDAuMDgpO1xuICAgIGNvbG9yOiAjZmZmZmZmO1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICBmb250LXNpemU6IDIwcHg7XG4gICAgZm9udC13ZWlnaHQ6IDcwMDtcbiAgICBtaW4taGVpZ2h0OiAyNTVweDtcbiAgICBwYWRkaW5nOiAyNnB4O1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgwKTtcbiAgICB0cmFuc2l0aW9uOiBib3gtc2hhZG93IDI1MG1zIGVhc2UsIHRyYW5zZm9ybSAyMDBtcyBlYXNlO1xuICAgIHdpZHRoOiAyNTVweDtcblxuICAgICY6Zm9jdXMge1xuICAgICAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xuICAgIH1cblxuICAgICY6aG92ZXIge1xuICAgICAgYm94LXNoYWRvdzogMCAxMnB4IDI0cHggcmdiYSgwLDAsMCwwLjEpO1xuICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC0xcHgpO1xuICAgIH1cbiAgfVxuXG4gIC5yZXNvdXJjZS1jYXJkX19leWVicm93IHtcbiAgICBjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjUpO1xuICAgIGZvbnQtc2l6ZTogMC41ZW07XG4gICAgbGV0dGVyLXNwYWNpbmc6IDAuMTVlbTtcbiAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xuICB9XG5cbiAgLnJlc291cmNlLWNhcmRfX3RpdGxlIHtcbiAgICBsZXR0ZXItc3BhY2luZzogLTAuMDE1ZW07XG4gICAgbGluZS1oZWlnaHQ6IDEuMztcbiAgICBtYXJnaW46IDAuNWVtIDA7XG4gIH1cblxuICAucmVzb3VyY2UtY2FyZF9fY3RhIHtcbiAgICBmb250LXNpemU6IDAuN2VtO1xuICAgIGxldHRlci1zcGFjaW5nOiAwLjE1ZW07XG4gICAgbWFyZ2luLXRvcDogYXV0bztcbiAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xuICB9XG5cbiAgLnJlc291cmNlLWNhcmQtbGlzdCB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBmbGV4LXdyYXA6IHdyYXA7XG5cbiAgICAucmVzb3VyY2UtY2FyZCB7XG4gICAgICBtYXJnaW46IDAgMS41ZW0gMS41ZW0gMDtcblxuICAgICAgJjpudGgtY2hpbGQoMSkgeyBiYWNrZ3JvdW5kLWNvbG9yOiAjZmY2NjQ0OyB9XG4gICAgICAmOm50aC1jaGlsZCgyKSB7IGJhY2tncm91bmQtY29sb3I6ICMwMzNmODA7IH1cbiAgICAgICY6bnRoLWNoaWxkKDMpIHsgYmFja2dyb3VuZC1jb2xvcjogI2ZmYmY2OTsgfVxuICAgICAgJjpudGgtY2hpbGQoNCkgeyBiYWNrZ3JvdW5kLWNvbG9yOiAjODQ2YWMyOyB9XG4gICAgICAmOm50aC1jaGlsZCg1KSB7IGJhY2tncm91bmQtY29sb3I6ICMwZThlZmI7IH1cbiAgICAgICY6bnRoLWNoaWxkKDYpIHsgYmFja2dyb3VuZC1jb2xvcjogIzAwMzk1MzsgfVxuICAgICAgJjpudGgtY2hpbGQoNykgeyBiYWNrZ3JvdW5kLWNvbG9yOiAjNDRiY2MwOyB9XG4gICAgfVxuXG4gICAgQG1lZGlhIChtYXgtd2lkdGg6ICRzY3JlZW4tc20pIHtcbiAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuXG4gICAgICAucmVzb3VyY2UtY2FyZCB7XG4gICAgICAgIG1hcmdpbjogMCAwLjVlbSAxZW07XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLnF1b3RlcyB7XG4gICAgY29sb3I6ICNmZmZmZmY7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBmb250LXNpemU6IDIwcHg7XG4gICAgZm9udC13ZWlnaHQ6IDcwMDtcbiAgICBsZXR0ZXItc3BhY2luZzogLTAuMDFlbTtcblxuICAgIEBtZWRpYSAobWF4LXdpZHRoOiAkc2NyZWVuLXNtKSB7XG4gICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgIH1cbiAgfVxuXG4gIC5xdW90ZXNfX2NvbnRlbnQge1xuICAgIG1heC13aWR0aDogNDkwcHg7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICB9XG5cbiAgLnF1b3Rlc19fcXVvdGUge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgZmxleDogMTtcbiAgICBwYWRkaW5nOiA4MHB4O1xuXG4gICAgQG1lZGlhIChtYXgtd2lkdGg6ICRzY3JlZW4teHMpIHtcbiAgICAgIHBhZGRpbmc6IDQwcHg7XG4gICAgfVxuXG4gICAgJjpmaXJzdC1jaGlsZCB7XG4gICAgICBAbWVkaWEgKG1pbi13aWR0aDogJHNjcmVlbi1zbSkge1xuICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtZW5kO1xuICAgICAgfVxuICAgIH1cblxuICAgICYuam91bGUge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2ZmNjc0ZDtcbiAgICB9XG5cbiAgICAmLmNvbWljaGF1cyB7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZThlYmYxO1xuICAgICAgY29sb3I6ICMyNDI4MmU7XG4gICAgfVxuXG4gICAgJi5wYWNpZmljYSB7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjNGVkYWIxO1xuICAgIH1cblxuICAgICYubmF0dXJhbC1jeWNsZXMge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogIzc1NDVmMDtcbiAgICB9XG4gIH1cblxuICAucXVvdGVzX19sb2dvIHtcbiAgICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXCIvaW1nL3N0YXJ0dXBzL3N0YXJ0dXBzLXF1b3RlLWxvZ29zLnBuZ1wiKTtcbiAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiB0b3A7XG4gICAgYmFja2dyb3VuZC1zaXplOiAxMDAlO1xuICAgIGJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgaGVpZ2h0OiA0MHB4O1xuICAgIG1hcmdpbi1ib3R0b206IDJlbTtcbiAgICB3aWR0aDogMTYwcHg7XG5cbiAgICAmLmpvdWxlIHtcbiAgICAgIGJhY2tncm91bmQtcG9zaXRpb24teTogMDtcbiAgICB9XG5cbiAgICAmLmNvbWljaGF1cyB7XG4gICAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uLXk6IC00MHB4O1xuICAgIH1cblxuICAgICYucGFjaWZpY2Ege1xuICAgICAgYmFja2dyb3VuZC1wb3NpdGlvbi15OiAtODBweDtcbiAgICB9XG5cbiAgICAmLm5hdHVyYWwtY3ljbGVzIHtcbiAgICAgIGJhY2tncm91bmQtcG9zaXRpb24teTogLTEyMHB4O1xuICAgIH1cbiAgfVxuXG4gIC5xdW90ZXMgYmxvY2txdW90ZSB7XG4gICAgYm9yZGVyOiBub25lO1xuICAgIGZvbnQtc2l6ZTogaW5oZXJpdDtcbiAgICBsaW5lLWhlaWdodDogMS41O1xuICAgIG1hcmdpbjogMDtcbiAgICBwYWRkaW5nOiAwO1xuICB9XG5cbiAgLnF1b3RlcyBibG9ja3F1b3RlID4gc21hbGwge1xuICAgIGNvbG9yOiBpbmhlcml0O1xuICAgIGZvbnQtd2VpZ2h0OiA2MDA7XG4gICAgbWFyZ2luLXRvcDogMmVtO1xuICAgIHRleHQtYWxpZ246IHJpZ2h0O1xuXG4gICAgPiBzcGFuIHtcbiAgICAgIG9wYWNpdHk6IDAuNTtcbiAgICAgIHBhZGRpbmctbGVmdDogMC41ZW07XG4gICAgfVxuXG4gICAgJjpiZWZvcmUge1xuICAgICAgZGlzcGxheTogbm9uZTtcbiAgICB9XG4gIH1cblxuICAuZ2V0LXN0YXJ0ZWQge1xuICAgIGJhY2tncm91bmQtaW1hZ2U6IGxpbmVhci1ncmFkaWVudCg5MGRlZywgIzM4ODBmZiwgIzY3YzBmZik7XG4gICAgcGFkZGluZzogODBweCAwO1xuICB9XG5cbiAgLmdldC1zdGFydGVkIC5jb250YWluZXIge1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG5cbiAgICAmOmFmdGVyLFxuICAgICY6YmVmb3JlIHtcbiAgICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgfVxuXG4gICAgQG1lZGlhIChtYXgtd2lkdGg6ICRzY3JlZW4tbGcpIHtcbiAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgfVxuICB9XG5cbiAgLmdldC1zdGFydGVkIC5idG4ge1xuICAgIG1hcmdpbjogMC4zNWVtO1xuICB9XG5cbiAgLmdldC1zdGFydGVkIC5idG4tLXNlY29uZGFyeSB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogIzAwNzhmZjtcbiAgfVxuXG4gIC5nZXQtc3RhcnRlZCBoMixcbiAgLmdldC1zdGFydGVkIHAge1xuICAgIGZvbnQtd2VpZ2h0OiA2MDA7XG4gICAgbGV0dGVyLXNwYWNpbmc6IC0wLjAyZW07XG4gIH1cblxuICAuZ2V0LXN0YXJ0ZWQgaDIge1xuICAgIGNvbG9yOiAjZmZmZmZmO1xuICAgIGZvbnQtc2l6ZTogMjhweDtcbiAgfVxuXG4gIC5nZXQtc3RhcnRlZCBwIHtcbiAgICBjb2xvcjogIzAwM2U4MjtcbiAgICBmb250LXNpemU6IDIwcHg7XG5cbiAgICBAbWVkaWEgKG1heC13aWR0aDogJHNjcmVlbi1sZykge1xuICAgICAgbWFyZ2luLWJvdHRvbTogMWVtO1xuICAgIH1cbiAgfVxuXG59XG4iLCIjcGFnZS13aGF0LWlzLWlvbmljIHtcbiAgLmJhbm5lcixcbiAgbWFpbiB7XG4gICAgZm9udC1mYW1pbHk6ICRmb250LWZhbWlseS1pbnRlcjtcblxuICAgIGgxLFxuICAgIGgyLFxuICAgIGgzLFxuICAgIGg0IHtcbiAgICAgIGZvbnQtZmFtaWx5OiAkZm9udC1mYW1pbHktZWluYTtcbiAgICB9XG4gIH1cblxuXG4gIC5iYW5uZXIge1xuICAgIG1heC13aWR0aDogODAwcHg7XG4gICAgcGFkZGluZy10b3A6IDcycHg7XG4gICAgcGFkZGluZy1ib3R0b206IDE1MHB4O1xuXG4gICAgaDEge1xuICAgICAgcGFkZGluZy10b3A6IDgwcHg7XG4gICAgICBmb250LXNpemU6IDQwcHg7XG4gICAgICBsaW5lLWhlaWdodDogNTJweDtcbiAgICAgIGxldHRlci1zcGFjaW5nOiAtLjAwOGVtO1xuICAgICAgZm9udC13ZWlnaHQ6IDcwMDtcbiAgICAgIGJhY2tncm91bmQ6IHVybCgnL2ltZy93aGF0LWlzLWlvbmljL2lvbmljLWljb24ucG5nJykgbm8tcmVwZWF0IDUwJSAwO1xuICAgICAgYmFja2dyb3VuZC1zaXplOiA0OHB4O1xuICAgICAgY29sb3I6ICMwZjE2MjI7XG4gICAgfVxuICB9XG5cbiAgbWFpbiB7XG4gICAgYSB7XG4gICAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG4gICAgICB0cmFuc2l0aW9uOiAuMnMgb3BhY2l0eTtcblxuICAgICAgJjpob3ZlciB7XG4gICAgICAgIGNvbG9yOiAkYmx1ZTtcbiAgICAgICAgb3BhY2l0eTogLjg7XG4gICAgICB9XG4gICAgfVxuXG4gICAgc2VjdGlvbiB7XG4gICAgICBwYWRkaW5nLXRvcDogMjAwcHg7XG4gICAgICBwYWRkaW5nLWJvdHRvbTogMjAwcHg7XG4gICAgfVxuXG4gICAgLmNvbnRhaW5lciB7XG4gICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgIG1heC13aWR0aDogOTgwcHg7XG5cbiAgICAgICY6OmJlZm9yZSxcbiAgICAgICY6OmFmdGVyIHtcbiAgICAgICAgZGlzcGxheTogbm9uZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAuZ3JhcGhpYyB7XG4gICAgICBkaXNwbGF5OiBibG9jaztcbiAgICB9XG5cbiAgICAubGVmdCAuZ3JhcGhpYyB7ICBtYXJnaW4tbGVmdDogMTA0cHg7IH1cbiAgICAucmlnaHQgLmdyYXBoaWMgeyAgbWFyZ2luLXJpZ2h0OiAxMDRweDsgfVxuXG4gICAgLmNvbnRlbnQge1xuICAgICAgZmxleDogMTtcbiAgICB9XG5cbiAgICAuY2VudGVyIC5jb250YWluZXIge1xuICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICAgIG1heC13aWR0aDogNjgwcHg7XG4gICAgfVxuXG4gICAgaDIge1xuICAgICAgZm9udC1zaXplOiAzNXB4O1xuICAgICAgbGluZS1oZWlnaHQ6IDQ3cHg7XG4gICAgICBmb250LXdlaWdodDogNzAwO1xuICAgICAgbGV0dGVyLXNwYWNpbmc6IC0uMDA4ZW07XG4gICAgICBtYXJnaW4tYm90dG9tOiAyMHB4O1xuICAgICAgbWFyZ2luLXRvcDogMDtcbiAgICAgIGNvbG9yOiAjMGYxNjIyO1xuICAgIH1cblxuICAgIHAge1xuICAgICAgZm9udC1zaXplOiAyMHB4O1xuICAgICAgbGluZS1oZWlnaHQ6IDM2cHg7XG4gICAgICBsZXR0ZXItc3BhY2luZzogLS4wMmVtO1xuICAgICAgbWFyZ2luLWJvdHRvbTogMzJweDtcblxuICAgICAgJi5zbSB7XG4gICAgICAgIGZvbnQtc2l6ZTogMTVweDtcbiAgICAgICAgbGluZS1oZWlnaHQ6IDMycHg7XG4gICAgICAgIGxldHRlci1zcGFjaW5nOiAuMDFlbTtcbiAgICAgIH1cblxuICAgICAgJjpsYXN0LWNoaWxkIHtcbiAgICAgICAgbWFyZ2luLWJvdHRvbTogMDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAud2hhdCB7XG4gICAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQodG8gYm90dG9tLCAjZjdmOWZjLCAjZmRmZWZlKTtcbiAgICAgIHBhZGRpbmctYm90dG9tOiA4OHB4O1xuXG4gICAgICAuY29udGVudCB7XG4gICAgICAgIHBhZGRpbmctYm90dG9tOiAxMzRweDtcblxuICAgICAgICBAbWVkaWEgKG1heC13aWR0aDogJHNjcmVlbi1zbS1tYXgpIHtcbiAgICAgICAgICBwYWRkaW5nLWJvdHRvbTogMjBweDtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAuZ3JhcGhpYyBpbWcge1xuICAgICAgICBtYXJnaW4tcmlnaHQ6IC01MHB4O1xuICAgICAgICBtYXJnaW4tdG9wOiAtMjBweDtcbiAgICAgIH1cblxuICAgICAgdWwge1xuICAgICAgICBwYWRkaW5nOiAwO1xuICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICBtYXJnaW4tdG9wOiA0M3B4O1xuICAgICAgICBtYXJnaW4tYm90dG9tOiAwO1xuICAgICAgfVxuXG4gICAgICBsaSB7XG4gICAgICAgIGxpc3Qtc3R5bGU6IG5vbmU7XG4gICAgICAgIGJhY2tncm91bmQ6IHVybCgnL2ltZy93aGF0LWlzLWlvbmljL3dlYi1pY29ucy5wbmcnKSBuby1yZXBlYXQgMCAwO1xuICAgICAgICBiYWNrZ3JvdW5kLXNpemU6IDQwcHg7XG4gICAgICAgIHdpZHRoOiA0MHB4O1xuICAgICAgICBoZWlnaHQ6IDQwcHg7XG4gICAgICAgIG1hcmdpbi1yaWdodDogMjJweDtcblxuICAgICAgICAmLmNzcyB7IGJhY2tncm91bmQtcG9zaXRpb246IDAgLTQwcHg7IH1cbiAgICAgICAgJi5qcyB7IGJhY2tncm91bmQtcG9zaXRpb246IDAgLTgwcHg7IH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAua2l0IHtcbiAgICAgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCh0byBib3R0b20sICNmN2Y5ZmIsICNmZWZlZmUpO1xuICAgICAgcGFkZGluZy1ib3R0b206IDE5MHB4O1xuXG4gICAgICAuZ3JhcGhpYyB7XG4gICAgICAgIG1hcmdpbi1yaWdodDogNjhweDtcbiAgICAgIH1cblxuICAgICAgLmNvbnRlbnQge1xuICAgICAgICBtYXJnaW4tYm90dG9tOiA4cHg7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLnRlYW1zIHtcbiAgICAgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCh0byBib3R0b20sICNmOGY5ZmIsICNmZWZlZmUpO1xuICAgICAgcGFkZGluZy10b3A6IDE4M3B4O1xuICAgICAgcGFkZGluZy1ib3R0b206IDE3NnB4O1xuXG4gICAgICAuZ3JhcGhpYyB7XG4gICAgICAgIG1hcmdpbi1yaWdodDogLTY1cHg7XG4gICAgICAgIHBhZGRpbmctdG9wOiAzNHB4O1xuICAgICAgICBwYWRkaW5nLWxlZnQ6IDFweDtcbiAgICAgIH1cblxuICAgICAgaW9uLWljb24ge1xuICAgICAgICBmb250LXNpemU6IC45ZW07XG4gICAgICAgIHZlcnRpY2FsLWFsaWduOiAtNyU7XG4gICAgICAgIG1hcmdpbi1sZWZ0OiAtMnB4O1xuICAgICAgfVxuICAgIH1cblxuICAgIC5nbG9iYWwge1xuICAgICAgYmFja2dyb3VuZC1pbWFnZTpcbiAgICAgICAgdXJsKCcvaW1nL3doYXQtaXMtaW9uaWMvY29tbXVuaXR5LWJnLnBuZycpLFxuICAgICAgICBsaW5lYXItZ3JhZGllbnQodG8gYm90dG9tLCAjZjdmOWZjLCAjZmVmZWZlKTtcbiAgICAgIGJhY2tncm91bmQtc2l6ZTogY292ZXIsIDEwMCU7XG4gICAgICBiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0O1xuICAgICAgYmFja2dyb3VuZC1wb3NpdGlvbjogNTAlIDA7XG4gICAgICBwYWRkaW5nLXRvcDogMjA0cHg7XG4gICAgICBwYWRkaW5nLWJvdHRvbTogMTk4cHg7XG5cbiAgICAgIC5jb250ZW50IHtcbiAgICAgICAgbWFyZ2luLXRvcDogLTEwcHg7XG4gICAgICB9XG5cbiAgICAgIC5ncmFwaGljIHtcbiAgICAgICAgbWFyZ2luLWxlZnQ6IC0xMnB4O1xuICAgICAgICBtYXJnaW4tcmlnaHQ6IDEyNHB4O1xuXG4gICAgICAgIEBtZWRpYSAobWF4LXdpZHRoOiAkc2NyZWVuLXNtLW1heCkge1xuICAgICAgICAgIG1hcmdpbi1yaWdodDogMjRweDtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB1bCB7XG4gICAgICAgIHBhZGRpbmc6IDA7XG4gICAgICAgIG1hcmdpbjogMDtcbiAgICAgIH1cblxuICAgICAgbGkge1xuICAgICAgICBsaXN0LXN0eWxlOiBub25lO1xuICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICBwYWRkaW5nLWxlZnQ6IDEwOHB4O1xuICAgICAgICBtYXJnaW46IDU3cHggMDtcblxuICAgICAgICAmOjpiZWZvcmUge1xuICAgICAgICAgIGJhY2tncm91bmQ6IHVybCgnL2ltZy93aGF0LWlzLWlvbmljL2NvbW11bml0eS1pY29ucy5wbmcnKSBuby1yZXBlYXQgMCAwO1xuICAgICAgICAgIGJhY2tncm91bmQtc2l6ZTogODhweDtcbiAgICAgICAgICBoZWlnaHQ6IDg4cHg7XG4gICAgICAgICAgd2lkdGg6IDg4cHg7XG4gICAgICAgICAgY29udGVudDogJyc7XG4gICAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICAgIHRvcDogY2FsYyg1MCUgLSA0NHB4KTtcbiAgICAgICAgICBsZWZ0OiAwO1xuICAgICAgICB9XG5cbiAgICAgICAgJjpmaXJzdC1jaGlsZCB7XG4gICAgICAgICAgbWFyZ2luLXRvcDogMDtcbiAgICAgICAgfVxuXG4gICAgICAgICY6bGFzdC1jaGlsZCB7XG4gICAgICAgICAgbWFyZ2luLWJvdHRvbTogMDtcbiAgICAgICAgfVxuXG4gICAgICAgIHN0cm9uZyB7XG4gICAgICAgICAgY29sb3I6ICMzODgwZmY7XG4gICAgICAgICAgZm9udC1zaXplOiAzNHB4O1xuICAgICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7XG4gICAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgICAgZm9udC1mYW1pbHk6ICRmb250LWZhbWlseS1laW5hO1xuICAgICAgICAgIGxpbmUtaGVpZ2h0OiAzM3B4O1xuICAgICAgICB9XG5cbiAgICAgICAgc3BhbiB7XG4gICAgICAgICAgY29sb3I6ICM2OGI0ZmY7XG4gICAgICAgICAgZm9udC1zaXplOiAxOXB4O1xuICAgICAgICB9XG5cbiAgICAgICAgJjpudGgtY2hpbGQoMik6OmJlZm9yZSB7IGJhY2tncm91bmQtcG9zaXRpb246IDAgLTg4cHg7IH1cbiAgICAgICAgJjpudGgtY2hpbGQoMyk6OmJlZm9yZSB7IGJhY2tncm91bmQtcG9zaXRpb246IDAgLTE3NnB4OyB9XG4gICAgICAgICY6bnRoLWNoaWxkKDQpOjpiZWZvcmUgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwIC0yNjRweDsgfVxuICAgICAgfVxuICAgIH1cblxuICAgIC53ZWIge1xuICAgICAgYmFja2dyb3VuZC1pbWFnZTpcbiAgICAgICAgdXJsKCcvaW1nL3doYXQtaXMtaW9uaWMvcGhpbG9zb3BoeS1iZy5wbmcnKSxcbiAgICAgICAgbGluZWFyLWdyYWRpZW50KHRvIGJvdHRvbSwgI2Y3ZjlmYywgI2ZlZmVmZSk7XG4gICAgICBiYWNrZ3JvdW5kLXNpemU6IGNvdmVyLCAxMDAlO1xuICAgICAgYmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdDtcbiAgICAgIGJhY2tncm91bmQtcG9zaXRpb246IDUwJSAwO1xuICAgICAgcGFkZGluZy1ib3R0b206IDE5MHB4O1xuXG4gICAgICBoNCB7XG4gICAgICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XG4gICAgICAgIGZvbnQtc2l6ZTogMTJweDtcbiAgICAgICAgZm9udC13ZWlnaHQ6IDcwMDtcbiAgICAgICAgbGV0dGVyLXNwYWNpbmc6IC4xNGVtO1xuICAgICAgICBtYXJnaW4tdG9wOiAwO1xuICAgICAgICBtYXJnaW4tYm90dG9tOiAyNHB4O1xuICAgICAgICBjb2xvcjogIzBmMTYyMjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBAbWVkaWEgKG1heC13aWR0aDogJHNjcmVlbi1zbS1tYXgpIHtcbiAgICAgIGltZyB7XG4gICAgICAgIG1heC13aWR0aDogMzIwcHg7XG4gICAgICB9XG5cbiAgICAgIC5sZWZ0IC5ncmFwaGljIHtcbiAgICAgICAgbWFyZ2luLWxlZnQ6IDIwcHg7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgQG1lZGlhIChtYXgtd2lkdGg6ICRzY3JlZW4teHMtbWF4KSB7XG4gICAgLmJhbm5lciB7XG4gICAgICBwYWRkaW5nLWJvdHRvbTogNjRweDtcbiAgICB9XG5cbiAgICBtYWluIHtcbiAgICAgIC5ncmFwaGljIHtcbiAgICAgICAgbWFyZ2luOiAwO1xuICAgICAgfVxuXG4gICAgICBzZWN0aW9uIHtcbiAgICAgICAgcGFkZGluZy10b3A6IDk2cHg7XG4gICAgICAgIHBhZGRpbmctYm90dG9tOiA5NnB4O1xuXG4gICAgICAgIC5jb250YWluZXIge1xuICAgICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG5cbiAgICAgICAgfVxuXG4gICAgICAgICYubGVmdCAuY29udGFpbmVyIHtcbiAgICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uLXJldmVyc2U7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLmNvbnRhaW5lciB7XG4gICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgICB9XG5cbiAgICAgIC53aGF0ICB7XG4gICAgICAgIC5ncmFwaGljIHtcbiAgICAgICAgICBtYXJnaW46IDA7XG4gICAgICAgIH1cblxuICAgICAgICB1bCB7XG4gICAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLmtpdCB7XG4gICAgICAgIHBhZGRpbmctYm90dG9tOiA5NnB4O1xuXG4gICAgICAgIC5ncmFwaGljIHtcbiAgICAgICAgICBtYXJnaW46IDAgMCA0MnB4O1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC50ZWFtcyB7XG4gICAgICAgIHBhZGRpbmctdG9wOiA5NnB4O1xuICAgICAgICBwYWRkaW5nLWJvdHRvbTogOTZweDtcblxuICAgICAgICAuZ3JhcGhpYyB7XG4gICAgICAgICAgbWFyZ2luOiAwO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC5nbG9iYWwge1xuICAgICAgICBwYWRkaW5nLXRvcDogOTZweDtcbiAgICAgICAgcGFkZGluZy1ib3R0b206IDk2cHg7XG5cbiAgICAgICAgLmdyYXBoaWMge1xuICAgICAgICAgIG1hcmdpbi1ib3R0b206IDY0cHg7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLndlYiB7XG4gICAgICAgIHBhZGRpbmctYm90dG9tOiA2NHB4O1xuICAgICAgfVxuICAgIH1cbiAgfVxufSJdfQ== */"
  },
  {
    "path": "content/css/syntax.css",
    "content": ".highlight  { background: #ffffff; }\n.highlight .c { color: #999988; font-style: italic } /* Comment */\n.highlight .err { color: #a61717; background-color: #e3d2d2 } /* Error */\n.highlight .k { font-weight: bold } /* Keyword */\n.highlight .o { font-weight: bold } /* Operator */\n.highlight .cm { color: #999988; font-style: italic } /* Comment.Multiline */\n.highlight .cp { color: #999999; font-weight: bold } /* Comment.Preproc */\n.highlight .c1 { color: #999988; font-style: italic } /* Comment.Single */\n.highlight .cs { color: #999999; font-weight: bold; font-style: italic } /* Comment.Special */\n.highlight .gd { color: #000000; background-color: #ffdddd } /* Generic.Deleted */\n.highlight .gd .x { color: #000000; background-color: #ffaaaa } /* Generic.Deleted.Specific */\n.highlight .ge { font-style: italic } /* Generic.Emph */\n.highlight .gr { color: #aa0000 } /* Generic.Error */\n.highlight .gh { color: #999999 } /* Generic.Heading */\n.highlight .gi { color: #000000; background-color: #ddffdd } /* Generic.Inserted */\n.highlight .gi .x { color: #000000; background-color: #aaffaa } /* Generic.Inserted.Specific */\n.highlight .go { color: #888888 } /* Generic.Output */\n.highlight .gp { color: #555555 } /* Generic.Prompt */\n.highlight .gs { font-weight: bold } /* Generic.Strong */\n.highlight .gu { color: #aaaaaa } /* Generic.Subheading */\n.highlight .gt { color: #aa0000 } /* Generic.Traceback */\n.highlight .kc { font-weight: bold } /* Keyword.Constant */\n.highlight .kd { font-weight: bold } /* Keyword.Declaration */\n.highlight .kp { font-weight: bold } /* Keyword.Pseudo */\n.highlight .kr { font-weight: bold } /* Keyword.Reserved */\n.highlight .kt { color: #445588; font-weight: bold } /* Keyword.Type */\n.highlight .m { color: #009999 } /* Literal.Number */\n.highlight .s { color: #d14 } /* Literal.String */\n.highlight .na { color: #008080 } /* Name.Attribute */\n.highlight .nb { color: #0086B3 } /* Name.Builtin */\n.highlight .nc { color: #445588; font-weight: bold } /* Name.Class */\n.highlight .no { color: #008080 } /* Name.Constant */\n.highlight .ni { color: #800080 } /* Name.Entity */\n.highlight .ne { color: #990000; font-weight: bold } /* Name.Exception */\n.highlight .nf { color: #990000; font-weight: bold } /* Name.Function */\n.highlight .nn { color: #555555 } /* Name.Namespace */\n.highlight .nt { color: #000080 } /* Name.Tag */\n.highlight .nv { color: #008080 } /* Name.Variable */\n.highlight .ow { font-weight: bold } /* Operator.Word */\n.highlight .w { color: #bbbbbb } /* Text.Whitespace */\n.highlight .mf { color: #009999 } /* Literal.Number.Float */\n.highlight .mh { color: #009999 } /* Literal.Number.Hex */\n.highlight .mi { color: #009999 } /* Literal.Number.Integer */\n.highlight .mo { color: #009999 } /* Literal.Number.Oct */\n.highlight .sb { color: #d14 } /* Literal.String.Backtick */\n.highlight .sc { color: #d14 } /* Literal.String.Char */\n.highlight .sd { color: #d14 } /* Literal.String.Doc */\n.highlight .s2 { color: #d14 } /* Literal.String.Double */\n.highlight .se { color: #d14 } /* Literal.String.Escape */\n.highlight .sh { color: #d14 } /* Literal.String.Heredoc */\n.highlight .si { color: #d14 } /* Literal.String.Interpol */\n.highlight .sx { color: #d14 } /* Literal.String.Other */\n.highlight .sr { color: #009926 } /* Literal.String.Regex */\n.highlight .s1 { color: #d14 } /* Literal.String.Single */\n.highlight .ss { color: #990073 } /* Literal.String.Symbol */\n.highlight .bp { color: #999999 } /* Name.Builtin.Pseudo */\n.highlight .vc { color: #008080 } /* Name.Variable.Class */\n.highlight .vg { color: #008080 } /* Name.Variable.Global */\n.highlight .vi { color: #008080 } /* Name.Variable.Instance */\n.highlight .il { color: #009999 } /* Literal.Number.Integer.Long */\n"
  },
  {
    "path": "content/css/v2-demos/css/ionic.css",
    "content": "@charset \"UTF-8\";\n/*! normalize.css v3.0.2 | MIT License | github.com/necolas/normalize.css */\naudio,\ncanvas,\nprogress,\nvideo {\n  vertical-align: baseline; }\n\naudio:not([controls]) {\n  display: none;\n  height: 0; }\n\nb,\nstrong {\n  font-weight: bold; }\n\nimg {\n  border: 0; }\n\nsvg:not(:root) {\n  overflow: hidden; }\n\nfigure {\n  margin: 1em 40px; }\n\nhr {\n  box-sizing: content-box;\n  height: 0; }\n\npre {\n  overflow: auto; }\n\ncode,\nkbd,\npre,\nsamp {\n  font-family: monospace, monospace;\n  font-size: 1em; }\n\nlabel,\ninput,\nselect,\ntextarea {\n  line-height: normal;\n  font-family: inherit; }\n\nform,\ninput,\noptgroup,\nselect {\n  color: inherit;\n  font: inherit;\n  margin: 0; }\n\nhtml input[type=\"button\"],\ninput[type=\"reset\"],\ninput[type=\"submit\"] {\n  -webkit-appearance: button;\n  cursor: pointer; }\n\nbutton[disabled],\nhtml input[disabled] {\n  cursor: default; }\n\nbutton::-moz-focus-inner,\ninput::-moz-focus-inner {\n  border: 0;\n  padding: 0; }\n\ninput[type=\"checkbox\"],\ninput[type=\"radio\"] {\n  box-sizing: border-box;\n  padding: 0; }\n\ninput[type=\"number\"]::-webkit-inner-spin-button,\ninput[type=\"number\"]::-webkit-outer-spin-button {\n  height: auto; }\n\ninput[type=\"search\"]::-webkit-search-cancel-button,\ninput[type=\"search\"]::-webkit-search-decoration {\n  -webkit-appearance: none; }\n\ntable {\n  border-collapse: collapse;\n  border-spacing: 0; }\n\ntd,\nth {\n  padding: 0; }\n\n* {\n  box-sizing: border-box;\n  -webkit-tap-highlight-color: transparent;\n  -webkit-tap-highlight-color: transparent;\n  -webkit-touch-callout: none; }\n\nhtml {\n  width: 100%;\n  height: 100%;\n  -ms-text-size-adjust: 100%;\n  -webkit-text-size-adjust: 100%; }\n\nbody {\n  position: fixed;\n  overflow: hidden;\n  width: 100%;\n  height: 100%;\n  max-width: 100%;\n  max-height: 100%;\n  margin: 0;\n  padding: 0;\n  word-wrap: break-word;\n  -ms-touch-action: manipulation;\n  touch-action: manipulation;\n  -webkit-user-drag: none;\n  -ms-content-zooming: none;\n  -webkit-font-smoothing: antialiased;\n  font-smoothing: antialiased;\n  text-rendering: optimizeLegibility;\n  -webkit-text-size-adjust: none;\n  -ms-text-size-adjust: none;\n  text-size-adjust: none;\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  -ms-user-select: none;\n  user-select: none;\n  background-color: #fff; }\n\nion-app,\nion-nav,\nion-tabs {\n  display: -webkit-box;\n  display: -webkit-flex;\n  display: -ms-flexbox;\n  display: flex;\n  -webkit-box-orient: vertical;\n  -webkit-box-direction: normal;\n  -webkit-flex-direction: column;\n  -ms-flex-direction: column;\n  flex-direction: column;\n  position: absolute;\n  top: 0;\n  left: 0;\n  width: 100%;\n  height: 100%;\n  overflow: hidden; }\n\nion-navbar-section {\n  display: block;\n  width: 100%;\n  min-height: 50px; }\n\nion-content-section {\n  display: block;\n  -webkit-box-flex: 1;\n  -webkit-flex: 1;\n  -ms-flex: 1;\n  flex: 1;\n  position: relative;\n  width: 100%;\n  height: 100%; }\n\nion-page {\n  display: none;\n  -webkit-box-orient: vertical;\n  -webkit-box-direction: normal;\n  -webkit-flex-direction: column;\n  -ms-flex-direction: column;\n  flex-direction: column;\n  position: absolute;\n  top: 0;\n  left: 0;\n  width: 100%;\n  height: 100%;\n  -webkit-transform: translateZ(0);\n  transform: translateZ(0); }\n  ion-page.show-page {\n    display: -webkit-box;\n    display: -webkit-flex;\n    display: -ms-flexbox;\n    display: flex; }\n\nion-content {\n  position: relative;\n  display: block;\n  width: 100%;\n  height: 100%;\n  -webkit-box-flex: 1;\n  -webkit-flex: 1;\n  -ms-flex: 1;\n  flex: 1;\n  background-color: #fff; }\n\nscroll-content {\n  position: absolute;\n  top: 0;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  display: block;\n  overflow-y: scroll;\n  overflow-x: hidden;\n  -webkit-overflow-scrolling: touch;\n  will-change: scroll-position; }\n\nion-tabbar {\n  display: block;\n  position: absolute;\n  top: 0;\n  left: 0;\n  width: 100%;\n  min-height: 50px; }\n\nion-tab-section {\n  display: block;\n  position: relative;\n  top: 0;\n  left: 0;\n  width: 100%;\n  height: 100%;\n  overflow: hidden; }\n\nion-page.tab-subpage {\n  position: fixed;\n  z-index: 10; }\n\nion-navbar {\n  display: block;\n  position: absolute;\n  top: 0;\n  left: 0;\n  width: 100%;\n  min-height: 50px;\n  z-index: 10; }\n\nion-navbar-section ion-navbar.toolbar {\n  position: absolute; }\n\nion-toolbar {\n  display: block;\n  width: 100%;\n  height: 50px; }\n\nion-toolbar[position=bottom] {\n  bottom: 0;\n  z-index: 10; }\n\n.sticky {\n  position: -webkit-sticky;\n  position: sticky;\n  top: 0; }\n\nhtml {\n  font-size: 62.5%; }\n\nbody {\n  font-size: 1.4rem;\n  font-family: -apple-system, \"Helvetica Neue\", \"Roboto\", sans-serif; }\n\na {\n  color: #387ef5;\n  background-color: transparent; }\n\n.enable-hover a:hover {\n  opacity: 0.7; }\n\nh1, h2, h3, h4, h5, h6 {\n  font-weight: 500;\n  line-height: 1.2;\n  margin-top: 1.6rem;\n  margin-bottom: 1rem; }\n  h1:first-child, h2:first-child, h3:first-child, h4:first-child, h5:first-child, h6:first-child {\n    margin-top: -0.3rem; }\n\nh1 + h2,\nh1 + h3,\nh2 + h3 {\n  margin-top: -0.3rem; }\n\nh1 {\n  font-size: 3.6rem;\n  margin-top: 2rem; }\n\nh2 {\n  font-size: 3rem;\n  margin-top: 1.8rem; }\n\nh3 {\n  font-size: 2.4rem; }\n\nh4 {\n  font-size: 2rem; }\n\nh5 {\n  font-size: 1.6rem; }\n\nh6 {\n  font-size: 1.4rem; }\n\nsmall {\n  font-size: 75%; }\n\nsub,\nsup {\n  font-size: 75%;\n  line-height: 0;\n  position: relative;\n  vertical-align: baseline; }\n\nsup {\n  top: -0.5em; }\n\nsub {\n  bottom: -0.25em; }\n\nh1[primary], h2[primary], h3[primary], h4[primary], h5[primary], h6[primary],\np[primary],\nspan[primary],\na:not([button])[primary],\nsmall[primary],\nb[primary],\ni[primary],\nu[primary],\nstrong[primary],\nem[primary],\nsub[primary],\nsup[primary] {\n  color: #387ef5 !important; }\n\nh1[secondary], h2[secondary], h3[secondary], h4[secondary], h5[secondary], h6[secondary],\np[secondary],\nspan[secondary],\na:not([button])[secondary],\nsmall[secondary],\nb[secondary],\ni[secondary],\nu[secondary],\nstrong[secondary],\nem[secondary],\nsub[secondary],\nsup[secondary] {\n  color: #32db64 !important; }\n\nh1[danger], h2[danger], h3[danger], h4[danger], h5[danger], h6[danger],\np[danger],\nspan[danger],\na:not([button])[danger],\nsmall[danger],\nb[danger],\ni[danger],\nu[danger],\nstrong[danger],\nem[danger],\nsub[danger],\nsup[danger] {\n  color: #f53d3d !important; }\n\nh1[light], h2[light], h3[light], h4[light], h5[light], h6[light],\np[light],\nspan[light],\na:not([button])[light],\nsmall[light],\nb[light],\ni[light],\nu[light],\nstrong[light],\nem[light],\nsub[light],\nsup[light] {\n  color: #f4f4f4 !important; }\n\nh1[dark], h2[dark], h3[dark], h4[dark], h5[dark], h6[dark],\np[dark],\nspan[dark],\na:not([button])[dark],\nsmall[dark],\nb[dark],\ni[dark],\nu[dark],\nstrong[dark],\nem[dark],\nsub[dark],\nsup[dark] {\n  color: #222 !important; }\n\n.align-left {\n  text-align: left; }\n\n.align-center {\n  text-align: center; }\n\n.align-right {\n  text-align: right; }\n\n.no-transition {\n  -webkit-transition: none !important;\n  transition: none !important; }\n\n.hide,\n[hidden],\ntemplate,\nroot-anchor {\n  display: none !important; }\n\n[padding],\n[padding] > scroll-content {\n  padding: 16px; }\n\n[padding-top] {\n  padding-top: 16px; }\n\n[padding-right] {\n  padding-right: 16px; }\n\n[padding-bottom] {\n  padding-bottom: 16px; }\n\n[padding-left] {\n  padding-left: 16px; }\n\n[padding-vertical] {\n  padding-top: 16px;\n  padding-bottom: 16px; }\n\n[padding-horizontal] {\n  padding-right: 16px;\n  padding-left: 16px; }\n\n:focus,\n:active {\n  outline: none; }\n\n.focus-outline :focus {\n  outline-offset: -1px;\n  outline: thin dotted; }\n\n.focus-outline button:focus,\n.focus-outline [button]:focus {\n  border-color: #51a7e8;\n  box-shadow: 0px 0px 8px 0px #51a7e8;\n  outline: thin solid #51a7e8; }\n\n.focus-outline ion-input.has-focus,\n.focus-outline button[ion-item]:focus,\n.focus-outline a[ion-item]:focus {\n  border-color: #51a7e8;\n  box-shadow: inset 0px 0px 8px 0px #51a7e8 !important; }\n\n.focus-outline ion-input :focus {\n  outline: none; }\n\nfocus-ctrl {\n  position: fixed; }\n  focus-ctrl input,\n  focus-ctrl button {\n    position: fixed;\n    top: 1px;\n    width: 9px;\n    left: -9999px;\n    z-index: 9999;\n    pointer-events: none; }\n\n.hide-focused-input {\n  -webkit-box-flex: 0 !important;\n  -webkit-flex: 0 0 8px !important;\n  -ms-flex: 0 0 8px !important;\n  flex: 0 0 8px !important;\n  margin: 0 !important;\n  -webkit-transform: translate3d(-9999px, 0, 0);\n  transform: translate3d(-9999px, 0, 0);\n  pointer-events: none; }\n\n[floating-label] .hide-focused-input,\n[stacked-label] .hide-focused-input {\n  margin-top: -8px !important; }\n\n.cloned-input {\n  pointer-events: none; }\n\nbackdrop {\n  position: absolute;\n  z-index: 1;\n  top: 0;\n  left: 0;\n  width: 100%;\n  height: 100%;\n  background-color: #000;\n  opacity: 0.01;\n  display: block;\n  -webkit-transform: translateZ(0);\n  transform: translateZ(0); }\n\nclick-block {\n  display: block;\n  position: absolute;\n  top: 0;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  opacity: 0;\n  z-index: 9999;\n  -webkit-transform: translate3d(0px, -100%, 0px);\n  transform: translate3d(0px, -100%, 0px);\n  -webkit-transform: translate3d(0px, calc(-100% + 1px), 0px);\n  transform: translate3d(0px, calc(-100% + 1px), 0px); }\n\n.click-block-active {\n  -webkit-transform: translate3d(0px, 0px, 0px);\n  transform: translate3d(0px, 0px, 0px); }\n\n@-webkit-keyframes rotation {\n  from {\n    -webkit-transform: rotate(0deg);\n    transform: rotate(0deg); }\n  to {\n    -webkit-transform: rotate(359deg);\n    transform: rotate(359deg); } }\n\n@keyframes rotation {\n  from {\n    -webkit-transform: rotate(0deg);\n    transform: rotate(0deg); }\n  to {\n    -webkit-transform: rotate(359deg);\n    transform: rotate(359deg); } }\n\nion-loading-icon {\n  display: -webkit-box;\n  display: -webkit-flex;\n  display: -ms-flexbox;\n  display: flex;\n  -webkit-align-self: center;\n  -ms-flex-item-align: center;\n  align-self: center;\n  margin: auto;\n  font-family: 'Ionicons';\n  font-size: 128px;\n  color: #666666;\n  -webkit-animation: rotation 45s infinite linear;\n  animation: rotation 45s infinite linear; }\n  ion-loading-icon:before {\n    content: \"\\f44e\"; }\n\n.toolbar {\n  position: relative;\n  z-index: 10;\n  display: -webkit-box;\n  display: -webkit-flex;\n  display: -ms-flexbox;\n  display: flex;\n  -webkit-box-orient: horizontal;\n  -webkit-box-direction: normal;\n  -webkit-flex-direction: row;\n  -ms-flex-direction: row;\n  flex-direction: row;\n  -webkit-box-align: center;\n  -webkit-align-items: center;\n  -ms-flex-align: center;\n  align-items: center;\n  -webkit-box-pack: justify;\n  -webkit-justify-content: space-between;\n  -ms-flex-pack: justify;\n  justify-content: space-between;\n  -webkit-box-ordinal-group: -9;\n  -webkit-order: -10;\n  -ms-flex-order: -10;\n  order: -10;\n  -webkit-box-flex: 0;\n  -webkit-flex: 0;\n  -ms-flex: 0;\n  flex: 0;\n  padding: 4px;\n  width: 100%;\n  overflow: hidden; }\n  .toolbar button,\n  .toolbar [button] {\n    background-color: transparent;\n    color: #387ef5;\n    box-shadow: none; }\n\n.toolbar toolbar-background {\n  position: absolute;\n  left: 0;\n  top: 0;\n  width: 100%;\n  height: 100%;\n  z-index: -1;\n  border: 0;\n  border-color: #b2b2b2;\n  background-color: #f8f8f8;\n  pointer-events: none; }\n\ntoolbar-content {\n  display: block;\n  -webkit-box-flex: 1;\n  -webkit-flex: 1;\n  -ms-flex: 1;\n  flex: 1;\n  -webkit-box-ordinal-group: 31;\n  -webkit-order: 30;\n  -ms-flex-order: 30;\n  order: 30; }\n\n.toolbar button:hover:not(.disable-hover),\n.toolbar [button]:hover:not(.disable-hover),\n.toolbar button.activated,\n.toolbar [button].activated {\n  color: #387ef5;\n  background-color: transparent; }\n\n.toolbar[position=bottom] {\n  -webkit-box-ordinal-group: 11;\n  -webkit-order: 10;\n  -ms-flex-order: 10;\n  order: 10; }\n\nion-title {\n  -webkit-box-flex: 1;\n  -webkit-flex: 1;\n  -ms-flex: 1;\n  flex: 1;\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.toolbar-title {\n  display: block;\n  width: 100%;\n  white-space: nowrap;\n  text-overflow: ellipsis;\n  overflow: hidden;\n  color: #000; }\n\n.toolbar [menu-toggle] {\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  margin: 0 6px;\n  padding: 0;\n  min-width: 36px;\n  -webkit-box-ordinal-group: 21;\n  -webkit-order: 20;\n  -ms-flex-order: 20;\n  order: 20;\n  box-shadow: none; }\n\n.toolbar [menu-toggle][secondary] {\n  -webkit-box-ordinal-group: 61;\n  -webkit-order: 60;\n  -ms-flex-order: 60;\n  order: 60; }\n\n.toolbar [menu-toggle] icon {\n  padding: 0 6px;\n  font-size: 2.8rem; }\n\nion-nav-items {\n  display: block;\n  margin: 0 0.2rem;\n  pointer-events: none;\n  -webkit-box-ordinal-group: 41;\n  -webkit-order: 40;\n  -ms-flex-order: 40;\n  order: 40; }\n\nion-nav-items[secondary] {\n  -webkit-box-ordinal-group: 51;\n  -webkit-order: 50;\n  -ms-flex-order: 50;\n  order: 50; }\n\nion-nav-items button,\nion-nav-items a,\nion-nav-items input,\nion-nav-items textarea,\nion-nav-items div {\n  pointer-events: auto; }\n\nion-nav-items,\n[menu-toggle] {\n  z-index: 99; }\n\n.toolbar[primary] toolbar-background {\n  background-color: #387ef5;\n  border-color: #0c60ee; }\n\n.toolbar[primary] .toolbar-title,\n.toolbar[primary] button,\n.toolbar[primary] [button],\n.toolbar[primary] button:hover:not(.disable-hover),\n.toolbar[primary] [button]:hover:not(.disable-hover),\n.toolbar[primary] a {\n  color: white; }\n\n.toolbar[secondary] toolbar-background {\n  background-color: #32db64;\n  border-color: #21b94e; }\n\n.toolbar[secondary] .toolbar-title,\n.toolbar[secondary] button,\n.toolbar[secondary] [button],\n.toolbar[secondary] button:hover:not(.disable-hover),\n.toolbar[secondary] [button]:hover:not(.disable-hover),\n.toolbar[secondary] a {\n  color: white; }\n\n.toolbar[danger] toolbar-background {\n  background-color: #f53d3d;\n  border-color: #f30c0c; }\n\n.toolbar[danger] .toolbar-title,\n.toolbar[danger] button,\n.toolbar[danger] [button],\n.toolbar[danger] button:hover:not(.disable-hover),\n.toolbar[danger] [button]:hover:not(.disable-hover),\n.toolbar[danger] a {\n  color: white; }\n\n.toolbar[light] toolbar-background {\n  background-color: #f4f4f4;\n  border-color: #dbdbdb; }\n\n.toolbar[light] .toolbar-title,\n.toolbar[light] button,\n.toolbar[light] [button],\n.toolbar[light] button:hover:not(.disable-hover),\n.toolbar[light] [button]:hover:not(.disable-hover),\n.toolbar[light] a {\n  color: black; }\n\n.toolbar[dark] toolbar-background {\n  background-color: #222;\n  border-color: #090909; }\n\n.toolbar[dark] .toolbar-title,\n.toolbar[dark] button,\n.toolbar[dark] [button],\n.toolbar[dark] button:hover:not(.disable-hover),\n.toolbar[dark] [button]:hover:not(.disable-hover),\n.toolbar[dark] a {\n  color: white; }\n\nion-action-sheet {\n  position: absolute;\n  top: 0;\n  left: 0;\n  width: 100%;\n  height: 100%;\n  display: block;\n  z-index: 1000; }\n\naction-sheet-wrapper {\n  position: absolute;\n  z-index: 10;\n  bottom: 0;\n  left: 0;\n  right: 0;\n  width: 100%;\n  display: block;\n  max-width: 500px;\n  margin: auto;\n  -webkit-transform: translate3d(0, 100%, 0);\n  transform: translate3d(0, 100%, 0); }\n\n.action-sheet-container {\n  width: auto;\n  overflow: hidden; }\n  .action-sheet-container button {\n    display: block;\n    padding: 1px;\n    width: 100%;\n    margin: 0;\n    border-radius: 0;\n    border-color: #d1d3d6;\n    background-color: transparent;\n    color: #007aff;\n    font-size: 21px; }\n  .action-sheet-container button.activated {\n    box-shadow: none;\n    border-color: #d1d3d6;\n    background: #e4e5e7; }\n\n.action-sheet-title {\n  padding: 10px;\n  color: #8f8f8f;\n  text-align: center;\n  font-size: 13px; }\n\n.action-sheet-group {\n  background-color: #fff;\n  overflow: hidden; }\n  .action-sheet-group button {\n    border-width: 1px 0px 0px 0px; }\n  .action-sheet-group button:first-child:last-child {\n    border-width: 0; }\n\n.action-sheet-options {\n  background: #f1f2f3; }\n\nitem-badge {\n  display: inline-block;\n  padding: 3px 8px;\n  min-width: 10px;\n  border-radius: 10px;\n  vertical-align: baseline;\n  text-align: center;\n  white-space: nowrap;\n  font-size: 1.3rem;\n  font-weight: bold;\n  line-height: 1;\n  background: #ccc; }\n  item-badge:empty {\n    display: none; }\n\nbutton,\n[button] {\n  position: relative;\n  display: -webkit-inline-box;\n  display: -webkit-inline-flex;\n  display: -ms-inline-flexbox;\n  display: inline-flex;\n  -webkit-flex-shrink: 0;\n  -ms-flex-negative: 0;\n  flex-shrink: 0;\n  -webkit-flex-flow: row nowrap;\n  -ms-flex-flow: row nowrap;\n  flex-flow: row nowrap;\n  -webkit-box-align: center;\n  -webkit-align-items: center;\n  -ms-flex-align: center;\n  align-items: center;\n  -webkit-box-pack: center;\n  -webkit-justify-content: center;\n  -ms-flex-pack: center;\n  justify-content: center;\n  -webkit-transition: background-color, opacity 100ms linear;\n  transition: background-color, opacity 100ms linear;\n  margin: 0.4rem 0.2rem;\n  padding: 0 1em;\n  min-height: 2.8em;\n  line-height: 1;\n  border: 1px solid #ccc;\n  border: transparent;\n  border-radius: 4px;\n  font-size: 1.6rem;\n  font-family: inherit;\n  font-variant: inherit;\n  font-style: inherit;\n  white-space: nowrap;\n  text-overflow: ellipsis;\n  overflow: hidden;\n  text-align: center;\n  text-transform: none;\n  vertical-align: top;\n  vertical-align: -webkit-baseline-middle;\n  cursor: pointer;\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  -ms-user-select: none;\n  user-select: none;\n  -webkit-appearance: none;\n  -moz-appearance: none;\n  background: #387ef5;\n  color: white; }\n  button:hover:not(.disable-hover),\n  [button]:hover:not(.disable-hover) {\n    opacity: 0.8;\n    text-decoration: none; }\n  button.activated,\n  [button].activated {\n    opacity: 1;\n    background-color: #3474e1; }\n  button[block],\n  [button][block] {\n    display: -webkit-box;\n    display: -webkit-flex;\n    display: -ms-flexbox;\n    display: flex;\n    clear: both;\n    margin-right: 0;\n    margin-left: 0;\n    width: 100%; }\n    button[block]:after,\n    [button][block]:after {\n      clear: both; }\n  button[full],\n  [button][full] {\n    width: 100%;\n    margin-right: 0;\n    margin-left: 0;\n    border-radius: 0;\n    border-right-width: 0;\n    border-left-width: 0; }\n    button[full][outline],\n    [button][full][outline] {\n      border-radius: 0;\n      border-right-width: 0;\n      border-left-width: 0; }\n  button[round],\n  [button][round] {\n    border-radius: 64px;\n    padding: 0 2.6rem; }\n  button[disabled],\n  [button][disabled] {\n    opacity: 0.4;\n    cursor: default !important;\n    pointer-events: none; }\n\na[button] {\n  text-decoration: none; }\n\n[padding] > button[block]:first-child,\n[padding] > [button][block]:first-child {\n  margin-top: 0; }\n\nbutton[primary],\n[button][primary] {\n  background-color: #387ef5;\n  color: white; }\n  button[primary].activated,\n  [button][primary].activated {\n    background-color: #3474e1; }\n\nbutton[secondary],\n[button][secondary] {\n  background-color: #32db64;\n  color: white; }\n  button[secondary].activated,\n  [button][secondary].activated {\n    background-color: #2ec95c; }\n\nbutton[danger],\n[button][danger] {\n  background-color: #f53d3d;\n  color: white; }\n  button[danger].activated,\n  [button][danger].activated {\n    background-color: #e13838; }\n\nbutton[light],\n[button][light] {\n  background-color: #f4f4f4;\n  color: black; }\n  button[light].activated,\n  [button][light].activated {\n    background-color: #e0e0e0; }\n\nbutton[dark],\n[button][dark] {\n  background-color: #222;\n  color: white; }\n  button[dark].activated,\n  [button][dark].activated {\n    background-color: #343434; }\n\nbutton[clear], .ios .popup-buttons button, .ios .searchbar-cancel, .md .popup-buttons button,\n[button][clear] {\n  border-color: transparent;\n  background: transparent;\n  color: #3474e1; }\n  button[clear].activated, .ios .popup-buttons button.activated, .ios .activated.searchbar-cancel, .md .popup-buttons button.activated,\n  [button][clear].activated {\n    opacity: 0.4;\n    background: transparent; }\n  button[clear]:hover:not(.disable-hover), .ios .popup-buttons button:hover:not(.disable-hover), .ios .searchbar-cancel:hover:not(.disable-hover), .md .popup-buttons button:hover:not(.disable-hover),\n  [button][clear]:hover:not(.disable-hover) {\n    opacity: 0.6;\n    color: #3474e1; }\n\nbutton[clear][secondary], .ios .popup-buttons button[secondary], .ios [secondary].searchbar-cancel, .md .popup-buttons button[secondary],\n[button][clear][secondary] {\n  border-color: transparent;\n  background: transparent;\n  color: #2ec95c; }\n  button[clear][secondary]:hover:not(.disable-hover), .ios .popup-buttons button[secondary]:hover:not(.disable-hover), .ios [secondary].searchbar-cancel:hover:not(.disable-hover), .md .popup-buttons button[secondary]:hover:not(.disable-hover),\n  [button][clear][secondary]:hover:not(.disable-hover) {\n    color: #3fcd69; }\n\nbutton[clear][danger], .ios .popup-buttons button[danger], .ios [danger].searchbar-cancel, .md .popup-buttons button[danger],\n[button][clear][danger] {\n  border-color: transparent;\n  background: transparent;\n  color: #e13838; }\n  button[clear][danger]:hover:not(.disable-hover), .ios .popup-buttons button[danger]:hover:not(.disable-hover), .ios [danger].searchbar-cancel:hover:not(.disable-hover), .md .popup-buttons button[danger]:hover:not(.disable-hover),\n  [button][clear][danger]:hover:not(.disable-hover) {\n    color: #cf3434; }\n\nbutton[clear][light], .ios .popup-buttons button[light], .ios [light].searchbar-cancel, .md .popup-buttons button[light],\n[button][clear][light] {\n  border-color: transparent;\n  background: transparent;\n  color: #e0e0e0; }\n  button[clear][light]:hover:not(.disable-hover), .ios .popup-buttons button[light]:hover:not(.disable-hover), .ios [light].searchbar-cancel:hover:not(.disable-hover), .md .popup-buttons button[light]:hover:not(.disable-hover),\n  [button][clear][light]:hover:not(.disable-hover) {\n    color: #cecece; }\n\nbutton[clear][dark], .ios .popup-buttons button[dark], .ios [dark].searchbar-cancel, .md .popup-buttons button[dark],\n[button][clear][dark] {\n  border-color: transparent;\n  background: transparent;\n  color: #343434; }\n  button[clear][dark]:hover:not(.disable-hover), .ios .popup-buttons button[dark]:hover:not(.disable-hover), .ios [dark].searchbar-cancel:hover:not(.disable-hover), .md .popup-buttons button[dark]:hover:not(.disable-hover),\n  [button][clear][dark]:hover:not(.disable-hover) {\n    color: #444444; }\n\nbutton[outline],\n[button][outline] {\n  border: 1px solid #387ef5;\n  background: transparent;\n  color: #387ef5; }\n  button[outline].activated,\n  [button][outline].activated {\n    opacity: 1;\n    color: #fff;\n    background-color: #387ef5; }\n\nbutton[secondary][outline],\n[button][secondary][outline] {\n  border-color: #30d05f;\n  background: transparent;\n  color: #30d05f; }\n  button[secondary][outline].activated,\n  [button][secondary][outline].activated {\n    color: #fff;\n    background-color: #30d05f; }\n\nbutton[danger][outline],\n[button][danger][outline] {\n  border-color: #e93a3a;\n  background: transparent;\n  color: #e93a3a; }\n  button[danger][outline].activated,\n  [button][danger][outline].activated {\n    color: #fff;\n    background-color: #e93a3a; }\n\nbutton[light][outline],\n[button][light][outline] {\n  border-color: #e8e8e8;\n  background: transparent;\n  color: #e8e8e8; }\n  button[light][outline].activated,\n  [button][light][outline].activated {\n    color: #fff;\n    background-color: #e8e8e8; }\n\nbutton[dark][outline],\n[button][dark][outline] {\n  border-color: #2d2d2d;\n  background: transparent;\n  color: #2d2d2d; }\n  button[dark][outline].activated,\n  [button][dark][outline].activated {\n    color: #fff;\n    background-color: #2d2d2d; }\n\nbutton[large],\n[button][large] {\n  padding: 0 1em;\n  min-height: 2.8em;\n  font-size: 2rem; }\n\nbutton[small],\n[button][small] {\n  padding: 0 0.9em;\n  min-height: 2.1em;\n  font-size: 1.3rem; }\n\nbutton icon,\n[button] icon {\n  font-size: 1.4em;\n  background: none;\n  border: none;\n  pointer-events: none;\n  line-height: 0.67; }\n\nbutton.icon-left icon,\n[button].icon-left icon {\n  margin-left: -0.3em;\n  padding-right: 0.3em; }\n\nbutton.icon-right icon,\n[button].icon-right icon {\n  margin-right: -0.2em;\n  padding-left: 0.4em; }\n\nbutton.icon-only,\n[button].icon-only {\n  padding: 0;\n  min-width: 0.9em; }\n  button.icon-only icon,\n  [button].icon-only icon {\n    padding: 0 0.5em;\n    font-size: 1.8em; }\n\nbutton[small] icon,\n[button][small] icon {\n  margin-left: 0;\n  margin-right: 0;\n  font-size: 1.4em; }\n\nbutton[fab],\n[button][fab] {\n  position: absolute;\n  width: 56px;\n  height: 56px;\n  line-height: 56px;\n  min-width: 0;\n  vertical-align: middle;\n  border-radius: 50%;\n  background-clip: padding-box;\n  overflow: hidden;\n  -webkit-transition: .2s linear;\n  transition: .2s linear;\n  -webkit-transition-property: background-color;\n  transition-property: background-color;\n  font-size: 14px; }\n  button[fab][fab-center],\n  [button][fab][fab-center] {\n    left: 50%;\n    margin-left: -28px; }\n  button[fab][fab-top],\n  [button][fab][fab-top] {\n    top: 16px; }\n  button[fab][fab-right],\n  [button][fab][fab-right] {\n    right: 16px; }\n  button[fab][fab-bottom],\n  [button][fab][fab-bottom] {\n    bottom: 16px; }\n  button[fab][fab-left],\n  [button][fab][fab-left] {\n    left: 16px; }\n  button[fab] icon,\n  [button][fab] icon {\n    -webkit-box-flex: 1;\n    -webkit-flex: 1;\n    -ms-flex: 1;\n    flex: 1;\n    font-size: 2.8rem; }\n\nion-checkbox {\n  cursor: pointer;\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  -ms-user-select: none;\n  user-select: none; }\n\nion-checkbox[aria-disabled=true] {\n  opacity: 0.5;\n  color: #666;\n  pointer-events: none; }\n\nicon {\n  display: inline-block;\n  font-size: 1.2em; }\n\nicon[small] {\n  font-size: 1.1em; }\n\n.item {\n  display: -webkit-box;\n  display: -webkit-flex;\n  display: -ms-flexbox;\n  display: flex;\n  -webkit-box-pack: justify;\n  -webkit-justify-content: space-between;\n  -ms-flex-pack: justify;\n  justify-content: space-between;\n  -webkit-box-align: center;\n  -webkit-align-items: center;\n  -ms-flex-align: center;\n  align-items: center;\n  margin: 0;\n  padding: 0;\n  border: 0;\n  min-height: 4.4rem;\n  text-align: initial;\n  overflow: hidden;\n  background-color: #fff;\n  color: #000;\n  box-sizing: border-box; }\n  .item[no-lines] {\n    border: none; }\n    .item[no-lines] .item-inner {\n      border: none; }\n\n.item-inner {\n  display: -webkit-box;\n  display: -webkit-flex;\n  display: -ms-flexbox;\n  display: flex;\n  margin: 0;\n  padding: 0;\n  border: 0;\n  overflow: hidden;\n  box-sizing: border-box;\n  -webkit-box-flex: 1;\n  -webkit-flex: 1;\n  -ms-flex: 1;\n  flex: 1;\n  -webkit-box-orient: vertical;\n  -webkit-box-direction: normal;\n  -webkit-flex-direction: inherit;\n  -ms-flex-direction: inherit;\n  flex-direction: inherit;\n  -webkit-box-align: inherit;\n  -webkit-align-items: inherit;\n  -ms-flex-align: inherit;\n  align-items: inherit;\n  -webkit-align-self: stretch;\n  -ms-flex-item-align: stretch;\n  align-self: stretch; }\n\nion-item-group {\n  display: block; }\n\nion-item-divider {\n  display: block;\n  min-height: 30px;\n  font-weight: 500;\n  width: 100%;\n  z-index: 1000; }\n  ion-item-divider[sticky] {\n    position: -webkit-sticky;\n    position: sticky;\n    top: 0px; }\n\na.item,\nbutton.item {\n  margin: 0;\n  padding: 0;\n  width: 100%;\n  -webkit-box-pack: inherit;\n  -webkit-justify-content: inherit;\n  -ms-flex-pack: inherit;\n  justify-content: inherit;\n  min-height: 4.4rem;\n  font-weight: normal;\n  line-height: normal;\n  text-decoration: none;\n  text-transform: none;\n  color: inherit;\n  border-radius: 0;\n  box-shadow: none;\n  will-change: initial; }\n\nion-item-content {\n  margin: 0;\n  -webkit-box-flex: 1;\n  -webkit-flex: 1;\n  -ms-flex: 1;\n  flex: 1;\n  white-space: nowrap;\n  overflow: hidden;\n  text-overflow: ellipsis;\n  pointer-events: none; }\n  ion-item-content a,\n  ion-item-content button {\n    pointer-events: auto; }\n\n[text-wrap] ion-item-content {\n  white-space: normal; }\n\n.item h1 {\n  margin: 0 0 2px;\n  font-size: 2.4rem;\n  font-weight: normal; }\n\n.item h2 {\n  margin: 0 0 2px;\n  font-size: 1.6rem;\n  font-weight: normal; }\n\n.item h3,\n.item h4,\n.item h5,\n.item h6 {\n  line-height: normal;\n  margin: 0 0 3px 0;\n  font-size: 1.4rem;\n  font-weight: normal; }\n\n.item p {\n  line-height: normal;\n  color: #666;\n  font-size: 1.2rem;\n  margin: 0 0 2px; }\n\n.item h2:last-child,\n.item h3:last-child,\n.item h4:last-child,\n.item h5:last-child,\n.item h6:last-child,\n.item p:last-child {\n  margin-bottom: 0; }\n\n.item a {\n  text-decoration: none; }\n\n.vertical-align-top,\nion-input.item {\n  -webkit-box-align: start;\n  -webkit-align-items: flex-start;\n  -ms-flex-align: start;\n  align-items: flex-start; }\n\nion-item-content + ion-item-content[cnt] {\n  display: none; }\n\n.item > icon[small]:first-child,\n.item-inner > icon[small]:first-child {\n  min-width: 18px; }\n\n.item > icon:first-child,\n.item-inner > icon:first-child {\n  min-width: 24px;\n  text-align: center; }\n\n.item > icon,\n.item-inner > icon {\n  line-height: 1;\n  font-size: 2.4rem; }\n  .item > icon[large],\n  .item-inner > icon[large] {\n    font-size: 3.2rem; }\n  .item > icon[small],\n  .item-inner > icon[small] {\n    font-size: 1.8rem; }\n\nion-avatar,\nion-thumbnail {\n  display: block;\n  line-height: 1; }\n  ion-avatar img,\n  ion-thumbnail img {\n    display: block; }\n\nion-item-sliding {\n  display: block;\n  position: relative;\n  overflow: hidden; }\n  ion-item-sliding .item {\n    position: static; }\n\nion-item-options {\n  display: none;\n  position: absolute;\n  top: 0;\n  right: 0;\n  z-index: 1;\n  height: 100%;\n  visibility: hidden; }\n\nion-item-sliding.active-slide .item,\nion-item-sliding.active-slide .item.item.activated {\n  position: relative;\n  z-index: 2;\n  opacity: 1;\n  -webkit-transition: all 300ms cubic-bezier(0.36, 0.66, 0.04, 1);\n  transition: all 300ms cubic-bezier(0.36, 0.66, 0.04, 1);\n  pointer-events: none; }\n\nion-item-sliding.active-slide ion-item-options {\n  display: -webkit-box;\n  display: -webkit-flex;\n  display: -ms-flexbox;\n  display: flex; }\n\nion-item-sliding.active-slide.active-options ion-item-options {\n  visibility: visible; }\n\nion-row {\n  display: -webkit-box;\n  display: -webkit-flex;\n  display: -ms-flexbox;\n  display: flex;\n  padding: 5px;\n  width: 100%; }\n  ion-row[wrap] {\n    -webkit-flex-wrap: wrap;\n    -ms-flex-wrap: wrap;\n    flex-wrap: wrap; }\n  ion-row[flush] {\n    padding: 0; }\n  ion-row[top] {\n    -webkit-box-align: start;\n    -webkit-align-items: flex-start;\n    -ms-flex-align: start;\n    align-items: flex-start; }\n  ion-row[bottom] {\n    -webkit-box-align: end;\n    -webkit-align-items: flex-end;\n    -ms-flex-align: end;\n    align-items: flex-end; }\n  ion-row[center] {\n    -webkit-box-align: center;\n    -webkit-align-items: center;\n    -ms-flex-align: center;\n    align-items: center; }\n  ion-row[stretch] {\n    -webkit-box-align: stretch;\n    -webkit-align-items: stretch;\n    -ms-flex-align: stretch;\n    align-items: stretch; }\n  ion-row[baseline] {\n    -webkit-box-align: baseline;\n    -webkit-align-items: baseline;\n    -ms-flex-align: baseline;\n    align-items: baseline; }\n\nion-row + ion-row {\n  margin-top: -5px;\n  padding-top: 0; }\n\nion-col {\n  -webkit-box-flex: 1;\n  -webkit-flex: 1;\n  -ms-flex: 1;\n  flex: 1;\n  display: block;\n  padding: 5px;\n  width: 100%; }\n  ion-col[top] {\n    -webkit-align-self: flex-start;\n    -ms-flex-item-align: start;\n    align-self: flex-start; }\n  ion-col[bottom] {\n    -webkit-align-self: flex-end;\n    -ms-flex-item-align: end;\n    align-self: flex-end; }\n  ion-col[center] {\n    -webkit-align-self: center;\n    -ms-flex-item-align: center;\n    align-self: center; }\n  ion-col[stretch] {\n    -webkit-align-self: stretch;\n    -ms-flex-item-align: stretch;\n    align-self: stretch; }\n  ion-col[baseline] {\n    -webkit-align-self: baseline;\n    -ms-flex-item-align: baseline;\n    align-self: baseline; }\n\n/* Column Offsets */\nion-col[offset-10] {\n  margin-left: 10%; }\n\nion-col[offset-20] {\n  margin-left: 20%; }\n\nion-col[offset-25] {\n  margin-left: 25%; }\n\nion-col[offset-33], ion-col[offset-34] {\n  margin-left: 33.3333%; }\n\nion-col[offset-50] {\n  margin-left: 50%; }\n\nion-col[offset-66], ion-col[offset-67] {\n  margin-left: 66.6666%; }\n\nion-col[offset-75] {\n  margin-left: 75%; }\n\nion-col[offset-80] {\n  margin-left: 80%; }\n\nion-col[offset-90] {\n  margin-left: 90%; }\n\n/* Explicit Column Percent Sizes */\n/* By default each grid column will evenly distribute */\n/* across the grid. However, you can specify individual */\n/* columns to take up a certain size of the available area */\nion-col[width-10] {\n  -webkit-box-flex: 0;\n  -webkit-flex: 0 0 10%;\n  -ms-flex: 0 0 10%;\n  flex: 0 0 10%;\n  max-width: 10%; }\n\nion-col[width-20] {\n  -webkit-box-flex: 0;\n  -webkit-flex: 0 0 20%;\n  -ms-flex: 0 0 20%;\n  flex: 0 0 20%;\n  max-width: 20%; }\n\nion-col[width-25] {\n  -webkit-box-flex: 0;\n  -webkit-flex: 0 0 25%;\n  -ms-flex: 0 0 25%;\n  flex: 0 0 25%;\n  max-width: 25%; }\n\nion-col[width-33], ion-col[width-34] {\n  -webkit-box-flex: 0;\n  -webkit-flex: 0 0 33.3333%;\n  -ms-flex: 0 0 33.3333%;\n  flex: 0 0 33.3333%;\n  max-width: 33.3333%; }\n\nion-col[width-50] {\n  -webkit-box-flex: 0;\n  -webkit-flex: 0 0 50%;\n  -ms-flex: 0 0 50%;\n  flex: 0 0 50%;\n  max-width: 50%; }\n\nion-col[width-66], ion-col[width-67] {\n  -webkit-box-flex: 0;\n  -webkit-flex: 0 0 66.6666%;\n  -ms-flex: 0 0 66.6666%;\n  flex: 0 0 66.6666%;\n  max-width: 66.6666%; }\n\nion-col[width-75] {\n  -webkit-box-flex: 0;\n  -webkit-flex: 0 0 75%;\n  -ms-flex: 0 0 75%;\n  flex: 0 0 75%;\n  max-width: 75%; }\n\nion-col[width-80] {\n  -webkit-box-flex: 0;\n  -webkit-flex: 0 0 80%;\n  -ms-flex: 0 0 80%;\n  flex: 0 0 80%;\n  max-width: 80%; }\n\nion-col[width-90] {\n  -webkit-box-flex: 0;\n  -webkit-flex: 0 0 90%;\n  -ms-flex: 0 0 90%;\n  flex: 0 0 90%;\n  max-width: 90%; }\n\n/* Responsive Grid Classes */\n/* Adding a class of responsive-X to a row */\n/* will trigger the width-direction to */\n/* change to column and add some margin */\n/* to any columns in the row for clearity */\n@media (max-width: 567px) {\n  [responsive-sm] {\n    -webkit-box-orient: vertical;\n    -webkit-box-direction: normal;\n    -webkit-flex-direction: column;\n    -ms-flex-direction: column;\n    flex-direction: column; }\n    [responsive-sm] ion-col[width-10], [responsive-sm] ion-col[width-20], [responsive-sm] ion-col[width-25], [responsive-sm] ion-col[width-33], [responsive-sm] ion-col[width-34], [responsive-sm] ion-col[width-50], [responsive-sm] ion-col[width-66], [responsive-sm] ion-col[width-67], [responsive-sm] ion-col[width-75], [responsive-sm] ion-col[width-80], [responsive-sm] ion-col[width-90] {\n      -webkit-box-flex: 1;\n      -webkit-flex: 1;\n      -ms-flex: 1;\n      flex: 1;\n      margin-bottom: 15px;\n      margin-left: 0;\n      max-width: 100%;\n      width: 100%; } }\n\n@media (max-width: 767px) {\n  [responsive-md] {\n    -webkit-box-orient: vertical;\n    -webkit-box-direction: normal;\n    -webkit-flex-direction: column;\n    -ms-flex-direction: column;\n    flex-direction: column; }\n    [responsive-md] ion-col[width-10], [responsive-md] ion-col[width-20], [responsive-md] ion-col[width-25], [responsive-md] ion-col[width-33], [responsive-md] ion-col[width-34], [responsive-md] ion-col[width-50], [responsive-md] ion-col[width-66], [responsive-md] ion-col[width-67], [responsive-md] ion-col[width-75], [responsive-md] ion-col[width-80], [responsive-md] ion-col[width-90] {\n      -webkit-box-flex: 1;\n      -webkit-flex: 1;\n      -ms-flex: 1;\n      flex: 1;\n      margin-bottom: 15px;\n      margin-left: 0;\n      max-width: 100%;\n      width: 100%; } }\n\n@media (max-width: 1023px) {\n  [responsive-lg] {\n    -webkit-box-orient: vertical;\n    -webkit-box-direction: normal;\n    -webkit-flex-direction: column;\n    -ms-flex-direction: column;\n    flex-direction: column; }\n    [responsive-lg] ion-col[width-10], [responsive-lg] ion-col[width-20], [responsive-lg] ion-col[width-25], [responsive-lg] ion-col[width-33], [responsive-lg] ion-col[width-34], [responsive-lg] ion-col[width-50], [responsive-lg] ion-col[width-66], [responsive-lg] ion-col[width-67], [responsive-lg] ion-col[width-75], [responsive-lg] ion-col[width-80], [responsive-lg] ion-col[width-90] {\n      -webkit-box-flex: 1;\n      -webkit-flex: 1;\n      -ms-flex: 1;\n      flex: 1;\n      margin-bottom: 15px;\n      margin-left: 0;\n      max-width: 100%;\n      width: 100%; } }\n\nion-input textarea,\nion-input input[type=\"text\"],\nion-input input[type=\"password\"],\nion-input input[type=\"datetime\"],\nion-input input[type=\"datetime-local\"],\nion-input input[type=\"date\"],\nion-input input[type=\"month\"],\nion-input input[type=\"time\"],\nion-input input[type=\"week\"],\nion-input input[type=\"number\"],\nion-input input[type=\"email\"],\nion-input input[type=\"url\"],\nion-input input[type=\"search\"],\nion-input input[type=\"tel\"],\nion-input input[type=\"color\"] {\n  display: block;\n  background: transparent;\n  border: 0;\n  width: 100%; }\n\nion-input [text-input] {\n  -webkit-box-flex: 1;\n  -webkit-flex: 1;\n  -ms-flex: 1;\n  flex: 1;\n  background-color: #fff;\n  pointer-events: none; }\n\nion-input.has-focus [text-input] {\n  pointer-events: auto; }\n\nion-input input[scroll-assist] {\n  display: inline-block;\n  padding: 0;\n  margin: 0;\n  width: 1px;\n  height: 1px;\n  pointer-events: none; }\n\nion-input textarea {\n  padding-top: 9px; }\n\ntextarea {\n  margin: 0;\n  padding: 0;\n  height: auto;\n  overflow: auto;\n  font: inherit;\n  color: inherit; }\n\n.platform-mobile textarea {\n  resize: none; }\n\ninput::-moz-placeholder,\ntextarea::-moz-placeholder {\n  color: #999; }\n\ninput:-ms-input-placeholder,\ntextarea:-ms-input-placeholder {\n  color: #999; }\n\ninput::-webkit-input-placeholder,\ntextarea::-webkit-input-placeholder {\n  color: #999;\n  text-indent: 0; }\n\nion-label[primary] {\n  color: #387ef5 !important; }\n\nion-label[secondary] {\n  color: #32db64 !important; }\n\nion-label[danger] {\n  color: #f53d3d !important; }\n\nion-label[light] {\n  color: #f4f4f4 !important; }\n\nion-label[dark] {\n  color: #222 !important; }\n\nion-label {\n  display: block;\n  max-width: 200px;\n  font-size: inherit;\n  white-space: nowrap;\n  pointer-events: none; }\n\n[fixed-label] ion-label {\n  width: 30%;\n  min-width: 100px;\n  max-width: 200px; }\n\nion-input[stacked-label],\nion-input[floating-label] {\n  -webkit-box-orient: vertical;\n  -webkit-box-direction: normal;\n  -webkit-flex-direction: column;\n  -ms-flex-direction: column;\n  flex-direction: column;\n  -webkit-box-align: start;\n  -webkit-align-items: flex-start;\n  -ms-flex-align: start;\n  align-items: flex-start; }\n\n[stacked-label] ion-label,\n[floating-label] ion-label {\n  -webkit-align-self: stretch;\n  -ms-flex-item-align: stretch;\n  align-self: stretch;\n  margin-bottom: 0;\n  max-width: 100%; }\n\n[stacked-label] [text-input],\n[floating-label] [text-input] {\n  -webkit-align-self: stretch;\n  -ms-flex-item-align: stretch;\n  align-self: stretch;\n  width: auto; }\n\nion-list-header {\n  display: block;\n  overflow: hidden;\n  white-space: nowrap;\n  text-overflow: ellipsis; }\n\nion-list {\n  display: block;\n  margin: 0;\n  padding: 0;\n  list-style-type: none; }\n\nion-list[inset] {\n  overflow: hidden;\n  -webkit-transform: translateZ(0);\n  transform: translateZ(0); }\n  ion-list[inset] ion-list-header {\n    background-color: #fff; }\n\nion-card {\n  display: block;\n  overflow: hidden;\n  -webkit-transform: translateZ(0);\n  transform: translateZ(0); }\n\nion-card img {\n  display: block;\n  width: 100%; }\n\nion-card-header {\n  display: block;\n  overflow: hidden;\n  white-space: nowrap;\n  text-overflow: ellipsis; }\n\nion-card-content {\n  display: block; }\n\nion-menu {\n  position: absolute;\n  top: 0;\n  right: auto;\n  bottom: 0;\n  left: 0;\n  width: 304px;\n  display: -webkit-box;\n  display: -webkit-flex;\n  display: -ms-flexbox;\n  display: flex;\n  -webkit-box-orient: vertical;\n  -webkit-box-direction: normal;\n  -webkit-flex-direction: column;\n  -ms-flex-direction: column;\n  flex-direction: column;\n  background: #fff;\n  -webkit-transform: translate3d(-9999px, 0px, 0px);\n  transform: translate3d(-9999px, 0px, 0px); }\n\nion-menu[side=right] {\n  right: 0;\n  left: auto; }\n\nion-menu backdrop {\n  z-index: -1;\n  display: none; }\n\n.menu-content {\n  -webkit-transform: translate3d(0px, 0px, 0px);\n  transform: translate3d(0px, 0px, 0px); }\n\n.menu-content-open ion-pane,\n.menu-content-open ion-content,\n.menu-content-open .toolbar {\n  pointer-events: none; }\n\n@media (max-width: 340px) {\n  ion-menu {\n    width: 264px; } }\n\nion-menu[type=reveal].show-menu {\n  -webkit-transform: translate3d(0px, 0px, 0px);\n  transform: translate3d(0px, 0px, 0px); }\n\n.menu-content-reveal {\n  box-shadow: 0px 0px 10px rgba(0, 0, 0, 0.25); }\n\n.menu-content-push {\n  box-shadow: 0px 0px 10px rgba(0, 0, 0, 0.25); }\n\nion-menu[type=overlay] {\n  z-index: 80;\n  box-shadow: 0px 0px 10px rgba(0, 0, 0, 0.25);\n  left: -8px; }\n  ion-menu[type=overlay] backdrop {\n    display: block;\n    -webkit-transform: translate3d(-9999px, 0px, 0px);\n    transform: translate3d(-9999px, 0px, 0px);\n    opacity: 0.01;\n    left: -3000px;\n    width: 6000px; }\n    ion-menu[type=overlay] backdrop.show-backdrop {\n      -webkit-transform: translate3d(0px, 0px, 0px);\n      transform: translate3d(0px, 0px, 0px); }\n\nion-menu[type=overlay][side=right] {\n  left: 8px; }\n\nion-menu[type=push][side=right] {\n  left: 0px; }\n\nion-page.modal {\n  background-color: #fff;\n  z-index: 1000;\n  -webkit-transform: translate3d(0px, 100%, 0px);\n  transform: translate3d(0px, 100%, 0px); }\n\nion-navbar.toolbar {\n  display: -webkit-box;\n  display: -webkit-flex;\n  display: -ms-flexbox;\n  display: flex; }\n\n.back-button {\n  -webkit-box-ordinal-group: 11;\n  -webkit-order: 10;\n  -ms-flex-order: 10;\n  order: 10;\n  display: none; }\n  .back-button.show-back-button {\n    display: -webkit-box;\n    display: -webkit-flex;\n    display: -ms-flexbox;\n    display: flex; }\n\n.back-button-text {\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\nion-popup {\n  position: absolute;\n  z-index: 1000;\n  top: 0;\n  left: 0;\n  bottom: 0;\n  right: 0;\n  display: -webkit-box;\n  display: -webkit-flex;\n  display: -ms-flexbox;\n  display: flex;\n  -webkit-box-pack: center;\n  -webkit-justify-content: center;\n  -ms-flex-pack: center;\n  justify-content: center;\n  -webkit-box-align: center;\n  -webkit-align-items: center;\n  -ms-flex-align: center;\n  align-items: center; }\n  ion-popup popup-wrapper {\n    z-index: 10;\n    min-width: 250px;\n    max-width: 100%;\n    max-height: 90%;\n    display: -webkit-box;\n    display: -webkit-flex;\n    display: -ms-flexbox;\n    display: flex;\n    -webkit-box-orient: vertical;\n    -webkit-box-direction: normal;\n    -webkit-flex-direction: column;\n    -ms-flex-direction: column;\n    flex-direction: column;\n    opacity: 0; }\n  ion-popup input,\n  ion-popup textarea {\n    width: 100%; }\n\n.popup-title {\n  margin: 0;\n  padding: 0; }\n\n.popup-sub-title {\n  margin: 5px 0 0 0;\n  padding: 0;\n  font-weight: normal; }\n\n.popup-body {\n  overflow: auto; }\n  .popup-body:empty {\n    padding: 0; }\n\n.prompt-input {\n  border: 0;\n  background: inherit;\n  padding: 10px 0; }\n  .prompt-input::-moz-placeholder {\n    color: #999; }\n  .prompt-input:-ms-input-placeholder {\n    color: #999; }\n  .prompt-input::-webkit-input-placeholder {\n    color: #999;\n    text-indent: 0; }\n\n.popup-buttons {\n  display: -webkit-box;\n  display: -webkit-flex;\n  display: -ms-flexbox;\n  display: flex;\n  -webkit-box-orient: horizontal;\n  -webkit-box-direction: normal;\n  -webkit-flex-direction: row;\n  -ms-flex-direction: row;\n  flex-direction: row; }\n  .popup-buttons button {\n    display: block;\n    margin: 0;\n    line-height: 20px;\n    font-size: 14px;\n    margin-right: 8px; }\n\nion-swipe-slides {\n  display: block;\n  width: 100%;\n  height: 100%; }\n\n/**\n * Swiper 3.1.2\n * Most modern mobile touch slider and framework with hardware accelerated transitions\n *\n * http://www.idangero.us/swiper/\n *\n * Copyright 2015, Vladimir Kharlampidi\n * The iDangero.us\n * http://www.idangero.us/\n *\n * Licensed under MIT\n *\n * Released on: August 22, 2015\n */\n.swiper-container {\n  margin: 0 auto;\n  position: relative;\n  overflow: hidden;\n  /* Fix of Webkit flickering */\n  z-index: 1; }\n\n.swiper-container-no-flexbox .swiper-slide {\n  float: left; }\n\n.swiper-container-vertical > .swiper-wrapper {\n  -webkit-box-orient: vertical;\n  -ms-flex-direction: column;\n  -webkit-flex-direction: column;\n  flex-direction: column; }\n\n.swiper-wrapper {\n  position: relative;\n  width: 100%;\n  height: 100%;\n  z-index: 1;\n  display: -webkit-box;\n  display: -ms-flexbox;\n  display: -webkit-flex;\n  display: flex;\n  -webkit-transition-property: -webkit-transform;\n  transition-property: transform;\n  box-sizing: content-box; }\n\n.swiper-container-android .swiper-slide,\n.swiper-wrapper {\n  -webkit-transform: translate3d(0px, 0, 0);\n  transform: translate3d(0px, 0, 0); }\n\n.swiper-container-multirow > .swiper-wrapper {\n  -webkit-box-lines: multiple;\n  -moz-box-lines: multiple;\n  -ms-flex-wrap: wrap;\n  -webkit-flex-wrap: wrap;\n  flex-wrap: wrap; }\n\n.swiper-container-free-mode > .swiper-wrapper {\n  -webkit-transition-timing-function: ease-out;\n  transition-timing-function: ease-out;\n  margin: 0 auto; }\n\n.swiper-slide {\n  -webkit-flex-shrink: 0;\n  -ms-flex: 0 0 auto;\n  -webkit-flex-shrink: 0;\n  -ms-flex-negative: 0;\n  flex-shrink: 0;\n  width: 100%;\n  height: 100%;\n  position: relative; }\n\n/* a11y */\n.swiper-container .swiper-notification {\n  position: absolute;\n  left: 0;\n  top: 0;\n  pointer-events: none;\n  opacity: 0;\n  z-index: -1000; }\n\n/* IE10 Windows Phone 8 Fixes */\n.swiper-wp8-horizontal {\n  -ms-touch-action: pan-y;\n  touch-action: pan-y; }\n\n.swiper-wp8-vertical {\n  -ms-touch-action: pan-x;\n  touch-action: pan-x; }\n\n/* Arrows */\n.swiper-button-prev,\n.swiper-button-next {\n  position: absolute;\n  top: 50%;\n  width: 27px;\n  height: 44px;\n  margin-top: -22px;\n  z-index: 10;\n  cursor: pointer;\n  background-size: 27px 44px;\n  background-position: center;\n  background-repeat: no-repeat; }\n\n.swiper-button-prev.swiper-button-disabled,\n.swiper-button-next.swiper-button-disabled {\n  opacity: 0.35;\n  cursor: auto;\n  pointer-events: none; }\n\n.swiper-button-prev,\n.swiper-container-rtl .swiper-button-next {\n  background-image: url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%2027%2044'%3E%3Cpath%20d%3D'M0%2C22L22%2C0l2.1%2C2.1L4.2%2C22l19.9%2C19.9L22%2C44L0%2C22L0%2C22L0%2C22z'%20fill%3D'%23007aff'%2F%3E%3C%2Fsvg%3E\");\n  left: 10px;\n  right: auto; }\n\n.swiper-button-prev.swiper-button-black,\n.swiper-container-rtl .swiper-button-next.swiper-button-black {\n  background-image: url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%2027%2044'%3E%3Cpath%20d%3D'M0%2C22L22%2C0l2.1%2C2.1L4.2%2C22l19.9%2C19.9L22%2C44L0%2C22L0%2C22L0%2C22z'%20fill%3D'%23000000'%2F%3E%3C%2Fsvg%3E\"); }\n\n.swiper-button-prev.swiper-button-white,\n.swiper-container-rtl .swiper-button-next.swiper-button-white {\n  background-image: url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%2027%2044'%3E%3Cpath%20d%3D'M0%2C22L22%2C0l2.1%2C2.1L4.2%2C22l19.9%2C19.9L22%2C44L0%2C22L0%2C22L0%2C22z'%20fill%3D'%23ffffff'%2F%3E%3C%2Fsvg%3E\"); }\n\n.swiper-button-next,\n.swiper-container-rtl .swiper-button-prev {\n  background-image: url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%2027%2044'%3E%3Cpath%20d%3D'M27%2C22L27%2C22L5%2C44l-2.1-2.1L22.8%2C22L2.9%2C2.1L5%2C0L27%2C22L27%2C22z'%20fill%3D'%23007aff'%2F%3E%3C%2Fsvg%3E\");\n  right: 10px;\n  left: auto; }\n\n.swiper-button-next.swiper-button-black,\n.swiper-container-rtl .swiper-button-prev.swiper-button-black {\n  background-image: url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%2027%2044'%3E%3Cpath%20d%3D'M27%2C22L27%2C22L5%2C44l-2.1-2.1L22.8%2C22L2.9%2C2.1L5%2C0L27%2C22L27%2C22z'%20fill%3D'%23000000'%2F%3E%3C%2Fsvg%3E\"); }\n\n.swiper-button-next.swiper-button-white,\n.swiper-container-rtl .swiper-button-prev.swiper-button-white {\n  background-image: url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%2027%2044'%3E%3Cpath%20d%3D'M27%2C22L27%2C22L5%2C44l-2.1-2.1L22.8%2C22L2.9%2C2.1L5%2C0L27%2C22L27%2C22z'%20fill%3D'%23ffffff'%2F%3E%3C%2Fsvg%3E\"); }\n\n/* Pagination Styles */\n.swiper-pagination {\n  position: absolute;\n  text-align: center;\n  -webkit-transition: 300ms;\n  transition: 300ms;\n  -webkit-transform: translate3d(0, 0, 0);\n  transform: translate3d(0, 0, 0);\n  z-index: 10; }\n\n.swiper-pagination.swiper-pagination-hidden {\n  opacity: 0; }\n\n.swiper-pagination-bullet {\n  width: 8px;\n  height: 8px;\n  display: inline-block;\n  border-radius: 100%;\n  background: #000;\n  opacity: 0.2; }\n\nbutton.swiper-pagination-bullet {\n  border: none;\n  margin: 0;\n  padding: 0;\n  box-shadow: none;\n  -moz-appearance: none;\n  -ms-appearance: none;\n  -webkit-appearance: none;\n  appearance: none; }\n\n.swiper-pagination-clickable .swiper-pagination-bullet {\n  cursor: pointer; }\n\n.swiper-pagination-white .swiper-pagination-bullet {\n  background: #fff; }\n\n.swiper-pagination-bullet-active {\n  opacity: 1; }\n\n.swiper-pagination-white .swiper-pagination-bullet-active {\n  background: #fff; }\n\n.swiper-pagination-black .swiper-pagination-bullet-active {\n  background: #000; }\n\n.swiper-container-vertical > .swiper-pagination {\n  right: 10px;\n  top: 50%;\n  -webkit-transform: translate3d(0px, -50%, 0);\n  transform: translate3d(0px, -50%, 0); }\n\n.swiper-container-vertical > .swiper-pagination .swiper-pagination-bullet {\n  margin: 5px 0;\n  display: block; }\n\n.swiper-container-horizontal > .swiper-pagination {\n  bottom: 20px;\n  left: 0;\n  width: 100%; }\n\n.swiper-container-horizontal > .swiper-pagination .swiper-pagination-bullet {\n  margin: 0 5px; }\n\n/* 3D Container */\n.swiper-container-3d {\n  -webkit-perspective: 1200px;\n  -o-perspective: 1200px;\n  perspective: 1200px; }\n\n.swiper-container-3d .swiper-wrapper,\n.swiper-container-3d .swiper-slide,\n.swiper-container-3d .swiper-slide-shadow-left,\n.swiper-container-3d .swiper-slide-shadow-right,\n.swiper-container-3d .swiper-slide-shadow-top,\n.swiper-container-3d .swiper-slide-shadow-bottom,\n.swiper-container-3d .swiper-cube-shadow {\n  -webkit-transform-style: preserve-3d;\n  -ms-transform-style: preserve-3d;\n  transform-style: preserve-3d; }\n\n.swiper-container-3d .swiper-slide-shadow-left,\n.swiper-container-3d .swiper-slide-shadow-right,\n.swiper-container-3d .swiper-slide-shadow-top,\n.swiper-container-3d .swiper-slide-shadow-bottom {\n  position: absolute;\n  left: 0;\n  bottom: 0;\n  width: 100%;\n  height: 100%;\n  pointer-events: none;\n  z-index: 10; }\n\n.swiper-container-3d .swiper-slide-shadow-left {\n  background-image: -webkit-gradient(linear, left top, right top, from(rgba(0, 0, 0, 0.5)), to(transparent));\n  /* Safari 4+, Chrome */\n  background-image: -webkit-linear-gradient(right, rgba(0, 0, 0, 0.5), transparent);\n  /* Chrome 10+, Safari 5.1+, iOS 5+ */\n  /* Firefox 3.6-15 */\n  /* Opera 11.10-12.00 */\n  background-image: linear-gradient(to left, rgba(0, 0, 0, 0.5), transparent);\n  /* Firefox 16+, IE10, Opera 12.50+ */ }\n\n.swiper-container-3d .swiper-slide-shadow-right {\n  background-image: -webkit-gradient(linear, right top, left top, from(rgba(0, 0, 0, 0.5)), to(transparent));\n  /* Safari 4+, Chrome */\n  background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, 0.5), transparent);\n  /* Chrome 10+, Safari 5.1+, iOS 5+ */\n  /* Firefox 3.6-15 */\n  /* Opera 11.10-12.00 */\n  background-image: linear-gradient(to right, rgba(0, 0, 0, 0.5), transparent);\n  /* Firefox 16+, IE10, Opera 12.50+ */ }\n\n.swiper-container-3d .swiper-slide-shadow-top {\n  background-image: -webkit-gradient(linear, left top, left bottom, from(rgba(0, 0, 0, 0.5)), to(transparent));\n  /* Safari 4+, Chrome */\n  background-image: -webkit-linear-gradient(bottom, rgba(0, 0, 0, 0.5), transparent);\n  /* Chrome 10+, Safari 5.1+, iOS 5+ */\n  /* Firefox 3.6-15 */\n  /* Opera 11.10-12.00 */\n  background-image: linear-gradient(to top, rgba(0, 0, 0, 0.5), transparent);\n  /* Firefox 16+, IE10, Opera 12.50+ */ }\n\n.swiper-container-3d .swiper-slide-shadow-bottom {\n  background-image: -webkit-gradient(linear, left bottom, left top, from(rgba(0, 0, 0, 0.5)), to(transparent));\n  /* Safari 4+, Chrome */\n  background-image: -webkit-linear-gradient(top, rgba(0, 0, 0, 0.5), transparent);\n  /* Chrome 10+, Safari 5.1+, iOS 5+ */\n  /* Firefox 3.6-15 */\n  /* Opera 11.10-12.00 */\n  background-image: linear-gradient(to bottom, rgba(0, 0, 0, 0.5), transparent);\n  /* Firefox 16+, IE10, Opera 12.50+ */ }\n\n/* Coverflow */\n.swiper-container-coverflow .swiper-wrapper {\n  /* Windows 8 IE 10 fix */\n  -ms-perspective: 1200px; }\n\n/* Fade */\n.swiper-container-fade.swiper-container-free-mode .swiper-slide {\n  -webkit-transition-timing-function: ease-out;\n  transition-timing-function: ease-out; }\n\n.swiper-container-fade .swiper-slide {\n  pointer-events: none; }\n\n.swiper-container-fade .swiper-slide .swiper-slide {\n  pointer-events: none; }\n\n.swiper-container-fade .swiper-slide-active,\n.swiper-container-fade .swiper-slide-active .swiper-slide-active {\n  pointer-events: auto; }\n\n/* Cube */\n.swiper-container-cube {\n  overflow: visible; }\n\n.swiper-container-cube .swiper-slide {\n  pointer-events: none;\n  visibility: hidden;\n  -webkit-transform-origin: 0 0;\n  transform-origin: 0 0;\n  -webkit-backface-visibility: hidden;\n  -ms-backface-visibility: hidden;\n  backface-visibility: hidden;\n  width: 100%;\n  height: 100%;\n  z-index: 1; }\n\n.swiper-container-cube.swiper-container-rtl .swiper-slide {\n  -webkit-transform-origin: 100% 0;\n  transform-origin: 100% 0; }\n\n.swiper-container-cube .swiper-slide-active,\n.swiper-container-cube .swiper-slide-next,\n.swiper-container-cube .swiper-slide-prev,\n.swiper-container-cube .swiper-slide-next + .swiper-slide {\n  pointer-events: auto;\n  visibility: visible; }\n\n.swiper-container-cube .swiper-slide-shadow-top,\n.swiper-container-cube .swiper-slide-shadow-bottom,\n.swiper-container-cube .swiper-slide-shadow-left,\n.swiper-container-cube .swiper-slide-shadow-right {\n  z-index: 0;\n  -webkit-backface-visibility: hidden;\n  -ms-backface-visibility: hidden;\n  backface-visibility: hidden; }\n\n.swiper-container-cube .swiper-cube-shadow {\n  position: absolute;\n  left: 0;\n  bottom: 0;\n  width: 100%;\n  height: 100%;\n  background: #000;\n  opacity: 0.6;\n  -webkit-filter: blur(50px);\n  filter: blur(50px);\n  z-index: 0; }\n\n/* Scrollbar */\n.swiper-scrollbar {\n  border-radius: 10px;\n  position: relative;\n  -ms-touch-action: none;\n  background: rgba(0, 0, 0, 0.1); }\n\n.swiper-container-horizontal > .swiper-scrollbar {\n  position: absolute;\n  left: 1%;\n  bottom: 3px;\n  z-index: 50;\n  height: 5px;\n  width: 98%; }\n\n.swiper-container-vertical > .swiper-scrollbar {\n  position: absolute;\n  right: 3px;\n  top: 1%;\n  z-index: 50;\n  width: 5px;\n  height: 98%; }\n\n.swiper-scrollbar-drag {\n  height: 100%;\n  width: 100%;\n  position: relative;\n  background: rgba(0, 0, 0, 0.5);\n  border-radius: 10px;\n  left: 0;\n  top: 0; }\n\n.swiper-scrollbar-cursor-drag {\n  cursor: move; }\n\n/* Preloader */\n.swiper-lazy-preloader {\n  width: 42px;\n  height: 42px;\n  position: absolute;\n  left: 50%;\n  top: 50%;\n  margin-left: -21px;\n  margin-top: -21px;\n  z-index: 10;\n  -webkit-transform-origin: 50%;\n  transform-origin: 50%;\n  -webkit-animation: swiper-preloader-spin 1s steps(12, end) infinite;\n  animation: swiper-preloader-spin 1s steps(12, end) infinite; }\n\n.swiper-lazy-preloader:after {\n  display: block;\n  content: \"\";\n  width: 100%;\n  height: 100%;\n  background-image: url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20viewBox%3D'0%200%20120%20120'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20xmlns%3Axlink%3D'http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink'%3E%3Cdefs%3E%3Cline%20id%3D'l'%20x1%3D'60'%20x2%3D'60'%20y1%3D'7'%20y2%3D'27'%20stroke%3D'%236c6c6c'%20stroke-width%3D'11'%20stroke-linecap%3D'round'%2F%3E%3C%2Fdefs%3E%3Cg%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(30%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(60%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(90%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(120%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(150%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.37'%20transform%3D'rotate(180%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.46'%20transform%3D'rotate(210%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.56'%20transform%3D'rotate(240%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.66'%20transform%3D'rotate(270%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.75'%20transform%3D'rotate(300%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.85'%20transform%3D'rotate(330%2060%2C60)'%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E\");\n  background-position: 50%;\n  background-size: 100%;\n  background-repeat: no-repeat; }\n\n.swiper-lazy-preloader-white:after {\n  background-image: url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20viewBox%3D'0%200%20120%20120'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20xmlns%3Axlink%3D'http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink'%3E%3Cdefs%3E%3Cline%20id%3D'l'%20x1%3D'60'%20x2%3D'60'%20y1%3D'7'%20y2%3D'27'%20stroke%3D'%23fff'%20stroke-width%3D'11'%20stroke-linecap%3D'round'%2F%3E%3C%2Fdefs%3E%3Cg%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(30%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(60%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(90%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(120%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(150%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.37'%20transform%3D'rotate(180%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.46'%20transform%3D'rotate(210%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.56'%20transform%3D'rotate(240%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.66'%20transform%3D'rotate(270%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.75'%20transform%3D'rotate(300%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.85'%20transform%3D'rotate(330%2060%2C60)'%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E\"); }\n\n@-webkit-keyframes swiper-preloader-spin {\n  100% {\n    -webkit-transform: rotate(360deg); } }\n\n@keyframes swiper-preloader-spin {\n  100% {\n    -webkit-transform: rotate(360deg);\n    transform: rotate(360deg); } }\n\nion-slides {\n  width: 100%;\n  height: 100%;\n  display: block; }\n\n.slide-zoom {\n  display: block;\n  width: 100%;\n  text-align: center; }\n\n.swiper-container {\n  width: 100%;\n  height: 100%;\n  padding: 0;\n  display: -webkit-box;\n  display: -webkit-flex;\n  display: -ms-flexbox;\n  display: flex;\n  overflow: hidden; }\n\n.swiper-wrapper {\n  width: 100%;\n  height: 100%;\n  padding: 0;\n  display: -webkit-box;\n  display: -webkit-flex;\n  display: -ms-flexbox;\n  display: flex; }\n\n.swiper-container {\n  width: 100%;\n  height: 100%; }\n\n.swiper-slide {\n  width: 100%;\n  height: 100%;\n  box-sizing: border-box;\n  text-align: center;\n  font-size: 18px;\n  /* Center slide text vertically */\n  display: -webkit-box;\n  display: -webkit-flex;\n  display: -ms-flexbox;\n  display: flex;\n  -webkit-box-pack: center;\n  -webkit-justify-content: center;\n  -ms-flex-pack: center;\n  justify-content: center;\n  -webkit-box-align: center;\n  -webkit-align-items: center;\n  -ms-flex-align: center;\n  align-items: center; }\n  .swiper-slide img {\n    width: auto;\n    height: auto;\n    max-width: 100%;\n    max-height: 100%; }\n\nion-radio {\n  display: block;\n  cursor: pointer;\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  -ms-user-select: none;\n  user-select: none; }\n\nion-radio[aria-disabled=true] {\n  opacity: 0.5;\n  color: #666;\n  pointer-events: none; }\n\nion-scroll {\n  position: relative;\n  display: block; }\n  ion-scroll.scroll-x scroll-content {\n    overflow-x: auto; }\n  ion-scroll.scroll-y scroll-content {\n    overflow-y: auto; }\n  ion-scroll[center] scroll-content {\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    -webkit-box-pack: center;\n    -webkit-justify-content: center;\n    -ms-flex-pack: center;\n    justify-content: center; }\n  ion-scroll scroll-content {\n    position: absolute;\n    top: 0;\n    right: 0;\n    bottom: 0;\n    left: 0;\n    overflow-y: hidden;\n    overflow-x: hidden;\n    -webkit-overflow-scrolling: touch;\n    will-change: scroll-position; }\n\nion-refresher {\n  position: absolute;\n  top: -60px;\n  right: 0;\n  left: 0;\n  overflow: hidden;\n  margin: auto;\n  height: 60px; }\n  ion-refresher .refresher-content {\n    position: absolute;\n    bottom: 15px;\n    left: 0;\n    width: 100%;\n    color: #000;\n    text-align: center;\n    font-size: 30px; }\n    ion-refresher .refresher-content .text-refreshing,\n    ion-refresher .refresher-content .text-pulling {\n      font-size: 16px;\n      line-height: 16px; }\n    ion-refresher .refresher-content.refresher-with-text {\n      bottom: 10px; }\n  ion-refresher .icon-refreshing,\n  ion-refresher .icon-pulling {\n    width: 100%;\n    -webkit-backface-visibility: hidden;\n    backface-visibility: hidden;\n    -webkit-transform-style: preserve-3d;\n    transform-style: preserve-3d; }\n  ion-refresher .icon-pulling {\n    -webkit-animation-name: refresh-spin-back;\n    animation-name: refresh-spin-back;\n    -webkit-animation-duration: 200ms;\n    animation-duration: 200ms;\n    -webkit-animation-timing-function: linear;\n    animation-timing-function: linear;\n    -webkit-animation-fill-mode: none;\n    animation-fill-mode: none;\n    -webkit-transform: translate3d(0, 0, 0) rotate(0deg);\n    transform: translate3d(0, 0, 0) rotate(0deg); }\n  ion-refresher .icon-refreshing,\n  ion-refresher .text-refreshing {\n    display: none; }\n  ion-refresher .icon-refreshing {\n    -webkit-animation-duration: 1.5s;\n    animation-duration: 1.5s; }\n  ion-refresher.active .icon-pulling:not(.pulling-rotation-disabled) {\n    -webkit-animation-name: refresh-spin;\n    animation-name: refresh-spin;\n    -webkit-transform: translate3d(0, 0, 0) rotate(-180deg);\n    transform: translate3d(0, 0, 0) rotate(-180deg); }\n  ion-refresher.active.refreshing {\n    -webkit-transition: -webkit-transform .2s;\n    transition: -webkit-transform .2s;\n    transition: transform .2s;\n    -webkit-transform: scale(1, 1);\n    transform: scale(1, 1); }\n    ion-refresher.active.refreshing .icon-pulling,\n    ion-refresher.active.refreshing .text-pulling {\n      display: none; }\n    ion-refresher.active.refreshing .icon-refreshing,\n    ion-refresher.active.refreshing .text-refreshing {\n      display: block; }\n    ion-refresher.active.refreshing.refreshing-tail {\n      -webkit-transform: scale(0, 0);\n      transform: scale(0, 0); }\n\nscroll-content.overscroll {\n  overflow: visible; }\n\n/*\n  -webkit-overflow-scrolling:touch;\n  width:100%;\n}\n*/\n@-webkit-keyframes refresh-spin {\n  0% {\n    -webkit-transform: translate3d(0, 0, 0) rotate(0); }\n  100% {\n    -webkit-transform: translate3d(0, 0, 0) rotate(180deg); } }\n\n@keyframes refresh-spin {\n  0% {\n    -webkit-transform: translate3d(0, 0, 0) rotate(0);\n    transform: translate3d(0, 0, 0) rotate(0); }\n  100% {\n    -webkit-transform: translate3d(0, 0, 0) rotate(180deg);\n    transform: translate3d(0, 0, 0) rotate(180deg); } }\n\n@-webkit-keyframes refresh-spin-back {\n  0% {\n    -webkit-transform: translate3d(0, 0, 0) rotate(180deg); }\n  100% {\n    -webkit-transform: translate3d(0, 0, 0) rotate(0); } }\n\n@keyframes refresh-spin-back {\n  0% {\n    -webkit-transform: translate3d(0, 0, 0) rotate(180deg);\n    transform: translate3d(0, 0, 0) rotate(180deg); }\n  100% {\n    -webkit-transform: translate3d(0, 0, 0) rotate(0);\n    transform: translate3d(0, 0, 0) rotate(0); } }\n\nion-scroll {\n  position: relative;\n  display: block; }\n  ion-scroll.scroll-x scroll-content {\n    overflow-x: auto; }\n  ion-scroll.scroll-y scroll-content {\n    overflow-y: auto; }\n  ion-scroll[center] scroll-content {\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    -webkit-box-pack: center;\n    -webkit-justify-content: center;\n    -ms-flex-pack: center;\n    justify-content: center; }\n  ion-scroll scroll-content {\n    position: absolute;\n    top: 0;\n    right: 0;\n    bottom: 0;\n    left: 0;\n    overflow-y: hidden;\n    overflow-x: hidden;\n    -webkit-overflow-scrolling: touch;\n    will-change: scroll-position; }\n\nion-searchbar {\n  position: relative;\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  width: 100%; }\n\n.searchbar-icon {\n  pointer-events: none; }\n\n.searchbar-input-container {\n  position: relative;\n  display: block;\n  -webkit-flex-shrink: 1;\n  -ms-flex-negative: 1;\n  flex-shrink: 1;\n  width: 100%; }\n\ninput[type=\"search\"].searchbar-input {\n  display: block;\n  width: 100%;\n  height: 100%;\n  border: none;\n  font-family: inherit;\n  line-height: 3rem;\n  -webkit-appearance: none;\n  -moz-appearance: none; }\n\n.searchbar-close-icon {\n  min-height: 0;\n  padding: 0;\n  margin: 0; }\n\nion-segment {\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  -webkit-box-pack: center;\n  -webkit-justify-content: center;\n  -ms-flex-pack: center;\n  justify-content: center;\n  -webkit-box-flex: 1;\n  -webkit-flex: 1;\n  -ms-flex: 1;\n  flex: 1;\n  width: 100%; }\n  ion-segment button,\n  ion-segment [button] {\n    margin-left: 0;\n    margin-right: 0;\n    -webkit-box-flex: 1;\n    -webkit-flex: 1;\n    -ms-flex: 1;\n    flex: 1;\n    display: block;\n    overflow: hidden;\n    padding: 0 16px;\n    width: 0;\n    border-width: 1px 0px 1px 1px;\n    border-radius: 0;\n    text-align: center;\n    text-overflow: ellipsis;\n    white-space: nowrap;\n    background: none; }\n\nion-switch {\n  display: block;\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  -ms-user-select: none;\n  user-select: none; }\n\nion-switch media-switch {\n  margin: 0;\n  cursor: pointer; }\n\nion-switch[aria-disabled=true] {\n  opacity: 0.5;\n  color: #666;\n  pointer-events: none; }\n\nion-tabs {\n  display: -webkit-box;\n  display: -webkit-flex;\n  display: -ms-flexbox;\n  display: flex;\n  -webkit-box-orient: vertical;\n  -webkit-box-direction: normal;\n  -webkit-flex-direction: column;\n  -ms-flex-direction: column;\n  flex-direction: column;\n  overflow: hidden;\n  width: 100%;\n  height: 100%;\n  max-width: 100%;\n  max-height: 100%;\n  margin: 0;\n  padding: 0; }\n\nion-tab {\n  position: absolute;\n  top: 0;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  width: 100%;\n  height: 100%;\n  overflow: hidden;\n  -webkit-box-orient: vertical;\n  -webkit-box-direction: normal;\n  -webkit-flex-direction: column;\n  -ms-flex-direction: column;\n  flex-direction: column;\n  display: none; }\n  ion-tab.show-tab {\n    display: -webkit-box;\n    display: -webkit-flex;\n    display: -ms-flexbox;\n    display: flex; }\n\nion-tabs > ion-navbar-section {\n  -webkit-box-ordinal-group: -29;\n  -webkit-order: -30;\n  -ms-flex-order: -30;\n  order: -30; }\n\nion-tabbar-section {\n  position: relative;\n  -webkit-box-ordinal-group: 21;\n  -webkit-order: 20;\n  -ms-flex-order: 20;\n  order: 20; }\n\n[tabbar-placement=top] ion-tabbar-section {\n  -webkit-box-ordinal-group: -19;\n  -webkit-order: -20;\n  -ms-flex-order: -20;\n  order: -20; }\n\ntabbar {\n  position: relative;\n  display: -webkit-box;\n  display: -webkit-flex;\n  display: -ms-flexbox;\n  display: flex;\n  -webkit-box-pack: center;\n  -webkit-justify-content: center;\n  -ms-flex-pack: center;\n  justify-content: center;\n  overflow: hidden;\n  background: #f8f8f8; }\n\n.tab-button {\n  position: relative;\n  z-index: 0;\n  overflow: hidden;\n  display: -webkit-box;\n  display: -webkit-flex;\n  display: -ms-flexbox;\n  display: flex;\n  -webkit-box-orient: vertical;\n  -webkit-box-direction: normal;\n  -webkit-flex-direction: column;\n  -ms-flex-direction: column;\n  flex-direction: column;\n  -webkit-box-pack: center;\n  -webkit-justify-content: center;\n  -ms-flex-pack: center;\n  justify-content: center;\n  -webkit-box-flex: 1;\n  -webkit-flex: 1;\n  -ms-flex: 1;\n  flex: 1;\n  -webkit-align-self: center;\n  -ms-flex-item-align: center;\n  align-self: center;\n  -webkit-box-align: center;\n  -webkit-align-items: center;\n  -ms-flex-align: center;\n  align-items: center;\n  margin: 0;\n  padding: 10px;\n  min-width: 80px;\n  max-width: 240px;\n  text-align: center;\n  cursor: pointer;\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  -ms-user-select: none;\n  user-select: none;\n  color: #8c8c8c;\n  border: 0;\n  border-radius: 0;\n  background: none; }\n\n.tab-button:hover:not(.disable-hover),\n.tab-button[aria-selected=true] {\n  color: #387ef5; }\n\n.tab-button-text {\n  margin-top: 3px;\n  margin-bottom: 2px; }\n\n.tab-button-text,\n.tab-button-icon {\n  -webkit-align-self: center;\n  -ms-flex-item-align: center;\n  align-self: center;\n  min-width: 26px;\n  max-width: 100%;\n  overflow: hidden;\n  white-space: nowrap;\n  text-overflow: ellipsis;\n  display: none; }\n\n.has-icon .tab-button-icon,\n.has-title .tab-button-text {\n  display: block; }\n\n.has-title-only .tab-button-text {\n  white-space: normal; }\n\ntab-highlight {\n  display: none; }\n\n[tabbar-icons=bottom] .tab-button .tab-button-icon {\n  -webkit-box-ordinal-group: 11;\n  -webkit-order: 10;\n  -ms-flex-order: 10;\n  order: 10; }\n\n[tabbar-icons=left] .tab-button {\n  -webkit-box-orient: horizontal;\n  -webkit-box-direction: normal;\n  -webkit-flex-direction: row;\n  -ms-flex-direction: row;\n  flex-direction: row; }\n  [tabbar-icons=left] .tab-button .tab-button-icon {\n    text-align: right;\n    padding-right: 8px; }\n\n[tabbar-icons=right] .tab-button {\n  -webkit-box-orient: horizontal;\n  -webkit-box-direction: normal;\n  -webkit-flex-direction: row;\n  -ms-flex-direction: row;\n  flex-direction: row; }\n  [tabbar-icons=right] .tab-button .tab-button-icon {\n    -webkit-box-ordinal-group: 11;\n    -webkit-order: 10;\n    -ms-flex-order: 10;\n    order: 10;\n    text-align: left;\n    padding-left: 8px; }\n\n[tabbar-icons=hide] .tab-button-icon {\n  display: none; }\n\ntabbar[primary] {\n  background-color: #387ef5; }\n  tabbar[primary] .tab-button {\n    color: white; }\n  tabbar[primary] .tab-button:hover:not(.disable-hover),\n  tabbar[primary] .tab-button[aria-selected=true] {\n    color: white; }\n\ntabbar[secondary] {\n  background-color: #32db64; }\n  tabbar[secondary] .tab-button {\n    color: white; }\n  tabbar[secondary] .tab-button:hover:not(.disable-hover),\n  tabbar[secondary] .tab-button[aria-selected=true] {\n    color: white; }\n\ntabbar[danger] {\n  background-color: #f53d3d; }\n  tabbar[danger] .tab-button {\n    color: white; }\n  tabbar[danger] .tab-button:hover:not(.disable-hover),\n  tabbar[danger] .tab-button[aria-selected=true] {\n    color: white; }\n\ntabbar[light] {\n  background-color: #f4f4f4; }\n  tabbar[light] .tab-button {\n    color: black; }\n  tabbar[light] .tab-button:hover:not(.disable-hover),\n  tabbar[light] .tab-button[aria-selected=true] {\n    color: black; }\n\ntabbar[dark] {\n  background-color: #222; }\n  tabbar[dark] .tab-button {\n    color: white; }\n  tabbar[dark] .tab-button:hover:not(.disable-hover),\n  tabbar[dark] .tab-button[aria-selected=true] {\n    color: white; }\n\n@font-face {\n  font-family: \"Ionicons\";\n  src: url(\"../fonts/ionicons.ttf?v=3.0.0\") format(\"truetype\"), url(\"../fonts/ionicons.woff?v=3.0.0\") format(\"woff\");\n  font-weight: normal;\n  font-style: normal; }\n\nicon,\n[icon],\n.icon {\n  display: inline-block;\n  font-family: \"Ionicons\";\n  font-style: normal;\n  font-weight: normal;\n  font-variant: normal;\n  text-transform: none;\n  text-rendering: auto;\n  line-height: 1;\n  speak: none;\n  -webkit-font-smoothing: antialiased;\n  -moz-osx-font-smoothing: grayscale; }\n\n/*!\n  Ionicons, v3.0.0\n  Created by Ben Sperry for the Ionic Framework, https://ionicons.com/\n  https://twitter.com/benjsperry  https://twitter.com/ionicframework\n  MIT License: https://github.com/ionic-team/ionicons\n\n  Android-style icons originally built by Google’s\n  Material Design Icons: https://github.com/google/material-design-icons\n  used under CC BY http://creativecommons.org/licenses/by/4.0/\n  Modified icons to fit ionicon’s grid from original.\n*/\n.ion-ios-add:before {\n  content: \"\\f102\"; }\n\n.ion-ios-add-circle:before {\n  content: \"\\f101\"; }\n\n.ion-ios-add-circle-outline:before {\n  content: \"\\f100\"; }\n\n.ion-ios-alarm:before {\n  content: \"\\f3c8\"; }\n\n.ion-ios-alarm-outline:before {\n  content: \"\\f3c7\"; }\n\n.ion-ios-albums:before {\n  content: \"\\f3ca\"; }\n\n.ion-ios-albums-outline:before {\n  content: \"\\f3c9\"; }\n\n.ion-ios-alert:before {\n  content: \"\\f104\"; }\n\n.ion-ios-alert-outline:before {\n  content: \"\\f103\"; }\n\n.ion-ios-american-football:before {\n  content: \"\\f106\"; }\n\n.ion-ios-american-football-outline:before {\n  content: \"\\f105\"; }\n\n.ion-ios-analytics:before {\n  content: \"\\f3ce\"; }\n\n.ion-ios-analytics-outline:before {\n  content: \"\\f3cd\"; }\n\n.ion-ios-aperture:before {\n  content: \"\\f108\"; }\n\n.ion-ios-aperture-outline:before {\n  content: \"\\f107\"; }\n\n.ion-ios-apps:before {\n  content: \"\\f10a\"; }\n\n.ion-ios-apps-outline:before {\n  content: \"\\f109\"; }\n\n.ion-ios-appstore:before {\n  content: \"\\f10c\"; }\n\n.ion-ios-appstore-outline:before {\n  content: \"\\f10b\"; }\n\n.ion-ios-archive:before {\n  content: \"\\f10e\"; }\n\n.ion-ios-archive-outline:before {\n  content: \"\\f10d\"; }\n\n.ion-ios-arrow-back:before {\n  content: \"\\f3cf\"; }\n\n.ion-ios-arrow-down:before {\n  content: \"\\f3d0\"; }\n\n.ion-ios-arrow-dropdown:before {\n  content: \"\\f110\"; }\n\n.ion-ios-arrow-dropdown-circle:before {\n  content: \"\\f10f\"; }\n\n.ion-ios-arrow-dropleft:before {\n  content: \"\\f112\"; }\n\n.ion-ios-arrow-dropleft-circle:before {\n  content: \"\\f111\"; }\n\n.ion-ios-arrow-dropright:before {\n  content: \"\\f114\"; }\n\n.ion-ios-arrow-dropright-circle:before {\n  content: \"\\f113\"; }\n\n.ion-ios-arrow-dropup:before {\n  content: \"\\f116\"; }\n\n.ion-ios-arrow-dropup-circle:before {\n  content: \"\\f115\"; }\n\n.ion-ios-arrow-forward:before {\n  content: \"\\f3d1\"; }\n\n.ion-ios-arrow-round-back:before {\n  content: \"\\f117\"; }\n\n.ion-ios-arrow-round-down:before {\n  content: \"\\f118\"; }\n\n.ion-ios-arrow-round-forward:before {\n  content: \"\\f119\"; }\n\n.ion-ios-arrow-round-up:before {\n  content: \"\\f11a\"; }\n\n.ion-ios-arrow-up:before {\n  content: \"\\f3d8\"; }\n\n.ion-ios-at:before {\n  content: \"\\f3da\"; }\n\n.ion-ios-at-outline:before {\n  content: \"\\f3d9\"; }\n\n.ion-ios-attach:before {\n  content: \"\\f11b\"; }\n\n.ion-ios-backspace:before {\n  content: \"\\f11d\"; }\n\n.ion-ios-backspace-outline:before {\n  content: \"\\f11c\"; }\n\n.ion-ios-barcode:before {\n  content: \"\\f3dc\"; }\n\n.ion-ios-barcode-outline:before {\n  content: \"\\f3db\"; }\n\n.ion-ios-baseball:before {\n  content: \"\\f3de\"; }\n\n.ion-ios-baseball-outline:before {\n  content: \"\\f3dd\"; }\n\n.ion-ios-basket:before {\n  content: \"\\f11f\"; }\n\n.ion-ios-basket-outline:before {\n  content: \"\\f11e\"; }\n\n.ion-ios-basketball:before {\n  content: \"\\f3e0\"; }\n\n.ion-ios-basketball-outline:before {\n  content: \"\\f3df\"; }\n\n.ion-ios-battery-charging:before {\n  content: \"\\f120\"; }\n\n.ion-ios-battery-dead:before {\n  content: \"\\f121\"; }\n\n.ion-ios-battery-full:before {\n  content: \"\\f122\"; }\n\n.ion-ios-beaker:before {\n  content: \"\\f124\"; }\n\n.ion-ios-beaker-outline:before {\n  content: \"\\f123\"; }\n\n.ion-ios-beer:before {\n  content: \"\\f126\"; }\n\n.ion-ios-beer-outline:before {\n  content: \"\\f125\"; }\n\n.ion-ios-bicycle:before {\n  content: \"\\f127\"; }\n\n.ion-ios-bluetooth:before {\n  content: \"\\f128\"; }\n\n.ion-ios-boat:before {\n  content: \"\\f12a\"; }\n\n.ion-ios-boat-outline:before {\n  content: \"\\f129\"; }\n\n.ion-ios-body:before {\n  content: \"\\f3e4\"; }\n\n.ion-ios-body-outline:before {\n  content: \"\\f3e3\"; }\n\n.ion-ios-bonfire:before {\n  content: \"\\f12c\"; }\n\n.ion-ios-bonfire-outline:before {\n  content: \"\\f12b\"; }\n\n.ion-ios-book:before {\n  content: \"\\f3e8\"; }\n\n.ion-ios-book-outline:before {\n  content: \"\\f3e7\"; }\n\n.ion-ios-bookmark:before {\n  content: \"\\f12e\"; }\n\n.ion-ios-bookmark-outline:before {\n  content: \"\\f12d\"; }\n\n.ion-ios-bookmarks:before {\n  content: \"\\f3ea\"; }\n\n.ion-ios-bookmarks-outline:before {\n  content: \"\\f3e9\"; }\n\n.ion-ios-bowtie:before {\n  content: \"\\f130\"; }\n\n.ion-ios-bowtie-outline:before {\n  content: \"\\f12f\"; }\n\n.ion-ios-briefcase:before {\n  content: \"\\f3ee\"; }\n\n.ion-ios-briefcase-outline:before {\n  content: \"\\f3ed\"; }\n\n.ion-ios-browsers:before {\n  content: \"\\f3f0\"; }\n\n.ion-ios-browsers-outline:before {\n  content: \"\\f3ef\"; }\n\n.ion-ios-brush:before {\n  content: \"\\f132\"; }\n\n.ion-ios-brush-outline:before {\n  content: \"\\f131\"; }\n\n.ion-ios-bug:before {\n  content: \"\\f134\"; }\n\n.ion-ios-bug-outline:before {\n  content: \"\\f133\"; }\n\n.ion-ios-build:before {\n  content: \"\\f136\"; }\n\n.ion-ios-build-outline:before {\n  content: \"\\f135\"; }\n\n.ion-ios-bulb:before {\n  content: \"\\f138\"; }\n\n.ion-ios-bulb-outline:before {\n  content: \"\\f137\"; }\n\n.ion-ios-bus:before {\n  content: \"\\f13a\"; }\n\n.ion-ios-bus-outline:before {\n  content: \"\\f139\"; }\n\n.ion-ios-cafe:before {\n  content: \"\\f13c\"; }\n\n.ion-ios-cafe-outline:before {\n  content: \"\\f13b\"; }\n\n.ion-ios-calculator:before {\n  content: \"\\f3f2\"; }\n\n.ion-ios-calculator-outline:before {\n  content: \"\\f3f1\"; }\n\n.ion-ios-calendar:before {\n  content: \"\\f3f4\"; }\n\n.ion-ios-calendar-outline:before {\n  content: \"\\f3f3\"; }\n\n.ion-ios-call:before {\n  content: \"\\f13e\"; }\n\n.ion-ios-call-outline:before {\n  content: \"\\f13d\"; }\n\n.ion-ios-camera:before {\n  content: \"\\f3f6\"; }\n\n.ion-ios-camera-outline:before {\n  content: \"\\f3f5\"; }\n\n.ion-ios-car:before {\n  content: \"\\f140\"; }\n\n.ion-ios-car-outline:before {\n  content: \"\\f13f\"; }\n\n.ion-ios-card:before {\n  content: \"\\f142\"; }\n\n.ion-ios-card-outline:before {\n  content: \"\\f141\"; }\n\n.ion-ios-cart:before {\n  content: \"\\f3f8\"; }\n\n.ion-ios-cart-outline:before {\n  content: \"\\f3f7\"; }\n\n.ion-ios-cash:before {\n  content: \"\\f144\"; }\n\n.ion-ios-cash-outline:before {\n  content: \"\\f143\"; }\n\n.ion-ios-chatboxes:before {\n  content: \"\\f3fa\"; }\n\n.ion-ios-chatboxes-outline:before {\n  content: \"\\f3f9\"; }\n\n.ion-ios-chatbubbles:before {\n  content: \"\\f146\"; }\n\n.ion-ios-chatbubbles-outline:before {\n  content: \"\\f145\"; }\n\n.ion-ios-checkbox:before {\n  content: \"\\f148\"; }\n\n.ion-ios-checkbox-outline:before {\n  content: \"\\f147\"; }\n\n.ion-ios-checkmark:before {\n  content: \"\\f3ff\"; }\n\n.ion-ios-checkmark-circle:before {\n  content: \"\\f14a\"; }\n\n.ion-ios-checkmark-circle-outline:before {\n  content: \"\\f149\"; }\n\n.ion-ios-clipboard:before {\n  content: \"\\f14c\"; }\n\n.ion-ios-clipboard-outline:before {\n  content: \"\\f14b\"; }\n\n.ion-ios-clock:before {\n  content: \"\\f403\"; }\n\n.ion-ios-clock-outline:before {\n  content: \"\\f402\"; }\n\n.ion-ios-close:before {\n  content: \"\\f406\"; }\n\n.ion-ios-close-circle:before {\n  content: \"\\f14e\"; }\n\n.ion-ios-close-circle-outline:before {\n  content: \"\\f14d\"; }\n\n.ion-ios-closed-captioning:before {\n  content: \"\\f150\"; }\n\n.ion-ios-closed-captioning-outline:before {\n  content: \"\\f14f\"; }\n\n.ion-ios-cloud:before {\n  content: \"\\f40c\"; }\n\n.ion-ios-cloud-circle:before {\n  content: \"\\f152\"; }\n\n.ion-ios-cloud-circle-outline:before {\n  content: \"\\f151\"; }\n\n.ion-ios-cloud-done:before {\n  content: \"\\f154\"; }\n\n.ion-ios-cloud-done-outline:before {\n  content: \"\\f153\"; }\n\n.ion-ios-cloud-download:before {\n  content: \"\\f408\"; }\n\n.ion-ios-cloud-download-outline:before {\n  content: \"\\f407\"; }\n\n.ion-ios-cloud-outline:before {\n  content: \"\\f409\"; }\n\n.ion-ios-cloud-upload:before {\n  content: \"\\f40b\"; }\n\n.ion-ios-cloud-upload-outline:before {\n  content: \"\\f40a\"; }\n\n.ion-ios-cloudy:before {\n  content: \"\\f410\"; }\n\n.ion-ios-cloudy-night:before {\n  content: \"\\f40e\"; }\n\n.ion-ios-cloudy-night-outline:before {\n  content: \"\\f40d\"; }\n\n.ion-ios-cloudy-outline:before {\n  content: \"\\f40f\"; }\n\n.ion-ios-code:before {\n  content: \"\\f157\"; }\n\n.ion-ios-code-download:before {\n  content: \"\\f155\"; }\n\n.ion-ios-code-working:before {\n  content: \"\\f156\"; }\n\n.ion-ios-cog:before {\n  content: \"\\f412\"; }\n\n.ion-ios-cog-outline:before {\n  content: \"\\f411\"; }\n\n.ion-ios-color-fill:before {\n  content: \"\\f159\"; }\n\n.ion-ios-color-fill-outline:before {\n  content: \"\\f158\"; }\n\n.ion-ios-color-filter:before {\n  content: \"\\f414\"; }\n\n.ion-ios-color-filter-outline:before {\n  content: \"\\f413\"; }\n\n.ion-ios-color-palette:before {\n  content: \"\\f15b\"; }\n\n.ion-ios-color-palette-outline:before {\n  content: \"\\f15a\"; }\n\n.ion-ios-color-wand:before {\n  content: \"\\f416\"; }\n\n.ion-ios-color-wand-outline:before {\n  content: \"\\f415\"; }\n\n.ion-ios-compass:before {\n  content: \"\\f15d\"; }\n\n.ion-ios-compass-outline:before {\n  content: \"\\f15c\"; }\n\n.ion-ios-construct:before {\n  content: \"\\f15f\"; }\n\n.ion-ios-construct-outline:before {\n  content: \"\\f15e\"; }\n\n.ion-ios-contact:before {\n  content: \"\\f41a\"; }\n\n.ion-ios-contact-outline:before {\n  content: \"\\f419\"; }\n\n.ion-ios-contacts:before {\n  content: \"\\f161\"; }\n\n.ion-ios-contacts-outline:before {\n  content: \"\\f160\"; }\n\n.ion-ios-contract:before {\n  content: \"\\f162\"; }\n\n.ion-ios-contrast:before {\n  content: \"\\f163\"; }\n\n.ion-ios-copy:before {\n  content: \"\\f41c\"; }\n\n.ion-ios-copy-outline:before {\n  content: \"\\f41b\"; }\n\n.ion-ios-create:before {\n  content: \"\\f165\"; }\n\n.ion-ios-create-outline:before {\n  content: \"\\f164\"; }\n\n.ion-ios-crop:before {\n  content: \"\\f41e\"; }\n\n.ion-ios-crop-outline:before {\n  content: \"\\f166\"; }\n\n.ion-ios-cube:before {\n  content: \"\\f168\"; }\n\n.ion-ios-cube-outline:before {\n  content: \"\\f167\"; }\n\n.ion-ios-cut:before {\n  content: \"\\f16a\"; }\n\n.ion-ios-cut-outline:before {\n  content: \"\\f169\"; }\n\n.ion-ios-desktop:before {\n  content: \"\\f16c\"; }\n\n.ion-ios-desktop-outline:before {\n  content: \"\\f16b\"; }\n\n.ion-ios-disc:before {\n  content: \"\\f16e\"; }\n\n.ion-ios-disc-outline:before {\n  content: \"\\f16d\"; }\n\n.ion-ios-document:before {\n  content: \"\\f170\"; }\n\n.ion-ios-document-outline:before {\n  content: \"\\f16f\"; }\n\n.ion-ios-done-all:before {\n  content: \"\\f171\"; }\n\n.ion-ios-download:before {\n  content: \"\\f420\"; }\n\n.ion-ios-download-outline:before {\n  content: \"\\f41f\"; }\n\n.ion-ios-easel:before {\n  content: \"\\f173\"; }\n\n.ion-ios-easel-outline:before {\n  content: \"\\f172\"; }\n\n.ion-ios-egg:before {\n  content: \"\\f175\"; }\n\n.ion-ios-egg-outline:before {\n  content: \"\\f174\"; }\n\n.ion-ios-exit:before {\n  content: \"\\f177\"; }\n\n.ion-ios-exit-outline:before {\n  content: \"\\f176\"; }\n\n.ion-ios-expand:before {\n  content: \"\\f178\"; }\n\n.ion-ios-eye:before {\n  content: \"\\f425\"; }\n\n.ion-ios-eye-off:before {\n  content: \"\\f17a\"; }\n\n.ion-ios-eye-off-outline:before {\n  content: \"\\f179\"; }\n\n.ion-ios-eye-outline:before {\n  content: \"\\f424\"; }\n\n.ion-ios-fastforward:before {\n  content: \"\\f427\"; }\n\n.ion-ios-fastforward-outline:before {\n  content: \"\\f426\"; }\n\n.ion-ios-female:before {\n  content: \"\\f17b\"; }\n\n.ion-ios-filing:before {\n  content: \"\\f429\"; }\n\n.ion-ios-filing-outline:before {\n  content: \"\\f428\"; }\n\n.ion-ios-film:before {\n  content: \"\\f42b\"; }\n\n.ion-ios-film-outline:before {\n  content: \"\\f42a\"; }\n\n.ion-ios-finger-print:before {\n  content: \"\\f17c\"; }\n\n.ion-ios-flag:before {\n  content: \"\\f42d\"; }\n\n.ion-ios-flag-outline:before {\n  content: \"\\f42c\"; }\n\n.ion-ios-flame:before {\n  content: \"\\f42f\"; }\n\n.ion-ios-flame-outline:before {\n  content: \"\\f42e\"; }\n\n.ion-ios-flash:before {\n  content: \"\\f17e\"; }\n\n.ion-ios-flash-outline:before {\n  content: \"\\f17d\"; }\n\n.ion-ios-flask:before {\n  content: \"\\f431\"; }\n\n.ion-ios-flask-outline:before {\n  content: \"\\f430\"; }\n\n.ion-ios-flower:before {\n  content: \"\\f433\"; }\n\n.ion-ios-flower-outline:before {\n  content: \"\\f432\"; }\n\n.ion-ios-folder:before {\n  content: \"\\f435\"; }\n\n.ion-ios-folder-open:before {\n  content: \"\\f180\"; }\n\n.ion-ios-folder-open-outline:before {\n  content: \"\\f17f\"; }\n\n.ion-ios-folder-outline:before {\n  content: \"\\f434\"; }\n\n.ion-ios-football:before {\n  content: \"\\f437\"; }\n\n.ion-ios-football-outline:before {\n  content: \"\\f436\"; }\n\n.ion-ios-funnel:before {\n  content: \"\\f182\"; }\n\n.ion-ios-funnel-outline:before {\n  content: \"\\f181\"; }\n\n.ion-ios-game-controller-a:before {\n  content: \"\\f439\"; }\n\n.ion-ios-game-controller-a-outline:before {\n  content: \"\\f438\"; }\n\n.ion-ios-game-controller-b:before {\n  content: \"\\f43b\"; }\n\n.ion-ios-game-controller-b-outline:before {\n  content: \"\\f43a\"; }\n\n.ion-ios-git-branch:before {\n  content: \"\\f183\"; }\n\n.ion-ios-git-commit:before {\n  content: \"\\f184\"; }\n\n.ion-ios-git-compare:before {\n  content: \"\\f185\"; }\n\n.ion-ios-git-merge:before {\n  content: \"\\f186\"; }\n\n.ion-ios-git-network:before {\n  content: \"\\f187\"; }\n\n.ion-ios-git-pull-request:before {\n  content: \"\\f188\"; }\n\n.ion-ios-glasses:before {\n  content: \"\\f43f\"; }\n\n.ion-ios-glasses-outline:before {\n  content: \"\\f43e\"; }\n\n.ion-ios-globe:before {\n  content: \"\\f18a\"; }\n\n.ion-ios-globe-outline:before {\n  content: \"\\f189\"; }\n\n.ion-ios-grid:before {\n  content: \"\\f18c\"; }\n\n.ion-ios-grid-outline:before {\n  content: \"\\f18b\"; }\n\n.ion-ios-hammer:before {\n  content: \"\\f18e\"; }\n\n.ion-ios-hammer-outline:before {\n  content: \"\\f18d\"; }\n\n.ion-ios-hand:before {\n  content: \"\\f190\"; }\n\n.ion-ios-hand-outline:before {\n  content: \"\\f18f\"; }\n\n.ion-ios-happy:before {\n  content: \"\\f192\"; }\n\n.ion-ios-happy-outline:before {\n  content: \"\\f191\"; }\n\n.ion-ios-headset:before {\n  content: \"\\f194\"; }\n\n.ion-ios-headset-outline:before {\n  content: \"\\f193\"; }\n\n.ion-ios-heart:before {\n  content: \"\\f443\"; }\n\n.ion-ios-heart-outline:before {\n  content: \"\\f442\"; }\n\n.ion-ios-help:before {\n  content: \"\\f446\"; }\n\n.ion-ios-help-buoy:before {\n  content: \"\\f196\"; }\n\n.ion-ios-help-buoy-outline:before {\n  content: \"\\f195\"; }\n\n.ion-ios-help-circle:before {\n  content: \"\\f198\"; }\n\n.ion-ios-help-circle-outline:before {\n  content: \"\\f197\"; }\n\n.ion-ios-home:before {\n  content: \"\\f448\"; }\n\n.ion-ios-home-outline:before {\n  content: \"\\f447\"; }\n\n.ion-ios-ice-cream:before {\n  content: \"\\f19a\"; }\n\n.ion-ios-ice-cream-outline:before {\n  content: \"\\f199\"; }\n\n.ion-ios-image:before {\n  content: \"\\f19c\"; }\n\n.ion-ios-image-outline:before {\n  content: \"\\f19b\"; }\n\n.ion-ios-images:before {\n  content: \"\\f19e\"; }\n\n.ion-ios-images-outline:before {\n  content: \"\\f19d\"; }\n\n.ion-ios-infinite:before {\n  content: \"\\f44a\"; }\n\n.ion-ios-infinite-outline:before {\n  content: \"\\f449\"; }\n\n.ion-ios-information:before {\n  content: \"\\f44d\"; }\n\n.ion-ios-information-circle:before {\n  content: \"\\f1a0\"; }\n\n.ion-ios-information-circle-outline:before {\n  content: \"\\f19f\"; }\n\n.ion-ios-ionic:before {\n  content: \"\\f1a1\"; }\n\n.ion-ios-ionic-outline:before {\n  content: \"\\f44e\"; }\n\n.ion-ios-ionitron:before {\n  content: \"\\f1a3\"; }\n\n.ion-ios-ionitron-outline:before {\n  content: \"\\f1a2\"; }\n\n.ion-ios-jet:before {\n  content: \"\\f1a5\"; }\n\n.ion-ios-jet-outline:before {\n  content: \"\\f1a4\"; }\n\n.ion-ios-key:before {\n  content: \"\\f1a7\"; }\n\n.ion-ios-key-outline:before {\n  content: \"\\f1a6\"; }\n\n.ion-ios-keypad:before {\n  content: \"\\f450\"; }\n\n.ion-ios-keypad-outline:before {\n  content: \"\\f44f\"; }\n\n.ion-ios-laptop:before {\n  content: \"\\f1a8\"; }\n\n.ion-ios-leaf:before {\n  content: \"\\f1aa\"; }\n\n.ion-ios-leaf-outline:before {\n  content: \"\\f1a9\"; }\n\n.ion-ios-list:before {\n  content: \"\\f454\"; }\n\n.ion-ios-list-box:before {\n  content: \"\\f1ac\"; }\n\n.ion-ios-list-box-outline:before {\n  content: \"\\f1ab\"; }\n\n.ion-ios-locate:before {\n  content: \"\\f1ae\"; }\n\n.ion-ios-locate-outline:before {\n  content: \"\\f1ad\"; }\n\n.ion-ios-lock:before {\n  content: \"\\f1b0\"; }\n\n.ion-ios-lock-outline:before {\n  content: \"\\f1af\"; }\n\n.ion-ios-log-in:before {\n  content: \"\\f1b1\"; }\n\n.ion-ios-log-out:before {\n  content: \"\\f1b2\"; }\n\n.ion-ios-magnet:before {\n  content: \"\\f1b4\"; }\n\n.ion-ios-magnet-outline:before {\n  content: \"\\f1b3\"; }\n\n.ion-ios-mail:before {\n  content: \"\\f1b8\"; }\n\n.ion-ios-mail-open:before {\n  content: \"\\f1b6\"; }\n\n.ion-ios-mail-open-outline:before {\n  content: \"\\f1b5\"; }\n\n.ion-ios-mail-outline:before {\n  content: \"\\f1b7\"; }\n\n.ion-ios-male:before {\n  content: \"\\f1b9\"; }\n\n.ion-ios-man:before {\n  content: \"\\f1bb\"; }\n\n.ion-ios-man-outline:before {\n  content: \"\\f1ba\"; }\n\n.ion-ios-map:before {\n  content: \"\\f1bd\"; }\n\n.ion-ios-map-outline:before {\n  content: \"\\f1bc\"; }\n\n.ion-ios-medal:before {\n  content: \"\\f1bf\"; }\n\n.ion-ios-medal-outline:before {\n  content: \"\\f1be\"; }\n\n.ion-ios-medical:before {\n  content: \"\\f45c\"; }\n\n.ion-ios-medical-outline:before {\n  content: \"\\f45b\"; }\n\n.ion-ios-medkit:before {\n  content: \"\\f45e\"; }\n\n.ion-ios-medkit-outline:before {\n  content: \"\\f45d\"; }\n\n.ion-ios-megaphone:before {\n  content: \"\\f1c1\"; }\n\n.ion-ios-megaphone-outline:before {\n  content: \"\\f1c0\"; }\n\n.ion-ios-menu:before {\n  content: \"\\f1c3\"; }\n\n.ion-ios-menu-outline:before {\n  content: \"\\f1c2\"; }\n\n.ion-ios-mic:before {\n  content: \"\\f461\"; }\n\n.ion-ios-mic-off:before {\n  content: \"\\f45f\"; }\n\n.ion-ios-mic-off-outline:before {\n  content: \"\\f1c4\"; }\n\n.ion-ios-mic-outline:before {\n  content: \"\\f460\"; }\n\n.ion-ios-microphone:before {\n  content: \"\\f1c6\"; }\n\n.ion-ios-microphone-outline:before {\n  content: \"\\f1c5\"; }\n\n.ion-ios-moon:before {\n  content: \"\\f468\"; }\n\n.ion-ios-moon-outline:before {\n  content: \"\\f467\"; }\n\n.ion-ios-more:before {\n  content: \"\\f1c8\"; }\n\n.ion-ios-more-outline:before {\n  content: \"\\f1c7\"; }\n\n.ion-ios-move:before {\n  content: \"\\f1cb\"; }\n\n.ion-ios-musical-note:before {\n  content: \"\\f46b\"; }\n\n.ion-ios-musical-note-outline:before {\n  content: \"\\f1cc\"; }\n\n.ion-ios-musical-notes:before {\n  content: \"\\f46c\"; }\n\n.ion-ios-musical-notes-outline:before {\n  content: \"\\f1cd\"; }\n\n.ion-ios-navigate:before {\n  content: \"\\f46e\"; }\n\n.ion-ios-navigate-outline:before {\n  content: \"\\f46d\"; }\n\n.ion-ios-no-smoking:before {\n  content: \"\\f1cf\"; }\n\n.ion-ios-no-smoking-outline:before {\n  content: \"\\f1ce\"; }\n\n.ion-ios-notifications:before {\n  content: \"\\f1d3\"; }\n\n.ion-ios-notifications-off:before {\n  content: \"\\f1d1\"; }\n\n.ion-ios-notifications-off-outline:before {\n  content: \"\\f1d0\"; }\n\n.ion-ios-notifications-outline:before {\n  content: \"\\f1d2\"; }\n\n.ion-ios-nuclear:before {\n  content: \"\\f1d5\"; }\n\n.ion-ios-nuclear-outline:before {\n  content: \"\\f1d4\"; }\n\n.ion-ios-nutrition:before {\n  content: \"\\f470\"; }\n\n.ion-ios-nutrition-outline:before {\n  content: \"\\f46f\"; }\n\n.ion-ios-open:before {\n  content: \"\\f1d7\"; }\n\n.ion-ios-open-outline:before {\n  content: \"\\f1d6\"; }\n\n.ion-ios-options:before {\n  content: \"\\f1d9\"; }\n\n.ion-ios-options-outline:before {\n  content: \"\\f1d8\"; }\n\n.ion-ios-outlet:before {\n  content: \"\\f1db\"; }\n\n.ion-ios-outlet-outline:before {\n  content: \"\\f1da\"; }\n\n.ion-ios-paper:before {\n  content: \"\\f472\"; }\n\n.ion-ios-paper-outline:before {\n  content: \"\\f471\"; }\n\n.ion-ios-paper-plane:before {\n  content: \"\\f1dd\"; }\n\n.ion-ios-paper-plane-outline:before {\n  content: \"\\f1dc\"; }\n\n.ion-ios-partly-sunny:before {\n  content: \"\\f1df\"; }\n\n.ion-ios-partly-sunny-outline:before {\n  content: \"\\f1de\"; }\n\n.ion-ios-pause:before {\n  content: \"\\f478\"; }\n\n.ion-ios-pause-outline:before {\n  content: \"\\f477\"; }\n\n.ion-ios-paw:before {\n  content: \"\\f47a\"; }\n\n.ion-ios-paw-outline:before {\n  content: \"\\f479\"; }\n\n.ion-ios-people:before {\n  content: \"\\f47c\"; }\n\n.ion-ios-people-outline:before {\n  content: \"\\f47b\"; }\n\n.ion-ios-person:before {\n  content: \"\\f47e\"; }\n\n.ion-ios-person-add:before {\n  content: \"\\f1e1\"; }\n\n.ion-ios-person-add-outline:before {\n  content: \"\\f1e0\"; }\n\n.ion-ios-person-outline:before {\n  content: \"\\f47d\"; }\n\n.ion-ios-phone-landscape:before {\n  content: \"\\f1e2\"; }\n\n.ion-ios-phone-portrait:before {\n  content: \"\\f1e3\"; }\n\n.ion-ios-photos:before {\n  content: \"\\f482\"; }\n\n.ion-ios-photos-outline:before {\n  content: \"\\f481\"; }\n\n.ion-ios-pie:before {\n  content: \"\\f484\"; }\n\n.ion-ios-pie-outline:before {\n  content: \"\\f483\"; }\n\n.ion-ios-pin:before {\n  content: \"\\f1e5\"; }\n\n.ion-ios-pin-outline:before {\n  content: \"\\f1e4\"; }\n\n.ion-ios-pint:before {\n  content: \"\\f486\"; }\n\n.ion-ios-pint-outline:before {\n  content: \"\\f485\"; }\n\n.ion-ios-pizza:before {\n  content: \"\\f1e7\"; }\n\n.ion-ios-pizza-outline:before {\n  content: \"\\f1e6\"; }\n\n.ion-ios-plane:before {\n  content: \"\\f1e9\"; }\n\n.ion-ios-plane-outline:before {\n  content: \"\\f1e8\"; }\n\n.ion-ios-planet:before {\n  content: \"\\f1eb\"; }\n\n.ion-ios-planet-outline:before {\n  content: \"\\f1ea\"; }\n\n.ion-ios-play:before {\n  content: \"\\f488\"; }\n\n.ion-ios-play-outline:before {\n  content: \"\\f487\"; }\n\n.ion-ios-podium:before {\n  content: \"\\f1ed\"; }\n\n.ion-ios-podium-outline:before {\n  content: \"\\f1ec\"; }\n\n.ion-ios-power:before {\n  content: \"\\f1ef\"; }\n\n.ion-ios-power-outline:before {\n  content: \"\\f1ee\"; }\n\n.ion-ios-pricetag:before {\n  content: \"\\f48d\"; }\n\n.ion-ios-pricetag-outline:before {\n  content: \"\\f48c\"; }\n\n.ion-ios-pricetags:before {\n  content: \"\\f48f\"; }\n\n.ion-ios-pricetags-outline:before {\n  content: \"\\f48e\"; }\n\n.ion-ios-print:before {\n  content: \"\\f1f1\"; }\n\n.ion-ios-print-outline:before {\n  content: \"\\f1f0\"; }\n\n.ion-ios-pulse:before {\n  content: \"\\f493\"; }\n\n.ion-ios-pulse-outline:before {\n  content: \"\\f1f2\"; }\n\n.ion-ios-qr-scanner:before {\n  content: \"\\f1f3\"; }\n\n.ion-ios-quote:before {\n  content: \"\\f1f5\"; }\n\n.ion-ios-quote-outline:before {\n  content: \"\\f1f4\"; }\n\n.ion-ios-radio:before {\n  content: \"\\f1f9\"; }\n\n.ion-ios-radio-button-off:before {\n  content: \"\\f1f6\"; }\n\n.ion-ios-radio-button-on:before {\n  content: \"\\f1f7\"; }\n\n.ion-ios-radio-outline:before {\n  content: \"\\f1f8\"; }\n\n.ion-ios-rainy:before {\n  content: \"\\f495\"; }\n\n.ion-ios-rainy-outline:before {\n  content: \"\\f494\"; }\n\n.ion-ios-recording:before {\n  content: \"\\f497\"; }\n\n.ion-ios-recording-outline:before {\n  content: \"\\f496\"; }\n\n.ion-ios-redo:before {\n  content: \"\\f499\"; }\n\n.ion-ios-redo-outline:before {\n  content: \"\\f498\"; }\n\n.ion-ios-refresh:before {\n  content: \"\\f49c\"; }\n\n.ion-ios-refresh-circle:before {\n  content: \"\\f226\"; }\n\n.ion-ios-refresh-circle-outline:before {\n  content: \"\\f224\"; }\n\n.ion-ios-remove:before {\n  content: \"\\f1fc\"; }\n\n.ion-ios-remove-circle:before {\n  content: \"\\f1fb\"; }\n\n.ion-ios-remove-circle-outline:before {\n  content: \"\\f1fa\"; }\n\n.ion-ios-reorder:before {\n  content: \"\\f1fd\"; }\n\n.ion-ios-repeat:before {\n  content: \"\\f1fe\"; }\n\n.ion-ios-resize:before {\n  content: \"\\f1ff\"; }\n\n.ion-ios-restaurant:before {\n  content: \"\\f201\"; }\n\n.ion-ios-restaurant-outline:before {\n  content: \"\\f200\"; }\n\n.ion-ios-return-left:before {\n  content: \"\\f202\"; }\n\n.ion-ios-return-right:before {\n  content: \"\\f203\"; }\n\n.ion-ios-reverse-camera:before {\n  content: \"\\f49f\"; }\n\n.ion-ios-reverse-camera-outline:before {\n  content: \"\\f49e\"; }\n\n.ion-ios-rewind:before {\n  content: \"\\f4a1\"; }\n\n.ion-ios-rewind-outline:before {\n  content: \"\\f4a0\"; }\n\n.ion-ios-ribbon:before {\n  content: \"\\f205\"; }\n\n.ion-ios-ribbon-outline:before {\n  content: \"\\f204\"; }\n\n.ion-ios-rose:before {\n  content: \"\\f4a3\"; }\n\n.ion-ios-rose-outline:before {\n  content: \"\\f4a2\"; }\n\n.ion-ios-sad:before {\n  content: \"\\f207\"; }\n\n.ion-ios-sad-outline:before {\n  content: \"\\f206\"; }\n\n.ion-ios-school:before {\n  content: \"\\f209\"; }\n\n.ion-ios-school-outline:before {\n  content: \"\\f208\"; }\n\n.ion-ios-search:before {\n  content: \"\\f4a5\"; }\n\n.ion-ios-search-outline:before {\n  content: \"\\f20a\"; }\n\n.ion-ios-send:before {\n  content: \"\\f20c\"; }\n\n.ion-ios-send-outline:before {\n  content: \"\\f20b\"; }\n\n.ion-ios-settings:before {\n  content: \"\\f4a7\"; }\n\n.ion-ios-settings-outline:before {\n  content: \"\\f20d\"; }\n\n.ion-ios-share:before {\n  content: \"\\f211\"; }\n\n.ion-ios-share-alt:before {\n  content: \"\\f20f\"; }\n\n.ion-ios-share-alt-outline:before {\n  content: \"\\f20e\"; }\n\n.ion-ios-share-outline:before {\n  content: \"\\f210\"; }\n\n.ion-ios-shirt:before {\n  content: \"\\f213\"; }\n\n.ion-ios-shirt-outline:before {\n  content: \"\\f212\"; }\n\n.ion-ios-shuffle:before {\n  content: \"\\f4a9\"; }\n\n.ion-ios-skip-backward:before {\n  content: \"\\f215\"; }\n\n.ion-ios-skip-backward-outline:before {\n  content: \"\\f214\"; }\n\n.ion-ios-skip-forward:before {\n  content: \"\\f217\"; }\n\n.ion-ios-skip-forward-outline:before {\n  content: \"\\f216\"; }\n\n.ion-ios-snow:before {\n  content: \"\\f218\"; }\n\n.ion-ios-snow-outline:before {\n  content: \"\\f22c\"; }\n\n.ion-ios-speedometer:before {\n  content: \"\\f4b0\"; }\n\n.ion-ios-speedometer-outline:before {\n  content: \"\\f4af\"; }\n\n.ion-ios-square:before {\n  content: \"\\f21a\"; }\n\n.ion-ios-square-outline:before {\n  content: \"\\f219\"; }\n\n.ion-ios-star:before {\n  content: \"\\f4b3\"; }\n\n.ion-ios-star-half:before {\n  content: \"\\f4b1\"; }\n\n.ion-ios-star-outline:before {\n  content: \"\\f4b2\"; }\n\n.ion-ios-stats:before {\n  content: \"\\f21c\"; }\n\n.ion-ios-stats-outline:before {\n  content: \"\\f21b\"; }\n\n.ion-ios-stopwatch:before {\n  content: \"\\f4b5\"; }\n\n.ion-ios-stopwatch-outline:before {\n  content: \"\\f4b4\"; }\n\n.ion-ios-subway:before {\n  content: \"\\f21e\"; }\n\n.ion-ios-subway-outline:before {\n  content: \"\\f21d\"; }\n\n.ion-ios-sunny:before {\n  content: \"\\f4b7\"; }\n\n.ion-ios-sunny-outline:before {\n  content: \"\\f4b6\"; }\n\n.ion-ios-swap:before {\n  content: \"\\f21f\"; }\n\n.ion-ios-switch:before {\n  content: \"\\f221\"; }\n\n.ion-ios-switch-outline:before {\n  content: \"\\f220\"; }\n\n.ion-ios-sync:before {\n  content: \"\\f222\"; }\n\n.ion-ios-tablet-landscape:before {\n  content: \"\\f223\"; }\n\n.ion-ios-tablet-portrait:before {\n  content: \"\\f24e\"; }\n\n.ion-ios-tennisball:before {\n  content: \"\\f4bb\"; }\n\n.ion-ios-tennisball-outline:before {\n  content: \"\\f4ba\"; }\n\n.ion-ios-text:before {\n  content: \"\\f250\"; }\n\n.ion-ios-text-outline:before {\n  content: \"\\f24f\"; }\n\n.ion-ios-thermometer:before {\n  content: \"\\f252\"; }\n\n.ion-ios-thermometer-outline:before {\n  content: \"\\f251\"; }\n\n.ion-ios-thumbs-down:before {\n  content: \"\\f254\"; }\n\n.ion-ios-thumbs-down-outline:before {\n  content: \"\\f253\"; }\n\n.ion-ios-thumbs-up:before {\n  content: \"\\f256\"; }\n\n.ion-ios-thumbs-up-outline:before {\n  content: \"\\f255\"; }\n\n.ion-ios-thunderstorm:before {\n  content: \"\\f4bd\"; }\n\n.ion-ios-thunderstorm-outline:before {\n  content: \"\\f4bc\"; }\n\n.ion-ios-time:before {\n  content: \"\\f4bf\"; }\n\n.ion-ios-time-outline:before {\n  content: \"\\f4be\"; }\n\n.ion-ios-timer:before {\n  content: \"\\f4c1\"; }\n\n.ion-ios-timer-outline:before {\n  content: \"\\f4c0\"; }\n\n.ion-ios-train:before {\n  content: \"\\f258\"; }\n\n.ion-ios-train-outline:before {\n  content: \"\\f257\"; }\n\n.ion-ios-transgender:before {\n  content: \"\\f259\"; }\n\n.ion-ios-trash:before {\n  content: \"\\f4c5\"; }\n\n.ion-ios-trash-outline:before {\n  content: \"\\f4c4\"; }\n\n.ion-ios-trending-down:before {\n  content: \"\\f25a\"; }\n\n.ion-ios-trending-up:before {\n  content: \"\\f25b\"; }\n\n.ion-ios-trophy:before {\n  content: \"\\f25d\"; }\n\n.ion-ios-trophy-outline:before {\n  content: \"\\f25c\"; }\n\n.ion-ios-umbrella:before {\n  content: \"\\f25f\"; }\n\n.ion-ios-umbrella-outline:before {\n  content: \"\\f25e\"; }\n\n.ion-ios-undo:before {\n  content: \"\\f4c7\"; }\n\n.ion-ios-undo-outline:before {\n  content: \"\\f4c6\"; }\n\n.ion-ios-unlock:before {\n  content: \"\\f261\"; }\n\n.ion-ios-unlock-outline:before {\n  content: \"\\f260\"; }\n\n.ion-ios-videocam:before {\n  content: \"\\f4cd\"; }\n\n.ion-ios-videocam-outline:before {\n  content: \"\\f4cc\"; }\n\n.ion-ios-volume-down:before {\n  content: \"\\f262\"; }\n\n.ion-ios-volume-mute:before {\n  content: \"\\f263\"; }\n\n.ion-ios-volume-off:before {\n  content: \"\\f264\"; }\n\n.ion-ios-volume-up:before {\n  content: \"\\f265\"; }\n\n.ion-ios-walk:before {\n  content: \"\\f266\"; }\n\n.ion-ios-warning:before {\n  content: \"\\f268\"; }\n\n.ion-ios-warning-outline:before {\n  content: \"\\f267\"; }\n\n.ion-ios-watch:before {\n  content: \"\\f269\"; }\n\n.ion-ios-water:before {\n  content: \"\\f26b\"; }\n\n.ion-ios-water-outline:before {\n  content: \"\\f26a\"; }\n\n.ion-ios-wifi:before {\n  content: \"\\f26d\"; }\n\n.ion-ios-wifi-outline:before {\n  content: \"\\f26c\"; }\n\n.ion-ios-wine:before {\n  content: \"\\f26f\"; }\n\n.ion-ios-wine-outline:before {\n  content: \"\\f26e\"; }\n\n.ion-ios-woman:before {\n  content: \"\\f271\"; }\n\n.ion-ios-woman-outline:before {\n  content: \"\\f270\"; }\n\n.ion-md-add:before {\n  content: \"\\f273\"; }\n\n.ion-md-add-circle:before {\n  content: \"\\f272\"; }\n\n.ion-md-alarm:before {\n  content: \"\\f274\"; }\n\n.ion-md-albums:before {\n  content: \"\\f275\"; }\n\n.ion-md-alert:before {\n  content: \"\\f276\"; }\n\n.ion-md-american-football:before {\n  content: \"\\f277\"; }\n\n.ion-md-analytics:before {\n  content: \"\\f278\"; }\n\n.ion-md-aperture:before {\n  content: \"\\f279\"; }\n\n.ion-md-apps:before {\n  content: \"\\f27a\"; }\n\n.ion-md-appstore:before {\n  content: \"\\f27b\"; }\n\n.ion-md-archive:before {\n  content: \"\\f27c\"; }\n\n.ion-md-arrow-back:before {\n  content: \"\\f27d\"; }\n\n.ion-md-arrow-down:before {\n  content: \"\\f27e\"; }\n\n.ion-md-arrow-dropdown:before {\n  content: \"\\f280\"; }\n\n.ion-md-arrow-dropdown-circle:before {\n  content: \"\\f27f\"; }\n\n.ion-md-arrow-dropleft:before {\n  content: \"\\f282\"; }\n\n.ion-md-arrow-dropleft-circle:before {\n  content: \"\\f281\"; }\n\n.ion-md-arrow-dropright:before {\n  content: \"\\f284\"; }\n\n.ion-md-arrow-dropright-circle:before {\n  content: \"\\f283\"; }\n\n.ion-md-arrow-dropup:before {\n  content: \"\\f286\"; }\n\n.ion-md-arrow-dropup-circle:before {\n  content: \"\\f285\"; }\n\n.ion-md-arrow-forward:before {\n  content: \"\\f287\"; }\n\n.ion-md-arrow-round-back:before {\n  content: \"\\f288\"; }\n\n.ion-md-arrow-round-down:before {\n  content: \"\\f289\"; }\n\n.ion-md-arrow-round-forward:before {\n  content: \"\\f28a\"; }\n\n.ion-md-arrow-round-up:before {\n  content: \"\\f28b\"; }\n\n.ion-md-arrow-up:before {\n  content: \"\\f28c\"; }\n\n.ion-md-at:before {\n  content: \"\\f28d\"; }\n\n.ion-md-attach:before {\n  content: \"\\f28e\"; }\n\n.ion-md-backspace:before {\n  content: \"\\f28f\"; }\n\n.ion-md-barcode:before {\n  content: \"\\f290\"; }\n\n.ion-md-baseball:before {\n  content: \"\\f291\"; }\n\n.ion-md-basket:before {\n  content: \"\\f292\"; }\n\n.ion-md-basketball:before {\n  content: \"\\f293\"; }\n\n.ion-md-battery-charging:before {\n  content: \"\\f294\"; }\n\n.ion-md-battery-dead:before {\n  content: \"\\f295\"; }\n\n.ion-md-battery-full:before {\n  content: \"\\f296\"; }\n\n.ion-md-beaker:before {\n  content: \"\\f297\"; }\n\n.ion-md-beer:before {\n  content: \"\\f298\"; }\n\n.ion-md-bicycle:before {\n  content: \"\\f299\"; }\n\n.ion-md-bluetooth:before {\n  content: \"\\f29a\"; }\n\n.ion-md-boat:before {\n  content: \"\\f29b\"; }\n\n.ion-md-body:before {\n  content: \"\\f29c\"; }\n\n.ion-md-bonfire:before {\n  content: \"\\f29d\"; }\n\n.ion-md-book:before {\n  content: \"\\f29e\"; }\n\n.ion-md-bookmark:before {\n  content: \"\\f29f\"; }\n\n.ion-md-bookmarks:before {\n  content: \"\\f2a0\"; }\n\n.ion-md-bowtie:before {\n  content: \"\\f2a1\"; }\n\n.ion-md-briefcase:before {\n  content: \"\\f2a2\"; }\n\n.ion-md-browsers:before {\n  content: \"\\f2a3\"; }\n\n.ion-md-brush:before {\n  content: \"\\f2a4\"; }\n\n.ion-md-bug:before {\n  content: \"\\f2a5\"; }\n\n.ion-md-build:before {\n  content: \"\\f2a6\"; }\n\n.ion-md-bulb:before {\n  content: \"\\f2a7\"; }\n\n.ion-md-bus:before {\n  content: \"\\f2a8\"; }\n\n.ion-md-cafe:before {\n  content: \"\\f2a9\"; }\n\n.ion-md-calculator:before {\n  content: \"\\f2aa\"; }\n\n.ion-md-calendar:before {\n  content: \"\\f2ab\"; }\n\n.ion-md-call:before {\n  content: \"\\f2ac\"; }\n\n.ion-md-camera:before {\n  content: \"\\f2ad\"; }\n\n.ion-md-car:before {\n  content: \"\\f2b2\"; }\n\n.ion-md-card:before {\n  content: \"\\f2b3\"; }\n\n.ion-md-cart:before {\n  content: \"\\f2b4\"; }\n\n.ion-md-cash:before {\n  content: \"\\f2b5\"; }\n\n.ion-md-chatboxes:before {\n  content: \"\\f2b6\"; }\n\n.ion-md-chatbubbles:before {\n  content: \"\\f2b7\"; }\n\n.ion-md-checkbox:before {\n  content: \"\\f2b9\"; }\n\n.ion-md-checkbox-outline:before {\n  content: \"\\f2b8\"; }\n\n.ion-md-checkmark:before {\n  content: \"\\f2bc\"; }\n\n.ion-md-checkmark-circle:before {\n  content: \"\\f2bb\"; }\n\n.ion-md-checkmark-circle-outline:before {\n  content: \"\\f2ba\"; }\n\n.ion-md-clipboard:before {\n  content: \"\\f2bd\"; }\n\n.ion-md-clock:before {\n  content: \"\\f2be\"; }\n\n.ion-md-close:before {\n  content: \"\\f2c0\"; }\n\n.ion-md-close-circle:before {\n  content: \"\\f2bf\"; }\n\n.ion-md-closed-captioning:before {\n  content: \"\\f2c1\"; }\n\n.ion-md-cloud:before {\n  content: \"\\f2c9\"; }\n\n.ion-md-cloud-circle:before {\n  content: \"\\f2c2\"; }\n\n.ion-md-cloud-done:before {\n  content: \"\\f2c3\"; }\n\n.ion-md-cloud-download:before {\n  content: \"\\f2c6\"; }\n\n.ion-md-cloud-outline:before {\n  content: \"\\f2c7\"; }\n\n.ion-md-cloud-upload:before {\n  content: \"\\f2c8\"; }\n\n.ion-md-cloudy:before {\n  content: \"\\f2cb\"; }\n\n.ion-md-cloudy-night:before {\n  content: \"\\f2ca\"; }\n\n.ion-md-code:before {\n  content: \"\\f2ce\"; }\n\n.ion-md-code-download:before {\n  content: \"\\f2cc\"; }\n\n.ion-md-code-working:before {\n  content: \"\\f2cd\"; }\n\n.ion-md-cog:before {\n  content: \"\\f2cf\"; }\n\n.ion-md-color-fill:before {\n  content: \"\\f2d0\"; }\n\n.ion-md-color-filter:before {\n  content: \"\\f2d1\"; }\n\n.ion-md-color-palette:before {\n  content: \"\\f2d2\"; }\n\n.ion-md-color-wand:before {\n  content: \"\\f2d3\"; }\n\n.ion-md-compass:before {\n  content: \"\\f2d4\"; }\n\n.ion-md-construct:before {\n  content: \"\\f2d5\"; }\n\n.ion-md-contact:before {\n  content: \"\\f2d6\"; }\n\n.ion-md-contacts:before {\n  content: \"\\f2d7\"; }\n\n.ion-md-contract:before {\n  content: \"\\f2d8\"; }\n\n.ion-md-contrast:before {\n  content: \"\\f2d9\"; }\n\n.ion-md-copy:before {\n  content: \"\\f2da\"; }\n\n.ion-md-create:before {\n  content: \"\\f2db\"; }\n\n.ion-md-crop:before {\n  content: \"\\f2dc\"; }\n\n.ion-md-cube:before {\n  content: \"\\f2dd\"; }\n\n.ion-md-cut:before {\n  content: \"\\f2de\"; }\n\n.ion-md-desktop:before {\n  content: \"\\f2df\"; }\n\n.ion-md-disc:before {\n  content: \"\\f2e0\"; }\n\n.ion-md-document:before {\n  content: \"\\f2e1\"; }\n\n.ion-md-done-all:before {\n  content: \"\\f2e2\"; }\n\n.ion-md-download:before {\n  content: \"\\f2e3\"; }\n\n.ion-md-easel:before {\n  content: \"\\f2e4\"; }\n\n.ion-md-egg:before {\n  content: \"\\f2e5\"; }\n\n.ion-md-exit:before {\n  content: \"\\f2e6\"; }\n\n.ion-md-expand:before {\n  content: \"\\f2e7\"; }\n\n.ion-md-eye:before {\n  content: \"\\f2e9\"; }\n\n.ion-md-eye-off:before {\n  content: \"\\f2e8\"; }\n\n.ion-md-fastforward:before {\n  content: \"\\f2ea\"; }\n\n.ion-md-female:before {\n  content: \"\\f2eb\"; }\n\n.ion-md-filing:before {\n  content: \"\\f2ec\"; }\n\n.ion-md-film:before {\n  content: \"\\f2ed\"; }\n\n.ion-md-finger-print:before {\n  content: \"\\f2ee\"; }\n\n.ion-md-flag:before {\n  content: \"\\f2ef\"; }\n\n.ion-md-flame:before {\n  content: \"\\f2f0\"; }\n\n.ion-md-flash:before {\n  content: \"\\f2f1\"; }\n\n.ion-md-flask:before {\n  content: \"\\f2f2\"; }\n\n.ion-md-flower:before {\n  content: \"\\f2f3\"; }\n\n.ion-md-folder:before {\n  content: \"\\f2f5\"; }\n\n.ion-md-folder-open:before {\n  content: \"\\f2f4\"; }\n\n.ion-md-football:before {\n  content: \"\\f2f6\"; }\n\n.ion-md-funnel:before {\n  content: \"\\f2f7\"; }\n\n.ion-md-game-controller-a:before {\n  content: \"\\f2f8\"; }\n\n.ion-md-game-controller-b:before {\n  content: \"\\f2f9\"; }\n\n.ion-md-git-branch:before {\n  content: \"\\f2fa\"; }\n\n.ion-md-git-commit:before {\n  content: \"\\f2fb\"; }\n\n.ion-md-git-compare:before {\n  content: \"\\f2fc\"; }\n\n.ion-md-git-merge:before {\n  content: \"\\f2fd\"; }\n\n.ion-md-git-network:before {\n  content: \"\\f2fe\"; }\n\n.ion-md-git-pull-request:before {\n  content: \"\\f2ff\"; }\n\n.ion-md-glasses:before {\n  content: \"\\f300\"; }\n\n.ion-md-globe:before {\n  content: \"\\f301\"; }\n\n.ion-md-grid:before {\n  content: \"\\f302\"; }\n\n.ion-md-hammer:before {\n  content: \"\\f303\"; }\n\n.ion-md-hand:before {\n  content: \"\\f304\"; }\n\n.ion-md-happy:before {\n  content: \"\\f305\"; }\n\n.ion-md-headset:before {\n  content: \"\\f306\"; }\n\n.ion-md-heart:before {\n  content: \"\\f308\"; }\n\n.ion-md-heart-outline:before {\n  content: \"\\f307\"; }\n\n.ion-md-help:before {\n  content: \"\\f30b\"; }\n\n.ion-md-help-buoy:before {\n  content: \"\\f309\"; }\n\n.ion-md-help-circle:before {\n  content: \"\\f30a\"; }\n\n.ion-md-home:before {\n  content: \"\\f30c\"; }\n\n.ion-md-ice-cream:before {\n  content: \"\\f30d\"; }\n\n.ion-md-image:before {\n  content: \"\\f30e\"; }\n\n.ion-md-images:before {\n  content: \"\\f30f\"; }\n\n.ion-md-infinite:before {\n  content: \"\\f310\"; }\n\n.ion-md-information:before {\n  content: \"\\f312\"; }\n\n.ion-md-information-circle:before {\n  content: \"\\f311\"; }\n\n.ion-md-ionic:before {\n  content: \"\\f313\"; }\n\n.ion-md-ionitron:before {\n  content: \"\\f314\"; }\n\n.ion-md-jet:before {\n  content: \"\\f315\"; }\n\n.ion-md-key:before {\n  content: \"\\f316\"; }\n\n.ion-md-keypad:before {\n  content: \"\\f317\"; }\n\n.ion-md-laptop:before {\n  content: \"\\f318\"; }\n\n.ion-md-leaf:before {\n  content: \"\\f319\"; }\n\n.ion-md-list:before {\n  content: \"\\f31b\"; }\n\n.ion-md-list-box:before {\n  content: \"\\f31a\"; }\n\n.ion-md-locate:before {\n  content: \"\\f31c\"; }\n\n.ion-md-lock:before {\n  content: \"\\f31d\"; }\n\n.ion-md-log-in:before {\n  content: \"\\f31e\"; }\n\n.ion-md-log-out:before {\n  content: \"\\f31f\"; }\n\n.ion-md-magnet:before {\n  content: \"\\f320\"; }\n\n.ion-md-mail:before {\n  content: \"\\f322\"; }\n\n.ion-md-mail-open:before {\n  content: \"\\f321\"; }\n\n.ion-md-male:before {\n  content: \"\\f323\"; }\n\n.ion-md-man:before {\n  content: \"\\f324\"; }\n\n.ion-md-map:before {\n  content: \"\\f325\"; }\n\n.ion-md-medal:before {\n  content: \"\\f326\"; }\n\n.ion-md-medical:before {\n  content: \"\\f327\"; }\n\n.ion-md-medkit:before {\n  content: \"\\f328\"; }\n\n.ion-md-megaphone:before {\n  content: \"\\f329\"; }\n\n.ion-md-menu:before {\n  content: \"\\f32a\"; }\n\n.ion-md-mic:before {\n  content: \"\\f32c\"; }\n\n.ion-md-mic-off:before {\n  content: \"\\f32b\"; }\n\n.ion-md-microphone:before {\n  content: \"\\f32d\"; }\n\n.ion-md-moon:before {\n  content: \"\\f32e\"; }\n\n.ion-md-more:before {\n  content: \"\\f1c9\"; }\n\n.ion-md-move:before {\n  content: \"\\f331\"; }\n\n.ion-md-musical-note:before {\n  content: \"\\f332\"; }\n\n.ion-md-musical-notes:before {\n  content: \"\\f333\"; }\n\n.ion-md-navigate:before {\n  content: \"\\f334\"; }\n\n.ion-md-no-smoking:before {\n  content: \"\\f335\"; }\n\n.ion-md-notifications:before {\n  content: \"\\f338\"; }\n\n.ion-md-notifications-off:before {\n  content: \"\\f336\"; }\n\n.ion-md-notifications-outline:before {\n  content: \"\\f337\"; }\n\n.ion-md-nuclear:before {\n  content: \"\\f339\"; }\n\n.ion-md-nutrition:before {\n  content: \"\\f33a\"; }\n\n.ion-md-open:before {\n  content: \"\\f33b\"; }\n\n.ion-md-options:before {\n  content: \"\\f33c\"; }\n\n.ion-md-outlet:before {\n  content: \"\\f33d\"; }\n\n.ion-md-paper:before {\n  content: \"\\f33f\"; }\n\n.ion-md-paper-plane:before {\n  content: \"\\f33e\"; }\n\n.ion-md-partly-sunny:before {\n  content: \"\\f340\"; }\n\n.ion-md-pause:before {\n  content: \"\\f341\"; }\n\n.ion-md-paw:before {\n  content: \"\\f342\"; }\n\n.ion-md-people:before {\n  content: \"\\f343\"; }\n\n.ion-md-person:before {\n  content: \"\\f345\"; }\n\n.ion-md-person-add:before {\n  content: \"\\f344\"; }\n\n.ion-md-phone-landscape:before {\n  content: \"\\f346\"; }\n\n.ion-md-phone-portrait:before {\n  content: \"\\f347\"; }\n\n.ion-md-photos:before {\n  content: \"\\f348\"; }\n\n.ion-md-pie:before {\n  content: \"\\f349\"; }\n\n.ion-md-pin:before {\n  content: \"\\f34a\"; }\n\n.ion-md-pint:before {\n  content: \"\\f34b\"; }\n\n.ion-md-pizza:before {\n  content: \"\\f354\"; }\n\n.ion-md-plane:before {\n  content: \"\\f355\"; }\n\n.ion-md-planet:before {\n  content: \"\\f356\"; }\n\n.ion-md-play:before {\n  content: \"\\f357\"; }\n\n.ion-md-podium:before {\n  content: \"\\f358\"; }\n\n.ion-md-power:before {\n  content: \"\\f359\"; }\n\n.ion-md-pricetag:before {\n  content: \"\\f35a\"; }\n\n.ion-md-pricetags:before {\n  content: \"\\f35b\"; }\n\n.ion-md-print:before {\n  content: \"\\f35c\"; }\n\n.ion-md-pulse:before {\n  content: \"\\f35d\"; }\n\n.ion-md-qr-scanner:before {\n  content: \"\\f35e\"; }\n\n.ion-md-quote:before {\n  content: \"\\f35f\"; }\n\n.ion-md-radio:before {\n  content: \"\\f362\"; }\n\n.ion-md-radio-button-off:before {\n  content: \"\\f360\"; }\n\n.ion-md-radio-button-on:before {\n  content: \"\\f361\"; }\n\n.ion-md-rainy:before {\n  content: \"\\f363\"; }\n\n.ion-md-recording:before {\n  content: \"\\f364\"; }\n\n.ion-md-redo:before {\n  content: \"\\f365\"; }\n\n.ion-md-refresh:before {\n  content: \"\\f366\"; }\n\n.ion-md-refresh-circle:before {\n  content: \"\\f228\"; }\n\n.ion-md-remove:before {\n  content: \"\\f368\"; }\n\n.ion-md-remove-circle:before {\n  content: \"\\f367\"; }\n\n.ion-md-reorder:before {\n  content: \"\\f369\"; }\n\n.ion-md-repeat:before {\n  content: \"\\f36a\"; }\n\n.ion-md-resize:before {\n  content: \"\\f36b\"; }\n\n.ion-md-restaurant:before {\n  content: \"\\f36c\"; }\n\n.ion-md-return-left:before {\n  content: \"\\f36d\"; }\n\n.ion-md-return-right:before {\n  content: \"\\f36e\"; }\n\n.ion-md-reverse-camera:before {\n  content: \"\\f36f\"; }\n\n.ion-md-rewind:before {\n  content: \"\\f370\"; }\n\n.ion-md-ribbon:before {\n  content: \"\\f371\"; }\n\n.ion-md-rose:before {\n  content: \"\\f372\"; }\n\n.ion-md-sad:before {\n  content: \"\\f373\"; }\n\n.ion-md-school:before {\n  content: \"\\f374\"; }\n\n.ion-md-search:before {\n  content: \"\\f375\"; }\n\n.ion-md-send:before {\n  content: \"\\f376\"; }\n\n.ion-md-settings:before {\n  content: \"\\f377\"; }\n\n.ion-md-share:before {\n  content: \"\\f379\"; }\n\n.ion-md-share-alt:before {\n  content: \"\\f378\"; }\n\n.ion-md-shirt:before {\n  content: \"\\f37a\"; }\n\n.ion-md-shuffle:before {\n  content: \"\\f37b\"; }\n\n.ion-md-skip-backward:before {\n  content: \"\\f37c\"; }\n\n.ion-md-skip-forward:before {\n  content: \"\\f37d\"; }\n\n.ion-md-snow:before {\n  content: \"\\f37e\"; }\n\n.ion-md-speedometer:before {\n  content: \"\\f37f\"; }\n\n.ion-md-square:before {\n  content: \"\\f381\"; }\n\n.ion-md-square-outline:before {\n  content: \"\\f380\"; }\n\n.ion-md-star:before {\n  content: \"\\f384\"; }\n\n.ion-md-star-half:before {\n  content: \"\\f382\"; }\n\n.ion-md-star-outline:before {\n  content: \"\\f383\"; }\n\n.ion-md-stats:before {\n  content: \"\\f385\"; }\n\n.ion-md-stopwatch:before {\n  content: \"\\f386\"; }\n\n.ion-md-subway:before {\n  content: \"\\f387\"; }\n\n.ion-md-sunny:before {\n  content: \"\\f388\"; }\n\n.ion-md-swap:before {\n  content: \"\\f389\"; }\n\n.ion-md-switch:before {\n  content: \"\\f38a\"; }\n\n.ion-md-sync:before {\n  content: \"\\f38b\"; }\n\n.ion-md-tablet-landscape:before {\n  content: \"\\f38c\"; }\n\n.ion-md-tablet-portrait:before {\n  content: \"\\f38d\"; }\n\n.ion-md-tennisball:before {\n  content: \"\\f38e\"; }\n\n.ion-md-text:before {\n  content: \"\\f38f\"; }\n\n.ion-md-thermometer:before {\n  content: \"\\f390\"; }\n\n.ion-md-thumbs-down:before {\n  content: \"\\f391\"; }\n\n.ion-md-thumbs-up:before {\n  content: \"\\f392\"; }\n\n.ion-md-thunderstorm:before {\n  content: \"\\f393\"; }\n\n.ion-md-time:before {\n  content: \"\\f394\"; }\n\n.ion-md-timer:before {\n  content: \"\\f395\"; }\n\n.ion-md-train:before {\n  content: \"\\f396\"; }\n\n.ion-md-transgender:before {\n  content: \"\\f397\"; }\n\n.ion-md-trash:before {\n  content: \"\\f398\"; }\n\n.ion-md-trending-down:before {\n  content: \"\\f399\"; }\n\n.ion-md-trending-up:before {\n  content: \"\\f39a\"; }\n\n.ion-md-trophy:before {\n  content: \"\\f39b\"; }\n\n.ion-md-umbrella:before {\n  content: \"\\f39c\"; }\n\n.ion-md-undo:before {\n  content: \"\\f39d\"; }\n\n.ion-md-unlock:before {\n  content: \"\\f39e\"; }\n\n.ion-md-videocam:before {\n  content: \"\\f39f\"; }\n\n.ion-md-volume-down:before {\n  content: \"\\f3a0\"; }\n\n.ion-md-volume-mute:before {\n  content: \"\\f3a1\"; }\n\n.ion-md-volume-off:before {\n  content: \"\\f3a2\"; }\n\n.ion-md-volume-up:before {\n  content: \"\\f3a3\"; }\n\n.ion-md-walk:before {\n  content: \"\\f3a4\"; }\n\n.ion-md-warning:before {\n  content: \"\\f3a5\"; }\n\n.ion-md-watch:before {\n  content: \"\\f3a6\"; }\n\n.ion-md-water:before {\n  content: \"\\f3a7\"; }\n\n.ion-md-wifi:before {\n  content: \"\\f3a8\"; }\n\n.ion-md-wine:before {\n  content: \"\\f3a9\"; }\n\n.ion-md-woman:before {\n  content: \"\\f3aa\"; }\n\n.ion-social-android:before {\n  content: \"\\f225\"; }\n\n.ion-social-angular:before {\n  content: \"\\f4d9\"; }\n\n.ion-social-apple:before {\n  content: \"\\f227\"; }\n\n.ion-social-bitcoin:before {\n  content: \"\\f2af\"; }\n\n.ion-social-buffer:before {\n  content: \"\\f229\"; }\n\n.ion-social-chrome:before {\n  content: \"\\f4db\"; }\n\n.ion-social-codepen:before {\n  content: \"\\f4dd\"; }\n\n.ion-social-css3:before {\n  content: \"\\f4df\"; }\n\n.ion-social-designernews:before {\n  content: \"\\f22b\"; }\n\n.ion-social-dribbble:before {\n  content: \"\\f22d\"; }\n\n.ion-social-dropbox:before {\n  content: \"\\f22f\"; }\n\n.ion-social-euro:before {\n  content: \"\\f4e1\"; }\n\n.ion-social-facebook:before {\n  content: \"\\f231\"; }\n\n.ion-social-foursquare:before {\n  content: \"\\f34d\"; }\n\n.ion-social-freebsd-devil:before {\n  content: \"\\f2c4\"; }\n\n.ion-social-github:before {\n  content: \"\\f233\"; }\n\n.ion-social-google:before {\n  content: \"\\f34f\"; }\n\n.ion-social-googleplus:before {\n  content: \"\\f235\"; }\n\n.ion-social-hackernews:before {\n  content: \"\\f237\"; }\n\n.ion-social-html5:before {\n  content: \"\\f4e3\"; }\n\n.ion-social-instagram:before {\n  content: \"\\f351\"; }\n\n.ion-social-javascript:before {\n  content: \"\\f4e5\"; }\n\n.ion-social-linkedin:before {\n  content: \"\\f239\"; }\n\n.ion-social-markdown:before {\n  content: \"\\f4e6\"; }\n\n.ion-social-nodejs:before {\n  content: \"\\f4e7\"; }\n\n.ion-social-octocat:before {\n  content: \"\\f4e8\"; }\n\n.ion-social-pinterest:before {\n  content: \"\\f2b1\"; }\n\n.ion-social-playstation:before {\n  content: \"\\f3ab\"; }\n\n.ion-social-python:before {\n  content: \"\\f4e9\"; }\n\n.ion-social-reddit:before {\n  content: \"\\f23b\"; }\n\n.ion-social-rss:before {\n  content: \"\\f23d\"; }\n\n.ion-social-sass:before {\n  content: \"\\f4ea\"; }\n\n.ion-social-skype:before {\n  content: \"\\f23f\"; }\n\n.ion-social-snapchat:before {\n  content: \"\\f4ec\"; }\n\n.ion-social-steam:before {\n  content: \"\\f3ac\"; }\n\n.ion-social-tumblr:before {\n  content: \"\\f241\"; }\n\n.ion-social-tux:before {\n  content: \"\\f2c5\"; }\n\n.ion-social-twitch:before {\n  content: \"\\f4ee\"; }\n\n.ion-social-twitter:before {\n  content: \"\\f243\"; }\n\n.ion-social-usd:before {\n  content: \"\\f353\"; }\n\n.ion-social-vimeo:before {\n  content: \"\\f245\"; }\n\n.ion-social-whatsapp:before {\n  content: \"\\f4f0\"; }\n\n.ion-social-windows:before {\n  content: \"\\f247\"; }\n\n.ion-social-wordpress:before {\n  content: \"\\f249\"; }\n\n.ion-social-xbox:before {\n  content: \"\\f3ad\"; }\n\n.ion-social-yahoo:before {\n  content: \"\\f24b\"; }\n\n.ion-social-yen:before {\n  content: \"\\f4f2\"; }\n\n.ion-social-youtube:before {\n  content: \"\\f24d\"; }\n\n.ios {\n  /*! Ionic: iOS */\n  /****************/\n  /* DEFAULT LIST */\n  /****************/\n  /**************/\n  /* INSET LIST */\n  /**************/\n  /*****************/\n  /* NO LINES LIST */\n  /*****************/ }\n  .ios hr {\n    border-width: 0;\n    height: 1px;\n    background-color: rgba(0, 0, 0, 0.12); }\n  .ios.hairlines hr {\n    height: 0.55px; }\n  .ios button[block] {\n    display: block; }\n  .ios ion-item-group .item:first-child .item-inner {\n    border-top-width: 0; }\n  .ios ion-item-group .item:last-child .item-inner,\n  .ios ion-item-group ion-item-sliding:last-child .item .item-inner {\n    border: none; }\n  .ios ion-item-divider {\n    padding: 12px 16px 13px 16px;\n    background-color: #f7f7f7;\n    color: #222; }\n  .ios ion-note {\n    color: #aeacb4; }\n  .ios .item {\n    border-radius: 0;\n    padding-left: 16px;\n    font-size: 1.6rem; }\n  .ios .item.activated,\n  .ios a.item.activated,\n  .ios button.item.activated {\n    background-color: #d9d9d9;\n    -webkit-transition-duration: 0ms;\n    transition-duration: 0ms; }\n  .ios .item,\n  .ios a.item,\n  .ios button.item {\n    -webkit-transition-duration: 200ms;\n    transition-duration: 200ms; }\n  .ios .item-inner {\n    padding-right: 8px;\n    border-bottom: 1px solid #c8c7cc; }\n  .ios ion-item-content {\n    margin: 12px 8px 13px 0; }\n  .ios [item-left] {\n    margin: 6px 16px 6.5px 0; }\n  .ios [item-right] {\n    margin: 6px 8px 6.5px 8px; }\n  .ios icon[item-left],\n  .ios icon[item-right] {\n    margin-top: 10px;\n    margin-bottom: 9px; }\n  .ios ion-avatar[item-left],\n  .ios ion-thumbnail[item-left] {\n    margin: 8px 16px 8px 0; }\n  .ios ion-avatar[item-right],\n  .ios ion-thumbnail[item-right] {\n    margin: 8px; }\n  .ios button[item-left],\n  .ios button[item-right],\n  .ios [button][item-left],\n  .ios [button][item-right] {\n    padding: 0 0.5em;\n    font-size: 1.3rem;\n    min-height: 25px;\n    margin-top: 9px; }\n  .ios [item-left].icon-only,\n  .ios [item-right].icon-only,\n  .ios [item-left].icon-only icon,\n  .ios [item-right].icon-only icon,\n  .ios [item-left][clear],\n  .ios [item-right][clear] {\n    padding: 0 1px; }\n  .ios [item-left].icon-left icon,\n  .ios [item-right].icon-left icon {\n    margin-left: 0;\n    margin-bottom: 1px;\n    padding-right: 0.3em; }\n  .ios [item-left].icon-right icon,\n  .ios [item-right].icon-right icon {\n    margin-right: 0;\n    margin-bottom: 1px; }\n  .ios ion-avatar {\n    min-width: 3.6rem;\n    min-height: 3.6rem; }\n    .ios ion-avatar img {\n      max-width: 3.6rem;\n      max-height: 3.6rem;\n      border-radius: 1.8rem; }\n  .ios ion-thumbnail {\n    min-width: 5.6rem;\n    min-height: 5.6rem; }\n    .ios ion-thumbnail img {\n      max-width: 5.6rem;\n      max-height: 5.6rem; }\n  .ios button.item:not([detail-none]) .item-inner,\n  .ios a.item:not([detail-none]) .item-inner,\n  .ios .item[detail-push] .item-inner {\n    background-image: url(\"data:image/svg+xml;charset=utf-8,<svg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%2012%2020'><path%20d='M2,20l-2-2l8-8L0,2l2-2l10,10L2,20z'%20fill='#c8c7cc'/></svg>\");\n    background-repeat: no-repeat;\n    background-position: right 14px center;\n    background-size: 14px 14px;\n    padding-right: 32px; }\n  .ios.hairlines .item-inner {\n    border-bottom-width: 0.55px; }\n  .ios .toolbar {\n    min-height: 4.4rem; }\n    .ios .toolbar [menu-toggle] {\n      -webkit-box-ordinal-group: 21;\n      -webkit-order: 20;\n      -ms-flex-order: 20;\n      order: 20;\n      cursor: pointer; }\n    .ios .toolbar [menu-toggle][secondary] {\n      -webkit-box-ordinal-group: 61;\n      -webkit-order: 60;\n      -ms-flex-order: 60;\n      order: 60; }\n    .ios .toolbar ion-segment-button[button] {\n      line-height: 2.4rem;\n      min-height: 2.4rem;\n      font-size: 1.2rem; }\n    .ios .toolbar button,\n    .ios .toolbar [button] {\n      margin-top: 0;\n      margin-bottom: 0;\n      padding: 0 5px;\n      min-height: 32px; }\n    .ios .toolbar button.icon-only,\n    .ios .toolbar [button].icon-only {\n      padding-right: 0;\n      padding-left: 0; }\n    .ios .toolbar button icon,\n    .ios .toolbar [button] icon {\n      padding: 0;\n      min-width: 28px; }\n    .ios .toolbar .back-button {\n      margin: 0;\n      min-height: 3.2rem;\n      line-height: 1;\n      -webkit-box-ordinal-group: 11;\n      -webkit-order: 10;\n      -ms-flex-order: 10;\n      order: 10;\n      overflow: visible; }\n    .ios .toolbar .back-button-icon {\n      display: inherit;\n      margin: 0;\n      min-width: 18px;\n      font-size: 3.2rem; }\n  .ios .toolbar toolbar-background {\n    border-bottom-width: 1px;\n    border-bottom-style: solid; }\n  .ios ion-title {\n    position: absolute;\n    top: 0;\n    left: 0;\n    width: 100%;\n    height: 100%;\n    padding: 0px 90px 1px 90px;\n    pointer-events: none;\n    -webkit-transform: translateZ(0px);\n    transform: translateZ(0px); }\n  .ios .toolbar-title {\n    font-size: 1.7rem;\n    font-weight: 500;\n    text-align: center;\n    pointer-events: auto; }\n  .ios ion-nav-items {\n    -webkit-box-flex: 1;\n    -webkit-flex: 1;\n    -ms-flex: 1;\n    flex: 1;\n    -webkit-box-ordinal-group: 31;\n    -webkit-order: 30;\n    -ms-flex-order: 30;\n    order: 30;\n    -webkit-transform: translateZ(0px);\n    transform: translateZ(0px); }\n  .ios ion-nav-items[secondary] {\n    text-align: right;\n    -webkit-box-ordinal-group: 51;\n    -webkit-order: 50;\n    -ms-flex-order: 50;\n    order: 50; }\n  .ios.hairlines .toolbar toolbar-background {\n    border-bottom-width: 0.55px; }\n  .ios ion-action-sheet {\n    text-align: center; }\n  .ios .action-sheet-container {\n    padding: 0 10px; }\n    .ios .action-sheet-container button.activated {\n      box-shadow: none;\n      border-color: #d1d3d6;\n      color: #007aff;\n      background: #e4e5e7; }\n  .ios ion-action-sheet button {\n    min-height: 5.6rem;\n    padding: 1.8rem;\n    margin: 0;\n    border: 0;\n    background: transparent; }\n    .ios ion-action-sheet button.activated {\n      background: #e9e9e9; }\n  .ios .action-sheet-group {\n    margin-bottom: 8px;\n    border-radius: 1.3rem; }\n  .ios .action-sheet-group:last-child {\n    margin-bottom: 10px; }\n  .ios .action-sheet-title,\n  .ios .action-sheet-option {\n    min-height: 5.6rem;\n    background: rgba(243, 243, 243, 0.95);\n    font-weight: 400;\n    border-bottom: 1px solid #d6d6da; }\n  .ios .action-sheet-cancel button {\n    font-weight: bold; }\n  .ios .action-sheet-title {\n    padding: 2rem;\n    font-size: 1.2rem;\n    font-weight: 500;\n    color: #5f5f5f;\n    border-radius: 0; }\n  .ios .action-sheet-option {\n    font-size: 2rem;\n    color: #007aff;\n    border-radius: 0; }\n  .ios .action-sheet-title:first-child,\n  .ios .action-sheet-button:first-child,\n  .ios .action-sheet-group button:first-child {\n    border-top-left-radius: 1.3rem;\n    border-top-right-radius: 1.3rem; }\n  .ios .action-sheet-title:last-child,\n  .ios .action-sheet-button:last-child,\n  .ios .action-sheet-group button:last-child {\n    border-bottom-left-radius: 1.3rem;\n    border-bottom-right-radius: 1.3rem; }\n  .ios.hairlines .action-sheet .action-sheet-title,\n  .ios.hairlines .action-sheet .action-sheet-option {\n    border-bottom-width: 0.55px; }\n  .ios .action-sheet-destructive {\n    color: #f53d3d; }\n  .ios ion-card {\n    margin: 12px 12px 12px 12px;\n    font-size: 1.4rem;\n    background: #fff;\n    box-shadow: 0 1px 2px rgba(0, 0, 0, 0.3);\n    border-radius: 2px; }\n    .ios ion-card ion-list {\n      margin-bottom: 0; }\n      .ios ion-card ion-list .item {\n        padding-right: 0; }\n      .ios ion-card ion-list ion-item-content {\n        padding: 0; }\n      .ios ion-card ion-list > .item:last-child,\n      .ios ion-card ion-list > ion-item-sliding:last-child .item {\n        border-bottom: none; }\n    .ios ion-card .item-inner {\n      border: none; }\n    .ios ion-card ion-card-content {\n      padding: 13px 16px 14px 16px;\n      font-size: 1.4rem;\n      line-height: 1.4; }\n    .ios ion-card ion-card-header {\n      padding: 16px;\n      font-size: 1.6rem;\n      font-weight: 500;\n      color: #333; }\n    .ios ion-card ion-card-header + ion-card-content,\n    .ios ion-card .item + ion-card-content {\n      padding-top: 0; }\n    .ios ion-card ion-note[item-left],\n    .ios ion-card ion-note[item-right] {\n      font-size: 1.3rem; }\n    .ios ion-card .card-title {\n      padding: 8px 0 8px 0;\n      font-size: 1.8rem;\n      color: #222; }\n    .ios ion-card h1 {\n      margin: 0 0 2px;\n      font-size: 2.4rem;\n      font-weight: normal; }\n    .ios ion-card h2 {\n      margin: 2px 0 2px;\n      font-size: 1.6rem;\n      font-weight: normal; }\n    .ios ion-card h3,\n    .ios ion-card h4,\n    .ios ion-card h5,\n    .ios ion-card h6 {\n      margin: 2px 0 2px;\n      font-size: 1.4rem;\n      font-weight: normal; }\n    .ios ion-card p {\n      font-size: 1.4rem;\n      margin: 0 0 2px;\n      color: #666; }\n  .ios ion-card + ion-card {\n    margin-top: 0; }\n  .ios .outer-content {\n    background: #efeff4; }\n  .ios ion-nav.has-views,\n  .ios ion-tab.has-views {\n    background: #000; }\n  .ios ion-list-header {\n    position: relative;\n    padding: 10px 16px 10px 16px;\n    font-size: 1.2rem;\n    font-weight: 500;\n    letter-spacing: 0.1rem;\n    text-transform: uppercase;\n    color: #333;\n    border-bottom: 1px solid #c8c7cc; }\n  .ios ion-list {\n    margin: -1px 0 32px 0; }\n    .ios ion-list > .item:first-child {\n      border-top: 1px solid #c8c7cc; }\n    .ios ion-list > .item:last-child,\n    .ios ion-list > ion-item-sliding:last-child .item {\n      border-bottom: 1px solid #c8c7cc; }\n      .ios ion-list > .item:last-child .item-inner,\n      .ios ion-list > ion-item-sliding:last-child .item .item-inner {\n        border-bottom: none; }\n    .ios ion-list .item-inner {\n      border-bottom: 1px solid #c8c7cc; }\n    .ios ion-list .item[no-lines],\n    .ios ion-list .item[no-lines] .item-inner {\n      border-width: 0; }\n    .ios ion-list ion-item-options {\n      border-bottom: 1px solid #c8c7cc; }\n      .ios ion-list ion-item-options button, .ios ion-list ion-item-options [button] {\n        min-height: 100%;\n        height: 100%;\n        margin: 0;\n        border: none;\n        border-radius: 0;\n        display: -webkit-inline-box;\n        display: -webkit-inline-flex;\n        display: -ms-inline-flexbox;\n        display: inline-flex;\n        -webkit-box-align: center;\n        -webkit-align-items: center;\n        -ms-flex-align: center;\n        align-items: center;\n        box-sizing: border-box; }\n        .ios ion-list ion-item-options button:before, .ios ion-list ion-item-options [button]:before {\n          margin: 0 auto; }\n  .ios ion-list + ion-list {\n    margin-top: 42px; }\n    .ios ion-list + ion-list ion-list-header {\n      margin-top: -10px;\n      padding-top: 0; }\n  .ios.hairlines ion-list-header {\n    border-bottom-width: 0.55px; }\n  .ios.hairlines ion-list ion-item-options {\n    border-width: 0.55px; }\n  .ios.hairlines ion-list .item .item-inner {\n    border-width: 0.55px; }\n  .ios.hairlines ion-list > .item:first-child {\n    border-top-width: 0.55px; }\n  .ios.hairlines ion-list > .item:last-child,\n  .ios.hairlines ion-list > ion-item-sliding:last-child .item {\n    border-bottom-width: 0.55px; }\n  .ios ion-list[inset] {\n    margin: 16px 16px 16px 16px;\n    border-radius: 4px; }\n    .ios ion-list[inset] .item {\n      border-bottom: 1px solid #c8c7cc; }\n      .ios ion-list[inset] .item .item-inner {\n        border-bottom: none; }\n    .ios ion-list[inset] > .item:first-child,\n    .ios ion-list[inset] > ion-item-sliding:first-child .item {\n      border-top: none; }\n    .ios ion-list[inset] > .item:last-child,\n    .ios ion-list[inset] > ion-item-sliding:last-child .item {\n      border-bottom: none; }\n  .ios ion-list[inset] + ion-list[inset] {\n    margin-top: 0; }\n  .ios.hairlines ion-list[inset] .item {\n    border-width: 0.55px; }\n  .ios ion-list[no-lines] ion-list-header,\n  .ios ion-list[no-lines] .item,\n  .ios ion-list[no-lines] .item .item-inner,\n  .ios.hairlines ion-list[no-lines] ion-list-header,\n  .ios.hairlines ion-list[no-lines] .item,\n  .ios.hairlines ion-list[no-lines] .item .item-inner {\n    border-width: 0; }\n  .ios [text-input] {\n    margin: 12px 8px 13px 0;\n    padding: 0; }\n  .ios ion-input[inset] [text-input] {\n    margin: 6px 16px 6.5px 16px;\n    padding: 6px 8px 6.5px 8px; }\n  .ios ion-label {\n    margin: 12px 8px 13px 0;\n    color: #7f7f7f; }\n  .ios ion-label + [text-input] {\n    margin-left: 16px; }\n  .ios [stacked-label] ion-label {\n    font-size: 1.2rem;\n    margin-bottom: 4px; }\n  .ios [stacked-label] [text-input],\n  .ios [floating-label] [text-input] {\n    margin-left: 0;\n    margin-top: 8px;\n    margin-bottom: 8px; }\n  .ios [floating-label] ion-label {\n    margin-bottom: 0;\n    -webkit-transform-origin: left top;\n    transform-origin: left top;\n    -webkit-transform: translate3d(0, 27px, 0);\n    transform: translate3d(0, 27px, 0);\n    -webkit-transition: -webkit-transform 150ms ease-in-out;\n    transition: transform 150ms ease-in-out; }\n  .ios [floating-label].has-focus ion-label,\n  .ios [floating-label].has-value ion-label {\n    -webkit-transform: translate3d(0, 0, 0) scale(0.8);\n    transform: translate3d(0, 0, 0) scale(0.8); }\n  .ios ion-navbar-section {\n    min-height: 4.4rem; }\n  .ios .back-button {\n    -webkit-transform: translateZ(0px);\n    transform: translateZ(0px); }\n  .ios ion-popup {\n    background: transparent; }\n    .ios ion-popup popup-wrapper {\n      border-radius: 13px;\n      background-color: #f8f8f8;\n      max-width: 270px;\n      overflow: hidden; }\n  .ios .popup-head {\n    padding: 12px 16px 20px;\n    text-align: center; }\n  .ios .popup-title {\n    margin-top: 12px;\n    font-weight: bold;\n    font-size: 17px; }\n  .ios .popup-sub-title {\n    font-size: 14px;\n    color: #666; }\n  .ios .popup-body {\n    padding: 0px 16px 24px;\n    color: inherit;\n    text-align: center;\n    font-size: 13px; }\n  .ios .prompt-input {\n    padding: 6px;\n    margin-top: 24px;\n    background-color: #fff;\n    border: 1px solid #ccc;\n    border-radius: 4px;\n    -webkit-appearance: none; }\n  .ios .popup-buttons button {\n    margin: 0;\n    -webkit-box-flex: 1;\n    -webkit-flex: 1;\n    -ms-flex: 1;\n    flex: 1;\n    border-radius: 0;\n    font-size: 17px;\n    min-height: 44px;\n    border-right: 1px solid #c8c7cc; }\n    .ios .popup-buttons button.activated {\n      opacity: 1;\n      background-color: #e9e9e9; }\n    .ios .popup-buttons button:hover:not(.disable-hover) {\n      opacity: 1; }\n    .ios .popup-buttons button:before {\n      position: absolute;\n      top: 0;\n      right: 0;\n      left: 0;\n      border-top: 1px solid #c8c7cc;\n      content: '';\n      pointer-events: none; }\n    .ios .popup-buttons button:last-child {\n      font-weight: bold;\n      border-right: 0; }\n  .ios.hairlines .prompt-input {\n    border-width: 0.55px; }\n  .ios.hairlines .popup-buttons button {\n    border-right-width: 0.55px; }\n    .ios.hairlines .popup-buttons button:before {\n      border-top-width: 0.55px; }\n  .ios ion-checkbox[aria-checked=true] checkbox-icon {\n    background-color: #387ef5;\n    border-color: #387ef5; }\n  .ios ion-checkbox[aria-checked=true] checkbox-icon:after {\n    position: absolute;\n    border: 1px solid #fff;\n    top: 3px;\n    left: 7px;\n    width: 4px;\n    height: 9px;\n    border-left: none;\n    border-top: none;\n    content: '';\n    -webkit-transform: rotate(45deg);\n    transform: rotate(45deg); }\n  .ios ion-checkbox.item.activated {\n    background-color: #fff; }\n  .ios media-checkbox {\n    display: block;\n    margin: 10px 16px 10px 2px; }\n  .ios checkbox-icon {\n    position: relative;\n    display: block;\n    width: 21px;\n    height: 21px;\n    border-radius: 50%;\n    border: 1px solid #c8c7cc;\n    background-color: #fff; }\n  .ios ion-checkbox[secondary][aria-checked=true] checkbox-icon {\n    background-color: #32db64;\n    border-color: #32db64; }\n  .ios ion-checkbox[danger][aria-checked=true] checkbox-icon {\n    background-color: #f53d3d;\n    border-color: #f53d3d; }\n  .ios ion-checkbox[light][aria-checked=true] checkbox-icon {\n    background-color: #f4f4f4;\n    border-color: #f4f4f4; }\n  .ios ion-checkbox[dark][aria-checked=true] checkbox-icon {\n    background-color: #222;\n    border-color: #222; }\n  .ios ion-radio[aria-checked=true] radio-icon:after {\n    position: absolute;\n    border: 2px solid #387ef5;\n    top: 3px;\n    left: 7px;\n    width: 4px;\n    height: 10px;\n    border-left: none;\n    border-top: none;\n    content: '';\n    -webkit-transform: rotate(45deg);\n    transform: rotate(45deg); }\n  .ios ion-radio[aria-checked=true] {\n    color: #387ef5; }\n  .ios ion-radio.item.activated {\n    background-color: #fff; }\n  .ios media-radio {\n    display: block;\n    margin: 10px 8px 10px 8px; }\n  .ios radio-icon {\n    position: relative;\n    display: block;\n    width: 16px;\n    height: 21px; }\n  .ios ion-radio[secondary][aria-checked=true] radio-icon:after {\n    border-color: #32db64; }\n  .ios ion-radio[secondary][aria-checked=true] {\n    color: #32db64; }\n  .ios ion-radio[danger][aria-checked=true] radio-icon:after {\n    border-color: #f53d3d; }\n  .ios ion-radio[danger][aria-checked=true] {\n    color: #f53d3d; }\n  .ios ion-radio[light][aria-checked=true] radio-icon:after {\n    border-color: #f4f4f4; }\n  .ios ion-radio[light][aria-checked=true] {\n    color: #f4f4f4; }\n  .ios ion-radio[dark][aria-checked=true] radio-icon:after {\n    border-color: #222; }\n  .ios ion-radio[dark][aria-checked=true] {\n    color: #222; }\n  .ios ion-searchbar {\n    padding: 0 8px;\n    background: rgba(0, 0, 0, 0.2);\n    border-bottom: 1px solid rgba(0, 0, 0, 0.05);\n    min-height: 44px; }\n  .ios .searchbar-search-icon {\n    width: 14px;\n    height: 14px;\n    background-image: url(\"data:image/svg+xml;charset=utf-8,<svg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%2013%2013'><path%20fill='rgba(0,%200,%200,%200.5)'%20d='M5,1c2.2,0,4,1.8,4,4S7.2,9,5,9S1,7.2,1,5S2.8,1,5,1%20M5,0C2.2,0,0,2.2,0,5s2.2,5,5,5s5-2.2,5-5S7.8,0,5,0%20L5,0z'/><line%20stroke='rgba(0,%200,%200,%200.5)'%20stroke-miterlimit='10'%20x1='12.6'%20y1='12.6'%20x2='8.2'%20y2='8.2'/></svg>\");\n    background-size: 13px;\n    background-repeat: no-repeat;\n    position: absolute;\n    left: 9px;\n    top: 9px;\n    margin-left: calc(50% - 60px);\n    -webkit-transition: all 400ms cubic-bezier(0.25, 0.45, 0.05, 1);\n    transition: all 400ms cubic-bezier(0.25, 0.45, 0.05, 1); }\n  .ios .searchbar-input {\n    height: 28px;\n    padding: 0 28px;\n    font-size: 1.4rem;\n    font-weight: 400;\n    border-radius: 5px;\n    color: #000;\n    background-color: #FFFFFF;\n    background-position: 8px center;\n    padding-left: calc(50% - 28px);\n    -webkit-transition: all 400ms cubic-bezier(0.25, 0.45, 0.05, 1);\n    transition: all 400ms cubic-bezier(0.25, 0.45, 0.05, 1); }\n    .ios .searchbar-input::-moz-placeholder {\n      color: rgba(0, 0, 0, 0.5); }\n    .ios .searchbar-input:-ms-input-placeholder {\n      color: rgba(0, 0, 0, 0.5); }\n    .ios .searchbar-input::-webkit-input-placeholder {\n      color: rgba(0, 0, 0, 0.5);\n      text-indent: 0; }\n  .ios .searchbar-close-icon {\n    width: 30px;\n    height: 100%;\n    background-image: url(\"data:image/svg+xml;charset=utf-8,<svg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%20512%20512'><path%20fill='rgba(0,%200,%200,%200.5)'%20d='M403.1,108.9c-81.2-81.2-212.9-81.2-294.2,0s-81.2,212.9,0,294.2c81.2,81.2,212.9,81.2,294.2,0S484.3,190.1,403.1,108.9z%20M352,340.2L340.2,352l-84.4-84.2l-84,83.8L160,339.8l84-83.8l-84-83.8l11.8-11.8l84,83.8l84.4-84.2l11.8,11.8L267.6,256L352,340.2z'/></svg>\");\n    background-size: 18px;\n    background-repeat: no-repeat;\n    background-position: center;\n    position: absolute;\n    right: 0;\n    top: 0; }\n  .ios .searchbar-cancel {\n    -webkit-transition: all 400ms cubic-bezier(0.25, 0.45, 0.05, 1);\n    transition: all 400ms cubic-bezier(0.25, 0.45, 0.05, 1);\n    min-height: 30px;\n    margin-left: 0;\n    padding: 0;\n    visibility: hidden;\n    -webkit-transform: translateX(calc(100% + 8px));\n    transform: translateX(calc(100% + 8px));\n    -webkit-box-flex: 0;\n    -webkit-flex: 0 0 0%;\n    -ms-flex: 0 0 0%;\n    flex: 0 0 0%; }\n  .ios ion-searchbar.left-align .searchbar-search-icon {\n    margin-left: 0; }\n  .ios ion-searchbar.left-align .searchbar-input {\n    padding-left: 30px; }\n  .ios ion-searchbar.left-align .searchbar-cancel {\n    -webkit-transform: translateX(0);\n    transform: translateX(0);\n    -webkit-box-flex: 0;\n    -webkit-flex: 0 0 auto;\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    padding-left: 8px;\n    visibility: visible; }\n  .ios.hairlines ion-searchbar {\n    border-bottom-width: 0.55px; }\n  .ios .toolbar ion-searchbar {\n    background: transparent;\n    border-bottom-width: 0; }\n    .ios .toolbar ion-searchbar .searchbar-input {\n      background-color: rgba(0, 0, 0, 0.08); }\n    .ios .toolbar ion-searchbar .searchbar-cancel {\n      padding: 0; }\n  .ios .toolbar .left-align .searchbar-cancel {\n    padding-left: 8px; }\n  .ios .searchbar-cancel-icon {\n    display: none; }\n  .ios ion-searchbar[primary] .searchbar-cancel {\n    color: #387ef5; }\n  .ios ion-searchbar[secondary] .searchbar-cancel {\n    color: #32db64; }\n  .ios ion-searchbar[danger] .searchbar-cancel {\n    color: #f53d3d; }\n  .ios ion-searchbar[light] .searchbar-cancel {\n    color: #f4f4f4; }\n  .ios ion-searchbar[dark] .searchbar-cancel {\n    color: #222; }\n  .ios ion-segment button,\n  .ios ion-segment [button] {\n    border-width: 1px;\n    border-style: solid;\n    min-height: 3rem;\n    line-height: 3rem;\n    background-color: transparent;\n    color: white;\n    font-size: 1.3rem; }\n    .ios ion-segment button[outline],\n    .ios ion-segment [button][outline] {\n      border: 1px solid #387ef5;\n      background: transparent;\n      color: #387ef5; }\n      .ios ion-segment button[outline].segment-activated,\n      .ios ion-segment [button][outline].segment-activated {\n        opacity: 1;\n        color: white;\n        background-color: #387ef5;\n        -webkit-transition: 100ms all linear;\n        transition: 100ms all linear; }\n      .ios ion-segment button[outline]:hover:not(.segment-activated),\n      .ios ion-segment [button][outline]:hover:not(.segment-activated) {\n        background-color: rgba(56, 126, 245, 0.16); }\n    .ios ion-segment button:first-of-type,\n    .ios ion-segment [button]:first-of-type {\n      border-radius: 4px 0px 0px 4px;\n      margin-right: 0; }\n    .ios ion-segment button:not(:first-of-type),\n    .ios ion-segment [button]:not(:first-of-type) {\n      border-left-width: 0px; }\n    .ios ion-segment button:last-of-type,\n    .ios ion-segment [button]:last-of-type {\n      border-left-width: 0px;\n      border-radius: 0px 4px 4px 0px;\n      margin-left: 0; }\n  .ios .toolbar ion-segment {\n    position: absolute;\n    left: 0;\n    right: 0;\n    top: 0;\n    bottom: 0; }\n    .ios .toolbar ion-segment button,\n    .ios .toolbar ion-segment [button] {\n      max-width: 100px; }\n  .ios .toolbar[primary] ion-segment ion-segment-button[button] {\n    background-color: transparent; }\n    .ios .toolbar[primary] ion-segment ion-segment-button[button][outline] {\n      border-color: white;\n      background: transparent;\n      color: white; }\n      .ios .toolbar[primary] ion-segment ion-segment-button[button][outline].segment-activated {\n        opacity: 1;\n        color: #387ef5;\n        background-color: white; }\n      .ios .toolbar[primary] ion-segment ion-segment-button[button][outline]:hover:not(.segment-activated) {\n        background-color: rgba(255, 255, 255, 0.16); }\n  .ios .toolbar[primary] ion-segment[primary] ion-segment-button[button] {\n    background-color: transparent; }\n    .ios .toolbar[primary] ion-segment[primary] ion-segment-button[button][outline] {\n      border-color: #387ef5;\n      background: transparent;\n      color: #387ef5; }\n      .ios .toolbar[primary] ion-segment[primary] ion-segment-button[button][outline].segment-activated {\n        opacity: 1;\n        color: white;\n        background-color: #387ef5; }\n      .ios .toolbar[primary] ion-segment[primary] ion-segment-button[button][outline]:hover:not(.segment-activated) {\n        background-color: rgba(56, 126, 245, 0.16); }\n  .ios .toolbar[primary] ion-segment[secondary] ion-segment-button[button] {\n    background-color: transparent; }\n    .ios .toolbar[primary] ion-segment[secondary] ion-segment-button[button][outline] {\n      border-color: #32db64;\n      background: transparent;\n      color: #32db64; }\n      .ios .toolbar[primary] ion-segment[secondary] ion-segment-button[button][outline].segment-activated {\n        opacity: 1;\n        color: white;\n        background-color: #32db64; }\n      .ios .toolbar[primary] ion-segment[secondary] ion-segment-button[button][outline]:hover:not(.segment-activated) {\n        background-color: rgba(50, 219, 100, 0.16); }\n  .ios .toolbar[primary] ion-segment[danger] ion-segment-button[button] {\n    background-color: transparent; }\n    .ios .toolbar[primary] ion-segment[danger] ion-segment-button[button][outline] {\n      border-color: #f53d3d;\n      background: transparent;\n      color: #f53d3d; }\n      .ios .toolbar[primary] ion-segment[danger] ion-segment-button[button][outline].segment-activated {\n        opacity: 1;\n        color: white;\n        background-color: #f53d3d; }\n      .ios .toolbar[primary] ion-segment[danger] ion-segment-button[button][outline]:hover:not(.segment-activated) {\n        background-color: rgba(245, 61, 61, 0.16); }\n  .ios .toolbar[primary] ion-segment[light] ion-segment-button[button] {\n    background-color: transparent; }\n    .ios .toolbar[primary] ion-segment[light] ion-segment-button[button][outline] {\n      border-color: #f4f4f4;\n      background: transparent;\n      color: #f4f4f4; }\n      .ios .toolbar[primary] ion-segment[light] ion-segment-button[button][outline].segment-activated {\n        opacity: 1;\n        color: black;\n        background-color: #f4f4f4; }\n      .ios .toolbar[primary] ion-segment[light] ion-segment-button[button][outline]:hover:not(.segment-activated) {\n        background-color: rgba(244, 244, 244, 0.16); }\n  .ios .toolbar[primary] ion-segment[dark] ion-segment-button[button] {\n    background-color: transparent; }\n    .ios .toolbar[primary] ion-segment[dark] ion-segment-button[button][outline] {\n      border-color: #222;\n      background: transparent;\n      color: #222; }\n      .ios .toolbar[primary] ion-segment[dark] ion-segment-button[button][outline].segment-activated {\n        opacity: 1;\n        color: white;\n        background-color: #222; }\n      .ios .toolbar[primary] ion-segment[dark] ion-segment-button[button][outline]:hover:not(.segment-activated) {\n        background-color: rgba(34, 34, 34, 0.16); }\n  .ios ion-segment[primary] ion-segment-button[button] {\n    background-color: transparent; }\n    .ios ion-segment[primary] ion-segment-button[button][outline] {\n      border-color: #387ef5;\n      background: transparent;\n      color: #387ef5; }\n      .ios ion-segment[primary] ion-segment-button[button][outline].segment-activated {\n        opacity: 1;\n        color: white;\n        background-color: #387ef5; }\n      .ios ion-segment[primary] ion-segment-button[button][outline]:hover:not(.segment-activated) {\n        background-color: rgba(56, 126, 245, 0.16); }\n  .ios .toolbar[secondary] ion-segment ion-segment-button[button] {\n    background-color: transparent; }\n    .ios .toolbar[secondary] ion-segment ion-segment-button[button][outline] {\n      border-color: white;\n      background: transparent;\n      color: white; }\n      .ios .toolbar[secondary] ion-segment ion-segment-button[button][outline].segment-activated {\n        opacity: 1;\n        color: #32db64;\n        background-color: white; }\n      .ios .toolbar[secondary] ion-segment ion-segment-button[button][outline]:hover:not(.segment-activated) {\n        background-color: rgba(255, 255, 255, 0.16); }\n  .ios .toolbar[secondary] ion-segment[primary] ion-segment-button[button] {\n    background-color: transparent; }\n    .ios .toolbar[secondary] ion-segment[primary] ion-segment-button[button][outline] {\n      border-color: #387ef5;\n      background: transparent;\n      color: #387ef5; }\n      .ios .toolbar[secondary] ion-segment[primary] ion-segment-button[button][outline].segment-activated {\n        opacity: 1;\n        color: white;\n        background-color: #387ef5; }\n      .ios .toolbar[secondary] ion-segment[primary] ion-segment-button[button][outline]:hover:not(.segment-activated) {\n        background-color: rgba(56, 126, 245, 0.16); }\n  .ios .toolbar[secondary] ion-segment[secondary] ion-segment-button[button] {\n    background-color: transparent; }\n    .ios .toolbar[secondary] ion-segment[secondary] ion-segment-button[button][outline] {\n      border-color: #32db64;\n      background: transparent;\n      color: #32db64; }\n      .ios .toolbar[secondary] ion-segment[secondary] ion-segment-button[button][outline].segment-activated {\n        opacity: 1;\n        color: white;\n        background-color: #32db64; }\n      .ios .toolbar[secondary] ion-segment[secondary] ion-segment-button[button][outline]:hover:not(.segment-activated) {\n        background-color: rgba(50, 219, 100, 0.16); }\n  .ios .toolbar[secondary] ion-segment[danger] ion-segment-button[button] {\n    background-color: transparent; }\n    .ios .toolbar[secondary] ion-segment[danger] ion-segment-button[button][outline] {\n      border-color: #f53d3d;\n      background: transparent;\n      color: #f53d3d; }\n      .ios .toolbar[secondary] ion-segment[danger] ion-segment-button[button][outline].segment-activated {\n        opacity: 1;\n        color: white;\n        background-color: #f53d3d; }\n      .ios .toolbar[secondary] ion-segment[danger] ion-segment-button[button][outline]:hover:not(.segment-activated) {\n        background-color: rgba(245, 61, 61, 0.16); }\n  .ios .toolbar[secondary] ion-segment[light] ion-segment-button[button] {\n    background-color: transparent; }\n    .ios .toolbar[secondary] ion-segment[light] ion-segment-button[button][outline] {\n      border-color: #f4f4f4;\n      background: transparent;\n      color: #f4f4f4; }\n      .ios .toolbar[secondary] ion-segment[light] ion-segment-button[button][outline].segment-activated {\n        opacity: 1;\n        color: black;\n        background-color: #f4f4f4; }\n      .ios .toolbar[secondary] ion-segment[light] ion-segment-button[button][outline]:hover:not(.segment-activated) {\n        background-color: rgba(244, 244, 244, 0.16); }\n  .ios .toolbar[secondary] ion-segment[dark] ion-segment-button[button] {\n    background-color: transparent; }\n    .ios .toolbar[secondary] ion-segment[dark] ion-segment-button[button][outline] {\n      border-color: #222;\n      background: transparent;\n      color: #222; }\n      .ios .toolbar[secondary] ion-segment[dark] ion-segment-button[button][outline].segment-activated {\n        opacity: 1;\n        color: white;\n        background-color: #222; }\n      .ios .toolbar[secondary] ion-segment[dark] ion-segment-button[button][outline]:hover:not(.segment-activated) {\n        background-color: rgba(34, 34, 34, 0.16); }\n  .ios ion-segment[secondary] ion-segment-button[button] {\n    background-color: transparent; }\n    .ios ion-segment[secondary] ion-segment-button[button][outline] {\n      border-color: #32db64;\n      background: transparent;\n      color: #32db64; }\n      .ios ion-segment[secondary] ion-segment-button[button][outline].segment-activated {\n        opacity: 1;\n        color: white;\n        background-color: #32db64; }\n      .ios ion-segment[secondary] ion-segment-button[button][outline]:hover:not(.segment-activated) {\n        background-color: rgba(50, 219, 100, 0.16); }\n  .ios .toolbar[danger] ion-segment ion-segment-button[button] {\n    background-color: transparent; }\n    .ios .toolbar[danger] ion-segment ion-segment-button[button][outline] {\n      border-color: white;\n      background: transparent;\n      color: white; }\n      .ios .toolbar[danger] ion-segment ion-segment-button[button][outline].segment-activated {\n        opacity: 1;\n        color: #f53d3d;\n        background-color: white; }\n      .ios .toolbar[danger] ion-segment ion-segment-button[button][outline]:hover:not(.segment-activated) {\n        background-color: rgba(255, 255, 255, 0.16); }\n  .ios .toolbar[danger] ion-segment[primary] ion-segment-button[button] {\n    background-color: transparent; }\n    .ios .toolbar[danger] ion-segment[primary] ion-segment-button[button][outline] {\n      border-color: #387ef5;\n      background: transparent;\n      color: #387ef5; }\n      .ios .toolbar[danger] ion-segment[primary] ion-segment-button[button][outline].segment-activated {\n        opacity: 1;\n        color: white;\n        background-color: #387ef5; }\n      .ios .toolbar[danger] ion-segment[primary] ion-segment-button[button][outline]:hover:not(.segment-activated) {\n        background-color: rgba(56, 126, 245, 0.16); }\n  .ios .toolbar[danger] ion-segment[secondary] ion-segment-button[button] {\n    background-color: transparent; }\n    .ios .toolbar[danger] ion-segment[secondary] ion-segment-button[button][outline] {\n      border-color: #32db64;\n      background: transparent;\n      color: #32db64; }\n      .ios .toolbar[danger] ion-segment[secondary] ion-segment-button[button][outline].segment-activated {\n        opacity: 1;\n        color: white;\n        background-color: #32db64; }\n      .ios .toolbar[danger] ion-segment[secondary] ion-segment-button[button][outline]:hover:not(.segment-activated) {\n        background-color: rgba(50, 219, 100, 0.16); }\n  .ios .toolbar[danger] ion-segment[danger] ion-segment-button[button] {\n    background-color: transparent; }\n    .ios .toolbar[danger] ion-segment[danger] ion-segment-button[button][outline] {\n      border-color: #f53d3d;\n      background: transparent;\n      color: #f53d3d; }\n      .ios .toolbar[danger] ion-segment[danger] ion-segment-button[button][outline].segment-activated {\n        opacity: 1;\n        color: white;\n        background-color: #f53d3d; }\n      .ios .toolbar[danger] ion-segment[danger] ion-segment-button[button][outline]:hover:not(.segment-activated) {\n        background-color: rgba(245, 61, 61, 0.16); }\n  .ios .toolbar[danger] ion-segment[light] ion-segment-button[button] {\n    background-color: transparent; }\n    .ios .toolbar[danger] ion-segment[light] ion-segment-button[button][outline] {\n      border-color: #f4f4f4;\n      background: transparent;\n      color: #f4f4f4; }\n      .ios .toolbar[danger] ion-segment[light] ion-segment-button[button][outline].segment-activated {\n        opacity: 1;\n        color: black;\n        background-color: #f4f4f4; }\n      .ios .toolbar[danger] ion-segment[light] ion-segment-button[button][outline]:hover:not(.segment-activated) {\n        background-color: rgba(244, 244, 244, 0.16); }\n  .ios .toolbar[danger] ion-segment[dark] ion-segment-button[button] {\n    background-color: transparent; }\n    .ios .toolbar[danger] ion-segment[dark] ion-segment-button[button][outline] {\n      border-color: #222;\n      background: transparent;\n      color: #222; }\n      .ios .toolbar[danger] ion-segment[dark] ion-segment-button[button][outline].segment-activated {\n        opacity: 1;\n        color: white;\n        background-color: #222; }\n      .ios .toolbar[danger] ion-segment[dark] ion-segment-button[button][outline]:hover:not(.segment-activated) {\n        background-color: rgba(34, 34, 34, 0.16); }\n  .ios ion-segment[danger] ion-segment-button[button] {\n    background-color: transparent; }\n    .ios ion-segment[danger] ion-segment-button[button][outline] {\n      border-color: #f53d3d;\n      background: transparent;\n      color: #f53d3d; }\n      .ios ion-segment[danger] ion-segment-button[button][outline].segment-activated {\n        opacity: 1;\n        color: white;\n        background-color: #f53d3d; }\n      .ios ion-segment[danger] ion-segment-button[button][outline]:hover:not(.segment-activated) {\n        background-color: rgba(245, 61, 61, 0.16); }\n  .ios .toolbar[light] ion-segment ion-segment-button[button] {\n    background-color: transparent; }\n    .ios .toolbar[light] ion-segment ion-segment-button[button][outline] {\n      border-color: black;\n      background: transparent;\n      color: black; }\n      .ios .toolbar[light] ion-segment ion-segment-button[button][outline].segment-activated {\n        opacity: 1;\n        color: #f4f4f4;\n        background-color: black; }\n      .ios .toolbar[light] ion-segment ion-segment-button[button][outline]:hover:not(.segment-activated) {\n        background-color: rgba(0, 0, 0, 0.16); }\n  .ios .toolbar[light] ion-segment[primary] ion-segment-button[button] {\n    background-color: transparent; }\n    .ios .toolbar[light] ion-segment[primary] ion-segment-button[button][outline] {\n      border-color: #387ef5;\n      background: transparent;\n      color: #387ef5; }\n      .ios .toolbar[light] ion-segment[primary] ion-segment-button[button][outline].segment-activated {\n        opacity: 1;\n        color: white;\n        background-color: #387ef5; }\n      .ios .toolbar[light] ion-segment[primary] ion-segment-button[button][outline]:hover:not(.segment-activated) {\n        background-color: rgba(56, 126, 245, 0.16); }\n  .ios .toolbar[light] ion-segment[secondary] ion-segment-button[button] {\n    background-color: transparent; }\n    .ios .toolbar[light] ion-segment[secondary] ion-segment-button[button][outline] {\n      border-color: #32db64;\n      background: transparent;\n      color: #32db64; }\n      .ios .toolbar[light] ion-segment[secondary] ion-segment-button[button][outline].segment-activated {\n        opacity: 1;\n        color: white;\n        background-color: #32db64; }\n      .ios .toolbar[light] ion-segment[secondary] ion-segment-button[button][outline]:hover:not(.segment-activated) {\n        background-color: rgba(50, 219, 100, 0.16); }\n  .ios .toolbar[light] ion-segment[danger] ion-segment-button[button] {\n    background-color: transparent; }\n    .ios .toolbar[light] ion-segment[danger] ion-segment-button[button][outline] {\n      border-color: #f53d3d;\n      background: transparent;\n      color: #f53d3d; }\n      .ios .toolbar[light] ion-segment[danger] ion-segment-button[button][outline].segment-activated {\n        opacity: 1;\n        color: white;\n        background-color: #f53d3d; }\n      .ios .toolbar[light] ion-segment[danger] ion-segment-button[button][outline]:hover:not(.segment-activated) {\n        background-color: rgba(245, 61, 61, 0.16); }\n  .ios .toolbar[light] ion-segment[light] ion-segment-button[button] {\n    background-color: transparent; }\n    .ios .toolbar[light] ion-segment[light] ion-segment-button[button][outline] {\n      border-color: #f4f4f4;\n      background: transparent;\n      color: #f4f4f4; }\n      .ios .toolbar[light] ion-segment[light] ion-segment-button[button][outline].segment-activated {\n        opacity: 1;\n        color: black;\n        background-color: #f4f4f4; }\n      .ios .toolbar[light] ion-segment[light] ion-segment-button[button][outline]:hover:not(.segment-activated) {\n        background-color: rgba(244, 244, 244, 0.16); }\n  .ios .toolbar[light] ion-segment[dark] ion-segment-button[button] {\n    background-color: transparent; }\n    .ios .toolbar[light] ion-segment[dark] ion-segment-button[button][outline] {\n      border-color: #222;\n      background: transparent;\n      color: #222; }\n      .ios .toolbar[light] ion-segment[dark] ion-segment-button[button][outline].segment-activated {\n        opacity: 1;\n        color: white;\n        background-color: #222; }\n      .ios .toolbar[light] ion-segment[dark] ion-segment-button[button][outline]:hover:not(.segment-activated) {\n        background-color: rgba(34, 34, 34, 0.16); }\n  .ios ion-segment[light] ion-segment-button[button] {\n    background-color: transparent; }\n    .ios ion-segment[light] ion-segment-button[button][outline] {\n      border-color: #f4f4f4;\n      background: transparent;\n      color: #f4f4f4; }\n      .ios ion-segment[light] ion-segment-button[button][outline].segment-activated {\n        opacity: 1;\n        color: white;\n        background-color: #f4f4f4; }\n      .ios ion-segment[light] ion-segment-button[button][outline]:hover:not(.segment-activated) {\n        background-color: rgba(244, 244, 244, 0.16); }\n  .ios .toolbar[dark] ion-segment ion-segment-button[button] {\n    background-color: transparent; }\n    .ios .toolbar[dark] ion-segment ion-segment-button[button][outline] {\n      border-color: white;\n      background: transparent;\n      color: white; }\n      .ios .toolbar[dark] ion-segment ion-segment-button[button][outline].segment-activated {\n        opacity: 1;\n        color: #222;\n        background-color: white; }\n      .ios .toolbar[dark] ion-segment ion-segment-button[button][outline]:hover:not(.segment-activated) {\n        background-color: rgba(255, 255, 255, 0.16); }\n  .ios .toolbar[dark] ion-segment[primary] ion-segment-button[button] {\n    background-color: transparent; }\n    .ios .toolbar[dark] ion-segment[primary] ion-segment-button[button][outline] {\n      border-color: #387ef5;\n      background: transparent;\n      color: #387ef5; }\n      .ios .toolbar[dark] ion-segment[primary] ion-segment-button[button][outline].segment-activated {\n        opacity: 1;\n        color: white;\n        background-color: #387ef5; }\n      .ios .toolbar[dark] ion-segment[primary] ion-segment-button[button][outline]:hover:not(.segment-activated) {\n        background-color: rgba(56, 126, 245, 0.16); }\n  .ios .toolbar[dark] ion-segment[secondary] ion-segment-button[button] {\n    background-color: transparent; }\n    .ios .toolbar[dark] ion-segment[secondary] ion-segment-button[button][outline] {\n      border-color: #32db64;\n      background: transparent;\n      color: #32db64; }\n      .ios .toolbar[dark] ion-segment[secondary] ion-segment-button[button][outline].segment-activated {\n        opacity: 1;\n        color: white;\n        background-color: #32db64; }\n      .ios .toolbar[dark] ion-segment[secondary] ion-segment-button[button][outline]:hover:not(.segment-activated) {\n        background-color: rgba(50, 219, 100, 0.16); }\n  .ios .toolbar[dark] ion-segment[danger] ion-segment-button[button] {\n    background-color: transparent; }\n    .ios .toolbar[dark] ion-segment[danger] ion-segment-button[button][outline] {\n      border-color: #f53d3d;\n      background: transparent;\n      color: #f53d3d; }\n      .ios .toolbar[dark] ion-segment[danger] ion-segment-button[button][outline].segment-activated {\n        opacity: 1;\n        color: white;\n        background-color: #f53d3d; }\n      .ios .toolbar[dark] ion-segment[danger] ion-segment-button[button][outline]:hover:not(.segment-activated) {\n        background-color: rgba(245, 61, 61, 0.16); }\n  .ios .toolbar[dark] ion-segment[light] ion-segment-button[button] {\n    background-color: transparent; }\n    .ios .toolbar[dark] ion-segment[light] ion-segment-button[button][outline] {\n      border-color: #f4f4f4;\n      background: transparent;\n      color: #f4f4f4; }\n      .ios .toolbar[dark] ion-segment[light] ion-segment-button[button][outline].segment-activated {\n        opacity: 1;\n        color: black;\n        background-color: #f4f4f4; }\n      .ios .toolbar[dark] ion-segment[light] ion-segment-button[button][outline]:hover:not(.segment-activated) {\n        background-color: rgba(244, 244, 244, 0.16); }\n  .ios .toolbar[dark] ion-segment[dark] ion-segment-button[button] {\n    background-color: transparent; }\n    .ios .toolbar[dark] ion-segment[dark] ion-segment-button[button][outline] {\n      border-color: #222;\n      background: transparent;\n      color: #222; }\n      .ios .toolbar[dark] ion-segment[dark] ion-segment-button[button][outline].segment-activated {\n        opacity: 1;\n        color: white;\n        background-color: #222; }\n      .ios .toolbar[dark] ion-segment[dark] ion-segment-button[button][outline]:hover:not(.segment-activated) {\n        background-color: rgba(34, 34, 34, 0.16); }\n  .ios ion-segment[dark] ion-segment-button[button] {\n    background-color: transparent; }\n    .ios ion-segment[dark] ion-segment-button[button][outline] {\n      border-color: #222;\n      background: transparent;\n      color: #222; }\n      .ios ion-segment[dark] ion-segment-button[button][outline].segment-activated {\n        opacity: 1;\n        color: white;\n        background-color: #222; }\n      .ios ion-segment[dark] ion-segment-button[button][outline]:hover:not(.segment-activated) {\n        background-color: rgba(34, 34, 34, 0.16); }\n  .ios ion-switch.item.activated {\n    background: #fff; }\n  .ios ion-switch media-switch {\n    padding: 6px 8px 5px 16px; }\n  .ios ion-switch switch-icon {\n    position: relative;\n    display: block;\n    width: 51px;\n    height: 32px;\n    border-radius: 16px;\n    pointer-events: none;\n    background-color: #e6e6e6;\n    will-change: background-color;\n    -webkit-transition: background-color 300ms;\n    transition: background-color 300ms; }\n  .ios ion-switch[aria-checked=true] switch-icon {\n    background-color: #387ef5; }\n  .ios ion-switch switch-icon:before {\n    content: '';\n    position: absolute;\n    top: 2px;\n    right: 2px;\n    left: 2px;\n    bottom: 2px;\n    border-radius: 16px;\n    background-color: #fff;\n    will-change: transform;\n    -webkit-transform: scale3d(1, 1, 1);\n    transform: scale3d(1, 1, 1);\n    -webkit-transition: -webkit-transform 300ms;\n    transition: transform 300ms; }\n  .ios ion-switch[aria-checked=true] switch-icon:before,\n  .ios ion-switch .switch-activated switch-icon:before {\n    -webkit-transform: scale3d(0, 0, 0);\n    transform: scale3d(0, 0, 0); }\n  .ios ion-switch switch-icon:after {\n    content: '';\n    position: absolute;\n    top: 2px;\n    left: 2px;\n    width: 28px;\n    height: 28px;\n    border-radius: 14px;\n    background-color: #fff;\n    box-shadow: 0 3px 12px rgba(0, 0, 0, 0.16), 0 3px 1px rgba(0, 0, 0, 0.1);\n    will-change: transform, width, left;\n    -webkit-transition: -webkit-transform 300ms, width 120ms ease-in-out 80ms, left 110ms ease-in-out 80ms;\n    transition: transform 300ms, width 120ms ease-in-out 80ms, left 110ms ease-in-out 80ms; }\n  .ios ion-switch[aria-checked=true] switch-icon:after {\n    -webkit-transform: translate3d(19px, 0, 0);\n    transform: translate3d(19px, 0, 0); }\n  .ios ion-switch .switch-activated switch-icon:after {\n    width: 34px; }\n  .ios ion-switch[aria-checked=true] .switch-activated switch-icon:after {\n    left: -4px; }\n  .ios ion-switch[secondary][aria-checked=true] switch-icon {\n    background-color: #32db64; }\n  .ios ion-switch[danger][aria-checked=true] switch-icon {\n    background-color: #f53d3d; }\n  .ios ion-switch[light][aria-checked=true] switch-icon {\n    background-color: #f4f4f4; }\n  .ios ion-switch[dark][aria-checked=true] switch-icon {\n    background-color: #222; }\n  .ios tabbar {\n    border-top: 1px solid #b2b2b2; }\n  .ios ion-tabs[tabbar-placement=top] tabbar {\n    border-top: none;\n    border-bottom: 1px solid #b2b2b2; }\n  .ios .tab-button {\n    padding: 0px 10px;\n    min-height: 49px; }\n  .ios .tab-button-text {\n    margin-bottom: 0;\n    min-height: 11px;\n    font-size: 10px; }\n  .ios .has-title-only .tab-button-text {\n    font-size: 12px; }\n  .ios .tab-button-icon {\n    font-size: 32px;\n    height: 32px;\n    min-width: 37px; }\n    .ios .tab-button-icon:before {\n      vertical-align: top; }\n  .ios [tabbar-icons=right] .tab-button .tab-button-text,\n  .ios [tabbar-icons=left] .tab-button .tab-button-text {\n    font-size: 1.4rem;\n    line-height: 1.1;\n    margin-top: 0;\n    margin-bottom: 0; }\n  .ios [tabbar-icons=right] .tab-button icon,\n  .ios [tabbar-icons=left] .tab-button icon {\n    min-width: 24px;\n    height: 26px;\n    font-size: 24px; }\n  .ios [tabbar-icons=hide] .tab-button-text {\n    font-size: 1.4rem;\n    line-height: 1.1; }\n  .ios .tab-button.has-title-only {\n    min-height: 41px; }\n    .ios .tab-button.has-title-only .tab-button-text {\n      font-size: 1.4rem;\n      line-height: 1.1; }\n  .ios .tab-button.icon-only {\n    min-height: 41px; }\n  .ios.hairlines ion-tabs tabbar {\n    border-top-width: 0.55px; }\n  .ios.hairlines ion-tabs[tabbar-placement=\"top\"] tabbar {\n    border-bottom-width: 0.55px; }\n  .ios tabbar[primary] {\n    border-color: #0c60ee; }\n  .ios tabbar[secondary] {\n    border-color: #21b94e; }\n  .ios tabbar[danger] {\n    border-color: #f30c0c; }\n  .ios tabbar[light] {\n    border-color: #dbdbdb; }\n  .ios tabbar[dark] {\n    border-color: #090909; }\n  .ios.platform-cordova.platform-ios ion-navbar-section {\n    min-height: 6.4rem;\n    height: 6.4rem; }\n  .ios.platform-cordova.platform-ios ion-navbar ion-title,\n  .ios.platform-cordova.platform-ios ion-navbar ion-segment {\n    padding-top: 2rem; }\n  .ios.platform-cordova.platform-ios ion-navbar,\n  .ios.platform-cordova.platform-ios ion-app > ion-toolbar:first-child,\n  .ios.platform-cordova.platform-ios ion-app > ion-toolbar:first-child ion-title,\n  .ios.platform-cordova.platform-ios ion-app > ion-toolbar:first-child ion-segment,\n  .ios.platform-cordova.platform-ios ion-menu > ion-toolbar:first-child,\n  .ios.platform-cordova.platform-ios ion-menu > ion-toolbar:first-child ion-title,\n  .ios.platform-cordova.platform-ios ion-menu > ion-toolbar:first-child ion-segment,\n  .ios.platform-cordova.platform-ios ion-page.modal > ion-toolbar:first-child,\n  .ios.platform-cordova.platform-ios ion-page.modal > ion-toolbar:first-child ion-title,\n  .ios.platform-cordova.platform-ios ion-page.modal > ion-toolbar:first-child ion-segment {\n    min-height: 6.4rem;\n    height: 6.4rem;\n    padding-top: 2rem; }\n\n.md {\n  /*! Ionic: Material Design */\n  /****************/\n  /* DEFAULT LIST */\n  /****************/\n  /**************/\n  /* INSET LIST */\n  /**************/\n  /*****************/\n  /* NO LINES LIST */\n  /*****************/ }\n  .md hr {\n    border-width: 0;\n    height: 1px;\n    background-color: rgba(0, 0, 0, 0.08); }\n  .md .toolbar {\n    min-height: 5.6rem; }\n    .md .toolbar button,\n    .md .toolbar [button],\n    .md .toolbar button.activated,\n    .md .toolbar [button].activated {\n      margin-top: 0;\n      margin-bottom: 0;\n      padding: 0 5px;\n      min-height: 32px;\n      box-shadow: none;\n      overflow: visible; }\n    .md .toolbar button.icon-only,\n    .md .toolbar [button].icon-only {\n      padding-right: 0;\n      padding-left: 0; }\n    .md .toolbar button icon,\n    .md .toolbar [button] icon {\n      padding: 0;\n      min-width: 28px; }\n    .md .toolbar [menu-toggle],\n    .md .toolbar [menu-toggle].activated {\n      padding: 0 2px;\n      min-width: 44px; }\n      .md .toolbar [menu-toggle] icon,\n      .md .toolbar [menu-toggle].activated icon {\n        font-size: 2.4rem; }\n    .md .toolbar [menu-toggle][secondary],\n    .md .toolbar [menu-toggle][secondary].activated {\n      margin: 0 2px;\n      min-width: 28px; }\n  .md ion-title {\n    padding: 0 12px;\n    font-size: 2rem;\n    font-weight: 500; }\n  .md ion-nav-items[primary] button:first-child {\n    margin-left: 0; }\n  .md ion-action-sheet {\n    margin: 0; }\n  .md .action-sheet-container {\n    margin: 0; }\n  .md .action-sheet-title,\n  .md .action-sheet-option,\n  .md .action-sheet-destructive,\n  .md .action-sheet-cancel button {\n    text-align: left;\n    border-color: transparent;\n    font-size: 1.6rem;\n    color: #222;\n    box-shadow: none;\n    text-transform: none; }\n  .md ion-action-sheet icon {\n    display: inline-block;\n    margin: 0 28px 0 0;\n    min-width: 24px;\n    text-align: center;\n    vertical-align: middle;\n    font-size: 2.4rem; }\n  .md .action-sheet-title {\n    padding: 1.9rem 1.6rem 1.7rem;\n    font-size: 1.6rem;\n    color: #757575; }\n  .md ion-action-sheet button {\n    font-weight: normal;\n    min-height: 4.8rem; }\n    .md ion-action-sheet button.activated {\n      background: #f1f1f1;\n      border-radius: 0;\n      box-shadow: none; }\n  .md .action-sheet-group {\n    margin: 0;\n    border-radius: 0;\n    background-color: #fafafa; }\n    .md .action-sheet-group:last-child button {\n      margin-bottom: 8px; }\n  .md .action-sheet-cancel {\n    background-color: #fafafa;\n    width: auto;\n    border: none; }\n  .md button,\n  .md [button] {\n    border-radius: 2px;\n    min-height: 3.6rem;\n    padding: 0 1.1em;\n    text-transform: uppercase;\n    font-weight: 500;\n    font-size: 1.4rem;\n    box-shadow: 0 2px 2px 0 rgba(0, 0, 0, 0.14), 0 3px 1px -2px rgba(0, 0, 0, 0.2), 0 1px 5px 0 rgba(0, 0, 0, 0.12);\n    -webkit-transition: box-shadow 300ms cubic-bezier(0.4, 0, 0.2, 1), background-color 300ms cubic-bezier(0.4, 0, 0.2, 1), color 300ms cubic-bezier(0.4, 0, 0.2, 1);\n    transition: box-shadow 300ms cubic-bezier(0.4, 0, 0.2, 1), background-color 300ms cubic-bezier(0.4, 0, 0.2, 1), color 300ms cubic-bezier(0.4, 0, 0.2, 1); }\n    .md button:hover:not(.disable-hover),\n    .md [button]:hover:not(.disable-hover) {\n      background-color: rgba(158, 158, 158, 0.1); }\n    .md button[full],\n    .md [button][full] {\n      border-radius: 0; }\n    .md button[round],\n    .md [button][round] {\n      border-radius: 64px;\n      padding: 0 2.6rem; }\n    .md button[large],\n    .md [button][large] {\n      padding: 0 1em;\n      min-height: 2.8em;\n      font-size: 2rem; }\n    .md button[small],\n    .md [button][small] {\n      padding: 0 0.9em;\n      min-height: 2.1em;\n      font-size: 1.3rem; }\n    .md button.activated,\n    .md [button].activated {\n      box-shadow: 0 3px 5px rgba(0, 0, 0, 0.14), 0 3px 5px rgba(0, 0, 0, 0.21); }\n    .md button[fab],\n    .md [button][fab] {\n      border-radius: 50%;\n      box-shadow: 0 4px 6px 0 rgba(0, 0, 0, 0.14), 0 4px 5px rgba(0, 0, 0, 0.1); }\n      .md button[fab].activated,\n      .md [button][fab].activated {\n        box-shadow: 0 5px 15px 0 rgba(0, 0, 0, 0.4), 0 4px 7px 0 rgba(0, 0, 0, 0.1); }\n    .md button.icon-only,\n    .md [button].icon-only {\n      padding: 0; }\n    .md button[outline],\n    .md [button][outline] {\n      box-shadow: none; }\n      .md button[outline].activated,\n      .md [button][outline].activated {\n        opacity: 1; }\n      .md button[outline] md-ripple,\n      .md [button][outline] md-ripple {\n        background: rgba(56, 126, 245, 0.1); }\n    .md button[clear], .ios .popup-buttons .md button, .md .ios .searchbar-cancel, .ios .md .searchbar-cancel, .md .popup-buttons button,\n    .md [button][clear] {\n      opacity: 1;\n      box-shadow: none; }\n      .md button[clear].activated, .ios .popup-buttons .md button.activated, .md .ios .activated.searchbar-cancel, .ios .md .activated.searchbar-cancel, .md .popup-buttons button.activated,\n      .md [button][clear].activated {\n        background-color: rgba(158, 158, 158, 0.2); }\n  .md button[secondary].activated,\n  .md [button][secondary].activated {\n    opacity: 1; }\n  .md button[secondary][outline] md-ripple,\n  .md [button][secondary][outline] md-ripple {\n    background: rgba(50, 219, 100, 0.2); }\n  .md button[secondary][outline].activated,\n  .md [button][secondary][outline].activated {\n    opacity: 1; }\n    .md button[secondary][outline].activated md-ripple,\n    .md [button][secondary][outline].activated md-ripple {\n      background: rgba(0, 0, 0, 0.1); }\n  .md button[danger].activated,\n  .md [button][danger].activated {\n    opacity: 1; }\n  .md button[danger][outline] md-ripple,\n  .md [button][danger][outline] md-ripple {\n    background: rgba(245, 61, 61, 0.2); }\n  .md button[danger][outline].activated,\n  .md [button][danger][outline].activated {\n    opacity: 1; }\n    .md button[danger][outline].activated md-ripple,\n    .md [button][danger][outline].activated md-ripple {\n      background: rgba(0, 0, 0, 0.1); }\n  .md button[light].activated,\n  .md [button][light].activated {\n    opacity: 1; }\n  .md button[light][outline] md-ripple,\n  .md [button][light][outline] md-ripple {\n    background: rgba(244, 244, 244, 0.2); }\n  .md button[light][outline].activated,\n  .md [button][light][outline].activated {\n    opacity: 1; }\n    .md button[light][outline].activated md-ripple,\n    .md [button][light][outline].activated md-ripple {\n      background: rgba(0, 0, 0, 0.1); }\n  .md button[dark].activated,\n  .md [button][dark].activated {\n    opacity: 1; }\n  .md button[dark][outline] md-ripple,\n  .md [button][dark][outline] md-ripple {\n    background: rgba(34, 34, 34, 0.2); }\n  .md button[dark][outline].activated,\n  .md [button][dark][outline].activated {\n    opacity: 1; }\n    .md button[dark][outline].activated md-ripple,\n    .md [button][dark][outline].activated md-ripple {\n      background: rgba(0, 0, 0, 0.1); }\n  .md [padding],\n  .md [padding] > scroll-content {\n    padding: 16px; }\n  .md [padding-top] {\n    padding-top: 16px; }\n  .md [padding-right] {\n    padding-right: 16px; }\n  .md [padding-bottom] {\n    padding-bottom: 16px; }\n  .md [padding-left] {\n    padding-left: 16px; }\n  .md [padding-vertical] {\n    padding-top: 16px;\n    padding-bottom: 16px; }\n  .md [padding-horizontal] {\n    padding-right: 16px;\n    padding-left: 16px; }\n  .md ion-item-divider {\n    padding: 13px 16px 13px 16px;\n    background-color: #fff;\n    color: #222; }\n  .md ion-note {\n    color: #c4c4c4; }\n  .md .item {\n    position: relative;\n    padding-right: 0;\n    padding-left: 16px;\n    font-size: 1.6rem;\n    text-transform: none;\n    font-weight: normal;\n    box-shadow: none; }\n    .md .item h1 {\n      margin: 0 0 2px;\n      font-size: 2.4rem;\n      font-weight: normal; }\n    .md .item h2 {\n      margin: 2px 0 2px;\n      font-size: 1.6rem;\n      font-weight: normal; }\n    .md .item h3,\n    .md .item h4,\n    .md .item h5,\n    .md .item h6 {\n      line-height: normal;\n      margin: 2px 0 2px;\n      font-size: 1.4rem;\n      font-weight: normal; }\n    .md .item p {\n      line-height: normal;\n      color: #666;\n      font-size: 1.4rem;\n      margin: 0 0 2px; }\n  .md .item-inner {\n    border-bottom: 1px solid #dedede;\n    padding-right: 8px; }\n  .md ion-item-content {\n    margin: 13px 8px 13px 0; }\n  .md button.item.activated {\n    box-shadow: none; }\n  .md [item-left],\n  .md [item-right] {\n    margin: 9px 8px 9px 0; }\n  .md icon[item-left],\n  .md icon[item-right] {\n    margin-top: 11px;\n    margin-left: 0;\n    margin-bottom: 10px; }\n  .md button[item-left],\n  .md button[item-right],\n  .md [button][item-left],\n  .md [button][item-right] {\n    padding: 0 0.6em;\n    min-height: 26px;\n    font-size: 1.2rem; }\n  .md [item-left].icon-only,\n  .md [item-right].icon-only,\n  .md [item-left].icon-only icon,\n  .md [item-right].icon-only icon {\n    padding: 0 1px; }\n  .md [item-left][clear],\n  .md [item-right][clear] {\n    padding: 0 8px; }\n  .md [item-left].icon-left icon,\n  .md [item-right].icon-left icon {\n    margin-left: 0;\n    margin-bottom: 1px;\n    padding-right: 0.3em; }\n  .md [item-left].icon-right icon,\n  .md [item-right].icon-right icon {\n    margin-right: 0;\n    margin-bottom: 1px; }\n  .md [text-wrap] ion-item-content {\n    font-size: 1.4rem;\n    line-height: 1.5; }\n  .md icon[item-left] + .item-inner,\n  .md icon[item-left] + [text-input] {\n    margin-left: 24px; }\n  .md ion-avatar[item-left],\n  .md ion-thumbnail[item-left] {\n    margin: 8px 16px 8px 0; }\n  .md ion-avatar[item-right],\n  .md ion-thumbnail[item-right] {\n    margin: 8px; }\n  .md ion-avatar {\n    min-width: 4rem;\n    min-height: 4rem; }\n    .md ion-avatar img {\n      max-width: 4rem;\n      max-height: 4rem;\n      border-radius: 2rem; }\n  .md ion-thumbnail {\n    min-width: 8rem;\n    min-height: 8rem; }\n    .md ion-thumbnail img {\n      max-width: 8rem;\n      max-height: 8rem; }\n  .md .item,\n  .md a.item,\n  .md button.item {\n    -webkit-transition: background-color 300ms cubic-bezier(0.4, 0, 0.2, 1), -webkit-transform 300ms;\n    transition: background-color 300ms cubic-bezier(0.4, 0, 0.2, 1), transform 300ms; }\n  .md .item.activated,\n  .md a.item.activated,\n  .md button.item.activated {\n    background-color: #f1f1f1;\n    box-shadow: none; }\n  .md .item[no-lines] {\n    border-width: 0; }\n  .md ion-list-header,\n  .md ion-item-divider {\n    border-bottom: 1px solid #dedede;\n    margin-left: 0;\n    padding: 16px 16px 16px 16px;\n    font-size: 1.4rem;\n    color: #858585; }\n  .md ion-list {\n    margin: 0 0 16px 0; }\n    .md ion-list .item-inner {\n      border-bottom: 1px solid #dedede; }\n    .md ion-list > .item:first-child,\n    .md ion-list > ion-item-sliding:first-child .item {\n      border-top: 1px solid #dedede; }\n    .md ion-list > .item:last-child,\n    .md ion-list > ion-item-sliding:last-child .item {\n      border-bottom: 1px solid #dedede; }\n      .md ion-list > .item:last-child .item-inner,\n      .md ion-list > .item:last-child ion-item-content,\n      .md ion-list > ion-item-sliding:last-child .item .item-inner,\n      .md ion-list > ion-item-sliding:last-child .item ion-item-content {\n        border-bottom: none; }\n    .md ion-list > ion-input:last-child:after {\n      left: 0; }\n    .md ion-list ion-item-options button, .md ion-list ion-item-options [button] {\n      height: calc(100% - 2px);\n      margin: 1px 0 1px 0;\n      box-shadow: none;\n      border: none;\n      border-radius: 0;\n      display: -webkit-inline-box;\n      display: -webkit-inline-flex;\n      display: -ms-inline-flexbox;\n      display: inline-flex;\n      -webkit-box-align: center;\n      -webkit-align-items: center;\n      -ms-flex-align: center;\n      align-items: center;\n      box-sizing: border-box; }\n      .md ion-list ion-item-options button:before, .md ion-list ion-item-options [button]:before {\n        margin: 0 auto; }\n    .md ion-list .item[no-lines],\n    .md ion-list .item[no-lines] .item-inner {\n      border-width: 0; }\n    .md ion-list + ion-list {\n      margin-top: 32px; }\n      .md ion-list + ion-list ion-list-header {\n        margin-top: -16px;\n        padding-top: 0; }\n  .md ion-list[inset] {\n    margin: 16px 16px 16px 16px;\n    border-radius: 2px; }\n    .md ion-list[inset] .item:first-child {\n      border-top-width: 0;\n      border-top-right-radius: 2px;\n      border-top-left-radius: 2px; }\n    .md ion-list[inset] .item:last-child {\n      border-bottom-width: 0;\n      border-bottom-right-radius: 2px;\n      border-bottom-left-radius: 2px; }\n    .md ion-list[inset] ion-input.item {\n      padding-right: 0;\n      padding-left: 0; }\n      .md ion-list[inset] ion-input.item:after {\n        left: 0; }\n    .md ion-list[inset] + ion-list[inset] {\n      margin-top: 0; }\n  .md ion-list[no-lines] .item,\n  .md ion-list[no-lines] .item .item-inner {\n    border-width: 0; }\n  .md ion-card {\n    margin: 10px 10px 10px 10px;\n    font-size: 1.4rem;\n    background: #fff;\n    box-shadow: 0 2px 2px 0 rgba(0, 0, 0, 0.14), 0 3px 1px -2px rgba(0, 0, 0, 0.2), 0 1px 5px 0 rgba(0, 0, 0, 0.12);\n    border-radius: 2px; }\n    .md ion-card ion-list {\n      margin-bottom: 0; }\n      .md ion-card ion-list ion-item-content {\n        padding: 0; }\n      .md ion-card ion-list .item-inner {\n        border-bottom: 1px solid #dedede; }\n      .md ion-card ion-list > .item:last-child,\n      .md ion-card ion-list > ion-item-sliding:last-child .item {\n        border-bottom: none; }\n    .md ion-card .item {\n      font-size: 1.6rem; }\n    .md ion-card .item-inner {\n      border: none; }\n    .md ion-card ion-card-content {\n      padding: 13px 16px 13px 16px;\n      font-size: 1.4rem;\n      line-height: 1.5; }\n    .md ion-card ion-card-header {\n      padding: 16px;\n      font-size: 1.6rem;\n      color: #222; }\n    .md ion-card ion-card-header + ion-card-content,\n    .md ion-card .item + ion-card-content {\n      padding-top: 0; }\n    .md ion-card ion-note[item-left],\n    .md ion-card ion-note[item-right] {\n      font-size: 1.3rem; }\n    .md ion-card .card-title {\n      padding: 8px 0 8px 0;\n      font-size: 2.4rem;\n      color: #222; }\n    .md ion-card h1 {\n      margin: 0 0 2px;\n      font-size: 2.4rem;\n      font-weight: normal;\n      color: #222; }\n    .md ion-card h2 {\n      margin: 2px 0 2px;\n      font-size: 1.6rem;\n      font-weight: normal;\n      color: #222; }\n    .md ion-card h3,\n    .md ion-card h4,\n    .md ion-card h5,\n    .md ion-card h6 {\n      margin: 2px 0 2px;\n      font-size: 1.4rem;\n      font-weight: normal;\n      color: #222; }\n    .md ion-card p {\n      font-size: 1.4rem;\n      margin: 0 0 2px;\n      line-height: 1.5;\n      font-weight: normal;\n      color: #222; }\n  .md ion-card + ion-card {\n    margin-top: 0; }\n  .md ion-checkbox.item .item-inner {\n    border: none;\n    padding-right: 0; }\n  .md ion-checkbox ion-item-content {\n    border-bottom: 1px solid #dedede;\n    margin: 0;\n    padding: 13px 8px 13px 0; }\n  .md ion-checkbox[aria-checked=true] checkbox-icon {\n    background-color: #387ef5;\n    border-color: #387ef5; }\n  .md ion-checkbox[aria-checked=true] checkbox-icon:after {\n    position: absolute;\n    border: 2px solid #fff;\n    top: 0;\n    left: 3px;\n    width: 4px;\n    height: 9px;\n    border-left: none;\n    border-top: none;\n    content: '';\n    -webkit-transform: rotate(45deg);\n    transform: rotate(45deg); }\n  .md media-checkbox {\n    display: block;\n    margin: 9px 36px 9px 4px; }\n  .md checkbox-icon {\n    position: relative;\n    display: block;\n    width: 16px;\n    height: 16px;\n    border-radius: 2px;\n    border: 2px solid #787878;\n    background-color: #fff; }\n  .md ion-checkbox[secondary][aria-checked=true] checkbox-icon {\n    background-color: #32db64;\n    border-color: #32db64; }\n  .md ion-checkbox[danger][aria-checked=true] checkbox-icon {\n    background-color: #f53d3d;\n    border-color: #f53d3d; }\n  .md ion-checkbox[light][aria-checked=true] checkbox-icon {\n    background-color: #f4f4f4;\n    border-color: #f4f4f4; }\n  .md ion-checkbox[dark][aria-checked=true] checkbox-icon {\n    background-color: #222;\n    border-color: #222; }\n  .md [text-input] {\n    margin: 13px 8px 13px 8px;\n    padding: 0; }\n  .md ion-input[inset] [text-input] {\n    margin: 6.5px 16px 6.5px 16px;\n    padding: 6.5px 8px 6.5px 8px; }\n  .md ion-label {\n    margin: 13px 8px 13px 8px;\n    color: #999; }\n  .md ion-input:after {\n    position: absolute;\n    bottom: 0;\n    right: 0;\n    left: 16px;\n    border-bottom: 2px solid transparent;\n    content: ''; }\n  .md ion-input.has-focus:after {\n    border-bottom: 2px solid #387ef5; }\n  .md ion-input.ng-valid.has-value:after {\n    border-bottom: 2px solid #32db64; }\n  .md ion-input.ng-invalid.ng-touched:after {\n    border-bottom: 2px solid #f53d3d; }\n  .md [stacked-label] ion-label {\n    font-size: 1.2rem;\n    margin-bottom: 0; }\n  .md [stacked-label] ion-label,\n  .md [floating-label] ion-label {\n    margin-left: 0; }\n  .md [stacked-label].has-focus ion-label,\n  .md [floating-label].has-focus ion-label {\n    color: #387ef5; }\n  .md [stacked-label] [text-input],\n  .md [floating-label] [text-input] {\n    margin-bottom: 8px;\n    margin-top: 8px;\n    margin-left: 0; }\n  .md [floating-label] ion-label {\n    margin-bottom: 0;\n    -webkit-transform-origin: left top;\n    transform-origin: left top;\n    -webkit-transform: translate3d(0, 27px, 0);\n    transform: translate3d(0, 27px, 0);\n    -webkit-transition: -webkit-transform 150ms ease-in-out;\n    transition: transform 150ms ease-in-out; }\n  .md [floating-label].has-focus ion-label,\n  .md [floating-label].has-value ion-label {\n    -webkit-transform: translate3d(0, 0, 0) scale(0.8);\n    transform: translate3d(0, 0, 0) scale(0.8); }\n  .md ion-navbar-section {\n    min-height: 5.6rem; }\n  .md .toolbar .back-button {\n    margin: 0 0 0 12px;\n    box-shadow: none; }\n  .md .toolbar .back-button-icon {\n    margin: 0;\n    min-width: 44px;\n    font-size: 2.4rem;\n    font-weight: normal;\n    text-align: left; }\n  .md ion-popup popup-wrapper {\n    max-width: 280px;\n    border-radius: 2px;\n    background-color: #fafafa;\n    box-shadow: 0px 16px 20px rgba(0, 0, 0, 0.4); }\n  .md .popup-head {\n    text-align: left;\n    padding: 24px 24px 10px 24px; }\n  .md .popup-title {\n    font-size: 20px; }\n  .md .popup-sub-title {\n    font-size: 15px; }\n  .md .popup-body {\n    padding: 10px 24px 24px 24px;\n    color: rgba(0, 0, 0, 0.5); }\n  .md .prompt-input {\n    border-bottom: 1px solid #dedede;\n    color: #000000;\n    margin: 5px 0 5px 0; }\n    .md .prompt-input:focus {\n      border-bottom: 2px solid #387ef5;\n      margin-bottom: 4px; }\n  .md .popup-buttons {\n    padding: 8px 8px 8px 24px;\n    -webkit-box-pack: end;\n    -webkit-justify-content: flex-end;\n    -ms-flex-pack: end;\n    justify-content: flex-end; }\n    .md .popup-buttons button {\n      min-height: 36px; }\n      .md .popup-buttons button.activated {\n        opacity: 1; }\n  .md ion-radio radio-icon {\n    position: relative;\n    top: 0;\n    left: 0;\n    display: block;\n    width: 16px;\n    height: 16px;\n    margin: 0;\n    border: 2px solid #787878;\n    border-radius: 50%; }\n  .md ion-radio[aria-checked=true] radio-icon {\n    border-color: #387ef5; }\n  .md ion-radio radio-icon:after {\n    position: absolute;\n    top: 2px;\n    left: 2px;\n    width: 8px;\n    height: 8px;\n    background: #387ef5;\n    border-radius: 50%;\n    content: '';\n    -webkit-transition: -webkit-transform 280ms cubic-bezier(0.4, 0, 0.2, 1);\n    transition: transform 280ms cubic-bezier(0.4, 0, 0.2, 1);\n    -webkit-transform: scale3d(0, 0, 0);\n    transform: scale3d(0, 0, 0); }\n  .md ion-radio[aria-checked=true] radio-icon:after {\n    -webkit-transform: scale3d(1, 1, 1);\n    transform: scale3d(1, 1, 1); }\n  .md ion-radio[aria-checked=true] {\n    color: #387ef5; }\n  .md media-radio {\n    display: block;\n    margin: 9px 8px 9px 8px; }\n  .md ion-radio[secondary][aria-checked=true] radio-icon {\n    border-color: #32db64; }\n  .md ion-radio[secondary][aria-checked=true] radio-icon:after {\n    background: #32db64; }\n  .md ion-radio[secondary][aria-checked=true] {\n    color: #32db64; }\n  .md ion-radio[danger][aria-checked=true] radio-icon {\n    border-color: #f53d3d; }\n  .md ion-radio[danger][aria-checked=true] radio-icon:after {\n    background: #f53d3d; }\n  .md ion-radio[danger][aria-checked=true] {\n    color: #f53d3d; }\n  .md ion-radio[light][aria-checked=true] radio-icon {\n    border-color: #f4f4f4; }\n  .md ion-radio[light][aria-checked=true] radio-icon:after {\n    background: #f4f4f4; }\n  .md ion-radio[light][aria-checked=true] {\n    color: #f4f4f4; }\n  .md ion-radio[dark][aria-checked=true] radio-icon {\n    border-color: #222; }\n  .md ion-radio[dark][aria-checked=true] radio-icon:after {\n    background: #222; }\n  .md ion-radio[dark][aria-checked=true] {\n    color: #222; }\n  .md ion-searchbar {\n    padding: 8px;\n    background: inherit; }\n  .md .searchbar-search-icon,\n  .md button.searchbar-cancel-icon {\n    width: 21px;\n    height: 21px;\n    background-size: 20px;\n    background-repeat: no-repeat;\n    position: absolute; }\n    .md .searchbar-search-icon.activated,\n    .md button.searchbar-cancel-icon.activated {\n      background-color: transparent; }\n  .md .searchbar-search-icon {\n    top: 11px;\n    left: 16px;\n    background-image: url(\"data:image/svg+xml;charset=utf-8,<svg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%20512%20512'><path%20fill='#5B5B5B'%20d='M337.509,305.372h-17.501l-6.571-5.486c20.791-25.232,33.922-57.054,33.922-93.257C347.358,127.632,283.896,64,205.135,64C127.452,64,64,127.632,64,206.629s63.452,142.628,142.225,142.628c35.011,0,67.831-13.167,92.991-34.008l6.561,5.487v17.551L415.18,448L448,415.086L337.509,305.372z%20M206.225,305.372c-54.702,0-98.463-43.887-98.463-98.743c0-54.858,43.761-98.742,98.463-98.742c54.7,0,98.462,43.884,98.462,98.742C304.687,261.485,260.925,305.372,206.225,305.372z'/></svg>\"); }\n  .md button.searchbar-cancel-icon {\n    display: none;\n    height: 100%;\n    margin: 0;\n    top: 0;\n    left: 10px; }\n  .md .searchbar-input {\n    padding: 6px 55px;\n    height: 28px;\n    box-shadow: 0 2px 2px 0 rgba(0, 0, 0, 0.14), 0 3px 1px -2px rgba(0, 0, 0, 0.2), 0 1px 5px 0 rgba(0, 0, 0, 0.12);\n    font-size: 1.6rem;\n    font-weight: 400;\n    border-radius: 2px;\n    color: #141414;\n    background-color: #FFFFFF;\n    background-position: 8px center; }\n    .md .searchbar-input::-moz-placeholder {\n      color: #AEAEAE; }\n    .md .searchbar-input:-ms-input-placeholder {\n      color: #AEAEAE; }\n    .md .searchbar-input::-webkit-input-placeholder {\n      color: #AEAEAE;\n      text-indent: 0; }\n  .md button.searchbar-close-icon {\n    width: 22px;\n    height: 100%;\n    padding: 0;\n    background-image: url(\"data:image/svg+xml;charset=utf-8,<svg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%20512%20512'><polygon%20fill='#5B5B5B'%20points='405,136.798%20375.202,107%20256,226.202%20136.798,107%20107,136.798%20226.202,256%20107,375.202%20136.798,405%20256,285.798%20375.202,405%20405,375.202%20285.798,256'/></svg>\");\n    background-size: 22px;\n    background-repeat: no-repeat;\n    background-position: center;\n    position: absolute;\n    right: 13px;\n    top: 0; }\n    .md button.searchbar-close-icon.activated {\n      background-color: transparent; }\n  .md .searchbar-cancel {\n    display: none; }\n  .md .focused .searchbar-search-icon {\n    display: none; }\n  .md .focused button.searchbar-cancel-icon {\n    display: -webkit-inline-box;\n    display: -webkit-inline-flex;\n    display: -ms-inline-flexbox;\n    display: inline-flex; }\n  .md .toolbar ion-searchbar {\n    padding: 3px; }\n  .md .toolbar button.searchbar-cancel-icon {\n    left: 14px; }\n  .md ion-segment button,\n  .md ion-segment [button] {\n    border-width: 0;\n    -webkit-transition: 100ms all linear;\n    transition: 100ms all linear;\n    font-size: 1.2rem;\n    opacity: 0.7;\n    min-height: 4rem;\n    line-height: 4rem;\n    border-radius: 0;\n    border-bottom: 2px solid rgba(0, 0, 0, 0.1); }\n    .md ion-segment button.activated, .md ion-segment button.segment-activated,\n    .md ion-segment [button].activated,\n    .md ion-segment [button].segment-activated {\n      color: #387ef5;\n      background-color: transparent;\n      border-color: #387ef5; }\n  .md .toolbar ion-segment {\n    margin: 0 auto; }\n    .md .toolbar ion-segment ion-segment-button[button][outline].activated,\n    .md .toolbar ion-segment ion-segment-button[button][outline].segment-activated {\n      background-color: transparent;\n      opacity: 1; }\n  .md .toolbar[primary] ion-segment ion-segment-button[button] {\n    background-color: transparent; }\n    .md .toolbar[primary] ion-segment ion-segment-button[button][outline] {\n      color: white; }\n      .md .toolbar[primary] ion-segment ion-segment-button[button][outline].activated, .md .toolbar[primary] ion-segment ion-segment-button[button][outline].segment-activated {\n        background-color: transparent;\n        color: white;\n        border-color: white;\n        opacity: 1; }\n  .md .toolbar[primary] ion-segment[primary] ion-segment-button[button] {\n    background-color: transparent; }\n    .md .toolbar[primary] ion-segment[primary] ion-segment-button[button][outline] {\n      color: #387ef5; }\n      .md .toolbar[primary] ion-segment[primary] ion-segment-button[button][outline].activated, .md .toolbar[primary] ion-segment[primary] ion-segment-button[button][outline].segment-activated {\n        background-color: transparent;\n        color: #387ef5;\n        border-color: #387ef5;\n        opacity: 1; }\n  .md .toolbar[primary] ion-segment[secondary] ion-segment-button[button] {\n    background-color: transparent; }\n    .md .toolbar[primary] ion-segment[secondary] ion-segment-button[button][outline] {\n      color: #32db64; }\n      .md .toolbar[primary] ion-segment[secondary] ion-segment-button[button][outline].activated, .md .toolbar[primary] ion-segment[secondary] ion-segment-button[button][outline].segment-activated {\n        background-color: transparent;\n        color: #32db64;\n        border-color: #32db64;\n        opacity: 1; }\n  .md .toolbar[primary] ion-segment[danger] ion-segment-button[button] {\n    background-color: transparent; }\n    .md .toolbar[primary] ion-segment[danger] ion-segment-button[button][outline] {\n      color: #f53d3d; }\n      .md .toolbar[primary] ion-segment[danger] ion-segment-button[button][outline].activated, .md .toolbar[primary] ion-segment[danger] ion-segment-button[button][outline].segment-activated {\n        background-color: transparent;\n        color: #f53d3d;\n        border-color: #f53d3d;\n        opacity: 1; }\n  .md .toolbar[primary] ion-segment[light] ion-segment-button[button] {\n    background-color: transparent; }\n    .md .toolbar[primary] ion-segment[light] ion-segment-button[button][outline] {\n      color: #f4f4f4; }\n      .md .toolbar[primary] ion-segment[light] ion-segment-button[button][outline].activated, .md .toolbar[primary] ion-segment[light] ion-segment-button[button][outline].segment-activated {\n        background-color: transparent;\n        color: #f4f4f4;\n        border-color: #f4f4f4;\n        opacity: 1; }\n  .md .toolbar[primary] ion-segment[dark] ion-segment-button[button] {\n    background-color: transparent; }\n    .md .toolbar[primary] ion-segment[dark] ion-segment-button[button][outline] {\n      color: #222; }\n      .md .toolbar[primary] ion-segment[dark] ion-segment-button[button][outline].activated, .md .toolbar[primary] ion-segment[dark] ion-segment-button[button][outline].segment-activated {\n        background-color: transparent;\n        color: #222;\n        border-color: #222;\n        opacity: 1; }\n  .md ion-segment[primary] ion-segment-button[button] {\n    background-color: transparent; }\n    .md ion-segment[primary] ion-segment-button[button][outline] {\n      color: #387ef5; }\n      .md ion-segment[primary] ion-segment-button[button][outline].activated, .md ion-segment[primary] ion-segment-button[button][outline].segment-activated {\n        background-color: transparent;\n        color: #387ef5;\n        border-color: #387ef5;\n        opacity: 1; }\n  .md .toolbar[secondary] ion-segment ion-segment-button[button] {\n    background-color: transparent; }\n    .md .toolbar[secondary] ion-segment ion-segment-button[button][outline] {\n      color: white; }\n      .md .toolbar[secondary] ion-segment ion-segment-button[button][outline].activated, .md .toolbar[secondary] ion-segment ion-segment-button[button][outline].segment-activated {\n        background-color: transparent;\n        color: white;\n        border-color: white;\n        opacity: 1; }\n  .md .toolbar[secondary] ion-segment[primary] ion-segment-button[button] {\n    background-color: transparent; }\n    .md .toolbar[secondary] ion-segment[primary] ion-segment-button[button][outline] {\n      color: #387ef5; }\n      .md .toolbar[secondary] ion-segment[primary] ion-segment-button[button][outline].activated, .md .toolbar[secondary] ion-segment[primary] ion-segment-button[button][outline].segment-activated {\n        background-color: transparent;\n        color: #387ef5;\n        border-color: #387ef5;\n        opacity: 1; }\n  .md .toolbar[secondary] ion-segment[secondary] ion-segment-button[button] {\n    background-color: transparent; }\n    .md .toolbar[secondary] ion-segment[secondary] ion-segment-button[button][outline] {\n      color: #32db64; }\n      .md .toolbar[secondary] ion-segment[secondary] ion-segment-button[button][outline].activated, .md .toolbar[secondary] ion-segment[secondary] ion-segment-button[button][outline].segment-activated {\n        background-color: transparent;\n        color: #32db64;\n        border-color: #32db64;\n        opacity: 1; }\n  .md .toolbar[secondary] ion-segment[danger] ion-segment-button[button] {\n    background-color: transparent; }\n    .md .toolbar[secondary] ion-segment[danger] ion-segment-button[button][outline] {\n      color: #f53d3d; }\n      .md .toolbar[secondary] ion-segment[danger] ion-segment-button[button][outline].activated, .md .toolbar[secondary] ion-segment[danger] ion-segment-button[button][outline].segment-activated {\n        background-color: transparent;\n        color: #f53d3d;\n        border-color: #f53d3d;\n        opacity: 1; }\n  .md .toolbar[secondary] ion-segment[light] ion-segment-button[button] {\n    background-color: transparent; }\n    .md .toolbar[secondary] ion-segment[light] ion-segment-button[button][outline] {\n      color: #f4f4f4; }\n      .md .toolbar[secondary] ion-segment[light] ion-segment-button[button][outline].activated, .md .toolbar[secondary] ion-segment[light] ion-segment-button[button][outline].segment-activated {\n        background-color: transparent;\n        color: #f4f4f4;\n        border-color: #f4f4f4;\n        opacity: 1; }\n  .md .toolbar[secondary] ion-segment[dark] ion-segment-button[button] {\n    background-color: transparent; }\n    .md .toolbar[secondary] ion-segment[dark] ion-segment-button[button][outline] {\n      color: #222; }\n      .md .toolbar[secondary] ion-segment[dark] ion-segment-button[button][outline].activated, .md .toolbar[secondary] ion-segment[dark] ion-segment-button[button][outline].segment-activated {\n        background-color: transparent;\n        color: #222;\n        border-color: #222;\n        opacity: 1; }\n  .md ion-segment[secondary] ion-segment-button[button] {\n    background-color: transparent; }\n    .md ion-segment[secondary] ion-segment-button[button][outline] {\n      color: #32db64; }\n      .md ion-segment[secondary] ion-segment-button[button][outline].activated, .md ion-segment[secondary] ion-segment-button[button][outline].segment-activated {\n        background-color: transparent;\n        color: #32db64;\n        border-color: #32db64;\n        opacity: 1; }\n  .md .toolbar[danger] ion-segment ion-segment-button[button] {\n    background-color: transparent; }\n    .md .toolbar[danger] ion-segment ion-segment-button[button][outline] {\n      color: white; }\n      .md .toolbar[danger] ion-segment ion-segment-button[button][outline].activated, .md .toolbar[danger] ion-segment ion-segment-button[button][outline].segment-activated {\n        background-color: transparent;\n        color: white;\n        border-color: white;\n        opacity: 1; }\n  .md .toolbar[danger] ion-segment[primary] ion-segment-button[button] {\n    background-color: transparent; }\n    .md .toolbar[danger] ion-segment[primary] ion-segment-button[button][outline] {\n      color: #387ef5; }\n      .md .toolbar[danger] ion-segment[primary] ion-segment-button[button][outline].activated, .md .toolbar[danger] ion-segment[primary] ion-segment-button[button][outline].segment-activated {\n        background-color: transparent;\n        color: #387ef5;\n        border-color: #387ef5;\n        opacity: 1; }\n  .md .toolbar[danger] ion-segment[secondary] ion-segment-button[button] {\n    background-color: transparent; }\n    .md .toolbar[danger] ion-segment[secondary] ion-segment-button[button][outline] {\n      color: #32db64; }\n      .md .toolbar[danger] ion-segment[secondary] ion-segment-button[button][outline].activated, .md .toolbar[danger] ion-segment[secondary] ion-segment-button[button][outline].segment-activated {\n        background-color: transparent;\n        color: #32db64;\n        border-color: #32db64;\n        opacity: 1; }\n  .md .toolbar[danger] ion-segment[danger] ion-segment-button[button] {\n    background-color: transparent; }\n    .md .toolbar[danger] ion-segment[danger] ion-segment-button[button][outline] {\n      color: #f53d3d; }\n      .md .toolbar[danger] ion-segment[danger] ion-segment-button[button][outline].activated, .md .toolbar[danger] ion-segment[danger] ion-segment-button[button][outline].segment-activated {\n        background-color: transparent;\n        color: #f53d3d;\n        border-color: #f53d3d;\n        opacity: 1; }\n  .md .toolbar[danger] ion-segment[light] ion-segment-button[button] {\n    background-color: transparent; }\n    .md .toolbar[danger] ion-segment[light] ion-segment-button[button][outline] {\n      color: #f4f4f4; }\n      .md .toolbar[danger] ion-segment[light] ion-segment-button[button][outline].activated, .md .toolbar[danger] ion-segment[light] ion-segment-button[button][outline].segment-activated {\n        background-color: transparent;\n        color: #f4f4f4;\n        border-color: #f4f4f4;\n        opacity: 1; }\n  .md .toolbar[danger] ion-segment[dark] ion-segment-button[button] {\n    background-color: transparent; }\n    .md .toolbar[danger] ion-segment[dark] ion-segment-button[button][outline] {\n      color: #222; }\n      .md .toolbar[danger] ion-segment[dark] ion-segment-button[button][outline].activated, .md .toolbar[danger] ion-segment[dark] ion-segment-button[button][outline].segment-activated {\n        background-color: transparent;\n        color: #222;\n        border-color: #222;\n        opacity: 1; }\n  .md ion-segment[danger] ion-segment-button[button] {\n    background-color: transparent; }\n    .md ion-segment[danger] ion-segment-button[button][outline] {\n      color: #f53d3d; }\n      .md ion-segment[danger] ion-segment-button[button][outline].activated, .md ion-segment[danger] ion-segment-button[button][outline].segment-activated {\n        background-color: transparent;\n        color: #f53d3d;\n        border-color: #f53d3d;\n        opacity: 1; }\n  .md .toolbar[light] ion-segment ion-segment-button[button] {\n    background-color: transparent; }\n    .md .toolbar[light] ion-segment ion-segment-button[button][outline] {\n      color: black; }\n      .md .toolbar[light] ion-segment ion-segment-button[button][outline].activated, .md .toolbar[light] ion-segment ion-segment-button[button][outline].segment-activated {\n        background-color: transparent;\n        color: black;\n        border-color: black;\n        opacity: 1; }\n  .md .toolbar[light] ion-segment[primary] ion-segment-button[button] {\n    background-color: transparent; }\n    .md .toolbar[light] ion-segment[primary] ion-segment-button[button][outline] {\n      color: #387ef5; }\n      .md .toolbar[light] ion-segment[primary] ion-segment-button[button][outline].activated, .md .toolbar[light] ion-segment[primary] ion-segment-button[button][outline].segment-activated {\n        background-color: transparent;\n        color: #387ef5;\n        border-color: #387ef5;\n        opacity: 1; }\n  .md .toolbar[light] ion-segment[secondary] ion-segment-button[button] {\n    background-color: transparent; }\n    .md .toolbar[light] ion-segment[secondary] ion-segment-button[button][outline] {\n      color: #32db64; }\n      .md .toolbar[light] ion-segment[secondary] ion-segment-button[button][outline].activated, .md .toolbar[light] ion-segment[secondary] ion-segment-button[button][outline].segment-activated {\n        background-color: transparent;\n        color: #32db64;\n        border-color: #32db64;\n        opacity: 1; }\n  .md .toolbar[light] ion-segment[danger] ion-segment-button[button] {\n    background-color: transparent; }\n    .md .toolbar[light] ion-segment[danger] ion-segment-button[button][outline] {\n      color: #f53d3d; }\n      .md .toolbar[light] ion-segment[danger] ion-segment-button[button][outline].activated, .md .toolbar[light] ion-segment[danger] ion-segment-button[button][outline].segment-activated {\n        background-color: transparent;\n        color: #f53d3d;\n        border-color: #f53d3d;\n        opacity: 1; }\n  .md .toolbar[light] ion-segment[light] ion-segment-button[button] {\n    background-color: transparent; }\n    .md .toolbar[light] ion-segment[light] ion-segment-button[button][outline] {\n      color: #f4f4f4; }\n      .md .toolbar[light] ion-segment[light] ion-segment-button[button][outline].activated, .md .toolbar[light] ion-segment[light] ion-segment-button[button][outline].segment-activated {\n        background-color: transparent;\n        color: #f4f4f4;\n        border-color: #f4f4f4;\n        opacity: 1; }\n  .md .toolbar[light] ion-segment[dark] ion-segment-button[button] {\n    background-color: transparent; }\n    .md .toolbar[light] ion-segment[dark] ion-segment-button[button][outline] {\n      color: #222; }\n      .md .toolbar[light] ion-segment[dark] ion-segment-button[button][outline].activated, .md .toolbar[light] ion-segment[dark] ion-segment-button[button][outline].segment-activated {\n        background-color: transparent;\n        color: #222;\n        border-color: #222;\n        opacity: 1; }\n  .md ion-segment[light] ion-segment-button[button] {\n    background-color: transparent; }\n    .md ion-segment[light] ion-segment-button[button][outline] {\n      color: #f4f4f4; }\n      .md ion-segment[light] ion-segment-button[button][outline].activated, .md ion-segment[light] ion-segment-button[button][outline].segment-activated {\n        background-color: transparent;\n        color: #f4f4f4;\n        border-color: #f4f4f4;\n        opacity: 1; }\n  .md .toolbar[dark] ion-segment ion-segment-button[button] {\n    background-color: transparent; }\n    .md .toolbar[dark] ion-segment ion-segment-button[button][outline] {\n      color: white; }\n      .md .toolbar[dark] ion-segment ion-segment-button[button][outline].activated, .md .toolbar[dark] ion-segment ion-segment-button[button][outline].segment-activated {\n        background-color: transparent;\n        color: white;\n        border-color: white;\n        opacity: 1; }\n  .md .toolbar[dark] ion-segment[primary] ion-segment-button[button] {\n    background-color: transparent; }\n    .md .toolbar[dark] ion-segment[primary] ion-segment-button[button][outline] {\n      color: #387ef5; }\n      .md .toolbar[dark] ion-segment[primary] ion-segment-button[button][outline].activated, .md .toolbar[dark] ion-segment[primary] ion-segment-button[button][outline].segment-activated {\n        background-color: transparent;\n        color: #387ef5;\n        border-color: #387ef5;\n        opacity: 1; }\n  .md .toolbar[dark] ion-segment[secondary] ion-segment-button[button] {\n    background-color: transparent; }\n    .md .toolbar[dark] ion-segment[secondary] ion-segment-button[button][outline] {\n      color: #32db64; }\n      .md .toolbar[dark] ion-segment[secondary] ion-segment-button[button][outline].activated, .md .toolbar[dark] ion-segment[secondary] ion-segment-button[button][outline].segment-activated {\n        background-color: transparent;\n        color: #32db64;\n        border-color: #32db64;\n        opacity: 1; }\n  .md .toolbar[dark] ion-segment[danger] ion-segment-button[button] {\n    background-color: transparent; }\n    .md .toolbar[dark] ion-segment[danger] ion-segment-button[button][outline] {\n      color: #f53d3d; }\n      .md .toolbar[dark] ion-segment[danger] ion-segment-button[button][outline].activated, .md .toolbar[dark] ion-segment[danger] ion-segment-button[button][outline].segment-activated {\n        background-color: transparent;\n        color: #f53d3d;\n        border-color: #f53d3d;\n        opacity: 1; }\n  .md .toolbar[dark] ion-segment[light] ion-segment-button[button] {\n    background-color: transparent; }\n    .md .toolbar[dark] ion-segment[light] ion-segment-button[button][outline] {\n      color: #f4f4f4; }\n      .md .toolbar[dark] ion-segment[light] ion-segment-button[button][outline].activated, .md .toolbar[dark] ion-segment[light] ion-segment-button[button][outline].segment-activated {\n        background-color: transparent;\n        color: #f4f4f4;\n        border-color: #f4f4f4;\n        opacity: 1; }\n  .md .toolbar[dark] ion-segment[dark] ion-segment-button[button] {\n    background-color: transparent; }\n    .md .toolbar[dark] ion-segment[dark] ion-segment-button[button][outline] {\n      color: #222; }\n      .md .toolbar[dark] ion-segment[dark] ion-segment-button[button][outline].activated, .md .toolbar[dark] ion-segment[dark] ion-segment-button[button][outline].segment-activated {\n        background-color: transparent;\n        color: #222;\n        border-color: #222;\n        opacity: 1; }\n  .md ion-segment[dark] ion-segment-button[button] {\n    background-color: transparent; }\n    .md ion-segment[dark] ion-segment-button[button][outline] {\n      color: #222; }\n      .md ion-segment[dark] ion-segment-button[button][outline].activated, .md ion-segment[dark] ion-segment-button[button][outline].segment-activated {\n        background-color: transparent;\n        color: #222;\n        border-color: #222;\n        opacity: 1; }\n  .md ion-switch media-switch {\n    padding: 12px 8px 12px 16px; }\n  .md ion-switch switch-icon {\n    position: relative;\n    display: block;\n    width: 36px;\n    height: 14px;\n    pointer-events: none;\n    border-radius: 14px;\n    background-color: #dedede;\n    will-change: background-color;\n    -webkit-transition: background-color 300ms;\n    transition: background-color 300ms; }\n  .md ion-switch[aria-checked=true] switch-icon {\n    background-color: #b1cdfb; }\n  .md ion-switch switch-icon:after {\n    content: '';\n    position: absolute;\n    top: -3px;\n    left: 0;\n    width: 20px;\n    height: 20px;\n    border-radius: 50%;\n    box-shadow: 0 2px 2px 0 rgba(0, 0, 0, 0.14), 0 3px 1px -2px rgba(0, 0, 0, 0.2), 0 1px 5px 0 rgba(0, 0, 0, 0.12);\n    background-color: #fff;\n    will-change: transform, background-color;\n    -webkit-transition-property: -webkit-transform, background-color;\n    transition-property: transform, background-color;\n    -webkit-transition-duration: 300ms;\n    transition-duration: 300ms; }\n  .md ion-switch[aria-checked=true] switch-icon:after {\n    background-color: #387ef5;\n    -webkit-transform: translate3d(16px, 0, 0);\n    transform: translate3d(16px, 0, 0); }\n  .md ion-switch[secondary][aria-checked=true] switch-icon {\n    background-color: #9eeeb6; }\n  .md ion-switch[secondary][aria-checked=true] switch-icon:after {\n    background-color: #32db64; }\n  .md ion-switch[danger][aria-checked=true] switch-icon {\n    background-color: #fbb6b6; }\n  .md ion-switch[danger][aria-checked=true] switch-icon:after {\n    background-color: #f53d3d; }\n  .md ion-switch[light][aria-checked=true] switch-icon {\n    background-color: white; }\n  .md ion-switch[light][aria-checked=true] switch-icon:after {\n    background-color: #f4f4f4; }\n  .md ion-switch[dark][aria-checked=true] switch-icon {\n    background-color: #626262; }\n  .md ion-switch[dark][aria-checked=true] switch-icon:after {\n    background-color: #222; }\n  .md .tab-button {\n    padding: 12px 10px 5px 10px;\n    min-height: 4.8rem;\n    font-size: 1.4rem;\n    font-weight: 500;\n    opacity: 0.7;\n    box-shadow: none;\n    border-radius: 0;\n    border-bottom: 2px solid transparent; }\n    .md .tab-button[aria-selected=true] {\n      opacity: 1.0; }\n  .md .tab-button-text {\n    margin-top: 5px;\n    margin-bottom: 5px;\n    text-transform: uppercase; }\n  .md .tab-button-icon {\n    font-size: 2.4rem;\n    min-width: 7.4rem; }\n  .md [tabbar-icons=bottom] .tab-button {\n    padding-top: 8px;\n    padding-bottom: 8px; }\n  .md [tabbar-icons=right] .tab-button,\n  .md [tabbar-icons=left] .tab-button {\n    padding-bottom: 10px; }\n    .md [tabbar-icons=right] .tab-button icon,\n    .md [tabbar-icons=left] .tab-button icon {\n      min-width: 24px; }\n  .md .tab-button.icon-only,\n  .md .tab-button.has-title-only {\n    padding: 6px 10px 6px 10px; }\n  .md tab-highlight {\n    position: absolute;\n    display: block;\n    height: 2px;\n    width: 1px;\n    bottom: 0;\n    left: 0;\n    background: #387ef5;\n    -webkit-transform-origin: 0 0;\n    transform-origin: 0 0;\n    -webkit-transform: translateZ(0);\n    transform: translateZ(0); }\n    .md tab-highlight.animate {\n      -webkit-transition-duration: 300ms;\n      transition-duration: 300ms; }\n  .md [tabbar-placement=bottom] tab-highlight {\n    top: 0; }\n  .md tabbar[primary] tab-highlight {\n    background: white; }\n  .md tabbar[secondary] tab-highlight {\n    background: white; }\n  .md tabbar[danger] tab-highlight {\n    background: white; }\n  .md tabbar[light] tab-highlight {\n    background: black; }\n  .md tabbar[dark] tab-highlight {\n    background: white; }\n  .md md-ripple {\n    position: absolute;\n    z-index: 0;\n    display: block;\n    border-radius: 50%;\n    background: rgba(0, 0, 0, 0.1);\n    overflow: hidden;\n    pointer-events: none;\n    -webkit-transform: scale(0.001) translateZ(0);\n    transform: scale(0.001) translateZ(0); }\n\n/**\n  Roboto Font\n  Google\n  Apache License, version 2.0\n  http://www.apache.org/licenses/LICENSE-2.0.html\n */\n@font-face {\n  font-family: 'Roboto';\n  font-style: normal;\n  font-weight: 300;\n  src: local(\"Roboto Light\"), local(\"Roboto-Light\"), url(\"../fonts/roboto-light.ttf\") format(\"truetype\"), url(\"../fonts/roboto-light.woff\") format(\"woff\"); }\n\n@font-face {\n  font-family: 'Roboto';\n  font-style: normal;\n  font-weight: 400;\n  src: local(\"Roboto\"), local(\"Roboto-Regular\"), url(\"../fonts/roboto-regular.ttf\") format(\"truetype\"), url(\"../fonts/roboto-regular.woff\") format(\"woff\"); }\n\n@font-face {\n  font-family: 'Roboto';\n  font-style: normal;\n  font-weight: 500;\n  src: local(\"Roboto Medium\"), local(\"Roboto-Medium\"), url(\"../fonts/roboto-medium.ttf\") format(\"truetype\"), url(\"../fonts/roboto-medium.woff\") format(\"woff\"); }\n\n@font-face {\n  font-family: 'Roboto';\n  font-style: normal;\n  font-weight: 700;\n  src: local(\"Roboto Bold\"), local(\"Roboto-Bold\"), url(\"../fonts/roboto-bold.ttf\") format(\"truetype\"), url(\"../fonts/roboto-bold.woff\") format(\"woff\"); }\n\n.md {\n  font-family: \"Roboto\", \"Helvetica Neue\", sans-serif; }\n"
  },
  {
    "path": "content/css/v2-demos/ionic.css",
    "content": "@charset \"UTF-8\";\n/*! normalize.css v3.0.2 | MIT License | github.com/necolas/normalize.css */\naudio,\ncanvas,\nprogress,\nvideo {\n  vertical-align: baseline; }\n\naudio:not([controls]) {\n  display: none;\n  height: 0; }\n\nb,\nstrong {\n  font-weight: bold; }\n\nimg {\n  border: 0;\n  max-width: 100%; }\n\nsvg:not(:root) {\n  overflow: hidden; }\n\nfigure {\n  margin: 1em 40px; }\n\nhr {\n  box-sizing: content-box;\n  height: 1px;\n  border-width: 0; }\n\npre {\n  overflow: auto; }\n\ncode,\nkbd,\npre,\nsamp {\n  font-family: monospace, monospace;\n  font-size: 1em; }\n\nlabel,\ninput,\nselect,\ntextarea {\n  line-height: normal;\n  font-family: inherit; }\n\nform,\ninput,\noptgroup,\nselect {\n  color: inherit;\n  font: inherit;\n  margin: 0; }\n\nhtml input[type=\"button\"],\ninput[type=\"reset\"],\ninput[type=\"submit\"] {\n  -webkit-appearance: button;\n  cursor: pointer; }\n\nbutton {\n  border: 0;\n  line-height: 1;\n  font-family: inherit;\n  font-variant: inherit;\n  font-style: inherit;\n  text-transform: none;\n  -webkit-appearance: button;\n  cursor: pointer; }\n\na[disabled],\nbutton[disabled]\nhtml input[disabled] {\n  cursor: default; }\n\nbutton::-moz-focus-inner,\ninput::-moz-focus-inner {\n  border: 0;\n  padding: 0; }\n\ninput[type=\"checkbox\"],\ninput[type=\"radio\"] {\n  box-sizing: border-box;\n  padding: 0; }\n\ninput[type=\"number\"]::-webkit-inner-spin-button,\ninput[type=\"number\"]::-webkit-outer-spin-button {\n  height: auto; }\n\ninput[type=\"search\"]::-webkit-search-cancel-button,\ninput[type=\"search\"]::-webkit-search-decoration {\n  -webkit-appearance: none; }\n\ntable {\n  border-collapse: collapse;\n  border-spacing: 0; }\n\ntd,\nth {\n  padding: 0; }\n\n* {\n  box-sizing: border-box;\n  -webkit-tap-highlight-color: transparent;\n  -webkit-tap-highlight-color: transparent;\n  -webkit-touch-callout: none; }\n\nhtml {\n  width: 100%;\n  height: 100%;\n  -ms-text-size-adjust: 100%;\n  -webkit-text-size-adjust: 100%; }\n\nbody {\n  position: fixed;\n  overflow: hidden;\n  width: 100%;\n  height: 100%;\n  max-width: 100%;\n  max-height: 100%;\n  margin: 0;\n  padding: 0;\n  word-wrap: break-word;\n  -ms-touch-action: manipulation;\n  touch-action: manipulation;\n  -webkit-user-drag: none;\n  -ms-content-zooming: none;\n  -webkit-font-smoothing: antialiased;\n  font-smoothing: antialiased;\n  text-rendering: optimizeLegibility;\n  -webkit-text-size-adjust: none;\n  -ms-text-size-adjust: none;\n  text-size-adjust: none;\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  -ms-user-select: none;\n  user-select: none; }\n\nion-app,\nion-nav,\nion-tabs {\n  display: -webkit-box;\n  display: -webkit-flex;\n  display: -ms-flexbox;\n  display: flex;\n  -webkit-box-orient: vertical;\n  -webkit-box-direction: normal;\n  -webkit-flex-direction: column;\n  -ms-flex-direction: column;\n  flex-direction: column;\n  position: absolute;\n  top: 0;\n  left: 0;\n  width: 100%;\n  height: 100%;\n  overflow: hidden; }\n\nion-navbar-section {\n  display: block;\n  width: 100%;\n  min-height: 50px; }\n\nion-content-section {\n  display: block;\n  -webkit-box-flex: 1;\n  -webkit-flex: 1;\n  -ms-flex: 1;\n  flex: 1;\n  position: relative;\n  width: 100%;\n  height: 100%; }\n\nion-page {\n  display: none;\n  -webkit-box-orient: vertical;\n  -webkit-box-direction: normal;\n  -webkit-flex-direction: column;\n  -ms-flex-direction: column;\n  flex-direction: column;\n  position: absolute;\n  top: 0;\n  left: 0;\n  width: 100%;\n  height: 100%;\n  -webkit-transform: translateZ(0);\n  transform: translateZ(0); }\n  ion-page.show-page {\n    display: -webkit-box;\n    display: -webkit-flex;\n    display: -ms-flexbox;\n    display: flex; }\n\nion-content {\n  position: relative;\n  display: block;\n  width: 100%;\n  height: 100%;\n  -webkit-box-flex: 1;\n  -webkit-flex: 1;\n  -ms-flex: 1;\n  flex: 1; }\n\nscroll-content {\n  position: absolute;\n  top: 0;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  display: block;\n  overflow-y: scroll;\n  overflow-x: hidden;\n  -webkit-overflow-scrolling: touch;\n  will-change: scroll-position; }\n\nion-tabbar {\n  display: block;\n  position: absolute;\n  top: 0;\n  left: 0;\n  width: 100%;\n  min-height: 50px; }\n\nion-tab-section {\n  display: block;\n  position: relative;\n  top: 0;\n  left: 0;\n  width: 100%;\n  height: 100%;\n  overflow: hidden; }\n\nion-page.tab-subpage {\n  position: fixed;\n  z-index: 10; }\n\nion-navbar {\n  display: block;\n  position: absolute;\n  top: 0;\n  left: 0;\n  width: 100%;\n  min-height: 50px;\n  z-index: 10; }\n\nion-navbar-section ion-navbar.toolbar {\n  position: absolute; }\n\nion-toolbar {\n  display: block;\n  width: 100%; }\n\nion-toolbar[position=bottom] {\n  bottom: 0;\n  z-index: 10; }\n\n.sticky {\n  position: -webkit-sticky;\n  position: sticky;\n  top: 0; }\n\nhtml {\n  font-size: 62.5%; }\n\na {\n  background-color: transparent; }\n\n.enable-hover a:hover {\n  opacity: 0.7; }\n\nh1, h2, h3, h4, h5, h6 {\n  font-weight: 500;\n  line-height: 1.2;\n  margin-top: 1.6rem;\n  margin-bottom: 1rem; }\n\n[padding] h1:first-child, [padding] h2:first-child, [padding] h3:first-child, [padding] h4:first-child, [padding] h5:first-child, [padding] h6:first-child {\n  margin-top: -0.3rem; }\n\nh1 + h2,\nh1 + h3,\nh2 + h3 {\n  margin-top: -0.3rem; }\n\nh1 {\n  font-size: 2.6rem;\n  margin-top: 2rem; }\n\nh2 {\n  font-size: 2.4rem;\n  margin-top: 1.8rem; }\n\nh3 {\n  font-size: 2.2rem; }\n\nh4 {\n  font-size: 2rem; }\n\nh5 {\n  font-size: 1.8rem; }\n\nh6 {\n  font-size: 1.6rem; }\n\nsmall {\n  font-size: 75%; }\n\nsub,\nsup {\n  font-size: 75%;\n  line-height: 0;\n  position: relative;\n  vertical-align: baseline; }\n\nsup {\n  top: -0.5em; }\n\nsub {\n  bottom: -0.25em; }\n\n.align-left {\n  text-align: left; }\n\n.align-center {\n  text-align: center; }\n\n.align-right {\n  text-align: right; }\n\n.no-transition {\n  -webkit-transition: none !important;\n  transition: none !important; }\n\n.hide,\n[hidden],\ntemplate,\nroot-anchor {\n  display: none !important; }\n\n[padding],\n[padding] > scroll-content {\n  padding: 16px; }\n\n[padding-top] {\n  padding-top: 16px; }\n\n[padding-right] {\n  padding-right: 16px; }\n\n[padding-bottom] {\n  padding-bottom: 16px; }\n\n[padding-left] {\n  padding-left: 16px; }\n\n[padding-vertical] {\n  padding-top: 16px;\n  padding-bottom: 16px; }\n\n[padding-horizontal] {\n  padding-right: 16px;\n  padding-left: 16px; }\n\n:focus,\n:active {\n  outline: none; }\n\n.focus-outline :focus {\n  outline-offset: -1px;\n  outline: thin dotted; }\n\n.focus-outline button:focus,\n.focus-outline [button]:focus {\n  border-color: #51a7e8;\n  box-shadow: 0px 0px 8px 0px #51a7e8;\n  outline: thin solid #51a7e8; }\n\n.focus-outline ion-input.input-focused,\n.focus-outline button[ion-item]:focus,\n.focus-outline a[ion-item]:focus {\n  border-color: #51a7e8;\n  box-shadow: inset 0px 0px 8px 0px #51a7e8 !important; }\n\n.focus-outline ion-input :focus {\n  outline: none; }\n\nfocus-ctrl {\n  position: fixed; }\n  focus-ctrl input,\n  focus-ctrl button {\n    position: fixed;\n    top: 1px;\n    width: 9px;\n    left: -9999px;\n    z-index: 9999;\n    pointer-events: none; }\n\n.hide-focused-input {\n  -webkit-box-flex: 0 !important;\n  -webkit-flex: 0 0 8px !important;\n  -ms-flex: 0 0 8px !important;\n  flex: 0 0 8px !important;\n  margin: 0 !important;\n  -webkit-transform: translate3d(-9999px, 0, 0);\n  transform: translate3d(-9999px, 0, 0);\n  pointer-events: none; }\n\n[floating-label] .hide-focused-input,\n[stacked-label] .hide-focused-input {\n  margin-top: -8px !important; }\n\n.cloned-input {\n  pointer-events: none; }\n\n.backdrop {\n  position: absolute;\n  z-index: 1;\n  top: 0;\n  left: 0;\n  width: 100%;\n  height: 100%;\n  background-color: #000;\n  opacity: 0.01;\n  display: block;\n  -webkit-transform: translateZ(0);\n  transform: translateZ(0); }\n\nclick-block {\n  display: block;\n  position: absolute;\n  top: 0;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  opacity: 0;\n  z-index: 9999;\n  -webkit-transform: translate3d(0px, -100%, 0px);\n  transform: translate3d(0px, -100%, 0px);\n  -webkit-transform: translate3d(0px, calc(-100% + 1px), 0px);\n  transform: translate3d(0px, calc(-100% + 1px), 0px); }\n\n.click-block-active {\n  -webkit-transform: translate3d(0px, 0px, 0px);\n  transform: translate3d(0px, 0px, 0px); }\n\n@-webkit-keyframes rotation {\n  from {\n    -webkit-transform: rotate(0deg);\n    transform: rotate(0deg); }\n  to {\n    -webkit-transform: rotate(359deg);\n    transform: rotate(359deg); } }\n\n@keyframes rotation {\n  from {\n    -webkit-transform: rotate(0deg);\n    transform: rotate(0deg); }\n  to {\n    -webkit-transform: rotate(359deg);\n    transform: rotate(359deg); } }\n\nion-loading-icon {\n  display: -webkit-box;\n  display: -webkit-flex;\n  display: -ms-flexbox;\n  display: flex;\n  -webkit-align-self: center;\n  -ms-flex-item-align: center;\n  align-self: center;\n  margin: auto;\n  font-family: 'Ionicons';\n  font-size: 128px;\n  color: #666666;\n  -webkit-animation: rotation 45s infinite linear;\n  animation: rotation 45s infinite linear; }\n  ion-loading-icon:before {\n    content: \"\\f44e\"; }\n\nion-row {\n  display: -webkit-box;\n  display: -webkit-flex;\n  display: -ms-flexbox;\n  display: flex;\n  padding: 5px;\n  width: 100%; }\n  ion-row[wrap] {\n    -webkit-flex-wrap: wrap;\n    -ms-flex-wrap: wrap;\n    flex-wrap: wrap; }\n  ion-row[flush] {\n    padding: 0; }\n  ion-row[top] {\n    -webkit-box-align: start;\n    -webkit-align-items: flex-start;\n    -ms-flex-align: start;\n    align-items: flex-start; }\n  ion-row[bottom] {\n    -webkit-box-align: end;\n    -webkit-align-items: flex-end;\n    -ms-flex-align: end;\n    align-items: flex-end; }\n  ion-row[center] {\n    -webkit-box-align: center;\n    -webkit-align-items: center;\n    -ms-flex-align: center;\n    align-items: center; }\n  ion-row[stretch] {\n    -webkit-box-align: stretch;\n    -webkit-align-items: stretch;\n    -ms-flex-align: stretch;\n    align-items: stretch; }\n  ion-row[baseline] {\n    -webkit-box-align: baseline;\n    -webkit-align-items: baseline;\n    -ms-flex-align: baseline;\n    align-items: baseline; }\n\nion-row + ion-row {\n  margin-top: -5px;\n  padding-top: 0; }\n\nion-col {\n  -webkit-box-flex: 1;\n  -webkit-flex: 1;\n  -ms-flex: 1;\n  flex: 1;\n  display: block;\n  padding: 5px;\n  width: 100%; }\n  ion-col[top] {\n    -webkit-align-self: flex-start;\n    -ms-flex-item-align: start;\n    align-self: flex-start; }\n  ion-col[bottom] {\n    -webkit-align-self: flex-end;\n    -ms-flex-item-align: end;\n    align-self: flex-end; }\n  ion-col[center] {\n    -webkit-align-self: center;\n    -ms-flex-item-align: center;\n    align-self: center; }\n  ion-col[stretch] {\n    -webkit-align-self: stretch;\n    -ms-flex-item-align: stretch;\n    align-self: stretch; }\n  ion-col[baseline] {\n    -webkit-align-self: baseline;\n    -ms-flex-item-align: baseline;\n    align-self: baseline; }\n\n/* Column Offsets */\nion-col[offset-10] {\n  margin-left: 10%; }\n\nion-col[offset-20] {\n  margin-left: 20%; }\n\nion-col[offset-25] {\n  margin-left: 25%; }\n\nion-col[offset-33], ion-col[offset-34] {\n  margin-left: 33.3333%; }\n\nion-col[offset-50] {\n  margin-left: 50%; }\n\nion-col[offset-66], ion-col[offset-67] {\n  margin-left: 66.6666%; }\n\nion-col[offset-75] {\n  margin-left: 75%; }\n\nion-col[offset-80] {\n  margin-left: 80%; }\n\nion-col[offset-90] {\n  margin-left: 90%; }\n\n/* Explicit Column Percent Sizes */\n/* By default each grid column will evenly distribute */\n/* across the grid. However, you can specify individual */\n/* columns to take up a certain size of the available area */\nion-col[width-10] {\n  -webkit-box-flex: 0;\n  -webkit-flex: 0 0 10%;\n  -ms-flex: 0 0 10%;\n  flex: 0 0 10%;\n  max-width: 10%; }\n\nion-col[width-20] {\n  -webkit-box-flex: 0;\n  -webkit-flex: 0 0 20%;\n  -ms-flex: 0 0 20%;\n  flex: 0 0 20%;\n  max-width: 20%; }\n\nion-col[width-25] {\n  -webkit-box-flex: 0;\n  -webkit-flex: 0 0 25%;\n  -ms-flex: 0 0 25%;\n  flex: 0 0 25%;\n  max-width: 25%; }\n\nion-col[width-33], ion-col[width-34] {\n  -webkit-box-flex: 0;\n  -webkit-flex: 0 0 33.3333%;\n  -ms-flex: 0 0 33.3333%;\n  flex: 0 0 33.3333%;\n  max-width: 33.3333%; }\n\nion-col[width-50] {\n  -webkit-box-flex: 0;\n  -webkit-flex: 0 0 50%;\n  -ms-flex: 0 0 50%;\n  flex: 0 0 50%;\n  max-width: 50%; }\n\nion-col[width-66], ion-col[width-67] {\n  -webkit-box-flex: 0;\n  -webkit-flex: 0 0 66.6666%;\n  -ms-flex: 0 0 66.6666%;\n  flex: 0 0 66.6666%;\n  max-width: 66.6666%; }\n\nion-col[width-75] {\n  -webkit-box-flex: 0;\n  -webkit-flex: 0 0 75%;\n  -ms-flex: 0 0 75%;\n  flex: 0 0 75%;\n  max-width: 75%; }\n\nion-col[width-80] {\n  -webkit-box-flex: 0;\n  -webkit-flex: 0 0 80%;\n  -ms-flex: 0 0 80%;\n  flex: 0 0 80%;\n  max-width: 80%; }\n\nion-col[width-90] {\n  -webkit-box-flex: 0;\n  -webkit-flex: 0 0 90%;\n  -ms-flex: 0 0 90%;\n  flex: 0 0 90%;\n  max-width: 90%; }\n\n/* Responsive Grid Classes */\n/* Adding a class of responsive-X to a row */\n/* will trigger the width-direction to */\n/* change to column and add some margin */\n/* to any columns in the row for clearity */\n@media (max-width: 567px) {\n  [responsive-sm] {\n    -webkit-box-orient: vertical;\n    -webkit-box-direction: normal;\n    -webkit-flex-direction: column;\n    -ms-flex-direction: column;\n    flex-direction: column; }\n    [responsive-sm] ion-col[width-10], [responsive-sm] ion-col[width-20], [responsive-sm] ion-col[width-25], [responsive-sm] ion-col[width-33], [responsive-sm] ion-col[width-34], [responsive-sm] ion-col[width-50], [responsive-sm] ion-col[width-66], [responsive-sm] ion-col[width-67], [responsive-sm] ion-col[width-75], [responsive-sm] ion-col[width-80], [responsive-sm] ion-col[width-90] {\n      -webkit-box-flex: 1;\n      -webkit-flex: 1;\n      -ms-flex: 1;\n      flex: 1;\n      margin-bottom: 15px;\n      margin-left: 0;\n      max-width: 100%;\n      width: 100%; } }\n\n@media (max-width: 767px) {\n  [responsive-md] {\n    -webkit-box-orient: vertical;\n    -webkit-box-direction: normal;\n    -webkit-flex-direction: column;\n    -ms-flex-direction: column;\n    flex-direction: column; }\n    [responsive-md] ion-col[width-10], [responsive-md] ion-col[width-20], [responsive-md] ion-col[width-25], [responsive-md] ion-col[width-33], [responsive-md] ion-col[width-34], [responsive-md] ion-col[width-50], [responsive-md] ion-col[width-66], [responsive-md] ion-col[width-67], [responsive-md] ion-col[width-75], [responsive-md] ion-col[width-80], [responsive-md] ion-col[width-90] {\n      -webkit-box-flex: 1;\n      -webkit-flex: 1;\n      -ms-flex: 1;\n      flex: 1;\n      margin-bottom: 15px;\n      margin-left: 0;\n      max-width: 100%;\n      width: 100%; } }\n\n@media (max-width: 1023px) {\n  [responsive-lg] {\n    -webkit-box-orient: vertical;\n    -webkit-box-direction: normal;\n    -webkit-flex-direction: column;\n    -ms-flex-direction: column;\n    flex-direction: column; }\n    [responsive-lg] ion-col[width-10], [responsive-lg] ion-col[width-20], [responsive-lg] ion-col[width-25], [responsive-lg] ion-col[width-33], [responsive-lg] ion-col[width-34], [responsive-lg] ion-col[width-50], [responsive-lg] ion-col[width-66], [responsive-lg] ion-col[width-67], [responsive-lg] ion-col[width-75], [responsive-lg] ion-col[width-80], [responsive-lg] ion-col[width-90] {\n      -webkit-box-flex: 1;\n      -webkit-flex: 1;\n      -ms-flex: 1;\n      flex: 1;\n      margin-bottom: 15px;\n      margin-left: 0;\n      max-width: 100%;\n      width: 100%; } }\n\nicon {\n  display: inline-block;\n  font-size: 1.2em; }\n\nicon[small] {\n  font-size: 1.1em; }\n\nion-menu {\n  position: absolute;\n  top: 0;\n  right: auto;\n  bottom: 0;\n  left: 0;\n  width: 304px;\n  display: -webkit-box;\n  display: -webkit-flex;\n  display: -ms-flexbox;\n  display: flex;\n  -webkit-box-orient: vertical;\n  -webkit-box-direction: normal;\n  -webkit-flex-direction: column;\n  -ms-flex-direction: column;\n  flex-direction: column;\n  -webkit-transform: translate3d(-9999px, 0px, 0px);\n  transform: translate3d(-9999px, 0px, 0px); }\n\nion-menu[side=right] {\n  right: 0;\n  left: auto; }\n\nion-menu .backdrop {\n  z-index: -1;\n  display: none; }\n\n.menu-content {\n  -webkit-transform: translate3d(0px, 0px, 0px);\n  transform: translate3d(0px, 0px, 0px); }\n\n.menu-content-open ion-pane,\n.menu-content-open ion-content,\n.menu-content-open .toolbar {\n  pointer-events: none; }\n\n@media (max-width: 340px) {\n  ion-menu {\n    width: 264px; } }\n\nion-menu[type=reveal].show-menu {\n  -webkit-transform: translate3d(0px, 0px, 0px);\n  transform: translate3d(0px, 0px, 0px); }\n\nion-menu[type=overlay] {\n  z-index: 80;\n  left: -8px; }\n  ion-menu[type=overlay] .backdrop {\n    display: block;\n    -webkit-transform: translate3d(-9999px, 0px, 0px);\n    transform: translate3d(-9999px, 0px, 0px);\n    opacity: 0.01;\n    left: -3000px;\n    width: 6000px; }\n    ion-menu[type=overlay] .backdrop.show-backdrop {\n      -webkit-transform: translate3d(0px, 0px, 0px);\n      transform: translate3d(0px, 0px, 0px); }\n\nion-menu[type=overlay][side=right] {\n  left: 8px; }\n\nion-menu[type=push][side=right] {\n  left: 0px; }\n\nion-page.modal {\n  z-index: 1000;\n  -webkit-transform: translate3d(0px, 100%, 0px);\n  transform: translate3d(0px, 100%, 0px); }\n\nion-scroll {\n  position: relative;\n  display: block; }\n  ion-scroll.scroll-x scroll-content {\n    overflow-x: auto; }\n  ion-scroll.scroll-y scroll-content {\n    overflow-y: auto; }\n  ion-scroll[center] scroll-content {\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    -webkit-box-pack: center;\n    -webkit-justify-content: center;\n    -ms-flex-pack: center;\n    justify-content: center; }\n  ion-scroll scroll-content {\n    position: absolute;\n    top: 0;\n    right: 0;\n    bottom: 0;\n    left: 0;\n    overflow-y: hidden;\n    overflow-x: hidden;\n    -webkit-overflow-scrolling: touch;\n    will-change: scroll-position; }\n\nion-swipe-slides {\n  display: block;\n  width: 100%;\n  height: 100%; }\n\n/**\n * Swiper 3.1.2\n * Most modern mobile touch slider and framework with hardware accelerated transitions\n *\n * http://www.idangero.us/swiper/\n *\n * Copyright 2015, Vladimir Kharlampidi\n * The iDangero.us\n * http://www.idangero.us/\n *\n * Licensed under MIT\n *\n * Released on: August 22, 2015\n */\n.swiper-container {\n  margin: 0 auto;\n  position: relative;\n  overflow: hidden;\n  /* Fix of Webkit flickering */\n  z-index: 1; }\n\n.swiper-container-no-flexbox .swiper-slide {\n  float: left; }\n\n.swiper-container-vertical > .swiper-wrapper {\n  -webkit-box-orient: vertical;\n  -ms-flex-direction: column;\n  -webkit-flex-direction: column;\n  flex-direction: column; }\n\n.swiper-wrapper {\n  position: relative;\n  width: 100%;\n  height: 100%;\n  z-index: 1;\n  display: -webkit-box;\n  display: -ms-flexbox;\n  display: -webkit-flex;\n  display: flex;\n  -webkit-transition-property: -webkit-transform;\n  transition-property: transform;\n  box-sizing: content-box; }\n\n.swiper-container-android .swiper-slide,\n.swiper-wrapper {\n  -webkit-transform: translate3d(0px, 0, 0);\n  transform: translate3d(0px, 0, 0); }\n\n.swiper-container-multirow > .swiper-wrapper {\n  -webkit-box-lines: multiple;\n  -moz-box-lines: multiple;\n  -ms-flex-wrap: wrap;\n  -webkit-flex-wrap: wrap;\n  flex-wrap: wrap; }\n\n.swiper-container-free-mode > .swiper-wrapper {\n  -webkit-transition-timing-function: ease-out;\n  transition-timing-function: ease-out;\n  margin: 0 auto; }\n\n.swiper-slide {\n  -webkit-flex-shrink: 0;\n  -ms-flex: 0 0 auto;\n  -webkit-flex-shrink: 0;\n  -ms-flex-negative: 0;\n  flex-shrink: 0;\n  width: 100%;\n  height: 100%;\n  position: relative; }\n\n/* a11y */\n.swiper-container .swiper-notification {\n  position: absolute;\n  left: 0;\n  top: 0;\n  pointer-events: none;\n  opacity: 0;\n  z-index: -1000; }\n\n/* IE10 Windows Phone 8 Fixes */\n.swiper-wp8-horizontal {\n  -ms-touch-action: pan-y;\n  touch-action: pan-y; }\n\n.swiper-wp8-vertical {\n  -ms-touch-action: pan-x;\n  touch-action: pan-x; }\n\n/* Arrows */\n.swiper-button-prev,\n.swiper-button-next {\n  position: absolute;\n  top: 50%;\n  width: 27px;\n  height: 44px;\n  margin-top: -22px;\n  z-index: 10;\n  cursor: pointer;\n  background-size: 27px 44px;\n  background-position: center;\n  background-repeat: no-repeat; }\n\n.swiper-button-prev.swiper-button-disabled,\n.swiper-button-next.swiper-button-disabled {\n  opacity: 0.35;\n  cursor: auto;\n  pointer-events: none; }\n\n.swiper-button-prev,\n.swiper-container-rtl .swiper-button-next {\n  background-image: url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%2027%2044'%3E%3Cpath%20d%3D'M0%2C22L22%2C0l2.1%2C2.1L4.2%2C22l19.9%2C19.9L22%2C44L0%2C22L0%2C22L0%2C22z'%20fill%3D'%23007aff'%2F%3E%3C%2Fsvg%3E\");\n  left: 10px;\n  right: auto; }\n\n.swiper-button-prev.swiper-button-black,\n.swiper-container-rtl .swiper-button-next.swiper-button-black {\n  background-image: url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%2027%2044'%3E%3Cpath%20d%3D'M0%2C22L22%2C0l2.1%2C2.1L4.2%2C22l19.9%2C19.9L22%2C44L0%2C22L0%2C22L0%2C22z'%20fill%3D'%23000000'%2F%3E%3C%2Fsvg%3E\"); }\n\n.swiper-button-prev.swiper-button-white,\n.swiper-container-rtl .swiper-button-next.swiper-button-white {\n  background-image: url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%2027%2044'%3E%3Cpath%20d%3D'M0%2C22L22%2C0l2.1%2C2.1L4.2%2C22l19.9%2C19.9L22%2C44L0%2C22L0%2C22L0%2C22z'%20fill%3D'%23ffffff'%2F%3E%3C%2Fsvg%3E\"); }\n\n.swiper-button-next,\n.swiper-container-rtl .swiper-button-prev {\n  background-image: url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%2027%2044'%3E%3Cpath%20d%3D'M27%2C22L27%2C22L5%2C44l-2.1-2.1L22.8%2C22L2.9%2C2.1L5%2C0L27%2C22L27%2C22z'%20fill%3D'%23007aff'%2F%3E%3C%2Fsvg%3E\");\n  right: 10px;\n  left: auto; }\n\n.swiper-button-next.swiper-button-black,\n.swiper-container-rtl .swiper-button-prev.swiper-button-black {\n  background-image: url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%2027%2044'%3E%3Cpath%20d%3D'M27%2C22L27%2C22L5%2C44l-2.1-2.1L22.8%2C22L2.9%2C2.1L5%2C0L27%2C22L27%2C22z'%20fill%3D'%23000000'%2F%3E%3C%2Fsvg%3E\"); }\n\n.swiper-button-next.swiper-button-white,\n.swiper-container-rtl .swiper-button-prev.swiper-button-white {\n  background-image: url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%2027%2044'%3E%3Cpath%20d%3D'M27%2C22L27%2C22L5%2C44l-2.1-2.1L22.8%2C22L2.9%2C2.1L5%2C0L27%2C22L27%2C22z'%20fill%3D'%23ffffff'%2F%3E%3C%2Fsvg%3E\"); }\n\n/* Pagination Styles */\n.swiper-pagination {\n  position: absolute;\n  text-align: center;\n  -webkit-transition: 300ms;\n  transition: 300ms;\n  -webkit-transform: translate3d(0, 0, 0);\n  transform: translate3d(0, 0, 0);\n  z-index: 10; }\n\n.swiper-pagination.swiper-pagination-hidden {\n  opacity: 0; }\n\n.swiper-pagination-bullet {\n  width: 8px;\n  height: 8px;\n  display: inline-block;\n  border-radius: 100%;\n  background: #000;\n  opacity: 0.2; }\n\nbutton.swiper-pagination-bullet {\n  border: none;\n  margin: 0;\n  padding: 0;\n  box-shadow: none;\n  -moz-appearance: none;\n  -ms-appearance: none;\n  -webkit-appearance: none;\n  appearance: none; }\n\n.swiper-pagination-clickable .swiper-pagination-bullet {\n  cursor: pointer; }\n\n.swiper-pagination-white .swiper-pagination-bullet {\n  background: #fff; }\n\n.swiper-pagination-bullet-active {\n  opacity: 1; }\n\n.swiper-pagination-white .swiper-pagination-bullet-active {\n  background: #fff; }\n\n.swiper-pagination-black .swiper-pagination-bullet-active {\n  background: #000; }\n\n.swiper-container-vertical > .swiper-pagination {\n  right: 10px;\n  top: 50%;\n  -webkit-transform: translate3d(0px, -50%, 0);\n  transform: translate3d(0px, -50%, 0); }\n\n.swiper-container-vertical > .swiper-pagination .swiper-pagination-bullet {\n  margin: 5px 0;\n  display: block; }\n\n.swiper-container-horizontal > .swiper-pagination {\n  bottom: 20px;\n  left: 0;\n  width: 100%; }\n\n.swiper-container-horizontal > .swiper-pagination .swiper-pagination-bullet {\n  margin: 0 5px; }\n\n/* 3D Container */\n.swiper-container-3d {\n  -webkit-perspective: 1200px;\n  -o-perspective: 1200px;\n  perspective: 1200px; }\n\n.swiper-container-3d .swiper-wrapper,\n.swiper-container-3d .swiper-slide,\n.swiper-container-3d .swiper-slide-shadow-left,\n.swiper-container-3d .swiper-slide-shadow-right,\n.swiper-container-3d .swiper-slide-shadow-top,\n.swiper-container-3d .swiper-slide-shadow-bottom,\n.swiper-container-3d .swiper-cube-shadow {\n  -webkit-transform-style: preserve-3d;\n  -ms-transform-style: preserve-3d;\n  transform-style: preserve-3d; }\n\n.swiper-container-3d .swiper-slide-shadow-left,\n.swiper-container-3d .swiper-slide-shadow-right,\n.swiper-container-3d .swiper-slide-shadow-top,\n.swiper-container-3d .swiper-slide-shadow-bottom {\n  position: absolute;\n  left: 0;\n  bottom: 0;\n  width: 100%;\n  height: 100%;\n  pointer-events: none;\n  z-index: 10; }\n\n.swiper-container-3d .swiper-slide-shadow-left {\n  background-image: -webkit-gradient(linear, left top, right top, from(rgba(0, 0, 0, 0.5)), to(transparent));\n  /* Safari 4+, Chrome */\n  background-image: -webkit-linear-gradient(right, rgba(0, 0, 0, 0.5), transparent);\n  /* Chrome 10+, Safari 5.1+, iOS 5+ */\n  /* Firefox 3.6-15 */\n  /* Opera 11.10-12.00 */\n  background-image: linear-gradient(to left, rgba(0, 0, 0, 0.5), transparent);\n  /* Firefox 16+, IE10, Opera 12.50+ */ }\n\n.swiper-container-3d .swiper-slide-shadow-right {\n  background-image: -webkit-gradient(linear, right top, left top, from(rgba(0, 0, 0, 0.5)), to(transparent));\n  /* Safari 4+, Chrome */\n  background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, 0.5), transparent);\n  /* Chrome 10+, Safari 5.1+, iOS 5+ */\n  /* Firefox 3.6-15 */\n  /* Opera 11.10-12.00 */\n  background-image: linear-gradient(to right, rgba(0, 0, 0, 0.5), transparent);\n  /* Firefox 16+, IE10, Opera 12.50+ */ }\n\n.swiper-container-3d .swiper-slide-shadow-top {\n  background-image: -webkit-gradient(linear, left top, left bottom, from(rgba(0, 0, 0, 0.5)), to(transparent));\n  /* Safari 4+, Chrome */\n  background-image: -webkit-linear-gradient(bottom, rgba(0, 0, 0, 0.5), transparent);\n  /* Chrome 10+, Safari 5.1+, iOS 5+ */\n  /* Firefox 3.6-15 */\n  /* Opera 11.10-12.00 */\n  background-image: linear-gradient(to top, rgba(0, 0, 0, 0.5), transparent);\n  /* Firefox 16+, IE10, Opera 12.50+ */ }\n\n.swiper-container-3d .swiper-slide-shadow-bottom {\n  background-image: -webkit-gradient(linear, left bottom, left top, from(rgba(0, 0, 0, 0.5)), to(transparent));\n  /* Safari 4+, Chrome */\n  background-image: -webkit-linear-gradient(top, rgba(0, 0, 0, 0.5), transparent);\n  /* Chrome 10+, Safari 5.1+, iOS 5+ */\n  /* Firefox 3.6-15 */\n  /* Opera 11.10-12.00 */\n  background-image: linear-gradient(to bottom, rgba(0, 0, 0, 0.5), transparent);\n  /* Firefox 16+, IE10, Opera 12.50+ */ }\n\n/* Coverflow */\n.swiper-container-coverflow .swiper-wrapper {\n  /* Windows 8 IE 10 fix */\n  -ms-perspective: 1200px; }\n\n/* Fade */\n.swiper-container-fade.swiper-container-free-mode .swiper-slide {\n  -webkit-transition-timing-function: ease-out;\n  transition-timing-function: ease-out; }\n\n.swiper-container-fade .swiper-slide {\n  pointer-events: none; }\n\n.swiper-container-fade .swiper-slide .swiper-slide {\n  pointer-events: none; }\n\n.swiper-container-fade .swiper-slide-active,\n.swiper-container-fade .swiper-slide-active .swiper-slide-active {\n  pointer-events: auto; }\n\n/* Cube */\n.swiper-container-cube {\n  overflow: visible; }\n\n.swiper-container-cube .swiper-slide {\n  pointer-events: none;\n  visibility: hidden;\n  -webkit-transform-origin: 0 0;\n  transform-origin: 0 0;\n  -webkit-backface-visibility: hidden;\n  -ms-backface-visibility: hidden;\n  backface-visibility: hidden;\n  width: 100%;\n  height: 100%;\n  z-index: 1; }\n\n.swiper-container-cube.swiper-container-rtl .swiper-slide {\n  -webkit-transform-origin: 100% 0;\n  transform-origin: 100% 0; }\n\n.swiper-container-cube .swiper-slide-active,\n.swiper-container-cube .swiper-slide-next,\n.swiper-container-cube .swiper-slide-prev,\n.swiper-container-cube .swiper-slide-next + .swiper-slide {\n  pointer-events: auto;\n  visibility: visible; }\n\n.swiper-container-cube .swiper-slide-shadow-top,\n.swiper-container-cube .swiper-slide-shadow-bottom,\n.swiper-container-cube .swiper-slide-shadow-left,\n.swiper-container-cube .swiper-slide-shadow-right {\n  z-index: 0;\n  -webkit-backface-visibility: hidden;\n  -ms-backface-visibility: hidden;\n  backface-visibility: hidden; }\n\n.swiper-container-cube .swiper-cube-shadow {\n  position: absolute;\n  left: 0;\n  bottom: 0;\n  width: 100%;\n  height: 100%;\n  background: #000;\n  opacity: 0.6;\n  -webkit-filter: blur(50px);\n  filter: blur(50px);\n  z-index: 0; }\n\n/* Scrollbar */\n.swiper-scrollbar {\n  border-radius: 10px;\n  position: relative;\n  -ms-touch-action: none;\n  background: rgba(0, 0, 0, 0.1); }\n\n.swiper-container-horizontal > .swiper-scrollbar {\n  position: absolute;\n  left: 1%;\n  bottom: 3px;\n  z-index: 50;\n  height: 5px;\n  width: 98%; }\n\n.swiper-container-vertical > .swiper-scrollbar {\n  position: absolute;\n  right: 3px;\n  top: 1%;\n  z-index: 50;\n  width: 5px;\n  height: 98%; }\n\n.swiper-scrollbar-drag {\n  height: 100%;\n  width: 100%;\n  position: relative;\n  background: rgba(0, 0, 0, 0.5);\n  border-radius: 10px;\n  left: 0;\n  top: 0; }\n\n.swiper-scrollbar-cursor-drag {\n  cursor: move; }\n\n/* Preloader */\n.swiper-lazy-preloader {\n  width: 42px;\n  height: 42px;\n  position: absolute;\n  left: 50%;\n  top: 50%;\n  margin-left: -21px;\n  margin-top: -21px;\n  z-index: 10;\n  -webkit-transform-origin: 50%;\n  transform-origin: 50%;\n  -webkit-animation: swiper-preloader-spin 1s steps(12, end) infinite;\n  animation: swiper-preloader-spin 1s steps(12, end) infinite; }\n\n.swiper-lazy-preloader:after {\n  display: block;\n  content: \"\";\n  width: 100%;\n  height: 100%;\n  background-image: url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20viewBox%3D'0%200%20120%20120'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20xmlns%3Axlink%3D'http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink'%3E%3Cdefs%3E%3Cline%20id%3D'l'%20x1%3D'60'%20x2%3D'60'%20y1%3D'7'%20y2%3D'27'%20stroke%3D'%236c6c6c'%20stroke-width%3D'11'%20stroke-linecap%3D'round'%2F%3E%3C%2Fdefs%3E%3Cg%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(30%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(60%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(90%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(120%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(150%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.37'%20transform%3D'rotate(180%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.46'%20transform%3D'rotate(210%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.56'%20transform%3D'rotate(240%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.66'%20transform%3D'rotate(270%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.75'%20transform%3D'rotate(300%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.85'%20transform%3D'rotate(330%2060%2C60)'%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E\");\n  background-position: 50%;\n  background-size: 100%;\n  background-repeat: no-repeat; }\n\n.swiper-lazy-preloader-white:after {\n  background-image: url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20viewBox%3D'0%200%20120%20120'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20xmlns%3Axlink%3D'http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink'%3E%3Cdefs%3E%3Cline%20id%3D'l'%20x1%3D'60'%20x2%3D'60'%20y1%3D'7'%20y2%3D'27'%20stroke%3D'%23fff'%20stroke-width%3D'11'%20stroke-linecap%3D'round'%2F%3E%3C%2Fdefs%3E%3Cg%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(30%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(60%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(90%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(120%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(150%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.37'%20transform%3D'rotate(180%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.46'%20transform%3D'rotate(210%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.56'%20transform%3D'rotate(240%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.66'%20transform%3D'rotate(270%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.75'%20transform%3D'rotate(300%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.85'%20transform%3D'rotate(330%2060%2C60)'%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E\"); }\n\n@-webkit-keyframes swiper-preloader-spin {\n  100% {\n    -webkit-transform: rotate(360deg); } }\n\n@keyframes swiper-preloader-spin {\n  100% {\n    -webkit-transform: rotate(360deg);\n    transform: rotate(360deg); } }\n\nion-slides {\n  width: 100%;\n  height: 100%;\n  display: block; }\n\n.slide-zoom {\n  display: block;\n  width: 100%;\n  text-align: center; }\n\n.swiper-container {\n  width: 100%;\n  height: 100%;\n  padding: 0;\n  display: -webkit-box;\n  display: -webkit-flex;\n  display: -ms-flexbox;\n  display: flex;\n  overflow: hidden; }\n\n.swiper-wrapper {\n  width: 100%;\n  height: 100%;\n  padding: 0;\n  display: -webkit-box;\n  display: -webkit-flex;\n  display: -ms-flexbox;\n  display: flex; }\n\n.swiper-slide {\n  width: 100%;\n  height: 100%;\n  box-sizing: border-box;\n  text-align: center;\n  font-size: 18px;\n  /* Center slide text vertically */\n  display: -webkit-box;\n  display: -webkit-flex;\n  display: -ms-flexbox;\n  display: flex;\n  -webkit-box-pack: center;\n  -webkit-justify-content: center;\n  -ms-flex-pack: center;\n  justify-content: center;\n  -webkit-box-align: center;\n  -webkit-align-items: center;\n  -ms-flex-align: center;\n  align-items: center; }\n  .swiper-slide img {\n    width: auto;\n    height: auto;\n    max-width: 100%;\n    max-height: 100%; }\n\n@font-face {\n  font-family: \"Ionicons\";\n  src: url(\"../fonts/ionicons.ttf?v=3.0.0\") format(\"truetype\"), url(\"../fonts/ionicons.woff?v=3.0.0\") format(\"woff\");\n  font-weight: normal;\n  font-style: normal; }\n\nicon,\n[icon],\n.icon {\n  display: inline-block;\n  font-family: \"Ionicons\";\n  font-style: normal;\n  font-weight: normal;\n  font-variant: normal;\n  text-transform: none;\n  text-rendering: auto;\n  line-height: 1;\n  speak: none;\n  -webkit-font-smoothing: antialiased;\n  -moz-osx-font-smoothing: grayscale; }\n\n/*!\n  Ionicons, v3.0.0\n  Created by Ben Sperry for the Ionic Framework, https://ionicons.com/\n  https://twitter.com/benjsperry  https://twitter.com/ionicframework\n  MIT License: https://github.com/ionic-team/ionicons\n\n  Android-style icons originally built by Google’s\n  Material Design Icons: https://github.com/google/material-design-icons\n  used under CC BY http://creativecommons.org/licenses/by/4.0/\n  Modified icons to fit ionicon’s grid from original.\n*/\n.ion-ios-add:before {\n  content: \"\\f102\"; }\n\n.ion-ios-add-circle:before {\n  content: \"\\f101\"; }\n\n.ion-ios-add-circle-outline:before {\n  content: \"\\f100\"; }\n\n.ion-ios-alarm:before {\n  content: \"\\f3c8\"; }\n\n.ion-ios-alarm-outline:before {\n  content: \"\\f3c7\"; }\n\n.ion-ios-albums:before {\n  content: \"\\f3ca\"; }\n\n.ion-ios-albums-outline:before {\n  content: \"\\f3c9\"; }\n\n.ion-ios-alert:before {\n  content: \"\\f104\"; }\n\n.ion-ios-alert-outline:before {\n  content: \"\\f103\"; }\n\n.ion-ios-american-football:before {\n  content: \"\\f106\"; }\n\n.ion-ios-american-football-outline:before {\n  content: \"\\f105\"; }\n\n.ion-ios-analytics:before {\n  content: \"\\f3ce\"; }\n\n.ion-ios-analytics-outline:before {\n  content: \"\\f3cd\"; }\n\n.ion-ios-aperture:before {\n  content: \"\\f108\"; }\n\n.ion-ios-aperture-outline:before {\n  content: \"\\f107\"; }\n\n.ion-ios-apps:before {\n  content: \"\\f10a\"; }\n\n.ion-ios-apps-outline:before {\n  content: \"\\f109\"; }\n\n.ion-ios-appstore:before {\n  content: \"\\f10c\"; }\n\n.ion-ios-appstore-outline:before {\n  content: \"\\f10b\"; }\n\n.ion-ios-archive:before {\n  content: \"\\f10e\"; }\n\n.ion-ios-archive-outline:before {\n  content: \"\\f10d\"; }\n\n.ion-ios-arrow-back:before {\n  content: \"\\f3cf\"; }\n\n.ion-ios-arrow-down:before {\n  content: \"\\f3d0\"; }\n\n.ion-ios-arrow-dropdown:before {\n  content: \"\\f110\"; }\n\n.ion-ios-arrow-dropdown-circle:before {\n  content: \"\\f10f\"; }\n\n.ion-ios-arrow-dropleft:before {\n  content: \"\\f112\"; }\n\n.ion-ios-arrow-dropleft-circle:before {\n  content: \"\\f111\"; }\n\n.ion-ios-arrow-dropright:before {\n  content: \"\\f114\"; }\n\n.ion-ios-arrow-dropright-circle:before {\n  content: \"\\f113\"; }\n\n.ion-ios-arrow-dropup:before {\n  content: \"\\f116\"; }\n\n.ion-ios-arrow-dropup-circle:before {\n  content: \"\\f115\"; }\n\n.ion-ios-arrow-forward:before {\n  content: \"\\f3d1\"; }\n\n.ion-ios-arrow-round-back:before {\n  content: \"\\f117\"; }\n\n.ion-ios-arrow-round-down:before {\n  content: \"\\f118\"; }\n\n.ion-ios-arrow-round-forward:before {\n  content: \"\\f119\"; }\n\n.ion-ios-arrow-round-up:before {\n  content: \"\\f11a\"; }\n\n.ion-ios-arrow-up:before {\n  content: \"\\f3d8\"; }\n\n.ion-ios-at:before {\n  content: \"\\f3da\"; }\n\n.ion-ios-at-outline:before {\n  content: \"\\f3d9\"; }\n\n.ion-ios-attach:before {\n  content: \"\\f11b\"; }\n\n.ion-ios-backspace:before {\n  content: \"\\f11d\"; }\n\n.ion-ios-backspace-outline:before {\n  content: \"\\f11c\"; }\n\n.ion-ios-barcode:before {\n  content: \"\\f3dc\"; }\n\n.ion-ios-barcode-outline:before {\n  content: \"\\f3db\"; }\n\n.ion-ios-baseball:before {\n  content: \"\\f3de\"; }\n\n.ion-ios-baseball-outline:before {\n  content: \"\\f3dd\"; }\n\n.ion-ios-basket:before {\n  content: \"\\f11f\"; }\n\n.ion-ios-basket-outline:before {\n  content: \"\\f11e\"; }\n\n.ion-ios-basketball:before {\n  content: \"\\f3e0\"; }\n\n.ion-ios-basketball-outline:before {\n  content: \"\\f3df\"; }\n\n.ion-ios-battery-charging:before {\n  content: \"\\f120\"; }\n\n.ion-ios-battery-dead:before {\n  content: \"\\f121\"; }\n\n.ion-ios-battery-full:before {\n  content: \"\\f122\"; }\n\n.ion-ios-beaker:before {\n  content: \"\\f124\"; }\n\n.ion-ios-beaker-outline:before {\n  content: \"\\f123\"; }\n\n.ion-ios-beer:before {\n  content: \"\\f126\"; }\n\n.ion-ios-beer-outline:before {\n  content: \"\\f125\"; }\n\n.ion-ios-bicycle:before {\n  content: \"\\f127\"; }\n\n.ion-ios-bluetooth:before {\n  content: \"\\f128\"; }\n\n.ion-ios-boat:before {\n  content: \"\\f12a\"; }\n\n.ion-ios-boat-outline:before {\n  content: \"\\f129\"; }\n\n.ion-ios-body:before {\n  content: \"\\f3e4\"; }\n\n.ion-ios-body-outline:before {\n  content: \"\\f3e3\"; }\n\n.ion-ios-bonfire:before {\n  content: \"\\f12c\"; }\n\n.ion-ios-bonfire-outline:before {\n  content: \"\\f12b\"; }\n\n.ion-ios-book:before {\n  content: \"\\f3e8\"; }\n\n.ion-ios-book-outline:before {\n  content: \"\\f3e7\"; }\n\n.ion-ios-bookmark:before {\n  content: \"\\f12e\"; }\n\n.ion-ios-bookmark-outline:before {\n  content: \"\\f12d\"; }\n\n.ion-ios-bookmarks:before {\n  content: \"\\f3ea\"; }\n\n.ion-ios-bookmarks-outline:before {\n  content: \"\\f3e9\"; }\n\n.ion-ios-bowtie:before {\n  content: \"\\f130\"; }\n\n.ion-ios-bowtie-outline:before {\n  content: \"\\f12f\"; }\n\n.ion-ios-briefcase:before {\n  content: \"\\f3ee\"; }\n\n.ion-ios-briefcase-outline:before {\n  content: \"\\f3ed\"; }\n\n.ion-ios-browsers:before {\n  content: \"\\f3f0\"; }\n\n.ion-ios-browsers-outline:before {\n  content: \"\\f3ef\"; }\n\n.ion-ios-brush:before {\n  content: \"\\f132\"; }\n\n.ion-ios-brush-outline:before {\n  content: \"\\f131\"; }\n\n.ion-ios-bug:before {\n  content: \"\\f134\"; }\n\n.ion-ios-bug-outline:before {\n  content: \"\\f133\"; }\n\n.ion-ios-build:before {\n  content: \"\\f136\"; }\n\n.ion-ios-build-outline:before {\n  content: \"\\f135\"; }\n\n.ion-ios-bulb:before {\n  content: \"\\f138\"; }\n\n.ion-ios-bulb-outline:before {\n  content: \"\\f137\"; }\n\n.ion-ios-bus:before {\n  content: \"\\f13a\"; }\n\n.ion-ios-bus-outline:before {\n  content: \"\\f139\"; }\n\n.ion-ios-cafe:before {\n  content: \"\\f13c\"; }\n\n.ion-ios-cafe-outline:before {\n  content: \"\\f13b\"; }\n\n.ion-ios-calculator:before {\n  content: \"\\f3f2\"; }\n\n.ion-ios-calculator-outline:before {\n  content: \"\\f3f1\"; }\n\n.ion-ios-calendar:before {\n  content: \"\\f3f4\"; }\n\n.ion-ios-calendar-outline:before {\n  content: \"\\f3f3\"; }\n\n.ion-ios-call:before {\n  content: \"\\f13e\"; }\n\n.ion-ios-call-outline:before {\n  content: \"\\f13d\"; }\n\n.ion-ios-camera:before {\n  content: \"\\f3f6\"; }\n\n.ion-ios-camera-outline:before {\n  content: \"\\f3f5\"; }\n\n.ion-ios-car:before {\n  content: \"\\f140\"; }\n\n.ion-ios-car-outline:before {\n  content: \"\\f13f\"; }\n\n.ion-ios-card:before {\n  content: \"\\f142\"; }\n\n.ion-ios-card-outline:before {\n  content: \"\\f141\"; }\n\n.ion-ios-cart:before {\n  content: \"\\f3f8\"; }\n\n.ion-ios-cart-outline:before {\n  content: \"\\f3f7\"; }\n\n.ion-ios-cash:before {\n  content: \"\\f144\"; }\n\n.ion-ios-cash-outline:before {\n  content: \"\\f143\"; }\n\n.ion-ios-chatboxes:before {\n  content: \"\\f3fa\"; }\n\n.ion-ios-chatboxes-outline:before {\n  content: \"\\f3f9\"; }\n\n.ion-ios-chatbubbles:before {\n  content: \"\\f146\"; }\n\n.ion-ios-chatbubbles-outline:before {\n  content: \"\\f145\"; }\n\n.ion-ios-checkbox:before {\n  content: \"\\f148\"; }\n\n.ion-ios-checkbox-outline:before {\n  content: \"\\f147\"; }\n\n.ion-ios-checkmark:before {\n  content: \"\\f3ff\"; }\n\n.ion-ios-checkmark-circle:before {\n  content: \"\\f14a\"; }\n\n.ion-ios-checkmark-circle-outline:before {\n  content: \"\\f149\"; }\n\n.ion-ios-clipboard:before {\n  content: \"\\f14c\"; }\n\n.ion-ios-clipboard-outline:before {\n  content: \"\\f14b\"; }\n\n.ion-ios-clock:before {\n  content: \"\\f403\"; }\n\n.ion-ios-clock-outline:before {\n  content: \"\\f402\"; }\n\n.ion-ios-close:before {\n  content: \"\\f406\"; }\n\n.ion-ios-close-circle:before {\n  content: \"\\f14e\"; }\n\n.ion-ios-close-circle-outline:before {\n  content: \"\\f14d\"; }\n\n.ion-ios-closed-captioning:before {\n  content: \"\\f150\"; }\n\n.ion-ios-closed-captioning-outline:before {\n  content: \"\\f14f\"; }\n\n.ion-ios-cloud:before {\n  content: \"\\f40c\"; }\n\n.ion-ios-cloud-circle:before {\n  content: \"\\f152\"; }\n\n.ion-ios-cloud-circle-outline:before {\n  content: \"\\f151\"; }\n\n.ion-ios-cloud-done:before {\n  content: \"\\f154\"; }\n\n.ion-ios-cloud-done-outline:before {\n  content: \"\\f153\"; }\n\n.ion-ios-cloud-download:before {\n  content: \"\\f408\"; }\n\n.ion-ios-cloud-download-outline:before {\n  content: \"\\f407\"; }\n\n.ion-ios-cloud-outline:before {\n  content: \"\\f409\"; }\n\n.ion-ios-cloud-upload:before {\n  content: \"\\f40b\"; }\n\n.ion-ios-cloud-upload-outline:before {\n  content: \"\\f40a\"; }\n\n.ion-ios-cloudy:before {\n  content: \"\\f410\"; }\n\n.ion-ios-cloudy-night:before {\n  content: \"\\f40e\"; }\n\n.ion-ios-cloudy-night-outline:before {\n  content: \"\\f40d\"; }\n\n.ion-ios-cloudy-outline:before {\n  content: \"\\f40f\"; }\n\n.ion-ios-code:before {\n  content: \"\\f157\"; }\n\n.ion-ios-code-download:before {\n  content: \"\\f155\"; }\n\n.ion-ios-code-working:before {\n  content: \"\\f156\"; }\n\n.ion-ios-cog:before {\n  content: \"\\f412\"; }\n\n.ion-ios-cog-outline:before {\n  content: \"\\f411\"; }\n\n.ion-ios-color-fill:before {\n  content: \"\\f159\"; }\n\n.ion-ios-color-fill-outline:before {\n  content: \"\\f158\"; }\n\n.ion-ios-color-filter:before {\n  content: \"\\f414\"; }\n\n.ion-ios-color-filter-outline:before {\n  content: \"\\f413\"; }\n\n.ion-ios-color-palette:before {\n  content: \"\\f15b\"; }\n\n.ion-ios-color-palette-outline:before {\n  content: \"\\f15a\"; }\n\n.ion-ios-color-wand:before {\n  content: \"\\f416\"; }\n\n.ion-ios-color-wand-outline:before {\n  content: \"\\f415\"; }\n\n.ion-ios-compass:before {\n  content: \"\\f15d\"; }\n\n.ion-ios-compass-outline:before {\n  content: \"\\f15c\"; }\n\n.ion-ios-construct:before {\n  content: \"\\f15f\"; }\n\n.ion-ios-construct-outline:before {\n  content: \"\\f15e\"; }\n\n.ion-ios-contact:before {\n  content: \"\\f41a\"; }\n\n.ion-ios-contact-outline:before {\n  content: \"\\f419\"; }\n\n.ion-ios-contacts:before {\n  content: \"\\f161\"; }\n\n.ion-ios-contacts-outline:before {\n  content: \"\\f160\"; }\n\n.ion-ios-contract:before {\n  content: \"\\f162\"; }\n\n.ion-ios-contrast:before {\n  content: \"\\f163\"; }\n\n.ion-ios-copy:before {\n  content: \"\\f41c\"; }\n\n.ion-ios-copy-outline:before {\n  content: \"\\f41b\"; }\n\n.ion-ios-create:before {\n  content: \"\\f165\"; }\n\n.ion-ios-create-outline:before {\n  content: \"\\f164\"; }\n\n.ion-ios-crop:before {\n  content: \"\\f41e\"; }\n\n.ion-ios-crop-outline:before {\n  content: \"\\f166\"; }\n\n.ion-ios-cube:before {\n  content: \"\\f168\"; }\n\n.ion-ios-cube-outline:before {\n  content: \"\\f167\"; }\n\n.ion-ios-cut:before {\n  content: \"\\f16a\"; }\n\n.ion-ios-cut-outline:before {\n  content: \"\\f169\"; }\n\n.ion-ios-desktop:before {\n  content: \"\\f16c\"; }\n\n.ion-ios-desktop-outline:before {\n  content: \"\\f16b\"; }\n\n.ion-ios-disc:before {\n  content: \"\\f16e\"; }\n\n.ion-ios-disc-outline:before {\n  content: \"\\f16d\"; }\n\n.ion-ios-document:before {\n  content: \"\\f170\"; }\n\n.ion-ios-document-outline:before {\n  content: \"\\f16f\"; }\n\n.ion-ios-done-all:before {\n  content: \"\\f171\"; }\n\n.ion-ios-download:before {\n  content: \"\\f420\"; }\n\n.ion-ios-download-outline:before {\n  content: \"\\f41f\"; }\n\n.ion-ios-easel:before {\n  content: \"\\f173\"; }\n\n.ion-ios-easel-outline:before {\n  content: \"\\f172\"; }\n\n.ion-ios-egg:before {\n  content: \"\\f175\"; }\n\n.ion-ios-egg-outline:before {\n  content: \"\\f174\"; }\n\n.ion-ios-exit:before {\n  content: \"\\f177\"; }\n\n.ion-ios-exit-outline:before {\n  content: \"\\f176\"; }\n\n.ion-ios-expand:before {\n  content: \"\\f178\"; }\n\n.ion-ios-eye:before {\n  content: \"\\f425\"; }\n\n.ion-ios-eye-off:before {\n  content: \"\\f17a\"; }\n\n.ion-ios-eye-off-outline:before {\n  content: \"\\f179\"; }\n\n.ion-ios-eye-outline:before {\n  content: \"\\f424\"; }\n\n.ion-ios-fastforward:before {\n  content: \"\\f427\"; }\n\n.ion-ios-fastforward-outline:before {\n  content: \"\\f426\"; }\n\n.ion-ios-female:before {\n  content: \"\\f17b\"; }\n\n.ion-ios-filing:before {\n  content: \"\\f429\"; }\n\n.ion-ios-filing-outline:before {\n  content: \"\\f428\"; }\n\n.ion-ios-film:before {\n  content: \"\\f42b\"; }\n\n.ion-ios-film-outline:before {\n  content: \"\\f42a\"; }\n\n.ion-ios-finger-print:before {\n  content: \"\\f17c\"; }\n\n.ion-ios-flag:before {\n  content: \"\\f42d\"; }\n\n.ion-ios-flag-outline:before {\n  content: \"\\f42c\"; }\n\n.ion-ios-flame:before {\n  content: \"\\f42f\"; }\n\n.ion-ios-flame-outline:before {\n  content: \"\\f42e\"; }\n\n.ion-ios-flash:before {\n  content: \"\\f17e\"; }\n\n.ion-ios-flash-outline:before {\n  content: \"\\f17d\"; }\n\n.ion-ios-flask:before {\n  content: \"\\f431\"; }\n\n.ion-ios-flask-outline:before {\n  content: \"\\f430\"; }\n\n.ion-ios-flower:before {\n  content: \"\\f433\"; }\n\n.ion-ios-flower-outline:before {\n  content: \"\\f432\"; }\n\n.ion-ios-folder:before {\n  content: \"\\f435\"; }\n\n.ion-ios-folder-open:before {\n  content: \"\\f180\"; }\n\n.ion-ios-folder-open-outline:before {\n  content: \"\\f17f\"; }\n\n.ion-ios-folder-outline:before {\n  content: \"\\f434\"; }\n\n.ion-ios-football:before {\n  content: \"\\f437\"; }\n\n.ion-ios-football-outline:before {\n  content: \"\\f436\"; }\n\n.ion-ios-funnel:before {\n  content: \"\\f182\"; }\n\n.ion-ios-funnel-outline:before {\n  content: \"\\f181\"; }\n\n.ion-ios-game-controller-a:before {\n  content: \"\\f439\"; }\n\n.ion-ios-game-controller-a-outline:before {\n  content: \"\\f438\"; }\n\n.ion-ios-game-controller-b:before {\n  content: \"\\f43b\"; }\n\n.ion-ios-game-controller-b-outline:before {\n  content: \"\\f43a\"; }\n\n.ion-ios-git-branch:before {\n  content: \"\\f183\"; }\n\n.ion-ios-git-commit:before {\n  content: \"\\f184\"; }\n\n.ion-ios-git-compare:before {\n  content: \"\\f185\"; }\n\n.ion-ios-git-merge:before {\n  content: \"\\f186\"; }\n\n.ion-ios-git-network:before {\n  content: \"\\f187\"; }\n\n.ion-ios-git-pull-request:before {\n  content: \"\\f188\"; }\n\n.ion-ios-glasses:before {\n  content: \"\\f43f\"; }\n\n.ion-ios-glasses-outline:before {\n  content: \"\\f43e\"; }\n\n.ion-ios-globe:before {\n  content: \"\\f18a\"; }\n\n.ion-ios-globe-outline:before {\n  content: \"\\f189\"; }\n\n.ion-ios-grid:before {\n  content: \"\\f18c\"; }\n\n.ion-ios-grid-outline:before {\n  content: \"\\f18b\"; }\n\n.ion-ios-hammer:before {\n  content: \"\\f18e\"; }\n\n.ion-ios-hammer-outline:before {\n  content: \"\\f18d\"; }\n\n.ion-ios-hand:before {\n  content: \"\\f190\"; }\n\n.ion-ios-hand-outline:before {\n  content: \"\\f18f\"; }\n\n.ion-ios-happy:before {\n  content: \"\\f192\"; }\n\n.ion-ios-happy-outline:before {\n  content: \"\\f191\"; }\n\n.ion-ios-headset:before {\n  content: \"\\f194\"; }\n\n.ion-ios-headset-outline:before {\n  content: \"\\f193\"; }\n\n.ion-ios-heart:before {\n  content: \"\\f443\"; }\n\n.ion-ios-heart-outline:before {\n  content: \"\\f442\"; }\n\n.ion-ios-help:before {\n  content: \"\\f446\"; }\n\n.ion-ios-help-buoy:before {\n  content: \"\\f196\"; }\n\n.ion-ios-help-buoy-outline:before {\n  content: \"\\f195\"; }\n\n.ion-ios-help-circle:before {\n  content: \"\\f198\"; }\n\n.ion-ios-help-circle-outline:before {\n  content: \"\\f197\"; }\n\n.ion-ios-home:before {\n  content: \"\\f448\"; }\n\n.ion-ios-home-outline:before {\n  content: \"\\f447\"; }\n\n.ion-ios-ice-cream:before {\n  content: \"\\f19a\"; }\n\n.ion-ios-ice-cream-outline:before {\n  content: \"\\f199\"; }\n\n.ion-ios-image:before {\n  content: \"\\f19c\"; }\n\n.ion-ios-image-outline:before {\n  content: \"\\f19b\"; }\n\n.ion-ios-images:before {\n  content: \"\\f19e\"; }\n\n.ion-ios-images-outline:before {\n  content: \"\\f19d\"; }\n\n.ion-ios-infinite:before {\n  content: \"\\f44a\"; }\n\n.ion-ios-infinite-outline:before {\n  content: \"\\f449\"; }\n\n.ion-ios-information:before {\n  content: \"\\f44d\"; }\n\n.ion-ios-information-circle:before {\n  content: \"\\f1a0\"; }\n\n.ion-ios-information-circle-outline:before {\n  content: \"\\f19f\"; }\n\n.ion-ios-ionic:before {\n  content: \"\\f1a1\"; }\n\n.ion-ios-ionic-outline:before {\n  content: \"\\f44e\"; }\n\n.ion-ios-ionitron:before {\n  content: \"\\f1a3\"; }\n\n.ion-ios-ionitron-outline:before {\n  content: \"\\f1a2\"; }\n\n.ion-ios-jet:before {\n  content: \"\\f1a5\"; }\n\n.ion-ios-jet-outline:before {\n  content: \"\\f1a4\"; }\n\n.ion-ios-key:before {\n  content: \"\\f1a7\"; }\n\n.ion-ios-key-outline:before {\n  content: \"\\f1a6\"; }\n\n.ion-ios-keypad:before {\n  content: \"\\f450\"; }\n\n.ion-ios-keypad-outline:before {\n  content: \"\\f44f\"; }\n\n.ion-ios-laptop:before {\n  content: \"\\f1a8\"; }\n\n.ion-ios-leaf:before {\n  content: \"\\f1aa\"; }\n\n.ion-ios-leaf-outline:before {\n  content: \"\\f1a9\"; }\n\n.ion-ios-list:before {\n  content: \"\\f454\"; }\n\n.ion-ios-list-box:before {\n  content: \"\\f1ac\"; }\n\n.ion-ios-list-box-outline:before {\n  content: \"\\f1ab\"; }\n\n.ion-ios-locate:before {\n  content: \"\\f1ae\"; }\n\n.ion-ios-locate-outline:before {\n  content: \"\\f1ad\"; }\n\n.ion-ios-lock:before {\n  content: \"\\f1b0\"; }\n\n.ion-ios-lock-outline:before {\n  content: \"\\f1af\"; }\n\n.ion-ios-log-in:before {\n  content: \"\\f1b1\"; }\n\n.ion-ios-log-out:before {\n  content: \"\\f1b2\"; }\n\n.ion-ios-magnet:before {\n  content: \"\\f1b4\"; }\n\n.ion-ios-magnet-outline:before {\n  content: \"\\f1b3\"; }\n\n.ion-ios-mail:before {\n  content: \"\\f1b8\"; }\n\n.ion-ios-mail-open:before {\n  content: \"\\f1b6\"; }\n\n.ion-ios-mail-open-outline:before {\n  content: \"\\f1b5\"; }\n\n.ion-ios-mail-outline:before {\n  content: \"\\f1b7\"; }\n\n.ion-ios-male:before {\n  content: \"\\f1b9\"; }\n\n.ion-ios-man:before {\n  content: \"\\f1bb\"; }\n\n.ion-ios-man-outline:before {\n  content: \"\\f1ba\"; }\n\n.ion-ios-map:before {\n  content: \"\\f1bd\"; }\n\n.ion-ios-map-outline:before {\n  content: \"\\f1bc\"; }\n\n.ion-ios-medal:before {\n  content: \"\\f1bf\"; }\n\n.ion-ios-medal-outline:before {\n  content: \"\\f1be\"; }\n\n.ion-ios-medical:before {\n  content: \"\\f45c\"; }\n\n.ion-ios-medical-outline:before {\n  content: \"\\f45b\"; }\n\n.ion-ios-medkit:before {\n  content: \"\\f45e\"; }\n\n.ion-ios-medkit-outline:before {\n  content: \"\\f45d\"; }\n\n.ion-ios-megaphone:before {\n  content: \"\\f1c1\"; }\n\n.ion-ios-megaphone-outline:before {\n  content: \"\\f1c0\"; }\n\n.ion-ios-menu:before {\n  content: \"\\f1c3\"; }\n\n.ion-ios-menu-outline:before {\n  content: \"\\f1c2\"; }\n\n.ion-ios-mic:before {\n  content: \"\\f461\"; }\n\n.ion-ios-mic-off:before {\n  content: \"\\f45f\"; }\n\n.ion-ios-mic-off-outline:before {\n  content: \"\\f1c4\"; }\n\n.ion-ios-mic-outline:before {\n  content: \"\\f460\"; }\n\n.ion-ios-microphone:before {\n  content: \"\\f1c6\"; }\n\n.ion-ios-microphone-outline:before {\n  content: \"\\f1c5\"; }\n\n.ion-ios-moon:before {\n  content: \"\\f468\"; }\n\n.ion-ios-moon-outline:before {\n  content: \"\\f467\"; }\n\n.ion-ios-more:before {\n  content: \"\\f1c8\"; }\n\n.ion-ios-more-outline:before {\n  content: \"\\f1c7\"; }\n\n.ion-ios-move:before {\n  content: \"\\f1cb\"; }\n\n.ion-ios-musical-note:before {\n  content: \"\\f46b\"; }\n\n.ion-ios-musical-note-outline:before {\n  content: \"\\f1cc\"; }\n\n.ion-ios-musical-notes:before {\n  content: \"\\f46c\"; }\n\n.ion-ios-musical-notes-outline:before {\n  content: \"\\f1cd\"; }\n\n.ion-ios-navigate:before {\n  content: \"\\f46e\"; }\n\n.ion-ios-navigate-outline:before {\n  content: \"\\f46d\"; }\n\n.ion-ios-no-smoking:before {\n  content: \"\\f1cf\"; }\n\n.ion-ios-no-smoking-outline:before {\n  content: \"\\f1ce\"; }\n\n.ion-ios-notifications:before {\n  content: \"\\f1d3\"; }\n\n.ion-ios-notifications-off:before {\n  content: \"\\f1d1\"; }\n\n.ion-ios-notifications-off-outline:before {\n  content: \"\\f1d0\"; }\n\n.ion-ios-notifications-outline:before {\n  content: \"\\f1d2\"; }\n\n.ion-ios-nuclear:before {\n  content: \"\\f1d5\"; }\n\n.ion-ios-nuclear-outline:before {\n  content: \"\\f1d4\"; }\n\n.ion-ios-nutrition:before {\n  content: \"\\f470\"; }\n\n.ion-ios-nutrition-outline:before {\n  content: \"\\f46f\"; }\n\n.ion-ios-open:before {\n  content: \"\\f1d7\"; }\n\n.ion-ios-open-outline:before {\n  content: \"\\f1d6\"; }\n\n.ion-ios-options:before {\n  content: \"\\f1d9\"; }\n\n.ion-ios-options-outline:before {\n  content: \"\\f1d8\"; }\n\n.ion-ios-outlet:before {\n  content: \"\\f1db\"; }\n\n.ion-ios-outlet-outline:before {\n  content: \"\\f1da\"; }\n\n.ion-ios-paper:before {\n  content: \"\\f472\"; }\n\n.ion-ios-paper-outline:before {\n  content: \"\\f471\"; }\n\n.ion-ios-paper-plane:before {\n  content: \"\\f1dd\"; }\n\n.ion-ios-paper-plane-outline:before {\n  content: \"\\f1dc\"; }\n\n.ion-ios-partly-sunny:before {\n  content: \"\\f1df\"; }\n\n.ion-ios-partly-sunny-outline:before {\n  content: \"\\f1de\"; }\n\n.ion-ios-pause:before {\n  content: \"\\f478\"; }\n\n.ion-ios-pause-outline:before {\n  content: \"\\f477\"; }\n\n.ion-ios-paw:before {\n  content: \"\\f47a\"; }\n\n.ion-ios-paw-outline:before {\n  content: \"\\f479\"; }\n\n.ion-ios-people:before {\n  content: \"\\f47c\"; }\n\n.ion-ios-people-outline:before {\n  content: \"\\f47b\"; }\n\n.ion-ios-person:before {\n  content: \"\\f47e\"; }\n\n.ion-ios-person-add:before {\n  content: \"\\f1e1\"; }\n\n.ion-ios-person-add-outline:before {\n  content: \"\\f1e0\"; }\n\n.ion-ios-person-outline:before {\n  content: \"\\f47d\"; }\n\n.ion-ios-phone-landscape:before {\n  content: \"\\f1e2\"; }\n\n.ion-ios-phone-portrait:before {\n  content: \"\\f1e3\"; }\n\n.ion-ios-photos:before {\n  content: \"\\f482\"; }\n\n.ion-ios-photos-outline:before {\n  content: \"\\f481\"; }\n\n.ion-ios-pie:before {\n  content: \"\\f484\"; }\n\n.ion-ios-pie-outline:before {\n  content: \"\\f483\"; }\n\n.ion-ios-pin:before {\n  content: \"\\f1e5\"; }\n\n.ion-ios-pin-outline:before {\n  content: \"\\f1e4\"; }\n\n.ion-ios-pint:before {\n  content: \"\\f486\"; }\n\n.ion-ios-pint-outline:before {\n  content: \"\\f485\"; }\n\n.ion-ios-pizza:before {\n  content: \"\\f1e7\"; }\n\n.ion-ios-pizza-outline:before {\n  content: \"\\f1e6\"; }\n\n.ion-ios-plane:before {\n  content: \"\\f1e9\"; }\n\n.ion-ios-plane-outline:before {\n  content: \"\\f1e8\"; }\n\n.ion-ios-planet:before {\n  content: \"\\f1eb\"; }\n\n.ion-ios-planet-outline:before {\n  content: \"\\f1ea\"; }\n\n.ion-ios-play:before {\n  content: \"\\f488\"; }\n\n.ion-ios-play-outline:before {\n  content: \"\\f487\"; }\n\n.ion-ios-podium:before {\n  content: \"\\f1ed\"; }\n\n.ion-ios-podium-outline:before {\n  content: \"\\f1ec\"; }\n\n.ion-ios-power:before {\n  content: \"\\f1ef\"; }\n\n.ion-ios-power-outline:before {\n  content: \"\\f1ee\"; }\n\n.ion-ios-pricetag:before {\n  content: \"\\f48d\"; }\n\n.ion-ios-pricetag-outline:before {\n  content: \"\\f48c\"; }\n\n.ion-ios-pricetags:before {\n  content: \"\\f48f\"; }\n\n.ion-ios-pricetags-outline:before {\n  content: \"\\f48e\"; }\n\n.ion-ios-print:before {\n  content: \"\\f1f1\"; }\n\n.ion-ios-print-outline:before {\n  content: \"\\f1f0\"; }\n\n.ion-ios-pulse:before {\n  content: \"\\f493\"; }\n\n.ion-ios-pulse-outline:before {\n  content: \"\\f1f2\"; }\n\n.ion-ios-qr-scanner:before {\n  content: \"\\f1f3\"; }\n\n.ion-ios-quote:before {\n  content: \"\\f1f5\"; }\n\n.ion-ios-quote-outline:before {\n  content: \"\\f1f4\"; }\n\n.ion-ios-radio:before {\n  content: \"\\f1f9\"; }\n\n.ion-ios-radio-button-off:before {\n  content: \"\\f1f6\"; }\n\n.ion-ios-radio-button-on:before {\n  content: \"\\f1f7\"; }\n\n.ion-ios-radio-outline:before {\n  content: \"\\f1f8\"; }\n\n.ion-ios-rainy:before {\n  content: \"\\f495\"; }\n\n.ion-ios-rainy-outline:before {\n  content: \"\\f494\"; }\n\n.ion-ios-recording:before {\n  content: \"\\f497\"; }\n\n.ion-ios-recording-outline:before {\n  content: \"\\f496\"; }\n\n.ion-ios-redo:before {\n  content: \"\\f499\"; }\n\n.ion-ios-redo-outline:before {\n  content: \"\\f498\"; }\n\n.ion-ios-refresh:before {\n  content: \"\\f49c\"; }\n\n.ion-ios-refresh-circle:before {\n  content: \"\\f226\"; }\n\n.ion-ios-refresh-circle-outline:before {\n  content: \"\\f224\"; }\n\n.ion-ios-remove:before {\n  content: \"\\f1fc\"; }\n\n.ion-ios-remove-circle:before {\n  content: \"\\f1fb\"; }\n\n.ion-ios-remove-circle-outline:before {\n  content: \"\\f1fa\"; }\n\n.ion-ios-reorder:before {\n  content: \"\\f1fd\"; }\n\n.ion-ios-repeat:before {\n  content: \"\\f1fe\"; }\n\n.ion-ios-resize:before {\n  content: \"\\f1ff\"; }\n\n.ion-ios-restaurant:before {\n  content: \"\\f201\"; }\n\n.ion-ios-restaurant-outline:before {\n  content: \"\\f200\"; }\n\n.ion-ios-return-left:before {\n  content: \"\\f202\"; }\n\n.ion-ios-return-right:before {\n  content: \"\\f203\"; }\n\n.ion-ios-reverse-camera:before {\n  content: \"\\f49f\"; }\n\n.ion-ios-reverse-camera-outline:before {\n  content: \"\\f49e\"; }\n\n.ion-ios-rewind:before {\n  content: \"\\f4a1\"; }\n\n.ion-ios-rewind-outline:before {\n  content: \"\\f4a0\"; }\n\n.ion-ios-ribbon:before {\n  content: \"\\f205\"; }\n\n.ion-ios-ribbon-outline:before {\n  content: \"\\f204\"; }\n\n.ion-ios-rose:before {\n  content: \"\\f4a3\"; }\n\n.ion-ios-rose-outline:before {\n  content: \"\\f4a2\"; }\n\n.ion-ios-sad:before {\n  content: \"\\f207\"; }\n\n.ion-ios-sad-outline:before {\n  content: \"\\f206\"; }\n\n.ion-ios-school:before {\n  content: \"\\f209\"; }\n\n.ion-ios-school-outline:before {\n  content: \"\\f208\"; }\n\n.ion-ios-search:before {\n  content: \"\\f4a5\"; }\n\n.ion-ios-search-outline:before {\n  content: \"\\f20a\"; }\n\n.ion-ios-send:before {\n  content: \"\\f20c\"; }\n\n.ion-ios-send-outline:before {\n  content: \"\\f20b\"; }\n\n.ion-ios-settings:before {\n  content: \"\\f4a7\"; }\n\n.ion-ios-settings-outline:before {\n  content: \"\\f20d\"; }\n\n.ion-ios-share:before {\n  content: \"\\f211\"; }\n\n.ion-ios-share-alt:before {\n  content: \"\\f20f\"; }\n\n.ion-ios-share-alt-outline:before {\n  content: \"\\f20e\"; }\n\n.ion-ios-share-outline:before {\n  content: \"\\f210\"; }\n\n.ion-ios-shirt:before {\n  content: \"\\f213\"; }\n\n.ion-ios-shirt-outline:before {\n  content: \"\\f212\"; }\n\n.ion-ios-shuffle:before {\n  content: \"\\f4a9\"; }\n\n.ion-ios-skip-backward:before {\n  content: \"\\f215\"; }\n\n.ion-ios-skip-backward-outline:before {\n  content: \"\\f214\"; }\n\n.ion-ios-skip-forward:before {\n  content: \"\\f217\"; }\n\n.ion-ios-skip-forward-outline:before {\n  content: \"\\f216\"; }\n\n.ion-ios-snow:before {\n  content: \"\\f218\"; }\n\n.ion-ios-snow-outline:before {\n  content: \"\\f45a\"; }\n\n.ion-ios-speedometer:before {\n  content: \"\\f4b0\"; }\n\n.ion-ios-speedometer-outline:before {\n  content: \"\\f4af\"; }\n\n.ion-ios-square:before {\n  content: \"\\f21a\"; }\n\n.ion-ios-square-outline:before {\n  content: \"\\f219\"; }\n\n.ion-ios-star:before {\n  content: \"\\f4b3\"; }\n\n.ion-ios-star-half:before {\n  content: \"\\f4b1\"; }\n\n.ion-ios-star-outline:before {\n  content: \"\\f4b2\"; }\n\n.ion-ios-stats:before {\n  content: \"\\f21c\"; }\n\n.ion-ios-stats-outline:before {\n  content: \"\\f21b\"; }\n\n.ion-ios-stopwatch:before {\n  content: \"\\f4b5\"; }\n\n.ion-ios-stopwatch-outline:before {\n  content: \"\\f4b4\"; }\n\n.ion-ios-subway:before {\n  content: \"\\f21e\"; }\n\n.ion-ios-subway-outline:before {\n  content: \"\\f21d\"; }\n\n.ion-ios-sunny:before {\n  content: \"\\f4b7\"; }\n\n.ion-ios-sunny-outline:before {\n  content: \"\\f4b6\"; }\n\n.ion-ios-swap:before {\n  content: \"\\f21f\"; }\n\n.ion-ios-switch:before {\n  content: \"\\f221\"; }\n\n.ion-ios-switch-outline:before {\n  content: \"\\f220\"; }\n\n.ion-ios-sync:before {\n  content: \"\\f222\"; }\n\n.ion-ios-tablet-landscape:before {\n  content: \"\\f223\"; }\n\n.ion-ios-tablet-portrait:before {\n  content: \"\\f24e\"; }\n\n.ion-ios-tennisball:before {\n  content: \"\\f4bb\"; }\n\n.ion-ios-tennisball-outline:before {\n  content: \"\\f4ba\"; }\n\n.ion-ios-text:before {\n  content: \"\\f250\"; }\n\n.ion-ios-text-outline:before {\n  content: \"\\f24f\"; }\n\n.ion-ios-thermometer:before {\n  content: \"\\f252\"; }\n\n.ion-ios-thermometer-outline:before {\n  content: \"\\f251\"; }\n\n.ion-ios-thumbs-down:before {\n  content: \"\\f254\"; }\n\n.ion-ios-thumbs-down-outline:before {\n  content: \"\\f253\"; }\n\n.ion-ios-thumbs-up:before {\n  content: \"\\f256\"; }\n\n.ion-ios-thumbs-up-outline:before {\n  content: \"\\f255\"; }\n\n.ion-ios-thunderstorm:before {\n  content: \"\\f4bd\"; }\n\n.ion-ios-thunderstorm-outline:before {\n  content: \"\\f4bc\"; }\n\n.ion-ios-time:before {\n  content: \"\\f4bf\"; }\n\n.ion-ios-time-outline:before {\n  content: \"\\f4be\"; }\n\n.ion-ios-timer:before {\n  content: \"\\f4c1\"; }\n\n.ion-ios-timer-outline:before {\n  content: \"\\f4c0\"; }\n\n.ion-ios-train:before {\n  content: \"\\f258\"; }\n\n.ion-ios-train-outline:before {\n  content: \"\\f257\"; }\n\n.ion-ios-transgender:before {\n  content: \"\\f259\"; }\n\n.ion-ios-trash:before {\n  content: \"\\f4c5\"; }\n\n.ion-ios-trash-outline:before {\n  content: \"\\f4c4\"; }\n\n.ion-ios-trending-down:before {\n  content: \"\\f25a\"; }\n\n.ion-ios-trending-up:before {\n  content: \"\\f25b\"; }\n\n.ion-ios-trophy:before {\n  content: \"\\f25d\"; }\n\n.ion-ios-trophy-outline:before {\n  content: \"\\f25c\"; }\n\n.ion-ios-umbrella:before {\n  content: \"\\f25f\"; }\n\n.ion-ios-umbrella-outline:before {\n  content: \"\\f25e\"; }\n\n.ion-ios-undo:before {\n  content: \"\\f4c7\"; }\n\n.ion-ios-undo-outline:before {\n  content: \"\\f4c6\"; }\n\n.ion-ios-unlock:before {\n  content: \"\\f261\"; }\n\n.ion-ios-unlock-outline:before {\n  content: \"\\f260\"; }\n\n.ion-ios-videocam:before {\n  content: \"\\f4cd\"; }\n\n.ion-ios-videocam-outline:before {\n  content: \"\\f4cc\"; }\n\n.ion-ios-volume-down:before {\n  content: \"\\f262\"; }\n\n.ion-ios-volume-mute:before {\n  content: \"\\f263\"; }\n\n.ion-ios-volume-off:before {\n  content: \"\\f264\"; }\n\n.ion-ios-volume-up:before {\n  content: \"\\f265\"; }\n\n.ion-ios-walk:before {\n  content: \"\\f266\"; }\n\n.ion-ios-warning:before {\n  content: \"\\f268\"; }\n\n.ion-ios-warning-outline:before {\n  content: \"\\f267\"; }\n\n.ion-ios-watch:before {\n  content: \"\\f269\"; }\n\n.ion-ios-water:before {\n  content: \"\\f26b\"; }\n\n.ion-ios-water-outline:before {\n  content: \"\\f26a\"; }\n\n.ion-ios-wifi:before {\n  content: \"\\f26d\"; }\n\n.ion-ios-wifi-outline:before {\n  content: \"\\f26c\"; }\n\n.ion-ios-wine:before {\n  content: \"\\f26f\"; }\n\n.ion-ios-wine-outline:before {\n  content: \"\\f26e\"; }\n\n.ion-ios-woman:before {\n  content: \"\\f271\"; }\n\n.ion-ios-woman-outline:before {\n  content: \"\\f270\"; }\n\n.ion-md-add:before {\n  content: \"\\f273\"; }\n\n.ion-md-add-circle:before {\n  content: \"\\f272\"; }\n\n.ion-md-alarm:before {\n  content: \"\\f274\"; }\n\n.ion-md-albums:before {\n  content: \"\\f275\"; }\n\n.ion-md-alert:before {\n  content: \"\\f276\"; }\n\n.ion-md-american-football:before {\n  content: \"\\f277\"; }\n\n.ion-md-analytics:before {\n  content: \"\\f278\"; }\n\n.ion-md-aperture:before {\n  content: \"\\f279\"; }\n\n.ion-md-apps:before {\n  content: \"\\f27a\"; }\n\n.ion-md-appstore:before {\n  content: \"\\f27b\"; }\n\n.ion-md-archive:before {\n  content: \"\\f27c\"; }\n\n.ion-md-arrow-back:before {\n  content: \"\\f27d\"; }\n\n.ion-md-arrow-down:before {\n  content: \"\\f27e\"; }\n\n.ion-md-arrow-dropdown:before {\n  content: \"\\f280\"; }\n\n.ion-md-arrow-dropdown-circle:before {\n  content: \"\\f27f\"; }\n\n.ion-md-arrow-dropleft:before {\n  content: \"\\f282\"; }\n\n.ion-md-arrow-dropleft-circle:before {\n  content: \"\\f281\"; }\n\n.ion-md-arrow-dropright:before {\n  content: \"\\f284\"; }\n\n.ion-md-arrow-dropright-circle:before {\n  content: \"\\f283\"; }\n\n.ion-md-arrow-dropup:before {\n  content: \"\\f286\"; }\n\n.ion-md-arrow-dropup-circle:before {\n  content: \"\\f285\"; }\n\n.ion-md-arrow-forward:before {\n  content: \"\\f287\"; }\n\n.ion-md-arrow-round-back:before {\n  content: \"\\f288\"; }\n\n.ion-md-arrow-round-down:before {\n  content: \"\\f289\"; }\n\n.ion-md-arrow-round-forward:before {\n  content: \"\\f28a\"; }\n\n.ion-md-arrow-round-up:before {\n  content: \"\\f28b\"; }\n\n.ion-md-arrow-up:before {\n  content: \"\\f28c\"; }\n\n.ion-md-at:before {\n  content: \"\\f28d\"; }\n\n.ion-md-attach:before {\n  content: \"\\f28e\"; }\n\n.ion-md-backspace:before {\n  content: \"\\f28f\"; }\n\n.ion-md-barcode:before {\n  content: \"\\f290\"; }\n\n.ion-md-baseball:before {\n  content: \"\\f291\"; }\n\n.ion-md-basket:before {\n  content: \"\\f292\"; }\n\n.ion-md-basketball:before {\n  content: \"\\f293\"; }\n\n.ion-md-battery-charging:before {\n  content: \"\\f294\"; }\n\n.ion-md-battery-dead:before {\n  content: \"\\f295\"; }\n\n.ion-md-battery-full:before {\n  content: \"\\f296\"; }\n\n.ion-md-beaker:before {\n  content: \"\\f297\"; }\n\n.ion-md-beer:before {\n  content: \"\\f298\"; }\n\n.ion-md-bicycle:before {\n  content: \"\\f299\"; }\n\n.ion-md-bluetooth:before {\n  content: \"\\f29a\"; }\n\n.ion-md-boat:before {\n  content: \"\\f29b\"; }\n\n.ion-md-body:before {\n  content: \"\\f29c\"; }\n\n.ion-md-bonfire:before {\n  content: \"\\f29d\"; }\n\n.ion-md-book:before {\n  content: \"\\f29e\"; }\n\n.ion-md-bookmark:before {\n  content: \"\\f29f\"; }\n\n.ion-md-bookmarks:before {\n  content: \"\\f2a0\"; }\n\n.ion-md-bowtie:before {\n  content: \"\\f2a1\"; }\n\n.ion-md-briefcase:before {\n  content: \"\\f2a2\"; }\n\n.ion-md-browsers:before {\n  content: \"\\f2a3\"; }\n\n.ion-md-brush:before {\n  content: \"\\f2a4\"; }\n\n.ion-md-bug:before {\n  content: \"\\f2a5\"; }\n\n.ion-md-build:before {\n  content: \"\\f2a6\"; }\n\n.ion-md-bulb:before {\n  content: \"\\f2a7\"; }\n\n.ion-md-bus:before {\n  content: \"\\f2a8\"; }\n\n.ion-md-cafe:before {\n  content: \"\\f2a9\"; }\n\n.ion-md-calculator:before {\n  content: \"\\f2aa\"; }\n\n.ion-md-calendar:before {\n  content: \"\\f2ab\"; }\n\n.ion-md-call:before {\n  content: \"\\f2ac\"; }\n\n.ion-md-camera:before {\n  content: \"\\f2ad\"; }\n\n.ion-md-car:before {\n  content: \"\\f2b2\"; }\n\n.ion-md-card:before {\n  content: \"\\f2b3\"; }\n\n.ion-md-cart:before {\n  content: \"\\f2b4\"; }\n\n.ion-md-cash:before {\n  content: \"\\f2b5\"; }\n\n.ion-md-chatboxes:before {\n  content: \"\\f2b6\"; }\n\n.ion-md-chatbubbles:before {\n  content: \"\\f2b7\"; }\n\n.ion-md-checkbox:before {\n  content: \"\\f2b9\"; }\n\n.ion-md-checkbox-outline:before {\n  content: \"\\f2b8\"; }\n\n.ion-md-checkmark:before {\n  content: \"\\f2bc\"; }\n\n.ion-md-checkmark-circle:before {\n  content: \"\\f2bb\"; }\n\n.ion-md-checkmark-circle-outline:before {\n  content: \"\\f2ba\"; }\n\n.ion-md-clipboard:before {\n  content: \"\\f2bd\"; }\n\n.ion-md-clock:before {\n  content: \"\\f2be\"; }\n\n.ion-md-close:before {\n  content: \"\\f2c0\"; }\n\n.ion-md-close-circle:before {\n  content: \"\\f2bf\"; }\n\n.ion-md-closed-captioning:before {\n  content: \"\\f2c1\"; }\n\n.ion-md-cloud:before {\n  content: \"\\f2c9\"; }\n\n.ion-md-cloud-circle:before {\n  content: \"\\f2c2\"; }\n\n.ion-md-cloud-done:before {\n  content: \"\\f2c3\"; }\n\n.ion-md-cloud-download:before {\n  content: \"\\f2c6\"; }\n\n.ion-md-cloud-outline:before {\n  content: \"\\f2c7\"; }\n\n.ion-md-cloud-upload:before {\n  content: \"\\f2c8\"; }\n\n.ion-md-cloudy:before {\n  content: \"\\f2cb\"; }\n\n.ion-md-cloudy-night:before {\n  content: \"\\f2ca\"; }\n\n.ion-md-code:before {\n  content: \"\\f2ce\"; }\n\n.ion-md-code-download:before {\n  content: \"\\f2cc\"; }\n\n.ion-md-code-working:before {\n  content: \"\\f2cd\"; }\n\n.ion-md-cog:before {\n  content: \"\\f2cf\"; }\n\n.ion-md-color-fill:before {\n  content: \"\\f2d0\"; }\n\n.ion-md-color-filter:before {\n  content: \"\\f2d1\"; }\n\n.ion-md-color-palette:before {\n  content: \"\\f2d2\"; }\n\n.ion-md-color-wand:before {\n  content: \"\\f2d3\"; }\n\n.ion-md-compass:before {\n  content: \"\\f2d4\"; }\n\n.ion-md-construct:before {\n  content: \"\\f2d5\"; }\n\n.ion-md-contact:before {\n  content: \"\\f2d6\"; }\n\n.ion-md-contacts:before {\n  content: \"\\f2d7\"; }\n\n.ion-md-contract:before {\n  content: \"\\f2d8\"; }\n\n.ion-md-contrast:before {\n  content: \"\\f2d9\"; }\n\n.ion-md-copy:before {\n  content: \"\\f2da\"; }\n\n.ion-md-create:before {\n  content: \"\\f2db\"; }\n\n.ion-md-crop:before {\n  content: \"\\f2dc\"; }\n\n.ion-md-cube:before {\n  content: \"\\f2dd\"; }\n\n.ion-md-cut:before {\n  content: \"\\f2de\"; }\n\n.ion-md-desktop:before {\n  content: \"\\f2df\"; }\n\n.ion-md-disc:before {\n  content: \"\\f2e0\"; }\n\n.ion-md-document:before {\n  content: \"\\f2e1\"; }\n\n.ion-md-done-all:before {\n  content: \"\\f2e2\"; }\n\n.ion-md-download:before {\n  content: \"\\f2e3\"; }\n\n.ion-md-easel:before {\n  content: \"\\f2e4\"; }\n\n.ion-md-egg:before {\n  content: \"\\f2e5\"; }\n\n.ion-md-exit:before {\n  content: \"\\f2e6\"; }\n\n.ion-md-expand:before {\n  content: \"\\f2e7\"; }\n\n.ion-md-eye:before {\n  content: \"\\f2e9\"; }\n\n.ion-md-eye-off:before {\n  content: \"\\f2e8\"; }\n\n.ion-md-fastforward:before {\n  content: \"\\f2ea\"; }\n\n.ion-md-female:before {\n  content: \"\\f2eb\"; }\n\n.ion-md-filing:before {\n  content: \"\\f2ec\"; }\n\n.ion-md-film:before {\n  content: \"\\f2ed\"; }\n\n.ion-md-finger-print:before {\n  content: \"\\f2ee\"; }\n\n.ion-md-flag:before {\n  content: \"\\f2ef\"; }\n\n.ion-md-flame:before {\n  content: \"\\f2f0\"; }\n\n.ion-md-flash:before {\n  content: \"\\f2f1\"; }\n\n.ion-md-flask:before {\n  content: \"\\f2f2\"; }\n\n.ion-md-flower:before {\n  content: \"\\f2f3\"; }\n\n.ion-md-folder:before {\n  content: \"\\f2f5\"; }\n\n.ion-md-folder-open:before {\n  content: \"\\f2f4\"; }\n\n.ion-md-football:before {\n  content: \"\\f2f6\"; }\n\n.ion-md-funnel:before {\n  content: \"\\f2f7\"; }\n\n.ion-md-game-controller-a:before {\n  content: \"\\f2f8\"; }\n\n.ion-md-game-controller-b:before {\n  content: \"\\f2f9\"; }\n\n.ion-md-git-branch:before {\n  content: \"\\f2fa\"; }\n\n.ion-md-git-commit:before {\n  content: \"\\f2fb\"; }\n\n.ion-md-git-compare:before {\n  content: \"\\f2fc\"; }\n\n.ion-md-git-merge:before {\n  content: \"\\f2fd\"; }\n\n.ion-md-git-network:before {\n  content: \"\\f2fe\"; }\n\n.ion-md-git-pull-request:before {\n  content: \"\\f2ff\"; }\n\n.ion-md-glasses:before {\n  content: \"\\f300\"; }\n\n.ion-md-globe:before {\n  content: \"\\f301\"; }\n\n.ion-md-grid:before {\n  content: \"\\f302\"; }\n\n.ion-md-hammer:before {\n  content: \"\\f303\"; }\n\n.ion-md-hand:before {\n  content: \"\\f304\"; }\n\n.ion-md-happy:before {\n  content: \"\\f305\"; }\n\n.ion-md-headset:before {\n  content: \"\\f306\"; }\n\n.ion-md-heart:before {\n  content: \"\\f308\"; }\n\n.ion-md-heart-outline:before {\n  content: \"\\f307\"; }\n\n.ion-md-help:before {\n  content: \"\\f30b\"; }\n\n.ion-md-help-buoy:before {\n  content: \"\\f309\"; }\n\n.ion-md-help-circle:before {\n  content: \"\\f30a\"; }\n\n.ion-md-home:before {\n  content: \"\\f30c\"; }\n\n.ion-md-ice-cream:before {\n  content: \"\\f30d\"; }\n\n.ion-md-image:before {\n  content: \"\\f30e\"; }\n\n.ion-md-images:before {\n  content: \"\\f30f\"; }\n\n.ion-md-infinite:before {\n  content: \"\\f310\"; }\n\n.ion-md-information:before {\n  content: \"\\f312\"; }\n\n.ion-md-information-circle:before {\n  content: \"\\f311\"; }\n\n.ion-md-ionic:before {\n  content: \"\\f313\"; }\n\n.ion-md-ionitron:before {\n  content: \"\\f314\"; }\n\n.ion-md-jet:before {\n  content: \"\\f315\"; }\n\n.ion-md-key:before {\n  content: \"\\f316\"; }\n\n.ion-md-keypad:before {\n  content: \"\\f317\"; }\n\n.ion-md-laptop:before {\n  content: \"\\f318\"; }\n\n.ion-md-leaf:before {\n  content: \"\\f319\"; }\n\n.ion-md-list:before {\n  content: \"\\f31b\"; }\n\n.ion-md-list-box:before {\n  content: \"\\f31a\"; }\n\n.ion-md-locate:before {\n  content: \"\\f31c\"; }\n\n.ion-md-lock:before {\n  content: \"\\f31d\"; }\n\n.ion-md-log-in:before {\n  content: \"\\f31e\"; }\n\n.ion-md-log-out:before {\n  content: \"\\f31f\"; }\n\n.ion-md-magnet:before {\n  content: \"\\f320\"; }\n\n.ion-md-mail:before {\n  content: \"\\f322\"; }\n\n.ion-md-mail-open:before {\n  content: \"\\f321\"; }\n\n.ion-md-male:before {\n  content: \"\\f323\"; }\n\n.ion-md-man:before {\n  content: \"\\f324\"; }\n\n.ion-md-map:before {\n  content: \"\\f325\"; }\n\n.ion-md-medal:before {\n  content: \"\\f326\"; }\n\n.ion-md-medical:before {\n  content: \"\\f327\"; }\n\n.ion-md-medkit:before {\n  content: \"\\f328\"; }\n\n.ion-md-megaphone:before {\n  content: \"\\f329\"; }\n\n.ion-md-menu:before {\n  content: \"\\f32a\"; }\n\n.ion-md-mic:before {\n  content: \"\\f32c\"; }\n\n.ion-md-mic-off:before {\n  content: \"\\f32b\"; }\n\n.ion-md-microphone:before {\n  content: \"\\f32d\"; }\n\n.ion-md-moon:before {\n  content: \"\\f32e\"; }\n\n.ion-md-more:before {\n  content: \"\\f1c9\"; }\n\n.ion-md-move:before {\n  content: \"\\f331\"; }\n\n.ion-md-musical-note:before {\n  content: \"\\f332\"; }\n\n.ion-md-musical-notes:before {\n  content: \"\\f333\"; }\n\n.ion-md-navigate:before {\n  content: \"\\f334\"; }\n\n.ion-md-no-smoking:before {\n  content: \"\\f335\"; }\n\n.ion-md-notifications:before {\n  content: \"\\f338\"; }\n\n.ion-md-notifications-off:before {\n  content: \"\\f336\"; }\n\n.ion-md-notifications-outline:before {\n  content: \"\\f337\"; }\n\n.ion-md-nuclear:before {\n  content: \"\\f339\"; }\n\n.ion-md-nutrition:before {\n  content: \"\\f33a\"; }\n\n.ion-md-open:before {\n  content: \"\\f33b\"; }\n\n.ion-md-options:before {\n  content: \"\\f33c\"; }\n\n.ion-md-outlet:before {\n  content: \"\\f33d\"; }\n\n.ion-md-paper:before {\n  content: \"\\f33f\"; }\n\n.ion-md-paper-plane:before {\n  content: \"\\f33e\"; }\n\n.ion-md-partly-sunny:before {\n  content: \"\\f340\"; }\n\n.ion-md-pause:before {\n  content: \"\\f341\"; }\n\n.ion-md-paw:before {\n  content: \"\\f342\"; }\n\n.ion-md-people:before {\n  content: \"\\f343\"; }\n\n.ion-md-person:before {\n  content: \"\\f345\"; }\n\n.ion-md-person-add:before {\n  content: \"\\f344\"; }\n\n.ion-md-phone-landscape:before {\n  content: \"\\f346\"; }\n\n.ion-md-phone-portrait:before {\n  content: \"\\f347\"; }\n\n.ion-md-photos:before {\n  content: \"\\f348\"; }\n\n.ion-md-pie:before {\n  content: \"\\f349\"; }\n\n.ion-md-pin:before {\n  content: \"\\f34a\"; }\n\n.ion-md-pint:before {\n  content: \"\\f34b\"; }\n\n.ion-md-pizza:before {\n  content: \"\\f354\"; }\n\n.ion-md-plane:before {\n  content: \"\\f355\"; }\n\n.ion-md-planet:before {\n  content: \"\\f356\"; }\n\n.ion-md-play:before {\n  content: \"\\f357\"; }\n\n.ion-md-podium:before {\n  content: \"\\f358\"; }\n\n.ion-md-power:before {\n  content: \"\\f359\"; }\n\n.ion-md-pricetag:before {\n  content: \"\\f35a\"; }\n\n.ion-md-pricetags:before {\n  content: \"\\f35b\"; }\n\n.ion-md-print:before {\n  content: \"\\f35c\"; }\n\n.ion-md-pulse:before {\n  content: \"\\f35d\"; }\n\n.ion-md-qr-scanner:before {\n  content: \"\\f35e\"; }\n\n.ion-md-quote:before {\n  content: \"\\f35f\"; }\n\n.ion-md-radio:before {\n  content: \"\\f362\"; }\n\n.ion-md-radio-button-off:before {\n  content: \"\\f360\"; }\n\n.ion-md-radio-button-on:before {\n  content: \"\\f361\"; }\n\n.ion-md-rainy:before {\n  content: \"\\f363\"; }\n\n.ion-md-recording:before {\n  content: \"\\f364\"; }\n\n.ion-md-redo:before {\n  content: \"\\f365\"; }\n\n.ion-md-refresh:before {\n  content: \"\\f366\"; }\n\n.ion-md-refresh-circle:before {\n  content: \"\\f228\"; }\n\n.ion-md-remove:before {\n  content: \"\\f368\"; }\n\n.ion-md-remove-circle:before {\n  content: \"\\f367\"; }\n\n.ion-md-reorder:before {\n  content: \"\\f369\"; }\n\n.ion-md-repeat:before {\n  content: \"\\f36a\"; }\n\n.ion-md-resize:before {\n  content: \"\\f36b\"; }\n\n.ion-md-restaurant:before {\n  content: \"\\f36c\"; }\n\n.ion-md-return-left:before {\n  content: \"\\f36d\"; }\n\n.ion-md-return-right:before {\n  content: \"\\f36e\"; }\n\n.ion-md-reverse-camera:before {\n  content: \"\\f36f\"; }\n\n.ion-md-rewind:before {\n  content: \"\\f370\"; }\n\n.ion-md-ribbon:before {\n  content: \"\\f371\"; }\n\n.ion-md-rose:before {\n  content: \"\\f372\"; }\n\n.ion-md-sad:before {\n  content: \"\\f373\"; }\n\n.ion-md-school:before {\n  content: \"\\f374\"; }\n\n.ion-md-search:before {\n  content: \"\\f375\"; }\n\n.ion-md-send:before {\n  content: \"\\f376\"; }\n\n.ion-md-settings:before {\n  content: \"\\f377\"; }\n\n.ion-md-share:before {\n  content: \"\\f379\"; }\n\n.ion-md-share-alt:before {\n  content: \"\\f378\"; }\n\n.ion-md-shirt:before {\n  content: \"\\f37a\"; }\n\n.ion-md-shuffle:before {\n  content: \"\\f37b\"; }\n\n.ion-md-skip-backward:before {\n  content: \"\\f37c\"; }\n\n.ion-md-skip-forward:before {\n  content: \"\\f37d\"; }\n\n.ion-md-snow:before {\n  content: \"\\f37e\"; }\n\n.ion-md-speedometer:before {\n  content: \"\\f37f\"; }\n\n.ion-md-square:before {\n  content: \"\\f381\"; }\n\n.ion-md-square-outline:before {\n  content: \"\\f380\"; }\n\n.ion-md-star:before {\n  content: \"\\f384\"; }\n\n.ion-md-star-half:before {\n  content: \"\\f382\"; }\n\n.ion-md-star-outline:before {\n  content: \"\\f383\"; }\n\n.ion-md-stats:before {\n  content: \"\\f385\"; }\n\n.ion-md-stopwatch:before {\n  content: \"\\f386\"; }\n\n.ion-md-subway:before {\n  content: \"\\f387\"; }\n\n.ion-md-sunny:before {\n  content: \"\\f388\"; }\n\n.ion-md-swap:before {\n  content: \"\\f389\"; }\n\n.ion-md-switch:before {\n  content: \"\\f38a\"; }\n\n.ion-md-sync:before {\n  content: \"\\f38b\"; }\n\n.ion-md-tablet-landscape:before {\n  content: \"\\f38c\"; }\n\n.ion-md-tablet-portrait:before {\n  content: \"\\f38d\"; }\n\n.ion-md-tennisball:before {\n  content: \"\\f38e\"; }\n\n.ion-md-text:before {\n  content: \"\\f38f\"; }\n\n.ion-md-thermometer:before {\n  content: \"\\f390\"; }\n\n.ion-md-thumbs-down:before {\n  content: \"\\f391\"; }\n\n.ion-md-thumbs-up:before {\n  content: \"\\f392\"; }\n\n.ion-md-thunderstorm:before {\n  content: \"\\f393\"; }\n\n.ion-md-time:before {\n  content: \"\\f394\"; }\n\n.ion-md-timer:before {\n  content: \"\\f395\"; }\n\n.ion-md-train:before {\n  content: \"\\f396\"; }\n\n.ion-md-transgender:before {\n  content: \"\\f397\"; }\n\n.ion-md-trash:before {\n  content: \"\\f398\"; }\n\n.ion-md-trending-down:before {\n  content: \"\\f399\"; }\n\n.ion-md-trending-up:before {\n  content: \"\\f39a\"; }\n\n.ion-md-trophy:before {\n  content: \"\\f39b\"; }\n\n.ion-md-umbrella:before {\n  content: \"\\f39c\"; }\n\n.ion-md-undo:before {\n  content: \"\\f39d\"; }\n\n.ion-md-unlock:before {\n  content: \"\\f39e\"; }\n\n.ion-md-videocam:before {\n  content: \"\\f39f\"; }\n\n.ion-md-volume-down:before {\n  content: \"\\f3a0\"; }\n\n.ion-md-volume-mute:before {\n  content: \"\\f3a1\"; }\n\n.ion-md-volume-off:before {\n  content: \"\\f3a2\"; }\n\n.ion-md-volume-up:before {\n  content: \"\\f3a3\"; }\n\n.ion-md-walk:before {\n  content: \"\\f3a4\"; }\n\n.ion-md-warning:before {\n  content: \"\\f3a5\"; }\n\n.ion-md-watch:before {\n  content: \"\\f3a6\"; }\n\n.ion-md-water:before {\n  content: \"\\f3a7\"; }\n\n.ion-md-wifi:before {\n  content: \"\\f3a8\"; }\n\n.ion-md-wine:before {\n  content: \"\\f3a9\"; }\n\n.ion-md-woman:before {\n  content: \"\\f3aa\"; }\n\n.ion-social-android:before {\n  content: \"\\f225\"; }\n\n.ion-social-angular:before {\n  content: \"\\f4d9\"; }\n\n.ion-social-apple:before {\n  content: \"\\f227\"; }\n\n.ion-social-bitcoin:before {\n  content: \"\\f2af\"; }\n\n.ion-social-buffer:before {\n  content: \"\\f229\"; }\n\n.ion-social-chrome:before {\n  content: \"\\f4db\"; }\n\n.ion-social-codepen:before {\n  content: \"\\f4dd\"; }\n\n.ion-social-css3:before {\n  content: \"\\f4df\"; }\n\n.ion-social-designernews:before {\n  content: \"\\f22b\"; }\n\n.ion-social-dribbble:before {\n  content: \"\\f22d\"; }\n\n.ion-social-dropbox:before {\n  content: \"\\f22f\"; }\n\n.ion-social-euro:before {\n  content: \"\\f4e1\"; }\n\n.ion-social-facebook:before {\n  content: \"\\f231\"; }\n\n.ion-social-foursquare:before {\n  content: \"\\f34d\"; }\n\n.ion-social-freebsd-devil:before {\n  content: \"\\f2c4\"; }\n\n.ion-social-github:before {\n  content: \"\\f233\"; }\n\n.ion-social-google:before {\n  content: \"\\f34f\"; }\n\n.ion-social-googleplus:before {\n  content: \"\\f235\"; }\n\n.ion-social-hackernews:before {\n  content: \"\\f237\"; }\n\n.ion-social-html5:before {\n  content: \"\\f4e3\"; }\n\n.ion-social-instagram:before {\n  content: \"\\f351\"; }\n\n.ion-social-javascript:before {\n  content: \"\\f4e5\"; }\n\n.ion-social-linkedin:before {\n  content: \"\\f239\"; }\n\n.ion-social-markdown:before {\n  content: \"\\f4e6\"; }\n\n.ion-social-nodejs:before {\n  content: \"\\f4e7\"; }\n\n.ion-social-octocat:before {\n  content: \"\\f4e8\"; }\n\n.ion-social-pinterest:before {\n  content: \"\\f2b1\"; }\n\n.ion-social-playstation:before {\n  content: \"\\f3ab\"; }\n\n.ion-social-python:before {\n  content: \"\\f4e9\"; }\n\n.ion-social-reddit:before {\n  content: \"\\f23b\"; }\n\n.ion-social-rss:before {\n  content: \"\\f23d\"; }\n\n.ion-social-sass:before {\n  content: \"\\f4ea\"; }\n\n.ion-social-skype:before {\n  content: \"\\f23f\"; }\n\n.ion-social-snapchat:before {\n  content: \"\\f4ec\"; }\n\n.ion-social-steam:before {\n  content: \"\\f3ac\"; }\n\n.ion-social-tumblr:before {\n  content: \"\\f241\"; }\n\n.ion-social-tux:before {\n  content: \"\\f2c5\"; }\n\n.ion-social-twitch:before {\n  content: \"\\f4ee\"; }\n\n.ion-social-twitter:before {\n  content: \"\\f243\"; }\n\n.ion-social-usd:before {\n  content: \"\\f353\"; }\n\n.ion-social-vimeo:before {\n  content: \"\\f245\"; }\n\n.ion-social-whatsapp:before {\n  content: \"\\f4f0\"; }\n\n.ion-social-windows:before {\n  content: \"\\f247\"; }\n\n.ion-social-wordpress:before {\n  content: \"\\f249\"; }\n\n.ion-social-xbox:before {\n  content: \"\\f3ad\"; }\n\n.ion-social-yahoo:before {\n  content: \"\\f24b\"; }\n\n.ion-social-yen:before {\n  content: \"\\f4f2\"; }\n\n.ion-social-youtube:before {\n  content: \"\\f24d\"; }\n\n.ios {\n  /****************/\n  /* DEFAULT LIST */\n  /****************/\n  /**************/\n  /* INSET LIST */\n  /**************/\n  /*****************/\n  /* NO LINES LIST */\n  /*****************/\n  font-family: -apple-system, \"Helvetica Neue\", \"Roboto\", sans-serif;\n  font-size: 1.4rem;\n  background-color: #fff; }\n  .ios ion-content {\n    color: #000; }\n  .ios p {\n    color: #000; }\n  .ios a {\n    color: #387ef5; }\n  .ios hr {\n    background-color: rgba(0, 0, 0, 0.12); }\n  .ios.hairlines hr {\n    height: 0.55px; }\n  .ios h1[primary], .ios h2[primary], .ios h3[primary], .ios h4[primary], .ios h5[primary], .ios h6[primary],\n  .ios p[primary],\n  .ios span[primary],\n  .ios a:not([button])[primary],\n  .ios small[primary],\n  .ios b[primary],\n  .ios i[primary],\n  .ios strong[primary],\n  .ios em[primary],\n  .ios sub[primary],\n  .ios sup[primary] {\n    color: #387ef5 !important; }\n  .ios h1[secondary], .ios h2[secondary], .ios h3[secondary], .ios h4[secondary], .ios h5[secondary], .ios h6[secondary],\n  .ios p[secondary],\n  .ios span[secondary],\n  .ios a:not([button])[secondary],\n  .ios small[secondary],\n  .ios b[secondary],\n  .ios i[secondary],\n  .ios strong[secondary],\n  .ios em[secondary],\n  .ios sub[secondary],\n  .ios sup[secondary] {\n    color: #32db64 !important; }\n  .ios h1[danger], .ios h2[danger], .ios h3[danger], .ios h4[danger], .ios h5[danger], .ios h6[danger],\n  .ios p[danger],\n  .ios span[danger],\n  .ios a:not([button])[danger],\n  .ios small[danger],\n  .ios b[danger],\n  .ios i[danger],\n  .ios strong[danger],\n  .ios em[danger],\n  .ios sub[danger],\n  .ios sup[danger] {\n    color: #f53d3d !important; }\n  .ios h1[light], .ios h2[light], .ios h3[light], .ios h4[light], .ios h5[light], .ios h6[light],\n  .ios p[light],\n  .ios span[light],\n  .ios a:not([button])[light],\n  .ios small[light],\n  .ios b[light],\n  .ios i[light],\n  .ios strong[light],\n  .ios em[light],\n  .ios sub[light],\n  .ios sup[light] {\n    color: #f4f4f4 !important; }\n  .ios h1[dark], .ios h2[dark], .ios h3[dark], .ios h4[dark], .ios h5[dark], .ios h6[dark],\n  .ios p[dark],\n  .ios span[dark],\n  .ios a:not([button])[dark],\n  .ios small[dark],\n  .ios b[dark],\n  .ios i[dark],\n  .ios strong[dark],\n  .ios em[dark],\n  .ios sub[dark],\n  .ios sup[dark] {\n    color: #222 !important; }\n  .ios ion-action-sheet {\n    position: absolute;\n    top: 0;\n    left: 0;\n    width: 100%;\n    height: 100%;\n    display: block;\n    z-index: 1000; }\n  .ios .action-sheet-wrapper {\n    position: absolute;\n    z-index: 10;\n    bottom: 0;\n    left: 0;\n    right: 0;\n    width: 100%;\n    display: block;\n    max-width: 500px;\n    margin: auto;\n    -webkit-transform: translate3d(0, 100%, 0);\n    transform: translate3d(0, 100%, 0); }\n  .ios .action-sheet-container {\n    width: auto;\n    overflow: hidden; }\n  .ios .action-sheet-button {\n    display: block;\n    width: 100%;\n    margin: 0;\n    border-radius: 0;\n    border-color: #d1d3d6; }\n    .ios .action-sheet-button.activated {\n      box-shadow: none;\n      border-color: #d1d3d6;\n      background: #e4e5e7; }\n  .ios .action-sheet-group {\n    background-color: #fff;\n    overflow: hidden; }\n  .ios .action-sheet-options {\n    background: #f1f2f3; }\n  .ios ion-action-sheet {\n    text-align: center; }\n  .ios .action-sheet-container {\n    padding: 0 10px; }\n  .ios .action-sheet-group {\n    margin-bottom: 8px;\n    border-radius: 13px; }\n    .ios .action-sheet-group:last-child {\n      margin-bottom: 10px; }\n  .ios .action-sheet-title {\n    padding: 2rem;\n    font-size: 1.2rem;\n    font-weight: 500;\n    color: #5f5f5f;\n    border-radius: 0;\n    text-align: center; }\n  .ios .action-sheet-title,\n  .ios .action-sheet-option {\n    border-bottom: 1px solid #d6d6da; }\n  .ios .action-sheet-button {\n    color: #007aff;\n    min-height: 5.6rem;\n    padding: 18px;\n    font-size: 2rem;\n    background: transparent; }\n    .ios .action-sheet-button.activated {\n      background: #e9e9e9;\n      box-shadow: none;\n      border-color: #d1d3d6;\n      color: #007aff;\n      background: #e4e5e7; }\n  .ios .action-sheet-destructive {\n    color: #f53d3d; }\n  .ios .action-sheet-cancel {\n    font-weight: bold; }\n  .ios.hairlines .action-sheet-title,\n  .ios.hairlines .action-sheet-option {\n    border-bottom-width: 0.55px; }\n  .ios ion-badge {\n    display: inline-block;\n    padding: 3px 8px;\n    min-width: 10px;\n    vertical-align: baseline;\n    text-align: center;\n    white-space: nowrap;\n    font-size: 1.3rem;\n    font-weight: bold;\n    line-height: 1;\n    background: #ccc; }\n    .ios ion-badge:empty {\n      display: none; }\n  .ios ion-badge[primary] {\n    background-color: #387ef5;\n    color: white; }\n  .ios ion-badge[secondary] {\n    background-color: #32db64;\n    color: white; }\n  .ios ion-badge[danger] {\n    background-color: #f53d3d;\n    color: white; }\n  .ios ion-badge[light] {\n    background-color: #f4f4f4;\n    color: black; }\n  .ios ion-badge[dark] {\n    background-color: #222;\n    color: white; }\n  .ios ion-badge {\n    border-radius: 10px; }\n  .ios .button {\n    position: relative;\n    display: -webkit-inline-box;\n    display: -webkit-inline-flex;\n    display: -ms-inline-flexbox;\n    display: inline-flex;\n    -webkit-flex-shrink: 0;\n    -ms-flex-negative: 0;\n    flex-shrink: 0;\n    -webkit-flex-flow: row nowrap;\n    -ms-flex-flow: row nowrap;\n    flex-flow: row nowrap;\n    -webkit-box-align: center;\n    -webkit-align-items: center;\n    -ms-flex-align: center;\n    align-items: center;\n    -webkit-box-pack: center;\n    -webkit-justify-content: center;\n    -ms-flex-pack: center;\n    justify-content: center;\n    -webkit-transition: background-color, opacity 100ms linear;\n    transition: background-color, opacity 100ms linear;\n    white-space: nowrap;\n    text-overflow: ellipsis;\n    overflow: hidden;\n    text-align: center;\n    text-transform: none;\n    vertical-align: top;\n    vertical-align: -webkit-baseline-middle;\n    cursor: pointer;\n    -webkit-user-select: none;\n    -moz-user-select: none;\n    -ms-user-select: none;\n    user-select: none;\n    -webkit-appearance: none;\n    -moz-appearance: none; }\n  .ios a.button {\n    text-decoration: none; }\n  .ios .button[disabled] {\n    opacity: 0.4;\n    cursor: default !important;\n    pointer-events: none; }\n  .ios .button-block {\n    display: -webkit-box;\n    display: -webkit-flex;\n    display: -ms-flexbox;\n    display: flex;\n    clear: both;\n    width: 100%; }\n    .ios .button-block:after {\n      clear: both; }\n  .ios .button-full {\n    width: 100%; }\n  .ios .button-round {\n    padding: 0 2.6rem;\n    border-radius: 64px; }\n  .ios .button-full.button-outline {\n    border-left-width: 0;\n    border-right-width: 0; }\n  .ios .button {\n    margin: 0.4rem 0.2rem;\n    padding: 0 1em;\n    min-height: 2.8em;\n    font-size: 1.6rem;\n    border-radius: 4px;\n    color: white;\n    background-color: #387ef5; }\n    .ios .button:hover:not(.disable-hover) {\n      opacity: 0.8;\n      text-decoration: none; }\n    .ios .button.activated {\n      opacity: 1;\n      background-color: #3474e1; }\n  .ios .button-large {\n    padding: 0 1em;\n    min-height: 2.8em;\n    font-size: 2rem; }\n  .ios .button-small {\n    padding: 0 0.9em;\n    min-height: 2.1em;\n    font-size: 1.3rem; }\n  .ios .button-small.button-icon-only icon {\n    font-size: 1.3em; }\n  .ios .button-block {\n    display: block;\n    line-height: 2.8em;\n    margin-left: 0;\n    margin-right: 0; }\n  .ios .button-full {\n    margin-right: 0;\n    margin-left: 0;\n    border-radius: 0;\n    border-left: none;\n    border-right: none; }\n  .ios .button-outline {\n    border-width: 1px;\n    border-style: solid;\n    border-color: #387ef5;\n    color: #387ef5;\n    background-color: transparent;\n    border-radius: 4px; }\n    .ios .button-outline.activated {\n      opacity: 1;\n      color: #fff;\n      background-color: #387ef5; }\n  .ios .button-clear {\n    border-color: transparent;\n    color: #3474e1;\n    background-color: transparent; }\n    .ios .button-clear.activated {\n      opacity: 0.4;\n      background-color: transparent; }\n    .ios .button-clear:hover:not(.disable-hover) {\n      opacity: 0.6;\n      color: #3474e1; }\n  .ios .button-round {\n    padding: 0 2.6rem;\n    border-radius: 64px; }\n  .ios .button-primary {\n    color: white;\n    background-color: #387ef5; }\n    .ios .button-primary.activated {\n      background-color: #3474e1; }\n  .ios .button-outline-primary {\n    border-color: #3578e9;\n    color: #3578e9;\n    background-color: transparent; }\n    .ios .button-outline-primary.activated {\n      color: #fff;\n      background-color: #3578e9; }\n  .ios .button-clear-primary {\n    border-color: transparent;\n    background-color: transparent;\n    color: #3474e1; }\n    .ios .button-clear-primary.activated {\n      opacity: 0.4; }\n    .ios .button-clear-primary:hover:not(.disable-hover) {\n      color: #306bcf; }\n  .ios .button-secondary {\n    color: white;\n    background-color: #32db64; }\n    .ios .button-secondary.activated {\n      background-color: #2ec95c; }\n  .ios .button-outline-secondary {\n    border-color: #30d05f;\n    color: #30d05f;\n    background-color: transparent; }\n    .ios .button-outline-secondary.activated {\n      color: #fff;\n      background-color: #30d05f; }\n  .ios .button-clear-secondary {\n    border-color: transparent;\n    background-color: transparent;\n    color: #2ec95c; }\n    .ios .button-clear-secondary.activated {\n      opacity: 0.4; }\n    .ios .button-clear-secondary:hover:not(.disable-hover) {\n      color: #3fcd69; }\n  .ios .button-danger {\n    color: white;\n    background-color: #f53d3d; }\n    .ios .button-danger.activated {\n      background-color: #e13838; }\n  .ios .button-outline-danger {\n    border-color: #e93a3a;\n    color: #e93a3a;\n    background-color: transparent; }\n    .ios .button-outline-danger.activated {\n      color: #fff;\n      background-color: #e93a3a; }\n  .ios .button-clear-danger {\n    border-color: transparent;\n    background-color: transparent;\n    color: #e13838; }\n    .ios .button-clear-danger.activated {\n      opacity: 0.4; }\n    .ios .button-clear-danger:hover:not(.disable-hover) {\n      color: #cf3434; }\n  .ios .button-light {\n    color: black;\n    background-color: #f4f4f4; }\n    .ios .button-light.activated {\n      background-color: #e0e0e0; }\n  .ios .button-outline-light {\n    border-color: #e8e8e8;\n    color: #e8e8e8;\n    background-color: transparent; }\n    .ios .button-outline-light.activated {\n      color: #fff;\n      background-color: #e8e8e8; }\n  .ios .button-clear-light {\n    border-color: transparent;\n    background-color: transparent;\n    color: #e0e0e0; }\n    .ios .button-clear-light.activated {\n      opacity: 0.4; }\n    .ios .button-clear-light:hover:not(.disable-hover) {\n      color: #cecece; }\n  .ios .button-dark {\n    color: white;\n    background-color: #222; }\n    .ios .button-dark.activated {\n      background-color: #343434; }\n  .ios .button-outline-dark {\n    border-color: #2d2d2d;\n    color: #2d2d2d;\n    background-color: transparent; }\n    .ios .button-outline-dark.activated {\n      color: #fff;\n      background-color: #2d2d2d; }\n  .ios .button-clear-dark {\n    border-color: transparent;\n    background-color: transparent;\n    color: #343434; }\n    .ios .button-clear-dark.activated {\n      opacity: 0.4; }\n    .ios .button-clear-dark:hover:not(.disable-hover) {\n      color: #444444; }\n  .ios .button-fab {\n    position: absolute;\n    width: 56px;\n    height: 56px;\n    line-height: 56px;\n    min-width: 0;\n    vertical-align: middle;\n    border-radius: 50%;\n    background-clip: padding-box;\n    overflow: hidden;\n    -webkit-transition: .2s linear;\n    transition: .2s linear;\n    -webkit-transition-property: background-color;\n    transition-property: background-color;\n    font-size: 14px; }\n    .ios .button-fab icon {\n      -webkit-box-flex: 1;\n      -webkit-flex: 1;\n      -ms-flex: 1;\n      flex: 1;\n      font-size: 2.8rem; }\n  .ios [fab-center] {\n    left: 50%;\n    margin-left: -28px; }\n  .ios [fab-top] {\n    top: 16px; }\n  .ios [fab-right] {\n    right: 16px; }\n  .ios [fab-bottom] {\n    bottom: 16px; }\n  .ios [fab-left] {\n    left: 16px; }\n  .ios .button-icon-left icon {\n    padding-right: 0.3em;\n    font-size: 1.4em;\n    line-height: 0.67;\n    pointer-events: none; }\n  .ios .button-icon-right icon {\n    padding-left: 0.4em;\n    font-size: 1.4em;\n    line-height: 0.67;\n    pointer-events: none; }\n  .ios .button-icon-only {\n    padding: 0;\n    min-width: 0.9em; }\n    .ios .button-icon-only icon {\n      padding: 0 0.5em;\n      font-size: 1.8em;\n      line-height: 0.67;\n      pointer-events: none; }\n  .ios ion-card {\n    display: block;\n    overflow: hidden;\n    -webkit-transform: translateZ(0);\n    transform: translateZ(0); }\n  .ios ion-card img {\n    display: block;\n    width: 100%; }\n  .ios ion-card-header {\n    display: block;\n    overflow: hidden;\n    white-space: nowrap;\n    text-overflow: ellipsis; }\n  .ios ion-card-content {\n    display: block; }\n  .ios ion-card {\n    margin: 12px 12px 12px 12px;\n    font-size: 1.4rem;\n    background: #fff;\n    box-shadow: 0 1px 2px rgba(0, 0, 0, 0.3);\n    border-radius: 2px; }\n    .ios ion-card ion-list {\n      margin-bottom: 0; }\n      .ios ion-card ion-list .item {\n        padding-right: 0; }\n      .ios ion-card ion-list ion-item-content {\n        padding: 0; }\n      .ios ion-card ion-list > .item:last-child,\n      .ios ion-card ion-list > ion-item-sliding:last-child .item {\n        border-bottom: none; }\n    .ios ion-card .item-inner {\n      border: none; }\n    .ios ion-card ion-card-content {\n      padding: 13px 16px 14px 16px;\n      font-size: 1.4rem;\n      line-height: 1.4; }\n    .ios ion-card ion-card-header {\n      padding: 16px;\n      font-size: 1.6rem;\n      font-weight: 500;\n      color: #333; }\n    .ios ion-card ion-card-header + ion-card-content,\n    .ios ion-card .item + ion-card-content {\n      padding-top: 0; }\n    .ios ion-card ion-note[item-left],\n    .ios ion-card ion-note[item-right] {\n      font-size: 1.3rem; }\n    .ios ion-card .card-title {\n      padding: 8px 0 8px 0;\n      font-size: 1.8rem;\n      color: #222; }\n    .ios ion-card h1 {\n      margin: 0 0 2px;\n      font-size: 2.4rem;\n      font-weight: normal; }\n    .ios ion-card h2 {\n      margin: 2px 0 2px;\n      font-size: 1.6rem;\n      font-weight: normal; }\n    .ios ion-card h3,\n    .ios ion-card h4,\n    .ios ion-card h5,\n    .ios ion-card h6 {\n      margin: 2px 0 2px;\n      font-size: 1.4rem;\n      font-weight: normal; }\n    .ios ion-card p {\n      font-size: 1.4rem;\n      margin: 0 0 2px;\n      color: #666; }\n  .ios ion-card + ion-card {\n    margin-top: 0; }\n  .ios ion-checkbox {\n    cursor: pointer;\n    -webkit-user-select: none;\n    -moz-user-select: none;\n    -ms-user-select: none;\n    user-select: none; }\n    .ios ion-checkbox[aria-checked=true] .checkbox-icon {\n      background-color: #387ef5;\n      border-color: #387ef5; }\n    .ios ion-checkbox[aria-checked=true] .checkbox-icon:after {\n      position: absolute;\n      border-width: 1px;\n      border-style: solid;\n      border-color: #fff;\n      top: 3px;\n      left: 7px;\n      width: 4px;\n      height: 9px;\n      border-left: none;\n      border-top: none;\n      content: '';\n      -webkit-transform: rotate(45deg);\n      transform: rotate(45deg); }\n    .ios ion-checkbox.item.activated {\n      background-color: #fff; }\n  .ios ion-checkbox[aria-disabled=true] {\n    opacity: 0.5;\n    color: #666;\n    pointer-events: none; }\n  .ios .checkbox-media {\n    margin: 10px 16px 10px 2px; }\n  .ios .checkbox-icon {\n    position: relative;\n    display: block;\n    width: 21px;\n    height: 21px;\n    border-radius: 50%;\n    border-width: 1px;\n    border-style: solid;\n    border-color: #c8c7cc;\n    background-color: #fff; }\n  .ios ion-checkbox[primary][aria-checked=true] .checkbox-icon {\n    background-color: #387ef5;\n    border-color: #387ef5; }\n    .ios ion-checkbox[primary][aria-checked=true] .checkbox-icon:after {\n      border-color: white; }\n  .ios ion-checkbox[secondary][aria-checked=true] .checkbox-icon {\n    background-color: #32db64;\n    border-color: #32db64; }\n    .ios ion-checkbox[secondary][aria-checked=true] .checkbox-icon:after {\n      border-color: white; }\n  .ios ion-checkbox[danger][aria-checked=true] .checkbox-icon {\n    background-color: #f53d3d;\n    border-color: #f53d3d; }\n    .ios ion-checkbox[danger][aria-checked=true] .checkbox-icon:after {\n      border-color: white; }\n  .ios ion-checkbox[light][aria-checked=true] .checkbox-icon {\n    background-color: #f4f4f4;\n    border-color: #f4f4f4; }\n    .ios ion-checkbox[light][aria-checked=true] .checkbox-icon:after {\n      border-color: black; }\n  .ios ion-checkbox[dark][aria-checked=true] .checkbox-icon {\n    background-color: #222;\n    border-color: #222; }\n    .ios ion-checkbox[dark][aria-checked=true] .checkbox-icon:after {\n      border-color: white; }\n  .ios ion-content {\n    background-color: #fff; }\n  .ios .outer-content {\n    background: #efeff4; }\n  .ios ion-nav.has-views,\n  .ios ion-tab.has-views {\n    background: #000; }\n  .ios .item {\n    display: -webkit-box;\n    display: -webkit-flex;\n    display: -ms-flexbox;\n    display: flex;\n    -webkit-box-pack: justify;\n    -webkit-justify-content: space-between;\n    -ms-flex-pack: justify;\n    justify-content: space-between;\n    -webkit-box-align: center;\n    -webkit-align-items: center;\n    -ms-flex-align: center;\n    align-items: center;\n    margin: 0;\n    padding: 0;\n    border: 0;\n    width: 100%;\n    min-height: 4.4rem;\n    overflow: hidden;\n    text-align: initial;\n    font-weight: normal;\n    line-height: normal;\n    text-decoration: none;\n    color: inherit; }\n  .ios .item-inner {\n    display: -webkit-box;\n    display: -webkit-flex;\n    display: -ms-flexbox;\n    display: flex;\n    margin: 0;\n    padding: 0;\n    border: 0;\n    overflow: hidden;\n    -webkit-box-flex: 1;\n    -webkit-flex: 1;\n    -ms-flex: 1;\n    flex: 1;\n    -webkit-box-orient: vertical;\n    -webkit-box-direction: normal;\n    -webkit-flex-direction: inherit;\n    -ms-flex-direction: inherit;\n    flex-direction: inherit;\n    -webkit-box-align: inherit;\n    -webkit-align-items: inherit;\n    -ms-flex-align: inherit;\n    align-items: inherit;\n    -webkit-align-self: stretch;\n    -ms-flex-item-align: stretch;\n    align-self: stretch; }\n  .ios .item[no-lines],\n  .ios .item[no-lines] .item-inner {\n    border: none; }\n  .ios ion-item-group {\n    display: block; }\n  .ios ion-item-divider {\n    display: block;\n    min-height: 30px;\n    width: 100%;\n    z-index: 1000;\n    font-weight: 500; }\n    .ios ion-item-divider[sticky] {\n      position: -webkit-sticky;\n      position: sticky;\n      top: 0px; }\n  .ios ion-item-content {\n    margin: 0;\n    -webkit-box-flex: 1;\n    -webkit-flex: 1;\n    -ms-flex: 1;\n    flex: 1;\n    white-space: nowrap;\n    overflow: hidden;\n    text-overflow: ellipsis;\n    pointer-events: none; }\n    .ios ion-item-content a,\n    .ios ion-item-content button,\n    .ios ion-item-content [tappable] {\n      pointer-events: auto; }\n  .ios [text-wrap] ion-item-content {\n    white-space: normal; }\n  .ios [vertical-align-top],\n  .ios ion-input.item {\n    -webkit-box-align: start;\n    -webkit-align-items: flex-start;\n    -ms-flex-align: start;\n    align-items: flex-start; }\n  .ios ion-item-content + ion-item-content[cnt] {\n    display: none; }\n  .ios ion-item-divider[primary] {\n    background-color: #387ef5;\n    color: white; }\n  .ios ion-item-divider[secondary] {\n    background-color: #32db64;\n    color: white; }\n  .ios ion-item-divider[danger] {\n    background-color: #f53d3d;\n    color: white; }\n  .ios ion-item-divider[light] {\n    background-color: #f4f4f4;\n    color: black; }\n  .ios ion-item-divider[dark] {\n    background-color: #222;\n    color: white; }\n  .ios .item > icon[small]:first-child,\n  .ios .item-inner > icon[small]:first-child {\n    min-width: 18px; }\n  .ios .item > icon:first-child,\n  .ios .item-inner > icon:first-child {\n    min-width: 24px;\n    text-align: center; }\n  .ios .item > icon,\n  .ios .item-inner > icon {\n    line-height: 1;\n    font-size: 2.4rem;\n    min-height: 2.4rem; }\n    .ios .item > icon[large],\n    .ios .item-inner > icon[large] {\n      font-size: 3.2rem;\n      min-height: 3.2rem; }\n    .ios .item > icon[small],\n    .ios .item-inner > icon[small] {\n      font-size: 1.8rem;\n      min-height: 1.8rem; }\n  .ios ion-avatar,\n  .ios ion-thumbnail {\n    display: block;\n    line-height: 1; }\n    .ios ion-avatar img,\n    .ios ion-thumbnail img {\n      display: block; }\n  .ios ion-item-sliding {\n    display: block;\n    position: relative;\n    overflow: hidden; }\n    .ios ion-item-sliding .item {\n      position: static; }\n  .ios ion-item-options {\n    display: none;\n    position: absolute;\n    top: 0;\n    right: 0;\n    z-index: 1;\n    height: 100%;\n    visibility: hidden; }\n  .ios ion-item-options .button {\n    margin: 0;\n    border-radius: 0;\n    box-shadow: none;\n    height: 100%; }\n  .ios ion-item-sliding.active-slide .item,\n  .ios ion-item-sliding.active-slide .item.activated {\n    position: relative;\n    z-index: 2;\n    opacity: 1;\n    -webkit-transition: all 300ms cubic-bezier(0.36, 0.66, 0.04, 1);\n    transition: all 300ms cubic-bezier(0.36, 0.66, 0.04, 1);\n    pointer-events: none; }\n  .ios ion-item-sliding.active-slide ion-item-options {\n    display: -webkit-box;\n    display: -webkit-flex;\n    display: -ms-flexbox;\n    display: flex; }\n  .ios ion-item-sliding.active-slide.active-options ion-item-options {\n    visibility: visible; }\n  .ios .item {\n    padding-left: 16px;\n    font-size: 1.6rem;\n    border-radius: 0;\n    color: #000;\n    background-color: #fff;\n    -webkit-transition-duration: 200ms;\n    transition-duration: 200ms; }\n    .ios .item h1 {\n      margin: 0 0 2px;\n      font-size: 2.4rem;\n      font-weight: normal; }\n    .ios .item h2 {\n      margin: 0 0 2px;\n      font-size: 1.6rem;\n      font-weight: normal; }\n    .ios .item h3,\n    .ios .item h4,\n    .ios .item h5,\n    .ios .item h6 {\n      line-height: normal;\n      margin: 0 0 3px 0;\n      font-size: 1.4rem;\n      font-weight: normal; }\n    .ios .item p {\n      line-height: normal;\n      color: #666;\n      font-size: 1.2rem;\n      margin: 0 0 2px; }\n    .ios .item h2:last-child,\n    .ios .item h3:last-child,\n    .ios .item h4:last-child,\n    .ios .item h5:last-child,\n    .ios .item h6:last-child,\n    .ios .item p:last-child {\n      margin-bottom: 0; }\n    .ios .item a {\n      text-decoration: none; }\n  .ios .item.activated {\n    background-color: #d9d9d9;\n    -webkit-transition-duration: 0ms;\n    transition-duration: 0ms; }\n  .ios .item-inner {\n    padding-right: 8px;\n    border-bottom: 1px solid #c8c7cc; }\n  .ios.hairlines .item-inner {\n    border-bottom-width: 0.55px; }\n  .ios ion-item-content {\n    margin: 12px 8px 13px 0; }\n  .ios [item-left] {\n    margin: 6px 16px 6.5px 0; }\n  .ios [item-right] {\n    margin: 6px 8px 6.5px 8px; }\n  .ios icon[item-left],\n  .ios icon[item-right] {\n    margin-top: 10px;\n    margin-bottom: 9px; }\n  .ios ion-avatar[item-left],\n  .ios ion-thumbnail[item-left] {\n    margin: 8px 16px 8px 0; }\n  .ios ion-avatar[item-right],\n  .ios ion-thumbnail[item-right] {\n    margin: 8px; }\n  .ios button[item-left],\n  .ios button[item-right],\n  .ios [button][item-left],\n  .ios [button][item-right] {\n    padding: 0 0.5em;\n    font-size: 1.3rem;\n    min-height: 25px;\n    margin-top: 9px; }\n  .ios [item-left].button-icon-only,\n  .ios [item-right].button-icon-only,\n  .ios [item-left].button-icon-only icon,\n  .ios [item-right].button-icon-only icon,\n  .ios [item-left][clear],\n  .ios [item-right][clear] {\n    padding: 0 1px; }\n  .ios [item-left].icon-left icon,\n  .ios [item-right].icon-left icon {\n    margin-left: 0;\n    margin-bottom: 1px;\n    padding-right: 0.3em; }\n  .ios [item-left].icon-right icon,\n  .ios [item-right].icon-right icon {\n    margin-right: 0;\n    margin-bottom: 1px; }\n  .ios ion-avatar {\n    min-width: 3.6rem;\n    min-height: 3.6rem; }\n    .ios ion-avatar img {\n      max-width: 3.6rem;\n      max-height: 3.6rem;\n      border-radius: 1.8rem; }\n  .ios ion-thumbnail {\n    min-width: 5.6rem;\n    min-height: 5.6rem; }\n    .ios ion-thumbnail img {\n      max-width: 5.6rem;\n      max-height: 5.6rem; }\n  .ios ion-note {\n    color: #aeacb4; }\n  .ios button.item:not([detail-none]) .item-inner,\n  .ios a.item:not([detail-none]) .item-inner,\n  .ios .item[detail-push] .item-inner {\n    background-image: url(\"data:image/svg+xml;charset=utf-8,<svg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%2012%2020'><path%20d='M2,20l-2-2l8-8L0,2l2-2l10,10L2,20z'%20fill='#c8c7cc'/></svg>\");\n    background-repeat: no-repeat;\n    background-position: right 14px center;\n    background-size: 14px 14px;\n    padding-right: 32px; }\n  .ios ion-item-group .item:first-child .item-inner {\n    border-top-width: 0; }\n  .ios ion-item-group .item:last-child .item-inner,\n  .ios ion-item-group ion-item-sliding:last-child .item .item-inner {\n    border: none; }\n  .ios ion-item-divider {\n    padding: 12px 16px 13px 16px;\n    color: #222;\n    background-color: #f7f7f7; }\n  .ios ion-item-sliding {\n    background-color: #fff; }\n  .ios ion-label {\n    display: block;\n    max-width: 200px;\n    font-size: inherit;\n    white-space: nowrap;\n    pointer-events: none; }\n  .ios .fixed-label {\n    width: 30%;\n    min-width: 100px;\n    max-width: 200px; }\n  .ios [stacked-label],\n  .ios [floating-label] {\n    -webkit-box-orient: vertical;\n    -webkit-box-direction: normal;\n    -webkit-flex-direction: column;\n    -ms-flex-direction: column;\n    flex-direction: column;\n    -webkit-box-align: start;\n    -webkit-align-items: flex-start;\n    -ms-flex-align: start;\n    align-items: flex-start; }\n  .ios .stacked-label,\n  .ios .floating-label {\n    -webkit-align-self: stretch;\n    -ms-flex-item-align: stretch;\n    align-self: stretch;\n    margin-bottom: 0;\n    max-width: 100%; }\n  .ios .stacked-input,\n  .ios .floating-input {\n    -webkit-align-self: stretch;\n    -ms-flex-item-align: stretch;\n    align-self: stretch;\n    width: auto; }\n  .ios ion-label {\n    margin: 12px 8px 13px 0;\n    color: #7f7f7f; }\n  .ios ion-label + .item-input {\n    margin-left: 16px; }\n  .ios .stacked-label {\n    font-size: 1.2rem;\n    margin-bottom: 4px; }\n  .ios .floating-label {\n    margin-bottom: 0;\n    -webkit-transform-origin: left top;\n    transform-origin: left top;\n    -webkit-transform: translate3d(0, 27px, 0);\n    transform: translate3d(0, 27px, 0);\n    -webkit-transition: -webkit-transform 150ms ease-in-out;\n    transition: transform 150ms ease-in-out; }\n  .ios .input-focused .floating-label,\n  .ios .input-has-value .floating-label {\n    -webkit-transform: translate3d(0, 0, 0) scale(0.8);\n    transform: translate3d(0, 0, 0) scale(0.8); }\n  .ios ion-label + .stacked-input,\n  .ios ion-label + .floating-input {\n    margin-left: 0; }\n  .ios ion-label[primary] {\n    color: #387ef5 !important; }\n  .ios ion-label[secondary] {\n    color: #32db64 !important; }\n  .ios ion-label[danger] {\n    color: #f53d3d !important; }\n  .ios ion-label[light] {\n    color: #f4f4f4 !important; }\n  .ios ion-label[dark] {\n    color: #222 !important; }\n  .ios ion-list-header {\n    display: block;\n    overflow: hidden;\n    white-space: nowrap;\n    text-overflow: ellipsis; }\n  .ios ion-list {\n    display: block;\n    margin: 0;\n    padding: 0;\n    list-style-type: none; }\n  .ios ion-list[inset] {\n    overflow: hidden;\n    -webkit-transform: translateZ(0);\n    transform: translateZ(0); }\n  .ios ion-list-header {\n    position: relative;\n    padding: 10px 16px 10px 16px;\n    font-size: 1.2rem;\n    font-weight: 500;\n    letter-spacing: 0.1rem;\n    text-transform: uppercase;\n    color: #333;\n    border-bottom: 1px solid #c8c7cc; }\n  .ios ion-list {\n    margin: -1px 0 32px 0; }\n    .ios ion-list > .item:first-child {\n      border-top: 1px solid #c8c7cc; }\n    .ios ion-list > .item:last-child,\n    .ios ion-list > ion-item-sliding:last-child .item {\n      border-bottom: 1px solid #c8c7cc; }\n      .ios ion-list > .item:last-child .item-inner,\n      .ios ion-list > ion-item-sliding:last-child .item .item-inner {\n        border-bottom: none; }\n    .ios ion-list .item-inner {\n      border-bottom: 1px solid #c8c7cc; }\n    .ios ion-list .item[no-lines],\n    .ios ion-list .item[no-lines] .item-inner {\n      border-width: 0; }\n    .ios ion-list ion-item-options {\n      border-bottom: 1px solid #c8c7cc; }\n      .ios ion-list ion-item-options button, .ios ion-list ion-item-options [button] {\n        min-height: 100%;\n        height: 100%;\n        margin: 0;\n        border: none;\n        border-radius: 0;\n        display: -webkit-inline-box;\n        display: -webkit-inline-flex;\n        display: -ms-inline-flexbox;\n        display: inline-flex;\n        -webkit-box-align: center;\n        -webkit-align-items: center;\n        -ms-flex-align: center;\n        align-items: center;\n        box-sizing: border-box; }\n        .ios ion-list ion-item-options button:before, .ios ion-list ion-item-options [button]:before {\n          margin: 0 auto; }\n  .ios ion-list + ion-list {\n    margin-top: 42px; }\n    .ios ion-list + ion-list ion-list-header {\n      margin-top: -10px;\n      padding-top: 0; }\n  .ios.hairlines ion-list-header {\n    border-bottom-width: 0.55px; }\n  .ios.hairlines ion-list ion-item-options {\n    border-width: 0.55px; }\n  .ios.hairlines ion-list .item .item-inner {\n    border-width: 0.55px; }\n  .ios.hairlines ion-list > .item:first-child {\n    border-top-width: 0.55px; }\n  .ios.hairlines ion-list > .item:last-child,\n  .ios.hairlines ion-list > ion-item-sliding:last-child .item {\n    border-bottom-width: 0.55px; }\n  .ios ion-list[inset] {\n    margin: 16px 16px 16px 16px;\n    border-radius: 4px; }\n    .ios ion-list[inset] ion-list-header {\n      background-color: #fff; }\n    .ios ion-list[inset] .item {\n      border-bottom: 1px solid #c8c7cc; }\n      .ios ion-list[inset] .item .item-inner {\n        border-bottom: none; }\n    .ios ion-list[inset] > .item:first-child,\n    .ios ion-list[inset] > ion-item-sliding:first-child .item {\n      border-top: none; }\n    .ios ion-list[inset] > .item:last-child,\n    .ios ion-list[inset] > ion-item-sliding:last-child .item {\n      border-bottom: none; }\n  .ios ion-list[inset] + ion-list[inset] {\n    margin-top: 0; }\n  .ios.hairlines ion-list[inset] .item {\n    border-width: 0.55px; }\n  .ios ion-list[no-lines] ion-list-header,\n  .ios ion-list[no-lines] .item,\n  .ios ion-list[no-lines] .item .item-inner,\n  .ios.hairlines ion-list[no-lines] ion-list-header,\n  .ios.hairlines ion-list[no-lines] .item,\n  .ios.hairlines ion-list[no-lines] .item .item-inner {\n    border-width: 0; }\n  .ios ion-menu {\n    background: #fff; }\n  .ios .menu-content-reveal {\n    box-shadow: 0px 0px 10px rgba(0, 0, 0, 0.25); }\n  .ios .menu-content-push {\n    box-shadow: 0px 0px 10px rgba(0, 0, 0, 0.25); }\n  .ios ion-menu[type=overlay] {\n    box-shadow: 0px 0px 10px rgba(0, 0, 0, 0.25); }\n  .ios ion-page.modal {\n    background-color: #fff; }\n  .ios ion-popup {\n    position: absolute;\n    z-index: 1000;\n    top: 0;\n    left: 0;\n    bottom: 0;\n    right: 0;\n    display: -webkit-box;\n    display: -webkit-flex;\n    display: -ms-flexbox;\n    display: flex;\n    -webkit-box-pack: center;\n    -webkit-justify-content: center;\n    -ms-flex-pack: center;\n    justify-content: center;\n    -webkit-box-align: center;\n    -webkit-align-items: center;\n    -ms-flex-align: center;\n    align-items: center; }\n    .ios ion-popup input,\n    .ios ion-popup textarea {\n      width: 100%; }\n  .ios .popup-wrapper {\n    z-index: 10;\n    min-width: 250px;\n    max-height: 90%;\n    display: -webkit-box;\n    display: -webkit-flex;\n    display: -ms-flexbox;\n    display: flex;\n    -webkit-box-orient: vertical;\n    -webkit-box-direction: normal;\n    -webkit-flex-direction: column;\n    -ms-flex-direction: column;\n    flex-direction: column;\n    opacity: 0; }\n  .ios .popup-title {\n    margin: 0;\n    padding: 0; }\n  .ios .popup-sub-title {\n    margin: 5px 0 0 0;\n    padding: 0;\n    font-weight: normal; }\n  .ios .popup-body {\n    overflow: auto; }\n    .ios .popup-body:empty {\n      padding: 0; }\n  .ios .prompt-input {\n    border: 0;\n    background: inherit;\n    padding: 10px 0; }\n    .ios .prompt-input::-moz-placeholder {\n      color: #999; }\n    .ios .prompt-input:-ms-input-placeholder {\n      color: #999; }\n    .ios .prompt-input::-webkit-input-placeholder {\n      color: #999;\n      text-indent: 0; }\n  .ios .popup-buttons {\n    display: -webkit-box;\n    display: -webkit-flex;\n    display: -ms-flexbox;\n    display: flex;\n    -webkit-box-orient: horizontal;\n    -webkit-box-direction: normal;\n    -webkit-flex-direction: row;\n    -ms-flex-direction: row;\n    flex-direction: row; }\n  .ios .popup-button {\n    display: block;\n    margin: 0;\n    line-height: 20px;\n    font-size: 14px;\n    margin-right: 8px; }\n  .ios ion-popup {\n    background: transparent; }\n  .ios .popup-wrapper {\n    border-radius: 13px;\n    background-color: #f8f8f8;\n    max-width: 270px;\n    overflow: hidden; }\n  .ios .popup-head {\n    padding: 12px 16px 20px;\n    text-align: center; }\n  .ios .popup-title {\n    margin-top: 12px;\n    font-weight: bold;\n    font-size: 17px; }\n  .ios .popup-sub-title {\n    font-size: 14px;\n    color: #666; }\n  .ios .popup-body {\n    padding: 0px 16px 24px;\n    color: inherit;\n    text-align: center;\n    font-size: 13px; }\n  .ios .prompt-input {\n    padding: 6px;\n    margin-top: 24px;\n    background-color: #fff;\n    border: 1px solid #ccc;\n    border-radius: 4px;\n    -webkit-appearance: none; }\n  .ios .popup-buttons :last-child {\n    font-weight: bold;\n    border-right: 0; }\n  .ios .popup-button {\n    margin: 0;\n    -webkit-box-flex: 1;\n    -webkit-flex: 1;\n    -ms-flex: 1;\n    flex: 1;\n    border-radius: 0;\n    font-size: 17px;\n    min-height: 44px;\n    border-right: 1px solid #c8c7cc; }\n    .ios .popup-button.activated {\n      opacity: 1;\n      background-color: #e9e9e9; }\n    .ios .popup-button:hover:not(.disable-hover) {\n      opacity: 1; }\n    .ios .popup-button:before {\n      position: absolute;\n      top: 0;\n      right: 0;\n      left: 0;\n      border-top: 1px solid #c8c7cc;\n      content: '';\n      pointer-events: none; }\n  .ios.hairlines .prompt-input {\n    border-width: 0.55px; }\n  .ios.hairlines .popup-button {\n    border-right-width: 0.55px; }\n    .ios.hairlines .popup-button:before {\n      border-top-width: 0.55px; }\n  .ios ion-radio {\n    cursor: pointer;\n    -webkit-user-select: none;\n    -moz-user-select: none;\n    -ms-user-select: none;\n    user-select: none; }\n    .ios ion-radio[aria-checked=true] {\n      color: #387ef5; }\n    .ios ion-radio[aria-checked=true] .radio-icon:after {\n      position: absolute;\n      border-width: 2px;\n      border-style: solid;\n      border-color: #387ef5;\n      top: 3px;\n      left: 7px;\n      width: 4px;\n      height: 10px;\n      border-left: none;\n      border-top: none;\n      content: '';\n      -webkit-transform: rotate(45deg);\n      transform: rotate(45deg); }\n    .ios ion-radio.item.activated {\n      background-color: #fff; }\n  .ios ion-radio[aria-disabled=true] {\n    color: #666;\n    opacity: 0.5;\n    pointer-events: none; }\n  .ios .radio-media {\n    display: block;\n    margin: 10px 8px 10px 8px; }\n  .ios .radio-icon {\n    position: relative;\n    display: block;\n    width: 16px;\n    height: 21px; }\n  .ios ion-radio[primary][aria-checked=true] .radio-icon:after {\n    border-color: #387ef5; }\n  .ios ion-radio[primary][aria-checked=true] {\n    color: #387ef5; }\n  .ios ion-radio[secondary][aria-checked=true] .radio-icon:after {\n    border-color: #32db64; }\n  .ios ion-radio[secondary][aria-checked=true] {\n    color: #32db64; }\n  .ios ion-radio[danger][aria-checked=true] .radio-icon:after {\n    border-color: #f53d3d; }\n  .ios ion-radio[danger][aria-checked=true] {\n    color: #f53d3d; }\n  .ios ion-radio[light][aria-checked=true] .radio-icon:after {\n    border-color: #f4f4f4; }\n  .ios ion-radio[light][aria-checked=true] {\n    color: #f4f4f4; }\n  .ios ion-radio[dark][aria-checked=true] .radio-icon:after {\n    border-color: #222; }\n  .ios ion-radio[dark][aria-checked=true] {\n    color: #222; }\n  .ios ion-searchbar {\n    position: relative;\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    width: 100%; }\n  .ios .searchbar-icon {\n    pointer-events: none; }\n  .ios .searchbar-input-container {\n    position: relative;\n    display: block;\n    -webkit-flex-shrink: 1;\n    -ms-flex-negative: 1;\n    flex-shrink: 1;\n    width: 100%; }\n  .ios .searchbar-input {\n    display: block;\n    width: 100%;\n    border: none;\n    font-family: inherit;\n    line-height: 3rem;\n    -webkit-appearance: none;\n    -moz-appearance: none; }\n  .ios .searchbar-clear-icon {\n    min-height: 0;\n    padding: 0;\n    margin: 0; }\n  .ios ion-searchbar {\n    padding: 0 8px;\n    background: rgba(0, 0, 0, 0.2);\n    border-top: 1px solid transparent;\n    border-bottom: 1px solid rgba(0, 0, 0, 0.05);\n    min-height: 44px; }\n  .ios .searchbar-search-icon {\n    width: 14px;\n    height: 14px;\n    background-image: url(\"data:image/svg+xml;charset=utf-8,<svg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%2013%2013'><path%20fill='rgba(0,%200,%200,%200.5)'%20d='M5,1c2.2,0,4,1.8,4,4S7.2,9,5,9S1,7.2,1,5S2.8,1,5,1%20M5,0C2.2,0,0,2.2,0,5s2.2,5,5,5s5-2.2,5-5S7.8,0,5,0%20L5,0z'/><line%20stroke='rgba(0,%200,%200,%200.5)'%20stroke-miterlimit='10'%20x1='12.6'%20y1='12.6'%20x2='8.2'%20y2='8.2'/></svg>\");\n    background-size: 13px;\n    background-repeat: no-repeat;\n    position: absolute;\n    left: 9px;\n    top: 9px;\n    margin-left: calc(50% - 60px);\n    -webkit-transition: all 400ms cubic-bezier(0.25, 0.45, 0.05, 1);\n    transition: all 400ms cubic-bezier(0.25, 0.45, 0.05, 1); }\n  .ios .searchbar-input {\n    height: 100%;\n    padding: 0 28px;\n    font-size: 1.4rem;\n    font-weight: 400;\n    border-radius: 5px;\n    color: #000;\n    background-color: #FFFFFF;\n    background-position: 8px center;\n    padding-left: calc(50% - 28px);\n    -webkit-transition: all 400ms cubic-bezier(0.25, 0.45, 0.05, 1);\n    transition: all 400ms cubic-bezier(0.25, 0.45, 0.05, 1); }\n    .ios .searchbar-input::-moz-placeholder {\n      color: rgba(0, 0, 0, 0.5); }\n    .ios .searchbar-input:-ms-input-placeholder {\n      color: rgba(0, 0, 0, 0.5); }\n    .ios .searchbar-input::-webkit-input-placeholder {\n      color: rgba(0, 0, 0, 0.5);\n      text-indent: 0; }\n  .ios .searchbar-clear-icon {\n    width: 30px;\n    height: 100%;\n    background-image: url(\"data:image/svg+xml;charset=utf-8,<svg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%20512%20512'><path%20fill='rgba(0,%200,%200,%200.5)'%20d='M403.1,108.9c-81.2-81.2-212.9-81.2-294.2,0s-81.2,212.9,0,294.2c81.2,81.2,212.9,81.2,294.2,0S484.3,190.1,403.1,108.9z%20M352,340.2L340.2,352l-84.4-84.2l-84,83.8L160,339.8l84-83.8l-84-83.8l11.8-11.8l84,83.8l84.4-84.2l11.8,11.8L267.6,256L352,340.2z'/></svg>\");\n    background-size: 18px;\n    background-repeat: no-repeat;\n    background-position: center;\n    position: absolute;\n    right: 0;\n    top: 0; }\n  .ios .searchbar-ios-cancel {\n    -webkit-transition: all 400ms cubic-bezier(0.25, 0.45, 0.05, 1);\n    transition: all 400ms cubic-bezier(0.25, 0.45, 0.05, 1);\n    min-height: 30px;\n    margin-left: 0;\n    margin-right: 0;\n    padding: 0;\n    visibility: hidden;\n    -webkit-transform: translateX(calc(100% + 8px));\n    transform: translateX(calc(100% + 8px));\n    -webkit-box-flex: 0;\n    -webkit-flex: 0 0 0%;\n    -ms-flex: 0 0 0%;\n    flex: 0 0 0%; }\n  .ios .searchbar-left-aligned .searchbar-search-icon {\n    margin-left: 0; }\n  .ios .searchbar-left-aligned .searchbar-input {\n    padding-left: 30px; }\n  .ios .searchbar-focused .searchbar-ios-cancel {\n    -webkit-transform: translateX(0);\n    transform: translateX(0);\n    -webkit-box-flex: 0;\n    -webkit-flex: 0 0 auto;\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    padding-left: 8px;\n    visibility: visible; }\n  .ios .toolbar ion-searchbar {\n    background: transparent;\n    border-bottom-width: 0; }\n    .ios .toolbar ion-searchbar .searchbar-input {\n      background-color: rgba(0, 0, 0, 0.08); }\n    .ios .toolbar ion-searchbar .searchbar-ios-cancel {\n      padding: 0; }\n  .ios .toolbar .searchbar-focused .searchbar-ios-cancel {\n    padding-left: 8px; }\n  .ios .searchbar-md-cancel {\n    display: none; }\n  .ios.hairlines ion-searchbar {\n    border-bottom-width: 0.55px; }\n  .ios ion-searchbar[primary] .searchbar-ios-cancel {\n    color: #387ef5; }\n    .ios ion-searchbar[primary] .searchbar-ios-cancel:hover:not(.disable-hover) {\n      color: #3474e1; }\n  .ios .toolbar[primary] ion-searchbar .searchbar-ios-cancel {\n    color: white; }\n  .ios ion-searchbar[secondary] .searchbar-ios-cancel {\n    color: #32db64; }\n    .ios ion-searchbar[secondary] .searchbar-ios-cancel:hover:not(.disable-hover) {\n      color: #2ec95c; }\n  .ios .toolbar[secondary] ion-searchbar .searchbar-ios-cancel {\n    color: white; }\n  .ios ion-searchbar[danger] .searchbar-ios-cancel {\n    color: #f53d3d; }\n    .ios ion-searchbar[danger] .searchbar-ios-cancel:hover:not(.disable-hover) {\n      color: #e13838; }\n  .ios .toolbar[danger] ion-searchbar .searchbar-ios-cancel {\n    color: white; }\n  .ios ion-searchbar[light] .searchbar-ios-cancel {\n    color: #f4f4f4; }\n    .ios ion-searchbar[light] .searchbar-ios-cancel:hover:not(.disable-hover) {\n      color: #e0e0e0; }\n  .ios .toolbar[light] ion-searchbar .searchbar-ios-cancel {\n    color: black; }\n  .ios ion-searchbar[dark] .searchbar-ios-cancel {\n    color: #222; }\n    .ios ion-searchbar[dark] .searchbar-ios-cancel:hover:not(.disable-hover) {\n      color: #343434; }\n  .ios .toolbar[dark] ion-searchbar .searchbar-ios-cancel {\n    color: white; }\n  .ios ion-segment {\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    -webkit-box-pack: center;\n    -webkit-justify-content: center;\n    -ms-flex-pack: center;\n    justify-content: center;\n    -webkit-box-flex: 1;\n    -webkit-flex: 1;\n    -ms-flex: 1;\n    flex: 1;\n    width: 100%; }\n  .ios .segment-button {\n    position: relative;\n    display: block;\n    margin-left: 0;\n    margin-right: 0;\n    -webkit-box-flex: 1;\n    -webkit-flex: 1;\n    -ms-flex: 1;\n    flex: 1;\n    width: 0;\n    overflow: hidden;\n    text-align: center;\n    text-overflow: ellipsis;\n    white-space: nowrap;\n    cursor: pointer; }\n  .ios .segment-button {\n    min-height: 3rem;\n    line-height: 3rem;\n    font-size: 1.3rem;\n    border-width: 1px;\n    border-style: solid;\n    border-color: #387ef5;\n    color: #387ef5;\n    background-color: transparent; }\n    .ios .segment-button.segment-activated {\n      opacity: 1;\n      color: white;\n      background-color: #387ef5;\n      -webkit-transition: 100ms all linear;\n      transition: 100ms all linear; }\n    .ios .segment-button:hover:not(.segment-activated) {\n      background-color: rgba(56, 126, 245, 0.16); }\n    .ios .segment-button:first-of-type {\n      border-radius: 4px 0 0 4px;\n      margin-right: 0; }\n    .ios .segment-button:not(:first-of-type) {\n      border-left-width: 0; }\n    .ios .segment-button:last-of-type {\n      border-left-width: 0;\n      border-radius: 0 4px 4px 0;\n      margin-left: 0; }\n  .ios .toolbar ion-segment {\n    position: absolute;\n    left: 0;\n    right: 0;\n    top: 0;\n    bottom: 0; }\n  .ios .toolbar .segment-button {\n    max-width: 100px;\n    min-height: 2.4rem;\n    line-height: 2.4rem;\n    font-size: 1.2rem; }\n  .ios ion-segment[primary] .segment-button {\n    border-color: #387ef5;\n    color: #387ef5; }\n    .ios ion-segment[primary] .segment-button:hover:not(.segment-activated) {\n      background-color: rgba(56, 126, 245, 0.16); }\n    .ios ion-segment[primary] .segment-button.activated, .ios ion-segment[primary] .segment-button.segment-activated {\n      color: white;\n      background-color: #387ef5; }\n  .ios .toolbar[primary] .segment-button.segment-activated {\n    color: #387ef5; }\n  .ios ion-segment[secondary] .segment-button {\n    border-color: #32db64;\n    color: #32db64; }\n    .ios ion-segment[secondary] .segment-button:hover:not(.segment-activated) {\n      background-color: rgba(50, 219, 100, 0.16); }\n    .ios ion-segment[secondary] .segment-button.activated, .ios ion-segment[secondary] .segment-button.segment-activated {\n      color: white;\n      background-color: #32db64; }\n  .ios .toolbar[secondary] .segment-button.segment-activated {\n    color: #32db64; }\n  .ios ion-segment[danger] .segment-button {\n    border-color: #f53d3d;\n    color: #f53d3d; }\n    .ios ion-segment[danger] .segment-button:hover:not(.segment-activated) {\n      background-color: rgba(245, 61, 61, 0.16); }\n    .ios ion-segment[danger] .segment-button.activated, .ios ion-segment[danger] .segment-button.segment-activated {\n      color: white;\n      background-color: #f53d3d; }\n  .ios .toolbar[danger] .segment-button.segment-activated {\n    color: #f53d3d; }\n  .ios ion-segment[light] .segment-button {\n    border-color: #f4f4f4;\n    color: #f4f4f4; }\n    .ios ion-segment[light] .segment-button:hover:not(.segment-activated) {\n      background-color: rgba(244, 244, 244, 0.16); }\n    .ios ion-segment[light] .segment-button.activated, .ios ion-segment[light] .segment-button.segment-activated {\n      color: black;\n      background-color: #f4f4f4; }\n  .ios .toolbar[light] .segment-button.segment-activated {\n    color: #f4f4f4; }\n  .ios ion-segment[dark] .segment-button {\n    border-color: #222;\n    color: #222; }\n    .ios ion-segment[dark] .segment-button:hover:not(.segment-activated) {\n      background-color: rgba(34, 34, 34, 0.16); }\n    .ios ion-segment[dark] .segment-button.activated, .ios ion-segment[dark] .segment-button.segment-activated {\n      color: white;\n      background-color: #222; }\n  .ios .toolbar[dark] .segment-button.segment-activated {\n    color: #222; }\n  .ios ion-tabs {\n    display: -webkit-box;\n    display: -webkit-flex;\n    display: -ms-flexbox;\n    display: flex;\n    -webkit-box-orient: vertical;\n    -webkit-box-direction: normal;\n    -webkit-flex-direction: column;\n    -ms-flex-direction: column;\n    flex-direction: column;\n    overflow: hidden;\n    width: 100%;\n    height: 100%;\n    max-width: 100%;\n    max-height: 100%;\n    margin: 0;\n    padding: 0; }\n  .ios ion-tab {\n    position: absolute;\n    top: 0;\n    right: 0;\n    bottom: 0;\n    left: 0;\n    width: 100%;\n    height: 100%;\n    overflow: hidden;\n    -webkit-box-orient: vertical;\n    -webkit-box-direction: normal;\n    -webkit-flex-direction: column;\n    -ms-flex-direction: column;\n    flex-direction: column;\n    display: none; }\n    .ios ion-tab.show-tab {\n      display: -webkit-box;\n      display: -webkit-flex;\n      display: -ms-flexbox;\n      display: flex; }\n  .ios ion-tabs > ion-navbar-section {\n    -webkit-box-ordinal-group: -29;\n    -webkit-order: -30;\n    -ms-flex-order: -30;\n    order: -30; }\n  .ios ion-tabbar-section {\n    position: relative;\n    -webkit-box-ordinal-group: 21;\n    -webkit-order: 20;\n    -ms-flex-order: 20;\n    order: 20; }\n  .ios [tabbarPlacement=top] ion-tabbar-section {\n    -webkit-box-ordinal-group: -19;\n    -webkit-order: -20;\n    -ms-flex-order: -20;\n    order: -20; }\n  .ios tabbar {\n    position: relative;\n    display: -webkit-box;\n    display: -webkit-flex;\n    display: -ms-flexbox;\n    display: flex;\n    -webkit-box-pack: center;\n    -webkit-justify-content: center;\n    -ms-flex-pack: center;\n    justify-content: center;\n    overflow: hidden; }\n  .ios .tab-button {\n    position: relative;\n    z-index: 0;\n    overflow: hidden;\n    display: -webkit-box;\n    display: -webkit-flex;\n    display: -ms-flexbox;\n    display: flex;\n    -webkit-box-orient: vertical;\n    -webkit-box-direction: normal;\n    -webkit-flex-direction: column;\n    -ms-flex-direction: column;\n    flex-direction: column;\n    -webkit-box-pack: center;\n    -webkit-justify-content: center;\n    -ms-flex-pack: center;\n    justify-content: center;\n    -webkit-box-flex: 1;\n    -webkit-flex: 1;\n    -ms-flex: 1;\n    flex: 1;\n    -webkit-align-self: center;\n    -ms-flex-item-align: center;\n    align-self: center;\n    -webkit-box-align: center;\n    -webkit-align-items: center;\n    -ms-flex-align: center;\n    align-items: center;\n    margin: 0;\n    text-align: center;\n    cursor: pointer;\n    -webkit-user-select: none;\n    -moz-user-select: none;\n    -ms-user-select: none;\n    user-select: none;\n    border: 0;\n    border-radius: 0;\n    background: none; }\n  .ios .tab-button-text {\n    margin-top: 3px;\n    margin-bottom: 2px; }\n  .ios .tab-button-text,\n  .ios .tab-button-icon {\n    -webkit-align-self: center;\n    -ms-flex-item-align: center;\n    align-self: center;\n    min-width: 26px;\n    max-width: 100%;\n    overflow: hidden;\n    white-space: nowrap;\n    text-overflow: ellipsis;\n    display: none; }\n  .ios .has-icon .tab-button-icon,\n  .ios .has-title .tab-button-text {\n    display: block; }\n  .ios .has-title-only .tab-button-text {\n    white-space: normal; }\n  .ios tab-highlight {\n    display: none; }\n  .ios [tabbarIcons=bottom] .tab-button .tab-button-icon {\n    -webkit-box-ordinal-group: 11;\n    -webkit-order: 10;\n    -ms-flex-order: 10;\n    order: 10; }\n  .ios [tabbarIcons=left] .tab-button {\n    -webkit-box-orient: horizontal;\n    -webkit-box-direction: normal;\n    -webkit-flex-direction: row;\n    -ms-flex-direction: row;\n    flex-direction: row; }\n    .ios [tabbarIcons=left] .tab-button .tab-button-icon {\n      text-align: right;\n      padding-right: 8px; }\n  .ios [tabbarIcons=right] .tab-button {\n    -webkit-box-orient: horizontal;\n    -webkit-box-direction: normal;\n    -webkit-flex-direction: row;\n    -ms-flex-direction: row;\n    flex-direction: row; }\n    .ios [tabbarIcons=right] .tab-button .tab-button-icon {\n      -webkit-box-ordinal-group: 11;\n      -webkit-order: 10;\n      -ms-flex-order: 10;\n      order: 10;\n      text-align: left;\n      padding-left: 8px; }\n  .ios [tabbarIcons=hide] .tab-button-icon {\n    display: none; }\n  .ios tabbar {\n    border-top: 1px solid #b2b2b2;\n    background: #f8f8f8; }\n  .ios ion-tabs[tabbarPlacement=top] tabbar {\n    border-top: none;\n    border-bottom: 1px solid #b2b2b2; }\n  .ios .tab-button {\n    padding: 0px 10px;\n    min-width: 80px;\n    max-width: 240px;\n    min-height: 49px;\n    color: #8c8c8c; }\n  .ios .tab-button:hover:not(.disable-hover),\n  .ios .tab-button[aria-selected=true] {\n    color: #387ef5; }\n  .ios .tab-button-text {\n    margin-bottom: 0;\n    min-height: 11px;\n    font-size: 10px; }\n  .ios .has-title-only .tab-button-text {\n    font-size: 12px; }\n  .ios .tab-button-icon {\n    font-size: 32px;\n    height: 32px;\n    min-width: 37px; }\n    .ios .tab-button-icon:before {\n      vertical-align: top; }\n  .ios [tabbarIcons=right] .tab-button .tab-button-text,\n  .ios [tabbarIcons=left] .tab-button .tab-button-text {\n    font-size: 1.4rem;\n    line-height: 1.1;\n    margin-top: 0;\n    margin-bottom: 0; }\n  .ios [tabbarIcons=right] .tab-button icon,\n  .ios [tabbarIcons=left] .tab-button icon {\n    min-width: 24px;\n    height: 26px;\n    font-size: 24px; }\n  .ios [tabbarIcons=hide] .tab-button-text {\n    font-size: 1.4rem;\n    line-height: 1.1; }\n  .ios .tab-button.has-title-only {\n    min-height: 41px; }\n    .ios .tab-button.has-title-only .tab-button-text {\n      font-size: 1.4rem;\n      line-height: 1.1; }\n  .ios .tab-button.icon-only {\n    min-height: 41px; }\n  .ios.hairlines ion-tabs tabbar {\n    border-top-width: 0.55px; }\n  .ios.hairlines ion-tabs[tabbarPlacement=\"top\"] tabbar {\n    border-bottom-width: 0.55px; }\n  .ios ion-tabs[primary] tabbar {\n    border-color: #0c60ee;\n    background-color: #387ef5; }\n    .ios ion-tabs[primary] tabbar .tab-button {\n      color: white; }\n    .ios ion-tabs[primary] tabbar .tab-button:hover:not(.disable-hover),\n    .ios ion-tabs[primary] tabbar .tab-button[aria-selected=true] {\n      color: white; }\n  .ios ion-tabs[secondary] tabbar {\n    border-color: #21b94e;\n    background-color: #32db64; }\n    .ios ion-tabs[secondary] tabbar .tab-button {\n      color: white; }\n    .ios ion-tabs[secondary] tabbar .tab-button:hover:not(.disable-hover),\n    .ios ion-tabs[secondary] tabbar .tab-button[aria-selected=true] {\n      color: white; }\n  .ios ion-tabs[danger] tabbar {\n    border-color: #f30d0d;\n    background-color: #f53d3d; }\n    .ios ion-tabs[danger] tabbar .tab-button {\n      color: white; }\n    .ios ion-tabs[danger] tabbar .tab-button:hover:not(.disable-hover),\n    .ios ion-tabs[danger] tabbar .tab-button[aria-selected=true] {\n      color: white; }\n  .ios ion-tabs[light] tabbar {\n    border-color: #dbdbdb;\n    background-color: #f4f4f4; }\n    .ios ion-tabs[light] tabbar .tab-button {\n      color: black; }\n    .ios ion-tabs[light] tabbar .tab-button:hover:not(.disable-hover),\n    .ios ion-tabs[light] tabbar .tab-button[aria-selected=true] {\n      color: black; }\n  .ios ion-tabs[dark] tabbar {\n    border-color: #090909;\n    background-color: #222; }\n    .ios ion-tabs[dark] tabbar .tab-button {\n      color: white; }\n    .ios ion-tabs[dark] tabbar .tab-button:hover:not(.disable-hover),\n    .ios ion-tabs[dark] tabbar .tab-button[aria-selected=true] {\n      color: white; }\n  .ios .item-input {\n    display: block;\n    background: transparent;\n    border: 0;\n    -webkit-box-flex: 1;\n    -webkit-flex: 1;\n    -ms-flex: 1;\n    flex: 1;\n    pointer-events: none; }\n  .ios input.item-input:-webkit-autofill {\n    background-color: transparent; }\n  .ios [scroll-assist] {\n    width: 1px;\n    height: 1px;\n    padding: 0;\n    background: transparent;\n    border: 0;\n    pointer-events: none; }\n  .ios .input-focused .item-input {\n    pointer-events: auto; }\n  .ios textarea {\n    height: auto;\n    overflow: auto;\n    font: inherit;\n    color: inherit; }\n  .ios .platform-mobile textarea {\n    resize: none; }\n  .ios input::-moz-placeholder,\n  .ios textarea::-moz-placeholder {\n    color: #999; }\n  .ios input:-ms-input-placeholder,\n  .ios textarea:-ms-input-placeholder {\n    color: #999; }\n  .ios input::-webkit-input-placeholder,\n  .ios textarea::-webkit-input-placeholder {\n    color: #999;\n    text-indent: 0; }\n  .ios .item-input {\n    margin: 12px 8px 13px 0;\n    padding: 0;\n    background-color: #fff; }\n  .ios .inset-input {\n    margin: 6px 16px 6.5px 16px;\n    padding: 6px 8px 6.5px 8px; }\n  .ios .stacked-input,\n  .ios .floating-input {\n    margin-top: 8px;\n    margin-bottom: 8px; }\n  .ios ion-toggle {\n    display: block;\n    -webkit-user-select: none;\n    -moz-user-select: none;\n    -ms-user-select: none;\n    user-select: none; }\n    .ios ion-toggle.item.activated {\n      background: #fff; }\n  .ios .toggle-media {\n    margin: 0;\n    padding: 6px 8px 5px 16px;\n    cursor: pointer; }\n  .ios .toggle-icon {\n    position: relative;\n    display: block;\n    width: 51px;\n    height: 32px;\n    border-radius: 16px;\n    pointer-events: none;\n    background-color: #e6e6e6;\n    -webkit-transition: background-color 300ms;\n    transition: background-color 300ms; }\n  .ios .toggle-icon:before {\n    content: '';\n    position: absolute;\n    top: 2px;\n    right: 2px;\n    left: 2px;\n    bottom: 2px;\n    border-radius: 16px;\n    background-color: #fff;\n    -webkit-transform: scale3d(1, 1, 1);\n    transform: scale3d(1, 1, 1);\n    -webkit-transition: -webkit-transform 300ms;\n    transition: transform 300ms; }\n  .ios .toggle-icon:after {\n    content: '';\n    position: absolute;\n    top: 2px;\n    left: 2px;\n    width: 28px;\n    height: 28px;\n    border-radius: 14px;\n    background-color: #fff;\n    box-shadow: 0 3px 12px rgba(0, 0, 0, 0.16), 0 3px 1px rgba(0, 0, 0, 0.1);\n    -webkit-transition: -webkit-transform 300ms, width 120ms ease-in-out 80ms, left 110ms ease-in-out 80ms;\n    transition: transform 300ms, width 120ms ease-in-out 80ms, left 110ms ease-in-out 80ms; }\n  .ios ion-toggle[aria-checked=true] .toggle-icon {\n    background-color: #387ef5; }\n    .ios ion-toggle[aria-checked=true] .toggle-icon:before {\n      -webkit-transform: scale3d(0, 0, 0);\n      transform: scale3d(0, 0, 0); }\n    .ios ion-toggle[aria-checked=true] .toggle-icon:after {\n      -webkit-transform: translate3d(19px, 0, 0);\n      transform: translate3d(19px, 0, 0); }\n  .ios ion-toggle[aria-checked=true] .toggle-activated .toggle-icon:before {\n    -webkit-transform: scale3d(0, 0, 0);\n    transform: scale3d(0, 0, 0); }\n  .ios ion-toggle[aria-checked=true] .toggle-activated .toggle-icon:after {\n    left: -4px;\n    width: 34px; }\n  .ios ion-toggle[aria-disabled=true] {\n    opacity: 0.5;\n    color: #666;\n    pointer-events: none; }\n  .ios ion-toggle[primary][aria-checked=true] .toggle-icon {\n    background-color: #387ef5; }\n  .ios ion-toggle[secondary][aria-checked=true] .toggle-icon {\n    background-color: #32db64; }\n  .ios ion-toggle[danger][aria-checked=true] .toggle-icon {\n    background-color: #f53d3d; }\n  .ios ion-toggle[light][aria-checked=true] .toggle-icon {\n    background-color: #f4f4f4; }\n  .ios ion-toggle[dark][aria-checked=true] .toggle-icon {\n    background-color: #222; }\n  .ios .toolbar {\n    position: relative;\n    z-index: 10;\n    display: -webkit-box;\n    display: -webkit-flex;\n    display: -ms-flexbox;\n    display: flex;\n    -webkit-box-orient: horizontal;\n    -webkit-box-direction: normal;\n    -webkit-flex-direction: row;\n    -ms-flex-direction: row;\n    flex-direction: row;\n    -webkit-box-align: center;\n    -webkit-align-items: center;\n    -ms-flex-align: center;\n    align-items: center;\n    -webkit-box-pack: justify;\n    -webkit-justify-content: space-between;\n    -ms-flex-pack: justify;\n    justify-content: space-between;\n    -webkit-box-ordinal-group: -9;\n    -webkit-order: -10;\n    -ms-flex-order: -10;\n    order: -10;\n    -webkit-box-flex: 0;\n    -webkit-flex: 0;\n    -ms-flex: 0;\n    flex: 0;\n    width: 100%;\n    overflow: hidden; }\n  .ios .toolbar-background {\n    position: absolute;\n    left: 0;\n    top: 0;\n    width: 100%;\n    height: 100%;\n    z-index: -1;\n    border: 0;\n    pointer-events: none;\n    -webkit-transform: translateZ(0px);\n    transform: translateZ(0px); }\n  .ios .toolbar[position=bottom] {\n    -webkit-box-ordinal-group: 11;\n    -webkit-order: 10;\n    -ms-flex-order: 10;\n    order: 10; }\n  .ios ion-title {\n    -webkit-box-flex: 1;\n    -webkit-flex: 1;\n    -ms-flex: 1;\n    flex: 1;\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    -webkit-transform: translateZ(0px);\n    transform: translateZ(0px); }\n  .ios .toolbar-title {\n    display: block;\n    width: 100%;\n    white-space: nowrap;\n    text-overflow: ellipsis;\n    overflow: hidden; }\n  .ios ion-buttons {\n    display: block;\n    margin: 0 0.2rem;\n    pointer-events: none;\n    -webkit-transform: translateZ(0px);\n    transform: translateZ(0px); }\n  .ios ion-buttons button,\n  .ios ion-buttons a,\n  .ios ion-buttons input,\n  .ios ion-buttons textarea,\n  .ios ion-buttons div {\n    pointer-events: auto; }\n  .ios .toolbar[transparent] .toolbar-background {\n    background: transparent;\n    border-color: transparent; }\n  .ios ion-buttons,\n  .ios .bar-button-menutoggle {\n    -webkit-transform: translateZ(0px);\n    transform: translateZ(0px);\n    z-index: 99; }\n  .ios ion-navbar.toolbar {\n    -webkit-transform: translateZ(0px);\n    transform: translateZ(0px);\n    display: -webkit-box;\n    display: -webkit-flex;\n    display: -ms-flexbox;\n    display: flex;\n    opacity: 0; }\n    .ios ion-navbar.toolbar.show-navbar {\n      opacity: 1; }\n  .ios .bar-button {\n    position: relative;\n    display: -webkit-inline-box;\n    display: -webkit-inline-flex;\n    display: -ms-inline-flexbox;\n    display: inline-flex;\n    -webkit-flex-shrink: 0;\n    -ms-flex-negative: 0;\n    flex-shrink: 0;\n    -webkit-flex-flow: row nowrap;\n    -ms-flex-flow: row nowrap;\n    flex-flow: row nowrap;\n    -webkit-box-align: center;\n    -webkit-align-items: center;\n    -ms-flex-align: center;\n    align-items: center;\n    -webkit-box-pack: center;\n    -webkit-justify-content: center;\n    -ms-flex-pack: center;\n    justify-content: center;\n    margin: 0;\n    padding: 0;\n    white-space: nowrap;\n    text-overflow: ellipsis;\n    overflow: hidden;\n    text-align: center;\n    text-transform: none;\n    vertical-align: top;\n    vertical-align: -webkit-baseline-middle;\n    cursor: pointer;\n    -webkit-user-select: none;\n    -moz-user-select: none;\n    -ms-user-select: none;\n    user-select: none;\n    -webkit-appearance: none;\n    -moz-appearance: none; }\n  .ios .bar-button-menutoggle {\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  .ios .back-button {\n    display: none; }\n    .ios .back-button.show-back-button {\n      display: -webkit-box;\n      display: -webkit-flex;\n      display: -ms-flexbox;\n      display: flex; }\n  .ios .back-button-text {\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  .ios .toolbar {\n    padding: 4px;\n    min-height: 4.4rem; }\n  .ios ion-navbar-section {\n    min-height: 4.4rem; }\n  .ios .toolbar-background {\n    border-bottom-width: 1px;\n    border-bottom-style: solid;\n    border-color: #b2b2b2;\n    background: #f8f8f8; }\n  .ios.hairlines .toolbar-background {\n    border-bottom-width: 0.55px; }\n  .ios .toolbar-content {\n    -webkit-box-flex: 1;\n    -webkit-flex: 1;\n    -ms-flex: 1;\n    flex: 1;\n    -webkit-box-ordinal-group: 5;\n    -webkit-order: 4;\n    -ms-flex-order: 4;\n    order: 4; }\n  .ios .toolbar-title {\n    font-size: 1.7rem;\n    font-weight: 500;\n    text-align: center;\n    pointer-events: auto;\n    color: #000; }\n  .ios ion-title {\n    position: absolute;\n    top: 0;\n    left: 0;\n    width: 100%;\n    height: 100%;\n    padding: 0px 90px 1px 90px;\n    pointer-events: none;\n    -webkit-transform: translateZ(0px);\n    transform: translateZ(0px); }\n  .ios ion-buttons {\n    -webkit-box-flex: 1;\n    -webkit-flex: 1;\n    -ms-flex: 1;\n    flex: 1;\n    -webkit-box-ordinal-group: 4;\n    -webkit-order: 3;\n    -ms-flex-order: 3;\n    order: 3;\n    -webkit-transform: translateZ(0px);\n    transform: translateZ(0px); }\n  .ios ion-buttons[left] {\n    -webkit-box-ordinal-group: 3;\n    -webkit-order: 2;\n    -ms-flex-order: 2;\n    order: 2; }\n  .ios ion-buttons[end] {\n    text-align: right;\n    -webkit-box-ordinal-group: 6;\n    -webkit-order: 5;\n    -ms-flex-order: 5;\n    order: 5; }\n  .ios ion-buttons[right] {\n    text-align: right;\n    -webkit-box-ordinal-group: 7;\n    -webkit-order: 6;\n    -ms-flex-order: 6;\n    order: 6; }\n  .ios .bar-button {\n    margin-top: 0;\n    margin-bottom: 0;\n    padding: 0 5px;\n    min-height: 32px;\n    border: 0;\n    font-size: 1.7rem;\n    border-radius: 4px; }\n  .ios .bar-button-outline {\n    border-width: 1px;\n    border-style: solid;\n    border-color: #387ef5;\n    color: #387ef5;\n    background-color: transparent; }\n    .ios .bar-button-outline:hover:not(.disable-hover) {\n      opacity: 0.4; }\n    .ios .bar-button-outline.activated {\n      color: white;\n      background-color: #387ef5; }\n  .ios .bar-button-solid {\n    color: white;\n    background-color: #387ef5; }\n    .ios .bar-button-solid:hover:not(.disable-hover) {\n      opacity: 0.4;\n      color: white; }\n    .ios .bar-button-solid.activated {\n      opacity: 0.4;\n      color: white;\n      background-color: #3474e1; }\n  .ios .bar-button-icon-left icon {\n    margin-left: -0.1em;\n    padding-right: 0.3em;\n    font-size: 1.4em;\n    line-height: 0.67;\n    pointer-events: none; }\n  .ios .bar-button-icon-right icon {\n    padding-left: 0.4em;\n    font-size: 1.4em;\n    line-height: 0.67;\n    pointer-events: none; }\n  .ios .bar-button-icon-only {\n    padding: 0;\n    min-width: 0.9em; }\n    .ios .bar-button-icon-only icon {\n      padding: 0 0.1em;\n      font-size: 1.8em;\n      line-height: 0.67;\n      pointer-events: none; }\n  .ios .back-button {\n    margin: 0;\n    min-height: 3.2rem;\n    line-height: 1;\n    -webkit-box-ordinal-group: 1;\n    -webkit-order: 0;\n    -ms-flex-order: 0;\n    order: 0;\n    overflow: visible;\n    -webkit-transform: translateZ(0px);\n    transform: translateZ(0px); }\n  .ios .back-button-icon {\n    display: inherit;\n    margin: 0;\n    min-width: 18px;\n    font-size: 3.2rem; }\n  .ios .bar-button-menutoggle {\n    margin: 0 6px;\n    padding: 0;\n    min-width: 36px;\n    -webkit-box-ordinal-group: 2;\n    -webkit-order: 1;\n    -ms-flex-order: 1;\n    order: 1; }\n    .ios .bar-button-menutoggle icon {\n      padding: 0 6px;\n      font-size: 2.8rem; }\n  .ios .bar-button-menutoggle[end],\n  .ios .bar-button-menutoggle[right] {\n    -webkit-box-ordinal-group: 8;\n    -webkit-order: 7;\n    -ms-flex-order: 7;\n    order: 7; }\n  .ios .bar-button-default {\n    color: #3474e1;\n    background-color: transparent; }\n    .ios .bar-button-default:hover:not(.disable-hover) {\n      color: #306bcf; }\n    .ios .bar-button-default.activated {\n      opacity: 0.4; }\n  .ios .toolbar[primary] .toolbar-background {\n    background: #387ef5;\n    border-color: #0c60ee; }\n  .ios .toolbar[primary] .toolbar-title,\n  .ios .toolbar[primary] .bar-button-default {\n    color: white; }\n  .ios .bar-button-primary {\n    color: #3474e1;\n    background-color: transparent; }\n    .ios .bar-button-primary:hover:not(.disable-hover) {\n      color: #306bcf; }\n    .ios .bar-button-primary.activated {\n      opacity: 0.4; }\n  .ios .bar-button-outline-primary {\n    border-color: #3474e1;\n    color: #3474e1;\n    background-color: transparent; }\n    .ios .bar-button-outline-primary.activated {\n      color: white;\n      background-color: #3474e1; }\n  .ios .bar-button-solid-primary {\n    color: white;\n    background-color: #387ef5; }\n    .ios .bar-button-solid-primary.activated {\n      background-color: #3474e1; }\n  .ios .toolbar[secondary] .toolbar-background {\n    background: #32db64;\n    border-color: #21b94e; }\n  .ios .toolbar[secondary] .toolbar-title,\n  .ios .toolbar[secondary] .bar-button-default {\n    color: white; }\n  .ios .bar-button-secondary {\n    color: #2ec95c;\n    background-color: transparent; }\n    .ios .bar-button-secondary:hover:not(.disable-hover) {\n      color: #3fcd69; }\n    .ios .bar-button-secondary.activated {\n      opacity: 0.4; }\n  .ios .bar-button-outline-secondary {\n    border-color: #2ec95c;\n    color: #2ec95c;\n    background-color: transparent; }\n    .ios .bar-button-outline-secondary.activated {\n      color: white;\n      background-color: #2ec95c; }\n  .ios .bar-button-solid-secondary {\n    color: white;\n    background-color: #32db64; }\n    .ios .bar-button-solid-secondary.activated {\n      background-color: #2ec95c; }\n  .ios .toolbar[danger] .toolbar-background {\n    background: #f53d3d;\n    border-color: #f30d0d; }\n  .ios .toolbar[danger] .toolbar-title,\n  .ios .toolbar[danger] .bar-button-default {\n    color: white; }\n  .ios .bar-button-danger {\n    color: #e13838;\n    background-color: transparent; }\n    .ios .bar-button-danger:hover:not(.disable-hover) {\n      color: #cf3434; }\n    .ios .bar-button-danger.activated {\n      opacity: 0.4; }\n  .ios .bar-button-outline-danger {\n    border-color: #e13838;\n    color: #e13838;\n    background-color: transparent; }\n    .ios .bar-button-outline-danger.activated {\n      color: white;\n      background-color: #e13838; }\n  .ios .bar-button-solid-danger {\n    color: white;\n    background-color: #f53d3d; }\n    .ios .bar-button-solid-danger.activated {\n      background-color: #e13838; }\n  .ios .toolbar[light] .toolbar-background {\n    background: #f4f4f4;\n    border-color: #dbdbdb; }\n  .ios .toolbar[light] .toolbar-title,\n  .ios .toolbar[light] .bar-button-default {\n    color: black; }\n  .ios .bar-button-light {\n    color: #e0e0e0;\n    background-color: transparent; }\n    .ios .bar-button-light:hover:not(.disable-hover) {\n      color: #cecece; }\n    .ios .bar-button-light.activated {\n      opacity: 0.4; }\n  .ios .bar-button-outline-light {\n    border-color: #e0e0e0;\n    color: #e0e0e0;\n    background-color: transparent; }\n    .ios .bar-button-outline-light.activated {\n      color: black;\n      background-color: #e0e0e0; }\n  .ios .bar-button-solid-light {\n    color: black;\n    background-color: #f4f4f4; }\n    .ios .bar-button-solid-light.activated {\n      background-color: #e0e0e0; }\n  .ios .toolbar[dark] .toolbar-background {\n    background: #222;\n    border-color: #090909; }\n  .ios .toolbar[dark] .toolbar-title,\n  .ios .toolbar[dark] .bar-button-default {\n    color: white; }\n  .ios .bar-button-dark {\n    color: #343434;\n    background-color: transparent; }\n    .ios .bar-button-dark:hover:not(.disable-hover) {\n      color: #444444; }\n    .ios .bar-button-dark.activated {\n      opacity: 0.4; }\n  .ios .bar-button-outline-dark {\n    border-color: #343434;\n    color: #343434;\n    background-color: transparent; }\n    .ios .bar-button-outline-dark.activated {\n      color: white;\n      background-color: #343434; }\n  .ios .bar-button-solid-dark {\n    color: white;\n    background-color: #222; }\n    .ios .bar-button-solid-dark.activated {\n      background-color: #343434; }\n  .ios.platform-cordova.platform-ios ion-navbar-section {\n    min-height: 6.4rem;\n    height: 6.4rem; }\n  .ios.platform-cordova.platform-ios ion-navbar ion-title,\n  .ios.platform-cordova.platform-ios ion-navbar ion-segment {\n    padding-top: 2rem; }\n  .ios.platform-cordova.platform-ios ion-navbar,\n  .ios.platform-cordova.platform-ios ion-app > ion-toolbar:first-child,\n  .ios.platform-cordova.platform-ios ion-app > ion-toolbar:first-child ion-title,\n  .ios.platform-cordova.platform-ios ion-app > ion-toolbar:first-child ion-segment,\n  .ios.platform-cordova.platform-ios ion-menu > ion-toolbar:first-child,\n  .ios.platform-cordova.platform-ios ion-menu > ion-toolbar:first-child ion-title,\n  .ios.platform-cordova.platform-ios ion-menu > ion-toolbar:first-child ion-segment,\n  .ios.platform-cordova.platform-ios ion-page.modal > ion-toolbar:first-child,\n  .ios.platform-cordova.platform-ios ion-page.modal > ion-toolbar:first-child ion-title,\n  .ios.platform-cordova.platform-ios ion-page.modal > ion-toolbar:first-child ion-segment {\n    min-height: 6.4rem;\n    height: 6.4rem;\n    padding-top: 2rem; }\n\n.md {\n  /****************/\n  /* DEFAULT LIST */\n  /****************/\n  /**************/\n  /* INSET LIST */\n  /**************/\n  /*****************/\n  /* NO LINES LIST */\n  /*****************/\n  font-family: \"Roboto\", \"Helvetica Neue\", sans-serif;\n  font-size: 1.4rem;\n  background-color: #fff; }\n\n/**\n  Roboto Font\n  Google\n  Apache License, version 2.0\n  http://www.apache.org/licenses/LICENSE-2.0.html\n */\n@font-face {\n  font-family: 'Roboto';\n  font-style: normal;\n  font-weight: 300;\n  src: local(\"Roboto Light\"), local(\"Roboto-Light\"), url(\"../fonts/roboto-light.ttf\") format(\"truetype\"), url(\"../fonts/roboto-light.woff\") format(\"woff\"); }\n\n@font-face {\n  font-family: 'Roboto';\n  font-style: normal;\n  font-weight: 400;\n  src: local(\"Roboto\"), local(\"Roboto-Regular\"), url(\"../fonts/roboto-regular.ttf\") format(\"truetype\"), url(\"../fonts/roboto-regular.woff\") format(\"woff\"); }\n\n@font-face {\n  font-family: 'Roboto';\n  font-style: normal;\n  font-weight: 500;\n  src: local(\"Roboto Medium\"), local(\"Roboto-Medium\"), url(\"../fonts/roboto-medium.ttf\") format(\"truetype\"), url(\"../fonts/roboto-medium.woff\") format(\"woff\"); }\n\n@font-face {\n  font-family: 'Roboto';\n  font-style: normal;\n  font-weight: 700;\n  src: local(\"Roboto Bold\"), local(\"Roboto-Bold\"), url(\"../fonts/roboto-bold.ttf\") format(\"truetype\"), url(\"../fonts/roboto-bold.woff\") format(\"woff\"); }\n\n/**\n  Roboto Font\n  Google\n  Apache License, version 2.0\n  http://www.apache.org/licenses/LICENSE-2.0.html\n */\n@font-face {\n  font-family: 'Roboto';\n  font-style: normal;\n  font-weight: 300;\n  src: local(\"Roboto Light\"), local(\"Roboto-Light\"), url(\"../fonts/roboto-light.ttf\") format(\"truetype\"), url(\"../fonts/roboto-light.woff\") format(\"woff\"); }\n\n@font-face {\n  font-family: 'Roboto';\n  font-style: normal;\n  font-weight: 400;\n  src: local(\"Roboto\"), local(\"Roboto-Regular\"), url(\"../fonts/roboto-regular.ttf\") format(\"truetype\"), url(\"../fonts/roboto-regular.woff\") format(\"woff\"); }\n\n@font-face {\n  font-family: 'Roboto';\n  font-style: normal;\n  font-weight: 500;\n  src: local(\"Roboto Medium\"), local(\"Roboto-Medium\"), url(\"../fonts/roboto-medium.ttf\") format(\"truetype\"), url(\"../fonts/roboto-medium.woff\") format(\"woff\"); }\n\n@font-face {\n  font-family: 'Roboto';\n  font-style: normal;\n  font-weight: 700;\n  src: local(\"Roboto Bold\"), local(\"Roboto-Bold\"), url(\"../fonts/roboto-bold.ttf\") format(\"truetype\"), url(\"../fonts/roboto-bold.woff\") format(\"woff\"); }\n  .md ion-content {\n    color: #000; }\n  .md p {\n    color: #000; }\n  .md a {\n    color: #387ef5; }\n  .md hr {\n    background-color: rgba(0, 0, 0, 0.08); }\n  .md h1[primary], .md h2[primary], .md h3[primary], .md h4[primary], .md h5[primary], .md h6[primary],\n  .md p[primary],\n  .md span[primary],\n  .md a:not([button])[primary],\n  .md small[primary],\n  .md b[primary],\n  .md i[primary],\n  .md strong[primary],\n  .md em[primary],\n  .md sub[primary],\n  .md sup[primary] {\n    color: #387ef5 !important; }\n  .md h1[secondary], .md h2[secondary], .md h3[secondary], .md h4[secondary], .md h5[secondary], .md h6[secondary],\n  .md p[secondary],\n  .md span[secondary],\n  .md a:not([button])[secondary],\n  .md small[secondary],\n  .md b[secondary],\n  .md i[secondary],\n  .md strong[secondary],\n  .md em[secondary],\n  .md sub[secondary],\n  .md sup[secondary] {\n    color: #32db64 !important; }\n  .md h1[danger], .md h2[danger], .md h3[danger], .md h4[danger], .md h5[danger], .md h6[danger],\n  .md p[danger],\n  .md span[danger],\n  .md a:not([button])[danger],\n  .md small[danger],\n  .md b[danger],\n  .md i[danger],\n  .md strong[danger],\n  .md em[danger],\n  .md sub[danger],\n  .md sup[danger] {\n    color: #f53d3d !important; }\n  .md h1[light], .md h2[light], .md h3[light], .md h4[light], .md h5[light], .md h6[light],\n  .md p[light],\n  .md span[light],\n  .md a:not([button])[light],\n  .md small[light],\n  .md b[light],\n  .md i[light],\n  .md strong[light],\n  .md em[light],\n  .md sub[light],\n  .md sup[light] {\n    color: #f4f4f4 !important; }\n  .md h1[dark], .md h2[dark], .md h3[dark], .md h4[dark], .md h5[dark], .md h6[dark],\n  .md p[dark],\n  .md span[dark],\n  .md a:not([button])[dark],\n  .md small[dark],\n  .md b[dark],\n  .md i[dark],\n  .md strong[dark],\n  .md em[dark],\n  .md sub[dark],\n  .md sup[dark] {\n    color: #222 !important; }\n\n/**\n  Roboto Font\n  Google\n  Apache License, version 2.0\n  http://www.apache.org/licenses/LICENSE-2.0.html\n */\n@font-face {\n  font-family: 'Roboto';\n  font-style: normal;\n  font-weight: 300;\n  src: local(\"Roboto Light\"), local(\"Roboto-Light\"), url(\"../fonts/roboto-light.ttf\") format(\"truetype\"), url(\"../fonts/roboto-light.woff\") format(\"woff\"); }\n\n@font-face {\n  font-family: 'Roboto';\n  font-style: normal;\n  font-weight: 400;\n  src: local(\"Roboto\"), local(\"Roboto-Regular\"), url(\"../fonts/roboto-regular.ttf\") format(\"truetype\"), url(\"../fonts/roboto-regular.woff\") format(\"woff\"); }\n\n@font-face {\n  font-family: 'Roboto';\n  font-style: normal;\n  font-weight: 500;\n  src: local(\"Roboto Medium\"), local(\"Roboto-Medium\"), url(\"../fonts/roboto-medium.ttf\") format(\"truetype\"), url(\"../fonts/roboto-medium.woff\") format(\"woff\"); }\n\n@font-face {\n  font-family: 'Roboto';\n  font-style: normal;\n  font-weight: 700;\n  src: local(\"Roboto Bold\"), local(\"Roboto-Bold\"), url(\"../fonts/roboto-bold.ttf\") format(\"truetype\"), url(\"../fonts/roboto-bold.woff\") format(\"woff\"); }\n  .md ion-action-sheet {\n    position: absolute;\n    top: 0;\n    left: 0;\n    width: 100%;\n    height: 100%;\n    display: block;\n    z-index: 1000; }\n  .md .action-sheet-wrapper {\n    position: absolute;\n    z-index: 10;\n    bottom: 0;\n    left: 0;\n    right: 0;\n    width: 100%;\n    display: block;\n    max-width: 500px;\n    margin: auto;\n    -webkit-transform: translate3d(0, 100%, 0);\n    transform: translate3d(0, 100%, 0); }\n  .md .action-sheet-container {\n    width: auto;\n    overflow: hidden; }\n  .md .action-sheet-button {\n    display: block;\n    width: 100%;\n    margin: 0;\n    border-radius: 0;\n    border-color: #d1d3d6; }\n    .md .action-sheet-button.activated {\n      box-shadow: none;\n      border-color: #d1d3d6;\n      background: #e4e5e7; }\n  .md .action-sheet-group {\n    background-color: #fff;\n    overflow: hidden; }\n  .md .action-sheet-options {\n    background: #f1f2f3; }\n  .md .action-sheet-title {\n    padding: 19px 16px 17px;\n    font-size: 1.6rem;\n    color: #757575;\n    text-align: left; }\n  .md .action-sheet-button {\n    padding: 0 16px;\n    min-height: 4.8rem;\n    font-size: 1.6rem;\n    font-weight: normal;\n    color: #222;\n    background-color: transparent;\n    text-align: left; }\n    .md .action-sheet-button.activated {\n      background: #f1f1f1;\n      border-radius: 0;\n      box-shadow: none; }\n  .md .action-sheet-icon {\n    display: inline-block;\n    margin: 0 28px 0 0;\n    min-width: 24px;\n    text-align: center;\n    vertical-align: middle;\n    font-size: 2.4rem; }\n  .md .action-sheet-group {\n    margin: 0;\n    border-radius: 0;\n    background-color: #fafafa; }\n    .md .action-sheet-group:last-child .action-sheet-button {\n      margin-bottom: 8px; }\n  .md .action-sheet-cancel {\n    background-color: #fafafa;\n    width: auto;\n    border: none; }\n  .md ion-badge {\n    display: inline-block;\n    padding: 3px 8px;\n    min-width: 10px;\n    vertical-align: baseline;\n    text-align: center;\n    white-space: nowrap;\n    font-size: 1.3rem;\n    font-weight: bold;\n    line-height: 1;\n    background: #ccc; }\n    .md ion-badge:empty {\n      display: none; }\n  .md ion-badge[primary] {\n    background-color: #387ef5;\n    color: white; }\n  .md ion-badge[secondary] {\n    background-color: #32db64;\n    color: white; }\n  .md ion-badge[danger] {\n    background-color: #f53d3d;\n    color: white; }\n  .md ion-badge[light] {\n    background-color: #f4f4f4;\n    color: black; }\n  .md ion-badge[dark] {\n    background-color: #222;\n    color: white; }\n  .md ion-badge {\n    border-radius: 4px; }\n\n/**\n  Roboto Font\n  Google\n  Apache License, version 2.0\n  http://www.apache.org/licenses/LICENSE-2.0.html\n */\n@font-face {\n  font-family: 'Roboto';\n  font-style: normal;\n  font-weight: 300;\n  src: local(\"Roboto Light\"), local(\"Roboto-Light\"), url(\"../fonts/roboto-light.ttf\") format(\"truetype\"), url(\"../fonts/roboto-light.woff\") format(\"woff\"); }\n\n@font-face {\n  font-family: 'Roboto';\n  font-style: normal;\n  font-weight: 400;\n  src: local(\"Roboto\"), local(\"Roboto-Regular\"), url(\"../fonts/roboto-regular.ttf\") format(\"truetype\"), url(\"../fonts/roboto-regular.woff\") format(\"woff\"); }\n\n@font-face {\n  font-family: 'Roboto';\n  font-style: normal;\n  font-weight: 500;\n  src: local(\"Roboto Medium\"), local(\"Roboto-Medium\"), url(\"../fonts/roboto-medium.ttf\") format(\"truetype\"), url(\"../fonts/roboto-medium.woff\") format(\"woff\"); }\n\n@font-face {\n  font-family: 'Roboto';\n  font-style: normal;\n  font-weight: 700;\n  src: local(\"Roboto Bold\"), local(\"Roboto-Bold\"), url(\"../fonts/roboto-bold.ttf\") format(\"truetype\"), url(\"../fonts/roboto-bold.woff\") format(\"woff\"); }\n  .md .button {\n    position: relative;\n    display: -webkit-inline-box;\n    display: -webkit-inline-flex;\n    display: -ms-inline-flexbox;\n    display: inline-flex;\n    -webkit-flex-shrink: 0;\n    -ms-flex-negative: 0;\n    flex-shrink: 0;\n    -webkit-flex-flow: row nowrap;\n    -ms-flex-flow: row nowrap;\n    flex-flow: row nowrap;\n    -webkit-box-align: center;\n    -webkit-align-items: center;\n    -ms-flex-align: center;\n    align-items: center;\n    -webkit-box-pack: center;\n    -webkit-justify-content: center;\n    -ms-flex-pack: center;\n    justify-content: center;\n    -webkit-transition: background-color, opacity 100ms linear;\n    transition: background-color, opacity 100ms linear;\n    white-space: nowrap;\n    text-overflow: ellipsis;\n    overflow: hidden;\n    text-align: center;\n    text-transform: none;\n    vertical-align: top;\n    vertical-align: -webkit-baseline-middle;\n    cursor: pointer;\n    -webkit-user-select: none;\n    -moz-user-select: none;\n    -ms-user-select: none;\n    user-select: none;\n    -webkit-appearance: none;\n    -moz-appearance: none; }\n  .md a.button {\n    text-decoration: none; }\n  .md .button[disabled] {\n    opacity: 0.4;\n    cursor: default !important;\n    pointer-events: none; }\n  .md .button-block {\n    display: -webkit-box;\n    display: -webkit-flex;\n    display: -ms-flexbox;\n    display: flex;\n    clear: both;\n    width: 100%; }\n    .md .button-block:after {\n      clear: both; }\n  .md .button-full {\n    width: 100%; }\n  .md .button-round {\n    padding: 0 2.6rem;\n    border-radius: 64px; }\n  .md .button-full.button-outline {\n    border-left-width: 0;\n    border-right-width: 0; }\n  .md .button {\n    margin: 0.4rem 0.2rem;\n    padding: 0 1.1em;\n    min-height: 3.6rem;\n    border-radius: 2px;\n    font-weight: 500;\n    font-size: 1.4rem;\n    color: white;\n    background-color: #387ef5;\n    box-shadow: 0 2px 2px 0 rgba(0, 0, 0, 0.14), 0 3px 1px -2px rgba(0, 0, 0, 0.2), 0 1px 5px 0 rgba(0, 0, 0, 0.12);\n    text-transform: uppercase;\n    -webkit-transition: box-shadow 300ms cubic-bezier(0.4, 0, 0.2, 1), background-color 300ms cubic-bezier(0.4, 0, 0.2, 1), color 300ms cubic-bezier(0.4, 0, 0.2, 1);\n    transition: box-shadow 300ms cubic-bezier(0.4, 0, 0.2, 1), background-color 300ms cubic-bezier(0.4, 0, 0.2, 1), color 300ms cubic-bezier(0.4, 0, 0.2, 1); }\n    .md .button:hover:not(.disable-hover) {\n      background-color: rgba(158, 158, 158, 0.1); }\n    .md .button.activated {\n      box-shadow: 0 3px 5px rgba(0, 0, 0, 0.14), 0 3px 5px rgba(0, 0, 0, 0.21);\n      background-color: #3474e1; }\n  .md .button-large {\n    padding: 0 1em;\n    min-height: 2.8em;\n    font-size: 2rem; }\n  .md .button-small {\n    padding: 0 0.9em;\n    min-height: 2.1em;\n    font-size: 1.3rem; }\n  .md .button-small.button-icon-only icon {\n    font-size: 1.4em; }\n  .md .button-full {\n    border-radius: 0;\n    margin-right: 0;\n    margin-left: 0;\n    border-right-width: 0;\n    border-left-width: 0; }\n  .md .button-block {\n    margin-right: 0;\n    margin-left: 0; }\n  .md .button-outline {\n    border-width: 1px;\n    border-style: solid;\n    border-color: #387ef5;\n    background-color: transparent;\n    color: #387ef5;\n    box-shadow: none; }\n    .md .button-outline.activated {\n      opacity: 1;\n      color: #fff;\n      background-color: #387ef5;\n      box-shadow: none; }\n    .md .button-outline md-ripple {\n      background-color: rgba(56, 126, 245, 0.1); }\n  .md .button-clear {\n    border-color: transparent;\n    opacity: 1;\n    box-shadow: none;\n    background-color: transparent;\n    color: #3474e1; }\n    .md .button-clear.activated {\n      background-color: rgba(158, 158, 158, 0.2);\n      box-shadow: none; }\n    .md .button-clear:hover:not(.disable-hover) {\n      color: #3474e1; }\n  .md .button-round {\n    padding: 0 2.6rem;\n    border-radius: 64px; }\n  .md .button-fab {\n    border-radius: 50%;\n    box-shadow: 0 4px 6px 0 rgba(0, 0, 0, 0.14), 0 4px 5px rgba(0, 0, 0, 0.1); }\n    .md .button-fab.activated {\n      box-shadow: 0 5px 15px 0 rgba(0, 0, 0, 0.4), 0 4px 7px 0 rgba(0, 0, 0, 0.1); }\n  .md .button-icon-only {\n    padding: 0; }\n  .md .button-primary {\n    color: white;\n    background-color: #387ef5; }\n    .md .button-primary.activated {\n      opacity: 1;\n      background-color: #3474e1; }\n  .md .button-outline-primary {\n    border-color: #3578e9;\n    background-color: transparent;\n    color: #3578e9; }\n    .md .button-outline-primary.activated {\n      color: #fff;\n      background-color: #3578e9; }\n  .md .button-clear-primary {\n    border-color: transparent;\n    background-color: transparent;\n    color: #3474e1; }\n    .md .button-clear-primary.activated {\n      background-color: rgba(158, 158, 158, 0.2);\n      box-shadow: none; }\n    .md .button-clear-primary:hover:not(.disable-hover) {\n      color: #306bcf; }\n  .md .button-secondary {\n    color: white;\n    background-color: #32db64; }\n    .md .button-secondary.activated {\n      opacity: 1;\n      background-color: #2ec95c; }\n  .md .button-outline-secondary {\n    border-color: #30d05f;\n    background-color: transparent;\n    color: #30d05f; }\n    .md .button-outline-secondary.activated {\n      color: #fff;\n      background-color: #30d05f; }\n  .md .button-clear-secondary {\n    border-color: transparent;\n    background-color: transparent;\n    color: #2ec95c; }\n    .md .button-clear-secondary.activated {\n      background-color: rgba(158, 158, 158, 0.2);\n      box-shadow: none; }\n    .md .button-clear-secondary:hover:not(.disable-hover) {\n      color: #3fcd69; }\n  .md .button-danger {\n    color: white;\n    background-color: #f53d3d; }\n    .md .button-danger.activated {\n      opacity: 1;\n      background-color: #e13838; }\n  .md .button-outline-danger {\n    border-color: #e93a3a;\n    background-color: transparent;\n    color: #e93a3a; }\n    .md .button-outline-danger.activated {\n      color: #fff;\n      background-color: #e93a3a; }\n  .md .button-clear-danger {\n    border-color: transparent;\n    background-color: transparent;\n    color: #e13838; }\n    .md .button-clear-danger.activated {\n      background-color: rgba(158, 158, 158, 0.2);\n      box-shadow: none; }\n    .md .button-clear-danger:hover:not(.disable-hover) {\n      color: #cf3434; }\n  .md .button-light {\n    color: black;\n    background-color: #f4f4f4; }\n    .md .button-light.activated {\n      opacity: 1;\n      background-color: #e0e0e0; }\n  .md .button-outline-light {\n    border-color: #e8e8e8;\n    background-color: transparent;\n    color: #e8e8e8; }\n    .md .button-outline-light.activated {\n      color: #fff;\n      background-color: #e8e8e8; }\n  .md .button-clear-light {\n    border-color: transparent;\n    background-color: transparent;\n    color: #e0e0e0; }\n    .md .button-clear-light.activated {\n      background-color: rgba(158, 158, 158, 0.2);\n      box-shadow: none; }\n    .md .button-clear-light:hover:not(.disable-hover) {\n      color: #cecece; }\n  .md .button-dark {\n    color: white;\n    background-color: #222; }\n    .md .button-dark.activated {\n      opacity: 1;\n      background-color: #343434; }\n  .md .button-outline-dark {\n    border-color: #2d2d2d;\n    background-color: transparent;\n    color: #2d2d2d; }\n    .md .button-outline-dark.activated {\n      color: #fff;\n      background-color: #2d2d2d; }\n  .md .button-clear-dark {\n    border-color: transparent;\n    background-color: transparent;\n    color: #343434; }\n    .md .button-clear-dark.activated {\n      background-color: rgba(158, 158, 158, 0.2);\n      box-shadow: none; }\n    .md .button-clear-dark:hover:not(.disable-hover) {\n      color: #444444; }\n  .md .button-fab {\n    position: absolute;\n    width: 56px;\n    height: 56px;\n    line-height: 56px;\n    min-width: 0;\n    vertical-align: middle;\n    border-radius: 50%;\n    background-clip: padding-box;\n    overflow: hidden;\n    -webkit-transition: .2s linear;\n    transition: .2s linear;\n    -webkit-transition-property: background-color;\n    transition-property: background-color;\n    font-size: 14px; }\n    .md .button-fab icon {\n      -webkit-box-flex: 1;\n      -webkit-flex: 1;\n      -ms-flex: 1;\n      flex: 1;\n      font-size: 2.8rem; }\n  .md [fab-center] {\n    left: 50%;\n    margin-left: -28px; }\n  .md [fab-top] {\n    top: 16px; }\n  .md [fab-right] {\n    right: 16px; }\n  .md [fab-bottom] {\n    bottom: 16px; }\n  .md [fab-left] {\n    left: 16px; }\n  .md .button-icon-left icon {\n    padding-right: 0.3em;\n    font-size: 1.4em;\n    line-height: 0.67;\n    pointer-events: none; }\n  .md .button-icon-right icon {\n    padding-left: 0.4em;\n    font-size: 1.4em;\n    line-height: 0.67;\n    pointer-events: none; }\n  .md .button-icon-only {\n    padding: 0;\n    min-width: 0.9em; }\n    .md .button-icon-only icon {\n      padding: 0 0.5em;\n      font-size: 1.8em;\n      line-height: 0.67;\n      pointer-events: none; }\n\n/**\n  Roboto Font\n  Google\n  Apache License, version 2.0\n  http://www.apache.org/licenses/LICENSE-2.0.html\n */\n@font-face {\n  font-family: 'Roboto';\n  font-style: normal;\n  font-weight: 300;\n  src: local(\"Roboto Light\"), local(\"Roboto-Light\"), url(\"../fonts/roboto-light.ttf\") format(\"truetype\"), url(\"../fonts/roboto-light.woff\") format(\"woff\"); }\n\n@font-face {\n  font-family: 'Roboto';\n  font-style: normal;\n  font-weight: 400;\n  src: local(\"Roboto\"), local(\"Roboto-Regular\"), url(\"../fonts/roboto-regular.ttf\") format(\"truetype\"), url(\"../fonts/roboto-regular.woff\") format(\"woff\"); }\n\n@font-face {\n  font-family: 'Roboto';\n  font-style: normal;\n  font-weight: 500;\n  src: local(\"Roboto Medium\"), local(\"Roboto-Medium\"), url(\"../fonts/roboto-medium.ttf\") format(\"truetype\"), url(\"../fonts/roboto-medium.woff\") format(\"woff\"); }\n\n@font-face {\n  font-family: 'Roboto';\n  font-style: normal;\n  font-weight: 700;\n  src: local(\"Roboto Bold\"), local(\"Roboto-Bold\"), url(\"../fonts/roboto-bold.ttf\") format(\"truetype\"), url(\"../fonts/roboto-bold.woff\") format(\"woff\"); }\n  .md ion-card {\n    display: block;\n    overflow: hidden;\n    -webkit-transform: translateZ(0);\n    transform: translateZ(0); }\n  .md ion-card img {\n    display: block;\n    width: 100%; }\n  .md ion-card-header {\n    display: block;\n    overflow: hidden;\n    white-space: nowrap;\n    text-overflow: ellipsis; }\n  .md ion-card-content {\n    display: block; }\n  .md ion-card {\n    margin: 10px 10px 10px 10px;\n    font-size: 1.4rem;\n    background: #fff;\n    box-shadow: 0 2px 2px 0 rgba(0, 0, 0, 0.14), 0 3px 1px -2px rgba(0, 0, 0, 0.2), 0 1px 5px 0 rgba(0, 0, 0, 0.12);\n    border-radius: 2px; }\n    .md ion-card ion-list {\n      margin-bottom: 0; }\n      .md ion-card ion-list ion-item-content {\n        padding: 0; }\n      .md ion-card ion-list .item-inner {\n        border-bottom: 1px solid #dedede; }\n      .md ion-card ion-list > .item:last-child,\n      .md ion-card ion-list > ion-item-sliding:last-child .item {\n        border-bottom: none; }\n    .md ion-card .item-inner {\n      border: none; }\n    .md ion-card ion-card-content {\n      padding: 13px 16px 13px 16px;\n      font-size: 1.4rem;\n      line-height: 1.5; }\n    .md ion-card ion-card-header {\n      padding: 16px;\n      font-size: 1.6rem;\n      color: #222; }\n    .md ion-card ion-card-header + ion-card-content,\n    .md ion-card .item + ion-card-content {\n      padding-top: 0; }\n    .md ion-card ion-note[item-left],\n    .md ion-card ion-note[item-right] {\n      font-size: 1.3rem; }\n    .md ion-card .card-title {\n      padding: 8px 0 8px 0;\n      font-size: 2.4rem;\n      color: #222; }\n    .md ion-card h1 {\n      margin: 0 0 2px;\n      font-size: 2.4rem;\n      font-weight: normal;\n      color: #222; }\n    .md ion-card h2 {\n      margin: 2px 0 2px;\n      font-size: 1.6rem;\n      font-weight: normal;\n      color: #222; }\n    .md ion-card h3,\n    .md ion-card h4,\n    .md ion-card h5,\n    .md ion-card h6 {\n      margin: 2px 0 2px;\n      font-size: 1.4rem;\n      font-weight: normal;\n      color: #222; }\n    .md ion-card p {\n      font-size: 1.4rem;\n      margin: 0 0 2px;\n      line-height: 1.5;\n      font-weight: normal;\n      color: #222; }\n  .md ion-card + ion-card {\n    margin-top: 0; }\n\n/**\n  Roboto Font\n  Google\n  Apache License, version 2.0\n  http://www.apache.org/licenses/LICENSE-2.0.html\n */\n@font-face {\n  font-family: 'Roboto';\n  font-style: normal;\n  font-weight: 300;\n  src: local(\"Roboto Light\"), local(\"Roboto-Light\"), url(\"../fonts/roboto-light.ttf\") format(\"truetype\"), url(\"../fonts/roboto-light.woff\") format(\"woff\"); }\n\n@font-face {\n  font-family: 'Roboto';\n  font-style: normal;\n  font-weight: 400;\n  src: local(\"Roboto\"), local(\"Roboto-Regular\"), url(\"../fonts/roboto-regular.ttf\") format(\"truetype\"), url(\"../fonts/roboto-regular.woff\") format(\"woff\"); }\n\n@font-face {\n  font-family: 'Roboto';\n  font-style: normal;\n  font-weight: 500;\n  src: local(\"Roboto Medium\"), local(\"Roboto-Medium\"), url(\"../fonts/roboto-medium.ttf\") format(\"truetype\"), url(\"../fonts/roboto-medium.woff\") format(\"woff\"); }\n\n@font-face {\n  font-family: 'Roboto';\n  font-style: normal;\n  font-weight: 700;\n  src: local(\"Roboto Bold\"), local(\"Roboto-Bold\"), url(\"../fonts/roboto-bold.ttf\") format(\"truetype\"), url(\"../fonts/roboto-bold.woff\") format(\"woff\"); }\n  .md ion-checkbox {\n    cursor: pointer;\n    -webkit-user-select: none;\n    -moz-user-select: none;\n    -ms-user-select: none;\n    user-select: none; }\n    .md ion-checkbox.item .item-inner {\n      border: none;\n      padding-right: 0; }\n    .md ion-checkbox ion-item-content {\n      border-bottom-width: 1px;\n      border-bottom-style: solid;\n      border-bottom-color: #dedede;\n      margin: 0;\n      padding: 13px 8px 13px 0; }\n    .md ion-checkbox[aria-checked=true] .checkbox-icon {\n      background-color: #387ef5;\n      border-color: #387ef5; }\n    .md ion-checkbox[aria-checked=true] .checkbox-icon:after {\n      position: absolute;\n      border-width: 2px;\n      border-style: solid;\n      border-color: #fff;\n      top: 0;\n      left: 3px;\n      width: 4px;\n      height: 9px;\n      border-left: none;\n      border-top: none;\n      content: '';\n      -webkit-transform: rotate(45deg);\n      transform: rotate(45deg); }\n  .md ion-checkbox[aria-disabled=true] {\n    opacity: 0.5;\n    color: #666;\n    pointer-events: none; }\n  .md .checkbox-media {\n    margin: 9px 36px 9px 4px; }\n  .md .checkbox-icon {\n    position: relative;\n    width: 16px;\n    height: 16px;\n    border-radius: 2px;\n    border-width: 2px;\n    border-style: solid;\n    border-color: #787878;\n    background-color: #fff; }\n  .md ion-checkbox[primary][aria-checked=true] .checkbox-icon {\n    background-color: #387ef5;\n    border-color: #387ef5; }\n    .md ion-checkbox[primary][aria-checked=true] .checkbox-icon:after {\n      border-color: white; }\n  .md ion-checkbox[secondary][aria-checked=true] .checkbox-icon {\n    background-color: #32db64;\n    border-color: #32db64; }\n    .md ion-checkbox[secondary][aria-checked=true] .checkbox-icon:after {\n      border-color: white; }\n  .md ion-checkbox[danger][aria-checked=true] .checkbox-icon {\n    background-color: #f53d3d;\n    border-color: #f53d3d; }\n    .md ion-checkbox[danger][aria-checked=true] .checkbox-icon:after {\n      border-color: white; }\n  .md ion-checkbox[light][aria-checked=true] .checkbox-icon {\n    background-color: #f4f4f4;\n    border-color: #f4f4f4; }\n    .md ion-checkbox[light][aria-checked=true] .checkbox-icon:after {\n      border-color: black; }\n  .md ion-checkbox[dark][aria-checked=true] .checkbox-icon {\n    background-color: #222;\n    border-color: #222; }\n    .md ion-checkbox[dark][aria-checked=true] .checkbox-icon:after {\n      border-color: white; }\n\n/**\n  Roboto Font\n  Google\n  Apache License, version 2.0\n  http://www.apache.org/licenses/LICENSE-2.0.html\n */\n@font-face {\n  font-family: 'Roboto';\n  font-style: normal;\n  font-weight: 300;\n  src: local(\"Roboto Light\"), local(\"Roboto-Light\"), url(\"../fonts/roboto-light.ttf\") format(\"truetype\"), url(\"../fonts/roboto-light.woff\") format(\"woff\"); }\n\n@font-face {\n  font-family: 'Roboto';\n  font-style: normal;\n  font-weight: 400;\n  src: local(\"Roboto\"), local(\"Roboto-Regular\"), url(\"../fonts/roboto-regular.ttf\") format(\"truetype\"), url(\"../fonts/roboto-regular.woff\") format(\"woff\"); }\n\n@font-face {\n  font-family: 'Roboto';\n  font-style: normal;\n  font-weight: 500;\n  src: local(\"Roboto Medium\"), local(\"Roboto-Medium\"), url(\"../fonts/roboto-medium.ttf\") format(\"truetype\"), url(\"../fonts/roboto-medium.woff\") format(\"woff\"); }\n\n@font-face {\n  font-family: 'Roboto';\n  font-style: normal;\n  font-weight: 700;\n  src: local(\"Roboto Bold\"), local(\"Roboto-Bold\"), url(\"../fonts/roboto-bold.ttf\") format(\"truetype\"), url(\"../fonts/roboto-bold.woff\") format(\"woff\"); }\n  .md ion-content {\n    background-color: #fff; }\n  .md [padding],\n  .md [padding] > scroll-content {\n    padding: 16px; }\n  .md [padding-top] {\n    padding-top: 16px; }\n  .md [padding-right] {\n    padding-right: 16px; }\n  .md [padding-bottom] {\n    padding-bottom: 16px; }\n  .md [padding-left] {\n    padding-left: 16px; }\n  .md [padding-vertical] {\n    padding-top: 16px;\n    padding-bottom: 16px; }\n  .md [padding-horizontal] {\n    padding-right: 16px;\n    padding-left: 16px; }\n\n/**\n  Roboto Font\n  Google\n  Apache License, version 2.0\n  http://www.apache.org/licenses/LICENSE-2.0.html\n */\n@font-face {\n  font-family: 'Roboto';\n  font-style: normal;\n  font-weight: 300;\n  src: local(\"Roboto Light\"), local(\"Roboto-Light\"), url(\"../fonts/roboto-light.ttf\") format(\"truetype\"), url(\"../fonts/roboto-light.woff\") format(\"woff\"); }\n\n@font-face {\n  font-family: 'Roboto';\n  font-style: normal;\n  font-weight: 400;\n  src: local(\"Roboto\"), local(\"Roboto-Regular\"), url(\"../fonts/roboto-regular.ttf\") format(\"truetype\"), url(\"../fonts/roboto-regular.woff\") format(\"woff\"); }\n\n@font-face {\n  font-family: 'Roboto';\n  font-style: normal;\n  font-weight: 500;\n  src: local(\"Roboto Medium\"), local(\"Roboto-Medium\"), url(\"../fonts/roboto-medium.ttf\") format(\"truetype\"), url(\"../fonts/roboto-medium.woff\") format(\"woff\"); }\n\n@font-face {\n  font-family: 'Roboto';\n  font-style: normal;\n  font-weight: 700;\n  src: local(\"Roboto Bold\"), local(\"Roboto-Bold\"), url(\"../fonts/roboto-bold.ttf\") format(\"truetype\"), url(\"../fonts/roboto-bold.woff\") format(\"woff\"); }\n  .md .item {\n    display: -webkit-box;\n    display: -webkit-flex;\n    display: -ms-flexbox;\n    display: flex;\n    -webkit-box-pack: justify;\n    -webkit-justify-content: space-between;\n    -ms-flex-pack: justify;\n    justify-content: space-between;\n    -webkit-box-align: center;\n    -webkit-align-items: center;\n    -ms-flex-align: center;\n    align-items: center;\n    margin: 0;\n    padding: 0;\n    border: 0;\n    width: 100%;\n    min-height: 4.4rem;\n    overflow: hidden;\n    text-align: initial;\n    font-weight: normal;\n    line-height: normal;\n    text-decoration: none;\n    color: inherit; }\n  .md .item-inner {\n    display: -webkit-box;\n    display: -webkit-flex;\n    display: -ms-flexbox;\n    display: flex;\n    margin: 0;\n    padding: 0;\n    border: 0;\n    overflow: hidden;\n    -webkit-box-flex: 1;\n    -webkit-flex: 1;\n    -ms-flex: 1;\n    flex: 1;\n    -webkit-box-orient: vertical;\n    -webkit-box-direction: normal;\n    -webkit-flex-direction: inherit;\n    -ms-flex-direction: inherit;\n    flex-direction: inherit;\n    -webkit-box-align: inherit;\n    -webkit-align-items: inherit;\n    -ms-flex-align: inherit;\n    align-items: inherit;\n    -webkit-align-self: stretch;\n    -ms-flex-item-align: stretch;\n    align-self: stretch; }\n  .md .item[no-lines],\n  .md .item[no-lines] .item-inner {\n    border: none; }\n  .md ion-item-group {\n    display: block; }\n  .md ion-item-divider {\n    display: block;\n    min-height: 30px;\n    width: 100%;\n    z-index: 1000;\n    font-weight: 500; }\n    .md ion-item-divider[sticky] {\n      position: -webkit-sticky;\n      position: sticky;\n      top: 0px; }\n  .md ion-item-content {\n    margin: 0;\n    -webkit-box-flex: 1;\n    -webkit-flex: 1;\n    -ms-flex: 1;\n    flex: 1;\n    white-space: nowrap;\n    overflow: hidden;\n    text-overflow: ellipsis;\n    pointer-events: none; }\n    .md ion-item-content a,\n    .md ion-item-content button,\n    .md ion-item-content [tappable] {\n      pointer-events: auto; }\n  .md [text-wrap] ion-item-content {\n    white-space: normal; }\n  .md [vertical-align-top],\n  .md ion-input.item {\n    -webkit-box-align: start;\n    -webkit-align-items: flex-start;\n    -ms-flex-align: start;\n    align-items: flex-start; }\n  .md ion-item-content + ion-item-content[cnt] {\n    display: none; }\n  .md ion-item-divider[primary] {\n    background-color: #387ef5;\n    color: white; }\n  .md ion-item-divider[secondary] {\n    background-color: #32db64;\n    color: white; }\n  .md ion-item-divider[danger] {\n    background-color: #f53d3d;\n    color: white; }\n  .md ion-item-divider[light] {\n    background-color: #f4f4f4;\n    color: black; }\n  .md ion-item-divider[dark] {\n    background-color: #222;\n    color: white; }\n  .md .item > icon[small]:first-child,\n  .md .item-inner > icon[small]:first-child {\n    min-width: 18px; }\n  .md .item > icon:first-child,\n  .md .item-inner > icon:first-child {\n    min-width: 24px;\n    text-align: center; }\n  .md .item > icon,\n  .md .item-inner > icon {\n    line-height: 1;\n    font-size: 2.4rem;\n    min-height: 2.4rem; }\n    .md .item > icon[large],\n    .md .item-inner > icon[large] {\n      font-size: 3.2rem;\n      min-height: 3.2rem; }\n    .md .item > icon[small],\n    .md .item-inner > icon[small] {\n      font-size: 1.8rem;\n      min-height: 1.8rem; }\n  .md ion-avatar,\n  .md ion-thumbnail {\n    display: block;\n    line-height: 1; }\n    .md ion-avatar img,\n    .md ion-thumbnail img {\n      display: block; }\n  .md ion-item-sliding {\n    display: block;\n    position: relative;\n    overflow: hidden; }\n    .md ion-item-sliding .item {\n      position: static; }\n  .md ion-item-options {\n    display: none;\n    position: absolute;\n    top: 0;\n    right: 0;\n    z-index: 1;\n    height: 100%;\n    visibility: hidden; }\n  .md ion-item-options .button {\n    margin: 0;\n    border-radius: 0;\n    box-shadow: none;\n    height: 100%; }\n  .md ion-item-sliding.active-slide .item,\n  .md ion-item-sliding.active-slide .item.activated {\n    position: relative;\n    z-index: 2;\n    opacity: 1;\n    -webkit-transition: all 300ms cubic-bezier(0.36, 0.66, 0.04, 1);\n    transition: all 300ms cubic-bezier(0.36, 0.66, 0.04, 1);\n    pointer-events: none; }\n  .md ion-item-sliding.active-slide ion-item-options {\n    display: -webkit-box;\n    display: -webkit-flex;\n    display: -ms-flexbox;\n    display: flex; }\n  .md ion-item-sliding.active-slide.active-options ion-item-options {\n    visibility: visible; }\n  .md .item {\n    position: relative;\n    padding-right: 0;\n    padding-left: 16px;\n    font-size: 1.6rem;\n    text-transform: none;\n    font-weight: normal;\n    color: #000;\n    background-color: #fff;\n    box-shadow: none;\n    -webkit-transition: background-color 300ms cubic-bezier(0.4, 0, 0.2, 1), -webkit-transform 300ms;\n    transition: background-color 300ms cubic-bezier(0.4, 0, 0.2, 1), transform 300ms; }\n    .md .item h1 {\n      margin: 0 0 2px;\n      font-size: 2.4rem;\n      font-weight: normal; }\n    .md .item h2 {\n      margin: 2px 0 2px;\n      font-size: 1.6rem;\n      font-weight: normal; }\n    .md .item h3,\n    .md .item h4,\n    .md .item h5,\n    .md .item h6 {\n      line-height: normal;\n      margin: 2px 0 2px;\n      font-size: 1.4rem;\n      font-weight: normal; }\n    .md .item p {\n      line-height: normal;\n      color: #666;\n      font-size: 1.4rem;\n      margin: 0 0 2px; }\n  .md .item.activated {\n    background-color: #f1f1f1; }\n  .md .item[no-lines] {\n    border-width: 0; }\n  .md .item-inner {\n    padding-right: 8px;\n    border-bottom: 1px solid #dedede; }\n  .md ion-item-content {\n    margin: 13px 8px 13px 0; }\n  .md [item-left],\n  .md [item-right] {\n    margin: 9px 8px 9px 0; }\n  .md icon[item-left],\n  .md icon[item-right] {\n    margin-top: 11px;\n    margin-bottom: 10px;\n    margin-left: 0; }\n  .md button[item-left],\n  .md button[item-right],\n  .md [button][item-left],\n  .md [button][item-right] {\n    padding: 0 0.6em;\n    min-height: 26px;\n    font-size: 1.2rem; }\n  .md [item-left].button-icon-only,\n  .md [item-right].button-icon-only,\n  .md [item-left].button-icon-only icon,\n  .md [item-right].button-icon-only icon {\n    padding: 0 1px; }\n  .md [item-left][clear],\n  .md [item-right][clear] {\n    padding: 0 8px; }\n  .md [item-left].icon-left icon,\n  .md [item-right].icon-left icon {\n    margin-bottom: 1px;\n    margin-left: 0;\n    padding-right: 0.3em; }\n  .md [item-left].icon-right icon,\n  .md [item-right].icon-right icon {\n    margin-right: 0;\n    margin-bottom: 1px; }\n  .md [text-wrap] ion-item-content {\n    font-size: 1.4rem;\n    line-height: 1.5; }\n  .md icon[item-left] + .item-inner,\n  .md icon[item-left] + .item-input {\n    margin-left: 24px; }\n  .md ion-avatar[item-left],\n  .md ion-thumbnail[item-left] {\n    margin: 8px 16px 8px 0; }\n  .md ion-avatar[item-right],\n  .md ion-thumbnail[item-right] {\n    margin: 8px; }\n  .md ion-avatar {\n    min-width: 4rem;\n    min-height: 4rem; }\n    .md ion-avatar img {\n      max-width: 4rem;\n      max-height: 4rem;\n      border-radius: 2rem; }\n  .md ion-thumbnail {\n    min-width: 8rem;\n    min-height: 8rem; }\n    .md ion-thumbnail img {\n      max-width: 8rem;\n      max-height: 8rem; }\n  .md ion-note {\n    color: #c5c5c5; }\n  .md ion-item-divider {\n    padding: 13px 16px 13px 16px;\n    background-color: #fff;\n    color: #222; }\n  .md ion-item-sliding {\n    background-color: #fff; }\n\n/**\n  Roboto Font\n  Google\n  Apache License, version 2.0\n  http://www.apache.org/licenses/LICENSE-2.0.html\n */\n@font-face {\n  font-family: 'Roboto';\n  font-style: normal;\n  font-weight: 300;\n  src: local(\"Roboto Light\"), local(\"Roboto-Light\"), url(\"../fonts/roboto-light.ttf\") format(\"truetype\"), url(\"../fonts/roboto-light.woff\") format(\"woff\"); }\n\n@font-face {\n  font-family: 'Roboto';\n  font-style: normal;\n  font-weight: 400;\n  src: local(\"Roboto\"), local(\"Roboto-Regular\"), url(\"../fonts/roboto-regular.ttf\") format(\"truetype\"), url(\"../fonts/roboto-regular.woff\") format(\"woff\"); }\n\n@font-face {\n  font-family: 'Roboto';\n  font-style: normal;\n  font-weight: 500;\n  src: local(\"Roboto Medium\"), local(\"Roboto-Medium\"), url(\"../fonts/roboto-medium.ttf\") format(\"truetype\"), url(\"../fonts/roboto-medium.woff\") format(\"woff\"); }\n\n@font-face {\n  font-family: 'Roboto';\n  font-style: normal;\n  font-weight: 700;\n  src: local(\"Roboto Bold\"), local(\"Roboto-Bold\"), url(\"../fonts/roboto-bold.ttf\") format(\"truetype\"), url(\"../fonts/roboto-bold.woff\") format(\"woff\"); }\n  .md ion-label {\n    display: block;\n    max-width: 200px;\n    font-size: inherit;\n    white-space: nowrap;\n    pointer-events: none; }\n  .md .fixed-label {\n    width: 30%;\n    min-width: 100px;\n    max-width: 200px; }\n  .md [stacked-label],\n  .md [floating-label] {\n    -webkit-box-orient: vertical;\n    -webkit-box-direction: normal;\n    -webkit-flex-direction: column;\n    -ms-flex-direction: column;\n    flex-direction: column;\n    -webkit-box-align: start;\n    -webkit-align-items: flex-start;\n    -ms-flex-align: start;\n    align-items: flex-start; }\n  .md .stacked-label,\n  .md .floating-label {\n    -webkit-align-self: stretch;\n    -ms-flex-item-align: stretch;\n    align-self: stretch;\n    margin-bottom: 0;\n    max-width: 100%; }\n  .md .stacked-input,\n  .md .floating-input {\n    -webkit-align-self: stretch;\n    -ms-flex-item-align: stretch;\n    align-self: stretch;\n    width: auto; }\n  .md ion-label {\n    margin: 13px 8px 13px 8px;\n    color: #999; }\n  .md .stacked-label {\n    font-size: 1.2rem; }\n  .md .floating-label {\n    -webkit-transform-origin: left top;\n    transform-origin: left top;\n    -webkit-transform: translate3d(0, 27px, 0);\n    transform: translate3d(0, 27px, 0);\n    -webkit-transition: -webkit-transform 150ms ease-in-out;\n    transition: transform 150ms ease-in-out; }\n  .md .stacked-label,\n  .md .floating-label {\n    margin-left: 0;\n    margin-bottom: 0; }\n  .md .input-focused .stacked-label,\n  .md .input-focused .floating-label {\n    color: #387ef5; }\n  .md .input-focused .floating-label,\n  .md .input-has-value .floating-label {\n    -webkit-transform: translate3d(0, 0, 0) scale(0.8);\n    transform: translate3d(0, 0, 0) scale(0.8); }\n  .md ion-label[primary] {\n    color: #387ef5 !important; }\n  .md ion-label[secondary] {\n    color: #32db64 !important; }\n  .md ion-label[danger] {\n    color: #f53d3d !important; }\n  .md ion-label[light] {\n    color: #f4f4f4 !important; }\n  .md ion-label[dark] {\n    color: #222 !important; }\n\n/**\n  Roboto Font\n  Google\n  Apache License, version 2.0\n  http://www.apache.org/licenses/LICENSE-2.0.html\n */\n@font-face {\n  font-family: 'Roboto';\n  font-style: normal;\n  font-weight: 300;\n  src: local(\"Roboto Light\"), local(\"Roboto-Light\"), url(\"../fonts/roboto-light.ttf\") format(\"truetype\"), url(\"../fonts/roboto-light.woff\") format(\"woff\"); }\n\n@font-face {\n  font-family: 'Roboto';\n  font-style: normal;\n  font-weight: 400;\n  src: local(\"Roboto\"), local(\"Roboto-Regular\"), url(\"../fonts/roboto-regular.ttf\") format(\"truetype\"), url(\"../fonts/roboto-regular.woff\") format(\"woff\"); }\n\n@font-face {\n  font-family: 'Roboto';\n  font-style: normal;\n  font-weight: 500;\n  src: local(\"Roboto Medium\"), local(\"Roboto-Medium\"), url(\"../fonts/roboto-medium.ttf\") format(\"truetype\"), url(\"../fonts/roboto-medium.woff\") format(\"woff\"); }\n\n@font-face {\n  font-family: 'Roboto';\n  font-style: normal;\n  font-weight: 700;\n  src: local(\"Roboto Bold\"), local(\"Roboto-Bold\"), url(\"../fonts/roboto-bold.ttf\") format(\"truetype\"), url(\"../fonts/roboto-bold.woff\") format(\"woff\"); }\n  .md ion-list-header {\n    display: block;\n    overflow: hidden;\n    white-space: nowrap;\n    text-overflow: ellipsis; }\n  .md ion-list {\n    display: block;\n    margin: 0;\n    padding: 0;\n    list-style-type: none; }\n  .md ion-list[inset] {\n    overflow: hidden;\n    -webkit-transform: translateZ(0);\n    transform: translateZ(0); }\n  .md ion-list-header,\n  .md ion-item-divider {\n    border-bottom: 1px solid #dedede;\n    margin-left: 0;\n    padding: 16px 16px 16px 16px;\n    font-size: 1.4rem;\n    color: #858585; }\n  .md ion-list {\n    margin: 0 0 16px 0; }\n    .md ion-list .item-inner {\n      border-bottom: 1px solid #dedede; }\n    .md ion-list > .item:first-child,\n    .md ion-list > ion-item-sliding:first-child .item {\n      border-top: 1px solid #dedede; }\n    .md ion-list > .item:last-child,\n    .md ion-list > ion-item-sliding:last-child .item {\n      border-bottom: 1px solid #dedede; }\n      .md ion-list > .item:last-child .item-inner,\n      .md ion-list > .item:last-child ion-item-content,\n      .md ion-list > ion-item-sliding:last-child .item .item-inner,\n      .md ion-list > ion-item-sliding:last-child .item ion-item-content {\n        border-bottom: none; }\n    .md ion-list > ion-input:last-child:after {\n      left: 0; }\n    .md ion-list ion-item-options button, .md ion-list ion-item-options [button] {\n      height: calc(100% - 2px);\n      margin: 1px 0 1px 0;\n      box-shadow: none;\n      border: none;\n      border-radius: 0;\n      display: -webkit-inline-box;\n      display: -webkit-inline-flex;\n      display: -ms-inline-flexbox;\n      display: inline-flex;\n      -webkit-box-align: center;\n      -webkit-align-items: center;\n      -ms-flex-align: center;\n      align-items: center;\n      box-sizing: border-box; }\n      .md ion-list ion-item-options button:before, .md ion-list ion-item-options [button]:before {\n        margin: 0 auto; }\n    .md ion-list .item[no-lines],\n    .md ion-list .item[no-lines] .item-inner {\n      border-width: 0; }\n    .md ion-list + ion-list {\n      margin-top: 32px; }\n      .md ion-list + ion-list ion-list-header {\n        margin-top: -16px;\n        padding-top: 0; }\n  .md ion-list[inset] {\n    margin: 16px 16px 16px 16px;\n    border-radius: 2px; }\n    .md ion-list[inset] .item:first-child {\n      border-top-width: 0;\n      border-top-right-radius: 2px;\n      border-top-left-radius: 2px; }\n    .md ion-list[inset] .item:last-child {\n      border-bottom-width: 0;\n      border-bottom-right-radius: 2px;\n      border-bottom-left-radius: 2px; }\n    .md ion-list[inset] ion-input.item {\n      padding-right: 0;\n      padding-left: 0; }\n      .md ion-list[inset] ion-input.item:after {\n        left: 0; }\n    .md ion-list[inset] + ion-list[inset] {\n      margin-top: 0; }\n    .md ion-list[inset] ion-list-header {\n      background-color: #fff; }\n  .md ion-list[no-lines] .item,\n  .md ion-list[no-lines] .item .item-inner {\n    border-width: 0; }\n\n/**\n  Roboto Font\n  Google\n  Apache License, version 2.0\n  http://www.apache.org/licenses/LICENSE-2.0.html\n */\n@font-face {\n  font-family: 'Roboto';\n  font-style: normal;\n  font-weight: 300;\n  src: local(\"Roboto Light\"), local(\"Roboto-Light\"), url(\"../fonts/roboto-light.ttf\") format(\"truetype\"), url(\"../fonts/roboto-light.woff\") format(\"woff\"); }\n\n@font-face {\n  font-family: 'Roboto';\n  font-style: normal;\n  font-weight: 400;\n  src: local(\"Roboto\"), local(\"Roboto-Regular\"), url(\"../fonts/roboto-regular.ttf\") format(\"truetype\"), url(\"../fonts/roboto-regular.woff\") format(\"woff\"); }\n\n@font-face {\n  font-family: 'Roboto';\n  font-style: normal;\n  font-weight: 500;\n  src: local(\"Roboto Medium\"), local(\"Roboto-Medium\"), url(\"../fonts/roboto-medium.ttf\") format(\"truetype\"), url(\"../fonts/roboto-medium.woff\") format(\"woff\"); }\n\n@font-face {\n  font-family: 'Roboto';\n  font-style: normal;\n  font-weight: 700;\n  src: local(\"Roboto Bold\"), local(\"Roboto-Bold\"), url(\"../fonts/roboto-bold.ttf\") format(\"truetype\"), url(\"../fonts/roboto-bold.woff\") format(\"woff\"); }\n  .md ion-menu {\n    background: #fff; }\n  .md .menu-content-reveal {\n    box-shadow: 0px 0px 10px rgba(0, 0, 0, 0.25); }\n  .md .menu-content-push {\n    box-shadow: 0px 0px 10px rgba(0, 0, 0, 0.25); }\n  .md ion-menu[type=overlay] {\n    box-shadow: 0px 0px 10px rgba(0, 0, 0, 0.25); }\n\n/**\n  Roboto Font\n  Google\n  Apache License, version 2.0\n  http://www.apache.org/licenses/LICENSE-2.0.html\n */\n@font-face {\n  font-family: 'Roboto';\n  font-style: normal;\n  font-weight: 300;\n  src: local(\"Roboto Light\"), local(\"Roboto-Light\"), url(\"../fonts/roboto-light.ttf\") format(\"truetype\"), url(\"../fonts/roboto-light.woff\") format(\"woff\"); }\n\n@font-face {\n  font-family: 'Roboto';\n  font-style: normal;\n  font-weight: 400;\n  src: local(\"Roboto\"), local(\"Roboto-Regular\"), url(\"../fonts/roboto-regular.ttf\") format(\"truetype\"), url(\"../fonts/roboto-regular.woff\") format(\"woff\"); }\n\n@font-face {\n  font-family: 'Roboto';\n  font-style: normal;\n  font-weight: 500;\n  src: local(\"Roboto Medium\"), local(\"Roboto-Medium\"), url(\"../fonts/roboto-medium.ttf\") format(\"truetype\"), url(\"../fonts/roboto-medium.woff\") format(\"woff\"); }\n\n@font-face {\n  font-family: 'Roboto';\n  font-style: normal;\n  font-weight: 700;\n  src: local(\"Roboto Bold\"), local(\"Roboto-Bold\"), url(\"../fonts/roboto-bold.ttf\") format(\"truetype\"), url(\"../fonts/roboto-bold.woff\") format(\"woff\"); }\n  .md ion-page.modal {\n    background-color: #fff; }\n\n/**\n  Roboto Font\n  Google\n  Apache License, version 2.0\n  http://www.apache.org/licenses/LICENSE-2.0.html\n */\n@font-face {\n  font-family: 'Roboto';\n  font-style: normal;\n  font-weight: 300;\n  src: local(\"Roboto Light\"), local(\"Roboto-Light\"), url(\"../fonts/roboto-light.ttf\") format(\"truetype\"), url(\"../fonts/roboto-light.woff\") format(\"woff\"); }\n\n@font-face {\n  font-family: 'Roboto';\n  font-style: normal;\n  font-weight: 400;\n  src: local(\"Roboto\"), local(\"Roboto-Regular\"), url(\"../fonts/roboto-regular.ttf\") format(\"truetype\"), url(\"../fonts/roboto-regular.woff\") format(\"woff\"); }\n\n@font-face {\n  font-family: 'Roboto';\n  font-style: normal;\n  font-weight: 500;\n  src: local(\"Roboto Medium\"), local(\"Roboto-Medium\"), url(\"../fonts/roboto-medium.ttf\") format(\"truetype\"), url(\"../fonts/roboto-medium.woff\") format(\"woff\"); }\n\n@font-face {\n  font-family: 'Roboto';\n  font-style: normal;\n  font-weight: 700;\n  src: local(\"Roboto Bold\"), local(\"Roboto-Bold\"), url(\"../fonts/roboto-bold.ttf\") format(\"truetype\"), url(\"../fonts/roboto-bold.woff\") format(\"woff\"); }\n  .md ion-popup {\n    position: absolute;\n    z-index: 1000;\n    top: 0;\n    left: 0;\n    bottom: 0;\n    right: 0;\n    display: -webkit-box;\n    display: -webkit-flex;\n    display: -ms-flexbox;\n    display: flex;\n    -webkit-box-pack: center;\n    -webkit-justify-content: center;\n    -ms-flex-pack: center;\n    justify-content: center;\n    -webkit-box-align: center;\n    -webkit-align-items: center;\n    -ms-flex-align: center;\n    align-items: center; }\n    .md ion-popup input,\n    .md ion-popup textarea {\n      width: 100%; }\n  .md .popup-wrapper {\n    z-index: 10;\n    min-width: 250px;\n    max-height: 90%;\n    display: -webkit-box;\n    display: -webkit-flex;\n    display: -ms-flexbox;\n    display: flex;\n    -webkit-box-orient: vertical;\n    -webkit-box-direction: normal;\n    -webkit-flex-direction: column;\n    -ms-flex-direction: column;\n    flex-direction: column;\n    opacity: 0; }\n  .md .popup-title {\n    margin: 0;\n    padding: 0; }\n  .md .popup-sub-title {\n    margin: 5px 0 0 0;\n    padding: 0;\n    font-weight: normal; }\n  .md .popup-body {\n    overflow: auto; }\n    .md .popup-body:empty {\n      padding: 0; }\n  .md .prompt-input {\n    border: 0;\n    background: inherit;\n    padding: 10px 0; }\n    .md .prompt-input::-moz-placeholder {\n      color: #999; }\n    .md .prompt-input:-ms-input-placeholder {\n      color: #999; }\n    .md .prompt-input::-webkit-input-placeholder {\n      color: #999;\n      text-indent: 0; }\n  .md .popup-buttons {\n    display: -webkit-box;\n    display: -webkit-flex;\n    display: -ms-flexbox;\n    display: flex;\n    -webkit-box-orient: horizontal;\n    -webkit-box-direction: normal;\n    -webkit-flex-direction: row;\n    -ms-flex-direction: row;\n    flex-direction: row; }\n  .md .popup-button {\n    display: block;\n    margin: 0;\n    line-height: 20px;\n    font-size: 14px;\n    margin-right: 8px; }\n  .md .popup-wrapper {\n    max-width: 280px;\n    border-radius: 2px;\n    background-color: #fafafa;\n    box-shadow: 0px 16px 20px rgba(0, 0, 0, 0.4); }\n  .md .popup-head {\n    text-align: left;\n    padding: 24px 24px 10px 24px; }\n  .md .popup-title {\n    font-size: 20px; }\n  .md .popup-sub-title {\n    font-size: 15px; }\n  .md .popup-body {\n    padding: 10px 24px 24px 24px;\n    color: rgba(0, 0, 0, 0.5); }\n  .md .prompt-input {\n    border-bottom: 1px solid #dedede;\n    color: #000000;\n    margin: 5px 0 5px 0; }\n    .md .prompt-input:focus {\n      border-bottom: 2px solid #387ef5;\n      margin-bottom: 4px; }\n  .md .popup-buttons {\n    padding: 8px 8px 8px 24px;\n    -webkit-box-pack: end;\n    -webkit-justify-content: flex-end;\n    -ms-flex-pack: end;\n    justify-content: flex-end; }\n  .md .popup-button.activated {\n    opacity: 1; }\n\n/**\n  Roboto Font\n  Google\n  Apache License, version 2.0\n  http://www.apache.org/licenses/LICENSE-2.0.html\n */\n@font-face {\n  font-family: 'Roboto';\n  font-style: normal;\n  font-weight: 300;\n  src: local(\"Roboto Light\"), local(\"Roboto-Light\"), url(\"../fonts/roboto-light.ttf\") format(\"truetype\"), url(\"../fonts/roboto-light.woff\") format(\"woff\"); }\n\n@font-face {\n  font-family: 'Roboto';\n  font-style: normal;\n  font-weight: 400;\n  src: local(\"Roboto\"), local(\"Roboto-Regular\"), url(\"../fonts/roboto-regular.ttf\") format(\"truetype\"), url(\"../fonts/roboto-regular.woff\") format(\"woff\"); }\n\n@font-face {\n  font-family: 'Roboto';\n  font-style: normal;\n  font-weight: 500;\n  src: local(\"Roboto Medium\"), local(\"Roboto-Medium\"), url(\"../fonts/roboto-medium.ttf\") format(\"truetype\"), url(\"../fonts/roboto-medium.woff\") format(\"woff\"); }\n\n@font-face {\n  font-family: 'Roboto';\n  font-style: normal;\n  font-weight: 700;\n  src: local(\"Roboto Bold\"), local(\"Roboto-Bold\"), url(\"../fonts/roboto-bold.ttf\") format(\"truetype\"), url(\"../fonts/roboto-bold.woff\") format(\"woff\"); }\n  .md ion-radio {\n    cursor: pointer;\n    -webkit-user-select: none;\n    -moz-user-select: none;\n    -ms-user-select: none;\n    user-select: none; }\n    .md ion-radio[aria-checked=true] {\n      color: #387ef5; }\n    .md ion-radio[aria-checked=true] .radio-icon {\n      border-color: #387ef5; }\n      .md ion-radio[aria-checked=true] .radio-icon:after {\n        -webkit-transform: scale3d(1, 1, 1);\n        transform: scale3d(1, 1, 1); }\n  .md ion-radio[aria-disabled=true] {\n    color: #666;\n    opacity: 0.5;\n    pointer-events: none; }\n  .md .radio-icon {\n    position: relative;\n    top: 0;\n    left: 0;\n    display: block;\n    width: 16px;\n    height: 16px;\n    margin: 0;\n    border-width: 2px;\n    border-style: solid;\n    border-color: #787878;\n    border-radius: 50%; }\n    .md .radio-icon:after {\n      position: absolute;\n      top: 2px;\n      left: 2px;\n      width: 8px;\n      height: 8px;\n      background-color: #387ef5;\n      border-radius: 50%;\n      content: '';\n      -webkit-transition: -webkit-transform 280ms cubic-bezier(0.4, 0, 0.2, 1);\n      transition: transform 280ms cubic-bezier(0.4, 0, 0.2, 1);\n      -webkit-transform: scale3d(0, 0, 0);\n      transform: scale3d(0, 0, 0); }\n  .md .radio-media {\n    display: block;\n    margin: 9px 8px 9px 8px; }\n  .md ion-radio[primary][aria-checked=true] {\n    color: #387ef5; }\n  .md ion-radio[primary][aria-checked=true] .radio-icon {\n    border-color: #387ef5; }\n    .md ion-radio[primary][aria-checked=true] .radio-icon:after {\n      background-color: #387ef5; }\n  .md ion-radio[secondary][aria-checked=true] {\n    color: #32db64; }\n  .md ion-radio[secondary][aria-checked=true] .radio-icon {\n    border-color: #32db64; }\n    .md ion-radio[secondary][aria-checked=true] .radio-icon:after {\n      background-color: #32db64; }\n  .md ion-radio[danger][aria-checked=true] {\n    color: #f53d3d; }\n  .md ion-radio[danger][aria-checked=true] .radio-icon {\n    border-color: #f53d3d; }\n    .md ion-radio[danger][aria-checked=true] .radio-icon:after {\n      background-color: #f53d3d; }\n  .md ion-radio[light][aria-checked=true] {\n    color: #f4f4f4; }\n  .md ion-radio[light][aria-checked=true] .radio-icon {\n    border-color: #f4f4f4; }\n    .md ion-radio[light][aria-checked=true] .radio-icon:after {\n      background-color: #f4f4f4; }\n  .md ion-radio[dark][aria-checked=true] {\n    color: #222; }\n  .md ion-radio[dark][aria-checked=true] .radio-icon {\n    border-color: #222; }\n    .md ion-radio[dark][aria-checked=true] .radio-icon:after {\n      background-color: #222; }\n\n/**\n  Roboto Font\n  Google\n  Apache License, version 2.0\n  http://www.apache.org/licenses/LICENSE-2.0.html\n */\n@font-face {\n  font-family: 'Roboto';\n  font-style: normal;\n  font-weight: 300;\n  src: local(\"Roboto Light\"), local(\"Roboto-Light\"), url(\"../fonts/roboto-light.ttf\") format(\"truetype\"), url(\"../fonts/roboto-light.woff\") format(\"woff\"); }\n\n@font-face {\n  font-family: 'Roboto';\n  font-style: normal;\n  font-weight: 400;\n  src: local(\"Roboto\"), local(\"Roboto-Regular\"), url(\"../fonts/roboto-regular.ttf\") format(\"truetype\"), url(\"../fonts/roboto-regular.woff\") format(\"woff\"); }\n\n@font-face {\n  font-family: 'Roboto';\n  font-style: normal;\n  font-weight: 500;\n  src: local(\"Roboto Medium\"), local(\"Roboto-Medium\"), url(\"../fonts/roboto-medium.ttf\") format(\"truetype\"), url(\"../fonts/roboto-medium.woff\") format(\"woff\"); }\n\n@font-face {\n  font-family: 'Roboto';\n  font-style: normal;\n  font-weight: 700;\n  src: local(\"Roboto Bold\"), local(\"Roboto-Bold\"), url(\"../fonts/roboto-bold.ttf\") format(\"truetype\"), url(\"../fonts/roboto-bold.woff\") format(\"woff\"); }\n  .md md-ripple {\n    position: absolute;\n    z-index: 0;\n    display: block;\n    border-radius: 50%;\n    background-color: rgba(0, 0, 0, 0.1);\n    overflow: hidden;\n    pointer-events: none;\n    -webkit-transform: scale(0.001) translateZ(0);\n    transform: scale(0.001) translateZ(0); }\n\n/**\n  Roboto Font\n  Google\n  Apache License, version 2.0\n  http://www.apache.org/licenses/LICENSE-2.0.html\n */\n@font-face {\n  font-family: 'Roboto';\n  font-style: normal;\n  font-weight: 300;\n  src: local(\"Roboto Light\"), local(\"Roboto-Light\"), url(\"../fonts/roboto-light.ttf\") format(\"truetype\"), url(\"../fonts/roboto-light.woff\") format(\"woff\"); }\n\n@font-face {\n  font-family: 'Roboto';\n  font-style: normal;\n  font-weight: 400;\n  src: local(\"Roboto\"), local(\"Roboto-Regular\"), url(\"../fonts/roboto-regular.ttf\") format(\"truetype\"), url(\"../fonts/roboto-regular.woff\") format(\"woff\"); }\n\n@font-face {\n  font-family: 'Roboto';\n  font-style: normal;\n  font-weight: 500;\n  src: local(\"Roboto Medium\"), local(\"Roboto-Medium\"), url(\"../fonts/roboto-medium.ttf\") format(\"truetype\"), url(\"../fonts/roboto-medium.woff\") format(\"woff\"); }\n\n@font-face {\n  font-family: 'Roboto';\n  font-style: normal;\n  font-weight: 700;\n  src: local(\"Roboto Bold\"), local(\"Roboto-Bold\"), url(\"../fonts/roboto-bold.ttf\") format(\"truetype\"), url(\"../fonts/roboto-bold.woff\") format(\"woff\"); }\n  .md ion-searchbar {\n    position: relative;\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    width: 100%; }\n  .md .searchbar-icon {\n    pointer-events: none; }\n  .md .searchbar-input-container {\n    position: relative;\n    display: block;\n    -webkit-flex-shrink: 1;\n    -ms-flex-negative: 1;\n    flex-shrink: 1;\n    width: 100%; }\n  .md .searchbar-input {\n    display: block;\n    width: 100%;\n    border: none;\n    font-family: inherit;\n    line-height: 3rem;\n    -webkit-appearance: none;\n    -moz-appearance: none; }\n  .md .searchbar-clear-icon {\n    min-height: 0;\n    padding: 0;\n    margin: 0; }\n  .md ion-searchbar {\n    padding: 8px;\n    background: inherit; }\n  .md .searchbar-search-icon {\n    width: 21px;\n    height: 21px;\n    top: 11px;\n    left: 16px;\n    background-image: url(\"data:image/svg+xml;charset=utf-8,<svg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%20512%20512'><path%20fill='#5B5B5B'%20d='M337.509,305.372h-17.501l-6.571-5.486c20.791-25.232,33.922-57.054,33.922-93.257C347.358,127.632,283.896,64,205.135,64C127.452,64,64,127.632,64,206.629s63.452,142.628,142.225,142.628c35.011,0,67.831-13.167,92.991-34.008l6.561,5.487v17.551L415.18,448L448,415.086L337.509,305.372z%20M206.225,305.372c-54.702,0-98.463-43.887-98.463-98.743c0-54.858,43.761-98.742,98.463-98.742c54.7,0,98.462,43.884,98.462,98.742C304.687,261.485,260.925,305.372,206.225,305.372z'/></svg>\"); }\n  .md .searchbar-md-cancel {\n    display: none;\n    width: 21px;\n    height: 100%;\n    margin: 0;\n    top: 0;\n    left: 10px; }\n  .md .searchbar-search-icon,\n  .md .searchbar-md-cancel {\n    background-size: 20px;\n    background-repeat: no-repeat;\n    position: absolute; }\n    .md .searchbar-search-icon.activated,\n    .md .searchbar-md-cancel.activated {\n      background-color: transparent; }\n  .md .searchbar-input {\n    padding: 6px 55px;\n    height: 100%;\n    box-shadow: 0 2px 2px 0 rgba(0, 0, 0, 0.14), 0 3px 1px -2px rgba(0, 0, 0, 0.2), 0 1px 5px 0 rgba(0, 0, 0, 0.12);\n    font-size: 1.6rem;\n    font-weight: 400;\n    border-radius: 2px;\n    color: #141414;\n    background-color: #FFFFFF;\n    background-position: 8px center; }\n    .md .searchbar-input::-moz-placeholder {\n      color: #AEAEAE; }\n    .md .searchbar-input:-ms-input-placeholder {\n      color: #AEAEAE; }\n    .md .searchbar-input::-webkit-input-placeholder {\n      color: #AEAEAE;\n      text-indent: 0; }\n  .md .searchbar-clear-icon {\n    width: 22px;\n    height: 100%;\n    padding: 0;\n    background-image: url(\"data:image/svg+xml;charset=utf-8,<svg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%20512%20512'><polygon%20fill='#5B5B5B'%20points='405,136.798%20375.202,107%20256,226.202%20136.798,107%20107,136.798%20226.202,256%20107,375.202%20136.798,405%20256,285.798%20375.202,405%20405,375.202%20285.798,256'/></svg>\");\n    background-size: 22px;\n    background-repeat: no-repeat;\n    background-position: center;\n    position: absolute;\n    right: 13px;\n    top: 0; }\n    .md .searchbar-clear-icon.activated {\n      background-color: transparent; }\n  .md .searchbar-focused .searchbar-search-icon {\n    display: none; }\n  .md .searchbar-focused .searchbar-md-cancel {\n    display: -webkit-inline-box;\n    display: -webkit-inline-flex;\n    display: -ms-inline-flexbox;\n    display: inline-flex; }\n  .md .toolbar ion-searchbar {\n    padding: 3px; }\n  .md .toolbar .searchbar-md-cancel {\n    left: 14px; }\n  .md .searchbar-ios-cancel {\n    display: none; }\n\n/**\n  Roboto Font\n  Google\n  Apache License, version 2.0\n  http://www.apache.org/licenses/LICENSE-2.0.html\n */\n@font-face {\n  font-family: 'Roboto';\n  font-style: normal;\n  font-weight: 300;\n  src: local(\"Roboto Light\"), local(\"Roboto-Light\"), url(\"../fonts/roboto-light.ttf\") format(\"truetype\"), url(\"../fonts/roboto-light.woff\") format(\"woff\"); }\n\n@font-face {\n  font-family: 'Roboto';\n  font-style: normal;\n  font-weight: 400;\n  src: local(\"Roboto\"), local(\"Roboto-Regular\"), url(\"../fonts/roboto-regular.ttf\") format(\"truetype\"), url(\"../fonts/roboto-regular.woff\") format(\"woff\"); }\n\n@font-face {\n  font-family: 'Roboto';\n  font-style: normal;\n  font-weight: 500;\n  src: local(\"Roboto Medium\"), local(\"Roboto-Medium\"), url(\"../fonts/roboto-medium.ttf\") format(\"truetype\"), url(\"../fonts/roboto-medium.woff\") format(\"woff\"); }\n\n@font-face {\n  font-family: 'Roboto';\n  font-style: normal;\n  font-weight: 700;\n  src: local(\"Roboto Bold\"), local(\"Roboto-Bold\"), url(\"../fonts/roboto-bold.ttf\") format(\"truetype\"), url(\"../fonts/roboto-bold.woff\") format(\"woff\"); }\n  .md ion-segment {\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    -webkit-box-pack: center;\n    -webkit-justify-content: center;\n    -ms-flex-pack: center;\n    justify-content: center;\n    -webkit-box-flex: 1;\n    -webkit-flex: 1;\n    -ms-flex: 1;\n    flex: 1;\n    width: 100%; }\n  .md .segment-button {\n    position: relative;\n    display: block;\n    margin-left: 0;\n    margin-right: 0;\n    -webkit-box-flex: 1;\n    -webkit-flex: 1;\n    -ms-flex: 1;\n    flex: 1;\n    width: 0;\n    overflow: hidden;\n    text-align: center;\n    text-overflow: ellipsis;\n    white-space: nowrap;\n    cursor: pointer; }\n  .md .segment-button {\n    padding: 0 6px;\n    border-bottom-width: 2px;\n    border-bottom-style: solid;\n    border-bottom-color: rgba(0, 0, 0, 0.1);\n    min-height: 4rem;\n    line-height: 4rem;\n    font-size: 1.2rem;\n    text-transform: uppercase;\n    font-weight: 500;\n    opacity: 0.7;\n    color: #387ef5;\n    background-color: transparent;\n    -webkit-transition: 100ms all linear;\n    transition: 100ms all linear; }\n    .md .segment-button.activated, .md .segment-button.segment-activated {\n      border-color: #387ef5; }\n  .md .toolbar ion-segment {\n    margin: 0 auto; }\n  .md .toolbar .segment-button.activated,\n  .md .toolbar .segment-button.segment-activated {\n    opacity: 1; }\n  .md ion-segment[primary] .segment-button {\n    color: #387ef5; }\n    .md ion-segment[primary] .segment-button.activated, .md ion-segment[primary] .segment-button.segment-activated {\n      opacity: 1;\n      border-color: #387ef5;\n      color: #387ef5; }\n  .md ion-segment[secondary] .segment-button {\n    color: #32db64; }\n    .md ion-segment[secondary] .segment-button.activated, .md ion-segment[secondary] .segment-button.segment-activated {\n      opacity: 1;\n      border-color: #32db64;\n      color: #32db64; }\n  .md ion-segment[danger] .segment-button {\n    color: #f53d3d; }\n    .md ion-segment[danger] .segment-button.activated, .md ion-segment[danger] .segment-button.segment-activated {\n      opacity: 1;\n      border-color: #f53d3d;\n      color: #f53d3d; }\n  .md ion-segment[light] .segment-button {\n    color: #f4f4f4; }\n    .md ion-segment[light] .segment-button.activated, .md ion-segment[light] .segment-button.segment-activated {\n      opacity: 1;\n      border-color: #f4f4f4;\n      color: #f4f4f4; }\n  .md ion-segment[dark] .segment-button {\n    color: #222; }\n    .md ion-segment[dark] .segment-button.activated, .md ion-segment[dark] .segment-button.segment-activated {\n      opacity: 1;\n      border-color: #222;\n      color: #222; }\n\n/**\n  Roboto Font\n  Google\n  Apache License, version 2.0\n  http://www.apache.org/licenses/LICENSE-2.0.html\n */\n@font-face {\n  font-family: 'Roboto';\n  font-style: normal;\n  font-weight: 300;\n  src: local(\"Roboto Light\"), local(\"Roboto-Light\"), url(\"../fonts/roboto-light.ttf\") format(\"truetype\"), url(\"../fonts/roboto-light.woff\") format(\"woff\"); }\n\n@font-face {\n  font-family: 'Roboto';\n  font-style: normal;\n  font-weight: 400;\n  src: local(\"Roboto\"), local(\"Roboto-Regular\"), url(\"../fonts/roboto-regular.ttf\") format(\"truetype\"), url(\"../fonts/roboto-regular.woff\") format(\"woff\"); }\n\n@font-face {\n  font-family: 'Roboto';\n  font-style: normal;\n  font-weight: 500;\n  src: local(\"Roboto Medium\"), local(\"Roboto-Medium\"), url(\"../fonts/roboto-medium.ttf\") format(\"truetype\"), url(\"../fonts/roboto-medium.woff\") format(\"woff\"); }\n\n@font-face {\n  font-family: 'Roboto';\n  font-style: normal;\n  font-weight: 700;\n  src: local(\"Roboto Bold\"), local(\"Roboto-Bold\"), url(\"../fonts/roboto-bold.ttf\") format(\"truetype\"), url(\"../fonts/roboto-bold.woff\") format(\"woff\"); }\n  .md ion-tabs {\n    display: -webkit-box;\n    display: -webkit-flex;\n    display: -ms-flexbox;\n    display: flex;\n    -webkit-box-orient: vertical;\n    -webkit-box-direction: normal;\n    -webkit-flex-direction: column;\n    -ms-flex-direction: column;\n    flex-direction: column;\n    overflow: hidden;\n    width: 100%;\n    height: 100%;\n    max-width: 100%;\n    max-height: 100%;\n    margin: 0;\n    padding: 0; }\n  .md ion-tab {\n    position: absolute;\n    top: 0;\n    right: 0;\n    bottom: 0;\n    left: 0;\n    width: 100%;\n    height: 100%;\n    overflow: hidden;\n    -webkit-box-orient: vertical;\n    -webkit-box-direction: normal;\n    -webkit-flex-direction: column;\n    -ms-flex-direction: column;\n    flex-direction: column;\n    display: none; }\n    .md ion-tab.show-tab {\n      display: -webkit-box;\n      display: -webkit-flex;\n      display: -ms-flexbox;\n      display: flex; }\n  .md ion-tabs > ion-navbar-section {\n    -webkit-box-ordinal-group: -29;\n    -webkit-order: -30;\n    -ms-flex-order: -30;\n    order: -30; }\n  .md ion-tabbar-section {\n    position: relative;\n    -webkit-box-ordinal-group: 21;\n    -webkit-order: 20;\n    -ms-flex-order: 20;\n    order: 20; }\n  .md [tabbarPlacement=top] ion-tabbar-section {\n    -webkit-box-ordinal-group: -19;\n    -webkit-order: -20;\n    -ms-flex-order: -20;\n    order: -20; }\n  .md tabbar {\n    position: relative;\n    display: -webkit-box;\n    display: -webkit-flex;\n    display: -ms-flexbox;\n    display: flex;\n    -webkit-box-pack: center;\n    -webkit-justify-content: center;\n    -ms-flex-pack: center;\n    justify-content: center;\n    overflow: hidden; }\n  .md .tab-button {\n    position: relative;\n    z-index: 0;\n    overflow: hidden;\n    display: -webkit-box;\n    display: -webkit-flex;\n    display: -ms-flexbox;\n    display: flex;\n    -webkit-box-orient: vertical;\n    -webkit-box-direction: normal;\n    -webkit-flex-direction: column;\n    -ms-flex-direction: column;\n    flex-direction: column;\n    -webkit-box-pack: center;\n    -webkit-justify-content: center;\n    -ms-flex-pack: center;\n    justify-content: center;\n    -webkit-box-flex: 1;\n    -webkit-flex: 1;\n    -ms-flex: 1;\n    flex: 1;\n    -webkit-align-self: center;\n    -ms-flex-item-align: center;\n    align-self: center;\n    -webkit-box-align: center;\n    -webkit-align-items: center;\n    -ms-flex-align: center;\n    align-items: center;\n    margin: 0;\n    text-align: center;\n    cursor: pointer;\n    -webkit-user-select: none;\n    -moz-user-select: none;\n    -ms-user-select: none;\n    user-select: none;\n    border: 0;\n    border-radius: 0;\n    background: none; }\n  .md .tab-button-text {\n    margin-top: 3px;\n    margin-bottom: 2px; }\n  .md .tab-button-text,\n  .md .tab-button-icon {\n    -webkit-align-self: center;\n    -ms-flex-item-align: center;\n    align-self: center;\n    min-width: 26px;\n    max-width: 100%;\n    overflow: hidden;\n    white-space: nowrap;\n    text-overflow: ellipsis;\n    display: none; }\n  .md .has-icon .tab-button-icon,\n  .md .has-title .tab-button-text {\n    display: block; }\n  .md .has-title-only .tab-button-text {\n    white-space: normal; }\n  .md tab-highlight {\n    display: none; }\n  .md [tabbarIcons=bottom] .tab-button .tab-button-icon {\n    -webkit-box-ordinal-group: 11;\n    -webkit-order: 10;\n    -ms-flex-order: 10;\n    order: 10; }\n  .md [tabbarIcons=left] .tab-button {\n    -webkit-box-orient: horizontal;\n    -webkit-box-direction: normal;\n    -webkit-flex-direction: row;\n    -ms-flex-direction: row;\n    flex-direction: row; }\n    .md [tabbarIcons=left] .tab-button .tab-button-icon {\n      text-align: right;\n      padding-right: 8px; }\n  .md [tabbarIcons=right] .tab-button {\n    -webkit-box-orient: horizontal;\n    -webkit-box-direction: normal;\n    -webkit-flex-direction: row;\n    -ms-flex-direction: row;\n    flex-direction: row; }\n    .md [tabbarIcons=right] .tab-button .tab-button-icon {\n      -webkit-box-ordinal-group: 11;\n      -webkit-order: 10;\n      -ms-flex-order: 10;\n      order: 10;\n      text-align: left;\n      padding-left: 8px; }\n  .md [tabbarIcons=hide] .tab-button-icon {\n    display: none; }\n  .md tabbar {\n    background: #f8f8f8; }\n  .md .tab-button {\n    padding: 12px 10px 5px 10px;\n    min-height: 4.8rem;\n    font-size: 1.4rem;\n    font-weight: 500;\n    opacity: 0.7;\n    box-shadow: none;\n    border-radius: 0;\n    border-bottom: 2px solid transparent;\n    color: #8c8c8c; }\n    .md .tab-button[aria-selected=true] {\n      opacity: 1.0;\n      color: #387ef5; }\n  .md .tab-button-text {\n    margin-top: 5px;\n    margin-bottom: 5px;\n    text-transform: uppercase; }\n  .md .tab-button-icon {\n    font-size: 2.4rem;\n    min-width: 7.4rem; }\n  .md [tabbarIcons=bottom] .tab-button {\n    padding-top: 8px;\n    padding-bottom: 8px; }\n  .md [tabbarIcons=right] .tab-button,\n  .md [tabbarIcons=left] .tab-button {\n    padding-bottom: 10px; }\n    .md [tabbarIcons=right] .tab-button icon,\n    .md [tabbarIcons=left] .tab-button icon {\n      min-width: 24px; }\n  .md .tab-button.icon-only,\n  .md .tab-button.has-title-only {\n    padding: 6px 10px 6px 10px; }\n  .md tab-highlight {\n    position: absolute;\n    display: block;\n    height: 2px;\n    width: 1px;\n    bottom: 0;\n    left: 0;\n    background: #387ef5;\n    -webkit-transform-origin: 0 0;\n    transform-origin: 0 0;\n    -webkit-transform: translateZ(0);\n    transform: translateZ(0); }\n    .md tab-highlight.animate {\n      -webkit-transition-duration: 300ms;\n      transition-duration: 300ms; }\n  .md [tabbarPlacement=bottom] tab-highlight {\n    top: 0; }\n  .md ion-tabs[primary] tabbar {\n    background-color: #387ef5; }\n    .md ion-tabs[primary] tabbar .tab-button {\n      color: white; }\n    .md ion-tabs[primary] tabbar .tab-button:hover:not(.disable-hover),\n    .md ion-tabs[primary] tabbar .tab-button[aria-selected=true] {\n      color: white; }\n    .md ion-tabs[primary] tabbar tab-highlight {\n      background: white; }\n  .md ion-tabs[secondary] tabbar {\n    background-color: #32db64; }\n    .md ion-tabs[secondary] tabbar .tab-button {\n      color: white; }\n    .md ion-tabs[secondary] tabbar .tab-button:hover:not(.disable-hover),\n    .md ion-tabs[secondary] tabbar .tab-button[aria-selected=true] {\n      color: white; }\n    .md ion-tabs[secondary] tabbar tab-highlight {\n      background: white; }\n  .md ion-tabs[danger] tabbar {\n    background-color: #f53d3d; }\n    .md ion-tabs[danger] tabbar .tab-button {\n      color: white; }\n    .md ion-tabs[danger] tabbar .tab-button:hover:not(.disable-hover),\n    .md ion-tabs[danger] tabbar .tab-button[aria-selected=true] {\n      color: white; }\n    .md ion-tabs[danger] tabbar tab-highlight {\n      background: white; }\n  .md ion-tabs[light] tabbar {\n    background-color: #f4f4f4; }\n    .md ion-tabs[light] tabbar .tab-button {\n      color: black; }\n    .md ion-tabs[light] tabbar .tab-button:hover:not(.disable-hover),\n    .md ion-tabs[light] tabbar .tab-button[aria-selected=true] {\n      color: black; }\n    .md ion-tabs[light] tabbar tab-highlight {\n      background: black; }\n  .md ion-tabs[dark] tabbar {\n    background-color: #222; }\n    .md ion-tabs[dark] tabbar .tab-button {\n      color: white; }\n    .md ion-tabs[dark] tabbar .tab-button:hover:not(.disable-hover),\n    .md ion-tabs[dark] tabbar .tab-button[aria-selected=true] {\n      color: white; }\n    .md ion-tabs[dark] tabbar tab-highlight {\n      background: white; }\n\n/**\n  Roboto Font\n  Google\n  Apache License, version 2.0\n  http://www.apache.org/licenses/LICENSE-2.0.html\n */\n@font-face {\n  font-family: 'Roboto';\n  font-style: normal;\n  font-weight: 300;\n  src: local(\"Roboto Light\"), local(\"Roboto-Light\"), url(\"../fonts/roboto-light.ttf\") format(\"truetype\"), url(\"../fonts/roboto-light.woff\") format(\"woff\"); }\n\n@font-face {\n  font-family: 'Roboto';\n  font-style: normal;\n  font-weight: 400;\n  src: local(\"Roboto\"), local(\"Roboto-Regular\"), url(\"../fonts/roboto-regular.ttf\") format(\"truetype\"), url(\"../fonts/roboto-regular.woff\") format(\"woff\"); }\n\n@font-face {\n  font-family: 'Roboto';\n  font-style: normal;\n  font-weight: 500;\n  src: local(\"Roboto Medium\"), local(\"Roboto-Medium\"), url(\"../fonts/roboto-medium.ttf\") format(\"truetype\"), url(\"../fonts/roboto-medium.woff\") format(\"woff\"); }\n\n@font-face {\n  font-family: 'Roboto';\n  font-style: normal;\n  font-weight: 700;\n  src: local(\"Roboto Bold\"), local(\"Roboto-Bold\"), url(\"../fonts/roboto-bold.ttf\") format(\"truetype\"), url(\"../fonts/roboto-bold.woff\") format(\"woff\"); }\n  .md .item-input {\n    display: block;\n    background: transparent;\n    border: 0;\n    -webkit-box-flex: 1;\n    -webkit-flex: 1;\n    -ms-flex: 1;\n    flex: 1;\n    pointer-events: none; }\n  .md input.item-input:-webkit-autofill {\n    background-color: transparent; }\n  .md [scroll-assist] {\n    width: 1px;\n    height: 1px;\n    padding: 0;\n    background: transparent;\n    border: 0;\n    pointer-events: none; }\n  .md .input-focused .item-input {\n    pointer-events: auto; }\n  .md textarea {\n    height: auto;\n    overflow: auto;\n    font: inherit;\n    color: inherit; }\n  .md .platform-mobile textarea {\n    resize: none; }\n  .md input::-moz-placeholder,\n  .md textarea::-moz-placeholder {\n    color: #999; }\n  .md input:-ms-input-placeholder,\n  .md textarea:-ms-input-placeholder {\n    color: #999; }\n  .md input::-webkit-input-placeholder,\n  .md textarea::-webkit-input-placeholder {\n    color: #999;\n    text-indent: 0; }\n  .md .item-input {\n    margin: 13px 8px 13px 8px;\n    padding: 0;\n    background-color: #fff; }\n  .md .inset-input {\n    margin: 6.5px 16px 6.5px 16px;\n    padding: 6.5px 8px 6.5px 8px; }\n  .md ion-input:after {\n    position: absolute;\n    bottom: 0;\n    right: 0;\n    left: 16px;\n    border-bottom-width: 2px;\n    border-bottom-style: solid;\n    border-bottom-color: transparent;\n    content: ''; }\n  .md .input-focused:after {\n    border-bottom-color: #387ef5; }\n  .md ion-input.ng-valid.input-has-value:after {\n    border-bottom-color: #32db64; }\n  .md ion-input.ng-invalid.ng-touched:after {\n    border-bottom-color: #f53d3d; }\n  .md .stacked-input,\n  .md .floating-input {\n    margin-left: 0;\n    margin-top: 8px;\n    margin-bottom: 8px; }\n\n/**\n  Roboto Font\n  Google\n  Apache License, version 2.0\n  http://www.apache.org/licenses/LICENSE-2.0.html\n */\n@font-face {\n  font-family: 'Roboto';\n  font-style: normal;\n  font-weight: 300;\n  src: local(\"Roboto Light\"), local(\"Roboto-Light\"), url(\"../fonts/roboto-light.ttf\") format(\"truetype\"), url(\"../fonts/roboto-light.woff\") format(\"woff\"); }\n\n@font-face {\n  font-family: 'Roboto';\n  font-style: normal;\n  font-weight: 400;\n  src: local(\"Roboto\"), local(\"Roboto-Regular\"), url(\"../fonts/roboto-regular.ttf\") format(\"truetype\"), url(\"../fonts/roboto-regular.woff\") format(\"woff\"); }\n\n@font-face {\n  font-family: 'Roboto';\n  font-style: normal;\n  font-weight: 500;\n  src: local(\"Roboto Medium\"), local(\"Roboto-Medium\"), url(\"../fonts/roboto-medium.ttf\") format(\"truetype\"), url(\"../fonts/roboto-medium.woff\") format(\"woff\"); }\n\n@font-face {\n  font-family: 'Roboto';\n  font-style: normal;\n  font-weight: 700;\n  src: local(\"Roboto Bold\"), local(\"Roboto-Bold\"), url(\"../fonts/roboto-bold.ttf\") format(\"truetype\"), url(\"../fonts/roboto-bold.woff\") format(\"woff\"); }\n  .md ion-toggle {\n    display: block;\n    -webkit-user-select: none;\n    -moz-user-select: none;\n    -ms-user-select: none;\n    user-select: none; }\n  .md .toggle-media {\n    margin: 0;\n    padding: 12px 8px 12px 16px;\n    cursor: pointer; }\n  .md .toggle-icon {\n    position: relative;\n    display: block;\n    width: 36px;\n    height: 14px;\n    pointer-events: none;\n    border-radius: 14px;\n    background-color: #dedede;\n    -webkit-transition: background-color 300ms;\n    transition: background-color 300ms; }\n  .md .toggle-icon:after {\n    content: '';\n    position: absolute;\n    top: -3px;\n    left: 0;\n    width: 20px;\n    height: 20px;\n    border-radius: 50%;\n    box-shadow: 0 2px 2px 0 rgba(0, 0, 0, 0.14), 0 3px 1px -2px rgba(0, 0, 0, 0.2), 0 1px 5px 0 rgba(0, 0, 0, 0.12);\n    background-color: #fff;\n    -webkit-transition-property: -webkit-transform, background-color;\n    transition-property: transform, background-color;\n    -webkit-transition-duration: 300ms;\n    transition-duration: 300ms; }\n  .md ion-toggle[aria-checked=true] .toggle-icon {\n    background-color: #b1cdfb; }\n    .md ion-toggle[aria-checked=true] .toggle-icon:after {\n      background-color: #387ef5;\n      -webkit-transform: translate3d(16px, 0, 0);\n      transform: translate3d(16px, 0, 0); }\n  .md ion-toggle[aria-disabled=true] {\n    opacity: 0.5;\n    color: #666;\n    pointer-events: none; }\n  .md ion-toggle[primary][aria-checked=true] .toggle-icon {\n    background-color: #b1cdfb; }\n  .md ion-toggle[primary][aria-checked=true] .toggle-icon:after {\n    background-color: #387ef5; }\n  .md ion-toggle[secondary][aria-checked=true] .toggle-icon {\n    background-color: #9eeeb6; }\n  .md ion-toggle[secondary][aria-checked=true] .toggle-icon:after {\n    background-color: #32db64; }\n  .md ion-toggle[danger][aria-checked=true] .toggle-icon {\n    background-color: #fbb6b6; }\n  .md ion-toggle[danger][aria-checked=true] .toggle-icon:after {\n    background-color: #f53d3d; }\n  .md ion-toggle[light][aria-checked=true] .toggle-icon {\n    background-color: white; }\n  .md ion-toggle[light][aria-checked=true] .toggle-icon:after {\n    background-color: #f4f4f4; }\n  .md ion-toggle[dark][aria-checked=true] .toggle-icon {\n    background-color: #626262; }\n  .md ion-toggle[dark][aria-checked=true] .toggle-icon:after {\n    background-color: #222; }\n\n/**\n  Roboto Font\n  Google\n  Apache License, version 2.0\n  http://www.apache.org/licenses/LICENSE-2.0.html\n */\n@font-face {\n  font-family: 'Roboto';\n  font-style: normal;\n  font-weight: 300;\n  src: local(\"Roboto Light\"), local(\"Roboto-Light\"), url(\"../fonts/roboto-light.ttf\") format(\"truetype\"), url(\"../fonts/roboto-light.woff\") format(\"woff\"); }\n\n@font-face {\n  font-family: 'Roboto';\n  font-style: normal;\n  font-weight: 400;\n  src: local(\"Roboto\"), local(\"Roboto-Regular\"), url(\"../fonts/roboto-regular.ttf\") format(\"truetype\"), url(\"../fonts/roboto-regular.woff\") format(\"woff\"); }\n\n@font-face {\n  font-family: 'Roboto';\n  font-style: normal;\n  font-weight: 500;\n  src: local(\"Roboto Medium\"), local(\"Roboto-Medium\"), url(\"../fonts/roboto-medium.ttf\") format(\"truetype\"), url(\"../fonts/roboto-medium.woff\") format(\"woff\"); }\n\n@font-face {\n  font-family: 'Roboto';\n  font-style: normal;\n  font-weight: 700;\n  src: local(\"Roboto Bold\"), local(\"Roboto-Bold\"), url(\"../fonts/roboto-bold.ttf\") format(\"truetype\"), url(\"../fonts/roboto-bold.woff\") format(\"woff\"); }\n  .md .toolbar {\n    position: relative;\n    z-index: 10;\n    display: -webkit-box;\n    display: -webkit-flex;\n    display: -ms-flexbox;\n    display: flex;\n    -webkit-box-orient: horizontal;\n    -webkit-box-direction: normal;\n    -webkit-flex-direction: row;\n    -ms-flex-direction: row;\n    flex-direction: row;\n    -webkit-box-align: center;\n    -webkit-align-items: center;\n    -ms-flex-align: center;\n    align-items: center;\n    -webkit-box-pack: justify;\n    -webkit-justify-content: space-between;\n    -ms-flex-pack: justify;\n    justify-content: space-between;\n    -webkit-box-ordinal-group: -9;\n    -webkit-order: -10;\n    -ms-flex-order: -10;\n    order: -10;\n    -webkit-box-flex: 0;\n    -webkit-flex: 0;\n    -ms-flex: 0;\n    flex: 0;\n    width: 100%;\n    overflow: hidden; }\n  .md .toolbar-background {\n    position: absolute;\n    left: 0;\n    top: 0;\n    width: 100%;\n    height: 100%;\n    z-index: -1;\n    border: 0;\n    pointer-events: none;\n    -webkit-transform: translateZ(0px);\n    transform: translateZ(0px); }\n  .md .toolbar[position=bottom] {\n    -webkit-box-ordinal-group: 11;\n    -webkit-order: 10;\n    -ms-flex-order: 10;\n    order: 10; }\n  .md ion-title {\n    -webkit-box-flex: 1;\n    -webkit-flex: 1;\n    -ms-flex: 1;\n    flex: 1;\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    -webkit-transform: translateZ(0px);\n    transform: translateZ(0px); }\n  .md .toolbar-title {\n    display: block;\n    width: 100%;\n    white-space: nowrap;\n    text-overflow: ellipsis;\n    overflow: hidden; }\n  .md ion-buttons {\n    display: block;\n    margin: 0 0.2rem;\n    pointer-events: none;\n    -webkit-transform: translateZ(0px);\n    transform: translateZ(0px); }\n  .md ion-buttons button,\n  .md ion-buttons a,\n  .md ion-buttons input,\n  .md ion-buttons textarea,\n  .md ion-buttons div {\n    pointer-events: auto; }\n  .md .toolbar[transparent] .toolbar-background {\n    background: transparent;\n    border-color: transparent; }\n  .md ion-buttons,\n  .md .bar-button-menutoggle {\n    -webkit-transform: translateZ(0px);\n    transform: translateZ(0px);\n    z-index: 99; }\n  .md ion-navbar.toolbar {\n    -webkit-transform: translateZ(0px);\n    transform: translateZ(0px);\n    display: -webkit-box;\n    display: -webkit-flex;\n    display: -ms-flexbox;\n    display: flex;\n    opacity: 0; }\n    .md ion-navbar.toolbar.show-navbar {\n      opacity: 1; }\n  .md .bar-button {\n    position: relative;\n    display: -webkit-inline-box;\n    display: -webkit-inline-flex;\n    display: -ms-inline-flexbox;\n    display: inline-flex;\n    -webkit-flex-shrink: 0;\n    -ms-flex-negative: 0;\n    flex-shrink: 0;\n    -webkit-flex-flow: row nowrap;\n    -ms-flex-flow: row nowrap;\n    flex-flow: row nowrap;\n    -webkit-box-align: center;\n    -webkit-align-items: center;\n    -ms-flex-align: center;\n    align-items: center;\n    -webkit-box-pack: center;\n    -webkit-justify-content: center;\n    -ms-flex-pack: center;\n    justify-content: center;\n    margin: 0;\n    padding: 0;\n    white-space: nowrap;\n    text-overflow: ellipsis;\n    overflow: hidden;\n    text-align: center;\n    text-transform: none;\n    vertical-align: top;\n    vertical-align: -webkit-baseline-middle;\n    cursor: pointer;\n    -webkit-user-select: none;\n    -moz-user-select: none;\n    -ms-user-select: none;\n    user-select: none;\n    -webkit-appearance: none;\n    -moz-appearance: none; }\n  .md .bar-button-menutoggle {\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  .md .back-button {\n    display: none; }\n    .md .back-button.show-back-button {\n      display: -webkit-box;\n      display: -webkit-flex;\n      display: -ms-flexbox;\n      display: flex; }\n  .md .back-button-text {\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  .md .toolbar {\n    padding: 4px;\n    min-height: 5.6rem; }\n  .md ion-navbar-section {\n    min-height: 5.6rem; }\n  .md .toolbar-background {\n    border-color: #b2b2b2;\n    background: #f8f8f8; }\n  .md .toolbar-content {\n    -webkit-box-flex: 1;\n    -webkit-flex: 1;\n    -ms-flex: 1;\n    flex: 1;\n    -webkit-box-ordinal-group: 4;\n    -webkit-order: 3;\n    -ms-flex-order: 3;\n    order: 3; }\n  .md .toolbar-title {\n    color: #424242; }\n  .md ion-title {\n    padding: 0 12px;\n    font-size: 2rem;\n    font-weight: 500; }\n  .md ion-buttons {\n    -webkit-box-ordinal-group: 5;\n    -webkit-order: 4;\n    -ms-flex-order: 4;\n    order: 4;\n    -webkit-transform: translateZ(0px);\n    transform: translateZ(0px); }\n  .md ion-buttons[left] {\n    -webkit-box-ordinal-group: 3;\n    -webkit-order: 2;\n    -ms-flex-order: 2;\n    order: 2; }\n  .md ion-buttons[left] .bar-button:first-child {\n    margin-left: 0; }\n  .md ion-buttons[end] {\n    text-align: right;\n    -webkit-box-ordinal-group: 6;\n    -webkit-order: 5;\n    -ms-flex-order: 5;\n    order: 5; }\n  .md ion-buttons[right] {\n    text-align: right;\n    -webkit-box-ordinal-group: 7;\n    -webkit-order: 6;\n    -ms-flex-order: 6;\n    order: 6; }\n  .md .bar-button {\n    margin-top: 0;\n    margin-bottom: 0;\n    margin-left: 0.2rem;\n    margin-right: 0.2rem;\n    padding: 0 5px;\n    min-height: 32px;\n    border: 0;\n    font-size: 1.4rem;\n    border-radius: 2px;\n    text-transform: uppercase;\n    font-weight: 500; }\n  .md .bar-button-outline {\n    border-width: 1px;\n    border-style: solid;\n    border-color: #424242;\n    color: #424242;\n    background-color: transparent; }\n    .md .bar-button-outline:hover:not(.disable-hover) {\n      opacity: 0.4; }\n    .md .bar-button-outline.activated {\n      color: white;\n      background-color: #424242; }\n  .md .bar-button-solid {\n    color: white;\n    background-color: #424242; }\n    .md .bar-button-solid:hover:not(.disable-hover) {\n      color: white; }\n    .md .bar-button-solid.activated {\n      color: white;\n      background-color: #515151; }\n  .md .bar-button-icon-left icon {\n    margin-left: -0.1em;\n    padding-right: 0.3em;\n    font-size: 1.4em;\n    line-height: 0.67;\n    pointer-events: none; }\n  .md .bar-button-icon-right icon {\n    padding-left: 0.4em;\n    font-size: 1.4em;\n    line-height: 0.67;\n    pointer-events: none; }\n  .md .bar-button-icon-only {\n    padding: 0; }\n    .md .bar-button-icon-only icon {\n      padding: 0 0.1em;\n      font-size: 1.8em;\n      line-height: 0.67;\n      min-width: 28px;\n      pointer-events: none; }\n  .md .back-button {\n    margin: 0 0 0 12px;\n    box-shadow: none; }\n  .md .back-button-icon {\n    margin: 0;\n    min-width: 44px;\n    font-size: 2.4rem;\n    font-weight: normal;\n    text-align: left; }\n  .md .bar-button-menutoggle {\n    margin: 0 6px;\n    padding: 0 2px;\n    min-width: 44px;\n    -webkit-box-ordinal-group: 2;\n    -webkit-order: 1;\n    -ms-flex-order: 1;\n    order: 1; }\n    .md .bar-button-menutoggle icon {\n      padding: 0 6px;\n      font-size: 2.4rem; }\n  .md .bar-button-menutoggle[end],\n  .md .bar-button-menutoggle[right] {\n    margin: 0 2px;\n    min-width: 28px;\n    -webkit-box-ordinal-group: 8;\n    -webkit-order: 7;\n    -ms-flex-order: 7;\n    order: 7; }\n  .md .bar-button-default {\n    color: #515151;\n    background-color: transparent; }\n    .md .bar-button-default:hover:not(.disable-hover) {\n      color: #5f5f5f; }\n    .md .bar-button-default.activated {\n      opacity: 0.4; }\n  .md .toolbar[primary] .toolbar-background {\n    background: #387ef5; }\n  .md .toolbar[primary] .toolbar-title,\n  .md .toolbar[primary] .bar-button-default,\n  .md .toolbar[primary] .bar-button-outline {\n    color: white; }\n  .md .toolbar[primary] .bar-button-outline {\n    border-color: white; }\n  .md .toolbar[primary] .bar-button-primary {\n    color: #3474e1;\n    background-color: transparent; }\n    .md .toolbar[primary] .bar-button-primary:hover:not(.disable-hover) {\n      color: #306bcf; }\n    .md .toolbar[primary] .bar-button-primary.activated {\n      opacity: 0.4; }\n  .md .toolbar[primary] .bar-button-outline-primary {\n    border-color: #3474e1;\n    color: #3474e1;\n    background-color: transparent; }\n    .md .toolbar[primary] .bar-button-outline-primary.activated {\n      color: white;\n      background-color: #3474e1; }\n  .md .toolbar[primary] .bar-button-solid-primary {\n    color: white;\n    background-color: #387ef5; }\n    .md .toolbar[primary] .bar-button-solid-primary.activated {\n      background-color: #3474e1; }\n  .md .toolbar[primary] .bar-button-secondary {\n    color: #2ec95c;\n    background-color: transparent; }\n    .md .toolbar[primary] .bar-button-secondary:hover:not(.disable-hover) {\n      color: #3fcd69; }\n    .md .toolbar[primary] .bar-button-secondary.activated {\n      opacity: 0.4; }\n  .md .toolbar[primary] .bar-button-outline-secondary {\n    border-color: #2ec95c;\n    color: #2ec95c;\n    background-color: transparent; }\n    .md .toolbar[primary] .bar-button-outline-secondary.activated {\n      color: white;\n      background-color: #2ec95c; }\n  .md .toolbar[primary] .bar-button-solid-secondary {\n    color: white;\n    background-color: #32db64; }\n    .md .toolbar[primary] .bar-button-solid-secondary.activated {\n      background-color: #2ec95c; }\n  .md .toolbar[primary] .bar-button-danger {\n    color: #e13838;\n    background-color: transparent; }\n    .md .toolbar[primary] .bar-button-danger:hover:not(.disable-hover) {\n      color: #cf3434; }\n    .md .toolbar[primary] .bar-button-danger.activated {\n      opacity: 0.4; }\n  .md .toolbar[primary] .bar-button-outline-danger {\n    border-color: #e13838;\n    color: #e13838;\n    background-color: transparent; }\n    .md .toolbar[primary] .bar-button-outline-danger.activated {\n      color: white;\n      background-color: #e13838; }\n  .md .toolbar[primary] .bar-button-solid-danger {\n    color: white;\n    background-color: #f53d3d; }\n    .md .toolbar[primary] .bar-button-solid-danger.activated {\n      background-color: #e13838; }\n  .md .toolbar[primary] .bar-button-light {\n    color: #e0e0e0;\n    background-color: transparent; }\n    .md .toolbar[primary] .bar-button-light:hover:not(.disable-hover) {\n      color: #cecece; }\n    .md .toolbar[primary] .bar-button-light.activated {\n      opacity: 0.4; }\n  .md .toolbar[primary] .bar-button-outline-light {\n    border-color: #e0e0e0;\n    color: #e0e0e0;\n    background-color: transparent; }\n    .md .toolbar[primary] .bar-button-outline-light.activated {\n      color: black;\n      background-color: #e0e0e0; }\n  .md .toolbar[primary] .bar-button-solid-light {\n    color: black;\n    background-color: #f4f4f4; }\n    .md .toolbar[primary] .bar-button-solid-light.activated {\n      background-color: #e0e0e0; }\n  .md .toolbar[primary] .bar-button-dark {\n    color: #343434;\n    background-color: transparent; }\n    .md .toolbar[primary] .bar-button-dark:hover:not(.disable-hover) {\n      color: #444444; }\n    .md .toolbar[primary] .bar-button-dark.activated {\n      opacity: 0.4; }\n  .md .toolbar[primary] .bar-button-outline-dark {\n    border-color: #343434;\n    color: #343434;\n    background-color: transparent; }\n    .md .toolbar[primary] .bar-button-outline-dark.activated {\n      color: white;\n      background-color: #343434; }\n  .md .toolbar[primary] .bar-button-solid-dark {\n    color: white;\n    background-color: #222; }\n    .md .toolbar[primary] .bar-button-solid-dark.activated {\n      background-color: #343434; }\n  .md .bar-button-primary {\n    color: #3474e1;\n    background-color: transparent; }\n    .md .bar-button-primary:hover:not(.disable-hover) {\n      color: #306bcf; }\n    .md .bar-button-primary.activated {\n      opacity: 0.4; }\n  .md .bar-button-outline-primary {\n    border-color: #3474e1;\n    color: #3474e1;\n    background-color: transparent; }\n    .md .bar-button-outline-primary.activated {\n      color: white;\n      background-color: #3474e1; }\n  .md .bar-button-solid-primary {\n    color: white;\n    background-color: #387ef5; }\n    .md .bar-button-solid-primary.activated {\n      background-color: #3474e1; }\n  .md .toolbar[secondary] .toolbar-background {\n    background: #32db64; }\n  .md .toolbar[secondary] .toolbar-title,\n  .md .toolbar[secondary] .bar-button-default,\n  .md .toolbar[secondary] .bar-button-outline {\n    color: white; }\n  .md .toolbar[secondary] .bar-button-outline {\n    border-color: white; }\n  .md .toolbar[secondary] .bar-button-primary {\n    color: #3474e1;\n    background-color: transparent; }\n    .md .toolbar[secondary] .bar-button-primary:hover:not(.disable-hover) {\n      color: #306bcf; }\n    .md .toolbar[secondary] .bar-button-primary.activated {\n      opacity: 0.4; }\n  .md .toolbar[secondary] .bar-button-outline-primary {\n    border-color: #3474e1;\n    color: #3474e1;\n    background-color: transparent; }\n    .md .toolbar[secondary] .bar-button-outline-primary.activated {\n      color: white;\n      background-color: #3474e1; }\n  .md .toolbar[secondary] .bar-button-solid-primary {\n    color: white;\n    background-color: #387ef5; }\n    .md .toolbar[secondary] .bar-button-solid-primary.activated {\n      background-color: #3474e1; }\n  .md .toolbar[secondary] .bar-button-secondary {\n    color: #2ec95c;\n    background-color: transparent; }\n    .md .toolbar[secondary] .bar-button-secondary:hover:not(.disable-hover) {\n      color: #3fcd69; }\n    .md .toolbar[secondary] .bar-button-secondary.activated {\n      opacity: 0.4; }\n  .md .toolbar[secondary] .bar-button-outline-secondary {\n    border-color: #2ec95c;\n    color: #2ec95c;\n    background-color: transparent; }\n    .md .toolbar[secondary] .bar-button-outline-secondary.activated {\n      color: white;\n      background-color: #2ec95c; }\n  .md .toolbar[secondary] .bar-button-solid-secondary {\n    color: white;\n    background-color: #32db64; }\n    .md .toolbar[secondary] .bar-button-solid-secondary.activated {\n      background-color: #2ec95c; }\n  .md .toolbar[secondary] .bar-button-danger {\n    color: #e13838;\n    background-color: transparent; }\n    .md .toolbar[secondary] .bar-button-danger:hover:not(.disable-hover) {\n      color: #cf3434; }\n    .md .toolbar[secondary] .bar-button-danger.activated {\n      opacity: 0.4; }\n  .md .toolbar[secondary] .bar-button-outline-danger {\n    border-color: #e13838;\n    color: #e13838;\n    background-color: transparent; }\n    .md .toolbar[secondary] .bar-button-outline-danger.activated {\n      color: white;\n      background-color: #e13838; }\n  .md .toolbar[secondary] .bar-button-solid-danger {\n    color: white;\n    background-color: #f53d3d; }\n    .md .toolbar[secondary] .bar-button-solid-danger.activated {\n      background-color: #e13838; }\n  .md .toolbar[secondary] .bar-button-light {\n    color: #e0e0e0;\n    background-color: transparent; }\n    .md .toolbar[secondary] .bar-button-light:hover:not(.disable-hover) {\n      color: #cecece; }\n    .md .toolbar[secondary] .bar-button-light.activated {\n      opacity: 0.4; }\n  .md .toolbar[secondary] .bar-button-outline-light {\n    border-color: #e0e0e0;\n    color: #e0e0e0;\n    background-color: transparent; }\n    .md .toolbar[secondary] .bar-button-outline-light.activated {\n      color: black;\n      background-color: #e0e0e0; }\n  .md .toolbar[secondary] .bar-button-solid-light {\n    color: black;\n    background-color: #f4f4f4; }\n    .md .toolbar[secondary] .bar-button-solid-light.activated {\n      background-color: #e0e0e0; }\n  .md .toolbar[secondary] .bar-button-dark {\n    color: #343434;\n    background-color: transparent; }\n    .md .toolbar[secondary] .bar-button-dark:hover:not(.disable-hover) {\n      color: #444444; }\n    .md .toolbar[secondary] .bar-button-dark.activated {\n      opacity: 0.4; }\n  .md .toolbar[secondary] .bar-button-outline-dark {\n    border-color: #343434;\n    color: #343434;\n    background-color: transparent; }\n    .md .toolbar[secondary] .bar-button-outline-dark.activated {\n      color: white;\n      background-color: #343434; }\n  .md .toolbar[secondary] .bar-button-solid-dark {\n    color: white;\n    background-color: #222; }\n    .md .toolbar[secondary] .bar-button-solid-dark.activated {\n      background-color: #343434; }\n  .md .bar-button-secondary {\n    color: #2ec95c;\n    background-color: transparent; }\n    .md .bar-button-secondary:hover:not(.disable-hover) {\n      color: #3fcd69; }\n    .md .bar-button-secondary.activated {\n      opacity: 0.4; }\n  .md .bar-button-outline-secondary {\n    border-color: #2ec95c;\n    color: #2ec95c;\n    background-color: transparent; }\n    .md .bar-button-outline-secondary.activated {\n      color: white;\n      background-color: #2ec95c; }\n  .md .bar-button-solid-secondary {\n    color: white;\n    background-color: #32db64; }\n    .md .bar-button-solid-secondary.activated {\n      background-color: #2ec95c; }\n  .md .toolbar[danger] .toolbar-background {\n    background: #f53d3d; }\n  .md .toolbar[danger] .toolbar-title,\n  .md .toolbar[danger] .bar-button-default,\n  .md .toolbar[danger] .bar-button-outline {\n    color: white; }\n  .md .toolbar[danger] .bar-button-outline {\n    border-color: white; }\n  .md .toolbar[danger] .bar-button-primary {\n    color: #3474e1;\n    background-color: transparent; }\n    .md .toolbar[danger] .bar-button-primary:hover:not(.disable-hover) {\n      color: #306bcf; }\n    .md .toolbar[danger] .bar-button-primary.activated {\n      opacity: 0.4; }\n  .md .toolbar[danger] .bar-button-outline-primary {\n    border-color: #3474e1;\n    color: #3474e1;\n    background-color: transparent; }\n    .md .toolbar[danger] .bar-button-outline-primary.activated {\n      color: white;\n      background-color: #3474e1; }\n  .md .toolbar[danger] .bar-button-solid-primary {\n    color: white;\n    background-color: #387ef5; }\n    .md .toolbar[danger] .bar-button-solid-primary.activated {\n      background-color: #3474e1; }\n  .md .toolbar[danger] .bar-button-secondary {\n    color: #2ec95c;\n    background-color: transparent; }\n    .md .toolbar[danger] .bar-button-secondary:hover:not(.disable-hover) {\n      color: #3fcd69; }\n    .md .toolbar[danger] .bar-button-secondary.activated {\n      opacity: 0.4; }\n  .md .toolbar[danger] .bar-button-outline-secondary {\n    border-color: #2ec95c;\n    color: #2ec95c;\n    background-color: transparent; }\n    .md .toolbar[danger] .bar-button-outline-secondary.activated {\n      color: white;\n      background-color: #2ec95c; }\n  .md .toolbar[danger] .bar-button-solid-secondary {\n    color: white;\n    background-color: #32db64; }\n    .md .toolbar[danger] .bar-button-solid-secondary.activated {\n      background-color: #2ec95c; }\n  .md .toolbar[danger] .bar-button-danger {\n    color: #e13838;\n    background-color: transparent; }\n    .md .toolbar[danger] .bar-button-danger:hover:not(.disable-hover) {\n      color: #cf3434; }\n    .md .toolbar[danger] .bar-button-danger.activated {\n      opacity: 0.4; }\n  .md .toolbar[danger] .bar-button-outline-danger {\n    border-color: #e13838;\n    color: #e13838;\n    background-color: transparent; }\n    .md .toolbar[danger] .bar-button-outline-danger.activated {\n      color: white;\n      background-color: #e13838; }\n  .md .toolbar[danger] .bar-button-solid-danger {\n    color: white;\n    background-color: #f53d3d; }\n    .md .toolbar[danger] .bar-button-solid-danger.activated {\n      background-color: #e13838; }\n  .md .toolbar[danger] .bar-button-light {\n    color: #e0e0e0;\n    background-color: transparent; }\n    .md .toolbar[danger] .bar-button-light:hover:not(.disable-hover) {\n      color: #cecece; }\n    .md .toolbar[danger] .bar-button-light.activated {\n      opacity: 0.4; }\n  .md .toolbar[danger] .bar-button-outline-light {\n    border-color: #e0e0e0;\n    color: #e0e0e0;\n    background-color: transparent; }\n    .md .toolbar[danger] .bar-button-outline-light.activated {\n      color: black;\n      background-color: #e0e0e0; }\n  .md .toolbar[danger] .bar-button-solid-light {\n    color: black;\n    background-color: #f4f4f4; }\n    .md .toolbar[danger] .bar-button-solid-light.activated {\n      background-color: #e0e0e0; }\n  .md .toolbar[danger] .bar-button-dark {\n    color: #343434;\n    background-color: transparent; }\n    .md .toolbar[danger] .bar-button-dark:hover:not(.disable-hover) {\n      color: #444444; }\n    .md .toolbar[danger] .bar-button-dark.activated {\n      opacity: 0.4; }\n  .md .toolbar[danger] .bar-button-outline-dark {\n    border-color: #343434;\n    color: #343434;\n    background-color: transparent; }\n    .md .toolbar[danger] .bar-button-outline-dark.activated {\n      color: white;\n      background-color: #343434; }\n  .md .toolbar[danger] .bar-button-solid-dark {\n    color: white;\n    background-color: #222; }\n    .md .toolbar[danger] .bar-button-solid-dark.activated {\n      background-color: #343434; }\n  .md .bar-button-danger {\n    color: #e13838;\n    background-color: transparent; }\n    .md .bar-button-danger:hover:not(.disable-hover) {\n      color: #cf3434; }\n    .md .bar-button-danger.activated {\n      opacity: 0.4; }\n  .md .bar-button-outline-danger {\n    border-color: #e13838;\n    color: #e13838;\n    background-color: transparent; }\n    .md .bar-button-outline-danger.activated {\n      color: white;\n      background-color: #e13838; }\n  .md .bar-button-solid-danger {\n    color: white;\n    background-color: #f53d3d; }\n    .md .bar-button-solid-danger.activated {\n      background-color: #e13838; }\n  .md .toolbar[light] .toolbar-background {\n    background: #f4f4f4; }\n  .md .toolbar[light] .toolbar-title,\n  .md .toolbar[light] .bar-button-default,\n  .md .toolbar[light] .bar-button-outline {\n    color: #424242; }\n  .md .toolbar[light] .bar-button-outline {\n    border-color: #424242; }\n  .md .toolbar[light] .bar-button-primary {\n    color: #3474e1;\n    background-color: transparent; }\n    .md .toolbar[light] .bar-button-primary:hover:not(.disable-hover) {\n      color: #306bcf; }\n    .md .toolbar[light] .bar-button-primary.activated {\n      opacity: 0.4; }\n  .md .toolbar[light] .bar-button-outline-primary {\n    border-color: #3474e1;\n    color: #3474e1;\n    background-color: transparent; }\n    .md .toolbar[light] .bar-button-outline-primary.activated {\n      color: white;\n      background-color: #3474e1; }\n  .md .toolbar[light] .bar-button-solid-primary {\n    color: white;\n    background-color: #387ef5; }\n    .md .toolbar[light] .bar-button-solid-primary.activated {\n      background-color: #3474e1; }\n  .md .toolbar[light] .bar-button-secondary {\n    color: #2ec95c;\n    background-color: transparent; }\n    .md .toolbar[light] .bar-button-secondary:hover:not(.disable-hover) {\n      color: #3fcd69; }\n    .md .toolbar[light] .bar-button-secondary.activated {\n      opacity: 0.4; }\n  .md .toolbar[light] .bar-button-outline-secondary {\n    border-color: #2ec95c;\n    color: #2ec95c;\n    background-color: transparent; }\n    .md .toolbar[light] .bar-button-outline-secondary.activated {\n      color: white;\n      background-color: #2ec95c; }\n  .md .toolbar[light] .bar-button-solid-secondary {\n    color: white;\n    background-color: #32db64; }\n    .md .toolbar[light] .bar-button-solid-secondary.activated {\n      background-color: #2ec95c; }\n  .md .toolbar[light] .bar-button-danger {\n    color: #e13838;\n    background-color: transparent; }\n    .md .toolbar[light] .bar-button-danger:hover:not(.disable-hover) {\n      color: #cf3434; }\n    .md .toolbar[light] .bar-button-danger.activated {\n      opacity: 0.4; }\n  .md .toolbar[light] .bar-button-outline-danger {\n    border-color: #e13838;\n    color: #e13838;\n    background-color: transparent; }\n    .md .toolbar[light] .bar-button-outline-danger.activated {\n      color: white;\n      background-color: #e13838; }\n  .md .toolbar[light] .bar-button-solid-danger {\n    color: white;\n    background-color: #f53d3d; }\n    .md .toolbar[light] .bar-button-solid-danger.activated {\n      background-color: #e13838; }\n  .md .toolbar[light] .bar-button-light {\n    color: #e0e0e0;\n    background-color: transparent; }\n    .md .toolbar[light] .bar-button-light:hover:not(.disable-hover) {\n      color: #cecece; }\n    .md .toolbar[light] .bar-button-light.activated {\n      opacity: 0.4; }\n  .md .toolbar[light] .bar-button-outline-light {\n    border-color: #e0e0e0;\n    color: #e0e0e0;\n    background-color: transparent; }\n    .md .toolbar[light] .bar-button-outline-light.activated {\n      color: black;\n      background-color: #e0e0e0; }\n  .md .toolbar[light] .bar-button-solid-light {\n    color: black;\n    background-color: #f4f4f4; }\n    .md .toolbar[light] .bar-button-solid-light.activated {\n      background-color: #e0e0e0; }\n  .md .toolbar[light] .bar-button-dark {\n    color: #343434;\n    background-color: transparent; }\n    .md .toolbar[light] .bar-button-dark:hover:not(.disable-hover) {\n      color: #444444; }\n    .md .toolbar[light] .bar-button-dark.activated {\n      opacity: 0.4; }\n  .md .toolbar[light] .bar-button-outline-dark {\n    border-color: #343434;\n    color: #343434;\n    background-color: transparent; }\n    .md .toolbar[light] .bar-button-outline-dark.activated {\n      color: white;\n      background-color: #343434; }\n  .md .toolbar[light] .bar-button-solid-dark {\n    color: white;\n    background-color: #222; }\n    .md .toolbar[light] .bar-button-solid-dark.activated {\n      background-color: #343434; }\n  .md .bar-button-light {\n    color: #e0e0e0;\n    background-color: transparent; }\n    .md .bar-button-light:hover:not(.disable-hover) {\n      color: #cecece; }\n    .md .bar-button-light.activated {\n      opacity: 0.4; }\n  .md .bar-button-outline-light {\n    border-color: #e0e0e0;\n    color: #e0e0e0;\n    background-color: transparent; }\n    .md .bar-button-outline-light.activated {\n      color: black;\n      background-color: #e0e0e0; }\n  .md .bar-button-solid-light {\n    color: black;\n    background-color: #f4f4f4; }\n    .md .bar-button-solid-light.activated {\n      background-color: #e0e0e0; }\n  .md .toolbar[dark] .toolbar-background {\n    background: #222; }\n  .md .toolbar[dark] .toolbar-title,\n  .md .toolbar[dark] .bar-button-default,\n  .md .toolbar[dark] .bar-button-outline {\n    color: white; }\n  .md .toolbar[dark] .bar-button-outline {\n    border-color: white; }\n  .md .toolbar[dark] .bar-button-primary {\n    color: #3474e1;\n    background-color: transparent; }\n    .md .toolbar[dark] .bar-button-primary:hover:not(.disable-hover) {\n      color: #306bcf; }\n    .md .toolbar[dark] .bar-button-primary.activated {\n      opacity: 0.4; }\n  .md .toolbar[dark] .bar-button-outline-primary {\n    border-color: #3474e1;\n    color: #3474e1;\n    background-color: transparent; }\n    .md .toolbar[dark] .bar-button-outline-primary.activated {\n      color: white;\n      background-color: #3474e1; }\n  .md .toolbar[dark] .bar-button-solid-primary {\n    color: white;\n    background-color: #387ef5; }\n    .md .toolbar[dark] .bar-button-solid-primary.activated {\n      background-color: #3474e1; }\n  .md .toolbar[dark] .bar-button-secondary {\n    color: #2ec95c;\n    background-color: transparent; }\n    .md .toolbar[dark] .bar-button-secondary:hover:not(.disable-hover) {\n      color: #3fcd69; }\n    .md .toolbar[dark] .bar-button-secondary.activated {\n      opacity: 0.4; }\n  .md .toolbar[dark] .bar-button-outline-secondary {\n    border-color: #2ec95c;\n    color: #2ec95c;\n    background-color: transparent; }\n    .md .toolbar[dark] .bar-button-outline-secondary.activated {\n      color: white;\n      background-color: #2ec95c; }\n  .md .toolbar[dark] .bar-button-solid-secondary {\n    color: white;\n    background-color: #32db64; }\n    .md .toolbar[dark] .bar-button-solid-secondary.activated {\n      background-color: #2ec95c; }\n  .md .toolbar[dark] .bar-button-danger {\n    color: #e13838;\n    background-color: transparent; }\n    .md .toolbar[dark] .bar-button-danger:hover:not(.disable-hover) {\n      color: #cf3434; }\n    .md .toolbar[dark] .bar-button-danger.activated {\n      opacity: 0.4; }\n  .md .toolbar[dark] .bar-button-outline-danger {\n    border-color: #e13838;\n    color: #e13838;\n    background-color: transparent; }\n    .md .toolbar[dark] .bar-button-outline-danger.activated {\n      color: white;\n      background-color: #e13838; }\n  .md .toolbar[dark] .bar-button-solid-danger {\n    color: white;\n    background-color: #f53d3d; }\n    .md .toolbar[dark] .bar-button-solid-danger.activated {\n      background-color: #e13838; }\n  .md .toolbar[dark] .bar-button-light {\n    color: #e0e0e0;\n    background-color: transparent; }\n    .md .toolbar[dark] .bar-button-light:hover:not(.disable-hover) {\n      color: #cecece; }\n    .md .toolbar[dark] .bar-button-light.activated {\n      opacity: 0.4; }\n  .md .toolbar[dark] .bar-button-outline-light {\n    border-color: #e0e0e0;\n    color: #e0e0e0;\n    background-color: transparent; }\n    .md .toolbar[dark] .bar-button-outline-light.activated {\n      color: black;\n      background-color: #e0e0e0; }\n  .md .toolbar[dark] .bar-button-solid-light {\n    color: black;\n    background-color: #f4f4f4; }\n    .md .toolbar[dark] .bar-button-solid-light.activated {\n      background-color: #e0e0e0; }\n  .md .toolbar[dark] .bar-button-dark {\n    color: #343434;\n    background-color: transparent; }\n    .md .toolbar[dark] .bar-button-dark:hover:not(.disable-hover) {\n      color: #444444; }\n    .md .toolbar[dark] .bar-button-dark.activated {\n      opacity: 0.4; }\n  .md .toolbar[dark] .bar-button-outline-dark {\n    border-color: #343434;\n    color: #343434;\n    background-color: transparent; }\n    .md .toolbar[dark] .bar-button-outline-dark.activated {\n      color: white;\n      background-color: #343434; }\n  .md .toolbar[dark] .bar-button-solid-dark {\n    color: white;\n    background-color: #222; }\n    .md .toolbar[dark] .bar-button-solid-dark.activated {\n      background-color: #343434; }\n  .md .bar-button-dark {\n    color: #343434;\n    background-color: transparent; }\n    .md .bar-button-dark:hover:not(.disable-hover) {\n      color: #444444; }\n    .md .bar-button-dark.activated {\n      opacity: 0.4; }\n  .md .bar-button-outline-dark {\n    border-color: #343434;\n    color: #343434;\n    background-color: transparent; }\n    .md .bar-button-outline-dark.activated {\n      color: white;\n      background-color: #343434; }\n  .md .bar-button-solid-dark {\n    color: white;\n    background-color: #222; }\n    .md .bar-button-solid-dark.activated {\n      background-color: #343434; }\n"
  },
  {
    "path": "content/data/index.json",
    "content": "{\"ref\":{\"0\":{\"p\":\"/docs/v3/components/#header\",\"t\":\"Headerbar-lightbar-stablebar-positivebar-calmbar-balancedbar-energizedbar-assertivebar-royalbar-dark\",\"l\":\"docs_css\"},\"1\":{\"p\":\"/docs/v3/components/#subheader\",\"t\":\"Sub HeaderHeaderSub Header\",\"l\":\"docs_css\"},\"2\":{\"p\":\"/docs/v3/components/#content\",\"t\":\"Content\",\"l\":\"docs_css\"},\"3\":{\"p\":\"/docs/v3/components/#footer\",\"t\":\"Footer\",\"l\":\"docs_css\"},\"4\":{\"p\":\"/docs/v3/components/#buttons\",\"t\":\"Buttons\",\"l\":\"docs_css\"},\"5\":{\"p\":\"/docs/v3/components/#block-buttons\",\"t\":\"Block Buttons\",\"l\":\"docs_css\"},\"6\":{\"p\":\"/docs/v3/components/#full-buttons\",\"t\":\"Full Width Block Buttons\",\"l\":\"docs_css\"},\"7\":{\"p\":\"/docs/v3/components/#button-sizes\",\"t\":\"Different Sizes\",\"l\":\"docs_css\"},\"8\":{\"p\":\"/docs/v3/components/#outlined-buttons\",\"t\":\"Outlined Buttons\",\"l\":\"docs_css\"},\"9\":{\"p\":\"/docs/v3/components/#clear-buttons\",\"t\":\"Clear Buttons\",\"l\":\"docs_css\"},\"10\":{\"p\":\"/docs/v3/components/#icon-buttons\",\"t\":\"Icon Buttons\",\"l\":\"docs_css\"},\"11\":{\"p\":\"/docs/v3/components/#buttons-headers-footers\",\"t\":\"Buttons in HeadersHeader Buttons\",\"l\":\"docs_css\"},\"12\":{\"p\":\"/docs/v3/components/#clear-buttons-headers\",\"t\":\"Clear Buttons in Headers\",\"l\":\"docs_css\"},\"13\":{\"p\":\"/docs/v3/components/#button-bar\",\"t\":\"Button Bar\",\"l\":\"docs_css\"},\"14\":{\"p\":\"/docs/v3/components/#list\",\"t\":\"List\",\"l\":\"docs_css\"},\"15\":{\"p\":\"/docs/v3/components/#item-dividers\",\"t\":\"List Dividers\",\"l\":\"docs_css\"},\"16\":{\"p\":\"/docs/v3/components/#item-icons\",\"t\":\"List Icons\",\"l\":\"docs_css\"},\"17\":{\"p\":\"/docs/v3/components/#item-buttons\",\"t\":\"List Buttons\",\"l\":\"docs_css\"},\"18\":{\"p\":\"/docs/v3/components/#item-avatars\",\"t\":\"Item Avatars\",\"l\":\"docs_css\"},\"19\":{\"p\":\"/docs/v3/components/#item-thumbnails\",\"t\":\"Item Thumbnails\",\"l\":\"docs_css\"},\"20\":{\"p\":\"/docs/v3/components/#list-inset\",\"t\":\"Inset Lists\",\"l\":\"docs_css\"},\"21\":{\"p\":\"/docs/v3/components/#cards\",\"t\":\"Cards\",\"l\":\"docs_css\"},\"22\":{\"p\":\"/docs/v3/components/#card-headers-footers\",\"t\":\"Card Headers and Footers\",\"l\":\"docs_css\"},\"23\":{\"p\":\"/docs/v3/components/#card-lists\",\"t\":\"Card Lists\",\"l\":\"docs_css\"},\"24\":{\"p\":\"/docs/v3/components/#card-images\",\"t\":\"Card Images\",\"l\":\"docs_css\"},\"25\":{\"p\":\"/docs/v3/components/#card-showcase\",\"t\":\"Card Showcase\",\"l\":\"docs_css\"},\"26\":{\"p\":\"/docs/v3/components/#forms\",\"t\":\"Forms &amp; Inputs\",\"l\":\"docs_css\"},\"27\":{\"p\":\"/docs/v3/components/#forms-placeholder-labels\",\"t\":\"Text Input: Placeholder Labels\",\"l\":\"docs_css\"},\"28\":{\"p\":\"/docs/v3/components/#forms-inline-labels\",\"t\":\"Text Input: Inline Labels\",\"l\":\"docs_css\"},\"29\":{\"p\":\"/docs/v3/components/#forms-stacked-labels\",\"t\":\"Text Input: Stacked Labels\",\"l\":\"docs_css\"},\"30\":{\"p\":\"/docs/v3/components/#inset-forms\",\"t\":\"Inset Forms\",\"l\":\"docs_css\"},\"31\":{\"p\":\"/docs/v3/components/#item-input-inset\",\"t\":\"Inset Inputs\",\"l\":\"docs_css\"},\"32\":{\"p\":\"/docs/v3/components/#input-icons\",\"t\":\"Input Icons\",\"l\":\"docs_css\"},\"33\":{\"p\":\"/docs/v3/components/#bar-inputs\",\"t\":\"Header Inputs\",\"l\":\"docs_css\"},\"34\":{\"p\":\"/docs/v3/components/#toggle\",\"t\":\"Toggle\",\"l\":\"docs_css\"},\"35\":{\"p\":\"/docs/v3/components/#checkbox\",\"t\":\"Checkbox\",\"l\":\"docs_css\"},\"36\":{\"p\":\"/docs/v3/components/#radio-buttons\",\"t\":\"Radio Button List\",\"l\":\"docs_css\"},\"37\":{\"p\":\"/docs/v3/components/#range\",\"t\":\"Range\",\"l\":\"docs_css\"},\"38\":{\"p\":\"/docs/v3/components/#select\",\"t\":\"Select\",\"l\":\"docs_css\"},\"39\":{\"p\":\"/docs/v3/components/#tabs\",\"t\":\"Tabs\",\"l\":\"docs_css\"},\"40\":{\"p\":\"/docs/v3/components/#icon-only-tabs\",\"t\":\"Icon-only Tabs\",\"l\":\"docs_css\"},\"41\":{\"p\":\"/docs/v3/components/#icon-top-tabs\",\"t\":\"Top Icon Tabs\",\"l\":\"docs_css\"},\"42\":{\"p\":\"/docs/v3/components/#icon-left-tabs\",\"t\":\"Left Icon Tabs\",\"l\":\"docs_css\"},\"43\":{\"p\":\"/docs/v3/components/#grid\",\"t\":\"Grid\",\"l\":\"docs_css\"},\"44\":{\"p\":\"/docs/v3/components/#grid-even\",\"t\":\"Grid: Evenly Spaced Columns\",\"l\":\"docs_css\"},\"45\":{\"p\":\"/docs/v3/components/#grid-explicit\",\"t\":\"Grid: Explicit Column Sizes\",\"l\":\"docs_css\"},\"46\":{\"p\":\"/docs/v3/components/#grid-offset\",\"t\":\"Grid: Offset Columns\",\"l\":\"docs_css\"},\"47\":{\"p\":\"/docs/v3/components/#grid-vertically-align\",\"t\":\"Grid: Vertically Align Columns\",\"l\":\"docs_css\"},\"48\":{\"p\":\"/docs/v3/components/#grid-responsive\",\"t\":\"Responsive Grid\",\"l\":\"docs_css\"},\"49\":{\"p\":\"/docs/v3/components/#utility\",\"t\":\"\",\"l\":\"docs_css\"},\"50\":{\"p\":\"/docs/v3/components/#colors\",\"t\":\"Colors\",\"l\":\"docs_css\"},\"51\":{\"p\":\"/docs/v3/components/#icons\",\"t\":\"Icons\",\"l\":\"docs_css\"},\"52\":{\"p\":\"/docs/v3/components/#padding\",\"t\":\"Padding\",\"l\":\"docs_css\"},\"53\":{\"p\":\"/docs/v3/components/#animations\",\"t\":\"Animations\",\"l\":\"docs_css\"},\"54\":{\"p\":\"/docs/guide/building.html\",\"t\":\"Building out the Todo App\",\"l\":\"docs_guide\"},\"55\":{\"p\":\"/docs/guide/\",\"t\":\"Ionic Book: Table of Contents\",\"l\":\"docs_guide\"},\"56\":{\"p\":\"/docs/guide/installation.html\",\"t\":\"Installing Ionic and its Dependencies\",\"l\":\"docs_guide\"},\"57\":{\"p\":\"/docs/guide/preface.html\",\"t\":\"Welcome to Ionic\",\"l\":\"docs_guide\"},\"58\":{\"p\":\"/docs/guide/publishing.html\",\"t\":\"Publishing the Todo App\",\"l\":\"docs_guide\"},\"59\":{\"p\":\"/docs/guide/starting.html\",\"t\":\"Building the UI for Todo\",\"l\":\"docs_guide\"},\"60\":{\"p\":\"/docs/guide/testing.html\",\"t\":\"Testing your App\",\"l\":\"docs_guide\"},\"61\":{\"p\":\"/docs/overview/#overview\",\"t\":\"Overview\",\"l\":\"docs_overview\"},\"62\":{\"p\":\"/docs/overview/#download\",\"t\":\"Download\",\"l\":\"docs_overview\"},\"63\":{\"p\":\"/docs/overview/#starter\",\"t\":\"Command Line Utility and Seed Project\",\"l\":\"docs_overview\"},\"64\":{\"p\":\"/docs/overview/#whats-included\",\"t\":\"What's Included\",\"l\":\"docs_overview\"},\"65\":{\"p\":\"/docs/overview/#css-sass\",\"t\":\"CSS/Sass\",\"l\":\"docs_overview\"},\"66\":{\"p\":\"/docs/overview/#phonegap\",\"t\":\"PhoneGap/Cordova/Trigger.io\",\"l\":\"docs_overview\"},\"67\":{\"p\":\"/docs/overview/#browser-support\",\"t\":\"Browser Support\",\"l\":\"docs_overview\"},\"68\":{\"p\":\"/docs/overview/#license\",\"t\":\"License\",\"l\":\"docs_overview\"},\"69\":{\"p\":\"/docs/overview/#contribute\",\"t\":\"Contribute to Ionic Development\",\"l\":\"docs_overview\"},\"70\":{\"p\":\"/docs/overview/#about\",\"t\":\"About Ionic\",\"l\":\"docs_overview\"},\"71\":{\"p\":\"/docs/api/controller/ionicModal/\",\"t\":\"ionicModal\",\"l\":\"docs_api\"},\"72\":{\"p\":\"/docs/api/directive/collectionRepeat/\",\"t\":\"collection-repeat\",\"l\":\"docs_api\"},\"73\":{\"p\":\"/docs/api/directive/ionCheckbox/\",\"t\":\"ion-checkbox\",\"l\":\"docs_api\"},\"74\":{\"p\":\"/docs/api/directive/ionContent/\",\"t\":\"ion-content\",\"l\":\"docs_api\"},\"75\":{\"p\":\"/docs/api/directive/ionDeleteButton/\",\"t\":\"ion-delete-button\",\"l\":\"docs_api\"},\"76\":{\"p\":\"/docs/api/directive/ionFooterBar/\",\"t\":\"ion-footer-bar\",\"l\":\"docs_api\"},\"77\":{\"p\":\"/docs/api/directive/ionHeaderBar/\",\"t\":\"ion-header-bar\",\"l\":\"docs_api\"},\"78\":{\"p\":\"/docs/api/directive/ionInfiniteScroll/\",\"t\":\"ion-infinite-scroll\",\"l\":\"docs_api\"},\"79\":{\"p\":\"/docs/api/directive/ionItem/\",\"t\":\"ion-item\",\"l\":\"docs_api\"},\"80\":{\"p\":\"/docs/api/directive/ionList/\",\"t\":\"ion-list\",\"l\":\"docs_api\"},\"81\":{\"p\":\"/docs/api/directive/ionNavBackButton/\",\"t\":\"ion-nav-back-button\",\"l\":\"docs_api\"},\"82\":{\"p\":\"/docs/api/directive/ionNavBar/\",\"t\":\"ion-nav-bar\",\"l\":\"docs_api\"},\"83\":{\"p\":\"/docs/api/directive/ionNavButtons/\",\"t\":\"ion-nav-buttons\",\"l\":\"docs_api\"},\"84\":{\"p\":\"/docs/api/directive/ionNavView/\",\"t\":\"ion-nav-view\",\"l\":\"docs_api\"},\"85\":{\"p\":\"/docs/api/directive/ionOptionButton/\",\"t\":\"ion-option-button\",\"l\":\"docs_api\"},\"86\":{\"p\":\"/docs/api/directive/ionPane/\",\"t\":\"ion-pane\",\"l\":\"docs_api\"},\"87\":{\"p\":\"/docs/api/directive/ionRadio/\",\"t\":\"ion-radio\",\"l\":\"docs_api\"},\"88\":{\"p\":\"/docs/api/directive/ionRefresher/\",\"t\":\"ion-refresher\",\"l\":\"docs_api\"},\"89\":{\"p\":\"/docs/api/directive/ionReorderButton/\",\"t\":\"ion-reorder-button\",\"l\":\"docs_api\"},\"90\":{\"p\":\"/docs/api/directive/ionScroll/\",\"t\":\"ion-scroll\",\"l\":\"docs_api\"},\"91\":{\"p\":\"/docs/api/directive/ionSideMenu/\",\"t\":\"ion-side-menu\",\"l\":\"docs_api\"},\"92\":{\"p\":\"/docs/api/directive/ionSideMenuContent/\",\"t\":\"ion-side-menu-content\",\"l\":\"docs_api\"},\"93\":{\"p\":\"/docs/api/directive/ionSideMenus/\",\"t\":\"ion-side-menus\",\"l\":\"docs_api\"},\"94\":{\"p\":\"/docs/api/directive/ionSlideBox/\",\"t\":\"ion-slide-box\",\"l\":\"docs_api\"},\"95\":{\"p\":\"/docs/api/directive/ionTab/\",\"t\":\"ion-tab\",\"l\":\"docs_api\"},\"96\":{\"p\":\"/docs/api/directive/ionTabs/\",\"t\":\"ion-tabs\",\"l\":\"docs_api\"},\"97\":{\"p\":\"/docs/api/directive/ionToggle/\",\"t\":\"ion-toggle\",\"l\":\"docs_api\"},\"98\":{\"p\":\"/docs/api/directive/ionView/\",\"t\":\"ion-view\",\"l\":\"docs_api\"},\"99\":{\"p\":\"/docs/api/directive/keyboardAttach/\",\"t\":\"keyboard-attach\",\"l\":\"docs_api\"},\"100\":{\"p\":\"/docs/api/directive/menuClose/\",\"t\":\"menu-close\",\"l\":\"docs_api\"},\"101\":{\"p\":\"/docs/api/directive/menuToggle/\",\"t\":\"menu-toggle\",\"l\":\"docs_api\"},\"102\":{\"p\":\"/docs/api/directive/navClear/\",\"t\":\"nav-clear\",\"l\":\"docs_api\"},\"103\":{\"p\":\"/docs/api/page/keyboard/\",\"t\":\"keyboard\",\"l\":\"docs_api\"},\"104\":{\"p\":\"/docs/api/page/tap/\",\"t\":\"tap\",\"l\":\"docs_api\"},\"105\":{\"p\":\"/docs/api/service/$ionicActionSheet/\",\"t\":\"$ionicActionSheet\",\"l\":\"docs_api\"},\"106\":{\"p\":\"/docs/api/service/$ionicAnimation/\",\"t\":\"$ionicAnimation\",\"l\":\"docs_api\"},\"107\":{\"p\":\"/docs/api/service/$ionicBackdrop/\",\"t\":\"$ionicBackdrop\",\"l\":\"docs_api\"},\"108\":{\"p\":\"/docs/api/service/$ionicGesture/\",\"t\":\"$ionicGesture\",\"l\":\"docs_api\"},\"109\":{\"p\":\"/docs/api/service/$ionicListDelegate/\",\"t\":\"$ionicListDelegate\",\"l\":\"docs_api\"},\"110\":{\"p\":\"/docs/api/service/$ionicLoading/\",\"t\":\"$ionicLoading\",\"l\":\"docs_api\"},\"111\":{\"p\":\"/docs/api/service/$ionicModal/\",\"t\":\"$ionicModal\",\"l\":\"docs_api\"},\"112\":{\"p\":\"/docs/api/service/$ionicNavBarDelegate/\",\"t\":\"$ionicNavBarDelegate\",\"l\":\"docs_api\"},\"113\":{\"p\":\"/docs/api/service/$ionicPlatform/\",\"t\":\"$ionicPlatform\",\"l\":\"docs_api\"},\"114\":{\"p\":\"/docs/api/service/$ionicPopup/\",\"t\":\"$ionicPopup\",\"l\":\"docs_api\"},\"115\":{\"p\":\"/docs/api/service/$ionicScrollDelegate/\",\"t\":\"$ionicScrollDelegate\",\"l\":\"docs_api\"},\"116\":{\"p\":\"/docs/api/service/$ionicSideMenuDelegate/\",\"t\":\"$ionicSideMenuDelegate\",\"l\":\"docs_api\"},\"117\":{\"p\":\"/docs/api/service/$ionicSlideBoxDelegate/\",\"t\":\"$ionicSlideBoxDelegate\",\"l\":\"docs_api\"},\"118\":{\"p\":\"/docs/api/service/$ionicTabsDelegate/\",\"t\":\"$ionicTabsDelegate\",\"l\":\"docs_api\"},\"119\":{\"p\":\"/docs/api/utility/ionic.DomUtil/\",\"t\":\"ionic.DomUtil\",\"l\":\"docs_api\"},\"120\":{\"p\":\"/docs/api/utility/ionic.EventController/\",\"t\":\"ionic.EventController\",\"l\":\"docs_api\"},\"121\":{\"p\":\"/docs/api/utility/ionic.Platform/\",\"t\":\"ionic.Platform\",\"l\":\"docs_api\"},\"122\":{\"p\":\"/docs/api/ionic/controller/\",\"t\":\"Controllers in module ionic\",\"l\":\"docs_api\"},\"123\":{\"p\":\"/docs/api/ionic/directive/\",\"t\":\"Directives in module ionic\",\"l\":\"docs_api\"},\"124\":{\"p\":\"/docs/api/ionic/service/\",\"t\":\"Services in module ionic\",\"l\":\"docs_api\"},\"125\":{\"p\":\"/docs/api/ionic/utility/\",\"t\":\"Utilitys in module ionic\",\"l\":\"docs_api\"},\"126\":{\"p\":\"/docs/\",\"t\":\"Ionic Documentation\",\"l\":\"docs_home\"},\"127\":{\"p\":\"/getting-started/\",\"t\":\"Getting Started with Ionic\",\"l\":\"default\"},\"128\":{\"p\":\"/tutorials/\",\"t\":\"Ionic Tutorials\",\"l\":\"tutorial\"},\"129\":{\"p\":\"/tutorials/customizing-ionic-with-sass/\",\"t\":\"Customize Your Ionic App With Sass\",\"l\":\"tutorial\"},\"130\":{\"p\":\"/tutorials/fade-status-bar/\",\"t\":\"Fading header effect with Ionic\",\"l\":\"tutorial\"},\"131\":{\"p\":\"/tutorials/fetching-from-a-remote-feed/\",\"t\":\"Fetching From A Remote Feed With AngularJS And Ionic\",\"l\":\"tutorial\"},\"132\":{\"p\":\"/tutorials/fullscreen-apps/\",\"t\":\"Removing the iOS Status Bar\",\"l\":\"tutorial\"},\"133\":{\"p\":\"/tutorials/intro-tutorial/\",\"t\":\"Intro App Tutorial\",\"l\":\"tutorial\"},\"134\":{\"p\":\"/blog/hybrid-apps-and-the-curse-of-the-300ms-delay/\",\"t\":\"Hybrid Apps and the Curse of the 300ms Delay\",\"l\":\"post\"},\"135\":{\"p\":\"/blog/what-is-cordova-phonegap/\",\"t\":\"The Last Word on Cordova and PhoneGap\",\"l\":\"post\"},\"136\":{\"p\":\"/blog/popup-support/\",\"t\":\"Popup Support Just Landed\",\"l\":\"post\"}},\"index\":{\"version\":\"0.4.5\",\"fields\":[{\"name\":\"path\",\"boost\":1},{\"name\":\"title\",\"boost\":10},{\"name\":\"body\",\"boost\":1}],\"ref\":\"id\",\"documentStore\":{\"store\":{\"0\":[\"action\",\"bar-assert\",\"bar-balanc\",\"bar-calm\",\"bar-dark\",\"bar-energ\",\"bar-light\",\"bar-posit\",\"bar-roy\",\"bar-stabl\",\"button\",\"carri\",\"color\",\"come\",\"contain\",\"default\",\"docs/components/#head\",\"fix\",\"header\",\"headerbar-lightbar-stablebar-positivebar-calmbar-balancedbar-energizedbar-assertivebar-royalbar-dark\",\"label\",\"left/right\",\"navig\",\"option\",\"out\",\"region\",\"screen\",\"titl\",\"top\",\"varieti\",\"variou\"],\"1\":[\"bar\",\"below\",\"button\",\"custom\",\"docs/components/#subhead\",\"few\",\"header\",\"headerheadersub\",\"idea\",\"look\",\"more\",\"origin\",\"place\",\"quit\",\"secondari\",\"sub\",\"us\",\"wai\"],\"2\":[\"app\",\"area\",\"avail\",\"bottom\",\"content\",\"doc\",\"docs/components/#cont\",\"fill\",\"fix\",\"footer\",\"h1\",\"h2\",\"h3\",\"h4\",\"h5\",\"h6\",\"header\",\"i'm\",\"ionic\",\"link\",\"more\",\"option\",\"paragraph\",\"remain\",\"respect\",\"scrollabl\",\"see\",\"space\",\"top\",\"viewport\"],\"3\":[\"add\",\"addition\",\"automat\",\"bar-foot\",\"bar-head\",\"bottom\",\"button\",\"color\",\"contain\",\"content\",\"correct\",\"docs/components/#foot\",\"footer\",\"header\",\"instead\",\"left\",\"markup\",\"need\",\"option\",\"place\",\"present\",\"pull-right\",\"region\",\"relat\",\"requir\",\"right\",\"same\",\"screen\",\"side\",\"such\",\"titl\",\"type\",\"us\",\"variou\",\"written\",\"you'll\"],\"4\":[\"ah\",\"appli\",\"block\",\"button\",\"button-assert\",\"button-balanc\",\"button-calm\",\"button-dark\",\"button-energ\",\"button-light\",\"button-posit\",\"button-roy\",\"button-st\",\"color\",\"come\",\"default\",\"displai\",\"docs/components/#button\",\"essenti\",\"experi\",\"full\",\"header\",\"includ\",\"inline-block\",\"ionic'\",\"mobil\",\"option\",\"part\",\"spectrum\",\"width\"],\"5\":[\"100\",\"ad\",\"appli\",\"between\",\"block\",\"breath\",\"button\",\"button'\",\"button-assert\",\"button-balanc\",\"button-block\",\"button-calm\",\"button-dark\",\"button-energ\",\"button-light\",\"button-posit\",\"button-roy\",\"button-st\",\"contain\",\"content\",\"devic\",\"displai\",\"docs/components/#block-button\",\"edg\",\"element\",\"exampl\",\"go\",\"pad\",\"parent'\",\"room\",\"width\"],\"6\":[\"ad\",\"addition\",\"appli\",\"block\",\"border\",\"border-radiu\",\"button\",\"button'\",\"button-assert\",\"button-balanc\",\"button-calm\",\"button-dark\",\"button-energ\",\"button-ful\",\"button-light\",\"button-posit\",\"button-roy\",\"button-st\",\"displai\",\"docs/components/#full-button\",\"element\",\"entir\",\"full\",\"left\",\"pad\",\"parent\",\"remov\",\"right\",\"stretch\",\"style\",\"us\",\"width\"],\"7\":[\"ad\",\"button\",\"button-assert\",\"button-balanc\",\"button-calm\",\"button-dark\",\"button-energ\",\"button-larg\",\"button-light\",\"button-posit\",\"button-roy\",\"button-smal\",\"button-st\",\"differ\",\"docs/components/#button-s\",\"larg\",\"larger\",\"make\",\"size\",\"small\",\"smaller\"],\"8\":[\"appli\",\"background\",\"blue\",\"border\",\"button\",\"button-assert\",\"button-balanc\",\"button-calm\",\"button-dark\",\"button-energ\",\"button-light\",\"button-outlin\",\"button-posit\",\"button-roy\",\"button-st\",\"color\",\"docs/components/#outlined-button\",\"mean\",\"note\",\"outlin\",\"result\",\"style\",\"take\",\"text\",\"transpar\",\"us\"],\"9\":[\"add\",\"appli\",\"background\",\"blue\",\"border\",\"button\",\"button-assert\",\"button-balanc\",\"button-calm\",\"button-clear\",\"button-dark\",\"button-energ\",\"button-light\",\"button-posit\",\"button-roy\",\"button-st\",\"clear\",\"color\",\"docs/components/#clear-button\",\"instead\",\"make\",\"mean\",\"note\",\"out\",\"remov\",\"result\",\"stand\",\"style\",\"take\",\"text\"],\"10\":[\"ad\",\"assign\",\"back\",\"built\",\"button\",\"child\",\"choos\",\"custom\",\"directli\",\"docs/components/#icon-button\",\"dom\",\"easili\",\"element\",\"favorit\",\"font-pack\",\"home\",\"icon\",\"insid\",\"ionicon\",\"learn\",\"load\",\"more\",\"number\",\"reduc\",\"reorder\",\"set\",\"us\"],\"11\":[\"add\",\"bar\",\"button\",\"chang\",\"class\",\"default\",\"desir\",\"docs/components/#buttons-headers-foot\",\"don't\",\"edit\",\"extra\",\"footer\",\"header\",\"headershead\",\"place\",\"style\",\"take\",\"us\"],\"12\":[\"add\",\"approach\",\"background\",\"border\",\"button\",\"button-clear\",\"classnam\",\"clear\",\"color\",\"docs/components/#clear-buttons-head\",\"edit\",\"header\",\"minim\",\"more\",\"remov\",\"simpli\"],\"13\":[\"ad\",\"area\",\"bar\",\"button\",\"button-bar\",\"classnam\",\"content\",\"default\",\"docs/components/#button-bar\",\"easili\",\"exampl\",\"first\",\"group\",\"header\",\"main\",\"screen\",\"second\",\"third\",\"togeth\",\"us\",\"well\"],\"14\":[\"angularj\",\"basic\",\"battletoad\",\"bro\",\"button\",\"check\",\"common\",\"compon\",\"content\",\"contra\",\"current\",\"detail\",\"direct\",\"displai\",\"doc\",\"docs/components/#list\",\"drag\",\"duck\",\"edit\",\"extens\",\"hunter\",\"icon\",\"includ\",\"inform\",\"interact\",\"interfac\",\"ionic'\",\"item\",\"legend\",\"list\",\"man\",\"mario\",\"mega\",\"metroid\",\"mike\",\"mobil\",\"mode\",\"more\",\"os'\",\"out\",\"overview\",\"power\",\"pro-am\",\"pull\",\"punch-out\",\"r.c\",\"rang\",\"read\",\"refresh\",\"reorder\",\"right\",\"simpl\",\"spy\",\"such\",\"super\",\"support\",\"swipe\",\"tale\",\"text\",\"that'\",\"thumbnail\",\"toggl\",\"tyson'\",\"us\",\"variou\",\"veri\",\"versitil\",\"view\",\"wai\",\"wide\",\"zelda\"],\"15\":[\"background\",\"bar\",\"butterfing\",\"candi\",\"child\",\"class\",\"color\",\"creat\",\"customiz\",\"default\",\"differ\",\"divid\",\"docs/components/#item-divid\",\"easili\",\"element\",\"font-weight\",\"gobstopp\",\"group\",\"hard\",\"item\",\"item-divid\",\"jolli\",\"kat\",\"kit\",\"lifesav\",\"list\",\"organ\",\"rancher\",\"skittl\",\"snicker\",\"twix\",\"us\"],\"16\":[\"0\",\"activ\",\"ad\",\"add\",\"addition\",\"album\",\"align\",\"allow\",\"and/or\",\"appli\",\"arrow\",\"assign\",\"automat\",\"bad\",\"badg\",\"blue\",\"both\",\"break\",\"built\",\"call\",\"check\",\"choos\",\"class\",\"custom\",\"default\",\"docs/components/#item-icon\",\"each\",\"easili\",\"element\",\"entir\",\"exampl\",\"first\",\"font-pack\",\"fourth\",\"friend\",\"game\",\"grammi\",\"icon\",\"ionicon\",\"item\",\"item-icon-left\",\"item-icon-right\",\"item-not\",\"jt\",\"learn\",\"left\",\"line\",\"list\",\"lt;a&gt\",\"lt;button&gt\",\"ma\",\"mail\",\"mario\",\"more\",\"music\",\"need\",\"pink\",\"record\",\"right\",\"second\",\"set\",\"shop\",\"side\",\"small\",\"super\",\"tappabl\",\"third\",\"up\",\"us\",\"which\",\"yellow\"],\"17\":[\"button\",\"call\",\"docs/components/#item-button\",\"item\",\"item-button-left\",\"item-button-right\",\"list\",\"ma\",\"place\",\"us\",\"within\"],\"18\":[\"avatar\",\"back\",\"big\",\"boo\",\"brought\",\"classnam\",\"creat\",\"dana\",\"docs/components/#item-avatar\",\"dog\",\"egon\",\"essenti\",\"full\",\"gatekeep\",\"go\",\"gonna\",\"i'm\",\"icon\",\"imag\",\"isn't\",\"item\",\"item-avatar\",\"larger\",\"littl\",\"man\",\"okai\",\"rai\",\"scientist\",\"showcas\",\"slimer\",\"smaller\",\"spud\",\"stream\",\"that'\",\"thumbnail\",\"tulli\",\"twinki\",\"ugli\",\"us\",\"venkman\",\"we'r\",\"winston\"],\"19\":[\"album\",\"align\",\"beasti\",\"blue\",\"boi\",\"creat\",\"dai\",\"demo\",\"docs/components/#item-thumbnail\",\"dooki\",\"dream\",\"entir\",\"essenti\",\"green\",\"hate\",\"height\",\"icon\",\"ill\",\"imag\",\"inch\",\"item\",\"item-thumbnail-left\",\"item-thumbnail-right\",\"larger\",\"left\",\"licens\",\"list\",\"machin\",\"nail\",\"nevermind\",\"ng-repeat\",\"nine\",\"nirvana\",\"pretti\",\"pumpkin\",\"quick\",\"right\",\"showcas\",\"siames\",\"side\",\"smash\",\"span/defin\",\"style\",\"thumbnail\",\"us\",\"weezer\"],\"20\":[\"ark\",\"box-shadow\",\"card\",\"contain\",\"crusad\",\"crystal\",\"differ\",\"docs/components/#list-inset\",\"doom\",\"element\",\"exampl\",\"except\",\"form\",\"full\",\"go\",\"inset\",\"insid\",\"instead\",\"it'll\",\"kingdom\",\"last\",\"list\",\"list-inset\",\"lost\",\"main\",\"margin\",\"more\",\"perform\",\"raider\",\"scroll\",\"show\",\"similar\",\"skull\",\"templ\",\"usag\",\"width\"],\"21\":[\"add\",\"allow\",\"anim\",\"anoth\",\"basic\",\"becom\",\"between\",\"box-shadow\",\"card\",\"choic\",\"compani\",\"contain\",\"content\",\"control\",\"cousin\",\"default\",\"design\",\"differ\",\"displai\",\"docs/components/#card\",\"easi\",\"even\",\"expect\",\"experi\",\"fast\",\"flexibl\",\"googl\",\"great\",\"includ\",\"inform\",\"inset\",\"instead\",\"it'\",\"item\",\"larg\",\"left\",\"like\",\"list\",\"list-inset\",\"littl\",\"make\",\"mani\",\"mobil\",\"more\",\"much\",\"on\",\"onc\",\"organ\",\"page\",\"pattern\",\"perform\",\"place\",\"predict\",\"realest\",\"reason\",\"recent\",\"recommend\",\"right\",\"same\",\"screen\",\"scroll\",\"set\",\"size\",\"spotifi\",\"swipe\",\"text\",\"they'r\",\"top\",\"twitter\",\"up\",\"us\",\"user\",\"usual\",\"visual\",\"wai\",\"wherea\",\"wide\",\"wrap\",\"year\"],\"22\":[\"abov\",\"add\",\"basic\",\"below\",\"card\",\"classnam\",\"content\",\"custom\",\"docs/components/#card-headers-foot\",\"easili\",\"element\",\"exampl\",\"fill\",\"footer\",\"header\",\"i'm\",\"insid\",\"item-divid\",\"normal\",\"place\",\"screen\",\"similarli\",\"text\",\"within\"],\"23\":[\"address\",\"card\",\"classnam\",\"creat\",\"docs/components/#card-list\",\"enter\",\"home\",\"inform\",\"list\",\"number\",\"password\",\"phone\",\"us\",\"wireless\"],\"24\":[\"card\",\"combin\",\"docs/components/#card-imag\",\"element\",\"great\",\"hate\",\"imag\",\"inch\",\"list\",\"listen\",\"look\",\"machin\",\"nail\",\"nine\",\"pretti\",\"start\"],\"25\":[\"05\",\"1\",\"1955\",\"5\",\"align\",\"begin\",\"card\",\"card-bodi\",\"card-foot\",\"classnam\",\"comment\",\"consist\",\"content\",\"creat\",\"differ\",\"docs/components/#card-showcas\",\"element\",\"facebook\",\"footer\",\"header\",\"here\",\"icon\",\"imag\",\"item\",\"item-avatar\",\"item-bodi\",\"item-divid\",\"left\",\"list\",\"marti\",\"mcfly\",\"novemb\",\"paragraph\",\"sever\",\"share\",\"showcas\",\"style\",\"tab\",\"text\",\"thumbnail\",\"us\",\"util\",\"within\"],\"26\":[\"addition\",\"amp\",\"appropri\",\"associ\",\"awar\",\"both\",\"creat\",\"design\",\"develop\",\"docs/components/#form\",\"each\",\"element\",\"field\",\"focu\",\"form\",\"group\",\"html5\",\"individu\",\"input\",\"ionic\",\"it'\",\"item\",\"item-input\",\"keyboard\",\"label\",\"list\",\"lt;label&gt\",\"out\",\"part\",\"prefer\",\"present\",\"receiv\",\"relat\",\"row\",\"submit\",\"tap\",\"type\",\"underli\",\"us\",\"user\",\"variou\",\"virtual\"],\"27\":[\"100\",\"attribut\",\"begin\",\"border\",\"default\",\"docs/components/#forms-placeholder-label\",\"enter\",\"exampl\",\"hidden\",\"input\",\"input'\",\"it'll\",\"label\",\"left\",\"lt;textarea&gt\",\"multi-lin\",\"notic\",\"placehold\",\"right\",\"simul\",\"submit\",\"text\",\"us\",\"user\",\"width\"],\"28\":[\"docs/components/#forms-inline-label\",\"element\",\"enter\",\"hide\",\"inlin\",\"input\",\"input-label\",\"label\",\"left\",\"note\",\"noth\",\"password\",\"place\",\"placehold\",\"sign\",\"stop\",\"text\",\"there'\",\"us\",\"user\",\"usernam\"],\"29\":[\"account\",\"alwai\",\"assign\",\"attribut\",\"creat\",\"docs/components/#forms-stacked-label\",\"each\",\"email\",\"exampl\",\"first\",\"hint\",\"input\",\"input'\",\"input-label\",\"item\",\"item-stacked-label\",\"label\",\"last\",\"look\",\"name\",\"place\",\"placehold\",\"stack\",\"text\",\"top\",\"type\",\"us\",\"user'\"],\"30\":[\"100\",\"addition\",\"appear\",\"appli\",\"assign\",\"box\",\"card\",\"classnam\",\"default\",\"docs/components/#inset-form\",\"each\",\"element\",\"fill\",\"form\",\"give\",\"input\",\"inset\",\"item\",\"list\",\"list'\",\"list-inset\",\"lower\",\"pad\",\"parent\",\"shadow\",\"submit\",\"us\",\"width\"],\"31\":[\"button\",\"cancel\",\"docs/components/#item-input-inset\",\"entir\",\"individu\",\"input\",\"inset\",\"insid\",\"item\",\"item-input-inset\",\"list\",\"list-inset\",\"place\",\"submit\",\"us\",\"wherea\"],\"32\":[\"ad\",\"add\",\"befor\",\"color\",\"default\",\"docs/components/#input-icon\",\"easili\",\"give\",\"icon\",\"input\",\"item-input\",\"label\",\"left\",\"lt;input&gt\",\"placehold\",\"placeholder-icon\",\"simpli\",\"take\",\"text\",\"us\"],\"33\":[\"along\",\"button\",\"cancel\",\"docs/components/#bar-input\",\"form\",\"header\",\"input\",\"place\",\"submit\"],\"34\":[\"ad\",\"along\",\"applet\",\"assert\",\"assign\",\"checkbox\",\"class\",\"color\",\"compon\",\"css3\",\"devic\",\"differ\",\"docs/components/#toggl\",\"drag\",\"each\",\"easi\",\"easier\",\"entir\",\"exampl\",\"except\",\"flashplay\",\"html\",\"html5\",\"input\",\"ionic\",\"item\",\"item-toggl\",\"java\",\"javascript\",\"list\",\"look\",\"lt;label&gt\",\"make\",\"multipl\",\"note\",\"order\",\"prefer\",\"same\",\"side\",\"silverlight\",\"such\",\"tap\",\"technic\",\"thing\",\"toggl\",\"toggle-assert\",\"touch\",\"us\",\"web\",\"within\",\"wrap\"],\"35\":[\"1.21\",\"88\",\"ad\",\"along\",\"assert\",\"assign\",\"capacitor\",\"checkbox\",\"checkbox-assert\",\"class\",\"color\",\"delorean\",\"differ\",\"docs/components/#checkbox\",\"each\",\"element\",\"entir\",\"exampl\",\"except\",\"flux\",\"gigawatt\",\"html\",\"input\",\"ionic\",\"it'\",\"item\",\"item-checkbox\",\"list\",\"lt;label&gt\",\"make\",\"mph\",\"multipl\",\"note\",\"order\",\"plutonium\",\"prefer\",\"resuppli\",\"side\",\"style\",\"such\",\"tappabl\",\"us\",\"within\"],\"36\":[\"act\",\"app\",\"area\",\"attribut\",\"button\",\"class\",\"convent\",\"design\",\"differ\",\"displai\",\"docs/components/#radio-button\",\"each\",\"element\",\"entir\",\"follow\",\"go\",\"hide\",\"icon\",\"input\",\"ionic\",\"item\",\"item-radio\",\"java\",\"list\",\"lt;label&gt\",\"make\",\"modern\",\"name\",\"net\",\"order\",\"php\",\"prefer\",\"python\",\"radio\",\"radio-icon\",\"rubi\",\"same\",\"seen\",\"show\",\"similarli\",\"standard\",\"tappabl\",\"us\"],\"37\":[\"card\",\"color\",\"default\",\"docs/components/#rang\",\"element\",\"ionic\",\"item\",\"list\",\"rang\",\"such\",\"theme\",\"us\",\"variou\"],\"38\":[\"2-1b\",\"a-w\",\"alderaan\",\"android\",\"appear\",\"arc-170\",\"b1\",\"behavior\",\"blue\",\"bottom\",\"browser\",\"browser'\",\"c-3po\",\"cover\",\"custom\",\"dagobah\",\"default\",\"delta-7\",\"desktop\",\"differ\",\"docs/components/#select\",\"down\",\"droid\",\"drop\",\"each\",\"element\",\"exampl\",\"felucia\",\"fighter\",\"geonosi\",\"green\",\"half\",\"hoth\",\"ig-88\",\"interfac\",\"io\",\"ionic'\",\"it-o\",\"kamino\",\"lightsab\",\"list\",\"manag\",\"mygeeto\",\"n-1\",\"naboo\",\"on\",\"open\",\"option\",\"planet\",\"platform'\",\"popup\",\"pretti\",\"r2-d2\",\"radio-button\",\"red\",\"rel\",\"scroller\",\"see\",\"select\",\"still\",\"style\",\"tataouin\",\"tie\",\"tradit\",\"up\",\"user\",\"user-interfac\",\"utapau\",\"wherea\",\"window\",\"x-wing\",\"y-wing\",\"yavin\",\"you'll\"],\"39\":[\"add\",\"allow\",\"bar\",\"between\",\"build\",\"button\",\"chang\",\"class\",\"classnam\",\"color\",\"combin\",\"consist\",\"contain\",\"content\",\"control\",\"default\",\"doc\",\"docs/components/#tab\",\"each\",\"element\",\"enabl\",\"exampl\",\"experi\",\"favorit\",\"hide\",\"home\",\"horizont\",\"icon\",\"interfac\",\"ionic\",\"link\",\"match\",\"method\",\"mobil\",\"navig\",\"popular\",\"region\",\"screen\",\"see\",\"set\",\"show\",\"standard\",\"still\",\"style\",\"tab\",\"tab-item\",\"tabbar\",\"tabs-dang\",\"tabs-dark\",\"tabs-default\",\"tabs-info\",\"tabs-item-hid\",\"tabs-primari\",\"tabs-secondari\",\"tabs-success\",\"tabs-warn\",\"text\",\"text-onli\",\"us\",\"without\"],\"40\":[\"add\",\"along\",\"classnam\",\"docs/components/#icon-only-tab\",\"icon-onli\",\"tab\",\"tabs-icon-onli\"],\"41\":[\"add\",\"along\",\"classic\",\"classnam\",\"docs/components/#icon-top-tab\",\"favorit\",\"home\",\"icon\",\"set\",\"tab\",\"tabs-icon-top\",\"top\"],\"42\":[\"add\",\"along\",\"classnam\",\"docs/components/#icon-left-tab\",\"favorit\",\"home\",\"icon\",\"left\",\"set\",\"tab\",\"tabs-icon-left\"],\"43\":[\"1\",\"12\",\"1line\",\"23\",\"2line\",\"3\",\"6\",\"7\",\"ad\",\"add\",\"advantag\",\"align\",\"automag\",\"avail\",\"background\",\"border\",\"box\",\"chose\",\"classnam\",\"col\",\"column\",\"content\",\"crazi\",\"css\",\"demo\",\"design\",\"devic\",\"differ\",\"docs/components/#grid\",\"doesn't\",\"don't\",\"each\",\"easier\",\"easili\",\"etc\",\"evenli\",\"explicitli\",\"figur\",\"five\",\"flexbox\",\"flexibl\",\"four\",\"grai\",\"grid\",\"have\",\"here\",\"ionic\",\"ionic'\",\"it'\",\"larg\",\"layout\",\"line\",\"matter\",\"modul\",\"note\",\"number\",\"out\",\"percentag\",\"point\",\"requir\",\"restrict\",\"right\",\"row\",\"see\",\"simpli\",\"space\",\"standard\",\"state\",\"structur\",\"support\",\"surpris\",\"system\",\"take\",\"there'\",\"they'll\",\"three\",\"two\",\"up\",\"us\",\"vertic\",\"want\",\"within\",\"worri\"],\"44\":[\"20\",\"ad\",\"amount\",\"anywher\",\"area\",\"automat\",\"avail\",\"background\",\"below\",\"border\",\"classnam\",\"code\",\"col\",\"column\",\"default\",\"demo\",\"docs/components/#grid-even\",\"each\",\"easier\",\"equal\",\"evenli\",\"exampl\",\"five\",\"flexbox\",\"grai\",\"grid\",\"insid\",\"it'\",\"note\",\"notic\",\"receiv\",\"row\",\"see\",\"size\",\"space\",\"specifi\",\"structur\",\"take\",\"thank\",\"up\",\"width\"],\"45\":[\"10\",\"12\",\"20\",\"25\",\"33.3333\",\"50\",\"66.6666\",\"75\",\"80\",\"90\",\"ad\",\"advantag\",\"area\",\"avail\",\"background\",\"border\",\"case\",\"certain\",\"classnam\",\"col\",\"col-10\",\"col-20\",\"col-25\",\"col-33\",\"col-50\",\"col-67\",\"col-75\",\"col-80\",\"col-90\",\"col.col-50\",\"col.col-75\",\"column\",\"contrast\",\"default\",\"demo\",\"divid\",\"docs/components/#grid-explicit\",\"each\",\"easier\",\"evenli\",\"exampl\",\"explicit\",\"explicitli\",\"grai\",\"grid\",\"ionic'\",\"it'\",\"larger\",\"lock\",\"need\",\"note\",\"other\",\"percent\",\"percentag\",\"row\",\"same\",\"see\",\"size\",\"specif\",\"state\",\"still\",\"structur\",\"system\",\"take\",\"up\",\"us\",\"want\",\"you'd\"],\"46\":[\"10\",\"20\",\"25\",\"33.3333\",\"50\",\"66.6666\",\"75\",\"80\",\"90\",\"ad\",\"background\",\"border\",\"classnam\",\"code\",\"col\",\"col-offset-10\",\"col-offset-20\",\"col-offset-25\",\"col-offset-33\",\"col-offset-50\",\"col-offset-67\",\"col-offset-75\",\"col-offset-80\",\"col-offset-90\",\"column\",\"demo\",\"docs/components/#grid-offset\",\"easier\",\"grai\",\"grid\",\"it'\",\"itself\",\"left\",\"note\",\"offset\",\"percentag\",\"see\",\"speak\",\"structur\",\"we'll\"],\"47\":[\"1234\",\"abil\",\"ad\",\"align\",\"anoth\",\"appli\",\"background\",\"border\",\"bottom\",\"center\",\"col\",\"column\",\"content\",\"default\",\"demo\",\"demonstr\",\"docs/components/#grid-vertically-align\",\"each\",\"easier\",\"easili\",\"first\",\"flexbox'\",\"grai\",\"grid\",\"height\",\"includ\",\"it'\",\"last\",\"made\",\"note\",\"order\",\"other\",\"row\",\"same\",\"see\",\"show\",\"sleev\",\"specif\",\"structur\",\"take\",\"tallest\",\"top\",\"trick\",\"up\",\"vertic\",\"we'v\"],\"48\":[\"ad\",\"area\",\"avail\",\"background\",\"border\",\"break\",\"breakpoint\",\"case\",\"certain\",\"chang\",\"class\",\"col\",\"column\",\"configur\",\"creat\",\"demo\",\"docs/components/#grid-respons\",\"each\",\"easier\",\"exampl\",\"fit\",\"further\",\"grai\",\"grid\",\"it'\",\"it'd\",\"landscap\",\"like\",\"look\",\"mixin\",\"nice\",\"note\",\"phone\",\"portrait\",\"pretti\",\"respons\",\"responsive-grid-break\",\"responsive-lg\",\"responsive-md\",\"responsive-sm\",\"right\",\"roughli\",\"row\",\"sass\",\"see\",\"simul\",\"small\",\"smaller\",\"stack\",\"structur\",\"tablet\",\"there'\",\"turn\",\"us\",\"variabl\",\"viewport\",\"want\"],\"49\":[\"class\",\"come\",\"design\",\"docs/components/#util\",\"each\",\"hand\",\"help\",\"ionic\",\"option\",\"quickli\",\"style\",\"util\"],\"50\":[\"_variables.scss\",\"ad\",\"addition\",\"app\",\"assert\",\"assign\",\"awai\",\"balanc\",\"blue\",\"build\",\"built\",\"calm\",\"choos\",\"clean\",\"color\",\"come\",\"convent\",\"css\",\"custom\",\"dark\",\"design\",\"dictat\",\"differ\",\"docs/components/#color\",\"each\",\"easier\",\"emot\",\"energ\",\"etc\",\"extend\",\"file\",\"flexibl\",\"gener\",\"goal\",\"help\",\"instead\",\"ionic\",\"ionic'\",\"ionic.css\",\"let'\",\"light\",\"maintain\",\"meant\",\"modifi\",\"more\",\"name\",\"notic\",\"on\",\"overrid\",\"overridden\",\"posit\",\"power\",\"prefer\",\"provid\",\"purpos\",\"realist\",\"recommend\",\"red\",\"repres\",\"requir\",\"royal\",\"rule\",\"sai\",\"sass\",\"set\",\"simpli\",\"stabl\",\"stai\",\"start\",\"swatch\",\"system\",\"task\",\"theme\",\"those\",\"top\",\"us\",\"util\",\"variabl\",\"within\",\"word\",\"you'll\"],\"51\":[\"500\",\"add\",\"button\",\"certainli\",\"child\",\"choos\",\"class\",\"classnam\",\"come\",\"doc\",\"docs/components/#icon\",\"easili\",\"feel\",\"font\",\"free\",\"homepag\",\"icon\",\"info\",\"ionic\",\"ionicon\",\"it'\",\"look\",\"lt;i&gt\",\"more\",\"note\",\"open-sourc\",\"over\",\"pack\",\"pleas\",\"possibl\",\"restrict\",\"set\",\"show\",\"simpli\",\"take\",\"up\",\"us\",\"wish\"],\"52\":[\"15px\",\"add\",\"app\",\"appli\",\"around\",\"between\",\"bleed\",\"blue\",\"both\",\"bottom\",\"box\",\"breath\",\"class\",\"compon\",\"content\",\"control\",\"default\",\"develop\",\"docs/components/#pad\",\"each\",\"easili\",\"edg\",\"element\",\"element'\",\"follow\",\"give\",\"grai\",\"help\",\"inner\",\"instanc\",\"ionic\",\"layout\",\"left\",\"mani\",\"margin\",\"mean\",\"outer\",\"pad\",\"padding-bottom\",\"padding-horizont\",\"padding-left\",\"padding-right\",\"padding-top\",\"padding-vert\",\"purpos\",\"repres\",\"requir\",\"reset\",\"reus\",\"right\",\"room\",\"screen\",\"set\",\"side\",\"squar\",\"start\",\"throughout\",\"top\",\"util\",\"zero\"],\"53\":[\"angularj\",\"anim\",\"class\",\"creat\",\"docs/components/#anim\",\"especi\",\"fade-in\",\"ionic\",\"nav-title-slide-ios7\",\"no-anim\",\"predefin\",\"revers\",\"sever\",\"slide-in-left\",\"slide-in-right\",\"slide-in-up\",\"slide-left-right\",\"slide-left-right-ios7\",\"slide-out-left\",\"slide-out-right\",\"slide-right-left\",\"slide-right-left-ios7\",\"us\"],\"54\":[\"0\",\"1\",\"5\",\"abov\",\"abstract\",\"activ\",\"activeproject.titl\",\"actual\",\"ad\",\"add\",\"again\",\"angular\",\"angular.fromjson(projectstr\",\"angular.module('todo\",\"angular.tojson(project\",\"angularj\",\"anim\",\"anoth\",\"anymor\",\"anyth\",\"anywher\",\"app\",\"app.j\",\"applic\",\"area\",\"automat\",\"awai\",\"bacon\",\"bar\",\"basic\",\"becom\",\"befor\",\"better\",\"bind\",\"bit\",\"bodi\",\"both\",\"break\",\"build\",\"button\",\"button-block\",\"button-clear\",\"button-posit\",\"button-positive\\\">cr\",\"call\",\"center\",\"certain\",\"chanc\",\"chapter\",\"class\",\"class=\\\"bar-secondari\",\"class=\\\"button\",\"class=\\\"item\",\"class=\\\"list\",\"class=\\\"mod\",\"class=\\\"pad\",\"class=\\\"title\\\">new\",\"click\",\"close\",\"code\",\"coin\",\"collect\",\"come\",\"commonli\",\"compon\",\"concept\",\"content\",\"control\",\"controller('todoctrl\",\"correspond\",\"creat\",\"createproject\",\"createproject(projecttitl\",\"createtask\",\"createtask(task\",\"current\",\"custom\",\"data\",\"defer\",\"defin\",\"detail\",\"differ\",\"direct\",\"directli\",\"displai\",\"div\",\"docs/guide/building.html\",\"doesn't\",\"don't\",\"drive\",\"each\",\"easier\",\"eat\",\"egghead.io\",\"enabl\",\"endraw\",\"enough\",\"enter\",\"ever-grow\",\"everyth\",\"exampl\",\"exist\",\"expand\",\"extens\",\"factori\",\"factory('project\",\"fear\",\"featur\",\"feel\",\"fetch\",\"few\",\"file\",\"find\",\"first\",\"flag\",\"follow\",\"form\",\"frisbi\",\"function\",\"function($scop\",\"function(index\",\"function(mod\",\"function(project\",\"function(projecttitl\",\"function(task\",\"getlastactiveindex\",\"give\",\"given\",\"go\",\"good\",\"grab\",\"great\",\"guid\",\"h1\",\"handl\",\"header\",\"here\",\"high\",\"hope\",\"html\",\"icon\",\"id=\\\"new-task.html\",\"identifi\",\"if(!$scope.activeproject\",\"if($scope.projects.length\",\"if(projectstr\",\"if(projecttitl\",\"import\",\"increas\",\"index\",\"ineffici\",\"inform\",\"initi\",\"input\",\"ion-cont\",\"ion-header-bar\",\"ion-item\",\"ion-side-menu\",\"ionic\",\"ionicmod\",\"ionicmodal.fromtemplateurl('new-task.html\",\"ionicsidemenudeleg\",\"ionicsidemenudelegate.toggleleft\",\"ionicsidemenudelegate.toggleleft(fals\",\"it'\",\"item\",\"item-input\",\"javascript\",\"javscript\",\"john\",\"jump\",\"keep\",\"know\",\"label\",\"larg\",\"last\",\"layout\",\"learn\",\"let\",\"let'\",\"level\",\"lindquist\",\"list\",\"littl\",\"load\",\"local\",\"localstorag\",\"look\",\"lot\",\"lower\",\"lower-level\",\"lt;ion-content&gt\",\"luckili\",\"main\",\"make\",\"markup\",\"matt\",\"menu\",\"mind\",\"mockup\",\"modal\",\"model\",\"more\",\"move\",\"much\",\"multi-project\",\"mushroom\",\"n00b\",\"name\",\"nativ\",\"need\",\"never\",\"new\",\"newproject\",\"ng-class\",\"ng-click=\\\"closenewtask()\\\">cancel</button\",\"ng-model=\\\"task.titl\",\"ng-repeat\",\"ng-submit=\\\"createtask(task\",\"now\",\"object\",\"okai\",\"on\",\"open\",\"order\",\"out\",\"page\",\"parseint(window.localstorage['lastactiveproject\",\"part\",\"pass\",\"pick\",\"place\",\"placeholder=\\\"what\",\"plu\",\"point\",\"polish\",\"power\",\"practic\",\"pretti\",\"previou\",\"princess\",\"project\",\"project.titl\",\"projects.al\",\"projects.newproject(projecttitl\",\"projects.save($scope.project\",\"projects.setlastactiveindex(index\",\"projectstr\",\"projecttitl\",\"prompt('project\",\"prompt('your\",\"properli\",\"properti\",\"provid\",\"publishing](publishing.html\",\"put\",\"raw\",\"real\",\"realli\",\"remot\",\"return\",\"right\",\"run\",\"same\",\"save\",\"scope\",\"scope.activeproject\",\"scope.activeproject.tasks.push\",\"scope.closenewtask\",\"scope.createtask\",\"scope.newproject\",\"scope.newtask\",\"scope.project\",\"scope.projects.length-1\",\"scope.projects.push(newproject\",\"scope.projects[projects.getlastactiveindex\",\"scope.selectproject\",\"scope.selectproject(newproject\",\"scope.task\",\"scope.taskmod\",\"scope.taskmodal.hid\",\"scope.taskmodal.show\",\"scope.tasks.push\",\"scope.toggleproject\",\"script\",\"see\",\"select\",\"separ\",\"servic\",\"set\",\"setlastactiveindex\",\"shell\",\"short\",\"show\",\"side\",\"simpl\",\"singl\",\"slide\",\"slide-in-up\",\"slip\",\"small\",\"someth\",\"specif\",\"start\",\"storag\",\"straight-to-th\",\"submit\",\"support\",\"sure\",\"tag\",\"take\",\"task\",\"task.titl\",\"task</button\",\"task</h1\",\"templat\",\"test\",\"text\",\"thing\",\"thinkster.io\",\"those\",\"timeout\",\"timeout(funct\",\"titl\",\"todo\",\"todoctrl\",\"toughest\",\"trigger\",\"try\",\"tutori\",\"type=\\\"submit\",\"type=\\\"text\",\"type=\\\"text/ng-templ\",\"ui\",\"uniqu\",\"up\",\"url\",\"us\",\"usabl\",\"util\",\"var\",\"veri\",\"version\",\"video\",\"wai\",\"we'v\",\"web\",\"while(tru\",\"window\",\"window.localstorage['lastactiveproject\",\"window.localstorage['project\",\"work\",\"write\",\"you'll\"],\"55\":[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"ad\",\"app\",\"book\",\"build\",\"chapter\",\"content\",\"creat\",\"depend\",\"deploi\",\"design\",\"devic\",\"docs/guid\",\"get\",\"instal\",\"ionic\",\"logic\",\"new\",\"offici\",\"out\",\"process\",\"project\",\"publish\",\"start\",\"store\",\"tabl\",\"test\",\"through\",\"ui\",\"variou\",\"walk\",\"welcom\"],\"56\":[\"10\",\"17\",\"2\",\"2.3\",\"3\",\"32-bit\",\"4.1\",\"5\",\"6\",\"64-bit\",\"abov\",\"ad\",\"add\",\"ahead\",\"alwai\",\"amount\",\"android\",\"android](http://cordova.apache.org/docs/en/3.4.0/guide_platforms_android_index.md.html#android%20platform%20guid\",\"android_hom\",\"anroid_sdk_dir]\\\\sdk\\\\tool\",\"ant\",\"anyth\",\"apach\",\"app\",\"app](starting.html\",\"apt-get\",\"assumpt\",\"avd\",\"bash\",\"befor\",\"behav\",\"best\",\"bin\",\"boot\",\"bottom\",\"bounc\",\"build\",\"bundl\",\"c\",\"c:\\\\apache-ant-1.9.2\\\\bin\",\"c:\\\\program\",\"call\",\"cd\",\"certain\",\"chang\",\"chapter\",\"check\",\"chose\",\"clear\",\"code\",\"come\",\"command\",\"commun\",\"compat\",\"comput\",\"config\",\"config.xml\",\"configur\",\"connect\",\"console2\",\"console2](http://sourceforge.net/projects/consol\",\"continu\",\"control\",\"conveni\",\"cordova\",\"cordova](http://cordova.apache.org\",\"cours\",\"creat\",\"current\",\"default\",\"depend\",\"deploi\",\"develop\",\"devic\",\"differ\",\"directli\",\"directori\",\"docs/guide/installation.html\",\"don't\",\"doubl\",\"download\",\"drop\",\"due\",\"effect\",\"emul\",\"enabl\",\"ensur\",\"entri\",\"environ\",\"error\",\"everyth\",\"exampl\",\"execut\",\"experi\",\"export\",\"extract\",\"fact\",\"few\",\"files\\\\java\\\\jdk7\",\"files\\\\java\\\\jdk7\\\\bin\",\"first\",\"folder\",\"follow\",\"g\",\"get\",\"git\",\"github](https://github.com/ionic-team/ion\",\"go\",\"guid\",\"gulp\",\"gulp](http://gulpjs.com\",\"happen\",\"hello\",\"help\",\"here\",\"ia32-lib\",\"improv\",\"inform\",\"instal\",\"instead\",\"io\",\"ionic\",\"ios](http://cordova.apache.org/docs/en/3.4.0/guide_platforms_ios_index.md.html#ios%20platform%20guid\",\"iphon\",\"it'\",\"java\",\"java_hom\",\"java_home=$(/usr/libexec/java_hom\",\"jdk\",\"jdk'\",\"jdk](http://www.oracle.com/technetwork/java/javase/downloads/jdk7-downloads-1880260.html\",\"jre\",\"leav\",\"let'\",\"librari\",\"line\",\"linux\",\"long\",\"look\",\"lot\",\"love\",\"luckili\",\"mac\",\"make\",\"memori\",\"minimum\",\"minut\",\"moment\",\"more\",\"move\",\"nativ\",\"necessari\",\"need\",\"new\",\"next\",\"node.js](http://nodejs.org\",\"normal\",\"note\",\"now\",\"npm\",\"on\",\"onc\",\"open\",\"oper\",\"option\",\"order\",\"os\",\"out\",\"packag\",\"path\",\"patient\",\"place\",\"plan\",\"platform\",\"platform-specif\",\"point\",\"possibl\",\"prefer\",\"previou\",\"process\",\"program\",\"project\",\"quick\",\"quickli\",\"readi\",\"recent\",\"recommend\",\"reduc\",\"releas\",\"remov\",\"requir\",\"restart\",\"right\",\"rm\",\"root\",\"run\",\"safe\",\"sdk\",\"see\",\"server\",\"set\",\"shell\",\"simpli\",\"slow\",\"somewher\",\"specif\",\"start\",\"structur\",\"substitut\",\"sudo\",\"support\",\"sure\",\"system\",\"tab\",\"take\",\"tell\",\"test\",\"those\",\"though\",\"through\",\"time\",\"tool\",\"tradit\",\"try\",\"turn\",\"ubuntu\",\"up\",\"updat\",\"us\",\"user\",\"util\",\"variabl\",\"variou\",\"version\",\"view\",\"virtual\",\"wai\",\"walk\",\"want\",\"web\",\"well\",\"whenev\",\"window\",\"windows](http://git-scm.com/download/win\",\"wish\",\"work\",\"wrapper\",\"www/css/style.css\",\"www/index.html\",\"www/j\",\"x\",\"xml\",\"you'd\",\"you'll\",\"you'v\",\"zip\"],\"57\":[\"1\",\"2\",\"3rd\",\"abov\",\"access\",\"advanc\",\"alreadi\",\"alwai\",\"android\",\"android'\",\"angular\",\"angularj\",\"anim\",\"app\",\"applic\",\"aren't\",\"around\",\"basic\",\"beauti\",\"becam\",\"befor\",\"believ\",\"benefit\",\"best\",\"bit\",\"bootstrap\",\"both\",\"broad\",\"browser\",\"browser-bas\",\"build\",\"built\",\"bulk\",\"capabl\",\"chapter\",\"chrome\",\"close\",\"code\",\"come\",\"commerci\",\"common\",\"commun\",\"compel\",\"compon\",\"comput\",\"concept\",\"contain\",\"continu\",\"cordova\",\"cordova/phonegap\",\"core\",\"creat\",\"creators](http://drifty.com\",\"css\",\"cultiv\",\"custom\",\"daunt\",\"design\",\"desktop\",\"dev\",\"develop\",\"didn't\",\"differ\",\"dig\",\"docs/guide/preface.html\",\"down\",\"eager\",\"eclips\",\"element\",\"enough\",\"essenti\",\"everyon\",\"everyth\",\"exactli\",\"exist\",\"expand\",\"experi\",\"fairli\",\"familiar\",\"feel\",\"felt\",\"find\",\"first\",\"fit\",\"focus\",\"foundat\",\"framework\",\"front-end\",\"function\",\"get\",\"give\",\"great\",\"guid\",\"handl\",\"have\",\"html\",\"html5\",\"hybrid\",\"instal\",\"installation](installation.html\",\"instead\",\"interact\",\"invest\",\"io\",\"ionic\",\"ios'\",\"it'\",\"itself\",\"javascript\",\"kind\",\"know\",\"lai\",\"layer\",\"layout\",\"licens\",\"link\",\"look\",\"lot\",\"low-level\",\"make\",\"mani\",\"mean\",\"meant\",\"mobil\",\"more\",\"nativ\",\"native-styl\",\"necessari\",\"need\",\"now\",\"offici\",\"on\",\"onc\",\"open\",\"opinion\",\"order\",\"other\",\"over\",\"overwhelmingli\",\"page\",\"parti\",\"past\",\"permiss\",\"phonegap\",\"platform\",\"plugin\",\"portion\",\"possibl\",\"power\",\"project\",\"proper\",\"purchas\",\"pure\",\"rang\",\"readi\",\"realli\",\"recent\",\"recommend\",\"respons\",\"rule\",\"run\",\"safari\",\"same\",\"sdk\",\"self-contain\",\"shell\",\"similar\",\"simpl\",\"slick\",\"small\",\"smartphon\",\"sourc\",\"specif\",\"speed\",\"spend\",\"spirit\",\"stack\",\"start\",\"still\",\"straightforward\",\"strong\",\"strongli\",\"structur\",\"support\",\"sure\",\"tablet\",\"talk\",\"target\",\"technic\",\"technolog\",\"term\",\"think\",\"those\",\"time\",\"todai\",\"tool\",\"tools](http://jquerymobile.com\",\"ui\",\"uiwebview\",\"underneath\",\"understand\",\"unlik\",\"us\",\"veri\",\"wai\",\"want\",\"web\",\"websit\",\"webview\",\"welcom\",\"without\",\"wrap\",\"wrapper\",\"written\",\"you'd\",\"you'v\"],\"58\":[\"10000\",\"2048\",\"25\",\"4\",\"99\",\"__note__\",\"accept\",\"account\",\"adjust\",\"ahead\",\"alia\",\"alias_nam\",\"align\",\"alreadi\",\"android\",\"android:debugg\",\"android:versioncod\",\"androidmanifest.xml\",\"answer\",\"apk\",\"app\",\"app](https://s3.amazonaws.com/ionicframework.com/guide/0.1.0/5-play.png\",\"apple'\",\"applic\",\"bash\",\"befor\",\"below\",\"binari\",\"build\",\"button\",\"call\",\"care\",\"chanc\",\"chang\",\"chapter\",\"click\",\"come\",\"command\",\"compar\",\"consol\",\"console](https://play.google.com/apps/publish\",\"cordova\",\"cost\",\"creat\",\"creator\",\"current\",\"debug\",\"deploi\",\"descript\",\"develop\",\"digestalg\",\"directori\",\"docs/guide/publishing.html\",\"document\",\"don't\",\"done\",\"drifty](http://drifty.com\",\"dure\",\"each\",\"edit\",\"enabl\",\"enjoi\",\"exampl\",\"fals\",\"few\",\"file\",\"fill\",\"final\",\"find\",\"first\",\"follow\",\"found\",\"free\",\"gener\",\"genkei\",\"go\",\"googl\",\"guid\",\"guide](installation.html\",\"hard\",\"helloworld-release-unsigned.apk\",\"helloworld.apk\",\"here\",\"includ\",\"increment\",\"inform\",\"instal\",\"instead\",\"ionic\",\"isn't\",\"it'\",\"jarsign\",\"jdk\",\"kei\",\"keyalg\",\"keysiz\",\"keystor\",\"keytool\",\"later\",\"let'\",\"line\",\"list\",\"littl\",\"live\",\"lose\",\"make\",\"mode\",\"more\",\"my-release-key.keystor\",\"need\",\"new\",\"nice\",\"now\",\"offici\",\"on\",\"onc\",\"optim\",\"order\",\"org.apache.cordova.consol\",\"out\",\"password\",\"patient\",\"period\",\"place\",\"plai\",\"platform\",\"platforms/android\",\"platforms/android/androidmanifest.xml\",\"platforms/android/bin\",\"platforms/android/bin/helloworld-release-unsigned.apk\",\"plugin\",\"prepar\",\"preview\",\"previou\",\"privat\",\"probabl\",\"product\",\"prompt\",\"publish\",\"push\",\"question\",\"readi\",\"refer\",\"releas\",\"remov\",\"rest\",\"rm\",\"rsa\",\"run\",\"safe\",\"save\",\"screenshot\",\"sha1\",\"sha1withrsa\",\"sigalg\",\"sign\",\"signing](http://developer.android.com/tools/publishing/app-signing.html\",\"skip\",\"small\",\"somewher\",\"start\",\"step\",\"store\",\"submit\",\"sure\",\"take\",\"target\",\"tell\",\"todo\",\"todo](https://s3.amazonaws.com/ionicframework.com/guide/0.1.0/5-play2.png\",\"tool\",\"tools'\",\"unfortun\",\"unsign\",\"updat\",\"upload\",\"us\",\"util\",\"v\",\"valid\",\"valu\",\"verbos\",\"visit\",\"wai\",\"want\",\"wild\",\"wish\",\"won't\",\"work\",\"world\",\"xml\",\"you'll\",\"zip\",\"zipalign\"],\"59\":[\"3\",\"4\",\"abov\",\"ad\",\"add\",\"ahead\",\"angular\",\"angular.module('todo\",\"angularj\",\"anyth\",\"app\",\"app](testing.html\",\"applic\",\"area\",\"attribut\",\"automat\",\"back\",\"basic\",\"befor\",\"below\",\"bit\",\"bodi\",\"both\",\"build\",\"bundl\",\"center\",\"chang\",\"chapter\",\"choic\",\"choos\",\"code\",\"come\",\"complet\",\"content\",\"control\",\"cordova\",\"cordova.j\",\"core\",\"creat\",\"css\",\"current\",\"custom\",\"defin\",\"design\",\"develop\",\"directori\",\"docs/guide/starting.html\",\"don't\",\"drag\",\"edit\",\"emul\",\"encourag\",\"everyth\",\"exampl\",\"exist\",\"expos\",\"extens\",\"feel\",\"few\",\"figur\",\"file\",\"first\",\"fix\",\"found\",\"framework\",\"free\",\"function\",\"go\",\"handl\",\"haven't\",\"header\",\"hidden\",\"html\",\"implement\",\"includ\",\"index.html\",\"infinit\",\"initi\",\"insid\",\"instal\",\"ion-side-menu\",\"ion-side-menu-cont\",\"ion-side-menus](https://ionicframework.com/docs/api/directive/ionsidemenu\",\"ionic\",\"ionic.bundle.j\",\"javascript\",\"js\",\"jump\",\"last\",\"layout\",\"left\",\"let\",\"let'\",\"lib/js/angular\",\"life\",\"list\",\"load\",\"locat\",\"look\",\"make\",\"markup\",\"menu\",\"mobil\",\"mockup\",\"modul\",\"more\",\"much\",\"need\",\"new\",\"ng-app\",\"nganim\",\"ngsanit\",\"note\",\"now\",\"on\",\"out\",\"over\",\"page\",\"passag\",\"phonegap.j\",\"pick\",\"place\",\"practic\",\"pretti\",\"previou\",\"process\",\"project\",\"put\",\"read\",\"readi\",\"real\",\"realli\",\"reason\",\"right\",\"rite\",\"run\",\"sake\",\"script\",\"see\",\"shell\",\"side\",\"side=\\\"left\",\"simpl\",\"src=\\\"cordova.j\",\"standard\",\"start\",\"still\",\"tab\",\"tag\",\"take\",\"task\",\"tell\",\"test\",\"through\",\"todo\",\"ton\",\"try\",\"turn\",\"two\",\"ui\",\"up\",\"updat\",\"us\",\"variou\",\"wai\",\"walk\",\"want\",\"we'v\",\"web\",\"won't\",\"wouldn't\",\"www/index.html\",\"www/js/app.j\",\"you'll\"],\"60\":[\"192.168.1.123:8000\",\"3.x\",\"4\",\"4.4\",\"5\",\"7\",\"8000\",\"99\",\"abov\",\"account\",\"actual\",\"add\",\"address\",\"advanc\",\"android\",\"app\",\"app](building.html\",\"appl\",\"applic\",\"bar\",\"bash\",\"behavior\",\"between\",\"blame\",\"both\",\"brows\",\"browser\",\"build\",\"butter\",\"cd\",\"center\",\"certif\",\"chang\",\"chapter\",\"check\",\"chrome\",\"code\",\"command\",\"complex\",\"comput\",\"conflict\",\"connect\",\"content\",\"cordova\",\"cost\",\"custom\",\"debug\",\"described](http://developer.android.com/tools/device.html\",\"desktop\",\"develop\",\"developer](https://developer.apple.com\",\"devic\",\"directli\",\"doc\",\"docs/guide/testing.html\",\"doesn't\",\"don't\",\"drag\",\"easi\",\"easier\",\"easiest\",\"eclips\",\"emul\",\"enabl\",\"event\",\"exampl\",\"experi\",\"expos\",\"faster\",\"file\",\"fine\",\"first\",\"folder\",\"four\",\"function\",\"furthest\",\"get\",\"go\",\"gut\",\"host\",\"http.server\",\"http://localhost:8000\",\"hybrid\",\"id\",\"info](http://developer.android.com/guide/webapps/debugging.html\",\"insid\",\"inspector\",\"io\",\"ionic\",\"ip\",\"ipad\",\"iphon\",\"issu\",\"it'\",\"know\",\"larg\",\"left\",\"let'\",\"level\",\"listen\",\"load\",\"local\",\"look\",\"lot\",\"m\",\"made\",\"make\",\"maverick\",\"meant\",\"menu\",\"method\",\"mobil\",\"more\",\"mous\",\"much\",\"nativ\",\"navig\",\"need\",\"network\",\"note\",\"now\",\"on\",\"onc\",\"open\",\"option\",\"os\",\"out\",\"overwrit\",\"per\",\"phone\",\"platform\",\"platform-specif\",\"platforms/io\",\"platforms/ios/www\",\"platforms/platform\",\"plug\",\"plugin\",\"prepar\",\"previou\",\"probabl\",\"problem\",\"process\",\"project\",\"python\",\"recommend\",\"remot\",\"requir\",\"right\",\"root\",\"rout\",\"run\",\"safari\",\"same\",\"scroll\",\"section\",\"see\",\"server\",\"set\",\"shell\",\"side\",\"sign\",\"simplehttpserv\",\"simpli\",\"simul\",\"site\",\"small\",\"smooth\",\"someth\",\"specif\",\"start\",\"still\",\"substitut\",\"support\",\"sure\",\"switch\",\"tab\",\"talk\",\"test\",\"thing\",\"three\",\"tini\",\"try\",\"unfortun\",\"unless\",\"up\",\"updat\",\"url\",\"us\",\"usb\",\"user\",\"veri\",\"version\",\"view\",\"wai\",\"want\",\"web\",\"webkit\",\"websit\",\"well\",\"work\",\"www\",\"x\",\"xcode\",\"year\",\"you'll\",\"you'v\"],\"61\":[\"angular\",\"angularj\",\"anim\",\"app\",\"aren't\",\"beyond\",\"big\",\"build\",\"capabl\",\"cordova/phonegap\",\"css\",\"current\",\"develop\",\"docs/overview/#overview\",\"end\",\"expand\",\"favorit\",\"feel\",\"fit\",\"focus\",\"framework\",\"framework'\",\"front\",\"full\",\"futur\",\"gestur\",\"goal\",\"good\",\"help\",\"html\",\"html5\",\"instead\",\"interact\",\"ionic\",\"javascript\",\"look\",\"mainli\",\"mean\",\"miss\",\"mobil\",\"nativ\",\"native-feel\",\"on\",\"order\",\"out\",\"overview\",\"part\",\"phonegap\",\"plugin\",\"portion\",\"potenti\",\"power\",\"project\",\"read\",\"recommend\",\"releas\",\"replac\",\"requir\",\"simpli\",\"simplifi\",\"still\",\"support\",\"technolog\",\"thing\",\"ui\",\"understand\",\"us\",\"we'd\",\"web\",\"welcom\",\"well\",\"work\",\"you'll\"],\"62\":[\"addition\",\"bleed\",\"clone\",\"docs/overview/#download\",\"download\",\"edg\",\"found\",\"github\",\"ionic\",\"latest\",\"offici\",\"previou\",\"releas\",\"site.latest_release_d\",\"site.latest_vers\",\"start\",\"v\",\"version\"],\"63\":[\"angularj\",\"app\",\"build\",\"clone\",\"command\",\"cordova\",\"creat\",\"do\",\"docs/overview/#start\",\"endhighlight\",\"everyth\",\"function\",\"g\",\"give\",\"instal\",\"ionic\",\"itself\",\"line\",\"myproject\",\"need\",\"node.j\",\"now\",\"npm\",\"out\",\"project\",\"quickli\",\"right\",\"seed\",\"start\",\"sudo\",\"tool\",\"us\",\"util\",\"work\"],\"64\":[\"along\",\"app\",\"come\",\"compil\",\"css\",\"docs/overview/#whats-includ\",\"extens\",\"file\",\"framework\",\"great\",\"icon\",\"includ\",\"ionic\",\"javascript\",\"js\",\"option\",\"pack\",\"sass\",\"what'\"],\"65\":[\"add\",\"alwai\",\"built\",\"core\",\"css\",\"css/sass\",\"custom\",\"default\",\"design\",\"develop\",\"docs/overview/#css-sass\",\"easili\",\"enhanc\",\"even\",\"extend\",\"feel\",\"flexibl\",\"includ\",\"io\",\"ionic\",\"left\",\"look\",\"mixin\",\"more\",\"overrid\",\"power\",\"properti\",\"sass\",\"similar\",\"simplic\",\"stand\",\"state\",\"variabl\",\"we’v\",\"written\"],\"66\":[\"3.4.0\",\"add\",\"app\",\"aren't\",\"cordova\",\"css\",\"docs/overview/#phonegap\",\"exampl\",\"file\",\"ionic\",\"js\",\"phonegap\",\"phonegap/cordova/trigger.io\",\"plugin\",\"project\",\"refer\",\"root\",\"ship\",\"test\",\"trigger.io\",\"version\",\"web\",\"work\"],\"67\":[\"2.3\",\"4\",\"6\",\"android\",\"api\",\"app\",\"avail\",\"browser\",\"build\",\"docs/overview/#browser-support\",\"firefoxo\",\"focus\",\"given\",\"io\",\"ionic\",\"mean\",\"mobil\",\"nativ\",\"native/hybrid\",\"phone\",\"platform\",\"roadmap\",\"site.latest_vers\",\"such\",\"support\",\"tend\",\"uiwebview\",\"view\",\"web\",\"websit\",\"whatev\",\"window\"],\"68\":[\"2\",\"apach\",\"commerci\",\"content\",\"docs/overview/#licens\",\"found\",\"framework\",\"free\",\"here\",\"ionic\",\"ionic-sit\",\"jqueri\",\"licens\",\"mean\",\"mit\",\"open\",\"permiss\",\"person\",\"popular\",\"project\",\"rail\",\"releas\",\"repo\",\"rubi\",\"same\",\"sourc\",\"such\",\"under\",\"us\",\"websit\"],\"69\":[\"check\",\"code\",\"contribut\",\"contributor\",\"develop\",\"docs/overview/#contribut\",\"document\",\"framework'\",\"guid\",\"help\",\"improv\",\"inform\",\"ionic\",\"it'\",\"love\",\"more\",\"out\",\"touch\",\"up\",\"we'd\",\"whether\"],\"70\":[\"adamdbradlei\",\"amaz\",\"app\",\"arriv\",\"benjsperri\",\"best\",\"bootstrap\",\"build\",\"built\",\"codiqa\",\"compani\",\"creat\",\"develop\",\"docs/overview/#about\",\"drifti\",\"enough\",\"fine\",\"framework\",\"futur\",\"great\",\"html5\",\"html5'\",\"independ\",\"ionic\",\"jetstrap\",\"look\",\"maker\",\"maxlynch\",\"mobil\",\"power\",\"product\",\"prove\",\"softwar\",\"such\",\"take\",\"time\",\"want\",\"work\"],\"71\":[\"39;slide-in-up&#39\",\"amp\",\"anim\",\"argument\",\"autofocu\",\"avoid\",\"backdrop\",\"boolean\",\"boolean=}backdropclicktoclos\",\"broadcast\",\"call\",\"child\",\"clean\",\"click\",\"close\",\"control\",\"creat\",\"current\",\"default\",\"detail\",\"doc\",\"docs/api/controller/ionicmod\",\"dom\",\"done\",\"each\",\"event\",\"fals\",\"finish\",\"first\",\"focusfirstinput\",\"follow\",\"hide\",\"hint\",\"improv\",\"initialize(opt\",\"input\",\"instanc\",\"instanti\",\"ionicmod\",\"isshown\",\"itself\",\"leak\",\"memori\",\"method\",\"modal\",\"modal.hidden\",\"modal.shown\",\"new\",\"note\",\"object\",\"option\",\"origin\",\"out\",\"param\",\"pass\",\"promis\",\"properti\",\"remov\",\"remove()](#remov\",\"resolv\",\"return\",\"rootscop\",\"scope\",\"servic\",\"show\",\"shown\",\"string\",\"sure\",\"true\",\"type\",\"up\",\"whether\"],\"72\":[\"0\",\"1\",\"1,000\",\"1000\",\"10px\",\"2\",\"3\",\"3-wide\",\"33\",\"4\",\"5\",\"50\",\"6\",\"60\",\"7\",\"absolut\",\"add\",\"addition\",\"album\",\"allow\",\"amount\",\"api\",\"appli\",\"arrai\",\"artist.album\",\"assign\",\"associ\",\"attr\",\"attribut\",\"basic\",\"befor\",\"below\",\"built\",\"case\",\"caus\",\"collect\",\"collection-item-height\",\"collection-item-width\",\"collection-repeat\",\"come\",\"compil\",\"complic\",\"conjunct\",\"consid\",\"contain\",\"content\",\"content'\",\"contentctrl($scop\",\"correspond\",\"css\",\"current\",\"data\",\"databas\",\"defin\",\"demo\",\"detail\",\"direct\",\"displai\",\"distinct\",\"doc\",\"docs/api/directive/collectionrepeat\",\"dom\",\"down\",\"each\",\"element\",\"enumer\",\"equival\",\"error\",\"evenli\",\"exampl\",\"experi\",\"explicitli\",\"express\",\"few\",\"filter\",\"filter:searchtext\",\"fit\",\"format\",\"full\",\"function\",\"function(item\",\"galleri\",\"give\",\"grid\",\"hashkei\",\"height\",\"here\",\"html\",\"id\",\"id(item\",\"id(item)&#39\",\"ident\",\"imag\",\"impli\",\"improv\",\"incorrectli\",\"index\",\"indic\",\"insid\",\"ion-content/ion-scrol\",\"ionscrol\",\"item\",\"item.id\",\"jerki\",\"js\",\"keep\",\"kei\",\"lazili\",\"left\",\"less\",\"likelihood\",\"list\",\"littl\",\"long\",\"loop\",\"make\",\"map\",\"match\",\"matter\",\"mean\",\"mind\",\"more\",\"move\",\"multipl\",\"my-image-item\",\"my-item\",\"ng-hide\",\"ng-show\",\"ng-style\",\"none\",\"notic\",\"number\",\"object\",\"on\",\"on-demand\",\"onto\",\"option\",\"page\",\"parent\",\"pattern\",\"penalti\",\"per\",\"percentag\",\"perform\",\"pixel\",\"posit\",\"possibl\",\"properti\",\"provid\",\"put\",\"read\",\"recommend\",\"render\",\"repeat\",\"resolv\",\"resultingli\",\"return\",\"right\",\"row\",\"rule\",\"sake\",\"same\",\"scope\",\"scope.getitemheight\",\"scope.item\",\"scope.items.push('item\",\"screen\",\"scroll\",\"scrollview\",\"scrollview'\",\"see\",\"set\",\"simpl\",\"singl\",\"size\",\"slow\",\"space\",\"specifi\",\"stretch\",\"style\",\"suppli\",\"support\",\"sure\",\"take\",\"taller\",\"tell\",\"ten\",\"thing\",\"think\",\"thousand\",\"three\",\"track\",\"tracking_express\",\"two\",\"type\",\"typic\",\"un-hidden\",\"uniqu\",\"up\",\"us\",\"usag\",\"user\",\"user'\",\"var\",\"variabl\",\"visibl\",\"wai\",\"width\",\"wish\",\"within\",\"work\"],\"73\":[\"angularj\",\"behav\",\"checkbox\",\"checkbox](http://docs.angularjs.org/api/ng/input/input[checkbox\",\"differ\",\"doc\",\"docs/api/directive/ioncheckbox\",\"except\",\"html\",\"improv\",\"input\",\"ion-checkbox\",\"it'\",\"label\",\"style\",\"usag\"],\"74\":[\"39;x&#39\",\"39;xy&#39\",\"39;y&#39\",\"action\",\"add\",\"allow\",\"android\",\"api\",\"area\",\"attr\",\"awar\",\"between\",\"boolean\",\"bounc\",\"browser\",\"browser'\",\"built\",\"case\",\"child\",\"complet\",\"configur\",\"content\",\"custom\",\"default\",\"deleg\",\"delegate-handl\",\"detail\",\"direct\",\"doc\",\"docs/api/directive/ioncont\",\"easi\",\"edg\",\"evalu\",\"express\",\"fals\",\"featur\",\"get\",\"handl\",\"has-bounc\",\"horizont\",\"html\",\"https://docs.angularjs.org/guide/scope](https://docs.angularjs.org/guide/scop\",\"identifi\",\"implement\",\"import\",\"improv\",\"infinit\",\"instead\",\"io\",\"ion-cont\",\"ioncont\",\"ionic\",\"ionic'\",\"ionicscrolldeleg\",\"ioninfinitescrol\",\"ionrefresh\",\"made\",\"nativ\",\"on-scrol\",\"on-scroll-complet\",\"option\",\"overflow\",\"overflow-scrol\",\"pad\",\"past\",\"perform\",\"provid\",\"pull-to-refresh\",\"read\",\"reason\",\"recommend\",\"scope\",\"scroll\",\"scrollbar\",\"scrollbar-i\",\"scrollbar-x\",\"scrollview\",\"show\",\"sometim\",\"string\",\"suffic\",\"toggl\",\"true\",\"type\",\"understand\",\"us\",\"usag\",\"vertic\",\"view\",\"wai\",\"we'v\",\"whether\"],\"75\":[\"child\",\"delet\",\"doc\",\"docs/api/directive/iondeletebutton\",\"hello\",\"html\",\"improv\",\"ion-delete-button\",\"ionitem\",\"item\",\"list\",\"show\",\"usag\"],\"76\":[\"39;center&#39\",\"39;left&#39\",\"39;right&#39\",\"add\",\"align\",\"align-titl\",\"api\",\"appli\",\"attr\",\"avaialbl\",\"bar\",\"bar-subfoot\",\"below\",\"button\",\"class\",\"combin\",\"content\",\"correctli\",\"css\",\"default\",\"detail\",\"doc\",\"docs/api/directive/ionfooterbar\",\"docs](/docs/v3/components/#foot\",\"fix\",\"footer\",\"higher\",\"html\",\"improv\",\"ion-footer-bar\",\"ionfooterbar\",\"left\",\"ng-if\",\"note\",\"option\",\"right\",\"see\",\"soon\",\"string\",\"subfoot\",\"surround\",\"titl\",\"type\",\"up\",\"us\",\"usag\"],\"77\":[\"39;center&#39\",\"39;left&#39\",\"39;right&#39\",\"abov\",\"add\",\"align\",\"align-titl\",\"api\",\"appli\",\"attr\",\"avaialbl\",\"bar\",\"bar-subhead\",\"button\",\"class\",\"combin\",\"content\",\"correctli\",\"css\",\"default\",\"detail\",\"doc\",\"docs/api/directive/ionheaderbar\",\"docs](/docs/v3/components/#subhead\",\"down\",\"fix\",\"header\",\"html\",\"improv\",\"ion-header-bar\",\"ionheaderbar\",\"left\",\"lower\",\"ng-if\",\"note\",\"option\",\"right\",\"see\",\"soon\",\"string\",\"subhead\",\"surround\",\"titl\",\"type\",\"us\",\"usag\"],\"78\":[\"1\",\"39;ion-loading-d&#39\",\"allow\",\"angular'\",\"api\",\"attr\",\"awai\",\"bottom\",\"call\",\"child\",\"content\",\"data\",\"default\",\"detail\",\"direct\",\"distanc\",\"doc\",\"docs/api/directive/ioninfinitescrol\",\"easi\",\"express\",\"function\",\"get\",\"greater\",\"html\",\"http\",\"http.get('/more-items').success(function(item\",\"icon\",\"improv\",\"infinit\",\"ion-infinite-scrol\",\"ioncont\",\"ioninfinitescrol\",\"ionscrol\",\"js\",\"load\",\"more\",\"mycontroller($scop\",\"near\",\"ng-if\",\"on-infinit\",\"onc\",\"option\",\"page\",\"pass\",\"reach\",\"scope.$broadcast('scroll.infinitescrollcomplet\",\"scope.$on('statechangesuccess\",\"scope.item\",\"scope.loadmor\",\"scroll\",\"scroller\",\"show\",\"stop\",\"string\",\"trigger\",\"type\",\"us\",\"usag\",\"useitems(item\",\"user\",\"wai\",\"whenev\"],\"79\":[\"child\",\"doc\",\"docs/api/directive/ionitem\",\"hello\",\"html\",\"improv\",\"ion-item\",\"ionlist\",\"usag\"],\"80\":[\"advanc\",\"allow\",\"api\",\"app\",\"attr\",\"basic\",\"boolean\",\"both\",\"button\",\"can-swip\",\"class\",\"contain\",\"content\",\"css\",\"current\",\"default\",\"deleg\",\"delegate-handl\",\"delet\",\"detail\",\"direct\",\"doc\",\"docs/api/directive/ionlist\",\"documentation`](/docs/v3/components/#list\",\"drag\",\"each\",\"easi\",\"edit\",\"element\",\"handl\",\"hidden\",\"html\",\"icon\",\"identifi\",\"improv\",\"includ\",\"interact\",\"interfac\",\"ion-list\",\"iondeletebutton\",\"ioniclistdeleg\",\"ionitem\",\"ionlist\",\"ionoptionbutton\",\"ionreorderbutton\",\"item\",\"item.descript\",\"item.titl\",\"list\",\"make\",\"mobil\",\"mode\",\"option\",\"rang\",\"relat\",\"remov\",\"reorder\",\"requir\",\"reveal\",\"share\",\"show-delet\",\"show-reord\",\"shown\",\"string\",\"such\",\"support\",\"swipe\",\"text\",\"themselv\",\"thumbnail\",\"toggl\",\"true\",\"type\",\"us\",\"usag\",\"variou\",\"wai\",\"whether\",\"wide\"],\"81\":[\"action\",\"advanc\",\"again\",\"back\",\"behavior\",\"below\",\"button\",\"child\",\"click\",\"creat\",\"current\",\"custom\",\"default\",\"displai\",\"doc\",\"docs/api/directive/ionnavbackbutton\",\"exampl\",\"function\",\"go\",\"html\",\"improv\",\"insid\",\"ion-nav-back-button\",\"ionicnavbardeleg\",\"ionicnavbardelegate.back\",\"ionicnavbardelegate.getprevioustitl\",\"ionnavbar\",\"js\",\"more\",\"myctrl($scop\",\"navig\",\"previou\",\"return\",\"scope.getprevioustitl\",\"scope.goback\",\"see\",\"show\",\"stack\",\"titl\",\"up\",\"us\",\"usag\",\"user\",\"wish\"],\"82\":[\"39;center&#39\",\"39;left&#39\",\"39;right&#39\",\"add\",\"align\",\"align-titl\",\"allow\",\"altern\",\"anim\",\"api\",\"applic\",\"around\",\"assign\",\"attr\",\"avail\",\"back\",\"bar\",\"button\",\"chang\",\"class=&quot;bar-positive&quot;&gt\",\"class=&quot;button\",\"class=&quot;button&quot;&gt\",\"class](/docs/v3/components#anim\",\"content\",\"correctli\",\"creat\",\"current\",\"default\",\"deleg\",\"delegate-handl\",\"depend\",\"detail\",\"direct\",\"doc\",\"docs/api/directive/ionnavbar\",\"each\",\"element\",\"enabl\",\"except\",\"handl\",\"header\",\"hello\",\"html\",\"identifi\",\"improv\",\"individu\",\"insid\",\"ion-nav-bar\",\"ion-view\",\"ionicnavbardeleg\",\"ionnavbackbutton\",\"ionnavbutton\",\"ionnavview\",\"ionview\",\"itself\",\"lt;/button&gt\",\"lt;/div&gt\",\"lt;/ion-nav-back-button&gt\",\"lt;/ion-nav-bar&gt\",\"lt;/ion-view&gt\",\"lt;button\",\"lt;div\",\"lt;ion-nav-back-button&gt\",\"lt;ion-nav-bar\",\"lt;ion-nav-buttons&gt\",\"lt;ion-view\",\"nav\",\"nav-title-slide-ios7\",\"navbar\",\"note\",\"option\",\"power\",\"put\",\"recommend\",\"right\",\"right-buttons&quot;&gt\",\"similar\",\"simpli\",\"state\",\"string\",\"titl\",\"title=&quot;mytitle&quot;&gt\",\"topbar\",\"transit\",\"type\",\"updat\",\"us\",\"usag\",\"view\",\"view&#39;\",\"visibl\",\"whole\",\"work\"],\"83\":[\"39;left&#39\",\"39;right&#39\",\"api\",\"attr\",\"avail\",\"button\",\"child\",\"content\",\"correspond\",\"declar\",\"destroi\",\"detail\",\"doc\",\"docs/api/directive/ionnavbutton\",\"here\",\"html\",\"i'm\",\"improv\",\"ion-nav-button\",\"ionnavbar\",\"ionnavbutton\",\"ionnavview\",\"ionview\",\"leav\",\"left\",\"navbar\",\"navbar'\",\"onto\",\"parent\",\"place\",\"set\",\"side\",\"string\",\"super\",\"type\",\"us\",\"usag\",\"user\",\"view\",\"within\"],\"84\":[\"abil\",\"addit\",\"addition\",\"allow\",\"amongst\",\"angular\",\"angular'\",\"angular-ui-rout\",\"angular.module('myapp\",\"angularui\",\"anim\",\"api\",\"app\",\"app.config(function($stateprovid\",\"applic\",\"attr\",\"attribut\",\"bar\",\"below\",\"benefit\",\"between\",\"bound\",\"cach\",\"class](/docs/v3/components#anim\",\"contain\",\"content\",\"control\",\"core\",\"correctli\",\"creat\",\"data\",\"defin\",\"detail\",\"differ\",\"direct\",\"directli\",\"displai\",\"doc\",\"docs/api/directive/ionnavview\",\"docs](https://github.com/angular-ui/ui-router/wiki\",\"document\",\"each\",\"exampl\",\"explain\",\"fast\",\"fetch\",\"file\",\"flexibl\",\"given\",\"good\",\"great\",\"gui\",\"have\",\"header\",\"help\",\"here\",\"histori\",\"home.html\",\"href=\\\"#/music\\\">go\",\"html\",\"improv\",\"index\",\"info\",\"inform\",\"instead\",\"interfac\",\"ion-cont\",\"ion-nav-view\",\"ion-view\",\"ionic\",\"ionic'\",\"ionnavbar\",\"ionnavview\",\"js\",\"keep\",\"know\",\"left\",\"level\",\"live\",\"load\",\"look\",\"manag\",\"map\",\"markup\",\"match\",\"modul\",\"more\",\"much\",\"multipl\",\"music\",\"music.html\",\"name\",\"navbar\",\"navig\",\"navview'\",\"need\",\"nest\",\"network\",\"next\",\"ng-controller=\\\"homectrl\",\"on\",\"option\",\"organ\",\"page\",\"page!</a\",\"parallel\",\"part\",\"pleas\",\"power\",\"programat\",\"provid\",\"push\",\"put\",\"recommend\",\"rememb\",\"render\",\"replac\",\"requir\",\"right\",\"rout\",\"router\",\"router'\",\"same\",\"script\",\"see\",\"servic\",\"setup\",\"shown\",\"simpl\",\"slide\",\"slide-in-up\",\"slide-left-right\",\"slide-left-right-ios7\",\"stack\",\"start\",\"state\",\"state('index\",\"state('mus\",\"stateprovid\",\"string\",\"syntax\",\"system\",\"templat\",\"templateurl\",\"through\",\"throughout\",\"titl\",\"title=\\\"'hom\",\"top\",\"track\",\"transit\",\"try\",\"type\",\"type=\\\"text/ng-templ\",\"ui-router&#39;\",\"ui-view\",\"uniqu\",\"updat\",\"url\",\"us\",\"usag\",\"user\",\"usual\",\"var\",\"variou\",\"veri\",\"video\",\"view\",\"visit\",\"wai\",\"work\"],\"85\":[\"child\",\"doc\",\"docs/api/directive/ionoptionbutton\",\"edit\",\"html\",\"improv\",\"ion-option-button\",\"ionitem\",\"kitten\",\"love\",\"share\",\"usag\"],\"86\":[\"add\",\"class\",\"contain\",\"content\",\"doc\",\"docs/api/directive/ionpan\",\"effect\",\"element\",\"fit\",\"html\",\"improv\",\"ion-pan\",\"pane\",\"side\",\"simpl\",\"usag\"],\"87\":[\"angularj\",\"b\",\"behav\",\"c\",\"choos\",\"differ\",\"direct\",\"doc\",\"docs/api/directive/ionradio\",\"except\",\"html\",\"improv\",\"input\",\"ion-radio\",\"it'\",\"radio\",\"radio](http://docs.angularjs.org/api/ng/input/input[radio\",\"style\",\"usag\"],\"88\":[\"1,2,3\",\"39;ion-arrow-down-c&#39\",\"add\",\"allow\",\"angular.module('testapp\",\"api\",\"attr\",\"broadcast\",\"call\",\"child\",\"complet\",\"control\",\"controller('mycontrol\",\"default\",\"detail\",\"displai\",\"doc\",\"docs/api/directive/ionrefresh\",\"down\",\"element\",\"enough\",\"event\",\"express\",\"finally(funct\",\"first\",\"function\",\"function($scop\",\"go\",\"html\",\"http\",\"http.get('/new-item\",\"icon\",\"improv\",\"ion-refresh\",\"ioncont\",\"ionic\",\"ionscrol\",\"js\",\"let\",\"newitem\",\"on-pul\",\"on-refresh\",\"option\",\"place\",\"pull\",\"pull-to-refresh\",\"pulling-icon\",\"pulling-text\",\"refresh\",\"refreshing-icon\",\"refreshing-text\",\"scope.$broadcast('scroll.refreshcomplet\",\"scope.dorefresh\",\"scope.item\",\"scroll.refreshcomplet\",\"scrollview\",\"spin\",\"start\",\"stop\",\"string\",\"success(function(newitem\",\"text\",\"type\",\"usag\",\"user\"],\"89\":[\"0\",\"1\",\"2\",\"3\",\"4\",\"api\",\"arrai\",\"attr\",\"call\",\"child\",\"detail\",\"doc\",\"docs/api/directive/ionreorderbutton\",\"express\",\"fromindex\",\"function\",\"function(item\",\"given\",\"html\",\"improv\",\"index\",\"ion-reorder-button\",\"ionitem\",\"item\",\"js\",\"move\",\"myctrl($scop\",\"on-reord\",\"option\",\"paramet\",\"reorder\",\"scope.item\",\"scope.items.splice(fromindex\",\"scope.items.splice(toindex\",\"scope.moveitem\",\"toindex\",\"type\",\"usag\"],\"90\":[\"0.5\",\"3\",\"39;x&#39\",\"39;xy&#39\",\"39;y&#39\",\"allow\",\"amount\",\"api\",\"attr\",\"boolean\",\"call\",\"contain\",\"content\",\"creat\",\"default\",\"deleg\",\"delegate-handl\",\"detail\",\"direct\",\"doc\",\"docs/api/directive/ionscrol\",\"express\",\"handl\",\"horizont\",\"html\",\"identifi\",\"improv\",\"insid\",\"integ\",\"ion-scrol\",\"ionicscrolldeleg\",\"ionrefresh\",\"largest\",\"max-zoom\",\"min-zoom\",\"on-refresh\",\"on-scrol\",\"option\",\"page\",\"pinch-to-zoom\",\"pull-to-refresh\",\"scroll\",\"scrollabl\",\"scrollbar\",\"scrollbar-i\",\"scrollbar-x\",\"scrollview\",\"show\",\"smallest\",\"string\",\"support\",\"trigger\",\"true\",\"type\",\"us\",\"usag\",\"user\",\"vertic\",\"wai\",\"whenev\",\"whether\",\"zoom\"],\"91\":[\"275\",\"39;left&#39\",\"39;right&#39\",\"allow\",\"api\",\"attr\",\"boolean\",\"child\",\"complet\",\"contain\",\"current\",\"default\",\"detail\",\"direct\",\"doc\",\"docs/api/directive/ionsidemenu\",\"document\",\"enabl\",\"exampl\",\"html\",\"improv\",\"ion-side-menu\",\"ionsidemenu\",\"ionsidemenucont\",\"is-en\",\"mani\",\"menu\",\"number\",\"option\",\"pixel\",\"see\",\"sibl\",\"side\",\"string\",\"type\",\"usag\",\"valu\",\"whether\",\"wide\",\"width\"],\"92\":[\"api\",\"attr\",\"boolean\",\"child\",\"complet\",\"contain\",\"content\",\"default\",\"detail\",\"direct\",\"doc\",\"docs/api/directive/ionsidemenucont\",\"document\",\"drag\",\"drag-cont\",\"exampl\",\"html\",\"improv\",\"ion-side-menu-cont\",\"ionsidemenu\",\"main\",\"menu\",\"more\",\"on\",\"option\",\"see\",\"sibl\",\"side\",\"true\",\"type\",\"usag\",\"visibl\",\"whether\"],\"93\":[\"add\",\"allow\",\"and/or\",\"api\",\"area\",\"attr\",\"center\",\"check\",\"contain\",\"content\",\"contentcontroller($scop\",\"deleg\",\"delegate-handl\",\"detail\",\"direct\",\"doc\",\"docs/api/directive/ionsidemenu\",\"documen\",\"drag\",\"element\",\"function\",\"handl\",\"html\",\"identifi\",\"improv\",\"inform\",\"ion-side-menu\",\"ion-side-menu-cont\",\"ionicsidemenudeleg\",\"ionicsidemenudelegate.toggleleft\",\"ionsidemenu\",\"ionsidemenucont\",\"js\",\"left\",\"main\",\"menu\",\"menu(\",\"menu](https://s3.amazonaws.com/ionicframework.com/docs/controllers/sidemenu.gif\",\"more\",\"on\",\"option\",\"out\",\"parent\",\"right\",\"scope.toggleleft\",\"side\",\"string\",\"toggl\",\"type\",\"us\",\"usag\"],\"94\":[\"39;$index&#39\",\"39;index&#39\",\"4000\",\"active-slid\",\"api\",\"attr\",\"automat\",\"between\",\"bind\",\"blue\",\"boolean\",\"box\",\"call\",\"chang\",\"click\",\"contain\",\"current\",\"default\",\"deleg\",\"delegate-handl\",\"detail\",\"doc\",\"docs/api/directive/ionslidebox\",\"does-continu\",\"drag\",\"each\",\"express\",\"handl\",\"html\",\"identifi\",\"improv\",\"ion-slide-box\",\"ionicslideboxdeleg\",\"mani\",\"millisecond\",\"model\",\"multi-pag\",\"number\",\"on-slide-chang\",\"option\",\"page\",\"pager\",\"pager-click\",\"pass\",\"pink\",\"show-pag\",\"shown\",\"slide\",\"slide-interv\",\"slidebox\",\"slidebox](https://s3.amazonaws.com/ionicframework.com/docs/controllers/slidebox.gif\",\"string\",\"swipe\",\"true\",\"type\",\"us\",\"usag\",\"variabl\",\"wait\",\"whenev\",\"whether\",\"yellow\"],\"95\":[\"api\",\"attr\",\"badg\",\"badge-styl\",\"bar\",\"becom\",\"call\",\"child\",\"click\",\"complet\",\"contain\",\"content\",\"default\",\"deselect\",\"detail\",\"doc\",\"docs/api/directive/iontab\",\"document\",\"each\",\"eg\",\"exampl\",\"exist\",\"explicitli\",\"express\",\"given\",\"histori\",\"href\",\"html\",\"icon\",\"icon-off\",\"icon-on\",\"improv\",\"ion-tab\",\"ionictabsdelegate.select\",\"iontab\",\"link\",\"navig\",\"ng-click\",\"ngclick\",\"number\",\"on-deselect\",\"on-select\",\"option\",\"put\",\"see\",\"select\",\"set\",\"string\",\"style\",\"switch\",\"tab\",\"tab'\",\"tabs-posit\",\"tap\",\"titl\",\"type\",\"us\",\"usag\",\"usual\",\"view\",\"work\"],\"96\":[\"anim\",\"api\",\"assign\",\"attr\",\"bar\",\"bug\",\"caus\",\"certain\",\"class](/docs/v3/components#anim\",\"class](/docs/v3/components#tab\",\"css\",\"defin\",\"deleg\",\"delegate-handl\",\"detail\",\"directive'\",\"doc\",\"docs/api/directive/iontab\",\"document\",\"element\",\"feel\",\"handl\",\"html\",\"identifi\",\"improv\",\"individu\",\"insid\",\"interfac\",\"ion-cont\",\"ion-tab\",\"ionictabsdeleg\",\"iontab\",\"known\",\"look\",\"more\",\"multi-tab\",\"note\",\"option\",\"page\",\"place\",\"power\",\"see\",\"set\",\"string\",\"tab\",\"through\",\"type\",\"us\",\"usag\"],\"97\":[\"airplan\",\"airplanemod\",\"allow\",\"angularj\",\"anim\",\"api\",\"assign\",\"attr\",\"behav\",\"below\",\"bind\",\"boolean\",\"checkbox](http://docs.angularjs.org/api/ng/input/input[checkbox\",\"class\",\"creat\",\"css\",\"detail\",\"direct\",\"doc\",\"docs/api/directive/iontoggl\",\"drag\",\"element\",\"exampl\",\"given\",\"html\",\"improv\",\"inner\",\"ion-toggl\",\"label.toggl\",\"mode\",\"model\",\"nub\",\"option\",\"otherwis\",\"set\",\"string\",\"switch\",\"switch'\",\"toggl\",\"toggle-calm\",\"toggle-class\",\"type\",\"up\",\"usag\",\"wire\"],\"98\":[\"api\",\"attr\",\"back\",\"below\",\"boolean\",\"button\",\"child\",\"contain\",\"content\",\"current\",\"default\",\"detail\",\"displai\",\"doc\",\"docs/api/directive/ionview\",\"exampl\",\"hello\",\"hide\",\"hide-back-button\",\"hide-nav-bar\",\"html\",\"improv\",\"ion-view\",\"ionnavbar\",\"ionnavview\",\"load\",\"navbar\",\"option\",\"page\",\"parent\",\"string\",\"tell\",\"titl\",\"type\",\"us\",\"usag\",\"view\",\"whether\"],\"99\":[\"abov\",\"android\",\"api/directive/ionfooterbar\",\"attribut\",\"behavior\",\"caus\",\"config.xml\",\"cordova.plugins.keyboard.disablescroll(tru\",\"current\",\"default\",\"direct\",\"doc\",\"docs/api/directive/keyboardattach\",\"element\",\"file\",\"float\",\"footer\",\"fullscreen\",\"html\",\"i.\",\"improv\",\"input\",\"io\",\"ion-footer-bar\",\"ionic\",\"keyboard\",\"keyboard-attach\",\"mode\",\"name=\\\"fullscreen\",\"need\",\"note\",\"page.versionhref\",\"plugin](https://github.com/ionic-team/ionic-plugins-keyboard\",\"prefer\",\"requir\",\"set\",\"show\",\"support\",\"titl\",\"unnecessari\",\"usag\",\"value=\\\"tru\"],\"100\":[\"automat\",\"below\",\"close\",\"current\",\"doc\",\"docs/api/directive/menuclos\",\"exampl\",\"home\",\"html\",\"improv\",\"link\",\"menu\",\"menu-clos\",\"open\",\"side\",\"tap\",\"usag\",\"within\"],\"101\":[\"automat\",\"bar\",\"below\",\"doc\",\"docs/api/directive/menutoggl\",\"exampl\",\"given\",\"html\",\"improv\",\"link\",\"menu\",\"menu-toggl\",\"nav\",\"open\",\"side\",\"tap\",\"toggl\",\"usag\",\"within\"],\"102\":[\"ad\",\"anim\",\"attribut\",\"below\",\"between\",\"button\",\"caus\",\"chang\",\"click\",\"direct\",\"disabl\",\"doc\",\"docs/api/directive/navclear\",\"element\",\"exampl\",\"given\",\"home\",\"href\",\"html\",\"improv\",\"link\",\"menu\",\"nav-clear\",\"next\",\"normal\",\"occur\",\"side\",\"sidemenu\",\"tap\",\"transit\",\"ui-sref\",\"us\",\"usag\",\"view\",\"within\"],\"103\":[\"activ\",\"add\",\"adjustnoth\",\"adjustpan\",\"adjustres\",\"although\",\"android\",\"android:windowsoftinputmode](http://developer.android.com/reference/android/r.attr.html#windowsoftinputmod\",\"androidmanifest.xml\",\"app\",\"app'\",\"appear\",\"attempt\",\"automat\",\"be\",\"behavior\",\"below\",\"best\",\"both\",\"caus\",\"class\",\"config.xml\",\"configur\",\"conjunct\",\"content\",\"content](https://ionicframework.com/docs/api/directive/ioncont\",\"cordova\",\"cordova.plugins.keyboard.disablescroll(tru\",\"direct\",\"disabl\",\"doc\",\"docs/api/page/keyboard\",\"element\",\"file\",\"fix\",\"focu\",\"focus\",\"found\",\"fullscreen\",\"happen\",\"header\",\"hide\",\"hide-on-keyboard-open\",\"html\",\"https://github.com/ionic-team/ionic-plugins-keyboard](https://github.com/ionic-team/ionic-plugins-keyboard\",\"i.\",\"improv\",\"includ\",\"inform\",\"input\",\"io\",\"ionic\",\"ionic.platform.isfullscreen\",\"issu\",\"keyboard\",\"layout\",\"manual\",\"name=\\\"fullscreen\",\"nativ\",\"need\",\"note\",\"obscur\",\"open\",\"order\",\"out\",\"overflow\",\"perform\",\"plugin\",\"plugin](https://github.com/ionic-team/ionic-plugins-keyboard\",\"prefer\",\"prevent\",\"push\",\"reason\",\"recommend\",\"result\",\"run\",\"scroll\",\"set\",\"show\",\"such\",\"true\",\"try\",\"up\",\"us\",\"usag\",\"value=\\\"tru\",\"view\",\"view](https://ionicframework.com/docs/api/directive/ionscrol\",\"web\",\"well\",\"within\",\"without\",\"work\",\"xml\"],\"104\":[\"300m\",\"activ\",\"ad\",\"add\",\"addit\",\"addition\",\"alreadi\",\"angular'\",\"app\",\"attribut\",\"automat\",\"avoid\",\"basic\",\"be\",\"between\",\"box\",\"browser\",\"button\",\"cancel\",\"case\",\"certain\",\"children\",\"class\",\"click\",\"come\",\"conflict\",\"consid\",\"correct\",\"correctli\",\"css\",\"data-tap-disabled=\\\"tru\",\"delai\",\"detect\",\"devic\",\"differ\",\"disabl\",\"displai\",\"doc\",\"docs/api/page/tap\",\"document\",\"doesn't\",\"dom\",\"double-tap\",\"down\",\"each\",\"element\",\"even\",\"event\",\"exampl\",\"execut\",\"expect\",\"experi\",\"far\",\"fast\",\"fastclick](https://github.com/ftlabs/fastclick\",\"feel\",\"fire\",\"first\",\"focu\",\"ghostclick\",\"go\",\"googl\",\"handl\",\"hide\",\"hold\",\"html\",\"implement\",\"improv\",\"in/out\",\"includ\",\"initi\",\"input\",\"interfer\",\"introduc\",\"ionic\",\"ionic'\",\"javascript\",\"keep\",\"keyboard\",\"know\",\"label\",\"leaflet\",\"librari\",\"listen\",\"make\",\"map\",\"matter\",\"meta\",\"minim\",\"moment\",\"more\",\"move\",\"multipl\",\"nativ\",\"ngtouch](https://docs.angularjs.org/api/ngtouch\",\"none\",\"normal\",\"note\",\"onc\",\"order\",\"out\",\"phone\",\"platform\",\"platform/devic\",\"pointer\",\"prevent\",\"properti\",\"rang\",\"remov\",\"respons\",\"resultingli\",\"roughli\",\"scenario\",\"scroll\",\"see\",\"select\",\"set\",\"show\",\"solut\",\"specif\",\"still\",\"stop\",\"such\",\"surround\",\"system\",\"tablet\",\"tag\",\"tap\",\"target\",\"tests](https://github.com/ionic-team/ionic/blob/master/test/unit/utils/tap.unit.j\",\"textearea\",\"there'\",\"third-parti\",\"time\",\"touch\",\"touch-ev\",\"type\",\"unit\",\"user\",\"valu\",\"variou\",\"version\",\"viewport\",\"virtual\",\"wai\",\"wait\",\"want\",\"webpag\",\"whether\",\"work\",\"zoom\"],\"105\":[\"39;cancel&#39\",\"39;danger&#39\",\"action\",\"actionsheet\",\"album\",\"angular\",\"angular.module('mysuperapp\",\"append\",\"backdrop\",\"bodi\",\"button\",\"buttonclick\",\"call\",\"cancel\",\"canceltext\",\"choos\",\"click\",\"close\",\"code\",\"control\",\"controller(function($scop\",\"creat\",\"danger\",\"delet\",\"desktop\",\"destruct\",\"destructivebuttonclick\",\"destructivetext\",\"detail\",\"doc\",\"docs/api/service/$ionicactionsheet\",\"each\",\"easi\",\"element\",\"escap\",\"even\",\"fals\",\"field\",\"function\",\"function(index\",\"highlight\",\"hit\",\"improv\",\"index\",\"ionic\",\"ionicactionsheet\",\"ionicactionsheet.show\",\"isol\",\"js\",\"keep\",\"keyboard\",\"let\",\"load\",\"made\",\"method\",\"modifi\",\"move\",\"new\",\"non-destruct\",\"object\",\"obviou\",\"on\",\"open\",\"opt\",\"option\",\"out\",\"pane\",\"param\",\"press\",\"properti\",\"red\",\"return\",\"scope\",\"scope.show\",\"servic\",\"set\",\"share\",\"sheet\",\"sheet](https://s3.amazonaws.com/ionicframework.com/docs/controllers/actionsheet.gif\",\"show\",\"show(opt\",\"slide-up\",\"string\",\"such\",\"tap\",\"target\",\"test\",\"text\",\"titl\",\"titletext\",\"trigger\",\"true\",\"type\",\"us\",\"usag\",\"user\",\"wai\"],\"106\":[\"0\",\"0.5\",\"1\",\"angular.module('mysuperapp\",\"anim\",\"app\",\"auto\",\"autorevers\",\"befor\",\"callback\",\"controller(function($scop\",\"css\",\"curv\",\"delai\",\"do\",\"doc\",\"docs/api/service/$ionicanim\",\"durat\",\"ease-in-out\",\"end\",\"fals\",\"function\",\"function(amt\",\"handl\",\"improv\",\"infinit\",\"ionic\",\"ionicanim\",\"js\",\"long\",\"mani\",\"name\",\"null\",\"on\",\"onend\",\"onstart\",\"playthrough\",\"popin\",\"power\",\"repeat\",\"reusabl\",\"revers\",\"run\",\"same\",\"start\",\"step\",\"system\",\"t\",\"through\",\"time\",\"transit\",\"uniqu\",\"us\",\"usag\",\"var\",\"wait\",\"whether\",\"yourself\"],\"107\":[\"1000\",\"appear\",\"backdrop\",\"behind\",\"call\",\"compon\",\"doc\",\"docs/api/service/$ionicbackdrop\",\"dom\",\"done\",\"each\",\"exampl\",\"function\",\"hide\",\"improv\",\"ionicbackdrop\",\"ionicbackdrop.releas\",\"ionicbackdrop.retain\",\"js\",\"load\",\"method\",\"multipl\",\"mycontroller($scop\",\"need\",\"on\",\"over\",\"overlai\",\"popup\",\"releas\",\"requir\",\"retain\",\"scope.act\",\"second\",\"show\",\"shown\",\"therefor\",\"three\",\"time\",\"timeout\",\"timeout(funct\",\"ui\",\"until\",\"usag\"],\"108\":[\"add\",\"angular\",\"call\",\"callback\",\"detail\",\"doc\",\"docs/api/service/$ionicgestur\",\"element\",\"event\",\"eventtyp\",\"expos\",\"function\",\"function(\",\"gestur\",\"happen\",\"improv\",\"ionic\",\"ionic.eventcontrol\",\"ionic.eventcontroller'\",\"ionicgestur\",\"listen\",\"method\",\"off(eventtyp\",\"on(eventtyp\",\"param\",\"remov\",\"see\",\"servic\",\"string\",\"type\"],\"109\":[\"boolean\",\"button\",\"call\",\"canswipeitems([showreord\",\"close\",\"closeoptionbutton\",\"control\",\"deleg\",\"delegate-handl\",\"delegateinst\",\"delet\",\"detail\",\"direct\",\"directli\",\"doc\",\"docs/api/service/$ioniclistdeleg\",\"exampl\",\"function\",\"getbyhandl\",\"getbyhandle(handl\",\"given\",\"handl\",\"html\",\"improv\",\"instanc\",\"ioniclistdeleg\",\"ioniclistdelegate.$getbyhandle('my-handle').showreorder(tru\",\"ioniclistdelegate.showdelete(tru\",\"ionlist\",\"js\",\"list\",\"match\",\"method\",\"myctrl($scop\",\"open\",\"option\",\"param\",\"reorder\",\"return\",\"scope.showdeletebutton\",\"servic\",\"set\",\"show\",\"showdelete([showreord\",\"shown\",\"showreord\",\"showreorder([showreord\",\"specif\",\"string\",\"swipe\",\"type\",\"us\",\"usag\",\"whether\"],\"110\":[\"activ\",\"alreadi\",\"angular.module('loadingapp\",\"automat\",\"avail\",\"backdrop\",\"block\",\"boolean\",\"call\",\"content\",\"controller('loadingctrl\",\"default\",\"delai\",\"detail\",\"doc\",\"docs/api/service/$ionicload\",\"durat\",\"function\",\"function($scop\",\"given\",\"hide\",\"html\",\"improv\",\"indic\",\"interact\",\"ionic\",\"ionicload\",\"ionicloading.hid\",\"ionicloading.show\",\"js\",\"keep\",\"load\",\"mani\",\"method\",\"millisecond\",\"nobackdrop\",\"number\",\"object\",\"opt\",\"option\",\"overlai\",\"param\",\"properti\",\"scope.hid\",\"scope.show\",\"set\",\"show\",\"show(opt\",\"shown\",\"string\",\"templat\",\"templateurl\",\"type\",\"until\",\"url\",\"us\",\"usag\",\"user\",\"wait\",\"whether\"],\"111\":[\"action\",\"angular.module('testapp\",\"anim\",\"choic\",\"class\",\"class=\\\"mod\",\"class=\\\"title\\\">mi\",\"cleanup\",\"content\",\"control\",\"controller('mycontrol\",\"detail\",\"div\",\"doc\",\"docs/api/service/$ionicmod\",\"done\",\"edit\",\"execut\",\"fromtemplate(templatestr\",\"fromtemplateurl(templateurl\",\"function\",\"function($scop\",\"go\",\"h1\",\"hello\",\"hide\",\"html\",\"improv\",\"insid\",\"instanc\",\"ion-cont\",\"ion-header-bar\",\"ionic\",\"ionicmod\",\"ionicmodal#initi\",\"ionicmodal.fromtemplateurl('modal.html\",\"item\",\"js\",\"load\",\"main\",\"make\",\"method\",\"modal\",\"modal&#39;\",\"need\",\"note\",\"object\",\"option\",\"over\",\"pane\",\"param\",\"pass\",\"promis\",\"put\",\"remov\",\"resolv\",\"return\",\"scope\",\"scope.$on('$destroi\",\"scope.$on('modal.hid\",\"scope.$on('modal.remov\",\"scope.closemod\",\"scope.mod\",\"scope.modal.hid\",\"scope.modal.remov\",\"scope.modal.show\",\"scope.openmod\",\"slide-in-up\",\"string\",\"templat\",\"templatestr\",\"templateurl\",\"temporarili\",\"then(function(mod\",\"title</h1\",\"type\",\"url\",\"us\",\"usag\",\"user'\",\"usual\",\"view\",\"we'r\"],\"112\":[\"39;back&#39\",\"39;center&#39\",\"39;forward&#39\",\"39;left&#39\",\"39;right&#39\",\"align\",\"align([direct\",\"avail\",\"back\",\"back([ev\",\"banana\",\"bar\",\"boolean\",\"button\",\"chang\",\"changetitle(titl\",\"control\",\"current\",\"default\",\"deleg\",\"delegate-handl\",\"delegateinst\",\"detail\",\"direct\",\"doc\",\"docs/api/service/$ionicnavbardeleg\",\"domev\",\"eg\",\"event\",\"exampl\",\"exist\",\"function\",\"function(titl\",\"getbyhandle(handl\",\"getprevioustitl\",\"gettitl\",\"given\",\"goe\",\"handl\",\"histori\",\"html\",\"improv\",\"instanc\",\"ionicnavbardeleg\",\"ionicnavbardelegate.$getbyhandle('myhandle').settitle('newtitl\",\"ionicnavbardelegate.settitle(titl\",\"ionnavbackbutton\",\"ionnavbar\",\"js\",\"match\",\"method\",\"myctrl($scop\",\"navbar\",\"new\",\"object\",\"old\",\"on\",\"option\",\"out\",\"param\",\"previou\",\"return\",\"scope.setnavtitl\",\"set\",\"set/get\",\"settitle(titl\",\"show\",\"showbackbutton([show\",\"showbar(show\",\"shown\",\"string\",\"tap\",\"text\",\"titl\",\"toward\",\"transit\",\"type\",\"usag\",\"view\",\"whether\"],\"113\":[\"abstract\",\"action\",\"actionid\",\"actionsheet\",\"alreadi\",\"android\",\"angular\",\"assign\",\"back\",\"backbutton\",\"backbuttonact\",\"bind\",\"bound\",\"button\",\"call\",\"callback\",\"click\",\"close\",\"current\",\"decid\",\"default\",\"deregist\",\"detail\",\"detect\",\"devic\",\"doc\",\"docs/api/service/$ionicplatform\",\"event\",\"exampl\",\"execut\",\"function\",\"go\",\"hardwar\",\"highest\",\"id\",\"immedi\",\"improv\",\"ionic.platform\",\"ionicplatform\",\"listen\",\"method\",\"modal\",\"number\",\"occur\",\"offhardwarebackbutton(callback\",\"on\",\"onc\",\"onhardwarebackbutton(callback\",\"open\",\"option\",\"origin\",\"overrid\",\"page\",\"param\",\"phonegap/cordova\",\"platform\",\"press\",\"prioriti\",\"promis\",\"random\",\"readi\",\"ready([callback\",\"regist\",\"registerbackbuttonaction(callback\",\"remov\",\"resolv\",\"return\",\"show\",\"thing\",\"trigger\",\"type\",\"uniqu\",\"us\",\"view\",\"wai\",\"well\"],\"114\":[\"3\",\"3000\",\"39;&#39\",\"39;button-default&#39\",\"39;button-positive&#39\",\"39;cancel&#39\",\"39;ok&#39\",\"39;text&#39\",\"addit\",\"alert\",\"alert(opt\",\"alertpopup\",\"alertpopup.then(function(r\",\"allow\",\"angular.module('mysuperapp\",\"arrai\",\"array[object\",\"avail\",\"basic\",\"below\",\"bodi\",\"built\",\"button\",\"button-posit\",\"call\",\"cancel\",\"canceltext\",\"canceltyp\",\"caus\",\"check\",\"click\",\"close\",\"complet\",\"complex\",\"cone\",\"confirm\",\"confirm(opt\",\"confirmpopup\",\"confirmpopup.then(function(r\",\"console.log('tap\",\"console.log('thank\",\"console.log('y\",\"console.log('your\",\"consum\",\"content\",\"continu\",\"controller(function($scop\",\"correspondingbutton\",\"cream\",\"creat\",\"custom\",\"default\",\"delici\",\"detail\",\"dialog\",\"doc\",\"docs/api/service/$ionicpopup\",\"don't\",\"don\\\\'t\",\"e.preventdefault\",\"each\",\"eat\",\"elabor\",\"enter\",\"event\",\"event.preventdefault\",\"exampl\",\"fals\",\"few\",\"field\",\"flexibl\",\"footer\",\"form\",\"function\",\"function(\",\"given\",\"good\",\"have\",\"html\",\"ic\",\"if(r\",\"improv\",\"input\",\"inputplacehold\",\"inputtyp\",\"ionic\",\"ionicpopup\",\"ionicpopup.alert\",\"ionicpopup.confirm\",\"ionicpopup.prompt\",\"ionicpopup.show\",\"javascript\",\"js\",\"keep\",\"link\",\"look\",\"master\",\"messag\",\"method\",\"more\",\"mypopup\",\"mypopup.clos\",\"mypopup.then(function(r\",\"new\",\"normal\",\"null\",\"object\",\"ok\",\"oktext\",\"oktyp\",\"on\",\"ontap\",\"open\",\"option\",\"order\",\"param\",\"pass\",\"password\",\"place\",\"placehold\",\"pleas\",\"popup\",\"press\",\"prevent\",\"programmat\",\"promis\",\"prompt\",\"prompt(opt\",\"re\",\"reason\",\"requir\",\"resolv\",\"respond\",\"return\",\"save\",\"scope\",\"scope.data\",\"scope.data.respons\",\"scope.data.wifi\",\"scope.showalert\",\"scope.showconfirm\",\"scope.showpopup\",\"second\",\"secret\",\"see\",\"servic\",\"show\",\"show(opt\",\"simpl\",\"stop\",\"string\",\"sub-titl\",\"subtitl\",\"support\",\"sure\",\"system\",\"tap\",\"target\",\"tast\",\"templat\",\"templateurl\",\"text\",\"then(function(r\",\"thing\",\"timeout\",\"timeout(funct\",\"titl\",\"trigger\",\"true\",\"type\",\"undefin\",\"unless\",\"url\",\"us\",\"usag\",\"user\",\"valu\",\"var\",\"version\",\"want\",\"wi-fi\",\"wifi\",\"window\",\"wish\"],\"115\":[\"0\",\"advanc\",\"anchorscroll([shouldanim\",\"anim\",\"area\",\"associ\",\"automat\",\"below\",\"boolean\",\"call\",\"chang\",\"contain\",\"content\",\"control\",\"correct\",\"creat\",\"deleg\",\"delegate-handl\",\"delegate.rememberscrollposition('my-scroll-id\",\"delegate.scrolltorememberedposit\",\"delegateinst\",\"destroi\",\"detail\",\"direct\",\"directli\",\"distanc\",\"doc\",\"docs/api/service/$ionicscrolldeleg\",\"element\",\"even\",\"exampl\",\"fine\",\"follow\",\"forgetscrollposit\",\"found\",\"function\",\"getbyhandl\",\"getbyhandle(handl\",\"getscrollposit\",\"getscrollview\",\"given\",\"handl\",\"here\",\"html\",\"i=0\",\"id\",\"improv\",\"index\",\"instanc\",\"ion-nav-view\",\"ion-scrol\",\"ioncont\",\"ionicscrolldeleg\",\"ionicscrolldelegate.$getbyhandle('mainscroll').scrolltop\",\"ionicscrolldelegate.$getbyhandle('my-handle').scrolltop\",\"ionicscrolldelegate.$getbyhandle('myscrol\",\"ionicscrolldelegate.$getbyhandle('small').scrolltop\",\"ionicscrolldelegate.scrolltop\",\"ionscrol\",\"js\",\"last\",\"leav\",\"left\",\"load\",\"mainctrl($scop\",\"make\",\"match\",\"method\",\"note\",\"number\",\"object\",\"option\",\"page\",\"param\",\"persist\",\"point\",\"posit\",\"properti\",\"put\",\"recalcul\",\"recreat\",\"relat\",\"rememb\",\"rememberscrollposit\",\"rememberscrollposition(id\",\"resiz\",\"return\",\"save\",\"scope.item\",\"scope.scrollmaintotop\",\"scope.scrollsmalltotop\",\"scope.scrolltop\",\"scroll\",\"scrollbottom([shouldanim\",\"scrollby(left\",\"scrollctrl($scop\",\"scrollto(left\",\"scrolltop([shouldanim\",\"scrolltorememberedposit\",\"scrolltorememberedposition([shouldanim\",\"scrollview\",\"servic\",\"shouldanim\",\"size\",\"small\",\"specif\",\"start\",\"stop\",\"string\",\"switch\",\"tell\",\"through\",\"time\",\"toggl\",\"top\",\"two\",\"type\",\"under\",\"uniqu\",\"us\",\"usag\",\"user\",\"valu\",\"var\",\"view\",\"want\",\"whether\",\"window.location.hash\",\"x-offset\",\"x-valu\",\"y-offset\",\"y-valu\"],\"116\":[\"0\",\"0.5\",\"1\",\"100\",\"50\",\"amount\",\"between\",\"boolean\",\"call\",\"candrag\",\"candragcontent([candrag\",\"close\",\"content\",\"control\",\"current\",\"default\",\"deleg\",\"delegate-handl\",\"delegateinst\",\"detail\",\"direct\",\"directli\",\"doc\",\"docs/api/service/$ionicsidemenudeleg\",\"drag\",\"exampl\",\"exist\",\"float\",\"function\",\"get\",\"getbyhandl\",\"getbyhandle(handl\",\"getopenratio\",\"given\",\"handl\",\"html\",\"improv\",\"instanc\",\"ionicsidemenudeleg\",\"ionicsidemenudelegate.$getbyhandle('my-handle').toggleleft\",\"ionicsidemenudelegate.toggleleft\",\"ionsidemenu\",\"isopen\",\"isopenleft\",\"isopenright\",\"js\",\"left\",\"mainctrl($scop\",\"match\",\"menu\",\"method\",\"noth\",\"open\",\"opened/open\",\"option\",\"over\",\"param\",\"pixel\",\"ratio\",\"return\",\"right\",\"scope.toggleleftsidemenu\",\"servic\",\"set\",\"side\",\"specif\",\"string\",\"toggl\",\"toggleleft([isopen\",\"toggleright([isopen\",\"type\",\"us\",\"usag\",\"whether\",\"width\"],\"117\":[\"2\",\"again\",\"angular\",\"around\",\"begin\",\"boolean\",\"box\",\"call\",\"chang\",\"control\",\"current\",\"currentindex\",\"deleg\",\"delegate-handl\",\"delegateinst\",\"detail\",\"direct\",\"directli\",\"doc\",\"docs/api/service/$ionicslideboxdeleg\",\"element\",\"enabl\",\"enableslide([shoulden\",\"end\",\"exampl\",\"explicitli\",\"function\",\"getbyhandl\",\"getbyhandle(handl\",\"given\",\"go\",\"handl\",\"html\",\"improv\",\"index\",\"insid\",\"instanc\",\"ionicslideboxdeleg\",\"ionicslideboxdelegate.$getbyhandle('my-handle').stop\",\"ionicslideboxdelegate.next\",\"ionslidebox\",\"js\",\"match\",\"method\",\"millisecond\",\"move\",\"myctrl($scop\",\"next\",\"ng-repeat\",\"number\",\"option\",\"param\",\"previou\",\"resiz\",\"return\",\"scope.nextslid\",\"servic\",\"shoulden\",\"slide\",\"slide(to\",\"slidebox\",\"slidescount\",\"specif\",\"speed\",\"stop\",\"string\",\"take\",\"told\",\"type\",\"until\",\"updat\",\"us\",\"usag\",\"whether\",\"wrap\"],\"118\":[\"1\",\"2\",\"boolean\",\"call\",\"control\",\"default\",\"deleg\",\"delegate-handl\",\"delegateinst\",\"detail\",\"direct\",\"directli\",\"doc\",\"docs/api/service/$ionictabsdeleg\",\"exampl\",\"exist\",\"fals\",\"function\",\"function(index\",\"getbyhandl\",\"getbyhandle(handl\",\"given\",\"handl\",\"hello\",\"hint\",\"histori\",\"html\",\"improv\",\"index\",\"insid\",\"instanc\",\"ionictabsdeleg\",\"ionictabsdelegate.$getbyhandle('my-handle').select(0\",\"ionictabsdelegate.select(index\",\"ionnavview\",\"iontab\",\"js\",\"load\",\"match\",\"method\",\"myctrl($scop\",\"number\",\"option\",\"page\",\"param\",\"probabl\",\"return\",\"scope.selecttabwithindex\",\"select\",\"select(index\",\"selectedindex\",\"servic\",\"shouldchangehistori\",\"specif\",\"string\",\"tab\",\"tab&#39;\",\"true\",\"type\",\"us\",\"usag\",\"view\",\"want\",\"whether\"],\"119\":[\"1\",\"100\",\"ad\",\"against\",\"alreadi\",\"anim\",\"animationframethrottle(callback)(alia\",\"avail\",\"between\",\"boolean\",\"bottom\",\"bound\",\"call\",\"callback\",\"child\",\"children\",\"classnam\",\"closest\",\"contain\",\"context\",\"defin\",\"detail\",\"doc\",\"docs/api/utility/ionic.domutil\",\"dom\",\"domel\",\"element\",\"element'\",\"find\",\"first\",\"fit\",\"follow\",\"frame\",\"function\",\"getchildindex(el\",\"getparentwithclass(el\",\"getpositioninparent(el\",\"gettextbounds(textnod\",\"given\",\"happen\",\"height\",\"immedi\",\"improv\",\"index\",\"ionic.animationframethrottl\",\"ionic.domutil\",\"ionic.requestanimationfram\",\"last\",\"left\",\"make\",\"match\",\"method\",\"next\",\"node\",\"nodenam\",\"null\",\"number\",\"object\",\"offset\",\"param\",\"parent\",\"pass\",\"polyfil\",\"posit\",\"positton\",\"properti\",\"readi\",\"ready(callback\",\"receiv\",\"rect\",\"rectangl\",\"rectcontains(x\",\"repres\",\"requestanimationfram\",\"requestanimationframe(callback)(alia\",\"requestanimationframe](https://developer.mozilla.org/en-us/docs/web/api/window.requestanimationfram\",\"return\",\"right\",\"run\",\"scroll\",\"self\",\"specifi\",\"string\",\"textnod\",\"throttl\",\"time\",\"top\",\"type\",\"whether\",\"width\",\"within\",\"x\",\"x,y\",\"x1\",\"x1,y1,x2,y2\",\"x2\",\"y\",\"y1\",\"y2\"],\"120\":[\"ad\",\"add\",\"angular\",\"avail\",\"boolean\",\"bubbl\",\"call\",\"callback\",\"cancel\",\"cancelable])(alia\",\"data\",\"detail\",\"doc\",\"docs/api/utility/ionic.eventcontrol\",\"dom\",\"domel\",\"doubletap\",\"drag\",\"dragdown\",\"dragend\",\"dragleft\",\"dragright\",\"dragstart\",\"dragup\",\"earlier\",\"element\",\"element)(alia\",\"event\",\"eventtyp\",\"function\",\"function(\",\"gestur\",\"hammer.js](http://eightmedia.github.io/hammer.j\",\"happen\",\"hint\",\"hold\",\"improv\",\"ionic.eventcontrol\",\"ionic.off\",\"ionic.offgestur\",\"ionic.on\",\"ionic.ongestur\",\"ionic.trigg\",\"listen\",\"method\",\"object\",\"off(typ\",\"offgesture(eventtyp\",\"on(typ\",\"ongesture(eventtyp\",\"option\",\"param\",\"pass\",\"pinch\",\"pinchin\",\"pinchout\",\"releas\",\"remov\",\"rotat\",\"string\",\"swipe\",\"swipedown\",\"swipeleft\",\"swiperight\",\"swipeup\",\"tap\",\"target\",\"targetel\",\"touch\",\"transform\",\"transformend\",\"transformstart\",\"trigger\",\"trigger(eventtyp\",\"type\",\"up\",\"whether\"],\"121\":[\"additon\",\"alreadi\",\"android\",\"anywher\",\"app\",\"arrai\",\"array(str\",\"bar\",\"boolean\",\"browser\",\"call\",\"callback\",\"check\",\"cordova\",\"current\",\"default\",\"detail\",\"devic\",\"device&#39;\",\"doc\",\"docs/api/utility/ionic.platform\",\"exit\",\"exitapp\",\"fals\",\"fire\",\"found\",\"fullscreen\",\"fullscreen([showfullscreen\",\"function\",\"given\",\"grade\",\"hide\",\"immedi\",\"improv\",\"io\",\"ionic.platform\",\"ipad\",\"isandroid\",\"isfullscreen\",\"isio\",\"isipad\",\"isreadi\",\"iswebview\",\"iswindowsphon\",\"it'll\",\"method\",\"name\",\"need\",\"object\",\"onc\",\"option\",\"param\",\"phone\",\"platform\",\"properti\",\"readi\",\"ready(callback\",\"return\",\"run\",\"set\",\"shouldshow\",\"show\",\"showfullscreen\",\"showstatusbar\",\"showstatusbar(shouldshow\",\"statu\",\"string\",\"such\",\"trigger\",\"true\",\"type\",\"version\",\"web\",\"webview\",\"whether\",\"window\",\"window.load\",\"within\",\"wrap\"],\"122\":[\"control\",\"descript\",\"docs/api/ionic/control\",\"instanti\",\"ionic\",\"ionicmod\",\"modul\",\"name\",\"servic\"],\"123\":[\"39;pane&#39\",\"abil\",\"abov\",\"add\",\"addit\",\"allow\",\"along\",\"and/or\",\"anim\",\"app\",\"applic\",\"area\",\"back\",\"bar\",\"basic\",\"below\",\"benefit\",\"between\",\"bind\",\"boolean\",\"bottom\",\"box\",\"browser\",\"built\",\"button\",\"call\",\"chang\",\"checkbox\",\"class\",\"close\",\"configur\",\"contain\",\"content\",\"correctli\",\"creat\",\"current\",\"custom\",\"delet\",\"descript\",\"differ\",\"direct\",\"disabl\",\"docs/api/ionic/direct\",\"drag\",\"each\",\"easi\",\"easili\",\"edit\",\"effect\",\"element\",\"except\",\"exist\",\"fit\",\"fix\",\"footer\",\"function\",\"get\",\"given\",\"header\",\"histori\",\"html\",\"icon\",\"includ\",\"input\",\"insid\",\"interfac\",\"ioncheckbox\",\"ioncont\",\"ionfooterbar\",\"ionheaderbar\",\"ionic\",\"ionic&#39;\",\"ioninfinitescrol\",\"ionitem\",\"ionlist\",\"ionnavbackbutton\",\"ionnavbar\",\"ionnavbutton\",\"ionnavview\",\"ionpan\",\"ionradio\",\"ionrefresh\",\"ionscrol\",\"ionsidemenu\",\"ionsidemenucont\",\"ionslidebox\",\"iontab\",\"iontoggl\",\"ionview\",\"it&#39;\",\"keep\",\"know\",\"left\",\"link\",\"list\",\"list-item\",\"lt;ion-nav-bar&gt\",\"main\",\"manag\",\"menu\",\"menu(\",\"menuclos\",\"menutoggl\",\"mobil\",\"model\",\"modul\",\"more\",\"multi-pag\",\"multi-tab\",\"multipl\",\"name\",\"navclear\",\"navig\",\"near\",\"next\",\"normal\",\"on\",\"open\",\"overflow\",\"page\",\"parent\",\"power\",\"provid\",\"pull-to-refresh\",\"quot;pages&quot\",\"radio\",\"rang\",\"remov\",\"reorder\",\"right\",\"scroll\",\"scrollabl\",\"scrollview\",\"select\",\"set\",\"show\",\"sibl\",\"side\",\"sidemenu\",\"simpl\",\"slide\",\"state\",\"style\",\"swipe\",\"switch\",\"system\",\"tab\",\"tab&#39;\",\"tell\",\"text\",\"through\",\"throughout\",\"thumbnail\",\"toggl\",\"topbar\",\"track\",\"transit\",\"updat\",\"us\",\"user\",\"view\",\"visibl\",\"wai\",\"whenev\",\"wide\",\"within\"],\"124\":[\"abstract\",\"action\",\"activ\",\"angular\",\"block\",\"choic\",\"choos\",\"content\",\"continu\",\"control\",\"creat\",\"danger\",\"deleg\",\"descript\",\"direct\",\"docs/api/ionic/servic\",\"easi\",\"edit\",\"expos\",\"gestur\",\"go\",\"highlight\",\"indic\",\"interact\",\"ioncont\",\"ionic\",\"ionic.eventcontroller&#39;\",\"ionic.platform\",\"ionicactionsheet\",\"ionicgestur\",\"ionicload\",\"ionicmod\",\"ionicnavbardeleg\",\"ionicplatform\",\"ionicpopup\",\"ionicscrolldeleg\",\"ionicsidemenudeleg\",\"ionicslideboxdeleg\",\"ionictabsdeleg\",\"ionnavbar\",\"ionscrol\",\"ionsidemenu\",\"ionslidebox\",\"iontab\",\"item\",\"let\",\"made\",\"main\",\"make\",\"modal\",\"modul\",\"name\",\"obviou\",\"option\",\"order\",\"over\",\"overlai\",\"pane\",\"popup\",\"programat\",\"red\",\"requir\",\"respond\",\"scrollview\",\"servic\",\"set\",\"sheet\",\"show\",\"slide-up\",\"temporarili\",\"us\",\"user\",\"user&#39;\",\"usual\",\"view\",\"window\"],\"125\":[\"descript\",\"docs/api/ionic/util\",\"ionic\",\"ionic.domutil\",\"ionic.eventcontrol\",\"ionic.platform\",\"modul\",\"name\",\"util\"],\"126\":[\"500\",\"amp\",\"api\",\"app\",\"ask\",\"book\",\"build\",\"built\",\"check\",\"commun\",\"compon\",\"comprehens\",\"control\",\"css\",\"custom\",\"demo\",\"design\",\"doc\",\"document\",\"drop\",\"everyth\",\"exampl\",\"explor\",\"familiar\",\"find\",\"font\",\"forum\",\"framework\",\"help\",\"hi\",\"html5\",\"icon\",\"inform\",\"input\",\"interest\",\"ionic\",\"ionicon\",\"javascript\",\"jump\",\"know\",\"learn\",\"licens\",\"life\",\"list\",\"mani\",\"mini-book\",\"mit\",\"mobil\",\"move\",\"need\",\"out\",\"over\",\"overview\",\"part\",\"question\",\"readi\",\"real\",\"refer\",\"resourc\",\"run\",\"share\",\"someth\",\"start\",\"teach\",\"templat\",\"type\",\"up\",\"us\",\"util\",\"written\",\"you'll\",\"you’d\"],\"127\":[\"add\",\"android\",\"app\",\"base\",\"below\",\"blank\",\"build\",\"cd\",\"command-lin\",\"compon\",\"cordova\",\"cours\",\"cover\",\"crash\",\"creat\",\"css\",\"depend\",\"deploi\",\"develop\",\"doc\",\"easi\",\"email\",\"emul\",\"endhighlight\",\"enter\",\"everyth\",\"first\",\"follow\",\"forum\",\"fresh\",\"g\",\"get\",\"getting-start\",\"guid\",\"head\",\"high\",\"indepth\",\"instal\",\"io\",\"ionic\",\"ionic'\",\"ionitron\",\"it'\",\"javascript\",\"join\",\"know\",\"latest\",\"mac\",\"make\",\"minut\",\"mobil\",\"more\",\"myapp\",\"next\",\"node.j\",\"note\",\"npm\",\"on\",\"os\",\"over\",\"overview\",\"platform\",\"project\",\"provid\",\"qualiti\",\"quick\",\"ready-mad\",\"requir\",\"run\",\"same\",\"sidemenu\",\"simpl\",\"start\",\"step\",\"subscrib\",\"substitut\",\"suggest\",\"sure\",\"tab\",\"templat\",\"test\",\"tool\",\"updat\",\"us\",\"util\",\"video\",\"wai\",\"want\",\"watch\",\"what'\",\"wonder\",\"x\",\"yep\",\"you'd\"],\"128\":[\"angularj\",\"app\",\"apps](/tutorials/fullscreen-app\",\"bar](/tutorials/fade-status-bar\",\"build\",\"built\",\"clone\",\"come\",\"cordova\",\"cordova](http://cordova.apache.org\",\"custom\",\"directori\",\"download\",\"exampl\",\"extract\",\"fade\",\"file\",\"fullscreen\",\"function\",\"github\",\"ionic\",\"ionic-angular-cordova-seed](http://github.com/ionic-team/ionic-angular-cordova-se\",\"nativ\",\"need\",\"offici\",\"open\",\"point\",\"project\",\"project](http://github.com/ionic-team/ionic-angular-cordova-se\",\"remov\",\"sass](/tutorials/customizing-ionic-with-sass\",\"seed\",\"set\",\"start\",\"statu\",\"tutori\",\"up\",\"us\",\"won't\",\"work\"],\"129\":[\"43cee6\",\"444\",\"4a87e\",\"4ea4b\",\"66cc33\",\"8a6de9\",\"_variables.scss\",\"abov\",\"absolut\",\"achiev\",\"addition\",\"alreadi\",\"and/or\",\"anoth\",\"app\",\"app'\",\"app.css\",\"app.scss\",\"assert\",\"automat\",\"awesom\",\"balanc\",\"below\",\"better\",\"big\",\"border\",\"both\",\"brand\",\"browser\",\"build\",\"built\",\"bunch\",\"calm\",\"chang\",\"choos\",\"code\",\"color\",\"colors](/docs/v3/components/#color\",\"combin\",\"come\",\"command\",\"complet\",\"concern\",\"constantli\",\"contain\",\"contribute](/contribut\",\"cool\",\"copi\",\"core\",\"correctli\",\"css\",\"css/app.css\",\"custom\",\"dark\",\"default\",\"defin\",\"desir\",\"develop\",\"differ\",\"directli\",\"directori\",\"documentation](http://sass-lang.com/documentation/file.sass_reference.html\",\"documentation](http://sass-lang.com/guide#vari\",\"doesn't\",\"done\",\"download\",\"download](https://github.com/ionic-team/ionic/releas\",\"each\",\"easi\",\"easier\",\"easiest\",\"ef4e3a\",\"energ\",\"enter\",\"entir\",\"etc\",\"eventu\",\"exampl\",\"exist\",\"f0b840\",\"f8f8f8\",\"featur\",\"feel\",\"few\",\"fff\",\"file\",\"find\",\"first\",\"fit\",\"font\",\"forum](http://forum.ionicframework.com\",\"found\",\"framework\",\"free\",\"full\",\"gem\",\"gener\",\"go\",\"goe\",\"guide](http://css-tricks.com/sass-style-guid\",\"haven't\",\"height\",\"here\",\"highli\",\"icon\",\"ident\",\"img\",\"import\",\"index.html\",\"inform\",\"insid\",\"instal\",\"instruct\",\"ionic\",\"ionic'\",\"ionic.scss\",\"ionic/ion\",\"ionicons](https://ionicons.com\",\"it](/examples/submit.html\",\"js\",\"larg\",\"latest\",\"learn\",\"level\",\"leverag\",\"light\",\"littl\",\"look\",\"love\",\"made\",\"magic\",\"make\",\"mani\",\"margin\",\"meant\",\"modifi\",\"more\",\"much\",\"need\",\"new\",\"next\",\"noth\",\"now\",\"old\",\"on\",\"onc\",\"other\",\"out\",\"output\",\"overrid\",\"overridden\",\"pad\",\"place\",\"plain\",\"plan\",\"pleas\",\"point\",\"posit\",\"power\",\"probabl\",\"process\",\"project\",\"prompt\",\"properti\",\"readi\",\"reason\",\"rebuild\",\"rebuilt\",\"recent\",\"recommend\",\"refer\",\"regard\",\"releas\",\"renam\",\"repo\",\"requir\",\"resav\",\"resourc\",\"reus\",\"root\",\"royal\",\"rule\",\"run\",\"sass\",\"sass](http://sass-lang.com\",\"sass](http://sass-lang.com/guid\",\"sass](http://sass-lang.com/instal\",\"save\",\"scss\",\"scss/app.scss\",\"scss/app.scss:css/app.css\",\"scss/ionic\",\"scss/ionic/ionic.scss\",\"scss/ionic/ionicon\",\"see\",\"separ\",\"set\",\"setup\",\"simpli\",\"simplifi\",\"size\",\"sleev\",\"slick\",\"small\",\"sourc\",\"specifi\",\"stabl\",\"stack\",\"start\",\"stick\",\"still\",\"stop\",\"store\",\"structur\",\"style\",\"stylesheet\",\"successfulli\",\"such\",\"sure\",\"swimmingli\",\"syntax\",\"take\",\"tell\",\"termin\",\"theme\",\"there'\",\"thing\",\"think\",\"throughout\",\"time\",\"tool\",\"trick\",\"tutorials/customizing-ionic-with-sass\",\"tweak\",\"understand\",\"up\",\"updat\",\"upgrad\",\"us\",\"v\",\"valu\",\"variabl\",\"variables](http://sass-lang.com/guide#vari\",\"verifi\",\"version\",\"wai\",\"want\",\"watch\",\"we'd\",\"we'v\",\"whatev\",\"width\",\"within\",\"world\",\"you'd\",\"you'll\",\"you'r\",\"you'v\"],\"130\":[\"0\",\"000\",\"1\",\"100\",\"20px\",\"7\",\"9999\",\"achiev\",\"ad\",\"add\",\"addit\",\"ahead\",\"angular.module('start\",\"angularj\",\"anywher\",\"app\",\"area\",\"attr\",\"background-color\",\"bar\",\"behind\",\"between\",\"bleed\",\"call\",\"center\",\"chang\",\"class\",\"code\",\"content\",\"control\",\"controller('menuctrl\",\"copi\",\"correctli\",\"cours\",\"creat\",\"css\",\"custom\",\"data\",\"demo\",\"digest\",\"direct\",\"directive('fadebar\",\"div\",\"done\",\"drag\",\"e\",\"easi\",\"effect\",\"element\",\"element[0].style.opac\",\"endhighlight\",\"fade\",\"fade-bar\",\"fadebar\",\"first\",\"fix\",\"fulli\",\"function($scop\",\"function($timeout\",\"function(ratio\",\"go\",\"header\",\"height\",\"implement\",\"includ\",\"insid\",\"io\",\"ion-side-menu\",\"ionic\",\"it'\",\"itself\",\"landscap\",\"layout\",\"left\",\"let\",\"limit\",\"link\",\"listen\",\"lt;fade-bar&gt\",\"lt;style&gt\",\"math.abs(ratio\",\"menu\",\"mobil\",\"move\",\"need\",\"never\",\"new\",\"next\",\"now\",\"opac\",\"open\",\"openratio\",\"order\",\"out\",\"past\",\"piec\",\"posit\",\"previous\",\"project\",\"put\",\"raw\",\"react\",\"real\",\"receiv\",\"rectangl\",\"replac\",\"restrict\",\"return\",\"right\",\"run\",\"scope\",\"scope.$watch('sidemenucontroller.getopenratio\",\"set\",\"side\",\"simpl\",\"sit\",\"slide\",\"slowli\",\"start\",\"statu\",\"suppli\",\"tag\",\"templat\",\"that'\",\"timeout(funct\",\"transpar\",\"true\",\"try\",\"tutorials/fade-status-bar\",\"up\",\"us\",\"valu\",\"watch\",\"we'v\",\"width\",\"work\",\"z-index\"],\"131\":[\"abil\",\"advantag\",\"angularj\",\"built\",\"feed\",\"fetch\",\"great\",\"immedi\",\"ionic\",\"offer\",\"power\",\"remot\",\"take\",\"tutorials/fetching-from-a-remote-fe\",\"we'r\",\"work\"],\"132\":[\"add\",\"angular.module('myapp\",\"anoth\",\"app\",\"bar\",\"benefit\",\"controller('myctrl\",\"cordova\",\"correspond\",\"devic\",\"endhighlight\",\"endraw\",\"event\",\"experi\",\"first\",\"follow\",\"fullscreen\",\"function($scop\",\"game\",\"hide\",\"html\",\"instal\",\"io\",\"ionic\",\"ionic'\",\"ionic.platform.ready(funct\",\"listen\",\"make\",\"mani\",\"nativ\",\"need\",\"note\",\"now\",\"on\",\"org.apache.cordova.statusbar\",\"parti\",\"phone\",\"platform\",\"plugin\",\"raw\",\"readi\",\"recommend\",\"remov\",\"screenshot\",\"servic\",\"simpl\",\"site.recommended_cordova_vers\",\"statu\",\"statusbar\",\"statusbar.hid\",\"that'\",\"time\",\"tutorials/fullscreen-app\",\"uiwebview\",\"us\",\"v\",\"weather\",\"work\",\"wrapper\",\"you'v\"],\"133\":[\"0\",\"000\",\"0px\",\"100\",\"10px\",\"170px\",\"2\",\"20px\",\"300\",\"30px\",\"3</li\",\"80px\",\"abov\",\"add\",\"alreadi\",\"angri\",\"angular.module('myapp\",\"angularj\",\"anim\",\"app\",\"app!</h3\",\"appctrl\",\"arial\",\"auto\",\"awesom\",\"awesome</h3\",\"awesome</li\",\"back\",\"background-color\",\"bad\",\"bar\",\"base\",\"between\",\"bind\",\"box\",\"bu\",\"build\",\"button\",\"button-clear\",\"button-posit\",\"call\",\"center\",\"certain\",\"chang\",\"check\",\"choos\",\"clone\",\"code\",\"codepen\",\"color\",\"command\",\"compileprovid\",\"compileprovider.ahrefsanitizationwhitelist(/^\\\\s*(https?|ftp|mailto|file|tel\",\"complet\",\"config(funct\",\"config(function($routeprovid\",\"configur\",\"content\",\"control\",\"controller('introctrl\",\"controllers.j\",\"creat\",\"css\",\"decim\",\"default\",\"demo\",\"depend\",\"didtutori\",\"differ\",\"discuss\",\"div\",\"done\",\"drag\",\"each\",\"element\",\"endhighlight\",\"entir\",\"event\",\"execut\",\"fallback\",\"fff\",\"finish\",\"first\",\"flag\",\"font-famili\",\"font-siz\",\"font-weight\",\"forum\",\"function\",\"function(\",\"function($scop\",\"function(index\",\"gist\",\"give\",\"go\",\"grand\",\"h3>ani\",\"h3>thank\",\"h3>use\",\"h5>just\",\"happi\",\"hard\",\"header\",\"height\",\"help\",\"helvetica\",\"helveticaneue-light\",\"hit\",\"id=\\\"intro-pag\",\"id=\\\"list\",\"id=\\\"logo\",\"if(index\",\"if(window.localstorage['didtutori\",\"img\",\"indic\",\"initi\",\"initial-load\",\"insert\",\"insid\",\"interfac\",\"intro\",\"intro.html\",\"introctrl\",\"introduc\",\"ionic\",\"it'\",\"javascript\",\"kind\",\"last\",\"later\",\"learn\",\"left\",\"left-buttons=\\\"leftbutton\",\"leftbutton\",\"let'\",\"li\",\"li>b\",\"li>stai\",\"li>ther\",\"light\",\"line\",\"list\",\"list-styl\",\"listen\",\"littl\",\"load\",\"local\",\"locat\",\"location.path('/main\",\"locationprovid\",\"logic\",\"logo\",\"look\",\"lot\",\"lt;body&gt\",\"lt;ng-view&gt\",\"lucida\",\"main\",\"main.html\",\"mainctrl\",\"make\",\"map\",\"margin\",\"margin-top\",\"met\",\"mobil\",\"modul\",\"mous\",\"move\",\"multi-slid\",\"mutli-screen\",\"myapp\",\"nav\",\"nav-pag\",\"navig\",\"need\",\"neue\",\"new\",\"next\",\"ngrout\",\"nice\",\"none\",\"notic\",\"now\",\"ol\",\"on\",\"on-slide-chang\",\"on-slide-changed=\\\"slidechanged(index\",\"onc\",\"open\",\"otherwis\",\"p\",\"padding-top\",\"page\",\"pattern\",\"plai\",\"pleas\",\"point\",\"popular\",\"previou\",\"progress\",\"project\",\"questions?</h3\",\"redirectto\",\"respond\",\"return\",\"right\",\"right-buttons=\\\"rightbutton\",\"rightbutton\",\"root\",\"rout\",\"routeprovider.otherwis\",\"routeprovider.when\",\"routeprovider.when('/main\",\"router\",\"run\",\"safe\",\"sampl\",\"sans-serif\",\"scope\",\"scope.$broadcast('slidebox.nextslid\",\"scope.$broadcast('slidebox.prevslid\",\"scope.leftbutton\",\"scope.next\",\"scope.rightbutton\",\"scope.slidechang\",\"second\",\"see\",\"seed\",\"set\",\"show\",\"skip\",\"slide\",\"slide-box\",\"slidebox\",\"slider\",\"slider-slid\",\"src=\\\"https://code.ionicframework.com/assets/img/app_icon.png\",\"standard\",\"start\",\"startapp\",\"step\",\"steps:</h5\",\"storag\",\"style\",\"super\",\"swipe\",\"switch\",\"tag\",\"tap\",\"tell\",\"templat\",\"templateurl\",\"test\",\"text-align\",\"that'\",\"third\",\"those\",\"three\",\"through\",\"ti\",\"time\",\"trigger\",\"true\",\"try\",\"tutori\",\"tutorials/intro-tutori\",\"type\",\"up\",\"updat\",\"url\",\"us\",\"user\",\"util\",\"valu\",\"var\",\"view\",\"wai\",\"want\",\"we'v\",\"whitelist\",\"width\",\"window.localstorage['didtutori\",\"wire\",\"work\",\"you'll\"],\"134\":[\"300\",\"300m\",\"32\",\"accur\",\"actual\",\"ad\",\"adam\",\"add\",\"addit\",\"addition\",\"admit\",\"again\",\"allow\",\"alon\",\"alreadi\",\"alwai\",\"amaz\",\"android\",\"angular\",\"angular'\",\"angularj\",\"anoth\",\"app\",\"app-lik\",\"app-like...it\",\"area\",\"aris\",\"around\",\"ask\",\"assign\",\"associ\",\"assum\",\"attribut\",\"automat\",\"bad\",\"basic\",\"befor\",\"believ\",\"benefit\",\"better\",\"between\",\"beyond\",\"biggest\",\"blog/hybrid-apps-and-the-curse-of-the-300ms-delai\",\"both\",\"browser\",\"bug\",\"build\",\"built\",\"button\",\"case\",\"caus\",\"challeng\",\"chang\",\"check\",\"checkbox\",\"chrome\",\"classnam\",\"clear\",\"click\",\"close\",\"code\",\"combin\",\"come\",\"common\",\"commun\",\"compar\",\"conclus\",\"contribut\",\"convinc\",\"coordin\",\"core\",\"crazi\",\"creat\",\"css\",\"culprit\",\"curs\",\"decid\",\"default\",\"delai\",\"depend\",\"desktop\",\"detail\",\"detect\",\"develop\",\"devic\",\"didn't\",\"differ\",\"direct\",\"disabl\",\"discuss\",\"displai\",\"div\",\"doesn't\",\"dom\",\"don't\",\"done\",\"doubl\",\"double-click\",\"double-tap\",\"drag\",\"duplic\",\"each\",\"easi\",\"easili\",\"effort\",\"element\",\"elimin\",\"enabl\",\"encourag\",\"enhanc\",\"etc\",\"even\",\"event\",\"evil\",\"exactli\",\"exampl\",\"execut\",\"exist\",\"extra\",\"face\",\"far\",\"fastclick.j\",\"featur\",\"feel\",\"felt\",\"few\",\"figur\",\"find\",\"fire\",\"firefox\",\"flesh\",\"focu\",\"foe\",\"follow\",\"followup\",\"fork\",\"form\",\"formid\",\"forum\",\"framework\",\"free\",\"gener\",\"gestur\",\"ghostclick\",\"give\",\"global\",\"go\",\"goe\",\"gone\",\"great\",\"hammer.j\",\"hand\",\"handler\",\"happen\",\"have\",\"heavili\",\"hei\",\"help\",\"here\",\"here'\",\"highli\",\"histor\",\"hit\",\"hold\",\"html\",\"html5\",\"huge\",\"hybrid\",\"i'll\",\"i'm\",\"i'v\",\"id\",\"idea\",\"ignor\",\"immedi\",\"implement\",\"improv\",\"includ\",\"initi\",\"input\",\"input'\",\"interact\",\"introduc\",\"ionic\",\"ionic'\",\"isn't\",\"issu\",\"it'\",\"itself\",\"it’\",\"javascript\",\"job\",\"kept\",\"know\",\"known\",\"label\",\"label'\",\"larg\",\"last\",\"later\",\"lesser\",\"let\",\"let'\",\"level\",\"link\",\"list\",\"listen\",\"logic\",\"loos\",\"lot\",\"love\",\"luckili\",\"magic\",\"make\",\"mani\",\"manipul\",\"manual\",\"matter\",\"mean\",\"meant\",\"method\",\"millisecond\",\"miss\",\"mobil\",\"modern\",\"moment\",\"more\",\"mousedown\",\"mousemov\",\"mouseup\",\"much\",\"near\",\"necessari\",\"need\",\"new\",\"newer\",\"ng-click\",\"ngclick\",\"ngtouch\",\"nifti\",\"notic\",\"now\",\"numer\",\"on\",\"onc\",\"option\",\"out\",\"overrid\",\"page\",\"part\",\"perform\",\"period\",\"peski\",\"phone\",\"phrase\",\"place\",\"plai\",\"pleas\",\"plugin\",\"pretti\",\"prevent\",\"problem\",\"propag\",\"pseudo-class\",\"put\",\"quadrupl\",\"question\",\"quick\",\"quickest\",\"quickli\",\"quit\",\"radio\",\"read\",\"realiz\",\"realli\",\"reason\",\"receiv\",\"recent\",\"recommend\",\"region\",\"rel\",\"releas\",\"rememb\",\"remov\",\"repeat\",\"respons\",\"reus\",\"right\",\"roughli\",\"rout\",\"same\",\"scenario\",\"see\",\"seem\",\"send\",\"set\",\"short\",\"shot\",\"shoulder\",\"simpl\",\"simpli\",\"singl\",\"slap\",\"solut\",\"sometim\",\"sourc\",\"spark\",\"stand\",\"standard\",\"still\",\"stop\",\"stuff\",\"style\",\"subsequ\",\"such\",\"sum\",\"surpris\",\"surround\",\"swipe\",\"swipeleft\",\"swiperight\",\"system\",\"tablet\",\"take\",\"talk\",\"tap\",\"target\",\"tell\",\"test\",\"text\",\"textarea\",\"there'\",\"therefor\",\"they'r\",\"thing\",\"think\",\"those\",\"thought\",\"thousand\",\"throw\",\"thrown\",\"time\",\"toggl\",\"top\",\"topic\",\"touch\",\"touch/click\",\"touchcancel\",\"touchend\",\"touchmov\",\"touchstart\",\"track\",\"trick\",\"troubl\",\"two\",\"ty\",\"understand\",\"up\",\"us\",\"usabl\",\"user\",\"usual\",\"virtual\",\"vital\",\"wait\",\"we'd\",\"we'r\",\"we'v\",\"web\",\"web-dev\",\"webpag\",\"well\",\"wide\",\"wild-west\",\"win\",\"within\",\"without\",\"work\",\"world\",\"wrap\",\"wrench\",\"x\",\"y\",\"you'r\",\"you'v\",\"zoom\"],\"135\":[\"2009\",\"2011\",\"abil\",\"access\",\"adob\",\"adobe'\",\"alreadi\",\"alwai\",\"analog\",\"anyth\",\"apach\",\"api\",\"app\",\"around\",\"avail\",\"awesom\",\"basic\",\"becom\",\"better\",\"between\",\"big\",\"blog/what-is-cordova-phonegap\",\"both\",\"brand\",\"bridg\",\"broader\",\"browser\",\"build\",\"built\",\"bulk\",\"call\",\"camera\",\"can't\",\"capabl\",\"chrome\",\"code\",\"come\",\"commun\",\"compass\",\"complex\",\"confus\",\"continu\",\"control\",\"cordova\",\"cordova'\",\"cordova](http://cordova.apache.org\",\"core\",\"count\",\"creat\",\"creation\",\"creativ\",\"css\",\"current\",\"custom\",\"dai\",\"data\",\"decid\",\"default\",\"demo\",\"develop\",\"device'\",\"didn't\",\"differ\",\"digest\",\"disagre\",\"distribut\",\"doesn't\",\"don't\",\"donat\",\"dream\",\"easi\",\"ecosystem\",\"embed\",\"enabl\",\"enter\",\"environ\",\"eventu\",\"exampl\",\"execut\",\"exist\",\"expect\",\"experi\",\"expos\",\"extra\",\"featur\",\"fine\",\"first\",\"fit\",\"foundation](http://apache.org\",\"function\",\"futur\",\"gener\",\"geoloc\",\"get\",\"goal\",\"gotten\",\"gp\",\"grab\",\"great\",\"hard\",\"hard-cod\",\"help\",\"here\",\"high\",\"histori\",\"html5\",\"hybrid\",\"i'm\",\"imagin\",\"implement\",\"instagram\",\"interest\",\"ionic\",\"iphon\",\"it'\",\"itself\",\"javascript\",\"kind\",\"know\",\"land\",\"last\",\"later\",\"latter\",\"layer\",\"leav\",\"less\",\"lesson\",\"let\",\"let'\",\"limit\",\"look\",\"lot\",\"love\",\"low-level\",\"luckili\",\"made\",\"make\",\"map\",\"mean\",\"mere\",\"minim\",\"misunderstand\",\"mobil\",\"month\",\"more\",\"much\",\"name\",\"nativ\",\"native-to-brows\",\"navigator.camera\",\"navigator.camera.getphotos(start\",\"navigator.camera.getpictur\",\"navigator.geoloc\",\"necessari\",\"need\",\"new\",\"nitobi\",\"note\",\"obsolet\",\"offer\",\"oh\",\"on\",\"open\",\"out\",\"over\",\"part\",\"peopl\",\"person\",\"phonegap\",\"phonegap](http://phonegap.com\",\"photo\",\"pictur\",\"plan\",\"plu\",\"plugin\",\"popular\",\"possibl\",\"power\",\"pre-mad\",\"pretti\",\"product\",\"project\",\"proper\",\"proprietari\",\"provid\",\"purchas\",\"pure\",\"qualiti\",\"quest\",\"question\",\"quick\",\"rang\",\"reader\",\"realiz\",\"realli\",\"recap\",\"releas\",\"right\",\"rose\",\"same\",\"scale\",\"see\",\"seem\",\"seen\",\"send\",\"servic\",\"set\",\"show\",\"simpl\",\"size\",\"softwar\",\"someon\",\"someth\",\"sourc\",\"spirit\",\"standard\",\"start\",\"startup\",\"still\",\"stream\",\"stuff\",\"support\",\"take\",\"technolog\",\"theoret\",\"thing\",\"think\",\"though\",\"through\",\"time\",\"todai\",\"ton\",\"tool\",\"top\",\"toward\",\"transfer\",\"ui\",\"under\",\"until\",\"up\",\"us\",\"vendor\",\"veri\",\"version\",\"view\",\"vision\",\"wai\",\"want\",\"we'v\",\"web\",\"webkit\",\"well\",\"won't\",\"word\",\"work\",\"wrong\"],\"136\":[\"abil\",\"alert\",\"angular\",\"api\",\"app\",\"arbitrari\",\"aren't\",\"asynchron\",\"base\",\"bind\",\"block\",\"blog/popup-support\",\"browser\",\"build\",\"built-in\",\"button\",\"button-posit\",\"call\",\"cancel\",\"check\",\"code\",\"come\",\"common\",\"complet\",\"confirm\",\"console.log('got\",\"control\",\"conveni\",\"custom\",\"data\",\"demo\",\"demo](http://codepen.io/ionic/pen/zkmhj\",\"design\",\"detail\",\"develop\",\"dialog\",\"dismiss\",\"doc\",\"each\",\"easi\",\"enter\",\"exampl\",\"execut\",\"expect\",\"experi\",\"featur\",\"feedback\",\"feel\",\"first\",\"full\",\"function\",\"function(\",\"give\",\"go\",\"gotten\",\"great\",\"implement\",\"import\",\"inject\",\"input\",\"inputtyp\",\"io\",\"ionic\",\"ionicpopup\",\"ionicpopup.prompt\",\"ionicpopup.show\",\"javascript\",\"knew\",\"land\",\"limit\",\"littl\",\"live\",\"look\",\"make\",\"mean\",\"mobil\",\"modal\",\"more\",\"nativ\",\"new\",\"now\",\"oh\",\"on\",\"ontap\",\"open\",\"out\",\"password\",\"pop\",\"popup\",\"popup-template.html\",\"possibl\",\"power\",\"promis\",\"prompt\",\"realli\",\"recent\",\"releas\",\"request\",\"return\",\"right\",\"save\",\"scope\",\"scope.data\",\"scope.data.wifi\",\"sdk\",\"see\",\"show\",\"soon\",\"stack\",\"support\",\"sure\",\"system\",\"task\",\"templat\",\"templateurl\",\"text\",\"then(function(password\",\"thing\",\"those\",\"through\",\"titl\",\"todai\",\"true\",\"two\",\"type\",\"unfortun\",\"us\",\"user\",\"want\",\"we'v\",\"week\",\"weekend\",\"wi-fi\",\"wifi\",\"wild\",\"wish\",\"work\"]},\"length\":137},\"tokenStore\":{\"root\":{\"0\":{\"0\":{\"0\":{\"docs\":{\"130\":{\"ref\":130,\"tf\":0.0043859649122807015},\"133\":{\"ref\":133,\"tf\":0.0016750418760469012}}},\"docs\":{}},\"5\":{\"docs\":{\"25\":{\"ref\":25,\"tf\":0.022988505747126436}}},\"docs\":{\"16\":{\"ref\":16,\"tf\":0.014705882352941176},\"54\":{\"ref\":54,\"tf\":0.002574002574002574},\"72\":{\"ref\":72,\"tf\":0.011655011655011656},\"89\":{\"ref\":89,\"tf\":0.022727272727272728},\"106\":{\"ref\":106,\"tf\":0.013333333333333334},\"115\":{\"ref\":115,\"tf\":0.006493506493506494},\"116\":{\"ref\":116,\"tf\":0.016666666666666666},\"130\":{\"ref\":130,\"tf\":0.008771929824561403},\"133\":{\"ref\":133,\"tf\":0.0016750418760469012}},\".\":{\"5\":{\"docs\":{\"90\":{\"ref\":90,\"tf\":0.010416666666666666},\"106\":{\"ref\":106,\"tf\":0.013333333333333334},\"116\":{\"ref\":116,\"tf\":0.005555555555555556}}},\"docs\":{}},\"p\":{\"docs\":{},\"x\":{\"docs\":{\"133\":{\"ref\":133,\"tf\":0.0033500837520938024}}}}},\"1\":{\"0\":{\"0\":{\"0\":{\"0\":{\"docs\":{\"58\":{\"ref\":58,\"tf\":0.00273224043715847}}},\"docs\":{\"72\":{\"ref\":72,\"tf\":0.002331002331002331},\"107\":{\"ref\":107,\"tf\":0.012658227848101266}}},\"docs\":{\"5\":{\"ref\":5,\"tf\":0.02564102564102564},\"27\":{\"ref\":27,\"tf\":0.03225806451612903},\"30\":{\"ref\":30,\"tf\":0.02702702702702703},\"116\":{\"ref\":116,\"tf\":0.005555555555555556},\"119\":{\"ref\":119,\"tf\":0.007874015748031496},\"130\":{\"ref\":130,\"tf\":0.0043859649122807015},\"133\":{\"ref\":133,\"tf\":0.0016750418760469012}}},\"docs\":{\"45\":{\"ref\":45,\"tf\":0.00980392156862745},\"46\":{\"ref\":46,\"tf\":0.019230769230769232},\"56\":{\"ref\":56,\"tf\":0.001594896331738437}},\"p\":{\"docs\":{},\"x\":{\"docs\":{\"72\":{\"ref\":72,\"tf\":0.002331002331002331},\"133\":{\"ref\":133,\"tf\":0.0016750418760469012}}}}},\"2\":{\"3\":{\"4\":{\"docs\":{\"47\":{\"ref\":47,\"tf\":0.1}}},\"docs\":{}},\"docs\":{\"43\":{\"ref\":43,\"tf\":0.006944444444444444},\"45\":{\"ref\":45,\"tf\":0.00980392156862745}}},\"5\":{\"docs\":{},\"p\":{\"docs\":{},\"x\":{\"docs\":{\"52\":{\"ref\":52,\"tf\":0.010416666666666666}}}}},\"7\":{\"0\":{\"docs\":{},\"p\":{\"docs\":{},\"x\":{\"docs\":{\"133\":{\"ref\":133,\"tf\":0.0016750418760469012}}}}},\"docs\":{\"56\":{\"ref\":56,\"tf\":0.001594896331738437}}},\"9\":{\"2\":{\"docs\":{},\".\":{\"1\":{\"6\":{\"8\":{\"docs\":{},\".\":{\"1\":{\"docs\":{},\".\":{\"1\":{\"2\":{\"3\":{\"docs\":{},\":\":{\"8\":{\"0\":{\"0\":{\"0\":{\"docs\":{\"60\":{\"ref\":60,\"tf\":0.0022727272727272726}}},\"docs\":{}},\"docs\":{}},\"docs\":{}},\"docs\":{}}},\"docs\":{}},\"docs\":{}},\"docs\":{}}},\"docs\":{}}},\"docs\":{}},\"docs\":{}},\"docs\":{}}},\"5\":{\"5\":{\"docs\":{\"25\":{\"ref\":25,\"tf\":0.022988505747126436}}},\"docs\":{}},\"docs\":{}},\"docs\":{\"25\":{\"ref\":25,\"tf\":0.022988505747126436},\"43\":{\"ref\":43,\"tf\":0.027777777777777776},\"54\":{\"ref\":54,\"tf\":0.001287001287001287},\"55\":{\"ref\":55,\"tf\":0.02040816326530612},\"57\":{\"ref\":57,\"tf\":0.0023584905660377358},\"72\":{\"ref\":72,\"tf\":0.002331002331002331},\"78\":{\"ref\":78,\"tf\":0.011235955056179775},\"89\":{\"ref\":89,\"tf\":0.045454545454545456},\"106\":{\"ref\":106,\"tf\":0.02666666666666667},\"116\":{\"ref\":116,\"tf\":0.011111111111111112},\"118\":{\"ref\":118,\"tf\":0.01904761904761905},\"119\":{\"ref\":119,\"tf\":0.003937007874015748},\"130\":{\"ref\":130,\"tf\":0.0043859649122807015}},\".\":{\"2\":{\"1\":{\"docs\":{\"35\":{\"ref\":35,\"tf\":0.01818181818181818}}},\"docs\":{}},\"docs\":{}},\"l\":{\"docs\":{},\"i\":{\"docs\":{},\"n\":{\"docs\":{},\"e\":{\"docs\":{\"43\":{\"ref\":43,\"tf\":0.027777777777777776}}}}}},\",\":{\"0\":{\"0\":{\"0\":{\"docs\":{\"72\":{\"ref\":72,\"tf\":0.002331002331002331}}},\"docs\":{}},\"docs\":{}},\"2\":{\"docs\":{},\",\":{\"3\":{\"docs\":{\"88\":{\"ref\":88,\"tf\":0.009708737864077669}}},\"docs\":{}}},\"docs\":{}}},\"2\":{\"0\":{\"0\":{\"9\":{\"docs\":{\"135\":{\"ref\":135,\"tf\":0.0019305019305019305}}},\"docs\":{}},\"1\":{\"1\":{\"docs\":{\"135\":{\"ref\":135,\"tf\":0.0019305019305019305}}},\"docs\":{}},\"4\":{\"8\":{\"docs\":{\"58\":{\"ref\":58,\"tf\":0.00273224043715847}}},\"docs\":{}},\"docs\":{\"44\":{\"ref\":44,\"tf\":0.018518518518518517},\"45\":{\"ref\":45,\"tf\":0.00980392156862745},\"46\":{\"ref\":46,\"tf\":0.019230769230769232}},\"p\":{\"docs\":{},\"x\":{\"docs\":{\"130\":{\"ref\":130,\"tf\":0.0043859649122807015},\"133\":{\"ref\":133,\"tf\":0.0016750418760469012}}}}},\"3\":{\"docs\":{\"43\":{\"ref\":43,\"tf\":0.006944444444444444}}},\"5\":{\"docs\":{\"45\":{\"ref\":45,\"tf\":0.00980392156862745},\"46\":{\"ref\":46,\"tf\":0.019230769230769232},\"58\":{\"ref\":58,\"tf\":0.00273224043715847}}},\"7\":{\"5\":{\"docs\":{\"91\":{\"ref\":91,\"tf\":0.0196078431372549}}},\"docs\":{}},\"docs\":{\"55\":{\"ref\":55,\"tf\":0.02040816326530612},\"56\":{\"ref\":56,\"tf\":0.001594896331738437},\"57\":{\"ref\":57,\"tf\":0.0023584905660377358},\"68\":{\"ref\":68,\"tf\":0.027777777777777776},\"72\":{\"ref\":72,\"tf\":0.004662004662004662},\"89\":{\"ref\":89,\"tf\":0.022727272727272728},\"117\":{\"ref\":117,\"tf\":0.007575757575757576},\"118\":{\"ref\":118,\"tf\":0.01904761904761905},\"133\":{\"ref\":133,\"tf\":0.0016750418760469012}},\"-\":{\"1\":{\"docs\":{},\"b\":{\"docs\":{\"38\":{\"ref\":38,\"tf\":0.011627906976744186}}}},\"docs\":{}},\"l\":{\"docs\":{},\"i\":{\"docs\":{},\"n\":{\"docs\":{},\"e\":{\"docs\":{\"43\":{\"ref\":43,\"tf\":0.027777777777777776}}}}}},\".\":{\"3\":{\"docs\":{\"56\":{\"ref\":56,\"tf\":0.001594896331738437},\"67\":{\"ref\":67,\"tf\":0.027777777777777776}}},\"docs\":{}}},\"3\":{\"0\":{\"0\":{\"0\":{\"docs\":{\"114\":{\"ref\":114,\"tf\":0.001594896331738437}}},\"docs\":{\"133\":{\"ref\":133,\"tf\":0.0016750418760469012},\"134\":{\"ref\":134,\"tf\":0.0011507479861910242}},\"m\":{\"docs\":{\"104\":{\"ref\":104,\"tf\":0.01694915254237288},\"134\":{\"ref\":134,\"tf\":2.0126582278481013}}}},\"docs\":{},\"p\":{\"docs\":{},\"x\":{\"docs\":{\"133\":{\"ref\":133,\"tf\":0.005025125628140704}}}}},\"2\":{\"docs\":{\"134\":{\"ref\":134,\"tf\":0.0011507479861910242}},\"-\":{\"docs\":{},\"b\":{\"docs\":{},\"i\":{\"docs\":{},\"t\":{\"docs\":{\"56\":{\"ref\":56,\"tf\":0.003189792663476874}}}}}}},\"3\":{\"docs\":{\"72\":{\"ref\":72,\"tf\":0.006993006993006993}},\".\":{\"3\":{\"3\":{\"3\":{\"3\":{\"docs\":{\"45\":{\"ref\":45,\"tf\":0.00980392156862745},\"46\":{\"ref\":46,\"tf\":0.019230769230769232}}},\"docs\":{}},\"docs\":{}},\"docs\":{}},\"docs\":{}}},\"9\":{\"docs\":{},\";\":{\"docs\":{},\"s\":{\"docs\":{},\"l\":{\"docs\":{},\"i\":{\"docs\":{},\"d\":{\"docs\":{},\"e\":{\"docs\":{},\"-\":{\"docs\":{},\"i\":{\"docs\":{},\"n\":{\"docs\":{},\"-\":{\"docs\":{},\"u\":{\"docs\":{},\"p\":{\"docs\":{},\"&\":{\"docs\":{},\"#\":{\"3\":{\"9\":{\"docs\":{\"71\":{\"ref\":71,\"tf\":0.008}}},\"docs\":{}},\"docs\":{}}}}}}}}}}}}}},\"x\":{\"docs\":{},\"&\":{\"docs\":{},\"#\":{\"3\":{\"9\":{\"docs\":{\"74\":{\"ref\":74,\"tf\":0.005988023952095809},\"90\":{\"ref\":90,\"tf\":0.010416666666666666}}},\"docs\":{}},\"docs\":{}}},\"y\":{\"docs\":{},\"&\":{\"docs\":{},\"#\":{\"3\":{\"9\":{\"docs\":{\"74\":{\"ref\":74,\"tf\":0.005988023952095809},\"90\":{\"ref\":90,\"tf\":0.010416666666666666}}},\"docs\":{}},\"docs\":{}}}}},\"y\":{\"docs\":{},\"&\":{\"docs\":{},\"#\":{\"3\":{\"9\":{\"docs\":{\"74\":{\"ref\":74,\"tf\":0.011976047904191617},\"90\":{\"ref\":90,\"tf\":0.020833333333333332}}},\"docs\":{}},\"docs\":{}}}},\"c\":{\"docs\":{},\"e\":{\"docs\":{},\"n\":{\"docs\":{},\"t\":{\"docs\":{},\"e\":{\"docs\":{},\"r\":{\"docs\":{},\"&\":{\"docs\":{},\"#\":{\"3\":{\"9\":{\"docs\":{\"76\":{\"ref\":76,\"tf\":0.03773584905660377},\"77\":{\"ref\":77,\"tf\":0.03773584905660377},\"82\":{\"ref\":82,\"tf\":0.015625},\"112\":{\"ref\":112,\"tf\":0.011764705882352941}}},\"docs\":{}},\"docs\":{}}}}}}}},\"a\":{\"docs\":{},\"n\":{\"docs\":{},\"c\":{\"docs\":{},\"e\":{\"docs\":{},\"l\":{\"docs\":{},\"&\":{\"docs\":{},\"#\":{\"3\":{\"9\":{\"docs\":{\"105\":{\"ref\":105,\"tf\":0.005847953216374269},\"114\":{\"ref\":114,\"tf\":0.004784688995215311}}},\"docs\":{}},\"docs\":{}}}}}}}}},\"l\":{\"docs\":{},\"e\":{\"docs\":{},\"f\":{\"docs\":{},\"t\":{\"docs\":{},\"&\":{\"docs\":{},\"#\":{\"3\":{\"9\":{\"docs\":{\"76\":{\"ref\":76,\"tf\":0.018867924528301886},\"77\":{\"ref\":77,\"tf\":0.018867924528301886},\"82\":{\"ref\":82,\"tf\":0.0078125},\"83\":{\"ref\":83,\"tf\":0.02127659574468085},\"91\":{\"ref\":91,\"tf\":0.0196078431372549},\"112\":{\"ref\":112,\"tf\":0.0058823529411764705}}},\"docs\":{}},\"docs\":{}}}}}}},\"r\":{\"docs\":{},\"i\":{\"docs\":{},\"g\":{\"docs\":{},\"h\":{\"docs\":{},\"t\":{\"docs\":{},\"&\":{\"docs\":{},\"#\":{\"3\":{\"9\":{\"docs\":{\"76\":{\"ref\":76,\"tf\":0.018867924528301886},\"77\":{\"ref\":77,\"tf\":0.018867924528301886},\"82\":{\"ref\":82,\"tf\":0.0078125},\"83\":{\"ref\":83,\"tf\":0.02127659574468085},\"91\":{\"ref\":91,\"tf\":0.0196078431372549},\"112\":{\"ref\":112,\"tf\":0.0058823529411764705}}},\"docs\":{}},\"docs\":{}}}}}}}},\"i\":{\"docs\":{},\"o\":{\"docs\":{},\"n\":{\"docs\":{},\"-\":{\"docs\":{},\"l\":{\"docs\":{},\"o\":{\"docs\":{},\"a\":{\"docs\":{},\"d\":{\"docs\":{},\"i\":{\"docs\":{},\"n\":{\"docs\":{},\"g\":{\"docs\":{},\"-\":{\"docs\":{},\"d\":{\"docs\":{},\"&\":{\"docs\":{},\"#\":{\"3\":{\"9\":{\"docs\":{\"78\":{\"ref\":78,\"tf\":0.011235955056179775}}},\"docs\":{}},\"docs\":{}}}}}}}}}}}},\"a\":{\"docs\":{},\"r\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"w\":{\"docs\":{},\"-\":{\"docs\":{},\"d\":{\"docs\":{},\"o\":{\"docs\":{},\"w\":{\"docs\":{},\"n\":{\"docs\":{},\"-\":{\"docs\":{},\"c\":{\"docs\":{},\"&\":{\"docs\":{},\"#\":{\"3\":{\"9\":{\"docs\":{\"88\":{\"ref\":88,\"tf\":0.009708737864077669}}},\"docs\":{}},\"docs\":{}}}}}}}}}}}}}}}}}},\"n\":{\"docs\":{},\"d\":{\"docs\":{},\"e\":{\"docs\":{},\"x\":{\"docs\":{},\"&\":{\"docs\":{},\"#\":{\"3\":{\"9\":{\"docs\":{\"94\":{\"ref\":94,\"tf\":0.011111111111111112}}},\"docs\":{}},\"docs\":{}}}}}}}},\"$\":{\"docs\":{},\"i\":{\"docs\":{},\"n\":{\"docs\":{},\"d\":{\"docs\":{},\"e\":{\"docs\":{},\"x\":{\"docs\":{},\"&\":{\"docs\":{},\"#\":{\"3\":{\"9\":{\"docs\":{\"94\":{\"ref\":94,\"tf\":0.011111111111111112}}},\"docs\":{}},\"docs\":{}}}}}}}}},\"d\":{\"docs\":{},\"a\":{\"docs\":{},\"n\":{\"docs\":{},\"g\":{\"docs\":{},\"e\":{\"docs\":{},\"r\":{\"docs\":{},\"&\":{\"docs\":{},\"#\":{\"3\":{\"9\":{\"docs\":{\"105\":{\"ref\":105,\"tf\":0.005847953216374269}}},\"docs\":{}},\"docs\":{}}}}}}}}},\"b\":{\"docs\":{},\"a\":{\"docs\":{},\"c\":{\"docs\":{},\"k\":{\"docs\":{},\"&\":{\"docs\":{},\"#\":{\"3\":{\"9\":{\"docs\":{\"112\":{\"ref\":112,\"tf\":0.0058823529411764705}}},\"docs\":{}},\"docs\":{}}}}}},\"u\":{\"docs\":{},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"o\":{\"docs\":{},\"n\":{\"docs\":{},\"-\":{\"docs\":{},\"d\":{\"docs\":{},\"e\":{\"docs\":{},\"f\":{\"docs\":{},\"a\":{\"docs\":{},\"u\":{\"docs\":{},\"l\":{\"docs\":{},\"t\":{\"docs\":{},\"&\":{\"docs\":{},\"#\":{\"3\":{\"9\":{\"docs\":{\"114\":{\"ref\":114,\"tf\":0.004784688995215311}}},\"docs\":{}},\"docs\":{}}}}}}}}}},\"p\":{\"docs\":{},\"o\":{\"docs\":{},\"s\":{\"docs\":{},\"i\":{\"docs\":{},\"t\":{\"docs\":{},\"i\":{\"docs\":{},\"v\":{\"docs\":{},\"e\":{\"docs\":{},\"&\":{\"docs\":{},\"#\":{\"3\":{\"9\":{\"docs\":{\"114\":{\"ref\":114,\"tf\":0.006379585326953748}}},\"docs\":{}},\"docs\":{}}}}}}}}}}}}}}}}}},\"f\":{\"docs\":{},\"o\":{\"docs\":{},\"r\":{\"docs\":{},\"w\":{\"docs\":{},\"a\":{\"docs\":{},\"r\":{\"docs\":{},\"d\":{\"docs\":{},\"&\":{\"docs\":{},\"#\":{\"3\":{\"9\":{\"docs\":{\"112\":{\"ref\":112,\"tf\":0.0058823529411764705}}},\"docs\":{}},\"docs\":{}}}}}}}}}},\"&\":{\"docs\":{},\"#\":{\"3\":{\"9\":{\"docs\":{\"114\":{\"ref\":114,\"tf\":0.03668261562998405}}},\"docs\":{}},\"docs\":{}}},\"o\":{\"docs\":{},\"k\":{\"docs\":{},\"&\":{\"docs\":{},\"#\":{\"3\":{\"9\":{\"docs\":{\"114\":{\"ref\":114,\"tf\":0.006379585326953748}}},\"docs\":{}},\"docs\":{}}}}},\"t\":{\"docs\":{},\"e\":{\"docs\":{},\"x\":{\"docs\":{},\"t\":{\"docs\":{},\"&\":{\"docs\":{},\"#\":{\"3\":{\"9\":{\"docs\":{\"114\":{\"ref\":114,\"tf\":0.001594896331738437}}},\"docs\":{}},\"docs\":{}}}}}}},\"p\":{\"docs\":{},\"a\":{\"docs\":{},\"n\":{\"docs\":{},\"e\":{\"docs\":{},\"&\":{\"docs\":{},\"#\":{\"3\":{\"9\":{\"docs\":{\"123\":{\"ref\":123,\"tf\":0.0035211267605633804}}},\"docs\":{}},\"docs\":{}}}}}}}}},\"docs\":{\"43\":{\"ref\":43,\"tf\":0.034722222222222224},\"55\":{\"ref\":55,\"tf\":0.02040816326530612},\"56\":{\"ref\":56,\"tf\":0.001594896331738437},\"59\":{\"ref\":59,\"tf\":0.002785515320334262},\"72\":{\"ref\":72,\"tf\":0.002331002331002331},\"89\":{\"ref\":89,\"tf\":0.022727272727272728},\"90\":{\"ref\":90,\"tf\":0.010416666666666666},\"114\":{\"ref\":114,\"tf\":0.001594896331738437}},\"r\":{\"docs\":{},\"d\":{\"docs\":{\"57\":{\"ref\":57,\"tf\":0.0023584905660377358}}}},\".\":{\"4\":{\"docs\":{},\".\":{\"0\":{\"docs\":{\"66\":{\"ref\":66,\"tf\":0.043478260869565216}}},\"docs\":{}}},\"docs\":{},\"x\":{\"docs\":{\"60\":{\"ref\":60,\"tf\":0.0022727272727272726}}}},\"-\":{\"docs\":{},\"w\":{\"docs\":{},\"i\":{\"docs\":{},\"d\":{\"docs\":{},\"e\":{\"docs\":{\"72\":{\"ref\":72,\"tf\":0.002331002331002331}}}}}}},\"<\":{\"docs\":{},\"/\":{\"docs\":{},\"l\":{\"docs\":{},\"i\":{\"docs\":{\"133\":{\"ref\":133,\"tf\":0.0016750418760469012}}}}}}},\"4\":{\"0\":{\"0\":{\"0\":{\"docs\":{\"94\":{\"ref\":94,\"tf\":0.011111111111111112}}},\"docs\":{}},\"docs\":{}},\"3\":{\"docs\":{},\"c\":{\"docs\":{},\"e\":{\"docs\":{},\"e\":{\"6\":{\"docs\":{\"129\":{\"ref\":129,\"tf\":0.0017391304347826088}}},\"docs\":{}}}}},\"4\":{\"4\":{\"docs\":{\"129\":{\"ref\":129,\"tf\":0.0017391304347826088}}},\"docs\":{}},\"docs\":{\"55\":{\"ref\":55,\"tf\":0.02040816326530612},\"58\":{\"ref\":58,\"tf\":0.00273224043715847},\"59\":{\"ref\":59,\"tf\":0.002785515320334262},\"60\":{\"ref\":60,\"tf\":0.0022727272727272726},\"67\":{\"ref\":67,\"tf\":0.027777777777777776},\"72\":{\"ref\":72,\"tf\":0.002331002331002331},\"89\":{\"ref\":89,\"tf\":0.022727272727272728}},\".\":{\"1\":{\"docs\":{\"56\":{\"ref\":56,\"tf\":0.001594896331738437}}},\"4\":{\"docs\":{\"60\":{\"ref\":60,\"tf\":0.0022727272727272726}}},\"docs\":{}},\"a\":{\"8\":{\"7\":{\"docs\":{},\"e\":{\"docs\":{\"129\":{\"ref\":129,\"tf\":0.0017391304347826088}}}},\"docs\":{}},\"docs\":{}},\"e\":{\"docs\":{},\"a\":{\"4\":{\"docs\":{},\"b\":{\"docs\":{\"129\":{\"ref\":129,\"tf\":0.0017391304347826088}}}},\"docs\":{}}}},\"5\":{\"0\":{\"0\":{\"docs\":{\"51\":{\"ref\":51,\"tf\":0.01694915254237288},\"126\":{\"ref\":126,\"tf\":0.011111111111111112}}},\"docs\":{\"45\":{\"ref\":45,\"tf\":0.00980392156862745},\"46\":{\"ref\":46,\"tf\":0.019230769230769232},\"72\":{\"ref\":72,\"tf\":0.002331002331002331},\"116\":{\"ref\":116,\"tf\":0.011111111111111112}}},\"docs\":{\"25\":{\"ref\":25,\"tf\":0.022988505747126436},\"54\":{\"ref\":54,\"tf\":0.002574002574002574},\"55\":{\"ref\":55,\"tf\":0.02040816326530612},\"56\":{\"ref\":56,\"tf\":0.001594896331738437},\"60\":{\"ref\":60,\"tf\":0.0022727272727272726},\"72\":{\"ref\":72,\"tf\":0.002331002331002331}}},\"6\":{\"0\":{\"docs\":{\"72\":{\"ref\":72,\"tf\":0.002331002331002331}}},\"4\":{\"docs\":{},\"-\":{\"docs\":{},\"b\":{\"docs\":{},\"i\":{\"docs\":{},\"t\":{\"docs\":{\"56\":{\"ref\":56,\"tf\":0.001594896331738437}}}}}}},\"6\":{\"docs\":{},\".\":{\"6\":{\"6\":{\"6\":{\"6\":{\"docs\":{\"45\":{\"ref\":45,\"tf\":0.00980392156862745},\"46\":{\"ref\":46,\"tf\":0.019230769230769232}}},\"docs\":{}},\"docs\":{}},\"docs\":{}},\"docs\":{}},\"c\":{\"docs\":{},\"c\":{\"3\":{\"3\":{\"docs\":{\"129\":{\"ref\":129,\"tf\":0.0017391304347826088}}},\"docs\":{}},\"docs\":{}}}},\"docs\":{\"43\":{\"ref\":43,\"tf\":0.006944444444444444},\"55\":{\"ref\":55,\"tf\":0.02040816326530612},\"56\":{\"ref\":56,\"tf\":0.001594896331738437},\"67\":{\"ref\":67,\"tf\":0.027777777777777776},\"72\":{\"ref\":72,\"tf\":0.002331002331002331}}},\"7\":{\"5\":{\"docs\":{\"45\":{\"ref\":45,\"tf\":0.00980392156862745},\"46\":{\"ref\":46,\"tf\":0.019230769230769232}}},\"docs\":{\"43\":{\"ref\":43,\"tf\":0.006944444444444444},\"60\":{\"ref\":60,\"tf\":0.0022727272727272726},\"72\":{\"ref\":72,\"tf\":0.002331002331002331},\"130\":{\"ref\":130,\"tf\":0.008771929824561403}}},\"8\":{\"0\":{\"0\":{\"0\":{\"docs\":{\"60\":{\"ref\":60,\"tf\":0.0022727272727272726}}},\"docs\":{}},\"docs\":{\"45\":{\"ref\":45,\"tf\":0.00980392156862745},\"46\":{\"ref\":46,\"tf\":0.019230769230769232}},\"p\":{\"docs\":{},\"x\":{\"docs\":{\"133\":{\"ref\":133,\"tf\":0.0016750418760469012}}}}},\"8\":{\"docs\":{\"35\":{\"ref\":35,\"tf\":0.01818181818181818}}},\"docs\":{},\"a\":{\"6\":{\"docs\":{},\"d\":{\"docs\":{},\"e\":{\"9\":{\"docs\":{\"129\":{\"ref\":129,\"tf\":0.0017391304347826088}}},\"docs\":{}}}},\"docs\":{}}},\"9\":{\"0\":{\"docs\":{\"45\":{\"ref\":45,\"tf\":0.00980392156862745},\"46\":{\"ref\":46,\"tf\":0.019230769230769232}}},\"9\":{\"9\":{\"9\":{\"docs\":{\"130\":{\"ref\":130,\"tf\":0.0043859649122807015}}},\"docs\":{}},\"docs\":{\"58\":{\"ref\":58,\"tf\":0.00273224043715847},\"60\":{\"ref\":60,\"tf\":0.0022727272727272726}}},\"docs\":{}},\"docs\":{},\"a\":{\"docs\":{},\"c\":{\"docs\":{},\"t\":{\"docs\":{\"36\":{\"ref\":36,\"tf\":0.017857142857142856}},\"i\":{\"docs\":{},\"o\":{\"docs\":{},\"n\":{\"docs\":{\"0\":{\"ref\":0,\"tf\":0.03225806451612903},\"74\":{\"ref\":74,\"tf\":0.005988023952095809},\"81\":{\"ref\":81,\"tf\":0.030303030303030304},\"105\":{\"ref\":105,\"tf\":0.07017543859649122},\"111\":{\"ref\":111,\"tf\":0.03007518796992481},\"113\":{\"ref\":113,\"tf\":0.028368794326241134},\"124\":{\"ref\":124,\"tf\":0.010309278350515464}},\"s\":{\"docs\":{},\"h\":{\"docs\":{},\"e\":{\"docs\":{},\"e\":{\"docs\":{},\"t\":{\"docs\":{\"105\":{\"ref\":105,\"tf\":0.005847953216374269},\"113\":{\"ref\":113,\"tf\":0.014184397163120567}}}}}}},\"i\":{\"docs\":{},\"d\":{\"docs\":{\"113\":{\"ref\":113,\"tf\":0.014184397163120567}}}}}},\"v\":{\"docs\":{\"16\":{\"ref\":16,\"tf\":0.007352941176470588},\"54\":{\"ref\":54,\"tf\":0.005148005148005148},\"103\":{\"ref\":103,\"tf\":0.006493506493506494},\"104\":{\"ref\":104,\"tf\":0.00423728813559322},\"110\":{\"ref\":110,\"tf\":0.01020408163265306},\"124\":{\"ref\":124,\"tf\":0.010309278350515464}},\"e\":{\"docs\":{},\"p\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"j\":{\"docs\":{},\"e\":{\"docs\":{},\"c\":{\"docs\":{},\"t\":{\"docs\":{},\".\":{\"docs\":{},\"t\":{\"docs\":{},\"i\":{\"docs\":{},\"t\":{\"docs\":{},\"l\":{\"docs\":{\"54\":{\"ref\":54,\"tf\":0.001287001287001287}}}}}}}}}}}}}},\"-\":{\"docs\":{},\"s\":{\"docs\":{},\"l\":{\"docs\":{},\"i\":{\"docs\":{},\"d\":{\"docs\":{\"94\":{\"ref\":94,\"tf\":0.011111111111111112}}}}}}}}}},\"u\":{\"docs\":{},\"a\":{\"docs\":{},\"l\":{\"docs\":{\"54\":{\"ref\":54,\"tf\":0.001287001287001287},\"60\":{\"ref\":60,\"tf\":0.004545454545454545},\"134\":{\"ref\":134,\"tf\":0.0034522439585730723}}}}}},\"c\":{\"docs\":{},\"o\":{\"docs\":{},\"u\":{\"docs\":{},\"n\":{\"docs\":{},\"t\":{\"docs\":{\"29\":{\"ref\":29,\"tf\":0.02564102564102564},\"58\":{\"ref\":58,\"tf\":0.00546448087431694},\"60\":{\"ref\":60,\"tf\":0.004545454545454545}}}}}},\"e\":{\"docs\":{},\"s\":{\"docs\":{},\"s\":{\"docs\":{\"57\":{\"ref\":57,\"tf\":0.0047169811320754715},\"135\":{\"ref\":135,\"tf\":0.003861003861003861}}}},\"p\":{\"docs\":{},\"t\":{\"docs\":{\"58\":{\"ref\":58,\"tf\":0.00273224043715847}}}}},\"u\":{\"docs\":{},\"r\":{\"docs\":{\"134\":{\"ref\":134,\"tf\":0.0011507479861910242}}}}},\"h\":{\"docs\":{},\"i\":{\"docs\":{},\"e\":{\"docs\":{},\"v\":{\"docs\":{\"129\":{\"ref\":129,\"tf\":0.0017391304347826088},\"130\":{\"ref\":130,\"tf\":0.0043859649122807015}}}}}}},\"p\":{\"docs\":{},\"p\":{\"docs\":{\"2\":{\"ref\":2,\"tf\":0.025},\"36\":{\"ref\":36,\"tf\":0.017857142857142856},\"50\":{\"ref\":50,\"tf\":0.017857142857142856},\"52\":{\"ref\":52,\"tf\":0.020833333333333332},\"54\":{\"ref\":54,\"tf\":2.511583011583012},\"55\":{\"ref\":55,\"tf\":0.061224489795918366},\"56\":{\"ref\":56,\"tf\":0.02073365231259968},\"57\":{\"ref\":57,\"tf\":0.049528301886792456},\"58\":{\"ref\":58,\"tf\":3.3688524590163933},\"59\":{\"ref\":59,\"tf\":0.03899721448467967},\"60\":{\"ref\":60,\"tf\":5.038636363636364},\"61\":{\"ref\":61,\"tf\":0.05434782608695652},\"63\":{\"ref\":63,\"tf\":0.024390243902439025},\"64\":{\"ref\":64,\"tf\":0.0625},\"66\":{\"ref\":66,\"tf\":0.043478260869565216},\"67\":{\"ref\":67,\"tf\":0.05555555555555555},\"70\":{\"ref\":70,\"tf\":0.023809523809523808},\"80\":{\"ref\":80,\"tf\":0.007692307692307693},\"84\":{\"ref\":84,\"tf\":0.02181818181818182},\"103\":{\"ref\":103,\"tf\":0.012987012987012988},\"104\":{\"ref\":104,\"tf\":0.00423728813559322},\"106\":{\"ref\":106,\"tf\":0.013333333333333334},\"121\":{\"ref\":121,\"tf\":0.029069767441860465},\"123\":{\"ref\":123,\"tf\":0.007042253521126761},\"126\":{\"ref\":126,\"tf\":0.011111111111111112},\"127\":{\"ref\":127,\"tf\":0.026490066225165563},\"128\":{\"ref\":128,\"tf\":0.07142857142857142},\"129\":{\"ref\":129,\"tf\":2.5121739130434784},\"130\":{\"ref\":130,\"tf\":0.013157894736842105},\"132\":{\"ref\":132,\"tf\":0.0641025641025641},\"133\":{\"ref\":133,\"tf\":3.3551088777219427},\"134\":{\"ref\":134,\"tf\":2.0103567318757194},\"135\":{\"ref\":135,\"tf\":0.023166023166023165},\"136\":{\"ref\":136,\"tf\":0.005050505050505051}},\"l\":{\"docs\":{\"60\":{\"ref\":60,\"tf\":0.0022727272727272726}},\"i\":{\"docs\":{\"4\":{\"ref\":4,\"tf\":0.022727272727272728},\"5\":{\"ref\":5,\"tf\":0.05128205128205128},\"6\":{\"ref\":6,\"tf\":0.07142857142857142},\"8\":{\"ref\":8,\"tf\":0.05405405405405406},\"9\":{\"ref\":9,\"tf\":0.02702702702702703},\"16\":{\"ref\":16,\"tf\":0.007352941176470588},\"30\":{\"ref\":30,\"tf\":0.02702702702702703},\"47\":{\"ref\":47,\"tf\":0.01},\"52\":{\"ref\":52,\"tf\":0.010416666666666666},\"72\":{\"ref\":72,\"tf\":0.006993006993006993},\"76\":{\"ref\":76,\"tf\":0.018867924528301886},\"77\":{\"ref\":77,\"tf\":0.018867924528301886}},\"c\":{\"docs\":{\"54\":{\"ref\":54,\"tf\":0.001287001287001287},\"57\":{\"ref\":57,\"tf\":0.01179245283018868},\"58\":{\"ref\":58,\"tf\":0.00273224043715847},\"59\":{\"ref\":59,\"tf\":0.005571030640668524},\"60\":{\"ref\":60,\"tf\":0.0022727272727272726},\"82\":{\"ref\":82,\"tf\":0.0078125},\"84\":{\"ref\":84,\"tf\":0.0036363636363636364},\"123\":{\"ref\":123,\"tf\":0.0035211267605633804}}}},\"e\":{\"docs\":{},\"t\":{\"docs\":{\"34\":{\"ref\":34,\"tf\":0.016666666666666666}}},\"'\":{\"docs\":{\"58\":{\"ref\":58,\"tf\":0.00273224043715847}}}}},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"a\":{\"docs\":{},\"c\":{\"docs\":{},\"h\":{\"docs\":{\"12\":{\"ref\":12,\"tf\":0.05}}}}},\"p\":{\"docs\":{},\"r\":{\"docs\":{},\"i\":{\"docs\":{\"26\":{\"ref\":26,\"tf\":0.021739130434782608}}}}}}},\"e\":{\"docs\":{},\"a\":{\"docs\":{},\"r\":{\"docs\":{\"30\":{\"ref\":30,\"tf\":0.02702702702702703},\"38\":{\"ref\":38,\"tf\":0.011627906976744186},\"103\":{\"ref\":103,\"tf\":0.006493506493506494},\"107\":{\"ref\":107,\"tf\":0.012658227848101266}}}},\"n\":{\"docs\":{},\"d\":{\"docs\":{\"105\":{\"ref\":105,\"tf\":0.005847953216374269}}}}},\".\":{\"docs\":{},\"j\":{\"docs\":{\"54\":{\"ref\":54,\"tf\":0.002574002574002574}}},\"c\":{\"docs\":{},\"o\":{\"docs\":{},\"n\":{\"docs\":{},\"f\":{\"docs\":{},\"i\":{\"docs\":{},\"g\":{\"docs\":{},\"(\":{\"docs\":{},\"f\":{\"docs\":{},\"u\":{\"docs\":{},\"n\":{\"docs\":{},\"c\":{\"docs\":{},\"t\":{\"docs\":{},\"i\":{\"docs\":{},\"o\":{\"docs\":{},\"n\":{\"docs\":{},\"(\":{\"docs\":{},\"$\":{\"docs\":{},\"s\":{\"docs\":{},\"t\":{\"docs\":{},\"a\":{\"docs\":{},\"t\":{\"docs\":{},\"e\":{\"docs\":{},\"p\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"v\":{\"docs\":{},\"i\":{\"docs\":{},\"d\":{\"docs\":{\"84\":{\"ref\":84,\"tf\":0.0036363636363636364}}}}}}}}}}}}}}}}}}}}}}}}}}}}},\"s\":{\"docs\":{},\"s\":{\"docs\":{\"129\":{\"ref\":129,\"tf\":0.0017391304347826088}}}}},\"s\":{\"docs\":{},\"c\":{\"docs\":{},\"s\":{\"docs\":{},\"s\":{\"docs\":{\"129\":{\"ref\":129,\"tf\":0.006956521739130435}}}}}}},\"]\":{\"docs\":{},\"(\":{\"docs\":{},\"s\":{\"docs\":{},\"t\":{\"docs\":{},\"a\":{\"docs\":{},\"r\":{\"docs\":{},\"t\":{\"docs\":{},\"i\":{\"docs\":{},\"n\":{\"docs\":{},\"g\":{\"docs\":{},\".\":{\"docs\":{},\"h\":{\"docs\":{},\"t\":{\"docs\":{},\"m\":{\"docs\":{},\"l\":{\"docs\":{\"56\":{\"ref\":56,\"tf\":0.001594896331738437}}}}}}}}}}}}}}},\"h\":{\"docs\":{},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"p\":{\"docs\":{},\":\":{\"docs\":{},\"/\":{\"docs\":{},\"/\":{\"docs\":{},\"i\":{\"docs\":{},\"o\":{\"docs\":{},\"n\":{\"docs\":{},\"i\":{\"docs\":{},\"c\":{\"docs\":{},\"f\":{\"docs\":{},\"r\":{\"docs\":{},\"a\":{\"docs\":{},\"m\":{\"docs\":{},\"e\":{\"docs\":{},\"w\":{\"docs\":{},\"o\":{\"docs\":{},\"r\":{\"docs\":{},\"k\":{\"docs\":{},\".\":{\"docs\":{},\"c\":{\"docs\":{},\"o\":{\"docs\":{},\"m\":{\"docs\":{},\".\":{\"docs\":{},\"s\":{\"3\":{\"docs\":{},\".\":{\"docs\":{},\"a\":{\"docs\":{},\"m\":{\"docs\":{},\"a\":{\"docs\":{},\"z\":{\"docs\":{},\"o\":{\"docs\":{},\"n\":{\"docs\":{},\"a\":{\"docs\":{},\"w\":{\"docs\":{},\"s\":{\"docs\":{},\".\":{\"docs\":{},\"c\":{\"docs\":{},\"o\":{\"docs\":{},\"m\":{\"docs\":{},\"/\":{\"docs\":{},\"g\":{\"docs\":{},\"u\":{\"docs\":{},\"i\":{\"docs\":{},\"d\":{\"docs\":{},\"e\":{\"docs\":{},\"/\":{\"0\":{\"docs\":{},\".\":{\"1\":{\"docs\":{},\".\":{\"0\":{\"docs\":{},\"/\":{\"5\":{\"docs\":{},\"-\":{\"docs\":{},\"p\":{\"docs\":{},\"l\":{\"docs\":{},\"a\":{\"docs\":{},\"y\":{\"docs\":{},\".\":{\"docs\":{},\"p\":{\"docs\":{},\"n\":{\"docs\":{},\"g\":{\"docs\":{\"58\":{\"ref\":58,\"tf\":0.00273224043715847}}}}}}}}}}}},\"docs\":{}}},\"docs\":{}}},\"docs\":{}}},\"docs\":{}}}}}}}}}}}}}}}}}}}}}}},\"docs\":{}}}}}}}}}}}}}}}}}}}}}}}}}}}},\"t\":{\"docs\":{},\"e\":{\"docs\":{},\"s\":{\"docs\":{},\"t\":{\"docs\":{},\"i\":{\"docs\":{},\"n\":{\"docs\":{},\"g\":{\"docs\":{},\".\":{\"docs\":{},\"h\":{\"docs\":{},\"t\":{\"docs\":{},\"m\":{\"docs\":{},\"l\":{\"docs\":{\"59\":{\"ref\":59,\"tf\":0.002785515320334262}}}}}}}}}}}}}},\"b\":{\"docs\":{},\"u\":{\"docs\":{},\"i\":{\"docs\":{},\"l\":{\"docs\":{},\"d\":{\"docs\":{},\"i\":{\"docs\":{},\"n\":{\"docs\":{},\"g\":{\"docs\":{},\".\":{\"docs\":{},\"h\":{\"docs\":{},\"t\":{\"docs\":{},\"m\":{\"docs\":{},\"l\":{\"docs\":{\"60\":{\"ref\":60,\"tf\":0.0022727272727272726}}}}}}}}}}}}}}}}},\"'\":{\"docs\":{\"103\":{\"ref\":103,\"tf\":0.006493506493506494},\"129\":{\"ref\":129,\"tf\":0.01217391304347826}}},\"s\":{\"docs\":{},\"]\":{\"docs\":{},\"(\":{\"docs\":{},\"/\":{\"docs\":{},\"t\":{\"docs\":{},\"u\":{\"docs\":{},\"t\":{\"docs\":{},\"o\":{\"docs\":{},\"r\":{\"docs\":{},\"i\":{\"docs\":{},\"a\":{\"docs\":{},\"l\":{\"docs\":{},\"s\":{\"docs\":{},\"/\":{\"docs\":{},\"f\":{\"docs\":{},\"u\":{\"docs\":{},\"l\":{\"docs\":{},\"l\":{\"docs\":{},\"s\":{\"docs\":{},\"c\":{\"docs\":{},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\"e\":{\"docs\":{},\"n\":{\"docs\":{},\"-\":{\"docs\":{},\"a\":{\"docs\":{},\"p\":{\"docs\":{},\"p\":{\"docs\":{\"128\":{\"ref\":128,\"tf\":0.017857142857142856}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},\"!\":{\"docs\":{},\"<\":{\"docs\":{},\"/\":{\"docs\":{},\"h\":{\"3\":{\"docs\":{\"133\":{\"ref\":133,\"tf\":0.0016750418760469012}}},\"docs\":{}}}}},\"c\":{\"docs\":{},\"t\":{\"docs\":{},\"r\":{\"docs\":{},\"l\":{\"docs\":{\"133\":{\"ref\":133,\"tf\":0.0033500837520938024}}}}}},\"-\":{\"docs\":{},\"l\":{\"docs\":{},\"i\":{\"docs\":{},\"k\":{\"docs\":{\"134\":{\"ref\":134,\"tf\":0.005753739930955121}},\"e\":{\"docs\":{},\".\":{\"docs\":{},\".\":{\"docs\":{},\".\":{\"docs\":{},\"i\":{\"docs\":{},\"t\":{\"docs\":{\"134\":{\"ref\":134,\"tf\":0.0011507479861910242}}}}}}}}}}}}},\"a\":{\"docs\":{},\"c\":{\"docs\":{},\"h\":{\"docs\":{\"56\":{\"ref\":56,\"tf\":0.001594896331738437},\"68\":{\"ref\":68,\"tf\":0.027777777777777776},\"135\":{\"ref\":135,\"tf\":0.0019305019305019305}}}}},\"t\":{\"docs\":{},\"-\":{\"docs\":{},\"g\":{\"docs\":{},\"e\":{\"docs\":{},\"t\":{\"docs\":{\"56\":{\"ref\":56,\"tf\":0.001594896331738437}}}}}}},\"k\":{\"docs\":{\"58\":{\"ref\":58,\"tf\":0.030054644808743168}}},\"i\":{\"docs\":{\"67\":{\"ref\":67,\"tf\":0.027777777777777776},\"72\":{\"ref\":72,\"tf\":0.002331002331002331},\"74\":{\"ref\":74,\"tf\":0.005988023952095809},\"76\":{\"ref\":76,\"tf\":0.018867924528301886},\"77\":{\"ref\":77,\"tf\":0.018867924528301886},\"78\":{\"ref\":78,\"tf\":0.011235955056179775},\"80\":{\"ref\":80,\"tf\":0.007692307692307693},\"82\":{\"ref\":82,\"tf\":0.0078125},\"83\":{\"ref\":83,\"tf\":0.02127659574468085},\"84\":{\"ref\":84,\"tf\":0.0036363636363636364},\"88\":{\"ref\":88,\"tf\":0.009708737864077669},\"89\":{\"ref\":89,\"tf\":0.022727272727272728},\"90\":{\"ref\":90,\"tf\":0.010416666666666666},\"91\":{\"ref\":91,\"tf\":0.0196078431372549},\"92\":{\"ref\":92,\"tf\":0.02857142857142857},\"93\":{\"ref\":93,\"tf\":0.014084507042253521},\"94\":{\"ref\":94,\"tf\":0.011111111111111112},\"95\":{\"ref\":95,\"tf\":0.009345794392523364},\"96\":{\"ref\":96,\"tf\":0.017857142857142856},\"97\":{\"ref\":97,\"tf\":0.019230769230769232},\"98\":{\"ref\":98,\"tf\":0.018867924528301886},\"126\":{\"ref\":126,\"tf\":0.011111111111111112},\"135\":{\"ref\":135,\"tf\":0.02702702702702703},\"136\":{\"ref\":136,\"tf\":0.005050505050505051}},\"/\":{\"docs\":{},\"d\":{\"docs\":{},\"i\":{\"docs\":{},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\"c\":{\"docs\":{},\"t\":{\"docs\":{},\"i\":{\"docs\":{},\"v\":{\"docs\":{},\"e\":{\"docs\":{},\"/\":{\"docs\":{},\"i\":{\"docs\":{},\"o\":{\"docs\":{},\"n\":{\"docs\":{},\"f\":{\"docs\":{},\"o\":{\"docs\":{},\"o\":{\"docs\":{},\"t\":{\"docs\":{},\"e\":{\"docs\":{},\"r\":{\"docs\":{},\"b\":{\"docs\":{},\"a\":{\"docs\":{},\"r\":{\"docs\":{\"99\":{\"ref\":99,\"tf\":0.02127659574468085}}}}}}}}}}}}}}}}}}}}}}}}}}},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\"a\":{\"docs\":{\"2\":{\"ref\":2,\"tf\":0.05},\"13\":{\"ref\":13,\"tf\":0.019230769230769232},\"36\":{\"ref\":36,\"tf\":0.017857142857142856},\"44\":{\"ref\":44,\"tf\":0.018518518518518517},\"45\":{\"ref\":45,\"tf\":0.0196078431372549},\"48\":{\"ref\":48,\"tf\":0.011627906976744186},\"54\":{\"ref\":54,\"tf\":0.003861003861003861},\"59\":{\"ref\":59,\"tf\":0.008356545961002786},\"74\":{\"ref\":74,\"tf\":0.005988023952095809},\"93\":{\"ref\":93,\"tf\":0.014084507042253521},\"115\":{\"ref\":115,\"tf\":0.006493506493506494},\"123\":{\"ref\":123,\"tf\":0.007042253521126761},\"130\":{\"ref\":130,\"tf\":0.013157894736842105},\"134\":{\"ref\":134,\"tf\":0.004602991944764097}}},\"n\":{\"docs\":{},\"'\":{\"docs\":{},\"t\":{\"docs\":{\"57\":{\"ref\":57,\"tf\":0.0023584905660377358},\"61\":{\"ref\":61,\"tf\":0.010869565217391304},\"66\":{\"ref\":66,\"tf\":0.043478260869565216},\"136\":{\"ref\":136,\"tf\":0.005050505050505051}}}}}},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"w\":{\"docs\":{\"16\":{\"ref\":16,\"tf\":0.014705882352941176}}}},\"i\":{\"docs\":{},\"v\":{\"docs\":{\"70\":{\"ref\":70,\"tf\":0.023809523809523808}}}},\"a\":{\"docs\":{},\"i\":{\"docs\":{\"72\":{\"ref\":72,\"tf\":0.011655011655011656},\"89\":{\"ref\":89,\"tf\":0.022727272727272728},\"114\":{\"ref\":114,\"tf\":0.001594896331738437},\"121\":{\"ref\":121,\"tf\":0.005813953488372093}}},\"y\":{\"docs\":{},\"[\":{\"docs\":{},\"o\":{\"docs\":{},\"b\":{\"docs\":{},\"j\":{\"docs\":{},\"e\":{\"docs\":{},\"c\":{\"docs\":{},\"t\":{\"docs\":{\"114\":{\"ref\":114,\"tf\":0.001594896331738437}}}}}}}}},\"(\":{\"docs\":{},\"s\":{\"docs\":{},\"t\":{\"docs\":{},\"r\":{\"docs\":{\"121\":{\"ref\":121,\"tf\":0.005813953488372093}}}}}}}}},\"k\":{\"docs\":{\"20\":{\"ref\":20,\"tf\":0.04081632653061224}}},\"c\":{\"docs\":{},\"-\":{\"1\":{\"7\":{\"0\":{\"docs\":{\"38\":{\"ref\":38,\"tf\":0.011627906976744186}}},\"docs\":{}},\"docs\":{}},\"docs\":{}}},\"o\":{\"docs\":{},\"u\":{\"docs\":{},\"n\":{\"docs\":{},\"d\":{\"docs\":{\"52\":{\"ref\":52,\"tf\":0.010416666666666666},\"57\":{\"ref\":57,\"tf\":0.0023584905660377358},\"82\":{\"ref\":82,\"tf\":0.0078125},\"117\":{\"ref\":117,\"tf\":0.015151515151515152},\"134\":{\"ref\":134,\"tf\":0.0011507479861910242},\"135\":{\"ref\":135,\"tf\":0.003861003861003861}}}}}},\"g\":{\"docs\":{},\"u\":{\"docs\":{},\"m\":{\"docs\":{},\"e\":{\"docs\":{},\"n\":{\"docs\":{},\"t\":{\"docs\":{\"71\":{\"ref\":71,\"tf\":0.008}}}}}}}},\"t\":{\"docs\":{},\"i\":{\"docs\":{},\"s\":{\"docs\":{},\"t\":{\"docs\":{},\".\":{\"docs\":{},\"a\":{\"docs\":{},\"l\":{\"docs\":{},\"b\":{\"docs\":{},\"u\":{\"docs\":{},\"m\":{\"docs\":{\"72\":{\"ref\":72,\"tf\":0.002331002331002331}}}}}}}}}}}},\"i\":{\"docs\":{},\"a\":{\"docs\":{},\"l\":{\"docs\":{\"133\":{\"ref\":133,\"tf\":0.0016750418760469012}}}},\"s\":{\"docs\":{\"134\":{\"ref\":134,\"tf\":0.0011507479861910242}}}},\"b\":{\"docs\":{},\"i\":{\"docs\":{},\"t\":{\"docs\":{},\"r\":{\"docs\":{},\"a\":{\"docs\":{},\"r\":{\"docs\":{},\"i\":{\"docs\":{\"136\":{\"ref\":136,\"tf\":0.005050505050505051}}}}}}}}}},\"v\":{\"docs\":{},\"a\":{\"docs\":{},\"i\":{\"docs\":{},\"l\":{\"docs\":{\"2\":{\"ref\":2,\"tf\":0.025},\"43\":{\"ref\":43,\"tf\":0.006944444444444444},\"44\":{\"ref\":44,\"tf\":0.037037037037037035},\"45\":{\"ref\":45,\"tf\":0.0196078431372549},\"48\":{\"ref\":48,\"tf\":0.011627906976744186},\"67\":{\"ref\":67,\"tf\":0.027777777777777776},\"82\":{\"ref\":82,\"tf\":0.0078125},\"83\":{\"ref\":83,\"tf\":0.02127659574468085},\"110\":{\"ref\":110,\"tf\":0.01020408163265306},\"112\":{\"ref\":112,\"tf\":0.011764705882352941},\"114\":{\"ref\":114,\"tf\":0.001594896331738437},\"119\":{\"ref\":119,\"tf\":0.003937007874015748},\"120\":{\"ref\":120,\"tf\":0.006289308176100629},\"135\":{\"ref\":135,\"tf\":0.003861003861003861}}},\"a\":{\"docs\":{},\"l\":{\"docs\":{},\"b\":{\"docs\":{},\"l\":{\"docs\":{\"76\":{\"ref\":76,\"tf\":0.018867924528301886},\"77\":{\"ref\":77,\"tf\":0.018867924528301886}}}}}}},\"t\":{\"docs\":{},\"a\":{\"docs\":{},\"r\":{\"docs\":{\"18\":{\"ref\":18,\"tf\":5.06}}}}}},\"d\":{\"docs\":{\"56\":{\"ref\":56,\"tf\":0.003189792663476874}}},\"o\":{\"docs\":{},\"i\":{\"docs\":{},\"d\":{\"docs\":{\"71\":{\"ref\":71,\"tf\":0.008},\"104\":{\"ref\":104,\"tf\":0.00423728813559322}}}}}},\"d\":{\"docs\":{\"5\":{\"ref\":5,\"tf\":0.02564102564102564},\"6\":{\"ref\":6,\"tf\":0.023809523809523808},\"7\":{\"ref\":7,\"tf\":0.08},\"10\":{\"ref\":10,\"tf\":0.023809523809523808},\"13\":{\"ref\":13,\"tf\":0.019230769230769232},\"16\":{\"ref\":16,\"tf\":0.029411764705882353},\"32\":{\"ref\":32,\"tf\":0.04},\"34\":{\"ref\":34,\"tf\":0.016666666666666666},\"35\":{\"ref\":35,\"tf\":0.01818181818181818},\"43\":{\"ref\":43,\"tf\":0.006944444444444444},\"44\":{\"ref\":44,\"tf\":0.037037037037037035},\"45\":{\"ref\":45,\"tf\":0.00980392156862745},\"46\":{\"ref\":46,\"tf\":0.019230769230769232},\"47\":{\"ref\":47,\"tf\":0.01},\"48\":{\"ref\":48,\"tf\":0.011627906976744186},\"50\":{\"ref\":50,\"tf\":0.008928571428571428},\"54\":{\"ref\":54,\"tf\":0.009009009009009009},\"55\":{\"ref\":55,\"tf\":0.02040816326530612},\"56\":{\"ref\":56,\"tf\":0.001594896331738437},\"59\":{\"ref\":59,\"tf\":0.002785515320334262},\"102\":{\"ref\":102,\"tf\":0.020833333333333332},\"104\":{\"ref\":104,\"tf\":0.00847457627118644},\"119\":{\"ref\":119,\"tf\":0.003937007874015748},\"120\":{\"ref\":120,\"tf\":0.012578616352201259},\"130\":{\"ref\":130,\"tf\":0.0043859649122807015},\"134\":{\"ref\":134,\"tf\":0.0034522439585730723}},\"d\":{\"docs\":{\"3\":{\"ref\":3,\"tf\":0.019230769230769232},\"9\":{\"ref\":9,\"tf\":0.02702702702702703},\"11\":{\"ref\":11,\"tf\":0.045454545454545456},\"12\":{\"ref\":12,\"tf\":0.05},\"16\":{\"ref\":16,\"tf\":0.007352941176470588},\"21\":{\"ref\":21,\"tf\":0.00980392156862745},\"22\":{\"ref\":22,\"tf\":0.024390243902439025},\"32\":{\"ref\":32,\"tf\":0.08},\"39\":{\"ref\":39,\"tf\":0.012658227848101266},\"40\":{\"ref\":40,\"tf\":0.14285714285714285},\"41\":{\"ref\":41,\"tf\":0.0625},\"42\":{\"ref\":42,\"tf\":0.07142857142857142},\"43\":{\"ref\":43,\"tf\":0.034722222222222224},\"51\":{\"ref\":51,\"tf\":0.01694915254237288},\"52\":{\"ref\":52,\"tf\":0.08333333333333333},\"54\":{\"ref\":54,\"tf\":0.015444015444015444},\"56\":{\"ref\":56,\"tf\":0.004784688995215311},\"59\":{\"ref\":59,\"tf\":0.011142061281337047},\"60\":{\"ref\":60,\"tf\":0.0022727272727272726},\"65\":{\"ref\":65,\"tf\":0.025},\"66\":{\"ref\":66,\"tf\":0.043478260869565216},\"72\":{\"ref\":72,\"tf\":0.002331002331002331},\"74\":{\"ref\":74,\"tf\":0.005988023952095809},\"76\":{\"ref\":76,\"tf\":0.018867924528301886},\"77\":{\"ref\":77,\"tf\":0.018867924528301886},\"82\":{\"ref\":82,\"tf\":0.015625},\"86\":{\"ref\":86,\"tf\":0.06666666666666667},\"88\":{\"ref\":88,\"tf\":0.009708737864077669},\"93\":{\"ref\":93,\"tf\":0.014084507042253521},\"103\":{\"ref\":103,\"tf\":0.006493506493506494},\"104\":{\"ref\":104,\"tf\":0.00847457627118644},\"108\":{\"ref\":108,\"tf\":0.014492753623188406},\"120\":{\"ref\":120,\"tf\":0.006289308176100629},\"123\":{\"ref\":123,\"tf\":0.014084507042253521},\"127\":{\"ref\":127,\"tf\":0.006622516556291391},\"130\":{\"ref\":130,\"tf\":0.008771929824561403},\"132\":{\"ref\":132,\"tf\":0.01282051282051282},\"133\":{\"ref\":133,\"tf\":0.0033500837520938024},\"134\":{\"ref\":134,\"tf\":0.0023014959723820483}},\"i\":{\"docs\":{},\"t\":{\"docs\":{\"84\":{\"ref\":84,\"tf\":0.0036363636363636364},\"104\":{\"ref\":104,\"tf\":0.00423728813559322},\"114\":{\"ref\":114,\"tf\":0.009569377990430622},\"123\":{\"ref\":123,\"tf\":0.0035211267605633804},\"130\":{\"ref\":130,\"tf\":0.0043859649122807015},\"134\":{\"ref\":134,\"tf\":0.0011507479861910242}},\"i\":{\"docs\":{},\"o\":{\"docs\":{},\"n\":{\"docs\":{\"3\":{\"ref\":3,\"tf\":0.019230769230769232},\"6\":{\"ref\":6,\"tf\":0.023809523809523808},\"16\":{\"ref\":16,\"tf\":0.007352941176470588},\"26\":{\"ref\":26,\"tf\":0.021739130434782608},\"30\":{\"ref\":30,\"tf\":0.02702702702702703},\"50\":{\"ref\":50,\"tf\":0.008928571428571428},\"62\":{\"ref\":62,\"tf\":0.041666666666666664},\"72\":{\"ref\":72,\"tf\":0.002331002331002331},\"84\":{\"ref\":84,\"tf\":0.0036363636363636364},\"104\":{\"ref\":104,\"tf\":0.00423728813559322},\"129\":{\"ref\":129,\"tf\":0.0017391304347826088},\"134\":{\"ref\":134,\"tf\":0.0023014959723820483}}}}},\"o\":{\"docs\":{},\"n\":{\"docs\":{\"121\":{\"ref\":121,\"tf\":0.005813953488372093}}}}}},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\"s\":{\"docs\":{},\"s\":{\"docs\":{\"23\":{\"ref\":23,\"tf\":0.06060606060606061},\"60\":{\"ref\":60,\"tf\":0.004545454545454545}}}}}}},\"v\":{\"docs\":{},\"a\":{\"docs\":{},\"n\":{\"docs\":{},\"t\":{\"docs\":{},\"a\":{\"docs\":{},\"g\":{\"docs\":{\"43\":{\"ref\":43,\"tf\":0.006944444444444444},\"45\":{\"ref\":45,\"tf\":0.00980392156862745},\"131\":{\"ref\":131,\"tf\":0.05555555555555555}}}}},\"c\":{\"docs\":{\"57\":{\"ref\":57,\"tf\":0.007075471698113208},\"60\":{\"ref\":60,\"tf\":0.006818181818181818},\"80\":{\"ref\":80,\"tf\":0.007692307692307693},\"81\":{\"ref\":81,\"tf\":0.015151515151515152},\"115\":{\"ref\":115,\"tf\":0.003246753246753247}}}}}},\"j\":{\"docs\":{},\"u\":{\"docs\":{},\"s\":{\"docs\":{},\"t\":{\"docs\":{\"58\":{\"ref\":58,\"tf\":0.00273224043715847}},\"n\":{\"docs\":{},\"o\":{\"docs\":{},\"t\":{\"docs\":{},\"h\":{\"docs\":{\"103\":{\"ref\":103,\"tf\":0.006493506493506494}}}}}},\"p\":{\"docs\":{},\"a\":{\"docs\":{},\"n\":{\"docs\":{\"103\":{\"ref\":103,\"tf\":0.012987012987012988}}}}},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\"s\":{\"docs\":{\"103\":{\"ref\":103,\"tf\":0.012987012987012988}}}}}}}}},\"a\":{\"docs\":{},\"m\":{\"docs\":{\"134\":{\"ref\":134,\"tf\":0.0011507479861910242}},\"d\":{\"docs\":{},\"b\":{\"docs\":{},\"r\":{\"docs\":{},\"a\":{\"docs\":{},\"d\":{\"docs\":{},\"l\":{\"docs\":{},\"e\":{\"docs\":{},\"i\":{\"docs\":{\"70\":{\"ref\":70,\"tf\":0.023809523809523808}}}}}}}}}}}},\"m\":{\"docs\":{},\"i\":{\"docs\":{},\"t\":{\"docs\":{\"134\":{\"ref\":134,\"tf\":0.0011507479861910242}}}}},\"o\":{\"docs\":{},\"b\":{\"docs\":{\"135\":{\"ref\":135,\"tf\":0.009652509652509652}},\"e\":{\"docs\":{},\"'\":{\"docs\":{\"135\":{\"ref\":135,\"tf\":0.003861003861003861}}}}}}},\"u\":{\"docs\":{},\"t\":{\"docs\":{},\"o\":{\"docs\":{\"106\":{\"ref\":106,\"tf\":0.013333333333333334},\"133\":{\"ref\":133,\"tf\":0.0016750418760469012}},\"m\":{\"docs\":{},\"a\":{\"docs\":{},\"t\":{\"docs\":{\"3\":{\"ref\":3,\"tf\":0.019230769230769232},\"16\":{\"ref\":16,\"tf\":0.007352941176470588},\"44\":{\"ref\":44,\"tf\":0.018518518518518517},\"54\":{\"ref\":54,\"tf\":0.001287001287001287},\"59\":{\"ref\":59,\"tf\":0.002785515320334262},\"94\":{\"ref\":94,\"tf\":0.011111111111111112},\"100\":{\"ref\":100,\"tf\":0.041666666666666664},\"101\":{\"ref\":101,\"tf\":0.043478260869565216},\"103\":{\"ref\":103,\"tf\":0.006493506493506494},\"104\":{\"ref\":104,\"tf\":0.00423728813559322},\"110\":{\"ref\":110,\"tf\":0.01020408163265306},\"115\":{\"ref\":115,\"tf\":0.003246753246753247},\"129\":{\"ref\":129,\"tf\":0.0052173913043478265},\"134\":{\"ref\":134,\"tf\":0.0011507479861910242}}},\"g\":{\"docs\":{\"43\":{\"ref\":43,\"tf\":0.006944444444444444}}}}},\"f\":{\"docs\":{},\"o\":{\"docs\":{},\"c\":{\"docs\":{},\"u\":{\"docs\":{\"71\":{\"ref\":71,\"tf\":0.008}}}}}},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\"v\":{\"docs\":{},\"e\":{\"docs\":{},\"r\":{\"docs\":{},\"s\":{\"docs\":{\"106\":{\"ref\":106,\"tf\":0.013333333333333334}}}}}}}}}}},\"h\":{\"docs\":{\"4\":{\"ref\":4,\"tf\":0.022727272727272728}},\"e\":{\"docs\":{},\"a\":{\"docs\":{},\"d\":{\"docs\":{\"56\":{\"ref\":56,\"tf\":0.003189792663476874},\"58\":{\"ref\":58,\"tf\":0.00546448087431694},\"59\":{\"ref\":59,\"tf\":0.002785515320334262},\"130\":{\"ref\":130,\"tf\":0.0043859649122807015}}}}}},\"s\":{\"docs\":{},\"s\":{\"docs\":{},\"i\":{\"docs\":{},\"g\":{\"docs\":{},\"n\":{\"docs\":{\"10\":{\"ref\":10,\"tf\":0.023809523809523808},\"16\":{\"ref\":16,\"tf\":0.022058823529411766},\"29\":{\"ref\":29,\"tf\":0.05128205128205128},\"30\":{\"ref\":30,\"tf\":0.02702702702702703},\"34\":{\"ref\":34,\"tf\":0.03333333333333333},\"35\":{\"ref\":35,\"tf\":0.03636363636363636},\"50\":{\"ref\":50,\"tf\":0.008928571428571428},\"72\":{\"ref\":72,\"tf\":0.002331002331002331},\"82\":{\"ref\":82,\"tf\":0.0078125},\"96\":{\"ref\":96,\"tf\":0.017857142857142856},\"97\":{\"ref\":97,\"tf\":0.019230769230769232},\"113\":{\"ref\":113,\"tf\":0.0070921985815602835},\"134\":{\"ref\":134,\"tf\":0.0011507479861910242}}}}},\"o\":{\"docs\":{},\"c\":{\"docs\":{},\"i\":{\"docs\":{\"26\":{\"ref\":26,\"tf\":0.021739130434782608},\"72\":{\"ref\":72,\"tf\":0.009324009324009324},\"115\":{\"ref\":115,\"tf\":0.00974025974025974},\"134\":{\"ref\":134,\"tf\":0.0011507479861910242}}}}},\"e\":{\"docs\":{},\"r\":{\"docs\":{},\"t\":{\"docs\":{\"34\":{\"ref\":34,\"tf\":0.016666666666666666},\"35\":{\"ref\":35,\"tf\":0.01818181818181818},\"50\":{\"ref\":50,\"tf\":0.008928571428571428},\"129\":{\"ref\":129,\"tf\":0.0017391304347826088}}}}},\"u\":{\"docs\":{},\"m\":{\"docs\":{\"134\":{\"ref\":134,\"tf\":0.0034522439585730723}},\"p\":{\"docs\":{},\"t\":{\"docs\":{\"56\":{\"ref\":56,\"tf\":0.001594896331738437}}}}}}},\"k\":{\"docs\":{\"126\":{\"ref\":126,\"tf\":0.011111111111111112},\"134\":{\"ref\":134,\"tf\":0.0011507479861910242}}},\"y\":{\"docs\":{},\"n\":{\"docs\":{},\"c\":{\"docs\":{},\"h\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"n\":{\"docs\":{\"136\":{\"ref\":136,\"tf\":0.005050505050505051}}}}}}}}}},\"n\":{\"docs\":{},\"g\":{\"docs\":{},\"u\":{\"docs\":{},\"l\":{\"docs\":{},\"a\":{\"docs\":{},\"r\":{\"docs\":{\"54\":{\"ref\":54,\"tf\":0.011583011583011582},\"57\":{\"ref\":57,\"tf\":0.0023584905660377358},\"59\":{\"ref\":59,\"tf\":0.011142061281337047},\"61\":{\"ref\":61,\"tf\":0.010869565217391304},\"84\":{\"ref\":84,\"tf\":0.0036363636363636364},\"105\":{\"ref\":105,\"tf\":0.005847953216374269},\"108\":{\"ref\":108,\"tf\":0.043478260869565216},\"113\":{\"ref\":113,\"tf\":0.0070921985815602835},\"117\":{\"ref\":117,\"tf\":0.007575757575757576},\"120\":{\"ref\":120,\"tf\":0.006289308176100629},\"124\":{\"ref\":124,\"tf\":0.020618556701030927},\"134\":{\"ref\":134,\"tf\":0.004602991944764097},\"136\":{\"ref\":136,\"tf\":0.005050505050505051}},\"j\":{\"docs\":{\"14\":{\"ref\":14,\"tf\":0.034482758620689655},\"53\":{\"ref\":53,\"tf\":0.041666666666666664},\"54\":{\"ref\":54,\"tf\":0.006435006435006435},\"57\":{\"ref\":57,\"tf\":0.0023584905660377358},\"59\":{\"ref\":59,\"tf\":0.008356545961002786},\"61\":{\"ref\":61,\"tf\":0.010869565217391304},\"63\":{\"ref\":63,\"tf\":0.024390243902439025},\"73\":{\"ref\":73,\"tf\":0.05},\"87\":{\"ref\":87,\"tf\":0.041666666666666664},\"97\":{\"ref\":97,\"tf\":0.019230769230769232},\"128\":{\"ref\":128,\"tf\":0.017857142857142856},\"130\":{\"ref\":130,\"tf\":0.008771929824561403},\"131\":{\"ref\":131,\"tf\":2.1666666666666665},\"133\":{\"ref\":133,\"tf\":0.0016750418760469012},\"134\":{\"ref\":134,\"tf\":0.004602991944764097}}},\".\":{\"docs\":{},\"f\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"m\":{\"docs\":{},\"j\":{\"docs\":{},\"s\":{\"docs\":{},\"o\":{\"docs\":{},\"n\":{\"docs\":{},\"(\":{\"docs\":{},\"p\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"j\":{\"docs\":{},\"e\":{\"docs\":{},\"c\":{\"docs\":{},\"t\":{\"docs\":{},\"s\":{\"docs\":{},\"t\":{\"docs\":{},\"r\":{\"docs\":{\"54\":{\"ref\":54,\"tf\":0.001287001287001287}}}}}}}}}}}}}}}}}}}}},\"m\":{\"docs\":{},\"o\":{\"docs\":{},\"d\":{\"docs\":{},\"u\":{\"docs\":{},\"l\":{\"docs\":{},\"e\":{\"docs\":{},\"(\":{\"docs\":{},\"'\":{\"docs\":{},\"t\":{\"docs\":{},\"o\":{\"docs\":{},\"d\":{\"docs\":{},\"o\":{\"docs\":{\"54\":{\"ref\":54,\"tf\":0.003861003861003861},\"59\":{\"ref\":59,\"tf\":0.002785515320334262}}}}},\"e\":{\"docs\":{},\"s\":{\"docs\":{},\"t\":{\"docs\":{},\"a\":{\"docs\":{},\"p\":{\"docs\":{},\"p\":{\"docs\":{\"88\":{\"ref\":88,\"tf\":0.009708737864077669},\"111\":{\"ref\":111,\"tf\":0.007518796992481203}}}}}}}}},\"m\":{\"docs\":{},\"y\":{\"docs\":{},\"a\":{\"docs\":{},\"p\":{\"docs\":{},\"p\":{\"docs\":{\"84\":{\"ref\":84,\"tf\":0.0036363636363636364},\"132\":{\"ref\":132,\"tf\":0.01282051282051282},\"133\":{\"ref\":133,\"tf\":0.0016750418760469012}}}}},\"s\":{\"docs\":{},\"u\":{\"docs\":{},\"p\":{\"docs\":{},\"e\":{\"docs\":{},\"r\":{\"docs\":{},\"a\":{\"docs\":{},\"p\":{\"docs\":{},\"p\":{\"docs\":{\"105\":{\"ref\":105,\"tf\":0.005847953216374269},\"106\":{\"ref\":106,\"tf\":0.013333333333333334},\"114\":{\"ref\":114,\"tf\":0.001594896331738437}}}}}}}}}}}},\"l\":{\"docs\":{},\"o\":{\"docs\":{},\"a\":{\"docs\":{},\"d\":{\"docs\":{},\"i\":{\"docs\":{},\"n\":{\"docs\":{},\"g\":{\"docs\":{},\"a\":{\"docs\":{},\"p\":{\"docs\":{},\"p\":{\"docs\":{\"110\":{\"ref\":110,\"tf\":0.01020408163265306}}}}}}}}}}}},\"s\":{\"docs\":{},\"t\":{\"docs\":{},\"a\":{\"docs\":{},\"r\":{\"docs\":{},\"t\":{\"docs\":{\"130\":{\"ref\":130,\"tf\":0.0043859649122807015}}}}}}}}}}}}}}},\"t\":{\"docs\":{},\"o\":{\"docs\":{},\"j\":{\"docs\":{},\"s\":{\"docs\":{},\"o\":{\"docs\":{},\"n\":{\"docs\":{},\"(\":{\"docs\":{},\"p\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"j\":{\"docs\":{},\"e\":{\"docs\":{},\"c\":{\"docs\":{},\"t\":{\"docs\":{\"54\":{\"ref\":54,\"tf\":0.001287001287001287}}}}}}}}}}}}}}}}},\"'\":{\"docs\":{\"78\":{\"ref\":78,\"tf\":0.011235955056179775},\"84\":{\"ref\":84,\"tf\":0.0036363636363636364},\"104\":{\"ref\":104,\"tf\":0.00423728813559322},\"134\":{\"ref\":134,\"tf\":0.0034522439585730723}}},\"-\":{\"docs\":{},\"u\":{\"docs\":{},\"i\":{\"docs\":{},\"-\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"u\":{\"docs\":{},\"t\":{\"docs\":{\"84\":{\"ref\":84,\"tf\":0.0036363636363636364}}}}}}}}}},\"u\":{\"docs\":{},\"i\":{\"docs\":{\"84\":{\"ref\":84,\"tf\":0.014545454545454545}}}}}}}},\"r\":{\"docs\":{},\"i\":{\"docs\":{\"133\":{\"ref\":133,\"tf\":0.0016750418760469012}}}}},\"d\":{\"docs\":{},\"/\":{\"docs\":{},\"o\":{\"docs\":{},\"r\":{\"docs\":{\"16\":{\"ref\":16,\"tf\":0.007352941176470588},\"93\":{\"ref\":93,\"tf\":0.014084507042253521},\"123\":{\"ref\":123,\"tf\":0.0035211267605633804},\"129\":{\"ref\":129,\"tf\":0.0017391304347826088}}}}},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"i\":{\"docs\":{},\"d\":{\"docs\":{\"38\":{\"ref\":38,\"tf\":0.011627906976744186},\"56\":{\"ref\":56,\"tf\":0.03189792663476874},\"57\":{\"ref\":57,\"tf\":0.0023584905660377358},\"58\":{\"ref\":58,\"tf\":0.01366120218579235},\"60\":{\"ref\":60,\"tf\":0.022727272727272728},\"67\":{\"ref\":67,\"tf\":0.027777777777777776},\"74\":{\"ref\":74,\"tf\":0.011976047904191617},\"99\":{\"ref\":99,\"tf\":0.02127659574468085},\"103\":{\"ref\":103,\"tf\":0.012987012987012988},\"113\":{\"ref\":113,\"tf\":0.0070921985815602835},\"121\":{\"ref\":121,\"tf\":0.005813953488372093},\"127\":{\"ref\":127,\"tf\":0.019867549668874173},\"134\":{\"ref\":134,\"tf\":0.0011507479861910242}},\"]\":{\"docs\":{},\"(\":{\"docs\":{},\"h\":{\"docs\":{},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"p\":{\"docs\":{},\":\":{\"docs\":{},\"/\":{\"docs\":{},\"/\":{\"docs\":{},\"c\":{\"docs\":{},\"o\":{\"docs\":{},\"r\":{\"docs\":{},\"d\":{\"docs\":{},\"o\":{\"docs\":{},\"v\":{\"docs\":{},\"a\":{\"docs\":{},\".\":{\"docs\":{},\"a\":{\"docs\":{},\"p\":{\"docs\":{},\"a\":{\"docs\":{},\"c\":{\"docs\":{},\"h\":{\"docs\":{},\"e\":{\"docs\":{},\".\":{\"docs\":{},\"o\":{\"docs\":{},\"r\":{\"docs\":{},\"g\":{\"docs\":{},\"/\":{\"docs\":{},\"d\":{\"docs\":{},\"o\":{\"docs\":{},\"c\":{\"docs\":{},\"s\":{\"docs\":{},\"/\":{\"docs\":{},\"e\":{\"docs\":{},\"n\":{\"docs\":{},\"/\":{\"3\":{\"docs\":{},\".\":{\"4\":{\"docs\":{},\".\":{\"0\":{\"docs\":{},\"/\":{\"docs\":{},\"g\":{\"docs\":{},\"u\":{\"docs\":{},\"i\":{\"docs\":{},\"d\":{\"docs\":{},\"e\":{\"docs\":{},\"_\":{\"docs\":{},\"p\":{\"docs\":{},\"l\":{\"docs\":{},\"a\":{\"docs\":{},\"t\":{\"docs\":{},\"f\":{\"docs\":{},\"o\":{\"docs\":{},\"r\":{\"docs\":{},\"m\":{\"docs\":{},\"s\":{\"docs\":{},\"_\":{\"docs\":{},\"a\":{\"docs\":{},\"n\":{\"docs\":{},\"d\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"i\":{\"docs\":{},\"d\":{\"docs\":{},\"_\":{\"docs\":{},\"i\":{\"docs\":{},\"n\":{\"docs\":{},\"d\":{\"docs\":{},\"e\":{\"docs\":{},\"x\":{\"docs\":{},\".\":{\"docs\":{},\"m\":{\"docs\":{},\"d\":{\"docs\":{},\".\":{\"docs\":{},\"h\":{\"docs\":{},\"t\":{\"docs\":{},\"m\":{\"docs\":{},\"l\":{\"docs\":{},\"#\":{\"docs\":{},\"a\":{\"docs\":{},\"n\":{\"docs\":{},\"d\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"i\":{\"docs\":{},\"d\":{\"docs\":{},\"%\":{\"2\":{\"0\":{\"docs\":{},\"p\":{\"docs\":{},\"l\":{\"docs\":{},\"a\":{\"docs\":{},\"t\":{\"docs\":{},\"f\":{\"docs\":{},\"o\":{\"docs\":{},\"r\":{\"docs\":{},\"m\":{\"docs\":{},\"%\":{\"2\":{\"0\":{\"docs\":{},\"g\":{\"docs\":{},\"u\":{\"docs\":{},\"i\":{\"docs\":{},\"d\":{\"docs\":{\"56\":{\"ref\":56,\"tf\":0.001594896331738437}}}}}}},\"docs\":{}},\"docs\":{}}}}}}}}}}},\"docs\":{}},\"docs\":{}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},\"docs\":{}}},\"docs\":{}}},\"docs\":{}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},\"_\":{\"docs\":{},\"h\":{\"docs\":{},\"o\":{\"docs\":{},\"m\":{\"docs\":{\"56\":{\"ref\":56,\"tf\":0.001594896331738437}}}}}},\"'\":{\"docs\":{\"57\":{\"ref\":57,\"tf\":0.0023584905660377358}}},\":\":{\"docs\":{},\"d\":{\"docs\":{},\"e\":{\"docs\":{},\"b\":{\"docs\":{},\"u\":{\"docs\":{},\"g\":{\"docs\":{},\"g\":{\"docs\":{\"58\":{\"ref\":58,\"tf\":0.00273224043715847}}}}}}}},\"v\":{\"docs\":{},\"e\":{\"docs\":{},\"r\":{\"docs\":{},\"s\":{\"docs\":{},\"i\":{\"docs\":{},\"o\":{\"docs\":{},\"n\":{\"docs\":{},\"c\":{\"docs\":{},\"o\":{\"docs\":{},\"d\":{\"docs\":{\"58\":{\"ref\":58,\"tf\":0.00273224043715847}}}}}}}}}}}},\"w\":{\"docs\":{},\"i\":{\"docs\":{},\"n\":{\"docs\":{},\"d\":{\"docs\":{},\"o\":{\"docs\":{},\"w\":{\"docs\":{},\"s\":{\"docs\":{},\"o\":{\"docs\":{},\"f\":{\"docs\":{},\"t\":{\"docs\":{},\"i\":{\"docs\":{},\"n\":{\"docs\":{},\"p\":{\"docs\":{},\"u\":{\"docs\":{},\"t\":{\"docs\":{},\"m\":{\"docs\":{},\"o\":{\"docs\":{},\"d\":{\"docs\":{},\"e\":{\"docs\":{},\"]\":{\"docs\":{},\"(\":{\"docs\":{},\"h\":{\"docs\":{},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"p\":{\"docs\":{},\":\":{\"docs\":{},\"/\":{\"docs\":{},\"/\":{\"docs\":{},\"d\":{\"docs\":{},\"e\":{\"docs\":{},\"v\":{\"docs\":{},\"e\":{\"docs\":{},\"l\":{\"docs\":{},\"o\":{\"docs\":{},\"p\":{\"docs\":{},\"e\":{\"docs\":{},\"r\":{\"docs\":{},\".\":{\"docs\":{},\"a\":{\"docs\":{},\"n\":{\"docs\":{},\"d\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"i\":{\"docs\":{},\"d\":{\"docs\":{},\".\":{\"docs\":{},\"c\":{\"docs\":{},\"o\":{\"docs\":{},\"m\":{\"docs\":{},\"/\":{\"docs\":{},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\"f\":{\"docs\":{},\"e\":{\"docs\":{},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\"n\":{\"docs\":{},\"c\":{\"docs\":{},\"e\":{\"docs\":{},\"/\":{\"docs\":{},\"a\":{\"docs\":{},\"n\":{\"docs\":{},\"d\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"i\":{\"docs\":{},\"d\":{\"docs\":{},\"/\":{\"docs\":{},\"r\":{\"docs\":{},\".\":{\"docs\":{},\"a\":{\"docs\":{},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"r\":{\"docs\":{},\".\":{\"docs\":{},\"h\":{\"docs\":{},\"t\":{\"docs\":{},\"m\":{\"docs\":{},\"l\":{\"docs\":{},\"#\":{\"docs\":{},\"w\":{\"docs\":{},\"i\":{\"docs\":{},\"n\":{\"docs\":{},\"d\":{\"docs\":{},\"o\":{\"docs\":{},\"w\":{\"docs\":{},\"s\":{\"docs\":{},\"o\":{\"docs\":{},\"f\":{\"docs\":{},\"t\":{\"docs\":{},\"i\":{\"docs\":{},\"n\":{\"docs\":{},\"p\":{\"docs\":{},\"u\":{\"docs\":{},\"t\":{\"docs\":{},\"m\":{\"docs\":{},\"o\":{\"docs\":{},\"d\":{\"docs\":{\"103\":{\"ref\":103,\"tf\":0.006493506493506494}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},\"m\":{\"docs\":{},\"a\":{\"docs\":{},\"n\":{\"docs\":{},\"i\":{\"docs\":{},\"f\":{\"docs\":{},\"e\":{\"docs\":{},\"s\":{\"docs\":{},\"t\":{\"docs\":{},\".\":{\"docs\":{},\"x\":{\"docs\":{},\"m\":{\"docs\":{},\"l\":{\"docs\":{\"58\":{\"ref\":58,\"tf\":0.00273224043715847},\"103\":{\"ref\":103,\"tf\":0.006493506493506494}}}}}}}}}}}}}}}}}}},\"i\":{\"docs\":{},\"m\":{\"docs\":{\"21\":{\"ref\":21,\"tf\":0.00980392156862745},\"53\":{\"ref\":53,\"tf\":10.083333333333334},\"54\":{\"ref\":54,\"tf\":0.001287001287001287},\"57\":{\"ref\":57,\"tf\":0.0023584905660377358},\"61\":{\"ref\":61,\"tf\":0.010869565217391304},\"71\":{\"ref\":71,\"tf\":0.04},\"82\":{\"ref\":82,\"tf\":0.015625},\"84\":{\"ref\":84,\"tf\":0.01090909090909091},\"96\":{\"ref\":96,\"tf\":0.017857142857142856},\"97\":{\"ref\":97,\"tf\":0.019230769230769232},\"102\":{\"ref\":102,\"tf\":0.020833333333333332},\"106\":{\"ref\":106,\"tf\":0.04},\"111\":{\"ref\":111,\"tf\":0.007518796992481203},\"115\":{\"ref\":115,\"tf\":0.01948051948051948},\"119\":{\"ref\":119,\"tf\":0.003937007874015748},\"123\":{\"ref\":123,\"tf\":0.007042253521126761},\"133\":{\"ref\":133,\"tf\":0.0016750418760469012}},\"a\":{\"docs\":{},\"t\":{\"docs\":{},\"i\":{\"docs\":{},\"o\":{\"docs\":{},\"n\":{\"docs\":{},\"f\":{\"docs\":{},\"r\":{\"docs\":{},\"a\":{\"docs\":{},\"m\":{\"docs\":{},\"e\":{\"docs\":{},\"t\":{\"docs\":{},\"h\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"l\":{\"docs\":{},\"e\":{\"docs\":{},\"(\":{\"docs\":{},\"c\":{\"docs\":{},\"a\":{\"docs\":{},\"l\":{\"docs\":{},\"l\":{\"docs\":{},\"b\":{\"docs\":{},\"a\":{\"docs\":{},\"c\":{\"docs\":{},\"k\":{\"docs\":{},\")\":{\"docs\":{},\"(\":{\"docs\":{},\"a\":{\"docs\":{},\"l\":{\"docs\":{},\"i\":{\"docs\":{},\"a\":{\"docs\":{\"119\":{\"ref\":119,\"tf\":0.003937007874015748}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},\"o\":{\"docs\":{},\"t\":{\"docs\":{},\"h\":{\"docs\":{\"21\":{\"ref\":21,\"tf\":0.00980392156862745},\"47\":{\"ref\":47,\"tf\":0.01},\"54\":{\"ref\":54,\"tf\":0.001287001287001287},\"129\":{\"ref\":129,\"tf\":0.0017391304347826088},\"132\":{\"ref\":132,\"tf\":0.01282051282051282},\"134\":{\"ref\":134,\"tf\":0.0034522439585730723}}}}},\"y\":{\"docs\":{},\"w\":{\"docs\":{},\"h\":{\"docs\":{},\"e\":{\"docs\":{},\"r\":{\"docs\":{\"44\":{\"ref\":44,\"tf\":0.018518518518518517},\"54\":{\"ref\":54,\"tf\":0.001287001287001287},\"121\":{\"ref\":121,\"tf\":0.005813953488372093},\"130\":{\"ref\":130,\"tf\":0.0043859649122807015}}}}}},\"m\":{\"docs\":{},\"o\":{\"docs\":{},\"r\":{\"docs\":{\"54\":{\"ref\":54,\"tf\":0.001287001287001287}}}}},\"t\":{\"docs\":{},\"h\":{\"docs\":{\"54\":{\"ref\":54,\"tf\":0.001287001287001287},\"56\":{\"ref\":56,\"tf\":0.001594896331738437},\"59\":{\"ref\":59,\"tf\":0.008356545961002786},\"135\":{\"ref\":135,\"tf\":0.005791505791505791}}}}},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"i\":{\"docs\":{},\"d\":{\"docs\":{},\"_\":{\"docs\":{},\"s\":{\"docs\":{},\"d\":{\"docs\":{},\"k\":{\"docs\":{},\"_\":{\"docs\":{},\"d\":{\"docs\":{},\"i\":{\"docs\":{},\"r\":{\"docs\":{},\"]\":{\"docs\":{},\"\\\\\":{\"docs\":{},\"s\":{\"docs\":{},\"d\":{\"docs\":{},\"k\":{\"docs\":{},\"\\\\\":{\"docs\":{},\"t\":{\"docs\":{},\"o\":{\"docs\":{},\"o\":{\"docs\":{},\"l\":{\"docs\":{\"56\":{\"ref\":56,\"tf\":0.001594896331738437}}}}}}}}}}}}}}}}}}}}}}}},\"t\":{\"docs\":{\"56\":{\"ref\":56,\"tf\":0.006379585326953748}}},\"s\":{\"docs\":{},\"w\":{\"docs\":{},\"e\":{\"docs\":{},\"r\":{\"docs\":{\"58\":{\"ref\":58,\"tf\":0.00273224043715847}}}}}},\"c\":{\"docs\":{},\"h\":{\"docs\":{},\"o\":{\"docs\":{},\"r\":{\"docs\":{},\"s\":{\"docs\":{},\"c\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"l\":{\"docs\":{},\"l\":{\"docs\":{},\"(\":{\"docs\":{},\"[\":{\"docs\":{},\"s\":{\"docs\":{},\"h\":{\"docs\":{},\"o\":{\"docs\":{},\"u\":{\"docs\":{},\"l\":{\"docs\":{},\"d\":{\"docs\":{},\"a\":{\"docs\":{},\"n\":{\"docs\":{},\"i\":{\"docs\":{},\"m\":{\"docs\":{\"115\":{\"ref\":115,\"tf\":0.003246753246753247}}}}}}}}}}}}}}}}}}}}}}}},\"a\":{\"docs\":{},\"l\":{\"docs\":{},\"o\":{\"docs\":{},\"g\":{\"docs\":{\"135\":{\"ref\":135,\"tf\":0.0019305019305019305}}}}}}},\"l\":{\"docs\":{},\"b\":{\"docs\":{},\"u\":{\"docs\":{},\"m\":{\"docs\":{\"16\":{\"ref\":16,\"tf\":0.014705882352941176},\"19\":{\"ref\":19,\"tf\":0.02},\"72\":{\"ref\":72,\"tf\":0.002331002331002331},\"105\":{\"ref\":105,\"tf\":0.005847953216374269}}}}},\"i\":{\"docs\":{},\"g\":{\"docs\":{},\"n\":{\"docs\":{\"16\":{\"ref\":16,\"tf\":0.014705882352941176},\"19\":{\"ref\":19,\"tf\":0.02},\"25\":{\"ref\":25,\"tf\":0.022988505747126436},\"43\":{\"ref\":43,\"tf\":0.006944444444444444},\"47\":{\"ref\":47,\"tf\":2.54},\"58\":{\"ref\":58,\"tf\":0.00546448087431694},\"76\":{\"ref\":76,\"tf\":0.03773584905660377},\"77\":{\"ref\":77,\"tf\":0.03773584905660377},\"82\":{\"ref\":82,\"tf\":0.0078125},\"112\":{\"ref\":112,\"tf\":0.011764705882352941}},\"-\":{\"docs\":{},\"t\":{\"docs\":{},\"i\":{\"docs\":{},\"t\":{\"docs\":{},\"l\":{\"docs\":{\"76\":{\"ref\":76,\"tf\":0.018867924528301886},\"77\":{\"ref\":77,\"tf\":0.018867924528301886},\"82\":{\"ref\":82,\"tf\":0.0078125}}}}}}},\"(\":{\"docs\":{},\"[\":{\"docs\":{},\"d\":{\"docs\":{},\"i\":{\"docs\":{},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\"c\":{\"docs\":{},\"t\":{\"docs\":{\"112\":{\"ref\":112,\"tf\":0.0058823529411764705}}}}}}}}}}}},\"a\":{\"docs\":{\"58\":{\"ref\":58,\"tf\":0.00273224043715847}},\"s\":{\"docs\":{},\"_\":{\"docs\":{},\"n\":{\"docs\":{},\"a\":{\"docs\":{},\"m\":{\"docs\":{\"58\":{\"ref\":58,\"tf\":0.00546448087431694}}}}}}}}},\"l\":{\"docs\":{},\"o\":{\"docs\":{},\"w\":{\"docs\":{\"16\":{\"ref\":16,\"tf\":0.007352941176470588},\"21\":{\"ref\":21,\"tf\":0.00980392156862745},\"39\":{\"ref\":39,\"tf\":0.012658227848101266},\"72\":{\"ref\":72,\"tf\":0.004662004662004662},\"74\":{\"ref\":74,\"tf\":0.011976047904191617},\"78\":{\"ref\":78,\"tf\":0.011235955056179775},\"80\":{\"ref\":80,\"tf\":0.007692307692307693},\"82\":{\"ref\":82,\"tf\":0.0078125},\"84\":{\"ref\":84,\"tf\":0.007272727272727273},\"88\":{\"ref\":88,\"tf\":0.009708737864077669},\"90\":{\"ref\":90,\"tf\":0.020833333333333332},\"91\":{\"ref\":91,\"tf\":0.0196078431372549},\"93\":{\"ref\":93,\"tf\":0.014084507042253521},\"97\":{\"ref\":97,\"tf\":0.019230769230769232},\"114\":{\"ref\":114,\"tf\":0.004784688995215311},\"123\":{\"ref\":123,\"tf\":0.01056338028169014},\"134\":{\"ref\":134,\"tf\":0.0023014959723820483}}}}},\"w\":{\"docs\":{},\"a\":{\"docs\":{},\"i\":{\"docs\":{\"29\":{\"ref\":29,\"tf\":0.02564102564102564},\"56\":{\"ref\":56,\"tf\":0.003189792663476874},\"57\":{\"ref\":57,\"tf\":0.0023584905660377358},\"65\":{\"ref\":65,\"tf\":0.025},\"134\":{\"ref\":134,\"tf\":0.0011507479861910242},\"135\":{\"ref\":135,\"tf\":0.005791505791505791}}}}},\"o\":{\"docs\":{},\"n\":{\"docs\":{\"134\":{\"ref\":134,\"tf\":0.0011507479861910242}},\"g\":{\"docs\":{\"33\":{\"ref\":33,\"tf\":0.1},\"34\":{\"ref\":34,\"tf\":0.016666666666666666},\"35\":{\"ref\":35,\"tf\":0.01818181818181818},\"40\":{\"ref\":40,\"tf\":0.14285714285714285},\"41\":{\"ref\":41,\"tf\":0.0625},\"42\":{\"ref\":42,\"tf\":0.07142857142857142},\"64\":{\"ref\":64,\"tf\":0.0625},\"123\":{\"ref\":123,\"tf\":0.0035211267605633804}}}}},\"d\":{\"docs\":{},\"e\":{\"docs\":{},\"r\":{\"docs\":{},\"a\":{\"docs\":{},\"a\":{\"docs\":{},\"n\":{\"docs\":{\"38\":{\"ref\":38,\"tf\":0.011627906976744186}}}}}}}},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\"a\":{\"docs\":{},\"d\":{\"docs\":{},\"i\":{\"docs\":{\"57\":{\"ref\":57,\"tf\":0.0023584905660377358},\"58\":{\"ref\":58,\"tf\":0.00546448087431694},\"104\":{\"ref\":104,\"tf\":0.00847457627118644},\"110\":{\"ref\":110,\"tf\":0.01020408163265306},\"113\":{\"ref\":113,\"tf\":0.0070921985815602835},\"119\":{\"ref\":119,\"tf\":0.003937007874015748},\"121\":{\"ref\":121,\"tf\":0.005813953488372093},\"129\":{\"ref\":129,\"tf\":0.006956521739130435},\"133\":{\"ref\":133,\"tf\":0.0033500837520938024},\"134\":{\"ref\":134,\"tf\":0.0011507479861910242},\"135\":{\"ref\":135,\"tf\":0.0019305019305019305}}}}}}},\"t\":{\"docs\":{},\"e\":{\"docs\":{},\"r\":{\"docs\":{},\"n\":{\"docs\":{\"82\":{\"ref\":82,\"tf\":0.015625}}}}},\"h\":{\"docs\":{},\"o\":{\"docs\":{},\"u\":{\"docs\":{},\"g\":{\"docs\":{},\"h\":{\"docs\":{\"103\":{\"ref\":103,\"tf\":0.006493506493506494}}}}}}}},\"e\":{\"docs\":{},\"r\":{\"docs\":{},\"t\":{\"docs\":{\"114\":{\"ref\":114,\"tf\":0.006379585326953748},\"136\":{\"ref\":136,\"tf\":0.005050505050505051}},\"(\":{\"docs\":{},\"o\":{\"docs\":{},\"p\":{\"docs\":{},\"t\":{\"docs\":{\"114\":{\"ref\":114,\"tf\":0.001594896331738437}}}}}},\"p\":{\"docs\":{},\"o\":{\"docs\":{},\"p\":{\"docs\":{},\"u\":{\"docs\":{},\"p\":{\"docs\":{\"114\":{\"ref\":114,\"tf\":0.001594896331738437}},\".\":{\"docs\":{},\"t\":{\"docs\":{},\"h\":{\"docs\":{},\"e\":{\"docs\":{},\"n\":{\"docs\":{},\"(\":{\"docs\":{},\"f\":{\"docs\":{},\"u\":{\"docs\":{},\"n\":{\"docs\":{},\"c\":{\"docs\":{},\"t\":{\"docs\":{},\"i\":{\"docs\":{},\"o\":{\"docs\":{},\"n\":{\"docs\":{},\"(\":{\"docs\":{},\"r\":{\"docs\":{\"114\":{\"ref\":114,\"tf\":0.001594896331738437}}}}}}}}}}}}}}}}}}}}}}}}}}},\"b\":{\"docs\":{},\"o\":{\"docs\":{},\"v\":{\"docs\":{\"22\":{\"ref\":22,\"tf\":0.024390243902439025},\"54\":{\"ref\":54,\"tf\":0.001287001287001287},\"56\":{\"ref\":56,\"tf\":0.007974481658692184},\"57\":{\"ref\":57,\"tf\":0.0023584905660377358},\"59\":{\"ref\":59,\"tf\":0.008356545961002786},\"60\":{\"ref\":60,\"tf\":0.0022727272727272726},\"77\":{\"ref\":77,\"tf\":0.018867924528301886},\"99\":{\"ref\":99,\"tf\":0.02127659574468085},\"123\":{\"ref\":123,\"tf\":0.0035211267605633804},\"129\":{\"ref\":129,\"tf\":0.0017391304347826088},\"133\":{\"ref\":133,\"tf\":0.0033500837520938024}}}},\"i\":{\"docs\":{},\"l\":{\"docs\":{\"47\":{\"ref\":47,\"tf\":0.01},\"84\":{\"ref\":84,\"tf\":0.0036363636363636364},\"123\":{\"ref\":123,\"tf\":0.0035211267605633804},\"131\":{\"ref\":131,\"tf\":0.05555555555555555},\"135\":{\"ref\":135,\"tf\":0.0019305019305019305},\"136\":{\"ref\":136,\"tf\":0.005050505050505051}}}},\"s\":{\"docs\":{},\"t\":{\"docs\":{},\"r\":{\"docs\":{},\"a\":{\"docs\":{},\"c\":{\"docs\":{},\"t\":{\"docs\":{\"54\":{\"ref\":54,\"tf\":0.001287001287001287},\"113\":{\"ref\":113,\"tf\":0.0070921985815602835},\"124\":{\"ref\":124,\"tf\":0.010309278350515464}}}}}}},\"o\":{\"docs\":{},\"l\":{\"docs\":{},\"u\":{\"docs\":{},\"t\":{\"docs\":{\"72\":{\"ref\":72,\"tf\":0.004662004662004662},\"129\":{\"ref\":129,\"tf\":0.0017391304347826088}}}}}}}},\"m\":{\"docs\":{},\"p\":{\"docs\":{\"26\":{\"ref\":26,\"tf\":3.333333333333333},\"71\":{\"ref\":71,\"tf\":0.008},\"126\":{\"ref\":126,\"tf\":0.011111111111111112}}},\"o\":{\"docs\":{},\"u\":{\"docs\":{},\"n\":{\"docs\":{},\"t\":{\"docs\":{\"44\":{\"ref\":44,\"tf\":0.018518518518518517},\"56\":{\"ref\":56,\"tf\":0.001594896331738437},\"72\":{\"ref\":72,\"tf\":0.002331002331002331},\"90\":{\"ref\":90,\"tf\":0.020833333333333332},\"116\":{\"ref\":116,\"tf\":0.005555555555555556}}}}},\"n\":{\"docs\":{},\"g\":{\"docs\":{},\"s\":{\"docs\":{},\"t\":{\"docs\":{\"84\":{\"ref\":84,\"tf\":0.0036363636363636364}}}}}}},\"a\":{\"docs\":{},\"z\":{\"docs\":{\"70\":{\"ref\":70,\"tf\":0.023809523809523808},\"134\":{\"ref\":134,\"tf\":0.0023014959723820483}}}}},\"w\":{\"docs\":{},\"a\":{\"docs\":{},\"r\":{\"docs\":{\"26\":{\"ref\":26,\"tf\":0.021739130434782608},\"74\":{\"ref\":74,\"tf\":0.005988023952095809}}},\"i\":{\"docs\":{\"50\":{\"ref\":50,\"tf\":0.008928571428571428},\"54\":{\"ref\":54,\"tf\":0.001287001287001287},\"78\":{\"ref\":78,\"tf\":0.011235955056179775}}}},\"e\":{\"docs\":{},\"s\":{\"docs\":{},\"o\":{\"docs\":{},\"m\":{\"docs\":{\"129\":{\"ref\":129,\"tf\":0.0017391304347826088},\"133\":{\"ref\":133,\"tf\":0.0016750418760469012},\"135\":{\"ref\":135,\"tf\":0.0019305019305019305}},\"e\":{\"docs\":{},\"<\":{\"docs\":{},\"/\":{\"docs\":{},\"h\":{\"3\":{\"docs\":{\"133\":{\"ref\":133,\"tf\":0.0016750418760469012}}},\"docs\":{}},\"l\":{\"docs\":{},\"i\":{\"docs\":{\"133\":{\"ref\":133,\"tf\":0.0033500837520938024}}}}}}}}}}}},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"r\":{\"docs\":{\"72\":{\"ref\":72,\"tf\":0.002331002331002331},\"74\":{\"ref\":74,\"tf\":0.005988023952095809},\"76\":{\"ref\":76,\"tf\":0.018867924528301886},\"77\":{\"ref\":77,\"tf\":0.018867924528301886},\"78\":{\"ref\":78,\"tf\":0.011235955056179775},\"80\":{\"ref\":80,\"tf\":0.007692307692307693},\"82\":{\"ref\":82,\"tf\":0.0078125},\"83\":{\"ref\":83,\"tf\":0.02127659574468085},\"84\":{\"ref\":84,\"tf\":0.0036363636363636364},\"88\":{\"ref\":88,\"tf\":0.009708737864077669},\"89\":{\"ref\":89,\"tf\":0.022727272727272728},\"90\":{\"ref\":90,\"tf\":0.010416666666666666},\"91\":{\"ref\":91,\"tf\":0.0196078431372549},\"92\":{\"ref\":92,\"tf\":0.02857142857142857},\"93\":{\"ref\":93,\"tf\":0.014084507042253521},\"94\":{\"ref\":94,\"tf\":0.011111111111111112},\"95\":{\"ref\":95,\"tf\":0.009345794392523364},\"96\":{\"ref\":96,\"tf\":0.017857142857142856},\"97\":{\"ref\":97,\"tf\":0.019230769230769232},\"98\":{\"ref\":98,\"tf\":0.018867924528301886},\"130\":{\"ref\":130,\"tf\":0.0043859649122807015}},\"i\":{\"docs\":{},\"b\":{\"docs\":{},\"u\":{\"docs\":{},\"t\":{\"docs\":{\"27\":{\"ref\":27,\"tf\":0.03225806451612903},\"29\":{\"ref\":29,\"tf\":0.02564102564102564},\"36\":{\"ref\":36,\"tf\":0.017857142857142856},\"59\":{\"ref\":59,\"tf\":0.002785515320334262},\"72\":{\"ref\":72,\"tf\":0.002331002331002331},\"84\":{\"ref\":84,\"tf\":0.0036363636363636364},\"99\":{\"ref\":99,\"tf\":0.02127659574468085},\"102\":{\"ref\":102,\"tf\":0.020833333333333332},\"104\":{\"ref\":104,\"tf\":0.00423728813559322},\"134\":{\"ref\":134,\"tf\":0.004602991944764097}}}}}}},\"e\":{\"docs\":{},\"m\":{\"docs\":{},\"p\":{\"docs\":{},\"t\":{\"docs\":{\"103\":{\"ref\":103,\"tf\":0.012987012987012988}}}}}}}},\"-\":{\"docs\":{},\"w\":{\"docs\":{\"38\":{\"ref\":38,\"tf\":0.011627906976744186}}}},\"g\":{\"docs\":{},\"a\":{\"docs\":{},\"i\":{\"docs\":{},\"n\":{\"docs\":{\"54\":{\"ref\":54,\"tf\":0.001287001287001287},\"81\":{\"ref\":81,\"tf\":0.015151515151515152},\"117\":{\"ref\":117,\"tf\":0.007575757575757576},\"134\":{\"ref\":134,\"tf\":0.0034522439585730723}},\"s\":{\"docs\":{},\"t\":{\"docs\":{\"119\":{\"ref\":119,\"tf\":0.003937007874015748}}}}}}}},\"i\":{\"docs\":{},\"r\":{\"docs\":{},\"p\":{\"docs\":{},\"l\":{\"docs\":{},\"a\":{\"docs\":{},\"n\":{\"docs\":{\"97\":{\"ref\":97,\"tf\":0.019230769230769232}},\"e\":{\"docs\":{},\"m\":{\"docs\":{},\"o\":{\"docs\":{},\"d\":{\"docs\":{\"97\":{\"ref\":97,\"tf\":0.019230769230769232}}}}}}}}}}}}},\"b\":{\"1\":{\"docs\":{\"38\":{\"ref\":38,\"tf\":0.011627906976744186}}},\"docs\":{\"87\":{\"ref\":87,\"tf\":0.041666666666666664}},\"a\":{\"docs\":{},\"r\":{\"docs\":{\"1\":{\"ref\":1,\"tf\":0.13636363636363635},\"11\":{\"ref\":11,\"tf\":0.045454545454545456},\"13\":{\"ref\":13,\"tf\":5.038461538461538},\"15\":{\"ref\":15,\"tf\":0.045454545454545456},\"39\":{\"ref\":39,\"tf\":0.012658227848101266},\"54\":{\"ref\":54,\"tf\":0.003861003861003861},\"60\":{\"ref\":60,\"tf\":0.0022727272727272726},\"76\":{\"ref\":76,\"tf\":0.018867924528301886},\"77\":{\"ref\":77,\"tf\":0.018867924528301886},\"82\":{\"ref\":82,\"tf\":0.0078125},\"84\":{\"ref\":84,\"tf\":0.0036363636363636364},\"95\":{\"ref\":95,\"tf\":0.009345794392523364},\"96\":{\"ref\":96,\"tf\":0.017857142857142856},\"101\":{\"ref\":101,\"tf\":0.043478260869565216},\"112\":{\"ref\":112,\"tf\":0.011764705882352941},\"121\":{\"ref\":121,\"tf\":0.01744186046511628},\"123\":{\"ref\":123,\"tf\":0.01056338028169014},\"130\":{\"ref\":130,\"tf\":0.03508771929824561},\"132\":{\"ref\":132,\"tf\":2.5256410256410255},\"133\":{\"ref\":133,\"tf\":0.008375209380234505}},\"-\":{\"docs\":{},\"a\":{\"docs\":{},\"s\":{\"docs\":{},\"s\":{\"docs\":{},\"e\":{\"docs\":{},\"r\":{\"docs\":{},\"t\":{\"docs\":{\"0\":{\"ref\":0,\"tf\":0.03225806451612903}}}}}}}},\"b\":{\"docs\":{},\"a\":{\"docs\":{},\"l\":{\"docs\":{},\"a\":{\"docs\":{},\"n\":{\"docs\":{},\"c\":{\"docs\":{\"0\":{\"ref\":0,\"tf\":0.03225806451612903}}}}}}}},\"c\":{\"docs\":{},\"a\":{\"docs\":{},\"l\":{\"docs\":{},\"m\":{\"docs\":{\"0\":{\"ref\":0,\"tf\":0.03225806451612903}}}}}},\"d\":{\"docs\":{},\"a\":{\"docs\":{},\"r\":{\"docs\":{},\"k\":{\"docs\":{\"0\":{\"ref\":0,\"tf\":0.03225806451612903}}}}}},\"e\":{\"docs\":{},\"n\":{\"docs\":{},\"e\":{\"docs\":{},\"r\":{\"docs\":{},\"g\":{\"docs\":{\"0\":{\"ref\":0,\"tf\":0.03225806451612903}}}}}}},\"l\":{\"docs\":{},\"i\":{\"docs\":{},\"g\":{\"docs\":{},\"h\":{\"docs\":{},\"t\":{\"docs\":{\"0\":{\"ref\":0,\"tf\":0.03225806451612903}}}}}}},\"p\":{\"docs\":{},\"o\":{\"docs\":{},\"s\":{\"docs\":{},\"i\":{\"docs\":{},\"t\":{\"docs\":{\"0\":{\"ref\":0,\"tf\":0.03225806451612903}}}}}}},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"y\":{\"docs\":{\"0\":{\"ref\":0,\"tf\":0.03225806451612903}}}}},\"s\":{\"docs\":{},\"t\":{\"docs\":{},\"a\":{\"docs\":{},\"b\":{\"docs\":{},\"l\":{\"docs\":{\"0\":{\"ref\":0,\"tf\":0.03225806451612903}}}}}},\"u\":{\"docs\":{},\"b\":{\"docs\":{},\"f\":{\"docs\":{},\"o\":{\"docs\":{},\"o\":{\"docs\":{},\"t\":{\"docs\":{\"76\":{\"ref\":76,\"tf\":0.018867924528301886}}}}}},\"h\":{\"docs\":{},\"e\":{\"docs\":{},\"a\":{\"docs\":{},\"d\":{\"docs\":{\"77\":{\"ref\":77,\"tf\":0.018867924528301886}}}}}}}}},\"f\":{\"docs\":{},\"o\":{\"docs\":{},\"o\":{\"docs\":{},\"t\":{\"docs\":{\"3\":{\"ref\":3,\"tf\":0.019230769230769232}}}}}},\"h\":{\"docs\":{},\"e\":{\"docs\":{},\"a\":{\"docs\":{},\"d\":{\"docs\":{\"3\":{\"ref\":3,\"tf\":0.019230769230769232}}}}}}},\"]\":{\"docs\":{},\"(\":{\"docs\":{},\"/\":{\"docs\":{},\"t\":{\"docs\":{},\"u\":{\"docs\":{},\"t\":{\"docs\":{},\"o\":{\"docs\":{},\"r\":{\"docs\":{},\"i\":{\"docs\":{},\"a\":{\"docs\":{},\"l\":{\"docs\":{},\"s\":{\"docs\":{},\"/\":{\"docs\":{},\"f\":{\"docs\":{},\"a\":{\"docs\":{},\"d\":{\"docs\":{},\"e\":{\"docs\":{},\"-\":{\"docs\":{},\"s\":{\"docs\":{},\"t\":{\"docs\":{},\"a\":{\"docs\":{},\"t\":{\"docs\":{},\"u\":{\"docs\":{},\"s\":{\"docs\":{},\"-\":{\"docs\":{},\"b\":{\"docs\":{},\"a\":{\"docs\":{},\"r\":{\"docs\":{\"128\":{\"ref\":128,\"tf\":0.017857142857142856}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},\"c\":{\"docs\":{},\"k\":{\"docs\":{\"10\":{\"ref\":10,\"tf\":0.047619047619047616},\"18\":{\"ref\":18,\"tf\":0.04},\"59\":{\"ref\":59,\"tf\":0.002785515320334262},\"81\":{\"ref\":81,\"tf\":0.09090909090909091},\"82\":{\"ref\":82,\"tf\":0.015625},\"98\":{\"ref\":98,\"tf\":0.018867924528301886},\"112\":{\"ref\":112,\"tf\":0.01764705882352941},\"113\":{\"ref\":113,\"tf\":0.05673758865248227},\"123\":{\"ref\":123,\"tf\":0.007042253521126761},\"133\":{\"ref\":133,\"tf\":0.0033500837520938024}},\"g\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"u\":{\"docs\":{},\"n\":{\"docs\":{},\"d\":{\"docs\":{\"8\":{\"ref\":8,\"tf\":0.05405405405405406},\"9\":{\"ref\":9,\"tf\":0.02702702702702703},\"12\":{\"ref\":12,\"tf\":0.05},\"15\":{\"ref\":15,\"tf\":0.022727272727272728},\"43\":{\"ref\":43,\"tf\":0.006944444444444444},\"44\":{\"ref\":44,\"tf\":0.018518518518518517},\"45\":{\"ref\":45,\"tf\":0.00980392156862745},\"46\":{\"ref\":46,\"tf\":0.019230769230769232},\"47\":{\"ref\":47,\"tf\":0.01},\"48\":{\"ref\":48,\"tf\":0.011627906976744186}},\"-\":{\"docs\":{},\"c\":{\"docs\":{},\"o\":{\"docs\":{},\"l\":{\"docs\":{},\"o\":{\"docs\":{},\"r\":{\"docs\":{\"130\":{\"ref\":130,\"tf\":0.0043859649122807015},\"133\":{\"ref\":133,\"tf\":0.0016750418760469012}}}}}}}}}}}}}},\"d\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"p\":{\"docs\":{\"71\":{\"ref\":71,\"tf\":0.008},\"105\":{\"ref\":105,\"tf\":0.011695906432748537},\"107\":{\"ref\":107,\"tf\":0.13924050632911392},\"110\":{\"ref\":110,\"tf\":0.01020408163265306}}}}}},\"(\":{\"docs\":{},\"[\":{\"docs\":{},\"e\":{\"docs\":{},\"v\":{\"docs\":{\"112\":{\"ref\":112,\"tf\":0.0058823529411764705}}}}}},\"b\":{\"docs\":{},\"u\":{\"docs\":{},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"o\":{\"docs\":{},\"n\":{\"docs\":{\"113\":{\"ref\":113,\"tf\":0.0070921985815602835}},\"a\":{\"docs\":{},\"c\":{\"docs\":{},\"t\":{\"docs\":{\"113\":{\"ref\":113,\"tf\":0.0070921985815602835}}}}}}}}}}}},\"o\":{\"docs\":{},\"n\":{\"docs\":{\"54\":{\"ref\":54,\"tf\":0.001287001287001287}}}}},\"s\":{\"docs\":{},\"i\":{\"docs\":{},\"c\":{\"docs\":{\"14\":{\"ref\":14,\"tf\":0.011494252873563218},\"21\":{\"ref\":21,\"tf\":0.0196078431372549},\"22\":{\"ref\":22,\"tf\":0.04878048780487805},\"54\":{\"ref\":54,\"tf\":0.001287001287001287},\"57\":{\"ref\":57,\"tf\":0.0023584905660377358},\"59\":{\"ref\":59,\"tf\":0.002785515320334262},\"72\":{\"ref\":72,\"tf\":0.002331002331002331},\"80\":{\"ref\":80,\"tf\":0.015384615384615385},\"104\":{\"ref\":104,\"tf\":0.00423728813559322},\"114\":{\"ref\":114,\"tf\":0.001594896331738437},\"123\":{\"ref\":123,\"tf\":0.0035211267605633804},\"134\":{\"ref\":134,\"tf\":0.0011507479861910242},\"135\":{\"ref\":135,\"tf\":0.0019305019305019305}}}},\"h\":{\"docs\":{\"56\":{\"ref\":56,\"tf\":0.007974481658692184},\"58\":{\"ref\":58,\"tf\":0.01366120218579235},\"60\":{\"ref\":60,\"tf\":0.00909090909090909}}},\"e\":{\"docs\":{\"127\":{\"ref\":127,\"tf\":0.006622516556291391},\"133\":{\"ref\":133,\"tf\":0.0016750418760469012},\"136\":{\"ref\":136,\"tf\":0.005050505050505051}}}},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"l\":{\"docs\":{},\"e\":{\"docs\":{},\"t\":{\"docs\":{},\"o\":{\"docs\":{},\"a\":{\"docs\":{},\"d\":{\"docs\":{\"14\":{\"ref\":14,\"tf\":0.011494252873563218}}}}}}}}}},\"d\":{\"docs\":{\"16\":{\"ref\":16,\"tf\":0.007352941176470588},\"133\":{\"ref\":133,\"tf\":0.0033500837520938024},\"134\":{\"ref\":134,\"tf\":0.0023014959723820483}},\"g\":{\"docs\":{\"16\":{\"ref\":16,\"tf\":0.007352941176470588},\"95\":{\"ref\":95,\"tf\":0.028037383177570093}},\"e\":{\"docs\":{},\"-\":{\"docs\":{},\"s\":{\"docs\":{},\"t\":{\"docs\":{},\"y\":{\"docs\":{},\"l\":{\"docs\":{\"95\":{\"ref\":95,\"tf\":0.009345794392523364}}}}}}}}}},\"l\":{\"docs\":{},\"a\":{\"docs\":{},\"n\":{\"docs\":{},\"c\":{\"docs\":{\"50\":{\"ref\":50,\"tf\":0.008928571428571428},\"129\":{\"ref\":129,\"tf\":0.0017391304347826088}}}}}},\"n\":{\"docs\":{},\"a\":{\"docs\":{},\"n\":{\"docs\":{},\"a\":{\"docs\":{\"112\":{\"ref\":112,\"tf\":0.0058823529411764705}}}}}}},\"u\":{\"docs\":{\"133\":{\"ref\":133,\"tf\":0.0016750418760469012}},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"o\":{\"docs\":{},\"n\":{\"docs\":{\"0\":{\"ref\":0,\"tf\":0.03225806451612903},\"1\":{\"ref\":1,\"tf\":0.045454545454545456},\"3\":{\"ref\":3,\"tf\":0.057692307692307696},\"4\":{\"ref\":4,\"tf\":10.090909090909092},\"5\":{\"ref\":5,\"tf\":5.128205128205128},\"6\":{\"ref\":6,\"tf\":2.5952380952380953},\"7\":{\"ref\":7,\"tf\":0.16},\"8\":{\"ref\":8,\"tf\":5.108108108108108},\"9\":{\"ref\":9,\"tf\":5.081081081081081},\"10\":{\"ref\":10,\"tf\":5.095238095238095},\"11\":{\"ref\":11,\"tf\":6.757575757575757},\"12\":{\"ref\":12,\"tf\":3.533333333333333},\"13\":{\"ref\":13,\"tf\":5.038461538461538},\"14\":{\"ref\":14,\"tf\":0.011494252873563218},\"17\":{\"ref\":17,\"tf\":5.153846153846154},\"31\":{\"ref\":31,\"tf\":0.047619047619047616},\"33\":{\"ref\":33,\"tf\":0.1},\"36\":{\"ref\":36,\"tf\":3.3869047619047614},\"39\":{\"ref\":39,\"tf\":0.012658227848101266},\"51\":{\"ref\":51,\"tf\":0.05084745762711865},\"54\":{\"ref\":54,\"tf\":0.007722007722007722},\"58\":{\"ref\":58,\"tf\":0.00273224043715847},\"76\":{\"ref\":76,\"tf\":0.03773584905660377},\"77\":{\"ref\":77,\"tf\":0.03773584905660377},\"80\":{\"ref\":80,\"tf\":0.038461538461538464},\"81\":{\"ref\":81,\"tf\":0.030303030303030304},\"82\":{\"ref\":82,\"tf\":0.03125},\"83\":{\"ref\":83,\"tf\":0.0851063829787234},\"98\":{\"ref\":98,\"tf\":0.018867924528301886},\"102\":{\"ref\":102,\"tf\":0.020833333333333332},\"104\":{\"ref\":104,\"tf\":0.00847457627118644},\"105\":{\"ref\":105,\"tf\":0.06432748538011696},\"109\":{\"ref\":109,\"tf\":0.05982905982905983},\"112\":{\"ref\":112,\"tf\":0.01764705882352941},\"113\":{\"ref\":113,\"tf\":0.04964539007092199},\"114\":{\"ref\":114,\"tf\":0.03668261562998405},\"123\":{\"ref\":123,\"tf\":0.014084507042253521},\"133\":{\"ref\":133,\"tf\":0.021775544388609715},\"134\":{\"ref\":134,\"tf\":0.006904487917146145},\"136\":{\"ref\":136,\"tf\":0.010101010101010102}},\"-\":{\"docs\":{},\"a\":{\"docs\":{},\"s\":{\"docs\":{},\"s\":{\"docs\":{},\"e\":{\"docs\":{},\"r\":{\"docs\":{},\"t\":{\"docs\":{\"4\":{\"ref\":4,\"tf\":0.045454545454545456},\"5\":{\"ref\":5,\"tf\":0.02564102564102564},\"6\":{\"ref\":6,\"tf\":0.023809523809523808},\"7\":{\"ref\":7,\"tf\":0.04},\"8\":{\"ref\":8,\"tf\":0.02702702702702703},\"9\":{\"ref\":9,\"tf\":0.02702702702702703}}}}}}}},\"b\":{\"docs\":{},\"a\":{\"docs\":{},\"l\":{\"docs\":{},\"a\":{\"docs\":{},\"n\":{\"docs\":{},\"c\":{\"docs\":{\"4\":{\"ref\":4,\"tf\":0.045454545454545456},\"5\":{\"ref\":5,\"tf\":0.02564102564102564},\"6\":{\"ref\":6,\"tf\":0.023809523809523808},\"7\":{\"ref\":7,\"tf\":0.04},\"8\":{\"ref\":8,\"tf\":0.02702702702702703},\"9\":{\"ref\":9,\"tf\":0.02702702702702703}}}}}},\"r\":{\"docs\":{\"13\":{\"ref\":13,\"tf\":0.019230769230769232}}}},\"l\":{\"docs\":{},\"o\":{\"docs\":{},\"c\":{\"docs\":{},\"k\":{\"docs\":{\"5\":{\"ref\":5,\"tf\":0.02564102564102564},\"54\":{\"ref\":54,\"tf\":0.001287001287001287}}}}}}},\"c\":{\"docs\":{},\"a\":{\"docs\":{},\"l\":{\"docs\":{},\"m\":{\"docs\":{\"4\":{\"ref\":4,\"tf\":0.045454545454545456},\"5\":{\"ref\":5,\"tf\":0.02564102564102564},\"6\":{\"ref\":6,\"tf\":0.023809523809523808},\"7\":{\"ref\":7,\"tf\":0.04},\"8\":{\"ref\":8,\"tf\":0.02702702702702703},\"9\":{\"ref\":9,\"tf\":0.02702702702702703}}}}},\"l\":{\"docs\":{},\"e\":{\"docs\":{},\"a\":{\"docs\":{},\"r\":{\"docs\":{\"9\":{\"ref\":9,\"tf\":0.02702702702702703},\"12\":{\"ref\":12,\"tf\":0.05},\"54\":{\"ref\":54,\"tf\":0.001287001287001287},\"133\":{\"ref\":133,\"tf\":0.006700167504187605}}}}}}},\"d\":{\"docs\":{},\"a\":{\"docs\":{},\"r\":{\"docs\":{},\"k\":{\"docs\":{\"4\":{\"ref\":4,\"tf\":0.045454545454545456},\"5\":{\"ref\":5,\"tf\":0.02564102564102564},\"6\":{\"ref\":6,\"tf\":0.023809523809523808},\"7\":{\"ref\":7,\"tf\":0.04},\"8\":{\"ref\":8,\"tf\":0.02702702702702703},\"9\":{\"ref\":9,\"tf\":0.02702702702702703}}}}}},\"e\":{\"docs\":{},\"n\":{\"docs\":{},\"e\":{\"docs\":{},\"r\":{\"docs\":{},\"g\":{\"docs\":{\"4\":{\"ref\":4,\"tf\":0.045454545454545456},\"5\":{\"ref\":5,\"tf\":0.02564102564102564},\"6\":{\"ref\":6,\"tf\":0.023809523809523808},\"7\":{\"ref\":7,\"tf\":0.04},\"8\":{\"ref\":8,\"tf\":0.02702702702702703},\"9\":{\"ref\":9,\"tf\":0.02702702702702703}}}}}}},\"l\":{\"docs\":{},\"i\":{\"docs\":{},\"g\":{\"docs\":{},\"h\":{\"docs\":{},\"t\":{\"docs\":{\"4\":{\"ref\":4,\"tf\":0.045454545454545456},\"5\":{\"ref\":5,\"tf\":0.02564102564102564},\"6\":{\"ref\":6,\"tf\":0.023809523809523808},\"7\":{\"ref\":7,\"tf\":0.04},\"8\":{\"ref\":8,\"tf\":0.02702702702702703},\"9\":{\"ref\":9,\"tf\":0.02702702702702703}}}}}},\"a\":{\"docs\":{},\"r\":{\"docs\":{},\"g\":{\"docs\":{\"7\":{\"ref\":7,\"tf\":0.04}}}}}},\"p\":{\"docs\":{},\"o\":{\"docs\":{},\"s\":{\"docs\":{},\"i\":{\"docs\":{},\"t\":{\"docs\":{\"4\":{\"ref\":4,\"tf\":0.045454545454545456},\"5\":{\"ref\":5,\"tf\":0.02564102564102564},\"6\":{\"ref\":6,\"tf\":0.023809523809523808},\"7\":{\"ref\":7,\"tf\":0.04},\"8\":{\"ref\":8,\"tf\":0.05405405405405406},\"9\":{\"ref\":9,\"tf\":0.05405405405405406},\"54\":{\"ref\":54,\"tf\":0.001287001287001287},\"114\":{\"ref\":114,\"tf\":0.001594896331738437},\"133\":{\"ref\":133,\"tf\":0.006700167504187605},\"136\":{\"ref\":136,\"tf\":0.005050505050505051}},\"i\":{\"docs\":{},\"v\":{\"docs\":{},\"e\":{\"docs\":{},\"\\\"\":{\"docs\":{},\">\":{\"docs\":{},\"c\":{\"docs\":{},\"r\":{\"docs\":{\"54\":{\"ref\":54,\"tf\":0.001287001287001287}}}}}}}}}}}}}},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"y\":{\"docs\":{\"4\":{\"ref\":4,\"tf\":0.045454545454545456},\"5\":{\"ref\":5,\"tf\":0.02564102564102564},\"6\":{\"ref\":6,\"tf\":0.023809523809523808},\"7\":{\"ref\":7,\"tf\":0.04},\"8\":{\"ref\":8,\"tf\":0.02702702702702703},\"9\":{\"ref\":9,\"tf\":0.02702702702702703}}}}},\"s\":{\"docs\":{},\"t\":{\"docs\":{\"4\":{\"ref\":4,\"tf\":0.045454545454545456},\"5\":{\"ref\":5,\"tf\":0.02564102564102564},\"6\":{\"ref\":6,\"tf\":0.023809523809523808},\"7\":{\"ref\":7,\"tf\":0.04},\"8\":{\"ref\":8,\"tf\":0.02702702702702703},\"9\":{\"ref\":9,\"tf\":0.02702702702702703}}},\"m\":{\"docs\":{},\"a\":{\"docs\":{},\"l\":{\"docs\":{\"7\":{\"ref\":7,\"tf\":0.04}}}}}},\"f\":{\"docs\":{},\"u\":{\"docs\":{},\"l\":{\"docs\":{\"6\":{\"ref\":6,\"tf\":0.023809523809523808}}}}},\"o\":{\"docs\":{},\"u\":{\"docs\":{},\"t\":{\"docs\":{},\"l\":{\"docs\":{},\"i\":{\"docs\":{},\"n\":{\"docs\":{\"8\":{\"ref\":8,\"tf\":0.02702702702702703}}}}}}}}},\"'\":{\"docs\":{\"5\":{\"ref\":5,\"tf\":0.02564102564102564},\"6\":{\"ref\":6,\"tf\":0.023809523809523808}}},\"c\":{\"docs\":{},\"l\":{\"docs\":{},\"i\":{\"docs\":{},\"c\":{\"docs\":{},\"k\":{\"docs\":{\"105\":{\"ref\":105,\"tf\":0.011695906432748537}}}}}}}}},\"e\":{\"docs\":{},\"r\":{\"docs\":{\"60\":{\"ref\":60,\"tf\":0.0022727272727272726}},\"f\":{\"docs\":{},\"i\":{\"docs\":{},\"n\":{\"docs\":{},\"g\":{\"docs\":{\"15\":{\"ref\":15,\"tf\":0.045454545454545456}}}}}}}}}},\"i\":{\"docs\":{},\"l\":{\"docs\":{},\"t\":{\"docs\":{\"10\":{\"ref\":10,\"tf\":0.023809523809523808},\"16\":{\"ref\":16,\"tf\":0.007352941176470588},\"50\":{\"ref\":50,\"tf\":0.008928571428571428},\"57\":{\"ref\":57,\"tf\":0.0047169811320754715},\"65\":{\"ref\":65,\"tf\":0.025},\"70\":{\"ref\":70,\"tf\":0.047619047619047616},\"72\":{\"ref\":72,\"tf\":0.002331002331002331},\"74\":{\"ref\":74,\"tf\":0.005988023952095809},\"114\":{\"ref\":114,\"tf\":0.001594896331738437},\"123\":{\"ref\":123,\"tf\":0.0035211267605633804},\"126\":{\"ref\":126,\"tf\":0.011111111111111112},\"128\":{\"ref\":128,\"tf\":0.017857142857142856},\"129\":{\"ref\":129,\"tf\":0.0052173913043478265},\"131\":{\"ref\":131,\"tf\":0.05555555555555555},\"134\":{\"ref\":134,\"tf\":0.0011507479861910242},\"135\":{\"ref\":135,\"tf\":0.0019305019305019305}},\"-\":{\"docs\":{},\"i\":{\"docs\":{},\"n\":{\"docs\":{\"136\":{\"ref\":136,\"tf\":0.010101010101010102}}}}}},\"d\":{\"docs\":{\"39\":{\"ref\":39,\"tf\":0.012658227848101266},\"50\":{\"ref\":50,\"tf\":0.008928571428571428},\"54\":{\"ref\":54,\"tf\":2.5025740025740024},\"55\":{\"ref\":55,\"tf\":0.04081632653061224},\"56\":{\"ref\":56,\"tf\":0.012759170653907496},\"57\":{\"ref\":57,\"tf\":0.030660377358490566},\"58\":{\"ref\":58,\"tf\":0.01912568306010929},\"59\":{\"ref\":59,\"tf\":3.3416898792943357},\"60\":{\"ref\":60,\"tf\":0.015909090909090907},\"61\":{\"ref\":61,\"tf\":0.010869565217391304},\"63\":{\"ref\":63,\"tf\":0.04878048780487805},\"67\":{\"ref\":67,\"tf\":0.027777777777777776},\"70\":{\"ref\":70,\"tf\":0.023809523809523808},\"126\":{\"ref\":126,\"tf\":0.011111111111111112},\"127\":{\"ref\":127,\"tf\":0.033112582781456956},\"128\":{\"ref\":128,\"tf\":0.017857142857142856},\"129\":{\"ref\":129,\"tf\":0.0034782608695652175},\"133\":{\"ref\":133,\"tf\":0.0033500837520938024},\"134\":{\"ref\":134,\"tf\":0.0034522439585730723},\"135\":{\"ref\":135,\"tf\":0.013513513513513514},\"136\":{\"ref\":136,\"tf\":0.005050505050505051}}}}},\"n\":{\"docs\":{},\"d\":{\"docs\":{},\"l\":{\"docs\":{\"56\":{\"ref\":56,\"tf\":0.001594896331738437},\"59\":{\"ref\":59,\"tf\":0.002785515320334262}}}},\"c\":{\"docs\":{},\"h\":{\"docs\":{\"129\":{\"ref\":129,\"tf\":0.0017391304347826088}}}}},\"l\":{\"docs\":{},\"k\":{\"docs\":{\"57\":{\"ref\":57,\"tf\":0.0023584905660377358},\"135\":{\"ref\":135,\"tf\":0.0019305019305019305}}}},\"g\":{\"docs\":{\"96\":{\"ref\":96,\"tf\":0.017857142857142856},\"134\":{\"ref\":134,\"tf\":0.0011507479861910242}}},\"b\":{\"docs\":{},\"b\":{\"docs\":{},\"l\":{\"docs\":{\"120\":{\"ref\":120,\"tf\":0.018867924528301886}}}}}},\"e\":{\"docs\":{\"103\":{\"ref\":103,\"tf\":0.006493506493506494},\"104\":{\"ref\":104,\"tf\":0.00423728813559322}},\"l\":{\"docs\":{},\"o\":{\"docs\":{},\"w\":{\"docs\":{\"1\":{\"ref\":1,\"tf\":0.045454545454545456},\"22\":{\"ref\":22,\"tf\":0.024390243902439025},\"44\":{\"ref\":44,\"tf\":0.018518518518518517},\"58\":{\"ref\":58,\"tf\":0.00273224043715847},\"59\":{\"ref\":59,\"tf\":0.002785515320334262},\"72\":{\"ref\":72,\"tf\":0.004662004662004662},\"76\":{\"ref\":76,\"tf\":0.018867924528301886},\"81\":{\"ref\":81,\"tf\":0.015151515151515152},\"84\":{\"ref\":84,\"tf\":0.0036363636363636364},\"97\":{\"ref\":97,\"tf\":0.019230769230769232},\"98\":{\"ref\":98,\"tf\":0.018867924528301886},\"100\":{\"ref\":100,\"tf\":0.041666666666666664},\"101\":{\"ref\":101,\"tf\":0.043478260869565216},\"102\":{\"ref\":102,\"tf\":0.020833333333333332},\"103\":{\"ref\":103,\"tf\":0.006493506493506494},\"114\":{\"ref\":114,\"tf\":0.003189792663476874},\"115\":{\"ref\":115,\"tf\":0.003246753246753247},\"123\":{\"ref\":123,\"tf\":0.0035211267605633804},\"127\":{\"ref\":127,\"tf\":0.006622516556291391},\"129\":{\"ref\":129,\"tf\":0.0017391304347826088}}}},\"i\":{\"docs\":{},\"e\":{\"docs\":{},\"v\":{\"docs\":{\"57\":{\"ref\":57,\"tf\":0.0023584905660377358},\"134\":{\"ref\":134,\"tf\":0.0011507479861910242}}}}}},\"t\":{\"docs\":{},\"w\":{\"docs\":{},\"e\":{\"docs\":{},\"e\":{\"docs\":{},\"n\":{\"docs\":{\"5\":{\"ref\":5,\"tf\":0.02564102564102564},\"21\":{\"ref\":21,\"tf\":0.00980392156862745},\"39\":{\"ref\":39,\"tf\":0.012658227848101266},\"52\":{\"ref\":52,\"tf\":0.010416666666666666},\"60\":{\"ref\":60,\"tf\":0.0022727272727272726},\"74\":{\"ref\":74,\"tf\":0.005988023952095809},\"84\":{\"ref\":84,\"tf\":0.0036363636363636364},\"94\":{\"ref\":94,\"tf\":0.011111111111111112},\"102\":{\"ref\":102,\"tf\":0.020833333333333332},\"104\":{\"ref\":104,\"tf\":0.00423728813559322},\"116\":{\"ref\":116,\"tf\":0.011111111111111112},\"119\":{\"ref\":119,\"tf\":0.003937007874015748},\"123\":{\"ref\":123,\"tf\":0.01056338028169014},\"130\":{\"ref\":130,\"tf\":0.0043859649122807015},\"133\":{\"ref\":133,\"tf\":0.0016750418760469012},\"134\":{\"ref\":134,\"tf\":0.0011507479861910242},\"135\":{\"ref\":135,\"tf\":0.005791505791505791}}}}}},\"t\":{\"docs\":{},\"e\":{\"docs\":{},\"r\":{\"docs\":{\"54\":{\"ref\":54,\"tf\":0.001287001287001287},\"129\":{\"ref\":129,\"tf\":0.0017391304347826088},\"134\":{\"ref\":134,\"tf\":0.0011507479861910242},\"135\":{\"ref\":135,\"tf\":0.0019305019305019305}}}}}},\"a\":{\"docs\":{},\"s\":{\"docs\":{},\"t\":{\"docs\":{},\"i\":{\"docs\":{\"19\":{\"ref\":19,\"tf\":0.02}}}}},\"u\":{\"docs\":{},\"t\":{\"docs\":{},\"i\":{\"docs\":{\"57\":{\"ref\":57,\"tf\":0.0023584905660377358}}}}}},\"c\":{\"docs\":{},\"o\":{\"docs\":{},\"m\":{\"docs\":{\"21\":{\"ref\":21,\"tf\":0.0196078431372549},\"54\":{\"ref\":54,\"tf\":0.002574002574002574},\"95\":{\"ref\":95,\"tf\":0.009345794392523364},\"135\":{\"ref\":135,\"tf\":0.0019305019305019305}}}},\"a\":{\"docs\":{},\"m\":{\"docs\":{\"57\":{\"ref\":57,\"tf\":0.0023584905660377358}}}}},\"g\":{\"docs\":{},\"i\":{\"docs\":{},\"n\":{\"docs\":{\"25\":{\"ref\":25,\"tf\":0.011494252873563218},\"27\":{\"ref\":27,\"tf\":0.03225806451612903},\"117\":{\"ref\":117,\"tf\":0.007575757575757576}}}}},\"f\":{\"docs\":{},\"o\":{\"docs\":{},\"r\":{\"docs\":{\"32\":{\"ref\":32,\"tf\":0.04},\"54\":{\"ref\":54,\"tf\":0.001287001287001287},\"56\":{\"ref\":56,\"tf\":0.003189792663476874},\"57\":{\"ref\":57,\"tf\":0.0023584905660377358},\"58\":{\"ref\":58,\"tf\":0.00546448087431694},\"59\":{\"ref\":59,\"tf\":0.002785515320334262},\"72\":{\"ref\":72,\"tf\":0.002331002331002331},\"106\":{\"ref\":106,\"tf\":0.013333333333333334},\"134\":{\"ref\":134,\"tf\":0.0011507479861910242}}}}},\"h\":{\"docs\":{},\"a\":{\"docs\":{},\"v\":{\"docs\":{\"56\":{\"ref\":56,\"tf\":0.001594896331738437},\"73\":{\"ref\":73,\"tf\":0.05},\"87\":{\"ref\":87,\"tf\":0.041666666666666664},\"97\":{\"ref\":97,\"tf\":0.019230769230769232}},\"i\":{\"docs\":{},\"o\":{\"docs\":{},\"r\":{\"docs\":{\"38\":{\"ref\":38,\"tf\":0.011627906976744186},\"60\":{\"ref\":60,\"tf\":0.0022727272727272726},\"81\":{\"ref\":81,\"tf\":0.015151515151515152},\"99\":{\"ref\":99,\"tf\":0.02127659574468085},\"103\":{\"ref\":103,\"tf\":0.006493506493506494}}}}}}},\"i\":{\"docs\":{},\"n\":{\"docs\":{},\"d\":{\"docs\":{\"107\":{\"ref\":107,\"tf\":0.012658227848101266},\"130\":{\"ref\":130,\"tf\":0.0043859649122807015}}}}}},\"s\":{\"docs\":{},\"t\":{\"docs\":{\"56\":{\"ref\":56,\"tf\":0.001594896331738437},\"57\":{\"ref\":57,\"tf\":0.0023584905660377358},\"70\":{\"ref\":70,\"tf\":0.023809523809523808},\"103\":{\"ref\":103,\"tf\":0.006493506493506494}}}},\"n\":{\"docs\":{},\"e\":{\"docs\":{},\"f\":{\"docs\":{},\"i\":{\"docs\":{},\"t\":{\"docs\":{\"57\":{\"ref\":57,\"tf\":0.0023584905660377358},\"84\":{\"ref\":84,\"tf\":0.0036363636363636364},\"123\":{\"ref\":123,\"tf\":0.0035211267605633804},\"132\":{\"ref\":132,\"tf\":0.01282051282051282},\"134\":{\"ref\":134,\"tf\":0.0011507479861910242}}}}}},\"j\":{\"docs\":{},\"s\":{\"docs\":{},\"p\":{\"docs\":{},\"e\":{\"docs\":{},\"r\":{\"docs\":{},\"r\":{\"docs\":{},\"i\":{\"docs\":{\"70\":{\"ref\":70,\"tf\":0.023809523809523808}}}}}}}}}},\"y\":{\"docs\":{},\"o\":{\"docs\":{},\"n\":{\"docs\":{},\"d\":{\"docs\":{\"61\":{\"ref\":61,\"tf\":0.010869565217391304},\"134\":{\"ref\":134,\"tf\":0.0011507479861910242}}}}}}},\"o\":{\"docs\":{},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"o\":{\"docs\":{},\"m\":{\"docs\":{\"2\":{\"ref\":2,\"tf\":0.025},\"3\":{\"ref\":3,\"tf\":0.019230769230769232},\"38\":{\"ref\":38,\"tf\":0.011627906976744186},\"47\":{\"ref\":47,\"tf\":0.01},\"52\":{\"ref\":52,\"tf\":0.020833333333333332},\"56\":{\"ref\":56,\"tf\":0.001594896331738437},\"78\":{\"ref\":78,\"tf\":0.056179775280898875},\"119\":{\"ref\":119,\"tf\":0.007874015748031496},\"123\":{\"ref\":123,\"tf\":0.007042253521126761}}}}},\"h\":{\"docs\":{\"16\":{\"ref\":16,\"tf\":0.022058823529411766},\"26\":{\"ref\":26,\"tf\":0.021739130434782608},\"52\":{\"ref\":52,\"tf\":0.010416666666666666},\"54\":{\"ref\":54,\"tf\":0.001287001287001287},\"57\":{\"ref\":57,\"tf\":0.007075471698113208},\"59\":{\"ref\":59,\"tf\":0.005571030640668524},\"60\":{\"ref\":60,\"tf\":0.004545454545454545},\"80\":{\"ref\":80,\"tf\":0.007692307692307693},\"103\":{\"ref\":103,\"tf\":0.006493506493506494},\"129\":{\"ref\":129,\"tf\":0.0017391304347826088},\"134\":{\"ref\":134,\"tf\":0.0023014959723820483},\"135\":{\"ref\":135,\"tf\":0.0019305019305019305}}}},\"r\":{\"docs\":{},\"d\":{\"docs\":{},\"e\":{\"docs\":{},\"r\":{\"docs\":{\"6\":{\"ref\":6,\"tf\":0.023809523809523808},\"8\":{\"ref\":8,\"tf\":0.05405405405405406},\"9\":{\"ref\":9,\"tf\":0.05405405405405406},\"12\":{\"ref\":12,\"tf\":0.05},\"27\":{\"ref\":27,\"tf\":0.03225806451612903},\"43\":{\"ref\":43,\"tf\":0.006944444444444444},\"44\":{\"ref\":44,\"tf\":0.018518518518518517},\"45\":{\"ref\":45,\"tf\":0.00980392156862745},\"46\":{\"ref\":46,\"tf\":0.019230769230769232},\"47\":{\"ref\":47,\"tf\":0.01},\"48\":{\"ref\":48,\"tf\":0.011627906976744186},\"129\":{\"ref\":129,\"tf\":0.0017391304347826088}},\"-\":{\"docs\":{},\"r\":{\"docs\":{},\"a\":{\"docs\":{},\"d\":{\"docs\":{},\"i\":{\"docs\":{},\"u\":{\"docs\":{\"6\":{\"ref\":6,\"tf\":0.023809523809523808}}}}}}}}}}}},\"o\":{\"docs\":{\"18\":{\"ref\":18,\"tf\":0.02}},\"k\":{\"docs\":{\"55\":{\"ref\":55,\"tf\":2.5408163265306123},\"126\":{\"ref\":126,\"tf\":0.011111111111111112}}},\"t\":{\"docs\":{\"56\":{\"ref\":56,\"tf\":0.004784688995215311}},\"s\":{\"docs\":{},\"t\":{\"docs\":{},\"r\":{\"docs\":{},\"a\":{\"docs\":{},\"p\":{\"docs\":{\"57\":{\"ref\":57,\"tf\":0.0023584905660377358},\"70\":{\"ref\":70,\"tf\":0.023809523809523808}}}}}}}},\"l\":{\"docs\":{},\"e\":{\"docs\":{},\"a\":{\"docs\":{},\"n\":{\"docs\":{\"71\":{\"ref\":71,\"tf\":0.016},\"74\":{\"ref\":74,\"tf\":0.03592814371257485},\"80\":{\"ref\":80,\"tf\":0.023076923076923078},\"90\":{\"ref\":90,\"tf\":0.041666666666666664},\"91\":{\"ref\":91,\"tf\":0.0196078431372549},\"92\":{\"ref\":92,\"tf\":0.02857142857142857},\"94\":{\"ref\":94,\"tf\":0.022222222222222223},\"97\":{\"ref\":97,\"tf\":0.019230769230769232},\"98\":{\"ref\":98,\"tf\":0.03773584905660377},\"109\":{\"ref\":109,\"tf\":0.05128205128205128},\"110\":{\"ref\":110,\"tf\":0.01020408163265306},\"112\":{\"ref\":112,\"tf\":0.023529411764705882},\"115\":{\"ref\":115,\"tf\":0.01948051948051948},\"116\":{\"ref\":116,\"tf\":0.03888888888888889},\"117\":{\"ref\":117,\"tf\":0.015151515151515152},\"118\":{\"ref\":118,\"tf\":0.009523809523809525},\"119\":{\"ref\":119,\"tf\":0.003937007874015748},\"120\":{\"ref\":120,\"tf\":0.012578616352201259},\"121\":{\"ref\":121,\"tf\":0.05813953488372093},\"123\":{\"ref\":123,\"tf\":0.0035211267605633804}},\"=\":{\"docs\":{},\"}\":{\"docs\":{},\"b\":{\"docs\":{},\"a\":{\"docs\":{},\"c\":{\"docs\":{},\"k\":{\"docs\":{},\"d\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"p\":{\"docs\":{},\"c\":{\"docs\":{},\"l\":{\"docs\":{},\"i\":{\"docs\":{},\"c\":{\"docs\":{},\"k\":{\"docs\":{},\"t\":{\"docs\":{},\"o\":{\"docs\":{},\"c\":{\"docs\":{},\"l\":{\"docs\":{},\"o\":{\"docs\":{},\"s\":{\"docs\":{\"71\":{\"ref\":71,\"tf\":0.008}}}}}}}}}}}}}}}}}}}}}}}}}}}},\"i\":{\"docs\":{\"19\":{\"ref\":19,\"tf\":0.02}}},\"x\":{\"docs\":{\"30\":{\"ref\":30,\"tf\":0.02702702702702703},\"43\":{\"ref\":43,\"tf\":0.006944444444444444},\"52\":{\"ref\":52,\"tf\":0.010416666666666666},\"94\":{\"ref\":94,\"tf\":0.03333333333333333},\"104\":{\"ref\":104,\"tf\":0.00423728813559322},\"117\":{\"ref\":117,\"tf\":0.015151515151515152},\"123\":{\"ref\":123,\"tf\":0.0035211267605633804},\"133\":{\"ref\":133,\"tf\":0.005025125628140704}},\"-\":{\"docs\":{},\"s\":{\"docs\":{},\"h\":{\"docs\":{},\"a\":{\"docs\":{},\"d\":{\"docs\":{},\"o\":{\"docs\":{},\"w\":{\"docs\":{\"20\":{\"ref\":20,\"tf\":0.04081632653061224},\"21\":{\"ref\":21,\"tf\":0.00980392156862745}}}}}}}}}},\"d\":{\"docs\":{},\"i\":{\"docs\":{\"54\":{\"ref\":54,\"tf\":0.002574002574002574},\"59\":{\"ref\":59,\"tf\":0.008356545961002786},\"105\":{\"ref\":105,\"tf\":0.005847953216374269},\"114\":{\"ref\":114,\"tf\":0.012759170653907496}}}},\"u\":{\"docs\":{},\"n\":{\"docs\":{},\"c\":{\"docs\":{\"56\":{\"ref\":56,\"tf\":0.001594896331738437},\"74\":{\"ref\":74,\"tf\":0.005988023952095809}}},\"d\":{\"docs\":{\"84\":{\"ref\":84,\"tf\":0.007272727272727273},\"113\":{\"ref\":113,\"tf\":0.0070921985815602835},\"119\":{\"ref\":119,\"tf\":0.011811023622047244}}}}}},\"l\":{\"docs\":{},\"o\":{\"docs\":{},\"c\":{\"docs\":{},\"k\":{\"docs\":{\"4\":{\"ref\":4,\"tf\":0.022727272727272728},\"5\":{\"ref\":5,\"tf\":5.102564102564102},\"6\":{\"ref\":6,\"tf\":2.5714285714285716},\"110\":{\"ref\":110,\"tf\":0.01020408163265306},\"124\":{\"ref\":124,\"tf\":0.010309278350515464},\"136\":{\"ref\":136,\"tf\":0.005050505050505051}}}},\"g\":{\"docs\":{},\"/\":{\"docs\":{},\"h\":{\"docs\":{},\"y\":{\"docs\":{},\"b\":{\"docs\":{},\"r\":{\"docs\":{},\"i\":{\"docs\":{},\"d\":{\"docs\":{},\"-\":{\"docs\":{},\"a\":{\"docs\":{},\"p\":{\"docs\":{},\"p\":{\"docs\":{},\"s\":{\"docs\":{},\"-\":{\"docs\":{},\"a\":{\"docs\":{},\"n\":{\"docs\":{},\"d\":{\"docs\":{},\"-\":{\"docs\":{},\"t\":{\"docs\":{},\"h\":{\"docs\":{},\"e\":{\"docs\":{},\"-\":{\"docs\":{},\"c\":{\"docs\":{},\"u\":{\"docs\":{},\"r\":{\"docs\":{},\"s\":{\"docs\":{},\"e\":{\"docs\":{},\"-\":{\"docs\":{},\"o\":{\"docs\":{},\"f\":{\"docs\":{},\"-\":{\"docs\":{},\"t\":{\"docs\":{},\"h\":{\"docs\":{},\"e\":{\"docs\":{},\"-\":{\"3\":{\"0\":{\"0\":{\"docs\":{},\"m\":{\"docs\":{},\"s\":{\"docs\":{},\"-\":{\"docs\":{},\"d\":{\"docs\":{},\"e\":{\"docs\":{},\"l\":{\"docs\":{},\"a\":{\"docs\":{},\"i\":{\"docs\":{\"134\":{\"ref\":134,\"tf\":1}}}}}}}}}}},\"docs\":{}},\"docs\":{}},\"docs\":{}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},\"w\":{\"docs\":{},\"h\":{\"docs\":{},\"a\":{\"docs\":{},\"t\":{\"docs\":{},\"-\":{\"docs\":{},\"i\":{\"docs\":{},\"s\":{\"docs\":{},\"-\":{\"docs\":{},\"c\":{\"docs\":{},\"o\":{\"docs\":{},\"r\":{\"docs\":{},\"d\":{\"docs\":{},\"o\":{\"docs\":{},\"v\":{\"docs\":{},\"a\":{\"docs\":{},\"-\":{\"docs\":{},\"p\":{\"docs\":{},\"h\":{\"docs\":{},\"o\":{\"docs\":{},\"n\":{\"docs\":{},\"e\":{\"docs\":{},\"g\":{\"docs\":{},\"a\":{\"docs\":{},\"p\":{\"docs\":{\"135\":{\"ref\":135,\"tf\":1}}}}}}}}}}}}}}}}}}}}}}}}}},\"p\":{\"docs\":{},\"o\":{\"docs\":{},\"p\":{\"docs\":{},\"u\":{\"docs\":{},\"p\":{\"docs\":{},\"-\":{\"docs\":{},\"s\":{\"docs\":{},\"u\":{\"docs\":{},\"p\":{\"docs\":{},\"p\":{\"docs\":{},\"o\":{\"docs\":{},\"r\":{\"docs\":{},\"t\":{\"docs\":{\"136\":{\"ref\":136,\"tf\":1}}}}}}}}}}}}}}}}}},\"u\":{\"docs\":{},\"e\":{\"docs\":{\"8\":{\"ref\":8,\"tf\":0.02702702702702703},\"9\":{\"ref\":9,\"tf\":0.05405405405405406},\"16\":{\"ref\":16,\"tf\":0.007352941176470588},\"19\":{\"ref\":19,\"tf\":0.02},\"38\":{\"ref\":38,\"tf\":0.023255813953488372},\"50\":{\"ref\":50,\"tf\":0.008928571428571428},\"52\":{\"ref\":52,\"tf\":0.010416666666666666},\"94\":{\"ref\":94,\"tf\":0.011111111111111112}}}},\"e\":{\"docs\":{},\"e\":{\"docs\":{},\"d\":{\"docs\":{\"52\":{\"ref\":52,\"tf\":0.010416666666666666},\"62\":{\"ref\":62,\"tf\":0.041666666666666664},\"130\":{\"ref\":130,\"tf\":0.0043859649122807015}}}}},\"a\":{\"docs\":{},\"m\":{\"docs\":{},\"e\":{\"docs\":{\"60\":{\"ref\":60,\"tf\":0.0022727272727272726}}}},\"n\":{\"docs\":{},\"k\":{\"docs\":{\"127\":{\"ref\":127,\"tf\":0.013245033112582781}}}}}},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\"a\":{\"docs\":{},\"t\":{\"docs\":{},\"h\":{\"docs\":{\"5\":{\"ref\":5,\"tf\":0.02564102564102564},\"52\":{\"ref\":52,\"tf\":0.010416666666666666}}}},\"k\":{\"docs\":{\"16\":{\"ref\":16,\"tf\":0.007352941176470588},\"48\":{\"ref\":48,\"tf\":0.011627906976744186},\"54\":{\"ref\":54,\"tf\":0.001287001287001287}},\"p\":{\"docs\":{},\"o\":{\"docs\":{},\"i\":{\"docs\":{},\"n\":{\"docs\":{},\"t\":{\"docs\":{\"48\":{\"ref\":48,\"tf\":0.011627906976744186}}}}}}}}}},\"o\":{\"docs\":{\"14\":{\"ref\":14,\"tf\":0.011494252873563218}},\"u\":{\"docs\":{},\"g\":{\"docs\":{},\"h\":{\"docs\":{},\"t\":{\"docs\":{\"18\":{\"ref\":18,\"tf\":0.02}}}}}},\"w\":{\"docs\":{},\"s\":{\"docs\":{\"60\":{\"ref\":60,\"tf\":0.0022727272727272726}},\"e\":{\"docs\":{},\"r\":{\"docs\":{\"38\":{\"ref\":38,\"tf\":0.023255813953488372},\"57\":{\"ref\":57,\"tf\":0.01179245283018868},\"60\":{\"ref\":60,\"tf\":0.01818181818181818},\"67\":{\"ref\":67,\"tf\":5.027777777777778},\"74\":{\"ref\":74,\"tf\":0.005988023952095809},\"104\":{\"ref\":104,\"tf\":0.03389830508474576},\"121\":{\"ref\":121,\"tf\":0.005813953488372093},\"123\":{\"ref\":123,\"tf\":0.0035211267605633804},\"129\":{\"ref\":129,\"tf\":0.0034782608695652175},\"134\":{\"ref\":134,\"tf\":0.028768699654775604},\"135\":{\"ref\":135,\"tf\":0.015444015444015444},\"136\":{\"ref\":136,\"tf\":0.015151515151515152}},\"'\":{\"docs\":{\"38\":{\"ref\":38,\"tf\":0.011627906976744186},\"74\":{\"ref\":74,\"tf\":0.005988023952095809}}},\"-\":{\"docs\":{},\"b\":{\"docs\":{},\"a\":{\"docs\":{},\"s\":{\"docs\":{\"57\":{\"ref\":57,\"tf\":0.0023584905660377358}}}}}}}}}},\"a\":{\"docs\":{},\"d\":{\"docs\":{\"57\":{\"ref\":57,\"tf\":0.0023584905660377358}},\"c\":{\"docs\":{},\"a\":{\"docs\":{},\"s\":{\"docs\":{},\"t\":{\"docs\":{\"71\":{\"ref\":71,\"tf\":0.008},\"88\":{\"ref\":88,\"tf\":0.009708737864077669}}}}}},\"e\":{\"docs\":{},\"r\":{\"docs\":{\"135\":{\"ref\":135,\"tf\":0.0019305019305019305}}}}}}},\"a\":{\"docs\":{},\"n\":{\"docs\":{},\"d\":{\"docs\":{\"129\":{\"ref\":129,\"tf\":0.0017391304347826088},\"135\":{\"ref\":135,\"tf\":0.0019305019305019305}}}}},\"i\":{\"docs\":{},\"d\":{\"docs\":{},\"g\":{\"docs\":{\"135\":{\"ref\":135,\"tf\":0.003861003861003861}}}}}},\"i\":{\"docs\":{},\"g\":{\"docs\":{\"18\":{\"ref\":18,\"tf\":0.02},\"61\":{\"ref\":61,\"tf\":0.010869565217391304},\"129\":{\"ref\":129,\"tf\":0.0017391304347826088},\"135\":{\"ref\":135,\"tf\":0.003861003861003861}},\"g\":{\"docs\":{},\"e\":{\"docs\":{},\"s\":{\"docs\":{},\"t\":{\"docs\":{\"134\":{\"ref\":134,\"tf\":0.0023014959723820483}}}}}}},\"n\":{\"docs\":{\"56\":{\"ref\":56,\"tf\":0.003189792663476874}},\"d\":{\"docs\":{\"54\":{\"ref\":54,\"tf\":0.001287001287001287},\"94\":{\"ref\":94,\"tf\":0.011111111111111112},\"97\":{\"ref\":97,\"tf\":0.019230769230769232},\"113\":{\"ref\":113,\"tf\":0.0070921985815602835},\"123\":{\"ref\":123,\"tf\":0.0035211267605633804},\"133\":{\"ref\":133,\"tf\":0.0033500837520938024},\"136\":{\"ref\":136,\"tf\":0.005050505050505051}}},\"a\":{\"docs\":{},\"r\":{\"docs\":{},\"i\":{\"docs\":{\"58\":{\"ref\":58,\"tf\":0.00273224043715847}}}}}},\"t\":{\"docs\":{\"54\":{\"ref\":54,\"tf\":0.001287001287001287},\"57\":{\"ref\":57,\"tf\":0.0023584905660377358},\"59\":{\"ref\":59,\"tf\":0.002785515320334262}}}}},\"c\":{\"docs\":{\"56\":{\"ref\":56,\"tf\":0.001594896331738437},\"87\":{\"ref\":87,\"tf\":0.041666666666666664}},\"a\":{\"docs\":{},\"r\":{\"docs\":{},\"r\":{\"docs\":{},\"i\":{\"docs\":{\"0\":{\"ref\":0,\"tf\":0.03225806451612903}}}},\"d\":{\"docs\":{\"20\":{\"ref\":20,\"tf\":0.02040816326530612},\"21\":{\"ref\":21,\"tf\":10.088235294117647},\"22\":{\"ref\":22,\"tf\":3.5772357723577235},\"23\":{\"ref\":23,\"tf\":5.151515151515151},\"24\":{\"ref\":24,\"tf\":5.083333333333333},\"25\":{\"ref\":25,\"tf\":5.057471264367816},\"30\":{\"ref\":30,\"tf\":0.05405405405405406},\"37\":{\"ref\":37,\"tf\":0.0625}},\"-\":{\"docs\":{},\"b\":{\"docs\":{},\"o\":{\"docs\":{},\"d\":{\"docs\":{},\"i\":{\"docs\":{\"25\":{\"ref\":25,\"tf\":0.022988505747126436}}}}}},\"f\":{\"docs\":{},\"o\":{\"docs\":{},\"o\":{\"docs\":{},\"t\":{\"docs\":{\"25\":{\"ref\":25,\"tf\":0.022988505747126436}}}}}}}},\"e\":{\"docs\":{\"58\":{\"ref\":58,\"tf\":0.00273224043715847}}}},\"n\":{\"docs\":{},\"d\":{\"docs\":{},\"i\":{\"docs\":{\"15\":{\"ref\":15,\"tf\":0.06818181818181818}}},\"r\":{\"docs\":{},\"a\":{\"docs\":{},\"g\":{\"docs\":{\"116\":{\"ref\":116,\"tf\":0.005555555555555556}},\"c\":{\"docs\":{},\"o\":{\"docs\":{},\"n\":{\"docs\":{},\"t\":{\"docs\":{},\"e\":{\"docs\":{},\"n\":{\"docs\":{},\"t\":{\"docs\":{},\"(\":{\"docs\":{},\"[\":{\"docs\":{},\"c\":{\"docs\":{},\"a\":{\"docs\":{},\"n\":{\"docs\":{},\"d\":{\"docs\":{},\"r\":{\"docs\":{},\"a\":{\"docs\":{},\"g\":{\"docs\":{\"116\":{\"ref\":116,\"tf\":0.005555555555555556}}}}}}}}}}}}}}}}}}}}}},\"c\":{\"docs\":{},\"e\":{\"docs\":{},\"l\":{\"docs\":{\"31\":{\"ref\":31,\"tf\":0.047619047619047616},\"33\":{\"ref\":33,\"tf\":0.3},\"104\":{\"ref\":104,\"tf\":0.00423728813559322},\"105\":{\"ref\":105,\"tf\":0.023391812865497075},\"114\":{\"ref\":114,\"tf\":0.014354066985645933},\"120\":{\"ref\":120,\"tf\":0.012578616352201259},\"136\":{\"ref\":136,\"tf\":0.005050505050505051}},\"t\":{\"docs\":{},\"e\":{\"docs\":{},\"x\":{\"docs\":{},\"t\":{\"docs\":{\"105\":{\"ref\":105,\"tf\":0.011695906432748537},\"114\":{\"ref\":114,\"tf\":0.003189792663476874}}}}},\"y\":{\"docs\":{},\"p\":{\"docs\":{\"114\":{\"ref\":114,\"tf\":0.003189792663476874}}}}},\"a\":{\"docs\":{},\"b\":{\"docs\":{},\"l\":{\"docs\":{},\"e\":{\"docs\":{},\"]\":{\"docs\":{},\")\":{\"docs\":{},\"(\":{\"docs\":{},\"a\":{\"docs\":{},\"l\":{\"docs\":{},\"i\":{\"docs\":{},\"a\":{\"docs\":{\"120\":{\"ref\":120,\"tf\":0.006289308176100629}}}}}}}}}}}}}}}},\"-\":{\"docs\":{},\"s\":{\"docs\":{},\"w\":{\"docs\":{},\"i\":{\"docs\":{},\"p\":{\"docs\":{\"80\":{\"ref\":80,\"tf\":0.007692307692307693}}}}}}},\"s\":{\"docs\":{},\"w\":{\"docs\":{},\"i\":{\"docs\":{},\"p\":{\"docs\":{},\"e\":{\"docs\":{},\"i\":{\"docs\":{},\"t\":{\"docs\":{},\"e\":{\"docs\":{},\"m\":{\"docs\":{},\"s\":{\"docs\":{},\"(\":{\"docs\":{},\"[\":{\"docs\":{},\"s\":{\"docs\":{},\"h\":{\"docs\":{},\"o\":{\"docs\":{},\"w\":{\"docs\":{},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\"o\":{\"docs\":{},\"r\":{\"docs\":{},\"d\":{\"docs\":{\"109\":{\"ref\":109,\"tf\":0.008547008547008548}}}}}}}}}}}}}}}}}}}}}}},\"'\":{\"docs\":{},\"t\":{\"docs\":{\"135\":{\"ref\":135,\"tf\":0.0019305019305019305}}}}},\"l\":{\"docs\":{},\"l\":{\"docs\":{\"16\":{\"ref\":16,\"tf\":0.014705882352941176},\"17\":{\"ref\":17,\"tf\":0.15384615384615385},\"54\":{\"ref\":54,\"tf\":0.006435006435006435},\"56\":{\"ref\":56,\"tf\":0.001594896331738437},\"58\":{\"ref\":58,\"tf\":0.00546448087431694},\"71\":{\"ref\":71,\"tf\":0.008},\"78\":{\"ref\":78,\"tf\":0.033707865168539325},\"88\":{\"ref\":88,\"tf\":0.019417475728155338},\"89\":{\"ref\":89,\"tf\":0.022727272727272728},\"90\":{\"ref\":90,\"tf\":0.020833333333333332},\"94\":{\"ref\":94,\"tf\":0.022222222222222223},\"95\":{\"ref\":95,\"tf\":0.018691588785046728},\"105\":{\"ref\":105,\"tf\":0.017543859649122806},\"107\":{\"ref\":107,\"tf\":0.06329113924050633},\"108\":{\"ref\":108,\"tf\":0.014492753623188406},\"109\":{\"ref\":109,\"tf\":0.008547008547008548},\"110\":{\"ref\":110,\"tf\":0.01020408163265306},\"113\":{\"ref\":113,\"tf\":0.02127659574468085},\"114\":{\"ref\":114,\"tf\":0.007974481658692184},\"115\":{\"ref\":115,\"tf\":0.006493506493506494},\"116\":{\"ref\":116,\"tf\":0.005555555555555556},\"117\":{\"ref\":117,\"tf\":0.007575757575757576},\"118\":{\"ref\":118,\"tf\":0.009523809523809525},\"119\":{\"ref\":119,\"tf\":0.03543307086614173},\"120\":{\"ref\":120,\"tf\":0.012578616352201259},\"121\":{\"ref\":121,\"tf\":0.005813953488372093},\"123\":{\"ref\":123,\"tf\":0.0035211267605633804},\"130\":{\"ref\":130,\"tf\":0.0043859649122807015},\"133\":{\"ref\":133,\"tf\":0.008375209380234505},\"135\":{\"ref\":135,\"tf\":0.005791505791505791},\"136\":{\"ref\":136,\"tf\":0.005050505050505051}},\"b\":{\"docs\":{},\"a\":{\"docs\":{},\"c\":{\"docs\":{},\"k\":{\"docs\":{\"106\":{\"ref\":106,\"tf\":0.02666666666666667},\"108\":{\"ref\":108,\"tf\":0.057971014492753624},\"113\":{\"ref\":113,\"tf\":0.0425531914893617},\"119\":{\"ref\":119,\"tf\":0.027559055118110236},\"120\":{\"ref\":120,\"tf\":0.050314465408805034},\"121\":{\"ref\":121,\"tf\":0.023255813953488372}}}}}}},\"m\":{\"docs\":{\"50\":{\"ref\":50,\"tf\":0.008928571428571428},\"129\":{\"ref\":129,\"tf\":0.0017391304347826088}}}},\"p\":{\"docs\":{},\"a\":{\"docs\":{},\"c\":{\"docs\":{},\"i\":{\"docs\":{},\"t\":{\"docs\":{},\"o\":{\"docs\":{},\"r\":{\"docs\":{\"35\":{\"ref\":35,\"tf\":0.03636363636363636}}}}}}},\"b\":{\"docs\":{},\"l\":{\"docs\":{\"57\":{\"ref\":57,\"tf\":0.0023584905660377358},\"61\":{\"ref\":61,\"tf\":0.010869565217391304},\"135\":{\"ref\":135,\"tf\":0.007722007722007722}}}}}},\"s\":{\"docs\":{},\"e\":{\"docs\":{\"45\":{\"ref\":45,\"tf\":0.00980392156862745},\"48\":{\"ref\":48,\"tf\":0.011627906976744186},\"72\":{\"ref\":72,\"tf\":0.002331002331002331},\"74\":{\"ref\":74,\"tf\":0.005988023952095809},\"104\":{\"ref\":104,\"tf\":0.00423728813559322},\"134\":{\"ref\":134,\"tf\":0.0023014959723820483}}}},\"u\":{\"docs\":{},\"s\":{\"docs\":{\"72\":{\"ref\":72,\"tf\":0.004662004662004662},\"96\":{\"ref\":96,\"tf\":0.017857142857142856},\"99\":{\"ref\":99,\"tf\":0.02127659574468085},\"102\":{\"ref\":102,\"tf\":0.020833333333333332},\"103\":{\"ref\":103,\"tf\":0.006493506493506494},\"114\":{\"ref\":114,\"tf\":0.001594896331738437},\"134\":{\"ref\":134,\"tf\":0.004602991944764097}}}},\"c\":{\"docs\":{},\"h\":{\"docs\":{\"84\":{\"ref\":84,\"tf\":0.0036363636363636364}}}},\"m\":{\"docs\":{},\"e\":{\"docs\":{},\"r\":{\"docs\":{},\"a\":{\"docs\":{\"135\":{\"ref\":135,\"tf\":0.003861003861003861}}}}}}},\"o\":{\"docs\":{},\"l\":{\"docs\":{\"43\":{\"ref\":43,\"tf\":0.0763888888888889},\"44\":{\"ref\":44,\"tf\":0.2037037037037037},\"45\":{\"ref\":45,\"tf\":0.11764705882352941},\"46\":{\"ref\":46,\"tf\":0.19230769230769232},\"47\":{\"ref\":47,\"tf\":0.3},\"48\":{\"ref\":48,\"tf\":0.09302325581395349}},\"o\":{\"docs\":{},\"r\":{\"docs\":{\"0\":{\"ref\":0,\"tf\":0.03225806451612903},\"3\":{\"ref\":3,\"tf\":0.019230769230769232},\"4\":{\"ref\":4,\"tf\":0.022727272727272728},\"8\":{\"ref\":8,\"tf\":0.02702702702702703},\"9\":{\"ref\":9,\"tf\":0.02702702702702703},\"12\":{\"ref\":12,\"tf\":0.05},\"15\":{\"ref\":15,\"tf\":0.022727272727272728},\"32\":{\"ref\":32,\"tf\":0.08},\"34\":{\"ref\":34,\"tf\":0.03333333333333333},\"35\":{\"ref\":35,\"tf\":0.03636363636363636},\"37\":{\"ref\":37,\"tf\":0.0625},\"39\":{\"ref\":39,\"tf\":0.0379746835443038},\"50\":{\"ref\":50,\"tf\":10.098214285714286},\"129\":{\"ref\":129,\"tf\":0.006956521739130435},\"133\":{\"ref\":133,\"tf\":0.0016750418760469012}},\"s\":{\"docs\":{},\"]\":{\"docs\":{},\"(\":{\"docs\":{},\"/\":{\"docs\":{},\"d\":{\"docs\":{},\"o\":{\"docs\":{},\"c\":{\"docs\":{},\"s\":{\"docs\":{},\"/\":{\"docs\":{},\"c\":{\"docs\":{},\"o\":{\"docs\":{},\"m\":{\"docs\":{},\"p\":{\"docs\":{},\"o\":{\"docs\":{},\"n\":{\"docs\":{},\"e\":{\"docs\":{},\"n\":{\"docs\":{},\"t\":{\"docs\":{},\"s\":{\"docs\":{},\"/\":{\"docs\":{},\"#\":{\"docs\":{},\"c\":{\"docs\":{},\"o\":{\"docs\":{},\"l\":{\"docs\":{},\"o\":{\"docs\":{},\"r\":{\"docs\":{\"129\":{\"ref\":129,\"tf\":0.0017391304347826088}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},\"u\":{\"docs\":{},\"m\":{\"docs\":{},\"n\":{\"docs\":{\"43\":{\"ref\":43,\"tf\":0.0763888888888889},\"44\":{\"ref\":44,\"tf\":2.537037037037037},\"45\":{\"ref\":45,\"tf\":2.5784313725490198},\"46\":{\"ref\":46,\"tf\":3.3910256410256405},\"47\":{\"ref\":47,\"tf\":2.56},\"48\":{\"ref\":48,\"tf\":0.03488372093023256}}}}},\"-\":{\"1\":{\"0\":{\"docs\":{\"45\":{\"ref\":45,\"tf\":0.00980392156862745}}},\"docs\":{}},\"2\":{\"0\":{\"docs\":{\"45\":{\"ref\":45,\"tf\":0.00980392156862745}}},\"5\":{\"docs\":{\"45\":{\"ref\":45,\"tf\":0.00980392156862745}}},\"docs\":{}},\"3\":{\"3\":{\"docs\":{\"45\":{\"ref\":45,\"tf\":0.00980392156862745}}},\"docs\":{}},\"5\":{\"0\":{\"docs\":{\"45\":{\"ref\":45,\"tf\":0.00980392156862745}}},\"docs\":{}},\"6\":{\"7\":{\"docs\":{\"45\":{\"ref\":45,\"tf\":0.00980392156862745}}},\"docs\":{}},\"7\":{\"5\":{\"docs\":{\"45\":{\"ref\":45,\"tf\":0.00980392156862745}}},\"docs\":{}},\"8\":{\"0\":{\"docs\":{\"45\":{\"ref\":45,\"tf\":0.00980392156862745}}},\"docs\":{}},\"9\":{\"0\":{\"docs\":{\"45\":{\"ref\":45,\"tf\":0.00980392156862745}}},\"docs\":{}},\"docs\":{},\"o\":{\"docs\":{},\"f\":{\"docs\":{},\"f\":{\"docs\":{},\"s\":{\"docs\":{},\"e\":{\"docs\":{},\"t\":{\"docs\":{},\"-\":{\"1\":{\"0\":{\"docs\":{\"46\":{\"ref\":46,\"tf\":0.019230769230769232}}},\"docs\":{}},\"2\":{\"0\":{\"docs\":{\"46\":{\"ref\":46,\"tf\":0.019230769230769232}}},\"5\":{\"docs\":{\"46\":{\"ref\":46,\"tf\":0.019230769230769232}}},\"docs\":{}},\"3\":{\"3\":{\"docs\":{\"46\":{\"ref\":46,\"tf\":0.019230769230769232}}},\"docs\":{}},\"5\":{\"0\":{\"docs\":{\"46\":{\"ref\":46,\"tf\":0.019230769230769232}}},\"docs\":{}},\"6\":{\"7\":{\"docs\":{\"46\":{\"ref\":46,\"tf\":0.019230769230769232}}},\"docs\":{}},\"7\":{\"5\":{\"docs\":{\"46\":{\"ref\":46,\"tf\":0.019230769230769232}}},\"docs\":{}},\"8\":{\"0\":{\"docs\":{\"46\":{\"ref\":46,\"tf\":0.019230769230769232}}},\"docs\":{}},\"9\":{\"0\":{\"docs\":{\"46\":{\"ref\":46,\"tf\":0.019230769230769232}}},\"docs\":{}},\"docs\":{}}}}}}}}},\".\":{\"docs\":{},\"c\":{\"docs\":{},\"o\":{\"docs\":{},\"l\":{\"docs\":{},\"-\":{\"5\":{\"0\":{\"docs\":{\"45\":{\"ref\":45,\"tf\":0.0196078431372549}}},\"docs\":{}},\"7\":{\"5\":{\"docs\":{\"45\":{\"ref\":45,\"tf\":0.0392156862745098}}},\"docs\":{}},\"docs\":{}}}}}},\"l\":{\"docs\":{},\"e\":{\"docs\":{},\"c\":{\"docs\":{},\"t\":{\"docs\":{\"54\":{\"ref\":54,\"tf\":0.001287001287001287},\"72\":{\"ref\":72,\"tf\":0.009324009324009324}},\"i\":{\"docs\":{},\"o\":{\"docs\":{},\"n\":{\"docs\":{},\"-\":{\"docs\":{},\"i\":{\"docs\":{},\"t\":{\"docs\":{},\"e\":{\"docs\":{},\"m\":{\"docs\":{},\"-\":{\"docs\":{},\"h\":{\"docs\":{},\"e\":{\"docs\":{},\"i\":{\"docs\":{},\"g\":{\"docs\":{},\"h\":{\"docs\":{},\"t\":{\"docs\":{\"72\":{\"ref\":72,\"tf\":0.002331002331002331}}}}}}}},\"w\":{\"docs\":{},\"i\":{\"docs\":{},\"d\":{\"docs\":{},\"t\":{\"docs\":{},\"h\":{\"docs\":{\"72\":{\"ref\":72,\"tf\":0.002331002331002331}}}}}}}}}}}},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\"p\":{\"docs\":{},\"e\":{\"docs\":{},\"a\":{\"docs\":{},\"t\":{\"docs\":{\"72\":{\"ref\":72,\"tf\":10.025641025641026}}}}}}}}}}}}}}}}},\"m\":{\"docs\":{},\"e\":{\"docs\":{\"0\":{\"ref\":0,\"tf\":0.03225806451612903},\"4\":{\"ref\":4,\"tf\":0.022727272727272728},\"49\":{\"ref\":49,\"tf\":0.08333333333333333},\"50\":{\"ref\":50,\"tf\":0.017857142857142856},\"51\":{\"ref\":51,\"tf\":0.01694915254237288},\"54\":{\"ref\":54,\"tf\":0.001287001287001287},\"56\":{\"ref\":56,\"tf\":0.001594896331738437},\"57\":{\"ref\":57,\"tf\":0.0023584905660377358},\"58\":{\"ref\":58,\"tf\":0.00273224043715847},\"59\":{\"ref\":59,\"tf\":0.008356545961002786},\"64\":{\"ref\":64,\"tf\":0.0625},\"72\":{\"ref\":72,\"tf\":0.002331002331002331},\"104\":{\"ref\":104,\"tf\":0.00423728813559322},\"128\":{\"ref\":128,\"tf\":0.017857142857142856},\"129\":{\"ref\":129,\"tf\":0.0052173913043478265},\"134\":{\"ref\":134,\"tf\":0.005753739930955121},\"135\":{\"ref\":135,\"tf\":0.003861003861003861},\"136\":{\"ref\":136,\"tf\":0.010101010101010102}}},\"m\":{\"docs\":{},\"o\":{\"docs\":{},\"n\":{\"docs\":{\"14\":{\"ref\":14,\"tf\":0.011494252873563218},\"57\":{\"ref\":57,\"tf\":0.0023584905660377358},\"134\":{\"ref\":134,\"tf\":0.0011507479861910242},\"136\":{\"ref\":136,\"tf\":0.005050505050505051}},\"l\":{\"docs\":{},\"i\":{\"docs\":{\"54\":{\"ref\":54,\"tf\":0.001287001287001287}}}}}},\"e\":{\"docs\":{},\"n\":{\"docs\":{},\"t\":{\"docs\":{\"25\":{\"ref\":25,\"tf\":0.04597701149425287}}}},\"r\":{\"docs\":{},\"c\":{\"docs\":{},\"i\":{\"docs\":{\"57\":{\"ref\":57,\"tf\":0.0047169811320754715},\"68\":{\"ref\":68,\"tf\":0.027777777777777776}}}}}},\"a\":{\"docs\":{},\"n\":{\"docs\":{},\"d\":{\"docs\":{\"56\":{\"ref\":56,\"tf\":0.011164274322169059},\"58\":{\"ref\":58,\"tf\":0.00273224043715847},\"60\":{\"ref\":60,\"tf\":0.004545454545454545},\"63\":{\"ref\":63,\"tf\":2},\"129\":{\"ref\":129,\"tf\":0.0052173913043478265},\"133\":{\"ref\":133,\"tf\":0.0016750418760469012}},\"-\":{\"docs\":{},\"l\":{\"docs\":{},\"i\":{\"docs\":{},\"n\":{\"docs\":{\"127\":{\"ref\":127,\"tf\":0.006622516556291391}}}}}}}}},\"u\":{\"docs\":{},\"n\":{\"docs\":{\"56\":{\"ref\":56,\"tf\":0.001594896331738437},\"57\":{\"ref\":57,\"tf\":0.0023584905660377358},\"126\":{\"ref\":126,\"tf\":0.011111111111111112},\"134\":{\"ref\":134,\"tf\":0.0011507479861910242},\"135\":{\"ref\":135,\"tf\":0.0019305019305019305}}}}},\"p\":{\"docs\":{},\"o\":{\"docs\":{},\"n\":{\"docs\":{\"14\":{\"ref\":14,\"tf\":0.011494252873563218},\"34\":{\"ref\":34,\"tf\":0.016666666666666666},\"52\":{\"ref\":52,\"tf\":0.03125},\"54\":{\"ref\":54,\"tf\":0.001287001287001287},\"57\":{\"ref\":57,\"tf\":0.0023584905660377358},\"107\":{\"ref\":107,\"tf\":0.02531645569620253},\"126\":{\"ref\":126,\"tf\":0.022222222222222223},\"127\":{\"ref\":127,\"tf\":0.006622516556291391}}}},\"a\":{\"docs\":{},\"n\":{\"docs\":{},\"i\":{\"docs\":{\"21\":{\"ref\":21,\"tf\":0.00980392156862745},\"70\":{\"ref\":70,\"tf\":0.023809523809523808}}}},\"t\":{\"docs\":{\"56\":{\"ref\":56,\"tf\":0.001594896331738437}}},\"r\":{\"docs\":{\"58\":{\"ref\":58,\"tf\":0.00273224043715847},\"134\":{\"ref\":134,\"tf\":0.0011507479861910242}}},\"s\":{\"docs\":{},\"s\":{\"docs\":{\"135\":{\"ref\":135,\"tf\":0.0019305019305019305}}}}},\"u\":{\"docs\":{},\"t\":{\"docs\":{\"56\":{\"ref\":56,\"tf\":0.003189792663476874},\"57\":{\"ref\":57,\"tf\":0.0047169811320754715},\"60\":{\"ref\":60,\"tf\":0.004545454545454545}}}},\"e\":{\"docs\":{},\"l\":{\"docs\":{\"57\":{\"ref\":57,\"tf\":0.0023584905660377358}}}},\"l\":{\"docs\":{},\"e\":{\"docs\":{},\"t\":{\"docs\":{\"59\":{\"ref\":59,\"tf\":0.002785515320334262},\"74\":{\"ref\":74,\"tf\":0.005988023952095809},\"88\":{\"ref\":88,\"tf\":0.009708737864077669},\"91\":{\"ref\":91,\"tf\":0.0196078431372549},\"92\":{\"ref\":92,\"tf\":0.02857142857142857},\"95\":{\"ref\":95,\"tf\":0.009345794392523364},\"114\":{\"ref\":114,\"tf\":0.001594896331738437},\"129\":{\"ref\":129,\"tf\":0.0017391304347826088},\"133\":{\"ref\":133,\"tf\":0.0033500837520938024},\"136\":{\"ref\":136,\"tf\":0.005050505050505051}}},\"x\":{\"docs\":{\"60\":{\"ref\":60,\"tf\":0.0022727272727272726},\"114\":{\"ref\":114,\"tf\":0.003189792663476874},\"135\":{\"ref\":135,\"tf\":0.0019305019305019305}}}},\"i\":{\"docs\":{},\"c\":{\"docs\":{\"72\":{\"ref\":72,\"tf\":0.002331002331002331}}}}},\"i\":{\"docs\":{},\"l\":{\"docs\":{\"64\":{\"ref\":64,\"tf\":0.0625},\"72\":{\"ref\":72,\"tf\":0.004662004662004662}},\"e\":{\"docs\":{},\"p\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"v\":{\"docs\":{},\"i\":{\"docs\":{},\"d\":{\"docs\":{\"133\":{\"ref\":133,\"tf\":0.0016750418760469012}},\"e\":{\"docs\":{},\"r\":{\"docs\":{},\".\":{\"docs\":{},\"a\":{\"docs\":{},\"h\":{\"docs\":{},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\"f\":{\"docs\":{},\"s\":{\"docs\":{},\"a\":{\"docs\":{},\"n\":{\"docs\":{},\"i\":{\"docs\":{},\"t\":{\"docs\":{},\"i\":{\"docs\":{},\"z\":{\"docs\":{},\"a\":{\"docs\":{},\"t\":{\"docs\":{},\"i\":{\"docs\":{},\"o\":{\"docs\":{},\"n\":{\"docs\":{},\"w\":{\"docs\":{},\"h\":{\"docs\":{},\"i\":{\"docs\":{},\"t\":{\"docs\":{},\"e\":{\"docs\":{},\"l\":{\"docs\":{},\"i\":{\"docs\":{},\"s\":{\"docs\":{},\"t\":{\"docs\":{},\"(\":{\"docs\":{},\"/\":{\"docs\":{},\"^\":{\"docs\":{},\"\\\\\":{\"docs\":{},\"s\":{\"docs\":{},\"*\":{\"docs\":{},\"(\":{\"docs\":{},\"h\":{\"docs\":{},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"p\":{\"docs\":{},\"s\":{\"docs\":{},\"?\":{\"docs\":{},\"|\":{\"docs\":{},\"f\":{\"docs\":{},\"t\":{\"docs\":{},\"p\":{\"docs\":{},\"|\":{\"docs\":{},\"m\":{\"docs\":{},\"a\":{\"docs\":{},\"i\":{\"docs\":{},\"l\":{\"docs\":{},\"t\":{\"docs\":{},\"o\":{\"docs\":{},\"|\":{\"docs\":{},\"f\":{\"docs\":{},\"i\":{\"docs\":{},\"l\":{\"docs\":{},\"e\":{\"docs\":{},\"|\":{\"docs\":{},\"t\":{\"docs\":{},\"e\":{\"docs\":{},\"l\":{\"docs\":{\"133\":{\"ref\":133,\"tf\":0.0016750418760469012}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\"h\":{\"docs\":{},\"e\":{\"docs\":{},\"n\":{\"docs\":{},\"s\":{\"docs\":{\"126\":{\"ref\":126,\"tf\":0.011111111111111112}}}}}}}}},\"b\":{\"docs\":{},\"i\":{\"docs\":{},\"n\":{\"docs\":{\"24\":{\"ref\":24,\"tf\":0.041666666666666664},\"39\":{\"ref\":39,\"tf\":0.012658227848101266},\"76\":{\"ref\":76,\"tf\":0.018867924528301886},\"77\":{\"ref\":77,\"tf\":0.018867924528301886},\"129\":{\"ref\":129,\"tf\":0.0034782608695652175},\"134\":{\"ref\":134,\"tf\":0.0034522439585730723}}}}}},\"n\":{\"docs\":{},\"t\":{\"docs\":{},\"a\":{\"docs\":{},\"i\":{\"docs\":{},\"n\":{\"docs\":{\"0\":{\"ref\":0,\"tf\":0.03225806451612903},\"3\":{\"ref\":3,\"tf\":0.019230769230769232},\"5\":{\"ref\":5,\"tf\":0.02564102564102564},\"20\":{\"ref\":20,\"tf\":0.02040816326530612},\"21\":{\"ref\":21,\"tf\":0.029411764705882353},\"39\":{\"ref\":39,\"tf\":0.02531645569620253},\"57\":{\"ref\":57,\"tf\":0.0023584905660377358},\"72\":{\"ref\":72,\"tf\":0.002331002331002331},\"80\":{\"ref\":80,\"tf\":0.015384615384615385},\"84\":{\"ref\":84,\"tf\":0.0036363636363636364},\"86\":{\"ref\":86,\"tf\":0.06666666666666667},\"90\":{\"ref\":90,\"tf\":0.010416666666666666},\"91\":{\"ref\":91,\"tf\":0.0196078431372549},\"92\":{\"ref\":92,\"tf\":0.02857142857142857},\"93\":{\"ref\":93,\"tf\":0.014084507042253521},\"94\":{\"ref\":94,\"tf\":0.011111111111111112},\"95\":{\"ref\":95,\"tf\":0.009345794392523364},\"98\":{\"ref\":98,\"tf\":0.03773584905660377},\"115\":{\"ref\":115,\"tf\":0.003246753246753247},\"119\":{\"ref\":119,\"tf\":0.003937007874015748},\"123\":{\"ref\":123,\"tf\":0.028169014084507043},\"129\":{\"ref\":129,\"tf\":0.0017391304347826088}}}}},\"e\":{\"docs\":{},\"n\":{\"docs\":{},\"t\":{\"docs\":{\"2\":{\"ref\":2,\"tf\":10.125},\"3\":{\"ref\":3,\"tf\":0.019230769230769232},\"5\":{\"ref\":5,\"tf\":0.02564102564102564},\"13\":{\"ref\":13,\"tf\":0.019230769230769232},\"14\":{\"ref\":14,\"tf\":0.011494252873563218},\"21\":{\"ref\":21,\"tf\":0.00980392156862745},\"22\":{\"ref\":22,\"tf\":0.024390243902439025},\"25\":{\"ref\":25,\"tf\":0.022988505747126436},\"39\":{\"ref\":39,\"tf\":0.012658227848101266},\"43\":{\"ref\":43,\"tf\":0.006944444444444444},\"47\":{\"ref\":47,\"tf\":0.02},\"52\":{\"ref\":52,\"tf\":0.03125},\"54\":{\"ref\":54,\"tf\":0.007722007722007722},\"55\":{\"ref\":55,\"tf\":2.5},\"59\":{\"ref\":59,\"tf\":0.025069637883008356},\"60\":{\"ref\":60,\"tf\":0.0022727272727272726},\"68\":{\"ref\":68,\"tf\":0.027777777777777776},\"72\":{\"ref\":72,\"tf\":0.002331002331002331},\"74\":{\"ref\":74,\"tf\":0.03592814371257485},\"76\":{\"ref\":76,\"tf\":0.05660377358490566},\"77\":{\"ref\":77,\"tf\":0.05660377358490566},\"78\":{\"ref\":78,\"tf\":0.011235955056179775},\"80\":{\"ref\":80,\"tf\":0.007692307692307693},\"82\":{\"ref\":82,\"tf\":0.015625},\"83\":{\"ref\":83,\"tf\":0.02127659574468085},\"84\":{\"ref\":84,\"tf\":0.0036363636363636364},\"86\":{\"ref\":86,\"tf\":0.06666666666666667},\"90\":{\"ref\":90,\"tf\":0.010416666666666666},\"92\":{\"ref\":92,\"tf\":0.05714285714285714},\"93\":{\"ref\":93,\"tf\":0.04225352112676056},\"95\":{\"ref\":95,\"tf\":0.018691588785046728},\"98\":{\"ref\":98,\"tf\":0.018867924528301886},\"103\":{\"ref\":103,\"tf\":0.006493506493506494},\"110\":{\"ref\":110,\"tf\":0.02040816326530612},\"111\":{\"ref\":111,\"tf\":0.022556390977443608},\"114\":{\"ref\":114,\"tf\":0.003189792663476874},\"115\":{\"ref\":115,\"tf\":0.003246753246753247},\"116\":{\"ref\":116,\"tf\":0.016666666666666666},\"123\":{\"ref\":123,\"tf\":0.04225352112676056},\"124\":{\"ref\":124,\"tf\":0.010309278350515464},\"130\":{\"ref\":130,\"tf\":0.017543859649122806},\"133\":{\"ref\":133,\"tf\":0.006700167504187605}},\"'\":{\"docs\":{\"72\":{\"ref\":72,\"tf\":0.002331002331002331}}},\"c\":{\"docs\":{},\"t\":{\"docs\":{},\"r\":{\"docs\":{},\"l\":{\"docs\":{},\"(\":{\"docs\":{},\"$\":{\"docs\":{},\"s\":{\"docs\":{},\"c\":{\"docs\":{},\"o\":{\"docs\":{},\"p\":{\"docs\":{\"72\":{\"ref\":72,\"tf\":0.002331002331002331}}}}}}}}}}},\"o\":{\"docs\":{},\"n\":{\"docs\":{},\"t\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"l\":{\"docs\":{},\"l\":{\"docs\":{},\"e\":{\"docs\":{},\"r\":{\"docs\":{},\"(\":{\"docs\":{},\"$\":{\"docs\":{},\"s\":{\"docs\":{},\"c\":{\"docs\":{},\"o\":{\"docs\":{},\"p\":{\"docs\":{\"93\":{\"ref\":93,\"tf\":0.014084507042253521}}}}}}}}}}}}}}}}}},\"]\":{\"docs\":{},\"(\":{\"docs\":{},\"h\":{\"docs\":{},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"p\":{\"docs\":{},\":\":{\"docs\":{},\"/\":{\"docs\":{},\"/\":{\"docs\":{},\"i\":{\"docs\":{},\"o\":{\"docs\":{},\"n\":{\"docs\":{},\"i\":{\"docs\":{},\"c\":{\"docs\":{},\"f\":{\"docs\":{},\"r\":{\"docs\":{},\"a\":{\"docs\":{},\"m\":{\"docs\":{},\"e\":{\"docs\":{},\"w\":{\"docs\":{},\"o\":{\"docs\":{},\"r\":{\"docs\":{},\"k\":{\"docs\":{},\".\":{\"docs\":{},\"c\":{\"docs\":{},\"o\":{\"docs\":{},\"m\":{\"docs\":{},\"/\":{\"docs\":{},\"d\":{\"docs\":{},\"o\":{\"docs\":{},\"c\":{\"docs\":{},\"s\":{\"docs\":{},\"/\":{\"docs\":{},\"a\":{\"docs\":{},\"p\":{\"docs\":{},\"i\":{\"docs\":{},\"/\":{\"docs\":{},\"d\":{\"docs\":{},\"i\":{\"docs\":{},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\"c\":{\"docs\":{},\"t\":{\"docs\":{},\"i\":{\"docs\":{},\"v\":{\"docs\":{},\"e\":{\"docs\":{},\"/\":{\"docs\":{},\"i\":{\"docs\":{},\"o\":{\"docs\":{},\"n\":{\"docs\":{},\"c\":{\"docs\":{},\"o\":{\"docs\":{},\"n\":{\"docs\":{},\"t\":{\"docs\":{\"103\":{\"ref\":103,\"tf\":0.006493506493506494}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},\"x\":{\"docs\":{},\"t\":{\"docs\":{\"119\":{\"ref\":119,\"tf\":0.003937007874015748}}}}},\"r\":{\"docs\":{},\"a\":{\"docs\":{\"14\":{\"ref\":14,\"tf\":0.011494252873563218}},\"s\":{\"docs\":{},\"t\":{\"docs\":{\"45\":{\"ref\":45,\"tf\":0.00980392156862745}}}}},\"o\":{\"docs\":{},\"l\":{\"docs\":{\"21\":{\"ref\":21,\"tf\":0.00980392156862745},\"39\":{\"ref\":39,\"tf\":0.012658227848101266},\"52\":{\"ref\":52,\"tf\":0.010416666666666666},\"54\":{\"ref\":54,\"tf\":0.009009009009009009},\"56\":{\"ref\":56,\"tf\":0.001594896331738437},\"59\":{\"ref\":59,\"tf\":0.005571030640668524},\"71\":{\"ref\":71,\"tf\":0.008},\"84\":{\"ref\":84,\"tf\":0.0036363636363636364},\"88\":{\"ref\":88,\"tf\":0.009708737864077669},\"105\":{\"ref\":105,\"tf\":0.005847953216374269},\"109\":{\"ref\":109,\"tf\":0.03418803418803419},\"111\":{\"ref\":111,\"tf\":0.015037593984962405},\"112\":{\"ref\":112,\"tf\":0.011764705882352941},\"115\":{\"ref\":115,\"tf\":0.01948051948051948},\"116\":{\"ref\":116,\"tf\":0.022222222222222223},\"117\":{\"ref\":117,\"tf\":0.030303030303030304},\"118\":{\"ref\":118,\"tf\":0.0380952380952381},\"122\":{\"ref\":122,\"tf\":3.333333333333333},\"124\":{\"ref\":124,\"tf\":0.05154639175257732},\"126\":{\"ref\":126,\"tf\":0.011111111111111112},\"130\":{\"ref\":130,\"tf\":0.013157894736842105},\"133\":{\"ref\":133,\"tf\":0.010050251256281407},\"135\":{\"ref\":135,\"tf\":0.0019305019305019305},\"136\":{\"ref\":136,\"tf\":0.020202020202020204}},\"l\":{\"docs\":{},\"e\":{\"docs\":{},\"r\":{\"docs\":{},\"(\":{\"docs\":{},\"'\":{\"docs\":{},\"t\":{\"docs\":{},\"o\":{\"docs\":{},\"d\":{\"docs\":{},\"o\":{\"docs\":{},\"c\":{\"docs\":{},\"t\":{\"docs\":{},\"r\":{\"docs\":{},\"l\":{\"docs\":{\"54\":{\"ref\":54,\"tf\":0.003861003861003861}}}}}}}}}},\"m\":{\"docs\":{},\"y\":{\"docs\":{},\"c\":{\"docs\":{},\"o\":{\"docs\":{},\"n\":{\"docs\":{},\"t\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"l\":{\"docs\":{\"88\":{\"ref\":88,\"tf\":0.009708737864077669},\"111\":{\"ref\":111,\"tf\":0.007518796992481203}}}}}}}},\"t\":{\"docs\":{},\"r\":{\"docs\":{},\"l\":{\"docs\":{\"132\":{\"ref\":132,\"tf\":0.01282051282051282}}}}}}},\"e\":{\"docs\":{},\"n\":{\"docs\":{},\"u\":{\"docs\":{},\"c\":{\"docs\":{},\"t\":{\"docs\":{},\"r\":{\"docs\":{},\"l\":{\"docs\":{\"130\":{\"ref\":130,\"tf\":0.0043859649122807015}}}}}}}}}},\"l\":{\"docs\":{},\"o\":{\"docs\":{},\"a\":{\"docs\":{},\"d\":{\"docs\":{},\"i\":{\"docs\":{},\"n\":{\"docs\":{},\"g\":{\"docs\":{},\"c\":{\"docs\":{},\"t\":{\"docs\":{},\"r\":{\"docs\":{},\"l\":{\"docs\":{\"110\":{\"ref\":110,\"tf\":0.01020408163265306}}}}}}}}}}}}},\"i\":{\"docs\":{},\"n\":{\"docs\":{},\"t\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"c\":{\"docs\":{},\"t\":{\"docs\":{},\"r\":{\"docs\":{},\"l\":{\"docs\":{\"133\":{\"ref\":133,\"tf\":0.0016750418760469012}}}}}}}}}}}},\"f\":{\"docs\":{},\"u\":{\"docs\":{},\"n\":{\"docs\":{},\"c\":{\"docs\":{},\"t\":{\"docs\":{},\"i\":{\"docs\":{},\"o\":{\"docs\":{},\"n\":{\"docs\":{},\"(\":{\"docs\":{},\"$\":{\"docs\":{},\"s\":{\"docs\":{},\"c\":{\"docs\":{},\"o\":{\"docs\":{},\"p\":{\"docs\":{\"105\":{\"ref\":105,\"tf\":0.005847953216374269},\"106\":{\"ref\":106,\"tf\":0.013333333333333334},\"114\":{\"ref\":114,\"tf\":0.001594896331738437}}}}}}}}}}}}}}}}},\"s\":{\"docs\":{},\".\":{\"docs\":{},\"j\":{\"docs\":{\"133\":{\"ref\":133,\"tf\":0.0016750418760469012}}}}}}}}}},\"i\":{\"docs\":{},\"b\":{\"docs\":{},\"u\":{\"docs\":{},\"t\":{\"docs\":{\"69\":{\"ref\":69,\"tf\":3.383333333333333},\"134\":{\"ref\":134,\"tf\":0.0023014959723820483}},\"o\":{\"docs\":{},\"r\":{\"docs\":{\"69\":{\"ref\":69,\"tf\":0.05}}}},\"e\":{\"docs\":{},\"]\":{\"docs\":{},\"(\":{\"docs\":{},\"/\":{\"docs\":{},\"c\":{\"docs\":{},\"o\":{\"docs\":{},\"n\":{\"docs\":{},\"t\":{\"docs\":{},\"r\":{\"docs\":{},\"i\":{\"docs\":{},\"b\":{\"docs\":{},\"u\":{\"docs\":{},\"t\":{\"docs\":{\"129\":{\"ref\":129,\"tf\":0.0017391304347826088}}}}}}}}}}}}}}}}}}}},\"i\":{\"docs\":{},\"n\":{\"docs\":{},\"u\":{\"docs\":{\"56\":{\"ref\":56,\"tf\":0.001594896331738437},\"57\":{\"ref\":57,\"tf\":0.0023584905660377358},\"114\":{\"ref\":114,\"tf\":0.001594896331738437},\"124\":{\"ref\":124,\"tf\":0.010309278350515464},\"135\":{\"ref\":135,\"tf\":0.0019305019305019305}}}}}},\"s\":{\"docs\":{},\"i\":{\"docs\":{},\"s\":{\"docs\":{},\"t\":{\"docs\":{\"25\":{\"ref\":25,\"tf\":0.04597701149425287},\"39\":{\"ref\":39,\"tf\":0.012658227848101266}}}},\"d\":{\"docs\":{\"72\":{\"ref\":72,\"tf\":0.002331002331002331},\"104\":{\"ref\":104,\"tf\":0.00423728813559322}}}},\"o\":{\"docs\":{},\"l\":{\"docs\":{\"58\":{\"ref\":58,\"tf\":0.00273224043715847}},\"e\":{\"2\":{\"docs\":{\"56\":{\"ref\":56,\"tf\":0.001594896331738437}},\"]\":{\"docs\":{},\"(\":{\"docs\":{},\"h\":{\"docs\":{},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"p\":{\"docs\":{},\":\":{\"docs\":{},\"/\":{\"docs\":{},\"/\":{\"docs\":{},\"s\":{\"docs\":{},\"o\":{\"docs\":{},\"u\":{\"docs\":{},\"r\":{\"docs\":{},\"c\":{\"docs\":{},\"e\":{\"docs\":{},\"f\":{\"docs\":{},\"o\":{\"docs\":{},\"r\":{\"docs\":{},\"g\":{\"docs\":{},\"e\":{\"docs\":{},\".\":{\"docs\":{},\"n\":{\"docs\":{},\"e\":{\"docs\":{},\"t\":{\"docs\":{},\"/\":{\"docs\":{},\"p\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"j\":{\"docs\":{},\"e\":{\"docs\":{},\"c\":{\"docs\":{},\"t\":{\"docs\":{},\"s\":{\"docs\":{},\"/\":{\"docs\":{},\"c\":{\"docs\":{},\"o\":{\"docs\":{},\"n\":{\"docs\":{},\"s\":{\"docs\":{},\"o\":{\"docs\":{},\"l\":{\"docs\":{\"56\":{\"ref\":56,\"tf\":0.001594896331738437}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},\"docs\":{},\"]\":{\"docs\":{},\"(\":{\"docs\":{},\"h\":{\"docs\":{},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"p\":{\"docs\":{},\"s\":{\"docs\":{},\":\":{\"docs\":{},\"/\":{\"docs\":{},\"/\":{\"docs\":{},\"p\":{\"docs\":{},\"l\":{\"docs\":{},\"a\":{\"docs\":{},\"y\":{\"docs\":{},\".\":{\"docs\":{},\"g\":{\"docs\":{},\"o\":{\"docs\":{},\"o\":{\"docs\":{},\"g\":{\"docs\":{},\"l\":{\"docs\":{},\"e\":{\"docs\":{},\".\":{\"docs\":{},\"c\":{\"docs\":{},\"o\":{\"docs\":{},\"m\":{\"docs\":{},\"/\":{\"docs\":{},\"a\":{\"docs\":{},\"p\":{\"docs\":{},\"p\":{\"docs\":{},\"s\":{\"docs\":{},\"/\":{\"docs\":{},\"p\":{\"docs\":{},\"u\":{\"docs\":{},\"b\":{\"docs\":{},\"l\":{\"docs\":{},\"i\":{\"docs\":{},\"s\":{\"docs\":{},\"h\":{\"docs\":{\"58\":{\"ref\":58,\"tf\":0.00273224043715847}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},\".\":{\"docs\":{},\"l\":{\"docs\":{},\"o\":{\"docs\":{},\"g\":{\"docs\":{},\"(\":{\"docs\":{},\"'\":{\"docs\":{},\"t\":{\"docs\":{},\"a\":{\"docs\":{},\"p\":{\"docs\":{\"114\":{\"ref\":114,\"tf\":0.001594896331738437}}}},\"h\":{\"docs\":{},\"a\":{\"docs\":{},\"n\":{\"docs\":{},\"k\":{\"docs\":{\"114\":{\"ref\":114,\"tf\":0.001594896331738437}}}}}}},\"y\":{\"docs\":{\"114\":{\"ref\":114,\"tf\":0.003189792663476874}},\"o\":{\"docs\":{},\"u\":{\"docs\":{},\"r\":{\"docs\":{\"114\":{\"ref\":114,\"tf\":0.001594896331738437}}}}}},\"g\":{\"docs\":{},\"o\":{\"docs\":{},\"t\":{\"docs\":{\"136\":{\"ref\":136,\"tf\":0.005050505050505051}}}}}}}}}}}}}},\"u\":{\"docs\":{},\"m\":{\"docs\":{\"114\":{\"ref\":114,\"tf\":0.001594896331738437}}}},\"t\":{\"docs\":{},\"a\":{\"docs\":{},\"n\":{\"docs\":{},\"t\":{\"docs\":{},\"l\":{\"docs\":{},\"i\":{\"docs\":{\"129\":{\"ref\":129,\"tf\":0.0017391304347826088}}}}}}}}},\"v\":{\"docs\":{},\"e\":{\"docs\":{},\"n\":{\"docs\":{},\"t\":{\"docs\":{\"36\":{\"ref\":36,\"tf\":0.017857142857142856},\"50\":{\"ref\":50,\"tf\":0.017857142857142856}}},\"i\":{\"docs\":{\"56\":{\"ref\":56,\"tf\":0.001594896331738437},\"136\":{\"ref\":136,\"tf\":0.005050505050505051}}}}},\"i\":{\"docs\":{},\"n\":{\"docs\":{},\"c\":{\"docs\":{\"134\":{\"ref\":134,\"tf\":0.0011507479861910242}}}}}},\"f\":{\"docs\":{},\"i\":{\"docs\":{},\"g\":{\"docs\":{\"56\":{\"ref\":56,\"tf\":0.001594896331738437}},\"u\":{\"docs\":{},\"r\":{\"docs\":{\"48\":{\"ref\":48,\"tf\":0.011627906976744186},\"56\":{\"ref\":56,\"tf\":0.003189792663476874},\"74\":{\"ref\":74,\"tf\":0.005988023952095809},\"103\":{\"ref\":103,\"tf\":0.006493506493506494},\"123\":{\"ref\":123,\"tf\":0.0035211267605633804},\"133\":{\"ref\":133,\"tf\":0.0016750418760469012}}}},\".\":{\"docs\":{},\"x\":{\"docs\":{},\"m\":{\"docs\":{},\"l\":{\"docs\":{\"56\":{\"ref\":56,\"tf\":0.001594896331738437},\"99\":{\"ref\":99,\"tf\":0.02127659574468085},\"103\":{\"ref\":103,\"tf\":0.006493506493506494}}}}}},\"(\":{\"docs\":{},\"f\":{\"docs\":{},\"u\":{\"docs\":{},\"n\":{\"docs\":{},\"c\":{\"docs\":{},\"t\":{\"docs\":{\"133\":{\"ref\":133,\"tf\":0.0016750418760469012}},\"i\":{\"docs\":{},\"o\":{\"docs\":{},\"n\":{\"docs\":{},\"(\":{\"docs\":{},\"$\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"u\":{\"docs\":{},\"t\":{\"docs\":{},\"e\":{\"docs\":{},\"p\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"v\":{\"docs\":{},\"i\":{\"docs\":{},\"d\":{\"docs\":{\"133\":{\"ref\":133,\"tf\":0.0016750418760469012}}}}}}}}}}}}}}}}}}}}}}}}},\"r\":{\"docs\":{},\"m\":{\"docs\":{\"114\":{\"ref\":114,\"tf\":0.006379585326953748},\"136\":{\"ref\":136,\"tf\":0.005050505050505051}},\"(\":{\"docs\":{},\"o\":{\"docs\":{},\"p\":{\"docs\":{},\"t\":{\"docs\":{\"114\":{\"ref\":114,\"tf\":0.001594896331738437}}}}}},\"p\":{\"docs\":{},\"o\":{\"docs\":{},\"p\":{\"docs\":{},\"u\":{\"docs\":{},\"p\":{\"docs\":{\"114\":{\"ref\":114,\"tf\":0.001594896331738437}},\".\":{\"docs\":{},\"t\":{\"docs\":{},\"h\":{\"docs\":{},\"e\":{\"docs\":{},\"n\":{\"docs\":{},\"(\":{\"docs\":{},\"f\":{\"docs\":{},\"u\":{\"docs\":{},\"n\":{\"docs\":{},\"c\":{\"docs\":{},\"t\":{\"docs\":{},\"i\":{\"docs\":{},\"o\":{\"docs\":{},\"n\":{\"docs\":{},\"(\":{\"docs\":{},\"r\":{\"docs\":{\"114\":{\"ref\":114,\"tf\":0.001594896331738437}}}}}}}}}}}}}}}}}}}}}}}}}},\"l\":{\"docs\":{},\"i\":{\"docs\":{},\"c\":{\"docs\":{},\"t\":{\"docs\":{\"60\":{\"ref\":60,\"tf\":0.0022727272727272726},\"104\":{\"ref\":104,\"tf\":0.00847457627118644}}}}}},\"u\":{\"docs\":{},\"s\":{\"docs\":{\"135\":{\"ref\":135,\"tf\":0.0019305019305019305}}}}},\"c\":{\"docs\":{},\"e\":{\"docs\":{},\"p\":{\"docs\":{},\"t\":{\"docs\":{\"54\":{\"ref\":54,\"tf\":0.001287001287001287},\"57\":{\"ref\":57,\"tf\":0.0023584905660377358}}}},\"r\":{\"docs\":{},\"n\":{\"docs\":{\"129\":{\"ref\":129,\"tf\":0.0017391304347826088}}}}},\"l\":{\"docs\":{},\"u\":{\"docs\":{},\"s\":{\"docs\":{\"134\":{\"ref\":134,\"tf\":0.0011507479861910242}}}}}},\"n\":{\"docs\":{},\"e\":{\"docs\":{},\"c\":{\"docs\":{},\"t\":{\"docs\":{\"56\":{\"ref\":56,\"tf\":0.001594896331738437},\"60\":{\"ref\":60,\"tf\":0.0022727272727272726}}}}}},\"j\":{\"docs\":{},\"u\":{\"docs\":{},\"n\":{\"docs\":{},\"c\":{\"docs\":{},\"t\":{\"docs\":{\"72\":{\"ref\":72,\"tf\":0.002331002331002331},\"103\":{\"ref\":103,\"tf\":0.006493506493506494}}}}}}},\"e\":{\"docs\":{\"114\":{\"ref\":114,\"tf\":0.001594896331738437}}}},\"r\":{\"docs\":{},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\"c\":{\"docs\":{},\"t\":{\"docs\":{\"3\":{\"ref\":3,\"tf\":0.019230769230769232},\"104\":{\"ref\":104,\"tf\":0.00423728813559322},\"115\":{\"ref\":115,\"tf\":0.003246753246753247}},\"l\":{\"docs\":{},\"i\":{\"docs\":{\"76\":{\"ref\":76,\"tf\":0.018867924528301886},\"77\":{\"ref\":77,\"tf\":0.018867924528301886},\"82\":{\"ref\":82,\"tf\":0.0078125},\"84\":{\"ref\":84,\"tf\":0.0036363636363636364},\"104\":{\"ref\":104,\"tf\":0.00423728813559322},\"123\":{\"ref\":123,\"tf\":0.0035211267605633804},\"129\":{\"ref\":129,\"tf\":0.0017391304347826088},\"130\":{\"ref\":130,\"tf\":0.0043859649122807015}}}}}},\"s\":{\"docs\":{},\"p\":{\"docs\":{},\"o\":{\"docs\":{},\"n\":{\"docs\":{},\"d\":{\"docs\":{\"54\":{\"ref\":54,\"tf\":0.001287001287001287},\"72\":{\"ref\":72,\"tf\":0.002331002331002331},\"83\":{\"ref\":83,\"tf\":0.02127659574468085},\"132\":{\"ref\":132,\"tf\":0.01282051282051282}},\"i\":{\"docs\":{},\"n\":{\"docs\":{},\"g\":{\"docs\":{},\"b\":{\"docs\":{},\"u\":{\"docs\":{},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"o\":{\"docs\":{},\"n\":{\"docs\":{\"114\":{\"ref\":114,\"tf\":0.001594896331738437}}}}}}}}}}}}}}}}}},\"d\":{\"docs\":{},\"o\":{\"docs\":{},\"v\":{\"docs\":{},\"a\":{\"docs\":{\"56\":{\"ref\":56,\"tf\":0.014354066985645933},\"57\":{\"ref\":57,\"tf\":0.009433962264150943},\"58\":{\"ref\":58,\"tf\":0.00819672131147541},\"59\":{\"ref\":59,\"tf\":0.002785515320334262},\"60\":{\"ref\":60,\"tf\":0.011363636363636364},\"63\":{\"ref\":63,\"tf\":0.024390243902439025},\"66\":{\"ref\":66,\"tf\":0.08695652173913043},\"103\":{\"ref\":103,\"tf\":0.006493506493506494},\"121\":{\"ref\":121,\"tf\":0.029069767441860465},\"127\":{\"ref\":127,\"tf\":0.026490066225165563},\"128\":{\"ref\":128,\"tf\":0.017857142857142856},\"132\":{\"ref\":132,\"tf\":0.038461538461538464},\"135\":{\"ref\":135,\"tf\":2.5559845559845558}},\"]\":{\"docs\":{},\"(\":{\"docs\":{},\"h\":{\"docs\":{},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"p\":{\"docs\":{},\":\":{\"docs\":{},\"/\":{\"docs\":{},\"/\":{\"docs\":{},\"c\":{\"docs\":{},\"o\":{\"docs\":{},\"r\":{\"docs\":{},\"d\":{\"docs\":{},\"o\":{\"docs\":{},\"v\":{\"docs\":{},\"a\":{\"docs\":{},\".\":{\"docs\":{},\"a\":{\"docs\":{},\"p\":{\"docs\":{},\"a\":{\"docs\":{},\"c\":{\"docs\":{},\"h\":{\"docs\":{},\"e\":{\"docs\":{},\".\":{\"docs\":{},\"o\":{\"docs\":{},\"r\":{\"docs\":{},\"g\":{\"docs\":{\"56\":{\"ref\":56,\"tf\":0.001594896331738437},\"128\":{\"ref\":128,\"tf\":0.017857142857142856},\"135\":{\"ref\":135,\"tf\":0.0019305019305019305}}}}}}}}}}}}}}}}}}}}}}}}}}}}},\"/\":{\"docs\":{},\"p\":{\"docs\":{},\"h\":{\"docs\":{},\"o\":{\"docs\":{},\"n\":{\"docs\":{},\"e\":{\"docs\":{},\"g\":{\"docs\":{},\"a\":{\"docs\":{},\"p\":{\"docs\":{\"57\":{\"ref\":57,\"tf\":0.0023584905660377358},\"61\":{\"ref\":61,\"tf\":0.010869565217391304}}}}}}}}}}},\".\":{\"docs\":{},\"j\":{\"docs\":{\"59\":{\"ref\":59,\"tf\":0.002785515320334262}}},\"p\":{\"docs\":{},\"l\":{\"docs\":{},\"u\":{\"docs\":{},\"g\":{\"docs\":{},\"i\":{\"docs\":{},\"n\":{\"docs\":{},\"s\":{\"docs\":{},\".\":{\"docs\":{},\"k\":{\"docs\":{},\"e\":{\"docs\":{},\"y\":{\"docs\":{},\"b\":{\"docs\":{},\"o\":{\"docs\":{},\"a\":{\"docs\":{},\"r\":{\"docs\":{},\"d\":{\"docs\":{},\".\":{\"docs\":{},\"d\":{\"docs\":{},\"i\":{\"docs\":{},\"s\":{\"docs\":{},\"a\":{\"docs\":{},\"b\":{\"docs\":{},\"l\":{\"docs\":{},\"e\":{\"docs\":{},\"s\":{\"docs\":{},\"c\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"l\":{\"docs\":{},\"l\":{\"docs\":{},\"(\":{\"docs\":{},\"t\":{\"docs\":{},\"r\":{\"docs\":{},\"u\":{\"docs\":{\"99\":{\"ref\":99,\"tf\":0.02127659574468085},\"103\":{\"ref\":103,\"tf\":0.006493506493506494}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},\"'\":{\"docs\":{\"135\":{\"ref\":135,\"tf\":0.0019305019305019305}}}}}}},\"e\":{\"docs\":{\"57\":{\"ref\":57,\"tf\":0.0047169811320754715},\"59\":{\"ref\":59,\"tf\":0.002785515320334262},\"65\":{\"ref\":65,\"tf\":0.025},\"84\":{\"ref\":84,\"tf\":0.0036363636363636364},\"129\":{\"ref\":129,\"tf\":0.0017391304347826088},\"134\":{\"ref\":134,\"tf\":0.0011507479861910242},\"135\":{\"ref\":135,\"tf\":0.009652509652509652}}}},\"u\":{\"docs\":{},\"s\":{\"docs\":{},\"i\":{\"docs\":{},\"n\":{\"docs\":{\"21\":{\"ref\":21,\"tf\":0.00980392156862745}}}}},\"r\":{\"docs\":{},\"s\":{\"docs\":{\"56\":{\"ref\":56,\"tf\":0.001594896331738437},\"127\":{\"ref\":127,\"tf\":0.006622516556291391},\"130\":{\"ref\":130,\"tf\":0.0043859649122807015}}}},\"n\":{\"docs\":{},\"t\":{\"docs\":{\"135\":{\"ref\":135,\"tf\":0.0019305019305019305}}}}},\"v\":{\"docs\":{},\"e\":{\"docs\":{},\"r\":{\"docs\":{\"38\":{\"ref\":38,\"tf\":0.011627906976744186},\"127\":{\"ref\":127,\"tf\":0.006622516556291391}}}}},\"d\":{\"docs\":{},\"e\":{\"docs\":{\"44\":{\"ref\":44,\"tf\":0.018518518518518517},\"46\":{\"ref\":46,\"tf\":0.019230769230769232},\"54\":{\"ref\":54,\"tf\":0.009009009009009009},\"56\":{\"ref\":56,\"tf\":0.003189792663476874},\"57\":{\"ref\":57,\"tf\":0.0047169811320754715},\"59\":{\"ref\":59,\"tf\":0.013927576601671309},\"60\":{\"ref\":60,\"tf\":0.004545454545454545},\"69\":{\"ref\":69,\"tf\":0.05},\"105\":{\"ref\":105,\"tf\":0.005847953216374269},\"129\":{\"ref\":129,\"tf\":0.0017391304347826088},\"130\":{\"ref\":130,\"tf\":0.0043859649122807015},\"133\":{\"ref\":133,\"tf\":0.005025125628140704},\"134\":{\"ref\":134,\"tf\":0.0034522439585730723},\"135\":{\"ref\":135,\"tf\":0.007722007722007722},\"136\":{\"ref\":136,\"tf\":0.005050505050505051}},\"p\":{\"docs\":{},\"e\":{\"docs\":{},\"n\":{\"docs\":{\"133\":{\"ref\":133,\"tf\":0.0016750418760469012}}}}}},\"i\":{\"docs\":{},\"q\":{\"docs\":{},\"a\":{\"docs\":{\"70\":{\"ref\":70,\"tf\":0.023809523809523808}}}}}},\"i\":{\"docs\":{},\"n\":{\"docs\":{\"54\":{\"ref\":54,\"tf\":0.001287001287001287}}}},\"s\":{\"docs\":{},\"t\":{\"docs\":{\"58\":{\"ref\":58,\"tf\":0.00273224043715847},\"60\":{\"ref\":60,\"tf\":0.0022727272727272726}}}},\"o\":{\"docs\":{},\"l\":{\"docs\":{\"129\":{\"ref\":129,\"tf\":0.0017391304347826088}}},\"r\":{\"docs\":{},\"d\":{\"docs\":{},\"i\":{\"docs\":{},\"n\":{\"docs\":{\"134\":{\"ref\":134,\"tf\":0.0034522439585730723}}}}}}},\"p\":{\"docs\":{},\"i\":{\"docs\":{\"129\":{\"ref\":129,\"tf\":0.0052173913043478265},\"130\":{\"ref\":130,\"tf\":0.0043859649122807015}}}}},\"u\":{\"docs\":{},\"s\":{\"docs\":{},\"t\":{\"docs\":{},\"o\":{\"docs\":{},\"m\":{\"docs\":{\"1\":{\"ref\":1,\"tf\":0.045454545454545456},\"10\":{\"ref\":10,\"tf\":0.023809523809523808},\"16\":{\"ref\":16,\"tf\":0.007352941176470588},\"22\":{\"ref\":22,\"tf\":0.024390243902439025},\"38\":{\"ref\":38,\"tf\":0.011627906976744186},\"50\":{\"ref\":50,\"tf\":0.026785714285714284},\"54\":{\"ref\":54,\"tf\":0.001287001287001287},\"57\":{\"ref\":57,\"tf\":0.0023584905660377358},\"59\":{\"ref\":59,\"tf\":0.005571030640668524},\"60\":{\"ref\":60,\"tf\":0.0022727272727272726},\"65\":{\"ref\":65,\"tf\":0.05},\"74\":{\"ref\":74,\"tf\":0.011976047904191617},\"81\":{\"ref\":81,\"tf\":0.015151515151515152},\"114\":{\"ref\":114,\"tf\":0.003189792663476874},\"123\":{\"ref\":123,\"tf\":0.0035211267605633804},\"126\":{\"ref\":126,\"tf\":0.011111111111111112},\"128\":{\"ref\":128,\"tf\":0.017857142857142856},\"129\":{\"ref\":129,\"tf\":2.5156521739130433},\"130\":{\"ref\":130,\"tf\":0.008771929824561403},\"135\":{\"ref\":135,\"tf\":0.007722007722007722},\"136\":{\"ref\":136,\"tf\":0.005050505050505051}},\"i\":{\"docs\":{},\"z\":{\"docs\":{\"15\":{\"ref\":15,\"tf\":0.022727272727272728}}}}}}}},\"r\":{\"docs\":{},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\"n\":{\"docs\":{},\"t\":{\"docs\":{\"14\":{\"ref\":14,\"tf\":0.011494252873563218},\"54\":{\"ref\":54,\"tf\":0.001287001287001287},\"56\":{\"ref\":56,\"tf\":0.003189792663476874},\"58\":{\"ref\":58,\"tf\":0.00273224043715847},\"59\":{\"ref\":59,\"tf\":0.005571030640668524},\"61\":{\"ref\":61,\"tf\":0.010869565217391304},\"71\":{\"ref\":71,\"tf\":0.008},\"72\":{\"ref\":72,\"tf\":0.006993006993006993},\"80\":{\"ref\":80,\"tf\":0.015384615384615385},\"81\":{\"ref\":81,\"tf\":0.015151515151515152},\"82\":{\"ref\":82,\"tf\":0.0078125},\"91\":{\"ref\":91,\"tf\":0.0196078431372549},\"94\":{\"ref\":94,\"tf\":0.011111111111111112},\"98\":{\"ref\":98,\"tf\":0.018867924528301886},\"99\":{\"ref\":99,\"tf\":0.02127659574468085},\"100\":{\"ref\":100,\"tf\":0.08333333333333333},\"112\":{\"ref\":112,\"tf\":0.0058823529411764705},\"113\":{\"ref\":113,\"tf\":0.0070921985815602835},\"116\":{\"ref\":116,\"tf\":0.016666666666666666},\"117\":{\"ref\":117,\"tf\":0.015151515151515152},\"121\":{\"ref\":121,\"tf\":0.023255813953488372},\"123\":{\"ref\":123,\"tf\":0.007042253521126761},\"135\":{\"ref\":135,\"tf\":0.0019305019305019305}},\"i\":{\"docs\":{},\"n\":{\"docs\":{},\"d\":{\"docs\":{},\"e\":{\"docs\":{},\"x\":{\"docs\":{\"117\":{\"ref\":117,\"tf\":0.007575757575757576}}}}}}}}}}},\"v\":{\"docs\":{\"106\":{\"ref\":106,\"tf\":0.02666666666666667}}},\"s\":{\"docs\":{\"134\":{\"ref\":134,\"tf\":2}}}},\"l\":{\"docs\":{},\"t\":{\"docs\":{},\"i\":{\"docs\":{},\"v\":{\"docs\":{\"57\":{\"ref\":57,\"tf\":0.0023584905660377358}}}}},\"p\":{\"docs\":{},\"r\":{\"docs\":{},\"i\":{\"docs\":{},\"t\":{\"docs\":{\"134\":{\"ref\":134,\"tf\":0.0011507479861910242}}}}}}}},\"l\":{\"docs\":{},\"e\":{\"docs\":{},\"a\":{\"docs\":{},\"r\":{\"docs\":{\"9\":{\"ref\":9,\"tf\":5.054054054054054},\"12\":{\"ref\":12,\"tf\":3.333333333333333},\"56\":{\"ref\":56,\"tf\":0.001594896331738437},\"134\":{\"ref\":134,\"tf\":0.0011507479861910242}}},\"n\":{\"docs\":{\"50\":{\"ref\":50,\"tf\":0.008928571428571428},\"71\":{\"ref\":71,\"tf\":0.016}},\"u\":{\"docs\":{},\"p\":{\"docs\":{\"111\":{\"ref\":111,\"tf\":0.007518796992481203}}}}}}},\"a\":{\"docs\":{},\"s\":{\"docs\":{},\"s\":{\"docs\":{\"11\":{\"ref\":11,\"tf\":0.09090909090909091},\"15\":{\"ref\":15,\"tf\":0.022727272727272728},\"16\":{\"ref\":16,\"tf\":0.014705882352941176},\"34\":{\"ref\":34,\"tf\":0.016666666666666666},\"35\":{\"ref\":35,\"tf\":0.01818181818181818},\"36\":{\"ref\":36,\"tf\":0.017857142857142856},\"39\":{\"ref\":39,\"tf\":0.02531645569620253},\"48\":{\"ref\":48,\"tf\":0.05813953488372093},\"49\":{\"ref\":49,\"tf\":0.08333333333333333},\"51\":{\"ref\":51,\"tf\":0.01694915254237288},\"52\":{\"ref\":52,\"tf\":0.020833333333333332},\"53\":{\"ref\":53,\"tf\":0.041666666666666664},\"54\":{\"ref\":54,\"tf\":0.001287001287001287},\"76\":{\"ref\":76,\"tf\":0.018867924528301886},\"77\":{\"ref\":77,\"tf\":0.018867924528301886},\"80\":{\"ref\":80,\"tf\":0.015384615384615385},\"86\":{\"ref\":86,\"tf\":0.06666666666666667},\"97\":{\"ref\":97,\"tf\":0.038461538461538464},\"103\":{\"ref\":103,\"tf\":0.006493506493506494},\"104\":{\"ref\":104,\"tf\":0.00423728813559322},\"111\":{\"ref\":111,\"tf\":0.007518796992481203},\"123\":{\"ref\":123,\"tf\":0.0035211267605633804},\"130\":{\"ref\":130,\"tf\":0.0043859649122807015}},\"n\":{\"docs\":{},\"a\":{\"docs\":{},\"m\":{\"docs\":{\"12\":{\"ref\":12,\"tf\":0.05},\"13\":{\"ref\":13,\"tf\":0.019230769230769232},\"18\":{\"ref\":18,\"tf\":0.02},\"22\":{\"ref\":22,\"tf\":0.024390243902439025},\"23\":{\"ref\":23,\"tf\":0.030303030303030304},\"25\":{\"ref\":25,\"tf\":0.011494252873563218},\"30\":{\"ref\":30,\"tf\":0.05405405405405406},\"39\":{\"ref\":39,\"tf\":0.02531645569620253},\"40\":{\"ref\":40,\"tf\":0.14285714285714285},\"41\":{\"ref\":41,\"tf\":0.0625},\"42\":{\"ref\":42,\"tf\":0.07142857142857142},\"43\":{\"ref\":43,\"tf\":0.006944444444444444},\"44\":{\"ref\":44,\"tf\":0.018518518518518517},\"45\":{\"ref\":45,\"tf\":0.00980392156862745},\"46\":{\"ref\":46,\"tf\":0.019230769230769232},\"51\":{\"ref\":51,\"tf\":0.01694915254237288},\"119\":{\"ref\":119,\"tf\":0.023622047244094488},\"134\":{\"ref\":134,\"tf\":0.0011507479861910242}}}}},\"i\":{\"docs\":{},\"c\":{\"docs\":{\"41\":{\"ref\":41,\"tf\":0.0625}}}},\"=\":{\"docs\":{},\"\\\"\":{\"docs\":{},\"b\":{\"docs\":{},\"a\":{\"docs\":{},\"r\":{\"docs\":{},\"-\":{\"docs\":{},\"s\":{\"docs\":{},\"e\":{\"docs\":{},\"c\":{\"docs\":{},\"o\":{\"docs\":{},\"n\":{\"docs\":{},\"d\":{\"docs\":{},\"a\":{\"docs\":{},\"r\":{\"docs\":{},\"i\":{\"docs\":{\"54\":{\"ref\":54,\"tf\":0.001287001287001287}}}}}}}}}}}}}},\"u\":{\"docs\":{},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"o\":{\"docs\":{},\"n\":{\"docs\":{\"54\":{\"ref\":54,\"tf\":0.002574002574002574}}}}}}}},\"i\":{\"docs\":{},\"t\":{\"docs\":{},\"e\":{\"docs\":{},\"m\":{\"docs\":{\"54\":{\"ref\":54,\"tf\":0.001287001287001287}}}}}},\"l\":{\"docs\":{},\"i\":{\"docs\":{},\"s\":{\"docs\":{},\"t\":{\"docs\":{\"54\":{\"ref\":54,\"tf\":0.001287001287001287}}}}}},\"m\":{\"docs\":{},\"o\":{\"docs\":{},\"d\":{\"docs\":{\"54\":{\"ref\":54,\"tf\":0.001287001287001287},\"111\":{\"ref\":111,\"tf\":0.007518796992481203}}}}},\"p\":{\"docs\":{},\"a\":{\"docs\":{},\"d\":{\"docs\":{\"54\":{\"ref\":54,\"tf\":0.001287001287001287}}}}},\"t\":{\"docs\":{},\"i\":{\"docs\":{},\"t\":{\"docs\":{},\"l\":{\"docs\":{},\"e\":{\"docs\":{},\"\\\"\":{\"docs\":{},\">\":{\"docs\":{},\"n\":{\"docs\":{},\"e\":{\"docs\":{},\"w\":{\"docs\":{\"54\":{\"ref\":54,\"tf\":0.001287001287001287}}}}},\"m\":{\"docs\":{},\"i\":{\"docs\":{\"111\":{\"ref\":111,\"tf\":0.007518796992481203}}}}}}}}}}}},\"&\":{\"docs\":{},\"q\":{\"docs\":{},\"u\":{\"docs\":{},\"o\":{\"docs\":{},\"t\":{\"docs\":{},\";\":{\"docs\":{},\"b\":{\"docs\":{},\"a\":{\"docs\":{},\"r\":{\"docs\":{},\"-\":{\"docs\":{},\"p\":{\"docs\":{},\"o\":{\"docs\":{},\"s\":{\"docs\":{},\"i\":{\"docs\":{},\"t\":{\"docs\":{},\"i\":{\"docs\":{},\"v\":{\"docs\":{},\"e\":{\"docs\":{},\"&\":{\"docs\":{},\"q\":{\"docs\":{},\"u\":{\"docs\":{},\"o\":{\"docs\":{},\"t\":{\"docs\":{},\";\":{\"docs\":{},\"&\":{\"docs\":{},\"g\":{\"docs\":{},\"t\":{\"docs\":{\"82\":{\"ref\":82,\"tf\":0.0078125}}}}}}}}}}}}}}}}}}}}}},\"u\":{\"docs\":{},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"o\":{\"docs\":{},\"n\":{\"docs\":{\"82\":{\"ref\":82,\"tf\":0.0078125}},\"&\":{\"docs\":{},\"q\":{\"docs\":{},\"u\":{\"docs\":{},\"o\":{\"docs\":{},\"t\":{\"docs\":{},\";\":{\"docs\":{},\"&\":{\"docs\":{},\"g\":{\"docs\":{},\"t\":{\"docs\":{\"82\":{\"ref\":82,\"tf\":0.0078125}}}}}}}}}}}}}}}}}}}}}}}},\"]\":{\"docs\":{},\"(\":{\"docs\":{},\"/\":{\"docs\":{},\"d\":{\"docs\":{},\"o\":{\"docs\":{},\"c\":{\"docs\":{},\"s\":{\"docs\":{},\"/\":{\"docs\":{},\"c\":{\"docs\":{},\"o\":{\"docs\":{},\"m\":{\"docs\":{},\"p\":{\"docs\":{},\"o\":{\"docs\":{},\"n\":{\"docs\":{},\"e\":{\"docs\":{},\"n\":{\"docs\":{},\"t\":{\"docs\":{},\"s\":{\"docs\":{},\"#\":{\"docs\":{},\"a\":{\"docs\":{},\"n\":{\"docs\":{},\"i\":{\"docs\":{},\"m\":{\"docs\":{\"82\":{\"ref\":82,\"tf\":0.0078125},\"84\":{\"ref\":84,\"tf\":0.0036363636363636364},\"96\":{\"ref\":96,\"tf\":0.017857142857142856}}}}}},\"t\":{\"docs\":{},\"a\":{\"docs\":{},\"b\":{\"docs\":{\"96\":{\"ref\":96,\"tf\":0.017857142857142856}}}}}}}}}}}}}}}}}}}}}}}}}}},\"i\":{\"docs\":{},\"c\":{\"docs\":{},\"k\":{\"docs\":{\"54\":{\"ref\":54,\"tf\":0.001287001287001287},\"58\":{\"ref\":58,\"tf\":0.00546448087431694},\"71\":{\"ref\":71,\"tf\":0.008},\"81\":{\"ref\":81,\"tf\":0.045454545454545456},\"94\":{\"ref\":94,\"tf\":0.011111111111111112},\"95\":{\"ref\":95,\"tf\":0.009345794392523364},\"102\":{\"ref\":102,\"tf\":0.041666666666666664},\"104\":{\"ref\":104,\"tf\":0.0211864406779661},\"105\":{\"ref\":105,\"tf\":0.023391812865497075},\"113\":{\"ref\":113,\"tf\":0.0070921985815602835},\"114\":{\"ref\":114,\"tf\":0.001594896331738437},\"134\":{\"ref\":134,\"tf\":0.02991944764096663}}}}},\"o\":{\"docs\":{},\"s\":{\"docs\":{},\"e\":{\"docs\":{\"54\":{\"ref\":54,\"tf\":0.005148005148005148},\"57\":{\"ref\":57,\"tf\":0.0023584905660377358},\"71\":{\"ref\":71,\"tf\":0.008},\"100\":{\"ref\":100,\"tf\":0.08333333333333333},\"105\":{\"ref\":105,\"tf\":0.011695906432748537},\"109\":{\"ref\":109,\"tf\":0.008547008547008548},\"113\":{\"ref\":113,\"tf\":0.014184397163120567},\"114\":{\"ref\":114,\"tf\":0.02711323763955343},\"116\":{\"ref\":116,\"tf\":0.011111111111111112},\"123\":{\"ref\":123,\"tf\":0.0035211267605633804},\"134\":{\"ref\":134,\"tf\":0.0011507479861910242}},\"o\":{\"docs\":{},\"p\":{\"docs\":{},\"t\":{\"docs\":{},\"i\":{\"docs\":{},\"o\":{\"docs\":{},\"n\":{\"docs\":{},\"b\":{\"docs\":{},\"u\":{\"docs\":{},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"o\":{\"docs\":{},\"n\":{\"docs\":{\"109\":{\"ref\":109,\"tf\":0.008547008547008548}}}}}}}}}}}}}},\"s\":{\"docs\":{},\"t\":{\"docs\":{\"119\":{\"ref\":119,\"tf\":0.007874015748031496}}}}}},\"n\":{\"docs\":{},\"e\":{\"docs\":{\"62\":{\"ref\":62,\"tf\":0.041666666666666664},\"63\":{\"ref\":63,\"tf\":0.024390243902439025},\"128\":{\"ref\":128,\"tf\":0.017857142857142856},\"133\":{\"ref\":133,\"tf\":0.0016750418760469012}}}}}},\"h\":{\"docs\":{},\"i\":{\"docs\":{},\"l\":{\"docs\":{},\"d\":{\"docs\":{\"10\":{\"ref\":10,\"tf\":0.023809523809523808},\"15\":{\"ref\":15,\"tf\":0.022727272727272728},\"51\":{\"ref\":51,\"tf\":0.01694915254237288},\"71\":{\"ref\":71,\"tf\":0.016},\"74\":{\"ref\":74,\"tf\":0.005988023952095809},\"75\":{\"ref\":75,\"tf\":0.08333333333333333},\"78\":{\"ref\":78,\"tf\":0.011235955056179775},\"79\":{\"ref\":79,\"tf\":0.125},\"81\":{\"ref\":81,\"tf\":0.015151515151515152},\"83\":{\"ref\":83,\"tf\":0.02127659574468085},\"85\":{\"ref\":85,\"tf\":0.09090909090909091},\"88\":{\"ref\":88,\"tf\":0.019417475728155338},\"89\":{\"ref\":89,\"tf\":0.022727272727272728},\"91\":{\"ref\":91,\"tf\":0.0196078431372549},\"92\":{\"ref\":92,\"tf\":0.02857142857142857},\"95\":{\"ref\":95,\"tf\":0.009345794392523364},\"98\":{\"ref\":98,\"tf\":0.018867924528301886},\"119\":{\"ref\":119,\"tf\":0.007874015748031496}},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\"n\":{\"docs\":{\"104\":{\"ref\":104,\"tf\":0.00423728813559322},\"119\":{\"ref\":119,\"tf\":0.003937007874015748}}}}}}}},\"o\":{\"docs\":{},\"o\":{\"docs\":{},\"s\":{\"docs\":{\"10\":{\"ref\":10,\"tf\":0.023809523809523808},\"16\":{\"ref\":16,\"tf\":0.007352941176470588},\"50\":{\"ref\":50,\"tf\":0.008928571428571428},\"51\":{\"ref\":51,\"tf\":0.01694915254237288},\"59\":{\"ref\":59,\"tf\":0.002785515320334262},\"87\":{\"ref\":87,\"tf\":0.125},\"105\":{\"ref\":105,\"tf\":0.005847953216374269},\"124\":{\"ref\":124,\"tf\":0.010309278350515464},\"129\":{\"ref\":129,\"tf\":0.0034782608695652175},\"133\":{\"ref\":133,\"tf\":0.0016750418760469012}}}},\"i\":{\"docs\":{},\"c\":{\"docs\":{\"21\":{\"ref\":21,\"tf\":0.00980392156862745},\"59\":{\"ref\":59,\"tf\":0.002785515320334262},\"111\":{\"ref\":111,\"tf\":0.007518796992481203},\"124\":{\"ref\":124,\"tf\":0.010309278350515464}}}},\"s\":{\"docs\":{},\"e\":{\"docs\":{\"43\":{\"ref\":43,\"tf\":0.006944444444444444},\"56\":{\"ref\":56,\"tf\":0.001594896331738437}}}}},\"a\":{\"docs\":{},\"n\":{\"docs\":{},\"g\":{\"docs\":{\"11\":{\"ref\":11,\"tf\":0.045454545454545456},\"39\":{\"ref\":39,\"tf\":0.012658227848101266},\"48\":{\"ref\":48,\"tf\":0.011627906976744186},\"56\":{\"ref\":56,\"tf\":0.006379585326953748},\"58\":{\"ref\":58,\"tf\":0.00819672131147541},\"59\":{\"ref\":59,\"tf\":0.002785515320334262},\"60\":{\"ref\":60,\"tf\":0.004545454545454545},\"82\":{\"ref\":82,\"tf\":0.0234375},\"94\":{\"ref\":94,\"tf\":0.022222222222222223},\"102\":{\"ref\":102,\"tf\":0.020833333333333332},\"112\":{\"ref\":112,\"tf\":0.0058823529411764705},\"115\":{\"ref\":115,\"tf\":0.003246753246753247},\"117\":{\"ref\":117,\"tf\":0.007575757575757576},\"123\":{\"ref\":123,\"tf\":0.0035211267605633804},\"129\":{\"ref\":129,\"tf\":0.01565217391304348},\"130\":{\"ref\":130,\"tf\":0.013157894736842105},\"133\":{\"ref\":133,\"tf\":0.0016750418760469012},\"134\":{\"ref\":134,\"tf\":0.0011507479861910242}},\"e\":{\"docs\":{},\"t\":{\"docs\":{},\"i\":{\"docs\":{},\"t\":{\"docs\":{},\"l\":{\"docs\":{},\"e\":{\"docs\":{},\"(\":{\"docs\":{},\"t\":{\"docs\":{},\"i\":{\"docs\":{},\"t\":{\"docs\":{},\"l\":{\"docs\":{\"112\":{\"ref\":112,\"tf\":0.0058823529411764705}}}}}}}}}}}}}},\"c\":{\"docs\":{\"54\":{\"ref\":54,\"tf\":0.001287001287001287},\"58\":{\"ref\":58,\"tf\":0.00273224043715847}}}},\"p\":{\"docs\":{},\"t\":{\"docs\":{},\"e\":{\"docs\":{},\"r\":{\"docs\":{\"54\":{\"ref\":54,\"tf\":0.002574002574002574},\"55\":{\"ref\":55,\"tf\":0.12244897959183673},\"56\":{\"ref\":56,\"tf\":0.006379585326953748},\"57\":{\"ref\":57,\"tf\":0.0047169811320754715},\"58\":{\"ref\":58,\"tf\":0.00273224043715847},\"59\":{\"ref\":59,\"tf\":0.005571030640668524},\"60\":{\"ref\":60,\"tf\":0.006818181818181818}}}}}},\"l\":{\"docs\":{},\"l\":{\"docs\":{},\"e\":{\"docs\":{},\"n\":{\"docs\":{},\"g\":{\"docs\":{\"134\":{\"ref\":134,\"tf\":0.0011507479861910242}}}}}}}},\"e\":{\"docs\":{},\"c\":{\"docs\":{},\"k\":{\"docs\":{\"14\":{\"ref\":14,\"tf\":0.011494252873563218},\"16\":{\"ref\":16,\"tf\":0.014705882352941176},\"56\":{\"ref\":56,\"tf\":0.001594896331738437},\"60\":{\"ref\":60,\"tf\":0.004545454545454545},\"69\":{\"ref\":69,\"tf\":0.05},\"93\":{\"ref\":93,\"tf\":0.014084507042253521},\"114\":{\"ref\":114,\"tf\":0.001594896331738437},\"121\":{\"ref\":121,\"tf\":0.005813953488372093},\"126\":{\"ref\":126,\"tf\":0.011111111111111112},\"133\":{\"ref\":133,\"tf\":0.005025125628140704},\"134\":{\"ref\":134,\"tf\":0.0034522439585730723},\"136\":{\"ref\":136,\"tf\":0.005050505050505051}},\"b\":{\"docs\":{},\"o\":{\"docs\":{},\"x\":{\"docs\":{\"34\":{\"ref\":34,\"tf\":0.03333333333333333},\"35\":{\"ref\":35,\"tf\":10.127272727272727},\"73\":{\"ref\":73,\"tf\":0.2},\"123\":{\"ref\":123,\"tf\":0.0035211267605633804},\"134\":{\"ref\":134,\"tf\":0.0011507479861910242}},\"-\":{\"docs\":{},\"a\":{\"docs\":{},\"s\":{\"docs\":{},\"s\":{\"docs\":{},\"e\":{\"docs\":{},\"r\":{\"docs\":{},\"t\":{\"docs\":{\"35\":{\"ref\":35,\"tf\":0.01818181818181818}}}}}}}}},\"]\":{\"docs\":{},\"(\":{\"docs\":{},\"h\":{\"docs\":{},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"p\":{\"docs\":{},\":\":{\"docs\":{},\"/\":{\"docs\":{},\"/\":{\"docs\":{},\"d\":{\"docs\":{},\"o\":{\"docs\":{},\"c\":{\"docs\":{},\"s\":{\"docs\":{},\".\":{\"docs\":{},\"a\":{\"docs\":{},\"n\":{\"docs\":{},\"g\":{\"docs\":{},\"u\":{\"docs\":{},\"l\":{\"docs\":{},\"a\":{\"docs\":{},\"r\":{\"docs\":{},\"j\":{\"docs\":{},\"s\":{\"docs\":{},\".\":{\"docs\":{},\"o\":{\"docs\":{},\"r\":{\"docs\":{},\"g\":{\"docs\":{},\"/\":{\"docs\":{},\"a\":{\"docs\":{},\"p\":{\"docs\":{},\"i\":{\"docs\":{},\"/\":{\"docs\":{},\"n\":{\"docs\":{},\"g\":{\"docs\":{},\"/\":{\"docs\":{},\"i\":{\"docs\":{},\"n\":{\"docs\":{},\"p\":{\"docs\":{},\"u\":{\"docs\":{},\"t\":{\"docs\":{},\"/\":{\"docs\":{},\"i\":{\"docs\":{},\"n\":{\"docs\":{},\"p\":{\"docs\":{},\"u\":{\"docs\":{},\"t\":{\"docs\":{},\"[\":{\"docs\":{},\"c\":{\"docs\":{},\"h\":{\"docs\":{},\"e\":{\"docs\":{},\"c\":{\"docs\":{},\"k\":{\"docs\":{},\"b\":{\"docs\":{},\"o\":{\"docs\":{},\"x\":{\"docs\":{\"73\":{\"ref\":73,\"tf\":0.05},\"97\":{\"ref\":97,\"tf\":0.019230769230769232}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"m\":{\"docs\":{},\"e\":{\"docs\":{\"57\":{\"ref\":57,\"tf\":0.0023584905660377358},\"60\":{\"ref\":60,\"tf\":0.00909090909090909},\"134\":{\"ref\":134,\"tf\":0.0023014959723820483},\"135\":{\"ref\":135,\"tf\":0.0019305019305019305}}}}}}},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\"a\":{\"docs\":{},\"t\":{\"docs\":{\"15\":{\"ref\":15,\"tf\":0.022727272727272728},\"18\":{\"ref\":18,\"tf\":0.02},\"19\":{\"ref\":19,\"tf\":0.02},\"23\":{\"ref\":23,\"tf\":0.030303030303030304},\"25\":{\"ref\":25,\"tf\":0.022988505747126436},\"26\":{\"ref\":26,\"tf\":0.021739130434782608},\"29\":{\"ref\":29,\"tf\":0.02564102564102564},\"48\":{\"ref\":48,\"tf\":0.011627906976744186},\"53\":{\"ref\":53,\"tf\":0.041666666666666664},\"54\":{\"ref\":54,\"tf\":0.01287001287001287},\"55\":{\"ref\":55,\"tf\":0.02040816326530612},\"56\":{\"ref\":56,\"tf\":0.007974481658692184},\"57\":{\"ref\":57,\"tf\":0.0023584905660377358},\"58\":{\"ref\":58,\"tf\":0.01092896174863388},\"59\":{\"ref\":59,\"tf\":0.025069637883008356},\"63\":{\"ref\":63,\"tf\":0.024390243902439025},\"70\":{\"ref\":70,\"tf\":0.023809523809523808},\"71\":{\"ref\":71,\"tf\":0.016},\"81\":{\"ref\":81,\"tf\":0.015151515151515152},\"82\":{\"ref\":82,\"tf\":0.015625},\"84\":{\"ref\":84,\"tf\":0.007272727272727273},\"90\":{\"ref\":90,\"tf\":0.010416666666666666},\"97\":{\"ref\":97,\"tf\":0.019230769230769232},\"105\":{\"ref\":105,\"tf\":0.005847953216374269},\"114\":{\"ref\":114,\"tf\":0.001594896331738437},\"115\":{\"ref\":115,\"tf\":0.003246753246753247},\"123\":{\"ref\":123,\"tf\":0.017605633802816902},\"124\":{\"ref\":124,\"tf\":0.020618556701030927},\"127\":{\"ref\":127,\"tf\":0.006622516556291391},\"130\":{\"ref\":130,\"tf\":0.0043859649122807015},\"133\":{\"ref\":133,\"tf\":0.005025125628140704},\"134\":{\"ref\":134,\"tf\":0.0034522439585730723},\"135\":{\"ref\":135,\"tf\":0.0019305019305019305}},\"e\":{\"docs\":{},\"p\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"j\":{\"docs\":{},\"e\":{\"docs\":{},\"c\":{\"docs\":{},\"t\":{\"docs\":{\"54\":{\"ref\":54,\"tf\":0.001287001287001287}},\"(\":{\"docs\":{},\"p\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"j\":{\"docs\":{},\"e\":{\"docs\":{},\"c\":{\"docs\":{},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"i\":{\"docs\":{},\"t\":{\"docs\":{},\"l\":{\"docs\":{\"54\":{\"ref\":54,\"tf\":0.002574002574002574}}}}}}}}}}}}}}}}}}}}},\"t\":{\"docs\":{},\"a\":{\"docs\":{},\"s\":{\"docs\":{},\"k\":{\"docs\":{\"54\":{\"ref\":54,\"tf\":0.001287001287001287}},\"(\":{\"docs\":{},\"t\":{\"docs\":{},\"a\":{\"docs\":{},\"s\":{\"docs\":{},\"k\":{\"docs\":{\"54\":{\"ref\":54,\"tf\":0.001287001287001287}}}}}}}}}}}},\"o\":{\"docs\":{},\"r\":{\"docs\":{\"58\":{\"ref\":58,\"tf\":0.00273224043715847}},\"s\":{\"docs\":{},\"]\":{\"docs\":{},\"(\":{\"docs\":{},\"h\":{\"docs\":{},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"p\":{\"docs\":{},\":\":{\"docs\":{},\"/\":{\"docs\":{},\"/\":{\"docs\":{},\"d\":{\"docs\":{},\"r\":{\"docs\":{},\"i\":{\"docs\":{},\"f\":{\"docs\":{},\"t\":{\"docs\":{},\"y\":{\"docs\":{},\".\":{\"docs\":{},\"c\":{\"docs\":{},\"o\":{\"docs\":{},\"m\":{\"docs\":{\"57\":{\"ref\":57,\"tf\":0.0023584905660377358}}}}}}}}}}}}}}}}}}}}}}}},\"i\":{\"docs\":{},\"o\":{\"docs\":{},\"n\":{\"docs\":{\"135\":{\"ref\":135,\"tf\":0.003861003861003861}}}},\"v\":{\"docs\":{\"135\":{\"ref\":135,\"tf\":0.0019305019305019305}}}}},\"m\":{\"docs\":{\"114\":{\"ref\":114,\"tf\":0.004784688995215311}}}}},\"u\":{\"docs\":{},\"s\":{\"docs\":{},\"a\":{\"docs\":{},\"d\":{\"docs\":{\"20\":{\"ref\":20,\"tf\":0.02040816326530612}}}}}},\"y\":{\"docs\":{},\"s\":{\"docs\":{},\"t\":{\"docs\":{},\"a\":{\"docs\":{},\"l\":{\"docs\":{\"20\":{\"ref\":20,\"tf\":0.02040816326530612}}}}}}},\"a\":{\"docs\":{},\"z\":{\"docs\":{},\"i\":{\"docs\":{\"43\":{\"ref\":43,\"tf\":0.006944444444444444},\"134\":{\"ref\":134,\"tf\":0.0011507479861910242}}}},\"s\":{\"docs\":{},\"h\":{\"docs\":{\"127\":{\"ref\":127,\"tf\":0.006622516556291391}}}}}},\"s\":{\"docs\":{},\"s\":{\"3\":{\"docs\":{\"34\":{\"ref\":34,\"tf\":0.016666666666666666}}},\"docs\":{\"43\":{\"ref\":43,\"tf\":0.006944444444444444},\"50\":{\"ref\":50,\"tf\":0.017857142857142856},\"57\":{\"ref\":57,\"tf\":0.007075471698113208},\"59\":{\"ref\":59,\"tf\":0.002785515320334262},\"61\":{\"ref\":61,\"tf\":0.021739130434782608},\"64\":{\"ref\":64,\"tf\":0.0625},\"65\":{\"ref\":65,\"tf\":0.075},\"66\":{\"ref\":66,\"tf\":0.043478260869565216},\"72\":{\"ref\":72,\"tf\":0.011655011655011656},\"76\":{\"ref\":76,\"tf\":0.018867924528301886},\"77\":{\"ref\":77,\"tf\":0.018867924528301886},\"80\":{\"ref\":80,\"tf\":0.007692307692307693},\"96\":{\"ref\":96,\"tf\":0.017857142857142856},\"97\":{\"ref\":97,\"tf\":0.038461538461538464},\"104\":{\"ref\":104,\"tf\":0.00847457627118644},\"106\":{\"ref\":106,\"tf\":0.013333333333333334},\"126\":{\"ref\":126,\"tf\":0.022222222222222223},\"127\":{\"ref\":127,\"tf\":0.006622516556291391},\"129\":{\"ref\":129,\"tf\":0.02782608695652174},\"130\":{\"ref\":130,\"tf\":0.008771929824561403},\"133\":{\"ref\":133,\"tf\":0.0016750418760469012},\"134\":{\"ref\":134,\"tf\":0.0023014959723820483},\"135\":{\"ref\":135,\"tf\":0.0019305019305019305}},\"/\":{\"docs\":{},\"s\":{\"docs\":{},\"a\":{\"docs\":{},\"s\":{\"docs\":{},\"s\":{\"docs\":{\"65\":{\"ref\":65,\"tf\":10}}}}}},\"a\":{\"docs\":{},\"p\":{\"docs\":{},\"p\":{\"docs\":{},\".\":{\"docs\":{},\"c\":{\"docs\":{},\"s\":{\"docs\":{},\"s\":{\"docs\":{\"129\":{\"ref\":129,\"tf\":0.0034782608695652175}}}}}}}}}}}},\"-\":{\"3\":{\"docs\":{},\"p\":{\"docs\":{},\"o\":{\"docs\":{\"38\":{\"ref\":38,\"tf\":0.011627906976744186}}}}},\"docs\":{}},\"e\":{\"docs\":{},\"r\":{\"docs\":{},\"t\":{\"docs\":{},\"a\":{\"docs\":{},\"i\":{\"docs\":{},\"n\":{\"docs\":{\"45\":{\"ref\":45,\"tf\":0.00980392156862745},\"48\":{\"ref\":48,\"tf\":0.011627906976744186},\"54\":{\"ref\":54,\"tf\":0.001287001287001287},\"56\":{\"ref\":56,\"tf\":0.001594896331738437},\"96\":{\"ref\":96,\"tf\":0.017857142857142856},\"104\":{\"ref\":104,\"tf\":0.00423728813559322},\"133\":{\"ref\":133,\"tf\":0.0016750418760469012}},\"l\":{\"docs\":{},\"i\":{\"docs\":{\"51\":{\"ref\":51,\"tf\":0.01694915254237288}}}}}}},\"i\":{\"docs\":{},\"f\":{\"docs\":{\"60\":{\"ref\":60,\"tf\":0.0022727272727272726}}}}}},\"n\":{\"docs\":{},\"t\":{\"docs\":{},\"e\":{\"docs\":{},\"r\":{\"docs\":{\"47\":{\"ref\":47,\"tf\":0.01},\"54\":{\"ref\":54,\"tf\":0.003861003861003861},\"59\":{\"ref\":59,\"tf\":0.013927576601671309},\"60\":{\"ref\":60,\"tf\":0.0022727272727272726},\"93\":{\"ref\":93,\"tf\":0.014084507042253521},\"130\":{\"ref\":130,\"tf\":0.0043859649122807015},\"133\":{\"ref\":133,\"tf\":0.0016750418760469012}}}}}}},\":\":{\"docs\":{},\"\\\\\":{\"docs\":{},\"a\":{\"docs\":{},\"p\":{\"docs\":{},\"a\":{\"docs\":{},\"c\":{\"docs\":{},\"h\":{\"docs\":{},\"e\":{\"docs\":{},\"-\":{\"docs\":{},\"a\":{\"docs\":{},\"n\":{\"docs\":{},\"t\":{\"docs\":{},\"-\":{\"1\":{\"docs\":{},\".\":{\"9\":{\"docs\":{},\".\":{\"2\":{\"docs\":{},\"\\\\\":{\"docs\":{},\"b\":{\"docs\":{},\"i\":{\"docs\":{},\"n\":{\"docs\":{\"56\":{\"ref\":56,\"tf\":0.001594896331738437}}}}}}},\"docs\":{}}},\"docs\":{}}},\"docs\":{}}}}}}}}}}}},\"p\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"g\":{\"docs\":{},\"r\":{\"docs\":{},\"a\":{\"docs\":{},\"m\":{\"docs\":{\"56\":{\"ref\":56,\"tf\":0.003189792663476874}}}}}}}}}}},\"d\":{\"docs\":{\"56\":{\"ref\":56,\"tf\":0.001594896331738437},\"60\":{\"ref\":60,\"tf\":0.004545454545454545},\"127\":{\"ref\":127,\"tf\":0.006622516556291391}}}},\"d\":{\"docs\":{},\"e\":{\"docs\":{},\"f\":{\"docs\":{},\"a\":{\"docs\":{},\"u\":{\"docs\":{},\"l\":{\"docs\":{},\"t\":{\"docs\":{\"0\":{\"ref\":0,\"tf\":0.03225806451612903},\"4\":{\"ref\":4,\"tf\":0.06818181818181818},\"11\":{\"ref\":11,\"tf\":0.045454545454545456},\"13\":{\"ref\":13,\"tf\":0.019230769230769232},\"15\":{\"ref\":15,\"tf\":0.022727272727272728},\"16\":{\"ref\":16,\"tf\":0.007352941176470588},\"21\":{\"ref\":21,\"tf\":0.00980392156862745},\"27\":{\"ref\":27,\"tf\":0.03225806451612903},\"30\":{\"ref\":30,\"tf\":0.02702702702702703},\"32\":{\"ref\":32,\"tf\":0.04},\"37\":{\"ref\":37,\"tf\":0.0625},\"38\":{\"ref\":38,\"tf\":0.023255813953488372},\"39\":{\"ref\":39,\"tf\":0.02531645569620253},\"44\":{\"ref\":44,\"tf\":0.018518518518518517},\"45\":{\"ref\":45,\"tf\":0.00980392156862745},\"47\":{\"ref\":47,\"tf\":0.01},\"52\":{\"ref\":52,\"tf\":0.010416666666666666},\"56\":{\"ref\":56,\"tf\":0.009569377990430622},\"65\":{\"ref\":65,\"tf\":0.05},\"71\":{\"ref\":71,\"tf\":0.032},\"74\":{\"ref\":74,\"tf\":0.03592814371257485},\"76\":{\"ref\":76,\"tf\":0.018867924528301886},\"77\":{\"ref\":77,\"tf\":0.018867924528301886},\"78\":{\"ref\":78,\"tf\":0.02247191011235955},\"80\":{\"ref\":80,\"tf\":0.007692307692307693},\"81\":{\"ref\":81,\"tf\":0.030303030303030304},\"82\":{\"ref\":82,\"tf\":0.0078125},\"88\":{\"ref\":88,\"tf\":0.009708737864077669},\"90\":{\"ref\":90,\"tf\":0.052083333333333336},\"91\":{\"ref\":91,\"tf\":0.0196078431372549},\"92\":{\"ref\":92,\"tf\":0.02857142857142857},\"94\":{\"ref\":94,\"tf\":0.011111111111111112},\"95\":{\"ref\":95,\"tf\":0.018691588785046728},\"98\":{\"ref\":98,\"tf\":0.03773584905660377},\"99\":{\"ref\":99,\"tf\":0.02127659574468085},\"110\":{\"ref\":110,\"tf\":0.030612244897959183},\"112\":{\"ref\":112,\"tf\":0.0058823529411764705},\"113\":{\"ref\":113,\"tf\":0.0070921985815602835},\"114\":{\"ref\":114,\"tf\":0.022328548644338118},\"116\":{\"ref\":116,\"tf\":0.011111111111111112},\"118\":{\"ref\":118,\"tf\":0.01904761904761905},\"121\":{\"ref\":121,\"tf\":0.011627906976744186},\"129\":{\"ref\":129,\"tf\":0.02434782608695652},\"133\":{\"ref\":133,\"tf\":0.0033500837520938024},\"134\":{\"ref\":134,\"tf\":0.0011507479861910242},\"135\":{\"ref\":135,\"tf\":0.003861003861003861}}}}}},\"e\":{\"docs\":{},\"r\":{\"docs\":{\"54\":{\"ref\":54,\"tf\":0.001287001287001287}}}},\"i\":{\"docs\":{},\"n\":{\"docs\":{\"54\":{\"ref\":54,\"tf\":0.003861003861003861},\"59\":{\"ref\":59,\"tf\":0.002785515320334262},\"72\":{\"ref\":72,\"tf\":0.002331002331002331},\"84\":{\"ref\":84,\"tf\":0.0036363636363636364},\"96\":{\"ref\":96,\"tf\":0.017857142857142856},\"119\":{\"ref\":119,\"tf\":0.003937007874015748},\"129\":{\"ref\":129,\"tf\":0.0017391304347826088}}}}},\"v\":{\"docs\":{\"57\":{\"ref\":57,\"tf\":0.0023584905660377358}},\"i\":{\"docs\":{},\"c\":{\"docs\":{\"5\":{\"ref\":5,\"tf\":0.02564102564102564},\"34\":{\"ref\":34,\"tf\":0.016666666666666666},\"43\":{\"ref\":43,\"tf\":0.006944444444444444},\"55\":{\"ref\":55,\"tf\":0.02040816326530612},\"56\":{\"ref\":56,\"tf\":0.009569377990430622},\"60\":{\"ref\":60,\"tf\":0.00909090909090909},\"104\":{\"ref\":104,\"tf\":0.012711864406779662},\"113\":{\"ref\":113,\"tf\":0.02127659574468085},\"121\":{\"ref\":121,\"tf\":0.05813953488372093},\"132\":{\"ref\":132,\"tf\":0.01282051282051282},\"134\":{\"ref\":134,\"tf\":0.004602991944764097}},\"e\":{\"docs\":{},\"&\":{\"docs\":{},\"#\":{\"3\":{\"9\":{\"docs\":{},\";\":{\"docs\":{\"121\":{\"ref\":121,\"tf\":0.005813953488372093}}}},\"docs\":{}},\"docs\":{}}},\"'\":{\"docs\":{\"135\":{\"ref\":135,\"tf\":0.0019305019305019305}}}}}},\"e\":{\"docs\":{},\"l\":{\"docs\":{},\"o\":{\"docs\":{},\"p\":{\"docs\":{\"26\":{\"ref\":26,\"tf\":0.021739130434782608},\"52\":{\"ref\":52,\"tf\":0.010416666666666666},\"56\":{\"ref\":56,\"tf\":0.012759170653907496},\"57\":{\"ref\":57,\"tf\":0.02358490566037736},\"58\":{\"ref\":58,\"tf\":0.01366120218579235},\"59\":{\"ref\":59,\"tf\":0.002785515320334262},\"60\":{\"ref\":60,\"tf\":0.00909090909090909},\"61\":{\"ref\":61,\"tf\":0.010869565217391304},\"65\":{\"ref\":65,\"tf\":0.025},\"69\":{\"ref\":69,\"tf\":3.333333333333333},\"70\":{\"ref\":70,\"tf\":0.023809523809523808},\"127\":{\"ref\":127,\"tf\":0.006622516556291391},\"129\":{\"ref\":129,\"tf\":0.0034782608695652175},\"134\":{\"ref\":134,\"tf\":0.004602991944764097},\"135\":{\"ref\":135,\"tf\":0.0019305019305019305},\"136\":{\"ref\":136,\"tf\":0.010101010101010102}},\"e\":{\"docs\":{},\"r\":{\"docs\":{},\"]\":{\"docs\":{},\"(\":{\"docs\":{},\"h\":{\"docs\":{},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"p\":{\"docs\":{},\"s\":{\"docs\":{},\":\":{\"docs\":{},\"/\":{\"docs\":{},\"/\":{\"docs\":{},\"d\":{\"docs\":{},\"e\":{\"docs\":{},\"v\":{\"docs\":{},\"e\":{\"docs\":{},\"l\":{\"docs\":{},\"o\":{\"docs\":{},\"p\":{\"docs\":{},\"e\":{\"docs\":{},\"r\":{\"docs\":{},\".\":{\"docs\":{},\"a\":{\"docs\":{},\"p\":{\"docs\":{},\"p\":{\"docs\":{},\"l\":{\"docs\":{},\"e\":{\"docs\":{},\".\":{\"docs\":{},\"c\":{\"docs\":{},\"o\":{\"docs\":{},\"m\":{\"docs\":{\"60\":{\"ref\":60,\"tf\":0.0022727272727272726}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},\"s\":{\"docs\":{},\"i\":{\"docs\":{},\"r\":{\"docs\":{\"11\":{\"ref\":11,\"tf\":0.045454545454545456},\"129\":{\"ref\":129,\"tf\":0.0017391304347826088}}},\"g\":{\"docs\":{},\"n\":{\"docs\":{\"21\":{\"ref\":21,\"tf\":0.00980392156862745},\"26\":{\"ref\":26,\"tf\":0.021739130434782608},\"36\":{\"ref\":36,\"tf\":0.017857142857142856},\"43\":{\"ref\":43,\"tf\":0.006944444444444444},\"49\":{\"ref\":49,\"tf\":0.08333333333333333},\"50\":{\"ref\":50,\"tf\":0.008928571428571428},\"55\":{\"ref\":55,\"tf\":0.02040816326530612},\"57\":{\"ref\":57,\"tf\":0.0023584905660377358},\"59\":{\"ref\":59,\"tf\":0.002785515320334262},\"65\":{\"ref\":65,\"tf\":0.025},\"126\":{\"ref\":126,\"tf\":0.011111111111111112},\"136\":{\"ref\":136,\"tf\":0.005050505050505051}}}}},\"k\":{\"docs\":{},\"t\":{\"docs\":{},\"o\":{\"docs\":{},\"p\":{\"docs\":{\"38\":{\"ref\":38,\"tf\":0.011627906976744186},\"57\":{\"ref\":57,\"tf\":0.0047169811320754715},\"60\":{\"ref\":60,\"tf\":0.01818181818181818},\"105\":{\"ref\":105,\"tf\":0.005847953216374269},\"134\":{\"ref\":134,\"tf\":0.0011507479861910242}}}}}},\"c\":{\"docs\":{},\"r\":{\"docs\":{},\"i\":{\"docs\":{},\"p\":{\"docs\":{},\"t\":{\"docs\":{\"58\":{\"ref\":58,\"tf\":0.00273224043715847},\"122\":{\"ref\":122,\"tf\":0.16666666666666666},\"123\":{\"ref\":123,\"tf\":0.0035211267605633804},\"124\":{\"ref\":124,\"tf\":0.010309278350515464},\"125\":{\"ref\":125,\"tf\":0.2}}}},\"b\":{\"docs\":{},\"e\":{\"docs\":{},\"d\":{\"docs\":{},\"]\":{\"docs\":{},\"(\":{\"docs\":{},\"h\":{\"docs\":{},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"p\":{\"docs\":{},\":\":{\"docs\":{},\"/\":{\"docs\":{},\"/\":{\"docs\":{},\"d\":{\"docs\":{},\"e\":{\"docs\":{},\"v\":{\"docs\":{},\"e\":{\"docs\":{},\"l\":{\"docs\":{},\"o\":{\"docs\":{},\"p\":{\"docs\":{},\"e\":{\"docs\":{},\"r\":{\"docs\":{},\".\":{\"docs\":{},\"a\":{\"docs\":{},\"n\":{\"docs\":{},\"d\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"i\":{\"docs\":{},\"d\":{\"docs\":{},\".\":{\"docs\":{},\"c\":{\"docs\":{},\"o\":{\"docs\":{},\"m\":{\"docs\":{},\"/\":{\"docs\":{},\"t\":{\"docs\":{},\"o\":{\"docs\":{},\"o\":{\"docs\":{},\"l\":{\"docs\":{},\"s\":{\"docs\":{},\"/\":{\"docs\":{},\"d\":{\"docs\":{},\"e\":{\"docs\":{},\"v\":{\"docs\":{},\"i\":{\"docs\":{},\"c\":{\"docs\":{},\"e\":{\"docs\":{},\".\":{\"docs\":{},\"h\":{\"docs\":{},\"t\":{\"docs\":{},\"m\":{\"docs\":{},\"l\":{\"docs\":{\"60\":{\"ref\":60,\"tf\":0.0022727272727272726}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},\"t\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"i\":{\"docs\":{\"83\":{\"ref\":83,\"tf\":0.02127659574468085},\"115\":{\"ref\":115,\"tf\":0.003246753246753247}}}},\"u\":{\"docs\":{},\"c\":{\"docs\":{},\"t\":{\"docs\":{\"105\":{\"ref\":105,\"tf\":0.005847953216374269}},\"i\":{\"docs\":{},\"v\":{\"docs\":{},\"e\":{\"docs\":{},\"b\":{\"docs\":{},\"u\":{\"docs\":{},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"o\":{\"docs\":{},\"n\":{\"docs\":{},\"c\":{\"docs\":{},\"l\":{\"docs\":{},\"i\":{\"docs\":{},\"c\":{\"docs\":{},\"k\":{\"docs\":{\"105\":{\"ref\":105,\"tf\":0.005847953216374269}}}}}}}}}}}}},\"t\":{\"docs\":{},\"e\":{\"docs\":{},\"x\":{\"docs\":{},\"t\":{\"docs\":{\"105\":{\"ref\":105,\"tf\":0.011695906432748537}}}}}}}}}}}}}},\"e\":{\"docs\":{},\"l\":{\"docs\":{},\"e\":{\"docs\":{},\"c\":{\"docs\":{},\"t\":{\"docs\":{\"95\":{\"ref\":95,\"tf\":0.009345794392523364}}}}}}}},\"t\":{\"docs\":{},\"a\":{\"docs\":{},\"i\":{\"docs\":{},\"l\":{\"docs\":{\"14\":{\"ref\":14,\"tf\":0.011494252873563218},\"54\":{\"ref\":54,\"tf\":0.001287001287001287},\"71\":{\"ref\":71,\"tf\":0.008},\"72\":{\"ref\":72,\"tf\":0.002331002331002331},\"74\":{\"ref\":74,\"tf\":0.005988023952095809},\"76\":{\"ref\":76,\"tf\":0.018867924528301886},\"77\":{\"ref\":77,\"tf\":0.018867924528301886},\"78\":{\"ref\":78,\"tf\":0.011235955056179775},\"80\":{\"ref\":80,\"tf\":0.007692307692307693},\"82\":{\"ref\":82,\"tf\":0.0078125},\"83\":{\"ref\":83,\"tf\":0.02127659574468085},\"84\":{\"ref\":84,\"tf\":0.0036363636363636364},\"88\":{\"ref\":88,\"tf\":0.009708737864077669},\"89\":{\"ref\":89,\"tf\":0.022727272727272728},\"90\":{\"ref\":90,\"tf\":0.010416666666666666},\"91\":{\"ref\":91,\"tf\":0.0196078431372549},\"92\":{\"ref\":92,\"tf\":0.02857142857142857},\"93\":{\"ref\":93,\"tf\":0.014084507042253521},\"94\":{\"ref\":94,\"tf\":0.011111111111111112},\"95\":{\"ref\":95,\"tf\":0.009345794392523364},\"96\":{\"ref\":96,\"tf\":0.03571428571428571},\"97\":{\"ref\":97,\"tf\":0.019230769230769232},\"98\":{\"ref\":98,\"tf\":0.018867924528301886},\"105\":{\"ref\":105,\"tf\":0.005847953216374269},\"108\":{\"ref\":108,\"tf\":0.028985507246376812},\"109\":{\"ref\":109,\"tf\":0.03418803418803419},\"110\":{\"ref\":110,\"tf\":0.01020408163265306},\"111\":{\"ref\":111,\"tf\":0.015037593984962405},\"112\":{\"ref\":112,\"tf\":0.041176470588235294},\"113\":{\"ref\":113,\"tf\":0.028368794326241134},\"114\":{\"ref\":114,\"tf\":0.009569377990430622},\"115\":{\"ref\":115,\"tf\":0.025974025974025976},\"116\":{\"ref\":116,\"tf\":0.022222222222222223},\"117\":{\"ref\":117,\"tf\":0.022727272727272728},\"118\":{\"ref\":118,\"tf\":0.01904761904761905},\"119\":{\"ref\":119,\"tf\":0.03543307086614173},\"120\":{\"ref\":120,\"tf\":0.031446540880503145},\"121\":{\"ref\":121,\"tf\":0.01744186046511628},\"134\":{\"ref\":134,\"tf\":0.0011507479861910242},\"136\":{\"ref\":136,\"tf\":0.005050505050505051}}}}},\"e\":{\"docs\":{},\"c\":{\"docs\":{},\"t\":{\"docs\":{\"104\":{\"ref\":104,\"tf\":0.00423728813559322},\"113\":{\"ref\":113,\"tf\":0.0070921985815602835},\"134\":{\"ref\":134,\"tf\":0.004602991944764097}}}}}},\"m\":{\"docs\":{},\"o\":{\"docs\":{\"19\":{\"ref\":19,\"tf\":0.02},\"43\":{\"ref\":43,\"tf\":0.013888888888888888},\"44\":{\"ref\":44,\"tf\":0.018518518518518517},\"45\":{\"ref\":45,\"tf\":0.00980392156862745},\"46\":{\"ref\":46,\"tf\":0.038461538461538464},\"47\":{\"ref\":47,\"tf\":0.02},\"48\":{\"ref\":48,\"tf\":0.011627906976744186},\"72\":{\"ref\":72,\"tf\":0.002331002331002331},\"126\":{\"ref\":126,\"tf\":0.022222222222222223},\"130\":{\"ref\":130,\"tf\":0.0043859649122807015},\"133\":{\"ref\":133,\"tf\":0.0033500837520938024},\"135\":{\"ref\":135,\"tf\":0.0019305019305019305},\"136\":{\"ref\":136,\"tf\":0.005050505050505051}},\"n\":{\"docs\":{},\"s\":{\"docs\":{},\"t\":{\"docs\":{},\"r\":{\"docs\":{\"47\":{\"ref\":47,\"tf\":0.01}}}}}},\"]\":{\"docs\":{},\"(\":{\"docs\":{},\"h\":{\"docs\":{},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"p\":{\"docs\":{},\":\":{\"docs\":{},\"/\":{\"docs\":{},\"/\":{\"docs\":{},\"c\":{\"docs\":{},\"o\":{\"docs\":{},\"d\":{\"docs\":{},\"e\":{\"docs\":{},\"p\":{\"docs\":{},\"e\":{\"docs\":{},\"n\":{\"docs\":{},\".\":{\"docs\":{},\"i\":{\"docs\":{},\"o\":{\"docs\":{},\"/\":{\"docs\":{},\"i\":{\"docs\":{},\"o\":{\"docs\":{},\"n\":{\"docs\":{},\"i\":{\"docs\":{},\"c\":{\"docs\":{},\"/\":{\"docs\":{},\"p\":{\"docs\":{},\"e\":{\"docs\":{},\"n\":{\"docs\":{},\"/\":{\"docs\":{},\"z\":{\"docs\":{},\"k\":{\"docs\":{},\"m\":{\"docs\":{},\"h\":{\"docs\":{},\"j\":{\"docs\":{\"136\":{\"ref\":136,\"tf\":0.005050505050505051}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},\"l\":{\"docs\":{},\"o\":{\"docs\":{},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\"a\":{\"docs\":{},\"n\":{\"docs\":{\"35\":{\"ref\":35,\"tf\":0.01818181818181818}}}}}}},\"t\":{\"docs\":{},\"a\":{\"docs\":{},\"-\":{\"7\":{\"docs\":{\"38\":{\"ref\":38,\"tf\":0.011627906976744186}}},\"docs\":{}}}},\"e\":{\"docs\":{},\"g\":{\"docs\":{\"74\":{\"ref\":74,\"tf\":0.005988023952095809},\"80\":{\"ref\":80,\"tf\":0.007692307692307693},\"82\":{\"ref\":82,\"tf\":0.0078125},\"90\":{\"ref\":90,\"tf\":0.010416666666666666},\"93\":{\"ref\":93,\"tf\":0.014084507042253521},\"94\":{\"ref\":94,\"tf\":0.011111111111111112},\"96\":{\"ref\":96,\"tf\":0.017857142857142856},\"109\":{\"ref\":109,\"tf\":0.017094017094017096},\"112\":{\"ref\":112,\"tf\":0.011764705882352941},\"115\":{\"ref\":115,\"tf\":0.012987012987012988},\"116\":{\"ref\":116,\"tf\":0.011111111111111112},\"117\":{\"ref\":117,\"tf\":0.015151515151515152},\"118\":{\"ref\":118,\"tf\":0.01904761904761905},\"124\":{\"ref\":124,\"tf\":0.05154639175257732}},\"a\":{\"docs\":{},\"t\":{\"docs\":{},\"e\":{\"docs\":{},\"-\":{\"docs\":{},\"h\":{\"docs\":{},\"a\":{\"docs\":{},\"n\":{\"docs\":{},\"d\":{\"docs\":{},\"l\":{\"docs\":{\"74\":{\"ref\":74,\"tf\":0.005988023952095809},\"80\":{\"ref\":80,\"tf\":0.007692307692307693},\"82\":{\"ref\":82,\"tf\":0.0078125},\"90\":{\"ref\":90,\"tf\":0.010416666666666666},\"93\":{\"ref\":93,\"tf\":0.014084507042253521},\"94\":{\"ref\":94,\"tf\":0.011111111111111112},\"96\":{\"ref\":96,\"tf\":0.017857142857142856},\"109\":{\"ref\":109,\"tf\":0.008547008547008548},\"112\":{\"ref\":112,\"tf\":0.0058823529411764705},\"115\":{\"ref\":115,\"tf\":0.006493506493506494},\"116\":{\"ref\":116,\"tf\":0.005555555555555556},\"117\":{\"ref\":117,\"tf\":0.007575757575757576},\"118\":{\"ref\":118,\"tf\":0.009523809523809525}}}}}}}},\"i\":{\"docs\":{},\"n\":{\"docs\":{},\"s\":{\"docs\":{},\"t\":{\"docs\":{\"109\":{\"ref\":109,\"tf\":0.008547008547008548},\"112\":{\"ref\":112,\"tf\":0.0058823529411764705},\"115\":{\"ref\":115,\"tf\":0.003246753246753247},\"116\":{\"ref\":116,\"tf\":0.005555555555555556},\"117\":{\"ref\":117,\"tf\":0.007575757575757576},\"118\":{\"ref\":118,\"tf\":0.009523809523809525}}}}}},\".\":{\"docs\":{},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\"m\":{\"docs\":{},\"e\":{\"docs\":{},\"m\":{\"docs\":{},\"b\":{\"docs\":{},\"e\":{\"docs\":{},\"r\":{\"docs\":{},\"s\":{\"docs\":{},\"c\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"l\":{\"docs\":{},\"l\":{\"docs\":{},\"p\":{\"docs\":{},\"o\":{\"docs\":{},\"s\":{\"docs\":{},\"i\":{\"docs\":{},\"t\":{\"docs\":{},\"i\":{\"docs\":{},\"o\":{\"docs\":{},\"n\":{\"docs\":{},\"(\":{\"docs\":{},\"'\":{\"docs\":{},\"m\":{\"docs\":{},\"y\":{\"docs\":{},\"-\":{\"docs\":{},\"s\":{\"docs\":{},\"c\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"l\":{\"docs\":{},\"l\":{\"docs\":{},\"-\":{\"docs\":{},\"i\":{\"docs\":{},\"d\":{\"docs\":{\"115\":{\"ref\":115,\"tf\":0.003246753246753247}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},\"s\":{\"docs\":{},\"c\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"l\":{\"docs\":{},\"l\":{\"docs\":{},\"t\":{\"docs\":{},\"o\":{\"docs\":{},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\"m\":{\"docs\":{},\"e\":{\"docs\":{},\"m\":{\"docs\":{},\"b\":{\"docs\":{},\"e\":{\"docs\":{},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\"d\":{\"docs\":{},\"p\":{\"docs\":{},\"o\":{\"docs\":{},\"s\":{\"docs\":{},\"i\":{\"docs\":{},\"t\":{\"docs\":{\"115\":{\"ref\":115,\"tf\":0.003246753246753247}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},\"t\":{\"docs\":{\"75\":{\"ref\":75,\"tf\":0.08333333333333333},\"80\":{\"ref\":80,\"tf\":0.015384615384615385},\"105\":{\"ref\":105,\"tf\":0.005847953216374269},\"109\":{\"ref\":109,\"tf\":0.017094017094017096},\"123\":{\"ref\":123,\"tf\":0.0035211267605633804}}}},\"a\":{\"docs\":{},\"i\":{\"docs\":{\"104\":{\"ref\":104,\"tf\":0.029661016949152543},\"106\":{\"ref\":106,\"tf\":0.013333333333333334},\"110\":{\"ref\":110,\"tf\":0.030612244897959183},\"134\":{\"ref\":134,\"tf\":2.0253164556962027}}}},\"i\":{\"docs\":{},\"c\":{\"docs\":{},\"i\":{\"docs\":{\"114\":{\"ref\":114,\"tf\":0.001594896331738437}}}}}},\"p\":{\"docs\":{},\"e\":{\"docs\":{},\"n\":{\"docs\":{},\"d\":{\"docs\":{\"55\":{\"ref\":55,\"tf\":0.02040816326530612},\"56\":{\"ref\":56,\"tf\":3.33652312599681},\"82\":{\"ref\":82,\"tf\":0.0078125},\"127\":{\"ref\":127,\"tf\":0.006622516556291391},\"133\":{\"ref\":133,\"tf\":0.0016750418760469012},\"134\":{\"ref\":134,\"tf\":0.0011507479861910242}}}}},\"l\":{\"docs\":{},\"o\":{\"docs\":{},\"i\":{\"docs\":{\"55\":{\"ref\":55,\"tf\":0.02040816326530612},\"56\":{\"ref\":56,\"tf\":0.001594896331738437},\"58\":{\"ref\":58,\"tf\":0.00546448087431694},\"127\":{\"ref\":127,\"tf\":0.006622516556291391}}}}}},\"b\":{\"docs\":{},\"u\":{\"docs\":{},\"g\":{\"docs\":{\"58\":{\"ref\":58,\"tf\":0.00273224043715847},\"60\":{\"ref\":60,\"tf\":0.006818181818181818}}}}},\"c\":{\"docs\":{},\"l\":{\"docs\":{},\"a\":{\"docs\":{},\"r\":{\"docs\":{\"83\":{\"ref\":83,\"tf\":0.02127659574468085}}}}},\"i\":{\"docs\":{},\"d\":{\"docs\":{\"113\":{\"ref\":113,\"tf\":0.0070921985815602835},\"134\":{\"ref\":134,\"tf\":0.0011507479861910242},\"135\":{\"ref\":135,\"tf\":0.0019305019305019305}}},\"m\":{\"docs\":{\"133\":{\"ref\":133,\"tf\":0.0016750418760469012}}}}},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\"g\":{\"docs\":{},\"i\":{\"docs\":{},\"s\":{\"docs\":{},\"t\":{\"docs\":{\"113\":{\"ref\":113,\"tf\":0.0070921985815602835}}}}}}}}},\"o\":{\"docs\":{\"63\":{\"ref\":63,\"tf\":0.024390243902439025},\"106\":{\"ref\":106,\"tf\":0.013333333333333334}},\"c\":{\"docs\":{\"2\":{\"ref\":2,\"tf\":0.025},\"14\":{\"ref\":14,\"tf\":0.022988505747126436},\"39\":{\"ref\":39,\"tf\":0.012658227848101266},\"51\":{\"ref\":51,\"tf\":0.01694915254237288},\"60\":{\"ref\":60,\"tf\":0.0022727272727272726},\"71\":{\"ref\":71,\"tf\":0.008},\"72\":{\"ref\":72,\"tf\":0.002331002331002331},\"73\":{\"ref\":73,\"tf\":0.05},\"74\":{\"ref\":74,\"tf\":0.005988023952095809},\"75\":{\"ref\":75,\"tf\":0.08333333333333333},\"76\":{\"ref\":76,\"tf\":0.018867924528301886},\"77\":{\"ref\":77,\"tf\":0.018867924528301886},\"78\":{\"ref\":78,\"tf\":0.011235955056179775},\"79\":{\"ref\":79,\"tf\":0.125},\"80\":{\"ref\":80,\"tf\":0.007692307692307693},\"81\":{\"ref\":81,\"tf\":0.015151515151515152},\"82\":{\"ref\":82,\"tf\":0.0078125},\"83\":{\"ref\":83,\"tf\":0.02127659574468085},\"84\":{\"ref\":84,\"tf\":0.0036363636363636364},\"85\":{\"ref\":85,\"tf\":0.09090909090909091},\"86\":{\"ref\":86,\"tf\":0.06666666666666667},\"87\":{\"ref\":87,\"tf\":0.041666666666666664},\"88\":{\"ref\":88,\"tf\":0.009708737864077669},\"89\":{\"ref\":89,\"tf\":0.022727272727272728},\"90\":{\"ref\":90,\"tf\":0.010416666666666666},\"91\":{\"ref\":91,\"tf\":0.0196078431372549},\"92\":{\"ref\":92,\"tf\":0.02857142857142857},\"93\":{\"ref\":93,\"tf\":0.014084507042253521},\"94\":{\"ref\":94,\"tf\":0.011111111111111112},\"95\":{\"ref\":95,\"tf\":0.009345794392523364},\"96\":{\"ref\":96,\"tf\":0.017857142857142856},\"97\":{\"ref\":97,\"tf\":0.019230769230769232},\"98\":{\"ref\":98,\"tf\":0.018867924528301886},\"99\":{\"ref\":99,\"tf\":0.02127659574468085},\"100\":{\"ref\":100,\"tf\":0.041666666666666664},\"101\":{\"ref\":101,\"tf\":0.043478260869565216},\"102\":{\"ref\":102,\"tf\":0.020833333333333332},\"103\":{\"ref\":103,\"tf\":0.006493506493506494},\"104\":{\"ref\":104,\"tf\":0.00423728813559322},\"105\":{\"ref\":105,\"tf\":0.005847953216374269},\"106\":{\"ref\":106,\"tf\":0.013333333333333334},\"107\":{\"ref\":107,\"tf\":0.012658227848101266},\"108\":{\"ref\":108,\"tf\":0.014492753623188406},\"109\":{\"ref\":109,\"tf\":0.008547008547008548},\"110\":{\"ref\":110,\"tf\":0.01020408163265306},\"111\":{\"ref\":111,\"tf\":0.007518796992481203},\"112\":{\"ref\":112,\"tf\":0.0058823529411764705},\"113\":{\"ref\":113,\"tf\":0.0070921985815602835},\"114\":{\"ref\":114,\"tf\":0.001594896331738437},\"115\":{\"ref\":115,\"tf\":0.003246753246753247},\"116\":{\"ref\":116,\"tf\":0.005555555555555556},\"117\":{\"ref\":117,\"tf\":0.007575757575757576},\"118\":{\"ref\":118,\"tf\":0.009523809523809525},\"119\":{\"ref\":119,\"tf\":0.003937007874015748},\"120\":{\"ref\":120,\"tf\":0.006289308176100629},\"121\":{\"ref\":121,\"tf\":0.005813953488372093},\"126\":{\"ref\":126,\"tf\":1.0222222222222221},\"127\":{\"ref\":127,\"tf\":0.006622516556291391},\"136\":{\"ref\":136,\"tf\":0.005050505050505051}},\"s\":{\"docs\":{},\"/\":{\"docs\":{},\"c\":{\"docs\":{},\"o\":{\"docs\":{},\"m\":{\"docs\":{},\"p\":{\"docs\":{},\"o\":{\"docs\":{},\"n\":{\"docs\":{},\"e\":{\"docs\":{},\"n\":{\"docs\":{},\"t\":{\"docs\":{},\"s\":{\"docs\":{},\"/\":{\"docs\":{},\"#\":{\"docs\":{},\"h\":{\"docs\":{},\"e\":{\"docs\":{},\"a\":{\"docs\":{},\"d\":{\"docs\":{\"0\":{\"ref\":0,\"tf\":1}}}}}},\"s\":{\"docs\":{},\"u\":{\"docs\":{},\"b\":{\"docs\":{},\"h\":{\"docs\":{},\"e\":{\"docs\":{},\"a\":{\"docs\":{},\"d\":{\"docs\":{\"1\":{\"ref\":1,\"tf\":1}}}}}}}},\"e\":{\"docs\":{},\"l\":{\"docs\":{},\"e\":{\"docs\":{},\"c\":{\"docs\":{},\"t\":{\"docs\":{\"38\":{\"ref\":38,\"tf\":1}}}}}}}},\"c\":{\"docs\":{},\"o\":{\"docs\":{},\"n\":{\"docs\":{},\"t\":{\"docs\":{\"2\":{\"ref\":2,\"tf\":1}}}},\"l\":{\"docs\":{},\"o\":{\"docs\":{},\"r\":{\"docs\":{\"50\":{\"ref\":50,\"tf\":1}}}}}},\"l\":{\"docs\":{},\"e\":{\"docs\":{},\"a\":{\"docs\":{},\"r\":{\"docs\":{},\"-\":{\"docs\":{},\"b\":{\"docs\":{},\"u\":{\"docs\":{},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"o\":{\"docs\":{},\"n\":{\"docs\":{\"9\":{\"ref\":9,\"tf\":1}},\"s\":{\"docs\":{},\"-\":{\"docs\":{},\"h\":{\"docs\":{},\"e\":{\"docs\":{},\"a\":{\"docs\":{},\"d\":{\"docs\":{\"12\":{\"ref\":12,\"tf\":1}}}}}}}}}}}}}}}}}}},\"a\":{\"docs\":{},\"r\":{\"docs\":{},\"d\":{\"docs\":{\"21\":{\"ref\":21,\"tf\":1}},\"-\":{\"docs\":{},\"h\":{\"docs\":{},\"e\":{\"docs\":{},\"a\":{\"docs\":{},\"d\":{\"docs\":{},\"e\":{\"docs\":{},\"r\":{\"docs\":{},\"s\":{\"docs\":{},\"-\":{\"docs\":{},\"f\":{\"docs\":{},\"o\":{\"docs\":{},\"o\":{\"docs\":{},\"t\":{\"docs\":{\"22\":{\"ref\":22,\"tf\":1}}}}}}}}}}}}}},\"l\":{\"docs\":{},\"i\":{\"docs\":{},\"s\":{\"docs\":{},\"t\":{\"docs\":{\"23\":{\"ref\":23,\"tf\":1}}}}}},\"i\":{\"docs\":{},\"m\":{\"docs\":{},\"a\":{\"docs\":{},\"g\":{\"docs\":{\"24\":{\"ref\":24,\"tf\":1}}}}}},\"s\":{\"docs\":{},\"h\":{\"docs\":{},\"o\":{\"docs\":{},\"w\":{\"docs\":{},\"c\":{\"docs\":{},\"a\":{\"docs\":{},\"s\":{\"docs\":{\"25\":{\"ref\":25,\"tf\":1}}}}}}}}}}}}},\"h\":{\"docs\":{},\"e\":{\"docs\":{},\"c\":{\"docs\":{},\"k\":{\"docs\":{},\"b\":{\"docs\":{},\"o\":{\"docs\":{},\"x\":{\"docs\":{\"35\":{\"ref\":35,\"tf\":1}}}}}}}}}},\"f\":{\"docs\":{},\"o\":{\"docs\":{},\"o\":{\"docs\":{},\"t\":{\"docs\":{\"3\":{\"ref\":3,\"tf\":1}}}},\"r\":{\"docs\":{},\"m\":{\"docs\":{\"26\":{\"ref\":26,\"tf\":1}},\"s\":{\"docs\":{},\"-\":{\"docs\":{},\"p\":{\"docs\":{},\"l\":{\"docs\":{},\"a\":{\"docs\":{},\"c\":{\"docs\":{},\"e\":{\"docs\":{},\"h\":{\"docs\":{},\"o\":{\"docs\":{},\"l\":{\"docs\":{},\"d\":{\"docs\":{},\"e\":{\"docs\":{},\"r\":{\"docs\":{},\"-\":{\"docs\":{},\"l\":{\"docs\":{},\"a\":{\"docs\":{},\"b\":{\"docs\":{},\"e\":{\"docs\":{},\"l\":{\"docs\":{\"27\":{\"ref\":27,\"tf\":1}}}}}}}}}}}}}}}}}}},\"i\":{\"docs\":{},\"n\":{\"docs\":{},\"l\":{\"docs\":{},\"i\":{\"docs\":{},\"n\":{\"docs\":{},\"e\":{\"docs\":{},\"-\":{\"docs\":{},\"l\":{\"docs\":{},\"a\":{\"docs\":{},\"b\":{\"docs\":{},\"e\":{\"docs\":{},\"l\":{\"docs\":{\"28\":{\"ref\":28,\"tf\":1}}}}}}}}}}}}}},\"s\":{\"docs\":{},\"t\":{\"docs\":{},\"a\":{\"docs\":{},\"c\":{\"docs\":{},\"k\":{\"docs\":{},\"e\":{\"docs\":{},\"d\":{\"docs\":{},\"-\":{\"docs\":{},\"l\":{\"docs\":{},\"a\":{\"docs\":{},\"b\":{\"docs\":{},\"e\":{\"docs\":{},\"l\":{\"docs\":{\"29\":{\"ref\":29,\"tf\":1}}}}}}}}}}}}}}}}}}}},\"u\":{\"docs\":{},\"l\":{\"docs\":{},\"l\":{\"docs\":{},\"-\":{\"docs\":{},\"b\":{\"docs\":{},\"u\":{\"docs\":{},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"o\":{\"docs\":{},\"n\":{\"docs\":{\"6\":{\"ref\":6,\"tf\":1}}}}}}}}}}}}},\"b\":{\"docs\":{},\"u\":{\"docs\":{},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"o\":{\"docs\":{},\"n\":{\"docs\":{\"4\":{\"ref\":4,\"tf\":1}},\"-\":{\"docs\":{},\"s\":{\"docs\":{\"7\":{\"ref\":7,\"tf\":1}}},\"b\":{\"docs\":{},\"a\":{\"docs\":{},\"r\":{\"docs\":{\"13\":{\"ref\":13,\"tf\":1}}}}}},\"s\":{\"docs\":{},\"-\":{\"docs\":{},\"h\":{\"docs\":{},\"e\":{\"docs\":{},\"a\":{\"docs\":{},\"d\":{\"docs\":{},\"e\":{\"docs\":{},\"r\":{\"docs\":{},\"s\":{\"docs\":{},\"-\":{\"docs\":{},\"f\":{\"docs\":{},\"o\":{\"docs\":{},\"o\":{\"docs\":{},\"t\":{\"docs\":{\"11\":{\"ref\":11,\"tf\":1}}}}}}}}}}}}}}}}}}}}},\"l\":{\"docs\":{},\"o\":{\"docs\":{},\"c\":{\"docs\":{},\"k\":{\"docs\":{},\"-\":{\"docs\":{},\"b\":{\"docs\":{},\"u\":{\"docs\":{},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"o\":{\"docs\":{},\"n\":{\"docs\":{\"5\":{\"ref\":5,\"tf\":1}}}}}}}}}}}}},\"a\":{\"docs\":{},\"r\":{\"docs\":{},\"-\":{\"docs\":{},\"i\":{\"docs\":{},\"n\":{\"docs\":{},\"p\":{\"docs\":{},\"u\":{\"docs\":{},\"t\":{\"docs\":{\"33\":{\"ref\":33,\"tf\":1}}}}}}}}}}},\"o\":{\"docs\":{},\"u\":{\"docs\":{},\"t\":{\"docs\":{},\"l\":{\"docs\":{},\"i\":{\"docs\":{},\"n\":{\"docs\":{},\"e\":{\"docs\":{},\"d\":{\"docs\":{},\"-\":{\"docs\":{},\"b\":{\"docs\":{},\"u\":{\"docs\":{},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"o\":{\"docs\":{},\"n\":{\"docs\":{\"8\":{\"ref\":8,\"tf\":1}}}}}}}}}}}}}}}}},\"i\":{\"docs\":{},\"c\":{\"docs\":{},\"o\":{\"docs\":{},\"n\":{\"docs\":{\"51\":{\"ref\":51,\"tf\":1}},\"-\":{\"docs\":{},\"b\":{\"docs\":{},\"u\":{\"docs\":{},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"o\":{\"docs\":{},\"n\":{\"docs\":{\"10\":{\"ref\":10,\"tf\":1}}}}}}}},\"o\":{\"docs\":{},\"n\":{\"docs\":{},\"l\":{\"docs\":{},\"y\":{\"docs\":{},\"-\":{\"docs\":{},\"t\":{\"docs\":{},\"a\":{\"docs\":{},\"b\":{\"docs\":{\"40\":{\"ref\":40,\"tf\":1}}}}}}}}}},\"t\":{\"docs\":{},\"o\":{\"docs\":{},\"p\":{\"docs\":{},\"-\":{\"docs\":{},\"t\":{\"docs\":{},\"a\":{\"docs\":{},\"b\":{\"docs\":{\"41\":{\"ref\":41,\"tf\":1}}}}}}}}},\"l\":{\"docs\":{},\"e\":{\"docs\":{},\"f\":{\"docs\":{},\"t\":{\"docs\":{},\"-\":{\"docs\":{},\"t\":{\"docs\":{},\"a\":{\"docs\":{},\"b\":{\"docs\":{\"42\":{\"ref\":42,\"tf\":1}}}}}}}}}}}}}},\"t\":{\"docs\":{},\"e\":{\"docs\":{},\"m\":{\"docs\":{},\"-\":{\"docs\":{},\"d\":{\"docs\":{},\"i\":{\"docs\":{},\"v\":{\"docs\":{},\"i\":{\"docs\":{},\"d\":{\"docs\":{\"15\":{\"ref\":15,\"tf\":1}}}}}}},\"i\":{\"docs\":{},\"c\":{\"docs\":{},\"o\":{\"docs\":{},\"n\":{\"docs\":{\"16\":{\"ref\":16,\"tf\":1}}}}},\"n\":{\"docs\":{},\"p\":{\"docs\":{},\"u\":{\"docs\":{},\"t\":{\"docs\":{},\"-\":{\"docs\":{},\"i\":{\"docs\":{},\"n\":{\"docs\":{},\"s\":{\"docs\":{},\"e\":{\"docs\":{},\"t\":{\"docs\":{\"31\":{\"ref\":31,\"tf\":1}}}}}}}}}}}}},\"b\":{\"docs\":{},\"u\":{\"docs\":{},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"o\":{\"docs\":{},\"n\":{\"docs\":{\"17\":{\"ref\":17,\"tf\":1}}}}}}}},\"a\":{\"docs\":{},\"v\":{\"docs\":{},\"a\":{\"docs\":{},\"t\":{\"docs\":{},\"a\":{\"docs\":{},\"r\":{\"docs\":{\"18\":{\"ref\":18,\"tf\":1}}}}}}}},\"t\":{\"docs\":{},\"h\":{\"docs\":{},\"u\":{\"docs\":{},\"m\":{\"docs\":{},\"b\":{\"docs\":{},\"n\":{\"docs\":{},\"a\":{\"docs\":{},\"i\":{\"docs\":{},\"l\":{\"docs\":{\"19\":{\"ref\":19,\"tf\":1}}}}}}}}}}}}}}},\"n\":{\"docs\":{},\"s\":{\"docs\":{},\"e\":{\"docs\":{},\"t\":{\"docs\":{},\"-\":{\"docs\":{},\"f\":{\"docs\":{},\"o\":{\"docs\":{},\"r\":{\"docs\":{},\"m\":{\"docs\":{\"30\":{\"ref\":30,\"tf\":1}}}}}}}}}},\"p\":{\"docs\":{},\"u\":{\"docs\":{},\"t\":{\"docs\":{},\"-\":{\"docs\":{},\"i\":{\"docs\":{},\"c\":{\"docs\":{},\"o\":{\"docs\":{},\"n\":{\"docs\":{\"32\":{\"ref\":32,\"tf\":1}}}}}}}}}}}},\"l\":{\"docs\":{},\"i\":{\"docs\":{},\"s\":{\"docs\":{},\"t\":{\"docs\":{\"14\":{\"ref\":14,\"tf\":1}},\"-\":{\"docs\":{},\"i\":{\"docs\":{},\"n\":{\"docs\":{},\"s\":{\"docs\":{},\"e\":{\"docs\":{},\"t\":{\"docs\":{\"20\":{\"ref\":20,\"tf\":1}}}}}}}}}}}},\"t\":{\"docs\":{},\"o\":{\"docs\":{},\"g\":{\"docs\":{},\"g\":{\"docs\":{},\"l\":{\"docs\":{\"34\":{\"ref\":34,\"tf\":1}}}}}},\"a\":{\"docs\":{},\"b\":{\"docs\":{\"39\":{\"ref\":39,\"tf\":1}}}}},\"r\":{\"docs\":{},\"a\":{\"docs\":{},\"d\":{\"docs\":{},\"i\":{\"docs\":{},\"o\":{\"docs\":{},\"-\":{\"docs\":{},\"b\":{\"docs\":{},\"u\":{\"docs\":{},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"o\":{\"docs\":{},\"n\":{\"docs\":{\"36\":{\"ref\":36,\"tf\":1}}}}}}}}}}}},\"n\":{\"docs\":{},\"g\":{\"docs\":{\"37\":{\"ref\":37,\"tf\":1}}}}}},\"g\":{\"docs\":{},\"r\":{\"docs\":{},\"i\":{\"docs\":{},\"d\":{\"docs\":{\"43\":{\"ref\":43,\"tf\":1}},\"-\":{\"docs\":{},\"e\":{\"docs\":{},\"v\":{\"docs\":{},\"e\":{\"docs\":{},\"n\":{\"docs\":{\"44\":{\"ref\":44,\"tf\":1}}}}},\"x\":{\"docs\":{},\"p\":{\"docs\":{},\"l\":{\"docs\":{},\"i\":{\"docs\":{},\"c\":{\"docs\":{},\"i\":{\"docs\":{},\"t\":{\"docs\":{\"45\":{\"ref\":45,\"tf\":1}}}}}}}}}},\"o\":{\"docs\":{},\"f\":{\"docs\":{},\"f\":{\"docs\":{},\"s\":{\"docs\":{},\"e\":{\"docs\":{},\"t\":{\"docs\":{\"46\":{\"ref\":46,\"tf\":1}}}}}}}},\"v\":{\"docs\":{},\"e\":{\"docs\":{},\"r\":{\"docs\":{},\"t\":{\"docs\":{},\"i\":{\"docs\":{},\"c\":{\"docs\":{},\"a\":{\"docs\":{},\"l\":{\"docs\":{},\"l\":{\"docs\":{},\"y\":{\"docs\":{},\"-\":{\"docs\":{},\"a\":{\"docs\":{},\"l\":{\"docs\":{},\"i\":{\"docs\":{},\"g\":{\"docs\":{},\"n\":{\"docs\":{\"47\":{\"ref\":47,\"tf\":1}}}}}}}}}}}}}}}}}},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\"s\":{\"docs\":{},\"p\":{\"docs\":{},\"o\":{\"docs\":{},\"n\":{\"docs\":{},\"s\":{\"docs\":{\"48\":{\"ref\":48,\"tf\":1}}}}}}}}}}}}}},\"u\":{\"docs\":{},\"t\":{\"docs\":{},\"i\":{\"docs\":{},\"l\":{\"docs\":{\"49\":{\"ref\":49,\"tf\":1}}}}}},\"p\":{\"docs\":{},\"a\":{\"docs\":{},\"d\":{\"docs\":{\"52\":{\"ref\":52,\"tf\":1}}}}},\"a\":{\"docs\":{},\"n\":{\"docs\":{},\"i\":{\"docs\":{},\"m\":{\"docs\":{\"53\":{\"ref\":53,\"tf\":1}}}}}}}}}}}}}}}}}},\"g\":{\"docs\":{},\"u\":{\"docs\":{},\"i\":{\"docs\":{},\"d\":{\"docs\":{\"55\":{\"ref\":55,\"tf\":1}},\"e\":{\"docs\":{},\"/\":{\"docs\":{},\"b\":{\"docs\":{},\"u\":{\"docs\":{},\"i\":{\"docs\":{},\"l\":{\"docs\":{},\"d\":{\"docs\":{},\"i\":{\"docs\":{},\"n\":{\"docs\":{},\"g\":{\"docs\":{},\".\":{\"docs\":{},\"h\":{\"docs\":{},\"t\":{\"docs\":{},\"m\":{\"docs\":{},\"l\":{\"docs\":{\"54\":{\"ref\":54,\"tf\":1}}}}}}}}}}}}}}},\"i\":{\"docs\":{},\"n\":{\"docs\":{},\"s\":{\"docs\":{},\"t\":{\"docs\":{},\"a\":{\"docs\":{},\"l\":{\"docs\":{},\"l\":{\"docs\":{},\"a\":{\"docs\":{},\"t\":{\"docs\":{},\"i\":{\"docs\":{},\"o\":{\"docs\":{},\"n\":{\"docs\":{},\".\":{\"docs\":{},\"h\":{\"docs\":{},\"t\":{\"docs\":{},\"m\":{\"docs\":{},\"l\":{\"docs\":{\"56\":{\"ref\":56,\"tf\":1}}}}}}}}}}}}}}}}}}},\"p\":{\"docs\":{},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\"f\":{\"docs\":{},\"a\":{\"docs\":{},\"c\":{\"docs\":{},\"e\":{\"docs\":{},\".\":{\"docs\":{},\"h\":{\"docs\":{},\"t\":{\"docs\":{},\"m\":{\"docs\":{},\"l\":{\"docs\":{\"57\":{\"ref\":57,\"tf\":1}}}}}}}}}}}}},\"u\":{\"docs\":{},\"b\":{\"docs\":{},\"l\":{\"docs\":{},\"i\":{\"docs\":{},\"s\":{\"docs\":{},\"h\":{\"docs\":{},\"i\":{\"docs\":{},\"n\":{\"docs\":{},\"g\":{\"docs\":{},\".\":{\"docs\":{},\"h\":{\"docs\":{},\"t\":{\"docs\":{},\"m\":{\"docs\":{},\"l\":{\"docs\":{\"58\":{\"ref\":58,\"tf\":1}}}}}}}}}}}}}}}}},\"s\":{\"docs\":{},\"t\":{\"docs\":{},\"a\":{\"docs\":{},\"r\":{\"docs\":{},\"t\":{\"docs\":{},\"i\":{\"docs\":{},\"n\":{\"docs\":{},\"g\":{\"docs\":{},\".\":{\"docs\":{},\"h\":{\"docs\":{},\"t\":{\"docs\":{},\"m\":{\"docs\":{},\"l\":{\"docs\":{\"59\":{\"ref\":59,\"tf\":1}}}}}}}}}}}}}}},\"t\":{\"docs\":{},\"e\":{\"docs\":{},\"s\":{\"docs\":{},\"t\":{\"docs\":{},\"i\":{\"docs\":{},\"n\":{\"docs\":{},\"g\":{\"docs\":{},\".\":{\"docs\":{},\"h\":{\"docs\":{},\"t\":{\"docs\":{},\"m\":{\"docs\":{},\"l\":{\"docs\":{\"60\":{\"ref\":60,\"tf\":1}}}}}}}}}}}}}}}}}}}},\"o\":{\"docs\":{},\"v\":{\"docs\":{},\"e\":{\"docs\":{},\"r\":{\"docs\":{},\"v\":{\"docs\":{},\"i\":{\"docs\":{},\"e\":{\"docs\":{},\"w\":{\"docs\":{},\"/\":{\"docs\":{},\"#\":{\"docs\":{},\"o\":{\"docs\":{},\"v\":{\"docs\":{},\"e\":{\"docs\":{},\"r\":{\"docs\":{},\"v\":{\"docs\":{},\"i\":{\"docs\":{},\"e\":{\"docs\":{},\"w\":{\"docs\":{\"61\":{\"ref\":61,\"tf\":1}}}}}}}}}},\"d\":{\"docs\":{},\"o\":{\"docs\":{},\"w\":{\"docs\":{},\"n\":{\"docs\":{},\"l\":{\"docs\":{},\"o\":{\"docs\":{},\"a\":{\"docs\":{},\"d\":{\"docs\":{\"62\":{\"ref\":62,\"tf\":1}}}}}}}}}},\"s\":{\"docs\":{},\"t\":{\"docs\":{},\"a\":{\"docs\":{},\"r\":{\"docs\":{},\"t\":{\"docs\":{\"63\":{\"ref\":63,\"tf\":1}}}}}}},\"w\":{\"docs\":{},\"h\":{\"docs\":{},\"a\":{\"docs\":{},\"t\":{\"docs\":{},\"s\":{\"docs\":{},\"-\":{\"docs\":{},\"i\":{\"docs\":{},\"n\":{\"docs\":{},\"c\":{\"docs\":{},\"l\":{\"docs\":{},\"u\":{\"docs\":{},\"d\":{\"docs\":{\"64\":{\"ref\":64,\"tf\":1}}}}}}}}}}}}}},\"c\":{\"docs\":{},\"s\":{\"docs\":{},\"s\":{\"docs\":{},\"-\":{\"docs\":{},\"s\":{\"docs\":{},\"a\":{\"docs\":{},\"s\":{\"docs\":{},\"s\":{\"docs\":{\"65\":{\"ref\":65,\"tf\":1}}}}}}}}},\"o\":{\"docs\":{},\"n\":{\"docs\":{},\"t\":{\"docs\":{},\"r\":{\"docs\":{},\"i\":{\"docs\":{},\"b\":{\"docs\":{},\"u\":{\"docs\":{},\"t\":{\"docs\":{\"69\":{\"ref\":69,\"tf\":1}}}}}}}}}}},\"p\":{\"docs\":{},\"h\":{\"docs\":{},\"o\":{\"docs\":{},\"n\":{\"docs\":{},\"e\":{\"docs\":{},\"g\":{\"docs\":{},\"a\":{\"docs\":{},\"p\":{\"docs\":{\"66\":{\"ref\":66,\"tf\":1}}}}}}}}}},\"b\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"w\":{\"docs\":{},\"s\":{\"docs\":{},\"e\":{\"docs\":{},\"r\":{\"docs\":{},\"-\":{\"docs\":{},\"s\":{\"docs\":{},\"u\":{\"docs\":{},\"p\":{\"docs\":{},\"p\":{\"docs\":{},\"o\":{\"docs\":{},\"r\":{\"docs\":{},\"t\":{\"docs\":{\"67\":{\"ref\":67,\"tf\":1}}}}}}}}}}}}}}}}},\"l\":{\"docs\":{},\"i\":{\"docs\":{},\"c\":{\"docs\":{},\"e\":{\"docs\":{},\"n\":{\"docs\":{},\"s\":{\"docs\":{\"68\":{\"ref\":68,\"tf\":1}}}}}}}},\"a\":{\"docs\":{},\"b\":{\"docs\":{},\"o\":{\"docs\":{},\"u\":{\"docs\":{},\"t\":{\"docs\":{\"70\":{\"ref\":70,\"tf\":1}}}}}}}}}}}}}}}}},\"a\":{\"docs\":{},\"p\":{\"docs\":{},\"i\":{\"docs\":{},\"/\":{\"docs\":{},\"c\":{\"docs\":{},\"o\":{\"docs\":{},\"n\":{\"docs\":{},\"t\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"l\":{\"docs\":{},\"l\":{\"docs\":{},\"e\":{\"docs\":{},\"r\":{\"docs\":{},\"/\":{\"docs\":{},\"i\":{\"docs\":{},\"o\":{\"docs\":{},\"n\":{\"docs\":{},\"i\":{\"docs\":{},\"c\":{\"docs\":{},\"m\":{\"docs\":{},\"o\":{\"docs\":{},\"d\":{\"docs\":{\"71\":{\"ref\":71,\"tf\":1}}}}}}}}}}}}}}}}}}}}},\"d\":{\"docs\":{},\"i\":{\"docs\":{},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\"c\":{\"docs\":{},\"t\":{\"docs\":{},\"i\":{\"docs\":{},\"v\":{\"docs\":{},\"e\":{\"docs\":{},\"/\":{\"docs\":{},\"c\":{\"docs\":{},\"o\":{\"docs\":{},\"l\":{\"docs\":{},\"l\":{\"docs\":{},\"e\":{\"docs\":{},\"c\":{\"docs\":{},\"t\":{\"docs\":{},\"i\":{\"docs\":{},\"o\":{\"docs\":{},\"n\":{\"docs\":{},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\"p\":{\"docs\":{},\"e\":{\"docs\":{},\"a\":{\"docs\":{},\"t\":{\"docs\":{\"72\":{\"ref\":72,\"tf\":1}}}}}}}}}}}}}}}}}},\"i\":{\"docs\":{},\"o\":{\"docs\":{},\"n\":{\"docs\":{},\"c\":{\"docs\":{},\"h\":{\"docs\":{},\"e\":{\"docs\":{},\"c\":{\"docs\":{},\"k\":{\"docs\":{},\"b\":{\"docs\":{},\"o\":{\"docs\":{},\"x\":{\"docs\":{\"73\":{\"ref\":73,\"tf\":1}}}}}}}}},\"o\":{\"docs\":{},\"n\":{\"docs\":{},\"t\":{\"docs\":{\"74\":{\"ref\":74,\"tf\":1}}}}}},\"d\":{\"docs\":{},\"e\":{\"docs\":{},\"l\":{\"docs\":{},\"e\":{\"docs\":{},\"t\":{\"docs\":{},\"e\":{\"docs\":{},\"b\":{\"docs\":{},\"u\":{\"docs\":{},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"o\":{\"docs\":{},\"n\":{\"docs\":{\"75\":{\"ref\":75,\"tf\":1}}}}}}}}}}}}}},\"f\":{\"docs\":{},\"o\":{\"docs\":{},\"o\":{\"docs\":{},\"t\":{\"docs\":{},\"e\":{\"docs\":{},\"r\":{\"docs\":{},\"b\":{\"docs\":{},\"a\":{\"docs\":{},\"r\":{\"docs\":{\"76\":{\"ref\":76,\"tf\":1}}}}}}}}}}},\"h\":{\"docs\":{},\"e\":{\"docs\":{},\"a\":{\"docs\":{},\"d\":{\"docs\":{},\"e\":{\"docs\":{},\"r\":{\"docs\":{},\"b\":{\"docs\":{},\"a\":{\"docs\":{},\"r\":{\"docs\":{\"77\":{\"ref\":77,\"tf\":1}}}}}}}}}}},\"i\":{\"docs\":{},\"n\":{\"docs\":{},\"f\":{\"docs\":{},\"i\":{\"docs\":{},\"n\":{\"docs\":{},\"i\":{\"docs\":{},\"t\":{\"docs\":{},\"e\":{\"docs\":{},\"s\":{\"docs\":{},\"c\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"l\":{\"docs\":{\"78\":{\"ref\":78,\"tf\":1}}}}}}}}}}}}}},\"t\":{\"docs\":{},\"e\":{\"docs\":{},\"m\":{\"docs\":{\"79\":{\"ref\":79,\"tf\":1}}}}}},\"l\":{\"docs\":{},\"i\":{\"docs\":{},\"s\":{\"docs\":{},\"t\":{\"docs\":{\"80\":{\"ref\":80,\"tf\":1}}}}}},\"n\":{\"docs\":{},\"a\":{\"docs\":{},\"v\":{\"docs\":{},\"b\":{\"docs\":{},\"a\":{\"docs\":{},\"c\":{\"docs\":{},\"k\":{\"docs\":{},\"b\":{\"docs\":{},\"u\":{\"docs\":{},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"o\":{\"docs\":{},\"n\":{\"docs\":{\"81\":{\"ref\":81,\"tf\":1}}}}}}}}}},\"r\":{\"docs\":{\"82\":{\"ref\":82,\"tf\":1}}}},\"u\":{\"docs\":{},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"o\":{\"docs\":{},\"n\":{\"docs\":{\"83\":{\"ref\":83,\"tf\":1}}}}}}}},\"v\":{\"docs\":{},\"i\":{\"docs\":{},\"e\":{\"docs\":{},\"w\":{\"docs\":{\"84\":{\"ref\":84,\"tf\":1}}}}}}}}},\"o\":{\"docs\":{},\"p\":{\"docs\":{},\"t\":{\"docs\":{},\"i\":{\"docs\":{},\"o\":{\"docs\":{},\"n\":{\"docs\":{},\"b\":{\"docs\":{},\"u\":{\"docs\":{},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"o\":{\"docs\":{},\"n\":{\"docs\":{\"85\":{\"ref\":85,\"tf\":1}}}}}}}}}}}}}},\"p\":{\"docs\":{},\"a\":{\"docs\":{},\"n\":{\"docs\":{\"86\":{\"ref\":86,\"tf\":1}}}}},\"r\":{\"docs\":{},\"a\":{\"docs\":{},\"d\":{\"docs\":{},\"i\":{\"docs\":{},\"o\":{\"docs\":{\"87\":{\"ref\":87,\"tf\":1}}}}}},\"e\":{\"docs\":{},\"f\":{\"docs\":{},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\"s\":{\"docs\":{},\"h\":{\"docs\":{\"88\":{\"ref\":88,\"tf\":1}}}}}}},\"o\":{\"docs\":{},\"r\":{\"docs\":{},\"d\":{\"docs\":{},\"e\":{\"docs\":{},\"r\":{\"docs\":{},\"b\":{\"docs\":{},\"u\":{\"docs\":{},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"o\":{\"docs\":{},\"n\":{\"docs\":{\"89\":{\"ref\":89,\"tf\":1}}}}}}}}}}}}}}},\"s\":{\"docs\":{},\"c\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"l\":{\"docs\":{\"90\":{\"ref\":90,\"tf\":1}}}}}},\"i\":{\"docs\":{},\"d\":{\"docs\":{},\"e\":{\"docs\":{},\"m\":{\"docs\":{},\"e\":{\"docs\":{},\"n\":{\"docs\":{},\"u\":{\"docs\":{\"91\":{\"ref\":91,\"tf\":1},\"93\":{\"ref\":93,\"tf\":1}},\"c\":{\"docs\":{},\"o\":{\"docs\":{},\"n\":{\"docs\":{},\"t\":{\"docs\":{\"92\":{\"ref\":92,\"tf\":1}}}}}}}}}}}}},\"l\":{\"docs\":{},\"i\":{\"docs\":{},\"d\":{\"docs\":{},\"e\":{\"docs\":{},\"b\":{\"docs\":{},\"o\":{\"docs\":{},\"x\":{\"docs\":{\"94\":{\"ref\":94,\"tf\":1}}}}}}}}}},\"t\":{\"docs\":{},\"a\":{\"docs\":{},\"b\":{\"docs\":{\"95\":{\"ref\":95,\"tf\":1},\"96\":{\"ref\":96,\"tf\":1}}}},\"o\":{\"docs\":{},\"g\":{\"docs\":{},\"g\":{\"docs\":{},\"l\":{\"docs\":{\"97\":{\"ref\":97,\"tf\":1}}}}}}},\"v\":{\"docs\":{},\"i\":{\"docs\":{},\"e\":{\"docs\":{},\"w\":{\"docs\":{\"98\":{\"ref\":98,\"tf\":1}}}}}}}}},\"k\":{\"docs\":{},\"e\":{\"docs\":{},\"y\":{\"docs\":{},\"b\":{\"docs\":{},\"o\":{\"docs\":{},\"a\":{\"docs\":{},\"r\":{\"docs\":{},\"d\":{\"docs\":{},\"a\":{\"docs\":{},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"a\":{\"docs\":{},\"c\":{\"docs\":{},\"h\":{\"docs\":{\"99\":{\"ref\":99,\"tf\":1}}}}}}}}}}}}}}}},\"m\":{\"docs\":{},\"e\":{\"docs\":{},\"n\":{\"docs\":{},\"u\":{\"docs\":{},\"c\":{\"docs\":{},\"l\":{\"docs\":{},\"o\":{\"docs\":{},\"s\":{\"docs\":{\"100\":{\"ref\":100,\"tf\":1}}}}}},\"t\":{\"docs\":{},\"o\":{\"docs\":{},\"g\":{\"docs\":{},\"g\":{\"docs\":{},\"l\":{\"docs\":{\"101\":{\"ref\":101,\"tf\":1}}}}}}}}}}},\"n\":{\"docs\":{},\"a\":{\"docs\":{},\"v\":{\"docs\":{},\"c\":{\"docs\":{},\"l\":{\"docs\":{},\"e\":{\"docs\":{},\"a\":{\"docs\":{},\"r\":{\"docs\":{\"102\":{\"ref\":102,\"tf\":1}}}}}}}}}}}}}}}}}}}},\"p\":{\"docs\":{},\"a\":{\"docs\":{},\"g\":{\"docs\":{},\"e\":{\"docs\":{},\"/\":{\"docs\":{},\"k\":{\"docs\":{},\"e\":{\"docs\":{},\"y\":{\"docs\":{},\"b\":{\"docs\":{},\"o\":{\"docs\":{},\"a\":{\"docs\":{},\"r\":{\"docs\":{},\"d\":{\"docs\":{\"103\":{\"ref\":103,\"tf\":1}}}}}}}}}},\"t\":{\"docs\":{},\"a\":{\"docs\":{},\"p\":{\"docs\":{\"104\":{\"ref\":104,\"tf\":1}}}}}}}}}},\"s\":{\"docs\":{},\"e\":{\"docs\":{},\"r\":{\"docs\":{},\"v\":{\"docs\":{},\"i\":{\"docs\":{},\"c\":{\"docs\":{},\"e\":{\"docs\":{},\"/\":{\"docs\":{},\"$\":{\"docs\":{},\"i\":{\"docs\":{},\"o\":{\"docs\":{},\"n\":{\"docs\":{},\"i\":{\"docs\":{},\"c\":{\"docs\":{},\"a\":{\"docs\":{},\"c\":{\"docs\":{},\"t\":{\"docs\":{},\"i\":{\"docs\":{},\"o\":{\"docs\":{},\"n\":{\"docs\":{},\"s\":{\"docs\":{},\"h\":{\"docs\":{},\"e\":{\"docs\":{},\"e\":{\"docs\":{},\"t\":{\"docs\":{\"105\":{\"ref\":105,\"tf\":1}}}}}}}}}}}},\"n\":{\"docs\":{},\"i\":{\"docs\":{},\"m\":{\"docs\":{\"106\":{\"ref\":106,\"tf\":1}}}}}},\"b\":{\"docs\":{},\"a\":{\"docs\":{},\"c\":{\"docs\":{},\"k\":{\"docs\":{},\"d\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"p\":{\"docs\":{\"107\":{\"ref\":107,\"tf\":1}}}}}}}}}},\"g\":{\"docs\":{},\"e\":{\"docs\":{},\"s\":{\"docs\":{},\"t\":{\"docs\":{},\"u\":{\"docs\":{},\"r\":{\"docs\":{\"108\":{\"ref\":108,\"tf\":1}}}}}}}},\"l\":{\"docs\":{},\"i\":{\"docs\":{},\"s\":{\"docs\":{},\"t\":{\"docs\":{},\"d\":{\"docs\":{},\"e\":{\"docs\":{},\"l\":{\"docs\":{},\"e\":{\"docs\":{},\"g\":{\"docs\":{\"109\":{\"ref\":109,\"tf\":1}}}}}}}}}},\"o\":{\"docs\":{},\"a\":{\"docs\":{},\"d\":{\"docs\":{\"110\":{\"ref\":110,\"tf\":1}}}}}},\"m\":{\"docs\":{},\"o\":{\"docs\":{},\"d\":{\"docs\":{\"111\":{\"ref\":111,\"tf\":1}}}}},\"n\":{\"docs\":{},\"a\":{\"docs\":{},\"v\":{\"docs\":{},\"b\":{\"docs\":{},\"a\":{\"docs\":{},\"r\":{\"docs\":{},\"d\":{\"docs\":{},\"e\":{\"docs\":{},\"l\":{\"docs\":{},\"e\":{\"docs\":{},\"g\":{\"docs\":{\"112\":{\"ref\":112,\"tf\":1}}}}}}}}}}}}},\"p\":{\"docs\":{},\"l\":{\"docs\":{},\"a\":{\"docs\":{},\"t\":{\"docs\":{},\"f\":{\"docs\":{},\"o\":{\"docs\":{},\"r\":{\"docs\":{},\"m\":{\"docs\":{\"113\":{\"ref\":113,\"tf\":1}}}}}}}}},\"o\":{\"docs\":{},\"p\":{\"docs\":{},\"u\":{\"docs\":{},\"p\":{\"docs\":{\"114\":{\"ref\":114,\"tf\":1}}}}}}},\"s\":{\"docs\":{},\"c\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"l\":{\"docs\":{},\"l\":{\"docs\":{},\"d\":{\"docs\":{},\"e\":{\"docs\":{},\"l\":{\"docs\":{},\"e\":{\"docs\":{},\"g\":{\"docs\":{\"115\":{\"ref\":115,\"tf\":1}}}}}}}}}}}},\"i\":{\"docs\":{},\"d\":{\"docs\":{},\"e\":{\"docs\":{},\"m\":{\"docs\":{},\"e\":{\"docs\":{},\"n\":{\"docs\":{},\"u\":{\"docs\":{},\"d\":{\"docs\":{},\"e\":{\"docs\":{},\"l\":{\"docs\":{},\"e\":{\"docs\":{},\"g\":{\"docs\":{\"116\":{\"ref\":116,\"tf\":1}}}}}}}}}}}}}},\"l\":{\"docs\":{},\"i\":{\"docs\":{},\"d\":{\"docs\":{},\"e\":{\"docs\":{},\"b\":{\"docs\":{},\"o\":{\"docs\":{},\"x\":{\"docs\":{},\"d\":{\"docs\":{},\"e\":{\"docs\":{},\"l\":{\"docs\":{},\"e\":{\"docs\":{},\"g\":{\"docs\":{\"117\":{\"ref\":117,\"tf\":1}}}}}}}}}}}}}}},\"t\":{\"docs\":{},\"a\":{\"docs\":{},\"b\":{\"docs\":{},\"s\":{\"docs\":{},\"d\":{\"docs\":{},\"e\":{\"docs\":{},\"l\":{\"docs\":{},\"e\":{\"docs\":{},\"g\":{\"docs\":{\"118\":{\"ref\":118,\"tf\":1}}}}}}}}}}}}}}}}}}}}}}}}},\"u\":{\"docs\":{},\"t\":{\"docs\":{},\"i\":{\"docs\":{},\"l\":{\"docs\":{},\"i\":{\"docs\":{},\"t\":{\"docs\":{},\"y\":{\"docs\":{},\"/\":{\"docs\":{},\"i\":{\"docs\":{},\"o\":{\"docs\":{},\"n\":{\"docs\":{},\"i\":{\"docs\":{},\"c\":{\"docs\":{},\".\":{\"docs\":{},\"d\":{\"docs\":{},\"o\":{\"docs\":{},\"m\":{\"docs\":{},\"u\":{\"docs\":{},\"t\":{\"docs\":{},\"i\":{\"docs\":{},\"l\":{\"docs\":{\"119\":{\"ref\":119,\"tf\":1}}}}}}}}},\"e\":{\"docs\":{},\"v\":{\"docs\":{},\"e\":{\"docs\":{},\"n\":{\"docs\":{},\"t\":{\"docs\":{},\"c\":{\"docs\":{},\"o\":{\"docs\":{},\"n\":{\"docs\":{},\"t\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"l\":{\"docs\":{\"120\":{\"ref\":120,\"tf\":1}}}}}}}}}}}}}},\"p\":{\"docs\":{},\"l\":{\"docs\":{},\"a\":{\"docs\":{},\"t\":{\"docs\":{},\"f\":{\"docs\":{},\"o\":{\"docs\":{},\"r\":{\"docs\":{},\"m\":{\"docs\":{\"121\":{\"ref\":121,\"tf\":1}}}}}}}}}}}}}}}}}}}}}}}},\"i\":{\"docs\":{},\"o\":{\"docs\":{},\"n\":{\"docs\":{},\"i\":{\"docs\":{},\"c\":{\"docs\":{},\"/\":{\"docs\":{},\"c\":{\"docs\":{},\"o\":{\"docs\":{},\"n\":{\"docs\":{},\"t\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"l\":{\"docs\":{\"122\":{\"ref\":122,\"tf\":1}}}}}}}}},\"d\":{\"docs\":{},\"i\":{\"docs\":{},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\"c\":{\"docs\":{},\"t\":{\"docs\":{\"123\":{\"ref\":123,\"tf\":1}}}}}}}},\"s\":{\"docs\":{},\"e\":{\"docs\":{},\"r\":{\"docs\":{},\"v\":{\"docs\":{},\"i\":{\"docs\":{},\"c\":{\"docs\":{\"124\":{\"ref\":124,\"tf\":1}}}}}}}},\"u\":{\"docs\":{},\"t\":{\"docs\":{},\"i\":{\"docs\":{},\"l\":{\"docs\":{\"125\":{\"ref\":125,\"tf\":1}}}}}}}}}}}}}}}}},\"]\":{\"docs\":{},\"(\":{\"docs\":{},\"/\":{\"docs\":{},\"d\":{\"docs\":{},\"o\":{\"docs\":{},\"c\":{\"docs\":{},\"s\":{\"docs\":{},\"/\":{\"docs\":{},\"c\":{\"docs\":{},\"o\":{\"docs\":{},\"m\":{\"docs\":{},\"p\":{\"docs\":{},\"o\":{\"docs\":{},\"n\":{\"docs\":{},\"e\":{\"docs\":{},\"n\":{\"docs\":{},\"t\":{\"docs\":{},\"s\":{\"docs\":{},\"/\":{\"docs\":{},\"#\":{\"docs\":{},\"f\":{\"docs\":{},\"o\":{\"docs\":{},\"o\":{\"docs\":{},\"t\":{\"docs\":{\"76\":{\"ref\":76,\"tf\":0.018867924528301886}}}}}},\"s\":{\"docs\":{},\"u\":{\"docs\":{},\"b\":{\"docs\":{},\"h\":{\"docs\":{},\"e\":{\"docs\":{},\"a\":{\"docs\":{},\"d\":{\"docs\":{\"77\":{\"ref\":77,\"tf\":0.018867924528301886}}}}}}}}}}}}}}}}}}}}}}}}}}},\"h\":{\"docs\":{},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"p\":{\"docs\":{},\"s\":{\"docs\":{},\":\":{\"docs\":{},\"/\":{\"docs\":{},\"/\":{\"docs\":{},\"g\":{\"docs\":{},\"i\":{\"docs\":{},\"t\":{\"docs\":{},\"h\":{\"docs\":{},\"u\":{\"docs\":{},\"b\":{\"docs\":{},\".\":{\"docs\":{},\"c\":{\"docs\":{},\"o\":{\"docs\":{},\"m\":{\"docs\":{},\"/\":{\"docs\":{},\"a\":{\"docs\":{},\"n\":{\"docs\":{},\"g\":{\"docs\":{},\"u\":{\"docs\":{},\"l\":{\"docs\":{},\"a\":{\"docs\":{},\"r\":{\"docs\":{},\"-\":{\"docs\":{},\"u\":{\"docs\":{},\"i\":{\"docs\":{},\"/\":{\"docs\":{},\"u\":{\"docs\":{},\"i\":{\"docs\":{},\"-\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"u\":{\"docs\":{},\"t\":{\"docs\":{},\"e\":{\"docs\":{},\"r\":{\"docs\":{},\"/\":{\"docs\":{},\"w\":{\"docs\":{},\"i\":{\"docs\":{},\"k\":{\"docs\":{},\"i\":{\"docs\":{\"84\":{\"ref\":84,\"tf\":0.007272727272727273}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},\"u\":{\"docs\":{},\"m\":{\"docs\":{},\"e\":{\"docs\":{},\"n\":{\"docs\":{\"93\":{\"ref\":93,\"tf\":0.014084507042253521}},\"t\":{\"docs\":{\"58\":{\"ref\":58,\"tf\":0.00273224043715847},\"69\":{\"ref\":69,\"tf\":0.05},\"84\":{\"ref\":84,\"tf\":0.0036363636363636364},\"91\":{\"ref\":91,\"tf\":0.0196078431372549},\"92\":{\"ref\":92,\"tf\":0.02857142857142857},\"95\":{\"ref\":95,\"tf\":0.009345794392523364},\"96\":{\"ref\":96,\"tf\":0.017857142857142856},\"104\":{\"ref\":104,\"tf\":0.00423728813559322},\"126\":{\"ref\":126,\"tf\":5.011111111111111}},\"a\":{\"docs\":{},\"t\":{\"docs\":{},\"i\":{\"docs\":{},\"o\":{\"docs\":{},\"n\":{\"docs\":{},\"`\":{\"docs\":{},\"]\":{\"docs\":{},\"(\":{\"docs\":{},\"/\":{\"docs\":{},\"d\":{\"docs\":{},\"o\":{\"docs\":{},\"c\":{\"docs\":{},\"s\":{\"docs\":{},\"/\":{\"docs\":{},\"c\":{\"docs\":{},\"o\":{\"docs\":{},\"m\":{\"docs\":{},\"p\":{\"docs\":{},\"o\":{\"docs\":{},\"n\":{\"docs\":{},\"e\":{\"docs\":{},\"n\":{\"docs\":{},\"t\":{\"docs\":{},\"s\":{\"docs\":{},\"/\":{\"docs\":{},\"#\":{\"docs\":{},\"l\":{\"docs\":{},\"i\":{\"docs\":{},\"s\":{\"docs\":{},\"t\":{\"docs\":{\"80\":{\"ref\":80,\"tf\":0.007692307692307693}}}}}}}}}}}}}}}}}}}}}}}}}}},\"]\":{\"docs\":{},\"(\":{\"docs\":{},\"h\":{\"docs\":{},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"p\":{\"docs\":{},\":\":{\"docs\":{},\"/\":{\"docs\":{},\"/\":{\"docs\":{},\"s\":{\"docs\":{},\"a\":{\"docs\":{},\"s\":{\"docs\":{},\"s\":{\"docs\":{},\"-\":{\"docs\":{},\"l\":{\"docs\":{},\"a\":{\"docs\":{},\"n\":{\"docs\":{},\"g\":{\"docs\":{},\".\":{\"docs\":{},\"c\":{\"docs\":{},\"o\":{\"docs\":{},\"m\":{\"docs\":{},\"/\":{\"docs\":{},\"d\":{\"docs\":{},\"o\":{\"docs\":{},\"c\":{\"docs\":{},\"u\":{\"docs\":{},\"m\":{\"docs\":{},\"e\":{\"docs\":{},\"n\":{\"docs\":{},\"t\":{\"docs\":{},\"a\":{\"docs\":{},\"t\":{\"docs\":{},\"i\":{\"docs\":{},\"o\":{\"docs\":{},\"n\":{\"docs\":{},\"/\":{\"docs\":{},\"f\":{\"docs\":{},\"i\":{\"docs\":{},\"l\":{\"docs\":{},\"e\":{\"docs\":{},\".\":{\"docs\":{},\"s\":{\"docs\":{},\"a\":{\"docs\":{},\"s\":{\"docs\":{},\"s\":{\"docs\":{},\"_\":{\"docs\":{},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\"f\":{\"docs\":{},\"e\":{\"docs\":{},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\"n\":{\"docs\":{},\"c\":{\"docs\":{},\"e\":{\"docs\":{},\".\":{\"docs\":{},\"h\":{\"docs\":{},\"t\":{\"docs\":{},\"m\":{\"docs\":{},\"l\":{\"docs\":{\"129\":{\"ref\":129,\"tf\":0.0034782608695652175}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},\"g\":{\"docs\":{},\"u\":{\"docs\":{},\"i\":{\"docs\":{},\"d\":{\"docs\":{},\"e\":{\"docs\":{},\"#\":{\"docs\":{},\"v\":{\"docs\":{},\"a\":{\"docs\":{},\"r\":{\"docs\":{},\"i\":{\"docs\":{\"129\":{\"ref\":129,\"tf\":0.0017391304347826088}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},\"m\":{\"docs\":{\"10\":{\"ref\":10,\"tf\":0.023809523809523808},\"71\":{\"ref\":71,\"tf\":0.008},\"72\":{\"ref\":72,\"tf\":0.018648018648018648},\"104\":{\"ref\":104,\"tf\":0.00423728813559322},\"107\":{\"ref\":107,\"tf\":0.012658227848101266},\"119\":{\"ref\":119,\"tf\":0.003937007874015748},\"120\":{\"ref\":120,\"tf\":0.006289308176100629},\"134\":{\"ref\":134,\"tf\":0.0034522439585730723}},\"e\":{\"docs\":{},\"v\":{\"docs\":{\"112\":{\"ref\":112,\"tf\":0.0058823529411764705}}},\"l\":{\"docs\":{\"119\":{\"ref\":119,\"tf\":0.027559055118110236},\"120\":{\"ref\":120,\"tf\":0.025157232704402517}}}}},\"n\":{\"docs\":{},\"'\":{\"docs\":{},\"t\":{\"docs\":{\"11\":{\"ref\":11,\"tf\":0.045454545454545456},\"43\":{\"ref\":43,\"tf\":0.006944444444444444},\"54\":{\"ref\":54,\"tf\":0.001287001287001287},\"56\":{\"ref\":56,\"tf\":0.003189792663476874},\"58\":{\"ref\":58,\"tf\":0.00273224043715847},\"59\":{\"ref\":59,\"tf\":0.002785515320334262},\"60\":{\"ref\":60,\"tf\":0.0022727272727272726},\"114\":{\"ref\":114,\"tf\":0.001594896331738437},\"134\":{\"ref\":134,\"tf\":0.0011507479861910242},\"135\":{\"ref\":135,\"tf\":0.005791505791505791}}}},\"e\":{\"docs\":{\"58\":{\"ref\":58,\"tf\":0.00273224043715847},\"71\":{\"ref\":71,\"tf\":0.008},\"107\":{\"ref\":107,\"tf\":0.012658227848101266},\"111\":{\"ref\":111,\"tf\":0.007518796992481203},\"129\":{\"ref\":129,\"tf\":0.0017391304347826088},\"130\":{\"ref\":130,\"tf\":0.0043859649122807015},\"133\":{\"ref\":133,\"tf\":0.0033500837520938024},\"134\":{\"ref\":134,\"tf\":0.0011507479861910242}}},\"\\\\\":{\"docs\":{},\"'\":{\"docs\":{},\"t\":{\"docs\":{\"114\":{\"ref\":114,\"tf\":0.001594896331738437}}}}},\"a\":{\"docs\":{},\"t\":{\"docs\":{\"135\":{\"ref\":135,\"tf\":0.0019305019305019305}}}}},\"g\":{\"docs\":{\"18\":{\"ref\":18,\"tf\":0.02}}},\"o\":{\"docs\":{},\"k\":{\"docs\":{},\"i\":{\"docs\":{\"19\":{\"ref\":19,\"tf\":0.02}}}},\"m\":{\"docs\":{\"20\":{\"ref\":20,\"tf\":0.02040816326530612}}}},\"w\":{\"docs\":{},\"n\":{\"docs\":{\"38\":{\"ref\":38,\"tf\":0.011627906976744186},\"57\":{\"ref\":57,\"tf\":0.0023584905660377358},\"72\":{\"ref\":72,\"tf\":0.004662004662004662},\"77\":{\"ref\":77,\"tf\":0.018867924528301886},\"88\":{\"ref\":88,\"tf\":0.038834951456310676},\"104\":{\"ref\":104,\"tf\":0.00423728813559322}},\"l\":{\"docs\":{},\"o\":{\"docs\":{},\"a\":{\"docs\":{},\"d\":{\"docs\":{\"56\":{\"ref\":56,\"tf\":0.004784688995215311},\"62\":{\"ref\":62,\"tf\":10.083333333333334},\"128\":{\"ref\":128,\"tf\":0.03571428571428571},\"129\":{\"ref\":129,\"tf\":0.0017391304347826088}},\"]\":{\"docs\":{},\"(\":{\"docs\":{},\"h\":{\"docs\":{},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"p\":{\"docs\":{},\"s\":{\"docs\":{},\":\":{\"docs\":{},\"/\":{\"docs\":{},\"/\":{\"docs\":{},\"g\":{\"docs\":{},\"i\":{\"docs\":{},\"t\":{\"docs\":{},\"h\":{\"docs\":{},\"u\":{\"docs\":{},\"b\":{\"docs\":{},\".\":{\"docs\":{},\"c\":{\"docs\":{},\"o\":{\"docs\":{},\"m\":{\"docs\":{},\"/\":{\"docs\":{},\"d\":{\"docs\":{},\"r\":{\"docs\":{},\"i\":{\"docs\":{},\"f\":{\"docs\":{},\"t\":{\"docs\":{},\"y\":{\"docs\":{},\"c\":{\"docs\":{},\"o\":{\"docs\":{},\"/\":{\"docs\":{},\"i\":{\"docs\":{},\"o\":{\"docs\":{},\"n\":{\"docs\":{},\"i\":{\"docs\":{},\"c\":{\"docs\":{},\"/\":{\"docs\":{},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\"l\":{\"docs\":{},\"e\":{\"docs\":{},\"a\":{\"docs\":{},\"s\":{\"docs\":{\"129\":{\"ref\":129,\"tf\":0.0017391304347826088}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},\"e\":{\"docs\":{},\"s\":{\"docs\":{},\"n\":{\"docs\":{},\"'\":{\"docs\":{},\"t\":{\"docs\":{\"43\":{\"ref\":43,\"tf\":0.006944444444444444},\"54\":{\"ref\":54,\"tf\":0.001287001287001287},\"60\":{\"ref\":60,\"tf\":0.0022727272727272726},\"104\":{\"ref\":104,\"tf\":0.00423728813559322},\"129\":{\"ref\":129,\"tf\":0.0017391304347826088},\"134\":{\"ref\":134,\"tf\":0.010356731875719217},\"135\":{\"ref\":135,\"tf\":0.0019305019305019305}}}}},\"-\":{\"docs\":{},\"c\":{\"docs\":{},\"o\":{\"docs\":{},\"n\":{\"docs\":{},\"t\":{\"docs\":{},\"i\":{\"docs\":{},\"n\":{\"docs\":{},\"u\":{\"docs\":{\"94\":{\"ref\":94,\"tf\":0.022222222222222223}}}}}}}}}}}},\"u\":{\"docs\":{},\"b\":{\"docs\":{},\"l\":{\"docs\":{\"56\":{\"ref\":56,\"tf\":0.001594896331738437},\"134\":{\"ref\":134,\"tf\":0.0011507479861910242}},\"e\":{\"docs\":{},\"-\":{\"docs\":{},\"t\":{\"docs\":{},\"a\":{\"docs\":{},\"p\":{\"docs\":{\"104\":{\"ref\":104,\"tf\":0.00847457627118644},\"134\":{\"ref\":134,\"tf\":0.0034522439585730723}}}}},\"c\":{\"docs\":{},\"l\":{\"docs\":{},\"i\":{\"docs\":{},\"c\":{\"docs\":{},\"k\":{\"docs\":{\"134\":{\"ref\":134,\"tf\":0.0011507479861910242}}}}}}}},\"t\":{\"docs\":{},\"a\":{\"docs\":{},\"p\":{\"docs\":{\"120\":{\"ref\":120,\"tf\":0.006289308176100629}}}}}}}}}},\"i\":{\"docs\":{},\"s\":{\"docs\":{},\"p\":{\"docs\":{},\"l\":{\"docs\":{},\"a\":{\"docs\":{},\"i\":{\"docs\":{\"4\":{\"ref\":4,\"tf\":0.022727272727272728},\"5\":{\"ref\":5,\"tf\":0.05128205128205128},\"6\":{\"ref\":6,\"tf\":0.047619047619047616},\"14\":{\"ref\":14,\"tf\":0.011494252873563218},\"21\":{\"ref\":21,\"tf\":0.0196078431372549},\"36\":{\"ref\":36,\"tf\":0.017857142857142856},\"54\":{\"ref\":54,\"tf\":0.001287001287001287},\"72\":{\"ref\":72,\"tf\":0.002331002331002331},\"81\":{\"ref\":81,\"tf\":0.015151515151515152},\"84\":{\"ref\":84,\"tf\":0.0036363636363636364},\"88\":{\"ref\":88,\"tf\":0.038834951456310676},\"98\":{\"ref\":98,\"tf\":0.018867924528301886},\"104\":{\"ref\":104,\"tf\":0.00847457627118644},\"134\":{\"ref\":134,\"tf\":0.005753739930955121}}}}}},\"t\":{\"docs\":{},\"i\":{\"docs\":{},\"n\":{\"docs\":{},\"c\":{\"docs\":{},\"t\":{\"docs\":{\"72\":{\"ref\":72,\"tf\":0.002331002331002331}}}}}},\"a\":{\"docs\":{},\"n\":{\"docs\":{},\"c\":{\"docs\":{\"78\":{\"ref\":78,\"tf\":0.033707865168539325},\"115\":{\"ref\":115,\"tf\":0.006493506493506494}}}}},\"r\":{\"docs\":{},\"i\":{\"docs\":{},\"b\":{\"docs\":{},\"u\":{\"docs\":{},\"t\":{\"docs\":{\"135\":{\"ref\":135,\"tf\":0.0019305019305019305}}}}}}}},\"a\":{\"docs\":{},\"b\":{\"docs\":{},\"l\":{\"docs\":{\"102\":{\"ref\":102,\"tf\":0.041666666666666664},\"103\":{\"ref\":103,\"tf\":0.012987012987012988},\"104\":{\"ref\":104,\"tf\":0.00847457627118644},\"123\":{\"ref\":123,\"tf\":0.0035211267605633804},\"134\":{\"ref\":134,\"tf\":0.0011507479861910242}}}},\"g\":{\"docs\":{},\"r\":{\"docs\":{},\"e\":{\"docs\":{\"135\":{\"ref\":135,\"tf\":0.0019305019305019305}}}}}},\"c\":{\"docs\":{},\"u\":{\"docs\":{},\"s\":{\"docs\":{},\"s\":{\"docs\":{\"133\":{\"ref\":133,\"tf\":0.0016750418760469012},\"134\":{\"ref\":134,\"tf\":0.0011507479861910242}}}}}},\"m\":{\"docs\":{},\"i\":{\"docs\":{},\"s\":{\"docs\":{},\"s\":{\"docs\":{\"136\":{\"ref\":136,\"tf\":0.005050505050505051}}}}}}},\"f\":{\"docs\":{},\"f\":{\"docs\":{},\"e\":{\"docs\":{},\"r\":{\"docs\":{\"7\":{\"ref\":7,\"tf\":5},\"15\":{\"ref\":15,\"tf\":0.022727272727272728},\"20\":{\"ref\":20,\"tf\":0.02040816326530612},\"21\":{\"ref\":21,\"tf\":0.00980392156862745},\"25\":{\"ref\":25,\"tf\":0.011494252873563218},\"34\":{\"ref\":34,\"tf\":0.016666666666666666},\"35\":{\"ref\":35,\"tf\":0.03636363636363636},\"36\":{\"ref\":36,\"tf\":0.017857142857142856},\"38\":{\"ref\":38,\"tf\":0.011627906976744186},\"43\":{\"ref\":43,\"tf\":0.006944444444444444},\"50\":{\"ref\":50,\"tf\":0.008928571428571428},\"54\":{\"ref\":54,\"tf\":0.001287001287001287},\"56\":{\"ref\":56,\"tf\":0.001594896331738437},\"57\":{\"ref\":57,\"tf\":0.0023584905660377358},\"73\":{\"ref\":73,\"tf\":0.1},\"84\":{\"ref\":84,\"tf\":0.007272727272727273},\"87\":{\"ref\":87,\"tf\":0.08333333333333333},\"104\":{\"ref\":104,\"tf\":0.00423728813559322},\"123\":{\"ref\":123,\"tf\":0.014084507042253521},\"129\":{\"ref\":129,\"tf\":0.0017391304347826088},\"133\":{\"ref\":133,\"tf\":0.0016750418760469012},\"134\":{\"ref\":134,\"tf\":0.0011507479861910242},\"135\":{\"ref\":135,\"tf\":0.005791505791505791}}}}}},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\"c\":{\"docs\":{},\"t\":{\"docs\":{\"14\":{\"ref\":14,\"tf\":0.011494252873563218},\"54\":{\"ref\":54,\"tf\":0.003861003861003861},\"72\":{\"ref\":72,\"tf\":0.011655011655011656},\"74\":{\"ref\":74,\"tf\":0.029940119760479042},\"78\":{\"ref\":78,\"tf\":0.02247191011235955},\"80\":{\"ref\":80,\"tf\":0.007692307692307693},\"82\":{\"ref\":82,\"tf\":0.0078125},\"84\":{\"ref\":84,\"tf\":0.01090909090909091},\"87\":{\"ref\":87,\"tf\":0.041666666666666664},\"90\":{\"ref\":90,\"tf\":0.010416666666666666},\"91\":{\"ref\":91,\"tf\":0.0196078431372549},\"92\":{\"ref\":92,\"tf\":0.02857142857142857},\"93\":{\"ref\":93,\"tf\":0.014084507042253521},\"97\":{\"ref\":97,\"tf\":0.038461538461538464},\"99\":{\"ref\":99,\"tf\":0.0851063829787234},\"102\":{\"ref\":102,\"tf\":0.0625},\"103\":{\"ref\":103,\"tf\":0.006493506493506494},\"109\":{\"ref\":109,\"tf\":0.017094017094017096},\"112\":{\"ref\":112,\"tf\":0.047058823529411764},\"115\":{\"ref\":115,\"tf\":0.003246753246753247},\"116\":{\"ref\":116,\"tf\":0.011111111111111112},\"117\":{\"ref\":117,\"tf\":0.015151515151515152},\"118\":{\"ref\":118,\"tf\":0.02857142857142857},\"123\":{\"ref\":123,\"tf\":3.3579812206572766},\"124\":{\"ref\":124,\"tf\":0.05154639175257732},\"130\":{\"ref\":130,\"tf\":0.03070175438596491},\"134\":{\"ref\":134,\"tf\":0.0011507479861910242}},\"l\":{\"docs\":{},\"i\":{\"docs\":{\"10\":{\"ref\":10,\"tf\":0.023809523809523808},\"54\":{\"ref\":54,\"tf\":0.001287001287001287},\"56\":{\"ref\":56,\"tf\":0.001594896331738437},\"60\":{\"ref\":60,\"tf\":0.004545454545454545},\"84\":{\"ref\":84,\"tf\":0.0036363636363636364},\"109\":{\"ref\":109,\"tf\":0.008547008547008548},\"115\":{\"ref\":115,\"tf\":0.003246753246753247},\"116\":{\"ref\":116,\"tf\":0.005555555555555556},\"117\":{\"ref\":117,\"tf\":0.007575757575757576},\"118\":{\"ref\":118,\"tf\":0.009523809523809525},\"129\":{\"ref\":129,\"tf\":0.0034782608695652175}}}},\"o\":{\"docs\":{},\"r\":{\"docs\":{},\"i\":{\"docs\":{\"56\":{\"ref\":56,\"tf\":0.006379585326953748},\"58\":{\"ref\":58,\"tf\":0.00273224043715847},\"59\":{\"ref\":59,\"tf\":0.002785515320334262},\"128\":{\"ref\":128,\"tf\":0.017857142857142856},\"129\":{\"ref\":129,\"tf\":0.02608695652173913}}}}},\"i\":{\"docs\":{},\"v\":{\"docs\":{},\"e\":{\"docs\":{},\"'\":{\"docs\":{\"96\":{\"ref\":96,\"tf\":0.017857142857142856}}},\"(\":{\"docs\":{},\"'\":{\"docs\":{},\"f\":{\"docs\":{},\"a\":{\"docs\":{},\"d\":{\"docs\":{},\"e\":{\"docs\":{},\"b\":{\"docs\":{},\"a\":{\"docs\":{},\"r\":{\"docs\":{\"130\":{\"ref\":130,\"tf\":0.0043859649122807015}}}}}}}}}}}}}}}}}},\"v\":{\"docs\":{\"54\":{\"ref\":54,\"tf\":0.007722007722007722},\"111\":{\"ref\":111,\"tf\":0.022556390977443608},\"130\":{\"ref\":130,\"tf\":0.0043859649122807015},\"133\":{\"ref\":133,\"tf\":0.006700167504187605},\"134\":{\"ref\":134,\"tf\":0.0023014959723820483}},\"i\":{\"docs\":{},\"d\":{\"docs\":{\"15\":{\"ref\":15,\"tf\":5.090909090909091},\"45\":{\"ref\":45,\"tf\":0.00980392156862745}}}}},\"c\":{\"docs\":{},\"t\":{\"docs\":{},\"a\":{\"docs\":{},\"t\":{\"docs\":{\"50\":{\"ref\":50,\"tf\":0.008928571428571428}}}}}},\"d\":{\"docs\":{},\"n\":{\"docs\":{},\"'\":{\"docs\":{},\"t\":{\"docs\":{\"57\":{\"ref\":57,\"tf\":0.0023584905660377358},\"134\":{\"ref\":134,\"tf\":0.0011507479861910242},\"135\":{\"ref\":135,\"tf\":0.0019305019305019305}}}}},\"t\":{\"docs\":{},\"u\":{\"docs\":{},\"t\":{\"docs\":{},\"o\":{\"docs\":{},\"r\":{\"docs\":{},\"i\":{\"docs\":{\"133\":{\"ref\":133,\"tf\":0.0016750418760469012}}}}}}}}},\"g\":{\"docs\":{\"57\":{\"ref\":57,\"tf\":0.0023584905660377358}},\"e\":{\"docs\":{},\"s\":{\"docs\":{},\"t\":{\"docs\":{\"130\":{\"ref\":130,\"tf\":0.0043859649122807015},\"135\":{\"ref\":135,\"tf\":0.0019305019305019305}},\"a\":{\"docs\":{},\"l\":{\"docs\":{},\"g\":{\"docs\":{\"58\":{\"ref\":58,\"tf\":0.00273224043715847}}}}}}}}},\"a\":{\"docs\":{},\"l\":{\"docs\":{},\"o\":{\"docs\":{},\"g\":{\"docs\":{\"114\":{\"ref\":114,\"tf\":0.003189792663476874},\"136\":{\"ref\":136,\"tf\":0.010101010101010102}}}}}}},\"r\":{\"docs\":{},\"a\":{\"docs\":{},\"g\":{\"docs\":{\"14\":{\"ref\":14,\"tf\":0.011494252873563218},\"34\":{\"ref\":34,\"tf\":0.016666666666666666},\"59\":{\"ref\":59,\"tf\":0.008356545961002786},\"60\":{\"ref\":60,\"tf\":0.004545454545454545},\"80\":{\"ref\":80,\"tf\":0.007692307692307693},\"92\":{\"ref\":92,\"tf\":0.02857142857142857},\"93\":{\"ref\":93,\"tf\":0.014084507042253521},\"94\":{\"ref\":94,\"tf\":0.011111111111111112},\"97\":{\"ref\":97,\"tf\":0.019230769230769232},\"116\":{\"ref\":116,\"tf\":0.011111111111111112},\"120\":{\"ref\":120,\"tf\":0.006289308176100629},\"123\":{\"ref\":123,\"tf\":0.007042253521126761},\"130\":{\"ref\":130,\"tf\":0.008771929824561403},\"133\":{\"ref\":133,\"tf\":0.0016750418760469012},\"134\":{\"ref\":134,\"tf\":0.0011507479861910242}},\"-\":{\"docs\":{},\"c\":{\"docs\":{},\"o\":{\"docs\":{},\"n\":{\"docs\":{},\"t\":{\"docs\":{\"92\":{\"ref\":92,\"tf\":0.02857142857142857}}}}}}},\"d\":{\"docs\":{},\"o\":{\"docs\":{},\"w\":{\"docs\":{},\"n\":{\"docs\":{\"120\":{\"ref\":120,\"tf\":0.006289308176100629}}}}}},\"e\":{\"docs\":{},\"n\":{\"docs\":{},\"d\":{\"docs\":{\"120\":{\"ref\":120,\"tf\":0.006289308176100629}}}}},\"l\":{\"docs\":{},\"e\":{\"docs\":{},\"f\":{\"docs\":{},\"t\":{\"docs\":{\"120\":{\"ref\":120,\"tf\":0.006289308176100629}}}}}},\"r\":{\"docs\":{},\"i\":{\"docs\":{},\"g\":{\"docs\":{},\"h\":{\"docs\":{},\"t\":{\"docs\":{\"120\":{\"ref\":120,\"tf\":0.006289308176100629}}}}}}},\"s\":{\"docs\":{},\"t\":{\"docs\":{},\"a\":{\"docs\":{},\"r\":{\"docs\":{},\"t\":{\"docs\":{\"120\":{\"ref\":120,\"tf\":0.006289308176100629}}}}}}},\"u\":{\"docs\":{},\"p\":{\"docs\":{\"120\":{\"ref\":120,\"tf\":0.006289308176100629}}}}}},\"e\":{\"docs\":{},\"a\":{\"docs\":{},\"m\":{\"docs\":{\"19\":{\"ref\":19,\"tf\":0.02},\"135\":{\"ref\":135,\"tf\":0.0019305019305019305}}}}},\"o\":{\"docs\":{},\"i\":{\"docs\":{},\"d\":{\"docs\":{\"38\":{\"ref\":38,\"tf\":0.011627906976744186}}}},\"p\":{\"docs\":{\"38\":{\"ref\":38,\"tf\":0.011627906976744186},\"56\":{\"ref\":56,\"tf\":0.001594896331738437},\"126\":{\"ref\":126,\"tf\":0.011111111111111112}}}},\"i\":{\"docs\":{},\"v\":{\"docs\":{},\"e\":{\"docs\":{\"54\":{\"ref\":54,\"tf\":0.001287001287001287}}}},\"f\":{\"docs\":{},\"t\":{\"docs\":{},\"y\":{\"docs\":{},\"]\":{\"docs\":{},\"(\":{\"docs\":{},\"h\":{\"docs\":{},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"p\":{\"docs\":{},\":\":{\"docs\":{},\"/\":{\"docs\":{},\"/\":{\"docs\":{},\"d\":{\"docs\":{},\"r\":{\"docs\":{},\"i\":{\"docs\":{},\"f\":{\"docs\":{},\"t\":{\"docs\":{},\"y\":{\"docs\":{},\".\":{\"docs\":{},\"c\":{\"docs\":{},\"o\":{\"docs\":{},\"m\":{\"docs\":{\"58\":{\"ref\":58,\"tf\":0.00273224043715847}}}}}}}}}}}}}}}}}}}}}},\"i\":{\"docs\":{\"70\":{\"ref\":70,\"tf\":0.023809523809523808}}}}}}},\"u\":{\"docs\":{},\"c\":{\"docs\":{},\"k\":{\"docs\":{\"14\":{\"ref\":14,\"tf\":0.011494252873563218}}}},\"e\":{\"docs\":{\"56\":{\"ref\":56,\"tf\":0.001594896331738437}}},\"r\":{\"docs\":{},\"e\":{\"docs\":{\"58\":{\"ref\":58,\"tf\":0.00273224043715847}}},\"a\":{\"docs\":{},\"t\":{\"docs\":{\"106\":{\"ref\":106,\"tf\":0.02666666666666667},\"110\":{\"ref\":110,\"tf\":0.01020408163265306}}}}},\"p\":{\"docs\":{},\"l\":{\"docs\":{},\"i\":{\"docs\":{},\"c\":{\"docs\":{\"134\":{\"ref\":134,\"tf\":0.0034522439585730723}}}}}}},\"a\":{\"docs\":{},\"n\":{\"docs\":{},\"a\":{\"docs\":{\"18\":{\"ref\":18,\"tf\":0.02}}},\"g\":{\"docs\":{},\"e\":{\"docs\":{},\"r\":{\"docs\":{\"105\":{\"ref\":105,\"tf\":0.005847953216374269},\"124\":{\"ref\":124,\"tf\":0.010309278350515464}}}}}},\"i\":{\"docs\":{\"19\":{\"ref\":19,\"tf\":0.02},\"135\":{\"ref\":135,\"tf\":0.0019305019305019305}}},\"g\":{\"docs\":{},\"o\":{\"docs\":{},\"b\":{\"docs\":{},\"a\":{\"docs\":{},\"h\":{\"docs\":{\"38\":{\"ref\":38,\"tf\":0.011627906976744186}}}}}}},\"r\":{\"docs\":{},\"k\":{\"docs\":{\"50\":{\"ref\":50,\"tf\":0.008928571428571428},\"129\":{\"ref\":129,\"tf\":0.0017391304347826088}}}},\"t\":{\"docs\":{},\"a\":{\"docs\":{\"54\":{\"ref\":54,\"tf\":0.005148005148005148},\"72\":{\"ref\":72,\"tf\":0.002331002331002331},\"78\":{\"ref\":78,\"tf\":0.011235955056179775},\"84\":{\"ref\":84,\"tf\":0.0036363636363636364},\"120\":{\"ref\":120,\"tf\":0.018867924528301886},\"130\":{\"ref\":130,\"tf\":0.0043859649122807015},\"135\":{\"ref\":135,\"tf\":0.007722007722007722},\"136\":{\"ref\":136,\"tf\":0.005050505050505051}},\"b\":{\"docs\":{},\"a\":{\"docs\":{},\"s\":{\"docs\":{\"72\":{\"ref\":72,\"tf\":0.002331002331002331}}}}},\"-\":{\"docs\":{},\"t\":{\"docs\":{},\"a\":{\"docs\":{},\"p\":{\"docs\":{},\"-\":{\"docs\":{},\"d\":{\"docs\":{},\"i\":{\"docs\":{},\"s\":{\"docs\":{},\"a\":{\"docs\":{},\"b\":{\"docs\":{},\"l\":{\"docs\":{},\"e\":{\"docs\":{},\"d\":{\"docs\":{},\"=\":{\"docs\":{},\"\\\"\":{\"docs\":{},\"t\":{\"docs\":{},\"r\":{\"docs\":{},\"u\":{\"docs\":{\"104\":{\"ref\":104,\"tf\":0.00423728813559322}}}}}}}}}}}}}}}}}}}}}},\"u\":{\"docs\":{},\"n\":{\"docs\":{},\"t\":{\"docs\":{\"57\":{\"ref\":57,\"tf\":0.0023584905660377358}}}}}}},\"f\":{\"0\":{\"docs\":{},\"b\":{\"8\":{\"4\":{\"0\":{\"docs\":{\"129\":{\"ref\":129,\"tf\":0.0017391304347826088}}},\"docs\":{}},\"docs\":{}},\"docs\":{}}},\"8\":{\"docs\":{},\"f\":{\"8\":{\"docs\":{},\"f\":{\"8\":{\"docs\":{\"129\":{\"ref\":129,\"tf\":0.0034782608695652175}}},\"docs\":{}}},\"docs\":{}}},\"docs\":{},\"i\":{\"docs\":{},\"x\":{\"docs\":{\"0\":{\"ref\":0,\"tf\":0.03225806451612903},\"2\":{\"ref\":2,\"tf\":0.025},\"59\":{\"ref\":59,\"tf\":0.002785515320334262},\"76\":{\"ref\":76,\"tf\":0.03773584905660377},\"77\":{\"ref\":77,\"tf\":0.03773584905660377},\"103\":{\"ref\":103,\"tf\":0.006493506493506494},\"123\":{\"ref\":123,\"tf\":0.007042253521126761},\"130\":{\"ref\":130,\"tf\":0.0043859649122807015}}},\"l\":{\"docs\":{},\"l\":{\"docs\":{\"2\":{\"ref\":2,\"tf\":0.025},\"22\":{\"ref\":22,\"tf\":0.024390243902439025},\"30\":{\"ref\":30,\"tf\":0.02702702702702703},\"58\":{\"ref\":58,\"tf\":0.00546448087431694}}},\"e\":{\"docs\":{\"50\":{\"ref\":50,\"tf\":0.017857142857142856},\"54\":{\"ref\":54,\"tf\":0.003861003861003861},\"58\":{\"ref\":58,\"tf\":0.01912568306010929},\"59\":{\"ref\":59,\"tf\":0.022284122562674095},\"60\":{\"ref\":60,\"tf\":0.004545454545454545},\"64\":{\"ref\":64,\"tf\":0.0625},\"66\":{\"ref\":66,\"tf\":0.043478260869565216},\"84\":{\"ref\":84,\"tf\":0.0036363636363636364},\"99\":{\"ref\":99,\"tf\":0.02127659574468085},\"103\":{\"ref\":103,\"tf\":0.006493506493506494},\"128\":{\"ref\":128,\"tf\":0.017857142857142856},\"129\":{\"ref\":129,\"tf\":0.06086956521739131}},\"s\":{\"docs\":{},\"\\\\\":{\"docs\":{},\"j\":{\"docs\":{},\"a\":{\"docs\":{},\"v\":{\"docs\":{},\"a\":{\"docs\":{},\"\\\\\":{\"docs\":{},\"j\":{\"docs\":{},\"d\":{\"docs\":{},\"k\":{\"7\":{\"docs\":{\"56\":{\"ref\":56,\"tf\":0.001594896331738437}},\"\\\\\":{\"docs\":{},\"b\":{\"docs\":{},\"i\":{\"docs\":{},\"n\":{\"docs\":{\"56\":{\"ref\":56,\"tf\":0.001594896331738437}}}}}}},\"docs\":{}}}}}}}}}}}},\"t\":{\"docs\":{},\"e\":{\"docs\":{},\"r\":{\"docs\":{\"72\":{\"ref\":72,\"tf\":0.004662004662004662}},\":\":{\"docs\":{},\"s\":{\"docs\":{},\"e\":{\"docs\":{},\"a\":{\"docs\":{},\"r\":{\"docs\":{},\"c\":{\"docs\":{},\"h\":{\"docs\":{},\"t\":{\"docs\":{},\"e\":{\"docs\":{},\"x\":{\"docs\":{},\"t\":{\"docs\":{\"72\":{\"ref\":72,\"tf\":0.002331002331002331}}}}}}}}}}}}}}}}},\"r\":{\"docs\":{},\"s\":{\"docs\":{},\"t\":{\"docs\":{\"13\":{\"ref\":13,\"tf\":0.21153846153846154},\"16\":{\"ref\":16,\"tf\":0.007352941176470588},\"29\":{\"ref\":29,\"tf\":0.05128205128205128},\"47\":{\"ref\":47,\"tf\":0.01},\"54\":{\"ref\":54,\"tf\":0.005148005148005148},\"56\":{\"ref\":56,\"tf\":0.006379585326953748},\"57\":{\"ref\":57,\"tf\":0.0047169811320754715},\"58\":{\"ref\":58,\"tf\":0.00819672131147541},\"59\":{\"ref\":59,\"tf\":0.005571030640668524},\"60\":{\"ref\":60,\"tf\":0.0022727272727272726},\"71\":{\"ref\":71,\"tf\":0.008},\"88\":{\"ref\":88,\"tf\":0.009708737864077669},\"104\":{\"ref\":104,\"tf\":0.00423728813559322},\"119\":{\"ref\":119,\"tf\":0.003937007874015748},\"127\":{\"ref\":127,\"tf\":0.006622516556291391},\"129\":{\"ref\":129,\"tf\":0.0017391304347826088},\"130\":{\"ref\":130,\"tf\":0.0043859649122807015},\"132\":{\"ref\":132,\"tf\":0.01282051282051282},\"133\":{\"ref\":133,\"tf\":0.006700167504187605},\"135\":{\"ref\":135,\"tf\":0.003861003861003861},\"136\":{\"ref\":136,\"tf\":0.005050505050505051}}}},\"e\":{\"docs\":{\"104\":{\"ref\":104,\"tf\":0.00847457627118644},\"121\":{\"ref\":121,\"tf\":0.011627906976744186},\"134\":{\"ref\":134,\"tf\":0.009205983889528193}},\"f\":{\"docs\":{},\"o\":{\"docs\":{},\"x\":{\"docs\":{\"134\":{\"ref\":134,\"tf\":0.0011507479861910242}},\"o\":{\"docs\":{\"67\":{\"ref\":67,\"tf\":0.027777777777777776}}}}}}}},\"e\":{\"docs\":{},\"l\":{\"docs\":{},\"d\":{\"docs\":{\"26\":{\"ref\":26,\"tf\":0.021739130434782608},\"105\":{\"ref\":105,\"tf\":0.005847953216374269},\"114\":{\"ref\":114,\"tf\":0.001594896331738437}}}}},\"g\":{\"docs\":{},\"h\":{\"docs\":{},\"t\":{\"docs\":{},\"e\":{\"docs\":{},\"r\":{\"docs\":{\"38\":{\"ref\":38,\"tf\":0.011627906976744186}}}}}},\"u\":{\"docs\":{},\"r\":{\"docs\":{\"43\":{\"ref\":43,\"tf\":0.013888888888888888},\"59\":{\"ref\":59,\"tf\":0.002785515320334262},\"134\":{\"ref\":134,\"tf\":0.0011507479861910242}}}}},\"v\":{\"docs\":{},\"e\":{\"docs\":{\"43\":{\"ref\":43,\"tf\":0.013888888888888888},\"44\":{\"ref\":44,\"tf\":0.018518518518518517}}}},\"t\":{\"docs\":{\"48\":{\"ref\":48,\"tf\":0.011627906976744186},\"57\":{\"ref\":57,\"tf\":0.0047169811320754715},\"61\":{\"ref\":61,\"tf\":0.021739130434782608},\"72\":{\"ref\":72,\"tf\":0.004662004662004662},\"86\":{\"ref\":86,\"tf\":0.06666666666666667},\"119\":{\"ref\":119,\"tf\":0.003937007874015748},\"123\":{\"ref\":123,\"tf\":0.0035211267605633804},\"129\":{\"ref\":129,\"tf\":0.0034782608695652175},\"135\":{\"ref\":135,\"tf\":0.003861003861003861}}},\"n\":{\"docs\":{},\"d\":{\"docs\":{\"54\":{\"ref\":54,\"tf\":0.001287001287001287},\"57\":{\"ref\":57,\"tf\":0.0047169811320754715},\"58\":{\"ref\":58,\"tf\":0.00273224043715847},\"119\":{\"ref\":119,\"tf\":0.015748031496062992},\"126\":{\"ref\":126,\"tf\":0.011111111111111112},\"129\":{\"ref\":129,\"tf\":0.0034782608695652175},\"134\":{\"ref\":134,\"tf\":0.0011507479861910242}}},\"a\":{\"docs\":{},\"l\":{\"docs\":{\"58\":{\"ref\":58,\"tf\":0.00546448087431694}},\"l\":{\"docs\":{},\"y\":{\"docs\":{},\"(\":{\"docs\":{},\"f\":{\"docs\":{},\"u\":{\"docs\":{},\"n\":{\"docs\":{},\"c\":{\"docs\":{},\"t\":{\"docs\":{\"88\":{\"ref\":88,\"tf\":0.009708737864077669}}}}}}}}}}}},\"e\":{\"docs\":{\"60\":{\"ref\":60,\"tf\":0.0022727272727272726},\"70\":{\"ref\":70,\"tf\":0.023809523809523808},\"115\":{\"ref\":115,\"tf\":0.003246753246753247},\"135\":{\"ref\":135,\"tf\":0.0019305019305019305}}},\"i\":{\"docs\":{},\"s\":{\"docs\":{},\"h\":{\"docs\":{\"71\":{\"ref\":71,\"tf\":0.024},\"133\":{\"ref\":133,\"tf\":0.005025125628140704}}}}}}},\"e\":{\"docs\":{},\"w\":{\"docs\":{\"1\":{\"ref\":1,\"tf\":0.045454545454545456},\"54\":{\"ref\":54,\"tf\":0.001287001287001287},\"56\":{\"ref\":56,\"tf\":0.001594896331738437},\"58\":{\"ref\":58,\"tf\":0.00273224043715847},\"59\":{\"ref\":59,\"tf\":0.002785515320334262},\"72\":{\"ref\":72,\"tf\":0.002331002331002331},\"114\":{\"ref\":114,\"tf\":0.001594896331738437},\"129\":{\"ref\":129,\"tf\":0.0052173913043478265},\"134\":{\"ref\":134,\"tf\":0.0023014959723820483}}},\"l\":{\"docs\":{},\"u\":{\"docs\":{},\"c\":{\"docs\":{},\"i\":{\"docs\":{},\"a\":{\"docs\":{\"38\":{\"ref\":38,\"tf\":0.011627906976744186}}}}}},\"t\":{\"docs\":{\"57\":{\"ref\":57,\"tf\":0.0047169811320754715},\"134\":{\"ref\":134,\"tf\":0.0011507479861910242}}}},\"e\":{\"docs\":{},\"l\":{\"docs\":{\"51\":{\"ref\":51,\"tf\":0.01694915254237288},\"54\":{\"ref\":54,\"tf\":0.001287001287001287},\"57\":{\"ref\":57,\"tf\":0.0023584905660377358},\"59\":{\"ref\":59,\"tf\":0.002785515320334262},\"61\":{\"ref\":61,\"tf\":0.010869565217391304},\"65\":{\"ref\":65,\"tf\":0.05},\"96\":{\"ref\":96,\"tf\":0.017857142857142856},\"104\":{\"ref\":104,\"tf\":0.00423728813559322},\"129\":{\"ref\":129,\"tf\":0.0017391304347826088},\"134\":{\"ref\":134,\"tf\":0.006904487917146145},\"136\":{\"ref\":136,\"tf\":0.005050505050505051}}},\"d\":{\"docs\":{\"131\":{\"ref\":131,\"tf\":2.0555555555555554}},\"b\":{\"docs\":{},\"a\":{\"docs\":{},\"c\":{\"docs\":{},\"k\":{\"docs\":{\"136\":{\"ref\":136,\"tf\":0.005050505050505051}}}}}}}},\"a\":{\"docs\":{},\"r\":{\"docs\":{\"54\":{\"ref\":54,\"tf\":0.001287001287001287}}},\"t\":{\"docs\":{},\"u\":{\"docs\":{},\"r\":{\"docs\":{\"54\":{\"ref\":54,\"tf\":0.001287001287001287},\"74\":{\"ref\":74,\"tf\":0.005988023952095809},\"129\":{\"ref\":129,\"tf\":0.0017391304347826088},\"134\":{\"ref\":134,\"tf\":0.0034522439585730723},\"135\":{\"ref\":135,\"tf\":0.005791505791505791},\"136\":{\"ref\":136,\"tf\":0.005050505050505051}}}}}},\"t\":{\"docs\":{},\"c\":{\"docs\":{},\"h\":{\"docs\":{\"54\":{\"ref\":54,\"tf\":0.001287001287001287},\"84\":{\"ref\":84,\"tf\":0.0036363636363636364},\"131\":{\"ref\":131,\"tf\":2.0555555555555554}}}}}},\"o\":{\"docs\":{},\"o\":{\"docs\":{},\"t\":{\"docs\":{},\"e\":{\"docs\":{},\"r\":{\"docs\":{\"2\":{\"ref\":2,\"tf\":0.025},\"3\":{\"ref\":3,\"tf\":10.096153846153847},\"11\":{\"ref\":11,\"tf\":0.045454545454545456},\"22\":{\"ref\":22,\"tf\":3.40650406504065},\"25\":{\"ref\":25,\"tf\":0.034482758620689655},\"76\":{\"ref\":76,\"tf\":0.03773584905660377},\"99\":{\"ref\":99,\"tf\":0.02127659574468085},\"114\":{\"ref\":114,\"tf\":0.001594896331738437},\"123\":{\"ref\":123,\"tf\":0.0035211267605633804}}}}}},\"n\":{\"docs\":{},\"t\":{\"docs\":{\"51\":{\"ref\":51,\"tf\":0.01694915254237288},\"126\":{\"ref\":126,\"tf\":0.011111111111111112},\"129\":{\"ref\":129,\"tf\":0.008695652173913044}},\"-\":{\"docs\":{},\"p\":{\"docs\":{},\"a\":{\"docs\":{},\"c\":{\"docs\":{},\"k\":{\"docs\":{\"10\":{\"ref\":10,\"tf\":0.023809523809523808},\"16\":{\"ref\":16,\"tf\":0.007352941176470588}}}}}},\"w\":{\"docs\":{},\"e\":{\"docs\":{},\"i\":{\"docs\":{},\"g\":{\"docs\":{},\"h\":{\"docs\":{},\"t\":{\"docs\":{\"15\":{\"ref\":15,\"tf\":0.022727272727272728},\"133\":{\"ref\":133,\"tf\":0.0016750418760469012}}}}}}}},\"f\":{\"docs\":{},\"a\":{\"docs\":{},\"m\":{\"docs\":{},\"i\":{\"docs\":{},\"l\":{\"docs\":{},\"i\":{\"docs\":{\"133\":{\"ref\":133,\"tf\":0.0016750418760469012}}}}}}}},\"s\":{\"docs\":{},\"i\":{\"docs\":{},\"z\":{\"docs\":{\"133\":{\"ref\":133,\"tf\":0.0016750418760469012}}}}}}}},\"u\":{\"docs\":{},\"r\":{\"docs\":{\"43\":{\"ref\":43,\"tf\":0.006944444444444444},\"60\":{\"ref\":60,\"tf\":0.0022727272727272726}},\"t\":{\"docs\":{},\"h\":{\"docs\":{\"16\":{\"ref\":16,\"tf\":0.007352941176470588}}}}},\"n\":{\"docs\":{},\"d\":{\"docs\":{\"58\":{\"ref\":58,\"tf\":0.00546448087431694},\"59\":{\"ref\":59,\"tf\":0.002785515320334262},\"62\":{\"ref\":62,\"tf\":0.041666666666666664},\"68\":{\"ref\":68,\"tf\":0.027777777777777776},\"103\":{\"ref\":103,\"tf\":0.006493506493506494},\"115\":{\"ref\":115,\"tf\":0.003246753246753247},\"121\":{\"ref\":121,\"tf\":0.005813953488372093},\"129\":{\"ref\":129,\"tf\":0.0017391304347826088}},\"a\":{\"docs\":{},\"t\":{\"docs\":{\"57\":{\"ref\":57,\"tf\":0.0023584905660377358}},\"i\":{\"docs\":{},\"o\":{\"docs\":{},\"n\":{\"docs\":{},\"]\":{\"docs\":{},\"(\":{\"docs\":{},\"h\":{\"docs\":{},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"p\":{\"docs\":{},\":\":{\"docs\":{},\"/\":{\"docs\":{},\"/\":{\"docs\":{},\"a\":{\"docs\":{},\"p\":{\"docs\":{},\"a\":{\"docs\":{},\"c\":{\"docs\":{},\"h\":{\"docs\":{},\"e\":{\"docs\":{},\".\":{\"docs\":{},\"o\":{\"docs\":{},\"r\":{\"docs\":{},\"g\":{\"docs\":{\"135\":{\"ref\":135,\"tf\":0.0019305019305019305}}}}}}}}}}}}}}}}}}}}}}}}}}}}},\"r\":{\"docs\":{},\"m\":{\"docs\":{\"20\":{\"ref\":20,\"tf\":0.02040816326530612},\"26\":{\"ref\":26,\"tf\":3.3550724637681157},\"30\":{\"ref\":30,\"tf\":5.054054054054054},\"33\":{\"ref\":33,\"tf\":0.1},\"54\":{\"ref\":54,\"tf\":0.007722007722007722},\"114\":{\"ref\":114,\"tf\":0.006379585326953748},\"134\":{\"ref\":134,\"tf\":0.0011507479861910242}},\"a\":{\"docs\":{},\"t\":{\"docs\":{\"72\":{\"ref\":72,\"tf\":0.002331002331002331}}}},\"i\":{\"docs\":{},\"d\":{\"docs\":{\"134\":{\"ref\":134,\"tf\":0.0011507479861910242}}}}},\"g\":{\"docs\":{},\"e\":{\"docs\":{},\"t\":{\"docs\":{},\"s\":{\"docs\":{},\"c\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"l\":{\"docs\":{},\"l\":{\"docs\":{},\"p\":{\"docs\":{},\"o\":{\"docs\":{},\"s\":{\"docs\":{},\"i\":{\"docs\":{},\"t\":{\"docs\":{\"115\":{\"ref\":115,\"tf\":0.006493506493506494}}}}}}}}}}}}}}}},\"u\":{\"docs\":{},\"m\":{\"docs\":{\"126\":{\"ref\":126,\"tf\":0.011111111111111112},\"127\":{\"ref\":127,\"tf\":0.006622516556291391},\"133\":{\"ref\":133,\"tf\":0.0016750418760469012},\"134\":{\"ref\":134,\"tf\":0.0011507479861910242}},\"]\":{\"docs\":{},\"(\":{\"docs\":{},\"h\":{\"docs\":{},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"p\":{\"docs\":{},\":\":{\"docs\":{},\"/\":{\"docs\":{},\"/\":{\"docs\":{},\"f\":{\"docs\":{},\"o\":{\"docs\":{},\"r\":{\"docs\":{},\"u\":{\"docs\":{},\"m\":{\"docs\":{},\".\":{\"docs\":{},\"i\":{\"docs\":{},\"o\":{\"docs\":{},\"n\":{\"docs\":{},\"i\":{\"docs\":{},\"c\":{\"docs\":{},\"f\":{\"docs\":{},\"r\":{\"docs\":{},\"a\":{\"docs\":{},\"m\":{\"docs\":{},\"e\":{\"docs\":{},\"w\":{\"docs\":{},\"o\":{\"docs\":{},\"r\":{\"docs\":{},\"k\":{\"docs\":{},\".\":{\"docs\":{},\"c\":{\"docs\":{},\"o\":{\"docs\":{},\"m\":{\"docs\":{\"129\":{\"ref\":129,\"tf\":0.0017391304347826088}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},\"k\":{\"docs\":{\"134\":{\"ref\":134,\"tf\":0.0011507479861910242}}}},\"c\":{\"docs\":{},\"u\":{\"docs\":{\"26\":{\"ref\":26,\"tf\":0.021739130434782608},\"103\":{\"ref\":103,\"tf\":0.012987012987012988},\"104\":{\"ref\":104,\"tf\":0.00423728813559322},\"134\":{\"ref\":134,\"tf\":0.0023014959723820483}},\"s\":{\"docs\":{\"57\":{\"ref\":57,\"tf\":0.0023584905660377358},\"61\":{\"ref\":61,\"tf\":0.010869565217391304},\"67\":{\"ref\":67,\"tf\":0.027777777777777776},\"103\":{\"ref\":103,\"tf\":0.01948051948051948}},\"f\":{\"docs\":{},\"i\":{\"docs\":{},\"r\":{\"docs\":{},\"s\":{\"docs\":{},\"t\":{\"docs\":{},\"i\":{\"docs\":{},\"n\":{\"docs\":{},\"p\":{\"docs\":{},\"u\":{\"docs\":{},\"t\":{\"docs\":{\"71\":{\"ref\":71,\"tf\":0.008}}}}}}}}}}}}}}},\"l\":{\"docs\":{},\"l\":{\"docs\":{},\"o\":{\"docs\":{},\"w\":{\"docs\":{\"36\":{\"ref\":36,\"tf\":0.017857142857142856},\"52\":{\"ref\":52,\"tf\":0.010416666666666666},\"54\":{\"ref\":54,\"tf\":0.001287001287001287},\"56\":{\"ref\":56,\"tf\":0.009569377990430622},\"58\":{\"ref\":58,\"tf\":0.00273224043715847},\"71\":{\"ref\":71,\"tf\":0.008},\"115\":{\"ref\":115,\"tf\":0.006493506493506494},\"119\":{\"ref\":119,\"tf\":0.003937007874015748},\"127\":{\"ref\":127,\"tf\":0.013245033112582781},\"132\":{\"ref\":132,\"tf\":0.01282051282051282},\"134\":{\"ref\":134,\"tf\":0.0011507479861910242}},\"u\":{\"docs\":{},\"p\":{\"docs\":{\"134\":{\"ref\":134,\"tf\":0.0011507479861910242}}}}}}},\"d\":{\"docs\":{},\"e\":{\"docs\":{},\"r\":{\"docs\":{\"56\":{\"ref\":56,\"tf\":0.012759170653907496},\"60\":{\"ref\":60,\"tf\":0.015909090909090907}}}}}},\"e\":{\"docs\":{\"134\":{\"ref\":134,\"tf\":0.0011507479861910242}}}},\"u\":{\"docs\":{},\"l\":{\"docs\":{},\"l\":{\"docs\":{\"4\":{\"ref\":4,\"tf\":0.045454545454545456},\"6\":{\"ref\":6,\"tf\":2.5476190476190474},\"18\":{\"ref\":18,\"tf\":0.02},\"20\":{\"ref\":20,\"tf\":0.02040816326530612},\"61\":{\"ref\":61,\"tf\":0.010869565217391304},\"72\":{\"ref\":72,\"tf\":0.002331002331002331},\"129\":{\"ref\":129,\"tf\":0.0017391304347826088},\"136\":{\"ref\":136,\"tf\":0.005050505050505051}},\"s\":{\"docs\":{},\"c\":{\"docs\":{},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\"e\":{\"docs\":{},\"n\":{\"docs\":{\"99\":{\"ref\":99,\"tf\":0.02127659574468085},\"103\":{\"ref\":103,\"tf\":0.006493506493506494},\"121\":{\"ref\":121,\"tf\":0.01744186046511628},\"128\":{\"ref\":128,\"tf\":0.017857142857142856},\"132\":{\"ref\":132,\"tf\":0.05128205128205128}},\"(\":{\"docs\":{},\"[\":{\"docs\":{},\"s\":{\"docs\":{},\"h\":{\"docs\":{},\"o\":{\"docs\":{},\"w\":{\"docs\":{},\"f\":{\"docs\":{},\"u\":{\"docs\":{},\"l\":{\"docs\":{},\"l\":{\"docs\":{},\"s\":{\"docs\":{},\"c\":{\"docs\":{},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\"e\":{\"docs\":{},\"n\":{\"docs\":{\"121\":{\"ref\":121,\"tf\":0.005813953488372093}}}}}}}}}}}}}}}}}}}}}}}},\"i\":{\"docs\":{\"130\":{\"ref\":130,\"tf\":0.0043859649122807015}}}}},\"r\":{\"docs\":{},\"t\":{\"docs\":{},\"h\":{\"docs\":{},\"e\":{\"docs\":{},\"r\":{\"docs\":{\"48\":{\"ref\":48,\"tf\":0.011627906976744186}}},\"s\":{\"docs\":{},\"t\":{\"docs\":{\"60\":{\"ref\":60,\"tf\":0.0022727272727272726}}}}}}}},\"n\":{\"docs\":{},\"c\":{\"docs\":{},\"t\":{\"docs\":{},\"i\":{\"docs\":{},\"o\":{\"docs\":{},\"n\":{\"docs\":{\"54\":{\"ref\":54,\"tf\":0.014157014157014158},\"57\":{\"ref\":57,\"tf\":0.0023584905660377358},\"59\":{\"ref\":59,\"tf\":0.002785515320334262},\"60\":{\"ref\":60,\"tf\":0.0022727272727272726},\"63\":{\"ref\":63,\"tf\":0.024390243902439025},\"72\":{\"ref\":72,\"tf\":0.011655011655011656},\"78\":{\"ref\":78,\"tf\":0.0449438202247191},\"81\":{\"ref\":81,\"tf\":0.06060606060606061},\"88\":{\"ref\":88,\"tf\":0.009708737864077669},\"89\":{\"ref\":89,\"tf\":0.022727272727272728},\"93\":{\"ref\":93,\"tf\":0.028169014084507043},\"105\":{\"ref\":105,\"tf\":0.023391812865497075},\"106\":{\"ref\":106,\"tf\":0.05333333333333334},\"107\":{\"ref\":107,\"tf\":0.02531645569620253},\"108\":{\"ref\":108,\"tf\":0.014492753623188406},\"109\":{\"ref\":109,\"tf\":0.017094017094017096},\"110\":{\"ref\":110,\"tf\":0.02040816326530612},\"111\":{\"ref\":111,\"tf\":0.03759398496240601},\"112\":{\"ref\":112,\"tf\":0.0058823529411764705},\"113\":{\"ref\":113,\"tf\":0.05673758865248227},\"114\":{\"ref\":114,\"tf\":0.017543859649122806},\"115\":{\"ref\":115,\"tf\":0.01948051948051948},\"116\":{\"ref\":116,\"tf\":0.011111111111111112},\"117\":{\"ref\":117,\"tf\":0.015151515151515152},\"118\":{\"ref\":118,\"tf\":0.009523809523809525},\"119\":{\"ref\":119,\"tf\":0.04330708661417323},\"120\":{\"ref\":120,\"tf\":0.018867924528301886},\"121\":{\"ref\":121,\"tf\":0.011627906976744186},\"123\":{\"ref\":123,\"tf\":0.0035211267605633804},\"128\":{\"ref\":128,\"tf\":0.017857142857142856},\"133\":{\"ref\":133,\"tf\":0.0033500837520938024},\"135\":{\"ref\":135,\"tf\":0.003861003861003861},\"136\":{\"ref\":136,\"tf\":0.010101010101010102}},\"(\":{\"docs\":{\"108\":{\"ref\":108,\"tf\":0.028985507246376812},\"114\":{\"ref\":114,\"tf\":0.004784688995215311},\"120\":{\"ref\":120,\"tf\":0.012578616352201259},\"133\":{\"ref\":133,\"tf\":0.006700167504187605},\"136\":{\"ref\":136,\"tf\":0.010101010101010102}},\"$\":{\"docs\":{},\"s\":{\"docs\":{},\"c\":{\"docs\":{},\"o\":{\"docs\":{},\"p\":{\"docs\":{\"54\":{\"ref\":54,\"tf\":0.003861003861003861},\"88\":{\"ref\":88,\"tf\":0.009708737864077669},\"110\":{\"ref\":110,\"tf\":0.01020408163265306},\"111\":{\"ref\":111,\"tf\":0.007518796992481203},\"130\":{\"ref\":130,\"tf\":0.008771929824561403},\"132\":{\"ref\":132,\"tf\":0.01282051282051282},\"133\":{\"ref\":133,\"tf\":0.0016750418760469012}}}}}},\"t\":{\"docs\":{},\"i\":{\"docs\":{},\"m\":{\"docs\":{},\"e\":{\"docs\":{},\"o\":{\"docs\":{},\"u\":{\"docs\":{},\"t\":{\"docs\":{\"130\":{\"ref\":130,\"tf\":0.0043859649122807015}}}}}}}}}},\"i\":{\"docs\":{},\"n\":{\"docs\":{},\"d\":{\"docs\":{},\"e\":{\"docs\":{},\"x\":{\"docs\":{\"54\":{\"ref\":54,\"tf\":0.001287001287001287},\"105\":{\"ref\":105,\"tf\":0.005847953216374269},\"118\":{\"ref\":118,\"tf\":0.009523809523809525},\"133\":{\"ref\":133,\"tf\":0.0016750418760469012}}}}}},\"t\":{\"docs\":{},\"e\":{\"docs\":{},\"m\":{\"docs\":{\"72\":{\"ref\":72,\"tf\":0.002331002331002331},\"89\":{\"ref\":89,\"tf\":0.022727272727272728}}}}}},\"m\":{\"docs\":{},\"o\":{\"docs\":{},\"d\":{\"docs\":{\"54\":{\"ref\":54,\"tf\":0.002574002574002574}}}}},\"p\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"j\":{\"docs\":{},\"e\":{\"docs\":{},\"c\":{\"docs\":{},\"t\":{\"docs\":{\"54\":{\"ref\":54,\"tf\":0.002574002574002574}},\"t\":{\"docs\":{},\"i\":{\"docs\":{},\"t\":{\"docs\":{},\"l\":{\"docs\":{\"54\":{\"ref\":54,\"tf\":0.002574002574002574}}}}}}}}}}}}},\"t\":{\"docs\":{},\"a\":{\"docs\":{},\"s\":{\"docs\":{},\"k\":{\"docs\":{\"54\":{\"ref\":54,\"tf\":0.002574002574002574}}}}},\"i\":{\"docs\":{},\"t\":{\"docs\":{},\"l\":{\"docs\":{\"112\":{\"ref\":112,\"tf\":0.0058823529411764705}}}}}},\"a\":{\"docs\":{},\"m\":{\"docs\":{},\"t\":{\"docs\":{\"106\":{\"ref\":106,\"tf\":0.013333333333333334}}}}},\"r\":{\"docs\":{},\"a\":{\"docs\":{},\"t\":{\"docs\":{},\"i\":{\"docs\":{},\"o\":{\"docs\":{\"130\":{\"ref\":130,\"tf\":0.0043859649122807015}}}}}}}}}}}}}},\"t\":{\"docs\":{},\"u\":{\"docs\":{},\"r\":{\"docs\":{\"61\":{\"ref\":61,\"tf\":0.021739130434782608},\"70\":{\"ref\":70,\"tf\":0.023809523809523808},\"135\":{\"ref\":135,\"tf\":0.005791505791505791}}}}}},\"a\":{\"docs\":{},\"v\":{\"docs\":{},\"o\":{\"docs\":{},\"r\":{\"docs\":{},\"i\":{\"docs\":{},\"t\":{\"docs\":{\"10\":{\"ref\":10,\"tf\":0.047619047619047616},\"39\":{\"ref\":39,\"tf\":0.02531645569620253},\"41\":{\"ref\":41,\"tf\":0.125},\"42\":{\"ref\":42,\"tf\":0.14285714285714285},\"61\":{\"ref\":61,\"tf\":0.010869565217391304}}}}}}},\"s\":{\"docs\":{},\"t\":{\"docs\":{\"21\":{\"ref\":21,\"tf\":0.00980392156862745},\"84\":{\"ref\":84,\"tf\":0.0036363636363636364},\"104\":{\"ref\":104,\"tf\":0.00423728813559322}},\"e\":{\"docs\":{},\"r\":{\"docs\":{\"60\":{\"ref\":60,\"tf\":0.0022727272727272726}}}},\"c\":{\"docs\":{},\"l\":{\"docs\":{},\"i\":{\"docs\":{},\"c\":{\"docs\":{},\"k\":{\"docs\":{},\"]\":{\"docs\":{},\"(\":{\"docs\":{},\"h\":{\"docs\":{},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"p\":{\"docs\":{},\"s\":{\"docs\":{},\":\":{\"docs\":{},\"/\":{\"docs\":{},\"/\":{\"docs\":{},\"g\":{\"docs\":{},\"i\":{\"docs\":{},\"t\":{\"docs\":{},\"h\":{\"docs\":{},\"u\":{\"docs\":{},\"b\":{\"docs\":{},\".\":{\"docs\":{},\"c\":{\"docs\":{},\"o\":{\"docs\":{},\"m\":{\"docs\":{},\"/\":{\"docs\":{},\"f\":{\"docs\":{},\"t\":{\"docs\":{},\"l\":{\"docs\":{},\"a\":{\"docs\":{},\"b\":{\"docs\":{},\"s\":{\"docs\":{},\"/\":{\"docs\":{},\"f\":{\"docs\":{},\"a\":{\"docs\":{},\"s\":{\"docs\":{},\"t\":{\"docs\":{},\"c\":{\"docs\":{},\"l\":{\"docs\":{},\"i\":{\"docs\":{},\"c\":{\"docs\":{},\"k\":{\"docs\":{\"104\":{\"ref\":104,\"tf\":0.00423728813559322}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},\".\":{\"docs\":{},\"j\":{\"docs\":{\"134\":{\"ref\":134,\"tf\":0.0034522439585730723}}}}}}}}}}},\"c\":{\"docs\":{},\"e\":{\"docs\":{\"134\":{\"ref\":134,\"tf\":0.0011507479861910242}},\"b\":{\"docs\":{},\"o\":{\"docs\":{},\"o\":{\"docs\":{},\"k\":{\"docs\":{\"25\":{\"ref\":25,\"tf\":0.022988505747126436}}}}}}},\"t\":{\"docs\":{\"56\":{\"ref\":56,\"tf\":0.001594896331738437}},\"o\":{\"docs\":{},\"r\":{\"docs\":{},\"i\":{\"docs\":{\"54\":{\"ref\":54,\"tf\":0.001287001287001287}}},\"y\":{\"docs\":{},\"(\":{\"docs\":{},\"'\":{\"docs\":{},\"p\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"j\":{\"docs\":{},\"e\":{\"docs\":{},\"c\":{\"docs\":{},\"t\":{\"docs\":{\"54\":{\"ref\":54,\"tf\":0.001287001287001287}}}}}}}}}}}}}}}},\"d\":{\"docs\":{},\"e\":{\"docs\":{\"128\":{\"ref\":128,\"tf\":0.017857142857142856},\"130\":{\"ref\":130,\"tf\":2.539473684210526}},\"-\":{\"docs\":{},\"i\":{\"docs\":{},\"n\":{\"docs\":{\"53\":{\"ref\":53,\"tf\":0.041666666666666664}}}},\"b\":{\"docs\":{},\"a\":{\"docs\":{},\"r\":{\"docs\":{\"130\":{\"ref\":130,\"tf\":0.013157894736842105}}}}}},\"b\":{\"docs\":{},\"a\":{\"docs\":{},\"r\":{\"docs\":{\"130\":{\"ref\":130,\"tf\":0.0043859649122807015}}}}}}},\"i\":{\"docs\":{},\"r\":{\"docs\":{},\"l\":{\"docs\":{},\"i\":{\"docs\":{\"57\":{\"ref\":57,\"tf\":0.0023584905660377358}}}}}},\"m\":{\"docs\":{},\"i\":{\"docs\":{},\"l\":{\"docs\":{},\"i\":{\"docs\":{},\"a\":{\"docs\":{},\"r\":{\"docs\":{\"57\":{\"ref\":57,\"tf\":0.0023584905660377358},\"126\":{\"ref\":126,\"tf\":0.011111111111111112}}}}}}}},\"l\":{\"docs\":{},\"s\":{\"docs\":{\"58\":{\"ref\":58,\"tf\":0.00273224043715847},\"71\":{\"ref\":71,\"tf\":0.008},\"74\":{\"ref\":74,\"tf\":0.011976047904191617},\"105\":{\"ref\":105,\"tf\":0.011695906432748537},\"106\":{\"ref\":106,\"tf\":0.013333333333333334},\"114\":{\"ref\":114,\"tf\":0.001594896331738437},\"118\":{\"ref\":118,\"tf\":0.009523809523809525},\"121\":{\"ref\":121,\"tf\":0.005813953488372093}}},\"l\":{\"docs\":{},\"b\":{\"docs\":{},\"a\":{\"docs\":{},\"c\":{\"docs\":{},\"k\":{\"docs\":{\"133\":{\"ref\":133,\"tf\":0.0016750418760469012}}}}}}}},\"r\":{\"docs\":{\"104\":{\"ref\":104,\"tf\":0.00423728813559322},\"134\":{\"ref\":134,\"tf\":0.0011507479861910242}}}},\"r\":{\"docs\":{},\"i\":{\"docs\":{},\"e\":{\"docs\":{},\"n\":{\"docs\":{},\"d\":{\"docs\":{\"16\":{\"ref\":16,\"tf\":0.014705882352941176}}}}},\"s\":{\"docs\":{},\"b\":{\"docs\":{},\"i\":{\"docs\":{\"54\":{\"ref\":54,\"tf\":0.001287001287001287}}}}}},\"e\":{\"docs\":{},\"e\":{\"docs\":{\"51\":{\"ref\":51,\"tf\":0.03389830508474576},\"58\":{\"ref\":58,\"tf\":0.00273224043715847},\"59\":{\"ref\":59,\"tf\":0.002785515320334262},\"68\":{\"ref\":68,\"tf\":0.027777777777777776},\"129\":{\"ref\":129,\"tf\":0.0017391304347826088},\"134\":{\"ref\":134,\"tf\":0.0011507479861910242}}},\"s\":{\"docs\":{},\"h\":{\"docs\":{\"127\":{\"ref\":127,\"tf\":0.006622516556291391}}}}},\"a\":{\"docs\":{},\"m\":{\"docs\":{},\"e\":{\"docs\":{\"119\":{\"ref\":119,\"tf\":0.007874015748031496}},\"w\":{\"docs\":{},\"o\":{\"docs\":{},\"r\":{\"docs\":{},\"k\":{\"docs\":{\"57\":{\"ref\":57,\"tf\":0.025943396226415096},\"59\":{\"ref\":59,\"tf\":0.002785515320334262},\"61\":{\"ref\":61,\"tf\":0.05434782608695652},\"64\":{\"ref\":64,\"tf\":0.0625},\"68\":{\"ref\":68,\"tf\":0.027777777777777776},\"70\":{\"ref\":70,\"tf\":0.047619047619047616},\"126\":{\"ref\":126,\"tf\":0.022222222222222223},\"129\":{\"ref\":129,\"tf\":0.0017391304347826088},\"134\":{\"ref\":134,\"tf\":0.0023014959723820483}},\"'\":{\"docs\":{\"61\":{\"ref\":61,\"tf\":0.010869565217391304},\"69\":{\"ref\":69,\"tf\":0.05}}}}}}}}}},\"o\":{\"docs\":{},\"n\":{\"docs\":{},\"t\":{\"docs\":{\"61\":{\"ref\":61,\"tf\":0.010869565217391304}},\"-\":{\"docs\":{},\"e\":{\"docs\":{},\"n\":{\"docs\":{},\"d\":{\"docs\":{\"57\":{\"ref\":57,\"tf\":0.0023584905660377358}}}}}}}},\"m\":{\"docs\":{},\"i\":{\"docs\":{},\"n\":{\"docs\":{},\"d\":{\"docs\":{},\"e\":{\"docs\":{},\"x\":{\"docs\":{\"89\":{\"ref\":89,\"tf\":0.045454545454545456}}}}}}},\"t\":{\"docs\":{},\"e\":{\"docs\":{},\"m\":{\"docs\":{},\"p\":{\"docs\":{},\"l\":{\"docs\":{},\"a\":{\"docs\":{},\"t\":{\"docs\":{},\"e\":{\"docs\":{},\"(\":{\"docs\":{},\"t\":{\"docs\":{},\"e\":{\"docs\":{},\"m\":{\"docs\":{},\"p\":{\"docs\":{},\"l\":{\"docs\":{},\"a\":{\"docs\":{},\"t\":{\"docs\":{},\"e\":{\"docs\":{},\"s\":{\"docs\":{},\"t\":{\"docs\":{},\"r\":{\"docs\":{\"111\":{\"ref\":111,\"tf\":0.007518796992481203}}}}}}}}}}}}}},\"u\":{\"docs\":{},\"r\":{\"docs\":{},\"l\":{\"docs\":{},\"(\":{\"docs\":{},\"t\":{\"docs\":{},\"e\":{\"docs\":{},\"m\":{\"docs\":{},\"p\":{\"docs\":{},\"l\":{\"docs\":{},\"a\":{\"docs\":{},\"t\":{\"docs\":{},\"e\":{\"docs\":{},\"u\":{\"docs\":{},\"r\":{\"docs\":{},\"l\":{\"docs\":{\"111\":{\"ref\":111,\"tf\":0.007518796992481203}}}}}}}}}}}}}}}}}}}}}}}}}}}},\"l\":{\"docs\":{},\"e\":{\"docs\":{},\"x\":{\"docs\":{},\"i\":{\"docs\":{},\"b\":{\"docs\":{},\"l\":{\"docs\":{\"21\":{\"ref\":21,\"tf\":0.00980392156862745},\"43\":{\"ref\":43,\"tf\":0.006944444444444444},\"50\":{\"ref\":50,\"tf\":0.017857142857142856},\"65\":{\"ref\":65,\"tf\":0.025},\"84\":{\"ref\":84,\"tf\":0.0036363636363636364},\"114\":{\"ref\":114,\"tf\":0.001594896331738437}}}}},\"b\":{\"docs\":{},\"o\":{\"docs\":{},\"x\":{\"docs\":{\"43\":{\"ref\":43,\"tf\":0.006944444444444444},\"44\":{\"ref\":44,\"tf\":0.018518518518518517}},\"'\":{\"docs\":{\"47\":{\"ref\":47,\"tf\":0.01}}}}}}},\"s\":{\"docs\":{},\"h\":{\"docs\":{\"134\":{\"ref\":134,\"tf\":0.0011507479861910242}}}}},\"a\":{\"docs\":{},\"s\":{\"docs\":{},\"h\":{\"docs\":{},\"p\":{\"docs\":{},\"l\":{\"docs\":{},\"a\":{\"docs\":{},\"y\":{\"docs\":{\"34\":{\"ref\":34,\"tf\":0.016666666666666666}}}}}}}},\"g\":{\"docs\":{\"54\":{\"ref\":54,\"tf\":0.001287001287001287},\"133\":{\"ref\":133,\"tf\":0.0033500837520938024}}}},\"u\":{\"docs\":{},\"x\":{\"docs\":{\"35\":{\"ref\":35,\"tf\":0.03636363636363636}}}},\"o\":{\"docs\":{},\"a\":{\"docs\":{},\"t\":{\"docs\":{\"99\":{\"ref\":99,\"tf\":0.02127659574468085},\"116\":{\"ref\":116,\"tf\":0.005555555555555556}}}}}},\"f\":{\"docs\":{},\"f\":{\"docs\":{\"129\":{\"ref\":129,\"tf\":0.0034782608695652175},\"133\":{\"ref\":133,\"tf\":0.0016750418760469012}}}}},\"h\":{\"1\":{\"docs\":{\"2\":{\"ref\":2,\"tf\":0.025},\"54\":{\"ref\":54,\"tf\":0.001287001287001287},\"111\":{\"ref\":111,\"tf\":0.007518796992481203}}},\"2\":{\"docs\":{\"2\":{\"ref\":2,\"tf\":0.025}}},\"3\":{\"docs\":{\"2\":{\"ref\":2,\"tf\":0.025}},\">\":{\"docs\":{},\"a\":{\"docs\":{},\"n\":{\"docs\":{},\"i\":{\"docs\":{\"133\":{\"ref\":133,\"tf\":0.0016750418760469012}}}}},\"t\":{\"docs\":{},\"h\":{\"docs\":{},\"a\":{\"docs\":{},\"n\":{\"docs\":{},\"k\":{\"docs\":{\"133\":{\"ref\":133,\"tf\":0.0016750418760469012}}}}}}},\"u\":{\"docs\":{},\"s\":{\"docs\":{},\"e\":{\"docs\":{\"133\":{\"ref\":133,\"tf\":0.0016750418760469012}}}}}}},\"4\":{\"docs\":{\"2\":{\"ref\":2,\"tf\":0.025}}},\"5\":{\"docs\":{\"2\":{\"ref\":2,\"tf\":0.025}},\">\":{\"docs\":{},\"j\":{\"docs\":{},\"u\":{\"docs\":{},\"s\":{\"docs\":{},\"t\":{\"docs\":{\"133\":{\"ref\":133,\"tf\":0.0016750418760469012}}}}}}}},\"6\":{\"docs\":{\"2\":{\"ref\":2,\"tf\":0.025}}},\"docs\":{},\"e\":{\"docs\":{},\"a\":{\"docs\":{},\"d\":{\"docs\":{\"127\":{\"ref\":127,\"tf\":0.006622516556291391}},\"e\":{\"docs\":{},\"r\":{\"docs\":{\"0\":{\"ref\":0,\"tf\":0.0967741935483871},\"1\":{\"ref\":1,\"tf\":3.56060606060606},\"2\":{\"ref\":2,\"tf\":0.025},\"3\":{\"ref\":3,\"tf\":0.038461538461538464},\"4\":{\"ref\":4,\"tf\":0.022727272727272728},\"11\":{\"ref\":11,\"tf\":0.09090909090909091},\"12\":{\"ref\":12,\"tf\":3.483333333333333},\"13\":{\"ref\":13,\"tf\":0.019230769230769232},\"22\":{\"ref\":22,\"tf\":3.40650406504065},\"25\":{\"ref\":25,\"tf\":0.022988505747126436},\"33\":{\"ref\":33,\"tf\":5.1},\"54\":{\"ref\":54,\"tf\":0.005148005148005148},\"59\":{\"ref\":59,\"tf\":0.002785515320334262},\"77\":{\"ref\":77,\"tf\":0.03773584905660377},\"82\":{\"ref\":82,\"tf\":0.0078125},\"84\":{\"ref\":84,\"tf\":0.0036363636363636364},\"103\":{\"ref\":103,\"tf\":0.012987012987012988},\"123\":{\"ref\":123,\"tf\":0.0035211267605633804},\"130\":{\"ref\":130,\"tf\":2.513157894736842},\"133\":{\"ref\":133,\"tf\":0.0033500837520938024}},\"b\":{\"docs\":{},\"a\":{\"docs\":{},\"r\":{\"docs\":{},\"-\":{\"docs\":{},\"l\":{\"docs\":{},\"i\":{\"docs\":{},\"g\":{\"docs\":{},\"h\":{\"docs\":{},\"t\":{\"docs\":{},\"b\":{\"docs\":{},\"a\":{\"docs\":{},\"r\":{\"docs\":{},\"-\":{\"docs\":{},\"s\":{\"docs\":{},\"t\":{\"docs\":{},\"a\":{\"docs\":{},\"b\":{\"docs\":{},\"l\":{\"docs\":{},\"e\":{\"docs\":{},\"b\":{\"docs\":{},\"a\":{\"docs\":{},\"r\":{\"docs\":{},\"-\":{\"docs\":{},\"p\":{\"docs\":{},\"o\":{\"docs\":{},\"s\":{\"docs\":{},\"i\":{\"docs\":{},\"t\":{\"docs\":{},\"i\":{\"docs\":{},\"v\":{\"docs\":{},\"e\":{\"docs\":{},\"b\":{\"docs\":{},\"a\":{\"docs\":{},\"r\":{\"docs\":{},\"-\":{\"docs\":{},\"c\":{\"docs\":{},\"a\":{\"docs\":{},\"l\":{\"docs\":{},\"m\":{\"docs\":{},\"b\":{\"docs\":{},\"a\":{\"docs\":{},\"r\":{\"docs\":{},\"-\":{\"docs\":{},\"b\":{\"docs\":{},\"a\":{\"docs\":{},\"l\":{\"docs\":{},\"a\":{\"docs\":{},\"n\":{\"docs\":{},\"c\":{\"docs\":{},\"e\":{\"docs\":{},\"d\":{\"docs\":{},\"b\":{\"docs\":{},\"a\":{\"docs\":{},\"r\":{\"docs\":{},\"-\":{\"docs\":{},\"e\":{\"docs\":{},\"n\":{\"docs\":{},\"e\":{\"docs\":{},\"r\":{\"docs\":{},\"g\":{\"docs\":{},\"i\":{\"docs\":{},\"z\":{\"docs\":{},\"e\":{\"docs\":{},\"d\":{\"docs\":{},\"b\":{\"docs\":{},\"a\":{\"docs\":{},\"r\":{\"docs\":{},\"-\":{\"docs\":{},\"a\":{\"docs\":{},\"s\":{\"docs\":{},\"s\":{\"docs\":{},\"e\":{\"docs\":{},\"r\":{\"docs\":{},\"t\":{\"docs\":{},\"i\":{\"docs\":{},\"v\":{\"docs\":{},\"e\":{\"docs\":{},\"b\":{\"docs\":{},\"a\":{\"docs\":{},\"r\":{\"docs\":{},\"-\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"y\":{\"docs\":{},\"a\":{\"docs\":{},\"l\":{\"docs\":{},\"b\":{\"docs\":{},\"a\":{\"docs\":{},\"r\":{\"docs\":{},\"-\":{\"docs\":{},\"d\":{\"docs\":{},\"a\":{\"docs\":{},\"r\":{\"docs\":{},\"k\":{\"docs\":{\"0\":{\"ref\":0,\"tf\":10}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},\"h\":{\"docs\":{},\"e\":{\"docs\":{},\"a\":{\"docs\":{},\"d\":{\"docs\":{},\"e\":{\"docs\":{},\"r\":{\"docs\":{},\"s\":{\"docs\":{},\"u\":{\"docs\":{},\"b\":{\"docs\":{\"1\":{\"ref\":1,\"tf\":3.333333333333333}}}}}}}}}}},\"s\":{\"docs\":{},\"h\":{\"docs\":{},\"e\":{\"docs\":{},\"a\":{\"docs\":{},\"d\":{\"docs\":{\"11\":{\"ref\":11,\"tf\":3.333333333333333}}}}}}}}}},\"v\":{\"docs\":{},\"i\":{\"docs\":{},\"l\":{\"docs\":{},\"i\":{\"docs\":{\"134\":{\"ref\":134,\"tf\":0.0011507479861910242}}}}}}},\"i\":{\"docs\":{\"134\":{\"ref\":134,\"tf\":0.0011507479861910242}},\"g\":{\"docs\":{},\"h\":{\"docs\":{},\"t\":{\"docs\":{\"19\":{\"ref\":19,\"tf\":0.02},\"47\":{\"ref\":47,\"tf\":0.01},\"72\":{\"ref\":72,\"tf\":0.011655011655011656},\"119\":{\"ref\":119,\"tf\":0.007874015748031496},\"129\":{\"ref\":129,\"tf\":0.0017391304347826088},\"130\":{\"ref\":130,\"tf\":0.0043859649122807015},\"133\":{\"ref\":133,\"tf\":0.0016750418760469012}}}}}},\"r\":{\"docs\":{},\"e\":{\"docs\":{\"25\":{\"ref\":25,\"tf\":0.011494252873563218},\"43\":{\"ref\":43,\"tf\":0.006944444444444444},\"54\":{\"ref\":54,\"tf\":0.002574002574002574},\"56\":{\"ref\":56,\"tf\":0.003189792663476874},\"58\":{\"ref\":58,\"tf\":0.00273224043715847},\"68\":{\"ref\":68,\"tf\":0.027777777777777776},\"72\":{\"ref\":72,\"tf\":0.004662004662004662},\"83\":{\"ref\":83,\"tf\":0.02127659574468085},\"84\":{\"ref\":84,\"tf\":0.0036363636363636364},\"115\":{\"ref\":115,\"tf\":0.003246753246753247},\"129\":{\"ref\":129,\"tf\":0.0034782608695652175},\"134\":{\"ref\":134,\"tf\":0.0023014959723820483},\"135\":{\"ref\":135,\"tf\":0.0019305019305019305}},\"'\":{\"docs\":{\"134\":{\"ref\":134,\"tf\":0.0023014959723820483}}}}},\"l\":{\"docs\":{},\"p\":{\"docs\":{\"49\":{\"ref\":49,\"tf\":0.08333333333333333},\"50\":{\"ref\":50,\"tf\":0.008928571428571428},\"52\":{\"ref\":52,\"tf\":0.010416666666666666},\"56\":{\"ref\":56,\"tf\":0.004784688995215311},\"61\":{\"ref\":61,\"tf\":0.010869565217391304},\"69\":{\"ref\":69,\"tf\":0.05},\"84\":{\"ref\":84,\"tf\":0.0036363636363636364},\"126\":{\"ref\":126,\"tf\":0.011111111111111112},\"133\":{\"ref\":133,\"tf\":0.0016750418760469012},\"134\":{\"ref\":134,\"tf\":0.0011507479861910242},\"135\":{\"ref\":135,\"tf\":0.0019305019305019305}}},\"l\":{\"docs\":{},\"o\":{\"docs\":{\"56\":{\"ref\":56,\"tf\":0.004784688995215311},\"75\":{\"ref\":75,\"tf\":0.08333333333333333},\"79\":{\"ref\":79,\"tf\":0.125},\"82\":{\"ref\":82,\"tf\":0.0078125},\"98\":{\"ref\":98,\"tf\":0.018867924528301886},\"111\":{\"ref\":111,\"tf\":0.007518796992481203},\"118\":{\"ref\":118,\"tf\":0.01904761904761905}},\"w\":{\"docs\":{},\"o\":{\"docs\":{},\"r\":{\"docs\":{},\"l\":{\"docs\":{},\"d\":{\"docs\":{},\"-\":{\"docs\":{},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\"l\":{\"docs\":{},\"e\":{\"docs\":{},\"a\":{\"docs\":{},\"s\":{\"docs\":{},\"e\":{\"docs\":{},\"-\":{\"docs\":{},\"u\":{\"docs\":{},\"n\":{\"docs\":{},\"s\":{\"docs\":{},\"i\":{\"docs\":{},\"g\":{\"docs\":{},\"n\":{\"docs\":{},\"e\":{\"docs\":{},\"d\":{\"docs\":{},\".\":{\"docs\":{},\"a\":{\"docs\":{},\"p\":{\"docs\":{},\"k\":{\"docs\":{\"58\":{\"ref\":58,\"tf\":0.00546448087431694}}}}}}}}}}}}}}}}}}}}}}},\".\":{\"docs\":{},\"a\":{\"docs\":{},\"p\":{\"docs\":{},\"k\":{\"docs\":{\"58\":{\"ref\":58,\"tf\":0.00546448087431694}}}}}}}}}}}}},\"v\":{\"docs\":{},\"e\":{\"docs\":{},\"t\":{\"docs\":{},\"i\":{\"docs\":{},\"c\":{\"docs\":{},\"a\":{\"docs\":{\"133\":{\"ref\":133,\"tf\":0.005025125628140704}},\"n\":{\"docs\":{},\"e\":{\"docs\":{},\"u\":{\"docs\":{},\"e\":{\"docs\":{},\"-\":{\"docs\":{},\"l\":{\"docs\":{},\"i\":{\"docs\":{},\"g\":{\"docs\":{},\"h\":{\"docs\":{},\"t\":{\"docs\":{\"133\":{\"ref\":133,\"tf\":0.0016750418760469012}}}}}}}}}}}}}}}}}}}},\"o\":{\"docs\":{},\"m\":{\"docs\":{},\"e\":{\"docs\":{\"10\":{\"ref\":10,\"tf\":0.047619047619047616},\"23\":{\"ref\":23,\"tf\":0.06060606060606061},\"39\":{\"ref\":39,\"tf\":0.02531645569620253},\"41\":{\"ref\":41,\"tf\":0.125},\"42\":{\"ref\":42,\"tf\":0.14285714285714285},\"100\":{\"ref\":100,\"tf\":0.041666666666666664},\"102\":{\"ref\":102,\"tf\":0.020833333333333332}},\"p\":{\"docs\":{},\"a\":{\"docs\":{},\"g\":{\"docs\":{\"51\":{\"ref\":51,\"tf\":0.01694915254237288}}}}},\".\":{\"docs\":{},\"h\":{\"docs\":{},\"t\":{\"docs\":{},\"m\":{\"docs\":{},\"l\":{\"docs\":{\"84\":{\"ref\":84,\"tf\":0.01090909090909091}}}}}}}}},\"t\":{\"docs\":{},\"h\":{\"docs\":{\"38\":{\"ref\":38,\"tf\":0.011627906976744186}}}},\"r\":{\"docs\":{},\"i\":{\"docs\":{},\"z\":{\"docs\":{},\"o\":{\"docs\":{},\"n\":{\"docs\":{},\"t\":{\"docs\":{\"39\":{\"ref\":39,\"tf\":0.012658227848101266},\"74\":{\"ref\":74,\"tf\":0.005988023952095809},\"90\":{\"ref\":90,\"tf\":0.010416666666666666}}}}}}}},\"p\":{\"docs\":{},\"e\":{\"docs\":{\"54\":{\"ref\":54,\"tf\":0.001287001287001287}}}},\"s\":{\"docs\":{},\"t\":{\"docs\":{\"60\":{\"ref\":60,\"tf\":0.0022727272727272726}}}},\"l\":{\"docs\":{},\"d\":{\"docs\":{\"104\":{\"ref\":104,\"tf\":0.00423728813559322},\"120\":{\"ref\":120,\"tf\":0.006289308176100629},\"134\":{\"ref\":134,\"tf\":0.0011507479861910242}}}}},\"u\":{\"docs\":{},\"n\":{\"docs\":{},\"t\":{\"docs\":{},\"e\":{\"docs\":{},\"r\":{\"docs\":{\"14\":{\"ref\":14,\"tf\":0.011494252873563218}}}}}},\"g\":{\"docs\":{},\"e\":{\"docs\":{\"134\":{\"ref\":134,\"tf\":0.0011507479861910242}}}}},\"a\":{\"docs\":{},\"r\":{\"docs\":{},\"d\":{\"docs\":{\"15\":{\"ref\":15,\"tf\":0.022727272727272728},\"58\":{\"ref\":58,\"tf\":0.00273224043715847},\"133\":{\"ref\":133,\"tf\":0.0016750418760469012},\"135\":{\"ref\":135,\"tf\":0.0019305019305019305}},\"w\":{\"docs\":{},\"a\":{\"docs\":{},\"r\":{\"docs\":{\"113\":{\"ref\":113,\"tf\":0.014184397163120567}}}}},\"-\":{\"docs\":{},\"c\":{\"docs\":{},\"o\":{\"docs\":{},\"d\":{\"docs\":{\"135\":{\"ref\":135,\"tf\":0.0019305019305019305}}}}}}}},\"t\":{\"docs\":{},\"e\":{\"docs\":{\"19\":{\"ref\":19,\"tf\":0.02},\"24\":{\"ref\":24,\"tf\":0.08333333333333333}}}},\"l\":{\"docs\":{},\"f\":{\"docs\":{\"38\":{\"ref\":38,\"tf\":0.011627906976744186}}}},\"v\":{\"docs\":{},\"e\":{\"docs\":{\"43\":{\"ref\":43,\"tf\":0.006944444444444444},\"57\":{\"ref\":57,\"tf\":0.0023584905660377358},\"84\":{\"ref\":84,\"tf\":0.0036363636363636364},\"114\":{\"ref\":114,\"tf\":0.001594896331738437},\"134\":{\"ref\":134,\"tf\":0.0011507479861910242}},\"n\":{\"docs\":{},\"'\":{\"docs\":{},\"t\":{\"docs\":{\"59\":{\"ref\":59,\"tf\":0.002785515320334262},\"129\":{\"ref\":129,\"tf\":0.0034782608695652175}}}}}}},\"n\":{\"docs\":{},\"d\":{\"docs\":{\"49\":{\"ref\":49,\"tf\":0.08333333333333333},\"134\":{\"ref\":134,\"tf\":0.0011507479861910242}},\"l\":{\"docs\":{\"54\":{\"ref\":54,\"tf\":0.002574002574002574},\"57\":{\"ref\":57,\"tf\":0.0023584905660377358},\"59\":{\"ref\":59,\"tf\":0.002785515320334262},\"74\":{\"ref\":74,\"tf\":0.005988023952095809},\"80\":{\"ref\":80,\"tf\":0.007692307692307693},\"82\":{\"ref\":82,\"tf\":0.0078125},\"90\":{\"ref\":90,\"tf\":0.010416666666666666},\"93\":{\"ref\":93,\"tf\":0.014084507042253521},\"94\":{\"ref\":94,\"tf\":0.011111111111111112},\"96\":{\"ref\":96,\"tf\":0.017857142857142856},\"104\":{\"ref\":104,\"tf\":0.00847457627118644},\"106\":{\"ref\":106,\"tf\":0.013333333333333334},\"109\":{\"ref\":109,\"tf\":0.017094017094017096},\"112\":{\"ref\":112,\"tf\":0.011764705882352941},\"115\":{\"ref\":115,\"tf\":0.006493506493506494},\"116\":{\"ref\":116,\"tf\":0.011111111111111112},\"117\":{\"ref\":117,\"tf\":0.015151515151515152},\"118\":{\"ref\":118,\"tf\":0.01904761904761905}},\"e\":{\"docs\":{},\"r\":{\"docs\":{\"134\":{\"ref\":134,\"tf\":0.0034522439585730723}}}}}}},\"p\":{\"docs\":{},\"p\":{\"docs\":{},\"e\":{\"docs\":{},\"n\":{\"docs\":{\"56\":{\"ref\":56,\"tf\":0.001594896331738437},\"103\":{\"ref\":103,\"tf\":0.006493506493506494},\"108\":{\"ref\":108,\"tf\":0.014492753623188406},\"119\":{\"ref\":119,\"tf\":0.003937007874015748},\"120\":{\"ref\":120,\"tf\":0.006289308176100629},\"134\":{\"ref\":134,\"tf\":0.006904487917146145}}}},\"i\":{\"docs\":{\"133\":{\"ref\":133,\"tf\":0.0016750418760469012}}}}},\"s\":{\"docs\":{},\"h\":{\"docs\":{},\"k\":{\"docs\":{},\"e\":{\"docs\":{},\"i\":{\"docs\":{\"72\":{\"ref\":72,\"tf\":0.002331002331002331}}}}}},\"-\":{\"docs\":{},\"b\":{\"docs\":{},\"o\":{\"docs\":{},\"u\":{\"docs\":{},\"n\":{\"docs\":{},\"c\":{\"docs\":{\"74\":{\"ref\":74,\"tf\":0.005988023952095809}}}}}}}}},\"m\":{\"docs\":{},\"m\":{\"docs\":{},\"e\":{\"docs\":{},\"r\":{\"docs\":{},\".\":{\"docs\":{},\"j\":{\"docs\":{\"134\":{\"ref\":134,\"tf\":0.0011507479861910242}},\"s\":{\"docs\":{},\"]\":{\"docs\":{},\"(\":{\"docs\":{},\"h\":{\"docs\":{},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"p\":{\"docs\":{},\":\":{\"docs\":{},\"/\":{\"docs\":{},\"/\":{\"docs\":{},\"e\":{\"docs\":{},\"i\":{\"docs\":{},\"g\":{\"docs\":{},\"h\":{\"docs\":{},\"t\":{\"docs\":{},\"m\":{\"docs\":{},\"e\":{\"docs\":{},\"d\":{\"docs\":{},\"i\":{\"docs\":{},\"a\":{\"docs\":{},\".\":{\"docs\":{},\"g\":{\"docs\":{},\"i\":{\"docs\":{},\"t\":{\"docs\":{},\"h\":{\"docs\":{},\"u\":{\"docs\":{},\"b\":{\"docs\":{},\".\":{\"docs\":{},\"i\":{\"docs\":{},\"o\":{\"docs\":{},\"/\":{\"docs\":{},\"h\":{\"docs\":{},\"a\":{\"docs\":{},\"m\":{\"docs\":{},\"m\":{\"docs\":{},\"e\":{\"docs\":{},\"r\":{\"docs\":{},\".\":{\"docs\":{},\"j\":{\"docs\":{\"120\":{\"ref\":120,\"tf\":0.006289308176100629}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},\"t\":{\"docs\":{},\"m\":{\"docs\":{},\"l\":{\"5\":{\"docs\":{\"26\":{\"ref\":26,\"tf\":0.021739130434782608},\"34\":{\"ref\":34,\"tf\":0.03333333333333333},\"57\":{\"ref\":57,\"tf\":0.014150943396226415},\"61\":{\"ref\":61,\"tf\":0.010869565217391304},\"70\":{\"ref\":70,\"tf\":0.023809523809523808},\"126\":{\"ref\":126,\"tf\":0.011111111111111112},\"134\":{\"ref\":134,\"tf\":0.0011507479861910242},\"135\":{\"ref\":135,\"tf\":0.0019305019305019305}},\"'\":{\"docs\":{\"70\":{\"ref\":70,\"tf\":0.023809523809523808}}}},\"docs\":{\"34\":{\"ref\":34,\"tf\":0.016666666666666666},\"35\":{\"ref\":35,\"tf\":0.01818181818181818},\"54\":{\"ref\":54,\"tf\":0.009009009009009009},\"57\":{\"ref\":57,\"tf\":0.0047169811320754715},\"59\":{\"ref\":59,\"tf\":0.011142061281337047},\"61\":{\"ref\":61,\"tf\":0.010869565217391304},\"72\":{\"ref\":72,\"tf\":0.006993006993006993},\"73\":{\"ref\":73,\"tf\":0.1},\"74\":{\"ref\":74,\"tf\":0.005988023952095809},\"75\":{\"ref\":75,\"tf\":0.08333333333333333},\"76\":{\"ref\":76,\"tf\":0.018867924528301886},\"77\":{\"ref\":77,\"tf\":0.018867924528301886},\"78\":{\"ref\":78,\"tf\":0.02247191011235955},\"79\":{\"ref\":79,\"tf\":0.125},\"80\":{\"ref\":80,\"tf\":0.023076923076923078},\"81\":{\"ref\":81,\"tf\":0.045454545454545456},\"82\":{\"ref\":82,\"tf\":0.0078125},\"83\":{\"ref\":83,\"tf\":0.02127659574468085},\"84\":{\"ref\":84,\"tf\":0.01090909090909091},\"85\":{\"ref\":85,\"tf\":0.09090909090909091},\"86\":{\"ref\":86,\"tf\":0.06666666666666667},\"87\":{\"ref\":87,\"tf\":0.08333333333333333},\"88\":{\"ref\":88,\"tf\":0.009708737864077669},\"89\":{\"ref\":89,\"tf\":0.022727272727272728},\"90\":{\"ref\":90,\"tf\":0.010416666666666666},\"91\":{\"ref\":91,\"tf\":0.0196078431372549},\"92\":{\"ref\":92,\"tf\":0.02857142857142857},\"93\":{\"ref\":93,\"tf\":0.014084507042253521},\"94\":{\"ref\":94,\"tf\":0.011111111111111112},\"95\":{\"ref\":95,\"tf\":0.009345794392523364},\"96\":{\"ref\":96,\"tf\":0.017857142857142856},\"97\":{\"ref\":97,\"tf\":0.019230769230769232},\"98\":{\"ref\":98,\"tf\":0.018867924528301886},\"99\":{\"ref\":99,\"tf\":0.02127659574468085},\"100\":{\"ref\":100,\"tf\":0.041666666666666664},\"101\":{\"ref\":101,\"tf\":0.043478260869565216},\"102\":{\"ref\":102,\"tf\":0.020833333333333332},\"103\":{\"ref\":103,\"tf\":0.006493506493506494},\"104\":{\"ref\":104,\"tf\":0.00423728813559322},\"109\":{\"ref\":109,\"tf\":0.008547008547008548},\"110\":{\"ref\":110,\"tf\":0.02040816326530612},\"111\":{\"ref\":111,\"tf\":0.007518796992481203},\"112\":{\"ref\":112,\"tf\":0.0058823529411764705},\"114\":{\"ref\":114,\"tf\":0.012759170653907496},\"115\":{\"ref\":115,\"tf\":0.00974025974025974},\"116\":{\"ref\":116,\"tf\":0.005555555555555556},\"117\":{\"ref\":117,\"tf\":0.007575757575757576},\"118\":{\"ref\":118,\"tf\":0.009523809523809525},\"123\":{\"ref\":123,\"tf\":0.007042253521126761},\"132\":{\"ref\":132,\"tf\":0.01282051282051282},\"134\":{\"ref\":134,\"tf\":0.0011507479861910242}}}},\"t\":{\"docs\":{},\"p\":{\"docs\":{\"78\":{\"ref\":78,\"tf\":0.011235955056179775},\"88\":{\"ref\":88,\"tf\":0.009708737864077669}},\".\":{\"docs\":{},\"s\":{\"docs\":{},\"e\":{\"docs\":{},\"r\":{\"docs\":{},\"v\":{\"docs\":{},\"e\":{\"docs\":{},\"r\":{\"docs\":{\"60\":{\"ref\":60,\"tf\":0.0022727272727272726}}}}}}}},\"g\":{\"docs\":{},\"e\":{\"docs\":{},\"t\":{\"docs\":{},\"(\":{\"docs\":{},\"'\":{\"docs\":{},\"/\":{\"docs\":{},\"m\":{\"docs\":{},\"o\":{\"docs\":{},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\"-\":{\"docs\":{},\"i\":{\"docs\":{},\"t\":{\"docs\":{},\"e\":{\"docs\":{},\"m\":{\"docs\":{},\"s\":{\"docs\":{},\"'\":{\"docs\":{},\")\":{\"docs\":{},\".\":{\"docs\":{},\"s\":{\"docs\":{},\"u\":{\"docs\":{},\"c\":{\"docs\":{},\"c\":{\"docs\":{},\"e\":{\"docs\":{},\"s\":{\"docs\":{},\"s\":{\"docs\":{},\"(\":{\"docs\":{},\"f\":{\"docs\":{},\"u\":{\"docs\":{},\"n\":{\"docs\":{},\"c\":{\"docs\":{},\"t\":{\"docs\":{},\"i\":{\"docs\":{},\"o\":{\"docs\":{},\"n\":{\"docs\":{},\"(\":{\"docs\":{},\"i\":{\"docs\":{},\"t\":{\"docs\":{},\"e\":{\"docs\":{},\"m\":{\"docs\":{\"78\":{\"ref\":78,\"tf\":0.011235955056179775}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},\"n\":{\"docs\":{},\"e\":{\"docs\":{},\"w\":{\"docs\":{},\"-\":{\"docs\":{},\"i\":{\"docs\":{},\"t\":{\"docs\":{},\"e\":{\"docs\":{},\"m\":{\"docs\":{\"88\":{\"ref\":88,\"tf\":0.009708737864077669}}}}}}}}}}}}}}}}},\":\":{\"docs\":{},\"/\":{\"docs\":{},\"/\":{\"docs\":{},\"l\":{\"docs\":{},\"o\":{\"docs\":{},\"c\":{\"docs\":{},\"a\":{\"docs\":{},\"l\":{\"docs\":{},\"h\":{\"docs\":{},\"o\":{\"docs\":{},\"s\":{\"docs\":{},\"t\":{\"docs\":{},\":\":{\"8\":{\"0\":{\"0\":{\"0\":{\"docs\":{\"60\":{\"ref\":60,\"tf\":0.0022727272727272726}}},\"docs\":{}},\"docs\":{}},\"docs\":{}},\"docs\":{}}}}}}}}}}}}}},\"s\":{\"docs\":{},\":\":{\"docs\":{},\"/\":{\"docs\":{},\"/\":{\"docs\":{},\"d\":{\"docs\":{},\"o\":{\"docs\":{},\"c\":{\"docs\":{},\"s\":{\"docs\":{},\".\":{\"docs\":{},\"a\":{\"docs\":{},\"n\":{\"docs\":{},\"g\":{\"docs\":{},\"u\":{\"docs\":{},\"l\":{\"docs\":{},\"a\":{\"docs\":{},\"r\":{\"docs\":{},\"j\":{\"docs\":{},\"s\":{\"docs\":{},\".\":{\"docs\":{},\"o\":{\"docs\":{},\"r\":{\"docs\":{},\"g\":{\"docs\":{},\"/\":{\"docs\":{},\"g\":{\"docs\":{},\"u\":{\"docs\":{},\"i\":{\"docs\":{},\"d\":{\"docs\":{},\"e\":{\"docs\":{},\"/\":{\"docs\":{},\"s\":{\"docs\":{},\"c\":{\"docs\":{},\"o\":{\"docs\":{},\"p\":{\"docs\":{},\"e\":{\"docs\":{},\"]\":{\"docs\":{},\"(\":{\"docs\":{},\"h\":{\"docs\":{},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"p\":{\"docs\":{},\"s\":{\"docs\":{},\":\":{\"docs\":{},\"/\":{\"docs\":{},\"/\":{\"docs\":{},\"d\":{\"docs\":{},\"o\":{\"docs\":{},\"c\":{\"docs\":{},\"s\":{\"docs\":{},\".\":{\"docs\":{},\"a\":{\"docs\":{},\"n\":{\"docs\":{},\"g\":{\"docs\":{},\"u\":{\"docs\":{},\"l\":{\"docs\":{},\"a\":{\"docs\":{},\"r\":{\"docs\":{},\"j\":{\"docs\":{},\"s\":{\"docs\":{},\".\":{\"docs\":{},\"o\":{\"docs\":{},\"r\":{\"docs\":{},\"g\":{\"docs\":{},\"/\":{\"docs\":{},\"g\":{\"docs\":{},\"u\":{\"docs\":{},\"i\":{\"docs\":{},\"d\":{\"docs\":{},\"e\":{\"docs\":{},\"/\":{\"docs\":{},\"s\":{\"docs\":{},\"c\":{\"docs\":{},\"o\":{\"docs\":{},\"p\":{\"docs\":{\"74\":{\"ref\":74,\"tf\":0.005988023952095809}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},\"g\":{\"docs\":{},\"i\":{\"docs\":{},\"t\":{\"docs\":{},\"h\":{\"docs\":{},\"u\":{\"docs\":{},\"b\":{\"docs\":{},\".\":{\"docs\":{},\"c\":{\"docs\":{},\"o\":{\"docs\":{},\"m\":{\"docs\":{},\"/\":{\"docs\":{},\"d\":{\"docs\":{},\"r\":{\"docs\":{},\"i\":{\"docs\":{},\"f\":{\"docs\":{},\"t\":{\"docs\":{},\"y\":{\"docs\":{},\"c\":{\"docs\":{},\"o\":{\"docs\":{},\"/\":{\"docs\":{},\"i\":{\"docs\":{},\"o\":{\"docs\":{},\"n\":{\"docs\":{},\"i\":{\"docs\":{},\"c\":{\"docs\":{},\"-\":{\"docs\":{},\"p\":{\"docs\":{},\"l\":{\"docs\":{},\"u\":{\"docs\":{},\"g\":{\"docs\":{},\"i\":{\"docs\":{},\"n\":{\"docs\":{},\"s\":{\"docs\":{},\"-\":{\"docs\":{},\"k\":{\"docs\":{},\"e\":{\"docs\":{},\"y\":{\"docs\":{},\"b\":{\"docs\":{},\"o\":{\"docs\":{},\"a\":{\"docs\":{},\"r\":{\"docs\":{},\"d\":{\"docs\":{},\"]\":{\"docs\":{},\"(\":{\"docs\":{},\"h\":{\"docs\":{},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"p\":{\"docs\":{},\"s\":{\"docs\":{},\":\":{\"docs\":{},\"/\":{\"docs\":{},\"/\":{\"docs\":{},\"g\":{\"docs\":{},\"i\":{\"docs\":{},\"t\":{\"docs\":{},\"h\":{\"docs\":{},\"u\":{\"docs\":{},\"b\":{\"docs\":{},\".\":{\"docs\":{},\"c\":{\"docs\":{},\"o\":{\"docs\":{},\"m\":{\"docs\":{},\"/\":{\"docs\":{},\"d\":{\"docs\":{},\"r\":{\"docs\":{},\"i\":{\"docs\":{},\"f\":{\"docs\":{},\"t\":{\"docs\":{},\"y\":{\"docs\":{},\"c\":{\"docs\":{},\"o\":{\"docs\":{},\"/\":{\"docs\":{},\"i\":{\"docs\":{},\"o\":{\"docs\":{},\"n\":{\"docs\":{},\"i\":{\"docs\":{},\"c\":{\"docs\":{},\"-\":{\"docs\":{},\"p\":{\"docs\":{},\"l\":{\"docs\":{},\"u\":{\"docs\":{},\"g\":{\"docs\":{},\"i\":{\"docs\":{},\"n\":{\"docs\":{},\"s\":{\"docs\":{},\"-\":{\"docs\":{},\"k\":{\"docs\":{},\"e\":{\"docs\":{},\"y\":{\"docs\":{},\"b\":{\"docs\":{},\"o\":{\"docs\":{},\"a\":{\"docs\":{},\"r\":{\"docs\":{},\"d\":{\"docs\":{\"103\":{\"ref\":103,\"tf\":0.006493506493506494}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},\"i\":{\"docs\":{\"126\":{\"ref\":126,\"tf\":0.011111111111111112}},\"d\":{\"docs\":{},\"d\":{\"docs\":{},\"e\":{\"docs\":{},\"n\":{\"docs\":{\"27\":{\"ref\":27,\"tf\":0.03225806451612903},\"59\":{\"ref\":59,\"tf\":0.002785515320334262},\"80\":{\"ref\":80,\"tf\":0.015384615384615385}}}}},\"e\":{\"docs\":{\"28\":{\"ref\":28,\"tf\":0.038461538461538464},\"36\":{\"ref\":36,\"tf\":0.017857142857142856},\"39\":{\"ref\":39,\"tf\":0.012658227848101266},\"71\":{\"ref\":71,\"tf\":0.024},\"98\":{\"ref\":98,\"tf\":0.03773584905660377},\"103\":{\"ref\":103,\"tf\":0.012987012987012988},\"104\":{\"ref\":104,\"tf\":0.00423728813559322},\"107\":{\"ref\":107,\"tf\":0.012658227848101266},\"110\":{\"ref\":110,\"tf\":0.05102040816326531},\"111\":{\"ref\":111,\"tf\":0.007518796992481203},\"121\":{\"ref\":121,\"tf\":0.005813953488372093},\"132\":{\"ref\":132,\"tf\":0.01282051282051282}},\"-\":{\"docs\":{},\"b\":{\"docs\":{},\"a\":{\"docs\":{},\"c\":{\"docs\":{},\"k\":{\"docs\":{},\"-\":{\"docs\":{},\"b\":{\"docs\":{},\"u\":{\"docs\":{},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"o\":{\"docs\":{},\"n\":{\"docs\":{\"98\":{\"ref\":98,\"tf\":0.018867924528301886}}}}}}}}}}}}},\"n\":{\"docs\":{},\"a\":{\"docs\":{},\"v\":{\"docs\":{},\"-\":{\"docs\":{},\"b\":{\"docs\":{},\"a\":{\"docs\":{},\"r\":{\"docs\":{\"98\":{\"ref\":98,\"tf\":0.018867924528301886}}}}}}}}},\"o\":{\"docs\":{},\"n\":{\"docs\":{},\"-\":{\"docs\":{},\"k\":{\"docs\":{},\"e\":{\"docs\":{},\"y\":{\"docs\":{},\"b\":{\"docs\":{},\"o\":{\"docs\":{},\"a\":{\"docs\":{},\"r\":{\"docs\":{},\"d\":{\"docs\":{},\"-\":{\"docs\":{},\"o\":{\"docs\":{},\"p\":{\"docs\":{},\"e\":{\"docs\":{},\"n\":{\"docs\":{\"103\":{\"ref\":103,\"tf\":0.006493506493506494}}}}}}}}}}}}}}}}}}}}},\"n\":{\"docs\":{},\"t\":{\"docs\":{\"29\":{\"ref\":29,\"tf\":0.02564102564102564},\"71\":{\"ref\":71,\"tf\":0.008},\"118\":{\"ref\":118,\"tf\":0.009523809523809525},\"120\":{\"ref\":120,\"tf\":0.006289308176100629}}}},\"g\":{\"docs\":{},\"h\":{\"docs\":{\"54\":{\"ref\":54,\"tf\":0.001287001287001287},\"127\":{\"ref\":127,\"tf\":0.006622516556291391},\"135\":{\"ref\":135,\"tf\":0.0019305019305019305}},\"e\":{\"docs\":{},\"r\":{\"docs\":{\"76\":{\"ref\":76,\"tf\":0.018867924528301886}}},\"s\":{\"docs\":{},\"t\":{\"docs\":{\"113\":{\"ref\":113,\"tf\":0.02127659574468085}}}}},\"l\":{\"docs\":{},\"i\":{\"docs\":{\"129\":{\"ref\":129,\"tf\":0.0017391304347826088},\"134\":{\"ref\":134,\"tf\":0.0011507479861910242}},\"g\":{\"docs\":{},\"h\":{\"docs\":{},\"t\":{\"docs\":{\"105\":{\"ref\":105,\"tf\":0.005847953216374269},\"124\":{\"ref\":124,\"tf\":0.010309278350515464}}}}}}}}},\"s\":{\"docs\":{},\"t\":{\"docs\":{},\"o\":{\"docs\":{},\"r\":{\"docs\":{\"134\":{\"ref\":134,\"tf\":0.0011507479861910242}},\"i\":{\"docs\":{\"84\":{\"ref\":84,\"tf\":0.01090909090909091},\"95\":{\"ref\":95,\"tf\":0.009345794392523364},\"112\":{\"ref\":112,\"tf\":0.0058823529411764705},\"118\":{\"ref\":118,\"tf\":0.009523809523809525},\"123\":{\"ref\":123,\"tf\":0.01056338028169014},\"135\":{\"ref\":135,\"tf\":0.0019305019305019305}}}}}}},\"t\":{\"docs\":{\"105\":{\"ref\":105,\"tf\":0.005847953216374269},\"133\":{\"ref\":133,\"tf\":0.0016750418760469012},\"134\":{\"ref\":134,\"tf\":0.0011507479861910242}}}},\"y\":{\"docs\":{},\"b\":{\"docs\":{},\"r\":{\"docs\":{},\"i\":{\"docs\":{},\"d\":{\"docs\":{\"57\":{\"ref\":57,\"tf\":0.01179245283018868},\"60\":{\"ref\":60,\"tf\":0.0022727272727272726},\"134\":{\"ref\":134,\"tf\":2.005753739930955},\"135\":{\"ref\":135,\"tf\":0.003861003861003861}}}}}}},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\"f\":{\"docs\":{\"95\":{\"ref\":95,\"tf\":0.009345794392523364},\"102\":{\"ref\":102,\"tf\":0.020833333333333332}},\"=\":{\"docs\":{},\"\\\"\":{\"docs\":{},\"#\":{\"docs\":{},\"/\":{\"docs\":{},\"m\":{\"docs\":{},\"u\":{\"docs\":{},\"s\":{\"docs\":{},\"i\":{\"docs\":{},\"c\":{\"docs\":{},\"\\\"\":{\"docs\":{},\">\":{\"docs\":{},\"g\":{\"docs\":{},\"o\":{\"docs\":{\"84\":{\"ref\":84,\"tf\":0.0036363636363636364}}}}}}}}}}}}}}}}}}},\"l\":{\"docs\":{},\"a\":{\"docs\":{},\"b\":{\"docs\":{},\"e\":{\"docs\":{},\"l\":{\"docs\":{\"0\":{\"ref\":0,\"tf\":0.03225806451612903},\"26\":{\"ref\":26,\"tf\":0.021739130434782608},\"27\":{\"ref\":27,\"tf\":2.596774193548387},\"28\":{\"ref\":28,\"tf\":2.6538461538461537},\"29\":{\"ref\":29,\"tf\":2.6025641025641026},\"32\":{\"ref\":32,\"tf\":0.04},\"54\":{\"ref\":54,\"tf\":0.002574002574002574},\"73\":{\"ref\":73,\"tf\":0.05},\"104\":{\"ref\":104,\"tf\":0.00423728813559322},\"134\":{\"ref\":134,\"tf\":0.009205983889528193}},\".\":{\"docs\":{},\"t\":{\"docs\":{},\"o\":{\"docs\":{},\"g\":{\"docs\":{},\"g\":{\"docs\":{},\"l\":{\"docs\":{\"97\":{\"ref\":97,\"tf\":0.019230769230769232}}}}}}}},\"'\":{\"docs\":{\"134\":{\"ref\":134,\"tf\":0.0023014959723820483}}}}}},\"r\":{\"docs\":{},\"g\":{\"docs\":{\"7\":{\"ref\":7,\"tf\":0.08},\"21\":{\"ref\":21,\"tf\":0.00980392156862745},\"43\":{\"ref\":43,\"tf\":0.006944444444444444},\"54\":{\"ref\":54,\"tf\":0.001287001287001287},\"60\":{\"ref\":60,\"tf\":0.0022727272727272726},\"129\":{\"ref\":129,\"tf\":0.0017391304347826088},\"134\":{\"ref\":134,\"tf\":0.0023014959723820483}},\"e\":{\"docs\":{},\"r\":{\"docs\":{\"7\":{\"ref\":7,\"tf\":0.04},\"18\":{\"ref\":18,\"tf\":0.02},\"19\":{\"ref\":19,\"tf\":0.02},\"45\":{\"ref\":45,\"tf\":0.00980392156862745}}},\"s\":{\"docs\":{},\"t\":{\"docs\":{\"90\":{\"ref\":90,\"tf\":0.010416666666666666}}}}}}},\"s\":{\"docs\":{},\"t\":{\"docs\":{\"20\":{\"ref\":20,\"tf\":0.02040816326530612},\"29\":{\"ref\":29,\"tf\":0.05128205128205128},\"47\":{\"ref\":47,\"tf\":0.01},\"54\":{\"ref\":54,\"tf\":0.002574002574002574},\"59\":{\"ref\":59,\"tf\":0.002785515320334262},\"115\":{\"ref\":115,\"tf\":0.003246753246753247},\"119\":{\"ref\":119,\"tf\":0.003937007874015748},\"133\":{\"ref\":133,\"tf\":0.0016750418760469012},\"134\":{\"ref\":134,\"tf\":0.0011507479861910242},\"135\":{\"ref\":135,\"tf\":2.5}}}},\"y\":{\"docs\":{},\"o\":{\"docs\":{},\"u\":{\"docs\":{},\"t\":{\"docs\":{\"43\":{\"ref\":43,\"tf\":0.013888888888888888},\"52\":{\"ref\":52,\"tf\":0.010416666666666666},\"54\":{\"ref\":54,\"tf\":0.001287001287001287},\"57\":{\"ref\":57,\"tf\":0.0023584905660377358},\"59\":{\"ref\":59,\"tf\":0.008356545961002786},\"103\":{\"ref\":103,\"tf\":0.006493506493506494},\"130\":{\"ref\":130,\"tf\":0.0043859649122807015}}}}},\"e\":{\"docs\":{},\"r\":{\"docs\":{\"57\":{\"ref\":57,\"tf\":0.0047169811320754715},\"135\":{\"ref\":135,\"tf\":0.003861003861003861}}}}},\"n\":{\"docs\":{},\"d\":{\"docs\":{\"135\":{\"ref\":135,\"tf\":0.003861003861003861},\"136\":{\"ref\":136,\"tf\":3.333333333333333}},\"s\":{\"docs\":{},\"c\":{\"docs\":{},\"a\":{\"docs\":{},\"p\":{\"docs\":{\"48\":{\"ref\":48,\"tf\":0.023255813953488372},\"130\":{\"ref\":130,\"tf\":0.0043859649122807015}}}}}}}},\"i\":{\"docs\":{\"57\":{\"ref\":57,\"tf\":0.0023584905660377358}}},\"t\":{\"docs\":{},\"e\":{\"docs\":{},\"r\":{\"docs\":{\"58\":{\"ref\":58,\"tf\":0.00273224043715847},\"133\":{\"ref\":133,\"tf\":0.0016750418760469012},\"134\":{\"ref\":134,\"tf\":0.0011507479861910242},\"135\":{\"ref\":135,\"tf\":0.0019305019305019305}}},\"s\":{\"docs\":{},\"t\":{\"docs\":{\"62\":{\"ref\":62,\"tf\":0.08333333333333333},\"127\":{\"ref\":127,\"tf\":0.006622516556291391},\"129\":{\"ref\":129,\"tf\":0.0034782608695652175}}}}},\"t\":{\"docs\":{},\"e\":{\"docs\":{},\"r\":{\"docs\":{\"135\":{\"ref\":135,\"tf\":0.0019305019305019305}}}}}},\"z\":{\"docs\":{},\"i\":{\"docs\":{},\"l\":{\"docs\":{},\"i\":{\"docs\":{\"72\":{\"ref\":72,\"tf\":0.002331002331002331}}}}}}},\"e\":{\"docs\":{},\"f\":{\"docs\":{},\"t\":{\"docs\":{\"3\":{\"ref\":3,\"tf\":0.019230769230769232},\"6\":{\"ref\":6,\"tf\":0.023809523809523808},\"16\":{\"ref\":16,\"tf\":0.029411764705882353},\"19\":{\"ref\":19,\"tf\":0.02},\"21\":{\"ref\":21,\"tf\":0.00980392156862745},\"25\":{\"ref\":25,\"tf\":0.022988505747126436},\"27\":{\"ref\":27,\"tf\":0.03225806451612903},\"28\":{\"ref\":28,\"tf\":0.038461538461538464},\"32\":{\"ref\":32,\"tf\":0.04},\"42\":{\"ref\":42,\"tf\":3.4047619047619047},\"46\":{\"ref\":46,\"tf\":0.019230769230769232},\"52\":{\"ref\":52,\"tf\":0.020833333333333332},\"59\":{\"ref\":59,\"tf\":0.008356545961002786},\"60\":{\"ref\":60,\"tf\":0.0022727272727272726},\"65\":{\"ref\":65,\"tf\":0.025},\"72\":{\"ref\":72,\"tf\":0.002331002331002331},\"76\":{\"ref\":76,\"tf\":0.018867924528301886},\"77\":{\"ref\":77,\"tf\":0.018867924528301886},\"83\":{\"ref\":83,\"tf\":0.02127659574468085},\"84\":{\"ref\":84,\"tf\":0.0036363636363636364},\"93\":{\"ref\":93,\"tf\":0.014084507042253521},\"115\":{\"ref\":115,\"tf\":0.012987012987012988},\"116\":{\"ref\":116,\"tf\":0.03333333333333333},\"119\":{\"ref\":119,\"tf\":0.015748031496062992},\"123\":{\"ref\":123,\"tf\":0.007042253521126761},\"130\":{\"ref\":130,\"tf\":0.008771929824561403},\"133\":{\"ref\":133,\"tf\":0.01340033500837521}},\"/\":{\"docs\":{},\"r\":{\"docs\":{},\"i\":{\"docs\":{},\"g\":{\"docs\":{},\"h\":{\"docs\":{},\"t\":{\"docs\":{\"0\":{\"ref\":0,\"tf\":0.03225806451612903}}}}}}}},\"-\":{\"docs\":{},\"b\":{\"docs\":{},\"u\":{\"docs\":{},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"o\":{\"docs\":{},\"n\":{\"docs\":{},\"s\":{\"docs\":{},\"=\":{\"docs\":{},\"\\\"\":{\"docs\":{},\"l\":{\"docs\":{},\"e\":{\"docs\":{},\"f\":{\"docs\":{},\"t\":{\"docs\":{},\"b\":{\"docs\":{},\"u\":{\"docs\":{},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"o\":{\"docs\":{},\"n\":{\"docs\":{\"133\":{\"ref\":133,\"tf\":0.0016750418760469012}}}}}}}}}}}}}}}}}}}}}},\"b\":{\"docs\":{},\"u\":{\"docs\":{},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"o\":{\"docs\":{},\"n\":{\"docs\":{\"133\":{\"ref\":133,\"tf\":0.005025125628140704}}}}}}}}}},\"a\":{\"docs\":{},\"r\":{\"docs\":{},\"n\":{\"docs\":{\"10\":{\"ref\":10,\"tf\":0.07142857142857142},\"16\":{\"ref\":16,\"tf\":0.007352941176470588},\"54\":{\"ref\":54,\"tf\":0.002574002574002574},\"126\":{\"ref\":126,\"tf\":0.011111111111111112},\"129\":{\"ref\":129,\"tf\":0.0017391304347826088},\"133\":{\"ref\":133,\"tf\":0.0016750418760469012}}}},\"v\":{\"docs\":{\"56\":{\"ref\":56,\"tf\":0.001594896331738437},\"83\":{\"ref\":83,\"tf\":0.02127659574468085},\"115\":{\"ref\":115,\"tf\":0.003246753246753247},\"135\":{\"ref\":135,\"tf\":0.0019305019305019305}}},\"k\":{\"docs\":{\"71\":{\"ref\":71,\"tf\":0.008}}},\"f\":{\"docs\":{},\"l\":{\"docs\":{},\"e\":{\"docs\":{},\"t\":{\"docs\":{\"104\":{\"ref\":104,\"tf\":0.00423728813559322}}}}}}},\"g\":{\"docs\":{},\"e\":{\"docs\":{},\"n\":{\"docs\":{},\"d\":{\"docs\":{\"14\":{\"ref\":14,\"tf\":0.011494252873563218}}}}}},\"t\":{\"docs\":{\"54\":{\"ref\":54,\"tf\":0.003861003861003861},\"59\":{\"ref\":59,\"tf\":0.005571030640668524},\"88\":{\"ref\":88,\"tf\":0.02912621359223301},\"105\":{\"ref\":105,\"tf\":0.005847953216374269},\"124\":{\"ref\":124,\"tf\":0.010309278350515464},\"130\":{\"ref\":130,\"tf\":0.0043859649122807015},\"134\":{\"ref\":134,\"tf\":0.0011507479861910242},\"135\":{\"ref\":135,\"tf\":0.0019305019305019305}},\"'\":{\"docs\":{\"50\":{\"ref\":50,\"tf\":0.008928571428571428},\"54\":{\"ref\":54,\"tf\":0.003861003861003861},\"56\":{\"ref\":56,\"tf\":0.001594896331738437},\"58\":{\"ref\":58,\"tf\":0.00273224043715847},\"59\":{\"ref\":59,\"tf\":0.016713091922005572},\"60\":{\"ref\":60,\"tf\":0.0022727272727272726},\"133\":{\"ref\":133,\"tf\":0.0016750418760469012},\"134\":{\"ref\":134,\"tf\":0.0023014959723820483},\"135\":{\"ref\":135,\"tf\":0.0019305019305019305}}}},\"v\":{\"docs\":{},\"e\":{\"docs\":{},\"l\":{\"docs\":{\"54\":{\"ref\":54,\"tf\":0.001287001287001287},\"60\":{\"ref\":60,\"tf\":0.0022727272727272726},\"84\":{\"ref\":84,\"tf\":0.0036363636363636364},\"129\":{\"ref\":129,\"tf\":0.0017391304347826088},\"134\":{\"ref\":134,\"tf\":0.0011507479861910242}}},\"r\":{\"docs\":{},\"a\":{\"docs\":{},\"g\":{\"docs\":{\"129\":{\"ref\":129,\"tf\":0.0017391304347826088}}}}}}},\"s\":{\"docs\":{},\"s\":{\"docs\":{\"72\":{\"ref\":72,\"tf\":0.002331002331002331},\"135\":{\"ref\":135,\"tf\":0.0019305019305019305}},\"e\":{\"docs\":{},\"r\":{\"docs\":{\"134\":{\"ref\":134,\"tf\":0.0011507479861910242}}}},\"o\":{\"docs\":{},\"n\":{\"docs\":{\"135\":{\"ref\":135,\"tf\":0.0019305019305019305}}}}}}},\"o\":{\"docs\":{},\"o\":{\"docs\":{},\"k\":{\"docs\":{\"1\":{\"ref\":1,\"tf\":0.045454545454545456},\"24\":{\"ref\":24,\"tf\":0.041666666666666664},\"29\":{\"ref\":29,\"tf\":0.02564102564102564},\"34\":{\"ref\":34,\"tf\":0.016666666666666666},\"48\":{\"ref\":48,\"tf\":0.011627906976744186},\"51\":{\"ref\":51,\"tf\":0.03389830508474576},\"54\":{\"ref\":54,\"tf\":0.002574002574002574},\"56\":{\"ref\":56,\"tf\":0.001594896331738437},\"57\":{\"ref\":57,\"tf\":0.0023584905660377358},\"59\":{\"ref\":59,\"tf\":0.011142061281337047},\"60\":{\"ref\":60,\"tf\":0.004545454545454545},\"61\":{\"ref\":61,\"tf\":0.010869565217391304},\"65\":{\"ref\":65,\"tf\":0.025},\"70\":{\"ref\":70,\"tf\":0.023809523809523808},\"84\":{\"ref\":84,\"tf\":0.0036363636363636364},\"96\":{\"ref\":96,\"tf\":0.017857142857142856},\"114\":{\"ref\":114,\"tf\":0.001594896331738437},\"129\":{\"ref\":129,\"tf\":0.0017391304347826088},\"133\":{\"ref\":133,\"tf\":0.0016750418760469012},\"135\":{\"ref\":135,\"tf\":0.0019305019305019305},\"136\":{\"ref\":136,\"tf\":0.005050505050505051}}},\"p\":{\"docs\":{\"72\":{\"ref\":72,\"tf\":0.002331002331002331}}},\"s\":{\"docs\":{\"134\":{\"ref\":134,\"tf\":0.0011507479861910242}}}},\"a\":{\"docs\":{},\"d\":{\"docs\":{\"10\":{\"ref\":10,\"tf\":0.023809523809523808},\"54\":{\"ref\":54,\"tf\":0.009009009009009009},\"59\":{\"ref\":59,\"tf\":0.002785515320334262},\"60\":{\"ref\":60,\"tf\":0.0022727272727272726},\"78\":{\"ref\":78,\"tf\":0.02247191011235955},\"84\":{\"ref\":84,\"tf\":0.01090909090909091},\"98\":{\"ref\":98,\"tf\":0.018867924528301886},\"105\":{\"ref\":105,\"tf\":0.005847953216374269},\"107\":{\"ref\":107,\"tf\":0.012658227848101266},\"110\":{\"ref\":110,\"tf\":0.05102040816326531},\"111\":{\"ref\":111,\"tf\":0.007518796992481203},\"115\":{\"ref\":115,\"tf\":0.006493506493506494},\"118\":{\"ref\":118,\"tf\":0.01904761904761905},\"133\":{\"ref\":133,\"tf\":0.005025125628140704}}}},\"s\":{\"docs\":{},\"t\":{\"docs\":{\"20\":{\"ref\":20,\"tf\":0.04081632653061224}}},\"e\":{\"docs\":{\"58\":{\"ref\":58,\"tf\":0.00273224043715847}}}},\"w\":{\"docs\":{},\"e\":{\"docs\":{},\"r\":{\"docs\":{\"30\":{\"ref\":30,\"tf\":0.02702702702702703},\"54\":{\"ref\":54,\"tf\":0.001287001287001287},\"77\":{\"ref\":77,\"tf\":0.018867924528301886}},\"-\":{\"docs\":{},\"l\":{\"docs\":{},\"e\":{\"docs\":{},\"v\":{\"docs\":{},\"e\":{\"docs\":{},\"l\":{\"docs\":{\"54\":{\"ref\":54,\"tf\":0.001287001287001287}}}}}}}}}},\"-\":{\"docs\":{},\"l\":{\"docs\":{},\"e\":{\"docs\":{},\"v\":{\"docs\":{},\"e\":{\"docs\":{},\"l\":{\"docs\":{\"57\":{\"ref\":57,\"tf\":0.0023584905660377358},\"135\":{\"ref\":135,\"tf\":0.003861003861003861}}}}}}}}},\"c\":{\"docs\":{},\"k\":{\"docs\":{\"45\":{\"ref\":45,\"tf\":0.00980392156862745}}},\"a\":{\"docs\":{},\"l\":{\"docs\":{\"54\":{\"ref\":54,\"tf\":0.005148005148005148},\"60\":{\"ref\":60,\"tf\":0.0022727272727272726},\"133\":{\"ref\":133,\"tf\":0.0033500837520938024}},\"s\":{\"docs\":{},\"t\":{\"docs\":{},\"o\":{\"docs\":{},\"r\":{\"docs\":{},\"a\":{\"docs\":{},\"g\":{\"docs\":{\"54\":{\"ref\":54,\"tf\":0.001287001287001287}}}}}}}}},\"t\":{\"docs\":{\"59\":{\"ref\":59,\"tf\":0.002785515320334262},\"133\":{\"ref\":133,\"tf\":0.0016750418760469012}},\"i\":{\"docs\":{},\"o\":{\"docs\":{},\"n\":{\"docs\":{},\".\":{\"docs\":{},\"p\":{\"docs\":{},\"a\":{\"docs\":{},\"t\":{\"docs\":{},\"h\":{\"docs\":{},\"(\":{\"docs\":{},\"'\":{\"docs\":{},\"/\":{\"docs\":{},\"m\":{\"docs\":{},\"a\":{\"docs\":{},\"i\":{\"docs\":{},\"n\":{\"docs\":{\"133\":{\"ref\":133,\"tf\":0.0033500837520938024}}}}}}}}}}}}}},\"p\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"v\":{\"docs\":{},\"i\":{\"docs\":{},\"d\":{\"docs\":{\"133\":{\"ref\":133,\"tf\":0.0016750418760469012}}}}}}}}}}}}}},\"t\":{\"docs\":{\"54\":{\"ref\":54,\"tf\":0.005148005148005148},\"56\":{\"ref\":56,\"tf\":0.001594896331738437},\"57\":{\"ref\":57,\"tf\":0.0023584905660377358},\"60\":{\"ref\":60,\"tf\":0.0022727272727272726},\"133\":{\"ref\":133,\"tf\":0.0016750418760469012},\"134\":{\"ref\":134,\"tf\":0.0011507479861910242},\"135\":{\"ref\":135,\"tf\":0.0019305019305019305}}},\"g\":{\"docs\":{},\"i\":{\"docs\":{},\"c\":{\"docs\":{\"55\":{\"ref\":55,\"tf\":0.02040816326530612},\"133\":{\"ref\":133,\"tf\":0.0016750418760469012},\"134\":{\"ref\":134,\"tf\":0.0011507479861910242}}}},\"o\":{\"docs\":{\"133\":{\"ref\":133,\"tf\":0.0016750418760469012}}}},\"n\":{\"docs\":{},\"g\":{\"docs\":{\"56\":{\"ref\":56,\"tf\":0.001594896331738437},\"72\":{\"ref\":72,\"tf\":0.002331002331002331},\"106\":{\"ref\":106,\"tf\":0.013333333333333334}}}},\"v\":{\"docs\":{},\"e\":{\"docs\":{\"56\":{\"ref\":56,\"tf\":0.001594896331738437},\"69\":{\"ref\":69,\"tf\":0.05},\"85\":{\"ref\":85,\"tf\":0.09090909090909091},\"129\":{\"ref\":129,\"tf\":0.0017391304347826088},\"134\":{\"ref\":134,\"tf\":0.0023014959723820483},\"135\":{\"ref\":135,\"tf\":0.0019305019305019305}}}}},\"i\":{\"docs\":{\"133\":{\"ref\":133,\"tf\":0.0016750418760469012}},\"n\":{\"docs\":{},\"k\":{\"docs\":{\"2\":{\"ref\":2,\"tf\":0.025},\"39\":{\"ref\":39,\"tf\":0.012658227848101266},\"57\":{\"ref\":57,\"tf\":0.0023584905660377358},\"95\":{\"ref\":95,\"tf\":0.009345794392523364},\"100\":{\"ref\":100,\"tf\":0.08333333333333333},\"101\":{\"ref\":101,\"tf\":0.08695652173913043},\"102\":{\"ref\":102,\"tf\":0.0625},\"114\":{\"ref\":114,\"tf\":0.001594896331738437},\"123\":{\"ref\":123,\"tf\":0.0035211267605633804},\"130\":{\"ref\":130,\"tf\":0.0043859649122807015},\"134\":{\"ref\":134,\"tf\":0.0011507479861910242}}},\"e\":{\"docs\":{\"16\":{\"ref\":16,\"tf\":0.007352941176470588},\"43\":{\"ref\":43,\"tf\":0.05555555555555555},\"56\":{\"ref\":56,\"tf\":0.003189792663476874},\"58\":{\"ref\":58,\"tf\":0.00273224043715847},\"63\":{\"ref\":63,\"tf\":2},\"133\":{\"ref\":133,\"tf\":0.0016750418760469012}}},\"d\":{\"docs\":{},\"q\":{\"docs\":{},\"u\":{\"docs\":{},\"i\":{\"docs\":{},\"s\":{\"docs\":{},\"t\":{\"docs\":{\"54\":{\"ref\":54,\"tf\":0.001287001287001287}}}}}}}},\"u\":{\"docs\":{},\"x\":{\"docs\":{\"56\":{\"ref\":56,\"tf\":0.003189792663476874}}}}},\"s\":{\"docs\":{},\"t\":{\"docs\":{\"14\":{\"ref\":14,\"tf\":10.091954022988507},\"15\":{\"ref\":15,\"tf\":5.113636363636363},\"16\":{\"ref\":16,\"tf\":5.036764705882353},\"17\":{\"ref\":17,\"tf\":5.076923076923077},\"19\":{\"ref\":19,\"tf\":0.02},\"20\":{\"ref\":20,\"tf\":5.122448979591836},\"21\":{\"ref\":21,\"tf\":0.0196078431372549},\"23\":{\"ref\":23,\"tf\":5.090909090909091},\"24\":{\"ref\":24,\"tf\":0.041666666666666664},\"25\":{\"ref\":25,\"tf\":0.04597701149425287},\"26\":{\"ref\":26,\"tf\":0.021739130434782608},\"30\":{\"ref\":30,\"tf\":0.08108108108108109},\"31\":{\"ref\":31,\"tf\":0.09523809523809523},\"34\":{\"ref\":34,\"tf\":0.016666666666666666},\"35\":{\"ref\":35,\"tf\":0.01818181818181818},\"36\":{\"ref\":36,\"tf\":3.3690476190476186},\"37\":{\"ref\":37,\"tf\":0.125},\"38\":{\"ref\":38,\"tf\":0.011627906976744186},\"54\":{\"ref\":54,\"tf\":0.009009009009009009},\"58\":{\"ref\":58,\"tf\":0.00819672131147541},\"59\":{\"ref\":59,\"tf\":0.005571030640668524},\"72\":{\"ref\":72,\"tf\":0.013986013986013986},\"75\":{\"ref\":75,\"tf\":0.08333333333333333},\"80\":{\"ref\":80,\"tf\":0.07692307692307693},\"109\":{\"ref\":109,\"tf\":0.05128205128205128},\"123\":{\"ref\":123,\"tf\":0.0035211267605633804},\"126\":{\"ref\":126,\"tf\":0.011111111111111112},\"133\":{\"ref\":133,\"tf\":0.005025125628140704},\"134\":{\"ref\":134,\"tf\":0.0011507479861910242}},\"-\":{\"docs\":{},\"i\":{\"docs\":{},\"n\":{\"docs\":{},\"s\":{\"docs\":{},\"e\":{\"docs\":{},\"t\":{\"docs\":{\"20\":{\"ref\":20,\"tf\":0.04081632653061224},\"21\":{\"ref\":21,\"tf\":0.00980392156862745},\"30\":{\"ref\":30,\"tf\":0.05405405405405406},\"31\":{\"ref\":31,\"tf\":0.047619047619047616}}}}}},\"t\":{\"docs\":{},\"e\":{\"docs\":{},\"m\":{\"docs\":{\"123\":{\"ref\":123,\"tf\":0.0035211267605633804}}}}}},\"s\":{\"docs\":{},\"t\":{\"docs\":{},\"y\":{\"docs\":{},\"l\":{\"docs\":{\"133\":{\"ref\":133,\"tf\":0.0016750418760469012}}}}}}},\"e\":{\"docs\":{},\"n\":{\"docs\":{\"24\":{\"ref\":24,\"tf\":0.08333333333333333},\"60\":{\"ref\":60,\"tf\":0.0022727272727272726},\"104\":{\"ref\":104,\"tf\":0.00847457627118644},\"108\":{\"ref\":108,\"tf\":0.10144927536231885},\"113\":{\"ref\":113,\"tf\":0.02127659574468085},\"120\":{\"ref\":120,\"tf\":0.06918238993710692},\"130\":{\"ref\":130,\"tf\":0.0043859649122807015},\"132\":{\"ref\":132,\"tf\":0.01282051282051282},\"133\":{\"ref\":133,\"tf\":0.0016750418760469012},\"134\":{\"ref\":134,\"tf\":0.0023014959723820483}}}},\"'\":{\"docs\":{\"30\":{\"ref\":30,\"tf\":0.02702702702702703}}}}},\"f\":{\"docs\":{},\"e\":{\"docs\":{\"59\":{\"ref\":59,\"tf\":0.002785515320334262},\"126\":{\"ref\":126,\"tf\":0.011111111111111112}},\"s\":{\"docs\":{},\"a\":{\"docs\":{},\"v\":{\"docs\":{\"15\":{\"ref\":15,\"tf\":0.022727272727272728}}}}}}},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"l\":{\"docs\":{\"18\":{\"ref\":18,\"tf\":0.02},\"21\":{\"ref\":21,\"tf\":0.00980392156862745},\"54\":{\"ref\":54,\"tf\":0.001287001287001287},\"58\":{\"ref\":58,\"tf\":0.00273224043715847},\"72\":{\"ref\":72,\"tf\":0.002331002331002331},\"129\":{\"ref\":129,\"tf\":0.0017391304347826088},\"133\":{\"ref\":133,\"tf\":0.0016750418760469012},\"136\":{\"ref\":136,\"tf\":0.005050505050505051}}}}},\"c\":{\"docs\":{},\"e\":{\"docs\":{},\"n\":{\"docs\":{},\"s\":{\"docs\":{\"19\":{\"ref\":19,\"tf\":0.02},\"57\":{\"ref\":57,\"tf\":0.0047169811320754715},\"68\":{\"ref\":68,\"tf\":10.083333333333334},\"126\":{\"ref\":126,\"tf\":0.011111111111111112}}}}}},\"k\":{\"docs\":{},\"e\":{\"docs\":{\"21\":{\"ref\":21,\"tf\":0.00980392156862745},\"48\":{\"ref\":48,\"tf\":0.011627906976744186}},\"l\":{\"docs\":{},\"i\":{\"docs\":{},\"h\":{\"docs\":{},\"o\":{\"docs\":{},\"o\":{\"docs\":{},\"d\":{\"docs\":{\"72\":{\"ref\":72,\"tf\":0.002331002331002331}}}}}}}}}},\"g\":{\"docs\":{},\"h\":{\"docs\":{},\"t\":{\"docs\":{\"50\":{\"ref\":50,\"tf\":0.008928571428571428},\"129\":{\"ref\":129,\"tf\":0.0034782608695652175},\"133\":{\"ref\":133,\"tf\":0.0016750418760469012}},\"s\":{\"docs\":{},\"a\":{\"docs\":{},\"b\":{\"docs\":{\"38\":{\"ref\":38,\"tf\":0.023255813953488372}}}}}}}},\"b\":{\"docs\":{},\"r\":{\"docs\":{},\"a\":{\"docs\":{},\"r\":{\"docs\":{},\"i\":{\"docs\":{\"56\":{\"ref\":56,\"tf\":0.001594896331738437},\"104\":{\"ref\":104,\"tf\":0.00847457627118644}}}}}},\"/\":{\"docs\":{},\"j\":{\"docs\":{},\"s\":{\"docs\":{},\"/\":{\"docs\":{},\"a\":{\"docs\":{},\"n\":{\"docs\":{},\"g\":{\"docs\":{},\"u\":{\"docs\":{},\"l\":{\"docs\":{},\"a\":{\"docs\":{},\"r\":{\"docs\":{\"59\":{\"ref\":59,\"tf\":0.002785515320334262}}}}}}}}}}}}}},\"v\":{\"docs\":{},\"e\":{\"docs\":{\"58\":{\"ref\":58,\"tf\":0.00546448087431694},\"84\":{\"ref\":84,\"tf\":0.0036363636363636364},\"136\":{\"ref\":136,\"tf\":0.005050505050505051}}}},\"m\":{\"docs\":{},\"i\":{\"docs\":{},\"t\":{\"docs\":{\"130\":{\"ref\":130,\"tf\":0.0043859649122807015},\"135\":{\"ref\":135,\"tf\":0.0019305019305019305},\"136\":{\"ref\":136,\"tf\":0.005050505050505051}}}}},\">\":{\"docs\":{},\"b\":{\"docs\":{\"133\":{\"ref\":133,\"tf\":0.0016750418760469012}}},\"s\":{\"docs\":{},\"t\":{\"docs\":{},\"a\":{\"docs\":{},\"i\":{\"docs\":{\"133\":{\"ref\":133,\"tf\":0.0016750418760469012}}}}}},\"t\":{\"docs\":{},\"h\":{\"docs\":{},\"e\":{\"docs\":{},\"r\":{\"docs\":{\"133\":{\"ref\":133,\"tf\":0.0016750418760469012}}}}}}}},\"t\":{\"docs\":{},\";\":{\"docs\":{},\"a\":{\"docs\":{},\"&\":{\"docs\":{},\"g\":{\"docs\":{},\"t\":{\"docs\":{\"16\":{\"ref\":16,\"tf\":0.014705882352941176}}}}}},\"b\":{\"docs\":{},\"u\":{\"docs\":{},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"o\":{\"docs\":{},\"n\":{\"docs\":{\"82\":{\"ref\":82,\"tf\":0.0078125}},\"&\":{\"docs\":{},\"g\":{\"docs\":{},\"t\":{\"docs\":{\"16\":{\"ref\":16,\"tf\":0.007352941176470588}}}}}}}}}},\"o\":{\"docs\":{},\"d\":{\"docs\":{},\"y\":{\"docs\":{},\"&\":{\"docs\":{},\"g\":{\"docs\":{},\"t\":{\"docs\":{\"133\":{\"ref\":133,\"tf\":0.0016750418760469012}}}}}}}}},\"l\":{\"docs\":{},\"a\":{\"docs\":{},\"b\":{\"docs\":{},\"e\":{\"docs\":{},\"l\":{\"docs\":{},\"&\":{\"docs\":{},\"g\":{\"docs\":{},\"t\":{\"docs\":{\"26\":{\"ref\":26,\"tf\":0.021739130434782608},\"34\":{\"ref\":34,\"tf\":0.016666666666666666},\"35\":{\"ref\":35,\"tf\":0.01818181818181818},\"36\":{\"ref\":36,\"tf\":0.017857142857142856}}}}}}}}}},\"t\":{\"docs\":{},\"e\":{\"docs\":{},\"x\":{\"docs\":{},\"t\":{\"docs\":{},\"a\":{\"docs\":{},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\"a\":{\"docs\":{},\"&\":{\"docs\":{},\"g\":{\"docs\":{},\"t\":{\"docs\":{\"27\":{\"ref\":27,\"tf\":0.03225806451612903}}}}}}}}}}}}},\"i\":{\"docs\":{},\"n\":{\"docs\":{},\"p\":{\"docs\":{},\"u\":{\"docs\":{},\"t\":{\"docs\":{},\"&\":{\"docs\":{},\"g\":{\"docs\":{},\"t\":{\"docs\":{\"32\":{\"ref\":32,\"tf\":0.04}}}}}}}}},\"&\":{\"docs\":{},\"g\":{\"docs\":{},\"t\":{\"docs\":{\"51\":{\"ref\":51,\"tf\":0.01694915254237288}}}}},\"o\":{\"docs\":{},\"n\":{\"docs\":{},\"-\":{\"docs\":{},\"c\":{\"docs\":{},\"o\":{\"docs\":{},\"n\":{\"docs\":{},\"t\":{\"docs\":{},\"e\":{\"docs\":{},\"n\":{\"docs\":{},\"t\":{\"docs\":{},\"&\":{\"docs\":{},\"g\":{\"docs\":{},\"t\":{\"docs\":{\"54\":{\"ref\":54,\"tf\":0.001287001287001287}}}}}}}}}}}},\"n\":{\"docs\":{},\"a\":{\"docs\":{},\"v\":{\"docs\":{},\"-\":{\"docs\":{},\"b\":{\"docs\":{},\"a\":{\"docs\":{},\"c\":{\"docs\":{},\"k\":{\"docs\":{},\"-\":{\"docs\":{},\"b\":{\"docs\":{},\"u\":{\"docs\":{},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"o\":{\"docs\":{},\"n\":{\"docs\":{},\"&\":{\"docs\":{},\"g\":{\"docs\":{},\"t\":{\"docs\":{\"82\":{\"ref\":82,\"tf\":0.0078125}}}}}}}}}}}}}},\"r\":{\"docs\":{\"82\":{\"ref\":82,\"tf\":0.0078125}},\"&\":{\"docs\":{},\"g\":{\"docs\":{},\"t\":{\"docs\":{\"123\":{\"ref\":123,\"tf\":0.0035211267605633804}}}}}}},\"u\":{\"docs\":{},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"o\":{\"docs\":{},\"n\":{\"docs\":{},\"s\":{\"docs\":{},\"&\":{\"docs\":{},\"g\":{\"docs\":{},\"t\":{\"docs\":{\"82\":{\"ref\":82,\"tf\":0.0078125}}}}}}}}}}}}}}}},\"v\":{\"docs\":{},\"i\":{\"docs\":{},\"e\":{\"docs\":{},\"w\":{\"docs\":{\"82\":{\"ref\":82,\"tf\":0.0078125}}}}}}}}}},\"/\":{\"docs\":{},\"b\":{\"docs\":{},\"u\":{\"docs\":{},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"o\":{\"docs\":{},\"n\":{\"docs\":{},\"&\":{\"docs\":{},\"g\":{\"docs\":{},\"t\":{\"docs\":{\"82\":{\"ref\":82,\"tf\":0.0078125}}}}}}}}}}},\"d\":{\"docs\":{},\"i\":{\"docs\":{},\"v\":{\"docs\":{},\"&\":{\"docs\":{},\"g\":{\"docs\":{},\"t\":{\"docs\":{\"82\":{\"ref\":82,\"tf\":0.0078125}}}}}}}},\"i\":{\"docs\":{},\"o\":{\"docs\":{},\"n\":{\"docs\":{},\"-\":{\"docs\":{},\"n\":{\"docs\":{},\"a\":{\"docs\":{},\"v\":{\"docs\":{},\"-\":{\"docs\":{},\"b\":{\"docs\":{},\"a\":{\"docs\":{},\"c\":{\"docs\":{},\"k\":{\"docs\":{},\"-\":{\"docs\":{},\"b\":{\"docs\":{},\"u\":{\"docs\":{},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"o\":{\"docs\":{},\"n\":{\"docs\":{},\"&\":{\"docs\":{},\"g\":{\"docs\":{},\"t\":{\"docs\":{\"82\":{\"ref\":82,\"tf\":0.0078125}}}}}}}}}}}}}},\"r\":{\"docs\":{},\"&\":{\"docs\":{},\"g\":{\"docs\":{},\"t\":{\"docs\":{\"82\":{\"ref\":82,\"tf\":0.0078125}}}}}}}}}}}},\"v\":{\"docs\":{},\"i\":{\"docs\":{},\"e\":{\"docs\":{},\"w\":{\"docs\":{},\"&\":{\"docs\":{},\"g\":{\"docs\":{},\"t\":{\"docs\":{\"82\":{\"ref\":82,\"tf\":0.0078125}}}}}}}}}}}}}},\"d\":{\"docs\":{},\"i\":{\"docs\":{},\"v\":{\"docs\":{\"82\":{\"ref\":82,\"tf\":0.0078125}}}}},\"f\":{\"docs\":{},\"a\":{\"docs\":{},\"d\":{\"docs\":{},\"e\":{\"docs\":{},\"-\":{\"docs\":{},\"b\":{\"docs\":{},\"a\":{\"docs\":{},\"r\":{\"docs\":{},\"&\":{\"docs\":{},\"g\":{\"docs\":{},\"t\":{\"docs\":{\"130\":{\"ref\":130,\"tf\":0.0043859649122807015}}}}}}}}}}}}},\"s\":{\"docs\":{},\"t\":{\"docs\":{},\"y\":{\"docs\":{},\"l\":{\"docs\":{},\"e\":{\"docs\":{},\"&\":{\"docs\":{},\"g\":{\"docs\":{},\"t\":{\"docs\":{\"130\":{\"ref\":130,\"tf\":0.0043859649122807015}}}}}}}}}},\"n\":{\"docs\":{},\"g\":{\"docs\":{},\"-\":{\"docs\":{},\"v\":{\"docs\":{},\"i\":{\"docs\":{},\"e\":{\"docs\":{},\"w\":{\"docs\":{},\"&\":{\"docs\":{},\"g\":{\"docs\":{},\"t\":{\"docs\":{\"133\":{\"ref\":133,\"tf\":0.0016750418760469012}}}}}}}}}}}}}},\"u\":{\"docs\":{},\"c\":{\"docs\":{},\"k\":{\"docs\":{},\"i\":{\"docs\":{},\"l\":{\"docs\":{},\"i\":{\"docs\":{\"54\":{\"ref\":54,\"tf\":0.001287001287001287},\"56\":{\"ref\":56,\"tf\":0.001594896331738437},\"134\":{\"ref\":134,\"tf\":0.0011507479861910242},\"135\":{\"ref\":135,\"tf\":0.0019305019305019305}}}}}},\"i\":{\"docs\":{},\"d\":{\"docs\":{},\"a\":{\"docs\":{\"133\":{\"ref\":133,\"tf\":0.0016750418760469012}}}}}}}},\"n\":{\"0\":{\"0\":{\"docs\":{},\"b\":{\"docs\":{\"54\":{\"ref\":54,\"tf\":0.001287001287001287}}}},\"docs\":{}},\"docs\":{},\"a\":{\"docs\":{},\"v\":{\"docs\":{\"82\":{\"ref\":82,\"tf\":0.0078125},\"101\":{\"ref\":101,\"tf\":0.043478260869565216},\"133\":{\"ref\":133,\"tf\":0.01340033500837521}},\"i\":{\"docs\":{},\"g\":{\"docs\":{\"0\":{\"ref\":0,\"tf\":0.03225806451612903},\"39\":{\"ref\":39,\"tf\":0.02531645569620253},\"60\":{\"ref\":60,\"tf\":0.0022727272727272726},\"81\":{\"ref\":81,\"tf\":0.015151515151515152},\"84\":{\"ref\":84,\"tf\":0.02181818181818182},\"95\":{\"ref\":95,\"tf\":0.009345794392523364},\"123\":{\"ref\":123,\"tf\":0.01056338028169014},\"133\":{\"ref\":133,\"tf\":0.010050251256281407}},\"a\":{\"docs\":{},\"t\":{\"docs\":{},\"o\":{\"docs\":{},\"r\":{\"docs\":{},\".\":{\"docs\":{},\"c\":{\"docs\":{},\"a\":{\"docs\":{},\"m\":{\"docs\":{},\"e\":{\"docs\":{},\"r\":{\"docs\":{},\"a\":{\"docs\":{\"135\":{\"ref\":135,\"tf\":0.0019305019305019305}},\".\":{\"docs\":{},\"g\":{\"docs\":{},\"e\":{\"docs\":{},\"t\":{\"docs\":{},\"p\":{\"docs\":{},\"h\":{\"docs\":{},\"o\":{\"docs\":{},\"t\":{\"docs\":{},\"o\":{\"docs\":{},\"s\":{\"docs\":{},\"(\":{\"docs\":{},\"s\":{\"docs\":{},\"t\":{\"docs\":{},\"a\":{\"docs\":{},\"r\":{\"docs\":{},\"t\":{\"docs\":{\"135\":{\"ref\":135,\"tf\":0.0019305019305019305}}}}}}}}}}}}},\"i\":{\"docs\":{},\"c\":{\"docs\":{},\"t\":{\"docs\":{},\"u\":{\"docs\":{},\"r\":{\"docs\":{\"135\":{\"ref\":135,\"tf\":0.0019305019305019305}}}}}}}}}}}}}}}}}},\"g\":{\"docs\":{},\"e\":{\"docs\":{},\"o\":{\"docs\":{},\"l\":{\"docs\":{},\"o\":{\"docs\":{},\"c\":{\"docs\":{\"135\":{\"ref\":135,\"tf\":0.0019305019305019305}}}}}}}}}}}}}}},\"-\":{\"docs\":{},\"t\":{\"docs\":{},\"i\":{\"docs\":{},\"t\":{\"docs\":{},\"l\":{\"docs\":{},\"e\":{\"docs\":{},\"-\":{\"docs\":{},\"s\":{\"docs\":{},\"l\":{\"docs\":{},\"i\":{\"docs\":{},\"d\":{\"docs\":{},\"e\":{\"docs\":{},\"-\":{\"docs\":{},\"i\":{\"docs\":{},\"o\":{\"docs\":{},\"s\":{\"7\":{\"docs\":{\"53\":{\"ref\":53,\"tf\":0.041666666666666664},\"82\":{\"ref\":82,\"tf\":0.0078125}}},\"docs\":{}}}}}}}}}}}}}}}},\"c\":{\"docs\":{},\"l\":{\"docs\":{},\"e\":{\"docs\":{},\"a\":{\"docs\":{},\"r\":{\"docs\":{\"102\":{\"ref\":102,\"tf\":10.083333333333334}}}}}}},\"p\":{\"docs\":{},\"a\":{\"docs\":{},\"g\":{\"docs\":{\"133\":{\"ref\":133,\"tf\":0.0033500837520938024}}}}}},\"b\":{\"docs\":{},\"a\":{\"docs\":{},\"r\":{\"docs\":{\"82\":{\"ref\":82,\"tf\":0.0390625},\"83\":{\"ref\":83,\"tf\":0.02127659574468085},\"84\":{\"ref\":84,\"tf\":0.0036363636363636364},\"98\":{\"ref\":98,\"tf\":0.018867924528301886},\"112\":{\"ref\":112,\"tf\":0.01764705882352941}},\"'\":{\"docs\":{\"83\":{\"ref\":83,\"tf\":0.02127659574468085}}}}}},\"v\":{\"docs\":{},\"i\":{\"docs\":{},\"e\":{\"docs\":{},\"w\":{\"docs\":{},\"'\":{\"docs\":{\"84\":{\"ref\":84,\"tf\":0.0036363636363636364}}}}}}},\"c\":{\"docs\":{},\"l\":{\"docs\":{},\"e\":{\"docs\":{},\"a\":{\"docs\":{},\"r\":{\"docs\":{\"123\":{\"ref\":123,\"tf\":0.0035211267605633804}}}}}}}},\"i\":{\"docs\":{},\"l\":{\"docs\":{\"19\":{\"ref\":19,\"tf\":0.02},\"24\":{\"ref\":24,\"tf\":0.08333333333333333}}}},\"m\":{\"docs\":{},\"e\":{\"docs\":{\"29\":{\"ref\":29,\"tf\":0.10256410256410256},\"36\":{\"ref\":36,\"tf\":0.017857142857142856},\"50\":{\"ref\":50,\"tf\":0.017857142857142856},\"54\":{\"ref\":54,\"tf\":0.001287001287001287},\"84\":{\"ref\":84,\"tf\":0.01818181818181818},\"106\":{\"ref\":106,\"tf\":0.02666666666666667},\"121\":{\"ref\":121,\"tf\":0.005813953488372093},\"122\":{\"ref\":122,\"tf\":0.16666666666666666},\"123\":{\"ref\":123,\"tf\":0.0035211267605633804},\"124\":{\"ref\":124,\"tf\":0.010309278350515464},\"125\":{\"ref\":125,\"tf\":0.2},\"135\":{\"ref\":135,\"tf\":0.005791505791505791}},\"=\":{\"docs\":{},\"\\\"\":{\"docs\":{},\"f\":{\"docs\":{},\"u\":{\"docs\":{},\"l\":{\"docs\":{},\"l\":{\"docs\":{},\"s\":{\"docs\":{},\"c\":{\"docs\":{},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\"e\":{\"docs\":{},\"n\":{\"docs\":{\"99\":{\"ref\":99,\"tf\":0.02127659574468085},\"103\":{\"ref\":103,\"tf\":0.006493506493506494}}}}}}}}}}}}}}}},\"b\":{\"docs\":{},\"o\":{\"docs\":{},\"o\":{\"docs\":{\"38\":{\"ref\":38,\"tf\":0.023255813953488372}}}}},\"t\":{\"docs\":{},\"i\":{\"docs\":{},\"v\":{\"docs\":{\"54\":{\"ref\":54,\"tf\":0.001287001287001287},\"56\":{\"ref\":56,\"tf\":0.003189792663476874},\"57\":{\"ref\":57,\"tf\":0.025943396226415096},\"60\":{\"ref\":60,\"tf\":0.00909090909090909},\"61\":{\"ref\":61,\"tf\":0.010869565217391304},\"67\":{\"ref\":67,\"tf\":0.027777777777777776},\"74\":{\"ref\":74,\"tf\":0.005988023952095809},\"103\":{\"ref\":103,\"tf\":0.012987012987012988},\"104\":{\"ref\":104,\"tf\":0.00423728813559322},\"128\":{\"ref\":128,\"tf\":0.017857142857142856},\"132\":{\"ref\":132,\"tf\":0.01282051282051282},\"135\":{\"ref\":135,\"tf\":0.023166023166023165},\"136\":{\"ref\":136,\"tf\":0.010101010101010102}},\"e\":{\"docs\":{},\"-\":{\"docs\":{},\"s\":{\"docs\":{},\"t\":{\"docs\":{},\"y\":{\"docs\":{},\"l\":{\"docs\":{\"57\":{\"ref\":57,\"tf\":0.0023584905660377358}}}}}},\"f\":{\"docs\":{},\"e\":{\"docs\":{},\"e\":{\"docs\":{},\"l\":{\"docs\":{\"61\":{\"ref\":61,\"tf\":0.010869565217391304}}}}}},\"t\":{\"docs\":{},\"o\":{\"docs\":{},\"-\":{\"docs\":{},\"b\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"w\":{\"docs\":{},\"s\":{\"docs\":{\"135\":{\"ref\":135,\"tf\":0.0019305019305019305}}}}}}}}}}},\"/\":{\"docs\":{},\"h\":{\"docs\":{},\"y\":{\"docs\":{},\"b\":{\"docs\":{},\"r\":{\"docs\":{},\"i\":{\"docs\":{},\"d\":{\"docs\":{\"67\":{\"ref\":67,\"tf\":0.027777777777777776}}}}}}}}}}}}}},\"e\":{\"docs\":{},\"e\":{\"docs\":{},\"d\":{\"docs\":{\"3\":{\"ref\":3,\"tf\":0.019230769230769232},\"16\":{\"ref\":16,\"tf\":0.007352941176470588},\"45\":{\"ref\":45,\"tf\":0.00980392156862745},\"54\":{\"ref\":54,\"tf\":0.007722007722007722},\"56\":{\"ref\":56,\"tf\":0.017543859649122806},\"57\":{\"ref\":57,\"tf\":0.009433962264150943},\"58\":{\"ref\":58,\"tf\":0.01912568306010929},\"59\":{\"ref\":59,\"tf\":0.019498607242339833},\"60\":{\"ref\":60,\"tf\":0.004545454545454545},\"63\":{\"ref\":63,\"tf\":0.024390243902439025},\"84\":{\"ref\":84,\"tf\":0.0036363636363636364},\"99\":{\"ref\":99,\"tf\":0.02127659574468085},\"103\":{\"ref\":103,\"tf\":0.012987012987012988},\"107\":{\"ref\":107,\"tf\":0.012658227848101266},\"111\":{\"ref\":111,\"tf\":0.007518796992481203},\"121\":{\"ref\":121,\"tf\":0.005813953488372093},\"126\":{\"ref\":126,\"tf\":0.022222222222222223},\"128\":{\"ref\":128,\"tf\":0.017857142857142856},\"129\":{\"ref\":129,\"tf\":0.010434782608695653},\"130\":{\"ref\":130,\"tf\":0.017543859649122806},\"132\":{\"ref\":132,\"tf\":0.02564102564102564},\"133\":{\"ref\":133,\"tf\":0.006700167504187605},\"134\":{\"ref\":134,\"tf\":0.0011507479861910242},\"135\":{\"ref\":135,\"tf\":0.009652509652509652}}}},\"v\":{\"docs\":{},\"e\":{\"docs\":{},\"r\":{\"docs\":{\"54\":{\"ref\":54,\"tf\":0.001287001287001287},\"130\":{\"ref\":130,\"tf\":0.0043859649122807015}},\"m\":{\"docs\":{},\"i\":{\"docs\":{},\"n\":{\"docs\":{},\"d\":{\"docs\":{\"19\":{\"ref\":19,\"tf\":0.02}}}}}}}}},\"t\":{\"docs\":{\"36\":{\"ref\":36,\"tf\":0.017857142857142856}},\"w\":{\"docs\":{},\"o\":{\"docs\":{},\"r\":{\"docs\":{},\"k\":{\"docs\":{\"60\":{\"ref\":60,\"tf\":0.0022727272727272726},\"84\":{\"ref\":84,\"tf\":0.0036363636363636364}}}}}}},\"w\":{\"docs\":{\"54\":{\"ref\":54,\"tf\":0.019305019305019305},\"55\":{\"ref\":55,\"tf\":0.02040816326530612},\"56\":{\"ref\":56,\"tf\":0.006379585326953748},\"58\":{\"ref\":58,\"tf\":0.00819672131147541},\"59\":{\"ref\":59,\"tf\":0.016713091922005572},\"71\":{\"ref\":71,\"tf\":0.008},\"105\":{\"ref\":105,\"tf\":0.017543859649122806},\"112\":{\"ref\":112,\"tf\":0.023529411764705882},\"114\":{\"ref\":114,\"tf\":0.001594896331738437},\"129\":{\"ref\":129,\"tf\":0.0034782608695652175},\"130\":{\"ref\":130,\"tf\":0.008771929824561403},\"133\":{\"ref\":133,\"tf\":0.0016750418760469012},\"134\":{\"ref\":134,\"tf\":0.004602991944764097},\"135\":{\"ref\":135,\"tf\":0.0019305019305019305},\"136\":{\"ref\":136,\"tf\":0.005050505050505051}},\"p\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"j\":{\"docs\":{},\"e\":{\"docs\":{},\"c\":{\"docs\":{},\"t\":{\"docs\":{\"54\":{\"ref\":54,\"tf\":0.002574002574002574}}}}}}}}},\"i\":{\"docs\":{},\"t\":{\"docs\":{},\"e\":{\"docs\":{},\"m\":{\"docs\":{\"88\":{\"ref\":88,\"tf\":0.009708737864077669}}}}}},\"e\":{\"docs\":{},\"r\":{\"docs\":{\"134\":{\"ref\":134,\"tf\":0.0011507479861910242}}}}},\"c\":{\"docs\":{},\"e\":{\"docs\":{},\"s\":{\"docs\":{},\"s\":{\"docs\":{},\"a\":{\"docs\":{},\"r\":{\"docs\":{},\"i\":{\"docs\":{\"56\":{\"ref\":56,\"tf\":0.003189792663476874},\"57\":{\"ref\":57,\"tf\":0.0023584905660377358},\"134\":{\"ref\":134,\"tf\":0.0023014959723820483},\"135\":{\"ref\":135,\"tf\":0.003861003861003861}}}}}}}}},\"x\":{\"docs\":{},\"t\":{\"docs\":{\"56\":{\"ref\":56,\"tf\":0.004784688995215311},\"84\":{\"ref\":84,\"tf\":0.0036363636363636364},\"102\":{\"ref\":102,\"tf\":0.020833333333333332},\"117\":{\"ref\":117,\"tf\":0.022727272727272728},\"119\":{\"ref\":119,\"tf\":0.003937007874015748},\"123\":{\"ref\":123,\"tf\":0.0035211267605633804},\"127\":{\"ref\":127,\"tf\":0.006622516556291391},\"129\":{\"ref\":129,\"tf\":0.0017391304347826088},\"130\":{\"ref\":130,\"tf\":0.0043859649122807015},\"133\":{\"ref\":133,\"tf\":0.005025125628140704}}}},\"a\":{\"docs\":{},\"r\":{\"docs\":{\"78\":{\"ref\":78,\"tf\":0.011235955056179775},\"123\":{\"ref\":123,\"tf\":0.0035211267605633804},\"134\":{\"ref\":134,\"tf\":0.0011507479861910242}}}},\"s\":{\"docs\":{},\"t\":{\"docs\":{\"84\":{\"ref\":84,\"tf\":0.0036363636363636364}}}},\"u\":{\"docs\":{},\"e\":{\"docs\":{\"133\":{\"ref\":133,\"tf\":0.0033500837520938024}}}}},\"o\":{\"docs\":{},\"t\":{\"docs\":{},\"e\":{\"docs\":{\"8\":{\"ref\":8,\"tf\":0.02702702702702703},\"9\":{\"ref\":9,\"tf\":0.02702702702702703},\"28\":{\"ref\":28,\"tf\":0.038461538461538464},\"34\":{\"ref\":34,\"tf\":0.016666666666666666},\"35\":{\"ref\":35,\"tf\":0.01818181818181818},\"43\":{\"ref\":43,\"tf\":0.006944444444444444},\"44\":{\"ref\":44,\"tf\":0.018518518518518517},\"45\":{\"ref\":45,\"tf\":0.00980392156862745},\"46\":{\"ref\":46,\"tf\":0.019230769230769232},\"47\":{\"ref\":47,\"tf\":0.01},\"48\":{\"ref\":48,\"tf\":0.011627906976744186},\"51\":{\"ref\":51,\"tf\":0.01694915254237288},\"56\":{\"ref\":56,\"tf\":0.012759170653907496},\"59\":{\"ref\":59,\"tf\":0.002785515320334262},\"60\":{\"ref\":60,\"tf\":0.004545454545454545},\"71\":{\"ref\":71,\"tf\":0.008},\"76\":{\"ref\":76,\"tf\":0.018867924528301886},\"77\":{\"ref\":77,\"tf\":0.018867924528301886},\"82\":{\"ref\":82,\"tf\":0.0078125},\"96\":{\"ref\":96,\"tf\":0.017857142857142856},\"99\":{\"ref\":99,\"tf\":0.02127659574468085},\"103\":{\"ref\":103,\"tf\":0.012987012987012988},\"104\":{\"ref\":104,\"tf\":0.00423728813559322},\"111\":{\"ref\":111,\"tf\":0.007518796992481203},\"115\":{\"ref\":115,\"tf\":0.003246753246753247},\"127\":{\"ref\":127,\"tf\":0.006622516556291391},\"132\":{\"ref\":132,\"tf\":0.01282051282051282},\"135\":{\"ref\":135,\"tf\":0.0019305019305019305}}},\"i\":{\"docs\":{},\"c\":{\"docs\":{\"27\":{\"ref\":27,\"tf\":0.03225806451612903},\"44\":{\"ref\":44,\"tf\":0.018518518518518517},\"50\":{\"ref\":50,\"tf\":0.008928571428571428},\"72\":{\"ref\":72,\"tf\":0.002331002331002331},\"133\":{\"ref\":133,\"tf\":0.0016750418760469012},\"134\":{\"ref\":134,\"tf\":0.0023014959723820483}}}},\"h\":{\"docs\":{\"28\":{\"ref\":28,\"tf\":0.038461538461538464},\"116\":{\"ref\":116,\"tf\":0.005555555555555556},\"129\":{\"ref\":129,\"tf\":0.0017391304347826088}}}},\"r\":{\"docs\":{},\"m\":{\"docs\":{},\"a\":{\"docs\":{},\"l\":{\"docs\":{\"22\":{\"ref\":22,\"tf\":0.024390243902439025},\"56\":{\"ref\":56,\"tf\":0.001594896331738437},\"102\":{\"ref\":102,\"tf\":0.020833333333333332},\"104\":{\"ref\":104,\"tf\":0.00423728813559322},\"114\":{\"ref\":114,\"tf\":0.001594896331738437},\"123\":{\"ref\":123,\"tf\":0.0035211267605633804}}}}}},\"v\":{\"docs\":{},\"e\":{\"docs\":{},\"m\":{\"docs\":{},\"b\":{\"docs\":{\"25\":{\"ref\":25,\"tf\":0.022988505747126436}}}}}},\"-\":{\"docs\":{},\"a\":{\"docs\":{},\"n\":{\"docs\":{},\"i\":{\"docs\":{},\"m\":{\"docs\":{\"53\":{\"ref\":53,\"tf\":0.041666666666666664}}}}}}},\"w\":{\"docs\":{\"54\":{\"ref\":54,\"tf\":0.005148005148005148},\"56\":{\"ref\":56,\"tf\":0.006379585326953748},\"57\":{\"ref\":57,\"tf\":0.0047169811320754715},\"58\":{\"ref\":58,\"tf\":0.01366120218579235},\"59\":{\"ref\":59,\"tf\":0.013927576601671309},\"60\":{\"ref\":60,\"tf\":0.004545454545454545},\"63\":{\"ref\":63,\"tf\":0.024390243902439025},\"129\":{\"ref\":129,\"tf\":0.0017391304347826088},\"130\":{\"ref\":130,\"tf\":0.017543859649122806},\"132\":{\"ref\":132,\"tf\":0.01282051282051282},\"133\":{\"ref\":133,\"tf\":0.005025125628140704},\"134\":{\"ref\":134,\"tf\":0.004602991944764097},\"136\":{\"ref\":136,\"tf\":0.005050505050505051}}},\"d\":{\"docs\":{},\"e\":{\"docs\":{\"119\":{\"ref\":119,\"tf\":0.007874015748031496}},\".\":{\"docs\":{},\"j\":{\"docs\":{\"63\":{\"ref\":63,\"tf\":0.024390243902439025},\"127\":{\"ref\":127,\"tf\":0.006622516556291391}},\"s\":{\"docs\":{},\"]\":{\"docs\":{},\"(\":{\"docs\":{},\"h\":{\"docs\":{},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"p\":{\"docs\":{},\":\":{\"docs\":{},\"/\":{\"docs\":{},\"/\":{\"docs\":{},\"n\":{\"docs\":{},\"o\":{\"docs\":{},\"d\":{\"docs\":{},\"e\":{\"docs\":{},\"j\":{\"docs\":{},\"s\":{\"docs\":{},\".\":{\"docs\":{},\"o\":{\"docs\":{},\"r\":{\"docs\":{},\"g\":{\"docs\":{\"56\":{\"ref\":56,\"tf\":0.001594896331738437}}}}}}}}}}}}}}}}}}}}}}}},\"n\":{\"docs\":{},\"a\":{\"docs\":{},\"m\":{\"docs\":{\"119\":{\"ref\":119,\"tf\":0.007874015748031496}}}}}}},\"n\":{\"docs\":{},\"e\":{\"docs\":{\"72\":{\"ref\":72,\"tf\":0.002331002331002331},\"104\":{\"ref\":104,\"tf\":0.00423728813559322},\"133\":{\"ref\":133,\"tf\":0.0016750418760469012}}},\"-\":{\"docs\":{},\"d\":{\"docs\":{},\"e\":{\"docs\":{},\"s\":{\"docs\":{},\"t\":{\"docs\":{},\"r\":{\"docs\":{},\"u\":{\"docs\":{},\"c\":{\"docs\":{},\"t\":{\"docs\":{\"105\":{\"ref\":105,\"tf\":0.005847953216374269}}}}}}}}}}}},\"b\":{\"docs\":{},\"a\":{\"docs\":{},\"c\":{\"docs\":{},\"k\":{\"docs\":{},\"d\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"p\":{\"docs\":{\"110\":{\"ref\":110,\"tf\":0.01020408163265306}}}}}}}}}}},\"u\":{\"docs\":{},\"m\":{\"docs\":{},\"b\":{\"docs\":{},\"e\":{\"docs\":{},\"r\":{\"docs\":{\"10\":{\"ref\":10,\"tf\":0.023809523809523808},\"23\":{\"ref\":23,\"tf\":0.06060606060606061},\"43\":{\"ref\":43,\"tf\":0.006944444444444444},\"72\":{\"ref\":72,\"tf\":0.004662004662004662},\"91\":{\"ref\":91,\"tf\":0.0196078431372549},\"94\":{\"ref\":94,\"tf\":0.011111111111111112},\"95\":{\"ref\":95,\"tf\":0.009345794392523364},\"110\":{\"ref\":110,\"tf\":0.02040816326530612},\"113\":{\"ref\":113,\"tf\":0.0070921985815602835},\"115\":{\"ref\":115,\"tf\":0.01948051948051948},\"117\":{\"ref\":117,\"tf\":0.045454545454545456},\"118\":{\"ref\":118,\"tf\":0.01904761904761905},\"119\":{\"ref\":119,\"tf\":0.05905511811023622}}}}},\"e\":{\"docs\":{},\"r\":{\"docs\":{\"134\":{\"ref\":134,\"tf\":0.0011507479861910242}}}}},\"b\":{\"docs\":{\"97\":{\"ref\":97,\"tf\":0.019230769230769232}}},\"l\":{\"docs\":{},\"l\":{\"docs\":{\"106\":{\"ref\":106,\"tf\":0.013333333333333334},\"114\":{\"ref\":114,\"tf\":0.001594896331738437},\"119\":{\"ref\":119,\"tf\":0.007874015748031496}}}}},\"g\":{\"docs\":{},\"-\":{\"docs\":{},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\"p\":{\"docs\":{},\"e\":{\"docs\":{},\"a\":{\"docs\":{},\"t\":{\"docs\":{\"19\":{\"ref\":19,\"tf\":0.02},\"54\":{\"ref\":54,\"tf\":0.001287001287001287},\"117\":{\"ref\":117,\"tf\":0.007575757575757576}}}}}}}},\"c\":{\"docs\":{},\"l\":{\"docs\":{},\"a\":{\"docs\":{},\"s\":{\"docs\":{},\"s\":{\"docs\":{\"54\":{\"ref\":54,\"tf\":0.001287001287001287}}}}},\"i\":{\"docs\":{},\"c\":{\"docs\":{},\"k\":{\"docs\":{\"95\":{\"ref\":95,\"tf\":0.009345794392523364},\"134\":{\"ref\":134,\"tf\":0.005753739930955121}},\"=\":{\"docs\":{},\"\\\"\":{\"docs\":{},\"c\":{\"docs\":{},\"l\":{\"docs\":{},\"o\":{\"docs\":{},\"s\":{\"docs\":{},\"e\":{\"docs\":{},\"n\":{\"docs\":{},\"e\":{\"docs\":{},\"w\":{\"docs\":{},\"t\":{\"docs\":{},\"a\":{\"docs\":{},\"s\":{\"docs\":{},\"k\":{\"docs\":{},\"(\":{\"docs\":{},\")\":{\"docs\":{},\"\\\"\":{\"docs\":{},\">\":{\"docs\":{},\"c\":{\"docs\":{},\"a\":{\"docs\":{},\"n\":{\"docs\":{},\"c\":{\"docs\":{},\"e\":{\"docs\":{},\"l\":{\"docs\":{},\"<\":{\"docs\":{},\"/\":{\"docs\":{},\"b\":{\"docs\":{},\"u\":{\"docs\":{},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"o\":{\"docs\":{},\"n\":{\"docs\":{\"54\":{\"ref\":54,\"tf\":0.001287001287001287}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},\"o\":{\"docs\":{},\"n\":{\"docs\":{},\"t\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"l\":{\"docs\":{},\"l\":{\"docs\":{},\"e\":{\"docs\":{},\"r\":{\"docs\":{},\"=\":{\"docs\":{},\"\\\"\":{\"docs\":{},\"h\":{\"docs\":{},\"o\":{\"docs\":{},\"m\":{\"docs\":{},\"e\":{\"docs\":{},\"c\":{\"docs\":{},\"t\":{\"docs\":{},\"r\":{\"docs\":{},\"l\":{\"docs\":{\"84\":{\"ref\":84,\"tf\":0.0036363636363636364}}}}}}}}}}}}}}}}}}}}}},\"m\":{\"docs\":{},\"o\":{\"docs\":{},\"d\":{\"docs\":{},\"e\":{\"docs\":{},\"l\":{\"docs\":{},\"=\":{\"docs\":{},\"\\\"\":{\"docs\":{},\"t\":{\"docs\":{},\"a\":{\"docs\":{},\"s\":{\"docs\":{},\"k\":{\"docs\":{},\".\":{\"docs\":{},\"t\":{\"docs\":{},\"i\":{\"docs\":{},\"t\":{\"docs\":{},\"l\":{\"docs\":{\"54\":{\"ref\":54,\"tf\":0.002574002574002574}}}}}}}}}}}}}}}}}},\"s\":{\"docs\":{},\"u\":{\"docs\":{},\"b\":{\"docs\":{},\"m\":{\"docs\":{},\"i\":{\"docs\":{},\"t\":{\"docs\":{},\"=\":{\"docs\":{},\"\\\"\":{\"docs\":{},\"c\":{\"docs\":{},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\"a\":{\"docs\":{},\"t\":{\"docs\":{},\"e\":{\"docs\":{},\"t\":{\"docs\":{},\"a\":{\"docs\":{},\"s\":{\"docs\":{},\"k\":{\"docs\":{},\"(\":{\"docs\":{},\"t\":{\"docs\":{},\"a\":{\"docs\":{},\"s\":{\"docs\":{},\"k\":{\"docs\":{\"54\":{\"ref\":54,\"tf\":0.001287001287001287}}}}}}}}}}}}}}}}}}}}}}}},\"h\":{\"docs\":{},\"o\":{\"docs\":{},\"w\":{\"docs\":{\"72\":{\"ref\":72,\"tf\":0.004662004662004662}}}}},\"t\":{\"docs\":{},\"y\":{\"docs\":{},\"l\":{\"docs\":{},\"e\":{\"docs\":{\"72\":{\"ref\":72,\"tf\":0.002331002331002331}}}}}}},\"a\":{\"docs\":{},\"p\":{\"docs\":{},\"p\":{\"docs\":{\"59\":{\"ref\":59,\"tf\":0.002785515320334262}}}}},\"h\":{\"docs\":{},\"i\":{\"docs\":{},\"d\":{\"docs\":{},\"e\":{\"docs\":{\"72\":{\"ref\":72,\"tf\":0.004662004662004662}}}}}},\"i\":{\"docs\":{},\"f\":{\"docs\":{\"76\":{\"ref\":76,\"tf\":0.018867924528301886},\"77\":{\"ref\":77,\"tf\":0.018867924528301886},\"78\":{\"ref\":78,\"tf\":0.011235955056179775}}}}},\"a\":{\"docs\":{},\"n\":{\"docs\":{},\"i\":{\"docs\":{},\"m\":{\"docs\":{\"59\":{\"ref\":59,\"tf\":0.002785515320334262}}}}}},\"s\":{\"docs\":{},\"a\":{\"docs\":{},\"n\":{\"docs\":{},\"i\":{\"docs\":{},\"t\":{\"docs\":{\"59\":{\"ref\":59,\"tf\":0.002785515320334262}}}}}}},\"c\":{\"docs\":{},\"l\":{\"docs\":{},\"i\":{\"docs\":{},\"c\":{\"docs\":{},\"k\":{\"docs\":{\"95\":{\"ref\":95,\"tf\":0.009345794392523364},\"134\":{\"ref\":134,\"tf\":0.0011507479861910242}}}}}}},\"t\":{\"docs\":{},\"o\":{\"docs\":{},\"u\":{\"docs\":{},\"c\":{\"docs\":{},\"h\":{\"docs\":{\"134\":{\"ref\":134,\"tf\":0.006904487917146145}},\"]\":{\"docs\":{},\"(\":{\"docs\":{},\"h\":{\"docs\":{},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"p\":{\"docs\":{},\"s\":{\"docs\":{},\":\":{\"docs\":{},\"/\":{\"docs\":{},\"/\":{\"docs\":{},\"d\":{\"docs\":{},\"o\":{\"docs\":{},\"c\":{\"docs\":{},\"s\":{\"docs\":{},\".\":{\"docs\":{},\"a\":{\"docs\":{},\"n\":{\"docs\":{},\"g\":{\"docs\":{},\"u\":{\"docs\":{},\"l\":{\"docs\":{},\"a\":{\"docs\":{},\"r\":{\"docs\":{},\"j\":{\"docs\":{},\"s\":{\"docs\":{},\".\":{\"docs\":{},\"o\":{\"docs\":{},\"r\":{\"docs\":{},\"g\":{\"docs\":{},\"/\":{\"docs\":{},\"a\":{\"docs\":{},\"p\":{\"docs\":{},\"i\":{\"docs\":{},\"/\":{\"docs\":{},\"n\":{\"docs\":{},\"g\":{\"docs\":{},\"t\":{\"docs\":{},\"o\":{\"docs\":{},\"u\":{\"docs\":{},\"c\":{\"docs\":{},\"h\":{\"docs\":{\"104\":{\"ref\":104,\"tf\":0.00423728813559322}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"u\":{\"docs\":{},\"t\":{\"docs\":{\"133\":{\"ref\":133,\"tf\":0.006700167504187605}}}}}}},\"i\":{\"docs\":{},\"n\":{\"docs\":{},\"e\":{\"docs\":{\"19\":{\"ref\":19,\"tf\":0.02},\"24\":{\"ref\":24,\"tf\":0.08333333333333333}}}},\"r\":{\"docs\":{},\"v\":{\"docs\":{},\"a\":{\"docs\":{},\"n\":{\"docs\":{},\"a\":{\"docs\":{\"19\":{\"ref\":19,\"tf\":0.02}}}}}}},\"c\":{\"docs\":{},\"e\":{\"docs\":{\"48\":{\"ref\":48,\"tf\":0.011627906976744186},\"58\":{\"ref\":58,\"tf\":0.00273224043715847},\"133\":{\"ref\":133,\"tf\":0.0016750418760469012}}}},\"f\":{\"docs\":{},\"t\":{\"docs\":{},\"i\":{\"docs\":{\"134\":{\"ref\":134,\"tf\":0.0011507479861910242}}}}},\"t\":{\"docs\":{},\"o\":{\"docs\":{},\"b\":{\"docs\":{},\"i\":{\"docs\":{\"135\":{\"ref\":135,\"tf\":0.003861003861003861}}}}}}},\"-\":{\"1\":{\"docs\":{\"38\":{\"ref\":38,\"tf\":0.011627906976744186}}},\"docs\":{}},\"p\":{\"docs\":{},\"m\":{\"docs\":{\"56\":{\"ref\":56,\"tf\":0.003189792663476874},\"63\":{\"ref\":63,\"tf\":0.024390243902439025},\"127\":{\"ref\":127,\"tf\":0.006622516556291391}}}}},\"o\":{\"docs\":{},\"p\":{\"docs\":{},\"t\":{\"docs\":{\"105\":{\"ref\":105,\"tf\":0.005847953216374269},\"110\":{\"ref\":110,\"tf\":0.01020408163265306}},\"i\":{\"docs\":{},\"o\":{\"docs\":{},\"n\":{\"docs\":{\"0\":{\"ref\":0,\"tf\":0.03225806451612903},\"2\":{\"ref\":2,\"tf\":0.025},\"3\":{\"ref\":3,\"tf\":0.019230769230769232},\"4\":{\"ref\":4,\"tf\":0.022727272727272728},\"38\":{\"ref\":38,\"tf\":0.023255813953488372},\"49\":{\"ref\":49,\"tf\":0.08333333333333333},\"56\":{\"ref\":56,\"tf\":0.001594896331738437},\"60\":{\"ref\":60,\"tf\":0.004545454545454545},\"64\":{\"ref\":64,\"tf\":0.0625},\"71\":{\"ref\":71,\"tf\":0.016},\"72\":{\"ref\":72,\"tf\":0.002331002331002331},\"74\":{\"ref\":74,\"tf\":0.059880239520958084},\"76\":{\"ref\":76,\"tf\":0.018867924528301886},\"77\":{\"ref\":77,\"tf\":0.018867924528301886},\"78\":{\"ref\":78,\"tf\":0.02247191011235955},\"80\":{\"ref\":80,\"tf\":0.038461538461538464},\"82\":{\"ref\":82,\"tf\":0.015625},\"84\":{\"ref\":84,\"tf\":0.0036363636363636364},\"88\":{\"ref\":88,\"tf\":0.05825242718446602},\"89\":{\"ref\":89,\"tf\":0.022727272727272728},\"90\":{\"ref\":90,\"tf\":0.10416666666666667},\"91\":{\"ref\":91,\"tf\":0.0392156862745098},\"92\":{\"ref\":92,\"tf\":0.02857142857142857},\"93\":{\"ref\":93,\"tf\":0.014084507042253521},\"94\":{\"ref\":94,\"tf\":0.07777777777777778},\"95\":{\"ref\":95,\"tf\":0.08411214953271028},\"96\":{\"ref\":96,\"tf\":0.017857142857142856},\"97\":{\"ref\":97,\"tf\":0.019230769230769232},\"98\":{\"ref\":98,\"tf\":0.05660377358490566},\"105\":{\"ref\":105,\"tf\":0.017543859649122806},\"109\":{\"ref\":109,\"tf\":0.05128205128205128},\"110\":{\"ref\":110,\"tf\":0.02040816326530612},\"111\":{\"ref\":111,\"tf\":0.05263157894736842},\"112\":{\"ref\":112,\"tf\":0.01764705882352941},\"113\":{\"ref\":113,\"tf\":0.014184397163120567},\"114\":{\"ref\":114,\"tf\":0.03668261562998405},\"115\":{\"ref\":115,\"tf\":0.01948051948051948},\"116\":{\"ref\":116,\"tf\":0.016666666666666666},\"117\":{\"ref\":117,\"tf\":0.015151515151515152},\"118\":{\"ref\":118,\"tf\":0.009523809523809525},\"120\":{\"ref\":120,\"tf\":0.012578616352201259},\"121\":{\"ref\":121,\"tf\":0.011627906976744186},\"124\":{\"ref\":124,\"tf\":0.020618556701030927},\"134\":{\"ref\":134,\"tf\":0.0011507479861910242}}}},\"m\":{\"docs\":{\"58\":{\"ref\":58,\"tf\":0.00546448087431694}}}}},\"e\":{\"docs\":{},\"n\":{\"docs\":{\"38\":{\"ref\":38,\"tf\":0.011627906976744186},\"54\":{\"ref\":54,\"tf\":0.003861003861003861},\"56\":{\"ref\":56,\"tf\":0.003189792663476874},\"57\":{\"ref\":57,\"tf\":0.014150943396226415},\"60\":{\"ref\":60,\"tf\":0.011363636363636364},\"68\":{\"ref\":68,\"tf\":0.027777777777777776},\"100\":{\"ref\":100,\"tf\":0.08333333333333333},\"101\":{\"ref\":101,\"tf\":0.043478260869565216},\"103\":{\"ref\":103,\"tf\":0.006493506493506494},\"105\":{\"ref\":105,\"tf\":0.011695906432748537},\"109\":{\"ref\":109,\"tf\":0.008547008547008548},\"113\":{\"ref\":113,\"tf\":0.0070921985815602835},\"114\":{\"ref\":114,\"tf\":0.001594896331738437},\"116\":{\"ref\":116,\"tf\":0.06111111111111111},\"123\":{\"ref\":123,\"tf\":0.0035211267605633804},\"128\":{\"ref\":128,\"tf\":0.017857142857142856},\"130\":{\"ref\":130,\"tf\":0.0043859649122807015},\"133\":{\"ref\":133,\"tf\":0.0016750418760469012},\"135\":{\"ref\":135,\"tf\":0.003861003861003861},\"136\":{\"ref\":136,\"tf\":0.005050505050505051}},\"-\":{\"docs\":{},\"s\":{\"docs\":{},\"o\":{\"docs\":{},\"u\":{\"docs\":{},\"r\":{\"docs\":{},\"c\":{\"docs\":{\"51\":{\"ref\":51,\"tf\":0.01694915254237288}}}}}}}},\"e\":{\"docs\":{},\"d\":{\"docs\":{},\"/\":{\"docs\":{},\"o\":{\"docs\":{},\"p\":{\"docs\":{},\"e\":{\"docs\":{},\"n\":{\"docs\":{\"116\":{\"ref\":116,\"tf\":0.011111111111111112}}}}}}}}},\"r\":{\"docs\":{},\"a\":{\"docs\":{},\"t\":{\"docs\":{},\"i\":{\"docs\":{},\"o\":{\"docs\":{\"130\":{\"ref\":130,\"tf\":0.0043859649122807015}}}}}}}},\"r\":{\"docs\":{\"56\":{\"ref\":56,\"tf\":0.001594896331738437}}}},\"i\":{\"docs\":{},\"n\":{\"docs\":{},\"i\":{\"docs\":{},\"o\":{\"docs\":{},\"n\":{\"docs\":{\"57\":{\"ref\":57,\"tf\":0.0023584905660377358}}}}}}},\"a\":{\"docs\":{},\"c\":{\"docs\":{\"130\":{\"ref\":130,\"tf\":0.0043859649122807015}}}}},\"u\":{\"docs\":{},\"t\":{\"docs\":{\"0\":{\"ref\":0,\"tf\":0.03225806451612903},\"9\":{\"ref\":9,\"tf\":0.02702702702702703},\"14\":{\"ref\":14,\"tf\":0.011494252873563218},\"26\":{\"ref\":26,\"tf\":0.021739130434782608},\"43\":{\"ref\":43,\"tf\":0.013888888888888888},\"54\":{\"ref\":54,\"tf\":2.501287001287001},\"55\":{\"ref\":55,\"tf\":0.02040816326530612},\"56\":{\"ref\":56,\"tf\":0.003189792663476874},\"58\":{\"ref\":58,\"tf\":0.00819672131147541},\"59\":{\"ref\":59,\"tf\":0.005571030640668524},\"60\":{\"ref\":60,\"tf\":0.00909090909090909},\"61\":{\"ref\":61,\"tf\":0.010869565217391304},\"63\":{\"ref\":63,\"tf\":0.024390243902439025},\"69\":{\"ref\":69,\"tf\":0.05},\"71\":{\"ref\":71,\"tf\":0.016},\"93\":{\"ref\":93,\"tf\":0.014084507042253521},\"103\":{\"ref\":103,\"tf\":0.012987012987012988},\"104\":{\"ref\":104,\"tf\":0.00423728813559322},\"105\":{\"ref\":105,\"tf\":0.005847953216374269},\"112\":{\"ref\":112,\"tf\":0.0058823529411764705},\"126\":{\"ref\":126,\"tf\":0.011111111111111112},\"129\":{\"ref\":129,\"tf\":0.0017391304347826088},\"130\":{\"ref\":130,\"tf\":0.013157894736842105},\"134\":{\"ref\":134,\"tf\":0.005753739930955121},\"135\":{\"ref\":135,\"tf\":0.003861003861003861},\"136\":{\"ref\":136,\"tf\":0.005050505050505051}},\"l\":{\"docs\":{},\"i\":{\"docs\":{},\"n\":{\"docs\":{\"8\":{\"ref\":8,\"tf\":5.081081081081081}}}}},\"e\":{\"docs\":{},\"r\":{\"docs\":{\"52\":{\"ref\":52,\"tf\":0.010416666666666666}}}},\"p\":{\"docs\":{},\"u\":{\"docs\":{},\"t\":{\"docs\":{\"129\":{\"ref\":129,\"tf\":0.0034782608695652175}}}}}}},\"r\":{\"docs\":{},\"i\":{\"docs\":{},\"g\":{\"docs\":{},\"i\":{\"docs\":{},\"n\":{\"docs\":{\"1\":{\"ref\":1,\"tf\":0.045454545454545456},\"71\":{\"ref\":71,\"tf\":0.008},\"113\":{\"ref\":113,\"tf\":0.0070921985815602835}}}}}},\"g\":{\"docs\":{},\"a\":{\"docs\":{},\"n\":{\"docs\":{\"15\":{\"ref\":15,\"tf\":0.022727272727272728},\"21\":{\"ref\":21,\"tf\":0.00980392156862745},\"84\":{\"ref\":84,\"tf\":0.0036363636363636364}}}},\".\":{\"docs\":{},\"a\":{\"docs\":{},\"p\":{\"docs\":{},\"a\":{\"docs\":{},\"c\":{\"docs\":{},\"h\":{\"docs\":{},\"e\":{\"docs\":{},\".\":{\"docs\":{},\"c\":{\"docs\":{},\"o\":{\"docs\":{},\"r\":{\"docs\":{},\"d\":{\"docs\":{},\"o\":{\"docs\":{},\"v\":{\"docs\":{},\"a\":{\"docs\":{},\".\":{\"docs\":{},\"c\":{\"docs\":{},\"o\":{\"docs\":{},\"n\":{\"docs\":{},\"s\":{\"docs\":{},\"o\":{\"docs\":{},\"l\":{\"docs\":{\"58\":{\"ref\":58,\"tf\":0.00273224043715847}}}}}}}},\"s\":{\"docs\":{},\"t\":{\"docs\":{},\"a\":{\"docs\":{},\"t\":{\"docs\":{},\"u\":{\"docs\":{},\"s\":{\"docs\":{},\"b\":{\"docs\":{},\"a\":{\"docs\":{},\"r\":{\"docs\":{\"132\":{\"ref\":132,\"tf\":0.01282051282051282}}}}}}}}}}}}}}}}}}}}}}}}}}}},\"d\":{\"docs\":{},\"e\":{\"docs\":{},\"r\":{\"docs\":{\"34\":{\"ref\":34,\"tf\":0.016666666666666666},\"35\":{\"ref\":35,\"tf\":0.01818181818181818},\"36\":{\"ref\":36,\"tf\":0.017857142857142856},\"47\":{\"ref\":47,\"tf\":0.01},\"54\":{\"ref\":54,\"tf\":0.001287001287001287},\"56\":{\"ref\":56,\"tf\":0.003189792663476874},\"57\":{\"ref\":57,\"tf\":0.0047169811320754715},\"58\":{\"ref\":58,\"tf\":0.00273224043715847},\"61\":{\"ref\":61,\"tf\":0.021739130434782608},\"103\":{\"ref\":103,\"tf\":0.006493506493506494},\"104\":{\"ref\":104,\"tf\":0.00423728813559322},\"114\":{\"ref\":114,\"tf\":0.001594896331738437},\"124\":{\"ref\":124,\"tf\":0.010309278350515464},\"130\":{\"ref\":130,\"tf\":0.0043859649122807015}}}}}},\"s\":{\"docs\":{\"56\":{\"ref\":56,\"tf\":0.006379585326953748},\"60\":{\"ref\":60,\"tf\":0.00909090909090909},\"127\":{\"ref\":127,\"tf\":0.006622516556291391}},\"'\":{\"docs\":{\"14\":{\"ref\":14,\"tf\":0.011494252873563218}}}},\"v\":{\"docs\":{},\"e\":{\"docs\":{},\"r\":{\"docs\":{\"51\":{\"ref\":51,\"tf\":0.01694915254237288},\"57\":{\"ref\":57,\"tf\":0.0047169811320754715},\"59\":{\"ref\":59,\"tf\":0.002785515320334262},\"107\":{\"ref\":107,\"tf\":0.012658227848101266},\"111\":{\"ref\":111,\"tf\":0.007518796992481203},\"116\":{\"ref\":116,\"tf\":0.005555555555555556},\"124\":{\"ref\":124,\"tf\":0.010309278350515464},\"126\":{\"ref\":126,\"tf\":0.011111111111111112},\"127\":{\"ref\":127,\"tf\":0.006622516556291391},\"135\":{\"ref\":135,\"tf\":0.003861003861003861}},\"v\":{\"docs\":{},\"i\":{\"docs\":{},\"e\":{\"docs\":{},\"w\":{\"docs\":{\"14\":{\"ref\":14,\"tf\":0.011494252873563218},\"61\":{\"ref\":61,\"tf\":10},\"126\":{\"ref\":126,\"tf\":0.011111111111111112},\"127\":{\"ref\":127,\"tf\":0.013245033112582781}}}}}},\"r\":{\"docs\":{},\"i\":{\"docs\":{},\"d\":{\"docs\":{\"50\":{\"ref\":50,\"tf\":0.008928571428571428},\"65\":{\"ref\":65,\"tf\":0.025},\"113\":{\"ref\":113,\"tf\":0.0070921985815602835},\"129\":{\"ref\":129,\"tf\":0.008695652173913044},\"134\":{\"ref\":134,\"tf\":0.0011507479861910242}},\"d\":{\"docs\":{},\"e\":{\"docs\":{},\"n\":{\"docs\":{\"50\":{\"ref\":50,\"tf\":0.008928571428571428},\"129\":{\"ref\":129,\"tf\":0.0017391304347826088}}}}}}}},\"w\":{\"docs\":{},\"h\":{\"docs\":{},\"e\":{\"docs\":{},\"l\":{\"docs\":{},\"m\":{\"docs\":{},\"i\":{\"docs\":{},\"n\":{\"docs\":{},\"g\":{\"docs\":{},\"l\":{\"docs\":{},\"i\":{\"docs\":{\"57\":{\"ref\":57,\"tf\":0.0023584905660377358}}}}}}}}}}},\"r\":{\"docs\":{},\"i\":{\"docs\":{},\"t\":{\"docs\":{\"60\":{\"ref\":60,\"tf\":0.0022727272727272726}}}}}},\"f\":{\"docs\":{},\"l\":{\"docs\":{},\"o\":{\"docs\":{},\"w\":{\"docs\":{\"74\":{\"ref\":74,\"tf\":0.017964071856287425},\"103\":{\"ref\":103,\"tf\":0.012987012987012988},\"123\":{\"ref\":123,\"tf\":0.0035211267605633804}},\"-\":{\"docs\":{},\"s\":{\"docs\":{},\"c\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"l\":{\"docs\":{\"74\":{\"ref\":74,\"tf\":0.011976047904191617}}}}}}}}}}}},\"l\":{\"docs\":{},\"a\":{\"docs\":{},\"i\":{\"docs\":{\"107\":{\"ref\":107,\"tf\":0.012658227848101266},\"110\":{\"ref\":110,\"tf\":0.01020408163265306},\"124\":{\"ref\":124,\"tf\":0.010309278350515464}}}}}}}},\"k\":{\"docs\":{\"114\":{\"ref\":114,\"tf\":0.01594896331738437}},\"a\":{\"docs\":{},\"i\":{\"docs\":{\"18\":{\"ref\":18,\"tf\":0.02},\"54\":{\"ref\":54,\"tf\":0.001287001287001287}}}},\"t\":{\"docs\":{},\"e\":{\"docs\":{},\"x\":{\"docs\":{},\"t\":{\"docs\":{\"114\":{\"ref\":114,\"tf\":0.004784688995215311}}}}},\"y\":{\"docs\":{},\"p\":{\"docs\":{\"114\":{\"ref\":114,\"tf\":0.004784688995215311}}}}}},\"n\":{\"docs\":{\"21\":{\"ref\":21,\"tf\":0.00980392156862745},\"38\":{\"ref\":38,\"tf\":0.011627906976744186},\"50\":{\"ref\":50,\"tf\":0.008928571428571428},\"54\":{\"ref\":54,\"tf\":0.005148005148005148},\"56\":{\"ref\":56,\"tf\":0.001594896331738437},\"57\":{\"ref\":57,\"tf\":0.0023584905660377358},\"58\":{\"ref\":58,\"tf\":0.00273224043715847},\"59\":{\"ref\":59,\"tf\":0.005571030640668524},\"60\":{\"ref\":60,\"tf\":0.006818181818181818},\"61\":{\"ref\":61,\"tf\":0.010869565217391304},\"72\":{\"ref\":72,\"tf\":0.004662004662004662},\"84\":{\"ref\":84,\"tf\":0.01090909090909091},\"92\":{\"ref\":92,\"tf\":0.02857142857142857},\"93\":{\"ref\":93,\"tf\":0.014084507042253521},\"105\":{\"ref\":105,\"tf\":0.005847953216374269},\"106\":{\"ref\":106,\"tf\":0.013333333333333334},\"107\":{\"ref\":107,\"tf\":0.02531645569620253},\"112\":{\"ref\":112,\"tf\":0.0058823529411764705},\"113\":{\"ref\":113,\"tf\":0.014184397163120567},\"114\":{\"ref\":114,\"tf\":0.006379585326953748},\"123\":{\"ref\":123,\"tf\":0.0035211267605633804},\"127\":{\"ref\":127,\"tf\":0.013245033112582781},\"129\":{\"ref\":129,\"tf\":0.006956521739130435},\"132\":{\"ref\":132,\"tf\":0.01282051282051282},\"133\":{\"ref\":133,\"tf\":0.0033500837520938024},\"134\":{\"ref\":134,\"tf\":0.005753739930955121},\"135\":{\"ref\":135,\"tf\":0.011583011583011582},\"136\":{\"ref\":136,\"tf\":0.010101010101010102}},\"c\":{\"docs\":{\"21\":{\"ref\":21,\"tf\":0.00980392156862745},\"56\":{\"ref\":56,\"tf\":0.001594896331738437},\"57\":{\"ref\":57,\"tf\":0.0023584905660377358},\"58\":{\"ref\":58,\"tf\":0.00273224043715847},\"60\":{\"ref\":60,\"tf\":0.0022727272727272726},\"78\":{\"ref\":78,\"tf\":0.011235955056179775},\"104\":{\"ref\":104,\"tf\":0.00423728813559322},\"113\":{\"ref\":113,\"tf\":0.0070921985815602835},\"121\":{\"ref\":121,\"tf\":0.011627906976744186},\"129\":{\"ref\":129,\"tf\":0.0052173913043478265},\"133\":{\"ref\":133,\"tf\":0.0033500837520938024},\"134\":{\"ref\":134,\"tf\":0.0011507479861910242}}},\"-\":{\"docs\":{},\"d\":{\"docs\":{},\"e\":{\"docs\":{},\"m\":{\"docs\":{},\"a\":{\"docs\":{},\"n\":{\"docs\":{},\"d\":{\"docs\":{\"72\":{\"ref\":72,\"tf\":0.002331002331002331}}}}}},\"s\":{\"docs\":{},\"e\":{\"docs\":{},\"l\":{\"docs\":{},\"e\":{\"docs\":{},\"c\":{\"docs\":{},\"t\":{\"docs\":{\"95\":{\"ref\":95,\"tf\":0.009345794392523364}}}}}}}}}},\"s\":{\"docs\":{},\"c\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"l\":{\"docs\":{\"74\":{\"ref\":74,\"tf\":0.005988023952095809},\"90\":{\"ref\":90,\"tf\":0.010416666666666666}},\"l\":{\"docs\":{},\"-\":{\"docs\":{},\"c\":{\"docs\":{},\"o\":{\"docs\":{},\"m\":{\"docs\":{},\"p\":{\"docs\":{},\"l\":{\"docs\":{},\"e\":{\"docs\":{},\"t\":{\"docs\":{\"74\":{\"ref\":74,\"tf\":0.005988023952095809}}}}}}}}}}}}}}},\"l\":{\"docs\":{},\"i\":{\"docs\":{},\"d\":{\"docs\":{},\"e\":{\"docs\":{},\"-\":{\"docs\":{},\"c\":{\"docs\":{},\"h\":{\"docs\":{},\"a\":{\"docs\":{},\"n\":{\"docs\":{},\"g\":{\"docs\":{\"94\":{\"ref\":94,\"tf\":0.011111111111111112},\"133\":{\"ref\":133,\"tf\":0.0016750418760469012}},\"e\":{\"docs\":{},\"d\":{\"docs\":{},\"=\":{\"docs\":{},\"\\\"\":{\"docs\":{},\"s\":{\"docs\":{},\"l\":{\"docs\":{},\"i\":{\"docs\":{},\"d\":{\"docs\":{},\"e\":{\"docs\":{},\"c\":{\"docs\":{},\"h\":{\"docs\":{},\"a\":{\"docs\":{},\"n\":{\"docs\":{},\"g\":{\"docs\":{},\"e\":{\"docs\":{},\"d\":{\"docs\":{},\"(\":{\"docs\":{},\"i\":{\"docs\":{},\"n\":{\"docs\":{},\"d\":{\"docs\":{},\"e\":{\"docs\":{},\"x\":{\"docs\":{\"133\":{\"ref\":133,\"tf\":0.0016750418760469012}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},\"e\":{\"docs\":{},\"l\":{\"docs\":{},\"e\":{\"docs\":{},\"c\":{\"docs\":{},\"t\":{\"docs\":{\"95\":{\"ref\":95,\"tf\":0.009345794392523364}}}}}}}},\"i\":{\"docs\":{},\"n\":{\"docs\":{},\"f\":{\"docs\":{},\"i\":{\"docs\":{},\"n\":{\"docs\":{},\"i\":{\"docs\":{},\"t\":{\"docs\":{\"78\":{\"ref\":78,\"tf\":0.033707865168539325}}}}}}}}},\"p\":{\"docs\":{},\"u\":{\"docs\":{},\"l\":{\"docs\":{\"88\":{\"ref\":88,\"tf\":0.009708737864077669}}}}},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\"f\":{\"docs\":{},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\"s\":{\"docs\":{},\"h\":{\"docs\":{\"88\":{\"ref\":88,\"tf\":0.009708737864077669},\"90\":{\"ref\":90,\"tf\":0.010416666666666666}}}}}}},\"o\":{\"docs\":{},\"r\":{\"docs\":{},\"d\":{\"docs\":{\"89\":{\"ref\":89,\"tf\":0.022727272727272728}}}}}}}},\"t\":{\"docs\":{},\"o\":{\"docs\":{\"72\":{\"ref\":72,\"tf\":0.002331002331002331},\"83\":{\"ref\":83,\"tf\":0.02127659574468085}}},\"a\":{\"docs\":{},\"p\":{\"docs\":{\"114\":{\"ref\":114,\"tf\":0.007974481658692184},\"136\":{\"ref\":136,\"tf\":0.010101010101010102}}}}},\"e\":{\"docs\":{},\"n\":{\"docs\":{},\"d\":{\"docs\":{\"106\":{\"ref\":106,\"tf\":0.013333333333333334}}}}},\"s\":{\"docs\":{},\"t\":{\"docs\":{},\"a\":{\"docs\":{},\"r\":{\"docs\":{},\"t\":{\"docs\":{\"106\":{\"ref\":106,\"tf\":0.013333333333333334}}}}}}},\"(\":{\"docs\":{},\"e\":{\"docs\":{},\"v\":{\"docs\":{},\"e\":{\"docs\":{},\"n\":{\"docs\":{},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"y\":{\"docs\":{},\"p\":{\"docs\":{\"108\":{\"ref\":108,\"tf\":0.014492753623188406}}}}}}}}}},\"t\":{\"docs\":{},\"y\":{\"docs\":{},\"p\":{\"docs\":{\"120\":{\"ref\":120,\"tf\":0.006289308176100629}}}}}},\"h\":{\"docs\":{},\"a\":{\"docs\":{},\"r\":{\"docs\":{},\"d\":{\"docs\":{},\"w\":{\"docs\":{},\"a\":{\"docs\":{},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\"b\":{\"docs\":{},\"a\":{\"docs\":{},\"c\":{\"docs\":{},\"k\":{\"docs\":{},\"b\":{\"docs\":{},\"u\":{\"docs\":{},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"o\":{\"docs\":{},\"n\":{\"docs\":{},\"(\":{\"docs\":{},\"c\":{\"docs\":{},\"a\":{\"docs\":{},\"l\":{\"docs\":{},\"l\":{\"docs\":{},\"b\":{\"docs\":{},\"a\":{\"docs\":{},\"c\":{\"docs\":{},\"k\":{\"docs\":{\"113\":{\"ref\":113,\"tf\":0.0070921985815602835}}}}}}}}}}}}}}}}}}}}}}}}}}}}},\"g\":{\"docs\":{},\"e\":{\"docs\":{},\"s\":{\"docs\":{},\"t\":{\"docs\":{},\"u\":{\"docs\":{},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\"(\":{\"docs\":{},\"e\":{\"docs\":{},\"v\":{\"docs\":{},\"e\":{\"docs\":{},\"n\":{\"docs\":{},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"y\":{\"docs\":{},\"p\":{\"docs\":{\"120\":{\"ref\":120,\"tf\":0.006289308176100629}}}}}}}}}}}}}}}}}}},\"t\":{\"docs\":{},\"h\":{\"docs\":{},\"e\":{\"docs\":{},\"r\":{\"docs\":{\"45\":{\"ref\":45,\"tf\":0.0196078431372549},\"47\":{\"ref\":47,\"tf\":0.01},\"57\":{\"ref\":57,\"tf\":0.0023584905660377358},\"129\":{\"ref\":129,\"tf\":0.0017391304347826088}},\"w\":{\"docs\":{},\"i\":{\"docs\":{},\"s\":{\"docs\":{\"97\":{\"ref\":97,\"tf\":0.019230769230769232},\"133\":{\"ref\":133,\"tf\":0.0016750418760469012}}}}}}}}},\"f\":{\"docs\":{},\"f\":{\"docs\":{},\"s\":{\"docs\":{},\"e\":{\"docs\":{},\"t\":{\"docs\":{\"46\":{\"ref\":46,\"tf\":3.3910256410256405},\"119\":{\"ref\":119,\"tf\":0.015748031496062992}}}}},\"i\":{\"docs\":{},\"c\":{\"docs\":{},\"i\":{\"docs\":{\"55\":{\"ref\":55,\"tf\":0.02040816326530612},\"57\":{\"ref\":57,\"tf\":0.0023584905660377358},\"58\":{\"ref\":58,\"tf\":0.00273224043715847},\"62\":{\"ref\":62,\"tf\":0.041666666666666664},\"128\":{\"ref\":128,\"tf\":0.017857142857142856}}}}},\"(\":{\"docs\":{},\"e\":{\"docs\":{},\"v\":{\"docs\":{},\"e\":{\"docs\":{},\"n\":{\"docs\":{},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"y\":{\"docs\":{},\"p\":{\"docs\":{\"108\":{\"ref\":108,\"tf\":0.014492753623188406}}}}}}}}}},\"t\":{\"docs\":{},\"y\":{\"docs\":{},\"p\":{\"docs\":{\"120\":{\"ref\":120,\"tf\":0.006289308176100629}}}}}},\"h\":{\"docs\":{},\"a\":{\"docs\":{},\"r\":{\"docs\":{},\"d\":{\"docs\":{},\"w\":{\"docs\":{},\"a\":{\"docs\":{},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\"b\":{\"docs\":{},\"a\":{\"docs\":{},\"c\":{\"docs\":{},\"k\":{\"docs\":{},\"b\":{\"docs\":{},\"u\":{\"docs\":{},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"o\":{\"docs\":{},\"n\":{\"docs\":{},\"(\":{\"docs\":{},\"c\":{\"docs\":{},\"a\":{\"docs\":{},\"l\":{\"docs\":{},\"l\":{\"docs\":{},\"b\":{\"docs\":{},\"a\":{\"docs\":{},\"c\":{\"docs\":{},\"k\":{\"docs\":{\"113\":{\"ref\":113,\"tf\":0.0070921985815602835}}}}}}}}}}}}}}}}}}}}}}}}}}}}},\"g\":{\"docs\":{},\"e\":{\"docs\":{},\"s\":{\"docs\":{},\"t\":{\"docs\":{},\"u\":{\"docs\":{},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\"(\":{\"docs\":{},\"e\":{\"docs\":{},\"v\":{\"docs\":{},\"e\":{\"docs\":{},\"n\":{\"docs\":{},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"y\":{\"docs\":{},\"p\":{\"docs\":{\"120\":{\"ref\":120,\"tf\":0.006289308176100629}}}}}}}}}}}}}}}}}},\"e\":{\"docs\":{},\"r\":{\"docs\":{\"131\":{\"ref\":131,\"tf\":0.05555555555555555},\"135\":{\"ref\":135,\"tf\":0.005791505791505791}}}}}},\"b\":{\"docs\":{},\"j\":{\"docs\":{},\"e\":{\"docs\":{},\"c\":{\"docs\":{},\"t\":{\"docs\":{\"54\":{\"ref\":54,\"tf\":0.002574002574002574},\"71\":{\"ref\":71,\"tf\":0.024},\"72\":{\"ref\":72,\"tf\":0.011655011655011656},\"105\":{\"ref\":105,\"tf\":0.023391812865497075},\"110\":{\"ref\":110,\"tf\":0.01020408163265306},\"111\":{\"ref\":111,\"tf\":0.03007518796992481},\"112\":{\"ref\":112,\"tf\":0.0058823529411764705},\"114\":{\"ref\":114,\"tf\":0.012759170653907496},\"115\":{\"ref\":115,\"tf\":0.006493506493506494},\"119\":{\"ref\":119,\"tf\":0.015748031496062992},\"120\":{\"ref\":120,\"tf\":0.006289308176100629},\"121\":{\"ref\":121,\"tf\":0.011627906976744186}}}}}},\"s\":{\"docs\":{},\"c\":{\"docs\":{},\"u\":{\"docs\":{},\"r\":{\"docs\":{\"103\":{\"ref\":103,\"tf\":0.006493506493506494}}}}},\"o\":{\"docs\":{},\"l\":{\"docs\":{},\"e\":{\"docs\":{},\"t\":{\"docs\":{\"135\":{\"ref\":135,\"tf\":0.003861003861003861}}}}}}},\"v\":{\"docs\":{},\"i\":{\"docs\":{},\"o\":{\"docs\":{},\"u\":{\"docs\":{\"105\":{\"ref\":105,\"tf\":0.005847953216374269},\"124\":{\"ref\":124,\"tf\":0.010309278350515464}}}}}}},\"c\":{\"docs\":{},\"c\":{\"docs\":{},\"u\":{\"docs\":{},\"r\":{\"docs\":{\"102\":{\"ref\":102,\"tf\":0.020833333333333332},\"113\":{\"ref\":113,\"tf\":0.0070921985815602835}}}}}},\"l\":{\"docs\":{\"133\":{\"ref\":133,\"tf\":0.006700167504187605}},\"d\":{\"docs\":{\"112\":{\"ref\":112,\"tf\":0.0058823529411764705},\"129\":{\"ref\":129,\"tf\":0.0017391304347826088}}}},\"h\":{\"docs\":{\"135\":{\"ref\":135,\"tf\":0.0019305019305019305},\"136\":{\"ref\":136,\"tf\":0.005050505050505051}}}},\"r\":{\"2\":{\"docs\":{},\"-\":{\"docs\":{},\"d\":{\"2\":{\"docs\":{\"38\":{\"ref\":38,\"tf\":0.011627906976744186}}},\"docs\":{}}}},\"docs\":{},\"e\":{\"docs\":{\"114\":{\"ref\":114,\"tf\":0.003189792663476874}},\"g\":{\"docs\":{},\"i\":{\"docs\":{},\"o\":{\"docs\":{},\"n\":{\"docs\":{\"0\":{\"ref\":0,\"tf\":0.03225806451612903},\"3\":{\"ref\":3,\"tf\":0.019230769230769232},\"39\":{\"ref\":39,\"tf\":0.012658227848101266},\"134\":{\"ref\":134,\"tf\":0.0023014959723820483}}}},\"s\":{\"docs\":{},\"t\":{\"docs\":{\"113\":{\"ref\":113,\"tf\":0.014184397163120567}},\"e\":{\"docs\":{},\"r\":{\"docs\":{},\"b\":{\"docs\":{},\"a\":{\"docs\":{},\"c\":{\"docs\":{},\"k\":{\"docs\":{},\"b\":{\"docs\":{},\"u\":{\"docs\":{},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"o\":{\"docs\":{},\"n\":{\"docs\":{},\"a\":{\"docs\":{},\"c\":{\"docs\":{},\"t\":{\"docs\":{},\"i\":{\"docs\":{},\"o\":{\"docs\":{},\"n\":{\"docs\":{},\"(\":{\"docs\":{},\"c\":{\"docs\":{},\"a\":{\"docs\":{},\"l\":{\"docs\":{},\"l\":{\"docs\":{},\"b\":{\"docs\":{},\"a\":{\"docs\":{},\"c\":{\"docs\":{},\"k\":{\"docs\":{\"113\":{\"ref\":113,\"tf\":0.0070921985815602835}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},\"a\":{\"docs\":{},\"r\":{\"docs\":{},\"d\":{\"docs\":{\"129\":{\"ref\":129,\"tf\":0.0017391304347826088}}}}}},\"m\":{\"docs\":{},\"a\":{\"docs\":{},\"i\":{\"docs\":{},\"n\":{\"docs\":{\"2\":{\"ref\":2,\"tf\":0.025}}}}},\"o\":{\"docs\":{},\"v\":{\"docs\":{\"6\":{\"ref\":6,\"tf\":0.023809523809523808},\"9\":{\"ref\":9,\"tf\":0.02702702702702703},\"12\":{\"ref\":12,\"tf\":0.05},\"56\":{\"ref\":56,\"tf\":0.001594896331738437},\"58\":{\"ref\":58,\"tf\":0.00273224043715847},\"71\":{\"ref\":71,\"tf\":0.016},\"80\":{\"ref\":80,\"tf\":0.007692307692307693},\"104\":{\"ref\":104,\"tf\":0.025423728813559324},\"108\":{\"ref\":108,\"tf\":0.043478260869565216},\"111\":{\"ref\":111,\"tf\":0.007518796992481203},\"113\":{\"ref\":113,\"tf\":0.0070921985815602835},\"120\":{\"ref\":120,\"tf\":0.012578616352201259},\"123\":{\"ref\":123,\"tf\":0.0035211267605633804},\"128\":{\"ref\":128,\"tf\":0.017857142857142856},\"132\":{\"ref\":132,\"tf\":2.5128205128205128},\"134\":{\"ref\":134,\"tf\":0.01611047180667434}},\"e\":{\"docs\":{},\"(\":{\"docs\":{},\")\":{\"docs\":{},\"]\":{\"docs\":{},\"(\":{\"docs\":{},\"#\":{\"docs\":{},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\"m\":{\"docs\":{},\"o\":{\"docs\":{},\"v\":{\"docs\":{\"71\":{\"ref\":71,\"tf\":0.008}}}}}}}}}}}}}},\"t\":{\"docs\":{\"54\":{\"ref\":54,\"tf\":0.001287001287001287},\"60\":{\"ref\":60,\"tf\":0.004545454545454545},\"131\":{\"ref\":131,\"tf\":2.0555555555555554}}}},\"e\":{\"docs\":{},\"m\":{\"docs\":{},\"b\":{\"docs\":{\"84\":{\"ref\":84,\"tf\":0.0036363636363636364},\"115\":{\"ref\":115,\"tf\":0.012987012987012988},\"134\":{\"ref\":134,\"tf\":0.0023014959723820483}},\"e\":{\"docs\":{},\"r\":{\"docs\":{},\"s\":{\"docs\":{},\"c\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"l\":{\"docs\":{},\"l\":{\"docs\":{},\"p\":{\"docs\":{},\"o\":{\"docs\":{},\"s\":{\"docs\":{},\"i\":{\"docs\":{},\"t\":{\"docs\":{\"115\":{\"ref\":115,\"tf\":0.006493506493506494}},\"i\":{\"docs\":{},\"o\":{\"docs\":{},\"n\":{\"docs\":{},\"(\":{\"docs\":{},\"i\":{\"docs\":{},\"d\":{\"docs\":{\"115\":{\"ref\":115,\"tf\":0.003246753246753247}}}}}}}}}}}}}}}}}}}}}}}}},\"s\":{\"docs\":{},\"p\":{\"docs\":{},\"e\":{\"docs\":{},\"c\":{\"docs\":{},\"t\":{\"docs\":{\"2\":{\"ref\":2,\"tf\":0.025}}}}},\"o\":{\"docs\":{},\"n\":{\"docs\":{},\"s\":{\"docs\":{\"48\":{\"ref\":48,\"tf\":5.034883720930233},\"57\":{\"ref\":57,\"tf\":0.0023584905660377358},\"104\":{\"ref\":104,\"tf\":0.00423728813559322},\"134\":{\"ref\":134,\"tf\":0.0011507479861910242}},\"i\":{\"docs\":{},\"v\":{\"docs\":{},\"e\":{\"docs\":{},\"-\":{\"docs\":{},\"g\":{\"docs\":{},\"r\":{\"docs\":{},\"i\":{\"docs\":{},\"d\":{\"docs\":{},\"-\":{\"docs\":{},\"b\":{\"docs\":{},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\"a\":{\"docs\":{},\"k\":{\"docs\":{\"48\":{\"ref\":48,\"tf\":0.011627906976744186}}}}}}}}}}}},\"l\":{\"docs\":{},\"g\":{\"docs\":{\"48\":{\"ref\":48,\"tf\":0.011627906976744186}}}},\"m\":{\"docs\":{},\"d\":{\"docs\":{\"48\":{\"ref\":48,\"tf\":0.011627906976744186}}}},\"s\":{\"docs\":{},\"m\":{\"docs\":{\"48\":{\"ref\":48,\"tf\":0.023255813953488372}}}}}}}}},\"d\":{\"docs\":{\"114\":{\"ref\":114,\"tf\":0.001594896331738437},\"124\":{\"ref\":124,\"tf\":0.010309278350515464},\"133\":{\"ref\":133,\"tf\":0.0016750418760469012}}}}}},\"u\":{\"docs\":{},\"l\":{\"docs\":{},\"t\":{\"docs\":{\"8\":{\"ref\":8,\"tf\":0.02702702702702703},\"9\":{\"ref\":9,\"tf\":0.02702702702702703},\"103\":{\"ref\":103,\"tf\":0.006493506493506494}},\"i\":{\"docs\":{},\"n\":{\"docs\":{},\"g\":{\"docs\":{},\"l\":{\"docs\":{},\"i\":{\"docs\":{\"72\":{\"ref\":72,\"tf\":0.004662004662004662},\"104\":{\"ref\":104,\"tf\":0.00423728813559322}}}}}}}}},\"p\":{\"docs\":{},\"p\":{\"docs\":{},\"l\":{\"docs\":{},\"i\":{\"docs\":{\"35\":{\"ref\":35,\"tf\":0.01818181818181818}}}}}}},\"t\":{\"docs\":{\"58\":{\"ref\":58,\"tf\":0.00273224043715847}},\"r\":{\"docs\":{},\"i\":{\"docs\":{},\"c\":{\"docs\":{},\"t\":{\"docs\":{\"43\":{\"ref\":43,\"tf\":0.006944444444444444},\"51\":{\"ref\":51,\"tf\":0.01694915254237288},\"130\":{\"ref\":130,\"tf\":0.0043859649122807015}}}}}},\"a\":{\"docs\":{},\"r\":{\"docs\":{},\"t\":{\"docs\":{\"56\":{\"ref\":56,\"tf\":0.001594896331738437}}}}}},\"e\":{\"docs\":{},\"t\":{\"docs\":{\"52\":{\"ref\":52,\"tf\":0.010416666666666666}}}},\"o\":{\"docs\":{},\"l\":{\"docs\":{},\"v\":{\"docs\":{\"71\":{\"ref\":71,\"tf\":0.024},\"72\":{\"ref\":72,\"tf\":0.002331002331002331},\"111\":{\"ref\":111,\"tf\":0.007518796992481203},\"113\":{\"ref\":113,\"tf\":0.0070921985815602835},\"114\":{\"ref\":114,\"tf\":0.012759170653907496}}}},\"u\":{\"docs\":{},\"r\":{\"docs\":{},\"c\":{\"docs\":{\"126\":{\"ref\":126,\"tf\":0.011111111111111112},\"129\":{\"ref\":129,\"tf\":0.0017391304347826088}}}}}},\"i\":{\"docs\":{},\"z\":{\"docs\":{\"115\":{\"ref\":115,\"tf\":0.003246753246753247},\"117\":{\"ref\":117,\"tf\":0.007575757575757576}}}},\"a\":{\"docs\":{},\"v\":{\"docs\":{\"129\":{\"ref\":129,\"tf\":0.0017391304347826088}}}}},\"l\":{\"docs\":{\"38\":{\"ref\":38,\"tf\":0.011627906976744186},\"134\":{\"ref\":134,\"tf\":0.0011507479861910242}},\"a\":{\"docs\":{},\"t\":{\"docs\":{\"3\":{\"ref\":3,\"tf\":0.019230769230769232},\"26\":{\"ref\":26,\"tf\":0.021739130434782608},\"80\":{\"ref\":80,\"tf\":0.007692307692307693},\"115\":{\"ref\":115,\"tf\":0.003246753246753247}}}},\"e\":{\"docs\":{},\"a\":{\"docs\":{},\"s\":{\"docs\":{\"56\":{\"ref\":56,\"tf\":0.001594896331738437},\"58\":{\"ref\":58,\"tf\":0.02459016393442623},\"61\":{\"ref\":61,\"tf\":0.010869565217391304},\"62\":{\"ref\":62,\"tf\":0.16666666666666666},\"68\":{\"ref\":68,\"tf\":0.027777777777777776},\"107\":{\"ref\":107,\"tf\":0.05063291139240506},\"120\":{\"ref\":120,\"tf\":0.006289308176100629},\"129\":{\"ref\":129,\"tf\":0.006956521739130435},\"134\":{\"ref\":134,\"tf\":0.0011507479861910242},\"135\":{\"ref\":135,\"tf\":0.0019305019305019305},\"136\":{\"ref\":136,\"tf\":0.005050505050505051}}}}}},\"q\":{\"docs\":{},\"u\":{\"docs\":{},\"i\":{\"docs\":{},\"r\":{\"docs\":{\"3\":{\"ref\":3,\"tf\":0.019230769230769232},\"43\":{\"ref\":43,\"tf\":0.006944444444444444},\"50\":{\"ref\":50,\"tf\":0.008928571428571428},\"52\":{\"ref\":52,\"tf\":0.010416666666666666},\"56\":{\"ref\":56,\"tf\":0.003189792663476874},\"60\":{\"ref\":60,\"tf\":0.0022727272727272726},\"61\":{\"ref\":61,\"tf\":0.010869565217391304},\"80\":{\"ref\":80,\"tf\":0.015384615384615385},\"84\":{\"ref\":84,\"tf\":0.0036363636363636364},\"99\":{\"ref\":99,\"tf\":0.02127659574468085},\"107\":{\"ref\":107,\"tf\":0.02531645569620253},\"114\":{\"ref\":114,\"tf\":0.001594896331738437},\"124\":{\"ref\":124,\"tf\":0.010309278350515464},\"127\":{\"ref\":127,\"tf\":0.013245033112582781},\"129\":{\"ref\":129,\"tf\":0.0017391304347826088}}}},\"e\":{\"docs\":{},\"s\":{\"docs\":{},\"t\":{\"docs\":{\"136\":{\"ref\":136,\"tf\":0.005050505050505051}},\"a\":{\"docs\":{},\"n\":{\"docs\":{},\"i\":{\"docs\":{},\"m\":{\"docs\":{},\"a\":{\"docs\":{},\"t\":{\"docs\":{},\"i\":{\"docs\":{},\"o\":{\"docs\":{},\"n\":{\"docs\":{},\"f\":{\"docs\":{},\"r\":{\"docs\":{},\"a\":{\"docs\":{},\"m\":{\"docs\":{\"119\":{\"ref\":119,\"tf\":0.003937007874015748}},\"e\":{\"docs\":{},\"(\":{\"docs\":{},\"c\":{\"docs\":{},\"a\":{\"docs\":{},\"l\":{\"docs\":{},\"l\":{\"docs\":{},\"b\":{\"docs\":{},\"a\":{\"docs\":{},\"c\":{\"docs\":{},\"k\":{\"docs\":{},\")\":{\"docs\":{},\"(\":{\"docs\":{},\"a\":{\"docs\":{},\"l\":{\"docs\":{},\"i\":{\"docs\":{},\"a\":{\"docs\":{\"119\":{\"ref\":119,\"tf\":0.003937007874015748}}}}}}}}}}}}}}}}},\"]\":{\"docs\":{},\"(\":{\"docs\":{},\"h\":{\"docs\":{},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"p\":{\"docs\":{},\"s\":{\"docs\":{},\":\":{\"docs\":{},\"/\":{\"docs\":{},\"/\":{\"docs\":{},\"d\":{\"docs\":{},\"e\":{\"docs\":{},\"v\":{\"docs\":{},\"e\":{\"docs\":{},\"l\":{\"docs\":{},\"o\":{\"docs\":{},\"p\":{\"docs\":{},\"e\":{\"docs\":{},\"r\":{\"docs\":{},\".\":{\"docs\":{},\"m\":{\"docs\":{},\"o\":{\"docs\":{},\"z\":{\"docs\":{},\"i\":{\"docs\":{},\"l\":{\"docs\":{},\"l\":{\"docs\":{},\"a\":{\"docs\":{},\".\":{\"docs\":{},\"o\":{\"docs\":{},\"r\":{\"docs\":{},\"g\":{\"docs\":{},\"/\":{\"docs\":{},\"e\":{\"docs\":{},\"n\":{\"docs\":{},\"-\":{\"docs\":{},\"u\":{\"docs\":{},\"s\":{\"docs\":{},\"/\":{\"docs\":{},\"d\":{\"docs\":{},\"o\":{\"docs\":{},\"c\":{\"docs\":{},\"s\":{\"docs\":{},\"/\":{\"docs\":{},\"w\":{\"docs\":{},\"e\":{\"docs\":{},\"b\":{\"docs\":{},\"/\":{\"docs\":{},\"a\":{\"docs\":{},\"p\":{\"docs\":{},\"i\":{\"docs\":{},\"/\":{\"docs\":{},\"w\":{\"docs\":{},\"i\":{\"docs\":{},\"n\":{\"docs\":{},\"d\":{\"docs\":{},\"o\":{\"docs\":{},\"w\":{\"docs\":{},\".\":{\"docs\":{},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\"q\":{\"docs\":{},\"u\":{\"docs\":{},\"e\":{\"docs\":{},\"s\":{\"docs\":{},\"t\":{\"docs\":{},\"a\":{\"docs\":{},\"n\":{\"docs\":{},\"i\":{\"docs\":{},\"m\":{\"docs\":{},\"a\":{\"docs\":{},\"t\":{\"docs\":{},\"i\":{\"docs\":{},\"o\":{\"docs\":{},\"n\":{\"docs\":{},\"f\":{\"docs\":{},\"r\":{\"docs\":{},\"a\":{\"docs\":{},\"m\":{\"docs\":{\"119\":{\"ref\":119,\"tf\":0.003937007874015748}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},\"d\":{\"docs\":{\"38\":{\"ref\":38,\"tf\":0.023255813953488372},\"50\":{\"ref\":50,\"tf\":0.008928571428571428},\"105\":{\"ref\":105,\"tf\":0.005847953216374269},\"124\":{\"ref\":124,\"tf\":0.010309278350515464}},\"u\":{\"docs\":{},\"c\":{\"docs\":{\"10\":{\"ref\":10,\"tf\":0.023809523809523808},\"56\":{\"ref\":56,\"tf\":0.001594896331738437}}}},\"i\":{\"docs\":{},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\"c\":{\"docs\":{},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"o\":{\"docs\":{\"133\":{\"ref\":133,\"tf\":0.0016750418760469012}}}}}}}}}},\"o\":{\"docs\":{},\"r\":{\"docs\":{},\"d\":{\"docs\":{},\"e\":{\"docs\":{},\"r\":{\"docs\":{\"10\":{\"ref\":10,\"tf\":0.047619047619047616},\"14\":{\"ref\":14,\"tf\":0.011494252873563218},\"80\":{\"ref\":80,\"tf\":0.023076923076923078},\"89\":{\"ref\":89,\"tf\":0.022727272727272728},\"109\":{\"ref\":109,\"tf\":0.017094017094017096},\"123\":{\"ref\":123,\"tf\":0.0035211267605633804}}}}}}},\"a\":{\"docs\":{},\"d\":{\"docs\":{\"14\":{\"ref\":14,\"tf\":0.011494252873563218},\"59\":{\"ref\":59,\"tf\":0.002785515320334262},\"61\":{\"ref\":61,\"tf\":0.010869565217391304},\"72\":{\"ref\":72,\"tf\":0.002331002331002331},\"74\":{\"ref\":74,\"tf\":0.005988023952095809},\"134\":{\"ref\":134,\"tf\":0.0011507479861910242}},\"i\":{\"docs\":{\"56\":{\"ref\":56,\"tf\":0.001594896331738437},\"57\":{\"ref\":57,\"tf\":0.0023584905660377358},\"58\":{\"ref\":58,\"tf\":0.00819672131147541},\"59\":{\"ref\":59,\"tf\":0.002785515320334262},\"113\":{\"ref\":113,\"tf\":0.02127659574468085},\"119\":{\"ref\":119,\"tf\":0.007874015748031496},\"121\":{\"ref\":121,\"tf\":0.023255813953488372},\"126\":{\"ref\":126,\"tf\":0.011111111111111112},\"129\":{\"ref\":129,\"tf\":0.0017391304347826088},\"132\":{\"ref\":132,\"tf\":0.02564102564102564}}},\"y\":{\"docs\":{},\"(\":{\"docs\":{},\"[\":{\"docs\":{},\"c\":{\"docs\":{},\"a\":{\"docs\":{},\"l\":{\"docs\":{},\"l\":{\"docs\":{},\"b\":{\"docs\":{},\"a\":{\"docs\":{},\"c\":{\"docs\":{},\"k\":{\"docs\":{\"113\":{\"ref\":113,\"tf\":0.0070921985815602835}}}}}}}}}}},\"c\":{\"docs\":{},\"a\":{\"docs\":{},\"l\":{\"docs\":{},\"l\":{\"docs\":{},\"b\":{\"docs\":{},\"a\":{\"docs\":{},\"c\":{\"docs\":{},\"k\":{\"docs\":{\"119\":{\"ref\":119,\"tf\":0.003937007874015748},\"121\":{\"ref\":121,\"tf\":0.005813953488372093}}}}}}}}}}},\"-\":{\"docs\":{},\"m\":{\"docs\":{},\"a\":{\"docs\":{},\"d\":{\"docs\":{\"127\":{\"ref\":127,\"tf\":0.006622516556291391}}}}}}},\"e\":{\"docs\":{},\"r\":{\"docs\":{\"135\":{\"ref\":135,\"tf\":0.0019305019305019305}}}}},\"l\":{\"docs\":{\"54\":{\"ref\":54,\"tf\":0.001287001287001287},\"59\":{\"ref\":59,\"tf\":0.002785515320334262},\"126\":{\"ref\":126,\"tf\":0.011111111111111112},\"130\":{\"ref\":130,\"tf\":0.0043859649122807015}},\"e\":{\"docs\":{},\"s\":{\"docs\":{},\"t\":{\"docs\":{\"21\":{\"ref\":21,\"tf\":0.00980392156862745}}}}},\"i\":{\"docs\":{},\"s\":{\"docs\":{},\"t\":{\"docs\":{\"50\":{\"ref\":50,\"tf\":0.008928571428571428}}}},\"z\":{\"docs\":{\"134\":{\"ref\":134,\"tf\":0.0011507479861910242},\"135\":{\"ref\":135,\"tf\":0.0019305019305019305}}}},\"l\":{\"docs\":{},\"i\":{\"docs\":{\"54\":{\"ref\":54,\"tf\":0.001287001287001287},\"57\":{\"ref\":57,\"tf\":0.0023584905660377358},\"59\":{\"ref\":59,\"tf\":0.002785515320334262},\"134\":{\"ref\":134,\"tf\":0.0023014959723820483},\"135\":{\"ref\":135,\"tf\":0.005791505791505791},\"136\":{\"ref\":136,\"tf\":0.010101010101010102}}}}},\"s\":{\"docs\":{},\"o\":{\"docs\":{},\"n\":{\"docs\":{\"21\":{\"ref\":21,\"tf\":0.00980392156862745},\"59\":{\"ref\":59,\"tf\":0.002785515320334262},\"74\":{\"ref\":74,\"tf\":0.005988023952095809},\"103\":{\"ref\":103,\"tf\":0.01948051948051948},\"114\":{\"ref\":114,\"tf\":0.001594896331738437},\"129\":{\"ref\":129,\"tf\":0.0017391304347826088},\"134\":{\"ref\":134,\"tf\":0.0011507479861910242}}}}},\"c\":{\"docs\":{},\"h\":{\"docs\":{\"78\":{\"ref\":78,\"tf\":0.02247191011235955}}},\"t\":{\"docs\":{\"130\":{\"ref\":130,\"tf\":0.0043859649122807015}}}}},\"f\":{\"docs\":{},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\"s\":{\"docs\":{},\"h\":{\"docs\":{\"14\":{\"ref\":14,\"tf\":0.011494252873563218},\"88\":{\"ref\":88,\"tf\":0.04854368932038835}},\"i\":{\"docs\":{},\"n\":{\"docs\":{},\"g\":{\"docs\":{},\"-\":{\"docs\":{},\"i\":{\"docs\":{},\"c\":{\"docs\":{},\"o\":{\"docs\":{},\"n\":{\"docs\":{\"88\":{\"ref\":88,\"tf\":0.009708737864077669}}}}}},\"t\":{\"docs\":{},\"e\":{\"docs\":{},\"x\":{\"docs\":{},\"t\":{\"docs\":{\"88\":{\"ref\":88,\"tf\":0.009708737864077669}}}}}}}}}}}}}},\"e\":{\"docs\":{},\"r\":{\"docs\":{\"58\":{\"ref\":58,\"tf\":0.00546448087431694},\"66\":{\"ref\":66,\"tf\":0.043478260869565216},\"126\":{\"ref\":126,\"tf\":0.011111111111111112},\"129\":{\"ref\":129,\"tf\":0.0017391304347826088}}}}},\"c\":{\"docs\":{},\"o\":{\"docs\":{},\"r\":{\"docs\":{},\"d\":{\"docs\":{\"16\":{\"ref\":16,\"tf\":0.014705882352941176}}}},\"m\":{\"docs\":{},\"m\":{\"docs\":{},\"e\":{\"docs\":{},\"n\":{\"docs\":{},\"d\":{\"docs\":{\"21\":{\"ref\":21,\"tf\":0.00980392156862745},\"50\":{\"ref\":50,\"tf\":0.008928571428571428},\"56\":{\"ref\":56,\"tf\":0.004784688995215311},\"57\":{\"ref\":57,\"tf\":0.0047169811320754715},\"60\":{\"ref\":60,\"tf\":0.004545454545454545},\"61\":{\"ref\":61,\"tf\":0.010869565217391304},\"72\":{\"ref\":72,\"tf\":0.002331002331002331},\"74\":{\"ref\":74,\"tf\":0.005988023952095809},\"82\":{\"ref\":82,\"tf\":0.0078125},\"84\":{\"ref\":84,\"tf\":0.0036363636363636364},\"103\":{\"ref\":103,\"tf\":0.006493506493506494},\"129\":{\"ref\":129,\"tf\":0.006956521739130435},\"132\":{\"ref\":132,\"tf\":0.01282051282051282},\"134\":{\"ref\":134,\"tf\":0.0034522439585730723}}}}}}}},\"e\":{\"docs\":{},\"n\":{\"docs\":{},\"t\":{\"docs\":{\"21\":{\"ref\":21,\"tf\":0.00980392156862745},\"56\":{\"ref\":56,\"tf\":0.003189792663476874},\"57\":{\"ref\":57,\"tf\":0.0023584905660377358},\"129\":{\"ref\":129,\"tf\":0.0017391304347826088},\"134\":{\"ref\":134,\"tf\":0.0011507479861910242},\"136\":{\"ref\":136,\"tf\":0.005050505050505051}}}},\"i\":{\"docs\":{},\"v\":{\"docs\":{\"26\":{\"ref\":26,\"tf\":0.021739130434782608},\"44\":{\"ref\":44,\"tf\":0.018518518518518517},\"119\":{\"ref\":119,\"tf\":0.003937007874015748},\"130\":{\"ref\":130,\"tf\":0.0043859649122807015},\"134\":{\"ref\":134,\"tf\":0.0011507479861910242}}}}},\"a\":{\"docs\":{},\"l\":{\"docs\":{},\"c\":{\"docs\":{},\"u\":{\"docs\":{},\"l\":{\"docs\":{\"115\":{\"ref\":115,\"tf\":0.003246753246753247}}}}}},\"p\":{\"docs\":{\"135\":{\"ref\":135,\"tf\":0.0019305019305019305}}}},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\"a\":{\"docs\":{},\"t\":{\"docs\":{\"115\":{\"ref\":115,\"tf\":0.003246753246753247}}}}}},\"t\":{\"docs\":{\"119\":{\"ref\":119,\"tf\":0.003937007874015748}},\"a\":{\"docs\":{},\"n\":{\"docs\":{},\"g\":{\"docs\":{},\"l\":{\"docs\":{\"119\":{\"ref\":119,\"tf\":0.003937007874015748},\"130\":{\"ref\":130,\"tf\":0.013157894736842105}}}}}},\"c\":{\"docs\":{},\"o\":{\"docs\":{},\"n\":{\"docs\":{},\"t\":{\"docs\":{},\"a\":{\"docs\":{},\"i\":{\"docs\":{},\"n\":{\"docs\":{},\"s\":{\"docs\":{},\"(\":{\"docs\":{},\"x\":{\"docs\":{\"119\":{\"ref\":119,\"tf\":0.003937007874015748}}}}}}}}}}}}}},\"p\":{\"docs\":{},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\"s\":{\"docs\":{\"50\":{\"ref\":50,\"tf\":0.008928571428571428},\"52\":{\"ref\":52,\"tf\":0.020833333333333332},\"119\":{\"ref\":119,\"tf\":0.007874015748031496}}}}},\"l\":{\"docs\":{},\"a\":{\"docs\":{},\"c\":{\"docs\":{\"61\":{\"ref\":61,\"tf\":0.010869565217391304},\"84\":{\"ref\":84,\"tf\":0.0036363636363636364},\"130\":{\"ref\":130,\"tf\":0.008771929824561403}}}}},\"o\":{\"docs\":{\"68\":{\"ref\":68,\"tf\":0.027777777777777776},\"129\":{\"ref\":129,\"tf\":0.0034782608695652175}}},\"e\":{\"docs\":{},\"a\":{\"docs\":{},\"t\":{\"docs\":{\"72\":{\"ref\":72,\"tf\":0.009324009324009324},\"106\":{\"ref\":106,\"tf\":0.02666666666666667},\"134\":{\"ref\":134,\"tf\":0.0011507479861910242}}}}}},\"u\":{\"docs\":{},\"s\":{\"docs\":{\"52\":{\"ref\":52,\"tf\":0.010416666666666666},\"129\":{\"ref\":129,\"tf\":0.0034782608695652175},\"134\":{\"ref\":134,\"tf\":0.0011507479861910242}},\"a\":{\"docs\":{},\"b\":{\"docs\":{},\"l\":{\"docs\":{\"106\":{\"ref\":106,\"tf\":0.013333333333333334}}}}}}},\"v\":{\"docs\":{},\"e\":{\"docs\":{},\"r\":{\"docs\":{},\"s\":{\"docs\":{\"53\":{\"ref\":53,\"tf\":0.041666666666666664},\"106\":{\"ref\":106,\"tf\":0.013333333333333334}}}},\"a\":{\"docs\":{},\"l\":{\"docs\":{\"80\":{\"ref\":80,\"tf\":0.007692307692307693}}}}}},\"t\":{\"docs\":{},\"u\":{\"docs\":{},\"r\":{\"docs\":{},\"n\":{\"docs\":{\"54\":{\"ref\":54,\"tf\":0.007722007722007722},\"71\":{\"ref\":71,\"tf\":0.032},\"72\":{\"ref\":72,\"tf\":0.002331002331002331},\"81\":{\"ref\":81,\"tf\":0.015151515151515152},\"105\":{\"ref\":105,\"tf\":0.023391812865497075},\"109\":{\"ref\":109,\"tf\":0.03418803418803419},\"111\":{\"ref\":111,\"tf\":0.015037593984962405},\"112\":{\"ref\":112,\"tf\":0.029411764705882353},\"113\":{\"ref\":113,\"tf\":0.014184397163120567},\"114\":{\"ref\":114,\"tf\":0.012759170653907496},\"115\":{\"ref\":115,\"tf\":0.00974025974025974},\"116\":{\"ref\":116,\"tf\":0.03888888888888889},\"117\":{\"ref\":117,\"tf\":0.030303030303030304},\"118\":{\"ref\":118,\"tf\":0.01904761904761905},\"119\":{\"ref\":119,\"tf\":0.031496062992125984},\"121\":{\"ref\":121,\"tf\":0.05232558139534884},\"130\":{\"ref\":130,\"tf\":0.0043859649122807015},\"133\":{\"ref\":133,\"tf\":0.0016750418760469012},\"136\":{\"ref\":136,\"tf\":0.015151515151515152}}}}},\"a\":{\"docs\":{},\"i\":{\"docs\":{},\"n\":{\"docs\":{\"107\":{\"ref\":107,\"tf\":0.05063291139240506}}}}}},\"n\":{\"docs\":{},\"d\":{\"docs\":{},\"e\":{\"docs\":{},\"r\":{\"docs\":{\"72\":{\"ref\":72,\"tf\":0.013986013986013986},\"84\":{\"ref\":84,\"tf\":0.01090909090909091}}}}},\"a\":{\"docs\":{},\"m\":{\"docs\":{\"129\":{\"ref\":129,\"tf\":0.0017391304347826088}}}}},\"b\":{\"docs\":{},\"u\":{\"docs\":{},\"i\":{\"docs\":{},\"l\":{\"docs\":{},\"d\":{\"docs\":{\"129\":{\"ref\":129,\"tf\":0.0034782608695652175}}},\"t\":{\"docs\":{\"129\":{\"ref\":129,\"tf\":0.0017391304347826088}}}}}}}},\"i\":{\"docs\":{},\"g\":{\"docs\":{},\"h\":{\"docs\":{},\"t\":{\"docs\":{\"3\":{\"ref\":3,\"tf\":0.07692307692307693},\"6\":{\"ref\":6,\"tf\":0.023809523809523808},\"14\":{\"ref\":14,\"tf\":0.011494252873563218},\"16\":{\"ref\":16,\"tf\":0.051470588235294115},\"19\":{\"ref\":19,\"tf\":0.02},\"21\":{\"ref\":21,\"tf\":0.00980392156862745},\"27\":{\"ref\":27,\"tf\":0.03225806451612903},\"43\":{\"ref\":43,\"tf\":0.006944444444444444},\"48\":{\"ref\":48,\"tf\":0.011627906976744186},\"52\":{\"ref\":52,\"tf\":0.020833333333333332},\"54\":{\"ref\":54,\"tf\":0.002574002574002574},\"56\":{\"ref\":56,\"tf\":0.001594896331738437},\"59\":{\"ref\":59,\"tf\":0.005571030640668524},\"60\":{\"ref\":60,\"tf\":0.004545454545454545},\"63\":{\"ref\":63,\"tf\":0.024390243902439025},\"72\":{\"ref\":72,\"tf\":0.002331002331002331},\"76\":{\"ref\":76,\"tf\":0.018867924528301886},\"77\":{\"ref\":77,\"tf\":0.018867924528301886},\"82\":{\"ref\":82,\"tf\":0.0078125},\"84\":{\"ref\":84,\"tf\":0.0036363636363636364},\"93\":{\"ref\":93,\"tf\":0.014084507042253521},\"116\":{\"ref\":116,\"tf\":0.022222222222222223},\"119\":{\"ref\":119,\"tf\":0.007874015748031496},\"123\":{\"ref\":123,\"tf\":0.007042253521126761},\"130\":{\"ref\":130,\"tf\":0.013157894736842105},\"133\":{\"ref\":133,\"tf\":0.010050251256281407},\"134\":{\"ref\":134,\"tf\":0.0011507479861910242},\"135\":{\"ref\":135,\"tf\":0.005791505791505791},\"136\":{\"ref\":136,\"tf\":0.005050505050505051}},\"-\":{\"docs\":{},\"b\":{\"docs\":{},\"u\":{\"docs\":{},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"o\":{\"docs\":{},\"n\":{\"docs\":{},\"s\":{\"docs\":{},\"&\":{\"docs\":{},\"q\":{\"docs\":{},\"u\":{\"docs\":{},\"o\":{\"docs\":{},\"t\":{\"docs\":{},\";\":{\"docs\":{},\"&\":{\"docs\":{},\"g\":{\"docs\":{},\"t\":{\"docs\":{\"82\":{\"ref\":82,\"tf\":0.0078125}}}}}}}}}}},\"=\":{\"docs\":{},\"\\\"\":{\"docs\":{},\"r\":{\"docs\":{},\"i\":{\"docs\":{},\"g\":{\"docs\":{},\"h\":{\"docs\":{},\"t\":{\"docs\":{},\"b\":{\"docs\":{},\"u\":{\"docs\":{},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"o\":{\"docs\":{},\"n\":{\"docs\":{\"133\":{\"ref\":133,\"tf\":0.0016750418760469012}}}}}}}}}}}}}}}}}}}}}}},\"b\":{\"docs\":{},\"u\":{\"docs\":{},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"o\":{\"docs\":{},\"n\":{\"docs\":{\"133\":{\"ref\":133,\"tf\":0.005025125628140704}}}}}}}}}}},\"t\":{\"docs\":{},\"e\":{\"docs\":{\"59\":{\"ref\":59,\"tf\":0.002785515320334262}}}}},\"o\":{\"docs\":{},\"o\":{\"docs\":{},\"m\":{\"docs\":{\"5\":{\"ref\":5,\"tf\":0.02564102564102564},\"52\":{\"ref\":52,\"tf\":0.010416666666666666}}},\"t\":{\"docs\":{\"56\":{\"ref\":56,\"tf\":0.001594896331738437},\"60\":{\"ref\":60,\"tf\":0.006818181818181818},\"66\":{\"ref\":66,\"tf\":0.043478260869565216},\"129\":{\"ref\":129,\"tf\":0.0034782608695652175},\"133\":{\"ref\":133,\"tf\":0.0016750418760469012}},\"s\":{\"docs\":{},\"c\":{\"docs\":{},\"o\":{\"docs\":{},\"p\":{\"docs\":{\"71\":{\"ref\":71,\"tf\":0.008}}}}}}}},\"w\":{\"docs\":{\"26\":{\"ref\":26,\"tf\":0.021739130434782608},\"43\":{\"ref\":43,\"tf\":0.020833333333333332},\"44\":{\"ref\":44,\"tf\":0.018518518518518517},\"45\":{\"ref\":45,\"tf\":0.00980392156862745},\"47\":{\"ref\":47,\"tf\":0.04},\"48\":{\"ref\":48,\"tf\":0.05813953488372093},\"72\":{\"ref\":72,\"tf\":0.006993006993006993}}},\"u\":{\"docs\":{},\"g\":{\"docs\":{},\"h\":{\"docs\":{},\"l\":{\"docs\":{},\"i\":{\"docs\":{\"48\":{\"ref\":48,\"tf\":0.011627906976744186},\"104\":{\"ref\":104,\"tf\":0.00423728813559322},\"134\":{\"ref\":134,\"tf\":0.0011507479861910242}}}}}},\"t\":{\"docs\":{\"60\":{\"ref\":60,\"tf\":0.0022727272727272726},\"84\":{\"ref\":84,\"tf\":0.0036363636363636364},\"133\":{\"ref\":133,\"tf\":0.006700167504187605},\"134\":{\"ref\":134,\"tf\":0.0011507479861910242}},\"e\":{\"docs\":{},\"r\":{\"docs\":{\"84\":{\"ref\":84,\"tf\":0.01090909090909091},\"133\":{\"ref\":133,\"tf\":0.005025125628140704}},\"'\":{\"docs\":{\"84\":{\"ref\":84,\"tf\":0.0036363636363636364}}}},\"p\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"v\":{\"docs\":{},\"i\":{\"docs\":{},\"d\":{\"docs\":{},\"e\":{\"docs\":{},\"r\":{\"docs\":{},\".\":{\"docs\":{},\"o\":{\"docs\":{},\"t\":{\"docs\":{},\"h\":{\"docs\":{},\"e\":{\"docs\":{},\"r\":{\"docs\":{},\"w\":{\"docs\":{},\"i\":{\"docs\":{},\"s\":{\"docs\":{\"133\":{\"ref\":133,\"tf\":0.0016750418760469012}}}}}}}}}},\"w\":{\"docs\":{},\"h\":{\"docs\":{},\"e\":{\"docs\":{},\"n\":{\"docs\":{\"133\":{\"ref\":133,\"tf\":0.0016750418760469012}},\"(\":{\"docs\":{},\"'\":{\"docs\":{},\"/\":{\"docs\":{},\"m\":{\"docs\":{},\"a\":{\"docs\":{},\"i\":{\"docs\":{},\"n\":{\"docs\":{\"133\":{\"ref\":133,\"tf\":0.0016750418760469012}}}}}}}}}}}}}}}}}}}}}}}}},\"y\":{\"docs\":{},\"a\":{\"docs\":{},\"l\":{\"docs\":{\"50\":{\"ref\":50,\"tf\":0.008928571428571428},\"129\":{\"ref\":129,\"tf\":0.0017391304347826088}}}}},\"a\":{\"docs\":{},\"d\":{\"docs\":{},\"m\":{\"docs\":{},\"a\":{\"docs\":{},\"p\":{\"docs\":{\"67\":{\"ref\":67,\"tf\":0.027777777777777776}}}}}}},\"t\":{\"docs\":{},\"a\":{\"docs\":{},\"t\":{\"docs\":{\"120\":{\"ref\":120,\"tf\":0.006289308176100629}}}}},\"s\":{\"docs\":{},\"e\":{\"docs\":{\"135\":{\"ref\":135,\"tf\":0.0019305019305019305}}}}},\".\":{\"docs\":{},\"c\":{\"docs\":{\"14\":{\"ref\":14,\"tf\":0.011494252873563218}}}},\"a\":{\"docs\":{},\"n\":{\"docs\":{},\"g\":{\"docs\":{\"14\":{\"ref\":14,\"tf\":0.011494252873563218},\"37\":{\"ref\":37,\"tf\":10.25},\"57\":{\"ref\":57,\"tf\":0.0023584905660377358},\"80\":{\"ref\":80,\"tf\":0.007692307692307693},\"104\":{\"ref\":104,\"tf\":0.00423728813559322},\"123\":{\"ref\":123,\"tf\":0.0035211267605633804},\"135\":{\"ref\":135,\"tf\":0.0019305019305019305}}},\"c\":{\"docs\":{},\"h\":{\"docs\":{},\"e\":{\"docs\":{},\"r\":{\"docs\":{\"15\":{\"ref\":15,\"tf\":0.022727272727272728}}}}}},\"d\":{\"docs\":{},\"o\":{\"docs\":{},\"m\":{\"docs\":{\"113\":{\"ref\":113,\"tf\":0.0070921985815602835}}}}}},\"i\":{\"docs\":{\"18\":{\"ref\":18,\"tf\":0.02}},\"d\":{\"docs\":{},\"e\":{\"docs\":{},\"r\":{\"docs\":{\"20\":{\"ref\":20,\"tf\":0.04081632653061224}}}}},\"l\":{\"docs\":{\"68\":{\"ref\":68,\"tf\":0.027777777777777776}}}},\"d\":{\"docs\":{},\"i\":{\"docs\":{},\"o\":{\"docs\":{\"36\":{\"ref\":36,\"tf\":3.4404761904761902},\"87\":{\"ref\":87,\"tf\":0.125},\"123\":{\"ref\":123,\"tf\":0.0035211267605633804},\"134\":{\"ref\":134,\"tf\":0.0023014959723820483}},\"-\":{\"docs\":{},\"i\":{\"docs\":{},\"c\":{\"docs\":{},\"o\":{\"docs\":{},\"n\":{\"docs\":{\"36\":{\"ref\":36,\"tf\":0.017857142857142856}}}}}},\"b\":{\"docs\":{},\"u\":{\"docs\":{},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"o\":{\"docs\":{},\"n\":{\"docs\":{\"38\":{\"ref\":38,\"tf\":0.011627906976744186}}}}}}}}},\"]\":{\"docs\":{},\"(\":{\"docs\":{},\"h\":{\"docs\":{},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"p\":{\"docs\":{},\":\":{\"docs\":{},\"/\":{\"docs\":{},\"/\":{\"docs\":{},\"d\":{\"docs\":{},\"o\":{\"docs\":{},\"c\":{\"docs\":{},\"s\":{\"docs\":{},\".\":{\"docs\":{},\"a\":{\"docs\":{},\"n\":{\"docs\":{},\"g\":{\"docs\":{},\"u\":{\"docs\":{},\"l\":{\"docs\":{},\"a\":{\"docs\":{},\"r\":{\"docs\":{},\"j\":{\"docs\":{},\"s\":{\"docs\":{},\".\":{\"docs\":{},\"o\":{\"docs\":{},\"r\":{\"docs\":{},\"g\":{\"docs\":{},\"/\":{\"docs\":{},\"a\":{\"docs\":{},\"p\":{\"docs\":{},\"i\":{\"docs\":{},\"/\":{\"docs\":{},\"n\":{\"docs\":{},\"g\":{\"docs\":{},\"/\":{\"docs\":{},\"i\":{\"docs\":{},\"n\":{\"docs\":{},\"p\":{\"docs\":{},\"u\":{\"docs\":{},\"t\":{\"docs\":{},\"/\":{\"docs\":{},\"i\":{\"docs\":{},\"n\":{\"docs\":{},\"p\":{\"docs\":{},\"u\":{\"docs\":{},\"t\":{\"docs\":{},\"[\":{\"docs\":{},\"r\":{\"docs\":{},\"a\":{\"docs\":{},\"d\":{\"docs\":{},\"i\":{\"docs\":{},\"o\":{\"docs\":{\"87\":{\"ref\":87,\"tf\":0.041666666666666664}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},\"w\":{\"docs\":{\"54\":{\"ref\":54,\"tf\":0.002574002574002574},\"130\":{\"ref\":130,\"tf\":0.008771929824561403},\"132\":{\"ref\":132,\"tf\":0.01282051282051282}}},\"t\":{\"docs\":{},\"i\":{\"docs\":{},\"o\":{\"docs\":{\"116\":{\"ref\":116,\"tf\":0.011111111111111112}}}}}},\"u\":{\"docs\":{},\"b\":{\"docs\":{},\"i\":{\"docs\":{\"36\":{\"ref\":36,\"tf\":0.017857142857142856},\"68\":{\"ref\":68,\"tf\":0.027777777777777776}}}},\"l\":{\"docs\":{},\"e\":{\"docs\":{\"50\":{\"ref\":50,\"tf\":0.008928571428571428},\"57\":{\"ref\":57,\"tf\":0.0023584905660377358},\"72\":{\"ref\":72,\"tf\":0.004662004662004662},\"129\":{\"ref\":129,\"tf\":0.0017391304347826088}}}},\"n\":{\"docs\":{\"54\":{\"ref\":54,\"tf\":0.003861003861003861},\"56\":{\"ref\":56,\"tf\":0.017543859649122806},\"57\":{\"ref\":57,\"tf\":0.01179245283018868},\"58\":{\"ref\":58,\"tf\":0.00819672131147541},\"59\":{\"ref\":59,\"tf\":0.013927576601671309},\"60\":{\"ref\":60,\"tf\":0.01818181818181818},\"103\":{\"ref\":103,\"tf\":0.006493506493506494},\"106\":{\"ref\":106,\"tf\":0.02666666666666667},\"119\":{\"ref\":119,\"tf\":0.003937007874015748},\"121\":{\"ref\":121,\"tf\":0.03488372093023256},\"126\":{\"ref\":126,\"tf\":0.011111111111111112},\"127\":{\"ref\":127,\"tf\":0.006622516556291391},\"129\":{\"ref\":129,\"tf\":0.0034782608695652175},\"130\":{\"ref\":130,\"tf\":0.0043859649122807015},\"133\":{\"ref\":133,\"tf\":0.0016750418760469012}}}},\"m\":{\"docs\":{\"56\":{\"ref\":56,\"tf\":0.004784688995215311},\"58\":{\"ref\":58,\"tf\":0.00273224043715847}}},\"s\":{\"docs\":{},\"a\":{\"docs\":{\"58\":{\"ref\":58,\"tf\":0.00273224043715847}}}}},\"s\":{\"docs\":{},\"c\":{\"docs\":{},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\"e\":{\"docs\":{},\"n\":{\"docs\":{\"0\":{\"ref\":0,\"tf\":0.03225806451612903},\"3\":{\"ref\":3,\"tf\":0.019230769230769232},\"13\":{\"ref\":13,\"tf\":0.019230769230769232},\"21\":{\"ref\":21,\"tf\":0.0196078431372549},\"22\":{\"ref\":22,\"tf\":0.024390243902439025},\"39\":{\"ref\":39,\"tf\":0.012658227848101266},\"52\":{\"ref\":52,\"tf\":0.010416666666666666},\"72\":{\"ref\":72,\"tf\":0.009324009324009324}},\"s\":{\"docs\":{},\"h\":{\"docs\":{},\"o\":{\"docs\":{},\"t\":{\"docs\":{\"58\":{\"ref\":58,\"tf\":0.00273224043715847},\"132\":{\"ref\":132,\"tf\":0.01282051282051282}}}}}}}}},\"o\":{\"docs\":{},\"l\":{\"docs\":{},\"l\":{\"docs\":{\"20\":{\"ref\":20,\"tf\":0.02040816326530612},\"21\":{\"ref\":21,\"tf\":0.00980392156862745},\"60\":{\"ref\":60,\"tf\":0.0022727272727272726},\"72\":{\"ref\":72,\"tf\":0.009324009324009324},\"74\":{\"ref\":74,\"tf\":0.08383233532934131},\"78\":{\"ref\":78,\"tf\":0.033707865168539325},\"90\":{\"ref\":90,\"tf\":0.03125},\"103\":{\"ref\":103,\"tf\":0.045454545454545456},\"104\":{\"ref\":104,\"tf\":0.00847457627118644},\"115\":{\"ref\":115,\"tf\":0.09090909090909091},\"119\":{\"ref\":119,\"tf\":0.003937007874015748},\"123\":{\"ref\":123,\"tf\":0.007042253521126761}},\"a\":{\"docs\":{},\"b\":{\"docs\":{},\"l\":{\"docs\":{\"2\":{\"ref\":2,\"tf\":0.025},\"90\":{\"ref\":90,\"tf\":0.010416666666666666},\"123\":{\"ref\":123,\"tf\":0.0035211267605633804}}}}},\"e\":{\"docs\":{},\"r\":{\"docs\":{\"38\":{\"ref\":38,\"tf\":0.011627906976744186},\"78\":{\"ref\":78,\"tf\":0.011235955056179775}}}},\"v\":{\"docs\":{},\"i\":{\"docs\":{},\"e\":{\"docs\":{},\"w\":{\"docs\":{\"72\":{\"ref\":72,\"tf\":0.002331002331002331},\"74\":{\"ref\":74,\"tf\":0.005988023952095809},\"88\":{\"ref\":88,\"tf\":0.009708737864077669},\"90\":{\"ref\":90,\"tf\":0.010416666666666666},\"115\":{\"ref\":115,\"tf\":0.032467532467532464},\"123\":{\"ref\":123,\"tf\":0.0035211267605633804},\"124\":{\"ref\":124,\"tf\":0.010309278350515464}},\"'\":{\"docs\":{\"72\":{\"ref\":72,\"tf\":0.002331002331002331}}}}}}},\"b\":{\"docs\":{},\"a\":{\"docs\":{},\"r\":{\"docs\":{\"74\":{\"ref\":74,\"tf\":0.011976047904191617},\"90\":{\"ref\":90,\"tf\":0.020833333333333332}},\"-\":{\"docs\":{},\"i\":{\"docs\":{\"74\":{\"ref\":74,\"tf\":0.005988023952095809},\"90\":{\"ref\":90,\"tf\":0.010416666666666666}}},\"x\":{\"docs\":{\"74\":{\"ref\":74,\"tf\":0.005988023952095809},\"90\":{\"ref\":90,\"tf\":0.010416666666666666}}}}}},\"o\":{\"docs\":{},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"o\":{\"docs\":{},\"m\":{\"docs\":{},\"(\":{\"docs\":{},\"[\":{\"docs\":{},\"s\":{\"docs\":{},\"h\":{\"docs\":{},\"o\":{\"docs\":{},\"u\":{\"docs\":{},\"l\":{\"docs\":{},\"d\":{\"docs\":{},\"a\":{\"docs\":{},\"n\":{\"docs\":{},\"i\":{\"docs\":{},\"m\":{\"docs\":{\"115\":{\"ref\":115,\"tf\":0.003246753246753247}}}}}}}}}}}}}}}}}}},\"y\":{\"docs\":{},\"(\":{\"docs\":{},\"l\":{\"docs\":{},\"e\":{\"docs\":{},\"f\":{\"docs\":{},\"t\":{\"docs\":{\"115\":{\"ref\":115,\"tf\":0.003246753246753247}}}}}}}}},\".\":{\"docs\":{},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\"f\":{\"docs\":{},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\"s\":{\"docs\":{},\"h\":{\"docs\":{},\"c\":{\"docs\":{},\"o\":{\"docs\":{},\"m\":{\"docs\":{},\"p\":{\"docs\":{},\"l\":{\"docs\":{},\"e\":{\"docs\":{},\"t\":{\"docs\":{\"88\":{\"ref\":88,\"tf\":0.009708737864077669}}}}}}}}}}}}}}}}},\"c\":{\"docs\":{},\"t\":{\"docs\":{},\"r\":{\"docs\":{},\"l\":{\"docs\":{},\"(\":{\"docs\":{},\"$\":{\"docs\":{},\"s\":{\"docs\":{},\"c\":{\"docs\":{},\"o\":{\"docs\":{},\"p\":{\"docs\":{\"115\":{\"ref\":115,\"tf\":0.003246753246753247}}}}}}}}}}}},\"t\":{\"docs\":{},\"o\":{\"docs\":{},\"(\":{\"docs\":{},\"l\":{\"docs\":{},\"e\":{\"docs\":{},\"f\":{\"docs\":{},\"t\":{\"docs\":{\"115\":{\"ref\":115,\"tf\":0.003246753246753247}}}}}}},\"p\":{\"docs\":{},\"(\":{\"docs\":{},\"[\":{\"docs\":{},\"s\":{\"docs\":{},\"h\":{\"docs\":{},\"o\":{\"docs\":{},\"u\":{\"docs\":{},\"l\":{\"docs\":{},\"d\":{\"docs\":{},\"a\":{\"docs\":{},\"n\":{\"docs\":{},\"i\":{\"docs\":{},\"m\":{\"docs\":{\"115\":{\"ref\":115,\"tf\":0.003246753246753247}}}}}}}}}}}}}}},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\"m\":{\"docs\":{},\"e\":{\"docs\":{},\"m\":{\"docs\":{},\"b\":{\"docs\":{},\"e\":{\"docs\":{},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\"d\":{\"docs\":{},\"p\":{\"docs\":{},\"o\":{\"docs\":{},\"s\":{\"docs\":{},\"i\":{\"docs\":{},\"t\":{\"docs\":{\"115\":{\"ref\":115,\"tf\":0.003246753246753247}},\"i\":{\"docs\":{},\"o\":{\"docs\":{},\"n\":{\"docs\":{},\"(\":{\"docs\":{},\"[\":{\"docs\":{},\"s\":{\"docs\":{},\"h\":{\"docs\":{},\"o\":{\"docs\":{},\"u\":{\"docs\":{},\"l\":{\"docs\":{},\"d\":{\"docs\":{},\"a\":{\"docs\":{},\"n\":{\"docs\":{},\"i\":{\"docs\":{},\"m\":{\"docs\":{\"115\":{\"ref\":115,\"tf\":0.003246753246753247}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},\"i\":{\"docs\":{},\"p\":{\"docs\":{},\"t\":{\"docs\":{\"54\":{\"ref\":54,\"tf\":0.002574002574002574},\"59\":{\"ref\":59,\"tf\":0.008356545961002786},\"84\":{\"ref\":84,\"tf\":0.0036363636363636364}}}}}},\"i\":{\"docs\":{},\"e\":{\"docs\":{},\"n\":{\"docs\":{},\"t\":{\"docs\":{},\"i\":{\"docs\":{},\"s\":{\"docs\":{},\"t\":{\"docs\":{\"18\":{\"ref\":18,\"tf\":0.04}}}}}}}}},\"o\":{\"docs\":{},\"p\":{\"docs\":{},\"e\":{\"docs\":{\"54\":{\"ref\":54,\"tf\":0.005148005148005148},\"71\":{\"ref\":71,\"tf\":0.024},\"72\":{\"ref\":72,\"tf\":0.002331002331002331},\"74\":{\"ref\":74,\"tf\":0.005988023952095809},\"105\":{\"ref\":105,\"tf\":0.005847953216374269},\"111\":{\"ref\":111,\"tf\":0.015037593984962405},\"114\":{\"ref\":114,\"tf\":0.007974481658692184},\"130\":{\"ref\":130,\"tf\":0.008771929824561403},\"133\":{\"ref\":133,\"tf\":0.0016750418760469012},\"136\":{\"ref\":136,\"tf\":0.015151515151515152}},\".\":{\"docs\":{},\"a\":{\"docs\":{},\"c\":{\"docs\":{},\"t\":{\"docs\":{\"107\":{\"ref\":107,\"tf\":0.012658227848101266}},\"i\":{\"docs\":{},\"v\":{\"docs\":{},\"e\":{\"docs\":{},\"p\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"j\":{\"docs\":{},\"e\":{\"docs\":{},\"c\":{\"docs\":{},\"t\":{\"docs\":{\"54\":{\"ref\":54,\"tf\":0.002574002574002574}},\".\":{\"docs\":{},\"t\":{\"docs\":{},\"a\":{\"docs\":{},\"s\":{\"docs\":{},\"k\":{\"docs\":{},\"s\":{\"docs\":{},\".\":{\"docs\":{},\"p\":{\"docs\":{},\"u\":{\"docs\":{},\"s\":{\"docs\":{},\"h\":{\"docs\":{\"54\":{\"ref\":54,\"tf\":0.001287001287001287}}}}}}}}}}}}}}}}}}}}}}}}}},\"c\":{\"docs\":{},\"l\":{\"docs\":{},\"o\":{\"docs\":{},\"s\":{\"docs\":{},\"e\":{\"docs\":{},\"n\":{\"docs\":{},\"e\":{\"docs\":{},\"w\":{\"docs\":{},\"t\":{\"docs\":{},\"a\":{\"docs\":{},\"s\":{\"docs\":{},\"k\":{\"docs\":{\"54\":{\"ref\":54,\"tf\":0.002574002574002574}}}}}}}}},\"m\":{\"docs\":{},\"o\":{\"docs\":{},\"d\":{\"docs\":{\"111\":{\"ref\":111,\"tf\":0.007518796992481203}}}}}}}}},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\"a\":{\"docs\":{},\"t\":{\"docs\":{},\"e\":{\"docs\":{},\"t\":{\"docs\":{},\"a\":{\"docs\":{},\"s\":{\"docs\":{},\"k\":{\"docs\":{\"54\":{\"ref\":54,\"tf\":0.002574002574002574}}}}}}}}}}}},\"n\":{\"docs\":{},\"e\":{\"docs\":{},\"w\":{\"docs\":{},\"p\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"j\":{\"docs\":{},\"e\":{\"docs\":{},\"c\":{\"docs\":{},\"t\":{\"docs\":{\"54\":{\"ref\":54,\"tf\":0.001287001287001287}}}}}}}}},\"t\":{\"docs\":{},\"a\":{\"docs\":{},\"s\":{\"docs\":{},\"k\":{\"docs\":{\"54\":{\"ref\":54,\"tf\":0.002574002574002574}}}}}}},\"x\":{\"docs\":{},\"t\":{\"docs\":{\"133\":{\"ref\":133,\"tf\":0.0033500837520938024}},\"s\":{\"docs\":{},\"l\":{\"docs\":{},\"i\":{\"docs\":{},\"d\":{\"docs\":{\"117\":{\"ref\":117,\"tf\":0.007575757575757576}}}}}}}}}},\"p\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"j\":{\"docs\":{},\"e\":{\"docs\":{},\"c\":{\"docs\":{},\"t\":{\"docs\":{\"54\":{\"ref\":54,\"tf\":0.001287001287001287}},\"s\":{\"docs\":{},\".\":{\"docs\":{},\"l\":{\"docs\":{},\"e\":{\"docs\":{},\"n\":{\"docs\":{},\"g\":{\"docs\":{},\"t\":{\"docs\":{},\"h\":{\"docs\":{},\"-\":{\"1\":{\"docs\":{\"54\":{\"ref\":54,\"tf\":0.001287001287001287}}},\"docs\":{}}}}}}}},\"p\":{\"docs\":{},\"u\":{\"docs\":{},\"s\":{\"docs\":{},\"h\":{\"docs\":{},\"(\":{\"docs\":{},\"n\":{\"docs\":{},\"e\":{\"docs\":{},\"w\":{\"docs\":{},\"p\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"j\":{\"docs\":{},\"e\":{\"docs\":{},\"c\":{\"docs\":{},\"t\":{\"docs\":{\"54\":{\"ref\":54,\"tf\":0.001287001287001287}}}}}}}}}}}}}}}}}},\"[\":{\"docs\":{},\"p\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"j\":{\"docs\":{},\"e\":{\"docs\":{},\"c\":{\"docs\":{},\"t\":{\"docs\":{},\"s\":{\"docs\":{},\".\":{\"docs\":{},\"g\":{\"docs\":{},\"e\":{\"docs\":{},\"t\":{\"docs\":{},\"l\":{\"docs\":{},\"a\":{\"docs\":{},\"s\":{\"docs\":{},\"t\":{\"docs\":{},\"a\":{\"docs\":{},\"c\":{\"docs\":{},\"t\":{\"docs\":{},\"i\":{\"docs\":{},\"v\":{\"docs\":{},\"e\":{\"docs\":{},\"i\":{\"docs\":{},\"n\":{\"docs\":{},\"d\":{\"docs\":{},\"e\":{\"docs\":{},\"x\":{\"docs\":{\"54\":{\"ref\":54,\"tf\":0.001287001287001287}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},\"s\":{\"docs\":{},\"e\":{\"docs\":{},\"l\":{\"docs\":{},\"e\":{\"docs\":{},\"c\":{\"docs\":{},\"t\":{\"docs\":{},\"p\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"j\":{\"docs\":{},\"e\":{\"docs\":{},\"c\":{\"docs\":{},\"t\":{\"docs\":{\"54\":{\"ref\":54,\"tf\":0.001287001287001287}},\"(\":{\"docs\":{},\"n\":{\"docs\":{},\"e\":{\"docs\":{},\"w\":{\"docs\":{},\"p\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"j\":{\"docs\":{},\"e\":{\"docs\":{},\"c\":{\"docs\":{},\"t\":{\"docs\":{\"54\":{\"ref\":54,\"tf\":0.001287001287001287}}}}}}}}}}}}}}}}}}}},\"t\":{\"docs\":{},\"a\":{\"docs\":{},\"b\":{\"docs\":{},\"w\":{\"docs\":{},\"i\":{\"docs\":{},\"t\":{\"docs\":{},\"h\":{\"docs\":{},\"i\":{\"docs\":{},\"n\":{\"docs\":{},\"d\":{\"docs\":{},\"e\":{\"docs\":{},\"x\":{\"docs\":{\"118\":{\"ref\":118,\"tf\":0.009523809523809525}}}}}}}}}}}}}}}}}},\"t\":{\"docs\":{},\"n\":{\"docs\":{},\"a\":{\"docs\":{},\"v\":{\"docs\":{},\"t\":{\"docs\":{},\"i\":{\"docs\":{},\"t\":{\"docs\":{},\"l\":{\"docs\":{\"112\":{\"ref\":112,\"tf\":0.0058823529411764705}}}}}}}}}}},\"h\":{\"docs\":{},\"o\":{\"docs\":{},\"w\":{\"docs\":{\"105\":{\"ref\":105,\"tf\":0.005847953216374269},\"110\":{\"ref\":110,\"tf\":0.01020408163265306}},\"d\":{\"docs\":{},\"e\":{\"docs\":{},\"l\":{\"docs\":{},\"e\":{\"docs\":{},\"t\":{\"docs\":{},\"e\":{\"docs\":{},\"b\":{\"docs\":{},\"u\":{\"docs\":{},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"o\":{\"docs\":{},\"n\":{\"docs\":{\"109\":{\"ref\":109,\"tf\":0.008547008547008548}}}}}}}}}}}}}},\"a\":{\"docs\":{},\"l\":{\"docs\":{},\"e\":{\"docs\":{},\"r\":{\"docs\":{},\"t\":{\"docs\":{\"114\":{\"ref\":114,\"tf\":0.001594896331738437}}}}}}},\"c\":{\"docs\":{},\"o\":{\"docs\":{},\"n\":{\"docs\":{},\"f\":{\"docs\":{},\"i\":{\"docs\":{},\"r\":{\"docs\":{},\"m\":{\"docs\":{\"114\":{\"ref\":114,\"tf\":0.001594896331738437}}}}}}}}},\"p\":{\"docs\":{},\"o\":{\"docs\":{},\"p\":{\"docs\":{},\"u\":{\"docs\":{},\"p\":{\"docs\":{\"114\":{\"ref\":114,\"tf\":0.001594896331738437}}}}}}}}}},\"c\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"l\":{\"docs\":{},\"l\":{\"docs\":{},\"m\":{\"docs\":{},\"a\":{\"docs\":{},\"i\":{\"docs\":{},\"n\":{\"docs\":{},\"t\":{\"docs\":{},\"o\":{\"docs\":{},\"t\":{\"docs\":{},\"o\":{\"docs\":{},\"p\":{\"docs\":{\"115\":{\"ref\":115,\"tf\":0.003246753246753247}}}}}}}}}}},\"s\":{\"docs\":{},\"m\":{\"docs\":{},\"a\":{\"docs\":{},\"l\":{\"docs\":{},\"l\":{\"docs\":{},\"t\":{\"docs\":{},\"o\":{\"docs\":{},\"t\":{\"docs\":{},\"o\":{\"docs\":{},\"p\":{\"docs\":{\"115\":{\"ref\":115,\"tf\":0.003246753246753247}}}}}}}}}}}},\"t\":{\"docs\":{},\"o\":{\"docs\":{},\"p\":{\"docs\":{\"115\":{\"ref\":115,\"tf\":0.003246753246753247}}}}}}}}}},\"l\":{\"docs\":{},\"i\":{\"docs\":{},\"d\":{\"docs\":{},\"e\":{\"docs\":{},\"c\":{\"docs\":{},\"h\":{\"docs\":{},\"a\":{\"docs\":{},\"n\":{\"docs\":{},\"g\":{\"docs\":{\"133\":{\"ref\":133,\"tf\":0.0033500837520938024}}}}}}}}}}}},\"t\":{\"docs\":{},\"a\":{\"docs\":{},\"s\":{\"docs\":{},\"k\":{\"docs\":{\"54\":{\"ref\":54,\"tf\":0.002574002574002574}},\"m\":{\"docs\":{},\"o\":{\"docs\":{},\"d\":{\"docs\":{\"54\":{\"ref\":54,\"tf\":0.002574002574002574}},\"a\":{\"docs\":{},\"l\":{\"docs\":{},\".\":{\"docs\":{},\"h\":{\"docs\":{},\"i\":{\"docs\":{},\"d\":{\"docs\":{\"54\":{\"ref\":54,\"tf\":0.005148005148005148}}}}},\"s\":{\"docs\":{},\"h\":{\"docs\":{},\"o\":{\"docs\":{},\"w\":{\"docs\":{\"54\":{\"ref\":54,\"tf\":0.002574002574002574}}}}}}}}}}}},\"s\":{\"docs\":{},\".\":{\"docs\":{},\"p\":{\"docs\":{},\"u\":{\"docs\":{},\"s\":{\"docs\":{},\"h\":{\"docs\":{\"54\":{\"ref\":54,\"tf\":0.001287001287001287}}}}}}}}}}},\"o\":{\"docs\":{},\"g\":{\"docs\":{},\"g\":{\"docs\":{},\"l\":{\"docs\":{},\"e\":{\"docs\":{},\"p\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"j\":{\"docs\":{},\"e\":{\"docs\":{},\"c\":{\"docs\":{},\"t\":{\"docs\":{\"54\":{\"ref\":54,\"tf\":0.001287001287001287}}}}}}}}},\"l\":{\"docs\":{},\"e\":{\"docs\":{},\"f\":{\"docs\":{},\"t\":{\"docs\":{\"93\":{\"ref\":93,\"tf\":0.014084507042253521}},\"s\":{\"docs\":{},\"i\":{\"docs\":{},\"d\":{\"docs\":{},\"e\":{\"docs\":{},\"m\":{\"docs\":{},\"e\":{\"docs\":{},\"n\":{\"docs\":{},\"u\":{\"docs\":{\"116\":{\"ref\":116,\"tf\":0.005555555555555556}}}}}}}}}}}}}}}}}}}},\"g\":{\"docs\":{},\"e\":{\"docs\":{},\"t\":{\"docs\":{},\"i\":{\"docs\":{},\"t\":{\"docs\":{},\"e\":{\"docs\":{},\"m\":{\"docs\":{},\"h\":{\"docs\":{},\"e\":{\"docs\":{},\"i\":{\"docs\":{},\"g\":{\"docs\":{},\"h\":{\"docs\":{},\"t\":{\"docs\":{\"72\":{\"ref\":72,\"tf\":0.002331002331002331}}}}}}}}}}}},\"p\":{\"docs\":{},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\"v\":{\"docs\":{},\"i\":{\"docs\":{},\"o\":{\"docs\":{},\"u\":{\"docs\":{},\"s\":{\"docs\":{},\"t\":{\"docs\":{},\"i\":{\"docs\":{},\"t\":{\"docs\":{},\"l\":{\"docs\":{\"81\":{\"ref\":81,\"tf\":0.015151515151515152}}}}}}}}}}}}}}}},\"o\":{\"docs\":{},\"b\":{\"docs\":{},\"a\":{\"docs\":{},\"c\":{\"docs\":{},\"k\":{\"docs\":{\"81\":{\"ref\":81,\"tf\":0.015151515151515152}}}}}}}},\"i\":{\"docs\":{},\"t\":{\"docs\":{},\"e\":{\"docs\":{},\"m\":{\"docs\":{\"72\":{\"ref\":72,\"tf\":0.002331002331002331},\"78\":{\"ref\":78,\"tf\":0.011235955056179775},\"88\":{\"ref\":88,\"tf\":0.019417475728155338},\"89\":{\"ref\":89,\"tf\":0.022727272727272728},\"115\":{\"ref\":115,\"tf\":0.003246753246753247}},\"s\":{\"docs\":{},\".\":{\"docs\":{},\"p\":{\"docs\":{},\"u\":{\"docs\":{},\"s\":{\"docs\":{},\"h\":{\"docs\":{},\"(\":{\"docs\":{},\"'\":{\"docs\":{},\"i\":{\"docs\":{},\"t\":{\"docs\":{},\"e\":{\"docs\":{},\"m\":{\"docs\":{\"72\":{\"ref\":72,\"tf\":0.002331002331002331}}}}}}}}}}}},\"s\":{\"docs\":{},\"p\":{\"docs\":{},\"l\":{\"docs\":{},\"i\":{\"docs\":{},\"c\":{\"docs\":{},\"e\":{\"docs\":{},\"(\":{\"docs\":{},\"f\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"m\":{\"docs\":{},\"i\":{\"docs\":{},\"n\":{\"docs\":{},\"d\":{\"docs\":{},\"e\":{\"docs\":{},\"x\":{\"docs\":{\"89\":{\"ref\":89,\"tf\":0.022727272727272728}}}}}}}}}}},\"t\":{\"docs\":{},\"o\":{\"docs\":{},\"i\":{\"docs\":{},\"n\":{\"docs\":{},\"d\":{\"docs\":{},\"e\":{\"docs\":{},\"x\":{\"docs\":{\"89\":{\"ref\":89,\"tf\":0.022727272727272728}}}}}}}}}}}}}}}}}}}}}},\"$\":{\"docs\":{},\"b\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"a\":{\"docs\":{},\"d\":{\"docs\":{},\"c\":{\"docs\":{},\"a\":{\"docs\":{},\"s\":{\"docs\":{},\"t\":{\"docs\":{},\"(\":{\"docs\":{},\"'\":{\"docs\":{},\"s\":{\"docs\":{},\"c\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"l\":{\"docs\":{},\"l\":{\"docs\":{},\".\":{\"docs\":{},\"i\":{\"docs\":{},\"n\":{\"docs\":{},\"f\":{\"docs\":{},\"i\":{\"docs\":{},\"n\":{\"docs\":{},\"i\":{\"docs\":{},\"t\":{\"docs\":{},\"e\":{\"docs\":{},\"s\":{\"docs\":{},\"c\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"l\":{\"docs\":{},\"l\":{\"docs\":{},\"c\":{\"docs\":{},\"o\":{\"docs\":{},\"m\":{\"docs\":{},\"p\":{\"docs\":{},\"l\":{\"docs\":{},\"e\":{\"docs\":{},\"t\":{\"docs\":{\"78\":{\"ref\":78,\"tf\":0.011235955056179775}}}}}}}}}}}}}}}}}}}}}}},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\"f\":{\"docs\":{},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\"s\":{\"docs\":{},\"h\":{\"docs\":{},\"c\":{\"docs\":{},\"o\":{\"docs\":{},\"m\":{\"docs\":{},\"p\":{\"docs\":{},\"l\":{\"docs\":{},\"e\":{\"docs\":{},\"t\":{\"docs\":{\"88\":{\"ref\":88,\"tf\":0.009708737864077669}}}}}}}}}}}}}}}}}}}}}},\"l\":{\"docs\":{},\"i\":{\"docs\":{},\"d\":{\"docs\":{},\"e\":{\"docs\":{},\"b\":{\"docs\":{},\"o\":{\"docs\":{},\"x\":{\"docs\":{},\".\":{\"docs\":{},\"n\":{\"docs\":{},\"e\":{\"docs\":{},\"x\":{\"docs\":{},\"t\":{\"docs\":{},\"s\":{\"docs\":{},\"l\":{\"docs\":{},\"i\":{\"docs\":{},\"d\":{\"docs\":{\"133\":{\"ref\":133,\"tf\":0.0016750418760469012}}}}}}}}}},\"p\":{\"docs\":{},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\"v\":{\"docs\":{},\"s\":{\"docs\":{},\"l\":{\"docs\":{},\"i\":{\"docs\":{},\"d\":{\"docs\":{\"133\":{\"ref\":133,\"tf\":0.0016750418760469012}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},\"o\":{\"docs\":{},\"n\":{\"docs\":{},\"(\":{\"docs\":{},\"'\":{\"docs\":{},\"s\":{\"docs\":{},\"t\":{\"docs\":{},\"a\":{\"docs\":{},\"t\":{\"docs\":{},\"e\":{\"docs\":{},\"c\":{\"docs\":{},\"h\":{\"docs\":{},\"a\":{\"docs\":{},\"n\":{\"docs\":{},\"g\":{\"docs\":{},\"e\":{\"docs\":{},\"s\":{\"docs\":{},\"u\":{\"docs\":{},\"c\":{\"docs\":{},\"c\":{\"docs\":{},\"e\":{\"docs\":{},\"s\":{\"docs\":{},\"s\":{\"docs\":{\"78\":{\"ref\":78,\"tf\":0.011235955056179775}}}}}}}}}}}}}}}}}}}},\"$\":{\"docs\":{},\"d\":{\"docs\":{},\"e\":{\"docs\":{},\"s\":{\"docs\":{},\"t\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"i\":{\"docs\":{\"111\":{\"ref\":111,\"tf\":0.007518796992481203}}}}}}}}}},\"m\":{\"docs\":{},\"o\":{\"docs\":{},\"d\":{\"docs\":{},\"a\":{\"docs\":{},\"l\":{\"docs\":{},\".\":{\"docs\":{},\"h\":{\"docs\":{},\"i\":{\"docs\":{},\"d\":{\"docs\":{\"111\":{\"ref\":111,\"tf\":0.007518796992481203}}}}},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\"m\":{\"docs\":{},\"o\":{\"docs\":{},\"v\":{\"docs\":{\"111\":{\"ref\":111,\"tf\":0.007518796992481203}}}}}}}}}}}}}}}}},\"w\":{\"docs\":{},\"a\":{\"docs\":{},\"t\":{\"docs\":{},\"c\":{\"docs\":{},\"h\":{\"docs\":{},\"(\":{\"docs\":{},\"'\":{\"docs\":{},\"s\":{\"docs\":{},\"i\":{\"docs\":{},\"d\":{\"docs\":{},\"e\":{\"docs\":{},\"m\":{\"docs\":{},\"e\":{\"docs\":{},\"n\":{\"docs\":{},\"u\":{\"docs\":{},\"c\":{\"docs\":{},\"o\":{\"docs\":{},\"n\":{\"docs\":{},\"t\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"l\":{\"docs\":{},\"l\":{\"docs\":{},\"e\":{\"docs\":{},\"r\":{\"docs\":{},\".\":{\"docs\":{},\"g\":{\"docs\":{},\"e\":{\"docs\":{},\"t\":{\"docs\":{},\"o\":{\"docs\":{},\"p\":{\"docs\":{},\"e\":{\"docs\":{},\"n\":{\"docs\":{},\"r\":{\"docs\":{},\"a\":{\"docs\":{},\"t\":{\"docs\":{},\"i\":{\"docs\":{},\"o\":{\"docs\":{\"130\":{\"ref\":130,\"tf\":0.0043859649122807015}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},\"l\":{\"docs\":{},\"o\":{\"docs\":{},\"a\":{\"docs\":{},\"d\":{\"docs\":{},\"m\":{\"docs\":{},\"o\":{\"docs\":{},\"r\":{\"docs\":{\"78\":{\"ref\":78,\"tf\":0.02247191011235955}}}}}}}},\"e\":{\"docs\":{},\"f\":{\"docs\":{},\"t\":{\"docs\":{},\"b\":{\"docs\":{},\"u\":{\"docs\":{},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"o\":{\"docs\":{},\"n\":{\"docs\":{\"133\":{\"ref\":133,\"tf\":0.005025125628140704}}}}}}}}}}}},\"d\":{\"docs\":{},\"o\":{\"docs\":{},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\"f\":{\"docs\":{},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\"s\":{\"docs\":{},\"h\":{\"docs\":{\"88\":{\"ref\":88,\"tf\":0.009708737864077669}}}}}}}}}},\"a\":{\"docs\":{},\"t\":{\"docs\":{},\"a\":{\"docs\":{\"114\":{\"ref\":114,\"tf\":0.001594896331738437},\"136\":{\"ref\":136,\"tf\":0.005050505050505051}},\".\":{\"docs\":{},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\"s\":{\"docs\":{},\"p\":{\"docs\":{},\"o\":{\"docs\":{},\"n\":{\"docs\":{},\"s\":{\"docs\":{\"114\":{\"ref\":114,\"tf\":0.001594896331738437}}}}}}}}},\"w\":{\"docs\":{},\"i\":{\"docs\":{},\"f\":{\"docs\":{},\"i\":{\"docs\":{\"114\":{\"ref\":114,\"tf\":0.003189792663476874},\"136\":{\"ref\":136,\"tf\":0.005050505050505051}}}}}}}}}}},\"m\":{\"docs\":{},\"o\":{\"docs\":{},\"v\":{\"docs\":{},\"e\":{\"docs\":{},\"i\":{\"docs\":{},\"t\":{\"docs\":{},\"e\":{\"docs\":{},\"m\":{\"docs\":{\"89\":{\"ref\":89,\"tf\":0.022727272727272728}}}}}}}},\"d\":{\"docs\":{\"111\":{\"ref\":111,\"tf\":0.007518796992481203}},\"a\":{\"docs\":{},\"l\":{\"docs\":{},\".\":{\"docs\":{},\"h\":{\"docs\":{},\"i\":{\"docs\":{},\"d\":{\"docs\":{\"111\":{\"ref\":111,\"tf\":0.007518796992481203}}}}},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\"m\":{\"docs\":{},\"o\":{\"docs\":{},\"v\":{\"docs\":{\"111\":{\"ref\":111,\"tf\":0.007518796992481203}}}}}}},\"s\":{\"docs\":{},\"h\":{\"docs\":{},\"o\":{\"docs\":{},\"w\":{\"docs\":{\"111\":{\"ref\":111,\"tf\":0.007518796992481203}}}}}}}}}}}},\"h\":{\"docs\":{},\"i\":{\"docs\":{},\"d\":{\"docs\":{\"110\":{\"ref\":110,\"tf\":0.01020408163265306}}}}},\"o\":{\"docs\":{},\"p\":{\"docs\":{},\"e\":{\"docs\":{},\"n\":{\"docs\":{},\"m\":{\"docs\":{},\"o\":{\"docs\":{},\"d\":{\"docs\":{\"111\":{\"ref\":111,\"tf\":0.007518796992481203}}}}}}}}},\"r\":{\"docs\":{},\"i\":{\"docs\":{},\"g\":{\"docs\":{},\"h\":{\"docs\":{},\"t\":{\"docs\":{},\"b\":{\"docs\":{},\"u\":{\"docs\":{},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"o\":{\"docs\":{},\"n\":{\"docs\":{\"133\":{\"ref\":133,\"tf\":0.005025125628140704}}}}}}}}}}}}}}}}},\"e\":{\"docs\":{},\"n\":{\"docs\":{},\"a\":{\"docs\":{},\"r\":{\"docs\":{},\"i\":{\"docs\":{},\"o\":{\"docs\":{\"104\":{\"ref\":104,\"tf\":0.00423728813559322},\"134\":{\"ref\":134,\"tf\":0.0034522439585730723}}}}}}}},\"s\":{\"docs\":{},\"s\":{\"docs\":{\"129\":{\"ref\":129,\"tf\":0.01391304347826087}},\"/\":{\"docs\":{},\"a\":{\"docs\":{},\"p\":{\"docs\":{},\"p\":{\"docs\":{},\".\":{\"docs\":{},\"s\":{\"docs\":{},\"c\":{\"docs\":{},\"s\":{\"docs\":{},\"s\":{\"docs\":{\"129\":{\"ref\":129,\"tf\":0.0017391304347826088}},\":\":{\"docs\":{},\"c\":{\"docs\":{},\"s\":{\"docs\":{},\"s\":{\"docs\":{},\"/\":{\"docs\":{},\"a\":{\"docs\":{},\"p\":{\"docs\":{},\"p\":{\"docs\":{},\".\":{\"docs\":{},\"c\":{\"docs\":{},\"s\":{\"docs\":{},\"s\":{\"docs\":{\"129\":{\"ref\":129,\"tf\":0.0017391304347826088}}}}}}}}}}}}}}}}}}}}}},\"i\":{\"docs\":{},\"o\":{\"docs\":{},\"n\":{\"docs\":{},\"i\":{\"docs\":{},\"c\":{\"docs\":{\"129\":{\"ref\":129,\"tf\":0.0017391304347826088}},\"/\":{\"docs\":{},\"i\":{\"docs\":{},\"o\":{\"docs\":{},\"n\":{\"docs\":{},\"i\":{\"docs\":{},\"c\":{\"docs\":{},\".\":{\"docs\":{},\"s\":{\"docs\":{},\"c\":{\"docs\":{},\"s\":{\"docs\":{},\"s\":{\"docs\":{\"129\":{\"ref\":129,\"tf\":0.0017391304347826088}}}}}}},\"o\":{\"docs\":{},\"n\":{\"docs\":{\"129\":{\"ref\":129,\"tf\":0.0017391304347826088}}}}}}}}}}}}}}}}}},\"a\":{\"docs\":{},\"l\":{\"docs\":{},\"e\":{\"docs\":{\"135\":{\"ref\":135,\"tf\":0.0019305019305019305}}}}}},\"e\":{\"docs\":{},\"c\":{\"docs\":{},\"o\":{\"docs\":{},\"n\":{\"docs\":{},\"d\":{\"docs\":{\"13\":{\"ref\":13,\"tf\":0.21153846153846154},\"16\":{\"ref\":16,\"tf\":0.007352941176470588},\"107\":{\"ref\":107,\"tf\":0.012658227848101266},\"114\":{\"ref\":114,\"tf\":0.001594896331738437},\"133\":{\"ref\":133,\"tf\":0.0016750418760469012}},\"a\":{\"docs\":{},\"r\":{\"docs\":{},\"i\":{\"docs\":{\"1\":{\"ref\":1,\"tf\":0.045454545454545456}}}}}}}},\"t\":{\"docs\":{},\"i\":{\"docs\":{},\"o\":{\"docs\":{},\"n\":{\"docs\":{\"60\":{\"ref\":60,\"tf\":0.006818181818181818}}}}}},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\"t\":{\"docs\":{\"114\":{\"ref\":114,\"tf\":0.001594896331738437}}}}}},\"e\":{\"docs\":{\"2\":{\"ref\":2,\"tf\":0.025},\"38\":{\"ref\":38,\"tf\":0.011627906976744186},\"39\":{\"ref\":39,\"tf\":0.012658227848101266},\"43\":{\"ref\":43,\"tf\":0.006944444444444444},\"44\":{\"ref\":44,\"tf\":0.018518518518518517},\"45\":{\"ref\":45,\"tf\":0.00980392156862745},\"46\":{\"ref\":46,\"tf\":0.019230769230769232},\"47\":{\"ref\":47,\"tf\":0.01},\"48\":{\"ref\":48,\"tf\":0.011627906976744186},\"54\":{\"ref\":54,\"tf\":0.005148005148005148},\"56\":{\"ref\":56,\"tf\":0.006379585326953748},\"59\":{\"ref\":59,\"tf\":0.008356545961002786},\"60\":{\"ref\":60,\"tf\":0.0022727272727272726},\"72\":{\"ref\":72,\"tf\":0.004662004662004662},\"76\":{\"ref\":76,\"tf\":0.018867924528301886},\"77\":{\"ref\":77,\"tf\":0.018867924528301886},\"81\":{\"ref\":81,\"tf\":0.015151515151515152},\"84\":{\"ref\":84,\"tf\":0.01090909090909091},\"91\":{\"ref\":91,\"tf\":0.0196078431372549},\"92\":{\"ref\":92,\"tf\":0.02857142857142857},\"95\":{\"ref\":95,\"tf\":0.009345794392523364},\"96\":{\"ref\":96,\"tf\":0.017857142857142856},\"104\":{\"ref\":104,\"tf\":0.00423728813559322},\"108\":{\"ref\":108,\"tf\":0.028985507246376812},\"114\":{\"ref\":114,\"tf\":0.001594896331738437},\"129\":{\"ref\":129,\"tf\":0.0052173913043478265},\"133\":{\"ref\":133,\"tf\":0.0016750418760469012},\"134\":{\"ref\":134,\"tf\":0.0023014959723820483},\"135\":{\"ref\":135,\"tf\":0.0019305019305019305},\"136\":{\"ref\":136,\"tf\":0.005050505050505051}},\"n\":{\"docs\":{\"36\":{\"ref\":36,\"tf\":0.017857142857142856},\"135\":{\"ref\":135,\"tf\":0.0019305019305019305}}},\"d\":{\"docs\":{\"63\":{\"ref\":63,\"tf\":2.048780487804878},\"128\":{\"ref\":128,\"tf\":0.05357142857142857},\"133\":{\"ref\":133,\"tf\":0.0016750418760469012}}},\"m\":{\"docs\":{\"134\":{\"ref\":134,\"tf\":0.0023014959723820483},\"135\":{\"ref\":135,\"tf\":0.0019305019305019305}}}},\"t\":{\"docs\":{\"10\":{\"ref\":10,\"tf\":0.023809523809523808},\"16\":{\"ref\":16,\"tf\":0.007352941176470588},\"21\":{\"ref\":21,\"tf\":0.00980392156862745},\"39\":{\"ref\":39,\"tf\":0.02531645569620253},\"41\":{\"ref\":41,\"tf\":0.125},\"42\":{\"ref\":42,\"tf\":0.14285714285714285},\"50\":{\"ref\":50,\"tf\":0.017857142857142856},\"51\":{\"ref\":51,\"tf\":0.05084745762711865},\"52\":{\"ref\":52,\"tf\":0.010416666666666666},\"54\":{\"ref\":54,\"tf\":0.003861003861003861},\"56\":{\"ref\":56,\"tf\":0.007974481658692184},\"60\":{\"ref\":60,\"tf\":0.006818181818181818},\"72\":{\"ref\":72,\"tf\":0.004662004662004662},\"83\":{\"ref\":83,\"tf\":0.02127659574468085},\"95\":{\"ref\":95,\"tf\":0.009345794392523364},\"96\":{\"ref\":96,\"tf\":0.017857142857142856},\"97\":{\"ref\":97,\"tf\":0.019230769230769232},\"99\":{\"ref\":99,\"tf\":0.02127659574468085},\"103\":{\"ref\":103,\"tf\":0.032467532467532464},\"104\":{\"ref\":104,\"tf\":0.00423728813559322},\"105\":{\"ref\":105,\"tf\":0.005847953216374269},\"109\":{\"ref\":109,\"tf\":0.02564102564102564},\"110\":{\"ref\":110,\"tf\":0.01020408163265306},\"112\":{\"ref\":112,\"tf\":0.011764705882352941},\"116\":{\"ref\":116,\"tf\":0.005555555555555556},\"121\":{\"ref\":121,\"tf\":0.011627906976744186},\"123\":{\"ref\":123,\"tf\":0.007042253521126761},\"124\":{\"ref\":124,\"tf\":0.010309278350515464},\"128\":{\"ref\":128,\"tf\":0.017857142857142856},\"129\":{\"ref\":129,\"tf\":0.0017391304347826088},\"130\":{\"ref\":130,\"tf\":0.017543859649122806},\"133\":{\"ref\":133,\"tf\":0.01340033500837521},\"134\":{\"ref\":134,\"tf\":0.0023014959723820483},\"135\":{\"ref\":135,\"tf\":0.007722007722007722}},\"l\":{\"docs\":{},\"a\":{\"docs\":{},\"s\":{\"docs\":{},\"t\":{\"docs\":{},\"a\":{\"docs\":{},\"c\":{\"docs\":{},\"t\":{\"docs\":{},\"i\":{\"docs\":{},\"v\":{\"docs\":{},\"e\":{\"docs\":{},\"i\":{\"docs\":{},\"n\":{\"docs\":{},\"d\":{\"docs\":{},\"e\":{\"docs\":{},\"x\":{\"docs\":{\"54\":{\"ref\":54,\"tf\":0.001287001287001287}}}}}}}}}}}}}}}}},\"u\":{\"docs\":{},\"p\":{\"docs\":{\"84\":{\"ref\":84,\"tf\":0.0036363636363636364},\"129\":{\"ref\":129,\"tf\":0.0034782608695652175}}}},\"/\":{\"docs\":{},\"g\":{\"docs\":{},\"e\":{\"docs\":{},\"t\":{\"docs\":{\"112\":{\"ref\":112,\"tf\":0.011764705882352941}}}}}},\"t\":{\"docs\":{},\"i\":{\"docs\":{},\"t\":{\"docs\":{},\"l\":{\"docs\":{},\"e\":{\"docs\":{},\"(\":{\"docs\":{},\"t\":{\"docs\":{},\"i\":{\"docs\":{},\"t\":{\"docs\":{},\"l\":{\"docs\":{\"112\":{\"ref\":112,\"tf\":0.0058823529411764705}}}}}}}}}}}}},\"v\":{\"docs\":{},\"e\":{\"docs\":{},\"r\":{\"docs\":{\"25\":{\"ref\":25,\"tf\":0.011494252873563218},\"53\":{\"ref\":53,\"tf\":0.041666666666666664}}}}},\"l\":{\"docs\":{},\"e\":{\"docs\":{},\"c\":{\"docs\":{},\"t\":{\"docs\":{\"38\":{\"ref\":38,\"tf\":10.05813953488372},\"54\":{\"ref\":54,\"tf\":0.011583011583011582},\"95\":{\"ref\":95,\"tf\":0.04672897196261682},\"104\":{\"ref\":104,\"tf\":0.00423728813559322},\"118\":{\"ref\":118,\"tf\":0.047619047619047616},\"123\":{\"ref\":123,\"tf\":0.0035211267605633804}},\"(\":{\"docs\":{},\"i\":{\"docs\":{},\"n\":{\"docs\":{},\"d\":{\"docs\":{},\"e\":{\"docs\":{},\"x\":{\"docs\":{\"118\":{\"ref\":118,\"tf\":0.009523809523809525}}}}}}}},\"e\":{\"docs\":{},\"d\":{\"docs\":{},\"i\":{\"docs\":{},\"n\":{\"docs\":{},\"d\":{\"docs\":{},\"e\":{\"docs\":{},\"x\":{\"docs\":{\"118\":{\"ref\":118,\"tf\":0.009523809523809525}}}}}}}}}}}},\"f\":{\"docs\":{\"119\":{\"ref\":119,\"tf\":0.003937007874015748}},\"-\":{\"docs\":{},\"c\":{\"docs\":{},\"o\":{\"docs\":{},\"n\":{\"docs\":{},\"t\":{\"docs\":{},\"a\":{\"docs\":{},\"i\":{\"docs\":{},\"n\":{\"docs\":{\"57\":{\"ref\":57,\"tf\":0.0023584905660377358}}}}}}}}}}}},\"p\":{\"docs\":{},\"a\":{\"docs\":{},\"r\":{\"docs\":{\"54\":{\"ref\":54,\"tf\":0.001287001287001287},\"129\":{\"ref\":129,\"tf\":0.0017391304347826088}}}}},\"r\":{\"docs\":{},\"v\":{\"docs\":{},\"i\":{\"docs\":{},\"c\":{\"docs\":{\"54\":{\"ref\":54,\"tf\":0.001287001287001287},\"71\":{\"ref\":71,\"tf\":0.008},\"84\":{\"ref\":84,\"tf\":0.0036363636363636364},\"105\":{\"ref\":105,\"tf\":0.005847953216374269},\"108\":{\"ref\":108,\"tf\":0.014492753623188406},\"109\":{\"ref\":109,\"tf\":0.008547008547008548},\"114\":{\"ref\":114,\"tf\":0.001594896331738437},\"115\":{\"ref\":115,\"tf\":0.003246753246753247},\"116\":{\"ref\":116,\"tf\":0.005555555555555556},\"117\":{\"ref\":117,\"tf\":0.007575757575757576},\"118\":{\"ref\":118,\"tf\":0.009523809523809525},\"122\":{\"ref\":122,\"tf\":0.16666666666666666},\"124\":{\"ref\":124,\"tf\":3.353951890034364},\"132\":{\"ref\":132,\"tf\":0.01282051282051282},\"135\":{\"ref\":135,\"tf\":0.0019305019305019305}}}},\"e\":{\"docs\":{},\"r\":{\"docs\":{\"56\":{\"ref\":56,\"tf\":0.001594896331738437},\"60\":{\"ref\":60,\"tf\":0.00909090909090909}}}}}},\"n\":{\"docs\":{},\"d\":{\"docs\":{\"134\":{\"ref\":134,\"tf\":0.0011507479861910242},\"135\":{\"ref\":135,\"tf\":0.0019305019305019305}}}}},\"u\":{\"docs\":{},\"b\":{\"docs\":{\"1\":{\"ref\":1,\"tf\":3.3787878787878785}},\"m\":{\"docs\":{},\"i\":{\"docs\":{},\"t\":{\"docs\":{\"26\":{\"ref\":26,\"tf\":0.021739130434782608},\"27\":{\"ref\":27,\"tf\":0.03225806451612903},\"30\":{\"ref\":30,\"tf\":0.02702702702702703},\"31\":{\"ref\":31,\"tf\":0.047619047619047616},\"33\":{\"ref\":33,\"tf\":0.1},\"54\":{\"ref\":54,\"tf\":0.003861003861003861},\"58\":{\"ref\":58,\"tf\":0.00546448087431694}}}}},\"s\":{\"docs\":{},\"t\":{\"docs\":{},\"i\":{\"docs\":{},\"t\":{\"docs\":{},\"u\":{\"docs\":{},\"t\":{\"docs\":{\"56\":{\"ref\":56,\"tf\":0.003189792663476874},\"60\":{\"ref\":60,\"tf\":0.004545454545454545},\"127\":{\"ref\":127,\"tf\":0.006622516556291391}}}}}}},\"c\":{\"docs\":{},\"r\":{\"docs\":{},\"i\":{\"docs\":{},\"b\":{\"docs\":{\"127\":{\"ref\":127,\"tf\":0.006622516556291391}}}}}},\"e\":{\"docs\":{},\"q\":{\"docs\":{},\"u\":{\"docs\":{\"134\":{\"ref\":134,\"tf\":0.0011507479861910242}}}}}},\"f\":{\"docs\":{},\"o\":{\"docs\":{},\"o\":{\"docs\":{},\"t\":{\"docs\":{\"76\":{\"ref\":76,\"tf\":0.018867924528301886}}}}}},\"h\":{\"docs\":{},\"e\":{\"docs\":{},\"a\":{\"docs\":{},\"d\":{\"docs\":{\"77\":{\"ref\":77,\"tf\":0.018867924528301886}}}}}},\"-\":{\"docs\":{},\"t\":{\"docs\":{},\"i\":{\"docs\":{},\"t\":{\"docs\":{},\"l\":{\"docs\":{\"114\":{\"ref\":114,\"tf\":0.006379585326953748}}}}}}},\"t\":{\"docs\":{},\"i\":{\"docs\":{},\"t\":{\"docs\":{},\"l\":{\"docs\":{\"114\":{\"ref\":114,\"tf\":0.007974481658692184}}}}}}},\"c\":{\"docs\":{},\"h\":{\"docs\":{\"3\":{\"ref\":3,\"tf\":0.038461538461538464},\"14\":{\"ref\":14,\"tf\":0.011494252873563218},\"34\":{\"ref\":34,\"tf\":0.016666666666666666},\"35\":{\"ref\":35,\"tf\":0.01818181818181818},\"37\":{\"ref\":37,\"tf\":0.0625},\"67\":{\"ref\":67,\"tf\":0.027777777777777776},\"68\":{\"ref\":68,\"tf\":0.027777777777777776},\"70\":{\"ref\":70,\"tf\":0.023809523809523808},\"80\":{\"ref\":80,\"tf\":0.007692307692307693},\"103\":{\"ref\":103,\"tf\":0.012987012987012988},\"104\":{\"ref\":104,\"tf\":0.01694915254237288},\"105\":{\"ref\":105,\"tf\":0.005847953216374269},\"121\":{\"ref\":121,\"tf\":0.005813953488372093},\"129\":{\"ref\":129,\"tf\":0.0052173913043478265},\"134\":{\"ref\":134,\"tf\":0.0011507479861910242}}},\"c\":{\"docs\":{},\"e\":{\"docs\":{},\"s\":{\"docs\":{},\"s\":{\"docs\":{},\"(\":{\"docs\":{},\"f\":{\"docs\":{},\"u\":{\"docs\":{},\"n\":{\"docs\":{},\"c\":{\"docs\":{},\"t\":{\"docs\":{},\"i\":{\"docs\":{},\"o\":{\"docs\":{},\"n\":{\"docs\":{},\"(\":{\"docs\":{},\"n\":{\"docs\":{},\"e\":{\"docs\":{},\"w\":{\"docs\":{},\"i\":{\"docs\":{},\"t\":{\"docs\":{},\"e\":{\"docs\":{},\"m\":{\"docs\":{\"88\":{\"ref\":88,\"tf\":0.009708737864077669}}}}}}}}}}}}}}}}}}},\"f\":{\"docs\":{},\"u\":{\"docs\":{},\"l\":{\"docs\":{},\"l\":{\"docs\":{},\"i\":{\"docs\":{\"129\":{\"ref\":129,\"tf\":0.0017391304347826088}}}}}}}}}}}},\"p\":{\"docs\":{},\"e\":{\"docs\":{},\"r\":{\"docs\":{\"14\":{\"ref\":14,\"tf\":0.011494252873563218},\"16\":{\"ref\":16,\"tf\":0.007352941176470588},\"83\":{\"ref\":83,\"tf\":0.02127659574468085},\"133\":{\"ref\":133,\"tf\":0.0016750418760469012}}}},\"p\":{\"docs\":{},\"o\":{\"docs\":{},\"r\":{\"docs\":{},\"t\":{\"docs\":{\"14\":{\"ref\":14,\"tf\":0.011494252873563218},\"43\":{\"ref\":43,\"tf\":0.013888888888888888},\"54\":{\"ref\":54,\"tf\":0.002574002574002574},\"56\":{\"ref\":56,\"tf\":0.001594896331738437},\"57\":{\"ref\":57,\"tf\":0.0047169811320754715},\"60\":{\"ref\":60,\"tf\":0.0022727272727272726},\"61\":{\"ref\":61,\"tf\":0.010869565217391304},\"67\":{\"ref\":67,\"tf\":5.083333333333333},\"72\":{\"ref\":72,\"tf\":0.002331002331002331},\"80\":{\"ref\":80,\"tf\":0.007692307692307693},\"90\":{\"ref\":90,\"tf\":0.010416666666666666},\"99\":{\"ref\":99,\"tf\":0.02127659574468085},\"114\":{\"ref\":114,\"tf\":0.001594896331738437},\"135\":{\"ref\":135,\"tf\":0.0019305019305019305},\"136\":{\"ref\":136,\"tf\":3.348484848484848}}}}},\"l\":{\"docs\":{},\"i\":{\"docs\":{\"72\":{\"ref\":72,\"tf\":0.002331002331002331},\"130\":{\"ref\":130,\"tf\":0.0043859649122807015}}}}}},\"r\":{\"docs\":{},\"p\":{\"docs\":{},\"r\":{\"docs\":{},\"i\":{\"docs\":{},\"s\":{\"docs\":{\"43\":{\"ref\":43,\"tf\":0.006944444444444444},\"134\":{\"ref\":134,\"tf\":0.0011507479861910242}}}}}},\"e\":{\"docs\":{\"54\":{\"ref\":54,\"tf\":0.002574002574002574},\"56\":{\"ref\":56,\"tf\":0.014354066985645933},\"57\":{\"ref\":57,\"tf\":0.0023584905660377358},\"58\":{\"ref\":58,\"tf\":0.00273224043715847},\"60\":{\"ref\":60,\"tf\":0.0022727272727272726},\"71\":{\"ref\":71,\"tf\":0.008},\"72\":{\"ref\":72,\"tf\":0.002331002331002331},\"114\":{\"ref\":114,\"tf\":0.004784688995215311},\"127\":{\"ref\":127,\"tf\":0.006622516556291391},\"129\":{\"ref\":129,\"tf\":0.0017391304347826088},\"136\":{\"ref\":136,\"tf\":0.005050505050505051}}},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"u\":{\"docs\":{},\"n\":{\"docs\":{},\"d\":{\"docs\":{\"76\":{\"ref\":76,\"tf\":0.018867924528301886},\"77\":{\"ref\":77,\"tf\":0.018867924528301886},\"104\":{\"ref\":104,\"tf\":0.00423728813559322},\"134\":{\"ref\":134,\"tf\":0.0011507479861910242}}}}}}}},\"d\":{\"docs\":{},\"o\":{\"docs\":{\"56\":{\"ref\":56,\"tf\":0.006379585326953748},\"63\":{\"ref\":63,\"tf\":0.024390243902439025}}}},\"f\":{\"docs\":{},\"f\":{\"docs\":{},\"i\":{\"docs\":{},\"c\":{\"docs\":{\"74\":{\"ref\":74,\"tf\":0.005988023952095809}}}}}},\"g\":{\"docs\":{},\"g\":{\"docs\":{},\"e\":{\"docs\":{},\"s\":{\"docs\":{},\"t\":{\"docs\":{\"127\":{\"ref\":127,\"tf\":0.006622516556291391}}}}}}},\"m\":{\"docs\":{\"134\":{\"ref\":134,\"tf\":0.0011507479861910242}}}},\"p\":{\"docs\":{},\"a\":{\"docs\":{},\"c\":{\"docs\":{},\"e\":{\"docs\":{\"2\":{\"ref\":2,\"tf\":0.025},\"43\":{\"ref\":43,\"tf\":0.006944444444444444},\"44\":{\"ref\":44,\"tf\":2.5185185185185186},\"72\":{\"ref\":72,\"tf\":0.002331002331002331}}}},\"n\":{\"docs\":{},\"/\":{\"docs\":{},\"d\":{\"docs\":{},\"e\":{\"docs\":{},\"f\":{\"docs\":{},\"i\":{\"docs\":{},\"n\":{\"docs\":{\"19\":{\"ref\":19,\"tf\":0.02}}}}}}}}},\"r\":{\"docs\":{},\"k\":{\"docs\":{\"134\":{\"ref\":134,\"tf\":0.0011507479861910242}}}}},\"e\":{\"docs\":{},\"c\":{\"docs\":{},\"t\":{\"docs\":{},\"r\":{\"docs\":{},\"u\":{\"docs\":{},\"m\":{\"docs\":{\"4\":{\"ref\":4,\"tf\":0.022727272727272728}}}}}},\"i\":{\"docs\":{},\"f\":{\"docs\":{\"45\":{\"ref\":45,\"tf\":0.00980392156862745},\"47\":{\"ref\":47,\"tf\":0.01},\"54\":{\"ref\":54,\"tf\":0.001287001287001287},\"56\":{\"ref\":56,\"tf\":0.001594896331738437},\"57\":{\"ref\":57,\"tf\":0.0023584905660377358},\"60\":{\"ref\":60,\"tf\":0.006818181818181818},\"104\":{\"ref\":104,\"tf\":0.00423728813559322},\"109\":{\"ref\":109,\"tf\":0.008547008547008548},\"115\":{\"ref\":115,\"tf\":0.003246753246753247},\"116\":{\"ref\":116,\"tf\":0.005555555555555556},\"117\":{\"ref\":117,\"tf\":0.007575757575757576},\"118\":{\"ref\":118,\"tf\":0.009523809523809525}},\"i\":{\"docs\":{\"44\":{\"ref\":44,\"tf\":0.018518518518518517},\"72\":{\"ref\":72,\"tf\":0.004662004662004662},\"119\":{\"ref\":119,\"tf\":0.003937007874015748},\"129\":{\"ref\":129,\"tf\":0.0017391304347826088}}}}}},\"a\":{\"docs\":{},\"k\":{\"docs\":{\"46\":{\"ref\":46,\"tf\":0.019230769230769232}}}},\"e\":{\"docs\":{},\"d\":{\"docs\":{\"57\":{\"ref\":57,\"tf\":0.0023584905660377358},\"117\":{\"ref\":117,\"tf\":0.015151515151515152}}}},\"n\":{\"docs\":{},\"d\":{\"docs\":{\"57\":{\"ref\":57,\"tf\":0.0023584905660377358}}}}},\"y\":{\"docs\":{\"14\":{\"ref\":14,\"tf\":0.011494252873563218}}},\"u\":{\"docs\":{},\"d\":{\"docs\":{\"18\":{\"ref\":18,\"tf\":0.02}}}},\"o\":{\"docs\":{},\"t\":{\"docs\":{},\"i\":{\"docs\":{},\"f\":{\"docs\":{},\"i\":{\"docs\":{\"21\":{\"ref\":21,\"tf\":0.00980392156862745}}}}}}},\"i\":{\"docs\":{},\"r\":{\"docs\":{},\"i\":{\"docs\":{},\"t\":{\"docs\":{\"57\":{\"ref\":57,\"tf\":0.0023584905660377358},\"135\":{\"ref\":135,\"tf\":0.0019305019305019305}}}}},\"n\":{\"docs\":{\"88\":{\"ref\":88,\"tf\":0.009708737864077669}}}}},\"a\":{\"docs\":{},\"m\":{\"docs\":{},\"e\":{\"docs\":{\"3\":{\"ref\":3,\"tf\":0.019230769230769232},\"21\":{\"ref\":21,\"tf\":0.00980392156862745},\"34\":{\"ref\":34,\"tf\":0.016666666666666666},\"36\":{\"ref\":36,\"tf\":0.017857142857142856},\"45\":{\"ref\":45,\"tf\":0.00980392156862745},\"47\":{\"ref\":47,\"tf\":0.02},\"54\":{\"ref\":54,\"tf\":0.002574002574002574},\"57\":{\"ref\":57,\"tf\":0.0023584905660377358},\"60\":{\"ref\":60,\"tf\":0.004545454545454545},\"68\":{\"ref\":68,\"tf\":0.027777777777777776},\"72\":{\"ref\":72,\"tf\":0.011655011655011656},\"84\":{\"ref\":84,\"tf\":0.01090909090909091},\"106\":{\"ref\":106,\"tf\":0.013333333333333334},\"127\":{\"ref\":127,\"tf\":0.006622516556291391},\"134\":{\"ref\":134,\"tf\":0.006904487917146145},\"135\":{\"ref\":135,\"tf\":0.005791505791505791}}},\"p\":{\"docs\":{},\"l\":{\"docs\":{\"133\":{\"ref\":133,\"tf\":0.0016750418760469012}}}}},\"s\":{\"docs\":{},\"s\":{\"docs\":{\"48\":{\"ref\":48,\"tf\":0.011627906976744186},\"50\":{\"ref\":50,\"tf\":0.017857142857142856},\"64\":{\"ref\":64,\"tf\":0.0625},\"65\":{\"ref\":65,\"tf\":0.05},\"129\":{\"ref\":129,\"tf\":2.557391304347826}},\"]\":{\"docs\":{},\"(\":{\"docs\":{},\"/\":{\"docs\":{},\"t\":{\"docs\":{},\"u\":{\"docs\":{},\"t\":{\"docs\":{},\"o\":{\"docs\":{},\"r\":{\"docs\":{},\"i\":{\"docs\":{},\"a\":{\"docs\":{},\"l\":{\"docs\":{},\"s\":{\"docs\":{},\"/\":{\"docs\":{},\"c\":{\"docs\":{},\"u\":{\"docs\":{},\"s\":{\"docs\":{},\"t\":{\"docs\":{},\"o\":{\"docs\":{},\"m\":{\"docs\":{},\"i\":{\"docs\":{},\"z\":{\"docs\":{},\"i\":{\"docs\":{},\"n\":{\"docs\":{},\"g\":{\"docs\":{},\"-\":{\"docs\":{},\"i\":{\"docs\":{},\"o\":{\"docs\":{},\"n\":{\"docs\":{},\"i\":{\"docs\":{},\"c\":{\"docs\":{},\"-\":{\"docs\":{},\"w\":{\"docs\":{},\"i\":{\"docs\":{},\"t\":{\"docs\":{},\"h\":{\"docs\":{},\"-\":{\"docs\":{},\"s\":{\"docs\":{},\"a\":{\"docs\":{},\"s\":{\"docs\":{},\"s\":{\"docs\":{\"128\":{\"ref\":128,\"tf\":0.017857142857142856}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},\"h\":{\"docs\":{},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"p\":{\"docs\":{},\":\":{\"docs\":{},\"/\":{\"docs\":{},\"/\":{\"docs\":{},\"s\":{\"docs\":{},\"a\":{\"docs\":{},\"s\":{\"docs\":{},\"s\":{\"docs\":{},\"-\":{\"docs\":{},\"l\":{\"docs\":{},\"a\":{\"docs\":{},\"n\":{\"docs\":{},\"g\":{\"docs\":{},\".\":{\"docs\":{},\"c\":{\"docs\":{},\"o\":{\"docs\":{},\"m\":{\"docs\":{\"129\":{\"ref\":129,\"tf\":0.0017391304347826088}},\"/\":{\"docs\":{},\"g\":{\"docs\":{},\"u\":{\"docs\":{},\"i\":{\"docs\":{},\"d\":{\"docs\":{\"129\":{\"ref\":129,\"tf\":0.0017391304347826088}}}}}},\"i\":{\"docs\":{},\"n\":{\"docs\":{},\"s\":{\"docs\":{},\"t\":{\"docs\":{},\"a\":{\"docs\":{},\"l\":{\"docs\":{\"129\":{\"ref\":129,\"tf\":0.0017391304347826088}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},\"i\":{\"docs\":{\"50\":{\"ref\":50,\"tf\":0.008928571428571428}}},\"v\":{\"docs\":{},\"e\":{\"docs\":{\"54\":{\"ref\":54,\"tf\":0.007722007722007722},\"58\":{\"ref\":58,\"tf\":0.00273224043715847},\"114\":{\"ref\":114,\"tf\":0.001594896331738437},\"115\":{\"ref\":115,\"tf\":0.006493506493506494},\"129\":{\"ref\":129,\"tf\":0.0034782608695652175},\"136\":{\"ref\":136,\"tf\":0.005050505050505051}}}},\"f\":{\"docs\":{},\"e\":{\"docs\":{\"56\":{\"ref\":56,\"tf\":0.001594896331738437},\"58\":{\"ref\":58,\"tf\":0.00273224043715847},\"133\":{\"ref\":133,\"tf\":0.0016750418760469012}}},\"a\":{\"docs\":{},\"r\":{\"docs\":{},\"i\":{\"docs\":{\"57\":{\"ref\":57,\"tf\":0.0023584905660377358},\"60\":{\"ref\":60,\"tf\":0.015909090909090907}}}}}},\"k\":{\"docs\":{},\"e\":{\"docs\":{\"59\":{\"ref\":59,\"tf\":0.002785515320334262},\"72\":{\"ref\":72,\"tf\":0.002331002331002331}}}},\"n\":{\"docs\":{},\"s\":{\"docs\":{},\"-\":{\"docs\":{},\"s\":{\"docs\":{},\"e\":{\"docs\":{},\"r\":{\"docs\":{},\"i\":{\"docs\":{},\"f\":{\"docs\":{\"133\":{\"ref\":133,\"tf\":0.0016750418760469012}}}}}}}}}}},\"i\":{\"docs\":{},\"d\":{\"docs\":{},\"e\":{\"docs\":{\"3\":{\"ref\":3,\"tf\":0.057692307692307696},\"16\":{\"ref\":16,\"tf\":0.029411764705882353},\"19\":{\"ref\":19,\"tf\":0.02},\"34\":{\"ref\":34,\"tf\":0.016666666666666666},\"35\":{\"ref\":35,\"tf\":0.01818181818181818},\"52\":{\"ref\":52,\"tf\":0.010416666666666666},\"54\":{\"ref\":54,\"tf\":0.005148005148005148},\"59\":{\"ref\":59,\"tf\":0.019498607242339833},\"60\":{\"ref\":60,\"tf\":0.0022727272727272726},\"83\":{\"ref\":83,\"tf\":0.06382978723404255},\"86\":{\"ref\":86,\"tf\":0.06666666666666667},\"91\":{\"ref\":91,\"tf\":0.13725490196078433},\"92\":{\"ref\":92,\"tf\":0.02857142857142857},\"93\":{\"ref\":93,\"tf\":0.11267605633802817},\"100\":{\"ref\":100,\"tf\":0.08333333333333333},\"101\":{\"ref\":101,\"tf\":0.13043478260869565},\"102\":{\"ref\":102,\"tf\":0.020833333333333332},\"116\":{\"ref\":116,\"tf\":0.03333333333333333},\"123\":{\"ref\":123,\"tf\":0.03169014084507042},\"130\":{\"ref\":130,\"tf\":0.021929824561403508}},\"=\":{\"docs\":{},\"\\\"\":{\"docs\":{},\"l\":{\"docs\":{},\"e\":{\"docs\":{},\"f\":{\"docs\":{},\"t\":{\"docs\":{\"59\":{\"ref\":59,\"tf\":0.002785515320334262}}}}}}}},\"m\":{\"docs\":{},\"e\":{\"docs\":{},\"n\":{\"docs\":{},\"u\":{\"docs\":{\"102\":{\"ref\":102,\"tf\":0.020833333333333332},\"123\":{\"ref\":123,\"tf\":0.0035211267605633804},\"127\":{\"ref\":127,\"tf\":0.006622516556291391}}}}}}}},\"z\":{\"docs\":{},\"e\":{\"docs\":{\"7\":{\"ref\":7,\"tf\":5},\"21\":{\"ref\":21,\"tf\":0.00980392156862745},\"44\":{\"ref\":44,\"tf\":0.018518518518518517},\"45\":{\"ref\":45,\"tf\":2.5294117647058822},\"72\":{\"ref\":72,\"tf\":0.002331002331002331},\"115\":{\"ref\":115,\"tf\":0.003246753246753247},\"129\":{\"ref\":129,\"tf\":0.0017391304347826088},\"135\":{\"ref\":135,\"tf\":0.003861003861003861}}}},\"m\":{\"docs\":{},\"p\":{\"docs\":{},\"l\":{\"docs\":{\"14\":{\"ref\":14,\"tf\":0.011494252873563218},\"54\":{\"ref\":54,\"tf\":0.002574002574002574},\"57\":{\"ref\":57,\"tf\":0.0023584905660377358},\"59\":{\"ref\":59,\"tf\":0.005571030640668524},\"72\":{\"ref\":72,\"tf\":0.002331002331002331},\"84\":{\"ref\":84,\"tf\":0.0036363636363636364},\"86\":{\"ref\":86,\"tf\":0.06666666666666667},\"114\":{\"ref\":114,\"tf\":0.004784688995215311},\"123\":{\"ref\":123,\"tf\":0.0035211267605633804},\"127\":{\"ref\":127,\"tf\":0.006622516556291391},\"130\":{\"ref\":130,\"tf\":0.013157894736842105},\"132\":{\"ref\":132,\"tf\":0.01282051282051282},\"134\":{\"ref\":134,\"tf\":0.0023014959723820483},\"135\":{\"ref\":135,\"tf\":0.013513513513513514}},\"i\":{\"docs\":{\"12\":{\"ref\":12,\"tf\":0.05},\"32\":{\"ref\":32,\"tf\":0.04},\"43\":{\"ref\":43,\"tf\":0.006944444444444444},\"50\":{\"ref\":50,\"tf\":0.008928571428571428},\"51\":{\"ref\":51,\"tf\":0.01694915254237288},\"56\":{\"ref\":56,\"tf\":0.001594896331738437},\"60\":{\"ref\":60,\"tf\":0.0022727272727272726},\"61\":{\"ref\":61,\"tf\":0.010869565217391304},\"82\":{\"ref\":82,\"tf\":0.0078125},\"129\":{\"ref\":129,\"tf\":0.0017391304347826088},\"134\":{\"ref\":134,\"tf\":0.0011507479861910242}},\"f\":{\"docs\":{},\"i\":{\"docs\":{\"61\":{\"ref\":61,\"tf\":0.010869565217391304},\"129\":{\"ref\":129,\"tf\":0.0017391304347826088}}}},\"c\":{\"docs\":{\"65\":{\"ref\":65,\"tf\":0.025}}}},\"e\":{\"docs\":{},\"h\":{\"docs\":{},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"p\":{\"docs\":{},\"s\":{\"docs\":{},\"e\":{\"docs\":{},\"r\":{\"docs\":{},\"v\":{\"docs\":{\"60\":{\"ref\":60,\"tf\":0.004545454545454545}}}}}}}}}}}}},\"i\":{\"docs\":{},\"l\":{\"docs\":{},\"a\":{\"docs\":{},\"r\":{\"docs\":{\"20\":{\"ref\":20,\"tf\":0.02040816326530612},\"57\":{\"ref\":57,\"tf\":0.0023584905660377358},\"65\":{\"ref\":65,\"tf\":0.025},\"82\":{\"ref\":82,\"tf\":0.0078125}},\"l\":{\"docs\":{},\"i\":{\"docs\":{\"22\":{\"ref\":22,\"tf\":0.024390243902439025},\"36\":{\"ref\":36,\"tf\":0.017857142857142856}}}}}}}},\"u\":{\"docs\":{},\"l\":{\"docs\":{\"27\":{\"ref\":27,\"tf\":0.03225806451612903},\"48\":{\"ref\":48,\"tf\":0.011627906976744186},\"60\":{\"ref\":60,\"tf\":0.011363636363636364}}}}},\"a\":{\"docs\":{},\"m\":{\"docs\":{},\"e\":{\"docs\":{},\"s\":{\"docs\":{\"19\":{\"ref\":19,\"tf\":0.02}}}}}},\"g\":{\"docs\":{},\"n\":{\"docs\":{\"28\":{\"ref\":28,\"tf\":0.038461538461538464},\"58\":{\"ref\":58,\"tf\":0.01366120218579235},\"60\":{\"ref\":60,\"tf\":0.0022727272727272726}},\"i\":{\"docs\":{},\"n\":{\"docs\":{},\"g\":{\"docs\":{},\"]\":{\"docs\":{},\"(\":{\"docs\":{},\"h\":{\"docs\":{},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"p\":{\"docs\":{},\":\":{\"docs\":{},\"/\":{\"docs\":{},\"/\":{\"docs\":{},\"d\":{\"docs\":{},\"e\":{\"docs\":{},\"v\":{\"docs\":{},\"e\":{\"docs\":{},\"l\":{\"docs\":{},\"o\":{\"docs\":{},\"p\":{\"docs\":{},\"e\":{\"docs\":{},\"r\":{\"docs\":{},\".\":{\"docs\":{},\"a\":{\"docs\":{},\"n\":{\"docs\":{},\"d\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"i\":{\"docs\":{},\"d\":{\"docs\":{},\".\":{\"docs\":{},\"c\":{\"docs\":{},\"o\":{\"docs\":{},\"m\":{\"docs\":{},\"/\":{\"docs\":{},\"t\":{\"docs\":{},\"o\":{\"docs\":{},\"o\":{\"docs\":{},\"l\":{\"docs\":{},\"s\":{\"docs\":{},\"/\":{\"docs\":{},\"p\":{\"docs\":{},\"u\":{\"docs\":{},\"b\":{\"docs\":{},\"l\":{\"docs\":{},\"i\":{\"docs\":{},\"s\":{\"docs\":{},\"h\":{\"docs\":{},\"i\":{\"docs\":{},\"n\":{\"docs\":{},\"g\":{\"docs\":{},\"/\":{\"docs\":{},\"a\":{\"docs\":{},\"p\":{\"docs\":{},\"p\":{\"docs\":{},\"-\":{\"docs\":{},\"s\":{\"docs\":{},\"i\":{\"docs\":{},\"g\":{\"docs\":{},\"n\":{\"docs\":{},\"i\":{\"docs\":{},\"n\":{\"docs\":{},\"g\":{\"docs\":{},\".\":{\"docs\":{},\"h\":{\"docs\":{},\"t\":{\"docs\":{},\"m\":{\"docs\":{},\"l\":{\"docs\":{\"58\":{\"ref\":58,\"tf\":0.00273224043715847}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},\"a\":{\"docs\":{},\"l\":{\"docs\":{},\"g\":{\"docs\":{\"58\":{\"ref\":58,\"tf\":0.00273224043715847}}}}}},\"l\":{\"docs\":{},\"v\":{\"docs\":{},\"e\":{\"docs\":{},\"r\":{\"docs\":{},\"l\":{\"docs\":{},\"i\":{\"docs\":{},\"g\":{\"docs\":{},\"h\":{\"docs\":{},\"t\":{\"docs\":{\"34\":{\"ref\":34,\"tf\":0.016666666666666666}}}}}}}}}}},\"n\":{\"docs\":{},\"g\":{\"docs\":{},\"l\":{\"docs\":{\"54\":{\"ref\":54,\"tf\":0.001287001287001287},\"72\":{\"ref\":72,\"tf\":0.002331002331002331},\"134\":{\"ref\":134,\"tf\":0.0011507479861910242}}}}},\"t\":{\"docs\":{\"130\":{\"ref\":130,\"tf\":0.0043859649122807015}},\"e\":{\"docs\":{\"60\":{\"ref\":60,\"tf\":0.0022727272727272726}},\".\":{\"docs\":{},\"l\":{\"docs\":{},\"a\":{\"docs\":{},\"t\":{\"docs\":{},\"e\":{\"docs\":{},\"s\":{\"docs\":{},\"t\":{\"docs\":{},\"_\":{\"docs\":{},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\"l\":{\"docs\":{},\"e\":{\"docs\":{},\"a\":{\"docs\":{},\"s\":{\"docs\":{},\"e\":{\"docs\":{},\"_\":{\"docs\":{},\"d\":{\"docs\":{\"62\":{\"ref\":62,\"tf\":0.041666666666666664}}}}}}}}}}},\"v\":{\"docs\":{},\"e\":{\"docs\":{},\"r\":{\"docs\":{},\"s\":{\"docs\":{\"62\":{\"ref\":62,\"tf\":0.08333333333333333},\"67\":{\"ref\":67,\"tf\":0.027777777777777776}}}}}}}}}}}}},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\"c\":{\"docs\":{},\"o\":{\"docs\":{},\"m\":{\"docs\":{},\"m\":{\"docs\":{},\"e\":{\"docs\":{},\"n\":{\"docs\":{},\"d\":{\"docs\":{},\"e\":{\"docs\":{},\"d\":{\"docs\":{},\"_\":{\"docs\":{},\"c\":{\"docs\":{},\"o\":{\"docs\":{},\"r\":{\"docs\":{},\"d\":{\"docs\":{},\"o\":{\"docs\":{},\"v\":{\"docs\":{},\"a\":{\"docs\":{},\"_\":{\"docs\":{},\"v\":{\"docs\":{},\"e\":{\"docs\":{},\"r\":{\"docs\":{},\"s\":{\"docs\":{\"132\":{\"ref\":132,\"tf\":0.01282051282051282}}}}}}}}}}}}}}}}}}}}}}}}}}}}},\"b\":{\"docs\":{},\"l\":{\"docs\":{\"91\":{\"ref\":91,\"tf\":0.0196078431372549},\"92\":{\"ref\":92,\"tf\":0.02857142857142857},\"123\":{\"ref\":123,\"tf\":0.007042253521126761}}}}},\"t\":{\"docs\":{},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\"t\":{\"docs\":{},\"c\":{\"docs\":{},\"h\":{\"docs\":{\"6\":{\"ref\":6,\"tf\":0.023809523809523808},\"72\":{\"ref\":72,\"tf\":0.002331002331002331}}}}},\"a\":{\"docs\":{},\"m\":{\"docs\":{\"18\":{\"ref\":18,\"tf\":0.02},\"135\":{\"ref\":135,\"tf\":0.0019305019305019305}}}}},\"u\":{\"docs\":{},\"c\":{\"docs\":{},\"t\":{\"docs\":{},\"u\":{\"docs\":{},\"r\":{\"docs\":{\"43\":{\"ref\":43,\"tf\":0.006944444444444444},\"44\":{\"ref\":44,\"tf\":0.018518518518518517},\"45\":{\"ref\":45,\"tf\":0.00980392156862745},\"46\":{\"ref\":46,\"tf\":0.019230769230769232},\"47\":{\"ref\":47,\"tf\":0.01},\"48\":{\"ref\":48,\"tf\":0.011627906976744186},\"56\":{\"ref\":56,\"tf\":0.001594896331738437},\"57\":{\"ref\":57,\"tf\":0.0023584905660377358},\"129\":{\"ref\":129,\"tf\":0.0034782608695652175}}}}}}},\"a\":{\"docs\":{},\"i\":{\"docs\":{},\"g\":{\"docs\":{},\"h\":{\"docs\":{},\"t\":{\"docs\":{},\"-\":{\"docs\":{},\"t\":{\"docs\":{},\"o\":{\"docs\":{},\"-\":{\"docs\":{},\"t\":{\"docs\":{},\"h\":{\"docs\":{\"54\":{\"ref\":54,\"tf\":0.001287001287001287}}}}}}}},\"f\":{\"docs\":{},\"o\":{\"docs\":{},\"r\":{\"docs\":{},\"w\":{\"docs\":{},\"a\":{\"docs\":{},\"r\":{\"docs\":{},\"d\":{\"docs\":{\"57\":{\"ref\":57,\"tf\":0.0023584905660377358}}}}}}}}}}}}}},\"o\":{\"docs\":{},\"n\":{\"docs\":{},\"g\":{\"docs\":{\"57\":{\"ref\":57,\"tf\":0.0023584905660377358}},\"l\":{\"docs\":{},\"i\":{\"docs\":{\"57\":{\"ref\":57,\"tf\":0.0047169811320754715}}}}}}},\"i\":{\"docs\":{},\"n\":{\"docs\":{},\"g\":{\"docs\":{\"71\":{\"ref\":71,\"tf\":0.008},\"74\":{\"ref\":74,\"tf\":0.011976047904191617},\"76\":{\"ref\":76,\"tf\":0.018867924528301886},\"77\":{\"ref\":77,\"tf\":0.018867924528301886},\"78\":{\"ref\":78,\"tf\":0.02247191011235955},\"80\":{\"ref\":80,\"tf\":0.007692307692307693},\"82\":{\"ref\":82,\"tf\":0.015625},\"83\":{\"ref\":83,\"tf\":0.02127659574468085},\"84\":{\"ref\":84,\"tf\":0.0036363636363636364},\"88\":{\"ref\":88,\"tf\":0.038834951456310676},\"90\":{\"ref\":90,\"tf\":0.020833333333333332},\"91\":{\"ref\":91,\"tf\":0.0196078431372549},\"93\":{\"ref\":93,\"tf\":0.014084507042253521},\"94\":{\"ref\":94,\"tf\":0.011111111111111112},\"95\":{\"ref\":95,\"tf\":0.04672897196261682},\"96\":{\"ref\":96,\"tf\":0.017857142857142856},\"97\":{\"ref\":97,\"tf\":0.019230769230769232},\"98\":{\"ref\":98,\"tf\":0.018867924528301886},\"105\":{\"ref\":105,\"tf\":0.017543859649122806},\"108\":{\"ref\":108,\"tf\":0.028985507246376812},\"109\":{\"ref\":109,\"tf\":0.008547008547008548},\"110\":{\"ref\":110,\"tf\":0.02040816326530612},\"111\":{\"ref\":111,\"tf\":0.022556390977443608},\"112\":{\"ref\":112,\"tf\":0.041176470588235294},\"114\":{\"ref\":114,\"tf\":0.044657097288676235},\"115\":{\"ref\":115,\"tf\":0.006493506493506494},\"116\":{\"ref\":116,\"tf\":0.005555555555555556},\"117\":{\"ref\":117,\"tf\":0.007575757575757576},\"118\":{\"ref\":118,\"tf\":0.009523809523809525},\"119\":{\"ref\":119,\"tf\":0.011811023622047244},\"120\":{\"ref\":120,\"tf\":0.031446540880503145},\"121\":{\"ref\":121,\"tf\":0.01744186046511628}}}}}},\"y\":{\"docs\":{},\"l\":{\"docs\":{},\"e\":{\"docs\":{\"6\":{\"ref\":6,\"tf\":0.023809523809523808},\"8\":{\"ref\":8,\"tf\":0.05405405405405406},\"9\":{\"ref\":9,\"tf\":0.02702702702702703},\"11\":{\"ref\":11,\"tf\":0.13636363636363635},\"19\":{\"ref\":19,\"tf\":0.02},\"25\":{\"ref\":25,\"tf\":0.022988505747126436},\"35\":{\"ref\":35,\"tf\":0.01818181818181818},\"38\":{\"ref\":38,\"tf\":0.023255813953488372},\"39\":{\"ref\":39,\"tf\":0.012658227848101266},\"49\":{\"ref\":49,\"tf\":0.08333333333333333},\"72\":{\"ref\":72,\"tf\":0.002331002331002331},\"73\":{\"ref\":73,\"tf\":0.05},\"87\":{\"ref\":87,\"tf\":0.041666666666666664},\"95\":{\"ref\":95,\"tf\":0.009345794392523364},\"123\":{\"ref\":123,\"tf\":0.007042253521126761},\"129\":{\"ref\":129,\"tf\":0.0052173913043478265},\"133\":{\"ref\":133,\"tf\":0.0016750418760469012},\"134\":{\"ref\":134,\"tf\":0.0034522439585730723}},\"s\":{\"docs\":{},\"h\":{\"docs\":{},\"e\":{\"docs\":{},\"e\":{\"docs\":{},\"t\":{\"docs\":{\"129\":{\"ref\":129,\"tf\":0.0034782608695652175}}}}}}}}}},\"a\":{\"docs\":{},\"n\":{\"docs\":{},\"d\":{\"docs\":{\"9\":{\"ref\":9,\"tf\":0.02702702702702703},\"65\":{\"ref\":65,\"tf\":0.025},\"134\":{\"ref\":134,\"tf\":0.0011507479861910242}},\"a\":{\"docs\":{},\"r\":{\"docs\":{},\"d\":{\"docs\":{\"36\":{\"ref\":36,\"tf\":0.017857142857142856},\"39\":{\"ref\":39,\"tf\":0.012658227848101266},\"43\":{\"ref\":43,\"tf\":0.006944444444444444},\"59\":{\"ref\":59,\"tf\":0.002785515320334262},\"133\":{\"ref\":133,\"tf\":0.0016750418760469012},\"134\":{\"ref\":134,\"tf\":0.0011507479861910242},\"135\":{\"ref\":135,\"tf\":0.005791505791505791}}}}}}},\"r\":{\"docs\":{},\"t\":{\"docs\":{\"24\":{\"ref\":24,\"tf\":0.08333333333333333},\"50\":{\"ref\":50,\"tf\":0.008928571428571428},\"52\":{\"ref\":52,\"tf\":0.010416666666666666},\"54\":{\"ref\":54,\"tf\":0.002574002574002574},\"55\":{\"ref\":55,\"tf\":0.02040816326530612},\"56\":{\"ref\":56,\"tf\":0.009569377990430622},\"57\":{\"ref\":57,\"tf\":0.01179245283018868},\"58\":{\"ref\":58,\"tf\":0.00273224043715847},\"59\":{\"ref\":59,\"tf\":0.008356545961002786},\"60\":{\"ref\":60,\"tf\":0.006818181818181818},\"62\":{\"ref\":62,\"tf\":0.041666666666666664},\"63\":{\"ref\":63,\"tf\":0.04878048780487805},\"84\":{\"ref\":84,\"tf\":0.0036363636363636364},\"88\":{\"ref\":88,\"tf\":0.009708737864077669},\"106\":{\"ref\":106,\"tf\":0.013333333333333334},\"115\":{\"ref\":115,\"tf\":0.006493506493506494},\"126\":{\"ref\":126,\"tf\":0.011111111111111112},\"127\":{\"ref\":127,\"tf\":3.386313465783664},\"128\":{\"ref\":128,\"tf\":0.03571428571428571},\"129\":{\"ref\":129,\"tf\":0.008695652173913044},\"130\":{\"ref\":130,\"tf\":0.0043859649122807015},\"133\":{\"ref\":133,\"tf\":0.008375209380234505},\"135\":{\"ref\":135,\"tf\":0.005791505791505791}},\"a\":{\"docs\":{},\"p\":{\"docs\":{},\"p\":{\"docs\":{\"133\":{\"ref\":133,\"tf\":0.008375209380234505}}}}},\"u\":{\"docs\":{},\"p\":{\"docs\":{\"135\":{\"ref\":135,\"tf\":0.0019305019305019305}}}}}},\"c\":{\"docs\":{},\"k\":{\"docs\":{\"29\":{\"ref\":29,\"tf\":2.551282051282051},\"48\":{\"ref\":48,\"tf\":0.011627906976744186},\"57\":{\"ref\":57,\"tf\":0.0023584905660377358},\"81\":{\"ref\":81,\"tf\":0.015151515151515152},\"84\":{\"ref\":84,\"tf\":0.0036363636363636364},\"129\":{\"ref\":129,\"tf\":0.0017391304347826088},\"136\":{\"ref\":136,\"tf\":0.005050505050505051}}}},\"t\":{\"docs\":{},\"e\":{\"docs\":{\"43\":{\"ref\":43,\"tf\":0.006944444444444444},\"45\":{\"ref\":45,\"tf\":0.0196078431372549},\"65\":{\"ref\":65,\"tf\":0.025},\"82\":{\"ref\":82,\"tf\":0.0078125},\"84\":{\"ref\":84,\"tf\":0.04363636363636364},\"123\":{\"ref\":123,\"tf\":0.0035211267605633804}},\"(\":{\"docs\":{},\"'\":{\"docs\":{},\"i\":{\"docs\":{},\"n\":{\"docs\":{},\"d\":{\"docs\":{},\"e\":{\"docs\":{},\"x\":{\"docs\":{\"84\":{\"ref\":84,\"tf\":0.0036363636363636364}}}}}}},\"m\":{\"docs\":{},\"u\":{\"docs\":{},\"s\":{\"docs\":{\"84\":{\"ref\":84,\"tf\":0.0036363636363636364}}}}}}},\"p\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"v\":{\"docs\":{},\"i\":{\"docs\":{},\"d\":{\"docs\":{\"84\":{\"ref\":84,\"tf\":0.007272727272727273}}}}}}}}},\"u\":{\"docs\":{\"121\":{\"ref\":121,\"tf\":0.01744186046511628},\"128\":{\"ref\":128,\"tf\":0.017857142857142856},\"130\":{\"ref\":130,\"tf\":0.021929824561403508},\"132\":{\"ref\":132,\"tf\":2.5256410256410255}},\"s\":{\"docs\":{},\"b\":{\"docs\":{},\"a\":{\"docs\":{},\"r\":{\"docs\":{\"132\":{\"ref\":132,\"tf\":0.01282051282051282}},\".\":{\"docs\":{},\"h\":{\"docs\":{},\"i\":{\"docs\":{},\"d\":{\"docs\":{\"132\":{\"ref\":132,\"tf\":0.01282051282051282}}}}}}}}}}}},\"b\":{\"docs\":{},\"l\":{\"docs\":{\"50\":{\"ref\":50,\"tf\":0.008928571428571428},\"129\":{\"ref\":129,\"tf\":0.0034782608695652175}}}},\"i\":{\"docs\":{\"50\":{\"ref\":50,\"tf\":0.008928571428571428}}}},\"o\":{\"docs\":{},\"p\":{\"docs\":{\"28\":{\"ref\":28,\"tf\":0.038461538461538464},\"78\":{\"ref\":78,\"tf\":0.011235955056179775},\"88\":{\"ref\":88,\"tf\":0.009708737864077669},\"104\":{\"ref\":104,\"tf\":0.00423728813559322},\"114\":{\"ref\":114,\"tf\":0.001594896331738437},\"115\":{\"ref\":115,\"tf\":0.003246753246753247},\"117\":{\"ref\":117,\"tf\":0.015151515151515152},\"129\":{\"ref\":129,\"tf\":0.0017391304347826088},\"134\":{\"ref\":134,\"tf\":0.0023014959723820483}}},\"r\":{\"docs\":{},\"a\":{\"docs\":{},\"g\":{\"docs\":{\"54\":{\"ref\":54,\"tf\":0.001287001287001287},\"133\":{\"ref\":133,\"tf\":0.0033500837520938024}}}},\"e\":{\"docs\":{\"55\":{\"ref\":55,\"tf\":0.02040816326530612},\"58\":{\"ref\":58,\"tf\":0.02459016393442623},\"129\":{\"ref\":129,\"tf\":0.0034782608695652175}}}}},\"i\":{\"docs\":{},\"l\":{\"docs\":{},\"l\":{\"docs\":{\"38\":{\"ref\":38,\"tf\":0.011627906976744186},\"39\":{\"ref\":39,\"tf\":0.012658227848101266},\"45\":{\"ref\":45,\"tf\":0.00980392156862745},\"57\":{\"ref\":57,\"tf\":0.0023584905660377358},\"59\":{\"ref\":59,\"tf\":0.002785515320334262},\"60\":{\"ref\":60,\"tf\":0.0022727272727272726},\"61\":{\"ref\":61,\"tf\":0.010869565217391304},\"104\":{\"ref\":104,\"tf\":0.00847457627118644},\"129\":{\"ref\":129,\"tf\":0.0017391304347826088},\"134\":{\"ref\":134,\"tf\":0.00805523590333717},\"135\":{\"ref\":135,\"tf\":0.0019305019305019305}}}},\"c\":{\"docs\":{},\"k\":{\"docs\":{\"129\":{\"ref\":129,\"tf\":0.0017391304347826088}}}}},\"e\":{\"docs\":{},\"p\":{\"docs\":{\"58\":{\"ref\":58,\"tf\":0.00273224043715847},\"106\":{\"ref\":106,\"tf\":0.013333333333333334},\"127\":{\"ref\":127,\"tf\":0.006622516556291391},\"133\":{\"ref\":133,\"tf\":0.0016750418760469012}},\"s\":{\"docs\":{},\":\":{\"docs\":{},\"<\":{\"docs\":{},\"/\":{\"docs\":{},\"h\":{\"5\":{\"docs\":{\"133\":{\"ref\":133,\"tf\":0.0016750418760469012}}},\"docs\":{}}}}}}}},\"u\":{\"docs\":{},\"f\":{\"docs\":{},\"f\":{\"docs\":{\"134\":{\"ref\":134,\"tf\":0.0011507479861910242},\"135\":{\"ref\":135,\"tf\":0.0019305019305019305}}}}}},\"m\":{\"docs\":{},\"a\":{\"docs\":{},\"l\":{\"docs\":{},\"l\":{\"docs\":{\"7\":{\"ref\":7,\"tf\":0.08},\"16\":{\"ref\":16,\"tf\":0.007352941176470588},\"48\":{\"ref\":48,\"tf\":0.011627906976744186},\"54\":{\"ref\":54,\"tf\":0.001287001287001287},\"57\":{\"ref\":57,\"tf\":0.0023584905660377358},\"58\":{\"ref\":58,\"tf\":0.00273224043715847},\"60\":{\"ref\":60,\"tf\":0.0022727272727272726},\"115\":{\"ref\":115,\"tf\":0.003246753246753247},\"129\":{\"ref\":129,\"tf\":0.0017391304347826088}},\"e\":{\"docs\":{},\"r\":{\"docs\":{\"7\":{\"ref\":7,\"tf\":0.04},\"18\":{\"ref\":18,\"tf\":0.02},\"48\":{\"ref\":48,\"tf\":0.03488372093023256}}},\"s\":{\"docs\":{},\"t\":{\"docs\":{\"90\":{\"ref\":90,\"tf\":0.010416666666666666}}}}}}},\"s\":{\"docs\":{},\"h\":{\"docs\":{\"19\":{\"ref\":19,\"tf\":0.02}}}},\"r\":{\"docs\":{},\"t\":{\"docs\":{},\"p\":{\"docs\":{},\"h\":{\"docs\":{},\"o\":{\"docs\":{},\"n\":{\"docs\":{\"57\":{\"ref\":57,\"tf\":0.0023584905660377358}}}}}}}}},\"o\":{\"docs\":{},\"o\":{\"docs\":{},\"t\":{\"docs\":{},\"h\":{\"docs\":{\"60\":{\"ref\":60,\"tf\":0.0022727272727272726}}}}}}},\"w\":{\"docs\":{},\"i\":{\"docs\":{},\"p\":{\"docs\":{},\"e\":{\"docs\":{\"14\":{\"ref\":14,\"tf\":0.011494252873563218},\"21\":{\"ref\":21,\"tf\":0.00980392156862745},\"80\":{\"ref\":80,\"tf\":0.023076923076923078},\"94\":{\"ref\":94,\"tf\":0.011111111111111112},\"109\":{\"ref\":109,\"tf\":0.02564102564102564},\"120\":{\"ref\":120,\"tf\":0.006289308176100629},\"123\":{\"ref\":123,\"tf\":0.007042253521126761},\"133\":{\"ref\":133,\"tf\":0.0033500837520938024},\"134\":{\"ref\":134,\"tf\":0.0011507479861910242}},\"d\":{\"docs\":{},\"o\":{\"docs\":{},\"w\":{\"docs\":{},\"n\":{\"docs\":{\"120\":{\"ref\":120,\"tf\":0.006289308176100629}}}}}},\"l\":{\"docs\":{},\"e\":{\"docs\":{},\"f\":{\"docs\":{},\"t\":{\"docs\":{\"120\":{\"ref\":120,\"tf\":0.006289308176100629},\"134\":{\"ref\":134,\"tf\":0.0011507479861910242}}}}}},\"r\":{\"docs\":{},\"i\":{\"docs\":{},\"g\":{\"docs\":{},\"h\":{\"docs\":{},\"t\":{\"docs\":{\"120\":{\"ref\":120,\"tf\":0.006289308176100629},\"134\":{\"ref\":134,\"tf\":0.0011507479861910242}}}}}}},\"u\":{\"docs\":{},\"p\":{\"docs\":{\"120\":{\"ref\":120,\"tf\":0.006289308176100629}}}}}},\"t\":{\"docs\":{},\"c\":{\"docs\":{},\"h\":{\"docs\":{\"60\":{\"ref\":60,\"tf\":0.0022727272727272726},\"95\":{\"ref\":95,\"tf\":0.009345794392523364},\"97\":{\"ref\":97,\"tf\":0.019230769230769232},\"115\":{\"ref\":115,\"tf\":0.003246753246753247},\"123\":{\"ref\":123,\"tf\":0.0035211267605633804},\"133\":{\"ref\":133,\"tf\":0.0016750418760469012}},\"'\":{\"docs\":{\"97\":{\"ref\":97,\"tf\":0.019230769230769232}}}}}},\"m\":{\"docs\":{},\"m\":{\"docs\":{},\"i\":{\"docs\":{},\"n\":{\"docs\":{},\"g\":{\"docs\":{},\"l\":{\"docs\":{},\"i\":{\"docs\":{\"129\":{\"ref\":129,\"tf\":0.0017391304347826088}}}}}}}}}},\"a\":{\"docs\":{},\"t\":{\"docs\":{},\"c\":{\"docs\":{},\"h\":{\"docs\":{\"50\":{\"ref\":50,\"tf\":0.008928571428571428}}}}}}},\"k\":{\"docs\":{},\"i\":{\"docs\":{},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"l\":{\"docs\":{\"15\":{\"ref\":15,\"tf\":0.022727272727272728}}}}},\"p\":{\"docs\":{\"58\":{\"ref\":58,\"tf\":0.00273224043715847},\"133\":{\"ref\":133,\"tf\":0.005025125628140704}}}},\"u\":{\"docs\":{},\"l\":{\"docs\":{},\"l\":{\"docs\":{\"20\":{\"ref\":20,\"tf\":0.02040816326530612}}}}}},\"n\":{\"docs\":{},\"i\":{\"docs\":{},\"c\":{\"docs\":{},\"k\":{\"docs\":{},\"e\":{\"docs\":{},\"r\":{\"docs\":{\"15\":{\"ref\":15,\"tf\":0.022727272727272728}}}}}}}},\"h\":{\"docs\":{},\"o\":{\"docs\":{},\"p\":{\"docs\":{\"16\":{\"ref\":16,\"tf\":0.007352941176470588}}},\"w\":{\"docs\":{\"20\":{\"ref\":20,\"tf\":0.02040816326530612},\"36\":{\"ref\":36,\"tf\":0.017857142857142856},\"39\":{\"ref\":39,\"tf\":0.012658227848101266},\"47\":{\"ref\":47,\"tf\":0.01},\"51\":{\"ref\":51,\"tf\":0.01694915254237288},\"54\":{\"ref\":54,\"tf\":0.002574002574002574},\"71\":{\"ref\":71,\"tf\":0.024},\"74\":{\"ref\":74,\"tf\":0.011976047904191617},\"75\":{\"ref\":75,\"tf\":0.08333333333333333},\"78\":{\"ref\":78,\"tf\":0.011235955056179775},\"81\":{\"ref\":81,\"tf\":0.015151515151515152},\"90\":{\"ref\":90,\"tf\":0.020833333333333332},\"99\":{\"ref\":99,\"tf\":0.02127659574468085},\"103\":{\"ref\":103,\"tf\":0.012987012987012988},\"104\":{\"ref\":104,\"tf\":0.00423728813559322},\"105\":{\"ref\":105,\"tf\":0.017543859649122806},\"107\":{\"ref\":107,\"tf\":0.02531645569620253},\"109\":{\"ref\":109,\"tf\":0.03418803418803419},\"110\":{\"ref\":110,\"tf\":0.02040816326530612},\"112\":{\"ref\":112,\"tf\":0.03529411764705882},\"113\":{\"ref\":113,\"tf\":0.0070921985815602835},\"114\":{\"ref\":114,\"tf\":0.014354066985645933},\"121\":{\"ref\":121,\"tf\":0.01744186046511628},\"123\":{\"ref\":123,\"tf\":0.0035211267605633804},\"124\":{\"ref\":124,\"tf\":0.010309278350515464},\"133\":{\"ref\":133,\"tf\":0.0033500837520938024},\"135\":{\"ref\":135,\"tf\":0.0019305019305019305},\"136\":{\"ref\":136,\"tf\":0.005050505050505051}},\"c\":{\"docs\":{},\"a\":{\"docs\":{},\"s\":{\"docs\":{\"18\":{\"ref\":18,\"tf\":0.02},\"19\":{\"ref\":19,\"tf\":0.02},\"25\":{\"ref\":25,\"tf\":5.011494252873563}}}}},\"n\":{\"docs\":{\"71\":{\"ref\":71,\"tf\":0.016},\"80\":{\"ref\":80,\"tf\":0.015384615384615385},\"84\":{\"ref\":84,\"tf\":0.0036363636363636364},\"94\":{\"ref\":94,\"tf\":0.011111111111111112},\"107\":{\"ref\":107,\"tf\":0.0379746835443038},\"109\":{\"ref\":109,\"tf\":0.017094017094017096},\"110\":{\"ref\":110,\"tf\":0.05102040816326531},\"112\":{\"ref\":112,\"tf\":0.023529411764705882}}},\"-\":{\"docs\":{},\"d\":{\"docs\":{},\"e\":{\"docs\":{},\"l\":{\"docs\":{},\"e\":{\"docs\":{},\"t\":{\"docs\":{\"80\":{\"ref\":80,\"tf\":0.007692307692307693}}}}}}},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\"o\":{\"docs\":{},\"r\":{\"docs\":{},\"d\":{\"docs\":{\"80\":{\"ref\":80,\"tf\":0.007692307692307693}}}}}}},\"p\":{\"docs\":{},\"a\":{\"docs\":{},\"g\":{\"docs\":{\"94\":{\"ref\":94,\"tf\":0.022222222222222223}}}}}},\"(\":{\"docs\":{},\"o\":{\"docs\":{},\"p\":{\"docs\":{},\"t\":{\"docs\":{\"105\":{\"ref\":105,\"tf\":0.005847953216374269},\"110\":{\"ref\":110,\"tf\":0.01020408163265306},\"114\":{\"ref\":114,\"tf\":0.001594896331738437}}}}}},\"d\":{\"docs\":{},\"e\":{\"docs\":{},\"l\":{\"docs\":{},\"e\":{\"docs\":{},\"t\":{\"docs\":{},\"e\":{\"docs\":{},\"(\":{\"docs\":{},\"[\":{\"docs\":{},\"s\":{\"docs\":{},\"h\":{\"docs\":{},\"o\":{\"docs\":{},\"w\":{\"docs\":{},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\"o\":{\"docs\":{},\"r\":{\"docs\":{},\"d\":{\"docs\":{\"109\":{\"ref\":109,\"tf\":0.008547008547008548}}}}}}}}}}}}}}}}}}},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\"o\":{\"docs\":{},\"r\":{\"docs\":{},\"d\":{\"docs\":{\"109\":{\"ref\":109,\"tf\":0.02564102564102564}},\"e\":{\"docs\":{},\"r\":{\"docs\":{},\"(\":{\"docs\":{},\"[\":{\"docs\":{},\"s\":{\"docs\":{},\"h\":{\"docs\":{},\"o\":{\"docs\":{},\"w\":{\"docs\":{},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\"o\":{\"docs\":{},\"r\":{\"docs\":{},\"d\":{\"docs\":{\"109\":{\"ref\":109,\"tf\":0.008547008547008548}}}}}}}}}}}}}}}}}}}},\"b\":{\"docs\":{},\"a\":{\"docs\":{},\"c\":{\"docs\":{},\"k\":{\"docs\":{},\"b\":{\"docs\":{},\"u\":{\"docs\":{},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"o\":{\"docs\":{},\"n\":{\"docs\":{},\"(\":{\"docs\":{},\"[\":{\"docs\":{},\"s\":{\"docs\":{},\"h\":{\"docs\":{},\"o\":{\"docs\":{},\"w\":{\"docs\":{\"112\":{\"ref\":112,\"tf\":0.0058823529411764705}}}}}}}}}}}}}}}},\"r\":{\"docs\":{},\"(\":{\"docs\":{},\"s\":{\"docs\":{},\"h\":{\"docs\":{},\"o\":{\"docs\":{},\"w\":{\"docs\":{\"112\":{\"ref\":112,\"tf\":0.0058823529411764705}}}}}}}}}},\"f\":{\"docs\":{},\"u\":{\"docs\":{},\"l\":{\"docs\":{},\"l\":{\"docs\":{},\"s\":{\"docs\":{},\"c\":{\"docs\":{},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\"e\":{\"docs\":{},\"n\":{\"docs\":{\"121\":{\"ref\":121,\"tf\":0.005813953488372093}}}}}}}}}}}},\"s\":{\"docs\":{},\"t\":{\"docs\":{},\"a\":{\"docs\":{},\"t\":{\"docs\":{},\"u\":{\"docs\":{},\"s\":{\"docs\":{},\"b\":{\"docs\":{},\"a\":{\"docs\":{},\"r\":{\"docs\":{\"121\":{\"ref\":121,\"tf\":0.011627906976744186}},\"(\":{\"docs\":{},\"s\":{\"docs\":{},\"h\":{\"docs\":{},\"o\":{\"docs\":{},\"u\":{\"docs\":{},\"l\":{\"docs\":{},\"d\":{\"docs\":{},\"s\":{\"docs\":{},\"h\":{\"docs\":{},\"o\":{\"docs\":{},\"w\":{\"docs\":{\"121\":{\"ref\":121,\"tf\":0.005813953488372093}}}}}}}}}}}}}}}}}}}}}}},\"r\":{\"docs\":{},\"t\":{\"docs\":{\"54\":{\"ref\":54,\"tf\":0.001287001287001287},\"134\":{\"ref\":134,\"tf\":0.0034522439585730723}}}},\"u\":{\"docs\":{},\"l\":{\"docs\":{},\"d\":{\"docs\":{},\"a\":{\"docs\":{},\"n\":{\"docs\":{},\"i\":{\"docs\":{},\"m\":{\"docs\":{\"115\":{\"ref\":115,\"tf\":0.025974025974025976}}}}}},\"e\":{\"docs\":{},\"n\":{\"docs\":{\"117\":{\"ref\":117,\"tf\":0.007575757575757576}}},\"r\":{\"docs\":{\"134\":{\"ref\":134,\"tf\":0.0011507479861910242}}}},\"c\":{\"docs\":{},\"h\":{\"docs\":{},\"a\":{\"docs\":{},\"n\":{\"docs\":{},\"g\":{\"docs\":{},\"e\":{\"docs\":{},\"h\":{\"docs\":{},\"i\":{\"docs\":{},\"s\":{\"docs\":{},\"t\":{\"docs\":{},\"o\":{\"docs\":{},\"r\":{\"docs\":{},\"i\":{\"docs\":{\"118\":{\"ref\":118,\"tf\":0.01904761904761905}}}}}}}}}}}}}}},\"s\":{\"docs\":{},\"h\":{\"docs\":{},\"o\":{\"docs\":{},\"w\":{\"docs\":{\"121\":{\"ref\":121,\"tf\":0.005813953488372093}}}}}}}}},\"t\":{\"docs\":{\"134\":{\"ref\":134,\"tf\":0.0011507479861910242}}}},\"a\":{\"1\":{\"docs\":{\"58\":{\"ref\":58,\"tf\":0.00273224043715847}},\"w\":{\"docs\":{},\"i\":{\"docs\":{},\"t\":{\"docs\":{},\"h\":{\"docs\":{},\"r\":{\"docs\":{},\"s\":{\"docs\":{},\"a\":{\"docs\":{\"58\":{\"ref\":58,\"tf\":0.00273224043715847}}}}}}}}}},\"docs\":{},\"r\":{\"docs\":{},\"e\":{\"docs\":{\"25\":{\"ref\":25,\"tf\":0.022988505747126436},\"80\":{\"ref\":80,\"tf\":0.007692307692307693},\"85\":{\"ref\":85,\"tf\":0.09090909090909091},\"105\":{\"ref\":105,\"tf\":0.005847953216374269},\"126\":{\"ref\":126,\"tf\":0.011111111111111112}}}},\"d\":{\"docs\":{},\"o\":{\"docs\":{},\"w\":{\"docs\":{\"30\":{\"ref\":30,\"tf\":0.02702702702702703}}}}}},\"e\":{\"docs\":{},\"l\":{\"docs\":{},\"l\":{\"docs\":{\"54\":{\"ref\":54,\"tf\":0.001287001287001287},\"56\":{\"ref\":56,\"tf\":0.001594896331738437},\"57\":{\"ref\":57,\"tf\":0.007075471698113208},\"59\":{\"ref\":59,\"tf\":0.005571030640668524},\"60\":{\"ref\":60,\"tf\":0.0022727272727272726}}}},\"e\":{\"docs\":{},\"t\":{\"docs\":{\"105\":{\"ref\":105,\"tf\":0.06432748538011696},\"124\":{\"ref\":124,\"tf\":0.010309278350515464}},\"]\":{\"docs\":{},\"(\":{\"docs\":{},\"h\":{\"docs\":{},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"p\":{\"docs\":{},\":\":{\"docs\":{},\"/\":{\"docs\":{},\"/\":{\"docs\":{},\"i\":{\"docs\":{},\"o\":{\"docs\":{},\"n\":{\"docs\":{},\"i\":{\"docs\":{},\"c\":{\"docs\":{},\"f\":{\"docs\":{},\"r\":{\"docs\":{},\"a\":{\"docs\":{},\"m\":{\"docs\":{},\"e\":{\"docs\":{},\"w\":{\"docs\":{},\"o\":{\"docs\":{},\"r\":{\"docs\":{},\"k\":{\"docs\":{},\".\":{\"docs\":{},\"c\":{\"docs\":{},\"o\":{\"docs\":{},\"m\":{\"docs\":{},\".\":{\"docs\":{},\"s\":{\"3\":{\"docs\":{},\".\":{\"docs\":{},\"a\":{\"docs\":{},\"m\":{\"docs\":{},\"a\":{\"docs\":{},\"z\":{\"docs\":{},\"o\":{\"docs\":{},\"n\":{\"docs\":{},\"a\":{\"docs\":{},\"w\":{\"docs\":{},\"s\":{\"docs\":{},\".\":{\"docs\":{},\"c\":{\"docs\":{},\"o\":{\"docs\":{},\"m\":{\"docs\":{},\"/\":{\"docs\":{},\"d\":{\"docs\":{},\"o\":{\"docs\":{},\"c\":{\"docs\":{},\"s\":{\"docs\":{},\"/\":{\"docs\":{},\"c\":{\"docs\":{},\"o\":{\"docs\":{},\"n\":{\"docs\":{},\"t\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"l\":{\"docs\":{},\"l\":{\"docs\":{},\"e\":{\"docs\":{},\"r\":{\"docs\":{},\"s\":{\"docs\":{},\"/\":{\"docs\":{},\"a\":{\"docs\":{},\"c\":{\"docs\":{},\"t\":{\"docs\":{},\"i\":{\"docs\":{},\"o\":{\"docs\":{},\"n\":{\"docs\":{},\"s\":{\"docs\":{},\"h\":{\"docs\":{},\"e\":{\"docs\":{},\"e\":{\"docs\":{},\"t\":{\"docs\":{},\".\":{\"docs\":{},\"g\":{\"docs\":{},\"i\":{\"docs\":{},\"f\":{\"docs\":{\"105\":{\"ref\":105,\"tf\":0.005847953216374269}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},\"docs\":{}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},\"i\":{\"docs\":{},\"p\":{\"docs\":{\"66\":{\"ref\":66,\"tf\":0.043478260869565216}}}}},\"l\":{\"docs\":{},\"i\":{\"docs\":{},\"m\":{\"docs\":{},\"e\":{\"docs\":{},\"r\":{\"docs\":{\"18\":{\"ref\":18,\"tf\":0.02}}}}},\"d\":{\"docs\":{},\"e\":{\"docs\":{\"54\":{\"ref\":54,\"tf\":0.002574002574002574},\"84\":{\"ref\":84,\"tf\":0.0036363636363636364},\"94\":{\"ref\":94,\"tf\":0.07777777777777778},\"117\":{\"ref\":117,\"tf\":0.09090909090909091},\"123\":{\"ref\":123,\"tf\":0.007042253521126761},\"130\":{\"ref\":130,\"tf\":0.0043859649122807015},\"133\":{\"ref\":133,\"tf\":0.035175879396984924}},\"-\":{\"docs\":{},\"i\":{\"docs\":{},\"n\":{\"docs\":{},\"-\":{\"docs\":{},\"l\":{\"docs\":{},\"e\":{\"docs\":{},\"f\":{\"docs\":{},\"t\":{\"docs\":{\"53\":{\"ref\":53,\"tf\":0.041666666666666664}}}}}},\"r\":{\"docs\":{},\"i\":{\"docs\":{},\"g\":{\"docs\":{},\"h\":{\"docs\":{},\"t\":{\"docs\":{\"53\":{\"ref\":53,\"tf\":0.041666666666666664}}}}}}},\"u\":{\"docs\":{},\"p\":{\"docs\":{\"53\":{\"ref\":53,\"tf\":0.041666666666666664},\"54\":{\"ref\":54,\"tf\":0.001287001287001287},\"84\":{\"ref\":84,\"tf\":0.0036363636363636364},\"111\":{\"ref\":111,\"tf\":0.007518796992481203}}}}},\"t\":{\"docs\":{},\"e\":{\"docs\":{},\"r\":{\"docs\":{},\"v\":{\"docs\":{\"94\":{\"ref\":94,\"tf\":0.011111111111111112}}}}}}}},\"l\":{\"docs\":{},\"e\":{\"docs\":{},\"f\":{\"docs\":{},\"t\":{\"docs\":{},\"-\":{\"docs\":{},\"r\":{\"docs\":{},\"i\":{\"docs\":{},\"g\":{\"docs\":{},\"h\":{\"docs\":{},\"t\":{\"docs\":{\"53\":{\"ref\":53,\"tf\":0.041666666666666664},\"84\":{\"ref\":84,\"tf\":0.0036363636363636364}},\"-\":{\"docs\":{},\"i\":{\"docs\":{},\"o\":{\"docs\":{},\"s\":{\"7\":{\"docs\":{\"53\":{\"ref\":53,\"tf\":0.041666666666666664},\"84\":{\"ref\":84,\"tf\":0.0036363636363636364}}},\"docs\":{}}}}}}}}}}}}}}},\"o\":{\"docs\":{},\"u\":{\"docs\":{},\"t\":{\"docs\":{},\"-\":{\"docs\":{},\"l\":{\"docs\":{},\"e\":{\"docs\":{},\"f\":{\"docs\":{},\"t\":{\"docs\":{\"53\":{\"ref\":53,\"tf\":0.041666666666666664}}}}}},\"r\":{\"docs\":{},\"i\":{\"docs\":{},\"g\":{\"docs\":{},\"h\":{\"docs\":{},\"t\":{\"docs\":{\"53\":{\"ref\":53,\"tf\":0.041666666666666664}}}}}}}}}}},\"r\":{\"docs\":{},\"i\":{\"docs\":{},\"g\":{\"docs\":{},\"h\":{\"docs\":{},\"t\":{\"docs\":{},\"-\":{\"docs\":{},\"l\":{\"docs\":{},\"e\":{\"docs\":{},\"f\":{\"docs\":{},\"t\":{\"docs\":{\"53\":{\"ref\":53,\"tf\":0.041666666666666664}},\"-\":{\"docs\":{},\"i\":{\"docs\":{},\"o\":{\"docs\":{},\"s\":{\"7\":{\"docs\":{\"53\":{\"ref\":53,\"tf\":0.041666666666666664}}},\"docs\":{}}}}}}}}}}}}}}},\"u\":{\"docs\":{},\"p\":{\"docs\":{\"105\":{\"ref\":105,\"tf\":0.005847953216374269},\"124\":{\"ref\":124,\"tf\":0.010309278350515464}}}},\"b\":{\"docs\":{},\"o\":{\"docs\":{},\"x\":{\"docs\":{\"133\":{\"ref\":133,\"tf\":0.0033500837520938024}}}}}},\"b\":{\"docs\":{},\"o\":{\"docs\":{},\"x\":{\"docs\":{\"94\":{\"ref\":94,\"tf\":0.011111111111111112},\"117\":{\"ref\":117,\"tf\":0.022727272727272728},\"133\":{\"ref\":133,\"tf\":0.0016750418760469012}},\"]\":{\"docs\":{},\"(\":{\"docs\":{},\"h\":{\"docs\":{},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"p\":{\"docs\":{},\":\":{\"docs\":{},\"/\":{\"docs\":{},\"/\":{\"docs\":{},\"i\":{\"docs\":{},\"o\":{\"docs\":{},\"n\":{\"docs\":{},\"i\":{\"docs\":{},\"c\":{\"docs\":{},\"f\":{\"docs\":{},\"r\":{\"docs\":{},\"a\":{\"docs\":{},\"m\":{\"docs\":{},\"e\":{\"docs\":{},\"w\":{\"docs\":{},\"o\":{\"docs\":{},\"r\":{\"docs\":{},\"k\":{\"docs\":{},\".\":{\"docs\":{},\"c\":{\"docs\":{},\"o\":{\"docs\":{},\"m\":{\"docs\":{},\".\":{\"docs\":{},\"s\":{\"3\":{\"docs\":{},\".\":{\"docs\":{},\"a\":{\"docs\":{},\"m\":{\"docs\":{},\"a\":{\"docs\":{},\"z\":{\"docs\":{},\"o\":{\"docs\":{},\"n\":{\"docs\":{},\"a\":{\"docs\":{},\"w\":{\"docs\":{},\"s\":{\"docs\":{},\".\":{\"docs\":{},\"c\":{\"docs\":{},\"o\":{\"docs\":{},\"m\":{\"docs\":{},\"/\":{\"docs\":{},\"d\":{\"docs\":{},\"o\":{\"docs\":{},\"c\":{\"docs\":{},\"s\":{\"docs\":{},\"/\":{\"docs\":{},\"c\":{\"docs\":{},\"o\":{\"docs\":{},\"n\":{\"docs\":{},\"t\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"l\":{\"docs\":{},\"l\":{\"docs\":{},\"e\":{\"docs\":{},\"r\":{\"docs\":{},\"s\":{\"docs\":{},\"/\":{\"docs\":{},\"s\":{\"docs\":{},\"l\":{\"docs\":{},\"i\":{\"docs\":{},\"d\":{\"docs\":{},\"e\":{\"docs\":{},\"b\":{\"docs\":{},\"o\":{\"docs\":{},\"x\":{\"docs\":{},\".\":{\"docs\":{},\"g\":{\"docs\":{},\"i\":{\"docs\":{},\"f\":{\"docs\":{\"94\":{\"ref\":94,\"tf\":0.011111111111111112}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},\"docs\":{}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},\"(\":{\"docs\":{},\"t\":{\"docs\":{},\"o\":{\"docs\":{\"117\":{\"ref\":117,\"tf\":0.007575757575757576}}}}},\"s\":{\"docs\":{},\"c\":{\"docs\":{},\"o\":{\"docs\":{},\"u\":{\"docs\":{},\"n\":{\"docs\":{},\"t\":{\"docs\":{\"117\":{\"ref\":117,\"tf\":0.007575757575757576}}}}}}}},\"r\":{\"docs\":{\"133\":{\"ref\":133,\"tf\":0.0033500837520938024}},\"-\":{\"docs\":{},\"s\":{\"docs\":{},\"l\":{\"docs\":{},\"i\":{\"docs\":{},\"d\":{\"docs\":{\"133\":{\"ref\":133,\"tf\":0.0016750418760469012}}}}}}}}}},\"p\":{\"docs\":{\"54\":{\"ref\":54,\"tf\":0.001287001287001287}}},\"c\":{\"docs\":{},\"k\":{\"docs\":{\"57\":{\"ref\":57,\"tf\":0.0023584905660377358},\"129\":{\"ref\":129,\"tf\":0.0017391304347826088}}}}},\"e\":{\"docs\":{},\"e\":{\"docs\":{},\"v\":{\"docs\":{\"47\":{\"ref\":47,\"tf\":0.01},\"129\":{\"ref\":129,\"tf\":0.0017391304347826088}}}}},\"o\":{\"docs\":{},\"w\":{\"docs\":{\"56\":{\"ref\":56,\"tf\":0.001594896331738437},\"72\":{\"ref\":72,\"tf\":0.002331002331002331}},\"l\":{\"docs\":{},\"i\":{\"docs\":{\"130\":{\"ref\":130,\"tf\":0.0043859649122807015}}}}}},\"a\":{\"docs\":{},\"p\":{\"docs\":{\"134\":{\"ref\":134,\"tf\":0.0011507479861910242}}}}},\"y\":{\"docs\":{},\"s\":{\"docs\":{},\"t\":{\"docs\":{},\"e\":{\"docs\":{},\"m\":{\"docs\":{\"43\":{\"ref\":43,\"tf\":0.006944444444444444},\"45\":{\"ref\":45,\"tf\":0.0196078431372549},\"50\":{\"ref\":50,\"tf\":0.008928571428571428},\"56\":{\"ref\":56,\"tf\":0.003189792663476874},\"84\":{\"ref\":84,\"tf\":0.0036363636363636364},\"104\":{\"ref\":104,\"tf\":0.0211864406779661},\"106\":{\"ref\":106,\"tf\":0.013333333333333334},\"114\":{\"ref\":114,\"tf\":0.001594896331738437},\"123\":{\"ref\":123,\"tf\":0.0035211267605633804},\"134\":{\"ref\":134,\"tf\":0.0023014959723820483},\"136\":{\"ref\":136,\"tf\":0.010101010101010102}}}}}},\"n\":{\"docs\":{},\"t\":{\"docs\":{},\"a\":{\"docs\":{},\"x\":{\"docs\":{\"84\":{\"ref\":84,\"tf\":0.0036363636363636364},\"129\":{\"ref\":129,\"tf\":0.0017391304347826088}}}}}}},\"q\":{\"docs\":{},\"u\":{\"docs\":{},\"a\":{\"docs\":{},\"r\":{\"docs\":{\"52\":{\"ref\":52,\"tf\":0.020833333333333332}}}}}},\"o\":{\"docs\":{},\"m\":{\"docs\":{},\"e\":{\"docs\":{},\"t\":{\"docs\":{},\"h\":{\"docs\":{\"54\":{\"ref\":54,\"tf\":0.001287001287001287},\"60\":{\"ref\":60,\"tf\":0.004545454545454545},\"126\":{\"ref\":126,\"tf\":0.011111111111111112},\"135\":{\"ref\":135,\"tf\":0.003861003861003861}}},\"i\":{\"docs\":{},\"m\":{\"docs\":{\"74\":{\"ref\":74,\"tf\":0.005988023952095809},\"134\":{\"ref\":134,\"tf\":0.0011507479861910242}}}}},\"w\":{\"docs\":{},\"h\":{\"docs\":{},\"e\":{\"docs\":{},\"r\":{\"docs\":{\"56\":{\"ref\":56,\"tf\":0.001594896331738437},\"58\":{\"ref\":58,\"tf\":0.00273224043715847}}}}}},\"o\":{\"docs\":{},\"n\":{\"docs\":{\"135\":{\"ref\":135,\"tf\":0.0019305019305019305}}}}}},\"u\":{\"docs\":{},\"r\":{\"docs\":{},\"c\":{\"docs\":{\"57\":{\"ref\":57,\"tf\":0.01650943396226415},\"68\":{\"ref\":68,\"tf\":0.027777777777777776},\"129\":{\"ref\":129,\"tf\":0.0017391304347826088},\"134\":{\"ref\":134,\"tf\":0.0011507479861910242},\"135\":{\"ref\":135,\"tf\":0.003861003861003861}}}}},\"f\":{\"docs\":{},\"t\":{\"docs\":{},\"w\":{\"docs\":{},\"a\":{\"docs\":{},\"r\":{\"docs\":{\"70\":{\"ref\":70,\"tf\":0.023809523809523808},\"135\":{\"ref\":135,\"tf\":0.0019305019305019305}}}}}}},\"o\":{\"docs\":{},\"n\":{\"docs\":{\"76\":{\"ref\":76,\"tf\":0.018867924528301886},\"77\":{\"ref\":77,\"tf\":0.018867924528301886},\"136\":{\"ref\":136,\"tf\":0.005050505050505051}}}},\"l\":{\"docs\":{},\"u\":{\"docs\":{},\"t\":{\"docs\":{\"104\":{\"ref\":104,\"tf\":0.00423728813559322},\"134\":{\"ref\":134,\"tf\":0.0011507479861910242}}}}}},\"d\":{\"docs\":{},\"k\":{\"docs\":{\"56\":{\"ref\":56,\"tf\":0.003189792663476874},\"57\":{\"ref\":57,\"tf\":0.0023584905660377358},\"136\":{\"ref\":136,\"tf\":0.005050505050505051}}}},\"r\":{\"docs\":{},\"c\":{\"docs\":{},\"=\":{\"docs\":{},\"\\\"\":{\"docs\":{},\"c\":{\"docs\":{},\"o\":{\"docs\":{},\"r\":{\"docs\":{},\"d\":{\"docs\":{},\"o\":{\"docs\":{},\"v\":{\"docs\":{},\"a\":{\"docs\":{},\".\":{\"docs\":{},\"j\":{\"docs\":{\"59\":{\"ref\":59,\"tf\":0.002785515320334262}}}}}}}}}}},\"h\":{\"docs\":{},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"p\":{\"docs\":{},\":\":{\"docs\":{},\"/\":{\"docs\":{},\"/\":{\"docs\":{},\"c\":{\"docs\":{},\"o\":{\"docs\":{},\"d\":{\"docs\":{},\"e\":{\"docs\":{},\".\":{\"docs\":{},\"i\":{\"docs\":{},\"o\":{\"docs\":{},\"n\":{\"docs\":{},\"i\":{\"docs\":{},\"c\":{\"docs\":{},\"f\":{\"docs\":{},\"r\":{\"docs\":{},\"a\":{\"docs\":{},\"m\":{\"docs\":{},\"e\":{\"docs\":{},\"w\":{\"docs\":{},\"o\":{\"docs\":{},\"r\":{\"docs\":{},\"k\":{\"docs\":{},\".\":{\"docs\":{},\"c\":{\"docs\":{},\"o\":{\"docs\":{},\"m\":{\"docs\":{},\"/\":{\"docs\":{},\"a\":{\"docs\":{},\"s\":{\"docs\":{},\"s\":{\"docs\":{},\"e\":{\"docs\":{},\"t\":{\"docs\":{},\"s\":{\"docs\":{},\"/\":{\"docs\":{},\"i\":{\"docs\":{},\"m\":{\"docs\":{},\"g\":{\"docs\":{},\"/\":{\"docs\":{},\"a\":{\"docs\":{},\"p\":{\"docs\":{},\"p\":{\"docs\":{},\"_\":{\"docs\":{},\"i\":{\"docs\":{},\"c\":{\"docs\":{},\"o\":{\"docs\":{},\"n\":{\"docs\":{},\".\":{\"docs\":{},\"p\":{\"docs\":{},\"n\":{\"docs\":{},\"g\":{\"docs\":{\"133\":{\"ref\":133,\"tf\":0.0016750418760469012}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},\"t\":{\"docs\":{\"106\":{\"ref\":106,\"tf\":0.013333333333333334}},\"i\":{\"docs\":{\"133\":{\"ref\":133,\"tf\":0.0016750418760469012}},\"t\":{\"docs\":{},\"l\":{\"docs\":{\"0\":{\"ref\":0,\"tf\":0.03225806451612903},\"3\":{\"ref\":3,\"tf\":0.07692307692307693},\"54\":{\"ref\":54,\"tf\":0.011583011583011582},\"76\":{\"ref\":76,\"tf\":0.03773584905660377},\"77\":{\"ref\":77,\"tf\":0.03773584905660377},\"81\":{\"ref\":81,\"tf\":0.015151515151515152},\"82\":{\"ref\":82,\"tf\":0.015625},\"84\":{\"ref\":84,\"tf\":0.0036363636363636364},\"95\":{\"ref\":95,\"tf\":0.018691588785046728},\"98\":{\"ref\":98,\"tf\":0.05660377358490566},\"99\":{\"ref\":99,\"tf\":0.02127659574468085},\"105\":{\"ref\":105,\"tf\":0.005847953216374269},\"112\":{\"ref\":112,\"tf\":0.07647058823529412},\"114\":{\"ref\":114,\"tf\":0.019138755980861243},\"136\":{\"ref\":136,\"tf\":0.010101010101010102}},\"e\":{\"docs\":{},\"=\":{\"docs\":{},\"&\":{\"docs\":{},\"q\":{\"docs\":{},\"u\":{\"docs\":{},\"o\":{\"docs\":{},\"t\":{\"docs\":{},\";\":{\"docs\":{},\"m\":{\"docs\":{},\"y\":{\"docs\":{},\"t\":{\"docs\":{},\"i\":{\"docs\":{},\"t\":{\"docs\":{},\"l\":{\"docs\":{},\"e\":{\"docs\":{},\"&\":{\"docs\":{},\"q\":{\"docs\":{},\"u\":{\"docs\":{},\"o\":{\"docs\":{},\"t\":{\"docs\":{},\";\":{\"docs\":{},\"&\":{\"docs\":{},\"g\":{\"docs\":{},\"t\":{\"docs\":{\"82\":{\"ref\":82,\"tf\":0.0078125}}}}}}}}}}}}}}}}}}}}}}}},\"\\\"\":{\"docs\":{},\"'\":{\"docs\":{},\"h\":{\"docs\":{},\"o\":{\"docs\":{},\"m\":{\"docs\":{\"84\":{\"ref\":84,\"tf\":0.0036363636363636364}}}}}}}},\"t\":{\"docs\":{},\"e\":{\"docs\":{},\"x\":{\"docs\":{},\"t\":{\"docs\":{\"105\":{\"ref\":105,\"tf\":0.011695906432748537}}}}}},\"<\":{\"docs\":{},\"/\":{\"docs\":{},\"h\":{\"1\":{\"docs\":{\"111\":{\"ref\":111,\"tf\":0.007518796992481203}}},\"docs\":{}}}}}}},\"e\":{\"docs\":{\"38\":{\"ref\":38,\"tf\":0.011627906976744186}}},\"m\":{\"docs\":{},\"e\":{\"docs\":{\"56\":{\"ref\":56,\"tf\":0.003189792663476874},\"57\":{\"ref\":57,\"tf\":0.0047169811320754715},\"70\":{\"ref\":70,\"tf\":0.023809523809523808},\"104\":{\"ref\":104,\"tf\":0.00423728813559322},\"106\":{\"ref\":106,\"tf\":0.05333333333333334},\"107\":{\"ref\":107,\"tf\":0.05063291139240506},\"115\":{\"ref\":115,\"tf\":0.003246753246753247},\"119\":{\"ref\":119,\"tf\":0.003937007874015748},\"129\":{\"ref\":129,\"tf\":0.0017391304347826088},\"132\":{\"ref\":132,\"tf\":0.01282051282051282},\"133\":{\"ref\":133,\"tf\":0.0016750418760469012},\"134\":{\"ref\":134,\"tf\":0.006904487917146145},\"135\":{\"ref\":135,\"tf\":0.0019305019305019305}},\"o\":{\"docs\":{},\"u\":{\"docs\":{},\"t\":{\"docs\":{\"54\":{\"ref\":54,\"tf\":0.002574002574002574},\"107\":{\"ref\":107,\"tf\":0.012658227848101266},\"114\":{\"ref\":114,\"tf\":0.001594896331738437}},\"(\":{\"docs\":{},\"f\":{\"docs\":{},\"u\":{\"docs\":{},\"n\":{\"docs\":{},\"c\":{\"docs\":{},\"t\":{\"docs\":{\"54\":{\"ref\":54,\"tf\":0.001287001287001287},\"107\":{\"ref\":107,\"tf\":0.012658227848101266},\"114\":{\"ref\":114,\"tf\":0.001594896331738437},\"130\":{\"ref\":130,\"tf\":0.0043859649122807015}}}}}}}}}}}}},\"n\":{\"docs\":{},\"i\":{\"docs\":{\"60\":{\"ref\":60,\"tf\":0.0022727272727272726}}}}},\"o\":{\"docs\":{},\"p\":{\"docs\":{\"0\":{\"ref\":0,\"tf\":0.03225806451612903},\"2\":{\"ref\":2,\"tf\":0.025},\"21\":{\"ref\":21,\"tf\":0.00980392156862745},\"29\":{\"ref\":29,\"tf\":0.02564102564102564},\"41\":{\"ref\":41,\"tf\":3.395833333333333},\"47\":{\"ref\":47,\"tf\":0.01},\"50\":{\"ref\":50,\"tf\":0.008928571428571428},\"52\":{\"ref\":52,\"tf\":0.020833333333333332},\"84\":{\"ref\":84,\"tf\":0.0036363636363636364},\"115\":{\"ref\":115,\"tf\":0.032467532467532464},\"119\":{\"ref\":119,\"tf\":0.015748031496062992},\"134\":{\"ref\":134,\"tf\":0.0011507479861910242},\"135\":{\"ref\":135,\"tf\":0.0019305019305019305}},\"b\":{\"docs\":{},\"a\":{\"docs\":{},\"r\":{\"docs\":{\"82\":{\"ref\":82,\"tf\":0.0078125},\"123\":{\"ref\":123,\"tf\":0.0035211267605633804}}}}},\"i\":{\"docs\":{},\"c\":{\"docs\":{\"134\":{\"ref\":134,\"tf\":0.0011507479861910242}}}}},\"g\":{\"docs\":{},\"e\":{\"docs\":{},\"t\":{\"docs\":{},\"h\":{\"docs\":{\"13\":{\"ref\":13,\"tf\":0.019230769230769232}}}}},\"g\":{\"docs\":{},\"l\":{\"docs\":{\"14\":{\"ref\":14,\"tf\":0.011494252873563218},\"34\":{\"ref\":34,\"tf\":10.083333333333334},\"74\":{\"ref\":74,\"tf\":0.005988023952095809},\"80\":{\"ref\":80,\"tf\":0.007692307692307693},\"93\":{\"ref\":93,\"tf\":0.014084507042253521},\"97\":{\"ref\":97,\"tf\":0.057692307692307696},\"101\":{\"ref\":101,\"tf\":0.043478260869565216},\"115\":{\"ref\":115,\"tf\":0.003246753246753247},\"116\":{\"ref\":116,\"tf\":0.027777777777777776},\"123\":{\"ref\":123,\"tf\":0.01056338028169014},\"134\":{\"ref\":134,\"tf\":0.0011507479861910242}},\"e\":{\"docs\":{},\"-\":{\"docs\":{},\"a\":{\"docs\":{},\"s\":{\"docs\":{},\"s\":{\"docs\":{},\"e\":{\"docs\":{},\"r\":{\"docs\":{},\"t\":{\"docs\":{\"34\":{\"ref\":34,\"tf\":0.016666666666666666}}}}}}}},\"c\":{\"docs\":{},\"a\":{\"docs\":{},\"l\":{\"docs\":{},\"m\":{\"docs\":{\"97\":{\"ref\":97,\"tf\":0.019230769230769232}}}}},\"l\":{\"docs\":{},\"a\":{\"docs\":{},\"s\":{\"docs\":{},\"s\":{\"docs\":{\"97\":{\"ref\":97,\"tf\":0.019230769230769232}}}}}}}},\"l\":{\"docs\":{},\"e\":{\"docs\":{},\"f\":{\"docs\":{},\"t\":{\"docs\":{},\"(\":{\"docs\":{},\"[\":{\"docs\":{},\"i\":{\"docs\":{},\"s\":{\"docs\":{},\"o\":{\"docs\":{},\"p\":{\"docs\":{},\"e\":{\"docs\":{},\"n\":{\"docs\":{\"116\":{\"ref\":116,\"tf\":0.005555555555555556}}}}}}}}}}}}}},\"r\":{\"docs\":{},\"i\":{\"docs\":{},\"g\":{\"docs\":{},\"h\":{\"docs\":{},\"t\":{\"docs\":{},\"(\":{\"docs\":{},\"[\":{\"docs\":{},\"i\":{\"docs\":{},\"s\":{\"docs\":{},\"o\":{\"docs\":{},\"p\":{\"docs\":{},\"e\":{\"docs\":{},\"n\":{\"docs\":{\"116\":{\"ref\":116,\"tf\":0.005555555555555556}}}}}}}}}}}}}}}}}}},\"u\":{\"docs\":{},\"c\":{\"docs\":{},\"h\":{\"docs\":{\"34\":{\"ref\":34,\"tf\":0.016666666666666666},\"69\":{\"ref\":69,\"tf\":0.05},\"104\":{\"ref\":104,\"tf\":0.01694915254237288},\"120\":{\"ref\":120,\"tf\":0.006289308176100629},\"134\":{\"ref\":134,\"tf\":0.006904487917146145}},\"-\":{\"docs\":{},\"e\":{\"docs\":{},\"v\":{\"docs\":{\"104\":{\"ref\":104,\"tf\":0.00423728813559322}}}}},\"/\":{\"docs\":{},\"c\":{\"docs\":{},\"l\":{\"docs\":{},\"i\":{\"docs\":{},\"c\":{\"docs\":{},\"k\":{\"docs\":{\"134\":{\"ref\":134,\"tf\":0.0011507479861910242}}}}}}}},\"c\":{\"docs\":{},\"a\":{\"docs\":{},\"n\":{\"docs\":{},\"c\":{\"docs\":{},\"e\":{\"docs\":{},\"l\":{\"docs\":{\"134\":{\"ref\":134,\"tf\":0.0011507479861910242}}}}}}}},\"e\":{\"docs\":{},\"n\":{\"docs\":{},\"d\":{\"docs\":{\"134\":{\"ref\":134,\"tf\":0.005753739930955121}}}}},\"m\":{\"docs\":{},\"o\":{\"docs\":{},\"v\":{\"docs\":{\"134\":{\"ref\":134,\"tf\":0.0011507479861910242}}}}},\"s\":{\"docs\":{},\"t\":{\"docs\":{},\"a\":{\"docs\":{},\"r\":{\"docs\":{},\"t\":{\"docs\":{\"134\":{\"ref\":134,\"tf\":0.0034522439585730723}}}}}}}}},\"g\":{\"docs\":{},\"h\":{\"docs\":{},\"e\":{\"docs\":{},\"s\":{\"docs\":{},\"t\":{\"docs\":{\"54\":{\"ref\":54,\"tf\":0.001287001287001287}}}}}}}},\"d\":{\"docs\":{},\"o\":{\"docs\":{\"54\":{\"ref\":54,\"tf\":2.503861003861004},\"58\":{\"ref\":58,\"tf\":3.3387978142076498},\"59\":{\"ref\":59,\"tf\":3.3416898792943357}},\"c\":{\"docs\":{},\"t\":{\"docs\":{},\"r\":{\"docs\":{},\"l\":{\"docs\":{\"54\":{\"ref\":54,\"tf\":0.001287001287001287}}}}}},\"]\":{\"docs\":{},\"(\":{\"docs\":{},\"h\":{\"docs\":{},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"p\":{\"docs\":{},\":\":{\"docs\":{},\"/\":{\"docs\":{},\"/\":{\"docs\":{},\"i\":{\"docs\":{},\"o\":{\"docs\":{},\"n\":{\"docs\":{},\"i\":{\"docs\":{},\"c\":{\"docs\":{},\"f\":{\"docs\":{},\"r\":{\"docs\":{},\"a\":{\"docs\":{},\"m\":{\"docs\":{},\"e\":{\"docs\":{},\"w\":{\"docs\":{},\"o\":{\"docs\":{},\"r\":{\"docs\":{},\"k\":{\"docs\":{},\".\":{\"docs\":{},\"c\":{\"docs\":{},\"o\":{\"docs\":{},\"m\":{\"docs\":{},\".\":{\"docs\":{},\"s\":{\"3\":{\"docs\":{},\".\":{\"docs\":{},\"a\":{\"docs\":{},\"m\":{\"docs\":{},\"a\":{\"docs\":{},\"z\":{\"docs\":{},\"o\":{\"docs\":{},\"n\":{\"docs\":{},\"a\":{\"docs\":{},\"w\":{\"docs\":{},\"s\":{\"docs\":{},\".\":{\"docs\":{},\"c\":{\"docs\":{},\"o\":{\"docs\":{},\"m\":{\"docs\":{},\"/\":{\"docs\":{},\"g\":{\"docs\":{},\"u\":{\"docs\":{},\"i\":{\"docs\":{},\"d\":{\"docs\":{},\"e\":{\"docs\":{},\"/\":{\"0\":{\"docs\":{},\".\":{\"1\":{\"docs\":{},\".\":{\"0\":{\"docs\":{},\"/\":{\"5\":{\"docs\":{},\"-\":{\"docs\":{},\"p\":{\"docs\":{},\"l\":{\"docs\":{},\"a\":{\"docs\":{},\"y\":{\"2\":{\"docs\":{},\".\":{\"docs\":{},\"p\":{\"docs\":{},\"n\":{\"docs\":{},\"g\":{\"docs\":{\"58\":{\"ref\":58,\"tf\":0.00273224043715847}}}}}}},\"docs\":{}}}}}}},\"docs\":{}}},\"docs\":{}}},\"docs\":{}}},\"docs\":{}}}}}}}}}}}}}}}}}}}}}}},\"docs\":{}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},\"a\":{\"docs\":{},\"i\":{\"docs\":{\"57\":{\"ref\":57,\"tf\":0.0023584905660377358},\"135\":{\"ref\":135,\"tf\":0.0019305019305019305},\"136\":{\"ref\":136,\"tf\":0.005050505050505051}}}}},\"o\":{\"docs\":{},\"l\":{\"docs\":{\"56\":{\"ref\":56,\"tf\":0.004784688995215311},\"57\":{\"ref\":57,\"tf\":0.0047169811320754715},\"58\":{\"ref\":58,\"tf\":0.00819672131147541},\"63\":{\"ref\":63,\"tf\":0.024390243902439025},\"127\":{\"ref\":127,\"tf\":0.006622516556291391},\"129\":{\"ref\":129,\"tf\":0.0034782608695652175},\"135\":{\"ref\":135,\"tf\":0.0019305019305019305}},\"s\":{\"docs\":{},\"]\":{\"docs\":{},\"(\":{\"docs\":{},\"h\":{\"docs\":{},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"p\":{\"docs\":{},\":\":{\"docs\":{},\"/\":{\"docs\":{},\"/\":{\"docs\":{},\"j\":{\"docs\":{},\"q\":{\"docs\":{},\"u\":{\"docs\":{},\"e\":{\"docs\":{},\"r\":{\"docs\":{},\"y\":{\"docs\":{},\"m\":{\"docs\":{},\"o\":{\"docs\":{},\"b\":{\"docs\":{},\"i\":{\"docs\":{},\"l\":{\"docs\":{},\"e\":{\"docs\":{},\".\":{\"docs\":{},\"c\":{\"docs\":{},\"o\":{\"docs\":{},\"m\":{\"docs\":{\"57\":{\"ref\":57,\"tf\":0.0023584905660377358}}}}}}}}}}}}}}}}}}}}}}}}}}},\"'\":{\"docs\":{\"58\":{\"ref\":58,\"tf\":0.00273224043715847}}}}}},\"n\":{\"docs\":{\"59\":{\"ref\":59,\"tf\":0.002785515320334262},\"135\":{\"ref\":135,\"tf\":0.0019305019305019305}}},\"i\":{\"docs\":{},\"n\":{\"docs\":{},\"d\":{\"docs\":{},\"e\":{\"docs\":{},\"x\":{\"docs\":{\"89\":{\"ref\":89,\"tf\":0.045454545454545456}}}}}}},\"w\":{\"docs\":{},\"a\":{\"docs\":{},\"r\":{\"docs\":{},\"d\":{\"docs\":{\"112\":{\"ref\":112,\"tf\":0.0058823529411764705},\"135\":{\"ref\":135,\"tf\":0.0019305019305019305}}}}}},\"l\":{\"docs\":{},\"d\":{\"docs\":{\"117\":{\"ref\":117,\"tf\":0.007575757575757576}}}}},\"y\":{\"docs\":{\"134\":{\"ref\":134,\"tf\":0.0011507479861910242}},\"p\":{\"docs\":{},\"e\":{\"docs\":{\"3\":{\"ref\":3,\"tf\":0.019230769230769232},\"26\":{\"ref\":26,\"tf\":0.021739130434782608},\"29\":{\"ref\":29,\"tf\":0.02564102564102564},\"71\":{\"ref\":71,\"tf\":0.008},\"72\":{\"ref\":72,\"tf\":0.002331002331002331},\"74\":{\"ref\":74,\"tf\":0.005988023952095809},\"76\":{\"ref\":76,\"tf\":0.018867924528301886},\"77\":{\"ref\":77,\"tf\":0.018867924528301886},\"78\":{\"ref\":78,\"tf\":0.011235955056179775},\"80\":{\"ref\":80,\"tf\":0.007692307692307693},\"82\":{\"ref\":82,\"tf\":0.0078125},\"83\":{\"ref\":83,\"tf\":0.02127659574468085},\"84\":{\"ref\":84,\"tf\":0.0036363636363636364},\"88\":{\"ref\":88,\"tf\":0.009708737864077669},\"89\":{\"ref\":89,\"tf\":0.022727272727272728},\"90\":{\"ref\":90,\"tf\":0.010416666666666666},\"91\":{\"ref\":91,\"tf\":0.0196078431372549},\"92\":{\"ref\":92,\"tf\":0.02857142857142857},\"93\":{\"ref\":93,\"tf\":0.014084507042253521},\"94\":{\"ref\":94,\"tf\":0.011111111111111112},\"95\":{\"ref\":95,\"tf\":0.009345794392523364},\"96\":{\"ref\":96,\"tf\":0.017857142857142856},\"97\":{\"ref\":97,\"tf\":0.019230769230769232},\"98\":{\"ref\":98,\"tf\":0.018867924528301886},\"104\":{\"ref\":104,\"tf\":0.00423728813559322},\"105\":{\"ref\":105,\"tf\":0.005847953216374269},\"108\":{\"ref\":108,\"tf\":0.028985507246376812},\"109\":{\"ref\":109,\"tf\":0.03418803418803419},\"110\":{\"ref\":110,\"tf\":0.01020408163265306},\"111\":{\"ref\":111,\"tf\":0.015037593984962405},\"112\":{\"ref\":112,\"tf\":0.041176470588235294},\"113\":{\"ref\":113,\"tf\":0.028368794326241134},\"114\":{\"ref\":114,\"tf\":0.022328548644338118},\"115\":{\"ref\":115,\"tf\":0.025974025974025976},\"116\":{\"ref\":116,\"tf\":0.022222222222222223},\"117\":{\"ref\":117,\"tf\":0.022727272727272728},\"118\":{\"ref\":118,\"tf\":0.01904761904761905},\"119\":{\"ref\":119,\"tf\":0.051181102362204724},\"120\":{\"ref\":120,\"tf\":0.0440251572327044},\"121\":{\"ref\":121,\"tf\":0.01744186046511628},\"126\":{\"ref\":126,\"tf\":0.022222222222222223},\"133\":{\"ref\":133,\"tf\":0.006700167504187605},\"136\":{\"ref\":136,\"tf\":0.010101010101010102}},\"=\":{\"docs\":{},\"\\\"\":{\"docs\":{},\"s\":{\"docs\":{},\"u\":{\"docs\":{},\"b\":{\"docs\":{},\"m\":{\"docs\":{},\"i\":{\"docs\":{},\"t\":{\"docs\":{\"54\":{\"ref\":54,\"tf\":0.001287001287001287}}}}}}}},\"t\":{\"docs\":{},\"e\":{\"docs\":{},\"x\":{\"docs\":{},\"t\":{\"docs\":{\"54\":{\"ref\":54,\"tf\":0.001287001287001287}},\"/\":{\"docs\":{},\"n\":{\"docs\":{},\"g\":{\"docs\":{},\"-\":{\"docs\":{},\"t\":{\"docs\":{},\"e\":{\"docs\":{},\"m\":{\"docs\":{},\"p\":{\"docs\":{},\"l\":{\"docs\":{\"54\":{\"ref\":54,\"tf\":0.001287001287001287},\"84\":{\"ref\":84,\"tf\":0.0036363636363636364}}}}}}}}}}}}}}}}}},\"i\":{\"docs\":{},\"c\":{\"docs\":{\"72\":{\"ref\":72,\"tf\":0.002331002331002331}}}}},\"s\":{\"docs\":{},\"o\":{\"docs\":{},\"n\":{\"docs\":{},\"'\":{\"docs\":{\"14\":{\"ref\":14,\"tf\":0.011494252873563218}}}}}}},\"a\":{\"docs\":{},\"k\":{\"docs\":{},\"e\":{\"docs\":{\"8\":{\"ref\":8,\"tf\":0.02702702702702703},\"9\":{\"ref\":9,\"tf\":0.02702702702702703},\"11\":{\"ref\":11,\"tf\":0.045454545454545456},\"32\":{\"ref\":32,\"tf\":0.04},\"43\":{\"ref\":43,\"tf\":0.006944444444444444},\"44\":{\"ref\":44,\"tf\":0.018518518518518517},\"45\":{\"ref\":45,\"tf\":0.00980392156862745},\"47\":{\"ref\":47,\"tf\":0.01},\"51\":{\"ref\":51,\"tf\":0.01694915254237288},\"54\":{\"ref\":54,\"tf\":0.002574002574002574},\"56\":{\"ref\":56,\"tf\":0.006379585326953748},\"58\":{\"ref\":58,\"tf\":0.00273224043715847},\"59\":{\"ref\":59,\"tf\":0.002785515320334262},\"70\":{\"ref\":70,\"tf\":0.023809523809523808},\"72\":{\"ref\":72,\"tf\":0.002331002331002331},\"117\":{\"ref\":117,\"tf\":0.007575757575757576},\"129\":{\"ref\":129,\"tf\":0.0017391304347826088},\"131\":{\"ref\":131,\"tf\":0.05555555555555555},\"134\":{\"ref\":134,\"tf\":0.0023014959723820483},\"135\":{\"ref\":135,\"tf\":0.0019305019305019305}}}},\"l\":{\"docs\":{},\"e\":{\"docs\":{\"14\":{\"ref\":14,\"tf\":0.011494252873563218}}},\"l\":{\"docs\":{},\"e\":{\"docs\":{},\"s\":{\"docs\":{},\"t\":{\"docs\":{\"47\":{\"ref\":47,\"tf\":0.02}}}},\"r\":{\"docs\":{\"72\":{\"ref\":72,\"tf\":0.002331002331002331}}}}},\"k\":{\"docs\":{\"57\":{\"ref\":57,\"tf\":0.0023584905660377358},\"60\":{\"ref\":60,\"tf\":0.0022727272727272726},\"134\":{\"ref\":134,\"tf\":0.0011507479861910242}}}},\"p\":{\"docs\":{\"26\":{\"ref\":26,\"tf\":0.021739130434782608},\"34\":{\"ref\":34,\"tf\":0.016666666666666666},\"95\":{\"ref\":95,\"tf\":0.009345794392523364},\"100\":{\"ref\":100,\"tf\":0.041666666666666664},\"101\":{\"ref\":101,\"tf\":0.043478260869565216},\"102\":{\"ref\":102,\"tf\":0.020833333333333332},\"104\":{\"ref\":104,\"tf\":10.05084745762712},\"105\":{\"ref\":105,\"tf\":0.011695906432748537},\"112\":{\"ref\":112,\"tf\":0.0058823529411764705},\"114\":{\"ref\":114,\"tf\":0.007974481658692184},\"120\":{\"ref\":120,\"tf\":0.006289308176100629},\"133\":{\"ref\":133,\"tf\":0.010050251256281407},\"134\":{\"ref\":134,\"tf\":0.01726121979286536}},\"p\":{\"docs\":{},\"a\":{\"docs\":{},\"b\":{\"docs\":{},\"l\":{\"docs\":{\"16\":{\"ref\":16,\"tf\":0.007352941176470588},\"35\":{\"ref\":35,\"tf\":0.01818181818181818},\"36\":{\"ref\":36,\"tf\":0.017857142857142856}}}}}}},\"b\":{\"docs\":{\"25\":{\"ref\":25,\"tf\":0.022988505747126436},\"39\":{\"ref\":39,\"tf\":10.113924050632912},\"40\":{\"ref\":40,\"tf\":5.285714285714286},\"41\":{\"ref\":41,\"tf\":3.520833333333333},\"42\":{\"ref\":42,\"tf\":3.476190476190476},\"56\":{\"ref\":56,\"tf\":0.001594896331738437},\"59\":{\"ref\":59,\"tf\":0.002785515320334262},\"60\":{\"ref\":60,\"tf\":0.0022727272727272726},\"95\":{\"ref\":95,\"tf\":0.12149532710280374},\"96\":{\"ref\":96,\"tf\":0.08928571428571429},\"118\":{\"ref\":118,\"tf\":0.06666666666666667},\"123\":{\"ref\":123,\"tf\":0.01056338028169014},\"127\":{\"ref\":127,\"tf\":0.013245033112582781}},\"-\":{\"docs\":{},\"i\":{\"docs\":{},\"t\":{\"docs\":{},\"e\":{\"docs\":{},\"m\":{\"docs\":{\"39\":{\"ref\":39,\"tf\":0.012658227848101266}}}}}}},\"b\":{\"docs\":{},\"a\":{\"docs\":{},\"r\":{\"docs\":{\"39\":{\"ref\":39,\"tf\":0.012658227848101266}}}}},\"s\":{\"docs\":{},\"-\":{\"docs\":{},\"d\":{\"docs\":{},\"a\":{\"docs\":{},\"n\":{\"docs\":{},\"g\":{\"docs\":{\"39\":{\"ref\":39,\"tf\":0.012658227848101266}}}},\"r\":{\"docs\":{},\"k\":{\"docs\":{\"39\":{\"ref\":39,\"tf\":0.012658227848101266}}}}},\"e\":{\"docs\":{},\"f\":{\"docs\":{},\"a\":{\"docs\":{},\"u\":{\"docs\":{},\"l\":{\"docs\":{},\"t\":{\"docs\":{\"39\":{\"ref\":39,\"tf\":0.012658227848101266}}}}}}}}},\"i\":{\"docs\":{},\"n\":{\"docs\":{},\"f\":{\"docs\":{},\"o\":{\"docs\":{\"39\":{\"ref\":39,\"tf\":0.012658227848101266}}}}},\"t\":{\"docs\":{},\"e\":{\"docs\":{},\"m\":{\"docs\":{},\"-\":{\"docs\":{},\"h\":{\"docs\":{},\"i\":{\"docs\":{},\"d\":{\"docs\":{\"39\":{\"ref\":39,\"tf\":0.012658227848101266}}}}}}}}},\"c\":{\"docs\":{},\"o\":{\"docs\":{},\"n\":{\"docs\":{},\"-\":{\"docs\":{},\"o\":{\"docs\":{},\"n\":{\"docs\":{},\"l\":{\"docs\":{},\"i\":{\"docs\":{\"40\":{\"ref\":40,\"tf\":0.14285714285714285}}}}}},\"t\":{\"docs\":{},\"o\":{\"docs\":{},\"p\":{\"docs\":{\"41\":{\"ref\":41,\"tf\":0.0625}}}}},\"l\":{\"docs\":{},\"e\":{\"docs\":{},\"f\":{\"docs\":{},\"t\":{\"docs\":{\"42\":{\"ref\":42,\"tf\":0.07142857142857142}}}}}}}}}}},\"p\":{\"docs\":{},\"r\":{\"docs\":{},\"i\":{\"docs\":{},\"m\":{\"docs\":{},\"a\":{\"docs\":{},\"r\":{\"docs\":{},\"i\":{\"docs\":{\"39\":{\"ref\":39,\"tf\":0.012658227848101266}}}}}}}},\"o\":{\"docs\":{},\"s\":{\"docs\":{},\"i\":{\"docs\":{},\"t\":{\"docs\":{\"95\":{\"ref\":95,\"tf\":0.009345794392523364}}}}}}},\"s\":{\"docs\":{},\"e\":{\"docs\":{},\"c\":{\"docs\":{},\"o\":{\"docs\":{},\"n\":{\"docs\":{},\"d\":{\"docs\":{},\"a\":{\"docs\":{},\"r\":{\"docs\":{},\"i\":{\"docs\":{\"39\":{\"ref\":39,\"tf\":0.012658227848101266}}}}}}}}}},\"u\":{\"docs\":{},\"c\":{\"docs\":{},\"c\":{\"docs\":{},\"e\":{\"docs\":{},\"s\":{\"docs\":{},\"s\":{\"docs\":{\"39\":{\"ref\":39,\"tf\":0.012658227848101266}}}}}}}}},\"w\":{\"docs\":{},\"a\":{\"docs\":{},\"r\":{\"docs\":{},\"n\":{\"docs\":{\"39\":{\"ref\":39,\"tf\":0.012658227848101266}}}}}}}},\"l\":{\"docs\":{\"55\":{\"ref\":55,\"tf\":2.5}},\"e\":{\"docs\":{},\"t\":{\"docs\":{\"48\":{\"ref\":48,\"tf\":0.023255813953488372},\"57\":{\"ref\":57,\"tf\":0.0023584905660377358},\"104\":{\"ref\":104,\"tf\":0.00423728813559322},\"134\":{\"ref\":134,\"tf\":0.0011507479861910242}}}}},\"'\":{\"docs\":{\"95\":{\"ref\":95,\"tf\":0.009345794392523364}}},\"&\":{\"docs\":{},\"#\":{\"3\":{\"9\":{\"docs\":{},\";\":{\"docs\":{\"118\":{\"ref\":118,\"tf\":0.009523809523809525},\"123\":{\"ref\":123,\"tf\":0.0035211267605633804}}}},\"docs\":{}},\"docs\":{}}}},\"t\":{\"docs\":{},\"a\":{\"docs\":{},\"o\":{\"docs\":{},\"u\":{\"docs\":{},\"i\":{\"docs\":{},\"n\":{\"docs\":{\"38\":{\"ref\":38,\"tf\":0.011627906976744186}}}}}}}},\"s\":{\"docs\":{},\"k\":{\"docs\":{\"50\":{\"ref\":50,\"tf\":0.008928571428571428},\"54\":{\"ref\":54,\"tf\":0.021879021879021878},\"59\":{\"ref\":59,\"tf\":0.005571030640668524},\"136\":{\"ref\":136,\"tf\":0.005050505050505051}},\".\":{\"docs\":{},\"t\":{\"docs\":{},\"i\":{\"docs\":{},\"t\":{\"docs\":{},\"l\":{\"docs\":{\"54\":{\"ref\":54,\"tf\":0.007722007722007722}}}}}}},\"<\":{\"docs\":{},\"/\":{\"docs\":{},\"b\":{\"docs\":{},\"u\":{\"docs\":{},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"o\":{\"docs\":{},\"n\":{\"docs\":{\"54\":{\"ref\":54,\"tf\":0.001287001287001287}}}}}}}},\"h\":{\"1\":{\"docs\":{\"54\":{\"ref\":54,\"tf\":0.001287001287001287}}},\"docs\":{}}}}},\"t\":{\"docs\":{\"114\":{\"ref\":114,\"tf\":0.001594896331738437}}}},\"g\":{\"docs\":{\"54\":{\"ref\":54,\"tf\":0.005148005148005148},\"59\":{\"ref\":59,\"tf\":0.008356545961002786},\"104\":{\"ref\":104,\"tf\":0.00423728813559322},\"130\":{\"ref\":130,\"tf\":0.0043859649122807015},\"133\":{\"ref\":133,\"tf\":0.0016750418760469012}}},\"r\":{\"docs\":{},\"g\":{\"docs\":{},\"e\":{\"docs\":{},\"t\":{\"docs\":{\"57\":{\"ref\":57,\"tf\":0.0023584905660377358},\"58\":{\"ref\":58,\"tf\":0.00273224043715847},\"104\":{\"ref\":104,\"tf\":0.00423728813559322},\"105\":{\"ref\":105,\"tf\":0.005847953216374269},\"114\":{\"ref\":114,\"tf\":0.001594896331738437},\"120\":{\"ref\":120,\"tf\":0.006289308176100629},\"134\":{\"ref\":134,\"tf\":0.0011507479861910242}},\"e\":{\"docs\":{},\"l\":{\"docs\":{\"120\":{\"ref\":120,\"tf\":0.006289308176100629}}}}}}}}},\"e\":{\"docs\":{},\"x\":{\"docs\":{},\"t\":{\"docs\":{\"8\":{\"ref\":8,\"tf\":0.05405405405405406},\"9\":{\"ref\":9,\"tf\":0.08108108108108109},\"14\":{\"ref\":14,\"tf\":0.011494252873563218},\"21\":{\"ref\":21,\"tf\":0.0196078431372549},\"22\":{\"ref\":22,\"tf\":0.04878048780487805},\"25\":{\"ref\":25,\"tf\":0.034482758620689655},\"27\":{\"ref\":27,\"tf\":2.564516129032258},\"28\":{\"ref\":28,\"tf\":2.5384615384615383},\"29\":{\"ref\":29,\"tf\":2.5256410256410255},\"32\":{\"ref\":32,\"tf\":0.04},\"39\":{\"ref\":39,\"tf\":0.012658227848101266},\"54\":{\"ref\":54,\"tf\":0.002574002574002574},\"80\":{\"ref\":80,\"tf\":0.007692307692307693},\"88\":{\"ref\":88,\"tf\":0.019417475728155338},\"105\":{\"ref\":105,\"tf\":0.029239766081871343},\"112\":{\"ref\":112,\"tf\":0.0058823529411764705},\"114\":{\"ref\":114,\"tf\":0.01594896331738437},\"123\":{\"ref\":123,\"tf\":0.0035211267605633804},\"134\":{\"ref\":134,\"tf\":0.0011507479861910242},\"136\":{\"ref\":136,\"tf\":0.010101010101010102}},\"-\":{\"docs\":{},\"o\":{\"docs\":{},\"n\":{\"docs\":{},\"l\":{\"docs\":{},\"i\":{\"docs\":{\"39\":{\"ref\":39,\"tf\":0.012658227848101266}}}}}},\"a\":{\"docs\":{},\"l\":{\"docs\":{},\"i\":{\"docs\":{},\"g\":{\"docs\":{},\"n\":{\"docs\":{\"133\":{\"ref\":133,\"tf\":0.0033500837520938024}}}}}}}},\"e\":{\"docs\":{},\"a\":{\"docs\":{},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\"a\":{\"docs\":{\"104\":{\"ref\":104,\"tf\":0.00423728813559322}}}}}}},\"n\":{\"docs\":{},\"o\":{\"docs\":{},\"d\":{\"docs\":{\"119\":{\"ref\":119,\"tf\":0.03543307086614173}}}}},\"a\":{\"docs\":{},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\"a\":{\"docs\":{\"134\":{\"ref\":134,\"tf\":0.0011507479861910242}}}}}}}},\"m\":{\"docs\":{},\"p\":{\"docs\":{},\"l\":{\"docs\":{\"20\":{\"ref\":20,\"tf\":0.02040816326530612}},\"a\":{\"docs\":{},\"t\":{\"docs\":{\"54\":{\"ref\":54,\"tf\":0.007722007722007722},\"84\":{\"ref\":84,\"tf\":0.01818181818181818},\"110\":{\"ref\":110,\"tf\":0.030612244897959183},\"111\":{\"ref\":111,\"tf\":0.015037593984962405},\"114\":{\"ref\":114,\"tf\":0.025518341307814992},\"126\":{\"ref\":126,\"tf\":0.011111111111111112},\"127\":{\"ref\":127,\"tf\":0.006622516556291391},\"130\":{\"ref\":130,\"tf\":0.0043859649122807015},\"133\":{\"ref\":133,\"tf\":0.011725293132328308},\"136\":{\"ref\":136,\"tf\":0.005050505050505051}},\"e\":{\"docs\":{},\"u\":{\"docs\":{},\"r\":{\"docs\":{},\"l\":{\"docs\":{\"84\":{\"ref\":84,\"tf\":0.007272727272727273},\"110\":{\"ref\":110,\"tf\":0.01020408163265306},\"111\":{\"ref\":111,\"tf\":0.007518796992481203},\"114\":{\"ref\":114,\"tf\":0.006379585326953748},\"133\":{\"ref\":133,\"tf\":0.0033500837520938024},\"136\":{\"ref\":136,\"tf\":0.005050505050505051}}}}},\"s\":{\"docs\":{},\"t\":{\"docs\":{},\"r\":{\"docs\":{\"111\":{\"ref\":111,\"tf\":0.007518796992481203}}}}}}}}},\"o\":{\"docs\":{},\"r\":{\"docs\":{},\"a\":{\"docs\":{},\"r\":{\"docs\":{},\"i\":{\"docs\":{},\"l\":{\"docs\":{},\"i\":{\"docs\":{\"111\":{\"ref\":111,\"tf\":0.007518796992481203},\"124\":{\"ref\":124,\"tf\":0.010309278350515464}}}}}}}}}}},\"c\":{\"docs\":{},\"h\":{\"docs\":{},\"n\":{\"docs\":{},\"i\":{\"docs\":{},\"c\":{\"docs\":{\"34\":{\"ref\":34,\"tf\":0.016666666666666666},\"57\":{\"ref\":57,\"tf\":0.0023584905660377358}}}},\"o\":{\"docs\":{},\"l\":{\"docs\":{},\"o\":{\"docs\":{},\"g\":{\"docs\":{\"57\":{\"ref\":57,\"tf\":0.0047169811320754715},\"61\":{\"ref\":61,\"tf\":0.010869565217391304},\"135\":{\"ref\":135,\"tf\":0.003861003861003861}}}}}}}}},\"s\":{\"docs\":{},\"t\":{\"docs\":{\"54\":{\"ref\":54,\"tf\":0.006435006435006435},\"55\":{\"ref\":55,\"tf\":0.04081632653061224},\"56\":{\"ref\":56,\"tf\":0.004784688995215311},\"59\":{\"ref\":59,\"tf\":0.011142061281337047},\"60\":{\"ref\":60,\"tf\":5.0636363636363635},\"66\":{\"ref\":66,\"tf\":0.043478260869565216},\"105\":{\"ref\":105,\"tf\":0.005847953216374269},\"127\":{\"ref\":127,\"tf\":0.006622516556291391},\"133\":{\"ref\":133,\"tf\":0.0016750418760469012},\"134\":{\"ref\":134,\"tf\":0.0023014959723820483}},\"s\":{\"docs\":{},\"]\":{\"docs\":{},\"(\":{\"docs\":{},\"h\":{\"docs\":{},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"p\":{\"docs\":{},\"s\":{\"docs\":{},\":\":{\"docs\":{},\"/\":{\"docs\":{},\"/\":{\"docs\":{},\"g\":{\"docs\":{},\"i\":{\"docs\":{},\"t\":{\"docs\":{},\"h\":{\"docs\":{},\"u\":{\"docs\":{},\"b\":{\"docs\":{},\".\":{\"docs\":{},\"c\":{\"docs\":{},\"o\":{\"docs\":{},\"m\":{\"docs\":{},\"/\":{\"docs\":{},\"d\":{\"docs\":{},\"r\":{\"docs\":{},\"i\":{\"docs\":{},\"f\":{\"docs\":{},\"t\":{\"docs\":{},\"y\":{\"docs\":{},\"c\":{\"docs\":{},\"o\":{\"docs\":{},\"/\":{\"docs\":{},\"i\":{\"docs\":{},\"o\":{\"docs\":{},\"n\":{\"docs\":{},\"i\":{\"docs\":{},\"c\":{\"docs\":{},\"/\":{\"docs\":{},\"b\":{\"docs\":{},\"l\":{\"docs\":{},\"o\":{\"docs\":{},\"b\":{\"docs\":{},\"/\":{\"docs\":{},\"m\":{\"docs\":{},\"a\":{\"docs\":{},\"s\":{\"docs\":{},\"t\":{\"docs\":{},\"e\":{\"docs\":{},\"r\":{\"docs\":{},\"/\":{\"docs\":{},\"t\":{\"docs\":{},\"e\":{\"docs\":{},\"s\":{\"docs\":{},\"t\":{\"docs\":{},\"/\":{\"docs\":{},\"u\":{\"docs\":{},\"n\":{\"docs\":{},\"i\":{\"docs\":{},\"t\":{\"docs\":{},\"/\":{\"docs\":{},\"u\":{\"docs\":{},\"t\":{\"docs\":{},\"i\":{\"docs\":{},\"l\":{\"docs\":{},\"s\":{\"docs\":{},\"/\":{\"docs\":{},\"t\":{\"docs\":{},\"a\":{\"docs\":{},\"p\":{\"docs\":{},\".\":{\"docs\":{},\"u\":{\"docs\":{},\"n\":{\"docs\":{},\"i\":{\"docs\":{},\"t\":{\"docs\":{},\".\":{\"docs\":{},\"j\":{\"docs\":{\"104\":{\"ref\":104,\"tf\":0.00423728813559322}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},\"l\":{\"docs\":{},\"l\":{\"docs\":{\"56\":{\"ref\":56,\"tf\":0.001594896331738437},\"58\":{\"ref\":58,\"tf\":0.00273224043715847},\"59\":{\"ref\":59,\"tf\":0.005571030640668524},\"72\":{\"ref\":72,\"tf\":0.002331002331002331},\"98\":{\"ref\":98,\"tf\":0.018867924528301886},\"115\":{\"ref\":115,\"tf\":0.006493506493506494},\"123\":{\"ref\":123,\"tf\":0.0035211267605633804},\"129\":{\"ref\":129,\"tf\":0.0017391304347826088},\"133\":{\"ref\":133,\"tf\":0.0016750418760469012},\"134\":{\"ref\":134,\"tf\":0.0011507479861910242}}}},\"r\":{\"docs\":{},\"m\":{\"docs\":{\"57\":{\"ref\":57,\"tf\":0.0023584905660377358}},\"i\":{\"docs\":{},\"n\":{\"docs\":{\"129\":{\"ref\":129,\"tf\":0.0034782608695652175}}}}}},\"n\":{\"docs\":{\"72\":{\"ref\":72,\"tf\":0.004662004662004662}},\"d\":{\"docs\":{\"67\":{\"ref\":67,\"tf\":0.027777777777777776}}}},\"a\":{\"docs\":{},\"c\":{\"docs\":{},\"h\":{\"docs\":{\"126\":{\"ref\":126,\"tf\":0.011111111111111112}}}}}},\"r\":{\"docs\":{},\"a\":{\"docs\":{},\"n\":{\"docs\":{},\"s\":{\"docs\":{},\"p\":{\"docs\":{},\"a\":{\"docs\":{},\"r\":{\"docs\":{\"8\":{\"ref\":8,\"tf\":0.05405405405405406},\"130\":{\"ref\":130,\"tf\":0.008771929824561403}}}}},\"i\":{\"docs\":{},\"t\":{\"docs\":{\"82\":{\"ref\":82,\"tf\":0.0078125},\"84\":{\"ref\":84,\"tf\":0.01090909090909091},\"102\":{\"ref\":102,\"tf\":0.020833333333333332},\"106\":{\"ref\":106,\"tf\":0.013333333333333334},\"112\":{\"ref\":112,\"tf\":0.011764705882352941},\"123\":{\"ref\":123,\"tf\":0.01056338028169014}}}},\"f\":{\"docs\":{},\"o\":{\"docs\":{},\"r\":{\"docs\":{},\"m\":{\"docs\":{\"120\":{\"ref\":120,\"tf\":0.006289308176100629}},\"e\":{\"docs\":{},\"n\":{\"docs\":{},\"d\":{\"docs\":{\"120\":{\"ref\":120,\"tf\":0.006289308176100629}}}}},\"s\":{\"docs\":{},\"t\":{\"docs\":{},\"a\":{\"docs\":{},\"r\":{\"docs\":{},\"t\":{\"docs\":{\"120\":{\"ref\":120,\"tf\":0.006289308176100629}}}}}}}}}},\"e\":{\"docs\":{},\"r\":{\"docs\":{\"135\":{\"ref\":135,\"tf\":0.0019305019305019305}}}}}}},\"d\":{\"docs\":{},\"i\":{\"docs\":{},\"t\":{\"docs\":{\"38\":{\"ref\":38,\"tf\":0.011627906976744186},\"56\":{\"ref\":56,\"tf\":0.001594896331738437}}}}},\"c\":{\"docs\":{},\"k\":{\"docs\":{\"72\":{\"ref\":72,\"tf\":0.023310023310023312},\"84\":{\"ref\":84,\"tf\":0.0036363636363636364},\"123\":{\"ref\":123,\"tf\":0.0035211267605633804},\"134\":{\"ref\":134,\"tf\":0.0011507479861910242}},\"i\":{\"docs\":{},\"n\":{\"docs\":{},\"g\":{\"docs\":{},\"_\":{\"docs\":{},\"e\":{\"docs\":{},\"x\":{\"docs\":{},\"p\":{\"docs\":{},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\"s\":{\"docs\":{},\"s\":{\"docs\":{\"72\":{\"ref\":72,\"tf\":0.002331002331002331}}}}}}}}}}}}}}}},\"i\":{\"docs\":{},\"c\":{\"docs\":{},\"k\":{\"docs\":{\"47\":{\"ref\":47,\"tf\":0.01},\"129\":{\"ref\":129,\"tf\":0.0017391304347826088},\"134\":{\"ref\":134,\"tf\":0.0034522439585730723}}}},\"g\":{\"docs\":{},\"g\":{\"docs\":{},\"e\":{\"docs\":{},\"r\":{\"docs\":{\"54\":{\"ref\":54,\"tf\":0.001287001287001287},\"78\":{\"ref\":78,\"tf\":0.011235955056179775},\"90\":{\"ref\":90,\"tf\":0.010416666666666666},\"105\":{\"ref\":105,\"tf\":0.011695906432748537},\"113\":{\"ref\":113,\"tf\":0.014184397163120567},\"114\":{\"ref\":114,\"tf\":0.001594896331738437},\"120\":{\"ref\":120,\"tf\":0.006289308176100629},\"121\":{\"ref\":121,\"tf\":0.005813953488372093},\"133\":{\"ref\":133,\"tf\":0.0016750418760469012}},\".\":{\"docs\":{},\"i\":{\"docs\":{},\"o\":{\"docs\":{\"66\":{\"ref\":66,\"tf\":0.043478260869565216}}}}},\"(\":{\"docs\":{},\"e\":{\"docs\":{},\"v\":{\"docs\":{},\"e\":{\"docs\":{},\"n\":{\"docs\":{},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"y\":{\"docs\":{},\"p\":{\"docs\":{\"120\":{\"ref\":120,\"tf\":0.006289308176100629}}}}}}}}}}}}}}}},\"y\":{\"docs\":{\"54\":{\"ref\":54,\"tf\":0.002574002574002574},\"56\":{\"ref\":56,\"tf\":0.003189792663476874},\"59\":{\"ref\":59,\"tf\":0.002785515320334262},\"60\":{\"ref\":60,\"tf\":0.0022727272727272726},\"84\":{\"ref\":84,\"tf\":0.0036363636363636364},\"103\":{\"ref\":103,\"tf\":0.006493506493506494},\"130\":{\"ref\":130,\"tf\":0.0043859649122807015},\"133\":{\"ref\":133,\"tf\":0.0033500837520938024}}},\"u\":{\"docs\":{},\"e\":{\"docs\":{\"71\":{\"ref\":71,\"tf\":0.008},\"74\":{\"ref\":74,\"tf\":0.029940119760479042},\"80\":{\"ref\":80,\"tf\":0.007692307692307693},\"90\":{\"ref\":90,\"tf\":0.020833333333333332},\"92\":{\"ref\":92,\"tf\":0.02857142857142857},\"94\":{\"ref\":94,\"tf\":0.022222222222222223},\"103\":{\"ref\":103,\"tf\":0.012987012987012988},\"105\":{\"ref\":105,\"tf\":0.017543859649122806},\"114\":{\"ref\":114,\"tf\":0.001594896331738437},\"118\":{\"ref\":118,\"tf\":0.009523809523809525},\"121\":{\"ref\":121,\"tf\":0.005813953488372093},\"130\":{\"ref\":130,\"tf\":0.0043859649122807015},\"133\":{\"ref\":133,\"tf\":0.0033500837520938024},\"136\":{\"ref\":136,\"tf\":0.005050505050505051}}}},\"o\":{\"docs\":{},\"u\":{\"docs\":{},\"b\":{\"docs\":{},\"l\":{\"docs\":{\"134\":{\"ref\":134,\"tf\":0.0011507479861910242}}}}}}},\"h\":{\"docs\":{},\"i\":{\"docs\":{},\"r\":{\"docs\":{},\"d\":{\"docs\":{\"13\":{\"ref\":13,\"tf\":0.21153846153846154},\"16\":{\"ref\":16,\"tf\":0.014705882352941176},\"133\":{\"ref\":133,\"tf\":0.0016750418760469012}},\"-\":{\"docs\":{},\"p\":{\"docs\":{},\"a\":{\"docs\":{},\"r\":{\"docs\":{},\"t\":{\"docs\":{},\"i\":{\"docs\":{\"104\":{\"ref\":104,\"tf\":0.00423728813559322}}}}}}}}}},\"n\":{\"docs\":{},\"g\":{\"docs\":{\"34\":{\"ref\":34,\"tf\":0.016666666666666666},\"54\":{\"ref\":54,\"tf\":0.003861003861003861},\"60\":{\"ref\":60,\"tf\":0.0022727272727272726},\"61\":{\"ref\":61,\"tf\":0.010869565217391304},\"72\":{\"ref\":72,\"tf\":0.004662004662004662},\"113\":{\"ref\":113,\"tf\":0.0070921985815602835},\"114\":{\"ref\":114,\"tf\":0.001594896331738437},\"129\":{\"ref\":129,\"tf\":0.0034782608695652175},\"134\":{\"ref\":134,\"tf\":0.0011507479861910242},\"135\":{\"ref\":135,\"tf\":0.007722007722007722},\"136\":{\"ref\":136,\"tf\":0.015151515151515152}}},\"k\":{\"docs\":{\"57\":{\"ref\":57,\"tf\":0.0023584905660377358},\"72\":{\"ref\":72,\"tf\":0.002331002331002331},\"129\":{\"ref\":129,\"tf\":0.0034782608695652175},\"134\":{\"ref\":134,\"tf\":0.0011507479861910242},\"135\":{\"ref\":135,\"tf\":0.0019305019305019305}},\"s\":{\"docs\":{},\"t\":{\"docs\":{},\"e\":{\"docs\":{},\"r\":{\"docs\":{},\".\":{\"docs\":{},\"i\":{\"docs\":{},\"o\":{\"docs\":{\"54\":{\"ref\":54,\"tf\":0.001287001287001287}}}}}}}}}}}},\"a\":{\"docs\":{},\"t\":{\"docs\":{},\"'\":{\"docs\":{\"14\":{\"ref\":14,\"tf\":0.011494252873563218},\"18\":{\"ref\":18,\"tf\":0.02},\"130\":{\"ref\":130,\"tf\":0.0043859649122807015},\"132\":{\"ref\":132,\"tf\":0.01282051282051282},\"133\":{\"ref\":133,\"tf\":0.0016750418760469012}}}},\"n\":{\"docs\":{},\"k\":{\"docs\":{\"44\":{\"ref\":44,\"tf\":0.018518518518518517}}}}},\"u\":{\"docs\":{},\"m\":{\"docs\":{},\"b\":{\"docs\":{},\"n\":{\"docs\":{},\"a\":{\"docs\":{},\"i\":{\"docs\":{},\"l\":{\"docs\":{\"14\":{\"ref\":14,\"tf\":0.011494252873563218},\"18\":{\"ref\":18,\"tf\":0.02},\"19\":{\"ref\":19,\"tf\":5.06},\"25\":{\"ref\":25,\"tf\":0.022988505747126436},\"80\":{\"ref\":80,\"tf\":0.015384615384615385},\"123\":{\"ref\":123,\"tf\":0.0035211267605633804}}}}}}}}},\"e\":{\"docs\":{},\"y\":{\"docs\":{},\"'\":{\"docs\":{},\"r\":{\"docs\":{\"21\":{\"ref\":21,\"tf\":0.00980392156862745},\"134\":{\"ref\":134,\"tf\":0.0011507479861910242}}},\"l\":{\"docs\":{},\"l\":{\"docs\":{\"43\":{\"ref\":43,\"tf\":0.006944444444444444}}}}}},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\"'\":{\"docs\":{\"28\":{\"ref\":28,\"tf\":0.038461538461538464},\"43\":{\"ref\":43,\"tf\":0.006944444444444444},\"48\":{\"ref\":48,\"tf\":0.011627906976744186},\"104\":{\"ref\":104,\"tf\":0.00423728813559322},\"129\":{\"ref\":129,\"tf\":0.0017391304347826088},\"134\":{\"ref\":134,\"tf\":0.0011507479861910242}}},\"f\":{\"docs\":{},\"o\":{\"docs\":{},\"r\":{\"docs\":{\"107\":{\"ref\":107,\"tf\":0.012658227848101266},\"134\":{\"ref\":134,\"tf\":0.0011507479861910242}}}}}}},\"m\":{\"docs\":{},\"e\":{\"docs\":{\"37\":{\"ref\":37,\"tf\":0.0625},\"50\":{\"ref\":50,\"tf\":0.017857142857142856},\"129\":{\"ref\":129,\"tf\":0.0034782608695652175}}},\"s\":{\"docs\":{},\"e\":{\"docs\":{},\"l\":{\"docs\":{},\"v\":{\"docs\":{\"80\":{\"ref\":80,\"tf\":0.007692307692307693}}}}}}},\"n\":{\"docs\":{},\"(\":{\"docs\":{},\"f\":{\"docs\":{},\"u\":{\"docs\":{},\"n\":{\"docs\":{},\"c\":{\"docs\":{},\"t\":{\"docs\":{},\"i\":{\"docs\":{},\"o\":{\"docs\":{},\"n\":{\"docs\":{},\"(\":{\"docs\":{},\"m\":{\"docs\":{},\"o\":{\"docs\":{},\"d\":{\"docs\":{\"111\":{\"ref\":111,\"tf\":0.007518796992481203}}}}},\"r\":{\"docs\":{\"114\":{\"ref\":114,\"tf\":0.001594896331738437}}},\"p\":{\"docs\":{},\"a\":{\"docs\":{},\"s\":{\"docs\":{},\"s\":{\"docs\":{},\"w\":{\"docs\":{},\"o\":{\"docs\":{},\"r\":{\"docs\":{},\"d\":{\"docs\":{\"136\":{\"ref\":136,\"tf\":0.010101010101010102}}}}}}}}}}}}}}}}}}}}},\"o\":{\"docs\":{},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\"t\":{\"docs\":{\"135\":{\"ref\":135,\"tf\":0.0019305019305019305}}}}}}},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\"e\":{\"docs\":{\"43\":{\"ref\":43,\"tf\":0.013888888888888888},\"60\":{\"ref\":60,\"tf\":0.0022727272727272726},\"72\":{\"ref\":72,\"tf\":0.002331002331002331},\"107\":{\"ref\":107,\"tf\":0.02531645569620253},\"133\":{\"ref\":133,\"tf\":0.0016750418760469012}}}},\"o\":{\"docs\":{},\"u\":{\"docs\":{},\"g\":{\"docs\":{},\"h\":{\"docs\":{\"55\":{\"ref\":55,\"tf\":0.02040816326530612},\"56\":{\"ref\":56,\"tf\":0.001594896331738437},\"59\":{\"ref\":59,\"tf\":0.002785515320334262},\"84\":{\"ref\":84,\"tf\":0.0036363636363636364},\"96\":{\"ref\":96,\"tf\":0.017857142857142856},\"106\":{\"ref\":106,\"tf\":0.013333333333333334},\"115\":{\"ref\":115,\"tf\":0.003246753246753247},\"123\":{\"ref\":123,\"tf\":0.0035211267605633804},\"133\":{\"ref\":133,\"tf\":0.006700167504187605},\"135\":{\"ref\":135,\"tf\":0.005791505791505791},\"136\":{\"ref\":136,\"tf\":0.005050505050505051}},\"o\":{\"docs\":{},\"u\":{\"docs\":{},\"t\":{\"docs\":{\"52\":{\"ref\":52,\"tf\":0.010416666666666666},\"84\":{\"ref\":84,\"tf\":0.0036363636363636364},\"123\":{\"ref\":123,\"tf\":0.0035211267605633804},\"129\":{\"ref\":129,\"tf\":0.0034782608695652175}}}}}}}},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"l\":{\"docs\":{\"119\":{\"ref\":119,\"tf\":0.007874015748031496}}}}},\"w\":{\"docs\":{\"134\":{\"ref\":134,\"tf\":0.0011507479861910242}},\"n\":{\"docs\":{\"134\":{\"ref\":134,\"tf\":0.0011507479861910242}}}}}},\"o\":{\"docs\":{},\"s\":{\"docs\":{},\"e\":{\"docs\":{\"50\":{\"ref\":50,\"tf\":0.008928571428571428},\"54\":{\"ref\":54,\"tf\":0.001287001287001287},\"56\":{\"ref\":56,\"tf\":0.001594896331738437},\"57\":{\"ref\":57,\"tf\":0.0047169811320754715},\"133\":{\"ref\":133,\"tf\":0.0016750418760469012},\"134\":{\"ref\":134,\"tf\":0.0034522439585730723},\"136\":{\"ref\":136,\"tf\":0.005050505050505051}}}},\"u\":{\"docs\":{},\"g\":{\"docs\":{},\"h\":{\"docs\":{\"56\":{\"ref\":56,\"tf\":0.001594896331738437},\"135\":{\"ref\":135,\"tf\":0.0019305019305019305}},\"t\":{\"docs\":{\"134\":{\"ref\":134,\"tf\":0.0011507479861910242}}}}},\"s\":{\"docs\":{},\"a\":{\"docs\":{},\"n\":{\"docs\":{},\"d\":{\"docs\":{\"72\":{\"ref\":72,\"tf\":0.002331002331002331},\"134\":{\"ref\":134,\"tf\":0.0011507479861910242}}}}}}}}},\"w\":{\"docs\":{},\"i\":{\"docs\":{},\"x\":{\"docs\":{\"15\":{\"ref\":15,\"tf\":0.022727272727272728}}},\"n\":{\"docs\":{},\"k\":{\"docs\":{},\"i\":{\"docs\":{\"18\":{\"ref\":18,\"tf\":0.02}}}}},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"e\":{\"docs\":{},\"r\":{\"docs\":{\"21\":{\"ref\":21,\"tf\":0.00980392156862745}}}}}}},\"o\":{\"docs\":{\"43\":{\"ref\":43,\"tf\":0.006944444444444444},\"59\":{\"ref\":59,\"tf\":0.002785515320334262},\"72\":{\"ref\":72,\"tf\":0.006993006993006993},\"115\":{\"ref\":115,\"tf\":0.003246753246753247},\"134\":{\"ref\":134,\"tf\":0.0011507479861910242},\"136\":{\"ref\":136,\"tf\":0.005050505050505051}}},\"e\":{\"docs\":{},\"a\":{\"docs\":{},\"k\":{\"docs\":{\"129\":{\"ref\":129,\"tf\":0.0017391304347826088}}}}}},\"u\":{\"docs\":{},\"l\":{\"docs\":{},\"l\":{\"docs\":{},\"i\":{\"docs\":{\"18\":{\"ref\":18,\"tf\":0.02}}}}},\"r\":{\"docs\":{},\"n\":{\"docs\":{\"48\":{\"ref\":48,\"tf\":0.023255813953488372},\"56\":{\"ref\":56,\"tf\":0.003189792663476874},\"59\":{\"ref\":59,\"tf\":0.002785515320334262}}}},\"t\":{\"docs\":{},\"o\":{\"docs\":{},\"r\":{\"docs\":{},\"i\":{\"docs\":{\"54\":{\"ref\":54,\"tf\":0.003861003861003861},\"128\":{\"ref\":128,\"tf\":6.035714285714286},\"133\":{\"ref\":133,\"tf\":3.3651591289782243}},\"a\":{\"docs\":{},\"l\":{\"docs\":{},\"s\":{\"docs\":{},\"/\":{\"docs\":{},\"c\":{\"docs\":{},\"u\":{\"docs\":{},\"s\":{\"docs\":{},\"t\":{\"docs\":{},\"o\":{\"docs\":{},\"m\":{\"docs\":{},\"i\":{\"docs\":{},\"z\":{\"docs\":{},\"i\":{\"docs\":{},\"n\":{\"docs\":{},\"g\":{\"docs\":{},\"-\":{\"docs\":{},\"i\":{\"docs\":{},\"o\":{\"docs\":{},\"n\":{\"docs\":{},\"i\":{\"docs\":{},\"c\":{\"docs\":{},\"-\":{\"docs\":{},\"w\":{\"docs\":{},\"i\":{\"docs\":{},\"t\":{\"docs\":{},\"h\":{\"docs\":{},\"-\":{\"docs\":{},\"s\":{\"docs\":{},\"a\":{\"docs\":{},\"s\":{\"docs\":{},\"s\":{\"docs\":{\"129\":{\"ref\":129,\"tf\":1}}}}}}}}}}}}}}}}}}}}}}}}}}}}},\"f\":{\"docs\":{},\"a\":{\"docs\":{},\"d\":{\"docs\":{},\"e\":{\"docs\":{},\"-\":{\"docs\":{},\"s\":{\"docs\":{},\"t\":{\"docs\":{},\"a\":{\"docs\":{},\"t\":{\"docs\":{},\"u\":{\"docs\":{},\"s\":{\"docs\":{},\"-\":{\"docs\":{},\"b\":{\"docs\":{},\"a\":{\"docs\":{},\"r\":{\"docs\":{\"130\":{\"ref\":130,\"tf\":1}}}}}}}}}}}}}}}},\"e\":{\"docs\":{},\"t\":{\"docs\":{},\"c\":{\"docs\":{},\"h\":{\"docs\":{},\"i\":{\"docs\":{},\"n\":{\"docs\":{},\"g\":{\"docs\":{},\"-\":{\"docs\":{},\"f\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"m\":{\"docs\":{},\"-\":{\"docs\":{},\"a\":{\"docs\":{},\"-\":{\"docs\":{},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\"m\":{\"docs\":{},\"o\":{\"docs\":{},\"t\":{\"docs\":{},\"e\":{\"docs\":{},\"-\":{\"docs\":{},\"f\":{\"docs\":{},\"e\":{\"docs\":{\"131\":{\"ref\":131,\"tf\":1}}}}}}}}}}}}}}}}}}}}}}}}}},\"u\":{\"docs\":{},\"l\":{\"docs\":{},\"l\":{\"docs\":{},\"s\":{\"docs\":{},\"c\":{\"docs\":{},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\"e\":{\"docs\":{},\"n\":{\"docs\":{},\"-\":{\"docs\":{},\"a\":{\"docs\":{},\"p\":{\"docs\":{},\"p\":{\"docs\":{\"132\":{\"ref\":132,\"tf\":1}}}}}}}}}}}}}}}},\"i\":{\"docs\":{},\"n\":{\"docs\":{},\"t\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"-\":{\"docs\":{},\"t\":{\"docs\":{},\"u\":{\"docs\":{},\"t\":{\"docs\":{},\"o\":{\"docs\":{},\"r\":{\"docs\":{},\"i\":{\"docs\":{\"133\":{\"ref\":133,\"tf\":1}}}}}}}}}}}}}}}}}}}}}}}},\"v\":{\"docs\":{\"58\":{\"ref\":58,\"tf\":0.00546448087431694},\"62\":{\"ref\":62,\"tf\":0.041666666666666664},\"129\":{\"ref\":129,\"tf\":0.0017391304347826088},\"132\":{\"ref\":132,\"tf\":0.01282051282051282}},\"a\":{\"docs\":{},\"r\":{\"docs\":{\"54\":{\"ref\":54,\"tf\":0.006435006435006435},\"72\":{\"ref\":72,\"tf\":0.002331002331002331},\"84\":{\"ref\":84,\"tf\":0.0036363636363636364},\"106\":{\"ref\":106,\"tf\":0.013333333333333334},\"114\":{\"ref\":114,\"tf\":0.004784688995215311},\"115\":{\"ref\":115,\"tf\":0.006493506493506494},\"133\":{\"ref\":133,\"tf\":0.005025125628140704}},\"i\":{\"docs\":{},\"e\":{\"docs\":{},\"t\":{\"docs\":{},\"i\":{\"docs\":{\"0\":{\"ref\":0,\"tf\":0.03225806451612903}}}}},\"o\":{\"docs\":{},\"u\":{\"docs\":{\"0\":{\"ref\":0,\"tf\":0.03225806451612903},\"3\":{\"ref\":3,\"tf\":0.019230769230769232},\"14\":{\"ref\":14,\"tf\":0.011494252873563218},\"26\":{\"ref\":26,\"tf\":0.021739130434782608},\"37\":{\"ref\":37,\"tf\":0.0625},\"55\":{\"ref\":55,\"tf\":0.02040816326530612},\"56\":{\"ref\":56,\"tf\":0.001594896331738437},\"59\":{\"ref\":59,\"tf\":0.002785515320334262},\"80\":{\"ref\":80,\"tf\":0.007692307692307693},\"84\":{\"ref\":84,\"tf\":0.0036363636363636364},\"104\":{\"ref\":104,\"tf\":0.00423728813559322}}}},\"a\":{\"docs\":{},\"b\":{\"docs\":{},\"l\":{\"docs\":{\"48\":{\"ref\":48,\"tf\":0.011627906976744186},\"50\":{\"ref\":50,\"tf\":0.008928571428571428},\"56\":{\"ref\":56,\"tf\":0.003189792663476874},\"65\":{\"ref\":65,\"tf\":0.025},\"72\":{\"ref\":72,\"tf\":0.009324009324009324},\"94\":{\"ref\":94,\"tf\":0.022222222222222223},\"129\":{\"ref\":129,\"tf\":0.020869565217391306}},\"e\":{\"docs\":{},\"s\":{\"docs\":{},\"]\":{\"docs\":{},\"(\":{\"docs\":{},\"h\":{\"docs\":{},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"p\":{\"docs\":{},\":\":{\"docs\":{},\"/\":{\"docs\":{},\"/\":{\"docs\":{},\"s\":{\"docs\":{},\"a\":{\"docs\":{},\"s\":{\"docs\":{},\"s\":{\"docs\":{},\"-\":{\"docs\":{},\"l\":{\"docs\":{},\"a\":{\"docs\":{},\"n\":{\"docs\":{},\"g\":{\"docs\":{},\".\":{\"docs\":{},\"c\":{\"docs\":{},\"o\":{\"docs\":{},\"m\":{\"docs\":{},\"/\":{\"docs\":{},\"g\":{\"docs\":{},\"u\":{\"docs\":{},\"i\":{\"docs\":{},\"d\":{\"docs\":{},\"e\":{\"docs\":{},\"#\":{\"docs\":{},\"v\":{\"docs\":{},\"a\":{\"docs\":{},\"r\":{\"docs\":{},\"i\":{\"docs\":{\"129\":{\"ref\":129,\"tf\":0.0017391304347826088}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},\"l\":{\"docs\":{},\"i\":{\"docs\":{},\"d\":{\"docs\":{\"58\":{\"ref\":58,\"tf\":0.00273224043715847}}}},\"u\":{\"docs\":{\"58\":{\"ref\":58,\"tf\":0.00273224043715847},\"91\":{\"ref\":91,\"tf\":0.0196078431372549},\"104\":{\"ref\":104,\"tf\":0.00423728813559322},\"114\":{\"ref\":114,\"tf\":0.01594896331738437},\"115\":{\"ref\":115,\"tf\":0.003246753246753247},\"129\":{\"ref\":129,\"tf\":0.0052173913043478265},\"130\":{\"ref\":130,\"tf\":0.0043859649122807015},\"133\":{\"ref\":133,\"tf\":0.0016750418760469012}},\"e\":{\"docs\":{},\"=\":{\"docs\":{},\"\\\"\":{\"docs\":{},\"t\":{\"docs\":{},\"r\":{\"docs\":{},\"u\":{\"docs\":{\"99\":{\"ref\":99,\"tf\":0.02127659574468085},\"103\":{\"ref\":103,\"tf\":0.006493506493506494}}}}}}}}}}},\"i\":{\"docs\":{},\"e\":{\"docs\":{},\"w\":{\"docs\":{\"14\":{\"ref\":14,\"tf\":0.022988505747126436},\"56\":{\"ref\":56,\"tf\":0.001594896331738437},\"60\":{\"ref\":60,\"tf\":0.0022727272727272726},\"67\":{\"ref\":67,\"tf\":0.027777777777777776},\"74\":{\"ref\":74,\"tf\":0.005988023952095809},\"82\":{\"ref\":82,\"tf\":0.015625},\"83\":{\"ref\":83,\"tf\":0.02127659574468085},\"84\":{\"ref\":84,\"tf\":0.025454545454545455},\"95\":{\"ref\":95,\"tf\":0.009345794392523364},\"98\":{\"ref\":98,\"tf\":0.018867924528301886},\"102\":{\"ref\":102,\"tf\":0.0625},\"103\":{\"ref\":103,\"tf\":0.03896103896103896},\"111\":{\"ref\":111,\"tf\":0.007518796992481203},\"112\":{\"ref\":112,\"tf\":0.0058823529411764705},\"113\":{\"ref\":113,\"tf\":0.0070921985815602835},\"115\":{\"ref\":115,\"tf\":0.00974025974025974},\"118\":{\"ref\":118,\"tf\":0.009523809523809525},\"123\":{\"ref\":123,\"tf\":0.017605633802816902},\"124\":{\"ref\":124,\"tf\":0.010309278350515464},\"133\":{\"ref\":133,\"tf\":0.0033500837520938024},\"135\":{\"ref\":135,\"tf\":0.0019305019305019305}},\"p\":{\"docs\":{},\"o\":{\"docs\":{},\"r\":{\"docs\":{},\"t\":{\"docs\":{\"2\":{\"ref\":2,\"tf\":0.025},\"48\":{\"ref\":48,\"tf\":0.011627906976744186},\"104\":{\"ref\":104,\"tf\":0.00423728813559322}}}}}},\"&\":{\"docs\":{},\"#\":{\"3\":{\"9\":{\"docs\":{},\";\":{\"docs\":{\"82\":{\"ref\":82,\"tf\":0.0078125}}}},\"docs\":{}},\"docs\":{}}},\"]\":{\"docs\":{},\"(\":{\"docs\":{},\"h\":{\"docs\":{},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"p\":{\"docs\":{},\":\":{\"docs\":{},\"/\":{\"docs\":{},\"/\":{\"docs\":{},\"i\":{\"docs\":{},\"o\":{\"docs\":{},\"n\":{\"docs\":{},\"i\":{\"docs\":{},\"c\":{\"docs\":{},\"f\":{\"docs\":{},\"r\":{\"docs\":{},\"a\":{\"docs\":{},\"m\":{\"docs\":{},\"e\":{\"docs\":{},\"w\":{\"docs\":{},\"o\":{\"docs\":{},\"r\":{\"docs\":{},\"k\":{\"docs\":{},\".\":{\"docs\":{},\"c\":{\"docs\":{},\"o\":{\"docs\":{},\"m\":{\"docs\":{},\"/\":{\"docs\":{},\"d\":{\"docs\":{},\"o\":{\"docs\":{},\"c\":{\"docs\":{},\"s\":{\"docs\":{},\"/\":{\"docs\":{},\"a\":{\"docs\":{},\"p\":{\"docs\":{},\"i\":{\"docs\":{},\"/\":{\"docs\":{},\"d\":{\"docs\":{},\"i\":{\"docs\":{},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\"c\":{\"docs\":{},\"t\":{\"docs\":{},\"i\":{\"docs\":{},\"v\":{\"docs\":{},\"e\":{\"docs\":{},\"/\":{\"docs\":{},\"i\":{\"docs\":{},\"o\":{\"docs\":{},\"n\":{\"docs\":{},\"s\":{\"docs\":{},\"c\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"l\":{\"docs\":{\"103\":{\"ref\":103,\"tf\":0.006493506493506494}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},\"s\":{\"docs\":{},\"u\":{\"docs\":{},\"a\":{\"docs\":{},\"l\":{\"docs\":{\"21\":{\"ref\":21,\"tf\":0.00980392156862745}}}}},\"i\":{\"docs\":{},\"t\":{\"docs\":{\"58\":{\"ref\":58,\"tf\":0.00273224043715847},\"84\":{\"ref\":84,\"tf\":0.0036363636363636364}}},\"b\":{\"docs\":{},\"l\":{\"docs\":{\"72\":{\"ref\":72,\"tf\":0.002331002331002331},\"82\":{\"ref\":82,\"tf\":0.0078125},\"92\":{\"ref\":92,\"tf\":0.02857142857142857},\"123\":{\"ref\":123,\"tf\":0.0035211267605633804}}}},\"o\":{\"docs\":{},\"n\":{\"docs\":{\"135\":{\"ref\":135,\"tf\":0.005791505791505791}}}}}},\"r\":{\"docs\":{},\"t\":{\"docs\":{},\"u\":{\"docs\":{},\"a\":{\"docs\":{},\"l\":{\"docs\":{\"26\":{\"ref\":26,\"tf\":0.021739130434782608},\"56\":{\"ref\":56,\"tf\":0.001594896331738437},\"104\":{\"ref\":104,\"tf\":0.00423728813559322},\"134\":{\"ref\":134,\"tf\":0.0011507479861910242}}}}}}},\"d\":{\"docs\":{},\"e\":{\"docs\":{},\"o\":{\"docs\":{\"54\":{\"ref\":54,\"tf\":0.003861003861003861},\"84\":{\"ref\":84,\"tf\":0.0036363636363636364},\"127\":{\"ref\":127,\"tf\":0.006622516556291391}}}}},\"t\":{\"docs\":{},\"a\":{\"docs\":{},\"l\":{\"docs\":{\"134\":{\"ref\":134,\"tf\":0.0011507479861910242}}}}}},\"e\":{\"docs\":{},\"r\":{\"docs\":{},\"i\":{\"docs\":{\"14\":{\"ref\":14,\"tf\":0.011494252873563218},\"54\":{\"ref\":54,\"tf\":0.002574002574002574},\"57\":{\"ref\":57,\"tf\":0.0023584905660377358},\"60\":{\"ref\":60,\"tf\":0.0022727272727272726},\"84\":{\"ref\":84,\"tf\":0.0036363636363636364},\"135\":{\"ref\":135,\"tf\":0.003861003861003861}},\"f\":{\"docs\":{},\"i\":{\"docs\":{\"129\":{\"ref\":129,\"tf\":0.0017391304347826088}}}}},\"s\":{\"docs\":{},\"i\":{\"docs\":{},\"t\":{\"docs\":{},\"i\":{\"docs\":{},\"l\":{\"docs\":{\"14\":{\"ref\":14,\"tf\":0.011494252873563218}}}}},\"o\":{\"docs\":{},\"n\":{\"docs\":{\"54\":{\"ref\":54,\"tf\":0.002574002574002574},\"56\":{\"ref\":56,\"tf\":0.006379585326953748},\"60\":{\"ref\":60,\"tf\":0.004545454545454545},\"62\":{\"ref\":62,\"tf\":0.041666666666666664},\"66\":{\"ref\":66,\"tf\":0.043478260869565216},\"104\":{\"ref\":104,\"tf\":0.00423728813559322},\"114\":{\"ref\":114,\"tf\":0.001594896331738437},\"121\":{\"ref\":121,\"tf\":0.011627906976744186},\"129\":{\"ref\":129,\"tf\":0.0052173913043478265},\"135\":{\"ref\":135,\"tf\":0.003861003861003861}}}}}},\"t\":{\"docs\":{},\"i\":{\"docs\":{},\"c\":{\"docs\":{\"43\":{\"ref\":43,\"tf\":0.006944444444444444},\"47\":{\"ref\":47,\"tf\":2.54},\"74\":{\"ref\":74,\"tf\":0.005988023952095809},\"90\":{\"ref\":90,\"tf\":0.010416666666666666}}}}},\"b\":{\"docs\":{},\"o\":{\"docs\":{},\"s\":{\"docs\":{\"58\":{\"ref\":58,\"tf\":0.00273224043715847}}}}}},\"n\":{\"docs\":{},\"k\":{\"docs\":{},\"m\":{\"docs\":{},\"a\":{\"docs\":{},\"n\":{\"docs\":{\"18\":{\"ref\":18,\"tf\":0.04}}}}}},\"d\":{\"docs\":{},\"o\":{\"docs\":{},\"r\":{\"docs\":{\"135\":{\"ref\":135,\"tf\":0.0019305019305019305}}}}}}}},\"i\":{\"docs\":{},\"d\":{\"docs\":{\"60\":{\"ref\":60,\"tf\":0.0022727272727272726},\"72\":{\"ref\":72,\"tf\":0.004662004662004662},\"113\":{\"ref\":113,\"tf\":0.014184397163120567},\"115\":{\"ref\":115,\"tf\":0.01948051948051948},\"134\":{\"ref\":134,\"tf\":0.0011507479861910242}},\"e\":{\"docs\":{},\"a\":{\"docs\":{\"1\":{\"ref\":1,\"tf\":0.045454545454545456},\"134\":{\"ref\":134,\"tf\":0.0011507479861910242}}},\"n\":{\"docs\":{},\"t\":{\"docs\":{\"72\":{\"ref\":72,\"tf\":0.009324009324009324},\"129\":{\"ref\":129,\"tf\":0.0017391304347826088}},\"i\":{\"docs\":{},\"f\":{\"docs\":{},\"i\":{\"docs\":{\"54\":{\"ref\":54,\"tf\":0.001287001287001287},\"74\":{\"ref\":74,\"tf\":0.005988023952095809},\"80\":{\"ref\":80,\"tf\":0.007692307692307693},\"82\":{\"ref\":82,\"tf\":0.0078125},\"90\":{\"ref\":90,\"tf\":0.010416666666666666},\"93\":{\"ref\":93,\"tf\":0.014084507042253521},\"94\":{\"ref\":94,\"tf\":0.011111111111111112},\"96\":{\"ref\":96,\"tf\":0.017857142857142856}}}}}}}},\"=\":{\"docs\":{},\"\\\"\":{\"docs\":{},\"n\":{\"docs\":{},\"e\":{\"docs\":{},\"w\":{\"docs\":{},\"-\":{\"docs\":{},\"t\":{\"docs\":{},\"a\":{\"docs\":{},\"s\":{\"docs\":{},\"k\":{\"docs\":{},\".\":{\"docs\":{},\"h\":{\"docs\":{},\"t\":{\"docs\":{},\"m\":{\"docs\":{},\"l\":{\"docs\":{\"54\":{\"ref\":54,\"tf\":0.001287001287001287}}}}}}}}}}}}}}},\"i\":{\"docs\":{},\"n\":{\"docs\":{},\"t\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"-\":{\"docs\":{},\"p\":{\"docs\":{},\"a\":{\"docs\":{},\"g\":{\"docs\":{\"133\":{\"ref\":133,\"tf\":0.0016750418760469012}}}}}}}}}}},\"l\":{\"docs\":{},\"i\":{\"docs\":{},\"s\":{\"docs\":{},\"t\":{\"docs\":{\"133\":{\"ref\":133,\"tf\":0.0016750418760469012}}}}},\"o\":{\"docs\":{},\"g\":{\"docs\":{},\"o\":{\"docs\":{\"133\":{\"ref\":133,\"tf\":0.0016750418760469012}}}}}}}},\"(\":{\"docs\":{},\"i\":{\"docs\":{},\"t\":{\"docs\":{},\"e\":{\"docs\":{},\"m\":{\"docs\":{\"72\":{\"ref\":72,\"tf\":0.002331002331002331}},\")\":{\"docs\":{},\"&\":{\"docs\":{},\"#\":{\"3\":{\"9\":{\"docs\":{\"72\":{\"ref\":72,\"tf\":0.002331002331002331}}},\"docs\":{}},\"docs\":{}}}}}}}}}},\"'\":{\"docs\":{},\"m\":{\"docs\":{\"2\":{\"ref\":2,\"tf\":0.175},\"18\":{\"ref\":18,\"tf\":0.04},\"22\":{\"ref\":22,\"tf\":0.0975609756097561},\"83\":{\"ref\":83,\"tf\":0.02127659574468085},\"134\":{\"ref\":134,\"tf\":0.0023014959723820483},\"135\":{\"ref\":135,\"tf\":0.0019305019305019305}}},\"l\":{\"docs\":{},\"l\":{\"docs\":{\"134\":{\"ref\":134,\"tf\":0.0011507479861910242}}}},\"v\":{\"docs\":{\"134\":{\"ref\":134,\"tf\":0.0011507479861910242}}}},\"o\":{\"docs\":{\"38\":{\"ref\":38,\"tf\":0.011627906976744186},\"56\":{\"ref\":56,\"tf\":0.012759170653907496},\"57\":{\"ref\":57,\"tf\":0.0023584905660377358},\"60\":{\"ref\":60,\"tf\":0.022727272727272728},\"65\":{\"ref\":65,\"tf\":0.025},\"67\":{\"ref\":67,\"tf\":0.027777777777777776},\"74\":{\"ref\":74,\"tf\":0.011976047904191617},\"99\":{\"ref\":99,\"tf\":0.02127659574468085},\"103\":{\"ref\":103,\"tf\":0.012987012987012988},\"121\":{\"ref\":121,\"tf\":0.005813953488372093},\"127\":{\"ref\":127,\"tf\":0.039735099337748346},\"130\":{\"ref\":130,\"tf\":0.008771929824561403},\"132\":{\"ref\":132,\"tf\":2.5128205128205128},\"136\":{\"ref\":136,\"tf\":0.005050505050505051}},\"n\":{\"docs\":{},\"i\":{\"docs\":{},\"c\":{\"docs\":{\"2\":{\"ref\":2,\"tf\":0.025},\"26\":{\"ref\":26,\"tf\":0.021739130434782608},\"34\":{\"ref\":34,\"tf\":0.016666666666666666},\"35\":{\"ref\":35,\"tf\":0.01818181818181818},\"36\":{\"ref\":36,\"tf\":0.017857142857142856},\"37\":{\"ref\":37,\"tf\":0.0625},\"39\":{\"ref\":39,\"tf\":0.012658227848101266},\"43\":{\"ref\":43,\"tf\":0.006944444444444444},\"49\":{\"ref\":49,\"tf\":0.08333333333333333},\"50\":{\"ref\":50,\"tf\":0.044642857142857144},\"51\":{\"ref\":51,\"tf\":0.03389830508474576},\"52\":{\"ref\":52,\"tf\":0.010416666666666666},\"53\":{\"ref\":53,\"tf\":0.041666666666666664},\"54\":{\"ref\":54,\"tf\":0.010296010296010296},\"55\":{\"ref\":55,\"tf\":2.5816326530612246},\"56\":{\"ref\":56,\"tf\":3.358851674641148},\"57\":{\"ref\":57,\"tf\":5.058962264150943},\"58\":{\"ref\":58,\"tf\":0.00819672131147541},\"59\":{\"ref\":59,\"tf\":0.033426183844011144},\"60\":{\"ref\":60,\"tf\":0.006818181818181818},\"61\":{\"ref\":61,\"tf\":0.05434782608695652},\"62\":{\"ref\":62,\"tf\":0.041666666666666664},\"63\":{\"ref\":63,\"tf\":0.0975609756097561},\"64\":{\"ref\":64,\"tf\":0.0625},\"65\":{\"ref\":65,\"tf\":0.025},\"66\":{\"ref\":66,\"tf\":0.08695652173913043},\"67\":{\"ref\":67,\"tf\":0.05555555555555555},\"68\":{\"ref\":68,\"tf\":0.05555555555555555},\"69\":{\"ref\":69,\"tf\":3.383333333333333},\"70\":{\"ref\":70,\"tf\":10.071428571428571},\"74\":{\"ref\":74,\"tf\":0.017964071856287425},\"84\":{\"ref\":84,\"tf\":0.01090909090909091},\"88\":{\"ref\":88,\"tf\":0.009708737864077669},\"99\":{\"ref\":99,\"tf\":0.02127659574468085},\"103\":{\"ref\":103,\"tf\":0.025974025974025976},\"104\":{\"ref\":104,\"tf\":0.0211864406779661},\"105\":{\"ref\":105,\"tf\":0.005847953216374269},\"106\":{\"ref\":106,\"tf\":0.02666666666666667},\"108\":{\"ref\":108,\"tf\":0.014492753623188406},\"110\":{\"ref\":110,\"tf\":0.01020408163265306},\"111\":{\"ref\":111,\"tf\":0.007518796992481203},\"114\":{\"ref\":114,\"tf\":0.003189792663476874},\"122\":{\"ref\":122,\"tf\":3.333333333333333},\"123\":{\"ref\":123,\"tf\":3.3368544600938965},\"124\":{\"ref\":124,\"tf\":3.353951890034364},\"125\":{\"ref\":125,\"tf\":3.333333333333333},\"126\":{\"ref\":126,\"tf\":5.066666666666666},\"127\":{\"ref\":127,\"tf\":3.4326710816777037},\"128\":{\"ref\":128,\"tf\":5.053571428571429},\"129\":{\"ref\":129,\"tf\":2.5243478260869567},\"130\":{\"ref\":130,\"tf\":2.508771929824561},\"131\":{\"ref\":131,\"tf\":2.111111111111111},\"132\":{\"ref\":132,\"tf\":0.038461538461538464},\"133\":{\"ref\":133,\"tf\":0.006700167504187605},\"134\":{\"ref\":134,\"tf\":0.01611047180667434},\"135\":{\"ref\":135,\"tf\":0.009652509652509652},\"136\":{\"ref\":136,\"tf\":0.010101010101010102}},\"'\":{\"docs\":{\"4\":{\"ref\":4,\"tf\":0.022727272727272728},\"14\":{\"ref\":14,\"tf\":0.011494252873563218},\"38\":{\"ref\":38,\"tf\":0.011627906976744186},\"43\":{\"ref\":43,\"tf\":0.006944444444444444},\"45\":{\"ref\":45,\"tf\":0.00980392156862745},\"50\":{\"ref\":50,\"tf\":0.008928571428571428},\"74\":{\"ref\":74,\"tf\":0.005988023952095809},\"84\":{\"ref\":84,\"tf\":0.0036363636363636364},\"104\":{\"ref\":104,\"tf\":0.012711864406779662},\"127\":{\"ref\":127,\"tf\":0.006622516556291391},\"129\":{\"ref\":129,\"tf\":0.006956521739130435},\"132\":{\"ref\":132,\"tf\":0.01282051282051282},\"134\":{\"ref\":134,\"tf\":0.0011507479861910242}}},\"o\":{\"docs\":{},\"n\":{\"docs\":{\"10\":{\"ref\":10,\"tf\":0.023809523809523808},\"16\":{\"ref\":16,\"tf\":0.007352941176470588},\"51\":{\"ref\":51,\"tf\":0.0847457627118644},\"126\":{\"ref\":126,\"tf\":0.011111111111111112}},\"s\":{\"docs\":{},\"]\":{\"docs\":{},\"(\":{\"docs\":{},\"h\":{\"docs\":{},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"p\":{\"docs\":{},\":\":{\"docs\":{},\"/\":{\"docs\":{},\"/\":{\"docs\":{},\"i\":{\"docs\":{},\"o\":{\"docs\":{},\"n\":{\"docs\":{},\"i\":{\"docs\":{},\"c\":{\"docs\":{},\"o\":{\"docs\":{},\"n\":{\"docs\":{},\"s\":{\"docs\":{},\".\":{\"docs\":{},\"c\":{\"docs\":{},\"o\":{\"docs\":{},\"m\":{\"docs\":{\"129\":{\"ref\":129,\"tf\":0.0017391304347826088}}}}}}}}}}}}}}}}}}}}}}}}}},\".\":{\"docs\":{},\"c\":{\"docs\":{},\"s\":{\"docs\":{},\"s\":{\"docs\":{\"50\":{\"ref\":50,\"tf\":0.008928571428571428}}}}},\"b\":{\"docs\":{},\"u\":{\"docs\":{},\"n\":{\"docs\":{},\"d\":{\"docs\":{},\"l\":{\"docs\":{},\"e\":{\"docs\":{},\".\":{\"docs\":{},\"j\":{\"docs\":{\"59\":{\"ref\":59,\"tf\":0.002785515320334262}}}}}}}}}},\"p\":{\"docs\":{},\"l\":{\"docs\":{},\"a\":{\"docs\":{},\"t\":{\"docs\":{},\"f\":{\"docs\":{},\"o\":{\"docs\":{},\"r\":{\"docs\":{},\"m\":{\"docs\":{\"113\":{\"ref\":113,\"tf\":0.0070921985815602835},\"121\":{\"ref\":121,\"tf\":10.005813953488373},\"124\":{\"ref\":124,\"tf\":0.010309278350515464},\"125\":{\"ref\":125,\"tf\":0.2}},\".\":{\"docs\":{},\"i\":{\"docs\":{},\"s\":{\"docs\":{},\"f\":{\"docs\":{},\"u\":{\"docs\":{},\"l\":{\"docs\":{},\"l\":{\"docs\":{},\"s\":{\"docs\":{},\"c\":{\"docs\":{},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\"e\":{\"docs\":{},\"n\":{\"docs\":{\"103\":{\"ref\":103,\"tf\":0.012987012987012988}}}}}}}}}}}}}},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\"a\":{\"docs\":{},\"d\":{\"docs\":{},\"y\":{\"docs\":{},\"(\":{\"docs\":{},\"f\":{\"docs\":{},\"u\":{\"docs\":{},\"n\":{\"docs\":{},\"c\":{\"docs\":{},\"t\":{\"docs\":{\"132\":{\"ref\":132,\"tf\":0.01282051282051282}}}}}}}}}}}}}}}}}}}}}},\"e\":{\"docs\":{},\"v\":{\"docs\":{},\"e\":{\"docs\":{},\"n\":{\"docs\":{},\"t\":{\"docs\":{},\"c\":{\"docs\":{},\"o\":{\"docs\":{},\"n\":{\"docs\":{},\"t\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"l\":{\"docs\":{\"108\":{\"ref\":108,\"tf\":0.028985507246376812},\"120\":{\"ref\":120,\"tf\":10.0062893081761},\"125\":{\"ref\":125,\"tf\":0.2}},\"l\":{\"docs\":{},\"e\":{\"docs\":{},\"r\":{\"docs\":{},\"'\":{\"docs\":{\"108\":{\"ref\":108,\"tf\":0.014492753623188406}}},\"&\":{\"docs\":{},\"#\":{\"3\":{\"9\":{\"docs\":{},\";\":{\"docs\":{\"124\":{\"ref\":124,\"tf\":0.010309278350515464}}}},\"docs\":{}},\"docs\":{}}}}}}}}}}}}}}}}}},\"a\":{\"docs\":{},\"n\":{\"docs\":{},\"i\":{\"docs\":{},\"m\":{\"docs\":{},\"a\":{\"docs\":{},\"t\":{\"docs\":{},\"i\":{\"docs\":{},\"o\":{\"docs\":{},\"n\":{\"docs\":{},\"f\":{\"docs\":{},\"r\":{\"docs\":{},\"a\":{\"docs\":{},\"m\":{\"docs\":{},\"e\":{\"docs\":{},\"t\":{\"docs\":{},\"h\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"l\":{\"docs\":{\"119\":{\"ref\":119,\"tf\":0.003937007874015748}}}}}}}}}}}}}}}}}}}}}}},\"d\":{\"docs\":{},\"o\":{\"docs\":{},\"m\":{\"docs\":{},\"u\":{\"docs\":{},\"t\":{\"docs\":{},\"i\":{\"docs\":{},\"l\":{\"docs\":{\"119\":{\"ref\":119,\"tf\":10.003937007874017},\"125\":{\"ref\":125,\"tf\":0.2}}}}}}}}},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\"q\":{\"docs\":{},\"u\":{\"docs\":{},\"e\":{\"docs\":{},\"s\":{\"docs\":{},\"t\":{\"docs\":{},\"a\":{\"docs\":{},\"n\":{\"docs\":{},\"i\":{\"docs\":{},\"m\":{\"docs\":{},\"a\":{\"docs\":{},\"t\":{\"docs\":{},\"i\":{\"docs\":{},\"o\":{\"docs\":{},\"n\":{\"docs\":{},\"f\":{\"docs\":{},\"r\":{\"docs\":{},\"a\":{\"docs\":{},\"m\":{\"docs\":{\"119\":{\"ref\":119,\"tf\":0.003937007874015748}}}}}}}}}}}}}}}}}}}}}},\"o\":{\"docs\":{},\"f\":{\"docs\":{},\"f\":{\"docs\":{\"120\":{\"ref\":120,\"tf\":0.006289308176100629}},\"g\":{\"docs\":{},\"e\":{\"docs\":{},\"s\":{\"docs\":{},\"t\":{\"docs\":{},\"u\":{\"docs\":{},\"r\":{\"docs\":{\"120\":{\"ref\":120,\"tf\":0.006289308176100629}}}}}}}}}},\"n\":{\"docs\":{\"120\":{\"ref\":120,\"tf\":0.006289308176100629}},\"g\":{\"docs\":{},\"e\":{\"docs\":{},\"s\":{\"docs\":{},\"t\":{\"docs\":{},\"u\":{\"docs\":{},\"r\":{\"docs\":{\"120\":{\"ref\":120,\"tf\":0.006289308176100629}}}}}}}}}},\"t\":{\"docs\":{},\"r\":{\"docs\":{},\"i\":{\"docs\":{},\"g\":{\"docs\":{},\"g\":{\"docs\":{\"120\":{\"ref\":120,\"tf\":0.006289308176100629}}}}}}},\"s\":{\"docs\":{},\"c\":{\"docs\":{},\"s\":{\"docs\":{},\"s\":{\"docs\":{\"129\":{\"ref\":129,\"tf\":0.0017391304347826088}}}}}}},\"m\":{\"docs\":{},\"o\":{\"docs\":{},\"d\":{\"docs\":{\"54\":{\"ref\":54,\"tf\":0.002574002574002574},\"71\":{\"ref\":71,\"tf\":10.016},\"111\":{\"ref\":111,\"tf\":10.030075187969924},\"122\":{\"ref\":122,\"tf\":0.3333333333333333},\"124\":{\"ref\":124,\"tf\":0.010309278350515464}},\"a\":{\"docs\":{},\"l\":{\"docs\":{},\".\":{\"docs\":{},\"f\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"m\":{\"docs\":{},\"t\":{\"docs\":{},\"e\":{\"docs\":{},\"m\":{\"docs\":{},\"p\":{\"docs\":{},\"l\":{\"docs\":{},\"a\":{\"docs\":{},\"t\":{\"docs\":{},\"e\":{\"docs\":{},\"u\":{\"docs\":{},\"r\":{\"docs\":{},\"l\":{\"docs\":{},\"(\":{\"docs\":{},\"'\":{\"docs\":{},\"n\":{\"docs\":{},\"e\":{\"docs\":{},\"w\":{\"docs\":{},\"-\":{\"docs\":{},\"t\":{\"docs\":{},\"a\":{\"docs\":{},\"s\":{\"docs\":{},\"k\":{\"docs\":{},\".\":{\"docs\":{},\"h\":{\"docs\":{},\"t\":{\"docs\":{},\"m\":{\"docs\":{},\"l\":{\"docs\":{\"54\":{\"ref\":54,\"tf\":0.002574002574002574}}}}}}}}}}}}}}},\"m\":{\"docs\":{},\"o\":{\"docs\":{},\"d\":{\"docs\":{},\"a\":{\"docs\":{},\"l\":{\"docs\":{},\".\":{\"docs\":{},\"h\":{\"docs\":{},\"t\":{\"docs\":{},\"m\":{\"docs\":{},\"l\":{\"docs\":{\"111\":{\"ref\":111,\"tf\":0.007518796992481203}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},\"#\":{\"docs\":{},\"i\":{\"docs\":{},\"n\":{\"docs\":{},\"i\":{\"docs\":{},\"t\":{\"docs\":{},\"i\":{\"docs\":{\"111\":{\"ref\":111,\"tf\":0.015037593984962405}}}}}}}}}}}}},\"s\":{\"docs\":{},\"i\":{\"docs\":{},\"d\":{\"docs\":{},\"e\":{\"docs\":{},\"m\":{\"docs\":{},\"e\":{\"docs\":{},\"n\":{\"docs\":{},\"u\":{\"docs\":{},\"d\":{\"docs\":{},\"e\":{\"docs\":{},\"l\":{\"docs\":{},\"e\":{\"docs\":{},\"g\":{\"docs\":{\"54\":{\"ref\":54,\"tf\":0.001287001287001287},\"93\":{\"ref\":93,\"tf\":0.04225352112676056},\"116\":{\"ref\":116,\"tf\":10.016666666666667},\"124\":{\"ref\":124,\"tf\":0.010309278350515464}},\"a\":{\"docs\":{},\"t\":{\"docs\":{},\"e\":{\"docs\":{},\".\":{\"docs\":{},\"t\":{\"docs\":{},\"o\":{\"docs\":{},\"g\":{\"docs\":{},\"g\":{\"docs\":{},\"l\":{\"docs\":{},\"e\":{\"docs\":{},\"l\":{\"docs\":{},\"e\":{\"docs\":{},\"f\":{\"docs\":{},\"t\":{\"docs\":{\"54\":{\"ref\":54,\"tf\":0.001287001287001287},\"93\":{\"ref\":93,\"tf\":0.014084507042253521},\"116\":{\"ref\":116,\"tf\":0.005555555555555556}},\"(\":{\"docs\":{},\"f\":{\"docs\":{},\"a\":{\"docs\":{},\"l\":{\"docs\":{},\"s\":{\"docs\":{\"54\":{\"ref\":54,\"tf\":0.001287001287001287}}}}}}}}}}}}}}}}},\"$\":{\"docs\":{},\"g\":{\"docs\":{},\"e\":{\"docs\":{},\"t\":{\"docs\":{},\"b\":{\"docs\":{},\"y\":{\"docs\":{},\"h\":{\"docs\":{},\"a\":{\"docs\":{},\"n\":{\"docs\":{},\"d\":{\"docs\":{},\"l\":{\"docs\":{},\"e\":{\"docs\":{},\"(\":{\"docs\":{},\"'\":{\"docs\":{},\"m\":{\"docs\":{},\"y\":{\"docs\":{},\"-\":{\"docs\":{},\"h\":{\"docs\":{},\"a\":{\"docs\":{},\"n\":{\"docs\":{},\"d\":{\"docs\":{},\"l\":{\"docs\":{},\"e\":{\"docs\":{},\"'\":{\"docs\":{},\")\":{\"docs\":{},\".\":{\"docs\":{},\"t\":{\"docs\":{},\"o\":{\"docs\":{},\"g\":{\"docs\":{},\"g\":{\"docs\":{},\"l\":{\"docs\":{},\"e\":{\"docs\":{},\"l\":{\"docs\":{},\"e\":{\"docs\":{},\"f\":{\"docs\":{},\"t\":{\"docs\":{\"116\":{\"ref\":116,\"tf\":0.005555555555555556}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},\"c\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"l\":{\"docs\":{},\"l\":{\"docs\":{},\"d\":{\"docs\":{},\"e\":{\"docs\":{},\"l\":{\"docs\":{},\"e\":{\"docs\":{},\"g\":{\"docs\":{\"74\":{\"ref\":74,\"tf\":0.011976047904191617},\"90\":{\"ref\":90,\"tf\":0.020833333333333332},\"115\":{\"ref\":115,\"tf\":10.016233766233766},\"124\":{\"ref\":124,\"tf\":0.010309278350515464}},\"a\":{\"docs\":{},\"t\":{\"docs\":{},\"e\":{\"docs\":{},\".\":{\"docs\":{},\"$\":{\"docs\":{},\"g\":{\"docs\":{},\"e\":{\"docs\":{},\"t\":{\"docs\":{},\"b\":{\"docs\":{},\"y\":{\"docs\":{},\"h\":{\"docs\":{},\"a\":{\"docs\":{},\"n\":{\"docs\":{},\"d\":{\"docs\":{},\"l\":{\"docs\":{},\"e\":{\"docs\":{},\"(\":{\"docs\":{},\"'\":{\"docs\":{},\"m\":{\"docs\":{},\"a\":{\"docs\":{},\"i\":{\"docs\":{},\"n\":{\"docs\":{},\"s\":{\"docs\":{},\"c\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"l\":{\"docs\":{},\"l\":{\"docs\":{},\"'\":{\"docs\":{},\")\":{\"docs\":{},\".\":{\"docs\":{},\"s\":{\"docs\":{},\"c\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"l\":{\"docs\":{},\"l\":{\"docs\":{},\"t\":{\"docs\":{},\"o\":{\"docs\":{},\"p\":{\"docs\":{\"115\":{\"ref\":115,\"tf\":0.003246753246753247}}}}}}}}}}}}}}}}}}}}}}},\"y\":{\"docs\":{},\"-\":{\"docs\":{},\"h\":{\"docs\":{},\"a\":{\"docs\":{},\"n\":{\"docs\":{},\"d\":{\"docs\":{},\"l\":{\"docs\":{},\"e\":{\"docs\":{},\"'\":{\"docs\":{},\")\":{\"docs\":{},\".\":{\"docs\":{},\"s\":{\"docs\":{},\"c\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"l\":{\"docs\":{},\"l\":{\"docs\":{},\"t\":{\"docs\":{},\"o\":{\"docs\":{},\"p\":{\"docs\":{\"115\":{\"ref\":115,\"tf\":0.003246753246753247}}}}}}}}}}}}}}}}}}}}},\"s\":{\"docs\":{},\"c\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"l\":{\"docs\":{\"115\":{\"ref\":115,\"tf\":0.003246753246753247}}}}}}}}},\"s\":{\"docs\":{},\"m\":{\"docs\":{},\"a\":{\"docs\":{},\"l\":{\"docs\":{},\"l\":{\"docs\":{},\"'\":{\"docs\":{},\")\":{\"docs\":{},\".\":{\"docs\":{},\"s\":{\"docs\":{},\"c\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"l\":{\"docs\":{},\"l\":{\"docs\":{},\"t\":{\"docs\":{},\"o\":{\"docs\":{},\"p\":{\"docs\":{\"115\":{\"ref\":115,\"tf\":0.003246753246753247}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},\"s\":{\"docs\":{},\"c\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"l\":{\"docs\":{},\"l\":{\"docs\":{},\"t\":{\"docs\":{},\"o\":{\"docs\":{},\"p\":{\"docs\":{\"115\":{\"ref\":115,\"tf\":0.003246753246753247}}}}}}}}}}}}}}}}}}}}}}}}},\"l\":{\"docs\":{},\"i\":{\"docs\":{},\"d\":{\"docs\":{},\"e\":{\"docs\":{},\"b\":{\"docs\":{},\"o\":{\"docs\":{},\"x\":{\"docs\":{},\"d\":{\"docs\":{},\"e\":{\"docs\":{},\"l\":{\"docs\":{},\"e\":{\"docs\":{},\"g\":{\"docs\":{\"94\":{\"ref\":94,\"tf\":0.022222222222222223},\"117\":{\"ref\":117,\"tf\":10.022727272727273},\"124\":{\"ref\":124,\"tf\":0.010309278350515464}},\"a\":{\"docs\":{},\"t\":{\"docs\":{},\"e\":{\"docs\":{},\".\":{\"docs\":{},\"$\":{\"docs\":{},\"g\":{\"docs\":{},\"e\":{\"docs\":{},\"t\":{\"docs\":{},\"b\":{\"docs\":{},\"y\":{\"docs\":{},\"h\":{\"docs\":{},\"a\":{\"docs\":{},\"n\":{\"docs\":{},\"d\":{\"docs\":{},\"l\":{\"docs\":{},\"e\":{\"docs\":{},\"(\":{\"docs\":{},\"'\":{\"docs\":{},\"m\":{\"docs\":{},\"y\":{\"docs\":{},\"-\":{\"docs\":{},\"h\":{\"docs\":{},\"a\":{\"docs\":{},\"n\":{\"docs\":{},\"d\":{\"docs\":{},\"l\":{\"docs\":{},\"e\":{\"docs\":{},\"'\":{\"docs\":{},\")\":{\"docs\":{},\".\":{\"docs\":{},\"s\":{\"docs\":{},\"t\":{\"docs\":{},\"o\":{\"docs\":{},\"p\":{\"docs\":{\"117\":{\"ref\":117,\"tf\":0.007575757575757576}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},\"n\":{\"docs\":{},\"e\":{\"docs\":{},\"x\":{\"docs\":{},\"t\":{\"docs\":{\"117\":{\"ref\":117,\"tf\":0.007575757575757576}}}}}}}}}}}}}}}}}}}}}}},\"-\":{\"docs\":{},\"s\":{\"docs\":{},\"i\":{\"docs\":{},\"t\":{\"docs\":{\"68\":{\"ref\":68,\"tf\":0.027777777777777776}}}}},\"a\":{\"docs\":{},\"n\":{\"docs\":{},\"g\":{\"docs\":{},\"u\":{\"docs\":{},\"l\":{\"docs\":{},\"a\":{\"docs\":{},\"r\":{\"docs\":{},\"-\":{\"docs\":{},\"c\":{\"docs\":{},\"o\":{\"docs\":{},\"r\":{\"docs\":{},\"d\":{\"docs\":{},\"o\":{\"docs\":{},\"v\":{\"docs\":{},\"a\":{\"docs\":{},\"-\":{\"docs\":{},\"s\":{\"docs\":{},\"e\":{\"docs\":{},\"e\":{\"docs\":{},\"d\":{\"docs\":{},\"]\":{\"docs\":{},\"(\":{\"docs\":{},\"h\":{\"docs\":{},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"p\":{\"docs\":{},\":\":{\"docs\":{},\"/\":{\"docs\":{},\"/\":{\"docs\":{},\"g\":{\"docs\":{},\"i\":{\"docs\":{},\"t\":{\"docs\":{},\"h\":{\"docs\":{},\"u\":{\"docs\":{},\"b\":{\"docs\":{},\".\":{\"docs\":{},\"c\":{\"docs\":{},\"o\":{\"docs\":{},\"m\":{\"docs\":{},\"/\":{\"docs\":{},\"d\":{\"docs\":{},\"r\":{\"docs\":{},\"i\":{\"docs\":{},\"f\":{\"docs\":{},\"t\":{\"docs\":{},\"y\":{\"docs\":{},\"c\":{\"docs\":{},\"o\":{\"docs\":{},\"/\":{\"docs\":{},\"i\":{\"docs\":{},\"o\":{\"docs\":{},\"n\":{\"docs\":{},\"i\":{\"docs\":{},\"c\":{\"docs\":{},\"-\":{\"docs\":{},\"a\":{\"docs\":{},\"n\":{\"docs\":{},\"g\":{\"docs\":{},\"u\":{\"docs\":{},\"l\":{\"docs\":{},\"a\":{\"docs\":{},\"r\":{\"docs\":{},\"-\":{\"docs\":{},\"c\":{\"docs\":{},\"o\":{\"docs\":{},\"r\":{\"docs\":{},\"d\":{\"docs\":{},\"o\":{\"docs\":{},\"v\":{\"docs\":{},\"a\":{\"docs\":{},\"-\":{\"docs\":{},\"s\":{\"docs\":{},\"e\":{\"docs\":{\"128\":{\"ref\":128,\"tf\":0.017857142857142856}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},\"l\":{\"docs\":{},\"i\":{\"docs\":{},\"s\":{\"docs\":{},\"t\":{\"docs\":{},\"d\":{\"docs\":{},\"e\":{\"docs\":{},\"l\":{\"docs\":{},\"e\":{\"docs\":{},\"g\":{\"docs\":{\"80\":{\"ref\":80,\"tf\":0.015384615384615385},\"109\":{\"ref\":109,\"tf\":10.025641025641026}},\"a\":{\"docs\":{},\"t\":{\"docs\":{},\"e\":{\"docs\":{},\".\":{\"docs\":{},\"$\":{\"docs\":{},\"g\":{\"docs\":{},\"e\":{\"docs\":{},\"t\":{\"docs\":{},\"b\":{\"docs\":{},\"y\":{\"docs\":{},\"h\":{\"docs\":{},\"a\":{\"docs\":{},\"n\":{\"docs\":{},\"d\":{\"docs\":{},\"l\":{\"docs\":{},\"e\":{\"docs\":{},\"(\":{\"docs\":{},\"'\":{\"docs\":{},\"m\":{\"docs\":{},\"y\":{\"docs\":{},\"-\":{\"docs\":{},\"h\":{\"docs\":{},\"a\":{\"docs\":{},\"n\":{\"docs\":{},\"d\":{\"docs\":{},\"l\":{\"docs\":{},\"e\":{\"docs\":{},\"'\":{\"docs\":{},\")\":{\"docs\":{},\".\":{\"docs\":{},\"s\":{\"docs\":{},\"h\":{\"docs\":{},\"o\":{\"docs\":{},\"w\":{\"docs\":{},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\"o\":{\"docs\":{},\"r\":{\"docs\":{},\"d\":{\"docs\":{},\"e\":{\"docs\":{},\"r\":{\"docs\":{},\"(\":{\"docs\":{},\"t\":{\"docs\":{},\"r\":{\"docs\":{},\"u\":{\"docs\":{\"109\":{\"ref\":109,\"tf\":0.008547008547008548}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},\"s\":{\"docs\":{},\"h\":{\"docs\":{},\"o\":{\"docs\":{},\"w\":{\"docs\":{},\"d\":{\"docs\":{},\"e\":{\"docs\":{},\"l\":{\"docs\":{},\"e\":{\"docs\":{},\"t\":{\"docs\":{},\"e\":{\"docs\":{},\"(\":{\"docs\":{},\"t\":{\"docs\":{},\"r\":{\"docs\":{},\"u\":{\"docs\":{\"109\":{\"ref\":109,\"tf\":0.008547008547008548}}}}}}}}}}}}}}}}}}}}}}}}}}}},\"o\":{\"docs\":{},\"a\":{\"docs\":{},\"d\":{\"docs\":{\"110\":{\"ref\":110,\"tf\":10.020408163265307},\"124\":{\"ref\":124,\"tf\":0.010309278350515464}},\"i\":{\"docs\":{},\"n\":{\"docs\":{},\"g\":{\"docs\":{},\".\":{\"docs\":{},\"h\":{\"docs\":{},\"i\":{\"docs\":{},\"d\":{\"docs\":{\"110\":{\"ref\":110,\"tf\":0.01020408163265306}}}}},\"s\":{\"docs\":{},\"h\":{\"docs\":{},\"o\":{\"docs\":{},\"w\":{\"docs\":{\"110\":{\"ref\":110,\"tf\":0.01020408163265306}}}}}}}}}}}}}},\"n\":{\"docs\":{},\"a\":{\"docs\":{},\"v\":{\"docs\":{},\"b\":{\"docs\":{},\"a\":{\"docs\":{},\"r\":{\"docs\":{},\"d\":{\"docs\":{},\"e\":{\"docs\":{},\"l\":{\"docs\":{},\"e\":{\"docs\":{},\"g\":{\"docs\":{\"81\":{\"ref\":81,\"tf\":0.06060606060606061},\"82\":{\"ref\":82,\"tf\":0.015625},\"112\":{\"ref\":112,\"tf\":10.011764705882353},\"124\":{\"ref\":124,\"tf\":0.010309278350515464}},\"a\":{\"docs\":{},\"t\":{\"docs\":{},\"e\":{\"docs\":{},\".\":{\"docs\":{},\"b\":{\"docs\":{},\"a\":{\"docs\":{},\"c\":{\"docs\":{},\"k\":{\"docs\":{\"81\":{\"ref\":81,\"tf\":0.015151515151515152}}}}}},\"g\":{\"docs\":{},\"e\":{\"docs\":{},\"t\":{\"docs\":{},\"p\":{\"docs\":{},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\"v\":{\"docs\":{},\"i\":{\"docs\":{},\"o\":{\"docs\":{},\"u\":{\"docs\":{},\"s\":{\"docs\":{},\"t\":{\"docs\":{},\"i\":{\"docs\":{},\"t\":{\"docs\":{},\"l\":{\"docs\":{\"81\":{\"ref\":81,\"tf\":0.015151515151515152}}}}}}}}}}}}}}}}},\"$\":{\"docs\":{},\"g\":{\"docs\":{},\"e\":{\"docs\":{},\"t\":{\"docs\":{},\"b\":{\"docs\":{},\"y\":{\"docs\":{},\"h\":{\"docs\":{},\"a\":{\"docs\":{},\"n\":{\"docs\":{},\"d\":{\"docs\":{},\"l\":{\"docs\":{},\"e\":{\"docs\":{},\"(\":{\"docs\":{},\"'\":{\"docs\":{},\"m\":{\"docs\":{},\"y\":{\"docs\":{},\"h\":{\"docs\":{},\"a\":{\"docs\":{},\"n\":{\"docs\":{},\"d\":{\"docs\":{},\"l\":{\"docs\":{},\"e\":{\"docs\":{},\"'\":{\"docs\":{},\")\":{\"docs\":{},\".\":{\"docs\":{},\"s\":{\"docs\":{},\"e\":{\"docs\":{},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"i\":{\"docs\":{},\"t\":{\"docs\":{},\"l\":{\"docs\":{},\"e\":{\"docs\":{},\"(\":{\"docs\":{},\"'\":{\"docs\":{},\"n\":{\"docs\":{},\"e\":{\"docs\":{},\"w\":{\"docs\":{},\"t\":{\"docs\":{},\"i\":{\"docs\":{},\"t\":{\"docs\":{},\"l\":{\"docs\":{\"112\":{\"ref\":112,\"tf\":0.0058823529411764705}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},\"s\":{\"docs\":{},\"e\":{\"docs\":{},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"i\":{\"docs\":{},\"t\":{\"docs\":{},\"l\":{\"docs\":{},\"e\":{\"docs\":{},\"(\":{\"docs\":{},\"t\":{\"docs\":{},\"i\":{\"docs\":{},\"t\":{\"docs\":{},\"l\":{\"docs\":{\"112\":{\"ref\":112,\"tf\":0.0058823529411764705}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},\"t\":{\"docs\":{},\"a\":{\"docs\":{},\"b\":{\"docs\":{},\"s\":{\"docs\":{},\"d\":{\"docs\":{},\"e\":{\"docs\":{},\"l\":{\"docs\":{},\"e\":{\"docs\":{},\"g\":{\"docs\":{\"96\":{\"ref\":96,\"tf\":0.03571428571428571},\"118\":{\"ref\":118,\"tf\":10.028571428571428},\"124\":{\"ref\":124,\"tf\":0.010309278350515464}},\"a\":{\"docs\":{},\"t\":{\"docs\":{},\"e\":{\"docs\":{},\".\":{\"docs\":{},\"s\":{\"docs\":{},\"e\":{\"docs\":{},\"l\":{\"docs\":{},\"e\":{\"docs\":{},\"c\":{\"docs\":{},\"t\":{\"docs\":{\"95\":{\"ref\":95,\"tf\":0.009345794392523364}},\"(\":{\"docs\":{},\"i\":{\"docs\":{},\"n\":{\"docs\":{},\"d\":{\"docs\":{},\"e\":{\"docs\":{},\"x\":{\"docs\":{\"118\":{\"ref\":118,\"tf\":0.009523809523809525}}}}}}}}}}}}}},\"$\":{\"docs\":{},\"g\":{\"docs\":{},\"e\":{\"docs\":{},\"t\":{\"docs\":{},\"b\":{\"docs\":{},\"y\":{\"docs\":{},\"h\":{\"docs\":{},\"a\":{\"docs\":{},\"n\":{\"docs\":{},\"d\":{\"docs\":{},\"l\":{\"docs\":{},\"e\":{\"docs\":{},\"(\":{\"docs\":{},\"'\":{\"docs\":{},\"m\":{\"docs\":{},\"y\":{\"docs\":{},\"-\":{\"docs\":{},\"h\":{\"docs\":{},\"a\":{\"docs\":{},\"n\":{\"docs\":{},\"d\":{\"docs\":{},\"l\":{\"docs\":{},\"e\":{\"docs\":{},\"'\":{\"docs\":{},\")\":{\"docs\":{},\".\":{\"docs\":{},\"s\":{\"docs\":{},\"e\":{\"docs\":{},\"l\":{\"docs\":{},\"e\":{\"docs\":{},\"c\":{\"docs\":{},\"t\":{\"docs\":{},\"(\":{\"0\":{\"docs\":{\"118\":{\"ref\":118,\"tf\":0.009523809523809525}}},\"docs\":{}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},\"a\":{\"docs\":{},\"c\":{\"docs\":{},\"t\":{\"docs\":{},\"i\":{\"docs\":{},\"o\":{\"docs\":{},\"n\":{\"docs\":{},\"s\":{\"docs\":{},\"h\":{\"docs\":{},\"e\":{\"docs\":{},\"e\":{\"docs\":{},\"t\":{\"docs\":{\"105\":{\"ref\":105,\"tf\":10.017543859649123},\"124\":{\"ref\":124,\"tf\":0.010309278350515464}},\".\":{\"docs\":{},\"s\":{\"docs\":{},\"h\":{\"docs\":{},\"o\":{\"docs\":{},\"w\":{\"docs\":{\"105\":{\"ref\":105,\"tf\":0.005847953216374269}}}}}}}}}}}}}}}}},\"n\":{\"docs\":{},\"i\":{\"docs\":{},\"m\":{\"docs\":{\"106\":{\"ref\":106,\"tf\":10.04}}}}}},\"b\":{\"docs\":{},\"a\":{\"docs\":{},\"c\":{\"docs\":{},\"k\":{\"docs\":{},\"d\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"p\":{\"docs\":{\"107\":{\"ref\":107,\"tf\":10.025316455696203}},\".\":{\"docs\":{},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\"l\":{\"docs\":{},\"e\":{\"docs\":{},\"a\":{\"docs\":{},\"s\":{\"docs\":{\"107\":{\"ref\":107,\"tf\":0.02531645569620253}}}}}},\"t\":{\"docs\":{},\"a\":{\"docs\":{},\"i\":{\"docs\":{},\"n\":{\"docs\":{\"107\":{\"ref\":107,\"tf\":0.02531645569620253}}}}}}}}}}}}}}}}},\"g\":{\"docs\":{},\"e\":{\"docs\":{},\"s\":{\"docs\":{},\"t\":{\"docs\":{},\"u\":{\"docs\":{},\"r\":{\"docs\":{\"108\":{\"ref\":108,\"tf\":10.014492753623188},\"124\":{\"ref\":124,\"tf\":0.010309278350515464}}}}}}}},\"p\":{\"docs\":{},\"l\":{\"docs\":{},\"a\":{\"docs\":{},\"t\":{\"docs\":{},\"f\":{\"docs\":{},\"o\":{\"docs\":{},\"r\":{\"docs\":{},\"m\":{\"docs\":{\"113\":{\"ref\":113,\"tf\":10.00709219858156},\"124\":{\"ref\":124,\"tf\":0.010309278350515464}}}}}}}}},\"o\":{\"docs\":{},\"p\":{\"docs\":{},\"u\":{\"docs\":{},\"p\":{\"docs\":{\"114\":{\"ref\":114,\"tf\":10.003189792663477},\"124\":{\"ref\":124,\"tf\":0.010309278350515464},\"136\":{\"ref\":136,\"tf\":0.005050505050505051}},\".\":{\"docs\":{},\"a\":{\"docs\":{},\"l\":{\"docs\":{},\"e\":{\"docs\":{},\"r\":{\"docs\":{},\"t\":{\"docs\":{\"114\":{\"ref\":114,\"tf\":0.001594896331738437}}}}}}},\"c\":{\"docs\":{},\"o\":{\"docs\":{},\"n\":{\"docs\":{},\"f\":{\"docs\":{},\"i\":{\"docs\":{},\"r\":{\"docs\":{},\"m\":{\"docs\":{\"114\":{\"ref\":114,\"tf\":0.001594896331738437}}}}}}}}},\"p\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"m\":{\"docs\":{},\"p\":{\"docs\":{},\"t\":{\"docs\":{\"114\":{\"ref\":114,\"tf\":0.001594896331738437},\"136\":{\"ref\":136,\"tf\":0.005050505050505051}}}}}}}},\"s\":{\"docs\":{},\"h\":{\"docs\":{},\"o\":{\"docs\":{},\"w\":{\"docs\":{\"114\":{\"ref\":114,\"tf\":0.001594896331738437},\"136\":{\"ref\":136,\"tf\":0.005050505050505051}}}}}}}}}}}},\"&\":{\"docs\":{},\"#\":{\"3\":{\"9\":{\"docs\":{},\";\":{\"docs\":{\"123\":{\"ref\":123,\"tf\":0.007042253521126761}}}},\"docs\":{}},\"docs\":{}}},\"/\":{\"docs\":{},\"i\":{\"docs\":{},\"o\":{\"docs\":{},\"n\":{\"docs\":{\"129\":{\"ref\":129,\"tf\":0.0034782608695652175}}}}}}},\"n\":{\"docs\":{},\"f\":{\"docs\":{},\"i\":{\"docs\":{},\"n\":{\"docs\":{},\"i\":{\"docs\":{},\"t\":{\"docs\":{},\"e\":{\"docs\":{},\"s\":{\"docs\":{},\"c\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"l\":{\"docs\":{\"74\":{\"ref\":74,\"tf\":0.005988023952095809},\"78\":{\"ref\":78,\"tf\":0.011235955056179775},\"123\":{\"ref\":123,\"tf\":0.007042253521126761}}}}}}}}}}}}}},\"t\":{\"docs\":{},\"e\":{\"docs\":{},\"m\":{\"docs\":{\"75\":{\"ref\":75,\"tf\":0.08333333333333333},\"80\":{\"ref\":80,\"tf\":0.015384615384615385},\"85\":{\"ref\":85,\"tf\":0.09090909090909091},\"89\":{\"ref\":89,\"tf\":0.022727272727272728},\"123\":{\"ref\":123,\"tf\":0.007042253521126761}}}},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"n\":{\"docs\":{\"127\":{\"ref\":127,\"tf\":0.006622516556291391}}}}}}},\"-\":{\"docs\":{},\"c\":{\"docs\":{},\"o\":{\"docs\":{},\"n\":{\"docs\":{},\"t\":{\"docs\":{\"54\":{\"ref\":54,\"tf\":0.002574002574002574},\"74\":{\"ref\":74,\"tf\":10.005988023952096},\"84\":{\"ref\":84,\"tf\":0.007272727272727273},\"96\":{\"ref\":96,\"tf\":0.017857142857142856},\"111\":{\"ref\":111,\"tf\":0.015037593984962405}},\"e\":{\"docs\":{},\"n\":{\"docs\":{},\"t\":{\"docs\":{},\"/\":{\"docs\":{},\"i\":{\"docs\":{},\"o\":{\"docs\":{},\"n\":{\"docs\":{},\"-\":{\"docs\":{},\"s\":{\"docs\":{},\"c\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"l\":{\"docs\":{\"72\":{\"ref\":72,\"tf\":0.002331002331002331}}}}}}}}}}}}}}}}}},\"h\":{\"docs\":{},\"e\":{\"docs\":{},\"c\":{\"docs\":{},\"k\":{\"docs\":{},\"b\":{\"docs\":{},\"o\":{\"docs\":{},\"x\":{\"docs\":{\"73\":{\"ref\":73,\"tf\":10.05}}}}}}}}}},\"h\":{\"docs\":{},\"e\":{\"docs\":{},\"a\":{\"docs\":{},\"d\":{\"docs\":{},\"e\":{\"docs\":{},\"r\":{\"docs\":{},\"-\":{\"docs\":{},\"b\":{\"docs\":{},\"a\":{\"docs\":{},\"r\":{\"docs\":{\"54\":{\"ref\":54,\"tf\":0.002574002574002574},\"77\":{\"ref\":77,\"tf\":10.018867924528301},\"111\":{\"ref\":111,\"tf\":0.015037593984962405}}}}}}}}}}}},\"i\":{\"docs\":{},\"t\":{\"docs\":{},\"e\":{\"docs\":{},\"m\":{\"docs\":{\"54\":{\"ref\":54,\"tf\":0.001287001287001287},\"79\":{\"ref\":79,\"tf\":10.125}}}}},\"n\":{\"docs\":{},\"f\":{\"docs\":{},\"i\":{\"docs\":{},\"n\":{\"docs\":{},\"i\":{\"docs\":{},\"t\":{\"docs\":{},\"e\":{\"docs\":{},\"-\":{\"docs\":{},\"s\":{\"docs\":{},\"c\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"l\":{\"docs\":{\"78\":{\"ref\":78,\"tf\":10.01123595505618}}}}}}}}}}}}}}}},\"s\":{\"docs\":{},\"i\":{\"docs\":{},\"d\":{\"docs\":{},\"e\":{\"docs\":{},\"-\":{\"docs\":{},\"m\":{\"docs\":{},\"e\":{\"docs\":{},\"n\":{\"docs\":{},\"u\":{\"docs\":{\"54\":{\"ref\":54,\"tf\":0.001287001287001287},\"59\":{\"ref\":59,\"tf\":0.008356545961002786},\"91\":{\"ref\":91,\"tf\":10.019607843137255},\"93\":{\"ref\":93,\"tf\":10.04225352112676},\"130\":{\"ref\":130,\"tf\":0.008771929824561403}},\"-\":{\"docs\":{},\"c\":{\"docs\":{},\"o\":{\"docs\":{},\"n\":{\"docs\":{},\"t\":{\"docs\":{\"59\":{\"ref\":59,\"tf\":0.002785515320334262},\"92\":{\"ref\":92,\"tf\":10.028571428571428},\"93\":{\"ref\":93,\"tf\":0.014084507042253521}}}}}}},\"s\":{\"docs\":{},\"]\":{\"docs\":{},\"(\":{\"docs\":{},\"h\":{\"docs\":{},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"p\":{\"docs\":{},\":\":{\"docs\":{},\"/\":{\"docs\":{},\"/\":{\"docs\":{},\"i\":{\"docs\":{},\"o\":{\"docs\":{},\"n\":{\"docs\":{},\"i\":{\"docs\":{},\"c\":{\"docs\":{},\"f\":{\"docs\":{},\"r\":{\"docs\":{},\"a\":{\"docs\":{},\"m\":{\"docs\":{},\"e\":{\"docs\":{},\"w\":{\"docs\":{},\"o\":{\"docs\":{},\"r\":{\"docs\":{},\"k\":{\"docs\":{},\".\":{\"docs\":{},\"c\":{\"docs\":{},\"o\":{\"docs\":{},\"m\":{\"docs\":{},\"/\":{\"docs\":{},\"d\":{\"docs\":{},\"o\":{\"docs\":{},\"c\":{\"docs\":{},\"s\":{\"docs\":{},\"/\":{\"docs\":{},\"a\":{\"docs\":{},\"p\":{\"docs\":{},\"i\":{\"docs\":{},\"/\":{\"docs\":{},\"d\":{\"docs\":{},\"i\":{\"docs\":{},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\"c\":{\"docs\":{},\"t\":{\"docs\":{},\"i\":{\"docs\":{},\"v\":{\"docs\":{},\"e\":{\"docs\":{},\"/\":{\"docs\":{},\"i\":{\"docs\":{},\"o\":{\"docs\":{},\"n\":{\"docs\":{},\"s\":{\"docs\":{},\"i\":{\"docs\":{},\"d\":{\"docs\":{},\"e\":{\"docs\":{},\"m\":{\"docs\":{},\"e\":{\"docs\":{},\"n\":{\"docs\":{},\"u\":{\"docs\":{\"59\":{\"ref\":59,\"tf\":0.002785515320334262}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},\"c\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"l\":{\"docs\":{\"90\":{\"ref\":90,\"tf\":10.010416666666666},\"115\":{\"ref\":115,\"tf\":0.003246753246753247}}}}}},\"l\":{\"docs\":{},\"i\":{\"docs\":{},\"d\":{\"docs\":{},\"e\":{\"docs\":{},\"-\":{\"docs\":{},\"b\":{\"docs\":{},\"o\":{\"docs\":{},\"x\":{\"docs\":{\"94\":{\"ref\":94,\"tf\":10.011111111111111}}}}}}}}}}},\"d\":{\"docs\":{},\"e\":{\"docs\":{},\"l\":{\"docs\":{},\"e\":{\"docs\":{},\"t\":{\"docs\":{},\"e\":{\"docs\":{},\"-\":{\"docs\":{},\"b\":{\"docs\":{},\"u\":{\"docs\":{},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"o\":{\"docs\":{},\"n\":{\"docs\":{\"75\":{\"ref\":75,\"tf\":10.083333333333334}}}}}}}}}}}}}}},\"f\":{\"docs\":{},\"o\":{\"docs\":{},\"o\":{\"docs\":{},\"t\":{\"docs\":{},\"e\":{\"docs\":{},\"r\":{\"docs\":{},\"-\":{\"docs\":{},\"b\":{\"docs\":{},\"a\":{\"docs\":{},\"r\":{\"docs\":{\"76\":{\"ref\":76,\"tf\":10.018867924528301},\"99\":{\"ref\":99,\"tf\":0.02127659574468085}}}}}}}}}}}},\"l\":{\"docs\":{},\"i\":{\"docs\":{},\"s\":{\"docs\":{},\"t\":{\"docs\":{\"80\":{\"ref\":80,\"tf\":10.007692307692308}}}}}},\"n\":{\"docs\":{},\"a\":{\"docs\":{},\"v\":{\"docs\":{},\"-\":{\"docs\":{},\"b\":{\"docs\":{},\"a\":{\"docs\":{},\"c\":{\"docs\":{},\"k\":{\"docs\":{},\"-\":{\"docs\":{},\"b\":{\"docs\":{},\"u\":{\"docs\":{},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"o\":{\"docs\":{},\"n\":{\"docs\":{\"81\":{\"ref\":81,\"tf\":10.015151515151516}}}}}}}}}}},\"r\":{\"docs\":{\"82\":{\"ref\":82,\"tf\":10.03125}}}},\"u\":{\"docs\":{},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"o\":{\"docs\":{},\"n\":{\"docs\":{\"83\":{\"ref\":83,\"tf\":10.02127659574468}}}}}}}},\"v\":{\"docs\":{},\"i\":{\"docs\":{},\"e\":{\"docs\":{},\"w\":{\"docs\":{\"84\":{\"ref\":84,\"tf\":10.010909090909092},\"115\":{\"ref\":115,\"tf\":0.003246753246753247}}}}}}}}}},\"v\":{\"docs\":{},\"i\":{\"docs\":{},\"e\":{\"docs\":{},\"w\":{\"docs\":{\"82\":{\"ref\":82,\"tf\":0.015625},\"84\":{\"ref\":84,\"tf\":0.01090909090909091},\"98\":{\"ref\":98,\"tf\":10.018867924528301}}}}}},\"o\":{\"docs\":{},\"p\":{\"docs\":{},\"t\":{\"docs\":{},\"i\":{\"docs\":{},\"o\":{\"docs\":{},\"n\":{\"docs\":{},\"-\":{\"docs\":{},\"b\":{\"docs\":{},\"u\":{\"docs\":{},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"o\":{\"docs\":{},\"n\":{\"docs\":{\"85\":{\"ref\":85,\"tf\":10.090909090909092}}}}}}}}}}}}}}},\"p\":{\"docs\":{},\"a\":{\"docs\":{},\"n\":{\"docs\":{\"86\":{\"ref\":86,\"tf\":10.066666666666666}}}}},\"r\":{\"docs\":{},\"a\":{\"docs\":{},\"d\":{\"docs\":{},\"i\":{\"docs\":{},\"o\":{\"docs\":{\"87\":{\"ref\":87,\"tf\":10.041666666666666}}}}}},\"e\":{\"docs\":{},\"f\":{\"docs\":{},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\"s\":{\"docs\":{},\"h\":{\"docs\":{\"88\":{\"ref\":88,\"tf\":10.019417475728156}}}}}}},\"o\":{\"docs\":{},\"r\":{\"docs\":{},\"d\":{\"docs\":{},\"e\":{\"docs\":{},\"r\":{\"docs\":{},\"-\":{\"docs\":{},\"b\":{\"docs\":{},\"u\":{\"docs\":{},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"o\":{\"docs\":{},\"n\":{\"docs\":{\"89\":{\"ref\":89,\"tf\":10.022727272727273}}}}}}}}}}}}}}}},\"t\":{\"docs\":{},\"a\":{\"docs\":{},\"b\":{\"docs\":{\"95\":{\"ref\":95,\"tf\":10.009345794392523},\"96\":{\"ref\":96,\"tf\":10.035714285714286}}}},\"o\":{\"docs\":{},\"g\":{\"docs\":{},\"g\":{\"docs\":{},\"l\":{\"docs\":{\"97\":{\"ref\":97,\"tf\":10.01923076923077}}}}}}}},\"s\":{\"docs\":{},\"c\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"l\":{\"docs\":{\"72\":{\"ref\":72,\"tf\":0.002331002331002331},\"78\":{\"ref\":78,\"tf\":0.011235955056179775},\"88\":{\"ref\":88,\"tf\":0.019417475728155338},\"115\":{\"ref\":115,\"tf\":0.003246753246753247},\"123\":{\"ref\":123,\"tf\":0.0035211267605633804},\"124\":{\"ref\":124,\"tf\":0.010309278350515464}}}}}},\"i\":{\"docs\":{},\"d\":{\"docs\":{},\"e\":{\"docs\":{},\"m\":{\"docs\":{},\"e\":{\"docs\":{},\"n\":{\"docs\":{},\"u\":{\"docs\":{\"91\":{\"ref\":91,\"tf\":0.0392156862745098},\"92\":{\"ref\":92,\"tf\":0.08571428571428572},\"93\":{\"ref\":93,\"tf\":0.014084507042253521},\"116\":{\"ref\":116,\"tf\":0.016666666666666666},\"123\":{\"ref\":123,\"tf\":0.01056338028169014},\"124\":{\"ref\":124,\"tf\":0.010309278350515464}},\"c\":{\"docs\":{},\"o\":{\"docs\":{},\"n\":{\"docs\":{},\"t\":{\"docs\":{\"91\":{\"ref\":91,\"tf\":0.0196078431372549},\"93\":{\"ref\":93,\"tf\":0.014084507042253521},\"123\":{\"ref\":123,\"tf\":0.007042253521126761}}}}}}}}}}}}},\"l\":{\"docs\":{},\"i\":{\"docs\":{},\"d\":{\"docs\":{},\"e\":{\"docs\":{},\"b\":{\"docs\":{},\"o\":{\"docs\":{},\"x\":{\"docs\":{\"117\":{\"ref\":117,\"tf\":0.015151515151515152},\"123\":{\"ref\":123,\"tf\":0.0035211267605633804},\"124\":{\"ref\":124,\"tf\":0.010309278350515464}}}}}}}}}},\"c\":{\"docs\":{},\"o\":{\"docs\":{},\"n\":{\"docs\":{},\"t\":{\"docs\":{\"74\":{\"ref\":74,\"tf\":0.005988023952095809},\"78\":{\"ref\":78,\"tf\":0.011235955056179775},\"88\":{\"ref\":88,\"tf\":0.019417475728155338},\"115\":{\"ref\":115,\"tf\":0.003246753246753247},\"123\":{\"ref\":123,\"tf\":0.007042253521126761},\"124\":{\"ref\":124,\"tf\":0.010309278350515464}}}}},\"h\":{\"docs\":{},\"e\":{\"docs\":{},\"c\":{\"docs\":{},\"k\":{\"docs\":{},\"b\":{\"docs\":{},\"o\":{\"docs\":{},\"x\":{\"docs\":{\"123\":{\"ref\":123,\"tf\":0.0035211267605633804}}}}}}}}}},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\"f\":{\"docs\":{},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\"s\":{\"docs\":{},\"h\":{\"docs\":{\"74\":{\"ref\":74,\"tf\":0.005988023952095809},\"90\":{\"ref\":90,\"tf\":0.010416666666666666},\"123\":{\"ref\":123,\"tf\":0.0035211267605633804}}}}}}},\"o\":{\"docs\":{},\"r\":{\"docs\":{},\"d\":{\"docs\":{},\"e\":{\"docs\":{},\"r\":{\"docs\":{},\"b\":{\"docs\":{},\"u\":{\"docs\":{},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"o\":{\"docs\":{},\"n\":{\"docs\":{\"80\":{\"ref\":80,\"tf\":0.007692307692307693}}}}}}}}}}}}}},\"a\":{\"docs\":{},\"d\":{\"docs\":{},\"i\":{\"docs\":{},\"o\":{\"docs\":{\"123\":{\"ref\":123,\"tf\":0.0035211267605633804}}}}}}},\"f\":{\"docs\":{},\"o\":{\"docs\":{},\"o\":{\"docs\":{},\"t\":{\"docs\":{},\"e\":{\"docs\":{},\"r\":{\"docs\":{},\"b\":{\"docs\":{},\"a\":{\"docs\":{},\"r\":{\"docs\":{\"76\":{\"ref\":76,\"tf\":0.018867924528301886},\"123\":{\"ref\":123,\"tf\":0.0035211267605633804}}}}}}}}}}},\"h\":{\"docs\":{},\"e\":{\"docs\":{},\"a\":{\"docs\":{},\"d\":{\"docs\":{},\"e\":{\"docs\":{},\"r\":{\"docs\":{},\"b\":{\"docs\":{},\"a\":{\"docs\":{},\"r\":{\"docs\":{\"77\":{\"ref\":77,\"tf\":0.018867924528301886},\"123\":{\"ref\":123,\"tf\":0.0035211267605633804}}}}}}}}}}},\"l\":{\"docs\":{},\"i\":{\"docs\":{},\"s\":{\"docs\":{},\"t\":{\"docs\":{\"79\":{\"ref\":79,\"tf\":0.125},\"80\":{\"ref\":80,\"tf\":0.007692307692307693},\"109\":{\"ref\":109,\"tf\":0.02564102564102564},\"123\":{\"ref\":123,\"tf\":0.0035211267605633804}}}}}},\"d\":{\"docs\":{},\"e\":{\"docs\":{},\"l\":{\"docs\":{},\"e\":{\"docs\":{},\"t\":{\"docs\":{},\"e\":{\"docs\":{},\"b\":{\"docs\":{},\"u\":{\"docs\":{},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"o\":{\"docs\":{},\"n\":{\"docs\":{\"80\":{\"ref\":80,\"tf\":0.007692307692307693}}}}}}}}}}}}}},\"o\":{\"docs\":{},\"p\":{\"docs\":{},\"t\":{\"docs\":{},\"i\":{\"docs\":{},\"o\":{\"docs\":{},\"n\":{\"docs\":{},\"b\":{\"docs\":{},\"u\":{\"docs\":{},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"o\":{\"docs\":{},\"n\":{\"docs\":{\"80\":{\"ref\":80,\"tf\":0.007692307692307693}}}}}}}}}}}}}},\"n\":{\"docs\":{},\"a\":{\"docs\":{},\"v\":{\"docs\":{},\"b\":{\"docs\":{},\"a\":{\"docs\":{},\"r\":{\"docs\":{\"81\":{\"ref\":81,\"tf\":0.030303030303030304},\"83\":{\"ref\":83,\"tf\":0.0425531914893617},\"84\":{\"ref\":84,\"tf\":0.0036363636363636364},\"98\":{\"ref\":98,\"tf\":0.07547169811320754},\"112\":{\"ref\":112,\"tf\":0.01764705882352941},\"123\":{\"ref\":123,\"tf\":0.014084507042253521},\"124\":{\"ref\":124,\"tf\":0.010309278350515464}}},\"c\":{\"docs\":{},\"k\":{\"docs\":{},\"b\":{\"docs\":{},\"u\":{\"docs\":{},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"o\":{\"docs\":{},\"n\":{\"docs\":{\"82\":{\"ref\":82,\"tf\":0.0078125},\"112\":{\"ref\":112,\"tf\":0.0058823529411764705},\"123\":{\"ref\":123,\"tf\":0.0035211267605633804}}}}}}}}}}},\"u\":{\"docs\":{},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"o\":{\"docs\":{},\"n\":{\"docs\":{\"82\":{\"ref\":82,\"tf\":0.0078125},\"83\":{\"ref\":83,\"tf\":0.02127659574468085},\"123\":{\"ref\":123,\"tf\":0.007042253521126761}}}}}}}},\"v\":{\"docs\":{},\"i\":{\"docs\":{},\"e\":{\"docs\":{},\"w\":{\"docs\":{\"82\":{\"ref\":82,\"tf\":0.0078125},\"83\":{\"ref\":83,\"tf\":0.02127659574468085},\"84\":{\"ref\":84,\"tf\":0.007272727272727273},\"98\":{\"ref\":98,\"tf\":0.018867924528301886},\"118\":{\"ref\":118,\"tf\":0.009523809523809525},\"123\":{\"ref\":123,\"tf\":0.007042253521126761}}}}}}}}},\"v\":{\"docs\":{},\"i\":{\"docs\":{},\"e\":{\"docs\":{},\"w\":{\"docs\":{\"82\":{\"ref\":82,\"tf\":0.0078125},\"83\":{\"ref\":83,\"tf\":0.02127659574468085},\"123\":{\"ref\":123,\"tf\":0.007042253521126761}}}}}},\"t\":{\"docs\":{},\"a\":{\"docs\":{},\"b\":{\"docs\":{\"95\":{\"ref\":95,\"tf\":0.028037383177570093},\"96\":{\"ref\":96,\"tf\":0.017857142857142856},\"118\":{\"ref\":118,\"tf\":0.0380952380952381},\"123\":{\"ref\":123,\"tf\":0.007042253521126761},\"124\":{\"ref\":124,\"tf\":0.010309278350515464}}}},\"o\":{\"docs\":{},\"g\":{\"docs\":{},\"g\":{\"docs\":{},\"l\":{\"docs\":{\"123\":{\"ref\":123,\"tf\":0.0035211267605633804}}}}}}},\"p\":{\"docs\":{},\"a\":{\"docs\":{},\"n\":{\"docs\":{\"123\":{\"ref\":123,\"tf\":0.0035211267605633804}}}}}},\"s\":{\"docs\":{},\"]\":{\"docs\":{},\"(\":{\"docs\":{},\"h\":{\"docs\":{},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"p\":{\"docs\":{},\":\":{\"docs\":{},\"/\":{\"docs\":{},\"/\":{\"docs\":{},\"c\":{\"docs\":{},\"o\":{\"docs\":{},\"r\":{\"docs\":{},\"d\":{\"docs\":{},\"o\":{\"docs\":{},\"v\":{\"docs\":{},\"a\":{\"docs\":{},\".\":{\"docs\":{},\"a\":{\"docs\":{},\"p\":{\"docs\":{},\"a\":{\"docs\":{},\"c\":{\"docs\":{},\"h\":{\"docs\":{},\"e\":{\"docs\":{},\".\":{\"docs\":{},\"o\":{\"docs\":{},\"r\":{\"docs\":{},\"g\":{\"docs\":{},\"/\":{\"docs\":{},\"d\":{\"docs\":{},\"o\":{\"docs\":{},\"c\":{\"docs\":{},\"s\":{\"docs\":{},\"/\":{\"docs\":{},\"e\":{\"docs\":{},\"n\":{\"docs\":{},\"/\":{\"3\":{\"docs\":{},\".\":{\"4\":{\"docs\":{},\".\":{\"0\":{\"docs\":{},\"/\":{\"docs\":{},\"g\":{\"docs\":{},\"u\":{\"docs\":{},\"i\":{\"docs\":{},\"d\":{\"docs\":{},\"e\":{\"docs\":{},\"_\":{\"docs\":{},\"p\":{\"docs\":{},\"l\":{\"docs\":{},\"a\":{\"docs\":{},\"t\":{\"docs\":{},\"f\":{\"docs\":{},\"o\":{\"docs\":{},\"r\":{\"docs\":{},\"m\":{\"docs\":{},\"s\":{\"docs\":{},\"_\":{\"docs\":{},\"i\":{\"docs\":{},\"o\":{\"docs\":{},\"s\":{\"docs\":{},\"_\":{\"docs\":{},\"i\":{\"docs\":{},\"n\":{\"docs\":{},\"d\":{\"docs\":{},\"e\":{\"docs\":{},\"x\":{\"docs\":{},\".\":{\"docs\":{},\"m\":{\"docs\":{},\"d\":{\"docs\":{},\".\":{\"docs\":{},\"h\":{\"docs\":{},\"t\":{\"docs\":{},\"m\":{\"docs\":{},\"l\":{\"docs\":{},\"#\":{\"docs\":{},\"i\":{\"docs\":{},\"o\":{\"docs\":{},\"s\":{\"docs\":{},\"%\":{\"2\":{\"0\":{\"docs\":{},\"p\":{\"docs\":{},\"l\":{\"docs\":{},\"a\":{\"docs\":{},\"t\":{\"docs\":{},\"f\":{\"docs\":{},\"o\":{\"docs\":{},\"r\":{\"docs\":{},\"m\":{\"docs\":{},\"%\":{\"2\":{\"0\":{\"docs\":{},\"g\":{\"docs\":{},\"u\":{\"docs\":{},\"i\":{\"docs\":{},\"d\":{\"docs\":{\"56\":{\"ref\":56,\"tf\":0.001594896331738437}}}}}}},\"docs\":{}},\"docs\":{}}}}}}}}}}},\"docs\":{}},\"docs\":{}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},\"docs\":{}}},\"docs\":{}}},\"docs\":{}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},\"'\":{\"docs\":{\"57\":{\"ref\":57,\"tf\":0.0023584905660377358}}}}},\"n\":{\"docs\":{},\"s\":{\"docs\":{},\"t\":{\"docs\":{},\"e\":{\"docs\":{},\"a\":{\"docs\":{},\"d\":{\"docs\":{\"3\":{\"ref\":3,\"tf\":0.019230769230769232},\"9\":{\"ref\":9,\"tf\":0.02702702702702703},\"20\":{\"ref\":20,\"tf\":0.02040816326530612},\"21\":{\"ref\":21,\"tf\":0.00980392156862745},\"50\":{\"ref\":50,\"tf\":0.008928571428571428},\"56\":{\"ref\":56,\"tf\":0.001594896331738437},\"57\":{\"ref\":57,\"tf\":0.0047169811320754715},\"58\":{\"ref\":58,\"tf\":0.00273224043715847},\"61\":{\"ref\":61,\"tf\":0.010869565217391304},\"74\":{\"ref\":74,\"tf\":0.005988023952095809},\"84\":{\"ref\":84,\"tf\":0.0036363636363636364}}}}},\"a\":{\"docs\":{},\"n\":{\"docs\":{},\"c\":{\"docs\":{\"52\":{\"ref\":52,\"tf\":0.010416666666666666},\"71\":{\"ref\":71,\"tf\":0.032},\"109\":{\"ref\":109,\"tf\":0.017094017094017096},\"111\":{\"ref\":111,\"tf\":0.015037593984962405},\"112\":{\"ref\":112,\"tf\":0.0058823529411764705},\"115\":{\"ref\":115,\"tf\":0.003246753246753247},\"116\":{\"ref\":116,\"tf\":0.011111111111111112},\"117\":{\"ref\":117,\"tf\":0.015151515151515152},\"118\":{\"ref\":118,\"tf\":0.01904761904761905}}},\"t\":{\"docs\":{},\"i\":{\"docs\":{\"71\":{\"ref\":71,\"tf\":0.008},\"122\":{\"ref\":122,\"tf\":0.16666666666666666}}}}},\"l\":{\"docs\":{\"55\":{\"ref\":55,\"tf\":0.04081632653061224},\"56\":{\"ref\":56,\"tf\":3.3636363636363633},\"57\":{\"ref\":57,\"tf\":0.0023584905660377358},\"58\":{\"ref\":58,\"tf\":0.00273224043715847},\"59\":{\"ref\":59,\"tf\":0.005571030640668524},\"63\":{\"ref\":63,\"tf\":0.024390243902439025},\"127\":{\"ref\":127,\"tf\":0.033112582781456956},\"129\":{\"ref\":129,\"tf\":0.006956521739130435},\"132\":{\"ref\":132,\"tf\":0.01282051282051282}},\"l\":{\"docs\":{},\"a\":{\"docs\":{},\"t\":{\"docs\":{},\"i\":{\"docs\":{},\"o\":{\"docs\":{},\"n\":{\"docs\":{},\"]\":{\"docs\":{},\"(\":{\"docs\":{},\"i\":{\"docs\":{},\"n\":{\"docs\":{},\"s\":{\"docs\":{},\"t\":{\"docs\":{},\"a\":{\"docs\":{},\"l\":{\"docs\":{},\"l\":{\"docs\":{},\"a\":{\"docs\":{},\"t\":{\"docs\":{},\"i\":{\"docs\":{},\"o\":{\"docs\":{},\"n\":{\"docs\":{},\".\":{\"docs\":{},\"h\":{\"docs\":{},\"t\":{\"docs\":{},\"m\":{\"docs\":{},\"l\":{\"docs\":{\"57\":{\"ref\":57,\"tf\":0.0023584905660377358}}}}}}}}}}}}}}}}}}}}}}}}}}}},\"g\":{\"docs\":{},\"r\":{\"docs\":{},\"a\":{\"docs\":{},\"m\":{\"docs\":{\"135\":{\"ref\":135,\"tf\":0.0019305019305019305}}}}}}},\"r\":{\"docs\":{},\"u\":{\"docs\":{},\"c\":{\"docs\":{},\"t\":{\"docs\":{\"129\":{\"ref\":129,\"tf\":0.0017391304347826088}}}}}}},\"i\":{\"docs\":{},\"d\":{\"docs\":{\"10\":{\"ref\":10,\"tf\":0.023809523809523808},\"20\":{\"ref\":20,\"tf\":0.02040816326530612},\"22\":{\"ref\":22,\"tf\":0.024390243902439025},\"31\":{\"ref\":31,\"tf\":0.047619047619047616},\"44\":{\"ref\":44,\"tf\":0.018518518518518517},\"59\":{\"ref\":59,\"tf\":0.002785515320334262},\"60\":{\"ref\":60,\"tf\":0.006818181818181818},\"72\":{\"ref\":72,\"tf\":0.002331002331002331},\"81\":{\"ref\":81,\"tf\":0.015151515151515152},\"82\":{\"ref\":82,\"tf\":0.03125},\"90\":{\"ref\":90,\"tf\":0.010416666666666666},\"96\":{\"ref\":96,\"tf\":0.017857142857142856},\"111\":{\"ref\":111,\"tf\":0.007518796992481203},\"117\":{\"ref\":117,\"tf\":0.007575757575757576},\"118\":{\"ref\":118,\"tf\":0.009523809523809525},\"123\":{\"ref\":123,\"tf\":0.007042253521126761},\"129\":{\"ref\":129,\"tf\":0.0034782608695652175},\"130\":{\"ref\":130,\"tf\":0.008771929824561403},\"133\":{\"ref\":133,\"tf\":0.0016750418760469012}}}},\"e\":{\"docs\":{},\"t\":{\"docs\":{\"20\":{\"ref\":20,\"tf\":5.1020408163265305},\"21\":{\"ref\":21,\"tf\":0.00980392156862745},\"30\":{\"ref\":30,\"tf\":5.081081081081081},\"31\":{\"ref\":31,\"tf\":5.142857142857143}}},\"r\":{\"docs\":{},\"t\":{\"docs\":{\"133\":{\"ref\":133,\"tf\":0.0016750418760469012}}}}},\"p\":{\"docs\":{},\"e\":{\"docs\":{},\"c\":{\"docs\":{},\"t\":{\"docs\":{},\"o\":{\"docs\":{},\"r\":{\"docs\":{\"60\":{\"ref\":60,\"tf\":0.004545454545454545}}}}}}}}},\"c\":{\"docs\":{},\"l\":{\"docs\":{},\"u\":{\"docs\":{},\"d\":{\"docs\":{\"4\":{\"ref\":4,\"tf\":0.022727272727272728},\"14\":{\"ref\":14,\"tf\":0.011494252873563218},\"21\":{\"ref\":21,\"tf\":0.00980392156862745},\"47\":{\"ref\":47,\"tf\":0.01},\"58\":{\"ref\":58,\"tf\":0.00273224043715847},\"59\":{\"ref\":59,\"tf\":0.016713091922005572},\"64\":{\"ref\":64,\"tf\":5},\"65\":{\"ref\":65,\"tf\":0.025},\"80\":{\"ref\":80,\"tf\":0.007692307692307693},\"103\":{\"ref\":103,\"tf\":0.006493506493506494},\"104\":{\"ref\":104,\"tf\":0.00423728813559322},\"123\":{\"ref\":123,\"tf\":0.0035211267605633804},\"130\":{\"ref\":130,\"tf\":0.0043859649122807015},\"134\":{\"ref\":134,\"tf\":0.0011507479861910242}}}}},\"h\":{\"docs\":{\"19\":{\"ref\":19,\"tf\":0.02},\"24\":{\"ref\":24,\"tf\":0.08333333333333333}}},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\"a\":{\"docs\":{},\"s\":{\"docs\":{\"54\":{\"ref\":54,\"tf\":0.001287001287001287}}}},\"m\":{\"docs\":{},\"e\":{\"docs\":{},\"n\":{\"docs\":{},\"t\":{\"docs\":{\"58\":{\"ref\":58,\"tf\":0.00273224043715847}}}}}}}},\"o\":{\"docs\":{},\"r\":{\"docs\":{},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\"c\":{\"docs\":{},\"t\":{\"docs\":{},\"l\":{\"docs\":{},\"i\":{\"docs\":{\"72\":{\"ref\":72,\"tf\":0.002331002331002331}}}}}}}}}}},\"l\":{\"docs\":{},\"i\":{\"docs\":{},\"n\":{\"docs\":{\"28\":{\"ref\":28,\"tf\":2.5384615384615383}},\"e\":{\"docs\":{},\"-\":{\"docs\":{},\"b\":{\"docs\":{},\"l\":{\"docs\":{},\"o\":{\"docs\":{},\"c\":{\"docs\":{},\"k\":{\"docs\":{\"4\":{\"ref\":4,\"tf\":0.022727272727272728}}}}}}}}}}}},\"f\":{\"docs\":{},\"o\":{\"docs\":{\"51\":{\"ref\":51,\"tf\":0.01694915254237288},\"84\":{\"ref\":84,\"tf\":0.0036363636363636364}},\"r\":{\"docs\":{},\"m\":{\"docs\":{\"14\":{\"ref\":14,\"tf\":0.011494252873563218},\"21\":{\"ref\":21,\"tf\":0.0196078431372549},\"23\":{\"ref\":23,\"tf\":0.06060606060606061},\"54\":{\"ref\":54,\"tf\":0.001287001287001287},\"56\":{\"ref\":56,\"tf\":0.001594896331738437},\"58\":{\"ref\":58,\"tf\":0.00273224043715847},\"69\":{\"ref\":69,\"tf\":0.05},\"84\":{\"ref\":84,\"tf\":0.0036363636363636364},\"93\":{\"ref\":93,\"tf\":0.014084507042253521},\"103\":{\"ref\":103,\"tf\":0.006493506493506494},\"126\":{\"ref\":126,\"tf\":0.011111111111111112},\"129\":{\"ref\":129,\"tf\":0.0034782608695652175}}}},\"]\":{\"docs\":{},\"(\":{\"docs\":{},\"h\":{\"docs\":{},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"p\":{\"docs\":{},\":\":{\"docs\":{},\"/\":{\"docs\":{},\"/\":{\"docs\":{},\"d\":{\"docs\":{},\"e\":{\"docs\":{},\"v\":{\"docs\":{},\"e\":{\"docs\":{},\"l\":{\"docs\":{},\"o\":{\"docs\":{},\"p\":{\"docs\":{},\"e\":{\"docs\":{},\"r\":{\"docs\":{},\".\":{\"docs\":{},\"a\":{\"docs\":{},\"n\":{\"docs\":{},\"d\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"i\":{\"docs\":{},\"d\":{\"docs\":{},\".\":{\"docs\":{},\"c\":{\"docs\":{},\"o\":{\"docs\":{},\"m\":{\"docs\":{},\"/\":{\"docs\":{},\"g\":{\"docs\":{},\"u\":{\"docs\":{},\"i\":{\"docs\":{},\"d\":{\"docs\":{},\"e\":{\"docs\":{},\"/\":{\"docs\":{},\"w\":{\"docs\":{},\"e\":{\"docs\":{},\"b\":{\"docs\":{},\"a\":{\"docs\":{},\"p\":{\"docs\":{},\"p\":{\"docs\":{},\"s\":{\"docs\":{},\"/\":{\"docs\":{},\"d\":{\"docs\":{},\"e\":{\"docs\":{},\"b\":{\"docs\":{},\"u\":{\"docs\":{},\"g\":{\"docs\":{},\"g\":{\"docs\":{},\"i\":{\"docs\":{},\"n\":{\"docs\":{},\"g\":{\"docs\":{},\".\":{\"docs\":{},\"h\":{\"docs\":{},\"t\":{\"docs\":{},\"m\":{\"docs\":{},\"l\":{\"docs\":{\"60\":{\"ref\":60,\"tf\":0.0022727272727272726}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},\"i\":{\"docs\":{},\"n\":{\"docs\":{},\"i\":{\"docs\":{},\"t\":{\"docs\":{\"59\":{\"ref\":59,\"tf\":0.002785515320334262},\"74\":{\"ref\":74,\"tf\":0.005988023952095809},\"78\":{\"ref\":78,\"tf\":0.011235955056179775},\"106\":{\"ref\":106,\"tf\":0.013333333333333334}}}}}}},\"t\":{\"docs\":{},\"e\":{\"docs\":{},\"r\":{\"docs\":{},\"a\":{\"docs\":{},\"c\":{\"docs\":{},\"t\":{\"docs\":{\"14\":{\"ref\":14,\"tf\":0.011494252873563218},\"57\":{\"ref\":57,\"tf\":0.0023584905660377358},\"61\":{\"ref\":61,\"tf\":0.021739130434782608},\"80\":{\"ref\":80,\"tf\":0.007692307692307693},\"110\":{\"ref\":110,\"tf\":0.01020408163265306},\"124\":{\"ref\":124,\"tf\":0.010309278350515464},\"134\":{\"ref\":134,\"tf\":0.0011507479861910242}}}}},\"f\":{\"docs\":{},\"a\":{\"docs\":{},\"c\":{\"docs\":{\"14\":{\"ref\":14,\"tf\":0.011494252873563218},\"38\":{\"ref\":38,\"tf\":0.011627906976744186},\"39\":{\"ref\":39,\"tf\":0.012658227848101266},\"80\":{\"ref\":80,\"tf\":0.007692307692307693},\"84\":{\"ref\":84,\"tf\":0.0036363636363636364},\"96\":{\"ref\":96,\"tf\":0.017857142857142856},\"123\":{\"ref\":123,\"tf\":0.007042253521126761},\"133\":{\"ref\":133,\"tf\":0.006700167504187605}}}},\"e\":{\"docs\":{},\"r\":{\"docs\":{\"104\":{\"ref\":104,\"tf\":0.00423728813559322}}}}},\"e\":{\"docs\":{},\"s\":{\"docs\":{},\"t\":{\"docs\":{\"126\":{\"ref\":126,\"tf\":0.011111111111111112},\"135\":{\"ref\":135,\"tf\":0.003861003861003861}}}}}},\"g\":{\"docs\":{\"90\":{\"ref\":90,\"tf\":0.020833333333333332}}}},\"r\":{\"docs\":{},\"o\":{\"docs\":{\"133\":{\"ref\":133,\"tf\":3.336683417085427}},\"d\":{\"docs\":{},\"u\":{\"docs\":{},\"c\":{\"docs\":{\"104\":{\"ref\":104,\"tf\":0.00423728813559322},\"133\":{\"ref\":133,\"tf\":0.0016750418760469012},\"134\":{\"ref\":134,\"tf\":0.0011507479861910242}}}}},\".\":{\"docs\":{},\"h\":{\"docs\":{},\"t\":{\"docs\":{},\"m\":{\"docs\":{},\"l\":{\"docs\":{\"133\":{\"ref\":133,\"tf\":0.005025125628140704}}}}}}},\"c\":{\"docs\":{},\"t\":{\"docs\":{},\"r\":{\"docs\":{},\"l\":{\"docs\":{\"133\":{\"ref\":133,\"tf\":0.0016750418760469012}}}}}}}}},\"d\":{\"docs\":{},\"i\":{\"docs\":{},\"v\":{\"docs\":{},\"i\":{\"docs\":{},\"d\":{\"docs\":{},\"u\":{\"docs\":{\"26\":{\"ref\":26,\"tf\":0.021739130434782608},\"31\":{\"ref\":31,\"tf\":0.047619047619047616},\"82\":{\"ref\":82,\"tf\":0.0078125},\"96\":{\"ref\":96,\"tf\":0.017857142857142856}}}}}},\"c\":{\"docs\":{\"72\":{\"ref\":72,\"tf\":0.002331002331002331},\"110\":{\"ref\":110,\"tf\":0.11224489795918367},\"124\":{\"ref\":124,\"tf\":0.010309278350515464},\"133\":{\"ref\":133,\"tf\":0.0033500837520938024}}}},\"e\":{\"docs\":{},\"x\":{\"docs\":{\"54\":{\"ref\":54,\"tf\":0.003861003861003861},\"72\":{\"ref\":72,\"tf\":0.006993006993006993},\"84\":{\"ref\":84,\"tf\":0.0036363636363636364},\"89\":{\"ref\":89,\"tf\":0.022727272727272728},\"105\":{\"ref\":105,\"tf\":0.005847953216374269},\"115\":{\"ref\":115,\"tf\":0.003246753246753247},\"117\":{\"ref\":117,\"tf\":0.015151515151515152},\"118\":{\"ref\":118,\"tf\":0.0380952380952381},\"119\":{\"ref\":119,\"tf\":0.011811023622047244}},\".\":{\"docs\":{},\"h\":{\"docs\":{},\"t\":{\"docs\":{},\"m\":{\"docs\":{},\"l\":{\"docs\":{\"59\":{\"ref\":59,\"tf\":0.008356545961002786},\"129\":{\"ref\":129,\"tf\":0.0017391304347826088}}}}}}}},\"p\":{\"docs\":{},\"e\":{\"docs\":{},\"n\":{\"docs\":{},\"d\":{\"docs\":{\"70\":{\"ref\":70,\"tf\":0.023809523809523808}}}}},\"t\":{\"docs\":{},\"h\":{\"docs\":{\"127\":{\"ref\":127,\"tf\":0.006622516556291391}}}}}}},\"p\":{\"docs\":{},\"u\":{\"docs\":{},\"t\":{\"docs\":{\"26\":{\"ref\":26,\"tf\":3.4202898550724634},\"27\":{\"ref\":27,\"tf\":2.564516129032258},\"28\":{\"ref\":28,\"tf\":2.5384615384615383},\"29\":{\"ref\":29,\"tf\":2.551282051282051},\"30\":{\"ref\":30,\"tf\":0.02702702702702703},\"31\":{\"ref\":31,\"tf\":5.095238095238095},\"32\":{\"ref\":32,\"tf\":5.08},\"33\":{\"ref\":33,\"tf\":5.1},\"34\":{\"ref\":34,\"tf\":0.03333333333333333},\"35\":{\"ref\":35,\"tf\":0.01818181818181818},\"36\":{\"ref\":36,\"tf\":0.05357142857142857},\"54\":{\"ref\":54,\"tf\":0.003861003861003861},\"71\":{\"ref\":71,\"tf\":0.008},\"73\":{\"ref\":73,\"tf\":0.05},\"87\":{\"ref\":87,\"tf\":0.041666666666666664},\"99\":{\"ref\":99,\"tf\":0.02127659574468085},\"103\":{\"ref\":103,\"tf\":0.01948051948051948},\"104\":{\"ref\":104,\"tf\":0.00847457627118644},\"114\":{\"ref\":114,\"tf\":0.006379585326953748},\"123\":{\"ref\":123,\"tf\":0.007042253521126761},\"126\":{\"ref\":126,\"tf\":0.022222222222222223},\"134\":{\"ref\":134,\"tf\":0.011507479861910242},\"136\":{\"ref\":136,\"tf\":0.010101010101010102}},\"'\":{\"docs\":{\"27\":{\"ref\":27,\"tf\":0.03225806451612903},\"29\":{\"ref\":29,\"tf\":0.02564102564102564},\"134\":{\"ref\":134,\"tf\":0.0023014959723820483}}},\"-\":{\"docs\":{},\"l\":{\"docs\":{},\"a\":{\"docs\":{},\"b\":{\"docs\":{},\"e\":{\"docs\":{},\"l\":{\"docs\":{\"28\":{\"ref\":28,\"tf\":0.038461538461538464},\"29\":{\"ref\":29,\"tf\":0.02564102564102564}}}}}}}},\"p\":{\"docs\":{},\"l\":{\"docs\":{},\"a\":{\"docs\":{},\"c\":{\"docs\":{},\"e\":{\"docs\":{},\"h\":{\"docs\":{},\"o\":{\"docs\":{},\"l\":{\"docs\":{},\"d\":{\"docs\":{\"114\":{\"ref\":114,\"tf\":0.003189792663476874}}}}}}}}}}},\"t\":{\"docs\":{},\"y\":{\"docs\":{},\"p\":{\"docs\":{\"114\":{\"ref\":114,\"tf\":0.003189792663476874},\"136\":{\"ref\":136,\"tf\":0.005050505050505051}}}}}}}},\"n\":{\"docs\":{},\"e\":{\"docs\":{},\"r\":{\"docs\":{\"52\":{\"ref\":52,\"tf\":0.010416666666666666},\"97\":{\"ref\":97,\"tf\":0.038461538461538464}}}}},\"e\":{\"docs\":{},\"f\":{\"docs\":{},\"f\":{\"docs\":{},\"i\":{\"docs\":{},\"c\":{\"docs\":{},\"i\":{\"docs\":{\"54\":{\"ref\":54,\"tf\":0.001287001287001287}}}}}}}},\"i\":{\"docs\":{},\"t\":{\"docs\":{},\"i\":{\"docs\":{\"54\":{\"ref\":54,\"tf\":0.002574002574002574},\"59\":{\"ref\":59,\"tf\":0.011142061281337047},\"104\":{\"ref\":104,\"tf\":0.00423728813559322},\"133\":{\"ref\":133,\"tf\":0.005025125628140704},\"134\":{\"ref\":134,\"tf\":0.0011507479861910242}},\"a\":{\"docs\":{},\"l\":{\"docs\":{},\"i\":{\"docs\":{},\"z\":{\"docs\":{},\"e\":{\"docs\":{},\"(\":{\"docs\":{},\"o\":{\"docs\":{},\"p\":{\"docs\":{},\"t\":{\"docs\":{\"71\":{\"ref\":71,\"tf\":0.008}}}}}}}}},\"-\":{\"docs\":{},\"l\":{\"docs\":{},\"o\":{\"docs\":{},\"a\":{\"docs\":{},\"d\":{\"docs\":{\"133\":{\"ref\":133,\"tf\":0.0016750418760469012}}}}}}}}}}}},\"v\":{\"docs\":{},\"e\":{\"docs\":{},\"s\":{\"docs\":{},\"t\":{\"docs\":{\"57\":{\"ref\":57,\"tf\":0.0023584905660377358}}}}}},\"/\":{\"docs\":{},\"o\":{\"docs\":{},\"u\":{\"docs\":{},\"t\":{\"docs\":{\"104\":{\"ref\":104,\"tf\":0.00423728813559322}}}}}},\"j\":{\"docs\":{},\"e\":{\"docs\":{},\"c\":{\"docs\":{},\"t\":{\"docs\":{\"136\":{\"ref\":136,\"tf\":0.005050505050505051}}}}}}},\"c\":{\"docs\":{\"114\":{\"ref\":114,\"tf\":0.004784688995215311}},\"o\":{\"docs\":{},\"n\":{\"docs\":{\"10\":{\"ref\":10,\"tf\":5.119047619047619},\"14\":{\"ref\":14,\"tf\":0.011494252873563218},\"16\":{\"ref\":16,\"tf\":5.088235294117647},\"18\":{\"ref\":18,\"tf\":0.02},\"19\":{\"ref\":19,\"tf\":0.02},\"25\":{\"ref\":25,\"tf\":0.022988505747126436},\"32\":{\"ref\":32,\"tf\":5.16},\"36\":{\"ref\":36,\"tf\":0.017857142857142856},\"39\":{\"ref\":39,\"tf\":0.02531645569620253},\"41\":{\"ref\":41,\"tf\":3.395833333333333},\"42\":{\"ref\":42,\"tf\":3.4047619047619047},\"51\":{\"ref\":51,\"tf\":10.152542372881356},\"54\":{\"ref\":54,\"tf\":0.001287001287001287},\"64\":{\"ref\":64,\"tf\":0.0625},\"78\":{\"ref\":78,\"tf\":0.02247191011235955},\"80\":{\"ref\":80,\"tf\":0.007692307692307693},\"88\":{\"ref\":88,\"tf\":0.019417475728155338},\"95\":{\"ref\":95,\"tf\":0.037383177570093455},\"123\":{\"ref\":123,\"tf\":0.0035211267605633804},\"126\":{\"ref\":126,\"tf\":0.011111111111111112},\"129\":{\"ref\":129,\"tf\":0.0017391304347826088}},\"-\":{\"docs\":{},\"o\":{\"docs\":{},\"n\":{\"docs\":{\"95\":{\"ref\":95,\"tf\":0.018691588785046728}},\"l\":{\"docs\":{},\"i\":{\"docs\":{\"40\":{\"ref\":40,\"tf\":5.142857142857143}}}}},\"f\":{\"docs\":{},\"f\":{\"docs\":{\"95\":{\"ref\":95,\"tf\":0.018691588785046728}}}}}}}}},\"t\":{\"docs\":{},\"e\":{\"docs\":{},\"m\":{\"docs\":{\"14\":{\"ref\":14,\"tf\":0.011494252873563218},\"15\":{\"ref\":15,\"tf\":0.06818181818181818},\"16\":{\"ref\":16,\"tf\":0.08088235294117647},\"17\":{\"ref\":17,\"tf\":0.07692307692307693},\"18\":{\"ref\":18,\"tf\":5.06},\"19\":{\"ref\":19,\"tf\":5.08},\"21\":{\"ref\":21,\"tf\":0.029411764705882353},\"25\":{\"ref\":25,\"tf\":0.04597701149425287},\"26\":{\"ref\":26,\"tf\":0.021739130434782608},\"29\":{\"ref\":29,\"tf\":0.02564102564102564},\"30\":{\"ref\":30,\"tf\":0.02702702702702703},\"31\":{\"ref\":31,\"tf\":0.09523809523809523},\"34\":{\"ref\":34,\"tf\":0.03333333333333333},\"35\":{\"ref\":35,\"tf\":0.05454545454545454},\"36\":{\"ref\":36,\"tf\":0.017857142857142856},\"37\":{\"ref\":37,\"tf\":0.0625},\"54\":{\"ref\":54,\"tf\":0.001287001287001287},\"72\":{\"ref\":72,\"tf\":0.05827505827505827},\"75\":{\"ref\":75,\"tf\":0.08333333333333333},\"80\":{\"ref\":80,\"tf\":0.06153846153846154},\"89\":{\"ref\":89,\"tf\":0.09090909090909091},\"111\":{\"ref\":111,\"tf\":0.007518796992481203},\"124\":{\"ref\":124,\"tf\":0.010309278350515464}},\"-\":{\"docs\":{},\"d\":{\"docs\":{},\"i\":{\"docs\":{},\"v\":{\"docs\":{},\"i\":{\"docs\":{},\"d\":{\"docs\":{\"15\":{\"ref\":15,\"tf\":0.022727272727272728},\"22\":{\"ref\":22,\"tf\":0.024390243902439025},\"25\":{\"ref\":25,\"tf\":0.011494252873563218}}}}}}},\"i\":{\"docs\":{},\"c\":{\"docs\":{},\"o\":{\"docs\":{},\"n\":{\"docs\":{},\"-\":{\"docs\":{},\"l\":{\"docs\":{},\"e\":{\"docs\":{},\"f\":{\"docs\":{},\"t\":{\"docs\":{\"16\":{\"ref\":16,\"tf\":0.007352941176470588}}}}}},\"r\":{\"docs\":{},\"i\":{\"docs\":{},\"g\":{\"docs\":{},\"h\":{\"docs\":{},\"t\":{\"docs\":{\"16\":{\"ref\":16,\"tf\":0.007352941176470588}}}}}}}}}}},\"n\":{\"docs\":{},\"p\":{\"docs\":{},\"u\":{\"docs\":{},\"t\":{\"docs\":{\"26\":{\"ref\":26,\"tf\":0.043478260869565216},\"32\":{\"ref\":32,\"tf\":0.04},\"54\":{\"ref\":54,\"tf\":0.001287001287001287}},\"-\":{\"docs\":{},\"i\":{\"docs\":{},\"n\":{\"docs\":{},\"s\":{\"docs\":{},\"e\":{\"docs\":{},\"t\":{\"docs\":{\"31\":{\"ref\":31,\"tf\":0.047619047619047616}}}}}}}}}}}}},\"n\":{\"docs\":{},\"o\":{\"docs\":{},\"t\":{\"docs\":{\"16\":{\"ref\":16,\"tf\":0.007352941176470588}}}}},\"b\":{\"docs\":{},\"u\":{\"docs\":{},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"o\":{\"docs\":{},\"n\":{\"docs\":{},\"-\":{\"docs\":{},\"l\":{\"docs\":{},\"e\":{\"docs\":{},\"f\":{\"docs\":{},\"t\":{\"docs\":{\"17\":{\"ref\":17,\"tf\":0.07692307692307693}}}}}},\"r\":{\"docs\":{},\"i\":{\"docs\":{},\"g\":{\"docs\":{},\"h\":{\"docs\":{},\"t\":{\"docs\":{\"17\":{\"ref\":17,\"tf\":0.07692307692307693}}}}}}}}}}}}},\"o\":{\"docs\":{},\"d\":{\"docs\":{},\"i\":{\"docs\":{\"25\":{\"ref\":25,\"tf\":0.011494252873563218}}}}}},\"a\":{\"docs\":{},\"v\":{\"docs\":{},\"a\":{\"docs\":{},\"t\":{\"docs\":{},\"a\":{\"docs\":{},\"r\":{\"docs\":{\"18\":{\"ref\":18,\"tf\":0.02},\"25\":{\"ref\":25,\"tf\":0.011494252873563218}}}}}}}},\"t\":{\"docs\":{},\"h\":{\"docs\":{},\"u\":{\"docs\":{},\"m\":{\"docs\":{},\"b\":{\"docs\":{},\"n\":{\"docs\":{},\"a\":{\"docs\":{},\"i\":{\"docs\":{},\"l\":{\"docs\":{},\"-\":{\"docs\":{},\"l\":{\"docs\":{},\"e\":{\"docs\":{},\"f\":{\"docs\":{},\"t\":{\"docs\":{\"19\":{\"ref\":19,\"tf\":0.02}}}}}},\"r\":{\"docs\":{},\"i\":{\"docs\":{},\"g\":{\"docs\":{},\"h\":{\"docs\":{},\"t\":{\"docs\":{\"19\":{\"ref\":19,\"tf\":0.02}}}}}}}}}}}}}}}},\"o\":{\"docs\":{},\"g\":{\"docs\":{},\"g\":{\"docs\":{},\"l\":{\"docs\":{\"34\":{\"ref\":34,\"tf\":0.016666666666666666}}}}}}},\"s\":{\"docs\":{},\"t\":{\"docs\":{},\"a\":{\"docs\":{},\"c\":{\"docs\":{},\"k\":{\"docs\":{},\"e\":{\"docs\":{},\"d\":{\"docs\":{},\"-\":{\"docs\":{},\"l\":{\"docs\":{},\"a\":{\"docs\":{},\"b\":{\"docs\":{},\"e\":{\"docs\":{},\"l\":{\"docs\":{\"29\":{\"ref\":29,\"tf\":0.02564102564102564}}}}}}}}}}}}}}},\"c\":{\"docs\":{},\"h\":{\"docs\":{},\"e\":{\"docs\":{},\"c\":{\"docs\":{},\"k\":{\"docs\":{},\"b\":{\"docs\":{},\"o\":{\"docs\":{},\"x\":{\"docs\":{\"35\":{\"ref\":35,\"tf\":0.01818181818181818}}}}}}}}}},\"r\":{\"docs\":{},\"a\":{\"docs\":{},\"d\":{\"docs\":{},\"i\":{\"docs\":{},\"o\":{\"docs\":{\"36\":{\"ref\":36,\"tf\":0.017857142857142856}}}}}}}},\".\":{\"docs\":{},\"i\":{\"docs\":{},\"d\":{\"docs\":{\"72\":{\"ref\":72,\"tf\":0.004662004662004662}}}},\"d\":{\"docs\":{},\"e\":{\"docs\":{},\"s\":{\"docs\":{},\"c\":{\"docs\":{},\"r\":{\"docs\":{},\"i\":{\"docs\":{},\"p\":{\"docs\":{},\"t\":{\"docs\":{\"80\":{\"ref\":80,\"tf\":0.007692307692307693}}}}}}}}}},\"t\":{\"docs\":{},\"i\":{\"docs\":{},\"t\":{\"docs\":{},\"l\":{\"docs\":{\"80\":{\"ref\":80,\"tf\":0.007692307692307693}}}}}}}}},\"'\":{\"docs\":{\"21\":{\"ref\":21,\"tf\":0.00980392156862745},\"26\":{\"ref\":26,\"tf\":0.021739130434782608},\"35\":{\"ref\":35,\"tf\":0.01818181818181818},\"43\":{\"ref\":43,\"tf\":0.006944444444444444},\"44\":{\"ref\":44,\"tf\":0.018518518518518517},\"45\":{\"ref\":45,\"tf\":0.00980392156862745},\"46\":{\"ref\":46,\"tf\":0.019230769230769232},\"47\":{\"ref\":47,\"tf\":0.01},\"48\":{\"ref\":48,\"tf\":0.011627906976744186},\"51\":{\"ref\":51,\"tf\":0.01694915254237288},\"54\":{\"ref\":54,\"tf\":0.002574002574002574},\"56\":{\"ref\":56,\"tf\":0.001594896331738437},\"57\":{\"ref\":57,\"tf\":0.007075471698113208},\"58\":{\"ref\":58,\"tf\":0.00273224043715847},\"60\":{\"ref\":60,\"tf\":0.004545454545454545},\"69\":{\"ref\":69,\"tf\":0.05},\"73\":{\"ref\":73,\"tf\":0.05},\"87\":{\"ref\":87,\"tf\":0.041666666666666664},\"127\":{\"ref\":127,\"tf\":0.006622516556291391},\"130\":{\"ref\":130,\"tf\":0.0043859649122807015},\"133\":{\"ref\":133,\"tf\":0.0016750418760469012},\"134\":{\"ref\":134,\"tf\":0.005753739930955121},\"135\":{\"ref\":135,\"tf\":0.003861003861003861}},\"l\":{\"docs\":{},\"l\":{\"docs\":{\"20\":{\"ref\":20,\"tf\":0.02040816326530612},\"27\":{\"ref\":27,\"tf\":0.03225806451612903},\"121\":{\"ref\":121,\"tf\":0.011627906976744186}}}},\"d\":{\"docs\":{\"48\":{\"ref\":48,\"tf\":0.011627906976744186}}}},\"-\":{\"docs\":{},\"o\":{\"docs\":{\"38\":{\"ref\":38,\"tf\":0.011627906976744186}}}},\"s\":{\"docs\":{},\"e\":{\"docs\":{},\"l\":{\"docs\":{},\"f\":{\"docs\":{\"46\":{\"ref\":46,\"tf\":0.019230769230769232},\"57\":{\"ref\":57,\"tf\":0.0023584905660377358},\"63\":{\"ref\":63,\"tf\":0.024390243902439025},\"71\":{\"ref\":71,\"tf\":0.008},\"82\":{\"ref\":82,\"tf\":0.0078125},\"130\":{\"ref\":130,\"tf\":0.008771929824561403},\"134\":{\"ref\":134,\"tf\":0.0011507479861910242},\"135\":{\"ref\":135,\"tf\":0.0019305019305019305}}}}}},\"&\":{\"docs\":{},\"#\":{\"3\":{\"9\":{\"docs\":{},\";\":{\"docs\":{\"123\":{\"ref\":123,\"tf\":0.007042253521126761}}}},\"docs\":{}},\"docs\":{}}},\"]\":{\"docs\":{},\"(\":{\"docs\":{},\"/\":{\"docs\":{},\"e\":{\"docs\":{},\"x\":{\"docs\":{},\"a\":{\"docs\":{},\"m\":{\"docs\":{},\"p\":{\"docs\":{},\"l\":{\"docs\":{},\"e\":{\"docs\":{},\"s\":{\"docs\":{},\"/\":{\"docs\":{},\"s\":{\"docs\":{},\"u\":{\"docs\":{},\"b\":{\"docs\":{},\"m\":{\"docs\":{},\"i\":{\"docs\":{},\"t\":{\"docs\":{},\".\":{\"docs\":{},\"h\":{\"docs\":{},\"t\":{\"docs\":{},\"m\":{\"docs\":{},\"l\":{\"docs\":{\"129\":{\"ref\":129,\"tf\":0.0017391304347826088}}}}}}}}}}}}}}}}}}}}}}}}},\"’\":{\"docs\":{\"134\":{\"ref\":134,\"tf\":0.005753739930955121}}}},\"m\":{\"docs\":{},\"a\":{\"docs\":{},\"g\":{\"docs\":{\"18\":{\"ref\":18,\"tf\":0.02},\"19\":{\"ref\":19,\"tf\":0.02},\"24\":{\"ref\":24,\"tf\":5.041666666666667},\"25\":{\"ref\":25,\"tf\":0.034482758620689655},\"72\":{\"ref\":72,\"tf\":0.002331002331002331}},\"i\":{\"docs\":{},\"n\":{\"docs\":{\"135\":{\"ref\":135,\"tf\":0.0019305019305019305}}}}}},\"p\":{\"docs\":{},\"o\":{\"docs\":{},\"r\":{\"docs\":{},\"t\":{\"docs\":{\"54\":{\"ref\":54,\"tf\":0.001287001287001287},\"74\":{\"ref\":74,\"tf\":0.005988023952095809},\"129\":{\"ref\":129,\"tf\":0.006956521739130435},\"136\":{\"ref\":136,\"tf\":0.005050505050505051}}}}},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"v\":{\"docs\":{\"56\":{\"ref\":56,\"tf\":0.001594896331738437},\"69\":{\"ref\":69,\"tf\":0.1},\"71\":{\"ref\":71,\"tf\":0.008},\"72\":{\"ref\":72,\"tf\":0.002331002331002331},\"73\":{\"ref\":73,\"tf\":0.05},\"74\":{\"ref\":74,\"tf\":0.005988023952095809},\"75\":{\"ref\":75,\"tf\":0.08333333333333333},\"76\":{\"ref\":76,\"tf\":0.018867924528301886},\"77\":{\"ref\":77,\"tf\":0.018867924528301886},\"78\":{\"ref\":78,\"tf\":0.011235955056179775},\"79\":{\"ref\":79,\"tf\":0.125},\"80\":{\"ref\":80,\"tf\":0.007692307692307693},\"81\":{\"ref\":81,\"tf\":0.015151515151515152},\"82\":{\"ref\":82,\"tf\":0.0078125},\"83\":{\"ref\":83,\"tf\":0.02127659574468085},\"84\":{\"ref\":84,\"tf\":0.0036363636363636364},\"85\":{\"ref\":85,\"tf\":0.09090909090909091},\"86\":{\"ref\":86,\"tf\":0.06666666666666667},\"87\":{\"ref\":87,\"tf\":0.041666666666666664},\"88\":{\"ref\":88,\"tf\":0.009708737864077669},\"89\":{\"ref\":89,\"tf\":0.022727272727272728},\"90\":{\"ref\":90,\"tf\":0.010416666666666666},\"91\":{\"ref\":91,\"tf\":0.0196078431372549},\"92\":{\"ref\":92,\"tf\":0.02857142857142857},\"93\":{\"ref\":93,\"tf\":0.014084507042253521},\"94\":{\"ref\":94,\"tf\":0.011111111111111112},\"95\":{\"ref\":95,\"tf\":0.009345794392523364},\"96\":{\"ref\":96,\"tf\":0.017857142857142856},\"97\":{\"ref\":97,\"tf\":0.019230769230769232},\"98\":{\"ref\":98,\"tf\":0.018867924528301886},\"99\":{\"ref\":99,\"tf\":0.02127659574468085},\"100\":{\"ref\":100,\"tf\":0.041666666666666664},\"101\":{\"ref\":101,\"tf\":0.043478260869565216},\"102\":{\"ref\":102,\"tf\":0.020833333333333332},\"103\":{\"ref\":103,\"tf\":0.006493506493506494},\"104\":{\"ref\":104,\"tf\":0.00423728813559322},\"105\":{\"ref\":105,\"tf\":0.005847953216374269},\"106\":{\"ref\":106,\"tf\":0.013333333333333334},\"107\":{\"ref\":107,\"tf\":0.012658227848101266},\"108\":{\"ref\":108,\"tf\":0.014492753623188406},\"109\":{\"ref\":109,\"tf\":0.008547008547008548},\"110\":{\"ref\":110,\"tf\":0.01020408163265306},\"111\":{\"ref\":111,\"tf\":0.007518796992481203},\"112\":{\"ref\":112,\"tf\":0.0058823529411764705},\"113\":{\"ref\":113,\"tf\":0.0070921985815602835},\"114\":{\"ref\":114,\"tf\":0.001594896331738437},\"115\":{\"ref\":115,\"tf\":0.003246753246753247},\"116\":{\"ref\":116,\"tf\":0.005555555555555556},\"117\":{\"ref\":117,\"tf\":0.007575757575757576},\"118\":{\"ref\":118,\"tf\":0.009523809523809525},\"119\":{\"ref\":119,\"tf\":0.003937007874015748},\"120\":{\"ref\":120,\"tf\":0.006289308176100629},\"121\":{\"ref\":121,\"tf\":0.005813953488372093},\"134\":{\"ref\":134,\"tf\":0.0011507479861910242}}}}},\"l\":{\"docs\":{},\"e\":{\"docs\":{},\"m\":{\"docs\":{},\"e\":{\"docs\":{},\"n\":{\"docs\":{},\"t\":{\"docs\":{\"59\":{\"ref\":59,\"tf\":0.002785515320334262},\"74\":{\"ref\":74,\"tf\":0.011976047904191617},\"104\":{\"ref\":104,\"tf\":0.00847457627118644},\"130\":{\"ref\":130,\"tf\":0.0043859649122807015},\"134\":{\"ref\":134,\"tf\":0.0011507479861910242},\"135\":{\"ref\":135,\"tf\":0.005791505791505791},\"136\":{\"ref\":136,\"tf\":0.010101010101010102}}}}}}},\"i\":{\"docs\":{\"72\":{\"ref\":72,\"tf\":0.002331002331002331}}}}},\"m\":{\"docs\":{},\"e\":{\"docs\":{},\"d\":{\"docs\":{},\"i\":{\"docs\":{\"113\":{\"ref\":113,\"tf\":0.0070921985815602835},\"119\":{\"ref\":119,\"tf\":0.003937007874015748},\"121\":{\"ref\":121,\"tf\":0.005813953488372093},\"131\":{\"ref\":131,\"tf\":0.05555555555555555},\"134\":{\"ref\":134,\"tf\":0.0034522439585730723}}}}}},\"g\":{\"docs\":{\"129\":{\"ref\":129,\"tf\":0.0017391304347826088},\"133\":{\"ref\":133,\"tf\":0.0016750418760469012}}}},\"s\":{\"docs\":{},\"n\":{\"docs\":{},\"'\":{\"docs\":{},\"t\":{\"docs\":{\"18\":{\"ref\":18,\"tf\":0.02},\"58\":{\"ref\":58,\"tf\":0.00273224043715847},\"134\":{\"ref\":134,\"tf\":0.0011507479861910242}}}}},\"s\":{\"docs\":{},\"u\":{\"docs\":{\"60\":{\"ref\":60,\"tf\":0.0022727272727272726},\"103\":{\"ref\":103,\"tf\":0.006493506493506494},\"134\":{\"ref\":134,\"tf\":0.006904487917146145}}},\"h\":{\"docs\":{},\"o\":{\"docs\":{},\"w\":{\"docs\":{},\"n\":{\"docs\":{\"71\":{\"ref\":71,\"tf\":0.008}}}}}}},\"-\":{\"docs\":{},\"e\":{\"docs\":{},\"n\":{\"docs\":{\"91\":{\"ref\":91,\"tf\":0.0196078431372549}}}}},\"o\":{\"docs\":{},\"l\":{\"docs\":{\"105\":{\"ref\":105,\"tf\":0.005847953216374269}}},\"p\":{\"docs\":{},\"e\":{\"docs\":{},\"n\":{\"docs\":{\"116\":{\"ref\":116,\"tf\":0.016666666666666666}},\"l\":{\"docs\":{},\"e\":{\"docs\":{},\"f\":{\"docs\":{},\"t\":{\"docs\":{\"116\":{\"ref\":116,\"tf\":0.005555555555555556}}}}}},\"r\":{\"docs\":{},\"i\":{\"docs\":{},\"g\":{\"docs\":{},\"h\":{\"docs\":{},\"t\":{\"docs\":{\"116\":{\"ref\":116,\"tf\":0.005555555555555556}}}}}}}}}}},\"a\":{\"docs\":{},\"n\":{\"docs\":{},\"d\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"i\":{\"docs\":{},\"d\":{\"docs\":{\"121\":{\"ref\":121,\"tf\":0.005813953488372093}}}}}}}}},\"f\":{\"docs\":{},\"u\":{\"docs\":{},\"l\":{\"docs\":{},\"l\":{\"docs\":{},\"s\":{\"docs\":{},\"c\":{\"docs\":{},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\"e\":{\"docs\":{},\"n\":{\"docs\":{\"121\":{\"ref\":121,\"tf\":0.005813953488372093}}}}}}}}}}}},\"i\":{\"docs\":{},\"o\":{\"docs\":{\"121\":{\"ref\":121,\"tf\":0.005813953488372093}}},\"p\":{\"docs\":{},\"a\":{\"docs\":{},\"d\":{\"docs\":{\"121\":{\"ref\":121,\"tf\":0.005813953488372093}}}}}},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\"a\":{\"docs\":{},\"d\":{\"docs\":{},\"i\":{\"docs\":{\"121\":{\"ref\":121,\"tf\":0.005813953488372093}}}}}}},\"w\":{\"docs\":{},\"e\":{\"docs\":{},\"b\":{\"docs\":{},\"v\":{\"docs\":{},\"i\":{\"docs\":{},\"e\":{\"docs\":{},\"w\":{\"docs\":{\"121\":{\"ref\":121,\"tf\":0.005813953488372093}}}}}}}},\"i\":{\"docs\":{},\"n\":{\"docs\":{},\"d\":{\"docs\":{},\"o\":{\"docs\":{},\"w\":{\"docs\":{},\"s\":{\"docs\":{},\"p\":{\"docs\":{},\"h\":{\"docs\":{},\"o\":{\"docs\":{},\"n\":{\"docs\":{\"121\":{\"ref\":121,\"tf\":0.005813953488372093}}}}}}}}}}}}}},\"l\":{\"docs\":{},\"l\":{\"docs\":{\"19\":{\"ref\":19,\"tf\":0.02}}}},\"g\":{\"docs\":{},\"-\":{\"8\":{\"8\":{\"docs\":{\"38\":{\"ref\":38,\"tf\":0.011627906976744186}}},\"docs\":{}},\"docs\":{}},\"n\":{\"docs\":{},\"o\":{\"docs\":{},\"r\":{\"docs\":{\"134\":{\"ref\":134,\"tf\":0.0023014959723820483}}}}}},\"f\":{\"docs\":{},\"(\":{\"docs\":{},\"!\":{\"docs\":{},\"$\":{\"docs\":{},\"s\":{\"docs\":{},\"c\":{\"docs\":{},\"o\":{\"docs\":{},\"p\":{\"docs\":{},\"e\":{\"docs\":{},\".\":{\"docs\":{},\"a\":{\"docs\":{},\"c\":{\"docs\":{},\"t\":{\"docs\":{},\"i\":{\"docs\":{},\"v\":{\"docs\":{},\"e\":{\"docs\":{},\"p\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"j\":{\"docs\":{},\"e\":{\"docs\":{},\"c\":{\"docs\":{},\"t\":{\"docs\":{\"54\":{\"ref\":54,\"tf\":0.001287001287001287}}}}}}}}}}}}}}}}}}}}}}},\"$\":{\"docs\":{},\"s\":{\"docs\":{},\"c\":{\"docs\":{},\"o\":{\"docs\":{},\"p\":{\"docs\":{},\"e\":{\"docs\":{},\".\":{\"docs\":{},\"p\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"j\":{\"docs\":{},\"e\":{\"docs\":{},\"c\":{\"docs\":{},\"t\":{\"docs\":{},\"s\":{\"docs\":{},\".\":{\"docs\":{},\"l\":{\"docs\":{},\"e\":{\"docs\":{},\"n\":{\"docs\":{},\"g\":{\"docs\":{},\"t\":{\"docs\":{},\"h\":{\"docs\":{\"54\":{\"ref\":54,\"tf\":0.001287001287001287}}}}}}}}}}}}}}}}}}}}}}}},\"p\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"j\":{\"docs\":{},\"e\":{\"docs\":{},\"c\":{\"docs\":{},\"t\":{\"docs\":{},\"s\":{\"docs\":{},\"t\":{\"docs\":{},\"r\":{\"docs\":{\"54\":{\"ref\":54,\"tf\":0.001287001287001287}}}}},\"t\":{\"docs\":{},\"i\":{\"docs\":{},\"t\":{\"docs\":{},\"l\":{\"docs\":{\"54\":{\"ref\":54,\"tf\":0.002574002574002574}}}}}}}}}}}}},\"r\":{\"docs\":{\"114\":{\"ref\":114,\"tf\":0.001594896331738437}}},\"i\":{\"docs\":{},\"n\":{\"docs\":{},\"d\":{\"docs\":{},\"e\":{\"docs\":{},\"x\":{\"docs\":{\"133\":{\"ref\":133,\"tf\":0.0033500837520938024}}}}}}},\"w\":{\"docs\":{},\"i\":{\"docs\":{},\"n\":{\"docs\":{},\"d\":{\"docs\":{},\"o\":{\"docs\":{},\"w\":{\"docs\":{},\".\":{\"docs\":{},\"l\":{\"docs\":{},\"o\":{\"docs\":{},\"c\":{\"docs\":{},\"a\":{\"docs\":{},\"l\":{\"docs\":{},\"s\":{\"docs\":{},\"t\":{\"docs\":{},\"o\":{\"docs\":{},\"r\":{\"docs\":{},\"a\":{\"docs\":{},\"g\":{\"docs\":{},\"e\":{\"docs\":{},\"[\":{\"docs\":{},\"'\":{\"docs\":{},\"d\":{\"docs\":{},\"i\":{\"docs\":{},\"d\":{\"docs\":{},\"t\":{\"docs\":{},\"u\":{\"docs\":{},\"t\":{\"docs\":{},\"o\":{\"docs\":{},\"r\":{\"docs\":{},\"i\":{\"docs\":{\"133\":{\"ref\":133,\"tf\":0.0016750418760469012}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},\"a\":{\"3\":{\"2\":{\"docs\":{},\"-\":{\"docs\":{},\"l\":{\"docs\":{},\"i\":{\"docs\":{},\"b\":{\"docs\":{\"56\":{\"ref\":56,\"tf\":0.001594896331738437}}}}}}},\"docs\":{}},\"docs\":{}},\"p\":{\"docs\":{\"60\":{\"ref\":60,\"tf\":0.0022727272727272726}},\"h\":{\"docs\":{},\"o\":{\"docs\":{},\"n\":{\"docs\":{\"56\":{\"ref\":56,\"tf\":0.003189792663476874},\"60\":{\"ref\":60,\"tf\":0.0022727272727272726},\"135\":{\"ref\":135,\"tf\":0.0019305019305019305}}}}},\"a\":{\"docs\":{},\"d\":{\"docs\":{\"60\":{\"ref\":60,\"tf\":0.0022727272727272726},\"121\":{\"ref\":121,\"tf\":0.005813953488372093}}}}},\".\":{\"docs\":{\"99\":{\"ref\":99,\"tf\":0.02127659574468085},\"103\":{\"ref\":103,\"tf\":0.006493506493506494}}},\"=\":{\"0\":{\"docs\":{\"115\":{\"ref\":115,\"tf\":0.003246753246753247}}},\"docs\":{}}},\"m\":{\"docs\":{\"60\":{\"ref\":60,\"tf\":0.0022727272727272726}},\"o\":{\"docs\":{},\"r\":{\"docs\":{},\"e\":{\"docs\":{\"1\":{\"ref\":1,\"tf\":0.045454545454545456},\"2\":{\"ref\":2,\"tf\":0.025},\"10\":{\"ref\":10,\"tf\":0.07142857142857142},\"12\":{\"ref\":12,\"tf\":0.05},\"14\":{\"ref\":14,\"tf\":0.034482758620689655},\"16\":{\"ref\":16,\"tf\":0.007352941176470588},\"20\":{\"ref\":20,\"tf\":0.02040816326530612},\"21\":{\"ref\":21,\"tf\":0.00980392156862745},\"50\":{\"ref\":50,\"tf\":0.017857142857142856},\"51\":{\"ref\":51,\"tf\":0.01694915254237288},\"54\":{\"ref\":54,\"tf\":0.003861003861003861},\"56\":{\"ref\":56,\"tf\":0.001594896331738437},\"57\":{\"ref\":57,\"tf\":0.0023584905660377358},\"58\":{\"ref\":58,\"tf\":0.00273224043715847},\"59\":{\"ref\":59,\"tf\":0.002785515320334262},\"60\":{\"ref\":60,\"tf\":0.004545454545454545},\"65\":{\"ref\":65,\"tf\":0.025},\"69\":{\"ref\":69,\"tf\":0.05},\"72\":{\"ref\":72,\"tf\":0.011655011655011656},\"78\":{\"ref\":78,\"tf\":0.011235955056179775},\"81\":{\"ref\":81,\"tf\":0.015151515151515152},\"84\":{\"ref\":84,\"tf\":0.014545454545454545},\"92\":{\"ref\":92,\"tf\":0.02857142857142857},\"93\":{\"ref\":93,\"tf\":0.028169014084507043},\"96\":{\"ref\":96,\"tf\":0.017857142857142856},\"104\":{\"ref\":104,\"tf\":0.00423728813559322},\"114\":{\"ref\":114,\"tf\":0.001594896331738437},\"123\":{\"ref\":123,\"tf\":0.007042253521126761},\"127\":{\"ref\":127,\"tf\":0.006622516556291391},\"129\":{\"ref\":129,\"tf\":0.0017391304347826088},\"134\":{\"ref\":134,\"tf\":0.004602991944764097},\"135\":{\"ref\":135,\"tf\":0.013513513513513514},\"136\":{\"ref\":136,\"tf\":0.010101010101010102}}}},\"b\":{\"docs\":{},\"i\":{\"docs\":{},\"l\":{\"docs\":{\"4\":{\"ref\":4,\"tf\":0.022727272727272728},\"14\":{\"ref\":14,\"tf\":0.011494252873563218},\"21\":{\"ref\":21,\"tf\":0.00980392156862745},\"39\":{\"ref\":39,\"tf\":0.012658227848101266},\"57\":{\"ref\":57,\"tf\":0.030660377358490566},\"59\":{\"ref\":59,\"tf\":0.002785515320334262},\"60\":{\"ref\":60,\"tf\":0.011363636363636364},\"61\":{\"ref\":61,\"tf\":0.010869565217391304},\"67\":{\"ref\":67,\"tf\":0.05555555555555555},\"70\":{\"ref\":70,\"tf\":0.047619047619047616},\"80\":{\"ref\":80,\"tf\":0.007692307692307693},\"123\":{\"ref\":123,\"tf\":0.0035211267605633804},\"126\":{\"ref\":126,\"tf\":0.022222222222222223},\"127\":{\"ref\":127,\"tf\":0.006622516556291391},\"130\":{\"ref\":130,\"tf\":0.0043859649122807015},\"133\":{\"ref\":133,\"tf\":0.0016750418760469012},\"134\":{\"ref\":134,\"tf\":0.006904487917146145},\"135\":{\"ref\":135,\"tf\":0.007722007722007722},\"136\":{\"ref\":136,\"tf\":0.005050505050505051}}}}},\"d\":{\"docs\":{},\"e\":{\"docs\":{\"14\":{\"ref\":14,\"tf\":0.011494252873563218},\"58\":{\"ref\":58,\"tf\":0.00273224043715847},\"80\":{\"ref\":80,\"tf\":0.007692307692307693},\"97\":{\"ref\":97,\"tf\":0.019230769230769232},\"99\":{\"ref\":99,\"tf\":0.02127659574468085}},\"r\":{\"docs\":{},\"n\":{\"docs\":{\"36\":{\"ref\":36,\"tf\":0.017857142857142856},\"134\":{\"ref\":134,\"tf\":0.0011507479861910242}}}},\"l\":{\"docs\":{\"54\":{\"ref\":54,\"tf\":0.001287001287001287},\"94\":{\"ref\":94,\"tf\":0.011111111111111112},\"97\":{\"ref\":97,\"tf\":0.038461538461538464},\"123\":{\"ref\":123,\"tf\":0.0035211267605633804}}}},\"u\":{\"docs\":{},\"l\":{\"docs\":{\"43\":{\"ref\":43,\"tf\":0.006944444444444444},\"59\":{\"ref\":59,\"tf\":0.008356545961002786},\"84\":{\"ref\":84,\"tf\":0.0036363636363636364},\"122\":{\"ref\":122,\"tf\":3.333333333333333},\"123\":{\"ref\":123,\"tf\":3.333333333333333},\"124\":{\"ref\":124,\"tf\":3.333333333333333},\"125\":{\"ref\":125,\"tf\":3.333333333333333},\"133\":{\"ref\":133,\"tf\":0.0016750418760469012}}}},\"i\":{\"docs\":{},\"f\":{\"docs\":{},\"i\":{\"docs\":{\"50\":{\"ref\":50,\"tf\":0.008928571428571428},\"105\":{\"ref\":105,\"tf\":0.005847953216374269},\"129\":{\"ref\":129,\"tf\":0.0034782608695652175}}}}},\"a\":{\"docs\":{},\"l\":{\"docs\":{\"54\":{\"ref\":54,\"tf\":0.01673101673101673},\"71\":{\"ref\":71,\"tf\":0.096},\"111\":{\"ref\":111,\"tf\":0.06015037593984962},\"113\":{\"ref\":113,\"tf\":0.0070921985815602835},\"124\":{\"ref\":124,\"tf\":0.010309278350515464},\"136\":{\"ref\":136,\"tf\":0.010101010101010102}},\".\":{\"docs\":{},\"h\":{\"docs\":{},\"i\":{\"docs\":{},\"d\":{\"docs\":{},\"d\":{\"docs\":{},\"e\":{\"docs\":{},\"n\":{\"docs\":{\"71\":{\"ref\":71,\"tf\":0.008}}}}}}}},\"s\":{\"docs\":{},\"h\":{\"docs\":{},\"o\":{\"docs\":{},\"w\":{\"docs\":{},\"n\":{\"docs\":{\"71\":{\"ref\":71,\"tf\":0.008}}}}}}}},\"&\":{\"docs\":{},\"#\":{\"3\":{\"9\":{\"docs\":{},\";\":{\"docs\":{\"111\":{\"ref\":111,\"tf\":0.007518796992481203}}}},\"docs\":{}},\"docs\":{}}}}}},\"c\":{\"docs\":{},\"k\":{\"docs\":{},\"u\":{\"docs\":{},\"p\":{\"docs\":{\"54\":{\"ref\":54,\"tf\":0.001287001287001287},\"59\":{\"ref\":59,\"tf\":0.002785515320334262}}}}}},\"v\":{\"docs\":{},\"e\":{\"docs\":{\"54\":{\"ref\":54,\"tf\":0.001287001287001287},\"56\":{\"ref\":56,\"tf\":0.003189792663476874},\"72\":{\"ref\":72,\"tf\":0.004662004662004662},\"89\":{\"ref\":89,\"tf\":0.022727272727272728},\"104\":{\"ref\":104,\"tf\":0.00423728813559322},\"105\":{\"ref\":105,\"tf\":0.005847953216374269},\"117\":{\"ref\":117,\"tf\":0.007575757575757576},\"126\":{\"ref\":126,\"tf\":0.011111111111111112},\"130\":{\"ref\":130,\"tf\":0.0043859649122807015},\"133\":{\"ref\":133,\"tf\":0.006700167504187605}}}},\"m\":{\"docs\":{},\"e\":{\"docs\":{},\"n\":{\"docs\":{},\"t\":{\"docs\":{\"56\":{\"ref\":56,\"tf\":0.001594896331738437},\"104\":{\"ref\":104,\"tf\":0.00423728813559322},\"134\":{\"ref\":134,\"tf\":0.0011507479861910242}}}}}},\"u\":{\"docs\":{},\"s\":{\"docs\":{\"60\":{\"ref\":60,\"tf\":0.0022727272727272726},\"133\":{\"ref\":133,\"tf\":0.0016750418760469012}},\"e\":{\"docs\":{},\"d\":{\"docs\":{},\"o\":{\"docs\":{},\"w\":{\"docs\":{},\"n\":{\"docs\":{\"134\":{\"ref\":134,\"tf\":0.0011507479861910242}}}}}},\"m\":{\"docs\":{},\"o\":{\"docs\":{},\"v\":{\"docs\":{\"134\":{\"ref\":134,\"tf\":0.0011507479861910242}}}}},\"u\":{\"docs\":{},\"p\":{\"docs\":{\"134\":{\"ref\":134,\"tf\":0.0011507479861910242}}}}}}},\"n\":{\"docs\":{},\"t\":{\"docs\":{},\"h\":{\"docs\":{\"135\":{\"ref\":135,\"tf\":0.0019305019305019305}}}}}},\"a\":{\"docs\":{\"16\":{\"ref\":16,\"tf\":0.014705882352941176},\"17\":{\"ref\":17,\"tf\":0.15384615384615385}},\"r\":{\"docs\":{},\"k\":{\"docs\":{},\"u\":{\"docs\":{},\"p\":{\"docs\":{\"3\":{\"ref\":3,\"tf\":0.019230769230769232},\"54\":{\"ref\":54,\"tf\":0.003861003861003861},\"59\":{\"ref\":59,\"tf\":0.002785515320334262},\"84\":{\"ref\":84,\"tf\":0.0036363636363636364}}}}},\"i\":{\"docs\":{},\"o\":{\"docs\":{\"14\":{\"ref\":14,\"tf\":0.011494252873563218},\"16\":{\"ref\":16,\"tf\":0.007352941176470588}}}},\"g\":{\"docs\":{},\"i\":{\"docs\":{},\"n\":{\"docs\":{\"20\":{\"ref\":20,\"tf\":0.02040816326530612},\"52\":{\"ref\":52,\"tf\":0.020833333333333332},\"129\":{\"ref\":129,\"tf\":0.0017391304347826088},\"133\":{\"ref\":133,\"tf\":0.005025125628140704}},\"-\":{\"docs\":{},\"t\":{\"docs\":{},\"o\":{\"docs\":{},\"p\":{\"docs\":{\"133\":{\"ref\":133,\"tf\":0.0016750418760469012}}}}}}}}},\"t\":{\"docs\":{},\"i\":{\"docs\":{\"25\":{\"ref\":25,\"tf\":0.022988505747126436}}}}},\"k\":{\"docs\":{},\"e\":{\"docs\":{\"7\":{\"ref\":7,\"tf\":0.08},\"9\":{\"ref\":9,\"tf\":0.02702702702702703},\"21\":{\"ref\":21,\"tf\":0.00980392156862745},\"34\":{\"ref\":34,\"tf\":0.016666666666666666},\"35\":{\"ref\":35,\"tf\":0.01818181818181818},\"36\":{\"ref\":36,\"tf\":0.017857142857142856},\"54\":{\"ref\":54,\"tf\":0.006435006435006435},\"56\":{\"ref\":56,\"tf\":0.017543859649122806},\"57\":{\"ref\":57,\"tf\":0.0023584905660377358},\"58\":{\"ref\":58,\"tf\":0.00819672131147541},\"59\":{\"ref\":59,\"tf\":0.005571030640668524},\"60\":{\"ref\":60,\"tf\":0.0022727272727272726},\"72\":{\"ref\":72,\"tf\":0.004662004662004662},\"80\":{\"ref\":80,\"tf\":0.007692307692307693},\"104\":{\"ref\":104,\"tf\":0.00423728813559322},\"111\":{\"ref\":111,\"tf\":0.007518796992481203},\"115\":{\"ref\":115,\"tf\":0.003246753246753247},\"119\":{\"ref\":119,\"tf\":0.003937007874015748},\"124\":{\"ref\":124,\"tf\":0.020618556701030927},\"127\":{\"ref\":127,\"tf\":0.006622516556291391},\"129\":{\"ref\":129,\"tf\":0.0052173913043478265},\"132\":{\"ref\":132,\"tf\":0.01282051282051282},\"133\":{\"ref\":133,\"tf\":0.0033500837520938024},\"134\":{\"ref\":134,\"tf\":0.005753739930955121},\"135\":{\"ref\":135,\"tf\":0.007722007722007722},\"136\":{\"ref\":136,\"tf\":0.010101010101010102}},\"r\":{\"docs\":{\"70\":{\"ref\":70,\"tf\":0.023809523809523808}}}}},\"i\":{\"docs\":{},\"n\":{\"docs\":{\"13\":{\"ref\":13,\"tf\":0.019230769230769232},\"20\":{\"ref\":20,\"tf\":0.02040816326530612},\"54\":{\"ref\":54,\"tf\":0.001287001287001287},\"92\":{\"ref\":92,\"tf\":0.02857142857142857},\"93\":{\"ref\":93,\"tf\":0.028169014084507043},\"111\":{\"ref\":111,\"tf\":0.007518796992481203},\"123\":{\"ref\":123,\"tf\":0.01056338028169014},\"124\":{\"ref\":124,\"tf\":0.010309278350515464},\"133\":{\"ref\":133,\"tf\":0.011725293132328308}},\"t\":{\"docs\":{},\"a\":{\"docs\":{},\"i\":{\"docs\":{},\"n\":{\"docs\":{\"50\":{\"ref\":50,\"tf\":0.008928571428571428}}}}}},\"l\":{\"docs\":{},\"i\":{\"docs\":{\"61\":{\"ref\":61,\"tf\":0.010869565217391304}}}},\"c\":{\"docs\":{},\"t\":{\"docs\":{},\"r\":{\"docs\":{},\"l\":{\"docs\":{\"133\":{\"ref\":133,\"tf\":0.0016750418760469012}},\"(\":{\"docs\":{},\"$\":{\"docs\":{},\"s\":{\"docs\":{},\"c\":{\"docs\":{},\"o\":{\"docs\":{},\"p\":{\"docs\":{\"115\":{\"ref\":115,\"tf\":0.006493506493506494},\"116\":{\"ref\":116,\"tf\":0.005555555555555556}}}}}}}}}}}},\".\":{\"docs\":{},\"h\":{\"docs\":{},\"t\":{\"docs\":{},\"m\":{\"docs\":{},\"l\":{\"docs\":{\"133\":{\"ref\":133,\"tf\":0.0033500837520938024}}}}}}}},\"l\":{\"docs\":{\"16\":{\"ref\":16,\"tf\":0.014705882352941176}}}},\"n\":{\"docs\":{\"14\":{\"ref\":14,\"tf\":0.011494252873563218},\"18\":{\"ref\":18,\"tf\":0.04}},\"i\":{\"docs\":{\"21\":{\"ref\":21,\"tf\":0.029411764705882353},\"52\":{\"ref\":52,\"tf\":0.020833333333333332},\"57\":{\"ref\":57,\"tf\":0.007075471698113208},\"91\":{\"ref\":91,\"tf\":0.0196078431372549},\"94\":{\"ref\":94,\"tf\":0.011111111111111112},\"106\":{\"ref\":106,\"tf\":0.013333333333333334},\"110\":{\"ref\":110,\"tf\":0.02040816326530612},\"126\":{\"ref\":126,\"tf\":0.011111111111111112},\"129\":{\"ref\":129,\"tf\":0.0034782608695652175},\"132\":{\"ref\":132,\"tf\":0.01282051282051282},\"134\":{\"ref\":134,\"tf\":0.0034522439585730723}},\"p\":{\"docs\":{},\"u\":{\"docs\":{},\"l\":{\"docs\":{\"134\":{\"ref\":134,\"tf\":0.0023014959723820483}}}}}},\"a\":{\"docs\":{},\"g\":{\"docs\":{\"38\":{\"ref\":38,\"tf\":0.011627906976744186},\"84\":{\"ref\":84,\"tf\":0.007272727272727273},\"123\":{\"ref\":123,\"tf\":0.0035211267605633804}}}},\"u\":{\"docs\":{},\"a\":{\"docs\":{},\"l\":{\"docs\":{\"103\":{\"ref\":103,\"tf\":0.006493506493506494},\"134\":{\"ref\":134,\"tf\":0.0011507479861910242}}}}}},\"c\":{\"docs\":{\"56\":{\"ref\":56,\"tf\":0.001594896331738437},\"127\":{\"ref\":127,\"tf\":0.006622516556291391}},\"h\":{\"docs\":{},\"i\":{\"docs\":{},\"n\":{\"docs\":{\"19\":{\"ref\":19,\"tf\":0.02},\"24\":{\"ref\":24,\"tf\":0.08333333333333333}}}}}},\"t\":{\"docs\":{},\"c\":{\"docs\":{},\"h\":{\"docs\":{\"39\":{\"ref\":39,\"tf\":0.012658227848101266},\"72\":{\"ref\":72,\"tf\":0.002331002331002331},\"84\":{\"ref\":84,\"tf\":0.0036363636363636364},\"109\":{\"ref\":109,\"tf\":0.008547008547008548},\"112\":{\"ref\":112,\"tf\":0.0058823529411764705},\"115\":{\"ref\":115,\"tf\":0.00974025974025974},\"116\":{\"ref\":116,\"tf\":0.005555555555555556},\"117\":{\"ref\":117,\"tf\":0.007575757575757576},\"118\":{\"ref\":118,\"tf\":0.01904761904761905},\"119\":{\"ref\":119,\"tf\":0.015748031496062992}}}},\"t\":{\"docs\":{\"54\":{\"ref\":54,\"tf\":0.001287001287001287}},\"e\":{\"docs\":{},\"r\":{\"docs\":{\"43\":{\"ref\":43,\"tf\":0.006944444444444444},\"72\":{\"ref\":72,\"tf\":0.002331002331002331},\"104\":{\"ref\":104,\"tf\":0.00423728813559322},\"134\":{\"ref\":134,\"tf\":0.0011507479861910242}}}}},\"h\":{\"docs\":{},\".\":{\"docs\":{},\"a\":{\"docs\":{},\"b\":{\"docs\":{},\"s\":{\"docs\":{},\"(\":{\"docs\":{},\"r\":{\"docs\":{},\"a\":{\"docs\":{},\"t\":{\"docs\":{},\"i\":{\"docs\":{},\"o\":{\"docs\":{\"130\":{\"ref\":130,\"tf\":0.0043859649122807015}}}}}}}}}}}}}},\"d\":{\"docs\":{},\"e\":{\"docs\":{\"47\":{\"ref\":47,\"tf\":0.01},\"60\":{\"ref\":60,\"tf\":0.004545454545454545},\"74\":{\"ref\":74,\"tf\":0.005988023952095809},\"105\":{\"ref\":105,\"tf\":0.005847953216374269},\"124\":{\"ref\":124,\"tf\":0.010309278350515464},\"129\":{\"ref\":129,\"tf\":0.0034782608695652175},\"135\":{\"ref\":135,\"tf\":0.0019305019305019305}}}},\"v\":{\"docs\":{},\"e\":{\"docs\":{},\"r\":{\"docs\":{},\"i\":{\"docs\":{},\"c\":{\"docs\":{},\"k\":{\"docs\":{\"60\":{\"ref\":60,\"tf\":0.0022727272727272726}}}}}}}},\"x\":{\"docs\":{},\"l\":{\"docs\":{},\"y\":{\"docs\":{},\"n\":{\"docs\":{},\"c\":{\"docs\":{},\"h\":{\"docs\":{\"70\":{\"ref\":70,\"tf\":0.023809523809523808}}}}}}},\"-\":{\"docs\":{},\"z\":{\"docs\":{},\"o\":{\"docs\":{},\"o\":{\"docs\":{},\"m\":{\"docs\":{\"90\":{\"ref\":90,\"tf\":0.010416666666666666}}}}}}}},\"p\":{\"docs\":{\"72\":{\"ref\":72,\"tf\":0.002331002331002331},\"84\":{\"ref\":84,\"tf\":0.0036363636363636364},\"104\":{\"ref\":104,\"tf\":0.00847457627118644},\"133\":{\"ref\":133,\"tf\":0.0016750418760469012},\"135\":{\"ref\":135,\"tf\":0.0019305019305019305}}},\"s\":{\"docs\":{},\"t\":{\"docs\":{},\"e\":{\"docs\":{},\"r\":{\"docs\":{\"114\":{\"ref\":114,\"tf\":0.001594896331738437}}}}}},\"g\":{\"docs\":{},\"i\":{\"docs\":{},\"c\":{\"docs\":{\"129\":{\"ref\":129,\"tf\":0.0017391304347826088},\"134\":{\"ref\":134,\"tf\":0.0011507479861910242}}}}}},\"e\":{\"docs\":{},\"a\":{\"docs\":{},\"n\":{\"docs\":{\"8\":{\"ref\":8,\"tf\":0.02702702702702703},\"9\":{\"ref\":9,\"tf\":0.02702702702702703},\"52\":{\"ref\":52,\"tf\":0.010416666666666666},\"57\":{\"ref\":57,\"tf\":0.0023584905660377358},\"61\":{\"ref\":61,\"tf\":0.010869565217391304},\"67\":{\"ref\":67,\"tf\":0.027777777777777776},\"68\":{\"ref\":68,\"tf\":0.027777777777777776},\"72\":{\"ref\":72,\"tf\":0.002331002331002331},\"134\":{\"ref\":134,\"tf\":0.0011507479861910242},\"135\":{\"ref\":135,\"tf\":0.0019305019305019305},\"136\":{\"ref\":136,\"tf\":0.005050505050505051}},\"t\":{\"docs\":{\"50\":{\"ref\":50,\"tf\":0.008928571428571428},\"57\":{\"ref\":57,\"tf\":0.0023584905660377358},\"60\":{\"ref\":60,\"tf\":0.0022727272727272726},\"129\":{\"ref\":129,\"tf\":0.0017391304347826088},\"134\":{\"ref\":134,\"tf\":0.0023014959723820483}}}}},\"g\":{\"docs\":{},\"a\":{\"docs\":{\"14\":{\"ref\":14,\"tf\":0.011494252873563218}}}},\"t\":{\"docs\":{\"133\":{\"ref\":133,\"tf\":0.0016750418760469012}},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"i\":{\"docs\":{},\"d\":{\"docs\":{\"14\":{\"ref\":14,\"tf\":0.011494252873563218}}}}}},\"h\":{\"docs\":{},\"o\":{\"docs\":{},\"d\":{\"docs\":{\"39\":{\"ref\":39,\"tf\":0.012658227848101266},\"60\":{\"ref\":60,\"tf\":0.0022727272727272726},\"71\":{\"ref\":71,\"tf\":0.008},\"105\":{\"ref\":105,\"tf\":0.005847953216374269},\"107\":{\"ref\":107,\"tf\":0.012658227848101266},\"108\":{\"ref\":108,\"tf\":0.014492753623188406},\"109\":{\"ref\":109,\"tf\":0.02564102564102564},\"110\":{\"ref\":110,\"tf\":0.01020408163265306},\"111\":{\"ref\":111,\"tf\":0.022556390977443608},\"112\":{\"ref\":112,\"tf\":0.0058823529411764705},\"113\":{\"ref\":113,\"tf\":0.014184397163120567},\"114\":{\"ref\":114,\"tf\":0.001594896331738437},\"115\":{\"ref\":115,\"tf\":0.012987012987012988},\"116\":{\"ref\":116,\"tf\":0.016666666666666666},\"117\":{\"ref\":117,\"tf\":0.022727272727272728},\"118\":{\"ref\":118,\"tf\":0.02857142857142857},\"119\":{\"ref\":119,\"tf\":0.003937007874015748},\"120\":{\"ref\":120,\"tf\":0.006289308176100629},\"121\":{\"ref\":121,\"tf\":0.01744186046511628},\"134\":{\"ref\":134,\"tf\":0.0023014959723820483}}}}},\"a\":{\"docs\":{\"104\":{\"ref\":104,\"tf\":0.00423728813559322}}}},\"n\":{\"docs\":{},\"u\":{\"docs\":{\"54\":{\"ref\":54,\"tf\":0.005148005148005148},\"59\":{\"ref\":59,\"tf\":0.022284122562674095},\"60\":{\"ref\":60,\"tf\":0.004545454545454545},\"91\":{\"ref\":91,\"tf\":0.09803921568627451},\"92\":{\"ref\":92,\"tf\":0.02857142857142857},\"93\":{\"ref\":93,\"tf\":0.056338028169014086},\"100\":{\"ref\":100,\"tf\":0.125},\"101\":{\"ref\":101,\"tf\":0.08695652173913043},\"102\":{\"ref\":102,\"tf\":0.020833333333333332},\"116\":{\"ref\":116,\"tf\":0.1},\"123\":{\"ref\":123,\"tf\":0.014084507042253521},\"130\":{\"ref\":130,\"tf\":0.021929824561403508}},\"(\":{\"docs\":{\"93\":{\"ref\":93,\"tf\":0.014084507042253521},\"123\":{\"ref\":123,\"tf\":0.0035211267605633804}}},\"]\":{\"docs\":{},\"(\":{\"docs\":{},\"h\":{\"docs\":{},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"p\":{\"docs\":{},\":\":{\"docs\":{},\"/\":{\"docs\":{},\"/\":{\"docs\":{},\"i\":{\"docs\":{},\"o\":{\"docs\":{},\"n\":{\"docs\":{},\"i\":{\"docs\":{},\"c\":{\"docs\":{},\"f\":{\"docs\":{},\"r\":{\"docs\":{},\"a\":{\"docs\":{},\"m\":{\"docs\":{},\"e\":{\"docs\":{},\"w\":{\"docs\":{},\"o\":{\"docs\":{},\"r\":{\"docs\":{},\"k\":{\"docs\":{},\".\":{\"docs\":{},\"c\":{\"docs\":{},\"o\":{\"docs\":{},\"m\":{\"docs\":{},\".\":{\"docs\":{},\"s\":{\"3\":{\"docs\":{},\".\":{\"docs\":{},\"a\":{\"docs\":{},\"m\":{\"docs\":{},\"a\":{\"docs\":{},\"z\":{\"docs\":{},\"o\":{\"docs\":{},\"n\":{\"docs\":{},\"a\":{\"docs\":{},\"w\":{\"docs\":{},\"s\":{\"docs\":{},\".\":{\"docs\":{},\"c\":{\"docs\":{},\"o\":{\"docs\":{},\"m\":{\"docs\":{},\"/\":{\"docs\":{},\"d\":{\"docs\":{},\"o\":{\"docs\":{},\"c\":{\"docs\":{},\"s\":{\"docs\":{},\"/\":{\"docs\":{},\"c\":{\"docs\":{},\"o\":{\"docs\":{},\"n\":{\"docs\":{},\"t\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"l\":{\"docs\":{},\"l\":{\"docs\":{},\"e\":{\"docs\":{},\"r\":{\"docs\":{},\"s\":{\"docs\":{},\"/\":{\"docs\":{},\"s\":{\"docs\":{},\"i\":{\"docs\":{},\"d\":{\"docs\":{},\"e\":{\"docs\":{},\"m\":{\"docs\":{},\"e\":{\"docs\":{},\"n\":{\"docs\":{},\"u\":{\"docs\":{},\".\":{\"docs\":{},\"g\":{\"docs\":{},\"i\":{\"docs\":{},\"f\":{\"docs\":{\"93\":{\"ref\":93,\"tf\":0.014084507042253521}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},\"docs\":{}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},\"-\":{\"docs\":{},\"c\":{\"docs\":{},\"l\":{\"docs\":{},\"o\":{\"docs\":{},\"s\":{\"docs\":{\"100\":{\"ref\":100,\"tf\":10.041666666666666}}}}}},\"t\":{\"docs\":{},\"o\":{\"docs\":{},\"g\":{\"docs\":{},\"g\":{\"docs\":{},\"l\":{\"docs\":{\"101\":{\"ref\":101,\"tf\":10.043478260869565}}}}}}}},\"c\":{\"docs\":{},\"l\":{\"docs\":{},\"o\":{\"docs\":{},\"s\":{\"docs\":{\"123\":{\"ref\":123,\"tf\":0.0035211267605633804}}}}}},\"t\":{\"docs\":{},\"o\":{\"docs\":{},\"g\":{\"docs\":{},\"g\":{\"docs\":{},\"l\":{\"docs\":{\"123\":{\"ref\":123,\"tf\":0.0035211267605633804}}}}}}}}},\"m\":{\"docs\":{},\"o\":{\"docs\":{},\"r\":{\"docs\":{},\"i\":{\"docs\":{\"56\":{\"ref\":56,\"tf\":0.001594896331738437},\"71\":{\"ref\":71,\"tf\":0.008}}}}}},\"s\":{\"docs\":{},\"s\":{\"docs\":{},\"a\":{\"docs\":{},\"g\":{\"docs\":{\"114\":{\"ref\":114,\"tf\":0.001594896331738437}}}}}},\"r\":{\"docs\":{},\"e\":{\"docs\":{\"135\":{\"ref\":135,\"tf\":0.0019305019305019305}}}}},\"i\":{\"docs\":{},\"n\":{\"docs\":{},\"i\":{\"docs\":{},\"m\":{\"docs\":{\"12\":{\"ref\":12,\"tf\":0.05},\"104\":{\"ref\":104,\"tf\":0.00423728813559322},\"135\":{\"ref\":135,\"tf\":0.0019305019305019305}},\"u\":{\"docs\":{},\"m\":{\"docs\":{\"56\":{\"ref\":56,\"tf\":0.001594896331738437}}}}},\"-\":{\"docs\":{},\"b\":{\"docs\":{},\"o\":{\"docs\":{},\"o\":{\"docs\":{},\"k\":{\"docs\":{\"126\":{\"ref\":126,\"tf\":0.011111111111111112}}}}}}}},\"d\":{\"docs\":{\"54\":{\"ref\":54,\"tf\":0.001287001287001287},\"72\":{\"ref\":72,\"tf\":0.002331002331002331}}},\"u\":{\"docs\":{},\"t\":{\"docs\":{\"56\":{\"ref\":56,\"tf\":0.006379585326953748},\"127\":{\"ref\":127,\"tf\":0.006622516556291391}}}},\"-\":{\"docs\":{},\"z\":{\"docs\":{},\"o\":{\"docs\":{},\"o\":{\"docs\":{},\"m\":{\"docs\":{\"90\":{\"ref\":90,\"tf\":0.010416666666666666}}}}}}}},\"k\":{\"docs\":{},\"e\":{\"docs\":{\"14\":{\"ref\":14,\"tf\":0.011494252873563218}}}},\"x\":{\"docs\":{},\"i\":{\"docs\":{},\"n\":{\"docs\":{\"48\":{\"ref\":48,\"tf\":0.011627906976744186},\"65\":{\"ref\":65,\"tf\":0.025}}}}},\"s\":{\"docs\":{},\"s\":{\"docs\":{\"61\":{\"ref\":61,\"tf\":0.010869565217391304},\"134\":{\"ref\":134,\"tf\":0.0011507479861910242}}},\"u\":{\"docs\":{},\"n\":{\"docs\":{},\"d\":{\"docs\":{},\"e\":{\"docs\":{},\"r\":{\"docs\":{},\"s\":{\"docs\":{},\"t\":{\"docs\":{},\"a\":{\"docs\":{},\"n\":{\"docs\":{},\"d\":{\"docs\":{\"135\":{\"ref\":135,\"tf\":0.0019305019305019305}}}}}}}}}}}}},\"t\":{\"docs\":{\"68\":{\"ref\":68,\"tf\":0.05555555555555555},\"126\":{\"ref\":126,\"tf\":0.011111111111111112}}},\"l\":{\"docs\":{},\"l\":{\"docs\":{},\"i\":{\"docs\":{},\"s\":{\"docs\":{},\"e\":{\"docs\":{},\"c\":{\"docs\":{},\"o\":{\"docs\":{},\"n\":{\"docs\":{},\"d\":{\"docs\":{\"94\":{\"ref\":94,\"tf\":0.011111111111111112},\"110\":{\"ref\":110,\"tf\":0.02040816326530612},\"117\":{\"ref\":117,\"tf\":0.007575757575757576},\"134\":{\"ref\":134,\"tf\":0.0011507479861910242}}}}}}}}}}}},\"u\":{\"docs\":{},\"s\":{\"docs\":{},\"i\":{\"docs\":{},\"c\":{\"docs\":{\"16\":{\"ref\":16,\"tf\":0.007352941176470588},\"84\":{\"ref\":84,\"tf\":0.007272727272727273}},\".\":{\"docs\":{},\"h\":{\"docs\":{},\"t\":{\"docs\":{},\"m\":{\"docs\":{},\"l\":{\"docs\":{\"84\":{\"ref\":84,\"tf\":0.0036363636363636364}}}}}}}}},\"h\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"o\":{\"docs\":{},\"m\":{\"docs\":{\"54\":{\"ref\":54,\"tf\":0.001287001287001287}}}}}}}},\"c\":{\"docs\":{},\"h\":{\"docs\":{\"21\":{\"ref\":21,\"tf\":0.00980392156862745},\"54\":{\"ref\":54,\"tf\":0.001287001287001287},\"59\":{\"ref\":59,\"tf\":0.002785515320334262},\"60\":{\"ref\":60,\"tf\":0.0022727272727272726},\"84\":{\"ref\":84,\"tf\":0.0036363636363636364},\"129\":{\"ref\":129,\"tf\":0.0017391304347826088},\"134\":{\"ref\":134,\"tf\":0.0011507479861910242},\"135\":{\"ref\":135,\"tf\":0.003861003861003861}}}},\"l\":{\"docs\":{},\"t\":{\"docs\":{},\"i\":{\"docs\":{},\"-\":{\"docs\":{},\"l\":{\"docs\":{},\"i\":{\"docs\":{},\"n\":{\"docs\":{\"27\":{\"ref\":27,\"tf\":0.03225806451612903}}}}},\"p\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"j\":{\"docs\":{},\"e\":{\"docs\":{},\"c\":{\"docs\":{},\"t\":{\"docs\":{\"54\":{\"ref\":54,\"tf\":0.001287001287001287}}}}}}}},\"a\":{\"docs\":{},\"g\":{\"docs\":{\"94\":{\"ref\":94,\"tf\":0.011111111111111112},\"123\":{\"ref\":123,\"tf\":0.0035211267605633804}}}}},\"t\":{\"docs\":{},\"a\":{\"docs\":{},\"b\":{\"docs\":{\"96\":{\"ref\":96,\"tf\":0.017857142857142856},\"123\":{\"ref\":123,\"tf\":0.0035211267605633804}}}}},\"s\":{\"docs\":{},\"l\":{\"docs\":{},\"i\":{\"docs\":{},\"d\":{\"docs\":{\"133\":{\"ref\":133,\"tf\":0.0016750418760469012}}}}}}},\"p\":{\"docs\":{},\"l\":{\"docs\":{\"34\":{\"ref\":34,\"tf\":0.016666666666666666},\"35\":{\"ref\":35,\"tf\":0.01818181818181818},\"72\":{\"ref\":72,\"tf\":0.002331002331002331},\"84\":{\"ref\":84,\"tf\":0.0036363636363636364},\"104\":{\"ref\":104,\"tf\":0.00423728813559322},\"107\":{\"ref\":107,\"tf\":0.012658227848101266},\"123\":{\"ref\":123,\"tf\":0.0035211267605633804}}}}}}},\"t\":{\"docs\":{},\"l\":{\"docs\":{},\"i\":{\"docs\":{},\"-\":{\"docs\":{},\"s\":{\"docs\":{},\"c\":{\"docs\":{},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\"e\":{\"docs\":{},\"n\":{\"docs\":{\"133\":{\"ref\":133,\"tf\":0.0016750418760469012}}}}}}}}}}}}},\"c\":{\"docs\":{},\"f\":{\"docs\":{},\"l\":{\"docs\":{},\"y\":{\"docs\":{\"25\":{\"ref\":25,\"tf\":0.022988505747126436}}}}}},\"p\":{\"docs\":{},\"h\":{\"docs\":{\"35\":{\"ref\":35,\"tf\":0.01818181818181818}}}},\"y\":{\"docs\":{},\"g\":{\"docs\":{},\"e\":{\"docs\":{},\"e\":{\"docs\":{},\"t\":{\"docs\":{},\"o\":{\"docs\":{\"38\":{\"ref\":38,\"tf\":0.011627906976744186}}}}}}},\"-\":{\"docs\":{},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\"l\":{\"docs\":{},\"e\":{\"docs\":{},\"a\":{\"docs\":{},\"s\":{\"docs\":{},\"e\":{\"docs\":{},\"-\":{\"docs\":{},\"k\":{\"docs\":{},\"e\":{\"docs\":{},\"y\":{\"docs\":{},\".\":{\"docs\":{},\"k\":{\"docs\":{},\"e\":{\"docs\":{},\"y\":{\"docs\":{},\"s\":{\"docs\":{},\"t\":{\"docs\":{},\"o\":{\"docs\":{},\"r\":{\"docs\":{\"58\":{\"ref\":58,\"tf\":0.00819672131147541}}}}}}}}}}}}}}}}}}}}},\"i\":{\"docs\":{},\"m\":{\"docs\":{},\"a\":{\"docs\":{},\"g\":{\"docs\":{},\"e\":{\"docs\":{},\"-\":{\"docs\":{},\"i\":{\"docs\":{},\"t\":{\"docs\":{},\"e\":{\"docs\":{},\"m\":{\"docs\":{\"72\":{\"ref\":72,\"tf\":0.002331002331002331}}}}}}}}}}},\"t\":{\"docs\":{},\"e\":{\"docs\":{},\"m\":{\"docs\":{\"72\":{\"ref\":72,\"tf\":0.002331002331002331}}}}}}},\"p\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"j\":{\"docs\":{},\"e\":{\"docs\":{},\"c\":{\"docs\":{},\"t\":{\"docs\":{\"63\":{\"ref\":63,\"tf\":0.024390243902439025}}}}}}}},\"o\":{\"docs\":{},\"p\":{\"docs\":{},\"u\":{\"docs\":{},\"p\":{\"docs\":{\"114\":{\"ref\":114,\"tf\":0.001594896331738437}},\".\":{\"docs\":{},\"c\":{\"docs\":{},\"l\":{\"docs\":{},\"o\":{\"docs\":{},\"s\":{\"docs\":{\"114\":{\"ref\":114,\"tf\":0.001594896331738437}}}}}},\"t\":{\"docs\":{},\"h\":{\"docs\":{},\"e\":{\"docs\":{},\"n\":{\"docs\":{},\"(\":{\"docs\":{},\"f\":{\"docs\":{},\"u\":{\"docs\":{},\"n\":{\"docs\":{},\"c\":{\"docs\":{},\"t\":{\"docs\":{},\"i\":{\"docs\":{},\"o\":{\"docs\":{},\"n\":{\"docs\":{},\"(\":{\"docs\":{},\"r\":{\"docs\":{\"114\":{\"ref\":114,\"tf\":0.001594896331738437}}}}}}}}}}}}}}}}}}}}}}},\"c\":{\"docs\":{},\"o\":{\"docs\":{},\"n\":{\"docs\":{},\"t\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"l\":{\"docs\":{},\"l\":{\"docs\":{},\"e\":{\"docs\":{},\"r\":{\"docs\":{},\"(\":{\"docs\":{},\"$\":{\"docs\":{},\"s\":{\"docs\":{},\"c\":{\"docs\":{},\"o\":{\"docs\":{},\"p\":{\"docs\":{\"78\":{\"ref\":78,\"tf\":0.011235955056179775},\"107\":{\"ref\":107,\"tf\":0.012658227848101266}}}}}}}}}}}}}}}}},\"t\":{\"docs\":{},\"r\":{\"docs\":{},\"l\":{\"docs\":{},\"(\":{\"docs\":{},\"$\":{\"docs\":{},\"s\":{\"docs\":{},\"c\":{\"docs\":{},\"o\":{\"docs\":{},\"p\":{\"docs\":{\"81\":{\"ref\":81,\"tf\":0.030303030303030304},\"89\":{\"ref\":89,\"tf\":0.022727272727272728},\"109\":{\"ref\":109,\"tf\":0.008547008547008548},\"112\":{\"ref\":112,\"tf\":0.0058823529411764705},\"117\":{\"ref\":117,\"tf\":0.007575757575757576},\"118\":{\"ref\":118,\"tf\":0.009523809523809525}}}}}}}}}}}},\"a\":{\"docs\":{},\"p\":{\"docs\":{},\"p\":{\"docs\":{\"127\":{\"ref\":127,\"tf\":0.033112582781456956},\"133\":{\"ref\":133,\"tf\":0.0016750418760469012}}}}}}},\"p\":{\"docs\":{\"133\":{\"ref\":133,\"tf\":0.010050251256281407}},\"l\":{\"docs\":{},\"a\":{\"docs\":{},\"c\":{\"docs\":{},\"e\":{\"docs\":{\"1\":{\"ref\":1,\"tf\":0.045454545454545456},\"3\":{\"ref\":3,\"tf\":0.019230769230769232},\"11\":{\"ref\":11,\"tf\":0.045454545454545456},\"17\":{\"ref\":17,\"tf\":0.07692307692307693},\"21\":{\"ref\":21,\"tf\":0.00980392156862745},\"22\":{\"ref\":22,\"tf\":0.024390243902439025},\"28\":{\"ref\":28,\"tf\":0.038461538461538464},\"29\":{\"ref\":29,\"tf\":0.02564102564102564},\"31\":{\"ref\":31,\"tf\":0.09523809523809523},\"33\":{\"ref\":33,\"tf\":0.1},\"54\":{\"ref\":54,\"tf\":0.001287001287001287},\"56\":{\"ref\":56,\"tf\":0.001594896331738437},\"58\":{\"ref\":58,\"tf\":0.00273224043715847},\"59\":{\"ref\":59,\"tf\":0.002785515320334262},\"83\":{\"ref\":83,\"tf\":0.0425531914893617},\"88\":{\"ref\":88,\"tf\":0.009708737864077669},\"96\":{\"ref\":96,\"tf\":0.017857142857142856},\"114\":{\"ref\":114,\"tf\":0.014354066985645933},\"129\":{\"ref\":129,\"tf\":0.0017391304347826088},\"134\":{\"ref\":134,\"tf\":0.0011507479861910242}},\"h\":{\"docs\":{},\"o\":{\"docs\":{},\"l\":{\"docs\":{},\"d\":{\"docs\":{\"27\":{\"ref\":27,\"tf\":2.596774193548387},\"28\":{\"ref\":28,\"tf\":0.038461538461538464},\"29\":{\"ref\":29,\"tf\":0.02564102564102564},\"32\":{\"ref\":32,\"tf\":0.04},\"114\":{\"ref\":114,\"tf\":0.001594896331738437}},\"e\":{\"docs\":{},\"r\":{\"docs\":{},\"-\":{\"docs\":{},\"i\":{\"docs\":{},\"c\":{\"docs\":{},\"o\":{\"docs\":{},\"n\":{\"docs\":{\"32\":{\"ref\":32,\"tf\":0.04}}}}}}},\"=\":{\"docs\":{},\"\\\"\":{\"docs\":{},\"w\":{\"docs\":{},\"h\":{\"docs\":{},\"a\":{\"docs\":{},\"t\":{\"docs\":{\"54\":{\"ref\":54,\"tf\":0.001287001287001287}}}}}}}}}}}}}}}},\"n\":{\"docs\":{\"56\":{\"ref\":56,\"tf\":0.001594896331738437},\"129\":{\"ref\":129,\"tf\":0.0017391304347826088},\"135\":{\"ref\":135,\"tf\":0.003861003861003861}},\"e\":{\"docs\":{},\"t\":{\"docs\":{\"38\":{\"ref\":38,\"tf\":0.011627906976744186}}}}},\"t\":{\"docs\":{},\"f\":{\"docs\":{},\"o\":{\"docs\":{},\"r\":{\"docs\":{},\"m\":{\"docs\":{\"56\":{\"ref\":56,\"tf\":0.023923444976076555},\"57\":{\"ref\":57,\"tf\":0.0047169811320754715},\"58\":{\"ref\":58,\"tf\":0.00273224043715847},\"60\":{\"ref\":60,\"tf\":0.0022727272727272726},\"67\":{\"ref\":67,\"tf\":0.027777777777777776},\"104\":{\"ref\":104,\"tf\":0.00423728813559322},\"113\":{\"ref\":113,\"tf\":0.014184397163120567},\"121\":{\"ref\":121,\"tf\":0.03488372093023256},\"127\":{\"ref\":127,\"tf\":0.019867549668874173},\"132\":{\"ref\":132,\"tf\":0.01282051282051282}},\"'\":{\"docs\":{\"38\":{\"ref\":38,\"tf\":0.011627906976744186}}},\"-\":{\"docs\":{},\"s\":{\"docs\":{},\"p\":{\"docs\":{},\"e\":{\"docs\":{},\"c\":{\"docs\":{},\"i\":{\"docs\":{},\"f\":{\"docs\":{\"56\":{\"ref\":56,\"tf\":0.001594896331738437},\"60\":{\"ref\":60,\"tf\":0.004545454545454545}}}}}}}}},\"s\":{\"docs\":{},\"/\":{\"docs\":{},\"a\":{\"docs\":{},\"n\":{\"docs\":{},\"d\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"i\":{\"docs\":{},\"d\":{\"docs\":{\"58\":{\"ref\":58,\"tf\":0.00273224043715847}},\"/\":{\"docs\":{},\"a\":{\"docs\":{},\"n\":{\"docs\":{},\"d\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"i\":{\"docs\":{},\"d\":{\"docs\":{},\"m\":{\"docs\":{},\"a\":{\"docs\":{},\"n\":{\"docs\":{},\"i\":{\"docs\":{},\"f\":{\"docs\":{},\"e\":{\"docs\":{},\"s\":{\"docs\":{},\"t\":{\"docs\":{},\".\":{\"docs\":{},\"x\":{\"docs\":{},\"m\":{\"docs\":{},\"l\":{\"docs\":{\"58\":{\"ref\":58,\"tf\":0.00273224043715847}}}}}}}}}}}}}}}}}}}}},\"b\":{\"docs\":{},\"i\":{\"docs\":{},\"n\":{\"docs\":{\"58\":{\"ref\":58,\"tf\":0.00273224043715847}},\"/\":{\"docs\":{},\"h\":{\"docs\":{},\"e\":{\"docs\":{},\"l\":{\"docs\":{},\"l\":{\"docs\":{},\"o\":{\"docs\":{},\"w\":{\"docs\":{},\"o\":{\"docs\":{},\"r\":{\"docs\":{},\"l\":{\"docs\":{},\"d\":{\"docs\":{},\"-\":{\"docs\":{},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\"l\":{\"docs\":{},\"e\":{\"docs\":{},\"a\":{\"docs\":{},\"s\":{\"docs\":{},\"e\":{\"docs\":{},\"-\":{\"docs\":{},\"u\":{\"docs\":{},\"n\":{\"docs\":{},\"s\":{\"docs\":{},\"i\":{\"docs\":{},\"g\":{\"docs\":{},\"n\":{\"docs\":{},\"e\":{\"docs\":{},\"d\":{\"docs\":{},\".\":{\"docs\":{},\"a\":{\"docs\":{},\"p\":{\"docs\":{},\"k\":{\"docs\":{\"58\":{\"ref\":58,\"tf\":0.00273224043715847}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},\"i\":{\"docs\":{},\"o\":{\"docs\":{\"60\":{\"ref\":60,\"tf\":0.0022727272727272726}},\"s\":{\"docs\":{},\"/\":{\"docs\":{},\"w\":{\"docs\":{},\"w\":{\"docs\":{},\"w\":{\"docs\":{\"60\":{\"ref\":60,\"tf\":0.0022727272727272726}}}}}}}}},\"p\":{\"docs\":{},\"l\":{\"docs\":{},\"a\":{\"docs\":{},\"t\":{\"docs\":{},\"f\":{\"docs\":{},\"o\":{\"docs\":{},\"r\":{\"docs\":{},\"m\":{\"docs\":{\"60\":{\"ref\":60,\"tf\":0.0022727272727272726}}}}}}}}}}}},\"/\":{\"docs\":{},\"d\":{\"docs\":{},\"e\":{\"docs\":{},\"v\":{\"docs\":{},\"i\":{\"docs\":{},\"c\":{\"docs\":{\"104\":{\"ref\":104,\"tf\":0.00847457627118644}}}}}}}}}}}}},\"i\":{\"docs\":{\"58\":{\"ref\":58,\"tf\":0.02185792349726776},\"133\":{\"ref\":133,\"tf\":0.0016750418760469012},\"134\":{\"ref\":134,\"tf\":0.0011507479861910242}},\"n\":{\"docs\":{\"129\":{\"ref\":129,\"tf\":0.0017391304347826088}}}},\"y\":{\"docs\":{},\"t\":{\"docs\":{},\"h\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"u\":{\"docs\":{},\"g\":{\"docs\":{},\"h\":{\"docs\":{\"106\":{\"ref\":106,\"tf\":0.013333333333333334}}}}}}}}}}},\"u\":{\"docs\":{\"54\":{\"ref\":54,\"tf\":0.001287001287001287},\"135\":{\"ref\":135,\"tf\":0.0019305019305019305}},\"t\":{\"docs\":{},\"o\":{\"docs\":{},\"n\":{\"docs\":{},\"i\":{\"docs\":{},\"u\":{\"docs\":{},\"m\":{\"docs\":{\"35\":{\"ref\":35,\"tf\":0.01818181818181818}}}}}}}},\"g\":{\"docs\":{\"60\":{\"ref\":60,\"tf\":0.0022727272727272726}},\"i\":{\"docs\":{},\"n\":{\"docs\":{\"57\":{\"ref\":57,\"tf\":0.0023584905660377358},\"58\":{\"ref\":58,\"tf\":0.00819672131147541},\"60\":{\"ref\":60,\"tf\":0.0022727272727272726},\"61\":{\"ref\":61,\"tf\":0.010869565217391304},\"66\":{\"ref\":66,\"tf\":0.043478260869565216},\"103\":{\"ref\":103,\"tf\":0.01948051948051948},\"132\":{\"ref\":132,\"tf\":0.038461538461538464},\"134\":{\"ref\":134,\"tf\":0.0011507479861910242},\"135\":{\"ref\":135,\"tf\":0.023166023166023165}},\"]\":{\"docs\":{},\"(\":{\"docs\":{},\"h\":{\"docs\":{},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"p\":{\"docs\":{},\"s\":{\"docs\":{},\":\":{\"docs\":{},\"/\":{\"docs\":{},\"/\":{\"docs\":{},\"g\":{\"docs\":{},\"i\":{\"docs\":{},\"t\":{\"docs\":{},\"h\":{\"docs\":{},\"u\":{\"docs\":{},\"b\":{\"docs\":{},\".\":{\"docs\":{},\"c\":{\"docs\":{},\"o\":{\"docs\":{},\"m\":{\"docs\":{},\"/\":{\"docs\":{},\"d\":{\"docs\":{},\"r\":{\"docs\":{},\"i\":{\"docs\":{},\"f\":{\"docs\":{},\"t\":{\"docs\":{},\"y\":{\"docs\":{},\"c\":{\"docs\":{},\"o\":{\"docs\":{},\"/\":{\"docs\":{},\"i\":{\"docs\":{},\"o\":{\"docs\":{},\"n\":{\"docs\":{},\"i\":{\"docs\":{},\"c\":{\"docs\":{},\"-\":{\"docs\":{},\"p\":{\"docs\":{},\"l\":{\"docs\":{},\"u\":{\"docs\":{},\"g\":{\"docs\":{},\"i\":{\"docs\":{},\"n\":{\"docs\":{},\"s\":{\"docs\":{},\"-\":{\"docs\":{},\"k\":{\"docs\":{},\"e\":{\"docs\":{},\"y\":{\"docs\":{},\"b\":{\"docs\":{},\"o\":{\"docs\":{},\"a\":{\"docs\":{},\"r\":{\"docs\":{},\"d\":{\"docs\":{\"99\":{\"ref\":99,\"tf\":0.02127659574468085},\"103\":{\"ref\":103,\"tf\":0.006493506493506494}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},\"e\":{\"docs\":{},\"a\":{\"docs\":{},\"s\":{\"docs\":{\"51\":{\"ref\":51,\"tf\":0.03389830508474576},\"84\":{\"ref\":84,\"tf\":0.0036363636363636364},\"114\":{\"ref\":114,\"tf\":0.001594896331738437},\"129\":{\"ref\":129,\"tf\":0.0017391304347826088},\"133\":{\"ref\":133,\"tf\":0.0016750418760469012},\"134\":{\"ref\":134,\"tf\":0.0011507479861910242}}}}}},\"a\":{\"docs\":{},\"r\":{\"docs\":{},\"a\":{\"docs\":{},\"g\":{\"docs\":{},\"r\":{\"docs\":{},\"a\":{\"docs\":{},\"p\":{\"docs\":{},\"h\":{\"docs\":{\"2\":{\"ref\":2,\"tf\":0.025},\"25\":{\"ref\":25,\"tf\":0.022988505747126436}}}}}}},\"m\":{\"docs\":{\"71\":{\"ref\":71,\"tf\":0.008},\"105\":{\"ref\":105,\"tf\":0.005847953216374269},\"108\":{\"ref\":108,\"tf\":0.028985507246376812},\"109\":{\"ref\":109,\"tf\":0.03418803418803419},\"110\":{\"ref\":110,\"tf\":0.01020408163265306},\"111\":{\"ref\":111,\"tf\":0.015037593984962405},\"112\":{\"ref\":112,\"tf\":0.041176470588235294},\"113\":{\"ref\":113,\"tf\":0.028368794326241134},\"114\":{\"ref\":114,\"tf\":0.006379585326953748},\"115\":{\"ref\":115,\"tf\":0.025974025974025976},\"116\":{\"ref\":116,\"tf\":0.022222222222222223},\"117\":{\"ref\":117,\"tf\":0.022727272727272728},\"118\":{\"ref\":118,\"tf\":0.01904761904761905},\"119\":{\"ref\":119,\"tf\":0.03543307086614173},\"120\":{\"ref\":120,\"tf\":0.031446540880503145},\"121\":{\"ref\":121,\"tf\":0.01744186046511628}},\"e\":{\"docs\":{},\"t\":{\"docs\":{\"89\":{\"ref\":89,\"tf\":0.022727272727272728}}}}},\"l\":{\"docs\":{},\"l\":{\"docs\":{},\"e\":{\"docs\":{},\"l\":{\"docs\":{\"84\":{\"ref\":84,\"tf\":0.0036363636363636364}}}}}}},\"t\":{\"docs\":{\"4\":{\"ref\":4,\"tf\":0.022727272727272728},\"26\":{\"ref\":26,\"tf\":0.021739130434782608},\"54\":{\"ref\":54,\"tf\":0.001287001287001287},\"61\":{\"ref\":61,\"tf\":0.010869565217391304},\"84\":{\"ref\":84,\"tf\":0.0036363636363636364},\"126\":{\"ref\":126,\"tf\":0.011111111111111112},\"134\":{\"ref\":134,\"tf\":0.0023014959723820483},\"135\":{\"ref\":135,\"tf\":0.003861003861003861}},\"i\":{\"docs\":{\"57\":{\"ref\":57,\"tf\":0.0023584905660377358},\"132\":{\"ref\":132,\"tf\":0.01282051282051282}}}},\"e\":{\"docs\":{},\"n\":{\"docs\":{},\"t\":{\"docs\":{\"6\":{\"ref\":6,\"tf\":0.023809523809523808},\"30\":{\"ref\":30,\"tf\":0.05405405405405406},\"72\":{\"ref\":72,\"tf\":0.002331002331002331},\"83\":{\"ref\":83,\"tf\":0.0425531914893617},\"93\":{\"ref\":93,\"tf\":0.014084507042253521},\"98\":{\"ref\":98,\"tf\":0.07547169811320754},\"119\":{\"ref\":119,\"tf\":0.007874015748031496},\"123\":{\"ref\":123,\"tf\":0.0035211267605633804}},\"'\":{\"docs\":{\"5\":{\"ref\":5,\"tf\":0.02564102564102564}}}}}},\"s\":{\"docs\":{},\"e\":{\"docs\":{},\"i\":{\"docs\":{},\"n\":{\"docs\":{},\"t\":{\"docs\":{},\"(\":{\"docs\":{},\"w\":{\"docs\":{},\"i\":{\"docs\":{},\"n\":{\"docs\":{},\"d\":{\"docs\":{},\"o\":{\"docs\":{},\"w\":{\"docs\":{},\".\":{\"docs\":{},\"l\":{\"docs\":{},\"o\":{\"docs\":{},\"c\":{\"docs\":{},\"a\":{\"docs\":{},\"l\":{\"docs\":{},\"s\":{\"docs\":{},\"t\":{\"docs\":{},\"o\":{\"docs\":{},\"r\":{\"docs\":{},\"a\":{\"docs\":{},\"g\":{\"docs\":{},\"e\":{\"docs\":{},\"[\":{\"docs\":{},\"'\":{\"docs\":{},\"l\":{\"docs\":{},\"a\":{\"docs\":{},\"s\":{\"docs\":{},\"t\":{\"docs\":{},\"a\":{\"docs\":{},\"c\":{\"docs\":{},\"t\":{\"docs\":{},\"i\":{\"docs\":{},\"v\":{\"docs\":{},\"e\":{\"docs\":{},\"p\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"j\":{\"docs\":{},\"e\":{\"docs\":{},\"c\":{\"docs\":{},\"t\":{\"docs\":{\"54\":{\"ref\":54,\"tf\":0.001287001287001287}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},\"d\":{\"docs\":{\"5\":{\"ref\":5,\"tf\":0.02564102564102564},\"6\":{\"ref\":6,\"tf\":0.023809523809523808},\"30\":{\"ref\":30,\"tf\":0.02702702702702703},\"52\":{\"ref\":52,\"tf\":10.135416666666666},\"74\":{\"ref\":74,\"tf\":0.011976047904191617},\"129\":{\"ref\":129,\"tf\":0.0017391304347826088}},\"d\":{\"docs\":{},\"i\":{\"docs\":{},\"n\":{\"docs\":{},\"g\":{\"docs\":{},\"-\":{\"docs\":{},\"b\":{\"docs\":{},\"o\":{\"docs\":{},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"o\":{\"docs\":{},\"m\":{\"docs\":{\"52\":{\"ref\":52,\"tf\":0.010416666666666666}}}}}}}},\"h\":{\"docs\":{},\"o\":{\"docs\":{},\"r\":{\"docs\":{},\"i\":{\"docs\":{},\"z\":{\"docs\":{},\"o\":{\"docs\":{},\"n\":{\"docs\":{},\"t\":{\"docs\":{\"52\":{\"ref\":52,\"tf\":0.010416666666666666}}}}}}}}}},\"l\":{\"docs\":{},\"e\":{\"docs\":{},\"f\":{\"docs\":{},\"t\":{\"docs\":{\"52\":{\"ref\":52,\"tf\":0.010416666666666666}}}}}},\"r\":{\"docs\":{},\"i\":{\"docs\":{},\"g\":{\"docs\":{},\"h\":{\"docs\":{},\"t\":{\"docs\":{\"52\":{\"ref\":52,\"tf\":0.010416666666666666}}}}}}},\"t\":{\"docs\":{},\"o\":{\"docs\":{},\"p\":{\"docs\":{\"52\":{\"ref\":52,\"tf\":0.010416666666666666},\"133\":{\"ref\":133,\"tf\":0.0016750418760469012}}}}},\"v\":{\"docs\":{},\"e\":{\"docs\":{},\"r\":{\"docs\":{},\"t\":{\"docs\":{\"52\":{\"ref\":52,\"tf\":0.010416666666666666}}}}}}}}}}}},\"g\":{\"docs\":{},\"e\":{\"docs\":{\"21\":{\"ref\":21,\"tf\":0.00980392156862745},\"54\":{\"ref\":54,\"tf\":0.001287001287001287},\"57\":{\"ref\":57,\"tf\":0.0023584905660377358},\"59\":{\"ref\":59,\"tf\":0.005571030640668524},\"72\":{\"ref\":72,\"tf\":0.002331002331002331},\"78\":{\"ref\":78,\"tf\":0.02247191011235955},\"84\":{\"ref\":84,\"tf\":0.01818181818181818},\"90\":{\"ref\":90,\"tf\":0.020833333333333332},\"94\":{\"ref\":94,\"tf\":0.011111111111111112},\"96\":{\"ref\":96,\"tf\":0.017857142857142856},\"98\":{\"ref\":98,\"tf\":0.03773584905660377},\"113\":{\"ref\":113,\"tf\":0.0070921985815602835},\"115\":{\"ref\":115,\"tf\":0.00974025974025974},\"118\":{\"ref\":118,\"tf\":0.009523809523809525},\"123\":{\"ref\":123,\"tf\":0.01056338028169014},\"133\":{\"ref\":133,\"tf\":0.006700167504187605},\"134\":{\"ref\":134,\"tf\":0.0023014959723820483}},\"!\":{\"docs\":{},\"<\":{\"docs\":{},\"/\":{\"docs\":{},\"a\":{\"docs\":{\"84\":{\"ref\":84,\"tf\":0.0036363636363636364}}}}}},\"r\":{\"docs\":{\"94\":{\"ref\":94,\"tf\":0.022222222222222223}},\"-\":{\"docs\":{},\"c\":{\"docs\":{},\"l\":{\"docs\":{},\"i\":{\"docs\":{},\"c\":{\"docs\":{},\"k\":{\"docs\":{\"94\":{\"ref\":94,\"tf\":0.011111111111111112}}}}}}}}},\".\":{\"docs\":{},\"v\":{\"docs\":{},\"e\":{\"docs\":{},\"r\":{\"docs\":{},\"s\":{\"docs\":{},\"i\":{\"docs\":{},\"o\":{\"docs\":{},\"n\":{\"docs\":{},\"h\":{\"docs\":{},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\"f\":{\"docs\":{\"99\":{\"ref\":99,\"tf\":0.02127659574468085}}}}}}}}}}}}}}}},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"e\":{\"docs\":{},\"r\":{\"docs\":{},\"n\":{\"docs\":{\"21\":{\"ref\":21,\"tf\":0.00980392156862745},\"72\":{\"ref\":72,\"tf\":0.004662004662004662},\"133\":{\"ref\":133,\"tf\":0.0016750418760469012}}}}}},\"h\":{\"docs\":{\"56\":{\"ref\":56,\"tf\":0.014354066985645933}}},\"i\":{\"docs\":{},\"e\":{\"docs\":{},\"n\":{\"docs\":{},\"t\":{\"docs\":{\"56\":{\"ref\":56,\"tf\":0.001594896331738437},\"58\":{\"ref\":58,\"tf\":0.00273224043715847}}}}}}},\"s\":{\"docs\":{},\"s\":{\"docs\":{\"54\":{\"ref\":54,\"tf\":0.001287001287001287},\"71\":{\"ref\":71,\"tf\":0.008},\"78\":{\"ref\":78,\"tf\":0.011235955056179775},\"94\":{\"ref\":94,\"tf\":0.022222222222222223},\"111\":{\"ref\":111,\"tf\":0.015037593984962405},\"114\":{\"ref\":114,\"tf\":0.001594896331738437},\"119\":{\"ref\":119,\"tf\":0.007874015748031496},\"120\":{\"ref\":120,\"tf\":0.006289308176100629}},\"w\":{\"docs\":{},\"o\":{\"docs\":{},\"r\":{\"docs\":{},\"d\":{\"docs\":{\"23\":{\"ref\":23,\"tf\":0.06060606060606061},\"28\":{\"ref\":28,\"tf\":0.07692307692307693},\"58\":{\"ref\":58,\"tf\":0.00273224043715847},\"114\":{\"ref\":114,\"tf\":0.011164274322169059},\"136\":{\"ref\":136,\"tf\":0.04040404040404041}}}}}},\"a\":{\"docs\":{},\"g\":{\"docs\":{\"59\":{\"ref\":59,\"tf\":0.002785515320334262}}}}},\"t\":{\"docs\":{\"57\":{\"ref\":57,\"tf\":0.0023584905660377358},\"74\":{\"ref\":74,\"tf\":0.005988023952095809},\"130\":{\"ref\":130,\"tf\":0.0043859649122807015}}}},\"c\":{\"docs\":{},\"k\":{\"docs\":{\"51\":{\"ref\":51,\"tf\":0.01694915254237288},\"64\":{\"ref\":64,\"tf\":0.0625}},\"a\":{\"docs\":{},\"g\":{\"docs\":{\"56\":{\"ref\":56,\"tf\":0.001594896331738437}}}}}},\"n\":{\"docs\":{},\"e\":{\"docs\":{\"86\":{\"ref\":86,\"tf\":0.06666666666666667},\"105\":{\"ref\":105,\"tf\":0.005847953216374269},\"111\":{\"ref\":111,\"tf\":0.007518796992481203},\"124\":{\"ref\":124,\"tf\":0.020618556701030927}}}}},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\"s\":{\"docs\":{},\"e\":{\"docs\":{},\"n\":{\"docs\":{},\"t\":{\"docs\":{\"3\":{\"ref\":3,\"tf\":0.038461538461538464},\"26\":{\"ref\":26,\"tf\":0.021739130434782608}}}}},\"s\":{\"docs\":{\"105\":{\"ref\":105,\"tf\":0.005847953216374269},\"113\":{\"ref\":113,\"tf\":0.0070921985815602835},\"114\":{\"ref\":114,\"tf\":0.006379585326953748}}}},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"i\":{\"docs\":{\"19\":{\"ref\":19,\"tf\":0.02},\"24\":{\"ref\":24,\"tf\":0.08333333333333333},\"38\":{\"ref\":38,\"tf\":0.011627906976744186},\"48\":{\"ref\":48,\"tf\":0.011627906976744186},\"54\":{\"ref\":54,\"tf\":0.001287001287001287},\"59\":{\"ref\":59,\"tf\":0.002785515320334262},\"134\":{\"ref\":134,\"tf\":0.0023014959723820483},\"135\":{\"ref\":135,\"tf\":0.003861003861003861}}}}},\"d\":{\"docs\":{},\"i\":{\"docs\":{},\"c\":{\"docs\":{},\"t\":{\"docs\":{\"21\":{\"ref\":21,\"tf\":0.00980392156862745}}}}},\"e\":{\"docs\":{},\"f\":{\"docs\":{},\"i\":{\"docs\":{},\"n\":{\"docs\":{\"53\":{\"ref\":53,\"tf\":0.041666666666666664}}}}}}},\"f\":{\"docs\":{},\"e\":{\"docs\":{},\"r\":{\"docs\":{\"26\":{\"ref\":26,\"tf\":0.021739130434782608},\"34\":{\"ref\":34,\"tf\":0.016666666666666666},\"35\":{\"ref\":35,\"tf\":0.01818181818181818},\"36\":{\"ref\":36,\"tf\":0.017857142857142856},\"50\":{\"ref\":50,\"tf\":0.008928571428571428},\"56\":{\"ref\":56,\"tf\":0.003189792663476874},\"99\":{\"ref\":99,\"tf\":0.02127659574468085},\"103\":{\"ref\":103,\"tf\":0.006493506493506494}}}}},\"v\":{\"docs\":{},\"i\":{\"docs\":{},\"o\":{\"docs\":{},\"u\":{\"docs\":{\"54\":{\"ref\":54,\"tf\":0.001287001287001287},\"56\":{\"ref\":56,\"tf\":0.003189792663476874},\"58\":{\"ref\":58,\"tf\":0.00273224043715847},\"59\":{\"ref\":59,\"tf\":0.002785515320334262},\"60\":{\"ref\":60,\"tf\":0.004545454545454545},\"62\":{\"ref\":62,\"tf\":0.041666666666666664},\"81\":{\"ref\":81,\"tf\":0.015151515151515152},\"112\":{\"ref\":112,\"tf\":0.0058823529411764705},\"117\":{\"ref\":117,\"tf\":0.015151515151515152},\"133\":{\"ref\":133,\"tf\":0.0016750418760469012}},\"s\":{\"docs\":{\"130\":{\"ref\":130,\"tf\":0.0043859649122807015}}}}},\"e\":{\"docs\":{},\"w\":{\"docs\":{\"58\":{\"ref\":58,\"tf\":0.00273224043715847}}}}},\"e\":{\"docs\":{},\"n\":{\"docs\":{},\"t\":{\"docs\":{\"103\":{\"ref\":103,\"tf\":0.012987012987012988},\"104\":{\"ref\":104,\"tf\":0.00423728813559322},\"114\":{\"ref\":114,\"tf\":0.001594896331738437},\"134\":{\"ref\":134,\"tf\":0.0034522439585730723}}}}}},\"p\":{\"docs\":{},\"a\":{\"docs\":{},\"r\":{\"docs\":{\"58\":{\"ref\":58,\"tf\":0.00273224043715847},\"60\":{\"ref\":60,\"tf\":0.0022727272727272726}}}}},\"-\":{\"docs\":{},\"m\":{\"docs\":{},\"a\":{\"docs\":{},\"d\":{\"docs\":{\"135\":{\"ref\":135,\"tf\":0.0019305019305019305}}}}}}},\"o\":{\"docs\":{},\"-\":{\"docs\":{},\"a\":{\"docs\":{},\"m\":{\"docs\":{\"14\":{\"ref\":14,\"tf\":0.011494252873563218}}}}},\"v\":{\"docs\":{},\"i\":{\"docs\":{},\"d\":{\"docs\":{\"50\":{\"ref\":50,\"tf\":0.017857142857142856},\"54\":{\"ref\":54,\"tf\":0.001287001287001287},\"72\":{\"ref\":72,\"tf\":0.002331002331002331},\"74\":{\"ref\":74,\"tf\":0.005988023952095809},\"84\":{\"ref\":84,\"tf\":0.0036363636363636364},\"123\":{\"ref\":123,\"tf\":0.0035211267605633804},\"127\":{\"ref\":127,\"tf\":0.006622516556291391},\"135\":{\"ref\":135,\"tf\":0.003861003861003861}}}},\"e\":{\"docs\":{\"70\":{\"ref\":70,\"tf\":0.023809523809523808}}}},\"j\":{\"docs\":{},\"e\":{\"docs\":{},\"c\":{\"docs\":{},\"t\":{\"docs\":{\"54\":{\"ref\":54,\"tf\":0.036036036036036036},\"55\":{\"ref\":55,\"tf\":0.02040816326530612},\"56\":{\"ref\":56,\"tf\":0.007974481658692184},\"57\":{\"ref\":57,\"tf\":0.007075471698113208},\"59\":{\"ref\":59,\"tf\":0.013927576601671309},\"60\":{\"ref\":60,\"tf\":0.013636363636363636},\"61\":{\"ref\":61,\"tf\":0.010869565217391304},\"63\":{\"ref\":63,\"tf\":2.097560975609756},\"66\":{\"ref\":66,\"tf\":0.043478260869565216},\"68\":{\"ref\":68,\"tf\":0.05555555555555555},\"127\":{\"ref\":127,\"tf\":0.013245033112582781},\"128\":{\"ref\":128,\"tf\":0.07142857142857142},\"129\":{\"ref\":129,\"tf\":0.0017391304347826088},\"130\":{\"ref\":130,\"tf\":0.0043859649122807015},\"133\":{\"ref\":133,\"tf\":0.0033500837520938024},\"135\":{\"ref\":135,\"tf\":0.009652509652509652}},\".\":{\"docs\":{},\"t\":{\"docs\":{},\"i\":{\"docs\":{},\"t\":{\"docs\":{},\"l\":{\"docs\":{\"54\":{\"ref\":54,\"tf\":0.001287001287001287}}}}}}},\"s\":{\"docs\":{},\".\":{\"docs\":{},\"a\":{\"docs\":{},\"l\":{\"docs\":{\"54\":{\"ref\":54,\"tf\":0.001287001287001287}}}},\"n\":{\"docs\":{},\"e\":{\"docs\":{},\"w\":{\"docs\":{},\"p\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"j\":{\"docs\":{},\"e\":{\"docs\":{},\"c\":{\"docs\":{},\"t\":{\"docs\":{},\"(\":{\"docs\":{},\"p\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"j\":{\"docs\":{},\"e\":{\"docs\":{},\"c\":{\"docs\":{},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"i\":{\"docs\":{},\"t\":{\"docs\":{},\"l\":{\"docs\":{\"54\":{\"ref\":54,\"tf\":0.001287001287001287}}}}}}}}}}}}}}}}}}}}}}}},\"s\":{\"docs\":{},\"a\":{\"docs\":{},\"v\":{\"docs\":{},\"e\":{\"docs\":{},\"(\":{\"docs\":{},\"$\":{\"docs\":{},\"s\":{\"docs\":{},\"c\":{\"docs\":{},\"o\":{\"docs\":{},\"p\":{\"docs\":{},\"e\":{\"docs\":{},\".\":{\"docs\":{},\"p\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"j\":{\"docs\":{},\"e\":{\"docs\":{},\"c\":{\"docs\":{},\"t\":{\"docs\":{\"54\":{\"ref\":54,\"tf\":0.002574002574002574}}}}}}}}}}}}}}}}}}}},\"e\":{\"docs\":{},\"t\":{\"docs\":{},\"l\":{\"docs\":{},\"a\":{\"docs\":{},\"s\":{\"docs\":{},\"t\":{\"docs\":{},\"a\":{\"docs\":{},\"c\":{\"docs\":{},\"t\":{\"docs\":{},\"i\":{\"docs\":{},\"v\":{\"docs\":{},\"e\":{\"docs\":{},\"i\":{\"docs\":{},\"n\":{\"docs\":{},\"d\":{\"docs\":{},\"e\":{\"docs\":{},\"x\":{\"docs\":{},\"(\":{\"docs\":{},\"i\":{\"docs\":{},\"n\":{\"docs\":{},\"d\":{\"docs\":{},\"e\":{\"docs\":{},\"x\":{\"docs\":{\"54\":{\"ref\":54,\"tf\":0.001287001287001287}}}}}}}}}}}}}}}}}}}}}}}}}}},\"t\":{\"docs\":{},\"r\":{\"docs\":{\"54\":{\"ref\":54,\"tf\":0.001287001287001287}}}}},\"t\":{\"docs\":{},\"i\":{\"docs\":{},\"t\":{\"docs\":{},\"l\":{\"docs\":{\"54\":{\"ref\":54,\"tf\":0.005148005148005148}}}}}},\"]\":{\"docs\":{},\"(\":{\"docs\":{},\"h\":{\"docs\":{},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"p\":{\"docs\":{},\":\":{\"docs\":{},\"/\":{\"docs\":{},\"/\":{\"docs\":{},\"g\":{\"docs\":{},\"i\":{\"docs\":{},\"t\":{\"docs\":{},\"h\":{\"docs\":{},\"u\":{\"docs\":{},\"b\":{\"docs\":{},\".\":{\"docs\":{},\"c\":{\"docs\":{},\"o\":{\"docs\":{},\"m\":{\"docs\":{},\"/\":{\"docs\":{},\"d\":{\"docs\":{},\"r\":{\"docs\":{},\"i\":{\"docs\":{},\"f\":{\"docs\":{},\"t\":{\"docs\":{},\"y\":{\"docs\":{},\"c\":{\"docs\":{},\"o\":{\"docs\":{},\"/\":{\"docs\":{},\"i\":{\"docs\":{},\"o\":{\"docs\":{},\"n\":{\"docs\":{},\"i\":{\"docs\":{},\"c\":{\"docs\":{},\"-\":{\"docs\":{},\"a\":{\"docs\":{},\"n\":{\"docs\":{},\"g\":{\"docs\":{},\"u\":{\"docs\":{},\"l\":{\"docs\":{},\"a\":{\"docs\":{},\"r\":{\"docs\":{},\"-\":{\"docs\":{},\"c\":{\"docs\":{},\"o\":{\"docs\":{},\"r\":{\"docs\":{},\"d\":{\"docs\":{},\"o\":{\"docs\":{},\"v\":{\"docs\":{},\"a\":{\"docs\":{},\"-\":{\"docs\":{},\"s\":{\"docs\":{},\"e\":{\"docs\":{\"128\":{\"ref\":128,\"tf\":0.017857142857142856}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},\"m\":{\"docs\":{},\"p\":{\"docs\":{},\"t\":{\"docs\":{\"58\":{\"ref\":58,\"tf\":0.00273224043715847},\"114\":{\"ref\":114,\"tf\":0.004784688995215311},\"129\":{\"ref\":129,\"tf\":0.0017391304347826088},\"136\":{\"ref\":136,\"tf\":0.030303030303030304}},\"(\":{\"docs\":{},\"'\":{\"docs\":{},\"p\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"j\":{\"docs\":{},\"e\":{\"docs\":{},\"c\":{\"docs\":{},\"t\":{\"docs\":{\"54\":{\"ref\":54,\"tf\":0.001287001287001287}}}}}}}}},\"y\":{\"docs\":{},\"o\":{\"docs\":{},\"u\":{\"docs\":{},\"r\":{\"docs\":{\"54\":{\"ref\":54,\"tf\":0.001287001287001287}}}}}}},\"o\":{\"docs\":{},\"p\":{\"docs\":{},\"t\":{\"docs\":{\"114\":{\"ref\":114,\"tf\":0.001594896331738437}}}}}}}},\"i\":{\"docs\":{},\"s\":{\"docs\":{\"71\":{\"ref\":71,\"tf\":0.048},\"111\":{\"ref\":111,\"tf\":0.015037593984962405},\"113\":{\"ref\":113,\"tf\":0.014184397163120567},\"114\":{\"ref\":114,\"tf\":0.012759170653907496},\"136\":{\"ref\":136,\"tf\":0.005050505050505051}}}}},\"p\":{\"docs\":{},\"e\":{\"docs\":{},\"r\":{\"docs\":{\"57\":{\"ref\":57,\"tf\":0.0023584905660377358},\"135\":{\"ref\":135,\"tf\":0.005791505791505791}},\"l\":{\"docs\":{},\"i\":{\"docs\":{\"54\":{\"ref\":54,\"tf\":0.001287001287001287}}}},\"t\":{\"docs\":{},\"i\":{\"docs\":{\"54\":{\"ref\":54,\"tf\":0.001287001287001287},\"65\":{\"ref\":65,\"tf\":0.025},\"71\":{\"ref\":71,\"tf\":0.008},\"72\":{\"ref\":72,\"tf\":0.006993006993006993},\"104\":{\"ref\":104,\"tf\":0.00423728813559322},\"105\":{\"ref\":105,\"tf\":0.005847953216374269},\"110\":{\"ref\":110,\"tf\":0.01020408163265306},\"115\":{\"ref\":115,\"tf\":0.003246753246753247},\"119\":{\"ref\":119,\"tf\":0.007874015748031496},\"121\":{\"ref\":121,\"tf\":0.005813953488372093},\"129\":{\"ref\":129,\"tf\":0.0034782608695652175}}}}}},\"a\":{\"docs\":{},\"g\":{\"docs\":{\"134\":{\"ref\":134,\"tf\":0.0011507479861910242}}}},\"r\":{\"docs\":{},\"i\":{\"docs\":{},\"e\":{\"docs\":{},\"t\":{\"docs\":{},\"a\":{\"docs\":{},\"r\":{\"docs\":{},\"i\":{\"docs\":{\"135\":{\"ref\":135,\"tf\":0.0019305019305019305}}}}}}}}}},\"c\":{\"docs\":{},\"e\":{\"docs\":{},\"s\":{\"docs\":{},\"s\":{\"docs\":{\"55\":{\"ref\":55,\"tf\":0.02040816326530612},\"56\":{\"ref\":56,\"tf\":0.001594896331738437},\"59\":{\"ref\":59,\"tf\":0.005571030640668524},\"60\":{\"ref\":60,\"tf\":0.0022727272727272726},\"129\":{\"ref\":129,\"tf\":0.0052173913043478265}}}}}},\"g\":{\"docs\":{},\"r\":{\"docs\":{},\"a\":{\"docs\":{},\"m\":{\"docs\":{\"56\":{\"ref\":56,\"tf\":0.001594896331738437}},\"a\":{\"docs\":{},\"t\":{\"docs\":{\"84\":{\"ref\":84,\"tf\":0.0036363636363636364},\"124\":{\"ref\":124,\"tf\":0.010309278350515464}}}},\"m\":{\"docs\":{},\"a\":{\"docs\":{},\"t\":{\"docs\":{\"114\":{\"ref\":114,\"tf\":0.007974481658692184}}}}}}},\"e\":{\"docs\":{},\"s\":{\"docs\":{},\"s\":{\"docs\":{\"133\":{\"ref\":133,\"tf\":0.0033500837520938024}}}}}}},\"b\":{\"docs\":{},\"a\":{\"docs\":{},\"b\":{\"docs\":{},\"l\":{\"docs\":{\"58\":{\"ref\":58,\"tf\":0.00273224043715847},\"60\":{\"ref\":60,\"tf\":0.0022727272727272726},\"118\":{\"ref\":118,\"tf\":0.009523809523809525},\"129\":{\"ref\":129,\"tf\":0.0017391304347826088}}}}},\"l\":{\"docs\":{},\"e\":{\"docs\":{},\"m\":{\"docs\":{\"60\":{\"ref\":60,\"tf\":0.0022727272727272726},\"134\":{\"ref\":134,\"tf\":0.0011507479861910242}}}}}},\"d\":{\"docs\":{},\"u\":{\"docs\":{},\"c\":{\"docs\":{},\"t\":{\"docs\":{\"58\":{\"ref\":58,\"tf\":0.00273224043715847},\"70\":{\"ref\":70,\"tf\":0.023809523809523808},\"135\":{\"ref\":135,\"tf\":0.0019305019305019305}}}}}}},\"a\":{\"docs\":{},\"c\":{\"docs\":{},\"t\":{\"docs\":{},\"i\":{\"docs\":{},\"c\":{\"docs\":{\"54\":{\"ref\":54,\"tf\":0.001287001287001287},\"59\":{\"ref\":59,\"tf\":0.002785515320334262}}}}}}},\"i\":{\"docs\":{},\"n\":{\"docs\":{},\"c\":{\"docs\":{},\"e\":{\"docs\":{},\"s\":{\"docs\":{},\"s\":{\"docs\":{\"54\":{\"ref\":54,\"tf\":0.001287001287001287}}}}}}},\"v\":{\"docs\":{},\"a\":{\"docs\":{},\"t\":{\"docs\":{\"58\":{\"ref\":58,\"tf\":0.00273224043715847}}}}},\"o\":{\"docs\":{},\"r\":{\"docs\":{},\"i\":{\"docs\":{},\"t\":{\"docs\":{},\"i\":{\"docs\":{\"113\":{\"ref\":113,\"tf\":0.03546099290780142}}}}}}}}},\"u\":{\"docs\":{},\"l\":{\"docs\":{},\"l\":{\"docs\":{\"14\":{\"ref\":14,\"tf\":0.011494252873563218},\"88\":{\"ref\":88,\"tf\":0.038834951456310676}},\"-\":{\"docs\":{},\"r\":{\"docs\":{},\"i\":{\"docs\":{},\"g\":{\"docs\":{},\"h\":{\"docs\":{},\"t\":{\"docs\":{\"3\":{\"ref\":3,\"tf\":0.019230769230769232}}}}}}},\"t\":{\"docs\":{},\"o\":{\"docs\":{},\"-\":{\"docs\":{},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\"f\":{\"docs\":{},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\"s\":{\"docs\":{},\"h\":{\"docs\":{\"74\":{\"ref\":74,\"tf\":0.005988023952095809},\"88\":{\"ref\":88,\"tf\":0.009708737864077669},\"90\":{\"ref\":90,\"tf\":0.010416666666666666},\"123\":{\"ref\":123,\"tf\":0.0035211267605633804}}}}}}}}}}}}},\"i\":{\"docs\":{},\"n\":{\"docs\":{},\"g\":{\"docs\":{},\"-\":{\"docs\":{},\"i\":{\"docs\":{},\"c\":{\"docs\":{},\"o\":{\"docs\":{},\"n\":{\"docs\":{\"88\":{\"ref\":88,\"tf\":0.009708737864077669}}}}}},\"t\":{\"docs\":{},\"e\":{\"docs\":{},\"x\":{\"docs\":{},\"t\":{\"docs\":{\"88\":{\"ref\":88,\"tf\":0.009708737864077669}}}}}}}}}}}},\"n\":{\"docs\":{},\"c\":{\"docs\":{},\"h\":{\"docs\":{},\"-\":{\"docs\":{},\"o\":{\"docs\":{},\"u\":{\"docs\":{},\"t\":{\"docs\":{\"14\":{\"ref\":14,\"tf\":0.011494252873563218}}}}}}}}},\"m\":{\"docs\":{},\"p\":{\"docs\":{},\"k\":{\"docs\":{},\"i\":{\"docs\":{},\"n\":{\"docs\":{\"19\":{\"ref\":19,\"tf\":0.02}}}}}}},\"r\":{\"docs\":{},\"p\":{\"docs\":{},\"o\":{\"docs\":{},\"s\":{\"docs\":{\"50\":{\"ref\":50,\"tf\":0.008928571428571428},\"52\":{\"ref\":52,\"tf\":0.010416666666666666}}}}},\"c\":{\"docs\":{},\"h\":{\"docs\":{},\"a\":{\"docs\":{},\"s\":{\"docs\":{\"57\":{\"ref\":57,\"tf\":0.0023584905660377358},\"135\":{\"ref\":135,\"tf\":0.0019305019305019305}}}}}},\"e\":{\"docs\":{\"57\":{\"ref\":57,\"tf\":0.0023584905660377358},\"135\":{\"ref\":135,\"tf\":0.0019305019305019305}}}},\"b\":{\"docs\":{},\"l\":{\"docs\":{},\"i\":{\"docs\":{},\"s\":{\"docs\":{},\"h\":{\"docs\":{\"55\":{\"ref\":55,\"tf\":0.04081632653061224},\"58\":{\"ref\":58,\"tf\":3.3415300546448083}},\"i\":{\"docs\":{},\"n\":{\"docs\":{},\"g\":{\"docs\":{},\"]\":{\"docs\":{},\"(\":{\"docs\":{},\"p\":{\"docs\":{},\"u\":{\"docs\":{},\"b\":{\"docs\":{},\"l\":{\"docs\":{},\"i\":{\"docs\":{},\"s\":{\"docs\":{},\"h\":{\"docs\":{},\"i\":{\"docs\":{},\"n\":{\"docs\":{},\"g\":{\"docs\":{},\".\":{\"docs\":{},\"h\":{\"docs\":{},\"t\":{\"docs\":{},\"m\":{\"docs\":{},\"l\":{\"docs\":{\"54\":{\"ref\":54,\"tf\":0.001287001287001287}}}}}}}}}}}}}}}}}}}}}}}}}}},\"t\":{\"docs\":{\"54\":{\"ref\":54,\"tf\":0.001287001287001287},\"59\":{\"ref\":59,\"tf\":0.002785515320334262},\"72\":{\"ref\":72,\"tf\":0.002331002331002331},\"82\":{\"ref\":82,\"tf\":0.0234375},\"84\":{\"ref\":84,\"tf\":0.007272727272727273},\"95\":{\"ref\":95,\"tf\":0.018691588785046728},\"111\":{\"ref\":111,\"tf\":0.007518796992481203},\"115\":{\"ref\":115,\"tf\":0.003246753246753247},\"130\":{\"ref\":130,\"tf\":0.0043859649122807015},\"134\":{\"ref\":134,\"tf\":0.0023014959723820483}}},\"s\":{\"docs\":{},\"h\":{\"docs\":{\"58\":{\"ref\":58,\"tf\":0.00273224043715847},\"84\":{\"ref\":84,\"tf\":0.0036363636363636364},\"103\":{\"ref\":103,\"tf\":0.012987012987012988}}}}},\"o\":{\"docs\":{},\"w\":{\"docs\":{},\"e\":{\"docs\":{},\"r\":{\"docs\":{\"14\":{\"ref\":14,\"tf\":0.022988505747126436},\"50\":{\"ref\":50,\"tf\":0.008928571428571428},\"54\":{\"ref\":54,\"tf\":0.001287001287001287},\"57\":{\"ref\":57,\"tf\":0.0047169811320754715},\"61\":{\"ref\":61,\"tf\":0.021739130434782608},\"65\":{\"ref\":65,\"tf\":0.025},\"70\":{\"ref\":70,\"tf\":0.023809523809523808},\"82\":{\"ref\":82,\"tf\":0.0078125},\"84\":{\"ref\":84,\"tf\":0.0036363636363636364},\"96\":{\"ref\":96,\"tf\":0.017857142857142856},\"106\":{\"ref\":106,\"tf\":0.013333333333333334},\"123\":{\"ref\":123,\"tf\":0.0035211267605633804},\"129\":{\"ref\":129,\"tf\":0.0052173913043478265},\"131\":{\"ref\":131,\"tf\":0.05555555555555555},\"135\":{\"ref\":135,\"tf\":0.005791505791505791},\"136\":{\"ref\":136,\"tf\":0.005050505050505051}}}}},\"p\":{\"docs\":{\"136\":{\"ref\":136,\"tf\":0.005050505050505051}},\"u\":{\"docs\":{},\"p\":{\"docs\":{\"38\":{\"ref\":38,\"tf\":0.011627906976744186},\"107\":{\"ref\":107,\"tf\":0.012658227848101266},\"114\":{\"ref\":114,\"tf\":0.07496012759170653},\"124\":{\"ref\":124,\"tf\":0.020618556701030927},\"136\":{\"ref\":136,\"tf\":3.3787878787878785}},\"-\":{\"docs\":{},\"t\":{\"docs\":{},\"e\":{\"docs\":{},\"m\":{\"docs\":{},\"p\":{\"docs\":{},\"l\":{\"docs\":{},\"a\":{\"docs\":{},\"t\":{\"docs\":{},\"e\":{\"docs\":{},\".\":{\"docs\":{},\"h\":{\"docs\":{},\"t\":{\"docs\":{},\"m\":{\"docs\":{},\"l\":{\"docs\":{\"136\":{\"ref\":136,\"tf\":0.005050505050505051}}}}}}}}}}}}}}}}},\"l\":{\"docs\":{},\"a\":{\"docs\":{},\"r\":{\"docs\":{\"39\":{\"ref\":39,\"tf\":0.012658227848101266},\"68\":{\"ref\":68,\"tf\":0.027777777777777776},\"133\":{\"ref\":133,\"tf\":0.0016750418760469012},\"135\":{\"ref\":135,\"tf\":0.0019305019305019305}}}}}},\"i\":{\"docs\":{},\"n\":{\"docs\":{\"106\":{\"ref\":106,\"tf\":0.013333333333333334}}}}},\"i\":{\"docs\":{},\"n\":{\"docs\":{},\"t\":{\"docs\":{\"43\":{\"ref\":43,\"tf\":0.006944444444444444},\"54\":{\"ref\":54,\"tf\":0.001287001287001287},\"56\":{\"ref\":56,\"tf\":0.003189792663476874},\"115\":{\"ref\":115,\"tf\":0.003246753246753247},\"128\":{\"ref\":128,\"tf\":0.017857142857142856},\"129\":{\"ref\":129,\"tf\":0.0017391304347826088},\"133\":{\"ref\":133,\"tf\":0.0033500837520938024}},\"e\":{\"docs\":{},\"r\":{\"docs\":{\"104\":{\"ref\":104,\"tf\":0.00423728813559322}}}}}}},\"r\":{\"docs\":{},\"t\":{\"docs\":{},\"r\":{\"docs\":{},\"a\":{\"docs\":{},\"i\":{\"docs\":{},\"t\":{\"docs\":{\"48\":{\"ref\":48,\"tf\":0.011627906976744186}}}}}},\"i\":{\"docs\":{},\"o\":{\"docs\":{},\"n\":{\"docs\":{\"57\":{\"ref\":57,\"tf\":0.0023584905660377358},\"61\":{\"ref\":61,\"tf\":0.010869565217391304}}}}}}},\"s\":{\"docs\":{},\"i\":{\"docs\":{},\"t\":{\"docs\":{\"50\":{\"ref\":50,\"tf\":0.008928571428571428},\"72\":{\"ref\":72,\"tf\":0.006993006993006993},\"115\":{\"ref\":115,\"tf\":0.025974025974025976},\"119\":{\"ref\":119,\"tf\":0.007874015748031496},\"129\":{\"ref\":129,\"tf\":0.0034782608695652175},\"130\":{\"ref\":130,\"tf\":0.008771929824561403}},\"t\":{\"docs\":{},\"o\":{\"docs\":{},\"n\":{\"docs\":{\"119\":{\"ref\":119,\"tf\":0.011811023622047244}}}}}}},\"s\":{\"docs\":{},\"i\":{\"docs\":{},\"b\":{\"docs\":{},\"l\":{\"docs\":{\"51\":{\"ref\":51,\"tf\":0.01694915254237288},\"56\":{\"ref\":56,\"tf\":0.003189792663476874},\"57\":{\"ref\":57,\"tf\":0.0047169811320754715},\"72\":{\"ref\":72,\"tf\":0.004662004662004662},\"135\":{\"ref\":135,\"tf\":0.0019305019305019305},\"136\":{\"ref\":136,\"tf\":0.005050505050505051}}}}}}},\"l\":{\"docs\":{},\"i\":{\"docs\":{},\"s\":{\"docs\":{},\"h\":{\"docs\":{\"54\":{\"ref\":54,\"tf\":0.001287001287001287}}}}},\"y\":{\"docs\":{},\"f\":{\"docs\":{},\"i\":{\"docs\":{},\"l\":{\"docs\":{\"119\":{\"ref\":119,\"tf\":0.003937007874015748}}}}}}},\"t\":{\"docs\":{},\"e\":{\"docs\":{},\"n\":{\"docs\":{},\"t\":{\"docs\":{},\"i\":{\"docs\":{\"61\":{\"ref\":61,\"tf\":0.010869565217391304}}}}}}}},\"i\":{\"docs\":{},\"n\":{\"docs\":{},\"k\":{\"docs\":{\"16\":{\"ref\":16,\"tf\":0.007352941176470588},\"94\":{\"ref\":94,\"tf\":0.011111111111111112}}},\"c\":{\"docs\":{},\"h\":{\"docs\":{\"120\":{\"ref\":120,\"tf\":0.006289308176100629}},\"-\":{\"docs\":{},\"t\":{\"docs\":{},\"o\":{\"docs\":{},\"-\":{\"docs\":{},\"z\":{\"docs\":{},\"o\":{\"docs\":{},\"o\":{\"docs\":{},\"m\":{\"docs\":{\"90\":{\"ref\":90,\"tf\":0.010416666666666666}}}}}}}}}},\"i\":{\"docs\":{},\"n\":{\"docs\":{\"120\":{\"ref\":120,\"tf\":0.006289308176100629}}}},\"o\":{\"docs\":{},\"u\":{\"docs\":{},\"t\":{\"docs\":{\"120\":{\"ref\":120,\"tf\":0.006289308176100629}}}}}}}},\"c\":{\"docs\":{},\"k\":{\"docs\":{\"54\":{\"ref\":54,\"tf\":0.002574002574002574},\"59\":{\"ref\":59,\"tf\":0.002785515320334262}}},\"t\":{\"docs\":{},\"u\":{\"docs\":{},\"r\":{\"docs\":{\"135\":{\"ref\":135,\"tf\":0.0019305019305019305}}}}}},\"x\":{\"docs\":{},\"e\":{\"docs\":{},\"l\":{\"docs\":{\"72\":{\"ref\":72,\"tf\":0.006993006993006993},\"91\":{\"ref\":91,\"tf\":0.0196078431372549},\"116\":{\"ref\":116,\"tf\":0.005555555555555556}}}}},\"e\":{\"docs\":{},\"c\":{\"docs\":{\"130\":{\"ref\":130,\"tf\":0.0043859649122807015}}}}},\"e\":{\"docs\":{},\"r\":{\"docs\":{\"60\":{\"ref\":60,\"tf\":0.0022727272727272726},\"72\":{\"ref\":72,\"tf\":0.004662004662004662}},\"f\":{\"docs\":{},\"o\":{\"docs\":{},\"r\":{\"docs\":{},\"m\":{\"docs\":{\"20\":{\"ref\":20,\"tf\":0.02040816326530612},\"21\":{\"ref\":21,\"tf\":0.00980392156862745},\"72\":{\"ref\":72,\"tf\":0.002331002331002331},\"74\":{\"ref\":74,\"tf\":0.005988023952095809},\"103\":{\"ref\":103,\"tf\":0.006493506493506494},\"134\":{\"ref\":134,\"tf\":0.0023014959723820483}}}}}},\"c\":{\"docs\":{},\"e\":{\"docs\":{},\"n\":{\"docs\":{},\"t\":{\"docs\":{\"45\":{\"ref\":45,\"tf\":0.00980392156862745}},\"a\":{\"docs\":{},\"g\":{\"docs\":{\"43\":{\"ref\":43,\"tf\":0.006944444444444444},\"45\":{\"ref\":45,\"tf\":0.0196078431372549},\"46\":{\"ref\":46,\"tf\":0.019230769230769232},\"72\":{\"ref\":72,\"tf\":0.006993006993006993}}}}}}}},\"m\":{\"docs\":{},\"i\":{\"docs\":{},\"s\":{\"docs\":{},\"s\":{\"docs\":{\"57\":{\"ref\":57,\"tf\":0.0023584905660377358},\"68\":{\"ref\":68,\"tf\":0.027777777777777776}}}}}},\"i\":{\"docs\":{},\"o\":{\"docs\":{},\"d\":{\"docs\":{\"58\":{\"ref\":58,\"tf\":0.00273224043715847},\"134\":{\"ref\":134,\"tf\":0.0023014959723820483}}}}},\"s\":{\"docs\":{},\"o\":{\"docs\":{},\"n\":{\"docs\":{\"68\":{\"ref\":68,\"tf\":0.027777777777777776},\"135\":{\"ref\":135,\"tf\":0.0019305019305019305}}}},\"i\":{\"docs\":{},\"s\":{\"docs\":{},\"t\":{\"docs\":{\"115\":{\"ref\":115,\"tf\":0.003246753246753247}}}}}}},\"n\":{\"docs\":{},\"a\":{\"docs\":{},\"l\":{\"docs\":{},\"t\":{\"docs\":{},\"i\":{\"docs\":{\"72\":{\"ref\":72,\"tf\":0.002331002331002331}}}}}}},\"s\":{\"docs\":{},\"k\":{\"docs\":{},\"i\":{\"docs\":{\"134\":{\"ref\":134,\"tf\":0.0011507479861910242}}}}},\"o\":{\"docs\":{},\"p\":{\"docs\":{},\"l\":{\"docs\":{\"135\":{\"ref\":135,\"tf\":0.0019305019305019305}}}}}},\"h\":{\"docs\":{},\"o\":{\"docs\":{},\"n\":{\"docs\":{},\"e\":{\"docs\":{\"23\":{\"ref\":23,\"tf\":0.06060606060606061},\"48\":{\"ref\":48,\"tf\":0.011627906976744186},\"60\":{\"ref\":60,\"tf\":0.004545454545454545},\"67\":{\"ref\":67,\"tf\":0.027777777777777776},\"104\":{\"ref\":104,\"tf\":0.00423728813559322},\"121\":{\"ref\":121,\"tf\":0.005813953488372093},\"132\":{\"ref\":132,\"tf\":0.01282051282051282},\"134\":{\"ref\":134,\"tf\":0.0011507479861910242}},\"g\":{\"docs\":{},\"a\":{\"docs\":{},\"p\":{\"docs\":{\"57\":{\"ref\":57,\"tf\":0.0023584905660377358},\"61\":{\"ref\":61,\"tf\":0.010869565217391304},\"66\":{\"ref\":66,\"tf\":0.043478260869565216},\"135\":{\"ref\":135,\"tf\":2.525096525096525}},\".\":{\"docs\":{},\"j\":{\"docs\":{\"59\":{\"ref\":59,\"tf\":0.002785515320334262}}}},\"/\":{\"docs\":{},\"c\":{\"docs\":{},\"o\":{\"docs\":{},\"r\":{\"docs\":{},\"d\":{\"docs\":{},\"o\":{\"docs\":{},\"v\":{\"docs\":{},\"a\":{\"docs\":{\"113\":{\"ref\":113,\"tf\":0.0070921985815602835}},\"/\":{\"docs\":{},\"t\":{\"docs\":{},\"r\":{\"docs\":{},\"i\":{\"docs\":{},\"g\":{\"docs\":{},\"g\":{\"docs\":{},\"e\":{\"docs\":{},\"r\":{\"docs\":{},\".\":{\"docs\":{},\"i\":{\"docs\":{},\"o\":{\"docs\":{\"66\":{\"ref\":66,\"tf\":10}}}}}}}}}}}}}}}}}}}}},\"]\":{\"docs\":{},\"(\":{\"docs\":{},\"h\":{\"docs\":{},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"p\":{\"docs\":{},\":\":{\"docs\":{},\"/\":{\"docs\":{},\"/\":{\"docs\":{},\"p\":{\"docs\":{},\"h\":{\"docs\":{},\"o\":{\"docs\":{},\"n\":{\"docs\":{},\"e\":{\"docs\":{},\"g\":{\"docs\":{},\"a\":{\"docs\":{},\"p\":{\"docs\":{},\".\":{\"docs\":{},\"c\":{\"docs\":{},\"o\":{\"docs\":{},\"m\":{\"docs\":{\"135\":{\"ref\":135,\"tf\":0.0019305019305019305}}}}}}}}}}}}}}}}}}}}}}}}}}}},\"t\":{\"docs\":{},\"o\":{\"docs\":{\"135\":{\"ref\":135,\"tf\":0.0019305019305019305}}}}},\"p\":{\"docs\":{\"36\":{\"ref\":36,\"tf\":0.017857142857142856}}},\"r\":{\"docs\":{},\"a\":{\"docs\":{},\"s\":{\"docs\":{},\"e\":{\"docs\":{\"134\":{\"ref\":134,\"tf\":0.0023014959723820483}}}}}}},\"y\":{\"docs\":{},\"t\":{\"docs\":{},\"h\":{\"docs\":{},\"o\":{\"docs\":{},\"n\":{\"docs\":{\"36\":{\"ref\":36,\"tf\":0.017857142857142856},\"60\":{\"ref\":60,\"tf\":0.006818181818181818}}}}}}},\"s\":{\"docs\":{},\"e\":{\"docs\":{},\"u\":{\"docs\":{},\"d\":{\"docs\":{},\"o\":{\"docs\":{},\"-\":{\"docs\":{},\"c\":{\"docs\":{},\"l\":{\"docs\":{},\"a\":{\"docs\":{},\"s\":{\"docs\":{},\"s\":{\"docs\":{\"134\":{\"ref\":134,\"tf\":0.0011507479861910242}}}}}}}}}}}}}},\"q\":{\"docs\":{},\"u\":{\"docs\":{},\"i\":{\"docs\":{},\"t\":{\"docs\":{\"1\":{\"ref\":1,\"tf\":0.045454545454545456},\"134\":{\"ref\":134,\"tf\":0.0011507479861910242}}},\"c\":{\"docs\":{},\"k\":{\"docs\":{\"19\":{\"ref\":19,\"tf\":0.02},\"56\":{\"ref\":56,\"tf\":0.001594896331738437},\"127\":{\"ref\":127,\"tf\":0.006622516556291391},\"134\":{\"ref\":134,\"tf\":0.0011507479861910242},\"135\":{\"ref\":135,\"tf\":0.0019305019305019305}},\"l\":{\"docs\":{},\"i\":{\"docs\":{\"49\":{\"ref\":49,\"tf\":0.08333333333333333},\"56\":{\"ref\":56,\"tf\":0.001594896331738437},\"63\":{\"ref\":63,\"tf\":0.04878048780487805},\"134\":{\"ref\":134,\"tf\":0.0023014959723820483}}}},\"e\":{\"docs\":{},\"s\":{\"docs\":{},\"t\":{\"docs\":{\"134\":{\"ref\":134,\"tf\":0.0011507479861910242}}}}}}}},\"e\":{\"docs\":{},\"s\":{\"docs\":{},\"t\":{\"docs\":{\"135\":{\"ref\":135,\"tf\":0.0019305019305019305}},\"i\":{\"docs\":{},\"o\":{\"docs\":{},\"n\":{\"docs\":{\"58\":{\"ref\":58,\"tf\":0.00273224043715847},\"126\":{\"ref\":126,\"tf\":0.011111111111111112},\"134\":{\"ref\":134,\"tf\":0.0011507479861910242},\"135\":{\"ref\":135,\"tf\":0.0019305019305019305}},\"s\":{\"docs\":{},\"?\":{\"docs\":{},\"<\":{\"docs\":{},\"/\":{\"docs\":{},\"h\":{\"3\":{\"docs\":{\"133\":{\"ref\":133,\"tf\":0.0016750418760469012}}},\"docs\":{}}}}}}}}}}}},\"o\":{\"docs\":{},\"t\":{\"docs\":{},\";\":{\"docs\":{},\"p\":{\"docs\":{},\"a\":{\"docs\":{},\"g\":{\"docs\":{},\"e\":{\"docs\":{},\"s\":{\"docs\":{},\"&\":{\"docs\":{},\"q\":{\"docs\":{},\"u\":{\"docs\":{},\"o\":{\"docs\":{},\"t\":{\"docs\":{\"123\":{\"ref\":123,\"tf\":0.0035211267605633804}}}}}}}}}}}}}}},\"a\":{\"docs\":{},\"l\":{\"docs\":{},\"i\":{\"docs\":{},\"t\":{\"docs\":{},\"i\":{\"docs\":{\"127\":{\"ref\":127,\"tf\":0.006622516556291391},\"135\":{\"ref\":135,\"tf\":0.0019305019305019305}}}}}},\"d\":{\"docs\":{},\"r\":{\"docs\":{},\"u\":{\"docs\":{},\"p\":{\"docs\":{},\"l\":{\"docs\":{\"134\":{\"ref\":134,\"tf\":0.0023014959723820483}}}}}}}}}},\"u\":{\"docs\":{},\"s\":{\"docs\":{\"1\":{\"ref\":1,\"tf\":0.045454545454545456},\"3\":{\"ref\":3,\"tf\":0.019230769230769232},\"6\":{\"ref\":6,\"tf\":0.023809523809523808},\"8\":{\"ref\":8,\"tf\":0.02702702702702703},\"10\":{\"ref\":10,\"tf\":0.023809523809523808},\"11\":{\"ref\":11,\"tf\":0.045454545454545456},\"13\":{\"ref\":13,\"tf\":0.019230769230769232},\"14\":{\"ref\":14,\"tf\":0.022988505747126436},\"15\":{\"ref\":15,\"tf\":0.022727272727272728},\"16\":{\"ref\":16,\"tf\":0.022058823529411766},\"17\":{\"ref\":17,\"tf\":0.07692307692307693},\"18\":{\"ref\":18,\"tf\":0.02},\"19\":{\"ref\":19,\"tf\":0.02},\"21\":{\"ref\":21,\"tf\":0.029411764705882353},\"23\":{\"ref\":23,\"tf\":0.030303030303030304},\"25\":{\"ref\":25,\"tf\":0.011494252873563218},\"26\":{\"ref\":26,\"tf\":0.043478260869565216},\"27\":{\"ref\":27,\"tf\":0.06451612903225806},\"28\":{\"ref\":28,\"tf\":0.07692307692307693},\"29\":{\"ref\":29,\"tf\":0.02564102564102564},\"30\":{\"ref\":30,\"tf\":0.02702702702702703},\"31\":{\"ref\":31,\"tf\":0.047619047619047616},\"32\":{\"ref\":32,\"tf\":0.04},\"34\":{\"ref\":34,\"tf\":0.016666666666666666},\"35\":{\"ref\":35,\"tf\":0.01818181818181818},\"36\":{\"ref\":36,\"tf\":0.03571428571428571},\"37\":{\"ref\":37,\"tf\":0.0625},\"39\":{\"ref\":39,\"tf\":0.02531645569620253},\"43\":{\"ref\":43,\"tf\":0.034722222222222224},\"45\":{\"ref\":45,\"tf\":0.00980392156862745},\"48\":{\"ref\":48,\"tf\":0.046511627906976744},\"50\":{\"ref\":50,\"tf\":0.017857142857142856},\"51\":{\"ref\":51,\"tf\":0.05084745762711865},\"53\":{\"ref\":53,\"tf\":0.08333333333333333},\"54\":{\"ref\":54,\"tf\":0.009009009009009009},\"56\":{\"ref\":56,\"tf\":0.009569377990430622},\"57\":{\"ref\":57,\"tf\":0.02122641509433962},\"58\":{\"ref\":58,\"tf\":0.00546448087431694},\"59\":{\"ref\":59,\"tf\":0.005571030640668524},\"60\":{\"ref\":60,\"tf\":0.00909090909090909},\"61\":{\"ref\":61,\"tf\":0.010869565217391304},\"63\":{\"ref\":63,\"tf\":0.024390243902439025},\"68\":{\"ref\":68,\"tf\":0.05555555555555555},\"72\":{\"ref\":72,\"tf\":0.018648018648018648},\"74\":{\"ref\":74,\"tf\":0.029940119760479042},\"76\":{\"ref\":76,\"tf\":0.018867924528301886},\"77\":{\"ref\":77,\"tf\":0.018867924528301886},\"78\":{\"ref\":78,\"tf\":0.011235955056179775},\"80\":{\"ref\":80,\"tf\":0.023076923076923078},\"81\":{\"ref\":81,\"tf\":0.030303030303030304},\"82\":{\"ref\":82,\"tf\":0.03125},\"83\":{\"ref\":83,\"tf\":0.02127659574468085},\"84\":{\"ref\":84,\"tf\":0.02909090909090909},\"90\":{\"ref\":90,\"tf\":0.010416666666666666},\"93\":{\"ref\":93,\"tf\":0.028169014084507043},\"94\":{\"ref\":94,\"tf\":0.011111111111111112},\"95\":{\"ref\":95,\"tf\":0.009345794392523364},\"96\":{\"ref\":96,\"tf\":0.017857142857142856},\"98\":{\"ref\":98,\"tf\":0.018867924528301886},\"102\":{\"ref\":102,\"tf\":0.041666666666666664},\"103\":{\"ref\":103,\"tf\":0.025974025974025976},\"105\":{\"ref\":105,\"tf\":0.005847953216374269},\"106\":{\"ref\":106,\"tf\":0.013333333333333334},\"109\":{\"ref\":109,\"tf\":0.008547008547008548},\"110\":{\"ref\":110,\"tf\":0.01020408163265306},\"111\":{\"ref\":111,\"tf\":0.015037593984962405},\"113\":{\"ref\":113,\"tf\":0.0070921985815602835},\"114\":{\"ref\":114,\"tf\":0.007974481658692184},\"115\":{\"ref\":115,\"tf\":0.006493506493506494},\"116\":{\"ref\":116,\"tf\":0.005555555555555556},\"117\":{\"ref\":117,\"tf\":0.015151515151515152},\"118\":{\"ref\":118,\"tf\":0.01904761904761905},\"123\":{\"ref\":123,\"tf\":0.02112676056338028},\"124\":{\"ref\":124,\"tf\":0.020618556701030927},\"126\":{\"ref\":126,\"tf\":0.03333333333333333},\"127\":{\"ref\":127,\"tf\":0.013245033112582781},\"128\":{\"ref\":128,\"tf\":0.05357142857142857},\"129\":{\"ref\":129,\"tf\":0.01217391304347826},\"130\":{\"ref\":130,\"tf\":0.008771929824561403},\"132\":{\"ref\":132,\"tf\":0.038461538461538464},\"133\":{\"ref\":133,\"tf\":0.021775544388609715},\"134\":{\"ref\":134,\"tf\":0.004602991944764097},\"135\":{\"ref\":135,\"tf\":0.019305019305019305},\"136\":{\"ref\":136,\"tf\":0.010101010101010102}},\"a\":{\"docs\":{},\"g\":{\"docs\":{\"20\":{\"ref\":20,\"tf\":0.02040816326530612},\"72\":{\"ref\":72,\"tf\":0.006993006993006993},\"73\":{\"ref\":73,\"tf\":0.05},\"74\":{\"ref\":74,\"tf\":0.005988023952095809},\"75\":{\"ref\":75,\"tf\":0.08333333333333333},\"76\":{\"ref\":76,\"tf\":0.018867924528301886},\"77\":{\"ref\":77,\"tf\":0.018867924528301886},\"78\":{\"ref\":78,\"tf\":0.011235955056179775},\"79\":{\"ref\":79,\"tf\":0.125},\"80\":{\"ref\":80,\"tf\":0.023076923076923078},\"81\":{\"ref\":81,\"tf\":0.015151515151515152},\"82\":{\"ref\":82,\"tf\":0.015625},\"83\":{\"ref\":83,\"tf\":0.02127659574468085},\"84\":{\"ref\":84,\"tf\":0.0036363636363636364},\"85\":{\"ref\":85,\"tf\":0.09090909090909091},\"86\":{\"ref\":86,\"tf\":0.06666666666666667},\"87\":{\"ref\":87,\"tf\":0.041666666666666664},\"88\":{\"ref\":88,\"tf\":0.009708737864077669},\"89\":{\"ref\":89,\"tf\":0.022727272727272728},\"90\":{\"ref\":90,\"tf\":0.010416666666666666},\"91\":{\"ref\":91,\"tf\":0.0196078431372549},\"92\":{\"ref\":92,\"tf\":0.02857142857142857},\"93\":{\"ref\":93,\"tf\":0.014084507042253521},\"94\":{\"ref\":94,\"tf\":0.011111111111111112},\"95\":{\"ref\":95,\"tf\":0.009345794392523364},\"96\":{\"ref\":96,\"tf\":0.017857142857142856},\"97\":{\"ref\":97,\"tf\":0.019230769230769232},\"98\":{\"ref\":98,\"tf\":0.018867924528301886},\"99\":{\"ref\":99,\"tf\":0.02127659574468085},\"100\":{\"ref\":100,\"tf\":0.041666666666666664},\"101\":{\"ref\":101,\"tf\":0.043478260869565216},\"102\":{\"ref\":102,\"tf\":0.020833333333333332},\"103\":{\"ref\":103,\"tf\":0.006493506493506494},\"105\":{\"ref\":105,\"tf\":0.005847953216374269},\"106\":{\"ref\":106,\"tf\":0.013333333333333334},\"107\":{\"ref\":107,\"tf\":0.012658227848101266},\"109\":{\"ref\":109,\"tf\":0.008547008547008548},\"110\":{\"ref\":110,\"tf\":0.01020408163265306},\"111\":{\"ref\":111,\"tf\":0.007518796992481203},\"112\":{\"ref\":112,\"tf\":0.0058823529411764705},\"114\":{\"ref\":114,\"tf\":0.001594896331738437},\"115\":{\"ref\":115,\"tf\":0.006493506493506494},\"116\":{\"ref\":116,\"tf\":0.005555555555555556},\"117\":{\"ref\":117,\"tf\":0.007575757575757576},\"118\":{\"ref\":118,\"tf\":0.009523809523809525}}},\"b\":{\"docs\":{},\"l\":{\"docs\":{\"54\":{\"ref\":54,\"tf\":0.001287001287001287},\"134\":{\"ref\":134,\"tf\":0.0011507479861910242}}}}},\"e\":{\"docs\":{},\"r\":{\"docs\":{\"21\":{\"ref\":21,\"tf\":0.00980392156862745},\"26\":{\"ref\":26,\"tf\":0.021739130434782608},\"27\":{\"ref\":27,\"tf\":0.03225806451612903},\"28\":{\"ref\":28,\"tf\":0.038461538461538464},\"38\":{\"ref\":38,\"tf\":0.011627906976744186},\"56\":{\"ref\":56,\"tf\":0.001594896331738437},\"60\":{\"ref\":60,\"tf\":0.0022727272727272726},\"72\":{\"ref\":72,\"tf\":0.004662004662004662},\"78\":{\"ref\":78,\"tf\":0.02247191011235955},\"81\":{\"ref\":81,\"tf\":0.015151515151515152},\"83\":{\"ref\":83,\"tf\":0.02127659574468085},\"84\":{\"ref\":84,\"tf\":0.0036363636363636364},\"88\":{\"ref\":88,\"tf\":0.05825242718446602},\"90\":{\"ref\":90,\"tf\":0.010416666666666666},\"104\":{\"ref\":104,\"tf\":0.01694915254237288},\"105\":{\"ref\":105,\"tf\":0.005847953216374269},\"110\":{\"ref\":110,\"tf\":0.01020408163265306},\"114\":{\"ref\":114,\"tf\":0.012759170653907496},\"115\":{\"ref\":115,\"tf\":0.012987012987012988},\"123\":{\"ref\":123,\"tf\":0.007042253521126761},\"124\":{\"ref\":124,\"tf\":0.030927835051546393},\"133\":{\"ref\":133,\"tf\":0.018425460636515914},\"134\":{\"ref\":134,\"tf\":0.012658227848101266},\"136\":{\"ref\":136,\"tf\":0.010101010101010102}},\"n\":{\"docs\":{},\"a\":{\"docs\":{},\"m\":{\"docs\":{\"28\":{\"ref\":28,\"tf\":0.07692307692307693}}}}},\"'\":{\"docs\":{\"29\":{\"ref\":29,\"tf\":0.02564102564102564},\"72\":{\"ref\":72,\"tf\":0.002331002331002331},\"111\":{\"ref\":111,\"tf\":0.007518796992481203}}},\"-\":{\"docs\":{},\"i\":{\"docs\":{},\"n\":{\"docs\":{},\"t\":{\"docs\":{},\"e\":{\"docs\":{},\"r\":{\"docs\":{},\"f\":{\"docs\":{},\"a\":{\"docs\":{},\"c\":{\"docs\":{\"38\":{\"ref\":38,\"tf\":0.011627906976744186}}}}}}}}}}},\"&\":{\"docs\":{},\"#\":{\"3\":{\"9\":{\"docs\":{},\";\":{\"docs\":{\"124\":{\"ref\":124,\"tf\":0.010309278350515464}}}},\"docs\":{}},\"docs\":{}}}},\"i\":{\"docs\":{},\"t\":{\"docs\":{},\"e\":{\"docs\":{},\"m\":{\"docs\":{},\"s\":{\"docs\":{},\"(\":{\"docs\":{},\"i\":{\"docs\":{},\"t\":{\"docs\":{},\"e\":{\"docs\":{},\"m\":{\"docs\":{\"78\":{\"ref\":78,\"tf\":0.011235955056179775}}}}}}}}}}}}},\"u\":{\"docs\":{},\"a\":{\"docs\":{},\"l\":{\"docs\":{\"21\":{\"ref\":21,\"tf\":0.00980392156862745},\"84\":{\"ref\":84,\"tf\":0.0036363636363636364},\"95\":{\"ref\":95,\"tf\":0.009345794392523364},\"111\":{\"ref\":111,\"tf\":0.007518796992481203},\"124\":{\"ref\":124,\"tf\":0.010309278350515464},\"134\":{\"ref\":134,\"tf\":0.0011507479861910242}}}}},\"b\":{\"docs\":{\"60\":{\"ref\":60,\"tf\":0.0022727272727272726}}}},\"p\":{\"docs\":{\"16\":{\"ref\":16,\"tf\":0.007352941176470588},\"21\":{\"ref\":21,\"tf\":0.00980392156862745},\"38\":{\"ref\":38,\"tf\":0.011627906976744186},\"43\":{\"ref\":43,\"tf\":0.006944444444444444},\"44\":{\"ref\":44,\"tf\":0.018518518518518517},\"45\":{\"ref\":45,\"tf\":0.0196078431372549},\"47\":{\"ref\":47,\"tf\":0.01},\"51\":{\"ref\":51,\"tf\":0.01694915254237288},\"54\":{\"ref\":54,\"tf\":0.006435006435006435},\"56\":{\"ref\":56,\"tf\":0.007974481658692184},\"59\":{\"ref\":59,\"tf\":0.002785515320334262},\"60\":{\"ref\":60,\"tf\":0.00909090909090909},\"69\":{\"ref\":69,\"tf\":0.05},\"71\":{\"ref\":71,\"tf\":0.016},\"72\":{\"ref\":72,\"tf\":0.002331002331002331},\"76\":{\"ref\":76,\"tf\":0.018867924528301886},\"81\":{\"ref\":81,\"tf\":0.015151515151515152},\"97\":{\"ref\":97,\"tf\":0.019230769230769232},\"103\":{\"ref\":103,\"tf\":0.012987012987012988},\"120\":{\"ref\":120,\"tf\":0.006289308176100629},\"126\":{\"ref\":126,\"tf\":0.011111111111111112},\"128\":{\"ref\":128,\"tf\":0.017857142857142856},\"129\":{\"ref\":129,\"tf\":0.0017391304347826088},\"130\":{\"ref\":130,\"tf\":0.008771929824561403},\"133\":{\"ref\":133,\"tf\":0.008375209380234505},\"134\":{\"ref\":134,\"tf\":0.004602991944764097},\"135\":{\"ref\":135,\"tf\":0.0019305019305019305}},\"d\":{\"docs\":{},\"a\":{\"docs\":{},\"t\":{\"docs\":{\"56\":{\"ref\":56,\"tf\":0.001594896331738437},\"58\":{\"ref\":58,\"tf\":0.01092896174863388},\"59\":{\"ref\":59,\"tf\":0.002785515320334262},\"60\":{\"ref\":60,\"tf\":0.0022727272727272726},\"82\":{\"ref\":82,\"tf\":0.0078125},\"84\":{\"ref\":84,\"tf\":0.0036363636363636364},\"117\":{\"ref\":117,\"tf\":0.015151515151515152},\"123\":{\"ref\":123,\"tf\":0.0035211267605633804},\"127\":{\"ref\":127,\"tf\":0.006622516556291391},\"129\":{\"ref\":129,\"tf\":0.0017391304347826088},\"133\":{\"ref\":133,\"tf\":0.008375209380234505}}}}},\"l\":{\"docs\":{},\"o\":{\"docs\":{},\"a\":{\"docs\":{},\"d\":{\"docs\":{\"58\":{\"ref\":58,\"tf\":0.00819672131147541}}}}}},\"g\":{\"docs\":{},\"r\":{\"docs\":{},\"a\":{\"docs\":{},\"d\":{\"docs\":{\"129\":{\"ref\":129,\"tf\":0.0034782608695652175}}}}}}},\"g\":{\"docs\":{},\"l\":{\"docs\":{},\"i\":{\"docs\":{\"18\":{\"ref\":18,\"tf\":0.02}}}}},\"t\":{\"docs\":{},\"i\":{\"docs\":{},\"l\":{\"docs\":{\"25\":{\"ref\":25,\"tf\":0.011494252873563218},\"49\":{\"ref\":49,\"tf\":0.16666666666666666},\"50\":{\"ref\":50,\"tf\":0.017857142857142856},\"52\":{\"ref\":52,\"tf\":0.010416666666666666},\"54\":{\"ref\":54,\"tf\":0.001287001287001287},\"56\":{\"ref\":56,\"tf\":0.001594896331738437},\"58\":{\"ref\":58,\"tf\":0.00273224043715847},\"63\":{\"ref\":63,\"tf\":2.024390243902439},\"125\":{\"ref\":125,\"tf\":3.333333333333333},\"126\":{\"ref\":126,\"tf\":0.011111111111111112},\"127\":{\"ref\":127,\"tf\":0.013245033112582781},\"133\":{\"ref\":133,\"tf\":0.0016750418760469012}}}},\"a\":{\"docs\":{},\"p\":{\"docs\":{},\"a\":{\"docs\":{},\"u\":{\"docs\":{\"38\":{\"ref\":38,\"tf\":0.011627906976744186}}}}}}},\"n\":{\"docs\":{},\"d\":{\"docs\":{},\"e\":{\"docs\":{},\"r\":{\"docs\":{\"68\":{\"ref\":68,\"tf\":0.05555555555555555},\"115\":{\"ref\":115,\"tf\":0.003246753246753247},\"135\":{\"ref\":135,\"tf\":0.0019305019305019305}},\"l\":{\"docs\":{},\"i\":{\"docs\":{\"26\":{\"ref\":26,\"tf\":0.021739130434782608}}}},\"n\":{\"docs\":{},\"e\":{\"docs\":{},\"a\":{\"docs\":{},\"t\":{\"docs\":{},\"h\":{\"docs\":{\"57\":{\"ref\":57,\"tf\":0.0023584905660377358}}}}}}},\"s\":{\"docs\":{},\"t\":{\"docs\":{},\"a\":{\"docs\":{},\"n\":{\"docs\":{},\"d\":{\"docs\":{\"57\":{\"ref\":57,\"tf\":0.0023584905660377358},\"61\":{\"ref\":61,\"tf\":0.010869565217391304},\"74\":{\"ref\":74,\"tf\":0.005988023952095809},\"129\":{\"ref\":129,\"tf\":0.0034782608695652175},\"134\":{\"ref\":134,\"tf\":0.0011507479861910242}}}}}}}},\"f\":{\"docs\":{},\"i\":{\"docs\":{},\"n\":{\"docs\":{\"114\":{\"ref\":114,\"tf\":0.001594896331738437}}}}}}},\"i\":{\"docs\":{},\"q\":{\"docs\":{},\"u\":{\"docs\":{\"54\":{\"ref\":54,\"tf\":0.001287001287001287},\"72\":{\"ref\":72,\"tf\":0.002331002331002331},\"84\":{\"ref\":84,\"tf\":0.0036363636363636364},\"106\":{\"ref\":106,\"tf\":0.013333333333333334},\"113\":{\"ref\":113,\"tf\":0.0070921985815602835},\"115\":{\"ref\":115,\"tf\":0.003246753246753247}}}},\"t\":{\"docs\":{\"104\":{\"ref\":104,\"tf\":0.00423728813559322}}}},\"l\":{\"docs\":{},\"i\":{\"docs\":{},\"k\":{\"docs\":{\"57\":{\"ref\":57,\"tf\":0.0023584905660377358}}}},\"e\":{\"docs\":{},\"s\":{\"docs\":{},\"s\":{\"docs\":{\"60\":{\"ref\":60,\"tf\":0.0022727272727272726},\"114\":{\"ref\":114,\"tf\":0.001594896331738437}}}}}},\"f\":{\"docs\":{},\"o\":{\"docs\":{},\"r\":{\"docs\":{},\"t\":{\"docs\":{},\"u\":{\"docs\":{},\"n\":{\"docs\":{\"58\":{\"ref\":58,\"tf\":0.00273224043715847},\"60\":{\"ref\":60,\"tf\":0.0022727272727272726},\"136\":{\"ref\":136,\"tf\":0.005050505050505051}}}}}}}},\"s\":{\"docs\":{},\"i\":{\"docs\":{},\"g\":{\"docs\":{},\"n\":{\"docs\":{\"58\":{\"ref\":58,\"tf\":0.00819672131147541}}}}}},\"-\":{\"docs\":{},\"h\":{\"docs\":{},\"i\":{\"docs\":{},\"d\":{\"docs\":{},\"d\":{\"docs\":{},\"e\":{\"docs\":{},\"n\":{\"docs\":{\"72\":{\"ref\":72,\"tf\":0.002331002331002331}}}}}}}}},\"n\":{\"docs\":{},\"e\":{\"docs\":{},\"c\":{\"docs\":{},\"e\":{\"docs\":{},\"s\":{\"docs\":{},\"s\":{\"docs\":{},\"a\":{\"docs\":{},\"r\":{\"docs\":{},\"i\":{\"docs\":{\"99\":{\"ref\":99,\"tf\":0.02127659574468085}}}}}}}}}}},\"t\":{\"docs\":{},\"i\":{\"docs\":{},\"l\":{\"docs\":{\"107\":{\"ref\":107,\"tf\":0.02531645569620253},\"110\":{\"ref\":110,\"tf\":0.02040816326530612},\"117\":{\"ref\":117,\"tf\":0.007575757575757576},\"135\":{\"ref\":135,\"tf\":0.0019305019305019305}}}}}},\"i\":{\"docs\":{\"54\":{\"ref\":54,\"tf\":0.001287001287001287},\"55\":{\"ref\":55,\"tf\":0.02040816326530612},\"57\":{\"ref\":57,\"tf\":0.007075471698113208},\"59\":{\"ref\":59,\"tf\":3.3389043639740015},\"61\":{\"ref\":61,\"tf\":0.021739130434782608},\"107\":{\"ref\":107,\"tf\":0.02531645569620253},\"135\":{\"ref\":135,\"tf\":0.003861003861003861}},\"w\":{\"docs\":{},\"e\":{\"docs\":{},\"b\":{\"docs\":{},\"v\":{\"docs\":{},\"i\":{\"docs\":{},\"e\":{\"docs\":{},\"w\":{\"docs\":{\"57\":{\"ref\":57,\"tf\":0.0023584905660377358},\"67\":{\"ref\":67,\"tf\":0.027777777777777776},\"132\":{\"ref\":132,\"tf\":0.01282051282051282}}}}}}}}},\"-\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"u\":{\"docs\":{},\"t\":{\"docs\":{},\"e\":{\"docs\":{},\"r\":{\"docs\":{},\"&\":{\"docs\":{},\"#\":{\"3\":{\"9\":{\"docs\":{},\";\":{\"docs\":{\"84\":{\"ref\":84,\"tf\":0.0036363636363636364}}}},\"docs\":{}},\"docs\":{}}}}}}}}},\"v\":{\"docs\":{},\"i\":{\"docs\":{},\"e\":{\"docs\":{},\"w\":{\"docs\":{\"84\":{\"ref\":84,\"tf\":0.007272727272727273}}}}}},\"s\":{\"docs\":{},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\"f\":{\"docs\":{\"102\":{\"ref\":102,\"tf\":0.020833333333333332}}}}}}}},\"r\":{\"docs\":{},\"l\":{\"docs\":{\"54\":{\"ref\":54,\"tf\":0.001287001287001287},\"60\":{\"ref\":60,\"tf\":0.0022727272727272726},\"84\":{\"ref\":84,\"tf\":0.025454545454545455},\"110\":{\"ref\":110,\"tf\":0.01020408163265306},\"111\":{\"ref\":111,\"tf\":0.007518796992481203},\"114\":{\"ref\":114,\"tf\":0.006379585326953748},\"133\":{\"ref\":133,\"tf\":0.008375209380234505}}}},\"b\":{\"docs\":{},\"u\":{\"docs\":{},\"n\":{\"docs\":{},\"t\":{\"docs\":{},\"u\":{\"docs\":{\"56\":{\"ref\":56,\"tf\":0.001594896331738437}}}}}}}},\"w\":{\"docs\":{},\"a\":{\"docs\":{},\"i\":{\"docs\":{\"1\":{\"ref\":1,\"tf\":0.045454545454545456},\"14\":{\"ref\":14,\"tf\":0.022988505747126436},\"21\":{\"ref\":21,\"tf\":0.00980392156862745},\"54\":{\"ref\":54,\"tf\":0.005148005148005148},\"56\":{\"ref\":56,\"tf\":0.001594896331738437},\"57\":{\"ref\":57,\"tf\":0.0047169811320754715},\"58\":{\"ref\":58,\"tf\":0.00273224043715847},\"59\":{\"ref\":59,\"tf\":0.002785515320334262},\"60\":{\"ref\":60,\"tf\":0.006818181818181818},\"72\":{\"ref\":72,\"tf\":0.002331002331002331},\"74\":{\"ref\":74,\"tf\":0.005988023952095809},\"78\":{\"ref\":78,\"tf\":0.011235955056179775},\"80\":{\"ref\":80,\"tf\":0.007692307692307693},\"84\":{\"ref\":84,\"tf\":0.007272727272727273},\"90\":{\"ref\":90,\"tf\":0.010416666666666666},\"104\":{\"ref\":104,\"tf\":0.00423728813559322},\"105\":{\"ref\":105,\"tf\":0.005847953216374269},\"113\":{\"ref\":113,\"tf\":0.0070921985815602835},\"123\":{\"ref\":123,\"tf\":0.0035211267605633804},\"127\":{\"ref\":127,\"tf\":0.006622516556291391},\"129\":{\"ref\":129,\"tf\":0.0034782608695652175},\"133\":{\"ref\":133,\"tf\":0.0016750418760469012},\"135\":{\"ref\":135,\"tf\":0.0019305019305019305}},\"t\":{\"docs\":{\"94\":{\"ref\":94,\"tf\":0.011111111111111112},\"104\":{\"ref\":104,\"tf\":0.00423728813559322},\"106\":{\"ref\":106,\"tf\":0.013333333333333334},\"110\":{\"ref\":110,\"tf\":0.01020408163265306},\"134\":{\"ref\":134,\"tf\":0.0023014959723820483}}}},\"n\":{\"docs\":{},\"t\":{\"docs\":{\"43\":{\"ref\":43,\"tf\":0.020833333333333332},\"45\":{\"ref\":45,\"tf\":0.00980392156862745},\"48\":{\"ref\":48,\"tf\":0.011627906976744186},\"56\":{\"ref\":56,\"tf\":0.006379585326953748},\"57\":{\"ref\":57,\"tf\":0.007075471698113208},\"58\":{\"ref\":58,\"tf\":0.01092896174863388},\"59\":{\"ref\":59,\"tf\":0.005571030640668524},\"60\":{\"ref\":60,\"tf\":0.004545454545454545},\"70\":{\"ref\":70,\"tf\":0.023809523809523808},\"104\":{\"ref\":104,\"tf\":0.00423728813559322},\"114\":{\"ref\":114,\"tf\":0.001594896331738437},\"115\":{\"ref\":115,\"tf\":0.003246753246753247},\"118\":{\"ref\":118,\"tf\":0.009523809523809525},\"127\":{\"ref\":127,\"tf\":0.006622516556291391},\"129\":{\"ref\":129,\"tf\":0.008695652173913044},\"133\":{\"ref\":133,\"tf\":0.0016750418760469012},\"135\":{\"ref\":135,\"tf\":0.0019305019305019305},\"136\":{\"ref\":136,\"tf\":0.005050505050505051}}}},\"l\":{\"docs\":{},\"k\":{\"docs\":{\"55\":{\"ref\":55,\"tf\":0.02040816326530612},\"56\":{\"ref\":56,\"tf\":0.001594896331738437},\"59\":{\"ref\":59,\"tf\":0.002785515320334262}}}},\"t\":{\"docs\":{},\"c\":{\"docs\":{},\"h\":{\"docs\":{\"127\":{\"ref\":127,\"tf\":0.006622516556291391},\"129\":{\"ref\":129,\"tf\":0.008695652173913044},\"130\":{\"ref\":130,\"tf\":0.0043859649122807015}}}}}},\"r\":{\"docs\":{},\"i\":{\"docs\":{},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"e\":{\"docs\":{},\"n\":{\"docs\":{\"3\":{\"ref\":3,\"tf\":0.019230769230769232},\"57\":{\"ref\":57,\"tf\":0.0047169811320754715},\"65\":{\"ref\":65,\"tf\":0.025},\"126\":{\"ref\":126,\"tf\":0.011111111111111112}}}}},\"e\":{\"docs\":{\"54\":{\"ref\":54,\"tf\":0.001287001287001287}}}}},\"a\":{\"docs\":{},\"p\":{\"docs\":{\"21\":{\"ref\":21,\"tf\":0.0196078431372549},\"34\":{\"ref\":34,\"tf\":0.016666666666666666},\"57\":{\"ref\":57,\"tf\":0.0023584905660377358},\"117\":{\"ref\":117,\"tf\":0.015151515151515152},\"121\":{\"ref\":121,\"tf\":0.005813953488372093},\"134\":{\"ref\":134,\"tf\":0.004602991944764097}},\"p\":{\"docs\":{},\"e\":{\"docs\":{},\"r\":{\"docs\":{\"56\":{\"ref\":56,\"tf\":0.001594896331738437},\"57\":{\"ref\":57,\"tf\":0.0023584905660377358},\"132\":{\"ref\":132,\"tf\":0.01282051282051282}}}}}}},\"e\":{\"docs\":{},\"n\":{\"docs\":{},\"c\":{\"docs\":{},\"h\":{\"docs\":{\"134\":{\"ref\":134,\"tf\":0.0011507479861910242}}}}}},\"o\":{\"docs\":{},\"n\":{\"docs\":{},\"g\":{\"docs\":{\"135\":{\"ref\":135,\"tf\":0.0019305019305019305}}}}}},\"i\":{\"docs\":{},\"d\":{\"docs\":{},\"t\":{\"docs\":{},\"h\":{\"docs\":{\"4\":{\"ref\":4,\"tf\":0.022727272727272728},\"5\":{\"ref\":5,\"tf\":0.02564102564102564},\"6\":{\"ref\":6,\"tf\":2.5714285714285716},\"20\":{\"ref\":20,\"tf\":0.02040816326530612},\"27\":{\"ref\":27,\"tf\":0.03225806451612903},\"30\":{\"ref\":30,\"tf\":0.02702702702702703},\"44\":{\"ref\":44,\"tf\":0.018518518518518517},\"72\":{\"ref\":72,\"tf\":0.009324009324009324},\"91\":{\"ref\":91,\"tf\":0.0196078431372549},\"116\":{\"ref\":116,\"tf\":0.011111111111111112},\"119\":{\"ref\":119,\"tf\":0.007874015748031496},\"129\":{\"ref\":129,\"tf\":0.0017391304347826088},\"130\":{\"ref\":130,\"tf\":0.0043859649122807015},\"133\":{\"ref\":133,\"tf\":0.0016750418760469012}}}},\"e\":{\"docs\":{\"14\":{\"ref\":14,\"tf\":0.011494252873563218},\"21\":{\"ref\":21,\"tf\":0.00980392156862745},\"80\":{\"ref\":80,\"tf\":0.007692307692307693},\"91\":{\"ref\":91,\"tf\":0.0196078431372549},\"123\":{\"ref\":123,\"tf\":0.0035211267605633804},\"134\":{\"ref\":134,\"tf\":0.0023014959723820483}}}},\"t\":{\"docs\":{},\"h\":{\"docs\":{},\"i\":{\"docs\":{},\"n\":{\"docs\":{\"17\":{\"ref\":17,\"tf\":0.07692307692307693},\"22\":{\"ref\":22,\"tf\":0.024390243902439025},\"25\":{\"ref\":25,\"tf\":0.022988505747126436},\"34\":{\"ref\":34,\"tf\":0.016666666666666666},\"35\":{\"ref\":35,\"tf\":0.01818181818181818},\"43\":{\"ref\":43,\"tf\":0.006944444444444444},\"50\":{\"ref\":50,\"tf\":0.008928571428571428},\"72\":{\"ref\":72,\"tf\":0.002331002331002331},\"83\":{\"ref\":83,\"tf\":0.02127659574468085},\"100\":{\"ref\":100,\"tf\":0.041666666666666664},\"101\":{\"ref\":101,\"tf\":0.043478260869565216},\"102\":{\"ref\":102,\"tf\":0.020833333333333332},\"103\":{\"ref\":103,\"tf\":0.006493506493506494},\"119\":{\"ref\":119,\"tf\":0.011811023622047244},\"121\":{\"ref\":121,\"tf\":0.01744186046511628},\"123\":{\"ref\":123,\"tf\":0.007042253521126761},\"129\":{\"ref\":129,\"tf\":0.0034782608695652175},\"134\":{\"ref\":134,\"tf\":0.0034522439585730723}}}},\"o\":{\"docs\":{},\"u\":{\"docs\":{},\"t\":{\"docs\":{\"39\":{\"ref\":39,\"tf\":0.012658227848101266},\"57\":{\"ref\":57,\"tf\":0.0023584905660377358},\"103\":{\"ref\":103,\"tf\":0.006493506493506494},\"134\":{\"ref\":134,\"tf\":0.009205983889528193}}}}}}},\"n\":{\"docs\":{\"134\":{\"ref\":134,\"tf\":0.0023014959723820483}},\"s\":{\"docs\":{},\"t\":{\"docs\":{},\"o\":{\"docs\":{},\"n\":{\"docs\":{\"18\":{\"ref\":18,\"tf\":0.02}}}}}},\"d\":{\"docs\":{},\"o\":{\"docs\":{},\"w\":{\"docs\":{\"38\":{\"ref\":38,\"tf\":0.011627906976744186},\"54\":{\"ref\":54,\"tf\":0.001287001287001287},\"56\":{\"ref\":56,\"tf\":0.011164274322169059},\"67\":{\"ref\":67,\"tf\":0.027777777777777776},\"114\":{\"ref\":114,\"tf\":0.001594896331738437},\"121\":{\"ref\":121,\"tf\":0.005813953488372093},\"124\":{\"ref\":124,\"tf\":0.010309278350515464}},\".\":{\"docs\":{},\"l\":{\"docs\":{},\"o\":{\"docs\":{},\"c\":{\"docs\":{},\"a\":{\"docs\":{},\"l\":{\"docs\":{},\"s\":{\"docs\":{},\"t\":{\"docs\":{},\"o\":{\"docs\":{},\"r\":{\"docs\":{},\"a\":{\"docs\":{},\"g\":{\"docs\":{},\"e\":{\"docs\":{},\"[\":{\"docs\":{},\"'\":{\"docs\":{},\"l\":{\"docs\":{},\"a\":{\"docs\":{},\"s\":{\"docs\":{},\"t\":{\"docs\":{},\"a\":{\"docs\":{},\"c\":{\"docs\":{},\"t\":{\"docs\":{},\"i\":{\"docs\":{},\"v\":{\"docs\":{},\"e\":{\"docs\":{},\"p\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"j\":{\"docs\":{},\"e\":{\"docs\":{},\"c\":{\"docs\":{},\"t\":{\"docs\":{\"54\":{\"ref\":54,\"tf\":0.001287001287001287}}}}}}}}}}}}}}}}}}},\"p\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"j\":{\"docs\":{},\"e\":{\"docs\":{},\"c\":{\"docs\":{},\"t\":{\"docs\":{\"54\":{\"ref\":54,\"tf\":0.002574002574002574}}}}}}}}},\"d\":{\"docs\":{},\"i\":{\"docs\":{},\"d\":{\"docs\":{},\"t\":{\"docs\":{},\"u\":{\"docs\":{},\"t\":{\"docs\":{},\"o\":{\"docs\":{},\"r\":{\"docs\":{},\"i\":{\"docs\":{\"133\":{\"ref\":133,\"tf\":0.0016750418760469012}}}}}}}}}}}}}}}}}}}}},\"t\":{\"docs\":{},\"i\":{\"docs\":{},\"o\":{\"docs\":{},\"n\":{\"docs\":{},\".\":{\"docs\":{},\"h\":{\"docs\":{},\"a\":{\"docs\":{},\"s\":{\"docs\":{},\"h\":{\"docs\":{\"115\":{\"ref\":115,\"tf\":0.003246753246753247}}}}}}}}}}}}},\"a\":{\"docs\":{},\"d\":{\"docs\":{\"121\":{\"ref\":121,\"tf\":0.005813953488372093}}}}}}},\"s\":{\"docs\":{},\"]\":{\"docs\":{},\"(\":{\"docs\":{},\"h\":{\"docs\":{},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"p\":{\"docs\":{},\":\":{\"docs\":{},\"/\":{\"docs\":{},\"/\":{\"docs\":{},\"g\":{\"docs\":{},\"i\":{\"docs\":{},\"t\":{\"docs\":{},\"-\":{\"docs\":{},\"s\":{\"docs\":{},\"c\":{\"docs\":{},\"m\":{\"docs\":{},\".\":{\"docs\":{},\"c\":{\"docs\":{},\"o\":{\"docs\":{},\"m\":{\"docs\":{},\"/\":{\"docs\":{},\"d\":{\"docs\":{},\"o\":{\"docs\":{},\"w\":{\"docs\":{},\"n\":{\"docs\":{},\"l\":{\"docs\":{},\"o\":{\"docs\":{},\"a\":{\"docs\":{},\"d\":{\"docs\":{},\"/\":{\"docs\":{},\"w\":{\"docs\":{},\"i\":{\"docs\":{},\"n\":{\"docs\":{\"56\":{\"ref\":56,\"tf\":0.001594896331738437}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},\"r\":{\"docs\":{},\"e\":{\"docs\":{\"97\":{\"ref\":97,\"tf\":0.019230769230769232},\"133\":{\"ref\":133,\"tf\":0.0016750418760469012}},\"l\":{\"docs\":{},\"e\":{\"docs\":{},\"s\":{\"docs\":{},\"s\":{\"docs\":{\"23\":{\"ref\":23,\"tf\":0.06060606060606061}}}}}}}},\"s\":{\"docs\":{},\"h\":{\"docs\":{\"51\":{\"ref\":51,\"tf\":0.01694915254237288},\"56\":{\"ref\":56,\"tf\":0.001594896331738437},\"58\":{\"ref\":58,\"tf\":0.00273224043715847},\"72\":{\"ref\":72,\"tf\":0.002331002331002331},\"81\":{\"ref\":81,\"tf\":0.015151515151515152},\"114\":{\"ref\":114,\"tf\":0.001594896331738437},\"136\":{\"ref\":136,\"tf\":0.005050505050505051}}}},\"l\":{\"docs\":{},\"d\":{\"docs\":{\"58\":{\"ref\":58,\"tf\":0.00273224043715847},\"136\":{\"ref\":136,\"tf\":0.005050505050505051}},\"-\":{\"docs\":{},\"w\":{\"docs\":{},\"e\":{\"docs\":{},\"s\":{\"docs\":{},\"t\":{\"docs\":{\"134\":{\"ref\":134,\"tf\":0.0011507479861910242}}}}}}}}},\"-\":{\"docs\":{},\"f\":{\"docs\":{},\"i\":{\"docs\":{\"114\":{\"ref\":114,\"tf\":0.001594896331738437},\"136\":{\"ref\":136,\"tf\":0.005050505050505051}}}}},\"f\":{\"docs\":{},\"i\":{\"docs\":{\"114\":{\"ref\":114,\"tf\":0.001594896331738437},\"136\":{\"ref\":136,\"tf\":0.005050505050505051}}}}},\"e\":{\"docs\":{},\"l\":{\"docs\":{},\"l\":{\"docs\":{\"13\":{\"ref\":13,\"tf\":0.019230769230769232},\"56\":{\"ref\":56,\"tf\":0.003189792663476874},\"60\":{\"ref\":60,\"tf\":0.0022727272727272726},\"61\":{\"ref\":61,\"tf\":0.010869565217391304},\"103\":{\"ref\":103,\"tf\":0.006493506493506494},\"113\":{\"ref\":113,\"tf\":0.0070921985815602835},\"134\":{\"ref\":134,\"tf\":0.0011507479861910242},\"135\":{\"ref\":135,\"tf\":0.003861003861003861}}},\"c\":{\"docs\":{},\"o\":{\"docs\":{},\"m\":{\"docs\":{\"55\":{\"ref\":55,\"tf\":0.02040816326530612},\"57\":{\"ref\":57,\"tf\":5.002358490566038},\"61\":{\"ref\":61,\"tf\":0.010869565217391304}}}}}},\"'\":{\"docs\":{},\"r\":{\"docs\":{\"18\":{\"ref\":18,\"tf\":0.02},\"111\":{\"ref\":111,\"tf\":0.007518796992481203},\"131\":{\"ref\":131,\"tf\":0.05555555555555555},\"134\":{\"ref\":134,\"tf\":0.0023014959723820483}}},\"l\":{\"docs\":{},\"l\":{\"docs\":{\"46\":{\"ref\":46,\"tf\":0.019230769230769232}}}},\"v\":{\"docs\":{\"47\":{\"ref\":47,\"tf\":0.01},\"54\":{\"ref\":54,\"tf\":0.002574002574002574},\"59\":{\"ref\":59,\"tf\":0.005571030640668524},\"74\":{\"ref\":74,\"tf\":0.005988023952095809},\"129\":{\"ref\":129,\"tf\":0.0017391304347826088},\"130\":{\"ref\":130,\"tf\":0.008771929824561403},\"133\":{\"ref\":133,\"tf\":0.0033500837520938024},\"134\":{\"ref\":134,\"tf\":0.0023014959723820483},\"135\":{\"ref\":135,\"tf\":0.005791505791505791},\"136\":{\"ref\":136,\"tf\":0.005050505050505051}}},\"d\":{\"docs\":{\"61\":{\"ref\":61,\"tf\":0.010869565217391304},\"69\":{\"ref\":69,\"tf\":0.05},\"129\":{\"ref\":129,\"tf\":0.0017391304347826088},\"134\":{\"ref\":134,\"tf\":0.0011507479861910242}}}},\"e\":{\"docs\":{},\"z\":{\"docs\":{},\"e\":{\"docs\":{},\"r\":{\"docs\":{\"19\":{\"ref\":19,\"tf\":0.02}}}}},\"k\":{\"docs\":{\"136\":{\"ref\":136,\"tf\":0.005050505050505051}},\"e\":{\"docs\":{},\"n\":{\"docs\":{},\"d\":{\"docs\":{\"136\":{\"ref\":136,\"tf\":0.005050505050505051}}}}}}},\"b\":{\"docs\":{\"34\":{\"ref\":34,\"tf\":0.016666666666666666},\"54\":{\"ref\":54,\"tf\":0.001287001287001287},\"56\":{\"ref\":56,\"tf\":0.001594896331738437},\"57\":{\"ref\":57,\"tf\":0.01179245283018868},\"59\":{\"ref\":59,\"tf\":0.002785515320334262},\"60\":{\"ref\":60,\"tf\":0.00909090909090909},\"61\":{\"ref\":61,\"tf\":0.010869565217391304},\"66\":{\"ref\":66,\"tf\":0.043478260869565216},\"67\":{\"ref\":67,\"tf\":0.027777777777777776},\"103\":{\"ref\":103,\"tf\":0.006493506493506494},\"121\":{\"ref\":121,\"tf\":0.005813953488372093},\"134\":{\"ref\":134,\"tf\":0.0023014959723820483},\"135\":{\"ref\":135,\"tf\":0.007722007722007722}},\"s\":{\"docs\":{},\"i\":{\"docs\":{},\"t\":{\"docs\":{\"57\":{\"ref\":57,\"tf\":0.009433962264150943},\"60\":{\"ref\":60,\"tf\":0.004545454545454545},\"67\":{\"ref\":67,\"tf\":0.027777777777777776},\"68\":{\"ref\":68,\"tf\":0.027777777777777776}}}}},\"v\":{\"docs\":{},\"i\":{\"docs\":{},\"e\":{\"docs\":{},\"w\":{\"docs\":{\"57\":{\"ref\":57,\"tf\":0.0023584905660377358},\"121\":{\"ref\":121,\"tf\":0.011627906976744186}}}}}},\"k\":{\"docs\":{},\"i\":{\"docs\":{},\"t\":{\"docs\":{\"60\":{\"ref\":60,\"tf\":0.0022727272727272726},\"135\":{\"ref\":135,\"tf\":0.0019305019305019305}}}}},\"p\":{\"docs\":{},\"a\":{\"docs\":{},\"g\":{\"docs\":{\"104\":{\"ref\":104,\"tf\":0.00423728813559322},\"134\":{\"ref\":134,\"tf\":0.0011507479861910242}}}}},\"-\":{\"docs\":{},\"d\":{\"docs\":{},\"e\":{\"docs\":{},\"v\":{\"docs\":{\"134\":{\"ref\":134,\"tf\":0.0011507479861910242}}}}}}},\"’\":{\"docs\":{},\"v\":{\"docs\":{\"65\":{\"ref\":65,\"tf\":0.025}}}},\"a\":{\"docs\":{},\"t\":{\"docs\":{},\"h\":{\"docs\":{},\"e\":{\"docs\":{},\"r\":{\"docs\":{\"132\":{\"ref\":132,\"tf\":0.01282051282051282}}}}}}}},\"h\":{\"docs\":{},\"i\":{\"docs\":{},\"c\":{\"docs\":{},\"h\":{\"docs\":{\"16\":{\"ref\":16,\"tf\":0.007352941176470588}}}},\"l\":{\"docs\":{},\"e\":{\"docs\":{},\"(\":{\"docs\":{},\"t\":{\"docs\":{},\"r\":{\"docs\":{},\"u\":{\"docs\":{\"54\":{\"ref\":54,\"tf\":0.001287001287001287}}}}}}}},\"t\":{\"docs\":{},\"e\":{\"docs\":{},\"l\":{\"docs\":{},\"i\":{\"docs\":{},\"s\":{\"docs\":{},\"t\":{\"docs\":{\"133\":{\"ref\":133,\"tf\":0.0016750418760469012}}}}}}}}},\"e\":{\"docs\":{},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\"a\":{\"docs\":{\"21\":{\"ref\":21,\"tf\":0.00980392156862745},\"31\":{\"ref\":31,\"tf\":0.047619047619047616},\"38\":{\"ref\":38,\"tf\":0.011627906976744186}}}}},\"n\":{\"docs\":{},\"e\":{\"docs\":{},\"v\":{\"docs\":{\"56\":{\"ref\":56,\"tf\":0.001594896331738437},\"78\":{\"ref\":78,\"tf\":0.011235955056179775},\"90\":{\"ref\":90,\"tf\":0.010416666666666666},\"94\":{\"ref\":94,\"tf\":0.011111111111111112},\"123\":{\"ref\":123,\"tf\":0.0035211267605633804}}}}},\"t\":{\"docs\":{},\"h\":{\"docs\":{},\"e\":{\"docs\":{},\"r\":{\"docs\":{\"69\":{\"ref\":69,\"tf\":0.05},\"71\":{\"ref\":71,\"tf\":0.024},\"74\":{\"ref\":74,\"tf\":0.03592814371257485},\"80\":{\"ref\":80,\"tf\":0.023076923076923078},\"90\":{\"ref\":90,\"tf\":0.041666666666666664},\"91\":{\"ref\":91,\"tf\":0.0196078431372549},\"92\":{\"ref\":92,\"tf\":0.02857142857142857},\"94\":{\"ref\":94,\"tf\":0.022222222222222223},\"98\":{\"ref\":98,\"tf\":0.03773584905660377},\"104\":{\"ref\":104,\"tf\":0.00423728813559322},\"106\":{\"ref\":106,\"tf\":0.013333333333333334},\"109\":{\"ref\":109,\"tf\":0.05128205128205128},\"110\":{\"ref\":110,\"tf\":0.01020408163265306},\"112\":{\"ref\":112,\"tf\":0.03529411764705882},\"115\":{\"ref\":115,\"tf\":0.01948051948051948},\"116\":{\"ref\":116,\"tf\":0.03888888888888889},\"117\":{\"ref\":117,\"tf\":0.015151515151515152},\"118\":{\"ref\":118,\"tf\":0.009523809523809525},\"119\":{\"ref\":119,\"tf\":0.003937007874015748},\"120\":{\"ref\":120,\"tf\":0.012578616352201259},\"121\":{\"ref\":121,\"tf\":0.05813953488372093}}}}}}},\"a\":{\"docs\":{},\"t\":{\"docs\":{},\"'\":{\"docs\":{\"64\":{\"ref\":64,\"tf\":5},\"127\":{\"ref\":127,\"tf\":0.006622516556291391}}},\"e\":{\"docs\":{},\"v\":{\"docs\":{\"67\":{\"ref\":67,\"tf\":0.027777777777777776},\"129\":{\"ref\":129,\"tf\":0.0017391304347826088}}}}}},\"o\":{\"docs\":{},\"l\":{\"docs\":{},\"e\":{\"docs\":{\"82\":{\"ref\":82,\"tf\":0.0078125}}}}}},\"o\":{\"docs\":{},\"r\":{\"docs\":{},\"r\":{\"docs\":{},\"i\":{\"docs\":{\"43\":{\"ref\":43,\"tf\":0.006944444444444444}}}},\"d\":{\"docs\":{\"50\":{\"ref\":50,\"tf\":0.008928571428571428},\"135\":{\"ref\":135,\"tf\":2.5}}},\"k\":{\"docs\":{\"54\":{\"ref\":54,\"tf\":0.003861003861003861},\"56\":{\"ref\":56,\"tf\":0.004784688995215311},\"58\":{\"ref\":58,\"tf\":0.00546448087431694},\"60\":{\"ref\":60,\"tf\":0.006818181818181818},\"61\":{\"ref\":61,\"tf\":0.010869565217391304},\"63\":{\"ref\":63,\"tf\":0.024390243902439025},\"66\":{\"ref\":66,\"tf\":0.043478260869565216},\"70\":{\"ref\":70,\"tf\":0.023809523809523808},\"72\":{\"ref\":72,\"tf\":0.002331002331002331},\"82\":{\"ref\":82,\"tf\":0.0078125},\"84\":{\"ref\":84,\"tf\":0.0036363636363636364},\"95\":{\"ref\":95,\"tf\":0.009345794392523364},\"103\":{\"ref\":103,\"tf\":0.012987012987012988},\"104\":{\"ref\":104,\"tf\":0.012711864406779662},\"128\":{\"ref\":128,\"tf\":0.017857142857142856},\"130\":{\"ref\":130,\"tf\":0.0043859649122807015},\"131\":{\"ref\":131,\"tf\":0.05555555555555555},\"132\":{\"ref\":132,\"tf\":0.01282051282051282},\"133\":{\"ref\":133,\"tf\":0.005025125628140704},\"134\":{\"ref\":134,\"tf\":0.0034522439585730723},\"135\":{\"ref\":135,\"tf\":0.0019305019305019305},\"136\":{\"ref\":136,\"tf\":0.005050505050505051}}},\"l\":{\"docs\":{},\"d\":{\"docs\":{\"58\":{\"ref\":58,\"tf\":0.00546448087431694},\"129\":{\"ref\":129,\"tf\":0.0017391304347826088},\"134\":{\"ref\":134,\"tf\":0.0011507479861910242}}}}},\"n\":{\"docs\":{},\"'\":{\"docs\":{},\"t\":{\"docs\":{\"58\":{\"ref\":58,\"tf\":0.00273224043715847},\"59\":{\"ref\":59,\"tf\":0.002785515320334262},\"128\":{\"ref\":128,\"tf\":0.017857142857142856},\"135\":{\"ref\":135,\"tf\":0.0019305019305019305}}}},\"d\":{\"docs\":{},\"e\":{\"docs\":{},\"r\":{\"docs\":{\"127\":{\"ref\":127,\"tf\":0.006622516556291391}}}}}},\"u\":{\"docs\":{},\"l\":{\"docs\":{},\"d\":{\"docs\":{},\"n\":{\"docs\":{},\"'\":{\"docs\":{},\"t\":{\"docs\":{\"59\":{\"ref\":59,\"tf\":0.002785515320334262}}}}}}}}},\"w\":{\"docs\":{},\"w\":{\"docs\":{\"60\":{\"ref\":60,\"tf\":0.011363636363636364}},\"/\":{\"docs\":{},\"c\":{\"docs\":{},\"s\":{\"docs\":{},\"s\":{\"docs\":{},\"/\":{\"docs\":{},\"s\":{\"docs\":{},\"t\":{\"docs\":{},\"y\":{\"docs\":{},\"l\":{\"docs\":{},\"e\":{\"docs\":{},\".\":{\"docs\":{},\"c\":{\"docs\":{},\"s\":{\"docs\":{},\"s\":{\"docs\":{\"56\":{\"ref\":56,\"tf\":0.001594896331738437}}}}}}}}}}}}}}},\"i\":{\"docs\":{},\"n\":{\"docs\":{},\"d\":{\"docs\":{},\"e\":{\"docs\":{},\"x\":{\"docs\":{},\".\":{\"docs\":{},\"h\":{\"docs\":{},\"t\":{\"docs\":{},\"m\":{\"docs\":{},\"l\":{\"docs\":{\"56\":{\"ref\":56,\"tf\":0.001594896331738437},\"59\":{\"ref\":59,\"tf\":0.002785515320334262}}}}}}}}}}}},\"j\":{\"docs\":{\"56\":{\"ref\":56,\"tf\":0.001594896331738437}},\"s\":{\"docs\":{},\"/\":{\"docs\":{},\"a\":{\"docs\":{},\"p\":{\"docs\":{},\"p\":{\"docs\":{},\".\":{\"docs\":{},\"j\":{\"docs\":{\"59\":{\"ref\":59,\"tf\":0.002785515320334262}}}}}}}}}}}}}},\"y\":{\"1\":{\"docs\":{\"119\":{\"ref\":119,\"tf\":0.007874015748031496}}},\"2\":{\"docs\":{\"119\":{\"ref\":119,\"tf\":0.007874015748031496}}},\"docs\":{\"119\":{\"ref\":119,\"tf\":0.007874015748031496},\"134\":{\"ref\":134,\"tf\":0.0023014959723820483}},\"o\":{\"docs\":{},\"u\":{\"docs\":{},\"'\":{\"docs\":{},\"l\":{\"docs\":{},\"l\":{\"docs\":{\"3\":{\"ref\":3,\"tf\":0.019230769230769232},\"38\":{\"ref\":38,\"tf\":0.011627906976744186},\"50\":{\"ref\":50,\"tf\":0.008928571428571428},\"54\":{\"ref\":54,\"tf\":0.001287001287001287},\"56\":{\"ref\":56,\"tf\":0.009569377990430622},\"58\":{\"ref\":58,\"tf\":0.01639344262295082},\"59\":{\"ref\":59,\"tf\":0.002785515320334262},\"60\":{\"ref\":60,\"tf\":0.004545454545454545},\"61\":{\"ref\":61,\"tf\":0.010869565217391304},\"126\":{\"ref\":126,\"tf\":0.011111111111111112},\"129\":{\"ref\":129,\"tf\":0.006956521739130435},\"133\":{\"ref\":133,\"tf\":0.0016750418760469012}}}},\"d\":{\"docs\":{\"45\":{\"ref\":45,\"tf\":0.00980392156862745},\"56\":{\"ref\":56,\"tf\":0.001594896331738437},\"57\":{\"ref\":57,\"tf\":0.0023584905660377358},\"127\":{\"ref\":127,\"tf\":0.006622516556291391},\"129\":{\"ref\":129,\"tf\":0.0017391304347826088}}},\"v\":{\"docs\":{\"56\":{\"ref\":56,\"tf\":0.001594896331738437},\"57\":{\"ref\":57,\"tf\":0.0023584905660377358},\"60\":{\"ref\":60,\"tf\":0.004545454545454545},\"129\":{\"ref\":129,\"tf\":0.0034782608695652175},\"132\":{\"ref\":132,\"tf\":0.01282051282051282},\"134\":{\"ref\":134,\"tf\":0.0011507479861910242}}},\"r\":{\"docs\":{\"129\":{\"ref\":129,\"tf\":0.0017391304347826088},\"134\":{\"ref\":134,\"tf\":0.0011507479861910242}}}},\"r\":{\"docs\":{},\"s\":{\"docs\":{},\"e\":{\"docs\":{},\"l\":{\"docs\":{},\"f\":{\"docs\":{\"106\":{\"ref\":106,\"tf\":0.013333333333333334}}}}}}},\"’\":{\"docs\":{},\"d\":{\"docs\":{\"126\":{\"ref\":126,\"tf\":0.011111111111111112}}}}}},\"e\":{\"docs\":{},\"l\":{\"docs\":{},\"l\":{\"docs\":{},\"o\":{\"docs\":{},\"w\":{\"docs\":{\"16\":{\"ref\":16,\"tf\":0.007352941176470588},\"94\":{\"ref\":94,\"tf\":0.011111111111111112}}}}}},\"a\":{\"docs\":{},\"r\":{\"docs\":{\"21\":{\"ref\":21,\"tf\":0.00980392156862745},\"60\":{\"ref\":60,\"tf\":0.0022727272727272726}}}},\"p\":{\"docs\":{\"127\":{\"ref\":127,\"tf\":0.006622516556291391}}}},\"-\":{\"docs\":{},\"w\":{\"docs\":{},\"i\":{\"docs\":{},\"n\":{\"docs\":{},\"g\":{\"docs\":{\"38\":{\"ref\":38,\"tf\":0.011627906976744186}}}}}},\"o\":{\"docs\":{},\"f\":{\"docs\":{},\"f\":{\"docs\":{},\"s\":{\"docs\":{},\"e\":{\"docs\":{},\"t\":{\"docs\":{\"115\":{\"ref\":115,\"tf\":0.003246753246753247}}}}}}}},\"v\":{\"docs\":{},\"a\":{\"docs\":{},\"l\":{\"docs\":{},\"u\":{\"docs\":{\"115\":{\"ref\":115,\"tf\":0.003246753246753247}}}}}}},\"a\":{\"docs\":{},\"v\":{\"docs\":{},\"i\":{\"docs\":{},\"n\":{\"docs\":{\"38\":{\"ref\":38,\"tf\":0.011627906976744186}}}}}}},\"e\":{\"docs\":{\"130\":{\"ref\":130,\"tf\":0.0043859649122807015}},\"s\":{\"docs\":{},\"s\":{\"docs\":{},\"e\":{\"docs\":{},\"n\":{\"docs\":{},\"t\":{\"docs\":{},\"i\":{\"docs\":{\"4\":{\"ref\":4,\"tf\":0.022727272727272728},\"18\":{\"ref\":18,\"tf\":0.02},\"19\":{\"ref\":19,\"tf\":0.02},\"57\":{\"ref\":57,\"tf\":0.0023584905660377358}}}}}}},\"p\":{\"docs\":{},\"e\":{\"docs\":{},\"c\":{\"docs\":{},\"i\":{\"docs\":{\"53\":{\"ref\":53,\"tf\":0.041666666666666664}}}}}},\"c\":{\"docs\":{},\"a\":{\"docs\":{},\"p\":{\"docs\":{\"105\":{\"ref\":105,\"tf\":0.005847953216374269}}}}}},\"x\":{\"docs\":{},\"p\":{\"docs\":{},\"e\":{\"docs\":{},\"r\":{\"docs\":{},\"i\":{\"docs\":{\"4\":{\"ref\":4,\"tf\":0.022727272727272728},\"21\":{\"ref\":21,\"tf\":0.00980392156862745},\"39\":{\"ref\":39,\"tf\":0.012658227848101266},\"56\":{\"ref\":56,\"tf\":0.001594896331738437},\"57\":{\"ref\":57,\"tf\":0.0023584905660377358},\"60\":{\"ref\":60,\"tf\":0.0022727272727272726},\"72\":{\"ref\":72,\"tf\":0.002331002331002331},\"104\":{\"ref\":104,\"tf\":0.00423728813559322},\"132\":{\"ref\":132,\"tf\":0.01282051282051282},\"135\":{\"ref\":135,\"tf\":0.003861003861003861},\"136\":{\"ref\":136,\"tf\":0.010101010101010102}}}},\"c\":{\"docs\":{},\"t\":{\"docs\":{\"21\":{\"ref\":21,\"tf\":0.00980392156862745},\"104\":{\"ref\":104,\"tf\":0.00423728813559322},\"135\":{\"ref\":135,\"tf\":0.0019305019305019305},\"136\":{\"ref\":136,\"tf\":0.005050505050505051}}}}},\"l\":{\"docs\":{},\"i\":{\"docs\":{},\"c\":{\"docs\":{},\"i\":{\"docs\":{},\"t\":{\"docs\":{\"45\":{\"ref\":45,\"tf\":2.519607843137255}},\"l\":{\"docs\":{},\"i\":{\"docs\":{\"43\":{\"ref\":43,\"tf\":0.006944444444444444},\"45\":{\"ref\":45,\"tf\":0.00980392156862745},\"72\":{\"ref\":72,\"tf\":0.002331002331002331},\"95\":{\"ref\":95,\"tf\":0.009345794392523364},\"117\":{\"ref\":117,\"tf\":0.007575757575757576}}}}}}}},\"a\":{\"docs\":{},\"i\":{\"docs\":{},\"n\":{\"docs\":{\"84\":{\"ref\":84,\"tf\":0.0036363636363636364}}}}},\"o\":{\"docs\":{},\"r\":{\"docs\":{\"126\":{\"ref\":126,\"tf\":0.011111111111111112}}}}},\"a\":{\"docs\":{},\"n\":{\"docs\":{},\"d\":{\"docs\":{\"54\":{\"ref\":54,\"tf\":0.001287001287001287},\"57\":{\"ref\":57,\"tf\":0.0023584905660377358},\"61\":{\"ref\":61,\"tf\":0.021739130434782608}}}}},\"o\":{\"docs\":{},\"r\":{\"docs\":{},\"t\":{\"docs\":{\"56\":{\"ref\":56,\"tf\":0.001594896331738437}}}},\"s\":{\"docs\":{\"59\":{\"ref\":59,\"tf\":0.008356545961002786},\"60\":{\"ref\":60,\"tf\":0.0022727272727272726},\"108\":{\"ref\":108,\"tf\":0.014492753623188406},\"124\":{\"ref\":124,\"tf\":0.010309278350515464},\"135\":{\"ref\":135,\"tf\":0.0019305019305019305}}}},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\"s\":{\"docs\":{},\"s\":{\"docs\":{\"72\":{\"ref\":72,\"tf\":0.02564102564102564},\"74\":{\"ref\":74,\"tf\":0.023952095808383235},\"78\":{\"ref\":78,\"tf\":0.033707865168539325},\"88\":{\"ref\":88,\"tf\":0.019417475728155338},\"89\":{\"ref\":89,\"tf\":0.045454545454545456},\"90\":{\"ref\":90,\"tf\":0.020833333333333332},\"94\":{\"ref\":94,\"tf\":0.05555555555555555},\"95\":{\"ref\":95,\"tf\":0.04672897196261682}}}}}}},\"a\":{\"docs\":{},\"m\":{\"docs\":{},\"p\":{\"docs\":{},\"l\":{\"docs\":{\"5\":{\"ref\":5,\"tf\":0.02564102564102564},\"13\":{\"ref\":13,\"tf\":0.019230769230769232},\"16\":{\"ref\":16,\"tf\":0.014705882352941176},\"20\":{\"ref\":20,\"tf\":0.02040816326530612},\"22\":{\"ref\":22,\"tf\":0.024390243902439025},\"27\":{\"ref\":27,\"tf\":0.03225806451612903},\"29\":{\"ref\":29,\"tf\":0.02564102564102564},\"34\":{\"ref\":34,\"tf\":0.016666666666666666},\"35\":{\"ref\":35,\"tf\":0.01818181818181818},\"38\":{\"ref\":38,\"tf\":0.011627906976744186},\"39\":{\"ref\":39,\"tf\":0.012658227848101266},\"44\":{\"ref\":44,\"tf\":0.018518518518518517},\"45\":{\"ref\":45,\"tf\":0.00980392156862745},\"48\":{\"ref\":48,\"tf\":0.023255813953488372},\"54\":{\"ref\":54,\"tf\":0.003861003861003861},\"56\":{\"ref\":56,\"tf\":0.001594896331738437},\"58\":{\"ref\":58,\"tf\":0.00546448087431694},\"59\":{\"ref\":59,\"tf\":0.005571030640668524},\"60\":{\"ref\":60,\"tf\":0.004545454545454545},\"66\":{\"ref\":66,\"tf\":0.043478260869565216},\"72\":{\"ref\":72,\"tf\":0.016317016317016316},\"81\":{\"ref\":81,\"tf\":0.015151515151515152},\"84\":{\"ref\":84,\"tf\":0.007272727272727273},\"91\":{\"ref\":91,\"tf\":0.0196078431372549},\"92\":{\"ref\":92,\"tf\":0.02857142857142857},\"95\":{\"ref\":95,\"tf\":0.009345794392523364},\"97\":{\"ref\":97,\"tf\":0.019230769230769232},\"98\":{\"ref\":98,\"tf\":0.018867924528301886},\"100\":{\"ref\":100,\"tf\":0.041666666666666664},\"101\":{\"ref\":101,\"tf\":0.043478260869565216},\"102\":{\"ref\":102,\"tf\":0.041666666666666664},\"104\":{\"ref\":104,\"tf\":0.00423728813559322},\"107\":{\"ref\":107,\"tf\":0.012658227848101266},\"109\":{\"ref\":109,\"tf\":0.008547008547008548},\"112\":{\"ref\":112,\"tf\":0.0058823529411764705},\"113\":{\"ref\":113,\"tf\":0.0070921985815602835},\"114\":{\"ref\":114,\"tf\":0.001594896331738437},\"115\":{\"ref\":115,\"tf\":0.00974025974025974},\"116\":{\"ref\":116,\"tf\":0.011111111111111112},\"117\":{\"ref\":117,\"tf\":0.015151515151515152},\"118\":{\"ref\":118,\"tf\":0.009523809523809525},\"126\":{\"ref\":126,\"tf\":0.011111111111111112},\"128\":{\"ref\":128,\"tf\":0.03571428571428571},\"129\":{\"ref\":129,\"tf\":0.0052173913043478265},\"134\":{\"ref\":134,\"tf\":0.0011507479861910242},\"135\":{\"ref\":135,\"tf\":0.0019305019305019305},\"136\":{\"ref\":136,\"tf\":0.005050505050505051}}}}},\"c\":{\"docs\":{},\"t\":{\"docs\":{},\"l\":{\"docs\":{},\"i\":{\"docs\":{\"57\":{\"ref\":57,\"tf\":0.0023584905660377358},\"134\":{\"ref\":134,\"tf\":0.0011507479861910242}}}}}}},\"t\":{\"docs\":{},\"r\":{\"docs\":{},\"a\":{\"docs\":{\"11\":{\"ref\":11,\"tf\":0.045454545454545456},\"134\":{\"ref\":134,\"tf\":0.0023014959723820483},\"135\":{\"ref\":135,\"tf\":0.0019305019305019305}},\"c\":{\"docs\":{},\"t\":{\"docs\":{\"56\":{\"ref\":56,\"tf\":0.001594896331738437},\"128\":{\"ref\":128,\"tf\":0.017857142857142856}}}}}},\"e\":{\"docs\":{},\"n\":{\"docs\":{},\"s\":{\"docs\":{\"14\":{\"ref\":14,\"tf\":0.011494252873563218},\"54\":{\"ref\":54,\"tf\":0.001287001287001287},\"59\":{\"ref\":59,\"tf\":0.002785515320334262},\"64\":{\"ref\":64,\"tf\":0.0625}}},\"d\":{\"docs\":{\"50\":{\"ref\":50,\"tf\":0.008928571428571428},\"65\":{\"ref\":65,\"tf\":0.025}}}}}},\"c\":{\"docs\":{},\"e\":{\"docs\":{},\"p\":{\"docs\":{},\"t\":{\"docs\":{\"20\":{\"ref\":20,\"tf\":0.02040816326530612},\"34\":{\"ref\":34,\"tf\":0.016666666666666666},\"35\":{\"ref\":35,\"tf\":0.01818181818181818},\"73\":{\"ref\":73,\"tf\":0.05},\"82\":{\"ref\":82,\"tf\":0.0078125},\"87\":{\"ref\":87,\"tf\":0.041666666666666664},\"123\":{\"ref\":123,\"tf\":0.007042253521126761}}}}}},\"i\":{\"docs\":{},\"s\":{\"docs\":{},\"t\":{\"docs\":{\"54\":{\"ref\":54,\"tf\":0.001287001287001287},\"57\":{\"ref\":57,\"tf\":0.007075471698113208},\"59\":{\"ref\":59,\"tf\":0.002785515320334262},\"95\":{\"ref\":95,\"tf\":0.009345794392523364},\"112\":{\"ref\":112,\"tf\":0.0058823529411764705},\"116\":{\"ref\":116,\"tf\":0.011111111111111112},\"118\":{\"ref\":118,\"tf\":0.009523809523809525},\"123\":{\"ref\":123,\"tf\":0.0035211267605633804},\"129\":{\"ref\":129,\"tf\":0.0017391304347826088},\"134\":{\"ref\":134,\"tf\":0.0011507479861910242},\"135\":{\"ref\":135,\"tf\":0.0019305019305019305}}}},\"t\":{\"docs\":{\"121\":{\"ref\":121,\"tf\":0.005813953488372093}},\"a\":{\"docs\":{},\"p\":{\"docs\":{},\"p\":{\"docs\":{\"121\":{\"ref\":121,\"tf\":0.005813953488372093}}}}}}},\"e\":{\"docs\":{},\"c\":{\"docs\":{},\"u\":{\"docs\":{},\"t\":{\"docs\":{\"56\":{\"ref\":56,\"tf\":0.001594896331738437},\"104\":{\"ref\":104,\"tf\":0.00423728813559322},\"111\":{\"ref\":111,\"tf\":0.03007518796992481},\"113\":{\"ref\":113,\"tf\":0.014184397163120567},\"133\":{\"ref\":133,\"tf\":0.0016750418760469012},\"134\":{\"ref\":134,\"tf\":0.0034522439585730723},\"135\":{\"ref\":135,\"tf\":0.0019305019305019305},\"136\":{\"ref\":136,\"tf\":0.005050505050505051}}}}}}},\"d\":{\"docs\":{},\"g\":{\"docs\":{\"5\":{\"ref\":5,\"tf\":0.02564102564102564},\"52\":{\"ref\":52,\"tf\":0.010416666666666666},\"62\":{\"ref\":62,\"tf\":0.041666666666666664},\"74\":{\"ref\":74,\"tf\":0.005988023952095809}}},\"i\":{\"docs\":{},\"t\":{\"docs\":{\"11\":{\"ref\":11,\"tf\":0.09090909090909091},\"12\":{\"ref\":12,\"tf\":0.1},\"14\":{\"ref\":14,\"tf\":0.022988505747126436},\"58\":{\"ref\":58,\"tf\":0.00819672131147541},\"59\":{\"ref\":59,\"tf\":0.008356545961002786},\"80\":{\"ref\":80,\"tf\":0.015384615384615385},\"85\":{\"ref\":85,\"tf\":0.09090909090909091},\"111\":{\"ref\":111,\"tf\":0.007518796992481203},\"123\":{\"ref\":123,\"tf\":0.0035211267605633804},\"124\":{\"ref\":124,\"tf\":0.010309278350515464}}}}},\"l\":{\"docs\":{},\"e\":{\"docs\":{},\"m\":{\"docs\":{},\"e\":{\"docs\":{},\"n\":{\"docs\":{},\"t\":{\"docs\":{\"5\":{\"ref\":5,\"tf\":0.02564102564102564},\"6\":{\"ref\":6,\"tf\":0.023809523809523808},\"10\":{\"ref\":10,\"tf\":0.047619047619047616},\"15\":{\"ref\":15,\"tf\":0.022727272727272728},\"16\":{\"ref\":16,\"tf\":0.029411764705882353},\"20\":{\"ref\":20,\"tf\":0.02040816326530612},\"22\":{\"ref\":22,\"tf\":0.024390243902439025},\"24\":{\"ref\":24,\"tf\":0.041666666666666664},\"25\":{\"ref\":25,\"tf\":0.022988505747126436},\"26\":{\"ref\":26,\"tf\":0.043478260869565216},\"28\":{\"ref\":28,\"tf\":0.038461538461538464},\"30\":{\"ref\":30,\"tf\":0.05405405405405406},\"35\":{\"ref\":35,\"tf\":0.01818181818181818},\"36\":{\"ref\":36,\"tf\":0.05357142857142857},\"37\":{\"ref\":37,\"tf\":0.0625},\"38\":{\"ref\":38,\"tf\":0.011627906976744186},\"39\":{\"ref\":39,\"tf\":0.012658227848101266},\"52\":{\"ref\":52,\"tf\":0.03125},\"57\":{\"ref\":57,\"tf\":0.0023584905660377358},\"72\":{\"ref\":72,\"tf\":0.037296037296037296},\"80\":{\"ref\":80,\"tf\":0.023076923076923078},\"82\":{\"ref\":82,\"tf\":0.0234375},\"86\":{\"ref\":86,\"tf\":0.06666666666666667},\"88\":{\"ref\":88,\"tf\":0.009708737864077669},\"93\":{\"ref\":93,\"tf\":0.028169014084507043},\"96\":{\"ref\":96,\"tf\":0.03571428571428571},\"97\":{\"ref\":97,\"tf\":0.038461538461538464},\"99\":{\"ref\":99,\"tf\":0.02127659574468085},\"102\":{\"ref\":102,\"tf\":0.041666666666666664},\"103\":{\"ref\":103,\"tf\":0.01948051948051948},\"104\":{\"ref\":104,\"tf\":0.012711864406779662},\"105\":{\"ref\":105,\"tf\":0.005847953216374269},\"108\":{\"ref\":108,\"tf\":0.14492753623188406},\"115\":{\"ref\":115,\"tf\":0.00974025974025974},\"117\":{\"ref\":117,\"tf\":0.007575757575757576},\"119\":{\"ref\":119,\"tf\":0.04330708661417323},\"120\":{\"ref\":120,\"tf\":0.06289308176100629},\"123\":{\"ref\":123,\"tf\":0.01056338028169014},\"130\":{\"ref\":130,\"tf\":0.008771929824561403},\"133\":{\"ref\":133,\"tf\":0.0016750418760469012},\"134\":{\"ref\":134,\"tf\":0.01726121979286536}},\"'\":{\"docs\":{\"52\":{\"ref\":52,\"tf\":0.020833333333333332},\"119\":{\"ref\":119,\"tf\":0.003937007874015748}}},\")\":{\"docs\":{},\"(\":{\"docs\":{},\"a\":{\"docs\":{},\"l\":{\"docs\":{},\"i\":{\"docs\":{},\"a\":{\"docs\":{\"120\":{\"ref\":120,\"tf\":0.025157232704402517}}}}}}}},\"[\":{\"0\":{\"docs\":{},\"]\":{\"docs\":{},\".\":{\"docs\":{},\"s\":{\"docs\":{},\"t\":{\"docs\":{},\"y\":{\"docs\":{},\"l\":{\"docs\":{},\"e\":{\"docs\":{},\".\":{\"docs\":{},\"o\":{\"docs\":{},\"p\":{\"docs\":{},\"a\":{\"docs\":{},\"c\":{\"docs\":{\"130\":{\"ref\":130,\"tf\":0.0043859649122807015}}}}}}}}}}}}}}},\"docs\":{}}}}}}},\"a\":{\"docs\":{},\"b\":{\"docs\":{},\"o\":{\"docs\":{},\"r\":{\"docs\":{\"114\":{\"ref\":114,\"tf\":0.001594896331738437}}}}}},\"i\":{\"docs\":{},\"m\":{\"docs\":{},\"i\":{\"docs\":{},\"n\":{\"docs\":{\"134\":{\"ref\":134,\"tf\":0.0034522439585730723}}}}}}},\"n\":{\"docs\":{},\"t\":{\"docs\":{},\"i\":{\"docs\":{},\"r\":{\"docs\":{\"6\":{\"ref\":6,\"tf\":0.023809523809523808},\"16\":{\"ref\":16,\"tf\":0.007352941176470588},\"19\":{\"ref\":19,\"tf\":0.02},\"31\":{\"ref\":31,\"tf\":0.047619047619047616},\"34\":{\"ref\":34,\"tf\":0.016666666666666666},\"35\":{\"ref\":35,\"tf\":0.01818181818181818},\"36\":{\"ref\":36,\"tf\":0.017857142857142856},\"129\":{\"ref\":129,\"tf\":0.0017391304347826088},\"133\":{\"ref\":133,\"tf\":0.0016750418760469012}}}},\"e\":{\"docs\":{},\"r\":{\"docs\":{\"23\":{\"ref\":23,\"tf\":0.24242424242424243},\"27\":{\"ref\":27,\"tf\":0.03225806451612903},\"28\":{\"ref\":28,\"tf\":0.038461538461538464},\"54\":{\"ref\":54,\"tf\":0.001287001287001287},\"114\":{\"ref\":114,\"tf\":0.004784688995215311},\"127\":{\"ref\":127,\"tf\":0.006622516556291391},\"129\":{\"ref\":129,\"tf\":0.0034782608695652175},\"135\":{\"ref\":135,\"tf\":0.0019305019305019305},\"136\":{\"ref\":136,\"tf\":0.010101010101010102}}}},\"r\":{\"docs\":{},\"i\":{\"docs\":{\"56\":{\"ref\":56,\"tf\":0.003189792663476874}}}}},\"a\":{\"docs\":{},\"b\":{\"docs\":{},\"l\":{\"docs\":{\"39\":{\"ref\":39,\"tf\":0.012658227848101266},\"54\":{\"ref\":54,\"tf\":0.001287001287001287},\"56\":{\"ref\":56,\"tf\":0.001594896331738437},\"58\":{\"ref\":58,\"tf\":0.00273224043715847},\"60\":{\"ref\":60,\"tf\":0.011363636363636364},\"82\":{\"ref\":82,\"tf\":0.0078125},\"91\":{\"ref\":91,\"tf\":0.0196078431372549},\"117\":{\"ref\":117,\"tf\":0.015151515151515152},\"134\":{\"ref\":134,\"tf\":0.0011507479861910242},\"135\":{\"ref\":135,\"tf\":0.003861003861003861}},\"e\":{\"docs\":{},\"s\":{\"docs\":{},\"l\":{\"docs\":{},\"i\":{\"docs\":{},\"d\":{\"docs\":{},\"e\":{\"docs\":{},\"(\":{\"docs\":{},\"[\":{\"docs\":{},\"s\":{\"docs\":{},\"h\":{\"docs\":{},\"o\":{\"docs\":{},\"u\":{\"docs\":{},\"l\":{\"docs\":{},\"d\":{\"docs\":{},\"e\":{\"docs\":{},\"n\":{\"docs\":{\"117\":{\"ref\":117,\"tf\":0.007575757575757576}}}}}}}}}}}}}}}}}}}}},\"e\":{\"docs\":{},\"r\":{\"docs\":{},\"g\":{\"docs\":{\"50\":{\"ref\":50,\"tf\":0.008928571428571428},\"129\":{\"ref\":129,\"tf\":0.0017391304347826088}}}}},\"d\":{\"docs\":{\"61\":{\"ref\":61,\"tf\":0.010869565217391304},\"106\":{\"ref\":106,\"tf\":0.013333333333333334},\"117\":{\"ref\":117,\"tf\":0.007575757575757576}},\"r\":{\"docs\":{},\"a\":{\"docs\":{},\"w\":{\"docs\":{\"54\":{\"ref\":54,\"tf\":0.001287001287001287},\"132\":{\"ref\":132,\"tf\":0.01282051282051282}}}}},\"h\":{\"docs\":{},\"i\":{\"docs\":{},\"g\":{\"docs\":{},\"h\":{\"docs\":{},\"l\":{\"docs\":{},\"i\":{\"docs\":{},\"g\":{\"docs\":{},\"h\":{\"docs\":{},\"t\":{\"docs\":{\"63\":{\"ref\":63,\"tf\":0.024390243902439025},\"127\":{\"ref\":127,\"tf\":0.019867549668874173},\"130\":{\"ref\":130,\"tf\":0.013157894736842105},\"132\":{\"ref\":132,\"tf\":0.01282051282051282},\"133\":{\"ref\":133,\"tf\":0.005025125628140704}}}}}}}}}}}},\"o\":{\"docs\":{},\"u\":{\"docs\":{},\"g\":{\"docs\":{},\"h\":{\"docs\":{\"54\":{\"ref\":54,\"tf\":0.001287001287001287},\"57\":{\"ref\":57,\"tf\":0.0047169811320754715},\"70\":{\"ref\":70,\"tf\":0.023809523809523808},\"88\":{\"ref\":88,\"tf\":0.009708737864077669}}}}}},\"s\":{\"docs\":{},\"u\":{\"docs\":{},\"r\":{\"docs\":{\"56\":{\"ref\":56,\"tf\":0.001594896331738437}}}}},\"v\":{\"docs\":{},\"i\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"n\":{\"docs\":{\"56\":{\"ref\":56,\"tf\":0.001594896331738437},\"135\":{\"ref\":135,\"tf\":0.0019305019305019305}}}}}}},\"j\":{\"docs\":{},\"o\":{\"docs\":{},\"i\":{\"docs\":{\"58\":{\"ref\":58,\"tf\":0.00273224043715847}}}}},\"c\":{\"docs\":{},\"o\":{\"docs\":{},\"u\":{\"docs\":{},\"r\":{\"docs\":{},\"a\":{\"docs\":{},\"g\":{\"docs\":{\"59\":{\"ref\":59,\"tf\":0.002785515320334262},\"134\":{\"ref\":134,\"tf\":0.0011507479861910242}}}}}}}},\"h\":{\"docs\":{},\"a\":{\"docs\":{},\"n\":{\"docs\":{},\"c\":{\"docs\":{\"65\":{\"ref\":65,\"tf\":0.025},\"134\":{\"ref\":134,\"tf\":0.0011507479861910242}}}}}},\"u\":{\"docs\":{},\"m\":{\"docs\":{},\"e\":{\"docs\":{},\"r\":{\"docs\":{\"72\":{\"ref\":72,\"tf\":0.004662004662004662}}}}}}},\"a\":{\"docs\":{},\"s\":{\"docs\":{},\"i\":{\"docs\":{\"21\":{\"ref\":21,\"tf\":0.00980392156862745},\"34\":{\"ref\":34,\"tf\":0.016666666666666666},\"60\":{\"ref\":60,\"tf\":0.0022727272727272726},\"74\":{\"ref\":74,\"tf\":0.011976047904191617},\"78\":{\"ref\":78,\"tf\":0.011235955056179775},\"80\":{\"ref\":80,\"tf\":0.007692307692307693},\"105\":{\"ref\":105,\"tf\":0.005847953216374269},\"123\":{\"ref\":123,\"tf\":0.0035211267605633804},\"124\":{\"ref\":124,\"tf\":0.010309278350515464},\"127\":{\"ref\":127,\"tf\":0.006622516556291391},\"129\":{\"ref\":129,\"tf\":0.0017391304347826088},\"130\":{\"ref\":130,\"tf\":0.0043859649122807015},\"134\":{\"ref\":134,\"tf\":0.004602991944764097},\"135\":{\"ref\":135,\"tf\":0.003861003861003861},\"136\":{\"ref\":136,\"tf\":0.005050505050505051}},\"l\":{\"docs\":{},\"i\":{\"docs\":{\"10\":{\"ref\":10,\"tf\":0.023809523809523808},\"13\":{\"ref\":13,\"tf\":0.019230769230769232},\"15\":{\"ref\":15,\"tf\":0.022727272727272728},\"16\":{\"ref\":16,\"tf\":0.007352941176470588},\"22\":{\"ref\":22,\"tf\":0.024390243902439025},\"32\":{\"ref\":32,\"tf\":0.04},\"43\":{\"ref\":43,\"tf\":0.006944444444444444},\"47\":{\"ref\":47,\"tf\":0.01},\"51\":{\"ref\":51,\"tf\":0.01694915254237288},\"52\":{\"ref\":52,\"tf\":0.010416666666666666},\"65\":{\"ref\":65,\"tf\":0.05},\"123\":{\"ref\":123,\"tf\":0.0035211267605633804},\"134\":{\"ref\":134,\"tf\":0.0011507479861910242}}}},\"e\":{\"docs\":{},\"r\":{\"docs\":{\"34\":{\"ref\":34,\"tf\":0.016666666666666666},\"43\":{\"ref\":43,\"tf\":0.006944444444444444},\"44\":{\"ref\":44,\"tf\":0.018518518518518517},\"45\":{\"ref\":45,\"tf\":0.00980392156862745},\"46\":{\"ref\":46,\"tf\":0.019230769230769232},\"47\":{\"ref\":47,\"tf\":0.01},\"48\":{\"ref\":48,\"tf\":0.011627906976744186},\"50\":{\"ref\":50,\"tf\":0.008928571428571428},\"54\":{\"ref\":54,\"tf\":0.001287001287001287},\"60\":{\"ref\":60,\"tf\":0.0022727272727272726},\"129\":{\"ref\":129,\"tf\":0.0017391304347826088}}},\"s\":{\"docs\":{},\"t\":{\"docs\":{\"60\":{\"ref\":60,\"tf\":0.0022727272727272726},\"129\":{\"ref\":129,\"tf\":0.0017391304347826088}}}}}},\"e\":{\"docs\":{},\"-\":{\"docs\":{},\"i\":{\"docs\":{},\"n\":{\"docs\":{},\"-\":{\"docs\":{},\"o\":{\"docs\":{},\"u\":{\"docs\":{},\"t\":{\"docs\":{\"106\":{\"ref\":106,\"tf\":0.013333333333333334}}}}}}}}}}},\"c\":{\"docs\":{},\"h\":{\"docs\":{\"16\":{\"ref\":16,\"tf\":0.022058823529411766},\"26\":{\"ref\":26,\"tf\":0.021739130434782608},\"29\":{\"ref\":29,\"tf\":0.02564102564102564},\"30\":{\"ref\":30,\"tf\":0.02702702702702703},\"34\":{\"ref\":34,\"tf\":0.016666666666666666},\"35\":{\"ref\":35,\"tf\":0.01818181818181818},\"36\":{\"ref\":36,\"tf\":0.017857142857142856},\"38\":{\"ref\":38,\"tf\":0.011627906976744186},\"39\":{\"ref\":39,\"tf\":0.012658227848101266},\"43\":{\"ref\":43,\"tf\":0.013888888888888888},\"44\":{\"ref\":44,\"tf\":0.037037037037037035},\"45\":{\"ref\":45,\"tf\":0.00980392156862745},\"47\":{\"ref\":47,\"tf\":0.01},\"48\":{\"ref\":48,\"tf\":0.023255813953488372},\"49\":{\"ref\":49,\"tf\":0.08333333333333333},\"50\":{\"ref\":50,\"tf\":0.017857142857142856},\"52\":{\"ref\":52,\"tf\":0.010416666666666666},\"54\":{\"ref\":54,\"tf\":0.001287001287001287},\"58\":{\"ref\":58,\"tf\":0.00273224043715847},\"71\":{\"ref\":71,\"tf\":0.008},\"72\":{\"ref\":72,\"tf\":0.006993006993006993},\"80\":{\"ref\":80,\"tf\":0.007692307692307693},\"82\":{\"ref\":82,\"tf\":0.0078125},\"84\":{\"ref\":84,\"tf\":0.01090909090909091},\"94\":{\"ref\":94,\"tf\":0.011111111111111112},\"95\":{\"ref\":95,\"tf\":0.009345794392523364},\"104\":{\"ref\":104,\"tf\":0.0211864406779661},\"105\":{\"ref\":105,\"tf\":0.005847953216374269},\"107\":{\"ref\":107,\"tf\":0.02531645569620253},\"114\":{\"ref\":114,\"tf\":0.001594896331738437},\"123\":{\"ref\":123,\"tf\":0.0035211267605633804},\"129\":{\"ref\":129,\"tf\":0.0017391304347826088},\"133\":{\"ref\":133,\"tf\":0.005025125628140704},\"134\":{\"ref\":134,\"tf\":0.0023014959723820483},\"136\":{\"ref\":136,\"tf\":0.005050505050505051}}}},\"t\":{\"docs\":{\"54\":{\"ref\":54,\"tf\":0.001287001287001287},\"114\":{\"ref\":114,\"tf\":0.004784688995215311}}},\"g\":{\"docs\":{},\"e\":{\"docs\":{},\"r\":{\"docs\":{\"57\":{\"ref\":57,\"tf\":0.0023584905660377358}}}}},\"r\":{\"docs\":{},\"l\":{\"docs\":{},\"i\":{\"docs\":{},\"e\":{\"docs\":{},\"r\":{\"docs\":{\"120\":{\"ref\":120,\"tf\":0.006289308176100629}}}}}}}},\"g\":{\"docs\":{\"95\":{\"ref\":95,\"tf\":0.009345794392523364},\"112\":{\"ref\":112,\"tf\":0.0058823529411764705}},\"o\":{\"docs\":{},\"n\":{\"docs\":{\"18\":{\"ref\":18,\"tf\":0.02}}}},\"g\":{\"docs\":{},\"h\":{\"docs\":{},\"e\":{\"docs\":{},\"a\":{\"docs\":{},\"d\":{\"docs\":{},\".\":{\"docs\":{},\"i\":{\"docs\":{},\"o\":{\"docs\":{\"54\":{\"ref\":54,\"tf\":0.001287001287001287}}}}}}}}}}},\"v\":{\"docs\":{},\"e\":{\"docs\":{},\"n\":{\"docs\":{\"21\":{\"ref\":21,\"tf\":0.00980392156862745},\"65\":{\"ref\":65,\"tf\":0.025},\"104\":{\"ref\":104,\"tf\":0.00423728813559322},\"105\":{\"ref\":105,\"tf\":0.005847953216374269},\"115\":{\"ref\":115,\"tf\":0.003246753246753247},\"134\":{\"ref\":134,\"tf\":0.0023014959723820483}},\"l\":{\"docs\":{},\"i\":{\"docs\":{\"43\":{\"ref\":43,\"tf\":0.006944444444444444},\"44\":{\"ref\":44,\"tf\":2.537037037037037},\"45\":{\"ref\":45,\"tf\":0.0196078431372549},\"72\":{\"ref\":72,\"tf\":0.002331002331002331}}}},\"t\":{\"docs\":{\"60\":{\"ref\":60,\"tf\":0.0022727272727272726},\"71\":{\"ref\":71,\"tf\":0.016},\"88\":{\"ref\":88,\"tf\":0.009708737864077669},\"104\":{\"ref\":104,\"tf\":0.012711864406779662},\"108\":{\"ref\":108,\"tf\":0.08695652173913043},\"112\":{\"ref\":112,\"tf\":0.01764705882352941},\"113\":{\"ref\":113,\"tf\":0.014184397163120567},\"114\":{\"ref\":114,\"tf\":0.001594896331738437},\"120\":{\"ref\":120,\"tf\":0.08176100628930817},\"132\":{\"ref\":132,\"tf\":0.01282051282051282},\"133\":{\"ref\":133,\"tf\":0.0016750418760469012},\"134\":{\"ref\":134,\"tf\":0.012658227848101266}},\"t\":{\"docs\":{},\"y\":{\"docs\":{},\"p\":{\"docs\":{\"108\":{\"ref\":108,\"tf\":0.028985507246376812},\"120\":{\"ref\":120,\"tf\":0.025157232704402517}}}}},\".\":{\"docs\":{},\"p\":{\"docs\":{},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\"v\":{\"docs\":{},\"e\":{\"docs\":{},\"n\":{\"docs\":{},\"t\":{\"docs\":{},\"d\":{\"docs\":{},\"e\":{\"docs\":{},\"f\":{\"docs\":{},\"a\":{\"docs\":{},\"u\":{\"docs\":{},\"l\":{\"docs\":{},\"t\":{\"docs\":{\"114\":{\"ref\":114,\"tf\":0.001594896331738437}}}}}}}}}}}}}}}}},\"u\":{\"docs\":{\"129\":{\"ref\":129,\"tf\":0.0017391304347826088},\"135\":{\"ref\":135,\"tf\":0.0019305019305019305}}}}},\"r\":{\"docs\":{},\"-\":{\"docs\":{},\"g\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"w\":{\"docs\":{\"54\":{\"ref\":54,\"tf\":0.001287001287001287}}}}}}},\"y\":{\"docs\":{},\"t\":{\"docs\":{},\"h\":{\"docs\":{\"54\":{\"ref\":54,\"tf\":0.002574002574002574},\"56\":{\"ref\":56,\"tf\":0.003189792663476874},\"57\":{\"ref\":57,\"tf\":0.0023584905660377358},\"59\":{\"ref\":59,\"tf\":0.002785515320334262},\"63\":{\"ref\":63,\"tf\":0.024390243902439025},\"126\":{\"ref\":126,\"tf\":0.022222222222222223},\"127\":{\"ref\":127,\"tf\":0.006622516556291391}}}},\"o\":{\"docs\":{},\"n\":{\"docs\":{\"57\":{\"ref\":57,\"tf\":0.0023584905660377358}}}}}}},\"a\":{\"docs\":{},\"l\":{\"docs\":{},\"u\":{\"docs\":{\"74\":{\"ref\":74,\"tf\":0.011976047904191617}}}}},\"i\":{\"docs\":{},\"l\":{\"docs\":{\"134\":{\"ref\":134,\"tf\":0.0011507479861910242}}}}},\"m\":{\"docs\":{},\"a\":{\"docs\":{},\"i\":{\"docs\":{},\"l\":{\"docs\":{\"29\":{\"ref\":29,\"tf\":0.05128205128205128},\"127\":{\"ref\":127,\"tf\":0.006622516556291391}}}}},\"o\":{\"docs\":{},\"t\":{\"docs\":{\"50\":{\"ref\":50,\"tf\":0.008928571428571428}}}},\"u\":{\"docs\":{},\"l\":{\"docs\":{\"56\":{\"ref\":56,\"tf\":0.014354066985645933},\"59\":{\"ref\":59,\"tf\":0.002785515320334262},\"60\":{\"ref\":60,\"tf\":0.0022727272727272726},\"127\":{\"ref\":127,\"tf\":0.006622516556291391}}}},\"b\":{\"docs\":{},\"e\":{\"docs\":{},\"d\":{\"docs\":{\"135\":{\"ref\":135,\"tf\":0.0019305019305019305}}}}}},\"t\":{\"docs\":{},\"c\":{\"docs\":{\"43\":{\"ref\":43,\"tf\":0.006944444444444444},\"50\":{\"ref\":50,\"tf\":0.008928571428571428},\"129\":{\"ref\":129,\"tf\":0.0017391304347826088},\"134\":{\"ref\":134,\"tf\":0.0011507479861910242}}}},\"q\":{\"docs\":{},\"u\":{\"docs\":{},\"a\":{\"docs\":{},\"l\":{\"docs\":{\"44\":{\"ref\":44,\"tf\":0.018518518518518517}}}},\"i\":{\"docs\":{},\"v\":{\"docs\":{},\"a\":{\"docs\":{},\"l\":{\"docs\":{\"72\":{\"ref\":72,\"tf\":0.004662004662004662}}}}}}}},\"f\":{\"4\":{\"docs\":{},\"e\":{\"3\":{\"docs\":{},\"a\":{\"docs\":{\"129\":{\"ref\":129,\"tf\":0.0017391304347826088}}}},\"docs\":{}}},\"docs\":{},\"f\":{\"docs\":{},\"e\":{\"docs\":{},\"c\":{\"docs\":{},\"t\":{\"docs\":{\"56\":{\"ref\":56,\"tf\":0.001594896331738437},\"86\":{\"ref\":86,\"tf\":0.06666666666666667},\"123\":{\"ref\":123,\"tf\":0.0035211267605633804},\"130\":{\"ref\":130,\"tf\":2.508771929824561}}}}},\"o\":{\"docs\":{},\"r\":{\"docs\":{},\"t\":{\"docs\":{\"134\":{\"ref\":134,\"tf\":0.0011507479861910242}}}}}}},\"r\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"r\":{\"docs\":{\"56\":{\"ref\":56,\"tf\":0.006379585326953748},\"72\":{\"ref\":72,\"tf\":0.002331002331002331}}}}}},\"c\":{\"docs\":{},\"l\":{\"docs\":{},\"i\":{\"docs\":{},\"p\":{\"docs\":{},\"s\":{\"docs\":{\"57\":{\"ref\":57,\"tf\":0.0023584905660377358},\"60\":{\"ref\":60,\"tf\":0.0022727272727272726}}}}}},\"o\":{\"docs\":{},\"s\":{\"docs\":{},\"y\":{\"docs\":{},\"s\":{\"docs\":{},\"t\":{\"docs\":{},\"e\":{\"docs\":{},\"m\":{\"docs\":{\"135\":{\"ref\":135,\"tf\":0.005791505791505791}}}}}}}}}},\".\":{\"docs\":{},\"p\":{\"docs\":{},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\"v\":{\"docs\":{},\"e\":{\"docs\":{},\"n\":{\"docs\":{},\"t\":{\"docs\":{},\"d\":{\"docs\":{},\"e\":{\"docs\":{},\"f\":{\"docs\":{},\"a\":{\"docs\":{},\"u\":{\"docs\":{},\"l\":{\"docs\":{},\"t\":{\"docs\":{\"114\":{\"ref\":114,\"tf\":0.004784688995215311}}}}}}}}}}}}}}}}}},\"g\":{\"docs\":{\"56\":{\"ref\":56,\"tf\":0.003189792663476874},\"63\":{\"ref\":63,\"tf\":0.024390243902439025},\"127\":{\"ref\":127,\"tf\":0.006622516556291391}},\"o\":{\"docs\":{\"5\":{\"ref\":5,\"tf\":0.02564102564102564},\"18\":{\"ref\":18,\"tf\":0.02},\"20\":{\"ref\":20,\"tf\":0.02040816326530612},\"36\":{\"ref\":36,\"tf\":0.03571428571428571},\"54\":{\"ref\":54,\"tf\":0.007722007722007722},\"56\":{\"ref\":56,\"tf\":0.007974481658692184},\"58\":{\"ref\":58,\"tf\":0.00546448087431694},\"59\":{\"ref\":59,\"tf\":0.008356545961002786},\"60\":{\"ref\":60,\"tf\":0.0022727272727272726},\"81\":{\"ref\":81,\"tf\":0.030303030303030304},\"88\":{\"ref\":88,\"tf\":0.02912621359223301},\"104\":{\"ref\":104,\"tf\":0.00423728813559322},\"111\":{\"ref\":111,\"tf\":0.007518796992481203},\"113\":{\"ref\":113,\"tf\":0.0070921985815602835},\"117\":{\"ref\":117,\"tf\":0.015151515151515152},\"124\":{\"ref\":124,\"tf\":0.010309278350515464},\"129\":{\"ref\":129,\"tf\":0.006956521739130435},\"130\":{\"ref\":130,\"tf\":0.0043859649122807015},\"133\":{\"ref\":133,\"tf\":0.0016750418760469012},\"134\":{\"ref\":134,\"tf\":0.0023014959723820483},\"136\":{\"ref\":136,\"tf\":0.005050505050505051}},\"b\":{\"docs\":{},\"s\":{\"docs\":{},\"t\":{\"docs\":{},\"o\":{\"docs\":{},\"p\":{\"docs\":{},\"p\":{\"docs\":{\"15\":{\"ref\":15,\"tf\":0.022727272727272728}}}}}}}},\"n\":{\"docs\":{},\"n\":{\"docs\":{},\"a\":{\"docs\":{\"18\":{\"ref\":18,\"tf\":0.02}}}},\"e\":{\"docs\":{\"134\":{\"ref\":134,\"tf\":0.0011507479861910242}}}},\"o\":{\"docs\":{},\"g\":{\"docs\":{},\"l\":{\"docs\":{\"21\":{\"ref\":21,\"tf\":0.00980392156862745},\"58\":{\"ref\":58,\"tf\":0.01912568306010929},\"104\":{\"ref\":104,\"tf\":0.00423728813559322}}}},\"d\":{\"docs\":{\"54\":{\"ref\":54,\"tf\":0.001287001287001287},\"61\":{\"ref\":61,\"tf\":0.010869565217391304},\"84\":{\"ref\":84,\"tf\":0.0036363636363636364},\"114\":{\"ref\":114,\"tf\":0.001594896331738437}}}},\"a\":{\"docs\":{},\"l\":{\"docs\":{\"50\":{\"ref\":50,\"tf\":0.008928571428571428},\"61\":{\"ref\":61,\"tf\":0.010869565217391304},\"135\":{\"ref\":135,\"tf\":0.007722007722007722}}}},\"e\":{\"docs\":{\"112\":{\"ref\":112,\"tf\":0.0058823529411764705},\"129\":{\"ref\":129,\"tf\":0.0017391304347826088},\"134\":{\"ref\":134,\"tf\":0.0011507479861910242}}},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"e\":{\"docs\":{},\"n\":{\"docs\":{\"135\":{\"ref\":135,\"tf\":0.0019305019305019305},\"136\":{\"ref\":136,\"tf\":0.005050505050505051}}}}}}},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"u\":{\"docs\":{},\"p\":{\"docs\":{\"13\":{\"ref\":13,\"tf\":0.019230769230769232},\"15\":{\"ref\":15,\"tf\":0.022727272727272728},\"26\":{\"ref\":26,\"tf\":0.021739130434782608}}}}},\"a\":{\"docs\":{},\"m\":{\"docs\":{},\"m\":{\"docs\":{},\"i\":{\"docs\":{\"16\":{\"ref\":16,\"tf\":0.014705882352941176}}}}},\"i\":{\"docs\":{\"43\":{\"ref\":43,\"tf\":0.006944444444444444},\"44\":{\"ref\":44,\"tf\":0.018518518518518517},\"45\":{\"ref\":45,\"tf\":0.00980392156862745},\"46\":{\"ref\":46,\"tf\":0.019230769230769232},\"47\":{\"ref\":47,\"tf\":0.01},\"48\":{\"ref\":48,\"tf\":0.011627906976744186},\"52\":{\"ref\":52,\"tf\":0.010416666666666666}}},\"b\":{\"docs\":{\"54\":{\"ref\":54,\"tf\":0.002574002574002574},\"135\":{\"ref\":135,\"tf\":0.0019305019305019305}}},\"d\":{\"docs\":{},\"e\":{\"docs\":{\"121\":{\"ref\":121,\"tf\":0.011627906976744186}}}},\"n\":{\"docs\":{},\"d\":{\"docs\":{\"133\":{\"ref\":133,\"tf\":0.0016750418760469012}}}}},\"e\":{\"docs\":{},\"e\":{\"docs\":{},\"n\":{\"docs\":{\"19\":{\"ref\":19,\"tf\":0.02},\"38\":{\"ref\":38,\"tf\":0.023255813953488372}}}},\"a\":{\"docs\":{},\"t\":{\"docs\":{\"21\":{\"ref\":21,\"tf\":0.00980392156862745},\"24\":{\"ref\":24,\"tf\":0.041666666666666664},\"54\":{\"ref\":54,\"tf\":0.006435006435006435},\"57\":{\"ref\":57,\"tf\":0.0047169811320754715},\"64\":{\"ref\":64,\"tf\":0.0625},\"70\":{\"ref\":70,\"tf\":0.023809523809523808},\"84\":{\"ref\":84,\"tf\":0.0036363636363636364},\"131\":{\"ref\":131,\"tf\":0.05555555555555555},\"134\":{\"ref\":134,\"tf\":0.009205983889528193},\"135\":{\"ref\":135,\"tf\":0.0019305019305019305},\"136\":{\"ref\":136,\"tf\":0.015151515151515152}},\"e\":{\"docs\":{},\"r\":{\"docs\":{\"78\":{\"ref\":78,\"tf\":0.011235955056179775}}}}}}},\"i\":{\"docs\":{},\"d\":{\"docs\":{\"43\":{\"ref\":43,\"tf\":10.020833333333334},\"44\":{\"ref\":44,\"tf\":2.5},\"45\":{\"ref\":45,\"tf\":2.5294117647058822},\"46\":{\"ref\":46,\"tf\":3.333333333333333},\"47\":{\"ref\":47,\"tf\":2.5},\"48\":{\"ref\":48,\"tf\":5.011627906976744},\"72\":{\"ref\":72,\"tf\":0.004662004662004662}}}}},\"a\":{\"docs\":{},\"m\":{\"docs\":{},\"e\":{\"docs\":{\"16\":{\"ref\":16,\"tf\":0.007352941176470588},\"132\":{\"ref\":132,\"tf\":0.01282051282051282}}}},\"t\":{\"docs\":{},\"e\":{\"docs\":{},\"k\":{\"docs\":{},\"e\":{\"docs\":{},\"e\":{\"docs\":{},\"p\":{\"docs\":{\"18\":{\"ref\":18,\"tf\":0.02}}}}}}}},\"l\":{\"docs\":{},\"l\":{\"docs\":{},\"e\":{\"docs\":{},\"r\":{\"docs\":{},\"i\":{\"docs\":{\"72\":{\"ref\":72,\"tf\":0.002331002331002331}}}}}}}},\"i\":{\"docs\":{},\"v\":{\"docs\":{},\"e\":{\"docs\":{\"30\":{\"ref\":30,\"tf\":0.02702702702702703},\"32\":{\"ref\":32,\"tf\":0.04},\"52\":{\"ref\":52,\"tf\":0.010416666666666666},\"54\":{\"ref\":54,\"tf\":0.001287001287001287},\"57\":{\"ref\":57,\"tf\":0.0023584905660377358},\"63\":{\"ref\":63,\"tf\":0.024390243902439025},\"72\":{\"ref\":72,\"tf\":0.002331002331002331},\"133\":{\"ref\":133,\"tf\":0.0033500837520938024},\"134\":{\"ref\":134,\"tf\":0.0011507479861910242},\"136\":{\"ref\":136,\"tf\":0.005050505050505051}},\"n\":{\"docs\":{\"54\":{\"ref\":54,\"tf\":0.003861003861003861},\"67\":{\"ref\":67,\"tf\":0.027777777777777776},\"84\":{\"ref\":84,\"tf\":0.0036363636363636364},\"89\":{\"ref\":89,\"tf\":0.022727272727272728},\"95\":{\"ref\":95,\"tf\":0.018691588785046728},\"97\":{\"ref\":97,\"tf\":0.019230769230769232},\"101\":{\"ref\":101,\"tf\":0.08695652173913043},\"102\":{\"ref\":102,\"tf\":0.020833333333333332},\"109\":{\"ref\":109,\"tf\":0.008547008547008548},\"110\":{\"ref\":110,\"tf\":0.01020408163265306},\"112\":{\"ref\":112,\"tf\":0.01764705882352941},\"114\":{\"ref\":114,\"tf\":0.006379585326953748},\"115\":{\"ref\":115,\"tf\":0.006493506493506494},\"116\":{\"ref\":116,\"tf\":0.005555555555555556},\"117\":{\"ref\":117,\"tf\":0.007575757575757576},\"118\":{\"ref\":118,\"tf\":0.01904761904761905},\"119\":{\"ref\":119,\"tf\":0.011811023622047244},\"121\":{\"ref\":121,\"tf\":0.005813953488372093},\"123\":{\"ref\":123,\"tf\":0.01056338028169014}}}}},\"g\":{\"docs\":{},\"a\":{\"docs\":{},\"w\":{\"docs\":{},\"a\":{\"docs\":{},\"t\":{\"docs\":{},\"t\":{\"docs\":{\"35\":{\"ref\":35,\"tf\":0.01818181818181818}}}}}}}},\"t\":{\"docs\":{\"56\":{\"ref\":56,\"tf\":0.003189792663476874}},\"h\":{\"docs\":{},\"u\":{\"docs\":{},\"b\":{\"docs\":{\"62\":{\"ref\":62,\"tf\":0.08333333333333333},\"128\":{\"ref\":128,\"tf\":0.017857142857142856}},\"]\":{\"docs\":{},\"(\":{\"docs\":{},\"h\":{\"docs\":{},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"p\":{\"docs\":{},\"s\":{\"docs\":{},\":\":{\"docs\":{},\"/\":{\"docs\":{},\"/\":{\"docs\":{},\"g\":{\"docs\":{},\"i\":{\"docs\":{},\"t\":{\"docs\":{},\"h\":{\"docs\":{},\"u\":{\"docs\":{},\"b\":{\"docs\":{},\".\":{\"docs\":{},\"c\":{\"docs\":{},\"o\":{\"docs\":{},\"m\":{\"docs\":{},\"/\":{\"docs\":{},\"d\":{\"docs\":{},\"r\":{\"docs\":{},\"i\":{\"docs\":{},\"f\":{\"docs\":{},\"t\":{\"docs\":{},\"y\":{\"docs\":{},\"c\":{\"docs\":{},\"o\":{\"docs\":{},\"/\":{\"docs\":{},\"i\":{\"docs\":{},\"o\":{\"docs\":{},\"n\":{\"docs\":{\"56\":{\"ref\":56,\"tf\":0.001594896331738437}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},\"s\":{\"docs\":{},\"t\":{\"docs\":{\"133\":{\"ref\":133,\"tf\":0.0016750418760469012}}}}},\"e\":{\"docs\":{},\"o\":{\"docs\":{},\"n\":{\"docs\":{},\"o\":{\"docs\":{},\"s\":{\"docs\":{},\"i\":{\"docs\":{\"38\":{\"ref\":38,\"tf\":0.011627906976744186}}}}}},\"l\":{\"docs\":{},\"o\":{\"docs\":{},\"c\":{\"docs\":{\"135\":{\"ref\":135,\"tf\":0.0019305019305019305}}}}}},\"n\":{\"docs\":{},\"e\":{\"docs\":{},\"r\":{\"docs\":{\"50\":{\"ref\":50,\"tf\":0.017857142857142856},\"58\":{\"ref\":58,\"tf\":0.01366120218579235},\"129\":{\"ref\":129,\"tf\":0.0034782608695652175},\"134\":{\"ref\":134,\"tf\":0.0023014959723820483},\"135\":{\"ref\":135,\"tf\":0.005791505791505791}}}},\"k\":{\"docs\":{},\"e\":{\"docs\":{},\"i\":{\"docs\":{\"58\":{\"ref\":58,\"tf\":0.00273224043715847}}}}}},\"t\":{\"docs\":{\"55\":{\"ref\":55,\"tf\":0.02040816326530612},\"56\":{\"ref\":56,\"tf\":0.001594896331738437},\"57\":{\"ref\":57,\"tf\":0.0023584905660377358},\"60\":{\"ref\":60,\"tf\":0.0022727272727272726},\"74\":{\"ref\":74,\"tf\":0.005988023952095809},\"78\":{\"ref\":78,\"tf\":0.011235955056179775},\"116\":{\"ref\":116,\"tf\":0.005555555555555556},\"123\":{\"ref\":123,\"tf\":0.0035211267605633804},\"127\":{\"ref\":127,\"tf\":3.333333333333333},\"135\":{\"ref\":135,\"tf\":0.0019305019305019305}},\"l\":{\"docs\":{},\"a\":{\"docs\":{},\"s\":{\"docs\":{},\"t\":{\"docs\":{},\"a\":{\"docs\":{},\"c\":{\"docs\":{},\"t\":{\"docs\":{},\"i\":{\"docs\":{},\"v\":{\"docs\":{},\"e\":{\"docs\":{},\"i\":{\"docs\":{},\"n\":{\"docs\":{},\"d\":{\"docs\":{},\"e\":{\"docs\":{},\"x\":{\"docs\":{\"54\":{\"ref\":54,\"tf\":0.001287001287001287}}}}}}}}}}}}}}}}},\"b\":{\"docs\":{},\"y\":{\"docs\":{},\"h\":{\"docs\":{},\"a\":{\"docs\":{},\"n\":{\"docs\":{},\"d\":{\"docs\":{},\"l\":{\"docs\":{\"109\":{\"ref\":109,\"tf\":0.008547008547008548},\"115\":{\"ref\":115,\"tf\":0.003246753246753247},\"116\":{\"ref\":116,\"tf\":0.005555555555555556},\"117\":{\"ref\":117,\"tf\":0.007575757575757576},\"118\":{\"ref\":118,\"tf\":0.009523809523809525}},\"e\":{\"docs\":{},\"(\":{\"docs\":{},\"h\":{\"docs\":{},\"a\":{\"docs\":{},\"n\":{\"docs\":{},\"d\":{\"docs\":{},\"l\":{\"docs\":{\"109\":{\"ref\":109,\"tf\":0.008547008547008548},\"112\":{\"ref\":112,\"tf\":0.0058823529411764705},\"115\":{\"ref\":115,\"tf\":0.003246753246753247},\"116\":{\"ref\":116,\"tf\":0.005555555555555556},\"117\":{\"ref\":117,\"tf\":0.007575757575757576},\"118\":{\"ref\":118,\"tf\":0.009523809523809525}}}}}}}}}}}}}}}},\"p\":{\"docs\":{},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\"v\":{\"docs\":{},\"i\":{\"docs\":{},\"o\":{\"docs\":{},\"u\":{\"docs\":{},\"s\":{\"docs\":{},\"t\":{\"docs\":{},\"i\":{\"docs\":{},\"t\":{\"docs\":{},\"l\":{\"docs\":{\"112\":{\"ref\":112,\"tf\":0.0058823529411764705}}}}}}}}}}}}},\"a\":{\"docs\":{},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\"n\":{\"docs\":{},\"t\":{\"docs\":{},\"w\":{\"docs\":{},\"i\":{\"docs\":{},\"t\":{\"docs\":{},\"h\":{\"docs\":{},\"c\":{\"docs\":{},\"l\":{\"docs\":{},\"a\":{\"docs\":{},\"s\":{\"docs\":{},\"s\":{\"docs\":{},\"(\":{\"docs\":{},\"e\":{\"docs\":{},\"l\":{\"docs\":{\"119\":{\"ref\":119,\"tf\":0.007874015748031496}}}}}}}}}}}}}}}}}}},\"o\":{\"docs\":{},\"s\":{\"docs\":{},\"i\":{\"docs\":{},\"t\":{\"docs\":{},\"i\":{\"docs\":{},\"o\":{\"docs\":{},\"n\":{\"docs\":{},\"i\":{\"docs\":{},\"n\":{\"docs\":{},\"p\":{\"docs\":{},\"a\":{\"docs\":{},\"r\":{\"docs\":{},\"e\":{\"docs\":{},\"n\":{\"docs\":{},\"t\":{\"docs\":{},\"(\":{\"docs\":{},\"e\":{\"docs\":{},\"l\":{\"docs\":{\"119\":{\"ref\":119,\"tf\":0.003937007874015748}}}}}}}}}}}}}}}}}}}}},\"t\":{\"docs\":{},\"i\":{\"docs\":{},\"t\":{\"docs\":{},\"l\":{\"docs\":{\"112\":{\"ref\":112,\"tf\":0.0058823529411764705}}}},\"n\":{\"docs\":{},\"g\":{\"docs\":{},\"-\":{\"docs\":{},\"s\":{\"docs\":{},\"t\":{\"docs\":{},\"a\":{\"docs\":{},\"r\":{\"docs\":{},\"t\":{\"docs\":{\"127\":{\"ref\":127,\"tf\":1}}}}}}}}}}},\"e\":{\"docs\":{},\"x\":{\"docs\":{},\"t\":{\"docs\":{},\"b\":{\"docs\":{},\"o\":{\"docs\":{},\"u\":{\"docs\":{},\"n\":{\"docs\":{},\"d\":{\"docs\":{},\"s\":{\"docs\":{},\"(\":{\"docs\":{},\"t\":{\"docs\":{},\"e\":{\"docs\":{},\"x\":{\"docs\":{},\"t\":{\"docs\":{},\"n\":{\"docs\":{},\"o\":{\"docs\":{},\"d\":{\"docs\":{\"119\":{\"ref\":119,\"tf\":0.003937007874015748}}}}}}}}}}}}}}}}}}}},\"s\":{\"docs\":{},\"c\":{\"docs\":{},\"r\":{\"docs\":{},\"o\":{\"docs\":{},\"l\":{\"docs\":{},\"l\":{\"docs\":{},\"p\":{\"docs\":{},\"o\":{\"docs\":{},\"s\":{\"docs\":{},\"i\":{\"docs\":{},\"t\":{\"docs\":{\"115\":{\"ref\":115,\"tf\":0.003246753246753247}}}}}}},\"v\":{\"docs\":{},\"i\":{\"docs\":{},\"e\":{\"docs\":{},\"w\":{\"docs\":{\"115\":{\"ref\":115,\"tf\":0.003246753246753247}}}}}}}}}}}},\"o\":{\"docs\":{},\"p\":{\"docs\":{},\"e\":{\"docs\":{},\"n\":{\"docs\":{},\"r\":{\"docs\":{},\"a\":{\"docs\":{},\"t\":{\"docs\":{},\"i\":{\"docs\":{},\"o\":{\"docs\":{\"116\":{\"ref\":116,\"tf\":0.005555555555555556}}}}}}}}}}},\"c\":{\"docs\":{},\"h\":{\"docs\":{},\"i\":{\"docs\":{},\"l\":{\"docs\":{},\"d\":{\"docs\":{},\"i\":{\"docs\":{},\"n\":{\"docs\":{},\"d\":{\"docs\":{},\"e\":{\"docs\":{},\"x\":{\"docs\":{},\"(\":{\"docs\":{},\"e\":{\"docs\":{},\"l\":{\"docs\":{\"119\":{\"ref\":119,\"tf\":0.003937007874015748}}}}}}}}}}}}}}}},\"s\":{\"docs\":{},\"t\":{\"docs\":{},\"u\":{\"docs\":{},\"r\":{\"docs\":{\"61\":{\"ref\":61,\"tf\":0.010869565217391304},\"108\":{\"ref\":108,\"tf\":0.08695652173913043},\"120\":{\"ref\":120,\"tf\":0.031446540880503145},\"124\":{\"ref\":124,\"tf\":0.010309278350515464},\"134\":{\"ref\":134,\"tf\":0.0011507479861910242}}}}}},\"m\":{\"docs\":{\"129\":{\"ref\":129,\"tf\":0.0017391304347826088}}}},\"u\":{\"docs\":{},\"i\":{\"docs\":{\"84\":{\"ref\":84,\"tf\":0.0036363636363636364}},\"d\":{\"docs\":{\"54\":{\"ref\":54,\"tf\":0.001287001287001287},\"56\":{\"ref\":56,\"tf\":0.009569377990430622},\"57\":{\"ref\":57,\"tf\":0.0023584905660377358},\"58\":{\"ref\":58,\"tf\":0.00273224043715847},\"69\":{\"ref\":69,\"tf\":0.05},\"127\":{\"ref\":127,\"tf\":0.006622516556291391}},\"e\":{\"docs\":{},\"]\":{\"docs\":{},\"(\":{\"docs\":{},\"i\":{\"docs\":{},\"n\":{\"docs\":{},\"s\":{\"docs\":{},\"t\":{\"docs\":{},\"a\":{\"docs\":{},\"l\":{\"docs\":{},\"l\":{\"docs\":{},\"a\":{\"docs\":{},\"t\":{\"docs\":{},\"i\":{\"docs\":{},\"o\":{\"docs\":{},\"n\":{\"docs\":{},\".\":{\"docs\":{},\"h\":{\"docs\":{},\"t\":{\"docs\":{},\"m\":{\"docs\":{},\"l\":{\"docs\":{\"58\":{\"ref\":58,\"tf\":0.00273224043715847}}}}}}}}}}}}}}}}}}},\"h\":{\"docs\":{},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"p\":{\"docs\":{},\":\":{\"docs\":{},\"/\":{\"docs\":{},\"/\":{\"docs\":{},\"c\":{\"docs\":{},\"s\":{\"docs\":{},\"s\":{\"docs\":{},\"-\":{\"docs\":{},\"t\":{\"docs\":{},\"r\":{\"docs\":{},\"i\":{\"docs\":{},\"c\":{\"docs\":{},\"k\":{\"docs\":{},\"s\":{\"docs\":{},\".\":{\"docs\":{},\"c\":{\"docs\":{},\"o\":{\"docs\":{},\"m\":{\"docs\":{},\"/\":{\"docs\":{},\"s\":{\"docs\":{},\"a\":{\"docs\":{},\"s\":{\"docs\":{},\"s\":{\"docs\":{},\"-\":{\"docs\":{},\"s\":{\"docs\":{},\"t\":{\"docs\":{},\"y\":{\"docs\":{},\"l\":{\"docs\":{},\"e\":{\"docs\":{},\"-\":{\"docs\":{},\"g\":{\"docs\":{},\"u\":{\"docs\":{},\"i\":{\"docs\":{},\"d\":{\"docs\":{\"129\":{\"ref\":129,\"tf\":0.0017391304347826088}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},\"l\":{\"docs\":{},\"p\":{\"docs\":{\"56\":{\"ref\":56,\"tf\":0.001594896331738437}},\"]\":{\"docs\":{},\"(\":{\"docs\":{},\"h\":{\"docs\":{},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"p\":{\"docs\":{},\":\":{\"docs\":{},\"/\":{\"docs\":{},\"/\":{\"docs\":{},\"g\":{\"docs\":{},\"u\":{\"docs\":{},\"l\":{\"docs\":{},\"p\":{\"docs\":{},\"j\":{\"docs\":{},\"s\":{\"docs\":{},\".\":{\"docs\":{},\"c\":{\"docs\":{},\"o\":{\"docs\":{},\"m\":{\"docs\":{\"56\":{\"ref\":56,\"tf\":0.001594896331738437}}}}}}}}}}}}}}}}}}}}}}},\"t\":{\"docs\":{\"60\":{\"ref\":60,\"tf\":0.0022727272727272726}}}},\"h\":{\"docs\":{},\"o\":{\"docs\":{},\"s\":{\"docs\":{},\"t\":{\"docs\":{},\"c\":{\"docs\":{},\"l\":{\"docs\":{},\"i\":{\"docs\":{},\"c\":{\"docs\":{},\"k\":{\"docs\":{\"104\":{\"ref\":104,\"tf\":0.00423728813559322},\"134\":{\"ref\":134,\"tf\":0.005753739930955121}}}}}}}}}}},\"l\":{\"docs\":{},\"o\":{\"docs\":{},\"b\":{\"docs\":{},\"a\":{\"docs\":{},\"l\":{\"docs\":{\"134\":{\"ref\":134,\"tf\":0.0011507479861910242}}}}}}},\"p\":{\"docs\":{\"135\":{\"ref\":135,\"tf\":0.0019305019305019305}}}},\"z\":{\"docs\":{},\"e\":{\"docs\":{},\"l\":{\"docs\":{},\"d\":{\"docs\":{},\"a\":{\"docs\":{\"14\":{\"ref\":14,\"tf\":0.011494252873563218}}}}},\"r\":{\"docs\":{},\"o\":{\"docs\":{\"52\":{\"ref\":52,\"tf\":0.020833333333333332}}}}},\"i\":{\"docs\":{},\"p\":{\"docs\":{\"56\":{\"ref\":56,\"tf\":0.003189792663476874},\"58\":{\"ref\":58,\"tf\":0.00273224043715847}},\"a\":{\"docs\":{},\"l\":{\"docs\":{},\"i\":{\"docs\":{},\"g\":{\"docs\":{},\"n\":{\"docs\":{\"58\":{\"ref\":58,\"tf\":0.00273224043715847}}}}}}}}},\"o\":{\"docs\":{},\"o\":{\"docs\":{},\"m\":{\"docs\":{\"90\":{\"ref\":90,\"tf\":0.03125},\"104\":{\"ref\":104,\"tf\":0.00423728813559322},\"134\":{\"ref\":134,\"tf\":0.0034522439585730723}}}}},\"-\":{\"docs\":{},\"i\":{\"docs\":{},\"n\":{\"docs\":{},\"d\":{\"docs\":{},\"e\":{\"docs\":{},\"x\":{\"docs\":{\"130\":{\"ref\":130,\"tf\":0.0043859649122807015}}}}}}}}},\"j\":{\"docs\":{},\"o\":{\"docs\":{},\"l\":{\"docs\":{},\"l\":{\"docs\":{},\"i\":{\"docs\":{\"15\":{\"ref\":15,\"tf\":0.022727272727272728}}}}},\"h\":{\"docs\":{},\"n\":{\"docs\":{\"54\":{\"ref\":54,\"tf\":0.001287001287001287}}}},\"i\":{\"docs\":{},\"n\":{\"docs\":{\"127\":{\"ref\":127,\"tf\":0.006622516556291391}}}},\"b\":{\"docs\":{\"134\":{\"ref\":134,\"tf\":0.0011507479861910242}}}},\"t\":{\"docs\":{\"16\":{\"ref\":16,\"tf\":0.007352941176470588}}},\"a\":{\"docs\":{},\"v\":{\"docs\":{},\"a\":{\"docs\":{\"34\":{\"ref\":34,\"tf\":0.016666666666666666},\"36\":{\"ref\":36,\"tf\":0.017857142857142856},\"56\":{\"ref\":56,\"tf\":0.006379585326953748}},\"s\":{\"docs\":{},\"c\":{\"docs\":{},\"r\":{\"docs\":{},\"i\":{\"docs\":{},\"p\":{\"docs\":{},\"t\":{\"docs\":{\"34\":{\"ref\":34,\"tf\":0.016666666666666666},\"54\":{\"ref\":54,\"tf\":0.003861003861003861},\"57\":{\"ref\":57,\"tf\":0.0047169811320754715},\"59\":{\"ref\":59,\"tf\":0.002785515320334262},\"61\":{\"ref\":61,\"tf\":0.021739130434782608},\"64\":{\"ref\":64,\"tf\":0.0625},\"104\":{\"ref\":104,\"tf\":0.00423728813559322},\"114\":{\"ref\":114,\"tf\":0.001594896331738437},\"126\":{\"ref\":126,\"tf\":0.022222222222222223},\"127\":{\"ref\":127,\"tf\":0.006622516556291391},\"133\":{\"ref\":133,\"tf\":0.0033500837520938024},\"134\":{\"ref\":134,\"tf\":0.0011507479861910242},\"135\":{\"ref\":135,\"tf\":0.007722007722007722},\"136\":{\"ref\":136,\"tf\":0.015151515151515152}}}}}}}},\"_\":{\"docs\":{},\"h\":{\"docs\":{},\"o\":{\"docs\":{},\"m\":{\"docs\":{\"56\":{\"ref\":56,\"tf\":0.004784688995215311}},\"e\":{\"docs\":{},\"=\":{\"docs\":{},\"$\":{\"docs\":{},\"(\":{\"docs\":{},\"/\":{\"docs\":{},\"u\":{\"docs\":{},\"s\":{\"docs\":{},\"r\":{\"docs\":{},\"/\":{\"docs\":{},\"l\":{\"docs\":{},\"i\":{\"docs\":{},\"b\":{\"docs\":{},\"e\":{\"docs\":{},\"x\":{\"docs\":{},\"e\":{\"docs\":{},\"c\":{\"docs\":{},\"/\":{\"docs\":{},\"j\":{\"docs\":{},\"a\":{\"docs\":{},\"v\":{\"docs\":{},\"a\":{\"docs\":{},\"_\":{\"docs\":{},\"h\":{\"docs\":{},\"o\":{\"docs\":{},\"m\":{\"docs\":{\"56\":{\"ref\":56,\"tf\":0.001594896331738437}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},\"s\":{\"docs\":{},\"c\":{\"docs\":{},\"r\":{\"docs\":{},\"i\":{\"docs\":{},\"p\":{\"docs\":{},\"t\":{\"docs\":{\"54\":{\"ref\":54,\"tf\":0.001287001287001287}}}}}}}}},\"r\":{\"docs\":{},\"s\":{\"docs\":{},\"i\":{\"docs\":{},\"g\":{\"docs\":{},\"n\":{\"docs\":{\"58\":{\"ref\":58,\"tf\":0.00546448087431694}}}}}}}},\"u\":{\"docs\":{},\"m\":{\"docs\":{},\"p\":{\"docs\":{\"54\":{\"ref\":54,\"tf\":0.001287001287001287},\"59\":{\"ref\":59,\"tf\":0.002785515320334262},\"126\":{\"ref\":126,\"tf\":0.011111111111111112}}}}},\"d\":{\"docs\":{},\"k\":{\"docs\":{\"56\":{\"ref\":56,\"tf\":0.006379585326953748},\"58\":{\"ref\":58,\"tf\":0.00546448087431694}},\"'\":{\"docs\":{\"56\":{\"ref\":56,\"tf\":0.001594896331738437}}},\"]\":{\"docs\":{},\"(\":{\"docs\":{},\"h\":{\"docs\":{},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"p\":{\"docs\":{},\":\":{\"docs\":{},\"/\":{\"docs\":{},\"/\":{\"docs\":{},\"w\":{\"docs\":{},\"w\":{\"docs\":{},\"w\":{\"docs\":{},\".\":{\"docs\":{},\"o\":{\"docs\":{},\"r\":{\"docs\":{},\"a\":{\"docs\":{},\"c\":{\"docs\":{},\"l\":{\"docs\":{},\"e\":{\"docs\":{},\".\":{\"docs\":{},\"c\":{\"docs\":{},\"o\":{\"docs\":{},\"m\":{\"docs\":{},\"/\":{\"docs\":{},\"t\":{\"docs\":{},\"e\":{\"docs\":{},\"c\":{\"docs\":{},\"h\":{\"docs\":{},\"n\":{\"docs\":{},\"e\":{\"docs\":{},\"t\":{\"docs\":{},\"w\":{\"docs\":{},\"o\":{\"docs\":{},\"r\":{\"docs\":{},\"k\":{\"docs\":{},\"/\":{\"docs\":{},\"j\":{\"docs\":{},\"a\":{\"docs\":{},\"v\":{\"docs\":{},\"a\":{\"docs\":{},\"/\":{\"docs\":{},\"j\":{\"docs\":{},\"a\":{\"docs\":{},\"v\":{\"docs\":{},\"a\":{\"docs\":{},\"s\":{\"docs\":{},\"e\":{\"docs\":{},\"/\":{\"docs\":{},\"d\":{\"docs\":{},\"o\":{\"docs\":{},\"w\":{\"docs\":{},\"n\":{\"docs\":{},\"l\":{\"docs\":{},\"o\":{\"docs\":{},\"a\":{\"docs\":{},\"d\":{\"docs\":{},\"s\":{\"docs\":{},\"/\":{\"docs\":{},\"j\":{\"docs\":{},\"d\":{\"docs\":{},\"k\":{\"7\":{\"docs\":{},\"-\":{\"docs\":{},\"d\":{\"docs\":{},\"o\":{\"docs\":{},\"w\":{\"docs\":{},\"n\":{\"docs\":{},\"l\":{\"docs\":{},\"o\":{\"docs\":{},\"a\":{\"docs\":{},\"d\":{\"docs\":{},\"s\":{\"docs\":{},\"-\":{\"1\":{\"8\":{\"8\":{\"0\":{\"2\":{\"6\":{\"0\":{\"docs\":{},\".\":{\"docs\":{},\"h\":{\"docs\":{},\"t\":{\"docs\":{},\"m\":{\"docs\":{},\"l\":{\"docs\":{\"56\":{\"ref\":56,\"tf\":0.001594896331738437}}}}}}}},\"docs\":{}},\"docs\":{}},\"docs\":{}},\"docs\":{}},\"docs\":{}},\"docs\":{}},\"docs\":{}}}}}}}}}}}}},\"docs\":{}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},\"r\":{\"docs\":{},\"e\":{\"docs\":{\"56\":{\"ref\":56,\"tf\":0.003189792663476874}}}},\"s\":{\"docs\":{\"59\":{\"ref\":59,\"tf\":0.002785515320334262},\"64\":{\"ref\":64,\"tf\":0.0625},\"66\":{\"ref\":66,\"tf\":0.043478260869565216},\"72\":{\"ref\":72,\"tf\":0.002331002331002331},\"78\":{\"ref\":78,\"tf\":0.011235955056179775},\"81\":{\"ref\":81,\"tf\":0.030303030303030304},\"84\":{\"ref\":84,\"tf\":0.0036363636363636364},\"88\":{\"ref\":88,\"tf\":0.009708737864077669},\"89\":{\"ref\":89,\"tf\":0.022727272727272728},\"93\":{\"ref\":93,\"tf\":0.014084507042253521},\"105\":{\"ref\":105,\"tf\":0.005847953216374269},\"106\":{\"ref\":106,\"tf\":0.013333333333333334},\"107\":{\"ref\":107,\"tf\":0.012658227848101266},\"109\":{\"ref\":109,\"tf\":0.008547008547008548},\"110\":{\"ref\":110,\"tf\":0.01020408163265306},\"111\":{\"ref\":111,\"tf\":0.007518796992481203},\"112\":{\"ref\":112,\"tf\":0.0058823529411764705},\"114\":{\"ref\":114,\"tf\":0.001594896331738437},\"115\":{\"ref\":115,\"tf\":0.00974025974025974},\"116\":{\"ref\":116,\"tf\":0.005555555555555556},\"117\":{\"ref\":117,\"tf\":0.007575757575757576},\"118\":{\"ref\":118,\"tf\":0.009523809523809525},\"129\":{\"ref\":129,\"tf\":0.006956521739130435}}},\"q\":{\"docs\":{},\"u\":{\"docs\":{},\"e\":{\"docs\":{},\"r\":{\"docs\":{},\"i\":{\"docs\":{\"68\":{\"ref\":68,\"tf\":0.027777777777777776}}}}}}},\"e\":{\"docs\":{},\"t\":{\"docs\":{},\"s\":{\"docs\":{},\"t\":{\"docs\":{},\"r\":{\"docs\":{},\"a\":{\"docs\":{},\"p\":{\"docs\":{\"70\":{\"ref\":70,\"tf\":0.023809523809523808}}}}}}}},\"r\":{\"docs\":{},\"k\":{\"docs\":{},\"i\":{\"docs\":{\"72\":{\"ref\":72,\"tf\":0.002331002331002331}}}}}}},\"k\":{\"docs\":{},\"a\":{\"docs\":{},\"t\":{\"docs\":{\"15\":{\"ref\":15,\"tf\":0.022727272727272728}}},\"m\":{\"docs\":{},\"i\":{\"docs\":{},\"n\":{\"docs\":{},\"o\":{\"docs\":{\"38\":{\"ref\":38,\"tf\":0.011627906976744186}}}}}}},\"i\":{\"docs\":{},\"t\":{\"docs\":{\"15\":{\"ref\":15,\"tf\":0.022727272727272728}},\"t\":{\"docs\":{},\"e\":{\"docs\":{},\"n\":{\"docs\":{\"85\":{\"ref\":85,\"tf\":0.09090909090909091}}}}}},\"n\":{\"docs\":{},\"g\":{\"docs\":{},\"d\":{\"docs\":{},\"o\":{\"docs\":{},\"m\":{\"docs\":{\"20\":{\"ref\":20,\"tf\":0.02040816326530612}}}}}},\"d\":{\"docs\":{\"57\":{\"ref\":57,\"tf\":0.0047169811320754715},\"133\":{\"ref\":133,\"tf\":0.0016750418760469012},\"135\":{\"ref\":135,\"tf\":0.0019305019305019305}}}}},\"e\":{\"docs\":{},\"y\":{\"docs\":{},\"b\":{\"docs\":{},\"o\":{\"docs\":{},\"a\":{\"docs\":{},\"r\":{\"docs\":{},\"d\":{\"docs\":{\"26\":{\"ref\":26,\"tf\":0.021739130434782608},\"99\":{\"ref\":99,\"tf\":0.06382978723404255},\"103\":{\"ref\":103,\"tf\":10.051948051948052},\"104\":{\"ref\":104,\"tf\":0.00423728813559322},\"105\":{\"ref\":105,\"tf\":0.005847953216374269}},\"-\":{\"docs\":{},\"a\":{\"docs\":{},\"t\":{\"docs\":{},\"t\":{\"docs\":{},\"a\":{\"docs\":{},\"c\":{\"docs\":{},\"h\":{\"docs\":{\"99\":{\"ref\":99,\"tf\":10.042553191489361}}}}}}}}}}}}}},\"a\":{\"docs\":{},\"l\":{\"docs\":{},\"g\":{\"docs\":{\"58\":{\"ref\":58,\"tf\":0.00273224043715847}}}}},\"s\":{\"docs\":{},\"i\":{\"docs\":{},\"z\":{\"docs\":{\"58\":{\"ref\":58,\"tf\":0.00273224043715847}}}},\"t\":{\"docs\":{},\"o\":{\"docs\":{},\"r\":{\"docs\":{\"58\":{\"ref\":58,\"tf\":0.00819672131147541}}}}}},\"t\":{\"docs\":{},\"o\":{\"docs\":{},\"o\":{\"docs\":{},\"l\":{\"docs\":{\"58\":{\"ref\":58,\"tf\":0.00546448087431694}}}}}}},\"e\":{\"docs\":{},\"p\":{\"docs\":{\"54\":{\"ref\":54,\"tf\":0.001287001287001287},\"72\":{\"ref\":72,\"tf\":0.006993006993006993},\"84\":{\"ref\":84,\"tf\":0.0036363636363636364},\"104\":{\"ref\":104,\"tf\":0.00423728813559322},\"105\":{\"ref\":105,\"tf\":0.011695906432748537},\"110\":{\"ref\":110,\"tf\":0.01020408163265306},\"114\":{\"ref\":114,\"tf\":0.001594896331738437},\"123\":{\"ref\":123,\"tf\":0.0035211267605633804}}}},\"i\":{\"docs\":{\"58\":{\"ref\":58,\"tf\":0.00546448087431694},\"72\":{\"ref\":72,\"tf\":0.004662004662004662}}},\"p\":{\"docs\":{},\"t\":{\"docs\":{\"134\":{\"ref\":134,\"tf\":0.0011507479861910242}}}}},\"n\":{\"docs\":{},\"o\":{\"docs\":{},\"w\":{\"docs\":{\"54\":{\"ref\":54,\"tf\":0.005148005148005148},\"57\":{\"ref\":57,\"tf\":0.0023584905660377358},\"60\":{\"ref\":60,\"tf\":0.0022727272727272726},\"84\":{\"ref\":84,\"tf\":0.0036363636363636364},\"104\":{\"ref\":104,\"tf\":0.00423728813559322},\"123\":{\"ref\":123,\"tf\":0.0035211267605633804},\"126\":{\"ref\":126,\"tf\":0.011111111111111112},\"127\":{\"ref\":127,\"tf\":0.006622516556291391},\"134\":{\"ref\":134,\"tf\":0.004602991944764097},\"135\":{\"ref\":135,\"tf\":0.0019305019305019305}},\"n\":{\"docs\":{\"96\":{\"ref\":96,\"tf\":0.017857142857142856},\"134\":{\"ref\":134,\"tf\":0.0011507479861910242}}}}},\"e\":{\"docs\":{},\"w\":{\"docs\":{\"136\":{\"ref\":136,\"tf\":0.005050505050505051}}}}}},\"x\":{\"1\":{\"docs\":{\"119\":{\"ref\":119,\"tf\":0.007874015748031496}},\",\":{\"docs\":{},\"y\":{\"1\":{\"docs\":{},\",\":{\"docs\":{},\"x\":{\"2\":{\"docs\":{},\",\":{\"docs\":{},\"y\":{\"2\":{\"docs\":{\"119\":{\"ref\":119,\"tf\":0.003937007874015748}}},\"docs\":{}}}},\"docs\":{}}}},\"docs\":{}}}},\"2\":{\"docs\":{\"119\":{\"ref\":119,\"tf\":0.007874015748031496}}},\"docs\":{\"56\":{\"ref\":56,\"tf\":0.006379585326953748},\"60\":{\"ref\":60,\"tf\":0.00909090909090909},\"119\":{\"ref\":119,\"tf\":0.003937007874015748},\"127\":{\"ref\":127,\"tf\":0.006622516556291391},\"134\":{\"ref\":134,\"tf\":0.0023014959723820483}},\"-\":{\"docs\":{},\"w\":{\"docs\":{},\"i\":{\"docs\":{},\"n\":{\"docs\":{},\"g\":{\"docs\":{\"38\":{\"ref\":38,\"tf\":0.011627906976744186}}}}}},\"o\":{\"docs\":{},\"f\":{\"docs\":{},\"f\":{\"docs\":{},\"s\":{\"docs\":{},\"e\":{\"docs\":{},\"t\":{\"docs\":{\"115\":{\"ref\":115,\"tf\":0.003246753246753247}}}}}}}},\"v\":{\"docs\":{},\"a\":{\"docs\":{},\"l\":{\"docs\":{},\"u\":{\"docs\":{\"115\":{\"ref\":115,\"tf\":0.003246753246753247}}}}}}},\"m\":{\"docs\":{},\"l\":{\"docs\":{\"56\":{\"ref\":56,\"tf\":0.001594896331738437},\"58\":{\"ref\":58,\"tf\":0.00546448087431694},\"103\":{\"ref\":103,\"tf\":0.006493506493506494}}}},\"c\":{\"docs\":{},\"o\":{\"docs\":{},\"d\":{\"docs\":{},\"e\":{\"docs\":{\"60\":{\"ref\":60,\"tf\":0.00909090909090909}}}}}},\",\":{\"docs\":{},\"y\":{\"docs\":{\"119\":{\"ref\":119,\"tf\":0.003937007874015748}}}}},\"_\":{\"docs\":{},\"v\":{\"docs\":{},\"a\":{\"docs\":{},\"r\":{\"docs\":{},\"i\":{\"docs\":{},\"a\":{\"docs\":{},\"b\":{\"docs\":{},\"l\":{\"docs\":{},\"e\":{\"docs\":{},\"s\":{\"docs\":{},\".\":{\"docs\":{},\"s\":{\"docs\":{},\"c\":{\"docs\":{},\"s\":{\"docs\":{},\"s\":{\"docs\":{\"50\":{\"ref\":50,\"tf\":0.008928571428571428},\"129\":{\"ref\":129,\"tf\":0.0052173913043478265}}}}}}}}}}}}}}}},\"_\":{\"docs\":{},\"n\":{\"docs\":{},\"o\":{\"docs\":{},\"t\":{\"docs\":{},\"e\":{\"docs\":{},\"_\":{\"docs\":{},\"_\":{\"docs\":{\"58\":{\"ref\":58,\"tf\":0.00273224043715847}}}}}}}}}}},\"length\":8977},\"corpusTokens\":[\"0\",\"0.5\",\"000\",\"05\",\"0px\",\"1\",\"1,000\",\"1,2,3\",\"1.21\",\"10\",\"100\",\"1000\",\"10000\",\"10px\",\"12\",\"1234\",\"15px\",\"17\",\"170px\",\"192.168.1.123:8000\",\"1955\",\"1line\",\"2\",\"2-1b\",\"2.3\",\"20\",\"2009\",\"2011\",\"2048\",\"20px\",\"23\",\"25\",\"275\",\"2line\",\"3\",\"3-wide\",\"3.4.0\",\"3.x\",\"300\",\"3000\",\"300m\",\"30px\",\"32\",\"32-bit\",\"33\",\"33.3333\",\"39;$index&#39\",\"39;&#39\",\"39;back&#39\",\"39;button-default&#39\",\"39;button-positive&#39\",\"39;cancel&#39\",\"39;center&#39\",\"39;danger&#39\",\"39;forward&#39\",\"39;index&#39\",\"39;ion-arrow-down-c&#39\",\"39;ion-loading-d&#39\",\"39;left&#39\",\"39;ok&#39\",\"39;pane&#39\",\"39;right&#39\",\"39;slide-in-up&#39\",\"39;text&#39\",\"39;x&#39\",\"39;xy&#39\",\"39;y&#39\",\"3</li\",\"3rd\",\"4\",\"4.1\",\"4.4\",\"4000\",\"43cee6\",\"444\",\"4a87e\",\"4ea4b\",\"5\",\"50\",\"500\",\"6\",\"60\",\"64-bit\",\"66.6666\",\"66cc33\",\"7\",\"75\",\"80\",\"8000\",\"80px\",\"88\",\"8a6de9\",\"90\",\"99\",\"9999\",\"__note__\",\"_variables.scss\",\"a-w\",\"abil\",\"abov\",\"absolut\",\"abstract\",\"accept\",\"access\",\"account\",\"accur\",\"achiev\",\"act\",\"action\",\"actionid\",\"actionsheet\",\"activ\",\"active-slid\",\"activeproject.titl\",\"actual\",\"ad\",\"adam\",\"adamdbradlei\",\"add\",\"addit\",\"addition\",\"additon\",\"address\",\"adjust\",\"adjustnoth\",\"adjustpan\",\"adjustres\",\"admit\",\"adob\",\"adobe'\",\"advanc\",\"advantag\",\"again\",\"against\",\"ah\",\"ahead\",\"airplan\",\"airplanemod\",\"album\",\"alderaan\",\"alert\",\"alert(opt\",\"alertpopup\",\"alertpopup.then(function(r\",\"alia\",\"alias_nam\",\"align\",\"align([direct\",\"align-titl\",\"allow\",\"alon\",\"along\",\"alreadi\",\"altern\",\"although\",\"alwai\",\"amaz\",\"amongst\",\"amount\",\"amp\",\"analog\",\"anchorscroll([shouldanim\",\"and/or\",\"android\",\"android'\",\"android:debugg\",\"android:versioncod\",\"android:windowsoftinputmode](http://developer.android.com/reference/android/r.attr.html#windowsoftinputmod\",\"android](http://cordova.apache.org/docs/en/3.4.0/guide_platforms_android_index.md.html#android%20platform%20guid\",\"android_hom\",\"androidmanifest.xml\",\"angri\",\"angular\",\"angular'\",\"angular-ui-rout\",\"angular.fromjson(projectstr\",\"angular.module('loadingapp\",\"angular.module('myapp\",\"angular.module('mysuperapp\",\"angular.module('start\",\"angular.module('testapp\",\"angular.module('todo\",\"angular.tojson(project\",\"angularj\",\"angularui\",\"anim\",\"animationframethrottle(callback)(alia\",\"anoth\",\"anroid_sdk_dir]\\\\sdk\\\\tool\",\"answer\",\"ant\",\"anymor\",\"anyth\",\"anywher\",\"apach\",\"api\",\"api/directive/ionfooterbar\",\"apk\",\"app\",\"app!</h3\",\"app'\",\"app-lik\",\"app-like...it\",\"app.config(function($stateprovid\",\"app.css\",\"app.j\",\"app.scss\",\"app](building.html\",\"app](https://s3.amazonaws.com/ionicframework.com/guide/0.1.0/5-play.png\",\"app](starting.html\",\"app](testing.html\",\"appctrl\",\"appear\",\"append\",\"appl\",\"apple'\",\"applet\",\"appli\",\"applic\",\"approach\",\"appropri\",\"apps](/tutorials/fullscreen-app\",\"apt-get\",\"arbitrari\",\"arc-170\",\"area\",\"aren't\",\"argument\",\"arial\",\"aris\",\"ark\",\"around\",\"arrai\",\"array(str\",\"array[object\",\"arriv\",\"arrow\",\"artist.album\",\"ask\",\"assert\",\"assign\",\"associ\",\"assum\",\"assumpt\",\"asynchron\",\"attempt\",\"attr\",\"attribut\",\"auto\",\"autofocu\",\"automag\",\"automat\",\"autorevers\",\"avaialbl\",\"avail\",\"avatar\",\"avd\",\"avoid\",\"awai\",\"awar\",\"awesom\",\"awesome</h3\",\"awesome</li\",\"b\",\"b1\",\"back\",\"back([ev\",\"backbutton\",\"backbuttonact\",\"backdrop\",\"background\",\"background-color\",\"bacon\",\"bad\",\"badg\",\"badge-styl\",\"balanc\",\"banana\",\"bar\",\"bar-assert\",\"bar-balanc\",\"bar-calm\",\"bar-dark\",\"bar-energ\",\"bar-foot\",\"bar-head\",\"bar-light\",\"bar-posit\",\"bar-roy\",\"bar-stabl\",\"bar-subfoot\",\"bar-subhead\",\"bar](/tutorials/fade-status-bar\",\"base\",\"bash\",\"basic\",\"battletoad\",\"be\",\"beasti\",\"beauti\",\"becam\",\"becom\",\"befor\",\"begin\",\"behav\",\"behavior\",\"behind\",\"believ\",\"below\",\"benefit\",\"benjsperri\",\"best\",\"better\",\"between\",\"beyond\",\"big\",\"biggest\",\"bin\",\"binari\",\"bind\",\"bit\",\"blame\",\"blank\",\"bleed\",\"block\",\"blog/hybrid-apps-and-the-curse-of-the-300ms-delai\",\"blog/popup-support\",\"blog/what-is-cordova-phonegap\",\"blue\",\"bodi\",\"boi\",\"boo\",\"book\",\"boolean\",\"boolean=}backdropclicktoclos\",\"boot\",\"bootstrap\",\"border\",\"border-radiu\",\"both\",\"bottom\",\"bounc\",\"bound\",\"box\",\"box-shadow\",\"brand\",\"break\",\"breakpoint\",\"breath\",\"bridg\",\"bro\",\"broad\",\"broadcast\",\"broader\",\"brought\",\"brows\",\"browser\",\"browser'\",\"browser-bas\",\"bu\",\"bubbl\",\"bug\",\"build\",\"built\",\"built-in\",\"bulk\",\"bunch\",\"bundl\",\"butter\",\"butterfing\",\"button\",\"button'\",\"button-assert\",\"button-balanc\",\"button-bar\",\"button-block\",\"button-calm\",\"button-clear\",\"button-dark\",\"button-energ\",\"button-ful\",\"button-larg\",\"button-light\",\"button-outlin\",\"button-posit\",\"button-positive\\\">cr\",\"button-roy\",\"button-smal\",\"button-st\",\"buttonclick\",\"c\",\"c-3po\",\"c:\\\\apache-ant-1.9.2\\\\bin\",\"c:\\\\program\",\"cach\",\"call\",\"callback\",\"calm\",\"camera\",\"can't\",\"can-swip\",\"cancel\",\"cancelable])(alia\",\"canceltext\",\"canceltyp\",\"candi\",\"candrag\",\"candragcontent([candrag\",\"canswipeitems([showreord\",\"capabl\",\"capacitor\",\"card\",\"card-bodi\",\"card-foot\",\"care\",\"carri\",\"case\",\"caus\",\"cd\",\"center\",\"certain\",\"certainli\",\"certif\",\"challeng\",\"chanc\",\"chang\",\"changetitle(titl\",\"chapter\",\"check\",\"checkbox\",\"checkbox-assert\",\"checkbox](http://docs.angularjs.org/api/ng/input/input[checkbox\",\"child\",\"children\",\"choic\",\"choos\",\"chose\",\"chrome\",\"class\",\"class=\\\"bar-secondari\",\"class=\\\"button\",\"class=\\\"item\",\"class=\\\"list\",\"class=\\\"mod\",\"class=\\\"pad\",\"class=\\\"title\\\">mi\",\"class=\\\"title\\\">new\",\"class=&quot;bar-positive&quot;&gt\",\"class=&quot;button\",\"class=&quot;button&quot;&gt\",\"class](/docs/v3/components#anim\",\"class](/docs/v3/components#tab\",\"classic\",\"classnam\",\"clean\",\"cleanup\",\"clear\",\"click\",\"clone\",\"close\",\"closeoptionbutton\",\"closest\",\"code\",\"codepen\",\"codiqa\",\"coin\",\"col\",\"col-10\",\"col-20\",\"col-25\",\"col-33\",\"col-50\",\"col-67\",\"col-75\",\"col-80\",\"col-90\",\"col-offset-10\",\"col-offset-20\",\"col-offset-25\",\"col-offset-33\",\"col-offset-50\",\"col-offset-67\",\"col-offset-75\",\"col-offset-80\",\"col-offset-90\",\"col.col-50\",\"col.col-75\",\"collect\",\"collection-item-height\",\"collection-item-width\",\"collection-repeat\",\"color\",\"colors](/docs/v3/components/#color\",\"column\",\"combin\",\"come\",\"command\",\"command-lin\",\"comment\",\"commerci\",\"common\",\"commonli\",\"commun\",\"compani\",\"compar\",\"compass\",\"compat\",\"compel\",\"compil\",\"compileprovid\",\"compileprovider.ahrefsanitizationwhitelist(/^\\\\s*(https?|ftp|mailto|file|tel\",\"complet\",\"complex\",\"complic\",\"compon\",\"comprehens\",\"comput\",\"concept\",\"concern\",\"conclus\",\"cone\",\"config\",\"config(funct\",\"config(function($routeprovid\",\"config.xml\",\"configur\",\"confirm\",\"confirm(opt\",\"confirmpopup\",\"confirmpopup.then(function(r\",\"conflict\",\"confus\",\"conjunct\",\"connect\",\"consid\",\"consist\",\"consol\",\"console.log('got\",\"console.log('tap\",\"console.log('thank\",\"console.log('y\",\"console.log('your\",\"console2\",\"console2](http://sourceforge.net/projects/consol\",\"console](https://play.google.com/apps/publish\",\"constantli\",\"consum\",\"contain\",\"content\",\"content'\",\"content](https://ionicframework.com/docs/api/directive/ioncont\",\"contentcontroller($scop\",\"contentctrl($scop\",\"context\",\"continu\",\"contra\",\"contrast\",\"contribut\",\"contribute](/contribut\",\"contributor\",\"control\",\"controller('introctrl\",\"controller('loadingctrl\",\"controller('menuctrl\",\"controller('mycontrol\",\"controller('myctrl\",\"controller('todoctrl\",\"controller(function($scop\",\"controllers.j\",\"conveni\",\"convent\",\"convinc\",\"cool\",\"coordin\",\"copi\",\"cordova\",\"cordova'\",\"cordova.j\",\"cordova.plugins.keyboard.disablescroll(tru\",\"cordova/phonegap\",\"cordova](http://cordova.apache.org\",\"core\",\"correct\",\"correctli\",\"correspond\",\"correspondingbutton\",\"cost\",\"count\",\"cours\",\"cousin\",\"cover\",\"crash\",\"crazi\",\"cream\",\"creat\",\"createproject\",\"createproject(projecttitl\",\"createtask\",\"createtask(task\",\"creation\",\"creativ\",\"creator\",\"creators](http://drifty.com\",\"crusad\",\"crystal\",\"css\",\"css/app.css\",\"css/sass\",\"css3\",\"culprit\",\"cultiv\",\"current\",\"currentindex\",\"curs\",\"curv\",\"custom\",\"customiz\",\"dagobah\",\"dai\",\"dana\",\"danger\",\"dark\",\"data\",\"data-tap-disabled=\\\"tru\",\"databas\",\"daunt\",\"debug\",\"decid\",\"decim\",\"declar\",\"default\",\"defer\",\"defin\",\"delai\",\"deleg\",\"delegate-handl\",\"delegate.rememberscrollposition('my-scroll-id\",\"delegate.scrolltorememberedposit\",\"delegateinst\",\"delet\",\"delici\",\"delorean\",\"delta-7\",\"demo\",\"demo](http://codepen.io/ionic/pen/zkmhj\",\"demonstr\",\"depend\",\"deploi\",\"deregist\",\"described](http://developer.android.com/tools/device.html\",\"descript\",\"deselect\",\"design\",\"desir\",\"desktop\",\"destroi\",\"destruct\",\"destructivebuttonclick\",\"destructivetext\",\"detail\",\"detect\",\"dev\",\"develop\",\"developer](https://developer.apple.com\",\"devic\",\"device&#39;\",\"device'\",\"dialog\",\"dictat\",\"didn't\",\"didtutori\",\"differ\",\"dig\",\"digest\",\"digestalg\",\"direct\",\"directive'\",\"directive('fadebar\",\"directli\",\"directori\",\"disabl\",\"disagre\",\"discuss\",\"dismiss\",\"displai\",\"distanc\",\"distinct\",\"distribut\",\"div\",\"divid\",\"do\",\"doc\",\"docs/api/controller/ionicmod\",\"docs/api/directive/collectionrepeat\",\"docs/api/directive/ioncheckbox\",\"docs/api/directive/ioncont\",\"docs/api/directive/iondeletebutton\",\"docs/api/directive/ionfooterbar\",\"docs/api/directive/ionheaderbar\",\"docs/api/directive/ioninfinitescrol\",\"docs/api/directive/ionitem\",\"docs/api/directive/ionlist\",\"docs/api/directive/ionnavbackbutton\",\"docs/api/directive/ionnavbar\",\"docs/api/directive/ionnavbutton\",\"docs/api/directive/ionnavview\",\"docs/api/directive/ionoptionbutton\",\"docs/api/directive/ionpan\",\"docs/api/directive/ionradio\",\"docs/api/directive/ionrefresh\",\"docs/api/directive/ionreorderbutton\",\"docs/api/directive/ionscrol\",\"docs/api/directive/ionsidemenu\",\"docs/api/directive/ionsidemenucont\",\"docs/api/directive/ionslidebox\",\"docs/api/directive/iontab\",\"docs/api/directive/iontoggl\",\"docs/api/directive/ionview\",\"docs/api/directive/keyboardattach\",\"docs/api/directive/menuclos\",\"docs/api/directive/menutoggl\",\"docs/api/directive/navclear\",\"docs/api/ionic/control\",\"docs/api/ionic/direct\",\"docs/api/ionic/servic\",\"docs/api/ionic/util\",\"docs/api/page/keyboard\",\"docs/api/page/tap\",\"docs/api/service/$ionicactionsheet\",\"docs/api/service/$ionicanim\",\"docs/api/service/$ionicbackdrop\",\"docs/api/service/$ionicgestur\",\"docs/api/service/$ioniclistdeleg\",\"docs/api/service/$ionicload\",\"docs/api/service/$ionicmod\",\"docs/api/service/$ionicnavbardeleg\",\"docs/api/service/$ionicplatform\",\"docs/api/service/$ionicpopup\",\"docs/api/service/$ionicscrolldeleg\",\"docs/api/service/$ionicsidemenudeleg\",\"docs/api/service/$ionicslideboxdeleg\",\"docs/api/service/$ionictabsdeleg\",\"docs/api/utility/ionic.domutil\",\"docs/api/utility/ionic.eventcontrol\",\"docs/api/utility/ionic.platform\",\"docs/components/#anim\",\"docs/components/#bar-input\",\"docs/components/#block-button\",\"docs/components/#button\",\"docs/components/#button-bar\",\"docs/components/#button-s\",\"docs/components/#buttons-headers-foot\",\"docs/components/#card\",\"docs/components/#card-headers-foot\",\"docs/components/#card-imag\",\"docs/components/#card-list\",\"docs/components/#card-showcas\",\"docs/components/#checkbox\",\"docs/components/#clear-button\",\"docs/components/#clear-buttons-head\",\"docs/components/#color\",\"docs/components/#cont\",\"docs/components/#foot\",\"docs/components/#form\",\"docs/components/#forms-inline-label\",\"docs/components/#forms-placeholder-label\",\"docs/components/#forms-stacked-label\",\"docs/components/#full-button\",\"docs/components/#grid\",\"docs/components/#grid-even\",\"docs/components/#grid-explicit\",\"docs/components/#grid-offset\",\"docs/components/#grid-respons\",\"docs/components/#grid-vertically-align\",\"docs/components/#head\",\"docs/components/#icon\",\"docs/components/#icon-button\",\"docs/components/#icon-left-tab\",\"docs/components/#icon-only-tab\",\"docs/components/#icon-top-tab\",\"docs/components/#input-icon\",\"docs/components/#inset-form\",\"docs/components/#item-avatar\",\"docs/components/#item-button\",\"docs/components/#item-divid\",\"docs/components/#item-icon\",\"docs/components/#item-input-inset\",\"docs/components/#item-thumbnail\",\"docs/components/#list\",\"docs/components/#list-inset\",\"docs/components/#outlined-button\",\"docs/components/#pad\",\"docs/components/#radio-button\",\"docs/components/#rang\",\"docs/components/#select\",\"docs/components/#subhead\",\"docs/components/#tab\",\"docs/components/#toggl\",\"docs/components/#util\",\"docs/guid\",\"docs/guide/building.html\",\"docs/guide/installation.html\",\"docs/guide/preface.html\",\"docs/guide/publishing.html\",\"docs/guide/starting.html\",\"docs/guide/testing.html\",\"docs/overview/#about\",\"docs/overview/#browser-support\",\"docs/overview/#contribut\",\"docs/overview/#css-sass\",\"docs/overview/#download\",\"docs/overview/#licens\",\"docs/overview/#overview\",\"docs/overview/#phonegap\",\"docs/overview/#start\",\"docs/overview/#whats-includ\",\"docs](/docs/v3/components/#foot\",\"docs](/docs/v3/components/#subhead\",\"docs](https://github.com/angular-ui/ui-router/wiki\",\"documen\",\"document\",\"documentation](http://sass-lang.com/documentation/file.sass_reference.html\",\"documentation](http://sass-lang.com/guide#vari\",\"documentation`](/docs/v3/components/#list\",\"does-continu\",\"doesn't\",\"dog\",\"dom\",\"domel\",\"domev\",\"don't\",\"don\\\\'t\",\"donat\",\"done\",\"dooki\",\"doom\",\"doubl\",\"double-click\",\"double-tap\",\"doubletap\",\"down\",\"download\",\"download](https://github.com/ionic-team/ionic/releas\",\"drag\",\"drag-cont\",\"dragdown\",\"dragend\",\"dragleft\",\"dragright\",\"dragstart\",\"dragup\",\"dream\",\"drifti\",\"drifty](http://drifty.com\",\"drive\",\"droid\",\"drop\",\"duck\",\"due\",\"duplic\",\"durat\",\"dure\",\"e\",\"e.preventdefault\",\"each\",\"eager\",\"earlier\",\"ease-in-out\",\"easi\",\"easier\",\"easiest\",\"easili\",\"eat\",\"eclips\",\"ecosystem\",\"edg\",\"edit\",\"ef4e3a\",\"effect\",\"effort\",\"eg\",\"egghead.io\",\"egon\",\"elabor\",\"element\",\"element'\",\"element)(alia\",\"element[0].style.opac\",\"elimin\",\"email\",\"embed\",\"emot\",\"emul\",\"enabl\",\"enableslide([shoulden\",\"encourag\",\"end\",\"endhighlight\",\"endraw\",\"energ\",\"enhanc\",\"enjoi\",\"enough\",\"ensur\",\"enter\",\"entir\",\"entri\",\"enumer\",\"environ\",\"equal\",\"equival\",\"error\",\"escap\",\"especi\",\"essenti\",\"etc\",\"evalu\",\"even\",\"evenli\",\"event\",\"event.preventdefault\",\"eventtyp\",\"eventu\",\"ever-grow\",\"everyon\",\"everyth\",\"evil\",\"exactli\",\"exampl\",\"except\",\"execut\",\"exist\",\"exit\",\"exitapp\",\"expand\",\"expect\",\"experi\",\"explain\",\"explicit\",\"explicitli\",\"explor\",\"export\",\"expos\",\"express\",\"extend\",\"extens\",\"extra\",\"extract\",\"f0b840\",\"f8f8f8\",\"face\",\"facebook\",\"fact\",\"factori\",\"factory('project\",\"fade\",\"fade-bar\",\"fade-in\",\"fadebar\",\"fairli\",\"fallback\",\"fals\",\"familiar\",\"far\",\"fast\",\"fastclick.j\",\"fastclick](https://github.com/ftlabs/fastclick\",\"faster\",\"favorit\",\"fear\",\"featur\",\"feed\",\"feedback\",\"feel\",\"felt\",\"felucia\",\"fetch\",\"few\",\"fff\",\"field\",\"fighter\",\"figur\",\"file\",\"files\\\\java\\\\jdk7\",\"files\\\\java\\\\jdk7\\\\bin\",\"fill\",\"filter\",\"filter:searchtext\",\"final\",\"finally(funct\",\"find\",\"fine\",\"finish\",\"fire\",\"firefox\",\"firefoxo\",\"first\",\"fit\",\"five\",\"fix\",\"flag\",\"flashplay\",\"flesh\",\"flexbox\",\"flexbox'\",\"flexibl\",\"float\",\"flux\",\"focu\",\"focus\",\"focusfirstinput\",\"foe\",\"folder\",\"follow\",\"followup\",\"font\",\"font-famili\",\"font-pack\",\"font-siz\",\"font-weight\",\"footer\",\"forgetscrollposit\",\"fork\",\"form\",\"format\",\"formid\",\"forum\",\"forum](http://forum.ionicframework.com\",\"found\",\"foundat\",\"foundation](http://apache.org\",\"four\",\"fourth\",\"frame\",\"framework\",\"framework'\",\"free\",\"fresh\",\"friend\",\"frisbi\",\"fromindex\",\"fromtemplate(templatestr\",\"fromtemplateurl(templateurl\",\"front\",\"front-end\",\"full\",\"fulli\",\"fullscreen\",\"fullscreen([showfullscreen\",\"function\",\"function(\",\"function($scop\",\"function($timeout\",\"function(amt\",\"function(index\",\"function(item\",\"function(mod\",\"function(project\",\"function(projecttitl\",\"function(ratio\",\"function(task\",\"function(titl\",\"further\",\"furthest\",\"futur\",\"g\",\"galleri\",\"game\",\"gatekeep\",\"gem\",\"gener\",\"genkei\",\"geoloc\",\"geonosi\",\"gestur\",\"get\",\"getbyhandl\",\"getbyhandle(handl\",\"getchildindex(el\",\"getlastactiveindex\",\"getopenratio\",\"getparentwithclass(el\",\"getpositioninparent(el\",\"getprevioustitl\",\"getscrollposit\",\"getscrollview\",\"gettextbounds(textnod\",\"getting-start\",\"gettitl\",\"ghostclick\",\"gigawatt\",\"gist\",\"git\",\"github\",\"github](https://github.com/ionic-team/ion\",\"give\",\"given\",\"global\",\"go\",\"goal\",\"gobstopp\",\"goe\",\"gone\",\"gonna\",\"good\",\"googl\",\"gotten\",\"gp\",\"grab\",\"grade\",\"grai\",\"grammi\",\"grand\",\"great\",\"greater\",\"green\",\"grid\",\"group\",\"gui\",\"guid\",\"guide](http://css-tricks.com/sass-style-guid\",\"guide](installation.html\",\"gulp\",\"gulp](http://gulpjs.com\",\"gut\",\"h1\",\"h2\",\"h3\",\"h3>ani\",\"h3>thank\",\"h3>use\",\"h4\",\"h5\",\"h5>just\",\"h6\",\"half\",\"hammer.j\",\"hammer.js](http://eightmedia.github.io/hammer.j\",\"hand\",\"handl\",\"handler\",\"happen\",\"happi\",\"hard\",\"hard-cod\",\"hardwar\",\"has-bounc\",\"hashkei\",\"hate\",\"have\",\"haven't\",\"head\",\"header\",\"headerbar-lightbar-stablebar-positivebar-calmbar-balancedbar-energizedbar-assertivebar-royalbar-dark\",\"headerheadersub\",\"headershead\",\"heavili\",\"hei\",\"height\",\"hello\",\"helloworld-release-unsigned.apk\",\"helloworld.apk\",\"help\",\"helvetica\",\"helveticaneue-light\",\"here\",\"here'\",\"hi\",\"hidden\",\"hide\",\"hide-back-button\",\"hide-nav-bar\",\"hide-on-keyboard-open\",\"high\",\"higher\",\"highest\",\"highli\",\"highlight\",\"hint\",\"histor\",\"histori\",\"hit\",\"hold\",\"home\",\"home.html\",\"homepag\",\"hope\",\"horizont\",\"host\",\"hoth\",\"href\",\"href=\\\"#/music\\\">go\",\"html\",\"html5\",\"html5'\",\"http\",\"http.get('/more-items').success(function(item\",\"http.get('/new-item\",\"http.server\",\"http://localhost:8000\",\"https://docs.angularjs.org/guide/scope](https://docs.angularjs.org/guide/scop\",\"https://github.com/ionic-team/ionic-plugins-keyboard](https://github.com/ionic-team/ionic-plugins-keyboard\",\"huge\",\"hunter\",\"hybrid\",\"i'll\",\"i'm\",\"i'v\",\"i.\",\"i=0\",\"ia32-lib\",\"ic\",\"icon\",\"icon-off\",\"icon-on\",\"icon-onli\",\"id\",\"id(item\",\"id(item)&#39\",\"id=\\\"intro-pag\",\"id=\\\"list\",\"id=\\\"logo\",\"id=\\\"new-task.html\",\"idea\",\"ident\",\"identifi\",\"if(!$scope.activeproject\",\"if($scope.projects.length\",\"if(index\",\"if(projectstr\",\"if(projecttitl\",\"if(r\",\"if(window.localstorage['didtutori\",\"ig-88\",\"ignor\",\"ill\",\"imag\",\"imagin\",\"img\",\"immedi\",\"implement\",\"impli\",\"import\",\"improv\",\"in/out\",\"inch\",\"includ\",\"incorrectli\",\"increas\",\"increment\",\"independ\",\"indepth\",\"index\",\"index.html\",\"indic\",\"individu\",\"ineffici\",\"infinit\",\"info\",\"info](http://developer.android.com/guide/webapps/debugging.html\",\"inform\",\"initi\",\"initial-load\",\"initialize(opt\",\"inject\",\"inlin\",\"inline-block\",\"inner\",\"input\",\"input'\",\"input-label\",\"inputplacehold\",\"inputtyp\",\"insert\",\"inset\",\"insid\",\"inspector\",\"instagram\",\"instal\",\"installation](installation.html\",\"instanc\",\"instanti\",\"instead\",\"instruct\",\"integ\",\"interact\",\"interest\",\"interfac\",\"interfer\",\"intro\",\"intro.html\",\"introctrl\",\"introduc\",\"invest\",\"io\",\"ion-checkbox\",\"ion-cont\",\"ion-content/ion-scrol\",\"ion-delete-button\",\"ion-footer-bar\",\"ion-header-bar\",\"ion-infinite-scrol\",\"ion-item\",\"ion-list\",\"ion-nav-back-button\",\"ion-nav-bar\",\"ion-nav-button\",\"ion-nav-view\",\"ion-option-button\",\"ion-pan\",\"ion-radio\",\"ion-refresh\",\"ion-reorder-button\",\"ion-scrol\",\"ion-side-menu\",\"ion-side-menu-cont\",\"ion-side-menus](https://ionicframework.com/docs/api/directive/ionsidemenu\",\"ion-slide-box\",\"ion-tab\",\"ion-toggl\",\"ion-view\",\"ioncheckbox\",\"ioncont\",\"iondeletebutton\",\"ionfooterbar\",\"ionheaderbar\",\"ionic\",\"ionic&#39;\",\"ionic'\",\"ionic-angular-cordova-seed](http://github.com/ionic-team/ionic-angular-cordova-se\",\"ionic-sit\",\"ionic.animationframethrottl\",\"ionic.bundle.j\",\"ionic.css\",\"ionic.domutil\",\"ionic.eventcontrol\",\"ionic.eventcontroller&#39;\",\"ionic.eventcontroller'\",\"ionic.off\",\"ionic.offgestur\",\"ionic.on\",\"ionic.ongestur\",\"ionic.platform\",\"ionic.platform.isfullscreen\",\"ionic.platform.ready(funct\",\"ionic.requestanimationfram\",\"ionic.scss\",\"ionic.trigg\",\"ionic/ion\",\"ionicactionsheet\",\"ionicactionsheet.show\",\"ionicanim\",\"ionicbackdrop\",\"ionicbackdrop.releas\",\"ionicbackdrop.retain\",\"ionicgestur\",\"ioniclistdeleg\",\"ioniclistdelegate.$getbyhandle('my-handle').showreorder(tru\",\"ioniclistdelegate.showdelete(tru\",\"ionicload\",\"ionicloading.hid\",\"ionicloading.show\",\"ionicmod\",\"ionicmodal#initi\",\"ionicmodal.fromtemplateurl('modal.html\",\"ionicmodal.fromtemplateurl('new-task.html\",\"ionicnavbardeleg\",\"ionicnavbardelegate.$getbyhandle('myhandle').settitle('newtitl\",\"ionicnavbardelegate.back\",\"ionicnavbardelegate.getprevioustitl\",\"ionicnavbardelegate.settitle(titl\",\"ionicon\",\"ionicons](https://ionicons.com\",\"ionicplatform\",\"ionicpopup\",\"ionicpopup.alert\",\"ionicpopup.confirm\",\"ionicpopup.prompt\",\"ionicpopup.show\",\"ionicscrolldeleg\",\"ionicscrolldelegate.$getbyhandle('mainscroll').scrolltop\",\"ionicscrolldelegate.$getbyhandle('my-handle').scrolltop\",\"ionicscrolldelegate.$getbyhandle('myscrol\",\"ionicscrolldelegate.$getbyhandle('small').scrolltop\",\"ionicscrolldelegate.scrolltop\",\"ionicsidemenudeleg\",\"ionicsidemenudelegate.$getbyhandle('my-handle').toggleleft\",\"ionicsidemenudelegate.toggleleft\",\"ionicsidemenudelegate.toggleleft(fals\",\"ionicslideboxdeleg\",\"ionicslideboxdelegate.$getbyhandle('my-handle').stop\",\"ionicslideboxdelegate.next\",\"ionictabsdeleg\",\"ionictabsdelegate.$getbyhandle('my-handle').select(0\",\"ionictabsdelegate.select\",\"ionictabsdelegate.select(index\",\"ioninfinitescrol\",\"ionitem\",\"ionitron\",\"ionlist\",\"ionnavbackbutton\",\"ionnavbar\",\"ionnavbutton\",\"ionnavview\",\"ionoptionbutton\",\"ionpan\",\"ionradio\",\"ionrefresh\",\"ionreorderbutton\",\"ionscrol\",\"ionsidemenu\",\"ionsidemenucont\",\"ionslidebox\",\"iontab\",\"iontoggl\",\"ionview\",\"ios'\",\"ios](http://cordova.apache.org/docs/en/3.4.0/guide_platforms_ios_index.md.html#ios%20platform%20guid\",\"ip\",\"ipad\",\"iphon\",\"is-en\",\"isandroid\",\"isfullscreen\",\"isio\",\"isipad\",\"isn't\",\"isol\",\"isopen\",\"isopenleft\",\"isopenright\",\"isreadi\",\"isshown\",\"issu\",\"iswebview\",\"iswindowsphon\",\"it&#39;\",\"it'\",\"it'd\",\"it'll\",\"it-o\",\"it](/examples/submit.html\",\"item\",\"item-avatar\",\"item-bodi\",\"item-button-left\",\"item-button-right\",\"item-checkbox\",\"item-divid\",\"item-icon-left\",\"item-icon-right\",\"item-input\",\"item-input-inset\",\"item-not\",\"item-radio\",\"item-stacked-label\",\"item-thumbnail-left\",\"item-thumbnail-right\",\"item-toggl\",\"item.descript\",\"item.id\",\"item.titl\",\"itself\",\"it’\",\"jarsign\",\"java\",\"java_hom\",\"java_home=$(/usr/libexec/java_hom\",\"javascript\",\"javscript\",\"jdk\",\"jdk'\",\"jdk](http://www.oracle.com/technetwork/java/javase/downloads/jdk7-downloads-1880260.html\",\"jerki\",\"jetstrap\",\"job\",\"john\",\"join\",\"jolli\",\"jqueri\",\"jre\",\"js\",\"jt\",\"jump\",\"kamino\",\"kat\",\"keep\",\"kei\",\"kept\",\"keyalg\",\"keyboard\",\"keyboard-attach\",\"keysiz\",\"keystor\",\"keytool\",\"kind\",\"kingdom\",\"kit\",\"kitten\",\"knew\",\"know\",\"known\",\"label\",\"label'\",\"label.toggl\",\"lai\",\"land\",\"landscap\",\"larg\",\"larger\",\"largest\",\"last\",\"later\",\"latest\",\"latter\",\"layer\",\"layout\",\"lazili\",\"leaflet\",\"leak\",\"learn\",\"leav\",\"left\",\"left-buttons=\\\"leftbutton\",\"left/right\",\"leftbutton\",\"legend\",\"less\",\"lesser\",\"lesson\",\"let\",\"let'\",\"level\",\"leverag\",\"li\",\"li>b\",\"li>stai\",\"li>ther\",\"lib/js/angular\",\"librari\",\"licens\",\"life\",\"lifesav\",\"light\",\"lightsab\",\"like\",\"likelihood\",\"limit\",\"lindquist\",\"line\",\"link\",\"linux\",\"list\",\"list'\",\"list-inset\",\"list-item\",\"list-styl\",\"listen\",\"littl\",\"live\",\"load\",\"local\",\"localstorag\",\"locat\",\"location.path('/main\",\"locationprovid\",\"lock\",\"logic\",\"logo\",\"long\",\"look\",\"loop\",\"loos\",\"lose\",\"lost\",\"lot\",\"love\",\"low-level\",\"lower\",\"lower-level\",\"lt;/button&gt\",\"lt;/div&gt\",\"lt;/ion-nav-back-button&gt\",\"lt;/ion-nav-bar&gt\",\"lt;/ion-view&gt\",\"lt;a&gt\",\"lt;body&gt\",\"lt;button\",\"lt;button&gt\",\"lt;div\",\"lt;fade-bar&gt\",\"lt;i&gt\",\"lt;input&gt\",\"lt;ion-content&gt\",\"lt;ion-nav-back-button&gt\",\"lt;ion-nav-bar\",\"lt;ion-nav-bar&gt\",\"lt;ion-nav-buttons&gt\",\"lt;ion-view\",\"lt;label&gt\",\"lt;ng-view&gt\",\"lt;style&gt\",\"lt;textarea&gt\",\"lucida\",\"luckili\",\"m\",\"ma\",\"mac\",\"machin\",\"made\",\"magic\",\"mail\",\"main\",\"main.html\",\"mainctrl\",\"mainctrl($scop\",\"mainli\",\"maintain\",\"make\",\"maker\",\"man\",\"manag\",\"mani\",\"manipul\",\"manual\",\"map\",\"margin\",\"margin-top\",\"mario\",\"markup\",\"marti\",\"master\",\"match\",\"math.abs(ratio\",\"matt\",\"matter\",\"maverick\",\"max-zoom\",\"maxlynch\",\"mcfly\",\"mean\",\"meant\",\"mega\",\"memori\",\"menu\",\"menu(\",\"menu-clos\",\"menu-toggl\",\"menu](https://s3.amazonaws.com/ionicframework.com/docs/controllers/sidemenu.gif\",\"menuclos\",\"menutoggl\",\"mere\",\"messag\",\"met\",\"meta\",\"method\",\"metroid\",\"mike\",\"millisecond\",\"min-zoom\",\"mind\",\"mini-book\",\"minim\",\"minimum\",\"minut\",\"miss\",\"misunderstand\",\"mit\",\"mixin\",\"mobil\",\"mockup\",\"modal\",\"modal&#39;\",\"modal.hidden\",\"modal.shown\",\"mode\",\"model\",\"modern\",\"modifi\",\"modul\",\"moment\",\"month\",\"more\",\"mous\",\"mousedown\",\"mousemov\",\"mouseup\",\"move\",\"mph\",\"much\",\"multi-lin\",\"multi-pag\",\"multi-project\",\"multi-slid\",\"multi-tab\",\"multipl\",\"mushroom\",\"music\",\"music.html\",\"mutli-screen\",\"my-image-item\",\"my-item\",\"my-release-key.keystor\",\"myapp\",\"mycontroller($scop\",\"myctrl($scop\",\"mygeeto\",\"mypopup\",\"mypopup.clos\",\"mypopup.then(function(r\",\"myproject\",\"n-1\",\"n00b\",\"naboo\",\"nail\",\"name\",\"name=\\\"fullscreen\",\"nativ\",\"native-feel\",\"native-styl\",\"native-to-brows\",\"native/hybrid\",\"nav\",\"nav-clear\",\"nav-pag\",\"nav-title-slide-ios7\",\"navbar\",\"navbar'\",\"navclear\",\"navig\",\"navigator.camera\",\"navigator.camera.getphotos(start\",\"navigator.camera.getpictur\",\"navigator.geoloc\",\"navview'\",\"near\",\"necessari\",\"need\",\"nest\",\"net\",\"network\",\"neue\",\"never\",\"nevermind\",\"new\",\"newer\",\"newitem\",\"newproject\",\"next\",\"ng-app\",\"ng-class\",\"ng-click\",\"ng-click=\\\"closenewtask()\\\">cancel</button\",\"ng-controller=\\\"homectrl\",\"ng-hide\",\"ng-if\",\"ng-model=\\\"task.titl\",\"ng-repeat\",\"ng-show\",\"ng-style\",\"ng-submit=\\\"createtask(task\",\"nganim\",\"ngclick\",\"ngrout\",\"ngsanit\",\"ngtouch\",\"ngtouch](https://docs.angularjs.org/api/ngtouch\",\"nice\",\"nifti\",\"nine\",\"nirvana\",\"nitobi\",\"no-anim\",\"nobackdrop\",\"node\",\"node.j\",\"node.js](http://nodejs.org\",\"nodenam\",\"non-destruct\",\"none\",\"normal\",\"note\",\"noth\",\"notic\",\"novemb\",\"now\",\"npm\",\"nub\",\"null\",\"number\",\"numer\",\"object\",\"obscur\",\"obsolet\",\"obviou\",\"occur\",\"off(eventtyp\",\"off(typ\",\"offer\",\"offgesture(eventtyp\",\"offhardwarebackbutton(callback\",\"offici\",\"offset\",\"oh\",\"ok\",\"okai\",\"oktext\",\"oktyp\",\"ol\",\"old\",\"on\",\"on(eventtyp\",\"on(typ\",\"on-demand\",\"on-deselect\",\"on-infinit\",\"on-pul\",\"on-refresh\",\"on-reord\",\"on-scrol\",\"on-scroll-complet\",\"on-select\",\"on-slide-chang\",\"on-slide-changed=\\\"slidechanged(index\",\"onc\",\"onend\",\"ongesture(eventtyp\",\"onhardwarebackbutton(callback\",\"onstart\",\"ontap\",\"onto\",\"opac\",\"open\",\"open-sourc\",\"opened/open\",\"openratio\",\"oper\",\"opinion\",\"opt\",\"optim\",\"option\",\"order\",\"org.apache.cordova.consol\",\"org.apache.cordova.statusbar\",\"organ\",\"origin\",\"os\",\"os'\",\"other\",\"otherwis\",\"out\",\"outer\",\"outlin\",\"output\",\"over\",\"overflow\",\"overflow-scrol\",\"overlai\",\"overrid\",\"overridden\",\"overview\",\"overwhelmingli\",\"overwrit\",\"p\",\"pack\",\"packag\",\"pad\",\"padding-bottom\",\"padding-horizont\",\"padding-left\",\"padding-right\",\"padding-top\",\"padding-vert\",\"page\",\"page!</a\",\"page.versionhref\",\"pager\",\"pager-click\",\"pane\",\"paragraph\",\"parallel\",\"param\",\"paramet\",\"parent\",\"parent'\",\"parseint(window.localstorage['lastactiveproject\",\"part\",\"parti\",\"pass\",\"passag\",\"password\",\"past\",\"path\",\"patient\",\"pattern\",\"penalti\",\"peopl\",\"per\",\"percent\",\"percentag\",\"perform\",\"period\",\"permiss\",\"persist\",\"person\",\"peski\",\"phone\",\"phonegap\",\"phonegap.j\",\"phonegap/cordova\",\"phonegap/cordova/trigger.io\",\"phonegap](http://phonegap.com\",\"photo\",\"php\",\"phrase\",\"pick\",\"pictur\",\"piec\",\"pinch\",\"pinch-to-zoom\",\"pinchin\",\"pinchout\",\"pink\",\"pixel\",\"place\",\"placehold\",\"placeholder-icon\",\"placeholder=\\\"what\",\"plai\",\"plain\",\"plan\",\"planet\",\"platform\",\"platform'\",\"platform-specif\",\"platform/devic\",\"platforms/android\",\"platforms/android/androidmanifest.xml\",\"platforms/android/bin\",\"platforms/android/bin/helloworld-release-unsigned.apk\",\"platforms/io\",\"platforms/ios/www\",\"platforms/platform\",\"playthrough\",\"pleas\",\"plu\",\"plug\",\"plugin\",\"plugin](https://github.com/ionic-team/ionic-plugins-keyboard\",\"plutonium\",\"point\",\"pointer\",\"polish\",\"polyfil\",\"pop\",\"popin\",\"popular\",\"popup\",\"popup-template.html\",\"portion\",\"portrait\",\"posit\",\"positton\",\"possibl\",\"potenti\",\"power\",\"practic\",\"pre-mad\",\"predefin\",\"predict\",\"prefer\",\"prepar\",\"present\",\"press\",\"pretti\",\"prevent\",\"preview\",\"previou\",\"previous\",\"princess\",\"prioriti\",\"privat\",\"pro-am\",\"probabl\",\"problem\",\"process\",\"product\",\"program\",\"programat\",\"programmat\",\"progress\",\"project\",\"project.titl\",\"project](http://github.com/ionic-team/ionic-angular-cordova-se\",\"projects.al\",\"projects.newproject(projecttitl\",\"projects.save($scope.project\",\"projects.setlastactiveindex(index\",\"projectstr\",\"projecttitl\",\"promis\",\"prompt\",\"prompt('project\",\"prompt('your\",\"prompt(opt\",\"propag\",\"proper\",\"properli\",\"properti\",\"proprietari\",\"prove\",\"provid\",\"pseudo-class\",\"publish\",\"publishing](publishing.html\",\"pull\",\"pull-right\",\"pull-to-refresh\",\"pulling-icon\",\"pulling-text\",\"pumpkin\",\"punch-out\",\"purchas\",\"pure\",\"purpos\",\"push\",\"put\",\"python\",\"quadrupl\",\"qualiti\",\"quest\",\"question\",\"questions?</h3\",\"quick\",\"quickest\",\"quickli\",\"quit\",\"quot;pages&quot\",\"r.c\",\"r2-d2\",\"radio\",\"radio-button\",\"radio-icon\",\"radio](http://docs.angularjs.org/api/ng/input/input[radio\",\"rai\",\"raider\",\"rail\",\"rancher\",\"random\",\"rang\",\"ratio\",\"raw\",\"re\",\"reach\",\"react\",\"read\",\"reader\",\"readi\",\"ready([callback\",\"ready(callback\",\"ready-mad\",\"real\",\"realest\",\"realist\",\"realiz\",\"realli\",\"reason\",\"rebuild\",\"rebuilt\",\"recalcul\",\"recap\",\"receiv\",\"recent\",\"recommend\",\"record\",\"recreat\",\"rect\",\"rectangl\",\"rectcontains(x\",\"red\",\"redirectto\",\"reduc\",\"refer\",\"refresh\",\"refreshing-icon\",\"refreshing-text\",\"regard\",\"region\",\"regist\",\"registerbackbuttonaction(callback\",\"rel\",\"relat\",\"releas\",\"remain\",\"rememb\",\"rememberscrollposit\",\"rememberscrollposition(id\",\"remot\",\"remov\",\"remove()](#remov\",\"renam\",\"render\",\"reorder\",\"repeat\",\"replac\",\"repo\",\"repres\",\"request\",\"requestanimationfram\",\"requestanimationframe(callback)(alia\",\"requestanimationframe](https://developer.mozilla.org/en-us/docs/web/api/window.requestanimationfram\",\"requir\",\"resav\",\"reset\",\"resiz\",\"resolv\",\"resourc\",\"respect\",\"respond\",\"respons\",\"responsive-grid-break\",\"responsive-lg\",\"responsive-md\",\"responsive-sm\",\"rest\",\"restart\",\"restrict\",\"result\",\"resultingli\",\"resuppli\",\"retain\",\"return\",\"reus\",\"reusabl\",\"reveal\",\"revers\",\"right\",\"right-buttons&quot;&gt\",\"right-buttons=\\\"rightbutton\",\"rightbutton\",\"rite\",\"rm\",\"roadmap\",\"room\",\"root\",\"rootscop\",\"rose\",\"rotat\",\"roughli\",\"rout\",\"routeprovider.otherwis\",\"routeprovider.when\",\"routeprovider.when('/main\",\"router\",\"router'\",\"row\",\"royal\",\"rsa\",\"rubi\",\"rule\",\"run\",\"safari\",\"safe\",\"sai\",\"sake\",\"same\",\"sampl\",\"sans-serif\",\"sass\",\"sass](/tutorials/customizing-ionic-with-sass\",\"sass](http://sass-lang.com\",\"sass](http://sass-lang.com/guid\",\"sass](http://sass-lang.com/instal\",\"save\",\"scale\",\"scenario\",\"scientist\",\"scope\",\"scope.$broadcast('scroll.infinitescrollcomplet\",\"scope.$broadcast('scroll.refreshcomplet\",\"scope.$broadcast('slidebox.nextslid\",\"scope.$broadcast('slidebox.prevslid\",\"scope.$on('$destroi\",\"scope.$on('modal.hid\",\"scope.$on('modal.remov\",\"scope.$on('statechangesuccess\",\"scope.$watch('sidemenucontroller.getopenratio\",\"scope.act\",\"scope.activeproject\",\"scope.activeproject.tasks.push\",\"scope.closemod\",\"scope.closenewtask\",\"scope.createtask\",\"scope.data\",\"scope.data.respons\",\"scope.data.wifi\",\"scope.dorefresh\",\"scope.getitemheight\",\"scope.getprevioustitl\",\"scope.goback\",\"scope.hid\",\"scope.item\",\"scope.items.push('item\",\"scope.items.splice(fromindex\",\"scope.items.splice(toindex\",\"scope.leftbutton\",\"scope.loadmor\",\"scope.mod\",\"scope.modal.hid\",\"scope.modal.remov\",\"scope.modal.show\",\"scope.moveitem\",\"scope.newproject\",\"scope.newtask\",\"scope.next\",\"scope.nextslid\",\"scope.openmod\",\"scope.project\",\"scope.projects.length-1\",\"scope.projects.push(newproject\",\"scope.projects[projects.getlastactiveindex\",\"scope.rightbutton\",\"scope.scrollmaintotop\",\"scope.scrollsmalltotop\",\"scope.scrolltop\",\"scope.selectproject\",\"scope.selectproject(newproject\",\"scope.selecttabwithindex\",\"scope.setnavtitl\",\"scope.show\",\"scope.showalert\",\"scope.showconfirm\",\"scope.showdeletebutton\",\"scope.showpopup\",\"scope.slidechang\",\"scope.task\",\"scope.taskmod\",\"scope.taskmodal.hid\",\"scope.taskmodal.show\",\"scope.tasks.push\",\"scope.toggleleft\",\"scope.toggleleftsidemenu\",\"scope.toggleproject\",\"screen\",\"screenshot\",\"script\",\"scroll\",\"scroll.refreshcomplet\",\"scrollabl\",\"scrollbar\",\"scrollbar-i\",\"scrollbar-x\",\"scrollbottom([shouldanim\",\"scrollby(left\",\"scrollctrl($scop\",\"scroller\",\"scrollto(left\",\"scrolltop([shouldanim\",\"scrolltorememberedposit\",\"scrolltorememberedposition([shouldanim\",\"scrollview\",\"scrollview'\",\"scss\",\"scss/app.scss\",\"scss/app.scss:css/app.css\",\"scss/ionic\",\"scss/ionic/ionic.scss\",\"scss/ionic/ionicon\",\"sdk\",\"second\",\"secondari\",\"secret\",\"section\",\"see\",\"seed\",\"seem\",\"seen\",\"select\",\"select(index\",\"selectedindex\",\"self\",\"self-contain\",\"send\",\"separ\",\"server\",\"servic\",\"set\",\"set/get\",\"setlastactiveindex\",\"settitle(titl\",\"setup\",\"sever\",\"sha1\",\"sha1withrsa\",\"shadow\",\"share\",\"sheet\",\"sheet](https://s3.amazonaws.com/ionicframework.com/docs/controllers/actionsheet.gif\",\"shell\",\"ship\",\"shop\",\"short\",\"shot\",\"shouldanim\",\"shouldchangehistori\",\"shoulden\",\"shoulder\",\"shouldshow\",\"show\",\"show(opt\",\"show-delet\",\"show-pag\",\"show-reord\",\"showbackbutton([show\",\"showbar(show\",\"showcas\",\"showdelete([showreord\",\"showfullscreen\",\"shown\",\"showreord\",\"showreorder([showreord\",\"showstatusbar\",\"showstatusbar(shouldshow\",\"siames\",\"sibl\",\"side\",\"side=\\\"left\",\"sidemenu\",\"sigalg\",\"sign\",\"signing](http://developer.android.com/tools/publishing/app-signing.html\",\"silverlight\",\"similar\",\"similarli\",\"simpl\",\"simplehttpserv\",\"simpli\",\"simplic\",\"simplifi\",\"simul\",\"singl\",\"sit\",\"site\",\"site.latest_release_d\",\"site.latest_vers\",\"site.recommended_cordova_vers\",\"size\",\"skip\",\"skittl\",\"skull\",\"slap\",\"sleev\",\"slick\",\"slide\",\"slide(to\",\"slide-box\",\"slide-in-left\",\"slide-in-right\",\"slide-in-up\",\"slide-interv\",\"slide-left-right\",\"slide-left-right-ios7\",\"slide-out-left\",\"slide-out-right\",\"slide-right-left\",\"slide-right-left-ios7\",\"slide-up\",\"slidebox\",\"slidebox](https://s3.amazonaws.com/ionicframework.com/docs/controllers/slidebox.gif\",\"slider\",\"slider-slid\",\"slidescount\",\"slimer\",\"slip\",\"slow\",\"slowli\",\"small\",\"smaller\",\"smallest\",\"smartphon\",\"smash\",\"smooth\",\"snicker\",\"softwar\",\"solut\",\"someon\",\"someth\",\"sometim\",\"somewher\",\"soon\",\"sourc\",\"space\",\"span/defin\",\"spark\",\"speak\",\"specif\",\"specifi\",\"spectrum\",\"speed\",\"spend\",\"spin\",\"spirit\",\"spotifi\",\"spud\",\"spy\",\"squar\",\"src=\\\"cordova.j\",\"src=\\\"https://code.ionicframework.com/assets/img/app_icon.png\",\"stabl\",\"stack\",\"stai\",\"stand\",\"standard\",\"start\",\"startapp\",\"startup\",\"state\",\"state('index\",\"state('mus\",\"stateprovid\",\"statu\",\"statusbar\",\"statusbar.hid\",\"step\",\"steps:</h5\",\"stick\",\"still\",\"stop\",\"storag\",\"store\",\"straight-to-th\",\"straightforward\",\"stream\",\"stretch\",\"string\",\"strong\",\"strongli\",\"structur\",\"stuff\",\"style\",\"stylesheet\",\"sub\",\"sub-titl\",\"subfoot\",\"subhead\",\"submit\",\"subscrib\",\"subsequ\",\"substitut\",\"subtitl\",\"success(function(newitem\",\"successfulli\",\"such\",\"sudo\",\"suffic\",\"suggest\",\"sum\",\"super\",\"suppli\",\"support\",\"sure\",\"surpris\",\"surround\",\"swatch\",\"swimmingli\",\"swipe\",\"swipedown\",\"swipeleft\",\"swiperight\",\"swipeup\",\"switch\",\"switch'\",\"syntax\",\"system\",\"t\",\"tab\",\"tab&#39;\",\"tab'\",\"tab-item\",\"tabbar\",\"tabl\",\"tablet\",\"tabs-dang\",\"tabs-dark\",\"tabs-default\",\"tabs-icon-left\",\"tabs-icon-onli\",\"tabs-icon-top\",\"tabs-info\",\"tabs-item-hid\",\"tabs-posit\",\"tabs-primari\",\"tabs-secondari\",\"tabs-success\",\"tabs-warn\",\"tag\",\"take\",\"tale\",\"talk\",\"taller\",\"tallest\",\"tap\",\"tappabl\",\"target\",\"targetel\",\"task\",\"task.titl\",\"task</button\",\"task</h1\",\"tast\",\"tataouin\",\"teach\",\"technic\",\"technolog\",\"tell\",\"templ\",\"templat\",\"templatestr\",\"templateurl\",\"temporarili\",\"ten\",\"tend\",\"term\",\"termin\",\"test\",\"tests](https://github.com/ionic-team/ionic/blob/master/test/unit/utils/tap.unit.j\",\"text\",\"text-align\",\"text-onli\",\"textarea\",\"textearea\",\"textnod\",\"thank\",\"that'\",\"theme\",\"themselv\",\"then(function(mod\",\"then(function(password\",\"then(function(r\",\"theoret\",\"there'\",\"therefor\",\"they'll\",\"they'r\",\"thing\",\"think\",\"thinkster.io\",\"third\",\"third-parti\",\"those\",\"though\",\"thought\",\"thousand\",\"three\",\"throttl\",\"through\",\"throughout\",\"throw\",\"thrown\",\"thumbnail\",\"ti\",\"tie\",\"time\",\"timeout\",\"timeout(funct\",\"tini\",\"titl\",\"title</h1\",\"title=\\\"'hom\",\"title=&quot;mytitle&quot;&gt\",\"titletext\",\"todai\",\"todo\",\"todo](https://s3.amazonaws.com/ionicframework.com/guide/0.1.0/5-play2.png\",\"todoctrl\",\"togeth\",\"toggl\",\"toggle-assert\",\"toggle-calm\",\"toggle-class\",\"toggleleft([isopen\",\"toggleright([isopen\",\"toindex\",\"told\",\"ton\",\"tool\",\"tools'\",\"tools](http://jquerymobile.com\",\"top\",\"topbar\",\"topic\",\"touch\",\"touch-ev\",\"touch/click\",\"touchcancel\",\"touchend\",\"touchmov\",\"touchstart\",\"toughest\",\"toward\",\"track\",\"tracking_express\",\"tradit\",\"transfer\",\"transform\",\"transformend\",\"transformstart\",\"transit\",\"transpar\",\"trick\",\"trigger\",\"trigger(eventtyp\",\"trigger.io\",\"troubl\",\"true\",\"try\",\"tulli\",\"turn\",\"tutori\",\"tutorials/customizing-ionic-with-sass\",\"tutorials/fade-status-bar\",\"tutorials/fetching-from-a-remote-fe\",\"tutorials/fullscreen-app\",\"tutorials/intro-tutori\",\"tweak\",\"twinki\",\"twitter\",\"twix\",\"two\",\"ty\",\"type\",\"type=\\\"submit\",\"type=\\\"text\",\"type=\\\"text/ng-templ\",\"typic\",\"tyson'\",\"ubuntu\",\"ugli\",\"ui\",\"ui-router&#39;\",\"ui-sref\",\"ui-view\",\"uiwebview\",\"un-hidden\",\"undefin\",\"under\",\"underli\",\"underneath\",\"understand\",\"unfortun\",\"uniqu\",\"unit\",\"unless\",\"unlik\",\"unnecessari\",\"unsign\",\"until\",\"up\",\"updat\",\"upgrad\",\"upload\",\"url\",\"us\",\"usabl\",\"usag\",\"usb\",\"useitems(item\",\"user\",\"user&#39;\",\"user'\",\"user-interfac\",\"usernam\",\"usual\",\"utapau\",\"util\",\"v\",\"valid\",\"valu\",\"value=\\\"tru\",\"var\",\"variabl\",\"variables](http://sass-lang.com/guide#vari\",\"varieti\",\"variou\",\"vendor\",\"venkman\",\"verbos\",\"veri\",\"verifi\",\"version\",\"versitil\",\"vertic\",\"video\",\"view\",\"view&#39;\",\"view](https://ionicframework.com/docs/api/directive/ionscrol\",\"viewport\",\"virtual\",\"visibl\",\"vision\",\"visit\",\"visual\",\"vital\",\"wai\",\"wait\",\"walk\",\"want\",\"watch\",\"we'd\",\"we'll\",\"we'r\",\"we'v\",\"weather\",\"web\",\"web-dev\",\"webkit\",\"webpag\",\"websit\",\"webview\",\"week\",\"weekend\",\"weezer\",\"welcom\",\"well\",\"we’v\",\"what'\",\"whatev\",\"whenev\",\"wherea\",\"whether\",\"which\",\"while(tru\",\"whitelist\",\"whole\",\"wi-fi\",\"wide\",\"width\",\"wifi\",\"wild\",\"wild-west\",\"win\",\"window\",\"window.load\",\"window.localstorage['didtutori\",\"window.localstorage['lastactiveproject\",\"window.localstorage['project\",\"window.location.hash\",\"windows](http://git-scm.com/download/win\",\"winston\",\"wire\",\"wireless\",\"wish\",\"within\",\"without\",\"won't\",\"wonder\",\"word\",\"work\",\"world\",\"worri\",\"wouldn't\",\"wrap\",\"wrapper\",\"wrench\",\"write\",\"written\",\"wrong\",\"www\",\"www/css/style.css\",\"www/index.html\",\"www/j\",\"www/js/app.j\",\"x\",\"x,y\",\"x-offset\",\"x-valu\",\"x-wing\",\"x1\",\"x1,y1,x2,y2\",\"x2\",\"xcode\",\"xml\",\"y\",\"y-offset\",\"y-valu\",\"y-wing\",\"y1\",\"y2\",\"yavin\",\"year\",\"yellow\",\"yep\",\"you'd\",\"you'll\",\"you'r\",\"you'v\",\"yourself\",\"you’d\",\"z-index\",\"zelda\",\"zero\",\"zip\",\"zipalign\",\"zoom\"],\"pipeline\":[\"stopWordFilter\",\"stemmer\"]}}\n"
  },
  {
    "path": "content/dist/bundles/ionic.css",
    "content": "audio,\ncanvas,\nprogress,\nvideo {\n  vertical-align: baseline; }\n\naudio:not([controls]) {\n  display: none;\n  height: 0; }\n\nb,\nstrong {\n  font-weight: bold; }\n\nimg {\n  max-width: 100%;\n  border: 0; }\n\nsvg:not(:root) {\n  overflow: hidden; }\n\nfigure {\n  margin: 1em 40px; }\n\nhr {\n  height: 1px;\n  border-width: 0;\n  box-sizing: content-box; }\n\npre {\n  overflow: auto; }\n\ncode,\nkbd,\npre,\nsamp {\n  font-family: monospace, monospace;\n  font-size: 1em; }\n\nlabel,\ninput,\nselect,\ntextarea {\n  font-family: inherit;\n  line-height: normal; }\n\ntextarea {\n  overflow: auto;\n  height: auto;\n  font: inherit;\n  color: inherit; }\n\nform,\ninput,\noptgroup,\nselect {\n  margin: 0;\n  font: inherit;\n  color: inherit; }\n\nhtml input[type=\"button\"],\ninput[type=\"reset\"],\ninput[type=\"submit\"] {\n  cursor: pointer;\n  -webkit-appearance: button; }\n\na,\na div,\na span,\na ion-icon,\na ion-label,\nbutton,\nbutton div,\nbutton span,\nbutton ion-icon,\nbutton ion-label,\n[tappable],\n[tappable] div,\n[tappable] span,\n[tappable] ion-icon,\n[tappable] ion-label,\ninput,\ntextarea {\n  -ms-touch-action: manipulation;\n  touch-action: manipulation; }\n\na ion-label,\nbutton ion-label,\n[tappable] ion-label {\n  pointer-events: none; }\n\nbutton {\n  border: 0;\n  font-family: inherit;\n  font-style: inherit;\n  font-variant: inherit;\n  line-height: 1;\n  text-transform: none;\n  cursor: pointer;\n  -webkit-appearance: button; }\n\na[disabled],\nbutton[disabled],\nhtml input[disabled] {\n  cursor: default; }\n\nbutton::-moz-focus-inner,\ninput::-moz-focus-inner {\n  padding: 0;\n  border: 0; }\n\ninput[type=\"checkbox\"],\ninput[type=\"radio\"] {\n  padding: 0;\n  box-sizing: border-box; }\n\ninput[type=\"number\"]::-webkit-inner-spin-button,\ninput[type=\"number\"]::-webkit-outer-spin-button {\n  height: auto; }\n\ninput[type=\"search\"]::-webkit-search-cancel-button,\ninput[type=\"search\"]::-webkit-search-decoration {\n  -webkit-appearance: none; }\n\ntable {\n  border-collapse: collapse;\n  border-spacing: 0; }\n\ntd,\nth {\n  padding: 0; }\n\n* {\n  box-sizing: border-box;\n  -webkit-tap-highlight-color: transparent;\n  -webkit-tap-highlight-color: transparent;\n  -webkit-touch-callout: none; }\n\nhtml {\n  width: 100%;\n  height: 100%;\n  -webkit-text-size-adjust: 100%;\n  -ms-text-size-adjust: 100%;\n  text-size-adjust: 100%; }\n\nbody {\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  -ms-user-select: none;\n  user-select: none;\n  position: fixed;\n  overflow: hidden;\n  margin: 0;\n  padding: 0;\n  width: 100%;\n  max-width: 100%;\n  height: 100%;\n  max-height: 100%;\n  -webkit-font-smoothing: antialiased;\n  font-smoothing: antialiased;\n  text-rendering: optimizeLegibility;\n  -webkit-user-drag: none;\n  -ms-content-zooming: none;\n  -ms-touch-action: manipulation;\n  touch-action: manipulation;\n  word-wrap: break-word;\n  -webkit-text-size-adjust: none;\n  -ms-text-size-adjust: none;\n  text-size-adjust: none; }\n\nion-app,\nion-nav,\nion-tab,\nion-tabs,\n.app-root {\n  position: absolute;\n  top: 0;\n  left: 0;\n  z-index: 0;\n  display: block;\n  overflow: hidden;\n  width: 100%;\n  height: 100%; }\n\nion-tab scroll-cotent {\n  display: none; }\n\nion-tab {\n  -webkit-transform: translateY(-200%);\n  transform: translateY(-200%); }\n\nion-tab.show-tab {\n  -webkit-transform: translateY(0);\n  transform: translateY(0); }\n\nion-tab.show-tab scroll-cotent {\n  display: block; }\n\nion-page {\n  position: absolute;\n  top: 0;\n  left: 0;\n  display: block;\n  width: 100%;\n  height: 100%;\n  opacity: 0; }\n\nion-content {\n  position: relative;\n  top: 0;\n  left: 0;\n  display: block;\n  width: 100%;\n  height: 100%; }\n\nion-page > ion-content {\n  position: absolute; }\n\nion-page scroll-content {\n  display: none; }\n\nion-page.show-page {\n  opacity: 1; }\n\nion-page.show-page scroll-content {\n  display: block; }\n\nion-header {\n  position: absolute;\n  top: 0;\n  left: 0;\n  z-index: 10;\n  display: block;\n  width: 100%; }\n\nion-toolbar {\n  position: relative;\n  z-index: 10; }\n\nion-footer {\n  position: absolute;\n  bottom: 0;\n  left: 0;\n  z-index: 10;\n  display: block;\n  width: 100%; }\n\nion-tabbar {\n  position: absolute;\n  bottom: 0;\n  left: 0;\n  z-index: 10;\n  display: -webkit-box;\n  display: -webkit-flex;\n  display: -ms-flexbox;\n  display: flex;\n  width: 100%;\n  opacity: 0; }\n\nion-tabbar.show-tabbar {\n  opacity: 1; }\n\n[tabsPlacement=top] > ion-tabbar {\n  top: 0;\n  bottom: auto; }\n\nscroll-content {\n  position: absolute;\n  top: 0;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  z-index: 1;\n  display: block;\n  overflow-x: hidden;\n  overflow-y: scroll;\n  -webkit-overflow-scrolling: touch;\n  will-change: scroll-position; }\n\nion-content.js-scroll > scroll-content {\n  position: relative;\n  min-height: 100%;\n  overflow-x: initial;\n  overflow-y: initial;\n  -webkit-overflow-scrolling: auto;\n  will-change: initial; }\n\n.disable-scroll ion-page scroll-content {\n  overflow-y: hidden;\n  overflow-x: hidden; }\n\n[nav-viewport],\n[nav-portal],\n[tab-portal],\n.nav-decor {\n  display: none; }\n\n.hide,\n[hidden],\ntemplate {\n  display: none !important; }\n\n.sticky {\n  position: -webkit-sticky;\n  position: sticky;\n  top: 0; }\n\n:focus,\n:active {\n  outline: none; }\n\n.focus-outline :focus {\n  outline: thin dotted;\n  outline-offset: -1px; }\n\n.focus-outline button:focus,\n.focus-outline [button]:focus {\n  border-color: #51a7e8;\n  outline: thin solid #51a7e8;\n  box-shadow: 0 0 8px 0 #51a7e8; }\n\n.focus-outline ion-input :focus {\n  outline: none; }\n\nfocus-ctrl {\n  position: fixed; }\n  focus-ctrl input,\n  focus-ctrl button {\n    position: fixed;\n    top: 1px;\n    left: -9999px;\n    z-index: 9999;\n    width: 9px;\n    pointer-events: none; }\n\nclick-block {\n  position: absolute;\n  top: 0;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  z-index: 9999;\n  display: block;\n  opacity: 0;\n  -webkit-transform: translate3d(0, -100%, 0);\n  transform: translate3d(0, -100%, 0);\n  -webkit-transform: translate3d(0, calc(-100% + 1px), 0);\n  transform: translate3d(0, calc(-100% + 1px), 0); }\n\n.click-block-active {\n  -webkit-transform: translate3d(0, 0, 0);\n  transform: translate3d(0, 0, 0); }\n\nion-backdrop {\n  position: absolute;\n  top: 0;\n  left: 0;\n  z-index: 2;\n  display: block;\n  width: 100%;\n  height: 100%;\n  background-color: #000;\n  opacity: .01;\n  -webkit-transform: translateZ(0);\n  transform: translateZ(0); }\n\nion-backdrop.hide-backdrop {\n  display: none; }\n\nion-grid {\n  display: -webkit-box;\n  display: -webkit-flex;\n  display: -ms-flexbox;\n  display: flex;\n  -webkit-box-orient: vertical;\n  -webkit-box-direction: normal;\n  -webkit-flex-direction: column;\n  -ms-flex-direction: column;\n  flex-direction: column;\n  padding: 5px;\n  width: 100%; }\n\nion-row {\n  display: -webkit-box;\n  display: -webkit-flex;\n  display: -ms-flexbox;\n  display: flex;\n  width: 100%; }\n  ion-row[wrap] {\n    -webkit-flex-wrap: wrap;\n    -ms-flex-wrap: wrap;\n    flex-wrap: wrap; }\n  ion-row[top] {\n    -webkit-box-align: start;\n    -webkit-align-items: flex-start;\n    -ms-flex-align: start;\n    align-items: flex-start; }\n  ion-row[bottom] {\n    -webkit-box-align: end;\n    -webkit-align-items: flex-end;\n    -ms-flex-align: end;\n    align-items: flex-end; }\n  ion-row[center] {\n    -webkit-box-align: center;\n    -webkit-align-items: center;\n    -ms-flex-align: center;\n    align-items: center; }\n  ion-row[stretch] {\n    -webkit-box-align: stretch;\n    -webkit-align-items: stretch;\n    -ms-flex-align: stretch;\n    align-items: stretch; }\n  ion-row[baseline] {\n    -webkit-box-align: baseline;\n    -webkit-align-items: baseline;\n    -ms-flex-align: baseline;\n    align-items: baseline; }\n\nion-col {\n  display: block;\n  -webkit-box-flex: 1;\n  -webkit-flex: 1;\n  -ms-flex: 1;\n  flex: 1;\n  padding: 5px;\n  width: 100%; }\n  ion-col[top] {\n    -webkit-align-self: flex-start;\n    -ms-flex-item-align: start;\n    align-self: flex-start; }\n  ion-col[bottom] {\n    -webkit-align-self: flex-end;\n    -ms-flex-item-align: end;\n    align-self: flex-end; }\n  ion-col[center] {\n    -webkit-align-self: center;\n    -ms-flex-item-align: center;\n    align-self: center; }\n  ion-col[stretch] {\n    -webkit-align-self: stretch;\n    -ms-flex-item-align: stretch;\n    align-self: stretch; }\n  ion-col[baseline] {\n    -webkit-align-self: baseline;\n    -ms-flex-item-align: baseline;\n    align-self: baseline; }\n  ion-col[offset-10] {\n    margin-left: 10%; }\n  ion-col[offset-20] {\n    margin-left: 20%; }\n  ion-col[offset-25] {\n    margin-left: 25%; }\n  ion-col[offset-33], ion-col[offset-34] {\n    margin-left: 33.3333%; }\n  ion-col[offset-50] {\n    margin-left: 50%; }\n  ion-col[offset-66], ion-col[offset-67] {\n    margin-left: 66.6666%; }\n  ion-col[offset-75] {\n    margin-left: 75%; }\n  ion-col[offset-80] {\n    margin-left: 80%; }\n  ion-col[offset-90] {\n    margin-left: 90%; }\n  ion-col[width-10] {\n    -webkit-box-flex: 0;\n    -webkit-flex: 0 0 10%;\n    -ms-flex: 0 0 10%;\n    flex: 0 0 10%;\n    max-width: 10%; }\n  ion-col[width-20] {\n    -webkit-box-flex: 0;\n    -webkit-flex: 0 0 20%;\n    -ms-flex: 0 0 20%;\n    flex: 0 0 20%;\n    max-width: 20%; }\n  ion-col[width-25] {\n    -webkit-box-flex: 0;\n    -webkit-flex: 0 0 25%;\n    -ms-flex: 0 0 25%;\n    flex: 0 0 25%;\n    max-width: 25%; }\n  ion-col[width-33], ion-col[width-34] {\n    -webkit-box-flex: 0;\n    -webkit-flex: 0 0 33.3333%;\n    -ms-flex: 0 0 33.3333%;\n    flex: 0 0 33.3333%;\n    max-width: 33.3333%; }\n  ion-col[width-50] {\n    -webkit-box-flex: 0;\n    -webkit-flex: 0 0 50%;\n    -ms-flex: 0 0 50%;\n    flex: 0 0 50%;\n    max-width: 50%; }\n  ion-col[width-66], ion-col[width-67] {\n    -webkit-box-flex: 0;\n    -webkit-flex: 0 0 66.6666%;\n    -ms-flex: 0 0 66.6666%;\n    flex: 0 0 66.6666%;\n    max-width: 66.6666%; }\n  ion-col[width-75] {\n    -webkit-box-flex: 0;\n    -webkit-flex: 0 0 75%;\n    -ms-flex: 0 0 75%;\n    flex: 0 0 75%;\n    max-width: 75%; }\n  ion-col[width-80] {\n    -webkit-box-flex: 0;\n    -webkit-flex: 0 0 80%;\n    -ms-flex: 0 0 80%;\n    flex: 0 0 80%;\n    max-width: 80%; }\n  ion-col[width-90] {\n    -webkit-box-flex: 0;\n    -webkit-flex: 0 0 90%;\n    -ms-flex: 0 0 90%;\n    flex: 0 0 90%;\n    max-width: 90%; }\n\n@media (max-width: 567px) {\n  [responsive-sm] {\n    -webkit-box-orient: vertical;\n    -webkit-box-direction: normal;\n    -webkit-flex-direction: column;\n    -ms-flex-direction: column;\n    flex-direction: column; }\n    [responsive-sm] ion-col[width-10], [responsive-sm] ion-col[width-20], [responsive-sm] ion-col[width-25], [responsive-sm] ion-col[width-33], [responsive-sm] ion-col[width-34], [responsive-sm] ion-col[width-50], [responsive-sm] ion-col[width-66], [responsive-sm] ion-col[width-67], [responsive-sm] ion-col[width-75], [responsive-sm] ion-col[width-80], [responsive-sm] ion-col[width-90] {\n      -webkit-box-flex: 1;\n      -webkit-flex: 1;\n      -ms-flex: 1;\n      flex: 1;\n      margin-bottom: 15px;\n      margin-left: 0;\n      width: 100%;\n      max-width: 100%; } }\n\n@media (max-width: 767px) {\n  [responsive-md] {\n    -webkit-box-orient: vertical;\n    -webkit-box-direction: normal;\n    -webkit-flex-direction: column;\n    -ms-flex-direction: column;\n    flex-direction: column; }\n    [responsive-md] ion-col[width-10], [responsive-md] ion-col[width-20], [responsive-md] ion-col[width-25], [responsive-md] ion-col[width-33], [responsive-md] ion-col[width-34], [responsive-md] ion-col[width-50], [responsive-md] ion-col[width-66], [responsive-md] ion-col[width-67], [responsive-md] ion-col[width-75], [responsive-md] ion-col[width-80], [responsive-md] ion-col[width-90] {\n      -webkit-box-flex: 1;\n      -webkit-flex: 1;\n      -ms-flex: 1;\n      flex: 1;\n      margin-bottom: 15px;\n      margin-left: 0;\n      width: 100%;\n      max-width: 100%; } }\n\n@media (max-width: 1023px) {\n  [responsive-lg] {\n    -webkit-box-orient: vertical;\n    -webkit-box-direction: normal;\n    -webkit-flex-direction: column;\n    -ms-flex-direction: column;\n    flex-direction: column; }\n    [responsive-lg] ion-col[width-10], [responsive-lg] ion-col[width-20], [responsive-lg] ion-col[width-25], [responsive-lg] ion-col[width-33], [responsive-lg] ion-col[width-34], [responsive-lg] ion-col[width-50], [responsive-lg] ion-col[width-66], [responsive-lg] ion-col[width-67], [responsive-lg] ion-col[width-75], [responsive-lg] ion-col[width-80], [responsive-lg] ion-col[width-90] {\n      -webkit-box-flex: 1;\n      -webkit-flex: 1;\n      -ms-flex: 1;\n      flex: 1;\n      margin-bottom: 15px;\n      margin-left: 0;\n      width: 100%;\n      max-width: 100%; } }\n\nion-icon {\n  display: inline-block;\n  font-size: 1.2em; }\n\nion-icon[small] {\n  min-height: 1.1em;\n  font-size: 1.1em; }\n\nion-img {\n  position: relative;\n  display: -webkit-box;\n  display: -webkit-flex;\n  display: -ms-flexbox;\n  display: flex;\n  overflow: hidden;\n  -webkit-box-align: center;\n  -webkit-align-items: center;\n  -ms-flex-align: center;\n  align-items: center;\n  -webkit-box-pack: center;\n  -webkit-justify-content: center;\n  -ms-flex-pack: center;\n  justify-content: center; }\n\nion-img img {\n  -webkit-flex-shrink: 0;\n  -ms-flex-negative: 0;\n  flex-shrink: 0;\n  min-width: 100%;\n  min-height: 100%; }\n\nion-img .img-placeholder {\n  position: absolute;\n  top: 0;\n  left: 0;\n  width: 100%;\n  height: 100%;\n  background: #eee;\n  -webkit-transition: opacity 200ms;\n  transition: opacity 200ms; }\n\nion-img.img-loaded .img-placeholder {\n  opacity: 0; }\n\nion-infinite-scroll {\n  display: block;\n  width: 100%; }\n\nion-infinite-scroll-content {\n  display: -webkit-box;\n  display: -webkit-flex;\n  display: -ms-flexbox;\n  display: flex;\n  -webkit-box-orient: vertical;\n  -webkit-box-direction: normal;\n  -webkit-flex-direction: column;\n  -ms-flex-direction: column;\n  flex-direction: column;\n  -webkit-box-pack: center;\n  -webkit-justify-content: center;\n  -ms-flex-pack: center;\n  justify-content: center;\n  height: 100%;\n  min-height: 84px;\n  text-align: center; }\n\n.infinite-loading {\n  display: none;\n  margin: 0 0 32px 0;\n  width: 100%; }\n\n.infinite-loading-text {\n  margin: 4px 32px 0 32px;\n  color: #666; }\n\nion-infinite-scroll-content[state=loading] .infinite-loading {\n  display: block; }\n\nion-infinite-scroll-content[state=disabled] {\n  display: none; }\n\nion-loading {\n  position: absolute;\n  top: 0;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  z-index: 1000;\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  -webkit-box-pack: center;\n  -webkit-justify-content: center;\n  -ms-flex-pack: center;\n  justify-content: center; }\n\n.loading-wrapper {\n  z-index: 10;\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  opacity: 0; }\n\nion-menu {\n  position: absolute;\n  top: 0;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  display: none; }\n  ion-menu.show-menu {\n    display: block; }\n\n.menu-inner {\n  position: absolute;\n  top: 0;\n  right: auto;\n  bottom: 0;\n  left: 0;\n  display: -webkit-box;\n  display: -webkit-flex;\n  display: -ms-flexbox;\n  display: flex;\n  -webkit-box-orient: vertical;\n  -webkit-box-direction: normal;\n  -webkit-flex-direction: column;\n  -ms-flex-direction: column;\n  flex-direction: column;\n  width: 304px;\n  -webkit-transform: translate3d(-9999px, 0, 0);\n  transform: translate3d(-9999px, 0, 0); }\n\n.menu-inner > ion-header,\n.menu-inner > ion-content,\n.menu-inner > ion-footer {\n  position: relative; }\n\nion-menu[side=right] > .menu-inner {\n  right: 0;\n  left: auto; }\n\nion-menu ion-backdrop {\n  z-index: -1;\n  display: none;\n  opacity: .1; }\n\n.menu-content {\n  -webkit-transform: translate3d(0, 0, 0);\n  transform: translate3d(0, 0, 0); }\n\n.menu-content-open ion-pane,\n.menu-content-open ion-content,\n.menu-content-open .toolbar {\n  pointer-events: none; }\n\n@media (max-width: 340px) {\n  .menu-inner {\n    width: 264px; } }\n\nion-menu[type=reveal] {\n  z-index: 0; }\n\nion-menu[type=reveal].show-menu .menu-inner {\n  -webkit-transform: translate3d(0, 0, 0);\n  transform: translate3d(0, 0, 0); }\n\nion-menu[type=overlay] {\n  z-index: 80; }\n  ion-menu[type=overlay] .show-backdrop {\n    display: block; }\n\nion-modal {\n  position: absolute;\n  top: 0;\n  left: 0;\n  display: block;\n  width: 100%;\n  height: 100%; }\n  @media not all and (min-width: 768px) and (min-height: 600px) {\n    ion-modal ion-backdrop {\n      visibility: hidden; } }\n\n.modal-wrapper {\n  z-index: 10;\n  height: 100%; }\n  @media only screen and (min-width: 768px) and (min-height: 600px) {\n    .modal-wrapper {\n      position: absolute;\n      top: calc(50% - (500px/2));\n      left: calc(50% - (600px/2));\n      width: 600px;\n      height: 500px; } }\n  @media only screen and (min-width: 768px) and (min-height: 768px) {\n    .modal-wrapper {\n      position: absolute;\n      top: calc(50% - (600px/2));\n      left: calc(50% - (600px/2));\n      width: 600px;\n      height: 600px; } }\n\nion-modal-inner {\n  position: absolute;\n  top: 0;\n  left: 0;\n  display: -webkit-box;\n  display: -webkit-flex;\n  display: -ms-flexbox;\n  display: flex;\n  -webkit-box-orient: vertical;\n  -webkit-box-direction: normal;\n  -webkit-flex-direction: column;\n  -ms-flex-direction: column;\n  flex-direction: column;\n  width: 100%;\n  height: 100%; }\n\n.item-range .item-inner {\n  overflow: visible; }\n\n.item-range .input-wrapper {\n  overflow: visible;\n  -webkit-box-orient: vertical;\n  -webkit-box-direction: normal;\n  -webkit-flex-direction: column;\n  -ms-flex-direction: column;\n  flex-direction: column; }\n\n.item-range ion-range {\n  width: 100%; }\n  .item-range ion-range ion-label {\n    -webkit-align-self: center;\n    -ms-flex-item-align: center;\n    align-self: center; }\n\nion-range {\n  position: relative;\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  ion-range ion-label {\n    -webkit-box-flex: initial;\n    -webkit-flex: initial;\n    -ms-flex: initial;\n    flex: initial; }\n  ion-range ion-icon {\n    min-height: 2.4rem;\n    font-size: 2.4rem;\n    line-height: 1; }\n\n.range-slider {\n  position: relative;\n  -webkit-box-flex: 1;\n  -webkit-flex: 1;\n  -ms-flex: 1;\n  flex: 1;\n  cursor: pointer; }\n\nion-refresher {\n  position: absolute;\n  top: 0;\n  left: 0;\n  z-index: 0;\n  display: none;\n  width: 100%;\n  height: 60px; }\n  ion-refresher.refresher-active {\n    display: block; }\n\n.has-refresher > scroll-content {\n  margin-top: -1px;\n  border-top: 1px solid #ddd;\n  -webkit-transition: all 320ms cubic-bezier(0.36, 0.66, 0.04, 1);\n  transition: all 320ms cubic-bezier(0.36, 0.66, 0.04, 1); }\n\nion-refresher-content {\n  display: -webkit-box;\n  display: -webkit-flex;\n  display: -ms-flexbox;\n  display: flex;\n  -webkit-box-orient: vertical;\n  -webkit-box-direction: normal;\n  -webkit-flex-direction: column;\n  -ms-flex-direction: column;\n  flex-direction: column;\n  -webkit-box-pack: center;\n  -webkit-justify-content: center;\n  -ms-flex-pack: center;\n  justify-content: center;\n  height: 100%; }\n\n.refresher-pulling,\n.refresher-refreshing {\n  display: none;\n  width: 100%; }\n\n.refresher-pulling-icon,\n.refresher-refreshing-icon {\n  font-size: 30px;\n  text-align: center;\n  color: #000;\n  -webkit-transform-origin: center;\n  transform-origin: center;\n  -webkit-transition: 200ms;\n  transition: 200ms; }\n\n.refresher-pulling-text,\n.refresher-refreshing-text {\n  font-size: 16px;\n  text-align: center;\n  color: #000; }\n\nion-refresher-content[state=pulling] .refresher-pulling {\n  display: block; }\n\nion-refresher-content[state=ready] .refresher-pulling {\n  display: block; }\n\nion-refresher-content[state=ready] .refresher-pulling-icon {\n  -webkit-transform: rotate(180deg);\n  transform: rotate(180deg); }\n\nion-refresher-content[state=refreshing] .refresher-refreshing {\n  display: block; }\n\nion-refresher-content[state=cancelling] .refresher-pulling {\n  display: block; }\n\nion-refresher-content[state=cancelling] .refresher-pulling-icon {\n  -webkit-transform: scale(0);\n  transform: scale(0); }\n\nion-refresher-content[state=completing] .refresher-refreshing {\n  display: block; }\n\nion-refresher-content[state=completing] .refresher-refreshing-icon {\n  -webkit-transform: scale(0);\n  transform: scale(0); }\n\nion-scroll {\n  position: relative;\n  display: block; }\n  ion-scroll.scroll-x scroll-content {\n    overflow-x: auto; }\n  ion-scroll.scroll-y scroll-content {\n    overflow-y: auto; }\n  ion-scroll[center] scroll-content {\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    -webkit-box-pack: center;\n    -webkit-justify-content: center;\n    -ms-flex-pack: center;\n    justify-content: center; }\n  ion-scroll scroll-content {\n    position: absolute;\n    top: 0;\n    right: 0;\n    bottom: 0;\n    left: 0;\n    overflow-y: hidden;\n    overflow-x: hidden;\n    -webkit-overflow-scrolling: touch;\n    will-change: scroll-position; }\n\n.hidden-show-when {\n  display: none !important; }\n\n.hidden-hide-when {\n  display: none !important; }\n\n/**\n * Swiper 3.1.2\n * Most modern mobile touch slider and framework with hardware accelerated transitions\n *\n * http://www.idangero.us/swiper/\n *\n * Copyright 2015, Vladimir Kharlampidi\n * The iDangero.us\n * http://www.idangero.us/\n *\n * Licensed under MIT\n *\n * Released on: August 22, 2015\n */\n.swiper-container {\n  margin: 0 auto;\n  position: relative;\n  overflow: hidden;\n  /* Fix of Webkit flickering */\n  z-index: 1; }\n\n.swiper-container-no-flexbox .swiper-slide {\n  float: left; }\n\n.swiper-container-vertical > .swiper-wrapper {\n  -webkit-box-orient: vertical;\n  -ms-flex-direction: column;\n  -webkit-flex-direction: column;\n  flex-direction: column; }\n\n.swiper-wrapper {\n  position: relative;\n  width: 100%;\n  height: 100%;\n  z-index: 1;\n  display: -webkit-box;\n  display: -ms-flexbox;\n  display: -webkit-flex;\n  display: flex;\n  -webkit-transition-property: -webkit-transform;\n  transition-property: transform;\n  box-sizing: content-box; }\n\n.swiper-container-android .swiper-slide,\n.swiper-wrapper {\n  -webkit-transform: translate3d(0px, 0, 0);\n  transform: translate3d(0px, 0, 0); }\n\n.swiper-container-multirow > .swiper-wrapper {\n  -webkit-box-lines: multiple;\n  -moz-box-lines: multiple;\n  -ms-flex-wrap: wrap;\n  -webkit-flex-wrap: wrap;\n  flex-wrap: wrap; }\n\n.swiper-container-free-mode > .swiper-wrapper {\n  -webkit-transition-timing-function: ease-out;\n  transition-timing-function: ease-out;\n  margin: 0 auto; }\n\n.swiper-slide {\n  -webkit-flex-shrink: 0;\n  -ms-flex: 0 0 auto;\n  -webkit-flex-shrink: 0;\n  -ms-flex-negative: 0;\n  flex-shrink: 0;\n  width: 100%;\n  height: 100%;\n  position: relative; }\n\n/* a11y */\n.swiper-container .swiper-notification {\n  position: absolute;\n  left: 0;\n  top: 0;\n  pointer-events: none;\n  opacity: 0;\n  z-index: -1000; }\n\n/* IE10 Windows Phone 8 Fixes */\n.swiper-wp8-horizontal {\n  -ms-touch-action: pan-y;\n  touch-action: pan-y; }\n\n.swiper-wp8-vertical {\n  -ms-touch-action: pan-x;\n  touch-action: pan-x; }\n\n/* Arrows */\n.swiper-button-prev,\n.swiper-button-next {\n  position: absolute;\n  top: 50%;\n  width: 27px;\n  height: 44px;\n  margin-top: -22px;\n  z-index: 10;\n  cursor: pointer;\n  background-size: 27px 44px;\n  background-position: center;\n  background-repeat: no-repeat; }\n\n.swiper-button-prev.swiper-button-disabled,\n.swiper-button-next.swiper-button-disabled {\n  opacity: .35;\n  cursor: auto;\n  pointer-events: none; }\n\n.swiper-button-prev,\n.swiper-container-rtl .swiper-button-next {\n  background-image: url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%2027%2044'%3E%3Cpath%20d%3D'M0%2C22L22%2C0l2.1%2C2.1L4.2%2C22l19.9%2C19.9L22%2C44L0%2C22L0%2C22L0%2C22z'%20fill%3D'%23007aff'%2F%3E%3C%2Fsvg%3E\");\n  left: 10px;\n  right: auto; }\n\n.swiper-button-prev.swiper-button-black,\n.swiper-container-rtl .swiper-button-next.swiper-button-black {\n  background-image: url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%2027%2044'%3E%3Cpath%20d%3D'M0%2C22L22%2C0l2.1%2C2.1L4.2%2C22l19.9%2C19.9L22%2C44L0%2C22L0%2C22L0%2C22z'%20fill%3D'%23000000'%2F%3E%3C%2Fsvg%3E\"); }\n\n.swiper-button-prev.swiper-button-white,\n.swiper-container-rtl .swiper-button-next.swiper-button-white {\n  background-image: url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%2027%2044'%3E%3Cpath%20d%3D'M0%2C22L22%2C0l2.1%2C2.1L4.2%2C22l19.9%2C19.9L22%2C44L0%2C22L0%2C22L0%2C22z'%20fill%3D'%23ffffff'%2F%3E%3C%2Fsvg%3E\"); }\n\n.swiper-button-next,\n.swiper-container-rtl .swiper-button-prev {\n  background-image: url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%2027%2044'%3E%3Cpath%20d%3D'M27%2C22L27%2C22L5%2C44l-2.1-2.1L22.8%2C22L2.9%2C2.1L5%2C0L27%2C22L27%2C22z'%20fill%3D'%23007aff'%2F%3E%3C%2Fsvg%3E\");\n  right: 10px;\n  left: auto; }\n\n.swiper-button-next.swiper-button-black,\n.swiper-container-rtl .swiper-button-prev.swiper-button-black {\n  background-image: url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%2027%2044'%3E%3Cpath%20d%3D'M27%2C22L27%2C22L5%2C44l-2.1-2.1L22.8%2C22L2.9%2C2.1L5%2C0L27%2C22L27%2C22z'%20fill%3D'%23000000'%2F%3E%3C%2Fsvg%3E\"); }\n\n.swiper-button-next.swiper-button-white,\n.swiper-container-rtl .swiper-button-prev.swiper-button-white {\n  background-image: url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%2027%2044'%3E%3Cpath%20d%3D'M27%2C22L27%2C22L5%2C44l-2.1-2.1L22.8%2C22L2.9%2C2.1L5%2C0L27%2C22L27%2C22z'%20fill%3D'%23ffffff'%2F%3E%3C%2Fsvg%3E\"); }\n\n/* Pagination Styles */\n.swiper-pagination {\n  position: absolute;\n  text-align: center;\n  -webkit-transition: 300ms;\n  transition: 300ms;\n  -webkit-transform: translate3d(0, 0, 0);\n  transform: translate3d(0, 0, 0);\n  z-index: 10; }\n\n.swiper-pagination.swiper-pagination-hidden {\n  opacity: 0; }\n\n.swiper-pagination-bullet {\n  width: 8px;\n  height: 8px;\n  display: inline-block;\n  border-radius: 100%;\n  background: #000;\n  opacity: .2; }\n\nbutton.swiper-pagination-bullet {\n  border: 0;\n  margin: 0;\n  padding: 0;\n  box-shadow: none;\n  -moz-appearance: none;\n  -ms-appearance: none;\n  -webkit-appearance: none;\n  appearance: none; }\n\n.swiper-pagination-clickable .swiper-pagination-bullet {\n  cursor: pointer; }\n\n.swiper-pagination-white .swiper-pagination-bullet {\n  background: #fff; }\n\n.swiper-pagination-bullet-active {\n  opacity: 1; }\n\n.swiper-pagination-white .swiper-pagination-bullet-active {\n  background: #fff; }\n\n.swiper-pagination-black .swiper-pagination-bullet-active {\n  background: #000; }\n\n.swiper-container-vertical > .swiper-pagination {\n  right: 10px;\n  top: 50%;\n  -webkit-transform: translate3d(0px, -50%, 0);\n  transform: translate3d(0px, -50%, 0); }\n\n.swiper-container-vertical > .swiper-pagination .swiper-pagination-bullet {\n  margin: 5px 0;\n  display: block; }\n\n.swiper-container-horizontal > .swiper-pagination {\n  bottom: 20px;\n  left: 0;\n  width: 100%; }\n\n.swiper-container-horizontal > .swiper-pagination .swiper-pagination-bullet {\n  margin: 0 5px; }\n\n/* 3D Container */\n.swiper-container-3d {\n  -webkit-perspective: 1200px;\n  -o-perspective: 1200px;\n  perspective: 1200px; }\n\n.swiper-container-3d .swiper-wrapper,\n.swiper-container-3d .swiper-slide,\n.swiper-container-3d .swiper-slide-shadow-left,\n.swiper-container-3d .swiper-slide-shadow-right,\n.swiper-container-3d .swiper-slide-shadow-top,\n.swiper-container-3d .swiper-slide-shadow-bottom,\n.swiper-container-3d .swiper-cube-shadow {\n  -webkit-transform-style: preserve-3d;\n  -ms-transform-style: preserve-3d;\n  transform-style: preserve-3d; }\n\n.swiper-container-3d .swiper-slide-shadow-left,\n.swiper-container-3d .swiper-slide-shadow-right,\n.swiper-container-3d .swiper-slide-shadow-top,\n.swiper-container-3d .swiper-slide-shadow-bottom {\n  position: absolute;\n  left: 0;\n  bottom: 0;\n  width: 100%;\n  height: 100%;\n  pointer-events: none;\n  z-index: 10; }\n\n.swiper-container-3d .swiper-slide-shadow-left {\n  background-image: -webkit-gradient(linear, left top, right top, from(rgba(0, 0, 0, 0.5)), to(transparent));\n  /* Safari 4+, Chrome */\n  background-image: -webkit-linear-gradient(right, rgba(0, 0, 0, 0.5), transparent);\n  /* Chrome 10+, Safari 5.1+, iOS 5+ */\n  /* Firefox 3.6-15 */\n  /* Opera 11.10-12.00 */\n  background-image: linear-gradient(to left, rgba(0, 0, 0, 0.5), transparent);\n  /* Firefox 16+, IE10, Opera 12.50+ */ }\n\n.swiper-container-3d .swiper-slide-shadow-right {\n  background-image: -webkit-gradient(linear, right top, left top, from(rgba(0, 0, 0, 0.5)), to(transparent));\n  /* Safari 4+, Chrome */\n  background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, 0.5), transparent);\n  /* Chrome 10+, Safari 5.1+, iOS 5+ */\n  /* Firefox 3.6-15 */\n  /* Opera 11.10-12.00 */\n  background-image: linear-gradient(to right, rgba(0, 0, 0, 0.5), transparent);\n  /* Firefox 16+, IE10, Opera 12.50+ */ }\n\n.swiper-container-3d .swiper-slide-shadow-top {\n  background-image: -webkit-gradient(linear, left top, left bottom, from(rgba(0, 0, 0, 0.5)), to(transparent));\n  /* Safari 4+, Chrome */\n  background-image: -webkit-linear-gradient(bottom, rgba(0, 0, 0, 0.5), transparent);\n  /* Chrome 10+, Safari 5.1+, iOS 5+ */\n  /* Firefox 3.6-15 */\n  /* Opera 11.10-12.00 */\n  background-image: linear-gradient(to top, rgba(0, 0, 0, 0.5), transparent);\n  /* Firefox 16+, IE10, Opera 12.50+ */ }\n\n.swiper-container-3d .swiper-slide-shadow-bottom {\n  background-image: -webkit-gradient(linear, left bottom, left top, from(rgba(0, 0, 0, 0.5)), to(transparent));\n  /* Safari 4+, Chrome */\n  background-image: -webkit-linear-gradient(top, rgba(0, 0, 0, 0.5), transparent);\n  /* Chrome 10+, Safari 5.1+, iOS 5+ */\n  /* Firefox 3.6-15 */\n  /* Opera 11.10-12.00 */\n  background-image: linear-gradient(to bottom, rgba(0, 0, 0, 0.5), transparent);\n  /* Firefox 16+, IE10, Opera 12.50+ */ }\n\n/* Coverflow */\n.swiper-container-coverflow .swiper-wrapper {\n  /* Windows 8 IE 10 fix */\n  -ms-perspective: 1200px; }\n\n/* Fade */\n.swiper-container-fade.swiper-container-free-mode .swiper-slide {\n  -webkit-transition-timing-function: ease-out;\n  transition-timing-function: ease-out; }\n\n.swiper-container-fade .swiper-slide {\n  pointer-events: none; }\n\n.swiper-container-fade .swiper-slide .swiper-slide {\n  pointer-events: none; }\n\n.swiper-container-fade .swiper-slide-active,\n.swiper-container-fade .swiper-slide-active .swiper-slide-active {\n  pointer-events: auto; }\n\n/* Cube */\n.swiper-container-cube {\n  overflow: visible; }\n\n.swiper-container-cube .swiper-slide {\n  pointer-events: none;\n  visibility: hidden;\n  -webkit-transform-origin: 0 0;\n  transform-origin: 0 0;\n  -webkit-backface-visibility: hidden;\n  -ms-backface-visibility: hidden;\n  backface-visibility: hidden;\n  width: 100%;\n  height: 100%;\n  z-index: 1; }\n\n.swiper-container-cube.swiper-container-rtl .swiper-slide {\n  -webkit-transform-origin: 100% 0;\n  transform-origin: 100% 0; }\n\n.swiper-container-cube .swiper-slide-active,\n.swiper-container-cube .swiper-slide-next,\n.swiper-container-cube .swiper-slide-prev,\n.swiper-container-cube .swiper-slide-next + .swiper-slide {\n  pointer-events: auto;\n  visibility: visible; }\n\n.swiper-container-cube .swiper-slide-shadow-top,\n.swiper-container-cube .swiper-slide-shadow-bottom,\n.swiper-container-cube .swiper-slide-shadow-left,\n.swiper-container-cube .swiper-slide-shadow-right {\n  z-index: 0;\n  -webkit-backface-visibility: hidden;\n  -ms-backface-visibility: hidden;\n  backface-visibility: hidden; }\n\n.swiper-container-cube .swiper-cube-shadow {\n  position: absolute;\n  left: 0;\n  bottom: 0;\n  width: 100%;\n  height: 100%;\n  background: #000;\n  opacity: .6;\n  -webkit-filter: blur(50px);\n  filter: blur(50px);\n  z-index: 0; }\n\n/* Scrollbar */\n.swiper-scrollbar {\n  border-radius: 10px;\n  position: relative;\n  -ms-touch-action: none;\n  background: rgba(0, 0, 0, 0.1); }\n\n.swiper-container-horizontal > .swiper-scrollbar {\n  position: absolute;\n  left: 1%;\n  bottom: 3px;\n  z-index: 50;\n  height: 5px;\n  width: 98%; }\n\n.swiper-container-vertical > .swiper-scrollbar {\n  position: absolute;\n  right: 3px;\n  top: 1%;\n  z-index: 50;\n  width: 5px;\n  height: 98%; }\n\n.swiper-scrollbar-drag {\n  height: 100%;\n  width: 100%;\n  position: relative;\n  background: rgba(0, 0, 0, 0.5);\n  border-radius: 10px;\n  left: 0;\n  top: 0; }\n\n.swiper-scrollbar-cursor-drag {\n  cursor: move; }\n\n/* Preloader */\n.swiper-lazy-preloader {\n  width: 42px;\n  height: 42px;\n  position: absolute;\n  left: 50%;\n  top: 50%;\n  margin-left: -21px;\n  margin-top: -21px;\n  z-index: 10;\n  -webkit-transform-origin: 50%;\n  transform-origin: 50%;\n  -webkit-animation: swiper-preloader-spin 1s steps(12, end) infinite;\n  animation: swiper-preloader-spin 1s steps(12, end) infinite; }\n\n.swiper-lazy-preloader:after {\n  display: block;\n  content: \"\";\n  width: 100%;\n  height: 100%;\n  background-image: url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20viewBox%3D'0%200%20120%20120'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20xmlns%3Axlink%3D'http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink'%3E%3Cdefs%3E%3Cline%20id%3D'l'%20x1%3D'60'%20x2%3D'60'%20y1%3D'7'%20y2%3D'27'%20stroke%3D'%236c6c6c'%20stroke-width%3D'11'%20stroke-linecap%3D'round'%2F%3E%3C%2Fdefs%3E%3Cg%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(30%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(60%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(90%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(120%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(150%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.37'%20transform%3D'rotate(180%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.46'%20transform%3D'rotate(210%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.56'%20transform%3D'rotate(240%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.66'%20transform%3D'rotate(270%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.75'%20transform%3D'rotate(300%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.85'%20transform%3D'rotate(330%2060%2C60)'%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E\");\n  background-position: 50%;\n  background-size: 100%;\n  background-repeat: no-repeat; }\n\n.swiper-lazy-preloader-white:after {\n  background-image: url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20viewBox%3D'0%200%20120%20120'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20xmlns%3Axlink%3D'http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink'%3E%3Cdefs%3E%3Cline%20id%3D'l'%20x1%3D'60'%20x2%3D'60'%20y1%3D'7'%20y2%3D'27'%20stroke%3D'%23fff'%20stroke-width%3D'11'%20stroke-linecap%3D'round'%2F%3E%3C%2Fdefs%3E%3Cg%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(30%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(60%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(90%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(120%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(150%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.37'%20transform%3D'rotate(180%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.46'%20transform%3D'rotate(210%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.56'%20transform%3D'rotate(240%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.66'%20transform%3D'rotate(270%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.75'%20transform%3D'rotate(300%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.85'%20transform%3D'rotate(330%2060%2C60)'%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E\"); }\n\n@-webkit-keyframes swiper-preloader-spin {\n  100% {\n    -webkit-transform: rotate(360deg); } }\n\n@keyframes swiper-preloader-spin {\n  100% {\n    -webkit-transform: rotate(360deg);\n    transform: rotate(360deg); } }\n\nion-slides {\n  width: 100%;\n  height: 100%;\n  display: block; }\n\n.slide-zoom {\n  display: block;\n  width: 100%;\n  text-align: center; }\n\n.swiper-container {\n  width: 100%;\n  height: 100%;\n  padding: 0;\n  display: -webkit-box;\n  display: -webkit-flex;\n  display: -ms-flexbox;\n  display: flex;\n  overflow: hidden; }\n\n.swiper-wrapper {\n  width: 100%;\n  height: 100%;\n  padding: 0;\n  display: -webkit-box;\n  display: -webkit-flex;\n  display: -ms-flexbox;\n  display: flex; }\n\n.swiper-slide {\n  width: 100%;\n  height: 100%;\n  box-sizing: border-box;\n  text-align: center;\n  font-size: 18px;\n  /* Center slide text vertically */\n  display: -webkit-box;\n  display: -webkit-flex;\n  display: -ms-flexbox;\n  display: flex;\n  -webkit-box-pack: center;\n  -webkit-justify-content: center;\n  -ms-flex-pack: center;\n  justify-content: center;\n  -webkit-box-align: center;\n  -webkit-align-items: center;\n  -ms-flex-align: center;\n  align-items: center; }\n  .swiper-slide img {\n    width: auto;\n    height: auto;\n    max-width: 100%;\n    max-height: 100%; }\n\nion-spinner {\n  position: relative;\n  display: inline-block;\n  width: 28px;\n  height: 28px; }\n\nion-spinner svg {\n  position: absolute;\n  top: 0;\n  left: 0;\n  width: 100%;\n  height: 100%;\n  -webkit-transform: translateZ(0);\n  transform: translateZ(0); }\n\nion-spinner.spinner-paused svg {\n  -webkit-animation-play-state: paused;\n  animation-play-state: paused; }\n\n.spinner-ios line,\n.spinner-ios-small line {\n  stroke: #69717d;\n  stroke-width: 4px;\n  stroke-linecap: round; }\n\n.spinner-ios svg,\n.spinner-ios-small svg {\n  -webkit-animation: spinner-fade-out 1s linear infinite;\n  animation: spinner-fade-out 1s linear infinite; }\n\n.spinner-bubbles circle {\n  fill: #000; }\n\n.spinner-bubbles svg {\n  -webkit-animation: spinner-scale-out 1s linear infinite;\n  animation: spinner-scale-out 1s linear infinite; }\n\n.spinner-circles circle {\n  fill: #69717d; }\n\n.spinner-circles svg {\n  -webkit-animation: spinner-fade-out 1s linear infinite;\n  animation: spinner-fade-out 1s linear infinite; }\n\n.spinner-crescent circle {\n  fill: transparent;\n  stroke: #000;\n  stroke-width: 4px;\n  stroke-dasharray: 128px;\n  stroke-dashoffset: 82px; }\n\n.spinner-crescent svg {\n  -webkit-animation: spinner-rotate 1s linear infinite;\n  animation: spinner-rotate 1s linear infinite; }\n\n.spinner-dots circle {\n  fill: #444;\n  stroke-width: 0; }\n\n.spinner-dots svg {\n  -webkit-transform-origin: center;\n  transform-origin: center;\n  -webkit-animation: spinner-dots 1s linear infinite;\n  animation: spinner-dots 1s linear infinite; }\n\n@-webkit-keyframes spinner-fade-out {\n  0% {\n    opacity: 1; }\n  100% {\n    opacity: 0; } }\n\n@keyframes spinner-fade-out {\n  0% {\n    opacity: 1; }\n  100% {\n    opacity: 0; } }\n\n@-webkit-keyframes spinner-scale-out {\n  0% {\n    -webkit-transform: scale(1, 1);\n    transform: scale(1, 1); }\n  100% {\n    -webkit-transform: scale(0, 0);\n    transform: scale(0, 0); } }\n\n@keyframes spinner-scale-out {\n  0% {\n    -webkit-transform: scale(1, 1);\n    transform: scale(1, 1); }\n  100% {\n    -webkit-transform: scale(0, 0);\n    transform: scale(0, 0); } }\n\n@-webkit-keyframes spinner-rotate {\n  0% {\n    -webkit-transform: rotate(0deg);\n    transform: rotate(0deg); }\n  100% {\n    -webkit-transform: rotate(360deg);\n    transform: rotate(360deg); } }\n\n@keyframes spinner-rotate {\n  0% {\n    -webkit-transform: rotate(0deg);\n    transform: rotate(0deg); }\n  100% {\n    -webkit-transform: rotate(360deg);\n    transform: rotate(360deg); } }\n\n@-webkit-keyframes spinner-dots {\n  0% {\n    opacity: .9;\n    -webkit-transform: scale(1, 1);\n    transform: scale(1, 1); }\n  50% {\n    opacity: .3;\n    -webkit-transform: scale(0.4, 0.4);\n    transform: scale(0.4, 0.4); }\n  100% {\n    opacity: .9;\n    -webkit-transform: scale(1, 1);\n    transform: scale(1, 1); } }\n\n@keyframes spinner-dots {\n  0% {\n    opacity: .9;\n    -webkit-transform: scale(1, 1);\n    transform: scale(1, 1); }\n  50% {\n    opacity: .3;\n    -webkit-transform: scale(0.4, 0.4);\n    transform: scale(0.4, 0.4); }\n  100% {\n    opacity: .9;\n    -webkit-transform: scale(1, 1);\n    transform: scale(1, 1); } }\n\nhtml {\n  font-size: 62.5%; }\n\na {\n  background-color: transparent; }\n\n.enable-hover a:hover {\n  opacity: .7; }\n\nh1,\nh2,\nh3,\nh4,\nh5,\nh6 {\n  margin-top: 1.6rem;\n  margin-bottom: 1rem;\n  font-weight: 500;\n  line-height: 1.2; }\n\n[padding] h1:first-child,\n[padding] h2:first-child,\n[padding] h3:first-child,\n[padding] h4:first-child,\n[padding] h5:first-child,\n[padding] h6:first-child {\n  margin-top: -.3rem; }\n\nh1 + h2,\nh1 + h3,\nh2 + h3 {\n  margin-top: -.3rem; }\n\nh1 {\n  margin-top: 2rem;\n  font-size: 2.6rem; }\n\nh2 {\n  margin-top: 1.8rem;\n  font-size: 2.4rem; }\n\nh3 {\n  font-size: 2.2rem; }\n\nh4 {\n  font-size: 2rem; }\n\nh5 {\n  font-size: 1.8rem; }\n\nh6 {\n  font-size: 1.6rem; }\n\nsmall {\n  font-size: 75%; }\n\nsub,\nsup {\n  position: relative;\n  font-size: 75%;\n  line-height: 0;\n  vertical-align: baseline; }\n\nsup {\n  top: -.5em; }\n\nsub {\n  bottom: -.25em; }\n\n[text-left] {\n  text-align: left; }\n\n[text-center] {\n  text-align: center; }\n\n[text-right] {\n  text-align: right; }\n\n[text-justify] {\n  text-align: justify; }\n\n[text-nowrap] {\n  white-space: nowrap; }\n\n[text-uppercase] {\n  text-transform: uppercase; }\n\n[text-lowercase] {\n  text-transform: lowercase; }\n\n[text-capitalize] {\n  text-transform: capitalize; }\n\n.virtual-scroll {\n  position: relative; }\n\n.virtual-scroll .virtual-position,\n.virtual-scroll .virtual-position.item {\n  position: absolute;\n  top: 0;\n  left: 0;\n  -webkit-transition-duration: 0ms;\n  transition-duration: 0ms; }\n\n.virtual-scroll .virtual-hidden {\n  display: none; }\n\n.ion-ios-add:before {\n  content: \"\\f102\"; }\n\n.ion-ios-add-circle:before {\n  content: \"\\f101\"; }\n\n.ion-ios-add-circle-outline:before {\n  content: \"\\f100\"; }\n\n.ion-ios-add-outline:before {\n  content: \"\\f102\"; }\n\n.ion-ios-alarm:before {\n  content: \"\\f3c8\"; }\n\n.ion-ios-alarm-outline:before {\n  content: \"\\f3c7\"; }\n\n.ion-ios-albums:before {\n  content: \"\\f3ca\"; }\n\n.ion-ios-albums-outline:before {\n  content: \"\\f3c9\"; }\n\n.ion-ios-alert:before {\n  content: \"\\f104\"; }\n\n.ion-ios-alert-outline:before {\n  content: \"\\f103\"; }\n\n.ion-ios-american-football:before {\n  content: \"\\f106\"; }\n\n.ion-ios-american-football-outline:before {\n  content: \"\\f105\"; }\n\n.ion-ios-analytics:before {\n  content: \"\\f3ce\"; }\n\n.ion-ios-analytics-outline:before {\n  content: \"\\f3cd\"; }\n\n.ion-ios-aperture:before {\n  content: \"\\f108\"; }\n\n.ion-ios-aperture-outline:before {\n  content: \"\\f107\"; }\n\n.ion-ios-apps:before {\n  content: \"\\f10a\"; }\n\n.ion-ios-apps-outline:before {\n  content: \"\\f109\"; }\n\n.ion-ios-appstore:before {\n  content: \"\\f10c\"; }\n\n.ion-ios-appstore-outline:before {\n  content: \"\\f10b\"; }\n\n.ion-ios-archive:before {\n  content: \"\\f10e\"; }\n\n.ion-ios-archive-outline:before {\n  content: \"\\f10d\"; }\n\n.ion-ios-arrow-back:before {\n  content: \"\\f3cf\"; }\n\n.ion-ios-arrow-back-outline:before {\n  content: \"\\f3cf\"; }\n\n.ion-ios-arrow-down:before {\n  content: \"\\f3d0\"; }\n\n.ion-ios-arrow-down-outline:before {\n  content: \"\\f3d0\"; }\n\n.ion-ios-arrow-dropdown:before {\n  content: \"\\f110\"; }\n\n.ion-ios-arrow-dropdown-circle:before {\n  content: \"\\f10f\"; }\n\n.ion-ios-arrow-dropdown-circle-outline:before {\n  content: \"\\f10f\"; }\n\n.ion-ios-arrow-dropdown-outline:before {\n  content: \"\\f110\"; }\n\n.ion-ios-arrow-dropleft:before {\n  content: \"\\f112\"; }\n\n.ion-ios-arrow-dropleft-circle:before {\n  content: \"\\f111\"; }\n\n.ion-ios-arrow-dropleft-circle-outline:before {\n  content: \"\\f111\"; }\n\n.ion-ios-arrow-dropleft-outline:before {\n  content: \"\\f112\"; }\n\n.ion-ios-arrow-dropright:before {\n  content: \"\\f114\"; }\n\n.ion-ios-arrow-dropright-circle:before {\n  content: \"\\f113\"; }\n\n.ion-ios-arrow-dropright-circle-outline:before {\n  content: \"\\f113\"; }\n\n.ion-ios-arrow-dropright-outline:before {\n  content: \"\\f114\"; }\n\n.ion-ios-arrow-dropup:before {\n  content: \"\\f116\"; }\n\n.ion-ios-arrow-dropup-circle:before {\n  content: \"\\f115\"; }\n\n.ion-ios-arrow-dropup-circle-outline:before {\n  content: \"\\f115\"; }\n\n.ion-ios-arrow-dropup-outline:before {\n  content: \"\\f116\"; }\n\n.ion-ios-arrow-forward:before {\n  content: \"\\f3d1\"; }\n\n.ion-ios-arrow-forward-outline:before {\n  content: \"\\f3d1\"; }\n\n.ion-ios-arrow-round-back:before {\n  content: \"\\f117\"; }\n\n.ion-ios-arrow-round-back-outline:before {\n  content: \"\\f117\"; }\n\n.ion-ios-arrow-round-down:before {\n  content: \"\\f118\"; }\n\n.ion-ios-arrow-round-down-outline:before {\n  content: \"\\f118\"; }\n\n.ion-ios-arrow-round-forward:before {\n  content: \"\\f119\"; }\n\n.ion-ios-arrow-round-forward-outline:before {\n  content: \"\\f119\"; }\n\n.ion-ios-arrow-round-up:before {\n  content: \"\\f11a\"; }\n\n.ion-ios-arrow-round-up-outline:before {\n  content: \"\\f11a\"; }\n\n.ion-ios-arrow-up:before {\n  content: \"\\f3d8\"; }\n\n.ion-ios-arrow-up-outline:before {\n  content: \"\\f3d8\"; }\n\n.ion-ios-at:before {\n  content: \"\\f3da\"; }\n\n.ion-ios-at-outline:before {\n  content: \"\\f3d9\"; }\n\n.ion-ios-attach:before {\n  content: \"\\f11b\"; }\n\n.ion-ios-attach-outline:before {\n  content: \"\\f11b\"; }\n\n.ion-ios-backspace:before {\n  content: \"\\f11d\"; }\n\n.ion-ios-backspace-outline:before {\n  content: \"\\f11c\"; }\n\n.ion-ios-barcode:before {\n  content: \"\\f3dc\"; }\n\n.ion-ios-barcode-outline:before {\n  content: \"\\f3db\"; }\n\n.ion-ios-baseball:before {\n  content: \"\\f3de\"; }\n\n.ion-ios-baseball-outline:before {\n  content: \"\\f3dd\"; }\n\n.ion-ios-basket:before {\n  content: \"\\f11f\"; }\n\n.ion-ios-basket-outline:before {\n  content: \"\\f11e\"; }\n\n.ion-ios-basketball:before {\n  content: \"\\f3e0\"; }\n\n.ion-ios-basketball-outline:before {\n  content: \"\\f3df\"; }\n\n.ion-ios-battery-charging:before {\n  content: \"\\f120\"; }\n\n.ion-ios-battery-charging-outline:before {\n  content: \"\\f120\"; }\n\n.ion-ios-battery-dead:before {\n  content: \"\\f121\"; }\n\n.ion-ios-battery-dead-outline:before {\n  content: \"\\f121\"; }\n\n.ion-ios-battery-full:before {\n  content: \"\\f122\"; }\n\n.ion-ios-battery-full-outline:before {\n  content: \"\\f122\"; }\n\n.ion-ios-beaker:before {\n  content: \"\\f124\"; }\n\n.ion-ios-beaker-outline:before {\n  content: \"\\f123\"; }\n\n.ion-ios-beer:before {\n  content: \"\\f126\"; }\n\n.ion-ios-beer-outline:before {\n  content: \"\\f125\"; }\n\n.ion-ios-bicycle:before {\n  content: \"\\f127\"; }\n\n.ion-ios-bicycle-outline:before {\n  content: \"\\f127\"; }\n\n.ion-ios-bluetooth:before {\n  content: \"\\f128\"; }\n\n.ion-ios-bluetooth-outline:before {\n  content: \"\\f128\"; }\n\n.ion-ios-boat:before {\n  content: \"\\f12a\"; }\n\n.ion-ios-boat-outline:before {\n  content: \"\\f129\"; }\n\n.ion-ios-body:before {\n  content: \"\\f3e4\"; }\n\n.ion-ios-body-outline:before {\n  content: \"\\f3e3\"; }\n\n.ion-ios-bonfire:before {\n  content: \"\\f12c\"; }\n\n.ion-ios-bonfire-outline:before {\n  content: \"\\f12b\"; }\n\n.ion-ios-book:before {\n  content: \"\\f3e8\"; }\n\n.ion-ios-book-outline:before {\n  content: \"\\f3e7\"; }\n\n.ion-ios-bookmark:before {\n  content: \"\\f12e\"; }\n\n.ion-ios-bookmark-outline:before {\n  content: \"\\f12d\"; }\n\n.ion-ios-bookmarks:before {\n  content: \"\\f3ea\"; }\n\n.ion-ios-bookmarks-outline:before {\n  content: \"\\f3e9\"; }\n\n.ion-ios-bowtie:before {\n  content: \"\\f130\"; }\n\n.ion-ios-bowtie-outline:before {\n  content: \"\\f12f\"; }\n\n.ion-ios-briefcase:before {\n  content: \"\\f3ee\"; }\n\n.ion-ios-briefcase-outline:before {\n  content: \"\\f3ed\"; }\n\n.ion-ios-browsers:before {\n  content: \"\\f3f0\"; }\n\n.ion-ios-browsers-outline:before {\n  content: \"\\f3ef\"; }\n\n.ion-ios-brush:before {\n  content: \"\\f132\"; }\n\n.ion-ios-brush-outline:before {\n  content: \"\\f131\"; }\n\n.ion-ios-bug:before {\n  content: \"\\f134\"; }\n\n.ion-ios-bug-outline:before {\n  content: \"\\f133\"; }\n\n.ion-ios-build:before {\n  content: \"\\f136\"; }\n\n.ion-ios-build-outline:before {\n  content: \"\\f135\"; }\n\n.ion-ios-bulb:before {\n  content: \"\\f138\"; }\n\n.ion-ios-bulb-outline:before {\n  content: \"\\f137\"; }\n\n.ion-ios-bus:before {\n  content: \"\\f13a\"; }\n\n.ion-ios-bus-outline:before {\n  content: \"\\f139\"; }\n\n.ion-ios-cafe:before {\n  content: \"\\f13c\"; }\n\n.ion-ios-cafe-outline:before {\n  content: \"\\f13b\"; }\n\n.ion-ios-calculator:before {\n  content: \"\\f3f2\"; }\n\n.ion-ios-calculator-outline:before {\n  content: \"\\f3f1\"; }\n\n.ion-ios-calendar:before {\n  content: \"\\f3f4\"; }\n\n.ion-ios-calendar-outline:before {\n  content: \"\\f3f3\"; }\n\n.ion-ios-call:before {\n  content: \"\\f13e\"; }\n\n.ion-ios-call-outline:before {\n  content: \"\\f13d\"; }\n\n.ion-ios-camera:before {\n  content: \"\\f3f6\"; }\n\n.ion-ios-camera-outline:before {\n  content: \"\\f3f5\"; }\n\n.ion-ios-car:before {\n  content: \"\\f140\"; }\n\n.ion-ios-car-outline:before {\n  content: \"\\f13f\"; }\n\n.ion-ios-card:before {\n  content: \"\\f142\"; }\n\n.ion-ios-card-outline:before {\n  content: \"\\f141\"; }\n\n.ion-ios-cart:before {\n  content: \"\\f3f8\"; }\n\n.ion-ios-cart-outline:before {\n  content: \"\\f3f7\"; }\n\n.ion-ios-cash:before {\n  content: \"\\f144\"; }\n\n.ion-ios-cash-outline:before {\n  content: \"\\f143\"; }\n\n.ion-ios-chatboxes:before {\n  content: \"\\f3fa\"; }\n\n.ion-ios-chatboxes-outline:before {\n  content: \"\\f3f9\"; }\n\n.ion-ios-chatbubbles:before {\n  content: \"\\f146\"; }\n\n.ion-ios-chatbubbles-outline:before {\n  content: \"\\f145\"; }\n\n.ion-ios-checkbox:before {\n  content: \"\\f148\"; }\n\n.ion-ios-checkbox-outline:before {\n  content: \"\\f147\"; }\n\n.ion-ios-checkmark:before {\n  content: \"\\f3ff\"; }\n\n.ion-ios-checkmark-circle:before {\n  content: \"\\f14a\"; }\n\n.ion-ios-checkmark-circle-outline:before {\n  content: \"\\f149\"; }\n\n.ion-ios-checkmark-outline:before {\n  content: \"\\f3ff\"; }\n\n.ion-ios-clipboard:before {\n  content: \"\\f14c\"; }\n\n.ion-ios-clipboard-outline:before {\n  content: \"\\f14b\"; }\n\n.ion-ios-clock:before {\n  content: \"\\f403\"; }\n\n.ion-ios-clock-outline:before {\n  content: \"\\f402\"; }\n\n.ion-ios-close:before {\n  content: \"\\f406\"; }\n\n.ion-ios-close-circle:before {\n  content: \"\\f14e\"; }\n\n.ion-ios-close-circle-outline:before {\n  content: \"\\f14d\"; }\n\n.ion-ios-close-outline:before {\n  content: \"\\f406\"; }\n\n.ion-ios-closed-captioning:before {\n  content: \"\\f150\"; }\n\n.ion-ios-closed-captioning-outline:before {\n  content: \"\\f14f\"; }\n\n.ion-ios-cloud:before {\n  content: \"\\f40c\"; }\n\n.ion-ios-cloud-circle:before {\n  content: \"\\f152\"; }\n\n.ion-ios-cloud-circle-outline:before {\n  content: \"\\f151\"; }\n\n.ion-ios-cloud-done:before {\n  content: \"\\f154\"; }\n\n.ion-ios-cloud-done-outline:before {\n  content: \"\\f153\"; }\n\n.ion-ios-cloud-download:before {\n  content: \"\\f408\"; }\n\n.ion-ios-cloud-download-outline:before {\n  content: \"\\f407\"; }\n\n.ion-ios-cloud-outline:before {\n  content: \"\\f409\"; }\n\n.ion-ios-cloud-upload:before {\n  content: \"\\f40b\"; }\n\n.ion-ios-cloud-upload-outline:before {\n  content: \"\\f40a\"; }\n\n.ion-ios-cloudy:before {\n  content: \"\\f410\"; }\n\n.ion-ios-cloudy-night:before {\n  content: \"\\f40e\"; }\n\n.ion-ios-cloudy-night-outline:before {\n  content: \"\\f40d\"; }\n\n.ion-ios-cloudy-outline:before {\n  content: \"\\f40f\"; }\n\n.ion-ios-code:before {\n  content: \"\\f157\"; }\n\n.ion-ios-code-download:before {\n  content: \"\\f155\"; }\n\n.ion-ios-code-download-outline:before {\n  content: \"\\f155\"; }\n\n.ion-ios-code-outline:before {\n  content: \"\\f157\"; }\n\n.ion-ios-code-working:before {\n  content: \"\\f156\"; }\n\n.ion-ios-code-working-outline:before {\n  content: \"\\f156\"; }\n\n.ion-ios-cog:before {\n  content: \"\\f412\"; }\n\n.ion-ios-cog-outline:before {\n  content: \"\\f411\"; }\n\n.ion-ios-color-fill:before {\n  content: \"\\f159\"; }\n\n.ion-ios-color-fill-outline:before {\n  content: \"\\f158\"; }\n\n.ion-ios-color-filter:before {\n  content: \"\\f414\"; }\n\n.ion-ios-color-filter-outline:before {\n  content: \"\\f413\"; }\n\n.ion-ios-color-palette:before {\n  content: \"\\f15b\"; }\n\n.ion-ios-color-palette-outline:before {\n  content: \"\\f15a\"; }\n\n.ion-ios-color-wand:before {\n  content: \"\\f416\"; }\n\n.ion-ios-color-wand-outline:before {\n  content: \"\\f415\"; }\n\n.ion-ios-compass:before {\n  content: \"\\f15d\"; }\n\n.ion-ios-compass-outline:before {\n  content: \"\\f15c\"; }\n\n.ion-ios-construct:before {\n  content: \"\\f15f\"; }\n\n.ion-ios-construct-outline:before {\n  content: \"\\f15e\"; }\n\n.ion-ios-contact:before {\n  content: \"\\f41a\"; }\n\n.ion-ios-contact-outline:before {\n  content: \"\\f419\"; }\n\n.ion-ios-contacts:before {\n  content: \"\\f161\"; }\n\n.ion-ios-contacts-outline:before {\n  content: \"\\f160\"; }\n\n.ion-ios-contract:before {\n  content: \"\\f162\"; }\n\n.ion-ios-contract-outline:before {\n  content: \"\\f162\"; }\n\n.ion-ios-contrast:before {\n  content: \"\\f163\"; }\n\n.ion-ios-contrast-outline:before {\n  content: \"\\f163\"; }\n\n.ion-ios-copy:before {\n  content: \"\\f41c\"; }\n\n.ion-ios-copy-outline:before {\n  content: \"\\f41b\"; }\n\n.ion-ios-create:before {\n  content: \"\\f165\"; }\n\n.ion-ios-create-outline:before {\n  content: \"\\f164\"; }\n\n.ion-ios-crop:before {\n  content: \"\\f41e\"; }\n\n.ion-ios-crop-outline:before {\n  content: \"\\f166\"; }\n\n.ion-ios-cube:before {\n  content: \"\\f168\"; }\n\n.ion-ios-cube-outline:before {\n  content: \"\\f167\"; }\n\n.ion-ios-cut:before {\n  content: \"\\f16a\"; }\n\n.ion-ios-cut-outline:before {\n  content: \"\\f169\"; }\n\n.ion-ios-desktop:before {\n  content: \"\\f16c\"; }\n\n.ion-ios-desktop-outline:before {\n  content: \"\\f16b\"; }\n\n.ion-ios-disc:before {\n  content: \"\\f16e\"; }\n\n.ion-ios-disc-outline:before {\n  content: \"\\f16d\"; }\n\n.ion-ios-document:before {\n  content: \"\\f170\"; }\n\n.ion-ios-document-outline:before {\n  content: \"\\f16f\"; }\n\n.ion-ios-done-all:before {\n  content: \"\\f171\"; }\n\n.ion-ios-done-all-outline:before {\n  content: \"\\f171\"; }\n\n.ion-ios-download:before {\n  content: \"\\f420\"; }\n\n.ion-ios-download-outline:before {\n  content: \"\\f41f\"; }\n\n.ion-ios-easel:before {\n  content: \"\\f173\"; }\n\n.ion-ios-easel-outline:before {\n  content: \"\\f172\"; }\n\n.ion-ios-egg:before {\n  content: \"\\f175\"; }\n\n.ion-ios-egg-outline:before {\n  content: \"\\f174\"; }\n\n.ion-ios-exit:before {\n  content: \"\\f177\"; }\n\n.ion-ios-exit-outline:before {\n  content: \"\\f176\"; }\n\n.ion-ios-expand:before {\n  content: \"\\f178\"; }\n\n.ion-ios-expand-outline:before {\n  content: \"\\f178\"; }\n\n.ion-ios-eye:before {\n  content: \"\\f425\"; }\n\n.ion-ios-eye-off:before {\n  content: \"\\f17a\"; }\n\n.ion-ios-eye-off-outline:before {\n  content: \"\\f179\"; }\n\n.ion-ios-eye-outline:before {\n  content: \"\\f424\"; }\n\n.ion-ios-fastforward:before {\n  content: \"\\f427\"; }\n\n.ion-ios-fastforward-outline:before {\n  content: \"\\f426\"; }\n\n.ion-ios-female:before {\n  content: \"\\f17b\"; }\n\n.ion-ios-female-outline:before {\n  content: \"\\f17b\"; }\n\n.ion-ios-filing:before {\n  content: \"\\f429\"; }\n\n.ion-ios-filing-outline:before {\n  content: \"\\f428\"; }\n\n.ion-ios-film:before {\n  content: \"\\f42b\"; }\n\n.ion-ios-film-outline:before {\n  content: \"\\f42a\"; }\n\n.ion-ios-finger-print:before {\n  content: \"\\f17c\"; }\n\n.ion-ios-finger-print-outline:before {\n  content: \"\\f17c\"; }\n\n.ion-ios-flag:before {\n  content: \"\\f42d\"; }\n\n.ion-ios-flag-outline:before {\n  content: \"\\f42c\"; }\n\n.ion-ios-flame:before {\n  content: \"\\f42f\"; }\n\n.ion-ios-flame-outline:before {\n  content: \"\\f42e\"; }\n\n.ion-ios-flash:before {\n  content: \"\\f17e\"; }\n\n.ion-ios-flash-outline:before {\n  content: \"\\f17d\"; }\n\n.ion-ios-flask:before {\n  content: \"\\f431\"; }\n\n.ion-ios-flask-outline:before {\n  content: \"\\f430\"; }\n\n.ion-ios-flower:before {\n  content: \"\\f433\"; }\n\n.ion-ios-flower-outline:before {\n  content: \"\\f432\"; }\n\n.ion-ios-folder:before {\n  content: \"\\f435\"; }\n\n.ion-ios-folder-open:before {\n  content: \"\\f180\"; }\n\n.ion-ios-folder-open-outline:before {\n  content: \"\\f17f\"; }\n\n.ion-ios-folder-outline:before {\n  content: \"\\f434\"; }\n\n.ion-ios-football:before {\n  content: \"\\f437\"; }\n\n.ion-ios-football-outline:before {\n  content: \"\\f436\"; }\n\n.ion-ios-funnel:before {\n  content: \"\\f182\"; }\n\n.ion-ios-funnel-outline:before {\n  content: \"\\f181\"; }\n\n.ion-ios-game-controller-a:before {\n  content: \"\\f439\"; }\n\n.ion-ios-game-controller-a-outline:before {\n  content: \"\\f438\"; }\n\n.ion-ios-game-controller-b:before {\n  content: \"\\f43b\"; }\n\n.ion-ios-game-controller-b-outline:before {\n  content: \"\\f43a\"; }\n\n.ion-ios-git-branch:before {\n  content: \"\\f183\"; }\n\n.ion-ios-git-branch-outline:before {\n  content: \"\\f183\"; }\n\n.ion-ios-git-commit:before {\n  content: \"\\f184\"; }\n\n.ion-ios-git-commit-outline:before {\n  content: \"\\f184\"; }\n\n.ion-ios-git-compare:before {\n  content: \"\\f185\"; }\n\n.ion-ios-git-compare-outline:before {\n  content: \"\\f185\"; }\n\n.ion-ios-git-merge:before {\n  content: \"\\f186\"; }\n\n.ion-ios-git-merge-outline:before {\n  content: \"\\f186\"; }\n\n.ion-ios-git-network:before {\n  content: \"\\f187\"; }\n\n.ion-ios-git-network-outline:before {\n  content: \"\\f187\"; }\n\n.ion-ios-git-pull-request:before {\n  content: \"\\f188\"; }\n\n.ion-ios-git-pull-request-outline:before {\n  content: \"\\f188\"; }\n\n.ion-ios-glasses:before {\n  content: \"\\f43f\"; }\n\n.ion-ios-glasses-outline:before {\n  content: \"\\f43e\"; }\n\n.ion-ios-globe:before {\n  content: \"\\f18a\"; }\n\n.ion-ios-globe-outline:before {\n  content: \"\\f189\"; }\n\n.ion-ios-grid:before {\n  content: \"\\f18c\"; }\n\n.ion-ios-grid-outline:before {\n  content: \"\\f18b\"; }\n\n.ion-ios-hammer:before {\n  content: \"\\f18e\"; }\n\n.ion-ios-hammer-outline:before {\n  content: \"\\f18d\"; }\n\n.ion-ios-hand:before {\n  content: \"\\f190\"; }\n\n.ion-ios-hand-outline:before {\n  content: \"\\f18f\"; }\n\n.ion-ios-happy:before {\n  content: \"\\f192\"; }\n\n.ion-ios-happy-outline:before {\n  content: \"\\f191\"; }\n\n.ion-ios-headset:before {\n  content: \"\\f194\"; }\n\n.ion-ios-headset-outline:before {\n  content: \"\\f193\"; }\n\n.ion-ios-heart:before {\n  content: \"\\f443\"; }\n\n.ion-ios-heart-outline:before {\n  content: \"\\f442\"; }\n\n.ion-ios-help:before {\n  content: \"\\f446\"; }\n\n.ion-ios-help-buoy:before {\n  content: \"\\f196\"; }\n\n.ion-ios-help-buoy-outline:before {\n  content: \"\\f195\"; }\n\n.ion-ios-help-circle:before {\n  content: \"\\f198\"; }\n\n.ion-ios-help-circle-outline:before {\n  content: \"\\f197\"; }\n\n.ion-ios-help-outline:before {\n  content: \"\\f446\"; }\n\n.ion-ios-home:before {\n  content: \"\\f448\"; }\n\n.ion-ios-home-outline:before {\n  content: \"\\f447\"; }\n\n.ion-ios-ice-cream:before {\n  content: \"\\f19a\"; }\n\n.ion-ios-ice-cream-outline:before {\n  content: \"\\f199\"; }\n\n.ion-ios-image:before {\n  content: \"\\f19c\"; }\n\n.ion-ios-image-outline:before {\n  content: \"\\f19b\"; }\n\n.ion-ios-images:before {\n  content: \"\\f19e\"; }\n\n.ion-ios-images-outline:before {\n  content: \"\\f19d\"; }\n\n.ion-ios-infinite:before {\n  content: \"\\f44a\"; }\n\n.ion-ios-infinite-outline:before {\n  content: \"\\f449\"; }\n\n.ion-ios-information:before {\n  content: \"\\f44d\"; }\n\n.ion-ios-information-circle:before {\n  content: \"\\f1a0\"; }\n\n.ion-ios-information-circle-outline:before {\n  content: \"\\f19f\"; }\n\n.ion-ios-information-outline:before {\n  content: \"\\f44d\"; }\n\n.ion-ios-ionic:before {\n  content: \"\\f1a1\"; }\n\n.ion-ios-ionic-outline:before {\n  content: \"\\f44e\"; }\n\n.ion-ios-ionitron:before {\n  content: \"\\f1a3\"; }\n\n.ion-ios-ionitron-outline:before {\n  content: \"\\f1a2\"; }\n\n.ion-ios-jet:before {\n  content: \"\\f1a5\"; }\n\n.ion-ios-jet-outline:before {\n  content: \"\\f1a4\"; }\n\n.ion-ios-key:before {\n  content: \"\\f1a7\"; }\n\n.ion-ios-key-outline:before {\n  content: \"\\f1a6\"; }\n\n.ion-ios-keypad:before {\n  content: \"\\f450\"; }\n\n.ion-ios-keypad-outline:before {\n  content: \"\\f44f\"; }\n\n.ion-ios-laptop:before {\n  content: \"\\f1a8\"; }\n\n.ion-ios-laptop-outline:before {\n  content: \"\\f1a8\"; }\n\n.ion-ios-leaf:before {\n  content: \"\\f1aa\"; }\n\n.ion-ios-leaf-outline:before {\n  content: \"\\f1a9\"; }\n\n.ion-ios-link:before {\n  content: \"\\f22a\"; }\n\n.ion-ios-link-outline:before {\n  content: \"\\f1ca\"; }\n\n.ion-ios-list:before {\n  content: \"\\f454\"; }\n\n.ion-ios-list-box:before {\n  content: \"\\f1ac\"; }\n\n.ion-ios-list-box-outline:before {\n  content: \"\\f1ab\"; }\n\n.ion-ios-list-outline:before {\n  content: \"\\f454\"; }\n\n.ion-ios-locate:before {\n  content: \"\\f1ae\"; }\n\n.ion-ios-locate-outline:before {\n  content: \"\\f1ad\"; }\n\n.ion-ios-lock:before {\n  content: \"\\f1b0\"; }\n\n.ion-ios-lock-outline:before {\n  content: \"\\f1af\"; }\n\n.ion-ios-log-in:before {\n  content: \"\\f1b1\"; }\n\n.ion-ios-log-in-outline:before {\n  content: \"\\f1b1\"; }\n\n.ion-ios-log-out:before {\n  content: \"\\f1b2\"; }\n\n.ion-ios-log-out-outline:before {\n  content: \"\\f1b2\"; }\n\n.ion-ios-magnet:before {\n  content: \"\\f1b4\"; }\n\n.ion-ios-magnet-outline:before {\n  content: \"\\f1b3\"; }\n\n.ion-ios-mail:before {\n  content: \"\\f1b8\"; }\n\n.ion-ios-mail-open:before {\n  content: \"\\f1b6\"; }\n\n.ion-ios-mail-open-outline:before {\n  content: \"\\f1b5\"; }\n\n.ion-ios-mail-outline:before {\n  content: \"\\f1b7\"; }\n\n.ion-ios-male:before {\n  content: \"\\f1b9\"; }\n\n.ion-ios-male-outline:before {\n  content: \"\\f1b9\"; }\n\n.ion-ios-man:before {\n  content: \"\\f1bb\"; }\n\n.ion-ios-man-outline:before {\n  content: \"\\f1ba\"; }\n\n.ion-ios-map:before {\n  content: \"\\f1bd\"; }\n\n.ion-ios-map-outline:before {\n  content: \"\\f1bc\"; }\n\n.ion-ios-medal:before {\n  content: \"\\f1bf\"; }\n\n.ion-ios-medal-outline:before {\n  content: \"\\f1be\"; }\n\n.ion-ios-medical:before {\n  content: \"\\f45c\"; }\n\n.ion-ios-medical-outline:before {\n  content: \"\\f45b\"; }\n\n.ion-ios-medkit:before {\n  content: \"\\f45e\"; }\n\n.ion-ios-medkit-outline:before {\n  content: \"\\f45d\"; }\n\n.ion-ios-megaphone:before {\n  content: \"\\f1c1\"; }\n\n.ion-ios-megaphone-outline:before {\n  content: \"\\f1c0\"; }\n\n.ion-ios-menu:before {\n  content: \"\\f1c3\"; }\n\n.ion-ios-menu-outline:before {\n  content: \"\\f1c2\"; }\n\n.ion-ios-mic:before {\n  content: \"\\f461\"; }\n\n.ion-ios-mic-off:before {\n  content: \"\\f45f\"; }\n\n.ion-ios-mic-off-outline:before {\n  content: \"\\f1c4\"; }\n\n.ion-ios-mic-outline:before {\n  content: \"\\f460\"; }\n\n.ion-ios-microphone:before {\n  content: \"\\f1c6\"; }\n\n.ion-ios-microphone-outline:before {\n  content: \"\\f1c5\"; }\n\n.ion-ios-moon:before {\n  content: \"\\f468\"; }\n\n.ion-ios-moon-outline:before {\n  content: \"\\f467\"; }\n\n.ion-ios-more:before {\n  content: \"\\f1c8\"; }\n\n.ion-ios-more-outline:before {\n  content: \"\\f1c7\"; }\n\n.ion-ios-move:before {\n  content: \"\\f1cb\"; }\n\n.ion-ios-move-outline:before {\n  content: \"\\f1cb\"; }\n\n.ion-ios-musical-note:before {\n  content: \"\\f46b\"; }\n\n.ion-ios-musical-note-outline:before {\n  content: \"\\f1cc\"; }\n\n.ion-ios-musical-notes:before {\n  content: \"\\f46c\"; }\n\n.ion-ios-musical-notes-outline:before {\n  content: \"\\f1cd\"; }\n\n.ion-ios-navigate:before {\n  content: \"\\f46e\"; }\n\n.ion-ios-navigate-outline:before {\n  content: \"\\f46d\"; }\n\n.ion-ios-no-smoking:before {\n  content: \"\\f1cf\"; }\n\n.ion-ios-no-smoking-outline:before {\n  content: \"\\f1ce\"; }\n\n.ion-ios-notifications:before {\n  content: \"\\f1d3\"; }\n\n.ion-ios-notifications-off:before {\n  content: \"\\f1d1\"; }\n\n.ion-ios-notifications-off-outline:before {\n  content: \"\\f1d0\"; }\n\n.ion-ios-notifications-outline:before {\n  content: \"\\f1d2\"; }\n\n.ion-ios-nuclear:before {\n  content: \"\\f1d5\"; }\n\n.ion-ios-nuclear-outline:before {\n  content: \"\\f1d4\"; }\n\n.ion-ios-nutrition:before {\n  content: \"\\f470\"; }\n\n.ion-ios-nutrition-outline:before {\n  content: \"\\f46f\"; }\n\n.ion-ios-open:before {\n  content: \"\\f1d7\"; }\n\n.ion-ios-open-outline:before {\n  content: \"\\f1d6\"; }\n\n.ion-ios-options:before {\n  content: \"\\f1d9\"; }\n\n.ion-ios-options-outline:before {\n  content: \"\\f1d8\"; }\n\n.ion-ios-outlet:before {\n  content: \"\\f1db\"; }\n\n.ion-ios-outlet-outline:before {\n  content: \"\\f1da\"; }\n\n.ion-ios-paper:before {\n  content: \"\\f472\"; }\n\n.ion-ios-paper-outline:before {\n  content: \"\\f471\"; }\n\n.ion-ios-paper-plane:before {\n  content: \"\\f1dd\"; }\n\n.ion-ios-paper-plane-outline:before {\n  content: \"\\f1dc\"; }\n\n.ion-ios-partly-sunny:before {\n  content: \"\\f1df\"; }\n\n.ion-ios-partly-sunny-outline:before {\n  content: \"\\f1de\"; }\n\n.ion-ios-pause:before {\n  content: \"\\f478\"; }\n\n.ion-ios-pause-outline:before {\n  content: \"\\f477\"; }\n\n.ion-ios-paw:before {\n  content: \"\\f47a\"; }\n\n.ion-ios-paw-outline:before {\n  content: \"\\f479\"; }\n\n.ion-ios-people:before {\n  content: \"\\f47c\"; }\n\n.ion-ios-people-outline:before {\n  content: \"\\f47b\"; }\n\n.ion-ios-person:before {\n  content: \"\\f47e\"; }\n\n.ion-ios-person-add:before {\n  content: \"\\f1e1\"; }\n\n.ion-ios-person-add-outline:before {\n  content: \"\\f1e0\"; }\n\n.ion-ios-person-outline:before {\n  content: \"\\f47d\"; }\n\n.ion-ios-phone-landscape:before {\n  content: \"\\f1e2\"; }\n\n.ion-ios-phone-landscape-outline:before {\n  content: \"\\f1e2\"; }\n\n.ion-ios-phone-portrait:before {\n  content: \"\\f1e3\"; }\n\n.ion-ios-phone-portrait-outline:before {\n  content: \"\\f1e3\"; }\n\n.ion-ios-photos:before {\n  content: \"\\f482\"; }\n\n.ion-ios-photos-outline:before {\n  content: \"\\f481\"; }\n\n.ion-ios-pie:before {\n  content: \"\\f484\"; }\n\n.ion-ios-pie-outline:before {\n  content: \"\\f483\"; }\n\n.ion-ios-pin:before {\n  content: \"\\f1e5\"; }\n\n.ion-ios-pin-outline:before {\n  content: \"\\f1e4\"; }\n\n.ion-ios-pint:before {\n  content: \"\\f486\"; }\n\n.ion-ios-pint-outline:before {\n  content: \"\\f485\"; }\n\n.ion-ios-pizza:before {\n  content: \"\\f1e7\"; }\n\n.ion-ios-pizza-outline:before {\n  content: \"\\f1e6\"; }\n\n.ion-ios-plane:before {\n  content: \"\\f1e9\"; }\n\n.ion-ios-plane-outline:before {\n  content: \"\\f1e8\"; }\n\n.ion-ios-planet:before {\n  content: \"\\f1eb\"; }\n\n.ion-ios-planet-outline:before {\n  content: \"\\f1ea\"; }\n\n.ion-ios-play:before {\n  content: \"\\f488\"; }\n\n.ion-ios-play-outline:before {\n  content: \"\\f487\"; }\n\n.ion-ios-podium:before {\n  content: \"\\f1ed\"; }\n\n.ion-ios-podium-outline:before {\n  content: \"\\f1ec\"; }\n\n.ion-ios-power:before {\n  content: \"\\f1ef\"; }\n\n.ion-ios-power-outline:before {\n  content: \"\\f1ee\"; }\n\n.ion-ios-pricetag:before {\n  content: \"\\f48d\"; }\n\n.ion-ios-pricetag-outline:before {\n  content: \"\\f48c\"; }\n\n.ion-ios-pricetags:before {\n  content: \"\\f48f\"; }\n\n.ion-ios-pricetags-outline:before {\n  content: \"\\f48e\"; }\n\n.ion-ios-print:before {\n  content: \"\\f1f1\"; }\n\n.ion-ios-print-outline:before {\n  content: \"\\f1f0\"; }\n\n.ion-ios-pulse:before {\n  content: \"\\f493\"; }\n\n.ion-ios-pulse-outline:before {\n  content: \"\\f1f2\"; }\n\n.ion-ios-qr-scanner:before {\n  content: \"\\f1f3\"; }\n\n.ion-ios-qr-scanner-outline:before {\n  content: \"\\f1f3\"; }\n\n.ion-ios-quote:before {\n  content: \"\\f1f5\"; }\n\n.ion-ios-quote-outline:before {\n  content: \"\\f1f4\"; }\n\n.ion-ios-radio:before {\n  content: \"\\f1f9\"; }\n\n.ion-ios-radio-button-off:before {\n  content: \"\\f1f6\"; }\n\n.ion-ios-radio-button-off-outline:before {\n  content: \"\\f1f6\"; }\n\n.ion-ios-radio-button-on:before {\n  content: \"\\f1f7\"; }\n\n.ion-ios-radio-button-on-outline:before {\n  content: \"\\f1f7\"; }\n\n.ion-ios-radio-outline:before {\n  content: \"\\f1f8\"; }\n\n.ion-ios-rainy:before {\n  content: \"\\f495\"; }\n\n.ion-ios-rainy-outline:before {\n  content: \"\\f494\"; }\n\n.ion-ios-recording:before {\n  content: \"\\f497\"; }\n\n.ion-ios-recording-outline:before {\n  content: \"\\f496\"; }\n\n.ion-ios-redo:before {\n  content: \"\\f499\"; }\n\n.ion-ios-redo-outline:before {\n  content: \"\\f498\"; }\n\n.ion-ios-refresh:before {\n  content: \"\\f49c\"; }\n\n.ion-ios-refresh-circle:before {\n  content: \"\\f226\"; }\n\n.ion-ios-refresh-circle-outline:before {\n  content: \"\\f224\"; }\n\n.ion-ios-refresh-outline:before {\n  content: \"\\f49c\"; }\n\n.ion-ios-remove:before {\n  content: \"\\f1fc\"; }\n\n.ion-ios-remove-circle:before {\n  content: \"\\f1fb\"; }\n\n.ion-ios-remove-circle-outline:before {\n  content: \"\\f1fa\"; }\n\n.ion-ios-remove-outline:before {\n  content: \"\\f1fc\"; }\n\n.ion-ios-reorder:before {\n  content: \"\\f1fd\"; }\n\n.ion-ios-reorder-outline:before {\n  content: \"\\f1fd\"; }\n\n.ion-ios-repeat:before {\n  content: \"\\f1fe\"; }\n\n.ion-ios-repeat-outline:before {\n  content: \"\\f1fe\"; }\n\n.ion-ios-resize:before {\n  content: \"\\f1ff\"; }\n\n.ion-ios-resize-outline:before {\n  content: \"\\f1ff\"; }\n\n.ion-ios-restaurant:before {\n  content: \"\\f201\"; }\n\n.ion-ios-restaurant-outline:before {\n  content: \"\\f200\"; }\n\n.ion-ios-return-left:before {\n  content: \"\\f202\"; }\n\n.ion-ios-return-left-outline:before {\n  content: \"\\f202\"; }\n\n.ion-ios-return-right:before {\n  content: \"\\f203\"; }\n\n.ion-ios-return-right-outline:before {\n  content: \"\\f203\"; }\n\n.ion-ios-reverse-camera:before {\n  content: \"\\f49f\"; }\n\n.ion-ios-reverse-camera-outline:before {\n  content: \"\\f49e\"; }\n\n.ion-ios-rewind:before {\n  content: \"\\f4a1\"; }\n\n.ion-ios-rewind-outline:before {\n  content: \"\\f4a0\"; }\n\n.ion-ios-ribbon:before {\n  content: \"\\f205\"; }\n\n.ion-ios-ribbon-outline:before {\n  content: \"\\f204\"; }\n\n.ion-ios-rose:before {\n  content: \"\\f4a3\"; }\n\n.ion-ios-rose-outline:before {\n  content: \"\\f4a2\"; }\n\n.ion-ios-sad:before {\n  content: \"\\f207\"; }\n\n.ion-ios-sad-outline:before {\n  content: \"\\f206\"; }\n\n.ion-ios-school:before {\n  content: \"\\f209\"; }\n\n.ion-ios-school-outline:before {\n  content: \"\\f208\"; }\n\n.ion-ios-search:before {\n  content: \"\\f4a5\"; }\n\n.ion-ios-search-outline:before {\n  content: \"\\f20a\"; }\n\n.ion-ios-send:before {\n  content: \"\\f20c\"; }\n\n.ion-ios-send-outline:before {\n  content: \"\\f20b\"; }\n\n.ion-ios-settings:before {\n  content: \"\\f4a7\"; }\n\n.ion-ios-settings-outline:before {\n  content: \"\\f20d\"; }\n\n.ion-ios-share:before {\n  content: \"\\f211\"; }\n\n.ion-ios-share-alt:before {\n  content: \"\\f20f\"; }\n\n.ion-ios-share-alt-outline:before {\n  content: \"\\f20e\"; }\n\n.ion-ios-share-outline:before {\n  content: \"\\f210\"; }\n\n.ion-ios-shirt:before {\n  content: \"\\f213\"; }\n\n.ion-ios-shirt-outline:before {\n  content: \"\\f212\"; }\n\n.ion-ios-shuffle:before {\n  content: \"\\f4a9\"; }\n\n.ion-ios-shuffle-outline:before {\n  content: \"\\f4a9\"; }\n\n.ion-ios-skip-backward:before {\n  content: \"\\f215\"; }\n\n.ion-ios-skip-backward-outline:before {\n  content: \"\\f214\"; }\n\n.ion-ios-skip-forward:before {\n  content: \"\\f217\"; }\n\n.ion-ios-skip-forward-outline:before {\n  content: \"\\f216\"; }\n\n.ion-ios-snow:before {\n  content: \"\\f218\"; }\n\n.ion-ios-snow-outline:before {\n  content: \"\\f22c\"; }\n\n.ion-ios-speedometer:before {\n  content: \"\\f4b0\"; }\n\n.ion-ios-speedometer-outline:before {\n  content: \"\\f4af\"; }\n\n.ion-ios-square:before {\n  content: \"\\f21a\"; }\n\n.ion-ios-square-outline:before {\n  content: \"\\f219\"; }\n\n.ion-ios-star:before {\n  content: \"\\f4b3\"; }\n\n.ion-ios-star-half:before {\n  content: \"\\f4b1\"; }\n\n.ion-ios-star-half-outline:before {\n  content: \"\\f4b1\"; }\n\n.ion-ios-star-outline:before {\n  content: \"\\f4b2\"; }\n\n.ion-ios-stats:before {\n  content: \"\\f21c\"; }\n\n.ion-ios-stats-outline:before {\n  content: \"\\f21b\"; }\n\n.ion-ios-stopwatch:before {\n  content: \"\\f4b5\"; }\n\n.ion-ios-stopwatch-outline:before {\n  content: \"\\f4b4\"; }\n\n.ion-ios-subway:before {\n  content: \"\\f21e\"; }\n\n.ion-ios-subway-outline:before {\n  content: \"\\f21d\"; }\n\n.ion-ios-sunny:before {\n  content: \"\\f4b7\"; }\n\n.ion-ios-sunny-outline:before {\n  content: \"\\f4b6\"; }\n\n.ion-ios-swap:before {\n  content: \"\\f21f\"; }\n\n.ion-ios-swap-outline:before {\n  content: \"\\f21f\"; }\n\n.ion-ios-switch:before {\n  content: \"\\f221\"; }\n\n.ion-ios-switch-outline:before {\n  content: \"\\f220\"; }\n\n.ion-ios-sync:before {\n  content: \"\\f222\"; }\n\n.ion-ios-sync-outline:before {\n  content: \"\\f222\"; }\n\n.ion-ios-tablet-landscape:before {\n  content: \"\\f223\"; }\n\n.ion-ios-tablet-landscape-outline:before {\n  content: \"\\f223\"; }\n\n.ion-ios-tablet-portrait:before {\n  content: \"\\f24e\"; }\n\n.ion-ios-tablet-portrait-outline:before {\n  content: \"\\f24e\"; }\n\n.ion-ios-tennisball:before {\n  content: \"\\f4bb\"; }\n\n.ion-ios-tennisball-outline:before {\n  content: \"\\f4ba\"; }\n\n.ion-ios-text:before {\n  content: \"\\f250\"; }\n\n.ion-ios-text-outline:before {\n  content: \"\\f24f\"; }\n\n.ion-ios-thermometer:before {\n  content: \"\\f252\"; }\n\n.ion-ios-thermometer-outline:before {\n  content: \"\\f251\"; }\n\n.ion-ios-thumbs-down:before {\n  content: \"\\f254\"; }\n\n.ion-ios-thumbs-down-outline:before {\n  content: \"\\f253\"; }\n\n.ion-ios-thumbs-up:before {\n  content: \"\\f256\"; }\n\n.ion-ios-thumbs-up-outline:before {\n  content: \"\\f255\"; }\n\n.ion-ios-thunderstorm:before {\n  content: \"\\f4bd\"; }\n\n.ion-ios-thunderstorm-outline:before {\n  content: \"\\f4bc\"; }\n\n.ion-ios-time:before {\n  content: \"\\f4bf\"; }\n\n.ion-ios-time-outline:before {\n  content: \"\\f4be\"; }\n\n.ion-ios-timer:before {\n  content: \"\\f4c1\"; }\n\n.ion-ios-timer-outline:before {\n  content: \"\\f4c0\"; }\n\n.ion-ios-train:before {\n  content: \"\\f258\"; }\n\n.ion-ios-train-outline:before {\n  content: \"\\f257\"; }\n\n.ion-ios-transgender:before {\n  content: \"\\f259\"; }\n\n.ion-ios-transgender-outline:before {\n  content: \"\\f259\"; }\n\n.ion-ios-trash:before {\n  content: \"\\f4c5\"; }\n\n.ion-ios-trash-outline:before {\n  content: \"\\f4c4\"; }\n\n.ion-ios-trending-down:before {\n  content: \"\\f25a\"; }\n\n.ion-ios-trending-down-outline:before {\n  content: \"\\f25a\"; }\n\n.ion-ios-trending-up:before {\n  content: \"\\f25b\"; }\n\n.ion-ios-trending-up-outline:before {\n  content: \"\\f25b\"; }\n\n.ion-ios-trophy:before {\n  content: \"\\f25d\"; }\n\n.ion-ios-trophy-outline:before {\n  content: \"\\f25c\"; }\n\n.ion-ios-umbrella:before {\n  content: \"\\f25f\"; }\n\n.ion-ios-umbrella-outline:before {\n  content: \"\\f25e\"; }\n\n.ion-ios-undo:before {\n  content: \"\\f4c7\"; }\n\n.ion-ios-undo-outline:before {\n  content: \"\\f4c6\"; }\n\n.ion-ios-unlock:before {\n  content: \"\\f261\"; }\n\n.ion-ios-unlock-outline:before {\n  content: \"\\f260\"; }\n\n.ion-ios-videocam:before {\n  content: \"\\f4cd\"; }\n\n.ion-ios-videocam-outline:before {\n  content: \"\\f4cc\"; }\n\n.ion-ios-volume-down:before {\n  content: \"\\f262\"; }\n\n.ion-ios-volume-down-outline:before {\n  content: \"\\f262\"; }\n\n.ion-ios-volume-mute:before {\n  content: \"\\f263\"; }\n\n.ion-ios-volume-mute-outline:before {\n  content: \"\\f263\"; }\n\n.ion-ios-volume-off:before {\n  content: \"\\f264\"; }\n\n.ion-ios-volume-off-outline:before {\n  content: \"\\f264\"; }\n\n.ion-ios-volume-up:before {\n  content: \"\\f265\"; }\n\n.ion-ios-volume-up-outline:before {\n  content: \"\\f265\"; }\n\n.ion-ios-walk:before {\n  content: \"\\f266\"; }\n\n.ion-ios-walk-outline:before {\n  content: \"\\f266\"; }\n\n.ion-ios-warning:before {\n  content: \"\\f268\"; }\n\n.ion-ios-warning-outline:before {\n  content: \"\\f267\"; }\n\n.ion-ios-watch:before {\n  content: \"\\f269\"; }\n\n.ion-ios-watch-outline:before {\n  content: \"\\f269\"; }\n\n.ion-ios-water:before {\n  content: \"\\f26b\"; }\n\n.ion-ios-water-outline:before {\n  content: \"\\f26a\"; }\n\n.ion-ios-wifi:before {\n  content: \"\\f26d\"; }\n\n.ion-ios-wifi-outline:before {\n  content: \"\\f26c\"; }\n\n.ion-ios-wine:before {\n  content: \"\\f26f\"; }\n\n.ion-ios-wine-outline:before {\n  content: \"\\f26e\"; }\n\n.ion-ios-woman:before {\n  content: \"\\f271\"; }\n\n.ion-ios-woman-outline:before {\n  content: \"\\f270\"; }\n\n.ion-logo-android:before {\n  content: \"\\f225\"; }\n\n.ion-logo-angular:before {\n  content: \"\\f227\"; }\n\n.ion-logo-apple:before {\n  content: \"\\f229\"; }\n\n.ion-logo-bitcoin:before {\n  content: \"\\f22b\"; }\n\n.ion-logo-buffer:before {\n  content: \"\\f22d\"; }\n\n.ion-logo-chrome:before {\n  content: \"\\f22f\"; }\n\n.ion-logo-codepen:before {\n  content: \"\\f230\"; }\n\n.ion-logo-css3:before {\n  content: \"\\f231\"; }\n\n.ion-logo-designernews:before {\n  content: \"\\f232\"; }\n\n.ion-logo-dribbble:before {\n  content: \"\\f233\"; }\n\n.ion-logo-dropbox:before {\n  content: \"\\f234\"; }\n\n.ion-logo-euro:before {\n  content: \"\\f235\"; }\n\n.ion-logo-facebook:before {\n  content: \"\\f236\"; }\n\n.ion-logo-foursquare:before {\n  content: \"\\f237\"; }\n\n.ion-logo-freebsd-devil:before {\n  content: \"\\f238\"; }\n\n.ion-logo-github:before {\n  content: \"\\f239\"; }\n\n.ion-logo-google:before {\n  content: \"\\f23a\"; }\n\n.ion-logo-googleplus:before {\n  content: \"\\f23b\"; }\n\n.ion-logo-hackernews:before {\n  content: \"\\f23c\"; }\n\n.ion-logo-html5:before {\n  content: \"\\f23d\"; }\n\n.ion-logo-instagram:before {\n  content: \"\\f23e\"; }\n\n.ion-logo-javascript:before {\n  content: \"\\f23f\"; }\n\n.ion-logo-linkedin:before {\n  content: \"\\f240\"; }\n\n.ion-logo-markdown:before {\n  content: \"\\f241\"; }\n\n.ion-logo-nodejs:before {\n  content: \"\\f242\"; }\n\n.ion-logo-octocat:before {\n  content: \"\\f243\"; }\n\n.ion-logo-pinterest:before {\n  content: \"\\f244\"; }\n\n.ion-logo-playstation:before {\n  content: \"\\f245\"; }\n\n.ion-logo-python:before {\n  content: \"\\f246\"; }\n\n.ion-logo-reddit:before {\n  content: \"\\f247\"; }\n\n.ion-logo-rss:before {\n  content: \"\\f248\"; }\n\n.ion-logo-sass:before {\n  content: \"\\f249\"; }\n\n.ion-logo-skype:before {\n  content: \"\\f24a\"; }\n\n.ion-logo-snapchat:before {\n  content: \"\\f24b\"; }\n\n.ion-logo-steam:before {\n  content: \"\\f24c\"; }\n\n.ion-logo-tumblr:before {\n  content: \"\\f24d\"; }\n\n.ion-logo-tux:before {\n  content: \"\\f2ae\"; }\n\n.ion-logo-twitch:before {\n  content: \"\\f2af\"; }\n\n.ion-logo-twitter:before {\n  content: \"\\f2b0\"; }\n\n.ion-logo-usd:before {\n  content: \"\\f2b1\"; }\n\n.ion-logo-vimeo:before {\n  content: \"\\f2c4\"; }\n\n.ion-logo-whatsapp:before {\n  content: \"\\f2c5\"; }\n\n.ion-logo-windows:before {\n  content: \"\\f32f\"; }\n\n.ion-logo-wordpress:before {\n  content: \"\\f330\"; }\n\n.ion-logo-xbox:before {\n  content: \"\\f34c\"; }\n\n.ion-logo-yahoo:before {\n  content: \"\\f34d\"; }\n\n.ion-logo-yen:before {\n  content: \"\\f34e\"; }\n\n.ion-logo-youtube:before {\n  content: \"\\f34f\"; }\n\n.ion-md-add:before {\n  content: \"\\f273\"; }\n\n.ion-md-add-circle:before {\n  content: \"\\f272\"; }\n\n.ion-md-alarm:before {\n  content: \"\\f274\"; }\n\n.ion-md-albums:before {\n  content: \"\\f275\"; }\n\n.ion-md-alert:before {\n  content: \"\\f276\"; }\n\n.ion-md-american-football:before {\n  content: \"\\f277\"; }\n\n.ion-md-analytics:before {\n  content: \"\\f278\"; }\n\n.ion-md-aperture:before {\n  content: \"\\f279\"; }\n\n.ion-md-apps:before {\n  content: \"\\f27a\"; }\n\n.ion-md-appstore:before {\n  content: \"\\f27b\"; }\n\n.ion-md-archive:before {\n  content: \"\\f27c\"; }\n\n.ion-md-arrow-back:before {\n  content: \"\\f27d\"; }\n\n.ion-md-arrow-down:before {\n  content: \"\\f27e\"; }\n\n.ion-md-arrow-dropdown:before {\n  content: \"\\f280\"; }\n\n.ion-md-arrow-dropdown-circle:before {\n  content: \"\\f27f\"; }\n\n.ion-md-arrow-dropleft:before {\n  content: \"\\f282\"; }\n\n.ion-md-arrow-dropleft-circle:before {\n  content: \"\\f281\"; }\n\n.ion-md-arrow-dropright:before {\n  content: \"\\f284\"; }\n\n.ion-md-arrow-dropright-circle:before {\n  content: \"\\f283\"; }\n\n.ion-md-arrow-dropup:before {\n  content: \"\\f286\"; }\n\n.ion-md-arrow-dropup-circle:before {\n  content: \"\\f285\"; }\n\n.ion-md-arrow-forward:before {\n  content: \"\\f287\"; }\n\n.ion-md-arrow-round-back:before {\n  content: \"\\f288\"; }\n\n.ion-md-arrow-round-down:before {\n  content: \"\\f289\"; }\n\n.ion-md-arrow-round-forward:before {\n  content: \"\\f28a\"; }\n\n.ion-md-arrow-round-up:before {\n  content: \"\\f28b\"; }\n\n.ion-md-arrow-up:before {\n  content: \"\\f28c\"; }\n\n.ion-md-at:before {\n  content: \"\\f28d\"; }\n\n.ion-md-attach:before {\n  content: \"\\f28e\"; }\n\n.ion-md-backspace:before {\n  content: \"\\f28f\"; }\n\n.ion-md-barcode:before {\n  content: \"\\f290\"; }\n\n.ion-md-baseball:before {\n  content: \"\\f291\"; }\n\n.ion-md-basket:before {\n  content: \"\\f292\"; }\n\n.ion-md-basketball:before {\n  content: \"\\f293\"; }\n\n.ion-md-battery-charging:before {\n  content: \"\\f294\"; }\n\n.ion-md-battery-dead:before {\n  content: \"\\f295\"; }\n\n.ion-md-battery-full:before {\n  content: \"\\f296\"; }\n\n.ion-md-beaker:before {\n  content: \"\\f297\"; }\n\n.ion-md-beer:before {\n  content: \"\\f298\"; }\n\n.ion-md-bicycle:before {\n  content: \"\\f299\"; }\n\n.ion-md-bluetooth:before {\n  content: \"\\f29a\"; }\n\n.ion-md-boat:before {\n  content: \"\\f29b\"; }\n\n.ion-md-body:before {\n  content: \"\\f29c\"; }\n\n.ion-md-bonfire:before {\n  content: \"\\f29d\"; }\n\n.ion-md-book:before {\n  content: \"\\f29e\"; }\n\n.ion-md-bookmark:before {\n  content: \"\\f29f\"; }\n\n.ion-md-bookmarks:before {\n  content: \"\\f2a0\"; }\n\n.ion-md-bowtie:before {\n  content: \"\\f2a1\"; }\n\n.ion-md-briefcase:before {\n  content: \"\\f2a2\"; }\n\n.ion-md-browsers:before {\n  content: \"\\f2a3\"; }\n\n.ion-md-brush:before {\n  content: \"\\f2a4\"; }\n\n.ion-md-bug:before {\n  content: \"\\f2a5\"; }\n\n.ion-md-build:before {\n  content: \"\\f2a6\"; }\n\n.ion-md-bulb:before {\n  content: \"\\f2a7\"; }\n\n.ion-md-bus:before {\n  content: \"\\f2a8\"; }\n\n.ion-md-cafe:before {\n  content: \"\\f2a9\"; }\n\n.ion-md-calculator:before {\n  content: \"\\f2aa\"; }\n\n.ion-md-calendar:before {\n  content: \"\\f2ab\"; }\n\n.ion-md-call:before {\n  content: \"\\f2ac\"; }\n\n.ion-md-camera:before {\n  content: \"\\f2ad\"; }\n\n.ion-md-car:before {\n  content: \"\\f2b2\"; }\n\n.ion-md-card:before {\n  content: \"\\f2b3\"; }\n\n.ion-md-cart:before {\n  content: \"\\f2b4\"; }\n\n.ion-md-cash:before {\n  content: \"\\f2b5\"; }\n\n.ion-md-chatboxes:before {\n  content: \"\\f2b6\"; }\n\n.ion-md-chatbubbles:before {\n  content: \"\\f2b7\"; }\n\n.ion-md-checkbox:before {\n  content: \"\\f2b9\"; }\n\n.ion-md-checkbox-outline:before {\n  content: \"\\f2b8\"; }\n\n.ion-md-checkmark:before {\n  content: \"\\f2bc\"; }\n\n.ion-md-checkmark-circle:before {\n  content: \"\\f2bb\"; }\n\n.ion-md-checkmark-circle-outline:before {\n  content: \"\\f2ba\"; }\n\n.ion-md-clipboard:before {\n  content: \"\\f2bd\"; }\n\n.ion-md-clock:before {\n  content: \"\\f2be\"; }\n\n.ion-md-close:before {\n  content: \"\\f2c0\"; }\n\n.ion-md-close-circle:before {\n  content: \"\\f2bf\"; }\n\n.ion-md-closed-captioning:before {\n  content: \"\\f2c1\"; }\n\n.ion-md-cloud:before {\n  content: \"\\f2c9\"; }\n\n.ion-md-cloud-circle:before {\n  content: \"\\f2c2\"; }\n\n.ion-md-cloud-done:before {\n  content: \"\\f2c3\"; }\n\n.ion-md-cloud-download:before {\n  content: \"\\f2c6\"; }\n\n.ion-md-cloud-outline:before {\n  content: \"\\f2c7\"; }\n\n.ion-md-cloud-upload:before {\n  content: \"\\f2c8\"; }\n\n.ion-md-cloudy:before {\n  content: \"\\f2cb\"; }\n\n.ion-md-cloudy-night:before {\n  content: \"\\f2ca\"; }\n\n.ion-md-code:before {\n  content: \"\\f2ce\"; }\n\n.ion-md-code-download:before {\n  content: \"\\f2cc\"; }\n\n.ion-md-code-working:before {\n  content: \"\\f2cd\"; }\n\n.ion-md-cog:before {\n  content: \"\\f2cf\"; }\n\n.ion-md-color-fill:before {\n  content: \"\\f2d0\"; }\n\n.ion-md-color-filter:before {\n  content: \"\\f2d1\"; }\n\n.ion-md-color-palette:before {\n  content: \"\\f2d2\"; }\n\n.ion-md-color-wand:before {\n  content: \"\\f2d3\"; }\n\n.ion-md-compass:before {\n  content: \"\\f2d4\"; }\n\n.ion-md-construct:before {\n  content: \"\\f2d5\"; }\n\n.ion-md-contact:before {\n  content: \"\\f2d6\"; }\n\n.ion-md-contacts:before {\n  content: \"\\f2d7\"; }\n\n.ion-md-contract:before {\n  content: \"\\f2d8\"; }\n\n.ion-md-contrast:before {\n  content: \"\\f2d9\"; }\n\n.ion-md-copy:before {\n  content: \"\\f2da\"; }\n\n.ion-md-create:before {\n  content: \"\\f2db\"; }\n\n.ion-md-crop:before {\n  content: \"\\f2dc\"; }\n\n.ion-md-cube:before {\n  content: \"\\f2dd\"; }\n\n.ion-md-cut:before {\n  content: \"\\f2de\"; }\n\n.ion-md-desktop:before {\n  content: \"\\f2df\"; }\n\n.ion-md-disc:before {\n  content: \"\\f2e0\"; }\n\n.ion-md-document:before {\n  content: \"\\f2e1\"; }\n\n.ion-md-done-all:before {\n  content: \"\\f2e2\"; }\n\n.ion-md-download:before {\n  content: \"\\f2e3\"; }\n\n.ion-md-easel:before {\n  content: \"\\f2e4\"; }\n\n.ion-md-egg:before {\n  content: \"\\f2e5\"; }\n\n.ion-md-exit:before {\n  content: \"\\f2e6\"; }\n\n.ion-md-expand:before {\n  content: \"\\f2e7\"; }\n\n.ion-md-eye:before {\n  content: \"\\f2e9\"; }\n\n.ion-md-eye-off:before {\n  content: \"\\f2e8\"; }\n\n.ion-md-fastforward:before {\n  content: \"\\f2ea\"; }\n\n.ion-md-female:before {\n  content: \"\\f2eb\"; }\n\n.ion-md-filing:before {\n  content: \"\\f2ec\"; }\n\n.ion-md-film:before {\n  content: \"\\f2ed\"; }\n\n.ion-md-finger-print:before {\n  content: \"\\f2ee\"; }\n\n.ion-md-flag:before {\n  content: \"\\f2ef\"; }\n\n.ion-md-flame:before {\n  content: \"\\f2f0\"; }\n\n.ion-md-flash:before {\n  content: \"\\f2f1\"; }\n\n.ion-md-flask:before {\n  content: \"\\f2f2\"; }\n\n.ion-md-flower:before {\n  content: \"\\f2f3\"; }\n\n.ion-md-folder:before {\n  content: \"\\f2f5\"; }\n\n.ion-md-folder-open:before {\n  content: \"\\f2f4\"; }\n\n.ion-md-football:before {\n  content: \"\\f2f6\"; }\n\n.ion-md-funnel:before {\n  content: \"\\f2f7\"; }\n\n.ion-md-game-controller-a:before {\n  content: \"\\f2f8\"; }\n\n.ion-md-game-controller-b:before {\n  content: \"\\f2f9\"; }\n\n.ion-md-git-branch:before {\n  content: \"\\f2fa\"; }\n\n.ion-md-git-commit:before {\n  content: \"\\f2fb\"; }\n\n.ion-md-git-compare:before {\n  content: \"\\f2fc\"; }\n\n.ion-md-git-merge:before {\n  content: \"\\f2fd\"; }\n\n.ion-md-git-network:before {\n  content: \"\\f2fe\"; }\n\n.ion-md-git-pull-request:before {\n  content: \"\\f2ff\"; }\n\n.ion-md-glasses:before {\n  content: \"\\f300\"; }\n\n.ion-md-globe:before {\n  content: \"\\f301\"; }\n\n.ion-md-grid:before {\n  content: \"\\f302\"; }\n\n.ion-md-hammer:before {\n  content: \"\\f303\"; }\n\n.ion-md-hand:before {\n  content: \"\\f304\"; }\n\n.ion-md-happy:before {\n  content: \"\\f305\"; }\n\n.ion-md-headset:before {\n  content: \"\\f306\"; }\n\n.ion-md-heart:before {\n  content: \"\\f308\"; }\n\n.ion-md-heart-outline:before {\n  content: \"\\f307\"; }\n\n.ion-md-help:before {\n  content: \"\\f30b\"; }\n\n.ion-md-help-buoy:before {\n  content: \"\\f309\"; }\n\n.ion-md-help-circle:before {\n  content: \"\\f30a\"; }\n\n.ion-md-home:before {\n  content: \"\\f30c\"; }\n\n.ion-md-ice-cream:before {\n  content: \"\\f30d\"; }\n\n.ion-md-image:before {\n  content: \"\\f30e\"; }\n\n.ion-md-images:before {\n  content: \"\\f30f\"; }\n\n.ion-md-infinite:before {\n  content: \"\\f310\"; }\n\n.ion-md-information:before {\n  content: \"\\f312\"; }\n\n.ion-md-information-circle:before {\n  content: \"\\f311\"; }\n\n.ion-md-ionic:before {\n  content: \"\\f313\"; }\n\n.ion-md-ionitron:before {\n  content: \"\\f314\"; }\n\n.ion-md-jet:before {\n  content: \"\\f315\"; }\n\n.ion-md-key:before {\n  content: \"\\f316\"; }\n\n.ion-md-keypad:before {\n  content: \"\\f317\"; }\n\n.ion-md-laptop:before {\n  content: \"\\f318\"; }\n\n.ion-md-leaf:before {\n  content: \"\\f319\"; }\n\n.ion-md-link:before {\n  content: \"\\f22e\"; }\n\n.ion-md-list:before {\n  content: \"\\f31b\"; }\n\n.ion-md-list-box:before {\n  content: \"\\f31a\"; }\n\n.ion-md-locate:before {\n  content: \"\\f31c\"; }\n\n.ion-md-lock:before {\n  content: \"\\f31d\"; }\n\n.ion-md-log-in:before {\n  content: \"\\f31e\"; }\n\n.ion-md-log-out:before {\n  content: \"\\f31f\"; }\n\n.ion-md-magnet:before {\n  content: \"\\f320\"; }\n\n.ion-md-mail:before {\n  content: \"\\f322\"; }\n\n.ion-md-mail-open:before {\n  content: \"\\f321\"; }\n\n.ion-md-male:before {\n  content: \"\\f323\"; }\n\n.ion-md-man:before {\n  content: \"\\f324\"; }\n\n.ion-md-map:before {\n  content: \"\\f325\"; }\n\n.ion-md-medal:before {\n  content: \"\\f326\"; }\n\n.ion-md-medical:before {\n  content: \"\\f327\"; }\n\n.ion-md-medkit:before {\n  content: \"\\f328\"; }\n\n.ion-md-megaphone:before {\n  content: \"\\f329\"; }\n\n.ion-md-menu:before {\n  content: \"\\f32a\"; }\n\n.ion-md-mic:before {\n  content: \"\\f32c\"; }\n\n.ion-md-mic-off:before {\n  content: \"\\f32b\"; }\n\n.ion-md-microphone:before {\n  content: \"\\f32d\"; }\n\n.ion-md-moon:before {\n  content: \"\\f32e\"; }\n\n.ion-md-more:before {\n  content: \"\\f1c9\"; }\n\n.ion-md-move:before {\n  content: \"\\f331\"; }\n\n.ion-md-musical-note:before {\n  content: \"\\f332\"; }\n\n.ion-md-musical-notes:before {\n  content: \"\\f333\"; }\n\n.ion-md-navigate:before {\n  content: \"\\f334\"; }\n\n.ion-md-no-smoking:before {\n  content: \"\\f335\"; }\n\n.ion-md-notifications:before {\n  content: \"\\f338\"; }\n\n.ion-md-notifications-off:before {\n  content: \"\\f336\"; }\n\n.ion-md-notifications-outline:before {\n  content: \"\\f337\"; }\n\n.ion-md-nuclear:before {\n  content: \"\\f339\"; }\n\n.ion-md-nutrition:before {\n  content: \"\\f33a\"; }\n\n.ion-md-open:before {\n  content: \"\\f33b\"; }\n\n.ion-md-options:before {\n  content: \"\\f33c\"; }\n\n.ion-md-outlet:before {\n  content: \"\\f33d\"; }\n\n.ion-md-paper:before {\n  content: \"\\f33f\"; }\n\n.ion-md-paper-plane:before {\n  content: \"\\f33e\"; }\n\n.ion-md-partly-sunny:before {\n  content: \"\\f340\"; }\n\n.ion-md-pause:before {\n  content: \"\\f341\"; }\n\n.ion-md-paw:before {\n  content: \"\\f342\"; }\n\n.ion-md-people:before {\n  content: \"\\f343\"; }\n\n.ion-md-person:before {\n  content: \"\\f345\"; }\n\n.ion-md-person-add:before {\n  content: \"\\f344\"; }\n\n.ion-md-phone-landscape:before {\n  content: \"\\f346\"; }\n\n.ion-md-phone-portrait:before {\n  content: \"\\f347\"; }\n\n.ion-md-photos:before {\n  content: \"\\f348\"; }\n\n.ion-md-pie:before {\n  content: \"\\f349\"; }\n\n.ion-md-pin:before {\n  content: \"\\f34a\"; }\n\n.ion-md-pint:before {\n  content: \"\\f34b\"; }\n\n.ion-md-pizza:before {\n  content: \"\\f354\"; }\n\n.ion-md-plane:before {\n  content: \"\\f355\"; }\n\n.ion-md-planet:before {\n  content: \"\\f356\"; }\n\n.ion-md-play:before {\n  content: \"\\f357\"; }\n\n.ion-md-podium:before {\n  content: \"\\f358\"; }\n\n.ion-md-power:before {\n  content: \"\\f359\"; }\n\n.ion-md-pricetag:before {\n  content: \"\\f35a\"; }\n\n.ion-md-pricetags:before {\n  content: \"\\f35b\"; }\n\n.ion-md-print:before {\n  content: \"\\f35c\"; }\n\n.ion-md-pulse:before {\n  content: \"\\f35d\"; }\n\n.ion-md-qr-scanner:before {\n  content: \"\\f35e\"; }\n\n.ion-md-quote:before {\n  content: \"\\f35f\"; }\n\n.ion-md-radio:before {\n  content: \"\\f362\"; }\n\n.ion-md-radio-button-off:before {\n  content: \"\\f360\"; }\n\n.ion-md-radio-button-on:before {\n  content: \"\\f361\"; }\n\n.ion-md-rainy:before {\n  content: \"\\f363\"; }\n\n.ion-md-recording:before {\n  content: \"\\f364\"; }\n\n.ion-md-redo:before {\n  content: \"\\f365\"; }\n\n.ion-md-refresh:before {\n  content: \"\\f366\"; }\n\n.ion-md-refresh-circle:before {\n  content: \"\\f228\"; }\n\n.ion-md-remove:before {\n  content: \"\\f368\"; }\n\n.ion-md-remove-circle:before {\n  content: \"\\f367\"; }\n\n.ion-md-reorder:before {\n  content: \"\\f369\"; }\n\n.ion-md-repeat:before {\n  content: \"\\f36a\"; }\n\n.ion-md-resize:before {\n  content: \"\\f36b\"; }\n\n.ion-md-restaurant:before {\n  content: \"\\f36c\"; }\n\n.ion-md-return-left:before {\n  content: \"\\f36d\"; }\n\n.ion-md-return-right:before {\n  content: \"\\f36e\"; }\n\n.ion-md-reverse-camera:before {\n  content: \"\\f36f\"; }\n\n.ion-md-rewind:before {\n  content: \"\\f370\"; }\n\n.ion-md-ribbon:before {\n  content: \"\\f371\"; }\n\n.ion-md-rose:before {\n  content: \"\\f372\"; }\n\n.ion-md-sad:before {\n  content: \"\\f373\"; }\n\n.ion-md-school:before {\n  content: \"\\f374\"; }\n\n.ion-md-search:before {\n  content: \"\\f375\"; }\n\n.ion-md-send:before {\n  content: \"\\f376\"; }\n\n.ion-md-settings:before {\n  content: \"\\f377\"; }\n\n.ion-md-share:before {\n  content: \"\\f379\"; }\n\n.ion-md-share-alt:before {\n  content: \"\\f378\"; }\n\n.ion-md-shirt:before {\n  content: \"\\f37a\"; }\n\n.ion-md-shuffle:before {\n  content: \"\\f37b\"; }\n\n.ion-md-skip-backward:before {\n  content: \"\\f37c\"; }\n\n.ion-md-skip-forward:before {\n  content: \"\\f37d\"; }\n\n.ion-md-snow:before {\n  content: \"\\f37e\"; }\n\n.ion-md-speedometer:before {\n  content: \"\\f37f\"; }\n\n.ion-md-square:before {\n  content: \"\\f381\"; }\n\n.ion-md-square-outline:before {\n  content: \"\\f380\"; }\n\n.ion-md-star:before {\n  content: \"\\f384\"; }\n\n.ion-md-star-half:before {\n  content: \"\\f382\"; }\n\n.ion-md-star-outline:before {\n  content: \"\\f383\"; }\n\n.ion-md-stats:before {\n  content: \"\\f385\"; }\n\n.ion-md-stopwatch:before {\n  content: \"\\f386\"; }\n\n.ion-md-subway:before {\n  content: \"\\f387\"; }\n\n.ion-md-sunny:before {\n  content: \"\\f388\"; }\n\n.ion-md-swap:before {\n  content: \"\\f389\"; }\n\n.ion-md-switch:before {\n  content: \"\\f38a\"; }\n\n.ion-md-sync:before {\n  content: \"\\f38b\"; }\n\n.ion-md-tablet-landscape:before {\n  content: \"\\f38c\"; }\n\n.ion-md-tablet-portrait:before {\n  content: \"\\f38d\"; }\n\n.ion-md-tennisball:before {\n  content: \"\\f38e\"; }\n\n.ion-md-text:before {\n  content: \"\\f38f\"; }\n\n.ion-md-thermometer:before {\n  content: \"\\f390\"; }\n\n.ion-md-thumbs-down:before {\n  content: \"\\f391\"; }\n\n.ion-md-thumbs-up:before {\n  content: \"\\f392\"; }\n\n.ion-md-thunderstorm:before {\n  content: \"\\f393\"; }\n\n.ion-md-time:before {\n  content: \"\\f394\"; }\n\n.ion-md-timer:before {\n  content: \"\\f395\"; }\n\n.ion-md-train:before {\n  content: \"\\f396\"; }\n\n.ion-md-transgender:before {\n  content: \"\\f397\"; }\n\n.ion-md-trash:before {\n  content: \"\\f398\"; }\n\n.ion-md-trending-down:before {\n  content: \"\\f399\"; }\n\n.ion-md-trending-up:before {\n  content: \"\\f39a\"; }\n\n.ion-md-trophy:before {\n  content: \"\\f39b\"; }\n\n.ion-md-umbrella:before {\n  content: \"\\f39c\"; }\n\n.ion-md-undo:before {\n  content: \"\\f39d\"; }\n\n.ion-md-unlock:before {\n  content: \"\\f39e\"; }\n\n.ion-md-videocam:before {\n  content: \"\\f39f\"; }\n\n.ion-md-volume-down:before {\n  content: \"\\f3a0\"; }\n\n.ion-md-volume-mute:before {\n  content: \"\\f3a1\"; }\n\n.ion-md-volume-off:before {\n  content: \"\\f3a2\"; }\n\n.ion-md-volume-up:before {\n  content: \"\\f3a3\"; }\n\n.ion-md-walk:before {\n  content: \"\\f3a4\"; }\n\n.ion-md-warning:before {\n  content: \"\\f3a5\"; }\n\n.ion-md-watch:before {\n  content: \"\\f3a6\"; }\n\n.ion-md-water:before {\n  content: \"\\f3a7\"; }\n\n.ion-md-wifi:before {\n  content: \"\\f3a8\"; }\n\n.ion-md-wine:before {\n  content: \"\\f3a9\"; }\n\n.ion-md-woman:before {\n  content: \"\\f3aa\"; }\n\n@font-face {\n  font-family: \"Ionicons\";\n  src: url(\"../fonts/ionicons.woff2?v=3.0.0-alpha.3\") format(\"woff2\"), url(\"../fonts/ionicons.woff?v=3.0.0-alpha.3\") format(\"woff\"), url(\"../fonts/ionicons.ttf?v=3.0.0-alpha.3\") format(\"truetype\");\n  font-weight: normal;\n  font-style: normal; }\n\nion-icon {\n  display: inline-block;\n  font-family: \"Ionicons\";\n  -moz-osx-font-smoothing: grayscale;\n  -webkit-font-smoothing: antialiased;\n  font-style: normal;\n  font-variant: normal;\n  font-weight: normal;\n  line-height: 1;\n  text-rendering: auto;\n  text-transform: none;\n  speak: none; }\n\n.ios {\n  font-family: -apple-system, \"Helvetica Neue\", \"Roboto\", sans-serif;\n  font-size: 1.4rem;\n  background-color: #fff; }\n  .ios ion-content {\n    color: #000; }\n  .ios hr {\n    background-color: rgba(0, 0, 0, 0.12); }\n  .ios.hairlines hr {\n    height: 0.55px; }\n  .ios ion-action-sheet {\n    position: absolute;\n    top: 0;\n    left: 0;\n    z-index: 1000;\n    display: block;\n    width: 100%;\n    height: 100%; }\n  .ios .action-sheet-wrapper {\n    position: absolute;\n    right: 0;\n    bottom: 0;\n    left: 0;\n    z-index: 10;\n    display: block;\n    margin: auto;\n    width: 100%;\n    max-width: 500px;\n    -webkit-transform: translate3d(0, 100%, 0);\n    transform: translate3d(0, 100%, 0); }\n  .ios .action-sheet-button {\n    width: 100%; }\n  .ios ion-action-sheet {\n    text-align: center; }\n  .ios .action-sheet-container {\n    padding: 0 10px; }\n  .ios .action-sheet-group {\n    overflow: hidden;\n    margin-bottom: 8px;\n    border-radius: 13px;\n    background: #f9f9f9; }\n    .ios .action-sheet-group:last-child {\n      margin-bottom: 10px; }\n  .ios .action-sheet-title {\n    padding: 1.5rem;\n    border-bottom: 1px solid #d6d6da;\n    border-radius: 0;\n    font-size: 1.3rem;\n    font-weight: 400;\n    text-align: center;\n    color: #8f8f8f; }\n  .ios .action-sheet-button {\n    margin: 0;\n    padding: 18px;\n    min-height: 5.6rem;\n    border-bottom: 1px solid #d6d6da;\n    font-size: 2rem;\n    color: #007aff;\n    background: transparent; }\n    .ios .action-sheet-button:last-child {\n      border-bottom: 0; }\n    .ios .action-sheet-button.activated {\n      margin-top: -1px;\n      border-top: 1px solid #ebebeb;\n      border-bottom-color: #ebebeb;\n      background: #ebebeb; }\n  .ios .action-sheet-selected {\n    font-weight: bold;\n    background: #fff; }\n  .ios .action-sheet-destructive {\n    color: #f53d3d; }\n  .ios .action-sheet-cancel {\n    font-weight: 600;\n    background: #fff; }\n  .ios.hairlines .action-sheet-title,\n  .ios.hairlines .action-sheet-button {\n    border-bottom-width: 0.55px; }\n  .ios ion-alert {\n    position: absolute;\n    top: 0;\n    right: 0;\n    bottom: 0;\n    left: 0;\n    z-index: 1000;\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    -webkit-box-pack: center;\n    -webkit-justify-content: center;\n    -ms-flex-pack: center;\n    justify-content: center; }\n    .ios ion-alert input {\n      width: 100%; }\n  .ios .alert-wrapper {\n    z-index: 10;\n    display: -webkit-box;\n    display: -webkit-flex;\n    display: -ms-flexbox;\n    display: flex;\n    -webkit-box-orient: vertical;\n    -webkit-box-direction: normal;\n    -webkit-flex-direction: column;\n    -ms-flex-direction: column;\n    flex-direction: column;\n    min-width: 250px;\n    max-height: 90%;\n    opacity: 0; }\n  .ios .alert-title {\n    margin: 0;\n    padding: 0; }\n  .ios .alert-sub-title {\n    margin: 5px 0 0;\n    padding: 0;\n    font-weight: normal; }\n  .ios .alert-message {\n    overflow-y: scroll;\n    -webkit-overflow-scrolling: touch; }\n  .ios .alert-input {\n    padding: 10px 0;\n    border: 0;\n    background: inherit; }\n    .ios .alert-input::-moz-placeholder {\n      color: #999; }\n    .ios .alert-input:-ms-input-placeholder {\n      color: #999; }\n    .ios .alert-input::-webkit-input-placeholder {\n      text-indent: 0;\n      color: #999; }\n  .ios .alert-button-group {\n    display: -webkit-box;\n    display: -webkit-flex;\n    display: -ms-flexbox;\n    display: flex;\n    -webkit-box-orient: horizontal;\n    -webkit-box-direction: normal;\n    -webkit-flex-direction: row;\n    -ms-flex-direction: row;\n    flex-direction: row; }\n    .ios .alert-button-group.vertical {\n      -webkit-box-orient: vertical;\n      -webkit-box-direction: normal;\n      -webkit-flex-direction: column;\n      -ms-flex-direction: column;\n      flex-direction: column;\n      -webkit-flex-wrap: nowrap;\n      -ms-flex-wrap: nowrap;\n      flex-wrap: nowrap; }\n  .ios .alert-button {\n    z-index: 0;\n    display: block;\n    margin: 0;\n    font-size: 14px;\n    line-height: 20px; }\n  .ios .alert-tappable {\n    margin: 0;\n    padding: 0;\n    width: 100%;\n    font-size: inherit;\n    line-height: initial;\n    text-align: left;\n    background: transparent;\n    -webkit-appearance: none; }\n  .ios .alert-wrapper {\n    overflow: hidden;\n    max-width: 270px;\n    border-radius: 13px;\n    background-color: #f8f8f8;\n    box-shadow: none; }\n  .ios .alert-head {\n    padding: 12px 16px 7px;\n    text-align: center; }\n  .ios .alert-title {\n    margin-top: 8px;\n    font-size: 17px;\n    font-weight: 600; }\n  .ios .alert-sub-title {\n    font-size: 14px;\n    color: #666; }\n  .ios .alert-message,\n  .ios .alert-input-group {\n    padding: 0 16px 21px;\n    font-size: 13px;\n    text-align: center;\n    color: inherit; }\n  .ios .alert-message {\n    max-height: 240px; }\n    .ios .alert-message:empty {\n      padding: 0 0 12px 0; }\n  .ios .alert-input {\n    margin-top: 10px;\n    padding: 6px;\n    border: 1px solid #ccc;\n    border-radius: 4px;\n    background-color: #fff;\n    -webkit-appearance: none; }\n  .ios .alert-radio-group,\n  .ios .alert-checkbox-group {\n    overflow: scroll;\n    max-height: 240px;\n    border-top: 1px solid #dbdbdf;\n    -webkit-overflow-scrolling: touch; }\n  .ios .alert-tappable {\n    display: -webkit-box;\n    display: -webkit-flex;\n    display: -ms-flexbox;\n    display: flex;\n    min-height: 44px; }\n  .ios .alert-radio-label {\n    overflow: hidden;\n    -webkit-box-flex: 1;\n    -webkit-flex: 1;\n    -ms-flex: 1;\n    flex: 1;\n    -webkit-box-ordinal-group: 1;\n    -webkit-order: 0;\n    -ms-flex-order: 0;\n    order: 0;\n    padding: 13px;\n    text-overflow: ellipsis;\n    white-space: nowrap; }\n  .ios .alert-radio[aria-checked=true] .alert-radio-label {\n    color: #327eff; }\n  .ios .alert-radio-icon {\n    position: relative;\n    -webkit-box-ordinal-group: 2;\n    -webkit-order: 1;\n    -ms-flex-order: 1;\n    order: 1;\n    min-width: 30px; }\n  .ios .alert-radio[aria-checked=true] .alert-radio-inner {\n    position: absolute;\n    top: -7px;\n    left: 7px;\n    width: 6px;\n    height: 12px;\n    border-width: 2px;\n    border-top-width: 0;\n    border-left-width: 0;\n    border-style: solid;\n    border-color: #327eff;\n    -webkit-transform: rotate(45deg);\n    transform: rotate(45deg); }\n  .ios .alert-checkbox-label {\n    overflow: hidden;\n    -webkit-box-flex: 1;\n    -webkit-flex: 1;\n    -ms-flex: 1;\n    flex: 1;\n    padding: 13px;\n    text-overflow: ellipsis;\n    white-space: nowrap; }\n  .ios .alert-checkbox[aria-checked=true] .alert-checkbox-label {\n    color: initial; }\n  .ios .alert-checkbox-icon {\n    position: relative;\n    margin: 10px 6px 10px 16px;\n    width: 21px;\n    height: 21px;\n    border-width: 1px;\n    border-style: solid;\n    border-radius: 50%;\n    border-color: #c8c7cc;\n    background-color: #fff; }\n  .ios .alert-checkbox[aria-checked=true] .alert-checkbox-icon {\n    border-color: #327eff;\n    background-color: #327eff; }\n  .ios .alert-checkbox[aria-checked=true] .alert-checkbox-inner {\n    position: absolute;\n    top: 4px;\n    left: 7px;\n    width: 4px;\n    height: 9px;\n    border-width: 1px;\n    border-top-width: 0;\n    border-left-width: 0;\n    border-style: solid;\n    border-color: #fff;\n    -webkit-transform: rotate(45deg);\n    transform: rotate(45deg); }\n  .ios .alert-button-group {\n    -webkit-flex-wrap: wrap;\n    -ms-flex-wrap: wrap;\n    flex-wrap: wrap;\n    margin-right: -1px; }\n  .ios .alert-button {\n    overflow: hidden;\n    -webkit-box-flex: 1;\n    -webkit-flex: 1 1 auto;\n    -ms-flex: 1 1 auto;\n    flex: 1 1 auto;\n    margin: 0;\n    min-width: 50%;\n    height: 44px;\n    border-top: 1px solid #dbdbdf;\n    border-right: 1px solid #dbdbdf;\n    border-radius: 0;\n    font-size: 17px;\n    color: #327eff;\n    background-color: transparent; }\n    .ios .alert-button:last-child {\n      border-right: 0;\n      font-weight: bold; }\n    .ios .alert-button.activated {\n      background-color: #e9e9e9; }\n  .ios.hairlines .alert-radio-group,\n  .ios.hairlines .alert-checkbox-group {\n    border-width: 0.55px; }\n  .ios.hairlines .alert-input {\n    border-width: 0.55px; }\n  .ios.hairlines .alert-button {\n    border-top-width: 0.55px;\n    border-right-width: 0.55px; }\n  .ios ion-badge {\n    display: inline-block;\n    padding: 3px 8px;\n    min-width: 10px;\n    font-size: 1.3rem;\n    font-weight: bold;\n    line-height: 1;\n    text-align: center;\n    white-space: nowrap;\n    vertical-align: baseline; }\n    .ios ion-badge:empty {\n      display: none; }\n  .ios ion-badge {\n    border-radius: 10px;\n    color: #fff;\n    background-color: #327eff; }\n  .ios .badge-primary {\n    color: #fff;\n    background-color: #327eff; }\n  .ios .badge-secondary {\n    color: #fff;\n    background-color: #32db64; }\n  .ios .badge-danger {\n    color: #fff;\n    background-color: #f53d3d; }\n  .ios .badge-light {\n    color: #000;\n    background-color: #f4f4f4; }\n  .ios .badge-dark {\n    color: #fff;\n    background-color: #222; }\n  .ios .button {\n    -webkit-user-select: none;\n    -moz-user-select: none;\n    -ms-user-select: none;\n    user-select: none;\n    -webkit-appearance: none;\n    -moz-appearance: none;\n    position: relative;\n    z-index: 0;\n    display: inline-block;\n    overflow: hidden;\n    text-align: center;\n    text-overflow: ellipsis;\n    text-transform: none;\n    white-space: nowrap;\n    cursor: pointer;\n    vertical-align: top;\n    vertical-align: -webkit-baseline-middle;\n    -webkit-transition: background-color, opacity 100ms linear;\n    transition: background-color, opacity 100ms linear;\n    -webkit-font-kerning: none;\n    font-kerning: none; }\n  .ios .button-inner {\n    display: -webkit-box;\n    display: -webkit-flex;\n    display: -ms-flexbox;\n    display: flex;\n    -webkit-flex-flow: row nowrap;\n    -ms-flex-flow: row nowrap;\n    flex-flow: row nowrap;\n    -webkit-flex-shrink: 0;\n    -ms-flex-negative: 0;\n    flex-shrink: 0;\n    -webkit-box-align: center;\n    -webkit-align-items: center;\n    -ms-flex-align: center;\n    align-items: center;\n    -webkit-box-pack: center;\n    -webkit-justify-content: center;\n    -ms-flex-pack: center;\n    justify-content: center;\n    width: 100%;\n    height: 100%; }\n  .ios [ion-button] {\n    text-decoration: none; }\n  .ios a[disabled],\n  .ios button[disabled],\n  .ios [ion-button][disabled] {\n    cursor: default;\n    opacity: .4;\n    pointer-events: none; }\n  .ios .button-block {\n    display: block;\n    clear: both;\n    width: 100%; }\n    .ios .button-block::after {\n      clear: both; }\n  .ios .button-full {\n    display: block;\n    width: 100%; }\n  .ios .button-full.button-outline {\n    border-right-width: 0;\n    border-left-width: 0;\n    border-radius: 0; }\n  .ios .button {\n    margin: 0.4rem 0.2rem;\n    padding: 0 1em;\n    height: 2.8em;\n    border-radius: 4px;\n    font-size: 1.6rem;\n    color: #fff;\n    background-color: #327eff; }\n    .ios .button.activated {\n      background-color: #2e74eb;\n      opacity: 1; }\n    .ios .button:hover:not(.disable-hover) {\n      opacity: 0.8; }\n  .ios .button-large {\n    padding: 0 1em;\n    height: 2.8em;\n    font-size: 2rem; }\n  .ios .button-small {\n    padding: 0 0.9em;\n    height: 2.1em;\n    font-size: 1.3rem; }\n    .ios .button-small[icon-only] ion-icon {\n      font-size: 1.3em; }\n  .ios .button-block {\n    margin-right: 0;\n    margin-left: 0; }\n  .ios .button-full {\n    margin-right: 0;\n    margin-left: 0;\n    border-right-width: 0;\n    border-left-width: 0;\n    border-radius: 0; }\n  .ios .button-outline {\n    border-width: 1px;\n    border-style: solid;\n    border-radius: 4px;\n    border-color: #327eff;\n    color: #327eff;\n    background-color: transparent; }\n    .ios .button-outline.activated {\n      color: #fff;\n      background-color: #327eff;\n      opacity: 1; }\n  .ios .button-clear {\n    border-color: transparent;\n    color: #327eff;\n    background-color: transparent; }\n    .ios .button-clear.activated {\n      background-color: transparent;\n      opacity: 0.4; }\n    .ios .button-clear:hover:not(.disable-hover) {\n      color: #327eff;\n      opacity: 0.6; }\n  .ios .button-round {\n    padding: 0 2.6rem;\n    border-radius: 64px; }\n  .ios .button-fab {\n    border-radius: 50%; }\n  .ios ion-button-effect {\n    display: none; }\n  .ios .button-primary {\n    color: #fff;\n    background-color: #327eff; }\n    .ios .button-primary.activated {\n      background-color: #2e74eb; }\n  .ios .button-outline-primary {\n    border-color: #327eff;\n    color: #327eff;\n    background-color: transparent; }\n    .ios .button-outline-primary.activated {\n      color: #fff;\n      background-color: #327eff; }\n  .ios .button-clear-primary {\n    border-color: transparent;\n    color: #327eff;\n    background-color: transparent; }\n    .ios .button-clear-primary.activated {\n      opacity: 0.4; }\n    .ios .button-clear-primary:hover:not(.disable-hover) {\n      color: #327eff; }\n  .ios .button-secondary {\n    color: #fff;\n    background-color: #32db64; }\n    .ios .button-secondary.activated {\n      background-color: #2ec95c; }\n  .ios .button-outline-secondary {\n    border-color: #32db64;\n    color: #32db64;\n    background-color: transparent; }\n    .ios .button-outline-secondary.activated {\n      color: #fff;\n      background-color: #32db64; }\n  .ios .button-clear-secondary {\n    border-color: transparent;\n    color: #32db64;\n    background-color: transparent; }\n    .ios .button-clear-secondary.activated {\n      opacity: 0.4; }\n    .ios .button-clear-secondary:hover:not(.disable-hover) {\n      color: #32db64; }\n  .ios .button-danger {\n    color: #fff;\n    background-color: #f53d3d; }\n    .ios .button-danger.activated {\n      background-color: #e13838; }\n  .ios .button-outline-danger {\n    border-color: #f53d3d;\n    color: #f53d3d;\n    background-color: transparent; }\n    .ios .button-outline-danger.activated {\n      color: #fff;\n      background-color: #f53d3d; }\n  .ios .button-clear-danger {\n    border-color: transparent;\n    color: #f53d3d;\n    background-color: transparent; }\n    .ios .button-clear-danger.activated {\n      opacity: 0.4; }\n    .ios .button-clear-danger:hover:not(.disable-hover) {\n      color: #f53d3d; }\n  .ios .button-light {\n    color: #000;\n    background-color: #f4f4f4; }\n    .ios .button-light.activated {\n      background-color: #e0e0e0; }\n  .ios .button-outline-light {\n    border-color: #f4f4f4;\n    color: #f4f4f4;\n    background-color: transparent; }\n    .ios .button-outline-light.activated {\n      color: #000;\n      background-color: #f4f4f4; }\n  .ios .button-clear-light {\n    border-color: transparent;\n    color: #f4f4f4;\n    background-color: transparent; }\n    .ios .button-clear-light.activated {\n      opacity: 0.4; }\n    .ios .button-clear-light:hover:not(.disable-hover) {\n      color: #f4f4f4; }\n  .ios .button-dark {\n    color: #fff;\n    background-color: #222; }\n    .ios .button-dark.activated {\n      background-color: #343434; }\n  .ios .button-outline-dark {\n    border-color: #222;\n    color: #222;\n    background-color: transparent; }\n    .ios .button-outline-dark.activated {\n      color: #fff;\n      background-color: #222; }\n  .ios .button-clear-dark {\n    border-color: transparent;\n    color: #222;\n    background-color: transparent; }\n    .ios .button-clear-dark.activated {\n      opacity: 0.4; }\n    .ios .button-clear-dark:hover:not(.disable-hover) {\n      color: #222; }\n  .ios .button-fab {\n    position: absolute;\n    overflow: hidden;\n    width: 56px;\n    min-width: 0;\n    height: 56px;\n    font-size: 14px;\n    line-height: 56px;\n    vertical-align: middle;\n    background-clip: padding-box; }\n  .ios .button-fab ion-icon {\n    -webkit-box-flex: 1;\n    -webkit-flex: 1;\n    -ms-flex: 1;\n    flex: 1;\n    font-size: 2.8rem; }\n  .ios [fab-center] {\n    left: 50%;\n    margin-left: -28px; }\n  .ios [fab-top] {\n    top: 16px; }\n  .ios [fab-right] {\n    right: 16px; }\n  .ios [fab-bottom] {\n    bottom: 16px; }\n  .ios [fab-left] {\n    left: 16px; }\n  .ios [fab-fixed] {\n    position: fixed; }\n  .ios [icon-left] ion-icon {\n    font-size: 1.4em;\n    line-height: .67;\n    pointer-events: none;\n    padding-right: .3em; }\n  .ios [icon-right] ion-icon {\n    font-size: 1.4em;\n    line-height: .67;\n    pointer-events: none;\n    padding-left: .4em; }\n  .ios [icon-only] {\n    padding: 0;\n    min-width: .9em; }\n  .ios [icon-only] ion-icon {\n    padding: 0 .5em;\n    font-size: 1.8em;\n    line-height: .67;\n    pointer-events: none; }\n  .ios ion-card {\n    display: block;\n    overflow: hidden; }\n  .ios ion-card img {\n    display: block;\n    width: 100%; }\n  .ios ion-card-header {\n    display: block;\n    overflow: hidden;\n    text-overflow: ellipsis;\n    white-space: nowrap; }\n  .ios ion-card-content {\n    display: block; }\n  .ios ion-card {\n    margin: 12px 12px 12px 12px;\n    width: calc(100% - 24px);\n    border-radius: 2px;\n    font-size: 1.4rem;\n    background: #fff;\n    box-shadow: 0 1px 2px rgba(0, 0, 0, 0.3); }\n    .ios ion-card ion-list {\n      margin-bottom: 0; }\n    .ios ion-card > .item:last-child,\n    .ios ion-card > .item-wrapper:last-child .item {\n      border-bottom: 0; }\n    .ios ion-card .item .item-inner {\n      border: 0; }\n    .ios ion-card ion-card-content {\n      padding: 13px 16px 14px 16px;\n      font-size: 1.4rem;\n      line-height: 1.4; }\n    .ios ion-card ion-card-header {\n      padding: 16px;\n      font-size: 1.6rem;\n      font-weight: 500;\n      color: #333; }\n    .ios ion-card ion-card-header + ion-card-content,\n    .ios ion-card .item + ion-card-content {\n      padding-top: 0; }\n    .ios ion-card ion-note[item-left],\n    .ios ion-card ion-note[item-right] {\n      font-size: 1.3rem; }\n    .ios ion-card ion-card-title {\n      display: block;\n      margin: 2px 0 2px;\n      padding: 8px 0 8px 0;\n      font-size: 1.8rem;\n      line-height: 1.2;\n      color: #222; }\n    .ios ion-card h1 {\n      margin: 0 0 2px;\n      font-size: 2.4rem;\n      font-weight: normal; }\n    .ios ion-card h2 {\n      margin: 2px 0;\n      font-size: 1.6rem;\n      font-weight: normal; }\n    .ios ion-card h3,\n    .ios ion-card h4,\n    .ios ion-card h5,\n    .ios ion-card h6 {\n      margin: 2px 0;\n      font-size: 1.4rem;\n      font-weight: normal; }\n    .ios ion-card p {\n      margin: 0 0 2px;\n      font-size: 1.4rem;\n      color: #666; }\n  .ios ion-card + ion-card {\n    margin-top: 0; }\n  .ios ion-checkbox {\n    position: relative;\n    display: inline-block; }\n  .ios .checkbox-icon {\n    position: relative;\n    width: 21px;\n    height: 21px;\n    border-width: 1px;\n    border-style: solid;\n    border-radius: 50%;\n    border-color: #c8c7cc;\n    background-color: #fff; }\n  .ios .checkbox-checked {\n    border-color: #327eff;\n    background-color: #327eff; }\n  .ios .checkbox-checked .checkbox-inner {\n    position: absolute;\n    top: 4px;\n    left: 7px;\n    width: 4px;\n    height: 9px;\n    border-width: 1px;\n    border-top-width: 0;\n    border-left-width: 0;\n    border-style: solid;\n    border-color: #fff;\n    -webkit-transform: rotate(45deg);\n    transform: rotate(45deg); }\n  .ios .checkbox-disabled,\n  .ios .item-checkbox-disabled ion-label {\n    opacity: 0.3;\n    pointer-events: none; }\n  .ios .item ion-checkbox {\n    position: static;\n    display: block;\n    margin: 8px 16px 8px 2px; }\n    .ios .item ion-checkbox[item-right] {\n      margin: 10px 8px 9px 0; }\n  .ios .checkbox-primary .checkbox-checked {\n    border-color: #327eff;\n    background-color: #327eff; }\n    .ios .checkbox-primary .checkbox-checked .checkbox-inner {\n      border-color: #fff; }\n  .ios .checkbox-secondary .checkbox-checked {\n    border-color: #32db64;\n    background-color: #32db64; }\n    .ios .checkbox-secondary .checkbox-checked .checkbox-inner {\n      border-color: #fff; }\n  .ios .checkbox-danger .checkbox-checked {\n    border-color: #f53d3d;\n    background-color: #f53d3d; }\n    .ios .checkbox-danger .checkbox-checked .checkbox-inner {\n      border-color: #fff; }\n  .ios .checkbox-light .checkbox-checked {\n    border-color: #f4f4f4;\n    background-color: #f4f4f4; }\n    .ios .checkbox-light .checkbox-checked .checkbox-inner {\n      border-color: #000; }\n  .ios .checkbox-dark .checkbox-checked {\n    border-color: #222;\n    background-color: #222; }\n    .ios .checkbox-dark .checkbox-checked .checkbox-inner {\n      border-color: #fff; }\n  .ios ion-chip {\n    display: -webkit-inline-box;\n    display: -webkit-inline-flex;\n    display: -ms-inline-flexbox;\n    display: inline-flex;\n    -webkit-align-self: center;\n    -ms-flex-item-align: center;\n    align-self: center;\n    font-weight: normal;\n    vertical-align: middle;\n    box-sizing: border-box; }\n    .ios ion-chip .button {\n      margin: 0;\n      width: 32px;\n      height: 32px;\n      border-radius: 50%; }\n    .ios ion-chip ion-icon {\n      width: 32px;\n      height: 32px;\n      border-radius: 50%;\n      font-size: 18px;\n      line-height: 32px; }\n    .ios ion-chip ion-avatar {\n      width: 32px;\n      min-width: 32px;\n      height: 32px;\n      min-height: 32px;\n      border-radius: 50%; }\n      .ios ion-chip ion-avatar img {\n        display: block;\n        width: 100%;\n        max-width: 100%;\n        height: 100%;\n        max-height: 100%;\n        border-radius: 50%; }\n  .ios ion-chip {\n    margin: 2px 0;\n    height: 32px;\n    border-radius: 16px;\n    font-size: 13px;\n    line-height: 32px;\n    color: rgba(0, 0, 0, 0.87);\n    background: rgba(0, 0, 0, 0.12); }\n    .ios ion-chip > ion-label {\n      margin: 0 10px; }\n    .ios ion-chip > ion-icon {\n      color: #fff;\n      background-color: #327eff; }\n  .ios .chip-primary,\n  .ios ion-chip .icon-primary {\n    color: #fff;\n    background-color: #327eff; }\n  .ios .chip-secondary,\n  .ios ion-chip .icon-secondary {\n    color: #fff;\n    background-color: #32db64; }\n  .ios .chip-danger,\n  .ios ion-chip .icon-danger {\n    color: #fff;\n    background-color: #f53d3d; }\n  .ios .chip-light,\n  .ios ion-chip .icon-light {\n    color: #000;\n    background-color: #f4f4f4; }\n  .ios .chip-dark,\n  .ios ion-chip .icon-dark {\n    color: #fff;\n    background-color: #222; }\n  .ios [no-padding],\n  .ios [no-padding] scroll-content {\n    padding: 0; }\n  .ios [no-margin],\n  .ios [no-margin] scroll-content {\n    margin: 0; }\n  .ios ion-fixed {\n    position: absolute;\n    z-index: 2;\n    -webkit-transform: translateZ(0);\n    transform: translateZ(0); }\n  .ios ion-content {\n    background-color: #fff; }\n  .ios .outer-content {\n    background: #efeff4; }\n  .ios ion-page.show-page ~ .nav-decor {\n    position: absolute;\n    top: 0;\n    left: 0;\n    z-index: 0;\n    display: block;\n    width: 100%;\n    height: 100%;\n    background: #000;\n    pointer-events: none; }\n  .ios [padding],\n  .ios [padding] scroll-content {\n    padding: 16px; }\n  .ios [padding-top],\n  .ios [padding-top] scroll-content {\n    padding-top: 16px; }\n  .ios [padding-left],\n  .ios [padding-left] scroll-content {\n    padding-left: 16px; }\n  .ios [padding-right],\n  .ios [padding-right] scroll-content {\n    padding-right: 16px; }\n  .ios [padding-bottom],\n  .ios [padding-bottom] scroll-content {\n    padding-bottom: 16px; }\n  .ios [padding-vertical],\n  .ios [padding-vertical] scroll-content {\n    padding-top: 16px;\n    padding-bottom: 16px; }\n  .ios [padding-horizontal],\n  .ios [padding-horizontal] scroll-content {\n    padding-right: 16px;\n    padding-left: 16px; }\n  .ios [margin],\n  .ios [margin] scroll-content {\n    margin: 16px; }\n  .ios [margin-top],\n  .ios [margin-top] scroll-content {\n    margin-top: 16px; }\n  .ios [margin-left],\n  .ios [margin-left] scroll-content {\n    margin-left: 16px; }\n  .ios [margin-right],\n  .ios [margin-right] scroll-content {\n    margin-right: 16px; }\n  .ios [margin-bottom],\n  .ios [margin-bottom] scroll-content {\n    margin-bottom: 16px; }\n  .ios [margin-vertical],\n  .ios [margin-vertical] scroll-content {\n    margin-top: 16px;\n    margin-bottom: 16px; }\n  .ios [margin-horizontal],\n  .ios [margin-horizontal] scroll-content {\n    margin-right: 16px;\n    margin-left: 16px; }\n  .ios ion-content:not([no-bounce]) > scroll-content::before, .ios ion-content:not([no-bounce]) > scroll-content::after {\n    position: absolute;\n    width: 1px;\n    height: 1px;\n    content: \"\"; }\n  .ios ion-content:not([no-bounce]) > scroll-content::before {\n    bottom: -1px; }\n  .ios ion-content:not([no-bounce]) > scroll-content::after {\n    top: -1px; }\n  .ios ion-datetime {\n    display: -webkit-box;\n    display: -webkit-flex;\n    display: -ms-flexbox;\n    display: flex;\n    overflow: hidden; }\n  .ios .datetime-text {\n    overflow: hidden;\n    -webkit-box-flex: 1;\n    -webkit-flex: 1;\n    -ms-flex: 1;\n    flex: 1;\n    min-width: 16px;\n    min-height: 1.2em;\n    font-size: inherit;\n    line-height: 1.2;\n    text-overflow: ellipsis;\n    white-space: nowrap; }\n  .ios .datetime-disabled,\n  .ios .item-datetime-disabled ion-label {\n    opacity: .4;\n    pointer-events: none; }\n  .ios .item-label-stacked ion-datetime,\n  .ios .item-label-floating ion-datetime {\n    padding-left: 0;\n    width: 100%; }\n  .ios ion-datetime {\n    padding: 12px 8px 13px 16px; }\n  .ios ion-icon {\n    display: inline-block;\n    font-size: 1.2em; }\n  .ios ion-icon[small] {\n    min-height: 1.1em;\n    font-size: 1.1em; }\n  .ios .icon-primary {\n    color: #327eff; }\n  .ios .icon-secondary {\n    color: #32db64; }\n  .ios .icon-danger {\n    color: #f53d3d; }\n  .ios .icon-light {\n    color: #f4f4f4; }\n  .ios .icon-dark {\n    color: #222; }\n  .ios ion-input,\n  .ios ion-textarea {\n    position: relative;\n    display: block;\n    -webkit-box-flex: 1;\n    -webkit-flex: 1;\n    -ms-flex: 1;\n    flex: 1;\n    width: 100%; }\n  .ios .item-input ion-input,\n  .ios .item-input ion-textarea {\n    position: static; }\n  .ios .item.item-textarea {\n    -webkit-box-align: stretch;\n    -webkit-align-items: stretch;\n    -ms-flex-align: stretch;\n    align-items: stretch; }\n  .ios .text-input {\n    display: inline-block;\n    -webkit-box-flex: 1;\n    -webkit-flex: 1;\n    -ms-flex: 1;\n    flex: 1;\n    width: 92%;\n    width: calc(100% - 10px);\n    border: 0;\n    border-radius: 0;\n    background: transparent;\n    -webkit-appearance: none; }\n    .ios .text-input::-moz-placeholder {\n      color: #999; }\n    .ios .text-input:-ms-input-placeholder {\n      color: #999; }\n    .ios .text-input::-webkit-input-placeholder {\n      text-indent: 0;\n      color: #999; }\n  .ios textarea.text-input {\n    display: block; }\n  .ios .text-input[disabled] {\n    opacity: .4; }\n  .ios input.text-input:-webkit-autofill {\n    background-color: transparent; }\n  .ios .platform-mobile textarea.text-input {\n    resize: none; }\n  .ios .input-cover {\n    position: absolute;\n    top: 0;\n    left: 0;\n    width: 100%;\n    height: 100%; }\n  .ios .input-has-focus .input-cover {\n    display: none; }\n  .ios .input-has-focus {\n    pointer-events: none; }\n  .ios .input-has-focus input,\n  .ios .input-has-focus textarea,\n  .ios .input-has-focus a,\n  .ios .input-has-focus button {\n    pointer-events: auto; }\n  .ios [next-input] {\n    position: absolute;\n    bottom: 1px;\n    padding: 0;\n    width: 1px;\n    height: 1px;\n    border: 0;\n    background: transparent;\n    pointer-events: none; }\n  .ios .text-input-clear-icon {\n    position: absolute;\n    top: 0;\n    display: none;\n    margin: 0;\n    padding: 0;\n    height: 100%;\n    background-repeat: no-repeat;\n    background-position: center; }\n  .ios .input-has-focus.input-has-value .text-input-clear-icon {\n    display: block; }\n  .ios .text-input.cloned-input {\n    position: relative;\n    top: 0;\n    pointer-events: none; }\n  .ios .item-input:not(.item-label-floating) .text-input.cloned-active {\n    display: none; }\n  .ios .text-input {\n    margin: 12px 8px 13px 0;\n    padding: 0;\n    width: calc(100% - 8px - 0); }\n  .ios .inset-input {\n    margin: 6px 16px 6.5px 0;\n    padding: 6px 8px 6.5px 8px; }\n  .ios .item-label-stacked .text-input,\n  .ios .item-label-floating .text-input {\n    margin-top: 8px;\n    margin-bottom: 8px;\n    margin-left: 0;\n    width: calc(100% - 8px); }\n  .ios .item-label-stacked ion-select,\n  .ios .item-label-floating ion-select {\n    padding-top: 8px;\n    padding-bottom: 8px;\n    padding-left: 0; }\n  .ios .item-label-floating .text-input.cloned-input,\n  .ios .item-label-stacked .text-input.cloned-input {\n    top: 30px; }\n  .ios ion-input[clearInput] {\n    position: relative; }\n    .ios ion-input[clearInput] .text-input {\n      padding-right: 30px; }\n  .ios .text-input-clear-icon {\n    background-image: url(\"data:image/svg+xml;charset=utf-8,<svg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%20512%20512'><path%20fill='rgba(0,%200,%200,%200.5)'%20d='M403.1,108.9c-81.2-81.2-212.9-81.2-294.2,0s-81.2,212.9,0,294.2c81.2,81.2,212.9,81.2,294.2,0S484.3,190.1,403.1,108.9z%20M352,340.2L340.2,352l-84.4-84.2l-84,83.8L160,339.8l84-83.8l-84-83.8l11.8-11.8l84,83.8l84.4-84.2l11.8,11.8L267.6,256L352,340.2z'/></svg>\");\n    right: 8px;\n    width: 30px;\n    background-size: 18px; }\n  .ios .item {\n    display: -webkit-box;\n    display: -webkit-flex;\n    display: -ms-flexbox;\n    display: flex;\n    overflow: hidden;\n    -webkit-box-align: center;\n    -webkit-align-items: center;\n    -ms-flex-align: center;\n    align-items: center;\n    -webkit-box-pack: justify;\n    -webkit-justify-content: space-between;\n    -ms-flex-pack: justify;\n    justify-content: space-between;\n    margin: 0;\n    padding: 0;\n    width: 100%;\n    min-height: 4.4rem;\n    border: 0;\n    font-weight: normal;\n    line-height: normal;\n    text-align: initial;\n    text-decoration: none;\n    color: inherit; }\n  .ios .item-inner {\n    display: -webkit-box;\n    display: -webkit-flex;\n    display: -ms-flexbox;\n    display: flex;\n    overflow: hidden;\n    -webkit-box-flex: 1;\n    -webkit-flex: 1;\n    -ms-flex: 1;\n    flex: 1;\n    -webkit-box-orient: vertical;\n    -webkit-box-direction: normal;\n    -webkit-flex-direction: inherit;\n    -ms-flex-direction: inherit;\n    flex-direction: inherit;\n    -webkit-box-align: inherit;\n    -webkit-align-items: inherit;\n    -ms-flex-align: inherit;\n    align-items: inherit;\n    -webkit-align-self: stretch;\n    -ms-flex-item-align: stretch;\n    align-self: stretch;\n    margin: 0;\n    padding: 0;\n    min-height: inherit;\n    border: 0; }\n  .ios .input-wrapper {\n    display: -webkit-box;\n    display: -webkit-flex;\n    display: -ms-flexbox;\n    display: flex;\n    overflow: hidden;\n    -webkit-box-flex: 1;\n    -webkit-flex: 1;\n    -ms-flex: 1;\n    flex: 1;\n    -webkit-box-orient: vertical;\n    -webkit-box-direction: normal;\n    -webkit-flex-direction: inherit;\n    -ms-flex-direction: inherit;\n    flex-direction: inherit;\n    -webkit-box-align: inherit;\n    -webkit-align-items: inherit;\n    -ms-flex-align: inherit;\n    align-items: inherit;\n    -webkit-align-self: stretch;\n    -ms-flex-item-align: stretch;\n    align-self: stretch;\n    text-overflow: ellipsis; }\n  .ios .item[no-lines],\n  .ios .item[no-lines] .item-inner {\n    border: 0; }\n  .ios ion-item-group {\n    display: block; }\n  .ios ion-item-divider {\n    z-index: 1000;\n    display: -webkit-box;\n    display: -webkit-flex;\n    display: -ms-flexbox;\n    display: flex;\n    overflow: hidden;\n    -webkit-box-align: center;\n    -webkit-align-items: center;\n    -ms-flex-align: center;\n    align-items: center;\n    -webkit-box-pack: justify;\n    -webkit-justify-content: space-between;\n    -ms-flex-pack: justify;\n    justify-content: space-between;\n    margin: 0;\n    padding: 0;\n    width: 100%;\n    min-height: 30px; }\n    .ios ion-item-divider[sticky] {\n      position: -webkit-sticky;\n      position: sticky;\n      top: 0; }\n  .ios [vertical-align-top],\n  .ios ion-input.item {\n    -webkit-box-align: start;\n    -webkit-align-items: flex-start;\n    -ms-flex-align: start;\n    align-items: flex-start; }\n  .ios .item > ion-icon[small]:first-child,\n  .ios .item-inner > ion-icon[small]:first-child {\n    min-width: 18px; }\n  .ios .item > ion-icon:first-child,\n  .ios .item-inner > ion-icon:first-child {\n    min-width: 24px;\n    text-align: center; }\n  .ios .item > ion-icon,\n  .ios .item-inner > ion-icon {\n    min-height: 2.4rem;\n    font-size: 2.4rem;\n    line-height: 1; }\n    .ios .item > ion-icon[large],\n    .ios .item-inner > ion-icon[large] {\n      min-height: 3.2rem;\n      font-size: 3.2rem; }\n    .ios .item > ion-icon[small],\n    .ios .item-inner > ion-icon[small] {\n      min-height: 1.8rem;\n      font-size: 1.8rem; }\n  .ios ion-avatar,\n  .ios ion-thumbnail {\n    display: block;\n    line-height: 1; }\n    .ios ion-avatar img,\n    .ios ion-thumbnail img {\n      display: block; }\n  .ios .item-cover {\n    position: absolute;\n    top: 0;\n    left: 0;\n    width: 100%;\n    height: 100%;\n    background: transparent;\n    cursor: pointer; }\n  .ios ion-item-sliding {\n    position: relative;\n    display: block;\n    overflow: hidden;\n    width: 100%; }\n    .ios ion-item-sliding .item {\n      position: static; }\n  .ios ion-item-options {\n    position: absolute;\n    top: 0;\n    right: 0;\n    z-index: 1;\n    display: none;\n    -webkit-box-pack: end;\n    -webkit-justify-content: flex-end;\n    -ms-flex-pack: end;\n    justify-content: flex-end;\n    height: 100%;\n    font-size: 14px;\n    visibility: hidden; }\n  .ios ion-item-options[side=left] {\n    right: auto;\n    left: 0;\n    -webkit-box-pack: start;\n    -webkit-justify-content: flex-start;\n    -ms-flex-pack: start;\n    justify-content: flex-start; }\n  .ios ion-item-options .button {\n    margin: 0;\n    padding: 0 .7em;\n    height: 100%;\n    border-radius: 0;\n    box-shadow: none;\n    box-sizing: content-box; }\n  .ios ion-item-options:not([icon-left]) .button .button-inner {\n    -webkit-box-orient: vertical;\n    -webkit-box-direction: normal;\n    -webkit-flex-direction: column;\n    -ms-flex-direction: column;\n    flex-direction: column; }\n  .ios ion-item-options:not([icon-left]) .button ion-icon {\n    padding-right: 0;\n    padding-bottom: .3em;\n    padding-left: 0; }\n  .ios ion-item-sliding.active-slide .item,\n  .ios ion-item-sliding.active-slide .item.activated {\n    position: relative;\n    z-index: 2;\n    opacity: 1;\n    -webkit-transition: -webkit-transform 500ms cubic-bezier(0.36, 0.66, 0.04, 1);\n    transition: transform 500ms cubic-bezier(0.36, 0.66, 0.04, 1);\n    pointer-events: none;\n    will-change: transform; }\n  .ios ion-item-sliding.active-slide ion-item-options {\n    display: -webkit-box;\n    display: -webkit-flex;\n    display: -ms-flexbox;\n    display: flex; }\n  .ios ion-item-sliding.active-slide.active-options-left ion-item-options[side=left] {\n    width: 100%;\n    visibility: visible; }\n  .ios ion-item-sliding.active-slide.active-options-right ion-item-options:not([side=left]) {\n    width: 100%;\n    visibility: visible; }\n  .ios .button-expandable {\n    -webkit-flex-shrink: 0;\n    -ms-flex-negative: 0;\n    flex-shrink: 0;\n    -webkit-transition-duration: 0;\n    transition-duration: 0;\n    -webkit-transition-property: none;\n    transition-property: none;\n    -webkit-transition-timing-function: cubic-bezier(0.65, 0.05, 0.36, 1);\n    transition-timing-function: cubic-bezier(0.65, 0.05, 0.36, 1); }\n  .ios ion-item-sliding.active-swipe-right .button-expandable {\n    -webkit-box-ordinal-group: 2;\n    -webkit-order: 1;\n    -ms-flex-order: 1;\n    order: 1;\n    padding-left: 90%;\n    -webkit-transition-duration: .6s;\n    transition-duration: .6s;\n    -webkit-transition-property: padding-left;\n    transition-property: padding-left; }\n  .ios ion-item-sliding.active-swipe-left .button-expandable {\n    -webkit-box-ordinal-group: 0;\n    -webkit-order: -1;\n    -ms-flex-order: -1;\n    order: -1;\n    padding-right: 90%;\n    -webkit-transition-duration: .6s;\n    transition-duration: .6s;\n    -webkit-transition-property: padding-right;\n    transition-property: padding-right; }\n  .ios ion-reorder {\n    display: none;\n    -webkit-box-flex: 1;\n    -webkit-flex: 1;\n    -ms-flex: 1;\n    flex: 1;\n    -webkit-box-align: center;\n    -webkit-align-items: center;\n    -ms-flex-align: center;\n    align-items: center;\n    -webkit-box-pack: center;\n    -webkit-justify-content: center;\n    -ms-flex-pack: center;\n    justify-content: center;\n    max-width: 40px;\n    height: 100%;\n    font-size: 1.7em;\n    opacity: .25;\n    -webkit-transform: translate3d(120%, 0, 0);\n    transform: translate3d(120%, 0, 0);\n    -webkit-transition: -webkit-transform 125ms ease-in;\n    transition: transform 125ms ease-in;\n    pointer-events: all;\n    -ms-touch-action: manipulation;\n    touch-action: manipulation; }\n    .ios ion-reorder ion-icon {\n      pointer-events: none; }\n  .ios .reorder-enabled ion-reorder {\n    display: -webkit-box;\n    display: -webkit-flex;\n    display: -ms-flexbox;\n    display: flex; }\n  .ios .reorder-visible ion-reorder {\n    -webkit-transform: translate3d(0, 0, 0);\n    transform: translate3d(0, 0, 0); }\n  .ios .reorder-list-active .item,\n  .ios .reorder-list-active .item-wrapper {\n    -webkit-transition: -webkit-transform 300ms;\n    transition: transform 300ms;\n    will-change: transform; }\n  .ios .reorder-list-active .item-inner {\n    pointer-events: none; }\n  .ios .item-wrapper.reorder-active,\n  .ios .item.reorder-active,\n  .ios .reorder-active {\n    z-index: 4;\n    box-shadow: 0 0 10px rgba(0, 0, 0, 0.4);\n    opacity: .8;\n    -webkit-transition: none;\n    transition: none;\n    pointer-events: none; }\n  .ios .item {\n    position: relative;\n    padding-left: 16px;\n    border-radius: 0;\n    font-size: 1.6rem;\n    color: #000;\n    background-color: #fff;\n    -webkit-transition-duration: 200ms;\n    transition-duration: 200ms; }\n    .ios .item h1 {\n      margin: 0 0 2px;\n      font-size: 2.4rem;\n      font-weight: normal; }\n    .ios .item h2 {\n      margin: 0 0 2px;\n      font-size: 1.6rem;\n      font-weight: normal; }\n    .ios .item h3,\n    .ios .item h4,\n    .ios .item h5,\n    .ios .item h6 {\n      margin: 0 0 3px;\n      font-size: 1.4rem;\n      font-weight: normal;\n      line-height: normal; }\n    .ios .item p {\n      overflow: inherit;\n      margin: 0 0 2px;\n      font-size: 1.2rem;\n      line-height: normal;\n      text-overflow: inherit;\n      color: #666; }\n    .ios .item h2:last-child,\n    .ios .item h3:last-child,\n    .ios .item h4:last-child,\n    .ios .item h5:last-child,\n    .ios .item h6:last-child,\n    .ios .item p:last-child {\n      margin-bottom: 0; }\n    .ios .item a {\n      text-decoration: none; }\n  .ios .item.activated {\n    background-color: #d9d9d9;\n    -webkit-transition-duration: 0ms;\n    transition-duration: 0ms; }\n  .ios .item .item-inner {\n    padding-right: 8px;\n    border-bottom: 1px solid #c8c7cc; }\n  .ios.hairlines .item-inner {\n    border-bottom-width: 0.55px; }\n  .ios [item-left] {\n    margin: 8px 16px 8px 0; }\n  .ios [item-right] {\n    margin: 8px 8px 8px 8px; }\n  .ios ion-icon[item-left],\n  .ios ion-icon[item-right] {\n    margin-top: 10px;\n    margin-bottom: 9px;\n    margin-left: 0; }\n  .ios ion-avatar[item-left],\n  .ios ion-thumbnail[item-left] {\n    margin: 8px 16px 8px 0; }\n  .ios ion-avatar[item-right],\n  .ios ion-thumbnail[item-right] {\n    margin: 8px; }\n  .ios .item-button {\n    padding: 0 .5em;\n    height: 24px;\n    font-size: 1.3rem; }\n  .ios .item-button[icon-only] ion-icon,\n  .ios .item-button[icon-only] {\n    padding: 0 1px; }\n  .ios ion-avatar {\n    min-width: 3.6rem;\n    min-height: 3.6rem; }\n    .ios ion-avatar img {\n      max-width: 3.6rem;\n      max-height: 3.6rem;\n      border-radius: 1.8rem; }\n  .ios ion-thumbnail {\n    min-width: 5.6rem;\n    min-height: 5.6rem; }\n    .ios ion-thumbnail img {\n      max-width: 5.6rem;\n      max-height: 5.6rem; }\n  .ios ion-note {\n    color: #aeacb4; }\n  .ios .item[detail-push] .item-inner,\n  .ios button.item:not([detail-none]) .item-inner,\n  .ios a.item:not([detail-none]) .item-inner {\n    background-image: url(\"data:image/svg+xml;charset=utf-8,<svg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%2012%2020'><path%20d='M2,20l-2-2l8-8L0,2l2-2l10,10L2,20z'%20fill='%23c8c7cc'/></svg>\");\n    padding-right: 32px;\n    background-repeat: no-repeat;\n    background-position: right 14px center;\n    background-size: 14px 14px; }\n  .ios ion-item-group .item:first-child .item-inner {\n    border-top-width: 0; }\n  .ios ion-item-group .item:last-child .item-inner,\n  .ios ion-item-group .item-wrapper:last-child .item-inner {\n    border: 0; }\n  .ios ion-item-divider {\n    padding-left: 16px;\n    color: #222;\n    background-color: #f7f7f7; }\n  .ios .item .text-primary {\n    color: #327eff; }\n  .ios .item-primary {\n    color: #fff;\n    background-color: #327eff; }\n  .ios .item .text-secondary {\n    color: #32db64; }\n  .ios .item-secondary {\n    color: #fff;\n    background-color: #32db64; }\n  .ios .item .text-danger {\n    color: #f53d3d; }\n  .ios .item-danger {\n    color: #fff;\n    background-color: #f53d3d; }\n  .ios .item .text-light {\n    color: #f4f4f4; }\n  .ios .item-light {\n    color: #000;\n    background-color: #f4f4f4; }\n  .ios .item .text-dark {\n    color: #222; }\n  .ios .item-dark {\n    color: #fff;\n    background-color: #222; }\n  .ios ion-item-sliding {\n    background-color: #fff; }\n  .ios ion-label {\n    display: block;\n    overflow: hidden;\n    -webkit-box-flex: 1;\n    -webkit-flex: 1;\n    -ms-flex: 1;\n    flex: 1;\n    margin: 0;\n    font-size: inherit;\n    text-overflow: ellipsis;\n    white-space: nowrap; }\n  .ios .item-input ion-label {\n    -webkit-box-flex: initial;\n    -webkit-flex: initial;\n    -ms-flex: initial;\n    flex: initial;\n    max-width: 200px;\n    pointer-events: none; }\n  .ios [text-wrap] ion-label {\n    white-space: normal; }\n  .ios ion-label[fixed] {\n    -webkit-box-flex: 0;\n    -webkit-flex: 0 0 100px;\n    -ms-flex: 0 0 100px;\n    flex: 0 0 100px;\n    width: 100px;\n    min-width: 100px;\n    max-width: 200px; }\n  .ios .item-label-stacked ion-label,\n  .ios .item-label-floating ion-label {\n    -webkit-align-self: stretch;\n    -ms-flex-item-align: stretch;\n    align-self: stretch;\n    width: auto;\n    max-width: 100%; }\n  .ios ion-label[stacked],\n  .ios ion-label[floating] {\n    margin-bottom: 0; }\n  .ios .item-label-stacked .input-wrapper,\n  .ios .item-label-floating .input-wrapper {\n    -webkit-box-flex: 1;\n    -webkit-flex: 1;\n    -ms-flex: 1;\n    flex: 1;\n    -webkit-box-orient: vertical;\n    -webkit-box-direction: normal;\n    -webkit-flex-direction: column;\n    -ms-flex-direction: column;\n    flex-direction: column; }\n  .ios .item-label-stacked ion-select,\n  .ios .item-label-floating ion-select {\n    -webkit-align-self: stretch;\n    -ms-flex-item-align: stretch;\n    align-self: stretch;\n    max-width: 100%; }\n  .ios .item-select ion-label[floating] {\n    -webkit-transform: translate3d(0, 0, 0) scale(0.8);\n    transform: translate3d(0, 0, 0) scale(0.8); }\n  .ios ion-label {\n    margin: 12px 8px 13px 0; }\n  .ios .item-input ion-label,\n  .ios .item-select ion-label,\n  .ios .item-datetime ion-label {\n    color: #7f7f7f; }\n  .ios ion-label + ion-input .text-input,\n  .ios ion-label + ion-textarea .text-input {\n    margin-left: 16px;\n    width: calc(100% - (16px / 2) - 16px); }\n  .ios ion-label[stacked] {\n    margin-bottom: 4px;\n    font-size: 1.2rem; }\n  .ios ion-label[floating] {\n    margin-bottom: 0;\n    -webkit-transform: translate3d(0, 27px, 0);\n    transform: translate3d(0, 27px, 0);\n    -webkit-transform-origin: left top;\n    transform-origin: left top;\n    -webkit-transition: -webkit-transform 150ms ease-in-out;\n    transition: transform 150ms ease-in-out; }\n  .ios .input-has-focus ion-label[floating],\n  .ios .input-has-value ion-label[floating] {\n    -webkit-transform: translate3d(0, 0, 0) scale(0.8);\n    transform: translate3d(0, 0, 0) scale(0.8); }\n  .ios .item-label-stacked [item-right],\n  .ios .item-label-floating [item-right] {\n    margin-top: 6px;\n    margin-bottom: 6px; }\n  .ios .label-primary,\n  .ios .item-input .label-primary,\n  .ios .item-select .label-primary,\n  .ios .item-datetime .label-primary {\n    color: #327eff; }\n  .ios .label-secondary,\n  .ios .item-input .label-secondary,\n  .ios .item-select .label-secondary,\n  .ios .item-datetime .label-secondary {\n    color: #32db64; }\n  .ios .label-danger,\n  .ios .item-input .label-danger,\n  .ios .item-select .label-danger,\n  .ios .item-datetime .label-danger {\n    color: #f53d3d; }\n  .ios .label-light,\n  .ios .item-input .label-light,\n  .ios .item-select .label-light,\n  .ios .item-datetime .label-light {\n    color: #f4f4f4; }\n  .ios .label-dark,\n  .ios .item-input .label-dark,\n  .ios .item-select .label-dark,\n  .ios .item-datetime .label-dark {\n    color: #222; }\n  .ios ion-list-header {\n    display: -webkit-box;\n    display: -webkit-flex;\n    display: -ms-flexbox;\n    display: flex;\n    overflow: hidden;\n    -webkit-box-align: center;\n    -webkit-align-items: center;\n    -ms-flex-align: center;\n    align-items: center;\n    -webkit-box-pack: justify;\n    -webkit-justify-content: space-between;\n    -ms-flex-pack: justify;\n    justify-content: space-between;\n    margin: 0;\n    padding: 0;\n    width: 100%;\n    min-height: 4rem; }\n  .ios ion-list {\n    display: block;\n    margin: 0;\n    padding: 0;\n    list-style-type: none; }\n  .ios ion-list[inset] {\n    overflow: hidden;\n    -webkit-transform: translateZ(0);\n    transform: translateZ(0); }\n  .ios ion-list-header {\n    position: relative;\n    padding-left: 16px;\n    border-bottom: 1px solid #c8c7cc;\n    font-size: 1.2rem;\n    font-weight: 500;\n    letter-spacing: 0.1rem;\n    text-transform: uppercase;\n    color: #333; }\n  .ios ion-list {\n    margin: -1px 0 32px 0; }\n    .ios ion-list > .item:first-child {\n      border-top: 1px solid #c8c7cc; }\n    .ios ion-list > .item:last-child,\n    .ios ion-list > .item-wrapper:last-child .item {\n      border-bottom: 1px solid #c8c7cc; }\n    .ios ion-list > .item:last-child .item-inner,\n    .ios ion-list > .item-wrapper:last-child .item-inner {\n      border-bottom: 0; }\n    .ios ion-list .item .item-inner {\n      border-bottom: 1px solid #c8c7cc; }\n    .ios ion-list .item[no-lines],\n    .ios ion-list .item[no-lines] .item-inner {\n      border-width: 0; }\n    .ios ion-list ion-item-options {\n      border-bottom: 1px solid #c8c7cc; }\n    .ios ion-list ion-item-options button,\n    .ios ion-list ion-item-options [button] {\n      display: -webkit-inline-box;\n      display: -webkit-inline-flex;\n      display: -ms-inline-flexbox;\n      display: inline-flex;\n      -webkit-box-align: center;\n      -webkit-align-items: center;\n      -ms-flex-align: center;\n      align-items: center;\n      margin: 0;\n      height: 100%;\n      min-height: 100%;\n      border: 0;\n      border-radius: 0;\n      box-sizing: border-box; }\n      .ios ion-list ion-item-options button::before,\n      .ios ion-list ion-item-options [button]::before {\n        margin: 0 auto; }\n  .ios ion-list + ion-list ion-list-header {\n    margin-top: -10px;\n    padding-top: 0; }\n  .ios.hairlines ion-list-header {\n    border-bottom-width: 0.55px; }\n  .ios.hairlines ion-list ion-item-options {\n    border-width: 0.55px; }\n  .ios.hairlines ion-list .item .item-inner {\n    border-width: 0.55px; }\n  .ios.hairlines ion-list > .item:first-child {\n    border-top-width: 0.55px; }\n  .ios.hairlines ion-list > .item:last-child,\n  .ios.hairlines ion-list > .item-wrapper:last-child .item {\n    border-bottom-width: 0.55px; }\n  .ios ion-list[inset] {\n    margin: 16px 16px 16px 16px;\n    border-radius: 4px; }\n    .ios ion-list[inset] ion-list-header {\n      background-color: #fff; }\n    .ios ion-list[inset] .item {\n      border-bottom: 1px solid #c8c7cc; }\n      .ios ion-list[inset] .item .item-inner {\n        border-bottom: 0; }\n    .ios ion-list[inset] > .item:first-child,\n    .ios ion-list[inset] > .item-wrapper:first-child .item {\n      border-top: 0; }\n    .ios ion-list[inset] > .item:last-child,\n    .ios ion-list[inset] > .item-wrapper:last-child .item {\n      border-bottom: 0; }\n  .ios ion-list[inset] + ion-list[inset] {\n    margin-top: 0; }\n  .ios.hairlines ion-list[inset] .item {\n    border-width: 0.55px; }\n  .ios ion-list[no-lines] ion-list-header,\n  .ios ion-list[no-lines] ion-item-options,\n  .ios ion-list[no-lines] .item,\n  .ios ion-list[no-lines] .item .item-inner,\n  .ios.hairlines ion-list[no-lines] ion-list-header,\n  .ios.hairlines ion-list[no-lines] ion-item-options,\n  .ios.hairlines ion-list[no-lines] .item,\n  .ios.hairlines ion-list[no-lines] .item .item-inner {\n    border-width: 0; }\n  .ios ion-loading {\n    position: absolute;\n    top: 0;\n    right: 0;\n    bottom: 0;\n    left: 0;\n    z-index: 1000;\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    -webkit-box-pack: center;\n    -webkit-justify-content: center;\n    -ms-flex-pack: center;\n    justify-content: center; }\n  .ios .loading-wrapper {\n    z-index: 10;\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    opacity: 0; }\n  .ios .loading-wrapper {\n    padding: 24px 34px;\n    max-width: 270px;\n    max-height: 90%;\n    border-radius: 8px;\n    color: #000;\n    background: #f8f8f8; }\n  .ios .loading-content {\n    font-weight: bold; }\n  .ios .loading-spinner + .loading-content {\n    margin-left: 16px; }\n  .ios .loading-spinner .spinner-ios line,\n  .ios .loading-spinner .spinner-ios-small line {\n    stroke: #69717d; }\n  .ios .loading-spinner .spinner-bubbles circle {\n    fill: #69717d; }\n  .ios .loading-spinner .spinner-circles circle {\n    fill: #69717d; }\n  .ios .loading-spinner .spinner-crescent circle {\n    stroke: #69717d; }\n  .ios .loading-spinner .spinner-dots circle {\n    fill: #69717d; }\n  .ios .menu-inner {\n    background: #fff; }\n  .ios .menu-content-reveal {\n    box-shadow: 0 0 10px rgba(0, 0, 0, 0.25); }\n  .ios .menu-content-push {\n    box-shadow: 0 0 10px rgba(0, 0, 0, 0.25); }\n  .ios ion-menu[type=overlay] .menu-inner {\n    box-shadow: 0 0 10px rgba(0, 0, 0, 0.25); }\n  .ios .modal-wrapper {\n    -webkit-transform: translate3d(0, 100%, 0);\n    transform: translate3d(0, 100%, 0); }\n  .ios ion-picker-cmp {\n    position: absolute;\n    top: 0;\n    left: 0;\n    z-index: 1000;\n    display: block;\n    width: 100%;\n    height: 100%; }\n  .ios .picker-toolbar {\n    z-index: 1; }\n  .ios .picker-wrapper {\n    position: absolute;\n    right: 0;\n    bottom: 0;\n    left: 0;\n    z-index: 10;\n    display: -webkit-box;\n    display: -webkit-flex;\n    display: -ms-flexbox;\n    display: flex;\n    overflow: hidden;\n    -webkit-box-orient: vertical;\n    -webkit-box-direction: normal;\n    -webkit-flex-direction: column;\n    -ms-flex-direction: column;\n    flex-direction: column;\n    margin: auto;\n    width: 100%;\n    max-width: 500px;\n    -webkit-transform: translate3d(0, 100%, 0);\n    transform: translate3d(0, 100%, 0); }\n  .ios .picker-columns {\n    position: relative;\n    display: -webkit-box;\n    display: -webkit-flex;\n    display: -ms-flexbox;\n    display: flex;\n    overflow: hidden;\n    -webkit-box-pack: center;\n    -webkit-justify-content: center;\n    -ms-flex-pack: center;\n    justify-content: center; }\n  .ios .picker-col {\n    position: relative;\n    display: -webkit-box;\n    display: -webkit-flex;\n    display: -ms-flexbox;\n    display: flex;\n    max-height: 100%; }\n  .ios .picker-opts {\n    position: relative;\n    width: 100%;\n    min-width: 50px;\n    max-width: 100%; }\n  .ios .picker-prefix {\n    position: relative;\n    -webkit-box-flex: 1;\n    -webkit-flex: 1;\n    -ms-flex: 1;\n    flex: 1;\n    min-width: 50px;\n    min-width: 45%;\n    text-align: right;\n    white-space: nowrap; }\n  .ios .picker-suffix {\n    position: relative;\n    -webkit-box-flex: 1;\n    -webkit-flex: 1;\n    -ms-flex: 1;\n    flex: 1;\n    min-width: 50px;\n    min-width: 45%;\n    text-align: left;\n    white-space: nowrap; }\n  .ios .picker-opt {\n    position: absolute;\n    top: 0;\n    left: 0;\n    overflow: hidden;\n    -webkit-box-flex: 1;\n    -webkit-flex: 1;\n    -ms-flex: 1;\n    flex: 1;\n    width: 100%; }\n  .ios .picker-opt .button-inner {\n    display: block;\n    overflow: hidden;\n    text-overflow: ellipsis;\n    white-space: nowrap;\n    -webkit-transition: opacity 150ms ease-in-out;\n    transition: opacity 150ms ease-in-out; }\n  .ios .picker-opt.picker-opt-disabled {\n    pointer-events: none; }\n  .ios .picker-opt-disabled .button-inner {\n    opacity: 0; }\n  .ios .picker-opts-left .button-inner {\n    -webkit-box-pack: start;\n    -webkit-justify-content: flex-start;\n    -ms-flex-pack: start;\n    justify-content: flex-start; }\n  .ios .picker-opts-right .button-inner {\n    -webkit-box-pack: end;\n    -webkit-justify-content: flex-end;\n    -ms-flex-pack: end;\n    justify-content: flex-end; }\n  .ios .picker-above-highlight,\n  .ios .picker-below-highlight {\n    display: none;\n    pointer-events: none; }\n  .ios .picker-wrapper {\n    height: 260px;\n    border-top: 1px solid #c8c7cc;\n    background: #fff; }\n  .ios .picker-toolbar {\n    display: -webkit-box;\n    display: -webkit-flex;\n    display: -ms-flexbox;\n    display: flex;\n    height: 44px;\n    border-bottom: 1px solid #c8c7cc;\n    background: #fff; }\n  .ios .hairlines .picker-wrapper,\n  .ios .hairlines .picker-toolbar {\n    border-width: 0.55px; }\n  .ios .picker-toolbar-button {\n    -webkit-box-flex: 1;\n    -webkit-flex: 1;\n    -ms-flex: 1;\n    flex: 1;\n    text-align: right; }\n  .ios .picker-toolbar-cancel {\n    font-weight: normal;\n    text-align: left; }\n  .ios .picker-button,\n  .ios .picker-button.activated {\n    margin: 0;\n    height: 44px;\n    color: #327eff;\n    background: transparent; }\n  .ios .picker-columns {\n    height: 216px;\n    -webkit-perspective: 1000px;\n    perspective: 1000px; }\n  .ios .picker-col {\n    padding: 0 4px;\n    -webkit-transform-style: preserve-3d;\n    transform-style: preserve-3d; }\n  .ios .picker-prefix,\n  .ios .picker-suffix,\n  .ios .picker-opts {\n    top: 77px;\n    font-size: 20px;\n    line-height: 42px;\n    color: #000;\n    -webkit-transform-style: preserve-3d;\n    transform-style: preserve-3d;\n    pointer-events: none; }\n  .ios .picker-opt {\n    margin: 0;\n    padding: 0;\n    font-size: 20px;\n    line-height: 42px;\n    background: transparent;\n    -webkit-transform-origin: center center;\n    transform-origin: center center;\n    -webkit-transform-style: preserve-3d;\n    transform-style: preserve-3d;\n    -webkit-transition-timing-function: ease-out;\n    transition-timing-function: ease-out;\n    -webkit-backface-visibility: hidden;\n    backface-visibility: hidden;\n    pointer-events: auto; }\n  .ios .picker-above-highlight {\n    position: absolute;\n    top: 0;\n    left: 0;\n    z-index: 10;\n    display: block;\n    width: 100%;\n    height: 81px;\n    border-bottom: 1px solid #c8c7cc;\n    background: -webkit-linear-gradient(top, white 20%, rgba(255, 255, 255, 0.7) 100%);\n    background: linear-gradient(to bottom, white 20%, rgba(255, 255, 255, 0.7) 100%);\n    -webkit-transform: translate3d(0, 0, 90px);\n    transform: translate3d(0, 0, 90px); }\n  .ios .picker-below-highlight {\n    position: absolute;\n    top: 115px;\n    left: 0;\n    z-index: 11;\n    display: block;\n    width: 100%;\n    height: 119px;\n    border-top: 1px solid #c8c7cc;\n    background: -webkit-linear-gradient(bottom, white 30%, rgba(255, 255, 255, 0.7) 100%);\n    background: linear-gradient(to top, white 30%, rgba(255, 255, 255, 0.7) 100%);\n    -webkit-transform: translate3d(0, 0, 90px);\n    transform: translate3d(0, 0, 90px); }\n  .ios ion-popover {\n    position: absolute;\n    top: 0;\n    right: 0;\n    bottom: 0;\n    left: 0;\n    z-index: 1000;\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    -webkit-box-pack: center;\n    -webkit-justify-content: center;\n    -ms-flex-pack: center;\n    justify-content: center; }\n  .ios .popover-wrapper {\n    z-index: 10;\n    opacity: 0; }\n  .ios .popover-content {\n    position: absolute;\n    z-index: 10;\n    display: -webkit-box;\n    display: -webkit-flex;\n    display: -ms-flexbox;\n    display: flex;\n    overflow: auto;\n    -webkit-box-orient: vertical;\n    -webkit-box-direction: normal;\n    -webkit-flex-direction: column;\n    -ms-flex-direction: column;\n    flex-direction: column; }\n    .ios .popover-content scroll-content {\n      position: relative; }\n  .ios .popover-content {\n    width: 200px;\n    min-width: 0;\n    min-height: 0;\n    max-height: 90%;\n    border-radius: 10px;\n    color: #000;\n    background: #fff; }\n    .ios .popover-content ion-content {\n      background: #fff; }\n  .ios .popover-content .item {\n    background-color: #fff; }\n  .ios .popover-arrow {\n    position: absolute;\n    display: block;\n    overflow: hidden;\n    width: 20px;\n    height: 10px; }\n    .ios .popover-arrow::after {\n      position: absolute;\n      top: 3px;\n      left: 3px;\n      z-index: 10;\n      width: 14px;\n      height: 14px;\n      border-radius: 3px;\n      background-color: #fff;\n      content: \"\";\n      -webkit-transform: rotate(45deg);\n      transform: rotate(45deg); }\n  .ios .popover-bottom .popover-arrow {\n    top: auto;\n    bottom: -10px; }\n    .ios .popover-bottom .popover-arrow::after {\n      top: -6px; }\n  .ios ion-radio {\n    position: relative;\n    display: inline-block; }\n  .ios .radio-icon {\n    position: relative;\n    display: block;\n    width: 16px;\n    height: 21px; }\n  .ios .radio-checked .radio-inner {\n    position: absolute;\n    top: 4px;\n    left: 7px;\n    width: 5px;\n    height: 12px;\n    border-width: 2px;\n    border-top-width: 0;\n    border-left-width: 0;\n    border-style: solid;\n    border-color: #327eff;\n    -webkit-transform: rotate(45deg);\n    transform: rotate(45deg); }\n  .ios .radio-disabled,\n  .ios .item-radio-disabled ion-label {\n    opacity: 0.3;\n    pointer-events: none; }\n  .ios .item ion-radio {\n    position: static;\n    display: block;\n    margin: 8px 11px 8px 8px; }\n    .ios .item ion-radio[item-left] {\n      margin: 8px 21px 8px 3px; }\n  .ios .item-radio ion-label {\n    margin-left: 0; }\n  .ios .item-radio-checked ion-label {\n    color: #327eff; }\n  .ios .item-radio-primary.item-radio-checked ion-label {\n    color: #327eff; }\n  .ios .radio-primary .radio-checked {\n    color: #327eff; }\n    .ios .radio-primary .radio-checked .radio-inner {\n      border-color: #327eff; }\n  .ios .item-radio-secondary.item-radio-checked ion-label {\n    color: #32db64; }\n  .ios .radio-secondary .radio-checked {\n    color: #32db64; }\n    .ios .radio-secondary .radio-checked .radio-inner {\n      border-color: #32db64; }\n  .ios .item-radio-danger.item-radio-checked ion-label {\n    color: #f53d3d; }\n  .ios .radio-danger .radio-checked {\n    color: #f53d3d; }\n    .ios .radio-danger .radio-checked .radio-inner {\n      border-color: #f53d3d; }\n  .ios .item-radio-light.item-radio-checked ion-label {\n    color: #f4f4f4; }\n  .ios .radio-light .radio-checked {\n    color: #f4f4f4; }\n    .ios .radio-light .radio-checked .radio-inner {\n      border-color: #f4f4f4; }\n  .ios .item-radio-dark.item-radio-checked ion-label {\n    color: #222; }\n  .ios .radio-dark .radio-checked {\n    color: #222; }\n    .ios .radio-dark .radio-checked .radio-inner {\n      border-color: #222; }\n  .ios .item-range .item-inner {\n    overflow: visible; }\n  .ios .item-range .input-wrapper {\n    overflow: visible;\n    -webkit-box-orient: vertical;\n    -webkit-box-direction: normal;\n    -webkit-flex-direction: column;\n    -ms-flex-direction: column;\n    flex-direction: column; }\n  .ios .item-range ion-range {\n    width: 100%; }\n    .ios .item-range ion-range ion-label {\n      -webkit-align-self: center;\n      -ms-flex-item-align: center;\n      align-self: center; }\n  .ios ion-range {\n    position: relative;\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    .ios ion-range ion-label {\n      -webkit-box-flex: initial;\n      -webkit-flex: initial;\n      -ms-flex: initial;\n      flex: initial; }\n    .ios ion-range ion-icon {\n      min-height: 2.4rem;\n      font-size: 2.4rem;\n      line-height: 1; }\n  .ios .range-slider {\n    position: relative;\n    -webkit-box-flex: 1;\n    -webkit-flex: 1;\n    -ms-flex: 1;\n    flex: 1;\n    cursor: pointer; }\n  .ios ion-range {\n    padding: 8px 16px; }\n  .ios [range-left],\n  .ios [range-right] {\n    margin: 0 20px; }\n  .ios [range-left] {\n    margin-left: 0; }\n  .ios [range-right] {\n    margin-right: 0; }\n  .ios .range-has-pin {\n    padding-top: 20px; }\n  .ios .range-slider {\n    height: 42px; }\n  .ios .range-bar {\n    position: absolute;\n    top: 21px;\n    left: 0;\n    width: 100%;\n    height: 1px;\n    border-radius: 1px;\n    background: #bdbdbd;\n    pointer-events: none; }\n  .ios .range-pressed .range-bar-active {\n    will-change: left, right; }\n  .ios .range-pressed .range-knob-handle {\n    will-change: left; }\n  .ios .range-bar-active {\n    bottom: 0;\n    width: auto;\n    background: #327eff; }\n  .ios .range-knob-handle {\n    position: absolute;\n    top: 21px;\n    left: 0%;\n    margin-top: -21px;\n    margin-left: -21px;\n    width: 42px;\n    height: 42px;\n    text-align: center; }\n  .ios .range-knob {\n    position: absolute;\n    top: 7px;\n    left: 7px;\n    width: 28px;\n    height: 28px;\n    border-radius: 50%;\n    background: #fff;\n    box-shadow: 0 3px 1px rgba(0, 0, 0, 0.1), 0 4px 8px rgba(0, 0, 0, 0.13), 0 0 0 1px rgba(0, 0, 0, 0.02);\n    pointer-events: none; }\n  .ios .range-tick {\n    position: absolute;\n    top: 17.5px;\n    margin-left: -0.5px;\n    width: 1px;\n    height: 8px;\n    border-radius: 0;\n    background: #bdbdbd;\n    pointer-events: none; }\n  .ios .range-tick-active {\n    background: #327eff; }\n  .ios .range-pin {\n    position: relative;\n    top: -20px;\n    display: inline-block;\n    padding: 8px;\n    min-width: 28px;\n    border-radius: 50px;\n    font-size: 12px;\n    text-align: center;\n    color: #000;\n    background: transparent;\n    -webkit-transform: translate3d(0, 28px, 0) scale(0.01);\n    transform: translate3d(0, 28px, 0) scale(0.01);\n    -webkit-transition: -webkit-transform 120ms ease;\n    transition: transform 120ms ease; }\n  .ios .range-knob-pressed .range-pin {\n    -webkit-transform: translate3d(0, 0, 0) scale(1);\n    transform: translate3d(0, 0, 0) scale(1); }\n  .ios .range-disabled {\n    opacity: .5; }\n  .ios .range-primary .range-bar-active,\n  .ios .range-primary .range-tick-active {\n    background: #327eff; }\n  .ios .range-secondary .range-bar-active,\n  .ios .range-secondary .range-tick-active {\n    background: #32db64; }\n  .ios .range-danger .range-bar-active,\n  .ios .range-danger .range-tick-active {\n    background: #f53d3d; }\n  .ios .range-light .range-bar-active,\n  .ios .range-light .range-tick-active {\n    background: #f4f4f4; }\n  .ios .range-dark .range-bar-active,\n  .ios .range-dark .range-tick-active {\n    background: #222; }\n  .ios ion-searchbar {\n    position: relative;\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    width: 100%; }\n  .ios .searchbar-icon {\n    pointer-events: none; }\n  .ios .searchbar-input-container {\n    position: relative;\n    display: block;\n    -webkit-flex-shrink: 1;\n    -ms-flex-negative: 1;\n    flex-shrink: 1;\n    width: 100%; }\n  .ios .searchbar-input {\n    -webkit-appearance: none;\n    -moz-appearance: none;\n    display: block;\n    width: 100%;\n    border: 0;\n    font-family: inherit; }\n  .ios .searchbar-clear-icon {\n    display: none;\n    margin: 0;\n    padding: 0;\n    min-height: 0; }\n  .ios .searchbar-has-value.searchbar-has-focus .searchbar-clear-icon {\n    display: block; }\n  .ios ion-searchbar {\n    padding: 0 8px;\n    min-height: 44px;\n    border-top: 1px solid transparent;\n    border-bottom: 1px solid rgba(0, 0, 0, 0.05);\n    background: rgba(0, 0, 0, 0.2); }\n  .ios .searchbar-search-icon {\n    background-image: url(\"data:image/svg+xml;charset=utf-8,<svg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%2013%2013'><path%20fill='rgba(0,%200,%200,%200.5)'%20d='M5,1c2.2,0,4,1.8,4,4S7.2,9,5,9S1,7.2,1,5S2.8,1,5,1%20M5,0C2.2,0,0,2.2,0,5s2.2,5,5,5s5-2.2,5-5S7.8,0,5,0%20L5,0z'/><line%20stroke='rgba(0,%200,%200,%200.5)'%20stroke-miterlimit='10'%20x1='12.6'%20y1='12.6'%20x2='8.2'%20y2='8.2'/></svg>\");\n    margin-left: calc(50% - 60px);\n    position: absolute;\n    top: 9px;\n    left: 9px;\n    width: 14px;\n    height: 14px;\n    background-repeat: no-repeat;\n    background-size: 13px;\n    -webkit-transition: all 300ms ease;\n    transition: all 300ms ease; }\n  .ios .searchbar-input {\n    padding-left: calc(50% - 28px);\n    padding: 0 28px;\n    height: 3rem;\n    border-radius: 5px;\n    font-size: 1.4rem;\n    font-weight: 400;\n    color: #000;\n    background-color: #fff;\n    -webkit-transition: all 300ms ease;\n    transition: all 300ms ease; }\n    .ios .searchbar-input::-moz-placeholder {\n      color: rgba(0, 0, 0, 0.5); }\n    .ios .searchbar-input:-ms-input-placeholder {\n      color: rgba(0, 0, 0, 0.5); }\n    .ios .searchbar-input::-webkit-input-placeholder {\n      text-indent: 0;\n      color: rgba(0, 0, 0, 0.5); }\n  .ios .searchbar-clear-icon {\n    background-image: url(\"data:image/svg+xml;charset=utf-8,<svg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%20512%20512'><path%20fill='rgba(0,%200,%200,%200.5)'%20d='M403.1,108.9c-81.2-81.2-212.9-81.2-294.2,0s-81.2,212.9,0,294.2c81.2,81.2,212.9,81.2,294.2,0S484.3,190.1,403.1,108.9z%20M352,340.2L340.2,352l-84.4-84.2l-84,83.8L160,339.8l84-83.8l-84-83.8l11.8-11.8l84,83.8l84.4-84.2l11.8,11.8L267.6,256L352,340.2z'/></svg>\");\n    position: absolute;\n    top: 0;\n    right: 0;\n    width: 30px;\n    height: 100%;\n    background-repeat: no-repeat;\n    background-position: center;\n    background-size: 18px; }\n  .ios .searchbar-ios-cancel {\n    display: none;\n    -webkit-flex-shrink: 0;\n    -ms-flex-negative: 0;\n    flex-shrink: 0;\n    margin-right: -100%;\n    margin-left: 0;\n    padding: 0;\n    padding-left: 8px;\n    height: 30px;\n    cursor: pointer;\n    opacity: 0;\n    -webkit-transform: translate3d(0, 0, 0);\n    transform: translate3d(0, 0, 0);\n    -webkit-transition: all 300ms ease;\n    transition: all 300ms ease;\n    pointer-events: none; }\n  .ios .searchbar-show-cancel .searchbar-ios-cancel {\n    display: block; }\n  .ios .searchbar-left-aligned .searchbar-search-icon {\n    margin-left: 0; }\n  .ios .searchbar-left-aligned .searchbar-input {\n    padding-left: 30px; }\n  .ios .searchbar-has-focus .searchbar-ios-cancel {\n    opacity: 1;\n    pointer-events: auto; }\n  .ios .toolbar ion-searchbar {\n    border-bottom-width: 0;\n    background: transparent; }\n    .ios .toolbar ion-searchbar .searchbar-input {\n      background: rgba(0, 0, 0, 0.08); }\n    .ios .toolbar ion-searchbar .searchbar-ios-cancel {\n      padding: 0; }\n  .ios .toolbar .searchbar-has-focus .searchbar-ios-cancel {\n    padding-left: 8px; }\n  .ios .searchbar-md-cancel {\n    display: none; }\n  .ios.hairlines ion-searchbar {\n    border-bottom-width: 0.55px; }\n  .ios.hairlines ion-toolbar ion-searchbar {\n    border-bottom-width: 0; }\n  .ios .searchbar-primary .searchbar-ios-cancel {\n    color: #327eff; }\n    .ios .searchbar-primary .searchbar-ios-cancel:hover:not(.disable-hover) {\n      color: #2e74eb; }\n  .ios .toolbar-primary ion-searchbar .searchbar-search-icon {\n    background-image: url(\"data:image/svg+xml;charset=utf-8,<svg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%2013%2013'><path%20fill='rgba(255,%20255,%20255,%200.5)'%20d='M5,1c2.2,0,4,1.8,4,4S7.2,9,5,9S1,7.2,1,5S2.8,1,5,1%20M5,0C2.2,0,0,2.2,0,5s2.2,5,5,5s5-2.2,5-5S7.8,0,5,0%20L5,0z'/><line%20stroke='rgba(255,%20255,%20255,%200.5)'%20stroke-miterlimit='10'%20x1='12.6'%20y1='12.6'%20x2='8.2'%20y2='8.2'/></svg>\"); }\n  .ios .toolbar-primary ion-searchbar .searchbar-input {\n    color: #fff;\n    background: rgba(255, 255, 255, 0.08); }\n    .ios .toolbar-primary ion-searchbar .searchbar-input::-moz-placeholder {\n      color: rgba(255, 255, 255, 0.5); }\n    .ios .toolbar-primary ion-searchbar .searchbar-input:-ms-input-placeholder {\n      color: rgba(255, 255, 255, 0.5); }\n    .ios .toolbar-primary ion-searchbar .searchbar-input::-webkit-input-placeholder {\n      text-indent: 0;\n      color: rgba(255, 255, 255, 0.5); }\n  .ios .toolbar-primary ion-searchbar .searchbar-clear-icon {\n    background-image: url(\"data:image/svg+xml;charset=utf-8,<svg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%20512%20512'><path%20fill='rgba(255,%20255,%20255,%200.5)'%20d='M403.1,108.9c-81.2-81.2-212.9-81.2-294.2,0s-81.2,212.9,0,294.2c81.2,81.2,212.9,81.2,294.2,0S484.3,190.1,403.1,108.9z%20M352,340.2L340.2,352l-84.4-84.2l-84,83.8L160,339.8l84-83.8l-84-83.8l11.8-11.8l84,83.8l84.4-84.2l11.8,11.8L267.6,256L352,340.2z'/></svg>\"); }\n  .ios .toolbar-primary ion-searchbar .searchbar-ios-cancel {\n    color: #fff; }\n  .ios .searchbar-secondary .searchbar-ios-cancel {\n    color: #32db64; }\n    .ios .searchbar-secondary .searchbar-ios-cancel:hover:not(.disable-hover) {\n      color: #2ec95c; }\n  .ios .toolbar-secondary ion-searchbar .searchbar-search-icon {\n    background-image: url(\"data:image/svg+xml;charset=utf-8,<svg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%2013%2013'><path%20fill='rgba(255,%20255,%20255,%200.5)'%20d='M5,1c2.2,0,4,1.8,4,4S7.2,9,5,9S1,7.2,1,5S2.8,1,5,1%20M5,0C2.2,0,0,2.2,0,5s2.2,5,5,5s5-2.2,5-5S7.8,0,5,0%20L5,0z'/><line%20stroke='rgba(255,%20255,%20255,%200.5)'%20stroke-miterlimit='10'%20x1='12.6'%20y1='12.6'%20x2='8.2'%20y2='8.2'/></svg>\"); }\n  .ios .toolbar-secondary ion-searchbar .searchbar-input {\n    color: #fff;\n    background: rgba(255, 255, 255, 0.08); }\n    .ios .toolbar-secondary ion-searchbar .searchbar-input::-moz-placeholder {\n      color: rgba(255, 255, 255, 0.5); }\n    .ios .toolbar-secondary ion-searchbar .searchbar-input:-ms-input-placeholder {\n      color: rgba(255, 255, 255, 0.5); }\n    .ios .toolbar-secondary ion-searchbar .searchbar-input::-webkit-input-placeholder {\n      text-indent: 0;\n      color: rgba(255, 255, 255, 0.5); }\n  .ios .toolbar-secondary ion-searchbar .searchbar-clear-icon {\n    background-image: url(\"data:image/svg+xml;charset=utf-8,<svg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%20512%20512'><path%20fill='rgba(255,%20255,%20255,%200.5)'%20d='M403.1,108.9c-81.2-81.2-212.9-81.2-294.2,0s-81.2,212.9,0,294.2c81.2,81.2,212.9,81.2,294.2,0S484.3,190.1,403.1,108.9z%20M352,340.2L340.2,352l-84.4-84.2l-84,83.8L160,339.8l84-83.8l-84-83.8l11.8-11.8l84,83.8l84.4-84.2l11.8,11.8L267.6,256L352,340.2z'/></svg>\"); }\n  .ios .toolbar-secondary ion-searchbar .searchbar-ios-cancel {\n    color: #fff; }\n  .ios .searchbar-danger .searchbar-ios-cancel {\n    color: #f53d3d; }\n    .ios .searchbar-danger .searchbar-ios-cancel:hover:not(.disable-hover) {\n      color: #e13838; }\n  .ios .toolbar-danger ion-searchbar .searchbar-search-icon {\n    background-image: url(\"data:image/svg+xml;charset=utf-8,<svg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%2013%2013'><path%20fill='rgba(255,%20255,%20255,%200.5)'%20d='M5,1c2.2,0,4,1.8,4,4S7.2,9,5,9S1,7.2,1,5S2.8,1,5,1%20M5,0C2.2,0,0,2.2,0,5s2.2,5,5,5s5-2.2,5-5S7.8,0,5,0%20L5,0z'/><line%20stroke='rgba(255,%20255,%20255,%200.5)'%20stroke-miterlimit='10'%20x1='12.6'%20y1='12.6'%20x2='8.2'%20y2='8.2'/></svg>\"); }\n  .ios .toolbar-danger ion-searchbar .searchbar-input {\n    color: #fff;\n    background: rgba(255, 255, 255, 0.08); }\n    .ios .toolbar-danger ion-searchbar .searchbar-input::-moz-placeholder {\n      color: rgba(255, 255, 255, 0.5); }\n    .ios .toolbar-danger ion-searchbar .searchbar-input:-ms-input-placeholder {\n      color: rgba(255, 255, 255, 0.5); }\n    .ios .toolbar-danger ion-searchbar .searchbar-input::-webkit-input-placeholder {\n      text-indent: 0;\n      color: rgba(255, 255, 255, 0.5); }\n  .ios .toolbar-danger ion-searchbar .searchbar-clear-icon {\n    background-image: url(\"data:image/svg+xml;charset=utf-8,<svg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%20512%20512'><path%20fill='rgba(255,%20255,%20255,%200.5)'%20d='M403.1,108.9c-81.2-81.2-212.9-81.2-294.2,0s-81.2,212.9,0,294.2c81.2,81.2,212.9,81.2,294.2,0S484.3,190.1,403.1,108.9z%20M352,340.2L340.2,352l-84.4-84.2l-84,83.8L160,339.8l84-83.8l-84-83.8l11.8-11.8l84,83.8l84.4-84.2l11.8,11.8L267.6,256L352,340.2z'/></svg>\"); }\n  .ios .toolbar-danger ion-searchbar .searchbar-ios-cancel {\n    color: #fff; }\n  .ios .searchbar-light .searchbar-ios-cancel {\n    color: #f4f4f4; }\n    .ios .searchbar-light .searchbar-ios-cancel:hover:not(.disable-hover) {\n      color: #e0e0e0; }\n  .ios .toolbar-light ion-searchbar .searchbar-search-icon {\n    background-image: url(\"data:image/svg+xml;charset=utf-8,<svg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%2013%2013'><path%20fill='rgba(0,%200,%200,%200.5)'%20d='M5,1c2.2,0,4,1.8,4,4S7.2,9,5,9S1,7.2,1,5S2.8,1,5,1%20M5,0C2.2,0,0,2.2,0,5s2.2,5,5,5s5-2.2,5-5S7.8,0,5,0%20L5,0z'/><line%20stroke='rgba(0,%200,%200,%200.5)'%20stroke-miterlimit='10'%20x1='12.6'%20y1='12.6'%20x2='8.2'%20y2='8.2'/></svg>\"); }\n  .ios .toolbar-light ion-searchbar .searchbar-input {\n    color: #000;\n    background: rgba(0, 0, 0, 0.08); }\n    .ios .toolbar-light ion-searchbar .searchbar-input::-moz-placeholder {\n      color: rgba(0, 0, 0, 0.5); }\n    .ios .toolbar-light ion-searchbar .searchbar-input:-ms-input-placeholder {\n      color: rgba(0, 0, 0, 0.5); }\n    .ios .toolbar-light ion-searchbar .searchbar-input::-webkit-input-placeholder {\n      text-indent: 0;\n      color: rgba(0, 0, 0, 0.5); }\n  .ios .toolbar-light ion-searchbar .searchbar-clear-icon {\n    background-image: url(\"data:image/svg+xml;charset=utf-8,<svg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%20512%20512'><path%20fill='rgba(0,%200,%200,%200.5)'%20d='M403.1,108.9c-81.2-81.2-212.9-81.2-294.2,0s-81.2,212.9,0,294.2c81.2,81.2,212.9,81.2,294.2,0S484.3,190.1,403.1,108.9z%20M352,340.2L340.2,352l-84.4-84.2l-84,83.8L160,339.8l84-83.8l-84-83.8l11.8-11.8l84,83.8l84.4-84.2l11.8,11.8L267.6,256L352,340.2z'/></svg>\"); }\n  .ios .toolbar-light ion-searchbar .searchbar-ios-cancel {\n    color: #327eff; }\n  .ios .searchbar-dark .searchbar-ios-cancel {\n    color: #222; }\n    .ios .searchbar-dark .searchbar-ios-cancel:hover:not(.disable-hover) {\n      color: #343434; }\n  .ios .toolbar-dark ion-searchbar .searchbar-search-icon {\n    background-image: url(\"data:image/svg+xml;charset=utf-8,<svg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%2013%2013'><path%20fill='rgba(255,%20255,%20255,%200.5)'%20d='M5,1c2.2,0,4,1.8,4,4S7.2,9,5,9S1,7.2,1,5S2.8,1,5,1%20M5,0C2.2,0,0,2.2,0,5s2.2,5,5,5s5-2.2,5-5S7.8,0,5,0%20L5,0z'/><line%20stroke='rgba(255,%20255,%20255,%200.5)'%20stroke-miterlimit='10'%20x1='12.6'%20y1='12.6'%20x2='8.2'%20y2='8.2'/></svg>\"); }\n  .ios .toolbar-dark ion-searchbar .searchbar-input {\n    color: #fff;\n    background: rgba(255, 255, 255, 0.08); }\n    .ios .toolbar-dark ion-searchbar .searchbar-input::-moz-placeholder {\n      color: rgba(255, 255, 255, 0.5); }\n    .ios .toolbar-dark ion-searchbar .searchbar-input:-ms-input-placeholder {\n      color: rgba(255, 255, 255, 0.5); }\n    .ios .toolbar-dark ion-searchbar .searchbar-input::-webkit-input-placeholder {\n      text-indent: 0;\n      color: rgba(255, 255, 255, 0.5); }\n  .ios .toolbar-dark ion-searchbar .searchbar-clear-icon {\n    background-image: url(\"data:image/svg+xml;charset=utf-8,<svg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%20512%20512'><path%20fill='rgba(255,%20255,%20255,%200.5)'%20d='M403.1,108.9c-81.2-81.2-212.9-81.2-294.2,0s-81.2,212.9,0,294.2c81.2,81.2,212.9,81.2,294.2,0S484.3,190.1,403.1,108.9z%20M352,340.2L340.2,352l-84.4-84.2l-84,83.8L160,339.8l84-83.8l-84-83.8l11.8-11.8l84,83.8l84.4-84.2l11.8,11.8L267.6,256L352,340.2z'/></svg>\"); }\n  .ios .toolbar-dark ion-searchbar .searchbar-ios-cancel {\n    color: #fff; }\n  .ios ion-segment {\n    display: -webkit-box;\n    display: -webkit-flex;\n    display: -ms-flexbox;\n    display: flex;\n    -webkit-box-flex: 1;\n    -webkit-flex: 1;\n    -ms-flex: 1;\n    flex: 1;\n    -webkit-box-align: center;\n    -webkit-align-items: center;\n    -ms-flex-align: center;\n    align-items: center;\n    -webkit-box-pack: center;\n    -webkit-justify-content: center;\n    -ms-flex-pack: center;\n    justify-content: center;\n    width: 100%; }\n  .ios .segment-button {\n    position: relative;\n    display: block;\n    overflow: hidden;\n    margin-right: 0;\n    margin-left: 0;\n    text-align: center;\n    text-overflow: ellipsis;\n    white-space: nowrap;\n    cursor: pointer; }\n  .ios .segment-button {\n    -webkit-box-flex: 1;\n    -webkit-flex: 1;\n    -ms-flex: 1;\n    flex: 1;\n    width: 0;\n    height: 3.2rem;\n    border-width: 1px;\n    border-style: solid;\n    border-color: #327eff;\n    font-size: 1.3rem;\n    line-height: 3rem;\n    color: #327eff;\n    background-color: transparent; }\n    .ios .segment-button ion-icon {\n      font-size: 2.6rem;\n      line-height: 2.8rem; }\n    .ios .segment-button.segment-activated {\n      color: #fff;\n      background-color: #327eff;\n      opacity: 1;\n      -webkit-transition: 100ms all linear;\n      transition: 100ms all linear; }\n    .ios .segment-button:hover:not(.segment-activated) {\n      background-color: rgba(50, 126, 255, 0.1);\n      -webkit-transition: 100ms all linear;\n      transition: 100ms all linear; }\n    .ios .segment-button:active:not(.segment-activated) {\n      background-color: rgba(50, 126, 255, 0.16);\n      -webkit-transition: 100ms all linear;\n      transition: 100ms all linear; }\n    .ios .segment-button:first-of-type {\n      margin-right: 0;\n      border-radius: 4px 0 0 4px; }\n    .ios .segment-button:not(:first-of-type) {\n      border-left-width: 0; }\n    .ios .segment-button:last-of-type {\n      margin-left: 0;\n      border-left-width: 0;\n      border-radius: 0 4px 4px 0; }\n  .ios .segment-button-disabled {\n    color: rgba(50, 126, 255, 0.3);\n    pointer-events: none; }\n  .ios .toolbar ion-segment {\n    position: absolute;\n    top: 0;\n    right: 0;\n    bottom: 0;\n    left: 0; }\n  .ios .toolbar .segment-button {\n    max-width: 100px;\n    height: 2.6rem;\n    font-size: 1.2rem;\n    line-height: 2.5rem; }\n    .ios .toolbar .segment-button ion-icon {\n      font-size: 2.2rem;\n      line-height: 2.4rem; }\n  .ios .segment-primary .segment-button {\n    border-color: #327eff;\n    color: #327eff; }\n    .ios .segment-primary .segment-button:hover:not(.segment-activated) {\n      background-color: rgba(50, 126, 255, 0.1); }\n    .ios .segment-primary .segment-button:active:not(.segment-activated) {\n      background-color: rgba(50, 126, 255, 0.16); }\n    .ios .segment-primary .segment-button.segment-activated {\n      color: #fff;\n      background-color: #327eff; }\n  .ios .segment-primary .segment-button-disabled {\n    color: rgba(50, 126, 255, 0.3); }\n  .ios .toolbar-primary .segment-button.segment-activated {\n    color: #327eff; }\n  .ios .segment-secondary .segment-button {\n    border-color: #32db64;\n    color: #32db64; }\n    .ios .segment-secondary .segment-button:hover:not(.segment-activated) {\n      background-color: rgba(50, 219, 100, 0.1); }\n    .ios .segment-secondary .segment-button:active:not(.segment-activated) {\n      background-color: rgba(50, 219, 100, 0.16); }\n    .ios .segment-secondary .segment-button.segment-activated {\n      color: #fff;\n      background-color: #32db64; }\n  .ios .segment-secondary .segment-button-disabled {\n    color: rgba(50, 219, 100, 0.3); }\n  .ios .toolbar-secondary .segment-button.segment-activated {\n    color: #32db64; }\n  .ios .segment-danger .segment-button {\n    border-color: #f53d3d;\n    color: #f53d3d; }\n    .ios .segment-danger .segment-button:hover:not(.segment-activated) {\n      background-color: rgba(245, 61, 61, 0.1); }\n    .ios .segment-danger .segment-button:active:not(.segment-activated) {\n      background-color: rgba(245, 61, 61, 0.16); }\n    .ios .segment-danger .segment-button.segment-activated {\n      color: #fff;\n      background-color: #f53d3d; }\n  .ios .segment-danger .segment-button-disabled {\n    color: rgba(245, 61, 61, 0.3); }\n  .ios .toolbar-danger .segment-button.segment-activated {\n    color: #f53d3d; }\n  .ios .segment-light .segment-button {\n    border-color: #f4f4f4;\n    color: #f4f4f4; }\n    .ios .segment-light .segment-button:hover:not(.segment-activated) {\n      background-color: rgba(244, 244, 244, 0.1); }\n    .ios .segment-light .segment-button:active:not(.segment-activated) {\n      background-color: rgba(244, 244, 244, 0.16); }\n    .ios .segment-light .segment-button.segment-activated {\n      color: #000;\n      background-color: #f4f4f4; }\n  .ios .segment-light .segment-button-disabled {\n    color: rgba(244, 244, 244, 0.3); }\n  .ios .toolbar-light .segment-button.segment-activated {\n    color: #f4f4f4; }\n  .ios .segment-dark .segment-button {\n    border-color: #222;\n    color: #222; }\n    .ios .segment-dark .segment-button:hover:not(.segment-activated) {\n      background-color: rgba(34, 34, 34, 0.1); }\n    .ios .segment-dark .segment-button:active:not(.segment-activated) {\n      background-color: rgba(34, 34, 34, 0.16); }\n    .ios .segment-dark .segment-button.segment-activated {\n      color: #fff;\n      background-color: #222; }\n  .ios .segment-dark .segment-button-disabled {\n    color: rgba(34, 34, 34, 0.3); }\n  .ios .toolbar-dark .segment-button.segment-activated {\n    color: #222; }\n  .ios ion-select {\n    display: -webkit-box;\n    display: -webkit-flex;\n    display: -ms-flexbox;\n    display: flex;\n    overflow: hidden;\n    max-width: 45%; }\n  .ios .select-text {\n    overflow: hidden;\n    -webkit-box-flex: 1;\n    -webkit-flex: 1;\n    -ms-flex: 1;\n    flex: 1;\n    min-width: 16px;\n    font-size: inherit;\n    text-overflow: ellipsis;\n    white-space: nowrap; }\n  .ios .item-multiple-inputs ion-select {\n    position: relative; }\n  .ios .select-disabled,\n  .ios .item-select-disabled ion-label {\n    opacity: .4;\n    pointer-events: none; }\n  .ios ion-select {\n    padding: 12px 8px 13px 16px; }\n  .ios .select-placeholder {\n    color: #999; }\n  .ios .select-icon {\n    position: relative;\n    width: 12px;\n    height: 18px; }\n  .ios .select-icon .select-icon-inner {\n    position: absolute;\n    top: 50%;\n    left: 5px;\n    margin-top: -2px;\n    width: 0;\n    height: 0;\n    border-top: 5px solid;\n    border-right: 5px solid transparent;\n    border-left: 5px solid transparent;\n    color: #999;\n    pointer-events: none; }\n  .ios ion-spinner {\n    position: relative;\n    display: inline-block;\n    width: 28px;\n    height: 28px; }\n  .ios ion-spinner svg {\n    position: absolute;\n    top: 0;\n    left: 0;\n    width: 100%;\n    height: 100%;\n    -webkit-transform: translateZ(0);\n    transform: translateZ(0); }\n  .ios ion-spinner.spinner-paused svg {\n    -webkit-animation-play-state: paused;\n    animation-play-state: paused; }\n  .ios .spinner-ios line,\n  .ios .spinner-ios-small line {\n    stroke: #69717d;\n    stroke-width: 4px;\n    stroke-linecap: round; }\n  .ios .spinner-ios svg,\n  .ios .spinner-ios-small svg {\n    -webkit-animation: spinner-fade-out 1s linear infinite;\n    animation: spinner-fade-out 1s linear infinite; }\n  .ios .spinner-bubbles circle {\n    fill: #000; }\n  .ios .spinner-bubbles svg {\n    -webkit-animation: spinner-scale-out 1s linear infinite;\n    animation: spinner-scale-out 1s linear infinite; }\n  .ios .spinner-circles circle {\n    fill: #69717d; }\n  .ios .spinner-circles svg {\n    -webkit-animation: spinner-fade-out 1s linear infinite;\n    animation: spinner-fade-out 1s linear infinite; }\n  .ios .spinner-crescent circle {\n    fill: transparent;\n    stroke: #000;\n    stroke-width: 4px;\n    stroke-dasharray: 128px;\n    stroke-dashoffset: 82px; }\n  .ios .spinner-crescent svg {\n    -webkit-animation: spinner-rotate 1s linear infinite;\n    animation: spinner-rotate 1s linear infinite; }\n  .ios .spinner-dots circle {\n    fill: #444;\n    stroke-width: 0; }\n  .ios .spinner-dots svg {\n    -webkit-transform-origin: center;\n    transform-origin: center;\n    -webkit-animation: spinner-dots 1s linear infinite;\n    animation: spinner-dots 1s linear infinite; }\n\n@keyframes spinner-fade-out {\n  0% {\n    opacity: 1; }\n  100% {\n    opacity: 0; } }\n\n@keyframes spinner-scale-out {\n  0% {\n    -webkit-transform: scale(1, 1);\n    transform: scale(1, 1); }\n  100% {\n    -webkit-transform: scale(0, 0);\n    transform: scale(0, 0); } }\n\n@keyframes spinner-rotate {\n  0% {\n    -webkit-transform: rotate(0deg);\n    transform: rotate(0deg); }\n  100% {\n    -webkit-transform: rotate(360deg);\n    transform: rotate(360deg); } }\n\n@keyframes spinner-dots {\n  0% {\n    opacity: .9;\n    -webkit-transform: scale(1, 1);\n    transform: scale(1, 1); }\n  50% {\n    opacity: .3;\n    -webkit-transform: scale(0.4, 0.4);\n    transform: scale(0.4, 0.4); }\n  100% {\n    opacity: .9;\n    -webkit-transform: scale(1, 1);\n    transform: scale(1, 1); } }\n  .ios .spinner-primary.spinner-ios line,\n  .ios .spinner-primary.spinner-ios-small line,\n  .ios .spinner-primary.spinner-crescent circle {\n    stroke: #327eff; }\n  .ios .spinner-primary.spinner-bubbles circle,\n  .ios .spinner-primary.spinner-circles circle,\n  .ios .spinner-primary.spinner-dots circle {\n    fill: #327eff; }\n  .ios .spinner-secondary.spinner-ios line,\n  .ios .spinner-secondary.spinner-ios-small line,\n  .ios .spinner-secondary.spinner-crescent circle {\n    stroke: #32db64; }\n  .ios .spinner-secondary.spinner-bubbles circle,\n  .ios .spinner-secondary.spinner-circles circle,\n  .ios .spinner-secondary.spinner-dots circle {\n    fill: #32db64; }\n  .ios .spinner-danger.spinner-ios line,\n  .ios .spinner-danger.spinner-ios-small line,\n  .ios .spinner-danger.spinner-crescent circle {\n    stroke: #f53d3d; }\n  .ios .spinner-danger.spinner-bubbles circle,\n  .ios .spinner-danger.spinner-circles circle,\n  .ios .spinner-danger.spinner-dots circle {\n    fill: #f53d3d; }\n  .ios .spinner-light.spinner-ios line,\n  .ios .spinner-light.spinner-ios-small line,\n  .ios .spinner-light.spinner-crescent circle {\n    stroke: #f4f4f4; }\n  .ios .spinner-light.spinner-bubbles circle,\n  .ios .spinner-light.spinner-circles circle,\n  .ios .spinner-light.spinner-dots circle {\n    fill: #f4f4f4; }\n  .ios .spinner-dark.spinner-ios line,\n  .ios .spinner-dark.spinner-ios-small line,\n  .ios .spinner-dark.spinner-crescent circle {\n    stroke: #222; }\n  .ios .spinner-dark.spinner-bubbles circle,\n  .ios .spinner-dark.spinner-circles circle,\n  .ios .spinner-dark.spinner-dots circle {\n    fill: #222; }\n  .ios .tab-button {\n    -webkit-user-select: none;\n    -moz-user-select: none;\n    -ms-user-select: none;\n    user-select: none;\n    position: relative;\n    z-index: 0;\n    display: -webkit-box;\n    display: -webkit-flex;\n    display: -ms-flexbox;\n    display: flex;\n    overflow: hidden;\n    -webkit-box-flex: 1;\n    -webkit-flex: 1;\n    -ms-flex: 1;\n    flex: 1;\n    -webkit-box-orient: vertical;\n    -webkit-box-direction: normal;\n    -webkit-flex-direction: column;\n    -ms-flex-direction: column;\n    flex-direction: column;\n    -webkit-box-align: center;\n    -webkit-align-items: center;\n    -ms-flex-align: center;\n    align-items: center;\n    -webkit-align-self: center;\n    -ms-flex-item-align: center;\n    align-self: center;\n    -webkit-box-pack: center;\n    -webkit-justify-content: center;\n    -ms-flex-pack: center;\n    justify-content: center;\n    margin: 0;\n    border: 0;\n    border-radius: 0;\n    text-align: center;\n    text-decoration: none;\n    background: none;\n    cursor: pointer; }\n  .ios .tab-disabled {\n    pointer-events: none; }\n    .ios .tab-disabled ion-badge,\n    .ios .tab-disabled ion-icon,\n    .ios .tab-disabled span {\n      opacity: .4; }\n  .ios .tab-hidden {\n    display: none; }\n  .ios .tab-button-text {\n    margin-top: 3px;\n    margin-bottom: 2px; }\n  .ios .tab-button-text,\n  .ios .tab-button-icon {\n    display: none;\n    overflow: hidden;\n    -webkit-align-self: center;\n    -ms-flex-item-align: center;\n    align-self: center;\n    min-width: 26px;\n    max-width: 100%;\n    text-overflow: ellipsis;\n    white-space: nowrap; }\n  .ios .has-icon .tab-button-icon,\n  .ios .has-title .tab-button-text {\n    display: block; }\n  .ios .has-title-only .tab-button-text {\n    white-space: normal; }\n  .ios tab-highlight {\n    display: none; }\n  .ios [tabsLayout=icon-bottom] .tab-button .tab-button-icon {\n    -webkit-box-ordinal-group: 11;\n    -webkit-order: 10;\n    -ms-flex-order: 10;\n    order: 10; }\n  .ios [tabsLayout=icon-left] .tab-button {\n    -webkit-box-orient: horizontal;\n    -webkit-box-direction: normal;\n    -webkit-flex-direction: row;\n    -ms-flex-direction: row;\n    flex-direction: row; }\n    .ios [tabsLayout=icon-left] .tab-button .tab-button-icon {\n      padding-right: 8px;\n      text-align: right; }\n  .ios [tabsLayout=icon-right] .tab-button {\n    -webkit-box-orient: horizontal;\n    -webkit-box-direction: normal;\n    -webkit-flex-direction: row;\n    -ms-flex-direction: row;\n    flex-direction: row; }\n    .ios [tabsLayout=icon-right] .tab-button .tab-button-icon {\n      -webkit-box-ordinal-group: 11;\n      -webkit-order: 10;\n      -ms-flex-order: 10;\n      order: 10;\n      padding-left: 8px;\n      text-align: left; }\n  .ios [tabsLayout=icon-hide] .tab-button-icon {\n    display: none; }\n  .ios [tabsLayout=title-hide] .tab-button-text {\n    display: none; }\n  .ios .tab-badge {\n    position: absolute;\n    top: 6%;\n    right: 4%;\n    right: calc(50% - 50px);\n    padding: 1px 6px;\n    height: auto;\n    font-size: 12px;\n    line-height: 16px; }\n  .ios .has-icon .tab-badge {\n    right: calc(50% - 30px); }\n  .ios [tabsLayout=icon-bottom] .tab-badge,\n  .ios [tabsLayout=icon-left] .tab-badge,\n  .ios [tabsLayout=icon-right] .tab-badge {\n    right: calc(50% - 50px); }\n  .ios ion-tabbar {\n    -webkit-box-pack: center;\n    -webkit-justify-content: center;\n    -ms-flex-pack: center;\n    justify-content: center;\n    border-top: 1px solid #b2b2b2;\n    background: #f8f8f8; }\n  .ios ion-tabs[tabsPlacement=top] ion-tabbar {\n    border-top: 0;\n    border-bottom: 1px solid #b2b2b2; }\n  .ios .tab-button {\n    padding: 0 2px;\n    max-width: 240px;\n    min-height: 49px;\n    color: #8c8c8c; }\n  .ios .tab-button:hover:not(.disable-hover),\n  .ios .tab-button[aria-selected=true] {\n    color: #327eff; }\n  .ios .tab-button-text {\n    margin-top: 0;\n    margin-bottom: 0;\n    min-height: 11px;\n    font-size: 10px; }\n  .ios .has-title-only .tab-button-text {\n    font-size: 12px; }\n  .ios .tab-button-icon {\n    min-width: 35px;\n    height: 30px;\n    font-size: 30px; }\n    .ios .tab-button-icon::before {\n      vertical-align: top; }\n  .ios [tabsLayout=icon-right] .tab-button .tab-button-text,\n  .ios [tabsLayout=icon-left] .tab-button .tab-button-text {\n    font-size: 1.4rem;\n    line-height: 1.1; }\n  .ios [tabsLayout=icon-right] .tab-button ion-icon,\n  .ios [tabsLayout=icon-left] .tab-button ion-icon {\n    min-width: 24px;\n    height: 26px;\n    font-size: 24px; }\n  .ios [tabsLayout=icon-hide] .tab-button,\n  .ios .tab-button.has-title-only {\n    min-height: 41px; }\n    .ios [tabsLayout=icon-hide] .tab-button .tab-button-text,\n    .ios .tab-button.has-title-only .tab-button-text {\n      margin: 2px 0;\n      font-size: 1.4rem;\n      line-height: 1.1; }\n  .ios [tabsLayout=title-hide] .tab-button,\n  .ios .tab-button.icon-only {\n    min-height: 41px; }\n  .ios.hairlines ion-tabs ion-tabbar {\n    border-top-width: 0.55px; }\n  .ios.hairlines ion-tabs[tabsPlacement=\"top\"] ion-tabbar {\n    border-bottom-width: 0.55px; }\n  .ios .tabs-primary ion-tabbar {\n    border-color: #005efe;\n    background-color: #327eff; }\n    .ios .tabs-primary ion-tabbar .tab-button {\n      color: #fff; }\n    .ios .tabs-primary ion-tabbar .tab-button:hover:not(.disable-hover),\n    .ios .tabs-primary ion-tabbar .tab-button[aria-selected=true] {\n      color: #fff; }\n  .ios .tabs-secondary ion-tabbar {\n    border-color: #21b94e;\n    background-color: #32db64; }\n    .ios .tabs-secondary ion-tabbar .tab-button {\n      color: #fff; }\n    .ios .tabs-secondary ion-tabbar .tab-button:hover:not(.disable-hover),\n    .ios .tabs-secondary ion-tabbar .tab-button[aria-selected=true] {\n      color: #fff; }\n  .ios .tabs-danger ion-tabbar {\n    border-color: #f30d0d;\n    background-color: #f53d3d; }\n    .ios .tabs-danger ion-tabbar .tab-button {\n      color: #fff; }\n    .ios .tabs-danger ion-tabbar .tab-button:hover:not(.disable-hover),\n    .ios .tabs-danger ion-tabbar .tab-button[aria-selected=true] {\n      color: #fff; }\n  .ios .tabs-light ion-tabbar {\n    border-color: #dbdbdb;\n    background-color: #f4f4f4; }\n    .ios .tabs-light ion-tabbar .tab-button {\n      color: #000; }\n    .ios .tabs-light ion-tabbar .tab-button:hover:not(.disable-hover),\n    .ios .tabs-light ion-tabbar .tab-button[aria-selected=true] {\n      color: #000; }\n  .ios .tabs-dark ion-tabbar {\n    border-color: #090909;\n    background-color: #222; }\n    .ios .tabs-dark ion-tabbar .tab-button {\n      color: #fff; }\n    .ios .tabs-dark ion-tabbar .tab-button:hover:not(.disable-hover),\n    .ios .tabs-dark ion-tabbar .tab-button[aria-selected=true] {\n      color: #fff; }\n  .ios ion-toggle {\n    position: relative; }\n  .ios .toggle-icon {\n    position: relative;\n    display: block;\n    width: 51px;\n    height: 32px;\n    border-radius: 16px;\n    background-color: #e6e6e6;\n    -webkit-transition: background-color 300ms;\n    transition: background-color 300ms;\n    pointer-events: none; }\n  .ios .toggle-icon::before {\n    position: absolute;\n    top: 2px;\n    right: 2px;\n    bottom: 2px;\n    left: 2px;\n    border-radius: 16px;\n    background-color: #fff;\n    content: \"\";\n    -webkit-transform: scale3d(1, 1, 1);\n    transform: scale3d(1, 1, 1);\n    -webkit-transition: -webkit-transform 300ms;\n    transition: transform 300ms; }\n  .ios .toggle-inner {\n    position: absolute;\n    top: 2px;\n    left: 2px;\n    width: 28px;\n    height: 28px;\n    border-radius: 14px;\n    background-color: #fff;\n    box-shadow: 0 3px 12px rgba(0, 0, 0, 0.16), 0 3px 1px rgba(0, 0, 0, 0.1);\n    -webkit-transition: -webkit-transform 300ms, width 120ms ease-in-out 80ms, left 110ms ease-in-out 80ms;\n    transition: transform 300ms, width 120ms ease-in-out 80ms, left 110ms ease-in-out 80ms; }\n  .ios .toggle-checked {\n    background-color: #327eff; }\n  .ios .toggle-activated::before,\n  .ios .toggle-checked::before {\n    -webkit-transform: scale3d(0, 0, 0);\n    transform: scale3d(0, 0, 0); }\n  .ios .toggle-checked .toggle-inner {\n    -webkit-transform: translate3d(19px, 0, 0);\n    transform: translate3d(19px, 0, 0); }\n  .ios .toggle-activated.toggle-checked::before {\n    -webkit-transform: scale3d(0, 0, 0);\n    transform: scale3d(0, 0, 0); }\n  .ios .toggle-activated .toggle-inner {\n    width: 34px; }\n  .ios .toggle-activated.toggle-checked .toggle-inner {\n    left: -4px; }\n  .ios .toggle-disabled,\n  .ios .item-toggle-disabled ion-label {\n    opacity: 0.3;\n    pointer-events: none; }\n  .ios .toggle-disabled ion-radio {\n    opacity: 0.3; }\n  .ios .item ion-toggle {\n    margin: 0;\n    padding: 6px 8px 5px 16px; }\n    .ios .item ion-toggle[item-left] {\n      padding: 6px 16px 5px 0; }\n  .ios .toggle-primary .toggle-checked {\n    background-color: #327eff; }\n  .ios .toggle-secondary .toggle-checked {\n    background-color: #32db64; }\n  .ios .toggle-danger .toggle-checked {\n    background-color: #f53d3d; }\n  .ios .toggle-light .toggle-checked {\n    background-color: #f4f4f4; }\n  .ios .toggle-dark .toggle-checked {\n    background-color: #222; }\n  .ios ion-toast {\n    position: absolute;\n    top: 0;\n    left: 0;\n    z-index: 1000;\n    display: block;\n    width: 100%;\n    height: 100%;\n    pointer-events: none; }\n  .ios .toast-container {\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    pointer-events: auto; }\n  .ios .toast-button {\n    padding: 19px 16px 17px;\n    font-size: 1.5rem; }\n  .ios .toast-message {\n    -webkit-box-flex: 1;\n    -webkit-flex: 1;\n    -ms-flex: 1;\n    flex: 1; }\n  .ios .toast-wrapper {\n    position: absolute;\n    right: 10px;\n    left: 10px;\n    z-index: 10;\n    display: block;\n    margin: auto;\n    max-width: 700px;\n    border-radius: 0.65rem;\n    background: rgba(0, 0, 0, 0.9); }\n    .ios .toast-wrapper.toast-top {\n      top: 0;\n      -webkit-transform: translate3d(0, -100%, 0);\n      transform: translate3d(0, -100%, 0); }\n    .ios .toast-wrapper.toast-bottom {\n      bottom: 0;\n      -webkit-transform: translate3d(0, 100%, 0);\n      transform: translate3d(0, 100%, 0); }\n    .ios .toast-wrapper.toast-middle {\n      opacity: .01; }\n  .ios .toast-message {\n    padding: 1.5rem;\n    font-size: 1.4rem;\n    color: #fff; }\n  .ios .toolbar {\n    display: -webkit-box;\n    display: -webkit-flex;\n    display: -ms-flexbox;\n    display: flex;\n    overflow: hidden;\n    -webkit-box-orient: horizontal;\n    -webkit-box-direction: normal;\n    -webkit-flex-direction: row;\n    -ms-flex-direction: row;\n    flex-direction: row;\n    -webkit-box-align: center;\n    -webkit-align-items: center;\n    -ms-flex-align: center;\n    align-items: center;\n    -webkit-box-pack: justify;\n    -webkit-justify-content: space-between;\n    -ms-flex-pack: justify;\n    justify-content: space-between;\n    width: 100%; }\n  .ios .toolbar-background {\n    position: absolute;\n    top: 0;\n    left: 0;\n    z-index: -1;\n    width: 100%;\n    height: 100%;\n    border: 0;\n    -webkit-transform: translateZ(0);\n    transform: translateZ(0);\n    pointer-events: none; }\n  .ios ion-title {\n    display: -webkit-box;\n    display: -webkit-flex;\n    display: -ms-flexbox;\n    display: flex;\n    -webkit-box-flex: 1;\n    -webkit-flex: 1;\n    -ms-flex: 1;\n    flex: 1;\n    -webkit-box-align: center;\n    -webkit-align-items: center;\n    -ms-flex-align: center;\n    align-items: center;\n    -webkit-transform: translateZ(0);\n    transform: translateZ(0); }\n  .ios .toolbar-title {\n    display: block;\n    overflow: hidden;\n    width: 100%;\n    text-overflow: ellipsis;\n    white-space: nowrap; }\n  .ios ion-buttons {\n    display: block;\n    margin: 0 .2rem;\n    -webkit-transform: translateZ(0);\n    transform: translateZ(0);\n    pointer-events: none; }\n  .ios ion-buttons button,\n  .ios ion-buttons a,\n  .ios ion-buttons input,\n  .ios ion-buttons textarea,\n  .ios ion-buttons div {\n    pointer-events: auto; }\n  .ios .toolbar[transparent] .toolbar-background {\n    border-color: transparent;\n    background: transparent; }\n  .ios ion-buttons,\n  .ios .bar-button-menutoggle {\n    z-index: 99;\n    -webkit-transform: translateZ(0);\n    transform: translateZ(0); }\n  .ios ion-navbar.toolbar {\n    display: -webkit-box;\n    display: -webkit-flex;\n    display: -ms-flexbox;\n    display: flex;\n    opacity: 0;\n    -webkit-transform: translateZ(0);\n    transform: translateZ(0); }\n    .ios ion-navbar.toolbar.show-navbar {\n      opacity: 1; }\n  .ios .bar-button {\n    -webkit-user-select: none;\n    -moz-user-select: none;\n    -ms-user-select: none;\n    user-select: none;\n    -webkit-appearance: none;\n    -moz-appearance: none;\n    position: relative;\n    display: inline-block;\n    margin: 0;\n    padding: 0;\n    line-height: 1;\n    text-align: center;\n    text-overflow: ellipsis;\n    text-transform: none;\n    white-space: nowrap;\n    cursor: pointer;\n    vertical-align: top;\n    vertical-align: -webkit-baseline-middle; }\n  .ios .bar-button::after {\n    position: absolute;\n    top: -7px;\n    right: -2px;\n    bottom: -6px;\n    left: -2px;\n    content: \"\"; }\n  .ios .bar-button-menutoggle {\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  .ios .back-button {\n    display: none; }\n    .ios .back-button.show-back-button {\n      display: inline-block; }\n  .ios .back-button-text {\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  .ios .toolbar {\n    padding: 4px;\n    min-height: 44px; }\n  .ios .toolbar-background {\n    border-top-width: 1px;\n    border-bottom-width: 1px;\n    border-style: solid;\n    border-color: #b2b2b2;\n    background: #f8f8f8; }\n  .ios.hairlines .toolbar-background {\n    border-top-width: 0.55px;\n    border-bottom-width: 0.55px; }\n  .ios ion-header .toolbar:first-child .toolbar-background,\n  .ios ion-menu > .toolbar:first-child .toolbar-background,\n  .ios .toolbar[no-border-top] .toolbar-background {\n    border-top-width: 0; }\n  .ios ion-footer .toolbar:last-child .toolbar-background,\n  .ios .toolbar[no-border-bottom] .toolbar-background {\n    border-bottom-width: 0; }\n  .ios .toolbar[no-border] .toolbar-background {\n    border-top-width: 0;\n    border-bottom-width: 0; }\n  .ios .toolbar-content {\n    -webkit-box-flex: 1;\n    -webkit-flex: 1;\n    -ms-flex: 1;\n    flex: 1;\n    -webkit-box-ordinal-group: 5;\n    -webkit-order: 4;\n    -ms-flex-order: 4;\n    order: 4;\n    min-width: 0; }\n  .ios .toolbar-title {\n    font-size: 1.7rem;\n    font-weight: 600;\n    text-align: center;\n    color: #000;\n    pointer-events: auto; }\n  .ios ion-title {\n    position: absolute;\n    top: 0;\n    left: 0;\n    padding: 0 90px 1px;\n    width: 100%;\n    height: 100%;\n    -webkit-transform: translateZ(0);\n    transform: translateZ(0);\n    pointer-events: none; }\n  .ios ion-buttons {\n    -webkit-box-ordinal-group: 4;\n    -webkit-order: 3;\n    -ms-flex-order: 3;\n    order: 3;\n    -webkit-transform: translateZ(0);\n    transform: translateZ(0); }\n  .ios ion-buttons[left] {\n    -webkit-box-ordinal-group: 3;\n    -webkit-order: 2;\n    -ms-flex-order: 2;\n    order: 2; }\n  .ios ion-buttons[end] {\n    -webkit-box-ordinal-group: 6;\n    -webkit-order: 5;\n    -ms-flex-order: 5;\n    order: 5;\n    text-align: right; }\n  .ios ion-buttons[right] {\n    -webkit-box-ordinal-group: 7;\n    -webkit-order: 6;\n    -ms-flex-order: 6;\n    order: 6;\n    text-align: right; }\n  .ios .bar-button {\n    padding: 0 5px;\n    height: 32px;\n    border: 0;\n    border-radius: 4px;\n    font-size: 1.7rem; }\n  .ios .bar-button-outline {\n    border-width: 1px;\n    border-style: solid;\n    border-color: #327eff;\n    color: #327eff;\n    background-color: transparent; }\n    .ios .bar-button-outline:hover:not(.disable-hover) {\n      opacity: .4; }\n    .ios .bar-button-outline.activated {\n      color: #fff;\n      background-color: #327eff; }\n  .ios .bar-button-solid {\n    color: #fff;\n    background-color: #327eff; }\n    .ios .bar-button-solid:hover:not(.disable-hover) {\n      color: #fff;\n      opacity: .4; }\n    .ios .bar-button-solid.activated {\n      color: #fff;\n      background-color: #2e74eb;\n      opacity: .4; }\n  .ios .bar-button-icon-left ion-icon {\n    padding-right: .3em;\n    font-size: 1.4em;\n    line-height: .67;\n    pointer-events: none; }\n  .ios .bar-button-icon-right ion-icon {\n    padding-left: .4em;\n    font-size: 1.4em;\n    line-height: .67;\n    pointer-events: none; }\n  .ios .bar-button[icon-only] {\n    padding: 0;\n    min-width: .9em; }\n    .ios .bar-button[icon-only] ion-icon {\n      padding: 0 .1em;\n      font-size: 1.8em;\n      line-height: .67;\n      pointer-events: none; }\n  .ios .back-button {\n    overflow: visible;\n    -webkit-box-ordinal-group: 1;\n    -webkit-order: 0;\n    -ms-flex-order: 0;\n    order: 0;\n    margin: 0;\n    min-height: 3.2rem;\n    line-height: 1;\n    -webkit-transform: translateZ(0);\n    transform: translateZ(0); }\n  .ios .back-button-icon {\n    display: inherit;\n    margin: 0;\n    margin-top: -1px;\n    min-width: 18px;\n    font-size: 3.4rem; }\n  .ios .back-button-text {\n    letter-spacing: -.01em; }\n  .ios .bar-button-menutoggle {\n    -webkit-box-ordinal-group: 2;\n    -webkit-order: 1;\n    -ms-flex-order: 1;\n    order: 1;\n    margin: 0 6px;\n    padding: 0;\n    min-width: 36px; }\n    .ios .bar-button-menutoggle ion-icon {\n      padding: 0 6px;\n      font-size: 2.8rem; }\n  .ios .bar-button-menutoggle[end],\n  .ios .bar-button-menutoggle[right] {\n    -webkit-box-ordinal-group: 8;\n    -webkit-order: 7;\n    -ms-flex-order: 7;\n    order: 7; }\n  .ios .bar-button-default,\n  .ios .bar-button-clear-default {\n    color: #327eff;\n    background-color: transparent; }\n    .ios .bar-button-default:hover:not(.disable-hover),\n    .ios .bar-button-clear-default:hover:not(.disable-hover) {\n      color: #327eff; }\n    .ios .bar-button-default.activated,\n    .ios .bar-button-clear-default.activated {\n      opacity: .4; }\n  .ios .bar-button-clear,\n  .ios .bar-button-clear-clear {\n    color: #327eff;\n    background-color: transparent; }\n    .ios .bar-button-clear:hover:not(.disable-hover),\n    .ios .bar-button-clear-clear:hover:not(.disable-hover) {\n      color: #327eff; }\n    .ios .bar-button-clear.activated,\n    .ios .bar-button-clear-clear.activated {\n      opacity: .4; }\n  .ios .toolbar-primary .toolbar-background {\n    border-color: #005efe;\n    background: #327eff; }\n  .ios .toolbar-primary .toolbar-title,\n  .ios .toolbar-primary .bar-button-clear,\n  .ios .toolbar-primary .bar-button-default {\n    color: #fff; }\n  .ios .bar-button-primary,\n  .ios .bar-button-clear-primary {\n    color: #327eff;\n    background-color: transparent; }\n    .ios .bar-button-primary:hover:not(.disable-hover),\n    .ios .bar-button-clear-primary:hover:not(.disable-hover) {\n      color: #327eff; }\n    .ios .bar-button-primary.activated,\n    .ios .bar-button-clear-primary.activated {\n      opacity: .4; }\n  .ios .bar-button-outline-primary {\n    border-color: #327eff;\n    color: #327eff;\n    background-color: transparent; }\n    .ios .bar-button-outline-primary.activated {\n      color: #fff;\n      background-color: #327eff; }\n  .ios .bar-button-solid-primary {\n    color: #fff;\n    background-color: #327eff; }\n    .ios .bar-button-solid-primary.activated {\n      color: #fff;\n      background-color: #2e74eb; }\n  .ios .toolbar-secondary .toolbar-background {\n    border-color: #21b94e;\n    background: #32db64; }\n  .ios .toolbar-secondary .toolbar-title,\n  .ios .toolbar-secondary .bar-button-clear,\n  .ios .toolbar-secondary .bar-button-default {\n    color: #fff; }\n  .ios .bar-button-secondary,\n  .ios .bar-button-clear-secondary {\n    color: #32db64;\n    background-color: transparent; }\n    .ios .bar-button-secondary:hover:not(.disable-hover),\n    .ios .bar-button-clear-secondary:hover:not(.disable-hover) {\n      color: #32db64; }\n    .ios .bar-button-secondary.activated,\n    .ios .bar-button-clear-secondary.activated {\n      opacity: .4; }\n  .ios .bar-button-outline-secondary {\n    border-color: #32db64;\n    color: #32db64;\n    background-color: transparent; }\n    .ios .bar-button-outline-secondary.activated {\n      color: #fff;\n      background-color: #32db64; }\n  .ios .bar-button-solid-secondary {\n    color: #fff;\n    background-color: #32db64; }\n    .ios .bar-button-solid-secondary.activated {\n      color: #fff;\n      background-color: #2ec95c; }\n  .ios .toolbar-danger .toolbar-background {\n    border-color: #f30d0d;\n    background: #f53d3d; }\n  .ios .toolbar-danger .toolbar-title,\n  .ios .toolbar-danger .bar-button-clear,\n  .ios .toolbar-danger .bar-button-default {\n    color: #fff; }\n  .ios .bar-button-danger,\n  .ios .bar-button-clear-danger {\n    color: #f53d3d;\n    background-color: transparent; }\n    .ios .bar-button-danger:hover:not(.disable-hover),\n    .ios .bar-button-clear-danger:hover:not(.disable-hover) {\n      color: #f53d3d; }\n    .ios .bar-button-danger.activated,\n    .ios .bar-button-clear-danger.activated {\n      opacity: .4; }\n  .ios .bar-button-outline-danger {\n    border-color: #f53d3d;\n    color: #f53d3d;\n    background-color: transparent; }\n    .ios .bar-button-outline-danger.activated {\n      color: #fff;\n      background-color: #f53d3d; }\n  .ios .bar-button-solid-danger {\n    color: #fff;\n    background-color: #f53d3d; }\n    .ios .bar-button-solid-danger.activated {\n      color: #fff;\n      background-color: #e13838; }\n  .ios .toolbar-light .toolbar-background {\n    border-color: #dbdbdb;\n    background: #f4f4f4; }\n  .ios .toolbar-light .toolbar-title,\n  .ios .toolbar-light .bar-button-clear,\n  .ios .toolbar-light .bar-button-default {\n    color: #000; }\n  .ios .bar-button-light,\n  .ios .bar-button-clear-light {\n    color: #f4f4f4;\n    background-color: transparent; }\n    .ios .bar-button-light:hover:not(.disable-hover),\n    .ios .bar-button-clear-light:hover:not(.disable-hover) {\n      color: #f4f4f4; }\n    .ios .bar-button-light.activated,\n    .ios .bar-button-clear-light.activated {\n      opacity: .4; }\n  .ios .bar-button-outline-light {\n    border-color: #f4f4f4;\n    color: #f4f4f4;\n    background-color: transparent; }\n    .ios .bar-button-outline-light.activated {\n      color: #000;\n      background-color: #f4f4f4; }\n  .ios .bar-button-solid-light {\n    color: #000;\n    background-color: #f4f4f4; }\n    .ios .bar-button-solid-light.activated {\n      color: #000;\n      background-color: #e0e0e0; }\n  .ios .toolbar-dark .toolbar-background {\n    border-color: #090909;\n    background: #222; }\n  .ios .toolbar-dark .toolbar-title,\n  .ios .toolbar-dark .bar-button-clear,\n  .ios .toolbar-dark .bar-button-default {\n    color: #fff; }\n  .ios .bar-button-dark,\n  .ios .bar-button-clear-dark {\n    color: #222;\n    background-color: transparent; }\n    .ios .bar-button-dark:hover:not(.disable-hover),\n    .ios .bar-button-clear-dark:hover:not(.disable-hover) {\n      color: #222; }\n    .ios .bar-button-dark.activated,\n    .ios .bar-button-clear-dark.activated {\n      opacity: .4; }\n  .ios .bar-button-outline-dark {\n    border-color: #222;\n    color: #222;\n    background-color: transparent; }\n    .ios .bar-button-outline-dark.activated {\n      color: #fff;\n      background-color: #222; }\n  .ios .bar-button-solid-dark {\n    color: #fff;\n    background-color: #222; }\n    .ios .bar-button-solid-dark.activated {\n      color: #fff;\n      background-color: #343434; }\n  .ios html {\n    font-size: 62.5%; }\n  .ios a {\n    background-color: transparent; }\n  .ios .enable-hover a:hover {\n    opacity: .7; }\n  .ios h1,\n  .ios h2,\n  .ios h3,\n  .ios h4,\n  .ios h5,\n  .ios h6 {\n    margin-top: 1.6rem;\n    margin-bottom: 1rem;\n    font-weight: 500;\n    line-height: 1.2; }\n  .ios [padding] h1:first-child,\n  .ios [padding] h2:first-child,\n  .ios [padding] h3:first-child,\n  .ios [padding] h4:first-child,\n  .ios [padding] h5:first-child,\n  .ios [padding] h6:first-child {\n    margin-top: -.3rem; }\n  .ios h1 + h2,\n  .ios h1 + h3,\n  .ios h2 + h3 {\n    margin-top: -.3rem; }\n  .ios h1 {\n    margin-top: 2rem;\n    font-size: 2.6rem; }\n  .ios h2 {\n    margin-top: 1.8rem;\n    font-size: 2.4rem; }\n  .ios h3 {\n    font-size: 2.2rem; }\n  .ios h4 {\n    font-size: 2rem; }\n  .ios h5 {\n    font-size: 1.8rem; }\n  .ios h6 {\n    font-size: 1.6rem; }\n  .ios small {\n    font-size: 75%; }\n  .ios sub,\n  .ios sup {\n    position: relative;\n    font-size: 75%;\n    line-height: 0;\n    vertical-align: baseline; }\n  .ios sup {\n    top: -.5em; }\n  .ios sub {\n    bottom: -.25em; }\n  .ios [text-left] {\n    text-align: left; }\n  .ios [text-center] {\n    text-align: center; }\n  .ios [text-right] {\n    text-align: right; }\n  .ios [text-justify] {\n    text-align: justify; }\n  .ios [text-nowrap] {\n    white-space: nowrap; }\n  .ios [text-uppercase] {\n    text-transform: uppercase; }\n  .ios [text-lowercase] {\n    text-transform: lowercase; }\n  .ios [text-capitalize] {\n    text-transform: capitalize; }\n  .ios p {\n    color: #000; }\n  .ios a {\n    color: #327eff; }\n  .ios .text-primary {\n    color: #327eff; }\n  .ios .text-secondary {\n    color: #32db64; }\n  .ios .text-danger {\n    color: #f53d3d; }\n  .ios .text-light {\n    color: #f4f4f4; }\n  .ios .text-dark {\n    color: #222; }\n  .ios ion-nav > ion-page > .toolbar.statusbar-padding:first-child,\n  .ios ion-nav > ion-page > ion-header > .toolbar.statusbar-padding:first-child,\n  .ios ion-tab > ion-page > ion-header > .toolbar.statusbar-padding:first-child,\n  .ios ion-tabs > ion-page.tab-subpage > ion-header > .toolbar.statusbar-padding:first-child,\n  .ios ion-menu > .menu-inner > .toolbar.statusbar-padding:first-child,\n  .ios ion-menu > .menu-inner > ion-header > .toolbar.statusbar-padding:first-child {\n    padding-top: 20px;\n    height: calc(44px + 20px);\n    min-height: calc(44px + 20px); }\n  .ios ion-nav > ion-page > ion-content.statusbar-padding:first-child scroll-content,\n  .ios ion-nav > ion-page > ion-header > ion-content.statusbar-padding:first-child scroll-content,\n  .ios ion-tab > ion-page > ion-header > ion-content.statusbar-padding:first-child scroll-content,\n  .ios ion-tabs > ion-page.tab-subpage > ion-header > ion-content.statusbar-padding:first-child scroll-content,\n  .ios ion-menu > .menu-inner > ion-content.statusbar-padding:first-child scroll-content,\n  .ios ion-menu > .menu-inner > ion-header > ion-content.statusbar-padding:first-child scroll-content {\n    padding-top: 20px; }\n  .ios ion-nav > ion-page > ion-content.statusbar-padding:first-child[padding] scroll-content,\n  .ios ion-nav > ion-page > ion-content.statusbar-padding:first-child[padding-top] scroll-content,\n  .ios ion-nav > ion-page > ion-header > ion-content.statusbar-padding:first-child[padding] scroll-content,\n  .ios ion-nav > ion-page > ion-header > ion-content.statusbar-padding:first-child[padding-top] scroll-content,\n  .ios ion-tab > ion-page > ion-header > ion-content.statusbar-padding:first-child[padding] scroll-content,\n  .ios ion-tab > ion-page > ion-header > ion-content.statusbar-padding:first-child[padding-top] scroll-content,\n  .ios ion-tabs > ion-page.tab-subpage > ion-header > ion-content.statusbar-padding:first-child[padding] scroll-content,\n  .ios ion-tabs > ion-page.tab-subpage > ion-header > ion-content.statusbar-padding:first-child[padding-top] scroll-content,\n  .ios ion-menu > .menu-inner > ion-content.statusbar-padding:first-child[padding] scroll-content,\n  .ios ion-menu > .menu-inner > ion-content.statusbar-padding:first-child[padding-top] scroll-content,\n  .ios ion-menu > .menu-inner > ion-header > ion-content.statusbar-padding:first-child[padding] scroll-content,\n  .ios ion-menu > .menu-inner > ion-header > ion-content.statusbar-padding:first-child[padding-top] scroll-content {\n    padding-top: calc(16px + 20px); }\n  .ios ion-nav > ion-page > .toolbar.statusbar-padding:first-child ion-segment,\n  .ios ion-nav > ion-page > .toolbar.statusbar-padding:first-child ion-title,\n  .ios ion-nav > ion-page > ion-header > .toolbar.statusbar-padding:first-child ion-segment,\n  .ios ion-nav > ion-page > ion-header > .toolbar.statusbar-padding:first-child ion-title,\n  .ios ion-tab > ion-page > ion-header > .toolbar.statusbar-padding:first-child ion-segment,\n  .ios ion-tab > ion-page > ion-header > .toolbar.statusbar-padding:first-child ion-title,\n  .ios ion-tabs > ion-page.tab-subpage > ion-header > .toolbar.statusbar-padding:first-child ion-segment,\n  .ios ion-tabs > ion-page.tab-subpage > ion-header > .toolbar.statusbar-padding:first-child ion-title,\n  .ios ion-menu > .menu-inner > .toolbar.statusbar-padding:first-child ion-segment,\n  .ios ion-menu > .menu-inner > .toolbar.statusbar-padding:first-child ion-title,\n  .ios ion-menu > .menu-inner > ion-header > .toolbar.statusbar-padding:first-child ion-segment,\n  .ios ion-menu > .menu-inner > ion-header > .toolbar.statusbar-padding:first-child ion-title {\n    padding-top: 20px;\n    height: calc(44px + 20px);\n    min-height: calc(44px + 20px); }\n  @media only screen and (max-width: 767px) {\n    .ios .modal-wrapper > ion-page > ion-header > .toolbar.statusbar-padding:first-child {\n      padding-top: 20px;\n      height: calc(44px + 20px);\n      min-height: calc(44px + 20px); }\n    .ios .modal-wrapper > ion-page > ion-header > ion-content.statusbar-padding:first-child scroll-content {\n      padding-top: 20px; }\n    .ios .modal-wrapper > ion-page > ion-header > ion-content.statusbar-padding:first-child[padding] scroll-content,\n    .ios .modal-wrapper > ion-page > ion-header > ion-content.statusbar-padding:first-child[padding-top] scroll-content {\n      padding-top: calc(16px + 20px); }\n    .ios .modal-wrapper > ion-page > ion-header > .toolbar.statusbar-padding:first-child ion-segment,\n    .ios .modal-wrapper > ion-page > ion-header > .toolbar.statusbar-padding:first-child ion-title {\n      padding-top: 20px;\n      height: calc(44px + 20px);\n      min-height: calc(44px + 20px); } }\n\n.md {\n  font-family: \"Roboto\", \"Helvetica Neue\", sans-serif;\n  font-size: 1.4rem;\n  background-color: #fff; }\n  .md ion-content {\n    color: #000; }\n  .md hr {\n    background-color: rgba(0, 0, 0, 0.08); }\n  .md ion-action-sheet {\n    position: absolute;\n    top: 0;\n    left: 0;\n    z-index: 1000;\n    display: block;\n    width: 100%;\n    height: 100%; }\n  .md .action-sheet-wrapper {\n    position: absolute;\n    right: 0;\n    bottom: 0;\n    left: 0;\n    z-index: 10;\n    display: block;\n    margin: auto;\n    width: 100%;\n    max-width: 500px;\n    -webkit-transform: translate3d(0, 100%, 0);\n    transform: translate3d(0, 100%, 0); }\n  .md .action-sheet-button {\n    width: 100%; }\n  .md .action-sheet-title {\n    padding: 19px 16px 17px;\n    font-size: 1.6rem;\n    text-align: left;\n    color: #757575; }\n  .md .action-sheet-button {\n    position: relative;\n    overflow: hidden;\n    padding: 0 16px;\n    min-height: 4.8rem;\n    font-size: 1.6rem;\n    text-align: left;\n    color: #222;\n    background: transparent; }\n    .md .action-sheet-button.activated {\n      background: #f1f1f1; }\n  .md .action-sheet-icon {\n    margin: 0 28px 0 0;\n    min-width: 24px;\n    font-size: 2.4rem;\n    text-align: center;\n    vertical-align: middle; }\n  .md .action-sheet-group {\n    overflow: hidden;\n    background: #fafafa; }\n    .md .action-sheet-group:last-child .action-sheet-button {\n      margin-bottom: 8px; }\n    .md .action-sheet-group .button-inner {\n      -webkit-box-pack: start;\n      -webkit-justify-content: flex-start;\n      -ms-flex-pack: start;\n      justify-content: flex-start; }\n  .md .action-sheet-selected {\n    font-weight: bold; }\n  .md ion-alert {\n    position: absolute;\n    top: 0;\n    right: 0;\n    bottom: 0;\n    left: 0;\n    z-index: 1000;\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    -webkit-box-pack: center;\n    -webkit-justify-content: center;\n    -ms-flex-pack: center;\n    justify-content: center; }\n    .md ion-alert input {\n      width: 100%; }\n  .md .alert-wrapper {\n    z-index: 10;\n    display: -webkit-box;\n    display: -webkit-flex;\n    display: -ms-flexbox;\n    display: flex;\n    -webkit-box-orient: vertical;\n    -webkit-box-direction: normal;\n    -webkit-flex-direction: column;\n    -ms-flex-direction: column;\n    flex-direction: column;\n    min-width: 250px;\n    max-height: 90%;\n    opacity: 0; }\n  .md .alert-title {\n    margin: 0;\n    padding: 0; }\n  .md .alert-sub-title {\n    margin: 5px 0 0;\n    padding: 0;\n    font-weight: normal; }\n  .md .alert-message {\n    overflow-y: scroll;\n    -webkit-overflow-scrolling: touch; }\n  .md .alert-input {\n    padding: 10px 0;\n    border: 0;\n    background: inherit; }\n    .md .alert-input::-moz-placeholder {\n      color: #999; }\n    .md .alert-input:-ms-input-placeholder {\n      color: #999; }\n    .md .alert-input::-webkit-input-placeholder {\n      text-indent: 0;\n      color: #999; }\n  .md .alert-button-group {\n    display: -webkit-box;\n    display: -webkit-flex;\n    display: -ms-flexbox;\n    display: flex;\n    -webkit-box-orient: horizontal;\n    -webkit-box-direction: normal;\n    -webkit-flex-direction: row;\n    -ms-flex-direction: row;\n    flex-direction: row; }\n    .md .alert-button-group.vertical {\n      -webkit-box-orient: vertical;\n      -webkit-box-direction: normal;\n      -webkit-flex-direction: column;\n      -ms-flex-direction: column;\n      flex-direction: column;\n      -webkit-flex-wrap: nowrap;\n      -ms-flex-wrap: nowrap;\n      flex-wrap: nowrap; }\n  .md .alert-button {\n    z-index: 0;\n    display: block;\n    margin: 0;\n    font-size: 14px;\n    line-height: 20px; }\n  .md .alert-tappable {\n    margin: 0;\n    padding: 0;\n    width: 100%;\n    font-size: inherit;\n    line-height: initial;\n    text-align: left;\n    background: transparent;\n    -webkit-appearance: none; }\n  .md .alert-wrapper {\n    max-width: 280px;\n    border-radius: 2px;\n    background-color: #fafafa;\n    box-shadow: 0 16px 20px rgba(0, 0, 0, 0.4); }\n  .md .alert-head {\n    padding: 24px 24px 20px 24px;\n    text-align: left; }\n  .md .alert-title {\n    font-size: 22px; }\n  .md .alert-sub-title {\n    font-size: 16px; }\n  .md .alert-message,\n  .md .alert-input-group {\n    padding: 0 24px 24px 24px;\n    color: rgba(0, 0, 0, 0.5); }\n  .md .alert-message {\n    max-height: 240px;\n    font-size: 15px; }\n    .md .alert-message:empty {\n      padding: 0; }\n  .md .alert-input {\n    margin: 5px 0 5px 0;\n    border-bottom: 1px solid #dedede;\n    color: #000; }\n    .md .alert-input:focus {\n      margin-bottom: 4px;\n      border-bottom: 2px solid #327eff; }\n  .md .alert-radio-group,\n  .md .alert-checkbox-group {\n    position: relative;\n    overflow: auto;\n    max-height: 240px;\n    border-top: 1px solid #dedede;\n    border-bottom: 1px solid #dedede; }\n  .md .alert-tappable {\n    position: relative;\n    display: -webkit-box;\n    display: -webkit-flex;\n    display: -ms-flexbox;\n    display: flex;\n    overflow: hidden;\n    min-height: 4.4rem; }\n  .md .alert-radio-label {\n    overflow: hidden;\n    -webkit-box-flex: 1;\n    -webkit-flex: 1;\n    -ms-flex: 1;\n    flex: 1;\n    padding: 13px 26px;\n    text-overflow: ellipsis;\n    white-space: nowrap; }\n  .md .alert-radio-icon {\n    position: relative;\n    top: 0;\n    left: 13px;\n    display: block;\n    width: 16px;\n    height: 16px;\n    border-width: 2px;\n    border-style: solid;\n    border-radius: 50%;\n    border-color: #787878; }\n  .md .alert-radio-inner {\n    position: absolute;\n    top: 2px;\n    left: 2px;\n    width: 8px;\n    height: 8px;\n    border-radius: 50%;\n    background-color: #327eff;\n    -webkit-transform: scale3d(0, 0, 0);\n    transform: scale3d(0, 0, 0);\n    -webkit-transition: -webkit-transform 280ms cubic-bezier(0.4, 0, 0.2, 1);\n    transition: transform 280ms cubic-bezier(0.4, 0, 0.2, 1); }\n  .md .alert-radio[aria-checked=true] .alert-radio-label {\n    color: #327eff; }\n  .md .alert-radio[aria-checked=true] .alert-radio-icon {\n    border-color: #327eff; }\n  .md .alert-radio[aria-checked=true] .alert-radio-inner {\n    -webkit-transform: scale3d(1, 1, 1);\n    transform: scale3d(1, 1, 1); }\n  .md .alert-checkbox-label {\n    overflow: hidden;\n    -webkit-box-flex: 1;\n    -webkit-flex: 1;\n    -ms-flex: 1;\n    flex: 1;\n    padding: 13px 26px;\n    text-overflow: ellipsis;\n    white-space: nowrap; }\n  .md .alert-checkbox[aria-checked=true] .alert-checkbox-label {\n    color: initial; }\n  .md .alert-checkbox-icon {\n    position: relative;\n    top: 0;\n    left: 13px;\n    width: 16px;\n    height: 16px;\n    border-width: 2px;\n    border-style: solid;\n    border-radius: 2px;\n    border-color: #787878; }\n  .md .alert-checkbox[aria-checked=true] .alert-checkbox-icon {\n    border-color: #327eff;\n    background-color: #327eff; }\n  .md .alert-checkbox[aria-checked=true] .alert-checkbox-inner {\n    position: absolute;\n    top: 0;\n    left: 3px;\n    width: 6px;\n    height: 10px;\n    border-width: 2px;\n    border-top-width: 0;\n    border-left-width: 0;\n    border-style: solid;\n    border-color: #fff;\n    -webkit-transform: rotate(45deg);\n    transform: rotate(45deg); }\n  .md .alert-button-group {\n    -webkit-flex-wrap: wrap-reverse;\n    -ms-flex-wrap: wrap-reverse;\n    flex-wrap: wrap-reverse;\n    -webkit-box-pack: end;\n    -webkit-justify-content: flex-end;\n    -ms-flex-pack: end;\n    justify-content: flex-end;\n    padding: 8px 8px 8px 24px; }\n  .md .alert-button {\n    position: relative;\n    overflow: hidden;\n    margin: 0 8px 0 0;\n    padding: 10px;\n    border-radius: 2px;\n    font-weight: 500;\n    text-align: right;\n    text-transform: uppercase;\n    color: #327eff;\n    background-color: transparent; }\n    .md .alert-button.activated {\n      background-color: rgba(158, 158, 158, 0.2); }\n    .md .alert-button .button-inner {\n      -webkit-box-pack: end;\n      -webkit-justify-content: flex-end;\n      -ms-flex-pack: end;\n      justify-content: flex-end; }\n  .md ion-badge {\n    display: inline-block;\n    padding: 3px 8px;\n    min-width: 10px;\n    font-size: 1.3rem;\n    font-weight: bold;\n    line-height: 1;\n    text-align: center;\n    white-space: nowrap;\n    vertical-align: baseline; }\n    .md ion-badge:empty {\n      display: none; }\n  .md ion-badge {\n    border-radius: 4px;\n    color: #fff;\n    background-color: #327eff; }\n  .md .badge-primary {\n    color: #fff;\n    background-color: #327eff; }\n  .md .badge-secondary {\n    color: #fff;\n    background-color: #32db64; }\n  .md .badge-danger {\n    color: #fff;\n    background-color: #f53d3d; }\n  .md .badge-light {\n    color: #000;\n    background-color: #f4f4f4; }\n  .md .badge-dark {\n    color: #fff;\n    background-color: #222; }\n  .md .button {\n    -webkit-user-select: none;\n    -moz-user-select: none;\n    -ms-user-select: none;\n    user-select: none;\n    -webkit-appearance: none;\n    -moz-appearance: none;\n    position: relative;\n    z-index: 0;\n    display: inline-block;\n    overflow: hidden;\n    text-align: center;\n    text-overflow: ellipsis;\n    text-transform: none;\n    white-space: nowrap;\n    cursor: pointer;\n    vertical-align: top;\n    vertical-align: -webkit-baseline-middle;\n    -webkit-transition: background-color, opacity 100ms linear;\n    transition: background-color, opacity 100ms linear;\n    -webkit-font-kerning: none;\n    font-kerning: none; }\n  .md .button-inner {\n    display: -webkit-box;\n    display: -webkit-flex;\n    display: -ms-flexbox;\n    display: flex;\n    -webkit-flex-flow: row nowrap;\n    -ms-flex-flow: row nowrap;\n    flex-flow: row nowrap;\n    -webkit-flex-shrink: 0;\n    -ms-flex-negative: 0;\n    flex-shrink: 0;\n    -webkit-box-align: center;\n    -webkit-align-items: center;\n    -ms-flex-align: center;\n    align-items: center;\n    -webkit-box-pack: center;\n    -webkit-justify-content: center;\n    -ms-flex-pack: center;\n    justify-content: center;\n    width: 100%;\n    height: 100%; }\n  .md [ion-button] {\n    text-decoration: none; }\n  .md a[disabled],\n  .md button[disabled],\n  .md [ion-button][disabled] {\n    cursor: default;\n    opacity: .4;\n    pointer-events: none; }\n  .md .button-block {\n    display: block;\n    clear: both;\n    width: 100%; }\n    .md .button-block::after {\n      clear: both; }\n  .md .button-full {\n    display: block;\n    width: 100%; }\n  .md .button-full.button-outline {\n    border-right-width: 0;\n    border-left-width: 0;\n    border-radius: 0; }\n  .md .button {\n    margin: 0.4rem 0.2rem;\n    padding: 0 1.1em;\n    height: 3.6rem;\n    border-radius: 2px;\n    font-size: 1.4rem;\n    font-weight: 500;\n    text-transform: uppercase;\n    color: #fff;\n    background-color: #327eff;\n    box-shadow: 0 2px 2px 0 rgba(0, 0, 0, 0.14), 0 3px 1px -2px rgba(0, 0, 0, 0.2), 0 1px 5px 0 rgba(0, 0, 0, 0.12);\n    -webkit-transition: box-shadow 300ms cubic-bezier(0.4, 0, 0.2, 1), background-color 300ms cubic-bezier(0.4, 0, 0.2, 1), color 300ms cubic-bezier(0.4, 0, 0.2, 1);\n    transition: box-shadow 300ms cubic-bezier(0.4, 0, 0.2, 1), background-color 300ms cubic-bezier(0.4, 0, 0.2, 1), color 300ms cubic-bezier(0.4, 0, 0.2, 1); }\n    .md .button:hover:not(.disable-hover) {\n      background-color: #327eff; }\n    .md .button.activated {\n      background-color: #2e74eb;\n      box-shadow: 0 3px 5px rgba(0, 0, 0, 0.14), 0 3px 5px rgba(0, 0, 0, 0.21); }\n    .md .button ion-button-effect {\n      background-color: #fff; }\n  .md .button-large {\n    padding: 0 1em;\n    height: 2.8em;\n    font-size: 2rem; }\n  .md .button-small {\n    padding: 0 0.9em;\n    height: 2.1em;\n    font-size: 1.3rem; }\n    .md .button-small[icon-only] ion-icon {\n      font-size: 1.4em; }\n  .md .button-block {\n    margin-right: 0;\n    margin-left: 0; }\n  .md .button-full {\n    margin-right: 0;\n    margin-left: 0;\n    border-right-width: 0;\n    border-left-width: 0;\n    border-radius: 0; }\n  .md .button-outline {\n    border-width: 1px;\n    border-style: solid;\n    border-color: #327eff;\n    color: #327eff;\n    background-color: transparent;\n    box-shadow: none; }\n    .md .button-outline:hover:not(.disable-hover) {\n      background-color: rgba(158, 158, 158, 0.1); }\n    .md .button-outline.activated {\n      background-color: transparent;\n      box-shadow: none;\n      opacity: 1; }\n    .md .button-outline ion-button-effect {\n      background-color: #327eff; }\n  .md .button-clear {\n    border-color: transparent;\n    color: #327eff;\n    background-color: transparent;\n    box-shadow: none;\n    opacity: 1; }\n    .md .button-clear.activated {\n      background-color: rgba(158, 158, 158, 0.2);\n      box-shadow: none; }\n    .md .button-clear:hover:not(.disable-hover) {\n      background-color: rgba(158, 158, 158, 0.1); }\n    .md .button-clear ion-button-effect {\n      background-color: #999; }\n  .md .button-round {\n    padding: 0 2.6rem;\n    border-radius: 64px; }\n  .md .button-fab {\n    border-radius: 50%;\n    box-shadow: 0 4px 6px 0 rgba(0, 0, 0, 0.14), 0 4px 5px rgba(0, 0, 0, 0.1);\n    -webkit-transition: box-shadow 300ms cubic-bezier(0.4, 0, 0.2, 1), background-color 300ms cubic-bezier(0.4, 0, 0.2, 1), color 300ms cubic-bezier(0.4, 0, 0.2, 1);\n    transition: box-shadow 300ms cubic-bezier(0.4, 0, 0.2, 1), background-color 300ms cubic-bezier(0.4, 0, 0.2, 1), color 300ms cubic-bezier(0.4, 0, 0.2, 1); }\n    .md .button-fab.activated {\n      box-shadow: 0 5px 15px 0 rgba(0, 0, 0, 0.4), 0 4px 7px 0 rgba(0, 0, 0, 0.1); }\n  .md [icon-only] {\n    padding: 0; }\n  .md ion-button-effect {\n    position: absolute;\n    z-index: 0;\n    display: block;\n    border-radius: 50%;\n    background-color: #555;\n    opacity: .2;\n    -webkit-transition-timing-function: ease-in-out;\n    transition-timing-function: ease-in-out;\n    pointer-events: none; }\n  .md .button-primary {\n    color: #fff;\n    background-color: #327eff; }\n    .md .button-primary:hover:not(.disable-hover) {\n      background-color: #327eff; }\n    .md .button-primary.activated {\n      background-color: #2e74eb;\n      opacity: 1; }\n    .md .button-primary ion-button-effect {\n      background-color: #fff; }\n  .md .button-outline-primary {\n    border-color: #3078f2;\n    color: #3078f2;\n    background-color: transparent; }\n    .md .button-outline-primary:hover:not(.disable-hover) {\n      background-color: rgba(158, 158, 158, 0.1); }\n    .md .button-outline-primary.activated {\n      background-color: transparent; }\n    .md .button-outline-primary ion-button-effect {\n      background-color: #3078f2; }\n  .md .button-clear-primary {\n    border-color: transparent;\n    color: #327eff;\n    background-color: transparent; }\n    .md .button-clear-primary.activated {\n      background-color: rgba(158, 158, 158, 0.2);\n      box-shadow: none; }\n    .md .button-clear-primary:hover:not(.disable-hover) {\n      color: #327eff; }\n  .md .button-secondary {\n    color: #fff;\n    background-color: #32db64; }\n    .md .button-secondary:hover:not(.disable-hover) {\n      background-color: #32db64; }\n    .md .button-secondary.activated {\n      background-color: #2ec95c;\n      opacity: 1; }\n    .md .button-secondary ion-button-effect {\n      background-color: #fff; }\n  .md .button-outline-secondary {\n    border-color: #30d05f;\n    color: #30d05f;\n    background-color: transparent; }\n    .md .button-outline-secondary:hover:not(.disable-hover) {\n      background-color: rgba(158, 158, 158, 0.1); }\n    .md .button-outline-secondary.activated {\n      background-color: transparent; }\n    .md .button-outline-secondary ion-button-effect {\n      background-color: #30d05f; }\n  .md .button-clear-secondary {\n    border-color: transparent;\n    color: #32db64;\n    background-color: transparent; }\n    .md .button-clear-secondary.activated {\n      background-color: rgba(158, 158, 158, 0.2);\n      box-shadow: none; }\n    .md .button-clear-secondary:hover:not(.disable-hover) {\n      color: #32db64; }\n  .md .button-danger {\n    color: #fff;\n    background-color: #f53d3d; }\n    .md .button-danger:hover:not(.disable-hover) {\n      background-color: #f53d3d; }\n    .md .button-danger.activated {\n      background-color: #e13838;\n      opacity: 1; }\n    .md .button-danger ion-button-effect {\n      background-color: #fff; }\n  .md .button-outline-danger {\n    border-color: #e93a3a;\n    color: #e93a3a;\n    background-color: transparent; }\n    .md .button-outline-danger:hover:not(.disable-hover) {\n      background-color: rgba(158, 158, 158, 0.1); }\n    .md .button-outline-danger.activated {\n      background-color: transparent; }\n    .md .button-outline-danger ion-button-effect {\n      background-color: #e93a3a; }\n  .md .button-clear-danger {\n    border-color: transparent;\n    color: #f53d3d;\n    background-color: transparent; }\n    .md .button-clear-danger.activated {\n      background-color: rgba(158, 158, 158, 0.2);\n      box-shadow: none; }\n    .md .button-clear-danger:hover:not(.disable-hover) {\n      color: #f53d3d; }\n  .md .button-light {\n    color: #000;\n    background-color: #f4f4f4; }\n    .md .button-light:hover:not(.disable-hover) {\n      background-color: #f4f4f4; }\n    .md .button-light.activated {\n      background-color: #e0e0e0;\n      opacity: 1; }\n    .md .button-light ion-button-effect {\n      background-color: #000; }\n  .md .button-outline-light {\n    border-color: #e8e8e8;\n    color: #e8e8e8;\n    background-color: transparent; }\n    .md .button-outline-light:hover:not(.disable-hover) {\n      background-color: rgba(158, 158, 158, 0.1); }\n    .md .button-outline-light.activated {\n      background-color: transparent; }\n    .md .button-outline-light ion-button-effect {\n      background-color: #e8e8e8; }\n  .md .button-clear-light {\n    border-color: transparent;\n    color: #f4f4f4;\n    background-color: transparent; }\n    .md .button-clear-light.activated {\n      background-color: rgba(158, 158, 158, 0.2);\n      box-shadow: none; }\n    .md .button-clear-light:hover:not(.disable-hover) {\n      color: #f4f4f4; }\n  .md .button-dark {\n    color: #fff;\n    background-color: #222; }\n    .md .button-dark:hover:not(.disable-hover) {\n      background-color: #222; }\n    .md .button-dark.activated {\n      background-color: #343434;\n      opacity: 1; }\n    .md .button-dark ion-button-effect {\n      background-color: #fff; }\n  .md .button-outline-dark {\n    border-color: #2d2d2d;\n    color: #2d2d2d;\n    background-color: transparent; }\n    .md .button-outline-dark:hover:not(.disable-hover) {\n      background-color: rgba(158, 158, 158, 0.1); }\n    .md .button-outline-dark.activated {\n      background-color: transparent; }\n    .md .button-outline-dark ion-button-effect {\n      background-color: #2d2d2d; }\n  .md .button-clear-dark {\n    border-color: transparent;\n    color: #222;\n    background-color: transparent; }\n    .md .button-clear-dark.activated {\n      background-color: rgba(158, 158, 158, 0.2);\n      box-shadow: none; }\n    .md .button-clear-dark:hover:not(.disable-hover) {\n      color: #222; }\n  .md .button-fab {\n    position: absolute;\n    overflow: hidden;\n    width: 56px;\n    min-width: 0;\n    height: 56px;\n    font-size: 14px;\n    line-height: 56px;\n    vertical-align: middle;\n    background-clip: padding-box; }\n  .md .button-fab ion-icon {\n    -webkit-box-flex: 1;\n    -webkit-flex: 1;\n    -ms-flex: 1;\n    flex: 1;\n    font-size: 2.8rem; }\n  .md [fab-center] {\n    left: 50%;\n    margin-left: -28px; }\n  .md [fab-top] {\n    top: 16px; }\n  .md [fab-right] {\n    right: 16px; }\n  .md [fab-bottom] {\n    bottom: 16px; }\n  .md [fab-left] {\n    left: 16px; }\n  .md [fab-fixed] {\n    position: fixed; }\n  .md [icon-left] ion-icon {\n    font-size: 1.4em;\n    line-height: .67;\n    pointer-events: none;\n    padding-right: .3em; }\n  .md [icon-right] ion-icon {\n    font-size: 1.4em;\n    line-height: .67;\n    pointer-events: none;\n    padding-left: .4em; }\n  .md [icon-only] {\n    padding: 0;\n    min-width: .9em; }\n  .md [icon-only] ion-icon {\n    padding: 0 .5em;\n    font-size: 1.8em;\n    line-height: .67;\n    pointer-events: none; }\n  .md ion-card {\n    display: block;\n    overflow: hidden; }\n  .md ion-card img {\n    display: block;\n    width: 100%; }\n  .md ion-card-header {\n    display: block;\n    overflow: hidden;\n    text-overflow: ellipsis;\n    white-space: nowrap; }\n  .md ion-card-content {\n    display: block; }\n  .md ion-card {\n    margin: 10px 10px 10px 10px;\n    width: calc(100% - 20px);\n    border-radius: 2px;\n    font-size: 1.4rem;\n    background: #fff;\n    box-shadow: 0 2px 2px 0 rgba(0, 0, 0, 0.14), 0 3px 1px -2px rgba(0, 0, 0, 0.2), 0 1px 5px 0 rgba(0, 0, 0, 0.12); }\n    .md ion-card ion-list {\n      margin-bottom: 0; }\n    .md ion-card > .item:last-child,\n    .md ion-card > .item-wrapper:last-child .item {\n      border-bottom: 0; }\n    .md ion-card .item .item-inner {\n      border: 0; }\n    .md ion-card ion-card-content {\n      padding: 13px 16px 13px 16px;\n      font-size: 1.4rem;\n      line-height: 1.5; }\n    .md ion-card ion-card-header {\n      padding: 16px;\n      font-size: 1.6rem;\n      color: #222; }\n    .md ion-card ion-card-header + ion-card-content,\n    .md ion-card .item + ion-card-content {\n      padding-top: 0; }\n    .md ion-card ion-note[item-left],\n    .md ion-card ion-note[item-right] {\n      font-size: 1.3rem; }\n    .md ion-card ion-card-title {\n      display: block;\n      margin: 2px 0 2px;\n      padding: 8px 0 8px 0;\n      font-size: 2.4rem;\n      line-height: 1.2;\n      color: #222; }\n    .md ion-card h1 {\n      margin: 0 0 2px;\n      font-size: 2.4rem;\n      font-weight: normal;\n      color: #222; }\n    .md ion-card h2 {\n      margin: 2px 0;\n      font-size: 1.6rem;\n      font-weight: normal;\n      color: #222; }\n    .md ion-card h3,\n    .md ion-card h4,\n    .md ion-card h5,\n    .md ion-card h6 {\n      margin: 2px 0;\n      font-size: 1.4rem;\n      font-weight: normal;\n      color: #222; }\n    .md ion-card p {\n      margin: 0 0 2px;\n      font-size: 1.4rem;\n      font-weight: normal;\n      line-height: 1.5;\n      color: #222; }\n  .md ion-card + ion-card {\n    margin-top: 0; }\n  .md ion-checkbox {\n    position: relative;\n    display: inline-block; }\n  .md .checkbox-icon {\n    position: relative;\n    width: 16px;\n    height: 16px;\n    border-width: 2px;\n    border-style: solid;\n    border-radius: 2px;\n    border-color: #787878;\n    background-color: #fff;\n    -webkit-transition-duration: 280ms;\n    transition-duration: 280ms;\n    -webkit-transition-property: background;\n    transition-property: background;\n    -webkit-transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\n    transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); }\n  .md .checkbox-checked {\n    border-color: #327eff;\n    background-color: #327eff; }\n  .md .checkbox-checked .checkbox-inner {\n    position: absolute;\n    top: 0;\n    left: 4px;\n    width: 5px;\n    height: 10px;\n    border-width: 2px;\n    border-top-width: 0;\n    border-left-width: 0;\n    border-style: solid;\n    border-color: #fff;\n    -webkit-transform: rotate(45deg);\n    transform: rotate(45deg); }\n  .md .checkbox-disabled,\n  .md .item-checkbox-disabled ion-label {\n    opacity: 0.3;\n    pointer-events: none; }\n  .md .item ion-checkbox {\n    position: static;\n    display: block;\n    margin: 9px 36px 9px 4px; }\n    .md .item ion-checkbox[item-right] {\n      margin: 11px 10px 10px 0; }\n  .md ion-checkbox + .item-inner ion-label {\n    margin-left: 0; }\n  .md .checkbox-primary .checkbox-checked {\n    border-color: #327eff;\n    background-color: #327eff; }\n    .md .checkbox-primary .checkbox-checked .checkbox-inner {\n      border-color: #fff; }\n  .md .checkbox-secondary .checkbox-checked {\n    border-color: #32db64;\n    background-color: #32db64; }\n    .md .checkbox-secondary .checkbox-checked .checkbox-inner {\n      border-color: #fff; }\n  .md .checkbox-danger .checkbox-checked {\n    border-color: #f53d3d;\n    background-color: #f53d3d; }\n    .md .checkbox-danger .checkbox-checked .checkbox-inner {\n      border-color: #fff; }\n  .md .checkbox-light .checkbox-checked {\n    border-color: #f4f4f4;\n    background-color: #f4f4f4; }\n    .md .checkbox-light .checkbox-checked .checkbox-inner {\n      border-color: #000; }\n  .md .checkbox-dark .checkbox-checked {\n    border-color: #222;\n    background-color: #222; }\n    .md .checkbox-dark .checkbox-checked .checkbox-inner {\n      border-color: #fff; }\n  .md ion-chip {\n    display: -webkit-inline-box;\n    display: -webkit-inline-flex;\n    display: -ms-inline-flexbox;\n    display: inline-flex;\n    -webkit-align-self: center;\n    -ms-flex-item-align: center;\n    align-self: center;\n    font-weight: normal;\n    vertical-align: middle;\n    box-sizing: border-box; }\n    .md ion-chip .button {\n      margin: 0;\n      width: 32px;\n      height: 32px;\n      border-radius: 50%; }\n    .md ion-chip ion-icon {\n      width: 32px;\n      height: 32px;\n      border-radius: 50%;\n      font-size: 18px;\n      line-height: 32px; }\n    .md ion-chip ion-avatar {\n      width: 32px;\n      min-width: 32px;\n      height: 32px;\n      min-height: 32px;\n      border-radius: 50%; }\n      .md ion-chip ion-avatar img {\n        display: block;\n        width: 100%;\n        max-width: 100%;\n        height: 100%;\n        max-height: 100%;\n        border-radius: 50%; }\n  .md ion-chip {\n    margin: 2px 0;\n    height: 32px;\n    border-radius: 16px;\n    font-size: 13px;\n    line-height: 32px;\n    color: rgba(0, 0, 0, 0.87);\n    background: rgba(0, 0, 0, 0.12); }\n    .md ion-chip > ion-label {\n      margin: 0 10px; }\n    .md ion-chip > ion-icon {\n      color: #fff;\n      background-color: #327eff; }\n  .md .chip-primary,\n  .md ion-chip .icon-primary {\n    color: #fff;\n    background-color: #327eff; }\n  .md .chip-secondary,\n  .md ion-chip .icon-secondary {\n    color: #fff;\n    background-color: #32db64; }\n  .md .chip-danger,\n  .md ion-chip .icon-danger {\n    color: #fff;\n    background-color: #f53d3d; }\n  .md .chip-light,\n  .md ion-chip .icon-light {\n    color: #000;\n    background-color: #f4f4f4; }\n  .md .chip-dark,\n  .md ion-chip .icon-dark {\n    color: #fff;\n    background-color: #222; }\n  .md [no-padding],\n  .md [no-padding] scroll-content {\n    padding: 0; }\n  .md [no-margin],\n  .md [no-margin] scroll-content {\n    margin: 0; }\n  .md ion-fixed {\n    position: absolute;\n    z-index: 2;\n    -webkit-transform: translateZ(0);\n    transform: translateZ(0); }\n  .md ion-content {\n    background-color: #fff; }\n  .md [padding],\n  .md [padding] scroll-content {\n    padding: 16px; }\n  .md [padding-top],\n  .md [padding-top] scroll-content {\n    padding-top: 16px; }\n  .md [padding-left],\n  .md [padding-left] scroll-content {\n    padding-left: 16px; }\n  .md [padding-right],\n  .md [padding-right] scroll-content {\n    padding-right: 16px; }\n  .md [padding-bottom],\n  .md [padding-bottom] scroll-content {\n    padding-bottom: 16px; }\n  .md [padding-vertical],\n  .md [padding-vertical] scroll-content {\n    padding-top: 16px;\n    padding-bottom: 16px; }\n  .md [padding-horizontal],\n  .md [padding-horizontal] scroll-content {\n    padding-right: 16px;\n    padding-left: 16px; }\n  .md [margin],\n  .md [margin] scroll-content {\n    margin: 16px; }\n  .md [margin-top],\n  .md [margin-top] scroll-content {\n    margin-top: 16px; }\n  .md [margin-left],\n  .md [margin-left] scroll-content {\n    margin-left: 16px; }\n  .md [margin-right],\n  .md [margin-right] scroll-content {\n    margin-right: 16px; }\n  .md [margin-bottom],\n  .md [margin-bottom] scroll-content {\n    margin-bottom: 16px; }\n  .md [margin-vertical],\n  .md [margin-vertical] scroll-content {\n    margin-top: 16px;\n    margin-bottom: 16px; }\n  .md [margin-horizontal],\n  .md [margin-horizontal] scroll-content {\n    margin-right: 16px;\n    margin-left: 16px; }\n  .md ion-datetime {\n    display: -webkit-box;\n    display: -webkit-flex;\n    display: -ms-flexbox;\n    display: flex;\n    overflow: hidden; }\n  .md .datetime-text {\n    overflow: hidden;\n    -webkit-box-flex: 1;\n    -webkit-flex: 1;\n    -ms-flex: 1;\n    flex: 1;\n    min-width: 16px;\n    min-height: 1.2em;\n    font-size: inherit;\n    line-height: 1.2;\n    text-overflow: ellipsis;\n    white-space: nowrap; }\n  .md .datetime-disabled,\n  .md .item-datetime-disabled ion-label {\n    opacity: .4;\n    pointer-events: none; }\n  .md .item-label-stacked ion-datetime,\n  .md .item-label-floating ion-datetime {\n    padding-left: 0;\n    width: 100%; }\n  .md ion-datetime {\n    padding: 13px 8px 13px 16px; }\n  .md ion-icon {\n    display: inline-block;\n    font-size: 1.2em; }\n  .md ion-icon[small] {\n    min-height: 1.1em;\n    font-size: 1.1em; }\n  .md .icon-primary {\n    color: #327eff; }\n  .md .icon-secondary {\n    color: #32db64; }\n  .md .icon-danger {\n    color: #f53d3d; }\n  .md .icon-light {\n    color: #f4f4f4; }\n  .md .icon-dark {\n    color: #222; }\n  .md ion-input,\n  .md ion-textarea {\n    position: relative;\n    display: block;\n    -webkit-box-flex: 1;\n    -webkit-flex: 1;\n    -ms-flex: 1;\n    flex: 1;\n    width: 100%; }\n  .md .item-input ion-input,\n  .md .item-input ion-textarea {\n    position: static; }\n  .md .item.item-textarea {\n    -webkit-box-align: stretch;\n    -webkit-align-items: stretch;\n    -ms-flex-align: stretch;\n    align-items: stretch; }\n  .md .text-input {\n    display: inline-block;\n    -webkit-box-flex: 1;\n    -webkit-flex: 1;\n    -ms-flex: 1;\n    flex: 1;\n    width: 92%;\n    width: calc(100% - 10px);\n    border: 0;\n    border-radius: 0;\n    background: transparent;\n    -webkit-appearance: none; }\n    .md .text-input::-moz-placeholder {\n      color: #999; }\n    .md .text-input:-ms-input-placeholder {\n      color: #999; }\n    .md .text-input::-webkit-input-placeholder {\n      text-indent: 0;\n      color: #999; }\n  .md textarea.text-input {\n    display: block; }\n  .md .text-input[disabled] {\n    opacity: .4; }\n  .md input.text-input:-webkit-autofill {\n    background-color: transparent; }\n  .md .platform-mobile textarea.text-input {\n    resize: none; }\n  .md .input-cover {\n    position: absolute;\n    top: 0;\n    left: 0;\n    width: 100%;\n    height: 100%; }\n  .md .input-has-focus .input-cover {\n    display: none; }\n  .md .input-has-focus {\n    pointer-events: none; }\n  .md .input-has-focus input,\n  .md .input-has-focus textarea,\n  .md .input-has-focus a,\n  .md .input-has-focus button {\n    pointer-events: auto; }\n  .md [next-input] {\n    position: absolute;\n    bottom: 1px;\n    padding: 0;\n    width: 1px;\n    height: 1px;\n    border: 0;\n    background: transparent;\n    pointer-events: none; }\n  .md .text-input-clear-icon {\n    position: absolute;\n    top: 0;\n    display: none;\n    margin: 0;\n    padding: 0;\n    height: 100%;\n    background-repeat: no-repeat;\n    background-position: center; }\n  .md .input-has-focus.input-has-value .text-input-clear-icon {\n    display: block; }\n  .md .text-input.cloned-input {\n    position: relative;\n    top: 0;\n    pointer-events: none; }\n  .md .item-input:not(.item-label-floating) .text-input.cloned-active {\n    display: none; }\n  .md .text-input {\n    margin: 13px 8px 13px 8px;\n    padding: 0;\n    width: calc(100% - 8px - 8px); }\n  .md .inset-input {\n    margin: 6.5px 16px 6.5px 16px;\n    padding: 6.5px 8px 6.5px 8px; }\n  .md .item-input.input-has-focus .item-inner {\n    border-bottom-color: #327eff;\n    box-shadow: inset 0 -1px 0 0 #327eff; }\n  .md ion-list .item-input.input-has-focus:last-child {\n    border-bottom-color: #327eff;\n    box-shadow: inset 0 -1px 0 0 #327eff; }\n    .md ion-list .item-input.input-has-focus:last-child .item-inner {\n      box-shadow: none; }\n  .md .item-input.ng-valid.input-has-value:not(.input-has-focus) .item-inner {\n    border-bottom-color: #32db64;\n    box-shadow: inset 0 -1px 0 0 #32db64; }\n  .md ion-list .item-input.ng-valid.input-has-value:not(.input-has-focus):last-child {\n    border-bottom-color: #32db64;\n    box-shadow: inset 0 -1px 0 0 #32db64; }\n    .md ion-list .item-input.ng-valid.input-has-value:not(.input-has-focus):last-child .item-inner {\n      box-shadow: none; }\n  .md .item-input.ng-invalid.ng-touched:not(.input-has-focus) .item-inner {\n    border-bottom-color: #f53d3d;\n    box-shadow: inset 0 -1px 0 0 #f53d3d; }\n  .md ion-list .item-input.ng-invalid.ng-touched:not(.input-has-focus):last-child {\n    border-bottom-color: #f53d3d;\n    box-shadow: inset 0 -1px 0 0 #f53d3d; }\n    .md ion-list .item-input.ng-invalid.ng-touched:not(.input-has-focus):last-child .item-inner {\n      box-shadow: none; }\n  .md .item-label-stacked .text-input,\n  .md .item-label-floating .text-input {\n    margin-top: 8px;\n    margin-bottom: 8px;\n    margin-left: 0;\n    width: calc(100% - 8px); }\n  .md .item-label-stacked ion-select,\n  .md .item-label-floating ion-select {\n    padding-top: 8px;\n    padding-bottom: 8px;\n    padding-left: 0; }\n  .md .item-label-floating .text-input.cloned-input {\n    top: 32px; }\n  .md .item-label-stacked .text-input.cloned-input {\n    top: 27px; }\n  .md ion-input[clearInput] {\n    position: relative; }\n    .md ion-input[clearInput] .text-input {\n      padding-right: 30px; }\n  .md .text-input-clear-icon {\n    background-image: url(\"data:image/svg+xml;charset=utf-8,<svg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%20512%20512'><polygon%20fill='%235b5b5b'%20points='405,136.798%20375.202,107%20256,226.202%20136.798,107%20107,136.798%20226.202,256%20107,375.202%20136.798,405%20256,285.798%20375.202,405%20405,375.202%20285.798,256'/></svg>\");\n    right: 8px;\n    width: 30px;\n    background-size: 22px; }\n  .md .item {\n    display: -webkit-box;\n    display: -webkit-flex;\n    display: -ms-flexbox;\n    display: flex;\n    overflow: hidden;\n    -webkit-box-align: center;\n    -webkit-align-items: center;\n    -ms-flex-align: center;\n    align-items: center;\n    -webkit-box-pack: justify;\n    -webkit-justify-content: space-between;\n    -ms-flex-pack: justify;\n    justify-content: space-between;\n    margin: 0;\n    padding: 0;\n    width: 100%;\n    min-height: 4.4rem;\n    border: 0;\n    font-weight: normal;\n    line-height: normal;\n    text-align: initial;\n    text-decoration: none;\n    color: inherit; }\n  .md .item-inner {\n    display: -webkit-box;\n    display: -webkit-flex;\n    display: -ms-flexbox;\n    display: flex;\n    overflow: hidden;\n    -webkit-box-flex: 1;\n    -webkit-flex: 1;\n    -ms-flex: 1;\n    flex: 1;\n    -webkit-box-orient: vertical;\n    -webkit-box-direction: normal;\n    -webkit-flex-direction: inherit;\n    -ms-flex-direction: inherit;\n    flex-direction: inherit;\n    -webkit-box-align: inherit;\n    -webkit-align-items: inherit;\n    -ms-flex-align: inherit;\n    align-items: inherit;\n    -webkit-align-self: stretch;\n    -ms-flex-item-align: stretch;\n    align-self: stretch;\n    margin: 0;\n    padding: 0;\n    min-height: inherit;\n    border: 0; }\n  .md .input-wrapper {\n    display: -webkit-box;\n    display: -webkit-flex;\n    display: -ms-flexbox;\n    display: flex;\n    overflow: hidden;\n    -webkit-box-flex: 1;\n    -webkit-flex: 1;\n    -ms-flex: 1;\n    flex: 1;\n    -webkit-box-orient: vertical;\n    -webkit-box-direction: normal;\n    -webkit-flex-direction: inherit;\n    -ms-flex-direction: inherit;\n    flex-direction: inherit;\n    -webkit-box-align: inherit;\n    -webkit-align-items: inherit;\n    -ms-flex-align: inherit;\n    align-items: inherit;\n    -webkit-align-self: stretch;\n    -ms-flex-item-align: stretch;\n    align-self: stretch;\n    text-overflow: ellipsis; }\n  .md .item[no-lines],\n  .md .item[no-lines] .item-inner {\n    border: 0; }\n  .md ion-item-group {\n    display: block; }\n  .md ion-item-divider {\n    z-index: 1000;\n    display: -webkit-box;\n    display: -webkit-flex;\n    display: -ms-flexbox;\n    display: flex;\n    overflow: hidden;\n    -webkit-box-align: center;\n    -webkit-align-items: center;\n    -ms-flex-align: center;\n    align-items: center;\n    -webkit-box-pack: justify;\n    -webkit-justify-content: space-between;\n    -ms-flex-pack: justify;\n    justify-content: space-between;\n    margin: 0;\n    padding: 0;\n    width: 100%;\n    min-height: 30px; }\n    .md ion-item-divider[sticky] {\n      position: -webkit-sticky;\n      position: sticky;\n      top: 0; }\n  .md [vertical-align-top],\n  .md ion-input.item {\n    -webkit-box-align: start;\n    -webkit-align-items: flex-start;\n    -ms-flex-align: start;\n    align-items: flex-start; }\n  .md .item > ion-icon[small]:first-child,\n  .md .item-inner > ion-icon[small]:first-child {\n    min-width: 18px; }\n  .md .item > ion-icon:first-child,\n  .md .item-inner > ion-icon:first-child {\n    min-width: 24px;\n    text-align: center; }\n  .md .item > ion-icon,\n  .md .item-inner > ion-icon {\n    min-height: 2.4rem;\n    font-size: 2.4rem;\n    line-height: 1; }\n    .md .item > ion-icon[large],\n    .md .item-inner > ion-icon[large] {\n      min-height: 3.2rem;\n      font-size: 3.2rem; }\n    .md .item > ion-icon[small],\n    .md .item-inner > ion-icon[small] {\n      min-height: 1.8rem;\n      font-size: 1.8rem; }\n  .md ion-avatar,\n  .md ion-thumbnail {\n    display: block;\n    line-height: 1; }\n    .md ion-avatar img,\n    .md ion-thumbnail img {\n      display: block; }\n  .md .item-cover {\n    position: absolute;\n    top: 0;\n    left: 0;\n    width: 100%;\n    height: 100%;\n    background: transparent;\n    cursor: pointer; }\n  .md ion-item-sliding {\n    position: relative;\n    display: block;\n    overflow: hidden;\n    width: 100%; }\n    .md ion-item-sliding .item {\n      position: static; }\n  .md ion-item-options {\n    position: absolute;\n    top: 0;\n    right: 0;\n    z-index: 1;\n    display: none;\n    -webkit-box-pack: end;\n    -webkit-justify-content: flex-end;\n    -ms-flex-pack: end;\n    justify-content: flex-end;\n    height: 100%;\n    font-size: 14px;\n    visibility: hidden; }\n  .md ion-item-options[side=left] {\n    right: auto;\n    left: 0;\n    -webkit-box-pack: start;\n    -webkit-justify-content: flex-start;\n    -ms-flex-pack: start;\n    justify-content: flex-start; }\n  .md ion-item-options .button {\n    margin: 0;\n    padding: 0 .7em;\n    height: 100%;\n    border-radius: 0;\n    box-shadow: none;\n    box-sizing: content-box; }\n  .md ion-item-options:not([icon-left]) .button .button-inner {\n    -webkit-box-orient: vertical;\n    -webkit-box-direction: normal;\n    -webkit-flex-direction: column;\n    -ms-flex-direction: column;\n    flex-direction: column; }\n  .md ion-item-options:not([icon-left]) .button ion-icon {\n    padding-right: 0;\n    padding-bottom: .3em;\n    padding-left: 0; }\n  .md ion-item-sliding.active-slide .item,\n  .md ion-item-sliding.active-slide .item.activated {\n    position: relative;\n    z-index: 2;\n    opacity: 1;\n    -webkit-transition: -webkit-transform 500ms cubic-bezier(0.36, 0.66, 0.04, 1);\n    transition: transform 500ms cubic-bezier(0.36, 0.66, 0.04, 1);\n    pointer-events: none;\n    will-change: transform; }\n  .md ion-item-sliding.active-slide ion-item-options {\n    display: -webkit-box;\n    display: -webkit-flex;\n    display: -ms-flexbox;\n    display: flex; }\n  .md ion-item-sliding.active-slide.active-options-left ion-item-options[side=left] {\n    width: 100%;\n    visibility: visible; }\n  .md ion-item-sliding.active-slide.active-options-right ion-item-options:not([side=left]) {\n    width: 100%;\n    visibility: visible; }\n  .md .button-expandable {\n    -webkit-flex-shrink: 0;\n    -ms-flex-negative: 0;\n    flex-shrink: 0;\n    -webkit-transition-duration: 0;\n    transition-duration: 0;\n    -webkit-transition-property: none;\n    transition-property: none;\n    -webkit-transition-timing-function: cubic-bezier(0.65, 0.05, 0.36, 1);\n    transition-timing-function: cubic-bezier(0.65, 0.05, 0.36, 1); }\n  .md ion-item-sliding.active-swipe-right .button-expandable {\n    -webkit-box-ordinal-group: 2;\n    -webkit-order: 1;\n    -ms-flex-order: 1;\n    order: 1;\n    padding-left: 90%;\n    -webkit-transition-duration: .6s;\n    transition-duration: .6s;\n    -webkit-transition-property: padding-left;\n    transition-property: padding-left; }\n  .md ion-item-sliding.active-swipe-left .button-expandable {\n    -webkit-box-ordinal-group: 0;\n    -webkit-order: -1;\n    -ms-flex-order: -1;\n    order: -1;\n    padding-right: 90%;\n    -webkit-transition-duration: .6s;\n    transition-duration: .6s;\n    -webkit-transition-property: padding-right;\n    transition-property: padding-right; }\n  .md ion-reorder {\n    display: none;\n    -webkit-box-flex: 1;\n    -webkit-flex: 1;\n    -ms-flex: 1;\n    flex: 1;\n    -webkit-box-align: center;\n    -webkit-align-items: center;\n    -ms-flex-align: center;\n    align-items: center;\n    -webkit-box-pack: center;\n    -webkit-justify-content: center;\n    -ms-flex-pack: center;\n    justify-content: center;\n    max-width: 40px;\n    height: 100%;\n    font-size: 1.7em;\n    opacity: .25;\n    -webkit-transform: translate3d(120%, 0, 0);\n    transform: translate3d(120%, 0, 0);\n    -webkit-transition: -webkit-transform 125ms ease-in;\n    transition: transform 125ms ease-in;\n    pointer-events: all;\n    -ms-touch-action: manipulation;\n    touch-action: manipulation; }\n    .md ion-reorder ion-icon {\n      pointer-events: none; }\n  .md .reorder-enabled ion-reorder {\n    display: -webkit-box;\n    display: -webkit-flex;\n    display: -ms-flexbox;\n    display: flex; }\n  .md .reorder-visible ion-reorder {\n    -webkit-transform: translate3d(0, 0, 0);\n    transform: translate3d(0, 0, 0); }\n  .md .reorder-list-active .item,\n  .md .reorder-list-active .item-wrapper {\n    -webkit-transition: -webkit-transform 300ms;\n    transition: transform 300ms;\n    will-change: transform; }\n  .md .reorder-list-active .item-inner {\n    pointer-events: none; }\n  .md .item-wrapper.reorder-active,\n  .md .item.reorder-active,\n  .md .reorder-active {\n    z-index: 4;\n    box-shadow: 0 0 10px rgba(0, 0, 0, 0.4);\n    opacity: .8;\n    -webkit-transition: none;\n    transition: none;\n    pointer-events: none; }\n  .md .item {\n    position: relative;\n    padding-right: 0;\n    padding-left: 16px;\n    font-size: 1.6rem;\n    font-weight: normal;\n    text-transform: none;\n    color: #000;\n    background-color: #fff;\n    box-shadow: none;\n    -webkit-transition: background-color 300ms cubic-bezier(0.4, 0, 0.2, 1), -webkit-transform 300ms;\n    transition: background-color 300ms cubic-bezier(0.4, 0, 0.2, 1), transform 300ms; }\n    .md .item h1 {\n      margin: 0 0 2px;\n      font-size: 2.4rem;\n      font-weight: normal; }\n    .md .item h2 {\n      margin: 2px 0;\n      font-size: 1.6rem;\n      font-weight: normal; }\n    .md .item h3,\n    .md .item h4,\n    .md .item h5,\n    .md .item h6 {\n      margin: 2px 0;\n      font-size: 1.4rem;\n      font-weight: normal;\n      line-height: normal; }\n    .md .item p {\n      overflow: inherit;\n      margin: 0 0 2px;\n      font-size: 1.4rem;\n      line-height: normal;\n      text-overflow: inherit;\n      color: #666; }\n  .md .item.activated {\n    background-color: #f1f1f1; }\n  .md .item[no-lines] {\n    border-width: 0; }\n  .md .item .item-inner {\n    padding-right: 8px;\n    border-bottom: 1px solid #dedede; }\n  .md [item-left],\n  .md [item-right] {\n    margin: 9px 8px 9px 0; }\n  .md ion-icon[item-left],\n  .md ion-icon[item-right] {\n    margin-top: 11px;\n    margin-bottom: 10px;\n    margin-left: 0; }\n  .md .item-button {\n    padding: 0 .6em;\n    height: 25px;\n    font-size: 1.2rem; }\n  .md .item-button[icon-only] ion-icon,\n  .md .item-button[icon-only] {\n    padding: 0 1px; }\n  .md ion-icon[item-left] + .item-inner,\n  .md ion-icon[item-left] + .item-input {\n    margin-left: 24px; }\n  .md ion-avatar[item-left],\n  .md ion-thumbnail[item-left] {\n    margin: 8px 16px 8px 0; }\n  .md ion-avatar[item-right],\n  .md ion-thumbnail[item-right] {\n    margin: 8px; }\n  .md ion-avatar {\n    min-width: 4rem;\n    min-height: 4rem; }\n    .md ion-avatar img {\n      max-width: 4rem;\n      max-height: 4rem;\n      border-radius: 2rem; }\n  .md ion-thumbnail {\n    min-width: 8rem;\n    min-height: 8rem; }\n    .md ion-thumbnail img {\n      max-width: 8rem;\n      max-height: 8rem; }\n  .md ion-note {\n    color: #c5c5c5; }\n  .md ion-item-group .item:first-child .item-inner {\n    border-top-width: 0; }\n  .md ion-item-group .item:last-child .item-inner,\n  .md ion-item-group .item-wrapper:last-child .item-inner {\n    border: 0; }\n  .md ion-item-divider {\n    padding-left: 16px;\n    color: #222;\n    background-color: #fff; }\n  .md .item .text-primary {\n    color: #327eff; }\n  .md .item-primary {\n    color: #fff;\n    background-color: #327eff; }\n  .md .item .text-secondary {\n    color: #32db64; }\n  .md .item-secondary {\n    color: #fff;\n    background-color: #32db64; }\n  .md .item .text-danger {\n    color: #f53d3d; }\n  .md .item-danger {\n    color: #fff;\n    background-color: #f53d3d; }\n  .md .item .text-light {\n    color: #f4f4f4; }\n  .md .item-light {\n    color: #000;\n    background-color: #f4f4f4; }\n  .md .item .text-dark {\n    color: #222; }\n  .md .item-dark {\n    color: #fff;\n    background-color: #222; }\n  .md ion-item-sliding {\n    background-color: #fff; }\n  .md ion-reorder {\n    font-size: 1.5em;\n    opacity: .3; }\n  .md ion-label {\n    display: block;\n    overflow: hidden;\n    -webkit-box-flex: 1;\n    -webkit-flex: 1;\n    -ms-flex: 1;\n    flex: 1;\n    margin: 0;\n    font-size: inherit;\n    text-overflow: ellipsis;\n    white-space: nowrap; }\n  .md .item-input ion-label {\n    -webkit-box-flex: initial;\n    -webkit-flex: initial;\n    -ms-flex: initial;\n    flex: initial;\n    max-width: 200px;\n    pointer-events: none; }\n  .md [text-wrap] ion-label {\n    white-space: normal; }\n  .md ion-label[fixed] {\n    -webkit-box-flex: 0;\n    -webkit-flex: 0 0 100px;\n    -ms-flex: 0 0 100px;\n    flex: 0 0 100px;\n    width: 100px;\n    min-width: 100px;\n    max-width: 200px; }\n  .md .item-label-stacked ion-label,\n  .md .item-label-floating ion-label {\n    -webkit-align-self: stretch;\n    -ms-flex-item-align: stretch;\n    align-self: stretch;\n    width: auto;\n    max-width: 100%; }\n  .md ion-label[stacked],\n  .md ion-label[floating] {\n    margin-bottom: 0; }\n  .md .item-label-stacked .input-wrapper,\n  .md .item-label-floating .input-wrapper {\n    -webkit-box-flex: 1;\n    -webkit-flex: 1;\n    -ms-flex: 1;\n    flex: 1;\n    -webkit-box-orient: vertical;\n    -webkit-box-direction: normal;\n    -webkit-flex-direction: column;\n    -ms-flex-direction: column;\n    flex-direction: column; }\n  .md .item-label-stacked ion-select,\n  .md .item-label-floating ion-select {\n    -webkit-align-self: stretch;\n    -ms-flex-item-align: stretch;\n    align-self: stretch;\n    max-width: 100%; }\n  .md .item-select ion-label[floating] {\n    -webkit-transform: translate3d(0, 0, 0) scale(0.8);\n    transform: translate3d(0, 0, 0) scale(0.8); }\n  .md ion-label {\n    margin: 13px 8px 13px 0; }\n  .md [text-wrap] ion-label {\n    font-size: 1.4rem;\n    line-height: 1.5; }\n  .md .item-input ion-label,\n  .md .item-select ion-label,\n  .md .item-datetime ion-label {\n    color: #999; }\n  .md ion-label[stacked] {\n    font-size: 1.2rem; }\n  .md ion-label[floating] {\n    -webkit-transform: translate3d(0, 27px, 0);\n    transform: translate3d(0, 27px, 0);\n    -webkit-transform-origin: left top;\n    transform-origin: left top;\n    -webkit-transition: -webkit-transform 150ms ease-in-out;\n    transition: transform 150ms ease-in-out; }\n  .md ion-label[stacked],\n  .md ion-label[floating] {\n    margin-bottom: 0;\n    margin-left: 0; }\n  .md .input-has-focus ion-label[stacked],\n  .md .input-has-focus ion-label[floating] {\n    color: #327eff; }\n  .md .input-has-focus ion-label[floating],\n  .md .input-has-value ion-label[floating] {\n    -webkit-transform: translate3d(0, 0, 0) scale(0.8);\n    transform: translate3d(0, 0, 0) scale(0.8); }\n  .md .item-label-stacked [item-right],\n  .md .item-label-floating [item-right] {\n    margin-top: 7px;\n    margin-bottom: 7px; }\n  .md .label-primary,\n  .md .item-input .label-primary,\n  .md .item-select .label-primary,\n  .md .item-datetime .label-primary {\n    color: #327eff; }\n  .md .label-secondary,\n  .md .item-input .label-secondary,\n  .md .item-select .label-secondary,\n  .md .item-datetime .label-secondary {\n    color: #32db64; }\n  .md .label-danger,\n  .md .item-input .label-danger,\n  .md .item-select .label-danger,\n  .md .item-datetime .label-danger {\n    color: #f53d3d; }\n  .md .label-light,\n  .md .item-input .label-light,\n  .md .item-select .label-light,\n  .md .item-datetime .label-light {\n    color: #f4f4f4; }\n  .md .label-dark,\n  .md .item-input .label-dark,\n  .md .item-select .label-dark,\n  .md .item-datetime .label-dark {\n    color: #222; }\n  .md ion-list-header {\n    display: -webkit-box;\n    display: -webkit-flex;\n    display: -ms-flexbox;\n    display: flex;\n    overflow: hidden;\n    -webkit-box-align: center;\n    -webkit-align-items: center;\n    -ms-flex-align: center;\n    align-items: center;\n    -webkit-box-pack: justify;\n    -webkit-justify-content: space-between;\n    -ms-flex-pack: justify;\n    justify-content: space-between;\n    margin: 0;\n    padding: 0;\n    width: 100%;\n    min-height: 4rem; }\n  .md ion-list {\n    display: block;\n    margin: 0;\n    padding: 0;\n    list-style-type: none; }\n  .md ion-list[inset] {\n    overflow: hidden;\n    -webkit-transform: translateZ(0);\n    transform: translateZ(0); }\n  .md ion-list-header,\n  .md ion-item-divider {\n    margin-left: 0;\n    padding-left: 16px;\n    border-bottom: 1px solid #dedede;\n    font-size: 1.4rem;\n    color: #858585; }\n  .md ion-list {\n    margin: 0 0 16px 0; }\n    .md ion-list .item .item-inner {\n      border-bottom: 1px solid #dedede; }\n    .md ion-list > .item:first-child,\n    .md ion-list > .item-wrapper:first-child .item {\n      border-top: 1px solid #dedede; }\n    .md ion-list > .item:last-child,\n    .md ion-list > .item-wrapper:last-child .item {\n      border-bottom: 1px solid #dedede; }\n    .md ion-list > .item:last-child ion-label,\n    .md ion-list > .item:last-child .item-inner,\n    .md ion-list > .item-wrapper:last-child ion-label,\n    .md ion-list > .item-wrapper:last-child .item-inner {\n      border-bottom: 0; }\n    .md ion-list > ion-input:last-child::after {\n      left: 0; }\n    .md ion-list ion-item-options {\n      border-bottom: 1px solid #dedede; }\n    .md ion-list ion-item-options button,\n    .md ion-list ion-item-options [button] {\n      display: -webkit-inline-box;\n      display: -webkit-inline-flex;\n      display: -ms-inline-flexbox;\n      display: inline-flex;\n      -webkit-box-align: center;\n      -webkit-align-items: center;\n      -ms-flex-align: center;\n      align-items: center;\n      margin: 1px 0;\n      height: calc(100% - 2px);\n      border: 0;\n      border-radius: 0;\n      box-shadow: none;\n      box-sizing: border-box; }\n      .md ion-list ion-item-options button::before,\n      .md ion-list ion-item-options [button]::before {\n        margin: 0 auto; }\n    .md ion-list .item[no-lines],\n    .md ion-list .item[no-lines] .item-inner {\n      border-width: 0; }\n    .md ion-list + ion-list ion-list-header {\n      margin-top: -16px;\n      padding-top: 0; }\n  .md ion-list[inset] {\n    margin: 16px 16px 16px 16px;\n    border-radius: 2px; }\n    .md ion-list[inset] .item:first-child {\n      border-top-width: 0;\n      border-top-left-radius: 2px;\n      border-top-right-radius: 2px; }\n    .md ion-list[inset] .item:last-child {\n      border-bottom-width: 0;\n      border-bottom-left-radius: 2px;\n      border-bottom-right-radius: 2px; }\n    .md ion-list[inset] .item-input {\n      padding-right: 0;\n      padding-left: 0; }\n    .md ion-list[inset] + ion-list[inset] {\n      margin-top: 0; }\n    .md ion-list[inset] ion-list-header {\n      background-color: #fff; }\n  .md ion-list[no-lines] .item,\n  .md ion-list[no-lines] ion-item-options,\n  .md ion-list[no-lines] .item .item-inner {\n    border-width: 0; }\n  .md ion-loading {\n    position: absolute;\n    top: 0;\n    right: 0;\n    bottom: 0;\n    left: 0;\n    z-index: 1000;\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    -webkit-box-pack: center;\n    -webkit-justify-content: center;\n    -ms-flex-pack: center;\n    justify-content: center; }\n  .md .loading-wrapper {\n    z-index: 10;\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    opacity: 0; }\n  .md .loading-wrapper {\n    padding: 24px;\n    max-width: 280px;\n    max-height: 90%;\n    border-radius: 2px;\n    color: rgba(0, 0, 0, 0.5);\n    background: #fafafa;\n    box-shadow: 0 16px 20px rgba(0, 0, 0, 0.4); }\n  .md .loading-spinner + .loading-content {\n    margin-left: 16px; }\n  .md .loading-spinner .spinner-ios line,\n  .md .loading-spinner .spinner-ios-small line {\n    stroke: #327eff; }\n  .md .loading-spinner .spinner-bubbles circle {\n    fill: #327eff; }\n  .md .loading-spinner .spinner-circles circle {\n    fill: #327eff; }\n  .md .loading-spinner .spinner-crescent circle {\n    stroke: #327eff; }\n  .md .loading-spinner .spinner-dots circle {\n    fill: #327eff; }\n  .md .menu-inner {\n    background: #fff; }\n  .md .menu-content-reveal {\n    box-shadow: 0 0 10px rgba(0, 0, 0, 0.25); }\n  .md .menu-content-push {\n    box-shadow: 0 0 10px rgba(0, 0, 0, 0.25); }\n  .md ion-menu[type=overlay] .menu-inner {\n    box-shadow: 0 0 10px rgba(0, 0, 0, 0.25); }\n  .md .modal-wrapper {\n    opacity: .01;\n    -webkit-transform: translate3d(0, 40px, 0);\n    transform: translate3d(0, 40px, 0); }\n  .md ion-picker-cmp {\n    position: absolute;\n    top: 0;\n    left: 0;\n    z-index: 1000;\n    display: block;\n    width: 100%;\n    height: 100%; }\n  .md .picker-toolbar {\n    z-index: 1; }\n  .md .picker-wrapper {\n    position: absolute;\n    right: 0;\n    bottom: 0;\n    left: 0;\n    z-index: 10;\n    display: -webkit-box;\n    display: -webkit-flex;\n    display: -ms-flexbox;\n    display: flex;\n    overflow: hidden;\n    -webkit-box-orient: vertical;\n    -webkit-box-direction: normal;\n    -webkit-flex-direction: column;\n    -ms-flex-direction: column;\n    flex-direction: column;\n    margin: auto;\n    width: 100%;\n    max-width: 500px;\n    -webkit-transform: translate3d(0, 100%, 0);\n    transform: translate3d(0, 100%, 0); }\n  .md .picker-columns {\n    position: relative;\n    display: -webkit-box;\n    display: -webkit-flex;\n    display: -ms-flexbox;\n    display: flex;\n    overflow: hidden;\n    -webkit-box-pack: center;\n    -webkit-justify-content: center;\n    -ms-flex-pack: center;\n    justify-content: center; }\n  .md .picker-col {\n    position: relative;\n    display: -webkit-box;\n    display: -webkit-flex;\n    display: -ms-flexbox;\n    display: flex;\n    max-height: 100%; }\n  .md .picker-opts {\n    position: relative;\n    width: 100%;\n    min-width: 50px;\n    max-width: 100%; }\n  .md .picker-prefix {\n    position: relative;\n    -webkit-box-flex: 1;\n    -webkit-flex: 1;\n    -ms-flex: 1;\n    flex: 1;\n    min-width: 50px;\n    min-width: 45%;\n    text-align: right;\n    white-space: nowrap; }\n  .md .picker-suffix {\n    position: relative;\n    -webkit-box-flex: 1;\n    -webkit-flex: 1;\n    -ms-flex: 1;\n    flex: 1;\n    min-width: 50px;\n    min-width: 45%;\n    text-align: left;\n    white-space: nowrap; }\n  .md .picker-opt {\n    position: absolute;\n    top: 0;\n    left: 0;\n    overflow: hidden;\n    -webkit-box-flex: 1;\n    -webkit-flex: 1;\n    -ms-flex: 1;\n    flex: 1;\n    width: 100%; }\n  .md .picker-opt .button-inner {\n    display: block;\n    overflow: hidden;\n    text-overflow: ellipsis;\n    white-space: nowrap;\n    -webkit-transition: opacity 150ms ease-in-out;\n    transition: opacity 150ms ease-in-out; }\n  .md .picker-opt.picker-opt-disabled {\n    pointer-events: none; }\n  .md .picker-opt-disabled .button-inner {\n    opacity: 0; }\n  .md .picker-opts-left .button-inner {\n    -webkit-box-pack: start;\n    -webkit-justify-content: flex-start;\n    -ms-flex-pack: start;\n    justify-content: flex-start; }\n  .md .picker-opts-right .button-inner {\n    -webkit-box-pack: end;\n    -webkit-justify-content: flex-end;\n    -ms-flex-pack: end;\n    justify-content: flex-end; }\n  .md .picker-above-highlight,\n  .md .picker-below-highlight {\n    display: none;\n    pointer-events: none; }\n  .md .picker-wrapper {\n    height: 260px;\n    border-top: 1px solid #dedede;\n    background: #fff; }\n  .md .picker-toolbar {\n    display: -webkit-box;\n    display: -webkit-flex;\n    display: -ms-flexbox;\n    display: flex;\n    -webkit-box-pack: end;\n    -webkit-justify-content: flex-end;\n    -ms-flex-pack: end;\n    justify-content: flex-end;\n    height: 44px;\n    background: #fff; }\n  .md .hairlines .picker-wrapper,\n  .md .hairlines .picker-toolbar {\n    border-width: 0.55px; }\n  .md .picker-button,\n  .md .picker-button.activated {\n    margin: 0;\n    height: 44px;\n    color: #327eff;\n    background: transparent;\n    box-shadow: none; }\n  .md .picker-columns {\n    height: 216px;\n    -webkit-perspective: 1800px;\n    perspective: 1800px; }\n  .md .picker-col {\n    padding: 0 8px;\n    -webkit-transform-style: preserve-3d;\n    transform-style: preserve-3d; }\n  .md .picker-prefix,\n  .md .picker-suffix,\n  .md .picker-opts {\n    top: 77px;\n    font-size: 18px;\n    line-height: 42px;\n    color: #000;\n    -webkit-transform-style: preserve-3d;\n    transform-style: preserve-3d;\n    pointer-events: none; }\n  .md .picker-opts ion-button-effect {\n    display: none; }\n  .md .picker-opt {\n    margin: 0;\n    padding: 0;\n    font-size: 18px;\n    line-height: 42px;\n    background: transparent;\n    -webkit-transition-timing-function: ease-out;\n    transition-timing-function: ease-out;\n    -webkit-backface-visibility: hidden;\n    backface-visibility: hidden;\n    pointer-events: auto; }\n  .md .picker-opt .button-inner {\n    -webkit-transition: 200ms;\n    transition: 200ms; }\n  .md .picker-prefix,\n  .md .picker-suffix,\n  .md .picker-opt-selected {\n    font-size: 22px;\n    color: #327eff; }\n  .md .picker-above-highlight {\n    position: absolute;\n    top: 0;\n    left: 0;\n    z-index: 10;\n    width: 100%;\n    height: 81px;\n    border-bottom: 1px solid #dedede;\n    background: -webkit-linear-gradient(top, white 20%, rgba(255, 255, 255, 0.7) 100%);\n    background: linear-gradient(to bottom, white 20%, rgba(255, 255, 255, 0.7) 100%);\n    -webkit-transform: translate3d(0, 0, 90px);\n    transform: translate3d(0, 0, 90px); }\n  .md .picker-below-highlight {\n    position: absolute;\n    top: 115px;\n    left: 0;\n    z-index: 11;\n    width: 100%;\n    height: 119px;\n    border-top: 1px solid #dedede;\n    background: -webkit-linear-gradient(bottom, white 30%, rgba(255, 255, 255, 0.7) 100%);\n    background: linear-gradient(to top, white 30%, rgba(255, 255, 255, 0.7) 100%);\n    -webkit-transform: translate3d(0, 0, 90px);\n    transform: translate3d(0, 0, 90px); }\n  .md ion-popover {\n    position: absolute;\n    top: 0;\n    right: 0;\n    bottom: 0;\n    left: 0;\n    z-index: 1000;\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    -webkit-box-pack: center;\n    -webkit-justify-content: center;\n    -ms-flex-pack: center;\n    justify-content: center; }\n  .md .popover-wrapper {\n    z-index: 10;\n    opacity: 0; }\n  .md .popover-content {\n    position: absolute;\n    z-index: 10;\n    display: -webkit-box;\n    display: -webkit-flex;\n    display: -ms-flexbox;\n    display: flex;\n    overflow: auto;\n    -webkit-box-orient: vertical;\n    -webkit-box-direction: normal;\n    -webkit-flex-direction: column;\n    -ms-flex-direction: column;\n    flex-direction: column; }\n    .md .popover-content scroll-content {\n      position: relative; }\n  .md .popover-content {\n    width: 250px;\n    min-width: 0;\n    min-height: 0;\n    max-height: 90%;\n    border-radius: 2px;\n    color: #000;\n    background: #fafafa;\n    box-shadow: 0 3px 12px 2px rgba(0, 0, 0, 0.3);\n    -webkit-transform-origin: top left;\n    transform-origin: top left; }\n    .md .popover-content ion-content {\n      background: #fafafa; }\n  .md .popover-content .item {\n    background-color: #fafafa; }\n  .md .popover-viewport {\n    opacity: 0;\n    -webkit-transition-delay: 100ms;\n    transition-delay: 100ms; }\n  .md ion-radio {\n    position: relative;\n    display: inline-block; }\n  .md .radio-icon {\n    position: relative;\n    top: 0;\n    left: 0;\n    display: block;\n    margin: 0;\n    width: 16px;\n    height: 16px;\n    border-width: 2px;\n    border-style: solid;\n    border-radius: 50%;\n    border-color: #787878; }\n  .md .radio-inner {\n    position: absolute;\n    top: 2px;\n    left: 2px;\n    width: 8px;\n    height: 8px;\n    border-radius: 50%;\n    background-color: #327eff;\n    -webkit-transform: scale3d(0, 0, 0);\n    transform: scale3d(0, 0, 0);\n    -webkit-transition: -webkit-transform 280ms cubic-bezier(0.4, 0, 0.2, 1);\n    transition: transform 280ms cubic-bezier(0.4, 0, 0.2, 1); }\n  .md .radio-checked {\n    border-color: #327eff; }\n  .md .radio-checked .radio-inner {\n    -webkit-transform: scale3d(1, 1, 1);\n    transform: scale3d(1, 1, 1); }\n  .md .radio-disabled,\n  .md .item-radio-disabled ion-label {\n    opacity: 0.3;\n    pointer-events: none; }\n  .md .item ion-radio {\n    position: static;\n    display: block;\n    margin: 9px 10px 9px 0; }\n    .md .item ion-radio[item-left] {\n      margin: 11px 36px 10px 4px; }\n  .md .item-radio ion-label {\n    margin-left: 0; }\n  .md .item-radio-checked ion-label {\n    color: #327eff; }\n  .md .item-radio-primary.item-radio-checked ion-label {\n    color: #327eff; }\n  .md .radio-primary .radio-checked {\n    border-color: #327eff; }\n  .md .radio-primary .radio-inner {\n    background-color: #327eff; }\n  .md .item-radio-secondary.item-radio-checked ion-label {\n    color: #32db64; }\n  .md .radio-secondary .radio-checked {\n    border-color: #32db64; }\n  .md .radio-secondary .radio-inner {\n    background-color: #32db64; }\n  .md .item-radio-danger.item-radio-checked ion-label {\n    color: #f53d3d; }\n  .md .radio-danger .radio-checked {\n    border-color: #f53d3d; }\n  .md .radio-danger .radio-inner {\n    background-color: #f53d3d; }\n  .md .item-radio-light.item-radio-checked ion-label {\n    color: #f4f4f4; }\n  .md .radio-light .radio-checked {\n    border-color: #f4f4f4; }\n  .md .radio-light .radio-inner {\n    background-color: #f4f4f4; }\n  .md .item-radio-dark.item-radio-checked ion-label {\n    color: #222; }\n  .md .radio-dark .radio-checked {\n    border-color: #222; }\n  .md .radio-dark .radio-inner {\n    background-color: #222; }\n  .md .item-range .item-inner {\n    overflow: visible; }\n  .md .item-range .input-wrapper {\n    overflow: visible;\n    -webkit-box-orient: vertical;\n    -webkit-box-direction: normal;\n    -webkit-flex-direction: column;\n    -ms-flex-direction: column;\n    flex-direction: column; }\n  .md .item-range ion-range {\n    width: 100%; }\n    .md .item-range ion-range ion-label {\n      -webkit-align-self: center;\n      -ms-flex-item-align: center;\n      align-self: center; }\n  .md ion-range {\n    position: relative;\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    .md ion-range ion-label {\n      -webkit-box-flex: initial;\n      -webkit-flex: initial;\n      -ms-flex: initial;\n      flex: initial; }\n    .md ion-range ion-icon {\n      min-height: 2.4rem;\n      font-size: 2.4rem;\n      line-height: 1; }\n  .md .range-slider {\n    position: relative;\n    -webkit-box-flex: 1;\n    -webkit-flex: 1;\n    -ms-flex: 1;\n    flex: 1;\n    cursor: pointer; }\n  .md ion-range {\n    padding: 8px 8px; }\n  .md [range-left],\n  .md [range-right] {\n    margin: 0 12px; }\n  .md [range-left] {\n    margin-left: 0; }\n  .md [range-right] {\n    margin-right: 0; }\n  .md .range-has-pin {\n    padding-top: 28px; }\n  .md .range-slider {\n    height: 42px; }\n  .md .range-bar {\n    position: absolute;\n    top: 21px;\n    left: 0;\n    width: 100%;\n    height: 2px;\n    background: #bdbdbd;\n    pointer-events: none; }\n  .md .range-pressed .range-bar-active {\n    will-change: left, right; }\n  .md .range-pressed .range-knob-handle {\n    will-change: left; }\n  .md .range-bar-active {\n    bottom: 0;\n    width: auto;\n    background: #327eff; }\n  .md .range-knob-handle {\n    position: absolute;\n    top: 21px;\n    left: 0%;\n    margin-top: -21px;\n    margin-left: -21px;\n    width: 42px;\n    height: 42px;\n    text-align: center; }\n  .md .range-knob {\n    position: absolute;\n    top: 13px;\n    left: 12px;\n    z-index: 2;\n    width: 18px;\n    height: 18px;\n    border-radius: 50%;\n    background: #327eff;\n    -webkit-transform: scale(0.67);\n    transform: scale(0.67);\n    -webkit-transition-duration: 120ms;\n    transition-duration: 120ms;\n    -webkit-transition-property: -webkit-transform, background-color, border;\n    transition-property: transform, background-color, border;\n    -webkit-transition-timing-function: ease;\n    transition-timing-function: ease;\n    pointer-events: none; }\n  .md .range-tick {\n    position: absolute;\n    top: 21px;\n    z-index: 1;\n    margin-left: -1px;\n    width: 2px;\n    height: 2px;\n    border-radius: 50%;\n    background: #000;\n    pointer-events: none; }\n  .md .range-tick-active {\n    background: #000; }\n  .md .range-pin {\n    position: relative;\n    top: -20px;\n    display: inline-block;\n    padding: 8px 0;\n    min-width: 28px;\n    height: 28px;\n    border-radius: 50%;\n    font-size: 12px;\n    text-align: center;\n    color: #fff;\n    background: #327eff;\n    -webkit-transform: translate3d(0, 28px, 0) scale(0.01);\n    transform: translate3d(0, 28px, 0) scale(0.01);\n    -webkit-transition: -webkit-transform 120ms ease, background-color 120ms ease;\n    transition: transform 120ms ease, background-color 120ms ease; }\n    .md .range-pin::before {\n      position: absolute;\n      top: 3px;\n      left: 50%;\n      z-index: -1;\n      margin-left: -13px;\n      width: 26px;\n      height: 26px;\n      border-radius: 50% 50% 50% 0;\n      background: #327eff;\n      content: \"\";\n      -webkit-transform: rotate(-45deg);\n      transform: rotate(-45deg);\n      -webkit-transition: background-color 120ms ease;\n      transition: background-color 120ms ease; }\n  .md .range-knob-pressed .range-pin {\n    -webkit-transform: translate3d(0, 0, 0) scale(1);\n    transform: translate3d(0, 0, 0) scale(1); }\n  .md ion-range:not(.range-has-pin) .range-knob-pressed .range-knob {\n    -webkit-transform: scale(1);\n    transform: scale(1); }\n  .md .range-knob-min .range-knob {\n    border: 2px solid #bdbdbd;\n    background: #fff; }\n  .md .range-knob-min .range-pin,\n  .md .range-knob-min .range-pin::before {\n    color: #fff;\n    background: #bdbdbd; }\n  .md .range-disabled .range-bar-active {\n    background-color: #bdbdbd; }\n  .md .range-disabled .range-knob {\n    outline: 5px solid #fff;\n    background-color: #bdbdbd;\n    -webkit-transform: scale(0.55);\n    transform: scale(0.55); }\n  .md .range-primary .range-knob-min .range-knob {\n    border: 2px solid #bdbdbd;\n    background: #fff; }\n  .md .range-primary .range-knob-min .range-pin,\n  .md .range-primary .range-knob-min .range-pin::before {\n    color: #fff;\n    background: #bdbdbd; }\n  .md .range-primary .range-bar-active,\n  .md .range-primary .range-knob,\n  .md .range-primary .range-pin,\n  .md .range-primary .range-pin::before {\n    background: #327eff; }\n  .md .range-secondary .range-knob-min .range-knob {\n    border: 2px solid #bdbdbd;\n    background: #fff; }\n  .md .range-secondary .range-knob-min .range-pin,\n  .md .range-secondary .range-knob-min .range-pin::before {\n    color: #fff;\n    background: #bdbdbd; }\n  .md .range-secondary .range-bar-active,\n  .md .range-secondary .range-knob,\n  .md .range-secondary .range-pin,\n  .md .range-secondary .range-pin::before {\n    background: #32db64; }\n  .md .range-danger .range-knob-min .range-knob {\n    border: 2px solid #bdbdbd;\n    background: #fff; }\n  .md .range-danger .range-knob-min .range-pin,\n  .md .range-danger .range-knob-min .range-pin::before {\n    color: #fff;\n    background: #bdbdbd; }\n  .md .range-danger .range-bar-active,\n  .md .range-danger .range-knob,\n  .md .range-danger .range-pin,\n  .md .range-danger .range-pin::before {\n    background: #f53d3d; }\n  .md .range-light .range-knob-min .range-knob {\n    border: 2px solid #bdbdbd;\n    background: #fff; }\n  .md .range-light .range-knob-min .range-pin,\n  .md .range-light .range-knob-min .range-pin::before {\n    color: #fff;\n    background: #bdbdbd; }\n  .md .range-light .range-bar-active,\n  .md .range-light .range-knob,\n  .md .range-light .range-pin,\n  .md .range-light .range-pin::before {\n    background: #f4f4f4; }\n  .md .range-dark .range-knob-min .range-knob {\n    border: 2px solid #bdbdbd;\n    background: #fff; }\n  .md .range-dark .range-knob-min .range-pin,\n  .md .range-dark .range-knob-min .range-pin::before {\n    color: #fff;\n    background: #bdbdbd; }\n  .md .range-dark .range-bar-active,\n  .md .range-dark .range-knob,\n  .md .range-dark .range-pin,\n  .md .range-dark .range-pin::before {\n    background: #222; }\n  .md ion-searchbar {\n    position: relative;\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    width: 100%; }\n  .md .searchbar-icon {\n    pointer-events: none; }\n  .md .searchbar-input-container {\n    position: relative;\n    display: block;\n    -webkit-flex-shrink: 1;\n    -ms-flex-negative: 1;\n    flex-shrink: 1;\n    width: 100%; }\n  .md .searchbar-input {\n    -webkit-appearance: none;\n    -moz-appearance: none;\n    display: block;\n    width: 100%;\n    border: 0;\n    font-family: inherit; }\n  .md .searchbar-clear-icon {\n    display: none;\n    margin: 0;\n    padding: 0;\n    min-height: 0; }\n  .md .searchbar-has-value.searchbar-has-focus .searchbar-clear-icon {\n    display: block; }\n  .md ion-searchbar {\n    padding: 8px;\n    background: inherit; }\n  .md .searchbar-search-icon {\n    background-image: url(\"data:image/svg+xml;charset=utf-8,<svg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%20512%20512'><path%20fill='%235b5b5b'%20d='M337.509,305.372h-17.501l-6.571-5.486c20.791-25.232,33.922-57.054,33.922-93.257C347.358,127.632,283.896,64,205.135,64C127.452,64,64,127.632,64,206.629s63.452,142.628,142.225,142.628c35.011,0,67.831-13.167,92.991-34.008l6.561,5.487v17.551L415.18,448L448,415.086L337.509,305.372z%20M206.225,305.372c-54.702,0-98.463-43.887-98.463-98.743c0-54.858,43.761-98.742,98.463-98.742c54.7,0,98.462,43.884,98.462,98.742C304.687,261.485,260.925,305.372,206.225,305.372z'/></svg>\");\n    top: 11px;\n    left: 16px;\n    width: 21px;\n    height: 21px; }\n  .md .searchbar-md-cancel {\n    top: 0;\n    left: 10px;\n    display: none;\n    margin: 0;\n    width: 21px;\n    height: 100%; }\n  .md .searchbar-search-icon,\n  .md .searchbar-md-cancel {\n    position: absolute;\n    background-repeat: no-repeat;\n    background-size: 20px; }\n    .md .searchbar-search-icon.activated,\n    .md .searchbar-md-cancel.activated {\n      background-color: transparent; }\n  .md .searchbar-input {\n    padding: 6px 55px;\n    height: auto;\n    border-radius: 2px;\n    font-size: 1.6rem;\n    font-weight: 400;\n    line-height: 3rem;\n    color: #141414;\n    background-color: #fff;\n    background-position: 8px center;\n    box-shadow: 0 2px 2px 0 rgba(0, 0, 0, 0.14), 0 3px 1px -2px rgba(0, 0, 0, 0.2), 0 1px 5px 0 rgba(0, 0, 0, 0.12); }\n    .md .searchbar-input::-moz-placeholder {\n      color: #aeaeae; }\n    .md .searchbar-input:-ms-input-placeholder {\n      color: #aeaeae; }\n    .md .searchbar-input::-webkit-input-placeholder {\n      text-indent: 0;\n      color: #aeaeae; }\n  .md .searchbar-clear-icon {\n    background-image: url(\"data:image/svg+xml;charset=utf-8,<svg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%20512%20512'><polygon%20fill='%235b5b5b'%20points='405,136.798%20375.202,107%20256,226.202%20136.798,107%20107,136.798%20226.202,256%20107,375.202%20136.798,405%20256,285.798%20375.202,405%20405,375.202%20285.798,256'/></svg>\");\n    position: absolute;\n    top: 0;\n    right: 13px;\n    padding: 0;\n    width: 22px;\n    height: 100%;\n    background-repeat: no-repeat;\n    background-position: center;\n    background-size: 22px; }\n    .md .searchbar-clear-icon.activated {\n      background-color: transparent; }\n  .md .searchbar-has-focus.searchbar-show-cancel .searchbar-search-icon {\n    display: none; }\n  .md .searchbar-has-focus.searchbar-show-cancel .searchbar-md-cancel {\n    display: -webkit-inline-box;\n    display: -webkit-inline-flex;\n    display: -ms-inline-flexbox;\n    display: inline-flex; }\n  .md .toolbar ion-searchbar {\n    padding: 3px; }\n  .md .toolbar .searchbar-md-cancel {\n    left: 14px; }\n  .md .searchbar-ios-cancel {\n    display: none; }\n  .md ion-segment {\n    display: -webkit-box;\n    display: -webkit-flex;\n    display: -ms-flexbox;\n    display: flex;\n    -webkit-box-flex: 1;\n    -webkit-flex: 1;\n    -ms-flex: 1;\n    flex: 1;\n    -webkit-box-align: center;\n    -webkit-align-items: center;\n    -ms-flex-align: center;\n    align-items: center;\n    -webkit-box-pack: center;\n    -webkit-justify-content: center;\n    -ms-flex-pack: center;\n    justify-content: center;\n    width: 100%; }\n  .md .segment-button {\n    position: relative;\n    display: block;\n    overflow: hidden;\n    margin-right: 0;\n    margin-left: 0;\n    text-align: center;\n    text-overflow: ellipsis;\n    white-space: nowrap;\n    cursor: pointer; }\n  .md .segment-button {\n    -webkit-box-flex: 1;\n    -webkit-flex: 1;\n    -ms-flex: 1;\n    flex: 1;\n    padding: 0 6px;\n    width: 0;\n    height: 4.2rem;\n    border-bottom-width: 2px;\n    border-bottom-style: solid;\n    border-bottom-color: rgba(0, 0, 0, 0.1);\n    font-size: 1.2rem;\n    font-weight: 500;\n    line-height: 4rem;\n    text-transform: uppercase;\n    color: #327eff;\n    background-color: transparent;\n    opacity: 0.7;\n    -webkit-transition: 100ms all linear;\n    transition: 100ms all linear; }\n    .md .segment-button ion-icon {\n      font-size: 2.6rem;\n      line-height: 4rem; }\n    .md .segment-button.activated, .md .segment-button.segment-activated {\n      border-color: #327eff;\n      opacity: 1; }\n  .md .segment-button-disabled {\n    opacity: 0.3;\n    pointer-events: none; }\n  .md .toolbar ion-segment {\n    margin: 0 auto; }\n  .md .toolbar .segment-button.activated,\n  .md .toolbar .segment-button.segment-activated {\n    opacity: 1; }\n  .md .segment-primary .segment-button {\n    color: #327eff; }\n    .md .segment-primary .segment-button.activated, .md .segment-primary .segment-button.segment-activated {\n      border-color: #327eff;\n      color: #327eff;\n      opacity: 1; }\n  .md .segment-secondary .segment-button {\n    color: #32db64; }\n    .md .segment-secondary .segment-button.activated, .md .segment-secondary .segment-button.segment-activated {\n      border-color: #32db64;\n      color: #32db64;\n      opacity: 1; }\n  .md .segment-danger .segment-button {\n    color: #f53d3d; }\n    .md .segment-danger .segment-button.activated, .md .segment-danger .segment-button.segment-activated {\n      border-color: #f53d3d;\n      color: #f53d3d;\n      opacity: 1; }\n  .md .segment-light .segment-button {\n    color: #f4f4f4; }\n    .md .segment-light .segment-button.activated, .md .segment-light .segment-button.segment-activated {\n      border-color: #f4f4f4;\n      color: #f4f4f4;\n      opacity: 1; }\n  .md .segment-dark .segment-button {\n    color: #222; }\n    .md .segment-dark .segment-button.activated, .md .segment-dark .segment-button.segment-activated {\n      border-color: #222;\n      color: #222;\n      opacity: 1; }\n  .md ion-select {\n    display: -webkit-box;\n    display: -webkit-flex;\n    display: -ms-flexbox;\n    display: flex;\n    overflow: hidden;\n    max-width: 45%; }\n  .md .select-text {\n    overflow: hidden;\n    -webkit-box-flex: 1;\n    -webkit-flex: 1;\n    -ms-flex: 1;\n    flex: 1;\n    min-width: 16px;\n    font-size: inherit;\n    text-overflow: ellipsis;\n    white-space: nowrap; }\n  .md .item-multiple-inputs ion-select {\n    position: relative; }\n  .md .select-disabled,\n  .md .item-select-disabled ion-label {\n    opacity: .4;\n    pointer-events: none; }\n  .md ion-select {\n    padding: 13px 8px 13px 16px; }\n  .md .select-placeholder {\n    color: #999; }\n  .md .item-select ion-label {\n    margin-left: 0; }\n  .md .select-icon {\n    position: relative;\n    width: 12px;\n    height: 19px; }\n  .md .select-icon .select-icon-inner {\n    position: absolute;\n    top: 50%;\n    left: 5px;\n    margin-top: -3px;\n    width: 0;\n    height: 0;\n    border-top: 5px solid;\n    border-right: 5px solid transparent;\n    border-left: 5px solid transparent;\n    color: #999;\n    pointer-events: none; }\n  .md ion-spinner {\n    position: relative;\n    display: inline-block;\n    width: 28px;\n    height: 28px; }\n  .md ion-spinner svg {\n    position: absolute;\n    top: 0;\n    left: 0;\n    width: 100%;\n    height: 100%;\n    -webkit-transform: translateZ(0);\n    transform: translateZ(0); }\n  .md ion-spinner.spinner-paused svg {\n    -webkit-animation-play-state: paused;\n    animation-play-state: paused; }\n  .md .spinner-ios line,\n  .md .spinner-ios-small line {\n    stroke: #69717d;\n    stroke-width: 4px;\n    stroke-linecap: round; }\n  .md .spinner-ios svg,\n  .md .spinner-ios-small svg {\n    -webkit-animation: spinner-fade-out 1s linear infinite;\n    animation: spinner-fade-out 1s linear infinite; }\n  .md .spinner-bubbles circle {\n    fill: #000; }\n  .md .spinner-bubbles svg {\n    -webkit-animation: spinner-scale-out 1s linear infinite;\n    animation: spinner-scale-out 1s linear infinite; }\n  .md .spinner-circles circle {\n    fill: #69717d; }\n  .md .spinner-circles svg {\n    -webkit-animation: spinner-fade-out 1s linear infinite;\n    animation: spinner-fade-out 1s linear infinite; }\n  .md .spinner-crescent circle {\n    fill: transparent;\n    stroke: #000;\n    stroke-width: 4px;\n    stroke-dasharray: 128px;\n    stroke-dashoffset: 82px; }\n  .md .spinner-crescent svg {\n    -webkit-animation: spinner-rotate 1s linear infinite;\n    animation: spinner-rotate 1s linear infinite; }\n  .md .spinner-dots circle {\n    fill: #444;\n    stroke-width: 0; }\n  .md .spinner-dots svg {\n    -webkit-transform-origin: center;\n    transform-origin: center;\n    -webkit-animation: spinner-dots 1s linear infinite;\n    animation: spinner-dots 1s linear infinite; }\n\n@keyframes spinner-fade-out {\n  0% {\n    opacity: 1; }\n  100% {\n    opacity: 0; } }\n\n@keyframes spinner-scale-out {\n  0% {\n    -webkit-transform: scale(1, 1);\n    transform: scale(1, 1); }\n  100% {\n    -webkit-transform: scale(0, 0);\n    transform: scale(0, 0); } }\n\n@keyframes spinner-rotate {\n  0% {\n    -webkit-transform: rotate(0deg);\n    transform: rotate(0deg); }\n  100% {\n    -webkit-transform: rotate(360deg);\n    transform: rotate(360deg); } }\n\n@keyframes spinner-dots {\n  0% {\n    opacity: .9;\n    -webkit-transform: scale(1, 1);\n    transform: scale(1, 1); }\n  50% {\n    opacity: .3;\n    -webkit-transform: scale(0.4, 0.4);\n    transform: scale(0.4, 0.4); }\n  100% {\n    opacity: .9;\n    -webkit-transform: scale(1, 1);\n    transform: scale(1, 1); } }\n  .md .spinner-primary.spinner-ios line,\n  .md .spinner-primary.spinner-ios-small line,\n  .md .spinner-primary.spinner-crescent circle {\n    stroke: #327eff; }\n  .md .spinner-primary.spinner-bubbles circle,\n  .md .spinner-primary.spinner-circles circle,\n  .md .spinner-primary.spinner-dots circle {\n    fill: #327eff; }\n  .md .spinner-secondary.spinner-ios line,\n  .md .spinner-secondary.spinner-ios-small line,\n  .md .spinner-secondary.spinner-crescent circle {\n    stroke: #32db64; }\n  .md .spinner-secondary.spinner-bubbles circle,\n  .md .spinner-secondary.spinner-circles circle,\n  .md .spinner-secondary.spinner-dots circle {\n    fill: #32db64; }\n  .md .spinner-danger.spinner-ios line,\n  .md .spinner-danger.spinner-ios-small line,\n  .md .spinner-danger.spinner-crescent circle {\n    stroke: #f53d3d; }\n  .md .spinner-danger.spinner-bubbles circle,\n  .md .spinner-danger.spinner-circles circle,\n  .md .spinner-danger.spinner-dots circle {\n    fill: #f53d3d; }\n  .md .spinner-light.spinner-ios line,\n  .md .spinner-light.spinner-ios-small line,\n  .md .spinner-light.spinner-crescent circle {\n    stroke: #f4f4f4; }\n  .md .spinner-light.spinner-bubbles circle,\n  .md .spinner-light.spinner-circles circle,\n  .md .spinner-light.spinner-dots circle {\n    fill: #f4f4f4; }\n  .md .spinner-dark.spinner-ios line,\n  .md .spinner-dark.spinner-ios-small line,\n  .md .spinner-dark.spinner-crescent circle {\n    stroke: #222; }\n  .md .spinner-dark.spinner-bubbles circle,\n  .md .spinner-dark.spinner-circles circle,\n  .md .spinner-dark.spinner-dots circle {\n    fill: #222; }\n  .md .tab-button {\n    -webkit-user-select: none;\n    -moz-user-select: none;\n    -ms-user-select: none;\n    user-select: none;\n    position: relative;\n    z-index: 0;\n    display: -webkit-box;\n    display: -webkit-flex;\n    display: -ms-flexbox;\n    display: flex;\n    overflow: hidden;\n    -webkit-box-flex: 1;\n    -webkit-flex: 1;\n    -ms-flex: 1;\n    flex: 1;\n    -webkit-box-orient: vertical;\n    -webkit-box-direction: normal;\n    -webkit-flex-direction: column;\n    -ms-flex-direction: column;\n    flex-direction: column;\n    -webkit-box-align: center;\n    -webkit-align-items: center;\n    -ms-flex-align: center;\n    align-items: center;\n    -webkit-align-self: center;\n    -ms-flex-item-align: center;\n    align-self: center;\n    -webkit-box-pack: center;\n    -webkit-justify-content: center;\n    -ms-flex-pack: center;\n    justify-content: center;\n    margin: 0;\n    border: 0;\n    border-radius: 0;\n    text-align: center;\n    text-decoration: none;\n    background: none;\n    cursor: pointer; }\n  .md .tab-disabled {\n    pointer-events: none; }\n    .md .tab-disabled ion-badge,\n    .md .tab-disabled ion-icon,\n    .md .tab-disabled span {\n      opacity: .4; }\n  .md .tab-hidden {\n    display: none; }\n  .md .tab-button-text {\n    margin-top: 3px;\n    margin-bottom: 2px; }\n  .md .tab-button-text,\n  .md .tab-button-icon {\n    display: none;\n    overflow: hidden;\n    -webkit-align-self: center;\n    -ms-flex-item-align: center;\n    align-self: center;\n    min-width: 26px;\n    max-width: 100%;\n    text-overflow: ellipsis;\n    white-space: nowrap; }\n  .md .has-icon .tab-button-icon,\n  .md .has-title .tab-button-text {\n    display: block; }\n  .md .has-title-only .tab-button-text {\n    white-space: normal; }\n  .md tab-highlight {\n    display: none; }\n  .md [tabsLayout=icon-bottom] .tab-button .tab-button-icon {\n    -webkit-box-ordinal-group: 11;\n    -webkit-order: 10;\n    -ms-flex-order: 10;\n    order: 10; }\n  .md [tabsLayout=icon-left] .tab-button {\n    -webkit-box-orient: horizontal;\n    -webkit-box-direction: normal;\n    -webkit-flex-direction: row;\n    -ms-flex-direction: row;\n    flex-direction: row; }\n    .md [tabsLayout=icon-left] .tab-button .tab-button-icon {\n      padding-right: 8px;\n      text-align: right; }\n  .md [tabsLayout=icon-right] .tab-button {\n    -webkit-box-orient: horizontal;\n    -webkit-box-direction: normal;\n    -webkit-flex-direction: row;\n    -ms-flex-direction: row;\n    flex-direction: row; }\n    .md [tabsLayout=icon-right] .tab-button .tab-button-icon {\n      -webkit-box-ordinal-group: 11;\n      -webkit-order: 10;\n      -ms-flex-order: 10;\n      order: 10;\n      padding-left: 8px;\n      text-align: left; }\n  .md [tabsLayout=icon-hide] .tab-button-icon {\n    display: none; }\n  .md [tabsLayout=title-hide] .tab-button-text {\n    display: none; }\n  .md .tab-badge {\n    position: absolute;\n    top: 6%;\n    right: 4%;\n    right: calc(50% - 50px);\n    padding: 1px 6px;\n    height: auto;\n    font-size: 12px;\n    line-height: 16px; }\n  .md .has-icon .tab-badge {\n    right: calc(50% - 30px); }\n  .md [tabsLayout=icon-bottom] .tab-badge,\n  .md [tabsLayout=icon-left] .tab-badge,\n  .md [tabsLayout=icon-right] .tab-badge {\n    right: calc(50% - 50px); }\n  .md ion-tabbar {\n    background: #f8f8f8; }\n  .md .tab-button {\n    padding: 8px 0 10px 0;\n    min-height: 5.6rem;\n    font-weight: normal;\n    color: rgba(140, 140, 140, 0.7); }\n    .md .tab-button[aria-selected=true] {\n      padding: 6px 0 10px 0;\n      font-size: 1.4rem;\n      color: #327eff; }\n  .md .tab-button-text {\n    margin: 6px 0;\n    text-transform: none;\n    -webkit-transform: scale(0.85);\n    transform: scale(0.85);\n    -webkit-transform-origin: bottom center;\n    transform-origin: bottom center;\n    -webkit-transition: -webkit-transform 200ms ease-in-out;\n    transition: transform 200ms ease-in-out; }\n  .md .tab-button[aria-selected=true] .tab-button-text {\n    margin: 7px 0;\n    -webkit-transform: scale(1);\n    transform: scale(1); }\n  .md .tab-button-icon {\n    min-width: 7.4rem;\n    font-size: 2.4rem; }\n  .md [tabsLayout=icon-top] .has-icon .tab-button-text {\n    margin-bottom: 0; }\n  .md [tabsLayout=icon-bottom] .tab-button {\n    padding-top: 8px;\n    padding-bottom: 8px; }\n    .md [tabsLayout=icon-bottom] .tab-button .tab-button-text {\n      margin-top: 0; }\n  .md [tabsLayout=icon-right] .tab-button,\n  .md [tabsLayout=icon-left] .tab-button {\n    padding-bottom: 10px; }\n    .md [tabsLayout=icon-right] .tab-button ion-icon,\n    .md [tabsLayout=icon-left] .tab-button ion-icon {\n      min-width: 24px; }\n  .md [tabsLayout=icon-hide] .tab-button,\n  .md [tabsLayout=title-hide] .tab-button,\n  .md .tab-button.icon-only,\n  .md .tab-button.has-title-only {\n    padding: 6px 10px; }\n  .md [tabsHighlight=true] tab-highlight {\n    position: absolute;\n    bottom: 0;\n    left: 0;\n    display: block;\n    width: 1px;\n    height: 2px;\n    background: #327eff;\n    -webkit-transform: translateZ(0);\n    transform: translateZ(0);\n    -webkit-transform-origin: 0 0;\n    transform-origin: 0 0; }\n    .md [tabsHighlight=true] tab-highlight.animate {\n      -webkit-transition-duration: 300ms;\n      transition-duration: 300ms; }\n  .md [tabsHighlight=true][tabsPlacement=bottom] tab-highlight {\n    top: 0; }\n  .md .tabs-primary ion-tabbar {\n    background-color: #327eff; }\n    .md .tabs-primary ion-tabbar .tab-button {\n      color: rgba(255, 255, 255, 0.7); }\n    .md .tabs-primary ion-tabbar .tab-button:hover:not(.disable-hover),\n    .md .tabs-primary ion-tabbar .tab-button[aria-selected=true] {\n      color: #fff; }\n    .md .tabs-primary ion-tabbar tab-highlight {\n      background: #fff; }\n  .md .tabs-secondary ion-tabbar {\n    background-color: #32db64; }\n    .md .tabs-secondary ion-tabbar .tab-button {\n      color: rgba(255, 255, 255, 0.7); }\n    .md .tabs-secondary ion-tabbar .tab-button:hover:not(.disable-hover),\n    .md .tabs-secondary ion-tabbar .tab-button[aria-selected=true] {\n      color: #fff; }\n    .md .tabs-secondary ion-tabbar tab-highlight {\n      background: #fff; }\n  .md .tabs-danger ion-tabbar {\n    background-color: #f53d3d; }\n    .md .tabs-danger ion-tabbar .tab-button {\n      color: rgba(255, 255, 255, 0.7); }\n    .md .tabs-danger ion-tabbar .tab-button:hover:not(.disable-hover),\n    .md .tabs-danger ion-tabbar .tab-button[aria-selected=true] {\n      color: #fff; }\n    .md .tabs-danger ion-tabbar tab-highlight {\n      background: #fff; }\n  .md .tabs-light ion-tabbar {\n    background-color: #f4f4f4; }\n    .md .tabs-light ion-tabbar .tab-button {\n      color: rgba(0, 0, 0, 0.7); }\n    .md .tabs-light ion-tabbar .tab-button:hover:not(.disable-hover),\n    .md .tabs-light ion-tabbar .tab-button[aria-selected=true] {\n      color: #000; }\n    .md .tabs-light ion-tabbar tab-highlight {\n      background: #000; }\n  .md .tabs-dark ion-tabbar {\n    background-color: #222; }\n    .md .tabs-dark ion-tabbar .tab-button {\n      color: rgba(255, 255, 255, 0.7); }\n    .md .tabs-dark ion-tabbar .tab-button:hover:not(.disable-hover),\n    .md .tabs-dark ion-tabbar .tab-button[aria-selected=true] {\n      color: #fff; }\n    .md .tabs-dark ion-tabbar tab-highlight {\n      background: #fff; }\n  .md ion-toggle {\n    position: relative; }\n  .md .toggle-icon {\n    position: relative;\n    display: block;\n    width: 36px;\n    height: 14px;\n    border-radius: 14px;\n    background-color: #dedede;\n    -webkit-transition: background-color 300ms;\n    transition: background-color 300ms;\n    pointer-events: none; }\n  .md .toggle-inner {\n    position: absolute;\n    top: -3px;\n    left: 0;\n    width: 20px;\n    height: 20px;\n    border-radius: 50%;\n    background-color: #fff;\n    box-shadow: 0 2px 2px 0 rgba(0, 0, 0, 0.14), 0 3px 1px -2px rgba(0, 0, 0, 0.2), 0 1px 5px 0 rgba(0, 0, 0, 0.12);\n    -webkit-transition-duration: 300ms;\n    transition-duration: 300ms;\n    -webkit-transition-property: -webkit-transform, background-color;\n    transition-property: transform, background-color; }\n  .md .toggle-checked {\n    background-color: #b2ceff; }\n  .md .toggle-checked .toggle-inner {\n    background-color: #327eff;\n    -webkit-transform: translate3d(16px, 0, 0);\n    transform: translate3d(16px, 0, 0); }\n  .md .toggle-disabled,\n  .md .item-toggle-disabled ion-label {\n    opacity: 0.3;\n    pointer-events: none; }\n  .md .toggle-disabled ion-radio {\n    opacity: 0.3; }\n  .md .item ion-toggle {\n    margin: 0;\n    padding: 12px 8px 12px 16px;\n    cursor: pointer; }\n    .md .item ion-toggle[item-left] {\n      padding: 12px 18px 12px 2px; }\n  .md .item-toggle ion-label {\n    margin-left: 0; }\n  .md .toggle-primary .toggle-checked {\n    background-color: #b2ceff; }\n  .md .toggle-primary .toggle-checked .toggle-inner {\n    background-color: #327eff; }\n  .md .toggle-secondary .toggle-checked {\n    background-color: #9eeeb6; }\n  .md .toggle-secondary .toggle-checked .toggle-inner {\n    background-color: #32db64; }\n  .md .toggle-danger .toggle-checked {\n    background-color: #fbb6b6; }\n  .md .toggle-danger .toggle-checked .toggle-inner {\n    background-color: #f53d3d; }\n  .md .toggle-light .toggle-checked {\n    background-color: white; }\n  .md .toggle-light .toggle-checked .toggle-inner {\n    background-color: #f4f4f4; }\n  .md .toggle-dark .toggle-checked {\n    background-color: #626262; }\n  .md .toggle-dark .toggle-checked .toggle-inner {\n    background-color: #222; }\n  .md ion-toast {\n    position: absolute;\n    top: 0;\n    left: 0;\n    z-index: 1000;\n    display: block;\n    width: 100%;\n    height: 100%;\n    pointer-events: none; }\n  .md .toast-container {\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    pointer-events: auto; }\n  .md .toast-button {\n    padding: 19px 16px 17px;\n    font-size: 1.5rem; }\n  .md .toast-message {\n    -webkit-box-flex: 1;\n    -webkit-flex: 1;\n    -ms-flex: 1;\n    flex: 1; }\n  .md .toast-wrapper {\n    position: absolute;\n    right: 0;\n    left: 0;\n    z-index: 10;\n    display: block;\n    margin: auto;\n    width: 100%;\n    max-width: 700px;\n    background: #333; }\n    .md .toast-wrapper.toast-top {\n      top: 0;\n      -webkit-transform: translate3d(0, -100%, 0);\n      transform: translate3d(0, -100%, 0); }\n    .md .toast-wrapper.toast-bottom {\n      bottom: 0;\n      -webkit-transform: translate3d(0, 100%, 0);\n      transform: translate3d(0, 100%, 0); }\n    .md .toast-wrapper.toast-middle {\n      opacity: .01; }\n  .md .toast-message {\n    padding: 19px 16px 17px;\n    font-size: 1.5rem;\n    color: #fff; }\n  .md .toolbar {\n    display: -webkit-box;\n    display: -webkit-flex;\n    display: -ms-flexbox;\n    display: flex;\n    overflow: hidden;\n    -webkit-box-orient: horizontal;\n    -webkit-box-direction: normal;\n    -webkit-flex-direction: row;\n    -ms-flex-direction: row;\n    flex-direction: row;\n    -webkit-box-align: center;\n    -webkit-align-items: center;\n    -ms-flex-align: center;\n    align-items: center;\n    -webkit-box-pack: justify;\n    -webkit-justify-content: space-between;\n    -ms-flex-pack: justify;\n    justify-content: space-between;\n    width: 100%; }\n  .md .toolbar-background {\n    position: absolute;\n    top: 0;\n    left: 0;\n    z-index: -1;\n    width: 100%;\n    height: 100%;\n    border: 0;\n    -webkit-transform: translateZ(0);\n    transform: translateZ(0);\n    pointer-events: none; }\n  .md ion-title {\n    display: -webkit-box;\n    display: -webkit-flex;\n    display: -ms-flexbox;\n    display: flex;\n    -webkit-box-flex: 1;\n    -webkit-flex: 1;\n    -ms-flex: 1;\n    flex: 1;\n    -webkit-box-align: center;\n    -webkit-align-items: center;\n    -ms-flex-align: center;\n    align-items: center;\n    -webkit-transform: translateZ(0);\n    transform: translateZ(0); }\n  .md .toolbar-title {\n    display: block;\n    overflow: hidden;\n    width: 100%;\n    text-overflow: ellipsis;\n    white-space: nowrap; }\n  .md ion-buttons {\n    display: block;\n    margin: 0 .2rem;\n    -webkit-transform: translateZ(0);\n    transform: translateZ(0);\n    pointer-events: none; }\n  .md ion-buttons button,\n  .md ion-buttons a,\n  .md ion-buttons input,\n  .md ion-buttons textarea,\n  .md ion-buttons div {\n    pointer-events: auto; }\n  .md .toolbar[transparent] .toolbar-background {\n    border-color: transparent;\n    background: transparent; }\n  .md ion-buttons,\n  .md .bar-button-menutoggle {\n    z-index: 99;\n    -webkit-transform: translateZ(0);\n    transform: translateZ(0); }\n  .md ion-navbar.toolbar {\n    display: -webkit-box;\n    display: -webkit-flex;\n    display: -ms-flexbox;\n    display: flex;\n    opacity: 0;\n    -webkit-transform: translateZ(0);\n    transform: translateZ(0); }\n    .md ion-navbar.toolbar.show-navbar {\n      opacity: 1; }\n  .md .bar-button {\n    -webkit-user-select: none;\n    -moz-user-select: none;\n    -ms-user-select: none;\n    user-select: none;\n    -webkit-appearance: none;\n    -moz-appearance: none;\n    position: relative;\n    display: inline-block;\n    margin: 0;\n    padding: 0;\n    line-height: 1;\n    text-align: center;\n    text-overflow: ellipsis;\n    text-transform: none;\n    white-space: nowrap;\n    cursor: pointer;\n    vertical-align: top;\n    vertical-align: -webkit-baseline-middle; }\n  .md .bar-button::after {\n    position: absolute;\n    top: -7px;\n    right: -2px;\n    bottom: -6px;\n    left: -2px;\n    content: \"\"; }\n  .md .bar-button-menutoggle {\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  .md .back-button {\n    display: none; }\n    .md .back-button.show-back-button {\n      display: inline-block; }\n  .md .back-button-text {\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  .md .toolbar {\n    padding: 4px;\n    min-height: 5.6rem; }\n  .md .toolbar-background {\n    border-color: #b2b2b2;\n    background: #f8f8f8; }\n  .md ion-header::after,\n  .md [tabsPlacement=\"top\"] > ion-tabbar::after,\n  .md ion-footer::before,\n  .md [tabsPlacement=\"bottom\"] > ion-tabbar::before {\n    position: absolute;\n    bottom: -5px;\n    left: 0;\n    width: 100%;\n    height: 5px;\n    background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAHBAMAAADzDtBxAAAAD1BMVEUAAAAAAAAAAAAAAAAAAABPDueNAAAABXRSTlMUCS0gBIh/TXEAAAAaSURBVAjXYxCEAgY4UIICBmMogMsgFLtAAQCNSwXZKOdPxgAAAABJRU5ErkJggg==);\n    background-repeat: repeat-x;\n    background-position: 0 -2px;\n    content: \"\"; }\n  .md ion-footer::before,\n  .md [tabsPlacement=\"bottom\"] > ion-tabbar::before {\n    top: -2px;\n    bottom: auto;\n    height: 2px;\n    background-position: 0 0; }\n  .md ion-header[no-shadow]::after,\n  .md ion-footer[no-shadow]::before,\n  .md [tabsPlacement=\"top\"][no-shadow] > ion-tabbar::after,\n  .md [tabsPlacement=\"bottom\"][no-shadow] > ion-tabbar::before {\n    display: none; }\n  .md .toolbar-content {\n    -webkit-box-flex: 1;\n    -webkit-flex: 1;\n    -ms-flex: 1;\n    flex: 1;\n    -webkit-box-ordinal-group: 4;\n    -webkit-order: 3;\n    -ms-flex-order: 3;\n    order: 3;\n    min-width: 0;\n    max-width: 100%; }\n  .md .toolbar-title {\n    padding: 0 12px;\n    font-size: 2rem;\n    font-weight: 500;\n    color: #424242; }\n  .md ion-buttons {\n    -webkit-box-ordinal-group: 5;\n    -webkit-order: 4;\n    -ms-flex-order: 4;\n    order: 4;\n    -webkit-transform: translateZ(0);\n    transform: translateZ(0); }\n  .md ion-buttons[left] {\n    -webkit-box-ordinal-group: 3;\n    -webkit-order: 2;\n    -ms-flex-order: 2;\n    order: 2; }\n  .md ion-buttons[left] .bar-button:first-child {\n    margin-left: 0; }\n  .md ion-buttons[end] {\n    -webkit-box-ordinal-group: 6;\n    -webkit-order: 5;\n    -ms-flex-order: 5;\n    order: 5;\n    text-align: right; }\n  .md ion-buttons[right] {\n    -webkit-box-ordinal-group: 7;\n    -webkit-order: 6;\n    -ms-flex-order: 6;\n    order: 6;\n    text-align: right; }\n  .md .bar-button {\n    margin-top: 0;\n    margin-right: .2rem;\n    margin-bottom: 0;\n    margin-left: .2rem;\n    padding: 0 5px;\n    height: 32px;\n    border: 0;\n    border-radius: 2px;\n    font-size: 1.4rem;\n    font-weight: 500;\n    text-transform: uppercase; }\n  .md .bar-button-solid,\n  .md .bar-button-outline {\n    overflow: hidden; }\n  .md .bar-button-outline {\n    border-width: 1px;\n    border-style: solid;\n    border-color: #424242;\n    color: #424242;\n    background-color: transparent; }\n    .md .bar-button-outline:hover:not(.disable-hover) {\n      opacity: .4; }\n    .md .bar-button-outline.activated {\n      background-color: transparent; }\n    .md .bar-button-outline ion-button-effect {\n      background-color: #424242; }\n  .md .bar-button-solid {\n    color: #fff;\n    background-color: #424242; }\n    .md .bar-button-solid:hover:not(.disable-hover) {\n      color: #fff; }\n    .md .bar-button-solid.activated {\n      color: #fff;\n      background-color: #515151; }\n  .md .bar-button-icon-left ion-icon {\n    padding-right: .3em;\n    font-size: 1.4em;\n    line-height: .67;\n    pointer-events: none; }\n  .md .bar-button-icon-right ion-icon {\n    padding-left: .4em;\n    font-size: 1.4em;\n    line-height: .67;\n    pointer-events: none; }\n  .md .bar-button[icon-only] {\n    padding: 0; }\n    .md .bar-button[icon-only] ion-icon {\n      padding: 0 .1em;\n      min-width: 28px;\n      font-size: 1.8em;\n      line-height: .67;\n      pointer-events: none; }\n  .md .back-button {\n    margin: 0 6px;\n    min-width: 44px;\n    box-shadow: none; }\n  .md .back-button-icon {\n    margin: 0;\n    padding: 0 6px;\n    font-size: 2.4rem;\n    font-weight: normal;\n    text-align: left; }\n  .md .bar-button-menutoggle {\n    -webkit-box-ordinal-group: 2;\n    -webkit-order: 1;\n    -ms-flex-order: 1;\n    order: 1;\n    margin: 0 6px;\n    padding: 0 2px;\n    min-width: 44px; }\n    .md .bar-button-menutoggle ion-icon {\n      padding: 0 6px;\n      font-size: 2.4rem; }\n  .md .bar-button-menutoggle[end],\n  .md .bar-button-menutoggle[right] {\n    -webkit-box-ordinal-group: 8;\n    -webkit-order: 7;\n    -ms-flex-order: 7;\n    order: 7;\n    margin: 0 2px;\n    min-width: 28px; }\n  .md .bar-button-clear-default,\n  .md .bar-button-default {\n    color: #424242;\n    background-color: transparent; }\n    .md .bar-button-clear-default:hover:not(.disable-hover),\n    .md .bar-button-default:hover:not(.disable-hover) {\n      color: #424242; }\n  .md .bar-button-clear-clear,\n  .md .bar-button-clear {\n    color: #424242;\n    background-color: transparent; }\n    .md .bar-button-clear-clear:hover:not(.disable-hover),\n    .md .bar-button-clear:hover:not(.disable-hover) {\n      color: #424242; }\n  .md .toolbar-primary .toolbar-background {\n    background: #327eff; }\n  .md .toolbar-primary .bar-button-clear,\n  .md .toolbar-primary .bar-button-default,\n  .md .toolbar-primary .bar-button-outline,\n  .md .toolbar-primary .toolbar-title {\n    color: #fff; }\n  .md .toolbar-primary .bar-button-clear ion-button-effect,\n  .md .toolbar-primary .bar-button-default ion-button-effect,\n  .md .toolbar-primary .bar-button-outline ion-button-effect {\n    background-color: #fff; }\n  .md .toolbar-primary .bar-button-outline {\n    border-color: #fff; }\n  .md .toolbar-primary .bar-button-clear-primary,\n  .md .toolbar-primary .bar-button-primary {\n    color: #327eff;\n    background-color: transparent; }\n    .md .toolbar-primary .bar-button-clear-primary:hover:not(.disable-hover),\n    .md .toolbar-primary .bar-button-primary:hover:not(.disable-hover) {\n      color: #327eff; }\n  .md .toolbar-primary .bar-button-outline-primary {\n    border-color: #2e74eb;\n    color: #2e74eb;\n    background-color: transparent; }\n    .md .toolbar-primary .bar-button-outline-primary.activated {\n      background-color: transparent; }\n    .md .toolbar-primary .bar-button-outline-primary ion-button-effect {\n      background-color: #2e74eb; }\n  .md .toolbar-primary .bar-button-solid-primary {\n    color: #fff;\n    background-color: #327eff; }\n    .md .toolbar-primary .bar-button-solid-primary.activated {\n      color: #fff;\n      background-color: #2e74eb; }\n  .md .toolbar-primary .bar-button-clear-secondary,\n  .md .toolbar-primary .bar-button-secondary {\n    color: #32db64;\n    background-color: transparent; }\n    .md .toolbar-primary .bar-button-clear-secondary:hover:not(.disable-hover),\n    .md .toolbar-primary .bar-button-secondary:hover:not(.disable-hover) {\n      color: #32db64; }\n  .md .toolbar-primary .bar-button-outline-secondary {\n    border-color: #2ec95c;\n    color: #2ec95c;\n    background-color: transparent; }\n    .md .toolbar-primary .bar-button-outline-secondary.activated {\n      background-color: transparent; }\n    .md .toolbar-primary .bar-button-outline-secondary ion-button-effect {\n      background-color: #2ec95c; }\n  .md .toolbar-primary .bar-button-solid-secondary {\n    color: #fff;\n    background-color: #32db64; }\n    .md .toolbar-primary .bar-button-solid-secondary.activated {\n      color: #fff;\n      background-color: #2ec95c; }\n  .md .toolbar-primary .bar-button-clear-danger,\n  .md .toolbar-primary .bar-button-danger {\n    color: #f53d3d;\n    background-color: transparent; }\n    .md .toolbar-primary .bar-button-clear-danger:hover:not(.disable-hover),\n    .md .toolbar-primary .bar-button-danger:hover:not(.disable-hover) {\n      color: #f53d3d; }\n  .md .toolbar-primary .bar-button-outline-danger {\n    border-color: #e13838;\n    color: #e13838;\n    background-color: transparent; }\n    .md .toolbar-primary .bar-button-outline-danger.activated {\n      background-color: transparent; }\n    .md .toolbar-primary .bar-button-outline-danger ion-button-effect {\n      background-color: #e13838; }\n  .md .toolbar-primary .bar-button-solid-danger {\n    color: #fff;\n    background-color: #f53d3d; }\n    .md .toolbar-primary .bar-button-solid-danger.activated {\n      color: #fff;\n      background-color: #e13838; }\n  .md .toolbar-primary .bar-button-clear-light,\n  .md .toolbar-primary .bar-button-light {\n    color: #f4f4f4;\n    background-color: transparent; }\n    .md .toolbar-primary .bar-button-clear-light:hover:not(.disable-hover),\n    .md .toolbar-primary .bar-button-light:hover:not(.disable-hover) {\n      color: #f4f4f4; }\n  .md .toolbar-primary .bar-button-outline-light {\n    border-color: #e0e0e0;\n    color: #e0e0e0;\n    background-color: transparent; }\n    .md .toolbar-primary .bar-button-outline-light.activated {\n      background-color: transparent; }\n    .md .toolbar-primary .bar-button-outline-light ion-button-effect {\n      background-color: #e0e0e0; }\n  .md .toolbar-primary .bar-button-solid-light {\n    color: #000;\n    background-color: #f4f4f4; }\n    .md .toolbar-primary .bar-button-solid-light.activated {\n      color: #000;\n      background-color: #e0e0e0; }\n  .md .toolbar-primary .bar-button-clear-dark,\n  .md .toolbar-primary .bar-button-dark {\n    color: #222;\n    background-color: transparent; }\n    .md .toolbar-primary .bar-button-clear-dark:hover:not(.disable-hover),\n    .md .toolbar-primary .bar-button-dark:hover:not(.disable-hover) {\n      color: #222; }\n  .md .toolbar-primary .bar-button-outline-dark {\n    border-color: #343434;\n    color: #343434;\n    background-color: transparent; }\n    .md .toolbar-primary .bar-button-outline-dark.activated {\n      background-color: transparent; }\n    .md .toolbar-primary .bar-button-outline-dark ion-button-effect {\n      background-color: #343434; }\n  .md .toolbar-primary .bar-button-solid-dark {\n    color: #fff;\n    background-color: #222; }\n    .md .toolbar-primary .bar-button-solid-dark.activated {\n      color: #fff;\n      background-color: #343434; }\n  .md .bar-button-clear-primary,\n  .md .bar-button-primary {\n    color: #327eff;\n    background-color: transparent; }\n    .md .bar-button-clear-primary:hover:not(.disable-hover),\n    .md .bar-button-primary:hover:not(.disable-hover) {\n      color: #327eff; }\n  .md .bar-button-outline-primary {\n    border-color: #2e74eb;\n    color: #2e74eb;\n    background-color: transparent; }\n    .md .bar-button-outline-primary.activated {\n      background-color: transparent; }\n    .md .bar-button-outline-primary ion-button-effect {\n      background-color: #2e74eb; }\n  .md .bar-button-solid-primary {\n    color: #fff;\n    background-color: #327eff; }\n    .md .bar-button-solid-primary.activated {\n      color: #fff;\n      background-color: #2e74eb; }\n  .md .toolbar-secondary .toolbar-background {\n    background: #32db64; }\n  .md .toolbar-secondary .bar-button-clear,\n  .md .toolbar-secondary .bar-button-default,\n  .md .toolbar-secondary .bar-button-outline,\n  .md .toolbar-secondary .toolbar-title {\n    color: #fff; }\n  .md .toolbar-secondary .bar-button-clear ion-button-effect,\n  .md .toolbar-secondary .bar-button-default ion-button-effect,\n  .md .toolbar-secondary .bar-button-outline ion-button-effect {\n    background-color: #fff; }\n  .md .toolbar-secondary .bar-button-outline {\n    border-color: #fff; }\n  .md .toolbar-secondary .bar-button-clear-primary,\n  .md .toolbar-secondary .bar-button-primary {\n    color: #327eff;\n    background-color: transparent; }\n    .md .toolbar-secondary .bar-button-clear-primary:hover:not(.disable-hover),\n    .md .toolbar-secondary .bar-button-primary:hover:not(.disable-hover) {\n      color: #327eff; }\n  .md .toolbar-secondary .bar-button-outline-primary {\n    border-color: #2e74eb;\n    color: #2e74eb;\n    background-color: transparent; }\n    .md .toolbar-secondary .bar-button-outline-primary.activated {\n      background-color: transparent; }\n    .md .toolbar-secondary .bar-button-outline-primary ion-button-effect {\n      background-color: #2e74eb; }\n  .md .toolbar-secondary .bar-button-solid-primary {\n    color: #fff;\n    background-color: #327eff; }\n    .md .toolbar-secondary .bar-button-solid-primary.activated {\n      color: #fff;\n      background-color: #2e74eb; }\n  .md .toolbar-secondary .bar-button-clear-secondary,\n  .md .toolbar-secondary .bar-button-secondary {\n    color: #32db64;\n    background-color: transparent; }\n    .md .toolbar-secondary .bar-button-clear-secondary:hover:not(.disable-hover),\n    .md .toolbar-secondary .bar-button-secondary:hover:not(.disable-hover) {\n      color: #32db64; }\n  .md .toolbar-secondary .bar-button-outline-secondary {\n    border-color: #2ec95c;\n    color: #2ec95c;\n    background-color: transparent; }\n    .md .toolbar-secondary .bar-button-outline-secondary.activated {\n      background-color: transparent; }\n    .md .toolbar-secondary .bar-button-outline-secondary ion-button-effect {\n      background-color: #2ec95c; }\n  .md .toolbar-secondary .bar-button-solid-secondary {\n    color: #fff;\n    background-color: #32db64; }\n    .md .toolbar-secondary .bar-button-solid-secondary.activated {\n      color: #fff;\n      background-color: #2ec95c; }\n  .md .toolbar-secondary .bar-button-clear-danger,\n  .md .toolbar-secondary .bar-button-danger {\n    color: #f53d3d;\n    background-color: transparent; }\n    .md .toolbar-secondary .bar-button-clear-danger:hover:not(.disable-hover),\n    .md .toolbar-secondary .bar-button-danger:hover:not(.disable-hover) {\n      color: #f53d3d; }\n  .md .toolbar-secondary .bar-button-outline-danger {\n    border-color: #e13838;\n    color: #e13838;\n    background-color: transparent; }\n    .md .toolbar-secondary .bar-button-outline-danger.activated {\n      background-color: transparent; }\n    .md .toolbar-secondary .bar-button-outline-danger ion-button-effect {\n      background-color: #e13838; }\n  .md .toolbar-secondary .bar-button-solid-danger {\n    color: #fff;\n    background-color: #f53d3d; }\n    .md .toolbar-secondary .bar-button-solid-danger.activated {\n      color: #fff;\n      background-color: #e13838; }\n  .md .toolbar-secondary .bar-button-clear-light,\n  .md .toolbar-secondary .bar-button-light {\n    color: #f4f4f4;\n    background-color: transparent; }\n    .md .toolbar-secondary .bar-button-clear-light:hover:not(.disable-hover),\n    .md .toolbar-secondary .bar-button-light:hover:not(.disable-hover) {\n      color: #f4f4f4; }\n  .md .toolbar-secondary .bar-button-outline-light {\n    border-color: #e0e0e0;\n    color: #e0e0e0;\n    background-color: transparent; }\n    .md .toolbar-secondary .bar-button-outline-light.activated {\n      background-color: transparent; }\n    .md .toolbar-secondary .bar-button-outline-light ion-button-effect {\n      background-color: #e0e0e0; }\n  .md .toolbar-secondary .bar-button-solid-light {\n    color: #000;\n    background-color: #f4f4f4; }\n    .md .toolbar-secondary .bar-button-solid-light.activated {\n      color: #000;\n      background-color: #e0e0e0; }\n  .md .toolbar-secondary .bar-button-clear-dark,\n  .md .toolbar-secondary .bar-button-dark {\n    color: #222;\n    background-color: transparent; }\n    .md .toolbar-secondary .bar-button-clear-dark:hover:not(.disable-hover),\n    .md .toolbar-secondary .bar-button-dark:hover:not(.disable-hover) {\n      color: #222; }\n  .md .toolbar-secondary .bar-button-outline-dark {\n    border-color: #343434;\n    color: #343434;\n    background-color: transparent; }\n    .md .toolbar-secondary .bar-button-outline-dark.activated {\n      background-color: transparent; }\n    .md .toolbar-secondary .bar-button-outline-dark ion-button-effect {\n      background-color: #343434; }\n  .md .toolbar-secondary .bar-button-solid-dark {\n    color: #fff;\n    background-color: #222; }\n    .md .toolbar-secondary .bar-button-solid-dark.activated {\n      color: #fff;\n      background-color: #343434; }\n  .md .bar-button-clear-secondary,\n  .md .bar-button-secondary {\n    color: #32db64;\n    background-color: transparent; }\n    .md .bar-button-clear-secondary:hover:not(.disable-hover),\n    .md .bar-button-secondary:hover:not(.disable-hover) {\n      color: #32db64; }\n  .md .bar-button-outline-secondary {\n    border-color: #2ec95c;\n    color: #2ec95c;\n    background-color: transparent; }\n    .md .bar-button-outline-secondary.activated {\n      background-color: transparent; }\n    .md .bar-button-outline-secondary ion-button-effect {\n      background-color: #2ec95c; }\n  .md .bar-button-solid-secondary {\n    color: #fff;\n    background-color: #32db64; }\n    .md .bar-button-solid-secondary.activated {\n      color: #fff;\n      background-color: #2ec95c; }\n  .md .toolbar-danger .toolbar-background {\n    background: #f53d3d; }\n  .md .toolbar-danger .bar-button-clear,\n  .md .toolbar-danger .bar-button-default,\n  .md .toolbar-danger .bar-button-outline,\n  .md .toolbar-danger .toolbar-title {\n    color: #fff; }\n  .md .toolbar-danger .bar-button-clear ion-button-effect,\n  .md .toolbar-danger .bar-button-default ion-button-effect,\n  .md .toolbar-danger .bar-button-outline ion-button-effect {\n    background-color: #fff; }\n  .md .toolbar-danger .bar-button-outline {\n    border-color: #fff; }\n  .md .toolbar-danger .bar-button-clear-primary,\n  .md .toolbar-danger .bar-button-primary {\n    color: #327eff;\n    background-color: transparent; }\n    .md .toolbar-danger .bar-button-clear-primary:hover:not(.disable-hover),\n    .md .toolbar-danger .bar-button-primary:hover:not(.disable-hover) {\n      color: #327eff; }\n  .md .toolbar-danger .bar-button-outline-primary {\n    border-color: #2e74eb;\n    color: #2e74eb;\n    background-color: transparent; }\n    .md .toolbar-danger .bar-button-outline-primary.activated {\n      background-color: transparent; }\n    .md .toolbar-danger .bar-button-outline-primary ion-button-effect {\n      background-color: #2e74eb; }\n  .md .toolbar-danger .bar-button-solid-primary {\n    color: #fff;\n    background-color: #327eff; }\n    .md .toolbar-danger .bar-button-solid-primary.activated {\n      color: #fff;\n      background-color: #2e74eb; }\n  .md .toolbar-danger .bar-button-clear-secondary,\n  .md .toolbar-danger .bar-button-secondary {\n    color: #32db64;\n    background-color: transparent; }\n    .md .toolbar-danger .bar-button-clear-secondary:hover:not(.disable-hover),\n    .md .toolbar-danger .bar-button-secondary:hover:not(.disable-hover) {\n      color: #32db64; }\n  .md .toolbar-danger .bar-button-outline-secondary {\n    border-color: #2ec95c;\n    color: #2ec95c;\n    background-color: transparent; }\n    .md .toolbar-danger .bar-button-outline-secondary.activated {\n      background-color: transparent; }\n    .md .toolbar-danger .bar-button-outline-secondary ion-button-effect {\n      background-color: #2ec95c; }\n  .md .toolbar-danger .bar-button-solid-secondary {\n    color: #fff;\n    background-color: #32db64; }\n    .md .toolbar-danger .bar-button-solid-secondary.activated {\n      color: #fff;\n      background-color: #2ec95c; }\n  .md .toolbar-danger .bar-button-clear-danger,\n  .md .toolbar-danger .bar-button-danger {\n    color: #f53d3d;\n    background-color: transparent; }\n    .md .toolbar-danger .bar-button-clear-danger:hover:not(.disable-hover),\n    .md .toolbar-danger .bar-button-danger:hover:not(.disable-hover) {\n      color: #f53d3d; }\n  .md .toolbar-danger .bar-button-outline-danger {\n    border-color: #e13838;\n    color: #e13838;\n    background-color: transparent; }\n    .md .toolbar-danger .bar-button-outline-danger.activated {\n      background-color: transparent; }\n    .md .toolbar-danger .bar-button-outline-danger ion-button-effect {\n      background-color: #e13838; }\n  .md .toolbar-danger .bar-button-solid-danger {\n    color: #fff;\n    background-color: #f53d3d; }\n    .md .toolbar-danger .bar-button-solid-danger.activated {\n      color: #fff;\n      background-color: #e13838; }\n  .md .toolbar-danger .bar-button-clear-light,\n  .md .toolbar-danger .bar-button-light {\n    color: #f4f4f4;\n    background-color: transparent; }\n    .md .toolbar-danger .bar-button-clear-light:hover:not(.disable-hover),\n    .md .toolbar-danger .bar-button-light:hover:not(.disable-hover) {\n      color: #f4f4f4; }\n  .md .toolbar-danger .bar-button-outline-light {\n    border-color: #e0e0e0;\n    color: #e0e0e0;\n    background-color: transparent; }\n    .md .toolbar-danger .bar-button-outline-light.activated {\n      background-color: transparent; }\n    .md .toolbar-danger .bar-button-outline-light ion-button-effect {\n      background-color: #e0e0e0; }\n  .md .toolbar-danger .bar-button-solid-light {\n    color: #000;\n    background-color: #f4f4f4; }\n    .md .toolbar-danger .bar-button-solid-light.activated {\n      color: #000;\n      background-color: #e0e0e0; }\n  .md .toolbar-danger .bar-button-clear-dark,\n  .md .toolbar-danger .bar-button-dark {\n    color: #222;\n    background-color: transparent; }\n    .md .toolbar-danger .bar-button-clear-dark:hover:not(.disable-hover),\n    .md .toolbar-danger .bar-button-dark:hover:not(.disable-hover) {\n      color: #222; }\n  .md .toolbar-danger .bar-button-outline-dark {\n    border-color: #343434;\n    color: #343434;\n    background-color: transparent; }\n    .md .toolbar-danger .bar-button-outline-dark.activated {\n      background-color: transparent; }\n    .md .toolbar-danger .bar-button-outline-dark ion-button-effect {\n      background-color: #343434; }\n  .md .toolbar-danger .bar-button-solid-dark {\n    color: #fff;\n    background-color: #222; }\n    .md .toolbar-danger .bar-button-solid-dark.activated {\n      color: #fff;\n      background-color: #343434; }\n  .md .bar-button-clear-danger,\n  .md .bar-button-danger {\n    color: #f53d3d;\n    background-color: transparent; }\n    .md .bar-button-clear-danger:hover:not(.disable-hover),\n    .md .bar-button-danger:hover:not(.disable-hover) {\n      color: #f53d3d; }\n  .md .bar-button-outline-danger {\n    border-color: #e13838;\n    color: #e13838;\n    background-color: transparent; }\n    .md .bar-button-outline-danger.activated {\n      background-color: transparent; }\n    .md .bar-button-outline-danger ion-button-effect {\n      background-color: #e13838; }\n  .md .bar-button-solid-danger {\n    color: #fff;\n    background-color: #f53d3d; }\n    .md .bar-button-solid-danger.activated {\n      color: #fff;\n      background-color: #e13838; }\n  .md .toolbar-light .toolbar-background {\n    background: #f4f4f4; }\n  .md .toolbar-light .bar-button-clear,\n  .md .toolbar-light .bar-button-default,\n  .md .toolbar-light .bar-button-outline,\n  .md .toolbar-light .toolbar-title {\n    color: #424242; }\n  .md .toolbar-light .bar-button-clear ion-button-effect,\n  .md .toolbar-light .bar-button-default ion-button-effect,\n  .md .toolbar-light .bar-button-outline ion-button-effect {\n    background-color: #424242; }\n  .md .toolbar-light .bar-button-outline {\n    border-color: #424242; }\n  .md .toolbar-light .bar-button-clear-primary,\n  .md .toolbar-light .bar-button-primary {\n    color: #327eff;\n    background-color: transparent; }\n    .md .toolbar-light .bar-button-clear-primary:hover:not(.disable-hover),\n    .md .toolbar-light .bar-button-primary:hover:not(.disable-hover) {\n      color: #327eff; }\n  .md .toolbar-light .bar-button-outline-primary {\n    border-color: #2e74eb;\n    color: #2e74eb;\n    background-color: transparent; }\n    .md .toolbar-light .bar-button-outline-primary.activated {\n      background-color: transparent; }\n    .md .toolbar-light .bar-button-outline-primary ion-button-effect {\n      background-color: #2e74eb; }\n  .md .toolbar-light .bar-button-solid-primary {\n    color: #fff;\n    background-color: #327eff; }\n    .md .toolbar-light .bar-button-solid-primary.activated {\n      color: #fff;\n      background-color: #2e74eb; }\n  .md .toolbar-light .bar-button-clear-secondary,\n  .md .toolbar-light .bar-button-secondary {\n    color: #32db64;\n    background-color: transparent; }\n    .md .toolbar-light .bar-button-clear-secondary:hover:not(.disable-hover),\n    .md .toolbar-light .bar-button-secondary:hover:not(.disable-hover) {\n      color: #32db64; }\n  .md .toolbar-light .bar-button-outline-secondary {\n    border-color: #2ec95c;\n    color: #2ec95c;\n    background-color: transparent; }\n    .md .toolbar-light .bar-button-outline-secondary.activated {\n      background-color: transparent; }\n    .md .toolbar-light .bar-button-outline-secondary ion-button-effect {\n      background-color: #2ec95c; }\n  .md .toolbar-light .bar-button-solid-secondary {\n    color: #fff;\n    background-color: #32db64; }\n    .md .toolbar-light .bar-button-solid-secondary.activated {\n      color: #fff;\n      background-color: #2ec95c; }\n  .md .toolbar-light .bar-button-clear-danger,\n  .md .toolbar-light .bar-button-danger {\n    color: #f53d3d;\n    background-color: transparent; }\n    .md .toolbar-light .bar-button-clear-danger:hover:not(.disable-hover),\n    .md .toolbar-light .bar-button-danger:hover:not(.disable-hover) {\n      color: #f53d3d; }\n  .md .toolbar-light .bar-button-outline-danger {\n    border-color: #e13838;\n    color: #e13838;\n    background-color: transparent; }\n    .md .toolbar-light .bar-button-outline-danger.activated {\n      background-color: transparent; }\n    .md .toolbar-light .bar-button-outline-danger ion-button-effect {\n      background-color: #e13838; }\n  .md .toolbar-light .bar-button-solid-danger {\n    color: #fff;\n    background-color: #f53d3d; }\n    .md .toolbar-light .bar-button-solid-danger.activated {\n      color: #fff;\n      background-color: #e13838; }\n  .md .toolbar-light .bar-button-clear-light,\n  .md .toolbar-light .bar-button-light {\n    color: #f4f4f4;\n    background-color: transparent; }\n    .md .toolbar-light .bar-button-clear-light:hover:not(.disable-hover),\n    .md .toolbar-light .bar-button-light:hover:not(.disable-hover) {\n      color: #f4f4f4; }\n  .md .toolbar-light .bar-button-outline-light {\n    border-color: #e0e0e0;\n    color: #e0e0e0;\n    background-color: transparent; }\n    .md .toolbar-light .bar-button-outline-light.activated {\n      background-color: transparent; }\n    .md .toolbar-light .bar-button-outline-light ion-button-effect {\n      background-color: #e0e0e0; }\n  .md .toolbar-light .bar-button-solid-light {\n    color: #000;\n    background-color: #f4f4f4; }\n    .md .toolbar-light .bar-button-solid-light.activated {\n      color: #000;\n      background-color: #e0e0e0; }\n  .md .toolbar-light .bar-button-clear-dark,\n  .md .toolbar-light .bar-button-dark {\n    color: #222;\n    background-color: transparent; }\n    .md .toolbar-light .bar-button-clear-dark:hover:not(.disable-hover),\n    .md .toolbar-light .bar-button-dark:hover:not(.disable-hover) {\n      color: #222; }\n  .md .toolbar-light .bar-button-outline-dark {\n    border-color: #343434;\n    color: #343434;\n    background-color: transparent; }\n    .md .toolbar-light .bar-button-outline-dark.activated {\n      background-color: transparent; }\n    .md .toolbar-light .bar-button-outline-dark ion-button-effect {\n      background-color: #343434; }\n  .md .toolbar-light .bar-button-solid-dark {\n    color: #fff;\n    background-color: #222; }\n    .md .toolbar-light .bar-button-solid-dark.activated {\n      color: #fff;\n      background-color: #343434; }\n  .md .bar-button-clear-light,\n  .md .bar-button-light {\n    color: #f4f4f4;\n    background-color: transparent; }\n    .md .bar-button-clear-light:hover:not(.disable-hover),\n    .md .bar-button-light:hover:not(.disable-hover) {\n      color: #f4f4f4; }\n  .md .bar-button-outline-light {\n    border-color: #e0e0e0;\n    color: #e0e0e0;\n    background-color: transparent; }\n    .md .bar-button-outline-light.activated {\n      background-color: transparent; }\n    .md .bar-button-outline-light ion-button-effect {\n      background-color: #e0e0e0; }\n  .md .bar-button-solid-light {\n    color: #000;\n    background-color: #f4f4f4; }\n    .md .bar-button-solid-light.activated {\n      color: #000;\n      background-color: #e0e0e0; }\n  .md .toolbar-dark .toolbar-background {\n    background: #222; }\n  .md .toolbar-dark .bar-button-clear,\n  .md .toolbar-dark .bar-button-default,\n  .md .toolbar-dark .bar-button-outline,\n  .md .toolbar-dark .toolbar-title {\n    color: #fff; }\n  .md .toolbar-dark .bar-button-clear ion-button-effect,\n  .md .toolbar-dark .bar-button-default ion-button-effect,\n  .md .toolbar-dark .bar-button-outline ion-button-effect {\n    background-color: #fff; }\n  .md .toolbar-dark .bar-button-outline {\n    border-color: #fff; }\n  .md .toolbar-dark .bar-button-clear-primary,\n  .md .toolbar-dark .bar-button-primary {\n    color: #327eff;\n    background-color: transparent; }\n    .md .toolbar-dark .bar-button-clear-primary:hover:not(.disable-hover),\n    .md .toolbar-dark .bar-button-primary:hover:not(.disable-hover) {\n      color: #327eff; }\n  .md .toolbar-dark .bar-button-outline-primary {\n    border-color: #2e74eb;\n    color: #2e74eb;\n    background-color: transparent; }\n    .md .toolbar-dark .bar-button-outline-primary.activated {\n      background-color: transparent; }\n    .md .toolbar-dark .bar-button-outline-primary ion-button-effect {\n      background-color: #2e74eb; }\n  .md .toolbar-dark .bar-button-solid-primary {\n    color: #fff;\n    background-color: #327eff; }\n    .md .toolbar-dark .bar-button-solid-primary.activated {\n      color: #fff;\n      background-color: #2e74eb; }\n  .md .toolbar-dark .bar-button-clear-secondary,\n  .md .toolbar-dark .bar-button-secondary {\n    color: #32db64;\n    background-color: transparent; }\n    .md .toolbar-dark .bar-button-clear-secondary:hover:not(.disable-hover),\n    .md .toolbar-dark .bar-button-secondary:hover:not(.disable-hover) {\n      color: #32db64; }\n  .md .toolbar-dark .bar-button-outline-secondary {\n    border-color: #2ec95c;\n    color: #2ec95c;\n    background-color: transparent; }\n    .md .toolbar-dark .bar-button-outline-secondary.activated {\n      background-color: transparent; }\n    .md .toolbar-dark .bar-button-outline-secondary ion-button-effect {\n      background-color: #2ec95c; }\n  .md .toolbar-dark .bar-button-solid-secondary {\n    color: #fff;\n    background-color: #32db64; }\n    .md .toolbar-dark .bar-button-solid-secondary.activated {\n      color: #fff;\n      background-color: #2ec95c; }\n  .md .toolbar-dark .bar-button-clear-danger,\n  .md .toolbar-dark .bar-button-danger {\n    color: #f53d3d;\n    background-color: transparent; }\n    .md .toolbar-dark .bar-button-clear-danger:hover:not(.disable-hover),\n    .md .toolbar-dark .bar-button-danger:hover:not(.disable-hover) {\n      color: #f53d3d; }\n  .md .toolbar-dark .bar-button-outline-danger {\n    border-color: #e13838;\n    color: #e13838;\n    background-color: transparent; }\n    .md .toolbar-dark .bar-button-outline-danger.activated {\n      background-color: transparent; }\n    .md .toolbar-dark .bar-button-outline-danger ion-button-effect {\n      background-color: #e13838; }\n  .md .toolbar-dark .bar-button-solid-danger {\n    color: #fff;\n    background-color: #f53d3d; }\n    .md .toolbar-dark .bar-button-solid-danger.activated {\n      color: #fff;\n      background-color: #e13838; }\n  .md .toolbar-dark .bar-button-clear-light,\n  .md .toolbar-dark .bar-button-light {\n    color: #f4f4f4;\n    background-color: transparent; }\n    .md .toolbar-dark .bar-button-clear-light:hover:not(.disable-hover),\n    .md .toolbar-dark .bar-button-light:hover:not(.disable-hover) {\n      color: #f4f4f4; }\n  .md .toolbar-dark .bar-button-outline-light {\n    border-color: #e0e0e0;\n    color: #e0e0e0;\n    background-color: transparent; }\n    .md .toolbar-dark .bar-button-outline-light.activated {\n      background-color: transparent; }\n    .md .toolbar-dark .bar-button-outline-light ion-button-effect {\n      background-color: #e0e0e0; }\n  .md .toolbar-dark .bar-button-solid-light {\n    color: #000;\n    background-color: #f4f4f4; }\n    .md .toolbar-dark .bar-button-solid-light.activated {\n      color: #000;\n      background-color: #e0e0e0; }\n  .md .toolbar-dark .bar-button-clear-dark,\n  .md .toolbar-dark .bar-button-dark {\n    color: #222;\n    background-color: transparent; }\n    .md .toolbar-dark .bar-button-clear-dark:hover:not(.disable-hover),\n    .md .toolbar-dark .bar-button-dark:hover:not(.disable-hover) {\n      color: #222; }\n  .md .toolbar-dark .bar-button-outline-dark {\n    border-color: #343434;\n    color: #343434;\n    background-color: transparent; }\n    .md .toolbar-dark .bar-button-outline-dark.activated {\n      background-color: transparent; }\n    .md .toolbar-dark .bar-button-outline-dark ion-button-effect {\n      background-color: #343434; }\n  .md .toolbar-dark .bar-button-solid-dark {\n    color: #fff;\n    background-color: #222; }\n    .md .toolbar-dark .bar-button-solid-dark.activated {\n      color: #fff;\n      background-color: #343434; }\n  .md .bar-button-clear-dark,\n  .md .bar-button-dark {\n    color: #222;\n    background-color: transparent; }\n    .md .bar-button-clear-dark:hover:not(.disable-hover),\n    .md .bar-button-dark:hover:not(.disable-hover) {\n      color: #222; }\n  .md .bar-button-outline-dark {\n    border-color: #343434;\n    color: #343434;\n    background-color: transparent; }\n    .md .bar-button-outline-dark.activated {\n      background-color: transparent; }\n    .md .bar-button-outline-dark ion-button-effect {\n      background-color: #343434; }\n  .md .bar-button-solid-dark {\n    color: #fff;\n    background-color: #222; }\n    .md .bar-button-solid-dark.activated {\n      color: #fff;\n      background-color: #343434; }\n  .md html {\n    font-size: 62.5%; }\n  .md a {\n    background-color: transparent; }\n  .md .enable-hover a:hover {\n    opacity: .7; }\n  .md h1,\n  .md h2,\n  .md h3,\n  .md h4,\n  .md h5,\n  .md h6 {\n    margin-top: 1.6rem;\n    margin-bottom: 1rem;\n    font-weight: 500;\n    line-height: 1.2; }\n  .md [padding] h1:first-child,\n  .md [padding] h2:first-child,\n  .md [padding] h3:first-child,\n  .md [padding] h4:first-child,\n  .md [padding] h5:first-child,\n  .md [padding] h6:first-child {\n    margin-top: -.3rem; }\n  .md h1 + h2,\n  .md h1 + h3,\n  .md h2 + h3 {\n    margin-top: -.3rem; }\n  .md h1 {\n    margin-top: 2rem;\n    font-size: 2.6rem; }\n  .md h2 {\n    margin-top: 1.8rem;\n    font-size: 2.4rem; }\n  .md h3 {\n    font-size: 2.2rem; }\n  .md h4 {\n    font-size: 2rem; }\n  .md h5 {\n    font-size: 1.8rem; }\n  .md h6 {\n    font-size: 1.6rem; }\n  .md small {\n    font-size: 75%; }\n  .md sub,\n  .md sup {\n    position: relative;\n    font-size: 75%;\n    line-height: 0;\n    vertical-align: baseline; }\n  .md sup {\n    top: -.5em; }\n  .md sub {\n    bottom: -.25em; }\n  .md [text-left] {\n    text-align: left; }\n  .md [text-center] {\n    text-align: center; }\n  .md [text-right] {\n    text-align: right; }\n  .md [text-justify] {\n    text-align: justify; }\n  .md [text-nowrap] {\n    white-space: nowrap; }\n  .md [text-uppercase] {\n    text-transform: uppercase; }\n  .md [text-lowercase] {\n    text-transform: lowercase; }\n  .md [text-capitalize] {\n    text-transform: capitalize; }\n  .md p {\n    color: #000; }\n  .md a {\n    color: #327eff; }\n  .md .text-primary {\n    color: #327eff; }\n  .md .text-secondary {\n    color: #32db64; }\n  .md .text-danger {\n    color: #f53d3d; }\n  .md .text-light {\n    color: #f4f4f4; }\n  .md .text-dark {\n    color: #222; }\n  .md ion-nav > ion-page > .toolbar.statusbar-padding:first-child,\n  .md ion-nav > ion-page > ion-header > .toolbar.statusbar-padding:first-child,\n  .md ion-tab > ion-page > ion-header > .toolbar.statusbar-padding:first-child,\n  .md ion-tabs > ion-page.tab-subpage > ion-header > .toolbar.statusbar-padding:first-child,\n  .md ion-menu > .menu-inner > .toolbar.statusbar-padding:first-child,\n  .md ion-menu > .menu-inner > ion-header > .toolbar.statusbar-padding:first-child {\n    padding-top: 20px;\n    height: calc(5.6rem + 20px);\n    min-height: calc(5.6rem + 20px); }\n  .md ion-nav > ion-page > ion-content.statusbar-padding:first-child scroll-content,\n  .md ion-nav > ion-page > ion-header > ion-content.statusbar-padding:first-child scroll-content,\n  .md ion-tab > ion-page > ion-header > ion-content.statusbar-padding:first-child scroll-content,\n  .md ion-tabs > ion-page.tab-subpage > ion-header > ion-content.statusbar-padding:first-child scroll-content,\n  .md ion-menu > .menu-inner > ion-content.statusbar-padding:first-child scroll-content,\n  .md ion-menu > .menu-inner > ion-header > ion-content.statusbar-padding:first-child scroll-content {\n    padding-top: 20px; }\n  .md ion-nav > ion-page > ion-content.statusbar-padding:first-child[padding] scroll-content,\n  .md ion-nav > ion-page > ion-content.statusbar-padding:first-child[padding-top] scroll-content,\n  .md ion-nav > ion-page > ion-header > ion-content.statusbar-padding:first-child[padding] scroll-content,\n  .md ion-nav > ion-page > ion-header > ion-content.statusbar-padding:first-child[padding-top] scroll-content,\n  .md ion-tab > ion-page > ion-header > ion-content.statusbar-padding:first-child[padding] scroll-content,\n  .md ion-tab > ion-page > ion-header > ion-content.statusbar-padding:first-child[padding-top] scroll-content,\n  .md ion-tabs > ion-page.tab-subpage > ion-header > ion-content.statusbar-padding:first-child[padding] scroll-content,\n  .md ion-tabs > ion-page.tab-subpage > ion-header > ion-content.statusbar-padding:first-child[padding-top] scroll-content,\n  .md ion-menu > .menu-inner > ion-content.statusbar-padding:first-child[padding] scroll-content,\n  .md ion-menu > .menu-inner > ion-content.statusbar-padding:first-child[padding-top] scroll-content,\n  .md ion-menu > .menu-inner > ion-header > ion-content.statusbar-padding:first-child[padding] scroll-content,\n  .md ion-menu > .menu-inner > ion-header > ion-content.statusbar-padding:first-child[padding-top] scroll-content {\n    padding-top: calc(16px + 20px); }\n  @media only screen and (max-width: 767px) {\n    .md .modal-wrapper > ion-page > ion-header > .toolbar.statusbar-padding:first-child {\n      padding-top: 20px;\n      height: calc(5.6rem + 20px);\n      min-height: calc(5.6rem + 20px); }\n    .md .modal-wrapper > ion-page > ion-header > ion-content.statusbar-padding:first-child scroll-content {\n      padding-top: 20px; }\n    .md .modal-wrapper > ion-page > ion-header > ion-content.statusbar-padding:first-child[padding] scroll-content,\n    .md .modal-wrapper > ion-page > ion-header > ion-content.statusbar-padding:first-child[padding-top] scroll-content {\n      padding-top: calc(16px + 20px); } }\n\n@font-face {\n  font-family: \"Roboto\";\n  font-style: normal;\n  font-weight: 300;\n  src: local(\"Roboto Light\"), local(\"Roboto-Light\"), url(\"../fonts/roboto-light.ttf\") format(\"truetype\"), url(\"../fonts/roboto-light.woff\") format(\"woff\"); }\n\n@font-face {\n  font-family: \"Roboto\";\n  font-style: normal;\n  font-weight: 400;\n  src: local(\"Roboto\"), local(\"Roboto-Regular\"), url(\"../fonts/roboto-regular.ttf\") format(\"truetype\"), url(\"../fonts/roboto-regular.woff\") format(\"woff\"); }\n\n@font-face {\n  font-family: \"Roboto\";\n  font-style: normal;\n  font-weight: 500;\n  src: local(\"Roboto Medium\"), local(\"Roboto-Medium\"), url(\"../fonts/roboto-medium.ttf\") format(\"truetype\"), url(\"../fonts/roboto-medium.woff\") format(\"woff\"); }\n\n@font-face {\n  font-family: \"Roboto\";\n  font-style: normal;\n  font-weight: 700;\n  src: local(\"Roboto Bold\"), local(\"Roboto-Bold\"), url(\"../fonts/roboto-bold.ttf\") format(\"truetype\"), url(\"../fonts/roboto-bold.woff\") format(\"woff\"); }\n\n.wp {\n  font-family: \"Segoe UI\", \"Noto Sans\", sans-serif;\n  font-size: 1.4rem;\n  background-color: #fff; }\n  .wp ion-content {\n    color: #000; }\n  .wp hr {\n    background-color: rgba(0, 0, 0, 0.08); }\n  .wp ion-action-sheet {\n    position: absolute;\n    top: 0;\n    left: 0;\n    z-index: 1000;\n    display: block;\n    width: 100%;\n    height: 100%; }\n  .wp .action-sheet-wrapper {\n    position: absolute;\n    right: 0;\n    bottom: 0;\n    left: 0;\n    z-index: 10;\n    display: block;\n    margin: auto;\n    width: 100%;\n    max-width: 500px;\n    -webkit-transform: translate3d(0, 100%, 0);\n    transform: translate3d(0, 100%, 0); }\n  .wp .action-sheet-button {\n    width: 100%; }\n  .wp .action-sheet-wrapper {\n    box-shadow: 0 -1px 0 rgba(0, 0, 0, 0.2); }\n  .wp .action-sheet-title {\n    padding: 19px 16px 17px;\n    font-size: 2rem;\n    text-align: left;\n    color: #4d4d4d; }\n  .wp .action-sheet-button {\n    padding: 0 16px;\n    min-height: 4.8rem;\n    font-size: 1.5rem;\n    text-align: left;\n    color: #4d4d4d;\n    background: transparent; }\n    .wp .action-sheet-button.activated {\n      background: #aaa; }\n  .wp .action-sheet-icon {\n    margin: 0 16px 0 0;\n    min-width: 24px;\n    font-size: 2.4rem;\n    text-align: center;\n    vertical-align: middle; }\n  .wp .action-sheet-group {\n    background: #fff; }\n    .wp .action-sheet-group:last-child .action-sheet-button {\n      margin-bottom: 8px; }\n    .wp .action-sheet-group .button-inner {\n      -webkit-box-pack: start;\n      -webkit-justify-content: flex-start;\n      -ms-flex-pack: start;\n      justify-content: flex-start; }\n  .wp .action-sheet-selected {\n    font-weight: bold; }\n  .wp .action-sheet-cancel {\n    background: transparent; }\n  .wp ion-alert {\n    position: absolute;\n    top: 0;\n    right: 0;\n    bottom: 0;\n    left: 0;\n    z-index: 1000;\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    -webkit-box-pack: center;\n    -webkit-justify-content: center;\n    -ms-flex-pack: center;\n    justify-content: center; }\n    .wp ion-alert input {\n      width: 100%; }\n  .wp .alert-wrapper {\n    z-index: 10;\n    display: -webkit-box;\n    display: -webkit-flex;\n    display: -ms-flexbox;\n    display: flex;\n    -webkit-box-orient: vertical;\n    -webkit-box-direction: normal;\n    -webkit-flex-direction: column;\n    -ms-flex-direction: column;\n    flex-direction: column;\n    min-width: 250px;\n    max-height: 90%;\n    opacity: 0; }\n  .wp .alert-title {\n    margin: 0;\n    padding: 0; }\n  .wp .alert-sub-title {\n    margin: 5px 0 0;\n    padding: 0;\n    font-weight: normal; }\n  .wp .alert-message {\n    overflow-y: scroll;\n    -webkit-overflow-scrolling: touch; }\n  .wp .alert-input {\n    padding: 10px 0;\n    border: 0;\n    background: inherit; }\n    .wp .alert-input::-moz-placeholder {\n      color: #999; }\n    .wp .alert-input:-ms-input-placeholder {\n      color: #999; }\n    .wp .alert-input::-webkit-input-placeholder {\n      text-indent: 0;\n      color: #999; }\n  .wp .alert-button-group {\n    display: -webkit-box;\n    display: -webkit-flex;\n    display: -ms-flexbox;\n    display: flex;\n    -webkit-box-orient: horizontal;\n    -webkit-box-direction: normal;\n    -webkit-flex-direction: row;\n    -ms-flex-direction: row;\n    flex-direction: row; }\n    .wp .alert-button-group.vertical {\n      -webkit-box-orient: vertical;\n      -webkit-box-direction: normal;\n      -webkit-flex-direction: column;\n      -ms-flex-direction: column;\n      flex-direction: column;\n      -webkit-flex-wrap: nowrap;\n      -ms-flex-wrap: nowrap;\n      flex-wrap: nowrap; }\n  .wp .alert-button {\n    z-index: 0;\n    display: block;\n    margin: 0;\n    font-size: 14px;\n    line-height: 20px; }\n  .wp .alert-tappable {\n    margin: 0;\n    padding: 0;\n    width: 100%;\n    font-size: inherit;\n    line-height: initial;\n    text-align: left;\n    background: transparent;\n    -webkit-appearance: none; }\n  .wp ion-alert ion-backdrop {\n    background: #fff; }\n  .wp .alert-wrapper {\n    width: 100%;\n    max-width: 520px;\n    border: 1px solid #327eff;\n    border-radius: 0;\n    background: #e6e6e6; }\n  .wp .alert-head {\n    padding: 20px 22px 5px 22px;\n    text-align: left; }\n  .wp .alert-title {\n    font-size: 20px;\n    font-weight: 400; }\n  .wp .alert-sub-title {\n    font-size: 16px; }\n  .wp .alert-message,\n  .wp .alert-input-group {\n    padding: 0 22px 8px 22px;\n    color: #000; }\n  .wp .alert-message {\n    max-height: 240px;\n    font-size: 13px; }\n    .wp .alert-message:empty {\n      padding: 0; }\n  .wp .alert-input {\n    margin: 5px 0 5px 0;\n    padding: 0 8px;\n    border: 2px solid rgba(0, 0, 0, 0.5);\n    line-height: 3rem;\n    color: #000; }\n    .wp .alert-input:focus {\n      border-color: #327eff; }\n  .wp .alert-radio-group,\n  .wp .alert-checkbox-group {\n    position: relative;\n    overflow: auto;\n    max-height: 240px; }\n  .wp .alert-tappable {\n    position: relative;\n    display: -webkit-box;\n    display: -webkit-flex;\n    display: -ms-flexbox;\n    display: flex;\n    overflow: hidden;\n    min-height: 4.4rem; }\n  .wp .alert-radio-label {\n    overflow: hidden;\n    -webkit-box-flex: 1;\n    -webkit-flex: 1;\n    -ms-flex: 1;\n    flex: 1;\n    padding: 13px 26px;\n    text-overflow: ellipsis;\n    white-space: nowrap; }\n  .wp .alert-radio-icon {\n    position: relative;\n    top: 0;\n    left: 13px;\n    display: block;\n    margin: 0;\n    width: 16px;\n    height: 16px;\n    border-width: 2px;\n    border-style: solid;\n    border-radius: 50%;\n    border-color: rgba(0, 0, 0, 0.5); }\n  .wp .alert-radio-inner {\n    position: absolute;\n    top: 2px;\n    left: 2px;\n    display: none;\n    width: 8px;\n    height: 8px;\n    border-radius: 50%;\n    background: #327eff; }\n  .wp .alert-radio[aria-checked=true] .alert-radio-label {\n    color: #000; }\n  .wp .alert-radio[aria-checked=true] .alert-radio-icon {\n    border-color: rgba(0, 0, 0, 0.5); }\n  .wp .alert-radio[aria-checked=true] .alert-radio-inner {\n    display: block; }\n  .wp .alert-checkbox-label {\n    overflow: hidden;\n    -webkit-box-flex: 1;\n    -webkit-flex: 1;\n    -ms-flex: 1;\n    flex: 1;\n    padding: 13px 26px;\n    text-overflow: ellipsis;\n    white-space: nowrap; }\n  .wp .alert-checkbox[aria-checked=true] .alert-checkbox-label {\n    color: initial; }\n  .wp .alert-checkbox-icon {\n    position: relative;\n    top: 0;\n    left: 13px;\n    width: 16px;\n    height: 16px;\n    border-width: 2px;\n    border-style: solid;\n    border-radius: 0;\n    border-color: rgba(0, 0, 0, 0.5);\n    background: transparent; }\n  .wp .alert-checkbox[aria-checked=true] .alert-checkbox-icon {\n    border-color: #327eff;\n    background: #327eff; }\n  .wp .alert-checkbox[aria-checked=true] .alert-checkbox-inner {\n    position: absolute;\n    top: -2px;\n    left: 3px;\n    width: 6px;\n    height: 12px;\n    border-width: 1px;\n    border-top-width: 0;\n    border-left-width: 0;\n    border-style: solid;\n    border-color: #fff;\n    -webkit-transform: rotate(45deg);\n    transform: rotate(45deg); }\n  .wp .alert-button-group {\n    -webkit-flex-wrap: wrap-reverse;\n    -ms-flex-wrap: wrap-reverse;\n    flex-wrap: wrap-reverse;\n    -webkit-box-pack: end;\n    -webkit-justify-content: flex-end;\n    -ms-flex-pack: end;\n    justify-content: flex-end;\n    padding: 20px 22px 20px 22px; }\n    .wp .alert-button-group.vertical .alert-button {\n      margin-top: 5px;\n      width: 100%; }\n      .wp .alert-button-group.vertical .alert-button:first-child:not(:only-child) {\n        margin-top: 0; }\n  .wp .alert-button {\n    padding: 5px;\n    width: 49.5%;\n    border-radius: 0;\n    font-weight: 400;\n    color: #000;\n    background: #b8b8b8; }\n    .wp .alert-button:first-child:not(:only-child) {\n      margin-right: 1%; }\n    .wp .alert-button.activated {\n      background: darkgray; }\n  .wp ion-badge {\n    display: inline-block;\n    padding: 3px 8px;\n    min-width: 10px;\n    font-size: 1.3rem;\n    font-weight: bold;\n    line-height: 1;\n    text-align: center;\n    white-space: nowrap;\n    vertical-align: baseline; }\n    .wp ion-badge:empty {\n      display: none; }\n  .wp ion-badge {\n    border-radius: 0;\n    color: #fff;\n    background-color: #327eff; }\n  .wp .badge-primary {\n    color: #fff;\n    background-color: #327eff; }\n  .wp .badge-secondary {\n    color: #fff;\n    background-color: #32db64; }\n  .wp .badge-danger {\n    color: #fff;\n    background-color: #f53d3d; }\n  .wp .badge-light {\n    color: #000;\n    background-color: #f4f4f4; }\n  .wp .badge-dark {\n    color: #fff;\n    background-color: #222; }\n  .wp .button {\n    -webkit-user-select: none;\n    -moz-user-select: none;\n    -ms-user-select: none;\n    user-select: none;\n    -webkit-appearance: none;\n    -moz-appearance: none;\n    position: relative;\n    z-index: 0;\n    display: inline-block;\n    overflow: hidden;\n    text-align: center;\n    text-overflow: ellipsis;\n    text-transform: none;\n    white-space: nowrap;\n    cursor: pointer;\n    vertical-align: top;\n    vertical-align: -webkit-baseline-middle;\n    -webkit-transition: background-color, opacity 100ms linear;\n    transition: background-color, opacity 100ms linear;\n    -webkit-font-kerning: none;\n    font-kerning: none; }\n  .wp .button-inner {\n    display: -webkit-box;\n    display: -webkit-flex;\n    display: -ms-flexbox;\n    display: flex;\n    -webkit-flex-flow: row nowrap;\n    -ms-flex-flow: row nowrap;\n    flex-flow: row nowrap;\n    -webkit-flex-shrink: 0;\n    -ms-flex-negative: 0;\n    flex-shrink: 0;\n    -webkit-box-align: center;\n    -webkit-align-items: center;\n    -ms-flex-align: center;\n    align-items: center;\n    -webkit-box-pack: center;\n    -webkit-justify-content: center;\n    -ms-flex-pack: center;\n    justify-content: center;\n    width: 100%;\n    height: 100%; }\n  .wp [ion-button] {\n    text-decoration: none; }\n  .wp a[disabled],\n  .wp button[disabled],\n  .wp [ion-button][disabled] {\n    cursor: default;\n    opacity: .4;\n    pointer-events: none; }\n  .wp .button-block {\n    display: block;\n    clear: both;\n    width: 100%; }\n    .wp .button-block::after {\n      clear: both; }\n  .wp .button-full {\n    display: block;\n    width: 100%; }\n  .wp .button-full.button-outline {\n    border-right-width: 0;\n    border-left-width: 0;\n    border-radius: 0; }\n  .wp .button {\n    margin: 0.4rem 0.2rem;\n    padding: 0 1.1em;\n    height: 3.6rem;\n    border: 3px solid transparent;\n    border-radius: 0;\n    font-size: 1.4rem;\n    color: #fff;\n    background-color: #327eff; }\n    .wp .button:hover:not(.disable-hover) {\n      border-color: #2e74eb;\n      background-color: #327eff; }\n    .wp .button.activated {\n      background-color: #2e74eb; }\n  .wp .button-large {\n    padding: 0 1em;\n    height: 2.8em;\n    font-size: 2rem; }\n  .wp .button-small {\n    padding: 0 0.9em;\n    height: 2.1em;\n    font-size: 1.3rem; }\n    .wp .button-small[icon-only] ion-icon {\n      font-size: 1.4em; }\n  .wp .button-block {\n    margin-right: 0;\n    margin-left: 0; }\n  .wp .button-full {\n    margin-right: 0;\n    margin-left: 0;\n    border-right-width: 0;\n    border-left-width: 0;\n    border-radius: 0; }\n  .wp .button-outline {\n    border-width: 1px;\n    border-style: solid;\n    border-color: #327eff;\n    color: #327eff;\n    background-color: transparent; }\n    .wp .button-outline:hover:not(.disable-hover) {\n      background-color: rgba(158, 158, 158, 0.1); }\n    .wp .button-outline.activated {\n      background-color: rgba(50, 126, 255, 0.16); }\n  .wp .button-clear {\n    color: #327eff;\n    background-color: transparent; }\n    .wp .button-clear.activated {\n      background-color: rgba(158, 158, 158, 0.2); }\n    .wp .button-clear:hover:not(.disable-hover) {\n      background-color: rgba(158, 158, 158, 0.1); }\n  .wp .button-round {\n    padding: 0 2.6rem;\n    border-radius: 64px; }\n  .wp .button-fab {\n    border-radius: 50%; }\n  .wp [icon-only] {\n    padding: 0; }\n  .wp ion-button-effect {\n    display: none; }\n  .wp .button-primary {\n    color: #fff;\n    background-color: #327eff; }\n    .wp .button-primary:hover:not(.disable-hover) {\n      border-color: #2e74eb;\n      background-color: #327eff; }\n    .wp .button-primary.activated {\n      background-color: #2e74eb; }\n  .wp .button-outline-primary {\n    border-color: #3078f2;\n    color: #3078f2;\n    background-color: transparent; }\n    .wp .button-outline-primary:hover:not(.disable-hover) {\n      border-color: #3078f2;\n      background-color: rgba(158, 158, 158, 0.1); }\n    .wp .button-outline-primary.activated {\n      background-color: rgba(48, 120, 242, 0.16); }\n  .wp .button-clear-primary {\n    color: #327eff;\n    background-color: transparent; }\n    .wp .button-clear-primary.activated {\n      background-color: rgba(158, 158, 158, 0.2); }\n    .wp .button-clear-primary:hover:not(.disable-hover) {\n      color: #327eff; }\n  .wp .button-secondary {\n    color: #fff;\n    background-color: #32db64; }\n    .wp .button-secondary:hover:not(.disable-hover) {\n      border-color: #2ec95c;\n      background-color: #32db64; }\n    .wp .button-secondary.activated {\n      background-color: #2ec95c; }\n  .wp .button-outline-secondary {\n    border-color: #30d05f;\n    color: #30d05f;\n    background-color: transparent; }\n    .wp .button-outline-secondary:hover:not(.disable-hover) {\n      border-color: #30d05f;\n      background-color: rgba(158, 158, 158, 0.1); }\n    .wp .button-outline-secondary.activated {\n      background-color: rgba(48, 208, 95, 0.16); }\n  .wp .button-clear-secondary {\n    color: #32db64;\n    background-color: transparent; }\n    .wp .button-clear-secondary.activated {\n      background-color: rgba(158, 158, 158, 0.2); }\n    .wp .button-clear-secondary:hover:not(.disable-hover) {\n      color: #32db64; }\n  .wp .button-danger {\n    color: #fff;\n    background-color: #f53d3d; }\n    .wp .button-danger:hover:not(.disable-hover) {\n      border-color: #e13838;\n      background-color: #f53d3d; }\n    .wp .button-danger.activated {\n      background-color: #e13838; }\n  .wp .button-outline-danger {\n    border-color: #e93a3a;\n    color: #e93a3a;\n    background-color: transparent; }\n    .wp .button-outline-danger:hover:not(.disable-hover) {\n      border-color: #e93a3a;\n      background-color: rgba(158, 158, 158, 0.1); }\n    .wp .button-outline-danger.activated {\n      background-color: rgba(233, 58, 58, 0.16); }\n  .wp .button-clear-danger {\n    color: #f53d3d;\n    background-color: transparent; }\n    .wp .button-clear-danger.activated {\n      background-color: rgba(158, 158, 158, 0.2); }\n    .wp .button-clear-danger:hover:not(.disable-hover) {\n      color: #f53d3d; }\n  .wp .button-light {\n    color: #000;\n    background-color: #f4f4f4; }\n    .wp .button-light:hover:not(.disable-hover) {\n      border-color: #e0e0e0;\n      background-color: #f4f4f4; }\n    .wp .button-light.activated {\n      background-color: #e0e0e0; }\n  .wp .button-outline-light {\n    border-color: #e8e8e8;\n    color: #e8e8e8;\n    background-color: transparent; }\n    .wp .button-outline-light:hover:not(.disable-hover) {\n      border-color: #e8e8e8;\n      background-color: rgba(158, 158, 158, 0.1); }\n    .wp .button-outline-light.activated {\n      background-color: rgba(232, 232, 232, 0.16); }\n  .wp .button-clear-light {\n    color: #f4f4f4;\n    background-color: transparent; }\n    .wp .button-clear-light.activated {\n      background-color: rgba(158, 158, 158, 0.2); }\n    .wp .button-clear-light:hover:not(.disable-hover) {\n      color: #f4f4f4; }\n  .wp .button-dark {\n    color: #fff;\n    background-color: #222; }\n    .wp .button-dark:hover:not(.disable-hover) {\n      border-color: #343434;\n      background-color: #222; }\n    .wp .button-dark.activated {\n      background-color: #343434; }\n  .wp .button-outline-dark {\n    border-color: #2d2d2d;\n    color: #2d2d2d;\n    background-color: transparent; }\n    .wp .button-outline-dark:hover:not(.disable-hover) {\n      border-color: #2d2d2d;\n      background-color: rgba(158, 158, 158, 0.1); }\n    .wp .button-outline-dark.activated {\n      background-color: rgba(45, 45, 45, 0.16); }\n  .wp .button-clear-dark {\n    color: #222;\n    background-color: transparent; }\n    .wp .button-clear-dark.activated {\n      background-color: rgba(158, 158, 158, 0.2); }\n    .wp .button-clear-dark:hover:not(.disable-hover) {\n      color: #222; }\n  .wp .button-fab {\n    position: absolute;\n    overflow: hidden;\n    width: 56px;\n    min-width: 0;\n    height: 56px;\n    font-size: 14px;\n    line-height: 56px;\n    vertical-align: middle;\n    background-clip: padding-box; }\n  .wp .button-fab ion-icon {\n    -webkit-box-flex: 1;\n    -webkit-flex: 1;\n    -ms-flex: 1;\n    flex: 1;\n    font-size: 2.8rem; }\n  .wp [fab-center] {\n    left: 50%;\n    margin-left: -28px; }\n  .wp [fab-top] {\n    top: 16px; }\n  .wp [fab-right] {\n    right: 16px; }\n  .wp [fab-bottom] {\n    bottom: 16px; }\n  .wp [fab-left] {\n    left: 16px; }\n  .wp [fab-fixed] {\n    position: fixed; }\n  .wp [icon-left] ion-icon {\n    font-size: 1.4em;\n    line-height: .67;\n    pointer-events: none;\n    padding-right: .3em; }\n  .wp [icon-right] ion-icon {\n    font-size: 1.4em;\n    line-height: .67;\n    pointer-events: none;\n    padding-left: .4em; }\n  .wp [icon-only] {\n    padding: 0;\n    min-width: .9em; }\n  .wp [icon-only] ion-icon {\n    padding: 0 .5em;\n    font-size: 1.8em;\n    line-height: .67;\n    pointer-events: none; }\n  .wp ion-card {\n    display: block;\n    overflow: hidden; }\n  .wp ion-card img {\n    display: block;\n    width: 100%; }\n  .wp ion-card-header {\n    display: block;\n    overflow: hidden;\n    text-overflow: ellipsis;\n    white-space: nowrap; }\n  .wp ion-card-content {\n    display: block; }\n  .wp ion-card {\n    margin: 8px 8px 8px 8px;\n    width: calc(100% - 16px);\n    border-radius: 1px;\n    font-size: 1.4rem;\n    background: #fff;\n    box-shadow: 0 1px 1px 1px rgba(0, 0, 0, 0.2); }\n    .wp ion-card ion-list {\n      margin-bottom: 0; }\n    .wp ion-card > .item:last-child,\n    .wp ion-card > .item-wrapper:last-child .item {\n      border-bottom: 0; }\n    .wp ion-card .item .item-inner {\n      border: 0; }\n    .wp ion-card ion-card-content {\n      padding: 13px 16px 13px 16px;\n      font-size: 1.4rem;\n      line-height: 1.5; }\n    .wp ion-card ion-card-header {\n      padding: 16px;\n      font-size: 1.6rem;\n      color: #222; }\n    .wp ion-card ion-card-header + ion-card-content,\n    .wp ion-card .item + ion-card-content {\n      padding-top: 0; }\n    .wp ion-card ion-note[item-left],\n    .wp ion-card ion-note[item-right] {\n      font-size: 1.3rem; }\n    .wp ion-card ion-card-title {\n      display: block;\n      margin: 2px 0;\n      padding: 8px 0 8px 0;\n      font-size: 2.4rem;\n      line-height: 1.2;\n      color: #222; }\n    .wp ion-card h1 {\n      margin: 0 0 2px;\n      font-size: 2.4rem;\n      font-weight: normal;\n      color: #222; }\n    .wp ion-card h2 {\n      margin: 2px 0;\n      font-size: 1.6rem;\n      font-weight: normal;\n      color: #222; }\n    .wp ion-card h3,\n    .wp ion-card h4,\n    .wp ion-card h5,\n    .wp ion-card h6 {\n      margin: 2px 0;\n      font-size: 1.4rem;\n      font-weight: normal;\n      color: #222; }\n    .wp ion-card p {\n      margin: 0 0 2px;\n      font-size: 1.4rem;\n      font-weight: normal;\n      line-height: 1.5;\n      color: #222; }\n  .wp ion-card + ion-card {\n    margin-top: 0; }\n  .wp ion-checkbox {\n    position: relative;\n    display: inline-block; }\n  .wp .checkbox-icon {\n    position: relative;\n    width: 16px;\n    height: 16px;\n    border-width: 2px;\n    border-style: solid;\n    border-radius: 0;\n    border-color: #333;\n    background-color: #fff; }\n  .wp .checkbox-checked {\n    border-color: #327eff;\n    background-color: #327eff; }\n  .wp .checkbox-checked .checkbox-inner {\n    position: absolute;\n    top: -2px;\n    left: 3px;\n    width: 6px;\n    height: 12px;\n    border-width: 1px;\n    border-top-width: 0;\n    border-left-width: 0;\n    border-style: solid;\n    border-color: #fff;\n    -webkit-transform: rotate(45deg);\n    transform: rotate(45deg); }\n  .wp .checkbox-disabled,\n  .wp .item-checkbox-disabled ion-label {\n    opacity: 0.3;\n    pointer-events: none; }\n  .wp .item ion-checkbox {\n    position: static;\n    display: block;\n    margin: 9px 16px 9px 4px; }\n    .wp .item ion-checkbox[item-right] {\n      margin: 11px 10px 10px 0; }\n  .wp ion-checkbox + .item-inner ion-label {\n    margin-left: 0; }\n  .wp .checkbox-primary .checkbox-checked {\n    border-color: #327eff;\n    background-color: #327eff; }\n    .wp .checkbox-primary .checkbox-checked .checkbox-inner {\n      border-color: #fff; }\n  .wp .checkbox-secondary .checkbox-checked {\n    border-color: #32db64;\n    background-color: #32db64; }\n    .wp .checkbox-secondary .checkbox-checked .checkbox-inner {\n      border-color: #fff; }\n  .wp .checkbox-danger .checkbox-checked {\n    border-color: #f53d3d;\n    background-color: #f53d3d; }\n    .wp .checkbox-danger .checkbox-checked .checkbox-inner {\n      border-color: #fff; }\n  .wp .checkbox-light .checkbox-checked {\n    border-color: #f4f4f4;\n    background-color: #f4f4f4; }\n    .wp .checkbox-light .checkbox-checked .checkbox-inner {\n      border-color: #000; }\n  .wp .checkbox-dark .checkbox-checked {\n    border-color: #222;\n    background-color: #222; }\n    .wp .checkbox-dark .checkbox-checked .checkbox-inner {\n      border-color: #fff; }\n  .wp ion-chip {\n    display: -webkit-inline-box;\n    display: -webkit-inline-flex;\n    display: -ms-inline-flexbox;\n    display: inline-flex;\n    -webkit-align-self: center;\n    -ms-flex-item-align: center;\n    align-self: center;\n    font-weight: normal;\n    vertical-align: middle;\n    box-sizing: border-box; }\n    .wp ion-chip .button {\n      margin: 0;\n      width: 32px;\n      height: 32px;\n      border-radius: 50%; }\n    .wp ion-chip ion-icon {\n      width: 32px;\n      height: 32px;\n      border-radius: 50%;\n      font-size: 18px;\n      line-height: 32px; }\n    .wp ion-chip ion-avatar {\n      width: 32px;\n      min-width: 32px;\n      height: 32px;\n      min-height: 32px;\n      border-radius: 50%; }\n      .wp ion-chip ion-avatar img {\n        display: block;\n        width: 100%;\n        max-width: 100%;\n        height: 100%;\n        max-height: 100%;\n        border-radius: 50%; }\n  .wp ion-chip {\n    margin: 2px 0;\n    height: 32px;\n    border-radius: 16px;\n    font-size: 13px;\n    line-height: 32px;\n    color: rgba(0, 0, 0, 0.87);\n    background: rgba(0, 0, 0, 0.12); }\n    .wp ion-chip > ion-label {\n      margin: 0 10px; }\n    .wp ion-chip > ion-icon {\n      color: #fff;\n      background-color: #327eff; }\n    .wp ion-chip .button {\n      border: 0; }\n  .wp .chip-primary,\n  .wp ion-chip .icon-primary {\n    color: #fff;\n    background-color: #327eff; }\n  .wp .chip-secondary,\n  .wp ion-chip .icon-secondary {\n    color: #fff;\n    background-color: #32db64; }\n  .wp .chip-danger,\n  .wp ion-chip .icon-danger {\n    color: #fff;\n    background-color: #f53d3d; }\n  .wp .chip-light,\n  .wp ion-chip .icon-light {\n    color: #000;\n    background-color: #f4f4f4; }\n  .wp .chip-dark,\n  .wp ion-chip .icon-dark {\n    color: #fff;\n    background-color: #222; }\n  .wp [no-padding],\n  .wp [no-padding] scroll-content {\n    padding: 0; }\n  .wp [no-margin],\n  .wp [no-margin] scroll-content {\n    margin: 0; }\n  .wp ion-fixed {\n    position: absolute;\n    z-index: 2;\n    -webkit-transform: translateZ(0);\n    transform: translateZ(0); }\n  .wp ion-content {\n    background-color: #fff; }\n  .wp [padding],\n  .wp [padding] scroll-content {\n    padding: 16px; }\n  .wp [padding-top],\n  .wp [padding-top] scroll-content {\n    padding-top: 16px; }\n  .wp [padding-left],\n  .wp [padding-left] scroll-content {\n    padding-left: 16px; }\n  .wp [padding-right],\n  .wp [padding-right] scroll-content {\n    padding-right: 16px; }\n  .wp [padding-bottom],\n  .wp [padding-bottom] scroll-content {\n    padding-bottom: 16px; }\n  .wp [padding-vertical],\n  .wp [padding-vertical] scroll-content {\n    padding-top: 16px;\n    padding-bottom: 16px; }\n  .wp [padding-horizontal],\n  .wp [padding-horizontal] scroll-content {\n    padding-right: 16px;\n    padding-left: 16px; }\n  .wp [margin],\n  .wp [margin] scroll-content {\n    margin: 16px; }\n  .wp [margin-top],\n  .wp [margin-top] scroll-content {\n    margin-top: 16px; }\n  .wp [margin-left],\n  .wp [margin-left] scroll-content {\n    margin-left: 16px; }\n  .wp [margin-right],\n  .wp [margin-right] scroll-content {\n    margin-right: 16px; }\n  .wp [margin-bottom],\n  .wp [margin-bottom] scroll-content {\n    margin-bottom: 16px; }\n  .wp [margin-vertical],\n  .wp [margin-vertical] scroll-content {\n    margin-top: 16px;\n    margin-bottom: 16px; }\n  .wp [margin-horizontal],\n  .wp [margin-horizontal] scroll-content {\n    margin-right: 16px;\n    margin-left: 16px; }\n  .wp ion-datetime {\n    display: -webkit-box;\n    display: -webkit-flex;\n    display: -ms-flexbox;\n    display: flex;\n    overflow: hidden; }\n  .wp .datetime-text {\n    overflow: hidden;\n    -webkit-box-flex: 1;\n    -webkit-flex: 1;\n    -ms-flex: 1;\n    flex: 1;\n    min-width: 16px;\n    min-height: 1.2em;\n    font-size: inherit;\n    line-height: 1.2;\n    text-overflow: ellipsis;\n    white-space: nowrap; }\n  .wp .datetime-disabled,\n  .wp .item-datetime-disabled ion-label {\n    opacity: .4;\n    pointer-events: none; }\n  .wp .item-label-stacked ion-datetime,\n  .wp .item-label-floating ion-datetime {\n    padding-left: 0;\n    width: 100%; }\n  .wp ion-datetime {\n    padding: 13px 8px 13px 16px;\n    min-width: 45%; }\n  .wp .datetime-text {\n    padding: 0 8px;\n    min-height: 3.4rem;\n    border: 2px solid rgba(0, 0, 0, 0.5);\n    line-height: 3rem; }\n  .wp .item-datetime ion-label[floating] {\n    -webkit-transform: translate3d(8px, 41px, 0);\n    transform: translate3d(8px, 41px, 0); }\n  .wp ion-icon {\n    display: inline-block;\n    font-size: 1.2em; }\n  .wp ion-icon[small] {\n    min-height: 1.1em;\n    font-size: 1.1em; }\n  .wp .icon-primary {\n    color: #327eff; }\n  .wp .icon-secondary {\n    color: #32db64; }\n  .wp .icon-danger {\n    color: #f53d3d; }\n  .wp .icon-light {\n    color: #f4f4f4; }\n  .wp .icon-dark {\n    color: #222; }\n  .wp ion-input,\n  .wp ion-textarea {\n    position: relative;\n    display: block;\n    -webkit-box-flex: 1;\n    -webkit-flex: 1;\n    -ms-flex: 1;\n    flex: 1;\n    width: 100%; }\n  .wp .item-input ion-input,\n  .wp .item-input ion-textarea {\n    position: static; }\n  .wp .item.item-textarea {\n    -webkit-box-align: stretch;\n    -webkit-align-items: stretch;\n    -ms-flex-align: stretch;\n    align-items: stretch; }\n  .wp .text-input {\n    display: inline-block;\n    -webkit-box-flex: 1;\n    -webkit-flex: 1;\n    -ms-flex: 1;\n    flex: 1;\n    width: 92%;\n    width: calc(100% - 10px);\n    border: 0;\n    border-radius: 0;\n    background: transparent;\n    -webkit-appearance: none; }\n    .wp .text-input::-moz-placeholder {\n      color: #999; }\n    .wp .text-input:-ms-input-placeholder {\n      color: #999; }\n    .wp .text-input::-webkit-input-placeholder {\n      text-indent: 0;\n      color: #999; }\n  .wp textarea.text-input {\n    display: block; }\n  .wp .text-input[disabled] {\n    opacity: .4; }\n  .wp input.text-input:-webkit-autofill {\n    background-color: transparent; }\n  .wp .platform-mobile textarea.text-input {\n    resize: none; }\n  .wp .input-cover {\n    position: absolute;\n    top: 0;\n    left: 0;\n    width: 100%;\n    height: 100%; }\n  .wp .input-has-focus .input-cover {\n    display: none; }\n  .wp .input-has-focus {\n    pointer-events: none; }\n  .wp .input-has-focus input,\n  .wp .input-has-focus textarea,\n  .wp .input-has-focus a,\n  .wp .input-has-focus button {\n    pointer-events: auto; }\n  .wp [next-input] {\n    position: absolute;\n    bottom: 1px;\n    padding: 0;\n    width: 1px;\n    height: 1px;\n    border: 0;\n    background: transparent;\n    pointer-events: none; }\n  .wp .text-input-clear-icon {\n    position: absolute;\n    top: 0;\n    display: none;\n    margin: 0;\n    padding: 0;\n    height: 100%;\n    background-repeat: no-repeat;\n    background-position: center; }\n  .wp .input-has-focus.input-has-value .text-input-clear-icon {\n    display: block; }\n  .wp .text-input.cloned-input {\n    position: relative;\n    top: 0;\n    pointer-events: none; }\n  .wp .item-input:not(.item-label-floating) .text-input.cloned-active {\n    display: none; }\n  .wp .text-input {\n    margin: 13px 8px 13px 8px;\n    padding: 0 8px;\n    width: calc(100% - 8px - 8px);\n    border: 2px solid rgba(0, 0, 0, 0.5);\n    line-height: 3rem; }\n  .wp .inset-input {\n    margin: 6.5px 16px 6.5px 16px;\n    padding: 6.5px 8px 6.5px 8px; }\n  .wp .item-input.input-has-focus .text-input {\n    border-color: #327eff; }\n  .wp .item-input.ng-valid.input-has-value:not(.input-has-focus) .text-input {\n    border-color: #32db64; }\n  .wp .item-input.ng-invalid.ng-touched:not(.input-has-focus) .text-input {\n    border-color: #f53d3d; }\n  .wp .item-label-stacked .text-input,\n  .wp .item-label-floating .text-input,\n  .wp .item-label-stacked ion-select,\n  .wp .item-label-floating ion-select {\n    margin-top: 8px;\n    margin-bottom: 8px;\n    margin-left: 0;\n    width: calc(100% - 8px); }\n  .wp .item-label-floating .text-input.cloned-input {\n    top: 32px; }\n  .wp .item-label-stacked .text-input.cloned-input {\n    top: 27px; }\n  .wp .item-label-stacked [item-right],\n  .wp .item-label-floating [item-right] {\n    -webkit-align-self: flex-end;\n    -ms-flex-item-align: end;\n    align-self: flex-end; }\n  .wp ion-input[clearInput] {\n    position: relative; }\n    .wp ion-input[clearInput] .text-input {\n      padding-right: 30px; }\n  .wp .text-input-clear-icon {\n    background-image: url(\"data:image/svg+xml;charset=utf-8,<svg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%20512%20512'><polygon%20fill='rgba(0,%200,%200,%200.5)'%20points='405,136.798%20375.202,107%20256,226.202%20136.798,107%20107,136.798%20226.202,256%20107,375.202%20136.798,405%20256,285.798%20375.202,405%20405,375.202%20285.798,256'/></svg>\");\n    right: 8px;\n    width: 30px;\n    background-size: 22px; }\n  .wp .item {\n    display: -webkit-box;\n    display: -webkit-flex;\n    display: -ms-flexbox;\n    display: flex;\n    overflow: hidden;\n    -webkit-box-align: center;\n    -webkit-align-items: center;\n    -ms-flex-align: center;\n    align-items: center;\n    -webkit-box-pack: justify;\n    -webkit-justify-content: space-between;\n    -ms-flex-pack: justify;\n    justify-content: space-between;\n    margin: 0;\n    padding: 0;\n    width: 100%;\n    min-height: 4.4rem;\n    border: 0;\n    font-weight: normal;\n    line-height: normal;\n    text-align: initial;\n    text-decoration: none;\n    color: inherit; }\n  .wp .item-inner {\n    display: -webkit-box;\n    display: -webkit-flex;\n    display: -ms-flexbox;\n    display: flex;\n    overflow: hidden;\n    -webkit-box-flex: 1;\n    -webkit-flex: 1;\n    -ms-flex: 1;\n    flex: 1;\n    -webkit-box-orient: vertical;\n    -webkit-box-direction: normal;\n    -webkit-flex-direction: inherit;\n    -ms-flex-direction: inherit;\n    flex-direction: inherit;\n    -webkit-box-align: inherit;\n    -webkit-align-items: inherit;\n    -ms-flex-align: inherit;\n    align-items: inherit;\n    -webkit-align-self: stretch;\n    -ms-flex-item-align: stretch;\n    align-self: stretch;\n    margin: 0;\n    padding: 0;\n    min-height: inherit;\n    border: 0; }\n  .wp .input-wrapper {\n    display: -webkit-box;\n    display: -webkit-flex;\n    display: -ms-flexbox;\n    display: flex;\n    overflow: hidden;\n    -webkit-box-flex: 1;\n    -webkit-flex: 1;\n    -ms-flex: 1;\n    flex: 1;\n    -webkit-box-orient: vertical;\n    -webkit-box-direction: normal;\n    -webkit-flex-direction: inherit;\n    -ms-flex-direction: inherit;\n    flex-direction: inherit;\n    -webkit-box-align: inherit;\n    -webkit-align-items: inherit;\n    -ms-flex-align: inherit;\n    align-items: inherit;\n    -webkit-align-self: stretch;\n    -ms-flex-item-align: stretch;\n    align-self: stretch;\n    text-overflow: ellipsis; }\n  .wp .item[no-lines],\n  .wp .item[no-lines] .item-inner {\n    border: 0; }\n  .wp ion-item-group {\n    display: block; }\n  .wp ion-item-divider {\n    z-index: 1000;\n    display: -webkit-box;\n    display: -webkit-flex;\n    display: -ms-flexbox;\n    display: flex;\n    overflow: hidden;\n    -webkit-box-align: center;\n    -webkit-align-items: center;\n    -ms-flex-align: center;\n    align-items: center;\n    -webkit-box-pack: justify;\n    -webkit-justify-content: space-between;\n    -ms-flex-pack: justify;\n    justify-content: space-between;\n    margin: 0;\n    padding: 0;\n    width: 100%;\n    min-height: 30px; }\n    .wp ion-item-divider[sticky] {\n      position: -webkit-sticky;\n      position: sticky;\n      top: 0; }\n  .wp [vertical-align-top],\n  .wp ion-input.item {\n    -webkit-box-align: start;\n    -webkit-align-items: flex-start;\n    -ms-flex-align: start;\n    align-items: flex-start; }\n  .wp .item > ion-icon[small]:first-child,\n  .wp .item-inner > ion-icon[small]:first-child {\n    min-width: 18px; }\n  .wp .item > ion-icon:first-child,\n  .wp .item-inner > ion-icon:first-child {\n    min-width: 24px;\n    text-align: center; }\n  .wp .item > ion-icon,\n  .wp .item-inner > ion-icon {\n    min-height: 2.4rem;\n    font-size: 2.4rem;\n    line-height: 1; }\n    .wp .item > ion-icon[large],\n    .wp .item-inner > ion-icon[large] {\n      min-height: 3.2rem;\n      font-size: 3.2rem; }\n    .wp .item > ion-icon[small],\n    .wp .item-inner > ion-icon[small] {\n      min-height: 1.8rem;\n      font-size: 1.8rem; }\n  .wp ion-avatar,\n  .wp ion-thumbnail {\n    display: block;\n    line-height: 1; }\n    .wp ion-avatar img,\n    .wp ion-thumbnail img {\n      display: block; }\n  .wp .item-cover {\n    position: absolute;\n    top: 0;\n    left: 0;\n    width: 100%;\n    height: 100%;\n    background: transparent;\n    cursor: pointer; }\n  .wp ion-item-sliding {\n    position: relative;\n    display: block;\n    overflow: hidden;\n    width: 100%; }\n    .wp ion-item-sliding .item {\n      position: static; }\n  .wp ion-item-options {\n    position: absolute;\n    top: 0;\n    right: 0;\n    z-index: 1;\n    display: none;\n    -webkit-box-pack: end;\n    -webkit-justify-content: flex-end;\n    -ms-flex-pack: end;\n    justify-content: flex-end;\n    height: 100%;\n    font-size: 14px;\n    visibility: hidden; }\n  .wp ion-item-options[side=left] {\n    right: auto;\n    left: 0;\n    -webkit-box-pack: start;\n    -webkit-justify-content: flex-start;\n    -ms-flex-pack: start;\n    justify-content: flex-start; }\n  .wp ion-item-options .button {\n    margin: 0;\n    padding: 0 .7em;\n    height: 100%;\n    border-radius: 0;\n    box-shadow: none;\n    box-sizing: content-box; }\n  .wp ion-item-options:not([icon-left]) .button .button-inner {\n    -webkit-box-orient: vertical;\n    -webkit-box-direction: normal;\n    -webkit-flex-direction: column;\n    -ms-flex-direction: column;\n    flex-direction: column; }\n  .wp ion-item-options:not([icon-left]) .button ion-icon {\n    padding-right: 0;\n    padding-bottom: .3em;\n    padding-left: 0; }\n  .wp ion-item-sliding.active-slide .item,\n  .wp ion-item-sliding.active-slide .item.activated {\n    position: relative;\n    z-index: 2;\n    opacity: 1;\n    -webkit-transition: -webkit-transform 500ms cubic-bezier(0.36, 0.66, 0.04, 1);\n    transition: transform 500ms cubic-bezier(0.36, 0.66, 0.04, 1);\n    pointer-events: none;\n    will-change: transform; }\n  .wp ion-item-sliding.active-slide ion-item-options {\n    display: -webkit-box;\n    display: -webkit-flex;\n    display: -ms-flexbox;\n    display: flex; }\n  .wp ion-item-sliding.active-slide.active-options-left ion-item-options[side=left] {\n    width: 100%;\n    visibility: visible; }\n  .wp ion-item-sliding.active-slide.active-options-right ion-item-options:not([side=left]) {\n    width: 100%;\n    visibility: visible; }\n  .wp .button-expandable {\n    -webkit-flex-shrink: 0;\n    -ms-flex-negative: 0;\n    flex-shrink: 0;\n    -webkit-transition-duration: 0;\n    transition-duration: 0;\n    -webkit-transition-property: none;\n    transition-property: none;\n    -webkit-transition-timing-function: cubic-bezier(0.65, 0.05, 0.36, 1);\n    transition-timing-function: cubic-bezier(0.65, 0.05, 0.36, 1); }\n  .wp ion-item-sliding.active-swipe-right .button-expandable {\n    -webkit-box-ordinal-group: 2;\n    -webkit-order: 1;\n    -ms-flex-order: 1;\n    order: 1;\n    padding-left: 90%;\n    -webkit-transition-duration: .6s;\n    transition-duration: .6s;\n    -webkit-transition-property: padding-left;\n    transition-property: padding-left; }\n  .wp ion-item-sliding.active-swipe-left .button-expandable {\n    -webkit-box-ordinal-group: 0;\n    -webkit-order: -1;\n    -ms-flex-order: -1;\n    order: -1;\n    padding-right: 90%;\n    -webkit-transition-duration: .6s;\n    transition-duration: .6s;\n    -webkit-transition-property: padding-right;\n    transition-property: padding-right; }\n  .wp ion-reorder {\n    display: none;\n    -webkit-box-flex: 1;\n    -webkit-flex: 1;\n    -ms-flex: 1;\n    flex: 1;\n    -webkit-box-align: center;\n    -webkit-align-items: center;\n    -ms-flex-align: center;\n    align-items: center;\n    -webkit-box-pack: center;\n    -webkit-justify-content: center;\n    -ms-flex-pack: center;\n    justify-content: center;\n    max-width: 40px;\n    height: 100%;\n    font-size: 1.7em;\n    opacity: .25;\n    -webkit-transform: translate3d(120%, 0, 0);\n    transform: translate3d(120%, 0, 0);\n    -webkit-transition: -webkit-transform 125ms ease-in;\n    transition: transform 125ms ease-in;\n    pointer-events: all;\n    -ms-touch-action: manipulation;\n    touch-action: manipulation; }\n    .wp ion-reorder ion-icon {\n      pointer-events: none; }\n  .wp .reorder-enabled ion-reorder {\n    display: -webkit-box;\n    display: -webkit-flex;\n    display: -ms-flexbox;\n    display: flex; }\n  .wp .reorder-visible ion-reorder {\n    -webkit-transform: translate3d(0, 0, 0);\n    transform: translate3d(0, 0, 0); }\n  .wp .reorder-list-active .item,\n  .wp .reorder-list-active .item-wrapper {\n    -webkit-transition: -webkit-transform 300ms;\n    transition: transform 300ms;\n    will-change: transform; }\n  .wp .reorder-list-active .item-inner {\n    pointer-events: none; }\n  .wp .item-wrapper.reorder-active,\n  .wp .item.reorder-active,\n  .wp .reorder-active {\n    z-index: 4;\n    box-shadow: 0 0 10px rgba(0, 0, 0, 0.4);\n    opacity: .8;\n    -webkit-transition: none;\n    transition: none;\n    pointer-events: none; }\n  .wp .item {\n    position: relative;\n    padding-right: 0;\n    padding-left: 16px;\n    font-size: 1.6rem;\n    font-weight: normal;\n    text-transform: none;\n    color: #000;\n    background-color: #fff;\n    box-shadow: none; }\n    .wp .item h1 {\n      margin: 0 0 2px;\n      font-size: 2.4rem;\n      font-weight: normal; }\n    .wp .item h2 {\n      margin: 2px 0;\n      font-size: 1.6rem;\n      font-weight: normal; }\n    .wp .item h3,\n    .wp .item h4,\n    .wp .item h5,\n    .wp .item h6 {\n      margin: 2px 0;\n      font-size: 1.4rem;\n      font-weight: normal;\n      line-height: normal; }\n    .wp .item p {\n      overflow: inherit;\n      margin: 0 0 2px;\n      font-size: 1.4rem;\n      line-height: normal;\n      text-overflow: inherit;\n      color: #666; }\n  .wp .item.activated {\n    background-color: #aaa; }\n  .wp .item[no-lines] {\n    border-width: 0; }\n  .wp .item .item-inner {\n    padding-right: 8px;\n    border-bottom: 1px solid transparent; }\n  .wp [item-left],\n  .wp [item-right] {\n    margin: 9px 8px 9px 0; }\n  .wp ion-icon[item-left],\n  .wp ion-icon[item-right] {\n    margin-top: 11px;\n    margin-bottom: 10px;\n    margin-left: 0; }\n  .wp .item-button {\n    padding: 0 .6em;\n    height: 25px;\n    font-size: 1.2rem; }\n  .wp .item-button[icon-only] ion-icon,\n  .wp .item-button[icon-only] {\n    padding: 0 1px; }\n  .wp [text-wrap] ion-label {\n    font-size: 1.4rem;\n    line-height: 1.5; }\n  .wp ion-icon[item-left] + .item-inner,\n  .wp ion-icon[item-left] + .item-input {\n    margin-left: 8px; }\n  .wp ion-avatar[item-left],\n  .wp ion-thumbnail[item-left] {\n    margin: 8px 16px 8px 0; }\n  .wp ion-avatar[item-right],\n  .wp ion-thumbnail[item-right] {\n    margin: 8px; }\n  .wp ion-avatar {\n    min-width: 4rem;\n    min-height: 4rem; }\n    .wp ion-avatar img {\n      max-width: 4rem;\n      max-height: 4rem;\n      border-radius: 2rem; }\n  .wp ion-thumbnail {\n    min-width: 8rem;\n    min-height: 8rem; }\n    .wp ion-thumbnail img {\n      max-width: 8rem;\n      max-height: 8rem; }\n  .wp ion-note {\n    color: rgba(0, 0, 0, 0.5); }\n  .wp ion-item-divider {\n    padding-left: 16px;\n    color: #222;\n    background-color: #fff; }\n  .wp .item .text-primary {\n    color: #327eff; }\n  .wp .item-primary {\n    color: #fff;\n    background-color: #327eff; }\n  .wp .item .text-secondary {\n    color: #32db64; }\n  .wp .item-secondary {\n    color: #fff;\n    background-color: #32db64; }\n  .wp .item .text-danger {\n    color: #f53d3d; }\n  .wp .item-danger {\n    color: #fff;\n    background-color: #f53d3d; }\n  .wp .item .text-light {\n    color: #f4f4f4; }\n  .wp .item-light {\n    color: #000;\n    background-color: #f4f4f4; }\n  .wp .item .text-dark {\n    color: #222; }\n  .wp .item-dark {\n    color: #fff;\n    background-color: #222; }\n  .wp ion-item-sliding {\n    background-color: #fff; }\n  .wp ion-label {\n    display: block;\n    overflow: hidden;\n    -webkit-box-flex: 1;\n    -webkit-flex: 1;\n    -ms-flex: 1;\n    flex: 1;\n    margin: 0;\n    font-size: inherit;\n    text-overflow: ellipsis;\n    white-space: nowrap; }\n  .wp .item-input ion-label {\n    -webkit-box-flex: initial;\n    -webkit-flex: initial;\n    -ms-flex: initial;\n    flex: initial;\n    max-width: 200px;\n    pointer-events: none; }\n  .wp [text-wrap] ion-label {\n    white-space: normal; }\n  .wp ion-label[fixed] {\n    -webkit-box-flex: 0;\n    -webkit-flex: 0 0 100px;\n    -ms-flex: 0 0 100px;\n    flex: 0 0 100px;\n    width: 100px;\n    min-width: 100px;\n    max-width: 200px; }\n  .wp .item-label-stacked ion-label,\n  .wp .item-label-floating ion-label {\n    -webkit-align-self: stretch;\n    -ms-flex-item-align: stretch;\n    align-self: stretch;\n    width: auto;\n    max-width: 100%; }\n  .wp ion-label[stacked],\n  .wp ion-label[floating] {\n    margin-bottom: 0; }\n  .wp .item-label-stacked .input-wrapper,\n  .wp .item-label-floating .input-wrapper {\n    -webkit-box-flex: 1;\n    -webkit-flex: 1;\n    -ms-flex: 1;\n    flex: 1;\n    -webkit-box-orient: vertical;\n    -webkit-box-direction: normal;\n    -webkit-flex-direction: column;\n    -ms-flex-direction: column;\n    flex-direction: column; }\n  .wp .item-label-stacked ion-select,\n  .wp .item-label-floating ion-select {\n    -webkit-align-self: stretch;\n    -ms-flex-item-align: stretch;\n    align-self: stretch;\n    max-width: 100%; }\n  .wp .item-select ion-label[floating] {\n    -webkit-transform: translate3d(0, 0, 0) scale(0.8);\n    transform: translate3d(0, 0, 0) scale(0.8); }\n  .wp ion-label {\n    margin: 13px 8px 13px 0; }\n  .wp .item-input ion-label,\n  .wp .item-select ion-label,\n  .wp .item-datetime ion-label {\n    color: #999; }\n  .wp ion-label[stacked] {\n    font-size: 1.2rem; }\n  .wp ion-label[floating] {\n    -webkit-transform: translate3d(8px, 34px, 0);\n    transform: translate3d(8px, 34px, 0);\n    -webkit-transform-origin: left top;\n    transform-origin: left top; }\n  .wp ion-label[stacked],\n  .wp ion-label[floating] {\n    margin-bottom: 0;\n    margin-left: 0; }\n  .wp .input-has-focus ion-label[stacked],\n  .wp .input-has-focus ion-label[floating] {\n    color: #327eff; }\n  .wp .input-has-focus ion-label[floating],\n  .wp .input-has-value ion-label[floating] {\n    -webkit-transform: translate3d(0, 0, 0) scale(0.8);\n    transform: translate3d(0, 0, 0) scale(0.8); }\n  .wp .item-label-stacked [item-right],\n  .wp .item-label-floating [item-right] {\n    margin-top: 13px;\n    margin-bottom: 13px; }\n  .wp .label-primary,\n  .wp .item-input .label-primary,\n  .wp .item-select .label-primary,\n  .wp .item-datetime .label-primary {\n    color: #327eff; }\n  .wp .label-secondary,\n  .wp .item-input .label-secondary,\n  .wp .item-select .label-secondary,\n  .wp .item-datetime .label-secondary {\n    color: #32db64; }\n  .wp .label-danger,\n  .wp .item-input .label-danger,\n  .wp .item-select .label-danger,\n  .wp .item-datetime .label-danger {\n    color: #f53d3d; }\n  .wp .label-light,\n  .wp .item-input .label-light,\n  .wp .item-select .label-light,\n  .wp .item-datetime .label-light {\n    color: #f4f4f4; }\n  .wp .label-dark,\n  .wp .item-input .label-dark,\n  .wp .item-select .label-dark,\n  .wp .item-datetime .label-dark {\n    color: #222; }\n  .wp ion-list-header {\n    display: -webkit-box;\n    display: -webkit-flex;\n    display: -ms-flexbox;\n    display: flex;\n    overflow: hidden;\n    -webkit-box-align: center;\n    -webkit-align-items: center;\n    -ms-flex-align: center;\n    align-items: center;\n    -webkit-box-pack: justify;\n    -webkit-justify-content: space-between;\n    -ms-flex-pack: justify;\n    justify-content: space-between;\n    margin: 0;\n    padding: 0;\n    width: 100%;\n    min-height: 4rem; }\n  .wp ion-list {\n    display: block;\n    margin: 0;\n    padding: 0;\n    list-style-type: none; }\n  .wp ion-list[inset] {\n    overflow: hidden;\n    -webkit-transform: translateZ(0);\n    transform: translateZ(0); }\n  .wp ion-list-header,\n  .wp ion-item-divider {\n    margin-left: 0;\n    padding-left: 16px;\n    border-bottom: 1px solid transparent;\n    font-size: 2rem;\n    color: #000; }\n  .wp ion-list {\n    margin: 0 0 16px 0; }\n    .wp ion-list .item .item-inner {\n      border-bottom: 1px solid transparent; }\n    .wp ion-list > .item:first-child,\n    .wp ion-list > .item-wrapper:first-child .item {\n      border-top: 1px solid transparent; }\n    .wp ion-list > .item:last-child,\n    .wp ion-list > .item-wrapper:last-child .item {\n      border-bottom: 1px solid transparent; }\n    .wp ion-list > .item:last-child ion-label,\n    .wp ion-list > .item:last-child .item-inner,\n    .wp ion-list > .item-wrapper:last-child ion-label,\n    .wp ion-list > .item-wrapper:last-child .item-inner {\n      border-bottom: 0; }\n    .wp ion-list > ion-input:last-child::after {\n      left: 0; }\n    .wp ion-list ion-item-options button,\n    .wp ion-list ion-item-options [button] {\n      display: -webkit-inline-box;\n      display: -webkit-inline-flex;\n      display: -ms-inline-flexbox;\n      display: inline-flex;\n      -webkit-box-align: center;\n      -webkit-align-items: center;\n      -ms-flex-align: center;\n      align-items: center;\n      margin: 1px 0;\n      height: calc(100% - 2px);\n      border: 0;\n      border-radius: 0;\n      box-shadow: none;\n      box-sizing: border-box; }\n      .wp ion-list ion-item-options button::before,\n      .wp ion-list ion-item-options [button]::before {\n        margin: 0 auto; }\n    .wp ion-list .item[no-lines],\n    .wp ion-list .item[no-lines] .item-inner {\n      border-width: 0; }\n    .wp ion-list + ion-list ion-list-header {\n      margin-top: -16px;\n      padding-top: 0; }\n  .wp ion-list[inset] {\n    margin: 16px 16px 16px 16px;\n    border-radius: 2px; }\n    .wp ion-list[inset] .item:first-child {\n      border-top-width: 0;\n      border-top-left-radius: 2px;\n      border-top-right-radius: 2px; }\n    .wp ion-list[inset] .item:last-child {\n      border-bottom-width: 0;\n      border-bottom-left-radius: 2px;\n      border-bottom-right-radius: 2px; }\n    .wp ion-list[inset] .item-input {\n      padding-right: 0;\n      padding-left: 0; }\n    .wp ion-list[inset] + ion-list[inset] {\n      margin-top: 0; }\n    .wp ion-list[inset] ion-list-header {\n      background-color: #fff; }\n  .wp ion-list[no-lines] .item,\n  .wp ion-list[no-lines] .item .item-inner {\n    border-width: 0; }\n  .wp ion-loading {\n    position: absolute;\n    top: 0;\n    right: 0;\n    bottom: 0;\n    left: 0;\n    z-index: 1000;\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    -webkit-box-pack: center;\n    -webkit-justify-content: center;\n    -ms-flex-pack: center;\n    justify-content: center; }\n  .wp .loading-wrapper {\n    z-index: 10;\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    opacity: 0; }\n  .wp .loading-wrapper {\n    padding: 20px;\n    max-width: 280px;\n    max-height: 90%;\n    border-radius: 2px;\n    color: #fff;\n    background: #000; }\n  .wp .loading-spinner + .loading-content {\n    margin-left: 16px; }\n  .wp .loading-spinner .spinner-ios line,\n  .wp .loading-spinner .spinner-ios-small line {\n    stroke: #fff; }\n  .wp .loading-spinner .spinner-bubbles circle {\n    fill: #fff; }\n  .wp .loading-spinner .spinner-circles circle {\n    fill: #fff; }\n  .wp .loading-spinner .spinner-crescent circle {\n    stroke: #fff; }\n  .wp .loading-spinner .spinner-dots circle {\n    fill: #fff; }\n  .wp .menu-inner {\n    background: #f2f2f2; }\n  .wp .modal-wrapper {\n    opacity: .01;\n    -webkit-transform: translate3d(0, 40px, 0);\n    transform: translate3d(0, 40px, 0); }\n  .wp ion-picker-cmp {\n    position: absolute;\n    top: 0;\n    left: 0;\n    z-index: 1000;\n    display: block;\n    width: 100%;\n    height: 100%; }\n  .wp .picker-toolbar {\n    z-index: 1; }\n  .wp .picker-wrapper {\n    position: absolute;\n    right: 0;\n    bottom: 0;\n    left: 0;\n    z-index: 10;\n    display: -webkit-box;\n    display: -webkit-flex;\n    display: -ms-flexbox;\n    display: flex;\n    overflow: hidden;\n    -webkit-box-orient: vertical;\n    -webkit-box-direction: normal;\n    -webkit-flex-direction: column;\n    -ms-flex-direction: column;\n    flex-direction: column;\n    margin: auto;\n    width: 100%;\n    max-width: 500px;\n    -webkit-transform: translate3d(0, 100%, 0);\n    transform: translate3d(0, 100%, 0); }\n  .wp .picker-columns {\n    position: relative;\n    display: -webkit-box;\n    display: -webkit-flex;\n    display: -ms-flexbox;\n    display: flex;\n    overflow: hidden;\n    -webkit-box-pack: center;\n    -webkit-justify-content: center;\n    -ms-flex-pack: center;\n    justify-content: center; }\n  .wp .picker-col {\n    position: relative;\n    display: -webkit-box;\n    display: -webkit-flex;\n    display: -ms-flexbox;\n    display: flex;\n    max-height: 100%; }\n  .wp .picker-opts {\n    position: relative;\n    width: 100%;\n    min-width: 50px;\n    max-width: 100%; }\n  .wp .picker-prefix {\n    position: relative;\n    -webkit-box-flex: 1;\n    -webkit-flex: 1;\n    -ms-flex: 1;\n    flex: 1;\n    min-width: 50px;\n    min-width: 45%;\n    text-align: right;\n    white-space: nowrap; }\n  .wp .picker-suffix {\n    position: relative;\n    -webkit-box-flex: 1;\n    -webkit-flex: 1;\n    -ms-flex: 1;\n    flex: 1;\n    min-width: 50px;\n    min-width: 45%;\n    text-align: left;\n    white-space: nowrap; }\n  .wp .picker-opt {\n    position: absolute;\n    top: 0;\n    left: 0;\n    overflow: hidden;\n    -webkit-box-flex: 1;\n    -webkit-flex: 1;\n    -ms-flex: 1;\n    flex: 1;\n    width: 100%; }\n  .wp .picker-opt .button-inner {\n    display: block;\n    overflow: hidden;\n    text-overflow: ellipsis;\n    white-space: nowrap;\n    -webkit-transition: opacity 150ms ease-in-out;\n    transition: opacity 150ms ease-in-out; }\n  .wp .picker-opt.picker-opt-disabled {\n    pointer-events: none; }\n  .wp .picker-opt-disabled .button-inner {\n    opacity: 0; }\n  .wp .picker-opts-left .button-inner {\n    -webkit-box-pack: start;\n    -webkit-justify-content: flex-start;\n    -ms-flex-pack: start;\n    justify-content: flex-start; }\n  .wp .picker-opts-right .button-inner {\n    -webkit-box-pack: end;\n    -webkit-justify-content: flex-end;\n    -ms-flex-pack: end;\n    justify-content: flex-end; }\n  .wp .picker-above-highlight,\n  .wp .picker-below-highlight {\n    display: none;\n    pointer-events: none; }\n  .wp .picker-wrapper {\n    height: 260px;\n    border-top: 1px solid transparent;\n    background: #fff; }\n  .wp .picker-toolbar {\n    display: -webkit-box;\n    display: -webkit-flex;\n    display: -ms-flexbox;\n    display: flex;\n    -webkit-box-pack: end;\n    -webkit-justify-content: flex-end;\n    -ms-flex-pack: end;\n    justify-content: flex-end;\n    height: 44px;\n    background: #fff; }\n  .wp .hairlines .picker-wrapper,\n  .wp .hairlines .picker-toolbar {\n    border-width: 0.55px; }\n  .wp .picker-toolbar-button {\n    -webkit-box-flex: 1;\n    -webkit-flex: 1;\n    -ms-flex: 1;\n    flex: 1;\n    text-align: right; }\n  .wp .picker-toolbar-cancel {\n    font-weight: normal;\n    text-align: left; }\n  .wp .picker-button,\n  .wp .picker-button.activated {\n    margin: 0;\n    height: 44px;\n    color: #327eff;\n    background: transparent;\n    box-shadow: none; }\n  .wp .picker-columns {\n    height: 216px;\n    -webkit-perspective: 1800px;\n    perspective: 1800px; }\n  .wp .picker-col {\n    padding: 0 4px;\n    -webkit-transform-style: preserve-3d;\n    transform-style: preserve-3d; }\n  .wp .picker-prefix,\n  .wp .picker-suffix,\n  .wp .picker-opts {\n    top: 77px;\n    font-size: 18px;\n    line-height: 42px;\n    color: #000;\n    -webkit-transform-style: preserve-3d;\n    transform-style: preserve-3d;\n    pointer-events: none; }\n  .wp .picker-opts ion-button-effect {\n    display: none; }\n  .wp .picker-opt {\n    margin: 0;\n    padding: 0;\n    font-size: 18px;\n    line-height: 42px;\n    background: transparent;\n    -webkit-transition-timing-function: ease-out;\n    transition-timing-function: ease-out;\n    -webkit-backface-visibility: hidden;\n    backface-visibility: hidden;\n    pointer-events: auto; }\n  .wp .picker-opt .button-inner {\n    -webkit-transition: 200ms;\n    transition: 200ms; }\n  .wp .picker-prefix,\n  .wp .picker-suffix,\n  .wp .picker-opt-selected {\n    font-size: 22px;\n    color: #327eff; }\n  .wp .picker-above-highlight {\n    position: absolute;\n    top: 0;\n    left: 0;\n    z-index: 10;\n    width: 100%;\n    height: 81px;\n    border-bottom: 1px solid transparent;\n    background: -webkit-linear-gradient(top, white 20%, rgba(255, 255, 255, 0.7) 100%);\n    background: linear-gradient(to bottom, white 20%, rgba(255, 255, 255, 0.7) 100%);\n    -webkit-transform: translate3d(0, 0, 90px);\n    transform: translate3d(0, 0, 90px); }\n  .wp .picker-below-highlight {\n    position: absolute;\n    top: 115px;\n    left: 0;\n    z-index: 11;\n    width: 100%;\n    height: 119px;\n    border-top: 1px solid transparent;\n    background: -webkit-linear-gradient(bottom, white 30%, rgba(255, 255, 255, 0.7) 100%);\n    background: linear-gradient(to top, white 30%, rgba(255, 255, 255, 0.7) 100%);\n    -webkit-transform: translate3d(0, 0, 90px);\n    transform: translate3d(0, 0, 90px); }\n  .wp ion-popover {\n    position: absolute;\n    top: 0;\n    right: 0;\n    bottom: 0;\n    left: 0;\n    z-index: 1000;\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    -webkit-box-pack: center;\n    -webkit-justify-content: center;\n    -ms-flex-pack: center;\n    justify-content: center; }\n  .wp .popover-wrapper {\n    z-index: 10;\n    opacity: 0; }\n  .wp .popover-content {\n    position: absolute;\n    z-index: 10;\n    display: -webkit-box;\n    display: -webkit-flex;\n    display: -ms-flexbox;\n    display: flex;\n    overflow: auto;\n    -webkit-box-orient: vertical;\n    -webkit-box-direction: normal;\n    -webkit-flex-direction: column;\n    -ms-flex-direction: column;\n    flex-direction: column; }\n    .wp .popover-content scroll-content {\n      position: relative; }\n  .wp .popover-content {\n    width: 200px;\n    min-width: 0;\n    min-height: 0;\n    max-height: 90%;\n    border: 2px solid #ccc;\n    border-radius: 0;\n    color: #000;\n    background: #f2f2f2;\n    -webkit-transform-origin: top left;\n    transform-origin: top left; }\n    .wp .popover-content ion-content {\n      background: #f2f2f2; }\n  .wp .popover-content .item {\n    background-color: #f2f2f2; }\n  .wp .popover-viewport {\n    opacity: 0;\n    -webkit-transition-delay: 100ms;\n    transition-delay: 100ms; }\n  .wp ion-radio {\n    position: relative;\n    display: inline-block; }\n  .wp .radio-icon {\n    position: relative;\n    top: 0;\n    left: 0;\n    display: block;\n    margin: 0;\n    width: 16px;\n    height: 16px;\n    border-width: 2px;\n    border-style: solid;\n    border-radius: 50%;\n    border-color: #333; }\n  .wp .radio-inner {\n    position: absolute;\n    top: 2px;\n    left: 2px;\n    display: none;\n    width: 8px;\n    height: 8px;\n    border-radius: 50%;\n    background-color: #333; }\n  .wp .radio-checked {\n    border-color: #327eff; }\n  .wp .radio-checked .radio-inner {\n    display: block; }\n  .wp .radio-disabled,\n  .wp .item-radio-disabled ion-label {\n    opacity: 0.3;\n    pointer-events: none; }\n  .wp .item ion-radio {\n    position: static;\n    display: block;\n    -webkit-box-ordinal-group: 0;\n    -webkit-order: -1;\n    -ms-flex-order: -1;\n    order: -1;\n    margin: 9px 20px 9px 4px; }\n    .wp .item ion-radio[item-right] {\n      -webkit-box-ordinal-group: 1;\n      -webkit-order: 0;\n      -ms-flex-order: 0;\n      order: 0;\n      margin: 11px 10px 10px 0; }\n  .wp .item-radio ion-label {\n    margin-left: 0; }\n  .wp .radio-primary .radio-checked {\n    border-color: #327eff; }\n  .wp .radio-secondary .radio-checked {\n    border-color: #32db64; }\n  .wp .radio-danger .radio-checked {\n    border-color: #f53d3d; }\n  .wp .radio-light .radio-checked {\n    border-color: #f4f4f4; }\n  .wp .radio-dark .radio-checked {\n    border-color: #222; }\n  .wp .item-range .item-inner {\n    overflow: visible; }\n  .wp .item-range .input-wrapper {\n    overflow: visible;\n    -webkit-box-orient: vertical;\n    -webkit-box-direction: normal;\n    -webkit-flex-direction: column;\n    -ms-flex-direction: column;\n    flex-direction: column; }\n  .wp .item-range ion-range {\n    width: 100%; }\n    .wp .item-range ion-range ion-label {\n      -webkit-align-self: center;\n      -ms-flex-item-align: center;\n      align-self: center; }\n  .wp ion-range {\n    position: relative;\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    .wp ion-range ion-label {\n      -webkit-box-flex: initial;\n      -webkit-flex: initial;\n      -ms-flex: initial;\n      flex: initial; }\n    .wp ion-range ion-icon {\n      min-height: 2.4rem;\n      font-size: 2.4rem;\n      line-height: 1; }\n  .wp .range-slider {\n    position: relative;\n    -webkit-box-flex: 1;\n    -webkit-flex: 1;\n    -ms-flex: 1;\n    flex: 1;\n    cursor: pointer; }\n  .wp ion-range {\n    padding: 8px 8px; }\n  .wp [range-left],\n  .wp [range-right] {\n    margin: 0 12px; }\n  .wp [range-left] {\n    margin-left: 0; }\n  .wp [range-right] {\n    margin-right: 0; }\n  .wp .range-has-pin {\n    padding-top: 28px; }\n  .wp .range-slider {\n    height: 42px; }\n  .wp .range-bar {\n    position: absolute;\n    top: 21px;\n    left: 0;\n    width: 100%;\n    height: 2px;\n    background: #bdbdbd;\n    pointer-events: none; }\n  .wp .range-pressed .range-bar-active {\n    will-change: left, right; }\n  .wp .range-pressed .range-knob-handle {\n    will-change: left; }\n  .wp .range-bar-active {\n    bottom: 0;\n    width: auto;\n    background: #327eff; }\n  .wp .range-knob-handle {\n    position: absolute;\n    top: 21px;\n    left: 0%;\n    margin-top: -21px;\n    margin-left: -21px;\n    width: 42px;\n    height: 42px;\n    text-align: center; }\n  .wp .range-knob {\n    position: absolute;\n    top: 10px;\n    left: 17px;\n    width: 8px;\n    height: 24px;\n    border-radius: 4px;\n    background: #327eff;\n    pointer-events: none; }\n  .wp .range-tick {\n    position: absolute;\n    top: 19px;\n    margin-left: -1px;\n    width: 2px;\n    height: 6px;\n    border-radius: 4px;\n    background: #bdbdbd;\n    pointer-events: none; }\n  .wp .range-tick-active {\n    background: #327eff; }\n  .wp .range-pin {\n    position: relative;\n    top: -24px;\n    display: inline-block;\n    padding: 8px;\n    min-width: 28px;\n    border-radius: 50px;\n    font-size: 12px;\n    text-align: center;\n    color: #fff;\n    background: #327eff;\n    -webkit-transform: translate3d(0, 28px, 0) scale(0.01);\n    transform: translate3d(0, 28px, 0) scale(0.01);\n    -webkit-transition: -webkit-transform 120ms ease;\n    transition: transform 120ms ease; }\n  .wp .range-knob-pressed .range-pin {\n    -webkit-transform: translate3d(0, 0, 0) scale(1);\n    transform: translate3d(0, 0, 0) scale(1); }\n  .wp .range-disabled {\n    opacity: .5; }\n  .wp .range-primary .range-bar-active,\n  .wp .range-primary .range-tick-active,\n  .wp .range-primary .range-knob,\n  .wp .range-primary .range-pin {\n    background: #327eff; }\n  .wp .range-secondary .range-bar-active,\n  .wp .range-secondary .range-tick-active,\n  .wp .range-secondary .range-knob,\n  .wp .range-secondary .range-pin {\n    background: #32db64; }\n  .wp .range-danger .range-bar-active,\n  .wp .range-danger .range-tick-active,\n  .wp .range-danger .range-knob,\n  .wp .range-danger .range-pin {\n    background: #f53d3d; }\n  .wp .range-light .range-bar-active,\n  .wp .range-light .range-tick-active,\n  .wp .range-light .range-knob,\n  .wp .range-light .range-pin {\n    background: #f4f4f4; }\n  .wp .range-dark .range-bar-active,\n  .wp .range-dark .range-tick-active,\n  .wp .range-dark .range-knob,\n  .wp .range-dark .range-pin {\n    background: #222; }\n  .wp ion-searchbar {\n    position: relative;\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    width: 100%; }\n  .wp .searchbar-icon {\n    pointer-events: none; }\n  .wp .searchbar-input-container {\n    position: relative;\n    display: block;\n    -webkit-flex-shrink: 1;\n    -ms-flex-negative: 1;\n    flex-shrink: 1;\n    width: 100%; }\n  .wp .searchbar-input {\n    -webkit-appearance: none;\n    -moz-appearance: none;\n    display: block;\n    width: 100%;\n    border: 0;\n    font-family: inherit; }\n  .wp .searchbar-clear-icon {\n    display: none;\n    margin: 0;\n    padding: 0;\n    min-height: 0; }\n  .wp .searchbar-has-value.searchbar-has-focus .searchbar-clear-icon {\n    display: block; }\n  .wp ion-searchbar {\n    padding: 8px;\n    background: transparent; }\n  .wp .searchbar-input-container {\n    border: 2px solid rgba(0, 0, 0, 0.5); }\n  .wp .searchbar-search-icon {\n    background-image: url(\"data:image/svg+xml;charset=utf-8,<svg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%20512%20512'><path%20fill='%23858585'%20d='M337.509,305.372h-17.501l-6.571-5.486c20.791-25.232,33.922-57.054,33.922-93.257C347.358,127.632,283.896,64,205.135,64C127.452,64,64,127.632,64,206.629s63.452,142.628,142.225,142.628c35.011,0,67.831-13.167,92.991-34.008l6.561,5.487v17.551L415.18,448L448,415.086L337.509,305.372z%20M206.225,305.372c-54.702,0-98.463-43.887-98.463-98.743c0-54.858,43.761-98.742,98.463-98.742c54.7,0,98.462,43.884,98.462,98.742C304.687,261.485,260.925,305.372,206.225,305.372z'/></svg>\");\n    position: absolute;\n    top: 5px;\n    right: 8px;\n    width: 21px;\n    height: 21px;\n    background-repeat: no-repeat;\n    background-size: 20px; }\n    .wp .searchbar-search-icon.activated {\n      background-color: transparent; }\n  .wp .searchbar-input {\n    padding: 0 8px;\n    height: auto;\n    border-radius: 0;\n    font-size: 1.4rem;\n    font-weight: 400;\n    line-height: 3rem;\n    color: #141414;\n    background-color: #fff;\n    background-position: 8px center; }\n    .wp .searchbar-input::-moz-placeholder {\n      color: #858585; }\n    .wp .searchbar-input:-ms-input-placeholder {\n      color: #858585; }\n    .wp .searchbar-input::-webkit-input-placeholder {\n      text-indent: 0;\n      color: #858585; }\n  .wp .searchbar-clear-icon {\n    background-image: url(\"data:image/svg+xml;charset=utf-8,<svg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%20512%20512'><polygon%20fill='%23858585'%20points='405,136.798%20375.202,107%20256,226.202%20136.798,107%20107,136.798%20226.202,256%20107,375.202%20136.798,405%20256,285.798%20375.202,405%20405,375.202%20285.798,256'/></svg>\");\n    position: absolute;\n    top: 0;\n    right: 8px;\n    padding: 0;\n    width: 22px;\n    height: 100%;\n    background-repeat: no-repeat;\n    background-position: center;\n    background-size: 22px; }\n    .wp .searchbar-clear-icon.activated {\n      background-color: transparent; }\n  .wp .searchbar-has-focus .searchbar-input-container {\n    border-color: #327eff; }\n  .wp .searchbar-has-value .searchbar-search-icon {\n    display: none; }\n  .wp .searchbar-ios-cancel {\n    display: none; }\n  .wp .searchbar-md-cancel {\n    display: none; }\n  .wp .toolbar ion-searchbar {\n    padding: 2px; }\n  .wp .searchbar-primary.searchbar-has-focus .searchbar-input-container {\n    border-color: #327eff; }\n  .wp .searchbar-secondary.searchbar-has-focus .searchbar-input-container {\n    border-color: #32db64; }\n  .wp .searchbar-danger.searchbar-has-focus .searchbar-input-container {\n    border-color: #f53d3d; }\n  .wp .searchbar-light.searchbar-has-focus .searchbar-input-container {\n    border-color: #f4f4f4; }\n  .wp .searchbar-dark.searchbar-has-focus .searchbar-input-container {\n    border-color: #222; }\n  .wp ion-segment {\n    display: -webkit-box;\n    display: -webkit-flex;\n    display: -ms-flexbox;\n    display: flex;\n    -webkit-box-flex: 1;\n    -webkit-flex: 1;\n    -ms-flex: 1;\n    flex: 1;\n    -webkit-box-align: center;\n    -webkit-align-items: center;\n    -ms-flex-align: center;\n    align-items: center;\n    -webkit-box-pack: center;\n    -webkit-justify-content: center;\n    -ms-flex-pack: center;\n    justify-content: center;\n    width: 100%; }\n  .wp .segment-button {\n    position: relative;\n    display: block;\n    overflow: hidden;\n    margin-right: 0;\n    margin-left: 0;\n    text-align: center;\n    text-overflow: ellipsis;\n    white-space: nowrap;\n    cursor: pointer; }\n  .wp ion-segment {\n    -webkit-box-pack: start;\n    -webkit-justify-content: flex-start;\n    -ms-flex-pack: start;\n    justify-content: flex-start; }\n  .wp .segment-button {\n    padding: 0 6px;\n    height: 4rem;\n    font-size: 1.3rem;\n    font-weight: bold;\n    line-height: 4rem;\n    text-transform: uppercase;\n    color: #000;\n    background-color: transparent;\n    opacity: 0.5; }\n    .wp .segment-button.segment-activated {\n      opacity: 1; }\n    .wp .segment-button ion-icon {\n      font-size: 2.6rem;\n      line-height: 4rem; }\n  .wp .segment-button-disabled {\n    opacity: 0.3;\n    pointer-events: none; }\n  .wp .toolbar ion-segment {\n    margin: 0 auto; }\n  .wp .segment-primary .segment-button {\n    color: #327eff; }\n    .wp .segment-primary .segment-button.activated, .wp .segment-primary .segment-button.segment-activated {\n      border-color: #327eff;\n      color: #327eff;\n      opacity: 1; }\n  .wp .segment-secondary .segment-button {\n    color: #32db64; }\n    .wp .segment-secondary .segment-button.activated, .wp .segment-secondary .segment-button.segment-activated {\n      border-color: #32db64;\n      color: #32db64;\n      opacity: 1; }\n  .wp .segment-danger .segment-button {\n    color: #f53d3d; }\n    .wp .segment-danger .segment-button.activated, .wp .segment-danger .segment-button.segment-activated {\n      border-color: #f53d3d;\n      color: #f53d3d;\n      opacity: 1; }\n  .wp .segment-light .segment-button {\n    color: #f4f4f4; }\n    .wp .segment-light .segment-button.activated, .wp .segment-light .segment-button.segment-activated {\n      border-color: #f4f4f4;\n      color: #f4f4f4;\n      opacity: 1; }\n  .wp .segment-dark .segment-button {\n    color: #222; }\n    .wp .segment-dark .segment-button.activated, .wp .segment-dark .segment-button.segment-activated {\n      border-color: #222;\n      color: #222;\n      opacity: 1; }\n  .wp ion-select {\n    display: -webkit-box;\n    display: -webkit-flex;\n    display: -ms-flexbox;\n    display: flex;\n    overflow: hidden;\n    max-width: 45%; }\n  .wp .select-text {\n    overflow: hidden;\n    -webkit-box-flex: 1;\n    -webkit-flex: 1;\n    -ms-flex: 1;\n    flex: 1;\n    min-width: 16px;\n    font-size: inherit;\n    text-overflow: ellipsis;\n    white-space: nowrap; }\n  .wp .item-multiple-inputs ion-select {\n    position: relative; }\n  .wp .select-disabled,\n  .wp .item-select-disabled ion-label {\n    opacity: .4;\n    pointer-events: none; }\n  .wp ion-select {\n    -webkit-box-flex: 1;\n    -webkit-flex: 1;\n    -ms-flex: 1;\n    flex: 1;\n    margin: 13px 8px 13px 8px;\n    padding: 0 8px;\n    max-width: 100%;\n    border: 2px solid rgba(0, 0, 0, 0.5);\n    line-height: 3rem; }\n  .wp .select-placeholder {\n    color: rgba(0, 0, 0, 0.5); }\n  .wp .item-select ion-label {\n    margin-left: 0; }\n  .wp .select-icon {\n    position: relative;\n    -webkit-align-self: center;\n    -ms-flex-item-align: center;\n    align-self: center;\n    width: 18px;\n    height: 18px; }\n  .wp .select-icon .select-icon-inner {\n    position: absolute;\n    top: 3px;\n    left: 5px;\n    display: block;\n    width: 9px;\n    height: 9px;\n    border-top: 2px solid rgba(0, 0, 0, 0.5);\n    border-right: 2px solid rgba(0, 0, 0, 0.5);\n    -webkit-transform: rotate(135deg);\n    transform: rotate(135deg);\n    pointer-events: none; }\n  .wp .select-text {\n    min-height: 3rem; }\n  .wp ion-spinner {\n    position: relative;\n    display: inline-block;\n    width: 28px;\n    height: 28px; }\n  .wp ion-spinner svg {\n    position: absolute;\n    top: 0;\n    left: 0;\n    width: 100%;\n    height: 100%;\n    -webkit-transform: translateZ(0);\n    transform: translateZ(0); }\n  .wp ion-spinner.spinner-paused svg {\n    -webkit-animation-play-state: paused;\n    animation-play-state: paused; }\n  .wp .spinner-ios line,\n  .wp .spinner-ios-small line {\n    stroke: #69717d;\n    stroke-width: 4px;\n    stroke-linecap: round; }\n  .wp .spinner-ios svg,\n  .wp .spinner-ios-small svg {\n    -webkit-animation: spinner-fade-out 1s linear infinite;\n    animation: spinner-fade-out 1s linear infinite; }\n  .wp .spinner-bubbles circle {\n    fill: #000; }\n  .wp .spinner-bubbles svg {\n    -webkit-animation: spinner-scale-out 1s linear infinite;\n    animation: spinner-scale-out 1s linear infinite; }\n  .wp .spinner-circles circle {\n    fill: #69717d; }\n  .wp .spinner-circles svg {\n    -webkit-animation: spinner-fade-out 1s linear infinite;\n    animation: spinner-fade-out 1s linear infinite; }\n  .wp .spinner-crescent circle {\n    fill: transparent;\n    stroke: #000;\n    stroke-width: 4px;\n    stroke-dasharray: 128px;\n    stroke-dashoffset: 82px; }\n  .wp .spinner-crescent svg {\n    -webkit-animation: spinner-rotate 1s linear infinite;\n    animation: spinner-rotate 1s linear infinite; }\n  .wp .spinner-dots circle {\n    fill: #444;\n    stroke-width: 0; }\n  .wp .spinner-dots svg {\n    -webkit-transform-origin: center;\n    transform-origin: center;\n    -webkit-animation: spinner-dots 1s linear infinite;\n    animation: spinner-dots 1s linear infinite; }\n\n@keyframes spinner-fade-out {\n  0% {\n    opacity: 1; }\n  100% {\n    opacity: 0; } }\n\n@keyframes spinner-scale-out {\n  0% {\n    -webkit-transform: scale(1, 1);\n    transform: scale(1, 1); }\n  100% {\n    -webkit-transform: scale(0, 0);\n    transform: scale(0, 0); } }\n\n@keyframes spinner-rotate {\n  0% {\n    -webkit-transform: rotate(0deg);\n    transform: rotate(0deg); }\n  100% {\n    -webkit-transform: rotate(360deg);\n    transform: rotate(360deg); } }\n\n@keyframes spinner-dots {\n  0% {\n    opacity: .9;\n    -webkit-transform: scale(1, 1);\n    transform: scale(1, 1); }\n  50% {\n    opacity: .3;\n    -webkit-transform: scale(0.4, 0.4);\n    transform: scale(0.4, 0.4); }\n  100% {\n    opacity: .9;\n    -webkit-transform: scale(1, 1);\n    transform: scale(1, 1); } }\n  .wp .spinner-primary.spinner-ios line,\n  .wp .spinner-primary.spinner-ios-small line,\n  .wp .spinner-primary.spinner-crescent circle {\n    stroke: #327eff; }\n  .wp .spinner-primary.spinner-bubbles circle,\n  .wp .spinner-primary.spinner-circles circle,\n  .wp .spinner-primary.spinner-dots circle {\n    fill: #327eff; }\n  .wp .spinner-secondary.spinner-ios line,\n  .wp .spinner-secondary.spinner-ios-small line,\n  .wp .spinner-secondary.spinner-crescent circle {\n    stroke: #32db64; }\n  .wp .spinner-secondary.spinner-bubbles circle,\n  .wp .spinner-secondary.spinner-circles circle,\n  .wp .spinner-secondary.spinner-dots circle {\n    fill: #32db64; }\n  .wp .spinner-danger.spinner-ios line,\n  .wp .spinner-danger.spinner-ios-small line,\n  .wp .spinner-danger.spinner-crescent circle {\n    stroke: #f53d3d; }\n  .wp .spinner-danger.spinner-bubbles circle,\n  .wp .spinner-danger.spinner-circles circle,\n  .wp .spinner-danger.spinner-dots circle {\n    fill: #f53d3d; }\n  .wp .spinner-light.spinner-ios line,\n  .wp .spinner-light.spinner-ios-small line,\n  .wp .spinner-light.spinner-crescent circle {\n    stroke: #f4f4f4; }\n  .wp .spinner-light.spinner-bubbles circle,\n  .wp .spinner-light.spinner-circles circle,\n  .wp .spinner-light.spinner-dots circle {\n    fill: #f4f4f4; }\n  .wp .spinner-dark.spinner-ios line,\n  .wp .spinner-dark.spinner-ios-small line,\n  .wp .spinner-dark.spinner-crescent circle {\n    stroke: #222; }\n  .wp .spinner-dark.spinner-bubbles circle,\n  .wp .spinner-dark.spinner-circles circle,\n  .wp .spinner-dark.spinner-dots circle {\n    fill: #222; }\n  .wp .tab-button {\n    -webkit-user-select: none;\n    -moz-user-select: none;\n    -ms-user-select: none;\n    user-select: none;\n    position: relative;\n    z-index: 0;\n    display: -webkit-box;\n    display: -webkit-flex;\n    display: -ms-flexbox;\n    display: flex;\n    overflow: hidden;\n    -webkit-box-flex: 1;\n    -webkit-flex: 1;\n    -ms-flex: 1;\n    flex: 1;\n    -webkit-box-orient: vertical;\n    -webkit-box-direction: normal;\n    -webkit-flex-direction: column;\n    -ms-flex-direction: column;\n    flex-direction: column;\n    -webkit-box-align: center;\n    -webkit-align-items: center;\n    -ms-flex-align: center;\n    align-items: center;\n    -webkit-align-self: center;\n    -ms-flex-item-align: center;\n    align-self: center;\n    -webkit-box-pack: center;\n    -webkit-justify-content: center;\n    -ms-flex-pack: center;\n    justify-content: center;\n    margin: 0;\n    border: 0;\n    border-radius: 0;\n    text-align: center;\n    text-decoration: none;\n    background: none;\n    cursor: pointer; }\n  .wp .tab-disabled {\n    pointer-events: none; }\n    .wp .tab-disabled ion-badge,\n    .wp .tab-disabled ion-icon,\n    .wp .tab-disabled span {\n      opacity: .4; }\n  .wp .tab-hidden {\n    display: none; }\n  .wp .tab-button-text {\n    margin-top: 3px;\n    margin-bottom: 2px; }\n  .wp .tab-button-text,\n  .wp .tab-button-icon {\n    display: none;\n    overflow: hidden;\n    -webkit-align-self: center;\n    -ms-flex-item-align: center;\n    align-self: center;\n    min-width: 26px;\n    max-width: 100%;\n    text-overflow: ellipsis;\n    white-space: nowrap; }\n  .wp .has-icon .tab-button-icon,\n  .wp .has-title .tab-button-text {\n    display: block; }\n  .wp .has-title-only .tab-button-text {\n    white-space: normal; }\n  .wp tab-highlight {\n    display: none; }\n  .wp [tabsLayout=icon-bottom] .tab-button .tab-button-icon {\n    -webkit-box-ordinal-group: 11;\n    -webkit-order: 10;\n    -ms-flex-order: 10;\n    order: 10; }\n  .wp [tabsLayout=icon-left] .tab-button {\n    -webkit-box-orient: horizontal;\n    -webkit-box-direction: normal;\n    -webkit-flex-direction: row;\n    -ms-flex-direction: row;\n    flex-direction: row; }\n    .wp [tabsLayout=icon-left] .tab-button .tab-button-icon {\n      padding-right: 8px;\n      text-align: right; }\n  .wp [tabsLayout=icon-right] .tab-button {\n    -webkit-box-orient: horizontal;\n    -webkit-box-direction: normal;\n    -webkit-flex-direction: row;\n    -ms-flex-direction: row;\n    flex-direction: row; }\n    .wp [tabsLayout=icon-right] .tab-button .tab-button-icon {\n      -webkit-box-ordinal-group: 11;\n      -webkit-order: 10;\n      -ms-flex-order: 10;\n      order: 10;\n      padding-left: 8px;\n      text-align: left; }\n  .wp [tabsLayout=icon-hide] .tab-button-icon {\n    display: none; }\n  .wp [tabsLayout=title-hide] .tab-button-text {\n    display: none; }\n  .wp .tab-badge {\n    position: absolute;\n    top: 6%;\n    right: 4%;\n    right: calc(50% - 50px);\n    padding: 1px 6px;\n    height: auto;\n    font-size: 12px;\n    line-height: 16px; }\n  .wp .has-icon .tab-badge {\n    right: calc(50% - 30px); }\n  .wp [tabsLayout=icon-bottom] .tab-badge,\n  .wp [tabsLayout=icon-left] .tab-badge,\n  .wp [tabsLayout=icon-right] .tab-badge {\n    right: calc(50% - 50px); }\n  .wp ion-tabbar {\n    background: #f8f8f8; }\n  .wp .tab-button {\n    padding: 12px 10px 5px 10px;\n    min-height: 4.8rem;\n    border-bottom: 2px solid transparent;\n    border-radius: 0;\n    font-size: 1.2rem;\n    font-weight: normal;\n    color: rgba(140, 140, 140, 0.7);\n    box-shadow: none; }\n    .wp .tab-button[aria-selected=true] {\n      border-bottom-color: #327eff;\n      color: #327eff; }\n    .wp .tab-button.activated {\n      background: rgba(0, 0, 0, 0.1); }\n  .wp .tab-button-text {\n    margin-top: 5px;\n    margin-bottom: 5px; }\n  .wp .tab-button-icon {\n    min-width: 2.4rem;\n    font-size: 2.4rem; }\n  .wp [tabsLayout=icon-bottom] .tab-button {\n    padding-top: 8px;\n    padding-bottom: 8px; }\n  .wp [tabsLayout=icon-right] .tab-button,\n  .wp [tabsLayout=icon-left] .tab-button {\n    padding-bottom: 10px; }\n    .wp [tabsLayout=icon-right] .tab-button ion-icon,\n    .wp [tabsLayout=icon-left] .tab-button ion-icon {\n      min-width: 24px; }\n  .wp [tabsLayout=icon-hide] .tab-button,\n  .wp [tabsLayout=title-hide] .tab-button,\n  .wp .tab-button.icon-only,\n  .wp .tab-button.has-title-only {\n    padding: 6px 10px; }\n  .wp [tabsPlacement=bottom] .tab-button {\n    border-top: 2px solid transparent;\n    border-bottom-width: 0; }\n    .wp [tabsPlacement=bottom] .tab-button[aria-selected=true] {\n      border-top-color: #327eff; }\n  .wp .tabs-primary ion-tabbar {\n    background-color: #327eff; }\n    .wp .tabs-primary ion-tabbar .tab-button {\n      color: rgba(255, 255, 255, 0.7); }\n    .wp .tabs-primary ion-tabbar .tab-button:hover:not(.disable-hover),\n    .wp .tabs-primary ion-tabbar .tab-button[aria-selected=true] {\n      border-color: #fff;\n      color: #fff; }\n  .wp .tabs-secondary ion-tabbar {\n    background-color: #32db64; }\n    .wp .tabs-secondary ion-tabbar .tab-button {\n      color: rgba(255, 255, 255, 0.7); }\n    .wp .tabs-secondary ion-tabbar .tab-button:hover:not(.disable-hover),\n    .wp .tabs-secondary ion-tabbar .tab-button[aria-selected=true] {\n      border-color: #fff;\n      color: #fff; }\n  .wp .tabs-danger ion-tabbar {\n    background-color: #f53d3d; }\n    .wp .tabs-danger ion-tabbar .tab-button {\n      color: rgba(255, 255, 255, 0.7); }\n    .wp .tabs-danger ion-tabbar .tab-button:hover:not(.disable-hover),\n    .wp .tabs-danger ion-tabbar .tab-button[aria-selected=true] {\n      border-color: #fff;\n      color: #fff; }\n  .wp .tabs-light ion-tabbar {\n    background-color: #f4f4f4; }\n    .wp .tabs-light ion-tabbar .tab-button {\n      color: rgba(0, 0, 0, 0.7); }\n    .wp .tabs-light ion-tabbar .tab-button:hover:not(.disable-hover),\n    .wp .tabs-light ion-tabbar .tab-button[aria-selected=true] {\n      border-color: #000;\n      color: #000; }\n  .wp .tabs-dark ion-tabbar {\n    background-color: #222; }\n    .wp .tabs-dark ion-tabbar .tab-button {\n      color: rgba(255, 255, 255, 0.7); }\n    .wp .tabs-dark ion-tabbar .tab-button:hover:not(.disable-hover),\n    .wp .tabs-dark ion-tabbar .tab-button[aria-selected=true] {\n      border-color: #fff;\n      color: #fff; }\n  .wp ion-toggle {\n    position: relative; }\n  .wp .toggle-icon {\n    position: relative;\n    display: block;\n    width: 40px;\n    height: 18px;\n    border: 2px solid #323232;\n    border-radius: 18px;\n    background-color: transparent;\n    pointer-events: none; }\n  .wp .toggle-inner {\n    position: absolute;\n    top: 2px;\n    left: 2px;\n    width: 10px;\n    height: 10px;\n    border-radius: 50%;\n    background-color: #323232;\n    -webkit-transition-duration: 300ms;\n    transition-duration: 300ms;\n    -webkit-transition-property: -webkit-transform, background-color;\n    transition-property: transform, background-color; }\n  .wp .toggle-checked {\n    border-color: #327eff;\n    background-color: #327eff; }\n  .wp .toggle-checked .toggle-inner {\n    background-color: #fff;\n    -webkit-transform: translate3d(22px, 0, 0);\n    transform: translate3d(22px, 0, 0); }\n  .wp .toggle-disabled,\n  .wp .item-toggle-disabled ion-label {\n    opacity: 0.3;\n    pointer-events: none; }\n  .wp .toggle-disabled ion-radio {\n    opacity: 0.3; }\n  .wp .item ion-toggle {\n    margin: 0;\n    padding: 12px 8px 12px 16px;\n    cursor: pointer; }\n    .wp .item ion-toggle[item-left] {\n      padding: 12px 18px 12px 2px; }\n  .wp .item-toggle ion-label {\n    margin-left: 0; }\n  .wp .toggle-primary .toggle-checked {\n    border-color: #327eff;\n    background-color: #327eff; }\n  .wp .toggle-primary .toggle-checked .toggle-inner {\n    background-color: #fff; }\n  .wp .toggle-secondary .toggle-checked {\n    border-color: #32db64;\n    background-color: #32db64; }\n  .wp .toggle-secondary .toggle-checked .toggle-inner {\n    background-color: #fff; }\n  .wp .toggle-danger .toggle-checked {\n    border-color: #f53d3d;\n    background-color: #f53d3d; }\n  .wp .toggle-danger .toggle-checked .toggle-inner {\n    background-color: #fff; }\n  .wp .toggle-light .toggle-checked {\n    border-color: #f4f4f4;\n    background-color: #f4f4f4; }\n  .wp .toggle-light .toggle-checked .toggle-inner {\n    background-color: #000; }\n  .wp .toggle-dark .toggle-checked {\n    border-color: #222;\n    background-color: #222; }\n  .wp .toggle-dark .toggle-checked .toggle-inner {\n    background-color: #fff; }\n  .wp ion-toast {\n    position: absolute;\n    top: 0;\n    left: 0;\n    z-index: 1000;\n    display: block;\n    width: 100%;\n    height: 100%;\n    pointer-events: none; }\n  .wp .toast-container {\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    pointer-events: auto; }\n  .wp .toast-button {\n    padding: 19px 16px 17px;\n    font-size: 1.5rem; }\n  .wp .toast-message {\n    -webkit-box-flex: 1;\n    -webkit-flex: 1;\n    -ms-flex: 1;\n    flex: 1; }\n  .wp .toast-wrapper {\n    position: absolute;\n    right: 0;\n    left: 0;\n    z-index: 10;\n    display: block;\n    margin: auto;\n    max-width: 700px;\n    border-radius: 0;\n    background: black; }\n    .wp .toast-wrapper.toast-top {\n      top: 0;\n      opacity: .01; }\n    .wp .toast-wrapper.toast-bottom {\n      bottom: 0;\n      opacity: .01; }\n    .wp .toast-wrapper.toast-middle {\n      opacity: .01; }\n  .wp .toast-message {\n    padding: 1.5rem;\n    font-size: 1.4rem;\n    color: #fff; }\n  .wp .toast-button {\n    color: #fff; }\n  .wp .toolbar {\n    display: -webkit-box;\n    display: -webkit-flex;\n    display: -ms-flexbox;\n    display: flex;\n    overflow: hidden;\n    -webkit-box-orient: horizontal;\n    -webkit-box-direction: normal;\n    -webkit-flex-direction: row;\n    -ms-flex-direction: row;\n    flex-direction: row;\n    -webkit-box-align: center;\n    -webkit-align-items: center;\n    -ms-flex-align: center;\n    align-items: center;\n    -webkit-box-pack: justify;\n    -webkit-justify-content: space-between;\n    -ms-flex-pack: justify;\n    justify-content: space-between;\n    width: 100%; }\n  .wp .toolbar-background {\n    position: absolute;\n    top: 0;\n    left: 0;\n    z-index: -1;\n    width: 100%;\n    height: 100%;\n    border: 0;\n    -webkit-transform: translateZ(0);\n    transform: translateZ(0);\n    pointer-events: none; }\n  .wp ion-title {\n    display: -webkit-box;\n    display: -webkit-flex;\n    display: -ms-flexbox;\n    display: flex;\n    -webkit-box-flex: 1;\n    -webkit-flex: 1;\n    -ms-flex: 1;\n    flex: 1;\n    -webkit-box-align: center;\n    -webkit-align-items: center;\n    -ms-flex-align: center;\n    align-items: center;\n    -webkit-transform: translateZ(0);\n    transform: translateZ(0); }\n  .wp .toolbar-title {\n    display: block;\n    overflow: hidden;\n    width: 100%;\n    text-overflow: ellipsis;\n    white-space: nowrap; }\n  .wp ion-buttons {\n    display: block;\n    margin: 0 .2rem;\n    -webkit-transform: translateZ(0);\n    transform: translateZ(0);\n    pointer-events: none; }\n  .wp ion-buttons button,\n  .wp ion-buttons a,\n  .wp ion-buttons input,\n  .wp ion-buttons textarea,\n  .wp ion-buttons div {\n    pointer-events: auto; }\n  .wp .toolbar[transparent] .toolbar-background {\n    border-color: transparent;\n    background: transparent; }\n  .wp ion-buttons,\n  .wp .bar-button-menutoggle {\n    z-index: 99;\n    -webkit-transform: translateZ(0);\n    transform: translateZ(0); }\n  .wp ion-navbar.toolbar {\n    display: -webkit-box;\n    display: -webkit-flex;\n    display: -ms-flexbox;\n    display: flex;\n    opacity: 0;\n    -webkit-transform: translateZ(0);\n    transform: translateZ(0); }\n    .wp ion-navbar.toolbar.show-navbar {\n      opacity: 1; }\n  .wp .bar-button {\n    -webkit-user-select: none;\n    -moz-user-select: none;\n    -ms-user-select: none;\n    user-select: none;\n    -webkit-appearance: none;\n    -moz-appearance: none;\n    position: relative;\n    display: inline-block;\n    margin: 0;\n    padding: 0;\n    line-height: 1;\n    text-align: center;\n    text-overflow: ellipsis;\n    text-transform: none;\n    white-space: nowrap;\n    cursor: pointer;\n    vertical-align: top;\n    vertical-align: -webkit-baseline-middle; }\n  .wp .bar-button::after {\n    position: absolute;\n    top: -7px;\n    right: -2px;\n    bottom: -6px;\n    left: -2px;\n    content: \"\"; }\n  .wp .bar-button-menutoggle {\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  .wp .back-button {\n    display: none; }\n    .wp .back-button.show-back-button {\n      display: inline-block; }\n  .wp .back-button-text {\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  .wp .toolbar {\n    padding: 4px;\n    min-height: 4.6rem; }\n  .wp .toolbar-background {\n    border-color: #b2b2b2;\n    background: #f8f8f8; }\n  .wp .toolbar-content {\n    -webkit-box-flex: 1;\n    -webkit-flex: 1;\n    -ms-flex: 1;\n    flex: 1;\n    -webkit-box-ordinal-group: 4;\n    -webkit-order: 3;\n    -ms-flex-order: 3;\n    order: 3;\n    min-width: 0;\n    max-width: 100%; }\n  .wp .toolbar-title {\n    padding: 0 6px;\n    font-size: 1.5rem;\n    font-weight: bold;\n    text-transform: uppercase;\n    color: #000; }\n  .wp ion-buttons {\n    -webkit-box-ordinal-group: 5;\n    -webkit-order: 4;\n    -ms-flex-order: 4;\n    order: 4;\n    -webkit-transform: translateZ(0);\n    transform: translateZ(0); }\n  .wp ion-buttons[left] {\n    -webkit-box-ordinal-group: 3;\n    -webkit-order: 2;\n    -ms-flex-order: 2;\n    order: 2; }\n  .wp ion-buttons[left] .bar-button:first-child {\n    margin-left: 0; }\n  .wp ion-buttons[end] {\n    -webkit-box-ordinal-group: 6;\n    -webkit-order: 5;\n    -ms-flex-order: 5;\n    order: 5;\n    text-align: right; }\n  .wp ion-buttons[right] {\n    -webkit-box-ordinal-group: 7;\n    -webkit-order: 6;\n    -ms-flex-order: 6;\n    order: 6;\n    text-align: right; }\n  .wp .bar-button {\n    margin-top: 0;\n    margin-right: .2rem;\n    margin-bottom: 0;\n    margin-left: .2rem;\n    padding: 0 5px;\n    height: 32px;\n    border: 0;\n    border-radius: 2px;\n    font-size: 1.4rem;\n    font-weight: 500;\n    text-transform: uppercase; }\n  .wp .bar-button-solid,\n  .wp .bar-button-outline {\n    overflow: hidden; }\n  .wp .bar-button-outline {\n    border-width: 1px;\n    border-style: solid;\n    border-color: #000;\n    color: #000;\n    background-color: transparent; }\n    .wp .bar-button-outline:hover:not(.disable-hover) {\n      opacity: .4; }\n    .wp .bar-button-outline.activated {\n      color: #fff;\n      background-color: #000; }\n  .wp .bar-button-solid {\n    color: #fff;\n    background-color: #000; }\n    .wp .bar-button-solid:hover:not(.disable-hover) {\n      color: #fff; }\n    .wp .bar-button-solid.activated {\n      color: #fff;\n      background-color: #141414; }\n  .wp .bar-button-icon-left ion-icon {\n    padding-right: .3em;\n    font-size: 1.4em;\n    line-height: .67;\n    pointer-events: none; }\n  .wp .bar-button-icon-right ion-icon {\n    padding-left: .4em;\n    font-size: 1.4em;\n    line-height: .67;\n    pointer-events: none; }\n  .wp .bar-button[icon-only] {\n    padding: 0; }\n    .wp .bar-button[icon-only] ion-icon {\n      padding: 0 .1em;\n      min-width: 28px;\n      font-size: 1.8em;\n      line-height: .67;\n      pointer-events: none; }\n  .wp .back-button {\n    margin: 0 6px;\n    min-width: 44px;\n    box-shadow: none; }\n  .wp .back-button-icon {\n    margin: 0;\n    padding: 0 6px;\n    font-size: 2.4rem;\n    font-weight: normal;\n    text-align: left; }\n  .wp .bar-button-menutoggle {\n    -webkit-box-ordinal-group: 2;\n    -webkit-order: 1;\n    -ms-flex-order: 1;\n    order: 1;\n    margin: 0 6px;\n    padding: 0 2px;\n    min-width: 44px; }\n    .wp .bar-button-menutoggle ion-icon {\n      padding: 0 6px;\n      font-size: 2.4rem; }\n  .wp .bar-button-menutoggle[end],\n  .wp .bar-button-menutoggle[right] {\n    -webkit-box-ordinal-group: 8;\n    -webkit-order: 7;\n    -ms-flex-order: 7;\n    order: 7;\n    margin: 0 2px;\n    min-width: 28px; }\n  .wp .bar-button-clear-default,\n  .wp .bar-button-default {\n    color: #000;\n    background-color: transparent; }\n    .wp .bar-button-clear-default:hover:not(.disable-hover),\n    .wp .bar-button-default:hover:not(.disable-hover) {\n      color: #000; }\n  .wp .bar-button-clear-clear,\n  .wp .bar-button-clear {\n    color: #000;\n    background-color: transparent; }\n    .wp .bar-button-clear-clear:hover:not(.disable-hover),\n    .wp .bar-button-clear:hover:not(.disable-hover) {\n      color: #000; }\n  .wp .toolbar-primary .toolbar-background {\n    background: #327eff; }\n  .wp .toolbar-primary .bar-button-clear,\n  .wp .toolbar-primary .bar-button-default,\n  .wp .toolbar-primary .bar-button-outline,\n  .wp .toolbar-primary .toolbar-title {\n    color: #fff; }\n  .wp .toolbar-primary .bar-button-outline {\n    border-color: #fff; }\n  .wp .toolbar-primary .bar-button-clear-primary,\n  .wp .toolbar-primary .bar-button-primary {\n    color: #327eff;\n    background-color: transparent; }\n    .wp .toolbar-primary .bar-button-clear-primary:hover:not(.disable-hover),\n    .wp .toolbar-primary .bar-button-primary:hover:not(.disable-hover) {\n      color: #327eff; }\n  .wp .toolbar-primary .bar-button-outline-primary {\n    border-color: #2e74eb;\n    color: #2e74eb;\n    background-color: transparent; }\n    .wp .toolbar-primary .bar-button-outline-primary.activated {\n      color: #fff;\n      background-color: #2e74eb; }\n  .wp .toolbar-primary .bar-button-solid-primary {\n    color: #fff;\n    background-color: #327eff; }\n    .wp .toolbar-primary .bar-button-solid-primary.activated {\n      color: #fff;\n      background-color: #2e74eb; }\n  .wp .toolbar-primary .bar-button-clear-secondary,\n  .wp .toolbar-primary .bar-button-secondary {\n    color: #32db64;\n    background-color: transparent; }\n    .wp .toolbar-primary .bar-button-clear-secondary:hover:not(.disable-hover),\n    .wp .toolbar-primary .bar-button-secondary:hover:not(.disable-hover) {\n      color: #32db64; }\n  .wp .toolbar-primary .bar-button-outline-secondary {\n    border-color: #2ec95c;\n    color: #2ec95c;\n    background-color: transparent; }\n    .wp .toolbar-primary .bar-button-outline-secondary.activated {\n      color: #fff;\n      background-color: #2ec95c; }\n  .wp .toolbar-primary .bar-button-solid-secondary {\n    color: #fff;\n    background-color: #32db64; }\n    .wp .toolbar-primary .bar-button-solid-secondary.activated {\n      color: #fff;\n      background-color: #2ec95c; }\n  .wp .toolbar-primary .bar-button-clear-danger,\n  .wp .toolbar-primary .bar-button-danger {\n    color: #f53d3d;\n    background-color: transparent; }\n    .wp .toolbar-primary .bar-button-clear-danger:hover:not(.disable-hover),\n    .wp .toolbar-primary .bar-button-danger:hover:not(.disable-hover) {\n      color: #f53d3d; }\n  .wp .toolbar-primary .bar-button-outline-danger {\n    border-color: #e13838;\n    color: #e13838;\n    background-color: transparent; }\n    .wp .toolbar-primary .bar-button-outline-danger.activated {\n      color: #fff;\n      background-color: #e13838; }\n  .wp .toolbar-primary .bar-button-solid-danger {\n    color: #fff;\n    background-color: #f53d3d; }\n    .wp .toolbar-primary .bar-button-solid-danger.activated {\n      color: #fff;\n      background-color: #e13838; }\n  .wp .toolbar-primary .bar-button-clear-light,\n  .wp .toolbar-primary .bar-button-light {\n    color: #f4f4f4;\n    background-color: transparent; }\n    .wp .toolbar-primary .bar-button-clear-light:hover:not(.disable-hover),\n    .wp .toolbar-primary .bar-button-light:hover:not(.disable-hover) {\n      color: #f4f4f4; }\n  .wp .toolbar-primary .bar-button-outline-light {\n    border-color: #e0e0e0;\n    color: #e0e0e0;\n    background-color: transparent; }\n    .wp .toolbar-primary .bar-button-outline-light.activated {\n      color: #000;\n      background-color: #e0e0e0; }\n  .wp .toolbar-primary .bar-button-solid-light {\n    color: #000;\n    background-color: #f4f4f4; }\n    .wp .toolbar-primary .bar-button-solid-light.activated {\n      color: #000;\n      background-color: #e0e0e0; }\n  .wp .toolbar-primary .bar-button-clear-dark,\n  .wp .toolbar-primary .bar-button-dark {\n    color: #222;\n    background-color: transparent; }\n    .wp .toolbar-primary .bar-button-clear-dark:hover:not(.disable-hover),\n    .wp .toolbar-primary .bar-button-dark:hover:not(.disable-hover) {\n      color: #222; }\n  .wp .toolbar-primary .bar-button-outline-dark {\n    border-color: #343434;\n    color: #343434;\n    background-color: transparent; }\n    .wp .toolbar-primary .bar-button-outline-dark.activated {\n      color: #fff;\n      background-color: #343434; }\n  .wp .toolbar-primary .bar-button-solid-dark {\n    color: #fff;\n    background-color: #222; }\n    .wp .toolbar-primary .bar-button-solid-dark.activated {\n      color: #fff;\n      background-color: #343434; }\n  .wp .bar-button-clear-primary,\n  .wp .bar-button-primary {\n    color: #327eff;\n    background-color: transparent; }\n    .wp .bar-button-clear-primary:hover:not(.disable-hover),\n    .wp .bar-button-primary:hover:not(.disable-hover) {\n      color: #327eff; }\n  .wp .bar-button-outline-primary {\n    border-color: #2e74eb;\n    color: #2e74eb;\n    background-color: transparent; }\n    .wp .bar-button-outline-primary.activated {\n      color: #fff;\n      background-color: #2e74eb; }\n  .wp .bar-button-solid-primary {\n    color: #fff;\n    background-color: #327eff; }\n    .wp .bar-button-solid-primary.activated {\n      color: #fff;\n      background-color: #2e74eb; }\n  .wp .toolbar-secondary .toolbar-background {\n    background: #32db64; }\n  .wp .toolbar-secondary .bar-button-clear,\n  .wp .toolbar-secondary .bar-button-default,\n  .wp .toolbar-secondary .bar-button-outline,\n  .wp .toolbar-secondary .toolbar-title {\n    color: #fff; }\n  .wp .toolbar-secondary .bar-button-outline {\n    border-color: #fff; }\n  .wp .toolbar-secondary .bar-button-clear-primary,\n  .wp .toolbar-secondary .bar-button-primary {\n    color: #327eff;\n    background-color: transparent; }\n    .wp .toolbar-secondary .bar-button-clear-primary:hover:not(.disable-hover),\n    .wp .toolbar-secondary .bar-button-primary:hover:not(.disable-hover) {\n      color: #327eff; }\n  .wp .toolbar-secondary .bar-button-outline-primary {\n    border-color: #2e74eb;\n    color: #2e74eb;\n    background-color: transparent; }\n    .wp .toolbar-secondary .bar-button-outline-primary.activated {\n      color: #fff;\n      background-color: #2e74eb; }\n  .wp .toolbar-secondary .bar-button-solid-primary {\n    color: #fff;\n    background-color: #327eff; }\n    .wp .toolbar-secondary .bar-button-solid-primary.activated {\n      color: #fff;\n      background-color: #2e74eb; }\n  .wp .toolbar-secondary .bar-button-clear-secondary,\n  .wp .toolbar-secondary .bar-button-secondary {\n    color: #32db64;\n    background-color: transparent; }\n    .wp .toolbar-secondary .bar-button-clear-secondary:hover:not(.disable-hover),\n    .wp .toolbar-secondary .bar-button-secondary:hover:not(.disable-hover) {\n      color: #32db64; }\n  .wp .toolbar-secondary .bar-button-outline-secondary {\n    border-color: #2ec95c;\n    color: #2ec95c;\n    background-color: transparent; }\n    .wp .toolbar-secondary .bar-button-outline-secondary.activated {\n      color: #fff;\n      background-color: #2ec95c; }\n  .wp .toolbar-secondary .bar-button-solid-secondary {\n    color: #fff;\n    background-color: #32db64; }\n    .wp .toolbar-secondary .bar-button-solid-secondary.activated {\n      color: #fff;\n      background-color: #2ec95c; }\n  .wp .toolbar-secondary .bar-button-clear-danger,\n  .wp .toolbar-secondary .bar-button-danger {\n    color: #f53d3d;\n    background-color: transparent; }\n    .wp .toolbar-secondary .bar-button-clear-danger:hover:not(.disable-hover),\n    .wp .toolbar-secondary .bar-button-danger:hover:not(.disable-hover) {\n      color: #f53d3d; }\n  .wp .toolbar-secondary .bar-button-outline-danger {\n    border-color: #e13838;\n    color: #e13838;\n    background-color: transparent; }\n    .wp .toolbar-secondary .bar-button-outline-danger.activated {\n      color: #fff;\n      background-color: #e13838; }\n  .wp .toolbar-secondary .bar-button-solid-danger {\n    color: #fff;\n    background-color: #f53d3d; }\n    .wp .toolbar-secondary .bar-button-solid-danger.activated {\n      color: #fff;\n      background-color: #e13838; }\n  .wp .toolbar-secondary .bar-button-clear-light,\n  .wp .toolbar-secondary .bar-button-light {\n    color: #f4f4f4;\n    background-color: transparent; }\n    .wp .toolbar-secondary .bar-button-clear-light:hover:not(.disable-hover),\n    .wp .toolbar-secondary .bar-button-light:hover:not(.disable-hover) {\n      color: #f4f4f4; }\n  .wp .toolbar-secondary .bar-button-outline-light {\n    border-color: #e0e0e0;\n    color: #e0e0e0;\n    background-color: transparent; }\n    .wp .toolbar-secondary .bar-button-outline-light.activated {\n      color: #000;\n      background-color: #e0e0e0; }\n  .wp .toolbar-secondary .bar-button-solid-light {\n    color: #000;\n    background-color: #f4f4f4; }\n    .wp .toolbar-secondary .bar-button-solid-light.activated {\n      color: #000;\n      background-color: #e0e0e0; }\n  .wp .toolbar-secondary .bar-button-clear-dark,\n  .wp .toolbar-secondary .bar-button-dark {\n    color: #222;\n    background-color: transparent; }\n    .wp .toolbar-secondary .bar-button-clear-dark:hover:not(.disable-hover),\n    .wp .toolbar-secondary .bar-button-dark:hover:not(.disable-hover) {\n      color: #222; }\n  .wp .toolbar-secondary .bar-button-outline-dark {\n    border-color: #343434;\n    color: #343434;\n    background-color: transparent; }\n    .wp .toolbar-secondary .bar-button-outline-dark.activated {\n      color: #fff;\n      background-color: #343434; }\n  .wp .toolbar-secondary .bar-button-solid-dark {\n    color: #fff;\n    background-color: #222; }\n    .wp .toolbar-secondary .bar-button-solid-dark.activated {\n      color: #fff;\n      background-color: #343434; }\n  .wp .bar-button-clear-secondary,\n  .wp .bar-button-secondary {\n    color: #32db64;\n    background-color: transparent; }\n    .wp .bar-button-clear-secondary:hover:not(.disable-hover),\n    .wp .bar-button-secondary:hover:not(.disable-hover) {\n      color: #32db64; }\n  .wp .bar-button-outline-secondary {\n    border-color: #2ec95c;\n    color: #2ec95c;\n    background-color: transparent; }\n    .wp .bar-button-outline-secondary.activated {\n      color: #fff;\n      background-color: #2ec95c; }\n  .wp .bar-button-solid-secondary {\n    color: #fff;\n    background-color: #32db64; }\n    .wp .bar-button-solid-secondary.activated {\n      color: #fff;\n      background-color: #2ec95c; }\n  .wp .toolbar-danger .toolbar-background {\n    background: #f53d3d; }\n  .wp .toolbar-danger .bar-button-clear,\n  .wp .toolbar-danger .bar-button-default,\n  .wp .toolbar-danger .bar-button-outline,\n  .wp .toolbar-danger .toolbar-title {\n    color: #fff; }\n  .wp .toolbar-danger .bar-button-outline {\n    border-color: #fff; }\n  .wp .toolbar-danger .bar-button-clear-primary,\n  .wp .toolbar-danger .bar-button-primary {\n    color: #327eff;\n    background-color: transparent; }\n    .wp .toolbar-danger .bar-button-clear-primary:hover:not(.disable-hover),\n    .wp .toolbar-danger .bar-button-primary:hover:not(.disable-hover) {\n      color: #327eff; }\n  .wp .toolbar-danger .bar-button-outline-primary {\n    border-color: #2e74eb;\n    color: #2e74eb;\n    background-color: transparent; }\n    .wp .toolbar-danger .bar-button-outline-primary.activated {\n      color: #fff;\n      background-color: #2e74eb; }\n  .wp .toolbar-danger .bar-button-solid-primary {\n    color: #fff;\n    background-color: #327eff; }\n    .wp .toolbar-danger .bar-button-solid-primary.activated {\n      color: #fff;\n      background-color: #2e74eb; }\n  .wp .toolbar-danger .bar-button-clear-secondary,\n  .wp .toolbar-danger .bar-button-secondary {\n    color: #32db64;\n    background-color: transparent; }\n    .wp .toolbar-danger .bar-button-clear-secondary:hover:not(.disable-hover),\n    .wp .toolbar-danger .bar-button-secondary:hover:not(.disable-hover) {\n      color: #32db64; }\n  .wp .toolbar-danger .bar-button-outline-secondary {\n    border-color: #2ec95c;\n    color: #2ec95c;\n    background-color: transparent; }\n    .wp .toolbar-danger .bar-button-outline-secondary.activated {\n      color: #fff;\n      background-color: #2ec95c; }\n  .wp .toolbar-danger .bar-button-solid-secondary {\n    color: #fff;\n    background-color: #32db64; }\n    .wp .toolbar-danger .bar-button-solid-secondary.activated {\n      color: #fff;\n      background-color: #2ec95c; }\n  .wp .toolbar-danger .bar-button-clear-danger,\n  .wp .toolbar-danger .bar-button-danger {\n    color: #f53d3d;\n    background-color: transparent; }\n    .wp .toolbar-danger .bar-button-clear-danger:hover:not(.disable-hover),\n    .wp .toolbar-danger .bar-button-danger:hover:not(.disable-hover) {\n      color: #f53d3d; }\n  .wp .toolbar-danger .bar-button-outline-danger {\n    border-color: #e13838;\n    color: #e13838;\n    background-color: transparent; }\n    .wp .toolbar-danger .bar-button-outline-danger.activated {\n      color: #fff;\n      background-color: #e13838; }\n  .wp .toolbar-danger .bar-button-solid-danger {\n    color: #fff;\n    background-color: #f53d3d; }\n    .wp .toolbar-danger .bar-button-solid-danger.activated {\n      color: #fff;\n      background-color: #e13838; }\n  .wp .toolbar-danger .bar-button-clear-light,\n  .wp .toolbar-danger .bar-button-light {\n    color: #f4f4f4;\n    background-color: transparent; }\n    .wp .toolbar-danger .bar-button-clear-light:hover:not(.disable-hover),\n    .wp .toolbar-danger .bar-button-light:hover:not(.disable-hover) {\n      color: #f4f4f4; }\n  .wp .toolbar-danger .bar-button-outline-light {\n    border-color: #e0e0e0;\n    color: #e0e0e0;\n    background-color: transparent; }\n    .wp .toolbar-danger .bar-button-outline-light.activated {\n      color: #000;\n      background-color: #e0e0e0; }\n  .wp .toolbar-danger .bar-button-solid-light {\n    color: #000;\n    background-color: #f4f4f4; }\n    .wp .toolbar-danger .bar-button-solid-light.activated {\n      color: #000;\n      background-color: #e0e0e0; }\n  .wp .toolbar-danger .bar-button-clear-dark,\n  .wp .toolbar-danger .bar-button-dark {\n    color: #222;\n    background-color: transparent; }\n    .wp .toolbar-danger .bar-button-clear-dark:hover:not(.disable-hover),\n    .wp .toolbar-danger .bar-button-dark:hover:not(.disable-hover) {\n      color: #222; }\n  .wp .toolbar-danger .bar-button-outline-dark {\n    border-color: #343434;\n    color: #343434;\n    background-color: transparent; }\n    .wp .toolbar-danger .bar-button-outline-dark.activated {\n      color: #fff;\n      background-color: #343434; }\n  .wp .toolbar-danger .bar-button-solid-dark {\n    color: #fff;\n    background-color: #222; }\n    .wp .toolbar-danger .bar-button-solid-dark.activated {\n      color: #fff;\n      background-color: #343434; }\n  .wp .bar-button-clear-danger,\n  .wp .bar-button-danger {\n    color: #f53d3d;\n    background-color: transparent; }\n    .wp .bar-button-clear-danger:hover:not(.disable-hover),\n    .wp .bar-button-danger:hover:not(.disable-hover) {\n      color: #f53d3d; }\n  .wp .bar-button-outline-danger {\n    border-color: #e13838;\n    color: #e13838;\n    background-color: transparent; }\n    .wp .bar-button-outline-danger.activated {\n      color: #fff;\n      background-color: #e13838; }\n  .wp .bar-button-solid-danger {\n    color: #fff;\n    background-color: #f53d3d; }\n    .wp .bar-button-solid-danger.activated {\n      color: #fff;\n      background-color: #e13838; }\n  .wp .toolbar-light .toolbar-background {\n    background: #f4f4f4; }\n  .wp .toolbar-light .bar-button-clear,\n  .wp .toolbar-light .bar-button-default,\n  .wp .toolbar-light .bar-button-outline,\n  .wp .toolbar-light .toolbar-title {\n    color: #000; }\n  .wp .toolbar-light .bar-button-outline {\n    border-color: #000; }\n  .wp .toolbar-light .bar-button-clear-primary,\n  .wp .toolbar-light .bar-button-primary {\n    color: #327eff;\n    background-color: transparent; }\n    .wp .toolbar-light .bar-button-clear-primary:hover:not(.disable-hover),\n    .wp .toolbar-light .bar-button-primary:hover:not(.disable-hover) {\n      color: #327eff; }\n  .wp .toolbar-light .bar-button-outline-primary {\n    border-color: #2e74eb;\n    color: #2e74eb;\n    background-color: transparent; }\n    .wp .toolbar-light .bar-button-outline-primary.activated {\n      color: #fff;\n      background-color: #2e74eb; }\n  .wp .toolbar-light .bar-button-solid-primary {\n    color: #fff;\n    background-color: #327eff; }\n    .wp .toolbar-light .bar-button-solid-primary.activated {\n      color: #fff;\n      background-color: #2e74eb; }\n  .wp .toolbar-light .bar-button-clear-secondary,\n  .wp .toolbar-light .bar-button-secondary {\n    color: #32db64;\n    background-color: transparent; }\n    .wp .toolbar-light .bar-button-clear-secondary:hover:not(.disable-hover),\n    .wp .toolbar-light .bar-button-secondary:hover:not(.disable-hover) {\n      color: #32db64; }\n  .wp .toolbar-light .bar-button-outline-secondary {\n    border-color: #2ec95c;\n    color: #2ec95c;\n    background-color: transparent; }\n    .wp .toolbar-light .bar-button-outline-secondary.activated {\n      color: #fff;\n      background-color: #2ec95c; }\n  .wp .toolbar-light .bar-button-solid-secondary {\n    color: #fff;\n    background-color: #32db64; }\n    .wp .toolbar-light .bar-button-solid-secondary.activated {\n      color: #fff;\n      background-color: #2ec95c; }\n  .wp .toolbar-light .bar-button-clear-danger,\n  .wp .toolbar-light .bar-button-danger {\n    color: #f53d3d;\n    background-color: transparent; }\n    .wp .toolbar-light .bar-button-clear-danger:hover:not(.disable-hover),\n    .wp .toolbar-light .bar-button-danger:hover:not(.disable-hover) {\n      color: #f53d3d; }\n  .wp .toolbar-light .bar-button-outline-danger {\n    border-color: #e13838;\n    color: #e13838;\n    background-color: transparent; }\n    .wp .toolbar-light .bar-button-outline-danger.activated {\n      color: #fff;\n      background-color: #e13838; }\n  .wp .toolbar-light .bar-button-solid-danger {\n    color: #fff;\n    background-color: #f53d3d; }\n    .wp .toolbar-light .bar-button-solid-danger.activated {\n      color: #fff;\n      background-color: #e13838; }\n  .wp .toolbar-light .bar-button-clear-light,\n  .wp .toolbar-light .bar-button-light {\n    color: #f4f4f4;\n    background-color: transparent; }\n    .wp .toolbar-light .bar-button-clear-light:hover:not(.disable-hover),\n    .wp .toolbar-light .bar-button-light:hover:not(.disable-hover) {\n      color: #f4f4f4; }\n  .wp .toolbar-light .bar-button-outline-light {\n    border-color: #e0e0e0;\n    color: #e0e0e0;\n    background-color: transparent; }\n    .wp .toolbar-light .bar-button-outline-light.activated {\n      color: #000;\n      background-color: #e0e0e0; }\n  .wp .toolbar-light .bar-button-solid-light {\n    color: #000;\n    background-color: #f4f4f4; }\n    .wp .toolbar-light .bar-button-solid-light.activated {\n      color: #000;\n      background-color: #e0e0e0; }\n  .wp .toolbar-light .bar-button-clear-dark,\n  .wp .toolbar-light .bar-button-dark {\n    color: #222;\n    background-color: transparent; }\n    .wp .toolbar-light .bar-button-clear-dark:hover:not(.disable-hover),\n    .wp .toolbar-light .bar-button-dark:hover:not(.disable-hover) {\n      color: #222; }\n  .wp .toolbar-light .bar-button-outline-dark {\n    border-color: #343434;\n    color: #343434;\n    background-color: transparent; }\n    .wp .toolbar-light .bar-button-outline-dark.activated {\n      color: #fff;\n      background-color: #343434; }\n  .wp .toolbar-light .bar-button-solid-dark {\n    color: #fff;\n    background-color: #222; }\n    .wp .toolbar-light .bar-button-solid-dark.activated {\n      color: #fff;\n      background-color: #343434; }\n  .wp .bar-button-clear-light,\n  .wp .bar-button-light {\n    color: #f4f4f4;\n    background-color: transparent; }\n    .wp .bar-button-clear-light:hover:not(.disable-hover),\n    .wp .bar-button-light:hover:not(.disable-hover) {\n      color: #f4f4f4; }\n  .wp .bar-button-outline-light {\n    border-color: #e0e0e0;\n    color: #e0e0e0;\n    background-color: transparent; }\n    .wp .bar-button-outline-light.activated {\n      color: #000;\n      background-color: #e0e0e0; }\n  .wp .bar-button-solid-light {\n    color: #000;\n    background-color: #f4f4f4; }\n    .wp .bar-button-solid-light.activated {\n      color: #000;\n      background-color: #e0e0e0; }\n  .wp .toolbar-dark .toolbar-background {\n    background: #222; }\n  .wp .toolbar-dark .bar-button-clear,\n  .wp .toolbar-dark .bar-button-default,\n  .wp .toolbar-dark .bar-button-outline,\n  .wp .toolbar-dark .toolbar-title {\n    color: #fff; }\n  .wp .toolbar-dark .bar-button-outline {\n    border-color: #fff; }\n  .wp .toolbar-dark .bar-button-clear-primary,\n  .wp .toolbar-dark .bar-button-primary {\n    color: #327eff;\n    background-color: transparent; }\n    .wp .toolbar-dark .bar-button-clear-primary:hover:not(.disable-hover),\n    .wp .toolbar-dark .bar-button-primary:hover:not(.disable-hover) {\n      color: #327eff; }\n  .wp .toolbar-dark .bar-button-outline-primary {\n    border-color: #2e74eb;\n    color: #2e74eb;\n    background-color: transparent; }\n    .wp .toolbar-dark .bar-button-outline-primary.activated {\n      color: #fff;\n      background-color: #2e74eb; }\n  .wp .toolbar-dark .bar-button-solid-primary {\n    color: #fff;\n    background-color: #327eff; }\n    .wp .toolbar-dark .bar-button-solid-primary.activated {\n      color: #fff;\n      background-color: #2e74eb; }\n  .wp .toolbar-dark .bar-button-clear-secondary,\n  .wp .toolbar-dark .bar-button-secondary {\n    color: #32db64;\n    background-color: transparent; }\n    .wp .toolbar-dark .bar-button-clear-secondary:hover:not(.disable-hover),\n    .wp .toolbar-dark .bar-button-secondary:hover:not(.disable-hover) {\n      color: #32db64; }\n  .wp .toolbar-dark .bar-button-outline-secondary {\n    border-color: #2ec95c;\n    color: #2ec95c;\n    background-color: transparent; }\n    .wp .toolbar-dark .bar-button-outline-secondary.activated {\n      color: #fff;\n      background-color: #2ec95c; }\n  .wp .toolbar-dark .bar-button-solid-secondary {\n    color: #fff;\n    background-color: #32db64; }\n    .wp .toolbar-dark .bar-button-solid-secondary.activated {\n      color: #fff;\n      background-color: #2ec95c; }\n  .wp .toolbar-dark .bar-button-clear-danger,\n  .wp .toolbar-dark .bar-button-danger {\n    color: #f53d3d;\n    background-color: transparent; }\n    .wp .toolbar-dark .bar-button-clear-danger:hover:not(.disable-hover),\n    .wp .toolbar-dark .bar-button-danger:hover:not(.disable-hover) {\n      color: #f53d3d; }\n  .wp .toolbar-dark .bar-button-outline-danger {\n    border-color: #e13838;\n    color: #e13838;\n    background-color: transparent; }\n    .wp .toolbar-dark .bar-button-outline-danger.activated {\n      color: #fff;\n      background-color: #e13838; }\n  .wp .toolbar-dark .bar-button-solid-danger {\n    color: #fff;\n    background-color: #f53d3d; }\n    .wp .toolbar-dark .bar-button-solid-danger.activated {\n      color: #fff;\n      background-color: #e13838; }\n  .wp .toolbar-dark .bar-button-clear-light,\n  .wp .toolbar-dark .bar-button-light {\n    color: #f4f4f4;\n    background-color: transparent; }\n    .wp .toolbar-dark .bar-button-clear-light:hover:not(.disable-hover),\n    .wp .toolbar-dark .bar-button-light:hover:not(.disable-hover) {\n      color: #f4f4f4; }\n  .wp .toolbar-dark .bar-button-outline-light {\n    border-color: #e0e0e0;\n    color: #e0e0e0;\n    background-color: transparent; }\n    .wp .toolbar-dark .bar-button-outline-light.activated {\n      color: #000;\n      background-color: #e0e0e0; }\n  .wp .toolbar-dark .bar-button-solid-light {\n    color: #000;\n    background-color: #f4f4f4; }\n    .wp .toolbar-dark .bar-button-solid-light.activated {\n      color: #000;\n      background-color: #e0e0e0; }\n  .wp .toolbar-dark .bar-button-clear-dark,\n  .wp .toolbar-dark .bar-button-dark {\n    color: #222;\n    background-color: transparent; }\n    .wp .toolbar-dark .bar-button-clear-dark:hover:not(.disable-hover),\n    .wp .toolbar-dark .bar-button-dark:hover:not(.disable-hover) {\n      color: #222; }\n  .wp .toolbar-dark .bar-button-outline-dark {\n    border-color: #343434;\n    color: #343434;\n    background-color: transparent; }\n    .wp .toolbar-dark .bar-button-outline-dark.activated {\n      color: #fff;\n      background-color: #343434; }\n  .wp .toolbar-dark .bar-button-solid-dark {\n    color: #fff;\n    background-color: #222; }\n    .wp .toolbar-dark .bar-button-solid-dark.activated {\n      color: #fff;\n      background-color: #343434; }\n  .wp .bar-button-clear-dark,\n  .wp .bar-button-dark {\n    color: #222;\n    background-color: transparent; }\n    .wp .bar-button-clear-dark:hover:not(.disable-hover),\n    .wp .bar-button-dark:hover:not(.disable-hover) {\n      color: #222; }\n  .wp .bar-button-outline-dark {\n    border-color: #343434;\n    color: #343434;\n    background-color: transparent; }\n    .wp .bar-button-outline-dark.activated {\n      color: #fff;\n      background-color: #343434; }\n  .wp .bar-button-solid-dark {\n    color: #fff;\n    background-color: #222; }\n    .wp .bar-button-solid-dark.activated {\n      color: #fff;\n      background-color: #343434; }\n  .wp html {\n    font-size: 62.5%; }\n  .wp a {\n    background-color: transparent; }\n  .wp .enable-hover a:hover {\n    opacity: .7; }\n  .wp h1,\n  .wp h2,\n  .wp h3,\n  .wp h4,\n  .wp h5,\n  .wp h6 {\n    margin-top: 1.6rem;\n    margin-bottom: 1rem;\n    font-weight: 500;\n    line-height: 1.2; }\n  .wp [padding] h1:first-child,\n  .wp [padding] h2:first-child,\n  .wp [padding] h3:first-child,\n  .wp [padding] h4:first-child,\n  .wp [padding] h5:first-child,\n  .wp [padding] h6:first-child {\n    margin-top: -.3rem; }\n  .wp h1 + h2,\n  .wp h1 + h3,\n  .wp h2 + h3 {\n    margin-top: -.3rem; }\n  .wp h1 {\n    margin-top: 2rem;\n    font-size: 2.6rem; }\n  .wp h2 {\n    margin-top: 1.8rem;\n    font-size: 2.4rem; }\n  .wp h3 {\n    font-size: 2.2rem; }\n  .wp h4 {\n    font-size: 2rem; }\n  .wp h5 {\n    font-size: 1.8rem; }\n  .wp h6 {\n    font-size: 1.6rem; }\n  .wp small {\n    font-size: 75%; }\n  .wp sub,\n  .wp sup {\n    position: relative;\n    font-size: 75%;\n    line-height: 0;\n    vertical-align: baseline; }\n  .wp sup {\n    top: -.5em; }\n  .wp sub {\n    bottom: -.25em; }\n  .wp [text-left] {\n    text-align: left; }\n  .wp [text-center] {\n    text-align: center; }\n  .wp [text-right] {\n    text-align: right; }\n  .wp [text-justify] {\n    text-align: justify; }\n  .wp [text-nowrap] {\n    white-space: nowrap; }\n  .wp [text-uppercase] {\n    text-transform: uppercase; }\n  .wp [text-lowercase] {\n    text-transform: lowercase; }\n  .wp [text-capitalize] {\n    text-transform: capitalize; }\n  .wp p {\n    color: #000; }\n  .wp a {\n    color: #327eff; }\n  .wp .text-primary {\n    color: #327eff; }\n  .wp .text-secondary {\n    color: #32db64; }\n  .wp .text-danger {\n    color: #f53d3d; }\n  .wp .text-light {\n    color: #f4f4f4; }\n  .wp .text-dark {\n    color: #222; }\n  .wp ion-nav > ion-page > .toolbar.statusbar-padding:first-child,\n  .wp ion-nav > ion-page > ion-header > .toolbar.statusbar-padding:first-child,\n  .wp ion-tab > ion-page > ion-header > .toolbar.statusbar-padding:first-child,\n  .wp ion-tabs > ion-page.tab-subpage > ion-header > .toolbar.statusbar-padding:first-child,\n  .wp ion-menu > .menu-inner > .toolbar.statusbar-padding:first-child,\n  .wp ion-menu > .menu-inner > ion-header > .toolbar.statusbar-padding:first-child {\n    padding-top: 20px;\n    height: calc(4.6rem + 20px);\n    min-height: calc(4.6rem + 20px); }\n  .wp ion-nav > ion-page > ion-content.statusbar-padding:first-child scroll-content,\n  .wp ion-nav > ion-page > ion-header > ion-content.statusbar-padding:first-child scroll-content,\n  .wp ion-tab > ion-page > ion-header > ion-content.statusbar-padding:first-child scroll-content,\n  .wp ion-tabs > ion-page.tab-subpage > ion-header > ion-content.statusbar-padding:first-child scroll-content,\n  .wp ion-menu > .menu-inner > ion-content.statusbar-padding:first-child scroll-content,\n  .wp ion-menu > .menu-inner > ion-header > ion-content.statusbar-padding:first-child scroll-content {\n    padding-top: 20px; }\n  .wp ion-nav > ion-page > ion-content.statusbar-padding:first-child[padding] scroll-content,\n  .wp ion-nav > ion-page > ion-content.statusbar-padding:first-child[padding-top] scroll-content,\n  .wp ion-nav > ion-page > ion-header > ion-content.statusbar-padding:first-child[padding] scroll-content,\n  .wp ion-nav > ion-page > ion-header > ion-content.statusbar-padding:first-child[padding-top] scroll-content,\n  .wp ion-tab > ion-page > ion-header > ion-content.statusbar-padding:first-child[padding] scroll-content,\n  .wp ion-tab > ion-page > ion-header > ion-content.statusbar-padding:first-child[padding-top] scroll-content,\n  .wp ion-tabs > ion-page.tab-subpage > ion-header > ion-content.statusbar-padding:first-child[padding] scroll-content,\n  .wp ion-tabs > ion-page.tab-subpage > ion-header > ion-content.statusbar-padding:first-child[padding-top] scroll-content,\n  .wp ion-menu > .menu-inner > ion-content.statusbar-padding:first-child[padding] scroll-content,\n  .wp ion-menu > .menu-inner > ion-content.statusbar-padding:first-child[padding-top] scroll-content,\n  .wp ion-menu > .menu-inner > ion-header > ion-content.statusbar-padding:first-child[padding] scroll-content,\n  .wp ion-menu > .menu-inner > ion-header > ion-content.statusbar-padding:first-child[padding-top] scroll-content {\n    padding-top: calc(16px + 20px); }\n  @media only screen and (max-width: 767px) {\n    .wp .modal-wrapper > ion-page > ion-header > .toolbar.statusbar-padding:first-child {\n      padding-top: 20px;\n      height: calc(4.6rem + 20px);\n      min-height: calc(4.6rem + 20px); }\n    .wp .modal-wrapper > ion-page > ion-header > ion-content.statusbar-padding:first-child scroll-content {\n      padding-top: 20px; }\n    .wp .modal-wrapper > ion-page > ion-header > ion-content.statusbar-padding:first-child[padding] scroll-content,\n    .wp .modal-wrapper > ion-page > ion-header > ion-content.statusbar-padding:first-child[padding-top] scroll-content {\n      padding-top: calc(16px + 20px); } }\n\n@font-face {\n  font-family: \"Noto Sans\";\n  font-style: normal;\n  font-weight: 300;\n  src: local(\"Noto Sans\"), local(\"Noto-Sans-Regular\"), url(\"../fonts/noto-sans-regular.ttf\") format(\"truetype\"); }\n\n@font-face {\n  font-family: \"Noto Sans\";\n  font-style: normal;\n  font-weight: 400;\n  src: local(\"Noto Sans\"), local(\"Noto-Sans-Regular\"), url(\"../fonts/noto-sans-regular.ttf\") format(\"truetype\"); }\n\n@font-face {\n  font-family: \"Noto Sans\";\n  font-style: normal;\n  font-weight: 500;\n  src: local(\"Noto Sans Bold\"), local(\"Noto-Sans-Bold\"), url(\"../fonts/noto-sans-bold.ttf\") format(\"truetype\"); }\n\n@font-face {\n  font-family: \"Noto Sans\";\n  font-style: normal;\n  font-weight: 700;\n  src: local(\"Noto Sans Bold\"), local(\"Noto-Sans-Bold\"), url(\"../fonts/noto-sans-bold.ttf\") format(\"truetype\"); }\n"
  },
  {
    "path": "content/dist/bundles/ionic.ios.css",
    "content": "audio,\ncanvas,\nprogress,\nvideo {\n  vertical-align: baseline; }\n\naudio:not([controls]) {\n  display: none;\n  height: 0; }\n\nb,\nstrong {\n  font-weight: bold; }\n\nimg {\n  max-width: 100%;\n  border: 0; }\n\nsvg:not(:root) {\n  overflow: hidden; }\n\nfigure {\n  margin: 1em 40px; }\n\nhr {\n  height: 1px;\n  border-width: 0;\n  box-sizing: content-box; }\n\npre {\n  overflow: auto; }\n\ncode,\nkbd,\npre,\nsamp {\n  font-family: monospace, monospace;\n  font-size: 1em; }\n\nlabel,\ninput,\nselect,\ntextarea {\n  font-family: inherit;\n  line-height: normal; }\n\ntextarea {\n  overflow: auto;\n  height: auto;\n  font: inherit;\n  color: inherit; }\n\nform,\ninput,\noptgroup,\nselect {\n  margin: 0;\n  font: inherit;\n  color: inherit; }\n\nhtml input[type=\"button\"],\ninput[type=\"reset\"],\ninput[type=\"submit\"] {\n  cursor: pointer;\n  -webkit-appearance: button; }\n\na,\na div,\na span,\na ion-icon,\na ion-label,\nbutton,\nbutton div,\nbutton span,\nbutton ion-icon,\nbutton ion-label,\n[tappable],\n[tappable] div,\n[tappable] span,\n[tappable] ion-icon,\n[tappable] ion-label,\ninput,\ntextarea {\n  -ms-touch-action: manipulation;\n  touch-action: manipulation; }\n\na ion-label,\nbutton ion-label,\n[tappable] ion-label {\n  pointer-events: none; }\n\nbutton {\n  border: 0;\n  font-family: inherit;\n  font-style: inherit;\n  font-variant: inherit;\n  line-height: 1;\n  text-transform: none;\n  cursor: pointer;\n  -webkit-appearance: button; }\n\na[disabled],\nbutton[disabled],\nhtml input[disabled] {\n  cursor: default; }\n\nbutton::-moz-focus-inner,\ninput::-moz-focus-inner {\n  padding: 0;\n  border: 0; }\n\ninput[type=\"checkbox\"],\ninput[type=\"radio\"] {\n  padding: 0;\n  box-sizing: border-box; }\n\ninput[type=\"number\"]::-webkit-inner-spin-button,\ninput[type=\"number\"]::-webkit-outer-spin-button {\n  height: auto; }\n\ninput[type=\"search\"]::-webkit-search-cancel-button,\ninput[type=\"search\"]::-webkit-search-decoration {\n  -webkit-appearance: none; }\n\ntable {\n  border-collapse: collapse;\n  border-spacing: 0; }\n\ntd,\nth {\n  padding: 0; }\n\n* {\n  box-sizing: border-box;\n  -webkit-tap-highlight-color: transparent;\n  -webkit-tap-highlight-color: transparent;\n  -webkit-touch-callout: none; }\n\nhtml {\n  width: 100%;\n  height: 100%;\n  -webkit-text-size-adjust: 100%;\n  -ms-text-size-adjust: 100%;\n  text-size-adjust: 100%; }\n\nbody {\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  -ms-user-select: none;\n  user-select: none;\n  position: fixed;\n  overflow: hidden;\n  margin: 0;\n  padding: 0;\n  width: 100%;\n  max-width: 100%;\n  height: 100%;\n  max-height: 100%;\n  -webkit-font-smoothing: antialiased;\n  font-smoothing: antialiased;\n  text-rendering: optimizeLegibility;\n  -webkit-user-drag: none;\n  -ms-content-zooming: none;\n  -ms-touch-action: manipulation;\n  touch-action: manipulation;\n  word-wrap: break-word;\n  -webkit-text-size-adjust: none;\n  -ms-text-size-adjust: none;\n  text-size-adjust: none; }\n\nion-app,\nion-nav,\nion-tab,\nion-tabs,\n.app-root {\n  position: absolute;\n  top: 0;\n  left: 0;\n  z-index: 0;\n  display: block;\n  overflow: hidden;\n  width: 100%;\n  height: 100%; }\n\nion-tab scroll-cotent {\n  display: none; }\n\nion-tab {\n  -webkit-transform: translateY(-200%);\n  transform: translateY(-200%); }\n\nion-tab.show-tab {\n  -webkit-transform: translateY(0);\n  transform: translateY(0); }\n\nion-tab.show-tab scroll-cotent {\n  display: block; }\n\nion-page {\n  position: absolute;\n  top: 0;\n  left: 0;\n  display: block;\n  width: 100%;\n  height: 100%;\n  opacity: 0; }\n\nion-content {\n  position: relative;\n  top: 0;\n  left: 0;\n  display: block;\n  width: 100%;\n  height: 100%; }\n\nion-page > ion-content {\n  position: absolute; }\n\nion-page scroll-content {\n  display: none; }\n\nion-page.show-page {\n  opacity: 1; }\n\nion-page.show-page scroll-content {\n  display: block; }\n\nion-header {\n  position: absolute;\n  top: 0;\n  left: 0;\n  z-index: 10;\n  display: block;\n  width: 100%; }\n\nion-toolbar {\n  position: relative;\n  z-index: 10; }\n\nion-footer {\n  position: absolute;\n  bottom: 0;\n  left: 0;\n  z-index: 10;\n  display: block;\n  width: 100%; }\n\nion-tabbar {\n  position: absolute;\n  bottom: 0;\n  left: 0;\n  z-index: 10;\n  display: -webkit-box;\n  display: -webkit-flex;\n  display: -ms-flexbox;\n  display: flex;\n  width: 100%;\n  opacity: 0; }\n\nion-tabbar.show-tabbar {\n  opacity: 1; }\n\n[tabsPlacement=top] > ion-tabbar {\n  top: 0;\n  bottom: auto; }\n\nscroll-content {\n  position: absolute;\n  top: 0;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  z-index: 1;\n  display: block;\n  overflow-x: hidden;\n  overflow-y: scroll;\n  -webkit-overflow-scrolling: touch;\n  will-change: scroll-position; }\n\nion-content.js-scroll > scroll-content {\n  position: relative;\n  min-height: 100%;\n  overflow-x: initial;\n  overflow-y: initial;\n  -webkit-overflow-scrolling: auto;\n  will-change: initial; }\n\n.disable-scroll ion-page scroll-content {\n  overflow-y: hidden;\n  overflow-x: hidden; }\n\n[nav-viewport],\n[nav-portal],\n[tab-portal],\n.nav-decor {\n  display: none; }\n\n.hide,\n[hidden],\ntemplate {\n  display: none !important; }\n\n.sticky {\n  position: -webkit-sticky;\n  position: sticky;\n  top: 0; }\n\n:focus,\n:active {\n  outline: none; }\n\n.focus-outline :focus {\n  outline: thin dotted;\n  outline-offset: -1px; }\n\n.focus-outline button:focus,\n.focus-outline [button]:focus {\n  border-color: #51a7e8;\n  outline: thin solid #51a7e8;\n  box-shadow: 0 0 8px 0 #51a7e8; }\n\n.focus-outline ion-input :focus {\n  outline: none; }\n\nfocus-ctrl {\n  position: fixed; }\n  focus-ctrl input,\n  focus-ctrl button {\n    position: fixed;\n    top: 1px;\n    left: -9999px;\n    z-index: 9999;\n    width: 9px;\n    pointer-events: none; }\n\nclick-block {\n  position: absolute;\n  top: 0;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  z-index: 9999;\n  display: block;\n  opacity: 0;\n  -webkit-transform: translate3d(0, -100%, 0);\n  transform: translate3d(0, -100%, 0);\n  -webkit-transform: translate3d(0, calc(-100% + 1px), 0);\n  transform: translate3d(0, calc(-100% + 1px), 0); }\n\n.click-block-active {\n  -webkit-transform: translate3d(0, 0, 0);\n  transform: translate3d(0, 0, 0); }\n\nion-backdrop {\n  position: absolute;\n  top: 0;\n  left: 0;\n  z-index: 2;\n  display: block;\n  width: 100%;\n  height: 100%;\n  background-color: #000;\n  opacity: .01;\n  -webkit-transform: translateZ(0);\n  transform: translateZ(0); }\n\nion-backdrop.hide-backdrop {\n  display: none; }\n\nion-grid {\n  display: -webkit-box;\n  display: -webkit-flex;\n  display: -ms-flexbox;\n  display: flex;\n  -webkit-box-orient: vertical;\n  -webkit-box-direction: normal;\n  -webkit-flex-direction: column;\n  -ms-flex-direction: column;\n  flex-direction: column;\n  padding: 5px;\n  width: 100%; }\n\nion-row {\n  display: -webkit-box;\n  display: -webkit-flex;\n  display: -ms-flexbox;\n  display: flex;\n  width: 100%; }\n  ion-row[wrap] {\n    -webkit-flex-wrap: wrap;\n    -ms-flex-wrap: wrap;\n    flex-wrap: wrap; }\n  ion-row[top] {\n    -webkit-box-align: start;\n    -webkit-align-items: flex-start;\n    -ms-flex-align: start;\n    align-items: flex-start; }\n  ion-row[bottom] {\n    -webkit-box-align: end;\n    -webkit-align-items: flex-end;\n    -ms-flex-align: end;\n    align-items: flex-end; }\n  ion-row[center] {\n    -webkit-box-align: center;\n    -webkit-align-items: center;\n    -ms-flex-align: center;\n    align-items: center; }\n  ion-row[stretch] {\n    -webkit-box-align: stretch;\n    -webkit-align-items: stretch;\n    -ms-flex-align: stretch;\n    align-items: stretch; }\n  ion-row[baseline] {\n    -webkit-box-align: baseline;\n    -webkit-align-items: baseline;\n    -ms-flex-align: baseline;\n    align-items: baseline; }\n\nion-col {\n  display: block;\n  -webkit-box-flex: 1;\n  -webkit-flex: 1;\n  -ms-flex: 1;\n  flex: 1;\n  padding: 5px;\n  width: 100%; }\n  ion-col[top] {\n    -webkit-align-self: flex-start;\n    -ms-flex-item-align: start;\n    align-self: flex-start; }\n  ion-col[bottom] {\n    -webkit-align-self: flex-end;\n    -ms-flex-item-align: end;\n    align-self: flex-end; }\n  ion-col[center] {\n    -webkit-align-self: center;\n    -ms-flex-item-align: center;\n    align-self: center; }\n  ion-col[stretch] {\n    -webkit-align-self: stretch;\n    -ms-flex-item-align: stretch;\n    align-self: stretch; }\n  ion-col[baseline] {\n    -webkit-align-self: baseline;\n    -ms-flex-item-align: baseline;\n    align-self: baseline; }\n  ion-col[offset-10] {\n    margin-left: 10%; }\n  ion-col[offset-20] {\n    margin-left: 20%; }\n  ion-col[offset-25] {\n    margin-left: 25%; }\n  ion-col[offset-33], ion-col[offset-34] {\n    margin-left: 33.3333%; }\n  ion-col[offset-50] {\n    margin-left: 50%; }\n  ion-col[offset-66], ion-col[offset-67] {\n    margin-left: 66.6666%; }\n  ion-col[offset-75] {\n    margin-left: 75%; }\n  ion-col[offset-80] {\n    margin-left: 80%; }\n  ion-col[offset-90] {\n    margin-left: 90%; }\n  ion-col[width-10] {\n    -webkit-box-flex: 0;\n    -webkit-flex: 0 0 10%;\n    -ms-flex: 0 0 10%;\n    flex: 0 0 10%;\n    max-width: 10%; }\n  ion-col[width-20] {\n    -webkit-box-flex: 0;\n    -webkit-flex: 0 0 20%;\n    -ms-flex: 0 0 20%;\n    flex: 0 0 20%;\n    max-width: 20%; }\n  ion-col[width-25] {\n    -webkit-box-flex: 0;\n    -webkit-flex: 0 0 25%;\n    -ms-flex: 0 0 25%;\n    flex: 0 0 25%;\n    max-width: 25%; }\n  ion-col[width-33], ion-col[width-34] {\n    -webkit-box-flex: 0;\n    -webkit-flex: 0 0 33.3333%;\n    -ms-flex: 0 0 33.3333%;\n    flex: 0 0 33.3333%;\n    max-width: 33.3333%; }\n  ion-col[width-50] {\n    -webkit-box-flex: 0;\n    -webkit-flex: 0 0 50%;\n    -ms-flex: 0 0 50%;\n    flex: 0 0 50%;\n    max-width: 50%; }\n  ion-col[width-66], ion-col[width-67] {\n    -webkit-box-flex: 0;\n    -webkit-flex: 0 0 66.6666%;\n    -ms-flex: 0 0 66.6666%;\n    flex: 0 0 66.6666%;\n    max-width: 66.6666%; }\n  ion-col[width-75] {\n    -webkit-box-flex: 0;\n    -webkit-flex: 0 0 75%;\n    -ms-flex: 0 0 75%;\n    flex: 0 0 75%;\n    max-width: 75%; }\n  ion-col[width-80] {\n    -webkit-box-flex: 0;\n    -webkit-flex: 0 0 80%;\n    -ms-flex: 0 0 80%;\n    flex: 0 0 80%;\n    max-width: 80%; }\n  ion-col[width-90] {\n    -webkit-box-flex: 0;\n    -webkit-flex: 0 0 90%;\n    -ms-flex: 0 0 90%;\n    flex: 0 0 90%;\n    max-width: 90%; }\n\n@media (max-width: 567px) {\n  [responsive-sm] {\n    -webkit-box-orient: vertical;\n    -webkit-box-direction: normal;\n    -webkit-flex-direction: column;\n    -ms-flex-direction: column;\n    flex-direction: column; }\n    [responsive-sm] ion-col[width-10], [responsive-sm] ion-col[width-20], [responsive-sm] ion-col[width-25], [responsive-sm] ion-col[width-33], [responsive-sm] ion-col[width-34], [responsive-sm] ion-col[width-50], [responsive-sm] ion-col[width-66], [responsive-sm] ion-col[width-67], [responsive-sm] ion-col[width-75], [responsive-sm] ion-col[width-80], [responsive-sm] ion-col[width-90] {\n      -webkit-box-flex: 1;\n      -webkit-flex: 1;\n      -ms-flex: 1;\n      flex: 1;\n      margin-bottom: 15px;\n      margin-left: 0;\n      width: 100%;\n      max-width: 100%; } }\n\n@media (max-width: 767px) {\n  [responsive-md] {\n    -webkit-box-orient: vertical;\n    -webkit-box-direction: normal;\n    -webkit-flex-direction: column;\n    -ms-flex-direction: column;\n    flex-direction: column; }\n    [responsive-md] ion-col[width-10], [responsive-md] ion-col[width-20], [responsive-md] ion-col[width-25], [responsive-md] ion-col[width-33], [responsive-md] ion-col[width-34], [responsive-md] ion-col[width-50], [responsive-md] ion-col[width-66], [responsive-md] ion-col[width-67], [responsive-md] ion-col[width-75], [responsive-md] ion-col[width-80], [responsive-md] ion-col[width-90] {\n      -webkit-box-flex: 1;\n      -webkit-flex: 1;\n      -ms-flex: 1;\n      flex: 1;\n      margin-bottom: 15px;\n      margin-left: 0;\n      width: 100%;\n      max-width: 100%; } }\n\n@media (max-width: 1023px) {\n  [responsive-lg] {\n    -webkit-box-orient: vertical;\n    -webkit-box-direction: normal;\n    -webkit-flex-direction: column;\n    -ms-flex-direction: column;\n    flex-direction: column; }\n    [responsive-lg] ion-col[width-10], [responsive-lg] ion-col[width-20], [responsive-lg] ion-col[width-25], [responsive-lg] ion-col[width-33], [responsive-lg] ion-col[width-34], [responsive-lg] ion-col[width-50], [responsive-lg] ion-col[width-66], [responsive-lg] ion-col[width-67], [responsive-lg] ion-col[width-75], [responsive-lg] ion-col[width-80], [responsive-lg] ion-col[width-90] {\n      -webkit-box-flex: 1;\n      -webkit-flex: 1;\n      -ms-flex: 1;\n      flex: 1;\n      margin-bottom: 15px;\n      margin-left: 0;\n      width: 100%;\n      max-width: 100%; } }\n\nion-icon {\n  display: inline-block;\n  font-size: 1.2em; }\n\nion-icon[small] {\n  min-height: 1.1em;\n  font-size: 1.1em; }\n\nion-img {\n  position: relative;\n  display: -webkit-box;\n  display: -webkit-flex;\n  display: -ms-flexbox;\n  display: flex;\n  overflow: hidden;\n  -webkit-box-align: center;\n  -webkit-align-items: center;\n  -ms-flex-align: center;\n  align-items: center;\n  -webkit-box-pack: center;\n  -webkit-justify-content: center;\n  -ms-flex-pack: center;\n  justify-content: center; }\n\nion-img img {\n  -webkit-flex-shrink: 0;\n  -ms-flex-negative: 0;\n  flex-shrink: 0;\n  min-width: 100%;\n  min-height: 100%; }\n\nion-img .img-placeholder {\n  position: absolute;\n  top: 0;\n  left: 0;\n  width: 100%;\n  height: 100%;\n  background: #eee;\n  -webkit-transition: opacity 200ms;\n  transition: opacity 200ms; }\n\nion-img.img-loaded .img-placeholder {\n  opacity: 0; }\n\nion-infinite-scroll {\n  display: block;\n  width: 100%; }\n\nion-infinite-scroll-content {\n  display: -webkit-box;\n  display: -webkit-flex;\n  display: -ms-flexbox;\n  display: flex;\n  -webkit-box-orient: vertical;\n  -webkit-box-direction: normal;\n  -webkit-flex-direction: column;\n  -ms-flex-direction: column;\n  flex-direction: column;\n  -webkit-box-pack: center;\n  -webkit-justify-content: center;\n  -ms-flex-pack: center;\n  justify-content: center;\n  height: 100%;\n  min-height: 84px;\n  text-align: center; }\n\n.infinite-loading {\n  display: none;\n  margin: 0 0 32px 0;\n  width: 100%; }\n\n.infinite-loading-text {\n  margin: 4px 32px 0 32px;\n  color: #666; }\n\nion-infinite-scroll-content[state=loading] .infinite-loading {\n  display: block; }\n\nion-infinite-scroll-content[state=disabled] {\n  display: none; }\n\nion-loading {\n  position: absolute;\n  top: 0;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  z-index: 1000;\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  -webkit-box-pack: center;\n  -webkit-justify-content: center;\n  -ms-flex-pack: center;\n  justify-content: center; }\n\n.loading-wrapper {\n  z-index: 10;\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  opacity: 0; }\n\nion-menu {\n  position: absolute;\n  top: 0;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  display: none; }\n  ion-menu.show-menu {\n    display: block; }\n\n.menu-inner {\n  position: absolute;\n  top: 0;\n  right: auto;\n  bottom: 0;\n  left: 0;\n  display: -webkit-box;\n  display: -webkit-flex;\n  display: -ms-flexbox;\n  display: flex;\n  -webkit-box-orient: vertical;\n  -webkit-box-direction: normal;\n  -webkit-flex-direction: column;\n  -ms-flex-direction: column;\n  flex-direction: column;\n  width: 304px;\n  -webkit-transform: translate3d(-9999px, 0, 0);\n  transform: translate3d(-9999px, 0, 0); }\n\n.menu-inner > ion-header,\n.menu-inner > ion-content,\n.menu-inner > ion-footer {\n  position: relative; }\n\nion-menu[side=right] > .menu-inner {\n  right: 0;\n  left: auto; }\n\nion-menu ion-backdrop {\n  z-index: -1;\n  display: none;\n  opacity: .1; }\n\n.menu-content {\n  -webkit-transform: translate3d(0, 0, 0);\n  transform: translate3d(0, 0, 0); }\n\n.menu-content-open ion-pane,\n.menu-content-open ion-content,\n.menu-content-open .toolbar {\n  pointer-events: none; }\n\n@media (max-width: 340px) {\n  .menu-inner {\n    width: 264px; } }\n\nion-menu[type=reveal] {\n  z-index: 0; }\n\nion-menu[type=reveal].show-menu .menu-inner {\n  -webkit-transform: translate3d(0, 0, 0);\n  transform: translate3d(0, 0, 0); }\n\nion-menu[type=overlay] {\n  z-index: 80; }\n  ion-menu[type=overlay] .show-backdrop {\n    display: block; }\n\nion-modal {\n  position: absolute;\n  top: 0;\n  left: 0;\n  display: block;\n  width: 100%;\n  height: 100%; }\n  @media not all and (min-width: 768px) and (min-height: 600px) {\n    ion-modal ion-backdrop {\n      visibility: hidden; } }\n\n.modal-wrapper {\n  z-index: 10;\n  height: 100%; }\n  @media only screen and (min-width: 768px) and (min-height: 600px) {\n    .modal-wrapper {\n      position: absolute;\n      top: calc(50% - (500px/2));\n      left: calc(50% - (600px/2));\n      width: 600px;\n      height: 500px; } }\n  @media only screen and (min-width: 768px) and (min-height: 768px) {\n    .modal-wrapper {\n      position: absolute;\n      top: calc(50% - (600px/2));\n      left: calc(50% - (600px/2));\n      width: 600px;\n      height: 600px; } }\n\nion-modal-inner {\n  position: absolute;\n  top: 0;\n  left: 0;\n  display: -webkit-box;\n  display: -webkit-flex;\n  display: -ms-flexbox;\n  display: flex;\n  -webkit-box-orient: vertical;\n  -webkit-box-direction: normal;\n  -webkit-flex-direction: column;\n  -ms-flex-direction: column;\n  flex-direction: column;\n  width: 100%;\n  height: 100%; }\n\n.item-range .item-inner {\n  overflow: visible; }\n\n.item-range .input-wrapper {\n  overflow: visible;\n  -webkit-box-orient: vertical;\n  -webkit-box-direction: normal;\n  -webkit-flex-direction: column;\n  -ms-flex-direction: column;\n  flex-direction: column; }\n\n.item-range ion-range {\n  width: 100%; }\n  .item-range ion-range ion-label {\n    -webkit-align-self: center;\n    -ms-flex-item-align: center;\n    align-self: center; }\n\nion-range {\n  position: relative;\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  ion-range ion-label {\n    -webkit-box-flex: initial;\n    -webkit-flex: initial;\n    -ms-flex: initial;\n    flex: initial; }\n  ion-range ion-icon {\n    min-height: 2.4rem;\n    font-size: 2.4rem;\n    line-height: 1; }\n\n.range-slider {\n  position: relative;\n  -webkit-box-flex: 1;\n  -webkit-flex: 1;\n  -ms-flex: 1;\n  flex: 1;\n  cursor: pointer; }\n\nion-refresher {\n  position: absolute;\n  top: 0;\n  left: 0;\n  z-index: 0;\n  display: none;\n  width: 100%;\n  height: 60px; }\n  ion-refresher.refresher-active {\n    display: block; }\n\n.has-refresher > scroll-content {\n  margin-top: -1px;\n  border-top: 1px solid #ddd;\n  -webkit-transition: all 320ms cubic-bezier(0.36, 0.66, 0.04, 1);\n  transition: all 320ms cubic-bezier(0.36, 0.66, 0.04, 1); }\n\nion-refresher-content {\n  display: -webkit-box;\n  display: -webkit-flex;\n  display: -ms-flexbox;\n  display: flex;\n  -webkit-box-orient: vertical;\n  -webkit-box-direction: normal;\n  -webkit-flex-direction: column;\n  -ms-flex-direction: column;\n  flex-direction: column;\n  -webkit-box-pack: center;\n  -webkit-justify-content: center;\n  -ms-flex-pack: center;\n  justify-content: center;\n  height: 100%; }\n\n.refresher-pulling,\n.refresher-refreshing {\n  display: none;\n  width: 100%; }\n\n.refresher-pulling-icon,\n.refresher-refreshing-icon {\n  font-size: 30px;\n  text-align: center;\n  color: #000;\n  -webkit-transform-origin: center;\n  transform-origin: center;\n  -webkit-transition: 200ms;\n  transition: 200ms; }\n\n.refresher-pulling-text,\n.refresher-refreshing-text {\n  font-size: 16px;\n  text-align: center;\n  color: #000; }\n\nion-refresher-content[state=pulling] .refresher-pulling {\n  display: block; }\n\nion-refresher-content[state=ready] .refresher-pulling {\n  display: block; }\n\nion-refresher-content[state=ready] .refresher-pulling-icon {\n  -webkit-transform: rotate(180deg);\n  transform: rotate(180deg); }\n\nion-refresher-content[state=refreshing] .refresher-refreshing {\n  display: block; }\n\nion-refresher-content[state=cancelling] .refresher-pulling {\n  display: block; }\n\nion-refresher-content[state=cancelling] .refresher-pulling-icon {\n  -webkit-transform: scale(0);\n  transform: scale(0); }\n\nion-refresher-content[state=completing] .refresher-refreshing {\n  display: block; }\n\nion-refresher-content[state=completing] .refresher-refreshing-icon {\n  -webkit-transform: scale(0);\n  transform: scale(0); }\n\nion-scroll {\n  position: relative;\n  display: block; }\n  ion-scroll.scroll-x scroll-content {\n    overflow-x: auto; }\n  ion-scroll.scroll-y scroll-content {\n    overflow-y: auto; }\n  ion-scroll[center] scroll-content {\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    -webkit-box-pack: center;\n    -webkit-justify-content: center;\n    -ms-flex-pack: center;\n    justify-content: center; }\n  ion-scroll scroll-content {\n    position: absolute;\n    top: 0;\n    right: 0;\n    bottom: 0;\n    left: 0;\n    overflow-y: hidden;\n    overflow-x: hidden;\n    -webkit-overflow-scrolling: touch;\n    will-change: scroll-position; }\n\n.hidden-show-when {\n  display: none !important; }\n\n.hidden-hide-when {\n  display: none !important; }\n\n/**\n * Swiper 3.1.2\n * Most modern mobile touch slider and framework with hardware accelerated transitions\n *\n * http://www.idangero.us/swiper/\n *\n * Copyright 2015, Vladimir Kharlampidi\n * The iDangero.us\n * http://www.idangero.us/\n *\n * Licensed under MIT\n *\n * Released on: August 22, 2015\n */\n.swiper-container {\n  margin: 0 auto;\n  position: relative;\n  overflow: hidden;\n  /* Fix of Webkit flickering */\n  z-index: 1; }\n\n.swiper-container-no-flexbox .swiper-slide {\n  float: left; }\n\n.swiper-container-vertical > .swiper-wrapper {\n  -webkit-box-orient: vertical;\n  -ms-flex-direction: column;\n  -webkit-flex-direction: column;\n  flex-direction: column; }\n\n.swiper-wrapper {\n  position: relative;\n  width: 100%;\n  height: 100%;\n  z-index: 1;\n  display: -webkit-box;\n  display: -ms-flexbox;\n  display: -webkit-flex;\n  display: flex;\n  -webkit-transition-property: -webkit-transform;\n  transition-property: transform;\n  box-sizing: content-box; }\n\n.swiper-container-android .swiper-slide,\n.swiper-wrapper {\n  -webkit-transform: translate3d(0px, 0, 0);\n  transform: translate3d(0px, 0, 0); }\n\n.swiper-container-multirow > .swiper-wrapper {\n  -webkit-box-lines: multiple;\n  -moz-box-lines: multiple;\n  -ms-flex-wrap: wrap;\n  -webkit-flex-wrap: wrap;\n  flex-wrap: wrap; }\n\n.swiper-container-free-mode > .swiper-wrapper {\n  -webkit-transition-timing-function: ease-out;\n  transition-timing-function: ease-out;\n  margin: 0 auto; }\n\n.swiper-slide {\n  -webkit-flex-shrink: 0;\n  -ms-flex: 0 0 auto;\n  -webkit-flex-shrink: 0;\n  -ms-flex-negative: 0;\n  flex-shrink: 0;\n  width: 100%;\n  height: 100%;\n  position: relative; }\n\n/* a11y */\n.swiper-container .swiper-notification {\n  position: absolute;\n  left: 0;\n  top: 0;\n  pointer-events: none;\n  opacity: 0;\n  z-index: -1000; }\n\n/* IE10 Windows Phone 8 Fixes */\n.swiper-wp8-horizontal {\n  -ms-touch-action: pan-y;\n  touch-action: pan-y; }\n\n.swiper-wp8-vertical {\n  -ms-touch-action: pan-x;\n  touch-action: pan-x; }\n\n/* Arrows */\n.swiper-button-prev,\n.swiper-button-next {\n  position: absolute;\n  top: 50%;\n  width: 27px;\n  height: 44px;\n  margin-top: -22px;\n  z-index: 10;\n  cursor: pointer;\n  background-size: 27px 44px;\n  background-position: center;\n  background-repeat: no-repeat; }\n\n.swiper-button-prev.swiper-button-disabled,\n.swiper-button-next.swiper-button-disabled {\n  opacity: .35;\n  cursor: auto;\n  pointer-events: none; }\n\n.swiper-button-prev,\n.swiper-container-rtl .swiper-button-next {\n  background-image: url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%2027%2044'%3E%3Cpath%20d%3D'M0%2C22L22%2C0l2.1%2C2.1L4.2%2C22l19.9%2C19.9L22%2C44L0%2C22L0%2C22L0%2C22z'%20fill%3D'%23007aff'%2F%3E%3C%2Fsvg%3E\");\n  left: 10px;\n  right: auto; }\n\n.swiper-button-prev.swiper-button-black,\n.swiper-container-rtl .swiper-button-next.swiper-button-black {\n  background-image: url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%2027%2044'%3E%3Cpath%20d%3D'M0%2C22L22%2C0l2.1%2C2.1L4.2%2C22l19.9%2C19.9L22%2C44L0%2C22L0%2C22L0%2C22z'%20fill%3D'%23000000'%2F%3E%3C%2Fsvg%3E\"); }\n\n.swiper-button-prev.swiper-button-white,\n.swiper-container-rtl .swiper-button-next.swiper-button-white {\n  background-image: url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%2027%2044'%3E%3Cpath%20d%3D'M0%2C22L22%2C0l2.1%2C2.1L4.2%2C22l19.9%2C19.9L22%2C44L0%2C22L0%2C22L0%2C22z'%20fill%3D'%23ffffff'%2F%3E%3C%2Fsvg%3E\"); }\n\n.swiper-button-next,\n.swiper-container-rtl .swiper-button-prev {\n  background-image: url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%2027%2044'%3E%3Cpath%20d%3D'M27%2C22L27%2C22L5%2C44l-2.1-2.1L22.8%2C22L2.9%2C2.1L5%2C0L27%2C22L27%2C22z'%20fill%3D'%23007aff'%2F%3E%3C%2Fsvg%3E\");\n  right: 10px;\n  left: auto; }\n\n.swiper-button-next.swiper-button-black,\n.swiper-container-rtl .swiper-button-prev.swiper-button-black {\n  background-image: url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%2027%2044'%3E%3Cpath%20d%3D'M27%2C22L27%2C22L5%2C44l-2.1-2.1L22.8%2C22L2.9%2C2.1L5%2C0L27%2C22L27%2C22z'%20fill%3D'%23000000'%2F%3E%3C%2Fsvg%3E\"); }\n\n.swiper-button-next.swiper-button-white,\n.swiper-container-rtl .swiper-button-prev.swiper-button-white {\n  background-image: url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%2027%2044'%3E%3Cpath%20d%3D'M27%2C22L27%2C22L5%2C44l-2.1-2.1L22.8%2C22L2.9%2C2.1L5%2C0L27%2C22L27%2C22z'%20fill%3D'%23ffffff'%2F%3E%3C%2Fsvg%3E\"); }\n\n/* Pagination Styles */\n.swiper-pagination {\n  position: absolute;\n  text-align: center;\n  -webkit-transition: 300ms;\n  transition: 300ms;\n  -webkit-transform: translate3d(0, 0, 0);\n  transform: translate3d(0, 0, 0);\n  z-index: 10; }\n\n.swiper-pagination.swiper-pagination-hidden {\n  opacity: 0; }\n\n.swiper-pagination-bullet {\n  width: 8px;\n  height: 8px;\n  display: inline-block;\n  border-radius: 100%;\n  background: #000;\n  opacity: .2; }\n\nbutton.swiper-pagination-bullet {\n  border: 0;\n  margin: 0;\n  padding: 0;\n  box-shadow: none;\n  -moz-appearance: none;\n  -ms-appearance: none;\n  -webkit-appearance: none;\n  appearance: none; }\n\n.swiper-pagination-clickable .swiper-pagination-bullet {\n  cursor: pointer; }\n\n.swiper-pagination-white .swiper-pagination-bullet {\n  background: #fff; }\n\n.swiper-pagination-bullet-active {\n  opacity: 1; }\n\n.swiper-pagination-white .swiper-pagination-bullet-active {\n  background: #fff; }\n\n.swiper-pagination-black .swiper-pagination-bullet-active {\n  background: #000; }\n\n.swiper-container-vertical > .swiper-pagination {\n  right: 10px;\n  top: 50%;\n  -webkit-transform: translate3d(0px, -50%, 0);\n  transform: translate3d(0px, -50%, 0); }\n\n.swiper-container-vertical > .swiper-pagination .swiper-pagination-bullet {\n  margin: 5px 0;\n  display: block; }\n\n.swiper-container-horizontal > .swiper-pagination {\n  bottom: 20px;\n  left: 0;\n  width: 100%; }\n\n.swiper-container-horizontal > .swiper-pagination .swiper-pagination-bullet {\n  margin: 0 5px; }\n\n/* 3D Container */\n.swiper-container-3d {\n  -webkit-perspective: 1200px;\n  -o-perspective: 1200px;\n  perspective: 1200px; }\n\n.swiper-container-3d .swiper-wrapper,\n.swiper-container-3d .swiper-slide,\n.swiper-container-3d .swiper-slide-shadow-left,\n.swiper-container-3d .swiper-slide-shadow-right,\n.swiper-container-3d .swiper-slide-shadow-top,\n.swiper-container-3d .swiper-slide-shadow-bottom,\n.swiper-container-3d .swiper-cube-shadow {\n  -webkit-transform-style: preserve-3d;\n  -ms-transform-style: preserve-3d;\n  transform-style: preserve-3d; }\n\n.swiper-container-3d .swiper-slide-shadow-left,\n.swiper-container-3d .swiper-slide-shadow-right,\n.swiper-container-3d .swiper-slide-shadow-top,\n.swiper-container-3d .swiper-slide-shadow-bottom {\n  position: absolute;\n  left: 0;\n  bottom: 0;\n  width: 100%;\n  height: 100%;\n  pointer-events: none;\n  z-index: 10; }\n\n.swiper-container-3d .swiper-slide-shadow-left {\n  background-image: -webkit-gradient(linear, left top, right top, from(rgba(0, 0, 0, 0.5)), to(transparent));\n  /* Safari 4+, Chrome */\n  background-image: -webkit-linear-gradient(right, rgba(0, 0, 0, 0.5), transparent);\n  /* Chrome 10+, Safari 5.1+, iOS 5+ */\n  /* Firefox 3.6-15 */\n  /* Opera 11.10-12.00 */\n  background-image: linear-gradient(to left, rgba(0, 0, 0, 0.5), transparent);\n  /* Firefox 16+, IE10, Opera 12.50+ */ }\n\n.swiper-container-3d .swiper-slide-shadow-right {\n  background-image: -webkit-gradient(linear, right top, left top, from(rgba(0, 0, 0, 0.5)), to(transparent));\n  /* Safari 4+, Chrome */\n  background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, 0.5), transparent);\n  /* Chrome 10+, Safari 5.1+, iOS 5+ */\n  /* Firefox 3.6-15 */\n  /* Opera 11.10-12.00 */\n  background-image: linear-gradient(to right, rgba(0, 0, 0, 0.5), transparent);\n  /* Firefox 16+, IE10, Opera 12.50+ */ }\n\n.swiper-container-3d .swiper-slide-shadow-top {\n  background-image: -webkit-gradient(linear, left top, left bottom, from(rgba(0, 0, 0, 0.5)), to(transparent));\n  /* Safari 4+, Chrome */\n  background-image: -webkit-linear-gradient(bottom, rgba(0, 0, 0, 0.5), transparent);\n  /* Chrome 10+, Safari 5.1+, iOS 5+ */\n  /* Firefox 3.6-15 */\n  /* Opera 11.10-12.00 */\n  background-image: linear-gradient(to top, rgba(0, 0, 0, 0.5), transparent);\n  /* Firefox 16+, IE10, Opera 12.50+ */ }\n\n.swiper-container-3d .swiper-slide-shadow-bottom {\n  background-image: -webkit-gradient(linear, left bottom, left top, from(rgba(0, 0, 0, 0.5)), to(transparent));\n  /* Safari 4+, Chrome */\n  background-image: -webkit-linear-gradient(top, rgba(0, 0, 0, 0.5), transparent);\n  /* Chrome 10+, Safari 5.1+, iOS 5+ */\n  /* Firefox 3.6-15 */\n  /* Opera 11.10-12.00 */\n  background-image: linear-gradient(to bottom, rgba(0, 0, 0, 0.5), transparent);\n  /* Firefox 16+, IE10, Opera 12.50+ */ }\n\n/* Coverflow */\n.swiper-container-coverflow .swiper-wrapper {\n  /* Windows 8 IE 10 fix */\n  -ms-perspective: 1200px; }\n\n/* Fade */\n.swiper-container-fade.swiper-container-free-mode .swiper-slide {\n  -webkit-transition-timing-function: ease-out;\n  transition-timing-function: ease-out; }\n\n.swiper-container-fade .swiper-slide {\n  pointer-events: none; }\n\n.swiper-container-fade .swiper-slide .swiper-slide {\n  pointer-events: none; }\n\n.swiper-container-fade .swiper-slide-active,\n.swiper-container-fade .swiper-slide-active .swiper-slide-active {\n  pointer-events: auto; }\n\n/* Cube */\n.swiper-container-cube {\n  overflow: visible; }\n\n.swiper-container-cube .swiper-slide {\n  pointer-events: none;\n  visibility: hidden;\n  -webkit-transform-origin: 0 0;\n  transform-origin: 0 0;\n  -webkit-backface-visibility: hidden;\n  -ms-backface-visibility: hidden;\n  backface-visibility: hidden;\n  width: 100%;\n  height: 100%;\n  z-index: 1; }\n\n.swiper-container-cube.swiper-container-rtl .swiper-slide {\n  -webkit-transform-origin: 100% 0;\n  transform-origin: 100% 0; }\n\n.swiper-container-cube .swiper-slide-active,\n.swiper-container-cube .swiper-slide-next,\n.swiper-container-cube .swiper-slide-prev,\n.swiper-container-cube .swiper-slide-next + .swiper-slide {\n  pointer-events: auto;\n  visibility: visible; }\n\n.swiper-container-cube .swiper-slide-shadow-top,\n.swiper-container-cube .swiper-slide-shadow-bottom,\n.swiper-container-cube .swiper-slide-shadow-left,\n.swiper-container-cube .swiper-slide-shadow-right {\n  z-index: 0;\n  -webkit-backface-visibility: hidden;\n  -ms-backface-visibility: hidden;\n  backface-visibility: hidden; }\n\n.swiper-container-cube .swiper-cube-shadow {\n  position: absolute;\n  left: 0;\n  bottom: 0;\n  width: 100%;\n  height: 100%;\n  background: #000;\n  opacity: .6;\n  -webkit-filter: blur(50px);\n  filter: blur(50px);\n  z-index: 0; }\n\n/* Scrollbar */\n.swiper-scrollbar {\n  border-radius: 10px;\n  position: relative;\n  -ms-touch-action: none;\n  background: rgba(0, 0, 0, 0.1); }\n\n.swiper-container-horizontal > .swiper-scrollbar {\n  position: absolute;\n  left: 1%;\n  bottom: 3px;\n  z-index: 50;\n  height: 5px;\n  width: 98%; }\n\n.swiper-container-vertical > .swiper-scrollbar {\n  position: absolute;\n  right: 3px;\n  top: 1%;\n  z-index: 50;\n  width: 5px;\n  height: 98%; }\n\n.swiper-scrollbar-drag {\n  height: 100%;\n  width: 100%;\n  position: relative;\n  background: rgba(0, 0, 0, 0.5);\n  border-radius: 10px;\n  left: 0;\n  top: 0; }\n\n.swiper-scrollbar-cursor-drag {\n  cursor: move; }\n\n/* Preloader */\n.swiper-lazy-preloader {\n  width: 42px;\n  height: 42px;\n  position: absolute;\n  left: 50%;\n  top: 50%;\n  margin-left: -21px;\n  margin-top: -21px;\n  z-index: 10;\n  -webkit-transform-origin: 50%;\n  transform-origin: 50%;\n  -webkit-animation: swiper-preloader-spin 1s steps(12, end) infinite;\n  animation: swiper-preloader-spin 1s steps(12, end) infinite; }\n\n.swiper-lazy-preloader:after {\n  display: block;\n  content: \"\";\n  width: 100%;\n  height: 100%;\n  background-image: url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20viewBox%3D'0%200%20120%20120'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20xmlns%3Axlink%3D'http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink'%3E%3Cdefs%3E%3Cline%20id%3D'l'%20x1%3D'60'%20x2%3D'60'%20y1%3D'7'%20y2%3D'27'%20stroke%3D'%236c6c6c'%20stroke-width%3D'11'%20stroke-linecap%3D'round'%2F%3E%3C%2Fdefs%3E%3Cg%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(30%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(60%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(90%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(120%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(150%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.37'%20transform%3D'rotate(180%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.46'%20transform%3D'rotate(210%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.56'%20transform%3D'rotate(240%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.66'%20transform%3D'rotate(270%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.75'%20transform%3D'rotate(300%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.85'%20transform%3D'rotate(330%2060%2C60)'%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E\");\n  background-position: 50%;\n  background-size: 100%;\n  background-repeat: no-repeat; }\n\n.swiper-lazy-preloader-white:after {\n  background-image: url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20viewBox%3D'0%200%20120%20120'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20xmlns%3Axlink%3D'http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink'%3E%3Cdefs%3E%3Cline%20id%3D'l'%20x1%3D'60'%20x2%3D'60'%20y1%3D'7'%20y2%3D'27'%20stroke%3D'%23fff'%20stroke-width%3D'11'%20stroke-linecap%3D'round'%2F%3E%3C%2Fdefs%3E%3Cg%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(30%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(60%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(90%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(120%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(150%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.37'%20transform%3D'rotate(180%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.46'%20transform%3D'rotate(210%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.56'%20transform%3D'rotate(240%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.66'%20transform%3D'rotate(270%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.75'%20transform%3D'rotate(300%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.85'%20transform%3D'rotate(330%2060%2C60)'%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E\"); }\n\n@-webkit-keyframes swiper-preloader-spin {\n  100% {\n    -webkit-transform: rotate(360deg); } }\n\n@keyframes swiper-preloader-spin {\n  100% {\n    -webkit-transform: rotate(360deg);\n    transform: rotate(360deg); } }\n\nion-slides {\n  width: 100%;\n  height: 100%;\n  display: block; }\n\n.slide-zoom {\n  display: block;\n  width: 100%;\n  text-align: center; }\n\n.swiper-container {\n  width: 100%;\n  height: 100%;\n  padding: 0;\n  display: -webkit-box;\n  display: -webkit-flex;\n  display: -ms-flexbox;\n  display: flex;\n  overflow: hidden; }\n\n.swiper-wrapper {\n  width: 100%;\n  height: 100%;\n  padding: 0;\n  display: -webkit-box;\n  display: -webkit-flex;\n  display: -ms-flexbox;\n  display: flex; }\n\n.swiper-slide {\n  width: 100%;\n  height: 100%;\n  box-sizing: border-box;\n  text-align: center;\n  font-size: 18px;\n  /* Center slide text vertically */\n  display: -webkit-box;\n  display: -webkit-flex;\n  display: -ms-flexbox;\n  display: flex;\n  -webkit-box-pack: center;\n  -webkit-justify-content: center;\n  -ms-flex-pack: center;\n  justify-content: center;\n  -webkit-box-align: center;\n  -webkit-align-items: center;\n  -ms-flex-align: center;\n  align-items: center; }\n  .swiper-slide img {\n    width: auto;\n    height: auto;\n    max-width: 100%;\n    max-height: 100%; }\n\nion-spinner {\n  position: relative;\n  display: inline-block;\n  width: 28px;\n  height: 28px; }\n\nion-spinner svg {\n  position: absolute;\n  top: 0;\n  left: 0;\n  width: 100%;\n  height: 100%;\n  -webkit-transform: translateZ(0);\n  transform: translateZ(0); }\n\nion-spinner.spinner-paused svg {\n  -webkit-animation-play-state: paused;\n  animation-play-state: paused; }\n\n.spinner-ios line,\n.spinner-ios-small line {\n  stroke: #69717d;\n  stroke-width: 4px;\n  stroke-linecap: round; }\n\n.spinner-ios svg,\n.spinner-ios-small svg {\n  -webkit-animation: spinner-fade-out 1s linear infinite;\n  animation: spinner-fade-out 1s linear infinite; }\n\n.spinner-bubbles circle {\n  fill: #000; }\n\n.spinner-bubbles svg {\n  -webkit-animation: spinner-scale-out 1s linear infinite;\n  animation: spinner-scale-out 1s linear infinite; }\n\n.spinner-circles circle {\n  fill: #69717d; }\n\n.spinner-circles svg {\n  -webkit-animation: spinner-fade-out 1s linear infinite;\n  animation: spinner-fade-out 1s linear infinite; }\n\n.spinner-crescent circle {\n  fill: transparent;\n  stroke: #000;\n  stroke-width: 4px;\n  stroke-dasharray: 128px;\n  stroke-dashoffset: 82px; }\n\n.spinner-crescent svg {\n  -webkit-animation: spinner-rotate 1s linear infinite;\n  animation: spinner-rotate 1s linear infinite; }\n\n.spinner-dots circle {\n  fill: #444;\n  stroke-width: 0; }\n\n.spinner-dots svg {\n  -webkit-transform-origin: center;\n  transform-origin: center;\n  -webkit-animation: spinner-dots 1s linear infinite;\n  animation: spinner-dots 1s linear infinite; }\n\n@-webkit-keyframes spinner-fade-out {\n  0% {\n    opacity: 1; }\n  100% {\n    opacity: 0; } }\n\n@keyframes spinner-fade-out {\n  0% {\n    opacity: 1; }\n  100% {\n    opacity: 0; } }\n\n@-webkit-keyframes spinner-scale-out {\n  0% {\n    -webkit-transform: scale(1, 1);\n    transform: scale(1, 1); }\n  100% {\n    -webkit-transform: scale(0, 0);\n    transform: scale(0, 0); } }\n\n@keyframes spinner-scale-out {\n  0% {\n    -webkit-transform: scale(1, 1);\n    transform: scale(1, 1); }\n  100% {\n    -webkit-transform: scale(0, 0);\n    transform: scale(0, 0); } }\n\n@-webkit-keyframes spinner-rotate {\n  0% {\n    -webkit-transform: rotate(0deg);\n    transform: rotate(0deg); }\n  100% {\n    -webkit-transform: rotate(360deg);\n    transform: rotate(360deg); } }\n\n@keyframes spinner-rotate {\n  0% {\n    -webkit-transform: rotate(0deg);\n    transform: rotate(0deg); }\n  100% {\n    -webkit-transform: rotate(360deg);\n    transform: rotate(360deg); } }\n\n@-webkit-keyframes spinner-dots {\n  0% {\n    opacity: .9;\n    -webkit-transform: scale(1, 1);\n    transform: scale(1, 1); }\n  50% {\n    opacity: .3;\n    -webkit-transform: scale(0.4, 0.4);\n    transform: scale(0.4, 0.4); }\n  100% {\n    opacity: .9;\n    -webkit-transform: scale(1, 1);\n    transform: scale(1, 1); } }\n\n@keyframes spinner-dots {\n  0% {\n    opacity: .9;\n    -webkit-transform: scale(1, 1);\n    transform: scale(1, 1); }\n  50% {\n    opacity: .3;\n    -webkit-transform: scale(0.4, 0.4);\n    transform: scale(0.4, 0.4); }\n  100% {\n    opacity: .9;\n    -webkit-transform: scale(1, 1);\n    transform: scale(1, 1); } }\n\nhtml {\n  font-size: 62.5%; }\n\na {\n  background-color: transparent; }\n\n.enable-hover a:hover {\n  opacity: .7; }\n\nh1,\nh2,\nh3,\nh4,\nh5,\nh6 {\n  margin-top: 1.6rem;\n  margin-bottom: 1rem;\n  font-weight: 500;\n  line-height: 1.2; }\n\n[padding] h1:first-child,\n[padding] h2:first-child,\n[padding] h3:first-child,\n[padding] h4:first-child,\n[padding] h5:first-child,\n[padding] h6:first-child {\n  margin-top: -.3rem; }\n\nh1 + h2,\nh1 + h3,\nh2 + h3 {\n  margin-top: -.3rem; }\n\nh1 {\n  margin-top: 2rem;\n  font-size: 2.6rem; }\n\nh2 {\n  margin-top: 1.8rem;\n  font-size: 2.4rem; }\n\nh3 {\n  font-size: 2.2rem; }\n\nh4 {\n  font-size: 2rem; }\n\nh5 {\n  font-size: 1.8rem; }\n\nh6 {\n  font-size: 1.6rem; }\n\nsmall {\n  font-size: 75%; }\n\nsub,\nsup {\n  position: relative;\n  font-size: 75%;\n  line-height: 0;\n  vertical-align: baseline; }\n\nsup {\n  top: -.5em; }\n\nsub {\n  bottom: -.25em; }\n\n[text-left] {\n  text-align: left; }\n\n[text-center] {\n  text-align: center; }\n\n[text-right] {\n  text-align: right; }\n\n[text-justify] {\n  text-align: justify; }\n\n[text-nowrap] {\n  white-space: nowrap; }\n\n[text-uppercase] {\n  text-transform: uppercase; }\n\n[text-lowercase] {\n  text-transform: lowercase; }\n\n[text-capitalize] {\n  text-transform: capitalize; }\n\n.virtual-scroll {\n  position: relative; }\n\n.virtual-scroll .virtual-position,\n.virtual-scroll .virtual-position.item {\n  position: absolute;\n  top: 0;\n  left: 0;\n  -webkit-transition-duration: 0ms;\n  transition-duration: 0ms; }\n\n.virtual-scroll .virtual-hidden {\n  display: none; }\n\n.ion-ios-add:before {\n  content: \"\\f102\"; }\n\n.ion-ios-add-circle:before {\n  content: \"\\f101\"; }\n\n.ion-ios-add-circle-outline:before {\n  content: \"\\f100\"; }\n\n.ion-ios-add-outline:before {\n  content: \"\\f102\"; }\n\n.ion-ios-alarm:before {\n  content: \"\\f3c8\"; }\n\n.ion-ios-alarm-outline:before {\n  content: \"\\f3c7\"; }\n\n.ion-ios-albums:before {\n  content: \"\\f3ca\"; }\n\n.ion-ios-albums-outline:before {\n  content: \"\\f3c9\"; }\n\n.ion-ios-alert:before {\n  content: \"\\f104\"; }\n\n.ion-ios-alert-outline:before {\n  content: \"\\f103\"; }\n\n.ion-ios-american-football:before {\n  content: \"\\f106\"; }\n\n.ion-ios-american-football-outline:before {\n  content: \"\\f105\"; }\n\n.ion-ios-analytics:before {\n  content: \"\\f3ce\"; }\n\n.ion-ios-analytics-outline:before {\n  content: \"\\f3cd\"; }\n\n.ion-ios-aperture:before {\n  content: \"\\f108\"; }\n\n.ion-ios-aperture-outline:before {\n  content: \"\\f107\"; }\n\n.ion-ios-apps:before {\n  content: \"\\f10a\"; }\n\n.ion-ios-apps-outline:before {\n  content: \"\\f109\"; }\n\n.ion-ios-appstore:before {\n  content: \"\\f10c\"; }\n\n.ion-ios-appstore-outline:before {\n  content: \"\\f10b\"; }\n\n.ion-ios-archive:before {\n  content: \"\\f10e\"; }\n\n.ion-ios-archive-outline:before {\n  content: \"\\f10d\"; }\n\n.ion-ios-arrow-back:before {\n  content: \"\\f3cf\"; }\n\n.ion-ios-arrow-back-outline:before {\n  content: \"\\f3cf\"; }\n\n.ion-ios-arrow-down:before {\n  content: \"\\f3d0\"; }\n\n.ion-ios-arrow-down-outline:before {\n  content: \"\\f3d0\"; }\n\n.ion-ios-arrow-dropdown:before {\n  content: \"\\f110\"; }\n\n.ion-ios-arrow-dropdown-circle:before {\n  content: \"\\f10f\"; }\n\n.ion-ios-arrow-dropdown-circle-outline:before {\n  content: \"\\f10f\"; }\n\n.ion-ios-arrow-dropdown-outline:before {\n  content: \"\\f110\"; }\n\n.ion-ios-arrow-dropleft:before {\n  content: \"\\f112\"; }\n\n.ion-ios-arrow-dropleft-circle:before {\n  content: \"\\f111\"; }\n\n.ion-ios-arrow-dropleft-circle-outline:before {\n  content: \"\\f111\"; }\n\n.ion-ios-arrow-dropleft-outline:before {\n  content: \"\\f112\"; }\n\n.ion-ios-arrow-dropright:before {\n  content: \"\\f114\"; }\n\n.ion-ios-arrow-dropright-circle:before {\n  content: \"\\f113\"; }\n\n.ion-ios-arrow-dropright-circle-outline:before {\n  content: \"\\f113\"; }\n\n.ion-ios-arrow-dropright-outline:before {\n  content: \"\\f114\"; }\n\n.ion-ios-arrow-dropup:before {\n  content: \"\\f116\"; }\n\n.ion-ios-arrow-dropup-circle:before {\n  content: \"\\f115\"; }\n\n.ion-ios-arrow-dropup-circle-outline:before {\n  content: \"\\f115\"; }\n\n.ion-ios-arrow-dropup-outline:before {\n  content: \"\\f116\"; }\n\n.ion-ios-arrow-forward:before {\n  content: \"\\f3d1\"; }\n\n.ion-ios-arrow-forward-outline:before {\n  content: \"\\f3d1\"; }\n\n.ion-ios-arrow-round-back:before {\n  content: \"\\f117\"; }\n\n.ion-ios-arrow-round-back-outline:before {\n  content: \"\\f117\"; }\n\n.ion-ios-arrow-round-down:before {\n  content: \"\\f118\"; }\n\n.ion-ios-arrow-round-down-outline:before {\n  content: \"\\f118\"; }\n\n.ion-ios-arrow-round-forward:before {\n  content: \"\\f119\"; }\n\n.ion-ios-arrow-round-forward-outline:before {\n  content: \"\\f119\"; }\n\n.ion-ios-arrow-round-up:before {\n  content: \"\\f11a\"; }\n\n.ion-ios-arrow-round-up-outline:before {\n  content: \"\\f11a\"; }\n\n.ion-ios-arrow-up:before {\n  content: \"\\f3d8\"; }\n\n.ion-ios-arrow-up-outline:before {\n  content: \"\\f3d8\"; }\n\n.ion-ios-at:before {\n  content: \"\\f3da\"; }\n\n.ion-ios-at-outline:before {\n  content: \"\\f3d9\"; }\n\n.ion-ios-attach:before {\n  content: \"\\f11b\"; }\n\n.ion-ios-attach-outline:before {\n  content: \"\\f11b\"; }\n\n.ion-ios-backspace:before {\n  content: \"\\f11d\"; }\n\n.ion-ios-backspace-outline:before {\n  content: \"\\f11c\"; }\n\n.ion-ios-barcode:before {\n  content: \"\\f3dc\"; }\n\n.ion-ios-barcode-outline:before {\n  content: \"\\f3db\"; }\n\n.ion-ios-baseball:before {\n  content: \"\\f3de\"; }\n\n.ion-ios-baseball-outline:before {\n  content: \"\\f3dd\"; }\n\n.ion-ios-basket:before {\n  content: \"\\f11f\"; }\n\n.ion-ios-basket-outline:before {\n  content: \"\\f11e\"; }\n\n.ion-ios-basketball:before {\n  content: \"\\f3e0\"; }\n\n.ion-ios-basketball-outline:before {\n  content: \"\\f3df\"; }\n\n.ion-ios-battery-charging:before {\n  content: \"\\f120\"; }\n\n.ion-ios-battery-charging-outline:before {\n  content: \"\\f120\"; }\n\n.ion-ios-battery-dead:before {\n  content: \"\\f121\"; }\n\n.ion-ios-battery-dead-outline:before {\n  content: \"\\f121\"; }\n\n.ion-ios-battery-full:before {\n  content: \"\\f122\"; }\n\n.ion-ios-battery-full-outline:before {\n  content: \"\\f122\"; }\n\n.ion-ios-beaker:before {\n  content: \"\\f124\"; }\n\n.ion-ios-beaker-outline:before {\n  content: \"\\f123\"; }\n\n.ion-ios-beer:before {\n  content: \"\\f126\"; }\n\n.ion-ios-beer-outline:before {\n  content: \"\\f125\"; }\n\n.ion-ios-bicycle:before {\n  content: \"\\f127\"; }\n\n.ion-ios-bicycle-outline:before {\n  content: \"\\f127\"; }\n\n.ion-ios-bluetooth:before {\n  content: \"\\f128\"; }\n\n.ion-ios-bluetooth-outline:before {\n  content: \"\\f128\"; }\n\n.ion-ios-boat:before {\n  content: \"\\f12a\"; }\n\n.ion-ios-boat-outline:before {\n  content: \"\\f129\"; }\n\n.ion-ios-body:before {\n  content: \"\\f3e4\"; }\n\n.ion-ios-body-outline:before {\n  content: \"\\f3e3\"; }\n\n.ion-ios-bonfire:before {\n  content: \"\\f12c\"; }\n\n.ion-ios-bonfire-outline:before {\n  content: \"\\f12b\"; }\n\n.ion-ios-book:before {\n  content: \"\\f3e8\"; }\n\n.ion-ios-book-outline:before {\n  content: \"\\f3e7\"; }\n\n.ion-ios-bookmark:before {\n  content: \"\\f12e\"; }\n\n.ion-ios-bookmark-outline:before {\n  content: \"\\f12d\"; }\n\n.ion-ios-bookmarks:before {\n  content: \"\\f3ea\"; }\n\n.ion-ios-bookmarks-outline:before {\n  content: \"\\f3e9\"; }\n\n.ion-ios-bowtie:before {\n  content: \"\\f130\"; }\n\n.ion-ios-bowtie-outline:before {\n  content: \"\\f12f\"; }\n\n.ion-ios-briefcase:before {\n  content: \"\\f3ee\"; }\n\n.ion-ios-briefcase-outline:before {\n  content: \"\\f3ed\"; }\n\n.ion-ios-browsers:before {\n  content: \"\\f3f0\"; }\n\n.ion-ios-browsers-outline:before {\n  content: \"\\f3ef\"; }\n\n.ion-ios-brush:before {\n  content: \"\\f132\"; }\n\n.ion-ios-brush-outline:before {\n  content: \"\\f131\"; }\n\n.ion-ios-bug:before {\n  content: \"\\f134\"; }\n\n.ion-ios-bug-outline:before {\n  content: \"\\f133\"; }\n\n.ion-ios-build:before {\n  content: \"\\f136\"; }\n\n.ion-ios-build-outline:before {\n  content: \"\\f135\"; }\n\n.ion-ios-bulb:before {\n  content: \"\\f138\"; }\n\n.ion-ios-bulb-outline:before {\n  content: \"\\f137\"; }\n\n.ion-ios-bus:before {\n  content: \"\\f13a\"; }\n\n.ion-ios-bus-outline:before {\n  content: \"\\f139\"; }\n\n.ion-ios-cafe:before {\n  content: \"\\f13c\"; }\n\n.ion-ios-cafe-outline:before {\n  content: \"\\f13b\"; }\n\n.ion-ios-calculator:before {\n  content: \"\\f3f2\"; }\n\n.ion-ios-calculator-outline:before {\n  content: \"\\f3f1\"; }\n\n.ion-ios-calendar:before {\n  content: \"\\f3f4\"; }\n\n.ion-ios-calendar-outline:before {\n  content: \"\\f3f3\"; }\n\n.ion-ios-call:before {\n  content: \"\\f13e\"; }\n\n.ion-ios-call-outline:before {\n  content: \"\\f13d\"; }\n\n.ion-ios-camera:before {\n  content: \"\\f3f6\"; }\n\n.ion-ios-camera-outline:before {\n  content: \"\\f3f5\"; }\n\n.ion-ios-car:before {\n  content: \"\\f140\"; }\n\n.ion-ios-car-outline:before {\n  content: \"\\f13f\"; }\n\n.ion-ios-card:before {\n  content: \"\\f142\"; }\n\n.ion-ios-card-outline:before {\n  content: \"\\f141\"; }\n\n.ion-ios-cart:before {\n  content: \"\\f3f8\"; }\n\n.ion-ios-cart-outline:before {\n  content: \"\\f3f7\"; }\n\n.ion-ios-cash:before {\n  content: \"\\f144\"; }\n\n.ion-ios-cash-outline:before {\n  content: \"\\f143\"; }\n\n.ion-ios-chatboxes:before {\n  content: \"\\f3fa\"; }\n\n.ion-ios-chatboxes-outline:before {\n  content: \"\\f3f9\"; }\n\n.ion-ios-chatbubbles:before {\n  content: \"\\f146\"; }\n\n.ion-ios-chatbubbles-outline:before {\n  content: \"\\f145\"; }\n\n.ion-ios-checkbox:before {\n  content: \"\\f148\"; }\n\n.ion-ios-checkbox-outline:before {\n  content: \"\\f147\"; }\n\n.ion-ios-checkmark:before {\n  content: \"\\f3ff\"; }\n\n.ion-ios-checkmark-circle:before {\n  content: \"\\f14a\"; }\n\n.ion-ios-checkmark-circle-outline:before {\n  content: \"\\f149\"; }\n\n.ion-ios-checkmark-outline:before {\n  content: \"\\f3ff\"; }\n\n.ion-ios-clipboard:before {\n  content: \"\\f14c\"; }\n\n.ion-ios-clipboard-outline:before {\n  content: \"\\f14b\"; }\n\n.ion-ios-clock:before {\n  content: \"\\f403\"; }\n\n.ion-ios-clock-outline:before {\n  content: \"\\f402\"; }\n\n.ion-ios-close:before {\n  content: \"\\f406\"; }\n\n.ion-ios-close-circle:before {\n  content: \"\\f14e\"; }\n\n.ion-ios-close-circle-outline:before {\n  content: \"\\f14d\"; }\n\n.ion-ios-close-outline:before {\n  content: \"\\f406\"; }\n\n.ion-ios-closed-captioning:before {\n  content: \"\\f150\"; }\n\n.ion-ios-closed-captioning-outline:before {\n  content: \"\\f14f\"; }\n\n.ion-ios-cloud:before {\n  content: \"\\f40c\"; }\n\n.ion-ios-cloud-circle:before {\n  content: \"\\f152\"; }\n\n.ion-ios-cloud-circle-outline:before {\n  content: \"\\f151\"; }\n\n.ion-ios-cloud-done:before {\n  content: \"\\f154\"; }\n\n.ion-ios-cloud-done-outline:before {\n  content: \"\\f153\"; }\n\n.ion-ios-cloud-download:before {\n  content: \"\\f408\"; }\n\n.ion-ios-cloud-download-outline:before {\n  content: \"\\f407\"; }\n\n.ion-ios-cloud-outline:before {\n  content: \"\\f409\"; }\n\n.ion-ios-cloud-upload:before {\n  content: \"\\f40b\"; }\n\n.ion-ios-cloud-upload-outline:before {\n  content: \"\\f40a\"; }\n\n.ion-ios-cloudy:before {\n  content: \"\\f410\"; }\n\n.ion-ios-cloudy-night:before {\n  content: \"\\f40e\"; }\n\n.ion-ios-cloudy-night-outline:before {\n  content: \"\\f40d\"; }\n\n.ion-ios-cloudy-outline:before {\n  content: \"\\f40f\"; }\n\n.ion-ios-code:before {\n  content: \"\\f157\"; }\n\n.ion-ios-code-download:before {\n  content: \"\\f155\"; }\n\n.ion-ios-code-download-outline:before {\n  content: \"\\f155\"; }\n\n.ion-ios-code-outline:before {\n  content: \"\\f157\"; }\n\n.ion-ios-code-working:before {\n  content: \"\\f156\"; }\n\n.ion-ios-code-working-outline:before {\n  content: \"\\f156\"; }\n\n.ion-ios-cog:before {\n  content: \"\\f412\"; }\n\n.ion-ios-cog-outline:before {\n  content: \"\\f411\"; }\n\n.ion-ios-color-fill:before {\n  content: \"\\f159\"; }\n\n.ion-ios-color-fill-outline:before {\n  content: \"\\f158\"; }\n\n.ion-ios-color-filter:before {\n  content: \"\\f414\"; }\n\n.ion-ios-color-filter-outline:before {\n  content: \"\\f413\"; }\n\n.ion-ios-color-palette:before {\n  content: \"\\f15b\"; }\n\n.ion-ios-color-palette-outline:before {\n  content: \"\\f15a\"; }\n\n.ion-ios-color-wand:before {\n  content: \"\\f416\"; }\n\n.ion-ios-color-wand-outline:before {\n  content: \"\\f415\"; }\n\n.ion-ios-compass:before {\n  content: \"\\f15d\"; }\n\n.ion-ios-compass-outline:before {\n  content: \"\\f15c\"; }\n\n.ion-ios-construct:before {\n  content: \"\\f15f\"; }\n\n.ion-ios-construct-outline:before {\n  content: \"\\f15e\"; }\n\n.ion-ios-contact:before {\n  content: \"\\f41a\"; }\n\n.ion-ios-contact-outline:before {\n  content: \"\\f419\"; }\n\n.ion-ios-contacts:before {\n  content: \"\\f161\"; }\n\n.ion-ios-contacts-outline:before {\n  content: \"\\f160\"; }\n\n.ion-ios-contract:before {\n  content: \"\\f162\"; }\n\n.ion-ios-contract-outline:before {\n  content: \"\\f162\"; }\n\n.ion-ios-contrast:before {\n  content: \"\\f163\"; }\n\n.ion-ios-contrast-outline:before {\n  content: \"\\f163\"; }\n\n.ion-ios-copy:before {\n  content: \"\\f41c\"; }\n\n.ion-ios-copy-outline:before {\n  content: \"\\f41b\"; }\n\n.ion-ios-create:before {\n  content: \"\\f165\"; }\n\n.ion-ios-create-outline:before {\n  content: \"\\f164\"; }\n\n.ion-ios-crop:before {\n  content: \"\\f41e\"; }\n\n.ion-ios-crop-outline:before {\n  content: \"\\f166\"; }\n\n.ion-ios-cube:before {\n  content: \"\\f168\"; }\n\n.ion-ios-cube-outline:before {\n  content: \"\\f167\"; }\n\n.ion-ios-cut:before {\n  content: \"\\f16a\"; }\n\n.ion-ios-cut-outline:before {\n  content: \"\\f169\"; }\n\n.ion-ios-desktop:before {\n  content: \"\\f16c\"; }\n\n.ion-ios-desktop-outline:before {\n  content: \"\\f16b\"; }\n\n.ion-ios-disc:before {\n  content: \"\\f16e\"; }\n\n.ion-ios-disc-outline:before {\n  content: \"\\f16d\"; }\n\n.ion-ios-document:before {\n  content: \"\\f170\"; }\n\n.ion-ios-document-outline:before {\n  content: \"\\f16f\"; }\n\n.ion-ios-done-all:before {\n  content: \"\\f171\"; }\n\n.ion-ios-done-all-outline:before {\n  content: \"\\f171\"; }\n\n.ion-ios-download:before {\n  content: \"\\f420\"; }\n\n.ion-ios-download-outline:before {\n  content: \"\\f41f\"; }\n\n.ion-ios-easel:before {\n  content: \"\\f173\"; }\n\n.ion-ios-easel-outline:before {\n  content: \"\\f172\"; }\n\n.ion-ios-egg:before {\n  content: \"\\f175\"; }\n\n.ion-ios-egg-outline:before {\n  content: \"\\f174\"; }\n\n.ion-ios-exit:before {\n  content: \"\\f177\"; }\n\n.ion-ios-exit-outline:before {\n  content: \"\\f176\"; }\n\n.ion-ios-expand:before {\n  content: \"\\f178\"; }\n\n.ion-ios-expand-outline:before {\n  content: \"\\f178\"; }\n\n.ion-ios-eye:before {\n  content: \"\\f425\"; }\n\n.ion-ios-eye-off:before {\n  content: \"\\f17a\"; }\n\n.ion-ios-eye-off-outline:before {\n  content: \"\\f179\"; }\n\n.ion-ios-eye-outline:before {\n  content: \"\\f424\"; }\n\n.ion-ios-fastforward:before {\n  content: \"\\f427\"; }\n\n.ion-ios-fastforward-outline:before {\n  content: \"\\f426\"; }\n\n.ion-ios-female:before {\n  content: \"\\f17b\"; }\n\n.ion-ios-female-outline:before {\n  content: \"\\f17b\"; }\n\n.ion-ios-filing:before {\n  content: \"\\f429\"; }\n\n.ion-ios-filing-outline:before {\n  content: \"\\f428\"; }\n\n.ion-ios-film:before {\n  content: \"\\f42b\"; }\n\n.ion-ios-film-outline:before {\n  content: \"\\f42a\"; }\n\n.ion-ios-finger-print:before {\n  content: \"\\f17c\"; }\n\n.ion-ios-finger-print-outline:before {\n  content: \"\\f17c\"; }\n\n.ion-ios-flag:before {\n  content: \"\\f42d\"; }\n\n.ion-ios-flag-outline:before {\n  content: \"\\f42c\"; }\n\n.ion-ios-flame:before {\n  content: \"\\f42f\"; }\n\n.ion-ios-flame-outline:before {\n  content: \"\\f42e\"; }\n\n.ion-ios-flash:before {\n  content: \"\\f17e\"; }\n\n.ion-ios-flash-outline:before {\n  content: \"\\f17d\"; }\n\n.ion-ios-flask:before {\n  content: \"\\f431\"; }\n\n.ion-ios-flask-outline:before {\n  content: \"\\f430\"; }\n\n.ion-ios-flower:before {\n  content: \"\\f433\"; }\n\n.ion-ios-flower-outline:before {\n  content: \"\\f432\"; }\n\n.ion-ios-folder:before {\n  content: \"\\f435\"; }\n\n.ion-ios-folder-open:before {\n  content: \"\\f180\"; }\n\n.ion-ios-folder-open-outline:before {\n  content: \"\\f17f\"; }\n\n.ion-ios-folder-outline:before {\n  content: \"\\f434\"; }\n\n.ion-ios-football:before {\n  content: \"\\f437\"; }\n\n.ion-ios-football-outline:before {\n  content: \"\\f436\"; }\n\n.ion-ios-funnel:before {\n  content: \"\\f182\"; }\n\n.ion-ios-funnel-outline:before {\n  content: \"\\f181\"; }\n\n.ion-ios-game-controller-a:before {\n  content: \"\\f439\"; }\n\n.ion-ios-game-controller-a-outline:before {\n  content: \"\\f438\"; }\n\n.ion-ios-game-controller-b:before {\n  content: \"\\f43b\"; }\n\n.ion-ios-game-controller-b-outline:before {\n  content: \"\\f43a\"; }\n\n.ion-ios-git-branch:before {\n  content: \"\\f183\"; }\n\n.ion-ios-git-branch-outline:before {\n  content: \"\\f183\"; }\n\n.ion-ios-git-commit:before {\n  content: \"\\f184\"; }\n\n.ion-ios-git-commit-outline:before {\n  content: \"\\f184\"; }\n\n.ion-ios-git-compare:before {\n  content: \"\\f185\"; }\n\n.ion-ios-git-compare-outline:before {\n  content: \"\\f185\"; }\n\n.ion-ios-git-merge:before {\n  content: \"\\f186\"; }\n\n.ion-ios-git-merge-outline:before {\n  content: \"\\f186\"; }\n\n.ion-ios-git-network:before {\n  content: \"\\f187\"; }\n\n.ion-ios-git-network-outline:before {\n  content: \"\\f187\"; }\n\n.ion-ios-git-pull-request:before {\n  content: \"\\f188\"; }\n\n.ion-ios-git-pull-request-outline:before {\n  content: \"\\f188\"; }\n\n.ion-ios-glasses:before {\n  content: \"\\f43f\"; }\n\n.ion-ios-glasses-outline:before {\n  content: \"\\f43e\"; }\n\n.ion-ios-globe:before {\n  content: \"\\f18a\"; }\n\n.ion-ios-globe-outline:before {\n  content: \"\\f189\"; }\n\n.ion-ios-grid:before {\n  content: \"\\f18c\"; }\n\n.ion-ios-grid-outline:before {\n  content: \"\\f18b\"; }\n\n.ion-ios-hammer:before {\n  content: \"\\f18e\"; }\n\n.ion-ios-hammer-outline:before {\n  content: \"\\f18d\"; }\n\n.ion-ios-hand:before {\n  content: \"\\f190\"; }\n\n.ion-ios-hand-outline:before {\n  content: \"\\f18f\"; }\n\n.ion-ios-happy:before {\n  content: \"\\f192\"; }\n\n.ion-ios-happy-outline:before {\n  content: \"\\f191\"; }\n\n.ion-ios-headset:before {\n  content: \"\\f194\"; }\n\n.ion-ios-headset-outline:before {\n  content: \"\\f193\"; }\n\n.ion-ios-heart:before {\n  content: \"\\f443\"; }\n\n.ion-ios-heart-outline:before {\n  content: \"\\f442\"; }\n\n.ion-ios-help:before {\n  content: \"\\f446\"; }\n\n.ion-ios-help-buoy:before {\n  content: \"\\f196\"; }\n\n.ion-ios-help-buoy-outline:before {\n  content: \"\\f195\"; }\n\n.ion-ios-help-circle:before {\n  content: \"\\f198\"; }\n\n.ion-ios-help-circle-outline:before {\n  content: \"\\f197\"; }\n\n.ion-ios-help-outline:before {\n  content: \"\\f446\"; }\n\n.ion-ios-home:before {\n  content: \"\\f448\"; }\n\n.ion-ios-home-outline:before {\n  content: \"\\f447\"; }\n\n.ion-ios-ice-cream:before {\n  content: \"\\f19a\"; }\n\n.ion-ios-ice-cream-outline:before {\n  content: \"\\f199\"; }\n\n.ion-ios-image:before {\n  content: \"\\f19c\"; }\n\n.ion-ios-image-outline:before {\n  content: \"\\f19b\"; }\n\n.ion-ios-images:before {\n  content: \"\\f19e\"; }\n\n.ion-ios-images-outline:before {\n  content: \"\\f19d\"; }\n\n.ion-ios-infinite:before {\n  content: \"\\f44a\"; }\n\n.ion-ios-infinite-outline:before {\n  content: \"\\f449\"; }\n\n.ion-ios-information:before {\n  content: \"\\f44d\"; }\n\n.ion-ios-information-circle:before {\n  content: \"\\f1a0\"; }\n\n.ion-ios-information-circle-outline:before {\n  content: \"\\f19f\"; }\n\n.ion-ios-information-outline:before {\n  content: \"\\f44d\"; }\n\n.ion-ios-ionic:before {\n  content: \"\\f1a1\"; }\n\n.ion-ios-ionic-outline:before {\n  content: \"\\f44e\"; }\n\n.ion-ios-ionitron:before {\n  content: \"\\f1a3\"; }\n\n.ion-ios-ionitron-outline:before {\n  content: \"\\f1a2\"; }\n\n.ion-ios-jet:before {\n  content: \"\\f1a5\"; }\n\n.ion-ios-jet-outline:before {\n  content: \"\\f1a4\"; }\n\n.ion-ios-key:before {\n  content: \"\\f1a7\"; }\n\n.ion-ios-key-outline:before {\n  content: \"\\f1a6\"; }\n\n.ion-ios-keypad:before {\n  content: \"\\f450\"; }\n\n.ion-ios-keypad-outline:before {\n  content: \"\\f44f\"; }\n\n.ion-ios-laptop:before {\n  content: \"\\f1a8\"; }\n\n.ion-ios-laptop-outline:before {\n  content: \"\\f1a8\"; }\n\n.ion-ios-leaf:before {\n  content: \"\\f1aa\"; }\n\n.ion-ios-leaf-outline:before {\n  content: \"\\f1a9\"; }\n\n.ion-ios-link:before {\n  content: \"\\f22a\"; }\n\n.ion-ios-link-outline:before {\n  content: \"\\f1ca\"; }\n\n.ion-ios-list:before {\n  content: \"\\f454\"; }\n\n.ion-ios-list-box:before {\n  content: \"\\f1ac\"; }\n\n.ion-ios-list-box-outline:before {\n  content: \"\\f1ab\"; }\n\n.ion-ios-list-outline:before {\n  content: \"\\f454\"; }\n\n.ion-ios-locate:before {\n  content: \"\\f1ae\"; }\n\n.ion-ios-locate-outline:before {\n  content: \"\\f1ad\"; }\n\n.ion-ios-lock:before {\n  content: \"\\f1b0\"; }\n\n.ion-ios-lock-outline:before {\n  content: \"\\f1af\"; }\n\n.ion-ios-log-in:before {\n  content: \"\\f1b1\"; }\n\n.ion-ios-log-in-outline:before {\n  content: \"\\f1b1\"; }\n\n.ion-ios-log-out:before {\n  content: \"\\f1b2\"; }\n\n.ion-ios-log-out-outline:before {\n  content: \"\\f1b2\"; }\n\n.ion-ios-magnet:before {\n  content: \"\\f1b4\"; }\n\n.ion-ios-magnet-outline:before {\n  content: \"\\f1b3\"; }\n\n.ion-ios-mail:before {\n  content: \"\\f1b8\"; }\n\n.ion-ios-mail-open:before {\n  content: \"\\f1b6\"; }\n\n.ion-ios-mail-open-outline:before {\n  content: \"\\f1b5\"; }\n\n.ion-ios-mail-outline:before {\n  content: \"\\f1b7\"; }\n\n.ion-ios-male:before {\n  content: \"\\f1b9\"; }\n\n.ion-ios-male-outline:before {\n  content: \"\\f1b9\"; }\n\n.ion-ios-man:before {\n  content: \"\\f1bb\"; }\n\n.ion-ios-man-outline:before {\n  content: \"\\f1ba\"; }\n\n.ion-ios-map:before {\n  content: \"\\f1bd\"; }\n\n.ion-ios-map-outline:before {\n  content: \"\\f1bc\"; }\n\n.ion-ios-medal:before {\n  content: \"\\f1bf\"; }\n\n.ion-ios-medal-outline:before {\n  content: \"\\f1be\"; }\n\n.ion-ios-medical:before {\n  content: \"\\f45c\"; }\n\n.ion-ios-medical-outline:before {\n  content: \"\\f45b\"; }\n\n.ion-ios-medkit:before {\n  content: \"\\f45e\"; }\n\n.ion-ios-medkit-outline:before {\n  content: \"\\f45d\"; }\n\n.ion-ios-megaphone:before {\n  content: \"\\f1c1\"; }\n\n.ion-ios-megaphone-outline:before {\n  content: \"\\f1c0\"; }\n\n.ion-ios-menu:before {\n  content: \"\\f1c3\"; }\n\n.ion-ios-menu-outline:before {\n  content: \"\\f1c2\"; }\n\n.ion-ios-mic:before {\n  content: \"\\f461\"; }\n\n.ion-ios-mic-off:before {\n  content: \"\\f45f\"; }\n\n.ion-ios-mic-off-outline:before {\n  content: \"\\f1c4\"; }\n\n.ion-ios-mic-outline:before {\n  content: \"\\f460\"; }\n\n.ion-ios-microphone:before {\n  content: \"\\f1c6\"; }\n\n.ion-ios-microphone-outline:before {\n  content: \"\\f1c5\"; }\n\n.ion-ios-moon:before {\n  content: \"\\f468\"; }\n\n.ion-ios-moon-outline:before {\n  content: \"\\f467\"; }\n\n.ion-ios-more:before {\n  content: \"\\f1c8\"; }\n\n.ion-ios-more-outline:before {\n  content: \"\\f1c7\"; }\n\n.ion-ios-move:before {\n  content: \"\\f1cb\"; }\n\n.ion-ios-move-outline:before {\n  content: \"\\f1cb\"; }\n\n.ion-ios-musical-note:before {\n  content: \"\\f46b\"; }\n\n.ion-ios-musical-note-outline:before {\n  content: \"\\f1cc\"; }\n\n.ion-ios-musical-notes:before {\n  content: \"\\f46c\"; }\n\n.ion-ios-musical-notes-outline:before {\n  content: \"\\f1cd\"; }\n\n.ion-ios-navigate:before {\n  content: \"\\f46e\"; }\n\n.ion-ios-navigate-outline:before {\n  content: \"\\f46d\"; }\n\n.ion-ios-no-smoking:before {\n  content: \"\\f1cf\"; }\n\n.ion-ios-no-smoking-outline:before {\n  content: \"\\f1ce\"; }\n\n.ion-ios-notifications:before {\n  content: \"\\f1d3\"; }\n\n.ion-ios-notifications-off:before {\n  content: \"\\f1d1\"; }\n\n.ion-ios-notifications-off-outline:before {\n  content: \"\\f1d0\"; }\n\n.ion-ios-notifications-outline:before {\n  content: \"\\f1d2\"; }\n\n.ion-ios-nuclear:before {\n  content: \"\\f1d5\"; }\n\n.ion-ios-nuclear-outline:before {\n  content: \"\\f1d4\"; }\n\n.ion-ios-nutrition:before {\n  content: \"\\f470\"; }\n\n.ion-ios-nutrition-outline:before {\n  content: \"\\f46f\"; }\n\n.ion-ios-open:before {\n  content: \"\\f1d7\"; }\n\n.ion-ios-open-outline:before {\n  content: \"\\f1d6\"; }\n\n.ion-ios-options:before {\n  content: \"\\f1d9\"; }\n\n.ion-ios-options-outline:before {\n  content: \"\\f1d8\"; }\n\n.ion-ios-outlet:before {\n  content: \"\\f1db\"; }\n\n.ion-ios-outlet-outline:before {\n  content: \"\\f1da\"; }\n\n.ion-ios-paper:before {\n  content: \"\\f472\"; }\n\n.ion-ios-paper-outline:before {\n  content: \"\\f471\"; }\n\n.ion-ios-paper-plane:before {\n  content: \"\\f1dd\"; }\n\n.ion-ios-paper-plane-outline:before {\n  content: \"\\f1dc\"; }\n\n.ion-ios-partly-sunny:before {\n  content: \"\\f1df\"; }\n\n.ion-ios-partly-sunny-outline:before {\n  content: \"\\f1de\"; }\n\n.ion-ios-pause:before {\n  content: \"\\f478\"; }\n\n.ion-ios-pause-outline:before {\n  content: \"\\f477\"; }\n\n.ion-ios-paw:before {\n  content: \"\\f47a\"; }\n\n.ion-ios-paw-outline:before {\n  content: \"\\f479\"; }\n\n.ion-ios-people:before {\n  content: \"\\f47c\"; }\n\n.ion-ios-people-outline:before {\n  content: \"\\f47b\"; }\n\n.ion-ios-person:before {\n  content: \"\\f47e\"; }\n\n.ion-ios-person-add:before {\n  content: \"\\f1e1\"; }\n\n.ion-ios-person-add-outline:before {\n  content: \"\\f1e0\"; }\n\n.ion-ios-person-outline:before {\n  content: \"\\f47d\"; }\n\n.ion-ios-phone-landscape:before {\n  content: \"\\f1e2\"; }\n\n.ion-ios-phone-landscape-outline:before {\n  content: \"\\f1e2\"; }\n\n.ion-ios-phone-portrait:before {\n  content: \"\\f1e3\"; }\n\n.ion-ios-phone-portrait-outline:before {\n  content: \"\\f1e3\"; }\n\n.ion-ios-photos:before {\n  content: \"\\f482\"; }\n\n.ion-ios-photos-outline:before {\n  content: \"\\f481\"; }\n\n.ion-ios-pie:before {\n  content: \"\\f484\"; }\n\n.ion-ios-pie-outline:before {\n  content: \"\\f483\"; }\n\n.ion-ios-pin:before {\n  content: \"\\f1e5\"; }\n\n.ion-ios-pin-outline:before {\n  content: \"\\f1e4\"; }\n\n.ion-ios-pint:before {\n  content: \"\\f486\"; }\n\n.ion-ios-pint-outline:before {\n  content: \"\\f485\"; }\n\n.ion-ios-pizza:before {\n  content: \"\\f1e7\"; }\n\n.ion-ios-pizza-outline:before {\n  content: \"\\f1e6\"; }\n\n.ion-ios-plane:before {\n  content: \"\\f1e9\"; }\n\n.ion-ios-plane-outline:before {\n  content: \"\\f1e8\"; }\n\n.ion-ios-planet:before {\n  content: \"\\f1eb\"; }\n\n.ion-ios-planet-outline:before {\n  content: \"\\f1ea\"; }\n\n.ion-ios-play:before {\n  content: \"\\f488\"; }\n\n.ion-ios-play-outline:before {\n  content: \"\\f487\"; }\n\n.ion-ios-podium:before {\n  content: \"\\f1ed\"; }\n\n.ion-ios-podium-outline:before {\n  content: \"\\f1ec\"; }\n\n.ion-ios-power:before {\n  content: \"\\f1ef\"; }\n\n.ion-ios-power-outline:before {\n  content: \"\\f1ee\"; }\n\n.ion-ios-pricetag:before {\n  content: \"\\f48d\"; }\n\n.ion-ios-pricetag-outline:before {\n  content: \"\\f48c\"; }\n\n.ion-ios-pricetags:before {\n  content: \"\\f48f\"; }\n\n.ion-ios-pricetags-outline:before {\n  content: \"\\f48e\"; }\n\n.ion-ios-print:before {\n  content: \"\\f1f1\"; }\n\n.ion-ios-print-outline:before {\n  content: \"\\f1f0\"; }\n\n.ion-ios-pulse:before {\n  content: \"\\f493\"; }\n\n.ion-ios-pulse-outline:before {\n  content: \"\\f1f2\"; }\n\n.ion-ios-qr-scanner:before {\n  content: \"\\f1f3\"; }\n\n.ion-ios-qr-scanner-outline:before {\n  content: \"\\f1f3\"; }\n\n.ion-ios-quote:before {\n  content: \"\\f1f5\"; }\n\n.ion-ios-quote-outline:before {\n  content: \"\\f1f4\"; }\n\n.ion-ios-radio:before {\n  content: \"\\f1f9\"; }\n\n.ion-ios-radio-button-off:before {\n  content: \"\\f1f6\"; }\n\n.ion-ios-radio-button-off-outline:before {\n  content: \"\\f1f6\"; }\n\n.ion-ios-radio-button-on:before {\n  content: \"\\f1f7\"; }\n\n.ion-ios-radio-button-on-outline:before {\n  content: \"\\f1f7\"; }\n\n.ion-ios-radio-outline:before {\n  content: \"\\f1f8\"; }\n\n.ion-ios-rainy:before {\n  content: \"\\f495\"; }\n\n.ion-ios-rainy-outline:before {\n  content: \"\\f494\"; }\n\n.ion-ios-recording:before {\n  content: \"\\f497\"; }\n\n.ion-ios-recording-outline:before {\n  content: \"\\f496\"; }\n\n.ion-ios-redo:before {\n  content: \"\\f499\"; }\n\n.ion-ios-redo-outline:before {\n  content: \"\\f498\"; }\n\n.ion-ios-refresh:before {\n  content: \"\\f49c\"; }\n\n.ion-ios-refresh-circle:before {\n  content: \"\\f226\"; }\n\n.ion-ios-refresh-circle-outline:before {\n  content: \"\\f224\"; }\n\n.ion-ios-refresh-outline:before {\n  content: \"\\f49c\"; }\n\n.ion-ios-remove:before {\n  content: \"\\f1fc\"; }\n\n.ion-ios-remove-circle:before {\n  content: \"\\f1fb\"; }\n\n.ion-ios-remove-circle-outline:before {\n  content: \"\\f1fa\"; }\n\n.ion-ios-remove-outline:before {\n  content: \"\\f1fc\"; }\n\n.ion-ios-reorder:before {\n  content: \"\\f1fd\"; }\n\n.ion-ios-reorder-outline:before {\n  content: \"\\f1fd\"; }\n\n.ion-ios-repeat:before {\n  content: \"\\f1fe\"; }\n\n.ion-ios-repeat-outline:before {\n  content: \"\\f1fe\"; }\n\n.ion-ios-resize:before {\n  content: \"\\f1ff\"; }\n\n.ion-ios-resize-outline:before {\n  content: \"\\f1ff\"; }\n\n.ion-ios-restaurant:before {\n  content: \"\\f201\"; }\n\n.ion-ios-restaurant-outline:before {\n  content: \"\\f200\"; }\n\n.ion-ios-return-left:before {\n  content: \"\\f202\"; }\n\n.ion-ios-return-left-outline:before {\n  content: \"\\f202\"; }\n\n.ion-ios-return-right:before {\n  content: \"\\f203\"; }\n\n.ion-ios-return-right-outline:before {\n  content: \"\\f203\"; }\n\n.ion-ios-reverse-camera:before {\n  content: \"\\f49f\"; }\n\n.ion-ios-reverse-camera-outline:before {\n  content: \"\\f49e\"; }\n\n.ion-ios-rewind:before {\n  content: \"\\f4a1\"; }\n\n.ion-ios-rewind-outline:before {\n  content: \"\\f4a0\"; }\n\n.ion-ios-ribbon:before {\n  content: \"\\f205\"; }\n\n.ion-ios-ribbon-outline:before {\n  content: \"\\f204\"; }\n\n.ion-ios-rose:before {\n  content: \"\\f4a3\"; }\n\n.ion-ios-rose-outline:before {\n  content: \"\\f4a2\"; }\n\n.ion-ios-sad:before {\n  content: \"\\f207\"; }\n\n.ion-ios-sad-outline:before {\n  content: \"\\f206\"; }\n\n.ion-ios-school:before {\n  content: \"\\f209\"; }\n\n.ion-ios-school-outline:before {\n  content: \"\\f208\"; }\n\n.ion-ios-search:before {\n  content: \"\\f4a5\"; }\n\n.ion-ios-search-outline:before {\n  content: \"\\f20a\"; }\n\n.ion-ios-send:before {\n  content: \"\\f20c\"; }\n\n.ion-ios-send-outline:before {\n  content: \"\\f20b\"; }\n\n.ion-ios-settings:before {\n  content: \"\\f4a7\"; }\n\n.ion-ios-settings-outline:before {\n  content: \"\\f20d\"; }\n\n.ion-ios-share:before {\n  content: \"\\f211\"; }\n\n.ion-ios-share-alt:before {\n  content: \"\\f20f\"; }\n\n.ion-ios-share-alt-outline:before {\n  content: \"\\f20e\"; }\n\n.ion-ios-share-outline:before {\n  content: \"\\f210\"; }\n\n.ion-ios-shirt:before {\n  content: \"\\f213\"; }\n\n.ion-ios-shirt-outline:before {\n  content: \"\\f212\"; }\n\n.ion-ios-shuffle:before {\n  content: \"\\f4a9\"; }\n\n.ion-ios-shuffle-outline:before {\n  content: \"\\f4a9\"; }\n\n.ion-ios-skip-backward:before {\n  content: \"\\f215\"; }\n\n.ion-ios-skip-backward-outline:before {\n  content: \"\\f214\"; }\n\n.ion-ios-skip-forward:before {\n  content: \"\\f217\"; }\n\n.ion-ios-skip-forward-outline:before {\n  content: \"\\f216\"; }\n\n.ion-ios-snow:before {\n  content: \"\\f218\"; }\n\n.ion-ios-snow-outline:before {\n  content: \"\\f22c\"; }\n\n.ion-ios-speedometer:before {\n  content: \"\\f4b0\"; }\n\n.ion-ios-speedometer-outline:before {\n  content: \"\\f4af\"; }\n\n.ion-ios-square:before {\n  content: \"\\f21a\"; }\n\n.ion-ios-square-outline:before {\n  content: \"\\f219\"; }\n\n.ion-ios-star:before {\n  content: \"\\f4b3\"; }\n\n.ion-ios-star-half:before {\n  content: \"\\f4b1\"; }\n\n.ion-ios-star-half-outline:before {\n  content: \"\\f4b1\"; }\n\n.ion-ios-star-outline:before {\n  content: \"\\f4b2\"; }\n\n.ion-ios-stats:before {\n  content: \"\\f21c\"; }\n\n.ion-ios-stats-outline:before {\n  content: \"\\f21b\"; }\n\n.ion-ios-stopwatch:before {\n  content: \"\\f4b5\"; }\n\n.ion-ios-stopwatch-outline:before {\n  content: \"\\f4b4\"; }\n\n.ion-ios-subway:before {\n  content: \"\\f21e\"; }\n\n.ion-ios-subway-outline:before {\n  content: \"\\f21d\"; }\n\n.ion-ios-sunny:before {\n  content: \"\\f4b7\"; }\n\n.ion-ios-sunny-outline:before {\n  content: \"\\f4b6\"; }\n\n.ion-ios-swap:before {\n  content: \"\\f21f\"; }\n\n.ion-ios-swap-outline:before {\n  content: \"\\f21f\"; }\n\n.ion-ios-switch:before {\n  content: \"\\f221\"; }\n\n.ion-ios-switch-outline:before {\n  content: \"\\f220\"; }\n\n.ion-ios-sync:before {\n  content: \"\\f222\"; }\n\n.ion-ios-sync-outline:before {\n  content: \"\\f222\"; }\n\n.ion-ios-tablet-landscape:before {\n  content: \"\\f223\"; }\n\n.ion-ios-tablet-landscape-outline:before {\n  content: \"\\f223\"; }\n\n.ion-ios-tablet-portrait:before {\n  content: \"\\f24e\"; }\n\n.ion-ios-tablet-portrait-outline:before {\n  content: \"\\f24e\"; }\n\n.ion-ios-tennisball:before {\n  content: \"\\f4bb\"; }\n\n.ion-ios-tennisball-outline:before {\n  content: \"\\f4ba\"; }\n\n.ion-ios-text:before {\n  content: \"\\f250\"; }\n\n.ion-ios-text-outline:before {\n  content: \"\\f24f\"; }\n\n.ion-ios-thermometer:before {\n  content: \"\\f252\"; }\n\n.ion-ios-thermometer-outline:before {\n  content: \"\\f251\"; }\n\n.ion-ios-thumbs-down:before {\n  content: \"\\f254\"; }\n\n.ion-ios-thumbs-down-outline:before {\n  content: \"\\f253\"; }\n\n.ion-ios-thumbs-up:before {\n  content: \"\\f256\"; }\n\n.ion-ios-thumbs-up-outline:before {\n  content: \"\\f255\"; }\n\n.ion-ios-thunderstorm:before {\n  content: \"\\f4bd\"; }\n\n.ion-ios-thunderstorm-outline:before {\n  content: \"\\f4bc\"; }\n\n.ion-ios-time:before {\n  content: \"\\f4bf\"; }\n\n.ion-ios-time-outline:before {\n  content: \"\\f4be\"; }\n\n.ion-ios-timer:before {\n  content: \"\\f4c1\"; }\n\n.ion-ios-timer-outline:before {\n  content: \"\\f4c0\"; }\n\n.ion-ios-train:before {\n  content: \"\\f258\"; }\n\n.ion-ios-train-outline:before {\n  content: \"\\f257\"; }\n\n.ion-ios-transgender:before {\n  content: \"\\f259\"; }\n\n.ion-ios-transgender-outline:before {\n  content: \"\\f259\"; }\n\n.ion-ios-trash:before {\n  content: \"\\f4c5\"; }\n\n.ion-ios-trash-outline:before {\n  content: \"\\f4c4\"; }\n\n.ion-ios-trending-down:before {\n  content: \"\\f25a\"; }\n\n.ion-ios-trending-down-outline:before {\n  content: \"\\f25a\"; }\n\n.ion-ios-trending-up:before {\n  content: \"\\f25b\"; }\n\n.ion-ios-trending-up-outline:before {\n  content: \"\\f25b\"; }\n\n.ion-ios-trophy:before {\n  content: \"\\f25d\"; }\n\n.ion-ios-trophy-outline:before {\n  content: \"\\f25c\"; }\n\n.ion-ios-umbrella:before {\n  content: \"\\f25f\"; }\n\n.ion-ios-umbrella-outline:before {\n  content: \"\\f25e\"; }\n\n.ion-ios-undo:before {\n  content: \"\\f4c7\"; }\n\n.ion-ios-undo-outline:before {\n  content: \"\\f4c6\"; }\n\n.ion-ios-unlock:before {\n  content: \"\\f261\"; }\n\n.ion-ios-unlock-outline:before {\n  content: \"\\f260\"; }\n\n.ion-ios-videocam:before {\n  content: \"\\f4cd\"; }\n\n.ion-ios-videocam-outline:before {\n  content: \"\\f4cc\"; }\n\n.ion-ios-volume-down:before {\n  content: \"\\f262\"; }\n\n.ion-ios-volume-down-outline:before {\n  content: \"\\f262\"; }\n\n.ion-ios-volume-mute:before {\n  content: \"\\f263\"; }\n\n.ion-ios-volume-mute-outline:before {\n  content: \"\\f263\"; }\n\n.ion-ios-volume-off:before {\n  content: \"\\f264\"; }\n\n.ion-ios-volume-off-outline:before {\n  content: \"\\f264\"; }\n\n.ion-ios-volume-up:before {\n  content: \"\\f265\"; }\n\n.ion-ios-volume-up-outline:before {\n  content: \"\\f265\"; }\n\n.ion-ios-walk:before {\n  content: \"\\f266\"; }\n\n.ion-ios-walk-outline:before {\n  content: \"\\f266\"; }\n\n.ion-ios-warning:before {\n  content: \"\\f268\"; }\n\n.ion-ios-warning-outline:before {\n  content: \"\\f267\"; }\n\n.ion-ios-watch:before {\n  content: \"\\f269\"; }\n\n.ion-ios-watch-outline:before {\n  content: \"\\f269\"; }\n\n.ion-ios-water:before {\n  content: \"\\f26b\"; }\n\n.ion-ios-water-outline:before {\n  content: \"\\f26a\"; }\n\n.ion-ios-wifi:before {\n  content: \"\\f26d\"; }\n\n.ion-ios-wifi-outline:before {\n  content: \"\\f26c\"; }\n\n.ion-ios-wine:before {\n  content: \"\\f26f\"; }\n\n.ion-ios-wine-outline:before {\n  content: \"\\f26e\"; }\n\n.ion-ios-woman:before {\n  content: \"\\f271\"; }\n\n.ion-ios-woman-outline:before {\n  content: \"\\f270\"; }\n\n.ion-logo-android:before {\n  content: \"\\f225\"; }\n\n.ion-logo-angular:before {\n  content: \"\\f227\"; }\n\n.ion-logo-apple:before {\n  content: \"\\f229\"; }\n\n.ion-logo-bitcoin:before {\n  content: \"\\f22b\"; }\n\n.ion-logo-buffer:before {\n  content: \"\\f22d\"; }\n\n.ion-logo-chrome:before {\n  content: \"\\f22f\"; }\n\n.ion-logo-codepen:before {\n  content: \"\\f230\"; }\n\n.ion-logo-css3:before {\n  content: \"\\f231\"; }\n\n.ion-logo-designernews:before {\n  content: \"\\f232\"; }\n\n.ion-logo-dribbble:before {\n  content: \"\\f233\"; }\n\n.ion-logo-dropbox:before {\n  content: \"\\f234\"; }\n\n.ion-logo-euro:before {\n  content: \"\\f235\"; }\n\n.ion-logo-facebook:before {\n  content: \"\\f236\"; }\n\n.ion-logo-foursquare:before {\n  content: \"\\f237\"; }\n\n.ion-logo-freebsd-devil:before {\n  content: \"\\f238\"; }\n\n.ion-logo-github:before {\n  content: \"\\f239\"; }\n\n.ion-logo-google:before {\n  content: \"\\f23a\"; }\n\n.ion-logo-googleplus:before {\n  content: \"\\f23b\"; }\n\n.ion-logo-hackernews:before {\n  content: \"\\f23c\"; }\n\n.ion-logo-html5:before {\n  content: \"\\f23d\"; }\n\n.ion-logo-instagram:before {\n  content: \"\\f23e\"; }\n\n.ion-logo-javascript:before {\n  content: \"\\f23f\"; }\n\n.ion-logo-linkedin:before {\n  content: \"\\f240\"; }\n\n.ion-logo-markdown:before {\n  content: \"\\f241\"; }\n\n.ion-logo-nodejs:before {\n  content: \"\\f242\"; }\n\n.ion-logo-octocat:before {\n  content: \"\\f243\"; }\n\n.ion-logo-pinterest:before {\n  content: \"\\f244\"; }\n\n.ion-logo-playstation:before {\n  content: \"\\f245\"; }\n\n.ion-logo-python:before {\n  content: \"\\f246\"; }\n\n.ion-logo-reddit:before {\n  content: \"\\f247\"; }\n\n.ion-logo-rss:before {\n  content: \"\\f248\"; }\n\n.ion-logo-sass:before {\n  content: \"\\f249\"; }\n\n.ion-logo-skype:before {\n  content: \"\\f24a\"; }\n\n.ion-logo-snapchat:before {\n  content: \"\\f24b\"; }\n\n.ion-logo-steam:before {\n  content: \"\\f24c\"; }\n\n.ion-logo-tumblr:before {\n  content: \"\\f24d\"; }\n\n.ion-logo-tux:before {\n  content: \"\\f2ae\"; }\n\n.ion-logo-twitch:before {\n  content: \"\\f2af\"; }\n\n.ion-logo-twitter:before {\n  content: \"\\f2b0\"; }\n\n.ion-logo-usd:before {\n  content: \"\\f2b1\"; }\n\n.ion-logo-vimeo:before {\n  content: \"\\f2c4\"; }\n\n.ion-logo-whatsapp:before {\n  content: \"\\f2c5\"; }\n\n.ion-logo-windows:before {\n  content: \"\\f32f\"; }\n\n.ion-logo-wordpress:before {\n  content: \"\\f330\"; }\n\n.ion-logo-xbox:before {\n  content: \"\\f34c\"; }\n\n.ion-logo-yahoo:before {\n  content: \"\\f34d\"; }\n\n.ion-logo-yen:before {\n  content: \"\\f34e\"; }\n\n.ion-logo-youtube:before {\n  content: \"\\f34f\"; }\n\n.ion-md-add:before {\n  content: \"\\f273\"; }\n\n.ion-md-add-circle:before {\n  content: \"\\f272\"; }\n\n.ion-md-alarm:before {\n  content: \"\\f274\"; }\n\n.ion-md-albums:before {\n  content: \"\\f275\"; }\n\n.ion-md-alert:before {\n  content: \"\\f276\"; }\n\n.ion-md-american-football:before {\n  content: \"\\f277\"; }\n\n.ion-md-analytics:before {\n  content: \"\\f278\"; }\n\n.ion-md-aperture:before {\n  content: \"\\f279\"; }\n\n.ion-md-apps:before {\n  content: \"\\f27a\"; }\n\n.ion-md-appstore:before {\n  content: \"\\f27b\"; }\n\n.ion-md-archive:before {\n  content: \"\\f27c\"; }\n\n.ion-md-arrow-back:before {\n  content: \"\\f27d\"; }\n\n.ion-md-arrow-down:before {\n  content: \"\\f27e\"; }\n\n.ion-md-arrow-dropdown:before {\n  content: \"\\f280\"; }\n\n.ion-md-arrow-dropdown-circle:before {\n  content: \"\\f27f\"; }\n\n.ion-md-arrow-dropleft:before {\n  content: \"\\f282\"; }\n\n.ion-md-arrow-dropleft-circle:before {\n  content: \"\\f281\"; }\n\n.ion-md-arrow-dropright:before {\n  content: \"\\f284\"; }\n\n.ion-md-arrow-dropright-circle:before {\n  content: \"\\f283\"; }\n\n.ion-md-arrow-dropup:before {\n  content: \"\\f286\"; }\n\n.ion-md-arrow-dropup-circle:before {\n  content: \"\\f285\"; }\n\n.ion-md-arrow-forward:before {\n  content: \"\\f287\"; }\n\n.ion-md-arrow-round-back:before {\n  content: \"\\f288\"; }\n\n.ion-md-arrow-round-down:before {\n  content: \"\\f289\"; }\n\n.ion-md-arrow-round-forward:before {\n  content: \"\\f28a\"; }\n\n.ion-md-arrow-round-up:before {\n  content: \"\\f28b\"; }\n\n.ion-md-arrow-up:before {\n  content: \"\\f28c\"; }\n\n.ion-md-at:before {\n  content: \"\\f28d\"; }\n\n.ion-md-attach:before {\n  content: \"\\f28e\"; }\n\n.ion-md-backspace:before {\n  content: \"\\f28f\"; }\n\n.ion-md-barcode:before {\n  content: \"\\f290\"; }\n\n.ion-md-baseball:before {\n  content: \"\\f291\"; }\n\n.ion-md-basket:before {\n  content: \"\\f292\"; }\n\n.ion-md-basketball:before {\n  content: \"\\f293\"; }\n\n.ion-md-battery-charging:before {\n  content: \"\\f294\"; }\n\n.ion-md-battery-dead:before {\n  content: \"\\f295\"; }\n\n.ion-md-battery-full:before {\n  content: \"\\f296\"; }\n\n.ion-md-beaker:before {\n  content: \"\\f297\"; }\n\n.ion-md-beer:before {\n  content: \"\\f298\"; }\n\n.ion-md-bicycle:before {\n  content: \"\\f299\"; }\n\n.ion-md-bluetooth:before {\n  content: \"\\f29a\"; }\n\n.ion-md-boat:before {\n  content: \"\\f29b\"; }\n\n.ion-md-body:before {\n  content: \"\\f29c\"; }\n\n.ion-md-bonfire:before {\n  content: \"\\f29d\"; }\n\n.ion-md-book:before {\n  content: \"\\f29e\"; }\n\n.ion-md-bookmark:before {\n  content: \"\\f29f\"; }\n\n.ion-md-bookmarks:before {\n  content: \"\\f2a0\"; }\n\n.ion-md-bowtie:before {\n  content: \"\\f2a1\"; }\n\n.ion-md-briefcase:before {\n  content: \"\\f2a2\"; }\n\n.ion-md-browsers:before {\n  content: \"\\f2a3\"; }\n\n.ion-md-brush:before {\n  content: \"\\f2a4\"; }\n\n.ion-md-bug:before {\n  content: \"\\f2a5\"; }\n\n.ion-md-build:before {\n  content: \"\\f2a6\"; }\n\n.ion-md-bulb:before {\n  content: \"\\f2a7\"; }\n\n.ion-md-bus:before {\n  content: \"\\f2a8\"; }\n\n.ion-md-cafe:before {\n  content: \"\\f2a9\"; }\n\n.ion-md-calculator:before {\n  content: \"\\f2aa\"; }\n\n.ion-md-calendar:before {\n  content: \"\\f2ab\"; }\n\n.ion-md-call:before {\n  content: \"\\f2ac\"; }\n\n.ion-md-camera:before {\n  content: \"\\f2ad\"; }\n\n.ion-md-car:before {\n  content: \"\\f2b2\"; }\n\n.ion-md-card:before {\n  content: \"\\f2b3\"; }\n\n.ion-md-cart:before {\n  content: \"\\f2b4\"; }\n\n.ion-md-cash:before {\n  content: \"\\f2b5\"; }\n\n.ion-md-chatboxes:before {\n  content: \"\\f2b6\"; }\n\n.ion-md-chatbubbles:before {\n  content: \"\\f2b7\"; }\n\n.ion-md-checkbox:before {\n  content: \"\\f2b9\"; }\n\n.ion-md-checkbox-outline:before {\n  content: \"\\f2b8\"; }\n\n.ion-md-checkmark:before {\n  content: \"\\f2bc\"; }\n\n.ion-md-checkmark-circle:before {\n  content: \"\\f2bb\"; }\n\n.ion-md-checkmark-circle-outline:before {\n  content: \"\\f2ba\"; }\n\n.ion-md-clipboard:before {\n  content: \"\\f2bd\"; }\n\n.ion-md-clock:before {\n  content: \"\\f2be\"; }\n\n.ion-md-close:before {\n  content: \"\\f2c0\"; }\n\n.ion-md-close-circle:before {\n  content: \"\\f2bf\"; }\n\n.ion-md-closed-captioning:before {\n  content: \"\\f2c1\"; }\n\n.ion-md-cloud:before {\n  content: \"\\f2c9\"; }\n\n.ion-md-cloud-circle:before {\n  content: \"\\f2c2\"; }\n\n.ion-md-cloud-done:before {\n  content: \"\\f2c3\"; }\n\n.ion-md-cloud-download:before {\n  content: \"\\f2c6\"; }\n\n.ion-md-cloud-outline:before {\n  content: \"\\f2c7\"; }\n\n.ion-md-cloud-upload:before {\n  content: \"\\f2c8\"; }\n\n.ion-md-cloudy:before {\n  content: \"\\f2cb\"; }\n\n.ion-md-cloudy-night:before {\n  content: \"\\f2ca\"; }\n\n.ion-md-code:before {\n  content: \"\\f2ce\"; }\n\n.ion-md-code-download:before {\n  content: \"\\f2cc\"; }\n\n.ion-md-code-working:before {\n  content: \"\\f2cd\"; }\n\n.ion-md-cog:before {\n  content: \"\\f2cf\"; }\n\n.ion-md-color-fill:before {\n  content: \"\\f2d0\"; }\n\n.ion-md-color-filter:before {\n  content: \"\\f2d1\"; }\n\n.ion-md-color-palette:before {\n  content: \"\\f2d2\"; }\n\n.ion-md-color-wand:before {\n  content: \"\\f2d3\"; }\n\n.ion-md-compass:before {\n  content: \"\\f2d4\"; }\n\n.ion-md-construct:before {\n  content: \"\\f2d5\"; }\n\n.ion-md-contact:before {\n  content: \"\\f2d6\"; }\n\n.ion-md-contacts:before {\n  content: \"\\f2d7\"; }\n\n.ion-md-contract:before {\n  content: \"\\f2d8\"; }\n\n.ion-md-contrast:before {\n  content: \"\\f2d9\"; }\n\n.ion-md-copy:before {\n  content: \"\\f2da\"; }\n\n.ion-md-create:before {\n  content: \"\\f2db\"; }\n\n.ion-md-crop:before {\n  content: \"\\f2dc\"; }\n\n.ion-md-cube:before {\n  content: \"\\f2dd\"; }\n\n.ion-md-cut:before {\n  content: \"\\f2de\"; }\n\n.ion-md-desktop:before {\n  content: \"\\f2df\"; }\n\n.ion-md-disc:before {\n  content: \"\\f2e0\"; }\n\n.ion-md-document:before {\n  content: \"\\f2e1\"; }\n\n.ion-md-done-all:before {\n  content: \"\\f2e2\"; }\n\n.ion-md-download:before {\n  content: \"\\f2e3\"; }\n\n.ion-md-easel:before {\n  content: \"\\f2e4\"; }\n\n.ion-md-egg:before {\n  content: \"\\f2e5\"; }\n\n.ion-md-exit:before {\n  content: \"\\f2e6\"; }\n\n.ion-md-expand:before {\n  content: \"\\f2e7\"; }\n\n.ion-md-eye:before {\n  content: \"\\f2e9\"; }\n\n.ion-md-eye-off:before {\n  content: \"\\f2e8\"; }\n\n.ion-md-fastforward:before {\n  content: \"\\f2ea\"; }\n\n.ion-md-female:before {\n  content: \"\\f2eb\"; }\n\n.ion-md-filing:before {\n  content: \"\\f2ec\"; }\n\n.ion-md-film:before {\n  content: \"\\f2ed\"; }\n\n.ion-md-finger-print:before {\n  content: \"\\f2ee\"; }\n\n.ion-md-flag:before {\n  content: \"\\f2ef\"; }\n\n.ion-md-flame:before {\n  content: \"\\f2f0\"; }\n\n.ion-md-flash:before {\n  content: \"\\f2f1\"; }\n\n.ion-md-flask:before {\n  content: \"\\f2f2\"; }\n\n.ion-md-flower:before {\n  content: \"\\f2f3\"; }\n\n.ion-md-folder:before {\n  content: \"\\f2f5\"; }\n\n.ion-md-folder-open:before {\n  content: \"\\f2f4\"; }\n\n.ion-md-football:before {\n  content: \"\\f2f6\"; }\n\n.ion-md-funnel:before {\n  content: \"\\f2f7\"; }\n\n.ion-md-game-controller-a:before {\n  content: \"\\f2f8\"; }\n\n.ion-md-game-controller-b:before {\n  content: \"\\f2f9\"; }\n\n.ion-md-git-branch:before {\n  content: \"\\f2fa\"; }\n\n.ion-md-git-commit:before {\n  content: \"\\f2fb\"; }\n\n.ion-md-git-compare:before {\n  content: \"\\f2fc\"; }\n\n.ion-md-git-merge:before {\n  content: \"\\f2fd\"; }\n\n.ion-md-git-network:before {\n  content: \"\\f2fe\"; }\n\n.ion-md-git-pull-request:before {\n  content: \"\\f2ff\"; }\n\n.ion-md-glasses:before {\n  content: \"\\f300\"; }\n\n.ion-md-globe:before {\n  content: \"\\f301\"; }\n\n.ion-md-grid:before {\n  content: \"\\f302\"; }\n\n.ion-md-hammer:before {\n  content: \"\\f303\"; }\n\n.ion-md-hand:before {\n  content: \"\\f304\"; }\n\n.ion-md-happy:before {\n  content: \"\\f305\"; }\n\n.ion-md-headset:before {\n  content: \"\\f306\"; }\n\n.ion-md-heart:before {\n  content: \"\\f308\"; }\n\n.ion-md-heart-outline:before {\n  content: \"\\f307\"; }\n\n.ion-md-help:before {\n  content: \"\\f30b\"; }\n\n.ion-md-help-buoy:before {\n  content: \"\\f309\"; }\n\n.ion-md-help-circle:before {\n  content: \"\\f30a\"; }\n\n.ion-md-home:before {\n  content: \"\\f30c\"; }\n\n.ion-md-ice-cream:before {\n  content: \"\\f30d\"; }\n\n.ion-md-image:before {\n  content: \"\\f30e\"; }\n\n.ion-md-images:before {\n  content: \"\\f30f\"; }\n\n.ion-md-infinite:before {\n  content: \"\\f310\"; }\n\n.ion-md-information:before {\n  content: \"\\f312\"; }\n\n.ion-md-information-circle:before {\n  content: \"\\f311\"; }\n\n.ion-md-ionic:before {\n  content: \"\\f313\"; }\n\n.ion-md-ionitron:before {\n  content: \"\\f314\"; }\n\n.ion-md-jet:before {\n  content: \"\\f315\"; }\n\n.ion-md-key:before {\n  content: \"\\f316\"; }\n\n.ion-md-keypad:before {\n  content: \"\\f317\"; }\n\n.ion-md-laptop:before {\n  content: \"\\f318\"; }\n\n.ion-md-leaf:before {\n  content: \"\\f319\"; }\n\n.ion-md-link:before {\n  content: \"\\f22e\"; }\n\n.ion-md-list:before {\n  content: \"\\f31b\"; }\n\n.ion-md-list-box:before {\n  content: \"\\f31a\"; }\n\n.ion-md-locate:before {\n  content: \"\\f31c\"; }\n\n.ion-md-lock:before {\n  content: \"\\f31d\"; }\n\n.ion-md-log-in:before {\n  content: \"\\f31e\"; }\n\n.ion-md-log-out:before {\n  content: \"\\f31f\"; }\n\n.ion-md-magnet:before {\n  content: \"\\f320\"; }\n\n.ion-md-mail:before {\n  content: \"\\f322\"; }\n\n.ion-md-mail-open:before {\n  content: \"\\f321\"; }\n\n.ion-md-male:before {\n  content: \"\\f323\"; }\n\n.ion-md-man:before {\n  content: \"\\f324\"; }\n\n.ion-md-map:before {\n  content: \"\\f325\"; }\n\n.ion-md-medal:before {\n  content: \"\\f326\"; }\n\n.ion-md-medical:before {\n  content: \"\\f327\"; }\n\n.ion-md-medkit:before {\n  content: \"\\f328\"; }\n\n.ion-md-megaphone:before {\n  content: \"\\f329\"; }\n\n.ion-md-menu:before {\n  content: \"\\f32a\"; }\n\n.ion-md-mic:before {\n  content: \"\\f32c\"; }\n\n.ion-md-mic-off:before {\n  content: \"\\f32b\"; }\n\n.ion-md-microphone:before {\n  content: \"\\f32d\"; }\n\n.ion-md-moon:before {\n  content: \"\\f32e\"; }\n\n.ion-md-more:before {\n  content: \"\\f1c9\"; }\n\n.ion-md-move:before {\n  content: \"\\f331\"; }\n\n.ion-md-musical-note:before {\n  content: \"\\f332\"; }\n\n.ion-md-musical-notes:before {\n  content: \"\\f333\"; }\n\n.ion-md-navigate:before {\n  content: \"\\f334\"; }\n\n.ion-md-no-smoking:before {\n  content: \"\\f335\"; }\n\n.ion-md-notifications:before {\n  content: \"\\f338\"; }\n\n.ion-md-notifications-off:before {\n  content: \"\\f336\"; }\n\n.ion-md-notifications-outline:before {\n  content: \"\\f337\"; }\n\n.ion-md-nuclear:before {\n  content: \"\\f339\"; }\n\n.ion-md-nutrition:before {\n  content: \"\\f33a\"; }\n\n.ion-md-open:before {\n  content: \"\\f33b\"; }\n\n.ion-md-options:before {\n  content: \"\\f33c\"; }\n\n.ion-md-outlet:before {\n  content: \"\\f33d\"; }\n\n.ion-md-paper:before {\n  content: \"\\f33f\"; }\n\n.ion-md-paper-plane:before {\n  content: \"\\f33e\"; }\n\n.ion-md-partly-sunny:before {\n  content: \"\\f340\"; }\n\n.ion-md-pause:before {\n  content: \"\\f341\"; }\n\n.ion-md-paw:before {\n  content: \"\\f342\"; }\n\n.ion-md-people:before {\n  content: \"\\f343\"; }\n\n.ion-md-person:before {\n  content: \"\\f345\"; }\n\n.ion-md-person-add:before {\n  content: \"\\f344\"; }\n\n.ion-md-phone-landscape:before {\n  content: \"\\f346\"; }\n\n.ion-md-phone-portrait:before {\n  content: \"\\f347\"; }\n\n.ion-md-photos:before {\n  content: \"\\f348\"; }\n\n.ion-md-pie:before {\n  content: \"\\f349\"; }\n\n.ion-md-pin:before {\n  content: \"\\f34a\"; }\n\n.ion-md-pint:before {\n  content: \"\\f34b\"; }\n\n.ion-md-pizza:before {\n  content: \"\\f354\"; }\n\n.ion-md-plane:before {\n  content: \"\\f355\"; }\n\n.ion-md-planet:before {\n  content: \"\\f356\"; }\n\n.ion-md-play:before {\n  content: \"\\f357\"; }\n\n.ion-md-podium:before {\n  content: \"\\f358\"; }\n\n.ion-md-power:before {\n  content: \"\\f359\"; }\n\n.ion-md-pricetag:before {\n  content: \"\\f35a\"; }\n\n.ion-md-pricetags:before {\n  content: \"\\f35b\"; }\n\n.ion-md-print:before {\n  content: \"\\f35c\"; }\n\n.ion-md-pulse:before {\n  content: \"\\f35d\"; }\n\n.ion-md-qr-scanner:before {\n  content: \"\\f35e\"; }\n\n.ion-md-quote:before {\n  content: \"\\f35f\"; }\n\n.ion-md-radio:before {\n  content: \"\\f362\"; }\n\n.ion-md-radio-button-off:before {\n  content: \"\\f360\"; }\n\n.ion-md-radio-button-on:before {\n  content: \"\\f361\"; }\n\n.ion-md-rainy:before {\n  content: \"\\f363\"; }\n\n.ion-md-recording:before {\n  content: \"\\f364\"; }\n\n.ion-md-redo:before {\n  content: \"\\f365\"; }\n\n.ion-md-refresh:before {\n  content: \"\\f366\"; }\n\n.ion-md-refresh-circle:before {\n  content: \"\\f228\"; }\n\n.ion-md-remove:before {\n  content: \"\\f368\"; }\n\n.ion-md-remove-circle:before {\n  content: \"\\f367\"; }\n\n.ion-md-reorder:before {\n  content: \"\\f369\"; }\n\n.ion-md-repeat:before {\n  content: \"\\f36a\"; }\n\n.ion-md-resize:before {\n  content: \"\\f36b\"; }\n\n.ion-md-restaurant:before {\n  content: \"\\f36c\"; }\n\n.ion-md-return-left:before {\n  content: \"\\f36d\"; }\n\n.ion-md-return-right:before {\n  content: \"\\f36e\"; }\n\n.ion-md-reverse-camera:before {\n  content: \"\\f36f\"; }\n\n.ion-md-rewind:before {\n  content: \"\\f370\"; }\n\n.ion-md-ribbon:before {\n  content: \"\\f371\"; }\n\n.ion-md-rose:before {\n  content: \"\\f372\"; }\n\n.ion-md-sad:before {\n  content: \"\\f373\"; }\n\n.ion-md-school:before {\n  content: \"\\f374\"; }\n\n.ion-md-search:before {\n  content: \"\\f375\"; }\n\n.ion-md-send:before {\n  content: \"\\f376\"; }\n\n.ion-md-settings:before {\n  content: \"\\f377\"; }\n\n.ion-md-share:before {\n  content: \"\\f379\"; }\n\n.ion-md-share-alt:before {\n  content: \"\\f378\"; }\n\n.ion-md-shirt:before {\n  content: \"\\f37a\"; }\n\n.ion-md-shuffle:before {\n  content: \"\\f37b\"; }\n\n.ion-md-skip-backward:before {\n  content: \"\\f37c\"; }\n\n.ion-md-skip-forward:before {\n  content: \"\\f37d\"; }\n\n.ion-md-snow:before {\n  content: \"\\f37e\"; }\n\n.ion-md-speedometer:before {\n  content: \"\\f37f\"; }\n\n.ion-md-square:before {\n  content: \"\\f381\"; }\n\n.ion-md-square-outline:before {\n  content: \"\\f380\"; }\n\n.ion-md-star:before {\n  content: \"\\f384\"; }\n\n.ion-md-star-half:before {\n  content: \"\\f382\"; }\n\n.ion-md-star-outline:before {\n  content: \"\\f383\"; }\n\n.ion-md-stats:before {\n  content: \"\\f385\"; }\n\n.ion-md-stopwatch:before {\n  content: \"\\f386\"; }\n\n.ion-md-subway:before {\n  content: \"\\f387\"; }\n\n.ion-md-sunny:before {\n  content: \"\\f388\"; }\n\n.ion-md-swap:before {\n  content: \"\\f389\"; }\n\n.ion-md-switch:before {\n  content: \"\\f38a\"; }\n\n.ion-md-sync:before {\n  content: \"\\f38b\"; }\n\n.ion-md-tablet-landscape:before {\n  content: \"\\f38c\"; }\n\n.ion-md-tablet-portrait:before {\n  content: \"\\f38d\"; }\n\n.ion-md-tennisball:before {\n  content: \"\\f38e\"; }\n\n.ion-md-text:before {\n  content: \"\\f38f\"; }\n\n.ion-md-thermometer:before {\n  content: \"\\f390\"; }\n\n.ion-md-thumbs-down:before {\n  content: \"\\f391\"; }\n\n.ion-md-thumbs-up:before {\n  content: \"\\f392\"; }\n\n.ion-md-thunderstorm:before {\n  content: \"\\f393\"; }\n\n.ion-md-time:before {\n  content: \"\\f394\"; }\n\n.ion-md-timer:before {\n  content: \"\\f395\"; }\n\n.ion-md-train:before {\n  content: \"\\f396\"; }\n\n.ion-md-transgender:before {\n  content: \"\\f397\"; }\n\n.ion-md-trash:before {\n  content: \"\\f398\"; }\n\n.ion-md-trending-down:before {\n  content: \"\\f399\"; }\n\n.ion-md-trending-up:before {\n  content: \"\\f39a\"; }\n\n.ion-md-trophy:before {\n  content: \"\\f39b\"; }\n\n.ion-md-umbrella:before {\n  content: \"\\f39c\"; }\n\n.ion-md-undo:before {\n  content: \"\\f39d\"; }\n\n.ion-md-unlock:before {\n  content: \"\\f39e\"; }\n\n.ion-md-videocam:before {\n  content: \"\\f39f\"; }\n\n.ion-md-volume-down:before {\n  content: \"\\f3a0\"; }\n\n.ion-md-volume-mute:before {\n  content: \"\\f3a1\"; }\n\n.ion-md-volume-off:before {\n  content: \"\\f3a2\"; }\n\n.ion-md-volume-up:before {\n  content: \"\\f3a3\"; }\n\n.ion-md-walk:before {\n  content: \"\\f3a4\"; }\n\n.ion-md-warning:before {\n  content: \"\\f3a5\"; }\n\n.ion-md-watch:before {\n  content: \"\\f3a6\"; }\n\n.ion-md-water:before {\n  content: \"\\f3a7\"; }\n\n.ion-md-wifi:before {\n  content: \"\\f3a8\"; }\n\n.ion-md-wine:before {\n  content: \"\\f3a9\"; }\n\n.ion-md-woman:before {\n  content: \"\\f3aa\"; }\n\n@font-face {\n  font-family: \"Ionicons\";\n  src: url(\"../fonts/ionicons.woff2?v=3.0.0-alpha.3\") format(\"woff2\"), url(\"../fonts/ionicons.woff?v=3.0.0-alpha.3\") format(\"woff\"), url(\"../fonts/ionicons.ttf?v=3.0.0-alpha.3\") format(\"truetype\");\n  font-weight: normal;\n  font-style: normal; }\n\nion-icon {\n  display: inline-block;\n  font-family: \"Ionicons\";\n  -moz-osx-font-smoothing: grayscale;\n  -webkit-font-smoothing: antialiased;\n  font-style: normal;\n  font-variant: normal;\n  font-weight: normal;\n  line-height: 1;\n  text-rendering: auto;\n  text-transform: none;\n  speak: none; }\n\nion-content {\n  color: #000; }\n\nhr {\n  background-color: rgba(0, 0, 0, 0.12); }\n\n.hairlines hr {\n  height: 0.55px; }\n\nion-action-sheet {\n  position: absolute;\n  top: 0;\n  left: 0;\n  z-index: 1000;\n  display: block;\n  width: 100%;\n  height: 100%; }\n\n.action-sheet-wrapper {\n  position: absolute;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  z-index: 10;\n  display: block;\n  margin: auto;\n  width: 100%;\n  max-width: 500px;\n  -webkit-transform: translate3d(0, 100%, 0);\n  transform: translate3d(0, 100%, 0); }\n\n.action-sheet-button {\n  width: 100%; }\n\nion-action-sheet {\n  text-align: center; }\n\n.action-sheet-container {\n  padding: 0 10px; }\n\n.action-sheet-group {\n  overflow: hidden;\n  margin-bottom: 8px;\n  border-radius: 13px;\n  background: #f9f9f9; }\n  .action-sheet-group:last-child {\n    margin-bottom: 10px; }\n\n.action-sheet-title {\n  padding: 1.5rem;\n  border-bottom: 1px solid #d6d6da;\n  border-radius: 0;\n  font-size: 1.3rem;\n  font-weight: 400;\n  text-align: center;\n  color: #8f8f8f; }\n\n.action-sheet-button {\n  margin: 0;\n  padding: 18px;\n  min-height: 5.6rem;\n  border-bottom: 1px solid #d6d6da;\n  font-size: 2rem;\n  color: #007aff;\n  background: transparent; }\n  .action-sheet-button:last-child {\n    border-bottom: 0; }\n  .action-sheet-button.activated {\n    margin-top: -1px;\n    border-top: 1px solid #ebebeb;\n    border-bottom-color: #ebebeb;\n    background: #ebebeb; }\n\n.action-sheet-selected {\n  font-weight: bold;\n  background: #fff; }\n\n.action-sheet-destructive {\n  color: #f53d3d; }\n\n.action-sheet-cancel {\n  font-weight: 600;\n  background: #fff; }\n\n.hairlines .action-sheet-title,\n.hairlines .action-sheet-button {\n  border-bottom-width: 0.55px; }\n\nion-alert {\n  position: absolute;\n  top: 0;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  z-index: 1000;\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  -webkit-box-pack: center;\n  -webkit-justify-content: center;\n  -ms-flex-pack: center;\n  justify-content: center; }\n  ion-alert input {\n    width: 100%; }\n\n.alert-wrapper {\n  z-index: 10;\n  display: -webkit-box;\n  display: -webkit-flex;\n  display: -ms-flexbox;\n  display: flex;\n  -webkit-box-orient: vertical;\n  -webkit-box-direction: normal;\n  -webkit-flex-direction: column;\n  -ms-flex-direction: column;\n  flex-direction: column;\n  min-width: 250px;\n  max-height: 90%;\n  opacity: 0; }\n\n.alert-title {\n  margin: 0;\n  padding: 0; }\n\n.alert-sub-title {\n  margin: 5px 0 0;\n  padding: 0;\n  font-weight: normal; }\n\n.alert-message {\n  overflow-y: scroll;\n  -webkit-overflow-scrolling: touch; }\n\n.alert-input {\n  padding: 10px 0;\n  border: 0;\n  background: inherit; }\n  .alert-input::-moz-placeholder {\n    color: #999; }\n  .alert-input:-ms-input-placeholder {\n    color: #999; }\n  .alert-input::-webkit-input-placeholder {\n    text-indent: 0;\n    color: #999; }\n\n.alert-button-group {\n  display: -webkit-box;\n  display: -webkit-flex;\n  display: -ms-flexbox;\n  display: flex;\n  -webkit-box-orient: horizontal;\n  -webkit-box-direction: normal;\n  -webkit-flex-direction: row;\n  -ms-flex-direction: row;\n  flex-direction: row; }\n  .alert-button-group.vertical {\n    -webkit-box-orient: vertical;\n    -webkit-box-direction: normal;\n    -webkit-flex-direction: column;\n    -ms-flex-direction: column;\n    flex-direction: column;\n    -webkit-flex-wrap: nowrap;\n    -ms-flex-wrap: nowrap;\n    flex-wrap: nowrap; }\n\n.alert-button {\n  z-index: 0;\n  display: block;\n  margin: 0;\n  font-size: 14px;\n  line-height: 20px; }\n\n.alert-tappable {\n  margin: 0;\n  padding: 0;\n  width: 100%;\n  font-size: inherit;\n  line-height: initial;\n  text-align: left;\n  background: transparent;\n  -webkit-appearance: none; }\n\n.alert-wrapper {\n  overflow: hidden;\n  max-width: 270px;\n  border-radius: 13px;\n  background-color: #f8f8f8;\n  box-shadow: none; }\n\n.alert-head {\n  padding: 12px 16px 7px;\n  text-align: center; }\n\n.alert-title {\n  margin-top: 8px;\n  font-size: 17px;\n  font-weight: 600; }\n\n.alert-sub-title {\n  font-size: 14px;\n  color: #666; }\n\n.alert-message,\n.alert-input-group {\n  padding: 0 16px 21px;\n  font-size: 13px;\n  text-align: center;\n  color: inherit; }\n\n.alert-message {\n  max-height: 240px; }\n  .alert-message:empty {\n    padding: 0 0 12px 0; }\n\n.alert-input {\n  margin-top: 10px;\n  padding: 6px;\n  border: 1px solid #ccc;\n  border-radius: 4px;\n  background-color: #fff;\n  -webkit-appearance: none; }\n\n.alert-radio-group,\n.alert-checkbox-group {\n  overflow: scroll;\n  max-height: 240px;\n  border-top: 1px solid #dbdbdf;\n  -webkit-overflow-scrolling: touch; }\n\n.alert-tappable {\n  display: -webkit-box;\n  display: -webkit-flex;\n  display: -ms-flexbox;\n  display: flex;\n  min-height: 44px; }\n\n.alert-radio-label {\n  overflow: hidden;\n  -webkit-box-flex: 1;\n  -webkit-flex: 1;\n  -ms-flex: 1;\n  flex: 1;\n  -webkit-box-ordinal-group: 1;\n  -webkit-order: 0;\n  -ms-flex-order: 0;\n  order: 0;\n  padding: 13px;\n  text-overflow: ellipsis;\n  white-space: nowrap; }\n\n.alert-radio[aria-checked=true] .alert-radio-label {\n  color: #327eff; }\n\n.alert-radio-icon {\n  position: relative;\n  -webkit-box-ordinal-group: 2;\n  -webkit-order: 1;\n  -ms-flex-order: 1;\n  order: 1;\n  min-width: 30px; }\n\n.alert-radio[aria-checked=true] .alert-radio-inner {\n  position: absolute;\n  top: -7px;\n  left: 7px;\n  width: 6px;\n  height: 12px;\n  border-width: 2px;\n  border-top-width: 0;\n  border-left-width: 0;\n  border-style: solid;\n  border-color: #327eff;\n  -webkit-transform: rotate(45deg);\n  transform: rotate(45deg); }\n\n.alert-checkbox-label {\n  overflow: hidden;\n  -webkit-box-flex: 1;\n  -webkit-flex: 1;\n  -ms-flex: 1;\n  flex: 1;\n  padding: 13px;\n  text-overflow: ellipsis;\n  white-space: nowrap; }\n\n.alert-checkbox[aria-checked=true] .alert-checkbox-label {\n  color: initial; }\n\n.alert-checkbox-icon {\n  position: relative;\n  margin: 10px 6px 10px 16px;\n  width: 21px;\n  height: 21px;\n  border-width: 1px;\n  border-style: solid;\n  border-radius: 50%;\n  border-color: #c8c7cc;\n  background-color: #fff; }\n\n.alert-checkbox[aria-checked=true] .alert-checkbox-icon {\n  border-color: #327eff;\n  background-color: #327eff; }\n\n.alert-checkbox[aria-checked=true] .alert-checkbox-inner {\n  position: absolute;\n  top: 4px;\n  left: 7px;\n  width: 4px;\n  height: 9px;\n  border-width: 1px;\n  border-top-width: 0;\n  border-left-width: 0;\n  border-style: solid;\n  border-color: #fff;\n  -webkit-transform: rotate(45deg);\n  transform: rotate(45deg); }\n\n.alert-button-group {\n  -webkit-flex-wrap: wrap;\n  -ms-flex-wrap: wrap;\n  flex-wrap: wrap;\n  margin-right: -1px; }\n\n.alert-button {\n  overflow: hidden;\n  -webkit-box-flex: 1;\n  -webkit-flex: 1 1 auto;\n  -ms-flex: 1 1 auto;\n  flex: 1 1 auto;\n  margin: 0;\n  min-width: 50%;\n  height: 44px;\n  border-top: 1px solid #dbdbdf;\n  border-right: 1px solid #dbdbdf;\n  border-radius: 0;\n  font-size: 17px;\n  color: #327eff;\n  background-color: transparent; }\n  .alert-button:last-child {\n    border-right: 0;\n    font-weight: bold; }\n  .alert-button.activated {\n    background-color: #e9e9e9; }\n\n.hairlines .alert-radio-group,\n.hairlines .alert-checkbox-group {\n  border-width: 0.55px; }\n\n.hairlines .alert-input {\n  border-width: 0.55px; }\n\n.hairlines .alert-button {\n  border-top-width: 0.55px;\n  border-right-width: 0.55px; }\n\nion-badge {\n  display: inline-block;\n  padding: 3px 8px;\n  min-width: 10px;\n  font-size: 1.3rem;\n  font-weight: bold;\n  line-height: 1;\n  text-align: center;\n  white-space: nowrap;\n  vertical-align: baseline; }\n  ion-badge:empty {\n    display: none; }\n\nion-badge {\n  border-radius: 10px;\n  color: #fff;\n  background-color: #327eff; }\n\n.badge-primary {\n  color: #fff;\n  background-color: #327eff; }\n\n.badge-secondary {\n  color: #fff;\n  background-color: #32db64; }\n\n.badge-danger {\n  color: #fff;\n  background-color: #f53d3d; }\n\n.badge-light {\n  color: #000;\n  background-color: #f4f4f4; }\n\n.badge-dark {\n  color: #fff;\n  background-color: #222; }\n\n.button {\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  -ms-user-select: none;\n  user-select: none;\n  -webkit-appearance: none;\n  -moz-appearance: none;\n  position: relative;\n  z-index: 0;\n  display: inline-block;\n  overflow: hidden;\n  text-align: center;\n  text-overflow: ellipsis;\n  text-transform: none;\n  white-space: nowrap;\n  cursor: pointer;\n  vertical-align: top;\n  vertical-align: -webkit-baseline-middle;\n  -webkit-transition: background-color, opacity 100ms linear;\n  transition: background-color, opacity 100ms linear;\n  -webkit-font-kerning: none;\n  font-kerning: none; }\n\n.button-inner {\n  display: -webkit-box;\n  display: -webkit-flex;\n  display: -ms-flexbox;\n  display: flex;\n  -webkit-flex-flow: row nowrap;\n  -ms-flex-flow: row nowrap;\n  flex-flow: row nowrap;\n  -webkit-flex-shrink: 0;\n  -ms-flex-negative: 0;\n  flex-shrink: 0;\n  -webkit-box-align: center;\n  -webkit-align-items: center;\n  -ms-flex-align: center;\n  align-items: center;\n  -webkit-box-pack: center;\n  -webkit-justify-content: center;\n  -ms-flex-pack: center;\n  justify-content: center;\n  width: 100%;\n  height: 100%; }\n\n[ion-button] {\n  text-decoration: none; }\n\na[disabled],\nbutton[disabled],\n[ion-button][disabled] {\n  cursor: default;\n  opacity: .4;\n  pointer-events: none; }\n\n.button-block {\n  display: block;\n  clear: both;\n  width: 100%; }\n  .button-block::after {\n    clear: both; }\n\n.button-full {\n  display: block;\n  width: 100%; }\n\n.button-full.button-outline {\n  border-right-width: 0;\n  border-left-width: 0;\n  border-radius: 0; }\n\n.button {\n  margin: 0.4rem 0.2rem;\n  padding: 0 1em;\n  height: 2.8em;\n  border-radius: 4px;\n  font-size: 1.6rem;\n  color: #fff;\n  background-color: #327eff; }\n  .button.activated {\n    background-color: #2e74eb;\n    opacity: 1; }\n  .button:hover:not(.disable-hover) {\n    opacity: 0.8; }\n\n.button-large {\n  padding: 0 1em;\n  height: 2.8em;\n  font-size: 2rem; }\n\n.button-small {\n  padding: 0 0.9em;\n  height: 2.1em;\n  font-size: 1.3rem; }\n  .button-small[icon-only] ion-icon {\n    font-size: 1.3em; }\n\n.button-block {\n  margin-right: 0;\n  margin-left: 0; }\n\n.button-full {\n  margin-right: 0;\n  margin-left: 0;\n  border-right-width: 0;\n  border-left-width: 0;\n  border-radius: 0; }\n\n.button-outline {\n  border-width: 1px;\n  border-style: solid;\n  border-radius: 4px;\n  border-color: #327eff;\n  color: #327eff;\n  background-color: transparent; }\n  .button-outline.activated {\n    color: #fff;\n    background-color: #327eff;\n    opacity: 1; }\n\n.button-clear {\n  border-color: transparent;\n  color: #327eff;\n  background-color: transparent; }\n  .button-clear.activated {\n    background-color: transparent;\n    opacity: 0.4; }\n  .button-clear:hover:not(.disable-hover) {\n    color: #327eff;\n    opacity: 0.6; }\n\n.button-round {\n  padding: 0 2.6rem;\n  border-radius: 64px; }\n\n.button-fab {\n  border-radius: 50%; }\n\nion-button-effect {\n  display: none; }\n\n.button-primary {\n  color: #fff;\n  background-color: #327eff; }\n  .button-primary.activated {\n    background-color: #2e74eb; }\n\n.button-outline-primary {\n  border-color: #327eff;\n  color: #327eff;\n  background-color: transparent; }\n  .button-outline-primary.activated {\n    color: #fff;\n    background-color: #327eff; }\n\n.button-clear-primary {\n  border-color: transparent;\n  color: #327eff;\n  background-color: transparent; }\n  .button-clear-primary.activated {\n    opacity: 0.4; }\n  .button-clear-primary:hover:not(.disable-hover) {\n    color: #327eff; }\n\n.button-secondary {\n  color: #fff;\n  background-color: #32db64; }\n  .button-secondary.activated {\n    background-color: #2ec95c; }\n\n.button-outline-secondary {\n  border-color: #32db64;\n  color: #32db64;\n  background-color: transparent; }\n  .button-outline-secondary.activated {\n    color: #fff;\n    background-color: #32db64; }\n\n.button-clear-secondary {\n  border-color: transparent;\n  color: #32db64;\n  background-color: transparent; }\n  .button-clear-secondary.activated {\n    opacity: 0.4; }\n  .button-clear-secondary:hover:not(.disable-hover) {\n    color: #32db64; }\n\n.button-danger {\n  color: #fff;\n  background-color: #f53d3d; }\n  .button-danger.activated {\n    background-color: #e13838; }\n\n.button-outline-danger {\n  border-color: #f53d3d;\n  color: #f53d3d;\n  background-color: transparent; }\n  .button-outline-danger.activated {\n    color: #fff;\n    background-color: #f53d3d; }\n\n.button-clear-danger {\n  border-color: transparent;\n  color: #f53d3d;\n  background-color: transparent; }\n  .button-clear-danger.activated {\n    opacity: 0.4; }\n  .button-clear-danger:hover:not(.disable-hover) {\n    color: #f53d3d; }\n\n.button-light {\n  color: #000;\n  background-color: #f4f4f4; }\n  .button-light.activated {\n    background-color: #e0e0e0; }\n\n.button-outline-light {\n  border-color: #f4f4f4;\n  color: #f4f4f4;\n  background-color: transparent; }\n  .button-outline-light.activated {\n    color: #000;\n    background-color: #f4f4f4; }\n\n.button-clear-light {\n  border-color: transparent;\n  color: #f4f4f4;\n  background-color: transparent; }\n  .button-clear-light.activated {\n    opacity: 0.4; }\n  .button-clear-light:hover:not(.disable-hover) {\n    color: #f4f4f4; }\n\n.button-dark {\n  color: #fff;\n  background-color: #222; }\n  .button-dark.activated {\n    background-color: #343434; }\n\n.button-outline-dark {\n  border-color: #222;\n  color: #222;\n  background-color: transparent; }\n  .button-outline-dark.activated {\n    color: #fff;\n    background-color: #222; }\n\n.button-clear-dark {\n  border-color: transparent;\n  color: #222;\n  background-color: transparent; }\n  .button-clear-dark.activated {\n    opacity: 0.4; }\n  .button-clear-dark:hover:not(.disable-hover) {\n    color: #222; }\n\n.button-fab {\n  position: absolute;\n  overflow: hidden;\n  width: 56px;\n  min-width: 0;\n  height: 56px;\n  font-size: 14px;\n  line-height: 56px;\n  vertical-align: middle;\n  background-clip: padding-box; }\n\n.button-fab ion-icon {\n  -webkit-box-flex: 1;\n  -webkit-flex: 1;\n  -ms-flex: 1;\n  flex: 1;\n  font-size: 2.8rem; }\n\n[fab-center] {\n  left: 50%;\n  margin-left: -28px; }\n\n[fab-top] {\n  top: 16px; }\n\n[fab-right] {\n  right: 16px; }\n\n[fab-bottom] {\n  bottom: 16px; }\n\n[fab-left] {\n  left: 16px; }\n\n[fab-fixed] {\n  position: fixed; }\n\n[icon-left] ion-icon {\n  font-size: 1.4em;\n  line-height: .67;\n  pointer-events: none;\n  padding-right: .3em; }\n\n[icon-right] ion-icon {\n  font-size: 1.4em;\n  line-height: .67;\n  pointer-events: none;\n  padding-left: .4em; }\n\n[icon-only] {\n  padding: 0;\n  min-width: .9em; }\n\n[icon-only] ion-icon {\n  padding: 0 .5em;\n  font-size: 1.8em;\n  line-height: .67;\n  pointer-events: none; }\n\nion-card {\n  display: block;\n  overflow: hidden; }\n\nion-card img {\n  display: block;\n  width: 100%; }\n\nion-card-header {\n  display: block;\n  overflow: hidden;\n  text-overflow: ellipsis;\n  white-space: nowrap; }\n\nion-card-content {\n  display: block; }\n\nion-card {\n  margin: 12px 12px 12px 12px;\n  width: calc(100% - 24px);\n  border-radius: 2px;\n  font-size: 1.4rem;\n  background: #fff;\n  box-shadow: 0 1px 2px rgba(0, 0, 0, 0.3); }\n  ion-card ion-list {\n    margin-bottom: 0; }\n  ion-card > .item:last-child,\n  ion-card > .item-wrapper:last-child .item {\n    border-bottom: 0; }\n  ion-card .item .item-inner {\n    border: 0; }\n  ion-card ion-card-content {\n    padding: 13px 16px 14px 16px;\n    font-size: 1.4rem;\n    line-height: 1.4; }\n  ion-card ion-card-header {\n    padding: 16px;\n    font-size: 1.6rem;\n    font-weight: 500;\n    color: #333; }\n  ion-card ion-card-header + ion-card-content,\n  ion-card .item + ion-card-content {\n    padding-top: 0; }\n  ion-card ion-note[item-left],\n  ion-card ion-note[item-right] {\n    font-size: 1.3rem; }\n  ion-card ion-card-title {\n    display: block;\n    margin: 2px 0 2px;\n    padding: 8px 0 8px 0;\n    font-size: 1.8rem;\n    line-height: 1.2;\n    color: #222; }\n  ion-card h1 {\n    margin: 0 0 2px;\n    font-size: 2.4rem;\n    font-weight: normal; }\n  ion-card h2 {\n    margin: 2px 0;\n    font-size: 1.6rem;\n    font-weight: normal; }\n  ion-card h3,\n  ion-card h4,\n  ion-card h5,\n  ion-card h6 {\n    margin: 2px 0;\n    font-size: 1.4rem;\n    font-weight: normal; }\n  ion-card p {\n    margin: 0 0 2px;\n    font-size: 1.4rem;\n    color: #666; }\n\nion-card + ion-card {\n  margin-top: 0; }\n\nion-checkbox {\n  position: relative;\n  display: inline-block; }\n\n.checkbox-icon {\n  position: relative;\n  width: 21px;\n  height: 21px;\n  border-width: 1px;\n  border-style: solid;\n  border-radius: 50%;\n  border-color: #c8c7cc;\n  background-color: #fff; }\n\n.checkbox-checked {\n  border-color: #327eff;\n  background-color: #327eff; }\n\n.checkbox-checked .checkbox-inner {\n  position: absolute;\n  top: 4px;\n  left: 7px;\n  width: 4px;\n  height: 9px;\n  border-width: 1px;\n  border-top-width: 0;\n  border-left-width: 0;\n  border-style: solid;\n  border-color: #fff;\n  -webkit-transform: rotate(45deg);\n  transform: rotate(45deg); }\n\n.checkbox-disabled,\n.item-checkbox-disabled ion-label {\n  opacity: 0.3;\n  pointer-events: none; }\n\n.item ion-checkbox {\n  position: static;\n  display: block;\n  margin: 8px 16px 8px 2px; }\n  .item ion-checkbox[item-right] {\n    margin: 10px 8px 9px 0; }\n\n.checkbox-primary .checkbox-checked {\n  border-color: #327eff;\n  background-color: #327eff; }\n  .checkbox-primary .checkbox-checked .checkbox-inner {\n    border-color: #fff; }\n\n.checkbox-secondary .checkbox-checked {\n  border-color: #32db64;\n  background-color: #32db64; }\n  .checkbox-secondary .checkbox-checked .checkbox-inner {\n    border-color: #fff; }\n\n.checkbox-danger .checkbox-checked {\n  border-color: #f53d3d;\n  background-color: #f53d3d; }\n  .checkbox-danger .checkbox-checked .checkbox-inner {\n    border-color: #fff; }\n\n.checkbox-light .checkbox-checked {\n  border-color: #f4f4f4;\n  background-color: #f4f4f4; }\n  .checkbox-light .checkbox-checked .checkbox-inner {\n    border-color: #000; }\n\n.checkbox-dark .checkbox-checked {\n  border-color: #222;\n  background-color: #222; }\n  .checkbox-dark .checkbox-checked .checkbox-inner {\n    border-color: #fff; }\n\nion-chip {\n  display: -webkit-inline-box;\n  display: -webkit-inline-flex;\n  display: -ms-inline-flexbox;\n  display: inline-flex;\n  -webkit-align-self: center;\n  -ms-flex-item-align: center;\n  align-self: center;\n  font-weight: normal;\n  vertical-align: middle;\n  box-sizing: border-box; }\n  ion-chip .button {\n    margin: 0;\n    width: 32px;\n    height: 32px;\n    border-radius: 50%; }\n  ion-chip ion-icon {\n    width: 32px;\n    height: 32px;\n    border-radius: 50%;\n    font-size: 18px;\n    line-height: 32px; }\n  ion-chip ion-avatar {\n    width: 32px;\n    min-width: 32px;\n    height: 32px;\n    min-height: 32px;\n    border-radius: 50%; }\n    ion-chip ion-avatar img {\n      display: block;\n      width: 100%;\n      max-width: 100%;\n      height: 100%;\n      max-height: 100%;\n      border-radius: 50%; }\n\nion-chip {\n  margin: 2px 0;\n  height: 32px;\n  border-radius: 16px;\n  font-size: 13px;\n  line-height: 32px;\n  color: rgba(0, 0, 0, 0.87);\n  background: rgba(0, 0, 0, 0.12); }\n  ion-chip > ion-label {\n    margin: 0 10px; }\n  ion-chip > ion-icon {\n    color: #fff;\n    background-color: #327eff; }\n\n.chip-primary,\nion-chip .icon-primary {\n  color: #fff;\n  background-color: #327eff; }\n\n.chip-secondary,\nion-chip .icon-secondary {\n  color: #fff;\n  background-color: #32db64; }\n\n.chip-danger,\nion-chip .icon-danger {\n  color: #fff;\n  background-color: #f53d3d; }\n\n.chip-light,\nion-chip .icon-light {\n  color: #000;\n  background-color: #f4f4f4; }\n\n.chip-dark,\nion-chip .icon-dark {\n  color: #fff;\n  background-color: #222; }\n\n[no-padding],\n[no-padding] scroll-content {\n  padding: 0; }\n\n[no-margin],\n[no-margin] scroll-content {\n  margin: 0; }\n\nion-fixed {\n  position: absolute;\n  z-index: 2;\n  -webkit-transform: translateZ(0);\n  transform: translateZ(0); }\n\nion-content {\n  background-color: #fff; }\n\n.outer-content {\n  background: #efeff4; }\n\nion-page.show-page ~ .nav-decor {\n  position: absolute;\n  top: 0;\n  left: 0;\n  z-index: 0;\n  display: block;\n  width: 100%;\n  height: 100%;\n  background: #000;\n  pointer-events: none; }\n\n[padding],\n[padding] scroll-content {\n  padding: 16px; }\n\n[padding-top],\n[padding-top] scroll-content {\n  padding-top: 16px; }\n\n[padding-left],\n[padding-left] scroll-content {\n  padding-left: 16px; }\n\n[padding-right],\n[padding-right] scroll-content {\n  padding-right: 16px; }\n\n[padding-bottom],\n[padding-bottom] scroll-content {\n  padding-bottom: 16px; }\n\n[padding-vertical],\n[padding-vertical] scroll-content {\n  padding-top: 16px;\n  padding-bottom: 16px; }\n\n[padding-horizontal],\n[padding-horizontal] scroll-content {\n  padding-right: 16px;\n  padding-left: 16px; }\n\n[margin],\n[margin] scroll-content {\n  margin: 16px; }\n\n[margin-top],\n[margin-top] scroll-content {\n  margin-top: 16px; }\n\n[margin-left],\n[margin-left] scroll-content {\n  margin-left: 16px; }\n\n[margin-right],\n[margin-right] scroll-content {\n  margin-right: 16px; }\n\n[margin-bottom],\n[margin-bottom] scroll-content {\n  margin-bottom: 16px; }\n\n[margin-vertical],\n[margin-vertical] scroll-content {\n  margin-top: 16px;\n  margin-bottom: 16px; }\n\n[margin-horizontal],\n[margin-horizontal] scroll-content {\n  margin-right: 16px;\n  margin-left: 16px; }\n\nion-content:not([no-bounce]) > scroll-content::before, ion-content:not([no-bounce]) > scroll-content::after {\n  position: absolute;\n  width: 1px;\n  height: 1px;\n  content: \"\"; }\n\nion-content:not([no-bounce]) > scroll-content::before {\n  bottom: -1px; }\n\nion-content:not([no-bounce]) > scroll-content::after {\n  top: -1px; }\n\nion-datetime {\n  display: -webkit-box;\n  display: -webkit-flex;\n  display: -ms-flexbox;\n  display: flex;\n  overflow: hidden; }\n\n.datetime-text {\n  overflow: hidden;\n  -webkit-box-flex: 1;\n  -webkit-flex: 1;\n  -ms-flex: 1;\n  flex: 1;\n  min-width: 16px;\n  min-height: 1.2em;\n  font-size: inherit;\n  line-height: 1.2;\n  text-overflow: ellipsis;\n  white-space: nowrap; }\n\n.datetime-disabled,\n.item-datetime-disabled ion-label {\n  opacity: .4;\n  pointer-events: none; }\n\n.item-label-stacked ion-datetime,\n.item-label-floating ion-datetime {\n  padding-left: 0;\n  width: 100%; }\n\nion-datetime {\n  padding: 12px 8px 13px 16px; }\n\nion-icon {\n  display: inline-block;\n  font-size: 1.2em; }\n\nion-icon[small] {\n  min-height: 1.1em;\n  font-size: 1.1em; }\n\n.icon-primary {\n  color: #327eff; }\n\n.icon-secondary {\n  color: #32db64; }\n\n.icon-danger {\n  color: #f53d3d; }\n\n.icon-light {\n  color: #f4f4f4; }\n\n.icon-dark {\n  color: #222; }\n\nion-input,\nion-textarea {\n  position: relative;\n  display: block;\n  -webkit-box-flex: 1;\n  -webkit-flex: 1;\n  -ms-flex: 1;\n  flex: 1;\n  width: 100%; }\n\n.item-input ion-input,\n.item-input ion-textarea {\n  position: static; }\n\n.item.item-textarea {\n  -webkit-box-align: stretch;\n  -webkit-align-items: stretch;\n  -ms-flex-align: stretch;\n  align-items: stretch; }\n\n.text-input {\n  display: inline-block;\n  -webkit-box-flex: 1;\n  -webkit-flex: 1;\n  -ms-flex: 1;\n  flex: 1;\n  width: 92%;\n  width: calc(100% - 10px);\n  border: 0;\n  border-radius: 0;\n  background: transparent;\n  -webkit-appearance: none; }\n  .text-input::-moz-placeholder {\n    color: #999; }\n  .text-input:-ms-input-placeholder {\n    color: #999; }\n  .text-input::-webkit-input-placeholder {\n    text-indent: 0;\n    color: #999; }\n\ntextarea.text-input {\n  display: block; }\n\n.text-input[disabled] {\n  opacity: .4; }\n\ninput.text-input:-webkit-autofill {\n  background-color: transparent; }\n\n.platform-mobile textarea.text-input {\n  resize: none; }\n\n.input-cover {\n  position: absolute;\n  top: 0;\n  left: 0;\n  width: 100%;\n  height: 100%; }\n\n.input-has-focus .input-cover {\n  display: none; }\n\n.input-has-focus {\n  pointer-events: none; }\n\n.input-has-focus input,\n.input-has-focus textarea,\n.input-has-focus a,\n.input-has-focus button {\n  pointer-events: auto; }\n\n[next-input] {\n  position: absolute;\n  bottom: 1px;\n  padding: 0;\n  width: 1px;\n  height: 1px;\n  border: 0;\n  background: transparent;\n  pointer-events: none; }\n\n.text-input-clear-icon {\n  position: absolute;\n  top: 0;\n  display: none;\n  margin: 0;\n  padding: 0;\n  height: 100%;\n  background-repeat: no-repeat;\n  background-position: center; }\n\n.input-has-focus.input-has-value .text-input-clear-icon {\n  display: block; }\n\n.text-input.cloned-input {\n  position: relative;\n  top: 0;\n  pointer-events: none; }\n\n.item-input:not(.item-label-floating) .text-input.cloned-active {\n  display: none; }\n\n.text-input {\n  margin: 12px 8px 13px 0;\n  padding: 0;\n  width: calc(100% - 8px - 0); }\n\n.inset-input {\n  margin: 6px 16px 6.5px 0;\n  padding: 6px 8px 6.5px 8px; }\n\n.item-label-stacked .text-input,\n.item-label-floating .text-input {\n  margin-top: 8px;\n  margin-bottom: 8px;\n  margin-left: 0;\n  width: calc(100% - 8px); }\n\n.item-label-stacked ion-select,\n.item-label-floating ion-select {\n  padding-top: 8px;\n  padding-bottom: 8px;\n  padding-left: 0; }\n\n.item-label-floating .text-input.cloned-input,\n.item-label-stacked .text-input.cloned-input {\n  top: 30px; }\n\nion-input[clearInput] {\n  position: relative; }\n  ion-input[clearInput] .text-input {\n    padding-right: 30px; }\n\n.text-input-clear-icon {\n  background-image: url(\"data:image/svg+xml;charset=utf-8,<svg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%20512%20512'><path%20fill='rgba(0,%200,%200,%200.5)'%20d='M403.1,108.9c-81.2-81.2-212.9-81.2-294.2,0s-81.2,212.9,0,294.2c81.2,81.2,212.9,81.2,294.2,0S484.3,190.1,403.1,108.9z%20M352,340.2L340.2,352l-84.4-84.2l-84,83.8L160,339.8l84-83.8l-84-83.8l11.8-11.8l84,83.8l84.4-84.2l11.8,11.8L267.6,256L352,340.2z'/></svg>\");\n  right: 8px;\n  width: 30px;\n  background-size: 18px; }\n\n.item {\n  display: -webkit-box;\n  display: -webkit-flex;\n  display: -ms-flexbox;\n  display: flex;\n  overflow: hidden;\n  -webkit-box-align: center;\n  -webkit-align-items: center;\n  -ms-flex-align: center;\n  align-items: center;\n  -webkit-box-pack: justify;\n  -webkit-justify-content: space-between;\n  -ms-flex-pack: justify;\n  justify-content: space-between;\n  margin: 0;\n  padding: 0;\n  width: 100%;\n  min-height: 4.4rem;\n  border: 0;\n  font-weight: normal;\n  line-height: normal;\n  text-align: initial;\n  text-decoration: none;\n  color: inherit; }\n\n.item-inner {\n  display: -webkit-box;\n  display: -webkit-flex;\n  display: -ms-flexbox;\n  display: flex;\n  overflow: hidden;\n  -webkit-box-flex: 1;\n  -webkit-flex: 1;\n  -ms-flex: 1;\n  flex: 1;\n  -webkit-box-orient: vertical;\n  -webkit-box-direction: normal;\n  -webkit-flex-direction: inherit;\n  -ms-flex-direction: inherit;\n  flex-direction: inherit;\n  -webkit-box-align: inherit;\n  -webkit-align-items: inherit;\n  -ms-flex-align: inherit;\n  align-items: inherit;\n  -webkit-align-self: stretch;\n  -ms-flex-item-align: stretch;\n  align-self: stretch;\n  margin: 0;\n  padding: 0;\n  min-height: inherit;\n  border: 0; }\n\n.input-wrapper {\n  display: -webkit-box;\n  display: -webkit-flex;\n  display: -ms-flexbox;\n  display: flex;\n  overflow: hidden;\n  -webkit-box-flex: 1;\n  -webkit-flex: 1;\n  -ms-flex: 1;\n  flex: 1;\n  -webkit-box-orient: vertical;\n  -webkit-box-direction: normal;\n  -webkit-flex-direction: inherit;\n  -ms-flex-direction: inherit;\n  flex-direction: inherit;\n  -webkit-box-align: inherit;\n  -webkit-align-items: inherit;\n  -ms-flex-align: inherit;\n  align-items: inherit;\n  -webkit-align-self: stretch;\n  -ms-flex-item-align: stretch;\n  align-self: stretch;\n  text-overflow: ellipsis; }\n\n.item[no-lines],\n.item[no-lines] .item-inner {\n  border: 0; }\n\nion-item-group {\n  display: block; }\n\nion-item-divider {\n  z-index: 1000;\n  display: -webkit-box;\n  display: -webkit-flex;\n  display: -ms-flexbox;\n  display: flex;\n  overflow: hidden;\n  -webkit-box-align: center;\n  -webkit-align-items: center;\n  -ms-flex-align: center;\n  align-items: center;\n  -webkit-box-pack: justify;\n  -webkit-justify-content: space-between;\n  -ms-flex-pack: justify;\n  justify-content: space-between;\n  margin: 0;\n  padding: 0;\n  width: 100%;\n  min-height: 30px; }\n  ion-item-divider[sticky] {\n    position: -webkit-sticky;\n    position: sticky;\n    top: 0; }\n\n[vertical-align-top],\nion-input.item {\n  -webkit-box-align: start;\n  -webkit-align-items: flex-start;\n  -ms-flex-align: start;\n  align-items: flex-start; }\n\n.item > ion-icon[small]:first-child,\n.item-inner > ion-icon[small]:first-child {\n  min-width: 18px; }\n\n.item > ion-icon:first-child,\n.item-inner > ion-icon:first-child {\n  min-width: 24px;\n  text-align: center; }\n\n.item > ion-icon,\n.item-inner > ion-icon {\n  min-height: 2.4rem;\n  font-size: 2.4rem;\n  line-height: 1; }\n  .item > ion-icon[large],\n  .item-inner > ion-icon[large] {\n    min-height: 3.2rem;\n    font-size: 3.2rem; }\n  .item > ion-icon[small],\n  .item-inner > ion-icon[small] {\n    min-height: 1.8rem;\n    font-size: 1.8rem; }\n\nion-avatar,\nion-thumbnail {\n  display: block;\n  line-height: 1; }\n  ion-avatar img,\n  ion-thumbnail img {\n    display: block; }\n\n.item-cover {\n  position: absolute;\n  top: 0;\n  left: 0;\n  width: 100%;\n  height: 100%;\n  background: transparent;\n  cursor: pointer; }\n\nion-item-sliding {\n  position: relative;\n  display: block;\n  overflow: hidden;\n  width: 100%; }\n  ion-item-sliding .item {\n    position: static; }\n\nion-item-options {\n  position: absolute;\n  top: 0;\n  right: 0;\n  z-index: 1;\n  display: none;\n  -webkit-box-pack: end;\n  -webkit-justify-content: flex-end;\n  -ms-flex-pack: end;\n  justify-content: flex-end;\n  height: 100%;\n  font-size: 14px;\n  visibility: hidden; }\n\nion-item-options[side=left] {\n  right: auto;\n  left: 0;\n  -webkit-box-pack: start;\n  -webkit-justify-content: flex-start;\n  -ms-flex-pack: start;\n  justify-content: flex-start; }\n\nion-item-options .button {\n  margin: 0;\n  padding: 0 .7em;\n  height: 100%;\n  border-radius: 0;\n  box-shadow: none;\n  box-sizing: content-box; }\n\nion-item-options:not([icon-left]) .button .button-inner {\n  -webkit-box-orient: vertical;\n  -webkit-box-direction: normal;\n  -webkit-flex-direction: column;\n  -ms-flex-direction: column;\n  flex-direction: column; }\n\nion-item-options:not([icon-left]) .button ion-icon {\n  padding-right: 0;\n  padding-bottom: .3em;\n  padding-left: 0; }\n\nion-item-sliding.active-slide .item,\nion-item-sliding.active-slide .item.activated {\n  position: relative;\n  z-index: 2;\n  opacity: 1;\n  -webkit-transition: -webkit-transform 500ms cubic-bezier(0.36, 0.66, 0.04, 1);\n  transition: transform 500ms cubic-bezier(0.36, 0.66, 0.04, 1);\n  pointer-events: none;\n  will-change: transform; }\n\nion-item-sliding.active-slide ion-item-options {\n  display: -webkit-box;\n  display: -webkit-flex;\n  display: -ms-flexbox;\n  display: flex; }\n\nion-item-sliding.active-slide.active-options-left ion-item-options[side=left] {\n  width: 100%;\n  visibility: visible; }\n\nion-item-sliding.active-slide.active-options-right ion-item-options:not([side=left]) {\n  width: 100%;\n  visibility: visible; }\n\n.button-expandable {\n  -webkit-flex-shrink: 0;\n  -ms-flex-negative: 0;\n  flex-shrink: 0;\n  -webkit-transition-duration: 0;\n  transition-duration: 0;\n  -webkit-transition-property: none;\n  transition-property: none;\n  -webkit-transition-timing-function: cubic-bezier(0.65, 0.05, 0.36, 1);\n  transition-timing-function: cubic-bezier(0.65, 0.05, 0.36, 1); }\n\nion-item-sliding.active-swipe-right .button-expandable {\n  -webkit-box-ordinal-group: 2;\n  -webkit-order: 1;\n  -ms-flex-order: 1;\n  order: 1;\n  padding-left: 90%;\n  -webkit-transition-duration: .6s;\n  transition-duration: .6s;\n  -webkit-transition-property: padding-left;\n  transition-property: padding-left; }\n\nion-item-sliding.active-swipe-left .button-expandable {\n  -webkit-box-ordinal-group: 0;\n  -webkit-order: -1;\n  -ms-flex-order: -1;\n  order: -1;\n  padding-right: 90%;\n  -webkit-transition-duration: .6s;\n  transition-duration: .6s;\n  -webkit-transition-property: padding-right;\n  transition-property: padding-right; }\n\nion-reorder {\n  display: none;\n  -webkit-box-flex: 1;\n  -webkit-flex: 1;\n  -ms-flex: 1;\n  flex: 1;\n  -webkit-box-align: center;\n  -webkit-align-items: center;\n  -ms-flex-align: center;\n  align-items: center;\n  -webkit-box-pack: center;\n  -webkit-justify-content: center;\n  -ms-flex-pack: center;\n  justify-content: center;\n  max-width: 40px;\n  height: 100%;\n  font-size: 1.7em;\n  opacity: .25;\n  -webkit-transform: translate3d(120%, 0, 0);\n  transform: translate3d(120%, 0, 0);\n  -webkit-transition: -webkit-transform 125ms ease-in;\n  transition: transform 125ms ease-in;\n  pointer-events: all;\n  -ms-touch-action: manipulation;\n  touch-action: manipulation; }\n  ion-reorder ion-icon {\n    pointer-events: none; }\n\n.reorder-enabled ion-reorder {\n  display: -webkit-box;\n  display: -webkit-flex;\n  display: -ms-flexbox;\n  display: flex; }\n\n.reorder-visible ion-reorder {\n  -webkit-transform: translate3d(0, 0, 0);\n  transform: translate3d(0, 0, 0); }\n\n.reorder-list-active .item,\n.reorder-list-active .item-wrapper {\n  -webkit-transition: -webkit-transform 300ms;\n  transition: transform 300ms;\n  will-change: transform; }\n\n.reorder-list-active .item-inner {\n  pointer-events: none; }\n\n.item-wrapper.reorder-active,\n.item.reorder-active,\n.reorder-active {\n  z-index: 4;\n  box-shadow: 0 0 10px rgba(0, 0, 0, 0.4);\n  opacity: .8;\n  -webkit-transition: none;\n  transition: none;\n  pointer-events: none; }\n\n.item {\n  position: relative;\n  padding-left: 16px;\n  border-radius: 0;\n  font-size: 1.6rem;\n  color: #000;\n  background-color: #fff;\n  -webkit-transition-duration: 200ms;\n  transition-duration: 200ms; }\n  .item h1 {\n    margin: 0 0 2px;\n    font-size: 2.4rem;\n    font-weight: normal; }\n  .item h2 {\n    margin: 0 0 2px;\n    font-size: 1.6rem;\n    font-weight: normal; }\n  .item h3,\n  .item h4,\n  .item h5,\n  .item h6 {\n    margin: 0 0 3px;\n    font-size: 1.4rem;\n    font-weight: normal;\n    line-height: normal; }\n  .item p {\n    overflow: inherit;\n    margin: 0 0 2px;\n    font-size: 1.2rem;\n    line-height: normal;\n    text-overflow: inherit;\n    color: #666; }\n  .item h2:last-child,\n  .item h3:last-child,\n  .item h4:last-child,\n  .item h5:last-child,\n  .item h6:last-child,\n  .item p:last-child {\n    margin-bottom: 0; }\n  .item a {\n    text-decoration: none; }\n\n.item.activated {\n  background-color: #d9d9d9;\n  -webkit-transition-duration: 0ms;\n  transition-duration: 0ms; }\n\n.item .item-inner {\n  padding-right: 8px;\n  border-bottom: 1px solid #c8c7cc; }\n\n.hairlines .item-inner {\n  border-bottom-width: 0.55px; }\n\n[item-left] {\n  margin: 8px 16px 8px 0; }\n\n[item-right] {\n  margin: 8px 8px 8px 8px; }\n\nion-icon[item-left],\nion-icon[item-right] {\n  margin-top: 10px;\n  margin-bottom: 9px;\n  margin-left: 0; }\n\nion-avatar[item-left],\nion-thumbnail[item-left] {\n  margin: 8px 16px 8px 0; }\n\nion-avatar[item-right],\nion-thumbnail[item-right] {\n  margin: 8px; }\n\n.item-button {\n  padding: 0 .5em;\n  height: 24px;\n  font-size: 1.3rem; }\n\n.item-button[icon-only] ion-icon,\n.item-button[icon-only] {\n  padding: 0 1px; }\n\nion-avatar {\n  min-width: 3.6rem;\n  min-height: 3.6rem; }\n  ion-avatar img {\n    max-width: 3.6rem;\n    max-height: 3.6rem;\n    border-radius: 1.8rem; }\n\nion-thumbnail {\n  min-width: 5.6rem;\n  min-height: 5.6rem; }\n  ion-thumbnail img {\n    max-width: 5.6rem;\n    max-height: 5.6rem; }\n\nion-note {\n  color: #aeacb4; }\n\n.item[detail-push] .item-inner,\nbutton.item:not([detail-none]) .item-inner,\na.item:not([detail-none]) .item-inner {\n  background-image: url(\"data:image/svg+xml;charset=utf-8,<svg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%2012%2020'><path%20d='M2,20l-2-2l8-8L0,2l2-2l10,10L2,20z'%20fill='%23c8c7cc'/></svg>\");\n  padding-right: 32px;\n  background-repeat: no-repeat;\n  background-position: right 14px center;\n  background-size: 14px 14px; }\n\nion-item-group .item:first-child .item-inner {\n  border-top-width: 0; }\n\nion-item-group .item:last-child .item-inner,\nion-item-group .item-wrapper:last-child .item-inner {\n  border: 0; }\n\nion-item-divider {\n  padding-left: 16px;\n  color: #222;\n  background-color: #f7f7f7; }\n\n.item .text-primary {\n  color: #327eff; }\n\n.item-primary {\n  color: #fff;\n  background-color: #327eff; }\n\n.item .text-secondary {\n  color: #32db64; }\n\n.item-secondary {\n  color: #fff;\n  background-color: #32db64; }\n\n.item .text-danger {\n  color: #f53d3d; }\n\n.item-danger {\n  color: #fff;\n  background-color: #f53d3d; }\n\n.item .text-light {\n  color: #f4f4f4; }\n\n.item-light {\n  color: #000;\n  background-color: #f4f4f4; }\n\n.item .text-dark {\n  color: #222; }\n\n.item-dark {\n  color: #fff;\n  background-color: #222; }\n\nion-item-sliding {\n  background-color: #fff; }\n\nion-label {\n  display: block;\n  overflow: hidden;\n  -webkit-box-flex: 1;\n  -webkit-flex: 1;\n  -ms-flex: 1;\n  flex: 1;\n  margin: 0;\n  font-size: inherit;\n  text-overflow: ellipsis;\n  white-space: nowrap; }\n\n.item-input ion-label {\n  -webkit-box-flex: initial;\n  -webkit-flex: initial;\n  -ms-flex: initial;\n  flex: initial;\n  max-width: 200px;\n  pointer-events: none; }\n\n[text-wrap] ion-label {\n  white-space: normal; }\n\nion-label[fixed] {\n  -webkit-box-flex: 0;\n  -webkit-flex: 0 0 100px;\n  -ms-flex: 0 0 100px;\n  flex: 0 0 100px;\n  width: 100px;\n  min-width: 100px;\n  max-width: 200px; }\n\n.item-label-stacked ion-label,\n.item-label-floating ion-label {\n  -webkit-align-self: stretch;\n  -ms-flex-item-align: stretch;\n  align-self: stretch;\n  width: auto;\n  max-width: 100%; }\n\nion-label[stacked],\nion-label[floating] {\n  margin-bottom: 0; }\n\n.item-label-stacked .input-wrapper,\n.item-label-floating .input-wrapper {\n  -webkit-box-flex: 1;\n  -webkit-flex: 1;\n  -ms-flex: 1;\n  flex: 1;\n  -webkit-box-orient: vertical;\n  -webkit-box-direction: normal;\n  -webkit-flex-direction: column;\n  -ms-flex-direction: column;\n  flex-direction: column; }\n\n.item-label-stacked ion-select,\n.item-label-floating ion-select {\n  -webkit-align-self: stretch;\n  -ms-flex-item-align: stretch;\n  align-self: stretch;\n  max-width: 100%; }\n\n.item-select ion-label[floating] {\n  -webkit-transform: translate3d(0, 0, 0) scale(0.8);\n  transform: translate3d(0, 0, 0) scale(0.8); }\n\nion-label {\n  margin: 12px 8px 13px 0; }\n\n.item-input ion-label,\n.item-select ion-label,\n.item-datetime ion-label {\n  color: #7f7f7f; }\n\nion-label + ion-input .text-input,\nion-label + ion-textarea .text-input {\n  margin-left: 16px;\n  width: calc(100% - (16px / 2) - 16px); }\n\nion-label[stacked] {\n  margin-bottom: 4px;\n  font-size: 1.2rem; }\n\nion-label[floating] {\n  margin-bottom: 0;\n  -webkit-transform: translate3d(0, 27px, 0);\n  transform: translate3d(0, 27px, 0);\n  -webkit-transform-origin: left top;\n  transform-origin: left top;\n  -webkit-transition: -webkit-transform 150ms ease-in-out;\n  transition: transform 150ms ease-in-out; }\n\n.input-has-focus ion-label[floating],\n.input-has-value ion-label[floating] {\n  -webkit-transform: translate3d(0, 0, 0) scale(0.8);\n  transform: translate3d(0, 0, 0) scale(0.8); }\n\n.item-label-stacked [item-right],\n.item-label-floating [item-right] {\n  margin-top: 6px;\n  margin-bottom: 6px; }\n\n.label-primary,\n.item-input .label-primary,\n.item-select .label-primary,\n.item-datetime .label-primary {\n  color: #327eff; }\n\n.label-secondary,\n.item-input .label-secondary,\n.item-select .label-secondary,\n.item-datetime .label-secondary {\n  color: #32db64; }\n\n.label-danger,\n.item-input .label-danger,\n.item-select .label-danger,\n.item-datetime .label-danger {\n  color: #f53d3d; }\n\n.label-light,\n.item-input .label-light,\n.item-select .label-light,\n.item-datetime .label-light {\n  color: #f4f4f4; }\n\n.label-dark,\n.item-input .label-dark,\n.item-select .label-dark,\n.item-datetime .label-dark {\n  color: #222; }\n\nion-list-header {\n  display: -webkit-box;\n  display: -webkit-flex;\n  display: -ms-flexbox;\n  display: flex;\n  overflow: hidden;\n  -webkit-box-align: center;\n  -webkit-align-items: center;\n  -ms-flex-align: center;\n  align-items: center;\n  -webkit-box-pack: justify;\n  -webkit-justify-content: space-between;\n  -ms-flex-pack: justify;\n  justify-content: space-between;\n  margin: 0;\n  padding: 0;\n  width: 100%;\n  min-height: 4rem; }\n\nion-list {\n  display: block;\n  margin: 0;\n  padding: 0;\n  list-style-type: none; }\n\nion-list[inset] {\n  overflow: hidden;\n  -webkit-transform: translateZ(0);\n  transform: translateZ(0); }\n\nion-list-header {\n  position: relative;\n  padding-left: 16px;\n  border-bottom: 1px solid #c8c7cc;\n  font-size: 1.2rem;\n  font-weight: 500;\n  letter-spacing: 0.1rem;\n  text-transform: uppercase;\n  color: #333; }\n\nion-list {\n  margin: -1px 0 32px 0; }\n  ion-list > .item:first-child {\n    border-top: 1px solid #c8c7cc; }\n  ion-list > .item:last-child,\n  ion-list > .item-wrapper:last-child .item {\n    border-bottom: 1px solid #c8c7cc; }\n  ion-list > .item:last-child .item-inner,\n  ion-list > .item-wrapper:last-child .item-inner {\n    border-bottom: 0; }\n  ion-list .item .item-inner {\n    border-bottom: 1px solid #c8c7cc; }\n  ion-list .item[no-lines],\n  ion-list .item[no-lines] .item-inner {\n    border-width: 0; }\n  ion-list ion-item-options {\n    border-bottom: 1px solid #c8c7cc; }\n  ion-list ion-item-options button,\n  ion-list ion-item-options [button] {\n    display: -webkit-inline-box;\n    display: -webkit-inline-flex;\n    display: -ms-inline-flexbox;\n    display: inline-flex;\n    -webkit-box-align: center;\n    -webkit-align-items: center;\n    -ms-flex-align: center;\n    align-items: center;\n    margin: 0;\n    height: 100%;\n    min-height: 100%;\n    border: 0;\n    border-radius: 0;\n    box-sizing: border-box; }\n    ion-list ion-item-options button::before,\n    ion-list ion-item-options [button]::before {\n      margin: 0 auto; }\n\nion-list + ion-list ion-list-header {\n  margin-top: -10px;\n  padding-top: 0; }\n\n.hairlines ion-list-header {\n  border-bottom-width: 0.55px; }\n\n.hairlines ion-list ion-item-options {\n  border-width: 0.55px; }\n\n.hairlines ion-list .item .item-inner {\n  border-width: 0.55px; }\n\n.hairlines ion-list > .item:first-child {\n  border-top-width: 0.55px; }\n\n.hairlines ion-list > .item:last-child,\n.hairlines ion-list > .item-wrapper:last-child .item {\n  border-bottom-width: 0.55px; }\n\nion-list[inset] {\n  margin: 16px 16px 16px 16px;\n  border-radius: 4px; }\n  ion-list[inset] ion-list-header {\n    background-color: #fff; }\n  ion-list[inset] .item {\n    border-bottom: 1px solid #c8c7cc; }\n    ion-list[inset] .item .item-inner {\n      border-bottom: 0; }\n  ion-list[inset] > .item:first-child,\n  ion-list[inset] > .item-wrapper:first-child .item {\n    border-top: 0; }\n  ion-list[inset] > .item:last-child,\n  ion-list[inset] > .item-wrapper:last-child .item {\n    border-bottom: 0; }\n\nion-list[inset] + ion-list[inset] {\n  margin-top: 0; }\n\n.hairlines ion-list[inset] .item {\n  border-width: 0.55px; }\n\nion-list[no-lines] ion-list-header,\nion-list[no-lines] ion-item-options,\nion-list[no-lines] .item,\nion-list[no-lines] .item .item-inner,\n.hairlines ion-list[no-lines] ion-list-header,\n.hairlines ion-list[no-lines] ion-item-options,\n.hairlines ion-list[no-lines] .item,\n.hairlines ion-list[no-lines] .item .item-inner {\n  border-width: 0; }\n\nion-loading {\n  position: absolute;\n  top: 0;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  z-index: 1000;\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  -webkit-box-pack: center;\n  -webkit-justify-content: center;\n  -ms-flex-pack: center;\n  justify-content: center; }\n\n.loading-wrapper {\n  z-index: 10;\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  opacity: 0; }\n\n.loading-wrapper {\n  padding: 24px 34px;\n  max-width: 270px;\n  max-height: 90%;\n  border-radius: 8px;\n  color: #000;\n  background: #f8f8f8; }\n\n.loading-content {\n  font-weight: bold; }\n\n.loading-spinner + .loading-content {\n  margin-left: 16px; }\n\n.loading-spinner .spinner-ios line,\n.loading-spinner .spinner-ios-small line {\n  stroke: #69717d; }\n\n.loading-spinner .spinner-bubbles circle {\n  fill: #69717d; }\n\n.loading-spinner .spinner-circles circle {\n  fill: #69717d; }\n\n.loading-spinner .spinner-crescent circle {\n  stroke: #69717d; }\n\n.loading-spinner .spinner-dots circle {\n  fill: #69717d; }\n\n.menu-inner {\n  background: #fff; }\n\n.menu-content-reveal {\n  box-shadow: 0 0 10px rgba(0, 0, 0, 0.25); }\n\n.menu-content-push {\n  box-shadow: 0 0 10px rgba(0, 0, 0, 0.25); }\n\nion-menu[type=overlay] .menu-inner {\n  box-shadow: 0 0 10px rgba(0, 0, 0, 0.25); }\n\n.modal-wrapper {\n  -webkit-transform: translate3d(0, 100%, 0);\n  transform: translate3d(0, 100%, 0); }\n\nion-picker-cmp {\n  position: absolute;\n  top: 0;\n  left: 0;\n  z-index: 1000;\n  display: block;\n  width: 100%;\n  height: 100%; }\n\n.picker-toolbar {\n  z-index: 1; }\n\n.picker-wrapper {\n  position: absolute;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  z-index: 10;\n  display: -webkit-box;\n  display: -webkit-flex;\n  display: -ms-flexbox;\n  display: flex;\n  overflow: hidden;\n  -webkit-box-orient: vertical;\n  -webkit-box-direction: normal;\n  -webkit-flex-direction: column;\n  -ms-flex-direction: column;\n  flex-direction: column;\n  margin: auto;\n  width: 100%;\n  max-width: 500px;\n  -webkit-transform: translate3d(0, 100%, 0);\n  transform: translate3d(0, 100%, 0); }\n\n.picker-columns {\n  position: relative;\n  display: -webkit-box;\n  display: -webkit-flex;\n  display: -ms-flexbox;\n  display: flex;\n  overflow: hidden;\n  -webkit-box-pack: center;\n  -webkit-justify-content: center;\n  -ms-flex-pack: center;\n  justify-content: center; }\n\n.picker-col {\n  position: relative;\n  display: -webkit-box;\n  display: -webkit-flex;\n  display: -ms-flexbox;\n  display: flex;\n  max-height: 100%; }\n\n.picker-opts {\n  position: relative;\n  width: 100%;\n  min-width: 50px;\n  max-width: 100%; }\n\n.picker-prefix {\n  position: relative;\n  -webkit-box-flex: 1;\n  -webkit-flex: 1;\n  -ms-flex: 1;\n  flex: 1;\n  min-width: 50px;\n  min-width: 45%;\n  text-align: right;\n  white-space: nowrap; }\n\n.picker-suffix {\n  position: relative;\n  -webkit-box-flex: 1;\n  -webkit-flex: 1;\n  -ms-flex: 1;\n  flex: 1;\n  min-width: 50px;\n  min-width: 45%;\n  text-align: left;\n  white-space: nowrap; }\n\n.picker-opt {\n  position: absolute;\n  top: 0;\n  left: 0;\n  overflow: hidden;\n  -webkit-box-flex: 1;\n  -webkit-flex: 1;\n  -ms-flex: 1;\n  flex: 1;\n  width: 100%; }\n\n.picker-opt .button-inner {\n  display: block;\n  overflow: hidden;\n  text-overflow: ellipsis;\n  white-space: nowrap;\n  -webkit-transition: opacity 150ms ease-in-out;\n  transition: opacity 150ms ease-in-out; }\n\n.picker-opt.picker-opt-disabled {\n  pointer-events: none; }\n\n.picker-opt-disabled .button-inner {\n  opacity: 0; }\n\n.picker-opts-left .button-inner {\n  -webkit-box-pack: start;\n  -webkit-justify-content: flex-start;\n  -ms-flex-pack: start;\n  justify-content: flex-start; }\n\n.picker-opts-right .button-inner {\n  -webkit-box-pack: end;\n  -webkit-justify-content: flex-end;\n  -ms-flex-pack: end;\n  justify-content: flex-end; }\n\n.picker-above-highlight,\n.picker-below-highlight {\n  display: none;\n  pointer-events: none; }\n\n.picker-wrapper {\n  height: 260px;\n  border-top: 1px solid #c8c7cc;\n  background: #fff; }\n\n.picker-toolbar {\n  display: -webkit-box;\n  display: -webkit-flex;\n  display: -ms-flexbox;\n  display: flex;\n  height: 44px;\n  border-bottom: 1px solid #c8c7cc;\n  background: #fff; }\n\n.hairlines .picker-wrapper,\n.hairlines .picker-toolbar {\n  border-width: 0.55px; }\n\n.picker-toolbar-button {\n  -webkit-box-flex: 1;\n  -webkit-flex: 1;\n  -ms-flex: 1;\n  flex: 1;\n  text-align: right; }\n\n.picker-toolbar-cancel {\n  font-weight: normal;\n  text-align: left; }\n\n.picker-button,\n.picker-button.activated {\n  margin: 0;\n  height: 44px;\n  color: #327eff;\n  background: transparent; }\n\n.picker-columns {\n  height: 216px;\n  -webkit-perspective: 1000px;\n  perspective: 1000px; }\n\n.picker-col {\n  padding: 0 4px;\n  -webkit-transform-style: preserve-3d;\n  transform-style: preserve-3d; }\n\n.picker-prefix,\n.picker-suffix,\n.picker-opts {\n  top: 77px;\n  font-size: 20px;\n  line-height: 42px;\n  color: #000;\n  -webkit-transform-style: preserve-3d;\n  transform-style: preserve-3d;\n  pointer-events: none; }\n\n.picker-opt {\n  margin: 0;\n  padding: 0;\n  font-size: 20px;\n  line-height: 42px;\n  background: transparent;\n  -webkit-transform-origin: center center;\n  transform-origin: center center;\n  -webkit-transform-style: preserve-3d;\n  transform-style: preserve-3d;\n  -webkit-transition-timing-function: ease-out;\n  transition-timing-function: ease-out;\n  -webkit-backface-visibility: hidden;\n  backface-visibility: hidden;\n  pointer-events: auto; }\n\n.picker-above-highlight {\n  position: absolute;\n  top: 0;\n  left: 0;\n  z-index: 10;\n  display: block;\n  width: 100%;\n  height: 81px;\n  border-bottom: 1px solid #c8c7cc;\n  background: -webkit-linear-gradient(top, white 20%, rgba(255, 255, 255, 0.7) 100%);\n  background: linear-gradient(to bottom, white 20%, rgba(255, 255, 255, 0.7) 100%);\n  -webkit-transform: translate3d(0, 0, 90px);\n  transform: translate3d(0, 0, 90px); }\n\n.picker-below-highlight {\n  position: absolute;\n  top: 115px;\n  left: 0;\n  z-index: 11;\n  display: block;\n  width: 100%;\n  height: 119px;\n  border-top: 1px solid #c8c7cc;\n  background: -webkit-linear-gradient(bottom, white 30%, rgba(255, 255, 255, 0.7) 100%);\n  background: linear-gradient(to top, white 30%, rgba(255, 255, 255, 0.7) 100%);\n  -webkit-transform: translate3d(0, 0, 90px);\n  transform: translate3d(0, 0, 90px); }\n\nion-popover {\n  position: absolute;\n  top: 0;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  z-index: 1000;\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  -webkit-box-pack: center;\n  -webkit-justify-content: center;\n  -ms-flex-pack: center;\n  justify-content: center; }\n\n.popover-wrapper {\n  z-index: 10;\n  opacity: 0; }\n\n.popover-content {\n  position: absolute;\n  z-index: 10;\n  display: -webkit-box;\n  display: -webkit-flex;\n  display: -ms-flexbox;\n  display: flex;\n  overflow: auto;\n  -webkit-box-orient: vertical;\n  -webkit-box-direction: normal;\n  -webkit-flex-direction: column;\n  -ms-flex-direction: column;\n  flex-direction: column; }\n  .popover-content scroll-content {\n    position: relative; }\n\n.popover-content {\n  width: 200px;\n  min-width: 0;\n  min-height: 0;\n  max-height: 90%;\n  border-radius: 10px;\n  color: #000;\n  background: #fff; }\n  .popover-content ion-content {\n    background: #fff; }\n\n.popover-content .item {\n  background-color: #fff; }\n\n.popover-arrow {\n  position: absolute;\n  display: block;\n  overflow: hidden;\n  width: 20px;\n  height: 10px; }\n  .popover-arrow::after {\n    position: absolute;\n    top: 3px;\n    left: 3px;\n    z-index: 10;\n    width: 14px;\n    height: 14px;\n    border-radius: 3px;\n    background-color: #fff;\n    content: \"\";\n    -webkit-transform: rotate(45deg);\n    transform: rotate(45deg); }\n\n.popover-bottom .popover-arrow {\n  top: auto;\n  bottom: -10px; }\n  .popover-bottom .popover-arrow::after {\n    top: -6px; }\n\nion-radio {\n  position: relative;\n  display: inline-block; }\n\n.radio-icon {\n  position: relative;\n  display: block;\n  width: 16px;\n  height: 21px; }\n\n.radio-checked .radio-inner {\n  position: absolute;\n  top: 4px;\n  left: 7px;\n  width: 5px;\n  height: 12px;\n  border-width: 2px;\n  border-top-width: 0;\n  border-left-width: 0;\n  border-style: solid;\n  border-color: #327eff;\n  -webkit-transform: rotate(45deg);\n  transform: rotate(45deg); }\n\n.radio-disabled,\n.item-radio-disabled ion-label {\n  opacity: 0.3;\n  pointer-events: none; }\n\n.item ion-radio {\n  position: static;\n  display: block;\n  margin: 8px 11px 8px 8px; }\n  .item ion-radio[item-left] {\n    margin: 8px 21px 8px 3px; }\n\n.item-radio ion-label {\n  margin-left: 0; }\n\n.item-radio-checked ion-label {\n  color: #327eff; }\n\n.item-radio-primary.item-radio-checked ion-label {\n  color: #327eff; }\n\n.radio-primary .radio-checked {\n  color: #327eff; }\n  .radio-primary .radio-checked .radio-inner {\n    border-color: #327eff; }\n\n.item-radio-secondary.item-radio-checked ion-label {\n  color: #32db64; }\n\n.radio-secondary .radio-checked {\n  color: #32db64; }\n  .radio-secondary .radio-checked .radio-inner {\n    border-color: #32db64; }\n\n.item-radio-danger.item-radio-checked ion-label {\n  color: #f53d3d; }\n\n.radio-danger .radio-checked {\n  color: #f53d3d; }\n  .radio-danger .radio-checked .radio-inner {\n    border-color: #f53d3d; }\n\n.item-radio-light.item-radio-checked ion-label {\n  color: #f4f4f4; }\n\n.radio-light .radio-checked {\n  color: #f4f4f4; }\n  .radio-light .radio-checked .radio-inner {\n    border-color: #f4f4f4; }\n\n.item-radio-dark.item-radio-checked ion-label {\n  color: #222; }\n\n.radio-dark .radio-checked {\n  color: #222; }\n  .radio-dark .radio-checked .radio-inner {\n    border-color: #222; }\n\n.item-range .item-inner {\n  overflow: visible; }\n\n.item-range .input-wrapper {\n  overflow: visible;\n  -webkit-box-orient: vertical;\n  -webkit-box-direction: normal;\n  -webkit-flex-direction: column;\n  -ms-flex-direction: column;\n  flex-direction: column; }\n\n.item-range ion-range {\n  width: 100%; }\n  .item-range ion-range ion-label {\n    -webkit-align-self: center;\n    -ms-flex-item-align: center;\n    align-self: center; }\n\nion-range {\n  position: relative;\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  ion-range ion-label {\n    -webkit-box-flex: initial;\n    -webkit-flex: initial;\n    -ms-flex: initial;\n    flex: initial; }\n  ion-range ion-icon {\n    min-height: 2.4rem;\n    font-size: 2.4rem;\n    line-height: 1; }\n\n.range-slider {\n  position: relative;\n  -webkit-box-flex: 1;\n  -webkit-flex: 1;\n  -ms-flex: 1;\n  flex: 1;\n  cursor: pointer; }\n\nion-range {\n  padding: 8px 16px; }\n\n[range-left],\n[range-right] {\n  margin: 0 20px; }\n\n[range-left] {\n  margin-left: 0; }\n\n[range-right] {\n  margin-right: 0; }\n\n.range-has-pin {\n  padding-top: 20px; }\n\n.range-slider {\n  height: 42px; }\n\n.range-bar {\n  position: absolute;\n  top: 21px;\n  left: 0;\n  width: 100%;\n  height: 1px;\n  border-radius: 1px;\n  background: #bdbdbd;\n  pointer-events: none; }\n\n.range-pressed .range-bar-active {\n  will-change: left, right; }\n\n.range-pressed .range-knob-handle {\n  will-change: left; }\n\n.range-bar-active {\n  bottom: 0;\n  width: auto;\n  background: #327eff; }\n\n.range-knob-handle {\n  position: absolute;\n  top: 21px;\n  left: 0%;\n  margin-top: -21px;\n  margin-left: -21px;\n  width: 42px;\n  height: 42px;\n  text-align: center; }\n\n.range-knob {\n  position: absolute;\n  top: 7px;\n  left: 7px;\n  width: 28px;\n  height: 28px;\n  border-radius: 50%;\n  background: #fff;\n  box-shadow: 0 3px 1px rgba(0, 0, 0, 0.1), 0 4px 8px rgba(0, 0, 0, 0.13), 0 0 0 1px rgba(0, 0, 0, 0.02);\n  pointer-events: none; }\n\n.range-tick {\n  position: absolute;\n  top: 17.5px;\n  margin-left: -0.5px;\n  width: 1px;\n  height: 8px;\n  border-radius: 0;\n  background: #bdbdbd;\n  pointer-events: none; }\n\n.range-tick-active {\n  background: #327eff; }\n\n.range-pin {\n  position: relative;\n  top: -20px;\n  display: inline-block;\n  padding: 8px;\n  min-width: 28px;\n  border-radius: 50px;\n  font-size: 12px;\n  text-align: center;\n  color: #000;\n  background: transparent;\n  -webkit-transform: translate3d(0, 28px, 0) scale(0.01);\n  transform: translate3d(0, 28px, 0) scale(0.01);\n  -webkit-transition: -webkit-transform 120ms ease;\n  transition: transform 120ms ease; }\n\n.range-knob-pressed .range-pin {\n  -webkit-transform: translate3d(0, 0, 0) scale(1);\n  transform: translate3d(0, 0, 0) scale(1); }\n\n.range-disabled {\n  opacity: .5; }\n\n.range-primary .range-bar-active,\n.range-primary .range-tick-active {\n  background: #327eff; }\n\n.range-secondary .range-bar-active,\n.range-secondary .range-tick-active {\n  background: #32db64; }\n\n.range-danger .range-bar-active,\n.range-danger .range-tick-active {\n  background: #f53d3d; }\n\n.range-light .range-bar-active,\n.range-light .range-tick-active {\n  background: #f4f4f4; }\n\n.range-dark .range-bar-active,\n.range-dark .range-tick-active {\n  background: #222; }\n\nion-searchbar {\n  position: relative;\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  width: 100%; }\n\n.searchbar-icon {\n  pointer-events: none; }\n\n.searchbar-input-container {\n  position: relative;\n  display: block;\n  -webkit-flex-shrink: 1;\n  -ms-flex-negative: 1;\n  flex-shrink: 1;\n  width: 100%; }\n\n.searchbar-input {\n  -webkit-appearance: none;\n  -moz-appearance: none;\n  display: block;\n  width: 100%;\n  border: 0;\n  font-family: inherit; }\n\n.searchbar-clear-icon {\n  display: none;\n  margin: 0;\n  padding: 0;\n  min-height: 0; }\n\n.searchbar-has-value.searchbar-has-focus .searchbar-clear-icon {\n  display: block; }\n\nion-searchbar {\n  padding: 0 8px;\n  min-height: 44px;\n  border-top: 1px solid transparent;\n  border-bottom: 1px solid rgba(0, 0, 0, 0.05);\n  background: rgba(0, 0, 0, 0.2); }\n\n.searchbar-search-icon {\n  background-image: url(\"data:image/svg+xml;charset=utf-8,<svg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%2013%2013'><path%20fill='rgba(0,%200,%200,%200.5)'%20d='M5,1c2.2,0,4,1.8,4,4S7.2,9,5,9S1,7.2,1,5S2.8,1,5,1%20M5,0C2.2,0,0,2.2,0,5s2.2,5,5,5s5-2.2,5-5S7.8,0,5,0%20L5,0z'/><line%20stroke='rgba(0,%200,%200,%200.5)'%20stroke-miterlimit='10'%20x1='12.6'%20y1='12.6'%20x2='8.2'%20y2='8.2'/></svg>\");\n  margin-left: calc(50% - 60px);\n  position: absolute;\n  top: 9px;\n  left: 9px;\n  width: 14px;\n  height: 14px;\n  background-repeat: no-repeat;\n  background-size: 13px;\n  -webkit-transition: all 300ms ease;\n  transition: all 300ms ease; }\n\n.searchbar-input {\n  padding-left: calc(50% - 28px);\n  padding: 0 28px;\n  height: 3rem;\n  border-radius: 5px;\n  font-size: 1.4rem;\n  font-weight: 400;\n  color: #000;\n  background-color: #fff;\n  -webkit-transition: all 300ms ease;\n  transition: all 300ms ease; }\n  .searchbar-input::-moz-placeholder {\n    color: rgba(0, 0, 0, 0.5); }\n  .searchbar-input:-ms-input-placeholder {\n    color: rgba(0, 0, 0, 0.5); }\n  .searchbar-input::-webkit-input-placeholder {\n    text-indent: 0;\n    color: rgba(0, 0, 0, 0.5); }\n\n.searchbar-clear-icon {\n  background-image: url(\"data:image/svg+xml;charset=utf-8,<svg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%20512%20512'><path%20fill='rgba(0,%200,%200,%200.5)'%20d='M403.1,108.9c-81.2-81.2-212.9-81.2-294.2,0s-81.2,212.9,0,294.2c81.2,81.2,212.9,81.2,294.2,0S484.3,190.1,403.1,108.9z%20M352,340.2L340.2,352l-84.4-84.2l-84,83.8L160,339.8l84-83.8l-84-83.8l11.8-11.8l84,83.8l84.4-84.2l11.8,11.8L267.6,256L352,340.2z'/></svg>\");\n  position: absolute;\n  top: 0;\n  right: 0;\n  width: 30px;\n  height: 100%;\n  background-repeat: no-repeat;\n  background-position: center;\n  background-size: 18px; }\n\n.searchbar-ios-cancel {\n  display: none;\n  -webkit-flex-shrink: 0;\n  -ms-flex-negative: 0;\n  flex-shrink: 0;\n  margin-right: -100%;\n  margin-left: 0;\n  padding: 0;\n  padding-left: 8px;\n  height: 30px;\n  cursor: pointer;\n  opacity: 0;\n  -webkit-transform: translate3d(0, 0, 0);\n  transform: translate3d(0, 0, 0);\n  -webkit-transition: all 300ms ease;\n  transition: all 300ms ease;\n  pointer-events: none; }\n\n.searchbar-show-cancel .searchbar-ios-cancel {\n  display: block; }\n\n.searchbar-left-aligned .searchbar-search-icon {\n  margin-left: 0; }\n\n.searchbar-left-aligned .searchbar-input {\n  padding-left: 30px; }\n\n.searchbar-has-focus .searchbar-ios-cancel {\n  opacity: 1;\n  pointer-events: auto; }\n\n.toolbar ion-searchbar {\n  border-bottom-width: 0;\n  background: transparent; }\n  .toolbar ion-searchbar .searchbar-input {\n    background: rgba(0, 0, 0, 0.08); }\n  .toolbar ion-searchbar .searchbar-ios-cancel {\n    padding: 0; }\n\n.toolbar .searchbar-has-focus .searchbar-ios-cancel {\n  padding-left: 8px; }\n\n.searchbar-md-cancel {\n  display: none; }\n\n.hairlines ion-searchbar {\n  border-bottom-width: 0.55px; }\n\n.hairlines ion-toolbar ion-searchbar {\n  border-bottom-width: 0; }\n\n.searchbar-primary .searchbar-ios-cancel {\n  color: #327eff; }\n  .searchbar-primary .searchbar-ios-cancel:hover:not(.disable-hover) {\n    color: #2e74eb; }\n\n.toolbar-primary ion-searchbar .searchbar-search-icon {\n  background-image: url(\"data:image/svg+xml;charset=utf-8,<svg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%2013%2013'><path%20fill='rgba(255,%20255,%20255,%200.5)'%20d='M5,1c2.2,0,4,1.8,4,4S7.2,9,5,9S1,7.2,1,5S2.8,1,5,1%20M5,0C2.2,0,0,2.2,0,5s2.2,5,5,5s5-2.2,5-5S7.8,0,5,0%20L5,0z'/><line%20stroke='rgba(255,%20255,%20255,%200.5)'%20stroke-miterlimit='10'%20x1='12.6'%20y1='12.6'%20x2='8.2'%20y2='8.2'/></svg>\"); }\n\n.toolbar-primary ion-searchbar .searchbar-input {\n  color: #fff;\n  background: rgba(255, 255, 255, 0.08); }\n  .toolbar-primary ion-searchbar .searchbar-input::-moz-placeholder {\n    color: rgba(255, 255, 255, 0.5); }\n  .toolbar-primary ion-searchbar .searchbar-input:-ms-input-placeholder {\n    color: rgba(255, 255, 255, 0.5); }\n  .toolbar-primary ion-searchbar .searchbar-input::-webkit-input-placeholder {\n    text-indent: 0;\n    color: rgba(255, 255, 255, 0.5); }\n\n.toolbar-primary ion-searchbar .searchbar-clear-icon {\n  background-image: url(\"data:image/svg+xml;charset=utf-8,<svg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%20512%20512'><path%20fill='rgba(255,%20255,%20255,%200.5)'%20d='M403.1,108.9c-81.2-81.2-212.9-81.2-294.2,0s-81.2,212.9,0,294.2c81.2,81.2,212.9,81.2,294.2,0S484.3,190.1,403.1,108.9z%20M352,340.2L340.2,352l-84.4-84.2l-84,83.8L160,339.8l84-83.8l-84-83.8l11.8-11.8l84,83.8l84.4-84.2l11.8,11.8L267.6,256L352,340.2z'/></svg>\"); }\n\n.toolbar-primary ion-searchbar .searchbar-ios-cancel {\n  color: #fff; }\n\n.searchbar-secondary .searchbar-ios-cancel {\n  color: #32db64; }\n  .searchbar-secondary .searchbar-ios-cancel:hover:not(.disable-hover) {\n    color: #2ec95c; }\n\n.toolbar-secondary ion-searchbar .searchbar-search-icon {\n  background-image: url(\"data:image/svg+xml;charset=utf-8,<svg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%2013%2013'><path%20fill='rgba(255,%20255,%20255,%200.5)'%20d='M5,1c2.2,0,4,1.8,4,4S7.2,9,5,9S1,7.2,1,5S2.8,1,5,1%20M5,0C2.2,0,0,2.2,0,5s2.2,5,5,5s5-2.2,5-5S7.8,0,5,0%20L5,0z'/><line%20stroke='rgba(255,%20255,%20255,%200.5)'%20stroke-miterlimit='10'%20x1='12.6'%20y1='12.6'%20x2='8.2'%20y2='8.2'/></svg>\"); }\n\n.toolbar-secondary ion-searchbar .searchbar-input {\n  color: #fff;\n  background: rgba(255, 255, 255, 0.08); }\n  .toolbar-secondary ion-searchbar .searchbar-input::-moz-placeholder {\n    color: rgba(255, 255, 255, 0.5); }\n  .toolbar-secondary ion-searchbar .searchbar-input:-ms-input-placeholder {\n    color: rgba(255, 255, 255, 0.5); }\n  .toolbar-secondary ion-searchbar .searchbar-input::-webkit-input-placeholder {\n    text-indent: 0;\n    color: rgba(255, 255, 255, 0.5); }\n\n.toolbar-secondary ion-searchbar .searchbar-clear-icon {\n  background-image: url(\"data:image/svg+xml;charset=utf-8,<svg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%20512%20512'><path%20fill='rgba(255,%20255,%20255,%200.5)'%20d='M403.1,108.9c-81.2-81.2-212.9-81.2-294.2,0s-81.2,212.9,0,294.2c81.2,81.2,212.9,81.2,294.2,0S484.3,190.1,403.1,108.9z%20M352,340.2L340.2,352l-84.4-84.2l-84,83.8L160,339.8l84-83.8l-84-83.8l11.8-11.8l84,83.8l84.4-84.2l11.8,11.8L267.6,256L352,340.2z'/></svg>\"); }\n\n.toolbar-secondary ion-searchbar .searchbar-ios-cancel {\n  color: #fff; }\n\n.searchbar-danger .searchbar-ios-cancel {\n  color: #f53d3d; }\n  .searchbar-danger .searchbar-ios-cancel:hover:not(.disable-hover) {\n    color: #e13838; }\n\n.toolbar-danger ion-searchbar .searchbar-search-icon {\n  background-image: url(\"data:image/svg+xml;charset=utf-8,<svg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%2013%2013'><path%20fill='rgba(255,%20255,%20255,%200.5)'%20d='M5,1c2.2,0,4,1.8,4,4S7.2,9,5,9S1,7.2,1,5S2.8,1,5,1%20M5,0C2.2,0,0,2.2,0,5s2.2,5,5,5s5-2.2,5-5S7.8,0,5,0%20L5,0z'/><line%20stroke='rgba(255,%20255,%20255,%200.5)'%20stroke-miterlimit='10'%20x1='12.6'%20y1='12.6'%20x2='8.2'%20y2='8.2'/></svg>\"); }\n\n.toolbar-danger ion-searchbar .searchbar-input {\n  color: #fff;\n  background: rgba(255, 255, 255, 0.08); }\n  .toolbar-danger ion-searchbar .searchbar-input::-moz-placeholder {\n    color: rgba(255, 255, 255, 0.5); }\n  .toolbar-danger ion-searchbar .searchbar-input:-ms-input-placeholder {\n    color: rgba(255, 255, 255, 0.5); }\n  .toolbar-danger ion-searchbar .searchbar-input::-webkit-input-placeholder {\n    text-indent: 0;\n    color: rgba(255, 255, 255, 0.5); }\n\n.toolbar-danger ion-searchbar .searchbar-clear-icon {\n  background-image: url(\"data:image/svg+xml;charset=utf-8,<svg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%20512%20512'><path%20fill='rgba(255,%20255,%20255,%200.5)'%20d='M403.1,108.9c-81.2-81.2-212.9-81.2-294.2,0s-81.2,212.9,0,294.2c81.2,81.2,212.9,81.2,294.2,0S484.3,190.1,403.1,108.9z%20M352,340.2L340.2,352l-84.4-84.2l-84,83.8L160,339.8l84-83.8l-84-83.8l11.8-11.8l84,83.8l84.4-84.2l11.8,11.8L267.6,256L352,340.2z'/></svg>\"); }\n\n.toolbar-danger ion-searchbar .searchbar-ios-cancel {\n  color: #fff; }\n\n.searchbar-light .searchbar-ios-cancel {\n  color: #f4f4f4; }\n  .searchbar-light .searchbar-ios-cancel:hover:not(.disable-hover) {\n    color: #e0e0e0; }\n\n.toolbar-light ion-searchbar .searchbar-search-icon {\n  background-image: url(\"data:image/svg+xml;charset=utf-8,<svg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%2013%2013'><path%20fill='rgba(0,%200,%200,%200.5)'%20d='M5,1c2.2,0,4,1.8,4,4S7.2,9,5,9S1,7.2,1,5S2.8,1,5,1%20M5,0C2.2,0,0,2.2,0,5s2.2,5,5,5s5-2.2,5-5S7.8,0,5,0%20L5,0z'/><line%20stroke='rgba(0,%200,%200,%200.5)'%20stroke-miterlimit='10'%20x1='12.6'%20y1='12.6'%20x2='8.2'%20y2='8.2'/></svg>\"); }\n\n.toolbar-light ion-searchbar .searchbar-input {\n  color: #000;\n  background: rgba(0, 0, 0, 0.08); }\n  .toolbar-light ion-searchbar .searchbar-input::-moz-placeholder {\n    color: rgba(0, 0, 0, 0.5); }\n  .toolbar-light ion-searchbar .searchbar-input:-ms-input-placeholder {\n    color: rgba(0, 0, 0, 0.5); }\n  .toolbar-light ion-searchbar .searchbar-input::-webkit-input-placeholder {\n    text-indent: 0;\n    color: rgba(0, 0, 0, 0.5); }\n\n.toolbar-light ion-searchbar .searchbar-clear-icon {\n  background-image: url(\"data:image/svg+xml;charset=utf-8,<svg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%20512%20512'><path%20fill='rgba(0,%200,%200,%200.5)'%20d='M403.1,108.9c-81.2-81.2-212.9-81.2-294.2,0s-81.2,212.9,0,294.2c81.2,81.2,212.9,81.2,294.2,0S484.3,190.1,403.1,108.9z%20M352,340.2L340.2,352l-84.4-84.2l-84,83.8L160,339.8l84-83.8l-84-83.8l11.8-11.8l84,83.8l84.4-84.2l11.8,11.8L267.6,256L352,340.2z'/></svg>\"); }\n\n.toolbar-light ion-searchbar .searchbar-ios-cancel {\n  color: #327eff; }\n\n.searchbar-dark .searchbar-ios-cancel {\n  color: #222; }\n  .searchbar-dark .searchbar-ios-cancel:hover:not(.disable-hover) {\n    color: #343434; }\n\n.toolbar-dark ion-searchbar .searchbar-search-icon {\n  background-image: url(\"data:image/svg+xml;charset=utf-8,<svg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%2013%2013'><path%20fill='rgba(255,%20255,%20255,%200.5)'%20d='M5,1c2.2,0,4,1.8,4,4S7.2,9,5,9S1,7.2,1,5S2.8,1,5,1%20M5,0C2.2,0,0,2.2,0,5s2.2,5,5,5s5-2.2,5-5S7.8,0,5,0%20L5,0z'/><line%20stroke='rgba(255,%20255,%20255,%200.5)'%20stroke-miterlimit='10'%20x1='12.6'%20y1='12.6'%20x2='8.2'%20y2='8.2'/></svg>\"); }\n\n.toolbar-dark ion-searchbar .searchbar-input {\n  color: #fff;\n  background: rgba(255, 255, 255, 0.08); }\n  .toolbar-dark ion-searchbar .searchbar-input::-moz-placeholder {\n    color: rgba(255, 255, 255, 0.5); }\n  .toolbar-dark ion-searchbar .searchbar-input:-ms-input-placeholder {\n    color: rgba(255, 255, 255, 0.5); }\n  .toolbar-dark ion-searchbar .searchbar-input::-webkit-input-placeholder {\n    text-indent: 0;\n    color: rgba(255, 255, 255, 0.5); }\n\n.toolbar-dark ion-searchbar .searchbar-clear-icon {\n  background-image: url(\"data:image/svg+xml;charset=utf-8,<svg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%20512%20512'><path%20fill='rgba(255,%20255,%20255,%200.5)'%20d='M403.1,108.9c-81.2-81.2-212.9-81.2-294.2,0s-81.2,212.9,0,294.2c81.2,81.2,212.9,81.2,294.2,0S484.3,190.1,403.1,108.9z%20M352,340.2L340.2,352l-84.4-84.2l-84,83.8L160,339.8l84-83.8l-84-83.8l11.8-11.8l84,83.8l84.4-84.2l11.8,11.8L267.6,256L352,340.2z'/></svg>\"); }\n\n.toolbar-dark ion-searchbar .searchbar-ios-cancel {\n  color: #fff; }\n\nion-segment {\n  display: -webkit-box;\n  display: -webkit-flex;\n  display: -ms-flexbox;\n  display: flex;\n  -webkit-box-flex: 1;\n  -webkit-flex: 1;\n  -ms-flex: 1;\n  flex: 1;\n  -webkit-box-align: center;\n  -webkit-align-items: center;\n  -ms-flex-align: center;\n  align-items: center;\n  -webkit-box-pack: center;\n  -webkit-justify-content: center;\n  -ms-flex-pack: center;\n  justify-content: center;\n  width: 100%; }\n\n.segment-button {\n  position: relative;\n  display: block;\n  overflow: hidden;\n  margin-right: 0;\n  margin-left: 0;\n  text-align: center;\n  text-overflow: ellipsis;\n  white-space: nowrap;\n  cursor: pointer; }\n\n.segment-button {\n  -webkit-box-flex: 1;\n  -webkit-flex: 1;\n  -ms-flex: 1;\n  flex: 1;\n  width: 0;\n  height: 3.2rem;\n  border-width: 1px;\n  border-style: solid;\n  border-color: #327eff;\n  font-size: 1.3rem;\n  line-height: 3rem;\n  color: #327eff;\n  background-color: transparent; }\n  .segment-button ion-icon {\n    font-size: 2.6rem;\n    line-height: 2.8rem; }\n  .segment-button.segment-activated {\n    color: #fff;\n    background-color: #327eff;\n    opacity: 1;\n    -webkit-transition: 100ms all linear;\n    transition: 100ms all linear; }\n  .segment-button:hover:not(.segment-activated) {\n    background-color: rgba(50, 126, 255, 0.1);\n    -webkit-transition: 100ms all linear;\n    transition: 100ms all linear; }\n  .segment-button:active:not(.segment-activated) {\n    background-color: rgba(50, 126, 255, 0.16);\n    -webkit-transition: 100ms all linear;\n    transition: 100ms all linear; }\n  .segment-button:first-of-type {\n    margin-right: 0;\n    border-radius: 4px 0 0 4px; }\n  .segment-button:not(:first-of-type) {\n    border-left-width: 0; }\n  .segment-button:last-of-type {\n    margin-left: 0;\n    border-left-width: 0;\n    border-radius: 0 4px 4px 0; }\n\n.segment-button-disabled {\n  color: rgba(50, 126, 255, 0.3);\n  pointer-events: none; }\n\n.toolbar ion-segment {\n  position: absolute;\n  top: 0;\n  right: 0;\n  bottom: 0;\n  left: 0; }\n\n.toolbar .segment-button {\n  max-width: 100px;\n  height: 2.6rem;\n  font-size: 1.2rem;\n  line-height: 2.5rem; }\n  .toolbar .segment-button ion-icon {\n    font-size: 2.2rem;\n    line-height: 2.4rem; }\n\n.segment-primary .segment-button {\n  border-color: #327eff;\n  color: #327eff; }\n  .segment-primary .segment-button:hover:not(.segment-activated) {\n    background-color: rgba(50, 126, 255, 0.1); }\n  .segment-primary .segment-button:active:not(.segment-activated) {\n    background-color: rgba(50, 126, 255, 0.16); }\n  .segment-primary .segment-button.segment-activated {\n    color: #fff;\n    background-color: #327eff; }\n\n.segment-primary .segment-button-disabled {\n  color: rgba(50, 126, 255, 0.3); }\n\n.toolbar-primary .segment-button.segment-activated {\n  color: #327eff; }\n\n.segment-secondary .segment-button {\n  border-color: #32db64;\n  color: #32db64; }\n  .segment-secondary .segment-button:hover:not(.segment-activated) {\n    background-color: rgba(50, 219, 100, 0.1); }\n  .segment-secondary .segment-button:active:not(.segment-activated) {\n    background-color: rgba(50, 219, 100, 0.16); }\n  .segment-secondary .segment-button.segment-activated {\n    color: #fff;\n    background-color: #32db64; }\n\n.segment-secondary .segment-button-disabled {\n  color: rgba(50, 219, 100, 0.3); }\n\n.toolbar-secondary .segment-button.segment-activated {\n  color: #32db64; }\n\n.segment-danger .segment-button {\n  border-color: #f53d3d;\n  color: #f53d3d; }\n  .segment-danger .segment-button:hover:not(.segment-activated) {\n    background-color: rgba(245, 61, 61, 0.1); }\n  .segment-danger .segment-button:active:not(.segment-activated) {\n    background-color: rgba(245, 61, 61, 0.16); }\n  .segment-danger .segment-button.segment-activated {\n    color: #fff;\n    background-color: #f53d3d; }\n\n.segment-danger .segment-button-disabled {\n  color: rgba(245, 61, 61, 0.3); }\n\n.toolbar-danger .segment-button.segment-activated {\n  color: #f53d3d; }\n\n.segment-light .segment-button {\n  border-color: #f4f4f4;\n  color: #f4f4f4; }\n  .segment-light .segment-button:hover:not(.segment-activated) {\n    background-color: rgba(244, 244, 244, 0.1); }\n  .segment-light .segment-button:active:not(.segment-activated) {\n    background-color: rgba(244, 244, 244, 0.16); }\n  .segment-light .segment-button.segment-activated {\n    color: #000;\n    background-color: #f4f4f4; }\n\n.segment-light .segment-button-disabled {\n  color: rgba(244, 244, 244, 0.3); }\n\n.toolbar-light .segment-button.segment-activated {\n  color: #f4f4f4; }\n\n.segment-dark .segment-button {\n  border-color: #222;\n  color: #222; }\n  .segment-dark .segment-button:hover:not(.segment-activated) {\n    background-color: rgba(34, 34, 34, 0.1); }\n  .segment-dark .segment-button:active:not(.segment-activated) {\n    background-color: rgba(34, 34, 34, 0.16); }\n  .segment-dark .segment-button.segment-activated {\n    color: #fff;\n    background-color: #222; }\n\n.segment-dark .segment-button-disabled {\n  color: rgba(34, 34, 34, 0.3); }\n\n.toolbar-dark .segment-button.segment-activated {\n  color: #222; }\n\nion-select {\n  display: -webkit-box;\n  display: -webkit-flex;\n  display: -ms-flexbox;\n  display: flex;\n  overflow: hidden;\n  max-width: 45%; }\n\n.select-text {\n  overflow: hidden;\n  -webkit-box-flex: 1;\n  -webkit-flex: 1;\n  -ms-flex: 1;\n  flex: 1;\n  min-width: 16px;\n  font-size: inherit;\n  text-overflow: ellipsis;\n  white-space: nowrap; }\n\n.item-multiple-inputs ion-select {\n  position: relative; }\n\n.select-disabled,\n.item-select-disabled ion-label {\n  opacity: .4;\n  pointer-events: none; }\n\nion-select {\n  padding: 12px 8px 13px 16px; }\n\n.select-placeholder {\n  color: #999; }\n\n.select-icon {\n  position: relative;\n  width: 12px;\n  height: 18px; }\n\n.select-icon .select-icon-inner {\n  position: absolute;\n  top: 50%;\n  left: 5px;\n  margin-top: -2px;\n  width: 0;\n  height: 0;\n  border-top: 5px solid;\n  border-right: 5px solid transparent;\n  border-left: 5px solid transparent;\n  color: #999;\n  pointer-events: none; }\n\nion-spinner {\n  position: relative;\n  display: inline-block;\n  width: 28px;\n  height: 28px; }\n\nion-spinner svg {\n  position: absolute;\n  top: 0;\n  left: 0;\n  width: 100%;\n  height: 100%;\n  -webkit-transform: translateZ(0);\n  transform: translateZ(0); }\n\nion-spinner.spinner-paused svg {\n  -webkit-animation-play-state: paused;\n  animation-play-state: paused; }\n\n.spinner-ios line,\n.spinner-ios-small line {\n  stroke: #69717d;\n  stroke-width: 4px;\n  stroke-linecap: round; }\n\n.spinner-ios svg,\n.spinner-ios-small svg {\n  -webkit-animation: spinner-fade-out 1s linear infinite;\n  animation: spinner-fade-out 1s linear infinite; }\n\n.spinner-bubbles circle {\n  fill: #000; }\n\n.spinner-bubbles svg {\n  -webkit-animation: spinner-scale-out 1s linear infinite;\n  animation: spinner-scale-out 1s linear infinite; }\n\n.spinner-circles circle {\n  fill: #69717d; }\n\n.spinner-circles svg {\n  -webkit-animation: spinner-fade-out 1s linear infinite;\n  animation: spinner-fade-out 1s linear infinite; }\n\n.spinner-crescent circle {\n  fill: transparent;\n  stroke: #000;\n  stroke-width: 4px;\n  stroke-dasharray: 128px;\n  stroke-dashoffset: 82px; }\n\n.spinner-crescent svg {\n  -webkit-animation: spinner-rotate 1s linear infinite;\n  animation: spinner-rotate 1s linear infinite; }\n\n.spinner-dots circle {\n  fill: #444;\n  stroke-width: 0; }\n\n.spinner-dots svg {\n  -webkit-transform-origin: center;\n  transform-origin: center;\n  -webkit-animation: spinner-dots 1s linear infinite;\n  animation: spinner-dots 1s linear infinite; }\n\n@keyframes spinner-fade-out {\n  0% {\n    opacity: 1; }\n  100% {\n    opacity: 0; } }\n\n@keyframes spinner-scale-out {\n  0% {\n    -webkit-transform: scale(1, 1);\n    transform: scale(1, 1); }\n  100% {\n    -webkit-transform: scale(0, 0);\n    transform: scale(0, 0); } }\n\n@keyframes spinner-rotate {\n  0% {\n    -webkit-transform: rotate(0deg);\n    transform: rotate(0deg); }\n  100% {\n    -webkit-transform: rotate(360deg);\n    transform: rotate(360deg); } }\n\n@keyframes spinner-dots {\n  0% {\n    opacity: .9;\n    -webkit-transform: scale(1, 1);\n    transform: scale(1, 1); }\n  50% {\n    opacity: .3;\n    -webkit-transform: scale(0.4, 0.4);\n    transform: scale(0.4, 0.4); }\n  100% {\n    opacity: .9;\n    -webkit-transform: scale(1, 1);\n    transform: scale(1, 1); } }\n\n.spinner-primary.spinner-ios line,\n.spinner-primary.spinner-ios-small line,\n.spinner-primary.spinner-crescent circle {\n  stroke: #327eff; }\n\n.spinner-primary.spinner-bubbles circle,\n.spinner-primary.spinner-circles circle,\n.spinner-primary.spinner-dots circle {\n  fill: #327eff; }\n\n.spinner-secondary.spinner-ios line,\n.spinner-secondary.spinner-ios-small line,\n.spinner-secondary.spinner-crescent circle {\n  stroke: #32db64; }\n\n.spinner-secondary.spinner-bubbles circle,\n.spinner-secondary.spinner-circles circle,\n.spinner-secondary.spinner-dots circle {\n  fill: #32db64; }\n\n.spinner-danger.spinner-ios line,\n.spinner-danger.spinner-ios-small line,\n.spinner-danger.spinner-crescent circle {\n  stroke: #f53d3d; }\n\n.spinner-danger.spinner-bubbles circle,\n.spinner-danger.spinner-circles circle,\n.spinner-danger.spinner-dots circle {\n  fill: #f53d3d; }\n\n.spinner-light.spinner-ios line,\n.spinner-light.spinner-ios-small line,\n.spinner-light.spinner-crescent circle {\n  stroke: #f4f4f4; }\n\n.spinner-light.spinner-bubbles circle,\n.spinner-light.spinner-circles circle,\n.spinner-light.spinner-dots circle {\n  fill: #f4f4f4; }\n\n.spinner-dark.spinner-ios line,\n.spinner-dark.spinner-ios-small line,\n.spinner-dark.spinner-crescent circle {\n  stroke: #222; }\n\n.spinner-dark.spinner-bubbles circle,\n.spinner-dark.spinner-circles circle,\n.spinner-dark.spinner-dots circle {\n  fill: #222; }\n\n.tab-button {\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  -ms-user-select: none;\n  user-select: none;\n  position: relative;\n  z-index: 0;\n  display: -webkit-box;\n  display: -webkit-flex;\n  display: -ms-flexbox;\n  display: flex;\n  overflow: hidden;\n  -webkit-box-flex: 1;\n  -webkit-flex: 1;\n  -ms-flex: 1;\n  flex: 1;\n  -webkit-box-orient: vertical;\n  -webkit-box-direction: normal;\n  -webkit-flex-direction: column;\n  -ms-flex-direction: column;\n  flex-direction: column;\n  -webkit-box-align: center;\n  -webkit-align-items: center;\n  -ms-flex-align: center;\n  align-items: center;\n  -webkit-align-self: center;\n  -ms-flex-item-align: center;\n  align-self: center;\n  -webkit-box-pack: center;\n  -webkit-justify-content: center;\n  -ms-flex-pack: center;\n  justify-content: center;\n  margin: 0;\n  border: 0;\n  border-radius: 0;\n  text-align: center;\n  text-decoration: none;\n  background: none;\n  cursor: pointer; }\n\n.tab-disabled {\n  pointer-events: none; }\n  .tab-disabled ion-badge,\n  .tab-disabled ion-icon,\n  .tab-disabled span {\n    opacity: .4; }\n\n.tab-hidden {\n  display: none; }\n\n.tab-button-text {\n  margin-top: 3px;\n  margin-bottom: 2px; }\n\n.tab-button-text,\n.tab-button-icon {\n  display: none;\n  overflow: hidden;\n  -webkit-align-self: center;\n  -ms-flex-item-align: center;\n  align-self: center;\n  min-width: 26px;\n  max-width: 100%;\n  text-overflow: ellipsis;\n  white-space: nowrap; }\n\n.has-icon .tab-button-icon,\n.has-title .tab-button-text {\n  display: block; }\n\n.has-title-only .tab-button-text {\n  white-space: normal; }\n\ntab-highlight {\n  display: none; }\n\n[tabsLayout=icon-bottom] .tab-button .tab-button-icon {\n  -webkit-box-ordinal-group: 11;\n  -webkit-order: 10;\n  -ms-flex-order: 10;\n  order: 10; }\n\n[tabsLayout=icon-left] .tab-button {\n  -webkit-box-orient: horizontal;\n  -webkit-box-direction: normal;\n  -webkit-flex-direction: row;\n  -ms-flex-direction: row;\n  flex-direction: row; }\n  [tabsLayout=icon-left] .tab-button .tab-button-icon {\n    padding-right: 8px;\n    text-align: right; }\n\n[tabsLayout=icon-right] .tab-button {\n  -webkit-box-orient: horizontal;\n  -webkit-box-direction: normal;\n  -webkit-flex-direction: row;\n  -ms-flex-direction: row;\n  flex-direction: row; }\n  [tabsLayout=icon-right] .tab-button .tab-button-icon {\n    -webkit-box-ordinal-group: 11;\n    -webkit-order: 10;\n    -ms-flex-order: 10;\n    order: 10;\n    padding-left: 8px;\n    text-align: left; }\n\n[tabsLayout=icon-hide] .tab-button-icon {\n  display: none; }\n\n[tabsLayout=title-hide] .tab-button-text {\n  display: none; }\n\n.tab-badge {\n  position: absolute;\n  top: 6%;\n  right: 4%;\n  right: calc(50% - 50px);\n  padding: 1px 6px;\n  height: auto;\n  font-size: 12px;\n  line-height: 16px; }\n\n.has-icon .tab-badge {\n  right: calc(50% - 30px); }\n\n[tabsLayout=icon-bottom] .tab-badge,\n[tabsLayout=icon-left] .tab-badge,\n[tabsLayout=icon-right] .tab-badge {\n  right: calc(50% - 50px); }\n\nion-tabbar {\n  -webkit-box-pack: center;\n  -webkit-justify-content: center;\n  -ms-flex-pack: center;\n  justify-content: center;\n  border-top: 1px solid #b2b2b2;\n  background: #f8f8f8; }\n\nion-tabs[tabsPlacement=top] ion-tabbar {\n  border-top: 0;\n  border-bottom: 1px solid #b2b2b2; }\n\n.tab-button {\n  padding: 0 2px;\n  max-width: 240px;\n  min-height: 49px;\n  color: #8c8c8c; }\n\n.tab-button:hover:not(.disable-hover),\n.tab-button[aria-selected=true] {\n  color: #327eff; }\n\n.tab-button-text {\n  margin-top: 0;\n  margin-bottom: 0;\n  min-height: 11px;\n  font-size: 10px; }\n\n.has-title-only .tab-button-text {\n  font-size: 12px; }\n\n.tab-button-icon {\n  min-width: 35px;\n  height: 30px;\n  font-size: 30px; }\n  .tab-button-icon::before {\n    vertical-align: top; }\n\n[tabsLayout=icon-right] .tab-button .tab-button-text,\n[tabsLayout=icon-left] .tab-button .tab-button-text {\n  font-size: 1.4rem;\n  line-height: 1.1; }\n\n[tabsLayout=icon-right] .tab-button ion-icon,\n[tabsLayout=icon-left] .tab-button ion-icon {\n  min-width: 24px;\n  height: 26px;\n  font-size: 24px; }\n\n[tabsLayout=icon-hide] .tab-button,\n.tab-button.has-title-only {\n  min-height: 41px; }\n  [tabsLayout=icon-hide] .tab-button .tab-button-text,\n  .tab-button.has-title-only .tab-button-text {\n    margin: 2px 0;\n    font-size: 1.4rem;\n    line-height: 1.1; }\n\n[tabsLayout=title-hide] .tab-button,\n.tab-button.icon-only {\n  min-height: 41px; }\n\n.hairlines ion-tabs ion-tabbar {\n  border-top-width: 0.55px; }\n\n.hairlines ion-tabs[tabsPlacement=\"top\"] ion-tabbar {\n  border-bottom-width: 0.55px; }\n\n.tabs-primary ion-tabbar {\n  border-color: #005efe;\n  background-color: #327eff; }\n  .tabs-primary ion-tabbar .tab-button {\n    color: #fff; }\n  .tabs-primary ion-tabbar .tab-button:hover:not(.disable-hover),\n  .tabs-primary ion-tabbar .tab-button[aria-selected=true] {\n    color: #fff; }\n\n.tabs-secondary ion-tabbar {\n  border-color: #21b94e;\n  background-color: #32db64; }\n  .tabs-secondary ion-tabbar .tab-button {\n    color: #fff; }\n  .tabs-secondary ion-tabbar .tab-button:hover:not(.disable-hover),\n  .tabs-secondary ion-tabbar .tab-button[aria-selected=true] {\n    color: #fff; }\n\n.tabs-danger ion-tabbar {\n  border-color: #f30d0d;\n  background-color: #f53d3d; }\n  .tabs-danger ion-tabbar .tab-button {\n    color: #fff; }\n  .tabs-danger ion-tabbar .tab-button:hover:not(.disable-hover),\n  .tabs-danger ion-tabbar .tab-button[aria-selected=true] {\n    color: #fff; }\n\n.tabs-light ion-tabbar {\n  border-color: #dbdbdb;\n  background-color: #f4f4f4; }\n  .tabs-light ion-tabbar .tab-button {\n    color: #000; }\n  .tabs-light ion-tabbar .tab-button:hover:not(.disable-hover),\n  .tabs-light ion-tabbar .tab-button[aria-selected=true] {\n    color: #000; }\n\n.tabs-dark ion-tabbar {\n  border-color: #090909;\n  background-color: #222; }\n  .tabs-dark ion-tabbar .tab-button {\n    color: #fff; }\n  .tabs-dark ion-tabbar .tab-button:hover:not(.disable-hover),\n  .tabs-dark ion-tabbar .tab-button[aria-selected=true] {\n    color: #fff; }\n\nion-toggle {\n  position: relative; }\n\n.toggle-icon {\n  position: relative;\n  display: block;\n  width: 51px;\n  height: 32px;\n  border-radius: 16px;\n  background-color: #e6e6e6;\n  -webkit-transition: background-color 300ms;\n  transition: background-color 300ms;\n  pointer-events: none; }\n\n.toggle-icon::before {\n  position: absolute;\n  top: 2px;\n  right: 2px;\n  bottom: 2px;\n  left: 2px;\n  border-radius: 16px;\n  background-color: #fff;\n  content: \"\";\n  -webkit-transform: scale3d(1, 1, 1);\n  transform: scale3d(1, 1, 1);\n  -webkit-transition: -webkit-transform 300ms;\n  transition: transform 300ms; }\n\n.toggle-inner {\n  position: absolute;\n  top: 2px;\n  left: 2px;\n  width: 28px;\n  height: 28px;\n  border-radius: 14px;\n  background-color: #fff;\n  box-shadow: 0 3px 12px rgba(0, 0, 0, 0.16), 0 3px 1px rgba(0, 0, 0, 0.1);\n  -webkit-transition: -webkit-transform 300ms, width 120ms ease-in-out 80ms, left 110ms ease-in-out 80ms;\n  transition: transform 300ms, width 120ms ease-in-out 80ms, left 110ms ease-in-out 80ms; }\n\n.toggle-checked {\n  background-color: #327eff; }\n\n.toggle-activated::before,\n.toggle-checked::before {\n  -webkit-transform: scale3d(0, 0, 0);\n  transform: scale3d(0, 0, 0); }\n\n.toggle-checked .toggle-inner {\n  -webkit-transform: translate3d(19px, 0, 0);\n  transform: translate3d(19px, 0, 0); }\n\n.toggle-activated.toggle-checked::before {\n  -webkit-transform: scale3d(0, 0, 0);\n  transform: scale3d(0, 0, 0); }\n\n.toggle-activated .toggle-inner {\n  width: 34px; }\n\n.toggle-activated.toggle-checked .toggle-inner {\n  left: -4px; }\n\n.toggle-disabled,\n.item-toggle-disabled ion-label {\n  opacity: 0.3;\n  pointer-events: none; }\n\n.toggle-disabled ion-radio {\n  opacity: 0.3; }\n\n.item ion-toggle {\n  margin: 0;\n  padding: 6px 8px 5px 16px; }\n  .item ion-toggle[item-left] {\n    padding: 6px 16px 5px 0; }\n\n.toggle-primary .toggle-checked {\n  background-color: #327eff; }\n\n.toggle-secondary .toggle-checked {\n  background-color: #32db64; }\n\n.toggle-danger .toggle-checked {\n  background-color: #f53d3d; }\n\n.toggle-light .toggle-checked {\n  background-color: #f4f4f4; }\n\n.toggle-dark .toggle-checked {\n  background-color: #222; }\n\nion-toast {\n  position: absolute;\n  top: 0;\n  left: 0;\n  z-index: 1000;\n  display: block;\n  width: 100%;\n  height: 100%;\n  pointer-events: none; }\n\n.toast-container {\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  pointer-events: auto; }\n\n.toast-button {\n  padding: 19px 16px 17px;\n  font-size: 1.5rem; }\n\n.toast-message {\n  -webkit-box-flex: 1;\n  -webkit-flex: 1;\n  -ms-flex: 1;\n  flex: 1; }\n\n.toast-wrapper {\n  position: absolute;\n  right: 10px;\n  left: 10px;\n  z-index: 10;\n  display: block;\n  margin: auto;\n  max-width: 700px;\n  border-radius: 0.65rem;\n  background: rgba(0, 0, 0, 0.9); }\n  .toast-wrapper.toast-top {\n    top: 0;\n    -webkit-transform: translate3d(0, -100%, 0);\n    transform: translate3d(0, -100%, 0); }\n  .toast-wrapper.toast-bottom {\n    bottom: 0;\n    -webkit-transform: translate3d(0, 100%, 0);\n    transform: translate3d(0, 100%, 0); }\n  .toast-wrapper.toast-middle {\n    opacity: .01; }\n\n.toast-message {\n  padding: 1.5rem;\n  font-size: 1.4rem;\n  color: #fff; }\n\n.toolbar {\n  display: -webkit-box;\n  display: -webkit-flex;\n  display: -ms-flexbox;\n  display: flex;\n  overflow: hidden;\n  -webkit-box-orient: horizontal;\n  -webkit-box-direction: normal;\n  -webkit-flex-direction: row;\n  -ms-flex-direction: row;\n  flex-direction: row;\n  -webkit-box-align: center;\n  -webkit-align-items: center;\n  -ms-flex-align: center;\n  align-items: center;\n  -webkit-box-pack: justify;\n  -webkit-justify-content: space-between;\n  -ms-flex-pack: justify;\n  justify-content: space-between;\n  width: 100%; }\n\n.toolbar-background {\n  position: absolute;\n  top: 0;\n  left: 0;\n  z-index: -1;\n  width: 100%;\n  height: 100%;\n  border: 0;\n  -webkit-transform: translateZ(0);\n  transform: translateZ(0);\n  pointer-events: none; }\n\nion-title {\n  display: -webkit-box;\n  display: -webkit-flex;\n  display: -ms-flexbox;\n  display: flex;\n  -webkit-box-flex: 1;\n  -webkit-flex: 1;\n  -ms-flex: 1;\n  flex: 1;\n  -webkit-box-align: center;\n  -webkit-align-items: center;\n  -ms-flex-align: center;\n  align-items: center;\n  -webkit-transform: translateZ(0);\n  transform: translateZ(0); }\n\n.toolbar-title {\n  display: block;\n  overflow: hidden;\n  width: 100%;\n  text-overflow: ellipsis;\n  white-space: nowrap; }\n\nion-buttons {\n  display: block;\n  margin: 0 .2rem;\n  -webkit-transform: translateZ(0);\n  transform: translateZ(0);\n  pointer-events: none; }\n\nion-buttons button,\nion-buttons a,\nion-buttons input,\nion-buttons textarea,\nion-buttons div {\n  pointer-events: auto; }\n\n.toolbar[transparent] .toolbar-background {\n  border-color: transparent;\n  background: transparent; }\n\nion-buttons,\n.bar-button-menutoggle {\n  z-index: 99;\n  -webkit-transform: translateZ(0);\n  transform: translateZ(0); }\n\nion-navbar.toolbar {\n  display: -webkit-box;\n  display: -webkit-flex;\n  display: -ms-flexbox;\n  display: flex;\n  opacity: 0;\n  -webkit-transform: translateZ(0);\n  transform: translateZ(0); }\n  ion-navbar.toolbar.show-navbar {\n    opacity: 1; }\n\n.bar-button {\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  -ms-user-select: none;\n  user-select: none;\n  -webkit-appearance: none;\n  -moz-appearance: none;\n  position: relative;\n  display: inline-block;\n  margin: 0;\n  padding: 0;\n  line-height: 1;\n  text-align: center;\n  text-overflow: ellipsis;\n  text-transform: none;\n  white-space: nowrap;\n  cursor: pointer;\n  vertical-align: top;\n  vertical-align: -webkit-baseline-middle; }\n\n.bar-button::after {\n  position: absolute;\n  top: -7px;\n  right: -2px;\n  bottom: -6px;\n  left: -2px;\n  content: \"\"; }\n\n.bar-button-menutoggle {\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.back-button {\n  display: none; }\n  .back-button.show-back-button {\n    display: inline-block; }\n\n.back-button-text {\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.toolbar {\n  padding: 4px;\n  min-height: 44px; }\n\n.toolbar-background {\n  border-top-width: 1px;\n  border-bottom-width: 1px;\n  border-style: solid;\n  border-color: #b2b2b2;\n  background: #f8f8f8; }\n\n.hairlines .toolbar-background {\n  border-top-width: 0.55px;\n  border-bottom-width: 0.55px; }\n\nion-header .toolbar:first-child .toolbar-background,\nion-menu > .toolbar:first-child .toolbar-background,\n.toolbar[no-border-top] .toolbar-background {\n  border-top-width: 0; }\n\nion-footer .toolbar:last-child .toolbar-background,\n.toolbar[no-border-bottom] .toolbar-background {\n  border-bottom-width: 0; }\n\n.toolbar[no-border] .toolbar-background {\n  border-top-width: 0;\n  border-bottom-width: 0; }\n\n.toolbar-content {\n  -webkit-box-flex: 1;\n  -webkit-flex: 1;\n  -ms-flex: 1;\n  flex: 1;\n  -webkit-box-ordinal-group: 5;\n  -webkit-order: 4;\n  -ms-flex-order: 4;\n  order: 4;\n  min-width: 0; }\n\n.toolbar-title {\n  font-size: 1.7rem;\n  font-weight: 600;\n  text-align: center;\n  color: #000;\n  pointer-events: auto; }\n\nion-title {\n  position: absolute;\n  top: 0;\n  left: 0;\n  padding: 0 90px 1px;\n  width: 100%;\n  height: 100%;\n  -webkit-transform: translateZ(0);\n  transform: translateZ(0);\n  pointer-events: none; }\n\nion-buttons {\n  -webkit-box-ordinal-group: 4;\n  -webkit-order: 3;\n  -ms-flex-order: 3;\n  order: 3;\n  -webkit-transform: translateZ(0);\n  transform: translateZ(0); }\n\nion-buttons[left] {\n  -webkit-box-ordinal-group: 3;\n  -webkit-order: 2;\n  -ms-flex-order: 2;\n  order: 2; }\n\nion-buttons[end] {\n  -webkit-box-ordinal-group: 6;\n  -webkit-order: 5;\n  -ms-flex-order: 5;\n  order: 5;\n  text-align: right; }\n\nion-buttons[right] {\n  -webkit-box-ordinal-group: 7;\n  -webkit-order: 6;\n  -ms-flex-order: 6;\n  order: 6;\n  text-align: right; }\n\n.bar-button {\n  padding: 0 5px;\n  height: 32px;\n  border: 0;\n  border-radius: 4px;\n  font-size: 1.7rem; }\n\n.bar-button-outline {\n  border-width: 1px;\n  border-style: solid;\n  border-color: #327eff;\n  color: #327eff;\n  background-color: transparent; }\n  .bar-button-outline:hover:not(.disable-hover) {\n    opacity: .4; }\n  .bar-button-outline.activated {\n    color: #fff;\n    background-color: #327eff; }\n\n.bar-button-solid {\n  color: #fff;\n  background-color: #327eff; }\n  .bar-button-solid:hover:not(.disable-hover) {\n    color: #fff;\n    opacity: .4; }\n  .bar-button-solid.activated {\n    color: #fff;\n    background-color: #2e74eb;\n    opacity: .4; }\n\n.bar-button-icon-left ion-icon {\n  padding-right: .3em;\n  font-size: 1.4em;\n  line-height: .67;\n  pointer-events: none; }\n\n.bar-button-icon-right ion-icon {\n  padding-left: .4em;\n  font-size: 1.4em;\n  line-height: .67;\n  pointer-events: none; }\n\n.bar-button[icon-only] {\n  padding: 0;\n  min-width: .9em; }\n  .bar-button[icon-only] ion-icon {\n    padding: 0 .1em;\n    font-size: 1.8em;\n    line-height: .67;\n    pointer-events: none; }\n\n.back-button {\n  overflow: visible;\n  -webkit-box-ordinal-group: 1;\n  -webkit-order: 0;\n  -ms-flex-order: 0;\n  order: 0;\n  margin: 0;\n  min-height: 3.2rem;\n  line-height: 1;\n  -webkit-transform: translateZ(0);\n  transform: translateZ(0); }\n\n.back-button-icon {\n  display: inherit;\n  margin: 0;\n  margin-top: -1px;\n  min-width: 18px;\n  font-size: 3.4rem; }\n\n.back-button-text {\n  letter-spacing: -.01em; }\n\n.bar-button-menutoggle {\n  -webkit-box-ordinal-group: 2;\n  -webkit-order: 1;\n  -ms-flex-order: 1;\n  order: 1;\n  margin: 0 6px;\n  padding: 0;\n  min-width: 36px; }\n  .bar-button-menutoggle ion-icon {\n    padding: 0 6px;\n    font-size: 2.8rem; }\n\n.bar-button-menutoggle[end],\n.bar-button-menutoggle[right] {\n  -webkit-box-ordinal-group: 8;\n  -webkit-order: 7;\n  -ms-flex-order: 7;\n  order: 7; }\n\n.bar-button-default,\n.bar-button-clear-default {\n  color: #327eff;\n  background-color: transparent; }\n  .bar-button-default:hover:not(.disable-hover),\n  .bar-button-clear-default:hover:not(.disable-hover) {\n    color: #327eff; }\n  .bar-button-default.activated,\n  .bar-button-clear-default.activated {\n    opacity: .4; }\n\n.bar-button-clear,\n.bar-button-clear-clear {\n  color: #327eff;\n  background-color: transparent; }\n  .bar-button-clear:hover:not(.disable-hover),\n  .bar-button-clear-clear:hover:not(.disable-hover) {\n    color: #327eff; }\n  .bar-button-clear.activated,\n  .bar-button-clear-clear.activated {\n    opacity: .4; }\n\n.toolbar-primary .toolbar-background {\n  border-color: #005efe;\n  background: #327eff; }\n\n.toolbar-primary .toolbar-title,\n.toolbar-primary .bar-button-clear,\n.toolbar-primary .bar-button-default {\n  color: #fff; }\n\n.bar-button-primary,\n.bar-button-clear-primary {\n  color: #327eff;\n  background-color: transparent; }\n  .bar-button-primary:hover:not(.disable-hover),\n  .bar-button-clear-primary:hover:not(.disable-hover) {\n    color: #327eff; }\n  .bar-button-primary.activated,\n  .bar-button-clear-primary.activated {\n    opacity: .4; }\n\n.bar-button-outline-primary {\n  border-color: #327eff;\n  color: #327eff;\n  background-color: transparent; }\n  .bar-button-outline-primary.activated {\n    color: #fff;\n    background-color: #327eff; }\n\n.bar-button-solid-primary {\n  color: #fff;\n  background-color: #327eff; }\n  .bar-button-solid-primary.activated {\n    color: #fff;\n    background-color: #2e74eb; }\n\n.toolbar-secondary .toolbar-background {\n  border-color: #21b94e;\n  background: #32db64; }\n\n.toolbar-secondary .toolbar-title,\n.toolbar-secondary .bar-button-clear,\n.toolbar-secondary .bar-button-default {\n  color: #fff; }\n\n.bar-button-secondary,\n.bar-button-clear-secondary {\n  color: #32db64;\n  background-color: transparent; }\n  .bar-button-secondary:hover:not(.disable-hover),\n  .bar-button-clear-secondary:hover:not(.disable-hover) {\n    color: #32db64; }\n  .bar-button-secondary.activated,\n  .bar-button-clear-secondary.activated {\n    opacity: .4; }\n\n.bar-button-outline-secondary {\n  border-color: #32db64;\n  color: #32db64;\n  background-color: transparent; }\n  .bar-button-outline-secondary.activated {\n    color: #fff;\n    background-color: #32db64; }\n\n.bar-button-solid-secondary {\n  color: #fff;\n  background-color: #32db64; }\n  .bar-button-solid-secondary.activated {\n    color: #fff;\n    background-color: #2ec95c; }\n\n.toolbar-danger .toolbar-background {\n  border-color: #f30d0d;\n  background: #f53d3d; }\n\n.toolbar-danger .toolbar-title,\n.toolbar-danger .bar-button-clear,\n.toolbar-danger .bar-button-default {\n  color: #fff; }\n\n.bar-button-danger,\n.bar-button-clear-danger {\n  color: #f53d3d;\n  background-color: transparent; }\n  .bar-button-danger:hover:not(.disable-hover),\n  .bar-button-clear-danger:hover:not(.disable-hover) {\n    color: #f53d3d; }\n  .bar-button-danger.activated,\n  .bar-button-clear-danger.activated {\n    opacity: .4; }\n\n.bar-button-outline-danger {\n  border-color: #f53d3d;\n  color: #f53d3d;\n  background-color: transparent; }\n  .bar-button-outline-danger.activated {\n    color: #fff;\n    background-color: #f53d3d; }\n\n.bar-button-solid-danger {\n  color: #fff;\n  background-color: #f53d3d; }\n  .bar-button-solid-danger.activated {\n    color: #fff;\n    background-color: #e13838; }\n\n.toolbar-light .toolbar-background {\n  border-color: #dbdbdb;\n  background: #f4f4f4; }\n\n.toolbar-light .toolbar-title,\n.toolbar-light .bar-button-clear,\n.toolbar-light .bar-button-default {\n  color: #000; }\n\n.bar-button-light,\n.bar-button-clear-light {\n  color: #f4f4f4;\n  background-color: transparent; }\n  .bar-button-light:hover:not(.disable-hover),\n  .bar-button-clear-light:hover:not(.disable-hover) {\n    color: #f4f4f4; }\n  .bar-button-light.activated,\n  .bar-button-clear-light.activated {\n    opacity: .4; }\n\n.bar-button-outline-light {\n  border-color: #f4f4f4;\n  color: #f4f4f4;\n  background-color: transparent; }\n  .bar-button-outline-light.activated {\n    color: #000;\n    background-color: #f4f4f4; }\n\n.bar-button-solid-light {\n  color: #000;\n  background-color: #f4f4f4; }\n  .bar-button-solid-light.activated {\n    color: #000;\n    background-color: #e0e0e0; }\n\n.toolbar-dark .toolbar-background {\n  border-color: #090909;\n  background: #222; }\n\n.toolbar-dark .toolbar-title,\n.toolbar-dark .bar-button-clear,\n.toolbar-dark .bar-button-default {\n  color: #fff; }\n\n.bar-button-dark,\n.bar-button-clear-dark {\n  color: #222;\n  background-color: transparent; }\n  .bar-button-dark:hover:not(.disable-hover),\n  .bar-button-clear-dark:hover:not(.disable-hover) {\n    color: #222; }\n  .bar-button-dark.activated,\n  .bar-button-clear-dark.activated {\n    opacity: .4; }\n\n.bar-button-outline-dark {\n  border-color: #222;\n  color: #222;\n  background-color: transparent; }\n  .bar-button-outline-dark.activated {\n    color: #fff;\n    background-color: #222; }\n\n.bar-button-solid-dark {\n  color: #fff;\n  background-color: #222; }\n  .bar-button-solid-dark.activated {\n    color: #fff;\n    background-color: #343434; }\n\nhtml {\n  font-size: 62.5%; }\n\na {\n  background-color: transparent; }\n\n.enable-hover a:hover {\n  opacity: .7; }\n\nh1,\nh2,\nh3,\nh4,\nh5,\nh6 {\n  margin-top: 1.6rem;\n  margin-bottom: 1rem;\n  font-weight: 500;\n  line-height: 1.2; }\n\n[padding] h1:first-child,\n[padding] h2:first-child,\n[padding] h3:first-child,\n[padding] h4:first-child,\n[padding] h5:first-child,\n[padding] h6:first-child {\n  margin-top: -.3rem; }\n\nh1 + h2,\nh1 + h3,\nh2 + h3 {\n  margin-top: -.3rem; }\n\nh1 {\n  margin-top: 2rem;\n  font-size: 2.6rem; }\n\nh2 {\n  margin-top: 1.8rem;\n  font-size: 2.4rem; }\n\nh3 {\n  font-size: 2.2rem; }\n\nh4 {\n  font-size: 2rem; }\n\nh5 {\n  font-size: 1.8rem; }\n\nh6 {\n  font-size: 1.6rem; }\n\nsmall {\n  font-size: 75%; }\n\nsub,\nsup {\n  position: relative;\n  font-size: 75%;\n  line-height: 0;\n  vertical-align: baseline; }\n\nsup {\n  top: -.5em; }\n\nsub {\n  bottom: -.25em; }\n\n[text-left] {\n  text-align: left; }\n\n[text-center] {\n  text-align: center; }\n\n[text-right] {\n  text-align: right; }\n\n[text-justify] {\n  text-align: justify; }\n\n[text-nowrap] {\n  white-space: nowrap; }\n\n[text-uppercase] {\n  text-transform: uppercase; }\n\n[text-lowercase] {\n  text-transform: lowercase; }\n\n[text-capitalize] {\n  text-transform: capitalize; }\n\np {\n  color: #000; }\n\na {\n  color: #327eff; }\n\n.text-primary {\n  color: #327eff; }\n\n.text-secondary {\n  color: #32db64; }\n\n.text-danger {\n  color: #f53d3d; }\n\n.text-light {\n  color: #f4f4f4; }\n\n.text-dark {\n  color: #222; }\n\nion-nav > ion-page > .toolbar.statusbar-padding:first-child,\nion-nav > ion-page > ion-header > .toolbar.statusbar-padding:first-child,\nion-tab > ion-page > ion-header > .toolbar.statusbar-padding:first-child,\nion-tabs > ion-page.tab-subpage > ion-header > .toolbar.statusbar-padding:first-child,\nion-menu > .menu-inner > .toolbar.statusbar-padding:first-child,\nion-menu > .menu-inner > ion-header > .toolbar.statusbar-padding:first-child {\n  padding-top: 20px;\n  height: calc(44px + 20px);\n  min-height: calc(44px + 20px); }\n\nion-nav > ion-page > ion-content.statusbar-padding:first-child scroll-content,\nion-nav > ion-page > ion-header > ion-content.statusbar-padding:first-child scroll-content,\nion-tab > ion-page > ion-header > ion-content.statusbar-padding:first-child scroll-content,\nion-tabs > ion-page.tab-subpage > ion-header > ion-content.statusbar-padding:first-child scroll-content,\nion-menu > .menu-inner > ion-content.statusbar-padding:first-child scroll-content,\nion-menu > .menu-inner > ion-header > ion-content.statusbar-padding:first-child scroll-content {\n  padding-top: 20px; }\n\nion-nav > ion-page > ion-content.statusbar-padding:first-child[padding] scroll-content,\nion-nav > ion-page > ion-content.statusbar-padding:first-child[padding-top] scroll-content,\nion-nav > ion-page > ion-header > ion-content.statusbar-padding:first-child[padding] scroll-content,\nion-nav > ion-page > ion-header > ion-content.statusbar-padding:first-child[padding-top] scroll-content,\nion-tab > ion-page > ion-header > ion-content.statusbar-padding:first-child[padding] scroll-content,\nion-tab > ion-page > ion-header > ion-content.statusbar-padding:first-child[padding-top] scroll-content,\nion-tabs > ion-page.tab-subpage > ion-header > ion-content.statusbar-padding:first-child[padding] scroll-content,\nion-tabs > ion-page.tab-subpage > ion-header > ion-content.statusbar-padding:first-child[padding-top] scroll-content,\nion-menu > .menu-inner > ion-content.statusbar-padding:first-child[padding] scroll-content,\nion-menu > .menu-inner > ion-content.statusbar-padding:first-child[padding-top] scroll-content,\nion-menu > .menu-inner > ion-header > ion-content.statusbar-padding:first-child[padding] scroll-content,\nion-menu > .menu-inner > ion-header > ion-content.statusbar-padding:first-child[padding-top] scroll-content {\n  padding-top: calc(16px + 20px); }\n\nion-nav > ion-page > .toolbar.statusbar-padding:first-child ion-segment,\nion-nav > ion-page > .toolbar.statusbar-padding:first-child ion-title,\nion-nav > ion-page > ion-header > .toolbar.statusbar-padding:first-child ion-segment,\nion-nav > ion-page > ion-header > .toolbar.statusbar-padding:first-child ion-title,\nion-tab > ion-page > ion-header > .toolbar.statusbar-padding:first-child ion-segment,\nion-tab > ion-page > ion-header > .toolbar.statusbar-padding:first-child ion-title,\nion-tabs > ion-page.tab-subpage > ion-header > .toolbar.statusbar-padding:first-child ion-segment,\nion-tabs > ion-page.tab-subpage > ion-header > .toolbar.statusbar-padding:first-child ion-title,\nion-menu > .menu-inner > .toolbar.statusbar-padding:first-child ion-segment,\nion-menu > .menu-inner > .toolbar.statusbar-padding:first-child ion-title,\nion-menu > .menu-inner > ion-header > .toolbar.statusbar-padding:first-child ion-segment,\nion-menu > .menu-inner > ion-header > .toolbar.statusbar-padding:first-child ion-title {\n  padding-top: 20px;\n  height: calc(44px + 20px);\n  min-height: calc(44px + 20px); }\n\n@media only screen and (max-width: 767px) {\n  .modal-wrapper > ion-page > ion-header > .toolbar.statusbar-padding:first-child {\n    padding-top: 20px;\n    height: calc(44px + 20px);\n    min-height: calc(44px + 20px); }\n  .modal-wrapper > ion-page > ion-header > ion-content.statusbar-padding:first-child scroll-content {\n    padding-top: 20px; }\n  .modal-wrapper > ion-page > ion-header > ion-content.statusbar-padding:first-child[padding] scroll-content,\n  .modal-wrapper > ion-page > ion-header > ion-content.statusbar-padding:first-child[padding-top] scroll-content {\n    padding-top: calc(16px + 20px); }\n  .modal-wrapper > ion-page > ion-header > .toolbar.statusbar-padding:first-child ion-segment,\n  .modal-wrapper > ion-page > ion-header > .toolbar.statusbar-padding:first-child ion-title {\n    padding-top: 20px;\n    height: calc(44px + 20px);\n    min-height: calc(44px + 20px); } }\n\nbody {\n  font-family: -apple-system, \"Helvetica Neue\", \"Roboto\", sans-serif;\n  font-size: 1.4rem;\n  background-color: #fff; }\n"
  },
  {
    "path": "content/dist/bundles/ionic.md.css",
    "content": "audio,\ncanvas,\nprogress,\nvideo {\n  vertical-align: baseline; }\n\naudio:not([controls]) {\n  display: none;\n  height: 0; }\n\nb,\nstrong {\n  font-weight: bold; }\n\nimg {\n  max-width: 100%;\n  border: 0; }\n\nsvg:not(:root) {\n  overflow: hidden; }\n\nfigure {\n  margin: 1em 40px; }\n\nhr {\n  height: 1px;\n  border-width: 0;\n  box-sizing: content-box; }\n\npre {\n  overflow: auto; }\n\ncode,\nkbd,\npre,\nsamp {\n  font-family: monospace, monospace;\n  font-size: 1em; }\n\nlabel,\ninput,\nselect,\ntextarea {\n  font-family: inherit;\n  line-height: normal; }\n\ntextarea {\n  overflow: auto;\n  height: auto;\n  font: inherit;\n  color: inherit; }\n\nform,\ninput,\noptgroup,\nselect {\n  margin: 0;\n  font: inherit;\n  color: inherit; }\n\nhtml input[type=\"button\"],\ninput[type=\"reset\"],\ninput[type=\"submit\"] {\n  cursor: pointer;\n  -webkit-appearance: button; }\n\na,\na div,\na span,\na ion-icon,\na ion-label,\nbutton,\nbutton div,\nbutton span,\nbutton ion-icon,\nbutton ion-label,\n[tappable],\n[tappable] div,\n[tappable] span,\n[tappable] ion-icon,\n[tappable] ion-label,\ninput,\ntextarea {\n  -ms-touch-action: manipulation;\n  touch-action: manipulation; }\n\na ion-label,\nbutton ion-label,\n[tappable] ion-label {\n  pointer-events: none; }\n\nbutton {\n  border: 0;\n  font-family: inherit;\n  font-style: inherit;\n  font-variant: inherit;\n  line-height: 1;\n  text-transform: none;\n  cursor: pointer;\n  -webkit-appearance: button; }\n\na[disabled],\nbutton[disabled],\nhtml input[disabled] {\n  cursor: default; }\n\nbutton::-moz-focus-inner,\ninput::-moz-focus-inner {\n  padding: 0;\n  border: 0; }\n\ninput[type=\"checkbox\"],\ninput[type=\"radio\"] {\n  padding: 0;\n  box-sizing: border-box; }\n\ninput[type=\"number\"]::-webkit-inner-spin-button,\ninput[type=\"number\"]::-webkit-outer-spin-button {\n  height: auto; }\n\ninput[type=\"search\"]::-webkit-search-cancel-button,\ninput[type=\"search\"]::-webkit-search-decoration {\n  -webkit-appearance: none; }\n\ntable {\n  border-collapse: collapse;\n  border-spacing: 0; }\n\ntd,\nth {\n  padding: 0; }\n\n* {\n  box-sizing: border-box;\n  -webkit-tap-highlight-color: transparent;\n  -webkit-tap-highlight-color: transparent;\n  -webkit-touch-callout: none; }\n\nhtml {\n  width: 100%;\n  height: 100%;\n  -webkit-text-size-adjust: 100%;\n  -ms-text-size-adjust: 100%;\n  text-size-adjust: 100%; }\n\nbody {\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  -ms-user-select: none;\n  user-select: none;\n  position: fixed;\n  overflow: hidden;\n  margin: 0;\n  padding: 0;\n  width: 100%;\n  max-width: 100%;\n  height: 100%;\n  max-height: 100%;\n  -webkit-font-smoothing: antialiased;\n  font-smoothing: antialiased;\n  text-rendering: optimizeLegibility;\n  -webkit-user-drag: none;\n  -ms-content-zooming: none;\n  -ms-touch-action: manipulation;\n  touch-action: manipulation;\n  word-wrap: break-word;\n  -webkit-text-size-adjust: none;\n  -ms-text-size-adjust: none;\n  text-size-adjust: none; }\n\nion-app,\nion-nav,\nion-tab,\nion-tabs,\n.app-root {\n  position: absolute;\n  top: 0;\n  left: 0;\n  z-index: 0;\n  display: block;\n  overflow: hidden;\n  width: 100%;\n  height: 100%; }\n\nion-tab scroll-cotent {\n  display: none; }\n\nion-tab {\n  -webkit-transform: translateY(-200%);\n  transform: translateY(-200%); }\n\nion-tab.show-tab {\n  -webkit-transform: translateY(0);\n  transform: translateY(0); }\n\nion-tab.show-tab scroll-cotent {\n  display: block; }\n\nion-page {\n  position: absolute;\n  top: 0;\n  left: 0;\n  display: block;\n  width: 100%;\n  height: 100%;\n  opacity: 0; }\n\nion-content {\n  position: relative;\n  top: 0;\n  left: 0;\n  display: block;\n  width: 100%;\n  height: 100%; }\n\nion-page > ion-content {\n  position: absolute; }\n\nion-page scroll-content {\n  display: none; }\n\nion-page.show-page {\n  opacity: 1; }\n\nion-page.show-page scroll-content {\n  display: block; }\n\nion-header {\n  position: absolute;\n  top: 0;\n  left: 0;\n  z-index: 10;\n  display: block;\n  width: 100%; }\n\nion-toolbar {\n  position: relative;\n  z-index: 10; }\n\nion-footer {\n  position: absolute;\n  bottom: 0;\n  left: 0;\n  z-index: 10;\n  display: block;\n  width: 100%; }\n\nion-tabbar {\n  position: absolute;\n  bottom: 0;\n  left: 0;\n  z-index: 10;\n  display: -webkit-box;\n  display: -webkit-flex;\n  display: -ms-flexbox;\n  display: flex;\n  width: 100%;\n  opacity: 0; }\n\nion-tabbar.show-tabbar {\n  opacity: 1; }\n\n[tabsPlacement=top] > ion-tabbar {\n  top: 0;\n  bottom: auto; }\n\nscroll-content {\n  position: absolute;\n  top: 0;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  z-index: 1;\n  display: block;\n  overflow-x: hidden;\n  overflow-y: scroll;\n  -webkit-overflow-scrolling: touch;\n  will-change: scroll-position; }\n\nion-content.js-scroll > scroll-content {\n  position: relative;\n  min-height: 100%;\n  overflow-x: initial;\n  overflow-y: initial;\n  -webkit-overflow-scrolling: auto;\n  will-change: initial; }\n\n.disable-scroll ion-page scroll-content {\n  overflow-y: hidden;\n  overflow-x: hidden; }\n\n[nav-viewport],\n[nav-portal],\n[tab-portal],\n.nav-decor {\n  display: none; }\n\n.hide,\n[hidden],\ntemplate {\n  display: none !important; }\n\n.sticky {\n  position: -webkit-sticky;\n  position: sticky;\n  top: 0; }\n\n:focus,\n:active {\n  outline: none; }\n\n.focus-outline :focus {\n  outline: thin dotted;\n  outline-offset: -1px; }\n\n.focus-outline button:focus,\n.focus-outline [button]:focus {\n  border-color: #51a7e8;\n  outline: thin solid #51a7e8;\n  box-shadow: 0 0 8px 0 #51a7e8; }\n\n.focus-outline ion-input :focus {\n  outline: none; }\n\nfocus-ctrl {\n  position: fixed; }\n  focus-ctrl input,\n  focus-ctrl button {\n    position: fixed;\n    top: 1px;\n    left: -9999px;\n    z-index: 9999;\n    width: 9px;\n    pointer-events: none; }\n\nclick-block {\n  position: absolute;\n  top: 0;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  z-index: 9999;\n  display: block;\n  opacity: 0;\n  -webkit-transform: translate3d(0, -100%, 0);\n  transform: translate3d(0, -100%, 0);\n  -webkit-transform: translate3d(0, calc(-100% + 1px), 0);\n  transform: translate3d(0, calc(-100% + 1px), 0); }\n\n.click-block-active {\n  -webkit-transform: translate3d(0, 0, 0);\n  transform: translate3d(0, 0, 0); }\n\nion-backdrop {\n  position: absolute;\n  top: 0;\n  left: 0;\n  z-index: 2;\n  display: block;\n  width: 100%;\n  height: 100%;\n  background-color: #000;\n  opacity: .01;\n  -webkit-transform: translateZ(0);\n  transform: translateZ(0); }\n\nion-backdrop.hide-backdrop {\n  display: none; }\n\nion-grid {\n  display: -webkit-box;\n  display: -webkit-flex;\n  display: -ms-flexbox;\n  display: flex;\n  -webkit-box-orient: vertical;\n  -webkit-box-direction: normal;\n  -webkit-flex-direction: column;\n  -ms-flex-direction: column;\n  flex-direction: column;\n  padding: 5px;\n  width: 100%; }\n\nion-row {\n  display: -webkit-box;\n  display: -webkit-flex;\n  display: -ms-flexbox;\n  display: flex;\n  width: 100%; }\n  ion-row[wrap] {\n    -webkit-flex-wrap: wrap;\n    -ms-flex-wrap: wrap;\n    flex-wrap: wrap; }\n  ion-row[top] {\n    -webkit-box-align: start;\n    -webkit-align-items: flex-start;\n    -ms-flex-align: start;\n    align-items: flex-start; }\n  ion-row[bottom] {\n    -webkit-box-align: end;\n    -webkit-align-items: flex-end;\n    -ms-flex-align: end;\n    align-items: flex-end; }\n  ion-row[center] {\n    -webkit-box-align: center;\n    -webkit-align-items: center;\n    -ms-flex-align: center;\n    align-items: center; }\n  ion-row[stretch] {\n    -webkit-box-align: stretch;\n    -webkit-align-items: stretch;\n    -ms-flex-align: stretch;\n    align-items: stretch; }\n  ion-row[baseline] {\n    -webkit-box-align: baseline;\n    -webkit-align-items: baseline;\n    -ms-flex-align: baseline;\n    align-items: baseline; }\n\nion-col {\n  display: block;\n  -webkit-box-flex: 1;\n  -webkit-flex: 1;\n  -ms-flex: 1;\n  flex: 1;\n  padding: 5px;\n  width: 100%; }\n  ion-col[top] {\n    -webkit-align-self: flex-start;\n    -ms-flex-item-align: start;\n    align-self: flex-start; }\n  ion-col[bottom] {\n    -webkit-align-self: flex-end;\n    -ms-flex-item-align: end;\n    align-self: flex-end; }\n  ion-col[center] {\n    -webkit-align-self: center;\n    -ms-flex-item-align: center;\n    align-self: center; }\n  ion-col[stretch] {\n    -webkit-align-self: stretch;\n    -ms-flex-item-align: stretch;\n    align-self: stretch; }\n  ion-col[baseline] {\n    -webkit-align-self: baseline;\n    -ms-flex-item-align: baseline;\n    align-self: baseline; }\n  ion-col[offset-10] {\n    margin-left: 10%; }\n  ion-col[offset-20] {\n    margin-left: 20%; }\n  ion-col[offset-25] {\n    margin-left: 25%; }\n  ion-col[offset-33], ion-col[offset-34] {\n    margin-left: 33.3333%; }\n  ion-col[offset-50] {\n    margin-left: 50%; }\n  ion-col[offset-66], ion-col[offset-67] {\n    margin-left: 66.6666%; }\n  ion-col[offset-75] {\n    margin-left: 75%; }\n  ion-col[offset-80] {\n    margin-left: 80%; }\n  ion-col[offset-90] {\n    margin-left: 90%; }\n  ion-col[width-10] {\n    -webkit-box-flex: 0;\n    -webkit-flex: 0 0 10%;\n    -ms-flex: 0 0 10%;\n    flex: 0 0 10%;\n    max-width: 10%; }\n  ion-col[width-20] {\n    -webkit-box-flex: 0;\n    -webkit-flex: 0 0 20%;\n    -ms-flex: 0 0 20%;\n    flex: 0 0 20%;\n    max-width: 20%; }\n  ion-col[width-25] {\n    -webkit-box-flex: 0;\n    -webkit-flex: 0 0 25%;\n    -ms-flex: 0 0 25%;\n    flex: 0 0 25%;\n    max-width: 25%; }\n  ion-col[width-33], ion-col[width-34] {\n    -webkit-box-flex: 0;\n    -webkit-flex: 0 0 33.3333%;\n    -ms-flex: 0 0 33.3333%;\n    flex: 0 0 33.3333%;\n    max-width: 33.3333%; }\n  ion-col[width-50] {\n    -webkit-box-flex: 0;\n    -webkit-flex: 0 0 50%;\n    -ms-flex: 0 0 50%;\n    flex: 0 0 50%;\n    max-width: 50%; }\n  ion-col[width-66], ion-col[width-67] {\n    -webkit-box-flex: 0;\n    -webkit-flex: 0 0 66.6666%;\n    -ms-flex: 0 0 66.6666%;\n    flex: 0 0 66.6666%;\n    max-width: 66.6666%; }\n  ion-col[width-75] {\n    -webkit-box-flex: 0;\n    -webkit-flex: 0 0 75%;\n    -ms-flex: 0 0 75%;\n    flex: 0 0 75%;\n    max-width: 75%; }\n  ion-col[width-80] {\n    -webkit-box-flex: 0;\n    -webkit-flex: 0 0 80%;\n    -ms-flex: 0 0 80%;\n    flex: 0 0 80%;\n    max-width: 80%; }\n  ion-col[width-90] {\n    -webkit-box-flex: 0;\n    -webkit-flex: 0 0 90%;\n    -ms-flex: 0 0 90%;\n    flex: 0 0 90%;\n    max-width: 90%; }\n\n@media (max-width: 567px) {\n  [responsive-sm] {\n    -webkit-box-orient: vertical;\n    -webkit-box-direction: normal;\n    -webkit-flex-direction: column;\n    -ms-flex-direction: column;\n    flex-direction: column; }\n    [responsive-sm] ion-col[width-10], [responsive-sm] ion-col[width-20], [responsive-sm] ion-col[width-25], [responsive-sm] ion-col[width-33], [responsive-sm] ion-col[width-34], [responsive-sm] ion-col[width-50], [responsive-sm] ion-col[width-66], [responsive-sm] ion-col[width-67], [responsive-sm] ion-col[width-75], [responsive-sm] ion-col[width-80], [responsive-sm] ion-col[width-90] {\n      -webkit-box-flex: 1;\n      -webkit-flex: 1;\n      -ms-flex: 1;\n      flex: 1;\n      margin-bottom: 15px;\n      margin-left: 0;\n      width: 100%;\n      max-width: 100%; } }\n\n@media (max-width: 767px) {\n  [responsive-md] {\n    -webkit-box-orient: vertical;\n    -webkit-box-direction: normal;\n    -webkit-flex-direction: column;\n    -ms-flex-direction: column;\n    flex-direction: column; }\n    [responsive-md] ion-col[width-10], [responsive-md] ion-col[width-20], [responsive-md] ion-col[width-25], [responsive-md] ion-col[width-33], [responsive-md] ion-col[width-34], [responsive-md] ion-col[width-50], [responsive-md] ion-col[width-66], [responsive-md] ion-col[width-67], [responsive-md] ion-col[width-75], [responsive-md] ion-col[width-80], [responsive-md] ion-col[width-90] {\n      -webkit-box-flex: 1;\n      -webkit-flex: 1;\n      -ms-flex: 1;\n      flex: 1;\n      margin-bottom: 15px;\n      margin-left: 0;\n      width: 100%;\n      max-width: 100%; } }\n\n@media (max-width: 1023px) {\n  [responsive-lg] {\n    -webkit-box-orient: vertical;\n    -webkit-box-direction: normal;\n    -webkit-flex-direction: column;\n    -ms-flex-direction: column;\n    flex-direction: column; }\n    [responsive-lg] ion-col[width-10], [responsive-lg] ion-col[width-20], [responsive-lg] ion-col[width-25], [responsive-lg] ion-col[width-33], [responsive-lg] ion-col[width-34], [responsive-lg] ion-col[width-50], [responsive-lg] ion-col[width-66], [responsive-lg] ion-col[width-67], [responsive-lg] ion-col[width-75], [responsive-lg] ion-col[width-80], [responsive-lg] ion-col[width-90] {\n      -webkit-box-flex: 1;\n      -webkit-flex: 1;\n      -ms-flex: 1;\n      flex: 1;\n      margin-bottom: 15px;\n      margin-left: 0;\n      width: 100%;\n      max-width: 100%; } }\n\nion-icon {\n  display: inline-block;\n  font-size: 1.2em; }\n\nion-icon[small] {\n  min-height: 1.1em;\n  font-size: 1.1em; }\n\nion-img {\n  position: relative;\n  display: -webkit-box;\n  display: -webkit-flex;\n  display: -ms-flexbox;\n  display: flex;\n  overflow: hidden;\n  -webkit-box-align: center;\n  -webkit-align-items: center;\n  -ms-flex-align: center;\n  align-items: center;\n  -webkit-box-pack: center;\n  -webkit-justify-content: center;\n  -ms-flex-pack: center;\n  justify-content: center; }\n\nion-img img {\n  -webkit-flex-shrink: 0;\n  -ms-flex-negative: 0;\n  flex-shrink: 0;\n  min-width: 100%;\n  min-height: 100%; }\n\nion-img .img-placeholder {\n  position: absolute;\n  top: 0;\n  left: 0;\n  width: 100%;\n  height: 100%;\n  background: #eee;\n  -webkit-transition: opacity 200ms;\n  transition: opacity 200ms; }\n\nion-img.img-loaded .img-placeholder {\n  opacity: 0; }\n\nion-infinite-scroll {\n  display: block;\n  width: 100%; }\n\nion-infinite-scroll-content {\n  display: -webkit-box;\n  display: -webkit-flex;\n  display: -ms-flexbox;\n  display: flex;\n  -webkit-box-orient: vertical;\n  -webkit-box-direction: normal;\n  -webkit-flex-direction: column;\n  -ms-flex-direction: column;\n  flex-direction: column;\n  -webkit-box-pack: center;\n  -webkit-justify-content: center;\n  -ms-flex-pack: center;\n  justify-content: center;\n  height: 100%;\n  min-height: 84px;\n  text-align: center; }\n\n.infinite-loading {\n  display: none;\n  margin: 0 0 32px 0;\n  width: 100%; }\n\n.infinite-loading-text {\n  margin: 4px 32px 0 32px;\n  color: #666; }\n\nion-infinite-scroll-content[state=loading] .infinite-loading {\n  display: block; }\n\nion-infinite-scroll-content[state=disabled] {\n  display: none; }\n\nion-loading {\n  position: absolute;\n  top: 0;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  z-index: 1000;\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  -webkit-box-pack: center;\n  -webkit-justify-content: center;\n  -ms-flex-pack: center;\n  justify-content: center; }\n\n.loading-wrapper {\n  z-index: 10;\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  opacity: 0; }\n\nion-menu {\n  position: absolute;\n  top: 0;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  display: none; }\n  ion-menu.show-menu {\n    display: block; }\n\n.menu-inner {\n  position: absolute;\n  top: 0;\n  right: auto;\n  bottom: 0;\n  left: 0;\n  display: -webkit-box;\n  display: -webkit-flex;\n  display: -ms-flexbox;\n  display: flex;\n  -webkit-box-orient: vertical;\n  -webkit-box-direction: normal;\n  -webkit-flex-direction: column;\n  -ms-flex-direction: column;\n  flex-direction: column;\n  width: 304px;\n  -webkit-transform: translate3d(-9999px, 0, 0);\n  transform: translate3d(-9999px, 0, 0); }\n\n.menu-inner > ion-header,\n.menu-inner > ion-content,\n.menu-inner > ion-footer {\n  position: relative; }\n\nion-menu[side=right] > .menu-inner {\n  right: 0;\n  left: auto; }\n\nion-menu ion-backdrop {\n  z-index: -1;\n  display: none;\n  opacity: .1; }\n\n.menu-content {\n  -webkit-transform: translate3d(0, 0, 0);\n  transform: translate3d(0, 0, 0); }\n\n.menu-content-open ion-pane,\n.menu-content-open ion-content,\n.menu-content-open .toolbar {\n  pointer-events: none; }\n\n@media (max-width: 340px) {\n  .menu-inner {\n    width: 264px; } }\n\nion-menu[type=reveal] {\n  z-index: 0; }\n\nion-menu[type=reveal].show-menu .menu-inner {\n  -webkit-transform: translate3d(0, 0, 0);\n  transform: translate3d(0, 0, 0); }\n\nion-menu[type=overlay] {\n  z-index: 80; }\n  ion-menu[type=overlay] .show-backdrop {\n    display: block; }\n\nion-modal {\n  position: absolute;\n  top: 0;\n  left: 0;\n  display: block;\n  width: 100%;\n  height: 100%; }\n  @media not all and (min-width: 768px) and (min-height: 600px) {\n    ion-modal ion-backdrop {\n      visibility: hidden; } }\n\n.modal-wrapper {\n  z-index: 10;\n  height: 100%; }\n  @media only screen and (min-width: 768px) and (min-height: 600px) {\n    .modal-wrapper {\n      position: absolute;\n      top: calc(50% - (500px/2));\n      left: calc(50% - (600px/2));\n      width: 600px;\n      height: 500px; } }\n  @media only screen and (min-width: 768px) and (min-height: 768px) {\n    .modal-wrapper {\n      position: absolute;\n      top: calc(50% - (600px/2));\n      left: calc(50% - (600px/2));\n      width: 600px;\n      height: 600px; } }\n\nion-modal-inner {\n  position: absolute;\n  top: 0;\n  left: 0;\n  display: -webkit-box;\n  display: -webkit-flex;\n  display: -ms-flexbox;\n  display: flex;\n  -webkit-box-orient: vertical;\n  -webkit-box-direction: normal;\n  -webkit-flex-direction: column;\n  -ms-flex-direction: column;\n  flex-direction: column;\n  width: 100%;\n  height: 100%; }\n\n.item-range .item-inner {\n  overflow: visible; }\n\n.item-range .input-wrapper {\n  overflow: visible;\n  -webkit-box-orient: vertical;\n  -webkit-box-direction: normal;\n  -webkit-flex-direction: column;\n  -ms-flex-direction: column;\n  flex-direction: column; }\n\n.item-range ion-range {\n  width: 100%; }\n  .item-range ion-range ion-label {\n    -webkit-align-self: center;\n    -ms-flex-item-align: center;\n    align-self: center; }\n\nion-range {\n  position: relative;\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  ion-range ion-label {\n    -webkit-box-flex: initial;\n    -webkit-flex: initial;\n    -ms-flex: initial;\n    flex: initial; }\n  ion-range ion-icon {\n    min-height: 2.4rem;\n    font-size: 2.4rem;\n    line-height: 1; }\n\n.range-slider {\n  position: relative;\n  -webkit-box-flex: 1;\n  -webkit-flex: 1;\n  -ms-flex: 1;\n  flex: 1;\n  cursor: pointer; }\n\nion-refresher {\n  position: absolute;\n  top: 0;\n  left: 0;\n  z-index: 0;\n  display: none;\n  width: 100%;\n  height: 60px; }\n  ion-refresher.refresher-active {\n    display: block; }\n\n.has-refresher > scroll-content {\n  margin-top: -1px;\n  border-top: 1px solid #ddd;\n  -webkit-transition: all 320ms cubic-bezier(0.36, 0.66, 0.04, 1);\n  transition: all 320ms cubic-bezier(0.36, 0.66, 0.04, 1); }\n\nion-refresher-content {\n  display: -webkit-box;\n  display: -webkit-flex;\n  display: -ms-flexbox;\n  display: flex;\n  -webkit-box-orient: vertical;\n  -webkit-box-direction: normal;\n  -webkit-flex-direction: column;\n  -ms-flex-direction: column;\n  flex-direction: column;\n  -webkit-box-pack: center;\n  -webkit-justify-content: center;\n  -ms-flex-pack: center;\n  justify-content: center;\n  height: 100%; }\n\n.refresher-pulling,\n.refresher-refreshing {\n  display: none;\n  width: 100%; }\n\n.refresher-pulling-icon,\n.refresher-refreshing-icon {\n  font-size: 30px;\n  text-align: center;\n  color: #000;\n  -webkit-transform-origin: center;\n  transform-origin: center;\n  -webkit-transition: 200ms;\n  transition: 200ms; }\n\n.refresher-pulling-text,\n.refresher-refreshing-text {\n  font-size: 16px;\n  text-align: center;\n  color: #000; }\n\nion-refresher-content[state=pulling] .refresher-pulling {\n  display: block; }\n\nion-refresher-content[state=ready] .refresher-pulling {\n  display: block; }\n\nion-refresher-content[state=ready] .refresher-pulling-icon {\n  -webkit-transform: rotate(180deg);\n  transform: rotate(180deg); }\n\nion-refresher-content[state=refreshing] .refresher-refreshing {\n  display: block; }\n\nion-refresher-content[state=cancelling] .refresher-pulling {\n  display: block; }\n\nion-refresher-content[state=cancelling] .refresher-pulling-icon {\n  -webkit-transform: scale(0);\n  transform: scale(0); }\n\nion-refresher-content[state=completing] .refresher-refreshing {\n  display: block; }\n\nion-refresher-content[state=completing] .refresher-refreshing-icon {\n  -webkit-transform: scale(0);\n  transform: scale(0); }\n\nion-scroll {\n  position: relative;\n  display: block; }\n  ion-scroll.scroll-x scroll-content {\n    overflow-x: auto; }\n  ion-scroll.scroll-y scroll-content {\n    overflow-y: auto; }\n  ion-scroll[center] scroll-content {\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    -webkit-box-pack: center;\n    -webkit-justify-content: center;\n    -ms-flex-pack: center;\n    justify-content: center; }\n  ion-scroll scroll-content {\n    position: absolute;\n    top: 0;\n    right: 0;\n    bottom: 0;\n    left: 0;\n    overflow-y: hidden;\n    overflow-x: hidden;\n    -webkit-overflow-scrolling: touch;\n    will-change: scroll-position; }\n\n.hidden-show-when {\n  display: none !important; }\n\n.hidden-hide-when {\n  display: none !important; }\n\n/**\n * Swiper 3.1.2\n * Most modern mobile touch slider and framework with hardware accelerated transitions\n *\n * http://www.idangero.us/swiper/\n *\n * Copyright 2015, Vladimir Kharlampidi\n * The iDangero.us\n * http://www.idangero.us/\n *\n * Licensed under MIT\n *\n * Released on: August 22, 2015\n */\n.swiper-container {\n  margin: 0 auto;\n  position: relative;\n  overflow: hidden;\n  /* Fix of Webkit flickering */\n  z-index: 1; }\n\n.swiper-container-no-flexbox .swiper-slide {\n  float: left; }\n\n.swiper-container-vertical > .swiper-wrapper {\n  -webkit-box-orient: vertical;\n  -ms-flex-direction: column;\n  -webkit-flex-direction: column;\n  flex-direction: column; }\n\n.swiper-wrapper {\n  position: relative;\n  width: 100%;\n  height: 100%;\n  z-index: 1;\n  display: -webkit-box;\n  display: -ms-flexbox;\n  display: -webkit-flex;\n  display: flex;\n  -webkit-transition-property: -webkit-transform;\n  transition-property: transform;\n  box-sizing: content-box; }\n\n.swiper-container-android .swiper-slide,\n.swiper-wrapper {\n  -webkit-transform: translate3d(0px, 0, 0);\n  transform: translate3d(0px, 0, 0); }\n\n.swiper-container-multirow > .swiper-wrapper {\n  -webkit-box-lines: multiple;\n  -moz-box-lines: multiple;\n  -ms-flex-wrap: wrap;\n  -webkit-flex-wrap: wrap;\n  flex-wrap: wrap; }\n\n.swiper-container-free-mode > .swiper-wrapper {\n  -webkit-transition-timing-function: ease-out;\n  transition-timing-function: ease-out;\n  margin: 0 auto; }\n\n.swiper-slide {\n  -webkit-flex-shrink: 0;\n  -ms-flex: 0 0 auto;\n  -webkit-flex-shrink: 0;\n  -ms-flex-negative: 0;\n  flex-shrink: 0;\n  width: 100%;\n  height: 100%;\n  position: relative; }\n\n/* a11y */\n.swiper-container .swiper-notification {\n  position: absolute;\n  left: 0;\n  top: 0;\n  pointer-events: none;\n  opacity: 0;\n  z-index: -1000; }\n\n/* IE10 Windows Phone 8 Fixes */\n.swiper-wp8-horizontal {\n  -ms-touch-action: pan-y;\n  touch-action: pan-y; }\n\n.swiper-wp8-vertical {\n  -ms-touch-action: pan-x;\n  touch-action: pan-x; }\n\n/* Arrows */\n.swiper-button-prev,\n.swiper-button-next {\n  position: absolute;\n  top: 50%;\n  width: 27px;\n  height: 44px;\n  margin-top: -22px;\n  z-index: 10;\n  cursor: pointer;\n  background-size: 27px 44px;\n  background-position: center;\n  background-repeat: no-repeat; }\n\n.swiper-button-prev.swiper-button-disabled,\n.swiper-button-next.swiper-button-disabled {\n  opacity: .35;\n  cursor: auto;\n  pointer-events: none; }\n\n.swiper-button-prev,\n.swiper-container-rtl .swiper-button-next {\n  background-image: url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%2027%2044'%3E%3Cpath%20d%3D'M0%2C22L22%2C0l2.1%2C2.1L4.2%2C22l19.9%2C19.9L22%2C44L0%2C22L0%2C22L0%2C22z'%20fill%3D'%23007aff'%2F%3E%3C%2Fsvg%3E\");\n  left: 10px;\n  right: auto; }\n\n.swiper-button-prev.swiper-button-black,\n.swiper-container-rtl .swiper-button-next.swiper-button-black {\n  background-image: url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%2027%2044'%3E%3Cpath%20d%3D'M0%2C22L22%2C0l2.1%2C2.1L4.2%2C22l19.9%2C19.9L22%2C44L0%2C22L0%2C22L0%2C22z'%20fill%3D'%23000000'%2F%3E%3C%2Fsvg%3E\"); }\n\n.swiper-button-prev.swiper-button-white,\n.swiper-container-rtl .swiper-button-next.swiper-button-white {\n  background-image: url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%2027%2044'%3E%3Cpath%20d%3D'M0%2C22L22%2C0l2.1%2C2.1L4.2%2C22l19.9%2C19.9L22%2C44L0%2C22L0%2C22L0%2C22z'%20fill%3D'%23ffffff'%2F%3E%3C%2Fsvg%3E\"); }\n\n.swiper-button-next,\n.swiper-container-rtl .swiper-button-prev {\n  background-image: url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%2027%2044'%3E%3Cpath%20d%3D'M27%2C22L27%2C22L5%2C44l-2.1-2.1L22.8%2C22L2.9%2C2.1L5%2C0L27%2C22L27%2C22z'%20fill%3D'%23007aff'%2F%3E%3C%2Fsvg%3E\");\n  right: 10px;\n  left: auto; }\n\n.swiper-button-next.swiper-button-black,\n.swiper-container-rtl .swiper-button-prev.swiper-button-black {\n  background-image: url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%2027%2044'%3E%3Cpath%20d%3D'M27%2C22L27%2C22L5%2C44l-2.1-2.1L22.8%2C22L2.9%2C2.1L5%2C0L27%2C22L27%2C22z'%20fill%3D'%23000000'%2F%3E%3C%2Fsvg%3E\"); }\n\n.swiper-button-next.swiper-button-white,\n.swiper-container-rtl .swiper-button-prev.swiper-button-white {\n  background-image: url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%2027%2044'%3E%3Cpath%20d%3D'M27%2C22L27%2C22L5%2C44l-2.1-2.1L22.8%2C22L2.9%2C2.1L5%2C0L27%2C22L27%2C22z'%20fill%3D'%23ffffff'%2F%3E%3C%2Fsvg%3E\"); }\n\n/* Pagination Styles */\n.swiper-pagination {\n  position: absolute;\n  text-align: center;\n  -webkit-transition: 300ms;\n  transition: 300ms;\n  -webkit-transform: translate3d(0, 0, 0);\n  transform: translate3d(0, 0, 0);\n  z-index: 10; }\n\n.swiper-pagination.swiper-pagination-hidden {\n  opacity: 0; }\n\n.swiper-pagination-bullet {\n  width: 8px;\n  height: 8px;\n  display: inline-block;\n  border-radius: 100%;\n  background: #000;\n  opacity: .2; }\n\nbutton.swiper-pagination-bullet {\n  border: 0;\n  margin: 0;\n  padding: 0;\n  box-shadow: none;\n  -moz-appearance: none;\n  -ms-appearance: none;\n  -webkit-appearance: none;\n  appearance: none; }\n\n.swiper-pagination-clickable .swiper-pagination-bullet {\n  cursor: pointer; }\n\n.swiper-pagination-white .swiper-pagination-bullet {\n  background: #fff; }\n\n.swiper-pagination-bullet-active {\n  opacity: 1; }\n\n.swiper-pagination-white .swiper-pagination-bullet-active {\n  background: #fff; }\n\n.swiper-pagination-black .swiper-pagination-bullet-active {\n  background: #000; }\n\n.swiper-container-vertical > .swiper-pagination {\n  right: 10px;\n  top: 50%;\n  -webkit-transform: translate3d(0px, -50%, 0);\n  transform: translate3d(0px, -50%, 0); }\n\n.swiper-container-vertical > .swiper-pagination .swiper-pagination-bullet {\n  margin: 5px 0;\n  display: block; }\n\n.swiper-container-horizontal > .swiper-pagination {\n  bottom: 20px;\n  left: 0;\n  width: 100%; }\n\n.swiper-container-horizontal > .swiper-pagination .swiper-pagination-bullet {\n  margin: 0 5px; }\n\n/* 3D Container */\n.swiper-container-3d {\n  -webkit-perspective: 1200px;\n  -o-perspective: 1200px;\n  perspective: 1200px; }\n\n.swiper-container-3d .swiper-wrapper,\n.swiper-container-3d .swiper-slide,\n.swiper-container-3d .swiper-slide-shadow-left,\n.swiper-container-3d .swiper-slide-shadow-right,\n.swiper-container-3d .swiper-slide-shadow-top,\n.swiper-container-3d .swiper-slide-shadow-bottom,\n.swiper-container-3d .swiper-cube-shadow {\n  -webkit-transform-style: preserve-3d;\n  -ms-transform-style: preserve-3d;\n  transform-style: preserve-3d; }\n\n.swiper-container-3d .swiper-slide-shadow-left,\n.swiper-container-3d .swiper-slide-shadow-right,\n.swiper-container-3d .swiper-slide-shadow-top,\n.swiper-container-3d .swiper-slide-shadow-bottom {\n  position: absolute;\n  left: 0;\n  bottom: 0;\n  width: 100%;\n  height: 100%;\n  pointer-events: none;\n  z-index: 10; }\n\n.swiper-container-3d .swiper-slide-shadow-left {\n  background-image: -webkit-gradient(linear, left top, right top, from(rgba(0, 0, 0, 0.5)), to(transparent));\n  /* Safari 4+, Chrome */\n  background-image: -webkit-linear-gradient(right, rgba(0, 0, 0, 0.5), transparent);\n  /* Chrome 10+, Safari 5.1+, iOS 5+ */\n  /* Firefox 3.6-15 */\n  /* Opera 11.10-12.00 */\n  background-image: linear-gradient(to left, rgba(0, 0, 0, 0.5), transparent);\n  /* Firefox 16+, IE10, Opera 12.50+ */ }\n\n.swiper-container-3d .swiper-slide-shadow-right {\n  background-image: -webkit-gradient(linear, right top, left top, from(rgba(0, 0, 0, 0.5)), to(transparent));\n  /* Safari 4+, Chrome */\n  background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, 0.5), transparent);\n  /* Chrome 10+, Safari 5.1+, iOS 5+ */\n  /* Firefox 3.6-15 */\n  /* Opera 11.10-12.00 */\n  background-image: linear-gradient(to right, rgba(0, 0, 0, 0.5), transparent);\n  /* Firefox 16+, IE10, Opera 12.50+ */ }\n\n.swiper-container-3d .swiper-slide-shadow-top {\n  background-image: -webkit-gradient(linear, left top, left bottom, from(rgba(0, 0, 0, 0.5)), to(transparent));\n  /* Safari 4+, Chrome */\n  background-image: -webkit-linear-gradient(bottom, rgba(0, 0, 0, 0.5), transparent);\n  /* Chrome 10+, Safari 5.1+, iOS 5+ */\n  /* Firefox 3.6-15 */\n  /* Opera 11.10-12.00 */\n  background-image: linear-gradient(to top, rgba(0, 0, 0, 0.5), transparent);\n  /* Firefox 16+, IE10, Opera 12.50+ */ }\n\n.swiper-container-3d .swiper-slide-shadow-bottom {\n  background-image: -webkit-gradient(linear, left bottom, left top, from(rgba(0, 0, 0, 0.5)), to(transparent));\n  /* Safari 4+, Chrome */\n  background-image: -webkit-linear-gradient(top, rgba(0, 0, 0, 0.5), transparent);\n  /* Chrome 10+, Safari 5.1+, iOS 5+ */\n  /* Firefox 3.6-15 */\n  /* Opera 11.10-12.00 */\n  background-image: linear-gradient(to bottom, rgba(0, 0, 0, 0.5), transparent);\n  /* Firefox 16+, IE10, Opera 12.50+ */ }\n\n/* Coverflow */\n.swiper-container-coverflow .swiper-wrapper {\n  /* Windows 8 IE 10 fix */\n  -ms-perspective: 1200px; }\n\n/* Fade */\n.swiper-container-fade.swiper-container-free-mode .swiper-slide {\n  -webkit-transition-timing-function: ease-out;\n  transition-timing-function: ease-out; }\n\n.swiper-container-fade .swiper-slide {\n  pointer-events: none; }\n\n.swiper-container-fade .swiper-slide .swiper-slide {\n  pointer-events: none; }\n\n.swiper-container-fade .swiper-slide-active,\n.swiper-container-fade .swiper-slide-active .swiper-slide-active {\n  pointer-events: auto; }\n\n/* Cube */\n.swiper-container-cube {\n  overflow: visible; }\n\n.swiper-container-cube .swiper-slide {\n  pointer-events: none;\n  visibility: hidden;\n  -webkit-transform-origin: 0 0;\n  transform-origin: 0 0;\n  -webkit-backface-visibility: hidden;\n  -ms-backface-visibility: hidden;\n  backface-visibility: hidden;\n  width: 100%;\n  height: 100%;\n  z-index: 1; }\n\n.swiper-container-cube.swiper-container-rtl .swiper-slide {\n  -webkit-transform-origin: 100% 0;\n  transform-origin: 100% 0; }\n\n.swiper-container-cube .swiper-slide-active,\n.swiper-container-cube .swiper-slide-next,\n.swiper-container-cube .swiper-slide-prev,\n.swiper-container-cube .swiper-slide-next + .swiper-slide {\n  pointer-events: auto;\n  visibility: visible; }\n\n.swiper-container-cube .swiper-slide-shadow-top,\n.swiper-container-cube .swiper-slide-shadow-bottom,\n.swiper-container-cube .swiper-slide-shadow-left,\n.swiper-container-cube .swiper-slide-shadow-right {\n  z-index: 0;\n  -webkit-backface-visibility: hidden;\n  -ms-backface-visibility: hidden;\n  backface-visibility: hidden; }\n\n.swiper-container-cube .swiper-cube-shadow {\n  position: absolute;\n  left: 0;\n  bottom: 0;\n  width: 100%;\n  height: 100%;\n  background: #000;\n  opacity: .6;\n  -webkit-filter: blur(50px);\n  filter: blur(50px);\n  z-index: 0; }\n\n/* Scrollbar */\n.swiper-scrollbar {\n  border-radius: 10px;\n  position: relative;\n  -ms-touch-action: none;\n  background: rgba(0, 0, 0, 0.1); }\n\n.swiper-container-horizontal > .swiper-scrollbar {\n  position: absolute;\n  left: 1%;\n  bottom: 3px;\n  z-index: 50;\n  height: 5px;\n  width: 98%; }\n\n.swiper-container-vertical > .swiper-scrollbar {\n  position: absolute;\n  right: 3px;\n  top: 1%;\n  z-index: 50;\n  width: 5px;\n  height: 98%; }\n\n.swiper-scrollbar-drag {\n  height: 100%;\n  width: 100%;\n  position: relative;\n  background: rgba(0, 0, 0, 0.5);\n  border-radius: 10px;\n  left: 0;\n  top: 0; }\n\n.swiper-scrollbar-cursor-drag {\n  cursor: move; }\n\n/* Preloader */\n.swiper-lazy-preloader {\n  width: 42px;\n  height: 42px;\n  position: absolute;\n  left: 50%;\n  top: 50%;\n  margin-left: -21px;\n  margin-top: -21px;\n  z-index: 10;\n  -webkit-transform-origin: 50%;\n  transform-origin: 50%;\n  -webkit-animation: swiper-preloader-spin 1s steps(12, end) infinite;\n  animation: swiper-preloader-spin 1s steps(12, end) infinite; }\n\n.swiper-lazy-preloader:after {\n  display: block;\n  content: \"\";\n  width: 100%;\n  height: 100%;\n  background-image: url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20viewBox%3D'0%200%20120%20120'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20xmlns%3Axlink%3D'http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink'%3E%3Cdefs%3E%3Cline%20id%3D'l'%20x1%3D'60'%20x2%3D'60'%20y1%3D'7'%20y2%3D'27'%20stroke%3D'%236c6c6c'%20stroke-width%3D'11'%20stroke-linecap%3D'round'%2F%3E%3C%2Fdefs%3E%3Cg%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(30%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(60%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(90%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(120%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(150%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.37'%20transform%3D'rotate(180%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.46'%20transform%3D'rotate(210%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.56'%20transform%3D'rotate(240%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.66'%20transform%3D'rotate(270%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.75'%20transform%3D'rotate(300%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.85'%20transform%3D'rotate(330%2060%2C60)'%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E\");\n  background-position: 50%;\n  background-size: 100%;\n  background-repeat: no-repeat; }\n\n.swiper-lazy-preloader-white:after {\n  background-image: url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20viewBox%3D'0%200%20120%20120'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20xmlns%3Axlink%3D'http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink'%3E%3Cdefs%3E%3Cline%20id%3D'l'%20x1%3D'60'%20x2%3D'60'%20y1%3D'7'%20y2%3D'27'%20stroke%3D'%23fff'%20stroke-width%3D'11'%20stroke-linecap%3D'round'%2F%3E%3C%2Fdefs%3E%3Cg%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(30%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(60%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(90%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(120%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(150%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.37'%20transform%3D'rotate(180%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.46'%20transform%3D'rotate(210%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.56'%20transform%3D'rotate(240%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.66'%20transform%3D'rotate(270%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.75'%20transform%3D'rotate(300%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.85'%20transform%3D'rotate(330%2060%2C60)'%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E\"); }\n\n@-webkit-keyframes swiper-preloader-spin {\n  100% {\n    -webkit-transform: rotate(360deg); } }\n\n@keyframes swiper-preloader-spin {\n  100% {\n    -webkit-transform: rotate(360deg);\n    transform: rotate(360deg); } }\n\nion-slides {\n  width: 100%;\n  height: 100%;\n  display: block; }\n\n.slide-zoom {\n  display: block;\n  width: 100%;\n  text-align: center; }\n\n.swiper-container {\n  width: 100%;\n  height: 100%;\n  padding: 0;\n  display: -webkit-box;\n  display: -webkit-flex;\n  display: -ms-flexbox;\n  display: flex;\n  overflow: hidden; }\n\n.swiper-wrapper {\n  width: 100%;\n  height: 100%;\n  padding: 0;\n  display: -webkit-box;\n  display: -webkit-flex;\n  display: -ms-flexbox;\n  display: flex; }\n\n.swiper-slide {\n  width: 100%;\n  height: 100%;\n  box-sizing: border-box;\n  text-align: center;\n  font-size: 18px;\n  /* Center slide text vertically */\n  display: -webkit-box;\n  display: -webkit-flex;\n  display: -ms-flexbox;\n  display: flex;\n  -webkit-box-pack: center;\n  -webkit-justify-content: center;\n  -ms-flex-pack: center;\n  justify-content: center;\n  -webkit-box-align: center;\n  -webkit-align-items: center;\n  -ms-flex-align: center;\n  align-items: center; }\n  .swiper-slide img {\n    width: auto;\n    height: auto;\n    max-width: 100%;\n    max-height: 100%; }\n\nion-spinner {\n  position: relative;\n  display: inline-block;\n  width: 28px;\n  height: 28px; }\n\nion-spinner svg {\n  position: absolute;\n  top: 0;\n  left: 0;\n  width: 100%;\n  height: 100%;\n  -webkit-transform: translateZ(0);\n  transform: translateZ(0); }\n\nion-spinner.spinner-paused svg {\n  -webkit-animation-play-state: paused;\n  animation-play-state: paused; }\n\n.spinner-ios line,\n.spinner-ios-small line {\n  stroke: #69717d;\n  stroke-width: 4px;\n  stroke-linecap: round; }\n\n.spinner-ios svg,\n.spinner-ios-small svg {\n  -webkit-animation: spinner-fade-out 1s linear infinite;\n  animation: spinner-fade-out 1s linear infinite; }\n\n.spinner-bubbles circle {\n  fill: #000; }\n\n.spinner-bubbles svg {\n  -webkit-animation: spinner-scale-out 1s linear infinite;\n  animation: spinner-scale-out 1s linear infinite; }\n\n.spinner-circles circle {\n  fill: #69717d; }\n\n.spinner-circles svg {\n  -webkit-animation: spinner-fade-out 1s linear infinite;\n  animation: spinner-fade-out 1s linear infinite; }\n\n.spinner-crescent circle {\n  fill: transparent;\n  stroke: #000;\n  stroke-width: 4px;\n  stroke-dasharray: 128px;\n  stroke-dashoffset: 82px; }\n\n.spinner-crescent svg {\n  -webkit-animation: spinner-rotate 1s linear infinite;\n  animation: spinner-rotate 1s linear infinite; }\n\n.spinner-dots circle {\n  fill: #444;\n  stroke-width: 0; }\n\n.spinner-dots svg {\n  -webkit-transform-origin: center;\n  transform-origin: center;\n  -webkit-animation: spinner-dots 1s linear infinite;\n  animation: spinner-dots 1s linear infinite; }\n\n@-webkit-keyframes spinner-fade-out {\n  0% {\n    opacity: 1; }\n  100% {\n    opacity: 0; } }\n\n@keyframes spinner-fade-out {\n  0% {\n    opacity: 1; }\n  100% {\n    opacity: 0; } }\n\n@-webkit-keyframes spinner-scale-out {\n  0% {\n    -webkit-transform: scale(1, 1);\n    transform: scale(1, 1); }\n  100% {\n    -webkit-transform: scale(0, 0);\n    transform: scale(0, 0); } }\n\n@keyframes spinner-scale-out {\n  0% {\n    -webkit-transform: scale(1, 1);\n    transform: scale(1, 1); }\n  100% {\n    -webkit-transform: scale(0, 0);\n    transform: scale(0, 0); } }\n\n@-webkit-keyframes spinner-rotate {\n  0% {\n    -webkit-transform: rotate(0deg);\n    transform: rotate(0deg); }\n  100% {\n    -webkit-transform: rotate(360deg);\n    transform: rotate(360deg); } }\n\n@keyframes spinner-rotate {\n  0% {\n    -webkit-transform: rotate(0deg);\n    transform: rotate(0deg); }\n  100% {\n    -webkit-transform: rotate(360deg);\n    transform: rotate(360deg); } }\n\n@-webkit-keyframes spinner-dots {\n  0% {\n    opacity: .9;\n    -webkit-transform: scale(1, 1);\n    transform: scale(1, 1); }\n  50% {\n    opacity: .3;\n    -webkit-transform: scale(0.4, 0.4);\n    transform: scale(0.4, 0.4); }\n  100% {\n    opacity: .9;\n    -webkit-transform: scale(1, 1);\n    transform: scale(1, 1); } }\n\n@keyframes spinner-dots {\n  0% {\n    opacity: .9;\n    -webkit-transform: scale(1, 1);\n    transform: scale(1, 1); }\n  50% {\n    opacity: .3;\n    -webkit-transform: scale(0.4, 0.4);\n    transform: scale(0.4, 0.4); }\n  100% {\n    opacity: .9;\n    -webkit-transform: scale(1, 1);\n    transform: scale(1, 1); } }\n\nhtml {\n  font-size: 62.5%; }\n\na {\n  background-color: transparent; }\n\n.enable-hover a:hover {\n  opacity: .7; }\n\nh1,\nh2,\nh3,\nh4,\nh5,\nh6 {\n  margin-top: 1.6rem;\n  margin-bottom: 1rem;\n  font-weight: 500;\n  line-height: 1.2; }\n\n[padding] h1:first-child,\n[padding] h2:first-child,\n[padding] h3:first-child,\n[padding] h4:first-child,\n[padding] h5:first-child,\n[padding] h6:first-child {\n  margin-top: -.3rem; }\n\nh1 + h2,\nh1 + h3,\nh2 + h3 {\n  margin-top: -.3rem; }\n\nh1 {\n  margin-top: 2rem;\n  font-size: 2.6rem; }\n\nh2 {\n  margin-top: 1.8rem;\n  font-size: 2.4rem; }\n\nh3 {\n  font-size: 2.2rem; }\n\nh4 {\n  font-size: 2rem; }\n\nh5 {\n  font-size: 1.8rem; }\n\nh6 {\n  font-size: 1.6rem; }\n\nsmall {\n  font-size: 75%; }\n\nsub,\nsup {\n  position: relative;\n  font-size: 75%;\n  line-height: 0;\n  vertical-align: baseline; }\n\nsup {\n  top: -.5em; }\n\nsub {\n  bottom: -.25em; }\n\n[text-left] {\n  text-align: left; }\n\n[text-center] {\n  text-align: center; }\n\n[text-right] {\n  text-align: right; }\n\n[text-justify] {\n  text-align: justify; }\n\n[text-nowrap] {\n  white-space: nowrap; }\n\n[text-uppercase] {\n  text-transform: uppercase; }\n\n[text-lowercase] {\n  text-transform: lowercase; }\n\n[text-capitalize] {\n  text-transform: capitalize; }\n\n.virtual-scroll {\n  position: relative; }\n\n.virtual-scroll .virtual-position,\n.virtual-scroll .virtual-position.item {\n  position: absolute;\n  top: 0;\n  left: 0;\n  -webkit-transition-duration: 0ms;\n  transition-duration: 0ms; }\n\n.virtual-scroll .virtual-hidden {\n  display: none; }\n\n.ion-ios-add:before {\n  content: \"\\f102\"; }\n\n.ion-ios-add-circle:before {\n  content: \"\\f101\"; }\n\n.ion-ios-add-circle-outline:before {\n  content: \"\\f100\"; }\n\n.ion-ios-add-outline:before {\n  content: \"\\f102\"; }\n\n.ion-ios-alarm:before {\n  content: \"\\f3c8\"; }\n\n.ion-ios-alarm-outline:before {\n  content: \"\\f3c7\"; }\n\n.ion-ios-albums:before {\n  content: \"\\f3ca\"; }\n\n.ion-ios-albums-outline:before {\n  content: \"\\f3c9\"; }\n\n.ion-ios-alert:before {\n  content: \"\\f104\"; }\n\n.ion-ios-alert-outline:before {\n  content: \"\\f103\"; }\n\n.ion-ios-american-football:before {\n  content: \"\\f106\"; }\n\n.ion-ios-american-football-outline:before {\n  content: \"\\f105\"; }\n\n.ion-ios-analytics:before {\n  content: \"\\f3ce\"; }\n\n.ion-ios-analytics-outline:before {\n  content: \"\\f3cd\"; }\n\n.ion-ios-aperture:before {\n  content: \"\\f108\"; }\n\n.ion-ios-aperture-outline:before {\n  content: \"\\f107\"; }\n\n.ion-ios-apps:before {\n  content: \"\\f10a\"; }\n\n.ion-ios-apps-outline:before {\n  content: \"\\f109\"; }\n\n.ion-ios-appstore:before {\n  content: \"\\f10c\"; }\n\n.ion-ios-appstore-outline:before {\n  content: \"\\f10b\"; }\n\n.ion-ios-archive:before {\n  content: \"\\f10e\"; }\n\n.ion-ios-archive-outline:before {\n  content: \"\\f10d\"; }\n\n.ion-ios-arrow-back:before {\n  content: \"\\f3cf\"; }\n\n.ion-ios-arrow-back-outline:before {\n  content: \"\\f3cf\"; }\n\n.ion-ios-arrow-down:before {\n  content: \"\\f3d0\"; }\n\n.ion-ios-arrow-down-outline:before {\n  content: \"\\f3d0\"; }\n\n.ion-ios-arrow-dropdown:before {\n  content: \"\\f110\"; }\n\n.ion-ios-arrow-dropdown-circle:before {\n  content: \"\\f10f\"; }\n\n.ion-ios-arrow-dropdown-circle-outline:before {\n  content: \"\\f10f\"; }\n\n.ion-ios-arrow-dropdown-outline:before {\n  content: \"\\f110\"; }\n\n.ion-ios-arrow-dropleft:before {\n  content: \"\\f112\"; }\n\n.ion-ios-arrow-dropleft-circle:before {\n  content: \"\\f111\"; }\n\n.ion-ios-arrow-dropleft-circle-outline:before {\n  content: \"\\f111\"; }\n\n.ion-ios-arrow-dropleft-outline:before {\n  content: \"\\f112\"; }\n\n.ion-ios-arrow-dropright:before {\n  content: \"\\f114\"; }\n\n.ion-ios-arrow-dropright-circle:before {\n  content: \"\\f113\"; }\n\n.ion-ios-arrow-dropright-circle-outline:before {\n  content: \"\\f113\"; }\n\n.ion-ios-arrow-dropright-outline:before {\n  content: \"\\f114\"; }\n\n.ion-ios-arrow-dropup:before {\n  content: \"\\f116\"; }\n\n.ion-ios-arrow-dropup-circle:before {\n  content: \"\\f115\"; }\n\n.ion-ios-arrow-dropup-circle-outline:before {\n  content: \"\\f115\"; }\n\n.ion-ios-arrow-dropup-outline:before {\n  content: \"\\f116\"; }\n\n.ion-ios-arrow-forward:before {\n  content: \"\\f3d1\"; }\n\n.ion-ios-arrow-forward-outline:before {\n  content: \"\\f3d1\"; }\n\n.ion-ios-arrow-round-back:before {\n  content: \"\\f117\"; }\n\n.ion-ios-arrow-round-back-outline:before {\n  content: \"\\f117\"; }\n\n.ion-ios-arrow-round-down:before {\n  content: \"\\f118\"; }\n\n.ion-ios-arrow-round-down-outline:before {\n  content: \"\\f118\"; }\n\n.ion-ios-arrow-round-forward:before {\n  content: \"\\f119\"; }\n\n.ion-ios-arrow-round-forward-outline:before {\n  content: \"\\f119\"; }\n\n.ion-ios-arrow-round-up:before {\n  content: \"\\f11a\"; }\n\n.ion-ios-arrow-round-up-outline:before {\n  content: \"\\f11a\"; }\n\n.ion-ios-arrow-up:before {\n  content: \"\\f3d8\"; }\n\n.ion-ios-arrow-up-outline:before {\n  content: \"\\f3d8\"; }\n\n.ion-ios-at:before {\n  content: \"\\f3da\"; }\n\n.ion-ios-at-outline:before {\n  content: \"\\f3d9\"; }\n\n.ion-ios-attach:before {\n  content: \"\\f11b\"; }\n\n.ion-ios-attach-outline:before {\n  content: \"\\f11b\"; }\n\n.ion-ios-backspace:before {\n  content: \"\\f11d\"; }\n\n.ion-ios-backspace-outline:before {\n  content: \"\\f11c\"; }\n\n.ion-ios-barcode:before {\n  content: \"\\f3dc\"; }\n\n.ion-ios-barcode-outline:before {\n  content: \"\\f3db\"; }\n\n.ion-ios-baseball:before {\n  content: \"\\f3de\"; }\n\n.ion-ios-baseball-outline:before {\n  content: \"\\f3dd\"; }\n\n.ion-ios-basket:before {\n  content: \"\\f11f\"; }\n\n.ion-ios-basket-outline:before {\n  content: \"\\f11e\"; }\n\n.ion-ios-basketball:before {\n  content: \"\\f3e0\"; }\n\n.ion-ios-basketball-outline:before {\n  content: \"\\f3df\"; }\n\n.ion-ios-battery-charging:before {\n  content: \"\\f120\"; }\n\n.ion-ios-battery-charging-outline:before {\n  content: \"\\f120\"; }\n\n.ion-ios-battery-dead:before {\n  content: \"\\f121\"; }\n\n.ion-ios-battery-dead-outline:before {\n  content: \"\\f121\"; }\n\n.ion-ios-battery-full:before {\n  content: \"\\f122\"; }\n\n.ion-ios-battery-full-outline:before {\n  content: \"\\f122\"; }\n\n.ion-ios-beaker:before {\n  content: \"\\f124\"; }\n\n.ion-ios-beaker-outline:before {\n  content: \"\\f123\"; }\n\n.ion-ios-beer:before {\n  content: \"\\f126\"; }\n\n.ion-ios-beer-outline:before {\n  content: \"\\f125\"; }\n\n.ion-ios-bicycle:before {\n  content: \"\\f127\"; }\n\n.ion-ios-bicycle-outline:before {\n  content: \"\\f127\"; }\n\n.ion-ios-bluetooth:before {\n  content: \"\\f128\"; }\n\n.ion-ios-bluetooth-outline:before {\n  content: \"\\f128\"; }\n\n.ion-ios-boat:before {\n  content: \"\\f12a\"; }\n\n.ion-ios-boat-outline:before {\n  content: \"\\f129\"; }\n\n.ion-ios-body:before {\n  content: \"\\f3e4\"; }\n\n.ion-ios-body-outline:before {\n  content: \"\\f3e3\"; }\n\n.ion-ios-bonfire:before {\n  content: \"\\f12c\"; }\n\n.ion-ios-bonfire-outline:before {\n  content: \"\\f12b\"; }\n\n.ion-ios-book:before {\n  content: \"\\f3e8\"; }\n\n.ion-ios-book-outline:before {\n  content: \"\\f3e7\"; }\n\n.ion-ios-bookmark:before {\n  content: \"\\f12e\"; }\n\n.ion-ios-bookmark-outline:before {\n  content: \"\\f12d\"; }\n\n.ion-ios-bookmarks:before {\n  content: \"\\f3ea\"; }\n\n.ion-ios-bookmarks-outline:before {\n  content: \"\\f3e9\"; }\n\n.ion-ios-bowtie:before {\n  content: \"\\f130\"; }\n\n.ion-ios-bowtie-outline:before {\n  content: \"\\f12f\"; }\n\n.ion-ios-briefcase:before {\n  content: \"\\f3ee\"; }\n\n.ion-ios-briefcase-outline:before {\n  content: \"\\f3ed\"; }\n\n.ion-ios-browsers:before {\n  content: \"\\f3f0\"; }\n\n.ion-ios-browsers-outline:before {\n  content: \"\\f3ef\"; }\n\n.ion-ios-brush:before {\n  content: \"\\f132\"; }\n\n.ion-ios-brush-outline:before {\n  content: \"\\f131\"; }\n\n.ion-ios-bug:before {\n  content: \"\\f134\"; }\n\n.ion-ios-bug-outline:before {\n  content: \"\\f133\"; }\n\n.ion-ios-build:before {\n  content: \"\\f136\"; }\n\n.ion-ios-build-outline:before {\n  content: \"\\f135\"; }\n\n.ion-ios-bulb:before {\n  content: \"\\f138\"; }\n\n.ion-ios-bulb-outline:before {\n  content: \"\\f137\"; }\n\n.ion-ios-bus:before {\n  content: \"\\f13a\"; }\n\n.ion-ios-bus-outline:before {\n  content: \"\\f139\"; }\n\n.ion-ios-cafe:before {\n  content: \"\\f13c\"; }\n\n.ion-ios-cafe-outline:before {\n  content: \"\\f13b\"; }\n\n.ion-ios-calculator:before {\n  content: \"\\f3f2\"; }\n\n.ion-ios-calculator-outline:before {\n  content: \"\\f3f1\"; }\n\n.ion-ios-calendar:before {\n  content: \"\\f3f4\"; }\n\n.ion-ios-calendar-outline:before {\n  content: \"\\f3f3\"; }\n\n.ion-ios-call:before {\n  content: \"\\f13e\"; }\n\n.ion-ios-call-outline:before {\n  content: \"\\f13d\"; }\n\n.ion-ios-camera:before {\n  content: \"\\f3f6\"; }\n\n.ion-ios-camera-outline:before {\n  content: \"\\f3f5\"; }\n\n.ion-ios-car:before {\n  content: \"\\f140\"; }\n\n.ion-ios-car-outline:before {\n  content: \"\\f13f\"; }\n\n.ion-ios-card:before {\n  content: \"\\f142\"; }\n\n.ion-ios-card-outline:before {\n  content: \"\\f141\"; }\n\n.ion-ios-cart:before {\n  content: \"\\f3f8\"; }\n\n.ion-ios-cart-outline:before {\n  content: \"\\f3f7\"; }\n\n.ion-ios-cash:before {\n  content: \"\\f144\"; }\n\n.ion-ios-cash-outline:before {\n  content: \"\\f143\"; }\n\n.ion-ios-chatboxes:before {\n  content: \"\\f3fa\"; }\n\n.ion-ios-chatboxes-outline:before {\n  content: \"\\f3f9\"; }\n\n.ion-ios-chatbubbles:before {\n  content: \"\\f146\"; }\n\n.ion-ios-chatbubbles-outline:before {\n  content: \"\\f145\"; }\n\n.ion-ios-checkbox:before {\n  content: \"\\f148\"; }\n\n.ion-ios-checkbox-outline:before {\n  content: \"\\f147\"; }\n\n.ion-ios-checkmark:before {\n  content: \"\\f3ff\"; }\n\n.ion-ios-checkmark-circle:before {\n  content: \"\\f14a\"; }\n\n.ion-ios-checkmark-circle-outline:before {\n  content: \"\\f149\"; }\n\n.ion-ios-checkmark-outline:before {\n  content: \"\\f3ff\"; }\n\n.ion-ios-clipboard:before {\n  content: \"\\f14c\"; }\n\n.ion-ios-clipboard-outline:before {\n  content: \"\\f14b\"; }\n\n.ion-ios-clock:before {\n  content: \"\\f403\"; }\n\n.ion-ios-clock-outline:before {\n  content: \"\\f402\"; }\n\n.ion-ios-close:before {\n  content: \"\\f406\"; }\n\n.ion-ios-close-circle:before {\n  content: \"\\f14e\"; }\n\n.ion-ios-close-circle-outline:before {\n  content: \"\\f14d\"; }\n\n.ion-ios-close-outline:before {\n  content: \"\\f406\"; }\n\n.ion-ios-closed-captioning:before {\n  content: \"\\f150\"; }\n\n.ion-ios-closed-captioning-outline:before {\n  content: \"\\f14f\"; }\n\n.ion-ios-cloud:before {\n  content: \"\\f40c\"; }\n\n.ion-ios-cloud-circle:before {\n  content: \"\\f152\"; }\n\n.ion-ios-cloud-circle-outline:before {\n  content: \"\\f151\"; }\n\n.ion-ios-cloud-done:before {\n  content: \"\\f154\"; }\n\n.ion-ios-cloud-done-outline:before {\n  content: \"\\f153\"; }\n\n.ion-ios-cloud-download:before {\n  content: \"\\f408\"; }\n\n.ion-ios-cloud-download-outline:before {\n  content: \"\\f407\"; }\n\n.ion-ios-cloud-outline:before {\n  content: \"\\f409\"; }\n\n.ion-ios-cloud-upload:before {\n  content: \"\\f40b\"; }\n\n.ion-ios-cloud-upload-outline:before {\n  content: \"\\f40a\"; }\n\n.ion-ios-cloudy:before {\n  content: \"\\f410\"; }\n\n.ion-ios-cloudy-night:before {\n  content: \"\\f40e\"; }\n\n.ion-ios-cloudy-night-outline:before {\n  content: \"\\f40d\"; }\n\n.ion-ios-cloudy-outline:before {\n  content: \"\\f40f\"; }\n\n.ion-ios-code:before {\n  content: \"\\f157\"; }\n\n.ion-ios-code-download:before {\n  content: \"\\f155\"; }\n\n.ion-ios-code-download-outline:before {\n  content: \"\\f155\"; }\n\n.ion-ios-code-outline:before {\n  content: \"\\f157\"; }\n\n.ion-ios-code-working:before {\n  content: \"\\f156\"; }\n\n.ion-ios-code-working-outline:before {\n  content: \"\\f156\"; }\n\n.ion-ios-cog:before {\n  content: \"\\f412\"; }\n\n.ion-ios-cog-outline:before {\n  content: \"\\f411\"; }\n\n.ion-ios-color-fill:before {\n  content: \"\\f159\"; }\n\n.ion-ios-color-fill-outline:before {\n  content: \"\\f158\"; }\n\n.ion-ios-color-filter:before {\n  content: \"\\f414\"; }\n\n.ion-ios-color-filter-outline:before {\n  content: \"\\f413\"; }\n\n.ion-ios-color-palette:before {\n  content: \"\\f15b\"; }\n\n.ion-ios-color-palette-outline:before {\n  content: \"\\f15a\"; }\n\n.ion-ios-color-wand:before {\n  content: \"\\f416\"; }\n\n.ion-ios-color-wand-outline:before {\n  content: \"\\f415\"; }\n\n.ion-ios-compass:before {\n  content: \"\\f15d\"; }\n\n.ion-ios-compass-outline:before {\n  content: \"\\f15c\"; }\n\n.ion-ios-construct:before {\n  content: \"\\f15f\"; }\n\n.ion-ios-construct-outline:before {\n  content: \"\\f15e\"; }\n\n.ion-ios-contact:before {\n  content: \"\\f41a\"; }\n\n.ion-ios-contact-outline:before {\n  content: \"\\f419\"; }\n\n.ion-ios-contacts:before {\n  content: \"\\f161\"; }\n\n.ion-ios-contacts-outline:before {\n  content: \"\\f160\"; }\n\n.ion-ios-contract:before {\n  content: \"\\f162\"; }\n\n.ion-ios-contract-outline:before {\n  content: \"\\f162\"; }\n\n.ion-ios-contrast:before {\n  content: \"\\f163\"; }\n\n.ion-ios-contrast-outline:before {\n  content: \"\\f163\"; }\n\n.ion-ios-copy:before {\n  content: \"\\f41c\"; }\n\n.ion-ios-copy-outline:before {\n  content: \"\\f41b\"; }\n\n.ion-ios-create:before {\n  content: \"\\f165\"; }\n\n.ion-ios-create-outline:before {\n  content: \"\\f164\"; }\n\n.ion-ios-crop:before {\n  content: \"\\f41e\"; }\n\n.ion-ios-crop-outline:before {\n  content: \"\\f166\"; }\n\n.ion-ios-cube:before {\n  content: \"\\f168\"; }\n\n.ion-ios-cube-outline:before {\n  content: \"\\f167\"; }\n\n.ion-ios-cut:before {\n  content: \"\\f16a\"; }\n\n.ion-ios-cut-outline:before {\n  content: \"\\f169\"; }\n\n.ion-ios-desktop:before {\n  content: \"\\f16c\"; }\n\n.ion-ios-desktop-outline:before {\n  content: \"\\f16b\"; }\n\n.ion-ios-disc:before {\n  content: \"\\f16e\"; }\n\n.ion-ios-disc-outline:before {\n  content: \"\\f16d\"; }\n\n.ion-ios-document:before {\n  content: \"\\f170\"; }\n\n.ion-ios-document-outline:before {\n  content: \"\\f16f\"; }\n\n.ion-ios-done-all:before {\n  content: \"\\f171\"; }\n\n.ion-ios-done-all-outline:before {\n  content: \"\\f171\"; }\n\n.ion-ios-download:before {\n  content: \"\\f420\"; }\n\n.ion-ios-download-outline:before {\n  content: \"\\f41f\"; }\n\n.ion-ios-easel:before {\n  content: \"\\f173\"; }\n\n.ion-ios-easel-outline:before {\n  content: \"\\f172\"; }\n\n.ion-ios-egg:before {\n  content: \"\\f175\"; }\n\n.ion-ios-egg-outline:before {\n  content: \"\\f174\"; }\n\n.ion-ios-exit:before {\n  content: \"\\f177\"; }\n\n.ion-ios-exit-outline:before {\n  content: \"\\f176\"; }\n\n.ion-ios-expand:before {\n  content: \"\\f178\"; }\n\n.ion-ios-expand-outline:before {\n  content: \"\\f178\"; }\n\n.ion-ios-eye:before {\n  content: \"\\f425\"; }\n\n.ion-ios-eye-off:before {\n  content: \"\\f17a\"; }\n\n.ion-ios-eye-off-outline:before {\n  content: \"\\f179\"; }\n\n.ion-ios-eye-outline:before {\n  content: \"\\f424\"; }\n\n.ion-ios-fastforward:before {\n  content: \"\\f427\"; }\n\n.ion-ios-fastforward-outline:before {\n  content: \"\\f426\"; }\n\n.ion-ios-female:before {\n  content: \"\\f17b\"; }\n\n.ion-ios-female-outline:before {\n  content: \"\\f17b\"; }\n\n.ion-ios-filing:before {\n  content: \"\\f429\"; }\n\n.ion-ios-filing-outline:before {\n  content: \"\\f428\"; }\n\n.ion-ios-film:before {\n  content: \"\\f42b\"; }\n\n.ion-ios-film-outline:before {\n  content: \"\\f42a\"; }\n\n.ion-ios-finger-print:before {\n  content: \"\\f17c\"; }\n\n.ion-ios-finger-print-outline:before {\n  content: \"\\f17c\"; }\n\n.ion-ios-flag:before {\n  content: \"\\f42d\"; }\n\n.ion-ios-flag-outline:before {\n  content: \"\\f42c\"; }\n\n.ion-ios-flame:before {\n  content: \"\\f42f\"; }\n\n.ion-ios-flame-outline:before {\n  content: \"\\f42e\"; }\n\n.ion-ios-flash:before {\n  content: \"\\f17e\"; }\n\n.ion-ios-flash-outline:before {\n  content: \"\\f17d\"; }\n\n.ion-ios-flask:before {\n  content: \"\\f431\"; }\n\n.ion-ios-flask-outline:before {\n  content: \"\\f430\"; }\n\n.ion-ios-flower:before {\n  content: \"\\f433\"; }\n\n.ion-ios-flower-outline:before {\n  content: \"\\f432\"; }\n\n.ion-ios-folder:before {\n  content: \"\\f435\"; }\n\n.ion-ios-folder-open:before {\n  content: \"\\f180\"; }\n\n.ion-ios-folder-open-outline:before {\n  content: \"\\f17f\"; }\n\n.ion-ios-folder-outline:before {\n  content: \"\\f434\"; }\n\n.ion-ios-football:before {\n  content: \"\\f437\"; }\n\n.ion-ios-football-outline:before {\n  content: \"\\f436\"; }\n\n.ion-ios-funnel:before {\n  content: \"\\f182\"; }\n\n.ion-ios-funnel-outline:before {\n  content: \"\\f181\"; }\n\n.ion-ios-game-controller-a:before {\n  content: \"\\f439\"; }\n\n.ion-ios-game-controller-a-outline:before {\n  content: \"\\f438\"; }\n\n.ion-ios-game-controller-b:before {\n  content: \"\\f43b\"; }\n\n.ion-ios-game-controller-b-outline:before {\n  content: \"\\f43a\"; }\n\n.ion-ios-git-branch:before {\n  content: \"\\f183\"; }\n\n.ion-ios-git-branch-outline:before {\n  content: \"\\f183\"; }\n\n.ion-ios-git-commit:before {\n  content: \"\\f184\"; }\n\n.ion-ios-git-commit-outline:before {\n  content: \"\\f184\"; }\n\n.ion-ios-git-compare:before {\n  content: \"\\f185\"; }\n\n.ion-ios-git-compare-outline:before {\n  content: \"\\f185\"; }\n\n.ion-ios-git-merge:before {\n  content: \"\\f186\"; }\n\n.ion-ios-git-merge-outline:before {\n  content: \"\\f186\"; }\n\n.ion-ios-git-network:before {\n  content: \"\\f187\"; }\n\n.ion-ios-git-network-outline:before {\n  content: \"\\f187\"; }\n\n.ion-ios-git-pull-request:before {\n  content: \"\\f188\"; }\n\n.ion-ios-git-pull-request-outline:before {\n  content: \"\\f188\"; }\n\n.ion-ios-glasses:before {\n  content: \"\\f43f\"; }\n\n.ion-ios-glasses-outline:before {\n  content: \"\\f43e\"; }\n\n.ion-ios-globe:before {\n  content: \"\\f18a\"; }\n\n.ion-ios-globe-outline:before {\n  content: \"\\f189\"; }\n\n.ion-ios-grid:before {\n  content: \"\\f18c\"; }\n\n.ion-ios-grid-outline:before {\n  content: \"\\f18b\"; }\n\n.ion-ios-hammer:before {\n  content: \"\\f18e\"; }\n\n.ion-ios-hammer-outline:before {\n  content: \"\\f18d\"; }\n\n.ion-ios-hand:before {\n  content: \"\\f190\"; }\n\n.ion-ios-hand-outline:before {\n  content: \"\\f18f\"; }\n\n.ion-ios-happy:before {\n  content: \"\\f192\"; }\n\n.ion-ios-happy-outline:before {\n  content: \"\\f191\"; }\n\n.ion-ios-headset:before {\n  content: \"\\f194\"; }\n\n.ion-ios-headset-outline:before {\n  content: \"\\f193\"; }\n\n.ion-ios-heart:before {\n  content: \"\\f443\"; }\n\n.ion-ios-heart-outline:before {\n  content: \"\\f442\"; }\n\n.ion-ios-help:before {\n  content: \"\\f446\"; }\n\n.ion-ios-help-buoy:before {\n  content: \"\\f196\"; }\n\n.ion-ios-help-buoy-outline:before {\n  content: \"\\f195\"; }\n\n.ion-ios-help-circle:before {\n  content: \"\\f198\"; }\n\n.ion-ios-help-circle-outline:before {\n  content: \"\\f197\"; }\n\n.ion-ios-help-outline:before {\n  content: \"\\f446\"; }\n\n.ion-ios-home:before {\n  content: \"\\f448\"; }\n\n.ion-ios-home-outline:before {\n  content: \"\\f447\"; }\n\n.ion-ios-ice-cream:before {\n  content: \"\\f19a\"; }\n\n.ion-ios-ice-cream-outline:before {\n  content: \"\\f199\"; }\n\n.ion-ios-image:before {\n  content: \"\\f19c\"; }\n\n.ion-ios-image-outline:before {\n  content: \"\\f19b\"; }\n\n.ion-ios-images:before {\n  content: \"\\f19e\"; }\n\n.ion-ios-images-outline:before {\n  content: \"\\f19d\"; }\n\n.ion-ios-infinite:before {\n  content: \"\\f44a\"; }\n\n.ion-ios-infinite-outline:before {\n  content: \"\\f449\"; }\n\n.ion-ios-information:before {\n  content: \"\\f44d\"; }\n\n.ion-ios-information-circle:before {\n  content: \"\\f1a0\"; }\n\n.ion-ios-information-circle-outline:before {\n  content: \"\\f19f\"; }\n\n.ion-ios-information-outline:before {\n  content: \"\\f44d\"; }\n\n.ion-ios-ionic:before {\n  content: \"\\f1a1\"; }\n\n.ion-ios-ionic-outline:before {\n  content: \"\\f44e\"; }\n\n.ion-ios-ionitron:before {\n  content: \"\\f1a3\"; }\n\n.ion-ios-ionitron-outline:before {\n  content: \"\\f1a2\"; }\n\n.ion-ios-jet:before {\n  content: \"\\f1a5\"; }\n\n.ion-ios-jet-outline:before {\n  content: \"\\f1a4\"; }\n\n.ion-ios-key:before {\n  content: \"\\f1a7\"; }\n\n.ion-ios-key-outline:before {\n  content: \"\\f1a6\"; }\n\n.ion-ios-keypad:before {\n  content: \"\\f450\"; }\n\n.ion-ios-keypad-outline:before {\n  content: \"\\f44f\"; }\n\n.ion-ios-laptop:before {\n  content: \"\\f1a8\"; }\n\n.ion-ios-laptop-outline:before {\n  content: \"\\f1a8\"; }\n\n.ion-ios-leaf:before {\n  content: \"\\f1aa\"; }\n\n.ion-ios-leaf-outline:before {\n  content: \"\\f1a9\"; }\n\n.ion-ios-link:before {\n  content: \"\\f22a\"; }\n\n.ion-ios-link-outline:before {\n  content: \"\\f1ca\"; }\n\n.ion-ios-list:before {\n  content: \"\\f454\"; }\n\n.ion-ios-list-box:before {\n  content: \"\\f1ac\"; }\n\n.ion-ios-list-box-outline:before {\n  content: \"\\f1ab\"; }\n\n.ion-ios-list-outline:before {\n  content: \"\\f454\"; }\n\n.ion-ios-locate:before {\n  content: \"\\f1ae\"; }\n\n.ion-ios-locate-outline:before {\n  content: \"\\f1ad\"; }\n\n.ion-ios-lock:before {\n  content: \"\\f1b0\"; }\n\n.ion-ios-lock-outline:before {\n  content: \"\\f1af\"; }\n\n.ion-ios-log-in:before {\n  content: \"\\f1b1\"; }\n\n.ion-ios-log-in-outline:before {\n  content: \"\\f1b1\"; }\n\n.ion-ios-log-out:before {\n  content: \"\\f1b2\"; }\n\n.ion-ios-log-out-outline:before {\n  content: \"\\f1b2\"; }\n\n.ion-ios-magnet:before {\n  content: \"\\f1b4\"; }\n\n.ion-ios-magnet-outline:before {\n  content: \"\\f1b3\"; }\n\n.ion-ios-mail:before {\n  content: \"\\f1b8\"; }\n\n.ion-ios-mail-open:before {\n  content: \"\\f1b6\"; }\n\n.ion-ios-mail-open-outline:before {\n  content: \"\\f1b5\"; }\n\n.ion-ios-mail-outline:before {\n  content: \"\\f1b7\"; }\n\n.ion-ios-male:before {\n  content: \"\\f1b9\"; }\n\n.ion-ios-male-outline:before {\n  content: \"\\f1b9\"; }\n\n.ion-ios-man:before {\n  content: \"\\f1bb\"; }\n\n.ion-ios-man-outline:before {\n  content: \"\\f1ba\"; }\n\n.ion-ios-map:before {\n  content: \"\\f1bd\"; }\n\n.ion-ios-map-outline:before {\n  content: \"\\f1bc\"; }\n\n.ion-ios-medal:before {\n  content: \"\\f1bf\"; }\n\n.ion-ios-medal-outline:before {\n  content: \"\\f1be\"; }\n\n.ion-ios-medical:before {\n  content: \"\\f45c\"; }\n\n.ion-ios-medical-outline:before {\n  content: \"\\f45b\"; }\n\n.ion-ios-medkit:before {\n  content: \"\\f45e\"; }\n\n.ion-ios-medkit-outline:before {\n  content: \"\\f45d\"; }\n\n.ion-ios-megaphone:before {\n  content: \"\\f1c1\"; }\n\n.ion-ios-megaphone-outline:before {\n  content: \"\\f1c0\"; }\n\n.ion-ios-menu:before {\n  content: \"\\f1c3\"; }\n\n.ion-ios-menu-outline:before {\n  content: \"\\f1c2\"; }\n\n.ion-ios-mic:before {\n  content: \"\\f461\"; }\n\n.ion-ios-mic-off:before {\n  content: \"\\f45f\"; }\n\n.ion-ios-mic-off-outline:before {\n  content: \"\\f1c4\"; }\n\n.ion-ios-mic-outline:before {\n  content: \"\\f460\"; }\n\n.ion-ios-microphone:before {\n  content: \"\\f1c6\"; }\n\n.ion-ios-microphone-outline:before {\n  content: \"\\f1c5\"; }\n\n.ion-ios-moon:before {\n  content: \"\\f468\"; }\n\n.ion-ios-moon-outline:before {\n  content: \"\\f467\"; }\n\n.ion-ios-more:before {\n  content: \"\\f1c8\"; }\n\n.ion-ios-more-outline:before {\n  content: \"\\f1c7\"; }\n\n.ion-ios-move:before {\n  content: \"\\f1cb\"; }\n\n.ion-ios-move-outline:before {\n  content: \"\\f1cb\"; }\n\n.ion-ios-musical-note:before {\n  content: \"\\f46b\"; }\n\n.ion-ios-musical-note-outline:before {\n  content: \"\\f1cc\"; }\n\n.ion-ios-musical-notes:before {\n  content: \"\\f46c\"; }\n\n.ion-ios-musical-notes-outline:before {\n  content: \"\\f1cd\"; }\n\n.ion-ios-navigate:before {\n  content: \"\\f46e\"; }\n\n.ion-ios-navigate-outline:before {\n  content: \"\\f46d\"; }\n\n.ion-ios-no-smoking:before {\n  content: \"\\f1cf\"; }\n\n.ion-ios-no-smoking-outline:before {\n  content: \"\\f1ce\"; }\n\n.ion-ios-notifications:before {\n  content: \"\\f1d3\"; }\n\n.ion-ios-notifications-off:before {\n  content: \"\\f1d1\"; }\n\n.ion-ios-notifications-off-outline:before {\n  content: \"\\f1d0\"; }\n\n.ion-ios-notifications-outline:before {\n  content: \"\\f1d2\"; }\n\n.ion-ios-nuclear:before {\n  content: \"\\f1d5\"; }\n\n.ion-ios-nuclear-outline:before {\n  content: \"\\f1d4\"; }\n\n.ion-ios-nutrition:before {\n  content: \"\\f470\"; }\n\n.ion-ios-nutrition-outline:before {\n  content: \"\\f46f\"; }\n\n.ion-ios-open:before {\n  content: \"\\f1d7\"; }\n\n.ion-ios-open-outline:before {\n  content: \"\\f1d6\"; }\n\n.ion-ios-options:before {\n  content: \"\\f1d9\"; }\n\n.ion-ios-options-outline:before {\n  content: \"\\f1d8\"; }\n\n.ion-ios-outlet:before {\n  content: \"\\f1db\"; }\n\n.ion-ios-outlet-outline:before {\n  content: \"\\f1da\"; }\n\n.ion-ios-paper:before {\n  content: \"\\f472\"; }\n\n.ion-ios-paper-outline:before {\n  content: \"\\f471\"; }\n\n.ion-ios-paper-plane:before {\n  content: \"\\f1dd\"; }\n\n.ion-ios-paper-plane-outline:before {\n  content: \"\\f1dc\"; }\n\n.ion-ios-partly-sunny:before {\n  content: \"\\f1df\"; }\n\n.ion-ios-partly-sunny-outline:before {\n  content: \"\\f1de\"; }\n\n.ion-ios-pause:before {\n  content: \"\\f478\"; }\n\n.ion-ios-pause-outline:before {\n  content: \"\\f477\"; }\n\n.ion-ios-paw:before {\n  content: \"\\f47a\"; }\n\n.ion-ios-paw-outline:before {\n  content: \"\\f479\"; }\n\n.ion-ios-people:before {\n  content: \"\\f47c\"; }\n\n.ion-ios-people-outline:before {\n  content: \"\\f47b\"; }\n\n.ion-ios-person:before {\n  content: \"\\f47e\"; }\n\n.ion-ios-person-add:before {\n  content: \"\\f1e1\"; }\n\n.ion-ios-person-add-outline:before {\n  content: \"\\f1e0\"; }\n\n.ion-ios-person-outline:before {\n  content: \"\\f47d\"; }\n\n.ion-ios-phone-landscape:before {\n  content: \"\\f1e2\"; }\n\n.ion-ios-phone-landscape-outline:before {\n  content: \"\\f1e2\"; }\n\n.ion-ios-phone-portrait:before {\n  content: \"\\f1e3\"; }\n\n.ion-ios-phone-portrait-outline:before {\n  content: \"\\f1e3\"; }\n\n.ion-ios-photos:before {\n  content: \"\\f482\"; }\n\n.ion-ios-photos-outline:before {\n  content: \"\\f481\"; }\n\n.ion-ios-pie:before {\n  content: \"\\f484\"; }\n\n.ion-ios-pie-outline:before {\n  content: \"\\f483\"; }\n\n.ion-ios-pin:before {\n  content: \"\\f1e5\"; }\n\n.ion-ios-pin-outline:before {\n  content: \"\\f1e4\"; }\n\n.ion-ios-pint:before {\n  content: \"\\f486\"; }\n\n.ion-ios-pint-outline:before {\n  content: \"\\f485\"; }\n\n.ion-ios-pizza:before {\n  content: \"\\f1e7\"; }\n\n.ion-ios-pizza-outline:before {\n  content: \"\\f1e6\"; }\n\n.ion-ios-plane:before {\n  content: \"\\f1e9\"; }\n\n.ion-ios-plane-outline:before {\n  content: \"\\f1e8\"; }\n\n.ion-ios-planet:before {\n  content: \"\\f1eb\"; }\n\n.ion-ios-planet-outline:before {\n  content: \"\\f1ea\"; }\n\n.ion-ios-play:before {\n  content: \"\\f488\"; }\n\n.ion-ios-play-outline:before {\n  content: \"\\f487\"; }\n\n.ion-ios-podium:before {\n  content: \"\\f1ed\"; }\n\n.ion-ios-podium-outline:before {\n  content: \"\\f1ec\"; }\n\n.ion-ios-power:before {\n  content: \"\\f1ef\"; }\n\n.ion-ios-power-outline:before {\n  content: \"\\f1ee\"; }\n\n.ion-ios-pricetag:before {\n  content: \"\\f48d\"; }\n\n.ion-ios-pricetag-outline:before {\n  content: \"\\f48c\"; }\n\n.ion-ios-pricetags:before {\n  content: \"\\f48f\"; }\n\n.ion-ios-pricetags-outline:before {\n  content: \"\\f48e\"; }\n\n.ion-ios-print:before {\n  content: \"\\f1f1\"; }\n\n.ion-ios-print-outline:before {\n  content: \"\\f1f0\"; }\n\n.ion-ios-pulse:before {\n  content: \"\\f493\"; }\n\n.ion-ios-pulse-outline:before {\n  content: \"\\f1f2\"; }\n\n.ion-ios-qr-scanner:before {\n  content: \"\\f1f3\"; }\n\n.ion-ios-qr-scanner-outline:before {\n  content: \"\\f1f3\"; }\n\n.ion-ios-quote:before {\n  content: \"\\f1f5\"; }\n\n.ion-ios-quote-outline:before {\n  content: \"\\f1f4\"; }\n\n.ion-ios-radio:before {\n  content: \"\\f1f9\"; }\n\n.ion-ios-radio-button-off:before {\n  content: \"\\f1f6\"; }\n\n.ion-ios-radio-button-off-outline:before {\n  content: \"\\f1f6\"; }\n\n.ion-ios-radio-button-on:before {\n  content: \"\\f1f7\"; }\n\n.ion-ios-radio-button-on-outline:before {\n  content: \"\\f1f7\"; }\n\n.ion-ios-radio-outline:before {\n  content: \"\\f1f8\"; }\n\n.ion-ios-rainy:before {\n  content: \"\\f495\"; }\n\n.ion-ios-rainy-outline:before {\n  content: \"\\f494\"; }\n\n.ion-ios-recording:before {\n  content: \"\\f497\"; }\n\n.ion-ios-recording-outline:before {\n  content: \"\\f496\"; }\n\n.ion-ios-redo:before {\n  content: \"\\f499\"; }\n\n.ion-ios-redo-outline:before {\n  content: \"\\f498\"; }\n\n.ion-ios-refresh:before {\n  content: \"\\f49c\"; }\n\n.ion-ios-refresh-circle:before {\n  content: \"\\f226\"; }\n\n.ion-ios-refresh-circle-outline:before {\n  content: \"\\f224\"; }\n\n.ion-ios-refresh-outline:before {\n  content: \"\\f49c\"; }\n\n.ion-ios-remove:before {\n  content: \"\\f1fc\"; }\n\n.ion-ios-remove-circle:before {\n  content: \"\\f1fb\"; }\n\n.ion-ios-remove-circle-outline:before {\n  content: \"\\f1fa\"; }\n\n.ion-ios-remove-outline:before {\n  content: \"\\f1fc\"; }\n\n.ion-ios-reorder:before {\n  content: \"\\f1fd\"; }\n\n.ion-ios-reorder-outline:before {\n  content: \"\\f1fd\"; }\n\n.ion-ios-repeat:before {\n  content: \"\\f1fe\"; }\n\n.ion-ios-repeat-outline:before {\n  content: \"\\f1fe\"; }\n\n.ion-ios-resize:before {\n  content: \"\\f1ff\"; }\n\n.ion-ios-resize-outline:before {\n  content: \"\\f1ff\"; }\n\n.ion-ios-restaurant:before {\n  content: \"\\f201\"; }\n\n.ion-ios-restaurant-outline:before {\n  content: \"\\f200\"; }\n\n.ion-ios-return-left:before {\n  content: \"\\f202\"; }\n\n.ion-ios-return-left-outline:before {\n  content: \"\\f202\"; }\n\n.ion-ios-return-right:before {\n  content: \"\\f203\"; }\n\n.ion-ios-return-right-outline:before {\n  content: \"\\f203\"; }\n\n.ion-ios-reverse-camera:before {\n  content: \"\\f49f\"; }\n\n.ion-ios-reverse-camera-outline:before {\n  content: \"\\f49e\"; }\n\n.ion-ios-rewind:before {\n  content: \"\\f4a1\"; }\n\n.ion-ios-rewind-outline:before {\n  content: \"\\f4a0\"; }\n\n.ion-ios-ribbon:before {\n  content: \"\\f205\"; }\n\n.ion-ios-ribbon-outline:before {\n  content: \"\\f204\"; }\n\n.ion-ios-rose:before {\n  content: \"\\f4a3\"; }\n\n.ion-ios-rose-outline:before {\n  content: \"\\f4a2\"; }\n\n.ion-ios-sad:before {\n  content: \"\\f207\"; }\n\n.ion-ios-sad-outline:before {\n  content: \"\\f206\"; }\n\n.ion-ios-school:before {\n  content: \"\\f209\"; }\n\n.ion-ios-school-outline:before {\n  content: \"\\f208\"; }\n\n.ion-ios-search:before {\n  content: \"\\f4a5\"; }\n\n.ion-ios-search-outline:before {\n  content: \"\\f20a\"; }\n\n.ion-ios-send:before {\n  content: \"\\f20c\"; }\n\n.ion-ios-send-outline:before {\n  content: \"\\f20b\"; }\n\n.ion-ios-settings:before {\n  content: \"\\f4a7\"; }\n\n.ion-ios-settings-outline:before {\n  content: \"\\f20d\"; }\n\n.ion-ios-share:before {\n  content: \"\\f211\"; }\n\n.ion-ios-share-alt:before {\n  content: \"\\f20f\"; }\n\n.ion-ios-share-alt-outline:before {\n  content: \"\\f20e\"; }\n\n.ion-ios-share-outline:before {\n  content: \"\\f210\"; }\n\n.ion-ios-shirt:before {\n  content: \"\\f213\"; }\n\n.ion-ios-shirt-outline:before {\n  content: \"\\f212\"; }\n\n.ion-ios-shuffle:before {\n  content: \"\\f4a9\"; }\n\n.ion-ios-shuffle-outline:before {\n  content: \"\\f4a9\"; }\n\n.ion-ios-skip-backward:before {\n  content: \"\\f215\"; }\n\n.ion-ios-skip-backward-outline:before {\n  content: \"\\f214\"; }\n\n.ion-ios-skip-forward:before {\n  content: \"\\f217\"; }\n\n.ion-ios-skip-forward-outline:before {\n  content: \"\\f216\"; }\n\n.ion-ios-snow:before {\n  content: \"\\f218\"; }\n\n.ion-ios-snow-outline:before {\n  content: \"\\f22c\"; }\n\n.ion-ios-speedometer:before {\n  content: \"\\f4b0\"; }\n\n.ion-ios-speedometer-outline:before {\n  content: \"\\f4af\"; }\n\n.ion-ios-square:before {\n  content: \"\\f21a\"; }\n\n.ion-ios-square-outline:before {\n  content: \"\\f219\"; }\n\n.ion-ios-star:before {\n  content: \"\\f4b3\"; }\n\n.ion-ios-star-half:before {\n  content: \"\\f4b1\"; }\n\n.ion-ios-star-half-outline:before {\n  content: \"\\f4b1\"; }\n\n.ion-ios-star-outline:before {\n  content: \"\\f4b2\"; }\n\n.ion-ios-stats:before {\n  content: \"\\f21c\"; }\n\n.ion-ios-stats-outline:before {\n  content: \"\\f21b\"; }\n\n.ion-ios-stopwatch:before {\n  content: \"\\f4b5\"; }\n\n.ion-ios-stopwatch-outline:before {\n  content: \"\\f4b4\"; }\n\n.ion-ios-subway:before {\n  content: \"\\f21e\"; }\n\n.ion-ios-subway-outline:before {\n  content: \"\\f21d\"; }\n\n.ion-ios-sunny:before {\n  content: \"\\f4b7\"; }\n\n.ion-ios-sunny-outline:before {\n  content: \"\\f4b6\"; }\n\n.ion-ios-swap:before {\n  content: \"\\f21f\"; }\n\n.ion-ios-swap-outline:before {\n  content: \"\\f21f\"; }\n\n.ion-ios-switch:before {\n  content: \"\\f221\"; }\n\n.ion-ios-switch-outline:before {\n  content: \"\\f220\"; }\n\n.ion-ios-sync:before {\n  content: \"\\f222\"; }\n\n.ion-ios-sync-outline:before {\n  content: \"\\f222\"; }\n\n.ion-ios-tablet-landscape:before {\n  content: \"\\f223\"; }\n\n.ion-ios-tablet-landscape-outline:before {\n  content: \"\\f223\"; }\n\n.ion-ios-tablet-portrait:before {\n  content: \"\\f24e\"; }\n\n.ion-ios-tablet-portrait-outline:before {\n  content: \"\\f24e\"; }\n\n.ion-ios-tennisball:before {\n  content: \"\\f4bb\"; }\n\n.ion-ios-tennisball-outline:before {\n  content: \"\\f4ba\"; }\n\n.ion-ios-text:before {\n  content: \"\\f250\"; }\n\n.ion-ios-text-outline:before {\n  content: \"\\f24f\"; }\n\n.ion-ios-thermometer:before {\n  content: \"\\f252\"; }\n\n.ion-ios-thermometer-outline:before {\n  content: \"\\f251\"; }\n\n.ion-ios-thumbs-down:before {\n  content: \"\\f254\"; }\n\n.ion-ios-thumbs-down-outline:before {\n  content: \"\\f253\"; }\n\n.ion-ios-thumbs-up:before {\n  content: \"\\f256\"; }\n\n.ion-ios-thumbs-up-outline:before {\n  content: \"\\f255\"; }\n\n.ion-ios-thunderstorm:before {\n  content: \"\\f4bd\"; }\n\n.ion-ios-thunderstorm-outline:before {\n  content: \"\\f4bc\"; }\n\n.ion-ios-time:before {\n  content: \"\\f4bf\"; }\n\n.ion-ios-time-outline:before {\n  content: \"\\f4be\"; }\n\n.ion-ios-timer:before {\n  content: \"\\f4c1\"; }\n\n.ion-ios-timer-outline:before {\n  content: \"\\f4c0\"; }\n\n.ion-ios-train:before {\n  content: \"\\f258\"; }\n\n.ion-ios-train-outline:before {\n  content: \"\\f257\"; }\n\n.ion-ios-transgender:before {\n  content: \"\\f259\"; }\n\n.ion-ios-transgender-outline:before {\n  content: \"\\f259\"; }\n\n.ion-ios-trash:before {\n  content: \"\\f4c5\"; }\n\n.ion-ios-trash-outline:before {\n  content: \"\\f4c4\"; }\n\n.ion-ios-trending-down:before {\n  content: \"\\f25a\"; }\n\n.ion-ios-trending-down-outline:before {\n  content: \"\\f25a\"; }\n\n.ion-ios-trending-up:before {\n  content: \"\\f25b\"; }\n\n.ion-ios-trending-up-outline:before {\n  content: \"\\f25b\"; }\n\n.ion-ios-trophy:before {\n  content: \"\\f25d\"; }\n\n.ion-ios-trophy-outline:before {\n  content: \"\\f25c\"; }\n\n.ion-ios-umbrella:before {\n  content: \"\\f25f\"; }\n\n.ion-ios-umbrella-outline:before {\n  content: \"\\f25e\"; }\n\n.ion-ios-undo:before {\n  content: \"\\f4c7\"; }\n\n.ion-ios-undo-outline:before {\n  content: \"\\f4c6\"; }\n\n.ion-ios-unlock:before {\n  content: \"\\f261\"; }\n\n.ion-ios-unlock-outline:before {\n  content: \"\\f260\"; }\n\n.ion-ios-videocam:before {\n  content: \"\\f4cd\"; }\n\n.ion-ios-videocam-outline:before {\n  content: \"\\f4cc\"; }\n\n.ion-ios-volume-down:before {\n  content: \"\\f262\"; }\n\n.ion-ios-volume-down-outline:before {\n  content: \"\\f262\"; }\n\n.ion-ios-volume-mute:before {\n  content: \"\\f263\"; }\n\n.ion-ios-volume-mute-outline:before {\n  content: \"\\f263\"; }\n\n.ion-ios-volume-off:before {\n  content: \"\\f264\"; }\n\n.ion-ios-volume-off-outline:before {\n  content: \"\\f264\"; }\n\n.ion-ios-volume-up:before {\n  content: \"\\f265\"; }\n\n.ion-ios-volume-up-outline:before {\n  content: \"\\f265\"; }\n\n.ion-ios-walk:before {\n  content: \"\\f266\"; }\n\n.ion-ios-walk-outline:before {\n  content: \"\\f266\"; }\n\n.ion-ios-warning:before {\n  content: \"\\f268\"; }\n\n.ion-ios-warning-outline:before {\n  content: \"\\f267\"; }\n\n.ion-ios-watch:before {\n  content: \"\\f269\"; }\n\n.ion-ios-watch-outline:before {\n  content: \"\\f269\"; }\n\n.ion-ios-water:before {\n  content: \"\\f26b\"; }\n\n.ion-ios-water-outline:before {\n  content: \"\\f26a\"; }\n\n.ion-ios-wifi:before {\n  content: \"\\f26d\"; }\n\n.ion-ios-wifi-outline:before {\n  content: \"\\f26c\"; }\n\n.ion-ios-wine:before {\n  content: \"\\f26f\"; }\n\n.ion-ios-wine-outline:before {\n  content: \"\\f26e\"; }\n\n.ion-ios-woman:before {\n  content: \"\\f271\"; }\n\n.ion-ios-woman-outline:before {\n  content: \"\\f270\"; }\n\n.ion-logo-android:before {\n  content: \"\\f225\"; }\n\n.ion-logo-angular:before {\n  content: \"\\f227\"; }\n\n.ion-logo-apple:before {\n  content: \"\\f229\"; }\n\n.ion-logo-bitcoin:before {\n  content: \"\\f22b\"; }\n\n.ion-logo-buffer:before {\n  content: \"\\f22d\"; }\n\n.ion-logo-chrome:before {\n  content: \"\\f22f\"; }\n\n.ion-logo-codepen:before {\n  content: \"\\f230\"; }\n\n.ion-logo-css3:before {\n  content: \"\\f231\"; }\n\n.ion-logo-designernews:before {\n  content: \"\\f232\"; }\n\n.ion-logo-dribbble:before {\n  content: \"\\f233\"; }\n\n.ion-logo-dropbox:before {\n  content: \"\\f234\"; }\n\n.ion-logo-euro:before {\n  content: \"\\f235\"; }\n\n.ion-logo-facebook:before {\n  content: \"\\f236\"; }\n\n.ion-logo-foursquare:before {\n  content: \"\\f237\"; }\n\n.ion-logo-freebsd-devil:before {\n  content: \"\\f238\"; }\n\n.ion-logo-github:before {\n  content: \"\\f239\"; }\n\n.ion-logo-google:before {\n  content: \"\\f23a\"; }\n\n.ion-logo-googleplus:before {\n  content: \"\\f23b\"; }\n\n.ion-logo-hackernews:before {\n  content: \"\\f23c\"; }\n\n.ion-logo-html5:before {\n  content: \"\\f23d\"; }\n\n.ion-logo-instagram:before {\n  content: \"\\f23e\"; }\n\n.ion-logo-javascript:before {\n  content: \"\\f23f\"; }\n\n.ion-logo-linkedin:before {\n  content: \"\\f240\"; }\n\n.ion-logo-markdown:before {\n  content: \"\\f241\"; }\n\n.ion-logo-nodejs:before {\n  content: \"\\f242\"; }\n\n.ion-logo-octocat:before {\n  content: \"\\f243\"; }\n\n.ion-logo-pinterest:before {\n  content: \"\\f244\"; }\n\n.ion-logo-playstation:before {\n  content: \"\\f245\"; }\n\n.ion-logo-python:before {\n  content: \"\\f246\"; }\n\n.ion-logo-reddit:before {\n  content: \"\\f247\"; }\n\n.ion-logo-rss:before {\n  content: \"\\f248\"; }\n\n.ion-logo-sass:before {\n  content: \"\\f249\"; }\n\n.ion-logo-skype:before {\n  content: \"\\f24a\"; }\n\n.ion-logo-snapchat:before {\n  content: \"\\f24b\"; }\n\n.ion-logo-steam:before {\n  content: \"\\f24c\"; }\n\n.ion-logo-tumblr:before {\n  content: \"\\f24d\"; }\n\n.ion-logo-tux:before {\n  content: \"\\f2ae\"; }\n\n.ion-logo-twitch:before {\n  content: \"\\f2af\"; }\n\n.ion-logo-twitter:before {\n  content: \"\\f2b0\"; }\n\n.ion-logo-usd:before {\n  content: \"\\f2b1\"; }\n\n.ion-logo-vimeo:before {\n  content: \"\\f2c4\"; }\n\n.ion-logo-whatsapp:before {\n  content: \"\\f2c5\"; }\n\n.ion-logo-windows:before {\n  content: \"\\f32f\"; }\n\n.ion-logo-wordpress:before {\n  content: \"\\f330\"; }\n\n.ion-logo-xbox:before {\n  content: \"\\f34c\"; }\n\n.ion-logo-yahoo:before {\n  content: \"\\f34d\"; }\n\n.ion-logo-yen:before {\n  content: \"\\f34e\"; }\n\n.ion-logo-youtube:before {\n  content: \"\\f34f\"; }\n\n.ion-md-add:before {\n  content: \"\\f273\"; }\n\n.ion-md-add-circle:before {\n  content: \"\\f272\"; }\n\n.ion-md-alarm:before {\n  content: \"\\f274\"; }\n\n.ion-md-albums:before {\n  content: \"\\f275\"; }\n\n.ion-md-alert:before {\n  content: \"\\f276\"; }\n\n.ion-md-american-football:before {\n  content: \"\\f277\"; }\n\n.ion-md-analytics:before {\n  content: \"\\f278\"; }\n\n.ion-md-aperture:before {\n  content: \"\\f279\"; }\n\n.ion-md-apps:before {\n  content: \"\\f27a\"; }\n\n.ion-md-appstore:before {\n  content: \"\\f27b\"; }\n\n.ion-md-archive:before {\n  content: \"\\f27c\"; }\n\n.ion-md-arrow-back:before {\n  content: \"\\f27d\"; }\n\n.ion-md-arrow-down:before {\n  content: \"\\f27e\"; }\n\n.ion-md-arrow-dropdown:before {\n  content: \"\\f280\"; }\n\n.ion-md-arrow-dropdown-circle:before {\n  content: \"\\f27f\"; }\n\n.ion-md-arrow-dropleft:before {\n  content: \"\\f282\"; }\n\n.ion-md-arrow-dropleft-circle:before {\n  content: \"\\f281\"; }\n\n.ion-md-arrow-dropright:before {\n  content: \"\\f284\"; }\n\n.ion-md-arrow-dropright-circle:before {\n  content: \"\\f283\"; }\n\n.ion-md-arrow-dropup:before {\n  content: \"\\f286\"; }\n\n.ion-md-arrow-dropup-circle:before {\n  content: \"\\f285\"; }\n\n.ion-md-arrow-forward:before {\n  content: \"\\f287\"; }\n\n.ion-md-arrow-round-back:before {\n  content: \"\\f288\"; }\n\n.ion-md-arrow-round-down:before {\n  content: \"\\f289\"; }\n\n.ion-md-arrow-round-forward:before {\n  content: \"\\f28a\"; }\n\n.ion-md-arrow-round-up:before {\n  content: \"\\f28b\"; }\n\n.ion-md-arrow-up:before {\n  content: \"\\f28c\"; }\n\n.ion-md-at:before {\n  content: \"\\f28d\"; }\n\n.ion-md-attach:before {\n  content: \"\\f28e\"; }\n\n.ion-md-backspace:before {\n  content: \"\\f28f\"; }\n\n.ion-md-barcode:before {\n  content: \"\\f290\"; }\n\n.ion-md-baseball:before {\n  content: \"\\f291\"; }\n\n.ion-md-basket:before {\n  content: \"\\f292\"; }\n\n.ion-md-basketball:before {\n  content: \"\\f293\"; }\n\n.ion-md-battery-charging:before {\n  content: \"\\f294\"; }\n\n.ion-md-battery-dead:before {\n  content: \"\\f295\"; }\n\n.ion-md-battery-full:before {\n  content: \"\\f296\"; }\n\n.ion-md-beaker:before {\n  content: \"\\f297\"; }\n\n.ion-md-beer:before {\n  content: \"\\f298\"; }\n\n.ion-md-bicycle:before {\n  content: \"\\f299\"; }\n\n.ion-md-bluetooth:before {\n  content: \"\\f29a\"; }\n\n.ion-md-boat:before {\n  content: \"\\f29b\"; }\n\n.ion-md-body:before {\n  content: \"\\f29c\"; }\n\n.ion-md-bonfire:before {\n  content: \"\\f29d\"; }\n\n.ion-md-book:before {\n  content: \"\\f29e\"; }\n\n.ion-md-bookmark:before {\n  content: \"\\f29f\"; }\n\n.ion-md-bookmarks:before {\n  content: \"\\f2a0\"; }\n\n.ion-md-bowtie:before {\n  content: \"\\f2a1\"; }\n\n.ion-md-briefcase:before {\n  content: \"\\f2a2\"; }\n\n.ion-md-browsers:before {\n  content: \"\\f2a3\"; }\n\n.ion-md-brush:before {\n  content: \"\\f2a4\"; }\n\n.ion-md-bug:before {\n  content: \"\\f2a5\"; }\n\n.ion-md-build:before {\n  content: \"\\f2a6\"; }\n\n.ion-md-bulb:before {\n  content: \"\\f2a7\"; }\n\n.ion-md-bus:before {\n  content: \"\\f2a8\"; }\n\n.ion-md-cafe:before {\n  content: \"\\f2a9\"; }\n\n.ion-md-calculator:before {\n  content: \"\\f2aa\"; }\n\n.ion-md-calendar:before {\n  content: \"\\f2ab\"; }\n\n.ion-md-call:before {\n  content: \"\\f2ac\"; }\n\n.ion-md-camera:before {\n  content: \"\\f2ad\"; }\n\n.ion-md-car:before {\n  content: \"\\f2b2\"; }\n\n.ion-md-card:before {\n  content: \"\\f2b3\"; }\n\n.ion-md-cart:before {\n  content: \"\\f2b4\"; }\n\n.ion-md-cash:before {\n  content: \"\\f2b5\"; }\n\n.ion-md-chatboxes:before {\n  content: \"\\f2b6\"; }\n\n.ion-md-chatbubbles:before {\n  content: \"\\f2b7\"; }\n\n.ion-md-checkbox:before {\n  content: \"\\f2b9\"; }\n\n.ion-md-checkbox-outline:before {\n  content: \"\\f2b8\"; }\n\n.ion-md-checkmark:before {\n  content: \"\\f2bc\"; }\n\n.ion-md-checkmark-circle:before {\n  content: \"\\f2bb\"; }\n\n.ion-md-checkmark-circle-outline:before {\n  content: \"\\f2ba\"; }\n\n.ion-md-clipboard:before {\n  content: \"\\f2bd\"; }\n\n.ion-md-clock:before {\n  content: \"\\f2be\"; }\n\n.ion-md-close:before {\n  content: \"\\f2c0\"; }\n\n.ion-md-close-circle:before {\n  content: \"\\f2bf\"; }\n\n.ion-md-closed-captioning:before {\n  content: \"\\f2c1\"; }\n\n.ion-md-cloud:before {\n  content: \"\\f2c9\"; }\n\n.ion-md-cloud-circle:before {\n  content: \"\\f2c2\"; }\n\n.ion-md-cloud-done:before {\n  content: \"\\f2c3\"; }\n\n.ion-md-cloud-download:before {\n  content: \"\\f2c6\"; }\n\n.ion-md-cloud-outline:before {\n  content: \"\\f2c7\"; }\n\n.ion-md-cloud-upload:before {\n  content: \"\\f2c8\"; }\n\n.ion-md-cloudy:before {\n  content: \"\\f2cb\"; }\n\n.ion-md-cloudy-night:before {\n  content: \"\\f2ca\"; }\n\n.ion-md-code:before {\n  content: \"\\f2ce\"; }\n\n.ion-md-code-download:before {\n  content: \"\\f2cc\"; }\n\n.ion-md-code-working:before {\n  content: \"\\f2cd\"; }\n\n.ion-md-cog:before {\n  content: \"\\f2cf\"; }\n\n.ion-md-color-fill:before {\n  content: \"\\f2d0\"; }\n\n.ion-md-color-filter:before {\n  content: \"\\f2d1\"; }\n\n.ion-md-color-palette:before {\n  content: \"\\f2d2\"; }\n\n.ion-md-color-wand:before {\n  content: \"\\f2d3\"; }\n\n.ion-md-compass:before {\n  content: \"\\f2d4\"; }\n\n.ion-md-construct:before {\n  content: \"\\f2d5\"; }\n\n.ion-md-contact:before {\n  content: \"\\f2d6\"; }\n\n.ion-md-contacts:before {\n  content: \"\\f2d7\"; }\n\n.ion-md-contract:before {\n  content: \"\\f2d8\"; }\n\n.ion-md-contrast:before {\n  content: \"\\f2d9\"; }\n\n.ion-md-copy:before {\n  content: \"\\f2da\"; }\n\n.ion-md-create:before {\n  content: \"\\f2db\"; }\n\n.ion-md-crop:before {\n  content: \"\\f2dc\"; }\n\n.ion-md-cube:before {\n  content: \"\\f2dd\"; }\n\n.ion-md-cut:before {\n  content: \"\\f2de\"; }\n\n.ion-md-desktop:before {\n  content: \"\\f2df\"; }\n\n.ion-md-disc:before {\n  content: \"\\f2e0\"; }\n\n.ion-md-document:before {\n  content: \"\\f2e1\"; }\n\n.ion-md-done-all:before {\n  content: \"\\f2e2\"; }\n\n.ion-md-download:before {\n  content: \"\\f2e3\"; }\n\n.ion-md-easel:before {\n  content: \"\\f2e4\"; }\n\n.ion-md-egg:before {\n  content: \"\\f2e5\"; }\n\n.ion-md-exit:before {\n  content: \"\\f2e6\"; }\n\n.ion-md-expand:before {\n  content: \"\\f2e7\"; }\n\n.ion-md-eye:before {\n  content: \"\\f2e9\"; }\n\n.ion-md-eye-off:before {\n  content: \"\\f2e8\"; }\n\n.ion-md-fastforward:before {\n  content: \"\\f2ea\"; }\n\n.ion-md-female:before {\n  content: \"\\f2eb\"; }\n\n.ion-md-filing:before {\n  content: \"\\f2ec\"; }\n\n.ion-md-film:before {\n  content: \"\\f2ed\"; }\n\n.ion-md-finger-print:before {\n  content: \"\\f2ee\"; }\n\n.ion-md-flag:before {\n  content: \"\\f2ef\"; }\n\n.ion-md-flame:before {\n  content: \"\\f2f0\"; }\n\n.ion-md-flash:before {\n  content: \"\\f2f1\"; }\n\n.ion-md-flask:before {\n  content: \"\\f2f2\"; }\n\n.ion-md-flower:before {\n  content: \"\\f2f3\"; }\n\n.ion-md-folder:before {\n  content: \"\\f2f5\"; }\n\n.ion-md-folder-open:before {\n  content: \"\\f2f4\"; }\n\n.ion-md-football:before {\n  content: \"\\f2f6\"; }\n\n.ion-md-funnel:before {\n  content: \"\\f2f7\"; }\n\n.ion-md-game-controller-a:before {\n  content: \"\\f2f8\"; }\n\n.ion-md-game-controller-b:before {\n  content: \"\\f2f9\"; }\n\n.ion-md-git-branch:before {\n  content: \"\\f2fa\"; }\n\n.ion-md-git-commit:before {\n  content: \"\\f2fb\"; }\n\n.ion-md-git-compare:before {\n  content: \"\\f2fc\"; }\n\n.ion-md-git-merge:before {\n  content: \"\\f2fd\"; }\n\n.ion-md-git-network:before {\n  content: \"\\f2fe\"; }\n\n.ion-md-git-pull-request:before {\n  content: \"\\f2ff\"; }\n\n.ion-md-glasses:before {\n  content: \"\\f300\"; }\n\n.ion-md-globe:before {\n  content: \"\\f301\"; }\n\n.ion-md-grid:before {\n  content: \"\\f302\"; }\n\n.ion-md-hammer:before {\n  content: \"\\f303\"; }\n\n.ion-md-hand:before {\n  content: \"\\f304\"; }\n\n.ion-md-happy:before {\n  content: \"\\f305\"; }\n\n.ion-md-headset:before {\n  content: \"\\f306\"; }\n\n.ion-md-heart:before {\n  content: \"\\f308\"; }\n\n.ion-md-heart-outline:before {\n  content: \"\\f307\"; }\n\n.ion-md-help:before {\n  content: \"\\f30b\"; }\n\n.ion-md-help-buoy:before {\n  content: \"\\f309\"; }\n\n.ion-md-help-circle:before {\n  content: \"\\f30a\"; }\n\n.ion-md-home:before {\n  content: \"\\f30c\"; }\n\n.ion-md-ice-cream:before {\n  content: \"\\f30d\"; }\n\n.ion-md-image:before {\n  content: \"\\f30e\"; }\n\n.ion-md-images:before {\n  content: \"\\f30f\"; }\n\n.ion-md-infinite:before {\n  content: \"\\f310\"; }\n\n.ion-md-information:before {\n  content: \"\\f312\"; }\n\n.ion-md-information-circle:before {\n  content: \"\\f311\"; }\n\n.ion-md-ionic:before {\n  content: \"\\f313\"; }\n\n.ion-md-ionitron:before {\n  content: \"\\f314\"; }\n\n.ion-md-jet:before {\n  content: \"\\f315\"; }\n\n.ion-md-key:before {\n  content: \"\\f316\"; }\n\n.ion-md-keypad:before {\n  content: \"\\f317\"; }\n\n.ion-md-laptop:before {\n  content: \"\\f318\"; }\n\n.ion-md-leaf:before {\n  content: \"\\f319\"; }\n\n.ion-md-link:before {\n  content: \"\\f22e\"; }\n\n.ion-md-list:before {\n  content: \"\\f31b\"; }\n\n.ion-md-list-box:before {\n  content: \"\\f31a\"; }\n\n.ion-md-locate:before {\n  content: \"\\f31c\"; }\n\n.ion-md-lock:before {\n  content: \"\\f31d\"; }\n\n.ion-md-log-in:before {\n  content: \"\\f31e\"; }\n\n.ion-md-log-out:before {\n  content: \"\\f31f\"; }\n\n.ion-md-magnet:before {\n  content: \"\\f320\"; }\n\n.ion-md-mail:before {\n  content: \"\\f322\"; }\n\n.ion-md-mail-open:before {\n  content: \"\\f321\"; }\n\n.ion-md-male:before {\n  content: \"\\f323\"; }\n\n.ion-md-man:before {\n  content: \"\\f324\"; }\n\n.ion-md-map:before {\n  content: \"\\f325\"; }\n\n.ion-md-medal:before {\n  content: \"\\f326\"; }\n\n.ion-md-medical:before {\n  content: \"\\f327\"; }\n\n.ion-md-medkit:before {\n  content: \"\\f328\"; }\n\n.ion-md-megaphone:before {\n  content: \"\\f329\"; }\n\n.ion-md-menu:before {\n  content: \"\\f32a\"; }\n\n.ion-md-mic:before {\n  content: \"\\f32c\"; }\n\n.ion-md-mic-off:before {\n  content: \"\\f32b\"; }\n\n.ion-md-microphone:before {\n  content: \"\\f32d\"; }\n\n.ion-md-moon:before {\n  content: \"\\f32e\"; }\n\n.ion-md-more:before {\n  content: \"\\f1c9\"; }\n\n.ion-md-move:before {\n  content: \"\\f331\"; }\n\n.ion-md-musical-note:before {\n  content: \"\\f332\"; }\n\n.ion-md-musical-notes:before {\n  content: \"\\f333\"; }\n\n.ion-md-navigate:before {\n  content: \"\\f334\"; }\n\n.ion-md-no-smoking:before {\n  content: \"\\f335\"; }\n\n.ion-md-notifications:before {\n  content: \"\\f338\"; }\n\n.ion-md-notifications-off:before {\n  content: \"\\f336\"; }\n\n.ion-md-notifications-outline:before {\n  content: \"\\f337\"; }\n\n.ion-md-nuclear:before {\n  content: \"\\f339\"; }\n\n.ion-md-nutrition:before {\n  content: \"\\f33a\"; }\n\n.ion-md-open:before {\n  content: \"\\f33b\"; }\n\n.ion-md-options:before {\n  content: \"\\f33c\"; }\n\n.ion-md-outlet:before {\n  content: \"\\f33d\"; }\n\n.ion-md-paper:before {\n  content: \"\\f33f\"; }\n\n.ion-md-paper-plane:before {\n  content: \"\\f33e\"; }\n\n.ion-md-partly-sunny:before {\n  content: \"\\f340\"; }\n\n.ion-md-pause:before {\n  content: \"\\f341\"; }\n\n.ion-md-paw:before {\n  content: \"\\f342\"; }\n\n.ion-md-people:before {\n  content: \"\\f343\"; }\n\n.ion-md-person:before {\n  content: \"\\f345\"; }\n\n.ion-md-person-add:before {\n  content: \"\\f344\"; }\n\n.ion-md-phone-landscape:before {\n  content: \"\\f346\"; }\n\n.ion-md-phone-portrait:before {\n  content: \"\\f347\"; }\n\n.ion-md-photos:before {\n  content: \"\\f348\"; }\n\n.ion-md-pie:before {\n  content: \"\\f349\"; }\n\n.ion-md-pin:before {\n  content: \"\\f34a\"; }\n\n.ion-md-pint:before {\n  content: \"\\f34b\"; }\n\n.ion-md-pizza:before {\n  content: \"\\f354\"; }\n\n.ion-md-plane:before {\n  content: \"\\f355\"; }\n\n.ion-md-planet:before {\n  content: \"\\f356\"; }\n\n.ion-md-play:before {\n  content: \"\\f357\"; }\n\n.ion-md-podium:before {\n  content: \"\\f358\"; }\n\n.ion-md-power:before {\n  content: \"\\f359\"; }\n\n.ion-md-pricetag:before {\n  content: \"\\f35a\"; }\n\n.ion-md-pricetags:before {\n  content: \"\\f35b\"; }\n\n.ion-md-print:before {\n  content: \"\\f35c\"; }\n\n.ion-md-pulse:before {\n  content: \"\\f35d\"; }\n\n.ion-md-qr-scanner:before {\n  content: \"\\f35e\"; }\n\n.ion-md-quote:before {\n  content: \"\\f35f\"; }\n\n.ion-md-radio:before {\n  content: \"\\f362\"; }\n\n.ion-md-radio-button-off:before {\n  content: \"\\f360\"; }\n\n.ion-md-radio-button-on:before {\n  content: \"\\f361\"; }\n\n.ion-md-rainy:before {\n  content: \"\\f363\"; }\n\n.ion-md-recording:before {\n  content: \"\\f364\"; }\n\n.ion-md-redo:before {\n  content: \"\\f365\"; }\n\n.ion-md-refresh:before {\n  content: \"\\f366\"; }\n\n.ion-md-refresh-circle:before {\n  content: \"\\f228\"; }\n\n.ion-md-remove:before {\n  content: \"\\f368\"; }\n\n.ion-md-remove-circle:before {\n  content: \"\\f367\"; }\n\n.ion-md-reorder:before {\n  content: \"\\f369\"; }\n\n.ion-md-repeat:before {\n  content: \"\\f36a\"; }\n\n.ion-md-resize:before {\n  content: \"\\f36b\"; }\n\n.ion-md-restaurant:before {\n  content: \"\\f36c\"; }\n\n.ion-md-return-left:before {\n  content: \"\\f36d\"; }\n\n.ion-md-return-right:before {\n  content: \"\\f36e\"; }\n\n.ion-md-reverse-camera:before {\n  content: \"\\f36f\"; }\n\n.ion-md-rewind:before {\n  content: \"\\f370\"; }\n\n.ion-md-ribbon:before {\n  content: \"\\f371\"; }\n\n.ion-md-rose:before {\n  content: \"\\f372\"; }\n\n.ion-md-sad:before {\n  content: \"\\f373\"; }\n\n.ion-md-school:before {\n  content: \"\\f374\"; }\n\n.ion-md-search:before {\n  content: \"\\f375\"; }\n\n.ion-md-send:before {\n  content: \"\\f376\"; }\n\n.ion-md-settings:before {\n  content: \"\\f377\"; }\n\n.ion-md-share:before {\n  content: \"\\f379\"; }\n\n.ion-md-share-alt:before {\n  content: \"\\f378\"; }\n\n.ion-md-shirt:before {\n  content: \"\\f37a\"; }\n\n.ion-md-shuffle:before {\n  content: \"\\f37b\"; }\n\n.ion-md-skip-backward:before {\n  content: \"\\f37c\"; }\n\n.ion-md-skip-forward:before {\n  content: \"\\f37d\"; }\n\n.ion-md-snow:before {\n  content: \"\\f37e\"; }\n\n.ion-md-speedometer:before {\n  content: \"\\f37f\"; }\n\n.ion-md-square:before {\n  content: \"\\f381\"; }\n\n.ion-md-square-outline:before {\n  content: \"\\f380\"; }\n\n.ion-md-star:before {\n  content: \"\\f384\"; }\n\n.ion-md-star-half:before {\n  content: \"\\f382\"; }\n\n.ion-md-star-outline:before {\n  content: \"\\f383\"; }\n\n.ion-md-stats:before {\n  content: \"\\f385\"; }\n\n.ion-md-stopwatch:before {\n  content: \"\\f386\"; }\n\n.ion-md-subway:before {\n  content: \"\\f387\"; }\n\n.ion-md-sunny:before {\n  content: \"\\f388\"; }\n\n.ion-md-swap:before {\n  content: \"\\f389\"; }\n\n.ion-md-switch:before {\n  content: \"\\f38a\"; }\n\n.ion-md-sync:before {\n  content: \"\\f38b\"; }\n\n.ion-md-tablet-landscape:before {\n  content: \"\\f38c\"; }\n\n.ion-md-tablet-portrait:before {\n  content: \"\\f38d\"; }\n\n.ion-md-tennisball:before {\n  content: \"\\f38e\"; }\n\n.ion-md-text:before {\n  content: \"\\f38f\"; }\n\n.ion-md-thermometer:before {\n  content: \"\\f390\"; }\n\n.ion-md-thumbs-down:before {\n  content: \"\\f391\"; }\n\n.ion-md-thumbs-up:before {\n  content: \"\\f392\"; }\n\n.ion-md-thunderstorm:before {\n  content: \"\\f393\"; }\n\n.ion-md-time:before {\n  content: \"\\f394\"; }\n\n.ion-md-timer:before {\n  content: \"\\f395\"; }\n\n.ion-md-train:before {\n  content: \"\\f396\"; }\n\n.ion-md-transgender:before {\n  content: \"\\f397\"; }\n\n.ion-md-trash:before {\n  content: \"\\f398\"; }\n\n.ion-md-trending-down:before {\n  content: \"\\f399\"; }\n\n.ion-md-trending-up:before {\n  content: \"\\f39a\"; }\n\n.ion-md-trophy:before {\n  content: \"\\f39b\"; }\n\n.ion-md-umbrella:before {\n  content: \"\\f39c\"; }\n\n.ion-md-undo:before {\n  content: \"\\f39d\"; }\n\n.ion-md-unlock:before {\n  content: \"\\f39e\"; }\n\n.ion-md-videocam:before {\n  content: \"\\f39f\"; }\n\n.ion-md-volume-down:before {\n  content: \"\\f3a0\"; }\n\n.ion-md-volume-mute:before {\n  content: \"\\f3a1\"; }\n\n.ion-md-volume-off:before {\n  content: \"\\f3a2\"; }\n\n.ion-md-volume-up:before {\n  content: \"\\f3a3\"; }\n\n.ion-md-walk:before {\n  content: \"\\f3a4\"; }\n\n.ion-md-warning:before {\n  content: \"\\f3a5\"; }\n\n.ion-md-watch:before {\n  content: \"\\f3a6\"; }\n\n.ion-md-water:before {\n  content: \"\\f3a7\"; }\n\n.ion-md-wifi:before {\n  content: \"\\f3a8\"; }\n\n.ion-md-wine:before {\n  content: \"\\f3a9\"; }\n\n.ion-md-woman:before {\n  content: \"\\f3aa\"; }\n\n@font-face {\n  font-family: \"Ionicons\";\n  src: url(\"../fonts/ionicons.woff2?v=3.0.0-alpha.3\") format(\"woff2\"), url(\"../fonts/ionicons.woff?v=3.0.0-alpha.3\") format(\"woff\"), url(\"../fonts/ionicons.ttf?v=3.0.0-alpha.3\") format(\"truetype\");\n  font-weight: normal;\n  font-style: normal; }\n\nion-icon {\n  display: inline-block;\n  font-family: \"Ionicons\";\n  -moz-osx-font-smoothing: grayscale;\n  -webkit-font-smoothing: antialiased;\n  font-style: normal;\n  font-variant: normal;\n  font-weight: normal;\n  line-height: 1;\n  text-rendering: auto;\n  text-transform: none;\n  speak: none; }\n\nion-content {\n  color: #000; }\n\nhr {\n  background-color: rgba(0, 0, 0, 0.08); }\n\nion-action-sheet {\n  position: absolute;\n  top: 0;\n  left: 0;\n  z-index: 1000;\n  display: block;\n  width: 100%;\n  height: 100%; }\n\n.action-sheet-wrapper {\n  position: absolute;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  z-index: 10;\n  display: block;\n  margin: auto;\n  width: 100%;\n  max-width: 500px;\n  -webkit-transform: translate3d(0, 100%, 0);\n  transform: translate3d(0, 100%, 0); }\n\n.action-sheet-button {\n  width: 100%; }\n\n.action-sheet-title {\n  padding: 19px 16px 17px;\n  font-size: 1.6rem;\n  text-align: left;\n  color: #757575; }\n\n.action-sheet-button {\n  position: relative;\n  overflow: hidden;\n  padding: 0 16px;\n  min-height: 4.8rem;\n  font-size: 1.6rem;\n  text-align: left;\n  color: #222;\n  background: transparent; }\n  .action-sheet-button.activated {\n    background: #f1f1f1; }\n\n.action-sheet-icon {\n  margin: 0 28px 0 0;\n  min-width: 24px;\n  font-size: 2.4rem;\n  text-align: center;\n  vertical-align: middle; }\n\n.action-sheet-group {\n  overflow: hidden;\n  background: #fafafa; }\n  .action-sheet-group:last-child .action-sheet-button {\n    margin-bottom: 8px; }\n  .action-sheet-group .button-inner {\n    -webkit-box-pack: start;\n    -webkit-justify-content: flex-start;\n    -ms-flex-pack: start;\n    justify-content: flex-start; }\n\n.action-sheet-selected {\n  font-weight: bold; }\n\nion-alert {\n  position: absolute;\n  top: 0;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  z-index: 1000;\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  -webkit-box-pack: center;\n  -webkit-justify-content: center;\n  -ms-flex-pack: center;\n  justify-content: center; }\n  ion-alert input {\n    width: 100%; }\n\n.alert-wrapper {\n  z-index: 10;\n  display: -webkit-box;\n  display: -webkit-flex;\n  display: -ms-flexbox;\n  display: flex;\n  -webkit-box-orient: vertical;\n  -webkit-box-direction: normal;\n  -webkit-flex-direction: column;\n  -ms-flex-direction: column;\n  flex-direction: column;\n  min-width: 250px;\n  max-height: 90%;\n  opacity: 0; }\n\n.alert-title {\n  margin: 0;\n  padding: 0; }\n\n.alert-sub-title {\n  margin: 5px 0 0;\n  padding: 0;\n  font-weight: normal; }\n\n.alert-message {\n  overflow-y: scroll;\n  -webkit-overflow-scrolling: touch; }\n\n.alert-input {\n  padding: 10px 0;\n  border: 0;\n  background: inherit; }\n  .alert-input::-moz-placeholder {\n    color: #999; }\n  .alert-input:-ms-input-placeholder {\n    color: #999; }\n  .alert-input::-webkit-input-placeholder {\n    text-indent: 0;\n    color: #999; }\n\n.alert-button-group {\n  display: -webkit-box;\n  display: -webkit-flex;\n  display: -ms-flexbox;\n  display: flex;\n  -webkit-box-orient: horizontal;\n  -webkit-box-direction: normal;\n  -webkit-flex-direction: row;\n  -ms-flex-direction: row;\n  flex-direction: row; }\n  .alert-button-group.vertical {\n    -webkit-box-orient: vertical;\n    -webkit-box-direction: normal;\n    -webkit-flex-direction: column;\n    -ms-flex-direction: column;\n    flex-direction: column;\n    -webkit-flex-wrap: nowrap;\n    -ms-flex-wrap: nowrap;\n    flex-wrap: nowrap; }\n\n.alert-button {\n  z-index: 0;\n  display: block;\n  margin: 0;\n  font-size: 14px;\n  line-height: 20px; }\n\n.alert-tappable {\n  margin: 0;\n  padding: 0;\n  width: 100%;\n  font-size: inherit;\n  line-height: initial;\n  text-align: left;\n  background: transparent;\n  -webkit-appearance: none; }\n\n.alert-wrapper {\n  max-width: 280px;\n  border-radius: 2px;\n  background-color: #fafafa;\n  box-shadow: 0 16px 20px rgba(0, 0, 0, 0.4); }\n\n.alert-head {\n  padding: 24px 24px 20px 24px;\n  text-align: left; }\n\n.alert-title {\n  font-size: 22px; }\n\n.alert-sub-title {\n  font-size: 16px; }\n\n.alert-message,\n.alert-input-group {\n  padding: 0 24px 24px 24px;\n  color: rgba(0, 0, 0, 0.5); }\n\n.alert-message {\n  max-height: 240px;\n  font-size: 15px; }\n  .alert-message:empty {\n    padding: 0; }\n\n.alert-input {\n  margin: 5px 0 5px 0;\n  border-bottom: 1px solid #dedede;\n  color: #000; }\n  .alert-input:focus {\n    margin-bottom: 4px;\n    border-bottom: 2px solid #327eff; }\n\n.alert-radio-group,\n.alert-checkbox-group {\n  position: relative;\n  overflow: auto;\n  max-height: 240px;\n  border-top: 1px solid #dedede;\n  border-bottom: 1px solid #dedede; }\n\n.alert-tappable {\n  position: relative;\n  display: -webkit-box;\n  display: -webkit-flex;\n  display: -ms-flexbox;\n  display: flex;\n  overflow: hidden;\n  min-height: 4.4rem; }\n\n.alert-radio-label {\n  overflow: hidden;\n  -webkit-box-flex: 1;\n  -webkit-flex: 1;\n  -ms-flex: 1;\n  flex: 1;\n  padding: 13px 26px;\n  text-overflow: ellipsis;\n  white-space: nowrap; }\n\n.alert-radio-icon {\n  position: relative;\n  top: 0;\n  left: 13px;\n  display: block;\n  width: 16px;\n  height: 16px;\n  border-width: 2px;\n  border-style: solid;\n  border-radius: 50%;\n  border-color: #787878; }\n\n.alert-radio-inner {\n  position: absolute;\n  top: 2px;\n  left: 2px;\n  width: 8px;\n  height: 8px;\n  border-radius: 50%;\n  background-color: #327eff;\n  -webkit-transform: scale3d(0, 0, 0);\n  transform: scale3d(0, 0, 0);\n  -webkit-transition: -webkit-transform 280ms cubic-bezier(0.4, 0, 0.2, 1);\n  transition: transform 280ms cubic-bezier(0.4, 0, 0.2, 1); }\n\n.alert-radio[aria-checked=true] .alert-radio-label {\n  color: #327eff; }\n\n.alert-radio[aria-checked=true] .alert-radio-icon {\n  border-color: #327eff; }\n\n.alert-radio[aria-checked=true] .alert-radio-inner {\n  -webkit-transform: scale3d(1, 1, 1);\n  transform: scale3d(1, 1, 1); }\n\n.alert-checkbox-label {\n  overflow: hidden;\n  -webkit-box-flex: 1;\n  -webkit-flex: 1;\n  -ms-flex: 1;\n  flex: 1;\n  padding: 13px 26px;\n  text-overflow: ellipsis;\n  white-space: nowrap; }\n\n.alert-checkbox[aria-checked=true] .alert-checkbox-label {\n  color: initial; }\n\n.alert-checkbox-icon {\n  position: relative;\n  top: 0;\n  left: 13px;\n  width: 16px;\n  height: 16px;\n  border-width: 2px;\n  border-style: solid;\n  border-radius: 2px;\n  border-color: #787878; }\n\n.alert-checkbox[aria-checked=true] .alert-checkbox-icon {\n  border-color: #327eff;\n  background-color: #327eff; }\n\n.alert-checkbox[aria-checked=true] .alert-checkbox-inner {\n  position: absolute;\n  top: 0;\n  left: 3px;\n  width: 6px;\n  height: 10px;\n  border-width: 2px;\n  border-top-width: 0;\n  border-left-width: 0;\n  border-style: solid;\n  border-color: #fff;\n  -webkit-transform: rotate(45deg);\n  transform: rotate(45deg); }\n\n.alert-button-group {\n  -webkit-flex-wrap: wrap-reverse;\n  -ms-flex-wrap: wrap-reverse;\n  flex-wrap: wrap-reverse;\n  -webkit-box-pack: end;\n  -webkit-justify-content: flex-end;\n  -ms-flex-pack: end;\n  justify-content: flex-end;\n  padding: 8px 8px 8px 24px; }\n\n.alert-button {\n  position: relative;\n  overflow: hidden;\n  margin: 0 8px 0 0;\n  padding: 10px;\n  border-radius: 2px;\n  font-weight: 500;\n  text-align: right;\n  text-transform: uppercase;\n  color: #327eff;\n  background-color: transparent; }\n  .alert-button.activated {\n    background-color: rgba(158, 158, 158, 0.2); }\n  .alert-button .button-inner {\n    -webkit-box-pack: end;\n    -webkit-justify-content: flex-end;\n    -ms-flex-pack: end;\n    justify-content: flex-end; }\n\nion-badge {\n  display: inline-block;\n  padding: 3px 8px;\n  min-width: 10px;\n  font-size: 1.3rem;\n  font-weight: bold;\n  line-height: 1;\n  text-align: center;\n  white-space: nowrap;\n  vertical-align: baseline; }\n  ion-badge:empty {\n    display: none; }\n\nion-badge {\n  border-radius: 4px;\n  color: #fff;\n  background-color: #327eff; }\n\n.badge-primary {\n  color: #fff;\n  background-color: #327eff; }\n\n.badge-secondary {\n  color: #fff;\n  background-color: #32db64; }\n\n.badge-danger {\n  color: #fff;\n  background-color: #f53d3d; }\n\n.badge-light {\n  color: #000;\n  background-color: #f4f4f4; }\n\n.badge-dark {\n  color: #fff;\n  background-color: #222; }\n\n.button {\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  -ms-user-select: none;\n  user-select: none;\n  -webkit-appearance: none;\n  -moz-appearance: none;\n  position: relative;\n  z-index: 0;\n  display: inline-block;\n  overflow: hidden;\n  text-align: center;\n  text-overflow: ellipsis;\n  text-transform: none;\n  white-space: nowrap;\n  cursor: pointer;\n  vertical-align: top;\n  vertical-align: -webkit-baseline-middle;\n  -webkit-transition: background-color, opacity 100ms linear;\n  transition: background-color, opacity 100ms linear;\n  -webkit-font-kerning: none;\n  font-kerning: none; }\n\n.button-inner {\n  display: -webkit-box;\n  display: -webkit-flex;\n  display: -ms-flexbox;\n  display: flex;\n  -webkit-flex-flow: row nowrap;\n  -ms-flex-flow: row nowrap;\n  flex-flow: row nowrap;\n  -webkit-flex-shrink: 0;\n  -ms-flex-negative: 0;\n  flex-shrink: 0;\n  -webkit-box-align: center;\n  -webkit-align-items: center;\n  -ms-flex-align: center;\n  align-items: center;\n  -webkit-box-pack: center;\n  -webkit-justify-content: center;\n  -ms-flex-pack: center;\n  justify-content: center;\n  width: 100%;\n  height: 100%; }\n\n[ion-button] {\n  text-decoration: none; }\n\na[disabled],\nbutton[disabled],\n[ion-button][disabled] {\n  cursor: default;\n  opacity: .4;\n  pointer-events: none; }\n\n.button-block {\n  display: block;\n  clear: both;\n  width: 100%; }\n  .button-block::after {\n    clear: both; }\n\n.button-full {\n  display: block;\n  width: 100%; }\n\n.button-full.button-outline {\n  border-right-width: 0;\n  border-left-width: 0;\n  border-radius: 0; }\n\n.button {\n  margin: 0.4rem 0.2rem;\n  padding: 0 1.1em;\n  height: 3.6rem;\n  border-radius: 2px;\n  font-size: 1.4rem;\n  font-weight: 500;\n  text-transform: uppercase;\n  color: #fff;\n  background-color: #327eff;\n  box-shadow: 0 2px 2px 0 rgba(0, 0, 0, 0.14), 0 3px 1px -2px rgba(0, 0, 0, 0.2), 0 1px 5px 0 rgba(0, 0, 0, 0.12);\n  -webkit-transition: box-shadow 300ms cubic-bezier(0.4, 0, 0.2, 1), background-color 300ms cubic-bezier(0.4, 0, 0.2, 1), color 300ms cubic-bezier(0.4, 0, 0.2, 1);\n  transition: box-shadow 300ms cubic-bezier(0.4, 0, 0.2, 1), background-color 300ms cubic-bezier(0.4, 0, 0.2, 1), color 300ms cubic-bezier(0.4, 0, 0.2, 1); }\n  .button:hover:not(.disable-hover) {\n    background-color: #327eff; }\n  .button.activated {\n    background-color: #2e74eb;\n    box-shadow: 0 3px 5px rgba(0, 0, 0, 0.14), 0 3px 5px rgba(0, 0, 0, 0.21); }\n  .button ion-button-effect {\n    background-color: #fff; }\n\n.button-large {\n  padding: 0 1em;\n  height: 2.8em;\n  font-size: 2rem; }\n\n.button-small {\n  padding: 0 0.9em;\n  height: 2.1em;\n  font-size: 1.3rem; }\n  .button-small[icon-only] ion-icon {\n    font-size: 1.4em; }\n\n.button-block {\n  margin-right: 0;\n  margin-left: 0; }\n\n.button-full {\n  margin-right: 0;\n  margin-left: 0;\n  border-right-width: 0;\n  border-left-width: 0;\n  border-radius: 0; }\n\n.button-outline {\n  border-width: 1px;\n  border-style: solid;\n  border-color: #327eff;\n  color: #327eff;\n  background-color: transparent;\n  box-shadow: none; }\n  .button-outline:hover:not(.disable-hover) {\n    background-color: rgba(158, 158, 158, 0.1); }\n  .button-outline.activated {\n    background-color: transparent;\n    box-shadow: none;\n    opacity: 1; }\n  .button-outline ion-button-effect {\n    background-color: #327eff; }\n\n.button-clear {\n  border-color: transparent;\n  color: #327eff;\n  background-color: transparent;\n  box-shadow: none;\n  opacity: 1; }\n  .button-clear.activated {\n    background-color: rgba(158, 158, 158, 0.2);\n    box-shadow: none; }\n  .button-clear:hover:not(.disable-hover) {\n    background-color: rgba(158, 158, 158, 0.1); }\n  .button-clear ion-button-effect {\n    background-color: #999; }\n\n.button-round {\n  padding: 0 2.6rem;\n  border-radius: 64px; }\n\n.button-fab {\n  border-radius: 50%;\n  box-shadow: 0 4px 6px 0 rgba(0, 0, 0, 0.14), 0 4px 5px rgba(0, 0, 0, 0.1);\n  -webkit-transition: box-shadow 300ms cubic-bezier(0.4, 0, 0.2, 1), background-color 300ms cubic-bezier(0.4, 0, 0.2, 1), color 300ms cubic-bezier(0.4, 0, 0.2, 1);\n  transition: box-shadow 300ms cubic-bezier(0.4, 0, 0.2, 1), background-color 300ms cubic-bezier(0.4, 0, 0.2, 1), color 300ms cubic-bezier(0.4, 0, 0.2, 1); }\n  .button-fab.activated {\n    box-shadow: 0 5px 15px 0 rgba(0, 0, 0, 0.4), 0 4px 7px 0 rgba(0, 0, 0, 0.1); }\n\n[icon-only] {\n  padding: 0; }\n\nion-button-effect {\n  position: absolute;\n  z-index: 0;\n  display: block;\n  border-radius: 50%;\n  background-color: #555;\n  opacity: .2;\n  -webkit-transition-timing-function: ease-in-out;\n  transition-timing-function: ease-in-out;\n  pointer-events: none; }\n\n.button-primary {\n  color: #fff;\n  background-color: #327eff; }\n  .button-primary:hover:not(.disable-hover) {\n    background-color: #327eff; }\n  .button-primary.activated {\n    background-color: #2e74eb;\n    opacity: 1; }\n  .button-primary ion-button-effect {\n    background-color: #fff; }\n\n.button-outline-primary {\n  border-color: #3078f2;\n  color: #3078f2;\n  background-color: transparent; }\n  .button-outline-primary:hover:not(.disable-hover) {\n    background-color: rgba(158, 158, 158, 0.1); }\n  .button-outline-primary.activated {\n    background-color: transparent; }\n  .button-outline-primary ion-button-effect {\n    background-color: #3078f2; }\n\n.button-clear-primary {\n  border-color: transparent;\n  color: #327eff;\n  background-color: transparent; }\n  .button-clear-primary.activated {\n    background-color: rgba(158, 158, 158, 0.2);\n    box-shadow: none; }\n  .button-clear-primary:hover:not(.disable-hover) {\n    color: #327eff; }\n\n.button-secondary {\n  color: #fff;\n  background-color: #32db64; }\n  .button-secondary:hover:not(.disable-hover) {\n    background-color: #32db64; }\n  .button-secondary.activated {\n    background-color: #2ec95c;\n    opacity: 1; }\n  .button-secondary ion-button-effect {\n    background-color: #fff; }\n\n.button-outline-secondary {\n  border-color: #30d05f;\n  color: #30d05f;\n  background-color: transparent; }\n  .button-outline-secondary:hover:not(.disable-hover) {\n    background-color: rgba(158, 158, 158, 0.1); }\n  .button-outline-secondary.activated {\n    background-color: transparent; }\n  .button-outline-secondary ion-button-effect {\n    background-color: #30d05f; }\n\n.button-clear-secondary {\n  border-color: transparent;\n  color: #32db64;\n  background-color: transparent; }\n  .button-clear-secondary.activated {\n    background-color: rgba(158, 158, 158, 0.2);\n    box-shadow: none; }\n  .button-clear-secondary:hover:not(.disable-hover) {\n    color: #32db64; }\n\n.button-danger {\n  color: #fff;\n  background-color: #f53d3d; }\n  .button-danger:hover:not(.disable-hover) {\n    background-color: #f53d3d; }\n  .button-danger.activated {\n    background-color: #e13838;\n    opacity: 1; }\n  .button-danger ion-button-effect {\n    background-color: #fff; }\n\n.button-outline-danger {\n  border-color: #e93a3a;\n  color: #e93a3a;\n  background-color: transparent; }\n  .button-outline-danger:hover:not(.disable-hover) {\n    background-color: rgba(158, 158, 158, 0.1); }\n  .button-outline-danger.activated {\n    background-color: transparent; }\n  .button-outline-danger ion-button-effect {\n    background-color: #e93a3a; }\n\n.button-clear-danger {\n  border-color: transparent;\n  color: #f53d3d;\n  background-color: transparent; }\n  .button-clear-danger.activated {\n    background-color: rgba(158, 158, 158, 0.2);\n    box-shadow: none; }\n  .button-clear-danger:hover:not(.disable-hover) {\n    color: #f53d3d; }\n\n.button-light {\n  color: #000;\n  background-color: #f4f4f4; }\n  .button-light:hover:not(.disable-hover) {\n    background-color: #f4f4f4; }\n  .button-light.activated {\n    background-color: #e0e0e0;\n    opacity: 1; }\n  .button-light ion-button-effect {\n    background-color: #000; }\n\n.button-outline-light {\n  border-color: #e8e8e8;\n  color: #e8e8e8;\n  background-color: transparent; }\n  .button-outline-light:hover:not(.disable-hover) {\n    background-color: rgba(158, 158, 158, 0.1); }\n  .button-outline-light.activated {\n    background-color: transparent; }\n  .button-outline-light ion-button-effect {\n    background-color: #e8e8e8; }\n\n.button-clear-light {\n  border-color: transparent;\n  color: #f4f4f4;\n  background-color: transparent; }\n  .button-clear-light.activated {\n    background-color: rgba(158, 158, 158, 0.2);\n    box-shadow: none; }\n  .button-clear-light:hover:not(.disable-hover) {\n    color: #f4f4f4; }\n\n.button-dark {\n  color: #fff;\n  background-color: #222; }\n  .button-dark:hover:not(.disable-hover) {\n    background-color: #222; }\n  .button-dark.activated {\n    background-color: #343434;\n    opacity: 1; }\n  .button-dark ion-button-effect {\n    background-color: #fff; }\n\n.button-outline-dark {\n  border-color: #2d2d2d;\n  color: #2d2d2d;\n  background-color: transparent; }\n  .button-outline-dark:hover:not(.disable-hover) {\n    background-color: rgba(158, 158, 158, 0.1); }\n  .button-outline-dark.activated {\n    background-color: transparent; }\n  .button-outline-dark ion-button-effect {\n    background-color: #2d2d2d; }\n\n.button-clear-dark {\n  border-color: transparent;\n  color: #222;\n  background-color: transparent; }\n  .button-clear-dark.activated {\n    background-color: rgba(158, 158, 158, 0.2);\n    box-shadow: none; }\n  .button-clear-dark:hover:not(.disable-hover) {\n    color: #222; }\n\n.button-fab {\n  position: absolute;\n  overflow: hidden;\n  width: 56px;\n  min-width: 0;\n  height: 56px;\n  font-size: 14px;\n  line-height: 56px;\n  vertical-align: middle;\n  background-clip: padding-box; }\n\n.button-fab ion-icon {\n  -webkit-box-flex: 1;\n  -webkit-flex: 1;\n  -ms-flex: 1;\n  flex: 1;\n  font-size: 2.8rem; }\n\n[fab-center] {\n  left: 50%;\n  margin-left: -28px; }\n\n[fab-top] {\n  top: 16px; }\n\n[fab-right] {\n  right: 16px; }\n\n[fab-bottom] {\n  bottom: 16px; }\n\n[fab-left] {\n  left: 16px; }\n\n[fab-fixed] {\n  position: fixed; }\n\n[icon-left] ion-icon {\n  font-size: 1.4em;\n  line-height: .67;\n  pointer-events: none;\n  padding-right: .3em; }\n\n[icon-right] ion-icon {\n  font-size: 1.4em;\n  line-height: .67;\n  pointer-events: none;\n  padding-left: .4em; }\n\n[icon-only] {\n  padding: 0;\n  min-width: .9em; }\n\n[icon-only] ion-icon {\n  padding: 0 .5em;\n  font-size: 1.8em;\n  line-height: .67;\n  pointer-events: none; }\n\nion-card {\n  display: block;\n  overflow: hidden; }\n\nion-card img {\n  display: block;\n  width: 100%; }\n\nion-card-header {\n  display: block;\n  overflow: hidden;\n  text-overflow: ellipsis;\n  white-space: nowrap; }\n\nion-card-content {\n  display: block; }\n\nion-card {\n  margin: 10px 10px 10px 10px;\n  width: calc(100% - 20px);\n  border-radius: 2px;\n  font-size: 1.4rem;\n  background: #fff;\n  box-shadow: 0 2px 2px 0 rgba(0, 0, 0, 0.14), 0 3px 1px -2px rgba(0, 0, 0, 0.2), 0 1px 5px 0 rgba(0, 0, 0, 0.12); }\n  ion-card ion-list {\n    margin-bottom: 0; }\n  ion-card > .item:last-child,\n  ion-card > .item-wrapper:last-child .item {\n    border-bottom: 0; }\n  ion-card .item .item-inner {\n    border: 0; }\n  ion-card ion-card-content {\n    padding: 13px 16px 13px 16px;\n    font-size: 1.4rem;\n    line-height: 1.5; }\n  ion-card ion-card-header {\n    padding: 16px;\n    font-size: 1.6rem;\n    color: #222; }\n  ion-card ion-card-header + ion-card-content,\n  ion-card .item + ion-card-content {\n    padding-top: 0; }\n  ion-card ion-note[item-left],\n  ion-card ion-note[item-right] {\n    font-size: 1.3rem; }\n  ion-card ion-card-title {\n    display: block;\n    margin: 2px 0 2px;\n    padding: 8px 0 8px 0;\n    font-size: 2.4rem;\n    line-height: 1.2;\n    color: #222; }\n  ion-card h1 {\n    margin: 0 0 2px;\n    font-size: 2.4rem;\n    font-weight: normal;\n    color: #222; }\n  ion-card h2 {\n    margin: 2px 0;\n    font-size: 1.6rem;\n    font-weight: normal;\n    color: #222; }\n  ion-card h3,\n  ion-card h4,\n  ion-card h5,\n  ion-card h6 {\n    margin: 2px 0;\n    font-size: 1.4rem;\n    font-weight: normal;\n    color: #222; }\n  ion-card p {\n    margin: 0 0 2px;\n    font-size: 1.4rem;\n    font-weight: normal;\n    line-height: 1.5;\n    color: #222; }\n\nion-card + ion-card {\n  margin-top: 0; }\n\nion-checkbox {\n  position: relative;\n  display: inline-block; }\n\n.checkbox-icon {\n  position: relative;\n  width: 16px;\n  height: 16px;\n  border-width: 2px;\n  border-style: solid;\n  border-radius: 2px;\n  border-color: #787878;\n  background-color: #fff;\n  -webkit-transition-duration: 280ms;\n  transition-duration: 280ms;\n  -webkit-transition-property: background;\n  transition-property: background;\n  -webkit-transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\n  transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); }\n\n.checkbox-checked {\n  border-color: #327eff;\n  background-color: #327eff; }\n\n.checkbox-checked .checkbox-inner {\n  position: absolute;\n  top: 0;\n  left: 4px;\n  width: 5px;\n  height: 10px;\n  border-width: 2px;\n  border-top-width: 0;\n  border-left-width: 0;\n  border-style: solid;\n  border-color: #fff;\n  -webkit-transform: rotate(45deg);\n  transform: rotate(45deg); }\n\n.checkbox-disabled,\n.item-checkbox-disabled ion-label {\n  opacity: 0.3;\n  pointer-events: none; }\n\n.item ion-checkbox {\n  position: static;\n  display: block;\n  margin: 9px 36px 9px 4px; }\n  .item ion-checkbox[item-right] {\n    margin: 11px 10px 10px 0; }\n\nion-checkbox + .item-inner ion-label {\n  margin-left: 0; }\n\n.checkbox-primary .checkbox-checked {\n  border-color: #327eff;\n  background-color: #327eff; }\n  .checkbox-primary .checkbox-checked .checkbox-inner {\n    border-color: #fff; }\n\n.checkbox-secondary .checkbox-checked {\n  border-color: #32db64;\n  background-color: #32db64; }\n  .checkbox-secondary .checkbox-checked .checkbox-inner {\n    border-color: #fff; }\n\n.checkbox-danger .checkbox-checked {\n  border-color: #f53d3d;\n  background-color: #f53d3d; }\n  .checkbox-danger .checkbox-checked .checkbox-inner {\n    border-color: #fff; }\n\n.checkbox-light .checkbox-checked {\n  border-color: #f4f4f4;\n  background-color: #f4f4f4; }\n  .checkbox-light .checkbox-checked .checkbox-inner {\n    border-color: #000; }\n\n.checkbox-dark .checkbox-checked {\n  border-color: #222;\n  background-color: #222; }\n  .checkbox-dark .checkbox-checked .checkbox-inner {\n    border-color: #fff; }\n\nion-chip {\n  display: -webkit-inline-box;\n  display: -webkit-inline-flex;\n  display: -ms-inline-flexbox;\n  display: inline-flex;\n  -webkit-align-self: center;\n  -ms-flex-item-align: center;\n  align-self: center;\n  font-weight: normal;\n  vertical-align: middle;\n  box-sizing: border-box; }\n  ion-chip .button {\n    margin: 0;\n    width: 32px;\n    height: 32px;\n    border-radius: 50%; }\n  ion-chip ion-icon {\n    width: 32px;\n    height: 32px;\n    border-radius: 50%;\n    font-size: 18px;\n    line-height: 32px; }\n  ion-chip ion-avatar {\n    width: 32px;\n    min-width: 32px;\n    height: 32px;\n    min-height: 32px;\n    border-radius: 50%; }\n    ion-chip ion-avatar img {\n      display: block;\n      width: 100%;\n      max-width: 100%;\n      height: 100%;\n      max-height: 100%;\n      border-radius: 50%; }\n\nion-chip {\n  margin: 2px 0;\n  height: 32px;\n  border-radius: 16px;\n  font-size: 13px;\n  line-height: 32px;\n  color: rgba(0, 0, 0, 0.87);\n  background: rgba(0, 0, 0, 0.12); }\n  ion-chip > ion-label {\n    margin: 0 10px; }\n  ion-chip > ion-icon {\n    color: #fff;\n    background-color: #327eff; }\n\n.chip-primary,\nion-chip .icon-primary {\n  color: #fff;\n  background-color: #327eff; }\n\n.chip-secondary,\nion-chip .icon-secondary {\n  color: #fff;\n  background-color: #32db64; }\n\n.chip-danger,\nion-chip .icon-danger {\n  color: #fff;\n  background-color: #f53d3d; }\n\n.chip-light,\nion-chip .icon-light {\n  color: #000;\n  background-color: #f4f4f4; }\n\n.chip-dark,\nion-chip .icon-dark {\n  color: #fff;\n  background-color: #222; }\n\n[no-padding],\n[no-padding] scroll-content {\n  padding: 0; }\n\n[no-margin],\n[no-margin] scroll-content {\n  margin: 0; }\n\nion-fixed {\n  position: absolute;\n  z-index: 2;\n  -webkit-transform: translateZ(0);\n  transform: translateZ(0); }\n\nion-content {\n  background-color: #fff; }\n\n[padding],\n[padding] scroll-content {\n  padding: 16px; }\n\n[padding-top],\n[padding-top] scroll-content {\n  padding-top: 16px; }\n\n[padding-left],\n[padding-left] scroll-content {\n  padding-left: 16px; }\n\n[padding-right],\n[padding-right] scroll-content {\n  padding-right: 16px; }\n\n[padding-bottom],\n[padding-bottom] scroll-content {\n  padding-bottom: 16px; }\n\n[padding-vertical],\n[padding-vertical] scroll-content {\n  padding-top: 16px;\n  padding-bottom: 16px; }\n\n[padding-horizontal],\n[padding-horizontal] scroll-content {\n  padding-right: 16px;\n  padding-left: 16px; }\n\n[margin],\n[margin] scroll-content {\n  margin: 16px; }\n\n[margin-top],\n[margin-top] scroll-content {\n  margin-top: 16px; }\n\n[margin-left],\n[margin-left] scroll-content {\n  margin-left: 16px; }\n\n[margin-right],\n[margin-right] scroll-content {\n  margin-right: 16px; }\n\n[margin-bottom],\n[margin-bottom] scroll-content {\n  margin-bottom: 16px; }\n\n[margin-vertical],\n[margin-vertical] scroll-content {\n  margin-top: 16px;\n  margin-bottom: 16px; }\n\n[margin-horizontal],\n[margin-horizontal] scroll-content {\n  margin-right: 16px;\n  margin-left: 16px; }\n\nion-datetime {\n  display: -webkit-box;\n  display: -webkit-flex;\n  display: -ms-flexbox;\n  display: flex;\n  overflow: hidden; }\n\n.datetime-text {\n  overflow: hidden;\n  -webkit-box-flex: 1;\n  -webkit-flex: 1;\n  -ms-flex: 1;\n  flex: 1;\n  min-width: 16px;\n  min-height: 1.2em;\n  font-size: inherit;\n  line-height: 1.2;\n  text-overflow: ellipsis;\n  white-space: nowrap; }\n\n.datetime-disabled,\n.item-datetime-disabled ion-label {\n  opacity: .4;\n  pointer-events: none; }\n\n.item-label-stacked ion-datetime,\n.item-label-floating ion-datetime {\n  padding-left: 0;\n  width: 100%; }\n\nion-datetime {\n  padding: 13px 8px 13px 16px; }\n\nion-icon {\n  display: inline-block;\n  font-size: 1.2em; }\n\nion-icon[small] {\n  min-height: 1.1em;\n  font-size: 1.1em; }\n\n.icon-primary {\n  color: #327eff; }\n\n.icon-secondary {\n  color: #32db64; }\n\n.icon-danger {\n  color: #f53d3d; }\n\n.icon-light {\n  color: #f4f4f4; }\n\n.icon-dark {\n  color: #222; }\n\nion-input,\nion-textarea {\n  position: relative;\n  display: block;\n  -webkit-box-flex: 1;\n  -webkit-flex: 1;\n  -ms-flex: 1;\n  flex: 1;\n  width: 100%; }\n\n.item-input ion-input,\n.item-input ion-textarea {\n  position: static; }\n\n.item.item-textarea {\n  -webkit-box-align: stretch;\n  -webkit-align-items: stretch;\n  -ms-flex-align: stretch;\n  align-items: stretch; }\n\n.text-input {\n  display: inline-block;\n  -webkit-box-flex: 1;\n  -webkit-flex: 1;\n  -ms-flex: 1;\n  flex: 1;\n  width: 92%;\n  width: calc(100% - 10px);\n  border: 0;\n  border-radius: 0;\n  background: transparent;\n  -webkit-appearance: none; }\n  .text-input::-moz-placeholder {\n    color: #999; }\n  .text-input:-ms-input-placeholder {\n    color: #999; }\n  .text-input::-webkit-input-placeholder {\n    text-indent: 0;\n    color: #999; }\n\ntextarea.text-input {\n  display: block; }\n\n.text-input[disabled] {\n  opacity: .4; }\n\ninput.text-input:-webkit-autofill {\n  background-color: transparent; }\n\n.platform-mobile textarea.text-input {\n  resize: none; }\n\n.input-cover {\n  position: absolute;\n  top: 0;\n  left: 0;\n  width: 100%;\n  height: 100%; }\n\n.input-has-focus .input-cover {\n  display: none; }\n\n.input-has-focus {\n  pointer-events: none; }\n\n.input-has-focus input,\n.input-has-focus textarea,\n.input-has-focus a,\n.input-has-focus button {\n  pointer-events: auto; }\n\n[next-input] {\n  position: absolute;\n  bottom: 1px;\n  padding: 0;\n  width: 1px;\n  height: 1px;\n  border: 0;\n  background: transparent;\n  pointer-events: none; }\n\n.text-input-clear-icon {\n  position: absolute;\n  top: 0;\n  display: none;\n  margin: 0;\n  padding: 0;\n  height: 100%;\n  background-repeat: no-repeat;\n  background-position: center; }\n\n.input-has-focus.input-has-value .text-input-clear-icon {\n  display: block; }\n\n.text-input.cloned-input {\n  position: relative;\n  top: 0;\n  pointer-events: none; }\n\n.item-input:not(.item-label-floating) .text-input.cloned-active {\n  display: none; }\n\n.text-input {\n  margin: 13px 8px 13px 8px;\n  padding: 0;\n  width: calc(100% - 8px - 8px); }\n\n.inset-input {\n  margin: 6.5px 16px 6.5px 16px;\n  padding: 6.5px 8px 6.5px 8px; }\n\n.item-input.input-has-focus .item-inner {\n  border-bottom-color: #327eff;\n  box-shadow: inset 0 -1px 0 0 #327eff; }\n\nion-list .item-input.input-has-focus:last-child {\n  border-bottom-color: #327eff;\n  box-shadow: inset 0 -1px 0 0 #327eff; }\n  ion-list .item-input.input-has-focus:last-child .item-inner {\n    box-shadow: none; }\n\n.item-input.ng-valid.input-has-value:not(.input-has-focus) .item-inner {\n  border-bottom-color: #32db64;\n  box-shadow: inset 0 -1px 0 0 #32db64; }\n\nion-list .item-input.ng-valid.input-has-value:not(.input-has-focus):last-child {\n  border-bottom-color: #32db64;\n  box-shadow: inset 0 -1px 0 0 #32db64; }\n  ion-list .item-input.ng-valid.input-has-value:not(.input-has-focus):last-child .item-inner {\n    box-shadow: none; }\n\n.item-input.ng-invalid.ng-touched:not(.input-has-focus) .item-inner {\n  border-bottom-color: #f53d3d;\n  box-shadow: inset 0 -1px 0 0 #f53d3d; }\n\nion-list .item-input.ng-invalid.ng-touched:not(.input-has-focus):last-child {\n  border-bottom-color: #f53d3d;\n  box-shadow: inset 0 -1px 0 0 #f53d3d; }\n  ion-list .item-input.ng-invalid.ng-touched:not(.input-has-focus):last-child .item-inner {\n    box-shadow: none; }\n\n.item-label-stacked .text-input,\n.item-label-floating .text-input {\n  margin-top: 8px;\n  margin-bottom: 8px;\n  margin-left: 0;\n  width: calc(100% - 8px); }\n\n.item-label-stacked ion-select,\n.item-label-floating ion-select {\n  padding-top: 8px;\n  padding-bottom: 8px;\n  padding-left: 0; }\n\n.item-label-floating .text-input.cloned-input {\n  top: 32px; }\n\n.item-label-stacked .text-input.cloned-input {\n  top: 27px; }\n\nion-input[clearInput] {\n  position: relative; }\n  ion-input[clearInput] .text-input {\n    padding-right: 30px; }\n\n.text-input-clear-icon {\n  background-image: url(\"data:image/svg+xml;charset=utf-8,<svg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%20512%20512'><polygon%20fill='%235b5b5b'%20points='405,136.798%20375.202,107%20256,226.202%20136.798,107%20107,136.798%20226.202,256%20107,375.202%20136.798,405%20256,285.798%20375.202,405%20405,375.202%20285.798,256'/></svg>\");\n  right: 8px;\n  width: 30px;\n  background-size: 22px; }\n\n.item {\n  display: -webkit-box;\n  display: -webkit-flex;\n  display: -ms-flexbox;\n  display: flex;\n  overflow: hidden;\n  -webkit-box-align: center;\n  -webkit-align-items: center;\n  -ms-flex-align: center;\n  align-items: center;\n  -webkit-box-pack: justify;\n  -webkit-justify-content: space-between;\n  -ms-flex-pack: justify;\n  justify-content: space-between;\n  margin: 0;\n  padding: 0;\n  width: 100%;\n  min-height: 4.4rem;\n  border: 0;\n  font-weight: normal;\n  line-height: normal;\n  text-align: initial;\n  text-decoration: none;\n  color: inherit; }\n\n.item-inner {\n  display: -webkit-box;\n  display: -webkit-flex;\n  display: -ms-flexbox;\n  display: flex;\n  overflow: hidden;\n  -webkit-box-flex: 1;\n  -webkit-flex: 1;\n  -ms-flex: 1;\n  flex: 1;\n  -webkit-box-orient: vertical;\n  -webkit-box-direction: normal;\n  -webkit-flex-direction: inherit;\n  -ms-flex-direction: inherit;\n  flex-direction: inherit;\n  -webkit-box-align: inherit;\n  -webkit-align-items: inherit;\n  -ms-flex-align: inherit;\n  align-items: inherit;\n  -webkit-align-self: stretch;\n  -ms-flex-item-align: stretch;\n  align-self: stretch;\n  margin: 0;\n  padding: 0;\n  min-height: inherit;\n  border: 0; }\n\n.input-wrapper {\n  display: -webkit-box;\n  display: -webkit-flex;\n  display: -ms-flexbox;\n  display: flex;\n  overflow: hidden;\n  -webkit-box-flex: 1;\n  -webkit-flex: 1;\n  -ms-flex: 1;\n  flex: 1;\n  -webkit-box-orient: vertical;\n  -webkit-box-direction: normal;\n  -webkit-flex-direction: inherit;\n  -ms-flex-direction: inherit;\n  flex-direction: inherit;\n  -webkit-box-align: inherit;\n  -webkit-align-items: inherit;\n  -ms-flex-align: inherit;\n  align-items: inherit;\n  -webkit-align-self: stretch;\n  -ms-flex-item-align: stretch;\n  align-self: stretch;\n  text-overflow: ellipsis; }\n\n.item[no-lines],\n.item[no-lines] .item-inner {\n  border: 0; }\n\nion-item-group {\n  display: block; }\n\nion-item-divider {\n  z-index: 1000;\n  display: -webkit-box;\n  display: -webkit-flex;\n  display: -ms-flexbox;\n  display: flex;\n  overflow: hidden;\n  -webkit-box-align: center;\n  -webkit-align-items: center;\n  -ms-flex-align: center;\n  align-items: center;\n  -webkit-box-pack: justify;\n  -webkit-justify-content: space-between;\n  -ms-flex-pack: justify;\n  justify-content: space-between;\n  margin: 0;\n  padding: 0;\n  width: 100%;\n  min-height: 30px; }\n  ion-item-divider[sticky] {\n    position: -webkit-sticky;\n    position: sticky;\n    top: 0; }\n\n[vertical-align-top],\nion-input.item {\n  -webkit-box-align: start;\n  -webkit-align-items: flex-start;\n  -ms-flex-align: start;\n  align-items: flex-start; }\n\n.item > ion-icon[small]:first-child,\n.item-inner > ion-icon[small]:first-child {\n  min-width: 18px; }\n\n.item > ion-icon:first-child,\n.item-inner > ion-icon:first-child {\n  min-width: 24px;\n  text-align: center; }\n\n.item > ion-icon,\n.item-inner > ion-icon {\n  min-height: 2.4rem;\n  font-size: 2.4rem;\n  line-height: 1; }\n  .item > ion-icon[large],\n  .item-inner > ion-icon[large] {\n    min-height: 3.2rem;\n    font-size: 3.2rem; }\n  .item > ion-icon[small],\n  .item-inner > ion-icon[small] {\n    min-height: 1.8rem;\n    font-size: 1.8rem; }\n\nion-avatar,\nion-thumbnail {\n  display: block;\n  line-height: 1; }\n  ion-avatar img,\n  ion-thumbnail img {\n    display: block; }\n\n.item-cover {\n  position: absolute;\n  top: 0;\n  left: 0;\n  width: 100%;\n  height: 100%;\n  background: transparent;\n  cursor: pointer; }\n\nion-item-sliding {\n  position: relative;\n  display: block;\n  overflow: hidden;\n  width: 100%; }\n  ion-item-sliding .item {\n    position: static; }\n\nion-item-options {\n  position: absolute;\n  top: 0;\n  right: 0;\n  z-index: 1;\n  display: none;\n  -webkit-box-pack: end;\n  -webkit-justify-content: flex-end;\n  -ms-flex-pack: end;\n  justify-content: flex-end;\n  height: 100%;\n  font-size: 14px;\n  visibility: hidden; }\n\nion-item-options[side=left] {\n  right: auto;\n  left: 0;\n  -webkit-box-pack: start;\n  -webkit-justify-content: flex-start;\n  -ms-flex-pack: start;\n  justify-content: flex-start; }\n\nion-item-options .button {\n  margin: 0;\n  padding: 0 .7em;\n  height: 100%;\n  border-radius: 0;\n  box-shadow: none;\n  box-sizing: content-box; }\n\nion-item-options:not([icon-left]) .button .button-inner {\n  -webkit-box-orient: vertical;\n  -webkit-box-direction: normal;\n  -webkit-flex-direction: column;\n  -ms-flex-direction: column;\n  flex-direction: column; }\n\nion-item-options:not([icon-left]) .button ion-icon {\n  padding-right: 0;\n  padding-bottom: .3em;\n  padding-left: 0; }\n\nion-item-sliding.active-slide .item,\nion-item-sliding.active-slide .item.activated {\n  position: relative;\n  z-index: 2;\n  opacity: 1;\n  -webkit-transition: -webkit-transform 500ms cubic-bezier(0.36, 0.66, 0.04, 1);\n  transition: transform 500ms cubic-bezier(0.36, 0.66, 0.04, 1);\n  pointer-events: none;\n  will-change: transform; }\n\nion-item-sliding.active-slide ion-item-options {\n  display: -webkit-box;\n  display: -webkit-flex;\n  display: -ms-flexbox;\n  display: flex; }\n\nion-item-sliding.active-slide.active-options-left ion-item-options[side=left] {\n  width: 100%;\n  visibility: visible; }\n\nion-item-sliding.active-slide.active-options-right ion-item-options:not([side=left]) {\n  width: 100%;\n  visibility: visible; }\n\n.button-expandable {\n  -webkit-flex-shrink: 0;\n  -ms-flex-negative: 0;\n  flex-shrink: 0;\n  -webkit-transition-duration: 0;\n  transition-duration: 0;\n  -webkit-transition-property: none;\n  transition-property: none;\n  -webkit-transition-timing-function: cubic-bezier(0.65, 0.05, 0.36, 1);\n  transition-timing-function: cubic-bezier(0.65, 0.05, 0.36, 1); }\n\nion-item-sliding.active-swipe-right .button-expandable {\n  -webkit-box-ordinal-group: 2;\n  -webkit-order: 1;\n  -ms-flex-order: 1;\n  order: 1;\n  padding-left: 90%;\n  -webkit-transition-duration: .6s;\n  transition-duration: .6s;\n  -webkit-transition-property: padding-left;\n  transition-property: padding-left; }\n\nion-item-sliding.active-swipe-left .button-expandable {\n  -webkit-box-ordinal-group: 0;\n  -webkit-order: -1;\n  -ms-flex-order: -1;\n  order: -1;\n  padding-right: 90%;\n  -webkit-transition-duration: .6s;\n  transition-duration: .6s;\n  -webkit-transition-property: padding-right;\n  transition-property: padding-right; }\n\nion-reorder {\n  display: none;\n  -webkit-box-flex: 1;\n  -webkit-flex: 1;\n  -ms-flex: 1;\n  flex: 1;\n  -webkit-box-align: center;\n  -webkit-align-items: center;\n  -ms-flex-align: center;\n  align-items: center;\n  -webkit-box-pack: center;\n  -webkit-justify-content: center;\n  -ms-flex-pack: center;\n  justify-content: center;\n  max-width: 40px;\n  height: 100%;\n  font-size: 1.7em;\n  opacity: .25;\n  -webkit-transform: translate3d(120%, 0, 0);\n  transform: translate3d(120%, 0, 0);\n  -webkit-transition: -webkit-transform 125ms ease-in;\n  transition: transform 125ms ease-in;\n  pointer-events: all;\n  -ms-touch-action: manipulation;\n  touch-action: manipulation; }\n  ion-reorder ion-icon {\n    pointer-events: none; }\n\n.reorder-enabled ion-reorder {\n  display: -webkit-box;\n  display: -webkit-flex;\n  display: -ms-flexbox;\n  display: flex; }\n\n.reorder-visible ion-reorder {\n  -webkit-transform: translate3d(0, 0, 0);\n  transform: translate3d(0, 0, 0); }\n\n.reorder-list-active .item,\n.reorder-list-active .item-wrapper {\n  -webkit-transition: -webkit-transform 300ms;\n  transition: transform 300ms;\n  will-change: transform; }\n\n.reorder-list-active .item-inner {\n  pointer-events: none; }\n\n.item-wrapper.reorder-active,\n.item.reorder-active,\n.reorder-active {\n  z-index: 4;\n  box-shadow: 0 0 10px rgba(0, 0, 0, 0.4);\n  opacity: .8;\n  -webkit-transition: none;\n  transition: none;\n  pointer-events: none; }\n\n.item {\n  position: relative;\n  padding-right: 0;\n  padding-left: 16px;\n  font-size: 1.6rem;\n  font-weight: normal;\n  text-transform: none;\n  color: #000;\n  background-color: #fff;\n  box-shadow: none;\n  -webkit-transition: background-color 300ms cubic-bezier(0.4, 0, 0.2, 1), -webkit-transform 300ms;\n  transition: background-color 300ms cubic-bezier(0.4, 0, 0.2, 1), transform 300ms; }\n  .item h1 {\n    margin: 0 0 2px;\n    font-size: 2.4rem;\n    font-weight: normal; }\n  .item h2 {\n    margin: 2px 0;\n    font-size: 1.6rem;\n    font-weight: normal; }\n  .item h3,\n  .item h4,\n  .item h5,\n  .item h6 {\n    margin: 2px 0;\n    font-size: 1.4rem;\n    font-weight: normal;\n    line-height: normal; }\n  .item p {\n    overflow: inherit;\n    margin: 0 0 2px;\n    font-size: 1.4rem;\n    line-height: normal;\n    text-overflow: inherit;\n    color: #666; }\n\n.item.activated {\n  background-color: #f1f1f1; }\n\n.item[no-lines] {\n  border-width: 0; }\n\n.item .item-inner {\n  padding-right: 8px;\n  border-bottom: 1px solid #dedede; }\n\n[item-left],\n[item-right] {\n  margin: 9px 8px 9px 0; }\n\nion-icon[item-left],\nion-icon[item-right] {\n  margin-top: 11px;\n  margin-bottom: 10px;\n  margin-left: 0; }\n\n.item-button {\n  padding: 0 .6em;\n  height: 25px;\n  font-size: 1.2rem; }\n\n.item-button[icon-only] ion-icon,\n.item-button[icon-only] {\n  padding: 0 1px; }\n\nion-icon[item-left] + .item-inner,\nion-icon[item-left] + .item-input {\n  margin-left: 24px; }\n\nion-avatar[item-left],\nion-thumbnail[item-left] {\n  margin: 8px 16px 8px 0; }\n\nion-avatar[item-right],\nion-thumbnail[item-right] {\n  margin: 8px; }\n\nion-avatar {\n  min-width: 4rem;\n  min-height: 4rem; }\n  ion-avatar img {\n    max-width: 4rem;\n    max-height: 4rem;\n    border-radius: 2rem; }\n\nion-thumbnail {\n  min-width: 8rem;\n  min-height: 8rem; }\n  ion-thumbnail img {\n    max-width: 8rem;\n    max-height: 8rem; }\n\nion-note {\n  color: #c5c5c5; }\n\nion-item-group .item:first-child .item-inner {\n  border-top-width: 0; }\n\nion-item-group .item:last-child .item-inner,\nion-item-group .item-wrapper:last-child .item-inner {\n  border: 0; }\n\nion-item-divider {\n  padding-left: 16px;\n  color: #222;\n  background-color: #fff; }\n\n.item .text-primary {\n  color: #327eff; }\n\n.item-primary {\n  color: #fff;\n  background-color: #327eff; }\n\n.item .text-secondary {\n  color: #32db64; }\n\n.item-secondary {\n  color: #fff;\n  background-color: #32db64; }\n\n.item .text-danger {\n  color: #f53d3d; }\n\n.item-danger {\n  color: #fff;\n  background-color: #f53d3d; }\n\n.item .text-light {\n  color: #f4f4f4; }\n\n.item-light {\n  color: #000;\n  background-color: #f4f4f4; }\n\n.item .text-dark {\n  color: #222; }\n\n.item-dark {\n  color: #fff;\n  background-color: #222; }\n\nion-item-sliding {\n  background-color: #fff; }\n\nion-reorder {\n  font-size: 1.5em;\n  opacity: .3; }\n\nion-label {\n  display: block;\n  overflow: hidden;\n  -webkit-box-flex: 1;\n  -webkit-flex: 1;\n  -ms-flex: 1;\n  flex: 1;\n  margin: 0;\n  font-size: inherit;\n  text-overflow: ellipsis;\n  white-space: nowrap; }\n\n.item-input ion-label {\n  -webkit-box-flex: initial;\n  -webkit-flex: initial;\n  -ms-flex: initial;\n  flex: initial;\n  max-width: 200px;\n  pointer-events: none; }\n\n[text-wrap] ion-label {\n  white-space: normal; }\n\nion-label[fixed] {\n  -webkit-box-flex: 0;\n  -webkit-flex: 0 0 100px;\n  -ms-flex: 0 0 100px;\n  flex: 0 0 100px;\n  width: 100px;\n  min-width: 100px;\n  max-width: 200px; }\n\n.item-label-stacked ion-label,\n.item-label-floating ion-label {\n  -webkit-align-self: stretch;\n  -ms-flex-item-align: stretch;\n  align-self: stretch;\n  width: auto;\n  max-width: 100%; }\n\nion-label[stacked],\nion-label[floating] {\n  margin-bottom: 0; }\n\n.item-label-stacked .input-wrapper,\n.item-label-floating .input-wrapper {\n  -webkit-box-flex: 1;\n  -webkit-flex: 1;\n  -ms-flex: 1;\n  flex: 1;\n  -webkit-box-orient: vertical;\n  -webkit-box-direction: normal;\n  -webkit-flex-direction: column;\n  -ms-flex-direction: column;\n  flex-direction: column; }\n\n.item-label-stacked ion-select,\n.item-label-floating ion-select {\n  -webkit-align-self: stretch;\n  -ms-flex-item-align: stretch;\n  align-self: stretch;\n  max-width: 100%; }\n\n.item-select ion-label[floating] {\n  -webkit-transform: translate3d(0, 0, 0) scale(0.8);\n  transform: translate3d(0, 0, 0) scale(0.8); }\n\nion-label {\n  margin: 13px 8px 13px 0; }\n\n[text-wrap] ion-label {\n  font-size: 1.4rem;\n  line-height: 1.5; }\n\n.item-input ion-label,\n.item-select ion-label,\n.item-datetime ion-label {\n  color: #999; }\n\nion-label[stacked] {\n  font-size: 1.2rem; }\n\nion-label[floating] {\n  -webkit-transform: translate3d(0, 27px, 0);\n  transform: translate3d(0, 27px, 0);\n  -webkit-transform-origin: left top;\n  transform-origin: left top;\n  -webkit-transition: -webkit-transform 150ms ease-in-out;\n  transition: transform 150ms ease-in-out; }\n\nion-label[stacked],\nion-label[floating] {\n  margin-bottom: 0;\n  margin-left: 0; }\n\n.input-has-focus ion-label[stacked],\n.input-has-focus ion-label[floating] {\n  color: #327eff; }\n\n.input-has-focus ion-label[floating],\n.input-has-value ion-label[floating] {\n  -webkit-transform: translate3d(0, 0, 0) scale(0.8);\n  transform: translate3d(0, 0, 0) scale(0.8); }\n\n.item-label-stacked [item-right],\n.item-label-floating [item-right] {\n  margin-top: 7px;\n  margin-bottom: 7px; }\n\n.label-primary,\n.item-input .label-primary,\n.item-select .label-primary,\n.item-datetime .label-primary {\n  color: #327eff; }\n\n.label-secondary,\n.item-input .label-secondary,\n.item-select .label-secondary,\n.item-datetime .label-secondary {\n  color: #32db64; }\n\n.label-danger,\n.item-input .label-danger,\n.item-select .label-danger,\n.item-datetime .label-danger {\n  color: #f53d3d; }\n\n.label-light,\n.item-input .label-light,\n.item-select .label-light,\n.item-datetime .label-light {\n  color: #f4f4f4; }\n\n.label-dark,\n.item-input .label-dark,\n.item-select .label-dark,\n.item-datetime .label-dark {\n  color: #222; }\n\nion-list-header {\n  display: -webkit-box;\n  display: -webkit-flex;\n  display: -ms-flexbox;\n  display: flex;\n  overflow: hidden;\n  -webkit-box-align: center;\n  -webkit-align-items: center;\n  -ms-flex-align: center;\n  align-items: center;\n  -webkit-box-pack: justify;\n  -webkit-justify-content: space-between;\n  -ms-flex-pack: justify;\n  justify-content: space-between;\n  margin: 0;\n  padding: 0;\n  width: 100%;\n  min-height: 4rem; }\n\nion-list {\n  display: block;\n  margin: 0;\n  padding: 0;\n  list-style-type: none; }\n\nion-list[inset] {\n  overflow: hidden;\n  -webkit-transform: translateZ(0);\n  transform: translateZ(0); }\n\nion-list-header,\nion-item-divider {\n  margin-left: 0;\n  padding-left: 16px;\n  border-bottom: 1px solid #dedede;\n  font-size: 1.4rem;\n  color: #858585; }\n\nion-list {\n  margin: 0 0 16px 0; }\n  ion-list .item .item-inner {\n    border-bottom: 1px solid #dedede; }\n  ion-list > .item:first-child,\n  ion-list > .item-wrapper:first-child .item {\n    border-top: 1px solid #dedede; }\n  ion-list > .item:last-child,\n  ion-list > .item-wrapper:last-child .item {\n    border-bottom: 1px solid #dedede; }\n  ion-list > .item:last-child ion-label,\n  ion-list > .item:last-child .item-inner,\n  ion-list > .item-wrapper:last-child ion-label,\n  ion-list > .item-wrapper:last-child .item-inner {\n    border-bottom: 0; }\n  ion-list > ion-input:last-child::after {\n    left: 0; }\n  ion-list ion-item-options {\n    border-bottom: 1px solid #dedede; }\n  ion-list ion-item-options button,\n  ion-list ion-item-options [button] {\n    display: -webkit-inline-box;\n    display: -webkit-inline-flex;\n    display: -ms-inline-flexbox;\n    display: inline-flex;\n    -webkit-box-align: center;\n    -webkit-align-items: center;\n    -ms-flex-align: center;\n    align-items: center;\n    margin: 1px 0;\n    height: calc(100% - 2px);\n    border: 0;\n    border-radius: 0;\n    box-shadow: none;\n    box-sizing: border-box; }\n    ion-list ion-item-options button::before,\n    ion-list ion-item-options [button]::before {\n      margin: 0 auto; }\n  ion-list .item[no-lines],\n  ion-list .item[no-lines] .item-inner {\n    border-width: 0; }\n  ion-list + ion-list ion-list-header {\n    margin-top: -16px;\n    padding-top: 0; }\n\nion-list[inset] {\n  margin: 16px 16px 16px 16px;\n  border-radius: 2px; }\n  ion-list[inset] .item:first-child {\n    border-top-width: 0;\n    border-top-left-radius: 2px;\n    border-top-right-radius: 2px; }\n  ion-list[inset] .item:last-child {\n    border-bottom-width: 0;\n    border-bottom-left-radius: 2px;\n    border-bottom-right-radius: 2px; }\n  ion-list[inset] .item-input {\n    padding-right: 0;\n    padding-left: 0; }\n  ion-list[inset] + ion-list[inset] {\n    margin-top: 0; }\n  ion-list[inset] ion-list-header {\n    background-color: #fff; }\n\nion-list[no-lines] .item,\nion-list[no-lines] ion-item-options,\nion-list[no-lines] .item .item-inner {\n  border-width: 0; }\n\nion-loading {\n  position: absolute;\n  top: 0;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  z-index: 1000;\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  -webkit-box-pack: center;\n  -webkit-justify-content: center;\n  -ms-flex-pack: center;\n  justify-content: center; }\n\n.loading-wrapper {\n  z-index: 10;\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  opacity: 0; }\n\n.loading-wrapper {\n  padding: 24px;\n  max-width: 280px;\n  max-height: 90%;\n  border-radius: 2px;\n  color: rgba(0, 0, 0, 0.5);\n  background: #fafafa;\n  box-shadow: 0 16px 20px rgba(0, 0, 0, 0.4); }\n\n.loading-spinner + .loading-content {\n  margin-left: 16px; }\n\n.loading-spinner .spinner-ios line,\n.loading-spinner .spinner-ios-small line {\n  stroke: #327eff; }\n\n.loading-spinner .spinner-bubbles circle {\n  fill: #327eff; }\n\n.loading-spinner .spinner-circles circle {\n  fill: #327eff; }\n\n.loading-spinner .spinner-crescent circle {\n  stroke: #327eff; }\n\n.loading-spinner .spinner-dots circle {\n  fill: #327eff; }\n\n.menu-inner {\n  background: #fff; }\n\n.menu-content-reveal {\n  box-shadow: 0 0 10px rgba(0, 0, 0, 0.25); }\n\n.menu-content-push {\n  box-shadow: 0 0 10px rgba(0, 0, 0, 0.25); }\n\nion-menu[type=overlay] .menu-inner {\n  box-shadow: 0 0 10px rgba(0, 0, 0, 0.25); }\n\n.modal-wrapper {\n  opacity: .01;\n  -webkit-transform: translate3d(0, 40px, 0);\n  transform: translate3d(0, 40px, 0); }\n\nion-picker-cmp {\n  position: absolute;\n  top: 0;\n  left: 0;\n  z-index: 1000;\n  display: block;\n  width: 100%;\n  height: 100%; }\n\n.picker-toolbar {\n  z-index: 1; }\n\n.picker-wrapper {\n  position: absolute;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  z-index: 10;\n  display: -webkit-box;\n  display: -webkit-flex;\n  display: -ms-flexbox;\n  display: flex;\n  overflow: hidden;\n  -webkit-box-orient: vertical;\n  -webkit-box-direction: normal;\n  -webkit-flex-direction: column;\n  -ms-flex-direction: column;\n  flex-direction: column;\n  margin: auto;\n  width: 100%;\n  max-width: 500px;\n  -webkit-transform: translate3d(0, 100%, 0);\n  transform: translate3d(0, 100%, 0); }\n\n.picker-columns {\n  position: relative;\n  display: -webkit-box;\n  display: -webkit-flex;\n  display: -ms-flexbox;\n  display: flex;\n  overflow: hidden;\n  -webkit-box-pack: center;\n  -webkit-justify-content: center;\n  -ms-flex-pack: center;\n  justify-content: center; }\n\n.picker-col {\n  position: relative;\n  display: -webkit-box;\n  display: -webkit-flex;\n  display: -ms-flexbox;\n  display: flex;\n  max-height: 100%; }\n\n.picker-opts {\n  position: relative;\n  width: 100%;\n  min-width: 50px;\n  max-width: 100%; }\n\n.picker-prefix {\n  position: relative;\n  -webkit-box-flex: 1;\n  -webkit-flex: 1;\n  -ms-flex: 1;\n  flex: 1;\n  min-width: 50px;\n  min-width: 45%;\n  text-align: right;\n  white-space: nowrap; }\n\n.picker-suffix {\n  position: relative;\n  -webkit-box-flex: 1;\n  -webkit-flex: 1;\n  -ms-flex: 1;\n  flex: 1;\n  min-width: 50px;\n  min-width: 45%;\n  text-align: left;\n  white-space: nowrap; }\n\n.picker-opt {\n  position: absolute;\n  top: 0;\n  left: 0;\n  overflow: hidden;\n  -webkit-box-flex: 1;\n  -webkit-flex: 1;\n  -ms-flex: 1;\n  flex: 1;\n  width: 100%; }\n\n.picker-opt .button-inner {\n  display: block;\n  overflow: hidden;\n  text-overflow: ellipsis;\n  white-space: nowrap;\n  -webkit-transition: opacity 150ms ease-in-out;\n  transition: opacity 150ms ease-in-out; }\n\n.picker-opt.picker-opt-disabled {\n  pointer-events: none; }\n\n.picker-opt-disabled .button-inner {\n  opacity: 0; }\n\n.picker-opts-left .button-inner {\n  -webkit-box-pack: start;\n  -webkit-justify-content: flex-start;\n  -ms-flex-pack: start;\n  justify-content: flex-start; }\n\n.picker-opts-right .button-inner {\n  -webkit-box-pack: end;\n  -webkit-justify-content: flex-end;\n  -ms-flex-pack: end;\n  justify-content: flex-end; }\n\n.picker-above-highlight,\n.picker-below-highlight {\n  display: none;\n  pointer-events: none; }\n\n.picker-wrapper {\n  height: 260px;\n  border-top: 1px solid #dedede;\n  background: #fff; }\n\n.picker-toolbar {\n  display: -webkit-box;\n  display: -webkit-flex;\n  display: -ms-flexbox;\n  display: flex;\n  -webkit-box-pack: end;\n  -webkit-justify-content: flex-end;\n  -ms-flex-pack: end;\n  justify-content: flex-end;\n  height: 44px;\n  background: #fff; }\n\n.hairlines .picker-wrapper,\n.hairlines .picker-toolbar {\n  border-width: 0.55px; }\n\n.picker-button,\n.picker-button.activated {\n  margin: 0;\n  height: 44px;\n  color: #327eff;\n  background: transparent;\n  box-shadow: none; }\n\n.picker-columns {\n  height: 216px;\n  -webkit-perspective: 1800px;\n  perspective: 1800px; }\n\n.picker-col {\n  padding: 0 8px;\n  -webkit-transform-style: preserve-3d;\n  transform-style: preserve-3d; }\n\n.picker-prefix,\n.picker-suffix,\n.picker-opts {\n  top: 77px;\n  font-size: 18px;\n  line-height: 42px;\n  color: #000;\n  -webkit-transform-style: preserve-3d;\n  transform-style: preserve-3d;\n  pointer-events: none; }\n\n.picker-opts ion-button-effect {\n  display: none; }\n\n.picker-opt {\n  margin: 0;\n  padding: 0;\n  font-size: 18px;\n  line-height: 42px;\n  background: transparent;\n  -webkit-transition-timing-function: ease-out;\n  transition-timing-function: ease-out;\n  -webkit-backface-visibility: hidden;\n  backface-visibility: hidden;\n  pointer-events: auto; }\n\n.picker-opt .button-inner {\n  -webkit-transition: 200ms;\n  transition: 200ms; }\n\n.picker-prefix,\n.picker-suffix,\n.picker-opt-selected {\n  font-size: 22px;\n  color: #327eff; }\n\n.picker-above-highlight {\n  position: absolute;\n  top: 0;\n  left: 0;\n  z-index: 10;\n  width: 100%;\n  height: 81px;\n  border-bottom: 1px solid #dedede;\n  background: -webkit-linear-gradient(top, white 20%, rgba(255, 255, 255, 0.7) 100%);\n  background: linear-gradient(to bottom, white 20%, rgba(255, 255, 255, 0.7) 100%);\n  -webkit-transform: translate3d(0, 0, 90px);\n  transform: translate3d(0, 0, 90px); }\n\n.picker-below-highlight {\n  position: absolute;\n  top: 115px;\n  left: 0;\n  z-index: 11;\n  width: 100%;\n  height: 119px;\n  border-top: 1px solid #dedede;\n  background: -webkit-linear-gradient(bottom, white 30%, rgba(255, 255, 255, 0.7) 100%);\n  background: linear-gradient(to top, white 30%, rgba(255, 255, 255, 0.7) 100%);\n  -webkit-transform: translate3d(0, 0, 90px);\n  transform: translate3d(0, 0, 90px); }\n\nion-popover {\n  position: absolute;\n  top: 0;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  z-index: 1000;\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  -webkit-box-pack: center;\n  -webkit-justify-content: center;\n  -ms-flex-pack: center;\n  justify-content: center; }\n\n.popover-wrapper {\n  z-index: 10;\n  opacity: 0; }\n\n.popover-content {\n  position: absolute;\n  z-index: 10;\n  display: -webkit-box;\n  display: -webkit-flex;\n  display: -ms-flexbox;\n  display: flex;\n  overflow: auto;\n  -webkit-box-orient: vertical;\n  -webkit-box-direction: normal;\n  -webkit-flex-direction: column;\n  -ms-flex-direction: column;\n  flex-direction: column; }\n  .popover-content scroll-content {\n    position: relative; }\n\n.popover-content {\n  width: 250px;\n  min-width: 0;\n  min-height: 0;\n  max-height: 90%;\n  border-radius: 2px;\n  color: #000;\n  background: #fafafa;\n  box-shadow: 0 3px 12px 2px rgba(0, 0, 0, 0.3);\n  -webkit-transform-origin: top left;\n  transform-origin: top left; }\n  .popover-content ion-content {\n    background: #fafafa; }\n\n.popover-content .item {\n  background-color: #fafafa; }\n\n.popover-viewport {\n  opacity: 0;\n  -webkit-transition-delay: 100ms;\n  transition-delay: 100ms; }\n\nion-radio {\n  position: relative;\n  display: inline-block; }\n\n.radio-icon {\n  position: relative;\n  top: 0;\n  left: 0;\n  display: block;\n  margin: 0;\n  width: 16px;\n  height: 16px;\n  border-width: 2px;\n  border-style: solid;\n  border-radius: 50%;\n  border-color: #787878; }\n\n.radio-inner {\n  position: absolute;\n  top: 2px;\n  left: 2px;\n  width: 8px;\n  height: 8px;\n  border-radius: 50%;\n  background-color: #327eff;\n  -webkit-transform: scale3d(0, 0, 0);\n  transform: scale3d(0, 0, 0);\n  -webkit-transition: -webkit-transform 280ms cubic-bezier(0.4, 0, 0.2, 1);\n  transition: transform 280ms cubic-bezier(0.4, 0, 0.2, 1); }\n\n.radio-checked {\n  border-color: #327eff; }\n\n.radio-checked .radio-inner {\n  -webkit-transform: scale3d(1, 1, 1);\n  transform: scale3d(1, 1, 1); }\n\n.radio-disabled,\n.item-radio-disabled ion-label {\n  opacity: 0.3;\n  pointer-events: none; }\n\n.item ion-radio {\n  position: static;\n  display: block;\n  margin: 9px 10px 9px 0; }\n  .item ion-radio[item-left] {\n    margin: 11px 36px 10px 4px; }\n\n.item-radio ion-label {\n  margin-left: 0; }\n\n.item-radio-checked ion-label {\n  color: #327eff; }\n\n.item-radio-primary.item-radio-checked ion-label {\n  color: #327eff; }\n\n.radio-primary .radio-checked {\n  border-color: #327eff; }\n\n.radio-primary .radio-inner {\n  background-color: #327eff; }\n\n.item-radio-secondary.item-radio-checked ion-label {\n  color: #32db64; }\n\n.radio-secondary .radio-checked {\n  border-color: #32db64; }\n\n.radio-secondary .radio-inner {\n  background-color: #32db64; }\n\n.item-radio-danger.item-radio-checked ion-label {\n  color: #f53d3d; }\n\n.radio-danger .radio-checked {\n  border-color: #f53d3d; }\n\n.radio-danger .radio-inner {\n  background-color: #f53d3d; }\n\n.item-radio-light.item-radio-checked ion-label {\n  color: #f4f4f4; }\n\n.radio-light .radio-checked {\n  border-color: #f4f4f4; }\n\n.radio-light .radio-inner {\n  background-color: #f4f4f4; }\n\n.item-radio-dark.item-radio-checked ion-label {\n  color: #222; }\n\n.radio-dark .radio-checked {\n  border-color: #222; }\n\n.radio-dark .radio-inner {\n  background-color: #222; }\n\n.item-range .item-inner {\n  overflow: visible; }\n\n.item-range .input-wrapper {\n  overflow: visible;\n  -webkit-box-orient: vertical;\n  -webkit-box-direction: normal;\n  -webkit-flex-direction: column;\n  -ms-flex-direction: column;\n  flex-direction: column; }\n\n.item-range ion-range {\n  width: 100%; }\n  .item-range ion-range ion-label {\n    -webkit-align-self: center;\n    -ms-flex-item-align: center;\n    align-self: center; }\n\nion-range {\n  position: relative;\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  ion-range ion-label {\n    -webkit-box-flex: initial;\n    -webkit-flex: initial;\n    -ms-flex: initial;\n    flex: initial; }\n  ion-range ion-icon {\n    min-height: 2.4rem;\n    font-size: 2.4rem;\n    line-height: 1; }\n\n.range-slider {\n  position: relative;\n  -webkit-box-flex: 1;\n  -webkit-flex: 1;\n  -ms-flex: 1;\n  flex: 1;\n  cursor: pointer; }\n\nion-range {\n  padding: 8px 8px; }\n\n[range-left],\n[range-right] {\n  margin: 0 12px; }\n\n[range-left] {\n  margin-left: 0; }\n\n[range-right] {\n  margin-right: 0; }\n\n.range-has-pin {\n  padding-top: 28px; }\n\n.range-slider {\n  height: 42px; }\n\n.range-bar {\n  position: absolute;\n  top: 21px;\n  left: 0;\n  width: 100%;\n  height: 2px;\n  background: #bdbdbd;\n  pointer-events: none; }\n\n.range-pressed .range-bar-active {\n  will-change: left, right; }\n\n.range-pressed .range-knob-handle {\n  will-change: left; }\n\n.range-bar-active {\n  bottom: 0;\n  width: auto;\n  background: #327eff; }\n\n.range-knob-handle {\n  position: absolute;\n  top: 21px;\n  left: 0%;\n  margin-top: -21px;\n  margin-left: -21px;\n  width: 42px;\n  height: 42px;\n  text-align: center; }\n\n.range-knob {\n  position: absolute;\n  top: 13px;\n  left: 12px;\n  z-index: 2;\n  width: 18px;\n  height: 18px;\n  border-radius: 50%;\n  background: #327eff;\n  -webkit-transform: scale(0.67);\n  transform: scale(0.67);\n  -webkit-transition-duration: 120ms;\n  transition-duration: 120ms;\n  -webkit-transition-property: -webkit-transform, background-color, border;\n  transition-property: transform, background-color, border;\n  -webkit-transition-timing-function: ease;\n  transition-timing-function: ease;\n  pointer-events: none; }\n\n.range-tick {\n  position: absolute;\n  top: 21px;\n  z-index: 1;\n  margin-left: -1px;\n  width: 2px;\n  height: 2px;\n  border-radius: 50%;\n  background: #000;\n  pointer-events: none; }\n\n.range-tick-active {\n  background: #000; }\n\n.range-pin {\n  position: relative;\n  top: -20px;\n  display: inline-block;\n  padding: 8px 0;\n  min-width: 28px;\n  height: 28px;\n  border-radius: 50%;\n  font-size: 12px;\n  text-align: center;\n  color: #fff;\n  background: #327eff;\n  -webkit-transform: translate3d(0, 28px, 0) scale(0.01);\n  transform: translate3d(0, 28px, 0) scale(0.01);\n  -webkit-transition: -webkit-transform 120ms ease, background-color 120ms ease;\n  transition: transform 120ms ease, background-color 120ms ease; }\n  .range-pin::before {\n    position: absolute;\n    top: 3px;\n    left: 50%;\n    z-index: -1;\n    margin-left: -13px;\n    width: 26px;\n    height: 26px;\n    border-radius: 50% 50% 50% 0;\n    background: #327eff;\n    content: \"\";\n    -webkit-transform: rotate(-45deg);\n    transform: rotate(-45deg);\n    -webkit-transition: background-color 120ms ease;\n    transition: background-color 120ms ease; }\n\n.range-knob-pressed .range-pin {\n  -webkit-transform: translate3d(0, 0, 0) scale(1);\n  transform: translate3d(0, 0, 0) scale(1); }\n\nion-range:not(.range-has-pin) .range-knob-pressed .range-knob {\n  -webkit-transform: scale(1);\n  transform: scale(1); }\n\n.range-knob-min .range-knob {\n  border: 2px solid #bdbdbd;\n  background: #fff; }\n\n.range-knob-min .range-pin,\n.range-knob-min .range-pin::before {\n  color: #fff;\n  background: #bdbdbd; }\n\n.range-disabled .range-bar-active {\n  background-color: #bdbdbd; }\n\n.range-disabled .range-knob {\n  outline: 5px solid #fff;\n  background-color: #bdbdbd;\n  -webkit-transform: scale(0.55);\n  transform: scale(0.55); }\n\n.range-primary .range-knob-min .range-knob {\n  border: 2px solid #bdbdbd;\n  background: #fff; }\n\n.range-primary .range-knob-min .range-pin,\n.range-primary .range-knob-min .range-pin::before {\n  color: #fff;\n  background: #bdbdbd; }\n\n.range-primary .range-bar-active,\n.range-primary .range-knob,\n.range-primary .range-pin,\n.range-primary .range-pin::before {\n  background: #327eff; }\n\n.range-secondary .range-knob-min .range-knob {\n  border: 2px solid #bdbdbd;\n  background: #fff; }\n\n.range-secondary .range-knob-min .range-pin,\n.range-secondary .range-knob-min .range-pin::before {\n  color: #fff;\n  background: #bdbdbd; }\n\n.range-secondary .range-bar-active,\n.range-secondary .range-knob,\n.range-secondary .range-pin,\n.range-secondary .range-pin::before {\n  background: #32db64; }\n\n.range-danger .range-knob-min .range-knob {\n  border: 2px solid #bdbdbd;\n  background: #fff; }\n\n.range-danger .range-knob-min .range-pin,\n.range-danger .range-knob-min .range-pin::before {\n  color: #fff;\n  background: #bdbdbd; }\n\n.range-danger .range-bar-active,\n.range-danger .range-knob,\n.range-danger .range-pin,\n.range-danger .range-pin::before {\n  background: #f53d3d; }\n\n.range-light .range-knob-min .range-knob {\n  border: 2px solid #bdbdbd;\n  background: #fff; }\n\n.range-light .range-knob-min .range-pin,\n.range-light .range-knob-min .range-pin::before {\n  color: #fff;\n  background: #bdbdbd; }\n\n.range-light .range-bar-active,\n.range-light .range-knob,\n.range-light .range-pin,\n.range-light .range-pin::before {\n  background: #f4f4f4; }\n\n.range-dark .range-knob-min .range-knob {\n  border: 2px solid #bdbdbd;\n  background: #fff; }\n\n.range-dark .range-knob-min .range-pin,\n.range-dark .range-knob-min .range-pin::before {\n  color: #fff;\n  background: #bdbdbd; }\n\n.range-dark .range-bar-active,\n.range-dark .range-knob,\n.range-dark .range-pin,\n.range-dark .range-pin::before {\n  background: #222; }\n\nion-searchbar {\n  position: relative;\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  width: 100%; }\n\n.searchbar-icon {\n  pointer-events: none; }\n\n.searchbar-input-container {\n  position: relative;\n  display: block;\n  -webkit-flex-shrink: 1;\n  -ms-flex-negative: 1;\n  flex-shrink: 1;\n  width: 100%; }\n\n.searchbar-input {\n  -webkit-appearance: none;\n  -moz-appearance: none;\n  display: block;\n  width: 100%;\n  border: 0;\n  font-family: inherit; }\n\n.searchbar-clear-icon {\n  display: none;\n  margin: 0;\n  padding: 0;\n  min-height: 0; }\n\n.searchbar-has-value.searchbar-has-focus .searchbar-clear-icon {\n  display: block; }\n\nion-searchbar {\n  padding: 8px;\n  background: inherit; }\n\n.searchbar-search-icon {\n  background-image: url(\"data:image/svg+xml;charset=utf-8,<svg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%20512%20512'><path%20fill='%235b5b5b'%20d='M337.509,305.372h-17.501l-6.571-5.486c20.791-25.232,33.922-57.054,33.922-93.257C347.358,127.632,283.896,64,205.135,64C127.452,64,64,127.632,64,206.629s63.452,142.628,142.225,142.628c35.011,0,67.831-13.167,92.991-34.008l6.561,5.487v17.551L415.18,448L448,415.086L337.509,305.372z%20M206.225,305.372c-54.702,0-98.463-43.887-98.463-98.743c0-54.858,43.761-98.742,98.463-98.742c54.7,0,98.462,43.884,98.462,98.742C304.687,261.485,260.925,305.372,206.225,305.372z'/></svg>\");\n  top: 11px;\n  left: 16px;\n  width: 21px;\n  height: 21px; }\n\n.searchbar-md-cancel {\n  top: 0;\n  left: 10px;\n  display: none;\n  margin: 0;\n  width: 21px;\n  height: 100%; }\n\n.searchbar-search-icon,\n.searchbar-md-cancel {\n  position: absolute;\n  background-repeat: no-repeat;\n  background-size: 20px; }\n  .searchbar-search-icon.activated,\n  .searchbar-md-cancel.activated {\n    background-color: transparent; }\n\n.searchbar-input {\n  padding: 6px 55px;\n  height: auto;\n  border-radius: 2px;\n  font-size: 1.6rem;\n  font-weight: 400;\n  line-height: 3rem;\n  color: #141414;\n  background-color: #fff;\n  background-position: 8px center;\n  box-shadow: 0 2px 2px 0 rgba(0, 0, 0, 0.14), 0 3px 1px -2px rgba(0, 0, 0, 0.2), 0 1px 5px 0 rgba(0, 0, 0, 0.12); }\n  .searchbar-input::-moz-placeholder {\n    color: #aeaeae; }\n  .searchbar-input:-ms-input-placeholder {\n    color: #aeaeae; }\n  .searchbar-input::-webkit-input-placeholder {\n    text-indent: 0;\n    color: #aeaeae; }\n\n.searchbar-clear-icon {\n  background-image: url(\"data:image/svg+xml;charset=utf-8,<svg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%20512%20512'><polygon%20fill='%235b5b5b'%20points='405,136.798%20375.202,107%20256,226.202%20136.798,107%20107,136.798%20226.202,256%20107,375.202%20136.798,405%20256,285.798%20375.202,405%20405,375.202%20285.798,256'/></svg>\");\n  position: absolute;\n  top: 0;\n  right: 13px;\n  padding: 0;\n  width: 22px;\n  height: 100%;\n  background-repeat: no-repeat;\n  background-position: center;\n  background-size: 22px; }\n  .searchbar-clear-icon.activated {\n    background-color: transparent; }\n\n.searchbar-has-focus.searchbar-show-cancel .searchbar-search-icon {\n  display: none; }\n\n.searchbar-has-focus.searchbar-show-cancel .searchbar-md-cancel {\n  display: -webkit-inline-box;\n  display: -webkit-inline-flex;\n  display: -ms-inline-flexbox;\n  display: inline-flex; }\n\n.toolbar ion-searchbar {\n  padding: 3px; }\n\n.toolbar .searchbar-md-cancel {\n  left: 14px; }\n\n.searchbar-ios-cancel {\n  display: none; }\n\nion-segment {\n  display: -webkit-box;\n  display: -webkit-flex;\n  display: -ms-flexbox;\n  display: flex;\n  -webkit-box-flex: 1;\n  -webkit-flex: 1;\n  -ms-flex: 1;\n  flex: 1;\n  -webkit-box-align: center;\n  -webkit-align-items: center;\n  -ms-flex-align: center;\n  align-items: center;\n  -webkit-box-pack: center;\n  -webkit-justify-content: center;\n  -ms-flex-pack: center;\n  justify-content: center;\n  width: 100%; }\n\n.segment-button {\n  position: relative;\n  display: block;\n  overflow: hidden;\n  margin-right: 0;\n  margin-left: 0;\n  text-align: center;\n  text-overflow: ellipsis;\n  white-space: nowrap;\n  cursor: pointer; }\n\n.segment-button {\n  -webkit-box-flex: 1;\n  -webkit-flex: 1;\n  -ms-flex: 1;\n  flex: 1;\n  padding: 0 6px;\n  width: 0;\n  height: 4.2rem;\n  border-bottom-width: 2px;\n  border-bottom-style: solid;\n  border-bottom-color: rgba(0, 0, 0, 0.1);\n  font-size: 1.2rem;\n  font-weight: 500;\n  line-height: 4rem;\n  text-transform: uppercase;\n  color: #327eff;\n  background-color: transparent;\n  opacity: 0.7;\n  -webkit-transition: 100ms all linear;\n  transition: 100ms all linear; }\n  .segment-button ion-icon {\n    font-size: 2.6rem;\n    line-height: 4rem; }\n  .segment-button.activated, .segment-button.segment-activated {\n    border-color: #327eff;\n    opacity: 1; }\n\n.segment-button-disabled {\n  opacity: 0.3;\n  pointer-events: none; }\n\n.toolbar ion-segment {\n  margin: 0 auto; }\n\n.toolbar .segment-button.activated,\n.toolbar .segment-button.segment-activated {\n  opacity: 1; }\n\n.segment-primary .segment-button {\n  color: #327eff; }\n  .segment-primary .segment-button.activated, .segment-primary .segment-button.segment-activated {\n    border-color: #327eff;\n    color: #327eff;\n    opacity: 1; }\n\n.segment-secondary .segment-button {\n  color: #32db64; }\n  .segment-secondary .segment-button.activated, .segment-secondary .segment-button.segment-activated {\n    border-color: #32db64;\n    color: #32db64;\n    opacity: 1; }\n\n.segment-danger .segment-button {\n  color: #f53d3d; }\n  .segment-danger .segment-button.activated, .segment-danger .segment-button.segment-activated {\n    border-color: #f53d3d;\n    color: #f53d3d;\n    opacity: 1; }\n\n.segment-light .segment-button {\n  color: #f4f4f4; }\n  .segment-light .segment-button.activated, .segment-light .segment-button.segment-activated {\n    border-color: #f4f4f4;\n    color: #f4f4f4;\n    opacity: 1; }\n\n.segment-dark .segment-button {\n  color: #222; }\n  .segment-dark .segment-button.activated, .segment-dark .segment-button.segment-activated {\n    border-color: #222;\n    color: #222;\n    opacity: 1; }\n\nion-select {\n  display: -webkit-box;\n  display: -webkit-flex;\n  display: -ms-flexbox;\n  display: flex;\n  overflow: hidden;\n  max-width: 45%; }\n\n.select-text {\n  overflow: hidden;\n  -webkit-box-flex: 1;\n  -webkit-flex: 1;\n  -ms-flex: 1;\n  flex: 1;\n  min-width: 16px;\n  font-size: inherit;\n  text-overflow: ellipsis;\n  white-space: nowrap; }\n\n.item-multiple-inputs ion-select {\n  position: relative; }\n\n.select-disabled,\n.item-select-disabled ion-label {\n  opacity: .4;\n  pointer-events: none; }\n\nion-select {\n  padding: 13px 8px 13px 16px; }\n\n.select-placeholder {\n  color: #999; }\n\n.item-select ion-label {\n  margin-left: 0; }\n\n.select-icon {\n  position: relative;\n  width: 12px;\n  height: 19px; }\n\n.select-icon .select-icon-inner {\n  position: absolute;\n  top: 50%;\n  left: 5px;\n  margin-top: -3px;\n  width: 0;\n  height: 0;\n  border-top: 5px solid;\n  border-right: 5px solid transparent;\n  border-left: 5px solid transparent;\n  color: #999;\n  pointer-events: none; }\n\nion-spinner {\n  position: relative;\n  display: inline-block;\n  width: 28px;\n  height: 28px; }\n\nion-spinner svg {\n  position: absolute;\n  top: 0;\n  left: 0;\n  width: 100%;\n  height: 100%;\n  -webkit-transform: translateZ(0);\n  transform: translateZ(0); }\n\nion-spinner.spinner-paused svg {\n  -webkit-animation-play-state: paused;\n  animation-play-state: paused; }\n\n.spinner-ios line,\n.spinner-ios-small line {\n  stroke: #69717d;\n  stroke-width: 4px;\n  stroke-linecap: round; }\n\n.spinner-ios svg,\n.spinner-ios-small svg {\n  -webkit-animation: spinner-fade-out 1s linear infinite;\n  animation: spinner-fade-out 1s linear infinite; }\n\n.spinner-bubbles circle {\n  fill: #000; }\n\n.spinner-bubbles svg {\n  -webkit-animation: spinner-scale-out 1s linear infinite;\n  animation: spinner-scale-out 1s linear infinite; }\n\n.spinner-circles circle {\n  fill: #69717d; }\n\n.spinner-circles svg {\n  -webkit-animation: spinner-fade-out 1s linear infinite;\n  animation: spinner-fade-out 1s linear infinite; }\n\n.spinner-crescent circle {\n  fill: transparent;\n  stroke: #000;\n  stroke-width: 4px;\n  stroke-dasharray: 128px;\n  stroke-dashoffset: 82px; }\n\n.spinner-crescent svg {\n  -webkit-animation: spinner-rotate 1s linear infinite;\n  animation: spinner-rotate 1s linear infinite; }\n\n.spinner-dots circle {\n  fill: #444;\n  stroke-width: 0; }\n\n.spinner-dots svg {\n  -webkit-transform-origin: center;\n  transform-origin: center;\n  -webkit-animation: spinner-dots 1s linear infinite;\n  animation: spinner-dots 1s linear infinite; }\n\n@keyframes spinner-fade-out {\n  0% {\n    opacity: 1; }\n  100% {\n    opacity: 0; } }\n\n@keyframes spinner-scale-out {\n  0% {\n    -webkit-transform: scale(1, 1);\n    transform: scale(1, 1); }\n  100% {\n    -webkit-transform: scale(0, 0);\n    transform: scale(0, 0); } }\n\n@keyframes spinner-rotate {\n  0% {\n    -webkit-transform: rotate(0deg);\n    transform: rotate(0deg); }\n  100% {\n    -webkit-transform: rotate(360deg);\n    transform: rotate(360deg); } }\n\n@keyframes spinner-dots {\n  0% {\n    opacity: .9;\n    -webkit-transform: scale(1, 1);\n    transform: scale(1, 1); }\n  50% {\n    opacity: .3;\n    -webkit-transform: scale(0.4, 0.4);\n    transform: scale(0.4, 0.4); }\n  100% {\n    opacity: .9;\n    -webkit-transform: scale(1, 1);\n    transform: scale(1, 1); } }\n\n.spinner-primary.spinner-ios line,\n.spinner-primary.spinner-ios-small line,\n.spinner-primary.spinner-crescent circle {\n  stroke: #327eff; }\n\n.spinner-primary.spinner-bubbles circle,\n.spinner-primary.spinner-circles circle,\n.spinner-primary.spinner-dots circle {\n  fill: #327eff; }\n\n.spinner-secondary.spinner-ios line,\n.spinner-secondary.spinner-ios-small line,\n.spinner-secondary.spinner-crescent circle {\n  stroke: #32db64; }\n\n.spinner-secondary.spinner-bubbles circle,\n.spinner-secondary.spinner-circles circle,\n.spinner-secondary.spinner-dots circle {\n  fill: #32db64; }\n\n.spinner-danger.spinner-ios line,\n.spinner-danger.spinner-ios-small line,\n.spinner-danger.spinner-crescent circle {\n  stroke: #f53d3d; }\n\n.spinner-danger.spinner-bubbles circle,\n.spinner-danger.spinner-circles circle,\n.spinner-danger.spinner-dots circle {\n  fill: #f53d3d; }\n\n.spinner-light.spinner-ios line,\n.spinner-light.spinner-ios-small line,\n.spinner-light.spinner-crescent circle {\n  stroke: #f4f4f4; }\n\n.spinner-light.spinner-bubbles circle,\n.spinner-light.spinner-circles circle,\n.spinner-light.spinner-dots circle {\n  fill: #f4f4f4; }\n\n.spinner-dark.spinner-ios line,\n.spinner-dark.spinner-ios-small line,\n.spinner-dark.spinner-crescent circle {\n  stroke: #222; }\n\n.spinner-dark.spinner-bubbles circle,\n.spinner-dark.spinner-circles circle,\n.spinner-dark.spinner-dots circle {\n  fill: #222; }\n\n.tab-button {\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  -ms-user-select: none;\n  user-select: none;\n  position: relative;\n  z-index: 0;\n  display: -webkit-box;\n  display: -webkit-flex;\n  display: -ms-flexbox;\n  display: flex;\n  overflow: hidden;\n  -webkit-box-flex: 1;\n  -webkit-flex: 1;\n  -ms-flex: 1;\n  flex: 1;\n  -webkit-box-orient: vertical;\n  -webkit-box-direction: normal;\n  -webkit-flex-direction: column;\n  -ms-flex-direction: column;\n  flex-direction: column;\n  -webkit-box-align: center;\n  -webkit-align-items: center;\n  -ms-flex-align: center;\n  align-items: center;\n  -webkit-align-self: center;\n  -ms-flex-item-align: center;\n  align-self: center;\n  -webkit-box-pack: center;\n  -webkit-justify-content: center;\n  -ms-flex-pack: center;\n  justify-content: center;\n  margin: 0;\n  border: 0;\n  border-radius: 0;\n  text-align: center;\n  text-decoration: none;\n  background: none;\n  cursor: pointer; }\n\n.tab-disabled {\n  pointer-events: none; }\n  .tab-disabled ion-badge,\n  .tab-disabled ion-icon,\n  .tab-disabled span {\n    opacity: .4; }\n\n.tab-hidden {\n  display: none; }\n\n.tab-button-text {\n  margin-top: 3px;\n  margin-bottom: 2px; }\n\n.tab-button-text,\n.tab-button-icon {\n  display: none;\n  overflow: hidden;\n  -webkit-align-self: center;\n  -ms-flex-item-align: center;\n  align-self: center;\n  min-width: 26px;\n  max-width: 100%;\n  text-overflow: ellipsis;\n  white-space: nowrap; }\n\n.has-icon .tab-button-icon,\n.has-title .tab-button-text {\n  display: block; }\n\n.has-title-only .tab-button-text {\n  white-space: normal; }\n\ntab-highlight {\n  display: none; }\n\n[tabsLayout=icon-bottom] .tab-button .tab-button-icon {\n  -webkit-box-ordinal-group: 11;\n  -webkit-order: 10;\n  -ms-flex-order: 10;\n  order: 10; }\n\n[tabsLayout=icon-left] .tab-button {\n  -webkit-box-orient: horizontal;\n  -webkit-box-direction: normal;\n  -webkit-flex-direction: row;\n  -ms-flex-direction: row;\n  flex-direction: row; }\n  [tabsLayout=icon-left] .tab-button .tab-button-icon {\n    padding-right: 8px;\n    text-align: right; }\n\n[tabsLayout=icon-right] .tab-button {\n  -webkit-box-orient: horizontal;\n  -webkit-box-direction: normal;\n  -webkit-flex-direction: row;\n  -ms-flex-direction: row;\n  flex-direction: row; }\n  [tabsLayout=icon-right] .tab-button .tab-button-icon {\n    -webkit-box-ordinal-group: 11;\n    -webkit-order: 10;\n    -ms-flex-order: 10;\n    order: 10;\n    padding-left: 8px;\n    text-align: left; }\n\n[tabsLayout=icon-hide] .tab-button-icon {\n  display: none; }\n\n[tabsLayout=title-hide] .tab-button-text {\n  display: none; }\n\n.tab-badge {\n  position: absolute;\n  top: 6%;\n  right: 4%;\n  right: calc(50% - 50px);\n  padding: 1px 6px;\n  height: auto;\n  font-size: 12px;\n  line-height: 16px; }\n\n.has-icon .tab-badge {\n  right: calc(50% - 30px); }\n\n[tabsLayout=icon-bottom] .tab-badge,\n[tabsLayout=icon-left] .tab-badge,\n[tabsLayout=icon-right] .tab-badge {\n  right: calc(50% - 50px); }\n\nion-tabbar {\n  background: #f8f8f8; }\n\n.tab-button {\n  padding: 8px 0 10px 0;\n  min-height: 5.6rem;\n  font-weight: normal;\n  color: rgba(140, 140, 140, 0.7); }\n  .tab-button[aria-selected=true] {\n    padding: 6px 0 10px 0;\n    font-size: 1.4rem;\n    color: #327eff; }\n\n.tab-button-text {\n  margin: 6px 0;\n  text-transform: none;\n  -webkit-transform: scale(0.85);\n  transform: scale(0.85);\n  -webkit-transform-origin: bottom center;\n  transform-origin: bottom center;\n  -webkit-transition: -webkit-transform 200ms ease-in-out;\n  transition: transform 200ms ease-in-out; }\n\n.tab-button[aria-selected=true] .tab-button-text {\n  margin: 7px 0;\n  -webkit-transform: scale(1);\n  transform: scale(1); }\n\n.tab-button-icon {\n  min-width: 7.4rem;\n  font-size: 2.4rem; }\n\n[tabsLayout=icon-top] .has-icon .tab-button-text {\n  margin-bottom: 0; }\n\n[tabsLayout=icon-bottom] .tab-button {\n  padding-top: 8px;\n  padding-bottom: 8px; }\n  [tabsLayout=icon-bottom] .tab-button .tab-button-text {\n    margin-top: 0; }\n\n[tabsLayout=icon-right] .tab-button,\n[tabsLayout=icon-left] .tab-button {\n  padding-bottom: 10px; }\n  [tabsLayout=icon-right] .tab-button ion-icon,\n  [tabsLayout=icon-left] .tab-button ion-icon {\n    min-width: 24px; }\n\n[tabsLayout=icon-hide] .tab-button,\n[tabsLayout=title-hide] .tab-button,\n.tab-button.icon-only,\n.tab-button.has-title-only {\n  padding: 6px 10px; }\n\n[tabsHighlight=true] tab-highlight {\n  position: absolute;\n  bottom: 0;\n  left: 0;\n  display: block;\n  width: 1px;\n  height: 2px;\n  background: #327eff;\n  -webkit-transform: translateZ(0);\n  transform: translateZ(0);\n  -webkit-transform-origin: 0 0;\n  transform-origin: 0 0; }\n  [tabsHighlight=true] tab-highlight.animate {\n    -webkit-transition-duration: 300ms;\n    transition-duration: 300ms; }\n\n[tabsHighlight=true][tabsPlacement=bottom] tab-highlight {\n  top: 0; }\n\n.tabs-primary ion-tabbar {\n  background-color: #327eff; }\n  .tabs-primary ion-tabbar .tab-button {\n    color: rgba(255, 255, 255, 0.7); }\n  .tabs-primary ion-tabbar .tab-button:hover:not(.disable-hover),\n  .tabs-primary ion-tabbar .tab-button[aria-selected=true] {\n    color: #fff; }\n  .tabs-primary ion-tabbar tab-highlight {\n    background: #fff; }\n\n.tabs-secondary ion-tabbar {\n  background-color: #32db64; }\n  .tabs-secondary ion-tabbar .tab-button {\n    color: rgba(255, 255, 255, 0.7); }\n  .tabs-secondary ion-tabbar .tab-button:hover:not(.disable-hover),\n  .tabs-secondary ion-tabbar .tab-button[aria-selected=true] {\n    color: #fff; }\n  .tabs-secondary ion-tabbar tab-highlight {\n    background: #fff; }\n\n.tabs-danger ion-tabbar {\n  background-color: #f53d3d; }\n  .tabs-danger ion-tabbar .tab-button {\n    color: rgba(255, 255, 255, 0.7); }\n  .tabs-danger ion-tabbar .tab-button:hover:not(.disable-hover),\n  .tabs-danger ion-tabbar .tab-button[aria-selected=true] {\n    color: #fff; }\n  .tabs-danger ion-tabbar tab-highlight {\n    background: #fff; }\n\n.tabs-light ion-tabbar {\n  background-color: #f4f4f4; }\n  .tabs-light ion-tabbar .tab-button {\n    color: rgba(0, 0, 0, 0.7); }\n  .tabs-light ion-tabbar .tab-button:hover:not(.disable-hover),\n  .tabs-light ion-tabbar .tab-button[aria-selected=true] {\n    color: #000; }\n  .tabs-light ion-tabbar tab-highlight {\n    background: #000; }\n\n.tabs-dark ion-tabbar {\n  background-color: #222; }\n  .tabs-dark ion-tabbar .tab-button {\n    color: rgba(255, 255, 255, 0.7); }\n  .tabs-dark ion-tabbar .tab-button:hover:not(.disable-hover),\n  .tabs-dark ion-tabbar .tab-button[aria-selected=true] {\n    color: #fff; }\n  .tabs-dark ion-tabbar tab-highlight {\n    background: #fff; }\n\nion-toggle {\n  position: relative; }\n\n.toggle-icon {\n  position: relative;\n  display: block;\n  width: 36px;\n  height: 14px;\n  border-radius: 14px;\n  background-color: #dedede;\n  -webkit-transition: background-color 300ms;\n  transition: background-color 300ms;\n  pointer-events: none; }\n\n.toggle-inner {\n  position: absolute;\n  top: -3px;\n  left: 0;\n  width: 20px;\n  height: 20px;\n  border-radius: 50%;\n  background-color: #fff;\n  box-shadow: 0 2px 2px 0 rgba(0, 0, 0, 0.14), 0 3px 1px -2px rgba(0, 0, 0, 0.2), 0 1px 5px 0 rgba(0, 0, 0, 0.12);\n  -webkit-transition-duration: 300ms;\n  transition-duration: 300ms;\n  -webkit-transition-property: -webkit-transform, background-color;\n  transition-property: transform, background-color; }\n\n.toggle-checked {\n  background-color: #b2ceff; }\n\n.toggle-checked .toggle-inner {\n  background-color: #327eff;\n  -webkit-transform: translate3d(16px, 0, 0);\n  transform: translate3d(16px, 0, 0); }\n\n.toggle-disabled,\n.item-toggle-disabled ion-label {\n  opacity: 0.3;\n  pointer-events: none; }\n\n.toggle-disabled ion-radio {\n  opacity: 0.3; }\n\n.item ion-toggle {\n  margin: 0;\n  padding: 12px 8px 12px 16px;\n  cursor: pointer; }\n  .item ion-toggle[item-left] {\n    padding: 12px 18px 12px 2px; }\n\n.item-toggle ion-label {\n  margin-left: 0; }\n\n.toggle-primary .toggle-checked {\n  background-color: #b2ceff; }\n\n.toggle-primary .toggle-checked .toggle-inner {\n  background-color: #327eff; }\n\n.toggle-secondary .toggle-checked {\n  background-color: #9eeeb6; }\n\n.toggle-secondary .toggle-checked .toggle-inner {\n  background-color: #32db64; }\n\n.toggle-danger .toggle-checked {\n  background-color: #fbb6b6; }\n\n.toggle-danger .toggle-checked .toggle-inner {\n  background-color: #f53d3d; }\n\n.toggle-light .toggle-checked {\n  background-color: white; }\n\n.toggle-light .toggle-checked .toggle-inner {\n  background-color: #f4f4f4; }\n\n.toggle-dark .toggle-checked {\n  background-color: #626262; }\n\n.toggle-dark .toggle-checked .toggle-inner {\n  background-color: #222; }\n\nion-toast {\n  position: absolute;\n  top: 0;\n  left: 0;\n  z-index: 1000;\n  display: block;\n  width: 100%;\n  height: 100%;\n  pointer-events: none; }\n\n.toast-container {\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  pointer-events: auto; }\n\n.toast-button {\n  padding: 19px 16px 17px;\n  font-size: 1.5rem; }\n\n.toast-message {\n  -webkit-box-flex: 1;\n  -webkit-flex: 1;\n  -ms-flex: 1;\n  flex: 1; }\n\n.toast-wrapper {\n  position: absolute;\n  right: 0;\n  left: 0;\n  z-index: 10;\n  display: block;\n  margin: auto;\n  width: 100%;\n  max-width: 700px;\n  background: #333; }\n  .toast-wrapper.toast-top {\n    top: 0;\n    -webkit-transform: translate3d(0, -100%, 0);\n    transform: translate3d(0, -100%, 0); }\n  .toast-wrapper.toast-bottom {\n    bottom: 0;\n    -webkit-transform: translate3d(0, 100%, 0);\n    transform: translate3d(0, 100%, 0); }\n  .toast-wrapper.toast-middle {\n    opacity: .01; }\n\n.toast-message {\n  padding: 19px 16px 17px;\n  font-size: 1.5rem;\n  color: #fff; }\n\n.toolbar {\n  display: -webkit-box;\n  display: -webkit-flex;\n  display: -ms-flexbox;\n  display: flex;\n  overflow: hidden;\n  -webkit-box-orient: horizontal;\n  -webkit-box-direction: normal;\n  -webkit-flex-direction: row;\n  -ms-flex-direction: row;\n  flex-direction: row;\n  -webkit-box-align: center;\n  -webkit-align-items: center;\n  -ms-flex-align: center;\n  align-items: center;\n  -webkit-box-pack: justify;\n  -webkit-justify-content: space-between;\n  -ms-flex-pack: justify;\n  justify-content: space-between;\n  width: 100%; }\n\n.toolbar-background {\n  position: absolute;\n  top: 0;\n  left: 0;\n  z-index: -1;\n  width: 100%;\n  height: 100%;\n  border: 0;\n  -webkit-transform: translateZ(0);\n  transform: translateZ(0);\n  pointer-events: none; }\n\nion-title {\n  display: -webkit-box;\n  display: -webkit-flex;\n  display: -ms-flexbox;\n  display: flex;\n  -webkit-box-flex: 1;\n  -webkit-flex: 1;\n  -ms-flex: 1;\n  flex: 1;\n  -webkit-box-align: center;\n  -webkit-align-items: center;\n  -ms-flex-align: center;\n  align-items: center;\n  -webkit-transform: translateZ(0);\n  transform: translateZ(0); }\n\n.toolbar-title {\n  display: block;\n  overflow: hidden;\n  width: 100%;\n  text-overflow: ellipsis;\n  white-space: nowrap; }\n\nion-buttons {\n  display: block;\n  margin: 0 .2rem;\n  -webkit-transform: translateZ(0);\n  transform: translateZ(0);\n  pointer-events: none; }\n\nion-buttons button,\nion-buttons a,\nion-buttons input,\nion-buttons textarea,\nion-buttons div {\n  pointer-events: auto; }\n\n.toolbar[transparent] .toolbar-background {\n  border-color: transparent;\n  background: transparent; }\n\nion-buttons,\n.bar-button-menutoggle {\n  z-index: 99;\n  -webkit-transform: translateZ(0);\n  transform: translateZ(0); }\n\nion-navbar.toolbar {\n  display: -webkit-box;\n  display: -webkit-flex;\n  display: -ms-flexbox;\n  display: flex;\n  opacity: 0;\n  -webkit-transform: translateZ(0);\n  transform: translateZ(0); }\n  ion-navbar.toolbar.show-navbar {\n    opacity: 1; }\n\n.bar-button {\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  -ms-user-select: none;\n  user-select: none;\n  -webkit-appearance: none;\n  -moz-appearance: none;\n  position: relative;\n  display: inline-block;\n  margin: 0;\n  padding: 0;\n  line-height: 1;\n  text-align: center;\n  text-overflow: ellipsis;\n  text-transform: none;\n  white-space: nowrap;\n  cursor: pointer;\n  vertical-align: top;\n  vertical-align: -webkit-baseline-middle; }\n\n.bar-button::after {\n  position: absolute;\n  top: -7px;\n  right: -2px;\n  bottom: -6px;\n  left: -2px;\n  content: \"\"; }\n\n.bar-button-menutoggle {\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.back-button {\n  display: none; }\n  .back-button.show-back-button {\n    display: inline-block; }\n\n.back-button-text {\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.toolbar {\n  padding: 4px;\n  min-height: 5.6rem; }\n\n.toolbar-background {\n  border-color: #b2b2b2;\n  background: #f8f8f8; }\n\nion-header::after,\n[tabsPlacement=\"top\"] > ion-tabbar::after,\nion-footer::before,\n[tabsPlacement=\"bottom\"] > ion-tabbar::before {\n  position: absolute;\n  bottom: -5px;\n  left: 0;\n  width: 100%;\n  height: 5px;\n  background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAHBAMAAADzDtBxAAAAD1BMVEUAAAAAAAAAAAAAAAAAAABPDueNAAAABXRSTlMUCS0gBIh/TXEAAAAaSURBVAjXYxCEAgY4UIICBmMogMsgFLtAAQCNSwXZKOdPxgAAAABJRU5ErkJggg==);\n  background-repeat: repeat-x;\n  background-position: 0 -2px;\n  content: \"\"; }\n\nion-footer::before,\n[tabsPlacement=\"bottom\"] > ion-tabbar::before {\n  top: -2px;\n  bottom: auto;\n  height: 2px;\n  background-position: 0 0; }\n\nion-header[no-shadow]::after,\nion-footer[no-shadow]::before,\n[tabsPlacement=\"top\"][no-shadow] > ion-tabbar::after,\n[tabsPlacement=\"bottom\"][no-shadow] > ion-tabbar::before {\n  display: none; }\n\n.toolbar-content {\n  -webkit-box-flex: 1;\n  -webkit-flex: 1;\n  -ms-flex: 1;\n  flex: 1;\n  -webkit-box-ordinal-group: 4;\n  -webkit-order: 3;\n  -ms-flex-order: 3;\n  order: 3;\n  min-width: 0;\n  max-width: 100%; }\n\n.toolbar-title {\n  padding: 0 12px;\n  font-size: 2rem;\n  font-weight: 500;\n  color: #424242; }\n\nion-buttons {\n  -webkit-box-ordinal-group: 5;\n  -webkit-order: 4;\n  -ms-flex-order: 4;\n  order: 4;\n  -webkit-transform: translateZ(0);\n  transform: translateZ(0); }\n\nion-buttons[left] {\n  -webkit-box-ordinal-group: 3;\n  -webkit-order: 2;\n  -ms-flex-order: 2;\n  order: 2; }\n\nion-buttons[left] .bar-button:first-child {\n  margin-left: 0; }\n\nion-buttons[end] {\n  -webkit-box-ordinal-group: 6;\n  -webkit-order: 5;\n  -ms-flex-order: 5;\n  order: 5;\n  text-align: right; }\n\nion-buttons[right] {\n  -webkit-box-ordinal-group: 7;\n  -webkit-order: 6;\n  -ms-flex-order: 6;\n  order: 6;\n  text-align: right; }\n\n.bar-button {\n  margin-top: 0;\n  margin-right: .2rem;\n  margin-bottom: 0;\n  margin-left: .2rem;\n  padding: 0 5px;\n  height: 32px;\n  border: 0;\n  border-radius: 2px;\n  font-size: 1.4rem;\n  font-weight: 500;\n  text-transform: uppercase; }\n\n.bar-button-solid,\n.bar-button-outline {\n  overflow: hidden; }\n\n.bar-button-outline {\n  border-width: 1px;\n  border-style: solid;\n  border-color: #424242;\n  color: #424242;\n  background-color: transparent; }\n  .bar-button-outline:hover:not(.disable-hover) {\n    opacity: .4; }\n  .bar-button-outline.activated {\n    background-color: transparent; }\n  .bar-button-outline ion-button-effect {\n    background-color: #424242; }\n\n.bar-button-solid {\n  color: #fff;\n  background-color: #424242; }\n  .bar-button-solid:hover:not(.disable-hover) {\n    color: #fff; }\n  .bar-button-solid.activated {\n    color: #fff;\n    background-color: #515151; }\n\n.bar-button-icon-left ion-icon {\n  padding-right: .3em;\n  font-size: 1.4em;\n  line-height: .67;\n  pointer-events: none; }\n\n.bar-button-icon-right ion-icon {\n  padding-left: .4em;\n  font-size: 1.4em;\n  line-height: .67;\n  pointer-events: none; }\n\n.bar-button[icon-only] {\n  padding: 0; }\n  .bar-button[icon-only] ion-icon {\n    padding: 0 .1em;\n    min-width: 28px;\n    font-size: 1.8em;\n    line-height: .67;\n    pointer-events: none; }\n\n.back-button {\n  margin: 0 6px;\n  min-width: 44px;\n  box-shadow: none; }\n\n.back-button-icon {\n  margin: 0;\n  padding: 0 6px;\n  font-size: 2.4rem;\n  font-weight: normal;\n  text-align: left; }\n\n.bar-button-menutoggle {\n  -webkit-box-ordinal-group: 2;\n  -webkit-order: 1;\n  -ms-flex-order: 1;\n  order: 1;\n  margin: 0 6px;\n  padding: 0 2px;\n  min-width: 44px; }\n  .bar-button-menutoggle ion-icon {\n    padding: 0 6px;\n    font-size: 2.4rem; }\n\n.bar-button-menutoggle[end],\n.bar-button-menutoggle[right] {\n  -webkit-box-ordinal-group: 8;\n  -webkit-order: 7;\n  -ms-flex-order: 7;\n  order: 7;\n  margin: 0 2px;\n  min-width: 28px; }\n\n.bar-button-clear-default,\n.bar-button-default {\n  color: #424242;\n  background-color: transparent; }\n  .bar-button-clear-default:hover:not(.disable-hover),\n  .bar-button-default:hover:not(.disable-hover) {\n    color: #424242; }\n\n.bar-button-clear-clear,\n.bar-button-clear {\n  color: #424242;\n  background-color: transparent; }\n  .bar-button-clear-clear:hover:not(.disable-hover),\n  .bar-button-clear:hover:not(.disable-hover) {\n    color: #424242; }\n\n.toolbar-primary .toolbar-background {\n  background: #327eff; }\n\n.toolbar-primary .bar-button-clear,\n.toolbar-primary .bar-button-default,\n.toolbar-primary .bar-button-outline,\n.toolbar-primary .toolbar-title {\n  color: #fff; }\n\n.toolbar-primary .bar-button-clear ion-button-effect,\n.toolbar-primary .bar-button-default ion-button-effect,\n.toolbar-primary .bar-button-outline ion-button-effect {\n  background-color: #fff; }\n\n.toolbar-primary .bar-button-outline {\n  border-color: #fff; }\n\n.toolbar-primary .bar-button-clear-primary,\n.toolbar-primary .bar-button-primary {\n  color: #327eff;\n  background-color: transparent; }\n  .toolbar-primary .bar-button-clear-primary:hover:not(.disable-hover),\n  .toolbar-primary .bar-button-primary:hover:not(.disable-hover) {\n    color: #327eff; }\n\n.toolbar-primary .bar-button-outline-primary {\n  border-color: #2e74eb;\n  color: #2e74eb;\n  background-color: transparent; }\n  .toolbar-primary .bar-button-outline-primary.activated {\n    background-color: transparent; }\n  .toolbar-primary .bar-button-outline-primary ion-button-effect {\n    background-color: #2e74eb; }\n\n.toolbar-primary .bar-button-solid-primary {\n  color: #fff;\n  background-color: #327eff; }\n  .toolbar-primary .bar-button-solid-primary.activated {\n    color: #fff;\n    background-color: #2e74eb; }\n\n.toolbar-primary .bar-button-clear-secondary,\n.toolbar-primary .bar-button-secondary {\n  color: #32db64;\n  background-color: transparent; }\n  .toolbar-primary .bar-button-clear-secondary:hover:not(.disable-hover),\n  .toolbar-primary .bar-button-secondary:hover:not(.disable-hover) {\n    color: #32db64; }\n\n.toolbar-primary .bar-button-outline-secondary {\n  border-color: #2ec95c;\n  color: #2ec95c;\n  background-color: transparent; }\n  .toolbar-primary .bar-button-outline-secondary.activated {\n    background-color: transparent; }\n  .toolbar-primary .bar-button-outline-secondary ion-button-effect {\n    background-color: #2ec95c; }\n\n.toolbar-primary .bar-button-solid-secondary {\n  color: #fff;\n  background-color: #32db64; }\n  .toolbar-primary .bar-button-solid-secondary.activated {\n    color: #fff;\n    background-color: #2ec95c; }\n\n.toolbar-primary .bar-button-clear-danger,\n.toolbar-primary .bar-button-danger {\n  color: #f53d3d;\n  background-color: transparent; }\n  .toolbar-primary .bar-button-clear-danger:hover:not(.disable-hover),\n  .toolbar-primary .bar-button-danger:hover:not(.disable-hover) {\n    color: #f53d3d; }\n\n.toolbar-primary .bar-button-outline-danger {\n  border-color: #e13838;\n  color: #e13838;\n  background-color: transparent; }\n  .toolbar-primary .bar-button-outline-danger.activated {\n    background-color: transparent; }\n  .toolbar-primary .bar-button-outline-danger ion-button-effect {\n    background-color: #e13838; }\n\n.toolbar-primary .bar-button-solid-danger {\n  color: #fff;\n  background-color: #f53d3d; }\n  .toolbar-primary .bar-button-solid-danger.activated {\n    color: #fff;\n    background-color: #e13838; }\n\n.toolbar-primary .bar-button-clear-light,\n.toolbar-primary .bar-button-light {\n  color: #f4f4f4;\n  background-color: transparent; }\n  .toolbar-primary .bar-button-clear-light:hover:not(.disable-hover),\n  .toolbar-primary .bar-button-light:hover:not(.disable-hover) {\n    color: #f4f4f4; }\n\n.toolbar-primary .bar-button-outline-light {\n  border-color: #e0e0e0;\n  color: #e0e0e0;\n  background-color: transparent; }\n  .toolbar-primary .bar-button-outline-light.activated {\n    background-color: transparent; }\n  .toolbar-primary .bar-button-outline-light ion-button-effect {\n    background-color: #e0e0e0; }\n\n.toolbar-primary .bar-button-solid-light {\n  color: #000;\n  background-color: #f4f4f4; }\n  .toolbar-primary .bar-button-solid-light.activated {\n    color: #000;\n    background-color: #e0e0e0; }\n\n.toolbar-primary .bar-button-clear-dark,\n.toolbar-primary .bar-button-dark {\n  color: #222;\n  background-color: transparent; }\n  .toolbar-primary .bar-button-clear-dark:hover:not(.disable-hover),\n  .toolbar-primary .bar-button-dark:hover:not(.disable-hover) {\n    color: #222; }\n\n.toolbar-primary .bar-button-outline-dark {\n  border-color: #343434;\n  color: #343434;\n  background-color: transparent; }\n  .toolbar-primary .bar-button-outline-dark.activated {\n    background-color: transparent; }\n  .toolbar-primary .bar-button-outline-dark ion-button-effect {\n    background-color: #343434; }\n\n.toolbar-primary .bar-button-solid-dark {\n  color: #fff;\n  background-color: #222; }\n  .toolbar-primary .bar-button-solid-dark.activated {\n    color: #fff;\n    background-color: #343434; }\n\n.bar-button-clear-primary,\n.bar-button-primary {\n  color: #327eff;\n  background-color: transparent; }\n  .bar-button-clear-primary:hover:not(.disable-hover),\n  .bar-button-primary:hover:not(.disable-hover) {\n    color: #327eff; }\n\n.bar-button-outline-primary {\n  border-color: #2e74eb;\n  color: #2e74eb;\n  background-color: transparent; }\n  .bar-button-outline-primary.activated {\n    background-color: transparent; }\n  .bar-button-outline-primary ion-button-effect {\n    background-color: #2e74eb; }\n\n.bar-button-solid-primary {\n  color: #fff;\n  background-color: #327eff; }\n  .bar-button-solid-primary.activated {\n    color: #fff;\n    background-color: #2e74eb; }\n\n.toolbar-secondary .toolbar-background {\n  background: #32db64; }\n\n.toolbar-secondary .bar-button-clear,\n.toolbar-secondary .bar-button-default,\n.toolbar-secondary .bar-button-outline,\n.toolbar-secondary .toolbar-title {\n  color: #fff; }\n\n.toolbar-secondary .bar-button-clear ion-button-effect,\n.toolbar-secondary .bar-button-default ion-button-effect,\n.toolbar-secondary .bar-button-outline ion-button-effect {\n  background-color: #fff; }\n\n.toolbar-secondary .bar-button-outline {\n  border-color: #fff; }\n\n.toolbar-secondary .bar-button-clear-primary,\n.toolbar-secondary .bar-button-primary {\n  color: #327eff;\n  background-color: transparent; }\n  .toolbar-secondary .bar-button-clear-primary:hover:not(.disable-hover),\n  .toolbar-secondary .bar-button-primary:hover:not(.disable-hover) {\n    color: #327eff; }\n\n.toolbar-secondary .bar-button-outline-primary {\n  border-color: #2e74eb;\n  color: #2e74eb;\n  background-color: transparent; }\n  .toolbar-secondary .bar-button-outline-primary.activated {\n    background-color: transparent; }\n  .toolbar-secondary .bar-button-outline-primary ion-button-effect {\n    background-color: #2e74eb; }\n\n.toolbar-secondary .bar-button-solid-primary {\n  color: #fff;\n  background-color: #327eff; }\n  .toolbar-secondary .bar-button-solid-primary.activated {\n    color: #fff;\n    background-color: #2e74eb; }\n\n.toolbar-secondary .bar-button-clear-secondary,\n.toolbar-secondary .bar-button-secondary {\n  color: #32db64;\n  background-color: transparent; }\n  .toolbar-secondary .bar-button-clear-secondary:hover:not(.disable-hover),\n  .toolbar-secondary .bar-button-secondary:hover:not(.disable-hover) {\n    color: #32db64; }\n\n.toolbar-secondary .bar-button-outline-secondary {\n  border-color: #2ec95c;\n  color: #2ec95c;\n  background-color: transparent; }\n  .toolbar-secondary .bar-button-outline-secondary.activated {\n    background-color: transparent; }\n  .toolbar-secondary .bar-button-outline-secondary ion-button-effect {\n    background-color: #2ec95c; }\n\n.toolbar-secondary .bar-button-solid-secondary {\n  color: #fff;\n  background-color: #32db64; }\n  .toolbar-secondary .bar-button-solid-secondary.activated {\n    color: #fff;\n    background-color: #2ec95c; }\n\n.toolbar-secondary .bar-button-clear-danger,\n.toolbar-secondary .bar-button-danger {\n  color: #f53d3d;\n  background-color: transparent; }\n  .toolbar-secondary .bar-button-clear-danger:hover:not(.disable-hover),\n  .toolbar-secondary .bar-button-danger:hover:not(.disable-hover) {\n    color: #f53d3d; }\n\n.toolbar-secondary .bar-button-outline-danger {\n  border-color: #e13838;\n  color: #e13838;\n  background-color: transparent; }\n  .toolbar-secondary .bar-button-outline-danger.activated {\n    background-color: transparent; }\n  .toolbar-secondary .bar-button-outline-danger ion-button-effect {\n    background-color: #e13838; }\n\n.toolbar-secondary .bar-button-solid-danger {\n  color: #fff;\n  background-color: #f53d3d; }\n  .toolbar-secondary .bar-button-solid-danger.activated {\n    color: #fff;\n    background-color: #e13838; }\n\n.toolbar-secondary .bar-button-clear-light,\n.toolbar-secondary .bar-button-light {\n  color: #f4f4f4;\n  background-color: transparent; }\n  .toolbar-secondary .bar-button-clear-light:hover:not(.disable-hover),\n  .toolbar-secondary .bar-button-light:hover:not(.disable-hover) {\n    color: #f4f4f4; }\n\n.toolbar-secondary .bar-button-outline-light {\n  border-color: #e0e0e0;\n  color: #e0e0e0;\n  background-color: transparent; }\n  .toolbar-secondary .bar-button-outline-light.activated {\n    background-color: transparent; }\n  .toolbar-secondary .bar-button-outline-light ion-button-effect {\n    background-color: #e0e0e0; }\n\n.toolbar-secondary .bar-button-solid-light {\n  color: #000;\n  background-color: #f4f4f4; }\n  .toolbar-secondary .bar-button-solid-light.activated {\n    color: #000;\n    background-color: #e0e0e0; }\n\n.toolbar-secondary .bar-button-clear-dark,\n.toolbar-secondary .bar-button-dark {\n  color: #222;\n  background-color: transparent; }\n  .toolbar-secondary .bar-button-clear-dark:hover:not(.disable-hover),\n  .toolbar-secondary .bar-button-dark:hover:not(.disable-hover) {\n    color: #222; }\n\n.toolbar-secondary .bar-button-outline-dark {\n  border-color: #343434;\n  color: #343434;\n  background-color: transparent; }\n  .toolbar-secondary .bar-button-outline-dark.activated {\n    background-color: transparent; }\n  .toolbar-secondary .bar-button-outline-dark ion-button-effect {\n    background-color: #343434; }\n\n.toolbar-secondary .bar-button-solid-dark {\n  color: #fff;\n  background-color: #222; }\n  .toolbar-secondary .bar-button-solid-dark.activated {\n    color: #fff;\n    background-color: #343434; }\n\n.bar-button-clear-secondary,\n.bar-button-secondary {\n  color: #32db64;\n  background-color: transparent; }\n  .bar-button-clear-secondary:hover:not(.disable-hover),\n  .bar-button-secondary:hover:not(.disable-hover) {\n    color: #32db64; }\n\n.bar-button-outline-secondary {\n  border-color: #2ec95c;\n  color: #2ec95c;\n  background-color: transparent; }\n  .bar-button-outline-secondary.activated {\n    background-color: transparent; }\n  .bar-button-outline-secondary ion-button-effect {\n    background-color: #2ec95c; }\n\n.bar-button-solid-secondary {\n  color: #fff;\n  background-color: #32db64; }\n  .bar-button-solid-secondary.activated {\n    color: #fff;\n    background-color: #2ec95c; }\n\n.toolbar-danger .toolbar-background {\n  background: #f53d3d; }\n\n.toolbar-danger .bar-button-clear,\n.toolbar-danger .bar-button-default,\n.toolbar-danger .bar-button-outline,\n.toolbar-danger .toolbar-title {\n  color: #fff; }\n\n.toolbar-danger .bar-button-clear ion-button-effect,\n.toolbar-danger .bar-button-default ion-button-effect,\n.toolbar-danger .bar-button-outline ion-button-effect {\n  background-color: #fff; }\n\n.toolbar-danger .bar-button-outline {\n  border-color: #fff; }\n\n.toolbar-danger .bar-button-clear-primary,\n.toolbar-danger .bar-button-primary {\n  color: #327eff;\n  background-color: transparent; }\n  .toolbar-danger .bar-button-clear-primary:hover:not(.disable-hover),\n  .toolbar-danger .bar-button-primary:hover:not(.disable-hover) {\n    color: #327eff; }\n\n.toolbar-danger .bar-button-outline-primary {\n  border-color: #2e74eb;\n  color: #2e74eb;\n  background-color: transparent; }\n  .toolbar-danger .bar-button-outline-primary.activated {\n    background-color: transparent; }\n  .toolbar-danger .bar-button-outline-primary ion-button-effect {\n    background-color: #2e74eb; }\n\n.toolbar-danger .bar-button-solid-primary {\n  color: #fff;\n  background-color: #327eff; }\n  .toolbar-danger .bar-button-solid-primary.activated {\n    color: #fff;\n    background-color: #2e74eb; }\n\n.toolbar-danger .bar-button-clear-secondary,\n.toolbar-danger .bar-button-secondary {\n  color: #32db64;\n  background-color: transparent; }\n  .toolbar-danger .bar-button-clear-secondary:hover:not(.disable-hover),\n  .toolbar-danger .bar-button-secondary:hover:not(.disable-hover) {\n    color: #32db64; }\n\n.toolbar-danger .bar-button-outline-secondary {\n  border-color: #2ec95c;\n  color: #2ec95c;\n  background-color: transparent; }\n  .toolbar-danger .bar-button-outline-secondary.activated {\n    background-color: transparent; }\n  .toolbar-danger .bar-button-outline-secondary ion-button-effect {\n    background-color: #2ec95c; }\n\n.toolbar-danger .bar-button-solid-secondary {\n  color: #fff;\n  background-color: #32db64; }\n  .toolbar-danger .bar-button-solid-secondary.activated {\n    color: #fff;\n    background-color: #2ec95c; }\n\n.toolbar-danger .bar-button-clear-danger,\n.toolbar-danger .bar-button-danger {\n  color: #f53d3d;\n  background-color: transparent; }\n  .toolbar-danger .bar-button-clear-danger:hover:not(.disable-hover),\n  .toolbar-danger .bar-button-danger:hover:not(.disable-hover) {\n    color: #f53d3d; }\n\n.toolbar-danger .bar-button-outline-danger {\n  border-color: #e13838;\n  color: #e13838;\n  background-color: transparent; }\n  .toolbar-danger .bar-button-outline-danger.activated {\n    background-color: transparent; }\n  .toolbar-danger .bar-button-outline-danger ion-button-effect {\n    background-color: #e13838; }\n\n.toolbar-danger .bar-button-solid-danger {\n  color: #fff;\n  background-color: #f53d3d; }\n  .toolbar-danger .bar-button-solid-danger.activated {\n    color: #fff;\n    background-color: #e13838; }\n\n.toolbar-danger .bar-button-clear-light,\n.toolbar-danger .bar-button-light {\n  color: #f4f4f4;\n  background-color: transparent; }\n  .toolbar-danger .bar-button-clear-light:hover:not(.disable-hover),\n  .toolbar-danger .bar-button-light:hover:not(.disable-hover) {\n    color: #f4f4f4; }\n\n.toolbar-danger .bar-button-outline-light {\n  border-color: #e0e0e0;\n  color: #e0e0e0;\n  background-color: transparent; }\n  .toolbar-danger .bar-button-outline-light.activated {\n    background-color: transparent; }\n  .toolbar-danger .bar-button-outline-light ion-button-effect {\n    background-color: #e0e0e0; }\n\n.toolbar-danger .bar-button-solid-light {\n  color: #000;\n  background-color: #f4f4f4; }\n  .toolbar-danger .bar-button-solid-light.activated {\n    color: #000;\n    background-color: #e0e0e0; }\n\n.toolbar-danger .bar-button-clear-dark,\n.toolbar-danger .bar-button-dark {\n  color: #222;\n  background-color: transparent; }\n  .toolbar-danger .bar-button-clear-dark:hover:not(.disable-hover),\n  .toolbar-danger .bar-button-dark:hover:not(.disable-hover) {\n    color: #222; }\n\n.toolbar-danger .bar-button-outline-dark {\n  border-color: #343434;\n  color: #343434;\n  background-color: transparent; }\n  .toolbar-danger .bar-button-outline-dark.activated {\n    background-color: transparent; }\n  .toolbar-danger .bar-button-outline-dark ion-button-effect {\n    background-color: #343434; }\n\n.toolbar-danger .bar-button-solid-dark {\n  color: #fff;\n  background-color: #222; }\n  .toolbar-danger .bar-button-solid-dark.activated {\n    color: #fff;\n    background-color: #343434; }\n\n.bar-button-clear-danger,\n.bar-button-danger {\n  color: #f53d3d;\n  background-color: transparent; }\n  .bar-button-clear-danger:hover:not(.disable-hover),\n  .bar-button-danger:hover:not(.disable-hover) {\n    color: #f53d3d; }\n\n.bar-button-outline-danger {\n  border-color: #e13838;\n  color: #e13838;\n  background-color: transparent; }\n  .bar-button-outline-danger.activated {\n    background-color: transparent; }\n  .bar-button-outline-danger ion-button-effect {\n    background-color: #e13838; }\n\n.bar-button-solid-danger {\n  color: #fff;\n  background-color: #f53d3d; }\n  .bar-button-solid-danger.activated {\n    color: #fff;\n    background-color: #e13838; }\n\n.toolbar-light .toolbar-background {\n  background: #f4f4f4; }\n\n.toolbar-light .bar-button-clear,\n.toolbar-light .bar-button-default,\n.toolbar-light .bar-button-outline,\n.toolbar-light .toolbar-title {\n  color: #424242; }\n\n.toolbar-light .bar-button-clear ion-button-effect,\n.toolbar-light .bar-button-default ion-button-effect,\n.toolbar-light .bar-button-outline ion-button-effect {\n  background-color: #424242; }\n\n.toolbar-light .bar-button-outline {\n  border-color: #424242; }\n\n.toolbar-light .bar-button-clear-primary,\n.toolbar-light .bar-button-primary {\n  color: #327eff;\n  background-color: transparent; }\n  .toolbar-light .bar-button-clear-primary:hover:not(.disable-hover),\n  .toolbar-light .bar-button-primary:hover:not(.disable-hover) {\n    color: #327eff; }\n\n.toolbar-light .bar-button-outline-primary {\n  border-color: #2e74eb;\n  color: #2e74eb;\n  background-color: transparent; }\n  .toolbar-light .bar-button-outline-primary.activated {\n    background-color: transparent; }\n  .toolbar-light .bar-button-outline-primary ion-button-effect {\n    background-color: #2e74eb; }\n\n.toolbar-light .bar-button-solid-primary {\n  color: #fff;\n  background-color: #327eff; }\n  .toolbar-light .bar-button-solid-primary.activated {\n    color: #fff;\n    background-color: #2e74eb; }\n\n.toolbar-light .bar-button-clear-secondary,\n.toolbar-light .bar-button-secondary {\n  color: #32db64;\n  background-color: transparent; }\n  .toolbar-light .bar-button-clear-secondary:hover:not(.disable-hover),\n  .toolbar-light .bar-button-secondary:hover:not(.disable-hover) {\n    color: #32db64; }\n\n.toolbar-light .bar-button-outline-secondary {\n  border-color: #2ec95c;\n  color: #2ec95c;\n  background-color: transparent; }\n  .toolbar-light .bar-button-outline-secondary.activated {\n    background-color: transparent; }\n  .toolbar-light .bar-button-outline-secondary ion-button-effect {\n    background-color: #2ec95c; }\n\n.toolbar-light .bar-button-solid-secondary {\n  color: #fff;\n  background-color: #32db64; }\n  .toolbar-light .bar-button-solid-secondary.activated {\n    color: #fff;\n    background-color: #2ec95c; }\n\n.toolbar-light .bar-button-clear-danger,\n.toolbar-light .bar-button-danger {\n  color: #f53d3d;\n  background-color: transparent; }\n  .toolbar-light .bar-button-clear-danger:hover:not(.disable-hover),\n  .toolbar-light .bar-button-danger:hover:not(.disable-hover) {\n    color: #f53d3d; }\n\n.toolbar-light .bar-button-outline-danger {\n  border-color: #e13838;\n  color: #e13838;\n  background-color: transparent; }\n  .toolbar-light .bar-button-outline-danger.activated {\n    background-color: transparent; }\n  .toolbar-light .bar-button-outline-danger ion-button-effect {\n    background-color: #e13838; }\n\n.toolbar-light .bar-button-solid-danger {\n  color: #fff;\n  background-color: #f53d3d; }\n  .toolbar-light .bar-button-solid-danger.activated {\n    color: #fff;\n    background-color: #e13838; }\n\n.toolbar-light .bar-button-clear-light,\n.toolbar-light .bar-button-light {\n  color: #f4f4f4;\n  background-color: transparent; }\n  .toolbar-light .bar-button-clear-light:hover:not(.disable-hover),\n  .toolbar-light .bar-button-light:hover:not(.disable-hover) {\n    color: #f4f4f4; }\n\n.toolbar-light .bar-button-outline-light {\n  border-color: #e0e0e0;\n  color: #e0e0e0;\n  background-color: transparent; }\n  .toolbar-light .bar-button-outline-light.activated {\n    background-color: transparent; }\n  .toolbar-light .bar-button-outline-light ion-button-effect {\n    background-color: #e0e0e0; }\n\n.toolbar-light .bar-button-solid-light {\n  color: #000;\n  background-color: #f4f4f4; }\n  .toolbar-light .bar-button-solid-light.activated {\n    color: #000;\n    background-color: #e0e0e0; }\n\n.toolbar-light .bar-button-clear-dark,\n.toolbar-light .bar-button-dark {\n  color: #222;\n  background-color: transparent; }\n  .toolbar-light .bar-button-clear-dark:hover:not(.disable-hover),\n  .toolbar-light .bar-button-dark:hover:not(.disable-hover) {\n    color: #222; }\n\n.toolbar-light .bar-button-outline-dark {\n  border-color: #343434;\n  color: #343434;\n  background-color: transparent; }\n  .toolbar-light .bar-button-outline-dark.activated {\n    background-color: transparent; }\n  .toolbar-light .bar-button-outline-dark ion-button-effect {\n    background-color: #343434; }\n\n.toolbar-light .bar-button-solid-dark {\n  color: #fff;\n  background-color: #222; }\n  .toolbar-light .bar-button-solid-dark.activated {\n    color: #fff;\n    background-color: #343434; }\n\n.bar-button-clear-light,\n.bar-button-light {\n  color: #f4f4f4;\n  background-color: transparent; }\n  .bar-button-clear-light:hover:not(.disable-hover),\n  .bar-button-light:hover:not(.disable-hover) {\n    color: #f4f4f4; }\n\n.bar-button-outline-light {\n  border-color: #e0e0e0;\n  color: #e0e0e0;\n  background-color: transparent; }\n  .bar-button-outline-light.activated {\n    background-color: transparent; }\n  .bar-button-outline-light ion-button-effect {\n    background-color: #e0e0e0; }\n\n.bar-button-solid-light {\n  color: #000;\n  background-color: #f4f4f4; }\n  .bar-button-solid-light.activated {\n    color: #000;\n    background-color: #e0e0e0; }\n\n.toolbar-dark .toolbar-background {\n  background: #222; }\n\n.toolbar-dark .bar-button-clear,\n.toolbar-dark .bar-button-default,\n.toolbar-dark .bar-button-outline,\n.toolbar-dark .toolbar-title {\n  color: #fff; }\n\n.toolbar-dark .bar-button-clear ion-button-effect,\n.toolbar-dark .bar-button-default ion-button-effect,\n.toolbar-dark .bar-button-outline ion-button-effect {\n  background-color: #fff; }\n\n.toolbar-dark .bar-button-outline {\n  border-color: #fff; }\n\n.toolbar-dark .bar-button-clear-primary,\n.toolbar-dark .bar-button-primary {\n  color: #327eff;\n  background-color: transparent; }\n  .toolbar-dark .bar-button-clear-primary:hover:not(.disable-hover),\n  .toolbar-dark .bar-button-primary:hover:not(.disable-hover) {\n    color: #327eff; }\n\n.toolbar-dark .bar-button-outline-primary {\n  border-color: #2e74eb;\n  color: #2e74eb;\n  background-color: transparent; }\n  .toolbar-dark .bar-button-outline-primary.activated {\n    background-color: transparent; }\n  .toolbar-dark .bar-button-outline-primary ion-button-effect {\n    background-color: #2e74eb; }\n\n.toolbar-dark .bar-button-solid-primary {\n  color: #fff;\n  background-color: #327eff; }\n  .toolbar-dark .bar-button-solid-primary.activated {\n    color: #fff;\n    background-color: #2e74eb; }\n\n.toolbar-dark .bar-button-clear-secondary,\n.toolbar-dark .bar-button-secondary {\n  color: #32db64;\n  background-color: transparent; }\n  .toolbar-dark .bar-button-clear-secondary:hover:not(.disable-hover),\n  .toolbar-dark .bar-button-secondary:hover:not(.disable-hover) {\n    color: #32db64; }\n\n.toolbar-dark .bar-button-outline-secondary {\n  border-color: #2ec95c;\n  color: #2ec95c;\n  background-color: transparent; }\n  .toolbar-dark .bar-button-outline-secondary.activated {\n    background-color: transparent; }\n  .toolbar-dark .bar-button-outline-secondary ion-button-effect {\n    background-color: #2ec95c; }\n\n.toolbar-dark .bar-button-solid-secondary {\n  color: #fff;\n  background-color: #32db64; }\n  .toolbar-dark .bar-button-solid-secondary.activated {\n    color: #fff;\n    background-color: #2ec95c; }\n\n.toolbar-dark .bar-button-clear-danger,\n.toolbar-dark .bar-button-danger {\n  color: #f53d3d;\n  background-color: transparent; }\n  .toolbar-dark .bar-button-clear-danger:hover:not(.disable-hover),\n  .toolbar-dark .bar-button-danger:hover:not(.disable-hover) {\n    color: #f53d3d; }\n\n.toolbar-dark .bar-button-outline-danger {\n  border-color: #e13838;\n  color: #e13838;\n  background-color: transparent; }\n  .toolbar-dark .bar-button-outline-danger.activated {\n    background-color: transparent; }\n  .toolbar-dark .bar-button-outline-danger ion-button-effect {\n    background-color: #e13838; }\n\n.toolbar-dark .bar-button-solid-danger {\n  color: #fff;\n  background-color: #f53d3d; }\n  .toolbar-dark .bar-button-solid-danger.activated {\n    color: #fff;\n    background-color: #e13838; }\n\n.toolbar-dark .bar-button-clear-light,\n.toolbar-dark .bar-button-light {\n  color: #f4f4f4;\n  background-color: transparent; }\n  .toolbar-dark .bar-button-clear-light:hover:not(.disable-hover),\n  .toolbar-dark .bar-button-light:hover:not(.disable-hover) {\n    color: #f4f4f4; }\n\n.toolbar-dark .bar-button-outline-light {\n  border-color: #e0e0e0;\n  color: #e0e0e0;\n  background-color: transparent; }\n  .toolbar-dark .bar-button-outline-light.activated {\n    background-color: transparent; }\n  .toolbar-dark .bar-button-outline-light ion-button-effect {\n    background-color: #e0e0e0; }\n\n.toolbar-dark .bar-button-solid-light {\n  color: #000;\n  background-color: #f4f4f4; }\n  .toolbar-dark .bar-button-solid-light.activated {\n    color: #000;\n    background-color: #e0e0e0; }\n\n.toolbar-dark .bar-button-clear-dark,\n.toolbar-dark .bar-button-dark {\n  color: #222;\n  background-color: transparent; }\n  .toolbar-dark .bar-button-clear-dark:hover:not(.disable-hover),\n  .toolbar-dark .bar-button-dark:hover:not(.disable-hover) {\n    color: #222; }\n\n.toolbar-dark .bar-button-outline-dark {\n  border-color: #343434;\n  color: #343434;\n  background-color: transparent; }\n  .toolbar-dark .bar-button-outline-dark.activated {\n    background-color: transparent; }\n  .toolbar-dark .bar-button-outline-dark ion-button-effect {\n    background-color: #343434; }\n\n.toolbar-dark .bar-button-solid-dark {\n  color: #fff;\n  background-color: #222; }\n  .toolbar-dark .bar-button-solid-dark.activated {\n    color: #fff;\n    background-color: #343434; }\n\n.bar-button-clear-dark,\n.bar-button-dark {\n  color: #222;\n  background-color: transparent; }\n  .bar-button-clear-dark:hover:not(.disable-hover),\n  .bar-button-dark:hover:not(.disable-hover) {\n    color: #222; }\n\n.bar-button-outline-dark {\n  border-color: #343434;\n  color: #343434;\n  background-color: transparent; }\n  .bar-button-outline-dark.activated {\n    background-color: transparent; }\n  .bar-button-outline-dark ion-button-effect {\n    background-color: #343434; }\n\n.bar-button-solid-dark {\n  color: #fff;\n  background-color: #222; }\n  .bar-button-solid-dark.activated {\n    color: #fff;\n    background-color: #343434; }\n\nhtml {\n  font-size: 62.5%; }\n\na {\n  background-color: transparent; }\n\n.enable-hover a:hover {\n  opacity: .7; }\n\nh1,\nh2,\nh3,\nh4,\nh5,\nh6 {\n  margin-top: 1.6rem;\n  margin-bottom: 1rem;\n  font-weight: 500;\n  line-height: 1.2; }\n\n[padding] h1:first-child,\n[padding] h2:first-child,\n[padding] h3:first-child,\n[padding] h4:first-child,\n[padding] h5:first-child,\n[padding] h6:first-child {\n  margin-top: -.3rem; }\n\nh1 + h2,\nh1 + h3,\nh2 + h3 {\n  margin-top: -.3rem; }\n\nh1 {\n  margin-top: 2rem;\n  font-size: 2.6rem; }\n\nh2 {\n  margin-top: 1.8rem;\n  font-size: 2.4rem; }\n\nh3 {\n  font-size: 2.2rem; }\n\nh4 {\n  font-size: 2rem; }\n\nh5 {\n  font-size: 1.8rem; }\n\nh6 {\n  font-size: 1.6rem; }\n\nsmall {\n  font-size: 75%; }\n\nsub,\nsup {\n  position: relative;\n  font-size: 75%;\n  line-height: 0;\n  vertical-align: baseline; }\n\nsup {\n  top: -.5em; }\n\nsub {\n  bottom: -.25em; }\n\n[text-left] {\n  text-align: left; }\n\n[text-center] {\n  text-align: center; }\n\n[text-right] {\n  text-align: right; }\n\n[text-justify] {\n  text-align: justify; }\n\n[text-nowrap] {\n  white-space: nowrap; }\n\n[text-uppercase] {\n  text-transform: uppercase; }\n\n[text-lowercase] {\n  text-transform: lowercase; }\n\n[text-capitalize] {\n  text-transform: capitalize; }\n\np {\n  color: #000; }\n\na {\n  color: #327eff; }\n\n.text-primary {\n  color: #327eff; }\n\n.text-secondary {\n  color: #32db64; }\n\n.text-danger {\n  color: #f53d3d; }\n\n.text-light {\n  color: #f4f4f4; }\n\n.text-dark {\n  color: #222; }\n\nion-nav > ion-page > .toolbar.statusbar-padding:first-child,\nion-nav > ion-page > ion-header > .toolbar.statusbar-padding:first-child,\nion-tab > ion-page > ion-header > .toolbar.statusbar-padding:first-child,\nion-tabs > ion-page.tab-subpage > ion-header > .toolbar.statusbar-padding:first-child,\nion-menu > .menu-inner > .toolbar.statusbar-padding:first-child,\nion-menu > .menu-inner > ion-header > .toolbar.statusbar-padding:first-child {\n  padding-top: 20px;\n  height: calc(5.6rem + 20px);\n  min-height: calc(5.6rem + 20px); }\n\nion-nav > ion-page > ion-content.statusbar-padding:first-child scroll-content,\nion-nav > ion-page > ion-header > ion-content.statusbar-padding:first-child scroll-content,\nion-tab > ion-page > ion-header > ion-content.statusbar-padding:first-child scroll-content,\nion-tabs > ion-page.tab-subpage > ion-header > ion-content.statusbar-padding:first-child scroll-content,\nion-menu > .menu-inner > ion-content.statusbar-padding:first-child scroll-content,\nion-menu > .menu-inner > ion-header > ion-content.statusbar-padding:first-child scroll-content {\n  padding-top: 20px; }\n\nion-nav > ion-page > ion-content.statusbar-padding:first-child[padding] scroll-content,\nion-nav > ion-page > ion-content.statusbar-padding:first-child[padding-top] scroll-content,\nion-nav > ion-page > ion-header > ion-content.statusbar-padding:first-child[padding] scroll-content,\nion-nav > ion-page > ion-header > ion-content.statusbar-padding:first-child[padding-top] scroll-content,\nion-tab > ion-page > ion-header > ion-content.statusbar-padding:first-child[padding] scroll-content,\nion-tab > ion-page > ion-header > ion-content.statusbar-padding:first-child[padding-top] scroll-content,\nion-tabs > ion-page.tab-subpage > ion-header > ion-content.statusbar-padding:first-child[padding] scroll-content,\nion-tabs > ion-page.tab-subpage > ion-header > ion-content.statusbar-padding:first-child[padding-top] scroll-content,\nion-menu > .menu-inner > ion-content.statusbar-padding:first-child[padding] scroll-content,\nion-menu > .menu-inner > ion-content.statusbar-padding:first-child[padding-top] scroll-content,\nion-menu > .menu-inner > ion-header > ion-content.statusbar-padding:first-child[padding] scroll-content,\nion-menu > .menu-inner > ion-header > ion-content.statusbar-padding:first-child[padding-top] scroll-content {\n  padding-top: calc(16px + 20px); }\n\n@media only screen and (max-width: 767px) {\n  .modal-wrapper > ion-page > ion-header > .toolbar.statusbar-padding:first-child {\n    padding-top: 20px;\n    height: calc(5.6rem + 20px);\n    min-height: calc(5.6rem + 20px); }\n  .modal-wrapper > ion-page > ion-header > ion-content.statusbar-padding:first-child scroll-content {\n    padding-top: 20px; }\n  .modal-wrapper > ion-page > ion-header > ion-content.statusbar-padding:first-child[padding] scroll-content,\n  .modal-wrapper > ion-page > ion-header > ion-content.statusbar-padding:first-child[padding-top] scroll-content {\n    padding-top: calc(16px + 20px); } }\n\n@font-face {\n  font-family: \"Roboto\";\n  font-style: normal;\n  font-weight: 300;\n  src: local(\"Roboto Light\"), local(\"Roboto-Light\"), url(\"../fonts/roboto-light.ttf\") format(\"truetype\"), url(\"../fonts/roboto-light.woff\") format(\"woff\"); }\n\n@font-face {\n  font-family: \"Roboto\";\n  font-style: normal;\n  font-weight: 400;\n  src: local(\"Roboto\"), local(\"Roboto-Regular\"), url(\"../fonts/roboto-regular.ttf\") format(\"truetype\"), url(\"../fonts/roboto-regular.woff\") format(\"woff\"); }\n\n@font-face {\n  font-family: \"Roboto\";\n  font-style: normal;\n  font-weight: 500;\n  src: local(\"Roboto Medium\"), local(\"Roboto-Medium\"), url(\"../fonts/roboto-medium.ttf\") format(\"truetype\"), url(\"../fonts/roboto-medium.woff\") format(\"woff\"); }\n\n@font-face {\n  font-family: \"Roboto\";\n  font-style: normal;\n  font-weight: 700;\n  src: local(\"Roboto Bold\"), local(\"Roboto-Bold\"), url(\"../fonts/roboto-bold.ttf\") format(\"truetype\"), url(\"../fonts/roboto-bold.woff\") format(\"woff\"); }\n\nbody {\n  font-family: \"Roboto\", \"Helvetica Neue\", sans-serif;\n  font-size: 1.4rem;\n  background-color: #fff; }\n"
  },
  {
    "path": "content/dist/bundles/ionic.system.js",
    "content": "System.register('ionic/components', ['./components/app/app', './components/app/id', './components/action-sheet/action-sheet', './components/alert/alert', './components/blur/blur', './components/button/button', './components/checkbox/checkbox', './components/content/content', './components/icon/icon', './components/item/item', './components/item/item-sliding', './components/menu/menu', './components/menu/menu-types', './components/menu/menu-toggle', './components/menu/menu-close', './components/text-input/text-input', './components/label/label', './components/list/list', './components/show-hide-when/show-hide-when', './components/modal/modal', './components/nav/nav', './components/nav/nav-controller', './components/nav/view-controller', './components/nav/nav-push', './components/nav/nav-router', './components/navbar/navbar', './components/overlay/overlay', './components/slides/slides', './components/radio/radio', './components/scroll/scroll', './components/scroll/pull-to-refresh', './components/searchbar/searchbar', './components/segment/segment', './components/tabs/tabs', './components/tabs/tab', './components/tap-click/tap-click', './components/toggle/toggle', './components/toolbar/toolbar'], function (_export) {\n  'use strict';\n\n  return {\n    setters: [function (_componentsAppApp) {\n      for (var _key in _componentsAppApp) {\n        if (_key !== 'default') _export(_key, _componentsAppApp[_key]);\n      }\n    }, function (_componentsAppId) {\n      for (var _key2 in _componentsAppId) {\n        if (_key2 !== 'default') _export(_key2, _componentsAppId[_key2]);\n      }\n    }, function (_componentsActionSheetActionSheet) {\n      for (var _key3 in _componentsActionSheetActionSheet) {\n        if (_key3 !== 'default') _export(_key3, _componentsActionSheetActionSheet[_key3]);\n      }\n    }, function (_componentsAlertAlert) {\n      for (var _key4 in _componentsAlertAlert) {\n        if (_key4 !== 'default') _export(_key4, _componentsAlertAlert[_key4]);\n      }\n    }, function (_componentsBlurBlur) {\n      for (var _key5 in _componentsBlurBlur) {\n        if (_key5 !== 'default') _export(_key5, _componentsBlurBlur[_key5]);\n      }\n    }, function (_componentsButtonButton) {\n      for (var _key6 in _componentsButtonButton) {\n        if (_key6 !== 'default') _export(_key6, _componentsButtonButton[_key6]);\n      }\n    }, function (_componentsCheckboxCheckbox) {\n      for (var _key7 in _componentsCheckboxCheckbox) {\n        if (_key7 !== 'default') _export(_key7, _componentsCheckboxCheckbox[_key7]);\n      }\n    }, function (_componentsContentContent) {\n      for (var _key8 in _componentsContentContent) {\n        if (_key8 !== 'default') _export(_key8, _componentsContentContent[_key8]);\n      }\n    }, function (_componentsIconIcon) {\n      for (var _key9 in _componentsIconIcon) {\n        if (_key9 !== 'default') _export(_key9, _componentsIconIcon[_key9]);\n      }\n    }, function (_componentsItemItem) {\n      for (var _key10 in _componentsItemItem) {\n        if (_key10 !== 'default') _export(_key10, _componentsItemItem[_key10]);\n      }\n    }, function (_componentsItemItemSliding) {\n      for (var _key11 in _componentsItemItemSliding) {\n        if (_key11 !== 'default') _export(_key11, _componentsItemItemSliding[_key11]);\n      }\n    }, function (_componentsMenuMenu) {\n      for (var _key12 in _componentsMenuMenu) {\n        if (_key12 !== 'default') _export(_key12, _componentsMenuMenu[_key12]);\n      }\n    }, function (_componentsMenuMenuTypes) {\n      for (var _key13 in _componentsMenuMenuTypes) {\n        if (_key13 !== 'default') _export(_key13, _componentsMenuMenuTypes[_key13]);\n      }\n    }, function (_componentsMenuMenuToggle) {\n      for (var _key14 in _componentsMenuMenuToggle) {\n        if (_key14 !== 'default') _export(_key14, _componentsMenuMenuToggle[_key14]);\n      }\n    }, function (_componentsMenuMenuClose) {\n      for (var _key15 in _componentsMenuMenuClose) {\n        if (_key15 !== 'default') _export(_key15, _componentsMenuMenuClose[_key15]);\n      }\n    }, function (_componentsTextInputTextInput) {\n      for (var _key16 in _componentsTextInputTextInput) {\n        if (_key16 !== 'default') _export(_key16, _componentsTextInputTextInput[_key16]);\n      }\n    }, function (_componentsLabelLabel) {\n      for (var _key17 in _componentsLabelLabel) {\n        if (_key17 !== 'default') _export(_key17, _componentsLabelLabel[_key17]);\n      }\n    }, function (_componentsListList) {\n      for (var _key18 in _componentsListList) {\n        if (_key18 !== 'default') _export(_key18, _componentsListList[_key18]);\n      }\n    }, function (_componentsShowHideWhenShowHideWhen) {\n      for (var _key19 in _componentsShowHideWhenShowHideWhen) {\n        if (_key19 !== 'default') _export(_key19, _componentsShowHideWhenShowHideWhen[_key19]);\n      }\n    }, function (_componentsModalModal) {\n      for (var _key20 in _componentsModalModal) {\n        if (_key20 !== 'default') _export(_key20, _componentsModalModal[_key20]);\n      }\n    }, function (_componentsNavNav) {\n      for (var _key21 in _componentsNavNav) {\n        if (_key21 !== 'default') _export(_key21, _componentsNavNav[_key21]);\n      }\n    }, function (_componentsNavNavController) {\n      for (var _key22 in _componentsNavNavController) {\n        if (_key22 !== 'default') _export(_key22, _componentsNavNavController[_key22]);\n      }\n    }, function (_componentsNavViewController) {\n      for (var _key23 in _componentsNavViewController) {\n        if (_key23 !== 'default') _export(_key23, _componentsNavViewController[_key23]);\n      }\n    }, function (_componentsNavNavPush) {\n      for (var _key24 in _componentsNavNavPush) {\n        if (_key24 !== 'default') _export(_key24, _componentsNavNavPush[_key24]);\n      }\n    }, function (_componentsNavNavRouter) {\n      for (var _key25 in _componentsNavNavRouter) {\n        if (_key25 !== 'default') _export(_key25, _componentsNavNavRouter[_key25]);\n      }\n    }, function (_componentsNavbarNavbar) {\n      for (var _key26 in _componentsNavbarNavbar) {\n        if (_key26 !== 'default') _export(_key26, _componentsNavbarNavbar[_key26]);\n      }\n    }, function (_componentsOverlayOverlay) {\n      for (var _key27 in _componentsOverlayOverlay) {\n        if (_key27 !== 'default') _export(_key27, _componentsOverlayOverlay[_key27]);\n      }\n    }, function (_componentsSlidesSlides) {\n      for (var _key28 in _componentsSlidesSlides) {\n        if (_key28 !== 'default') _export(_key28, _componentsSlidesSlides[_key28]);\n      }\n    }, function (_componentsRadioRadio) {\n      for (var _key29 in _componentsRadioRadio) {\n        if (_key29 !== 'default') _export(_key29, _componentsRadioRadio[_key29]);\n      }\n    }, function (_componentsScrollScroll) {\n      for (var _key30 in _componentsScrollScroll) {\n        if (_key30 !== 'default') _export(_key30, _componentsScrollScroll[_key30]);\n      }\n    }, function (_componentsScrollPullToRefresh) {\n      for (var _key31 in _componentsScrollPullToRefresh) {\n        if (_key31 !== 'default') _export(_key31, _componentsScrollPullToRefresh[_key31]);\n      }\n    }, function (_componentsSearchbarSearchbar) {\n      for (var _key32 in _componentsSearchbarSearchbar) {\n        if (_key32 !== 'default') _export(_key32, _componentsSearchbarSearchbar[_key32]);\n      }\n    }, function (_componentsSegmentSegment) {\n      for (var _key33 in _componentsSegmentSegment) {\n        if (_key33 !== 'default') _export(_key33, _componentsSegmentSegment[_key33]);\n      }\n    }, function (_componentsTabsTabs) {\n      for (var _key34 in _componentsTabsTabs) {\n        if (_key34 !== 'default') _export(_key34, _componentsTabsTabs[_key34]);\n      }\n    }, function (_componentsTabsTab) {\n      for (var _key35 in _componentsTabsTab) {\n        if (_key35 !== 'default') _export(_key35, _componentsTabsTab[_key35]);\n      }\n    }, function (_componentsTapClickTapClick) {\n      for (var _key36 in _componentsTapClickTapClick) {\n        if (_key36 !== 'default') _export(_key36, _componentsTapClickTapClick[_key36]);\n      }\n    }, function (_componentsToggleToggle) {\n      for (var _key37 in _componentsToggleToggle) {\n        if (_key37 !== 'default') _export(_key37, _componentsToggleToggle[_key37]);\n      }\n    }, function (_componentsToolbarToolbar) {\n      for (var _key38 in _componentsToolbarToolbar) {\n        if (_key38 !== 'default') _export(_key38, _componentsToolbarToolbar[_key38]);\n      }\n    }],\n    execute: function () {}\n  };\n});\nSystem.register('ionic/ionic', ['./config/modes', './platform/registry', './animations/builtins', './animations/ios-transition', './animations/md-transition', './config/bootstrap', './config/config', './config/directives', './decorators/config-component', './decorators/app', './decorators/page', './components', './platform/platform', './platform/storage', './util/click-block', './util/events', './util/keyboard', './animations/animation', './translation/translate', './translation/translate_pipe'], function (_export) {\n  'use strict';\n\n  return {\n    setters: [function (_configModes) {}, function (_platformRegistry) {}, function (_animationsBuiltins) {}, function (_animationsIosTransition) {}, function (_animationsMdTransition) {}, function (_configBootstrap) {\n      for (var _key in _configBootstrap) {\n        if (_key !== 'default') _export(_key, _configBootstrap[_key]);\n      }\n    }, function (_configConfig) {\n      for (var _key2 in _configConfig) {\n        if (_key2 !== 'default') _export(_key2, _configConfig[_key2]);\n      }\n    }, function (_configDirectives) {\n      for (var _key3 in _configDirectives) {\n        if (_key3 !== 'default') _export(_key3, _configDirectives[_key3]);\n      }\n    }, function (_decoratorsConfigComponent) {\n      for (var _key4 in _decoratorsConfigComponent) {\n        if (_key4 !== 'default') _export(_key4, _decoratorsConfigComponent[_key4]);\n      }\n    }, function (_decoratorsApp) {\n      for (var _key5 in _decoratorsApp) {\n        if (_key5 !== 'default') _export(_key5, _decoratorsApp[_key5]);\n      }\n    }, function (_decoratorsPage) {\n      for (var _key6 in _decoratorsPage) {\n        if (_key6 !== 'default') _export(_key6, _decoratorsPage[_key6]);\n      }\n    }, function (_components) {\n      for (var _key7 in _components) {\n        if (_key7 !== 'default') _export(_key7, _components[_key7]);\n      }\n    }, function (_platformPlatform) {\n      for (var _key8 in _platformPlatform) {\n        if (_key8 !== 'default') _export(_key8, _platformPlatform[_key8]);\n      }\n    }, function (_platformStorage) {\n      for (var _key9 in _platformStorage) {\n        if (_key9 !== 'default') _export(_key9, _platformStorage[_key9]);\n      }\n    }, function (_utilClickBlock) {\n      for (var _key10 in _utilClickBlock) {\n        if (_key10 !== 'default') _export(_key10, _utilClickBlock[_key10]);\n      }\n    }, function (_utilEvents) {\n      for (var _key11 in _utilEvents) {\n        if (_key11 !== 'default') _export(_key11, _utilEvents[_key11]);\n      }\n    }, function (_utilKeyboard) {\n      for (var _key12 in _utilKeyboard) {\n        if (_key12 !== 'default') _export(_key12, _utilKeyboard[_key12]);\n      }\n    }, function (_animationsAnimation) {\n      for (var _key13 in _animationsAnimation) {\n        if (_key13 !== 'default') _export(_key13, _animationsAnimation[_key13]);\n      }\n    }, function (_translationTranslate) {\n      for (var _key14 in _translationTranslate) {\n        if (_key14 !== 'default') _export(_key14, _translationTranslate[_key14]);\n      }\n    }, function (_translationTranslate_pipe) {\n      for (var _key15 in _translationTranslate_pipe) {\n        if (_key15 !== 'default') _export(_key15, _translationTranslate_pipe[_key15]);\n      }\n    }],\n    execute: function () {}\n  };\n});\nSystem.register('ionic/util', ['./util/dom', './util/util'], function (_export) {\n  'use strict';\n\n  var domUtil, dom;\n  return {\n    setters: [function (_utilDom) {\n      domUtil = _utilDom;\n    }, function (_utilUtil) {\n      for (var _key in _utilUtil) {\n        if (_key !== 'default') _export(_key, _utilUtil[_key]);\n      }\n    }],\n    execute: function () {\n      dom = domUtil;\n\n      _export('dom', dom);\n    }\n  };\n});\nSystem.register('ionic/components/ion', ['../util/dom'], function (_export) {\n    /**\n     * Base class for all Ionic components. Exposes some common functionality\n     * that all Ionic components need, such as accessing underlying native elements and\n     * sending/receiving app-level events.\n     */\n    'use strict';\n\n    var dom, Ion;\n\n    var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();\n\n    function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\n    return {\n        setters: [function (_utilDom) {\n            dom = _utilDom;\n        }],\n        execute: function () {\n            Ion = (function () {\n                function Ion(elementRef, config) {\n                    _classCallCheck(this, Ion);\n\n                    this.elementRef = elementRef;\n                    this.config = config;\n                }\n\n                _createClass(Ion, [{\n                    key: 'ngOnInit',\n                    value: function ngOnInit() {\n                        var cls = this.constructor;\n                        if (cls.defaultInputs && this.config) {\n                            for (var prop in cls.defaultInputs) {\n                                // Priority:\n                                // ---------\n                                // 1) Value set from within constructor\n                                // 2) Value set from the host element's attribute\n                                // 3) Value set by the users global config\n                                // 4) Value set by the default mode/platform config\n                                // 5) Value set from the component's default\n                                if (this[prop]) {\n                                    // this property has already been set on the instance\n                                    // could be from the user setting the element's attribute\n                                    // or from the user setting it within the constructor\n                                    continue;\n                                }\n                                // get the property values from a global user/platform config\n                                var configVal = this.config.get(prop);\n                                if (configVal) {\n                                    this[prop] = configVal;\n                                    continue;\n                                }\n                                // wasn't set yet, so go with property's default value\n                                this[prop] = cls.defaultInputs[prop];\n                            }\n                        }\n                    }\n                }, {\n                    key: 'getElementRef',\n                    value: function getElementRef() {\n                        return this.elementRef;\n                    }\n                }, {\n                    key: 'getNativeElement',\n                    value: function getNativeElement() {\n                        return this.elementRef.nativeElement;\n                    }\n                }, {\n                    key: 'getDimensions',\n                    value: function getDimensions() {\n                        return dom.getDimensions(this);\n                    }\n                }, {\n                    key: 'width',\n                    value: function width() {\n                        return dom.getDimensions(this).width;\n                    }\n                }, {\n                    key: 'height',\n                    value: function height() {\n                        return dom.getDimensions(this).height;\n                    }\n                }]);\n\n                return Ion;\n            })();\n\n            _export('Ion', Ion);\n        }\n    };\n});\nSystem.register('ionic/animations/animation', ['../util/dom', '../util/util'], function (_export) {\n    /**\n      Animation Steps/Process\n      -----------------------\n    \n     - Construct animation (doesn't start)\n     - Client play()'s animation, returns promise\n     - Add before classes to elements\n     - Remove before classes from elements\n     - Elements staged in \"from\" effect w/ inline styles\n     - Call onReady()\n     - Wait for RENDER_DELAY milliseconds (give browser time to render)\n     - Call onPlay()\n     - Run from/to animation on elements\n     - Animations finish async\n     - Set inline styles w/ the \"to\" effects on elements\n     - Add after classes to elements\n     - Remove after classes from elements\n     - Call onFinish()\n     - Resolve play()'s promise\n    **/\n    /**\n     * @private\n    **/\n    'use strict';\n\n    var CSS, rafFrames, extend, Animation, Animate, TRANSFORMS, ANIMATE_PROPERTIES, CUBIC_BEZIERS, EASING_FN, AnimationRegistry;\n\n    var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();\n\n    function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\n    function insertEffects(effects, fromEffect, toEffect, easingConfig) {\n        easingConfig.opts = easingConfig.opts || {};\n        var increment = easingConfig.opts.increment || 0.04;\n        var easingFn = EASING_FN[easingConfig.name];\n        var pos = undefined,\n            tweenEffect = undefined,\n            addEffect = undefined,\n            property = undefined,\n            toProperty = undefined,\n            fromValue = undefined,\n            diffValue = undefined;\n        for (pos = increment; pos <= 1 - increment; pos += increment) {\n            tweenEffect = {};\n            addEffect = false;\n            for (property in toEffect) {\n                toProperty = toEffect[property];\n                if (toProperty.tween) {\n                    fromValue = fromEffect[property].num;\n                    diffValue = toProperty.num - fromValue;\n                    tweenEffect[property] = {\n                        value: roundValue(easingFn(pos, easingConfig.opts) * diffValue + fromValue) + toProperty.unit\n                    };\n                    addEffect = true;\n                }\n            }\n            if (addEffect) {\n                effects.push(convertProperties(tweenEffect));\n            }\n        }\n    }\n    function parseEffect(inputEffect) {\n        var val = undefined,\n            r = undefined,\n            num = undefined,\n            property = undefined;\n        var outputEffect = {};\n        for (property in inputEffect) {\n            val = inputEffect[property];\n            r = val.toString().match(/(^-?\\d*\\.?\\d*)(.*)/);\n            num = parseFloat(r[1]);\n            outputEffect[property] = {\n                value: val,\n                num: num,\n                unit: r[0] != r[2] ? r[2] : '',\n                tween: !isNaN(num) && ANIMATE_PROPERTIES.indexOf(property) > -1\n            };\n        }\n        return outputEffect;\n    }\n    function convertProperties(inputEffect) {\n        var outputEffect = {};\n        var transforms = [];\n        var value = undefined,\n            property = undefined;\n        for (property in inputEffect) {\n            value = inputEffect[property].value;\n            if (TRANSFORMS.indexOf(property) > -1) {\n                transforms.push(property + '(' + value + ')');\n            } else {\n                outputEffect[property] = value;\n            }\n        }\n        if (transforms.length) {\n            transforms.push('translateZ(0px)');\n            outputEffect.transform = transforms.join(' ');\n        }\n        return outputEffect;\n    }\n    function inlineStyle(ele, effect) {\n        if (ele && effect) {\n            var transforms = [];\n            var value = undefined,\n                property = undefined;\n            for (property in effect) {\n                value = effect[property].value;\n                if (TRANSFORMS.indexOf(property) > -1) {\n                    transforms.push(property + '(' + value + ')');\n                } else {\n                    ele.style[property] = value;\n                }\n            }\n            if (transforms.length) {\n                transforms.push('translateZ(0px)');\n                ele.style[CSS.transform] = transforms.join(' ');\n            }\n        }\n    }\n    function roundValue(val) {\n        return Math.round(val * 10000) / 10000;\n    }\n\n    function parallel(tasks, done) {\n        var l = tasks.length;\n        if (!l) {\n            done && done();\n            return;\n        }\n        var completed = 0;\n        function taskCompleted() {\n            completed++;\n            if (completed === l) {\n                done && done();\n            }\n        }\n        for (var i = 0; i < l; i++) {\n            tasks[i](taskCompleted);\n        }\n    }\n    return {\n        setters: [function (_utilDom) {\n            CSS = _utilDom.CSS;\n            rafFrames = _utilDom.rafFrames;\n        }, function (_utilUtil) {\n            extend = _utilUtil.extend;\n        }],\n        execute: function () {\n            Animation = (function () {\n                function Animation(ele) {\n                    var opts = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1];\n\n                    _classCallCheck(this, Animation);\n\n                    this.reset();\n                    this._opts = extend({\n                        renderDelay: 16\n                    }, opts);\n                    this.elements(ele);\n                    if (!document.documentElement.animate) {\n                        console.error('Web Animations polyfill missing');\n                    }\n                }\n\n                /**\n                 * @private\n                **/\n\n                _createClass(Animation, [{\n                    key: 'reset',\n                    value: function reset() {\n                        this._el = [];\n                        this._chld = [];\n                        this._ani = [];\n                        this._bfAdd = [];\n                        this._bfSty = {};\n                        this._bfRmv = [];\n                        this._afAdd = [];\n                        this._afRmv = [];\n                        this._readys = [];\n                        this._plays = [];\n                        this._finishes = [];\n                    }\n                }, {\n                    key: 'elements',\n                    value: function elements(ele) {\n                        if (ele) {\n                            if (typeof ele === 'string') {\n                                // string query selector\n                                ele = document.querySelectorAll(ele);\n                            }\n                            if (ele.length) {\n                                // array of elements\n                                for (var i = 0; i < ele.length; i++) {\n                                    this.addElement(ele[i]);\n                                }\n                            } else {\n                                // single element\n                                this.addElement(ele);\n                            }\n                        }\n                        return this;\n                    }\n                }, {\n                    key: 'addElement',\n                    value: function addElement(ele) {\n                        // ensure only HTML Element nodes\n                        if (ele) {\n                            if (ele.nativeElement) {\n                                // angular ElementRef\n                                ele = ele.nativeElement;\n                            }\n                            if (ele.nodeType === 1) {\n                                this._el.push(ele);\n                            }\n                        }\n                    }\n                }, {\n                    key: 'parent',\n                    value: function parent(parentAnimation) {\n                        this._parent = parentAnimation;\n                        return this;\n                    }\n                }, {\n                    key: 'add',\n                    value: function add(childAnimations) {\n                        var _childAnimations = Array.isArray(childAnimations) ? childAnimations : arguments;\n                        for (var i = 0; i < _childAnimations.length; i++) {\n                            _childAnimations[i].parent(this);\n                            this._chld.push(_childAnimations[i]);\n                        }\n                        return this;\n                    }\n                }, {\n                    key: 'duration',\n                    value: function duration(value) {\n                        if (arguments.length) {\n                            this._duration = value;\n                            return this;\n                        }\n                        return this._duration || this._parent && this._parent.duration() || 0;\n                    }\n                }, {\n                    key: 'clearDuration',\n                    value: function clearDuration() {\n                        this._duration = null;\n                        for (var i = 0, l = this._chld.length; i < l; i++) {\n                            this._chld[i].clearDuration();\n                        }\n                    }\n                }, {\n                    key: 'easing',\n                    value: function easing(name, opts) {\n                        if (arguments.length) {\n                            this._easing = {\n                                name: name,\n                                opts: opts\n                            };\n                            return this;\n                        }\n                        return this._easing || this._parent && this._parent.easing();\n                    }\n                }, {\n                    key: 'playbackRate',\n                    value: function playbackRate(value) {\n                        if (arguments.length) {\n                            this._rate = value;\n                            var i = undefined;\n                            for (i = 0; i < this._chld.length; i++) {\n                                this._chld[i].playbackRate(value);\n                            }\n                            for (i = 0; i < this._ani.length; i++) {\n                                this._ani[i].playbackRate(value);\n                            }\n                            return this;\n                        }\n                        return typeof this._rate !== 'undefined' ? this._rate : this._parent && this._parent.playbackRate();\n                    }\n                }, {\n                    key: 'reverse',\n                    value: function reverse() {\n                        return this.playbackRate(-1);\n                    }\n                }, {\n                    key: 'forward',\n                    value: function forward() {\n                        return this.playbackRate(1);\n                    }\n                }, {\n                    key: 'from',\n                    value: function from(property, value) {\n                        if (!this._from) {\n                            this._from = {};\n                        }\n                        this._from[property] = value;\n                        return this;\n                    }\n                }, {\n                    key: 'to',\n                    value: function to(property, value) {\n                        if (!this._to) {\n                            this._to = {};\n                        }\n                        this._to[property] = value;\n                        return this;\n                    }\n                }, {\n                    key: 'fromTo',\n                    value: function fromTo(property, from, to) {\n                        return this.from(property, from).to(property, to);\n                    }\n                }, {\n                    key: 'fadeIn',\n                    value: function fadeIn() {\n                        return this.fromTo('opacity', 0.001, 1);\n                    }\n                }, {\n                    key: 'fadeOut',\n                    value: function fadeOut() {\n                        return this.fromTo('opacity', 0.999, 0);\n                    }\n                }, {\n                    key: 'play',\n                    value: function play(done) {\n                        var self = this;\n                        // the actual play() method which may or may not start async\n                        function beginPlay(beginPlayDone) {\n                            var tasks = [];\n                            self._chld.forEach(function (childAnimation) {\n                                tasks.push(function (taskDone) {\n                                    childAnimation.play(taskDone);\n                                });\n                            });\n                            self._ani.forEach(function (animation) {\n                                tasks.push(function (taskDone) {\n                                    animation.play(taskDone);\n                                });\n                            });\n                            parallel(tasks, beginPlayDone);\n                        }\n                        if (!self._parent) {\n                            var kickoff = function kickoff() {\n                                // synchronously call all onPlay()'s before play()\n                                self._onPlay();\n                                beginPlay(function () {\n                                    self._onFinish();\n                                    done();\n                                });\n                            };\n\n                            // this is the top level animation and is in full control\n                            // of when the async play() should actually kick off\n                            // stage all animations and child animations at their starting point\n                            self.stage();\n                            var promise = undefined;\n                            if (!done) {\n                                promise = new Promise(function (res) {\n                                    done = res;\n                                });\n                            }\n\n                            if (self._duration > 16 && self._opts.renderDelay > 0) {\n                                // begin each animation when everything is rendered in their starting point\n                                // give the browser some time to render everything in place before starting\n                                rafFrames(self._opts.renderDelay / 16, kickoff);\n                            } else {\n                                // no need to render everything in there place before animating in\n                                // just kick it off immediately to render them in their \"to\" locations\n                                kickoff();\n                            }\n                            return promise;\n                        }\n                        // this is a child animation, it is told exactly when to\n                        // start by the top level animation\n                        beginPlay(done);\n                    }\n                }, {\n                    key: 'stage',\n                    value: function stage() {\n                        // before the RENDER_DELAY\n                        // before the animations have started\n                        if (!this._isStaged) {\n                            this._isStaged = true;\n                            var i = undefined,\n                                p = undefined,\n                                l = undefined,\n                                j = undefined,\n                                ele = undefined,\n                                animation = undefined;\n                            for (i = 0, l = this._chld.length; i < l; i++) {\n                                this._chld[i].stage();\n                            }\n                            for (i = 0; i < this._el.length; i++) {\n                                ele = this._el[i];\n                                for (j = 0; j < this._bfAdd.length; j++) {\n                                    ele.classList.add(this._bfAdd[j]);\n                                }\n                                for (p in this._bfSty) {\n                                    ele.style[p] = this._bfSty[p];\n                                }\n                                for (j = 0; j < this._bfRmv.length; j++) {\n                                    ele.classList.remove(this._bfRmv[j]);\n                                }\n                            }\n                            if (this._to) {\n                                // only animate the elements if there are defined \"to\" effects\n                                for (i = 0; i < this._el.length; i++) {\n                                    animation = new Animate(this._el[i], this._from, this._to, this.duration(), this.easing(), this.playbackRate());\n                                    if (animation.shouldAnimate) {\n                                        this._ani.push(animation);\n                                    }\n                                }\n                            }\n                            for (i = 0; i < this._readys.length; i++) {\n                                this._readys[i](this);\n                            }\n                        }\n                    }\n                }, {\n                    key: '_onPlay',\n                    value: function _onPlay() {\n                        // after the RENDER_DELAY\n                        // before the animations have started\n                        var i = undefined;\n                        this._isFinished = false;\n                        for (i = 0; i < this._chld.length; i++) {\n                            this._chld[i]._onPlay();\n                        }\n                        for (i = 0; i < this._plays.length; i++) {\n                            this._plays[i](this);\n                        }\n                    }\n                }, {\n                    key: '_onFinish',\n                    value: function _onFinish() {\n                        // after the animations have finished\n                        if (!this._isFinished && !this.isProgress) {\n                            this._isFinished = true;\n                            var i = undefined,\n                                j = undefined,\n                                ele = undefined;\n                            for (i = 0; i < this._chld.length; i++) {\n                                this._chld[i]._onFinish();\n                            }\n                            if (this.playbackRate() < 0) {\n                                // reverse direction\n                                for (i = 0; i < this._el.length; i++) {\n                                    ele = this._el[i];\n                                    for (j = 0; j < this._bfAdd.length; j++) {\n                                        ele.classList.remove(this._bfAdd[j]);\n                                    }\n                                    for (j = 0; j < this._bfRmv.length; j++) {\n                                        ele.classList.add(this._bfRmv[j]);\n                                    }\n                                }\n                            } else {\n                                // normal direction\n                                for (i = 0; i < this._el.length; i++) {\n                                    ele = this._el[i];\n                                    for (j = 0; j < this._afAdd.length; j++) {\n                                        ele.classList.add(this._afAdd[j]);\n                                    }\n                                    for (j = 0; j < this._afRmv.length; j++) {\n                                        ele.classList.remove(this._afRmv[j]);\n                                    }\n                                }\n                            }\n                            for (i = 0; i < this._finishes.length; i++) {\n                                this._finishes[i](this);\n                            }\n                        }\n                    }\n                }, {\n                    key: 'pause',\n                    value: function pause() {\n                        var i = undefined;\n                        for (i = 0; i < this._chld.length; i++) {\n                            this._chld[i].pause();\n                        }\n                        for (i = 0; i < this._ani.length; i++) {\n                            this._ani[i].pause();\n                        }\n                    }\n                }, {\n                    key: 'progressStart',\n                    value: function progressStart() {\n                        this.isProgress = true;\n                        for (var i = 0; i < this._chld.length; i++) {\n                            this._chld[i].progressStart();\n                        }\n                        this.duration(1000);\n                        this.play();\n                        this.pause();\n                    }\n                }, {\n                    key: 'progress',\n                    value: function progress(value) {\n                        value = Math.min(1, Math.max(0, value));\n                        this.isProgress = true;\n                        var i = undefined;\n                        for (i = 0; i < this._chld.length; i++) {\n                            this._chld[i].progress(value);\n                        }\n                        for (i = 0; i < this._ani.length; i++) {\n                            this._ani[i].progress(value);\n                        }\n                    }\n\n                    /**\n                     * Get the current time of the first animation\n                     * in the list. To get a specific time of an animation, call\n                     * subAnimationInstance.getCurrentTime()\n                     */\n                }, {\n                    key: 'getCurrentTime',\n                    value: function getCurrentTime() {\n                        if (this._chld.length > 0) {\n                            return this._chld[0].getCurrentTime();\n                        }\n                        if (this._ani.length > 0) {\n                            return this._ani[0].getCurrentTime();\n                        }\n                        return 0;\n                    }\n                }, {\n                    key: 'progressEnd',\n                    value: function progressEnd(shouldComplete) {\n                        var rate = arguments.length <= 1 || arguments[1] === undefined ? 3 : arguments[1];\n\n                        var promises = [];\n                        this.isProgress = false;\n                        for (var i = 0; i < this._chld.length; i++) {\n                            promises.push(this._chld[i].progressEnd(shouldComplete));\n                        }\n                        this._ani.forEach(function (animation) {\n                            if (shouldComplete) {\n                                animation.playbackRate(rate);\n                            } else {\n                                animation.playbackRate(rate * -1);\n                            }\n                            promises.push(new Promise(function (resolve) {\n                                animation.play(resolve);\n                            }));\n                        });\n                        return Promise.all(promises);\n                    }\n                }, {\n                    key: 'onReady',\n                    value: function onReady(fn, clear) {\n                        if (clear) {\n                            this._readys = [];\n                        }\n                        this._readys.push(fn);\n                        return this;\n                    }\n                }, {\n                    key: 'onPlay',\n                    value: function onPlay(fn, clear) {\n                        if (clear) {\n                            this._plays = [];\n                        }\n                        this._plays.push(fn);\n                        return this;\n                    }\n                }, {\n                    key: 'onFinish',\n                    value: function onFinish(fn, clear) {\n                        if (clear) {\n                            this._finishes = [];\n                        }\n                        this._finishes.push(fn);\n                        return this;\n                    }\n                }, {\n                    key: 'clone',\n                    value: function clone() {\n                        function copy(dest, src) {\n                            // undo what stage() may have already done\n                            extend(dest, src);\n                            dest._isFinished = dest._isStaged = dest.isProgress = false;\n                            dest._chld = [];\n                            dest._ani = [];\n                            for (var i = 0; i < src._chld.length; i++) {\n                                dest.add(copy(new Animation(), src._chld[i]));\n                            }\n                            return dest;\n                        }\n                        return copy(new Animation(), this);\n                    }\n                }, {\n                    key: 'dispose',\n                    value: function dispose(removeElement) {\n                        var i = undefined;\n                        for (i = 0; i < this._chld.length; i++) {\n                            this._chld[i].dispose(removeElement);\n                        }\n                        for (i = 0; i < this._ani.length; i++) {\n                            this._ani[i].dispose(removeElement);\n                        }\n                        if (removeElement) {\n                            for (i = 0; i < this._el.length; i++) {\n                                this._el[i].parentNode && this._el[i].parentNode.removeChild(this._el[i]);\n                            }\n                        }\n                        this.reset();\n                    }\n\n                    /*\n                     STATIC CLASSES\n                     */\n                }, {\n                    key: 'before',\n                    get: function get() {\n                        var _this = this;\n\n                        return {\n                            addClass: function addClass(className) {\n                                _this._bfAdd.push(className);\n                                return _this;\n                            },\n                            removeClass: function removeClass(className) {\n                                _this._bfRmv.push(className);\n                                return _this;\n                            },\n                            setStyles: function setStyles(styles) {\n                                _this._bfSty = styles;\n                                return _this;\n                            }\n                        };\n                    }\n                }, {\n                    key: 'after',\n                    get: function get() {\n                        var _this2 = this;\n\n                        return {\n                            addClass: function addClass(className) {\n                                _this2._afAdd.push(className);\n                                return _this2;\n                            },\n                            removeClass: function removeClass(className) {\n                                _this2._afRmv.push(className);\n                                return _this2;\n                            }\n                        };\n                    }\n                }], [{\n                    key: 'create',\n                    value: function create(element, name) {\n                        var AnimationClass = AnimationRegistry[name];\n                        if (!AnimationClass) {\n                            // couldn't find an animation by the given name\n                            // fallback to just the base Animation class\n                            AnimationClass = Animation;\n                        }\n                        return new AnimationClass(element);\n                    }\n                }, {\n                    key: 'createTransition',\n                    value: function createTransition(enteringView, leavingView) {\n                        var opts = arguments.length <= 2 || arguments[2] === undefined ? {} : arguments[2];\n\n                        var TransitionClass = AnimationRegistry[opts.animation];\n                        if (!TransitionClass) {\n                            // didn't find a transition animation, default to ios-transition\n                            TransitionClass = AnimationRegistry['ios-transition'];\n                        }\n                        return new TransitionClass(enteringView, leavingView, opts);\n                    }\n                }, {\n                    key: 'register',\n                    value: function register(name, AnimationClass) {\n                        AnimationRegistry[name] = AnimationClass;\n                    }\n                }]);\n\n                return Animation;\n            })();\n\n            _export('Animation', Animation);\n\n            Animate = (function () {\n                function Animate(ele, fromEffect, toEffect, duration, easingConfig, playbackRate) {\n                    _classCallCheck(this, Animate);\n\n                    // https://w3c.github.io/web-animations/\n                    // not using the direct API methods because they're still in flux\n                    // however, element.animate() seems locked in and uses the latest\n                    // and correct API methods under the hood, so really doesn't matter\n                    if (!fromEffect) {\n                        return console.error(ele.tagName, 'animation fromEffect required, toEffect:', toEffect);\n                    }\n                    this.toEffect = parseEffect(toEffect);\n                    this.shouldAnimate = duration > 32;\n                    if (!this.shouldAnimate) {\n                        return inlineStyle(ele, this.toEffect);\n                    }\n                    this.ele = ele;\n                    // stage where the element will start from\n                    this.fromEffect = parseEffect(fromEffect);\n                    inlineStyle(ele, this.fromEffect);\n                    this.duration = duration;\n                    this.rate = typeof playbackRate !== 'undefined' ? playbackRate : 1;\n                    this.easing = easingConfig && easingConfig.name || 'linear';\n                    this.effects = [convertProperties(this.fromEffect)];\n                    if (this.easing in EASING_FN) {\n                        insertEffects(this.effects, this.fromEffect, this.toEffect, easingConfig);\n                    } else if (this.easing in CUBIC_BEZIERS) {\n                        this.easing = 'cubic-bezier(' + CUBIC_BEZIERS[this.easing] + ')';\n                    }\n                    this.effects.push(convertProperties(this.toEffect));\n                }\n\n                _createClass(Animate, [{\n                    key: 'play',\n                    value: function play(done) {\n                        var self = this;\n                        if (self.ani) {\n                            self.ani.play();\n                        } else {\n                            // https://developers.google.com/web/updates/2014/05/Web-Animations---element-animate-is-now-in-Chrome-36\n                            // https://w3c.github.io/web-animations/\n                            // Future versions will use \"new window.Animation\" rather than \"element.animate()\"\n                            self.ani = self.ele.animate(self.effects, {\n                                duration: self.duration || 0,\n                                easing: self.easing,\n                                playbackRate: self.rate // old way of setting playbackRate, but still necessary\n                            });\n                            self.ani.playbackRate = self.rate;\n                        }\n                        self.ani.onfinish = function () {\n                            // lock in where the element will stop at\n                            // if the playbackRate is negative then it needs to return\n                            // to its \"from\" effects\n                            if (self.ani) {\n                                inlineStyle(self.ele, self.rate < 0 ? self.fromEffect : self.toEffect);\n                                self.ani = self.ani.onfinish = null;\n                                done && done();\n                            }\n                        };\n                    }\n                }, {\n                    key: 'pause',\n                    value: function pause() {\n                        this.ani && this.ani.pause();\n                    }\n                }, {\n                    key: 'progress',\n                    value: function progress(value) {\n                        if (this.ani) {\n                            // passed a number between 0 and 1\n                            if (this.ani.playState !== 'paused') {\n                                this.ani.pause();\n                            }\n                            // don't let the progress finish the animation\n                            // leave it off JUST before it's finished\n                            value = Math.min(0.999, Math.max(0.001, value));\n                            this.ani.currentTime = this.duration * value;\n                        }\n                    }\n                }, {\n                    key: 'getCurrentTime',\n                    value: function getCurrentTime() {\n                        return this.ani && this.ani.currentTime || 0;\n                    }\n                }, {\n                    key: 'playbackRate',\n                    value: function playbackRate(value) {\n                        this.rate = value;\n                        if (this.ani) {\n                            this.ani.playbackRate = value;\n                        }\n                    }\n                }, {\n                    key: 'dispose',\n                    value: function dispose() {\n                        this.ele = this.ani = this.effects = this.toEffect = null;\n                    }\n                }]);\n\n                return Animate;\n            })();\n\n            TRANSFORMS = ['translateX', 'translateY', 'translateZ', 'scale', 'scaleX', 'scaleY', 'scaleZ', 'rotate', 'rotateX', 'rotateY', 'rotateZ', 'skewX', 'skewY', 'perspective'];\n            ANIMATE_PROPERTIES = TRANSFORMS.concat('opacity');\n\n            // Robert Penner's Easing Functions\n            // http://robertpenner.com/easing/\n            CUBIC_BEZIERS = {\n                // default browser suppored easing\n                // ease\n                // ease-in\n                // ease-out\n                // ease-in-out\n                // Cubic\n                'ease-in-cubic': '0.55,0.055,0.675,0.19',\n                'ease-out-cubic': '0.215,0.61,0.355,1',\n                'ease-in-Out-cubic': '0.645,0.045,0.355,1',\n                // Circ\n                'ease-in-circ': '0.6,0.04,0.98,0.335',\n                'ease-out-circ': '0.075,0.82,0.165,1',\n                'ease-in-out-circ': '0.785,0.135,0.15,0.86',\n                // Expo\n                'ease-in-expo': '0.95,0.05,0.795,0.035',\n                'ease-out-expo': '0.19,1,0.22,1',\n                'ease-in-out-expo': '1,0,0,1',\n                // Quad\n                'ease-in-quad': '0.55,0.085,0.68,0.53',\n                'ease-out-quad': '0.25,0.46,0.45,0.94',\n                'ease-in-out-quad': '0.455,0.03,0.515,0.955',\n                // Quart\n                'ease-in-quart': '0.895,0.03,0.685,0.22',\n                'ease-out-quart': '0.165,0.84,0.44,1',\n                'ease-in-out-quart': '0.77,0,0.175,1',\n                // Quint\n                'ease-in-quint': '0.755,0.05,0.855,0.06',\n                'ease-out-quint': '0.23,1,0.32,1',\n                'ease-in-out-quint': '0.86,0,0.07,1',\n                // Sine\n                'ease-in-sine': '0.47,0,0.745,0.715',\n                'ease-out-sine': '0.39,0.575,0.565,1',\n                'ease-in-out-sine': '0.445,0.05,0.55,0.95',\n                // Back\n                'ease-in-back': '0.6,-0.28,0.735,0.045',\n                'ease-out-back': '0.175,0.885,0.32,1.275',\n                'ease-in-out-back': '0.68,-0.55,0.265,1.55'\n            };\n            EASING_FN = {\n                'elastic': function elastic(pos) {\n                    return -1 * Math.pow(4, -8 * pos) * Math.sin((pos * 6 - 1) * (2 * Math.PI) / 2) + 1;\n                },\n                'swing-from-to': function swingFromTo(pos, opts) {\n                    var s = opts.s || 1.70158;\n                    return (pos /= 0.5) < 1 ? 0.5 * (pos * pos * (((s *= 1.525) + 1) * pos - s)) : 0.5 * ((pos -= 2) * pos * (((s *= 1.525) + 1) * pos + s) + 2);\n                },\n                'swing-from': function swingFrom(pos, opts) {\n                    var s = opts.s || 1.70158;\n                    return pos * pos * ((s + 1) * pos - s);\n                },\n                'swing-to': function swingTo(pos, opts) {\n                    var s = opts.s || 1.70158;\n                    return (pos -= 1) * pos * ((s + 1) * pos + s) + 1;\n                },\n                'bounce': function bounce(pos) {\n                    if (pos < 1 / 2.75) {\n                        return 7.5625 * pos * pos;\n                    } else if (pos < 2 / 2.75) {\n                        return 7.5625 * (pos -= 1.5 / 2.75) * pos + 0.75;\n                    } else if (pos < 2.5 / 2.75) {\n                        return 7.5625 * (pos -= 2.25 / 2.75) * pos + 0.9375;\n                    }\n                    return 7.5625 * (pos -= 2.625 / 2.75) * pos + 0.984375;\n                },\n                'bounce-past': function bouncePast(pos) {\n                    if (pos < 1 / 2.75) {\n                        return 7.5625 * pos * pos;\n                    } else if (pos < 2 / 2.75) {\n                        return 2 - (7.5625 * (pos -= 1.5 / 2.75) * pos + 0.75);\n                    } else if (pos < 2.5 / 2.75) {\n                        return 2 - (7.5625 * (pos -= 2.25 / 2.75) * pos + 0.9375);\n                    }\n                    return 2 - (7.5625 * (pos -= 2.625 / 2.75) * pos + 0.984375);\n                },\n                'ease-out-bounce': function easeOutBounce(pos) {\n                    if (pos < 1 / 2.75) {\n                        return 7.5625 * pos * pos;\n                    } else if (pos < 2 / 2.75) {\n                        return 7.5625 * (pos -= 1.5 / 2.75) * pos + 0.75;\n                    } else if (pos < 2.5 / 2.75) {\n                        return 7.5625 * (pos -= 2.25 / 2.75) * pos + 0.9375;\n                    }\n                    return 7.5625 * (pos -= 2.625 / 2.75) * pos + 0.984375;\n                },\n                'ease-from-to': function easeFromTo(pos) {\n                    if ((pos /= 0.5) < 1) return 0.5 * Math.pow(pos, 4);\n                    return -0.5 * ((pos -= 2) * Math.pow(pos, 3) - 2);\n                },\n                'ease-from': function easeFrom(pos, opts) {\n                    return Math.pow(pos, opts.s || 4);\n                },\n                'ease-to': function easeTo(pos, opts) {\n                    return Math.pow(pos, opts.s || 0.25);\n                },\n                /*\n                 * scripty2, Thomas Fuchs (MIT Licence)\n                 * https://raw.github.com/madrobby/scripty2/master/src/effects/transitions/transitions.js\n                 */\n                'spring': function spring(pos, opts) {\n                    var damping = opts.damping || 4.5;\n                    var elasticity = opts.elasticity || 6;\n                    return 1 - Math.cos(pos * damping * Math.PI) * Math.exp(-pos * elasticity);\n                },\n                'sinusoidal': function sinusoidal(pos) {\n                    return -Math.cos(pos * Math.PI) / 2 + 0.5;\n                }\n            };\n            AnimationRegistry = {};\n        }\n    };\n});\nSystem.register('ionic/animations/builtins', ['./animation'], function (_export) {\n    'use strict';\n\n    var Animation, SlideIn, SlideOut, FadeIn, FadeOut;\n\n    var _get = function get(_x, _x2, _x3) { var _again = true; _function: while (_again) { var object = _x, property = _x2, receiver = _x3; _again = false; if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { _x = parent; _x2 = property; _x3 = receiver; _again = true; desc = parent = undefined; continue _function; } } else if ('value' in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } } };\n\n    function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\n    function _inherits(subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\n    return {\n        setters: [function (_animation) {\n            Animation = _animation.Animation;\n        }],\n        execute: function () {\n            SlideIn = (function (_Animation) {\n                _inherits(SlideIn, _Animation);\n\n                function SlideIn(element) {\n                    _classCallCheck(this, SlideIn);\n\n                    _get(Object.getPrototypeOf(SlideIn.prototype), 'constructor', this).call(this, element);\n                    this.easing('cubic-bezier(0.1,0.7,0.1,1)').duration(400).fromTo('translateY', '100%', '0%');\n                }\n\n                return SlideIn;\n            })(Animation);\n\n            Animation.register('slide-in', SlideIn);\n\n            SlideOut = (function (_Animation2) {\n                _inherits(SlideOut, _Animation2);\n\n                function SlideOut(element) {\n                    _classCallCheck(this, SlideOut);\n\n                    _get(Object.getPrototypeOf(SlideOut.prototype), 'constructor', this).call(this, element);\n                    this.easing('ease-out').duration(250).fromTo('translateY', '0%', '100%');\n                }\n\n                return SlideOut;\n            })(Animation);\n\n            Animation.register('slide-out', SlideOut);\n\n            FadeIn = (function (_Animation3) {\n                _inherits(FadeIn, _Animation3);\n\n                function FadeIn(element) {\n                    _classCallCheck(this, FadeIn);\n\n                    _get(Object.getPrototypeOf(FadeIn.prototype), 'constructor', this).call(this, element);\n                    this.easing('ease-in').duration(400).fadeIn();\n                }\n\n                return FadeIn;\n            })(Animation);\n\n            Animation.register('fade-in', FadeIn);\n\n            FadeOut = (function (_Animation4) {\n                _inherits(FadeOut, _Animation4);\n\n                function FadeOut(element) {\n                    _classCallCheck(this, FadeOut);\n\n                    _get(Object.getPrototypeOf(FadeOut.prototype), 'constructor', this).call(this, element);\n                    this.easing('ease-out').duration(250).fadeOut();\n                }\n\n                return FadeOut;\n            })(Animation);\n\n            Animation.register('fade-out', FadeOut);\n        }\n    };\n});\nSystem.register('ionic/animations/ios-transition', ['./animation'], function (_export) {\n    'use strict';\n\n    var Animation, DURATION, EASING, OPACITY, TRANSLATEX, OFF_RIGHT, OFF_LEFT, CENTER, OFF_OPACITY, SHOW_BACK_BTN_CSS, IOSTransition;\n\n    var _get = function get(_x, _x2, _x3) { var _again = true; _function: while (_again) { var object = _x, property = _x2, receiver = _x3; _again = false; if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { _x = parent; _x2 = property; _x3 = receiver; _again = true; desc = parent = undefined; continue _function; } } else if ('value' in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } } };\n\n    function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\n    function _inherits(subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\n    return {\n        setters: [function (_animation) {\n            Animation = _animation.Animation;\n        }],\n        execute: function () {\n            DURATION = 400;\n            EASING = 'cubic-bezier(0.36,0.66,0.04,1)';\n            OPACITY = 'opacity';\n            TRANSLATEX = 'translateX';\n            OFF_RIGHT = '99.5%';\n            OFF_LEFT = '-33%';\n            CENTER = '0%';\n            OFF_OPACITY = 0.8;\n            SHOW_BACK_BTN_CSS = 'show-back-button';\n\n            IOSTransition = (function (_Animation) {\n                _inherits(IOSTransition, _Animation);\n\n                function IOSTransition(enteringView, leavingView, opts) {\n                    _classCallCheck(this, IOSTransition);\n\n                    _get(Object.getPrototypeOf(IOSTransition.prototype), 'constructor', this).call(this, null, opts);\n                    this.duration(DURATION);\n                    this.easing(EASING);\n                    // what direction is the transition going\n                    var backDirection = opts.direction === 'back';\n                    // do they have navbars?\n                    var enteringHasNavbar = enteringView.hasNavbar();\n                    var leavingHasNavbar = leavingView && leavingView.hasNavbar();\n                    var enteringPage = new Animation(enteringView.pageRef());\n                    enteringPage.before.addClass('show-page');\n                    this.add(enteringPage);\n                    // entering content\n                    var enteringContent = new Animation(enteringView.contentRef());\n                    this.add(enteringContent);\n                    if (backDirection) {\n                        // entering content, back direction\n                        enteringContent.fromTo(TRANSLATEX, OFF_LEFT, CENTER).fromTo(OPACITY, OFF_OPACITY, 1);\n                    } else {\n                        // entering content, forward direction\n                        enteringContent.fromTo(TRANSLATEX, OFF_RIGHT, CENTER).fromTo(OPACITY, 1, 1);\n                    }\n                    if (enteringHasNavbar) {\n                        // entering page has a navbar\n                        var enteringNavBar = new Animation(enteringView.navbarRef());\n                        enteringNavBar.before.addClass('show-navbar');\n                        this.add(enteringNavBar);\n                        var enteringTitle = new Animation(enteringView.titleRef());\n                        var enteringNavbarItems = new Animation(enteringView.navbarItemRefs());\n                        var enteringNavbarBg = new Animation(enteringView.navbarBgRef());\n                        var enteringBackButton = new Animation(enteringView.backBtnRef());\n                        enteringNavBar.add(enteringTitle).add(enteringNavbarItems).add(enteringNavbarBg).add(enteringBackButton);\n                        enteringTitle.fadeIn();\n                        enteringNavbarItems.fadeIn();\n                        // set properties depending on direction\n                        if (backDirection) {\n                            // entering navbar, back direction\n                            enteringTitle.fromTo(TRANSLATEX, OFF_LEFT, CENTER);\n                            if (enteringView.enableBack()) {\n                                // back direction, entering page has a back button\n                                enteringBackButton.before.addClass(SHOW_BACK_BTN_CSS).fadeIn();\n                            }\n                        } else {\n                            // entering navbar, forward direction\n                            enteringTitle.fromTo(TRANSLATEX, OFF_RIGHT, CENTER);\n                            if (leavingHasNavbar) {\n                                // entering navbar, forward direction, and there's a leaving navbar\n                                // should just fade in, no sliding\n                                enteringNavbarBg.fromTo(TRANSLATEX, CENTER, CENTER).fadeIn();\n                            } else {\n                                // entering navbar, forward direction, and there's no leaving navbar\n                                // should just slide in, no fading in\n                                enteringNavbarBg.fromTo(TRANSLATEX, OFF_RIGHT, CENTER).fromTo(OPACITY, 1, 1);\n                            }\n                            if (enteringView.enableBack()) {\n                                // forward direction, entering page has a back button\n                                enteringBackButton.before.addClass(SHOW_BACK_BTN_CSS).fadeIn();\n                                var enteringBackBtnText = new Animation(enteringView.backBtnTextRef());\n                                enteringBackBtnText.fromTo(TRANSLATEX, '100px', '0px');\n                                enteringNavBar.add(enteringBackBtnText);\n                            } else {\n                                enteringBackButton.before.removeClass(SHOW_BACK_BTN_CSS);\n                            }\n                        }\n                    }\n                    // setup leaving view\n                    if (leavingView) {\n                        // leaving content\n                        var leavingContent = new Animation(leavingView.contentRef());\n                        this.add(leavingContent);\n                        if (backDirection) {\n                            // leaving content, back direction\n                            leavingContent.fromTo(TRANSLATEX, CENTER, '100%').fromTo(OPACITY, 1, 1);\n                        } else {\n                            // leaving content, forward direction\n                            leavingContent.fromTo(TRANSLATEX, CENTER, OFF_LEFT).fromTo(OPACITY, 1, OFF_OPACITY);\n                        }\n                        if (leavingHasNavbar) {\n                            // leaving page has a navbar\n                            var leavingNavBar = new Animation(leavingView.navbarRef());\n                            var leavingBackButton = new Animation(leavingView.backBtnRef());\n                            var leavingTitle = new Animation(leavingView.titleRef());\n                            var leavingNavbarItems = new Animation(leavingView.navbarItemRefs());\n                            var leavingNavbarBg = new Animation(leavingView.navbarBgRef());\n                            leavingNavBar.add(leavingBackButton).add(leavingTitle).add(leavingNavbarItems).add(leavingNavbarBg);\n                            this.add(leavingNavBar);\n                            // fade out leaving navbar items\n                            leavingBackButton.fadeOut();\n                            leavingTitle.fadeOut();\n                            leavingNavbarItems.fadeOut();\n                            if (backDirection) {\n                                // leaving navbar, back direction\n                                leavingTitle.fromTo(TRANSLATEX, CENTER, '100%');\n                                if (enteringHasNavbar) {\n                                    // leaving navbar, back direction, and there's an entering navbar\n                                    // should just fade out, no sliding\n                                    leavingNavbarBg.fromTo(TRANSLATEX, CENTER, CENTER).fadeOut();\n                                } else {\n                                    // leaving navbar, back direction, and there's no entering navbar\n                                    // should just slide out, no fading out\n                                    leavingNavbarBg.fromTo(TRANSLATEX, CENTER, '100%').fromTo(OPACITY, 1, 1);\n                                }\n                                var leavingBackBtnText = new Animation(leavingView.backBtnTextRef());\n                                leavingBackBtnText.fromTo(TRANSLATEX, CENTER, 300 + 'px');\n                                leavingNavBar.add(leavingBackBtnText);\n                            } else {\n                                // leaving navbar, forward direction\n                                leavingTitle.fromTo(TRANSLATEX, CENTER, OFF_LEFT);\n                            }\n                        }\n                    }\n                }\n\n                return IOSTransition;\n            })(Animation);\n\n            Animation.register('ios-transition', IOSTransition);\n        }\n    };\n});\nSystem.register('ionic/animations/md-transition', ['./animation'], function (_export) {\n    'use strict';\n\n    var Animation, TRANSLATEY, OFF_BOTTOM, CENTER, SHOW_BACK_BTN_CSS, MDTransition;\n\n    var _get = function get(_x, _x2, _x3) { var _again = true; _function: while (_again) { var object = _x, property = _x2, receiver = _x3; _again = false; if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { _x = parent; _x2 = property; _x3 = receiver; _again = true; desc = parent = undefined; continue _function; } } else if ('value' in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } } };\n\n    function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\n    function _inherits(subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\n    return {\n        setters: [function (_animation) {\n            Animation = _animation.Animation;\n        }],\n        execute: function () {\n            TRANSLATEY = 'translateY';\n            OFF_BOTTOM = '40px';\n            CENTER = '0px';\n            SHOW_BACK_BTN_CSS = 'show-back-button';\n\n            MDTransition = (function (_Animation) {\n                _inherits(MDTransition, _Animation);\n\n                function MDTransition(enteringView, leavingView, opts) {\n                    _classCallCheck(this, MDTransition);\n\n                    _get(Object.getPrototypeOf(MDTransition.prototype), 'constructor', this).call(this, null, opts);\n                    // what direction is the transition going\n                    var backDirection = opts.direction === 'back';\n                    // do they have navbars?\n                    var enteringHasNavbar = enteringView.hasNavbar();\n                    var leavingHasNavbar = leavingView && leavingView.hasNavbar();\n                    // entering content item moves in bottom to center\n                    var enteringPage = new Animation(enteringView.pageRef());\n                    enteringPage.before.addClass('show-page');\n                    this.add(enteringPage);\n                    if (backDirection) {\n                        this.duration(200).easing('cubic-bezier(0.47,0,0.745,0.715)');\n                        enteringPage.fromTo(TRANSLATEY, CENTER, CENTER);\n                    } else {\n                        this.duration(280).easing('cubic-bezier(0.36,0.66,0.04,1)');\n                        enteringPage.fromTo(TRANSLATEY, OFF_BOTTOM, CENTER).fadeIn();\n                    }\n                    if (enteringHasNavbar) {\n                        var enteringNavBar = new Animation(enteringView.navbarRef());\n                        enteringNavBar.before.addClass('show-navbar');\n                        this.add(enteringNavBar);\n                        var enteringBackButton = new Animation(enteringView.backBtnRef());\n                        this.add(enteringBackButton);\n                        if (enteringView.enableBack()) {\n                            enteringBackButton.before.addClass(SHOW_BACK_BTN_CSS);\n                        } else {\n                            enteringBackButton.before.removeClass(SHOW_BACK_BTN_CSS);\n                        }\n                    }\n                    // setup leaving view\n                    if (leavingView && backDirection) {\n                        // leaving content\n                        this.duration(200).easing('cubic-bezier(0.47,0,0.745,0.715)');\n                        var leavingPage = new Animation(leavingView.pageRef());\n                        this.add(leavingPage.fromTo(TRANSLATEY, CENTER, OFF_BOTTOM).fadeOut());\n                    }\n                }\n\n                return MDTransition;\n            })(Animation);\n\n            Animation.register('md-transition', MDTransition);\n        }\n    };\n});\nSystem.register('ionic/animations/scroll-to', ['../util/dom'], function (_export) {\n    'use strict';\n\n    var raf, ScrollTo;\n\n    var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();\n\n    function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\n    // decelerating to zero velocity\n    function easeOutCubic(t) {\n        return --t * t * t + 1;\n    }\n    return {\n        setters: [function (_utilDom) {\n            raf = _utilDom.raf;\n        }],\n        execute: function () {\n            ScrollTo = (function () {\n                function ScrollTo(ele, x, y, duration) {\n                    _classCallCheck(this, ScrollTo);\n\n                    if (typeof ele === 'string') {\n                        // string query selector\n                        ele = document.querySelector(ele);\n                    }\n                    if (ele) {\n                        if (ele.nativeElement) {\n                            // angular ElementRef\n                            ele = ele.nativeElement;\n                        }\n                        if (ele.nodeType === 1) {\n                            this._el = ele;\n                        }\n                    }\n                }\n\n                _createClass(ScrollTo, [{\n                    key: 'start',\n                    value: function start(x, y, duration, tolerance) {\n                        // scroll animation loop w/ easing\n                        // credit https://gist.github.com/dezinezync/5487119\n                        var self = this;\n                        if (!self._el) {\n                            // invalid element\n                            return Promise.resolve();\n                        }\n                        x = x || 0;\n                        y = y || 0;\n                        tolerance = tolerance || 0;\n                        var fromY = self._el.scrollTop;\n                        var fromX = self._el.scrollLeft;\n                        var xDistance = Math.abs(x - fromX);\n                        var yDistance = Math.abs(y - fromY);\n                        if (yDistance <= tolerance && xDistance <= tolerance) {\n                            // prevent scrolling if already close to there\n                            self._el = null;\n                            return Promise.resolve();\n                        }\n                        return new Promise(function (resolve, reject) {\n                            var start = undefined;\n                            // start scroll loop\n                            self.isPlaying = true;\n                            // chill out for a frame first\n                            raf(function () {\n                                start = Date.now();\n                                raf(step);\n                            });\n                            // scroll loop\n                            function step() {\n                                if (!self._el) {\n                                    return resolve();\n                                }\n                                var time = Math.min(1, (Date.now() - start) / duration);\n                                // where .5 would be 50% of time on a linear scale easedT gives a\n                                // fraction based on the easing method\n                                var easedT = easeOutCubic(time);\n                                if (fromY != y) {\n                                    self._el.scrollTop = Math.round(easedT * (y - fromY) + fromY);\n                                }\n                                if (fromX != x) {\n                                    self._el.scrollLeft = Math.round(easedT * (x - fromX) + fromX);\n                                }\n                                if (time < 1 && self.isPlaying) {\n                                    raf(step);\n                                } else if (!self.isPlaying) {\n                                    // stopped\n                                    self._el = null;\n                                    reject();\n                                } else {\n                                    // done\n                                    self._el = null;\n                                    resolve();\n                                }\n                            }\n                        });\n                    }\n                }, {\n                    key: 'stop',\n                    value: function stop() {\n                        this.isPlaying = false;\n                    }\n                }, {\n                    key: 'dispose',\n                    value: function dispose() {\n                        this.stop();\n                        this._el = null;\n                    }\n                }]);\n\n                return ScrollTo;\n            })();\n\n            _export('ScrollTo', ScrollTo);\n        }\n    };\n});\nSystem.register('ionic/config/bootstrap', ['angular2/core', 'angular2/router', 'angular2/http', '../components/app/app', './config', '../platform/platform', '../util/form', '../util/keyboard', '../util/events', '../components/nav/nav-registry', '../translation/translate', '../util/click-block', '../util/feature-detect', '../components/tap-click/tap-click', '../util/dom'], function (_export) {\n    /**\n     * @private\n     */\n    'use strict';\n\n    var provide, ROUTER_PROVIDERS, LocationStrategy, HashLocationStrategy, HTTP_PROVIDERS, IonicApp, Config, Platform, Form, Keyboard, Events, NavRegistry, Translate, ClickBlock, FeatureDetect, TapClick, closest;\n\n    _export('ionicProviders', ionicProviders);\n\n    function ionicProviders() {\n        var args = arguments.length <= 0 || arguments[0] === undefined ? {} : arguments[0];\n\n        var platform = new Platform();\n        var navRegistry = new NavRegistry(args.pages);\n        var config = args.config;\n        if (!(config instanceof Config)) {\n            config = new Config(config);\n        }\n        platform.url(window.location.href);\n        platform.userAgent(window.navigator.userAgent);\n        platform.navigatorPlatform(window.navigator.platform);\n        platform.load();\n        config.setPlatform(platform);\n        var clickBlock = new ClickBlock(config.get('clickBlock'));\n        var events = new Events();\n        var featureDetect = new FeatureDetect();\n        setupDom(window, document, config, platform, clickBlock, featureDetect);\n        bindEvents(window, document, platform, events);\n        // prepare the ready promise to fire....when ready\n        platform.prepareReady(config);\n        return [IonicApp, provide(ClickBlock, { useValue: clickBlock }), provide(Config, { useValue: config }), provide(Platform, { useValue: platform }), provide(FeatureDetect, { useValue: featureDetect }), provide(Events, { useValue: events }), provide(NavRegistry, { useValue: navRegistry }), TapClick, Form, Keyboard, Translate, ROUTER_PROVIDERS, provide(LocationStrategy, { useClass: HashLocationStrategy }), HTTP_PROVIDERS];\n    }\n\n    function setupDom(window, document, config, platform, clickBlock, featureDetect) {\n        var bodyEle = document.body;\n        var mode = config.get('mode');\n        // if dynamic mode links have been added the fire up the correct one\n        var modeLinkAttr = mode + '-href';\n        var linkEle = document.head.querySelector('link[' + modeLinkAttr + ']');\n        if (linkEle) {\n            var href = linkEle.getAttribute(modeLinkAttr);\n            linkEle.removeAttribute(modeLinkAttr);\n            linkEle.href = href;\n        }\n        // set the mode class name\n        // ios/md\n        bodyEle.classList.add(mode);\n        // language and direction\n        platform.setDir(document.documentElement.dir, false);\n        platform.setLang(document.documentElement.lang, false);\n        var versions = platform.versions();\n        platform.platforms().forEach(function (platformName) {\n            // platform-ios\n            var platformClass = 'platform-' + platformName;\n            bodyEle.classList.add(platformClass);\n            var platformVersion = versions[platformName];\n            if (platformVersion) {\n                // platform-ios9\n                platformClass += platformVersion.major;\n                bodyEle.classList.add(platformClass);\n                // platform-ios9_3\n                bodyEle.classList.add(platformClass + '_' + platformVersion.minor);\n            }\n        });\n        // touch devices should not use :hover CSS pseudo\n        // enable :hover CSS when the \"hoverCSS\" setting is not false\n        if (config.get('hoverCSS') !== false) {\n            bodyEle.classList.add('enable-hover');\n        }\n        if (config.get('clickBlock')) {\n            clickBlock.enable();\n        }\n        // run feature detection tests\n        featureDetect.run(window, document);\n    }\n    /**\n     * Bind some global events and publish on the 'app' channel\n     */\n    function bindEvents(window, document, platform, events) {\n        window.addEventListener('online', function (ev) {\n            events.publish('app:online', ev);\n        }, false);\n        window.addEventListener('offline', function (ev) {\n            events.publish('app:offline', ev);\n        }, false);\n        window.addEventListener('orientationchange', function (ev) {\n            events.publish('app:rotated', ev);\n        });\n        // When that status taps, we respond\n        window.addEventListener('statusTap', function (ev) {\n            // TODO: Make this more better\n            var el = document.elementFromPoint(platform.width() / 2, platform.height() / 2);\n            if (!el) {\n                return;\n            }\n            var content = closest(el, 'scroll-content');\n            if (content) {\n                var scrollTo = new ScrollTo(content);\n                scrollTo.start(0, 0, 300, 0);\n            }\n        });\n        // start listening for resizes XXms after the app starts\n        setTimeout(function () {\n            window.addEventListener('resize', function () {\n                platform.windowResize();\n            });\n        }, 2000);\n    }\n    return {\n        setters: [function (_angular2Core) {\n            provide = _angular2Core.provide;\n        }, function (_angular2Router) {\n            ROUTER_PROVIDERS = _angular2Router.ROUTER_PROVIDERS;\n            LocationStrategy = _angular2Router.LocationStrategy;\n            HashLocationStrategy = _angular2Router.HashLocationStrategy;\n        }, function (_angular2Http) {\n            HTTP_PROVIDERS = _angular2Http.HTTP_PROVIDERS;\n        }, function (_componentsAppApp) {\n            IonicApp = _componentsAppApp.IonicApp;\n        }, function (_config) {\n            Config = _config.Config;\n        }, function (_platformPlatform) {\n            Platform = _platformPlatform.Platform;\n        }, function (_utilForm) {\n            Form = _utilForm.Form;\n        }, function (_utilKeyboard) {\n            Keyboard = _utilKeyboard.Keyboard;\n        }, function (_utilEvents) {\n            Events = _utilEvents.Events;\n        }, function (_componentsNavNavRegistry) {\n            NavRegistry = _componentsNavNavRegistry.NavRegistry;\n        }, function (_translationTranslate) {\n            Translate = _translationTranslate.Translate;\n        }, function (_utilClickBlock) {\n            ClickBlock = _utilClickBlock.ClickBlock;\n        }, function (_utilFeatureDetect) {\n            FeatureDetect = _utilFeatureDetect.FeatureDetect;\n        }, function (_componentsTapClickTapClick) {\n            TapClick = _componentsTapClickTapClick.TapClick;\n        }, function (_utilDom) {\n            closest = _utilDom.closest;\n        }],\n        execute: function () {}\n    };\n});\nSystem.register('ionic/config/config', ['../platform/platform', '../util/util'], function (_export) {\n    /**\n    * @ngdoc service\n    * @name Config\n    * @module ionic\n    * @description\n    * Config allows you to set the modes of your components\n    */\n\n    /**\n     * @name Config\n     * @demo /docs/v3/demos/config/\n     * @description\n     * Config lets you change multiple or a single value in an apps mode configuration. Things such as tab placement, icon changes, and view animations can be set here.\n     *\n     * ```ts\n     * @App({\n     *   template: `<ion-nav [root]=\"root\"></ion-nav>`\n     *   config: {\n     *     backButtonText: 'Go Back',\n     *     iconMode: 'ios',\n     *     modalEnter: 'modal-slide-in',\n     *     modalLeave: 'modal-slide-out',\n     *     tabbarPlacement: 'bottom',\n     *     pageTransition: 'ios',\n     *   }\n     * })\n     * ```\n     *\n     * Config can be overwritting at multiple levels, allowing deeper configuration. Taking the example from earlier, we can override any setting we want based on a platform.\n     * ```ts\n     * @App({\n     *   template: `<ion-nav [root]=\"root\"></ion-nav>`\n     *   config: {\n     *     tabbarPlacement: 'bottom',\n     *     platforms: {\n     *      ios: {\n     *        tabbarPlacement: 'top',\n     *      }\n     *     }\n     *   }\n     * })\n     * ```\n     *\n     * We could also configure these values at a component level. Take `tabbarPlacement`, we can configure this as a property on our `ion-tabs`.\n     *\n     * ```html\n     * <ion-tabs tabbarPlacement=\"top\">\n     *    <ion-tab tabTitle=\"Dash\" tabIcon=\"pulse\" [root]=\"tabRoot\"></ion-tab>\n     *  </ion-tabs>\n     * ```\n     *\n     * The property will override anything else set in the apps.\n     *\n     * The last way we could configure is through URL query strings. This is useful for testing while in the browser.\n     * Simply add `?ionic<PROPERTYNAME>=<value>` to the url.\n     *\n     * ```bash\n     * http://localhost:8100/?ionicTabbarPlacement=bottom\n     * ```\n     *\n     * Custom values can be added to config, and looked up at a later point in time.\n     *\n     * ``` javascript\n     * config.set('ios', 'favoriteColor', 'green');\n     * // from any page in your app:\n     * config.get('favoriteColor'); // 'green'\n     * ```\n     *\n     *\n     * A config value can come from anywhere and be anything, but there are a default set of values.\n     *\n     *\n     * | Config property            | Default iOS Value      | Default MD Value          |\n     * |----------------------------|------------------------|---------------------------|\n     * | activator                  | highlight              | ripple                    |\n     * | actionSheetEnter           | action-sheet-slide-in  | action-sheet-md-slide-in  |\n     * | actionSheetLeave           | action-sheet-slide-out | action-sheet-md-slide-out |\n     * | alertEnter                 | alert-pop-in           | alert-md-pop-in           |\n     * | alertLeave                 | alert-pop-out          | alert-md-pop-out          |\n     * | backButtonText             | Back                   |                           |\n     * | backButtonIcon             | ion-ios-arrow-back     | ion-md-arrow-back         |\n     * | iconMode                   | ios                    | md                        |\n     * | menuType                   | reveal                 | overlay                   |\n     * | modalEnter                 | modal-slide-in         | modal-md-slide-in         |\n     * | modalLeave                 | modal-slide-out        | modal-md-slide-out        |\n     * | pageTransition             | ios-transition         | md-transition             |\n     * | pageTransitionDelay        | 16                     | 120                       |\n     * | tabbarPlacement            | bottom                 | top                       |\n     * | tabbarHighlight            |                        | top                       |\n     * | tabSubPage                 |                        | true                      |\n     *\n    **/\n    'use strict';\n\n    var Platform, isObject, isDefined, isFunction, isArray, Config, modeConfigs;\n\n    var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();\n\n    function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\n    return {\n        setters: [function (_platformPlatform) {\n            Platform = _platformPlatform.Platform;\n        }, function (_utilUtil) {\n            isObject = _utilUtil.isObject;\n            isDefined = _utilUtil.isDefined;\n            isFunction = _utilUtil.isFunction;\n            isArray = _utilUtil.isArray;\n        }],\n        execute: function () {\n            Config = (function () {\n                function Config(config) {\n                    _classCallCheck(this, Config);\n\n                    this._s = config && isObject(config) && !isArray(config) ? config : {};\n                    this._c = {}; // cached values\n                }\n\n                /**\n                 * For setting and getting multiple config values\n                 */\n                /**\n                 * @private\n                 * @name settings()\n                 * @description\n                 */\n\n                _createClass(Config, [{\n                    key: 'settings',\n                    value: function settings() {\n                        var args = arguments;\n                        switch (args.length) {\n                            case 0:\n                                return this._s;\n                            case 1:\n                                // settings({...})\n                                this._s = args[0];\n                                this._c = {}; // clear cache\n                                break;\n                            case 2:\n                                // settings('ios', {...})\n                                this._s.platforms = this._s.platforms || {};\n                                this._s.platforms[args[0]] = args[1];\n                                this._c = {}; // clear cache\n                                break;\n                        }\n                        return this;\n                    }\n\n                    /**\n                     * @name set\n                     * @description\n                     * Sets a single config value.\n                     *\n                     * @param {String} [platform] - The platform (either 'ios' or 'android') that the config value should apply to. Leaving this blank will apply the config value to all platforms.\n                     * @param {String} [key] - The key used to look up the value at a later point in time.\n                     * @param {String} [value] - The config value being stored.\n                     */\n                }, {\n                    key: 'set',\n                    value: function set() {\n                        var args = arguments;\n                        var arg0 = args[0];\n                        var arg1 = args[1];\n                        switch (args.length) {\n                            case 2:\n                                // set('key', 'value') = set key/value pair\n                                // arg1 = value\n                                this._s[arg0] = arg1;\n                                delete this._c[arg0]; // clear cache\n                                break;\n                            case 3:\n                                // setting('ios', 'key', 'value') = set key/value pair for platform\n                                // arg0 = platform\n                                // arg1 = key\n                                // arg2 = value\n                                this._s.platforms = this._s.platforms || {};\n                                this._s.platforms[arg0] = this._s.platforms[arg0] || {};\n                                this._s.platforms[arg0][arg1] = args[2];\n                                delete this._c[arg1]; // clear cache\n                                break;\n                        }\n                        return this;\n                    }\n\n                    /**\n                     * @name get\n                     * @description\n                     * Returns a single config value, given a key.\n                     *\n                     * @param {String} [key] - the key for the config value\n                     */\n                }, {\n                    key: 'get',\n                    value: function get(key) {\n                        if (!isDefined(this._c[key])) {\n                            if (!isDefined(key)) {\n                                throw 'config key is not defined';\n                            }\n                            // if the value was already set this will all be skipped\n                            // if there was no user config then it'll check each of\n                            // the user config's platforms, which already contains\n                            // settings from default platform configs\n                            var userPlatformValue = undefined;\n                            var userDefaultValue = this._s[key];\n                            var userPlatformModeValue = undefined;\n                            var userDefaultModeValue = undefined;\n                            var platformValue = undefined;\n                            var platformModeValue = undefined;\n                            var configObj = null;\n                            if (this.platform) {\n                                var queryStringValue = this.platform.query('ionic' + key.toLowerCase());\n                                if (isDefined(queryStringValue)) {\n                                    return this._c[key] = queryStringValue === 'true' ? true : queryStringValue === 'false' ? false : queryStringValue;\n                                }\n                                // check the platform settings object for this value\n                                // loop though each of the active platforms\n                                // array of active platforms, which also knows the hierarchy,\n                                // with the last one the most important\n                                var activePlatformKeys = this.platform.platforms();\n                                // loop through all of the active platforms we're on\n                                for (var i = 0, l = activePlatformKeys.length; i < l; i++) {\n                                    // get user defined platform values\n                                    if (this._s.platforms) {\n                                        configObj = this._s.platforms[activePlatformKeys[i]];\n                                        if (configObj) {\n                                            if (isDefined(configObj[key])) {\n                                                userPlatformValue = configObj[key];\n                                            }\n                                            configObj = Config.getModeConfig(configObj.mode);\n                                            if (configObj && isDefined(configObj[key])) {\n                                                userPlatformModeValue = configObj[key];\n                                            }\n                                        }\n                                    }\n                                    // get default platform's setting\n                                    configObj = Platform.get(activePlatformKeys[i]);\n                                    if (configObj && configObj.settings) {\n                                        if (isDefined(configObj.settings[key])) {\n                                            // found a setting for this platform\n                                            platformValue = configObj.settings[key];\n                                        }\n                                        configObj = Config.getModeConfig(configObj.settings.mode);\n                                        if (configObj && isDefined(configObj[key])) {\n                                            // found setting for this platform's mode\n                                            platformModeValue = configObj[key];\n                                        }\n                                    }\n                                }\n                            }\n                            configObj = Config.getModeConfig(this._s.mode);\n                            if (configObj && isDefined(configObj[key])) {\n                                userDefaultModeValue = configObj[key];\n                            }\n                            // cache the value\n                            this._c[key] = isDefined(userPlatformValue) ? userPlatformValue : isDefined(userDefaultValue) ? userDefaultValue : isDefined(userPlatformModeValue) ? userPlatformModeValue : isDefined(userDefaultModeValue) ? userDefaultModeValue : isDefined(platformValue) ? platformValue : isDefined(platformModeValue) ? platformModeValue : null;\n                        }\n                        // return key's value\n                        // either it came directly from the user config\n                        // or it was from the users platform configs\n                        // or it was from the default platform configs\n                        // in that order\n                        if (isFunction(this._c[key])) {\n                            return this._c[key](this.platform);\n                        }\n                        return this._c[key];\n                    }\n\n                    /**\n                     * @private\n                     */\n                }, {\n                    key: 'setPlatform',\n                    value: function setPlatform(platform) {\n                        this.platform = platform;\n                    }\n                }], [{\n                    key: 'setModeConfig',\n                    value: function setModeConfig(mode, config) {\n                        modeConfigs[mode] = config;\n                    }\n                }, {\n                    key: 'getModeConfig',\n                    value: function getModeConfig(mode) {\n                        return modeConfigs[mode] || null;\n                    }\n                }]);\n\n                return Config;\n            })();\n\n            _export('Config', Config);\n\n            modeConfigs = {};\n        }\n    };\n});\nSystem.register('ionic/config/directives', ['angular2/common', '../components/overlay/overlay', '../components/menu/menu', '../components/menu/menu-toggle', '../components/menu/menu-close', '../components/button/button', '../components/blur/blur', '../components/content/content', '../components/scroll/scroll', '../components/scroll/pull-to-refresh', '../components/slides/slides', '../components/tabs/tabs', '../components/tabs/tab', '../components/list/list', '../components/item/item', '../components/item/item-sliding', '../components/toolbar/toolbar', '../components/icon/icon', '../components/checkbox/checkbox', '../components/toggle/toggle', '../components/text-input/text-input', '../components/label/label', '../components/segment/segment', '../components/radio/radio', '../components/searchbar/searchbar', '../components/nav/nav', '../components/nav/nav-push', '../components/nav/nav-router', '../components/navbar/navbar', '../components/app/id', '../components/show-hide-when/show-hide-when'], function (_export) {\n  /**\n   * @name IONIC_DIRECTIVES\n   * @private\n   * @description\n   * The core Ionic directives as well as Angular's CORE_DIRECTIVES and\n   * FORM_DIRECTIVES.  Automatically available in every [@Page](../Page/) template.\n   *\n   * **Angular**\n   * - CORE_DIRECTIVES\n   * - FORM_DIRECTIVES\n   *\n   * **Content**\n   * -  Menu\n   * -  MenuToggle\n   * -  MenuClose\n   *\n   * -  Button\n   * -  Blur\n   * -  Content\n   * -  Scroll\n   * -  Refresher\n   *\n   * **Lists**\n   * -  List\n   * -  ListHeader\n   * -  Item\n   * -  ItemSliding\n   *\n   * **Slides**\n   * -  Slides\n   * -  Slide\n   * -  SlideLazy\n   *\n   * **Tabs**\n   * -  Tabs\n   * -  Tab\n   *\n   * **Toolbar**\n   * -  Toolbar\n   * -  ToolbarTitle\n   * -  ToolbarItem\n   *\n   * **Media**\n   * -  Icon\n   *\n   * **Forms**\n   * -  Searchbar\n   * -  Segment\n   * -  SegmentButton\n   * -  Checkbox\n   * -  RadioGroup\n   * -  RadioButton\n   * -  Toggle\n   * -  TextInput\n   * -  TextInputElement\n   * -  Label\n   *\n   * **Nav**\n   * -  Nav\n   * -  NavbarTemplate\n   * -  Navbar\n   * -  NavPush\n   * -  NavPop\n   * -  NavRouter\n   * -  IdRef\n   *\n   * -  ShowWhen\n   * -  HideWhen\n   */\n  'use strict';\n\n  var CORE_DIRECTIVES, FORM_DIRECTIVES, OverlayNav, Menu, MenuToggle, MenuClose, Button, Blur, Content, Scroll, Refresher, Slides, Slide, SlideLazy, Tabs, Tab, List, ListHeader, Item, ItemSliding, Toolbar, ToolbarTitle, ToolbarItem, Icon, Checkbox, Toggle, TextInput, TextInputElement, Label, Segment, SegmentButton, RadioGroup, RadioButton, Searchbar, SearchbarInput, Nav, NavPush, NavPop, NavRouter, NavbarTemplate, Navbar, IdRef, ShowWhen, HideWhen, IONIC_DIRECTIVES;\n  return {\n    setters: [function (_angular2Common) {\n      CORE_DIRECTIVES = _angular2Common.CORE_DIRECTIVES;\n      FORM_DIRECTIVES = _angular2Common.FORM_DIRECTIVES;\n    }, function (_componentsOverlayOverlay) {\n      OverlayNav = _componentsOverlayOverlay.OverlayNav;\n    }, function (_componentsMenuMenu) {\n      Menu = _componentsMenuMenu.Menu;\n    }, function (_componentsMenuMenuToggle) {\n      MenuToggle = _componentsMenuMenuToggle.MenuToggle;\n    }, function (_componentsMenuMenuClose) {\n      MenuClose = _componentsMenuMenuClose.MenuClose;\n    }, function (_componentsButtonButton) {\n      Button = _componentsButtonButton.Button;\n    }, function (_componentsBlurBlur) {\n      Blur = _componentsBlurBlur.Blur;\n    }, function (_componentsContentContent) {\n      Content = _componentsContentContent.Content;\n    }, function (_componentsScrollScroll) {\n      Scroll = _componentsScrollScroll.Scroll;\n    }, function (_componentsScrollPullToRefresh) {\n      Refresher = _componentsScrollPullToRefresh.Refresher;\n    }, function (_componentsSlidesSlides) {\n      Slides = _componentsSlidesSlides.Slides;\n      Slide = _componentsSlidesSlides.Slide;\n      SlideLazy = _componentsSlidesSlides.SlideLazy;\n    }, function (_componentsTabsTabs) {\n      Tabs = _componentsTabsTabs.Tabs;\n    }, function (_componentsTabsTab) {\n      Tab = _componentsTabsTab.Tab;\n    }, function (_componentsListList) {\n      List = _componentsListList.List;\n      ListHeader = _componentsListList.ListHeader;\n    }, function (_componentsItemItem) {\n      Item = _componentsItemItem.Item;\n    }, function (_componentsItemItemSliding) {\n      ItemSliding = _componentsItemItemSliding.ItemSliding;\n    }, function (_componentsToolbarToolbar) {\n      Toolbar = _componentsToolbarToolbar.Toolbar;\n      ToolbarTitle = _componentsToolbarToolbar.ToolbarTitle;\n      ToolbarItem = _componentsToolbarToolbar.ToolbarItem;\n    }, function (_componentsIconIcon) {\n      Icon = _componentsIconIcon.Icon;\n    }, function (_componentsCheckboxCheckbox) {\n      Checkbox = _componentsCheckboxCheckbox.Checkbox;\n    }, function (_componentsToggleToggle) {\n      Toggle = _componentsToggleToggle.Toggle;\n    }, function (_componentsTextInputTextInput) {\n      TextInput = _componentsTextInputTextInput.TextInput;\n      TextInputElement = _componentsTextInputTextInput.TextInputElement;\n    }, function (_componentsLabelLabel) {\n      Label = _componentsLabelLabel.Label;\n    }, function (_componentsSegmentSegment) {\n      Segment = _componentsSegmentSegment.Segment;\n      SegmentButton = _componentsSegmentSegment.SegmentButton;\n    }, function (_componentsRadioRadio) {\n      RadioGroup = _componentsRadioRadio.RadioGroup;\n      RadioButton = _componentsRadioRadio.RadioButton;\n    }, function (_componentsSearchbarSearchbar) {\n      Searchbar = _componentsSearchbarSearchbar.Searchbar;\n      SearchbarInput = _componentsSearchbarSearchbar.SearchbarInput;\n    }, function (_componentsNavNav) {\n      Nav = _componentsNavNav.Nav;\n    }, function (_componentsNavNavPush) {\n      NavPush = _componentsNavNavPush.NavPush;\n      NavPop = _componentsNavNavPush.NavPop;\n    }, function (_componentsNavNavRouter) {\n      NavRouter = _componentsNavNavRouter.NavRouter;\n    }, function (_componentsNavbarNavbar) {\n      NavbarTemplate = _componentsNavbarNavbar.NavbarTemplate;\n      Navbar = _componentsNavbarNavbar.Navbar;\n    }, function (_componentsAppId) {\n      IdRef = _componentsAppId.IdRef;\n    }, function (_componentsShowHideWhenShowHideWhen) {\n      ShowWhen = _componentsShowHideWhenShowHideWhen.ShowWhen;\n      HideWhen = _componentsShowHideWhenShowHideWhen.HideWhen;\n    }],\n    execute: function () {\n      IONIC_DIRECTIVES = [\n      // Angular\n      CORE_DIRECTIVES, FORM_DIRECTIVES,\n      // Content\n      OverlayNav, Menu, MenuToggle, MenuClose, Button, Blur, Content, Scroll, Refresher,\n      // Lists\n      List, ListHeader, Item, ItemSliding,\n      // Slides\n      Slides, Slide, SlideLazy,\n      // Tabs\n      Tabs, Tab,\n      // Toolbar\n      Toolbar, ToolbarTitle, ToolbarItem,\n      // Media\n      Icon,\n      // Forms\n      Searchbar, SearchbarInput, Segment, SegmentButton, Checkbox, RadioGroup, RadioButton, Toggle, TextInput, TextInputElement, Label,\n      // Nav\n      Nav, NavbarTemplate, Navbar, NavPush, NavPop, NavRouter, IdRef, ShowWhen, HideWhen];\n\n      _export('IONIC_DIRECTIVES', IONIC_DIRECTIVES);\n    }\n  };\n});\nSystem.register('ionic/config/modes', ['./config'], function (_export) {\n    // iOS Mode Settings\n    'use strict';\n\n    var Config;\n    return {\n        setters: [function (_config) {\n            Config = _config.Config;\n        }],\n        execute: function () {\n            Config.setModeConfig('ios', {\n                activator: 'highlight',\n                actionSheetEnter: 'action-sheet-slide-in',\n                actionSheetLeave: 'action-sheet-slide-out',\n                alertEnter: 'alert-pop-in',\n                alertLeave: 'alert-pop-out',\n                backButtonText: 'Back',\n                backButtonIcon: 'ion-ios-arrow-back',\n                iconMode: 'ios',\n                menuType: 'reveal',\n                modalEnter: 'modal-slide-in',\n                modalLeave: 'modal-slide-out',\n                pageTransition: 'ios-transition',\n                pageTransitionDelay: 16,\n                tabbarPlacement: 'bottom'\n            });\n            // Material Design Mode Settings\n            Config.setModeConfig('md', {\n                activator: 'ripple',\n                actionSheetEnter: 'action-sheet-md-slide-in',\n                actionSheetLeave: 'action-sheet-md-slide-out',\n                alertEnter: 'alert-md-pop-in',\n                alertLeave: 'alert-md-pop-out',\n                backButtonText: '',\n                backButtonIcon: 'ion-md-arrow-back',\n                iconMode: 'md',\n                menuType: 'overlay',\n                modalEnter: 'modal-md-slide-in',\n                modalLeave: 'modal-md-slide-out',\n                pageTransition: 'md-transition',\n                pageTransitionDelay: 120,\n                tabbarHighlight: true,\n                tabbarPlacement: 'top',\n                tabSubPages: true\n            });\n        }\n    };\n});\nSystem.register('ionic/decorators/app', ['angular2/core', 'angular2/platform/browser', '../components/tap-click/tap-click', '../config/bootstrap', '../config/directives'], function (_export) {\n    /**\n    * @name App\n    * @description\n    * App is an Ionic decorator that bootstraps an application. It can be passed a number of arguments, that act as global config variables for the app.\n    * App can accept a `template` property that has an inline template or a `templateUrl` property that points to an external html template.\n    *\n    * @usage\n    * ```ts\n    * import {App} from 'ionic/ionic';\n    *\n    * @App({\n    *   templateUrl: 'app/app.html'\n    * })\n    *\n    * export class MyApp{\n    *   // Anything we would want to do at the root of our app\n    * }\n    * ```\n    *\n    * @param {Object} [config] - the app's [../Config](Config) object\n    * @param {String} [template] - the template to use for the app root\n    * @param {String} [templateUrl] - a relative URL pointing to the template to use for the app root\n    *\n    */\n    'use strict';\n\n    var Component, bootstrap, TapClick, ionicProviders, IONIC_DIRECTIVES;\n\n    _export('App', App);\n\n    function App() {\n        var args = arguments.length <= 0 || arguments[0] === undefined ? {} : arguments[0];\n\n        return function (cls) {\n            // get current annotations\n            var annotations = Reflect.getMetadata('annotations', cls) || [];\n            args.selector = 'ion-app';\n            // auto add Ionic directives\n            args.directives = args.directives ? args.directives.concat(IONIC_DIRECTIVES) : IONIC_DIRECTIVES;\n            // if no template was provided, default so it has a root <ion-nav>\n            if (!args.templateUrl && !args.template) {\n                args.template = '<ion-nav></ion-nav>';\n            }\n            // create @Component\n            annotations.push(new Component(args));\n            // redefine with added annotations\n            Reflect.defineMetadata('annotations', annotations, cls);\n            // define array of bootstrap providers\n            var providers = ionicProviders(args).concat(args.providers || []);\n            bootstrap(cls, providers).then(function (appRef) {\n                appRef.injector.get(TapClick);\n            });\n            return cls;\n        };\n    }\n\n    return {\n        setters: [function (_angular2Core) {\n            Component = _angular2Core.Component;\n        }, function (_angular2PlatformBrowser) {\n            bootstrap = _angular2PlatformBrowser.bootstrap;\n        }, function (_componentsTapClickTapClick) {\n            TapClick = _componentsTapClickTapClick.TapClick;\n        }, function (_configBootstrap) {\n            ionicProviders = _configBootstrap.ionicProviders;\n        }, function (_configDirectives) {\n            IONIC_DIRECTIVES = _configDirectives.IONIC_DIRECTIVES;\n        }],\n        execute: function () {}\n    };\n});\nSystem.register('ionic/decorators/config-component', ['angular2/core'], function (_export) {\n    /**\n     * @private\n     */\n    'use strict';\n\n    var Component;\n\n    /**\n     * @private\n     */\n\n    _export('ConfigComponent', ConfigComponent);\n\n    function ConfigComponent(config) {\n        return function (cls) {\n            var annotations = Reflect.getMetadata('annotations', cls) || [];\n            annotations.push(new Component(appendConfig(cls, config)));\n            Reflect.defineMetadata('annotations', annotations, cls);\n            return cls;\n        };\n    }\n\n    function appendConfig(cls, config) {\n        config.host = config.host || {};\n        cls.defaultInputs = config.defaultInputs || {};\n        config.inputs = config.inputs || [];\n        for (var prop in cls.defaultInputs) {\n            // add the property to the component \"inputs\"\n            config.inputs.push(prop);\n            // set the component \"hostProperties\", so the instance's\n            // input value will be used to set the element's attribute\n            config.host['[attr.' + prop + ']'] = prop;\n        }\n        cls.delegates = config.delegates;\n        return config;\n    }\n    return {\n        setters: [function (_angular2Core) {\n            Component = _angular2Core.Component;\n        }],\n        execute: function () {}\n    };\n});\nSystem.register('ionic/decorators/page', ['angular2/core', '../config/directives'], function (_export) {\n    /**\n     * @name Page\n     * @description\n     *For more information on how pages are created, see the [NavController API reference](../../components/nav/NavController/#creating_pages)\n     *\n     * The Page decorator indicates that the decorated class is an Ionic\n     * navigation component, meaning it can be navigated to using a NavController.\n     *\n     * Pages have all `IONIC_DIRECTIVES`, which include all Ionic components and directives,\n     * as well as Angular's [CORE_DIRECTIVES](https://angular.io/docs/js/latest/api/core/CORE_DIRECTIVES-const.html)\n     * and [FORM_DIRECTIVES](https://angular.io/docs/js/latest/api/core/FORM_DIRECTIVES-const.html),\n     * already provided to them, so you only need to supply custom components and directives to your pages:\n     *\n     * @usage\n     *\n     * ```ts\n     * @Page({\n     *   template: `\n     *    <ion-content>\n     *      I am a page!\n     *    </ion-content>\n     *   `\n     * })\n     * class MyPage {}\n     * ```\n     *\n     * Here [Content](../../../components/content/Content/) will load because\n     * it is in `IONIC_DIRECTIVES`, so there is no need to add a `directives` array.\n     *\n     *\n     * Say you built a custom component that uses the already existing Ionic component.\n     * In this case, you would add `IONIC_DIRECTIVES` to your directives array.\n     *\n     * ```ts\n     * import {IONIC_DIRECTIVES} from 'ionic/ionic';\n     * @Component({\n     *   selector: 'my-component'\n     *   template: `<div class=\"my-style\">\n     *   \t\t\t\t\t\t  <ion-checkbox></ion-checkbox>\n     *   \t\t\t\t\t\t</div>`,\n     *   directives: [IONIC_DIRECTIVES]\n     * })\n     * class MyCustomCheckbox {}\n     *```\n    \n     * Alternatively, you could:\n     *\n     * ```ts\n     * import {Checkbox, Icon} from 'ionic/ionic'\n     * ```\n     *\n     * along with any other components and add them individually:\n     *\n     * ```\n     * @Component({\n     *   ...\n     *   directives: [Checkbox, Icon]\n     * })\n     * ```\n     *\n     * However, using IONIC_DIRECTIVES will always *Just Work* with no\n     * performance overhead, so there is really no reason to not always use it.\n     *\n     * Pages have their content automatically wrapped in `<ion-view>`, so although\n     * you may see these tags if you inspect your markup, you don't need to include\n     * them in your templates.\n     */\n    'use strict';\n\n    var Component, IONIC_DIRECTIVES;\n\n    _export('Page', Page);\n\n    function Page() {\n        var config = arguments.length <= 0 || arguments[0] === undefined ? {} : arguments[0];\n\n        return function (cls) {\n            config.selector = 'ion-page';\n            config.directives = config.directives ? config.directives.concat(IONIC_DIRECTIVES) : IONIC_DIRECTIVES;\n            config.host = config.host || {};\n            config.host['[hidden]'] = '_hidden';\n            config.host['[class.tab-subpage]'] = '_tabSubPage';\n            var annotations = Reflect.getMetadata('annotations', cls) || [];\n            annotations.push(new Component(config));\n            Reflect.defineMetadata('annotations', annotations, cls);\n            return cls;\n        };\n    }\n\n    return {\n        setters: [function (_angular2Core) {\n            Component = _angular2Core.Component;\n        }, function (_configDirectives) {\n            IONIC_DIRECTIVES = _configDirectives.IONIC_DIRECTIVES;\n        }],\n        execute: function () {}\n    };\n});\nSystem.register('ionic/platform/platform', ['../util/util', '../util/dom'], function (_export) {\n    /**\n     * @name Platform\n     * @description\n     * Platform returns the availble information about your current platform.\n     * Platforms in Ionic 2 are much more complex then in V1, returns not just a single platform,\n     * but a hierarchy of information, such as a devices OS, phone vs tablet, or mobile vs browser.\n     * With this information you can completely custimize your app to fit any device and platform.\n     *\n     * @usage\n     * ```ts\n     * import {Platform} 'ionic/ionic';\n     * export MyClass {\n     *    constructor(platform: Platform){\n     *      this.platform = platform;\n     *    }\n     * }\n     * ```\n     * @demo /docs/v3/demos/platform/\n     */\n    'use strict';\n\n    var getQuerystring, extend, ready, windowDimensions, flushDimensionCache, Platform, PlatformNode, platformRegistry, platformDefault;\n\n    var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();\n\n    function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\n    function insertSuperset(platformNode) {\n        var supersetPlaformName = platformNode.superset();\n        if (supersetPlaformName) {\n            // add a platform in between two exist platforms\n            // so we can build the correct hierarchy of active platforms\n            var supersetPlatform = new PlatformNode(supersetPlaformName);\n            supersetPlatform.parent(platformNode.parent());\n            supersetPlatform.child(platformNode);\n            if (supersetPlatform.parent()) {\n                supersetPlatform.parent().child(supersetPlatform);\n            }\n            platformNode.parent(supersetPlatform);\n        }\n    }\n    return {\n        setters: [function (_utilUtil) {\n            getQuerystring = _utilUtil.getQuerystring;\n            extend = _utilUtil.extend;\n        }, function (_utilDom) {\n            ready = _utilDom.ready;\n            windowDimensions = _utilDom.windowDimensions;\n            flushDimensionCache = _utilDom.flushDimensionCache;\n        }],\n        execute: function () {\n            Platform = (function () {\n                function Platform() {\n                    var _this = this;\n\n                    var platforms = arguments.length <= 0 || arguments[0] === undefined ? [] : arguments[0];\n\n                    _classCallCheck(this, Platform);\n\n                    this._platforms = platforms;\n                    this._versions = {};\n                    this._dir = null;\n                    this._lang = null;\n                    this._onResizes = [];\n                    this._readyPromise = new Promise(function (res) {\n                        _this._readyResolve = res;\n                    });\n                }\n\n                // Methods\n                // **********************************************\n                /**\n                 * @param {string} platformName\n                 * @returns {bool} returns true/false based on platform you place\n                 * @description\n                 * Depending on the platform name, isPlatform will return true or flase\n                 *\n                 * ```\n                 * import {Platform} 'ionic/ionic';\n                 * export MyClass {\n                 *    constructor(platform: Platform){\n                 *      this.platform = platform;\n                 *      if(this.platform.is('ios'){\n                 *        // what ever you need to do for\n                 *        // if the platfomr is ios\n                 *      }\n                 *    }\n                 * }\n                 * ```\n                 */\n\n                _createClass(Platform, [{\n                    key: 'is',\n                    value: function is(platformName) {\n                        return this._platforms.indexOf(platformName) > -1;\n                    }\n\n                    /**\n                     * @returns {array} the array of platforms\n                     * @description\n                     * Depending on what device you are on, `platforms` can return multiple values.\n                     * Each possible value is a hierarchy of platforms. For example, on an iPhone,\n                     * it would return mobile, ios, and iphone.\n                     *\n                     * ```\n                     * import {Platform} 'ionic/ionic';\n                     * export MyClass {\n                     *    constructor(platform: Platform){\n                     *      this.platform = platform;\n                     *      console.log(this.platform.platforms());\n                     *      // This will return an array of all the availble platforms\n                     *      // From if your on mobile, to mobile os, and device name\n                     *    }\n                     * }\n                     * ```\n                     */\n                }, {\n                    key: 'platforms',\n                    value: function platforms() {\n                        // get the array of active platforms, which also knows the hierarchy,\n                        // with the last one the most important\n                        return this._platforms;\n                    }\n\n                    /**\n                     * Returns an object containing information about the paltform\n                     *\n                     * ```\n                     * import {Platform} 'ionic/ionic';\n                     * export MyClass {\n                     *    constructor(platform: Platform){\n                     *      this.platform = platform;\n                     *      console.log(this.platform.versions());\n                     *    }\n                     * }\n                     * ```\n                        * @param {string} [platformName] optional platformName\n                     * @returns {object} An object with various platform info\n                     *\n                     */\n                }, {\n                    key: 'versions',\n                    value: function versions(platformName) {\n                        if (arguments.length) {\n                            // get a specific platform's version\n                            return this._versions[platformName];\n                        }\n                        // get all the platforms that have a valid parsed version\n                        return this._versions;\n                    }\n\n                    /**\n                     * @private\n                     */\n                }, {\n                    key: 'version',\n                    value: function version() {\n                        for (var platformName in this._versions) {\n                            if (this._versions[platformName]) {\n                                return this._versions[platformName];\n                            }\n                        }\n                        return {};\n                    }\n\n                    /**\n                     * Returns a promise when the platform is ready and native functionality can be called\n                     *\n                     * ```\n                     * import {Platform} 'ionic/ionic';\n                     * export MyClass {\n                     *    constructor(platform: Platform){\n                     *      this.platform = platform;\n                     *      this.platform.ready().then(() => {\n                     *        console.log('Platform ready');\n                     *        // The platform is now ready, execute any native code you want\n                     *       });\n                     *    }\n                     * }\n                     * ```\n                     * @returns {promise} Returns a promsie when device ready has fired\n                     */\n                }, {\n                    key: 'ready',\n                    value: function ready() {\n                        return this._readyPromise;\n                    }\n\n                    /**\n                     * @private\n                     */\n                }, {\n                    key: 'prepareReady',\n                    value: function prepareReady(config) {\n                        var self = this;\n                        function resolve() {\n                            self._readyResolve(config);\n                        }\n                        if (this._engineReady) {\n                            // the engine provide a ready promise, use this instead\n                            this._engineReady(resolve);\n                        } else {\n                            // there is no custom ready method from the engine\n                            // use the default dom ready\n                            ready(resolve);\n                        }\n                    }\n\n                    /**\n                    * Set the app's language direction, which will update the `dir` attribute\n                    * on the app's root `<html>` element. We recommend the app's `index.html`\n                    * file already has the correct `dir` attribute value set, such as\n                    * `<html dir=\"ltr\">` or `<html dir=\"rtl\">`. This method is useful if the\n                    * direction needs to be dynamically changed per user/session.\n                    * [W3C: Structural markup and right-to-left text in HTML](http://www.w3.org/International/questions/qa-html-dir)\n                    * @param {string} dir  Examples: `rtl`, `ltr`\n                    */\n                }, {\n                    key: 'setDir',\n                    value: function setDir(dir, updateDocument) {\n                        this._dir = (dir || '').toLowerCase();\n                        if (updateDocument !== false) {\n                            document.documentElement.setAttribute('dir', dir);\n                        }\n                    }\n\n                    /**\n                     * Returns app's language direction.\n                     * We recommend the app's `index.html` file already has the correct `dir`\n                     * attribute value set, such as `<html dir=\"ltr\">` or `<html dir=\"rtl\">`.\n                     * [W3C: Structural markup and right-to-left text in HTML](http://www.w3.org/International/questions/qa-html-dir)\n                     * @returns {string}\n                     */\n                }, {\n                    key: 'dir',\n                    value: function dir() {\n                        return this._dir;\n                    }\n\n                    /**\n                     * Returns if this app is using right-to-left language direction or not.\n                     * We recommend the app's `index.html` file already has the correct `dir`\n                     * attribute value set, such as `<html dir=\"ltr\">` or `<html dir=\"rtl\">`.\n                     * [W3C: Structural markup and right-to-left text in HTML](http://www.w3.org/International/questions/qa-html-dir)\n                     * @returns {boolean}\n                     */\n                }, {\n                    key: 'isRTL',\n                    value: function isRTL() {\n                        return this._dir === 'rtl';\n                    }\n\n                    /**\n                    * Set the app's language and optionally the country code, which will update\n                    * the `lang` attribute on the app's root `<html>` element.\n                    * We recommend the app's `index.html` file already has the correct `lang`\n                    * attribute value set, such as `<html lang=\"en\">`. This method is useful if\n                    * the language needs to be dynamically changed per user/session.\n                    * [W3C: Declaring language in HTML](http://www.w3.org/International/questions/qa-html-language-declarations)\n                    * @param {string} language  Examples: `en-US`, `en-GB`, `ar`, `de`, `zh`, `es-MX`\n                    */\n                }, {\n                    key: 'setLang',\n                    value: function setLang(language, updateDocument) {\n                        this._lang = language;\n                        if (updateDocument !== false) {\n                            document.documentElement.setAttribute('lang', language);\n                        }\n                    }\n\n                    /**\n                     * Returns app's language and optional country code.\n                     * We recommend the app's `index.html` file already has the correct `lang`\n                     * attribute value set, such as `<html lang=\"en\">`.\n                     * [W3C: Declaring language in HTML](http://www.w3.org/International/questions/qa-html-language-declarations)\n                     * @returns {string}\n                     */\n                }, {\n                    key: 'lang',\n                    value: function lang() {\n                        return this._lang;\n                    }\n\n                    // Methods meant to be overridden by the engine\n                    // **********************************************\n                    // Provided NOOP methods so they do not error when\n                    // called by engines (the browser) doesn't provide them\n                    /**\n                    * @private\n                    */\n                }, {\n                    key: 'on',\n                    value: function on() {}\n\n                    /**\n                    * @private\n                    */\n                }, {\n                    key: 'onHardwareBackButton',\n                    value: function onHardwareBackButton() {}\n\n                    /**\n                    * @private\n                    */\n                }, {\n                    key: 'registerBackButtonAction',\n                    value: function registerBackButtonAction() {}\n\n                    /**\n                    * @private\n                    */\n                }, {\n                    key: 'exitApp',\n                    value: function exitApp() {}\n\n                    /**\n                    * @private\n                    */\n                }, {\n                    key: 'fullScreen',\n                    value: function fullScreen() {}\n\n                    /**\n                    * @private\n                    */\n                }, {\n                    key: 'showStatusBar',\n                    value: function showStatusBar() {}\n\n                    // Getter/Setter Methods\n                    // **********************************************\n                    /**\n                    * @private\n                    */\n                }, {\n                    key: 'url',\n                    value: function url(val) {\n                        if (arguments.length) {\n                            this._url = val;\n                            this._qs = getQuerystring(val);\n                        }\n                        return this._url;\n                    }\n\n                    /**\n                    * @private\n                    */\n                }, {\n                    key: 'query',\n                    value: function query(key) {\n                        return (this._qs || {})[key];\n                    }\n\n                    /**\n                    * @private\n                    */\n                }, {\n                    key: 'userAgent',\n                    value: function userAgent(val) {\n                        if (arguments.length) {\n                            this._ua = val;\n                        }\n                        return this._ua || '';\n                    }\n\n                    /**\n                    * @private\n                    */\n                }, {\n                    key: 'navigatorPlatform',\n                    value: function navigatorPlatform(val) {\n                        if (arguments.length) {\n                            this._bPlt = val;\n                        }\n                        return this._bPlt || '';\n                    }\n\n                    /**\n                    * @private\n                    */\n                }, {\n                    key: 'width',\n                    value: function width() {\n                        return windowDimensions().width;\n                    }\n\n                    /**\n                    * @private\n                    */\n                }, {\n                    key: 'height',\n                    value: function height() {\n                        return windowDimensions().height;\n                    }\n\n                    /**\n                    * @private\n                    */\n                }, {\n                    key: 'isPortrait',\n                    value: function isPortrait() {\n                        return this.width() < this.height();\n                    }\n\n                    /**\n                    * @private\n                    */\n                }, {\n                    key: 'isLandscape',\n                    value: function isLandscape() {\n                        return !this.isPortrait();\n                    }\n\n                    /**\n                    * @private\n                    */\n                }, {\n                    key: 'windowResize',\n                    value: function windowResize() {\n                        var self = this;\n                        clearTimeout(self._resizeTimer);\n                        self._resizeTimer = setTimeout(function () {\n                            flushDimensionCache();\n                            for (var i = 0; i < self._onResizes.length; i++) {\n                                try {\n                                    self._onResizes[i]();\n                                } catch (e) {\n                                    console.error(e);\n                                }\n                            }\n                        }, 250);\n                    }\n\n                    /**\n                    * @private\n                    */\n                }, {\n                    key: 'onResize',\n                    value: function onResize(cb) {\n                        this._onResizes.push(cb);\n                    }\n\n                    // Platform Registry\n                    // **********************************************\n                    /**\n                     * @private\n                     */\n                }, {\n                    key: 'testQuery',\n\n                    /**\n                     * @private\n                     */\n                    value: function testQuery(queryValue, queryTestValue) {\n                        var valueSplit = queryValue.toLowerCase().split(';');\n                        return valueSplit.indexOf(queryTestValue) > -1;\n                    }\n\n                    /**\n                     * @private\n                     */\n                }, {\n                    key: 'testUserAgent',\n                    value: function testUserAgent(userAgentExpression) {\n                        var rgx = new RegExp(userAgentExpression, 'i');\n                        return rgx.test(this._ua || '');\n                    }\n\n                    /**\n                     * @private\n                     */\n                }, {\n                    key: 'testNavigatorPlatform',\n                    value: function testNavigatorPlatform(navigatorPlatformExpression) {\n                        var rgx = new RegExp(navigatorPlatformExpression, 'i');\n                        return rgx.test(this._bPlt);\n                    }\n\n                    /**\n                     * @private\n                     */\n                }, {\n                    key: 'matchUserAgentVersion',\n                    value: function matchUserAgentVersion(userAgentExpression) {\n                        if (this._ua && userAgentExpression) {\n                            var val = this._ua.match(userAgentExpression);\n                            if (val) {\n                                return {\n                                    major: val[1],\n                                    minor: val[2]\n                                };\n                            }\n                        }\n                    }\n\n                    /**\n                     * @private\n                     */\n                }, {\n                    key: 'isPlatform',\n                    value: function isPlatform(queryTestValue, userAgentExpression) {\n                        if (!userAgentExpression) {\n                            userAgentExpression = queryTestValue;\n                        }\n                        var queryValue = this.query('ionicplatform');\n                        if (queryValue) {\n                            return this.testQuery(queryValue, queryTestValue);\n                        }\n                        return this.testUserAgent(userAgentExpression);\n                    }\n\n                    /**\n                     * @private\n                     */\n                }, {\n                    key: 'load',\n                    value: function load(platformOverride) {\n                        var rootPlatformNode = null;\n                        var engineNode = null;\n                        var self = this;\n                        this.platformOverride = platformOverride;\n                        // figure out the most specific platform and active engine\n                        var tmpPlatform = null;\n                        for (var platformName in platformRegistry) {\n                            tmpPlatform = this.matchPlatform(platformName);\n                            if (tmpPlatform) {\n                                // we found a platform match!\n                                // check if its more specific than the one we already have\n                                if (tmpPlatform.isEngine) {\n                                    // because it matched then this should be the active engine\n                                    // you cannot have more than one active engine\n                                    engineNode = tmpPlatform;\n                                } else if (!rootPlatformNode || tmpPlatform.depth > rootPlatformNode.depth) {\n                                    // only find the root node for platforms that are not engines\n                                    // set this node as the root since we either don't already\n                                    // have one, or this one is more specific that the current one\n                                    rootPlatformNode = tmpPlatform;\n                                }\n                            }\n                        }\n                        if (!rootPlatformNode) {\n                            rootPlatformNode = new PlatformNode(platformDefault);\n                        }\n                        // build a Platform instance filled with the\n                        // hierarchy of active platforms and settings\n                        if (rootPlatformNode) {\n                            // check if we found an engine node (cordova/node-webkit/etc)\n                            if (engineNode) {\n                                // add the engine to the first in the platform hierarchy\n                                // the original rootPlatformNode now becomes a child\n                                // of the engineNode, which is not the new root\n                                engineNode.child(rootPlatformNode);\n                                rootPlatformNode.parent(engineNode);\n                                rootPlatformNode = engineNode;\n                                // add any events which the engine would provide\n                                // for example, Cordova provides its own ready event\n                                var engineMethods = engineNode.methods();\n                                engineMethods._engineReady = engineMethods.ready;\n                                delete engineMethods.ready;\n                                extend(this, engineMethods);\n                            }\n                            var platformNode = rootPlatformNode;\n                            while (platformNode) {\n                                insertSuperset(platformNode);\n                                platformNode = platformNode.child();\n                            }\n                            // make sure the root noot is actually the root\n                            // incase a node was inserted before the root\n                            platformNode = rootPlatformNode.parent();\n                            while (platformNode) {\n                                rootPlatformNode = platformNode;\n                                platformNode = platformNode.parent();\n                            }\n                            platformNode = rootPlatformNode;\n                            while (platformNode) {\n                                // set the array of active platforms with\n                                // the last one in the array the most important\n                                this._platforms.push(platformNode.name());\n                                // get the platforms version if a version parser was provided\n                                this._versions[platformNode.name()] = platformNode.version(this);\n                                // go to the next platform child\n                                platformNode = platformNode.child();\n                            }\n                        }\n                        if (this._platforms.indexOf('mobile') > -1 && this._platforms.indexOf('cordova') === -1) {\n                            this._platforms.push('mobileweb');\n                        }\n                    }\n\n                    /**\n                     * @private\n                     */\n                }, {\n                    key: 'matchPlatform',\n                    value: function matchPlatform(platformName) {\n                        // build a PlatformNode and assign config data to it\n                        // use it's getRoot method to build up its hierarchy\n                        // depending on which platforms match\n                        var platformNode = new PlatformNode(platformName);\n                        var rootNode = platformNode.getRoot(this, 0);\n                        if (rootNode) {\n                            rootNode.depth = 0;\n                            var childPlatform = rootNode.child();\n                            while (childPlatform) {\n                                rootNode.depth++;\n                                childPlatform = childPlatform.child();\n                            }\n                        }\n                        return rootNode;\n                    }\n                }], [{\n                    key: 'register',\n                    value: function register(platformConfig) {\n                        platformRegistry[platformConfig.name] = platformConfig;\n                    }\n\n                    /**\n                    * @private\n                    */\n                }, {\n                    key: 'registry',\n                    value: function registry() {\n                        return platformRegistry;\n                    }\n\n                    /**\n                     * @private\n                     */\n                }, {\n                    key: 'get',\n                    value: function get(platformName) {\n                        return platformRegistry[platformName] || {};\n                    }\n\n                    /**\n                     * @private\n                     */\n                }, {\n                    key: 'setDefault',\n                    value: function setDefault(platformName) {\n                        platformDefault = platformName;\n                    }\n                }]);\n\n                return Platform;\n            })();\n\n            _export('Platform', Platform);\n\n            PlatformNode = (function () {\n                function PlatformNode(platformName) {\n                    _classCallCheck(this, PlatformNode);\n\n                    this.c = Platform.get(platformName);\n                    this.isEngine = this.c.isEngine;\n                }\n\n                _createClass(PlatformNode, [{\n                    key: 'name',\n                    value: function name() {\n                        return this.c.name;\n                    }\n                }, {\n                    key: 'settings',\n                    value: function settings() {\n                        return this.c.settings || {};\n                    }\n                }, {\n                    key: 'superset',\n                    value: function superset() {\n                        return this.c.superset;\n                    }\n                }, {\n                    key: 'methods',\n                    value: function methods() {\n                        return this.c.methods || {};\n                    }\n                }, {\n                    key: 'parent',\n                    value: function parent(val) {\n                        if (arguments.length) {\n                            this._parent = val;\n                        }\n                        return this._parent;\n                    }\n                }, {\n                    key: 'child',\n                    value: function child(val) {\n                        if (arguments.length) {\n                            this._child = val;\n                        }\n                        return this._child;\n                    }\n                }, {\n                    key: 'isMatch',\n                    value: function isMatch(p) {\n                        if (p.platformOverride && !this.isEngine) {\n                            return p.platformOverride === this.c.name;\n                        } else if (!this.c.isMatch) {\n                            return false;\n                        }\n                        return this.c.isMatch(p);\n                    }\n                }, {\n                    key: 'version',\n                    value: function version(p) {\n                        if (this.c.versionParser) {\n                            var v = this.c.versionParser(p);\n                            if (v) {\n                                var str = v.major + '.' + v.minor;\n                                return {\n                                    str: str,\n                                    num: parseFloat(str),\n                                    major: parseInt(v.major, 10),\n                                    minor: parseInt(v.minor, 10)\n                                };\n                            }\n                        }\n                    }\n                }, {\n                    key: 'getRoot',\n                    value: function getRoot(p) {\n                        if (this.isMatch(p)) {\n                            var parents = this.getSubsetParents(this.name());\n                            if (!parents.length) {\n                                return this;\n                            }\n                            var platform = null;\n                            var rootPlatform = null;\n                            for (var i = 0; i < parents.length; i++) {\n                                platform = new PlatformNode(parents[i]);\n                                platform.child(this);\n                                rootPlatform = platform.getRoot(p);\n                                if (rootPlatform) {\n                                    this.parent(platform);\n                                    return rootPlatform;\n                                }\n                            }\n                        }\n                        return null;\n                    }\n                }, {\n                    key: 'getSubsetParents',\n                    value: function getSubsetParents(subsetPlatformName) {\n                        var platformRegistry = Platform.registry();\n                        var parentPlatformNames = [];\n                        var platform = null;\n                        for (var platformName in platformRegistry) {\n                            platform = platformRegistry[platformName];\n                            if (platform.subsets && platform.subsets.indexOf(subsetPlatformName) > -1) {\n                                parentPlatformNames.push(platformName);\n                            }\n                        }\n                        return parentPlatformNames;\n                    }\n                }]);\n\n                return PlatformNode;\n            })();\n\n            platformRegistry = {};\n            platformDefault = null;\n        }\n    };\n});\nSystem.register('ionic/platform/registry', ['./platform', '../util/dom'], function (_export) {\n    'use strict';\n\n    var Platform, windowLoad;\n\n    function isIOSDevice(p) {\n        // shortcut function to be reused internally\n        // checks navigator.platform to see if it's an actual iOS device\n        // this does not use the user-agent string because it is often spoofed\n        // an actual iPad will return true, a chrome dev tools iPad will return false\n        return p.testNavigatorPlatform('iphone|ipad|ipod');\n    }\n    return {\n        setters: [function (_platform) {\n            Platform = _platform.Platform;\n        }, function (_utilDom) {\n            windowLoad = _utilDom.windowLoad;\n        }],\n        execute: function () {\n            Platform.register({\n                name: 'core',\n                settings: {\n                    mode: 'ios',\n                    keyboardHeight: 290\n                }\n            });\n            Platform.setDefault('core');\n            Platform.register({\n                name: 'mobile'\n            });\n            Platform.register({\n                name: 'phablet',\n                isMatch: function isMatch(p) {\n                    var smallest = Math.min(p.width(), p.height());\n                    var largest = Math.max(p.width(), p.height());\n                    return smallest > 390 && smallest < 520 && largest > 620 && largest < 800;\n                }\n            });\n            Platform.register({\n                name: 'tablet',\n                isMatch: function isMatch(p) {\n                    var smallest = Math.min(p.width(), p.height());\n                    var largest = Math.max(p.width(), p.height());\n                    return smallest > 460 && smallest < 820 && largest > 780 && largest < 1400;\n                }\n            });\n            Platform.register({\n                name: 'android',\n                superset: 'mobile',\n                subsets: ['phablet', 'tablet'],\n                settings: {\n                    activator: function activator(p) {\n                        // md mode defaults to use ripple activator\n                        // however, under-powered devices shouldn't use ripple\n                        // if this a linux device, and is using Android Chrome v36 (Android 5.0)\n                        // or above then use ripple, otherwise do not use a ripple effect\n                        if (p.testNavigatorPlatform('linux')) {\n                            var chromeVersion = p.matchUserAgentVersion(/Chrome\\/(\\d+).(\\d+)?/);\n                            if (chromeVersion) {\n                                // linux android device using modern android chrome browser gets ripple\n                                return parseInt(chromeVersion.major, 10) < 36 ? 'none' : 'ripple';\n                            }\n                            // linux android device not using chrome browser checks just android's version\n                            if (p.version().major < 5) {\n                                return 'none';\n                            }\n                        }\n                        // fallback to always use ripple\n                        return 'ripple';\n                    },\n                    hoverCSS: false,\n                    keyboardHeight: 300,\n                    mode: 'md',\n                    scrollAssist: true\n                },\n                isMatch: function isMatch(p) {\n                    return p.isPlatform('android', 'android|silk');\n                },\n                versionParser: function versionParser(p) {\n                    return p.matchUserAgentVersion(/Android (\\d+).(\\d+)?/);\n                }\n            });\n            Platform.register({\n                name: 'ios',\n                superset: 'mobile',\n                subsets: ['ipad', 'iphone'],\n                settings: {\n                    clickBlock: true,\n                    hoverCSS: false,\n                    keyboardHeight: 300,\n                    mode: 'ios',\n                    scrollAssist: isIOSDevice,\n                    swipeBackEnabled: isIOSDevice,\n                    swipeBackThreshold: 40,\n                    tapPolyfill: isIOSDevice\n                },\n                isMatch: function isMatch(p) {\n                    return p.isPlatform('ios', 'iphone|ipad|ipod');\n                },\n                versionParser: function versionParser(p) {\n                    return p.matchUserAgentVersion(/OS (\\d+)_(\\d+)?/);\n                }\n            });\n            Platform.register({\n                name: 'ipad',\n                superset: 'tablet',\n                settings: {\n                    keyboardHeight: 500\n                },\n                isMatch: function isMatch(p) {\n                    return p.isPlatform('ipad');\n                }\n            });\n            Platform.register({\n                name: 'iphone',\n                subsets: ['phablet'],\n                isMatch: function isMatch(p) {\n                    return p.isPlatform('iphone');\n                }\n            });\n            Platform.register({\n                name: 'windowsphone',\n                superset: 'mobile',\n                subsets: ['phablet', 'tablet'],\n                settings: {\n                    mode: 'md'\n                },\n                isMatch: function isMatch(p) {\n                    return p.isPlatform('windowsphone', 'windows phone');\n                },\n                versionParser: function versionParser(p) {\n                    return p.matchUserAgentVersion(/Windows Phone (\\d+).(\\d+)?/);\n                }\n            });\n            Platform.register({\n                name: 'cordova',\n                isEngine: true,\n                methods: {\n                    ready: function ready(resolve) {\n                        function isReady() {\n                            document.removeEventListener('deviceready', isReady);\n                            resolve();\n                        }\n                        windowLoad(function () {\n                            document.addEventListener('deviceready', isReady);\n                        });\n                    }\n                },\n                isMatch: function isMatch() {\n                    return !!(window.cordova || window.PhoneGap || window.phonegap);\n                }\n            });\n        }\n    };\n});\nSystem.register('ionic/platform/storage', ['./storage/storage', './storage/local-storage', './storage/sql'], function (_export) {\n  'use strict';\n\n  return {\n    setters: [function (_storageStorage) {\n      for (var _key in _storageStorage) {\n        if (_key !== 'default') _export(_key, _storageStorage[_key]);\n      }\n    }, function (_storageLocalStorage) {\n      for (var _key2 in _storageLocalStorage) {\n        if (_key2 !== 'default') _export(_key2, _storageLocalStorage[_key2]);\n      }\n    }, function (_storageSql) {\n      for (var _key3 in _storageSql) {\n        if (_key3 !== 'default') _export(_key3, _storageSql[_key3]);\n      }\n    }],\n    execute: function () {}\n  };\n});\nSystem.register(\"ionic/translation/translate\", [\"angular2/core\"], function (_export) {\n    /**\n     * @private\n     * Provide multi-language and i18n support in your app. Translate works by\n     * mapping full strings to language translated ones. That means that you don't need\n     * to provide strings for your default language, just new languages.\n     *\n     * @usage\n     * ```js\n     * Translate.translations({\n     *   'de': {\n     *     'Welcome to MyApp': 'Willkommen auf'\n     *   }\n     * })\n     *\n     * Changing the default language:\n     *\n     * Translate.setLanguage('de');\n     * ```\n     *\n     * Usage in a template:\n     *\n     * ```js\n     * <span>{{ 'Welcome to MyApp' | translate }}\n     * ```\n     */\n    \"use strict\";\n\n    var Injectable, __decorate, __metadata, Translate;\n\n    var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();\n\n    function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n    return {\n        setters: [function (_angular2Core) {\n            Injectable = _angular2Core.Injectable;\n        }],\n        execute: function () {\n            __decorate = undefined && undefined.__decorate || function (decorators, target, key, desc) {\n                var c = arguments.length,\n                    r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc,\n                    d;\n                if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n                return c > 3 && r && Object.defineProperty(target, key, r), r;\n            };\n\n            __metadata = undefined && undefined.__metadata || function (k, v) {\n                if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n            };\n\n            Translate = (function () {\n                function Translate() {\n                    _classCallCheck(this, Translate);\n\n                    this._transMap = {};\n                }\n\n                _createClass(Translate, [{\n                    key: \"translations\",\n                    value: function translations(lang, map) {\n                        this._transMap[lang] = map;\n                    }\n                }, {\n                    key: \"setLanguage\",\n                    value: function setLanguage(lang) {\n                        this._language = lang;\n                    }\n                }, {\n                    key: \"getTranslations\",\n                    value: function getTranslations(lang) {\n                        return this._transMap[lang];\n                    }\n                }, {\n                    key: \"translate\",\n                    value: function translate(key, lang) {\n                        // If the language isn't specified and we have no overridden one, return the string passed.\n                        if (!lang && !this._language) {\n                            return key;\n                        }\n                        var setLanguage = lang || this._language;\n                        var map = this.getTranslations(setLanguage);\n                        if (!map) {\n                            console.warn('I18N: No translation for key', key, 'using language', setLanguage);\n                            return '';\n                        }\n                        return this._getTranslation(map, key);\n                    }\n                }, {\n                    key: \"_getTranslation\",\n                    value: function _getTranslation(map, key) {\n                        return map && map[key] || '';\n                    }\n                }]);\n\n                return Translate;\n            })();\n\n            _export(\"Translate\", Translate);\n\n            _export(\"Translate\", Translate = __decorate([Injectable(), __metadata('design:paramtypes', [])], Translate));\n        }\n    };\n});\nSystem.register(\"ionic/translation/translate_pipe\", [\"angular2/core\", \"./translate\"], function (_export) {\n    /**\n     * @private\n     * The Translate pipe makes it easy to translate strings.\n     *\n     * @usage\n     * Translate using the current language or language set through Translate.setLanguage\n     * {{ 'Please enter your location' | translate }}\n     *\n     * Translate using a specific language\n     * {{ 'Please enter your location' | translate:\"de\" }}\n     */\n    \"use strict\";\n\n    var Injectable, Pipe, Translate, __decorate, __metadata, TranslatePipe, _a;\n\n    var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();\n\n    function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n    return {\n        setters: [function (_angular2Core) {\n            Injectable = _angular2Core.Injectable;\n            Pipe = _angular2Core.Pipe;\n        }, function (_translate) {\n            Translate = _translate.Translate;\n        }],\n        execute: function () {\n            __decorate = undefined && undefined.__decorate || function (decorators, target, key, desc) {\n                var c = arguments.length,\n                    r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc,\n                    d;\n                if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n                return c > 3 && r && Object.defineProperty(target, key, r), r;\n            };\n\n            __metadata = undefined && undefined.__metadata || function (k, v) {\n                if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n            };\n\n            TranslatePipe = (function () {\n                function TranslatePipe(translate) {\n                    _classCallCheck(this, TranslatePipe);\n\n                    this.translate = translate;\n                }\n\n                _createClass(TranslatePipe, [{\n                    key: \"transform\",\n                    value: function transform(value, args) {\n                        var lang = undefined;\n                        if (args.length > 0) {\n                            lang = args[0];\n                        }\n                        return this.translate.translate(value, lang);\n                    }\n                }, {\n                    key: \"supports\",\n                    value: function supports(obj) {\n                        return true;\n                    }\n                }]);\n\n                return TranslatePipe;\n            })();\n\n            _export(\"TranslatePipe\", TranslatePipe);\n\n            _export(\"TranslatePipe\", TranslatePipe = __decorate([Pipe({ name: 'translate' }), Injectable(), __metadata('design:paramtypes', [typeof (_a = typeof Translate !== 'undefined' && Translate) === 'function' && _a || Object])], TranslatePipe));\n        }\n    };\n});\nSystem.register('ionic/gestures/drag-gesture', ['./gesture', '../util'], function (_export) {\n    'use strict';\n\n    var Gesture, util, DragGesture;\n\n    var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();\n\n    var _get = function get(_x2, _x3, _x4) { var _again = true; _function: while (_again) { var object = _x2, property = _x3, receiver = _x4; _again = false; if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { _x2 = parent; _x3 = property; _x4 = receiver; _again = true; desc = parent = undefined; continue _function; } } else if ('value' in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } } };\n\n    function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\n    function _inherits(subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\n    return {\n        setters: [function (_gesture) {\n            Gesture = _gesture.Gesture;\n        }, function (_util) {\n            util = _util;\n        }],\n        execute: function () {\n            DragGesture = (function (_Gesture) {\n                _inherits(DragGesture, _Gesture);\n\n                function DragGesture(element) {\n                    var opts = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1];\n\n                    _classCallCheck(this, DragGesture);\n\n                    util.defaults(opts, {});\n                    _get(Object.getPrototypeOf(DragGesture.prototype), 'constructor', this).call(this, element, opts);\n                }\n\n                _createClass(DragGesture, [{\n                    key: 'listen',\n                    value: function listen() {\n                        var _this = this;\n\n                        _get(Object.getPrototypeOf(DragGesture.prototype), 'listen', this).call(this);\n                        this.on('panstart', function (ev) {\n                            if (_this.onDragStart(ev) !== false) {\n                                _this.dragging = true;\n                            }\n                        });\n                        this.on('panmove', function (ev) {\n                            if (!_this.dragging) return;\n                            if (_this.onDrag(ev) === false) {\n                                _this.dragging = false;\n                            }\n                        });\n                        this.on('panend', function (ev) {\n                            if (!_this.dragging) return;\n                            _this.onDragEnd(ev);\n                            _this.dragging = false;\n                        });\n                        this.hammertime.get('pan').set(this._options);\n                    }\n                }, {\n                    key: 'onDrag',\n                    value: function onDrag() {}\n                }, {\n                    key: 'onDragStart',\n                    value: function onDragStart() {}\n                }, {\n                    key: 'onDragEnd',\n                    value: function onDragEnd() {}\n                }]);\n\n                return DragGesture;\n            })(Gesture);\n\n            _export('DragGesture', DragGesture);\n        }\n    };\n});\nSystem.register('ionic/gestures/gesture', ['../util', './hammer'], function (_export) {\n    /**\n     * A gesture recognizer class.\n     *\n     * TODO(mlynch): Re-enable the DOM event simulation that was causing issues (or verify hammer does this already, it might);\n     */\n    'use strict';\n\n    var util, Hammer, Gesture;\n\n    var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();\n\n    function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\n    return {\n        setters: [function (_util) {\n            util = _util;\n        }, function (_hammer) {\n            Hammer = _hammer.Hammer;\n        }],\n        execute: function () {\n            Gesture = (function () {\n                function Gesture(element) {\n                    var opts = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1];\n\n                    _classCallCheck(this, Gesture);\n\n                    util.defaults(opts, {\n                        domEvents: true\n                    });\n                    this.element = element;\n                    // Map 'x' or 'y' string to hammerjs opts\n                    this.direction = opts.direction || 'x';\n                    opts.direction = this.direction === 'x' ? Hammer.DIRECTION_HORIZONTAL : Hammer.DIRECTION_VERTICAL;\n                    this._options = opts;\n                    this._callbacks = {};\n                }\n\n                _createClass(Gesture, [{\n                    key: 'options',\n                    value: function options() {\n                        var opts = arguments.length <= 0 || arguments[0] === undefined ? {} : arguments[0];\n\n                        util.extend(this._options, opts);\n                    }\n                }, {\n                    key: 'on',\n                    value: function on(type, cb) {\n                        if (type == 'pinch' || type == 'rotate') {\n                            this.hammertime.get('pinch').set({ enable: true });\n                        }\n                        this.hammertime.on(type, cb);\n                        (this._callbacks[type] || (this._callbacks[type] = [])).push(cb);\n                    }\n                }, {\n                    key: 'off',\n                    value: function off(type, cb) {\n                        this.hammertime.off(type, this._callbacks[type] ? cb : null);\n                    }\n                }, {\n                    key: 'listen',\n                    value: function listen() {\n                        this.hammertime = Hammer(this.element, this._options);\n                    }\n                }, {\n                    key: 'unlisten',\n                    value: function unlisten() {\n                        if (this.hammertime) {\n                            for (var type in this._callbacks) {\n                                for (var i = 0; i < this._callbacks[type].length; i++) {\n                                    this.hammertime.off(type, this._callbacks[type]);\n                                }\n                            }\n                            this.hammertime.destroy();\n                            this.hammertime = null;\n                            this._callbacks = {};\n                        }\n                    }\n                }, {\n                    key: 'destroy',\n                    value: function destroy() {\n                        this.unlisten();\n                    }\n                }]);\n\n                return Gesture;\n            })();\n\n            _export('Gesture', Gesture);\n        }\n    };\n});\nSystem.register('ionic/gestures/hammer', [], function (_export) {\n    /*! Hammer.JS - v2.0.4 - 2014-09-28\n     * http://hammerjs.github.io/\n     *\n     * Copyright (c) 2014 Jorik Tangelder;\n     * Licensed under the MIT license */\n    'use strict';\n\n    var VENDOR_PREFIXES, TEST_ELEMENT, TYPE_FUNCTION, round, abs, now, _uniqueId, MOBILE_REGEX, SUPPORT_TOUCH, SUPPORT_POINTER_EVENTS, SUPPORT_ONLY_TOUCH, INPUT_TYPE_TOUCH, INPUT_TYPE_PEN, INPUT_TYPE_MOUSE, INPUT_TYPE_KINECT, COMPUTE_INTERVAL, INPUT_START, INPUT_MOVE, INPUT_END, INPUT_CANCEL, DIRECTION_NONE, DIRECTION_LEFT, DIRECTION_RIGHT, DIRECTION_UP, DIRECTION_DOWN, DIRECTION_HORIZONTAL, DIRECTION_VERTICAL, DIRECTION_ALL, PROPS_XY, PROPS_CLIENT_XY, MOUSE_INPUT_MAP, MOUSE_ELEMENT_EVENTS, MOUSE_WINDOW_EVENTS, POINTER_INPUT_MAP, IE10_POINTER_TYPE_ENUM, POINTER_ELEMENT_EVENTS, POINTER_WINDOW_EVENTS, SINGLE_TOUCH_INPUT_MAP, SINGLE_TOUCH_TARGET_EVENTS, SINGLE_TOUCH_WINDOW_EVENTS, TOUCH_INPUT_MAP, TOUCH_TARGET_EVENTS, PREFIXED_TOUCH_ACTION, NATIVE_TOUCH_ACTION, TOUCH_ACTION_COMPUTE, TOUCH_ACTION_AUTO, TOUCH_ACTION_MANIPULATION, TOUCH_ACTION_NONE, TOUCH_ACTION_PAN_X, TOUCH_ACTION_PAN_Y, STATE_POSSIBLE, STATE_BEGAN, STATE_CHANGED, STATE_ENDED, STATE_RECOGNIZED, STATE_CANCELLED, STATE_FAILED, STOP, FORCED_STOP;\n\n    /**\n     * set a timeout with a given scope\n     * @param {Function} fn\n     * @param {Number} timeout\n     * @param {Object} context\n     * @returns {number}\n     */\n    function setTimeoutContext(fn, timeout, context) {\n        return setTimeout(bindFn(fn, context), timeout);\n    }\n    /**\n     * if the argument is an array, we want to execute the fn on each entry\n     * if it aint an array we don't want to do a thing.\n     * this is used by all the methods that accept a single and array argument.\n     * @param {*|Array} arg\n     * @param {String} fn\n     * @param {Object} [context]\n     * @returns {Boolean}\n     */\n    function invokeArrayArg(arg, fn, context) {\n        if (Array.isArray(arg)) {\n            each(arg, context[fn], context);\n            return true;\n        }\n        return false;\n    }\n    /**\n     * walk objects and arrays\n     * @param {Object} obj\n     * @param {Function} iterator\n     * @param {Object} context\n     */\n    function each(obj, iterator, context) {\n        var i;\n        if (!obj) {\n            return;\n        }\n        if (obj.forEach) {\n            obj.forEach(iterator, context);\n        } else if (obj.length !== undefined) {\n            i = 0;\n            while (i < obj.length) {\n                iterator.call(context, obj[i], i, obj);\n                i++;\n            }\n        } else {\n            for (i in obj) {\n                obj.hasOwnProperty(i) && iterator.call(context, obj[i], i, obj);\n            }\n        }\n    }\n    /**\n     * extend object.\n     * means that properties in dest will be overwritten by the ones in src.\n     * @param {Object} dest\n     * @param {Object} src\n     * @param {Boolean} [merge]\n     * @returns {Object} dest\n     */\n    function extend(dest, src, merge) {\n        var keys = Object.keys(src);\n        var i = 0;\n        while (i < keys.length) {\n            if (!merge || merge && dest[keys[i]] === undefined) {\n                dest[keys[i]] = src[keys[i]];\n            }\n            i++;\n        }\n        return dest;\n    }\n    /**\n     * merge the values from src in the dest.\n     * means that properties that exist in dest will not be overwritten by src\n     * @param {Object} dest\n     * @param {Object} src\n     * @returns {Object} dest\n     */\n    function merge(dest, src) {\n        return extend(dest, src, true);\n    }\n    /**\n     * simple class inheritance\n     * @param {Function} child\n     * @param {Function} base\n     * @param {Object} [properties]\n     */\n    function inherit(child, base, properties) {\n        var baseP = base.prototype,\n            childP;\n        childP = child.prototype = Object.create(baseP);\n        childP.constructor = child;\n        childP._super = baseP;\n        if (properties) {\n            extend(childP, properties);\n        }\n    }\n    /**\n     * simple function bind\n     * @param {Function} fn\n     * @param {Object} context\n     * @returns {Function}\n     */\n    function bindFn(fn, context) {\n        return function boundFn() {\n            return fn.apply(context, arguments);\n        };\n    }\n    /**\n     * let a boolean value also be a function that must return a boolean\n     * this first item in args will be used as the context\n     * @param {Boolean|Function} val\n     * @param {Array} [args]\n     * @returns {Boolean}\n     */\n    function boolOrFn(val, args) {\n        if (typeof val == TYPE_FUNCTION) {\n            return val.apply(args ? args[0] || undefined : undefined, args);\n        }\n        return val;\n    }\n    /**\n     * use the val2 when val1 is undefined\n     * @param {*} val1\n     * @param {*} val2\n     * @returns {*}\n     */\n    function ifUndefined(val1, val2) {\n        return val1 === undefined ? val2 : val1;\n    }\n    /**\n     * addEventListener with multiple events at once\n     * @param {EventTarget} target\n     * @param {String} types\n     * @param {Function} handler\n     */\n    function addEventListeners(target, types, handler) {\n        each(splitStr(types), function (type) {\n            //console.debug('hammer addEventListener', type, target.tagName);\n            target.addEventListener(type, handler, false);\n        });\n    }\n    /**\n     * removeEventListener with multiple events at once\n     * @param {EventTarget} target\n     * @param {String} types\n     * @param {Function} handler\n     */\n    function removeEventListeners(target, types, handler) {\n        each(splitStr(types), function (type) {\n            //console.debug('hammer removeEventListener', type, target.tagName);\n            target.removeEventListener(type, handler, false);\n        });\n    }\n    /**\n     * find if a node is in the given parent\n     * @method hasParent\n     * @param {HTMLElement} node\n     * @param {HTMLElement} parent\n     * @return {Boolean} found\n     */\n    function hasParent(node, parent) {\n        while (node) {\n            if (node == parent) {\n                return true;\n            }\n            node = node.parentNode;\n        }\n        return false;\n    }\n    /**\n     * small indexOf wrapper\n     * @param {String} str\n     * @param {String} find\n     * @returns {Boolean} found\n     */\n    function inStr(str, find) {\n        return str.indexOf(find) > -1;\n    }\n    /**\n     * split string on whitespace\n     * @param {String} str\n     * @returns {Array} words\n     */\n    function splitStr(str) {\n        return str.trim().split(/\\s+/g);\n    }\n    /**\n     * find if a array contains the object using indexOf or a simple polyFill\n     * @param {Array} src\n     * @param {String} find\n     * @param {String} [findByKey]\n     * @return {Boolean|Number} false when not found, or the index\n     */\n    function inArray(src, find, findByKey) {\n        if (src.indexOf && !findByKey) {\n            return src.indexOf(find);\n        } else {\n            var i = 0;\n            while (i < src.length) {\n                if (findByKey && src[i][findByKey] == find || !findByKey && src[i] === find) {\n                    return i;\n                }\n                i++;\n            }\n            return -1;\n        }\n    }\n    /**\n     * convert array-like objects to real arrays\n     * @param {Object} obj\n     * @returns {Array}\n     */\n    function toArray(obj) {\n        return Array.prototype.slice.call(obj, 0);\n    }\n    /**\n     * unique array with objects based on a key (like 'id') or just by the array's value\n     * @param {Array} src [{id:1},{id:2},{id:1}]\n     * @param {String} [key]\n     * @param {Boolean} [sort=False]\n     * @returns {Array} [{id:1},{id:2}]\n     */\n    function uniqueArray(src, key, sort) {\n        var results = [];\n        var values = [];\n        var i = 0;\n        while (i < src.length) {\n            var val = key ? src[i][key] : src[i];\n            if (inArray(values, val) < 0) {\n                results.push(src[i]);\n            }\n            values[i] = val;\n            i++;\n        }\n        if (sort) {\n            if (!key) {\n                results = results.sort();\n            } else {\n                results = results.sort(function sortUniqueArray(a, b) {\n                    return a[key] > b[key];\n                });\n            }\n        }\n        return results;\n    }\n    /**\n     * get the prefixed property\n     * @param {Object} obj\n     * @param {String} property\n     * @returns {String|Undefined} prefixed\n     */\n    function prefixed(obj, property) {\n        var prefix, prop;\n        var camelProp = property[0].toUpperCase() + property.slice(1);\n        var i = 0;\n        while (i < VENDOR_PREFIXES.length) {\n            prefix = VENDOR_PREFIXES[i];\n            prop = prefix ? prefix + camelProp : property;\n            if (prop in obj) {\n                return prop;\n            }\n            i++;\n        }\n        return undefined;\n    }\n    /**\n     * get a unique id\n     * @returns {number} uniqueId\n     */\n\n    function uniqueId() {\n        return _uniqueId++;\n    }\n    /**\n     * get the window object of an element\n     * @param {HTMLElement} element\n     * @returns {DocumentView|Window}\n     */\n    function getWindowForElement(element) {\n        var doc = element.ownerDocument;\n        return doc.defaultView || doc.parentWindow;\n    }\n\n    /**\n     * create new input type manager\n     * @param {Manager} manager\n     * @param {Function} callback\n     * @returns {Input}\n     * @constructor\n     */\n    function Input(manager, callback) {\n        var self = this;\n        this.manager = manager;\n        this.callback = callback;\n        this.element = manager.element;\n        this.target = manager.options.inputTarget;\n        // smaller wrapper around the handler, for the scope and the enabled state of the manager,\n        // so when disabled the input events are completely bypassed.\n        this.domHandler = function (ev) {\n            if (boolOrFn(manager.options.enable, [manager])) {\n                self.handler(ev);\n            }\n        };\n        this.init();\n    }\n\n    /**\n     * create new input type manager\n     * called by the Manager constructor\n     * @param {Hammer} manager\n     * @returns {Input}\n     */\n    function createInputInstance(manager) {\n        var Type;\n        var inputClass = manager.options.inputClass;\n        if (inputClass) {\n            Type = inputClass;\n        } else if (SUPPORT_POINTER_EVENTS) {\n            Type = PointerEventInput;\n        } else if (SUPPORT_ONLY_TOUCH) {\n            Type = TouchInput;\n        } else if (!SUPPORT_TOUCH) {\n            Type = MouseInput;\n        } else {\n            Type = TouchMouseInput;\n        }\n        return new Type(manager, inputHandler);\n    }\n    /**\n     * handle input events\n     * @param {Manager} manager\n     * @param {String} eventType\n     * @param {Object} input\n     */\n    function inputHandler(manager, eventType, input) {\n        var pointersLen = input.pointers.length;\n        var changedPointersLen = input.changedPointers.length;\n        var isFirst = eventType & INPUT_START && pointersLen - changedPointersLen === 0;\n        var isFinal = eventType & (INPUT_END | INPUT_CANCEL) && pointersLen - changedPointersLen === 0;\n        input.isFirst = !!isFirst;\n        input.isFinal = !!isFinal;\n        if (isFirst) {\n            manager.session = {};\n        }\n        // source event is the normalized value of the domEvents\n        // like 'touchstart, mouseup, pointerdown'\n        input.eventType = eventType;\n        // compute scale, rotation etc\n        computeInputData(manager, input);\n        // emit secret event\n        manager.emit('hammer.input', input);\n        manager.recognize(input);\n        manager.session.prevInput = input;\n    }\n    /**\n     * extend the data with some usable properties like scale, rotate, velocity etc\n     * @param {Object} manager\n     * @param {Object} input\n     */\n    function computeInputData(manager, input) {\n        var session = manager.session;\n        var pointers = input.pointers;\n        var pointersLength = pointers.length;\n        // store the first input to calculate the distance and direction\n        if (!session.firstInput) {\n            session.firstInput = simpleCloneInputData(input);\n        }\n        // to compute scale and rotation we need to store the multiple touches\n        if (pointersLength > 1 && !session.firstMultiple) {\n            session.firstMultiple = simpleCloneInputData(input);\n        } else if (pointersLength === 1) {\n            session.firstMultiple = false;\n        }\n        var firstInput = session.firstInput;\n        var firstMultiple = session.firstMultiple;\n        var offsetCenter = firstMultiple ? firstMultiple.center : firstInput.center;\n        var center = input.center = getCenter(pointers);\n        input.timeStamp = now();\n        input.deltaTime = input.timeStamp - firstInput.timeStamp;\n        input.angle = getAngle(offsetCenter, center);\n        input.distance = getDistance(offsetCenter, center);\n        computeDeltaXY(session, input);\n        input.offsetDirection = getDirection(input.deltaX, input.deltaY);\n        input.scale = firstMultiple ? getScale(firstMultiple.pointers, pointers) : 1;\n        input.rotation = firstMultiple ? getRotation(firstMultiple.pointers, pointers) : 0;\n        computeIntervalInputData(session, input);\n        // find the correct target\n        var target = manager.element;\n        if (hasParent(input.srcEvent.target, target)) {\n            target = input.srcEvent.target;\n        }\n        input.target = target;\n    }\n    function computeDeltaXY(session, input) {\n        var center = input.center;\n        var offset = session.offsetDelta || {};\n        var prevDelta = session.prevDelta || {};\n        var prevInput = session.prevInput || {};\n        if (input.eventType === INPUT_START || prevInput.eventType === INPUT_END) {\n            prevDelta = session.prevDelta = {\n                x: prevInput.deltaX || 0,\n                y: prevInput.deltaY || 0\n            };\n            offset = session.offsetDelta = {\n                x: center.x,\n                y: center.y\n            };\n        }\n        input.deltaX = prevDelta.x + (center.x - offset.x);\n        input.deltaY = prevDelta.y + (center.y - offset.y);\n    }\n    /**\n     * velocity is calculated every x ms\n     * @param {Object} session\n     * @param {Object} input\n     */\n    function computeIntervalInputData(session, input) {\n        var last = session.lastInterval || input,\n            deltaTime = input.timeStamp - last.timeStamp,\n            velocity,\n            velocityX,\n            velocityY,\n            direction;\n        if (input.eventType != INPUT_CANCEL && (deltaTime > COMPUTE_INTERVAL || last.velocity === undefined)) {\n            var deltaX = last.deltaX - input.deltaX;\n            var deltaY = last.deltaY - input.deltaY;\n            var v = getVelocity(deltaTime, deltaX, deltaY);\n            velocityX = v.x;\n            velocityY = v.y;\n            velocity = abs(v.x) > abs(v.y) ? v.x : v.y;\n            direction = getDirection(deltaX, deltaY);\n            session.lastInterval = input;\n        } else {\n            // use latest velocity info if it doesn't overtake a minimum period\n            velocity = last.velocity;\n            velocityX = last.velocityX;\n            velocityY = last.velocityY;\n            direction = last.direction;\n        }\n        input.velocity = velocity;\n        input.velocityX = velocityX;\n        input.velocityY = velocityY;\n        input.direction = direction;\n    }\n    /**\n     * create a simple clone from the input used for storage of firstInput and firstMultiple\n     * @param {Object} input\n     * @returns {Object} clonedInputData\n     */\n    function simpleCloneInputData(input) {\n        // make a simple copy of the pointers because we will get a reference if we don't\n        // we only need clientXY for the calculations\n        var pointers = [];\n        var i = 0;\n        while (i < input.pointers.length) {\n            pointers[i] = {\n                clientX: round(input.pointers[i].clientX),\n                clientY: round(input.pointers[i].clientY)\n            };\n            i++;\n        }\n        return {\n            timeStamp: now(),\n            pointers: pointers,\n            center: getCenter(pointers),\n            deltaX: input.deltaX,\n            deltaY: input.deltaY\n        };\n    }\n    /**\n     * get the center of all the pointers\n     * @param {Array} pointers\n     * @return {Object} center contains `x` and `y` properties\n     */\n    function getCenter(pointers) {\n        var pointersLength = pointers.length;\n        // no need to loop when only one touch\n        if (pointersLength === 1) {\n            return {\n                x: round(pointers[0].clientX),\n                y: round(pointers[0].clientY)\n            };\n        }\n        var x = 0,\n            y = 0,\n            i = 0;\n        while (i < pointersLength) {\n            x += pointers[i].clientX;\n            y += pointers[i].clientY;\n            i++;\n        }\n        return {\n            x: round(x / pointersLength),\n            y: round(y / pointersLength)\n        };\n    }\n    /**\n     * calculate the velocity between two points. unit is in px per ms.\n     * @param {Number} deltaTime\n     * @param {Number} x\n     * @param {Number} y\n     * @return {Object} velocity `x` and `y`\n     */\n    function getVelocity(deltaTime, x, y) {\n        return {\n            x: x / deltaTime || 0,\n            y: y / deltaTime || 0\n        };\n    }\n    /**\n     * get the direction between two points\n     * @param {Number} x\n     * @param {Number} y\n     * @return {Number} direction\n     */\n    function getDirection(x, y) {\n        if (x === y) {\n            return DIRECTION_NONE;\n        }\n        if (abs(x) >= abs(y)) {\n            return x > 0 ? DIRECTION_LEFT : DIRECTION_RIGHT;\n        }\n        return y > 0 ? DIRECTION_UP : DIRECTION_DOWN;\n    }\n    /**\n     * calculate the absolute distance between two points\n     * @param {Object} p1 {x, y}\n     * @param {Object} p2 {x, y}\n     * @param {Array} [props] containing x and y keys\n     * @return {Number} distance\n     */\n    function getDistance(p1, p2, props) {\n        if (!props) {\n            props = PROPS_XY;\n        }\n        var x = p2[props[0]] - p1[props[0]],\n            y = p2[props[1]] - p1[props[1]];\n        return Math.sqrt(x * x + y * y);\n    }\n    /**\n     * calculate the angle between two coordinates\n     * @param {Object} p1\n     * @param {Object} p2\n     * @param {Array} [props] containing x and y keys\n     * @return {Number} angle\n     */\n    function getAngle(p1, p2, props) {\n        if (!props) {\n            props = PROPS_XY;\n        }\n        var x = p2[props[0]] - p1[props[0]],\n            y = p2[props[1]] - p1[props[1]];\n        return Math.atan2(y, x) * 180 / Math.PI;\n    }\n    /**\n     * calculate the rotation degrees between two pointersets\n     * @param {Array} start array of pointers\n     * @param {Array} end array of pointers\n     * @return {Number} rotation\n     */\n    function getRotation(start, end) {\n        return getAngle(end[1], end[0], PROPS_CLIENT_XY) - getAngle(start[1], start[0], PROPS_CLIENT_XY);\n    }\n    /**\n     * calculate the scale factor between two pointersets\n     * no scale is 1, and goes down to 0 when pinched together, and bigger when pinched out\n     * @param {Array} start array of pointers\n     * @param {Array} end array of pointers\n     * @return {Number} scale\n     */\n    function getScale(start, end) {\n        return getDistance(end[0], end[1], PROPS_CLIENT_XY) / getDistance(start[0], start[1], PROPS_CLIENT_XY);\n    }\n\n    /**\n     * Mouse events input\n     * @constructor\n     * @extends Input\n     */\n    function MouseInput() {\n        this.evEl = MOUSE_ELEMENT_EVENTS;\n        this.evWin = MOUSE_WINDOW_EVENTS;\n        this.allow = true; // used by Input.TouchMouse to disable mouse events\n        this.pressed = false; // mousedown state\n        Input.apply(this, arguments);\n    }\n\n    /**\n     * Pointer events input\n     * @constructor\n     * @extends Input\n     */\n    function PointerEventInput() {\n        this.evEl = POINTER_ELEMENT_EVENTS;\n        this.evWin = POINTER_WINDOW_EVENTS;\n        Input.apply(this, arguments);\n        this.store = this.manager.session.pointerEvents = [];\n    }\n\n    /**\n     * Touch events input\n     * @constructor\n     * @extends Input\n     */\n    function SingleTouchInput() {\n        this.evTarget = SINGLE_TOUCH_TARGET_EVENTS;\n        this.evWin = SINGLE_TOUCH_WINDOW_EVENTS;\n        this.started = false;\n        Input.apply(this, arguments);\n    }\n\n    /**\n     * @this {TouchInput}\n     * @param {Object} ev\n     * @param {Number} type flag\n     * @returns {undefined|Array} [all, changed]\n     */\n    function normalizeSingleTouches(ev, type) {\n        var all = toArray(ev.touches);\n        var changed = toArray(ev.changedTouches);\n        if (type & (INPUT_END | INPUT_CANCEL)) {\n            all = uniqueArray(all.concat(changed), 'identifier', true);\n        }\n        return [all, changed];\n    }\n\n    /**\n     * Multi-user touch events input\n     * @constructor\n     * @extends Input\n     */\n    function TouchInput() {\n        this.evTarget = TOUCH_TARGET_EVENTS;\n        this.targetIds = {};\n        Input.apply(this, arguments);\n    }\n\n    /**\n     * @this {TouchInput}\n     * @param {Object} ev\n     * @param {Number} type flag\n     * @returns {undefined|Array} [all, changed]\n     */\n    function getTouches(ev, type) {\n        var allTouches = toArray(ev.touches);\n        var targetIds = this.targetIds;\n        // when there is only one touch, the process can be simplified\n        if (type & (INPUT_START | INPUT_MOVE) && allTouches.length === 1) {\n            targetIds[allTouches[0].identifier] = true;\n            return [allTouches, allTouches];\n        }\n        var i,\n            targetTouches,\n            changedTouches = toArray(ev.changedTouches),\n            changedTargetTouches = [],\n            target = this.target;\n        // get target touches from touches\n        targetTouches = allTouches.filter(function (touch) {\n            return hasParent(touch.target, target);\n        });\n        // collect touches\n        if (type === INPUT_START) {\n            i = 0;\n            while (i < targetTouches.length) {\n                targetIds[targetTouches[i].identifier] = true;\n                i++;\n            }\n        }\n        // filter changed touches to only contain touches that exist in the collected target ids\n        i = 0;\n        while (i < changedTouches.length) {\n            if (targetIds[changedTouches[i].identifier]) {\n                changedTargetTouches.push(changedTouches[i]);\n            }\n            // cleanup removed touches\n            if (type & (INPUT_END | INPUT_CANCEL)) {\n                delete targetIds[changedTouches[i].identifier];\n            }\n            i++;\n        }\n        if (!changedTargetTouches.length) {\n            return;\n        }\n        return [\n        // merge targetTouches with changedTargetTouches so it contains ALL touches, including 'end' and 'cancel'\n        uniqueArray(targetTouches.concat(changedTargetTouches), 'identifier', true), changedTargetTouches];\n    }\n    /**\n     * Combined touch and mouse input\n     *\n     * Touch has a higher priority then mouse, and while touching no mouse events are allowed.\n     * This because touch devices also emit mouse events while doing a touch.\n     *\n     * @constructor\n     * @extends Input\n     */\n    function TouchMouseInput() {\n        Input.apply(this, arguments);\n        var handler = bindFn(this.handler, this);\n        this.touch = new TouchInput(this.manager, handler);\n        this.mouse = new MouseInput(this.manager, handler);\n    }\n\n    /**\n     * Touch Action\n     * sets the touchAction property or uses the js alternative\n     * @param {Manager} manager\n     * @param {String} value\n     * @constructor\n     */\n    function TouchAction(manager, value) {\n        this.manager = manager;\n        this.set(value);\n    }\n\n    /**\n     * when the touchActions are collected they are not a valid value, so we need to clean things up. *\n     * @param {String} actions\n     * @returns {*}\n     */\n    function cleanTouchActions(actions) {\n        // none\n        if (inStr(actions, TOUCH_ACTION_NONE)) {\n            return TOUCH_ACTION_NONE;\n        }\n        var hasPanX = inStr(actions, TOUCH_ACTION_PAN_X);\n        var hasPanY = inStr(actions, TOUCH_ACTION_PAN_Y);\n        // pan-x and pan-y can be combined\n        if (hasPanX && hasPanY) {\n            return TOUCH_ACTION_PAN_X + ' ' + TOUCH_ACTION_PAN_Y;\n        }\n        // pan-x OR pan-y\n        if (hasPanX || hasPanY) {\n            return hasPanX ? TOUCH_ACTION_PAN_X : TOUCH_ACTION_PAN_Y;\n        }\n        // manipulation\n        if (inStr(actions, TOUCH_ACTION_MANIPULATION)) {\n            return TOUCH_ACTION_MANIPULATION;\n        }\n        return TOUCH_ACTION_AUTO;\n    }\n    /**\n     * Recognizer flow explained; *\n     * All recognizers have the initial state of POSSIBLE when a input session starts.\n     * The definition of a input session is from the first input until the last input, with all it's movement in it. *\n     * Example session for mouse-input: mousedown -> mousemove -> mouseup\n     *\n     * On each recognizing cycle (see Manager.recognize) the .recognize() method is executed\n     * which determines with state it should be.\n     *\n     * If the recognizer has the state FAILED, CANCELLED or RECOGNIZED (equals ENDED), it is reset to\n     * POSSIBLE to give it another change on the next cycle.\n     *\n     *               Possible\n     *                  |\n     *            +-----+---------------+\n     *            |                     |\n     *      +-----+-----+               |\n     *      |           |               |\n     *   Failed      Cancelled          |\n     *                          +-------+------+\n     *                          |              |\n     *                      Recognized       Began\n     *                                         |\n     *                                      Changed\n     *                                         |\n     *                                  Ended/Recognized\n     */\n\n    /**\n     * Recognizer\n     * Every recognizer needs to extend from this class.\n     * @constructor\n     * @param {Object} options\n     */\n    function Recognizer(options) {\n        this.id = uniqueId();\n        this.manager = null;\n        this.options = merge(options || {}, this.defaults);\n        // default is enable true\n        this.options.enable = ifUndefined(this.options.enable, true);\n        this.state = STATE_POSSIBLE;\n        this.simultaneous = {};\n        this.requireFail = [];\n    }\n\n    /**\n     * get a usable string, used as event postfix\n     * @param {Const} state\n     * @returns {String} state\n     */\n    function stateStr(state) {\n        if (state & STATE_CANCELLED) {\n            return 'cancel';\n        } else if (state & STATE_ENDED) {\n            return 'end';\n        } else if (state & STATE_CHANGED) {\n            return 'move';\n        } else if (state & STATE_BEGAN) {\n            return 'start';\n        }\n        return '';\n    }\n    /**\n     * direction cons to string\n     * @param {Const} direction\n     * @returns {String}\n     */\n    function directionStr(direction) {\n        if (direction == DIRECTION_DOWN) {\n            return 'down';\n        } else if (direction == DIRECTION_UP) {\n            return 'up';\n        } else if (direction == DIRECTION_LEFT) {\n            return 'left';\n        } else if (direction == DIRECTION_RIGHT) {\n            return 'right';\n        }\n        return '';\n    }\n    /**\n     * get a recognizer by name if it is bound to a manager\n     * @param {Recognizer|String} otherRecognizer\n     * @param {Recognizer} recognizer\n     * @returns {Recognizer}\n     */\n    function getRecognizerByNameIfManager(otherRecognizer, recognizer) {\n        var manager = recognizer.manager;\n        if (manager) {\n            return manager.get(otherRecognizer);\n        }\n        return otherRecognizer;\n    }\n    /**\n     * This recognizer is just used as a base for the simple attribute recognizers.\n     * @constructor\n     * @extends Recognizer\n     */\n    function AttrRecognizer() {\n        Recognizer.apply(this, arguments);\n    }\n\n    /**\n     * Pan\n     * Recognized when the pointer is down and moved in the allowed direction.\n     * @constructor\n     * @extends AttrRecognizer\n     */\n    function PanRecognizer() {\n        AttrRecognizer.apply(this, arguments);\n        this.pX = null;\n        this.pY = null;\n    }\n\n    /**\n     * Pinch\n     * Recognized when two or more pointers are moving toward (zoom-in) or away from each other (zoom-out).\n     * @constructor\n     * @extends AttrRecognizer\n     */\n    function PinchRecognizer() {\n        AttrRecognizer.apply(this, arguments);\n    }\n\n    /**\n     * Press\n     * Recognized when the pointer is down for x ms without any movement.\n     * @constructor\n     * @extends Recognizer\n     */\n    function PressRecognizer() {\n        Recognizer.apply(this, arguments);\n        this._timer = null;\n        this._input = null;\n    }\n\n    /**\n     * Rotate\n     * Recognized when two or more pointer are moving in a circular motion.\n     * @constructor\n     * @extends AttrRecognizer\n     */\n    function RotateRecognizer() {\n        AttrRecognizer.apply(this, arguments);\n    }\n\n    /**\n     * Swipe\n     * Recognized when the pointer is moving fast (velocity), with enough distance in the allowed direction.\n     * @constructor\n     * @extends AttrRecognizer\n     */\n    function SwipeRecognizer() {\n        AttrRecognizer.apply(this, arguments);\n    }\n\n    /**\n     * A tap is ecognized when the pointer is doing a small tap/click. Multiple taps are recognized if they occur\n     * between the given interval and position. The delay option can be used to recognize multi-taps without firing\n     * a single tap.\n     *\n     * The eventData from the emitted event contains the property `tapCount`, which contains the amount of\n     * multi-taps being recognized.\n     * @constructor\n     * @extends Recognizer\n     */\n    function TapRecognizer() {\n        Recognizer.apply(this, arguments);\n        // previous time and center,\n        // used for tap counting\n        this.pTime = false;\n        this.pCenter = false;\n        this._timer = null;\n        this._input = null;\n        this.count = 0;\n    }\n\n    /**\n     * Simple way to create an manager with a default set of recognizers.\n     * @param {HTMLElement} element\n     * @param {Object} [options]\n     * @constructor\n     */\n    function Hammer(element, options) {\n        options = options || {};\n        options.recognizers = ifUndefined(options.recognizers, Hammer.defaults.preset);\n        return new Manager(element, options);\n    }\n    /**\n     * @const {string}\n     */\n\n    /**\n     * Manager\n     * @param {HTMLElement} element\n     * @param {Object} [options]\n     * @constructor\n     */\n    function Manager(element, options) {\n        options = options || {};\n        this.options = merge(options, Hammer.defaults);\n        this.options.inputTarget = this.options.inputTarget || element;\n        this.handlers = {};\n        this.session = {};\n        this.recognizers = [];\n        this.element = element;\n        this.input = createInputInstance(this);\n        this.touchAction = new TouchAction(this, this.options.touchAction);\n        toggleCssProps(this, true);\n        each(options.recognizers, function (item) {\n            var recognizer = this.add(new item[0](item[1]));\n            item[2] && recognizer.recognizeWith(item[2]);\n            item[3] && recognizer.requireFailure(item[3]);\n        }, this);\n    }\n\n    /**\n     * add/remove the css properties as defined in manager.options.cssProps\n     * @param {Manager} manager\n     * @param {Boolean} add\n     */\n    function toggleCssProps(manager, add) {\n        var element = manager.element;\n        each(manager.options.cssProps, function (value, name) {\n            element.style[prefixed(element.style, name)] = add ? value : '';\n        });\n    }\n    /**\n     * trigger dom event\n     * @param {String} event\n     * @param {Object} data\n     */\n    function triggerDomEvent(event, data) {\n        var gestureEvent = document.createEvent('Event');\n        gestureEvent.initEvent(event, true, true);\n        gestureEvent.gesture = data;\n        data.target.dispatchEvent(gestureEvent);\n    }\n    return {\n        setters: [],\n        execute: function () {\n            VENDOR_PREFIXES = ['', 'webkit', 'moz', 'MS', 'ms', 'o'];\n            TEST_ELEMENT = document.createElement('div');\n            TYPE_FUNCTION = 'function';\n            round = Math.round;\n            abs = Math.abs;\n            now = Date.now;\n            _uniqueId = 1;\n            MOBILE_REGEX = /mobile|tablet|ip(ad|hone|od)|android/i;\n            SUPPORT_TOUCH = 'ontouchstart' in window;\n            SUPPORT_POINTER_EVENTS = prefixed(window, 'PointerEvent') !== undefined;\n            SUPPORT_ONLY_TOUCH = SUPPORT_TOUCH && MOBILE_REGEX.test(navigator.userAgent);\n            INPUT_TYPE_TOUCH = 'touch';\n            INPUT_TYPE_PEN = 'pen';\n            INPUT_TYPE_MOUSE = 'mouse';\n            INPUT_TYPE_KINECT = 'kinect';\n            COMPUTE_INTERVAL = 25;\n            INPUT_START = 1;\n            INPUT_MOVE = 2;\n            INPUT_END = 4;\n            INPUT_CANCEL = 8;\n            DIRECTION_NONE = 1;\n            DIRECTION_LEFT = 2;\n            DIRECTION_RIGHT = 4;\n            DIRECTION_UP = 8;\n            DIRECTION_DOWN = 16;\n            DIRECTION_HORIZONTAL = DIRECTION_LEFT | DIRECTION_RIGHT;\n            DIRECTION_VERTICAL = DIRECTION_UP | DIRECTION_DOWN;\n            DIRECTION_ALL = DIRECTION_HORIZONTAL | DIRECTION_VERTICAL;\n            PROPS_XY = ['x', 'y'];\n            PROPS_CLIENT_XY = ['clientX', 'clientY'];\n            Input.prototype = {\n                /**\n                 * should handle the inputEvent data and trigger the callback\n                 * @virtual\n                 */\n                handler: function handler() {},\n                /**\n                 * bind the events\n                 */\n                init: function init() {\n                    //console.debug('hammer Input init')\n                    this.evEl && addEventListeners(this.element, this.evEl, this.domHandler);\n                    this.evTarget && addEventListeners(this.target, this.evTarget, this.domHandler);\n                    this.evWin && addEventListeners(getWindowForElement(this.element), this.evWin, this.domHandler);\n                },\n                /**\n                 * unbind the events\n                 */\n                destroy: function destroy() {\n                    this.evEl && removeEventListeners(this.element, this.evEl, this.domHandler);\n                    this.evTarget && removeEventListeners(this.target, this.evTarget, this.domHandler);\n                    this.evWin && removeEventListeners(getWindowForElement(this.element), this.evWin, this.domHandler);\n                }\n            };MOUSE_INPUT_MAP = {\n                mousedown: INPUT_START,\n                mousemove: INPUT_MOVE,\n                mouseup: INPUT_END\n            };\n            MOUSE_ELEMENT_EVENTS = 'mousedown';\n            MOUSE_WINDOW_EVENTS = 'mousemove mouseup';\n            inherit(MouseInput, Input, {\n                /**\n                 * handle mouse events\n                 * @param {Object} ev\n                 */\n                handler: function MEhandler(ev) {\n                    var eventType = MOUSE_INPUT_MAP[ev.type];\n                    // on start we want to have the left mouse button down\n                    if (eventType & INPUT_START && ev.button === 0) {\n                        this.pressed = true;\n                    }\n                    if (eventType & INPUT_MOVE && ev.which !== 1) {\n                        eventType = INPUT_END;\n                    }\n                    // mouse must be down, and mouse events are allowed (see the TouchMouse input)\n                    if (!this.pressed || !this.allow) {\n                        return;\n                    }\n                    if (eventType & INPUT_END) {\n                        this.pressed = false;\n                    }\n                    this.callback(this.manager, eventType, {\n                        pointers: [ev],\n                        changedPointers: [ev],\n                        pointerType: INPUT_TYPE_MOUSE,\n                        srcEvent: ev\n                    });\n                }\n            });\n            POINTER_INPUT_MAP = {\n                pointerdown: INPUT_START,\n                pointermove: INPUT_MOVE,\n                pointerup: INPUT_END,\n                pointercancel: INPUT_CANCEL,\n                pointerout: INPUT_CANCEL\n            };\n\n            // in IE10 the pointer types is defined as an enum\n            IE10_POINTER_TYPE_ENUM = {\n                2: INPUT_TYPE_TOUCH,\n                3: INPUT_TYPE_PEN,\n                4: INPUT_TYPE_MOUSE,\n                5: INPUT_TYPE_KINECT // see https://twitter.com/jacobrossi/status/480596438489890816\n            };\n            POINTER_ELEMENT_EVENTS = 'pointerdown';\n            POINTER_WINDOW_EVENTS = 'pointermove pointerup pointercancel';\n\n            // IE10 has prefixed support, and case-sensitive\n            if (window.MSPointerEvent) {\n                POINTER_ELEMENT_EVENTS = 'MSPointerDown';\n                POINTER_WINDOW_EVENTS = 'MSPointerMove MSPointerUp MSPointerCancel';\n            }inherit(PointerEventInput, Input, {\n                /**\n                 * handle mouse events\n                 * @param {Object} ev\n                 */\n                handler: function PEhandler(ev) {\n                    var store = this.store;\n                    var removePointer = false;\n                    var eventTypeNormalized = ev.type.toLowerCase().replace('ms', '');\n                    var eventType = POINTER_INPUT_MAP[eventTypeNormalized];\n                    var pointerType = IE10_POINTER_TYPE_ENUM[ev.pointerType] || ev.pointerType;\n                    var isTouch = pointerType == INPUT_TYPE_TOUCH;\n                    // get index of the event in the store\n                    var storeIndex = inArray(store, ev.pointerId, 'pointerId');\n                    // start and mouse must be down\n                    if (eventType & INPUT_START && (ev.button === 0 || isTouch)) {\n                        if (storeIndex < 0) {\n                            store.push(ev);\n                            storeIndex = store.length - 1;\n                        }\n                    } else if (eventType & (INPUT_END | INPUT_CANCEL)) {\n                        removePointer = true;\n                    }\n                    // it not found, so the pointer hasn't been down (so it's probably a hover)\n                    if (storeIndex < 0) {\n                        return;\n                    }\n                    // update the event in the store\n                    store[storeIndex] = ev;\n                    this.callback(this.manager, eventType, {\n                        pointers: store,\n                        changedPointers: [ev],\n                        pointerType: pointerType,\n                        srcEvent: ev\n                    });\n                    if (removePointer) {\n                        // remove from the store\n                        store.splice(storeIndex, 1);\n                    }\n                }\n            });\n            SINGLE_TOUCH_INPUT_MAP = {\n                touchstart: INPUT_START,\n                touchmove: INPUT_MOVE,\n                touchend: INPUT_END,\n                touchcancel: INPUT_CANCEL\n            };\n            SINGLE_TOUCH_TARGET_EVENTS = 'touchstart';\n            SINGLE_TOUCH_WINDOW_EVENTS = 'touchstart touchmove touchend touchcancel';\n            inherit(SingleTouchInput, Input, {\n                handler: function TEhandler(ev) {\n                    var type = SINGLE_TOUCH_INPUT_MAP[ev.type];\n                    // should we handle the touch events?\n                    if (type === INPUT_START) {\n                        this.started = true;\n                    }\n                    if (!this.started) {\n                        return;\n                    }\n                    var touches = normalizeSingleTouches.call(this, ev, type);\n                    // when done, reset the started state\n                    if (type & (INPUT_END | INPUT_CANCEL) && touches[0].length - touches[1].length === 0) {\n                        this.started = false;\n                    }\n                    this.callback(this.manager, type, {\n                        pointers: touches[0],\n                        changedPointers: touches[1],\n                        pointerType: INPUT_TYPE_TOUCH,\n                        srcEvent: ev\n                    });\n                }\n            });TOUCH_INPUT_MAP = {\n                touchstart: INPUT_START,\n                touchmove: INPUT_MOVE,\n                touchend: INPUT_END,\n                touchcancel: INPUT_CANCEL\n            };\n            TOUCH_TARGET_EVENTS = 'touchstart touchmove touchend touchcancel';\n            inherit(TouchInput, Input, {\n                handler: function MTEhandler(ev) {\n                    var type = TOUCH_INPUT_MAP[ev.type];\n                    var touches = getTouches.call(this, ev, type);\n                    if (!touches) {\n                        return;\n                    }\n                    this.callback(this.manager, type, {\n                        pointers: touches[0],\n                        changedPointers: touches[1],\n                        pointerType: INPUT_TYPE_TOUCH,\n                        srcEvent: ev\n                    });\n                }\n            });inherit(TouchMouseInput, Input, {\n                /**\n                 * handle mouse and touch events\n                 * @param {Hammer} manager\n                 * @param {String} inputEvent\n                 * @param {Object} inputData\n                 */\n                handler: function TMEhandler(manager, inputEvent, inputData) {\n                    var isTouch = inputData.pointerType == INPUT_TYPE_TOUCH,\n                        isMouse = inputData.pointerType == INPUT_TYPE_MOUSE;\n                    // when we're in a touch event, so  block all upcoming mouse events\n                    // most mobile browser also emit mouseevents, right after touchstart\n                    if (isTouch) {\n                        this.mouse.allow = false;\n                    } else if (isMouse && !this.mouse.allow) {\n                        return;\n                    }\n                    // reset the allowMouse when we're done\n                    if (inputEvent & (INPUT_END | INPUT_CANCEL)) {\n                        this.mouse.allow = true;\n                    }\n                    this.callback(manager, inputEvent, inputData);\n                },\n                /**\n                 * remove the event listeners\n                 */\n                destroy: function destroy() {\n                    this.touch.destroy();\n                    this.mouse.destroy();\n                }\n            });\n            PREFIXED_TOUCH_ACTION = prefixed(TEST_ELEMENT.style, 'touchAction');\n            NATIVE_TOUCH_ACTION = PREFIXED_TOUCH_ACTION !== undefined;\n\n            // magical touchAction value\n            TOUCH_ACTION_COMPUTE = 'compute';\n            TOUCH_ACTION_AUTO = 'auto';\n            TOUCH_ACTION_MANIPULATION = 'manipulation';\n            // not implemented\n            TOUCH_ACTION_NONE = 'none';\n            TOUCH_ACTION_PAN_X = 'pan-x';\n            TOUCH_ACTION_PAN_Y = 'pan-y';\n            TouchAction.prototype = {\n                /**\n                 * set the touchAction value on the element or enable the polyfill\n                 * @param {String} value\n                 */\n                set: function set(value) {\n                    // find out the touch-action by the event handlers\n                    if (value == TOUCH_ACTION_COMPUTE) {\n                        value = this.compute();\n                    }\n                    if (NATIVE_TOUCH_ACTION) {\n                        this.manager.element.style[PREFIXED_TOUCH_ACTION] = value;\n                    }\n                    this.actions = value.toLowerCase().trim();\n                },\n                /**\n                 * just re-set the touchAction value\n                 */\n                update: function update() {\n                    this.set(this.manager.options.touchAction);\n                },\n                /**\n                 * compute the value for the touchAction property based on the recognizer's settings\n                 * @returns {String} value\n                 */\n                compute: function compute() {\n                    var actions = [];\n                    each(this.manager.recognizers, function (recognizer) {\n                        if (boolOrFn(recognizer.options.enable, [recognizer])) {\n                            actions = actions.concat(recognizer.getTouchAction());\n                        }\n                    });\n                    return cleanTouchActions(actions.join(' '));\n                },\n                /**\n                 * this method is called on each input cycle and provides the preventing of the browser behavior\n                 * @param {Object} input\n                 */\n                preventDefaults: function preventDefaults(input) {\n                    // not needed with native support for the touchAction property\n                    if (NATIVE_TOUCH_ACTION) {\n                        return;\n                    }\n                    var srcEvent = input.srcEvent;\n                    var direction = input.offsetDirection;\n                    // if the touch action did prevented once this session\n                    if (this.manager.session.prevented) {\n                        srcEvent.preventDefault();\n                        return;\n                    }\n                    var actions = this.actions;\n                    var hasNone = inStr(actions, TOUCH_ACTION_NONE);\n                    var hasPanY = inStr(actions, TOUCH_ACTION_PAN_Y);\n                    var hasPanX = inStr(actions, TOUCH_ACTION_PAN_X);\n                    if (hasNone || hasPanY && direction & DIRECTION_HORIZONTAL || hasPanX && direction & DIRECTION_VERTICAL) {\n                        return this.preventSrc(srcEvent);\n                    }\n                },\n                /**\n                 * call preventDefault to prevent the browser's default behavior (scrolling in most cases)\n                 * @param {Object} srcEvent\n                 */\n                preventSrc: function preventSrc(srcEvent) {\n                    this.manager.session.prevented = true;\n                    srcEvent.preventDefault();\n                }\n            };STATE_POSSIBLE = 1;\n            STATE_BEGAN = 2;\n            STATE_CHANGED = 4;\n            STATE_ENDED = 8;\n            STATE_RECOGNIZED = STATE_ENDED;\n            STATE_CANCELLED = 16;\n            STATE_FAILED = 32;\n            Recognizer.prototype = {\n                /**\n                 * @virtual\n                 * @type {Object}\n                 */\n                defaults: {},\n                /**\n                 * set options\n                 * @param {Object} options\n                 * @return {Recognizer}\n                 */\n                set: function set(options) {\n                    extend(this.options, options);\n                    // also update the touchAction, in case something changed about the directions/enabled state\n                    this.manager && this.manager.touchAction.update();\n                    return this;\n                },\n                /**\n                 * recognize simultaneous with an other recognizer.\n                 * @param {Recognizer} otherRecognizer\n                 * @returns {Recognizer} this\n                 */\n                recognizeWith: function recognizeWith(otherRecognizer) {\n                    if (invokeArrayArg(otherRecognizer, 'recognizeWith', this)) {\n                        return this;\n                    }\n                    var simultaneous = this.simultaneous;\n                    otherRecognizer = getRecognizerByNameIfManager(otherRecognizer, this);\n                    if (!simultaneous[otherRecognizer.id]) {\n                        simultaneous[otherRecognizer.id] = otherRecognizer;\n                        otherRecognizer.recognizeWith(this);\n                    }\n                    return this;\n                },\n                /**\n                 * drop the simultaneous link. it doesnt remove the link on the other recognizer.\n                 * @param {Recognizer} otherRecognizer\n                 * @returns {Recognizer} this\n                 */\n                dropRecognizeWith: function dropRecognizeWith(otherRecognizer) {\n                    if (invokeArrayArg(otherRecognizer, 'dropRecognizeWith', this)) {\n                        return this;\n                    }\n                    otherRecognizer = getRecognizerByNameIfManager(otherRecognizer, this);\n                    delete this.simultaneous[otherRecognizer.id];\n                    return this;\n                },\n                /**\n                 * recognizer can only run when an other is failing\n                 * @param {Recognizer} otherRecognizer\n                 * @returns {Recognizer} this\n                 */\n                requireFailure: function requireFailure(otherRecognizer) {\n                    if (invokeArrayArg(otherRecognizer, 'requireFailure', this)) {\n                        return this;\n                    }\n                    var requireFail = this.requireFail;\n                    otherRecognizer = getRecognizerByNameIfManager(otherRecognizer, this);\n                    if (inArray(requireFail, otherRecognizer) === -1) {\n                        requireFail.push(otherRecognizer);\n                        otherRecognizer.requireFailure(this);\n                    }\n                    return this;\n                },\n                /**\n                 * drop the requireFailure link. it does not remove the link on the other recognizer.\n                 * @param {Recognizer} otherRecognizer\n                 * @returns {Recognizer} this\n                 */\n                dropRequireFailure: function dropRequireFailure(otherRecognizer) {\n                    if (invokeArrayArg(otherRecognizer, 'dropRequireFailure', this)) {\n                        return this;\n                    }\n                    otherRecognizer = getRecognizerByNameIfManager(otherRecognizer, this);\n                    var index = inArray(this.requireFail, otherRecognizer);\n                    if (index > -1) {\n                        this.requireFail.splice(index, 1);\n                    }\n                    return this;\n                },\n                /**\n                 * has require failures boolean\n                 * @returns {boolean}\n                 */\n                hasRequireFailures: function hasRequireFailures() {\n                    return this.requireFail.length > 0;\n                },\n                /**\n                 * if the recognizer can recognize simultaneous with an other recognizer\n                 * @param {Recognizer} otherRecognizer\n                 * @returns {Boolean}\n                 */\n                canRecognizeWith: function canRecognizeWith(otherRecognizer) {\n                    return !!this.simultaneous[otherRecognizer.id];\n                },\n                /**\n                 * You should use `tryEmit` instead of `emit` directly to check\n                 * that all the needed recognizers has failed before emitting.\n                 * @param {Object} input\n                 */\n                emit: function emit(input) {\n                    var self = this;\n                    var state = this.state;\n                    function emit(withState) {\n                        self.manager.emit(self.options.event + (withState ? stateStr(state) : ''), input);\n                    }\n                    // 'panstart' and 'panmove'\n                    if (state < STATE_ENDED) {\n                        emit(true);\n                    }\n                    emit(); // simple 'eventName' events\n                    // panend and pancancel\n                    if (state >= STATE_ENDED) {\n                        emit(true);\n                    }\n                },\n                /**\n                 * Check that all the require failure recognizers has failed,\n                 * if true, it emits a gesture event,\n                 * otherwise, setup the state to FAILED.\n                 * @param {Object} input\n                 */\n                tryEmit: function tryEmit(input) {\n                    if (this.canEmit()) {\n                        return this.emit(input);\n                    }\n                    // it's failing anyway\n                    this.state = STATE_FAILED;\n                },\n                /**\n                 * can we emit?\n                 * @returns {boolean}\n                 */\n                canEmit: function canEmit() {\n                    var i = 0;\n                    while (i < this.requireFail.length) {\n                        if (!(this.requireFail[i].state & (STATE_FAILED | STATE_POSSIBLE))) {\n                            return false;\n                        }\n                        i++;\n                    }\n                    return true;\n                },\n                /**\n                 * update the recognizer\n                 * @param {Object} inputData\n                 */\n                recognize: function recognize(inputData) {\n                    // make a new copy of the inputData\n                    // so we can change the inputData without messing up the other recognizers\n                    var inputDataClone = extend({}, inputData);\n                    // is is enabled and allow recognizing?\n                    if (!boolOrFn(this.options.enable, [this, inputDataClone])) {\n                        this.reset();\n                        this.state = STATE_FAILED;\n                        return;\n                    }\n                    // reset when we've reached the end\n                    if (this.state & (STATE_RECOGNIZED | STATE_CANCELLED | STATE_FAILED)) {\n                        this.state = STATE_POSSIBLE;\n                    }\n                    this.state = this.process(inputDataClone);\n                    // the recognizer has recognized a gesture\n                    // so trigger an event\n                    if (this.state & (STATE_BEGAN | STATE_CHANGED | STATE_ENDED | STATE_CANCELLED)) {\n                        this.tryEmit(inputDataClone);\n                    }\n                },\n                /**\n                 * return the state of the recognizer\n                 * the actual recognizing happens in this method\n                 * @virtual\n                 * @param {Object} inputData\n                 * @returns {Const} STATE\n                 */\n                process: function process(inputData) {},\n                /**\n                 * return the preferred touch-action\n                 * @virtual\n                 * @returns {Array}\n                 */\n                getTouchAction: function getTouchAction() {},\n                /**\n                 * called when the gesture isn't allowed to recognize\n                 * like when another is being recognized or it is disabled\n                 * @virtual\n                 */\n                reset: function reset() {}\n            };inherit(AttrRecognizer, Recognizer, {\n                /**\n                 * @namespace\n                 * @memberof AttrRecognizer\n                 */\n                defaults: {\n                    /**\n                     * @type {Number}\n                     * @default 1\n                     */\n                    pointers: 1\n                },\n                /**\n                 * Used to check if it the recognizer receives valid input, like input.distance > 10.\n                 * @memberof AttrRecognizer\n                 * @param {Object} input\n                 * @returns {Boolean} recognized\n                 */\n                attrTest: function attrTest(input) {\n                    var optionPointers = this.options.pointers;\n                    return optionPointers === 0 || input.pointers.length === optionPointers;\n                },\n                /**\n                 * Process the input and return the state for the recognizer\n                 * @memberof AttrRecognizer\n                 * @param {Object} input\n                 * @returns {*} State\n                 */\n                process: function process(input) {\n                    var state = this.state;\n                    var eventType = input.eventType;\n                    var isRecognized = state & (STATE_BEGAN | STATE_CHANGED);\n                    var isValid = this.attrTest(input);\n                    // on cancel input and we've recognized before, return STATE_CANCELLED\n                    if (isRecognized && (eventType & INPUT_CANCEL || !isValid)) {\n                        return state | STATE_CANCELLED;\n                    } else if (isRecognized || isValid) {\n                        if (eventType & INPUT_END) {\n                            return state | STATE_ENDED;\n                        } else if (!(state & STATE_BEGAN)) {\n                            return STATE_BEGAN;\n                        }\n                        return state | STATE_CHANGED;\n                    }\n                    return STATE_FAILED;\n                }\n            });inherit(PanRecognizer, AttrRecognizer, {\n                /**\n                 * @namespace\n                 * @memberof PanRecognizer\n                 */\n                defaults: {\n                    event: 'pan',\n                    threshold: 10,\n                    pointers: 1,\n                    direction: DIRECTION_ALL\n                },\n                getTouchAction: function getTouchAction() {\n                    var direction = this.options.direction;\n                    var actions = [];\n                    if (direction & DIRECTION_HORIZONTAL) {\n                        actions.push(TOUCH_ACTION_PAN_Y);\n                    }\n                    if (direction & DIRECTION_VERTICAL) {\n                        actions.push(TOUCH_ACTION_PAN_X);\n                    }\n                    return actions;\n                },\n                directionTest: function directionTest(input) {\n                    var options = this.options;\n                    var hasMoved = true;\n                    var distance = input.distance;\n                    var direction = input.direction;\n                    var x = input.deltaX;\n                    var y = input.deltaY;\n                    // lock to axis?\n                    if (!(direction & options.direction)) {\n                        if (options.direction & DIRECTION_HORIZONTAL) {\n                            direction = x === 0 ? DIRECTION_NONE : x < 0 ? DIRECTION_LEFT : DIRECTION_RIGHT;\n                            hasMoved = x != this.pX;\n                            distance = Math.abs(input.deltaX);\n                        } else {\n                            direction = y === 0 ? DIRECTION_NONE : y < 0 ? DIRECTION_UP : DIRECTION_DOWN;\n                            hasMoved = y != this.pY;\n                            distance = Math.abs(input.deltaY);\n                        }\n                    }\n                    input.direction = direction;\n                    return hasMoved && distance > options.threshold && direction & options.direction;\n                },\n                attrTest: function attrTest(input) {\n                    return AttrRecognizer.prototype.attrTest.call(this, input) && (this.state & STATE_BEGAN || !(this.state & STATE_BEGAN) && this.directionTest(input));\n                },\n                emit: function emit(input) {\n                    this.pX = input.deltaX;\n                    this.pY = input.deltaY;\n                    var direction = directionStr(input.direction);\n                    if (direction) {\n                        this.manager.emit(this.options.event + direction, input);\n                    }\n                    this._super.emit.call(this, input);\n                }\n            });inherit(PinchRecognizer, AttrRecognizer, {\n                /**\n                 * @namespace\n                 * @memberof PinchRecognizer\n                 */\n                defaults: {\n                    event: 'pinch',\n                    threshold: 0,\n                    pointers: 2\n                },\n                getTouchAction: function getTouchAction() {\n                    return [TOUCH_ACTION_NONE];\n                },\n                attrTest: function attrTest(input) {\n                    return this._super.attrTest.call(this, input) && (Math.abs(input.scale - 1) > this.options.threshold || this.state & STATE_BEGAN);\n                },\n                emit: function emit(input) {\n                    this._super.emit.call(this, input);\n                    if (input.scale !== 1) {\n                        var inOut = input.scale < 1 ? 'in' : 'out';\n                        this.manager.emit(this.options.event + inOut, input);\n                    }\n                }\n            });inherit(PressRecognizer, Recognizer, {\n                /**\n                 * @namespace\n                 * @memberof PressRecognizer\n                 */\n                defaults: {\n                    event: 'press',\n                    pointers: 1,\n                    time: 500,\n                    threshold: 5 // a minimal movement is ok, but keep it low\n                },\n                getTouchAction: function getTouchAction() {\n                    return [TOUCH_ACTION_AUTO];\n                },\n                process: function process(input) {\n                    var options = this.options;\n                    var validPointers = input.pointers.length === options.pointers;\n                    var validMovement = input.distance < options.threshold;\n                    var validTime = input.deltaTime > options.time;\n                    this._input = input;\n                    // we only allow little movement\n                    // and we've reached an end event, so a tap is possible\n                    if (!validMovement || !validPointers || input.eventType & (INPUT_END | INPUT_CANCEL) && !validTime) {\n                        this.reset();\n                    } else if (input.eventType & INPUT_START) {\n                        this.reset();\n                        this._timer = setTimeoutContext(function () {\n                            this.state = STATE_RECOGNIZED;\n                            this.tryEmit();\n                        }, options.time, this);\n                    } else if (input.eventType & INPUT_END) {\n                        return STATE_RECOGNIZED;\n                    }\n                    return STATE_FAILED;\n                },\n                reset: function reset() {\n                    clearTimeout(this._timer);\n                },\n                emit: function emit(input) {\n                    if (this.state !== STATE_RECOGNIZED) {\n                        return;\n                    }\n                    if (input && input.eventType & INPUT_END) {\n                        this.manager.emit(this.options.event + 'up', input);\n                    } else {\n                        this._input.timeStamp = now();\n                        this.manager.emit(this.options.event, this._input);\n                    }\n                }\n            });inherit(RotateRecognizer, AttrRecognizer, {\n                /**\n                 * @namespace\n                 * @memberof RotateRecognizer\n                 */\n                defaults: {\n                    event: 'rotate',\n                    threshold: 0,\n                    pointers: 2\n                },\n                getTouchAction: function getTouchAction() {\n                    return [TOUCH_ACTION_NONE];\n                },\n                attrTest: function attrTest(input) {\n                    return this._super.attrTest.call(this, input) && (Math.abs(input.rotation) > this.options.threshold || this.state & STATE_BEGAN);\n                }\n            });inherit(SwipeRecognizer, AttrRecognizer, {\n                /**\n                 * @namespace\n                 * @memberof SwipeRecognizer\n                 */\n                defaults: {\n                    event: 'swipe',\n                    threshold: 10,\n                    velocity: 0.65,\n                    direction: DIRECTION_HORIZONTAL | DIRECTION_VERTICAL,\n                    pointers: 1\n                },\n                getTouchAction: function getTouchAction() {\n                    return PanRecognizer.prototype.getTouchAction.call(this);\n                },\n                attrTest: function attrTest(input) {\n                    var direction = this.options.direction;\n                    var velocity;\n                    if (direction & (DIRECTION_HORIZONTAL | DIRECTION_VERTICAL)) {\n                        velocity = input.velocity;\n                    } else if (direction & DIRECTION_HORIZONTAL) {\n                        velocity = input.velocityX;\n                    } else if (direction & DIRECTION_VERTICAL) {\n                        velocity = input.velocityY;\n                    }\n                    return this._super.attrTest.call(this, input) && direction & input.direction && input.distance > this.options.threshold && abs(velocity) > this.options.velocity && input.eventType & INPUT_END;\n                },\n                emit: function emit(input) {\n                    var direction = directionStr(input.direction);\n                    if (direction) {\n                        this.manager.emit(this.options.event + direction, input);\n                    }\n                    this.manager.emit(this.options.event, input);\n                }\n            });inherit(TapRecognizer, Recognizer, {\n                /**\n                 * @namespace\n                 * @memberof PinchRecognizer\n                 */\n                defaults: {\n                    event: 'tap',\n                    pointers: 1,\n                    taps: 1,\n                    interval: 300,\n                    time: 250,\n                    threshold: 2,\n                    posThreshold: 10 // a multi-tap can be a bit off the initial position\n                },\n                getTouchAction: function getTouchAction() {\n                    return [TOUCH_ACTION_MANIPULATION];\n                },\n                process: function process(input) {\n                    var options = this.options;\n                    var validPointers = input.pointers.length === options.pointers;\n                    var validMovement = input.distance < options.threshold;\n                    var validTouchTime = input.deltaTime < options.time;\n                    this.reset();\n                    if (input.eventType & INPUT_START && this.count === 0) {\n                        return this.failTimeout();\n                    }\n                    // we only allow little movement\n                    // and we've reached an end event, so a tap is possible\n                    if (validMovement && validTouchTime && validPointers) {\n                        if (input.eventType != INPUT_END) {\n                            return this.failTimeout();\n                        }\n                        var validInterval = this.pTime ? input.timeStamp - this.pTime < options.interval : true;\n                        var validMultiTap = !this.pCenter || getDistance(this.pCenter, input.center) < options.posThreshold;\n                        this.pTime = input.timeStamp;\n                        this.pCenter = input.center;\n                        if (!validMultiTap || !validInterval) {\n                            this.count = 1;\n                        } else {\n                            this.count += 1;\n                        }\n                        this._input = input;\n                        // if tap count matches we have recognized it,\n                        // else it has began recognizing...\n                        var tapCount = this.count % options.taps;\n                        if (tapCount === 0) {\n                            // no failing requirements, immediately trigger the tap event\n                            // or wait as long as the multitap interval to trigger\n                            if (!this.hasRequireFailures()) {\n                                return STATE_RECOGNIZED;\n                            } else {\n                                this._timer = setTimeoutContext(function () {\n                                    this.state = STATE_RECOGNIZED;\n                                    this.tryEmit();\n                                }, options.interval, this);\n                                return STATE_BEGAN;\n                            }\n                        }\n                    }\n                    return STATE_FAILED;\n                },\n                failTimeout: function failTimeout() {\n                    this._timer = setTimeoutContext(function () {\n                        this.state = STATE_FAILED;\n                    }, this.options.interval, this);\n                    return STATE_FAILED;\n                },\n                reset: function reset() {\n                    clearTimeout(this._timer);\n                },\n                emit: function emit() {\n                    if (this.state == STATE_RECOGNIZED) {\n                        this._input.tapCount = this.count;\n                        this.manager.emit(this.options.event, this._input);\n                    }\n                }\n            });Hammer.VERSION = '2.0.4';\n            /**\n             * default settings\n             * @namespace\n             */\n            Hammer.defaults = {\n                /**\n                 * set if DOM events are being triggered.\n                 * But this is slower and unused by simple implementations, so disabled by default.\n                 * @type {Boolean}\n                 * @default false\n                 */\n                domEvents: false,\n                /**\n                 * The value for the touchAction property/fallback.\n                 * When set to `compute` it will magically set the correct value based on the added recognizers.\n                 * @type {String}\n                 * @default compute\n                 */\n                touchAction: TOUCH_ACTION_COMPUTE,\n                /**\n                 * @type {Boolean}\n                 * @default true\n                 */\n                enable: true,\n                /**\n                 * EXPERIMENTAL FEATURE -- can be removed/changed\n                 * Change the parent input target element.\n                 * If Null, then it is being set the to main element.\n                 * @type {Null|EventTarget}\n                 * @default null\n                 */\n                inputTarget: null,\n                /**\n                 * force an input class\n                 * @type {Null|Function}\n                 * @default null\n                 */\n                inputClass: null,\n                /**\n                 * Default recognizer setup when calling `Hammer()`\n                 * When creating a new Manager these will be skipped.\n                 * @type {Array}\n                 */\n                preset: [\n                // RecognizerClass, options, [recognizeWith, ...], [requireFailure, ...]\n                [RotateRecognizer, { enable: false }], [PinchRecognizer, { enable: false }, ['rotate']], [SwipeRecognizer, { direction: DIRECTION_HORIZONTAL }], [PanRecognizer, { direction: DIRECTION_HORIZONTAL }, ['swipe']], [TapRecognizer], [TapRecognizer, { event: 'doubletap', taps: 2 }, ['tap']], [PressRecognizer]],\n                /**\n                 * Some CSS properties can be used to improve the working of Hammer.\n                 * Add them to this method and they will be set when creating a new Manager.\n                 * @namespace\n                 */\n                cssProps: {\n                    /**\n                     * Disables text selection to improve the dragging gesture. Mainly for desktop browsers.\n                     * @type {String}\n                     * @default 'none'\n                     */\n                    userSelect: 'none',\n                    /**\n                     * Disable the Windows Phone grippers when pressing an element.\n                     * @type {String}\n                     * @default 'none'\n                     */\n                    touchSelect: 'none',\n                    /**\n                     * Disables the default callout shown when you touch and hold a touch target.\n                     * On iOS, when you touch and hold a touch target such as a link, Safari displays\n                     * a callout containing information about the link. This property allows you to disable that callout.\n                     * @type {String}\n                     * @default 'none'\n                     */\n                    touchCallout: 'none',\n                    /**\n                     * Specifies whether zooming is enabled. Used by IE10>\n                     * @type {String}\n                     * @default 'none'\n                     */\n                    contentZooming: 'none',\n                    /**\n                     * Specifies that an entire element should be draggable instead of its contents. Mainly for desktop browsers.\n                     * @type {String}\n                     * @default 'none'\n                     */\n                    userDrag: 'none',\n                    /**\n                     * Overrides the highlight color shown when the user taps a link or a JavaScript\n                     * clickable element in iOS. This property obeys the alpha value, if specified.\n                     * @type {String}\n                     * @default 'rgba(0,0,0,0)'\n                     */\n                    tapHighlightColor: 'rgba(0,0,0,0)'\n                }\n            };\n            STOP = 1;\n            FORCED_STOP = 2;\n            Manager.prototype = {\n                /**\n                 * set options\n                 * @param {Object} options\n                 * @returns {Manager}\n                 */\n                set: function set(options) {\n                    extend(this.options, options);\n                    // Options that need a little more setup\n                    if (options.touchAction) {\n                        this.touchAction.update();\n                    }\n                    if (options.inputTarget) {\n                        // Clean up existing event listeners and reinitialize\n                        this.input.destroy();\n                        this.input.target = options.inputTarget;\n                        this.input.init();\n                    }\n                    return this;\n                },\n                /**\n                 * stop recognizing for this session.\n                 * This session will be discarded, when a new [input]start event is fired.\n                 * When forced, the recognizer cycle is stopped immediately.\n                 * @param {Boolean} [force]\n                 */\n                stop: function stop(force) {\n                    this.session.stopped = force ? FORCED_STOP : STOP;\n                },\n                /**\n                 * run the recognizers!\n                 * called by the inputHandler function on every movement of the pointers (touches)\n                 * it walks through all the recognizers and tries to detect the gesture that is being made\n                 * @param {Object} inputData\n                 */\n                recognize: function recognize(inputData) {\n                    var session = this.session;\n                    if (session.stopped) {\n                        return;\n                    }\n                    // run the touch-action polyfill\n                    this.touchAction.preventDefaults(inputData);\n                    var recognizer;\n                    var recognizers = this.recognizers;\n                    // this holds the recognizer that is being recognized.\n                    // so the recognizer's state needs to be BEGAN, CHANGED, ENDED or RECOGNIZED\n                    // if no recognizer is detecting a thing, it is set to `null`\n                    var curRecognizer = session.curRecognizer;\n                    // reset when the last recognizer is recognized\n                    // or when we're in a new session\n                    if (!curRecognizer || curRecognizer && curRecognizer.state & STATE_RECOGNIZED) {\n                        curRecognizer = session.curRecognizer = null;\n                    }\n                    var i = 0;\n                    while (i < recognizers.length) {\n                        recognizer = recognizers[i];\n                        // find out if we are allowed try to recognize the input for this one.\n                        // 1.   allow if the session is NOT forced stopped (see the .stop() method)\n                        // 2.   allow if we still haven't recognized a gesture in this session, or the this recognizer is the one\n                        //      that is being recognized.\n                        // 3.   allow if the recognizer is allowed to run simultaneous with the current recognized recognizer.\n                        //      this can be setup with the `recognizeWith()` method on the recognizer.\n                        if (session.stopped !== FORCED_STOP && (!curRecognizer || recognizer == curRecognizer || recognizer.canRecognizeWith(curRecognizer))) {\n                            recognizer.recognize(inputData);\n                        } else {\n                            recognizer.reset();\n                        }\n                        // if the recognizer has been recognizing the input as a valid gesture, we want to store this one as the\n                        // current active recognizer. but only if we don't already have an active recognizer\n                        if (!curRecognizer && recognizer.state & (STATE_BEGAN | STATE_CHANGED | STATE_ENDED)) {\n                            curRecognizer = session.curRecognizer = recognizer;\n                        }\n                        i++;\n                    }\n                },\n                /**\n                 * get a recognizer by its event name.\n                 * @param {Recognizer|String} recognizer\n                 * @returns {Recognizer|Null}\n                 */\n                get: function get(recognizer) {\n                    if (recognizer instanceof Recognizer) {\n                        return recognizer;\n                    }\n                    var recognizers = this.recognizers;\n                    for (var i = 0; i < recognizers.length; i++) {\n                        if (recognizers[i].options.event == recognizer) {\n                            return recognizers[i];\n                        }\n                    }\n                    return null;\n                },\n                /**\n                 * add a recognizer to the manager\n                 * existing recognizers with the same event name will be removed\n                 * @param {Recognizer} recognizer\n                 * @returns {Recognizer|Manager}\n                 */\n                add: function add(recognizer) {\n                    if (invokeArrayArg(recognizer, 'add', this)) {\n                        return this;\n                    }\n                    // remove existing\n                    var existing = this.get(recognizer.options.event);\n                    if (existing) {\n                        this.remove(existing);\n                    }\n                    this.recognizers.push(recognizer);\n                    recognizer.manager = this;\n                    this.touchAction.update();\n                    return recognizer;\n                },\n                /**\n                 * remove a recognizer by name or instance\n                 * @param {Recognizer|String} recognizer\n                 * @returns {Manager}\n                 */\n                remove: function remove(recognizer) {\n                    if (invokeArrayArg(recognizer, 'remove', this)) {\n                        return this;\n                    }\n                    var recognizers = this.recognizers;\n                    recognizer = this.get(recognizer);\n                    recognizers.splice(inArray(recognizers, recognizer), 1);\n                    this.touchAction.update();\n                    return this;\n                },\n                /**\n                 * bind event\n                 * @param {String} events\n                 * @param {Function} handler\n                 * @returns {EventEmitter} this\n                 */\n                on: function on(events, handler) {\n                    var handlers = this.handlers;\n                    each(splitStr(events), function (event) {\n                        handlers[event] = handlers[event] || [];\n                        handlers[event].push(handler);\n                    });\n                    return this;\n                },\n                /**\n                 * unbind event, leave emit blank to remove all handlers\n                 * @param {String} events\n                 * @param {Function} [handler]\n                 * @returns {EventEmitter} this\n                 */\n                off: function off(events, handler) {\n                    var handlers = this.handlers;\n                    each(splitStr(events), function (event) {\n                        if (!handler) {\n                            delete handlers[event];\n                        } else {\n                            handlers[event].splice(inArray(handlers[event], handler), 1);\n                        }\n                    });\n                    return this;\n                },\n                /**\n                 * emit event to the listeners\n                 * @param {String} event\n                 * @param {Object} data\n                 */\n                emit: function emit(event, data) {\n                    // we also want to trigger dom events\n                    if (this.options.domEvents) {\n                        triggerDomEvent(event, data);\n                    }\n                    // no handlers, so skip it all\n                    var handlers = this.handlers[event] && this.handlers[event].slice();\n                    if (!handlers || !handlers.length) {\n                        return;\n                    }\n                    data.type = event;\n                    data.preventDefault = function () {\n                        data.srcEvent.preventDefault();\n                    };\n                    var i = 0;\n                    while (i < handlers.length) {\n                        handlers[i](data);\n                        i++;\n                    }\n                },\n                /**\n                 * destroy the manager and unbinds all events\n                 * it doesn't unbind dom events, that is the user own responsibility\n                 */\n                destroy: function destroy() {\n                    this.element && toggleCssProps(this, false);\n                    this.handlers = {};\n                    this.session = {};\n                    this.input.destroy();\n                    this.element = null;\n                }\n            };extend(Hammer, {\n                INPUT_START: INPUT_START,\n                INPUT_MOVE: INPUT_MOVE,\n                INPUT_END: INPUT_END,\n                INPUT_CANCEL: INPUT_CANCEL,\n                STATE_POSSIBLE: STATE_POSSIBLE,\n                STATE_BEGAN: STATE_BEGAN,\n                STATE_CHANGED: STATE_CHANGED,\n                STATE_ENDED: STATE_ENDED,\n                STATE_RECOGNIZED: STATE_RECOGNIZED,\n                STATE_CANCELLED: STATE_CANCELLED,\n                STATE_FAILED: STATE_FAILED,\n                DIRECTION_NONE: DIRECTION_NONE,\n                DIRECTION_LEFT: DIRECTION_LEFT,\n                DIRECTION_RIGHT: DIRECTION_RIGHT,\n                DIRECTION_UP: DIRECTION_UP,\n                DIRECTION_DOWN: DIRECTION_DOWN,\n                DIRECTION_HORIZONTAL: DIRECTION_HORIZONTAL,\n                DIRECTION_VERTICAL: DIRECTION_VERTICAL,\n                DIRECTION_ALL: DIRECTION_ALL,\n                Manager: Manager,\n                Input: Input,\n                TouchAction: TouchAction,\n                TouchInput: TouchInput,\n                MouseInput: MouseInput,\n                PointerEventInput: PointerEventInput,\n                TouchMouseInput: TouchMouseInput,\n                SingleTouchInput: SingleTouchInput,\n                Recognizer: Recognizer,\n                AttrRecognizer: AttrRecognizer,\n                Tap: TapRecognizer,\n                Pan: PanRecognizer,\n                Swipe: SwipeRecognizer,\n                Pinch: PinchRecognizer,\n                Rotate: RotateRecognizer,\n                Press: PressRecognizer,\n                on: addEventListeners,\n                off: removeEventListeners,\n                each: each,\n                merge: merge,\n                extend: extend,\n                inherit: inherit,\n                bindFn: bindFn,\n                prefixed: prefixed\n            });\n            // attach to window for angular2 gesture listeners\n            window.Hammer = Hammer;\n\n            _export('Hammer', Hammer);\n        }\n    };\n});\nSystem.register('ionic/gestures/slide-edge-gesture', ['./slide-gesture', '../util/util', '../util/dom'], function (_export) {\n    'use strict';\n\n    var SlideGesture, defaults, windowDimensions, SlideEdgeGesture;\n\n    var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();\n\n    var _get = function get(_x2, _x3, _x4) { var _again = true; _function: while (_again) { var object = _x2, property = _x3, receiver = _x4; _again = false; if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { _x2 = parent; _x3 = property; _x4 = receiver; _again = true; desc = parent = undefined; continue _function; } } else if ('value' in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } } };\n\n    function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\n    function _inherits(subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\n    return {\n        setters: [function (_slideGesture) {\n            SlideGesture = _slideGesture.SlideGesture;\n        }, function (_utilUtil) {\n            defaults = _utilUtil.defaults;\n        }, function (_utilDom) {\n            windowDimensions = _utilDom.windowDimensions;\n        }],\n        execute: function () {\n            SlideEdgeGesture = (function (_SlideGesture) {\n                _inherits(SlideEdgeGesture, _SlideGesture);\n\n                function SlideEdgeGesture(element) {\n                    var opts = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1];\n\n                    _classCallCheck(this, SlideEdgeGesture);\n\n                    defaults(opts, {\n                        edge: 'left',\n                        threshold: 50\n                    });\n                    _get(Object.getPrototypeOf(SlideEdgeGesture.prototype), 'constructor', this).call(this, element, opts);\n                    // Can check corners through use of eg 'left top'\n                    this.edges = opts.edge.split(' ');\n                    this.threshold = opts.threshold;\n                }\n\n                _createClass(SlideEdgeGesture, [{\n                    key: 'canStart',\n                    value: function canStart(ev) {\n                        var _this = this;\n\n                        this._d = this.getContainerDimensions();\n                        return this.edges.every(function (edge) {\n                            return _this._checkEdge(edge, ev.center);\n                        });\n                    }\n                }, {\n                    key: 'getContainerDimensions',\n                    value: function getContainerDimensions() {\n                        return {\n                            left: 0,\n                            top: 0,\n                            width: windowDimensions().width,\n                            height: windowDimensions().height\n                        };\n                    }\n                }, {\n                    key: '_checkEdge',\n                    value: function _checkEdge(edge, pos) {\n                        switch (edge) {\n                            case 'left':\n                                return pos.x <= this._d.left + this.threshold;\n                            case 'right':\n                                return pos.x >= this._d.width - this.threshold;\n                            case 'top':\n                                return pos.y <= this._d.top + this.threshold;\n                            case 'bottom':\n                                return pos.y >= this._d.height - this.threshold;\n                        }\n                    }\n                }]);\n\n                return SlideEdgeGesture;\n            })(SlideGesture);\n\n            _export('SlideEdgeGesture', SlideEdgeGesture);\n        }\n    };\n});\nSystem.register('ionic/gestures/slide-gesture', ['./drag-gesture', '../util'], function (_export) {\n    'use strict';\n\n    var DragGesture, util, SlideGesture;\n\n    var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();\n\n    var _get = function get(_x2, _x3, _x4) { var _again = true; _function: while (_again) { var object = _x2, property = _x3, receiver = _x4; _again = false; if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { _x2 = parent; _x3 = property; _x4 = receiver; _again = true; desc = parent = undefined; continue _function; } } else if ('value' in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } } };\n\n    function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\n    function _inherits(subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\n    return {\n        setters: [function (_dragGesture) {\n            DragGesture = _dragGesture.DragGesture;\n        }, function (_util) {\n            util = _util;\n        }],\n        execute: function () {\n            SlideGesture = (function (_DragGesture) {\n                _inherits(SlideGesture, _DragGesture);\n\n                function SlideGesture(element) {\n                    var opts = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1];\n\n                    _classCallCheck(this, SlideGesture);\n\n                    _get(Object.getPrototypeOf(SlideGesture.prototype), 'constructor', this).call(this, element, opts);\n                    this.element = element;\n                }\n\n                /*\n                 * Get the min and max for the slide. pageX/pageY.\n                 * Only called on dragstart.\n                 */\n\n                _createClass(SlideGesture, [{\n                    key: 'getSlideBoundaries',\n                    value: function getSlideBoundaries(slide, ev) {\n                        return {\n                            min: 0,\n                            max: this.element.offsetWidth\n                        };\n                    }\n\n                    /*\n                     * Get the element's pos when the drag starts.\n                     * For example, an open side menu starts at 100% and a closed\n                     * sidemenu starts at 0%.\n                     */\n                }, {\n                    key: 'getElementStartPos',\n                    value: function getElementStartPos(slide, ev) {\n                        return 0;\n                    }\n                }, {\n                    key: 'canStart',\n                    value: function canStart() {\n                        return true;\n                    }\n                }, {\n                    key: 'onDragStart',\n                    value: function onDragStart(ev) {\n                        var _this = this;\n\n                        if (!this.canStart(ev)) return false;\n                        this.slide = {};\n                        var promise = this.onSlideBeforeStart(this.slide, ev) || Promise.resolve();\n                        promise.then(function () {\n                            var _getSlideBoundaries = _this.getSlideBoundaries(_this.slide, ev);\n\n                            var min = _getSlideBoundaries.min;\n                            var max = _getSlideBoundaries.max;\n\n                            _this.slide.min = min;\n                            _this.slide.max = max;\n                            _this.slide.elementStartPos = _this.getElementStartPos(_this.slide, ev);\n                            _this.slide.pointerStartPos = ev.center[_this.direction];\n                            _this.slide.started = true;\n                            _this.onSlideStart(_this.slide, ev);\n                        })['catch'](function () {\n                            _this.slide = null;\n                        });\n                    }\n                }, {\n                    key: 'onDrag',\n                    value: function onDrag(ev) {\n                        if (!this.slide || !this.slide.started) return;\n                        this.slide.pos = ev.center[this.direction];\n                        this.slide.distance = util.clamp(this.slide.min, this.slide.pos - this.slide.pointerStartPos + this.slide.elementStartPos, this.slide.max);\n                        this.slide.delta = this.slide.pos - this.slide.pointerStartPos;\n                        this.onSlide(this.slide, ev);\n                    }\n                }, {\n                    key: 'onDragEnd',\n                    value: function onDragEnd(ev) {\n                        if (!this.slide || !this.slide.started) return;\n                        this.onSlideEnd(this.slide, ev);\n                        this.slide = null;\n                    }\n                }, {\n                    key: 'onSlideBeforeStart',\n                    value: function onSlideBeforeStart() {}\n                }, {\n                    key: 'onSlideStart',\n                    value: function onSlideStart() {}\n                }, {\n                    key: 'onSlide',\n                    value: function onSlide() {}\n                }, {\n                    key: 'onSlideEnd',\n                    value: function onSlideEnd() {}\n                }]);\n\n                return SlideGesture;\n            })(DragGesture);\n\n            _export('SlideGesture', SlideGesture);\n        }\n    };\n});\nSystem.register('ionic/util/click-block', [], function (_export) {\n    'use strict';\n\n    var CSS_CLICK_BLOCK, DEFAULT_EXPIRE, cbEle, fallbackTimerId, isShowing, ClickBlock;\n\n    var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();\n\n    function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\n    function _show(expire) {\n        clearTimeout(fallbackTimerId);\n        fallbackTimerId = setTimeout(hide, expire || DEFAULT_EXPIRE);\n        if (!isShowing) {\n            cbEle.classList.add(CSS_CLICK_BLOCK);\n            isShowing = true;\n        }\n    }\n    function hide() {\n        clearTimeout(fallbackTimerId);\n        if (isShowing) {\n            cbEle.classList.remove(CSS_CLICK_BLOCK);\n            isShowing = false;\n        }\n    }\n    return {\n        setters: [],\n        execute: function () {\n            CSS_CLICK_BLOCK = 'click-block-active';\n            DEFAULT_EXPIRE = 330;\n            cbEle = undefined;\n            fallbackTimerId = undefined;\n            isShowing = false;\n\n            /**\n             * @private\n             */\n\n            ClickBlock = (function () {\n                function ClickBlock() {\n                    _classCallCheck(this, ClickBlock);\n                }\n\n                _createClass(ClickBlock, [{\n                    key: 'enable',\n                    value: function enable() {\n                        cbEle = document.createElement('click-block');\n                        document.body.appendChild(cbEle);\n                        cbEle.addEventListener('touchmove', function (ev) {\n                            ev.preventDefault();\n                            ev.stopPropagation();\n                        });\n                        this._enabled = true;\n                    }\n                }, {\n                    key: 'show',\n                    value: function show(shouldShow, expire) {\n                        if (this._enabled) {\n                            if (shouldShow) {\n                                _show(expire);\n                            } else {\n                                hide();\n                            }\n                        }\n                    }\n                }]);\n\n                return ClickBlock;\n            })();\n\n            _export('ClickBlock', ClickBlock);\n        }\n    };\n});\nSystem.register('ionic/util/dom', [], function (_export) {\n    // requestAnimationFrame is polyfilled for old Android\n    // within the web-animations polyfill\n    'use strict';\n\n    var raf, CSS, matchesFn, dimensionCache, dimensionIds;\n\n    _export('rafFrames', rafFrames);\n\n    _export('transitionEnd', transitionEnd);\n\n    _export('animationStart', animationStart);\n\n    _export('animationEnd', animationEnd);\n\n    _export('ready', ready);\n\n    _export('windowLoad', windowLoad);\n\n    _export('pointerCoord', pointerCoord);\n\n    _export('hasPointerMoved', hasPointerMoved);\n\n    _export('isActive', isActive);\n\n    _export('hasFocus', hasFocus);\n\n    _export('isTextInput', isTextInput);\n\n    _export('hasFocusedTextInput', hasFocusedTextInput);\n\n    _export('closest', closest);\n\n    /**\n     * Get the element offsetWidth and offsetHeight. Values are cached\n     * to reduce DOM reads. Cache is cleared on a window resize.\n     * @param {TODO} ele  TODO\n     */\n\n    _export('removeElement', removeElement);\n\n    _export('getDimensions', getDimensions);\n\n    _export('windowDimensions', windowDimensions);\n\n    _export('flushDimensionCache', flushDimensionCache);\n\n    _export('parentOffsetEl', parentOffsetEl);\n\n    /**\n    * Get the current coordinates of the element, relative to the document.\n    * Read-only equivalent of [jQuery's offset function](http://api.jquery.com/offset/).\n    * @param {element} element The element to get the offset of.\n    * @returns {object} Returns an object containing the properties top, left, width and height.\n    */\n\n    _export('position', position);\n\n    _export('offset', offset);\n\n    function rafFrames(framesToWait, callback) {\n        framesToWait = Math.ceil(framesToWait);\n        if (framesToWait < 2) {\n            raf(callback);\n        } else {\n            setTimeout(function () {\n                raf(callback);\n            }, (framesToWait - 1) * 17);\n        }\n    }\n\n    function transitionEnd(el) {\n        return cssPromise(el, CSS.transitionEnd);\n    }\n\n    function animationStart(el, animationName) {\n        return cssPromise(el, CSS.animationStart, animationName);\n    }\n\n    function animationEnd(el, animationName) {\n        return cssPromise(el, CSS.animationEnd, animationName);\n    }\n\n    function cssPromise(el, eventNames, animationName) {\n        return new Promise(function (resolve) {\n            eventNames.split(' ').forEach(function (eventName) {\n                el.addEventListener(eventName, onEvent);\n            });\n            function onEvent(ev) {\n                if (ev.animationName && animationName) {\n                    // do not resolve if a bubbled up ev.animationName\n                    // is not the same as the passed in animationName arg\n                    if (ev.animationName !== animationName) {\n                        return;\n                    }\n                } else if (ev.target !== el) {\n                    // do not resolve if the event's target element is not\n                    // the same as the element the listener was added to\n                    return;\n                }\n                ev.stopPropagation();\n                eventNames.split(' ').forEach(function (eventName) {\n                    el.removeEventListener(eventName, onEvent);\n                });\n                resolve(ev);\n            }\n        });\n    }\n\n    function ready(callback) {\n        var promise = null;\n        if (!callback) {\n            // a callback wasn't provided, so let's return a promise instead\n            promise = new Promise(function (resolve) {\n                callback = resolve;\n            });\n        }\n        if (document.readyState === 'complete' || document.readyState === 'interactive') {\n            callback();\n        } else {\n            (function () {\n                var completed = function completed() {\n                    document.removeEventListener('DOMContentLoaded', completed, false);\n                    window.removeEventListener('load', completed, false);\n                    callback();\n                };\n\n                document.addEventListener('DOMContentLoaded', completed, false);\n                window.addEventListener('load', completed, false);\n            })();\n        }\n        return promise;\n    }\n\n    function windowLoad(callback) {\n        var promise = null;\n        if (!callback) {\n            // a callback wasn't provided, so let's return a promise instead\n            promise = new Promise(function (resolve) {\n                callback = resolve;\n            });\n        }\n        if (document.readyState === 'complete') {\n            callback();\n        } else {\n            (function () {\n                var completed = function completed() {\n                    window.removeEventListener('load', completed, false);\n                    callback();\n                };\n\n                window.addEventListener('load', completed, false);\n            })();\n        }\n        return promise;\n    }\n\n    function pointerCoord(ev) {\n        // get coordinates for either a mouse click\n        // or a touch depending on the given event\n        var c = { x: 0, y: 0 };\n        if (ev) {\n            var touches = ev.touches && ev.touches.length ? ev.touches : [ev];\n            var e = ev.changedTouches && ev.changedTouches[0] || touches[0];\n            if (e) {\n                c.x = e.clientX || e.pageX || 0;\n                c.y = e.clientY || e.pageY || 0;\n            }\n        }\n        return c;\n    }\n\n    function hasPointerMoved(threshold, startCoord, endCoord) {\n        return startCoord && endCoord && (Math.abs(startCoord.x - endCoord.x) > threshold || Math.abs(startCoord.y - endCoord.y) > threshold);\n    }\n\n    function isActive(ele) {\n        return !!(ele && document.activeElement === ele);\n    }\n\n    function hasFocus(ele) {\n        return isActive(ele) && ele.parentElement.querySelector(':focus') === ele;\n    }\n\n    function isTextInput(ele) {\n        return !!ele && (ele.tagName == 'TEXTAREA' || ele.contentEditable === 'true' || ele.tagName == 'INPUT' && !/^(radio|checkbox|range|file|submit|reset|color|image|button)$/i.test(ele.type));\n    }\n\n    function hasFocusedTextInput() {\n        var ele = document.activeElement;\n        if (isTextInput(ele)) {\n            return ele.parentElement.querySelector(':focus') === ele;\n        }\n        return false;\n    }\n\n    function closest(ele, selector, checkSelf) {\n        if (ele && matchesFn) {\n            // traverse parents\n            ele = checkSelf ? ele : ele.parentElement;\n            while (ele !== null) {\n                if (ele[matchesFn](selector)) {\n                    return ele;\n                }\n                ele = ele.parentElement;\n            }\n        }\n        return null;\n    }\n\n    function removeElement(ele) {\n        ele && ele.parentNode && ele.parentNode.removeChild(ele);\n    }\n\n    function getDimensions(ion, ele) {\n        if (!ion._dimId) {\n            ion._dimId = ++dimensionIds;\n            if (ion._dimId % 1000 === 0) {\n                // periodically flush dimensions\n                flushDimensionCache();\n            }\n        }\n        var dimensions = dimensionCache[ion._dimId];\n        if (!dimensions) {\n            var _ele = ion.getNativeElement();\n            // make sure we got good values before caching\n            if (_ele.offsetWidth && _ele.offsetHeight) {\n                dimensions = dimensionCache[ion._dimId] = {\n                    width: _ele.offsetWidth,\n                    height: _ele.offsetHeight,\n                    left: _ele.offsetLeft,\n                    top: _ele.offsetTop\n                };\n            } else {\n                // do not cache bad values\n                return { width: 0, height: 0, left: 0, top: 0 };\n            }\n        }\n        return dimensions;\n    }\n\n    function windowDimensions() {\n        if (!dimensionCache.win) {\n            // make sure we got good values before caching\n            if (window.innerWidth && window.innerHeight) {\n                dimensionCache.win = {\n                    width: window.innerWidth,\n                    height: window.innerHeight\n                };\n            } else {\n                // do not cache bad values\n                return { width: 0, height: 0 };\n            }\n        }\n        return dimensionCache.win;\n    }\n\n    function flushDimensionCache() {\n        dimensionCache = {};\n    }\n\n    function isStaticPositioned(element) {\n        return (element.style.position || 'static') === 'static';\n    }\n    /**\n     * returns the closest, non-statically positioned parentOffset of a given element\n     * @param element\n     */\n\n    function parentOffsetEl(element) {\n        var offsetParent = element.offsetParent || document;\n        while (offsetParent && offsetParent !== document && isStaticPositioned(offsetParent)) {\n            offsetParent = offsetParent.offsetParent;\n        }\n        return offsetParent || document;\n    }\n\n    /**\n     * Get the current coordinates of the element, relative to the offset parent.\n     * Read-only equivalent of [jQuery's position function](http://api.jquery.com/position/).\n     * @param {element} element The element to get the position of.\n     * @returns {object} Returns an object containing the properties top, left, width and height.\n     */\n\n    function position(element) {\n        var elBCR = offset(element);\n        var offsetParentBCR = { top: 0, left: 0 };\n        var offsetParentEl = parentOffsetEl(element);\n        if (offsetParentEl != document) {\n            offsetParentBCR = offset(offsetParentEl);\n            offsetParentBCR.top += offsetParentEl.clientTop - offsetParentEl.scrollTop;\n            offsetParentBCR.left += offsetParentEl.clientLeft - offsetParentEl.scrollLeft;\n        }\n        var boundingClientRect = element.getBoundingClientRect();\n        return {\n            width: boundingClientRect.width || element.offsetWidth,\n            height: boundingClientRect.height || element.offsetHeight,\n            top: elBCR.top - offsetParentBCR.top,\n            left: elBCR.left - offsetParentBCR.left\n        };\n    }\n\n    function offset(element) {\n        var boundingClientRect = element.getBoundingClientRect();\n        return {\n            width: boundingClientRect.width || element.offsetWidth,\n            height: boundingClientRect.height || element.offsetHeight,\n            top: boundingClientRect.top + (window.pageYOffset || document.documentElement.scrollTop),\n            left: boundingClientRect.left + (window.pageXOffset || document.documentElement.scrollLeft)\n        };\n    }\n\n    return {\n        setters: [],\n        execute: function () {\n            raf = window.requestAnimationFrame;\n\n            _export('raf', raf);\n\n            CSS = {};\n\n            _export('CSS', CSS);\n\n            (function () {\n                // transform\n                var i,\n                    keys = ['webkitTransform', 'transform', '-webkit-transform', 'webkit-transform', '-moz-transform', 'moz-transform', 'MozTransform', 'mozTransform', 'msTransform'];\n                for (i = 0; i < keys.length; i++) {\n                    if (document.documentElement.style[keys[i]] !== undefined) {\n                        CSS.transform = keys[i];\n                        break;\n                    }\n                }\n                // transition\n                keys = ['webkitTransition', 'mozTransition', 'msTransition', 'transition'];\n                for (i = 0; i < keys.length; i++) {\n                    if (document.documentElement.style[keys[i]] !== undefined) {\n                        CSS.transition = keys[i];\n                        break;\n                    }\n                }\n                // The only prefix we care about is webkit for transitions.\n                var isWebkit = CSS.transition.indexOf('webkit') > -1;\n                CSS.prefix = isWebkit ? '-webkit-' : '';\n                // transition duration\n                CSS.transitionDuration = (isWebkit ? '-webkit-' : '') + 'transition-duration';\n                // To be sure transitionend works everywhere, include *both* the webkit and non-webkit events\n                CSS.transitionEnd = (isWebkit ? 'webkitTransitionEnd ' : '') + 'transitionend';\n            })();\n            if (window.onanimationend === undefined && window.onwebkitanimationend !== undefined) {\n                CSS.animation = 'WebkitAnimation';\n                CSS.animationStart = 'webkitAnimationStart animationstart';\n                CSS.animationEnd = 'webkitAnimationEnd animationend';\n            } else {\n                CSS.animation = 'animation';\n                CSS.animationStart = 'animationstart';\n                CSS.animationEnd = 'animationend';\n            }\n            matchesFn = undefined;\n\n            ['matches', 'webkitMatchesSelector', 'mozMatchesSelector', 'msMatchesSelector'].some(function (fn) {\n                if (typeof document.documentElement[fn] == 'function') {\n                    matchesFn = fn;\n                }\n            });\n            dimensionCache = {};\n            dimensionIds = 0;\n\n            ;\n        }\n    };\n});\nSystem.register(\"ionic/util/events\", [\"angular2/core\"], function (_export) {\n    /**\n     * Events is a pub/sub style event system for sending and responding to application-level\n     * events across your app.\n     * @usage\n     * ```ts\n     * // first page (publish an event when a user is created)\n     * function createUser(user) {\n     *   console.log('User created!')\n     *   events.publish('user:created', user);\n     * }\n     *\n     * // second page (listen for the user created event)\n     * events.subscribe('user:created', (user) => {\n     *   console.log('Welcome', user);\n     * });\n     *\n     * ```\n     */\n    \"use strict\";\n\n    var Injectable, __decorate, __metadata, Events;\n\n    var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();\n\n    function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n    return {\n        setters: [function (_angular2Core) {\n            Injectable = _angular2Core.Injectable;\n        }],\n        execute: function () {\n            __decorate = undefined && undefined.__decorate || function (decorators, target, key, desc) {\n                var c = arguments.length,\n                    r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc,\n                    d;\n                if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n                return c > 3 && r && Object.defineProperty(target, key, r), r;\n            };\n\n            __metadata = undefined && undefined.__metadata || function (k, v) {\n                if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n            };\n\n            Events = (function () {\n                function Events() {\n                    _classCallCheck(this, Events);\n\n                    this.channels = [];\n                }\n\n                /**\n                 * Subscribe to an event topic. Events that get posted to that topic\n                 * will trigger the provided handler.\n                 *\n                 * @param topic the topic to subscribe to\n                 * @param handler the event handler\n                 */\n\n                _createClass(Events, [{\n                    key: \"subscribe\",\n                    value: function subscribe(topic) {\n                        var _this = this;\n\n                        if (!this.channels[topic]) {\n                            this.channels[topic] = [];\n                        }\n\n                        for (var _len = arguments.length, handlers = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n                            handlers[_key - 1] = arguments[_key];\n                        }\n\n                        handlers.forEach(function (handler) {\n                            _this.channels[topic].push(handler);\n                        });\n                    }\n\n                    /**\n                     * Unsubscribe from the given topic. Your handler will\n                     * no longer receive events published to this topic.\n                     *\n                     * @param topic the topic to unsubscribe from\n                     * @param handler the event handler\n                     *\n                     * @return true if a handler was removed\n                     */\n                }, {\n                    key: \"unsubscribe\",\n                    value: function unsubscribe(topic, handler) {\n                        var t = this.channels[topic];\n                        if (!t) {\n                            // Wasn't found, wasn't removed\n                            return false;\n                        }\n                        if (!handler) {\n                            // Remove all handlers for this topic\n                            delete this.channels[topic];\n                            return true;\n                        }\n                        // We need to find and remove a specific handler\n                        var i = t.indexOf(handler);\n                        if (i < 0) {\n                            // Wasn't found, wasn't removed\n                            return false;\n                        }\n                        t.splice(i, 1);\n                        // If the channel is empty now, remove it from the channel map\n                        if (!t.length) {\n                            delete this.channels[topic];\n                        }\n                        return true;\n                    }\n\n                    /**\n                     * Publish an event to the given topic.\n                     *\n                     * @param topic the topic to publish to\n                     * @param eventData the data to send as the event\n                     */\n                }, {\n                    key: \"publish\",\n                    value: function publish(topic) {\n                        for (var _len2 = arguments.length, args = Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {\n                            args[_key2 - 1] = arguments[_key2];\n                        }\n\n                        var t = this.channels[topic];\n                        if (!t) {\n                            return null;\n                        }\n                        var responses = [];\n                        t.forEach(function (handler) {\n                            responses.push(handler(args));\n                        });\n                        return responses;\n                    }\n                }]);\n\n                return Events;\n            })();\n\n            _export(\"Events\", Events);\n\n            _export(\"Events\", Events = __decorate([Injectable(), __metadata('design:paramtypes', [])], Events));\n        }\n    };\n});\nSystem.register('ionic/util/feature-detect', [], function (_export) {\n    'use strict';\n\n    var FeatureDetect, featureDetects;\n\n    var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();\n\n    function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\n    return {\n        setters: [],\n        execute: function () {\n            FeatureDetect = (function () {\n                function FeatureDetect() {\n                    _classCallCheck(this, FeatureDetect);\n                }\n\n                _createClass(FeatureDetect, [{\n                    key: 'run',\n                    value: function run(window, document) {\n                        this._results = {};\n                        for (var _name in featureDetects) {\n                            this._results[_name] = featureDetects[_name](window, document, document.body);\n                        }\n                    }\n                }, {\n                    key: 'has',\n                    value: function has(featureName) {\n                        return !!this._results[featureName];\n                    }\n                }], [{\n                    key: 'add',\n                    value: function add(name, fn) {\n                        featureDetects[name] = fn;\n                    }\n                }]);\n\n                return FeatureDetect;\n            })();\n\n            _export('FeatureDetect', FeatureDetect);\n\n            featureDetects = {};\n\n            // FeatureDetect.add('sticky', function(window, document) {\n            //   // css position sticky\n            //   let ele = document.createElement('div');\n            //   ele.style.cssText = 'position:-webkit-sticky;position:sticky';\n            //   return ele.style.position.indexOf('sticky') > -1;\n            // });\n            FeatureDetect.add('hairlines', function (window, document, body) {\n                /**\n                * Hairline Shim\n                * Add the \"hairline\" CSS class name to the body tag\n                * if the browser supports subpixels.\n                */\n                var canDo = false;\n                if (window.devicePixelRatio >= 2) {\n                    var hairlineEle = document.createElement('div');\n                    hairlineEle.style.border = '.5px solid transparent';\n                    body.appendChild(hairlineEle);\n                    if (hairlineEle.offsetHeight === 1) {\n                        body.classList.add('hairlines');\n                        canDo = true;\n                    }\n                    body.removeChild(hairlineEle);\n                }\n                return canDo;\n            });\n        }\n    };\n});\nSystem.register(\"ionic/util/form\", [\"angular2/core\"], function (_export) {\n    /**\n     * The Input component is used to focus text input elements.\n     *\n     * @usage\n     * ```html\n     * <ion-input>\n     *   <ion-label>Name</ion-label>\n     *   <input value=\"Name\" type=\"text\">\n     * </ion-input>\n     * ```\n     */\n    \"use strict\";\n\n    var Injectable, __decorate, __metadata, Form;\n\n    var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();\n\n    function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n    return {\n        setters: [function (_angular2Core) {\n            Injectable = _angular2Core.Injectable;\n        }],\n        execute: function () {\n            __decorate = undefined && undefined.__decorate || function (decorators, target, key, desc) {\n                var c = arguments.length,\n                    r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc,\n                    d;\n                if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n                return c > 3 && r && Object.defineProperty(target, key, r), r;\n            };\n\n            __metadata = undefined && undefined.__metadata || function (k, v) {\n                if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n            };\n\n            Form = (function () {\n                function Form() {\n                    _classCallCheck(this, Form);\n\n                    this._inputs = [];\n                    this._ids = -1;\n                    this._focused = null;\n                    this.focusCtrl(document);\n                }\n\n                _createClass(Form, [{\n                    key: \"register\",\n                    value: function register(input) {\n                        this._inputs.push(input);\n                    }\n                }, {\n                    key: \"deregister\",\n                    value: function deregister(input) {\n                        var index = this._inputs.indexOf(input);\n                        if (index > -1) {\n                            this._inputs.splice(index, 1);\n                        }\n                        if (input === this._focused) {\n                            this._focused = null;\n                        }\n                    }\n                }, {\n                    key: \"focusCtrl\",\n                    value: function focusCtrl(document) {\n                        // raw DOM fun\n                        var focusCtrl = document.createElement('focus-ctrl');\n                        focusCtrl.setAttribute('aria-hidden', true);\n                        this._blur = document.createElement('button');\n                        this._blur.tabIndex = -1;\n                        focusCtrl.appendChild(this._blur);\n                        document.body.appendChild(focusCtrl);\n                    }\n                }, {\n                    key: \"focusOut\",\n                    value: function focusOut() {\n                        console.debug('focusOut');\n                        document.activeElement && document.activeElement.blur();\n                        this._blur.focus();\n                    }\n                }, {\n                    key: \"setAsFocused\",\n                    value: function setAsFocused(input) {\n                        this._focused = input;\n                    }\n\n                    /**\n                     * Focuses the next input element, if it exists.\n                     */\n                }, {\n                    key: \"focusNext\",\n                    value: function focusNext(currentInput) {\n                        console.debug('focusNext');\n                        var index = this._inputs.indexOf(currentInput);\n                        if (index > -1 && index + 1 < this._inputs.length) {\n                            var nextInput = this._inputs[index + 1];\n                            if (nextInput !== this._focused) {\n                                return nextInput.initFocus();\n                            }\n                        }\n                        index = this._inputs.indexOf(this._focused);\n                        if (index > 0) {\n                            var previousInput = this._inputs[index - 1];\n                            if (previousInput) {\n                                previousInput.initFocus();\n                            }\n                        }\n                    }\n                }, {\n                    key: \"nextId\",\n                    value: function nextId() {\n                        return ++this._ids;\n                    }\n                }]);\n\n                return Form;\n            })();\n\n            _export(\"Form\", Form);\n\n            _export(\"Form\", Form = __decorate([Injectable(), __metadata('design:paramtypes', [])], Form));\n        }\n    };\n});\nSystem.register(\"ionic/util/keyboard\", [\"angular2/core\", \"../config/config\", \"./form\", \"./dom\"], function (_export) {\n    /**\n     * @name Keyboard\n     * @description\n     * The `Keyboard` class allows you to work with the keyboard events provide by the Ionic keyboard plugin.\n     *\n     * @usage\n     * ```ts\n     * export class MyClass{\n     *  constructor(keyboard: Keyboard){\n     *    this.keyboard = keyboard;\n     *  }\n     * }\n     *\n     * ```\n     */\n    \"use strict\";\n\n    var Injectable, NgZone, Config, Form, hasFocusedTextInput, raf, rafFrames, __decorate, __metadata, Keyboard, KEYBOARD_CLOSE_POLLING, _a, _b, _c;\n\n    var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();\n\n    function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n    return {\n        setters: [function (_angular2Core) {\n            Injectable = _angular2Core.Injectable;\n            NgZone = _angular2Core.NgZone;\n        }, function (_configConfig) {\n            Config = _configConfig.Config;\n        }, function (_form) {\n            Form = _form.Form;\n        }, function (_dom) {\n            hasFocusedTextInput = _dom.hasFocusedTextInput;\n            raf = _dom.raf;\n            rafFrames = _dom.rafFrames;\n        }],\n        execute: function () {\n            __decorate = undefined && undefined.__decorate || function (decorators, target, key, desc) {\n                var c = arguments.length,\n                    r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc,\n                    d;\n                if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n                return c > 3 && r && Object.defineProperty(target, key, r), r;\n            };\n\n            __metadata = undefined && undefined.__metadata || function (k, v) {\n                if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n            };\n\n            Keyboard = (function () {\n                function Keyboard(config, form, zone) {\n                    var _this = this;\n\n                    _classCallCheck(this, Keyboard);\n\n                    this.form = form;\n                    this.zone = zone;\n                    zone.runOutsideAngular(function () {\n                        _this.focusOutline(config.get('focusOutline'), document);\n                    });\n                }\n\n                /**\n                 * Chech to see if the keyboard is open or not.\n                 *\n                 * ```ts\n                 * export class MyClass{\n                 *  constructor(keyboard: Keyboard){\n                 *    this.keyboard = keyboard;\n                 *  }\n                 *  keyboardCheck(){\n                 *    setTimeout(()  => console.log('is the keyboard open ', this.keyboard.isOpen()));\n                 *  }\n                 * }\n                 *\n                 * ```\n                 *\n                 * @return {Bool} returns a true or flase value if the keyboard is open or not\n                 */\n\n                _createClass(Keyboard, [{\n                    key: \"isOpen\",\n                    value: function isOpen() {\n                        return hasFocusedTextInput();\n                    }\n\n                    /**\n                     * When the keyboard is closed, call any methods you want\n                     *\n                     * ```ts\n                     * export class MyClass{\n                     *  constructor(keyboard: Keyboard){\n                     *    this.keyboard = keyboard;\n                     *    this.keyboard.onClose(this.closeCallback);\n                     *  }\n                     *  closeCallback(){\n                     *     // call what ever functionality you want on keyboard close\n                     *     console.log('Closing time\");\n                     *  }\n                     * }\n                     *\n                     * ```\n                     * @param {Function} callback method you want to call when the keyboard has been closed\n                     * @return {Function} returns a callback that gets fired when the keyboard is closed\n                     */\n                }, {\n                    key: \"onClose\",\n                    value: function onClose(callback) {\n                        var pollingInternval = arguments.length <= 1 || arguments[1] === undefined ? KEYBOARD_CLOSE_POLLING : arguments[1];\n\n                        console.debug('keyboard onClose');\n                        var self = this;\n                        var checks = 0;\n                        var promise = null;\n                        if (!callback) {\n                            // a callback wasn't provided, so let's return a promise instead\n                            promise = new Promise(function (resolve) {\n                                callback = resolve;\n                            });\n                        }\n                        self.zone.runOutsideAngular(function () {\n                            function checkKeyboard() {\n                                console.debug('keyboard isOpen', self.isOpen(), checks);\n                                if (!self.isOpen() || checks > 100) {\n                                    rafFrames(30, function () {\n                                        self.zone.run(function () {\n                                            console.debug('keyboard closed');\n                                            callback();\n                                        });\n                                    });\n                                } else {\n                                    setTimeout(checkKeyboard, pollingInternval);\n                                }\n                                checks++;\n                            }\n                            setTimeout(checkKeyboard, pollingInternval);\n                        });\n                        return promise;\n                    }\n\n                    /**\n                     * Progamatically close they keyboard\n                     *\n                     */\n                }, {\n                    key: \"close\",\n                    value: function close() {\n                        var _this2 = this;\n\n                        console.debug('keyboard close()');\n                        raf(function () {\n                            if (hasFocusedTextInput()) {\n                                // only focus out when a text input has focus\n                                _this2.form.focusOut();\n                            }\n                        });\n                    }\n\n                    /**\n                     * @private\n                     */\n                }, {\n                    key: \"focusOutline\",\n                    value: function focusOutline(setting, document) {\n                        /* Focus Outline\n                         * --------------------------------------------------\n                         * By default, when a keydown event happens from a tab key, then\n                         * the 'focus-outline' css class is added to the body element\n                         * so focusable elements have an outline. On a mousedown or\n                         * touchstart event, then the 'focus-outline' css class is removed.\n                         *\n                         * Config default overrides:\n                         * focusOutline: true     - Always add the focus-outline\n                         * focusOutline: false    - Do not add the focus-outline\n                         */\n                        var self = this;\n                        var isKeyInputEnabled = false;\n                        function cssClass() {\n                            raf(function () {\n                                document.body.classList[isKeyInputEnabled ? 'add' : 'remove']('focus-outline');\n                            });\n                        }\n                        if (setting === true) {\n                            isKeyInputEnabled = true;\n                            return cssClass();\n                        } else if (setting === false) {\n                            return;\n                        }\n                        // default is to add the focus-outline when the tab key is used\n                        function keyDown(ev) {\n                            if (!isKeyInputEnabled && ev.keyCode == 9) {\n                                isKeyInputEnabled = true;\n                                enableKeyInput();\n                            }\n                        }\n                        function pointerDown() {\n                            isKeyInputEnabled = false;\n                            enableKeyInput();\n                        }\n                        function enableKeyInput() {\n                            cssClass();\n                            self.zone.runOutsideAngular(function () {\n                                document.removeEventListener('mousedown', pointerDown);\n                                document.removeEventListener('touchstart', pointerDown);\n                                if (isKeyInputEnabled) {\n                                    document.addEventListener('mousedown', pointerDown);\n                                    document.addEventListener('touchstart', pointerDown);\n                                }\n                            });\n                        }\n                        document.addEventListener('keydown', keyDown);\n                    }\n                }]);\n\n                return Keyboard;\n            })();\n\n            _export(\"Keyboard\", Keyboard);\n\n            _export(\"Keyboard\", Keyboard = __decorate([Injectable(), __metadata('design:paramtypes', [typeof (_a = typeof Config !== 'undefined' && Config) === 'function' && _a || Object, typeof (_b = typeof Form !== 'undefined' && Form) === 'function' && _b || Object, typeof (_c = typeof NgZone !== 'undefined' && NgZone) === 'function' && _c || Object])], Keyboard));\n            KEYBOARD_CLOSE_POLLING = 150;\n        }\n    };\n});\nSystem.register('ionic/util/util', [], function (_export) {\n    // Simple noop function\n    'use strict';\n\n    var isBoolean, isString, isNumber, isFunction, isDefined, isUndefined, isBlank, isObject, isArray, isTrueProperty, uid, array;\n\n    _export('noop', noop);\n\n    /**\n     * Extend the destination with an arbitrary number of other objects.\n     * @param dst the destination\n     * @param ... the param objects\n     */\n\n    _export('clamp', clamp);\n\n    /**\n     * Do a deep extend (merge).\n     * @param dst the destination\n     * @param ... the param objects\n     */\n\n    _export('extend', extend);\n\n    _export('merge', merge);\n\n    /**\n     * Apply default arguments if they don't exist in\n     * the first object.\n     * @param the destination to apply defaults to.\n     */\n\n    _export('debounce', debounce);\n\n    _export('defaults', defaults);\n\n    _export('pascalCaseToDashCase', pascalCaseToDashCase);\n\n    _export('nextUid', nextUid);\n\n    /**\n     * Throttle the given fun, only allowing it to be\n     * called at most every `wait` ms.\n     */\n\n    _export('getQuerystring', getQuerystring);\n\n    _export('throttle', throttle);\n\n    function noop() {}\n\n    /**\n     * Given a min and max, restrict the given number\n     * to the range.\n     * @param min the minimum\n     * @param n the value\n     * @param max the maximum\n     */\n\n    function clamp(min, n, max) {\n        return Math.max(min, Math.min(n, max));\n    }\n\n    function extend(dst) {\n        return _baseExtend(dst, [].slice.call(arguments, 1), false);\n    }\n\n    function merge(dst) {\n        return _baseExtend(dst, [].slice.call(arguments, 1), true);\n    }\n\n    function _baseExtend(dst, objs, deep) {\n        for (var i = 0, ii = objs.length; i < ii; ++i) {\n            var obj = objs[i];\n            if (!obj || !isObject(obj) && !isFunction(obj)) continue;\n            var keys = Object.keys(obj);\n            for (var j = 0, jj = keys.length; j < jj; j++) {\n                var key = keys[j];\n                var src = obj[key];\n                if (deep && isObject(src)) {\n                    if (!isObject(dst[key])) dst[key] = isArray(src) ? [] : {};\n                    _baseExtend(dst[key], [src], true);\n                } else {\n                    dst[key] = src;\n                }\n            }\n        }\n        return dst;\n    }\n\n    function debounce(func, wait, immediate) {\n        var timeout, args, context, timestamp, result;\n        return function () {\n            context = this;\n            args = arguments;\n            timestamp = new Date();\n            var later = function later() {\n                var last = new Date() - timestamp;\n                if (last < wait) {\n                    timeout = setTimeout(later, wait - last);\n                } else {\n                    timeout = null;\n                    if (!immediate) result = func.apply(context, args);\n                }\n            };\n            var callNow = immediate && !timeout;\n            if (!timeout) {\n                timeout = setTimeout(later, wait);\n            }\n            if (callNow) result = func.apply(context, args);\n            return result;\n        };\n    }\n\n    function defaults(dest) {\n        for (var i = arguments.length - 1; i >= 1; i--) {\n            var source = arguments[i] || {};\n            for (var key in source) {\n                if (source.hasOwnProperty(key) && !dest.hasOwnProperty(key)) {\n                    dest[key] = source[key];\n                }\n            }\n        }\n        return dest;\n    }\n\n    /**\n     * Convert a string in the format thisIsAString to a slug format this-is-a-string\n     */\n\n    function pascalCaseToDashCase() {\n        var str = arguments.length <= 0 || arguments[0] === undefined ? '' : arguments[0];\n\n        return str.charAt(0).toLowerCase() + str.substring(1).replace(/[A-Z]/g, function (match) {\n            return '-' + match.toLowerCase();\n        });\n    }\n\n    function nextUid() {\n        return ++uid;\n    }\n\n    /**\n     * Grab the query string param value for the given key.\n     * @param key the key to look for\n     */\n\n    function getQuerystring(url, key) {\n        var queryParams = {};\n        if (url) {\n            var startIndex = url.indexOf('?');\n            if (startIndex !== -1) {\n                var queries = url.slice(startIndex + 1).split('&');\n                queries.forEach(function (param) {\n                    var split = param.split('=');\n                    queryParams[split[0].toLowerCase()] = split[1].split('#')[0];\n                });\n            }\n            if (key) {\n                return queryParams[key] || '';\n            }\n        }\n        return queryParams;\n    }\n\n    function throttle(func, wait, options) {\n        var context, args, result;\n        var timeout = null;\n        var previous = 0;\n        options || (options = {});\n        var later = function later() {\n            previous = options.leading === false ? 0 : Date.now();\n            timeout = null;\n            result = func.apply(context, args);\n        };\n        return function () {\n            var now = Date.now();\n            if (!previous && options.leading === false) previous = now;\n            var remaining = wait - (now - previous);\n            context = this;\n            args = arguments;\n            if (remaining <= 0) {\n                clearTimeout(timeout);\n                timeout = null;\n                previous = now;\n                result = func.apply(context, args);\n            } else if (!timeout && options.trailing !== false) {\n                timeout = setTimeout(later, remaining);\n            }\n            return result;\n        };\n    }\n\n    return {\n        setters: [],\n        execute: function () {\n            ;\n            isBoolean = function isBoolean(val) {\n                return typeof val === 'boolean';\n            };\n\n            _export('isBoolean', isBoolean);\n\n            isString = function isString(val) {\n                return typeof val === 'string';\n            };\n\n            _export('isString', isString);\n\n            isNumber = function isNumber(val) {\n                return typeof val === 'number';\n            };\n\n            _export('isNumber', isNumber);\n\n            isFunction = function isFunction(val) {\n                return typeof val === 'function';\n            };\n\n            _export('isFunction', isFunction);\n\n            isDefined = function isDefined(val) {\n                return typeof val !== 'undefined';\n            };\n\n            _export('isDefined', isDefined);\n\n            isUndefined = function isUndefined(val) {\n                return typeof val === 'undefined';\n            };\n\n            _export('isUndefined', isUndefined);\n\n            isBlank = function isBlank(val) {\n                return val === undefined || val === null;\n            };\n\n            _export('isBlank', isBlank);\n\n            isObject = function isObject(val) {\n                return typeof val === 'object';\n            };\n\n            _export('isObject', isObject);\n\n            isArray = Array.isArray;\n\n            _export('isArray', isArray);\n\n            isTrueProperty = function isTrueProperty(val) {\n                return typeof val !== 'undefined' && val !== \"false\";\n            };\n\n            _export('isTrueProperty', isTrueProperty);\n\n            uid = 0;\n            array = {\n                find: function find(arr, cb) {\n                    for (var i = 0, ii = arr.length; i < ii; i++) {\n                        if (cb(arr[i], i)) return arr[i];\n                    }\n                },\n                remove: function remove(arr, itemOrIndex) {\n                    var index = -1;\n                    if (isNumber(itemOrIndex)) {\n                        index = itemOrIndex;\n                    } else {\n                        index = arr.indexOf(itemOrIndex);\n                    }\n                    if (index < 0) {\n                        return false;\n                    }\n                    arr.splice(index, 1);\n                    return true;\n                }\n            };\n\n            _export('array', array);\n        }\n    };\n});\nSystem.register(\"ionic/components/action-sheet/action-sheet\", [\"angular2/core\", \"angular2/common\", \"../nav/nav-controller\", \"../nav/view-controller\", \"../../config/config\", \"../icon/icon\", \"../../animations/animation\"], function (_export) {\n    /**\n     * @name ActionSheet\n     * @description\n     * An Action Sheet is a dialog that lets the user choose from a set of\n     * options. It appears on top of the app's content, and must be manually\n     * dismissed by the user before they can resume interaction with the app.\n     * Dangerous (destructive) options are made obvious. There are easy\n     * ways to cancel out of the action sheet, such as tapping the backdrop or\n     * hitting the escape key on desktop.\n     *\n     * An action sheet is created from an array of `buttons`, with each button\n     * including properties for its `text`, and optionally a `style` and `handler`.\n     * If a handler returns `false` then the action sheet will not be dismissed. An\n     * action sheet can also optionally have a `title` and a `subTitle`.\n     *\n     * A button's `style` property can either be `destructive` or `cancel`. Buttons\n     * without a style property will have a default style for its platform. Buttons\n     * with the `cancel` style will always load as the bottom button, no matter where\n     * it shows up in the array. All other buttons will show up in the order they\n     * have been added to the `buttons` array. Note: We recommend that `destructive`\n     * buttons show be the first button in the array, making it the button on top.\n     *\n     * Its shorthand is to add all the action sheet's options from within the\n     * `ActionSheet.create(opts)` first argument. Otherwise the action sheet's\n     * instance has methods to add options, such as `setTitle()` or `addButton()`.\n     *\n     * @usage\n     * ```ts\n     * constructor(nav: NavController) {\n     *   this.nav = nav;\n     * }\n     *\n     * presentActionSheet() {\n     *   let actionSheet = ActionSheet.create({\n     *     title: 'Modify your album',\n     *     buttons: [\n     *       {\n     *         text: 'Destructive',\n     *         style: 'destructive',\n     *         handler: () => {\n     *           console.log('Destructive clicked');\n     *         }\n     *       },\n     *       {\n     *         text: 'Archive',\n     *         handler: () => {\n     *           console.log('Archive clicked');\n     *         }\n     *       },\n     *       {\n     *         text: 'Cancel',\n     *         style: 'cancel',\n     *         handler: () => {\n     *           console.log('Cancel clicked');\n     *         }\n     *       }\n     *     ]\n     *   });\n     *\n     *   this.nav.present(actionSheet);\n     * }\n     * ```\n     *\n     * @demo /docs/v3/demos/action-sheet/\n     * @see {@link /docs/v3/components#action-sheets ActionSheet Component Docs}\n     */\n    \"use strict\";\n\n    var Component, Renderer, NgFor, NgIf, NavParams, ViewController, Config, Icon, Animation, __decorate, __metadata, ActionSheet, ActionSheetCmp, ActionSheetSlideIn, ActionSheetSlideOut, ActionSheetMdSlideIn, ActionSheetMdSlideOut, _a, _b, _c, _d;\n\n    var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();\n\n    var _get = function get(_x3, _x4, _x5) { var _again = true; _function: while (_again) { var object = _x3, property = _x4, receiver = _x5; _again = false; if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { _x3 = parent; _x4 = property; _x5 = receiver; _again = true; desc = parent = undefined; continue _function; } } else if (\"value\" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } } };\n\n    function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n    function _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\n    return {\n        setters: [function (_angular2Core) {\n            Component = _angular2Core.Component;\n            Renderer = _angular2Core.Renderer;\n        }, function (_angular2Common) {\n            NgFor = _angular2Common.NgFor;\n            NgIf = _angular2Common.NgIf;\n        }, function (_navNavController) {\n            NavParams = _navNavController.NavParams;\n        }, function (_navViewController) {\n            ViewController = _navViewController.ViewController;\n        }, function (_configConfig) {\n            Config = _configConfig.Config;\n        }, function (_iconIcon) {\n            Icon = _iconIcon.Icon;\n        }, function (_animationsAnimation) {\n            Animation = _animationsAnimation.Animation;\n        }],\n        execute: function () {\n            __decorate = undefined && undefined.__decorate || function (decorators, target, key, desc) {\n                var c = arguments.length,\n                    r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc,\n                    d;\n                if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n                return c > 3 && r && Object.defineProperty(target, key, r), r;\n            };\n\n            __metadata = undefined && undefined.__metadata || function (k, v) {\n                if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n            };\n\n            ActionSheet = (function (_ViewController) {\n                _inherits(ActionSheet, _ViewController);\n\n                function ActionSheet() {\n                    var opts = arguments.length <= 0 || arguments[0] === undefined ? {} : arguments[0];\n\n                    _classCallCheck(this, ActionSheet);\n\n                    opts.buttons = opts.buttons || [];\n                    _get(Object.getPrototypeOf(ActionSheet.prototype), \"constructor\", this).call(this, ActionSheetCmp, opts);\n                    this.viewType = 'action-sheet';\n                }\n\n                /**\n                * @private\n                */\n\n                /**\n                * @private\n                */\n\n                _createClass(ActionSheet, [{\n                    key: \"getTransitionName\",\n                    value: function getTransitionName(direction) {\n                        var key = 'actionSheet' + (direction === 'back' ? 'Leave' : 'Enter');\n                        return this._nav && this._nav.config.get(key);\n                    }\n\n                    /**\n                     * @param {string} title Action sheet title\n                     */\n                }, {\n                    key: \"setTitle\",\n                    value: function setTitle(title) {\n                        this.data.title = title;\n                    }\n\n                    /**\n                     * @param {string} subTitle Action sheet subtitle\n                     */\n                }, {\n                    key: \"setSubTitle\",\n                    value: function setSubTitle(subTitle) {\n                        this.data.subTitle = subTitle;\n                    }\n\n                    /**\n                     * @param {Object} button Action sheet button\n                     */\n                }, {\n                    key: \"addButton\",\n                    value: function addButton(button) {\n                        this.data.buttons.push(button);\n                    }\n\n                    /**\n                     * @param {Object} opts Action sheet options\n                     */\n                }], [{\n                    key: \"create\",\n                    value: function create() {\n                        var opts = arguments.length <= 0 || arguments[0] === undefined ? {} : arguments[0];\n\n                        return new ActionSheet(opts);\n                    }\n                }]);\n\n                return ActionSheet;\n            })(ViewController);\n\n            _export(\"ActionSheet\", ActionSheet);\n\n            ActionSheetCmp = (function () {\n                function ActionSheetCmp(_viewCtrl, _config, params, renderer) {\n                    _classCallCheck(this, ActionSheetCmp);\n\n                    this._viewCtrl = _viewCtrl;\n                    this._config = _config;\n                    this.d = params.data;\n                    if (this.d.cssClass) {\n                        renderer.setElementClass(elementRef, this.d.cssClass, true);\n                    }\n                }\n\n                _createClass(ActionSheetCmp, [{\n                    key: \"click\",\n                    value: function click(button) {\n                        var _this = this;\n\n                        var shouldDismiss = true;\n                        if (button.handler) {\n                            // a handler has been provided, execute it\n                            if (button.handler() === false) {\n                                // if the return value of the handler is false then do not dismiss\n                                shouldDismiss = false;\n                            }\n                        }\n                        if (shouldDismiss) {\n                            setTimeout(function () {\n                                _this.dismiss();\n                            }, this._config.get('pageTransitionDelay'));\n                        }\n                    }\n                }, {\n                    key: \"dismiss\",\n                    value: function dismiss() {\n                        this._viewCtrl.dismiss();\n                    }\n                }, {\n                    key: \"onPageLoaded\",\n                    value: function onPageLoaded() {\n                        var _this2 = this;\n\n                        // normalize the data\n                        var buttons = [];\n                        this.d.buttons.forEach(function (button) {\n                            if (typeof button === 'string') {\n                                button = { text: button };\n                            }\n                            if (!button.cssClass) {\n                                button.cssClass = '';\n                            }\n                            if (button.style === 'cancel') {\n                                _this2.d.cancelButton = button;\n                            } else {\n                                if (button.style === 'destructive') {\n                                    button.cssClass = (button.cssClass + ' ' || '') + 'action-sheet-destructive';\n                                }\n                                buttons.push(button);\n                            }\n                        });\n                        this.d.buttons = buttons;\n                        var self = this;\n                        self.keyUp = function (ev) {\n                            if (ev.keyCode === 27) {\n                                console.debug('actionsheet escape');\n                                self.dismiss();\n                            }\n                        };\n                        document.addEventListener('keyup', this.keyUp);\n                    }\n                }, {\n                    key: \"onPageDidLeave\",\n                    value: function onPageDidLeave() {\n                        document.removeEventListener('keyup', this.keyUp);\n                    }\n                }]);\n\n                return ActionSheetCmp;\n            })();\n\n            ActionSheetCmp = __decorate([Component({\n                selector: 'ion-action-sheet',\n                template: '<div (click)=\"dismiss()\" tappable disable-activated class=\"backdrop\" role=\"presentation\"></div>' + '<div class=\"action-sheet-wrapper\">' + '<div class=\"action-sheet-container\">' + '<div class=\"action-sheet-group\">' + '<div class=\"action-sheet-title\" *ngIf=\"d.title\">{{d.title}}</div>' + '<div class=\"action-sheet-sub-title\" *ngIf=\"d.subTitle\">{{d.subTitle}}</div>' + '<button (click)=\"click(b)\" *ngFor=\"#b of d.buttons\" class=\"action-sheet-button disable-hover\" [ngClass]=\"b.cssClass\">' + '<ion-icon [name]=\"b.icon\" *ngIf=\"b.icon\" class=\"action-sheet-icon\"></ion-icon> ' + '{{b.text}}' + '</button>' + '</div>' + '<div class=\"action-sheet-group\" *ngIf=\"d.cancelButton\">' + '<button (click)=\"click(d.cancelButton)\" class=\"action-sheet-button action-sheet-cancel disable-hover\" [ngClass]=\"d.cancelButton.cssClass\">' + '<ion-icon [name]=\"d.cancelButton.icon\" *ngIf=\"d.cancelButton.icon\" class=\"action-sheet-icon\"></ion-icon> ' + '{{d.cancelButton.text}}' + '</button>' + '</div>' + '</div>' + '</div>',\n                host: {\n                    'role': 'dialog'\n                },\n                directives: [NgFor, NgIf, Icon]\n            }), __metadata('design:paramtypes', [typeof (_a = typeof ViewController !== 'undefined' && ViewController) === 'function' && _a || Object, typeof (_b = typeof Config !== 'undefined' && Config) === 'function' && _b || Object, typeof (_c = typeof NavParams !== 'undefined' && NavParams) === 'function' && _c || Object, typeof (_d = typeof Renderer !== 'undefined' && Renderer) === 'function' && _d || Object])], ActionSheetCmp);\n\n            ActionSheetSlideIn = (function (_Animation) {\n                _inherits(ActionSheetSlideIn, _Animation);\n\n                function ActionSheetSlideIn(enteringView, leavingView, opts) {\n                    _classCallCheck(this, ActionSheetSlideIn);\n\n                    _get(Object.getPrototypeOf(ActionSheetSlideIn.prototype), \"constructor\", this).call(this, null, opts);\n                    var ele = enteringView.pageRef().nativeElement;\n                    var backdrop = new Animation(ele.querySelector('.backdrop'));\n                    var wrapper = new Animation(ele.querySelector('.action-sheet-wrapper'));\n                    backdrop.fromTo('opacity', 0.01, 0.4);\n                    wrapper.fromTo('translateY', '100%', '0%');\n                    this.easing('cubic-bezier(.36,.66,.04,1)').duration(400).add([backdrop, wrapper]);\n                }\n\n                return ActionSheetSlideIn;\n            })(Animation);\n\n            Animation.register('action-sheet-slide-in', ActionSheetSlideIn);\n\n            ActionSheetSlideOut = (function (_Animation2) {\n                _inherits(ActionSheetSlideOut, _Animation2);\n\n                function ActionSheetSlideOut(enteringView, leavingView, opts) {\n                    _classCallCheck(this, ActionSheetSlideOut);\n\n                    _get(Object.getPrototypeOf(ActionSheetSlideOut.prototype), \"constructor\", this).call(this, null, opts);\n                    var ele = leavingView.pageRef().nativeElement;\n                    var backdrop = new Animation(ele.querySelector('.backdrop'));\n                    var wrapper = new Animation(ele.querySelector('.action-sheet-wrapper'));\n                    backdrop.fromTo('opacity', 0.4, 0);\n                    wrapper.fromTo('translateY', '0%', '100%');\n                    this.easing('cubic-bezier(.36,.66,.04,1)').duration(300).add([backdrop, wrapper]);\n                }\n\n                return ActionSheetSlideOut;\n            })(Animation);\n\n            Animation.register('action-sheet-slide-out', ActionSheetSlideOut);\n\n            ActionSheetMdSlideIn = (function (_Animation3) {\n                _inherits(ActionSheetMdSlideIn, _Animation3);\n\n                function ActionSheetMdSlideIn(enteringView, leavingView, opts) {\n                    _classCallCheck(this, ActionSheetMdSlideIn);\n\n                    _get(Object.getPrototypeOf(ActionSheetMdSlideIn.prototype), \"constructor\", this).call(this, null, opts);\n                    var ele = enteringView.pageRef().nativeElement;\n                    var backdrop = new Animation(ele.querySelector('.backdrop'));\n                    var wrapper = new Animation(ele.querySelector('.action-sheet-wrapper'));\n                    backdrop.fromTo('opacity', 0.01, 0.26);\n                    wrapper.fromTo('translateY', '100%', '0%');\n                    this.easing('cubic-bezier(.36,.66,.04,1)').duration(450).add([backdrop, wrapper]);\n                }\n\n                return ActionSheetMdSlideIn;\n            })(Animation);\n\n            Animation.register('action-sheet-md-slide-in', ActionSheetMdSlideIn);\n\n            ActionSheetMdSlideOut = (function (_Animation4) {\n                _inherits(ActionSheetMdSlideOut, _Animation4);\n\n                function ActionSheetMdSlideOut(enteringView, leavingView, opts) {\n                    _classCallCheck(this, ActionSheetMdSlideOut);\n\n                    _get(Object.getPrototypeOf(ActionSheetMdSlideOut.prototype), \"constructor\", this).call(this, null, opts);\n                    var ele = leavingView.pageRef().nativeElement;\n                    var backdrop = new Animation(ele.querySelector('.backdrop'));\n                    var wrapper = new Animation(ele.querySelector('.action-sheet-wrapper'));\n                    backdrop.fromTo('opacity', 0.26, 0);\n                    wrapper.fromTo('translateY', '0%', '100%');\n                    this.easing('cubic-bezier(.36,.66,.04,1)').duration(450).add([backdrop, wrapper]);\n                }\n\n                return ActionSheetMdSlideOut;\n            })(Animation);\n\n            Animation.register('action-sheet-md-slide-out', ActionSheetMdSlideOut);\n        }\n    };\n});\nSystem.register(\"ionic/components/alert/alert\", [\"angular2/core\", \"angular2/common\", \"../nav/nav-controller\", \"../nav/view-controller\", \"../../config/config\", \"../../animations/animation\", \"../../util/util\"], function (_export) {\n    /**\n     * @name Alert\n     * @description\n     * An Alert is a dialog that presents users with either information, or used\n     * to receive information from the user using inputs. An alert appears on top\n     * of the app's content, and must be manually dismissed by the user before\n     * they can resume interaction with the app.\n     *\n     * An alert is created from an array of `buttons` and optionally an array of\n     * `inputs`. Each button includes properties for its `text`, and optionally a\n     * `handler`. If a handler returns `false` then the alert will not be dismissed.\n     * An alert can also optionally have a `title`, `subTitle` and `body`.\n     *\n     * All buttons will show up in the order they have been added to the `buttons`\n     * array, from left to right. Note: The right most button (the last one in the\n     * array) is the main button.\n     *\n     * Alerts can also include inputs whos data can be passed back to the app.\n     * Inputs can be used to prompt users for information.\n     *\n     * Its shorthand is to add all the alert's options from within the\n     * `Alert.create(opts)` first argument. Otherwise the alert's\n     * instance has methods to add options, such as `setTitle()` or `addButton()`.\n     *\n     * @usage\n     * ```ts\n     * constructor(nav: NavController) {\n     *   this.nav = nav;\n     * }\n     *\n     * presentAlert() {\n     *   let alert = Alert.create({\n     *     title: 'Low battery',\n     *     subTitle: '10% of battery remaining',\n     *     buttons: ['Dismiss']\n     *   });\n     *   this.nav.present(alert);\n     * }\n     *\n     * presentConfirm() {\n     *   let alert = Alert.create({\n     *     title: 'Confirm purchase',\n     *     body: 'Do you want to buy this book?',\n     *     buttons: [\n     *       {\n     *         text: 'Cancel',\n     *         handler: () => {\n     *           console.log('Cancel clicked');\n     *         }\n     *       },\n     *       {\n     *         text: 'Buy',\n     *         handler: () => {\n     *           console.log('Buy clicked');\n     *         }\n     *       }\n     *     ]\n     *   });\n     *   this.nav.present(alert);\n     * }\n     *\n     * presentPrompt() {\n     *   let alert = Alert.create({\n     *     title: 'Login',\n     *     inputs: [\n     *       {\n     *         name: 'username',\n     *         placeholder: 'Username'\n     *       },\n     *       {\n     *         name: 'password',\n     *         placeholder: 'Password',\n     *         type: 'password'\n     *       }\n     *     ],\n     *     buttons: [\n     *       {\n     *         text: 'Cancel',\n     *         handler: data => {\n     *           console.log('Cancel clicked');\n     *         }\n     *       },\n     *       {\n     *         text: 'Login',\n     *         handler: data => {\n     *           if (User.isValid(data.username, data.password)) {\n     *             // logged in!\n     *           } else {\n     *             // invalid login\n     *             return false;\n     *           }\n     *         }\n     *       }\n     *     ]\n     *   });\n     *   this.nav.present(alert);\n     * }\n     * ```\n     *\n     */\n    \"use strict\";\n\n    var Component, ElementRef, Renderer, NgClass, NgIf, NgFor, NavParams, ViewController, Config, Animation, isDefined, __decorate, __metadata, Alert, AlertCmp, AlertPopIn, AlertPopOut, AlertMdPopIn, AlertMdPopOut, _a, _b, _c, _d, _e;\n\n    var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();\n\n    var _get = function get(_x3, _x4, _x5) { var _again = true; _function: while (_again) { var object = _x3, property = _x4, receiver = _x5; _again = false; if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { _x3 = parent; _x4 = property; _x5 = receiver; _again = true; desc = parent = undefined; continue _function; } } else if (\"value\" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } } };\n\n    function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n    function _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\n    return {\n        setters: [function (_angular2Core) {\n            Component = _angular2Core.Component;\n            ElementRef = _angular2Core.ElementRef;\n            Renderer = _angular2Core.Renderer;\n        }, function (_angular2Common) {\n            NgClass = _angular2Common.NgClass;\n            NgIf = _angular2Common.NgIf;\n            NgFor = _angular2Common.NgFor;\n        }, function (_navNavController) {\n            NavParams = _navNavController.NavParams;\n        }, function (_navViewController) {\n            ViewController = _navViewController.ViewController;\n        }, function (_configConfig) {\n            Config = _configConfig.Config;\n        }, function (_animationsAnimation) {\n            Animation = _animationsAnimation.Animation;\n        }, function (_utilUtil) {\n            isDefined = _utilUtil.isDefined;\n        }],\n        execute: function () {\n            __decorate = undefined && undefined.__decorate || function (decorators, target, key, desc) {\n                var c = arguments.length,\n                    r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc,\n                    d;\n                if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n                return c > 3 && r && Object.defineProperty(target, key, r), r;\n            };\n\n            __metadata = undefined && undefined.__metadata || function (k, v) {\n                if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n            };\n\n            Alert = (function (_ViewController) {\n                _inherits(Alert, _ViewController);\n\n                function Alert() {\n                    var opts = arguments.length <= 0 || arguments[0] === undefined ? {} : arguments[0];\n\n                    _classCallCheck(this, Alert);\n\n                    opts.inputs = opts.inputs || [];\n                    opts.buttons = opts.buttons || [];\n                    _get(Object.getPrototypeOf(Alert.prototype), \"constructor\", this).call(this, AlertCmp, opts);\n                    this.viewType = 'alert';\n                }\n\n                /**\n                * @private\n                */\n\n                /**\n                * @private\n                */\n\n                _createClass(Alert, [{\n                    key: \"getTransitionName\",\n                    value: function getTransitionName(direction) {\n                        var key = direction === 'back' ? 'alertLeave' : 'alertEnter';\n                        return this._nav && this._nav.config.get(key);\n                    }\n\n                    /**\n                     * @param {string} title Alert title\n                     */\n                }, {\n                    key: \"setTitle\",\n                    value: function setTitle(title) {\n                        this.data.title = title;\n                    }\n\n                    /**\n                     * @param {string} subTitle Alert subtitle\n                     */\n                }, {\n                    key: \"setSubTitle\",\n                    value: function setSubTitle(subTitle) {\n                        this.data.subTitle = subTitle;\n                    }\n\n                    /**\n                     * @param {string} body Alert body content\n                     */\n                }, {\n                    key: \"setBody\",\n                    value: function setBody(body) {\n                        this.data.body = body;\n                    }\n\n                    /**\n                     * @param {Object} input Alert input\n                     */\n                }, {\n                    key: \"addInput\",\n                    value: function addInput(input) {\n                        this.data.inputs.push(input);\n                    }\n\n                    /**\n                     * @param {Object} button Alert button\n                     */\n                }, {\n                    key: \"addButton\",\n                    value: function addButton(button) {\n                        this.data.buttons.push(button);\n                    }\n\n                    /**\n                     * @param {Object} opts Alert options\n                     */\n                }], [{\n                    key: \"create\",\n                    value: function create() {\n                        var opts = arguments.length <= 0 || arguments[0] === undefined ? {} : arguments[0];\n\n                        return new Alert(opts);\n                    }\n                }]);\n\n                return Alert;\n            })(ViewController);\n\n            _export(\"Alert\", Alert);\n\n            AlertCmp = (function () {\n                function AlertCmp(_viewCtrl, _elementRef, _config, params, renderer) {\n                    _classCallCheck(this, AlertCmp);\n\n                    this._viewCtrl = _viewCtrl;\n                    this._elementRef = _elementRef;\n                    this._config = _config;\n                    this.d = params.data;\n                    if (this.d.cssClass) {\n                        renderer.setElementClass(_elementRef, this.d.cssClass, true);\n                    }\n                }\n\n                _createClass(AlertCmp, [{\n                    key: \"click\",\n                    value: function click(button) {\n                        var _this = this;\n\n                        var shouldDismiss = true;\n                        if (button.handler) {\n                            // a handler has been provided, execute it\n                            // pass the handler the values from the inputs\n                            if (button.handler(this.getValues()) === false) {\n                                // if the return value of the handler is false then do not dismiss\n                                shouldDismiss = false;\n                            }\n                        }\n                        if (shouldDismiss) {\n                            setTimeout(function () {\n                                _this.dismiss();\n                            }, this._config.get('pageTransitionDelay'));\n                        }\n                    }\n                }, {\n                    key: \"dismiss\",\n                    value: function dismiss() {\n                        this._viewCtrl.dismiss(this.getValues());\n                    }\n                }, {\n                    key: \"getValues\",\n                    value: function getValues() {\n                        var values = {};\n                        this.d.inputs.forEach(function (input) {\n                            values[input.name] = input.value;\n                        });\n                        return values;\n                    }\n                }, {\n                    key: \"onPageLoaded\",\n                    value: function onPageLoaded() {\n                        // normalize the data\n                        this.d.buttons = this.d.buttons.map(function (button) {\n                            if (typeof button === 'string') {\n                                return { text: button };\n                            }\n                            return button;\n                        });\n                        this.d.inputs = this.d.inputs.map(function (input, index) {\n                            return {\n                                name: isDefined(input.name) ? input.name : index,\n                                placeholder: isDefined(input.placeholder) ? input.placeholder : '',\n                                type: input.type || 'text',\n                                value: isDefined(input.value) ? input.value : ''\n                            };\n                        });\n                        var self = this;\n                        self.keyUp = function (ev) {\n                            if (ev.keyCode === 13) {\n                                // enter\n                                console.debug('alert enter');\n                                var button = self.d.buttons[self.d.buttons.length - 1];\n                                self.click(button);\n                            } else if (ev.keyCode === 27) {\n                                console.debug('alert escape');\n                                self.dismiss();\n                            }\n                        };\n                        document.addEventListener('keyup', this.keyUp);\n                    }\n                }, {\n                    key: \"onPageDidEnter\",\n                    value: function onPageDidEnter() {\n                        document.activeElement && document.activeElement.blur();\n                        if (this.d.inputs.length) {\n                            var firstInput = this._elementRef.nativeElement.querySelector('input');\n                            if (firstInput) {\n                                firstInput.focus();\n                            }\n                        }\n                    }\n                }, {\n                    key: \"onPageDidLeave\",\n                    value: function onPageDidLeave() {\n                        document.removeEventListener('keyup', this.keyUp);\n                    }\n                }]);\n\n                return AlertCmp;\n            })();\n\n            AlertCmp = __decorate([Component({\n                selector: 'ion-alert',\n                template: '<div (click)=\"dismiss()\" tappable disable-activated class=\"backdrop\" role=\"presentation\"></div>' + '<div class=\"alert-wrapper\">' + '<div class=\"alert-head\">' + '<h2 class=\"alert-title\" *ngIf=\"d.title\">{{d.title}}</h2>' + '<h3 class=\"alert-sub-title\" *ngIf=\"d.subTitle\">{{d.subTitle}}</h3>' + '</div>' + '<div class=\"alert-body\" *ngIf=\"d.body\">{{d.body}}</div>' + '<div class=\"alert-body alert-inputs\" *ngIf=\"d.inputs.length\">' + '<div class=\"alert-input-wrapper\" *ngFor=\"#i of d.inputs\">' + '<input [placeholder]=\"i.placeholder\" [(ngModel)]=\"i.value\" [type]=\"i.type\" class=\"alert-input\">' + '</div>' + '</div>' + '<div class=\"alert-buttons\">' + '<button *ngFor=\"#b of d.buttons\" (click)=\"click(b)\" [ngClass]=\"b.cssClass\" class=\"alert-button\">' + '{{b.text}}' + '</button>' + '</div>' + '</div>',\n                host: {\n                    'role': 'dialog'\n                },\n                directives: [NgClass, NgIf, NgFor]\n            }), __metadata('design:paramtypes', [typeof (_a = typeof ViewController !== 'undefined' && ViewController) === 'function' && _a || Object, typeof (_b = typeof ElementRef !== 'undefined' && ElementRef) === 'function' && _b || Object, typeof (_c = typeof Config !== 'undefined' && Config) === 'function' && _c || Object, typeof (_d = typeof NavParams !== 'undefined' && NavParams) === 'function' && _d || Object, typeof (_e = typeof Renderer !== 'undefined' && Renderer) === 'function' && _e || Object])], AlertCmp);\n            /**\n             * Animations for alerts\n             */\n\n            AlertPopIn = (function (_Animation) {\n                _inherits(AlertPopIn, _Animation);\n\n                function AlertPopIn(enteringView, leavingView, opts) {\n                    _classCallCheck(this, AlertPopIn);\n\n                    _get(Object.getPrototypeOf(AlertPopIn.prototype), \"constructor\", this).call(this, null, opts);\n                    var ele = enteringView.pageRef().nativeElement;\n                    var backdrop = new Animation(ele.querySelector('.backdrop'));\n                    var wrapper = new Animation(ele.querySelector('.alert-wrapper'));\n                    wrapper.fromTo('opacity', '0.01', '1').fromTo('scale', '1.1', '1');\n                    backdrop.fromTo('opacity', '0.01', '0.3');\n                    this.easing('ease-in-out').duration(200).add(backdrop, wrapper);\n                }\n\n                return AlertPopIn;\n            })(Animation);\n\n            Animation.register('alert-pop-in', AlertPopIn);\n\n            AlertPopOut = (function (_Animation2) {\n                _inherits(AlertPopOut, _Animation2);\n\n                function AlertPopOut(enteringView, leavingView, opts) {\n                    _classCallCheck(this, AlertPopOut);\n\n                    _get(Object.getPrototypeOf(AlertPopOut.prototype), \"constructor\", this).call(this, null, opts);\n                    var ele = leavingView.pageRef().nativeElement;\n                    var backdrop = new Animation(ele.querySelector('.backdrop'));\n                    var wrapper = new Animation(ele.querySelector('.alert-wrapper'));\n                    wrapper.fromTo('opacity', '1', '0').fromTo('scale', '1', '0.9');\n                    backdrop.fromTo('opacity', '0.3', '0');\n                    this.easing('ease-in-out').duration(200).add(backdrop, wrapper);\n                }\n\n                return AlertPopOut;\n            })(Animation);\n\n            Animation.register('alert-pop-out', AlertPopOut);\n\n            AlertMdPopIn = (function (_Animation3) {\n                _inherits(AlertMdPopIn, _Animation3);\n\n                function AlertMdPopIn(enteringView, leavingView, opts) {\n                    _classCallCheck(this, AlertMdPopIn);\n\n                    _get(Object.getPrototypeOf(AlertMdPopIn.prototype), \"constructor\", this).call(this, null, opts);\n                    var ele = enteringView.pageRef().nativeElement;\n                    var backdrop = new Animation(ele.querySelector('.backdrop'));\n                    var wrapper = new Animation(ele.querySelector('.alert-wrapper'));\n                    wrapper.fromTo('opacity', '0.01', '1').fromTo('scale', '1.1', '1');\n                    backdrop.fromTo('opacity', '0.01', '0.5');\n                    this.easing('ease-in-out').duration(200).add(backdrop, wrapper);\n                }\n\n                return AlertMdPopIn;\n            })(Animation);\n\n            Animation.register('alert-md-pop-in', AlertMdPopIn);\n\n            AlertMdPopOut = (function (_Animation4) {\n                _inherits(AlertMdPopOut, _Animation4);\n\n                function AlertMdPopOut(enteringView, leavingView, opts) {\n                    _classCallCheck(this, AlertMdPopOut);\n\n                    _get(Object.getPrototypeOf(AlertMdPopOut.prototype), \"constructor\", this).call(this, null, opts);\n                    var ele = leavingView.pageRef().nativeElement;\n                    var backdrop = new Animation(ele.querySelector('.backdrop'));\n                    var wrapper = new Animation(ele.querySelector('.alert-wrapper'));\n                    wrapper.fromTo('opacity', '1', '0').fromTo('scale', '1', '0.9');\n                    backdrop.fromTo('opacity', '0.5', '0');\n                    this.easing('ease-in-out').duration(200).add(backdrop, wrapper);\n                }\n\n                return AlertMdPopOut;\n            })(Animation);\n\n            Animation.register('alert-md-pop-out', AlertMdPopOut);\n        }\n    };\n});\nSystem.register(\"ionic/components/app/app\", [\"angular2/core\", \"angular2/platform/browser\", \"../../config/config\", \"../../util/click-block\", \"../../util/dom\"], function (_export) {\n    /**\n     * @private\n     * Component registry service.  For more information on registering\n     * components see the [IdRef API reference](../id/IdRef/).\n     */\n    \"use strict\";\n\n    var Injectable, NgZone, Title, Config, ClickBlock, rafFrames, __decorate, __metadata, IonicApp, _a, _b, _c;\n\n    var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();\n\n    function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n    return {\n        setters: [function (_angular2Core) {\n            Injectable = _angular2Core.Injectable;\n            NgZone = _angular2Core.NgZone;\n        }, function (_angular2PlatformBrowser) {\n            Title = _angular2PlatformBrowser.Title;\n        }, function (_configConfig) {\n            Config = _configConfig.Config;\n        }, function (_utilClickBlock) {\n            ClickBlock = _utilClickBlock.ClickBlock;\n        }, function (_utilDom) {\n            rafFrames = _utilDom.rafFrames;\n        }],\n        execute: function () {\n            __decorate = undefined && undefined.__decorate || function (decorators, target, key, desc) {\n                var c = arguments.length,\n                    r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc,\n                    d;\n                if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n                return c > 3 && r && Object.defineProperty(target, key, r), r;\n            };\n\n            __metadata = undefined && undefined.__metadata || function (k, v) {\n                if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n            };\n\n            IonicApp = (function () {\n                function IonicApp(_config, _clickBlock, _zone) {\n                    _classCallCheck(this, IonicApp);\n\n                    this._config = _config;\n                    this._clickBlock = _clickBlock;\n                    this._zone = _zone;\n                    this._titleSrv = new Title();\n                    this._title = '';\n                    this._disTime = 0;\n                    this._scrollTime = 0;\n                    // Our component registry map\n                    this.components = {};\n                }\n\n                /**\n                 * Sets the document title.\n                 * @param {string} val  Value to set the document title to.\n                 */\n\n                _createClass(IonicApp, [{\n                    key: \"setTitle\",\n                    value: function setTitle(val) {\n                        var self = this;\n                        if (val !== self._title) {\n                            self._title = val;\n                            this._zone.runOutsideAngular(function () {\n                                function setAppTitle() {\n                                    self._titleSrv.setTitle(self._title);\n                                }\n                                rafFrames(4, setAppTitle);\n                            });\n                        }\n                    }\n\n                    /**\n                     * @private\n                     * Sets if the app is currently enabled or not, meaning if it's\n                     * available to accept new user commands. For example, this is set to `false`\n                     * while views transition, a modal slides up, an action-sheet\n                     * slides up, etc. After the transition completes it is set back to `true`.\n                     * @param {bool} isEnabled\n                     * @param {bool} fallback  When `isEnabled` is set to `false`, this argument\n                     * is used to set the maximum number of milliseconds that app will wait until\n                     * it will automatically enable the app again. It's basically a fallback incase\n                     * something goes wrong during a transition and the app wasn't re-enabled correctly.\n                     */\n                }, {\n                    key: \"setEnabled\",\n                    value: function setEnabled(isEnabled) {\n                        var duration = arguments.length <= 1 || arguments[1] === undefined ? 700 : arguments[1];\n\n                        this._disTime = isEnabled ? 0 : Date.now() + duration;\n                        if (duration > 32 || isEnabled) {\n                            // only do a click block if the duration is longer than XXms\n                            this._clickBlock.show(!isEnabled, duration + 64);\n                        }\n                    }\n\n                    /**\n                     * @private\n                     * Boolean if the app is actively enabled or not.\n                     * @return {bool}\n                     */\n                }, {\n                    key: \"isEnabled\",\n                    value: function isEnabled() {\n                        return this._disTime < Date.now();\n                    }\n\n                    /**\n                     * @private\n                     */\n                }, {\n                    key: \"setScrolling\",\n                    value: function setScrolling() {\n                        this._scrollTime = Date.now();\n                    }\n\n                    /**\n                     * @private\n                     * Boolean if the app is actively scrolling or not.\n                     * @return {bool}\n                     */\n                }, {\n                    key: \"isScrolling\",\n                    value: function isScrolling() {\n                        return this._scrollTime + 64 > Date.now();\n                    }\n\n                    /**\n                     * @private\n                     * Register a known component with a key, for easy lookups later.\n                     * @param {TODO} id  The id to use to register the component\n                     * @param {TODO} component  The component to register\n                     */\n                }, {\n                    key: \"register\",\n                    value: function register(id, component) {\n                        if (this.components[id] && this.components[id] !== component) {}\n                        this.components[id] = component;\n                    }\n\n                    /**\n                     * @private\n                     * Unregister a known component with a key.\n                     * @param {TODO} id  The id to use to unregister\n                     */\n                }, {\n                    key: \"unregister\",\n                    value: function unregister(id) {\n                        delete this.components[id];\n                    }\n\n                    /**\n                     * @private\n                     * Get a registered component with the given type (returns the first)\n                     * @param {Object} cls the type to search for\n                     * @return the matching component, or undefined if none was found\n                     */\n                }, {\n                    key: \"getRegisteredComponent\",\n                    value: function getRegisteredComponent(cls) {\n                        var _iteratorNormalCompletion = true;\n                        var _didIteratorError = false;\n                        var _iteratorError = undefined;\n\n                        try {\n                            for (var _iterator = this.components[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {\n                                var component = _step.value;\n\n                                if (component instanceof cls) {\n                                    return component;\n                                }\n                            }\n                        } catch (err) {\n                            _didIteratorError = true;\n                            _iteratorError = err;\n                        } finally {\n                            try {\n                                if (!_iteratorNormalCompletion && _iterator[\"return\"]) {\n                                    _iterator[\"return\"]();\n                                }\n                            } finally {\n                                if (_didIteratorError) {\n                                    throw _iteratorError;\n                                }\n                            }\n                        }\n                    }\n\n                    /**\n                     * @private\n                     * Get the component for the given key.\n                     * @param {TODO} key  TODO\n                     * @return {TODO} TODO\n                     */\n                }, {\n                    key: \"getComponent\",\n                    value: function getComponent(id) {\n                        return this.components[id];\n                    }\n                }]);\n\n                return IonicApp;\n            })();\n\n            _export(\"IonicApp\", IonicApp);\n\n            _export(\"IonicApp\", IonicApp = __decorate([Injectable(), __metadata('design:paramtypes', [typeof (_a = typeof Config !== 'undefined' && Config) === 'function' && _a || Object, typeof (_b = typeof ClickBlock !== 'undefined' && ClickBlock) === 'function' && _b || Object, typeof (_c = typeof NgZone !== 'undefined' && NgZone) === 'function' && _c || Object])], IonicApp));\n        }\n    };\n});\nSystem.register(\"ionic/components/app/id\", [\"angular2/core\", \"./app\"], function (_export) {\n    /**\n     * @name Id\n     * @description\n     * IdRef is an easy way to identify unique components in an app and access them\n     * no matter where in the UI heirarchy you are. For example, this makes toggling\n     * a global side menu feasible from any place in the application.\n     *\n     * See the [Menu section](https://ionicframework.com/docs/v3/components/#menus) of\n     * the Component docs for an example of how Menus rely on ID's.\n     *\n     * @usage\n     * To give any component an ID, simply set its `id` property:\n     * ```html\n     * <ion-checkbox id=\"myCheckbox\"></ion-checkbox>\n     * ```\n     *\n     * To get a reference to the registered component, inject the [IonicApp](../app/IonicApp/)\n     * service:\n     * ```ts\n     * constructor(app: IonicApp) {\n     *    this.app = app\n     * }\n     * ngAfterViewInit{\n     *  var checkbox = this.app.getComponent(\"myCheckbox\");\n     *  if (checkbox.checked) {\n     *    console.log('checkbox is checked');\n     *  }\n     * }\n     * ```\n     *\n     * *NOTE:* It is not recommended to use ID's across Pages, as there is often no\n     * guarantee that the registered component has not been destroyed if its Page\n     * has been navigated away from.\n     */\n    \"use strict\";\n\n    var AppViewManager, ElementRef, Directive, Renderer, IonicApp, __decorate, __metadata, IdRef, Attr, _a, _b, _c, _d, _e;\n\n    var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();\n\n    function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n    return {\n        setters: [function (_angular2Core) {\n            AppViewManager = _angular2Core.AppViewManager;\n            ElementRef = _angular2Core.ElementRef;\n            Directive = _angular2Core.Directive;\n            Renderer = _angular2Core.Renderer;\n        }, function (_app2) {\n            IonicApp = _app2.IonicApp;\n        }],\n        execute: function () {\n            __decorate = undefined && undefined.__decorate || function (decorators, target, key, desc) {\n                var c = arguments.length,\n                    r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc,\n                    d;\n                if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n                return c > 3 && r && Object.defineProperty(target, key, r), r;\n            };\n\n            __metadata = undefined && undefined.__metadata || function (k, v) {\n                if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n            };\n\n            IdRef = (function () {\n                function IdRef(_app, _elementRef, _appViewManager) {\n                    _classCallCheck(this, IdRef);\n\n                    this._app = _app;\n                    this._elementRef = _elementRef;\n                    this._appViewManager = _appViewManager;\n                    // Grab the component this directive is attached to\n                    this.component = _appViewManager.getComponent(_elementRef);\n                }\n\n                /**\n                 * @private\n                 */\n\n                _createClass(IdRef, [{\n                    key: \"ngOnInit\",\n                    value: function ngOnInit() {\n                        this._app.register(this.id, this.component);\n                    }\n\n                    /**\n                     * @private\n                     */\n                }, {\n                    key: \"ngOnDestroy\",\n                    value: function ngOnDestroy() {\n                        this._app.unregister(this.id);\n                    }\n                }]);\n\n                return IdRef;\n            })();\n\n            _export(\"IdRef\", IdRef);\n\n            _export(\"IdRef\", IdRef = __decorate([Directive({\n                selector: '[id]',\n                inputs: ['id']\n            }), __metadata('design:paramtypes', [typeof (_a = typeof IonicApp !== 'undefined' && IonicApp) === 'function' && _a || Object, typeof (_b = typeof ElementRef !== 'undefined' && ElementRef) === 'function' && _b || Object, typeof (_c = typeof AppViewManager !== 'undefined' && AppViewManager) === 'function' && _c || Object])], IdRef));\n            /**\n             * @name Attr\n             * @description\n             * Attr allows you to dynamically add or remove an attribute based on the value of an expression or variable.\n             * @usage\n             * ```html\n             * // toggle the no-lines attributes based on whether isAndroid is true or false\n             * <ion-list [attr.no-lines]=\"isAndroid ? '' : null\">\n             * ```\n             * @demo /docs/v3/demos/attr/\n             */\n\n            Attr = (function () {\n                function Attr(_renderer, _elementRef) {\n                    _classCallCheck(this, Attr);\n\n                    this._renderer = _renderer;\n                    this._elementRef = _elementRef;\n                }\n\n                /**\n                 * @private\n                 */\n\n                _createClass(Attr, [{\n                    key: \"ngOnInit\",\n                    value: function ngOnInit() {\n                        this._renderer.setElementAttribute(this._elementRef, this.attr, '');\n                    }\n                }]);\n\n                return Attr;\n            })();\n\n            _export(\"Attr\", Attr);\n\n            _export(\"Attr\", Attr = __decorate([Directive({\n                selector: '[attr]',\n                inputs: ['attr']\n            }), __metadata('design:paramtypes', [typeof (_d = typeof Renderer !== 'undefined' && Renderer) === 'function' && _d || Object, typeof (_e = typeof ElementRef !== 'undefined' && ElementRef) === 'function' && _e || Object])], Attr));\n        }\n    };\n});\nSystem.register(\"ionic/components/blur/blur\", [\"angular2/core\"], function (_export) {\n    /**\n     * @name Blur\n     * @description\n     * The blur attribute applies the CSS blur attribute to an element. If the CSS attribute is not supported,\n     * it will fall back to applying a semi-transparent background color to the element.\n     *\n     * @usage\n     * ```html\n     * <ion-card blur>\n     *    This card will blur the content behind it.\n     * </ion-card>\n     * ```\n     *\n     * @demo /docs/v3/demos/blur/\n     */\n    \"use strict\";\n\n    var Directive, Renderer, ElementRef, __decorate, __metadata, Blur, _a, _b;\n\n    function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n    return {\n        setters: [function (_angular2Core) {\n            Directive = _angular2Core.Directive;\n            Renderer = _angular2Core.Renderer;\n            ElementRef = _angular2Core.ElementRef;\n        }],\n        execute: function () {\n            __decorate = undefined && undefined.__decorate || function (decorators, target, key, desc) {\n                var c = arguments.length,\n                    r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc,\n                    d;\n                if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n                return c > 3 && r && Object.defineProperty(target, key, r), r;\n            };\n\n            __metadata = undefined && undefined.__metadata || function (k, v) {\n                if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n            };\n\n            Blur = function Blur(_elementRef, _renderer) {\n                _classCallCheck(this, Blur);\n\n                this._elementRef = _elementRef;\n                this._renderer = _renderer;\n                _renderer.setElementStyle(_elementRef, '-webkit-backdrop-filter', 'blur(10px)');\n            };\n\n            _export(\"Blur\", Blur);\n\n            _export(\"Blur\", Blur = __decorate([Directive({\n                selector: '[blur]'\n            }), __metadata('design:paramtypes', [typeof (_a = typeof ElementRef !== 'undefined' && ElementRef) === 'function' && _a || Object, typeof (_b = typeof Renderer !== 'undefined' && Renderer) === 'function' && _b || Object])], Blur));\n        }\n    };\n});\nSystem.register(\"ionic/components/button/button\", [\"angular2/core\", \"../../config/config\"], function (_export) {\n    /**\n      * @name Button\n      * @module ionic\n      * @property [outline] - for an unfilled outline button\n      * @property [clear] - for a transparent button that only shows text and icons\n      * @property [round] - for a button with rounded corners\n      * @property [block] - for a block button that fills it's parent container\n      * @property [full] - for a full width button\n      * @property [small] - sets button size to small\n      * @property [large] - sets button size to large\n      * @property [disabled] - disables the button\n      * @property [fab] - for a floating action button\n      * @property [fab-left] - position a fab button to the left\n      * @property [fab-right] - position a fab button to the right\n      * @property [fab-center] - position a fab button towards the center\n      * @property [fab-top] - position a fab button towards the top\n      * @property [fab-bottom] - position a fab button towards the bottom\n      * @property [color] - Dynamically set which color attribute this button should use.\n      * @description\n      * Buttons are simple components in Ionic, can consist of text, an icon, or both, and can be enhanced with a wide range of attributes.\n      * @demo /docs/v3/demos/buttons/\n      * @see {@link /docs/v3/components#buttons Button Component Docs}\n    \n     */\n    \"use strict\";\n\n    var Directive, ElementRef, Renderer, Attribute, Config, __decorate, __metadata, __param, Button, BUTTON_SIZE_ATTRS, BUTTON_STYLE_ATTRS, BUTTON_SHAPE_ATTRS, BUTTON_DISPLAY_ATTRS, IGNORE_ATTRS, TEXT, ICON, _a, _b, _c;\n\n    var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();\n\n    function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n    return {\n        setters: [function (_angular2Core) {\n            Directive = _angular2Core.Directive;\n            ElementRef = _angular2Core.ElementRef;\n            Renderer = _angular2Core.Renderer;\n            Attribute = _angular2Core.Attribute;\n        }, function (_configConfig) {\n            Config = _configConfig.Config;\n        }],\n        execute: function () {\n            __decorate = undefined && undefined.__decorate || function (decorators, target, key, desc) {\n                var c = arguments.length,\n                    r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc,\n                    d;\n                if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n                return c > 3 && r && Object.defineProperty(target, key, r), r;\n            };\n\n            __metadata = undefined && undefined.__metadata || function (k, v) {\n                if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n            };\n\n            __param = undefined && undefined.__param || function (paramIndex, decorator) {\n                return function (target, key) {\n                    decorator(target, key, paramIndex);\n                };\n            };\n\n            Button = (function () {\n                function Button(config, _elementRef, _renderer, ionItem) {\n                    _classCallCheck(this, Button);\n\n                    this._elementRef = _elementRef;\n                    this._renderer = _renderer;\n                    this._role = 'button'; // bar-button/item-button\n                    this._size = null; // large/small\n                    this._style = 'default'; // outline/clear/solid\n                    this._shape = null; // round/fab\n                    this._display = null; // block/full\n                    this._lastColor = null;\n                    this._colors = []; // primary/secondary\n                    this._icon = null; // left/right/only\n                    this._disabled = false; // disabled\n                    this.isItem = ionItem === '';\n                    var element = _elementRef.nativeElement;\n                    if (config.get('hoverCSS') === false) {\n                        _renderer.setElementClass(_elementRef, 'disable-hover', true);\n                    }\n                    if (element.hasAttribute('ion-item')) {\n                        // no need to put on these classes for an ion-item\n                        this._role = null;\n                        return;\n                    }\n                    if (element.hasAttribute('disabled')) {\n                        this._disabled = true;\n                    }\n                    this._readAttrs(element);\n                    this._readIcon(element);\n                }\n\n                /**\n                 * @private\n                 */\n\n                _createClass(Button, [{\n                    key: \"ngAfterContentInit\",\n                    value: function ngAfterContentInit() {\n                        this._lastColor = this.color;\n                        if (this.color) {\n                            this._colors = [this.color];\n                        }\n                        this._assignCss(true);\n                    }\n\n                    /**\n                     * @private\n                     */\n                }, {\n                    key: \"ngAfterContentChecked\",\n                    value: function ngAfterContentChecked() {\n                        if (this._lastColor !== this.color) {\n                            this._assignCss(false);\n                            this._lastColor = this.color;\n                            this._colors = [this.color];\n                            this._assignCss(true);\n                        }\n                    }\n\n                    /**\n                     * @private\n                     */\n                }, {\n                    key: \"addClass\",\n                    value: function addClass(className) {\n                        this._renderer.setElementClass(this._elementRef, className, true);\n                    }\n\n                    /**\n                     * @private\n                     */\n                }, {\n                    key: \"setRole\",\n                    value: function setRole(val) {\n                        this._role = val;\n                    }\n                }, {\n                    key: \"_readIcon\",\n                    value: function _readIcon(element) {\n                        // figure out if and where the icon lives in the button\n                        var childNodes = element.childNodes;\n                        var childNode = undefined;\n                        var nodes = [];\n                        for (var i = 0, l = childNodes.length; i < l; i++) {\n                            childNode = childNodes[i];\n                            if (childNode.nodeType === 3) {\n                                // text node\n                                if (childNode.textContent.trim() !== '') {\n                                    nodes.push(TEXT);\n                                }\n                            } else if (childNode.nodeType === 1) {\n                                if (childNode.nodeName === 'ION-ICON') {\n                                    // icon element node\n                                    nodes.push(ICON);\n                                } else {\n                                    // element other than an <ion-icon>\n                                    nodes.push(TEXT);\n                                }\n                            }\n                        }\n                        if (nodes.length > 1) {\n                            if (nodes[0] === ICON && nodes[1] === TEXT) {\n                                this._icon = 'icon-left';\n                            } else if (nodes[0] === TEXT && nodes[1] === ICON) {\n                                this._icon = 'icon-right';\n                            }\n                        } else if (nodes.length === 1 && nodes[0] === ICON) {\n                            this._icon = 'icon-only';\n                        }\n                    }\n                }, {\n                    key: \"_readAttrs\",\n                    value: function _readAttrs(element) {\n                        var elementAttrs = element.attributes;\n                        var attrName = undefined;\n                        for (var i = 0, l = elementAttrs.length; i < l; i++) {\n                            if (elementAttrs[i].value !== '') continue;\n                            attrName = elementAttrs[i].name;\n                            if (BUTTON_STYLE_ATTRS.indexOf(attrName) > -1) {\n                                this._style = attrName;\n                            } else if (BUTTON_DISPLAY_ATTRS.indexOf(attrName) > -1) {\n                                this._display = attrName;\n                            } else if (BUTTON_SHAPE_ATTRS.indexOf(attrName) > -1) {\n                                this._shape = attrName;\n                            } else if (BUTTON_SIZE_ATTRS.indexOf(attrName) > -1) {\n                                this._size = attrName;\n                            } else if (!IGNORE_ATTRS.test(attrName)) {\n                                this._colors.push(attrName);\n                            }\n                        }\n                    }\n                }, {\n                    key: \"_assignCss\",\n                    value: function _assignCss(assignCssClass) {\n                        var _this = this;\n\n                        var role = this._role;\n                        if (role) {\n                            (function () {\n                                _this._renderer.setElementClass(_this._elementRef, role, assignCssClass); // button\n                                _this._setClass(_this._style, assignCssClass); // button-clear\n                                _this._setClass(_this._shape, assignCssClass); // button-round\n                                _this._setClass(_this._display, assignCssClass); // button-full\n                                _this._setClass(_this._size, assignCssClass); // button-small\n                                _this._setClass(_this._icon, assignCssClass); // button-icon-left\n                                var colorStyle = _this._style !== 'default' ? _this._style + '-' : '';\n                                _this._colors.forEach(function (colorName) {\n                                    _this._setClass(colorStyle + colorName, assignCssClass); // button-secondary, button-clear-secondary\n                                });\n                            })();\n                        }\n                    }\n                }, {\n                    key: \"_setClass\",\n                    value: function _setClass(type, assignCssClass) {\n                        if (type) {\n                            this._renderer.setElementClass(this._elementRef, this._role + '-' + type, assignCssClass);\n                        }\n                    }\n\n                    /**\n                     * @private\n                     */\n                }], [{\n                    key: \"setRoles\",\n                    value: function setRoles(contentButtonChildren, role) {\n                        var buttons = contentButtonChildren.toArray();\n                        buttons.forEach(function (button) {\n                            button.setRole(role);\n                        });\n                    }\n                }]);\n\n                return Button;\n            })();\n\n            _export(\"Button\", Button);\n\n            _export(\"Button\", Button = __decorate([Directive({\n                selector: 'button,[button]',\n                inputs: ['color']\n            }), __param(3, Attribute('ion-item')), __metadata('design:paramtypes', [typeof (_a = typeof Config !== 'undefined' && Config) === 'function' && _a || Object, typeof (_b = typeof ElementRef !== 'undefined' && ElementRef) === 'function' && _b || Object, typeof (_c = typeof Renderer !== 'undefined' && Renderer) === 'function' && _c || Object, String])], Button));\n            BUTTON_SIZE_ATTRS = ['large', 'small'];\n            BUTTON_STYLE_ATTRS = ['clear', 'outline', 'solid'];\n            BUTTON_SHAPE_ATTRS = ['round', 'fab'];\n            BUTTON_DISPLAY_ATTRS = ['block', 'full'];\n            IGNORE_ATTRS = /_ng|button|left|right/;\n            TEXT = 1;\n            ICON = 2;\n        }\n    };\n});\nSystem.register(\"ionic/components/checkbox/checkbox\", [\"angular2/core\", \"angular2/common\", \"../../util/form\"], function (_export) {\n    /**\n     * The checkbox is no different than the HTML checkbox input, except it's styled differently.\n     *\n     * See the [Angular 2 Docs](https://angular.io/docs/js/latest/api/core/Form-interface.html) for more info on forms and input.\n     *\n     * @property [checked] - whether or not the checkbox is checked (defaults to false)\n     * @property [value] - the value of the checkbox component\n     * @property [disabled] - whether or not the checkbox is disabled or not.\n     *\n     * @usage\n     * ```html\n     * <ion-checkbox checked=\"true\" value=\"isChecked\" ngControl=\"htmlCtrl\">\n     *   HTML5\n     * </ion-checkbox>\n     * ```\n     * @demo /docs/v3/demos/checkbox/\n     * @see {@link /docs/v3/components#checkbox Checkbox Component Docs}\n     */\n    \"use strict\";\n\n    var Component, Optional, ElementRef, Input, Renderer, HostListener, NgControl, Form, __decorate, __metadata, __param, Checkbox, _a, _b, _c, _d;\n\n    var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();\n\n    function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n    return {\n        setters: [function (_angular2Core) {\n            Component = _angular2Core.Component;\n            Optional = _angular2Core.Optional;\n            ElementRef = _angular2Core.ElementRef;\n            Input = _angular2Core.Input;\n            Renderer = _angular2Core.Renderer;\n            HostListener = _angular2Core.HostListener;\n        }, function (_angular2Common) {\n            NgControl = _angular2Common.NgControl;\n        }, function (_utilForm) {\n            Form = _utilForm.Form;\n        }],\n        execute: function () {\n            __decorate = undefined && undefined.__decorate || function (decorators, target, key, desc) {\n                var c = arguments.length,\n                    r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc,\n                    d;\n                if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n                return c > 3 && r && Object.defineProperty(target, key, r), r;\n            };\n\n            __metadata = undefined && undefined.__metadata || function (k, v) {\n                if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n            };\n\n            __param = undefined && undefined.__param || function (paramIndex, decorator) {\n                return function (target, key) {\n                    decorator(target, key, paramIndex);\n                };\n            };\n\n            Checkbox = (function () {\n                function Checkbox(_form, _elementRef, _renderer, ngControl) {\n                    _classCallCheck(this, Checkbox);\n\n                    this._form = _form;\n                    this._elementRef = _elementRef;\n                    this._renderer = _renderer;\n                    this.value = '';\n                    this.checked = false;\n                    this.disabled = false;\n                    _form.register(this);\n                    if (ngControl) {\n                        ngControl.valueAccessor = this;\n                    }\n                }\n\n                /**\n                 * @private\n                 */\n\n                _createClass(Checkbox, [{\n                    key: \"ngOnInit\",\n                    value: function ngOnInit() {\n                        if (!this.id) {\n                            this.id = 'chk-' + this._form.nextId();\n                            this._renderer.setElementAttribute(this._elementRef, 'id', this.id);\n                        }\n                        this.labelId = 'lbl-' + this.id;\n                        this._renderer.setElementAttribute(this._elementRef, 'aria-labelledby', this.labelId);\n                    }\n\n                    /**\n                     * @private\n                     * Toggle the checked state of the checkbox. Calls onChange to pass the updated checked state to the model (Control).\n                     */\n                }, {\n                    key: \"toggle\",\n                    value: function toggle() {\n                        this.checked = !this.checked;\n                    }\n                }, {\n                    key: \"_click\",\n\n                    /**\n                     * @private\n                     */\n                    value: function _click(ev) {\n                        ev.preventDefault();\n                        ev.stopPropagation();\n                        this.toggle();\n                    }\n\n                    /**\n                     * @private\n                     * Angular2 Forms API method called by the model (Control) on change to update\n                     * the checked value.\n                     * https://github.com/angular/angular/blob/master/modules/angular2/src/forms/directives/shared.ts#L34\n                     */\n                }, {\n                    key: \"writeValue\",\n                    value: function writeValue(value) {\n                        this.checked = value;\n                    }\n\n                    /**\n                     * @private\n                     */\n                }, {\n                    key: \"onChange\",\n                    value: function onChange(val) {}\n                    // TODO: figure the whys and the becauses\n\n                    /**\n                     * @private\n                     */\n\n                }, {\n                    key: \"onTouched\",\n                    value: function onTouched(val) {}\n                    // TODO: figure the whys and the becauses\n\n                    /**\n                     * @private\n                     * Angular2 Forms API method called by the view (NgControl) to register the\n                     * onChange event handler that updates the model (Control).\n                     * https://github.com/angular/angular/blob/master/modules/angular2/src/forms/directives/shared.ts#L27\n                     * @param {Function} fn  the onChange event handler.\n                     */\n\n                }, {\n                    key: \"registerOnChange\",\n                    value: function registerOnChange(fn) {\n                        this.onChange = fn;\n                    }\n\n                    /**\n                     * @private\n                     * Angular2 Forms API method called by the the view (NgControl) to register\n                     * the onTouched event handler that marks model (Control) as touched.\n                     * @param {Function} fn  onTouched event handler.\n                     */\n                }, {\n                    key: \"registerOnTouched\",\n                    value: function registerOnTouched(fn) {\n                        this.onTouched = fn;\n                    }\n\n                    /**\n                     * @private\n                     */\n                }, {\n                    key: \"ngOnDestroy\",\n                    value: function ngOnDestroy() {\n                        this._form.deregister(this);\n                    }\n                }, {\n                    key: \"checked\",\n                    get: function get() {\n                        return !!this._checked;\n                    },\n                    set: function set(val) {\n                        this._checked = !!val;\n                        this._renderer.setElementAttribute(this._elementRef, 'aria-checked', this._checked);\n                        this.onChange(this._checked);\n                    }\n                }]);\n\n                return Checkbox;\n            })();\n\n            _export(\"Checkbox\", Checkbox);\n\n            __decorate([Input(), __metadata('design:type', String)], Checkbox.prototype, \"value\", void 0);\n            __decorate([Input(), __metadata('design:type', Object)], Checkbox.prototype, \"checked\", void 0);\n            __decorate([Input(), __metadata('design:type', Boolean)], Checkbox.prototype, \"disabled\", void 0);\n            __decorate([Input(), __metadata('design:type', String)], Checkbox.prototype, \"id\", void 0);\n            __decorate([HostListener('click', ['$event']), __metadata('design:type', Function), __metadata('design:paramtypes', [Object]), __metadata('design:returntype', void 0)], Checkbox.prototype, \"_click\", null);\n            _export(\"Checkbox\", Checkbox = __decorate([Component({\n                selector: 'ion-checkbox',\n                host: {\n                    'role': 'checkbox',\n                    'class': 'item',\n                    'tappable': '',\n                    'tabindex': 0,\n                    '[attr.aria-disabled]': 'disabled'\n                },\n                template: '<div class=\"item-inner\">' + '<div class=\"checkbox-media\" disable-activated>' + '<div class=\"checkbox-icon\"></div>' + '</div>' + '<ion-item-content id=\"{{labelId}}\">' + '<ng-content></ng-content>' + '</ion-item-content>' + '</div>'\n            }), __param(3, Optional()), __metadata('design:paramtypes', [typeof (_a = typeof Form !== 'undefined' && Form) === 'function' && _a || Object, typeof (_b = typeof ElementRef !== 'undefined' && ElementRef) === 'function' && _b || Object, typeof (_c = typeof Renderer !== 'undefined' && Renderer) === 'function' && _c || Object, typeof (_d = typeof NgControl !== 'undefined' && NgControl) === 'function' && _d || Object])], Checkbox));\n        }\n    };\n});\nSystem.register(\"ionic/components/content/content\", [\"angular2/core\", \"../ion\", \"../app/app\", \"../../config/config\", \"../../util/dom\", \"../nav/view-controller\", \"../../animations/scroll-to\"], function (_export) {\n    /**\n     * @name Content\n     * @description\n     * The Content component provides an easy to use content area that can be configured to use Ionic's custom Scroll View, or the built in overflow scrolling of the browser.\n     *\n     * While we recommend using the custom Scroll features in Ionic in most cases, sometimes (for performance reasons) only the browser's native overflow scrolling will suffice, and so we've made it easy to toggle between the Ionic scroll implementation and overflow scrolling.\n     *\n     * You can implement pull-to-refresh with the [Refresher](../../scroll/Refresher) component.\n     *\n     * @usage\n     * ```html\n     * <ion-content id=\"myContent\">\n     *   Add your content here!\n     * </ion-content>\n     * ```\n     *\n     */\n    \"use strict\";\n\n    var Component, ElementRef, Optional, NgZone, Ion, IonicApp, Config, raf, ViewController, ScrollTo, __decorate, __metadata, __param, Content, _a, _b, _c, _d, _e;\n\n    var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();\n\n    var _get = function get(_x, _x2, _x3) { var _again = true; _function: while (_again) { var object = _x, property = _x2, receiver = _x3; _again = false; if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { _x = parent; _x2 = property; _x3 = receiver; _again = true; desc = parent = undefined; continue _function; } } else if (\"value\" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } } };\n\n    function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n    function _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\n    return {\n        setters: [function (_angular2Core) {\n            Component = _angular2Core.Component;\n            ElementRef = _angular2Core.ElementRef;\n            Optional = _angular2Core.Optional;\n            NgZone = _angular2Core.NgZone;\n        }, function (_ion) {\n            Ion = _ion.Ion;\n        }, function (_appApp) {\n            IonicApp = _appApp.IonicApp;\n        }, function (_configConfig) {\n            Config = _configConfig.Config;\n        }, function (_utilDom) {\n            raf = _utilDom.raf;\n        }, function (_navViewController) {\n            ViewController = _navViewController.ViewController;\n        }, function (_animationsScrollTo) {\n            ScrollTo = _animationsScrollTo.ScrollTo;\n        }],\n        execute: function () {\n            __decorate = undefined && undefined.__decorate || function (decorators, target, key, desc) {\n                var c = arguments.length,\n                    r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc,\n                    d;\n                if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n                return c > 3 && r && Object.defineProperty(target, key, r), r;\n            };\n\n            __metadata = undefined && undefined.__metadata || function (k, v) {\n                if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n            };\n\n            __param = undefined && undefined.__param || function (paramIndex, decorator) {\n                return function (target, key) {\n                    decorator(target, key, paramIndex);\n                };\n            };\n\n            Content = (function (_Ion) {\n                _inherits(Content, _Ion);\n\n                /**\n                 * @param {ElementRef} elementRef  A reference to the component's DOM element.\n                 * @param {Config} config  The config object to change content's default settings.\n                 */\n\n                function Content(elementRef, _config, viewCtrl, _app, _zone) {\n                    _classCallCheck(this, Content);\n\n                    _get(Object.getPrototypeOf(Content.prototype), \"constructor\", this).call(this, elementRef, _config);\n                    this._config = _config;\n                    this._app = _app;\n                    this._zone = _zone;\n                    this.scrollPadding = 0;\n                    if (viewCtrl) {\n                        viewCtrl.setContent(this);\n                        viewCtrl.setContentRef(elementRef);\n                    }\n                }\n\n                /**\n                 * @private\n                 */\n\n                _createClass(Content, [{\n                    key: \"ngOnInit\",\n                    value: function ngOnInit() {\n                        _get(Object.getPrototypeOf(Content.prototype), \"ngOnInit\", this).call(this);\n                        var self = this;\n                        self.scrollElement = self.getNativeElement().children[0];\n                        self._scroll = function (ev) {\n                            self._app.setScrolling();\n                        };\n                        if (self._config.get('tapPolyfill') === true) {\n                            self._zone.runOutsideAngular(function () {\n                                self.scrollElement.addEventListener('scroll', self._scroll);\n                            });\n                        }\n                    }\n                }, {\n                    key: \"ngOnDestroy\",\n                    value: function ngOnDestroy() {\n                        this.scrollElement.removeEventListener('scroll', this._scroll);\n                    }\n\n                    /**\n                     * Adds the specified scroll handler to the content' scroll element.\n                     *\n                     * ```ts\n                     * @Page({\n                     *   template: `<ion-content id=\"my-content\"></ion-content>`\n                     * )}\n                     * export class MyPage{\n                     *    constructor(app: IonicApp){\n                     *        this.app = app;\n                     *    }\n                     *   // Need to wait until the component has been initialized\n                     *   ngAfterViewInit() {\n                     *     // Here 'my-content' is the ID of my ion-content\n                     *     this.content = this.app.getComponent('my-content');\n                     *     this.content.addScrollEventListener(this.myScroll);\n                     *   }\n                     *     myScroll() {\n                     *      console.info('They see me scrolling...');\n                     *    }\n                     * }\n                     * ```\n                     * @param {Function} handler  The method you want perform when scrolling\n                     * @returns {Function} A function that removes the scroll handler.\n                     */\n                }, {\n                    key: \"addScrollEventListener\",\n                    value: function addScrollEventListener(handler) {\n                        var _this = this;\n\n                        if (!this.scrollElement) {\n                            return;\n                        }\n                        // ensure we're not creating duplicates\n                        this.scrollElement.removeEventListener('scroll', handler);\n                        this.scrollElement.addEventListener('scroll', handler);\n                        return function () {\n                            _this.scrollElement.removeEventListener('scroll', handler);\n                        };\n                    }\n                }, {\n                    key: \"onScrollEnd\",\n                    value: function onScrollEnd(callback) {\n                        var lastScrollTop = null;\n                        var framesUnchanged = 0;\n                        var scrollElement = this.scrollElement;\n                        function next() {\n                            var currentScrollTop = scrollElement.scrollTop;\n                            if (lastScrollTop !== null) {\n                                if (Math.round(lastScrollTop) === Math.round(currentScrollTop)) {\n                                    framesUnchanged++;\n                                } else {\n                                    framesUnchanged = 0;\n                                }\n                                if (framesUnchanged > 9) {\n                                    return callback();\n                                }\n                            }\n                            lastScrollTop = currentScrollTop;\n                            raf(function () {\n                                raf(next);\n                            });\n                        }\n                        setTimeout(next, 100);\n                    }\n\n                    /**\n                     * Adds the specified touchmove handler to the content's scroll element.\n                     *\n                     * ```ts\n                     * @Page({\n                     *   template: `<ion-content id=\"my-content\"></ion-content>`\n                     * )}\n                     * export class MyPage{\n                     *    constructor(app: IonicApp){\n                     *        this.app = app;\n                     *    }\n                     *   // Need to wait until the component has been initialized\n                     *   ngAfterViewInit() {\n                     *     // Here 'my-content' is the ID of my ion-content\n                     *     this.content = this.app.getComponent('my-content');\n                     *     this.content.addTouchMoveListener(this.touchHandler);\n                     *   }\n                     *    touchHandler() {\n                     *      console.log(\"I'm touching all the magazines!!\");\n                     *    }\n                     * }\n                     * ```\n                     * @param {Function} handler  The method you want to perform when touchmove is firing\n                     * @returns {Function} A function that removes the touchmove handler.\n                     */\n                }, {\n                    key: \"addTouchMoveListener\",\n                    value: function addTouchMoveListener(handler) {\n                        var _this2 = this;\n\n                        if (!this.scrollElement) {\n                            return;\n                        }\n                        // ensure we're not creating duplicates\n                        this.scrollElement.removeEventListener('touchmove', handler);\n                        this.scrollElement.addEventListener('touchmove', handler);\n                        return function () {\n                            _this2.scrollElement.removeEventListener('touchmove', handler);\n                        };\n                    }\n\n                    /**\n                     * Scroll to the specified position.\n                     *\n                     * ```ts\n                     * @Page({\n                     *   template: `<ion-content id=\"my-content\">\n                     *      <button (click)=\"scrollTo()\"> Down 500px</button>\n                     *   </ion-content>`\n                     * )}\n                     * export class MyPage{\n                     *    constructor(app: IonicApp){\n                     *        this.app = app;\n                     *    }\n                     *   // Need to wait until the component has been initialized\n                     *   ngAfterViewInit() {\n                     *     // Here 'my-content' is the ID of my ion-content\n                     *     this.content = this.app.getComponent('my-content');\n                     *   }\n                     *    scrollTo() {\n                     *      this.content.scrollTo(0, 500, 200);\n                     *    }\n                     * }\n                     * ```\n                     * @param {Number} x  The x-value to scroll to.\n                     * @param {Number} y  The y-value to scroll to.\n                     * @param {Number} duration  Duration of the scroll animation in ms.\n                     * @param {TODO} tolerance  TODO\n                     * @returns {Promise} Returns a promise when done\n                     */\n                }, {\n                    key: \"scrollTo\",\n                    value: function scrollTo(x, y, duration, tolerance) {\n                        if (this._scrollTo) {\n                            this._scrollTo.dispose();\n                        }\n                        this._scrollTo = new ScrollTo(this.scrollElement);\n                        return this._scrollTo.start(x, y, duration, tolerance);\n                    }\n\n                    /**\n                     * Scroll to the specified position.\n                     *\n                     * ```ts\n                     * @Page({\n                     *   template: `<ion-content id=\"my-content\">\n                     *      <button (click)=\"scrollTop()\"> Down 500px</button>\n                     *   </ion-content>`\n                     * )}\n                     * export class MyPage{\n                     *    constructor(app: IonicApp){\n                     *        this.app = app;\n                     *    }\n                     *   // Need to wait until the component has been initialized\n                     *   ngAfterViewInit() {\n                     *     // Here 'my-content' is the ID of my ion-content\n                     *     this.content = this.app.getComponent('my-content');\n                     *   }\n                     *    scrollTop() {\n                     *      this.content.scrollTop();\n                     *    }\n                     * }\n                     * ```\n                     * @returns {Promise} Returns a promise when done\n                     */\n                }, {\n                    key: \"scrollToTop\",\n                    value: function scrollToTop() {\n                        if (this._scrollTo) {\n                            this._scrollTo.dispose();\n                        }\n                        this._scrollTo = new ScrollTo(this.scrollElement);\n                        return this._scrollTo.start(0, 0, 300, 0);\n                    }\n\n                    /**\n                     * @private\n                     * Returns the content and scroll elements' dimensions.\n                     * @returns {Object} dimensions  The content and scroll elements' dimensions\n                     * {Number} dimensions.contentHeight  content offsetHeight\n                     * {Number} dimensions.contentTop  content offsetTop\n                     * {Number} dimensions.contentBottom  content offsetTop+offsetHeight\n                     * {Number} dimensions.contentWidth  content offsetWidth\n                     * {Number} dimensions.contentLeft  content offsetLeft\n                     * {Number} dimensions.contentRight  content offsetLeft + offsetWidth\n                     * {Number} dimensions.scrollHeight  scroll scrollHeight\n                     * {Number} dimensions.scrollTop  scroll scrollTop\n                     * {Number} dimensions.scrollBottom  scroll scrollTop + scrollHeight\n                     * {Number} dimensions.scrollWidth  scroll scrollWidth\n                     * {Number} dimensions.scrollLeft  scroll scrollLeft\n                     * {Number} dimensions.scrollRight  scroll scrollLeft + scrollWidth\n                     */\n                }, {\n                    key: \"getDimensions\",\n                    value: function getDimensions() {\n                        var scrollElement = this.scrollElement;\n                        var parentElement = scrollElement.parentElement;\n                        return {\n                            contentHeight: parentElement.offsetHeight,\n                            contentTop: parentElement.offsetTop,\n                            contentBottom: parentElement.offsetTop + parentElement.offsetHeight,\n                            contentWidth: parentElement.offsetWidth,\n                            contentLeft: parentElement.offsetLeft,\n                            contentRight: parentElement.offsetLeft + parentElement.offsetWidth,\n                            scrollHeight: scrollElement.scrollHeight,\n                            scrollTop: scrollElement.scrollTop,\n                            scrollBottom: scrollElement.scrollTop + scrollElement.scrollHeight,\n                            scrollWidth: scrollElement.scrollWidth,\n                            scrollLeft: scrollElement.scrollLeft,\n                            scrollRight: scrollElement.scrollLeft + scrollElement.scrollWidth\n                        };\n                    }\n\n                    /**\n                     * @private\n                     * Adds padding to the bottom of the scroll element when the keyboard is open\n                     * so content below the keyboard can be scrolled into view.\n                     */\n                }, {\n                    key: \"addScrollPadding\",\n                    value: function addScrollPadding(newScrollPadding) {\n                        if (newScrollPadding > this.scrollPadding) {\n                            console.debug('addScrollPadding', newScrollPadding);\n                            this.scrollPadding = newScrollPadding;\n                            this.scrollElement.style.paddingBottom = newScrollPadding + 'px';\n                        }\n                    }\n                }]);\n\n                return Content;\n            })(Ion);\n\n            _export(\"Content\", Content);\n\n            _export(\"Content\", Content = __decorate([Component({\n                selector: 'ion-content',\n                template: '<scroll-content>' + '<ng-content></ng-content>' + '</scroll-content>'\n            }), __param(2, Optional()), __metadata('design:paramtypes', [typeof (_a = typeof ElementRef !== 'undefined' && ElementRef) === 'function' && _a || Object, typeof (_b = typeof Config !== 'undefined' && Config) === 'function' && _b || Object, typeof (_c = typeof ViewController !== 'undefined' && ViewController) === 'function' && _c || Object, typeof (_d = typeof IonicApp !== 'undefined' && IonicApp) === 'function' && _d || Object, typeof (_e = typeof NgZone !== 'undefined' && NgZone) === 'function' && _e || Object])], Content));\n        }\n    };\n});\nSystem.register(\"ionic/components/icon/icon\", [\"angular2/core\", \"../../config/config\"], function (_export) {\n    /**\n     * @name Icon\n     * @description\n     * Icons can be used on their own, or inside of a number of Ionic components.\n     * For a full list of available icons, check out the\n     * [Ionicons resource docs](../../../../resources/ionicons).\n     *\n     * One feature of Ionicons is that when icon names are set, the actual icon\n     * which is rendered can change slightly depending on the mode the app is\n     * running from. For example, by setting the icon name of `alarm`, on iOS the\n     * icon will automatically apply `ios-alarm`, and on Material Design it will\n     * automatically apply `md-alarm`. This allow the developer to write the\n     * markup once, and let Ionic automatically apply the appropriate icon.\n     *\n     * @usage\n     * ```html\n     * <!-- automatically uses the correct \"star\" icon depending on the mode -->\n     * <ion-icon name=\"star\"></ion-icon>\n     *\n     * <!-- explicity set the icon for each mode -->\n     * <ion-icon ios=\"ios-home\" md=\"md-home\"></ion-icon>\n     *\n     * <!-- always use the same icon, no matter what the mode -->\n     * <ion-icon name=\"ios-clock\"></ion-icon>\n     * <ion-icon name=\"twitter-logo\"></ion-icon>\n     * ```\n     *\n     * @property {string} [name] - Use the appropriate icon for the mode.\n     * @property {string} [ios] - Explicitly set the icon to use on iOS.\n     * @property {string} [md] - Explicitly set the icon to use on Android.\n     * @property {boolean} [isActive] - Whether or not the icon has an \"active\"\n     * appearance. On iOS an active icon is filled in or full appearance, and an\n     * inactive icon on iOS will use an outlined version of the icon same icon.\n     * Material Design icons do not change appearance depending if they're active\n     * or not. The `isActive` property is largely used by the tabbar.\n     * @see {@link /docs/v3/components#icons Icon Component Docs}\n     *\n     */\n    \"use strict\";\n\n    var Directive, ElementRef, Renderer, Config, __decorate, __metadata, Icon, _a, _b, _c;\n\n    var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();\n\n    function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n    return {\n        setters: [function (_angular2Core) {\n            Directive = _angular2Core.Directive;\n            ElementRef = _angular2Core.ElementRef;\n            Renderer = _angular2Core.Renderer;\n        }, function (_configConfig) {\n            Config = _configConfig.Config;\n        }],\n        execute: function () {\n            __decorate = undefined && undefined.__decorate || function (decorators, target, key, desc) {\n                var c = arguments.length,\n                    r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc,\n                    d;\n                if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n                return c > 3 && r && Object.defineProperty(target, key, r), r;\n            };\n\n            __metadata = undefined && undefined.__metadata || function (k, v) {\n                if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n            };\n\n            Icon = (function () {\n                function Icon(config, _elementRef, _renderer) {\n                    _classCallCheck(this, Icon);\n\n                    this._elementRef = _elementRef;\n                    this._renderer = _renderer;\n                    this.mode = config.get('iconMode');\n                    this._name = '';\n                    this._ios = '';\n                    this._md = '';\n                    this._css = '';\n                    if (_elementRef.nativeElement.tagName === 'ICON') {\n                        // deprecated warning\n                        console.warn('<icon> has been renamed to <ion-icon>');\n                        console.warn('<ion-icon> requires the \"name\" attribute w/ a value');\n                        console.warn('<icon home></icon> should now be <ion-icon name=\"home\"></ion-icon>');\n                    }\n                }\n\n                _createClass(Icon, [{\n                    key: \"update\",\n\n                    /**\n                     * @private\n                     */\n                    value: function update() {\n                        var css = 'ion-';\n                        if (this._ios && this.mode === 'ios') {\n                            css += this._ios;\n                        } else if (this._md && this.mode === 'md') {\n                            css += this._md;\n                        } else {\n                            css += this._name;\n                        }\n                        if (this.mode == 'ios' && !this.isActive) {\n                            css += '-outline';\n                        }\n                        if (this._css !== css) {\n                            if (this._css) {\n                                this._renderer.setElementClass(this._elementRef, this._css, false);\n                            }\n                            this._css = css;\n                            this._renderer.setElementClass(this._elementRef, css, true);\n                            this._renderer.setElementAttribute(this._elementRef, 'aria-label', css.replace('ion-', '').replace('ios-', '').replace('md-', '').replace('-', ' '));\n                        }\n                    }\n\n                    /**\n                     * @private\n                     */\n                }, {\n                    key: \"addClass\",\n                    value: function addClass(className) {\n                        this._renderer.setElementClass(this._elementRef, className, true);\n                    }\n                }, {\n                    key: \"name\",\n                    get: function get() {\n                        return this._name;\n                    },\n\n                    /**\n                     * @private\n                     */\n                    set: function set(val) {\n                        if (!/^md-|^ios-|-logo$/.test(val)) {\n                            // this does not have one of the defaults\n                            // so lets auto add in the mode prefix for them\n                            val = this.mode + '-' + val;\n                        }\n                        this._name = val;\n                        this.update();\n                    }\n                }, {\n                    key: \"ios\",\n                    get: function get() {\n                        return this._ios;\n                    },\n\n                    /**\n                     * @private\n                     */\n                    set: function set(val) {\n                        this._ios = val;\n                        this.update();\n                    }\n                }, {\n                    key: \"md\",\n                    get: function get() {\n                        return this._md;\n                    },\n\n                    /**\n                     * @private\n                     */\n                    set: function set(val) {\n                        this._md = val;\n                        this.update();\n                    }\n                }, {\n                    key: \"isActive\",\n                    get: function get() {\n                        return this._isActive === undefined || this._isActive === true || this._isActive === 'true';\n                    },\n\n                    /**\n                     * @private\n                     */\n                    set: function set(val) {\n                        this._isActive = val;\n                        this.update();\n                    }\n                }]);\n\n                return Icon;\n            })();\n\n            _export(\"Icon\", Icon);\n\n            _export(\"Icon\", Icon = __decorate([Directive({\n                selector: 'ion-icon,icon',\n                inputs: ['name', 'ios', 'md', 'isActive'],\n                host: {\n                    'role': 'img'\n                }\n            }), __metadata('design:paramtypes', [typeof (_a = typeof Config !== 'undefined' && Config) === 'function' && _a || Object, typeof (_b = typeof ElementRef !== 'undefined' && ElementRef) === 'function' && _b || Object, typeof (_c = typeof Renderer !== 'undefined' && Renderer) === 'function' && _c || Object])], Icon));\n        }\n    };\n});\nSystem.register('ionic/components/item/item-sliding-gesture', ['../../gestures/hammer', '../../gestures/drag-gesture', '../../util/dom'], function (_export) {\n    'use strict';\n\n    var Hammer, DragGesture, CSS, raf, closest, ItemSlidingGesture, DRAG_THRESHOLD;\n\n    var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();\n\n    var _get = function get(_x, _x2, _x3) { var _again = true; _function: while (_again) { var object = _x, property = _x2, receiver = _x3; _again = false; if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { _x = parent; _x2 = property; _x3 = receiver; _again = true; desc = parent = undefined; continue _function; } } else if ('value' in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } } };\n\n    function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\n    function _inherits(subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\n    function isItemActive(ele, isActive) {\n        ele.classList[isActive ? 'add' : 'remove']('active-slide');\n        ele.classList[isActive ? 'add' : 'remove']('active-options');\n    }\n    function preventDefault(ev) {\n        console.debug('sliding item preventDefault', ev.type);\n        ev.preventDefault();\n    }\n    function getItemConatiner(ele) {\n        return closest(ele, 'ion-item-sliding', true);\n    }\n    function isFromOptionButtons(ele) {\n        return !!closest(ele, 'ion-item-options', true);\n    }\n    function getOptionsWidth(itemContainerEle) {\n        var optsEle = itemContainerEle.querySelector('ion-item-options');\n        if (optsEle) {\n            return optsEle.offsetWidth;\n        }\n    }\n    function isActive(itemContainerEle) {\n        return itemContainerEle.classList.contains('active-slide');\n    }\n    return {\n        setters: [function (_gesturesHammer) {\n            Hammer = _gesturesHammer.Hammer;\n        }, function (_gesturesDragGesture) {\n            DragGesture = _gesturesDragGesture.DragGesture;\n        }, function (_utilDom) {\n            CSS = _utilDom.CSS;\n            raf = _utilDom.raf;\n            closest = _utilDom.closest;\n        }],\n        execute: function () {\n            ItemSlidingGesture = (function (_DragGesture) {\n                _inherits(ItemSlidingGesture, _DragGesture);\n\n                function ItemSlidingGesture(list, listEle) {\n                    var _this = this;\n\n                    _classCallCheck(this, ItemSlidingGesture);\n\n                    _get(Object.getPrototypeOf(ItemSlidingGesture.prototype), 'constructor', this).call(this, listEle, {\n                        direction: 'x',\n                        threshold: DRAG_THRESHOLD\n                    });\n                    this.data = {};\n                    this.openItems = 0;\n                    this.list = list;\n                    this.listEle = listEle;\n                    this.canDrag = true;\n                    this.listen();\n                    this.tap = function (ev) {\n                        if (!isFromOptionButtons(ev.target)) {\n                            var didClose = _this.closeOpened();\n                            if (didClose) {\n                                console.debug('tap close sliding item');\n                                preventDefault(ev);\n                            }\n                        }\n                    };\n                    this.mouseOut = function (ev) {\n                        if (ev.target.tagName === 'ION-ITEM-SLIDING') {\n                            console.debug('tap close sliding item');\n                            _this.onDragEnd(ev);\n                        }\n                    };\n                }\n\n                _createClass(ItemSlidingGesture, [{\n                    key: 'onDragStart',\n                    value: function onDragStart(ev) {\n                        var itemContainerEle = getItemConatiner(ev.target);\n                        if (!itemContainerEle) {\n                            console.debug('onDragStart, no itemContainerEle');\n                            return;\n                        }\n                        this.closeOpened(itemContainerEle);\n                        var openAmout = this.getOpenAmount(itemContainerEle);\n                        var itemData = this.get(itemContainerEle);\n                        this.preventDrag = openAmout > 0;\n                        if (this.preventDrag) {\n                            this.closeOpened();\n                            console.debug('onDragStart, preventDefault');\n                            return preventDefault(ev);\n                        }\n                        itemContainerEle.classList.add('active-slide');\n                        this.set(itemContainerEle, 'offsetX', openAmout);\n                        this.set(itemContainerEle, 'startX', ev.center[this.direction]);\n                        this.dragEnded = false;\n                    }\n                }, {\n                    key: 'onDrag',\n                    value: function onDrag(ev) {\n                        var _this2 = this;\n\n                        if (this.dragEnded || this.preventDrag || Math.abs(ev.deltaY) > 30) {\n                            console.debug('onDrag preventDrag, dragEnded:', this.dragEnded, 'preventDrag:', this.preventDrag, 'ev.deltaY:', Math.abs(ev.deltaY));\n                            this.preventDrag = true;\n                            return;\n                        }\n                        var itemContainerEle = getItemConatiner(ev.target);\n                        if (!itemContainerEle || !isActive(itemContainerEle)) {\n                            console.debug('onDrag, no itemContainerEle');\n                            return;\n                        }\n                        var itemData = this.get(itemContainerEle);\n                        if (!itemData.optsWidth) {\n                            itemData.optsWidth = getOptionsWidth(itemContainerEle);\n                            if (!itemData.optsWidth) {\n                                console.debug('onDrag, no optsWidth');\n                                return;\n                            }\n                        }\n                        var x = ev.center[this.direction];\n                        var delta = x - itemData.startX;\n                        var newX = Math.max(0, itemData.offsetX - delta);\n                        if (newX > itemData.optsWidth) {\n                            // Calculate the new X position, capped at the top of the buttons\n                            newX = -Math.min(-itemData.optsWidth, -itemData.optsWidth + (delta + itemData.optsWidth) * 0.4);\n                        }\n                        if (newX > 5 && ev.srcEvent.type.indexOf('mouse') > -1 && !itemData.hasMouseOut) {\n                            itemContainerEle.addEventListener('mouseout', this.mouseOut);\n                            itemData.hasMouseOut = true;\n                        }\n                        raf(function () {\n                            if (!_this2.dragEnded && !_this2.preventDrag) {\n                                isItemActive(itemContainerEle, true);\n                                _this2.open(itemContainerEle, newX, false);\n                            }\n                        });\n                    }\n                }, {\n                    key: 'onDragEnd',\n                    value: function onDragEnd(ev) {\n                        var _this3 = this;\n\n                        this.preventDrag = false;\n                        this.dragEnded = true;\n                        var itemContainerEle = getItemConatiner(ev.target);\n                        if (!itemContainerEle || !isActive(itemContainerEle)) {\n                            console.debug('onDragEnd, no itemContainerEle');\n                            return;\n                        }\n                        // If we are currently dragging, we want to snap back into place\n                        // The final resting point X will be the width of the exposed buttons\n                        var itemData = this.get(itemContainerEle);\n                        var restingPoint = itemData.optsWidth;\n                        // Check if the drag didn't clear the buttons mid-point\n                        // and we aren't moving fast enough to swipe open\n                        if (this.getOpenAmount(itemContainerEle) < restingPoint / 2) {\n                            // If we are going left but too slow, or going right, go back to resting\n                            if (ev.direction & Hammer.DIRECTION_RIGHT || Math.abs(ev.velocityX) < 0.3) {\n                                restingPoint = 0;\n                            }\n                        }\n                        itemContainerEle.removeEventListener('mouseout', this.mouseOut);\n                        itemData.hasMouseOut = false;\n                        raf(function () {\n                            _this3.open(itemContainerEle, restingPoint, true);\n                        });\n                    }\n                }, {\n                    key: 'closeOpened',\n                    value: function closeOpened(doNotCloseEle) {\n                        var didClose = false;\n                        if (this.openItems) {\n                            var openItemElements = this.listEle.querySelectorAll('.active-slide');\n                            for (var i = 0; i < openItemElements.length; i++) {\n                                if (openItemElements[i] !== doNotCloseEle) {\n                                    this.open(openItemElements[i], 0, true);\n                                    didClose = true;\n                                }\n                            }\n                        }\n                        return didClose;\n                    }\n                }, {\n                    key: 'open',\n                    value: function open(itemContainerEle, openAmount, isFinal) {\n                        var _this4 = this;\n\n                        var slidingEle = itemContainerEle.querySelector('ion-item,[ion-item]');\n                        if (!slidingEle) {\n                            console.debug('open, no slidingEle, openAmount:', openAmount);\n                            return;\n                        }\n                        this.set(itemContainerEle, 'openAmount', openAmount);\n                        clearTimeout(this.get(itemContainerEle).timerId);\n                        if (openAmount) {\n                            this.openItems++;\n                        } else {\n                            var timerId = setTimeout(function () {\n                                if (slidingEle.style[CSS.transform] === '') {\n                                    isItemActive(itemContainerEle, false);\n                                    _this4.openItems--;\n                                }\n                            }, 400);\n                            this.set(itemContainerEle, 'timerId', timerId);\n                        }\n                        slidingEle.style[CSS.transition] = isFinal ? '' : 'none';\n                        slidingEle.style[CSS.transform] = openAmount ? 'translate3d(' + -openAmount + 'px,0,0)' : '';\n                        if (isFinal) {\n                            if (openAmount) {\n                                isItemActive(itemContainerEle, true);\n                                this.on('tap', this.tap);\n                            } else {\n                                this.off('tap', this.tap);\n                            }\n                        }\n                    }\n                }, {\n                    key: 'getOpenAmount',\n                    value: function getOpenAmount(itemContainerEle) {\n                        return this.get(itemContainerEle).openAmount || 0;\n                    }\n                }, {\n                    key: 'get',\n                    value: function get(itemContainerEle) {\n                        return this.data[itemContainerEle && itemContainerEle.$ionSlide] || {};\n                    }\n                }, {\n                    key: 'set',\n                    value: function set(itemContainerEle, key, value) {\n                        if (!this.data[itemContainerEle.$ionSlide]) {\n                            this.data[itemContainerEle.$ionSlide] = {};\n                        }\n                        this.data[itemContainerEle.$ionSlide][key] = value;\n                    }\n                }, {\n                    key: 'unlisten',\n                    value: function unlisten() {\n                        _get(Object.getPrototypeOf(ItemSlidingGesture.prototype), 'unlisten', this).call(this);\n                        this.listEle = null;\n                    }\n                }]);\n\n                return ItemSlidingGesture;\n            })(DragGesture);\n\n            _export('ItemSlidingGesture', ItemSlidingGesture);\n\n            DRAG_THRESHOLD = 20;\n        }\n    };\n});\nSystem.register(\"ionic/components/item/item-sliding\", [\"angular2/core\", \"../list/list\"], function (_export) {\n    /**\n     * @name ItemSliding\n     *\n     * @description\n     * Creates a list-item that can easily be swiped, deleted, reordered, edited, and more.\n     *\n     * @usage\n     * ```html\n     * <ion-list>\n     *   <ion-item-sliding *ngFor=\"#item of items\">\n     *     <ion-item (click)=\"itemTapped(item)\">\n     *       {{item.title}}\n     *     </ion-item>\n     *     <ion-item-options>\n     *       <button (click)=\"favorite(item)\">Favorite</button>\n     *       <button (click)=\"share(item)\">Share</button>\n     *     </ion-item-options>\n     *   </ion-item-sliding>\n     * </ion-list>\n     * ```\n     * @see {@link /docs/v3/components#lists List Component Docs}\n     * @see {@link ../../list/List List API Docs}\n     */\n    \"use strict\";\n\n    var Component, ElementRef, Optional, List, __decorate, __metadata, __param, ItemSliding, slideIds, _a, _b;\n\n    var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();\n\n    function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n    return {\n        setters: [function (_angular2Core) {\n            Component = _angular2Core.Component;\n            ElementRef = _angular2Core.ElementRef;\n            Optional = _angular2Core.Optional;\n        }, function (_listList) {\n            List = _listList.List;\n        }],\n        execute: function () {\n            __decorate = undefined && undefined.__decorate || function (decorators, target, key, desc) {\n                var c = arguments.length,\n                    r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc,\n                    d;\n                if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n                return c > 3 && r && Object.defineProperty(target, key, r), r;\n            };\n\n            __metadata = undefined && undefined.__metadata || function (k, v) {\n                if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n            };\n\n            __param = undefined && undefined.__param || function (paramIndex, decorator) {\n                return function (target, key) {\n                    decorator(target, key, paramIndex);\n                };\n            };\n\n            ItemSliding = (function () {\n                function ItemSliding(_list, elementRef) {\n                    _classCallCheck(this, ItemSliding);\n\n                    this._list = _list;\n                    _list.enableSlidingItems(true);\n                    elementRef.nativeElement.$ionSlide = ++slideIds;\n                }\n\n                /**\n                 * @private\n                 */\n\n                _createClass(ItemSliding, [{\n                    key: \"close\",\n                    value: function close() {\n                        this._list.closeSlidingItems();\n                    }\n                }]);\n\n                return ItemSliding;\n            })();\n\n            _export(\"ItemSliding\", ItemSliding);\n\n            _export(\"ItemSliding\", ItemSliding = __decorate([Component({\n                selector: 'ion-item-sliding',\n                template: '<ng-content select=\"ion-item,[ion-item]\"></ng-content>' + '<ng-content select=\"ion-item-options\"></ng-content>'\n            }), __param(0, Optional()), __metadata('design:paramtypes', [typeof (_a = typeof List !== 'undefined' && List) === 'function' && _a || Object, typeof (_b = typeof ElementRef !== 'undefined' && ElementRef) === 'function' && _b || Object])], ItemSliding));\n            slideIds = 0;\n        }\n    };\n});\nSystem.register(\"ionic/components/item/item\", [\"angular2/core\", \"../button/button\", \"../icon/icon\"], function (_export) {\n    /**\n     * @name Item\n     * @description\n     * Creates a list-item that can easily be swiped, deleted, reordered, edited, and more.\n     *\n     * There are three common ways to use an item:\n     * - Use `<ion-item>` for something that is only non-clickable text.\n     * - Use `<button ion-item>` for something that can be clicked/tapped. Typically this element will also have a `(click)` handler.\n     * - Use `<a ion-item>` for when the item needs to contain a `href`.\n     *\n     * By default, `<button ion-item>` and `<a ion-item>` will receive a right arrow icon on iOS to signal that tapping the item will reveal more information.\n     * To hide this icon, add the `detail-none` attribute to the item (eg: `<button ion-item detail-none>`). To add the icon when it is not displayed by default,\n     * add the `detail-push` attribute (eg: `<ion-item detail-push>`).\n     *\n     * To break an item up into multiple columns, add multiple `<ion-item-content>` components inside of the item. By default,\n     * this component will automatically be added inside of an `<ion-item>`, giving it a single column.\n     *\n     *\n     * @usage\n     * ```html\n     *\n     * <ion-list>\n     *\n     *   // default item\n     *   <ion-item>\n     *     {{item.title}}\n     *   </ion-item>\n     *\n     *   // multiple item-content containers\n     *   <ion-item>\n     *     <ion-item-content>First Column</ion-item-content>\n     *     <ion-item-content>Second Column</ion-item-content>\n     *     <ion-item-content>Third Column</ion-item-content>\n     *   </ion-item>\n     *\n     * </ion-list>\n     *\n     *  ```\n     * @see {@link /docs/v3/components#lists List Component Docs}\n     * @see {@link ../../list/List List API Docs}\n     */\n    \"use strict\";\n\n    var Component, ContentChildren, Button, Icon, __decorate, __metadata, Item;\n\n    var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();\n\n    function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n    return {\n        setters: [function (_angular2Core) {\n            Component = _angular2Core.Component;\n            ContentChildren = _angular2Core.ContentChildren;\n        }, function (_buttonButton) {\n            Button = _buttonButton.Button;\n        }, function (_iconIcon) {\n            Icon = _iconIcon.Icon;\n        }],\n        execute: function () {\n            __decorate = undefined && undefined.__decorate || function (decorators, target, key, desc) {\n                var c = arguments.length,\n                    r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc,\n                    d;\n                if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n                return c > 3 && r && Object.defineProperty(target, key, r), r;\n            };\n\n            __metadata = undefined && undefined.__metadata || function (k, v) {\n                if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n            };\n\n            Item = (function () {\n                function Item() {\n                    _classCallCheck(this, Item);\n                }\n\n                _createClass(Item, [{\n                    key: \"_buttons\",\n                    set: function set(buttons) {\n                        buttons.toArray().forEach(function (button) {\n                            if (!button.isItem) {\n                                button.addClass('item-button');\n                            }\n                        });\n                    }\n                }, {\n                    key: \"_icons\",\n                    set: function set(icons) {\n                        icons.toArray().forEach(function (icon) {\n                            icon.addClass('item-icon');\n                        });\n                    }\n                }]);\n\n                return Item;\n            })();\n\n            _export(\"Item\", Item);\n\n            __decorate([ContentChildren(Button), __metadata('design:type', Object), __metadata('design:paramtypes', [Object])], Item.prototype, \"_buttons\", null);\n            __decorate([ContentChildren(Icon), __metadata('design:type', Object), __metadata('design:paramtypes', [Object])], Item.prototype, \"_icons\", null);\n            _export(\"Item\", Item = __decorate([Component({\n                selector: 'ion-item,[ion-item]',\n                template: '<ng-content select=\"[item-left]\"></ng-content>' + '<div class=\"item-inner\">' + '<ng-content select=\"ion-item-content,[item-content]\"></ng-content>' + '<ion-item-content cnt>' + '<ng-content></ng-content>' + '</ion-item-content>' + '<ng-content select=\"[item-right]\"></ng-content>' + '</div>',\n                host: {\n                    'class': 'item'\n                }\n            }), __metadata('design:paramtypes', [])], Item));\n        }\n    };\n});\nSystem.register(\"ionic/components/label/label\", [\"angular2/core\", \"../../util/form\"], function (_export) {\n    /**\n     * @name Label\n     * @description\n     * Labels describe the data that the user should enter in to an input element.\n     * @usage\n     * ```html\n     * <ion-input>\n     *   <ion-label>Username</ion-label>\n     *   <input type=\"text\" value=\"\">\n     * </ion-input>\n     * ```\n     *\n     * @demo /docs/v3/demos/label/\n     * @see {@link ../../../../components#inputs Input Component Docs}\n     * @see {@link ../Input Input API Docs}\n     *\n     */\n    \"use strict\";\n\n    var Directive, ElementRef, Renderer, Form, __decorate, __metadata, Label, _a, _b, _c;\n\n    var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();\n\n    function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n    return {\n        setters: [function (_angular2Core) {\n            Directive = _angular2Core.Directive;\n            ElementRef = _angular2Core.ElementRef;\n            Renderer = _angular2Core.Renderer;\n        }, function (_utilForm) {\n            Form = _utilForm.Form;\n        }],\n        execute: function () {\n            __decorate = undefined && undefined.__decorate || function (decorators, target, key, desc) {\n                var c = arguments.length,\n                    r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc,\n                    d;\n                if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n                return c > 3 && r && Object.defineProperty(target, key, r), r;\n            };\n\n            __metadata = undefined && undefined.__metadata || function (k, v) {\n                if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n            };\n\n            Label = (function () {\n                function Label(_form, _elementRef, _renderer) {\n                    _classCallCheck(this, Label);\n\n                    this._form = _form;\n                    this._elementRef = _elementRef;\n                    this._renderer = _renderer;\n                }\n\n                /**\n                 * @private\n                 */\n\n                _createClass(Label, [{\n                    key: \"ngOnInit\",\n                    value: function ngOnInit() {\n                        if (!this.id) {\n                            this.id = 'lbl-' + this._form.nextId();\n                        }\n                    }\n\n                    /**\n                     * @private\n                     */\n                }, {\n                    key: \"addClass\",\n                    value: function addClass(className) {\n                        this._renderer.setElementClass(this._elementRef, className, true);\n                    }\n                }]);\n\n                return Label;\n            })();\n\n            _export(\"Label\", Label);\n\n            _export(\"Label\", Label = __decorate([Directive({\n                selector: 'ion-label',\n                inputs: ['id'],\n                host: {\n                    '[attr.id]': 'id'\n                }\n            }), __metadata('design:paramtypes', [typeof (_a = typeof Form !== 'undefined' && Form) === 'function' && _a || Object, typeof (_b = typeof ElementRef !== 'undefined' && ElementRef) === 'function' && _b || Object, typeof (_c = typeof Renderer !== 'undefined' && Renderer) === 'function' && _c || Object])], Label));\n        }\n    };\n});\nSystem.register(\"ionic/components/list/list\", [\"angular2/core\", \"../ion\", \"../../config/config\", \"./virtual\", \"../item/item-sliding-gesture\", \"../../util\"], function (_export) {\n    /**\n     * The List is a widely used interface element in almost any mobile app, and can include\n     * content ranging from basic text all the way to buttons, toggles, icons, and thumbnails.\n     *\n     * Both the list, which contains items, and the list items themselves can be any HTML\n     * element.\n     *\n     * Using the List and Item components make it easy to support various\n     * interaction modes such as swipe to edit, drag to reorder, and removing items.\n     * @demo /docs/v3/demos/list/\n     * @see {@link /docs/v3/components#lists List Component Docs}\n     *\n     *\n     */\n    \"use strict\";\n\n    var Directive, ElementRef, Renderer, Attribute, NgZone, Ion, Config, ListVirtualScroll, ItemSlidingGesture, isDefined, __decorate, __metadata, __param, List, ListHeader, _a, _b, _c, _d, _e;\n\n    var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();\n\n    var _get = function get(_x, _x2, _x3) { var _again = true; _function: while (_again) { var object = _x, property = _x2, receiver = _x3; _again = false; if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { _x = parent; _x2 = property; _x3 = receiver; _again = true; desc = parent = undefined; continue _function; } } else if (\"value\" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } } };\n\n    function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n    function _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\n    return {\n        setters: [function (_angular2Core) {\n            Directive = _angular2Core.Directive;\n            ElementRef = _angular2Core.ElementRef;\n            Renderer = _angular2Core.Renderer;\n            Attribute = _angular2Core.Attribute;\n            NgZone = _angular2Core.NgZone;\n        }, function (_ion) {\n            Ion = _ion.Ion;\n        }, function (_configConfig) {\n            Config = _configConfig.Config;\n        }, function (_virtual) {\n            ListVirtualScroll = _virtual.ListVirtualScroll;\n        }, function (_itemItemSlidingGesture) {\n            ItemSlidingGesture = _itemItemSlidingGesture.ItemSlidingGesture;\n        }, function (_util) {\n            isDefined = _util.isDefined;\n        }],\n        execute: function () {\n            __decorate = undefined && undefined.__decorate || function (decorators, target, key, desc) {\n                var c = arguments.length,\n                    r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc,\n                    d;\n                if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n                return c > 3 && r && Object.defineProperty(target, key, r), r;\n            };\n\n            __metadata = undefined && undefined.__metadata || function (k, v) {\n                if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n            };\n\n            __param = undefined && undefined.__param || function (paramIndex, decorator) {\n                return function (target, key) {\n                    decorator(target, key, paramIndex);\n                };\n            };\n\n            List = (function (_Ion) {\n                _inherits(List, _Ion);\n\n                function List(elementRef, config, zone) {\n                    _classCallCheck(this, List);\n\n                    _get(Object.getPrototypeOf(List.prototype), \"constructor\", this).call(this, elementRef, config);\n                    this.zone = zone;\n                    this.ele = elementRef.nativeElement;\n                    this._enableSliding = false;\n                }\n\n                /**\n                 * @private\n                 */\n\n                _createClass(List, [{\n                    key: \"ngOnInit\",\n                    value: function ngOnInit() {\n                        _get(Object.getPrototypeOf(List.prototype), \"ngOnInit\", this).call(this);\n                        if (isDefined(this.virtual)) {\n                            console.log('Content', this.content);\n                            console.log('Virtual?', this.virtual);\n                            console.log('Items?', this.items.length, 'of \\'em');\n                            this._initVirtualScrolling();\n                        }\n                    }\n\n                    /**\n                     * @private\n                     */\n                }, {\n                    key: \"ngOnDestroy\",\n                    value: function ngOnDestroy() {\n                        this.ele = null;\n                        this.slidingGesture && this.slidingGesture.unlisten();\n                    }\n\n                    /**\n                     * @private\n                     */\n                }, {\n                    key: \"_initVirtualScrolling\",\n                    value: function _initVirtualScrolling() {\n                        if (!this.content) {\n                            return;\n                        }\n                        this._virtualScrollingManager = new ListVirtualScroll(this);\n                    }\n\n                    /**\n                     * @private\n                     */\n                }, {\n                    key: \"setItemTemplate\",\n                    value: function setItemTemplate(item) {\n                        this.itemTemplate = item;\n                    }\n\n                    /**\n                     * Enable sliding items if your page has them\n                     *\n                     * ```ts\n                     * export class MyClass {\n                     *    constructor(app: IonicApp){\n                     *      this.app = app;\n                     *      this.list = this.app.getComponent('my-list');\n                     *    }\n                     *    stopSliding(){\n                     *      this.list.enableSlidingItems(false);\n                     *    }\n                     * }\n                     * ```\n                     * @param {Boolean} shouldEnable whether the item-sliding should be enabled or not\n                     */\n                }, {\n                    key: \"enableSlidingItems\",\n                    value: function enableSlidingItems(shouldEnable) {\n                        var _this = this;\n\n                        if (this._enableSliding !== shouldEnable) {\n                            this._enableSliding = shouldEnable;\n                            if (shouldEnable) {\n                                console.debug('enableSlidingItems');\n                                this.zone.runOutsideAngular(function () {\n                                    setTimeout(function () {\n                                        _this.slidingGesture = new ItemSlidingGesture(_this, _this.ele);\n                                    });\n                                });\n                            } else {\n                                this.slidingGesture && this.slidingGesture.unlisten();\n                            }\n                        }\n                    }\n\n                    /**\n                     * Enable sliding items if your page has\n                     *\n                     * ```ts\n                     * export class MyClass {\n                     *    constructor(app: IonicApp){\n                     *      this.app = app;\n                     *      this.list = this.app.getComponent('my-list');\n                     *    }\n                     *    // Here we have some method that will close the items\n                     *    // when called\n                     *    closeItmes(){\n                     *      this.list.closeSlidingItems();\n                     *    }\n                     * }\n                     * ```\n                     */\n                }, {\n                    key: \"closeSlidingItems\",\n                    value: function closeSlidingItems() {\n                        this.slidingGesture && this.slidingGesture.closeOpened();\n                    }\n                }]);\n\n                return List;\n            })(Ion);\n\n            _export(\"List\", List);\n\n            _export(\"List\", List = __decorate([Directive({\n                selector: 'ion-list',\n                inputs: ['items', 'virtual', 'content']\n            }), __metadata('design:paramtypes', [typeof (_a = typeof ElementRef !== 'undefined' && ElementRef) === 'function' && _a || Object, typeof (_b = typeof Config !== 'undefined' && Config) === 'function' && _b || Object, typeof (_c = typeof NgZone !== 'undefined' && NgZone) === 'function' && _c || Object])], List));\n            /**\n             * @private\n             */\n\n            ListHeader = (function () {\n                function ListHeader(_renderer, _elementRef, id) {\n                    _classCallCheck(this, ListHeader);\n\n                    this._renderer = _renderer;\n                    this._elementRef = _elementRef;\n                    this._id = id;\n                }\n\n                _createClass(ListHeader, [{\n                    key: \"id\",\n                    get: function get() {\n                        return this._id;\n                    },\n                    set: function set(val) {\n                        this._id = val;\n                        this._renderer.setElementAttribute(this._elementRef, 'id', val);\n                    }\n                }]);\n\n                return ListHeader;\n            })();\n\n            _export(\"ListHeader\", ListHeader);\n\n            _export(\"ListHeader\", ListHeader = __decorate([Directive({\n                selector: 'ion-list-header'\n            }), __param(2, Attribute('id')), __metadata('design:paramtypes', [typeof (_d = typeof Renderer !== 'undefined' && Renderer) === 'function' && _d || Object, typeof (_e = typeof ElementRef !== 'undefined' && ElementRef) === 'function' && _e || Object, String])], ListHeader));\n        }\n    };\n});\nSystem.register('ionic/components/list/virtual', [], function (_export) {\n    'use strict';\n\n    var ListVirtualScroll, VirtualItemRef;\n\n    var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();\n\n    function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\n    return {\n        setters: [],\n        execute: function () {\n            ListVirtualScroll = (function () {\n                function ListVirtualScroll(list) {\n                    var _this = this;\n\n                    _classCallCheck(this, ListVirtualScroll);\n\n                    this.list = list;\n                    this.content = this.list.content;\n                    this.viewportHeight = this.content.height();\n                    this.viewContainer = this.list.itemTemplate.viewContainer;\n                    this.itemHeight = 60;\n                    this.shownItems = {};\n                    this.enteringItems = [];\n                    this.leavingItems = [];\n                    // Compute the initial sizes\n                    setTimeout(function () {\n                        _this.resize();\n                        // Simulate the first event to start layout\n                        _this._handleVirtualScroll({\n                            target: _this.content.scrollElement\n                        });\n                    });\n                    this.content.addScrollEventListener(function (event) {\n                        _this._handleVirtualScroll(event);\n                    });\n                }\n\n                _createClass(ListVirtualScroll, [{\n                    key: 'resize',\n                    value: function resize() {\n                        this.viewportHeight = this.content.height();\n                        this.viewportScrollHeight = this.content.scrollElement.scrollHeight;\n                        this.virtualHeight = this.list.items.length * this.itemHeight;\n                        this.itemsPerScreen = this.viewportHeight / this.itemHeight;\n                        console.log('VIRTUAL: resize(viewportHeight:', this.viewportHeight, 'viewportScrollHeight:', this.viewportScrollHeight, 'virtualHeight:', this.virtualHeight, ', itemsPerScreen:', this.itemsPerScreen, ')');\n                    }\n                }, {\n                    key: '_handleVirtualScroll',\n                    value: function _handleVirtualScroll(event) {\n                        var item = undefined;\n                        var shownItemRef = undefined;\n                        var st = event.target.scrollTop;\n                        var sh = event.target.scrollHeight;\n                        var topIndex = Math.floor(st / this.itemHeight);\n                        var bottomIndex = Math.floor(st / this.itemHeight + this.itemsPerScreen);\n                        var items = this.list.items;\n                        // Key iterate the shown items map\n                        // and compare the index to our index range,\n                        // pushing the items to remove to our leaving\n                        // list if they're ouside this range.\n                        for (var i in this.shownItems) {\n                            if (i < topIndex || i > bottomIndex) {\n                                this.leavingItems.push(this.shownItems[i]);\n                                delete this.shownItems[i];\n                            }\n                        }\n                        var realIndex = 0;\n                        // Iterate the set of items that will be rendered, using the\n                        // index from the actual items list as the map for the\n                        // virtual items we draw\n                        for (var i = topIndex, _realIndex = 0; i < bottomIndex && i < items.length; i++, _realIndex++) {\n                            item = items[i];\n                            console.log('Drawing item', i, item.title);\n                            shownItemRef = this.shownItems[i];\n                            // Is this a new item?\n                            if (!shownItemRef) {\n                                var itemView = this.viewContainer.create(this.list.itemTemplate.protoViewRef, _realIndex);\n                                itemView.setLocal('\\$implicit', item);\n                                itemView.setLocal('\\$item', item);\n                                shownItemRef = new VirtualItemRef(item, i, _realIndex, itemView);\n                                this.shownItems[i] = shownItemRef;\n                                this.enteringItems.push(shownItemRef);\n                            }\n                        }\n                        while (this.leavingItems.length) {\n                            var itemRef = this.leavingItems.pop();\n                            console.log('Removing item', itemRef.item, itemRef.realIndex);\n                            this.viewContainer.remove(itemRef.realIndex);\n                        }\n                        console.log('VIRTUAL SCROLL: scroll(scrollTop:', st, 'topIndex:', topIndex, 'bottomIndex:', bottomIndex, ')');\n                        console.log('Container has', this.list.getNativeElement().children.length, 'children');\n                    }\n                }, {\n                    key: 'cellAtIndex',\n                    value: function cellAtIndex(index) {}\n                }]);\n\n                return ListVirtualScroll;\n            })();\n\n            _export('ListVirtualScroll', ListVirtualScroll);\n\n            VirtualItemRef = function VirtualItemRef(item, index, realIndex, view) {\n                _classCallCheck(this, VirtualItemRef);\n\n                this.item = item;\n                this.index = index;\n                this.realIndex = realIndex;\n                this.view = view;\n            };\n        }\n    };\n});\nSystem.register(\"ionic/components/menu/menu-close\", [\"angular2/core\", \"../app/app\", \"./menu\"], function (_export) {\n    /**\n    * @name MenuClose\n    * @description\n    * Place `menuClose` on a button to automatically close an open menu. Note that the menu's id must be either\n    * `leftMenu` or `rightMenu`\n    *\n    * @usage\n     * ```html\n     * <ion-menu [content]=\"mycontent\" id=\"leftMenu\">\n     *   <ion-content>\n     *     <ion-list>\n     *     <ion-item menuClose>Close the menu</ion-item>\n     *     </ion-list>\n     *   </ion-content>\n     * </ion-menu>\n     *\n     * <ion-nav #mycontent [root]=\"rootPage\"></ion-nav>\n     * ```\n    * @demo /docs/v3/demos/menu/\n    * @see {@link /docs/v3/components#menus Menu Component Docs}\n    * @see {@link ../../menu/Menu Menu API Docs}\n    */\n    \"use strict\";\n\n    var Directive, IonicApp, Menu, __decorate, __metadata, MenuClose, _a;\n\n    var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();\n\n    function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n    return {\n        setters: [function (_angular2Core) {\n            Directive = _angular2Core.Directive;\n        }, function (_appApp) {\n            IonicApp = _appApp.IonicApp;\n        }, function (_menu) {\n            Menu = _menu.Menu;\n        }],\n        execute: function () {\n            __decorate = undefined && undefined.__decorate || function (decorators, target, key, desc) {\n                var c = arguments.length,\n                    r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc,\n                    d;\n                if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n                return c > 3 && r && Object.defineProperty(target, key, r), r;\n            };\n\n            __metadata = undefined && undefined.__metadata || function (k, v) {\n                if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n            };\n\n            MenuClose = (function () {\n                function MenuClose(_app) {\n                    _classCallCheck(this, MenuClose);\n\n                    this._app = _app;\n                }\n\n                /**\n                * @private\n                */\n\n                _createClass(MenuClose, [{\n                    key: \"close\",\n                    value: function close() {\n                        var menu = Menu.getById(this._app, this.menuClose);\n                        menu && menu.close();\n                    }\n                }]);\n\n                return MenuClose;\n            })();\n\n            _export(\"MenuClose\", MenuClose);\n\n            _export(\"MenuClose\", MenuClose = __decorate([Directive({\n                selector: '[menuClose]',\n                inputs: ['menuClose'],\n                host: {\n                    '(click)': 'close()'\n                }\n            }), __metadata('design:paramtypes', [typeof (_a = typeof IonicApp !== 'undefined' && IonicApp) === 'function' && _a || Object])], MenuClose));\n        }\n    };\n});\nSystem.register('ionic/components/menu/menu-gestures', ['../../gestures/slide-edge-gesture', '../../util'], function (_export) {\n    'use strict';\n\n    var SlideEdgeGesture, util, MenuContentGesture, TargetGesture, LeftMenuGesture, RightMenuGesture;\n\n    var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();\n\n    var _get = function get(_x2, _x3, _x4) { var _again = true; _function: while (_again) { var object = _x2, property = _x3, receiver = _x4; _again = false; if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { _x2 = parent; _x3 = property; _x4 = receiver; _again = true; desc = parent = undefined; continue _function; } } else if ('value' in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } } };\n\n    function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\n    function _inherits(subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\n    return {\n        setters: [function (_gesturesSlideEdgeGesture) {\n            SlideEdgeGesture = _gesturesSlideEdgeGesture.SlideEdgeGesture;\n        }, function (_util) {\n            util = _util;\n        }],\n        execute: function () {\n            MenuContentGesture = (function (_SlideEdgeGesture) {\n                _inherits(MenuContentGesture, _SlideEdgeGesture);\n\n                function MenuContentGesture(menu, targetEl) {\n                    var options = arguments.length <= 2 || arguments[2] === undefined ? {} : arguments[2];\n\n                    _classCallCheck(this, MenuContentGesture);\n\n                    _get(Object.getPrototypeOf(MenuContentGesture.prototype), 'constructor', this).call(this, targetEl, util.extend({\n                        direction: menu.side === 'left' || menu.side === 'right' ? 'x' : 'y',\n                        edge: menu.side,\n                        threshold: 75\n                    }, options));\n                    this.menu = menu;\n                    this.listen();\n                }\n\n                /**\n                 * Support dragging the target menu as well as the content.\n                 */\n\n                _createClass(MenuContentGesture, [{\n                    key: 'canStart',\n                    value: function canStart(ev) {\n                        return this.menu.isOpen && this.menu.isEnabled ? true : _get(Object.getPrototypeOf(MenuContentGesture.prototype), 'canStart', this).call(this, ev);\n                    }\n\n                    // Set CSS, then wait one frame for it to apply before sliding starts\n                }, {\n                    key: 'onSlideBeforeStart',\n                    value: function onSlideBeforeStart(slide, ev) {\n                        this.menu.setProgressStart();\n                    }\n                }, {\n                    key: 'onSlide',\n                    value: function onSlide(slide, ev) {\n                        this.menu.setProgess(slide.distance / slide.max);\n                    }\n                }, {\n                    key: 'onSlideEnd',\n                    value: function onSlideEnd(slide, ev) {\n                        var shouldComplete = Math.abs(ev.velocityX) > 0.2 || Math.abs(slide.delta) > Math.abs(slide.max) * 0.5;\n                        this.menu.setProgressEnd(shouldComplete);\n                    }\n                }, {\n                    key: 'getElementStartPos',\n                    value: function getElementStartPos(slide, ev) {\n                        return this.menu.isOpen ? slide.max : slide.min;\n                    }\n                }, {\n                    key: 'getSlideBoundaries',\n                    value: function getSlideBoundaries() {\n                        return {\n                            min: 0,\n                            max: this.menu.width()\n                        };\n                    }\n                }]);\n\n                return MenuContentGesture;\n            })(SlideEdgeGesture);\n\n            _export('MenuContentGesture', MenuContentGesture);\n\n            TargetGesture = (function (_MenuContentGesture) {\n                _inherits(TargetGesture, _MenuContentGesture);\n\n                function TargetGesture(menu) {\n                    _classCallCheck(this, TargetGesture);\n\n                    _get(Object.getPrototypeOf(TargetGesture.prototype), 'constructor', this).call(this, menu, menu.getNativeElement(), {\n                        threshold: 0\n                    });\n                }\n\n                return TargetGesture;\n            })(MenuContentGesture);\n\n            _export('TargetGesture', TargetGesture);\n\n            LeftMenuGesture = (function (_MenuContentGesture2) {\n                _inherits(LeftMenuGesture, _MenuContentGesture2);\n\n                function LeftMenuGesture(menu) {\n                    _classCallCheck(this, LeftMenuGesture);\n\n                    _get(Object.getPrototypeOf(LeftMenuGesture.prototype), 'constructor', this).call(this, menu, menu.getContentElement());\n                }\n\n                return LeftMenuGesture;\n            })(MenuContentGesture);\n\n            _export('LeftMenuGesture', LeftMenuGesture);\n\n            RightMenuGesture = (function (_MenuContentGesture3) {\n                _inherits(RightMenuGesture, _MenuContentGesture3);\n\n                function RightMenuGesture(menu) {\n                    _classCallCheck(this, RightMenuGesture);\n\n                    _get(Object.getPrototypeOf(RightMenuGesture.prototype), 'constructor', this).call(this, menu, menu.getContentElement());\n                }\n\n                _createClass(RightMenuGesture, [{\n                    key: 'onSlide',\n                    value: function onSlide(slide, ev) {\n                        this.menu.setProgess(slide.distance / slide.min);\n                    }\n                }, {\n                    key: 'getElementStartPos',\n                    value: function getElementStartPos(slide, ev) {\n                        return this.menu.isOpen ? slide.min : slide.max;\n                    }\n                }, {\n                    key: 'getSlideBoundaries',\n                    value: function getSlideBoundaries() {\n                        return {\n                            min: -this.menu.width(),\n                            max: 0\n                        };\n                    }\n                }]);\n\n                return RightMenuGesture;\n            })(MenuContentGesture);\n\n            _export('RightMenuGesture', RightMenuGesture);\n        }\n    };\n});\nSystem.register(\"ionic/components/menu/menu-toggle\", [\"angular2/core\", \"../app/app\", \"../nav/view-controller\", \"../navbar/navbar\", \"./menu\"], function (_export) {\n    /**\n    * @name MenuToggle\n    * @description\n    * Toggle a menu by placing this directive on any item.\n    * Note that the menu's id must be either `leftMenu` or `rightMenu`\n    *\n    * @usage\n     * ```html\n     *<ion-content>\n     *  <h3>Page 1</h3>\n     *  <button menuToggle>Toggle Menu</button>\n     *</ion-content>\n     *\n     * ```\n    * @demo /docs/v3/demos/menu/\n    * @see {@link /docs/v3/components#menus Menu Component Docs}\n    * @see {@link ../../menu/Menu Menu API Docs}\n    */\n    \"use strict\";\n\n    var Directive, ElementRef, Optional, IonicApp, ViewController, Navbar, Menu, __decorate, __metadata, __param, MenuToggle, _a, _b, _c, _d;\n\n    var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();\n\n    function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n    return {\n        setters: [function (_angular2Core) {\n            Directive = _angular2Core.Directive;\n            ElementRef = _angular2Core.ElementRef;\n            Optional = _angular2Core.Optional;\n        }, function (_appApp) {\n            IonicApp = _appApp.IonicApp;\n        }, function (_navViewController) {\n            ViewController = _navViewController.ViewController;\n        }, function (_navbarNavbar) {\n            Navbar = _navbarNavbar.Navbar;\n        }, function (_menu) {\n            Menu = _menu.Menu;\n        }],\n        execute: function () {\n            __decorate = undefined && undefined.__decorate || function (decorators, target, key, desc) {\n                var c = arguments.length,\n                    r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc,\n                    d;\n                if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n                return c > 3 && r && Object.defineProperty(target, key, r), r;\n            };\n\n            __metadata = undefined && undefined.__metadata || function (k, v) {\n                if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n            };\n\n            __param = undefined && undefined.__param || function (paramIndex, decorator) {\n                return function (target, key) {\n                    decorator(target, key, paramIndex);\n                };\n            };\n\n            MenuToggle = (function () {\n                function MenuToggle(app, elementRef, viewCtrl, navbar) {\n                    _classCallCheck(this, MenuToggle);\n\n                    this.app = app;\n                    this.viewCtrl = viewCtrl;\n                    this.withinNavbar = !!navbar;\n                    // Deprecation warning\n                    if (this.withinNavbar && elementRef.nativeElement.tagName === 'A') {\n                        console.warn('Menu toggles within a navbar should use <button menuToggle> instead of <a menu-toggle>');\n                    }\n                }\n\n                /**\n                * @private\n                */\n\n                _createClass(MenuToggle, [{\n                    key: \"toggle\",\n                    value: function toggle() {\n                        var menu = Menu.getById(this.app, this.menuToggle);\n                        menu && menu.toggle();\n                    }\n\n                    /**\n                    * @private\n                    */\n                }, {\n                    key: \"isHidden\",\n                    get: function get() {\n                        if (this.withinNavbar && this.viewCtrl) {\n                            return !this.viewCtrl.isRoot();\n                        }\n                        return false;\n                    }\n                }]);\n\n                return MenuToggle;\n            })();\n\n            _export(\"MenuToggle\", MenuToggle);\n\n            _export(\"MenuToggle\", MenuToggle = __decorate([Directive({\n                selector: '[menuToggle]',\n                inputs: ['menuToggle'],\n                host: {\n                    '(click)': 'toggle()',\n                    '[hidden]': 'isHidden',\n                    'menuToggle': '' //ensures the attr is there for css when using [menuToggle]\n                }\n            }), __param(2, Optional()), __param(3, Optional()), __metadata('design:paramtypes', [typeof (_a = typeof IonicApp !== 'undefined' && IonicApp) === 'function' && _a || Object, typeof (_b = typeof ElementRef !== 'undefined' && ElementRef) === 'function' && _b || Object, typeof (_c = typeof ViewController !== 'undefined' && ViewController) === 'function' && _c || Object, typeof (_d = typeof Navbar !== 'undefined' && Navbar) === 'function' && _d || Object])], MenuToggle));\n        }\n    };\n});\nSystem.register('ionic/components/menu/menu-types', ['./menu', '../../animations/animation'], function (_export) {\n    /**\n     * Menu Type\n     * Base class which is extended by the various types. Each\n     * type will provide their own animations for open and close\n     * and registers itself with Menu.\n     * @private\n     */\n    'use strict';\n\n    var Menu, Animation, MenuType, MenuRevealType, MenuPushType, MenuOverlayType, OPACITY, TRANSLATE_X;\n\n    var _get = function get(_x, _x2, _x3) { var _again = true; _function: while (_again) { var object = _x, property = _x2, receiver = _x3; _again = false; if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { _x = parent; _x2 = property; _x3 = receiver; _again = true; desc = parent = undefined; continue _function; } } else if ('value' in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } } };\n\n    var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();\n\n    function _inherits(subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\n    function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\n    return {\n        setters: [function (_menu) {\n            Menu = _menu.Menu;\n        }, function (_animationsAnimation) {\n            Animation = _animationsAnimation.Animation;\n        }],\n        execute: function () {\n            MenuType = (function () {\n                function MenuType() {\n                    _classCallCheck(this, MenuType);\n\n                    this.open = new Animation();\n                    this.close = new Animation();\n                }\n\n                /**\n                 * Menu Reveal Type\n                 * The content slides over to reveal the menu underneath.\n                 * The menu itself, which is under the content, does not move.\n                 */\n\n                _createClass(MenuType, [{\n                    key: 'setOpen',\n                    value: function setOpen(shouldOpen) {\n                        var _this = this;\n\n                        return new Promise(function (resolve) {\n                            if (shouldOpen) {\n                                _this.open.playbackRate(1).onFinish(resolve, true).play();\n                            } else {\n                                _this.close.playbackRate(1).onFinish(resolve, true).play();\n                            }\n                        });\n                    }\n                }, {\n                    key: 'setProgressStart',\n                    value: function setProgressStart(isOpen) {\n                        this.isOpening = !isOpen;\n                        this.seek && this.seek.dispose();\n                        // clone the correct animation depending on open/close\n                        if (this.isOpening) {\n                            this.seek = this.open.clone();\n                        } else {\n                            this.seek = this.close.clone();\n                        }\n                        // the cloned animation should not use an easing curve during seek\n                        this.seek.easing('linear').progressStart();\n                    }\n                }, {\n                    key: 'setProgess',\n                    value: function setProgess(value) {\n                        // adjust progress value depending if it opening or closing\n                        if (!this.isOpening) {\n                            value = 1 - value;\n                        }\n                        this.seek.progress(value);\n                    }\n                }, {\n                    key: 'setProgressEnd',\n                    value: function setProgressEnd(shouldComplete) {\n                        var _this2 = this;\n\n                        var resolve = undefined;\n                        var promise = new Promise(function (res) {\n                            resolve = res;\n                        });\n                        var isOpen = this.isOpening && shouldComplete;\n                        if (!this.isOpening && !shouldComplete) {\n                            isOpen = true;\n                        }\n                        this.seek.progressEnd(shouldComplete).then(function () {\n                            _this2.isOpening = false;\n                            resolve(isOpen);\n                        });\n                        return promise;\n                    }\n                }, {\n                    key: 'ngOnDestroy',\n                    value: function ngOnDestroy() {\n                        this.open && this.open.dispose();\n                        this.close && this.close.dispose();\n                        this.seek && this.seek.dispose();\n                    }\n                }]);\n\n                return MenuType;\n            })();\n\n            _export('MenuType', MenuType);\n\n            MenuRevealType = (function (_MenuType) {\n                _inherits(MenuRevealType, _MenuType);\n\n                function MenuRevealType(menu) {\n                    _classCallCheck(this, MenuRevealType);\n\n                    _get(Object.getPrototypeOf(MenuRevealType.prototype), 'constructor', this).call(this);\n                    var easing = 'ease';\n                    var duration = 250;\n                    var openedX = menu.width() * (menu.side == 'right' ? -1 : 1) + 'px';\n                    var closedX = '0px';\n                    this.open.easing(easing).duration(duration);\n                    this.close.easing(easing).duration(duration);\n                    var contentOpen = new Animation(menu.getContentElement());\n                    contentOpen.fromTo(TRANSLATE_X, closedX, openedX);\n                    this.open.add(contentOpen);\n                    var contentClose = new Animation(menu.getContentElement());\n                    contentClose.fromTo(TRANSLATE_X, openedX, closedX);\n                    this.close.add(contentClose);\n                }\n\n                return MenuRevealType;\n            })(MenuType);\n\n            Menu.register('reveal', MenuRevealType);\n            /**\n             * Menu Push Type\n             * The content slides over to reveal the menu underneath.\n             * The menu itself also slides over to reveal its bad self.\n             */\n\n            MenuPushType = (function (_MenuType2) {\n                _inherits(MenuPushType, _MenuType2);\n\n                function MenuPushType(menu) {\n                    _classCallCheck(this, MenuPushType);\n\n                    _get(Object.getPrototypeOf(MenuPushType.prototype), 'constructor', this).call(this);\n                    var easing = 'ease';\n                    var duration = 250;\n                    var contentOpenedX = undefined,\n                        menuClosedX = undefined,\n                        menuOpenedX = undefined;\n                    if (menu.side == 'right') {\n                        contentOpenedX = -menu.width() + 'px';\n                        menuOpenedX = menu.platform.width() - menu.width() + 'px';\n                        menuClosedX = menu.platform.width() + 'px';\n                    } else {\n                        contentOpenedX = menu.width() + 'px';\n                        menuOpenedX = '0px';\n                        menuClosedX = -menu.width() + 'px';\n                    }\n                    // left side\n                    this.open.easing(easing).duration(duration);\n                    this.close.easing(easing).duration(duration);\n                    var menuOpen = new Animation(menu.getMenuElement());\n                    menuOpen.fromTo(TRANSLATE_X, menuClosedX, menuOpenedX);\n                    this.open.add(menuOpen);\n                    var contentOpen = new Animation(menu.getContentElement());\n                    contentOpen.fromTo(TRANSLATE_X, '0px', contentOpenedX);\n                    this.open.add(contentOpen);\n                    var menuClose = new Animation(menu.getMenuElement());\n                    menuClose.fromTo(TRANSLATE_X, menuOpenedX, menuClosedX);\n                    this.close.add(menuClose);\n                    var contentClose = new Animation(menu.getContentElement());\n                    contentClose.fromTo(TRANSLATE_X, contentOpenedX, '0px');\n                    this.close.add(contentClose);\n                }\n\n                return MenuPushType;\n            })(MenuType);\n\n            Menu.register('push', MenuPushType);\n            /**\n             * Menu Overlay Type\n             * The menu slides over the content. The content\n             * itself, which is under the menu, does not move.\n             */\n\n            MenuOverlayType = (function (_MenuType3) {\n                _inherits(MenuOverlayType, _MenuType3);\n\n                function MenuOverlayType(menu) {\n                    _classCallCheck(this, MenuOverlayType);\n\n                    _get(Object.getPrototypeOf(MenuOverlayType.prototype), 'constructor', this).call(this);\n                    var easing = 'ease';\n                    var duration = 250;\n                    var backdropOpacity = 0.35;\n                    var closedX = undefined,\n                        openedX = undefined;\n                    if (menu.side == 'right') {\n                        // right side\n                        closedX = menu.platform.width() + 'px';\n                        openedX = menu.platform.width() - menu.width() - 8 + 'px';\n                    } else {\n                        // left side\n                        closedX = -menu.width() + 'px';\n                        openedX = '8px';\n                    }\n                    this.open.easing(easing).duration(duration);\n                    this.close.easing(easing).duration(duration);\n                    var menuOpen = new Animation(menu.getMenuElement());\n                    menuOpen.fromTo(TRANSLATE_X, closedX, openedX);\n                    this.open.add(menuOpen);\n                    var backdropOpen = new Animation(menu.getBackdropElement());\n                    backdropOpen.fromTo(OPACITY, 0.01, backdropOpacity);\n                    this.open.add(backdropOpen);\n                    var menuClose = new Animation(menu.getMenuElement());\n                    menuClose.fromTo(TRANSLATE_X, openedX, closedX);\n                    this.close.add(menuClose);\n                    var backdropClose = new Animation(menu.getBackdropElement());\n                    backdropClose.fromTo(OPACITY, backdropOpacity, 0.01);\n                    this.close.add(backdropClose);\n                }\n\n                return MenuOverlayType;\n            })(MenuType);\n\n            Menu.register('overlay', MenuOverlayType);\n            OPACITY = 'opacity';\n            TRANSLATE_X = 'translateX';\n        }\n    };\n});\nSystem.register(\"ionic/components/menu/menu\", [\"angular2/core\", \"../ion\", \"../app/app\", \"../../config/config\", \"../../platform/platform\", \"../../util/keyboard\", \"./menu-gestures\"], function (_export) {\n    /**\n     * @name Menu\n     * @description\n     * _For basic Menu usage, see the [Menu section](../../../../components/#menus)\n     * of the Component docs._\n     *\n     * Menu is a side-menu navigation that can be dragged out or toggled to show.\n     *\n     * @usage\n     * In order to use Menu, you must specify a [reference](https://angular.io/docs/ts/latest/guide/user-input.html#local-variables)\n     * to the content element that Menu should listen on for drag events, using the `content` property:\n     *\n     * ```html\n     * <ion-menu [content]=\"mycontent\">\n     *   <ion-content>\n     *     <ion-list>\n     *     ...\n     *     </ion-list>\n     *   </ion-content>\n     * </ion-menu>\n     *\n     * <ion-nav #mycontent [root]=\"rootPage\"></ion-nav>\n     * ```\n     *\n     * By default, Menus are on the left, but this can be overriden with the `side`\n     * property:\n     * ```html\n     * <ion-menu [content]=\"mycontent\" side=\"right\"></ion-menu>\n     * ```\n     *\n     * Menus can optionally be given an `id` attribute which allows the app to\n     * to get ahold of menu references. If no `id` is given then the menu\n     * automatically receives an `id` created from the side it is on, such as\n     * `leftMenu` or `rightMenu`. When using more than one menu it is always\n     * recommended to give each menu a unique `id`. Additionally menuToggle and\n     * menuClose directives should be given menu id values of their respective\n     * menu.\n     *\n     * Menu supports two display styles: overlay, and reveal. Overlay\n     * is the traditional Android drawer style, and Reveal is the traditional iOS\n     * style. By default, Menu will adjust to the correct style for the platform,\n     * but this can be overriden using the `type` property:\n     * ```html\n     * <ion-menu [content]=\"mycontent\" type=\"overlay\"></ion-menu>\n     * ```\n     *\n     * To programatically interact with the menu, you first get the menu component.\n     *\n     * ```ts\n     * @Page({\n     * `<ion-menu [content]=\"mycontent\" id=\"leftMenu\"></ion-menu>\n     * <ion-nav #mycontent [root]=\"rootPage\"></ion-nav>`\n     * )}\n     * export class MyClass{\n     *  constructor(app: IonicApp){\n     *    this.app = app;\n     *    this.menu;\n     *  }\n     *\n     *  // Wait until the page is ready\n     *  ngAfterViewInit(){\n     *    this.menu = this.app.getComponent('leftMenu');\n     *  }\n     *\n     *  // Open the menu programatically\n     *  openMenu(){\n     *    this.menu.open();\n     *  }\n     *\n     * }\n     * ```\n     *\n     * If you want to use any of the APIs down below, make sure to grabe the menu component by it's ID\n     *\n     * @demo /docs/v3/demos/menu/\n     *\n     * @see {@link /docs/v3/components#menus Menu Component Docs}\n     * @see {@link /docs/v3/components#navigation Navigation Component Docs}\n     * @see {@link ../../nav/Nav Nav API Docs}\n     *\n     */\n    \"use strict\";\n\n    var Component, forwardRef, Directive, Host, EventEmitter, ElementRef, NgZone, Ion, IonicApp, Config, Platform, Keyboard, gestures, __decorate, __metadata, __param, Menu, menuTypes, menuIds, MenuBackdrop, _a, _b, _c, _d, _e, _f, _g;\n\n    var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();\n\n    var _get = function get(_x, _x2, _x3) { var _again = true; _function: while (_again) { var object = _x, property = _x2, receiver = _x3; _again = false; if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { _x = parent; _x2 = property; _x3 = receiver; _again = true; desc = parent = undefined; continue _function; } } else if (\"value\" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } } };\n\n    function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n    function _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\n    return {\n        setters: [function (_angular2Core) {\n            Component = _angular2Core.Component;\n            forwardRef = _angular2Core.forwardRef;\n            Directive = _angular2Core.Directive;\n            Host = _angular2Core.Host;\n            EventEmitter = _angular2Core.EventEmitter;\n            ElementRef = _angular2Core.ElementRef;\n            NgZone = _angular2Core.NgZone;\n        }, function (_ion) {\n            Ion = _ion.Ion;\n        }, function (_appApp) {\n            IonicApp = _appApp.IonicApp;\n        }, function (_configConfig) {\n            Config = _configConfig.Config;\n        }, function (_platformPlatform) {\n            Platform = _platformPlatform.Platform;\n        }, function (_utilKeyboard) {\n            Keyboard = _utilKeyboard.Keyboard;\n        }, function (_menuGestures) {\n            gestures = _menuGestures;\n        }],\n        execute: function () {\n            __decorate = undefined && undefined.__decorate || function (decorators, target, key, desc) {\n                var c = arguments.length,\n                    r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc,\n                    d;\n                if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n                return c > 3 && r && Object.defineProperty(target, key, r), r;\n            };\n\n            __metadata = undefined && undefined.__metadata || function (k, v) {\n                if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n            };\n\n            __param = undefined && undefined.__param || function (paramIndex, decorator) {\n                return function (target, key) {\n                    decorator(target, key, paramIndex);\n                };\n            };\n\n            Menu = (function (_Ion) {\n                _inherits(Menu, _Ion);\n\n                function Menu(elementRef, config, app, platform, keyboard, zone) {\n                    _classCallCheck(this, Menu);\n\n                    _get(Object.getPrototypeOf(Menu.prototype), \"constructor\", this).call(this, elementRef, config);\n                    this.app = app;\n                    this.platform = platform;\n                    this.keyboard = keyboard;\n                    this.zone = zone;\n                    this.opening = new EventEmitter('opening');\n                    this.isOpen = false;\n                    this._preventTime = 0;\n                    this.isEnabled = true;\n                }\n\n                /**\n                 * @private\n                 */\n\n                _createClass(Menu, [{\n                    key: \"ngOnInit\",\n                    value: function ngOnInit() {\n                        _get(Object.getPrototypeOf(Menu.prototype), \"ngOnInit\", this).call(this);\n                        var self = this;\n                        var content = self.content;\n                        self._cntEle = content instanceof Node ? content : content && content.getNativeElement && content.getNativeElement();\n                        if (!self._cntEle) {\n                            return console.error('Menu: must have a [content] element to listen for drag events on. Example:\\n\\n<ion-menu [content]=\"content\"></ion-menu>\\n\\n<ion-nav #content></ion-nav>');\n                        }\n                        if (self.side !== 'left' && self.side !== 'right') {\n                            self.side = 'left';\n                        }\n                        if (!self.id) {\n                            // Auto register\n                            self.id = self.side + 'Menu';\n                            if (self.app.getComponent(self.id)) {\n                                // id already exists, make sure this one is unique\n                                self.id += ++menuIds;\n                            }\n                            self.app.register(self.id, self);\n                        }\n                        self._initGesture();\n                        self._initType(self.type);\n                        self._cntEle.classList.add('menu-content');\n                        self._cntEle.classList.add('menu-content-' + self.type);\n                        self.onContentClick = function (ev) {\n                            if (self.isEnabled) {\n                                ev.preventDefault();\n                                ev.stopPropagation();\n                                self.close();\n                            }\n                        };\n                    }\n\n                    /**\n                     * @private\n                     */\n                }, {\n                    key: \"_initGesture\",\n                    value: function _initGesture() {\n                        var _this = this;\n\n                        this.zone.runOutsideAngular(function () {\n                            switch (_this.side) {\n                                case 'right':\n                                    _this._gesture = new gestures.RightMenuGesture(_this);\n                                    break;\n                                case 'left':\n                                    _this._gesture = new gestures.LeftMenuGesture(_this);\n                                    break;\n                            }\n                            _this._targetGesture = new gestures.TargetGesture(_this);\n                        });\n                    }\n\n                    /**\n                     * @private\n                     */\n                }, {\n                    key: \"_initType\",\n                    value: function _initType(type) {\n                        type = type && type.trim().toLowerCase();\n                        if (!type) {\n                            type = this.config.get('menuType');\n                        }\n                        this.type = type;\n                    }\n\n                    /**\n                     * @private\n                     */\n                }, {\n                    key: \"_getType\",\n                    value: function _getType() {\n                        if (!this._type) {\n                            this._type = new menuTypes[this.type](this);\n                            if (this.config.get('animate') === false) {\n                                this._type.open.duration(33);\n                                this._type.close.duration(33);\n                            }\n                        }\n                        return this._type;\n                    }\n\n                    /**\n                     * Sets the state of the Menu to open or not.\n                     * @param {boolean} isOpen  If the Menu is open or not.\n                     * @return {Promise} returns a promise once set\n                     */\n                }, {\n                    key: \"setOpen\",\n                    value: function setOpen(shouldOpen) {\n                        var _this2 = this;\n\n                        // _isPrevented is used to prevent unwanted opening/closing after swiping open/close\n                        // or swiping open the menu while pressing down on the menuToggle button\n                        if (shouldOpen === this.isOpen || this._isPrevented()) {\n                            return Promise.resolve();\n                        }\n                        this._before();\n                        return this._getType().setOpen(shouldOpen).then(function () {\n                            _this2._after(shouldOpen);\n                        });\n                    }\n\n                    /**\n                     * @private\n                     */\n                }, {\n                    key: \"setProgressStart\",\n                    value: function setProgressStart() {\n                        // user started swiping the menu open/close\n                        if (this._isPrevented() || !this.isEnabled) return;\n                        this._before();\n                        this._getType().setProgressStart(this.isOpen);\n                    }\n\n                    /**\n                     * @private\n                     */\n                }, {\n                    key: \"setProgess\",\n                    value: function setProgess(value) {\n                        // user actively dragging the menu\n                        if (this.isEnabled) {\n                            this._prevent();\n                            this._getType().setProgess(value);\n                            this.opening.next(value);\n                        }\n                    }\n\n                    /**\n                     * @private\n                     */\n                }, {\n                    key: \"setProgressEnd\",\n                    value: function setProgressEnd(shouldComplete) {\n                        var _this3 = this;\n\n                        // user has finished dragging the menu\n                        if (this.isEnabled) {\n                            this._prevent();\n                            this._getType().setProgressEnd(shouldComplete).then(function (isOpen) {\n                                _this3._after(isOpen);\n                            });\n                        }\n                    }\n\n                    /**\n                     * @private\n                     */\n                }, {\n                    key: \"_before\",\n                    value: function _before() {\n                        // this places the menu into the correct location before it animates in\n                        // this css class doesn't actually kick off any animations\n                        if (this.isEnabled) {\n                            this.getNativeElement().classList.add('show-menu');\n                            this.getBackdropElement().classList.add('show-backdrop');\n                            this._prevent();\n                            this.keyboard.close();\n                        }\n                    }\n\n                    /**\n                     * @private\n                     */\n                }, {\n                    key: \"_after\",\n                    value: function _after(isOpen) {\n                        // keep opening/closing the menu disabled for a touch more yet\n                        // only add listeners/css if it's enabled and isOpen\n                        // and only remove listeners/css if it's not open\n                        if (this.isEnabled && isOpen || !isOpen) {\n                            this._prevent();\n                            this.isOpen = isOpen;\n                            this._cntEle.classList[isOpen ? 'add' : 'remove']('menu-content-open');\n                            this._cntEle.removeEventListener('click', this.onContentClick);\n                            if (isOpen) {\n                                this._cntEle.addEventListener('click', this.onContentClick);\n                            } else {\n                                this.getNativeElement().classList.remove('show-menu');\n                                this.getBackdropElement().classList.remove('show-backdrop');\n                            }\n                        }\n                    }\n\n                    /**\n                     * @private\n                     */\n                }, {\n                    key: \"_prevent\",\n                    value: function _prevent() {\n                        // used to prevent unwanted opening/closing after swiping open/close\n                        // or swiping open the menu while pressing down on the menuToggle\n                        this._preventTime = Date.now() + 20;\n                    }\n\n                    /**\n                     * @private\n                     */\n                }, {\n                    key: \"_isPrevented\",\n                    value: function _isPrevented() {\n                        return this._preventTime > Date.now();\n                    }\n\n                    /**\n                     * Progamatically open the Menu\n                     * @return {Promise} returns a promise when the menu is fully opened\n                     */\n                }, {\n                    key: \"open\",\n                    value: function open() {\n                        return this.setOpen(true);\n                    }\n\n                    /**\n                     * Progamatically close the Menu\n                     * @return {Promise} returns a promise when the menu is fully closed\n                     */\n                }, {\n                    key: \"close\",\n                    value: function close() {\n                        return this.setOpen(false);\n                    }\n\n                    /**\n                     * Toggle the menu. If it's closed, it will open, and if opened, it will close\n                     * @return {Promise} returns a promise when the menu has been toggled\n                     */\n                }, {\n                    key: \"toggle\",\n                    value: function toggle() {\n                        return this.setOpen(!this.isOpen);\n                    }\n\n                    /**\n                     * Used to enable or disable a menu. For example, there could be multiple\n                     * left menus, but only one of them should be able to be dragged open.\n                     * @param {boolean} shouldEnable  True if it should be enabled, false if not.\n                     * @return {Menu}  Returns the instance of the menu, which is useful for chaining.\n                     */\n                }, {\n                    key: \"enable\",\n                    value: function enable(shouldEnable) {\n                        this.isEnabled = shouldEnable;\n                        if (!shouldEnable) {\n                            this.close();\n                        }\n                        return this;\n                    }\n\n                    /**\n                     * @private\n                     */\n                }, {\n                    key: \"getMenuElement\",\n                    value: function getMenuElement() {\n                        return this.getNativeElement();\n                    }\n\n                    /**\n                     * @private\n                     */\n                }, {\n                    key: \"getContentElement\",\n                    value: function getContentElement() {\n                        return this._cntEle;\n                    }\n\n                    /**\n                     * @private\n                     */\n                }, {\n                    key: \"getBackdropElement\",\n                    value: function getBackdropElement() {\n                        return this.backdrop.elementRef.nativeElement;\n                    }\n\n                    /**\n                     * @private\n                     */\n                }, {\n                    key: \"ngOnDestroy\",\n\n                    /**\n                     * @private\n                     */\n                    value: function ngOnDestroy() {\n                        this.app.unregister(this.id);\n                        this._gesture && this._gesture.destroy();\n                        this._targetGesture && this._targetGesture.destroy();\n                        this._type && this._type.ngOnDestroy();\n                        this._cntEle = null;\n                    }\n                }], [{\n                    key: \"register\",\n                    value: function register(name, cls) {\n                        menuTypes[name] = cls;\n                    }\n                }, {\n                    key: \"getById\",\n                    value: function getById(app, menuId) {\n                        var menu = null;\n                        if (menuId) {\n                            menu = app.getComponent(menuId);\n                            if (!menu) {\n                                console.error('Menu with id \"' + menuId + '\" cannot be found for menuToggle');\n                                return;\n                            }\n                        } else {\n                            menu = app.getComponent('leftMenu');\n                            if (!menu) {\n                                menu = app.getComponent('rightMenu');\n                            }\n                            if (!menu) {\n                                console.error('Menu with id \"leftMenu\" or \"rightMenu\" cannot be found for menuToggle');\n                                return;\n                            }\n                        }\n                        return menu;\n                    }\n                }]);\n\n                return Menu;\n            })(Ion);\n\n            _export(\"Menu\", Menu);\n\n            _export(\"Menu\", Menu = __decorate([Component({\n                selector: 'ion-menu',\n                inputs: ['content', 'id', 'side', 'type'],\n                defaultInputs: {\n                    'side': 'left',\n                    'menuType': 'reveal'\n                },\n                outputs: ['opening'],\n                host: {\n                    'role': 'navigation',\n                    '[attr.side]': 'side',\n                    '[attr.type]': 'type'\n                },\n                template: '<ng-content></ng-content><div tappable disable-activated class=\"backdrop\"></div>',\n                directives: [forwardRef(function () {\n                    return MenuBackdrop;\n                })]\n            }), __metadata('design:paramtypes', [typeof (_a = typeof ElementRef !== 'undefined' && ElementRef) === 'function' && _a || Object, typeof (_b = typeof Config !== 'undefined' && Config) === 'function' && _b || Object, typeof (_c = typeof IonicApp !== 'undefined' && IonicApp) === 'function' && _c || Object, typeof (_d = typeof Platform !== 'undefined' && Platform) === 'function' && _d || Object, typeof (_e = typeof Keyboard !== 'undefined' && Keyboard) === 'function' && _e || Object, typeof (_f = typeof NgZone !== 'undefined' && NgZone) === 'function' && _f || Object])], Menu));\n            menuTypes = {};\n            menuIds = 0;\n\n            MenuBackdrop = (function () {\n                function MenuBackdrop(menu, elementRef) {\n                    _classCallCheck(this, MenuBackdrop);\n\n                    this.menu = menu;\n                    this.elementRef = elementRef;\n                    menu.backdrop = this;\n                }\n\n                /**\n                 * @private\n                 */\n\n                _createClass(MenuBackdrop, [{\n                    key: \"clicked\",\n                    value: function clicked(ev) {\n                        console.debug('backdrop clicked');\n                        ev.preventDefault();\n                        ev.stopPropagation();\n                        this.menu.close();\n                    }\n                }]);\n\n                return MenuBackdrop;\n            })();\n\n            MenuBackdrop = __decorate([Directive({\n                selector: '.backdrop',\n                host: {\n                    '(click)': 'clicked($event)'\n                }\n            }), __param(0, Host()), __metadata('design:paramtypes', [Menu, typeof (_g = typeof ElementRef !== 'undefined' && ElementRef) === 'function' && _g || Object])], MenuBackdrop);\n        }\n    };\n});\nSystem.register('ionic/components/modal/modal', ['../nav/view-controller', '../../animations/animation'], function (_export) {\n    /**\n     * @name Modal\n     * @description\n     * A Modal is a content pane that goes over the user's current page.\n     * Usually it is used for making a choice or editing an item. A modal uses the\n     * `NavController` to\n     * {@link /docs/api/components/nav/NavController/#present present}\n     * itself in the root nav stack. It is added to the stack similar to how\n     * {@link /docs/api/components/nav/NavController/#push NavController.push}\n     * works.\n     *\n     * When a modal (or any other overlay such as an alert or actionsheet) is\n     * \"presented\" to a nav controller, the overlay is added to the app's root nav.\n     * After the modal has been presented, from within the component instance The\n     * modal can later be closed or \"dimsissed\" by using the ViewController's\n     * `dismiss` method. Additinoally, you can dismiss any overlay by using `pop`\n     * on the root nav controller.\n     *\n     * A modal can also emit data, which is useful when it is used to add or edit\n     * data. For example, a profile page could slide up in a modal, and on submit,\n     * the submit button could pass the updated profile data, then dismiss the\n     * modal.\n     *\n     * @usage\n     * ```ts\n     * import {Modal, NavController} from 'ionic/ionic';\n     *\n     * @Page(...)\n     * class HomePage {\n     *\n     *  constructor(nav: NavController) {\n     *    this.nav = nav;\n     *  }\n     *\n     *  presentContactModal() {\n     *    let contactModal = Modal.create(ContactUs);\n     *    this.nav.present(contactModal);\n     *  }\n     *\n     *  presentProfileModal() {\n     *    let profileModal = Modal.create(Profile, { userId: 8675309 });\n     *    profileModal.onDismiss(data => {\n     *      console.log(data);\n     *    });\n     *    this.nav.present(profileModal);\n     *  }\n     *\n     * }\n     *\n     * @Page(...)\n     * class Profile {\n     *\n     *  constructor(viewCtrl: ViewController) {\n     *    this.viewCtrl = viewCtrl;\n     *  }\n     *\n     *  dismiss() {\n     *    let data = { 'foo': 'bar' };\n     *    this.viewCtrl.dismiss(data);\n     *  }\n     *\n     * }\n     * ```\n     * @demo /docs/v3/demos/modal/\n     * @see {@link /docs/v3/components#modals Modal Component Docs}\n     */\n    'use strict';\n\n    var ViewController, Animation, Modal, ModalSlideIn, ModalSlideOut, ModalMDSlideIn, ModalMDSlideOut;\n\n    var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();\n\n    var _get = function get(_x3, _x4, _x5) { var _again = true; _function: while (_again) { var object = _x3, property = _x4, receiver = _x5; _again = false; if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { _x3 = parent; _x4 = property; _x5 = receiver; _again = true; desc = parent = undefined; continue _function; } } else if ('value' in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } } };\n\n    function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\n    function _inherits(subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\n    return {\n        setters: [function (_navViewController) {\n            ViewController = _navViewController.ViewController;\n        }, function (_animationsAnimation) {\n            Animation = _animationsAnimation.Animation;\n        }],\n        execute: function () {\n            Modal = (function (_ViewController) {\n                _inherits(Modal, _ViewController);\n\n                function Modal(componentType) {\n                    var data = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1];\n\n                    _classCallCheck(this, Modal);\n\n                    _get(Object.getPrototypeOf(Modal.prototype), 'constructor', this).call(this, componentType, data);\n                    this.viewType = 'modal';\n                }\n\n                /**\n                 * Animations for modals\n                 */\n\n                /**\n                * @private\n                */\n\n                _createClass(Modal, [{\n                    key: 'getTransitionName',\n                    value: function getTransitionName(direction) {\n                        var key = direction === 'back' ? 'modalLeave' : 'modalEnter';\n                        return this._nav && this._nav.config.get(key);\n                    }\n\n                    /**\n                     * @param {Any} componentType Modal\n                     * @param {Object} data Modal options\n                     */\n                }], [{\n                    key: 'create',\n                    value: function create(componentType) {\n                        var data = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1];\n\n                        return new Modal(componentType, data);\n                    }\n                }]);\n\n                return Modal;\n            })(ViewController);\n\n            _export('Modal', Modal);\n\n            ModalSlideIn = (function (_Animation) {\n                _inherits(ModalSlideIn, _Animation);\n\n                function ModalSlideIn(enteringView, leavingView, opts) {\n                    _classCallCheck(this, ModalSlideIn);\n\n                    _get(Object.getPrototypeOf(ModalSlideIn.prototype), 'constructor', this).call(this, enteringView.pageRef(), opts);\n                    this.easing('cubic-bezier(0.36,0.66,0.04,1)').duration(400).fromTo('translateY', '100%', '0%').before.addClass('show-page');\n                    if (enteringView.hasNavbar()) {\n                        // entering page has a navbar\n                        var enteringNavBar = new Animation(enteringView.navbarRef());\n                        enteringNavBar.before.addClass('show-navbar');\n                        this.add(enteringNavBar);\n                    }\n                }\n\n                return ModalSlideIn;\n            })(Animation);\n\n            Animation.register('modal-slide-in', ModalSlideIn);\n\n            ModalSlideOut = (function (_Animation2) {\n                _inherits(ModalSlideOut, _Animation2);\n\n                function ModalSlideOut(enteringView, leavingView, opts) {\n                    _classCallCheck(this, ModalSlideOut);\n\n                    _get(Object.getPrototypeOf(ModalSlideOut.prototype), 'constructor', this).call(this, leavingView.pageRef(), opts);\n                    this.easing('ease-out').duration(250).fromTo('translateY', '0%', '100%');\n                }\n\n                return ModalSlideOut;\n            })(Animation);\n\n            Animation.register('modal-slide-out', ModalSlideOut);\n\n            ModalMDSlideIn = (function (_Animation3) {\n                _inherits(ModalMDSlideIn, _Animation3);\n\n                function ModalMDSlideIn(enteringView, leavingView, opts) {\n                    _classCallCheck(this, ModalMDSlideIn);\n\n                    _get(Object.getPrototypeOf(ModalMDSlideIn.prototype), 'constructor', this).call(this, enteringView.pageRef(), opts);\n                    this.easing('cubic-bezier(0.36,0.66,0.04,1)').duration(280).fromTo('translateY', '40px', '0px').fadeIn().before.addClass('show-page');\n                    if (enteringView.hasNavbar()) {\n                        // entering page has a navbar\n                        var enteringNavBar = new Animation(enteringView.navbarRef());\n                        enteringNavBar.before.addClass('show-navbar');\n                        this.add(enteringNavBar);\n                    }\n                }\n\n                return ModalMDSlideIn;\n            })(Animation);\n\n            Animation.register('modal-md-slide-in', ModalMDSlideIn);\n\n            ModalMDSlideOut = (function (_Animation4) {\n                _inherits(ModalMDSlideOut, _Animation4);\n\n                function ModalMDSlideOut(enteringView, leavingView, opts) {\n                    _classCallCheck(this, ModalMDSlideOut);\n\n                    _get(Object.getPrototypeOf(ModalMDSlideOut.prototype), 'constructor', this).call(this, leavingView.pageRef(), opts);\n                    this.duration(200).easing('cubic-bezier(0.47,0,0.745,0.715)').fromTo('translateY', '0px', '40px').fadeOut();\n                }\n\n                return ModalMDSlideOut;\n            })(Animation);\n\n            Animation.register('modal-md-slide-out', ModalMDSlideOut);\n        }\n    };\n});\nSystem.register('ionic/components/nav/nav-controller', ['angular2/core', 'angular2/instrumentation', '../ion', './view-controller', '../../animations/animation', './swipe-back', '../../util/util', '../../util/dom'], function (_export) {\n    /**\n     * _For examples on the basic usage of NavController, check out the\n     * [Navigation section](../../../../components/#navigation) of the Component\n     * docs._\n     *\n     * NavController is the base class for navigation controller components like\n     * [`Nav`](../Nav/) and [`Tab`](../../Tabs/Tab/). You use navigation controllers\n     * to navigate to [pages](#creating_pages) in your app. At a basic level, a\n     * navigation controller is an array of pages representing a particular history\n     * (of a Tab for example). This array can be manipulated to navigate throughout\n     * an app by pushing and popping pages or inserting and removing them at\n     * arbitrary locations in history.\n     *\n     * The current page is the last one in the array, or the top of the stack if we\n     * think of it that way.  [Pushing](#push) a new page onto the top of the\n     * navigation stack causes the new page to be animated in, while [popping](#pop)\n     * the current page will navigate to the previous page in the stack.\n     *\n     * Unless you are using a directive like [NavPush](../NavPush/), or need a\n     * specific NavController, most times you will inject and use a reference to the\n     * nearest NavController to manipulate the navigation stack.\n     *\n     * <h3 id=\"injecting_nav_controller\">Injecting NavController</h3>\n     * Injecting NavController will always get you an instance of the nearest\n     * NavController, regardless of whether it is a Tab or a Nav.\n     *\n     * Behind the scenes, when Ionic instantiates a new NavController, it creates an\n     * injector with NavController bound to that instance (usually either a Nav or\n     * Tab) and adds the injector to its own providers.  For more information on\n     * providers and dependency injection, see [Providers and DI]().\n     *\n     * Instead, you can inject NavController and know that it is the correct\n     * navigation controller for most situations (for more advanced situations, see\n     * [Menu](../../Menu/Menu/) and [Tab](../../Tab/Tab/)).\n     *\n     * ```ts\n     *  class MyComponent {\n     *    constructor(nav: NavController) {\n     *      this.nav = nav;\n     *    }\n     *  }\n     * ```\n     *\n     * <h2 id=\"creating_pages\">Page creation</h2>\n     * _For more information on the `@Page` decorator see the [@Page API\n     * reference](../../../decorators/Page/)._\n     *\n     * Pages are created when they are added to the navigation stack.  For methods\n     * like [push()](#push), the NavController takes any component class that is\n     * decorated with `@Page` as its first argument.  The NavController then\n     * compiles that component, adds it to the app and animates it into view.\n     *\n     * By default, pages are cached and left in the DOM if they are navigated away\n     * from but still in the navigation stack (the exiting page on a `push()` for\n     * example).  They are destroyed when removed from the navigation stack (on\n     * [pop()](#pop) or [setRoot()](#setRoot)).\n     *\n     *\n     * <h2 id=\"Lifecycle\">Lifecycle events</h2>\n     * Lifecycle events are fired during various stages of navigation.  They can be\n     * defined in any `@Page` decorated component class.\n     *\n     * ```ts\n     * @Page({\n     *   template: 'Hello World'\n     * })\n     * class HelloWorld {\n     *   onPageLoaded() {\n     *     console.log(\"I'm alive!\");\n     *   }\n     *   onPageWillLeave() {\n     *     console.log(\"Looks like I'm about to leave :(\");\n     *   }\n     * }\n     * ```\n     *\n     *\n     *\n     * - `onPageLoaded` - Runs when the page has loaded. This event only happens once per page being created and added to the DOM. If a page leaves but is cached, then this event will not fire again on a subsequent viewing. The `onPageLoaded` event is good place to put your setup code for the page.\n     * - `onPageWillEnter` - Runs when the page is about to enter and become the active page.\n     * - `onPageDidEnter` - Runs when the page has fully entered and is now the active page. This event will fire, whether it was the first load or a cached page.\n     * - `onPageWillLeave` - Runs when the page is about to leave and no longer be the active page.\n     * - `onPageDidLeave` - Runs when the page has finished leaving and is no longer the active page.\n     * - `onPageWillUnload` - Runs when the page is about to be destroyed and have its elements removed.\n     * - `onPageDidUnload` - Runs after the page has been destroyed and its elements have been removed.\n     *\n     * @see {@link /docs/v3/components#navigation Navigation Component Docs}\n     */\n    'use strict';\n\n    var Injector, provide, wtfLeave, wtfCreateScope, wtfStartTimeRange, wtfEndTimeRange, Ion, ViewController, Animation, SwipeBackGesture, isBoolean, array, pascalCaseToDashCase, raf, rafFrames, NavController, ACTIVE_STATE, CACHED_STATE, STAGED_ENTERING_STATE, STAGED_LEAVING_STATE, ctrlIds, NavParams;\n\n    var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();\n\n    var _get = function get(_x13, _x14, _x15) { var _again = true; _function: while (_again) { var object = _x13, property = _x14, receiver = _x15; _again = false; if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { _x13 = parent; _x14 = property; _x15 = receiver; _again = true; desc = parent = undefined; continue _function; } } else if ('value' in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } } };\n\n    function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\n    function _inherits(subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\n    return {\n        setters: [function (_angular2Core) {\n            Injector = _angular2Core.Injector;\n            provide = _angular2Core.provide;\n        }, function (_angular2Instrumentation) {\n            wtfLeave = _angular2Instrumentation.wtfLeave;\n            wtfCreateScope = _angular2Instrumentation.wtfCreateScope;\n            wtfStartTimeRange = _angular2Instrumentation.wtfStartTimeRange;\n            wtfEndTimeRange = _angular2Instrumentation.wtfEndTimeRange;\n        }, function (_ion) {\n            Ion = _ion.Ion;\n        }, function (_viewController) {\n            ViewController = _viewController.ViewController;\n        }, function (_animationsAnimation) {\n            Animation = _animationsAnimation.Animation;\n        }, function (_swipeBack) {\n            SwipeBackGesture = _swipeBack.SwipeBackGesture;\n        }, function (_utilUtil) {\n            isBoolean = _utilUtil.isBoolean;\n            array = _utilUtil.array;\n            pascalCaseToDashCase = _utilUtil.pascalCaseToDashCase;\n        }, function (_utilDom) {\n            raf = _utilDom.raf;\n            rafFrames = _utilDom.rafFrames;\n        }],\n        execute: function () {\n            NavController = (function (_Ion) {\n                _inherits(NavController, _Ion);\n\n                function NavController(parentnavCtrl, app, config, keyboard, elementRef, anchorName, compiler, viewManager, zone, renderer, cd) {\n                    _classCallCheck(this, NavController);\n\n                    _get(Object.getPrototypeOf(NavController.prototype), 'constructor', this).call(this, elementRef, config);\n                    this.parent = parentnavCtrl;\n                    this.app = app;\n                    this.config = config;\n                    this.keyboard = keyboard;\n                    this._anchorName = anchorName;\n                    this._compiler = compiler;\n                    this._viewManager = viewManager;\n                    this._zone = zone;\n                    this._renderer = renderer;\n                    this._cd = cd;\n                    this._views = [];\n                    this._trnsTime = 0;\n                    this._trnsDelay = config.get('pageTransitionDelay');\n                    this._sbTrans = null;\n                    this._sbEnabled = config.get('swipeBackEnabled') || false;\n                    this._sbThreshold = config.get('swipeBackThreshold') || 40;\n                    this.initZIndex = 10;\n                    this.id = ++ctrlIds;\n                    this._ids = -1;\n                    // build a new injector for child ViewControllers to use\n                    this.providers = Injector.resolve([provide(NavController, { useValue: this })]);\n                }\n\n                /**\n                 * Boolean if the nav controller is actively transitioning or not.\n                 * @private\n                 * @return {bool}\n                 */\n\n                _createClass(NavController, [{\n                    key: 'isTransitioning',\n                    value: function isTransitioning() {\n                        return this._trnsTime > Date.now();\n                    }\n\n                    /**\n                     * Boolean if the nav controller is actively transitioning or not.\n                     * @private\n                     * @return {bool}\n                     */\n                }, {\n                    key: 'setTransitioning',\n                    value: function setTransitioning(isTransitioning) {\n                        var fallback = arguments.length <= 1 || arguments[1] === undefined ? 700 : arguments[1];\n\n                        this._trnsTime = isTransitioning ? Date.now() + fallback : 0;\n                    }\n\n                    /**\n                     * Push is how we can pass components and navigate to them. We push the component we want to navigate to on to the navigation stack.\n                     *\n                     * ```typescript\n                     * class MyClass{\n                     *    constructor(nav:NavController){\n                     *      this.nav = nav;\n                     *    }\n                     *\n                     *    pushPage(){\n                     *      this.nav.push(SecondView);\n                     *    }\n                     * }\n                     * ```\n                     *\n                     * We can also pass along parameters to the next view, such as data that we have on the current view. This is a similar concept to to V1 apps with `$stateParams`.\n                     *\n                     * ```typescript\n                     * class MyClass{\n                     *    constructor(nav:NavController){\n                     *      this.nav = nav;\n                     *    }\n                     *\n                     *    pushPage(user){\n                     *      this.nav.push(SecondView,{\n                     *       // user is an object we have in our view\n                     *       // typically this comes from an ngFor or some array\n                     *       // here we can create an object with a property of\n                     *       // paramUser, and set it's value to the user object we passed in\n                     *       paramUser: user\n                     *      });\n                     *    }\n                     * }\n                     * ```\n                     *\n                     * We'll look at how we can access that data in the `SecondView` in the navParam docs\n                     *\n                     * We can also pass any options to the transtion from that same method\n                     *\n                     * ```typescript\n                     * class MyClass{\n                     *    constructor(nav: NavController){\n                     *      this.nav = nav;\n                     *    }\n                     *\n                     *    pushPage(user){\n                     *      this.nav.push(SecondView,{\n                     *       // user is an object we have in our view\n                     *       // typically this comes from an ngFor or some array\n                     *       // here we can create an object with a property of\n                     *       // paramUser, and set it's value to the user object we passed in\n                     *       paramUser: user\n                     *      },{\n                     *       // here we can configure things like the animations direction or\n                     *       // or if the view should animate at all.\n                     *       direction: 'back'\n                     *      });\n                     *    }\n                     * }\n                     * ```\n                     * @param {Any} component The page component class you want to push on to the navigation stack\n                     * @param {Object} [params={}] Any nav-params you want to pass along to the next view\n                     * @param {Object} [opts={}] Any options you want to use pass to transtion\n                     * @returns {Promise} Returns a promise, which resolves when the transition has completed\n                     */\n                }, {\n                    key: 'push',\n                    value: function push(componentType, params, opts, callback) {\n                        if (params === undefined) params = {};\n                        if (opts === undefined) opts = {};\n\n                        if (!componentType) {\n                            var errMsg = 'invalid componentType to push';\n                            console.error(errMsg);\n                            return Promise.reject(errMsg);\n                        }\n                        if (typeof componentType !== 'function') {\n                            throw 'Loading component must be a component class, not \"' + componentType.toString() + '\"';\n                        }\n                        if (this.isTransitioning()) {\n                            return Promise.reject('nav controller actively transitioning');\n                        }\n                        this.setTransitioning(true, 500);\n                        var promise = null;\n                        if (!callback) {\n                            promise = new Promise(function (res) {\n                                callback = res;\n                            });\n                        }\n                        // do not animate if this is the first in the stack\n                        if (!this._views.length && !opts.animateFirst) {\n                            opts.animate = false;\n                        }\n                        // the active view is going to be the leaving one (if one exists)\n                        var leavingView = this.getActive() || new ViewController();\n                        leavingView.shouldCache = isBoolean(opts.cacheLeavingView) ? opts.cacheLeavingView : true;\n                        leavingView.shouldDestroy = !leavingView.shouldCache;\n                        if (leavingView.shouldDestroy) {\n                            leavingView.willUnload();\n                        }\n                        // create a new ViewController\n                        var enteringView = new ViewController(componentType, params);\n                        enteringView.setNav(this);\n                        // default the direction to \"forward\"\n                        opts.direction = opts.direction || 'forward';\n                        if (!opts.animation) {\n                            opts.animation = enteringView.getTransitionName(opts.direction);\n                        }\n                        // add the view to the stack\n                        this._add(enteringView);\n                        if (this.router) {\n                            // notify router of the state change\n                            this.router.stateChange('push', enteringView, params);\n                        }\n                        // start the transition\n                        this._transition(enteringView, leavingView, opts, callback);\n                        return promise;\n                    }\n\n                    /**\n                     * Present is how we display overlays on top of the content, from within the\n                     * root level `NavController`. The `present` method is used by overlays, such\n                     * as `ActionSheet`, `Alert`, and `Modal`. The main difference between `push`\n                     * and `present`, is that `present` takes a `ViewController` instance, whereas\n                     * `push` takes a `Page` component class. Additionally, `present` will place\n                     * the overlay in the root NavController's stack.\n                     *\n                     * ```typescript\n                     * class MyClass{\n                     *    constructor(nav: NavController) {\n                     *      this.nav = nav;\n                     *    }\n                     *\n                     *    presentModal() {\n                     *      let modal = Modal.create(ProfilePage);\n                     *      this.nav.present(modal);\n                     *    }\n                     * }\n                     * ```\n                     *\n                     * @param {ViewController} enteringView The name of the component you want to push on the navigation stack\n                     * @param {Object} [opts={}] Any options you want to use pass to transtion\n                     * @returns {Promise} Returns a promise, which resolves when the transition has completed\n                     */\n                }, {\n                    key: 'present',\n                    value: function present(enteringView) {\n                        var opts = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1];\n\n                        var rootNav = this.rootNav;\n                        enteringView.setNav(rootNav);\n                        var resolve = undefined;\n                        var promise = new Promise(function (res) {\n                            resolve = res;\n                        });\n                        opts.keyboardClose = false;\n                        opts.skipCache = true;\n                        opts.direction = 'forward';\n                        if (!opts.animation) {\n                            opts.animation = enteringView.getTransitionName('forward');\n                        }\n                        enteringView.setLeavingOpts({\n                            keyboardClose: false,\n                            skipCache: true,\n                            direction: 'back',\n                            animation: enteringView.getTransitionName('back')\n                        });\n                        // the active view is going to be the leaving one (if one exists)\n                        var leavingView = rootNav.getActive() || new ViewController();\n                        leavingView.shouldCache = isBoolean(opts.cacheLeavingView) ? opts.cacheLeavingView : true;\n                        leavingView.shouldDestroy = !leavingView.shouldCache;\n                        if (leavingView.shouldDestroy) {\n                            leavingView.willUnload();\n                        }\n                        // add the view to the stack\n                        rootNav._add(enteringView);\n                        // start the transition\n                        rootNav._transition(enteringView, leavingView, opts, resolve);\n                        return promise;\n                    }\n\n                    /**\n                     * If you wanted to navigate back from a current view, you can use the back-button or programatically call `pop()`\n                     * Similar to `push()`, you can pass animation options.\n                     *\n                     * ```typescript\n                     * class SecondView{\n                     *    constructor(nav:NavController){\n                     *      this.nav = nav;\n                     *    }\n                     *    goBack(){\n                     *      this.nav.pop();\n                     *    }\n                     * }\n                     * ```\n                     *\n                     * @param {Object} [opts={}] Any options you want to use pass to transtion\n                     * @returns {Promise} Returns a promise when the transition is completed\n                     */\n                }, {\n                    key: 'pop',\n                    value: function pop() {\n                        var opts = arguments.length <= 0 || arguments[0] === undefined ? {} : arguments[0];\n\n                        if (!opts.animateFirst && !this.canGoBack()) {\n                            return Promise.reject('pop cannot go back');\n                        }\n                        if (this.isTransitioning()) {\n                            return Promise.reject('nav controller actively transitioning');\n                        }\n                        this.setTransitioning(true, 500);\n                        var resolve = null;\n                        var promise = new Promise(function (res) {\n                            resolve = res;\n                        });\n                        // get the active view and set that it is staged to be leaving\n                        // was probably the one popped from the stack\n                        var leavingView = this.getActive() || new ViewController();\n                        leavingView.shouldCache = isBoolean(opts.cacheLeavingView) ? opts.cacheLeavingView : false;\n                        leavingView.shouldDestroy = !leavingView.shouldCache;\n                        if (leavingView.shouldDestroy) {\n                            leavingView.willUnload();\n                        }\n                        // the entering view is now the new last view\n                        // Note: we might not have an entering view if this is the\n                        // only view on the history stack.\n                        var enteringView = this.getPrevious(leavingView);\n                        if (this.router) {\n                            // notify router of the state change\n                            this.router.stateChange('pop', enteringView);\n                        }\n                        // default the direction to \"back\"\n                        opts.direction = opts.direction || 'back';\n                        if (!opts.animation) {\n                            opts.animation = leavingView.getTransitionName(opts.direction);\n                        }\n                        // start the transition\n                        this._transition(enteringView, leavingView, opts, resolve);\n                        return promise;\n                    }\n\n                    /**\n                     * @private\n                     * Pop to a specific view in the history stack\n                     * @param view {ViewController} to pop to\n                     * @param {Object} [opts={}] Any options you want to use pass to transtion\n                     */\n                }, {\n                    key: 'popTo',\n                    value: function popTo(viewCtrl) {\n                        var opts = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1];\n\n                        // Get the target index of the view to pop to\n                        var viewIndex = this._views.indexOf(viewCtrl);\n                        var targetIndex = viewIndex + 1;\n                        // Don't pop to the view if it wasn't found, or the target is beyond the view list\n                        if (viewIndex < 0 || targetIndex > this._views.length - 1) {\n                            return Promise.resolve();\n                        }\n                        // ensure the entering view is shown\n                        this._cachePage(viewCtrl, true);\n                        var resolve = null;\n                        var promise = new Promise(function (res) {\n                            resolve = res;\n                        });\n                        opts.direction = opts.direction || 'back';\n                        if (!opts.animation) {\n                            opts.animation = viewCtrl.getTransitionName(opts.direction);\n                        }\n                        var leavingView = this.getActive() || new ViewController();\n                        // get the views to auto remove without having to do a transiton for each\n                        // the last view (the currently active one) will do a normal transition out\n                        if (this._views.length > 1) {\n                            var autoRemoveItems = this._views.slice(targetIndex, this._views.length);\n                            var popView = undefined;\n                            for (var i = 0; i < autoRemoveItems.length; i++) {\n                                popView = autoRemoveItems[i];\n                                popView.shouldDestroy = true;\n                                popView.shouldCache = false;\n                                popView.willUnload();\n                                // only the leaving view should be shown, all others hide\n                                this._cachePage(popView, popView === leavingView);\n                            }\n                        }\n                        if (this.router) {\n                            this.router.stateChange('pop', viewCtrl);\n                        }\n                        this._transition(viewCtrl, leavingView, opts, resolve);\n                        return promise;\n                    }\n\n                    /**\n                     * Similar to `pop()`, this method let's you navigate back to the root of the stack, no matter how many views that is\n                     * @param {Object} [opts={}] Any options you want to use pass to transtion\n                     */\n                }, {\n                    key: 'popToRoot',\n                    value: function popToRoot() {\n                        var opts = arguments.length <= 0 || arguments[0] === undefined ? {} : arguments[0];\n\n                        return this.popTo(this.first(), opts);\n                    }\n\n                    /**\n                     * Inserts a view into the nav stack at the specified index.\n                     * This is useful if you need to add a view at any point in your navigation stack\n                     *\n                     * ```typescript\n                     * export class Detail {\n                     *    constructor(nav: NavController) {\n                     *      this.nav = nav;\n                     *    }\n                     *    insertView(){\n                     *      this.nav.insert(1,Info)\n                     *    }\n                     *  }\n                     * ```\n                     *\n                     * This will insert the `Info` view into the second slot of our navigation stack\n                     *\n                     * @param {Number} index The index where you want to insert the view\n                     * @param {Any} component The name of the component you want to insert into the nav stack\n                     * @returns {Promise} Returns a promise when the view has been inserted into the navigation stack\n                     */\n                }, {\n                    key: 'insert',\n                    value: function insert(index, componentType) {\n                        var params = arguments.length <= 2 || arguments[2] === undefined ? {} : arguments[2];\n                        var opts = arguments.length <= 3 || arguments[3] === undefined ? {} : arguments[3];\n\n                        if (!componentType || index < 0) {\n                            return Promise.reject('invalid insert');\n                        }\n                        // push it onto the end\n                        if (index >= this._views.length) {\n                            return this.push(componentType, params, opts);\n                        }\n                        // create new ViewController, but don't render yet\n                        var viewCtrl = new ViewController(componentType, params);\n                        viewCtrl.setNav(this);\n                        viewCtrl.state = CACHED_STATE;\n                        viewCtrl.shouldDestroy = false;\n                        viewCtrl.shouldCache = false;\n                        this._incId(viewCtrl);\n                        this._views.splice(index, 0, viewCtrl);\n                        this._cleanup();\n                        return Promise.resolve();\n                    }\n\n                    /**\n                     * Removes a view from the nav stack at the specified index.\n                     *\n                     * ```typescript\n                     * export class Detail {\n                     *    constructor(nav: NavController) {\n                     *      this.nav = nav;\n                     *    }\n                     *    removeView(){\n                     *      this.nav.remove(1)\n                     *    }\n                     *  }\n                     * ```\n                     *\n                     * @param {Number} index Remove the view from the nav stack at that index\n                     * @param {Object} [opts={}] Any options you want to use pass to transtion\n                     * @returns {Promise} Returns a promise when the view has been removed\n                     */\n                }, {\n                    key: 'remove',\n                    value: function remove(index) {\n                        var opts = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1];\n\n                        if (index < 0 || index >= this._views.length) {\n                            return Promise.reject(\"index out of range\");\n                        }\n                        var viewToRemove = this._views[index];\n                        if (this.isActive(viewToRemove)) {\n                            return this.pop(opts);\n                        }\n                        viewToRemove.shouldDestroy = true;\n                        this._cleanup();\n                        return Promise.resolve();\n                    }\n\n                    /**\n                     * @private\n                     */\n                }, {\n                    key: 'setViews',\n                    value: function setViews(components) {\n                        var opts = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1];\n\n                        console.warn('setViews() deprecated, use setPages() instead');\n                        return this.setPages(components, opts);\n                    }\n\n                    /**\n                     * You can set the views of the current navigation stack and navigate to the last view past\n                     *\n                     *\n                     *```typescript\n                     * import {Page, NavController} from 'ionic/ionic'\n                     * import {Detail} from '../detail/detail'\n                     * import {Info} from '../info/info'\n                     *\n                     *  export class Home {\n                     *    constructor(nav: NavController) {\n                     *      this.nav = nav;\n                     *    }\n                     *    setPages() {\n                     *      this.nav.setPages([List,Detail, Info]);\n                     *    }\n                     *  }\n                     *```\n                     *\n                     *\n                     *In this example, we're giving the current nav stack an array of pages. Then the navigation stack will navigate to the last view in the array and remove the orignal view you came from.\n                     *\n                     *By default, animations are disabled, but they can be enabled by passing options to the navigation controller\n                     *\n                     *\n                     *```typescript\n                     * import {Page, NavController} from 'ionic/ionic'\n                     * import {Detail} from '../detail/detail'\n                     * import {Info} from '../info/info'\n                     *\n                     *  export class Home {\n                     *    constructor(nav: NavController) {\n                     *      this.nav = nav;\n                     *    }\n                     *    setPages() {\n                     *      this.nav.setPages([List,Detail, Info],{\n                     *        animate: true\n                     *      });\n                     *    }\n                     *  }\n                     *```\n                     *\n                     *\n                     *You can also pass any navigation params to the individual pages in the array.\n                     *\n                     *\n                     *```typescript\n                     * import {Page, NavController} from 'ionic/ionic'\n                     * import {Detail} from '../detail/detail'\n                     * import {Info} from '../info/info'\n                     *\n                     *  export class Home {\n                     *    constructor(nav: NavController) {\n                     *      this.nav = nav;\n                     *    }\n                     *    setPages() {\n                     *      this.nav.setPages([{\n                     *        componentType: List,\n                     *        params: {id: 43}\n                     *      }, {\n                     *        componentType: Detail,\n                     *        params: {id: 45}\n                     *      },{\n                     *        componentType: Info,\n                     *        params: {id: 5}\n                     *      }]);\n                     *    }\n                     *  }\n                     *```\n                     *\n                     * @param {Array} component an arry of components to load in the stack\n                     * @param {Object} [opts={}] Any options you want to use pass\n                     * @returns {Promise} Returns a promise when the pages are set\n                     */\n                }, {\n                    key: 'setPages',\n                    value: function setPages(components) {\n                        var opts = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1];\n\n                        if (!components || !components.length) {\n                            return Promise.resolve();\n                        }\n                        var leavingView = this.getActive() || new ViewController();\n                        // if animate has not been set then default to false\n                        opts.animate = opts.animate || false;\n                        // ensure leaving views are not cached, and should be destroyed\n                        opts.cacheLeavingView = false;\n                        // get the views to auto remove without having to do a transiton for each\n                        // the last view (the currently active one) will do a normal transition out\n                        if (this._views.length > 1) {\n                            var autoRemoveItems = this._views.slice(0, this._views.length - 1);\n                            var popView = undefined;\n                            for (var i = 0; i < autoRemoveItems.length; i++) {\n                                popView = autoRemoveItems[i];\n                                popView.shouldDestroy = true;\n                                popView.shouldCache = false;\n                                popView.willUnload();\n                                if (opts.animate) {\n                                    // only the leaving view should be shown, all others hide\n                                    this._cachePage(popView, popView === leavingView);\n                                }\n                            }\n                        }\n                        var componentObj = null;\n                        var componentType = null;\n                        var viewCtrl = null;\n                        // create the ViewControllers that go before the new active ViewController\n                        // in the stack, but the previous views shouldn't render yet\n                        if (components.length > 1) {\n                            var newBeforeItems = components.slice(0, components.length - 1);\n                            for (var j = 0; j < newBeforeItems.length; j++) {\n                                componentObj = newBeforeItems[j];\n                                if (componentObj) {\n                                    // could be an object with a componentType property, or it is a componentType\n                                    componentType = componentObj.componentType || componentObj;\n                                    viewCtrl = new ViewController(componentType, componentObj.params);\n                                    viewCtrl.setNav(this);\n                                    viewCtrl.state = CACHED_STATE;\n                                    viewCtrl.shouldDestroy = false;\n                                    viewCtrl.shouldCache = false;\n                                    // add the item to the stack\n                                    this._add(viewCtrl);\n                                }\n                            }\n                        }\n                        // get the component that will become the active item\n                        // it'll be the last one in the given components array\n                        componentObj = components[components.length - 1];\n                        componentType = componentObj.componentType || componentObj;\n                        // transition the leaving and entering\n                        return this.push(componentType, componentObj.params, opts);\n                    }\n\n                    /**\n                     * Set the root for the current navigation stack\n                     * @param {Component} The name of the component you want to push on the navigation stack\n                     * @param {Object} [params={}] Any nav-params you want to pass along to the next view\n                     * @param {Object} [opts={}] Any options you want to use pass to transtion\n                     * @returns {Promise} Returns a promise when done\n                     */\n                }, {\n                    key: 'setRoot',\n                    value: function setRoot(componentType) {\n                        var params = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1];\n                        var opts = arguments.length <= 2 || arguments[2] === undefined ? {} : arguments[2];\n\n                        return this.setPages([{\n                            componentType: componentType,\n                            params: params\n                        }], opts);\n                    }\n\n                    /**\n                     * @private\n                     */\n                }, {\n                    key: '_transition',\n                    value: function _transition(enteringView, leavingView, opts, done) {\n                        if (enteringView === leavingView) {\n                            // if the entering view and leaving view are the same thing don't continue\n                            return done(enteringView);\n                        }\n                        if (this.config.get('animate') === false) {\n                            opts.animate = false;\n                        }\n                        if (!enteringView) {\n                            // if no entering view then create a bogus one\n                            // already consider this bogus one loaded\n                            enteringView = new ViewController();\n                            enteringView.loaded();\n                        }\n                        var wtfScope = wtfStartTimeRange('ionic.NavController#_transition ' + enteringView.name);\n                        /* Async steps to complete a transition\n                          1. _render: compile the view and render it in the DOM. Load page if it hasn't loaded already. When done call postRender\n                          2. _postRender: Run willEnter/willLeave, then wait a frame (change detection happens), then call beginTransition\n                          3. _beforeTrans: Create the transition's animation, play the animation, wait for it to end\n                          4. _afterTrans: Run didEnter/didLeave, call _transComplete()\n                          5. _transComplete: Cleanup, remove cache views, then call the final callback\n                        */\n                        // begin the multiple async process of transitioning to the entering view\n                        this._render(enteringView, leavingView, opts, function () {\n                            wtfEndTimeRange(wtfScope);\n                            done(enteringView);\n                        });\n                    }\n\n                    /**\n                     * @private\n                     */\n                }, {\n                    key: '_render',\n                    value: function _render(enteringView, leavingView, opts, done) {\n                        var _this = this;\n\n                        // compile/load the view into the DOM\n                        if (enteringView.shouldDestroy) {\n                            // about to be destroyed, shouldn't continue\n                            done();\n                        } else if (enteringView.isLoaded()) {\n                            // already compiled this view, do not load again and continue\n                            this._postRender(enteringView, leavingView, opts, done);\n                        } else {\n                            // view has not been compiled/loaded yet\n                            // continue once the view has finished compiling\n                            // DOM WRITE\n                            this.loadPage(enteringView, null, opts, function () {\n                                if (enteringView.onReady) {\n                                    // this entering view needs to wait for it to be ready\n                                    // this is used by Tabs to wait for the first page of\n                                    // the first selected tab to be loaded\n                                    enteringView.onReady(function () {\n                                        enteringView.loaded();\n                                        _this._postRender(enteringView, leavingView, opts, done);\n                                    });\n                                } else {\n                                    enteringView.loaded();\n                                    _this._postRender(enteringView, leavingView, opts, done);\n                                }\n                            });\n                        }\n                    }\n\n                    /**\n                     * @private\n                     */\n                }, {\n                    key: '_postRender',\n                    value: function _postRender(enteringView, leavingView, opts, done) {\n                        var _this2 = this;\n\n                        var wtfScope = wtfStartTimeRange('ionic.NavController#_postRender ' + enteringView.name);\n                        // called after _render has completed and the view is compiled/loaded\n                        if (enteringView.shouldDestroy) {\n                            // view already marked as a view that will be destroyed, don't continue\n                            wtfEndTimeRange(wtfScope);\n                            done();\n                        } else if (!opts.preload) {\n                            // the enteringView will become the active view, and is not being preloaded\n                            // call each view's lifecycle events\n                            // POSSIBLE DOM READ THEN DOM WRITE\n                            enteringView.willEnter();\n                            leavingView.willLeave();\n                            // set the correct zIndex for the entering and leaving views\n                            // DOM WRITE\n                            this._setZIndex(enteringView, leavingView, opts.direction);\n                            // make sure the entering and leaving views are showing\n                            // and all others are hidden, but don't remove the leaving view yet\n                            // DOM WRITE\n                            this._cleanup(enteringView, leavingView, true, opts.skipCache);\n                            // lifecycle events may have updated some data\n                            // wait one frame and allow the raf to do a change detection\n                            // before kicking off the transition and showing the new view\n                            raf(function () {\n                                wtfEndTimeRange(wtfScope);\n                                _this2._beforeTrans(enteringView, leavingView, opts, done);\n                            });\n                        } else {\n                            // this view is being preloaded, don't call lifecycle events\n                            // transition does not need to animate\n                            opts.animate = false;\n                            wtfEndTimeRange(wtfScope);\n                            this._beforeTrans(enteringView, leavingView, opts, done);\n                        }\n                    }\n\n                    /**\n                     * @private\n                     */\n                }, {\n                    key: '_beforeTrans',\n                    value: function _beforeTrans(enteringView, leavingView, opts, done) {\n                        var _this3 = this;\n\n                        var wtfScope = wtfStartTimeRange('ionic.NavController#_beforeTrans ' + enteringView.name);\n                        // called after one raf from postRender()\n                        // create the transitions animation, play the animation\n                        // when the transition ends call wait for it to end\n                        // everything during the transition should runOutsideAngular\n                        this._zone.runOutsideAngular(function () {\n                            // ensure the entering view is not destroyed or cached\n                            enteringView.shouldDestroy = false;\n                            enteringView.shouldCache = false;\n                            // set that the new view pushed on the stack is staged to be entering/leaving\n                            // staged state is important for the transition to find the correct view\n                            enteringView.state = STAGED_ENTERING_STATE;\n                            leavingView.state = STAGED_LEAVING_STATE;\n                            // init the transition animation\n                            opts.renderDelay = opts.transitionDelay || self._trnsDelay;\n                            // set if this app is right-to-left or not\n                            opts.isRTL = _this3.config.platform.isRTL();\n                            var transAnimation = Animation.createTransition(enteringView, leavingView, opts);\n                            if (opts.animate === false) {\n                                // force it to not animate the elements, just apply the \"to\" styles\n                                transAnimation.clearDuration();\n                                transAnimation.duration(0);\n                            }\n                            var duration = transAnimation.duration();\n                            var enableApp = duration < 64;\n                            // block any clicks during the transition and provide a\n                            // fallback to remove the clickblock if something goes wrong\n                            _this3.app.setEnabled(enableApp, duration);\n                            _this3.setTransitioning(!enableApp, duration);\n                            if (enteringView.viewType) {\n                                transAnimation.before.addClass(enteringView.viewType);\n                            }\n                            wtfEndTimeRange(wtfScope);\n                            // start the transition\n                            transAnimation.play(function () {\n                                // transition animation has ended\n                                // dispose the animation and it's element references\n                                transAnimation.dispose();\n                                _this3._afterTrans(enteringView, leavingView, opts, done);\n                            });\n                        });\n                    }\n\n                    /**\n                     * @private\n                     */\n                }, {\n                    key: '_afterTrans',\n                    value: function _afterTrans(enteringView, leavingView, opts, done) {\n                        var _this4 = this;\n\n                        var wtfScope = wtfStartTimeRange('ionic.NavController#_afterTrans ' + enteringView.name);\n                        // transition has completed, update each view's state\n                        // place back into the zone, run didEnter/didLeave\n                        // call the final callback when done\n                        enteringView.state = ACTIVE_STATE;\n                        leavingView.state = CACHED_STATE;\n                        // run inside of the zone again\n                        this._zone.run(function () {\n                            if (!opts.preload) {\n                                enteringView.didEnter();\n                                leavingView.didLeave();\n                            }\n                            if (opts.keyboardClose !== false && _this4.keyboard.isOpen()) {\n                                // the keyboard is still open!\n                                // no problem, let's just close for them\n                                _this4.keyboard.close();\n                                _this4.keyboard.onClose(function () {\n                                    // keyboard has finished closing, transition complete\n                                    _this4._transComplete();\n                                    wtfEndTimeRange(wtfScope);\n                                    done();\n                                }, 32);\n                            } else {\n                                // all good, transition complete\n                                _this4._transComplete();\n                                wtfEndTimeRange(wtfScope);\n                                done();\n                            }\n                        });\n                    }\n\n                    /**\n                     * @private\n                     */\n                }, {\n                    key: '_transComplete',\n                    value: function _transComplete() {\n                        var wtfScope = wtfCreateScope('ionic.NavController#_transComplete')();\n                        this._views.forEach(function (view) {\n                            if (view) {\n                                if (view.shouldDestroy) {\n                                    view.didUnload();\n                                } else if (view.state === CACHED_STATE && view.shouldCache) {\n                                    view.shouldCache = false;\n                                }\n                            }\n                        });\n                        // allow clicks again, but still set an enable time\n                        // meaning nothing with this view controller can happen for XXms\n                        this.app.setEnabled(true);\n                        this.setTransitioning(false);\n                        this._sbComplete();\n                        this._cleanup();\n                        wtfLeave(wtfScope);\n                    }\n\n                    /**\n                     * @private\n                     */\n                }, {\n                    key: 'loadPage',\n                    value: function loadPage(viewCtrl, navbarContainerRef, opts, done) {\n                        var _this5 = this;\n\n                        var wtfTimeRangeScope = wtfStartTimeRange('ionic.NavController#loadPage ' + viewCtrl.name);\n                        // guts of DynamicComponentLoader#loadIntoLocation\n                        this._compiler.compileInHost(viewCtrl.componentType).then(function (hostProtoViewRef) {\n                            var wtfScope = wtfCreateScope('ionic.NavController#loadPage_After_Compile')();\n                            var providers = _this5.providers.concat(Injector.resolve([provide(ViewController, { useValue: viewCtrl }), provide(NavParams, { useValue: viewCtrl.getNavParams() })]));\n                            var location = _this5.elementRef;\n                            if (_this5._anchorName) {\n                                location = _this5._viewManager.getNamedElementInComponentView(location, _this5._anchorName);\n                            }\n                            var viewContainer = _this5._viewManager.getViewContainer(location);\n                            var hostViewRef = viewContainer.createHostView(hostProtoViewRef, viewContainer.length, providers);\n                            var pageElementRef = _this5._viewManager.getHostElement(hostViewRef);\n                            var component = _this5._viewManager.getComponent(pageElementRef);\n                            // auto-add page css className created from component JS class name\n                            var cssClassName = pascalCaseToDashCase(viewCtrl.componentType.name);\n                            _this5._renderer.setElementClass(pageElementRef, cssClassName, true);\n                            viewCtrl.addDestroy(function () {\n                                // ensure the element is cleaned up for when the view pool reuses this element\n                                _this5._renderer.setElementAttribute(pageElementRef, 'class', null);\n                                _this5._renderer.setElementAttribute(pageElementRef, 'style', null);\n                                // remove the page from its container\n                                var index = viewContainer.indexOf(hostViewRef);\n                                if (index !== -1) {\n                                    viewContainer.remove(index);\n                                }\n                            });\n                            // a new ComponentRef has been created\n                            // set the ComponentRef's instance to this ViewController\n                            viewCtrl.setInstance(component);\n                            // remember the ElementRef to the ion-page elementRef that was just created\n                            viewCtrl.setPageRef(pageElementRef);\n                            if (!navbarContainerRef) {\n                                navbarContainerRef = viewCtrl.getNavbarViewRef();\n                            }\n                            var navbarTemplateRef = viewCtrl.getNavbarTemplateRef();\n                            if (navbarContainerRef && navbarTemplateRef) {\n                                (function () {\n                                    var navbarView = navbarContainerRef.createEmbeddedView(navbarTemplateRef);\n                                    viewCtrl.addDestroy(function () {\n                                        var index = navbarContainerRef.indexOf(navbarView);\n                                        if (index > -1) {\n                                            navbarContainerRef.remove(index);\n                                        }\n                                    });\n                                })();\n                            }\n                            opts.postLoad && opts.postLoad(viewCtrl);\n                            if (_this5._views.length === 1) {\n                                _this5._zone.runOutsideAngular(function () {\n                                    rafFrames(38, function () {\n                                        _this5._renderer.setElementClass(_this5.elementRef, 'has-views', true);\n                                    });\n                                });\n                            }\n                            wtfEndTimeRange(wtfTimeRangeScope);\n                            wtfLeave(wtfScope);\n                            done(viewCtrl);\n                        });\n                    }\n\n                    /**\n                     * @private\n                     */\n                }, {\n                    key: '_setZIndex',\n                    value: function _setZIndex(enteringView, leavingView, direction) {\n                        var enteringPageRef = enteringView && enteringView.pageRef();\n                        if (enteringPageRef) {\n                            if (!leavingView || !leavingView.isLoaded()) {\n                                enteringView.zIndex = this.initZIndex;\n                            } else if (direction === 'back') {\n                                // moving back\n                                enteringView.zIndex = leavingView.zIndex - 1;\n                            } else {\n                                // moving forward\n                                enteringView.zIndex = leavingView.zIndex + 1;\n                            }\n                            if (enteringView.zIndex !== enteringView._zIndex) {\n                                this._renderer.setElementStyle(enteringPageRef, 'z-index', enteringView.zIndex);\n                                enteringView._zIndex = enteringView.zIndex;\n                            }\n                        }\n                    }\n\n                    /**\n                     * @private\n                     */\n                }, {\n                    key: '_cachePage',\n                    value: function _cachePage(viewCtrl, shouldShow) {\n                        // using hidden element attribute to display:none and not render views\n                        // renderAttr of '' means the hidden attribute will be added\n                        // renderAttr of null means the hidden attribute will be removed\n                        // doing checks to make sure we only make an update to the element when needed\n                        if (shouldShow && viewCtrl._hdnAttr === '' || !shouldShow && viewCtrl._hdnAttr !== '') {\n                            viewCtrl._hdnAttr = shouldShow ? null : '';\n                            this._renderer.setElementAttribute(viewCtrl.pageRef(), 'hidden', viewCtrl._hdnAttr);\n                            var navbarRef = viewCtrl.navbarRef();\n                            if (navbarRef) {\n                                this._renderer.setElementAttribute(navbarRef, 'hidden', viewCtrl._hdnAttr);\n                            }\n                        }\n                    }\n\n                    /**\n                     * @private\n                     */\n                }, {\n                    key: '_cleanup',\n                    value: function _cleanup(activeView, previousView, skipDestroy, skipCache) {\n                        var _this6 = this;\n\n                        // the active page, and the previous page, should be rendered in dom and ready to go\n                        // all others, like a cached page 2 back, should be display: none and not rendered\n                        var destroys = [];\n                        activeView = activeView || this.getActive();\n                        previousView = previousView || this.getPrevious(activeView);\n                        this._views.forEach(function (view) {\n                            if (view) {\n                                if (view.shouldDestroy && !skipDestroy) {\n                                    destroys.push(view);\n                                } else if (view.isLoaded() && !skipCache) {\n                                    var shouldShow = view === activeView || view === previousView;\n                                    _this6._cachePage(view, shouldShow);\n                                }\n                            }\n                        });\n                        // all pages being destroyed should be removed from the list of pages\n                        // and completely removed from the dom\n                        destroys.forEach(function (view) {\n                            _this6._remove(view);\n                            view.destroy();\n                        });\n                    }\n\n                    /**\n                     * @private\n                     */\n                }, {\n                    key: 'swipeBackStart',\n                    value: function swipeBackStart() {\n                        var _this7 = this;\n\n                        return;\n                        if (!this.app.isEnabled() || !this.canSwipeBack()) {\n                            return;\n                        }\n                        // disables the app during the transition\n                        this.app.setEnabled(false);\n                        this.setTransitioning(true);\n                        // default the direction to \"back\"\n                        var opts = {\n                            direction: 'back'\n                        };\n                        // get the active view and set that it is staged to be leaving\n                        // was probably the one popped from the stack\n                        var leavingView = this.getActive() || new ViewController();\n                        leavingView.shouldDestroy = true;\n                        leavingView.shouldCache = false;\n                        leavingView.willLeave();\n                        leavingView.willUnload();\n                        // the entering view is now the new last view\n                        var enteringView = this.getPrevious(leavingView);\n                        enteringView.shouldDestroy = false;\n                        enteringView.shouldCache = false;\n                        enteringView.willEnter();\n                        // wait for the new view to complete setup\n                        this._render(enteringView, {}, function () {\n                            _this7._zone.runOutsideAngular(function () {\n                                // set that the new view pushed on the stack is staged to be entering/leaving\n                                // staged state is important for the transition to find the correct view\n                                enteringView.state = STAGED_ENTERING_STATE;\n                                leavingView.state = STAGED_LEAVING_STATE;\n                                // init the swipe back transition animation\n                                _this7._sbTrans = Transition.create(_this7, opts);\n                                _this7._sbTrans.easing('linear').progressStart();\n                            });\n                        });\n                    }\n\n                    /**\n                     * @private\n                     */\n                }, {\n                    key: 'swipeBackProgress',\n                    value: function swipeBackProgress(value) {\n                        return;\n                        if (this._sbTrans) {\n                            // continue to disable the app while actively dragging\n                            this.app.setEnabled(false, 4000);\n                            this.setTransitioning(true, 4000);\n                            // set the transition animation's progress\n                            this._sbTrans.progress(value);\n                        }\n                    }\n\n                    /**\n                     * @private\n                     */\n                }, {\n                    key: 'swipeBackEnd',\n                    value: function swipeBackEnd(completeSwipeBack, rate) {\n                        var _this8 = this;\n\n                        return;\n                        if (!this._sbTrans) return;\n                        // disables the app during the transition\n                        this.app.setEnabled(false);\n                        this.setTransitioning(true);\n                        this._sbTrans.progressEnd(completeSwipeBack, rate).then(function () {\n                            _this8._zone.run(function () {\n                                // find the views that were entering and leaving\n                                var enteringView = _this8._getStagedEntering();\n                                var leavingView = _this8._getStagedLeaving();\n                                if (enteringView && leavingView) {\n                                    // finish up the animation\n                                    if (completeSwipeBack) {\n                                        // swipe back has completed navigating back\n                                        // update each view's state\n                                        enteringView.state = ACTIVE_STATE;\n                                        leavingView.state = CACHED_STATE;\n                                        enteringView.didEnter();\n                                        leavingView.didLeave();\n                                        if (_this8.router) {\n                                            // notify router of the pop state change\n                                            _this8.router.stateChange('pop', enteringView);\n                                        }\n                                    } else {\n                                        // cancelled the swipe back, they didn't end up going back\n                                        // return views to their original state\n                                        leavingView.state = ACTIVE_STATE;\n                                        enteringView.state = CACHED_STATE;\n                                        leavingView.willEnter();\n                                        leavingView.didEnter();\n                                        enteringView.didLeave();\n                                        leavingView.shouldDestroy = false;\n                                        enteringView.shouldDestroy = false;\n                                    }\n                                }\n                                // empty out and dispose the swipe back transition animation\n                                _this8._sbTrans && _this8._sbTrans.dispose();\n                                _this8._sbTrans = null;\n                                // all done!\n                                _this8._transComplete();\n                            });\n                        });\n                    }\n\n                    /**\n                     * @private\n                     */\n                }, {\n                    key: '_sbComplete',\n                    value: function _sbComplete() {\n                        return;\n                        if (this.canSwipeBack()) {\n                            // it is possible to swipe back\n                            if (this.sbGesture) {\n                                // this is already an active gesture, don't create another one\n                                return;\n                            }\n                            var opts = {\n                                edge: 'left',\n                                threshold: this._sbThreshold\n                            };\n                            this.sbGesture = new SwipeBackGesture(this.getNativeElement(), opts, this);\n                            console.debug('SwipeBackGesture listen');\n                            this.sbGesture.listen();\n                        } else if (this.sbGesture) {\n                            // it is not possible to swipe back and there is an\n                            // active sbGesture, so unlisten it\n                            console.debug('SwipeBackGesture unlisten');\n                            this.sbGesture.unlisten();\n                            this.sbGesture = null;\n                        }\n                    }\n\n                    /**\n                     * Check to see if swipe-to-go-back is enabled\n                     * @param {boolean=} isSwipeBackEnabled Set whether or not swipe-to-go-back is enabled\n                     * @returns {boolean} Whether swipe-to-go-back is enabled\n                     */\n                }, {\n                    key: 'isSwipeBackEnabled',\n                    value: function isSwipeBackEnabled(val) {\n                        if (arguments.length) {\n                            this._sbEnabled = !!val;\n                        }\n                        return this._sbEnabled;\n                    }\n\n                    /**\n                     * If it's possible to use swipe back or not. If it's not possible\n                     * to go back, or swipe back is not enable then this will return false.\n                     * If it is possible to go back, and swipe back is enabled, then this\n                     * will return true.\n                     * @returns {boolean} Whether you can swipe to go back\n                     */\n                }, {\n                    key: 'canSwipeBack',\n                    value: function canSwipeBack() {\n                        return this._sbEnabled && this.canGoBack();\n                    }\n\n                    /**\n                     * Returns `true` if there's a valid previous page that we can pop back to.\n                     * Otherwise returns false.\n                     * @returns {boolean} Whether there is a page to go back to\n                     */\n                }, {\n                    key: 'canGoBack',\n                    value: function canGoBack() {\n                        var activeView = this.getActive();\n                        if (activeView) {\n                            return activeView.enableBack();\n                        }\n                        return false;\n                    }\n\n                    /**\n                     * @private\n                     */\n                }, {\n                    key: 'navbarViewContainer',\n                    value: function navbarViewContainer(nbContainer) {\n                        if (nbContainer) {\n                            this._nbContainer = nbContainer;\n                        }\n                        if (this._nbContainer) {\n                            return this._nbContainer;\n                        }\n                        if (this.parent) {\n                            return this.parent.navbarViewContainer();\n                        }\n                    }\n\n                    /**\n                     * @private\n                     * @returns {TODO} TODO\n                     */\n                }, {\n                    key: 'anchorElementRef',\n                    value: function anchorElementRef() {\n                        if (arguments.length) {\n                            this._anchorER = arguments[0];\n                        }\n                        return this._anchorER;\n                    }\n\n                    /**\n                     * @private\n                     */\n                }, {\n                    key: '_add',\n                    value: function _add(viewCtrl) {\n                        this._incId(viewCtrl);\n                        this._views.push(viewCtrl);\n                    }\n\n                    /**\n                     * @private\n                     */\n                }, {\n                    key: '_incId',\n                    value: function _incId(viewCtrl) {\n                        viewCtrl.id = this.id + '-' + ++this._ids;\n                    }\n\n                    /**\n                     * @private\n                     */\n                }, {\n                    key: '_remove',\n                    value: function _remove(viewOrIndex) {\n                        array.remove(this._views, viewOrIndex);\n                    }\n\n                    /**\n                     * @private\n                     */\n                }, {\n                    key: '_getStagedEntering',\n                    value: function _getStagedEntering() {\n                        for (var i = 0, ii = this._views.length; i < ii; i++) {\n                            if (this._views[i].state === STAGED_ENTERING_STATE) {\n                                return this._views[i];\n                            }\n                        }\n                        return null;\n                    }\n\n                    /**\n                     * @private\n                     */\n                }, {\n                    key: '_getStagedLeaving',\n                    value: function _getStagedLeaving() {\n                        for (var i = 0, ii = this._views.length; i < ii; i++) {\n                            if (this._views[i].state === STAGED_LEAVING_STATE) {\n                                return this._views[i];\n                            }\n                        }\n                        return null;\n                    }\n\n                    /**\n                     * @private\n                     * @returns {Component} TODO\n                     */\n                }, {\n                    key: 'getActive',\n                    value: function getActive() {\n                        for (var i = this._views.length - 1; i >= 0; i--) {\n                            if (this._views[i].state === ACTIVE_STATE && !this._views[i].shouldDestroy) {\n                                return this._views[i];\n                            }\n                        }\n                        return null;\n                    }\n\n                    /**\n                     * @param {Index} The index of the page you want to get\n                     * @returns {Component} Returns the component that matches the index given\n                     */\n                }, {\n                    key: 'getByIndex',\n                    value: function getByIndex(index) {\n                        if (index < this._views.length && index > -1) {\n                            return this._views[index];\n                        }\n                        return null;\n                    }\n\n                    /**\n                     * @private\n                     * @param {TODO} view  TODO\n                     * @returns {TODO} TODO\n                     */\n                }, {\n                    key: 'getPrevious',\n                    value: function getPrevious(viewCtrl) {\n                        if (viewCtrl) {\n                            var viewIndex = this._views.indexOf(viewCtrl);\n                            for (var i = viewIndex - 1; i >= 0; i--) {\n                                if (!this._views[i].shouldDestroy) {\n                                    return this._views[i];\n                                }\n                            }\n                        }\n                        return null;\n                    }\n\n                    /**\n                     * First page in this nav controller's stack. This would not return a page which is about to be destroyed.\n                     * @returns {Component} Returns the first component page in the current stack\n                     */\n                }, {\n                    key: 'first',\n                    value: function first() {\n                        for (var i = 0, l = this._views.length; i < l; i++) {\n                            if (!this._views[i].shouldDestroy) {\n                                return this._views[i];\n                            }\n                        }\n                        return null;\n                    }\n\n                    /**\n                     * Last page in this nav controller's stack. This would not return a page which is about to be destroyed.\n                     * @returns {Component} Returns the last component page in the current stack\n                     */\n                }, {\n                    key: 'last',\n                    value: function last() {\n                        for (var i = this._views.length - 1; i >= 0; i--) {\n                            if (!this._views[i].shouldDestroy) {\n                                return this._views[i];\n                            }\n                        }\n                        return null;\n                    }\n\n                    /**\n                     * @private\n                     * @param {TODO} view  TODO\n                     * @returns {TODO} TODO\n                     */\n                }, {\n                    key: 'indexOf',\n                    value: function indexOf(viewCtrl) {\n                        return this._views.indexOf(viewCtrl);\n                    }\n\n                    /**\n                     * Number of sibling views in the nav controller. This does\n                     * not include views which are about to be destroyed.\n                     * @returns {Number} The number of views in stack, including the current view\n                     */\n                }, {\n                    key: 'length',\n                    value: function length() {\n                        var len = 0;\n                        for (var i = 0, l = this._views.length; i < l; i++) {\n                            if (!this._views[i].shouldDestroy) {\n                                len++;\n                            }\n                        }\n                        return len;\n                    }\n\n                    /**\n                     * @private\n                     * @param {TODO} view  TODO\n                     * @returns {boolean}\n                     */\n                }, {\n                    key: 'isActive',\n                    value: function isActive(viewCtrl) {\n                        return !!(viewCtrl && viewCtrl.state === ACTIVE_STATE);\n                    }\n\n                    /**\n                     * Returns the root NavController.\n                     * @returns {NavController}\n                     */\n                }, {\n                    key: 'registerRouter',\n\n                    /**\n                     * @private\n                     * @param {TODO} router  TODO\n                     */\n                    value: function registerRouter(router) {\n                        this.router = router;\n                    }\n                }, {\n                    key: 'rootNav',\n                    get: function get() {\n                        var nav = this;\n                        while (nav.parent) {\n                            nav = nav.parent;\n                        }\n                        return nav;\n                    }\n                }]);\n\n                return NavController;\n            })(Ion);\n\n            _export('NavController', NavController);\n\n            ACTIVE_STATE = 1;\n            CACHED_STATE = 2;\n            STAGED_ENTERING_STATE = 3;\n            STAGED_LEAVING_STATE = 4;\n            ctrlIds = -1;\n\n            /**\n             * @name NavParams\n             * @description\n             * NavParams are an object that exists on a page and can contain data for that particular view.\n             * Similar to how data was pass to a view in V1 with `$stateParams`, NavParams offer a much more flexible\n             * option with a simple `get` method.\n             *\n             * @usage\n             * ```ts\n             * export class MyClass{\n             *  constructor(params: NavParams){\n             *    this.params = params;\n             *    // userParams is an object we have in our nav-parameters\n             *    this.params.get('userParams');\n             *  }\n             * }\n             * ```\n             * @demo /docs/v3/demos/nav-params/\n             * @see {@link /docs/v3/components#navigation Navigation Component Docs}\n             * @see {@link ../NavController/ NavController API Docs}\n             * @see {@link ../Nav/ Nav API Docs}\n             * @see {@link ../NavPush/ NavPush API Docs}\n             */\n\n            NavParams = (function () {\n                /**\n                 * @private\n                 * @param {TODO} data  TODO\n                 */\n\n                function NavParams(data) {\n                    _classCallCheck(this, NavParams);\n\n                    this.data = data || {};\n                }\n\n                /**\n                 * Get the value of a nav-parameter for the current view\n                 *\n                 * ```ts\n                 * export class MyClass{\n                 *  constructor(params: NavParams){\n                 *    this.params = params;\n                 *    // userParams is an object we have in our nav-parameters\n                 *    this.params.get('userParams');\n                 *  }\n                 * }\n                 * ```\n                 *\n                 *\n                 * @param {string} parameter Which param you want to look up\n                 */\n\n                _createClass(NavParams, [{\n                    key: 'get',\n                    value: function get(param) {\n                        return this.data[param];\n                    }\n                }]);\n\n                return NavParams;\n            })();\n\n            _export('NavParams', NavParams);\n        }\n    };\n});\nSystem.register(\"ionic/components/nav/nav-push\", [\"angular2/core\", \"./nav-controller\", \"./nav-registry\"], function (_export) {\n    /**\n     * @name NavPush\n     * @description\n     * Directive for declaratively linking to a new page instead of using\n     * {@link ../NavController/#push NavController.push}. Similar to ui-router's `ui-sref`.\n     *\n     * @usage\n     * ```html\n     * <button [navPush]=\"pushPage\"></button>\n     * ```\n     * To specify parameters you can use array syntax or the `nav-params` property:\n     * ```html\n     * <button [navPush]=\"pushPage\" [navParams]=\"params\"></button>\n     * ```\n     * Where `pushPage` and `params` are specified in your component, and `pushPage`\n     * contains a reference to a [@Page component](../../../config/Page/):\n     *\n     * ```ts\n     * import {LoginPage} from 'login';\n     * @Page({\n     *   template: `<button [navPush]=\"pushPage\" [navParams]=\"params\"></button>`\n     * })\n     * class MyPage {\n     *   constructor(){\n     *     this.pushPage = LoginPage;\n     *     this.params = { id: 42 };\n     *   }\n     * }\n     * ```\n     *\n     * ### Alternate syntax\n     * You can also use syntax similar to Angular2's router, passing an array to\n     * NavPush:\n     * ```html\n     * <button [navPush]=\"[pushPage, params]\"></button>\n     * ```\n     * @demo /docs/v3/demos/nav-push-pop/\n     * @see {@link /docs/v3/components#navigation Navigation Component Docs}\n     * @see {@link ../NavPop NavPop API Docs}\n     */\n    \"use strict\";\n\n    var Directive, Optional, NavController, NavRegistry, __decorate, __metadata, __param, NavPush, NavPop, _a, _b, _c;\n\n    var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();\n\n    function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n    return {\n        setters: [function (_angular2Core) {\n            Directive = _angular2Core.Directive;\n            Optional = _angular2Core.Optional;\n        }, function (_navController) {\n            NavController = _navController.NavController;\n        }, function (_navRegistry) {\n            NavRegistry = _navRegistry.NavRegistry;\n        }],\n        execute: function () {\n            __decorate = undefined && undefined.__decorate || function (decorators, target, key, desc) {\n                var c = arguments.length,\n                    r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc,\n                    d;\n                if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n                return c > 3 && r && Object.defineProperty(target, key, r), r;\n            };\n\n            __metadata = undefined && undefined.__metadata || function (k, v) {\n                if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n            };\n\n            __param = undefined && undefined.__param || function (paramIndex, decorator) {\n                return function (target, key) {\n                    decorator(target, key, paramIndex);\n                };\n            };\n\n            NavPush = (function () {\n                /**\n                 * TODO\n                 * @param {NavController} nav  TODO\n                 */\n\n                function NavPush(nav, registry) {\n                    _classCallCheck(this, NavPush);\n\n                    this.nav = nav;\n                    this.registry = registry;\n                    if (!nav) {\n                        console.error('nav-push must be within a NavController');\n                    }\n                }\n\n                /**\n                 * @private\n                 */\n\n                _createClass(NavPush, [{\n                    key: \"onClick\",\n                    value: function onClick() {\n                        var destination = undefined,\n                            params = undefined;\n                        if (this.instruction instanceof Array) {\n                            if (this.instruction.length > 2) {\n                                throw 'Too many [navPush] arguments, expects [View, { params }]';\n                            }\n                            destination = this.instruction[0];\n                            params = this.instruction[1] || this.params;\n                        } else {\n                            destination = this.instruction;\n                            params = this.params;\n                        }\n                        if (typeof destination === \"string\") {\n                            destination = this.registry.get(destination);\n                        }\n                        this.nav && this.nav.push(destination, params);\n                    }\n                }]);\n\n                return NavPush;\n            })();\n\n            _export(\"NavPush\", NavPush);\n\n            _export(\"NavPush\", NavPush = __decorate([Directive({\n                selector: '[navPush]',\n                inputs: ['instruction: navPush', 'params: navParams'],\n                host: {\n                    '(click)': 'onClick()',\n                    'role': 'link'\n                }\n            }), __param(0, Optional()), __metadata('design:paramtypes', [typeof (_a = typeof NavController !== 'undefined' && NavController) === 'function' && _a || Object, typeof (_b = typeof NavRegistry !== 'undefined' && NavRegistry) === 'function' && _b || Object])], NavPush));\n            /**\n             * @name NavPop\n             * @description\n             * Directive for declaratively pop the current page off from the navigation stack.\n             *\n             * @usage\n             * ```html\n             * <ion-content>\n             *  <div block button nav-pop>go back</div>\n             * </ion-content>\n             * ```\n             * This will go back one page in the navigation stack\n             *\n             * Similar to {@link /docs/api/components/nav/NavPush/ `NavPush` }\n             * @demo /docs/v3/demos/nav-push-pop/\n             * @see {@link /docs/v3/components#navigation Navigation Component Docs}\n             * @see {@link ../NavPush NavPush API Docs}\n             */\n\n            NavPop = (function () {\n                /**\n                 * TODO\n                 * @param {NavController} nav  TODO\n                 */\n\n                function NavPop(nav) {\n                    _classCallCheck(this, NavPop);\n\n                    this.nav = nav;\n                    if (!nav) {\n                        console.error('nav-pop must be within a NavController');\n                    }\n                }\n\n                /**\n                 * @private\n                 */\n\n                _createClass(NavPop, [{\n                    key: \"onClick\",\n                    value: function onClick() {\n                        this.nav && this.nav.pop();\n                    }\n                }]);\n\n                return NavPop;\n            })();\n\n            _export(\"NavPop\", NavPop);\n\n            _export(\"NavPop\", NavPop = __decorate([Directive({\n                selector: '[nav-pop]',\n                host: {\n                    '(click)': 'onClick()',\n                    'role': 'link'\n                }\n            }), __param(0, Optional()), __metadata('design:paramtypes', [typeof (_c = typeof NavController !== 'undefined' && NavController) === 'function' && _c || Object])], NavPop));\n        }\n    };\n});\nSystem.register(\"ionic/components/nav/nav-registry\", [], function (_export) {\n    /**\n     * @private\n     * Map of possible pages that can be navigated to using an Ionic NavController\n     */\n    \"use strict\";\n\n    var NavRegistry;\n\n    var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();\n\n    function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n    return {\n        setters: [],\n        execute: function () {\n            NavRegistry = (function () {\n                function NavRegistry() {\n                    var pages = arguments.length <= 0 || arguments[0] === undefined ? [] : arguments[0];\n\n                    _classCallCheck(this, NavRegistry);\n\n                    this._pages = new Map(pages.map(function (page) {\n                        return [page.name, page];\n                    }));\n                }\n\n                _createClass(NavRegistry, [{\n                    key: \"get\",\n                    value: function get(pageName) {\n                        return this._pages.get(pageName);\n                    }\n                }, {\n                    key: \"set\",\n                    value: function set(page) {\n                        this._pages.set(page.name, page);\n                    }\n                }]);\n\n                return NavRegistry;\n            })();\n\n            _export(\"NavRegistry\", NavRegistry);\n        }\n    };\n});\nSystem.register(\"ionic/components/nav/nav-router\", [\"angular2/core\", \"angular2/router\", \"./nav\"], function (_export) {\n    /**\n     * @private\n     */\n    \"use strict\";\n\n    var Directive, ElementRef, DynamicComponentLoader, Attribute, RouterOutlet, Router, Instruction, Nav, __decorate, __metadata, __param, NavRouter, ResolvedInstruction, _a, _b, _c, _d;\n\n    var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();\n\n    var _get = function get(_x, _x2, _x3) { var _again = true; _function: while (_again) { var object = _x, property = _x2, receiver = _x3; _again = false; if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { _x = parent; _x2 = property; _x3 = receiver; _again = true; desc = parent = undefined; continue _function; } } else if (\"value\" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } } };\n\n    function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n    function _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\n    return {\n        setters: [function (_angular2Core) {\n            Directive = _angular2Core.Directive;\n            ElementRef = _angular2Core.ElementRef;\n            DynamicComponentLoader = _angular2Core.DynamicComponentLoader;\n            Attribute = _angular2Core.Attribute;\n        }, function (_angular2Router) {\n            RouterOutlet = _angular2Router.RouterOutlet;\n            Router = _angular2Router.Router;\n            Instruction = _angular2Router.Instruction;\n        }, function (_nav) {\n            Nav = _nav.Nav;\n        }],\n        execute: function () {\n            __decorate = undefined && undefined.__decorate || function (decorators, target, key, desc) {\n                var c = arguments.length,\n                    r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc,\n                    d;\n                if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n                return c > 3 && r && Object.defineProperty(target, key, r), r;\n            };\n\n            __metadata = undefined && undefined.__metadata || function (k, v) {\n                if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n            };\n\n            __param = undefined && undefined.__param || function (paramIndex, decorator) {\n                return function (target, key) {\n                    decorator(target, key, paramIndex);\n                };\n            };\n\n            NavRouter = (function (_RouterOutlet) {\n                _inherits(NavRouter, _RouterOutlet);\n\n                /**\n                 * TODO\n                 * @param {ElementRef} _elementRef  TODO\n                 * @param {DynamicComponentLoader} _loader  TODO\n                 * @param {Router} _parentRouter  TODO\n                 * @param {string} nameAttr  Value of the element's 'name' attribute\n                 * @param {Nav} nav  TODO\n                 */\n\n                function NavRouter(_elementRef, _loader, _parentRouter, nameAttr, nav) {\n                    _classCallCheck(this, NavRouter);\n\n                    _get(Object.getPrototypeOf(NavRouter.prototype), \"constructor\", this).call(this, _elementRef, _loader, _parentRouter, nameAttr);\n                    // Nav is Ionic's NavController, which we injected into this class\n                    this.nav = nav;\n                    // register this router with Ionic's NavController\n                    // Ionic's NavController will call this NavRouter's \"stateChange\"\n                    // method when the NavController has...changed its state\n                    nav.registerRouter(this);\n                }\n\n                /**\n                 * @private\n                 * TODO\n                 * @param {ComponentInstruction} instruction  TODO\n                 */\n\n                _createClass(NavRouter, [{\n                    key: \"activate\",\n                    value: function activate(nextInstruction) {\n                        var previousInstruction = this._currentInstruction;\n                        this._currentInstruction = nextInstruction;\n                        var componentType = nextInstruction.componentType;\n                        var childRouter = this._parentRouter.childRouter(componentType);\n                        // prevent double navigations to the same view\n                        var lastView = this.nav.last();\n                        if (this.nav.isTransitioning() || lastView && lastView.componentType === componentType && lastView.params.data === nextInstruction.params) {\n                            return Promise.resolve();\n                        }\n                        // tell the NavController which componentType, and it's params, to navigate to\n                        return this.nav.push(componentType, nextInstruction.params);\n                    }\n                }, {\n                    key: \"reuse\",\n                    value: function reuse(nextInstruction) {\n                        return Promise.resolve();\n                    }\n\n                    /**\n                     * TODO\n                     * @param {TODO} type  TODO\n                     * @param {TODO} viewCtrl  TODO\n                     */\n                }, {\n                    key: \"stateChange\",\n                    value: function stateChange(type, viewCtrl) {\n                        // stateChange is called by Ionic's NavController\n                        // type could be \"push\" or \"pop\"\n                        // viewCtrl is Ionic's ViewController class, which has the properties \"componentType\" and \"params\"\n                        // only do an update if there's an actual view change\n                        if (!viewCtrl || this._activeViewId === viewCtrl.id) return;\n                        this._activeViewId = viewCtrl.id;\n                        // get the best PathRecognizer for this view's componentType\n                        var pathRecognizer = this.getPathRecognizerByComponent(viewCtrl.componentType);\n                        if (pathRecognizer) {\n                            // generate a componentInstruction from the view's PathRecognizer and params\n                            var componentInstruction = pathRecognizer.generate(viewCtrl.data);\n                            // create a ResolvedInstruction from the componentInstruction\n                            var instruction = new ResolvedInstruction(componentInstruction, null);\n                            this._parentRouter.navigateByInstruction(instruction);\n                        }\n                    }\n\n                    /**\n                     * TODO\n                     * @param {TODO} componentType  TODO\n                     * @returns {TODO} TODO\n                     */\n                }, {\n                    key: \"getPathRecognizerByComponent\",\n                    value: function getPathRecognizerByComponent(componentType) {\n                        // given a componentType, figure out the best PathRecognizer to use\n                        var rules = this._parentRouter.registry._rules;\n                        var pathRecognizer = null;\n                        rules.forEach(function (rule) {\n                            pathRecognizer = rule.matchers.find(function (matcherPathRecognizer) {\n                                return matcherPathRecognizer.handler.componentType === componentType;\n                            });\n                        });\n                        return pathRecognizer;\n                    }\n                }]);\n\n                return NavRouter;\n            })(RouterOutlet);\n\n            _export(\"NavRouter\", NavRouter);\n\n            _export(\"NavRouter\", NavRouter = __decorate([Directive({\n                selector: 'ion-nav'\n            }), __param(3, Attribute('name')), __metadata('design:paramtypes', [typeof (_a = typeof ElementRef !== 'undefined' && ElementRef) === 'function' && _a || Object, typeof (_b = typeof DynamicComponentLoader !== 'undefined' && DynamicComponentLoader) === 'function' && _b || Object, typeof (_c = typeof Router !== 'undefined' && Router) === 'function' && _c || Object, String, typeof (_d = typeof Nav !== 'undefined' && Nav) === 'function' && _d || Object])], NavRouter));\n            // TODO: hacked from\n            // https://github.com/angular/angular/blob/6ddfff5cd59aac9099aa6da5118c5598eea7ea11/modules/angular2/src/router/instruction.ts#L207\n\n            ResolvedInstruction = (function (_Instruction) {\n                _inherits(ResolvedInstruction, _Instruction);\n\n                function ResolvedInstruction(component, child, auxInstruction) {\n                    _classCallCheck(this, ResolvedInstruction);\n\n                    _get(Object.getPrototypeOf(ResolvedInstruction.prototype), \"constructor\", this).call(this);\n                    this.component = component;\n                    this.child = child;\n                    this.auxInstruction = auxInstruction;\n                }\n\n                _createClass(ResolvedInstruction, [{\n                    key: \"resolveComponent\",\n                    value: function resolveComponent() {\n                        return Promise.resolve(this.component);\n                    }\n                }]);\n\n                return ResolvedInstruction;\n            })(Instruction);\n        }\n    };\n});\nSystem.register(\"ionic/components/nav/nav\", [\"angular2/core\", \"../app/app\", \"../../config/config\", \"../../util/keyboard\", \"../../decorators/config-component\", \"./nav-controller\", \"./view-controller\"], function (_export) {\n    /**\n     * @name Nav\n     * @description\n     * _For a quick walkthrough of navigation in Ionic, check out the\n     * [Navigation section](../../../../components/#navigation) of the Component\n     * docs._\n     *\n     * Nav is a basic navigation controller component.  As a subclass of NavController\n     * you use it to navigate to pages in your app and manipulate the navigation stack.\n     * Nav automatically animates transitions between pages for you.\n     *\n     * For more information on using navigation controllers like Nav or [Tab](../../Tabs/Tab/),\n     * take a look at the [NavController API reference](../NavController/).\n     *\n     * You must set a root page (where page is any [@Page](../../config/Page/)\n     * component) to be loaded initially by any Nav you create, using\n     * the 'root' property:\n     *\n     * ```ts\n     * import {GettingStartedPage} from 'getting-started';\n     * @App({\n     *   template: `<ion-nav [root]=\"rootPage\"></ion-nav>`\n     * })\n     * class MyApp {\n     *   constructor(){\n     *     this.rootPage = GettingStartedPage;\n     *   }\n     * }\n     * ```\n     *\n     * <h2 id=\"back_navigation\">Back navigation</h2>\n     * If a [page](../NavController/#creating_pages) you navigate to has a [NavBar](../NavBar/),\n     * Nav will automatically add a back button to it if there is a page\n     * before the one you are navigating to in the navigation stack.\n     *\n     * Additionally, specifying the `swipe-back-enabled` property will allow you to\n     * swipe to go back:\n     * ```html\n     * <ion-nav swipe-back-enabled=\"false\" [root]=\"rootPage\"></ion-nav>\n     * ```\n     *\n     * Here is a diagram of how Nav animates smoothly between pages:\n     *\n     * <div class=\"highlight less-margin\">\n     *   <pre>\n     *                           +-------+\n     *                           |  App  |\n     *                           +---+---+\n     *                           &lt;ion-app&gt;\n     *                               |\n     *                  +------------+-------------+\n     *                  |   Ionic Nav Controller   |\n     *                  +------------+-------------+\n     *                           &lt;ion-nav&gt;\n     *                               |\n     *                               |\n     *             Page 3  +--------------------+                     LoginPage\n     *           Page 2  +--------------------+ |\n     *         Page 1  +--------------------+ | |              +--------------------+\n     *                 | | Header           |&lt;-----------------|       Login        |\n     *                 +--------------------+ | |              +--------------------+\n     *                 | | |                | | |              | Username:          |\n     *                 | | |                | | |              | Password:          |\n     *                 | | |  Page 3 is     | | |              |                    |\n     *                 | | |  only content  | | |              |                    |\n     *                 | | |                |&lt;-----------------|                    |\n     *                 | | |                | | |              |                    |\n     *                 | | |                | | |              |                    |\n     *                 | +------------------|-+ |              |                    |\n     *                 | | Footer           |-|-+              |                    |\n     *                 | +------------------|-+                |                    |\n     *                 +--------------------+                  +--------------------+\n     *\n     *           +--------------------+    +--------------------+    +--------------------+\n     *           | Header             |    | Content            |    | Content            |\n     *           +--------------------+    |                    |    |                    |\n     *           | Content            |    |                    |    |                    |\n     *           |                    |    |                    |    |                    |\n     *           |                    |    |                    |    |                    |\n     *           |                    |    |                    |    |                    |\n     *           |                    |    |                    |    |                    |\n     *           |                    |    |                    |    |                    |\n     *           |                    |    |                    |    |                    |\n     *           |                    |    |                    |    |                    |\n     *           |                    |    +--------------------+    |                    |\n     *           |                    |    | Footer             |    |                    |\n     *           +--------------------+    +--------------------+    +--------------------+\n     *\n     *   </pre>\n     * </div>\n     *\n     * @see {@link /docs/v3/components#navigation Navigation Component Docs}\n     */\n    \"use strict\";\n\n    var ChangeDetectorRef, ElementRef, Optional, NgZone, Compiler, AppViewManager, Renderer, IonicApp, Config, Keyboard, ConfigComponent, NavController, ViewController, __decorate, __metadata, __param, Nav, _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l;\n\n    var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();\n\n    var _get = function get(_x, _x2, _x3) { var _again = true; _function: while (_again) { var object = _x, property = _x2, receiver = _x3; _again = false; if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { _x = parent; _x2 = property; _x3 = receiver; _again = true; desc = parent = undefined; continue _function; } } else if (\"value\" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } } };\n\n    function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n    function _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\n    return {\n        setters: [function (_angular2Core) {\n            ChangeDetectorRef = _angular2Core.ChangeDetectorRef;\n            ElementRef = _angular2Core.ElementRef;\n            Optional = _angular2Core.Optional;\n            NgZone = _angular2Core.NgZone;\n            Compiler = _angular2Core.Compiler;\n            AppViewManager = _angular2Core.AppViewManager;\n            Renderer = _angular2Core.Renderer;\n        }, function (_appApp) {\n            IonicApp = _appApp.IonicApp;\n        }, function (_configConfig) {\n            Config = _configConfig.Config;\n        }, function (_utilKeyboard) {\n            Keyboard = _utilKeyboard.Keyboard;\n        }, function (_decoratorsConfigComponent) {\n            ConfigComponent = _decoratorsConfigComponent.ConfigComponent;\n        }, function (_navController) {\n            NavController = _navController.NavController;\n        }, function (_viewController) {\n            ViewController = _viewController.ViewController;\n        }],\n        execute: function () {\n            __decorate = undefined && undefined.__decorate || function (decorators, target, key, desc) {\n                var c = arguments.length,\n                    r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc,\n                    d;\n                if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n                return c > 3 && r && Object.defineProperty(target, key, r), r;\n            };\n\n            __metadata = undefined && undefined.__metadata || function (k, v) {\n                if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n            };\n\n            __param = undefined && undefined.__param || function (paramIndex, decorator) {\n                return function (target, key) {\n                    decorator(target, key, paramIndex);\n                };\n            };\n\n            Nav = (function (_NavController) {\n                _inherits(Nav, _NavController);\n\n                function Nav(hostNavCtrl, viewCtrl, app, config, keyboard, elementRef, compiler, viewManager, zone, renderer, cd) {\n                    _classCallCheck(this, Nav);\n\n                    _get(Object.getPrototypeOf(Nav.prototype), \"constructor\", this).call(this, hostNavCtrl, app, config, keyboard, elementRef, 'contents', compiler, viewManager, zone, renderer, cd);\n                    if (viewCtrl) {\n                        // an ion-nav can also act as an ion-page within a parent ion-nav\n                        // this would happen when an ion-nav nests a child ion-nav.\n                        viewCtrl.setContent(this);\n                        viewCtrl.setContentRef(elementRef);\n                    }\n                }\n\n                /**\n                 * @private\n                 */\n\n                _createClass(Nav, [{\n                    key: \"ngOnInit\",\n                    value: function ngOnInit() {\n                        _get(Object.getPrototypeOf(Nav.prototype), \"ngOnInit\", this).call(this);\n                        if (this.root) {\n                            if (typeof this.root !== 'function') {\n                                throw 'The [root] property in <ion-nav> must be given a reference to a component class from within the constructor.';\n                            }\n                            this.push(this.root);\n                        }\n                        // default the swipe back to be enabled\n                        this.isSwipeBackEnabled((this.swipeBackEnabled || '').toString() !== 'false');\n                    }\n                }]);\n\n                return Nav;\n            })(NavController);\n\n            _export(\"Nav\", Nav);\n\n            _export(\"Nav\", Nav = __decorate([ConfigComponent({\n                selector: 'ion-nav',\n                inputs: ['root'],\n                // defaultInputs: {\n                //   'swipeBackEnabled': true\n                // },\n                template: '<template #contents></template>'\n            }), __param(0, Optional()), __param(1, Optional()), __metadata('design:paramtypes', [typeof (_a = typeof NavController !== 'undefined' && NavController) === 'function' && _a || Object, typeof (_b = typeof ViewController !== 'undefined' && ViewController) === 'function' && _b || Object, typeof (_c = typeof IonicApp !== 'undefined' && IonicApp) === 'function' && _c || Object, typeof (_d = typeof Config !== 'undefined' && Config) === 'function' && _d || Object, typeof (_e = typeof Keyboard !== 'undefined' && Keyboard) === 'function' && _e || Object, typeof (_f = typeof ElementRef !== 'undefined' && ElementRef) === 'function' && _f || Object, typeof (_g = typeof Compiler !== 'undefined' && Compiler) === 'function' && _g || Object, typeof (_h = typeof AppViewManager !== 'undefined' && AppViewManager) === 'function' && _h || Object, typeof (_j = typeof NgZone !== 'undefined' && NgZone) === 'function' && _j || Object, typeof (_k = typeof Renderer !== 'undefined' && Renderer) === 'function' && _k || Object, typeof (_l = typeof ChangeDetectorRef !== 'undefined' && ChangeDetectorRef) === 'function' && _l || Object])], Nav));\n        }\n    };\n});\nSystem.register('ionic/components/nav/overlay-controller', ['../view-controller'], function (_export) {\n    'use strict';\n\n    var ViewController, OverlayController;\n\n    var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();\n\n    var _get = function get(_x2, _x3, _x4) { var _again = true; _function: while (_again) { var object = _x2, property = _x3, receiver = _x4; _again = false; if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { _x2 = parent; _x3 = property; _x4 = receiver; _again = true; desc = parent = undefined; continue _function; } } else if ('value' in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } } };\n\n    function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\n    function _inherits(subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\n    return {\n        setters: [function (_viewController) {\n            ViewController = _viewController.ViewController;\n        }],\n        execute: function () {\n            OverlayController = (function (_ViewController) {\n                _inherits(OverlayController, _ViewController);\n\n                function OverlayController(navCtrl, componentType) {\n                    var opts = arguments.length <= 2 || arguments[2] === undefined ? {} : arguments[2];\n\n                    _classCallCheck(this, OverlayController);\n\n                    _get(Object.getPrototypeOf(OverlayController.prototype), 'constructor', this).call(this, null, AlertCmp, opts);\n                    this.data.inputs = this.data.inputs || [];\n                    var buttons = this.data.buttons || [];\n                    this.data.buttons = [];\n                    var _iteratorNormalCompletion = true;\n                    var _didIteratorError = false;\n                    var _iteratorError = undefined;\n\n                    try {\n                        for (var _iterator = buttons[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {\n                            var button = _step.value;\n\n                            this.addButton(button);\n                        }\n                    } catch (err) {\n                        _didIteratorError = true;\n                        _iteratorError = err;\n                    } finally {\n                        try {\n                            if (!_iteratorNormalCompletion && _iterator['return']) {\n                                _iterator['return']();\n                            }\n                        } finally {\n                            if (_didIteratorError) {\n                                throw _iteratorError;\n                            }\n                        }\n                    }\n\n                    this.enterAnimationKey = 'alertEnter';\n                    this.leaveAnimationKey = 'alertLeave';\n                }\n\n                _createClass(OverlayController, [{\n                    key: 'setTitle',\n                    value: function setTitle(title) {\n                        this.data.title = title;\n                    }\n                }, {\n                    key: 'setSubTitle',\n                    value: function setSubTitle(subTitle) {\n                        this.data.subTitle = subTitle;\n                    }\n                }, {\n                    key: 'setBody',\n                    value: function setBody(body) {\n                        this.data.body = body;\n                    }\n                }, {\n                    key: 'addInput',\n                    value: function addInput(input) {\n                        input.value = isDefined(input.value) ? input.value : '';\n                        this.data.inputs.push(input);\n                    }\n                }, {\n                    key: 'addButton',\n                    value: function addButton(button) {\n                        if (typeof button === 'string') {\n                            button = {\n                                text: button\n                            };\n                        }\n                        this.data.buttons.push(button);\n                    }\n                }, {\n                    key: 'close',\n                    value: function close() {\n                        var index = this._nav.indexOf(this);\n                        this._nav.remove(index, { animateFirst: true });\n                    }\n                }, {\n                    key: 'onClose',\n                    value: function onClose(handler) {\n                        this.data.onClose = handler;\n                    }\n                }]);\n\n                return OverlayController;\n            })(ViewController);\n\n            _export('OverlayController', OverlayController);\n        }\n    };\n});\nSystem.register('ionic/components/nav/swipe-back', ['../../gestures/slide-edge-gesture'], function (_export) {\n    'use strict';\n\n    var SlideEdgeGesture, SwipeBackGesture;\n\n    var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();\n\n    var _get = function get(_x, _x2, _x3) { var _again = true; _function: while (_again) { var object = _x, property = _x2, receiver = _x3; _again = false; if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { _x = parent; _x2 = property; _x3 = receiver; _again = true; desc = parent = undefined; continue _function; } } else if ('value' in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } } };\n\n    function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\n    function _inherits(subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\n    return {\n        setters: [function (_gesturesSlideEdgeGesture) {\n            SlideEdgeGesture = _gesturesSlideEdgeGesture.SlideEdgeGesture;\n        }],\n        execute: function () {\n            SwipeBackGesture = (function (_SlideEdgeGesture) {\n                _inherits(SwipeBackGesture, _SlideEdgeGesture);\n\n                function SwipeBackGesture(element, opts, navCtrl) {\n                    if (opts === undefined) opts = {};\n\n                    _classCallCheck(this, SwipeBackGesture);\n\n                    _get(Object.getPrototypeOf(SwipeBackGesture.prototype), 'constructor', this).call(this, element, opts);\n                    // Can check corners through use of eg 'left top'\n                    this.edges = opts.edge.split(' ');\n                    this.threshold = opts.threshold;\n                    this.navCtrl = navCtrl;\n                }\n\n                _createClass(SwipeBackGesture, [{\n                    key: 'onSlideStart',\n                    value: function onSlideStart() {\n                        this.navCtrl.swipeBackStart();\n                    }\n                }, {\n                    key: 'onSlide',\n                    value: function onSlide(slide, ev) {\n                        this.navCtrl.swipeBackProgress(slide.distance / slide.max);\n                    }\n                }, {\n                    key: 'onSlideEnd',\n                    value: function onSlideEnd(slide, ev) {\n                        var shouldComplete = Math.abs(ev.velocityX) > 0.2 || Math.abs(slide.delta) > Math.abs(slide.max) * 0.5;\n                        // TODO: calculate a better playback rate depending on velocity and distance\n                        this.navCtrl.swipeBackEnd(shouldComplete, 1);\n                    }\n                }]);\n\n                return SwipeBackGesture;\n            })(SlideEdgeGesture);\n\n            _export('SwipeBackGesture', SwipeBackGesture);\n        }\n    };\n});\nSystem.register(\"ionic/components/nav/view-controller\", [\"angular2/core\", \"./nav-controller\"], function (_export) {\n    /**\n     * @name ViewController\n     * @description\n     * Access various features and information about the current view\n     * @usage\n     *  ```ts\n     *  import {Page, ViewController} from 'ionic/ionic';\n     *  @Page....\n     *  export class MyPage{\n     *   constructor(viewCtrl: ViewController){\n     *     this.viewCtrl = viewCtrl;\n     *   }\n     *  }\n     *  ```\n     */\n    \"use strict\";\n\n    var Output, EventEmitter, NavParams, __decorate, __metadata, ViewController, _a;\n\n    var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();\n\n    function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n    function ctrlFn(viewCtrl, fnName) {\n        if (viewCtrl.instance && viewCtrl.instance[fnName]) {\n            try {\n                viewCtrl.instance[fnName]();\n            } catch (e) {\n                console.error(fnName + ': ' + e.message);\n            }\n        }\n    }\n    return {\n        setters: [function (_angular2Core) {\n            Output = _angular2Core.Output;\n            EventEmitter = _angular2Core.EventEmitter;\n        }, function (_navController) {\n            NavParams = _navController.NavParams;\n        }],\n        execute: function () {\n            __decorate = undefined && undefined.__decorate || function (decorators, target, key, desc) {\n                var c = arguments.length,\n                    r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc,\n                    d;\n                if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n                return c > 3 && r && Object.defineProperty(target, key, r), r;\n            };\n\n            __metadata = undefined && undefined.__metadata || function (k, v) {\n                if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n            };\n\n            ViewController = (function () {\n                function ViewController(componentType) {\n                    var data = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1];\n\n                    _classCallCheck(this, ViewController);\n\n                    this._emitter = new EventEmitter();\n                    this.componentType = componentType;\n                    this.data = data;\n                    this.instance = {};\n                    this.state = 0;\n                    this._destroys = [];\n                    this._loaded = false;\n                    this.shouldDestroy = false;\n                    this.shouldCache = false;\n                    this.viewType = '';\n                    this._leavingOpts = null;\n                    this._onDismiss = null;\n                }\n\n                _createClass(ViewController, [{\n                    key: \"subscribe\",\n                    value: function subscribe(callback) {\n                        this._emitter.subscribe(callback);\n                    }\n                }, {\n                    key: \"emit\",\n                    value: function emit(data) {\n                        this._emitter.emit(data);\n                    }\n                }, {\n                    key: \"onDismiss\",\n                    value: function onDismiss(callback) {\n                        this._onDismiss = callback;\n                    }\n                }, {\n                    key: \"dismiss\",\n                    value: function dismiss(data) {\n                        this._onDismiss && this._onDismiss(data);\n                        return this._nav.remove(this._nav.indexOf(this), this._leavingOpts);\n                    }\n                }, {\n                    key: \"setNav\",\n                    value: function setNav(navCtrl) {\n                        this._nav = navCtrl;\n                    }\n                }, {\n                    key: \"getTransitionName\",\n                    value: function getTransitionName(direction) {\n                        return this._nav && this._nav.config.get('pageTransition');\n                    }\n                }, {\n                    key: \"getNavParams\",\n                    value: function getNavParams() {\n                        return new NavParams(this.data);\n                    }\n                }, {\n                    key: \"setLeavingOpts\",\n                    value: function setLeavingOpts(opts) {\n                        this._leavingOpts = opts;\n                    }\n\n                    /**\n                     * Check to see if you can go back in the navigation stack\n                     * @param {boolean} Check whether or not you can go back from this page\n                     * @returns {boolean} Returns if it's possible to go back from this Page.\n                     */\n                }, {\n                    key: \"enableBack\",\n                    value: function enableBack() {\n                        // update if it's possible to go back from this nav item\n                        if (this._nav) {\n                            var previousItem = this._nav.getPrevious(this);\n                            // the previous view may exist, but if it's about to be destroyed\n                            // it shouldn't be able to go back to\n                            return !!(previousItem && !previousItem.shouldDestroy);\n                        }\n                        return false;\n                    }\n\n                    /**\n                     * @private\n                     */\n                }, {\n                    key: \"setInstance\",\n                    value: function setInstance(instance) {\n                        this.instance = instance;\n                    }\n\n                    /**\n                     * @private\n                     */\n                }, {\n                    key: \"isRoot\",\n\n                    /**\n                     * @returns {boolean} Returns if this Page is the root page of the NavController.\n                     */\n                    value: function isRoot() {\n                        return this.index === 0;\n                    }\n\n                    /**\n                     * @private\n                     */\n                }, {\n                    key: \"addDestroy\",\n                    value: function addDestroy(destroyFn) {\n                        this._destroys.push(destroyFn);\n                    }\n\n                    /**\n                     * @private\n                     */\n                }, {\n                    key: \"destroy\",\n                    value: function destroy() {\n                        for (var i = 0; i < this._destroys.length; i++) {\n                            this._destroys[i]();\n                        }\n                        this._destroys = [];\n                    }\n\n                    /**\n                     * @private\n                     */\n                }, {\n                    key: \"setNavbarTemplateRef\",\n                    value: function setNavbarTemplateRef(templateRef) {\n                        this._nbTmpRef = templateRef;\n                    }\n\n                    /**\n                     * @private\n                     */\n                }, {\n                    key: \"getNavbarTemplateRef\",\n                    value: function getNavbarTemplateRef() {\n                        return this._nbTmpRef;\n                    }\n\n                    /**\n                     * @private\n                     */\n                }, {\n                    key: \"getNavbarViewRef\",\n                    value: function getNavbarViewRef() {\n                        return this._nbVwRef;\n                    }\n\n                    /**\n                     * @private\n                     */\n                }, {\n                    key: \"setNavbarViewRef\",\n                    value: function setNavbarViewRef(viewContainerRef) {\n                        this._nbVwRef = viewContainerRef;\n                    }\n\n                    /**\n                     * @private\n                     */\n                }, {\n                    key: \"setPageRef\",\n                    value: function setPageRef(elementRef) {\n                        this._pgRef = elementRef;\n                    }\n\n                    /**\n                     * @private\n                     * @returns {ElementRef} Returns the Page's ElementRef\n                     */\n                }, {\n                    key: \"pageRef\",\n                    value: function pageRef() {\n                        return this._pgRef;\n                    }\n\n                    /**\n                     * @private\n                     */\n                }, {\n                    key: \"setContentRef\",\n                    value: function setContentRef(elementRef) {\n                        this._cntRef = elementRef;\n                    }\n\n                    /**\n                     * @private\n                     * @returns {ElementRef} Returns the Page's Content ElementRef\n                     */\n                }, {\n                    key: \"contentRef\",\n                    value: function contentRef() {\n                        return this._cntRef;\n                    }\n\n                    /**\n                     * @private\n                     */\n                }, {\n                    key: \"setContent\",\n                    value: function setContent(directive) {\n                        this._cntDir = directive;\n                    }\n\n                    /**\n                     * @private\n                     * @returns {Component} Returns the Page's Content component reference.\n                     */\n                }, {\n                    key: \"getContent\",\n                    value: function getContent() {\n                        return this._cntDir;\n                    }\n\n                    /**\n                     * @private\n                     */\n                }, {\n                    key: \"setNavbar\",\n                    value: function setNavbar(directive) {\n                        this._nbDir = directive;\n                    }\n\n                    /**\n                     * @private\n                     */\n                }, {\n                    key: \"getNavbar\",\n                    value: function getNavbar() {\n                        return this._nbDir;\n                    }\n\n                    /**\n                     * You can find out of the current view has a Navbar or not. Be sure to wrap this in an `onPageWillEnter` method in order to make sure the view has rendered fully.\n                     *\n                     * ```typescript\n                     * export class Page1 {\n                     *  constructor(view: ViewController) {\n                     *    this.view = view\n                     *  }\n                     *  onPageWillEnter(){\n                     *    console.log('Do we have a Navbar?', this.view.hasNavbar());\n                     *  }\n                     *}\n                     * ```\n                     *\n                     * @returns {boolean} Returns a boolean if this Page has a navbar or not.\n                     */\n                }, {\n                    key: \"hasNavbar\",\n                    value: function hasNavbar() {\n                        return !!this.getNavbar();\n                    }\n\n                    /**\n                     * @private\n                     */\n                }, {\n                    key: \"navbarRef\",\n                    value: function navbarRef() {\n                        var navbar = this.getNavbar();\n                        return navbar && navbar.getElementRef();\n                    }\n\n                    /**\n                     * @private\n                     */\n                }, {\n                    key: \"titleRef\",\n                    value: function titleRef() {\n                        var navbar = this.getNavbar();\n                        return navbar && navbar.getTitleRef();\n                    }\n\n                    /**\n                     * @private\n                     */\n                }, {\n                    key: \"navbarItemRefs\",\n                    value: function navbarItemRefs() {\n                        var navbar = this.getNavbar();\n                        return navbar && navbar.getItemRefs();\n                    }\n\n                    /**\n                     * @private\n                     */\n                }, {\n                    key: \"backBtnRef\",\n                    value: function backBtnRef() {\n                        var navbar = this.getNavbar();\n                        return navbar && navbar.getBackButtonRef();\n                    }\n\n                    /**\n                     * @private\n                     */\n                }, {\n                    key: \"backBtnTextRef\",\n                    value: function backBtnTextRef() {\n                        var navbar = this.getNavbar();\n                        return navbar && navbar.getBackButtonTextRef();\n                    }\n\n                    /**\n                     * @private\n                     */\n                }, {\n                    key: \"navbarBgRef\",\n                    value: function navbarBgRef() {\n                        var navbar = this.getNavbar();\n                        return navbar && navbar.getBackgroundRef();\n                    }\n\n                    /**\n                     * You can change the text of the back button on a view-by-view basis.\n                     *\n                     * ```ts\n                     * export class MyClass{\n                     *  constructor(viewCtrl: ViewController){\n                     *    this.viewCtrl = viewCtrl\n                     *  }\n                     *  onPageWillEnter() {\n                     *    this.viewCtrl.setBackButtonText('Previous');\n                     *  }\n                     * }\n                     * ```\n                     * Make sure you use the view events when calling this method, otherwise the back-button will not have been created\n                     *\n                     * @param {string} backButtonText Set the back button text.\n                     */\n                }, {\n                    key: \"setBackButtonText\",\n                    value: function setBackButtonText(val) {\n                        var navbar = this.getNavbar();\n                        if (navbar) {\n                            navbar.bbText = val;\n                        }\n                    }\n\n                    /**\n                     * Set if the back button for the current view is visible or not. Be sure to wrap this in `onPageWillEnter` to make sure the has been compleltly rendered.\n                     * @param {boolean} Set if this Page's back button should show or not.\n                     */\n                }, {\n                    key: \"showBackButton\",\n                    value: function showBackButton(shouldShow) {\n                        var navbar = this.getNavbar();\n                        if (navbar) {\n                            navbar.hideBackButton = !shouldShow;\n                        }\n                    }\n\n                    /**\n                     * @private\n                     */\n                }, {\n                    key: \"isLoaded\",\n                    value: function isLoaded() {\n                        return this._loaded;\n                    }\n\n                    /**\n                     * @private\n                     * The view has loaded. This event only happens once per view being\n                     * created. If a view leaves but is cached, then this will not\n                     * fire again on a subsequent viewing. This method is a good place\n                     * to put your setup code for the view; however, it is not the\n                     * recommended method to use when a view becomes active.\n                     */\n                }, {\n                    key: \"loaded\",\n                    value: function loaded() {\n                        this._loaded = true;\n                        if (!this.shouldDestroy) {\n                            ctrlFn(this, 'onPageLoaded');\n                        }\n                    }\n\n                    /**\n                     * @private\n                     * The view is about to enter and become the active view.\n                     */\n                }, {\n                    key: \"willEnter\",\n                    value: function willEnter() {\n                        if (!this.shouldDestroy) {\n                            ctrlFn(this, 'onPageWillEnter');\n                        }\n                    }\n\n                    /**\n                     * @private\n                     * The view has fully entered and is now the active view. This\n                     * will fire, whether it was the first load or loaded from the cache.\n                     */\n                }, {\n                    key: \"didEnter\",\n                    value: function didEnter() {\n                        var navbar = this.getNavbar();\n                        navbar && navbar.didEnter();\n                        ctrlFn(this, 'onPageDidEnter');\n                    }\n\n                    /**\n                     * @private\n                     * The view has is about to leave and no longer be the active view.\n                     */\n                }, {\n                    key: \"willLeave\",\n                    value: function willLeave() {\n                        ctrlFn(this, 'onPageWillLeave');\n                    }\n\n                    /**\n                     * @private\n                     * The view has finished leaving and is no longer the active view. This\n                     * will fire, whether it is cached or unloaded.\n                     */\n                }, {\n                    key: \"didLeave\",\n                    value: function didLeave() {\n                        ctrlFn(this, 'onPageDidLeave');\n                    }\n\n                    /**\n                     * @private\n                     * The view is about to be destroyed and have its elements removed.\n                     */\n                }, {\n                    key: \"willUnload\",\n                    value: function willUnload() {\n                        ctrlFn(this, 'onPageWillUnload');\n                    }\n\n                    /**\n                     * @private\n                     * The view has been destroyed and its elements have been removed.\n                     */\n                }, {\n                    key: \"didUnload\",\n                    value: function didUnload() {\n                        ctrlFn(this, 'onPageDidUnload');\n                    }\n                }, {\n                    key: \"name\",\n                    get: function get() {\n                        return this.componentType ? this.componentType.name : '';\n                    }\n\n                    /**\n                     * You can find out the index of the current view is in the current navigation stack\n                     *\n                     * ```typescript\n                     *  export class Page1 {\n                     *    constructor(view: ViewController){\n                     *      this.view = view;\n                     *      // Just log out the index\n                     *      console.log(this.view.index);\n                     *    }\n                     *  }\n                     * ```\n                     *\n                     * @returns {Number} Returns the index of this page within its NavController.\n                     */\n                }, {\n                    key: \"index\",\n                    get: function get() {\n                        return this._nav ? this._nav.indexOf(this) : -1;\n                    }\n                }]);\n\n                return ViewController;\n            })();\n\n            _export(\"ViewController\", ViewController);\n\n            __decorate([Output(), __metadata('design:type', typeof (_a = typeof EventEmitter !== 'undefined' && EventEmitter) === 'function' && _a || Object)], ViewController.prototype, \"_emitter\", void 0);\n        }\n    };\n});\nSystem.register(\"ionic/components/overlay/overlay\", [\"angular2/core\"], function (_export) {\n    /**\n     * @private\n     */\n    \"use strict\";\n\n    var Directive, __decorate, __metadata, OverlayNav;\n\n    function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n    return {\n        setters: [function (_angular2Core) {\n            Directive = _angular2Core.Directive;\n        }],\n        execute: function () {\n            __decorate = undefined && undefined.__decorate || function (decorators, target, key, desc) {\n                var c = arguments.length,\n                    r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc,\n                    d;\n                if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n                return c > 3 && r && Object.defineProperty(target, key, r), r;\n            };\n\n            __metadata = undefined && undefined.__metadata || function (k, v) {\n                if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n            };\n\n            OverlayNav = function OverlayNav() {\n                _classCallCheck(this, OverlayNav);\n\n                // deprecated warning\n                console.warn('<ion-overlay> is no longer needed and can be safely removed.');\n                console.warn('https://github.com/ionic-team/ionic2/blob/master/CHANGELOG.md#overlay-refactor');\n                console.warn('See the v2 docs for an update on how overlays work.');\n            };\n\n            _export(\"OverlayNav\", OverlayNav);\n\n            _export(\"OverlayNav\", OverlayNav = __decorate([Directive({\n                selector: 'ion-overlay'\n            }), __metadata('design:paramtypes', [])], OverlayNav));\n        }\n    };\n});\nSystem.register(\"ionic/components/navbar/navbar\", [\"angular2/core\", \"../ion\", \"../icon/icon\", \"../toolbar/toolbar\", \"../../config/config\", \"../app/app\", \"../nav/view-controller\", \"../nav/nav-controller\"], function (_export) {\n    \"use strict\";\n\n    var Component, Directive, Optional, ElementRef, Renderer, TemplateRef, forwardRef, Inject, ViewContainerRef, Ion, Icon, ToolbarBase, Config, IonicApp, ViewController, NavController, __decorate, __metadata, __param, BackButton, BackButtonText, ToolbarBackground, Navbar, NavbarTemplate, _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m;\n\n    var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();\n\n    var _get = function get(_x, _x2, _x3) { var _again = true; _function: while (_again) { var object = _x, property = _x2, receiver = _x3; _again = false; if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { _x = parent; _x2 = property; _x3 = receiver; _again = true; desc = parent = undefined; continue _function; } } else if (\"value\" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } } };\n\n    function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n    function _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\n    return {\n        setters: [function (_angular2Core) {\n            Component = _angular2Core.Component;\n            Directive = _angular2Core.Directive;\n            Optional = _angular2Core.Optional;\n            ElementRef = _angular2Core.ElementRef;\n            Renderer = _angular2Core.Renderer;\n            TemplateRef = _angular2Core.TemplateRef;\n            forwardRef = _angular2Core.forwardRef;\n            Inject = _angular2Core.Inject;\n            ViewContainerRef = _angular2Core.ViewContainerRef;\n        }, function (_ion) {\n            Ion = _ion.Ion;\n        }, function (_iconIcon) {\n            Icon = _iconIcon.Icon;\n        }, function (_toolbarToolbar) {\n            ToolbarBase = _toolbarToolbar.ToolbarBase;\n        }, function (_configConfig) {\n            Config = _configConfig.Config;\n        }, function (_appApp) {\n            IonicApp = _appApp.IonicApp;\n        }, function (_navViewController) {\n            ViewController = _navViewController.ViewController;\n        }, function (_navNavController) {\n            NavController = _navNavController.NavController;\n        }],\n        execute: function () {\n            __decorate = undefined && undefined.__decorate || function (decorators, target, key, desc) {\n                var c = arguments.length,\n                    r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc,\n                    d;\n                if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n                return c > 3 && r && Object.defineProperty(target, key, r), r;\n            };\n\n            __metadata = undefined && undefined.__metadata || function (k, v) {\n                if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n            };\n\n            __param = undefined && undefined.__param || function (paramIndex, decorator) {\n                return function (target, key) {\n                    decorator(target, key, paramIndex);\n                };\n            };\n\n            BackButton = (function (_Ion) {\n                _inherits(BackButton, _Ion);\n\n                function BackButton(navCtrl, elementRef, navbar) {\n                    _classCallCheck(this, BackButton);\n\n                    _get(Object.getPrototypeOf(BackButton.prototype), \"constructor\", this).call(this, elementRef, null);\n                    this.navCtrl = navCtrl;\n                    navbar && navbar.setBackButtonRef(elementRef);\n                }\n\n                _createClass(BackButton, [{\n                    key: \"goBack\",\n                    value: function goBack(ev) {\n                        ev.stopPropagation();\n                        ev.preventDefault();\n                        this.navCtrl && this.navCtrl.pop();\n                    }\n                }]);\n\n                return BackButton;\n            })(Ion);\n\n            BackButton = __decorate([Directive({\n                selector: '.back-button',\n                host: {\n                    '(click)': 'goBack($event)'\n                }\n            }), __param(0, Optional()), __param(2, Optional()), __param(2, Inject(forwardRef(function () {\n                return Navbar;\n            }))), __metadata('design:paramtypes', [typeof (_a = typeof NavController !== 'undefined' && NavController) === 'function' && _a || Object, typeof (_b = typeof ElementRef !== 'undefined' && ElementRef) === 'function' && _b || Object, Navbar])], BackButton);\n\n            BackButtonText = function BackButtonText(elementRef, navbar) {\n                _classCallCheck(this, BackButtonText);\n\n                navbar.setBackButtonTextRef(elementRef);\n            };\n\n            BackButtonText = __decorate([Directive({\n                selector: '.back-button-text'\n            }), __param(1, Inject(forwardRef(function () {\n                return Navbar;\n            }))), __metadata('design:paramtypes', [typeof (_c = typeof ElementRef !== 'undefined' && ElementRef) === 'function' && _c || Object, Navbar])], BackButtonText);\n\n            ToolbarBackground = function ToolbarBackground(elementRef, navbar) {\n                _classCallCheck(this, ToolbarBackground);\n\n                navbar.setBackgroundRef(elementRef);\n            };\n\n            ToolbarBackground = __decorate([Directive({\n                selector: '.toolbar-background'\n            }), __param(1, Inject(forwardRef(function () {\n                return Navbar;\n            }))), __metadata('design:paramtypes', [typeof (_d = typeof ElementRef !== 'undefined' && ElementRef) === 'function' && _d || Object, Navbar])], ToolbarBackground);\n            /**\n             * @name Navbar\n             * @description\n             * Navbar is a global level toolbar that gets updated every time a page gets\n             * loaded. You can pass the navbar a `ion-title` or any number of buttons.\n             *\n             * @usage\n             * ```html\n             * <ion-navbar *navbar>\n             *\n             *   <ion-buttons>\n             *     <button (click)=\"toggleItems()\">\n             *       toggle\n             *     </button>\n             *   </ion-buttons>\n             *\n             *   <ion-title>\n             *     Page Title\n             *   </ion-title>\n             *\n             *   <ion-buttons>\n             *     <button (click)=\"openModal()\">\n             *       Modal\n             *     </button>\n             *   </ion-buttons>\n             * </ion-navbar>\n             * ```\n             *\n             * @see {@link ../../toolbar/Toolbar/ Toolbar API Docs}\n             */\n\n            Navbar = (function (_ToolbarBase) {\n                _inherits(Navbar, _ToolbarBase);\n\n                function Navbar(app, viewCtrl, elementRef, config, renderer) {\n                    _classCallCheck(this, Navbar);\n\n                    _get(Object.getPrototypeOf(Navbar.prototype), \"constructor\", this).call(this, elementRef, config);\n                    this.app = app;\n                    this.renderer = renderer;\n                    viewCtrl && viewCtrl.setNavbar(this);\n                    this.bbIcon = config.get('backButtonIcon');\n                    this.bbText = config.get('backButtonText');\n                }\n\n                /**\n                 * @private\n                 */\n\n                _createClass(Navbar, [{\n                    key: \"ngOnInit\",\n                    value: function ngOnInit() {\n                        _get(Object.getPrototypeOf(Navbar.prototype), \"ngOnInit\", this).call(this);\n                        var hideBackButton = this.hideBackButton;\n                        if (typeof hideBackButton === 'string') {\n                            this.hideBackButton = hideBackButton === '' || hideBackButton === 'true';\n                        }\n                    }\n\n                    /**\n                     * @private\n                     */\n                }, {\n                    key: \"getBackButtonRef\",\n                    value: function getBackButtonRef() {\n                        return this.bbRef;\n                    }\n\n                    /**\n                     * @private\n                     */\n                }, {\n                    key: \"setBackButtonRef\",\n                    value: function setBackButtonRef(backButtonElementRef) {\n                        this.bbRef = backButtonElementRef;\n                    }\n\n                    /**\n                     * @private\n                     */\n                }, {\n                    key: \"getBackButtonTextRef\",\n                    value: function getBackButtonTextRef() {\n                        return this.bbtRef;\n                    }\n\n                    /**\n                     * @private\n                     */\n                }, {\n                    key: \"setBackButtonTextRef\",\n                    value: function setBackButtonTextRef(backButtonTextElementRef) {\n                        this.bbtRef = backButtonTextElementRef;\n                    }\n\n                    /**\n                     * @private\n                     */\n                }, {\n                    key: \"setBackgroundRef\",\n                    value: function setBackgroundRef(backgrouneElementRef) {\n                        this.bgRef = backgrouneElementRef;\n                    }\n\n                    /**\n                     * @private\n                     */\n                }, {\n                    key: \"getBackgroundRef\",\n                    value: function getBackgroundRef() {\n                        return this.bgRef;\n                    }\n\n                    /**\n                     * @private\n                     */\n                }, {\n                    key: \"didEnter\",\n                    value: function didEnter() {\n                        try {\n                            this.app.setTitle(this.getTitleText());\n                        } catch (e) {\n                            console.error(e);\n                        }\n                    }\n\n                    /**\n                     * @private\n                     */\n                }, {\n                    key: \"setHidden\",\n                    value: function setHidden(isHidden) {\n                        this._hidden = isHidden;\n                    }\n                }]);\n\n                return Navbar;\n            })(ToolbarBase);\n\n            _export(\"Navbar\", Navbar);\n\n            _export(\"Navbar\", Navbar = __decorate([Component({\n                selector: 'ion-navbar',\n                template: '<div class=\"toolbar-background\"></div>' + '<button class=\"back-button bar-button bar-button-default\" [hidden]=\"hideBackButton\">' + '<ion-icon class=\"back-button-icon\" [name]=\"bbIcon\"></ion-icon>' + '<span class=\"back-button-text\">' + '<span class=\"back-default\">{{bbText}}</span>' + '</span>' + '</button>' + '<ng-content select=\"[menuToggle],ion-buttons[left]\"></ng-content>' + '<ng-content select=\"ion-buttons[start]\"></ng-content>' + '<ng-content select=\"ion-buttons[end],ion-buttons[right]\"></ng-content>' + '<div class=\"toolbar-content\">' + '<ng-content></ng-content>' + '</div>',\n                host: {\n                    '[hidden]': '_hidden',\n                    'class': 'toolbar'\n                },\n                inputs: ['hideBackButton'],\n                directives: [BackButton, BackButtonText, Icon, ToolbarBackground]\n            }), __param(1, Optional()), __metadata('design:paramtypes', [typeof (_e = typeof IonicApp !== 'undefined' && IonicApp) === 'function' && _e || Object, typeof (_f = typeof ViewController !== 'undefined' && ViewController) === 'function' && _f || Object, typeof (_g = typeof ElementRef !== 'undefined' && ElementRef) === 'function' && _g || Object, typeof (_h = typeof Config !== 'undefined' && Config) === 'function' && _h || Object, typeof (_j = typeof Renderer !== 'undefined' && Renderer) === 'function' && _j || Object])], Navbar));\n            /**\n             * @private\n             * Used to find and register headers in a view, and this directive's\n             * content will be moved up to the common navbar location, and created\n             * using the same context as the view's content area.\n            */\n\n            NavbarTemplate = function NavbarTemplate(viewContainerRef, templateRef, viewCtrl) {\n                _classCallCheck(this, NavbarTemplate);\n\n                if (viewCtrl) {\n                    viewCtrl.setNavbarTemplateRef(templateRef);\n                    viewCtrl.setNavbarViewRef(viewContainerRef);\n                }\n            };\n\n            _export(\"NavbarTemplate\", NavbarTemplate);\n\n            _export(\"NavbarTemplate\", NavbarTemplate = __decorate([Directive({\n                selector: 'template[navbar]'\n            }), __param(2, Optional()), __metadata('design:paramtypes', [typeof (_k = typeof ViewContainerRef !== 'undefined' && ViewContainerRef) === 'function' && _k || Object, typeof (_l = typeof TemplateRef !== 'undefined' && TemplateRef) === 'function' && _l || Object, typeof (_m = typeof ViewController !== 'undefined' && ViewController) === 'function' && _m || Object])], NavbarTemplate));\n        }\n    };\n});\nSystem.register(\"ionic/components/radio/radio\", [\"angular2/core\", \"angular2/common\", \"../list/list\", \"../../util/form\", \"../../util/util\"], function (_export) {\n    /**\n     * @description\n     * A radio button with a unique value. Note that all `<ion-radio>` components\n     * must be wrapped within a `<ion-list radio-group>`, and there must be at\n     * least two `<ion-radio>` components within the radio group.\n     *\n     * See the [Angular 2 Docs](https://angular.io/docs/js/latest/api/forms/) for more info on forms and input.\n     *\n     * @usage\n     * ```html\n     * <ion-radio value=\"my-value\" checked=\"true\">\n     *   Radio Label\n     * </ion-radio>\n     * ```\n     * @demo /docs/v3/demos/radio/\n     * @see {@link /docs/v3/components#radio Radio Component Docs}\n     */\n    \"use strict\";\n\n    var Component, Directive, ElementRef, Renderer, Optional, Input, Output, HostListener, ContentChildren, ContentChild, EventEmitter, NgControl, ListHeader, Form, isDefined, __decorate, __metadata, __param, RadioButton, RadioGroup, radioGroupIds, _a, _b, _c, _d, _e, _f, _g, _h;\n\n    var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();\n\n    function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n    return {\n        setters: [function (_angular2Core) {\n            Component = _angular2Core.Component;\n            Directive = _angular2Core.Directive;\n            ElementRef = _angular2Core.ElementRef;\n            Renderer = _angular2Core.Renderer;\n            Optional = _angular2Core.Optional;\n            Input = _angular2Core.Input;\n            Output = _angular2Core.Output;\n            HostListener = _angular2Core.HostListener;\n            ContentChildren = _angular2Core.ContentChildren;\n            ContentChild = _angular2Core.ContentChild;\n            EventEmitter = _angular2Core.EventEmitter;\n        }, function (_angular2Common) {\n            NgControl = _angular2Common.NgControl;\n        }, function (_listList) {\n            ListHeader = _listList.ListHeader;\n        }, function (_utilForm) {\n            Form = _utilForm.Form;\n        }, function (_utilUtil) {\n            isDefined = _utilUtil.isDefined;\n        }],\n        execute: function () {\n            __decorate = undefined && undefined.__decorate || function (decorators, target, key, desc) {\n                var c = arguments.length,\n                    r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc,\n                    d;\n                if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n                return c > 3 && r && Object.defineProperty(target, key, r), r;\n            };\n\n            __metadata = undefined && undefined.__metadata || function (k, v) {\n                if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n            };\n\n            __param = undefined && undefined.__param || function (paramIndex, decorator) {\n                return function (target, key) {\n                    decorator(target, key, paramIndex);\n                };\n            };\n\n            RadioButton = (function () {\n                function RadioButton(_form, _renderer, _elementRef) {\n                    _classCallCheck(this, RadioButton);\n\n                    this._form = _form;\n                    this._renderer = _renderer;\n                    this._elementRef = _elementRef;\n                    this.value = '';\n                    this.checked = false;\n                    this.disabled = false;\n                    this.select = new EventEmitter();\n                    _form.register(this);\n                }\n\n                /**\n                 * @private\n                 */\n\n                _createClass(RadioButton, [{\n                    key: \"ngOnInit\",\n                    value: function ngOnInit() {\n                        if (!this.id) {\n                            this.id = 'rb-' + this._form.nextId();\n                            this._renderer.setElementAttribute(this._elementRef, 'id', this.id);\n                        }\n                        this.labelId = 'lbl-' + this.id;\n                        this._renderer.setElementAttribute(this._elementRef, 'aria-labelledby', this.labelId);\n                        var checked = this.checked;\n                        if (typeof checked === 'string') {\n                            this.checked = checked === '' || checked === 'true';\n                        }\n                        this.isChecked = this.checked;\n                        this._renderer.setElementAttribute(this._elementRef, 'checked', null);\n                    }\n\n                    /**\n                     * @private\n                     */\n                }, {\n                    key: \"_click\",\n                    value: function _click() {\n                        console.debug('RadioButton, select', this.value);\n                        this.select.emit(this);\n                    }\n                }, {\n                    key: \"ngOnDestroy\",\n\n                    /**\n                     * @private\n                     */\n                    value: function ngOnDestroy() {\n                        this._form.deregister(this);\n                    }\n                }, {\n                    key: \"isChecked\",\n                    set: function set(isChecked) {\n                        this._renderer.setElementAttribute(this._elementRef, 'aria-checked', isChecked);\n                    }\n                }]);\n\n                return RadioButton;\n            })();\n\n            _export(\"RadioButton\", RadioButton);\n\n            __decorate([Input(), __metadata('design:type', String)], RadioButton.prototype, \"value\", void 0);\n            __decorate([Input(), __metadata('design:type', Object)], RadioButton.prototype, \"checked\", void 0);\n            __decorate([Input(), __metadata('design:type', Boolean)], RadioButton.prototype, \"disabled\", void 0);\n            __decorate([Input(), __metadata('design:type', String)], RadioButton.prototype, \"id\", void 0);\n            __decorate([Output(), __metadata('design:type', typeof (_a = typeof EventEmitter !== 'undefined' && EventEmitter) === 'function' && _a || Object)], RadioButton.prototype, \"select\", void 0);\n            __decorate([HostListener('click'), __metadata('design:type', Function), __metadata('design:paramtypes', []), __metadata('design:returntype', void 0)], RadioButton.prototype, \"_click\", null);\n            _export(\"RadioButton\", RadioButton = __decorate([Component({\n                selector: 'ion-radio',\n                host: {\n                    'role': 'radio',\n                    'class': 'item',\n                    'tappable': '',\n                    'tabindex': 0,\n                    '[attr.aria-disabled]': 'disabled'\n                },\n                template: '<div class=\"item-inner\">' + '<ion-item-content id=\"{{labelId}}\">' + '<ng-content></ng-content>' + '</ion-item-content>' + '<div class=\"radio-media\">' + '<div class=\"radio-icon\"></div>' + '</div>' + '</div>'\n            }), __metadata('design:paramtypes', [typeof (_b = typeof Form !== 'undefined' && Form) === 'function' && _b || Object, typeof (_c = typeof Renderer !== 'undefined' && Renderer) === 'function' && _c || Object, typeof (_d = typeof ElementRef !== 'undefined' && ElementRef) === 'function' && _d || Object])], RadioButton));\n            /**\n             * A radio group is a group of radio components.\n             *\n             * Selecting a radio button in the group unselects all others in the group.\n             *\n             * New radios can be registered dynamically.\n             *\n             * See the [Angular 2 Docs](https://angular.io/docs/js/latest/api/forms/) for more info on forms and input.\n             *\n             * @usage\n             * ```html\n             * <ion-list radio-group ngControl=\"autoManufacturers\">\n             *\n             *   <ion-list-header>\n             *     Auto Manufacturers\n             *   </ion-list-header>\n             *\n             *   <ion-radio value=\"cord\">\n             *     Cord\n             *   </ion-radio>\n             *\n             *   <ion-radio value=\"duesenberg\" checked=\"true\">\n             *     Duesenberg\n             *   </ion-radio>\n             *\n             *   <ion-radio value=\"hudson\">\n             *     Hudson\n             *   </ion-radio>\n             *\n             *   <ion-radio value=\"packard\">\n             *     Packard\n             *   </ion-radio>\n             *\n             *   <ion-radio value=\"studebaker\">\n             *     Studebaker\n             *   </ion-radio>\n             *\n             *   <ion-radio value=\"tucker\">\n             *     Tucker\n             *   </ion-radio>\n             *\n             * </ion-list>\n             * ```\n             * @demo /docs/v3/demos/radio/\n             * @see {@link /docs/v3/components#radio Radio Component Docs}\n            */\n\n            RadioGroup = (function () {\n                function RadioGroup(ngControl, _renderer, _elementRef) {\n                    _classCallCheck(this, RadioGroup);\n\n                    this._renderer = _renderer;\n                    this._elementRef = _elementRef;\n                    this.change = new EventEmitter();\n                    this.id = ++radioGroupIds;\n                    if (ngControl) {\n                        ngControl.valueAccessor = this;\n                    }\n                }\n\n                /**\n                 * @private\n                 * Angular2 Forms API method called by the model (Control) on change to update\n                 * the checked value.\n                 * https://github.com/angular/angular/blob/master/modules/angular2/src/forms/directives/shared.ts#L34\n                 */\n\n                _createClass(RadioGroup, [{\n                    key: \"writeValue\",\n                    value: function writeValue(value) {\n                        this.value = isDefined(value) ? value : '';\n                        if (this._buttons) {\n                            var buttons = this._buttons.toArray();\n                            var _iteratorNormalCompletion = true;\n                            var _didIteratorError = false;\n                            var _iteratorError = undefined;\n\n                            try {\n                                for (var _iterator = buttons[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {\n                                    var button = _step.value;\n\n                                    var isChecked = button.value === this.value;\n                                    button.isChecked = isChecked;\n                                    if (isChecked) {\n                                        this._renderer.setElementAttribute(this._elementRef, 'aria-activedescendant', button.id);\n                                    }\n                                }\n                            } catch (err) {\n                                _didIteratorError = true;\n                                _iteratorError = err;\n                            } finally {\n                                try {\n                                    if (!_iteratorNormalCompletion && _iterator[\"return\"]) {\n                                        _iterator[\"return\"]();\n                                    }\n                                } finally {\n                                    if (_didIteratorError) {\n                                        throw _iteratorError;\n                                    }\n                                }\n                            }\n                        }\n                    }\n\n                    /**\n                     * @private\n                     */\n                }, {\n                    key: \"onChange\",\n                    value: function onChange(val) {}\n                    // TODO: figure the whys and the becauses\n\n                    /**\n                     * @private\n                     */\n\n                }, {\n                    key: \"onTouched\",\n                    value: function onTouched(val) {}\n                    // TODO: figure the whys and the becauses\n\n                    /**\n                     * @private\n                     * Angular2 Forms API method called by the view (NgControl) to register the\n                     * onChange event handler that updates the model (Control).\n                     * https://github.com/angular/angular/blob/master/modules/angular2/src/forms/directives/shared.ts#L27\n                     * @param {Function} fn  the onChange event handler.\n                     */\n\n                }, {\n                    key: \"registerOnChange\",\n                    value: function registerOnChange(fn) {\n                        this.onChange = fn;\n                    }\n\n                    /**\n                     * @private\n                     * Angular2 Forms API method called by the the view (NgControl) to register\n                     * the onTouched event handler that marks the model (Control) as touched.\n                     * @param {Function} fn  onTouched event handler.\n                     */\n                }, {\n                    key: \"registerOnTouched\",\n                    value: function registerOnTouched(fn) {\n                        this.onTouched = fn;\n                    }\n\n                    /**\n                     * @private\n                     */\n                }, {\n                    key: \"ngAfterContentInit\",\n                    value: function ngAfterContentInit() {\n                        var _this = this;\n\n                        var header = this._header;\n                        if (header) {\n                            if (!header.id) {\n                                header.id = 'rg-hdr-' + this.id;\n                            }\n                            this._renderer.setElementAttribute(this._elementRef, 'aria-describedby', header.id);\n                        }\n                        var buttons = this._buttons.toArray();\n                        var _iteratorNormalCompletion2 = true;\n                        var _didIteratorError2 = false;\n                        var _iteratorError2 = undefined;\n\n                        try {\n                            var _loop = function () {\n                                var button = _step2.value;\n\n                                button.select.subscribe(function () {\n                                    _this.writeValue(button.value);\n                                    _this.onChange(button.value);\n                                    _this.change.emit(_this);\n                                });\n                                if (isDefined(_this.value)) {\n                                    var isChecked = button.value === _this.value || button.checked;\n                                    button.isChecked = isChecked;\n                                    if (isChecked) {\n                                        _this.writeValue(button.value);\n                                        //this.onChange(button.value);\n                                        _this._renderer.setElementAttribute(_this._elementRef, 'aria-activedescendant', button.id);\n                                    }\n                                }\n                            };\n\n                            for (var _iterator2 = buttons[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {\n                                _loop();\n                            }\n                        } catch (err) {\n                            _didIteratorError2 = true;\n                            _iteratorError2 = err;\n                        } finally {\n                            try {\n                                if (!_iteratorNormalCompletion2 && _iterator2[\"return\"]) {\n                                    _iterator2[\"return\"]();\n                                }\n                            } finally {\n                                if (_didIteratorError2) {\n                                    throw _iteratorError2;\n                                }\n                            }\n                        }\n                    }\n                }]);\n\n                return RadioGroup;\n            })();\n\n            _export(\"RadioGroup\", RadioGroup);\n\n            __decorate([Output(), __metadata('design:type', typeof (_e = typeof EventEmitter !== 'undefined' && EventEmitter) === 'function' && _e || Object)], RadioGroup.prototype, \"change\", void 0);\n            __decorate([ContentChildren(RadioButton), __metadata('design:type', Object)], RadioGroup.prototype, \"_buttons\", void 0);\n            __decorate([ContentChild(ListHeader), __metadata('design:type', Object)], RadioGroup.prototype, \"_header\", void 0);\n            _export(\"RadioGroup\", RadioGroup = __decorate([Directive({\n                selector: '[radio-group]',\n                host: {\n                    '[attr.aria-activedescendant]': 'activeId',\n                    'role': 'radiogroup'\n                }\n            }), __param(0, Optional()), __metadata('design:paramtypes', [typeof (_f = typeof NgControl !== 'undefined' && NgControl) === 'function' && _f || Object, typeof (_g = typeof Renderer !== 'undefined' && Renderer) === 'function' && _g || Object, typeof (_h = typeof ElementRef !== 'undefined' && ElementRef) === 'function' && _h || Object])], RadioGroup));\n            radioGroupIds = -1;\n        }\n    };\n});\nSystem.register(\"ionic/components/scroll/pull-to-refresh\", [\"angular2/core\", \"angular2/common\", \"../content/content\", \"../../util\", \"../../util/dom\"], function (_export) {\n    /**\n     * @name Refresher\n     * @description\n     * Allows you to add pull-to-refresh to an Content component.\n     * Place it as the first child of your Content or Scroll element.\n     *\n     * When refreshing is complete, call `refresher.complete()` from your controller.\n     *\n     *  @usage\n     *  ```html\n     *  <ion-content>\n     *    <ion-refresher (starting)=\"doStarting()\"\n     *                   (refresh)=\"doRefresh($event, refresher)\"\n     *                   (pulling)=\"doPulling($event, amt)\">\n     *    </ion-refresher>\n     *\n     *  </ion-content>\n    \n     *  ```\n     *\n     *  ```ts\n     *  export class MyClass {\n     *  constructor(){}\n     *    doRefresh(refresher) {\n     *      console.log('Refreshing!', refresher);\n     *\n     *      setTimeout(() => {\n     *        console.log('Pull to refresh complete!', refresher);\n     *        refresher.complete();\n     *      })\n     *    }\n     *\n     *    doStarting() {\n     *      console.log('Pull started!');\n     *    }\n     *\n     *    doPulling(amt) {\n     *      console.log('You have pulled', amt);\n     *    }\n     *  }\n     *  ```\n     *  @demo /docs/v3/demos/refresher/\n     *\n     *  @property {string} [pullingIcon] - the icon you want to display when you begin to pull down\n     *  @property {string} [pullingText] - the text you want to display when you begin to pull down\n     *  @property {string} [refreshingIcon] - the icon you want to display when performing a refresh\n     *  @property {string} [refreshingText] - the text you want to display when performing a refresh\n     *\n     *  @property {any} (refresh) - the methond on your class you want to perform when you refreshing\n     *  @property {any} (starting) - the methond on your class you want to perform when you start pulling down\n     *  @property {any} (pulling) - the methond on your class you want to perform when you are pulling down\n     *\n     */\n    \"use strict\";\n\n    var Component, ElementRef, EventEmitter, Host, NgIf, NgClass, Content, util, raf, CSS, __decorate, __metadata, __param, Refresher, _a, _b;\n\n    var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();\n\n    function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n    return {\n        setters: [function (_angular2Core) {\n            Component = _angular2Core.Component;\n            ElementRef = _angular2Core.ElementRef;\n            EventEmitter = _angular2Core.EventEmitter;\n            Host = _angular2Core.Host;\n        }, function (_angular2Common) {\n            NgIf = _angular2Common.NgIf;\n            NgClass = _angular2Common.NgClass;\n        }, function (_contentContent) {\n            Content = _contentContent.Content;\n        }, function (_util) {\n            util = _util;\n        }, function (_utilDom) {\n            raf = _utilDom.raf;\n            CSS = _utilDom.CSS;\n        }],\n        execute: function () {\n            __decorate = undefined && undefined.__decorate || function (decorators, target, key, desc) {\n                var c = arguments.length,\n                    r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc,\n                    d;\n                if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n                return c > 3 && r && Object.defineProperty(target, key, r), r;\n            };\n\n            __metadata = undefined && undefined.__metadata || function (k, v) {\n                if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n            };\n\n            __param = undefined && undefined.__param || function (paramIndex, decorator) {\n                return function (target, key) {\n                    decorator(target, key, paramIndex);\n                };\n            };\n\n            Refresher = (function () {\n                /**\n                 * @private\n                 * @param {Content} content  TODO\n                 * @param {ElementRef} elementRef  TODO\n                 */\n\n                function Refresher(content, element) {\n                    _classCallCheck(this, Refresher);\n\n                    this.ele = element.nativeElement;\n                    this.ele.classList.add('content');\n                    this.content = content;\n                    this.refresh = new EventEmitter('refresh');\n                    this.starting = new EventEmitter('starting');\n                    this.pulling = new EventEmitter('pulling');\n                }\n\n                /**\n                 * @private\n                 */\n\n                _createClass(Refresher, [{\n                    key: \"ngOnInit\",\n                    value: function ngOnInit() {\n                        this.initEvents();\n                    }\n\n                    /**\n                     * @private\n                     * Initialize touch and scroll event listeners.\n                     */\n                }, {\n                    key: \"initEvents\",\n                    value: function initEvents() {\n                        var sp = this.content.getNativeElement();\n                        var sc = this.content.scrollElement;\n                        this.isDragging = false;\n                        this.isOverscrolling = false;\n                        this.dragOffset = 0;\n                        this.lastOverscroll = 0;\n                        this.ptrThreshold = 60;\n                        this.activated = false;\n                        this.scrollTime = 500;\n                        this.startY = null;\n                        this.deltaY = null;\n                        this.canOverscroll = true;\n                        this.scrollHost = sp;\n                        this.scrollChild = sc;\n                        util.defaults(this, {\n                            pullingIcon: 'ion-android-arrow-down',\n                            refreshingIcon: 'ion-ionic'\n                        });\n                        this.showSpinner = !util.isDefined(this.refreshingIcon) && this.spinner != 'none';\n                        this.showIcon = util.isDefined(this.refreshingIcon);\n                        this._touchMoveListener = this._handleTouchMove.bind(this);\n                        this._touchEndListener = this._handleTouchEnd.bind(this);\n                        this._handleScrollListener = this._handleScroll.bind(this);\n                        sc.addEventListener('touchmove', this._touchMoveListener);\n                        sc.addEventListener('touchend', this._touchEndListener);\n                        sc.addEventListener('scroll', this._handleScrollListener);\n                    }\n\n                    /**\n                     * @private\n                     */\n                }, {\n                    key: \"onDehydrate\",\n                    value: function onDehydrate() {\n                        console.log('DEHYDRATION');\n                        var sc = this.content.scrollElement;\n                        sc.removeEventListener('touchmove', this._touchMoveListener);\n                        sc.removeEventListener('touchend', this._touchEndListener);\n                        sc.removeEventListener('scroll', this._handleScrollListener);\n                    }\n\n                    /**\n                     * @private\n                     * @param {TODO} val  TODO\n                     */\n                }, {\n                    key: \"overscroll\",\n                    value: function overscroll(val) {\n                        this.scrollChild.style[CSS.transform] = 'translateY(' + val + 'px)';\n                        this.lastOverscroll = val;\n                    }\n\n                    /**\n                     * @private\n                     * @param {TODO} target  TODO\n                     * @param {TODO} newScrollTop  TODO\n                     */\n                }, {\n                    key: \"nativescroll\",\n                    value: function nativescroll(target, newScrollTop) {\n                        // creates a scroll event that bubbles, can be cancelled, and with its view\n                        // and detail property initialized to window and 1, respectively\n                        target.scrollTop = newScrollTop;\n                        var e = document.createEvent(\"UIEvents\");\n                        e.initUIEvent(\"scroll\", true, true, window, 1);\n                        target.dispatchEvent(e);\n                    }\n\n                    /**\n                     * @private\n                     * @param {TODO} enabled  TODO\n                     */\n                }, {\n                    key: \"setScrollLock\",\n                    value: function setScrollLock(enabled) {\n                        var _this = this;\n\n                        // set the scrollbar to be position:fixed in preparation to overscroll\n                        // or remove it so the app can be natively scrolled\n                        if (enabled) {\n                            raf(function () {\n                                _this.scrollChild.classList.add('overscroll');\n                                _this.show();\n                            });\n                        } else {\n                            raf(function () {\n                                _this.scrollChild.classList.remove('overscroll');\n                                _this.hide();\n                                _this.deactivate();\n                            });\n                        }\n                    }\n\n                    /**\n                     * @private\n                     */\n                }, {\n                    key: \"activate\",\n                    value: function activate() {\n                        //this.ele.classList.add('active');\n                        this.isActive = true;\n                        //this.starting.next();\n                    }\n\n                    /**\n                     * @private\n                     */\n                }, {\n                    key: \"deactivate\",\n                    value: function deactivate() {\n                        var _this2 = this;\n\n                        // give tail 150ms to finish\n                        setTimeout(function () {\n                            _this2.isActive = false;\n                            _this2.isRefreshing = false;\n                            _this2.isRefreshingTail = false;\n                            // deactivateCallback\n                            if (_this2.activated) _this2.activated = false;\n                        }, 150);\n                    }\n\n                    /**\n                     * @private\n                     */\n                }, {\n                    key: \"start\",\n                    value: function start() {\n                        // startCallback\n                        this.isRefreshing = true;\n                        this.refresh.next(this);\n                        //$scope.$onRefresh();\n                    }\n\n                    /**\n                     * @private\n                     */\n                }, {\n                    key: \"show\",\n                    value: function show() {\n                        // showCallback\n                        this.ele.classList.remove('invisible');\n                    }\n\n                    /**\n                     * @private\n                     */\n                }, {\n                    key: \"hide\",\n                    value: function hide() {\n                        // showCallback\n                        this.ele.classList.add('invisible');\n                    }\n\n                    /**\n                     * @private\n                     */\n                }, {\n                    key: \"tail\",\n                    value: function tail() {\n                        // tailCallback\n                        this.ele.classList.add('refreshing-tail');\n                    }\n\n                    /**\n                     * @private\n                     */\n                }, {\n                    key: \"complete\",\n                    value: function complete() {\n                        var _this3 = this;\n\n                        setTimeout(function () {\n                            raf(_this3.tail.bind(_this3));\n                            // scroll back to home during tail animation\n                            _this3.scrollTo(0, _this3.scrollTime, _this3.deactivate.bind(_this3));\n                            // return to native scrolling after tail animation has time to finish\n                            setTimeout(function () {\n                                if (_this3.isOverscrolling) {\n                                    _this3.isOverscrolling = false;\n                                    _this3.setScrollLock(false);\n                                }\n                            }, _this3.scrollTime);\n                        }, this.scrollTime);\n                    }\n\n                    /**\n                     * @private\n                     * @param {TODO} Y  TODO\n                     * @param {TODO} duration  TODO\n                     * @param {Function} callback  TODO\n                     */\n                }, {\n                    key: \"scrollTo\",\n                    value: function scrollTo(Y, duration, callback) {\n                        // scroll animation loop w/ easing\n                        // credit https://gist.github.com/dezinezync/5487119\n                        var start = Date.now(),\n                            from = this.lastOverscroll;\n                        if (from === Y) {\n                            callback();\n                            return; /* Prevent scrolling to the Y point if already there */\n                        }\n                        // decelerating to zero velocity\n                        function easeOutCubic(t) {\n                            return --t * t * t + 1;\n                        }\n                        // scroll loop\n                        function scroll() {\n                            var currentTime = Date.now(),\n                                time = Math.min(1, (currentTime - start) / duration),\n\n                            // where .5 would be 50% of time on a linear scale easedT gives a\n                            // fraction based on the easing method\n                            easedT = easeOutCubic(time);\n                            this.overscroll(parseInt(easedT * (Y - from) + from, 10));\n                            if (time < 1) {\n                                raf(scroll.bind(this));\n                            } else {\n                                if (Y < 5 && Y > -5) {\n                                    this.isOverscrolling = false;\n                                    this.setScrollLock(false);\n                                }\n                                callback && callback();\n                            }\n                        }\n                        // start scroll loop\n                        raf(scroll.bind(this));\n                    }\n\n                    /**\n                     * @private\n                     * TODO\n                     * @param {Event} e  TODO\n                     */\n                }, {\n                    key: \"_handleTouchMove\",\n                    value: function _handleTouchMove(e) {\n                        //console.log('TOUCHMOVE', e);\n                        // if multitouch or regular scroll event, get out immediately\n                        if (!this.canOverscroll || e.touches.length > 1) {\n                            return;\n                        }\n                        //if this is a new drag, keep track of where we start\n                        if (this.startY === null) {\n                            this.startY = parseInt(e.touches[0].screenY, 10);\n                        }\n                        // how far have we dragged so far?\n                        this.deltaY = parseInt(e.touches[0].screenY, 10) - this.startY;\n                        // if we've dragged up and back down in to native scroll territory\n                        if (this.deltaY - this.dragOffset <= 0 || this.scrollHost.scrollTop !== 0) {\n                            if (this.isOverscrolling) {\n                                this.isOverscrolling = false;\n                                this.setScrollLock(false);\n                            }\n                            if (this.isDragging) {\n                                this.nativescroll(this.scrollHost, parseInt(this.deltaY - this.dragOffset, 10) * -1);\n                            }\n                            // if we're not at overscroll 0 yet, 0 out\n                            if (this.lastOverscroll !== 0) {\n                                this.overscroll(0);\n                            }\n                            return;\n                        } else if (this.deltaY > 0 && this.scrollHost.scrollTop === 0 && !this.isOverscrolling) {\n                            // starting overscroll, but drag started below scrollTop 0, so we need to offset the position\n                            this.dragOffset = this.deltaY;\n                        }\n                        // prevent native scroll events while overscrolling\n                        e.preventDefault();\n                        // if not overscrolling yet, initiate overscrolling\n                        if (!this.isOverscrolling) {\n                            this.isOverscrolling = true;\n                            this.setScrollLock(true);\n                        }\n                        this.isDragging = true;\n                        // overscroll according to the user's drag so far\n                        this.overscroll(parseInt((this.deltaY - this.dragOffset) / 3, 10));\n                        // Pass an incremental pull amount to the EventEmitter\n                        this.pulling.next(this.lastOverscroll);\n                        // update the icon accordingly\n                        if (!this.activated && this.lastOverscroll > this.ptrThreshold) {\n                            this.activated = true;\n                            raf(this.activate.bind(this));\n                        } else if (this.activated && this.lastOverscroll < this.ptrThreshold) {\n                            this.activated = false;\n                            raf(this.deactivate.bind(this));\n                        }\n                    }\n\n                    /**\n                     * @private\n                     * TODO\n                     * @param {Event} e  TODO\n                     */\n                }, {\n                    key: \"_handleTouchEnd\",\n                    value: function _handleTouchEnd(e) {\n                        console.log('TOUCHEND', e);\n                        // if this wasn't an overscroll, get out immediately\n                        if (!this.canOverscroll && !this.isDragging) {\n                            return;\n                        }\n                        // reset Y\n                        this.startY = null;\n                        // the user has overscrolled but went back to native scrolling\n                        if (!this.isDragging) {\n                            this.dragOffset = 0;\n                            this.isOverscrolling = false;\n                            this.setScrollLock(false);\n                        } else {\n                            this.isDragging = false;\n                            this.dragOffset = 0;\n                            // the user has scroll far enough to trigger a refresh\n                            if (this.lastOverscroll > this.ptrThreshold) {\n                                this.start();\n                                this.scrollTo(this.ptrThreshold, this.scrollTime);\n                            } else {\n                                this.scrollTo(0, this.scrollTime, this.deactivate.bind(this));\n                                this.isOverscrolling = false;\n                            }\n                        }\n                    }\n\n                    /**\n                     * @private\n                     * TODO\n                     * @param {Event} e  TODO\n                     */\n                }, {\n                    key: \"_handleScroll\",\n                    value: function _handleScroll(e) {\n                        console.log('SCROLL', e.target.scrollTop);\n                    }\n                }]);\n\n                return Refresher;\n            })();\n\n            _export(\"Refresher\", Refresher);\n\n            _export(\"Refresher\", Refresher = __decorate([Component({\n                selector: 'ion-refresher',\n                inputs: ['pullingIcon', 'pullingText', 'refreshingIcon', 'refreshingText', 'spinner', 'disablePullingRotation'],\n                outputs: ['refresh', 'starting', 'pulling'],\n                host: {\n                    '[class.active]': 'isActive',\n                    '[class.refreshing]': 'isRefreshing',\n                    '[class.refreshingTail]': 'isRefreshingTail'\n                },\n                template: '<div class=\"refresher-content\" [class.refresher-with-text]=\"pullingText || refreshingText\">' + '<div class=\"icon-pulling\">' + '<i class=\"icon\" [ngClass]=\"pullingIcon\"></i>' + '</div>' + '<div class=\"text-pulling\" [innerHTML]=\"pullingText\" *ngIf=\"pullingText\"></div>' + '<div class=\"icon-refreshing\">' + '<i class=\"icon\" [ngClass]=\"refreshingIcon\"></i>' + '</div>' + '<div class=\"text-refreshing\" [innerHTML]=\"refreshingText\" *ngIf=\"refreshingText\"></div>' + '</div>',\n                directives: [NgIf, NgClass]\n            }), __param(0, Host()), __metadata('design:paramtypes', [typeof (_a = typeof Content !== 'undefined' && Content) === 'function' && _a || Object, typeof (_b = typeof ElementRef !== 'undefined' && ElementRef) === 'function' && _b || Object])], Refresher));\n        }\n    };\n});\nSystem.register(\"ionic/components/scroll/scroll\", [\"angular2/core\", \"../ion\", \"../../config/config\"], function (_export) {\n    /**\n     * @name Scroll\n     * @description\n     * Scroll is a non-flexboxed scroll area that can scroll horizontally or vertically. `ion-Scroll` Can be used in places were you may not need a full page scroller, but a highly customized one, such as image scubber or comment scroller.\n     * @usage\n     * ```html\n     * <ion-scroll scroll-x=\"true\">\n     * </ion-scroll>\n     *\n     * <ion-scroll scroll-y=\"true\">\n     * </ion-scroll>\n     *\n     * <ion-scroll scroll-x=\"true\" scroll-y=\"true\">\n     * </ion-scroll>\n     * ```\n     *@property {boolean} [scroll-x] - whether to enable scrolling along the X axis\n     *@property {boolean} [scroll-y] - whether to enable scrolling along the Y axis\n     *@property {boolean} [zoom] - whether to enable zooming\n     *@property {number} [max-zoom] - set the max zoom amount for ion-scroll\n     * @demo /docs/v3/demos/scroll/\n     */\n    \"use strict\";\n\n    var Component, ElementRef, Ion, Config, __decorate, __metadata, Scroll, _a, _b;\n\n    var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();\n\n    var _get = function get(_x, _x2, _x3) { var _again = true; _function: while (_again) { var object = _x, property = _x2, receiver = _x3; _again = false; if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { _x = parent; _x2 = property; _x3 = receiver; _again = true; desc = parent = undefined; continue _function; } } else if (\"value\" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } } };\n\n    function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n    function _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\n    return {\n        setters: [function (_angular2Core) {\n            Component = _angular2Core.Component;\n            ElementRef = _angular2Core.ElementRef;\n        }, function (_ion) {\n            Ion = _ion.Ion;\n        }, function (_configConfig) {\n            Config = _configConfig.Config;\n        }],\n        execute: function () {\n            __decorate = undefined && undefined.__decorate || function (decorators, target, key, desc) {\n                var c = arguments.length,\n                    r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc,\n                    d;\n                if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n                return c > 3 && r && Object.defineProperty(target, key, r), r;\n            };\n\n            __metadata = undefined && undefined.__metadata || function (k, v) {\n                if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n            };\n\n            Scroll = (function (_Ion) {\n                _inherits(Scroll, _Ion);\n\n                function Scroll(elementRef, Config) {\n                    _classCallCheck(this, Scroll);\n\n                    _get(Object.getPrototypeOf(Scroll.prototype), \"constructor\", this).call(this, elementRef, Config);\n                    this.maxScale = 3;\n                    this.zoomDuration = 250;\n                }\n\n                /**\n                 * @private\n                 */\n\n                _createClass(Scroll, [{\n                    key: \"ngOnInit\",\n                    value: function ngOnInit() {\n                        this.scrollElement = this.getNativeElement().children[0];\n                    }\n\n                    /**\n                     * Add a scroll event handler to the scroll element if it exists.\n                     * @param {Function} handler  The scroll handler to add to the scroll element.\n                     * @returns {?Function} a function to remove the specified handler, otherwise\n                     * undefined if the scroll element doesn't exist.\n                     */\n                }, {\n                    key: \"addScrollEventListener\",\n                    value: function addScrollEventListener(handler) {\n                        var _this = this;\n\n                        if (!this.scrollElement) {\n                            return;\n                        }\n                        this.scrollElement.addEventListener('scroll', handler);\n                        return function () {\n                            _this.scrollElement.removeEventListener('scroll', handler);\n                        };\n                    }\n                }]);\n\n                return Scroll;\n            })(Ion);\n\n            _export(\"Scroll\", Scroll);\n\n            _export(\"Scroll\", Scroll = __decorate([Component({\n                selector: 'ion-scroll',\n                inputs: ['scrollX', 'scrollY', 'zoom', 'maxZoom'],\n                host: {\n                    '[class.scroll-x]': 'scrollX',\n                    '[class.scroll-y]': 'scrollY'\n                },\n                template: '<scroll-content>' + '<div class=\"scroll-zoom-wrapper\">' + '<ng-content></ng-content>' + '</div>' + '</scroll-content>'\n            }), __metadata('design:paramtypes', [typeof (_a = typeof ElementRef !== 'undefined' && ElementRef) === 'function' && _a || Object, typeof (_b = typeof Config !== 'undefined' && Config) === 'function' && _b || Object])], Scroll));\n        }\n    };\n});\nSystem.register(\"ionic/components/searchbar/searchbar\", [\"angular2/core\", \"angular2/common\", \"../ion\", \"../../config/config\", \"../icon/icon\", \"../button/button\", \"../../util/util\"], function (_export) {\n    /**\n    * @private\n    */\n    \"use strict\";\n\n    var ElementRef, Component, Directive, HostBinding, HostListener, ViewChild, Input, Output, EventEmitter, Optional, NgIf, NgClass, NgControl, FORM_DIRECTIVES, Ion, Config, Icon, Button, isDefined, __decorate, __metadata, __param, SearchbarInput, Searchbar, _a, _b, _c, _d, _e, _f, _g, _h, _j;\n\n    var _get = function get(_x, _x2, _x3) { var _again = true; _function: while (_again) { var object = _x, property = _x2, receiver = _x3; _again = false; if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { _x = parent; _x2 = property; _x3 = receiver; _again = true; desc = parent = undefined; continue _function; } } else if (\"value\" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } } };\n\n    var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();\n\n    function _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\n    function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n    return {\n        setters: [function (_angular2Core) {\n            ElementRef = _angular2Core.ElementRef;\n            Component = _angular2Core.Component;\n            Directive = _angular2Core.Directive;\n            HostBinding = _angular2Core.HostBinding;\n            HostListener = _angular2Core.HostListener;\n            ViewChild = _angular2Core.ViewChild;\n            Input = _angular2Core.Input;\n            Output = _angular2Core.Output;\n            EventEmitter = _angular2Core.EventEmitter;\n            Optional = _angular2Core.Optional;\n        }, function (_angular2Common) {\n            NgIf = _angular2Common.NgIf;\n            NgClass = _angular2Common.NgClass;\n            NgControl = _angular2Common.NgControl;\n            FORM_DIRECTIVES = _angular2Common.FORM_DIRECTIVES;\n        }, function (_ion) {\n            Ion = _ion.Ion;\n        }, function (_configConfig) {\n            Config = _configConfig.Config;\n        }, function (_iconIcon) {\n            Icon = _iconIcon.Icon;\n        }, function (_buttonButton) {\n            Button = _buttonButton.Button;\n        }, function (_utilUtil) {\n            isDefined = _utilUtil.isDefined;\n        }],\n        execute: function () {\n            __decorate = undefined && undefined.__decorate || function (decorators, target, key, desc) {\n                var c = arguments.length,\n                    r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc,\n                    d;\n                if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n                return c > 3 && r && Object.defineProperty(target, key, r), r;\n            };\n\n            __metadata = undefined && undefined.__metadata || function (k, v) {\n                if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n            };\n\n            __param = undefined && undefined.__param || function (paramIndex, decorator) {\n                return function (target, key) {\n                    decorator(target, key, paramIndex);\n                };\n            };\n\n            SearchbarInput = (function () {\n                function SearchbarInput(_elementRef) {\n                    _classCallCheck(this, SearchbarInput);\n\n                    this._elementRef = _elementRef;\n                }\n\n                _createClass(SearchbarInput, [{\n                    key: \"stopInput\",\n                    value: function stopInput(ev) {\n                        event.preventDefault();\n                        event.stopPropagation();\n                    }\n                }]);\n\n                return SearchbarInput;\n            })();\n\n            _export(\"SearchbarInput\", SearchbarInput);\n\n            __decorate([HostListener('input', ['$event']), __metadata('design:type', Function), __metadata('design:paramtypes', [Object]), __metadata('design:returntype', void 0)], SearchbarInput.prototype, \"stopInput\", null);\n            _export(\"SearchbarInput\", SearchbarInput = __decorate([Directive({\n                selector: '.searchbar-input'\n            }), __metadata('design:paramtypes', [typeof (_a = typeof ElementRef !== 'undefined' && ElementRef) === 'function' && _a || Object])], SearchbarInput));\n            /**\n             * @name Searchbar\n             * @module ionic\n             * @description\n             * Manages the display of a Searchbar which can be used to search or filter items.\n             *\n             * @usage\n             * ```html\n             * <ion-searchbar [(ngModel)]=\"defaultSearch\" (input)=\"triggerInput($event)\" (cancel)=\"onCancelSearchbar($event)\" (clear)=\"onClearSearchbar($event)\"></ion-searchbar>\n             * ```\n             *\n             * @property {string} [cancelButtonText=Cancel] - Sets the cancel button text to the value passed in\n             * @property {boolean} [hideCancelButton=false] - Hides the cancel button\n             * @property {string} [placeholder=Search] - Sets input placeholder to the value passed in\n             *\n             * @property {Any} [input] - Expression to evaluate when the Searchbar input has changed including cleared\n             * @property {Any} [keydown] - Expression to evaluate when a key is pushed down in the Searchbar input\n             * @property {Any} [keypress] - Expression to evaluate when a character is inserted in the Searchbar input\n             * @property {Any} [keyup] - Expression to evaluate when a key is released in the Searchbar input\n             * @property {Any} [blur] - Expression to evaluate when the Searchbar input has blurred\n             * @property {Any} [focus] - Expression to evaluate when the Searchbar input has focused\n             * @property {Any} [cancel] - Expression to evaluate when the cancel button is clicked\n             * @property {Any} [clear] - Expression to evaluate when the clear input button is clicked\n             *\n             * @see {@link /docs/v3/components#searchbar Searchbar Component Docs}\n             */\n\n            Searchbar = (function (_Ion) {\n                _inherits(Searchbar, _Ion);\n\n                function Searchbar(_elementRef, _config, ngControl) {\n                    _classCallCheck(this, Searchbar);\n\n                    _get(Object.getPrototypeOf(Searchbar.prototype), \"constructor\", this).call(this, _elementRef, _config);\n                    this._elementRef = _elementRef;\n                    this._config = _config;\n                    /**\n                     * @private\n                     */\n                    this.input = new EventEmitter();\n                    /**\n                     * @private\n                     */\n                    this.blur = new EventEmitter();\n                    /**\n                     * @private\n                     */\n                    this.focus = new EventEmitter();\n                    /**\n                     * @private\n                     */\n                    this.cancel = new EventEmitter();\n                    /**\n                     * @private\n                     */\n                    this.clear = new EventEmitter();\n                    this.value = '';\n                    this.blurInput = true;\n                    this.onChange = function (_) {};\n                    this.onTouched = function () {};\n                    // If the user passed a ngControl we need to set the valueAccessor\n                    if (ngControl) {\n                        ngControl.valueAccessor = this;\n                    }\n                }\n\n                /**\n                 * @private\n                 * On Initialization check for attributes\n                 */\n\n                _createClass(Searchbar, [{\n                    key: \"ngOnInit\",\n                    value: function ngOnInit() {\n                        this.mode = this._config.get('mode');\n                        var hideCancelButton = this.hideCancelButton;\n                        if (typeof hideCancelButton === 'string') {\n                            this.hideCancelButton = hideCancelButton === '' || hideCancelButton === 'true';\n                        }\n                        this.cancelButtonText = this.cancelButtonText || 'Cancel';\n                        this.placeholder = this.placeholder || 'Search';\n                        if (this.ngModel) this.value = this.ngModel;\n                        this.onChange(this.value);\n                        this.shouldLeftAlign = this.value && this.value.trim() != '';\n                        // Using querySelector instead of searchbarInput because at this point it doesn't exist\n                        this.inputElement = this._elementRef.nativeElement.querySelector('.searchbar-input');\n                        this.searchIconElement = this._elementRef.nativeElement.querySelector('.searchbar-search-icon');\n                        this.setElementLeft();\n                    }\n\n                    /**\n                     * @private\n                     * After View Initialization check the value\n                     */\n                }, {\n                    key: \"ngAfterViewInit\",\n                    value: function ngAfterViewInit() {\n                        // If the user passes an undefined variable to ngModel this will warn\n                        // and set the value to an empty string\n                        if (!isDefined(this.value)) {\n                            console.warn('Searchbar was passed an undefined value in ngModel. Please make sure the variable is defined.');\n                            this.value = '';\n                            this.onChange(this.value);\n                        }\n                    }\n\n                    /**\n                     * @private\n                     * Determines whether or not to add style to the element\n                     * to center it properly (ios only)\n                     */\n                }, {\n                    key: \"setElementLeft\",\n                    value: function setElementLeft() {\n                        if (this.mode !== 'ios') return;\n                        if (this.shouldLeftAlign) {\n                            this.inputElement.removeAttribute(\"style\");\n                            this.searchIconElement.removeAttribute(\"style\");\n                        } else {\n                            this.addElementLeft();\n                        }\n                    }\n\n                    /**\n                     * @private\n                     * Calculates the amount of padding/margin left for the elements\n                     * in order to center them based on the placeholder width\n                     */\n                }, {\n                    key: \"addElementLeft\",\n                    value: function addElementLeft() {\n                        // Create a dummy span to get the placeholder width\n                        var tempSpan = document.createElement('span');\n                        tempSpan.innerHTML = this.placeholder;\n                        document.body.appendChild(tempSpan);\n                        // Get the width of the span then remove it\n                        var textWidth = tempSpan.offsetWidth;\n                        tempSpan.remove();\n                        // Set the input padding left\n                        var inputLeft = \"calc(50% - \" + textWidth / 2 + \"px)\";\n                        this.inputElement.style.paddingLeft = inputLeft;\n                        // Set the icon margin left\n                        var iconLeft = \"calc(50% - \" + (textWidth / 2 + this.searchIconElement.offsetWidth + 15) + \"px)\";\n                        this.searchIconElement.style.marginLeft = iconLeft;\n                    }\n\n                    /**\n                     * @private\n                     * Update the Searchbar input value when the input changes\n                     */\n                }, {\n                    key: \"inputChanged\",\n                    value: function inputChanged(ev) {\n                        this.value = ev.target.value;\n                        this.onChange(this.value);\n                        this.input.emit(this);\n                    }\n\n                    /**\n                     * @private\n                     * Sets the Searchbar to focused and aligned left on input focus.\n                     */\n                }, {\n                    key: \"inputFocused\",\n                    value: function inputFocused() {\n                        this.focus.emit(this);\n                        this.isFocused = true;\n                        this.shouldLeftAlign = true;\n                        this.setElementLeft();\n                    }\n\n                    /**\n                     * @private\n                     * Sets the Searchbar to not focused and checks if it should align left\n                     * based on whether there is a value in the searchbar or not.\n                     */\n                }, {\n                    key: \"inputBlurred\",\n                    value: function inputBlurred() {\n                        // blurInput determines if it should blur\n                        // if we are clearing the input we still want to stay focused in the input\n                        if (this.blurInput == false) {\n                            this.searchbarInput._elementRef.nativeElement.focus();\n                            this.blurInput = true;\n                            return;\n                        }\n                        this.blur.emit(this);\n                        this.isFocused = false;\n                        this.shouldLeftAlign = this.value && this.value.trim() != '';\n                        this.setElementLeft();\n                    }\n\n                    /**\n                     * @private\n                     * Clears the input field and triggers the control change.\n                     */\n                }, {\n                    key: \"clearInput\",\n                    value: function clearInput() {\n                        this.clear.emit(this);\n                        this.value = '';\n                        this.onChange(this.value);\n                        this.input.emit(this);\n                        this.blurInput = false;\n                    }\n\n                    /**\n                     * @private\n                     * Clears the input field and tells the input to blur since\n                     * the clearInput function doesn't want the input to blur\n                     * then calls the custom cancel function if the user passed one in.\n                     */\n                }, {\n                    key: \"cancelSearchbar\",\n                    value: function cancelSearchbar() {\n                        this.cancel.emit(this);\n                        this.clearInput();\n                        this.blurInput = true;\n                    }\n\n                    /**\n                     * @private\n                     * Write a new value to the element.\n                     */\n                }, {\n                    key: \"writeValue\",\n                    value: function writeValue(value) {\n                        this.value = value;\n                    }\n\n                    /**\n                     * @private\n                     * Set the function to be called when the control receives a change event.\n                     */\n                }, {\n                    key: \"registerOnChange\",\n                    value: function registerOnChange(fn) {\n                        this.onChange = fn;\n                    }\n\n                    /**\n                     * @private\n                     * Set the function to be called when the control receives a touch event.\n                     */\n                }, {\n                    key: \"registerOnTouched\",\n                    value: function registerOnTouched(fn) {\n                        this.onTouched = fn;\n                    }\n                }]);\n\n                return Searchbar;\n            })(Ion);\n\n            _export(\"Searchbar\", Searchbar);\n\n            __decorate([ViewChild(SearchbarInput), __metadata('design:type', Object)], Searchbar.prototype, \"searchbarInput\", void 0);\n            __decorate([Input(), __metadata('design:type', String)], Searchbar.prototype, \"cancelButtonText\", void 0);\n            __decorate([Input(), __metadata('design:type', Object)], Searchbar.prototype, \"hideCancelButton\", void 0);\n            __decorate([Input(), __metadata('design:type', String)], Searchbar.prototype, \"placeholder\", void 0);\n            __decorate([Input(), __metadata('design:type', Object)], Searchbar.prototype, \"ngModel\", void 0);\n            __decorate([Output(), __metadata('design:type', typeof (_b = typeof EventEmitter !== 'undefined' && EventEmitter) === 'function' && _b || Object)], Searchbar.prototype, \"input\", void 0);\n            __decorate([Output(), __metadata('design:type', typeof (_c = typeof EventEmitter !== 'undefined' && EventEmitter) === 'function' && _c || Object)], Searchbar.prototype, \"blur\", void 0);\n            __decorate([Output(), __metadata('design:type', typeof (_d = typeof EventEmitter !== 'undefined' && EventEmitter) === 'function' && _d || Object)], Searchbar.prototype, \"focus\", void 0);\n            __decorate([Output(), __metadata('design:type', typeof (_e = typeof EventEmitter !== 'undefined' && EventEmitter) === 'function' && _e || Object)], Searchbar.prototype, \"cancel\", void 0);\n            __decorate([Output(), __metadata('design:type', typeof (_f = typeof EventEmitter !== 'undefined' && EventEmitter) === 'function' && _f || Object)], Searchbar.prototype, \"clear\", void 0);\n            __decorate([HostBinding('class.searchbar-focused'), __metadata('design:type', Object)], Searchbar.prototype, \"isFocused\", void 0);\n            __decorate([HostBinding('class.searchbar-left-aligned'), __metadata('design:type', Object)], Searchbar.prototype, \"shouldLeftAlign\", void 0);\n            _export(\"Searchbar\", Searchbar = __decorate([Component({\n                selector: 'ion-searchbar',\n                template: '<div class=\"searchbar-input-container\">' + '<button (click)=\"cancelSearchbar()\" (mousedown)=\"cancelSearchbar()\" clear dark class=\"searchbar-md-cancel\">' + '<ion-icon name=\"arrow-back\"></ion-icon>' + '</button>' + '<div class=\"searchbar-search-icon\"></div>' + '<input [value]=\"value\" (keyup)=\"inputChanged($event)\" (blur)=\"inputBlurred()\" (focus)=\"inputFocused()\" class=\"searchbar-input\" type=\"search\" [attr.placeholder]=\"placeholder\">' + '<button clear *ngIf=\"value\" class=\"searchbar-clear-icon\" (click)=\"clearInput()\" (mousedown)=\"clearInput()\"></button>' + '</div>' + '<button clear (click)=\"cancelSearchbar()\" (mousedown)=\"cancelSearchbar()\" [hidden]=\"hideCancelButton\" class=\"searchbar-ios-cancel\">{{cancelButtonText}}</button>',\n                directives: [FORM_DIRECTIVES, NgIf, NgClass, Icon, Button, SearchbarInput]\n            }), __param(2, Optional()), __metadata('design:paramtypes', [typeof (_g = typeof ElementRef !== 'undefined' && ElementRef) === 'function' && _g || Object, typeof (_h = typeof Config !== 'undefined' && Config) === 'function' && _h || Object, typeof (_j = typeof NgControl !== 'undefined' && NgControl) === 'function' && _j || Object])], Searchbar));\n        }\n    };\n});\nSystem.register(\"ionic/components/segment/segment\", [\"angular2/core\", \"angular2/common\", \"../../util/util\"], function (_export) {\n    /**\n     * @name SegmentButton\n     * @description\n     * The child buttons of the `ion-segment` component. Each `ion-segment-button` must have a value.\n     * @property {string} [value] - the value of the segment-button. Required.\n     * @usage\n     * ```html\n     * <ion-segment [(ngModel)]=\"relationship\" primary>\n     *   <ion-segment-button value=\"friends\" (select)=\"selectedFriends()\">\n     *     Friends\n     *   </ion-segment-button>\n     *   <ion-segment-button value=\"enemies\" (select)=\"selectedEnemies()\">\n     *     Enemies\n     *   </ion-segment-button>\n     * </ion-segment>\n     *```\n     *\n     * Or with `FormBuilder`\n     *\n     *```html\n     * <form [ngFormModel]=\"myForm\">\n     *   <ion-segment ngControl=\"mapStyle\" danger>\n     *     <ion-segment-button value=\"standard\">\n     *       Standard\n     *     </ion-segment-button>\n     *     <ion-segment-button value=\"hybrid\">\n     *       Hybrid\n     *     </ion-segment-button>\n     *     <ion-segment-button value=\"sat\">\n     *       Satellite\n     *     </ion-segment-button>\n     *   </ion-segment>\n     * </form>\n     * ```\n     *\n     * @property {Any} [click] - expression to evaluate when a segment button has been clicked\n     *\n     * @demo /docs/v3/demos/segment/\n     * @see {@link /docs/v3/components#segment Segment Component Docs}\n     * @see {@link /docs/api/components/segment/Segment/ Segment API Docs}\n     */\n    \"use strict\";\n\n    var Directive, ElementRef, Renderer, Optional, EventEmitter, Input, Output, HostListener, ContentChildren, NgControl, isDefined, __decorate, __metadata, __param, SegmentButton, Segment, _a, _b, _c, _d, _e;\n\n    var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();\n\n    function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n    return {\n        setters: [function (_angular2Core) {\n            Directive = _angular2Core.Directive;\n            ElementRef = _angular2Core.ElementRef;\n            Renderer = _angular2Core.Renderer;\n            Optional = _angular2Core.Optional;\n            EventEmitter = _angular2Core.EventEmitter;\n            Input = _angular2Core.Input;\n            Output = _angular2Core.Output;\n            HostListener = _angular2Core.HostListener;\n            ContentChildren = _angular2Core.ContentChildren;\n        }, function (_angular2Common) {\n            NgControl = _angular2Common.NgControl;\n        }, function (_utilUtil) {\n            isDefined = _utilUtil.isDefined;\n        }],\n        execute: function () {\n            __decorate = undefined && undefined.__decorate || function (decorators, target, key, desc) {\n                var c = arguments.length,\n                    r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc,\n                    d;\n                if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n                return c > 3 && r && Object.defineProperty(target, key, r), r;\n            };\n\n            __metadata = undefined && undefined.__metadata || function (k, v) {\n                if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n            };\n\n            __param = undefined && undefined.__param || function (paramIndex, decorator) {\n                return function (target, key) {\n                    decorator(target, key, paramIndex);\n                };\n            };\n\n            SegmentButton = (function () {\n                function SegmentButton(_renderer, _elementRef) {\n                    _classCallCheck(this, SegmentButton);\n\n                    this._renderer = _renderer;\n                    this._elementRef = _elementRef;\n                    this.select = new EventEmitter();\n                }\n\n                /**\n                 * @private\n                 * On click of a SegmentButton\n                 */\n\n                _createClass(SegmentButton, [{\n                    key: \"onClick\",\n                    value: function onClick(ev) {\n                        console.debug('SegmentButton, select', this.value);\n                        this.select.emit(this);\n                    }\n                }, {\n                    key: \"ngOnInit\",\n                    value: function ngOnInit() {\n                        if (!isDefined(this.value)) {\n                            console.warn('<ion-segment-button> requires a \"value\" attribute');\n                        }\n                    }\n                }, {\n                    key: \"isActive\",\n                    set: function set(isActive) {\n                        this._renderer.setElementClass(this._elementRef, 'segment-activated', isActive);\n                        this._renderer.setElementAttribute(this._elementRef, 'aria-pressed', isActive);\n                    }\n                }]);\n\n                return SegmentButton;\n            })();\n\n            _export(\"SegmentButton\", SegmentButton);\n\n            __decorate([Input(), __metadata('design:type', String)], SegmentButton.prototype, \"value\", void 0);\n            __decorate([Output(), __metadata('design:type', typeof (_a = typeof EventEmitter !== 'undefined' && EventEmitter) === 'function' && _a || Object)], SegmentButton.prototype, \"select\", void 0);\n            __decorate([HostListener('click', ['$event']), __metadata('design:type', Function), __metadata('design:paramtypes', [Object]), __metadata('design:returntype', void 0)], SegmentButton.prototype, \"onClick\", null);\n            _export(\"SegmentButton\", SegmentButton = __decorate([Directive({\n                selector: 'ion-segment-button',\n                host: {\n                    'tappable': '',\n                    'class': 'segment-button',\n                    'role': 'button'\n                }\n            }), __metadata('design:paramtypes', [typeof (_b = typeof Renderer !== 'undefined' && Renderer) === 'function' && _b || Object, typeof (_c = typeof ElementRef !== 'undefined' && ElementRef) === 'function' && _c || Object])], SegmentButton));\n            /**\n             * @name Segment\n             * @description\n             * A Segment is a group of buttons, sometimes known as Segmented Controls, that allow the user to interact with a compact group of a number of controls.\n             * Segments provide functionality similar to tabs, selecting one will unselect all others. You should use a tab bar instead of a segmented control when you want to let the user move back and forth between distinct pages in your app.\n             * You could use Angular 2's `ngModel` or `FormBuilder` API. For an overview on how `FormBuilder` works, checkout [Angular 2 Forms](http://learnangular2.com/forms/), or [Angular FormBuilder](https://angular.io/docs/ts/latest/api/common/FormBuilder-class.html)\n             *\n             *\n             * @usage\n             * ```html\n             * <ion-segment [(ngModel)]=\"relationship\" (change)=\"onSegmentChanged($event)\" danger>\n             *   <ion-segment-button value=\"friends\">\n             *     Friends\n             *   </ion-segment-button>\n             *   <ion-segment-button value=\"enemies\">\n             *     Enemies\n             *   </ion-segment-button>\n             * </ion-segment>\n             *```\n             *\n             * Or with `FormBuilder`\n             *\n             *```html\n             * <form [ngFormModel]=\"myForm\">\n             *   <ion-segment ngControl=\"mapStyle\" danger>\n             *     <ion-segment-button value=\"standard\">\n             *       Standard\n             *     </ion-segment-button>\n             *     <ion-segment-button value=\"hybrid\">\n             *       Hybrid\n             *     </ion-segment-button>\n             *     <ion-segment-button value=\"sat\">\n             *       Satellite\n             *     </ion-segment-button>\n             *   </ion-segment>\n             * </form>\n             * ```\n             *\n             * @property {Any} [change] - expression to evaluate when a segment button has been changed\n             *\n             * @demo /docs/v3/demos/segment/\n             * @see {@link /docs/v3/components#segment Segment Component Docs}\n             * @see [Angular 2 Forms](http://learnangular2.com/forms/)\n             */\n\n            Segment = (function () {\n                function Segment(ngControl) {\n                    _classCallCheck(this, Segment);\n\n                    this.change = new EventEmitter();\n                    this.onChange = function (_) {};\n                    this.onTouched = function (_) {};\n                    if (ngControl) {\n                        ngControl.valueAccessor = this;\n                    }\n                }\n\n                /**\n                 * @private\n                 * Write a new value to the element.\n                 */\n\n                _createClass(Segment, [{\n                    key: \"writeValue\",\n                    value: function writeValue(value) {\n                        this.value = isDefined(value) ? value : '';\n                        if (this._buttons) {\n                            var buttons = this._buttons.toArray();\n                            var _iteratorNormalCompletion = true;\n                            var _didIteratorError = false;\n                            var _iteratorError = undefined;\n\n                            try {\n                                for (var _iterator = buttons[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {\n                                    var button = _step.value;\n\n                                    button.isActive = button.value === this.value;\n                                }\n                            } catch (err) {\n                                _didIteratorError = true;\n                                _iteratorError = err;\n                            } finally {\n                                try {\n                                    if (!_iteratorNormalCompletion && _iterator[\"return\"]) {\n                                        _iterator[\"return\"]();\n                                    }\n                                } finally {\n                                    if (_didIteratorError) {\n                                        throw _iteratorError;\n                                    }\n                                }\n                            }\n                        }\n                    }\n\n                    /**\n                     * @private\n                     */\n                }, {\n                    key: \"ngAfterViewInit\",\n                    value: function ngAfterViewInit() {\n                        var _this = this;\n\n                        var buttons = this._buttons.toArray();\n                        var _iteratorNormalCompletion2 = true;\n                        var _didIteratorError2 = false;\n                        var _iteratorError2 = undefined;\n\n                        try {\n                            for (var _iterator2 = buttons[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {\n                                var button = _step2.value;\n\n                                button.select.subscribe(function (selectedButton) {\n                                    _this.writeValue(selectedButton.value);\n                                    _this.onChange(selectedButton.value);\n                                    _this.change.emit(selectedButton);\n                                });\n                                if (isDefined(this.value)) {\n                                    button.isActive = button.value === this.value;\n                                }\n                            }\n                        } catch (err) {\n                            _didIteratorError2 = true;\n                            _iteratorError2 = err;\n                        } finally {\n                            try {\n                                if (!_iteratorNormalCompletion2 && _iterator2[\"return\"]) {\n                                    _iterator2[\"return\"]();\n                                }\n                            } finally {\n                                if (_didIteratorError2) {\n                                    throw _iteratorError2;\n                                }\n                            }\n                        }\n                    }\n\n                    /**\n                     * @private\n                     * Set the function to be called when the control receives a change event.\n                     */\n                }, {\n                    key: \"registerOnChange\",\n                    value: function registerOnChange(fn) {\n                        this.onChange = fn;\n                    }\n\n                    /**\n                     * @private\n                     * Set the function to be called when the control receives a touch event.\n                     */\n                }, {\n                    key: \"registerOnTouched\",\n                    value: function registerOnTouched(fn) {\n                        this.onTouched = fn;\n                    }\n                }]);\n\n                return Segment;\n            })();\n\n            _export(\"Segment\", Segment);\n\n            __decorate([ContentChildren(SegmentButton), __metadata('design:type', Object)], Segment.prototype, \"_buttons\", void 0);\n            __decorate([Output(), __metadata('design:type', typeof (_d = typeof EventEmitter !== 'undefined' && EventEmitter) === 'function' && _d || Object)], Segment.prototype, \"change\", void 0);\n            _export(\"Segment\", Segment = __decorate([Directive({\n                selector: 'ion-segment'\n            }), __param(0, Optional()), __metadata('design:paramtypes', [typeof (_e = typeof NgControl !== 'undefined' && NgControl) === 'function' && _e || Object])], Segment));\n        }\n    };\n});\nSystem.register(\"ionic/components/show-hide-when/show-hide-when\", [\"angular2/core\", \"../../platform/platform\"], function (_export) {\n    /**\n     * @private\n     */\n    \"use strict\";\n\n    var Directive, Attribute, NgZone, Platform, __decorate, __metadata, __param, DisplayWhen, ShowWhen, HideWhen, _a, _b, _c, _d;\n\n    var _get = function get(_x, _x2, _x3) { var _again = true; _function: while (_again) { var object = _x, property = _x2, receiver = _x3; _again = false; if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { _x = parent; _x2 = property; _x3 = receiver; _again = true; desc = parent = undefined; continue _function; } } else if (\"value\" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } } };\n\n    var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();\n\n    function _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\n    function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n    return {\n        setters: [function (_angular2Core) {\n            Directive = _angular2Core.Directive;\n            Attribute = _angular2Core.Attribute;\n            NgZone = _angular2Core.NgZone;\n        }, function (_platformPlatform) {\n            Platform = _platformPlatform.Platform;\n        }],\n        execute: function () {\n            __decorate = undefined && undefined.__decorate || function (decorators, target, key, desc) {\n                var c = arguments.length,\n                    r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc,\n                    d;\n                if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n                return c > 3 && r && Object.defineProperty(target, key, r), r;\n            };\n\n            __metadata = undefined && undefined.__metadata || function (k, v) {\n                if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n            };\n\n            __param = undefined && undefined.__param || function (paramIndex, decorator) {\n                return function (target, key) {\n                    decorator(target, key, paramIndex);\n                };\n            };\n\n            DisplayWhen = (function () {\n                function DisplayWhen(conditions, platform, ngZone) {\n                    var _this = this;\n\n                    _classCallCheck(this, DisplayWhen);\n\n                    this.isMatch = false;\n                    this.platform = platform;\n                    if (!conditions) return;\n                    this.conditions = conditions.split(',');\n                    // check if its one of the matching platforms first\n                    // a platform does not change during the life of an app\n                    for (var i = 0; i < this.conditions.length; i++) {\n                        if (this.conditions[i] && platform.is(this.conditions[i])) {\n                            this.isMatch = true;\n                            return;\n                        }\n                    }\n                    if (this.orientation()) {\n                        // add window resize listener\n                        platform.onResize(function () {\n                            ngZone.run(function () {\n                                _this.orientation();\n                            });\n                        });\n                        return;\n                    }\n                }\n\n                /**\n                 *\n                 * The `showWhen` attribute takes a string that represents a plaform or screen orientation.\n                 * The element the attribute is added to will only be shown when that platform or screen orientation is active.\n                 * Complements the [hideWhen attribute](../HideWhen).\n                 * @usage\n                 * ```html\n                 * <div showWhen=\"ios\">I am only visible on iOS!</div>\n                 * ```\n                 * @demo /docs/v3/demos/show-when/\n                 * @see {@link ../HideWhen HideWhen API Docs}\n                 */\n\n                _createClass(DisplayWhen, [{\n                    key: \"orientation\",\n                    value: function orientation() {\n                        for (var i = 0; i < this.conditions.length; i++) {\n                            if (this.conditions[i] == 'portrait') {\n                                this.isMatch = this.platform.isPortrait();\n                                return true;\n                            }\n                            if (this.conditions[i] == 'landscape') {\n                                this.isMatch = this.platform.isLandscape();\n                                return true;\n                            }\n                        }\n                    }\n                }]);\n\n                return DisplayWhen;\n            })();\n\n            _export(\"DisplayWhen\", DisplayWhen);\n\n            ShowWhen = (function (_DisplayWhen) {\n                _inherits(ShowWhen, _DisplayWhen);\n\n                function ShowWhen(showWhen, platform, ngZone) {\n                    _classCallCheck(this, ShowWhen);\n\n                    _get(Object.getPrototypeOf(ShowWhen.prototype), \"constructor\", this).call(this, showWhen, platform, ngZone);\n                }\n\n                /**\n                 * @private\n                 */\n\n                _createClass(ShowWhen, [{\n                    key: \"hidden\",\n                    get: function get() {\n                        return !this.isMatch;\n                    }\n                }]);\n\n                return ShowWhen;\n            })(DisplayWhen);\n\n            _export(\"ShowWhen\", ShowWhen);\n\n            _export(\"ShowWhen\", ShowWhen = __decorate([Directive({\n                selector: '[showWhen]',\n                host: {\n                    '[hidden]': 'hidden'\n                }\n            }), __param(0, Attribute('showWhen')), __metadata('design:paramtypes', [String, typeof (_a = typeof Platform !== 'undefined' && Platform) === 'function' && _a || Object, typeof (_b = typeof NgZone !== 'undefined' && NgZone) === 'function' && _b || Object])], ShowWhen));\n            /**\n             *\n             * The `hideWhen` attribute takes a string that represents a plaform or screen orientation.\n             * The element the attribute is added to will only be hidden when that platform or screen orientation is active.\n             * Complements the [showWhen attribute](../ShowWhen).\n             * @usage\n             * ```html\n             * <div hideWhen=\"android\">I am hidden on Android!</div>\n             * ```\n             * @demo /docs/v3/demos/hide-when/\n             * @see {@link ../ShowWhen ShowWhen API Docs}\n             */\n\n            HideWhen = (function (_DisplayWhen2) {\n                _inherits(HideWhen, _DisplayWhen2);\n\n                function HideWhen(hideWhen, platform, ngZone) {\n                    _classCallCheck(this, HideWhen);\n\n                    _get(Object.getPrototypeOf(HideWhen.prototype), \"constructor\", this).call(this, hideWhen, platform, ngZone);\n                }\n\n                /**\n                 * @private\n                 */\n\n                _createClass(HideWhen, [{\n                    key: \"hidden\",\n                    get: function get() {\n                        return this.isMatch;\n                    }\n                }]);\n\n                return HideWhen;\n            })(DisplayWhen);\n\n            _export(\"HideWhen\", HideWhen);\n\n            _export(\"HideWhen\", HideWhen = __decorate([Directive({\n                selector: '[hideWhen]',\n                host: {\n                    '[hidden]': 'hidden'\n                }\n            }), __param(0, Attribute('hideWhen')), __metadata('design:paramtypes', [String, typeof (_c = typeof Platform !== 'undefined' && Platform) === 'function' && _c || Object, typeof (_d = typeof NgZone !== 'undefined' && NgZone) === 'function' && _d || Object])], HideWhen));\n        }\n    };\n});\nSystem.register(\"ionic/components/slides/slides\", [\"angular2/core\", \"angular2/common\", \"../ion\", \"../../animations/animation\", \"../../gestures/gesture\", \"../../config/config\", \"../../util\", \"../../util/dom\", \"./swiper-widget\"], function (_export) {\n    /**\n     * @name Slides\n     * @description\n     * Slides is a slide box implementation based on Swiper.js\n     *\n     * Swiper.js:\n     * The most modern mobile touch slider and framework with hardware accelerated transitions\n     *\n     * http://www.idangero.us/swiper/\n     *\n     * Copyright 2015, Vladimir Kharlampidi\n     * The iDangero.us\n     * http://www.idangero.us/\n     *\n     * Licensed under MIT\n     *\n     * @usage\n     * ```ts\n     * @Page({\n     *  template: `\n     *     <ion-slides pager (change)=\"onSlideChanged($event)\" loop=\"true\" autoplay=\"true\">\n     *      <ion-slide>\n     *        <h3>Thank you for choosing the Awesome App!</h3>\n     *        <p>\n     *          The number one app for everything awesome.\n     *        </p>\n     *      </ion-slide>\n     *      <ion-slide>\n     *        <h3>Using Awesome</h3>\n     *         <div id=\"list\">\n     *           <h5>Just three steps:</h5>\n     *           <ol>\n     *             <li>Be awesome</li>\n     *             <li>Stay awesome</li>\n     *             <li>There is no step 3</li>\n     *           </ol>\n     *         </div>\n     *      </ion-slide>\n     *      <ion-slide>\n     *        <h3>Any questions?</h3>\n     *      </ion-slide>\n     *    </ion-slides>\n     *    `\n     *})\n     *\n     *```\n     * @property {Boolean} [autoplay] - whether or not the slides should automatically change\n     * @property {Boolean} [loop] - whether the slides should loop from the last slide back to the first\n     * @property {Boolean} [bounce] - whether the slides should bounce\n     * @property {Number} [index] - The slide index to start on\n     * @property [pager] - add this property to enable the slide pager\n     * @property {Any} [change] - expression to evaluate when a slide has been changed\n     * @demo /docs/v3/demos/slides/\n     * @see {@link /docs/v3/components#slides Slides Component Docs}\n     */\n    \"use strict\";\n\n    var Directive, Component, ElementRef, Host, EventEmitter, Output, NgClass, Ion, Animation, Gesture, Config, dom, util, CSS, Swiper, __decorate, __metadata, __param, Slides, Slide, SlideLazy, _a, _b, _c, _d, _e;\n\n    var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();\n\n    var _get = function get(_x, _x2, _x3) { var _again = true; _function: while (_again) { var object = _x, property = _x2, receiver = _x3; _again = false; if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { _x = parent; _x2 = property; _x3 = receiver; _again = true; desc = parent = undefined; continue _function; } } else if (\"value\" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } } };\n\n    function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n    function _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\n    return {\n        setters: [function (_angular2Core) {\n            Directive = _angular2Core.Directive;\n            Component = _angular2Core.Component;\n            ElementRef = _angular2Core.ElementRef;\n            Host = _angular2Core.Host;\n            EventEmitter = _angular2Core.EventEmitter;\n            Output = _angular2Core.Output;\n        }, function (_angular2Common) {\n            NgClass = _angular2Common.NgClass;\n        }, function (_ion) {\n            Ion = _ion.Ion;\n        }, function (_animationsAnimation) {\n            Animation = _animationsAnimation.Animation;\n        }, function (_gesturesGesture) {\n            Gesture = _gesturesGesture.Gesture;\n        }, function (_configConfig) {\n            Config = _configConfig.Config;\n        }, function (_util) {\n            dom = _util.dom;\n            util = _util;\n        }, function (_utilDom) {\n            CSS = _utilDom.CSS;\n        }, function (_swiperWidget) {\n            Swiper = _swiperWidget.Swiper;\n        }],\n        execute: function () {\n            __decorate = undefined && undefined.__decorate || function (decorators, target, key, desc) {\n                var c = arguments.length,\n                    r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc,\n                    d;\n                if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n                return c > 3 && r && Object.defineProperty(target, key, r), r;\n            };\n\n            __metadata = undefined && undefined.__metadata || function (k, v) {\n                if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n            };\n\n            __param = undefined && undefined.__param || function (paramIndex, decorator) {\n                return function (target, key) {\n                    decorator(target, key, paramIndex);\n                };\n            };\n\n            Slides = (function (_Ion) {\n                _inherits(Slides, _Ion);\n\n                /**\n                 * @private\n                 * @param {ElementRef} elementRef  TODO\n                 */\n\n                function Slides(elementRef, config) {\n                    var _this = this;\n\n                    _classCallCheck(this, Slides);\n\n                    _get(Object.getPrototypeOf(Slides.prototype), \"constructor\", this).call(this, elementRef, config);\n                    this.change = new EventEmitter();\n                    this.rapidUpdate = util.debounce(function () {\n                        _this.update();\n                    }, 10);\n                    console.warn(\"(slideChanged) deprecated. Use (change) to track slide changes.\");\n                }\n\n                /**\n                 * @private\n                 */\n\n                _createClass(Slides, [{\n                    key: \"ngOnInit\",\n                    value: function ngOnInit() {\n                        var _this2 = this;\n\n                        if (!this.options) {\n                            this.options = {};\n                        }\n                        this.showPager = util.isTrueProperty(this.pager);\n                        var options = util.defaults({\n                            loop: this.loop,\n                            pagination: '.swiper-pagination',\n                            paginationClickable: true,\n                            lazyLoading: true,\n                            preloadImages: false\n                        }, this.options);\n                        options.onTap = function (swiper, e) {\n                            _this2.onTap(swiper, e);\n                            return _this2.options.onTap && _this2.options.onTap(swiper, e);\n                        };\n                        options.onClick = function (swiper, e) {\n                            _this2.onClick(swiper, e);\n                            return _this2.options.onClick && _this2.options.onClick(swiper, e);\n                        };\n                        options.onDoubleTap = function (swiper, e) {\n                            _this2.onDoubleTap(swiper, e);\n                            return _this2.options.onDoubleTap && _this2.options.onDoubleTap(swiper, e);\n                        };\n                        options.onTransitionStart = function (swiper, e) {\n                            _this2.onTransitionStart(swiper, e);\n                            return _this2.options.onTransitionStart && _this2.options.onTransitionStart(swiper, e);\n                        };\n                        options.onTransitionEnd = function (swiper, e) {\n                            _this2.onTransitionEnd(swiper, e);\n                            return _this2.options.onTransitionEnd && _this2.options.onTransitionEnd(swiper, e);\n                        };\n                        options.onSlideChangeStart = function (swiper) {\n                            return _this2.options.onSlideChangeStart && _this2.options.onSlideChangeStart(swiper);\n                        };\n                        options.onSlideChangeEnd = function (swiper) {\n                            _this2.change.emit(swiper);\n                            return _this2.options.onSlideChangeEnd && _this2.options.onSlideChangeEnd(swiper);\n                        };\n                        options.onLazyImageLoad = function (swiper, slide, img) {\n                            return _this2.options.onLazyImageLoad && _this2.options.onLazyImageLoad(swiper, slide, img);\n                        };\n                        options.onLazyImageReady = function (swiper, slide, img) {\n                            return _this2.options.onLazyImageReady && _this2.options.onLazyImageReady(swiper, slide, img);\n                        };\n                        var swiper = new Swiper(this.getNativeElement().children[0], options);\n                        this.slider = swiper;\n                        /*\n                        * TODO: Finish this\n                        if(util.isTrueProperty(this.zoom)) {\n                          this.enableZoom = true;\n                          setTimeout(() => {\n                            this.initZoom();\n                          })\n                        }\n                        */\n                    }\n\n                    /**\n                     * @private\n                     */\n                }, {\n                    key: \"onTap\",\n                    value: function onTap(swiper, e) {}\n\n                    /**\n                     * @private\n                     */\n                }, {\n                    key: \"onClick\",\n                    value: function onClick(swiper, e) {}\n\n                    /**\n                     * @private\n                     */\n                }, {\n                    key: \"onDoubleTap\",\n                    value: function onDoubleTap(swiper, e) {\n                        this.toggleZoom(swiper, e);\n                    }\n\n                    /**\n                     * @private\n                     */\n                }, {\n                    key: \"onLazyImageLoad\",\n                    value: function onLazyImageLoad(swiper, slide, img) {}\n\n                    /**\n                     * @private\n                     */\n                }, {\n                    key: \"onLazyImageReady\",\n                    value: function onLazyImageReady(swiper, slide, img) {}\n\n                    /*\n                    nextButton(swiper, e) {\n                    }\n                    prevButton() {\n                    }\n                    indexButton() {\n                    }\n                    */\n                    /**\n                     * @private\n                     */\n                }, {\n                    key: \"initZoom\",\n                    value: function initZoom() {\n                        var _this3 = this;\n\n                        this.zoomDuration = this.zoomDuration || 230;\n                        this.maxScale = this.zoomMax || 3;\n                        this.zoomElement = this.getNativeElement().children[0].children[0];\n                        this.zoomElement && this.zoomElement.classList.add('ion-scroll-zoom');\n                        this.zoomGesture = new Gesture(this.zoomElement);\n                        this.zoomGesture.listen();\n                        this.scale = 1;\n                        this.zoomLastPosX = 0;\n                        this.zoomLastPosY = 0;\n                        var last_scale = undefined,\n                            startX = undefined,\n                            startY = undefined,\n                            posX = 0,\n                            posY = 0,\n                            zoomRect = undefined;\n                        this.viewportWidth = this.getNativeElement().offsetWidth;\n                        this.viewportHeight = this.getNativeElement().offsetHeight;\n                        this.zoomElement.addEventListener('touchstart', function (e) {\n                            _this3.onTouchStart(e);\n                        });\n                        this.zoomElement.addEventListener('touchmove', function (e) {\n                            _this3.onTouchMove(e);\n                        });\n                        this.zoomElement.addEventListener('touchend', function (e) {\n                            _this3.onTouchEnd(e);\n                        });\n                        this.zoomGesture.on('pinchstart', function (e) {\n                            last_scale = _this3.scale;\n                            console.log('Last scale', e.scale);\n                        });\n                        this.zoomGesture.on('pinch', function (e) {\n                            _this3.scale = Math.max(1, Math.min(last_scale * e.scale, 10));\n                            console.log('Scaling', _this3.scale);\n                            _this3.zoomElement.style[CSS.transform] = 'scale(' + _this3.scale + ')';\n                            zoomRect = _this3.zoomElement.getBoundingClientRect();\n                        });\n                        this.zoomGesture.on('pinchend', function (e) {\n                            //last_scale = Math.max(1, Math.min(last_scale * e.scale, 10));\n                            if (_this3.scale > _this3.maxScale) {\n                                var za = new Animation(_this3.zoomElement).duration(_this3.zoomDuration).easing('linear').from('scale', _this3.scale).to('scale', _this3.maxScale);\n                                za.play();\n                                _this3.scale = _this3.maxScale;\n                            }\n                        });\n                    }\n\n                    /**\n                     * @private\n                     */\n                }, {\n                    key: \"resetZoom\",\n                    value: function resetZoom() {\n                        if (this.zoomElement) {\n                            this.zoomElement.parentElement.style[CSS.transform] = '';\n                            this.zoomElement.style[CSS.transform] = 'scale(1)';\n                        }\n                        this.scale = 1;\n                        this.zoomLastPosX = 0;\n                        this.zoomLastPosY = 0;\n                    }\n\n                    /**\n                     * @private\n                     */\n                }, {\n                    key: \"toggleZoom\",\n                    value: function toggleZoom(swiper, e) {\n                        console.log('Try toggle zoom');\n                        if (!this.enableZoom) {\n                            return;\n                        }\n                        console.log('Toggling zoom', e);\n                        /*\n                        let x = e.pointers[0].clientX;\n                        let y = e.pointers[0].clientY;\n                             let mx = this.viewportWidth / 2;\n                        let my = this.viewportHeight / 2;\n                             let tx, ty;\n                             if(x > mx) {\n                          // Greater than half\n                          tx = -x;\n                        } else {\n                          // Less than or equal to half\n                          tx = (this.viewportWidth - x);\n                        }\n                        if(y > my) {\n                          ty = -y;\n                        } else {\n                          ty = y-my;\n                        }\n                             console.log(y);\n                        */\n                        var zi = new Animation(this.touch.target.children[0]).duration(this.zoomDuration).easing('linear').fill('none');\n                        var zw = new Animation(this.touch.target.children[0]).duration(this.zoomDuration).easing('linear');\n                        var za = new Animation();\n                        za.fill('none');\n                        za.add(zi); //, zw);\n                        if (this.scale > 1) {\n                            // Zoom out\n                            //zw.fromTo('translateX', posX + 'px', '0px');\n                            //zw.fromTo('translateY', posY + 'px', '0px');\n                            zi.from('scale', this.scale);\n                            zi.to('scale', 1);\n                            za.play();\n                            //posX = 0;\n                            //posY = 0;\n                            this.scale = 1;\n                        } else {\n                            // Zoom in\n                            //zw.fromTo('translateX', posX + 'px', tx + 'px');\n                            //zw.fromTo('translateY', posY + 'px', ty + 'px');\n                            zi.from('scale', this.scale);\n                            zi.to('scale', this.maxScale);\n                            za.play();\n                            //posX = tx;\n                            //posY = ty;\n                            this.scale = this.maxScale;\n                        }\n                    }\n\n                    /**\n                     * @private\n                     */\n                }, {\n                    key: \"onTransitionStart\",\n                    value: function onTransitionStart(swiper) {}\n\n                    /**\n                     * @private\n                     */\n                }, {\n                    key: \"onTransitionEnd\",\n                    value: function onTransitionEnd(swiper) {}\n\n                    /**\n                     * @private\n                     */\n                }, {\n                    key: \"onTouchStart\",\n                    value: function onTouchStart(e) {\n                        console.log('Touch start', e);\n                        //TODO: Support mice as well\n                        var target = dom.closest(e.target, '.slide').children[0].children[0];\n                        this.touch = {\n                            startX: e.touches[0].clientX,\n                            startY: e.touches[0].clientY,\n                            deltaX: 0,\n                            deltaY: 0,\n                            lastX: 0,\n                            lastY: 0,\n                            target: target.parentElement,\n                            zoomable: target,\n                            zoomableWidth: target.offsetWidth,\n                            zoomableHeight: target.offsetHeight\n                        };\n                        console.log('Target', this.touch.target);\n                        //TODO: android prevent default\n                    }\n\n                    /**\n                     * @private\n                     */\n                }, {\n                    key: \"onTouchMove\",\n                    value: function onTouchMove(e) {\n                        this.touch.deltaX = e.touches[0].clientX - this.touch.startX;\n                        this.touch.deltaY = e.touches[0].clientY - this.touch.startY;\n                        // TODO: Make sure we need to transform (image is bigger than viewport)\n                        var zoomableScaledWidth = this.touch.zoomableWidth * this.scale;\n                        var zoomableScaledHeight = this.touch.zoomableHeight * this.scale;\n                        var x1 = Math.min(this.viewportWidth / 2 - zoomableScaledWidth / 2, 0);\n                        var x2 = -x1;\n                        var y1 = Math.min(this.viewportHeight / 2 - zoomableScaledHeight / 2, 0);\n                        var y2 = -y1;\n                        console.log('BOUNDS', x1, x2, y1, y2);\n                        if (this.scale <= 1) {\n                            return;\n                        }\n                        console.log('PAN', e);\n                        // Move image\n                        this.touch.x = this.touch.deltaX + this.touch.lastX;\n                        this.touch.y = this.touch.deltaY + this.touch.lastY;\n                        console.log(this.touch.x, this.touch.y);\n                        if (this.touch.x < x1) {\n                            console.log('OUT ON LEFT');\n                        }\n                        if (this.touch.x > x2) {\n                            console.log('OUT ON RIGHT');\n                        }\n                        if (this.touch.x > this.viewportWidth) {} else if (-this.touch.x > this.viewportWidth) {} else {\n                            console.log('TRANSFORM', this.touch.x, this.touch.y, this.touch.target);\n                            //this.touch.target.style[CSS.transform] = 'translateX(' + this.touch.x + 'px) translateY(' + this.touch.y + 'px)';\n                            this.touch.target.style[CSS.transform] = 'translateX(' + this.touch.x + 'px) translateY(' + this.touch.y + 'px)';\n                            e.preventDefault();\n                            e.stopPropagation();\n                            return false;\n                        }\n                    }\n\n                    /**\n                     * @private\n                     */\n                }, {\n                    key: \"onTouchEnd\",\n                    value: function onTouchEnd(e) {\n                        console.log('PANEND', e);\n                        if (this.scale > 1) {\n                            if (Math.abs(this.touch.x) > this.viewportWidth) {\n                                posX = posX > 0 ? this.viewportWidth - 1 : -(this.viewportWidth - 1);\n                                console.log('Setting on posx', this.touch.x);\n                            }\n                            /*\n                            if(posY > this.viewportHeight/2) {\n                              let z = new Animation(this.zoomElement.parentElement);\n                              z.fromTo('translateY', posY + 'px', Math.min(this.viewportHeight/2 + 30, posY));\n                              z.play();\n                            } else {\n                              let z = new Animation(this.zoomElement.parentElement);\n                              z.fromTo('translateY', posY + 'px', Math.max(this.viewportHeight/2 - 30, posY));\n                              z.play();\n                            }\n                            */\n                            this.touch.lastX = this.touch.x;\n                            this.touch.lastY = this.touch.y;\n                        }\n                    }\n\n                    /**\n                     * @private\n                     * Update the underlying slider implementation. Call this if you've added or removed\n                     * child slides.\n                     */\n                }, {\n                    key: \"update\",\n                    value: function update() {\n                        var _this4 = this;\n\n                        setTimeout(function () {\n                            _this4.slider.update();\n                            // Don't allow pager to show with > 10 slides\n                            if (_this4.slider.slides.length > 10) {\n                                _this4.showPager = false;\n                            }\n                        });\n                    }\n\n                    /**\n                     * @private\n                     */\n                }, {\n                    key: \"next\",\n                    value: function next() {\n                        this.slider.slideNext();\n                    }\n\n                    /**\n                     * @private\n                     */\n                }, {\n                    key: \"prev\",\n                    value: function prev() {\n                        this.slider.slidePrev();\n                    }\n\n                    /**\n                     * @private\n                     */\n                }, {\n                    key: \"getIndex\",\n                    value: function getIndex() {\n                        return this.slider.activeIndex;\n                    }\n\n                    /**\n                     * @private\n                     */\n                }, {\n                    key: \"getNumSlides\",\n                    value: function getNumSlides() {\n                        return this.slider.slides.length;\n                    }\n\n                    /**\n                     * @private\n                     */\n                }, {\n                    key: \"isAtEnd\",\n                    value: function isAtEnd() {\n                        return this.slider.isEnd;\n                    }\n\n                    /**\n                     * @private\n                     */\n                }, {\n                    key: \"isAtBeginning\",\n                    value: function isAtBeginning() {\n                        return this.slider.isBeginning;\n                    }\n\n                    /**\n                     * @private\n                     */\n                }, {\n                    key: \"getSliderWidget\",\n                    value: function getSliderWidget() {\n                        return this.slider;\n                    }\n                }]);\n\n                return Slides;\n            })(Ion);\n\n            _export(\"Slides\", Slides);\n\n            __decorate([Output(), __metadata('design:type', typeof (_a = typeof EventEmitter !== 'undefined' && EventEmitter) === 'function' && _a || Object)], Slides.prototype, \"change\", void 0);\n            _export(\"Slides\", Slides = __decorate([Component({\n                selector: 'ion-slides',\n                inputs: ['autoplay', 'loop', 'index', 'bounce', 'pager', 'options', 'zoom', 'zoomDuration', 'zoomMax'],\n                template: '<div class=\"swiper-container\">' + '<div class=\"swiper-wrapper\">' + '<ng-content></ng-content>' + '</div>' + '<div [class.hide]=\"!showPager\" class=\"swiper-pagination\"></div>' + '</div>',\n                directives: [NgClass]\n            }), __metadata('design:paramtypes', [typeof (_b = typeof ElementRef !== 'undefined' && ElementRef) === 'function' && _b || Object, typeof (_c = typeof Config !== 'undefined' && Config) === 'function' && _c || Object])], Slides));\n            /**\n             * @private\n             */\n\n            Slide =\n            /**\n             * TODO\n             * @param {Slides} slides  The containing slidebox.\n             * @param {ElementRef} elementRef  TODO\n             */\n            function Slide(elementRef, slides) {\n                _classCallCheck(this, Slide);\n\n                this.ele = elementRef.nativeElement;\n                this.ele.classList.add('swiper-slide');\n                slides.rapidUpdate();\n            };\n\n            _export(\"Slide\", Slide);\n\n            _export(\"Slide\", Slide = __decorate([Component({\n                selector: 'ion-slide',\n                inputs: ['zoom'],\n                template: '<div class=\"slide-zoom\"><ng-content></ng-content></div>'\n            }), __param(1, Host()), __metadata('design:paramtypes', [typeof (_d = typeof ElementRef !== 'undefined' && ElementRef) === 'function' && _d || Object, Slides])], Slide));\n            /**\n             * @private\n             */\n\n            SlideLazy = function SlideLazy(elementRef) {\n                _classCallCheck(this, SlideLazy);\n\n                elementRef.getNativeElement().classList.add('swiper-lazy');\n            };\n\n            _export(\"SlideLazy\", SlideLazy);\n\n            _export(\"SlideLazy\", SlideLazy = __decorate([Directive({\n                selector: 'slide-lazy'\n            }), __metadata('design:paramtypes', [typeof (_e = typeof ElementRef !== 'undefined' && ElementRef) === 'function' && _e || Object])], SlideLazy));\n        }\n    };\n});\nSystem.register('ionic/components/slides/swiper-widget',[],function(_export){ /**\n * Swiper 3.1.2\n * Most modern mobile touch slider and framework with hardware accelerated transitions\n *\n * http://www.idangero.us/swiper/\n *\n * Copyright 2015, Vladimir Kharlampidi\n * The iDangero.us\n * http://www.idangero.us/\n *\n * Licensed under MIT\n *\n * Released on: August 22, 2015\n */'use strict';var $,Dom7,swiperDomPlugins,i,domLib;_export('Swiper',Swiper); /*===========================\nSwiper\n===========================*/function Swiper(container,params){if(!(this instanceof Swiper))return new Swiper(container,params);var defaults={direction:'horizontal',touchEventsTarget:'container',initialSlide:0,speed:300, // autoplay\nautoplay:false,autoplayDisableOnInteraction:true, // To support iOS's swipe-to-go-back gesture (when being used in-app, with UIWebView).\niOSEdgeSwipeDetection:false,iOSEdgeSwipeThreshold:20, // Free mode\nfreeMode:false,freeModeMomentum:true,freeModeMomentumRatio:1,freeModeMomentumBounce:true,freeModeMomentumBounceRatio:1,freeModeSticky:false, // Set wrapper width\nsetWrapperSize:false, // Virtual Translate\nvirtualTranslate:false, // Effects\neffect:'slide',coverflow:{rotate:50,stretch:0,depth:100,modifier:1,slideShadows:true},cube:{slideShadows:true,shadow:true,shadowOffset:20,shadowScale:0.94},fade:{crossFade:false}, // Parallax\nparallax:false, // Scrollbar\nscrollbar:null,scrollbarHide:true, // Keyboard Mousewheel\nkeyboardControl:false,mousewheelControl:false,mousewheelReleaseOnEdges:false,mousewheelInvert:false,mousewheelForceToAxis:false,mousewheelSensitivity:1, // Hash Navigation\nhashnav:false, // Slides grid\nspaceBetween:0,slidesPerView:1,slidesPerColumn:1,slidesPerColumnFill:'column',slidesPerGroup:1,centeredSlides:false,slidesOffsetBefore:0,slidesOffsetAfter:0, // Round length\nroundLengths:false, // Touches\ntouchRatio:1,touchAngle:45,simulateTouch:true,shortSwipes:true,longSwipes:true,longSwipesRatio:0.5,longSwipesMs:300,followFinger:true,onlyExternal:false,threshold:0,touchMoveStopPropagation:true, // Pagination\npagination:null,paginationElement:'span',paginationClickable:false,paginationHide:false,paginationBulletRender:null, // Resistance\nresistance:true,resistanceRatio:0.85, // Next/prev buttons\nnextButton:null,prevButton:null, // Progress\nwatchSlidesProgress:false,watchSlidesVisibility:false, // Cursor\ngrabCursor:false, // Clicks\npreventClicks:true,preventClicksPropagation:true,slideToClickedSlide:false, // Lazy Loading\nlazyLoading:false,lazyLoadingInPrevNext:false,lazyLoadingOnTransitionStart:false, // Images\npreloadImages:true,updateOnImagesReady:true, // loop\nloop:false,loopAdditionalSlides:0,loopedSlides:null, // Control\ncontrol:undefined,controlInverse:false,controlBy:'slide', // Swiping/no swiping\nallowSwipeToPrev:true,allowSwipeToNext:true,swipeHandler:null,noSwiping:true,noSwipingClass:'swiper-no-swiping', // NS\nslideClass:'swiper-slide',slideActiveClass:'swiper-slide-active',slideVisibleClass:'swiper-slide-visible',slideDuplicateClass:'swiper-slide-duplicate',slideNextClass:'swiper-slide-next',slidePrevClass:'swiper-slide-prev',wrapperClass:'swiper-wrapper',bulletClass:'swiper-pagination-bullet',bulletActiveClass:'swiper-pagination-bullet-active',buttonDisabledClass:'swiper-button-disabled',paginationHiddenClass:'swiper-pagination-hidden', // Observer\nobserver:false,observeParents:false, // Accessibility\na11y:false,prevSlideMessage:'Previous slide',nextSlideMessage:'Next slide',firstSlideMessage:'This is the first slide',lastSlideMessage:'This is the last slide',paginationBulletMessage:'Go to slide {{index}}', // Callbacks\nrunCallbacksOnInit:true};var initialVirtualTranslate=params && params.virtualTranslate;params = params || {};for(var def in defaults) {if(typeof params[def] === 'undefined'){params[def] = defaults[def];}else if(typeof params[def] === 'object'){for(var deepDef in defaults[def]) {if(typeof params[def][deepDef] === 'undefined'){params[def][deepDef] = defaults[def][deepDef];}}}} // Swiper\nvar s=this; // Version\ns.version = '3.1.0'; // Params\ns.params = params; // Classname\ns.classNames = []; /*=========================\n      Dom Library and plugins\n      ===========================*/if(typeof $ !== 'undefined' && typeof Dom7 !== 'undefined'){$ = Dom7;}if(typeof $ === 'undefined'){if(typeof Dom7 === 'undefined'){$ = window.Dom7 || window.Zepto || window.jQuery;}else {$ = Dom7;}if(!$)return;} // Export it to Swiper instance\ns.$ = $; /*=========================\n      Preparation - Define Container, Wrapper and Pagination\n      ===========================*/s.container = $(container);if(s.container.length === 0)return;if(s.container.length > 1){s.container.each(function(){new Swiper(this,params);});return;} // Save instance in container HTML Element and in data\ns.container[0].swiper = s;s.container.data('swiper',s);s.classNames.push('swiper-container-' + s.params.direction);if(s.params.freeMode){s.classNames.push('swiper-container-free-mode');}if(!s.support.flexbox){s.classNames.push('swiper-container-no-flexbox');s.params.slidesPerColumn = 1;} // Enable slides progress when required\nif(s.params.parallax || s.params.watchSlidesVisibility){s.params.watchSlidesProgress = true;} // Coverflow / 3D\nif(['cube','coverflow'].indexOf(s.params.effect) >= 0){if(s.support.transforms3d){s.params.watchSlidesProgress = true;s.classNames.push('swiper-container-3d');}else {s.params.effect = 'slide';}}if(s.params.effect !== 'slide'){s.classNames.push('swiper-container-' + s.params.effect);}if(s.params.effect === 'cube'){s.params.resistanceRatio = 0;s.params.slidesPerView = 1;s.params.slidesPerColumn = 1;s.params.slidesPerGroup = 1;s.params.centeredSlides = false;s.params.spaceBetween = 0;s.params.virtualTranslate = true;s.params.setWrapperSize = false;}if(s.params.effect === 'fade'){s.params.slidesPerView = 1;s.params.slidesPerColumn = 1;s.params.slidesPerGroup = 1;s.params.watchSlidesProgress = true;s.params.spaceBetween = 0;if(typeof initialVirtualTranslate === 'undefined'){s.params.virtualTranslate = true;}} // Grab Cursor\nif(s.params.grabCursor && s.support.touch){s.params.grabCursor = false;} // Wrapper\ns.wrapper = s.container.children('.' + s.params.wrapperClass); // Pagination\nif(s.params.pagination){s.paginationContainer = $(s.params.pagination);if(s.params.paginationClickable){s.paginationContainer.addClass('swiper-pagination-clickable');}} // Is Horizontal\nfunction isH(){return s.params.direction === 'horizontal';} // RTL\ns.rtl = isH() && (s.container[0].dir.toLowerCase() === 'rtl' || s.container.css('direction') === 'rtl');if(s.rtl){s.classNames.push('swiper-container-rtl');} // Wrong RTL support\nif(s.rtl){s.wrongRTL = s.wrapper.css('display') === '-webkit-box';} // Columns\nif(s.params.slidesPerColumn > 1){s.classNames.push('swiper-container-multirow');} // Check for Android\nif(s.device.android){s.classNames.push('swiper-container-android');} // Add classes\ns.container.addClass(s.classNames.join(' ')); // Translate\ns.translate = 0; // Progress\ns.progress = 0; // Velocity\ns.velocity = 0; /*=========================\n      Locks, unlocks\n      ===========================*/s.lockSwipeToNext = function(){s.params.allowSwipeToNext = false;};s.lockSwipeToPrev = function(){s.params.allowSwipeToPrev = false;};s.lockSwipes = function(){s.params.allowSwipeToNext = s.params.allowSwipeToPrev = false;};s.unlockSwipeToNext = function(){s.params.allowSwipeToNext = true;};s.unlockSwipeToPrev = function(){s.params.allowSwipeToPrev = true;};s.unlockSwipes = function(){s.params.allowSwipeToNext = s.params.allowSwipeToPrev = true;}; /*=========================\n      Round helper\n      ===========================*/function round(a){return Math.floor(a);} /*=========================\n      Set grab cursor\n      ===========================*/if(s.params.grabCursor){s.container[0].style.cursor = 'move';s.container[0].style.cursor = '-webkit-grab';s.container[0].style.cursor = '-moz-grab';s.container[0].style.cursor = 'grab';} /*=========================\n      Update on Images Ready\n      ===========================*/s.imagesToLoad = [];s.imagesLoaded = 0;s.loadImage = function(imgElement,src,checkForComplete,callback){var image;function onReady(){if(callback)callback();}if(!imgElement.complete || !checkForComplete){if(src){image = new window.Image();image.onload = onReady;image.onerror = onReady;image.src = src;}else {onReady();}}else {onReady();}};s.preloadImages = function(){s.imagesToLoad = s.container.find('img');function _onReady(){if(typeof s === 'undefined' || s === null)return;if(s.imagesLoaded !== undefined)s.imagesLoaded++;if(s.imagesLoaded === s.imagesToLoad.length){if(s.params.updateOnImagesReady)s.update();s.emit('onImagesReady',s);}}for(var i=0;i < s.imagesToLoad.length;i++) {s.loadImage(s.imagesToLoad[i],s.imagesToLoad[i].currentSrc || s.imagesToLoad[i].getAttribute('src'),true,_onReady);}}; /*=========================\n      Autoplay\n      ===========================*/s.autoplayTimeoutId = undefined;s.autoplaying = false;s.autoplayPaused = false;function autoplay(){s.autoplayTimeoutId = setTimeout(function(){if(s.params.loop){s.fixLoop();s._slideNext();}else {if(!s.isEnd){s._slideNext();}else {if(!params.autoplayStopOnLast){s._slideTo(0);}else {s.stopAutoplay();}}}},s.params.autoplay);}s.startAutoplay = function(){if(typeof s.autoplayTimeoutId !== 'undefined')return false;if(!s.params.autoplay)return false;if(s.autoplaying)return false;s.autoplaying = true;s.emit('onAutoplayStart',s);autoplay();};s.stopAutoplay = function(internal){if(!s.autoplayTimeoutId)return;if(s.autoplayTimeoutId)clearTimeout(s.autoplayTimeoutId);s.autoplaying = false;s.autoplayTimeoutId = undefined;s.emit('onAutoplayStop',s);};s.pauseAutoplay = function(speed){if(s.autoplayPaused)return;if(s.autoplayTimeoutId)clearTimeout(s.autoplayTimeoutId);s.autoplayPaused = true;if(speed === 0){s.autoplayPaused = false;autoplay();}else {s.wrapper.transitionEnd(function(){if(!s)return;s.autoplayPaused = false;if(!s.autoplaying){s.stopAutoplay();}else {autoplay();}});}}; /*=========================\n      Min/Max Translate\n      ===========================*/s.minTranslate = function(){return -s.snapGrid[0];};s.maxTranslate = function(){return -s.snapGrid[s.snapGrid.length - 1];}; /*=========================\n      Slider/slides sizes\n      ===========================*/s.updateContainerSize = function(){var width,height;if(typeof s.params.width !== 'undefined'){width = s.params.width;}else {width = s.container[0].clientWidth;}if(typeof s.params.height !== 'undefined'){height = s.params.height;}else {height = s.container[0].clientHeight;}if(width === 0 && isH() || height === 0 && !isH()){return;} //Subtract paddings\nwidth = width - parseInt(s.container.css('padding-left'),10) - parseInt(s.container.css('padding-right'),10);height = height - parseInt(s.container.css('padding-top'),10) - parseInt(s.container.css('padding-bottom'),10); // Store values\ns.width = width;s.height = height;s.size = isH()?s.width:s.height;};s.updateSlidesSize = function(){s.slides = s.wrapper.children('.' + s.params.slideClass);s.snapGrid = [];s.slidesGrid = [];s.slidesSizesGrid = [];var spaceBetween=s.params.spaceBetween,slidePosition=-s.params.slidesOffsetBefore,i,prevSlideSize=0,index=0;if(typeof spaceBetween === 'string' && spaceBetween.indexOf('%') >= 0){spaceBetween = parseFloat(spaceBetween.replace('%','')) / 100 * s.size;}s.virtualSize = -spaceBetween; // reset margins\nif(s.rtl)s.slides.css({marginLeft:'',marginTop:''});else s.slides.css({marginRight:'',marginBottom:''});var slidesNumberEvenToRows;if(s.params.slidesPerColumn > 1){if(Math.floor(s.slides.length / s.params.slidesPerColumn) === s.slides.length / s.params.slidesPerColumn){slidesNumberEvenToRows = s.slides.length;}else {slidesNumberEvenToRows = Math.ceil(s.slides.length / s.params.slidesPerColumn) * s.params.slidesPerColumn;}} // Calc slides\nvar slideSize;var slidesPerColumn=s.params.slidesPerColumn;var slidesPerRow=slidesNumberEvenToRows / slidesPerColumn;var numFullColumns=slidesPerRow - (s.params.slidesPerColumn * slidesPerRow - s.slides.length);for(i = 0;i < s.slides.length;i++) {slideSize = 0;var slide=s.slides.eq(i);if(s.params.slidesPerColumn > 1){ // Set slides order\nvar newSlideOrderIndex;var column,row;if(s.params.slidesPerColumnFill === 'column'){column = Math.floor(i / slidesPerColumn);row = i - column * slidesPerColumn;if(column > numFullColumns || column === numFullColumns && row === slidesPerColumn - 1){if(++row >= slidesPerColumn){row = 0;column++;}}newSlideOrderIndex = column + row * slidesNumberEvenToRows / slidesPerColumn;slide.css({'-webkit-box-ordinal-group':newSlideOrderIndex,'-moz-box-ordinal-group':newSlideOrderIndex,'-ms-flex-order':newSlideOrderIndex,'-webkit-order':newSlideOrderIndex,'order':newSlideOrderIndex});}else {row = Math.floor(i / slidesPerRow);column = i - row * slidesPerRow;}slide.css({'margin-top':row !== 0 && s.params.spaceBetween && s.params.spaceBetween + 'px'}).attr('data-swiper-column',column).attr('data-swiper-row',row);}if(slide.css('display') === 'none')continue;if(s.params.slidesPerView === 'auto'){slideSize = isH()?slide.outerWidth(true):slide.outerHeight(true);if(s.params.roundLengths)slideSize = round(slideSize);}else {slideSize = (s.size - (s.params.slidesPerView - 1) * spaceBetween) / s.params.slidesPerView;if(s.params.roundLengths)slideSize = round(slideSize);if(isH()){s.slides[i].style.width = slideSize + 'px';}else {s.slides[i].style.height = slideSize + 'px';}}s.slides[i].swiperSlideSize = slideSize;s.slidesSizesGrid.push(slideSize);if(s.params.centeredSlides){slidePosition = slidePosition + slideSize / 2 + prevSlideSize / 2 + spaceBetween;if(i === 0)slidePosition = slidePosition - s.size / 2 - spaceBetween;if(Math.abs(slidePosition) < 1 / 1000)slidePosition = 0;if(index % s.params.slidesPerGroup === 0)s.snapGrid.push(slidePosition);s.slidesGrid.push(slidePosition);}else {if(index % s.params.slidesPerGroup === 0)s.snapGrid.push(slidePosition);s.slidesGrid.push(slidePosition);slidePosition = slidePosition + slideSize + spaceBetween;}s.virtualSize += slideSize + spaceBetween;prevSlideSize = slideSize;index++;}s.virtualSize = Math.max(s.virtualSize,s.size) + s.params.slidesOffsetAfter;var newSlidesGrid;if(s.rtl && s.wrongRTL && (s.params.effect === 'slide' || s.params.effect === 'coverflow')){s.wrapper.css({width:s.virtualSize + s.params.spaceBetween + 'px'});}if(!s.support.flexbox || s.params.setWrapperSize){if(isH())s.wrapper.css({width:s.virtualSize + s.params.spaceBetween + 'px'});else s.wrapper.css({height:s.virtualSize + s.params.spaceBetween + 'px'});}if(s.params.slidesPerColumn > 1){s.virtualSize = (slideSize + s.params.spaceBetween) * slidesNumberEvenToRows;s.virtualSize = Math.ceil(s.virtualSize / s.params.slidesPerColumn) - s.params.spaceBetween;s.wrapper.css({width:s.virtualSize + s.params.spaceBetween + 'px'});if(s.params.centeredSlides){newSlidesGrid = [];for(i = 0;i < s.snapGrid.length;i++) {if(s.snapGrid[i] < s.virtualSize + s.snapGrid[0])newSlidesGrid.push(s.snapGrid[i]);}s.snapGrid = newSlidesGrid;}} // Remove last grid elements depending on width\nif(!s.params.centeredSlides){newSlidesGrid = [];for(i = 0;i < s.snapGrid.length;i++) {if(s.snapGrid[i] <= s.virtualSize - s.size){newSlidesGrid.push(s.snapGrid[i]);}}s.snapGrid = newSlidesGrid;if(Math.floor(s.virtualSize - s.size) > Math.floor(s.snapGrid[s.snapGrid.length - 1])){s.snapGrid.push(s.virtualSize - s.size);}}if(s.snapGrid.length === 0)s.snapGrid = [0];if(s.params.spaceBetween !== 0){if(isH()){if(s.rtl)s.slides.css({marginLeft:spaceBetween + 'px'});else s.slides.css({marginRight:spaceBetween + 'px'});}else s.slides.css({marginBottom:spaceBetween + 'px'});}if(s.params.watchSlidesProgress){s.updateSlidesOffset();}};s.updateSlidesOffset = function(){for(var i=0;i < s.slides.length;i++) {s.slides[i].swiperSlideOffset = isH()?s.slides[i].offsetLeft:s.slides[i].offsetTop;}}; /*=========================\n      Slider/slides progress\n      ===========================*/s.updateSlidesProgress = function(translate){if(typeof translate === 'undefined'){translate = s.translate || 0;}if(s.slides.length === 0)return;if(typeof s.slides[0].swiperSlideOffset === 'undefined')s.updateSlidesOffset();var offsetCenter=-translate;if(s.rtl)offsetCenter = translate; // Visible Slides\nvar containerBox=s.container[0].getBoundingClientRect();var sideBefore=isH()?'left':'top';var sideAfter=isH()?'right':'bottom';s.slides.removeClass(s.params.slideVisibleClass);for(var i=0;i < s.slides.length;i++) {var slide=s.slides[i];var slideProgress=(offsetCenter - slide.swiperSlideOffset) / (slide.swiperSlideSize + s.params.spaceBetween);if(s.params.watchSlidesVisibility){var slideBefore=-(offsetCenter - slide.swiperSlideOffset);var slideAfter=slideBefore + s.slidesSizesGrid[i];var isVisible=slideBefore >= 0 && slideBefore < s.size || slideAfter > 0 && slideAfter <= s.size || slideBefore <= 0 && slideAfter >= s.size;if(isVisible){s.slides.eq(i).addClass(s.params.slideVisibleClass);}}slide.progress = s.rtl?-slideProgress:slideProgress;}};s.updateProgress = function(translate){if(typeof translate === 'undefined'){translate = s.translate || 0;}var translatesDiff=s.maxTranslate() - s.minTranslate();if(translatesDiff === 0){s.progress = 0;s.isBeginning = s.isEnd = true;}else {s.progress = (translate - s.minTranslate()) / translatesDiff;s.isBeginning = s.progress <= 0;s.isEnd = s.progress >= 1;}if(s.isBeginning)s.emit('onReachBeginning',s);if(s.isEnd)s.emit('onReachEnd',s);if(s.params.watchSlidesProgress)s.updateSlidesProgress(translate);s.emit('onProgress',s,s.progress);};s.updateActiveIndex = function(){var translate=s.rtl?s.translate:-s.translate;var newActiveIndex,i,snapIndex;for(i = 0;i < s.slidesGrid.length;i++) {if(typeof s.slidesGrid[i + 1] !== 'undefined'){if(translate >= s.slidesGrid[i] && translate < s.slidesGrid[i + 1] - (s.slidesGrid[i + 1] - s.slidesGrid[i]) / 2){newActiveIndex = i;}else if(translate >= s.slidesGrid[i] && translate < s.slidesGrid[i + 1]){newActiveIndex = i + 1;}}else {if(translate >= s.slidesGrid[i]){newActiveIndex = i;}}} // Normalize slideIndex\nif(newActiveIndex < 0 || typeof newActiveIndex === 'undefined')newActiveIndex = 0; // for (i = 0; i < s.slidesGrid.length; i++) {\n// if (- translate >= s.slidesGrid[i]) {\n// newActiveIndex = i;\n// }\n// }\nsnapIndex = Math.floor(newActiveIndex / s.params.slidesPerGroup);if(snapIndex >= s.snapGrid.length)snapIndex = s.snapGrid.length - 1;if(newActiveIndex === s.activeIndex){return;}s.snapIndex = snapIndex;s.previousIndex = s.activeIndex;s.activeIndex = newActiveIndex;s.updateClasses();}; /*=========================\n      Classes\n      ===========================*/s.updateClasses = function(){s.slides.removeClass(s.params.slideActiveClass + ' ' + s.params.slideNextClass + ' ' + s.params.slidePrevClass);var activeSlide=s.slides.eq(s.activeIndex); // Active classes\nactiveSlide.addClass(s.params.slideActiveClass);activeSlide.next('.' + s.params.slideClass).addClass(s.params.slideNextClass);activeSlide.prev('.' + s.params.slideClass).addClass(s.params.slidePrevClass); // Pagination\nif(s.bullets && s.bullets.length > 0){s.bullets.removeClass(s.params.bulletActiveClass);var bulletIndex;if(s.params.loop){bulletIndex = Math.ceil(s.activeIndex - s.loopedSlides) / s.params.slidesPerGroup;if(bulletIndex > s.slides.length - 1 - s.loopedSlides * 2){bulletIndex = bulletIndex - (s.slides.length - s.loopedSlides * 2);}if(bulletIndex > s.bullets.length - 1)bulletIndex = bulletIndex - s.bullets.length;}else {if(typeof s.snapIndex !== 'undefined'){bulletIndex = s.snapIndex;}else {bulletIndex = s.activeIndex || 0;}}if(s.paginationContainer.length > 1){s.bullets.each(function(){if($(this).index() === bulletIndex)$(this).addClass(s.params.bulletActiveClass);});}else {s.bullets.eq(bulletIndex).addClass(s.params.bulletActiveClass);}} // Next/active buttons\nif(!s.params.loop){if(s.params.prevButton){if(s.isBeginning){$(s.params.prevButton).addClass(s.params.buttonDisabledClass);if(s.params.a11y && s.a11y)s.a11y.disable($(s.params.prevButton));}else {$(s.params.prevButton).removeClass(s.params.buttonDisabledClass);if(s.params.a11y && s.a11y)s.a11y.enable($(s.params.prevButton));}}if(s.params.nextButton){if(s.isEnd){$(s.params.nextButton).addClass(s.params.buttonDisabledClass);if(s.params.a11y && s.a11y)s.a11y.disable($(s.params.nextButton));}else {$(s.params.nextButton).removeClass(s.params.buttonDisabledClass);if(s.params.a11y && s.a11y)s.a11y.enable($(s.params.nextButton));}}}}; /*=========================\n      Pagination\n      ===========================*/s.updatePagination = function(){if(!s.params.pagination)return;if(s.paginationContainer && s.paginationContainer.length > 0){var bulletsHTML='';var numberOfBullets=s.params.loop?Math.ceil((s.slides.length - s.loopedSlides * 2) / s.params.slidesPerGroup):s.snapGrid.length;for(var i=0;i < numberOfBullets;i++) {if(s.params.paginationBulletRender){bulletsHTML += s.params.paginationBulletRender(i,s.params.bulletClass);}else {bulletsHTML += '<' + s.params.paginationElement + ' class=\"' + s.params.bulletClass + '\"></' + s.params.paginationElement + '>';}}s.paginationContainer.html(bulletsHTML);s.bullets = s.paginationContainer.find('.' + s.params.bulletClass);if(s.params.paginationClickable && s.params.a11y && s.a11y){s.a11y.initPagination();}}}; /*=========================\n      Common update method\n      ===========================*/s.update = function(updateTranslate){s.updateContainerSize();s.updateSlidesSize();s.updateProgress();s.updatePagination();s.updateClasses();if(s.params.scrollbar && s.scrollbar){s.scrollbar.set();}function forceSetTranslate(){newTranslate = Math.min(Math.max(s.translate,s.maxTranslate()),s.minTranslate());s.setWrapperTranslate(newTranslate);s.updateActiveIndex();s.updateClasses();}if(updateTranslate){var translated,newTranslate;if(s.controller && s.controller.spline){s.controller.spline = undefined;}if(s.params.freeMode){forceSetTranslate();}else {if((s.params.slidesPerView === 'auto' || s.params.slidesPerView > 1) && s.isEnd && !s.params.centeredSlides){translated = s.slideTo(s.slides.length - 1,0,false,true);}else {translated = s.slideTo(s.activeIndex,0,false,true);}if(!translated){forceSetTranslate();}}}}; /*=========================\n      Resize Handler\n      ===========================*/s.onResize = function(forceUpdatePagination){ // Disable locks on resize\nvar allowSwipeToPrev=s.params.allowSwipeToPrev;var allowSwipeToNext=s.params.allowSwipeToNext;s.params.allowSwipeToPrev = s.params.allowSwipeToNext = true;s.updateContainerSize();s.updateSlidesSize();if(s.params.slidesPerView === 'auto' || s.params.freeMode || forceUpdatePagination)s.updatePagination();if(s.params.scrollbar && s.scrollbar){s.scrollbar.set();}if(s.controller && s.controller.spline){s.controller.spline = undefined;}if(s.params.freeMode){var newTranslate=Math.min(Math.max(s.translate,s.maxTranslate()),s.minTranslate());s.setWrapperTranslate(newTranslate);s.updateActiveIndex();s.updateClasses();}else {s.updateClasses();if((s.params.slidesPerView === 'auto' || s.params.slidesPerView > 1) && s.isEnd && !s.params.centeredSlides){s.slideTo(s.slides.length - 1,0,false,true);}else {s.slideTo(s.activeIndex,0,false,true);}} // Return locks after resize\ns.params.allowSwipeToPrev = allowSwipeToPrev;s.params.allowSwipeToNext = allowSwipeToNext;}; /*=========================\n      Events\n      ===========================*/ //Define Touch Events\nvar desktopEvents=['mousedown','mousemove','mouseup'];if(window.navigator.pointerEnabled)desktopEvents = ['pointerdown','pointermove','pointerup'];else if(window.navigator.msPointerEnabled)desktopEvents = ['MSPointerDown','MSPointerMove','MSPointerUp'];s.touchEvents = {start:s.support.touch || !s.params.simulateTouch?'touchstart':desktopEvents[0],move:s.support.touch || !s.params.simulateTouch?'touchmove':desktopEvents[1],end:s.support.touch || !s.params.simulateTouch?'touchend':desktopEvents[2]}; // WP8 Touch Events Fix\nif(window.navigator.pointerEnabled || window.navigator.msPointerEnabled){(s.params.touchEventsTarget === 'container'?s.container:s.wrapper).addClass('swiper-wp8-' + s.params.direction);} // Attach/detach events\ns.initEvents = function(detach){console.debug('swiper initEvents',detach?'detach':'attach');var actionDom=detach?'off':'on';var action=detach?'removeEventListener':'addEventListener';var touchEventsTarget=s.params.touchEventsTarget === 'container'?s.container[0]:s.wrapper[0];var target=s.support.touch?touchEventsTarget:document;var moveCapture=s.params.nested?true:false; //Touch Events\nif(s.browser.ie){touchEventsTarget[action](s.touchEvents.start,s.onTouchStart,false);target[action](s.touchEvents.move,s.onTouchMove,moveCapture);target[action](s.touchEvents.end,s.onTouchEnd,false);}else {if(s.support.touch){touchEventsTarget[action](s.touchEvents.start,s.onTouchStart,false);touchEventsTarget[action](s.touchEvents.move,s.onTouchMove,moveCapture);touchEventsTarget[action](s.touchEvents.end,s.onTouchEnd,false);}if(params.simulateTouch && !s.device.ios && !s.device.android){touchEventsTarget[action]('mousedown',s.onTouchStart,false);document[action]('mousemove',s.onTouchMove,moveCapture);document[action]('mouseup',s.onTouchEnd,false);}}window[action]('resize',s.onResize); // Next, Prev, Index\nif(s.params.nextButton){$(s.params.nextButton)[actionDom]('click',s.onClickNext);if(s.params.a11y && s.a11y)$(s.params.nextButton)[actionDom]('keydown',s.a11y.onEnterKey);}if(s.params.prevButton){$(s.params.prevButton)[actionDom]('click',s.onClickPrev);if(s.params.a11y && s.a11y)$(s.params.prevButton)[actionDom]('keydown',s.a11y.onEnterKey);}if(s.params.pagination && s.params.paginationClickable){$(s.paginationContainer)[actionDom]('click','.' + s.params.bulletClass,s.onClickIndex);if(s.params.a11y && s.a11y)$(s.paginationContainer)[actionDom]('keydown','.' + s.params.bulletClass,s.a11y.onEnterKey);} // Prevent Links Clicks\nif(s.params.preventClicks || s.params.preventClicksPropagation)touchEventsTarget[action]('click',s.preventClicks,true);};s.attachEvents = function(detach){s.initEvents();};s.detachEvents = function(){s.initEvents(true);}; /*=========================\n      Handle Clicks\n      ===========================*/ // Prevent Clicks\ns.allowClick = true;s.preventClicks = function(e){if(!s.allowClick){if(s.params.preventClicks)e.preventDefault();if(s.params.preventClicksPropagation && s.animating){e.stopPropagation();e.stopImmediatePropagation();}}}; // Clicks\ns.onClickNext = function(e){e.preventDefault();if(s.isEnd && !s.params.loop)return;s.slideNext();};s.onClickPrev = function(e){e.preventDefault();if(s.isBeginning && !s.params.loop)return;s.slidePrev();};s.onClickIndex = function(e){e.preventDefault();var index=$(this).index() * s.params.slidesPerGroup;if(s.params.loop)index = index + s.loopedSlides;s.slideTo(index);}; /*=========================\n      Handle Touches\n      ===========================*/function findElementInEvent(e,selector){var el=$(e.target);if(!el.is(selector)){if(typeof selector === 'string'){el = el.parents(selector);}else if(selector.nodeType){var found;el.parents().each(function(index,_el){if(_el === selector)found = selector;});if(!found)return undefined;else return selector;}}if(el.length === 0){return undefined;}return el[0];}s.updateClickedSlide = function(e){var slide=findElementInEvent(e,'.' + s.params.slideClass);var slideFound=false;if(slide){for(var i=0;i < s.slides.length;i++) {if(s.slides[i] === slide)slideFound = true;}}if(slide && slideFound){s.clickedSlide = slide;s.clickedIndex = $(slide).index();}else {s.clickedSlide = undefined;s.clickedIndex = undefined;return;}if(s.params.slideToClickedSlide && s.clickedIndex !== undefined && s.clickedIndex !== s.activeIndex){var slideToIndex=s.clickedIndex,realIndex;if(s.params.loop){realIndex = $(s.clickedSlide).attr('data-swiper-slide-index');if(slideToIndex > s.slides.length - s.params.slidesPerView){s.fixLoop();slideToIndex = s.wrapper.children('.' + s.params.slideClass + '[data-swiper-slide-index=\"' + realIndex + '\"]').eq(0).index();setTimeout(function(){s.slideTo(slideToIndex);},0);}else if(slideToIndex < s.params.slidesPerView - 1){s.fixLoop();var duplicatedSlides=s.wrapper.children('.' + s.params.slideClass + '[data-swiper-slide-index=\"' + realIndex + '\"]');slideToIndex = duplicatedSlides.eq(duplicatedSlides.length - 1).index();setTimeout(function(){s.slideTo(slideToIndex);},0);}else {s.slideTo(slideToIndex);}}else {s.slideTo(slideToIndex);}}};var isTouched,isMoved,touchStartTime,isScrolling,currentTranslate,startTranslate,allowThresholdMove, // Form elements to match\nformElements='input, select, textarea, button', // Last click time\nlastClickTime=Date.now(),clickTimeout, //Velocities\nvelocities=[],allowMomentumBounce; // Animating Flag\ns.animating = false; // Touches information\ns.touches = {startX:0,startY:0,currentX:0,currentY:0,diff:0}; // Touch handlers\nvar isTouchEvent,startMoving;s.onTouchStart = function(e){if(e.originalEvent)e = e.originalEvent;isTouchEvent = e.type === 'touchstart';if(!isTouchEvent && 'which' in e && e.which === 3)return;if(s.params.noSwiping && findElementInEvent(e,'.' + s.params.noSwipingClass)){s.allowClick = true;return;}if(s.params.swipeHandler){if(!findElementInEvent(e,s.params.swipeHandler))return;}var startX=s.touches.currentX = e.type === 'touchstart'?e.targetTouches[0].pageX:e.pageX;var startY=s.touches.currentY = e.type === 'touchstart'?e.targetTouches[0].pageY:e.pageY; // Do NOT start if iOS edge swipe is detected. Otherwise iOS app (UIWebView) cannot swipe-to-go-back anymore\nif(s.device.ios && s.params.iOSEdgeSwipeDetection && startX <= s.params.iOSEdgeSwipeThreshold){return;}isTouched = true;isMoved = false;isScrolling = undefined;startMoving = undefined;s.touches.startX = startX;s.touches.startY = startY;touchStartTime = Date.now();s.allowClick = true;s.updateContainerSize();s.swipeDirection = undefined;if(s.params.threshold > 0)allowThresholdMove = false;if(e.type !== 'touchstart'){var preventDefault=true;if($(e.target).is(formElements))preventDefault = false;if(document.activeElement && $(document.activeElement).is(formElements)){document.activeElement.blur();}if(preventDefault){e.preventDefault();}}s.emit('onTouchStart',s,e);};s.onTouchMove = function(e){if(e.originalEvent)e = e.originalEvent;if(isTouchEvent && e.type === 'mousemove')return;if(e.preventedByNestedSwiper)return;if(s.params.onlyExternal){ // isMoved = true;\ns.allowClick = false;if(isTouched){s.touches.startX = s.touches.currentX = e.type === 'touchmove'?e.targetTouches[0].pageX:e.pageX;s.touches.startY = s.touches.currentY = e.type === 'touchmove'?e.targetTouches[0].pageY:e.pageY;touchStartTime = Date.now();}return;}if(isTouchEvent && document.activeElement){if(e.target === document.activeElement && $(e.target).is(formElements)){isMoved = true;s.allowClick = false;return;}}s.emit('onTouchMove',s,e);if(e.targetTouches && e.targetTouches.length > 1)return;s.touches.currentX = e.type === 'touchmove'?e.targetTouches[0].pageX:e.pageX;s.touches.currentY = e.type === 'touchmove'?e.targetTouches[0].pageY:e.pageY;if(typeof isScrolling === 'undefined'){var touchAngle=Math.atan2(Math.abs(s.touches.currentY - s.touches.startY),Math.abs(s.touches.currentX - s.touches.startX)) * 180 / Math.PI;isScrolling = isH()?touchAngle > s.params.touchAngle:90 - touchAngle > s.params.touchAngle;}if(isScrolling){s.emit('onTouchMoveOpposite',s,e);}if(typeof startMoving === 'undefined' && s.browser.ieTouch){if(s.touches.currentX !== s.touches.startX || s.touches.currentY !== s.touches.startY){startMoving = true;}}if(!isTouched)return;if(isScrolling){isTouched = false;return;}if(!startMoving && s.browser.ieTouch){return;}s.allowClick = false;s.emit('onSliderMove',s,e);e.preventDefault();if(s.params.touchMoveStopPropagation && !s.params.nested){e.stopPropagation();}if(!isMoved){if(params.loop){s.fixLoop();}startTranslate = s.getWrapperTranslate();s.setWrapperTransition(0);if(s.animating){s.wrapper.trigger('webkitTransitionEnd transitionend oTransitionEnd MSTransitionEnd msTransitionEnd');}if(s.params.autoplay && s.autoplaying){if(s.params.autoplayDisableOnInteraction){s.stopAutoplay();}else {s.pauseAutoplay();}}allowMomentumBounce = false; //Grab Cursor\nif(s.params.grabCursor){s.container[0].style.cursor = 'move';s.container[0].style.cursor = '-webkit-grabbing';s.container[0].style.cursor = '-moz-grabbin';s.container[0].style.cursor = 'grabbing';}}isMoved = true;var diff=s.touches.diff = isH()?s.touches.currentX - s.touches.startX:s.touches.currentY - s.touches.startY;diff = diff * s.params.touchRatio;if(s.rtl)diff = -diff;s.swipeDirection = diff > 0?'prev':'next';currentTranslate = diff + startTranslate;var disableParentSwiper=true;if(diff > 0 && currentTranslate > s.minTranslate()){disableParentSwiper = false;if(s.params.resistance)currentTranslate = s.minTranslate() - 1 + Math.pow(-s.minTranslate() + startTranslate + diff,s.params.resistanceRatio);}else if(diff < 0 && currentTranslate < s.maxTranslate()){disableParentSwiper = false;if(s.params.resistance)currentTranslate = s.maxTranslate() + 1 - Math.pow(s.maxTranslate() - startTranslate - diff,s.params.resistanceRatio);}if(disableParentSwiper){e.preventedByNestedSwiper = true;} // Directions locks\nif(!s.params.allowSwipeToNext && s.swipeDirection === 'next' && currentTranslate < startTranslate){currentTranslate = startTranslate;}if(!s.params.allowSwipeToPrev && s.swipeDirection === 'prev' && currentTranslate > startTranslate){currentTranslate = startTranslate;}if(!s.params.followFinger)return; // Threshold\nif(s.params.threshold > 0){if(Math.abs(diff) > s.params.threshold || allowThresholdMove){if(!allowThresholdMove){allowThresholdMove = true;s.touches.startX = s.touches.currentX;s.touches.startY = s.touches.currentY;currentTranslate = startTranslate;s.touches.diff = isH()?s.touches.currentX - s.touches.startX:s.touches.currentY - s.touches.startY;return;}}else {currentTranslate = startTranslate;return;}} // Update active index in free mode\nif(s.params.freeMode || s.params.watchSlidesProgress){s.updateActiveIndex();}if(s.params.freeMode){ //Velocity\nif(velocities.length === 0){velocities.push({position:s.touches[isH()?'startX':'startY'],time:touchStartTime});}velocities.push({position:s.touches[isH()?'currentX':'currentY'],time:new window.Date().getTime()});} // Update progress\ns.updateProgress(currentTranslate); // Update translate\ns.setWrapperTranslate(currentTranslate);};s.onTouchEnd = function(e){if(e.originalEvent)e = e.originalEvent;s.emit('onTouchEnd',s,e);if(!isTouched)return; //Return Grab Cursor\nif(s.params.grabCursor && isMoved && isTouched){s.container[0].style.cursor = 'move';s.container[0].style.cursor = '-webkit-grab';s.container[0].style.cursor = '-moz-grab';s.container[0].style.cursor = 'grab';} // Time diff\nvar touchEndTime=Date.now();var timeDiff=touchEndTime - touchStartTime; // Tap, doubleTap, Click\nif(s.allowClick){s.updateClickedSlide(e);s.emit('onTap',s,e);if(timeDiff < 300 && touchEndTime - lastClickTime > 300){if(clickTimeout)clearTimeout(clickTimeout);clickTimeout = setTimeout(function(){if(!s)return;if(s.params.paginationHide && s.paginationContainer.length > 0 && !$(e.target).hasClass(s.params.bulletClass)){s.paginationContainer.toggleClass(s.params.paginationHiddenClass);}s.emit('onClick',s,e);},300);}if(timeDiff < 300 && touchEndTime - lastClickTime < 300){if(clickTimeout)clearTimeout(clickTimeout);s.emit('onDoubleTap',s,e);}}lastClickTime = Date.now();setTimeout(function(){if(s)s.allowClick = true;},0);if(!isTouched || !isMoved || !s.swipeDirection || s.touches.diff === 0 || currentTranslate === startTranslate){isTouched = isMoved = false;return;}isTouched = isMoved = false;var currentPos;if(s.params.followFinger){currentPos = s.rtl?s.translate:-s.translate;}else {currentPos = -currentTranslate;}if(s.params.freeMode){if(currentPos < -s.minTranslate()){s.slideTo(s.activeIndex);return;}else if(currentPos > -s.maxTranslate()){if(s.slides.length < s.snapGrid.length){s.slideTo(s.snapGrid.length - 1);}else {s.slideTo(s.slides.length - 1);}return;}if(s.params.freeModeMomentum){if(velocities.length > 1){var lastMoveEvent=velocities.pop(),velocityEvent=velocities.pop();var distance=lastMoveEvent.position - velocityEvent.position;var time=lastMoveEvent.time - velocityEvent.time;s.velocity = distance / time;s.velocity = s.velocity / 2;if(Math.abs(s.velocity) < 0.02){s.velocity = 0;} // this implies that the user stopped moving a finger then released.\n// There would be no events with distance zero, so the last event is stale.\nif(time > 150 || new window.Date().getTime() - lastMoveEvent.time > 300){s.velocity = 0;}}else {s.velocity = 0;}velocities.length = 0;var momentumDuration=1000 * s.params.freeModeMomentumRatio;var momentumDistance=s.velocity * momentumDuration;var newPosition=s.translate + momentumDistance;if(s.rtl)newPosition = -newPosition;var doBounce=false;var afterBouncePosition;var bounceAmount=Math.abs(s.velocity) * 20 * s.params.freeModeMomentumBounceRatio;if(newPosition < s.maxTranslate()){if(s.params.freeModeMomentumBounce){if(newPosition + s.maxTranslate() < -bounceAmount){newPosition = s.maxTranslate() - bounceAmount;}afterBouncePosition = s.maxTranslate();doBounce = true;allowMomentumBounce = true;}else {newPosition = s.maxTranslate();}}else if(newPosition > s.minTranslate()){if(s.params.freeModeMomentumBounce){if(newPosition - s.minTranslate() > bounceAmount){newPosition = s.minTranslate() + bounceAmount;}afterBouncePosition = s.minTranslate();doBounce = true;allowMomentumBounce = true;}else {newPosition = s.minTranslate();}}else if(s.params.freeModeSticky){var j=0,nextSlide;for(j = 0;j < s.snapGrid.length;j += 1) {if(s.snapGrid[j] > -newPosition){nextSlide = j;break;}}if(Math.abs(s.snapGrid[nextSlide] - newPosition) < Math.abs(s.snapGrid[nextSlide - 1] - newPosition) || s.swipeDirection === 'next'){newPosition = s.snapGrid[nextSlide];}else {newPosition = s.snapGrid[nextSlide - 1];}if(!s.rtl)newPosition = -newPosition;} //Fix duration\nif(s.velocity !== 0){if(s.rtl){momentumDuration = Math.abs((-newPosition - s.translate) / s.velocity);}else {momentumDuration = Math.abs((newPosition - s.translate) / s.velocity);}}else if(s.params.freeModeSticky){s.slideReset();return;}if(s.params.freeModeMomentumBounce && doBounce){s.updateProgress(afterBouncePosition);s.setWrapperTransition(momentumDuration);s.setWrapperTranslate(newPosition);s.onTransitionStart();s.animating = true;s.wrapper.transitionEnd(function(){if(!s || !allowMomentumBounce)return;s.emit('onMomentumBounce',s);s.setWrapperTransition(s.params.speed);s.setWrapperTranslate(afterBouncePosition);s.wrapper.transitionEnd(function(){if(!s)return;s.onTransitionEnd();});});}else if(s.velocity){s.updateProgress(newPosition);s.setWrapperTransition(momentumDuration);s.setWrapperTranslate(newPosition);s.onTransitionStart();if(!s.animating){s.animating = true;s.wrapper.transitionEnd(function(){if(!s)return;s.onTransitionEnd();});}}else {s.updateProgress(newPosition);}s.updateActiveIndex();}if(!s.params.freeModeMomentum || timeDiff >= s.params.longSwipesMs){s.updateProgress();s.updateActiveIndex();}return;} // Find current slide\nvar i,stopIndex=0,groupSize=s.slidesSizesGrid[0];for(i = 0;i < s.slidesGrid.length;i += s.params.slidesPerGroup) {if(typeof s.slidesGrid[i + s.params.slidesPerGroup] !== 'undefined'){if(currentPos >= s.slidesGrid[i] && currentPos < s.slidesGrid[i + s.params.slidesPerGroup]){stopIndex = i;groupSize = s.slidesGrid[i + s.params.slidesPerGroup] - s.slidesGrid[i];}}else {if(currentPos >= s.slidesGrid[i]){stopIndex = i;groupSize = s.slidesGrid[s.slidesGrid.length - 1] - s.slidesGrid[s.slidesGrid.length - 2];}}} // Find current slide size\nvar ratio=(currentPos - s.slidesGrid[stopIndex]) / groupSize;if(timeDiff > s.params.longSwipesMs){ // Long touches\nif(!s.params.longSwipes){s.slideTo(s.activeIndex);return;}if(s.swipeDirection === 'next'){if(ratio >= s.params.longSwipesRatio)s.slideTo(stopIndex + s.params.slidesPerGroup);else s.slideTo(stopIndex);}if(s.swipeDirection === 'prev'){if(ratio > 1 - s.params.longSwipesRatio)s.slideTo(stopIndex + s.params.slidesPerGroup);else s.slideTo(stopIndex);}}else { // Short swipes\nif(!s.params.shortSwipes){s.slideTo(s.activeIndex);return;}if(s.swipeDirection === 'next'){s.slideTo(stopIndex + s.params.slidesPerGroup);}if(s.swipeDirection === 'prev'){s.slideTo(stopIndex);}}}; /*=========================\n      Transitions\n      ===========================*/s._slideTo = function(slideIndex,speed){return s.slideTo(slideIndex,speed,true,true);};s.slideTo = function(slideIndex,speed,runCallbacks,internal){if(typeof runCallbacks === 'undefined')runCallbacks = true;if(typeof slideIndex === 'undefined')slideIndex = 0;if(slideIndex < 0)slideIndex = 0;s.snapIndex = Math.floor(slideIndex / s.params.slidesPerGroup);if(s.snapIndex >= s.snapGrid.length)s.snapIndex = s.snapGrid.length - 1;var translate=-s.snapGrid[s.snapIndex]; // Stop autoplay\nif(s.params.autoplay && s.autoplaying){if(internal || !s.params.autoplayDisableOnInteraction){s.pauseAutoplay(speed);}else {s.stopAutoplay();}} // Update progress\ns.updateProgress(translate); // Normalize slideIndex\nfor(var i=0;i < s.slidesGrid.length;i++) {if(-Math.floor(translate * 100) >= Math.floor(s.slidesGrid[i] * 100)){slideIndex = i;}} // Directions locks\nif(!s.params.allowSwipeToNext && translate < s.translate && translate < s.minTranslate()){return false;}if(!s.params.allowSwipeToPrev && translate > s.translate && translate > s.maxTranslate()){if((s.activeIndex || 0) !== slideIndex)return false;} // Update Index\nif(typeof speed === 'undefined')speed = s.params.speed;s.previousIndex = s.activeIndex || 0;s.activeIndex = slideIndex;if(translate === s.translate){s.updateClasses();return false;}s.updateClasses();s.onTransitionStart(runCallbacks);var translateX=isH()?translate:0,translateY=isH()?0:translate;if(speed === 0){s.setWrapperTransition(0);s.setWrapperTranslate(translate);s.onTransitionEnd(runCallbacks);}else {s.setWrapperTransition(speed);s.setWrapperTranslate(translate);if(!s.animating){s.animating = true;s.wrapper.transitionEnd(function(){if(!s)return;s.onTransitionEnd(runCallbacks);});}}return true;};s.onTransitionStart = function(runCallbacks){if(typeof runCallbacks === 'undefined')runCallbacks = true;if(s.lazy)s.lazy.onTransitionStart();if(runCallbacks){s.emit('onTransitionStart',s);if(s.activeIndex !== s.previousIndex){s.emit('onSlideChangeStart',s);}}};s.onTransitionEnd = function(runCallbacks){s.animating = false;s.setWrapperTransition(0);if(typeof runCallbacks === 'undefined')runCallbacks = true;if(s.lazy)s.lazy.onTransitionEnd();if(runCallbacks){s.emit('onTransitionEnd',s);if(s.activeIndex !== s.previousIndex){s.emit('onSlideChangeEnd',s);}}if(s.params.hashnav && s.hashnav){s.hashnav.setHash();}};s.slideNext = function(runCallbacks,speed,internal){if(s.params.loop){if(s.animating)return false;s.fixLoop();var clientLeft=s.container[0].clientLeft;return s.slideTo(s.activeIndex + s.params.slidesPerGroup,speed,runCallbacks,internal);}else return s.slideTo(s.activeIndex + s.params.slidesPerGroup,speed,runCallbacks,internal);};s._slideNext = function(speed){return s.slideNext(true,speed,true);};s.slidePrev = function(runCallbacks,speed,internal){if(s.params.loop){if(s.animating)return false;s.fixLoop();var clientLeft=s.container[0].clientLeft;return s.slideTo(s.activeIndex - 1,speed,runCallbacks,internal);}else return s.slideTo(s.activeIndex - 1,speed,runCallbacks,internal);};s._slidePrev = function(speed){return s.slidePrev(true,speed,true);};s.slideReset = function(runCallbacks,speed,internal){return s.slideTo(s.activeIndex,speed,runCallbacks);}; /*=========================\n      Translate/transition helpers\n      ===========================*/s.setWrapperTransition = function(duration,byController){s.wrapper.transition(duration);if(s.params.effect !== 'slide' && s.effects[s.params.effect]){s.effects[s.params.effect].setTransition(duration);}if(s.params.parallax && s.parallax){s.parallax.setTransition(duration);}if(s.params.scrollbar && s.scrollbar){s.scrollbar.setTransition(duration);}if(s.params.control && s.controller){s.controller.setTransition(duration,byController);}s.emit('onSetTransition',s,duration);};s.setWrapperTranslate = function(translate,updateActiveIndex,byController){var x=0,y=0,z=0;if(isH()){x = s.rtl?-translate:translate;}else {y = translate;}if(!s.params.virtualTranslate){if(s.support.transforms3d)s.wrapper.transform('translate3d(' + x + 'px, ' + y + 'px, ' + z + 'px)');else s.wrapper.transform('translate(' + x + 'px, ' + y + 'px)');}s.translate = isH()?x:y;if(updateActiveIndex)s.updateActiveIndex();if(s.params.effect !== 'slide' && s.effects[s.params.effect]){s.effects[s.params.effect].setTranslate(s.translate);}if(s.params.parallax && s.parallax){s.parallax.setTranslate(s.translate);}if(s.params.scrollbar && s.scrollbar){s.scrollbar.setTranslate(s.translate);}if(s.params.control && s.controller){s.controller.setTranslate(s.translate,byController);}s.emit('onSetTranslate',s,s.translate);};s.getTranslate = function(el,axis){var matrix,curTransform,curStyle,transformMatrix; // automatic axis detection\nif(typeof axis === 'undefined'){axis = 'x';}if(s.params.virtualTranslate){return s.rtl?-s.translate:s.translate;}curStyle = window.getComputedStyle(el,null);if(window.WebKitCSSMatrix){ // Some old versions of Webkit choke when 'none' is passed; pass\n// empty string instead in this case\ntransformMatrix = new window.WebKitCSSMatrix(curStyle.webkitTransform === 'none'?'':curStyle.webkitTransform);}else {transformMatrix = curStyle.MozTransform || curStyle.OTransform || curStyle.MsTransform || curStyle.msTransform || curStyle.transform || curStyle.getPropertyValue('transform').replace('translate(','matrix(1, 0, 0, 1,');matrix = transformMatrix.toString().split(',');}if(axis === 'x'){ //Latest Chrome and webkits Fix\nif(window.WebKitCSSMatrix)curTransform = transformMatrix.m41;else if(matrix.length === 16)curTransform = parseFloat(matrix[12]);else curTransform = parseFloat(matrix[4]);}if(axis === 'y'){ //Latest Chrome and webkits Fix\nif(window.WebKitCSSMatrix)curTransform = transformMatrix.m42;else if(matrix.length === 16)curTransform = parseFloat(matrix[13]);else curTransform = parseFloat(matrix[5]);}if(s.rtl && curTransform)curTransform = -curTransform;return curTransform || 0;};s.getWrapperTranslate = function(axis){if(typeof axis === 'undefined'){axis = isH()?'x':'y';}return s.getTranslate(s.wrapper[0],axis);}; /*=========================\n      Observer\n      ===========================*/s.observers = [];function initObserver(target,options){options = options || {}; // create an observer instance\nvar ObserverFunc=window.MutationObserver || window.WebkitMutationObserver;var observer=new ObserverFunc(function(mutations){mutations.forEach(function(mutation){s.onResize(true);s.emit('onObserverUpdate',s,mutation);});});observer.observe(target,{attributes:typeof options.attributes === 'undefined'?true:options.attributes,childList:typeof options.childList === 'undefined'?true:options.childList,characterData:typeof options.characterData === 'undefined'?true:options.characterData});s.observers.push(observer);}s.initObservers = function(){if(s.params.observeParents){var containerParents=s.container.parents();for(var i=0;i < containerParents.length;i++) {initObserver(containerParents[i]);}} // Observe container\ninitObserver(s.container[0],{childList:false}); // Observe wrapper\ninitObserver(s.wrapper[0],{attributes:false});};s.disconnectObservers = function(){for(var i=0;i < s.observers.length;i++) {s.observers[i].disconnect();}s.observers = [];}; /*=========================\n      Loop\n      ===========================*/ // Create looped slides\ns.createLoop = function(){ // Remove duplicated slides\ns.wrapper.children('.' + s.params.slideClass + '.' + s.params.slideDuplicateClass).remove();var slides=s.wrapper.children('.' + s.params.slideClass);if(s.params.slidesPerView === 'auto' && !s.params.loopedSlides)s.params.loopedSlides = slides.length;s.loopedSlides = parseInt(s.params.loopedSlides || s.params.slidesPerView,10);s.loopedSlides = s.loopedSlides + s.params.loopAdditionalSlides;if(s.loopedSlides > slides.length){s.loopedSlides = slides.length;}var prependSlides=[],appendSlides=[],i;slides.each(function(index,el){var slide=$(this);if(index < s.loopedSlides)appendSlides.push(el);if(index < slides.length && index >= slides.length - s.loopedSlides)prependSlides.push(el);slide.attr('data-swiper-slide-index',index);});for(i = 0;i < appendSlides.length;i++) {s.wrapper.append($(appendSlides[i].cloneNode(true)).addClass(s.params.slideDuplicateClass));}for(i = prependSlides.length - 1;i >= 0;i--) {s.wrapper.prepend($(prependSlides[i].cloneNode(true)).addClass(s.params.slideDuplicateClass));}};s.destroyLoop = function(){s.wrapper.children('.' + s.params.slideClass + '.' + s.params.slideDuplicateClass).remove();s.slides.removeAttr('data-swiper-slide-index');};s.fixLoop = function(){var newIndex; //Fix For Negative Oversliding\nif(s.activeIndex < s.loopedSlides){newIndex = s.slides.length - s.loopedSlides * 3 + s.activeIndex;newIndex = newIndex + s.loopedSlides;s.slideTo(newIndex,0,false,true);}else if(s.params.slidesPerView === 'auto' && s.activeIndex >= s.loopedSlides * 2 || s.activeIndex > s.slides.length - s.params.slidesPerView * 2){newIndex = -s.slides.length + s.activeIndex + s.loopedSlides;newIndex = newIndex + s.loopedSlides;s.slideTo(newIndex,0,false,true);}}; /*=========================\n      Append/Prepend/Remove Slides\n      ===========================*/s.appendSlide = function(slides){if(s.params.loop){s.destroyLoop();}if(typeof slides === 'object' && slides.length){for(var i=0;i < slides.length;i++) {if(slides[i])s.wrapper.append(slides[i]);}}else {s.wrapper.append(slides);}if(s.params.loop){s.createLoop();}if(!(s.params.observer && s.support.observer)){s.update(true);}};s.prependSlide = function(slides){if(s.params.loop){s.destroyLoop();}var newActiveIndex=s.activeIndex + 1;if(typeof slides === 'object' && slides.length){for(var i=0;i < slides.length;i++) {if(slides[i])s.wrapper.prepend(slides[i]);}newActiveIndex = s.activeIndex + slides.length;}else {s.wrapper.prepend(slides);}if(s.params.loop){s.createLoop();}if(!(s.params.observer && s.support.observer)){s.update(true);}s.slideTo(newActiveIndex,0,false);};s.removeSlide = function(slidesIndexes){if(s.params.loop){s.destroyLoop();s.slides = s.wrapper.children('.' + s.params.slideClass);}var newActiveIndex=s.activeIndex,indexToRemove;if(typeof slidesIndexes === 'object' && slidesIndexes.length){for(var i=0;i < slidesIndexes.length;i++) {indexToRemove = slidesIndexes[i];if(s.slides[indexToRemove])s.slides.eq(indexToRemove).remove();if(indexToRemove < newActiveIndex)newActiveIndex--;}newActiveIndex = Math.max(newActiveIndex,0);}else {indexToRemove = slidesIndexes;if(s.slides[indexToRemove])s.slides.eq(indexToRemove).remove();if(indexToRemove < newActiveIndex)newActiveIndex--;newActiveIndex = Math.max(newActiveIndex,0);}if(s.params.loop){s.createLoop();}if(!(s.params.observer && s.support.observer)){s.update(true);}if(s.params.loop){s.slideTo(newActiveIndex + s.loopedSlides,0,false);}else {s.slideTo(newActiveIndex,0,false);}};s.removeAllSlides = function(){var slidesIndexes=[];for(var i=0;i < s.slides.length;i++) {slidesIndexes.push(i);}s.removeSlide(slidesIndexes);}; /*=========================\n      Effects\n      ===========================*/s.effects = {fade:{setTranslate:function setTranslate(){for(var i=0;i < s.slides.length;i++) {var slide=s.slides.eq(i);var offset=slide[0].swiperSlideOffset;var tx=-offset;if(!s.params.virtualTranslate)tx = tx - s.translate;var ty=0;if(!isH()){ty = tx;tx = 0;}var slideOpacity=s.params.fade.crossFade?Math.max(1 - Math.abs(slide[0].progress),0):1 + Math.min(Math.max(slide[0].progress,-1),0);slide.css({opacity:slideOpacity}).transform('translate3d(' + tx + 'px, ' + ty + 'px, 0px)');}},setTransition:function setTransition(duration){s.slides.transition(duration);if(s.params.virtualTranslate && duration !== 0){var eventTriggered=false;s.slides.transitionEnd(function(){if(eventTriggered)return;if(!s)return;eventTriggered = true;s.animating = false;var triggerEvents=['webkitTransitionEnd','transitionend','oTransitionEnd','MSTransitionEnd','msTransitionEnd'];for(var i=0;i < triggerEvents.length;i++) {s.wrapper.trigger(triggerEvents[i]);}});}}},cube:{setTranslate:function setTranslate(){var wrapperRotate=0,cubeShadow;if(s.params.cube.shadow){if(isH()){cubeShadow = s.wrapper.find('.swiper-cube-shadow');if(cubeShadow.length === 0){cubeShadow = $('<div class=\"swiper-cube-shadow\"></div>');s.wrapper.append(cubeShadow);}cubeShadow.css({height:s.width + 'px'});}else {cubeShadow = s.container.find('.swiper-cube-shadow');if(cubeShadow.length === 0){cubeShadow = $('<div class=\"swiper-cube-shadow\"></div>');s.container.append(cubeShadow);}}}for(var i=0;i < s.slides.length;i++) {var slide=s.slides.eq(i);var slideAngle=i * 90;var round=Math.floor(slideAngle / 360);if(s.rtl){slideAngle = -slideAngle;round = Math.floor(-slideAngle / 360);}var progress=Math.max(Math.min(slide[0].progress,1),-1);var tx=0,ty=0,tz=0;if(i % 4 === 0){tx = -round * 4 * s.size;tz = 0;}else if((i - 1) % 4 === 0){tx = 0;tz = -round * 4 * s.size;}else if((i - 2) % 4 === 0){tx = s.size + round * 4 * s.size;tz = s.size;}else if((i - 3) % 4 === 0){tx = -s.size;tz = 3 * s.size + s.size * 4 * round;}if(s.rtl){tx = -tx;}if(!isH()){ty = tx;tx = 0;}var transform='rotateX(' + (isH()?0:-slideAngle) + 'deg) rotateY(' + (isH()?slideAngle:0) + 'deg) translate3d(' + tx + 'px, ' + ty + 'px, ' + tz + 'px)';if(progress <= 1 && progress > -1){wrapperRotate = i * 90 + progress * 90;if(s.rtl)wrapperRotate = -i * 90 - progress * 90;}slide.transform(transform);if(s.params.cube.slideShadows){ //Set shadows\nvar shadowBefore=isH()?slide.find('.swiper-slide-shadow-left'):slide.find('.swiper-slide-shadow-top');var shadowAfter=isH()?slide.find('.swiper-slide-shadow-right'):slide.find('.swiper-slide-shadow-bottom');if(shadowBefore.length === 0){shadowBefore = $('<div class=\"swiper-slide-shadow-' + (isH()?'left':'top') + '\"></div>');slide.append(shadowBefore);}if(shadowAfter.length === 0){shadowAfter = $('<div class=\"swiper-slide-shadow-' + (isH()?'right':'bottom') + '\"></div>');slide.append(shadowAfter);}var shadowOpacity=slide[0].progress;if(shadowBefore.length)shadowBefore[0].style.opacity = -slide[0].progress;if(shadowAfter.length)shadowAfter[0].style.opacity = slide[0].progress;}}s.wrapper.css({'-webkit-transform-origin':'50% 50% -' + s.size / 2 + 'px','-moz-transform-origin':'50% 50% -' + s.size / 2 + 'px','-ms-transform-origin':'50% 50% -' + s.size / 2 + 'px','transform-origin':'50% 50% -' + s.size / 2 + 'px'});if(s.params.cube.shadow){if(isH()){cubeShadow.transform('translate3d(0px, ' + (s.width / 2 + s.params.cube.shadowOffset) + 'px, ' + -s.width / 2 + 'px) rotateX(90deg) rotateZ(0deg) scale(' + s.params.cube.shadowScale + ')');}else {var shadowAngle=Math.abs(wrapperRotate) - Math.floor(Math.abs(wrapperRotate) / 90) * 90;var multiplier=1.5 - (Math.sin(shadowAngle * 2 * Math.PI / 360) / 2 + Math.cos(shadowAngle * 2 * Math.PI / 360) / 2);var scale1=s.params.cube.shadowScale,scale2=s.params.cube.shadowScale / multiplier,offset=s.params.cube.shadowOffset;cubeShadow.transform('scale3d(' + scale1 + ', 1, ' + scale2 + ') translate3d(0px, ' + (s.height / 2 + offset) + 'px, ' + -s.height / 2 / scale2 + 'px) rotateX(-90deg)');}}var zFactor=s.isSafari || s.isUiWebView?-s.size / 2:0;s.wrapper.transform('translate3d(0px,0,' + zFactor + 'px) rotateX(' + (isH()?0:wrapperRotate) + 'deg) rotateY(' + (isH()?-wrapperRotate:0) + 'deg)');},setTransition:function setTransition(duration){s.slides.transition(duration).find('.swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left').transition(duration);if(s.params.cube.shadow && !isH()){s.container.find('.swiper-cube-shadow').transition(duration);}}},coverflow:{setTranslate:function setTranslate(){var transform=s.translate;var center=isH()?-transform + s.width / 2:-transform + s.height / 2;var rotate=isH()?s.params.coverflow.rotate:-s.params.coverflow.rotate;var translate=s.params.coverflow.depth; //Each slide offset from center\nfor(var i=0,length=s.slides.length;i < length;i++) {var slide=s.slides.eq(i);var slideSize=s.slidesSizesGrid[i];var slideOffset=slide[0].swiperSlideOffset;var offsetMultiplier=(center - slideOffset - slideSize / 2) / slideSize * s.params.coverflow.modifier;var rotateY=isH()?rotate * offsetMultiplier:0;var rotateX=isH()?0:rotate * offsetMultiplier; // var rotateZ = 0\nvar translateZ=-translate * Math.abs(offsetMultiplier);var translateY=isH()?0:s.params.coverflow.stretch * offsetMultiplier;var translateX=isH()?s.params.coverflow.stretch * offsetMultiplier:0; //Fix for ultra small values\nif(Math.abs(translateX) < 0.001)translateX = 0;if(Math.abs(translateY) < 0.001)translateY = 0;if(Math.abs(translateZ) < 0.001)translateZ = 0;if(Math.abs(rotateY) < 0.001)rotateY = 0;if(Math.abs(rotateX) < 0.001)rotateX = 0;var slideTransform='translate3d(' + translateX + 'px,' + translateY + 'px,' + translateZ + 'px)  rotateX(' + rotateX + 'deg) rotateY(' + rotateY + 'deg)';slide.transform(slideTransform);slide[0].style.zIndex = -Math.abs(Math.round(offsetMultiplier)) + 1;if(s.params.coverflow.slideShadows){ //Set shadows\nvar shadowBefore=isH()?slide.find('.swiper-slide-shadow-left'):slide.find('.swiper-slide-shadow-top');var shadowAfter=isH()?slide.find('.swiper-slide-shadow-right'):slide.find('.swiper-slide-shadow-bottom');if(shadowBefore.length === 0){shadowBefore = $('<div class=\"swiper-slide-shadow-' + (isH()?'left':'top') + '\"></div>');slide.append(shadowBefore);}if(shadowAfter.length === 0){shadowAfter = $('<div class=\"swiper-slide-shadow-' + (isH()?'right':'bottom') + '\"></div>');slide.append(shadowAfter);}if(shadowBefore.length)shadowBefore[0].style.opacity = offsetMultiplier > 0?offsetMultiplier:0;if(shadowAfter.length)shadowAfter[0].style.opacity = -offsetMultiplier > 0?-offsetMultiplier:0;}} //Set correct perspective for IE10\nif(s.browser.ie){var ws=s.wrapper[0].style;ws.perspectiveOrigin = center + 'px 50%';}},setTransition:function setTransition(duration){s.slides.transition(duration).find('.swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left').transition(duration);}}}; /*=========================\n      Images Lazy Loading\n      ===========================*/s.lazy = {initialImageLoaded:false,loadImageInSlide:function loadImageInSlide(index,loadInDuplicate){if(typeof index === 'undefined')return;if(typeof loadInDuplicate === 'undefined')loadInDuplicate = true;if(s.slides.length === 0)return;var slide=s.slides.eq(index);var img=slide.find('.swiper-lazy:not(.swiper-lazy-loaded):not(.swiper-lazy-loading)');if(slide.hasClass('swiper-lazy') && !slide.hasClass('swiper-lazy-loaded') && !slide.hasClass('swiper-lazy-loading')){img.add(slide[0]);}if(img.length === 0)return;img.each(function(){var _img=$(this);_img.addClass('swiper-lazy-loading');var background=_img.attr('data-background');var src=_img.attr('data-src');s.loadImage(_img[0],src || background,false,function(){if(background){_img.css('background-image','url(' + background + ')');_img.removeAttr('data-background');}else {_img.attr('src',src);_img.removeAttr('data-src');}_img.addClass('swiper-lazy-loaded').removeClass('swiper-lazy-loading');slide.find('.swiper-lazy-preloader, .preloader').remove();if(s.params.loop && loadInDuplicate){var slideOriginalIndex=slide.attr('data-swiper-slide-index');if(slide.hasClass(s.params.slideDuplicateClass)){var originalSlide=s.wrapper.children('[data-swiper-slide-index=\"' + slideOriginalIndex + '\"]:not(.' + s.params.slideDuplicateClass + ')');s.lazy.loadImageInSlide(originalSlide.index(),false);}else {var duplicatedSlide=s.wrapper.children('.' + s.params.slideDuplicateClass + '[data-swiper-slide-index=\"' + slideOriginalIndex + '\"]');s.lazy.loadImageInSlide(duplicatedSlide.index(),false);}}s.emit('onLazyImageReady',s,slide[0],_img[0]);});s.emit('onLazyImageLoad',s,slide[0],_img[0]);});},load:function load(){var i;if(s.params.watchSlidesVisibility){s.wrapper.children('.' + s.params.slideVisibleClass).each(function(){s.lazy.loadImageInSlide($(this).index());});}else {if(s.params.slidesPerView > 1){for(i = s.activeIndex;i < s.activeIndex + s.params.slidesPerView;i++) {if(s.slides[i])s.lazy.loadImageInSlide(i);}}else {s.lazy.loadImageInSlide(s.activeIndex);}}if(s.params.lazyLoadingInPrevNext){if(s.params.slidesPerView > 1){ // Next Slides\nfor(i = s.activeIndex + s.params.slidesPerView;i < s.activeIndex + s.params.slidesPerView + s.params.slidesPerView;i++) {if(s.slides[i])s.lazy.loadImageInSlide(i);} // Prev Slides\nfor(i = s.activeIndex - s.params.slidesPerView;i < s.activeIndex;i++) {if(s.slides[i])s.lazy.loadImageInSlide(i);}}else {var nextSlide=s.wrapper.children('.' + s.params.slideNextClass);if(nextSlide.length > 0)s.lazy.loadImageInSlide(nextSlide.index());var prevSlide=s.wrapper.children('.' + s.params.slidePrevClass);if(prevSlide.length > 0)s.lazy.loadImageInSlide(prevSlide.index());}}},onTransitionStart:function onTransitionStart(){if(s.params.lazyLoading){if(s.params.lazyLoadingOnTransitionStart || !s.params.lazyLoadingOnTransitionStart && !s.lazy.initialImageLoaded){s.lazy.load();}}},onTransitionEnd:function onTransitionEnd(){if(s.params.lazyLoading && !s.params.lazyLoadingOnTransitionStart){s.lazy.load();}}}; /*=========================\n      Scrollbar\n      ===========================*/s.scrollbar = {set:function set(){if(!s.params.scrollbar)return;var sb=s.scrollbar;sb.track = $(s.params.scrollbar);sb.drag = sb.track.find('.swiper-scrollbar-drag');if(sb.drag.length === 0){sb.drag = $('<div class=\"swiper-scrollbar-drag\"></div>');sb.track.append(sb.drag);}sb.drag[0].style.width = '';sb.drag[0].style.height = '';sb.trackSize = isH()?sb.track[0].offsetWidth:sb.track[0].offsetHeight;sb.divider = s.size / s.virtualSize;sb.moveDivider = sb.divider * (sb.trackSize / s.size);sb.dragSize = sb.trackSize * sb.divider;if(isH()){sb.drag[0].style.width = sb.dragSize + 'px';}else {sb.drag[0].style.height = sb.dragSize + 'px';}if(sb.divider >= 1){sb.track[0].style.display = 'none';}else {sb.track[0].style.display = '';}if(s.params.scrollbarHide){sb.track[0].style.opacity = 0;}},setTranslate:function setTranslate(){if(!s.params.scrollbar)return;var diff;var sb=s.scrollbar;var translate=s.translate || 0;var newPos;var newSize=sb.dragSize;newPos = (sb.trackSize - sb.dragSize) * s.progress;if(s.rtl && isH()){newPos = -newPos;if(newPos > 0){newSize = sb.dragSize - newPos;newPos = 0;}else if(-newPos + sb.dragSize > sb.trackSize){newSize = sb.trackSize + newPos;}}else {if(newPos < 0){newSize = sb.dragSize + newPos;newPos = 0;}else if(newPos + sb.dragSize > sb.trackSize){newSize = sb.trackSize - newPos;}}if(isH()){if(s.support.transforms3d){sb.drag.transform('translate3d(' + newPos + 'px, 0, 0)');}else {sb.drag.transform('translateX(' + newPos + 'px)');}sb.drag[0].style.width = newSize + 'px';}else {if(s.support.transforms3d){sb.drag.transform('translate3d(0px, ' + newPos + 'px, 0)');}else {sb.drag.transform('translateY(' + newPos + 'px)');}sb.drag[0].style.height = newSize + 'px';}if(s.params.scrollbarHide){clearTimeout(sb.timeout);sb.track[0].style.opacity = 1;sb.timeout = setTimeout(function(){sb.track[0].style.opacity = 0;sb.track.transition(400);},1000);}},setTransition:function setTransition(duration){if(!s.params.scrollbar)return;s.scrollbar.drag.transition(duration);}}; /*=========================\n      Controller\n      ===========================*/s.controller = {LinearSpline:function LinearSpline(x,y){this.x = x;this.y = y;this.lastIndex = x.length - 1; // Given an x value (x2), return the expected y2 value:\n// (x1,y1) is the known point before given value,\n// (x3,y3) is the known point after given value.\nvar i1,i3;var l=this.x.length;this.interpolate = function(x2){if(!x2)return 0; // Get the indexes of x1 and x3 (the array indexes before and after given x2):\ni3 = binarySearch(this.x,x2);i1 = i3 - 1; // We have our indexes i1 & i3, so we can calculate already:\n// y2 := ((x2−x1) × (y3−y1)) ÷ (x3−x1) + y1\nreturn (x2 - this.x[i1]) * (this.y[i3] - this.y[i1]) / (this.x[i3] - this.x[i1]) + this.y[i1];};var binarySearch=(function(){var maxIndex,minIndex,guess;return function(array,val){minIndex = -1;maxIndex = array.length;while(maxIndex - minIndex > 1) if(array[guess = maxIndex + minIndex >> 1] <= val){minIndex = guess;}else {maxIndex = guess;}return maxIndex;};})();}, //xxx: for now i will just save one spline function to to\ngetInterpolateFunction:function getInterpolateFunction(c){if(!s.controller.spline)s.controller.spline = s.params.loop?new s.controller.LinearSpline(s.slidesGrid,c.slidesGrid):new s.controller.LinearSpline(s.snapGrid,c.snapGrid);},setTranslate:function setTranslate(translate,byController){var controlled=s.params.control;var multiplier,controlledTranslate;function setControlledTranslate(c){ // this will create an Interpolate function based on the snapGrids\n// x is the Grid of the scrolled scroller and y will be the controlled scroller\n// it makes sense to create this only once and recall it for the interpolation\n// the function does a lot of value caching for performance\ntranslate = c.rtl && c.params.direction === 'horizontal'?-s.translate:s.translate;if(s.params.controlBy === 'slide'){s.controller.getInterpolateFunction(c); // i am not sure why the values have to be multiplicated this way, tried to invert the snapGrid\n// but it did not work out\ncontrolledTranslate = -s.controller.spline.interpolate(-translate);}if(!controlledTranslate || s.params.controlBy === 'container'){multiplier = (c.maxTranslate() - c.minTranslate()) / (s.maxTranslate() - s.minTranslate());controlledTranslate = (translate - s.minTranslate()) * multiplier + c.minTranslate();}if(s.params.controlInverse){controlledTranslate = c.maxTranslate() - controlledTranslate;}c.updateProgress(controlledTranslate);c.setWrapperTranslate(controlledTranslate,false,s);c.updateActiveIndex();}if(s.isArray(controlled)){for(var i=0;i < controlled.length;i++) {if(controlled[i] !== byController && controlled[i] instanceof Swiper){setControlledTranslate(controlled[i]);}}}else if(controlled instanceof Swiper && byController !== controlled){setControlledTranslate(controlled);}},setTransition:function setTransition(duration,byController){var controlled=s.params.control;var i;function setControlledTransition(c){c.setWrapperTransition(duration,s);if(duration !== 0){c.onTransitionStart();c.wrapper.transitionEnd(function(){if(!controlled)return;if(c.params.loop && s.params.controlBy === 'slide'){c.fixLoop();}c.onTransitionEnd();});}}if(s.isArray(controlled)){for(i = 0;i < controlled.length;i++) {if(controlled[i] !== byController && controlled[i] instanceof Swiper){setControlledTransition(controlled[i]);}}}else if(controlled instanceof Swiper && byController !== controlled){setControlledTransition(controlled);}}}; /*=========================\n      Hash Navigation\n      ===========================*/s.hashnav = {init:function init(){if(!s.params.hashnav)return;s.hashnav.initialized = true;var hash=document.location.hash.replace('#','');if(!hash)return;var speed=0;for(var i=0,length=s.slides.length;i < length;i++) {var slide=s.slides.eq(i);var slideHash=slide.attr('data-hash');if(slideHash === hash && !slide.hasClass(s.params.slideDuplicateClass)){var index=slide.index();s.slideTo(index,speed,s.params.runCallbacksOnInit,true);}}},setHash:function setHash(){if(!s.hashnav.initialized || !s.params.hashnav)return;document.location.hash = s.slides.eq(s.activeIndex).attr('data-hash') || '';}}; /*=========================\n      Keyboard Control\n      ===========================*/function handleKeyboard(e){if(e.originalEvent)e = e.originalEvent; //jquery fix\nvar kc=e.keyCode || e.charCode; // Directions locks\nif(!s.params.allowSwipeToNext && (isH() && kc === 39 || !isH() && kc === 40)){return false;}if(!s.params.allowSwipeToPrev && (isH() && kc === 37 || !isH() && kc === 38)){return false;}if(e.shiftKey || e.altKey || e.ctrlKey || e.metaKey){return;}if(document.activeElement && document.activeElement.nodeName && (document.activeElement.nodeName.toLowerCase() === 'input' || document.activeElement.nodeName.toLowerCase() === 'textarea')){return;}if(kc === 37 || kc === 39 || kc === 38 || kc === 40){var inView=false; //Check that swiper should be inside of visible area of window\nif(s.container.parents('.swiper-slide').length > 0 && s.container.parents('.swiper-slide-active').length === 0){return;}var windowScroll={left:window.pageXOffset,top:window.pageYOffset};var windowWidth=window.innerWidth;var windowHeight=window.innerHeight;var swiperOffset=s.container.offset();if(s.rtl)swiperOffset.left = swiperOffset.left - s.container[0].scrollLeft;var swiperCoord=[[swiperOffset.left,swiperOffset.top],[swiperOffset.left + s.width,swiperOffset.top],[swiperOffset.left,swiperOffset.top + s.height],[swiperOffset.left + s.width,swiperOffset.top + s.height]];for(var i=0;i < swiperCoord.length;i++) {var point=swiperCoord[i];if(point[0] >= windowScroll.left && point[0] <= windowScroll.left + windowWidth && point[1] >= windowScroll.top && point[1] <= windowScroll.top + windowHeight){inView = true;}}if(!inView)return;}if(isH()){if(kc === 37 || kc === 39){if(e.preventDefault)e.preventDefault();else e.returnValue = false;}if(kc === 39 && !s.rtl || kc === 37 && s.rtl)s.slideNext();if(kc === 37 && !s.rtl || kc === 39 && s.rtl)s.slidePrev();}else {if(kc === 38 || kc === 40){if(e.preventDefault)e.preventDefault();else e.returnValue = false;}if(kc === 40)s.slideNext();if(kc === 38)s.slidePrev();}}s.disableKeyboardControl = function(){$(document).off('keydown',handleKeyboard);};s.enableKeyboardControl = function(){$(document).on('keydown',handleKeyboard);}; /*=========================\n      Mousewheel Control\n      ===========================*/s.mousewheel = {event:false,lastScrollTime:new window.Date().getTime()};if(s.params.mousewheelControl){try{new window.WheelEvent('wheel');s.mousewheel.event = 'wheel';}catch(e) {}if(!s.mousewheel.event && document.onmousewheel !== undefined){s.mousewheel.event = 'mousewheel';}if(!s.mousewheel.event){s.mousewheel.event = 'DOMMouseScroll';}}function handleMousewheel(e){if(e.originalEvent)e = e.originalEvent; //jquery fix\nvar we=s.mousewheel.event;var delta=0; //Opera & IE\nif(e.detail)delta = -e.detail;else if(we === 'mousewheel'){if(s.params.mousewheelForceToAxis){if(isH()){if(Math.abs(e.wheelDeltaX) > Math.abs(e.wheelDeltaY))delta = e.wheelDeltaX;else return;}else {if(Math.abs(e.wheelDeltaY) > Math.abs(e.wheelDeltaX))delta = e.wheelDeltaY;else return;}}else {delta = e.wheelDelta;}}else if(we === 'DOMMouseScroll')delta = -e.detail;else if(we === 'wheel'){if(s.params.mousewheelForceToAxis){if(isH()){if(Math.abs(e.deltaX) > Math.abs(e.deltaY))delta = -e.deltaX;else return;}else {if(Math.abs(e.deltaY) > Math.abs(e.deltaX))delta = -e.deltaY;else return;}}else {delta = Math.abs(e.deltaX) > Math.abs(e.deltaY)?-e.deltaX:-e.deltaY;}}if(s.params.mousewheelInvert)delta = -delta;if(!s.params.freeMode){if(new window.Date().getTime() - s.mousewheel.lastScrollTime > 60){if(delta < 0){if((!s.isEnd || s.params.loop) && !s.animating)s.slideNext();else if(s.params.mousewheelReleaseOnEdges)return true;}else {if((!s.isBeginning || s.params.loop) && !s.animating)s.slidePrev();else if(s.params.mousewheelReleaseOnEdges)return true;}}s.mousewheel.lastScrollTime = new window.Date().getTime();}else { //Freemode or scrollContainer:\nvar position=s.getWrapperTranslate() + delta * s.params.mousewheelSensitivity;if(position > 0)position = 0;if(position < s.maxTranslate())position = s.maxTranslate();s.setWrapperTransition(0);s.setWrapperTranslate(position);s.updateProgress();s.updateActiveIndex();if(s.params.freeModeSticky){clearTimeout(s.mousewheel.timeout);s.mousewheel.timeout = setTimeout(function(){s.slideReset();},300);} // Return page scroll on edge positions\nif(position === 0 || position === s.maxTranslate())return;}if(s.params.autoplay)s.stopAutoplay();if(e.preventDefault)e.preventDefault();else e.returnValue = false;return false;}s.disableMousewheelControl = function(){if(!s.mousewheel.event)return false;s.container.off(s.mousewheel.event,handleMousewheel);return true;};s.enableMousewheelControl = function(){if(!s.mousewheel.event)return false;s.container.on(s.mousewheel.event,handleMousewheel);return true;}; /*=========================\n      Parallax\n      ===========================*/function setParallaxTransform(el,progress){el = $(el);var p,pX,pY;p = el.attr('data-swiper-parallax') || '0';pX = el.attr('data-swiper-parallax-x');pY = el.attr('data-swiper-parallax-y');if(pX || pY){pX = pX || '0';pY = pY || '0';}else {if(isH()){pX = p;pY = '0';}else {pY = p;pX = '0';}}if(pX.indexOf('%') >= 0){pX = parseInt(pX,10) * progress + '%';}else {pX = pX * progress + 'px';}if(pY.indexOf('%') >= 0){pY = parseInt(pY,10) * progress + '%';}else {pY = pY * progress + 'px';}el.transform('translate3d(' + pX + ', ' + pY + ',0px)');}s.parallax = {setTranslate:function setTranslate(){s.container.children('[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y]').each(function(){setParallaxTransform(this,s.progress);});s.slides.each(function(){var slide=$(this);slide.find('[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y]').each(function(){var progress=Math.min(Math.max(slide[0].progress,-1),1);setParallaxTransform(this,progress);});});},setTransition:function setTransition(duration){if(typeof duration === 'undefined')duration = s.params.speed;s.container.find('[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y]').each(function(){var el=$(this);var parallaxDuration=parseInt(el.attr('data-swiper-parallax-duration'),10) || duration;if(duration === 0)parallaxDuration = 0;el.transition(parallaxDuration);});}}; /*=========================\n      Plugins API. Collect all and init all plugins\n      ===========================*/s._plugins = [];for(var plugin in s.plugins) {var p=s.plugins[plugin](s,s.params[plugin]);if(p)s._plugins.push(p);} // Method to call all plugins event/method\ns.callPlugins = function(eventName){for(var i=0;i < s._plugins.length;i++) {if(eventName in s._plugins[i]){s._plugins[i][eventName](arguments[1],arguments[2],arguments[3],arguments[4],arguments[5]);}}}; /*=========================\n      Events/Callbacks/Plugins Emitter\n      ===========================*/function normalizeEventName(eventName){if(eventName.indexOf('on') !== 0){if(eventName[0] !== eventName[0].toUpperCase()){eventName = 'on' + eventName[0].toUpperCase() + eventName.substring(1);}else {eventName = 'on' + eventName;}}return eventName;}s.emitterEventListeners = {};s.emit = function(eventName){ // Trigger callbacks\nif(s.params[eventName]){s.params[eventName](arguments[1],arguments[2],arguments[3],arguments[4],arguments[5]);}var i; // Trigger events\nif(s.emitterEventListeners[eventName]){for(i = 0;i < s.emitterEventListeners[eventName].length;i++) {s.emitterEventListeners[eventName][i](arguments[1],arguments[2],arguments[3],arguments[4],arguments[5]);}} // Trigger plugins\nif(s.callPlugins)s.callPlugins(eventName,arguments[1],arguments[2],arguments[3],arguments[4],arguments[5]);};s.on = function(eventName,handler){eventName = normalizeEventName(eventName);if(!s.emitterEventListeners[eventName])s.emitterEventListeners[eventName] = [];s.emitterEventListeners[eventName].push(handler);return s;};s.off = function(eventName,handler){var i;eventName = normalizeEventName(eventName);if(typeof handler === 'undefined'){ // Remove all handlers for such event\ns.emitterEventListeners[eventName] = [];return s;}if(!s.emitterEventListeners[eventName] || s.emitterEventListeners[eventName].length === 0)return;for(i = 0;i < s.emitterEventListeners[eventName].length;i++) {if(s.emitterEventListeners[eventName][i] === handler)s.emitterEventListeners[eventName].splice(i,1);}return s;};s.once = function(eventName,handler){eventName = normalizeEventName(eventName);var _handler=function _handler(){handler(arguments[0],arguments[1],arguments[2],arguments[3],arguments[4]);s.off(eventName,_handler);};s.on(eventName,_handler);return s;}; // Accessibility tools\ns.a11y = {makeFocusable:function makeFocusable($el){$el.attr('tabIndex','0');return $el;},addRole:function addRole($el,role){$el.attr('role',role);return $el;},addLabel:function addLabel($el,label){$el.attr('aria-label',label);return $el;},disable:function disable($el){$el.attr('aria-disabled',true);return $el;},enable:function enable($el){$el.attr('aria-disabled',false);return $el;},onEnterKey:function onEnterKey(event){if(event.keyCode !== 13)return;if($(event.target).is(s.params.nextButton)){s.onClickNext(event);if(s.isEnd){s.a11y.notify(s.params.lastSlideMessage);}else {s.a11y.notify(s.params.nextSlideMessage);}}else if($(event.target).is(s.params.prevButton)){s.onClickPrev(event);if(s.isBeginning){s.a11y.notify(s.params.firstSlideMessage);}else {s.a11y.notify(s.params.prevSlideMessage);}}if($(event.target).is('.' + s.params.bulletClass)){$(event.target)[0].click();}},liveRegion:$('<span class=\"swiper-notification\" aria-live=\"assertive\" aria-atomic=\"true\"></span>'),notify:function notify(message){var notification=s.a11y.liveRegion;if(notification.length === 0)return;notification.html('');notification.html(message);},init:function init(){ // Setup accessibility\nif(s.params.nextButton){var nextButton=$(s.params.nextButton);s.a11y.makeFocusable(nextButton);s.a11y.addRole(nextButton,'button');s.a11y.addLabel(nextButton,s.params.nextSlideMessage);}if(s.params.prevButton){var prevButton=$(s.params.prevButton);s.a11y.makeFocusable(prevButton);s.a11y.addRole(prevButton,'button');s.a11y.addLabel(prevButton,s.params.prevSlideMessage);}$(s.container).append(s.a11y.liveRegion);},initPagination:function initPagination(){if(s.params.pagination && s.params.paginationClickable && s.bullets && s.bullets.length){s.bullets.each(function(){var bullet=$(this);s.a11y.makeFocusable(bullet);s.a11y.addRole(bullet,'button');s.a11y.addLabel(bullet,s.params.paginationBulletMessage.replace(/{{index}}/,bullet.index() + 1));});}},destroy:function destroy(){if(s.a11y.liveRegion && s.a11y.liveRegion.length > 0)s.a11y.liveRegion.remove();}}; /*=========================\n      Init/Destroy\n      ===========================*/s.init = function(){if(s.params.loop)s.createLoop();s.updateContainerSize();s.updateSlidesSize();s.updatePagination();if(s.params.scrollbar && s.scrollbar){s.scrollbar.set();}if(s.params.effect !== 'slide' && s.effects[s.params.effect]){if(!s.params.loop)s.updateProgress();s.effects[s.params.effect].setTranslate();}if(s.params.loop){s.slideTo(s.params.initialSlide + s.loopedSlides,0,s.params.runCallbacksOnInit);}else {s.slideTo(s.params.initialSlide,0,s.params.runCallbacksOnInit);if(s.params.initialSlide === 0){if(s.parallax && s.params.parallax)s.parallax.setTranslate();if(s.lazy && s.params.lazyLoading){s.lazy.load();s.lazy.initialImageLoaded = true;}}}s.attachEvents();if(s.params.observer && s.support.observer){s.initObservers();}if(s.params.preloadImages && !s.params.lazyLoading){s.preloadImages();}if(s.params.autoplay){s.startAutoplay();}if(s.params.keyboardControl){if(s.enableKeyboardControl)s.enableKeyboardControl();}if(s.params.mousewheelControl){if(s.enableMousewheelControl)s.enableMousewheelControl();}if(s.params.hashnav){if(s.hashnav)s.hashnav.init();}if(s.params.a11y && s.a11y)s.a11y.init();s.emit('onInit',s);}; // Cleanup dynamic styles\ns.cleanupStyles = function(){ // Container\ns.container.removeClass(s.classNames.join(' ')).removeAttr('style'); // Wrapper\ns.wrapper.removeAttr('style'); // Slides\nif(s.slides && s.slides.length){s.slides.removeClass([s.params.slideVisibleClass,s.params.slideActiveClass,s.params.slideNextClass,s.params.slidePrevClass].join(' ')).removeAttr('style').removeAttr('data-swiper-column').removeAttr('data-swiper-row');} // Pagination/Bullets\nif(s.paginationContainer && s.paginationContainer.length){s.paginationContainer.removeClass(s.params.paginationHiddenClass);}if(s.bullets && s.bullets.length){s.bullets.removeClass(s.params.bulletActiveClass);} // Buttons\nif(s.params.prevButton)$(s.params.prevButton).removeClass(s.params.buttonDisabledClass);if(s.params.nextButton)$(s.params.nextButton).removeClass(s.params.buttonDisabledClass); // Scrollbar\nif(s.params.scrollbar && s.scrollbar){if(s.scrollbar.track && s.scrollbar.track.length)s.scrollbar.track.removeAttr('style');if(s.scrollbar.drag && s.scrollbar.drag.length)s.scrollbar.drag.removeAttr('style');}}; // Destroy\ns.destroy = function(deleteInstance,cleanupStyles){ // Detach evebts\ns.detachEvents(); // Stop autoplay\ns.stopAutoplay(); // Destroy loop\nif(s.params.loop){s.destroyLoop();} // Cleanup styles\nif(cleanupStyles){s.cleanupStyles();} // Disconnect observer\ns.disconnectObservers(); // Disable keyboard/mousewheel\nif(s.params.keyboardControl){if(s.disableKeyboardControl)s.disableKeyboardControl();}if(s.params.mousewheelControl){if(s.disableMousewheelControl)s.disableMousewheelControl();} // Disable a11y\nif(s.params.a11y && s.a11y)s.a11y.destroy(); // Destroy callback\ns.emit('onDestroy'); // Delete instance\nif(deleteInstance !== false)s = null;};s.init(); // Return swiper instance\nreturn s;} /*===========================\nAdd .swiper plugin from Dom libraries\n===========================*/function addLibraryPlugin(lib){lib.fn.swiper = function(params){var firstInstance;lib(this).each(function(){var s=new Swiper(this,params);if(!firstInstance)firstInstance = s;});return firstInstance;};}return {setters:[],execute:function(){; /*==================================================\n    Prototype\n====================================================*/Swiper.prototype = {isSafari:(function(){var ua=navigator.userAgent.toLowerCase();return ua.indexOf('safari') >= 0 && ua.indexOf('chrome') < 0 && ua.indexOf('android') < 0;})(),isUiWebView:/(iPhone|iPod|iPad).*AppleWebKit(?!.*Safari)/i.test(navigator.userAgent),isArray:function isArray(arr){return Object.prototype.toString.apply(arr) === '[object Array]';}, /*==================================================\n    Browser\n    ====================================================*/browser:{ie:window.navigator.pointerEnabled || window.navigator.msPointerEnabled,ieTouch:window.navigator.msPointerEnabled && window.navigator.msMaxTouchPoints > 1 || window.navigator.pointerEnabled && window.navigator.maxTouchPoints > 1}, /*==================================================\n    Devices\n    ====================================================*/device:(function(){var ua=navigator.userAgent;var android=ua.match(/(Android);?[\\s\\/]+([\\d.]+)?/);var ipad=ua.match(/(iPad).*OS\\s([\\d_]+)/);var ipod=ua.match(/(iPod)(.*OS\\s([\\d_]+))?/);var iphone=!ipad && ua.match(/(iPhone\\sOS)\\s([\\d_]+)/);return {ios:ipad || iphone || ipod,android:android};})(), /*==================================================\n    Feature Detection\n    ====================================================*/support:{touch:window.Modernizr && Modernizr.touch === true || (function(){return !!('ontouchstart' in window || window.DocumentTouch && document instanceof DocumentTouch);})(),transforms3d:window.Modernizr && Modernizr.csstransforms3d === true || (function(){var div=document.createElement('div').style;return 'webkitPerspective' in div || 'MozPerspective' in div || 'OPerspective' in div || 'MsPerspective' in div || 'perspective' in div;})(),flexbox:(function(){var div=document.createElement('div').style;var styles='alignItems webkitAlignItems webkitBoxAlign msFlexAlign mozBoxAlign webkitFlexDirection msFlexDirection mozBoxDirection mozBoxOrient webkitBoxDirection webkitBoxOrient'.split(' ');for(var i=0;i < styles.length;i++) {if(styles[i] in div)return true;}})(),observer:(function(){return 'MutationObserver' in window || 'WebkitMutationObserver' in window;})()}, /*==================================================\n    Plugins\n    ====================================================*/plugins:{}}; /*===========================\nDom7 Library\n===========================*/Dom7 = (function(){var Dom7=function Dom7(arr){var _this=this,i=0; // Create array-like object\nfor(i = 0;i < arr.length;i++) {_this[i] = arr[i];}_this.length = arr.length; // Return collection with methods\nreturn this;};var $=function $(selector,context){var arr=[],i=0;if(selector && !context){if(selector instanceof Dom7){return selector;}}if(selector){ // String\nif(typeof selector === 'string'){var els,tempParent,html=selector.trim();if(html.indexOf('<') >= 0 && html.indexOf('>') >= 0){var toCreate='div';if(html.indexOf('<li') === 0)toCreate = 'ul';if(html.indexOf('<tr') === 0)toCreate = 'tbody';if(html.indexOf('<td') === 0 || html.indexOf('<th') === 0)toCreate = 'tr';if(html.indexOf('<tbody') === 0)toCreate = 'table';if(html.indexOf('<option') === 0)toCreate = 'select';tempParent = document.createElement(toCreate);tempParent.innerHTML = selector;for(i = 0;i < tempParent.childNodes.length;i++) {arr.push(tempParent.childNodes[i]);}}else {if(!context && selector[0] === '#' && !selector.match(/[ .<>:~]/)){ // Pure ID selector\nels = [document.getElementById(selector.split('#')[1])];}else { // Other selectors\nels = (context || document).querySelectorAll(selector);}for(i = 0;i < els.length;i++) {if(els[i])arr.push(els[i]);}}}else if(selector.nodeType || selector === window || selector === document){arr.push(selector);}else if(selector.length > 0 && selector[0].nodeType){for(i = 0;i < selector.length;i++) {arr.push(selector[i]);}}}return new Dom7(arr);};Dom7.prototype = { // Classes and attriutes\naddClass:function addClass(className){if(typeof className === 'undefined'){return this;}var classes=className.split(' ');for(var i=0;i < classes.length;i++) {for(var j=0;j < this.length;j++) {this[j].classList.add(classes[i]);}}return this;},removeClass:function removeClass(className){var classes=className.split(' ');for(var i=0;i < classes.length;i++) {for(var j=0;j < this.length;j++) {this[j].classList.remove(classes[i]);}}return this;},hasClass:function hasClass(className){if(!this[0])return false;else return this[0].classList.contains(className);},toggleClass:function toggleClass(className){var classes=className.split(' ');for(var i=0;i < classes.length;i++) {for(var j=0;j < this.length;j++) {this[j].classList.toggle(classes[i]);}}return this;},attr:function attr(attrs,value){if(arguments.length === 1 && typeof attrs === 'string'){ // Get attr\nif(this[0])return this[0].getAttribute(attrs);else return undefined;}else { // Set attrs\nfor(var i=0;i < this.length;i++) {if(arguments.length === 2){ // String\nthis[i].setAttribute(attrs,value);}else { // Object\nfor(var attrName in attrs) {this[i][attrName] = attrs[attrName];this[i].setAttribute(attrName,attrs[attrName]);}}}return this;}},removeAttr:function removeAttr(attr){for(var i=0;i < this.length;i++) {this[i].removeAttribute(attr);}return this;},data:function data(key,value){if(typeof value === 'undefined'){ // Get value\nif(this[0]){var dataKey=this[0].getAttribute('data-' + key);if(dataKey)return dataKey;else if(this[0].dom7ElementDataStorage && key in this[0].dom7ElementDataStorage)return this[0].dom7ElementDataStorage[key];else return undefined;}else return undefined;}else { // Set value\nfor(var i=0;i < this.length;i++) {var el=this[i];if(!el.dom7ElementDataStorage)el.dom7ElementDataStorage = {};el.dom7ElementDataStorage[key] = value;}return this;}}, // Transforms\ntransform:function transform(_transform){for(var i=0;i < this.length;i++) {var elStyle=this[i].style;elStyle.webkitTransform = elStyle.MsTransform = elStyle.msTransform = elStyle.MozTransform = elStyle.OTransform = elStyle.transform = _transform;}return this;},transition:function transition(duration){if(typeof duration !== 'string'){duration = duration + 'ms';}for(var i=0;i < this.length;i++) {var elStyle=this[i].style;elStyle.webkitTransitionDuration = elStyle.MsTransitionDuration = elStyle.msTransitionDuration = elStyle.MozTransitionDuration = elStyle.OTransitionDuration = elStyle.transitionDuration = duration;}return this;}, //Events\non:function on(eventName,targetSelector,listener,capture){function handleLiveEvent(e){var target=e.target;if($(target).is(targetSelector))listener.call(target,e);else {var parents=$(target).parents();for(var k=0;k < parents.length;k++) {if($(parents[k]).is(targetSelector))listener.call(parents[k],e);}}}var events=eventName.split(' ');var i,j;for(i = 0;i < this.length;i++) {if(typeof targetSelector === 'function' || targetSelector === false){ // Usual events\nif(typeof targetSelector === 'function'){listener = arguments[1];capture = arguments[2] || false;}for(j = 0;j < events.length;j++) {this[i].addEventListener(events[j],listener,capture);}}else { //Live events\nfor(j = 0;j < events.length;j++) {if(!this[i].dom7LiveListeners)this[i].dom7LiveListeners = [];this[i].dom7LiveListeners.push({listener:listener,liveListener:handleLiveEvent});this[i].addEventListener(events[j],handleLiveEvent,capture);}}}return this;},off:function off(eventName,targetSelector,listener,capture){var events=eventName.split(' ');for(var i=0;i < events.length;i++) {for(var j=0;j < this.length;j++) {if(typeof targetSelector === 'function' || targetSelector === false){ // Usual events\nif(typeof targetSelector === 'function'){listener = arguments[1];capture = arguments[2] || false;}this[j].removeEventListener(events[i],listener,capture);}else { // Live event\nif(this[j].dom7LiveListeners){for(var k=0;k < this[j].dom7LiveListeners.length;k++) {if(this[j].dom7LiveListeners[k].listener === listener){this[j].removeEventListener(events[i],this[j].dom7LiveListeners[k].liveListener,capture);}}}}}}return this;},once:function once(eventName,targetSelector,listener,capture){var dom=this;if(typeof targetSelector === 'function'){targetSelector = false;listener = arguments[1];capture = arguments[2];}function proxy(e){listener(e);dom.off(eventName,targetSelector,proxy,capture);}dom.on(eventName,targetSelector,proxy,capture);},trigger:function trigger(eventName,eventData){for(var i=0;i < this.length;i++) {var evt;try{evt = new window.CustomEvent(eventName,{detail:eventData,bubbles:true,cancelable:true});}catch(e) {evt = document.createEvent('Event');evt.initEvent(eventName,true,true);evt.detail = eventData;}this[i].dispatchEvent(evt);}return this;},transitionEnd:function transitionEnd(callback){var events=['webkitTransitionEnd','transitionend','oTransitionEnd','MSTransitionEnd','msTransitionEnd'],i,j,dom=this;function fireCallBack(e){ /*jshint validthis:true */if(e.target !== this)return;callback.call(this,e);for(i = 0;i < events.length;i++) {dom.off(events[i],fireCallBack);}}if(callback){for(i = 0;i < events.length;i++) {dom.on(events[i],fireCallBack);}}return this;}, // Sizing/Styles\nwidth:function width(){if(this[0] === window){return window.innerWidth;}else {if(this.length > 0){return parseFloat(this.css('width'));}else {return null;}}},outerWidth:function outerWidth(includeMargins){if(this.length > 0){if(includeMargins)return this[0].offsetWidth + parseFloat(this.css('margin-right')) + parseFloat(this.css('margin-left'));else return this[0].offsetWidth;}else return null;},height:function height(){if(this[0] === window){return window.innerHeight;}else {if(this.length > 0){return parseFloat(this.css('height'));}else {return null;}}},outerHeight:function outerHeight(includeMargins){if(this.length > 0){if(includeMargins)return this[0].offsetHeight + parseFloat(this.css('margin-top')) + parseFloat(this.css('margin-bottom'));else return this[0].offsetHeight;}else return null;},offset:function offset(){if(this.length > 0){var el=this[0];var box=el.getBoundingClientRect();var body=document.body;var clientTop=el.clientTop || body.clientTop || 0;var clientLeft=el.clientLeft || body.clientLeft || 0;var scrollTop=window.pageYOffset || el.scrollTop;var scrollLeft=window.pageXOffset || el.scrollLeft;return {top:box.top + scrollTop - clientTop,left:box.left + scrollLeft - clientLeft};}else {return null;}},css:function css(props,value){var i;if(arguments.length === 1){if(typeof props === 'string'){if(this[0])return window.getComputedStyle(this[0],null).getPropertyValue(props);}else {for(i = 0;i < this.length;i++) {for(var prop in props) {this[i].style[prop] = props[prop];}}return this;}}if(arguments.length === 2 && typeof props === 'string'){for(i = 0;i < this.length;i++) {this[i].style[props] = value;}return this;}return this;}, //Dom manipulation\neach:function each(callback){for(var i=0;i < this.length;i++) {callback.call(this[i],i,this[i]);}return this;},html:function html(_html){if(typeof _html === 'undefined'){return this[0]?this[0].innerHTML:undefined;}else {for(var i=0;i < this.length;i++) {this[i].innerHTML = _html;}return this;}},is:function is(selector){if(!this[0])return false;var compareWith,i;if(typeof selector === 'string'){var el=this[0];if(el === document)return selector === document;if(el === window)return selector === window;if(el.matches)return el.matches(selector);else if(el.webkitMatchesSelector)return el.webkitMatchesSelector(selector);else if(el.mozMatchesSelector)return el.mozMatchesSelector(selector);else if(el.msMatchesSelector)return el.msMatchesSelector(selector);else {compareWith = $(selector);for(i = 0;i < compareWith.length;i++) {if(compareWith[i] === this[0])return true;}return false;}}else if(selector === document)return this[0] === document;else if(selector === window)return this[0] === window;else {if(selector.nodeType || selector instanceof Dom7){compareWith = selector.nodeType?[selector]:selector;for(i = 0;i < compareWith.length;i++) {if(compareWith[i] === this[0])return true;}return false;}return false;}},index:function index(){if(this[0]){var child=this[0];var i=0;while((child = child.previousSibling) !== null) {if(child.nodeType === 1)i++;}return i;}else return undefined;},eq:function eq(index){if(typeof index === 'undefined')return this;var length=this.length;var returnIndex;if(index > length - 1){return new Dom7([]);}if(index < 0){returnIndex = length + index;if(returnIndex < 0)return new Dom7([]);else return new Dom7([this[returnIndex]]);}return new Dom7([this[index]]);},append:function append(newChild){var i,j;for(i = 0;i < this.length;i++) {if(typeof newChild === 'string'){var tempDiv=document.createElement('div');tempDiv.innerHTML = newChild;while(tempDiv.firstChild) {this[i].appendChild(tempDiv.firstChild);}}else if(newChild instanceof Dom7){for(j = 0;j < newChild.length;j++) {this[i].appendChild(newChild[j]);}}else {this[i].appendChild(newChild);}}return this;},prepend:function prepend(newChild){var i,j;for(i = 0;i < this.length;i++) {if(typeof newChild === 'string'){var tempDiv=document.createElement('div');tempDiv.innerHTML = newChild;for(j = tempDiv.childNodes.length - 1;j >= 0;j--) {this[i].insertBefore(tempDiv.childNodes[j],this[i].childNodes[0]);}}else if(newChild instanceof Dom7){for(j = 0;j < newChild.length;j++) {this[i].insertBefore(newChild[j],this[i].childNodes[0]);}}else {this[i].insertBefore(newChild,this[i].childNodes[0]);}}return this;},insertBefore:function insertBefore(selector){var before=$(selector);for(var i=0;i < this.length;i++) {if(before.length === 1){before[0].parentNode.insertBefore(this[i],before[0]);}else if(before.length > 1){for(var j=0;j < before.length;j++) {before[j].parentNode.insertBefore(this[i].cloneNode(true),before[j]);}}}},insertAfter:function insertAfter(selector){var after=$(selector);for(var i=0;i < this.length;i++) {if(after.length === 1){after[0].parentNode.insertBefore(this[i],after[0].nextSibling);}else if(after.length > 1){for(var j=0;j < after.length;j++) {after[j].parentNode.insertBefore(this[i].cloneNode(true),after[j].nextSibling);}}}},next:function next(selector){if(this.length > 0){if(selector){if(this[0].nextElementSibling && $(this[0].nextElementSibling).is(selector))return new Dom7([this[0].nextElementSibling]);else return new Dom7([]);}else {if(this[0].nextElementSibling)return new Dom7([this[0].nextElementSibling]);else return new Dom7([]);}}else return new Dom7([]);},nextAll:function nextAll(selector){var nextEls=[];var el=this[0];if(!el)return new Dom7([]);while(el.nextElementSibling) {var next=el.nextElementSibling;if(selector){if($(next).is(selector))nextEls.push(next);}else nextEls.push(next);el = next;}return new Dom7(nextEls);},prev:function prev(selector){if(this.length > 0){if(selector){if(this[0].previousElementSibling && $(this[0].previousElementSibling).is(selector))return new Dom7([this[0].previousElementSibling]);else return new Dom7([]);}else {if(this[0].previousElementSibling)return new Dom7([this[0].previousElementSibling]);else return new Dom7([]);}}else return new Dom7([]);},prevAll:function prevAll(selector){var prevEls=[];var el=this[0];if(!el)return new Dom7([]);while(el.previousElementSibling) {var prev=el.previousElementSibling;if(selector){if($(prev).is(selector))prevEls.push(prev);}else prevEls.push(prev);el = prev;}return new Dom7(prevEls);},parent:function parent(selector){var parents=[];for(var i=0;i < this.length;i++) {if(selector){if($(this[i].parentNode).is(selector))parents.push(this[i].parentNode);}else {parents.push(this[i].parentNode);}}return $($.unique(parents));},parents:function parents(selector){var parents=[];for(var i=0;i < this.length;i++) {var parent=this[i].parentNode;while(parent) {if(selector){if($(parent).is(selector))parents.push(parent);}else {parents.push(parent);}parent = parent.parentNode;}}return $($.unique(parents));},find:function find(selector){var foundElements=[];for(var i=0;i < this.length;i++) {var found=this[i].querySelectorAll(selector);for(var j=0;j < found.length;j++) {foundElements.push(found[j]);}}return new Dom7(foundElements);},children:function children(selector){var children=[];for(var i=0;i < this.length;i++) {var childNodes=this[i].childNodes;for(var j=0;j < childNodes.length;j++) {if(!selector){if(childNodes[j].nodeType === 1)children.push(childNodes[j]);}else {if(childNodes[j].nodeType === 1 && $(childNodes[j]).is(selector))children.push(childNodes[j]);}}}return new Dom7($.unique(children));},remove:function remove(){for(var i=0;i < this.length;i++) {if(this[i].parentNode)this[i].parentNode.removeChild(this[i]);}return this;},add:function add(){var dom=this;var i,j;for(i = 0;i < arguments.length;i++) {var toAdd=$(arguments[i]);for(j = 0;j < toAdd.length;j++) {dom[dom.length] = toAdd[j];dom.length++;}}return dom;}};$.fn = Dom7.prototype;$.unique = function(arr){var unique=[];for(var i=0;i < arr.length;i++) {if(unique.indexOf(arr[i]) === -1)unique.push(arr[i]);}return unique;};return $;})(); /*===========================\n Get Dom libraries\n ===========================*/swiperDomPlugins = ['jQuery','Zepto','Dom7'];for(i = 0;i < swiperDomPlugins.length;i++) {if(window[swiperDomPlugins[i]]){addLibraryPlugin(window[swiperDomPlugins[i]]);}} // Required DOM Plugins\nif(typeof Dom7 === 'undefined'){domLib = window.Dom7 || window.Zepto || window.jQuery;}else {domLib = Dom7;}if(domLib){if(!('transitionEnd' in domLib.fn)){domLib.fn.transitionEnd = function(callback){var events=['webkitTransitionEnd','transitionend','oTransitionEnd','MSTransitionEnd','msTransitionEnd'],i,j,dom=this;function fireCallBack(e){ /*jshint validthis:true */if(e.target !== this)return;callback.call(this,e);for(i = 0;i < events.length;i++) {dom.off(events[i],fireCallBack);}}if(callback){for(i = 0;i < events.length;i++) {dom.on(events[i],fireCallBack);}}return this;};}if(!('transform' in domLib.fn)){domLib.fn.transform = function(transform){for(var i=0;i < this.length;i++) {var elStyle=this[i].style;elStyle.webkitTransform = elStyle.MsTransform = elStyle.msTransform = elStyle.MozTransform = elStyle.OTransform = elStyle.transform = transform;}return this;};}if(!('transition' in domLib.fn)){domLib.fn.transition = function(duration){if(typeof duration !== 'string'){duration = duration + 'ms';}for(var i=0;i < this.length;i++) {var elStyle=this[i].style;elStyle.webkitTransitionDuration = elStyle.MsTransitionDuration = elStyle.msTransitionDuration = elStyle.MozTransitionDuration = elStyle.OTransitionDuration = elStyle.transitionDuration = duration;}return this;};}}}};});\nSystem.register(\"ionic/components/tabs/tab\", [\"angular2/core\", \"../app/app\", \"../../config/config\", \"../../util/keyboard\", \"../nav/nav-controller\", \"./tabs\"], function (_export) {\n    /**\n     * @name Tab\n     * @usage\n     * ```html\n     * <ion-tabs>\n     * \t <ion-tab tabTitle=\"Home\" tabIcon=\"home\" [root]=\"tabOneRoot\"></ion-tab>\n     * \t <ion-tab tabTitle=\"Login\" tabIcon=\"star\" [root]=\"tabTwoRoot\"></ion-tab>\n     * </ion-tabs>\n     * ```\n     *\n     * @description\n     * _For basic Tabs usage, see the [Tabs section](../../../../components/#tabs)\n     * of the Component docs._\n     *\n     * Tab components are basic navigation controllers used with Tabs.  Much like\n     * Nav, they are a subclass of NavController and can be used to navigate\n     * to pages in and manipulate the navigation stack of a particular tab.\n     *\n     * For more information on using navigation controllers like Tab or [Nav](../../nav/Nav/),\n     * take a look at the [NavController API reference](../NavController/).\n     *\n     * See the [Tabs API reference](../Tabs/) for more details on configuring Tabs\n     * and the TabBar.\n     *\n     * For most cases, you can give tab a `[root]` property along with the component you want to load.\n     *\n     * ```html\n     * <ion-tabs>\n     *  <ion-tab [root]=\"chatRoot\"><ion-tab>\n     * </ion-tabs>\n     * ```\n     *\n     * ```ts\n     * import {Chat} from '../chat/chat';\n     * export class Tabs {\n     *    constructor(){\n     *      // here we'll set the property of chatRoot to\n     *      // the imported class of Chat\n     *      this.chatRoot = Chat\n     *    }\n     * }\n     * ```\n     *\n     * In other cases, you may not want to navigate to a new component, but just\n     * call a method. You can use the `(select)` event to call a method on your\n     * class. Below is an example of presenting a modal from one of the tabs.\n     *\n     * ```html\n     * <ion-tabs preloadTabs=\"false\">\n     *   <ion-tab (select)=\"chat()\"></ion-tab>\n     * </ion-tabs>\n     * ```\n     *\n     * ```ts\n     * export class Tabs {\n     *   constructor(nav: NavController){\n     *     this.nav = nav;\n     *   }\n     *   chat() {\n     *     let modal = Modal.create(ChatPage);\n     *     this.nav.present(modal);\n     *   }\n     * }\n     * ```\n     *\n     *\n     * @property {any} [root] - set the root page for this tab\n     * @property {any} [tabTitle] - set the title of this tab\n     * @property {any} [tabIcon] - set the icon for this tab\n     * @property {any} [select] - method to call when the current tab is selected\n     *\n     */\n    \"use strict\";\n\n    var ChangeDetectorRef, Component, Host, ElementRef, Compiler, AppViewManager, NgZone, Renderer, EventEmitter, Output, IonicApp, Config, Keyboard, NavController, Tabs, __decorate, __metadata, __param, Tab, _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l;\n\n    var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();\n\n    var _get = function get(_x, _x2, _x3) { var _again = true; _function: while (_again) { var object = _x, property = _x2, receiver = _x3; _again = false; if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { _x = parent; _x2 = property; _x3 = receiver; _again = true; desc = parent = undefined; continue _function; } } else if (\"value\" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } } };\n\n    function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n    function _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\n    return {\n        setters: [function (_angular2Core) {\n            ChangeDetectorRef = _angular2Core.ChangeDetectorRef;\n            Component = _angular2Core.Component;\n            Host = _angular2Core.Host;\n            ElementRef = _angular2Core.ElementRef;\n            Compiler = _angular2Core.Compiler;\n            AppViewManager = _angular2Core.AppViewManager;\n            NgZone = _angular2Core.NgZone;\n            Renderer = _angular2Core.Renderer;\n            EventEmitter = _angular2Core.EventEmitter;\n            Output = _angular2Core.Output;\n        }, function (_appApp) {\n            IonicApp = _appApp.IonicApp;\n        }, function (_configConfig) {\n            Config = _configConfig.Config;\n        }, function (_utilKeyboard) {\n            Keyboard = _utilKeyboard.Keyboard;\n        }, function (_navNavController) {\n            NavController = _navNavController.NavController;\n        }, function (_tabs) {\n            Tabs = _tabs.Tabs;\n        }],\n        execute: function () {\n            __decorate = undefined && undefined.__decorate || function (decorators, target, key, desc) {\n                var c = arguments.length,\n                    r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc,\n                    d;\n                if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n                return c > 3 && r && Object.defineProperty(target, key, r), r;\n            };\n\n            __metadata = undefined && undefined.__metadata || function (k, v) {\n                if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n            };\n\n            __param = undefined && undefined.__param || function (paramIndex, decorator) {\n                return function (target, key) {\n                    decorator(target, key, paramIndex);\n                };\n            };\n\n            Tab = (function (_NavController) {\n                _inherits(Tab, _NavController);\n\n                function Tab(parentTabs, app, config, keyboard, elementRef, compiler, viewManager, zone, renderer, cd) {\n                    _classCallCheck(this, Tab);\n\n                    // A Tab is a NavController for its child pages\n                    _get(Object.getPrototypeOf(Tab.prototype), \"constructor\", this).call(this, parentTabs, app, config, keyboard, elementRef, 'contents', compiler, viewManager, zone, renderer, cd);\n                    this.select = new EventEmitter();\n                    this._isInitial = parentTabs.add(this);\n                    this._panelId = 'tabpanel-' + this.id;\n                    this._btnId = 'tab-' + this.id;\n                }\n\n                /**\n                 * @private\n                 */\n\n                _createClass(Tab, [{\n                    key: \"ngOnInit\",\n                    value: function ngOnInit() {\n                        var _this = this;\n\n                        if (this._isInitial) {\n                            this.parent.select(this);\n                        } else if (this.parent.preloadTabs) {\n                            this._loadTimer = setTimeout(function () {\n                                if (!_this._loaded) {\n                                    _this.load({\n                                        animate: false,\n                                        preload: true,\n                                        postLoad: function postLoad(viewCtrl) {\n                                            var navbar = viewCtrl.getNavbar();\n                                            navbar && navbar.setHidden(true);\n                                        }\n                                    }, function () {});\n                                }\n                            }, 1000 * this.index);\n                        }\n                    }\n\n                    /**\n                     * @private\n                     */\n                }, {\n                    key: \"load\",\n                    value: function load(opts, done) {\n                        if (!this._loaded && this.root) {\n                            this.push(this.root, null, opts, done);\n                            this._loaded = true;\n                        } else {\n                            done();\n                        }\n                    }\n\n                    /**\n                     * @private\n                     */\n                }, {\n                    key: \"loadPage\",\n                    value: function loadPage(viewCtrl, navbarContainerRef, opts, done) {\n                        // by default a page's navbar goes into the shared tab's navbar section\n                        navbarContainerRef = this.parent.navbarContainerRef;\n                        var isTabSubPage = this.parent.subPages && viewCtrl.index > 0;\n                        if (isTabSubPage) {\n                            // a subpage, that's not the first index\n                            // should not use the shared tabs navbar section, but use it's own\n                            navbarContainerRef = null;\n                        }\n                        _get(Object.getPrototypeOf(Tab.prototype), \"loadPage\", this).call(this, viewCtrl, navbarContainerRef, opts, function () {\n                            if (viewCtrl.instance) {\n                                viewCtrl.instance._tabSubPage = isTabSubPage;\n                            }\n                            done();\n                        });\n                    }\n\n                    /**\n                     * @private\n                     */\n                }, {\n                    key: \"setSelected\",\n                    value: function setSelected(isSelected) {\n                        this.isSelected = isSelected;\n                        this.hideNavbars(!isSelected);\n                    }\n\n                    /**\n                     * @private\n                     */\n                }, {\n                    key: \"emitSelect\",\n                    value: function emitSelect() {\n                        this.select.emit();\n                    }\n\n                    /**\n                     * @private\n                     */\n                }, {\n                    key: \"hideNavbars\",\n                    value: function hideNavbars(shouldHideNavbars) {\n                        this._views.forEach(function (viewCtrl) {\n                            var navbar = viewCtrl.getNavbar();\n                            navbar && navbar.setHidden(shouldHideNavbars);\n                        });\n                    }\n\n                    /**\n                     *\n                     * ```ts\n                     * export class MyClass{\n                     *  constructor(tab: Tab){\n                     *    this.tab = tab;\n                     *    console.log(this.tab.index);\n                     *  }\n                     * }\n                     * ```\n                     *\n                     * @returns {Number} Returns the index of this page within its NavController.\n                     *\n                     */\n                }, {\n                    key: \"ngOnDestroy\",\n\n                    /**\n                     * @private\n                     */\n                    value: function ngOnDestroy() {\n                        clearTimeout(this._loadTimer);\n                    }\n                }, {\n                    key: \"index\",\n                    get: function get() {\n                        return this.parent.getIndex(this);\n                    }\n                }]);\n\n                return Tab;\n            })(NavController);\n\n            _export(\"Tab\", Tab);\n\n            __decorate([Output(), __metadata('design:type', typeof (_a = typeof EventEmitter !== 'undefined' && EventEmitter) === 'function' && _a || Object)], Tab.prototype, \"select\", void 0);\n            _export(\"Tab\", Tab = __decorate([Component({\n                selector: 'ion-tab',\n                inputs: ['root', 'tabTitle', 'tabIcon'],\n                host: {\n                    '[class.show-tab]': 'isSelected',\n                    '[attr.id]': '_panelId',\n                    '[attr.aria-labelledby]': '_btnId',\n                    'role': 'tabpanel'\n                },\n                template: '<template #contents></template>'\n            }), __param(0, Host()), __metadata('design:paramtypes', [typeof (_b = typeof Tabs !== 'undefined' && Tabs) === 'function' && _b || Object, typeof (_c = typeof IonicApp !== 'undefined' && IonicApp) === 'function' && _c || Object, typeof (_d = typeof Config !== 'undefined' && Config) === 'function' && _d || Object, typeof (_e = typeof Keyboard !== 'undefined' && Keyboard) === 'function' && _e || Object, typeof (_f = typeof ElementRef !== 'undefined' && ElementRef) === 'function' && _f || Object, typeof (_g = typeof Compiler !== 'undefined' && Compiler) === 'function' && _g || Object, typeof (_h = typeof AppViewManager !== 'undefined' && AppViewManager) === 'function' && _h || Object, typeof (_j = typeof NgZone !== 'undefined' && NgZone) === 'function' && _j || Object, typeof (_k = typeof Renderer !== 'undefined' && Renderer) === 'function' && _k || Object, typeof (_l = typeof ChangeDetectorRef !== 'undefined' && ChangeDetectorRef) === 'function' && _l || Object])], Tab));\n        }\n    };\n});\nSystem.register(\"ionic/components/tabs/tabs\", [\"angular2/core\", \"angular2/common\", \"../ion\", \"../app/id\", \"../../config/config\", \"../../platform/platform\", \"../nav/nav-controller\", \"../nav/view-controller\", \"../../decorators/config-component\", \"../icon/icon\", \"../../util/dom\"], function (_export) {\n    /**\n     * @name Tabs\n     * @property {any} [tabbarPlacement] - set position of the tabbar, top or bottom\n     * @property {any} [tabbarIcons] - set the position of the tabbar's icons: top, bottom, left, right, hide\n     * @property {any} [preloadTabs] - sets whether to preload all the tabs, true or false\n     * @usage\n    * ```html\n     * <ion-tabs>\n     *   <ion-tab [root]=\"tabRoot\"></ion-tab>\n     * </ion-tabs>\n     * ```\n     * @description\n     * _For basic Tabs usage, see the [Tabs section](../../../../components/#tabs)\n     * of the Component docs._\n     *\n     * The Tabs component is a container with a TabBar and any number of\n     * individual Tab components. On iOS, the TabBar is placed on the bottom of\n     * the screen, while on Android it is at the top.\n     *\n     * @see {@link /docs/v3/components#tabs Tabs Component Docs}\n     * @see {@link ../Tab Tab API Docs}\n     */\n    \"use strict\";\n\n    var Directive, ElementRef, Optional, Host, forwardRef, ViewContainerRef, HostListener, EventEmitter, Output, NgFor, NgIf, Ion, Attr, Config, Platform, NavController, ViewController, ConfigComponent, Icon, rafFrames, __decorate, __metadata, __param, Tabs, tabIds, TabButton, TabHighlight, TabNavBarAnchor, _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l;\n\n    var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();\n\n    var _get = function get(_x, _x2, _x3) { var _again = true; _function: while (_again) { var object = _x, property = _x2, receiver = _x3; _again = false; if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { _x = parent; _x2 = property; _x3 = receiver; _again = true; desc = parent = undefined; continue _function; } } else if (\"value\" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } } };\n\n    function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n    function _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\n    return {\n        setters: [function (_angular2Core) {\n            Directive = _angular2Core.Directive;\n            ElementRef = _angular2Core.ElementRef;\n            Optional = _angular2Core.Optional;\n            Host = _angular2Core.Host;\n            forwardRef = _angular2Core.forwardRef;\n            ViewContainerRef = _angular2Core.ViewContainerRef;\n            HostListener = _angular2Core.HostListener;\n            EventEmitter = _angular2Core.EventEmitter;\n            Output = _angular2Core.Output;\n        }, function (_angular2Common) {\n            NgFor = _angular2Common.NgFor;\n            NgIf = _angular2Common.NgIf;\n        }, function (_ion) {\n            Ion = _ion.Ion;\n        }, function (_appId) {\n            Attr = _appId.Attr;\n        }, function (_configConfig) {\n            Config = _configConfig.Config;\n        }, function (_platformPlatform) {\n            Platform = _platformPlatform.Platform;\n        }, function (_navNavController) {\n            NavController = _navNavController.NavController;\n        }, function (_navViewController) {\n            ViewController = _navViewController.ViewController;\n        }, function (_decoratorsConfigComponent) {\n            ConfigComponent = _decoratorsConfigComponent.ConfigComponent;\n        }, function (_iconIcon) {\n            Icon = _iconIcon.Icon;\n        }, function (_utilDom) {\n            rafFrames = _utilDom.rafFrames;\n        }],\n        execute: function () {\n            __decorate = undefined && undefined.__decorate || function (decorators, target, key, desc) {\n                var c = arguments.length,\n                    r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc,\n                    d;\n                if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n                return c > 3 && r && Object.defineProperty(target, key, r), r;\n            };\n\n            __metadata = undefined && undefined.__metadata || function (k, v) {\n                if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n            };\n\n            __param = undefined && undefined.__param || function (paramIndex, decorator) {\n                return function (target, key) {\n                    decorator(target, key, paramIndex);\n                };\n            };\n\n            Tabs = (function (_Ion) {\n                _inherits(Tabs, _Ion);\n\n                /**\n                 * Hi, I'm \"Tabs\". I'm really just another Page, with a few special features.\n                 * \"Tabs\" can be a sibling to other pages that can be navigated to, which those\n                 * sibling pages may or may not have their own tab bars (doesn't matter). The fact\n                 * that \"Tabs\" can happen to have children \"Tab\" classes, and each \"Tab\" can have\n                 * children pages with their own \"ViewController\" instance, as nothing to do with the\n                 * point that \"Tabs\" is itself is just a page with its own instance of ViewController.\n                 */\n\n                function Tabs(config, elementRef, viewCtrl, navCtrl, _platform) {\n                    var _this = this;\n\n                    _classCallCheck(this, Tabs);\n\n                    _get(Object.getPrototypeOf(Tabs.prototype), \"constructor\", this).call(this, elementRef, config);\n                    this._platform = _platform;\n                    this.change = new EventEmitter();\n                    this.parent = navCtrl;\n                    this.subPages = config.get('tabSubPages');\n                    this._tabs = [];\n                    this._id = ++tabIds;\n                    this._ids = -1;\n                    this._onReady = null;\n                    // Tabs may also be an actual ViewController which was navigated to\n                    // if Tabs is static and not navigated to within a NavController\n                    // then skip this and don't treat it as it's own ViewController\n                    if (viewCtrl) {\n                        viewCtrl.setContent(this);\n                        viewCtrl.setContentRef(elementRef);\n                        viewCtrl.onReady = function (done) {\n                            _this._onReady = done;\n                        };\n                    }\n                }\n\n                /**\n                 * @private\n                 */\n\n                _createClass(Tabs, [{\n                    key: \"ngOnInit\",\n                    value: function ngOnInit() {\n                        var _this2 = this;\n\n                        _get(Object.getPrototypeOf(Tabs.prototype), \"ngOnInit\", this).call(this);\n                        this.preloadTabs = this.preloadTabs !== \"false\" && this.preloadTabs !== false;\n                        if (this._highlight) {\n                            this._platform.onResize(function () {\n                                _this2._highlight.select(_this2.getSelected());\n                            });\n                        }\n                    }\n\n                    /**\n                     * @private\n                     */\n                }, {\n                    key: \"add\",\n                    value: function add(tab) {\n                        tab.id = this._id + '-' + ++this._ids;\n                        this._tabs.push(tab);\n                        return this._tabs.length === 1;\n                    }\n\n                    /**\n                     * @param {Number} index Index of the tab you want to select\n                     */\n                }, {\n                    key: \"select\",\n                    value: function select(tabOrIndex) {\n                        var _this3 = this;\n\n                        var selectedTab = typeof tabOrIndex === 'number' ? this.getByIndex(tabOrIndex) : tabOrIndex;\n                        if (!selectedTab) {\n                            return Promise.reject();\n                        }\n                        var deselectedTab = this.getSelected();\n                        if (selectedTab === deselectedTab) {\n                            // no change\n                            return this._touchActive(selectedTab);\n                        }\n                        console.time('Tabs#select ' + selectedTab.id);\n                        var opts = {\n                            animate: false\n                        };\n                        var deselectedPage = undefined;\n                        if (deselectedTab) {\n                            deselectedPage = deselectedTab.getActive();\n                            deselectedPage && deselectedPage.willLeave();\n                        }\n                        var selectedPage = selectedTab.getActive();\n                        selectedPage && selectedPage.willEnter();\n                        selectedTab.load(opts, function () {\n                            selectedTab.emitSelect();\n                            _this3.change.emit(selectedTab);\n                            if (selectedTab.root) {\n                                // only show the selectedTab if it has a root\n                                // it's possible the tab is only for opening modal's or signing out\n                                // and doesn't actually have content. In the case there's no content\n                                // for a tab then do nothing and leave the current view as is\n                                _this3._tabs.forEach(function (tab) {\n                                    tab.setSelected(tab === selectedTab);\n                                });\n                            }\n                            _this3._highlight && _this3._highlight.select(selectedTab);\n                            selectedPage && selectedPage.didEnter();\n                            deselectedPage && deselectedPage.didLeave();\n                            if (_this3._onReady) {\n                                _this3._onReady();\n                                _this3._onReady = null;\n                            }\n                            console.time('Tabs#select ' + selectedTab.id);\n                        });\n                    }\n\n                    /**\n                     * @param {Number} index Index of the tab you want to get\n                     * @returns {Any} Tab Returs the tab who's index matches the one passed\n                     */\n                }, {\n                    key: \"getByIndex\",\n                    value: function getByIndex(index) {\n                        if (index < this._tabs.length && index > -1) {\n                            return this._tabs[index];\n                        }\n                        return null;\n                    }\n\n                    /**\n                     * @return {Any} Tab Returns the currently selected tab\n                     */\n                }, {\n                    key: \"getSelected\",\n                    value: function getSelected() {\n                        for (var i = 0; i < this._tabs.length; i++) {\n                            if (this._tabs[i].isSelected) {\n                                return this._tabs[i];\n                            }\n                        }\n                        return null;\n                    }\n\n                    /**\n                     * @private\n                     */\n                }, {\n                    key: \"getIndex\",\n                    value: function getIndex(tab) {\n                        return this._tabs.indexOf(tab);\n                    }\n\n                    /**\n                     * @private\n                     * \"Touch\" the active tab, going back to the root view of the tab\n                     * or optionally letting the tab handle the event\n                     */\n                }, {\n                    key: \"_touchActive\",\n                    value: function _touchActive(tab) {\n                        var active = tab.getActive();\n                        if (!active) {\n                            return Promise.resolve();\n                        }\n                        var instance = active.instance;\n                        // If they have a custom tab selected handler, call it\n                        if (instance.tabSelected) {\n                            return instance.tabSelected();\n                        }\n                        // If we're a few pages deep, pop to root\n                        if (tab.length() > 1) {\n                            // Pop to the root view\n                            return tab.popToRoot();\n                        }\n                        // Otherwise, if the page we're on is not our real root, reset it to our\n                        // default root type\n                        if (tab.root != active.componentType) {\n                            return tab.setRoot(tab.root);\n                        }\n                        // And failing all of that, we do something safe and secure\n                        return Promise.resolve();\n                    }\n\n                    /**\n                     * Returns the root NavController. Returns `null` if Tabs is not\n                     * within a NavController.\n                     * @returns {NavController}\n                     */\n                }, {\n                    key: \"rootNav\",\n                    get: function get() {\n                        var nav = this.parent;\n                        while (nav.parent) {\n                            nav = nav.parent;\n                        }\n                        return nav;\n                    }\n                }]);\n\n                return Tabs;\n            })(Ion);\n\n            _export(\"Tabs\", Tabs);\n\n            __decorate([Output(), __metadata('design:type', typeof (_a = typeof EventEmitter !== 'undefined' && EventEmitter) === 'function' && _a || Object)], Tabs.prototype, \"change\", void 0);\n            _export(\"Tabs\", Tabs = __decorate([ConfigComponent({\n                selector: 'ion-tabs',\n                defaultInputs: {\n                    'tabbarPlacement': 'bottom',\n                    'tabbarIcons': 'top',\n                    'preloadTabs': false\n                },\n                template: '<ion-navbar-section>' + '<template navbar-anchor></template>' + '</ion-navbar-section>' + '<ion-tabbar-section>' + '<tabbar role=\"tablist\">' + '<a *ngFor=\"#t of _tabs\" [tab]=\"t\" class=\"tab-button\" role=\"tab\">' + '<ion-icon [name]=\"t.tabIcon\" [isActive]=\"t.isSelected\" class=\"tab-button-icon\"></ion-icon>' + '<span class=\"tab-button-text\">{{t.tabTitle}}</span>' + '</a>' + '<tab-highlight></tab-highlight>' + '</tabbar>' + '</ion-tabbar-section>' + '<ion-content-section>' + '<ng-content></ng-content>' + '</ion-content-section>',\n                directives: [Icon, NgFor, NgIf, Attr, forwardRef(function () {\n                    return TabButton;\n                }), forwardRef(function () {\n                    return TabHighlight;\n                }), forwardRef(function () {\n                    return TabNavBarAnchor;\n                })]\n            }), __param(2, Optional()), __param(3, Optional()), __metadata('design:paramtypes', [typeof (_b = typeof Config !== 'undefined' && Config) === 'function' && _b || Object, typeof (_c = typeof ElementRef !== 'undefined' && ElementRef) === 'function' && _c || Object, typeof (_d = typeof ViewController !== 'undefined' && ViewController) === 'function' && _d || Object, typeof (_e = typeof NavController !== 'undefined' && NavController) === 'function' && _e || Object, typeof (_f = typeof Platform !== 'undefined' && Platform) === 'function' && _f || Object])], Tabs));\n            tabIds = -1;\n\n            /**\n             * @private\n             */\n\n            TabButton = (function (_Ion2) {\n                _inherits(TabButton, _Ion2);\n\n                function TabButton(tabs, config, elementRef) {\n                    _classCallCheck(this, TabButton);\n\n                    _get(Object.getPrototypeOf(TabButton.prototype), \"constructor\", this).call(this, elementRef, config);\n                    this.tabs = tabs;\n                    this.disHover = config.get('hoverCSS') === false;\n                }\n\n                _createClass(TabButton, [{\n                    key: \"ngOnInit\",\n                    value: function ngOnInit() {\n                        this.tab.btn = this;\n                        this.hasTitle = !!this.tab.tabTitle;\n                        this.hasIcon = !!this.tab.tabIcon;\n                        this.hasTitleOnly = this.hasTitle && !this.hasIcon;\n                        this.hasIconOnly = this.hasIcon && !this.hasTitle;\n                    }\n                }, {\n                    key: \"onClick\",\n                    value: function onClick() {\n                        this.tabs.select(this.tab);\n                    }\n                }]);\n\n                return TabButton;\n            })(Ion);\n\n            __decorate([HostListener('click'), __metadata('design:type', Function), __metadata('design:paramtypes', []), __metadata('design:returntype', void 0)], TabButton.prototype, \"onClick\", null);\n            TabButton = __decorate([Directive({\n                selector: '.tab-button',\n                inputs: ['tab'],\n                host: {\n                    '[attr.id]': 'tab._btnId',\n                    '[attr.aria-controls]': 'tab._panelId',\n                    '[attr.aria-selected]': 'tab.isSelected',\n                    '[class.has-title]': 'hasTitle',\n                    '[class.has-icon]': 'hasIcon',\n                    '[class.has-title-only]': 'hasTitleOnly',\n                    '[class.icon-only]': 'hasIconOnly',\n                    '[class.disable-hover]': 'disHover'\n                }\n            }), __param(0, Host()), __metadata('design:paramtypes', [Tabs, typeof (_g = typeof Config !== 'undefined' && Config) === 'function' && _g || Object, typeof (_h = typeof ElementRef !== 'undefined' && ElementRef) === 'function' && _h || Object])], TabButton);\n            /**\n             * @private\n             */\n\n            TabHighlight = (function () {\n                function TabHighlight(tabs, config, elementRef) {\n                    _classCallCheck(this, TabHighlight);\n\n                    if (config.get('tabbarHighlight')) {\n                        tabs._highlight = this;\n                        this.elementRef = elementRef;\n                    }\n                }\n\n                _createClass(TabHighlight, [{\n                    key: \"select\",\n                    value: function select(tab) {\n                        var _this4 = this;\n\n                        rafFrames(3, function () {\n                            var d = tab.btn.getDimensions();\n                            var ele = _this4.elementRef.nativeElement;\n                            ele.style.transform = 'translate3d(' + d.left + 'px,0,0) scaleX(' + d.width + ')';\n                            if (!_this4.init) {\n                                _this4.init = true;\n                                rafFrames(6, function () {\n                                    ele.classList.add('animate');\n                                });\n                            }\n                        });\n                    }\n                }]);\n\n                return TabHighlight;\n            })();\n\n            TabHighlight = __decorate([Directive({\n                selector: 'tab-highlight'\n            }), __param(0, Host()), __metadata('design:paramtypes', [Tabs, typeof (_j = typeof Config !== 'undefined' && Config) === 'function' && _j || Object, typeof (_k = typeof ElementRef !== 'undefined' && ElementRef) === 'function' && _k || Object])], TabHighlight);\n            /**\n             * @private\n             */\n\n            TabNavBarAnchor = function TabNavBarAnchor(tabs, viewContainerRef) {\n                _classCallCheck(this, TabNavBarAnchor);\n\n                tabs.navbarContainerRef = viewContainerRef;\n            };\n\n            TabNavBarAnchor = __decorate([Directive({ selector: 'template[navbar-anchor]' }), __param(0, Host()), __metadata('design:paramtypes', [Tabs, typeof (_l = typeof ViewContainerRef !== 'undefined' && ViewContainerRef) === 'function' && _l || Object])], TabNavBarAnchor);\n        }\n    };\n});\nSystem.register('ionic/components/tap-click/activator', ['../../util/dom'], function (_export) {\n    'use strict';\n\n    var rafFrames, Activator;\n\n    var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();\n\n    function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\n    return {\n        setters: [function (_utilDom) {\n            rafFrames = _utilDom.rafFrames;\n        }],\n        execute: function () {\n            Activator = (function () {\n                function Activator(app, config, zone) {\n                    _classCallCheck(this, Activator);\n\n                    this.app = app;\n                    this.zone = zone;\n                    this.queue = [];\n                    this.active = [];\n                    this.clearStateDefers = 5;\n                    this.clearAttempt = 0;\n                    this.activatedClass = config.get('activatedClass') || 'activated';\n                    this.x = 0;\n                    this.y = 0;\n                }\n\n                _createClass(Activator, [{\n                    key: 'downAction',\n                    value: function downAction(ev, activatableEle, pointerX, pointerY, callback) {\n                        // the user just pressed down\n                        var self = this;\n                        if (self.disableActivated(ev)) return false;\n                        // remember where they pressed\n                        self.x = pointerX;\n                        self.y = pointerY;\n                        // queue to have this element activated\n                        self.queue.push(activatableEle);\n                        function activateCss() {\n                            var activatableEle = undefined;\n                            for (var i = 0; i < self.queue.length; i++) {\n                                activatableEle = self.queue[i];\n                                if (activatableEle && activatableEle.parentNode) {\n                                    self.active.push(activatableEle);\n                                    activatableEle.classList.add(self.activatedClass);\n                                }\n                            }\n                            self.queue = [];\n                        }\n                        this.zone.runOutsideAngular(function () {\n                            rafFrames(2, activateCss);\n                        });\n                        return true;\n                    }\n                }, {\n                    key: 'upAction',\n                    value: function upAction() {\n                        // the user was pressing down, then just let up\n                        var self = this;\n                        function activateUp() {\n                            self.clearState();\n                        }\n                        this.zone.runOutsideAngular(function () {\n                            rafFrames(self.clearStateDefers, activateUp);\n                        });\n                    }\n                }, {\n                    key: 'clearState',\n                    value: function clearState() {\n                        var _this = this;\n\n                        // all states should return to normal\n                        if (!this.app.isEnabled()) {\n                            // the app is actively disabled, so don't bother deactivating anything.\n                            // this makes it easier on the GPU so it doesn't have to redraw any\n                            // buttons during a transition. This will retry in XX milliseconds.\n                            setTimeout(function () {\n                                _this.clearState();\n                            }, 600);\n                        } else {\n                            // not actively transitioning, good to deactivate any elements\n                            this.deactivate();\n                        }\n                    }\n                }, {\n                    key: 'deactivate',\n                    value: function deactivate() {\n                        // remove the active class from all active elements\n                        var self = this;\n                        self.queue = [];\n                        function deactivate() {\n                            for (var i = 0; i < self.active.length; i++) {\n                                self.active[i].classList.remove(self.activatedClass);\n                            }\n                            self.active = [];\n                        }\n                        rafFrames(2, deactivate);\n                    }\n                }, {\n                    key: 'disableActivated',\n                    value: function disableActivated(ev) {\n                        if (ev.defaultPrevented) return true;\n                        var targetEle = ev.target;\n                        for (var x = 0; x < 4; x++) {\n                            if (!targetEle) break;\n                            if (targetEle.hasAttribute('disable-activated')) return true;\n                            targetEle = targetEle.parentElement;\n                        }\n                        return false;\n                    }\n                }]);\n\n                return Activator;\n            })();\n\n            _export('Activator', Activator);\n        }\n    };\n});\nSystem.register('ionic/components/tap-click/ripple', ['./activator', '../../animations/animation', '../../util/dom'], function (_export) {\n    'use strict';\n\n    var Activator, Animation, raf, rafFrames, RippleActivator, TOUCH_DOWN_ACCEL, EXPAND_DOWN_PLAYBACK_RATE, EXPAND_OUT_PLAYBACK_RATE, FADE_OUT_DURATION;\n\n    var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();\n\n    var _get = function get(_x, _x2, _x3) { var _again = true; _function: while (_again) { var object = _x, property = _x2, receiver = _x3; _again = false; if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { _x = parent; _x2 = property; _x3 = receiver; _again = true; desc = parent = undefined; continue _function; } } else if ('value' in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } } };\n\n    function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\n    function _inherits(subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\n    return {\n        setters: [function (_activator) {\n            Activator = _activator.Activator;\n        }, function (_animationsAnimation) {\n            Animation = _animationsAnimation.Animation;\n        }, function (_utilDom) {\n            raf = _utilDom.raf;\n            rafFrames = _utilDom.rafFrames;\n        }],\n        execute: function () {\n            RippleActivator = (function (_Activator) {\n                _inherits(RippleActivator, _Activator);\n\n                function RippleActivator(app, config, zone) {\n                    _classCallCheck(this, RippleActivator);\n\n                    _get(Object.getPrototypeOf(RippleActivator.prototype), 'constructor', this).call(this, app, config, zone);\n                    this.expands = {};\n                    this.fades = {};\n                    this.expandSpeed = null;\n                }\n\n                _createClass(RippleActivator, [{\n                    key: 'downAction',\n                    value: function downAction(ev, activatableEle, pointerX, pointerY) {\n                        var _this = this;\n\n                        if (_get(Object.getPrototypeOf(RippleActivator.prototype), 'downAction', this).call(this, ev, activatableEle, pointerX, pointerY)) {\n                            // create a new ripple element\n                            this.expandSpeed = EXPAND_DOWN_PLAYBACK_RATE;\n                            this.zone.runOutsideAngular(function () {\n                                raf(function () {\n                                    var clientRect = activatableEle.getBoundingClientRect();\n                                    raf(function () {\n                                        _this.createRipple(activatableEle, pointerX, pointerY, clientRect);\n                                    });\n                                });\n                            });\n                        }\n                    }\n                }, {\n                    key: 'createRipple',\n                    value: function createRipple(activatableEle, pointerX, pointerY, clientRect) {\n                        var _this2 = this;\n\n                        var clientPointerX = pointerX - clientRect.left;\n                        var clientPointerY = pointerY - clientRect.top;\n                        var x = Math.max(Math.abs(clientRect.width - clientPointerX), clientPointerX) * 2;\n                        var y = Math.max(Math.abs(clientRect.height - clientPointerY), clientPointerY) * 2;\n                        var diameter = Math.max(Math.sqrt(Math.pow(x, 2) + Math.pow(y, 2)), 64);\n                        var radius = Math.sqrt(clientRect.width + clientRect.height);\n                        var duration = 1000 * Math.sqrt(radius / TOUCH_DOWN_ACCEL) + 0.5;\n                        var rippleEle = document.createElement('md-ripple');\n                        var rippleId = Date.now();\n                        var eleStyle = rippleEle.style;\n                        eleStyle.width = eleStyle.height = diameter + 'px';\n                        eleStyle.marginTop = eleStyle.marginLeft = -(diameter / 2) + 'px';\n                        eleStyle.left = clientPointerX + 'px';\n                        eleStyle.top = clientPointerY + 'px';\n                        activatableEle.appendChild(rippleEle);\n                        // create the animation for the fade out, but don't start it yet\n                        this.fades[rippleId] = new Animation(rippleEle, { renderDelay: 0 });\n                        this.fades[rippleId].fadeOut().duration(FADE_OUT_DURATION).playbackRate(1).onFinish(function () {\n                            raf(function () {\n                                _this2.fades[rippleId].dispose(true);\n                                delete _this2.fades[rippleId];\n                            });\n                        });\n                        // expand the circle from the users starting point\n                        // start slow, and when they let up, then speed up the animation\n                        this.expands[rippleId] = new Animation(rippleEle, { renderDelay: 0 });\n                        this.expands[rippleId].fromTo('scale', '0.001', '1').duration(duration).playbackRate(this.expandSpeed).onFinish(function () {\n                            _this2.expands[rippleId].dispose();\n                            delete _this2.expands[rippleId];\n                            _this2.next();\n                        }).play();\n                    }\n                }, {\n                    key: 'upAction',\n                    value: function upAction() {\n                        var _this3 = this;\n\n                        this.deactivate();\n                        this.expandSpeed = 1;\n                        this.zone.runOutsideAngular(function () {\n                            rafFrames(4, function () {\n                                _this3.next();\n                            });\n                        });\n                    }\n                }, {\n                    key: 'next',\n                    value: function next() {\n                        var now = Date.now();\n                        var rippleId = undefined;\n                        for (rippleId in this.expands) {\n                            if (parseInt(rippleId, 10) + 4000 < now) {\n                                this.expands[rippleId].dispose(true);\n                                delete this.expands[rippleId];\n                            } else if (this.expands[rippleId].playbackRate() === EXPAND_DOWN_PLAYBACK_RATE) {\n                                this.expands[rippleId].playbackRate(EXPAND_OUT_PLAYBACK_RATE);\n                            }\n                        }\n                        for (rippleId in this.fades) {\n                            if (parseInt(rippleId, 10) + 4000 < now) {\n                                this.fades[rippleId].dispose(true);\n                                delete this.fades[rippleId];\n                            } else if (!this.fades[rippleId].isPlaying) {\n                                this.fades[rippleId].isPlaying = true;\n                                this.fades[rippleId].play();\n                            }\n                        }\n                    }\n                }, {\n                    key: 'clearState',\n                    value: function clearState() {\n                        this.deactivate();\n                        this.next();\n                    }\n                }]);\n\n                return RippleActivator;\n            })(Activator);\n\n            _export('RippleActivator', RippleActivator);\n\n            TOUCH_DOWN_ACCEL = 512;\n            EXPAND_DOWN_PLAYBACK_RATE = 0.35;\n            EXPAND_OUT_PLAYBACK_RATE = 3;\n            FADE_OUT_DURATION = 700;\n        }\n    };\n});\nSystem.register(\"ionic/components/tap-click/tap-click\", [\"angular2/core\", \"../app/app\", \"../../config/config\", \"../../util/dom\", \"./activator\", \"./ripple\"], function (_export) {\n    /**\n     * @private\n     */\n    \"use strict\";\n\n    var Injectable, NgZone, IonicApp, Config, pointerCoord, hasPointerMoved, Activator, RippleActivator, __decorate, __metadata, TapClick, ACTIVATABLE_ELEMENTS, ACTIVATABLE_ATTRIBUTES, POINTER_TOLERANCE, POINTER_MOVE_UNTIL_CANCEL, DISABLE_NATIVE_CLICK_AMOUNT, _a, _b, _c;\n\n    var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();\n\n    _export(\"isActivatable\", isActivatable);\n\n    function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n    function getActivatableTarget(ele) {\n        var targetEle = ele;\n        for (var x = 0; x < 4; x++) {\n            if (!targetEle) break;\n            if (isActivatable(targetEle)) return targetEle;\n            targetEle = targetEle.parentElement;\n        }\n        return null;\n    }\n    /**\n     * @private\n     */\n\n    function isActivatable(ele) {\n        if (ACTIVATABLE_ELEMENTS.test(ele.tagName)) {\n            return true;\n        }\n        var attributes = ele.attributes;\n        for (var i = 0, l = attributes.length; i < l; i++) {\n            if (ACTIVATABLE_ATTRIBUTES.test(attributes[i].name)) {\n                return true;\n            }\n        }\n        return false;\n    }\n\n    function addListener(type, listener, useCapture) {\n        document.addEventListener(type, listener, useCapture);\n    }\n    function removeListener(type, listener) {\n        document.removeEventListener(type, listener);\n    }\n    return {\n        setters: [function (_angular2Core) {\n            Injectable = _angular2Core.Injectable;\n            NgZone = _angular2Core.NgZone;\n        }, function (_appApp) {\n            IonicApp = _appApp.IonicApp;\n        }, function (_configConfig) {\n            Config = _configConfig.Config;\n        }, function (_utilDom) {\n            pointerCoord = _utilDom.pointerCoord;\n            hasPointerMoved = _utilDom.hasPointerMoved;\n        }, function (_activator) {\n            Activator = _activator.Activator;\n        }, function (_ripple) {\n            RippleActivator = _ripple.RippleActivator;\n        }],\n        execute: function () {\n            __decorate = undefined && undefined.__decorate || function (decorators, target, key, desc) {\n                var c = arguments.length,\n                    r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc,\n                    d;\n                if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n                return c > 3 && r && Object.defineProperty(target, key, r), r;\n            };\n\n            __metadata = undefined && undefined.__metadata || function (k, v) {\n                if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n            };\n\n            TapClick = (function () {\n                function TapClick(app, config, zone) {\n                    _classCallCheck(this, TapClick);\n\n                    var self = this;\n                    self.app = app;\n                    self.zone = zone;\n                    self.lastTouch = 0;\n                    self.disableClick = 0;\n                    self.lastActivated = 0;\n                    if (config.get('activator') == 'ripple') {\n                        self.activator = new RippleActivator(app, config, zone);\n                    } else if (config.get('activator') == 'highlight') {\n                        self.activator = new Activator(app, config, zone);\n                    }\n                    self.usePolyfill = config.get('tapPolyfill') === true;\n                    zone.runOutsideAngular(function () {\n                        addListener('click', self.click.bind(self), true);\n                        addListener('touchstart', self.touchStart.bind(self));\n                        addListener('touchend', self.touchEnd.bind(self));\n                        addListener('touchcancel', self.pointerCancel.bind(self));\n                        addListener('mousedown', self.mouseDown.bind(self), true);\n                        addListener('mouseup', self.mouseUp.bind(self), true);\n                    });\n                    self.pointerMove = function (ev) {\n                        if (hasPointerMoved(POINTER_MOVE_UNTIL_CANCEL, self.startCoord, pointerCoord(ev))) {\n                            self.pointerCancel(ev);\n                        }\n                    };\n                }\n\n                _createClass(TapClick, [{\n                    key: \"touchStart\",\n                    value: function touchStart(ev) {\n                        this.lastTouch = Date.now();\n                        this.pointerStart(ev);\n                    }\n                }, {\n                    key: \"touchEnd\",\n                    value: function touchEnd(ev) {\n                        this.lastTouch = Date.now();\n                        if (this.usePolyfill && this.startCoord && this.app.isEnabled()) {\n                            // only dispatch mouse click events from a touchend event\n                            // when tapPolyfill config is true, and the startCoordand endCoord\n                            // are not too far off from each other\n                            var endCoord = pointerCoord(ev);\n                            if (!hasPointerMoved(POINTER_TOLERANCE, this.startCoord, endCoord)) {\n                                // prevent native mouse click events for XX amount of time\n                                this.disableClick = this.lastTouch + DISABLE_NATIVE_CLICK_AMOUNT;\n                                if (this.app.isScrolling()) {\n                                    // do not fire off a click event while the app was scrolling\n                                    console.debug('click from touch prevented by scrolling ' + Date.now());\n                                } else {\n                                    // dispatch a mouse click event\n                                    console.debug('create click from touch ' + Date.now());\n                                    var clickEvent = document.createEvent('MouseEvents');\n                                    clickEvent.initMouseEvent('click', true, true, window, 1, 0, 0, endCoord.x, endCoord.y, false, false, false, false, 0, null);\n                                    clickEvent.isIonicTap = true;\n                                    ev.target.dispatchEvent(clickEvent);\n                                }\n                            }\n                        }\n                        this.pointerEnd(ev);\n                    }\n                }, {\n                    key: \"mouseDown\",\n                    value: function mouseDown(ev) {\n                        if (this.isDisabledNativeClick()) {\n                            console.debug('mouseDown prevent ' + ev.target.tagName + ' ' + Date.now());\n                            // does not prevent default on purpose\n                            // so native blur events from inputs can happen\n                            ev.stopPropagation();\n                        } else if (this.lastTouch + DISABLE_NATIVE_CLICK_AMOUNT < Date.now()) {\n                            this.pointerStart(ev);\n                        }\n                    }\n                }, {\n                    key: \"mouseUp\",\n                    value: function mouseUp(ev) {\n                        if (this.isDisabledNativeClick()) {\n                            console.debug('mouseUp prevent ' + ev.target.tagName + ' ' + Date.now());\n                            ev.preventDefault();\n                            ev.stopPropagation();\n                        }\n                        if (this.lastTouch + DISABLE_NATIVE_CLICK_AMOUNT < Date.now()) {\n                            this.pointerEnd(ev);\n                        }\n                    }\n                }, {\n                    key: \"pointerStart\",\n                    value: function pointerStart(ev) {\n                        var activatableEle = getActivatableTarget(ev.target);\n                        if (activatableEle) {\n                            this.startCoord = pointerCoord(ev);\n                            var now = Date.now();\n                            if (this.lastActivated + 150 < now) {\n                                this.activator && this.activator.downAction(ev, activatableEle, this.startCoord.x, this.startCoord.y);\n                                this.lastActivated = now;\n                            }\n                            this.moveListeners(true);\n                        } else {\n                            this.startCoord = null;\n                        }\n                    }\n                }, {\n                    key: \"pointerEnd\",\n                    value: function pointerEnd(ev) {\n                        this.moveListeners(false);\n                        this.activator && this.activator.upAction();\n                    }\n                }, {\n                    key: \"pointerCancel\",\n                    value: function pointerCancel(ev) {\n                        console.debug('pointerCancel from ' + ev.type + ' ' + Date.now());\n                        this.activator && this.activator.clearState();\n                        this.moveListeners(false);\n                    }\n                }, {\n                    key: \"moveListeners\",\n                    value: function moveListeners(shouldAdd) {\n                        removeListener(this.usePolyfill ? 'touchmove' : 'mousemove', this.pointerMove);\n                        //this.zone.runOutsideAngular(() => {\n                        if (shouldAdd) {\n                            addListener(this.usePolyfill ? 'touchmove' : 'mousemove', this.pointerMove);\n                        } else {}\n                        //});\n                    }\n                }, {\n                    key: \"click\",\n                    value: function click(ev) {\n                        var preventReason = null;\n                        if (!this.app.isEnabled()) {\n                            preventReason = 'appDisabled';\n                        } else if (!ev.isIonicTap && this.isDisabledNativeClick()) {\n                            preventReason = 'nativeClick';\n                        }\n                        if (preventReason !== null) {\n                            console.debug('click prevent ' + preventReason + ' ' + Date.now());\n                            ev.preventDefault();\n                            ev.stopPropagation();\n                        }\n                    }\n                }, {\n                    key: \"isDisabledNativeClick\",\n                    value: function isDisabledNativeClick() {\n                        return this.disableClick > Date.now();\n                    }\n                }]);\n\n                return TapClick;\n            })();\n\n            _export(\"TapClick\", TapClick);\n\n            _export(\"TapClick\", TapClick = __decorate([Injectable(), __metadata('design:paramtypes', [typeof (_a = typeof IonicApp !== 'undefined' && IonicApp) === 'function' && _a || Object, typeof (_b = typeof Config !== 'undefined' && Config) === 'function' && _b || Object, typeof (_c = typeof NgZone !== 'undefined' && NgZone) === 'function' && _c || Object])], TapClick));ACTIVATABLE_ELEMENTS = /^(A|BUTTON)$/;\n            ACTIVATABLE_ATTRIBUTES = /tappable|button/i;\n            POINTER_TOLERANCE = 4;\n            POINTER_MOVE_UNTIL_CANCEL = 10;\n            DISABLE_NATIVE_CLICK_AMOUNT = 2500;\n        }\n    };\n});\nSystem.register(\"ionic/components/text-input/text-input\", [\"angular2/core\", \"angular2/common\", \"../nav/nav-controller\", \"../../config/config\", \"../../util/form\", \"../label/label\", \"../app/app\", \"../content/content\", \"../../util/dom\", \"../../platform/platform\", \"../button/button\", \"../icon/icon\"], function (_export) {\n    /**\n     * @private\n     */\n    \"use strict\";\n\n    var Component, Directive, Attribute, forwardRef, Host, Optional, ElementRef, Renderer, Input, Output, EventEmitter, ContentChild, ContentChildren, HostListener, NgIf, NavController, Config, Form, Label, IonicApp, Content, CSS, _hasFocus, pointerCoord, hasPointerMoved, Platform, Button, Icon, __decorate, __metadata, __param, TextInputElement, _TextInput, InputScrollAssist, SCROLL_ASSIST_SPEED, _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o;\n\n    var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();\n\n    function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n    function cloneInput(srcInput, addCssClass) {\n        var clonedInputEle = srcInput.cloneNode(true);\n        clonedInputEle.classList.add(addCssClass);\n        clonedInputEle.classList.remove('hide-focused-input');\n        clonedInputEle.setAttribute('aria-hidden', true);\n        clonedInputEle.removeAttribute('aria-labelledby');\n        clonedInputEle.tabIndex = -1;\n        return clonedInputEle;\n    }\n\n    function getScrollAssistDuration(distanceToScroll) {\n        //return 3000;\n        distanceToScroll = Math.abs(distanceToScroll);\n        var duration = distanceToScroll / SCROLL_ASSIST_SPEED;\n        return Math.min(400, Math.max(100, duration));\n    }\n    return {\n        setters: [function (_angular2Core) {\n            Component = _angular2Core.Component;\n            Directive = _angular2Core.Directive;\n            Attribute = _angular2Core.Attribute;\n            forwardRef = _angular2Core.forwardRef;\n            Host = _angular2Core.Host;\n            Optional = _angular2Core.Optional;\n            ElementRef = _angular2Core.ElementRef;\n            Renderer = _angular2Core.Renderer;\n            Input = _angular2Core.Input;\n            Output = _angular2Core.Output;\n            EventEmitter = _angular2Core.EventEmitter;\n            ContentChild = _angular2Core.ContentChild;\n            ContentChildren = _angular2Core.ContentChildren;\n            HostListener = _angular2Core.HostListener;\n        }, function (_angular2Common) {\n            NgIf = _angular2Common.NgIf;\n        }, function (_navNavController) {\n            NavController = _navNavController.NavController;\n        }, function (_configConfig) {\n            Config = _configConfig.Config;\n        }, function (_utilForm) {\n            Form = _utilForm.Form;\n        }, function (_labelLabel) {\n            Label = _labelLabel.Label;\n        }, function (_appApp) {\n            IonicApp = _appApp.IonicApp;\n        }, function (_contentContent) {\n            Content = _contentContent.Content;\n        }, function (_utilDom) {\n            CSS = _utilDom.CSS;\n            _hasFocus = _utilDom.hasFocus;\n            pointerCoord = _utilDom.pointerCoord;\n            hasPointerMoved = _utilDom.hasPointerMoved;\n        }, function (_platformPlatform) {\n            Platform = _platformPlatform.Platform;\n        }, function (_buttonButton) {\n            Button = _buttonButton.Button;\n        }, function (_iconIcon) {\n            Icon = _iconIcon.Icon;\n        }],\n        execute: function () {\n            __decorate = undefined && undefined.__decorate || function (decorators, target, key, desc) {\n                var c = arguments.length,\n                    r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc,\n                    d;\n                if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n                return c > 3 && r && Object.defineProperty(target, key, r), r;\n            };\n\n            __metadata = undefined && undefined.__metadata || function (k, v) {\n                if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n            };\n\n            __param = undefined && undefined.__param || function (paramIndex, decorator) {\n                return function (target, key) {\n                    decorator(target, key, paramIndex);\n                };\n            };\n\n            TextInputElement = (function () {\n                function TextInputElement(type, _elementRef, _renderer) {\n                    _classCallCheck(this, TextInputElement);\n\n                    this._elementRef = _elementRef;\n                    this._renderer = _renderer;\n                    this.valueChange = new EventEmitter();\n                    this.focusChange = new EventEmitter();\n                    this.type = type || 'text';\n                }\n\n                _createClass(TextInputElement, [{\n                    key: \"ngOnInit\",\n                    value: function ngOnInit() {\n                        if (this.ngModel) {\n                            this.value = this.ngModel;\n                        } else {\n                            this.value = this._elementRef.nativeElement.value;\n                        }\n                    }\n                }, {\n                    key: \"_keyup\",\n                    value: function _keyup(ev) {\n                        this.valueChange.emit(ev.target.value);\n                    }\n                }, {\n                    key: \"_focus\",\n                    value: function _focus() {\n                        this.focusChange.emit(true);\n                    }\n                }, {\n                    key: \"_blur\",\n                    value: function _blur() {\n                        this.focusChange.emit(false);\n                        this.hideFocus(false);\n                    }\n                }, {\n                    key: \"labelledBy\",\n                    value: function labelledBy(val) {\n                        this._renderer.setElementAttribute(this._elementRef, 'aria-labelledby', val);\n                    }\n                }, {\n                    key: \"setFocus\",\n                    value: function setFocus() {\n                        this.element().focus();\n                    }\n                }, {\n                    key: \"relocate\",\n                    value: function relocate(shouldRelocate, inputRelativeY) {\n                        if (this._relocated !== shouldRelocate) {\n                            var focusedInputEle = this.element();\n                            if (shouldRelocate) {\n                                var clonedInputEle = cloneInput(focusedInputEle, 'cloned-input');\n                                focusedInputEle.classList.add('hide-focused-input');\n                                focusedInputEle.style[CSS.transform] = \"translate3d(-9999px,\" + inputRelativeY + \"px,0)\";\n                                focusedInputEle.parentNode.insertBefore(clonedInputEle, focusedInputEle);\n                                this.setFocus();\n                            } else {\n                                focusedInputEle.classList.remove('hide-focused-input');\n                                focusedInputEle.style[CSS.transform] = '';\n                                var clonedInputEle = focusedInputEle.parentNode.querySelector('.cloned-input');\n                                if (clonedInputEle) {\n                                    clonedInputEle.parentNode.removeChild(clonedInputEle);\n                                }\n                            }\n                            this._relocated = shouldRelocate;\n                        }\n                    }\n                }, {\n                    key: \"hideFocus\",\n                    value: function hideFocus(shouldHideFocus) {\n                        var focusedInputEle = this.element();\n                        if (shouldHideFocus) {\n                            var clonedInputEle = cloneInput(focusedInputEle, 'cloned-hidden');\n                            focusedInputEle.classList.add('hide-focused-input');\n                            focusedInputEle.style[CSS.transform] = 'translate3d(-9999px,0,0)';\n                            focusedInputEle.parentNode.insertBefore(clonedInputEle, focusedInputEle);\n                        } else {\n                            focusedInputEle.classList.remove('hide-focused-input');\n                            focusedInputEle.style[CSS.transform] = '';\n                            var clonedInputEle = focusedInputEle.parentNode.querySelector('.cloned-hidden');\n                            if (clonedInputEle) {\n                                clonedInputEle.parentNode.removeChild(clonedInputEle);\n                            }\n                        }\n                    }\n                }, {\n                    key: \"hasFocus\",\n                    value: function hasFocus() {\n                        return _hasFocus(this.element());\n                    }\n                }, {\n                    key: \"addClass\",\n                    value: function addClass(className) {\n                        this._renderer.setElementClass(this._elementRef, className, true);\n                    }\n                }, {\n                    key: \"hasClass\",\n                    value: function hasClass(className) {\n                        this._elementRef.nativeElement.classList.contains(className);\n                    }\n                }, {\n                    key: \"element\",\n                    value: function element() {\n                        return this._elementRef.nativeElement;\n                    }\n                }]);\n\n                return TextInputElement;\n            })();\n\n            _export(\"TextInputElement\", TextInputElement);\n\n            __decorate([Input(), __metadata('design:type', String)], TextInputElement.prototype, \"value\", void 0);\n            __decorate([Input(), __metadata('design:type', Object)], TextInputElement.prototype, \"ngModel\", void 0);\n            __decorate([Output(), __metadata('design:type', typeof (_a = typeof EventEmitter !== 'undefined' && EventEmitter) === 'function' && _a || Object)], TextInputElement.prototype, \"valueChange\", void 0);\n            __decorate([Output(), __metadata('design:type', typeof (_b = typeof EventEmitter !== 'undefined' && EventEmitter) === 'function' && _b || Object)], TextInputElement.prototype, \"focusChange\", void 0);\n            __decorate([HostListener('keyup', ['$event']), __metadata('design:type', Function), __metadata('design:paramtypes', [Object]), __metadata('design:returntype', void 0)], TextInputElement.prototype, \"_keyup\", null);\n            __decorate([HostListener('focus'), __metadata('design:type', Function), __metadata('design:paramtypes', []), __metadata('design:returntype', void 0)], TextInputElement.prototype, \"_focus\", null);\n            __decorate([HostListener('blur'), __metadata('design:type', Function), __metadata('design:paramtypes', []), __metadata('design:returntype', void 0)], TextInputElement.prototype, \"_blur\", null);\n            _export(\"TextInputElement\", TextInputElement = __decorate([Directive({\n                selector: 'textarea,input[type=text],input[type=password],input[type=number],input[type=search],input[type=email],input[type=url],input[type=tel],input[type=date],input[type=datetime],input[type=datetime-local],input[type=week],input[type=time]',\n                host: {\n                    'class': 'text-input'\n                }\n            }), __param(0, Attribute('type')), __metadata('design:paramtypes', [String, typeof (_c = typeof ElementRef !== 'undefined' && ElementRef) === 'function' && _c || Object, typeof (_d = typeof Renderer !== 'undefined' && Renderer) === 'function' && _d || Object])], TextInputElement));\n            /**\n             * @name Input\n             * @module ionic\n             * @description\n             *\n             * `ion-input` is a generic wrapper for both inputs and textareas. You can give `ion-input` attributes to tell it how to handle a child `ion-label` component.\n             *\n             * @property [fixed-label] - a persistant label that sits next the the input\n             * @property [floating-label] - a label that will float about the input if the input is empty of looses focus\n             * @property [stacked-label] - A stacked label will always appear on top of the input\n             * @property [inset] - The input will be inset\n             * @property [clearInput] - A clear icon will appear in the input which clears it\n             *\n             * @usage\n             * ```html\n             *  <ion-input>\n             *    <ion-label>Username</ion-label>\n             *    <input type=\"text\" value=\"\">\n             *  </ion-input>\n             *\n             *  <ion-input clearInput>\n             *    <input type=\"text\" placeholder=\"Username\">\n             *  </ion-input>\n             *\n             *  <ion-input fixed-label>\n             *    <ion-label>Username</ion-label>\n             *    <input type=\"text\" value=\"\">\n             *  </ion-input>\n             *\n             *  <ion-input floating-label>\n             *    <ion-label>Username</ion-label>\n             *    <input type=\"text\" value=\"\">\n             *  </ion-input>\n             * ```\n             *\n             */\n\n            _TextInput = (function () {\n                function TextInput(config, _form, _renderer, _elementRef, _app, _platform, _scrollView, _nav, isFloating, isStacked, isFixed, isInset) {\n                    _classCallCheck(this, TextInput);\n\n                    this._form = _form;\n                    this._renderer = _renderer;\n                    this._elementRef = _elementRef;\n                    this._app = _app;\n                    this._platform = _platform;\n                    this._scrollView = _scrollView;\n                    this._nav = _nav;\n                    this.value = '';\n                    _form.register(this);\n                    this.type = 'text';\n                    this.lastTouch = 0;\n                    // make more gud with pending @Attributes API\n                    this.displayType = isFloating === '' ? 'floating' : isStacked === '' ? 'stacked' : isFixed === '' ? 'fixed' : isInset === '' ? 'inset' : null;\n                    this._assist = config.get('scrollAssist');\n                    this.keyboardHeight = config.get('keyboardHeight');\n                }\n\n                /**\n                 * @private\n                 */\n\n                _createClass(TextInput, [{\n                    key: \"ngOnInit\",\n\n                    /**\n                     * @private\n                     * On Initialization check for attributes\n                     */\n                    value: function ngOnInit() {\n                        var clearInput = this.clearInput;\n                        if (typeof clearInput === 'string') {\n                            this.clearInput = clearInput === '' || clearInput === 'true';\n                        }\n                    }\n\n                    /**\n                     * @private\n                     */\n                }, {\n                    key: \"ngAfterViewInit\",\n                    value: function ngAfterViewInit() {\n                        var self = this;\n                        if (self.input && self.label) {\n                            // if there is an input and a label\n                            // then give the label an ID\n                            // and tell the input the ID of who it's labelled by\n                            self.input.labelledBy(self.label.id);\n                        }\n                        self.scrollMove = function (ev) {\n                            if (!(self._nav && self._nav.isTransitioning())) {\n                                self.deregMove();\n                                if (self.hasFocus()) {\n                                    self.input.hideFocus(true);\n                                    self._scrollView.onScrollEnd(function () {\n                                        self.input.hideFocus(false);\n                                        if (self.hasFocus()) {\n                                            self.regMove();\n                                        }\n                                    });\n                                }\n                            }\n                        };\n                    }\n\n                    /**\n                      * @private\n                     */\n                }, {\n                    key: \"clearTextInput\",\n                    value: function clearTextInput() {\n                        console.log(\"Should clear input\");\n                        console.log(this.textInputElement.value);\n                    }\n\n                    /**\n                     * @private\n                     */\n                }, {\n                    key: \"pointerStart\",\n                    value: function pointerStart(ev) {\n                        if (this._assist && this._app.isEnabled()) {\n                            // remember where the touchstart/mousedown started\n                            this.startCoord = pointerCoord(ev);\n                        }\n                    }\n\n                    /**\n                     * @private\n                     */\n                }, {\n                    key: \"pointerEnd\",\n                    value: function pointerEnd(ev) {\n                        if (!this._app.isEnabled()) {\n                            ev.preventDefault();\n                            ev.stopPropagation();\n                        } else if (this._assist && ev.type === 'touchend') {\n                            // get where the touchend/mouseup ended\n                            var endCoord = pointerCoord(ev);\n                            // focus this input if the pointer hasn't moved XX pixels\n                            // and the input doesn't already have focus\n                            if (!hasPointerMoved(8, this.startCoord, endCoord) && !this.hasFocus()) {\n                                ev.preventDefault();\n                                ev.stopPropagation();\n                                this.initFocus();\n                                // temporarily prevent mouseup's from focusing\n                                this.lastTouch = Date.now();\n                            }\n                        } else if (this.lastTouch + 999 < Date.now()) {\n                            ev.preventDefault();\n                            ev.stopPropagation();\n                            this.setFocus();\n                            this.regMove();\n                        }\n                    }\n\n                    /**\n                     * @private\n                     */\n                }, {\n                    key: \"initFocus\",\n                    value: function initFocus() {\n                        var _this = this;\n\n                        // begin the process of setting focus to the inner input element\n                        var scrollView = this._scrollView;\n                        if (scrollView && this._assist) {\n                            // this input is inside of a scroll view\n                            // find out if text input should be manually scrolled into view\n                            var ele = this._elementRef.nativeElement;\n                            var scrollData = _TextInput.getScrollData(ele.offsetTop, ele.offsetHeight, scrollView.getDimensions(), this.keyboardHeight, this._platform.height());\n                            if (scrollData.scrollAmount > -3 && scrollData.scrollAmount < 3) {\n                                // the text input is in a safe position that doesn't require\n                                // it to be scrolled into view, just set focus now\n                                this.setFocus();\n                                this.regMove();\n                                return;\n                            }\n                            // add padding to the bottom of the scroll view (if needed)\n                            scrollView.addScrollPadding(scrollData.scrollPadding);\n                            // manually scroll the text input to the top\n                            // do not allow any clicks while it's scrolling\n                            var scrollDuration = getScrollAssistDuration(scrollData.scrollAmount);\n                            this._app.setEnabled(false, scrollDuration);\n                            this._nav && this._nav.setTransitioning(true, scrollDuration);\n                            // temporarily move the focus to the focus holder so the browser\n                            // doesn't freak out while it's trying to get the input in place\n                            // at this point the native text input still does not have focus\n                            this.input.relocate(true, scrollData.inputSafeY);\n                            // scroll the input into place\n                            scrollView.scrollTo(0, scrollData.scrollTo, scrollDuration).then(function () {\n                                // the scroll view is in the correct position now\n                                // give the native text input focus\n                                _this.input.relocate(false);\n                                // all good, allow clicks again\n                                _this._app.setEnabled(true);\n                                _this._nav && _this._nav.setTransitioning(false);\n                                _this.regMove();\n                            });\n                        } else {\n                            // not inside of a scroll view, just focus it\n                            this.setFocus();\n                            this.regMove();\n                        }\n                    }\n\n                    /**\n                     * @private\n                     */\n                }, {\n                    key: \"setFocus\",\n                    value: function setFocus() {\n                        if (this.input) {\n                            this._form.setAsFocused(this);\n                            // set focus on the actual input element\n                            this.input.setFocus();\n                            // ensure the body hasn't scrolled down\n                            document.body.scrollTop = 0;\n                        }\n                    }\n\n                    /**\n                     * @private\n                     */\n                }, {\n                    key: \"regMove\",\n                    value: function regMove() {\n                        var _this2 = this;\n\n                        if (this._assist && this._scrollView) {\n                            setTimeout(function () {\n                                _this2.deregMove();\n                                _this2.deregScroll = _this2._scrollView.addScrollEventListener(_this2.scrollMove);\n                            }, 80);\n                        }\n                    }\n\n                    /**\n                     * @private\n                     */\n                }, {\n                    key: \"deregMove\",\n                    value: function deregMove() {\n                        this.deregScroll && this.deregScroll();\n                    }\n\n                    /**\n                     * @private\n                     */\n                }, {\n                    key: \"focusChange\",\n                    value: function focusChange(hasFocus) {\n                        this._renderer.setElementClass(this._elementRef, 'input-focused', hasFocus);\n                        if (!hasFocus) {\n                            this.deregMove();\n                        }\n                    }\n\n                    /**\n                     * @private\n                     */\n                }, {\n                    key: \"hasFocus\",\n                    value: function hasFocus() {\n                        return !!this.input && this.input.hasFocus();\n                    }\n\n                    /**\n                     * @private\n                     */\n                }, {\n                    key: \"hasValue\",\n                    value: function hasValue(inputValue) {\n                        var inputHasValue = !!(inputValue && inputValue !== '');\n                        this._renderer.setElementClass(this._elementRef, 'input-has-value', inputHasValue);\n                    }\n\n                    /**\n                     * @private\n                     * This function is used to add the Angular css classes associated with inputs in forms\n                     */\n                }, {\n                    key: \"hasClass\",\n                    value: function hasClass(className) {\n                        this.input && this.input.hasClass(className);\n                    }\n\n                    /**\n                     * @private\n                     */\n                }, {\n                    key: \"ngOnDestroy\",\n                    value: function ngOnDestroy() {\n                        this.deregMove();\n                        this._form.deregister(this);\n                    }\n\n                    /**\n                     * @private\n                     */\n                }, {\n                    key: \"_setInput\",\n                    set: function set(textInputElement) {\n                        var _this3 = this;\n\n                        if (textInputElement) {\n                            textInputElement.addClass('item-input');\n                            if (this.displayType) {\n                                textInputElement.addClass(this.displayType + '-input');\n                            }\n                            this.input = textInputElement;\n                            this.type = textInputElement.type;\n                            this.hasValue(this.input.value);\n                            textInputElement.valueChange.subscribe(function (inputValue) {\n                                _this3.hasValue(inputValue);\n                            });\n                            this.focusChange(this.hasFocus());\n                            textInputElement.focusChange.subscribe(function (hasFocus) {\n                                _this3.focusChange(hasFocus);\n                            });\n                        } else {\n                            console.error('<input> or <textarea> elements required within <ion-input>');\n                        }\n                    }\n\n                    /**\n                     * @private\n                     */\n                }, {\n                    key: \"_setLabel\",\n                    set: function set(label) {\n                        if (label && this.displayType) {\n                            label.addClass(this.displayType + '-label');\n                        }\n                        this.label = label;\n                    }\n\n                    /**\n                     * @private\n                     */\n                }, {\n                    key: \"_buttons\",\n                    set: function set(buttons) {\n                        buttons.toArray().forEach(function (button) {\n                            if (!button.isItem) {\n                                button.addClass('item-button');\n                            }\n                        });\n                    }\n\n                    /**\n                     * @private\n                     */\n                }, {\n                    key: \"_icons\",\n                    set: function set(icons) {\n                        icons.toArray().forEach(function (icon) {\n                            icon.addClass('item-icon');\n                        });\n                    }\n                }], [{\n                    key: \"getScrollData\",\n                    value: function getScrollData(inputOffsetTop, inputOffsetHeight, scrollViewDimensions, keyboardHeight, plaformHeight) {\n                        // compute input's Y values relative to the body\n                        var inputTop = inputOffsetTop + scrollViewDimensions.contentTop - scrollViewDimensions.scrollTop;\n                        var inputBottom = inputTop + inputOffsetHeight;\n                        // compute the safe area which is the viewable content area when the soft keyboard is up\n                        var safeAreaTop = scrollViewDimensions.contentTop;\n                        var safeAreaHeight = plaformHeight - keyboardHeight - safeAreaTop;\n                        safeAreaHeight /= 2;\n                        var safeAreaBottom = safeAreaTop + safeAreaHeight;\n                        var inputTopWithinSafeArea = inputTop >= safeAreaTop && inputTop <= safeAreaBottom;\n                        var inputTopAboveSafeArea = inputTop < safeAreaTop;\n                        var inputTopBelowSafeArea = inputTop > safeAreaBottom;\n                        var inputBottomWithinSafeArea = inputBottom >= safeAreaTop && inputBottom <= safeAreaBottom;\n                        var inputBottomBelowSafeArea = inputBottom > safeAreaBottom;\n                        /*\n                        Text Input Scroll To Scenarios\n                        ---------------------------------------\n                        1) Input top within safe area, bottom within safe area\n                        2) Input top within safe area, bottom below safe area, room to scroll\n                        3) Input top above safe area, bottom within safe area, room to scroll\n                        4) Input top below safe area, no room to scroll, input smaller than safe area\n                        5) Input top within safe area, bottom below safe area, no room to scroll, input smaller than safe area\n                        6) Input top within safe area, bottom below safe area, no room to scroll, input larger than safe area\n                        7) Input top below safe area, no room to scroll, input larger than safe area\n                        */\n                        var scrollData = {\n                            scrollAmount: 0,\n                            scrollTo: 0,\n                            scrollPadding: 0,\n                            inputSafeY: 0\n                        };\n                        if (inputTopWithinSafeArea && inputBottomWithinSafeArea) {\n                            // Input top within safe area, bottom within safe area\n                            // no need to scroll to a position, it's good as-is\n                            return scrollData;\n                        }\n                        // looks like we'll have to do some auto-scrolling\n                        if (inputTopBelowSafeArea || inputBottomBelowSafeArea) {\n                            // Input top and bottom below safe area\n                            // auto scroll the input up so at least the top of it shows\n                            if (safeAreaHeight > inputOffsetHeight) {\n                                // safe area height is taller than the input height, so we\n                                // can bring it up the input just enough to show the input bottom\n                                scrollData.scrollAmount = Math.round(safeAreaBottom - inputBottom);\n                            } else {\n                                // safe area height is smaller than the input height, so we can\n                                // only scroll it up so the input top is at the top of the safe area\n                                // however the input bottom will be below the safe area\n                                scrollData.scrollAmount = Math.round(safeAreaTop - inputTop);\n                            }\n                            scrollData.inputSafeY = -(inputTop - safeAreaTop) + 4;\n                        } else if (inputTopAboveSafeArea) {\n                            // Input top above safe area\n                            // auto scroll the input down so at least the top of it shows\n                            scrollData.scrollAmount = Math.round(safeAreaTop - inputTop);\n                            scrollData.inputSafeY = safeAreaTop - inputTop + 4;\n                        }\n                        // figure out where it should scroll to for the best position to the input\n                        scrollData.scrollTo = scrollViewDimensions.scrollTop - scrollData.scrollAmount;\n                        if (scrollData.scrollAmount < 0) {\n                            // when auto-scrolling up, there also needs to be enough\n                            // content padding at the bottom of the scroll view\n                            // manually add it if there isn't enough scrollable area\n                            // figure out how many scrollable area is left to scroll up\n                            var availablePadding = scrollViewDimensions.scrollHeight - scrollViewDimensions.scrollTop - scrollViewDimensions.contentHeight;\n                            var paddingSpace = availablePadding + scrollData.scrollAmount;\n                            if (paddingSpace < 0) {\n                                // there's not enough scrollable area at the bottom, so manually add more\n                                scrollData.scrollPadding = scrollViewDimensions.contentHeight - safeAreaHeight;\n                            }\n                        }\n                        // if (!window.safeAreaEle) {\n                        //   window.safeAreaEle = document.createElement('div');\n                        //   window.safeAreaEle.style.position = 'absolute';\n                        //   window.safeAreaEle.style.background = 'rgba(0, 128, 0, 0.7)';\n                        //   window.safeAreaEle.style.padding = '2px 5px';\n                        //   window.safeAreaEle.style.textShadow = '1px 1px white';\n                        //   window.safeAreaEle.style.left = '0px';\n                        //   window.safeAreaEle.style.right = '0px';\n                        //   window.safeAreaEle.style.fontWeight = 'bold';\n                        //   window.safeAreaEle.style.pointerEvents = 'none';\n                        //   document.body.appendChild(window.safeAreaEle);\n                        // }\n                        // window.safeAreaEle.style.top = safeAreaTop + 'px';\n                        // window.safeAreaEle.style.height = safeAreaHeight + 'px';\n                        // window.safeAreaEle.innerHTML = `\n                        //   <div>scrollTo: ${scrollData.scrollTo}</div>\n                        //   <div>scrollAmount: ${scrollData.scrollAmount}</div>\n                        //   <div>scrollPadding: ${scrollData.scrollPadding}</div>\n                        //   <div>inputSafeY: ${scrollData.inputSafeY}</div>\n                        //   <div>scrollHeight: ${scrollViewDimensions.scrollHeight}</div>\n                        //   <div>scrollTop: ${scrollViewDimensions.scrollTop}</div>\n                        //   <div>contentHeight: ${scrollViewDimensions.contentHeight}</div>\n                        // `;\n                        return scrollData;\n                    }\n                }]);\n\n                return TextInput;\n            })();\n\n            _export(\"TextInput\", _TextInput);\n\n            __decorate([Input(), __metadata('design:type', Object)], _TextInput.prototype, \"clearInput\", void 0);\n            __decorate([ContentChild(TextInputElement), __metadata('design:type', Object), __metadata('design:paramtypes', [Object])], _TextInput.prototype, \"_setInput\", null);\n            __decorate([ContentChild(Label), __metadata('design:type', Object), __metadata('design:paramtypes', [Object])], _TextInput.prototype, \"_setLabel\", null);\n            __decorate([ContentChildren(Button), __metadata('design:type', Object), __metadata('design:paramtypes', [Object])], _TextInput.prototype, \"_buttons\", null);\n            __decorate([ContentChildren(Icon), __metadata('design:type', Object), __metadata('design:paramtypes', [Object])], _TextInput.prototype, \"_icons\", null);\n            _TextInput = __decorate([Component({\n                selector: 'ion-input',\n                host: {\n                    '(touchstart)': 'pointerStart($event)',\n                    '(touchend)': 'pointerEnd($event)',\n                    '(mouseup)': 'pointerEnd($event)',\n                    'class': 'item',\n                    '[class.ng-untouched]': 'hasClass(\"ng-untouched\")',\n                    '[class.ng-touched]': 'hasClass(\"ng-touched\")',\n                    '[class.ng-pristine]': 'hasClass(\"ng-pristine\")',\n                    '[class.ng-dirty]': 'hasClass(\"ng-dirty\")',\n                    '[class.ng-valid]': 'hasClass(\"ng-valid\")',\n                    '[class.ng-invalid]': 'hasClass(\"ng-invalid\")'\n                },\n                template: '<div class=\"item-inner\">' + '<ng-content></ng-content>' + '<input [type]=\"type\" aria-hidden=\"true\" scroll-assist *ngIf=\"_assist\">' + '<button clear *ngIf=\"clearInput && value\" class=\"text-input-clear-icon\" (click)=\"clearTextInput()\" (mousedown)=\"clearTextInput()\"></button>' + '</div>',\n                directives: [NgIf, forwardRef(function () {\n                    return InputScrollAssist;\n                }), forwardRef(function () {\n                    return TextInputElement;\n                }), Button]\n            }), __param(6, Optional()), __param(6, Host()), __param(7, Optional()), __param(8, Attribute('floating-label')), __param(9, Attribute('stacked-label')), __param(10, Attribute('fixed-label')), __param(11, Attribute('inset')), __metadata('design:paramtypes', [typeof (_e = typeof Config !== 'undefined' && Config) === 'function' && _e || Object, typeof (_f = typeof Form !== 'undefined' && Form) === 'function' && _f || Object, typeof (_g = typeof Renderer !== 'undefined' && Renderer) === 'function' && _g || Object, typeof (_h = typeof ElementRef !== 'undefined' && ElementRef) === 'function' && _h || Object, typeof (_j = typeof IonicApp !== 'undefined' && IonicApp) === 'function' && _j || Object, typeof (_k = typeof Platform !== 'undefined' && Platform) === 'function' && _k || Object, typeof (_l = typeof Content !== 'undefined' && Content) === 'function' && _l || Object, typeof (_m = typeof NavController !== 'undefined' && NavController) === 'function' && _m || Object, String, String, String, String])], _TextInput);\n            /**\n             * @private\n             */\n\n            InputScrollAssist = (function () {\n                function InputScrollAssist(_form, _input) {\n                    _classCallCheck(this, InputScrollAssist);\n\n                    this._form = _form;\n                    this._input = _input;\n                }\n\n                _createClass(InputScrollAssist, [{\n                    key: \"receivedFocus\",\n                    value: function receivedFocus() {\n                        this._form.focusNext(this._input);\n                    }\n                }]);\n\n                return InputScrollAssist;\n            })();\n\n            __decorate([HostListener('focus'), __metadata('design:type', Function), __metadata('design:paramtypes', []), __metadata('design:returntype', void 0)], InputScrollAssist.prototype, \"receivedFocus\", null);\n            InputScrollAssist = __decorate([Directive({\n                selector: '[scroll-assist]'\n            }), __metadata('design:paramtypes', [typeof (_o = typeof Form !== 'undefined' && Form) === 'function' && _o || Object, _TextInput])], InputScrollAssist);SCROLL_ASSIST_SPEED = 0.4;\n        }\n    };\n});\nSystem.register(\"ionic/components/toggle/toggle\", [\"angular2/core\", \"angular2/common\", \"../../util/form\", \"../../config/config\", \"../../util/dom\"], function (_export) {\n    /**\n     * @name Toggle\n     * @description\n     * A toggle technically is the same thing as an HTML checkbox input, except it looks different and is easier to use on a touch device. Ionic prefers to wrap the checkbox input with the `<label>` in order to make the entire toggle easy to tap or drag.\n     * Togglees can also have colors assigned to them, by adding any color attribute to them.\n     *\n     * See the [Angular 2 Docs](https://angular.io/docs/js/latest/api/forms/) for more info on forms and input.\n     * @property {any} [value] - the inital value of the toggle\n     * @property {boolean} [checked] - whether the toggle it toggled or not\n     * @property {boolean} [disabled] - whether the toggle is disabled or not\n     * @property {string} [id] - a unique ID for a toggle\n     * @usage\n     * ```html\n     * <!-- Create a single toggle -->\n     *  <ion-toggle checked=\"true\">\n     *    Pineapple\n     *  </ion-toggle>\n     *\n     * <!-- Create a list of togglees -->\n     *  <ion-list>\n     *\n     *    <ion-toggle checked=\"true\">\n     *      Apple\n     *    </ion-toggle>\n     *\n     *     <ion-toggle checked=\"false\">\n     *       Banana\n     *     </ion-toggle>\n     *\n     *     <ion-toggle disabled=\"true\">\n     *       Cherry\n     *     </ion-toggle>\n     *\n     *  </ion-list>\n     * ```\n     * @demo /docs/v3/demos/toggle/\n     * @see {@link /docs/v3/components#toggle Toggle Component Docs}\n     */\n    \"use strict\";\n\n    var Component, ElementRef, Renderer, Input, Optional, NgControl, Form, Config, pointerCoord, __decorate, __metadata, __param, Toggle, _a, _b, _c, _d, _e;\n\n    var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();\n\n    function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n    return {\n        setters: [function (_angular2Core) {\n            Component = _angular2Core.Component;\n            ElementRef = _angular2Core.ElementRef;\n            Renderer = _angular2Core.Renderer;\n            Input = _angular2Core.Input;\n            Optional = _angular2Core.Optional;\n        }, function (_angular2Common) {\n            NgControl = _angular2Common.NgControl;\n        }, function (_utilForm) {\n            Form = _utilForm.Form;\n        }, function (_configConfig) {\n            Config = _configConfig.Config;\n        }, function (_utilDom) {\n            pointerCoord = _utilDom.pointerCoord;\n        }],\n        execute: function () {\n            __decorate = undefined && undefined.__decorate || function (decorators, target, key, desc) {\n                var c = arguments.length,\n                    r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc,\n                    d;\n                if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n                return c > 3 && r && Object.defineProperty(target, key, r), r;\n            };\n\n            __metadata = undefined && undefined.__metadata || function (k, v) {\n                if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n            };\n\n            __param = undefined && undefined.__param || function (paramIndex, decorator) {\n                return function (target, key) {\n                    decorator(target, key, paramIndex);\n                };\n            };\n\n            Toggle = (function () {\n                function Toggle(_form, _elementRef, _renderer, config, ngControl) {\n                    _classCallCheck(this, Toggle);\n\n                    this._form = _form;\n                    this._elementRef = _elementRef;\n                    this._renderer = _renderer;\n                    this.value = '';\n                    this.checked = false;\n                    this.disabled = false;\n                    // deprecated warning\n                    if (_elementRef.nativeElement.tagName == 'ION-SWITCH') {\n                        console.warn('<ion-switch> has been renamed to <ion-toggle>, please update your HTML');\n                    }\n                    _form.register(this);\n                    this.lastTouch = 0;\n                    this.mode = config.get('mode');\n                    if (ngControl) {\n                        ngControl.valueAccessor = this;\n                    }\n                    var self = this;\n                    function pointerMove(ev) {\n                        var currentX = pointerCoord(ev).x;\n                        if (self.checked) {\n                            if (currentX + 15 < self.startX) {\n                                self.toggle();\n                                self.startX = currentX;\n                            }\n                        } else if (currentX - 15 > self.startX) {\n                            self.toggle();\n                            self.startX = currentX;\n                        }\n                    }\n                    function pointerOut(ev) {\n                        if (ev.currentTarget === ev.target) {\n                            self.pointerUp(ev);\n                        }\n                    }\n                    var toggleEle = _elementRef.nativeElement.querySelector('.toggle-media');\n                    this.addMoveListener = function () {\n                        toggleEle.addEventListener('touchmove', pointerMove);\n                        toggleEle.addEventListener('mousemove', pointerMove);\n                        _elementRef.nativeElement.addEventListener('mouseout', pointerOut);\n                    };\n                    this.removeMoveListener = function () {\n                        toggleEle.removeEventListener('touchmove', pointerMove);\n                        toggleEle.removeEventListener('mousemove', pointerMove);\n                        _elementRef.nativeElement.removeEventListener('mouseout', pointerOut);\n                    };\n                }\n\n                /**\n                 * @private\n                 */\n\n                _createClass(Toggle, [{\n                    key: \"ngOnInit\",\n                    value: function ngOnInit() {\n                        if (!this.id) {\n                            this.id = 'tgl-' + this._form.nextId();\n                            this._renderer.setElementAttribute(this._elementRef, 'id', this.id);\n                        }\n                        this.labelId = 'lbl-' + this.id;\n                        this._renderer.setElementAttribute(this._elementRef, 'aria-labelledby', this.labelId);\n                    }\n\n                    /**\n                     * Toggle the checked state of this toggle.\n                     */\n                }, {\n                    key: \"toggle\",\n                    value: function toggle() {\n                        this.checked = !this.checked;\n                    }\n                }, {\n                    key: \"pointerDown\",\n\n                    /**\n                     * @private\n                     */\n                    value: function pointerDown(ev) {\n                        if (/touch/.test(ev.type)) {\n                            this.lastTouch = Date.now();\n                        }\n                        if (this.isDisabled(ev)) return;\n                        this.startX = pointerCoord(ev).x;\n                        this.removeMoveListener();\n                        this.addMoveListener();\n                        this.isActivated = true;\n                    }\n\n                    /**\n                     * @private\n                     */\n                }, {\n                    key: \"pointerUp\",\n                    value: function pointerUp(ev) {\n                        if (this.isDisabled(ev)) return;\n                        var endX = pointerCoord(ev).x;\n                        if (this.checked) {\n                            if (this.startX + 4 > endX) {\n                                this.toggle(ev);\n                            }\n                        } else if (this.startX - 4 < endX) {\n                            this.toggle(ev);\n                        }\n                        this.removeMoveListener();\n                        this.isActivated = false;\n                    }\n\n                    /**\n                     * @private\n                     */\n                }, {\n                    key: \"writeValue\",\n                    value: function writeValue(value) {\n                        this.checked = value;\n                    }\n\n                    /**\n                     * @private\n                     */\n                }, {\n                    key: \"onChange\",\n                    value: function onChange(val) {}\n                    // TODO: figure the whys and the becauses\n\n                    /**\n                     * @private\n                     */\n\n                }, {\n                    key: \"onTouched\",\n                    value: function onTouched(val) {}\n                    // TODO: figure the whys and the becauses\n\n                    /**\n                     * @private\n                     */\n\n                }, {\n                    key: \"registerOnChange\",\n                    value: function registerOnChange(fn) {\n                        this.onChange = fn;\n                    }\n\n                    /**\n                     * @private\n                     */\n                }, {\n                    key: \"registerOnTouched\",\n                    value: function registerOnTouched(fn) {\n                        this.onTouched = fn;\n                    }\n\n                    /**\n                     * @private\n                     */\n                }, {\n                    key: \"ngOnDestroy\",\n                    value: function ngOnDestroy() {\n                        this.removeMoveListener();\n                        this.toggleEle = this.addMoveListener = this.removeMoveListener = null;\n                        this._form.deregister(this);\n                    }\n\n                    /**\n                     * @private\n                     */\n                }, {\n                    key: \"isDisabled\",\n                    value: function isDisabled(ev) {\n                        return this.lastTouch + 999 > Date.now() && /mouse/.test(ev.type) || this.mode == 'ios' && ev.target.tagName == 'ION-TOGGLE';\n                    }\n\n                    /**\n                     * @private\n                     */\n                }, {\n                    key: \"initFocus\",\n                    value: function initFocus() {}\n                }, {\n                    key: \"checked\",\n                    get: function get() {\n                        return !!this._checked;\n                    },\n                    set: function set(val) {\n                        this._checked = !!val;\n                        this._renderer.setElementAttribute(this._elementRef, 'aria-checked', this._checked);\n                        this.onChange(this._checked);\n                    }\n                }]);\n\n                return Toggle;\n            })();\n\n            _export(\"Toggle\", Toggle);\n\n            __decorate([Input(), __metadata('design:type', String)], Toggle.prototype, \"value\", void 0);\n            __decorate([Input(), __metadata('design:type', Object)], Toggle.prototype, \"checked\", void 0);\n            __decorate([Input(), __metadata('design:type', Boolean)], Toggle.prototype, \"disabled\", void 0);\n            __decorate([Input(), __metadata('design:type', String)], Toggle.prototype, \"id\", void 0);\n            _export(\"Toggle\", Toggle = __decorate([Component({\n                selector: 'ion-toggle,ion-switch',\n                host: {\n                    'role': 'checkbox',\n                    'class': 'item',\n                    'tappable': '',\n                    'tabindex': 0,\n                    '[attr.aria-disabled]': 'disabled',\n                    '(touchstart)': 'pointerDown($event)',\n                    '(mousedown)': 'pointerDown($event)',\n                    '(touchend)': 'pointerUp($event)',\n                    '(mouseup)': 'pointerUp($event)'\n                },\n                template: '<ng-content select=\"[item-left]\"></ng-content>' + '<div class=\"item-inner\">' + '<ion-item-content id=\"{{labelId}}\">' + '<ng-content></ng-content>' + '</ion-item-content>' + '<div class=\"toggle-media\" [class.toggle-activated]=\"isActivated\" disable-activated>' + '<div class=\"toggle-icon\"></div>' + '</div>' + \"</div>\"\n            }), __param(4, Optional()), __metadata('design:paramtypes', [typeof (_a = typeof Form !== 'undefined' && Form) === 'function' && _a || Object, typeof (_b = typeof ElementRef !== 'undefined' && ElementRef) === 'function' && _b || Object, typeof (_c = typeof Renderer !== 'undefined' && Renderer) === 'function' && _c || Object, typeof (_d = typeof Config !== 'undefined' && Config) === 'function' && _d || Object, typeof (_e = typeof NgControl !== 'undefined' && NgControl) === 'function' && _e || Object])], Toggle));\n        }\n    };\n});\nSystem.register(\"ionic/components/toolbar/toolbar\", [\"angular2/core\", \"../ion\", \"../../config/config\", \"../navbar/navbar\", \"../button/button\"], function (_export) {\n    /**\n     * @private\n     */\n    \"use strict\";\n\n    var Component, Directive, ElementRef, Optional, forwardRef, Inject, ContentChildren, Ion, Config, Navbar, Button, __decorate, __metadata, __param, ToolbarBase, Toolbar, ToolbarTitle, ToolbarItem, _a, _b, _c, _d, _e, _f;\n\n    var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();\n\n    var _get = function get(_x, _x2, _x3) { var _again = true; _function: while (_again) { var object = _x, property = _x2, receiver = _x3; _again = false; if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { _x = parent; _x2 = property; _x3 = receiver; _again = true; desc = parent = undefined; continue _function; } } else if (\"value\" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } } };\n\n    function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n    function _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\n    return {\n        setters: [function (_angular2Core) {\n            Component = _angular2Core.Component;\n            Directive = _angular2Core.Directive;\n            ElementRef = _angular2Core.ElementRef;\n            Optional = _angular2Core.Optional;\n            forwardRef = _angular2Core.forwardRef;\n            Inject = _angular2Core.Inject;\n            ContentChildren = _angular2Core.ContentChildren;\n        }, function (_ion) {\n            Ion = _ion.Ion;\n        }, function (_configConfig) {\n            Config = _configConfig.Config;\n        }, function (_navbarNavbar) {\n            Navbar = _navbarNavbar.Navbar;\n        }, function (_buttonButton) {\n            Button = _buttonButton.Button;\n        }],\n        execute: function () {\n            __decorate = undefined && undefined.__decorate || function (decorators, target, key, desc) {\n                var c = arguments.length,\n                    r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc,\n                    d;\n                if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n                return c > 3 && r && Object.defineProperty(target, key, r), r;\n            };\n\n            __metadata = undefined && undefined.__metadata || function (k, v) {\n                if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n            };\n\n            __param = undefined && undefined.__param || function (paramIndex, decorator) {\n                return function (target, key) {\n                    decorator(target, key, paramIndex);\n                };\n            };\n\n            ToolbarBase = (function (_Ion) {\n                _inherits(ToolbarBase, _Ion);\n\n                function ToolbarBase(elementRef, config) {\n                    _classCallCheck(this, ToolbarBase);\n\n                    _get(Object.getPrototypeOf(ToolbarBase.prototype), \"constructor\", this).call(this, elementRef, config);\n                    this.itemRefs = [];\n                    this.titleRef = null;\n                }\n\n                /**\n                 * @name Toolbar\n                 * @description\n                 * The toolbar is generic bar that sits above or below content.\n                 * Unlike an `Navbar`, `Toolbar` can be used for a subheader as well.\n                 * @usage\n                 * ```html\n                 * <ion-toolbar>\n                 *   <ion-title>My Toolbar Title</ion-title>\n                 * </ion-toolbar>\n                 *\n                 *  <ion-content></ion-content>\n                 *  ```\n                 * @demo /docs/v3/demos/toolbar/\n                 * @see {@link ../../navbar/Navbar/ Navbar API Docs}\n                 */\n\n                /**\n                 * @private\n                 */\n\n                _createClass(ToolbarBase, [{\n                    key: \"setTitleCmp\",\n                    value: function setTitleCmp(titleCmp) {\n                        this.titleCmp = titleCmp;\n                    }\n\n                    /**\n                     * @private\n                     * Returns the toolbar title text if it exists or an empty string\n                     */\n                }, {\n                    key: \"getTitleText\",\n                    value: function getTitleText() {\n                        return this.titleCmp && this.titleCmp.getTitleText() || '';\n                    }\n\n                    /**\n                     * @private\n                     */\n                }, {\n                    key: \"getTitleRef\",\n                    value: function getTitleRef() {\n                        return this.titleCmp && this.titleCmp.elementRef;\n                    }\n\n                    /**\n                     * @private\n                     * A toolbar items include the left and right side `ion-buttons`,\n                     * and every `menu-toggle`. It does not include the `ion-title`.\n                     * @returns {TODO} Array of this toolbar's item ElementRefs.\n                     */\n                }, {\n                    key: \"getItemRefs\",\n                    value: function getItemRefs() {\n                        return this.itemRefs;\n                    }\n\n                    /**\n                     * @private\n                     */\n                }, {\n                    key: \"addItemRef\",\n                    value: function addItemRef(itemElementRef) {\n                        this.itemRefs.push(itemElementRef);\n                    }\n                }]);\n\n                return ToolbarBase;\n            })(Ion);\n\n            _export(\"ToolbarBase\", ToolbarBase);\n\n            Toolbar = (function (_ToolbarBase) {\n                _inherits(Toolbar, _ToolbarBase);\n\n                function Toolbar(elementRef, config) {\n                    _classCallCheck(this, Toolbar);\n\n                    _get(Object.getPrototypeOf(Toolbar.prototype), \"constructor\", this).call(this, elementRef, config);\n                }\n\n                return Toolbar;\n            })(ToolbarBase);\n\n            _export(\"Toolbar\", Toolbar);\n\n            _export(\"Toolbar\", Toolbar = __decorate([Component({\n                selector: 'ion-toolbar',\n                template: '<div class=\"toolbar-background\"></div>' + '<ng-content select=\"[menuToggle],ion-buttons[left]\"></ng-content>' + '<ng-content select=\"ion-buttons[start]\"></ng-content>' + '<ng-content select=\"ion-buttons[end],ion-buttons[right]\"></ng-content>' + '<div class=\"toolbar-content\">' + '<ng-content></ng-content>' + '</div>',\n                host: {\n                    'class': 'toolbar'\n                }\n            }), __metadata('design:paramtypes', [typeof (_a = typeof ElementRef !== 'undefined' && ElementRef) === 'function' && _a || Object, typeof (_b = typeof Config !== 'undefined' && Config) === 'function' && _b || Object])], Toolbar));\n            /**\n             * @name Title\n             * @description\n             * `ion-title` is a component that sets the title of the `Toolbar` or `Navbar`\n             * @usage\n             * ```html\n             * <ion-navbar *navbar>\n             *    <ion-title>Tab 1</ion-title>\n             * </ion-navbar>\n             *\n             *<!-- or if you wanted to create a subheader title-->\n             * <ion-navbar *navbar>\n             *    <ion-title>Tab 1</ion-title>\n             * </ion-navbar>\n             * <ion-toolbar>\n             *   <ion-title>SubHeader</ion-title>\n             * </ion-toolbar>\n             *  ```\n             * @demo /docs/v3/demos/toolbar/\n             */\n\n            ToolbarTitle = (function (_Ion2) {\n                _inherits(ToolbarTitle, _Ion2);\n\n                function ToolbarTitle(elementRef, toolbar, navbar) {\n                    _classCallCheck(this, ToolbarTitle);\n\n                    _get(Object.getPrototypeOf(ToolbarTitle.prototype), \"constructor\", this).call(this, elementRef, null);\n                    toolbar && toolbar.setTitleCmp(this);\n                    navbar && navbar.setTitleCmp(this);\n                }\n\n                /**\n                 * @private\n                 */\n\n                _createClass(ToolbarTitle, [{\n                    key: \"getTitleText\",\n                    value: function getTitleText() {\n                        return this.getNativeElement().textContent;\n                    }\n                }]);\n\n                return ToolbarTitle;\n            })(Ion);\n\n            _export(\"ToolbarTitle\", ToolbarTitle);\n\n            _export(\"ToolbarTitle\", ToolbarTitle = __decorate([Component({\n                selector: 'ion-title',\n                template: '<div class=\"toolbar-title\">' + '<ng-content></ng-content>' + '</div>'\n            }), __param(1, Optional()), __param(2, Optional()), __param(2, Inject(forwardRef(function () {\n                return Navbar;\n            }))), __metadata('design:paramtypes', [typeof (_c = typeof ElementRef !== 'undefined' && ElementRef) === 'function' && _c || Object, Toolbar, typeof (_d = typeof Navbar !== 'undefined' && Navbar) === 'function' && _d || Object])], ToolbarTitle));\n            /**\n             * @private\n             */\n\n            ToolbarItem = (function () {\n                function ToolbarItem(elementRef, toolbar, navbar) {\n                    _classCallCheck(this, ToolbarItem);\n\n                    toolbar && toolbar.addItemRef(elementRef);\n                    navbar && navbar.addItemRef(elementRef);\n                    this.inToolbar = !!(toolbar || navbar);\n                    // Deprecation warning\n                    if (elementRef.nativeElement.tagName === 'ION-NAV-ITEMS') {\n                        if (elementRef.nativeElement.hasAttribute('primary')) {\n                            console.warn('<ion-nav-items primary> has been renamed to <ion-buttons start>, please update your HTML');\n                            elementRef.nativeElement.setAttribute('start', '');\n                        } else if (elementRef.nativeElement.hasAttribute('secondary')) {\n                            console.warn('<ion-nav-items secondary> has been renamed to <ion-buttons end>, please update your HTML');\n                            elementRef.nativeElement.setAttribute('end', '');\n                        } else {\n                            console.warn('<ion-nav-items> has been renamed to <ion-buttons>, please update your HTML');\n                        }\n                    }\n                }\n\n                _createClass(ToolbarItem, [{\n                    key: \"_buttons\",\n                    set: function set(buttons) {\n                        if (this.inToolbar) {\n                            Button.setRoles(buttons, 'bar-button');\n                        }\n                    }\n                }]);\n\n                return ToolbarItem;\n            })();\n\n            _export(\"ToolbarItem\", ToolbarItem);\n\n            __decorate([ContentChildren(Button), __metadata('design:type', Object), __metadata('design:paramtypes', [Object])], ToolbarItem.prototype, \"_buttons\", null);\n            _export(\"ToolbarItem\", ToolbarItem = __decorate([Directive({\n                selector: 'ion-buttons,[menuToggle],ion-nav-items'\n            }), __param(1, Optional()), __param(2, Optional()), __param(2, Inject(forwardRef(function () {\n                return Navbar;\n            }))), __metadata('design:paramtypes', [typeof (_e = typeof ElementRef !== 'undefined' && ElementRef) === 'function' && _e || Object, Toolbar, typeof (_f = typeof Navbar !== 'undefined' && Navbar) === 'function' && _f || Object])], ToolbarItem));\n        }\n    };\n});\nSystem.register('ionic/config/test/config.spec', ['ionic/ionic'], function (_export) {\n    'use strict';\n\n    var Config, Platform, ionicProviders;\n\n    _export('run', run);\n\n    function run() {\n        it('should set activator setting to none for old Android Browser on a linux device', function () {\n            var config = new Config();\n            var platform = new Platform();\n            platform.userAgent('Mozilla/5.0 (Linux; U; Android 4.2.2; nl-nl; GT-I9505 Build/JDQ39) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30');\n            platform.navigatorPlatform('linux');\n            platform.load();\n            config.setPlatform(platform);\n            expect(config.get('activator')).toEqual('none');\n        });\n        it('should set activator setting to ripple for Android dev tools simulation on a mac', function () {\n            var config = new Config();\n            var platform = new Platform();\n            platform.userAgent('Mozilla/5.0 (Linux; U; Android 4.2.2; nl-nl; GT-I9505 Build/JDQ39) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30');\n            platform.navigatorPlatform('MacIntel');\n            platform.load();\n            config.setPlatform(platform);\n            expect(config.get('activator')).toEqual('ripple');\n        });\n        it('should set activator setting to none for Android Chrome versions below v36 on a linux device', function () {\n            var config = new Config();\n            var platform = new Platform();\n            platform.userAgent('Mozilla/5.0 (Linux; Android 4.2.2; GT-I9505 Build/JDQ39) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1650.59 Mobile Safari/537.36');\n            platform.navigatorPlatform('linux');\n            platform.load();\n            config.setPlatform(platform);\n            expect(config.get('activator')).toEqual('none');\n        });\n        it('should set activator setting to ripple for Android Chrome v36 and above on a linux device', function () {\n            var config = new Config();\n            var platform = new Platform();\n            platform.userAgent('Mozilla/5.0 (Linux; Android 4.2.2; GT-I9505 Build/JDQ39) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1650.59 Mobile Safari/537.36');\n            platform.navigatorPlatform('linux');\n            platform.load();\n            config.setPlatform(platform);\n            expect(config.get('activator')).toEqual('ripple');\n        });\n        it('should set activator setting to ripple for Android v5.0 and above on a linux device not using Chrome', function () {\n            var config = new Config();\n            var platform = new Platform();\n            platform.userAgent('Mozilla/5.0 (Android 5.0; Mobile; rv:41.0) Gecko/41.0 Firefox/41.0');\n            platform.navigatorPlatform('linux');\n            platform.load();\n            config.setPlatform(platform);\n            expect(config.get('activator')).toEqual('ripple');\n        });\n        it('should set activator setting to none for Android versions below v5.0 on a linux device not using Chrome', function () {\n            var config = new Config();\n            var platform = new Platform();\n            platform.userAgent('Mozilla/5.0 (Android 4.4; Mobile; rv:41.0) Gecko/41.0 Firefox/41.0');\n            platform.navigatorPlatform('linux');\n            platform.load();\n            config.setPlatform(platform);\n            expect(config.get('activator')).toEqual('none');\n        });\n        it('should create a new Config instace when no confg passed in ionicProviders', function () {\n            var providers = ionicProviders();\n            var config = providers.find(function (provider) {\n                return provider.useValue instanceof Config;\n            }).useValue;\n            expect(config.get('mode')).toEqual('ios');\n        });\n        it('should used passed in Config instance in ionicProviders', function () {\n            var userConfig = new Config({\n                mode: 'configInstance'\n            });\n            var providers = ionicProviders({ config: userConfig });\n            var config = providers.find(function (provider) {\n                return provider.useValue instanceof Config;\n            }).useValue;\n            expect(config.get('mode')).toEqual('configInstance');\n        });\n        it('should create new Config instance from config object in ionicProviders', function () {\n            var providers = ionicProviders({ config: {\n                    mode: 'configObj'\n                } });\n            var config = providers.find(function (provider) {\n                return provider.useValue instanceof Config;\n            }).useValue;\n            expect(config.get('mode')).toEqual('configObj');\n        });\n        it('should override mode settings', function () {\n            var config = new Config({\n                mode: 'md'\n            });\n            var platform = new Platform(['ios']);\n            config.setPlatform(platform);\n            expect(config.get('mode')).toEqual('md');\n            expect(config.get('tabbarPlacement')).toEqual('top');\n        });\n        it('should override mode settings from platforms setting', function () {\n            var config = new Config({\n                platforms: {\n                    ios: {\n                        mode: 'md'\n                    }\n                }\n            });\n            var platform = new Platform(['ios']);\n            config.setPlatform(platform);\n            expect(config.get('mode')).toEqual('md');\n            expect(config.get('tabbarPlacement')).toEqual('top');\n        });\n        it('should get boolean value from querystring', function () {\n            var config = new Config();\n            var platform = new Platform();\n            platform.url('http://biff.com/?ionicanimate=true');\n            config.setPlatform(platform);\n            expect(config.get('animate')).toEqual(true);\n            config = new Config();\n            platform = new Platform();\n            platform.url('http://biff.com/?ionicanimate=false');\n            config.setPlatform(platform);\n            expect(config.get('animate')).toEqual(false);\n        });\n        it('should get value from case insensitive querystring key', function () {\n            var config = new Config({\n                mode: 'a'\n            });\n            var platform = new Platform();\n            platform.url('http://biff.com/?ionicConfigKey=b');\n            config.setPlatform(platform);\n            expect(config.get('configKey')).toEqual('b');\n        });\n        it('should get value from querystring', function () {\n            var config = new Config({\n                mode: 'modeA'\n            });\n            var platform = new Platform();\n            platform.url('http://biff.com/?ionicmode=modeB');\n            config.setPlatform(platform);\n            expect(config.get('mode')).toEqual('modeB');\n        });\n        it('should override mode platform', function () {\n            var config = new Config({\n                mode: 'modeA',\n                platforms: {\n                    mobile: {\n                        mode: 'modeB'\n                    },\n                    ios: {\n                        mode: 'modeC'\n                    }\n                }\n            });\n            var platform = new Platform(['mobile']);\n            config.setPlatform(platform);\n            expect(config.get('mode')).toEqual('modeB');\n        });\n        it('should override mode', function () {\n            var config = new Config({\n                mode: 'modeA'\n            });\n            var platform = new Platform(['core']);\n            config.setPlatform(platform);\n            expect(config.get('mode')).toEqual('modeA');\n        });\n        it('should get user settings after user platform settings', function () {\n            var config = new Config({\n                hoverCSS: true\n            });\n            var platform = new Platform(['ios']);\n            config.setPlatform(platform);\n            expect(config.get('hoverCSS')).toEqual(true);\n        });\n        it('should get ios mode for core platform', function () {\n            var config = new Config();\n            var platform = new Platform(['core']);\n            config.setPlatform(platform);\n            expect(config.get('mode')).toEqual('ios');\n        });\n        it('should get ios mode for ipad platform', function () {\n            var config = new Config();\n            var platform = new Platform(['mobile', 'ios', 'ipad', 'tablet']);\n            config.setPlatform(platform);\n            expect(config.get('mode')).toEqual('ios');\n        });\n        it('should get md mode for windowsphone platform', function () {\n            var config = new Config();\n            var platform = new Platform(['mobile', 'windowsphone']);\n            config.setPlatform(platform);\n            expect(config.get('mode')).toEqual('md');\n        });\n        it('should get md mode for android platform', function () {\n            var config = new Config();\n            var platform = new Platform(['mobile', 'android']);\n            config.setPlatform(platform);\n            expect(config.get('mode')).toEqual('md');\n        });\n        it('should override ios mode config with user platform setting', function () {\n            var config = new Config({\n                tabbarPlacement: 'hide',\n                platforms: {\n                    ios: {\n                        tabbarPlacement: 'top'\n                    }\n                }\n            });\n            var platform = new Platform(['ios']);\n            config.setPlatform(platform);\n            expect(config.get('tabbarPlacement')).toEqual('top');\n        });\n        it('should override ios mode config with user setting', function () {\n            var config = new Config({\n                tabbarPlacement: 'top'\n            });\n            var platform = new Platform(['ios']);\n            config.setPlatform(platform);\n            expect(config.get('tabbarPlacement')).toEqual('top');\n        });\n        it('should get setting from md mode', function () {\n            var config = new Config();\n            var platform = new Platform(['android']);\n            config.setPlatform(platform);\n            expect(config.get('tabbarPlacement')).toEqual('top');\n        });\n        it('should get setting from ios mode', function () {\n            var config = new Config();\n            var platform = new Platform(['ios']);\n            config.setPlatform(platform);\n            expect(config.get('tabbarPlacement')).toEqual('bottom');\n        });\n        it('should set/get platform setting from set()', function () {\n            var config = new Config();\n            var platform = new Platform(['ios']);\n            config.setPlatform(platform);\n            config.set('tabbarPlacement', 'bottom');\n            config.set('ios', 'tabbarPlacement', 'top');\n            expect(config.get('tabbarPlacement')).toEqual('top');\n        });\n        it('should set/get setting from set()', function () {\n            var config = new Config();\n            var platform = new Platform(['ios']);\n            config.setPlatform(platform);\n            config.set('tabbarPlacement', 'top');\n            expect(config.get('tabbarPlacement')).toEqual('top');\n        });\n        it('should set ios platform settings from settings()', function () {\n            var config = new Config();\n            var platform = new Platform(['ios']);\n            config.setPlatform(platform);\n            config.settings('ios', {\n                key: 'iosValue'\n            });\n            expect(config.get('key')).toEqual('iosValue');\n        });\n        it('should set/get mobile setting even w/ higher priority ios', function () {\n            var config = new Config();\n            var platform = new Platform(['mobile', 'ios']);\n            config.setPlatform(platform);\n            config.settings({\n                key: 'defaultValue',\n                platforms: {\n                    mobile: {\n                        key: 'mobileValue'\n                    }\n                }\n            });\n            expect(config.get('key')).toEqual('mobileValue');\n        });\n        it('should set/get mobile setting even w/ higher priority ios', function () {\n            var config = new Config();\n            var platform = new Platform(['mobile', 'ios']);\n            config.setPlatform(platform);\n            config.settings({\n                key: 'defaultValue',\n                platforms: {\n                    mobile: {\n                        key: 'mobileValue'\n                    }\n                }\n            });\n            expect(config.get('key')).toEqual('mobileValue');\n        });\n        it('should set/get android setting w/ higher priority than mobile', function () {\n            var config = new Config();\n            var platform = new Platform(['mobile', 'android']);\n            config.setPlatform(platform);\n            config.settings({\n                key: 'defaultValue',\n                platforms: {\n                    mobile: {\n                        key: 'mobileValue'\n                    },\n                    android: {\n                        key: 'androidValue'\n                    }\n                }\n            });\n            expect(config.get('key')).toEqual('androidValue');\n        });\n        it('should set/get ios setting w/ platforms set', function () {\n            var config = new Config();\n            var platform = new Platform(['ios']);\n            config.setPlatform(platform);\n            config.settings({\n                key: 'defaultValue',\n                platforms: {\n                    ios: {\n                        key: 'iosValue'\n                    },\n                    android: {\n                        key: 'androidValue'\n                    }\n                }\n            });\n            expect(config.get('key')).toEqual('iosValue');\n        });\n        it('should set/get default setting w/ platforms set, but no platform match', function () {\n            var config = new Config();\n            config.settings({\n                key: 'defaultValue',\n                platforms: {\n                    ios: {\n                        key: 'iosValue'\n                    },\n                    android: {\n                        key: 'androidValue'\n                    }\n                }\n            });\n            expect(config.get('key')).toEqual('defaultValue');\n        });\n        it('should set setting object', function () {\n            var config = new Config();\n            config.settings({\n                name: 'Doc Brown',\n                occupation: 'Weather Man'\n            });\n            expect(config.get('name')).toEqual('Doc Brown');\n            expect(config.get('name')).toEqual('Doc Brown');\n            expect(config.get('occupation')).toEqual('Weather Man');\n            expect(config.get('occupation')).toEqual('Weather Man');\n        });\n        it('should get null setting', function () {\n            var config = new Config();\n            expect(config.get('name')).toEqual(null);\n            expect(config.get('name')).toEqual(null);\n            expect(config.get('occupation')).toEqual(null);\n            expect(config.get('occupation')).toEqual(null);\n        });\n        it('should set/get single setting', function () {\n            var config = new Config();\n            config.set('name', 'Doc Brown');\n            config.set('occupation', 'Weather Man');\n            expect(config.get('name')).toEqual('Doc Brown');\n            expect(config.get('name')).toEqual('Doc Brown');\n            expect(config.get('occupation')).toEqual('Weather Man');\n            expect(config.get('occupation')).toEqual('Weather Man');\n        });\n        it('should init w/ given config settings', function () {\n            var config = new Config({\n                name: 'Doc Brown',\n                occupation: 'Weather Man'\n            });\n            expect(config.get('name')).toEqual('Doc Brown');\n            expect(config.get('occupation')).toEqual('Weather Man');\n        });\n        it('should get settings object', function () {\n            var config = new Config({\n                name: 'Doc Brown',\n                occupation: 'Weather Man'\n            });\n            expect(config.settings()).toEqual({\n                name: 'Doc Brown',\n                occupation: 'Weather Man'\n            });\n        });\n        it('should create default config w/ bad settings value', function () {\n            var config = new Config(null);\n            expect(config.settings()).toEqual({});\n            config = new Config(undefined);\n            expect(config.settings()).toEqual({});\n            config = new Config();\n            expect(config.settings()).toEqual({});\n            config = new Config([1, 2, 3]);\n            expect(config.settings()).toEqual({});\n            config = new Config('im bad, you know it');\n            expect(config.settings()).toEqual({});\n            config = new Config(8675309);\n            expect(config.settings()).toEqual({});\n            config = new Config(true);\n            expect(config.settings()).toEqual({});\n            config = new Config(false);\n            expect(config.settings()).toEqual({});\n            config = new Config(1);\n            expect(config.settings()).toEqual({});\n            config = new Config(function () {});\n            expect(config.settings()).toEqual({});\n        });\n    }\n\n    return {\n        setters: [function (_ionicIonic) {\n            Config = _ionicIonic.Config;\n            Platform = _ionicIonic.Platform;\n            ionicProviders = _ionicIonic.ionicProviders;\n        }],\n        execute: function () {}\n    };\n});\nSystem.register('ionic/platform/test/platform.spec', ['ionic/ionic'], function (_export) {\n    'use strict';\n\n    var Platform, ANDROID_UA, IPHONE_UA, IPAD_UA;\n\n    _export('run', run);\n\n    function run() {\n        it('should set core as the fallback', function () {\n            var platform = new Platform();\n            platform.userAgent('idk');\n            platform.load();\n            expect(platform.is('android')).toEqual(false);\n            expect(platform.is('ios')).toEqual(false);\n            expect(platform.is('core')).toEqual(true);\n        });\n        it('should set android via platformOverride, despite ios user agent', function () {\n            var platform = new Platform();\n            platform.userAgent(IPAD_UA);\n            platform.load('android');\n            expect(platform.is('android')).toEqual(true);\n            expect(platform.is('ios')).toEqual(false);\n        });\n        it('should get case insensitive querystring value', function () {\n            var platform = new Platform();\n            platform.url('/?KEY=value');\n            expect(platform.query('key')).toEqual('value');\n        });\n        it('should get querystring value', function () {\n            var platform = new Platform();\n            platform.url('/?key=value');\n            expect(platform.query('key')).toEqual('value');\n        });\n        it('should set ios via platformOverride, despite android querystring', function () {\n            var platform = new Platform();\n            platform.url('/?ionicplatform=android');\n            platform.load('ios');\n            expect(platform.is('android')).toEqual(false);\n            expect(platform.is('ios')).toEqual(true);\n        });\n        it('should set ios via platformOverride', function () {\n            var platform = new Platform();\n            platform.load('ios');\n            expect(platform.is('android')).toEqual(false);\n            expect(platform.is('ios')).toEqual(true);\n        });\n        it('should set android via platformOverride', function () {\n            var platform = new Platform();\n            platform.load('android');\n            expect(platform.is('android')).toEqual(true);\n            expect(platform.is('ios')).toEqual(false);\n        });\n        it('should set ios via querystring', function () {\n            var platform = new Platform();\n            platform.url('/?ionicplatform=ios');\n            platform.load();\n            expect(platform.is('mobile')).toEqual(true);\n            expect(platform.is('android')).toEqual(false);\n            expect(platform.is('ios')).toEqual(true);\n            expect(platform.is('tablet')).toEqual(false);\n        });\n        it('should set ios via querystring, even with android user agent', function () {\n            var platform = new Platform();\n            platform.url('/?ionicplatform=ios');\n            platform.userAgent(ANDROID_UA);\n            platform.load();\n            expect(platform.is('android')).toEqual(false);\n            expect(platform.is('ios')).toEqual(true);\n        });\n        it('should set android via querystring', function () {\n            var platform = new Platform();\n            platform.url('/?ionicplatform=android');\n            platform.load();\n            expect(platform.is('android')).toEqual(true);\n            expect(platform.is('ios')).toEqual(false);\n        });\n        it('should set android via querystring, even with ios user agent', function () {\n            var platform = new Platform();\n            platform.url('/?ionicplatform=android');\n            platform.userAgent(IPHONE_UA);\n            platform.load();\n            expect(platform.is('android')).toEqual(true);\n            expect(platform.is('ios')).toEqual(false);\n        });\n        it('should set android via user agent', function () {\n            var platform = new Platform();\n            platform.userAgent(ANDROID_UA);\n            platform.load();\n            expect(platform.is('mobile')).toEqual(true);\n            expect(platform.is('android')).toEqual(true);\n            expect(platform.is('ios')).toEqual(false);\n        });\n        it('should set iphone via user agent', function () {\n            var platform = new Platform();\n            platform.userAgent(IPHONE_UA);\n            platform.load();\n            expect(platform.is('mobile')).toEqual(true);\n            expect(platform.is('android')).toEqual(false);\n            expect(platform.is('ios')).toEqual(true);\n            expect(platform.is('iphone')).toEqual(true);\n            expect(platform.is('tablet')).toEqual(false);\n        });\n        it('should set ipad via user agent', function () {\n            var platform = new Platform();\n            platform.userAgent(IPAD_UA);\n            platform.load();\n            expect(platform.is('mobile')).toEqual(true);\n            expect(platform.is('android')).toEqual(false);\n            expect(platform.is('ios')).toEqual(true);\n            expect(platform.is('ipad')).toEqual(true);\n            expect(platform.is('tablet')).toEqual(true);\n        });\n    }\n\n    return {\n        setters: [function (_ionicIonic) {\n            Platform = _ionicIonic.Platform;\n        }],\n        execute: function () {\n            ANDROID_UA = 'Mozilla/5.0 (Linux; Android 5.1.1; Nexus 6 Build/LYZ28E) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.20 Mobile Safari/537.36';\n            IPHONE_UA = 'Mozilla/5.0 (iPhone; CPU iPhone OS 8_0 like Mac OS X) AppleWebKit/600.1.3 (KHTML, like Gecko) Version/8.0 Mobile/12A4345d Safari/600.1.4';\n            IPAD_UA = 'Mozilla/5.0 (iPad; CPU OS 7_0 like Mac OS X) AppleWebKit/537.51.1 (KHTML, like Gecko) Version/7.0 Mobile/11A465 Safari/9537.53';\n        }\n    };\n});\nSystem.register('ionic/platform/storage/local-storage', ['./storage'], function (_export) {\n    /**\n     * @name LocalStorage\n     * @description\n     * The LocalStorage storage engine uses the browser's local storage system for\n     * storing key/value pairs.\n     *\n     * Note: LocalStorage should ONLY be used for temporary data that you can afford to lose.\n     * Given disk space constraints on a mobile device, local storage might be \"cleaned up\"\n     * by the operating system (iOS).\n     *\n     * For guaranteed, long-term storage, use the SqlStorage engine which stores data in a file.\n     *\n     * @usage\n     * ```ts\n     * import {Page, Storage, LocalStorage} from 'ionic/ionic';\n     * @Page({\n     *   template: `<ion-content></ion-content>`\n     * });\n     * export class MyClass{\n     *  constructor(){\n     *    this.local = new Storage(LocalStorage);\n     *    this.local.set('didTutorial', true);\n     *  }\n     *}\n     *```\n     * @demo /docs/v3/demos/local-storage/\n     * @see {@link /docs/platform/storage/ Storage Platform Docs}\n     */\n    'use strict';\n\n    var StorageEngine, LocalStorage;\n\n    var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();\n\n    var _get = function get(_x, _x2, _x3) { var _again = true; _function: while (_again) { var object = _x, property = _x2, receiver = _x3; _again = false; if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { _x = parent; _x2 = property; _x3 = receiver; _again = true; desc = parent = undefined; continue _function; } } else if ('value' in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } } };\n\n    function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\n    function _inherits(subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\n    return {\n        setters: [function (_storage) {\n            StorageEngine = _storage.StorageEngine;\n        }],\n        execute: function () {\n            LocalStorage = (function (_StorageEngine) {\n                _inherits(LocalStorage, _StorageEngine);\n\n                function LocalStorage() {\n                    _classCallCheck(this, LocalStorage);\n\n                    _get(Object.getPrototypeOf(LocalStorage.prototype), 'constructor', this).call(this);\n                }\n\n                /**\n                 * Get the value of a key in LocalStorage\n                 * @param {String} key the key you want to lookup in LocalStorage\n                 */\n\n                _createClass(LocalStorage, [{\n                    key: 'get',\n                    value: function get(key) {\n                        return new Promise(function (resolve, reject) {\n                            try {\n                                var value = window.localStorage.getItem(key);\n                                resolve(value);\n                            } catch (e) {\n                                reject(e);\n                            }\n                        });\n                    }\n\n                    /**\n                     * Set a key value pair and save it to LocalStorage\n                     * @param {String} key the key you want to save to LocalStorage\n                     * @param {Any} value the value of the key you're saving\n                     */\n                }, {\n                    key: 'set',\n                    value: function set(key, value) {\n                        return new Promise(function (resolve, reject) {\n                            try {\n                                window.localStorage.setItem(key, value);\n                                resolve();\n                            } catch (e) {\n                                reject(e);\n                            }\n                        });\n                    }\n\n                    /**\n                     * Remove a key from LocalStorage\n                     * @param {String} key the key you want to remove from LocalStorage\n                     */\n                }, {\n                    key: 'remove',\n                    value: function remove(key) {\n                        return new Promise(function (resolve, reject) {\n                            try {\n                                window.localStorage.removeItem(key);\n                                resolve();\n                            } catch (e) {\n                                reject(e);\n                            }\n                        });\n                    }\n                }]);\n\n                return LocalStorage;\n            })(StorageEngine);\n\n            _export('LocalStorage', LocalStorage);\n        }\n    };\n});\nSystem.register('ionic/platform/storage/sql', ['./storage', '../../util'], function (_export) {\n    'use strict';\n\n    var StorageEngine, util, DB_NAME, SqlStorage;\n\n    var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();\n\n    var _get = function get(_x3, _x4, _x5) { var _again = true; _function: while (_again) { var object = _x3, property = _x4, receiver = _x5; _again = false; if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { _x3 = parent; _x4 = property; _x5 = receiver; _again = true; desc = parent = undefined; continue _function; } } else if ('value' in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } } };\n\n    function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\n    function _inherits(subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\n    return {\n        setters: [function (_storage) {\n            StorageEngine = _storage.StorageEngine;\n        }, function (_util) {\n            util = _util;\n        }],\n        execute: function () {\n            DB_NAME = '__ionicstorage';\n\n            /**\n             * SqlStorage uses SQLite or WebSQL (development only!) to store data in a\n             * persistent SQL store on the filesystem.\n             *\n             * This is the preferred storage engine, as data will be stored in appropriate\n             * app storage, unlike Local Storage which is treated differently by the OS.\n             *\n             * For convenience, the engine supports key/value storage for simple get/set and blob\n             * storage. The full SQL engine is exposed underneath through the `query` method.\n             *\n             * @usage\n             ```js\n             * let storage = new Storage(SqlStorage, options);\n             * storage.set('name', 'Max');\n             * storage.get('name').then((name) => {\n             * });\n             *\n             * // Sql storage also exposes the full engine underneath\n             * storage.query('insert into projects(name, data) values('Cool Project', 'blah')');\n             * storage.query('select * from projects').then((resp) => {})\n             * ```\n             *\n             * The `SqlStorage` service supports these options:\n             * {\n             *   name: the name of the database (__ionicstorage by default)\n             *   backupFlag: // where to store the file, default is BACKUP_LOCAL which DOES NOT store to iCloud. Other options: BACKUP_LIBRARY, BACKUP_DOCUMENTS\n             *   existingDatabase: whether to load this as an existing database (default is false)\n             * }\n             *\n             */\n\n            SqlStorage = (function (_StorageEngine) {\n                _inherits(SqlStorage, _StorageEngine);\n\n                function SqlStorage() {\n                    var options = arguments.length <= 0 || arguments[0] === undefined ? {} : arguments[0];\n\n                    _classCallCheck(this, SqlStorage);\n\n                    _get(Object.getPrototypeOf(SqlStorage.prototype), 'constructor', this).call(this);\n                    var dbOptions = util.defaults(options, {\n                        name: DB_NAME,\n                        backupFlag: SqlStorage.BACKUP_LOCAL,\n                        existingDatabase: false\n                    });\n                    if (window.sqlitePlugin) {\n                        var _location = this._getBackupLocation(dbOptions.backupFlag);\n                        this._db = window.sqlitePlugin.openDatabase(util.extend({\n                            name: dbOptions.name,\n                            location: _location,\n                            createFromLocation: dbOptions.existingDatabase ? 1 : 0\n                        }, dbOptions));\n                    } else {\n                        console.warn('Storage: SQLite plugin not installed, falling back to WebSQL. Make sure to install cordova-sqlite-storage in production!');\n                        this._db = window.openDatabase(dbOptions.name, '1.0', 'database', 5 * 1024 * 1024);\n                    }\n                    this._tryInit();\n                }\n\n                _createClass(SqlStorage, [{\n                    key: '_getBackupLocation',\n                    value: function _getBackupLocation(dbFlag) {\n                        switch (dbFlag) {\n                            case SqlStorage.BACKUP_LOCAL:\n                                return 2;\n                            case SqlStorage.BACKUP_LIBRARY:\n                                return 1;\n                            case SqlStorage.BACKUP_DOCUMENTS:\n                                return 0;\n                            default:\n                                throw Error('Invalid backup flag: ' + dbFlag);\n                        }\n                    }\n\n                    // Initialize the DB with our required tables\n                }, {\n                    key: '_tryInit',\n                    value: function _tryInit() {\n                        this._db.transaction(function (tx) {\n                            tx.executeSql('CREATE TABLE IF NOT EXISTS kv (key text primary key, value text)', [], function (tx, res) {}, function (tx, err) {\n                                console.error('Storage: Unable to create initial storage tables', tx, err);\n                            });\n                        });\n                    }\n\n                    /**\n                     * Perform an arbitrary SQL operation on the database. Use this method\n                     * to have full control over the underlying database through SQL operations\n                     * like SELECT, INSERT, and UPDATE.\n                     *\n                     * @param {string} query the query to run\n                     * @param {array} params the additional params to use for query placeholders\n                     * @return {Promise} that resolves or rejects with an object of the form { tx: Transaction, res: Result (or err)}\n                     */\n                }, {\n                    key: 'query',\n                    value: function query(_query) {\n                        var _this = this;\n\n                        var params = arguments.length <= 1 || arguments[1] === undefined ? [] : arguments[1];\n\n                        return new Promise(function (resolve, reject) {\n                            try {\n                                _this._db.transaction(function (tx) {\n                                    tx.executeSql(_query, params, function (tx, res) {\n                                        resolve({\n                                            tx: tx,\n                                            res: res\n                                        });\n                                    }, function (tx, err) {\n                                        reject({\n                                            tx: tx,\n                                            err: err\n                                        });\n                                    });\n                                }, function (err) {\n                                    reject(err);\n                                });\n                            } catch (e) {\n                                reject(e);\n                            }\n                        });\n                    }\n\n                    /**\n                     * Get the value in the database identified by the given key.\n                     * @param {string} key the key\n                     * @return {Promise} that resolves or rejects with an object of the form { tx: Transaction, res: Result (or err)}\n                     */\n                }, {\n                    key: 'get',\n                    value: function get(key) {\n                        var _this2 = this;\n\n                        return new Promise(function (resolve, reject) {\n                            try {\n                                _this2._db.transaction(function (tx) {\n                                    tx.executeSql(\"select key, value from kv where key = ? limit 1\", [key], function (tx, res) {\n                                        if (res.rows.length > 0) {\n                                            var item = res.rows.item(0);\n                                            resolve(item.value);\n                                        }\n                                        resolve(null);\n                                    }, function (tx, err) {\n                                        reject({\n                                            tx: tx,\n                                            err: err\n                                        });\n                                    });\n                                }, function (err) {\n                                    reject(err);\n                                });\n                            } catch (e) {\n                                reject(e);\n                            }\n                        });\n                    }\n\n                    /**\n                    * Set the value in the database for the given key. Existing values will be overwritten.\n                    * @param {string} key the key\n                    * @param {string} value The value (as a string)\n                    * @return {Promise} that resolves or rejects with an object of the form { tx: Transaction, res: Result (or err)}\n                    */\n                }, {\n                    key: 'set',\n                    value: function set(key, value) {\n                        var _this3 = this;\n\n                        return new Promise(function (resolve, reject) {\n                            try {\n                                _this3._db.transaction(function (tx) {\n                                    tx.executeSql('insert or replace into kv(key, value) values (?, ?)', [key, value], function (tx, res) {\n                                        resolve();\n                                    }, function (tx, err) {\n                                        reject({\n                                            tx: tx,\n                                            err: err\n                                        });\n                                    });\n                                }, function (err) {\n                                    reject(err);\n                                });\n                            } catch (e) {\n                                reject(e);\n                            }\n                        });\n                    }\n\n                    /**\n                    * Remove the value in the database for the given key.\n                    * @param {string} key the key\n                    * @param {string} value The value (as a string)\n                    * @return {Promise} that resolves or rejects with an object of the form { tx: Transaction, res: Result (or err)}\n                    */\n                }, {\n                    key: 'remove',\n                    value: function remove(key) {\n                        var _this4 = this;\n\n                        return new Promise(function (resolve, reject) {\n                            try {\n                                _this4._db.transaction(function (tx) {\n                                    tx.executeSql('delete from kv where key = ?', [key], function (tx, res) {\n                                        resolve();\n                                    }, function (tx, err) {\n                                        reject({\n                                            tx: tx,\n                                            err: err\n                                        });\n                                    });\n                                }, function (err) {\n                                    reject(err);\n                                });\n                            } catch (e) {\n                                reject(e);\n                            }\n                        });\n                    }\n                }]);\n\n                return SqlStorage;\n            })(StorageEngine);\n\n            _export('SqlStorage', SqlStorage);\n\n            SqlStorage.BACKUP_LOCAL = 2;\n            SqlStorage.BACKUP_LIBRARY = 1;\n            SqlStorage.BACKUP_DOCUMENTS = 0;\n        }\n    };\n});\nSystem.register('ionic/platform/storage/storage', [], function (_export) {\n    /**\n     * Storage is an easy way to store key/value pairs and other complicated\n     * data in a way that uses a variety of storage engines underneath.\n     *\n     * For most cases, we recommend the SqlStorage system as it will store\n     * data in a file in the app's sandbox. LocalStorage should ONLY be used\n     * for temporary data as it may be \"cleaned up\" by the operation system\n     * during low disk space situations.\n     */\n    /**\n     * @private\n    */\n    'use strict';\n\n    var Storage, StorageEngine;\n\n    var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();\n\n    function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\n    return {\n        setters: [],\n        execute: function () {\n            Storage = (function () {\n                function Storage(strategyCls, options) {\n                    _classCallCheck(this, Storage);\n\n                    this._strategy = new strategyCls(options);\n                }\n\n                /**\n                 * @private\n                */\n\n                _createClass(Storage, [{\n                    key: 'get',\n                    value: function get(key) {\n                        return this._strategy.get(key);\n                    }\n                }, {\n                    key: 'getJson',\n                    value: function getJson(key) {\n                        try {\n                            return JSON.parse(this._strategy.get(key));\n                        } catch (e) {\n                            console.warn('Storage getJson(): unable to parse value for key', key, ' as JSON');\n                            return null;\n                        }\n                    }\n                }, {\n                    key: 'set',\n                    value: function set(key, value) {\n                        return this._strategy.set(key, value);\n                    }\n                }, {\n                    key: 'remove',\n                    value: function remove(key) {\n                        return this._strategy.remove(key);\n                    }\n                }, {\n                    key: 'query',\n                    value: function query(_query, params) {\n                        return this._strategy.query(_query, params);\n                    }\n                }]);\n\n                return Storage;\n            })();\n\n            _export('Storage', Storage);\n\n            StorageEngine = (function () {\n                function StorageEngine() {\n                    _classCallCheck(this, StorageEngine);\n                }\n\n                _createClass(StorageEngine, [{\n                    key: 'get',\n                    value: function get(key, value) {\n                        throw Error(\"get() not implemented for this storage engine\");\n                    }\n                }, {\n                    key: 'set',\n                    value: function set(key, value) {\n                        throw Error(\"set() not implemented for this storage engine\");\n                    }\n                }, {\n                    key: 'remove',\n                    value: function remove(key) {\n                        throw Error(\"remove() not implemented for this storage engine\");\n                    }\n                }, {\n                    key: 'query',\n                    value: function query(_query2, params) {\n                        throw Error(\"query() not implemented for this storage engine\");\n                    }\n                }]);\n\n                return StorageEngine;\n            })();\n\n            _export('StorageEngine', StorageEngine);\n        }\n    };\n});"
  },
  {
    "path": "content/dist/bundles/ionic.wp.css",
    "content": "audio,\ncanvas,\nprogress,\nvideo {\n  vertical-align: baseline; }\n\naudio:not([controls]) {\n  display: none;\n  height: 0; }\n\nb,\nstrong {\n  font-weight: bold; }\n\nimg {\n  max-width: 100%;\n  border: 0; }\n\nsvg:not(:root) {\n  overflow: hidden; }\n\nfigure {\n  margin: 1em 40px; }\n\nhr {\n  height: 1px;\n  border-width: 0;\n  box-sizing: content-box; }\n\npre {\n  overflow: auto; }\n\ncode,\nkbd,\npre,\nsamp {\n  font-family: monospace, monospace;\n  font-size: 1em; }\n\nlabel,\ninput,\nselect,\ntextarea {\n  font-family: inherit;\n  line-height: normal; }\n\ntextarea {\n  overflow: auto;\n  height: auto;\n  font: inherit;\n  color: inherit; }\n\nform,\ninput,\noptgroup,\nselect {\n  margin: 0;\n  font: inherit;\n  color: inherit; }\n\nhtml input[type=\"button\"],\ninput[type=\"reset\"],\ninput[type=\"submit\"] {\n  cursor: pointer;\n  -webkit-appearance: button; }\n\na,\na div,\na span,\na ion-icon,\na ion-label,\nbutton,\nbutton div,\nbutton span,\nbutton ion-icon,\nbutton ion-label,\n[tappable],\n[tappable] div,\n[tappable] span,\n[tappable] ion-icon,\n[tappable] ion-label,\ninput,\ntextarea {\n  -ms-touch-action: manipulation;\n  touch-action: manipulation; }\n\na ion-label,\nbutton ion-label,\n[tappable] ion-label {\n  pointer-events: none; }\n\nbutton {\n  border: 0;\n  font-family: inherit;\n  font-style: inherit;\n  font-variant: inherit;\n  line-height: 1;\n  text-transform: none;\n  cursor: pointer;\n  -webkit-appearance: button; }\n\na[disabled],\nbutton[disabled],\nhtml input[disabled] {\n  cursor: default; }\n\nbutton::-moz-focus-inner,\ninput::-moz-focus-inner {\n  padding: 0;\n  border: 0; }\n\ninput[type=\"checkbox\"],\ninput[type=\"radio\"] {\n  padding: 0;\n  box-sizing: border-box; }\n\ninput[type=\"number\"]::-webkit-inner-spin-button,\ninput[type=\"number\"]::-webkit-outer-spin-button {\n  height: auto; }\n\ninput[type=\"search\"]::-webkit-search-cancel-button,\ninput[type=\"search\"]::-webkit-search-decoration {\n  -webkit-appearance: none; }\n\ntable {\n  border-collapse: collapse;\n  border-spacing: 0; }\n\ntd,\nth {\n  padding: 0; }\n\n* {\n  box-sizing: border-box;\n  -webkit-tap-highlight-color: transparent;\n  -webkit-tap-highlight-color: transparent;\n  -webkit-touch-callout: none; }\n\nhtml {\n  width: 100%;\n  height: 100%;\n  -webkit-text-size-adjust: 100%;\n  -ms-text-size-adjust: 100%;\n  text-size-adjust: 100%; }\n\nbody {\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  -ms-user-select: none;\n  user-select: none;\n  position: fixed;\n  overflow: hidden;\n  margin: 0;\n  padding: 0;\n  width: 100%;\n  max-width: 100%;\n  height: 100%;\n  max-height: 100%;\n  -webkit-font-smoothing: antialiased;\n  font-smoothing: antialiased;\n  text-rendering: optimizeLegibility;\n  -webkit-user-drag: none;\n  -ms-content-zooming: none;\n  -ms-touch-action: manipulation;\n  touch-action: manipulation;\n  word-wrap: break-word;\n  -webkit-text-size-adjust: none;\n  -ms-text-size-adjust: none;\n  text-size-adjust: none; }\n\nion-app,\nion-nav,\nion-tab,\nion-tabs,\n.app-root {\n  position: absolute;\n  top: 0;\n  left: 0;\n  z-index: 0;\n  display: block;\n  overflow: hidden;\n  width: 100%;\n  height: 100%; }\n\nion-tab scroll-cotent {\n  display: none; }\n\nion-tab {\n  -webkit-transform: translateY(-200%);\n  transform: translateY(-200%); }\n\nion-tab.show-tab {\n  -webkit-transform: translateY(0);\n  transform: translateY(0); }\n\nion-tab.show-tab scroll-cotent {\n  display: block; }\n\nion-page {\n  position: absolute;\n  top: 0;\n  left: 0;\n  display: block;\n  width: 100%;\n  height: 100%;\n  opacity: 0; }\n\nion-content {\n  position: relative;\n  top: 0;\n  left: 0;\n  display: block;\n  width: 100%;\n  height: 100%; }\n\nion-page > ion-content {\n  position: absolute; }\n\nion-page scroll-content {\n  display: none; }\n\nion-page.show-page {\n  opacity: 1; }\n\nion-page.show-page scroll-content {\n  display: block; }\n\nion-header {\n  position: absolute;\n  top: 0;\n  left: 0;\n  z-index: 10;\n  display: block;\n  width: 100%; }\n\nion-toolbar {\n  position: relative;\n  z-index: 10; }\n\nion-footer {\n  position: absolute;\n  bottom: 0;\n  left: 0;\n  z-index: 10;\n  display: block;\n  width: 100%; }\n\nion-tabbar {\n  position: absolute;\n  bottom: 0;\n  left: 0;\n  z-index: 10;\n  display: -webkit-box;\n  display: -webkit-flex;\n  display: -ms-flexbox;\n  display: flex;\n  width: 100%;\n  opacity: 0; }\n\nion-tabbar.show-tabbar {\n  opacity: 1; }\n\n[tabsPlacement=top] > ion-tabbar {\n  top: 0;\n  bottom: auto; }\n\nscroll-content {\n  position: absolute;\n  top: 0;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  z-index: 1;\n  display: block;\n  overflow-x: hidden;\n  overflow-y: scroll;\n  -webkit-overflow-scrolling: touch;\n  will-change: scroll-position; }\n\nion-content.js-scroll > scroll-content {\n  position: relative;\n  min-height: 100%;\n  overflow-x: initial;\n  overflow-y: initial;\n  -webkit-overflow-scrolling: auto;\n  will-change: initial; }\n\n.disable-scroll ion-page scroll-content {\n  overflow-y: hidden;\n  overflow-x: hidden; }\n\n[nav-viewport],\n[nav-portal],\n[tab-portal],\n.nav-decor {\n  display: none; }\n\n.hide,\n[hidden],\ntemplate {\n  display: none !important; }\n\n.sticky {\n  position: -webkit-sticky;\n  position: sticky;\n  top: 0; }\n\n:focus,\n:active {\n  outline: none; }\n\n.focus-outline :focus {\n  outline: thin dotted;\n  outline-offset: -1px; }\n\n.focus-outline button:focus,\n.focus-outline [button]:focus {\n  border-color: #51a7e8;\n  outline: thin solid #51a7e8;\n  box-shadow: 0 0 8px 0 #51a7e8; }\n\n.focus-outline ion-input :focus {\n  outline: none; }\n\nfocus-ctrl {\n  position: fixed; }\n  focus-ctrl input,\n  focus-ctrl button {\n    position: fixed;\n    top: 1px;\n    left: -9999px;\n    z-index: 9999;\n    width: 9px;\n    pointer-events: none; }\n\nclick-block {\n  position: absolute;\n  top: 0;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  z-index: 9999;\n  display: block;\n  opacity: 0;\n  -webkit-transform: translate3d(0, -100%, 0);\n  transform: translate3d(0, -100%, 0);\n  -webkit-transform: translate3d(0, calc(-100% + 1px), 0);\n  transform: translate3d(0, calc(-100% + 1px), 0); }\n\n.click-block-active {\n  -webkit-transform: translate3d(0, 0, 0);\n  transform: translate3d(0, 0, 0); }\n\nion-backdrop {\n  position: absolute;\n  top: 0;\n  left: 0;\n  z-index: 2;\n  display: block;\n  width: 100%;\n  height: 100%;\n  background-color: #000;\n  opacity: .01;\n  -webkit-transform: translateZ(0);\n  transform: translateZ(0); }\n\nion-backdrop.hide-backdrop {\n  display: none; }\n\nion-grid {\n  display: -webkit-box;\n  display: -webkit-flex;\n  display: -ms-flexbox;\n  display: flex;\n  -webkit-box-orient: vertical;\n  -webkit-box-direction: normal;\n  -webkit-flex-direction: column;\n  -ms-flex-direction: column;\n  flex-direction: column;\n  padding: 5px;\n  width: 100%; }\n\nion-row {\n  display: -webkit-box;\n  display: -webkit-flex;\n  display: -ms-flexbox;\n  display: flex;\n  width: 100%; }\n  ion-row[wrap] {\n    -webkit-flex-wrap: wrap;\n    -ms-flex-wrap: wrap;\n    flex-wrap: wrap; }\n  ion-row[top] {\n    -webkit-box-align: start;\n    -webkit-align-items: flex-start;\n    -ms-flex-align: start;\n    align-items: flex-start; }\n  ion-row[bottom] {\n    -webkit-box-align: end;\n    -webkit-align-items: flex-end;\n    -ms-flex-align: end;\n    align-items: flex-end; }\n  ion-row[center] {\n    -webkit-box-align: center;\n    -webkit-align-items: center;\n    -ms-flex-align: center;\n    align-items: center; }\n  ion-row[stretch] {\n    -webkit-box-align: stretch;\n    -webkit-align-items: stretch;\n    -ms-flex-align: stretch;\n    align-items: stretch; }\n  ion-row[baseline] {\n    -webkit-box-align: baseline;\n    -webkit-align-items: baseline;\n    -ms-flex-align: baseline;\n    align-items: baseline; }\n\nion-col {\n  display: block;\n  -webkit-box-flex: 1;\n  -webkit-flex: 1;\n  -ms-flex: 1;\n  flex: 1;\n  padding: 5px;\n  width: 100%; }\n  ion-col[top] {\n    -webkit-align-self: flex-start;\n    -ms-flex-item-align: start;\n    align-self: flex-start; }\n  ion-col[bottom] {\n    -webkit-align-self: flex-end;\n    -ms-flex-item-align: end;\n    align-self: flex-end; }\n  ion-col[center] {\n    -webkit-align-self: center;\n    -ms-flex-item-align: center;\n    align-self: center; }\n  ion-col[stretch] {\n    -webkit-align-self: stretch;\n    -ms-flex-item-align: stretch;\n    align-self: stretch; }\n  ion-col[baseline] {\n    -webkit-align-self: baseline;\n    -ms-flex-item-align: baseline;\n    align-self: baseline; }\n  ion-col[offset-10] {\n    margin-left: 10%; }\n  ion-col[offset-20] {\n    margin-left: 20%; }\n  ion-col[offset-25] {\n    margin-left: 25%; }\n  ion-col[offset-33], ion-col[offset-34] {\n    margin-left: 33.3333%; }\n  ion-col[offset-50] {\n    margin-left: 50%; }\n  ion-col[offset-66], ion-col[offset-67] {\n    margin-left: 66.6666%; }\n  ion-col[offset-75] {\n    margin-left: 75%; }\n  ion-col[offset-80] {\n    margin-left: 80%; }\n  ion-col[offset-90] {\n    margin-left: 90%; }\n  ion-col[width-10] {\n    -webkit-box-flex: 0;\n    -webkit-flex: 0 0 10%;\n    -ms-flex: 0 0 10%;\n    flex: 0 0 10%;\n    max-width: 10%; }\n  ion-col[width-20] {\n    -webkit-box-flex: 0;\n    -webkit-flex: 0 0 20%;\n    -ms-flex: 0 0 20%;\n    flex: 0 0 20%;\n    max-width: 20%; }\n  ion-col[width-25] {\n    -webkit-box-flex: 0;\n    -webkit-flex: 0 0 25%;\n    -ms-flex: 0 0 25%;\n    flex: 0 0 25%;\n    max-width: 25%; }\n  ion-col[width-33], ion-col[width-34] {\n    -webkit-box-flex: 0;\n    -webkit-flex: 0 0 33.3333%;\n    -ms-flex: 0 0 33.3333%;\n    flex: 0 0 33.3333%;\n    max-width: 33.3333%; }\n  ion-col[width-50] {\n    -webkit-box-flex: 0;\n    -webkit-flex: 0 0 50%;\n    -ms-flex: 0 0 50%;\n    flex: 0 0 50%;\n    max-width: 50%; }\n  ion-col[width-66], ion-col[width-67] {\n    -webkit-box-flex: 0;\n    -webkit-flex: 0 0 66.6666%;\n    -ms-flex: 0 0 66.6666%;\n    flex: 0 0 66.6666%;\n    max-width: 66.6666%; }\n  ion-col[width-75] {\n    -webkit-box-flex: 0;\n    -webkit-flex: 0 0 75%;\n    -ms-flex: 0 0 75%;\n    flex: 0 0 75%;\n    max-width: 75%; }\n  ion-col[width-80] {\n    -webkit-box-flex: 0;\n    -webkit-flex: 0 0 80%;\n    -ms-flex: 0 0 80%;\n    flex: 0 0 80%;\n    max-width: 80%; }\n  ion-col[width-90] {\n    -webkit-box-flex: 0;\n    -webkit-flex: 0 0 90%;\n    -ms-flex: 0 0 90%;\n    flex: 0 0 90%;\n    max-width: 90%; }\n\n@media (max-width: 567px) {\n  [responsive-sm] {\n    -webkit-box-orient: vertical;\n    -webkit-box-direction: normal;\n    -webkit-flex-direction: column;\n    -ms-flex-direction: column;\n    flex-direction: column; }\n    [responsive-sm] ion-col[width-10], [responsive-sm] ion-col[width-20], [responsive-sm] ion-col[width-25], [responsive-sm] ion-col[width-33], [responsive-sm] ion-col[width-34], [responsive-sm] ion-col[width-50], [responsive-sm] ion-col[width-66], [responsive-sm] ion-col[width-67], [responsive-sm] ion-col[width-75], [responsive-sm] ion-col[width-80], [responsive-sm] ion-col[width-90] {\n      -webkit-box-flex: 1;\n      -webkit-flex: 1;\n      -ms-flex: 1;\n      flex: 1;\n      margin-bottom: 15px;\n      margin-left: 0;\n      width: 100%;\n      max-width: 100%; } }\n\n@media (max-width: 767px) {\n  [responsive-md] {\n    -webkit-box-orient: vertical;\n    -webkit-box-direction: normal;\n    -webkit-flex-direction: column;\n    -ms-flex-direction: column;\n    flex-direction: column; }\n    [responsive-md] ion-col[width-10], [responsive-md] ion-col[width-20], [responsive-md] ion-col[width-25], [responsive-md] ion-col[width-33], [responsive-md] ion-col[width-34], [responsive-md] ion-col[width-50], [responsive-md] ion-col[width-66], [responsive-md] ion-col[width-67], [responsive-md] ion-col[width-75], [responsive-md] ion-col[width-80], [responsive-md] ion-col[width-90] {\n      -webkit-box-flex: 1;\n      -webkit-flex: 1;\n      -ms-flex: 1;\n      flex: 1;\n      margin-bottom: 15px;\n      margin-left: 0;\n      width: 100%;\n      max-width: 100%; } }\n\n@media (max-width: 1023px) {\n  [responsive-lg] {\n    -webkit-box-orient: vertical;\n    -webkit-box-direction: normal;\n    -webkit-flex-direction: column;\n    -ms-flex-direction: column;\n    flex-direction: column; }\n    [responsive-lg] ion-col[width-10], [responsive-lg] ion-col[width-20], [responsive-lg] ion-col[width-25], [responsive-lg] ion-col[width-33], [responsive-lg] ion-col[width-34], [responsive-lg] ion-col[width-50], [responsive-lg] ion-col[width-66], [responsive-lg] ion-col[width-67], [responsive-lg] ion-col[width-75], [responsive-lg] ion-col[width-80], [responsive-lg] ion-col[width-90] {\n      -webkit-box-flex: 1;\n      -webkit-flex: 1;\n      -ms-flex: 1;\n      flex: 1;\n      margin-bottom: 15px;\n      margin-left: 0;\n      width: 100%;\n      max-width: 100%; } }\n\nion-icon {\n  display: inline-block;\n  font-size: 1.2em; }\n\nion-icon[small] {\n  min-height: 1.1em;\n  font-size: 1.1em; }\n\nion-img {\n  position: relative;\n  display: -webkit-box;\n  display: -webkit-flex;\n  display: -ms-flexbox;\n  display: flex;\n  overflow: hidden;\n  -webkit-box-align: center;\n  -webkit-align-items: center;\n  -ms-flex-align: center;\n  align-items: center;\n  -webkit-box-pack: center;\n  -webkit-justify-content: center;\n  -ms-flex-pack: center;\n  justify-content: center; }\n\nion-img img {\n  -webkit-flex-shrink: 0;\n  -ms-flex-negative: 0;\n  flex-shrink: 0;\n  min-width: 100%;\n  min-height: 100%; }\n\nion-img .img-placeholder {\n  position: absolute;\n  top: 0;\n  left: 0;\n  width: 100%;\n  height: 100%;\n  background: #eee;\n  -webkit-transition: opacity 200ms;\n  transition: opacity 200ms; }\n\nion-img.img-loaded .img-placeholder {\n  opacity: 0; }\n\nion-infinite-scroll {\n  display: block;\n  width: 100%; }\n\nion-infinite-scroll-content {\n  display: -webkit-box;\n  display: -webkit-flex;\n  display: -ms-flexbox;\n  display: flex;\n  -webkit-box-orient: vertical;\n  -webkit-box-direction: normal;\n  -webkit-flex-direction: column;\n  -ms-flex-direction: column;\n  flex-direction: column;\n  -webkit-box-pack: center;\n  -webkit-justify-content: center;\n  -ms-flex-pack: center;\n  justify-content: center;\n  height: 100%;\n  min-height: 84px;\n  text-align: center; }\n\n.infinite-loading {\n  display: none;\n  margin: 0 0 32px 0;\n  width: 100%; }\n\n.infinite-loading-text {\n  margin: 4px 32px 0 32px;\n  color: #666; }\n\nion-infinite-scroll-content[state=loading] .infinite-loading {\n  display: block; }\n\nion-infinite-scroll-content[state=disabled] {\n  display: none; }\n\nion-loading {\n  position: absolute;\n  top: 0;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  z-index: 1000;\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  -webkit-box-pack: center;\n  -webkit-justify-content: center;\n  -ms-flex-pack: center;\n  justify-content: center; }\n\n.loading-wrapper {\n  z-index: 10;\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  opacity: 0; }\n\nion-menu {\n  position: absolute;\n  top: 0;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  display: none; }\n  ion-menu.show-menu {\n    display: block; }\n\n.menu-inner {\n  position: absolute;\n  top: 0;\n  right: auto;\n  bottom: 0;\n  left: 0;\n  display: -webkit-box;\n  display: -webkit-flex;\n  display: -ms-flexbox;\n  display: flex;\n  -webkit-box-orient: vertical;\n  -webkit-box-direction: normal;\n  -webkit-flex-direction: column;\n  -ms-flex-direction: column;\n  flex-direction: column;\n  width: 304px;\n  -webkit-transform: translate3d(-9999px, 0, 0);\n  transform: translate3d(-9999px, 0, 0); }\n\n.menu-inner > ion-header,\n.menu-inner > ion-content,\n.menu-inner > ion-footer {\n  position: relative; }\n\nion-menu[side=right] > .menu-inner {\n  right: 0;\n  left: auto; }\n\nion-menu ion-backdrop {\n  z-index: -1;\n  display: none;\n  opacity: .1; }\n\n.menu-content {\n  -webkit-transform: translate3d(0, 0, 0);\n  transform: translate3d(0, 0, 0); }\n\n.menu-content-open ion-pane,\n.menu-content-open ion-content,\n.menu-content-open .toolbar {\n  pointer-events: none; }\n\n@media (max-width: 340px) {\n  .menu-inner {\n    width: 264px; } }\n\nion-menu[type=reveal] {\n  z-index: 0; }\n\nion-menu[type=reveal].show-menu .menu-inner {\n  -webkit-transform: translate3d(0, 0, 0);\n  transform: translate3d(0, 0, 0); }\n\nion-menu[type=overlay] {\n  z-index: 80; }\n  ion-menu[type=overlay] .show-backdrop {\n    display: block; }\n\nion-modal {\n  position: absolute;\n  top: 0;\n  left: 0;\n  display: block;\n  width: 100%;\n  height: 100%; }\n  @media not all and (min-width: 768px) and (min-height: 600px) {\n    ion-modal ion-backdrop {\n      visibility: hidden; } }\n\n.modal-wrapper {\n  z-index: 10;\n  height: 100%; }\n  @media only screen and (min-width: 768px) and (min-height: 600px) {\n    .modal-wrapper {\n      position: absolute;\n      top: calc(50% - (500px/2));\n      left: calc(50% - (600px/2));\n      width: 600px;\n      height: 500px; } }\n  @media only screen and (min-width: 768px) and (min-height: 768px) {\n    .modal-wrapper {\n      position: absolute;\n      top: calc(50% - (600px/2));\n      left: calc(50% - (600px/2));\n      width: 600px;\n      height: 600px; } }\n\nion-modal-inner {\n  position: absolute;\n  top: 0;\n  left: 0;\n  display: -webkit-box;\n  display: -webkit-flex;\n  display: -ms-flexbox;\n  display: flex;\n  -webkit-box-orient: vertical;\n  -webkit-box-direction: normal;\n  -webkit-flex-direction: column;\n  -ms-flex-direction: column;\n  flex-direction: column;\n  width: 100%;\n  height: 100%; }\n\n.item-range .item-inner {\n  overflow: visible; }\n\n.item-range .input-wrapper {\n  overflow: visible;\n  -webkit-box-orient: vertical;\n  -webkit-box-direction: normal;\n  -webkit-flex-direction: column;\n  -ms-flex-direction: column;\n  flex-direction: column; }\n\n.item-range ion-range {\n  width: 100%; }\n  .item-range ion-range ion-label {\n    -webkit-align-self: center;\n    -ms-flex-item-align: center;\n    align-self: center; }\n\nion-range {\n  position: relative;\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  ion-range ion-label {\n    -webkit-box-flex: initial;\n    -webkit-flex: initial;\n    -ms-flex: initial;\n    flex: initial; }\n  ion-range ion-icon {\n    min-height: 2.4rem;\n    font-size: 2.4rem;\n    line-height: 1; }\n\n.range-slider {\n  position: relative;\n  -webkit-box-flex: 1;\n  -webkit-flex: 1;\n  -ms-flex: 1;\n  flex: 1;\n  cursor: pointer; }\n\nion-refresher {\n  position: absolute;\n  top: 0;\n  left: 0;\n  z-index: 0;\n  display: none;\n  width: 100%;\n  height: 60px; }\n  ion-refresher.refresher-active {\n    display: block; }\n\n.has-refresher > scroll-content {\n  margin-top: -1px;\n  border-top: 1px solid #ddd;\n  -webkit-transition: all 320ms cubic-bezier(0.36, 0.66, 0.04, 1);\n  transition: all 320ms cubic-bezier(0.36, 0.66, 0.04, 1); }\n\nion-refresher-content {\n  display: -webkit-box;\n  display: -webkit-flex;\n  display: -ms-flexbox;\n  display: flex;\n  -webkit-box-orient: vertical;\n  -webkit-box-direction: normal;\n  -webkit-flex-direction: column;\n  -ms-flex-direction: column;\n  flex-direction: column;\n  -webkit-box-pack: center;\n  -webkit-justify-content: center;\n  -ms-flex-pack: center;\n  justify-content: center;\n  height: 100%; }\n\n.refresher-pulling,\n.refresher-refreshing {\n  display: none;\n  width: 100%; }\n\n.refresher-pulling-icon,\n.refresher-refreshing-icon {\n  font-size: 30px;\n  text-align: center;\n  color: #000;\n  -webkit-transform-origin: center;\n  transform-origin: center;\n  -webkit-transition: 200ms;\n  transition: 200ms; }\n\n.refresher-pulling-text,\n.refresher-refreshing-text {\n  font-size: 16px;\n  text-align: center;\n  color: #000; }\n\nion-refresher-content[state=pulling] .refresher-pulling {\n  display: block; }\n\nion-refresher-content[state=ready] .refresher-pulling {\n  display: block; }\n\nion-refresher-content[state=ready] .refresher-pulling-icon {\n  -webkit-transform: rotate(180deg);\n  transform: rotate(180deg); }\n\nion-refresher-content[state=refreshing] .refresher-refreshing {\n  display: block; }\n\nion-refresher-content[state=cancelling] .refresher-pulling {\n  display: block; }\n\nion-refresher-content[state=cancelling] .refresher-pulling-icon {\n  -webkit-transform: scale(0);\n  transform: scale(0); }\n\nion-refresher-content[state=completing] .refresher-refreshing {\n  display: block; }\n\nion-refresher-content[state=completing] .refresher-refreshing-icon {\n  -webkit-transform: scale(0);\n  transform: scale(0); }\n\nion-scroll {\n  position: relative;\n  display: block; }\n  ion-scroll.scroll-x scroll-content {\n    overflow-x: auto; }\n  ion-scroll.scroll-y scroll-content {\n    overflow-y: auto; }\n  ion-scroll[center] scroll-content {\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    -webkit-box-pack: center;\n    -webkit-justify-content: center;\n    -ms-flex-pack: center;\n    justify-content: center; }\n  ion-scroll scroll-content {\n    position: absolute;\n    top: 0;\n    right: 0;\n    bottom: 0;\n    left: 0;\n    overflow-y: hidden;\n    overflow-x: hidden;\n    -webkit-overflow-scrolling: touch;\n    will-change: scroll-position; }\n\n.hidden-show-when {\n  display: none !important; }\n\n.hidden-hide-when {\n  display: none !important; }\n\n/**\n * Swiper 3.1.2\n * Most modern mobile touch slider and framework with hardware accelerated transitions\n *\n * http://www.idangero.us/swiper/\n *\n * Copyright 2015, Vladimir Kharlampidi\n * The iDangero.us\n * http://www.idangero.us/\n *\n * Licensed under MIT\n *\n * Released on: August 22, 2015\n */\n.swiper-container {\n  margin: 0 auto;\n  position: relative;\n  overflow: hidden;\n  /* Fix of Webkit flickering */\n  z-index: 1; }\n\n.swiper-container-no-flexbox .swiper-slide {\n  float: left; }\n\n.swiper-container-vertical > .swiper-wrapper {\n  -webkit-box-orient: vertical;\n  -ms-flex-direction: column;\n  -webkit-flex-direction: column;\n  flex-direction: column; }\n\n.swiper-wrapper {\n  position: relative;\n  width: 100%;\n  height: 100%;\n  z-index: 1;\n  display: -webkit-box;\n  display: -ms-flexbox;\n  display: -webkit-flex;\n  display: flex;\n  -webkit-transition-property: -webkit-transform;\n  transition-property: transform;\n  box-sizing: content-box; }\n\n.swiper-container-android .swiper-slide,\n.swiper-wrapper {\n  -webkit-transform: translate3d(0px, 0, 0);\n  transform: translate3d(0px, 0, 0); }\n\n.swiper-container-multirow > .swiper-wrapper {\n  -webkit-box-lines: multiple;\n  -moz-box-lines: multiple;\n  -ms-flex-wrap: wrap;\n  -webkit-flex-wrap: wrap;\n  flex-wrap: wrap; }\n\n.swiper-container-free-mode > .swiper-wrapper {\n  -webkit-transition-timing-function: ease-out;\n  transition-timing-function: ease-out;\n  margin: 0 auto; }\n\n.swiper-slide {\n  -webkit-flex-shrink: 0;\n  -ms-flex: 0 0 auto;\n  -webkit-flex-shrink: 0;\n  -ms-flex-negative: 0;\n  flex-shrink: 0;\n  width: 100%;\n  height: 100%;\n  position: relative; }\n\n/* a11y */\n.swiper-container .swiper-notification {\n  position: absolute;\n  left: 0;\n  top: 0;\n  pointer-events: none;\n  opacity: 0;\n  z-index: -1000; }\n\n/* IE10 Windows Phone 8 Fixes */\n.swiper-wp8-horizontal {\n  -ms-touch-action: pan-y;\n  touch-action: pan-y; }\n\n.swiper-wp8-vertical {\n  -ms-touch-action: pan-x;\n  touch-action: pan-x; }\n\n/* Arrows */\n.swiper-button-prev,\n.swiper-button-next {\n  position: absolute;\n  top: 50%;\n  width: 27px;\n  height: 44px;\n  margin-top: -22px;\n  z-index: 10;\n  cursor: pointer;\n  background-size: 27px 44px;\n  background-position: center;\n  background-repeat: no-repeat; }\n\n.swiper-button-prev.swiper-button-disabled,\n.swiper-button-next.swiper-button-disabled {\n  opacity: .35;\n  cursor: auto;\n  pointer-events: none; }\n\n.swiper-button-prev,\n.swiper-container-rtl .swiper-button-next {\n  background-image: url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%2027%2044'%3E%3Cpath%20d%3D'M0%2C22L22%2C0l2.1%2C2.1L4.2%2C22l19.9%2C19.9L22%2C44L0%2C22L0%2C22L0%2C22z'%20fill%3D'%23007aff'%2F%3E%3C%2Fsvg%3E\");\n  left: 10px;\n  right: auto; }\n\n.swiper-button-prev.swiper-button-black,\n.swiper-container-rtl .swiper-button-next.swiper-button-black {\n  background-image: url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%2027%2044'%3E%3Cpath%20d%3D'M0%2C22L22%2C0l2.1%2C2.1L4.2%2C22l19.9%2C19.9L22%2C44L0%2C22L0%2C22L0%2C22z'%20fill%3D'%23000000'%2F%3E%3C%2Fsvg%3E\"); }\n\n.swiper-button-prev.swiper-button-white,\n.swiper-container-rtl .swiper-button-next.swiper-button-white {\n  background-image: url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%2027%2044'%3E%3Cpath%20d%3D'M0%2C22L22%2C0l2.1%2C2.1L4.2%2C22l19.9%2C19.9L22%2C44L0%2C22L0%2C22L0%2C22z'%20fill%3D'%23ffffff'%2F%3E%3C%2Fsvg%3E\"); }\n\n.swiper-button-next,\n.swiper-container-rtl .swiper-button-prev {\n  background-image: url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%2027%2044'%3E%3Cpath%20d%3D'M27%2C22L27%2C22L5%2C44l-2.1-2.1L22.8%2C22L2.9%2C2.1L5%2C0L27%2C22L27%2C22z'%20fill%3D'%23007aff'%2F%3E%3C%2Fsvg%3E\");\n  right: 10px;\n  left: auto; }\n\n.swiper-button-next.swiper-button-black,\n.swiper-container-rtl .swiper-button-prev.swiper-button-black {\n  background-image: url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%2027%2044'%3E%3Cpath%20d%3D'M27%2C22L27%2C22L5%2C44l-2.1-2.1L22.8%2C22L2.9%2C2.1L5%2C0L27%2C22L27%2C22z'%20fill%3D'%23000000'%2F%3E%3C%2Fsvg%3E\"); }\n\n.swiper-button-next.swiper-button-white,\n.swiper-container-rtl .swiper-button-prev.swiper-button-white {\n  background-image: url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%2027%2044'%3E%3Cpath%20d%3D'M27%2C22L27%2C22L5%2C44l-2.1-2.1L22.8%2C22L2.9%2C2.1L5%2C0L27%2C22L27%2C22z'%20fill%3D'%23ffffff'%2F%3E%3C%2Fsvg%3E\"); }\n\n/* Pagination Styles */\n.swiper-pagination {\n  position: absolute;\n  text-align: center;\n  -webkit-transition: 300ms;\n  transition: 300ms;\n  -webkit-transform: translate3d(0, 0, 0);\n  transform: translate3d(0, 0, 0);\n  z-index: 10; }\n\n.swiper-pagination.swiper-pagination-hidden {\n  opacity: 0; }\n\n.swiper-pagination-bullet {\n  width: 8px;\n  height: 8px;\n  display: inline-block;\n  border-radius: 100%;\n  background: #000;\n  opacity: .2; }\n\nbutton.swiper-pagination-bullet {\n  border: 0;\n  margin: 0;\n  padding: 0;\n  box-shadow: none;\n  -moz-appearance: none;\n  -ms-appearance: none;\n  -webkit-appearance: none;\n  appearance: none; }\n\n.swiper-pagination-clickable .swiper-pagination-bullet {\n  cursor: pointer; }\n\n.swiper-pagination-white .swiper-pagination-bullet {\n  background: #fff; }\n\n.swiper-pagination-bullet-active {\n  opacity: 1; }\n\n.swiper-pagination-white .swiper-pagination-bullet-active {\n  background: #fff; }\n\n.swiper-pagination-black .swiper-pagination-bullet-active {\n  background: #000; }\n\n.swiper-container-vertical > .swiper-pagination {\n  right: 10px;\n  top: 50%;\n  -webkit-transform: translate3d(0px, -50%, 0);\n  transform: translate3d(0px, -50%, 0); }\n\n.swiper-container-vertical > .swiper-pagination .swiper-pagination-bullet {\n  margin: 5px 0;\n  display: block; }\n\n.swiper-container-horizontal > .swiper-pagination {\n  bottom: 20px;\n  left: 0;\n  width: 100%; }\n\n.swiper-container-horizontal > .swiper-pagination .swiper-pagination-bullet {\n  margin: 0 5px; }\n\n/* 3D Container */\n.swiper-container-3d {\n  -webkit-perspective: 1200px;\n  -o-perspective: 1200px;\n  perspective: 1200px; }\n\n.swiper-container-3d .swiper-wrapper,\n.swiper-container-3d .swiper-slide,\n.swiper-container-3d .swiper-slide-shadow-left,\n.swiper-container-3d .swiper-slide-shadow-right,\n.swiper-container-3d .swiper-slide-shadow-top,\n.swiper-container-3d .swiper-slide-shadow-bottom,\n.swiper-container-3d .swiper-cube-shadow {\n  -webkit-transform-style: preserve-3d;\n  -ms-transform-style: preserve-3d;\n  transform-style: preserve-3d; }\n\n.swiper-container-3d .swiper-slide-shadow-left,\n.swiper-container-3d .swiper-slide-shadow-right,\n.swiper-container-3d .swiper-slide-shadow-top,\n.swiper-container-3d .swiper-slide-shadow-bottom {\n  position: absolute;\n  left: 0;\n  bottom: 0;\n  width: 100%;\n  height: 100%;\n  pointer-events: none;\n  z-index: 10; }\n\n.swiper-container-3d .swiper-slide-shadow-left {\n  background-image: -webkit-gradient(linear, left top, right top, from(rgba(0, 0, 0, 0.5)), to(transparent));\n  /* Safari 4+, Chrome */\n  background-image: -webkit-linear-gradient(right, rgba(0, 0, 0, 0.5), transparent);\n  /* Chrome 10+, Safari 5.1+, iOS 5+ */\n  /* Firefox 3.6-15 */\n  /* Opera 11.10-12.00 */\n  background-image: linear-gradient(to left, rgba(0, 0, 0, 0.5), transparent);\n  /* Firefox 16+, IE10, Opera 12.50+ */ }\n\n.swiper-container-3d .swiper-slide-shadow-right {\n  background-image: -webkit-gradient(linear, right top, left top, from(rgba(0, 0, 0, 0.5)), to(transparent));\n  /* Safari 4+, Chrome */\n  background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, 0.5), transparent);\n  /* Chrome 10+, Safari 5.1+, iOS 5+ */\n  /* Firefox 3.6-15 */\n  /* Opera 11.10-12.00 */\n  background-image: linear-gradient(to right, rgba(0, 0, 0, 0.5), transparent);\n  /* Firefox 16+, IE10, Opera 12.50+ */ }\n\n.swiper-container-3d .swiper-slide-shadow-top {\n  background-image: -webkit-gradient(linear, left top, left bottom, from(rgba(0, 0, 0, 0.5)), to(transparent));\n  /* Safari 4+, Chrome */\n  background-image: -webkit-linear-gradient(bottom, rgba(0, 0, 0, 0.5), transparent);\n  /* Chrome 10+, Safari 5.1+, iOS 5+ */\n  /* Firefox 3.6-15 */\n  /* Opera 11.10-12.00 */\n  background-image: linear-gradient(to top, rgba(0, 0, 0, 0.5), transparent);\n  /* Firefox 16+, IE10, Opera 12.50+ */ }\n\n.swiper-container-3d .swiper-slide-shadow-bottom {\n  background-image: -webkit-gradient(linear, left bottom, left top, from(rgba(0, 0, 0, 0.5)), to(transparent));\n  /* Safari 4+, Chrome */\n  background-image: -webkit-linear-gradient(top, rgba(0, 0, 0, 0.5), transparent);\n  /* Chrome 10+, Safari 5.1+, iOS 5+ */\n  /* Firefox 3.6-15 */\n  /* Opera 11.10-12.00 */\n  background-image: linear-gradient(to bottom, rgba(0, 0, 0, 0.5), transparent);\n  /* Firefox 16+, IE10, Opera 12.50+ */ }\n\n/* Coverflow */\n.swiper-container-coverflow .swiper-wrapper {\n  /* Windows 8 IE 10 fix */\n  -ms-perspective: 1200px; }\n\n/* Fade */\n.swiper-container-fade.swiper-container-free-mode .swiper-slide {\n  -webkit-transition-timing-function: ease-out;\n  transition-timing-function: ease-out; }\n\n.swiper-container-fade .swiper-slide {\n  pointer-events: none; }\n\n.swiper-container-fade .swiper-slide .swiper-slide {\n  pointer-events: none; }\n\n.swiper-container-fade .swiper-slide-active,\n.swiper-container-fade .swiper-slide-active .swiper-slide-active {\n  pointer-events: auto; }\n\n/* Cube */\n.swiper-container-cube {\n  overflow: visible; }\n\n.swiper-container-cube .swiper-slide {\n  pointer-events: none;\n  visibility: hidden;\n  -webkit-transform-origin: 0 0;\n  transform-origin: 0 0;\n  -webkit-backface-visibility: hidden;\n  -ms-backface-visibility: hidden;\n  backface-visibility: hidden;\n  width: 100%;\n  height: 100%;\n  z-index: 1; }\n\n.swiper-container-cube.swiper-container-rtl .swiper-slide {\n  -webkit-transform-origin: 100% 0;\n  transform-origin: 100% 0; }\n\n.swiper-container-cube .swiper-slide-active,\n.swiper-container-cube .swiper-slide-next,\n.swiper-container-cube .swiper-slide-prev,\n.swiper-container-cube .swiper-slide-next + .swiper-slide {\n  pointer-events: auto;\n  visibility: visible; }\n\n.swiper-container-cube .swiper-slide-shadow-top,\n.swiper-container-cube .swiper-slide-shadow-bottom,\n.swiper-container-cube .swiper-slide-shadow-left,\n.swiper-container-cube .swiper-slide-shadow-right {\n  z-index: 0;\n  -webkit-backface-visibility: hidden;\n  -ms-backface-visibility: hidden;\n  backface-visibility: hidden; }\n\n.swiper-container-cube .swiper-cube-shadow {\n  position: absolute;\n  left: 0;\n  bottom: 0;\n  width: 100%;\n  height: 100%;\n  background: #000;\n  opacity: .6;\n  -webkit-filter: blur(50px);\n  filter: blur(50px);\n  z-index: 0; }\n\n/* Scrollbar */\n.swiper-scrollbar {\n  border-radius: 10px;\n  position: relative;\n  -ms-touch-action: none;\n  background: rgba(0, 0, 0, 0.1); }\n\n.swiper-container-horizontal > .swiper-scrollbar {\n  position: absolute;\n  left: 1%;\n  bottom: 3px;\n  z-index: 50;\n  height: 5px;\n  width: 98%; }\n\n.swiper-container-vertical > .swiper-scrollbar {\n  position: absolute;\n  right: 3px;\n  top: 1%;\n  z-index: 50;\n  width: 5px;\n  height: 98%; }\n\n.swiper-scrollbar-drag {\n  height: 100%;\n  width: 100%;\n  position: relative;\n  background: rgba(0, 0, 0, 0.5);\n  border-radius: 10px;\n  left: 0;\n  top: 0; }\n\n.swiper-scrollbar-cursor-drag {\n  cursor: move; }\n\n/* Preloader */\n.swiper-lazy-preloader {\n  width: 42px;\n  height: 42px;\n  position: absolute;\n  left: 50%;\n  top: 50%;\n  margin-left: -21px;\n  margin-top: -21px;\n  z-index: 10;\n  -webkit-transform-origin: 50%;\n  transform-origin: 50%;\n  -webkit-animation: swiper-preloader-spin 1s steps(12, end) infinite;\n  animation: swiper-preloader-spin 1s steps(12, end) infinite; }\n\n.swiper-lazy-preloader:after {\n  display: block;\n  content: \"\";\n  width: 100%;\n  height: 100%;\n  background-image: url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20viewBox%3D'0%200%20120%20120'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20xmlns%3Axlink%3D'http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink'%3E%3Cdefs%3E%3Cline%20id%3D'l'%20x1%3D'60'%20x2%3D'60'%20y1%3D'7'%20y2%3D'27'%20stroke%3D'%236c6c6c'%20stroke-width%3D'11'%20stroke-linecap%3D'round'%2F%3E%3C%2Fdefs%3E%3Cg%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(30%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(60%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(90%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(120%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(150%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.37'%20transform%3D'rotate(180%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.46'%20transform%3D'rotate(210%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.56'%20transform%3D'rotate(240%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.66'%20transform%3D'rotate(270%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.75'%20transform%3D'rotate(300%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.85'%20transform%3D'rotate(330%2060%2C60)'%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E\");\n  background-position: 50%;\n  background-size: 100%;\n  background-repeat: no-repeat; }\n\n.swiper-lazy-preloader-white:after {\n  background-image: url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20viewBox%3D'0%200%20120%20120'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20xmlns%3Axlink%3D'http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink'%3E%3Cdefs%3E%3Cline%20id%3D'l'%20x1%3D'60'%20x2%3D'60'%20y1%3D'7'%20y2%3D'27'%20stroke%3D'%23fff'%20stroke-width%3D'11'%20stroke-linecap%3D'round'%2F%3E%3C%2Fdefs%3E%3Cg%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(30%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(60%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(90%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(120%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(150%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.37'%20transform%3D'rotate(180%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.46'%20transform%3D'rotate(210%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.56'%20transform%3D'rotate(240%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.66'%20transform%3D'rotate(270%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.75'%20transform%3D'rotate(300%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.85'%20transform%3D'rotate(330%2060%2C60)'%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E\"); }\n\n@-webkit-keyframes swiper-preloader-spin {\n  100% {\n    -webkit-transform: rotate(360deg); } }\n\n@keyframes swiper-preloader-spin {\n  100% {\n    -webkit-transform: rotate(360deg);\n    transform: rotate(360deg); } }\n\nion-slides {\n  width: 100%;\n  height: 100%;\n  display: block; }\n\n.slide-zoom {\n  display: block;\n  width: 100%;\n  text-align: center; }\n\n.swiper-container {\n  width: 100%;\n  height: 100%;\n  padding: 0;\n  display: -webkit-box;\n  display: -webkit-flex;\n  display: -ms-flexbox;\n  display: flex;\n  overflow: hidden; }\n\n.swiper-wrapper {\n  width: 100%;\n  height: 100%;\n  padding: 0;\n  display: -webkit-box;\n  display: -webkit-flex;\n  display: -ms-flexbox;\n  display: flex; }\n\n.swiper-slide {\n  width: 100%;\n  height: 100%;\n  box-sizing: border-box;\n  text-align: center;\n  font-size: 18px;\n  /* Center slide text vertically */\n  display: -webkit-box;\n  display: -webkit-flex;\n  display: -ms-flexbox;\n  display: flex;\n  -webkit-box-pack: center;\n  -webkit-justify-content: center;\n  -ms-flex-pack: center;\n  justify-content: center;\n  -webkit-box-align: center;\n  -webkit-align-items: center;\n  -ms-flex-align: center;\n  align-items: center; }\n  .swiper-slide img {\n    width: auto;\n    height: auto;\n    max-width: 100%;\n    max-height: 100%; }\n\nion-spinner {\n  position: relative;\n  display: inline-block;\n  width: 28px;\n  height: 28px; }\n\nion-spinner svg {\n  position: absolute;\n  top: 0;\n  left: 0;\n  width: 100%;\n  height: 100%;\n  -webkit-transform: translateZ(0);\n  transform: translateZ(0); }\n\nion-spinner.spinner-paused svg {\n  -webkit-animation-play-state: paused;\n  animation-play-state: paused; }\n\n.spinner-ios line,\n.spinner-ios-small line {\n  stroke: #69717d;\n  stroke-width: 4px;\n  stroke-linecap: round; }\n\n.spinner-ios svg,\n.spinner-ios-small svg {\n  -webkit-animation: spinner-fade-out 1s linear infinite;\n  animation: spinner-fade-out 1s linear infinite; }\n\n.spinner-bubbles circle {\n  fill: #000; }\n\n.spinner-bubbles svg {\n  -webkit-animation: spinner-scale-out 1s linear infinite;\n  animation: spinner-scale-out 1s linear infinite; }\n\n.spinner-circles circle {\n  fill: #69717d; }\n\n.spinner-circles svg {\n  -webkit-animation: spinner-fade-out 1s linear infinite;\n  animation: spinner-fade-out 1s linear infinite; }\n\n.spinner-crescent circle {\n  fill: transparent;\n  stroke: #000;\n  stroke-width: 4px;\n  stroke-dasharray: 128px;\n  stroke-dashoffset: 82px; }\n\n.spinner-crescent svg {\n  -webkit-animation: spinner-rotate 1s linear infinite;\n  animation: spinner-rotate 1s linear infinite; }\n\n.spinner-dots circle {\n  fill: #444;\n  stroke-width: 0; }\n\n.spinner-dots svg {\n  -webkit-transform-origin: center;\n  transform-origin: center;\n  -webkit-animation: spinner-dots 1s linear infinite;\n  animation: spinner-dots 1s linear infinite; }\n\n@-webkit-keyframes spinner-fade-out {\n  0% {\n    opacity: 1; }\n  100% {\n    opacity: 0; } }\n\n@keyframes spinner-fade-out {\n  0% {\n    opacity: 1; }\n  100% {\n    opacity: 0; } }\n\n@-webkit-keyframes spinner-scale-out {\n  0% {\n    -webkit-transform: scale(1, 1);\n    transform: scale(1, 1); }\n  100% {\n    -webkit-transform: scale(0, 0);\n    transform: scale(0, 0); } }\n\n@keyframes spinner-scale-out {\n  0% {\n    -webkit-transform: scale(1, 1);\n    transform: scale(1, 1); }\n  100% {\n    -webkit-transform: scale(0, 0);\n    transform: scale(0, 0); } }\n\n@-webkit-keyframes spinner-rotate {\n  0% {\n    -webkit-transform: rotate(0deg);\n    transform: rotate(0deg); }\n  100% {\n    -webkit-transform: rotate(360deg);\n    transform: rotate(360deg); } }\n\n@keyframes spinner-rotate {\n  0% {\n    -webkit-transform: rotate(0deg);\n    transform: rotate(0deg); }\n  100% {\n    -webkit-transform: rotate(360deg);\n    transform: rotate(360deg); } }\n\n@-webkit-keyframes spinner-dots {\n  0% {\n    opacity: .9;\n    -webkit-transform: scale(1, 1);\n    transform: scale(1, 1); }\n  50% {\n    opacity: .3;\n    -webkit-transform: scale(0.4, 0.4);\n    transform: scale(0.4, 0.4); }\n  100% {\n    opacity: .9;\n    -webkit-transform: scale(1, 1);\n    transform: scale(1, 1); } }\n\n@keyframes spinner-dots {\n  0% {\n    opacity: .9;\n    -webkit-transform: scale(1, 1);\n    transform: scale(1, 1); }\n  50% {\n    opacity: .3;\n    -webkit-transform: scale(0.4, 0.4);\n    transform: scale(0.4, 0.4); }\n  100% {\n    opacity: .9;\n    -webkit-transform: scale(1, 1);\n    transform: scale(1, 1); } }\n\nhtml {\n  font-size: 62.5%; }\n\na {\n  background-color: transparent; }\n\n.enable-hover a:hover {\n  opacity: .7; }\n\nh1,\nh2,\nh3,\nh4,\nh5,\nh6 {\n  margin-top: 1.6rem;\n  margin-bottom: 1rem;\n  font-weight: 500;\n  line-height: 1.2; }\n\n[padding] h1:first-child,\n[padding] h2:first-child,\n[padding] h3:first-child,\n[padding] h4:first-child,\n[padding] h5:first-child,\n[padding] h6:first-child {\n  margin-top: -.3rem; }\n\nh1 + h2,\nh1 + h3,\nh2 + h3 {\n  margin-top: -.3rem; }\n\nh1 {\n  margin-top: 2rem;\n  font-size: 2.6rem; }\n\nh2 {\n  margin-top: 1.8rem;\n  font-size: 2.4rem; }\n\nh3 {\n  font-size: 2.2rem; }\n\nh4 {\n  font-size: 2rem; }\n\nh5 {\n  font-size: 1.8rem; }\n\nh6 {\n  font-size: 1.6rem; }\n\nsmall {\n  font-size: 75%; }\n\nsub,\nsup {\n  position: relative;\n  font-size: 75%;\n  line-height: 0;\n  vertical-align: baseline; }\n\nsup {\n  top: -.5em; }\n\nsub {\n  bottom: -.25em; }\n\n[text-left] {\n  text-align: left; }\n\n[text-center] {\n  text-align: center; }\n\n[text-right] {\n  text-align: right; }\n\n[text-justify] {\n  text-align: justify; }\n\n[text-nowrap] {\n  white-space: nowrap; }\n\n[text-uppercase] {\n  text-transform: uppercase; }\n\n[text-lowercase] {\n  text-transform: lowercase; }\n\n[text-capitalize] {\n  text-transform: capitalize; }\n\n.virtual-scroll {\n  position: relative; }\n\n.virtual-scroll .virtual-position,\n.virtual-scroll .virtual-position.item {\n  position: absolute;\n  top: 0;\n  left: 0;\n  -webkit-transition-duration: 0ms;\n  transition-duration: 0ms; }\n\n.virtual-scroll .virtual-hidden {\n  display: none; }\n\n.ion-ios-add:before {\n  content: \"\\f102\"; }\n\n.ion-ios-add-circle:before {\n  content: \"\\f101\"; }\n\n.ion-ios-add-circle-outline:before {\n  content: \"\\f100\"; }\n\n.ion-ios-add-outline:before {\n  content: \"\\f102\"; }\n\n.ion-ios-alarm:before {\n  content: \"\\f3c8\"; }\n\n.ion-ios-alarm-outline:before {\n  content: \"\\f3c7\"; }\n\n.ion-ios-albums:before {\n  content: \"\\f3ca\"; }\n\n.ion-ios-albums-outline:before {\n  content: \"\\f3c9\"; }\n\n.ion-ios-alert:before {\n  content: \"\\f104\"; }\n\n.ion-ios-alert-outline:before {\n  content: \"\\f103\"; }\n\n.ion-ios-american-football:before {\n  content: \"\\f106\"; }\n\n.ion-ios-american-football-outline:before {\n  content: \"\\f105\"; }\n\n.ion-ios-analytics:before {\n  content: \"\\f3ce\"; }\n\n.ion-ios-analytics-outline:before {\n  content: \"\\f3cd\"; }\n\n.ion-ios-aperture:before {\n  content: \"\\f108\"; }\n\n.ion-ios-aperture-outline:before {\n  content: \"\\f107\"; }\n\n.ion-ios-apps:before {\n  content: \"\\f10a\"; }\n\n.ion-ios-apps-outline:before {\n  content: \"\\f109\"; }\n\n.ion-ios-appstore:before {\n  content: \"\\f10c\"; }\n\n.ion-ios-appstore-outline:before {\n  content: \"\\f10b\"; }\n\n.ion-ios-archive:before {\n  content: \"\\f10e\"; }\n\n.ion-ios-archive-outline:before {\n  content: \"\\f10d\"; }\n\n.ion-ios-arrow-back:before {\n  content: \"\\f3cf\"; }\n\n.ion-ios-arrow-back-outline:before {\n  content: \"\\f3cf\"; }\n\n.ion-ios-arrow-down:before {\n  content: \"\\f3d0\"; }\n\n.ion-ios-arrow-down-outline:before {\n  content: \"\\f3d0\"; }\n\n.ion-ios-arrow-dropdown:before {\n  content: \"\\f110\"; }\n\n.ion-ios-arrow-dropdown-circle:before {\n  content: \"\\f10f\"; }\n\n.ion-ios-arrow-dropdown-circle-outline:before {\n  content: \"\\f10f\"; }\n\n.ion-ios-arrow-dropdown-outline:before {\n  content: \"\\f110\"; }\n\n.ion-ios-arrow-dropleft:before {\n  content: \"\\f112\"; }\n\n.ion-ios-arrow-dropleft-circle:before {\n  content: \"\\f111\"; }\n\n.ion-ios-arrow-dropleft-circle-outline:before {\n  content: \"\\f111\"; }\n\n.ion-ios-arrow-dropleft-outline:before {\n  content: \"\\f112\"; }\n\n.ion-ios-arrow-dropright:before {\n  content: \"\\f114\"; }\n\n.ion-ios-arrow-dropright-circle:before {\n  content: \"\\f113\"; }\n\n.ion-ios-arrow-dropright-circle-outline:before {\n  content: \"\\f113\"; }\n\n.ion-ios-arrow-dropright-outline:before {\n  content: \"\\f114\"; }\n\n.ion-ios-arrow-dropup:before {\n  content: \"\\f116\"; }\n\n.ion-ios-arrow-dropup-circle:before {\n  content: \"\\f115\"; }\n\n.ion-ios-arrow-dropup-circle-outline:before {\n  content: \"\\f115\"; }\n\n.ion-ios-arrow-dropup-outline:before {\n  content: \"\\f116\"; }\n\n.ion-ios-arrow-forward:before {\n  content: \"\\f3d1\"; }\n\n.ion-ios-arrow-forward-outline:before {\n  content: \"\\f3d1\"; }\n\n.ion-ios-arrow-round-back:before {\n  content: \"\\f117\"; }\n\n.ion-ios-arrow-round-back-outline:before {\n  content: \"\\f117\"; }\n\n.ion-ios-arrow-round-down:before {\n  content: \"\\f118\"; }\n\n.ion-ios-arrow-round-down-outline:before {\n  content: \"\\f118\"; }\n\n.ion-ios-arrow-round-forward:before {\n  content: \"\\f119\"; }\n\n.ion-ios-arrow-round-forward-outline:before {\n  content: \"\\f119\"; }\n\n.ion-ios-arrow-round-up:before {\n  content: \"\\f11a\"; }\n\n.ion-ios-arrow-round-up-outline:before {\n  content: \"\\f11a\"; }\n\n.ion-ios-arrow-up:before {\n  content: \"\\f3d8\"; }\n\n.ion-ios-arrow-up-outline:before {\n  content: \"\\f3d8\"; }\n\n.ion-ios-at:before {\n  content: \"\\f3da\"; }\n\n.ion-ios-at-outline:before {\n  content: \"\\f3d9\"; }\n\n.ion-ios-attach:before {\n  content: \"\\f11b\"; }\n\n.ion-ios-attach-outline:before {\n  content: \"\\f11b\"; }\n\n.ion-ios-backspace:before {\n  content: \"\\f11d\"; }\n\n.ion-ios-backspace-outline:before {\n  content: \"\\f11c\"; }\n\n.ion-ios-barcode:before {\n  content: \"\\f3dc\"; }\n\n.ion-ios-barcode-outline:before {\n  content: \"\\f3db\"; }\n\n.ion-ios-baseball:before {\n  content: \"\\f3de\"; }\n\n.ion-ios-baseball-outline:before {\n  content: \"\\f3dd\"; }\n\n.ion-ios-basket:before {\n  content: \"\\f11f\"; }\n\n.ion-ios-basket-outline:before {\n  content: \"\\f11e\"; }\n\n.ion-ios-basketball:before {\n  content: \"\\f3e0\"; }\n\n.ion-ios-basketball-outline:before {\n  content: \"\\f3df\"; }\n\n.ion-ios-battery-charging:before {\n  content: \"\\f120\"; }\n\n.ion-ios-battery-charging-outline:before {\n  content: \"\\f120\"; }\n\n.ion-ios-battery-dead:before {\n  content: \"\\f121\"; }\n\n.ion-ios-battery-dead-outline:before {\n  content: \"\\f121\"; }\n\n.ion-ios-battery-full:before {\n  content: \"\\f122\"; }\n\n.ion-ios-battery-full-outline:before {\n  content: \"\\f122\"; }\n\n.ion-ios-beaker:before {\n  content: \"\\f124\"; }\n\n.ion-ios-beaker-outline:before {\n  content: \"\\f123\"; }\n\n.ion-ios-beer:before {\n  content: \"\\f126\"; }\n\n.ion-ios-beer-outline:before {\n  content: \"\\f125\"; }\n\n.ion-ios-bicycle:before {\n  content: \"\\f127\"; }\n\n.ion-ios-bicycle-outline:before {\n  content: \"\\f127\"; }\n\n.ion-ios-bluetooth:before {\n  content: \"\\f128\"; }\n\n.ion-ios-bluetooth-outline:before {\n  content: \"\\f128\"; }\n\n.ion-ios-boat:before {\n  content: \"\\f12a\"; }\n\n.ion-ios-boat-outline:before {\n  content: \"\\f129\"; }\n\n.ion-ios-body:before {\n  content: \"\\f3e4\"; }\n\n.ion-ios-body-outline:before {\n  content: \"\\f3e3\"; }\n\n.ion-ios-bonfire:before {\n  content: \"\\f12c\"; }\n\n.ion-ios-bonfire-outline:before {\n  content: \"\\f12b\"; }\n\n.ion-ios-book:before {\n  content: \"\\f3e8\"; }\n\n.ion-ios-book-outline:before {\n  content: \"\\f3e7\"; }\n\n.ion-ios-bookmark:before {\n  content: \"\\f12e\"; }\n\n.ion-ios-bookmark-outline:before {\n  content: \"\\f12d\"; }\n\n.ion-ios-bookmarks:before {\n  content: \"\\f3ea\"; }\n\n.ion-ios-bookmarks-outline:before {\n  content: \"\\f3e9\"; }\n\n.ion-ios-bowtie:before {\n  content: \"\\f130\"; }\n\n.ion-ios-bowtie-outline:before {\n  content: \"\\f12f\"; }\n\n.ion-ios-briefcase:before {\n  content: \"\\f3ee\"; }\n\n.ion-ios-briefcase-outline:before {\n  content: \"\\f3ed\"; }\n\n.ion-ios-browsers:before {\n  content: \"\\f3f0\"; }\n\n.ion-ios-browsers-outline:before {\n  content: \"\\f3ef\"; }\n\n.ion-ios-brush:before {\n  content: \"\\f132\"; }\n\n.ion-ios-brush-outline:before {\n  content: \"\\f131\"; }\n\n.ion-ios-bug:before {\n  content: \"\\f134\"; }\n\n.ion-ios-bug-outline:before {\n  content: \"\\f133\"; }\n\n.ion-ios-build:before {\n  content: \"\\f136\"; }\n\n.ion-ios-build-outline:before {\n  content: \"\\f135\"; }\n\n.ion-ios-bulb:before {\n  content: \"\\f138\"; }\n\n.ion-ios-bulb-outline:before {\n  content: \"\\f137\"; }\n\n.ion-ios-bus:before {\n  content: \"\\f13a\"; }\n\n.ion-ios-bus-outline:before {\n  content: \"\\f139\"; }\n\n.ion-ios-cafe:before {\n  content: \"\\f13c\"; }\n\n.ion-ios-cafe-outline:before {\n  content: \"\\f13b\"; }\n\n.ion-ios-calculator:before {\n  content: \"\\f3f2\"; }\n\n.ion-ios-calculator-outline:before {\n  content: \"\\f3f1\"; }\n\n.ion-ios-calendar:before {\n  content: \"\\f3f4\"; }\n\n.ion-ios-calendar-outline:before {\n  content: \"\\f3f3\"; }\n\n.ion-ios-call:before {\n  content: \"\\f13e\"; }\n\n.ion-ios-call-outline:before {\n  content: \"\\f13d\"; }\n\n.ion-ios-camera:before {\n  content: \"\\f3f6\"; }\n\n.ion-ios-camera-outline:before {\n  content: \"\\f3f5\"; }\n\n.ion-ios-car:before {\n  content: \"\\f140\"; }\n\n.ion-ios-car-outline:before {\n  content: \"\\f13f\"; }\n\n.ion-ios-card:before {\n  content: \"\\f142\"; }\n\n.ion-ios-card-outline:before {\n  content: \"\\f141\"; }\n\n.ion-ios-cart:before {\n  content: \"\\f3f8\"; }\n\n.ion-ios-cart-outline:before {\n  content: \"\\f3f7\"; }\n\n.ion-ios-cash:before {\n  content: \"\\f144\"; }\n\n.ion-ios-cash-outline:before {\n  content: \"\\f143\"; }\n\n.ion-ios-chatboxes:before {\n  content: \"\\f3fa\"; }\n\n.ion-ios-chatboxes-outline:before {\n  content: \"\\f3f9\"; }\n\n.ion-ios-chatbubbles:before {\n  content: \"\\f146\"; }\n\n.ion-ios-chatbubbles-outline:before {\n  content: \"\\f145\"; }\n\n.ion-ios-checkbox:before {\n  content: \"\\f148\"; }\n\n.ion-ios-checkbox-outline:before {\n  content: \"\\f147\"; }\n\n.ion-ios-checkmark:before {\n  content: \"\\f3ff\"; }\n\n.ion-ios-checkmark-circle:before {\n  content: \"\\f14a\"; }\n\n.ion-ios-checkmark-circle-outline:before {\n  content: \"\\f149\"; }\n\n.ion-ios-checkmark-outline:before {\n  content: \"\\f3ff\"; }\n\n.ion-ios-clipboard:before {\n  content: \"\\f14c\"; }\n\n.ion-ios-clipboard-outline:before {\n  content: \"\\f14b\"; }\n\n.ion-ios-clock:before {\n  content: \"\\f403\"; }\n\n.ion-ios-clock-outline:before {\n  content: \"\\f402\"; }\n\n.ion-ios-close:before {\n  content: \"\\f406\"; }\n\n.ion-ios-close-circle:before {\n  content: \"\\f14e\"; }\n\n.ion-ios-close-circle-outline:before {\n  content: \"\\f14d\"; }\n\n.ion-ios-close-outline:before {\n  content: \"\\f406\"; }\n\n.ion-ios-closed-captioning:before {\n  content: \"\\f150\"; }\n\n.ion-ios-closed-captioning-outline:before {\n  content: \"\\f14f\"; }\n\n.ion-ios-cloud:before {\n  content: \"\\f40c\"; }\n\n.ion-ios-cloud-circle:before {\n  content: \"\\f152\"; }\n\n.ion-ios-cloud-circle-outline:before {\n  content: \"\\f151\"; }\n\n.ion-ios-cloud-done:before {\n  content: \"\\f154\"; }\n\n.ion-ios-cloud-done-outline:before {\n  content: \"\\f153\"; }\n\n.ion-ios-cloud-download:before {\n  content: \"\\f408\"; }\n\n.ion-ios-cloud-download-outline:before {\n  content: \"\\f407\"; }\n\n.ion-ios-cloud-outline:before {\n  content: \"\\f409\"; }\n\n.ion-ios-cloud-upload:before {\n  content: \"\\f40b\"; }\n\n.ion-ios-cloud-upload-outline:before {\n  content: \"\\f40a\"; }\n\n.ion-ios-cloudy:before {\n  content: \"\\f410\"; }\n\n.ion-ios-cloudy-night:before {\n  content: \"\\f40e\"; }\n\n.ion-ios-cloudy-night-outline:before {\n  content: \"\\f40d\"; }\n\n.ion-ios-cloudy-outline:before {\n  content: \"\\f40f\"; }\n\n.ion-ios-code:before {\n  content: \"\\f157\"; }\n\n.ion-ios-code-download:before {\n  content: \"\\f155\"; }\n\n.ion-ios-code-download-outline:before {\n  content: \"\\f155\"; }\n\n.ion-ios-code-outline:before {\n  content: \"\\f157\"; }\n\n.ion-ios-code-working:before {\n  content: \"\\f156\"; }\n\n.ion-ios-code-working-outline:before {\n  content: \"\\f156\"; }\n\n.ion-ios-cog:before {\n  content: \"\\f412\"; }\n\n.ion-ios-cog-outline:before {\n  content: \"\\f411\"; }\n\n.ion-ios-color-fill:before {\n  content: \"\\f159\"; }\n\n.ion-ios-color-fill-outline:before {\n  content: \"\\f158\"; }\n\n.ion-ios-color-filter:before {\n  content: \"\\f414\"; }\n\n.ion-ios-color-filter-outline:before {\n  content: \"\\f413\"; }\n\n.ion-ios-color-palette:before {\n  content: \"\\f15b\"; }\n\n.ion-ios-color-palette-outline:before {\n  content: \"\\f15a\"; }\n\n.ion-ios-color-wand:before {\n  content: \"\\f416\"; }\n\n.ion-ios-color-wand-outline:before {\n  content: \"\\f415\"; }\n\n.ion-ios-compass:before {\n  content: \"\\f15d\"; }\n\n.ion-ios-compass-outline:before {\n  content: \"\\f15c\"; }\n\n.ion-ios-construct:before {\n  content: \"\\f15f\"; }\n\n.ion-ios-construct-outline:before {\n  content: \"\\f15e\"; }\n\n.ion-ios-contact:before {\n  content: \"\\f41a\"; }\n\n.ion-ios-contact-outline:before {\n  content: \"\\f419\"; }\n\n.ion-ios-contacts:before {\n  content: \"\\f161\"; }\n\n.ion-ios-contacts-outline:before {\n  content: \"\\f160\"; }\n\n.ion-ios-contract:before {\n  content: \"\\f162\"; }\n\n.ion-ios-contract-outline:before {\n  content: \"\\f162\"; }\n\n.ion-ios-contrast:before {\n  content: \"\\f163\"; }\n\n.ion-ios-contrast-outline:before {\n  content: \"\\f163\"; }\n\n.ion-ios-copy:before {\n  content: \"\\f41c\"; }\n\n.ion-ios-copy-outline:before {\n  content: \"\\f41b\"; }\n\n.ion-ios-create:before {\n  content: \"\\f165\"; }\n\n.ion-ios-create-outline:before {\n  content: \"\\f164\"; }\n\n.ion-ios-crop:before {\n  content: \"\\f41e\"; }\n\n.ion-ios-crop-outline:before {\n  content: \"\\f166\"; }\n\n.ion-ios-cube:before {\n  content: \"\\f168\"; }\n\n.ion-ios-cube-outline:before {\n  content: \"\\f167\"; }\n\n.ion-ios-cut:before {\n  content: \"\\f16a\"; }\n\n.ion-ios-cut-outline:before {\n  content: \"\\f169\"; }\n\n.ion-ios-desktop:before {\n  content: \"\\f16c\"; }\n\n.ion-ios-desktop-outline:before {\n  content: \"\\f16b\"; }\n\n.ion-ios-disc:before {\n  content: \"\\f16e\"; }\n\n.ion-ios-disc-outline:before {\n  content: \"\\f16d\"; }\n\n.ion-ios-document:before {\n  content: \"\\f170\"; }\n\n.ion-ios-document-outline:before {\n  content: \"\\f16f\"; }\n\n.ion-ios-done-all:before {\n  content: \"\\f171\"; }\n\n.ion-ios-done-all-outline:before {\n  content: \"\\f171\"; }\n\n.ion-ios-download:before {\n  content: \"\\f420\"; }\n\n.ion-ios-download-outline:before {\n  content: \"\\f41f\"; }\n\n.ion-ios-easel:before {\n  content: \"\\f173\"; }\n\n.ion-ios-easel-outline:before {\n  content: \"\\f172\"; }\n\n.ion-ios-egg:before {\n  content: \"\\f175\"; }\n\n.ion-ios-egg-outline:before {\n  content: \"\\f174\"; }\n\n.ion-ios-exit:before {\n  content: \"\\f177\"; }\n\n.ion-ios-exit-outline:before {\n  content: \"\\f176\"; }\n\n.ion-ios-expand:before {\n  content: \"\\f178\"; }\n\n.ion-ios-expand-outline:before {\n  content: \"\\f178\"; }\n\n.ion-ios-eye:before {\n  content: \"\\f425\"; }\n\n.ion-ios-eye-off:before {\n  content: \"\\f17a\"; }\n\n.ion-ios-eye-off-outline:before {\n  content: \"\\f179\"; }\n\n.ion-ios-eye-outline:before {\n  content: \"\\f424\"; }\n\n.ion-ios-fastforward:before {\n  content: \"\\f427\"; }\n\n.ion-ios-fastforward-outline:before {\n  content: \"\\f426\"; }\n\n.ion-ios-female:before {\n  content: \"\\f17b\"; }\n\n.ion-ios-female-outline:before {\n  content: \"\\f17b\"; }\n\n.ion-ios-filing:before {\n  content: \"\\f429\"; }\n\n.ion-ios-filing-outline:before {\n  content: \"\\f428\"; }\n\n.ion-ios-film:before {\n  content: \"\\f42b\"; }\n\n.ion-ios-film-outline:before {\n  content: \"\\f42a\"; }\n\n.ion-ios-finger-print:before {\n  content: \"\\f17c\"; }\n\n.ion-ios-finger-print-outline:before {\n  content: \"\\f17c\"; }\n\n.ion-ios-flag:before {\n  content: \"\\f42d\"; }\n\n.ion-ios-flag-outline:before {\n  content: \"\\f42c\"; }\n\n.ion-ios-flame:before {\n  content: \"\\f42f\"; }\n\n.ion-ios-flame-outline:before {\n  content: \"\\f42e\"; }\n\n.ion-ios-flash:before {\n  content: \"\\f17e\"; }\n\n.ion-ios-flash-outline:before {\n  content: \"\\f17d\"; }\n\n.ion-ios-flask:before {\n  content: \"\\f431\"; }\n\n.ion-ios-flask-outline:before {\n  content: \"\\f430\"; }\n\n.ion-ios-flower:before {\n  content: \"\\f433\"; }\n\n.ion-ios-flower-outline:before {\n  content: \"\\f432\"; }\n\n.ion-ios-folder:before {\n  content: \"\\f435\"; }\n\n.ion-ios-folder-open:before {\n  content: \"\\f180\"; }\n\n.ion-ios-folder-open-outline:before {\n  content: \"\\f17f\"; }\n\n.ion-ios-folder-outline:before {\n  content: \"\\f434\"; }\n\n.ion-ios-football:before {\n  content: \"\\f437\"; }\n\n.ion-ios-football-outline:before {\n  content: \"\\f436\"; }\n\n.ion-ios-funnel:before {\n  content: \"\\f182\"; }\n\n.ion-ios-funnel-outline:before {\n  content: \"\\f181\"; }\n\n.ion-ios-game-controller-a:before {\n  content: \"\\f439\"; }\n\n.ion-ios-game-controller-a-outline:before {\n  content: \"\\f438\"; }\n\n.ion-ios-game-controller-b:before {\n  content: \"\\f43b\"; }\n\n.ion-ios-game-controller-b-outline:before {\n  content: \"\\f43a\"; }\n\n.ion-ios-git-branch:before {\n  content: \"\\f183\"; }\n\n.ion-ios-git-branch-outline:before {\n  content: \"\\f183\"; }\n\n.ion-ios-git-commit:before {\n  content: \"\\f184\"; }\n\n.ion-ios-git-commit-outline:before {\n  content: \"\\f184\"; }\n\n.ion-ios-git-compare:before {\n  content: \"\\f185\"; }\n\n.ion-ios-git-compare-outline:before {\n  content: \"\\f185\"; }\n\n.ion-ios-git-merge:before {\n  content: \"\\f186\"; }\n\n.ion-ios-git-merge-outline:before {\n  content: \"\\f186\"; }\n\n.ion-ios-git-network:before {\n  content: \"\\f187\"; }\n\n.ion-ios-git-network-outline:before {\n  content: \"\\f187\"; }\n\n.ion-ios-git-pull-request:before {\n  content: \"\\f188\"; }\n\n.ion-ios-git-pull-request-outline:before {\n  content: \"\\f188\"; }\n\n.ion-ios-glasses:before {\n  content: \"\\f43f\"; }\n\n.ion-ios-glasses-outline:before {\n  content: \"\\f43e\"; }\n\n.ion-ios-globe:before {\n  content: \"\\f18a\"; }\n\n.ion-ios-globe-outline:before {\n  content: \"\\f189\"; }\n\n.ion-ios-grid:before {\n  content: \"\\f18c\"; }\n\n.ion-ios-grid-outline:before {\n  content: \"\\f18b\"; }\n\n.ion-ios-hammer:before {\n  content: \"\\f18e\"; }\n\n.ion-ios-hammer-outline:before {\n  content: \"\\f18d\"; }\n\n.ion-ios-hand:before {\n  content: \"\\f190\"; }\n\n.ion-ios-hand-outline:before {\n  content: \"\\f18f\"; }\n\n.ion-ios-happy:before {\n  content: \"\\f192\"; }\n\n.ion-ios-happy-outline:before {\n  content: \"\\f191\"; }\n\n.ion-ios-headset:before {\n  content: \"\\f194\"; }\n\n.ion-ios-headset-outline:before {\n  content: \"\\f193\"; }\n\n.ion-ios-heart:before {\n  content: \"\\f443\"; }\n\n.ion-ios-heart-outline:before {\n  content: \"\\f442\"; }\n\n.ion-ios-help:before {\n  content: \"\\f446\"; }\n\n.ion-ios-help-buoy:before {\n  content: \"\\f196\"; }\n\n.ion-ios-help-buoy-outline:before {\n  content: \"\\f195\"; }\n\n.ion-ios-help-circle:before {\n  content: \"\\f198\"; }\n\n.ion-ios-help-circle-outline:before {\n  content: \"\\f197\"; }\n\n.ion-ios-help-outline:before {\n  content: \"\\f446\"; }\n\n.ion-ios-home:before {\n  content: \"\\f448\"; }\n\n.ion-ios-home-outline:before {\n  content: \"\\f447\"; }\n\n.ion-ios-ice-cream:before {\n  content: \"\\f19a\"; }\n\n.ion-ios-ice-cream-outline:before {\n  content: \"\\f199\"; }\n\n.ion-ios-image:before {\n  content: \"\\f19c\"; }\n\n.ion-ios-image-outline:before {\n  content: \"\\f19b\"; }\n\n.ion-ios-images:before {\n  content: \"\\f19e\"; }\n\n.ion-ios-images-outline:before {\n  content: \"\\f19d\"; }\n\n.ion-ios-infinite:before {\n  content: \"\\f44a\"; }\n\n.ion-ios-infinite-outline:before {\n  content: \"\\f449\"; }\n\n.ion-ios-information:before {\n  content: \"\\f44d\"; }\n\n.ion-ios-information-circle:before {\n  content: \"\\f1a0\"; }\n\n.ion-ios-information-circle-outline:before {\n  content: \"\\f19f\"; }\n\n.ion-ios-information-outline:before {\n  content: \"\\f44d\"; }\n\n.ion-ios-ionic:before {\n  content: \"\\f1a1\"; }\n\n.ion-ios-ionic-outline:before {\n  content: \"\\f44e\"; }\n\n.ion-ios-ionitron:before {\n  content: \"\\f1a3\"; }\n\n.ion-ios-ionitron-outline:before {\n  content: \"\\f1a2\"; }\n\n.ion-ios-jet:before {\n  content: \"\\f1a5\"; }\n\n.ion-ios-jet-outline:before {\n  content: \"\\f1a4\"; }\n\n.ion-ios-key:before {\n  content: \"\\f1a7\"; }\n\n.ion-ios-key-outline:before {\n  content: \"\\f1a6\"; }\n\n.ion-ios-keypad:before {\n  content: \"\\f450\"; }\n\n.ion-ios-keypad-outline:before {\n  content: \"\\f44f\"; }\n\n.ion-ios-laptop:before {\n  content: \"\\f1a8\"; }\n\n.ion-ios-laptop-outline:before {\n  content: \"\\f1a8\"; }\n\n.ion-ios-leaf:before {\n  content: \"\\f1aa\"; }\n\n.ion-ios-leaf-outline:before {\n  content: \"\\f1a9\"; }\n\n.ion-ios-link:before {\n  content: \"\\f22a\"; }\n\n.ion-ios-link-outline:before {\n  content: \"\\f1ca\"; }\n\n.ion-ios-list:before {\n  content: \"\\f454\"; }\n\n.ion-ios-list-box:before {\n  content: \"\\f1ac\"; }\n\n.ion-ios-list-box-outline:before {\n  content: \"\\f1ab\"; }\n\n.ion-ios-list-outline:before {\n  content: \"\\f454\"; }\n\n.ion-ios-locate:before {\n  content: \"\\f1ae\"; }\n\n.ion-ios-locate-outline:before {\n  content: \"\\f1ad\"; }\n\n.ion-ios-lock:before {\n  content: \"\\f1b0\"; }\n\n.ion-ios-lock-outline:before {\n  content: \"\\f1af\"; }\n\n.ion-ios-log-in:before {\n  content: \"\\f1b1\"; }\n\n.ion-ios-log-in-outline:before {\n  content: \"\\f1b1\"; }\n\n.ion-ios-log-out:before {\n  content: \"\\f1b2\"; }\n\n.ion-ios-log-out-outline:before {\n  content: \"\\f1b2\"; }\n\n.ion-ios-magnet:before {\n  content: \"\\f1b4\"; }\n\n.ion-ios-magnet-outline:before {\n  content: \"\\f1b3\"; }\n\n.ion-ios-mail:before {\n  content: \"\\f1b8\"; }\n\n.ion-ios-mail-open:before {\n  content: \"\\f1b6\"; }\n\n.ion-ios-mail-open-outline:before {\n  content: \"\\f1b5\"; }\n\n.ion-ios-mail-outline:before {\n  content: \"\\f1b7\"; }\n\n.ion-ios-male:before {\n  content: \"\\f1b9\"; }\n\n.ion-ios-male-outline:before {\n  content: \"\\f1b9\"; }\n\n.ion-ios-man:before {\n  content: \"\\f1bb\"; }\n\n.ion-ios-man-outline:before {\n  content: \"\\f1ba\"; }\n\n.ion-ios-map:before {\n  content: \"\\f1bd\"; }\n\n.ion-ios-map-outline:before {\n  content: \"\\f1bc\"; }\n\n.ion-ios-medal:before {\n  content: \"\\f1bf\"; }\n\n.ion-ios-medal-outline:before {\n  content: \"\\f1be\"; }\n\n.ion-ios-medical:before {\n  content: \"\\f45c\"; }\n\n.ion-ios-medical-outline:before {\n  content: \"\\f45b\"; }\n\n.ion-ios-medkit:before {\n  content: \"\\f45e\"; }\n\n.ion-ios-medkit-outline:before {\n  content: \"\\f45d\"; }\n\n.ion-ios-megaphone:before {\n  content: \"\\f1c1\"; }\n\n.ion-ios-megaphone-outline:before {\n  content: \"\\f1c0\"; }\n\n.ion-ios-menu:before {\n  content: \"\\f1c3\"; }\n\n.ion-ios-menu-outline:before {\n  content: \"\\f1c2\"; }\n\n.ion-ios-mic:before {\n  content: \"\\f461\"; }\n\n.ion-ios-mic-off:before {\n  content: \"\\f45f\"; }\n\n.ion-ios-mic-off-outline:before {\n  content: \"\\f1c4\"; }\n\n.ion-ios-mic-outline:before {\n  content: \"\\f460\"; }\n\n.ion-ios-microphone:before {\n  content: \"\\f1c6\"; }\n\n.ion-ios-microphone-outline:before {\n  content: \"\\f1c5\"; }\n\n.ion-ios-moon:before {\n  content: \"\\f468\"; }\n\n.ion-ios-moon-outline:before {\n  content: \"\\f467\"; }\n\n.ion-ios-more:before {\n  content: \"\\f1c8\"; }\n\n.ion-ios-more-outline:before {\n  content: \"\\f1c7\"; }\n\n.ion-ios-move:before {\n  content: \"\\f1cb\"; }\n\n.ion-ios-move-outline:before {\n  content: \"\\f1cb\"; }\n\n.ion-ios-musical-note:before {\n  content: \"\\f46b\"; }\n\n.ion-ios-musical-note-outline:before {\n  content: \"\\f1cc\"; }\n\n.ion-ios-musical-notes:before {\n  content: \"\\f46c\"; }\n\n.ion-ios-musical-notes-outline:before {\n  content: \"\\f1cd\"; }\n\n.ion-ios-navigate:before {\n  content: \"\\f46e\"; }\n\n.ion-ios-navigate-outline:before {\n  content: \"\\f46d\"; }\n\n.ion-ios-no-smoking:before {\n  content: \"\\f1cf\"; }\n\n.ion-ios-no-smoking-outline:before {\n  content: \"\\f1ce\"; }\n\n.ion-ios-notifications:before {\n  content: \"\\f1d3\"; }\n\n.ion-ios-notifications-off:before {\n  content: \"\\f1d1\"; }\n\n.ion-ios-notifications-off-outline:before {\n  content: \"\\f1d0\"; }\n\n.ion-ios-notifications-outline:before {\n  content: \"\\f1d2\"; }\n\n.ion-ios-nuclear:before {\n  content: \"\\f1d5\"; }\n\n.ion-ios-nuclear-outline:before {\n  content: \"\\f1d4\"; }\n\n.ion-ios-nutrition:before {\n  content: \"\\f470\"; }\n\n.ion-ios-nutrition-outline:before {\n  content: \"\\f46f\"; }\n\n.ion-ios-open:before {\n  content: \"\\f1d7\"; }\n\n.ion-ios-open-outline:before {\n  content: \"\\f1d6\"; }\n\n.ion-ios-options:before {\n  content: \"\\f1d9\"; }\n\n.ion-ios-options-outline:before {\n  content: \"\\f1d8\"; }\n\n.ion-ios-outlet:before {\n  content: \"\\f1db\"; }\n\n.ion-ios-outlet-outline:before {\n  content: \"\\f1da\"; }\n\n.ion-ios-paper:before {\n  content: \"\\f472\"; }\n\n.ion-ios-paper-outline:before {\n  content: \"\\f471\"; }\n\n.ion-ios-paper-plane:before {\n  content: \"\\f1dd\"; }\n\n.ion-ios-paper-plane-outline:before {\n  content: \"\\f1dc\"; }\n\n.ion-ios-partly-sunny:before {\n  content: \"\\f1df\"; }\n\n.ion-ios-partly-sunny-outline:before {\n  content: \"\\f1de\"; }\n\n.ion-ios-pause:before {\n  content: \"\\f478\"; }\n\n.ion-ios-pause-outline:before {\n  content: \"\\f477\"; }\n\n.ion-ios-paw:before {\n  content: \"\\f47a\"; }\n\n.ion-ios-paw-outline:before {\n  content: \"\\f479\"; }\n\n.ion-ios-people:before {\n  content: \"\\f47c\"; }\n\n.ion-ios-people-outline:before {\n  content: \"\\f47b\"; }\n\n.ion-ios-person:before {\n  content: \"\\f47e\"; }\n\n.ion-ios-person-add:before {\n  content: \"\\f1e1\"; }\n\n.ion-ios-person-add-outline:before {\n  content: \"\\f1e0\"; }\n\n.ion-ios-person-outline:before {\n  content: \"\\f47d\"; }\n\n.ion-ios-phone-landscape:before {\n  content: \"\\f1e2\"; }\n\n.ion-ios-phone-landscape-outline:before {\n  content: \"\\f1e2\"; }\n\n.ion-ios-phone-portrait:before {\n  content: \"\\f1e3\"; }\n\n.ion-ios-phone-portrait-outline:before {\n  content: \"\\f1e3\"; }\n\n.ion-ios-photos:before {\n  content: \"\\f482\"; }\n\n.ion-ios-photos-outline:before {\n  content: \"\\f481\"; }\n\n.ion-ios-pie:before {\n  content: \"\\f484\"; }\n\n.ion-ios-pie-outline:before {\n  content: \"\\f483\"; }\n\n.ion-ios-pin:before {\n  content: \"\\f1e5\"; }\n\n.ion-ios-pin-outline:before {\n  content: \"\\f1e4\"; }\n\n.ion-ios-pint:before {\n  content: \"\\f486\"; }\n\n.ion-ios-pint-outline:before {\n  content: \"\\f485\"; }\n\n.ion-ios-pizza:before {\n  content: \"\\f1e7\"; }\n\n.ion-ios-pizza-outline:before {\n  content: \"\\f1e6\"; }\n\n.ion-ios-plane:before {\n  content: \"\\f1e9\"; }\n\n.ion-ios-plane-outline:before {\n  content: \"\\f1e8\"; }\n\n.ion-ios-planet:before {\n  content: \"\\f1eb\"; }\n\n.ion-ios-planet-outline:before {\n  content: \"\\f1ea\"; }\n\n.ion-ios-play:before {\n  content: \"\\f488\"; }\n\n.ion-ios-play-outline:before {\n  content: \"\\f487\"; }\n\n.ion-ios-podium:before {\n  content: \"\\f1ed\"; }\n\n.ion-ios-podium-outline:before {\n  content: \"\\f1ec\"; }\n\n.ion-ios-power:before {\n  content: \"\\f1ef\"; }\n\n.ion-ios-power-outline:before {\n  content: \"\\f1ee\"; }\n\n.ion-ios-pricetag:before {\n  content: \"\\f48d\"; }\n\n.ion-ios-pricetag-outline:before {\n  content: \"\\f48c\"; }\n\n.ion-ios-pricetags:before {\n  content: \"\\f48f\"; }\n\n.ion-ios-pricetags-outline:before {\n  content: \"\\f48e\"; }\n\n.ion-ios-print:before {\n  content: \"\\f1f1\"; }\n\n.ion-ios-print-outline:before {\n  content: \"\\f1f0\"; }\n\n.ion-ios-pulse:before {\n  content: \"\\f493\"; }\n\n.ion-ios-pulse-outline:before {\n  content: \"\\f1f2\"; }\n\n.ion-ios-qr-scanner:before {\n  content: \"\\f1f3\"; }\n\n.ion-ios-qr-scanner-outline:before {\n  content: \"\\f1f3\"; }\n\n.ion-ios-quote:before {\n  content: \"\\f1f5\"; }\n\n.ion-ios-quote-outline:before {\n  content: \"\\f1f4\"; }\n\n.ion-ios-radio:before {\n  content: \"\\f1f9\"; }\n\n.ion-ios-radio-button-off:before {\n  content: \"\\f1f6\"; }\n\n.ion-ios-radio-button-off-outline:before {\n  content: \"\\f1f6\"; }\n\n.ion-ios-radio-button-on:before {\n  content: \"\\f1f7\"; }\n\n.ion-ios-radio-button-on-outline:before {\n  content: \"\\f1f7\"; }\n\n.ion-ios-radio-outline:before {\n  content: \"\\f1f8\"; }\n\n.ion-ios-rainy:before {\n  content: \"\\f495\"; }\n\n.ion-ios-rainy-outline:before {\n  content: \"\\f494\"; }\n\n.ion-ios-recording:before {\n  content: \"\\f497\"; }\n\n.ion-ios-recording-outline:before {\n  content: \"\\f496\"; }\n\n.ion-ios-redo:before {\n  content: \"\\f499\"; }\n\n.ion-ios-redo-outline:before {\n  content: \"\\f498\"; }\n\n.ion-ios-refresh:before {\n  content: \"\\f49c\"; }\n\n.ion-ios-refresh-circle:before {\n  content: \"\\f226\"; }\n\n.ion-ios-refresh-circle-outline:before {\n  content: \"\\f224\"; }\n\n.ion-ios-refresh-outline:before {\n  content: \"\\f49c\"; }\n\n.ion-ios-remove:before {\n  content: \"\\f1fc\"; }\n\n.ion-ios-remove-circle:before {\n  content: \"\\f1fb\"; }\n\n.ion-ios-remove-circle-outline:before {\n  content: \"\\f1fa\"; }\n\n.ion-ios-remove-outline:before {\n  content: \"\\f1fc\"; }\n\n.ion-ios-reorder:before {\n  content: \"\\f1fd\"; }\n\n.ion-ios-reorder-outline:before {\n  content: \"\\f1fd\"; }\n\n.ion-ios-repeat:before {\n  content: \"\\f1fe\"; }\n\n.ion-ios-repeat-outline:before {\n  content: \"\\f1fe\"; }\n\n.ion-ios-resize:before {\n  content: \"\\f1ff\"; }\n\n.ion-ios-resize-outline:before {\n  content: \"\\f1ff\"; }\n\n.ion-ios-restaurant:before {\n  content: \"\\f201\"; }\n\n.ion-ios-restaurant-outline:before {\n  content: \"\\f200\"; }\n\n.ion-ios-return-left:before {\n  content: \"\\f202\"; }\n\n.ion-ios-return-left-outline:before {\n  content: \"\\f202\"; }\n\n.ion-ios-return-right:before {\n  content: \"\\f203\"; }\n\n.ion-ios-return-right-outline:before {\n  content: \"\\f203\"; }\n\n.ion-ios-reverse-camera:before {\n  content: \"\\f49f\"; }\n\n.ion-ios-reverse-camera-outline:before {\n  content: \"\\f49e\"; }\n\n.ion-ios-rewind:before {\n  content: \"\\f4a1\"; }\n\n.ion-ios-rewind-outline:before {\n  content: \"\\f4a0\"; }\n\n.ion-ios-ribbon:before {\n  content: \"\\f205\"; }\n\n.ion-ios-ribbon-outline:before {\n  content: \"\\f204\"; }\n\n.ion-ios-rose:before {\n  content: \"\\f4a3\"; }\n\n.ion-ios-rose-outline:before {\n  content: \"\\f4a2\"; }\n\n.ion-ios-sad:before {\n  content: \"\\f207\"; }\n\n.ion-ios-sad-outline:before {\n  content: \"\\f206\"; }\n\n.ion-ios-school:before {\n  content: \"\\f209\"; }\n\n.ion-ios-school-outline:before {\n  content: \"\\f208\"; }\n\n.ion-ios-search:before {\n  content: \"\\f4a5\"; }\n\n.ion-ios-search-outline:before {\n  content: \"\\f20a\"; }\n\n.ion-ios-send:before {\n  content: \"\\f20c\"; }\n\n.ion-ios-send-outline:before {\n  content: \"\\f20b\"; }\n\n.ion-ios-settings:before {\n  content: \"\\f4a7\"; }\n\n.ion-ios-settings-outline:before {\n  content: \"\\f20d\"; }\n\n.ion-ios-share:before {\n  content: \"\\f211\"; }\n\n.ion-ios-share-alt:before {\n  content: \"\\f20f\"; }\n\n.ion-ios-share-alt-outline:before {\n  content: \"\\f20e\"; }\n\n.ion-ios-share-outline:before {\n  content: \"\\f210\"; }\n\n.ion-ios-shirt:before {\n  content: \"\\f213\"; }\n\n.ion-ios-shirt-outline:before {\n  content: \"\\f212\"; }\n\n.ion-ios-shuffle:before {\n  content: \"\\f4a9\"; }\n\n.ion-ios-shuffle-outline:before {\n  content: \"\\f4a9\"; }\n\n.ion-ios-skip-backward:before {\n  content: \"\\f215\"; }\n\n.ion-ios-skip-backward-outline:before {\n  content: \"\\f214\"; }\n\n.ion-ios-skip-forward:before {\n  content: \"\\f217\"; }\n\n.ion-ios-skip-forward-outline:before {\n  content: \"\\f216\"; }\n\n.ion-ios-snow:before {\n  content: \"\\f218\"; }\n\n.ion-ios-snow-outline:before {\n  content: \"\\f22c\"; }\n\n.ion-ios-speedometer:before {\n  content: \"\\f4b0\"; }\n\n.ion-ios-speedometer-outline:before {\n  content: \"\\f4af\"; }\n\n.ion-ios-square:before {\n  content: \"\\f21a\"; }\n\n.ion-ios-square-outline:before {\n  content: \"\\f219\"; }\n\n.ion-ios-star:before {\n  content: \"\\f4b3\"; }\n\n.ion-ios-star-half:before {\n  content: \"\\f4b1\"; }\n\n.ion-ios-star-half-outline:before {\n  content: \"\\f4b1\"; }\n\n.ion-ios-star-outline:before {\n  content: \"\\f4b2\"; }\n\n.ion-ios-stats:before {\n  content: \"\\f21c\"; }\n\n.ion-ios-stats-outline:before {\n  content: \"\\f21b\"; }\n\n.ion-ios-stopwatch:before {\n  content: \"\\f4b5\"; }\n\n.ion-ios-stopwatch-outline:before {\n  content: \"\\f4b4\"; }\n\n.ion-ios-subway:before {\n  content: \"\\f21e\"; }\n\n.ion-ios-subway-outline:before {\n  content: \"\\f21d\"; }\n\n.ion-ios-sunny:before {\n  content: \"\\f4b7\"; }\n\n.ion-ios-sunny-outline:before {\n  content: \"\\f4b6\"; }\n\n.ion-ios-swap:before {\n  content: \"\\f21f\"; }\n\n.ion-ios-swap-outline:before {\n  content: \"\\f21f\"; }\n\n.ion-ios-switch:before {\n  content: \"\\f221\"; }\n\n.ion-ios-switch-outline:before {\n  content: \"\\f220\"; }\n\n.ion-ios-sync:before {\n  content: \"\\f222\"; }\n\n.ion-ios-sync-outline:before {\n  content: \"\\f222\"; }\n\n.ion-ios-tablet-landscape:before {\n  content: \"\\f223\"; }\n\n.ion-ios-tablet-landscape-outline:before {\n  content: \"\\f223\"; }\n\n.ion-ios-tablet-portrait:before {\n  content: \"\\f24e\"; }\n\n.ion-ios-tablet-portrait-outline:before {\n  content: \"\\f24e\"; }\n\n.ion-ios-tennisball:before {\n  content: \"\\f4bb\"; }\n\n.ion-ios-tennisball-outline:before {\n  content: \"\\f4ba\"; }\n\n.ion-ios-text:before {\n  content: \"\\f250\"; }\n\n.ion-ios-text-outline:before {\n  content: \"\\f24f\"; }\n\n.ion-ios-thermometer:before {\n  content: \"\\f252\"; }\n\n.ion-ios-thermometer-outline:before {\n  content: \"\\f251\"; }\n\n.ion-ios-thumbs-down:before {\n  content: \"\\f254\"; }\n\n.ion-ios-thumbs-down-outline:before {\n  content: \"\\f253\"; }\n\n.ion-ios-thumbs-up:before {\n  content: \"\\f256\"; }\n\n.ion-ios-thumbs-up-outline:before {\n  content: \"\\f255\"; }\n\n.ion-ios-thunderstorm:before {\n  content: \"\\f4bd\"; }\n\n.ion-ios-thunderstorm-outline:before {\n  content: \"\\f4bc\"; }\n\n.ion-ios-time:before {\n  content: \"\\f4bf\"; }\n\n.ion-ios-time-outline:before {\n  content: \"\\f4be\"; }\n\n.ion-ios-timer:before {\n  content: \"\\f4c1\"; }\n\n.ion-ios-timer-outline:before {\n  content: \"\\f4c0\"; }\n\n.ion-ios-train:before {\n  content: \"\\f258\"; }\n\n.ion-ios-train-outline:before {\n  content: \"\\f257\"; }\n\n.ion-ios-transgender:before {\n  content: \"\\f259\"; }\n\n.ion-ios-transgender-outline:before {\n  content: \"\\f259\"; }\n\n.ion-ios-trash:before {\n  content: \"\\f4c5\"; }\n\n.ion-ios-trash-outline:before {\n  content: \"\\f4c4\"; }\n\n.ion-ios-trending-down:before {\n  content: \"\\f25a\"; }\n\n.ion-ios-trending-down-outline:before {\n  content: \"\\f25a\"; }\n\n.ion-ios-trending-up:before {\n  content: \"\\f25b\"; }\n\n.ion-ios-trending-up-outline:before {\n  content: \"\\f25b\"; }\n\n.ion-ios-trophy:before {\n  content: \"\\f25d\"; }\n\n.ion-ios-trophy-outline:before {\n  content: \"\\f25c\"; }\n\n.ion-ios-umbrella:before {\n  content: \"\\f25f\"; }\n\n.ion-ios-umbrella-outline:before {\n  content: \"\\f25e\"; }\n\n.ion-ios-undo:before {\n  content: \"\\f4c7\"; }\n\n.ion-ios-undo-outline:before {\n  content: \"\\f4c6\"; }\n\n.ion-ios-unlock:before {\n  content: \"\\f261\"; }\n\n.ion-ios-unlock-outline:before {\n  content: \"\\f260\"; }\n\n.ion-ios-videocam:before {\n  content: \"\\f4cd\"; }\n\n.ion-ios-videocam-outline:before {\n  content: \"\\f4cc\"; }\n\n.ion-ios-volume-down:before {\n  content: \"\\f262\"; }\n\n.ion-ios-volume-down-outline:before {\n  content: \"\\f262\"; }\n\n.ion-ios-volume-mute:before {\n  content: \"\\f263\"; }\n\n.ion-ios-volume-mute-outline:before {\n  content: \"\\f263\"; }\n\n.ion-ios-volume-off:before {\n  content: \"\\f264\"; }\n\n.ion-ios-volume-off-outline:before {\n  content: \"\\f264\"; }\n\n.ion-ios-volume-up:before {\n  content: \"\\f265\"; }\n\n.ion-ios-volume-up-outline:before {\n  content: \"\\f265\"; }\n\n.ion-ios-walk:before {\n  content: \"\\f266\"; }\n\n.ion-ios-walk-outline:before {\n  content: \"\\f266\"; }\n\n.ion-ios-warning:before {\n  content: \"\\f268\"; }\n\n.ion-ios-warning-outline:before {\n  content: \"\\f267\"; }\n\n.ion-ios-watch:before {\n  content: \"\\f269\"; }\n\n.ion-ios-watch-outline:before {\n  content: \"\\f269\"; }\n\n.ion-ios-water:before {\n  content: \"\\f26b\"; }\n\n.ion-ios-water-outline:before {\n  content: \"\\f26a\"; }\n\n.ion-ios-wifi:before {\n  content: \"\\f26d\"; }\n\n.ion-ios-wifi-outline:before {\n  content: \"\\f26c\"; }\n\n.ion-ios-wine:before {\n  content: \"\\f26f\"; }\n\n.ion-ios-wine-outline:before {\n  content: \"\\f26e\"; }\n\n.ion-ios-woman:before {\n  content: \"\\f271\"; }\n\n.ion-ios-woman-outline:before {\n  content: \"\\f270\"; }\n\n.ion-logo-android:before {\n  content: \"\\f225\"; }\n\n.ion-logo-angular:before {\n  content: \"\\f227\"; }\n\n.ion-logo-apple:before {\n  content: \"\\f229\"; }\n\n.ion-logo-bitcoin:before {\n  content: \"\\f22b\"; }\n\n.ion-logo-buffer:before {\n  content: \"\\f22d\"; }\n\n.ion-logo-chrome:before {\n  content: \"\\f22f\"; }\n\n.ion-logo-codepen:before {\n  content: \"\\f230\"; }\n\n.ion-logo-css3:before {\n  content: \"\\f231\"; }\n\n.ion-logo-designernews:before {\n  content: \"\\f232\"; }\n\n.ion-logo-dribbble:before {\n  content: \"\\f233\"; }\n\n.ion-logo-dropbox:before {\n  content: \"\\f234\"; }\n\n.ion-logo-euro:before {\n  content: \"\\f235\"; }\n\n.ion-logo-facebook:before {\n  content: \"\\f236\"; }\n\n.ion-logo-foursquare:before {\n  content: \"\\f237\"; }\n\n.ion-logo-freebsd-devil:before {\n  content: \"\\f238\"; }\n\n.ion-logo-github:before {\n  content: \"\\f239\"; }\n\n.ion-logo-google:before {\n  content: \"\\f23a\"; }\n\n.ion-logo-googleplus:before {\n  content: \"\\f23b\"; }\n\n.ion-logo-hackernews:before {\n  content: \"\\f23c\"; }\n\n.ion-logo-html5:before {\n  content: \"\\f23d\"; }\n\n.ion-logo-instagram:before {\n  content: \"\\f23e\"; }\n\n.ion-logo-javascript:before {\n  content: \"\\f23f\"; }\n\n.ion-logo-linkedin:before {\n  content: \"\\f240\"; }\n\n.ion-logo-markdown:before {\n  content: \"\\f241\"; }\n\n.ion-logo-nodejs:before {\n  content: \"\\f242\"; }\n\n.ion-logo-octocat:before {\n  content: \"\\f243\"; }\n\n.ion-logo-pinterest:before {\n  content: \"\\f244\"; }\n\n.ion-logo-playstation:before {\n  content: \"\\f245\"; }\n\n.ion-logo-python:before {\n  content: \"\\f246\"; }\n\n.ion-logo-reddit:before {\n  content: \"\\f247\"; }\n\n.ion-logo-rss:before {\n  content: \"\\f248\"; }\n\n.ion-logo-sass:before {\n  content: \"\\f249\"; }\n\n.ion-logo-skype:before {\n  content: \"\\f24a\"; }\n\n.ion-logo-snapchat:before {\n  content: \"\\f24b\"; }\n\n.ion-logo-steam:before {\n  content: \"\\f24c\"; }\n\n.ion-logo-tumblr:before {\n  content: \"\\f24d\"; }\n\n.ion-logo-tux:before {\n  content: \"\\f2ae\"; }\n\n.ion-logo-twitch:before {\n  content: \"\\f2af\"; }\n\n.ion-logo-twitter:before {\n  content: \"\\f2b0\"; }\n\n.ion-logo-usd:before {\n  content: \"\\f2b1\"; }\n\n.ion-logo-vimeo:before {\n  content: \"\\f2c4\"; }\n\n.ion-logo-whatsapp:before {\n  content: \"\\f2c5\"; }\n\n.ion-logo-windows:before {\n  content: \"\\f32f\"; }\n\n.ion-logo-wordpress:before {\n  content: \"\\f330\"; }\n\n.ion-logo-xbox:before {\n  content: \"\\f34c\"; }\n\n.ion-logo-yahoo:before {\n  content: \"\\f34d\"; }\n\n.ion-logo-yen:before {\n  content: \"\\f34e\"; }\n\n.ion-logo-youtube:before {\n  content: \"\\f34f\"; }\n\n.ion-md-add:before {\n  content: \"\\f273\"; }\n\n.ion-md-add-circle:before {\n  content: \"\\f272\"; }\n\n.ion-md-alarm:before {\n  content: \"\\f274\"; }\n\n.ion-md-albums:before {\n  content: \"\\f275\"; }\n\n.ion-md-alert:before {\n  content: \"\\f276\"; }\n\n.ion-md-american-football:before {\n  content: \"\\f277\"; }\n\n.ion-md-analytics:before {\n  content: \"\\f278\"; }\n\n.ion-md-aperture:before {\n  content: \"\\f279\"; }\n\n.ion-md-apps:before {\n  content: \"\\f27a\"; }\n\n.ion-md-appstore:before {\n  content: \"\\f27b\"; }\n\n.ion-md-archive:before {\n  content: \"\\f27c\"; }\n\n.ion-md-arrow-back:before {\n  content: \"\\f27d\"; }\n\n.ion-md-arrow-down:before {\n  content: \"\\f27e\"; }\n\n.ion-md-arrow-dropdown:before {\n  content: \"\\f280\"; }\n\n.ion-md-arrow-dropdown-circle:before {\n  content: \"\\f27f\"; }\n\n.ion-md-arrow-dropleft:before {\n  content: \"\\f282\"; }\n\n.ion-md-arrow-dropleft-circle:before {\n  content: \"\\f281\"; }\n\n.ion-md-arrow-dropright:before {\n  content: \"\\f284\"; }\n\n.ion-md-arrow-dropright-circle:before {\n  content: \"\\f283\"; }\n\n.ion-md-arrow-dropup:before {\n  content: \"\\f286\"; }\n\n.ion-md-arrow-dropup-circle:before {\n  content: \"\\f285\"; }\n\n.ion-md-arrow-forward:before {\n  content: \"\\f287\"; }\n\n.ion-md-arrow-round-back:before {\n  content: \"\\f288\"; }\n\n.ion-md-arrow-round-down:before {\n  content: \"\\f289\"; }\n\n.ion-md-arrow-round-forward:before {\n  content: \"\\f28a\"; }\n\n.ion-md-arrow-round-up:before {\n  content: \"\\f28b\"; }\n\n.ion-md-arrow-up:before {\n  content: \"\\f28c\"; }\n\n.ion-md-at:before {\n  content: \"\\f28d\"; }\n\n.ion-md-attach:before {\n  content: \"\\f28e\"; }\n\n.ion-md-backspace:before {\n  content: \"\\f28f\"; }\n\n.ion-md-barcode:before {\n  content: \"\\f290\"; }\n\n.ion-md-baseball:before {\n  content: \"\\f291\"; }\n\n.ion-md-basket:before {\n  content: \"\\f292\"; }\n\n.ion-md-basketball:before {\n  content: \"\\f293\"; }\n\n.ion-md-battery-charging:before {\n  content: \"\\f294\"; }\n\n.ion-md-battery-dead:before {\n  content: \"\\f295\"; }\n\n.ion-md-battery-full:before {\n  content: \"\\f296\"; }\n\n.ion-md-beaker:before {\n  content: \"\\f297\"; }\n\n.ion-md-beer:before {\n  content: \"\\f298\"; }\n\n.ion-md-bicycle:before {\n  content: \"\\f299\"; }\n\n.ion-md-bluetooth:before {\n  content: \"\\f29a\"; }\n\n.ion-md-boat:before {\n  content: \"\\f29b\"; }\n\n.ion-md-body:before {\n  content: \"\\f29c\"; }\n\n.ion-md-bonfire:before {\n  content: \"\\f29d\"; }\n\n.ion-md-book:before {\n  content: \"\\f29e\"; }\n\n.ion-md-bookmark:before {\n  content: \"\\f29f\"; }\n\n.ion-md-bookmarks:before {\n  content: \"\\f2a0\"; }\n\n.ion-md-bowtie:before {\n  content: \"\\f2a1\"; }\n\n.ion-md-briefcase:before {\n  content: \"\\f2a2\"; }\n\n.ion-md-browsers:before {\n  content: \"\\f2a3\"; }\n\n.ion-md-brush:before {\n  content: \"\\f2a4\"; }\n\n.ion-md-bug:before {\n  content: \"\\f2a5\"; }\n\n.ion-md-build:before {\n  content: \"\\f2a6\"; }\n\n.ion-md-bulb:before {\n  content: \"\\f2a7\"; }\n\n.ion-md-bus:before {\n  content: \"\\f2a8\"; }\n\n.ion-md-cafe:before {\n  content: \"\\f2a9\"; }\n\n.ion-md-calculator:before {\n  content: \"\\f2aa\"; }\n\n.ion-md-calendar:before {\n  content: \"\\f2ab\"; }\n\n.ion-md-call:before {\n  content: \"\\f2ac\"; }\n\n.ion-md-camera:before {\n  content: \"\\f2ad\"; }\n\n.ion-md-car:before {\n  content: \"\\f2b2\"; }\n\n.ion-md-card:before {\n  content: \"\\f2b3\"; }\n\n.ion-md-cart:before {\n  content: \"\\f2b4\"; }\n\n.ion-md-cash:before {\n  content: \"\\f2b5\"; }\n\n.ion-md-chatboxes:before {\n  content: \"\\f2b6\"; }\n\n.ion-md-chatbubbles:before {\n  content: \"\\f2b7\"; }\n\n.ion-md-checkbox:before {\n  content: \"\\f2b9\"; }\n\n.ion-md-checkbox-outline:before {\n  content: \"\\f2b8\"; }\n\n.ion-md-checkmark:before {\n  content: \"\\f2bc\"; }\n\n.ion-md-checkmark-circle:before {\n  content: \"\\f2bb\"; }\n\n.ion-md-checkmark-circle-outline:before {\n  content: \"\\f2ba\"; }\n\n.ion-md-clipboard:before {\n  content: \"\\f2bd\"; }\n\n.ion-md-clock:before {\n  content: \"\\f2be\"; }\n\n.ion-md-close:before {\n  content: \"\\f2c0\"; }\n\n.ion-md-close-circle:before {\n  content: \"\\f2bf\"; }\n\n.ion-md-closed-captioning:before {\n  content: \"\\f2c1\"; }\n\n.ion-md-cloud:before {\n  content: \"\\f2c9\"; }\n\n.ion-md-cloud-circle:before {\n  content: \"\\f2c2\"; }\n\n.ion-md-cloud-done:before {\n  content: \"\\f2c3\"; }\n\n.ion-md-cloud-download:before {\n  content: \"\\f2c6\"; }\n\n.ion-md-cloud-outline:before {\n  content: \"\\f2c7\"; }\n\n.ion-md-cloud-upload:before {\n  content: \"\\f2c8\"; }\n\n.ion-md-cloudy:before {\n  content: \"\\f2cb\"; }\n\n.ion-md-cloudy-night:before {\n  content: \"\\f2ca\"; }\n\n.ion-md-code:before {\n  content: \"\\f2ce\"; }\n\n.ion-md-code-download:before {\n  content: \"\\f2cc\"; }\n\n.ion-md-code-working:before {\n  content: \"\\f2cd\"; }\n\n.ion-md-cog:before {\n  content: \"\\f2cf\"; }\n\n.ion-md-color-fill:before {\n  content: \"\\f2d0\"; }\n\n.ion-md-color-filter:before {\n  content: \"\\f2d1\"; }\n\n.ion-md-color-palette:before {\n  content: \"\\f2d2\"; }\n\n.ion-md-color-wand:before {\n  content: \"\\f2d3\"; }\n\n.ion-md-compass:before {\n  content: \"\\f2d4\"; }\n\n.ion-md-construct:before {\n  content: \"\\f2d5\"; }\n\n.ion-md-contact:before {\n  content: \"\\f2d6\"; }\n\n.ion-md-contacts:before {\n  content: \"\\f2d7\"; }\n\n.ion-md-contract:before {\n  content: \"\\f2d8\"; }\n\n.ion-md-contrast:before {\n  content: \"\\f2d9\"; }\n\n.ion-md-copy:before {\n  content: \"\\f2da\"; }\n\n.ion-md-create:before {\n  content: \"\\f2db\"; }\n\n.ion-md-crop:before {\n  content: \"\\f2dc\"; }\n\n.ion-md-cube:before {\n  content: \"\\f2dd\"; }\n\n.ion-md-cut:before {\n  content: \"\\f2de\"; }\n\n.ion-md-desktop:before {\n  content: \"\\f2df\"; }\n\n.ion-md-disc:before {\n  content: \"\\f2e0\"; }\n\n.ion-md-document:before {\n  content: \"\\f2e1\"; }\n\n.ion-md-done-all:before {\n  content: \"\\f2e2\"; }\n\n.ion-md-download:before {\n  content: \"\\f2e3\"; }\n\n.ion-md-easel:before {\n  content: \"\\f2e4\"; }\n\n.ion-md-egg:before {\n  content: \"\\f2e5\"; }\n\n.ion-md-exit:before {\n  content: \"\\f2e6\"; }\n\n.ion-md-expand:before {\n  content: \"\\f2e7\"; }\n\n.ion-md-eye:before {\n  content: \"\\f2e9\"; }\n\n.ion-md-eye-off:before {\n  content: \"\\f2e8\"; }\n\n.ion-md-fastforward:before {\n  content: \"\\f2ea\"; }\n\n.ion-md-female:before {\n  content: \"\\f2eb\"; }\n\n.ion-md-filing:before {\n  content: \"\\f2ec\"; }\n\n.ion-md-film:before {\n  content: \"\\f2ed\"; }\n\n.ion-md-finger-print:before {\n  content: \"\\f2ee\"; }\n\n.ion-md-flag:before {\n  content: \"\\f2ef\"; }\n\n.ion-md-flame:before {\n  content: \"\\f2f0\"; }\n\n.ion-md-flash:before {\n  content: \"\\f2f1\"; }\n\n.ion-md-flask:before {\n  content: \"\\f2f2\"; }\n\n.ion-md-flower:before {\n  content: \"\\f2f3\"; }\n\n.ion-md-folder:before {\n  content: \"\\f2f5\"; }\n\n.ion-md-folder-open:before {\n  content: \"\\f2f4\"; }\n\n.ion-md-football:before {\n  content: \"\\f2f6\"; }\n\n.ion-md-funnel:before {\n  content: \"\\f2f7\"; }\n\n.ion-md-game-controller-a:before {\n  content: \"\\f2f8\"; }\n\n.ion-md-game-controller-b:before {\n  content: \"\\f2f9\"; }\n\n.ion-md-git-branch:before {\n  content: \"\\f2fa\"; }\n\n.ion-md-git-commit:before {\n  content: \"\\f2fb\"; }\n\n.ion-md-git-compare:before {\n  content: \"\\f2fc\"; }\n\n.ion-md-git-merge:before {\n  content: \"\\f2fd\"; }\n\n.ion-md-git-network:before {\n  content: \"\\f2fe\"; }\n\n.ion-md-git-pull-request:before {\n  content: \"\\f2ff\"; }\n\n.ion-md-glasses:before {\n  content: \"\\f300\"; }\n\n.ion-md-globe:before {\n  content: \"\\f301\"; }\n\n.ion-md-grid:before {\n  content: \"\\f302\"; }\n\n.ion-md-hammer:before {\n  content: \"\\f303\"; }\n\n.ion-md-hand:before {\n  content: \"\\f304\"; }\n\n.ion-md-happy:before {\n  content: \"\\f305\"; }\n\n.ion-md-headset:before {\n  content: \"\\f306\"; }\n\n.ion-md-heart:before {\n  content: \"\\f308\"; }\n\n.ion-md-heart-outline:before {\n  content: \"\\f307\"; }\n\n.ion-md-help:before {\n  content: \"\\f30b\"; }\n\n.ion-md-help-buoy:before {\n  content: \"\\f309\"; }\n\n.ion-md-help-circle:before {\n  content: \"\\f30a\"; }\n\n.ion-md-home:before {\n  content: \"\\f30c\"; }\n\n.ion-md-ice-cream:before {\n  content: \"\\f30d\"; }\n\n.ion-md-image:before {\n  content: \"\\f30e\"; }\n\n.ion-md-images:before {\n  content: \"\\f30f\"; }\n\n.ion-md-infinite:before {\n  content: \"\\f310\"; }\n\n.ion-md-information:before {\n  content: \"\\f312\"; }\n\n.ion-md-information-circle:before {\n  content: \"\\f311\"; }\n\n.ion-md-ionic:before {\n  content: \"\\f313\"; }\n\n.ion-md-ionitron:before {\n  content: \"\\f314\"; }\n\n.ion-md-jet:before {\n  content: \"\\f315\"; }\n\n.ion-md-key:before {\n  content: \"\\f316\"; }\n\n.ion-md-keypad:before {\n  content: \"\\f317\"; }\n\n.ion-md-laptop:before {\n  content: \"\\f318\"; }\n\n.ion-md-leaf:before {\n  content: \"\\f319\"; }\n\n.ion-md-link:before {\n  content: \"\\f22e\"; }\n\n.ion-md-list:before {\n  content: \"\\f31b\"; }\n\n.ion-md-list-box:before {\n  content: \"\\f31a\"; }\n\n.ion-md-locate:before {\n  content: \"\\f31c\"; }\n\n.ion-md-lock:before {\n  content: \"\\f31d\"; }\n\n.ion-md-log-in:before {\n  content: \"\\f31e\"; }\n\n.ion-md-log-out:before {\n  content: \"\\f31f\"; }\n\n.ion-md-magnet:before {\n  content: \"\\f320\"; }\n\n.ion-md-mail:before {\n  content: \"\\f322\"; }\n\n.ion-md-mail-open:before {\n  content: \"\\f321\"; }\n\n.ion-md-male:before {\n  content: \"\\f323\"; }\n\n.ion-md-man:before {\n  content: \"\\f324\"; }\n\n.ion-md-map:before {\n  content: \"\\f325\"; }\n\n.ion-md-medal:before {\n  content: \"\\f326\"; }\n\n.ion-md-medical:before {\n  content: \"\\f327\"; }\n\n.ion-md-medkit:before {\n  content: \"\\f328\"; }\n\n.ion-md-megaphone:before {\n  content: \"\\f329\"; }\n\n.ion-md-menu:before {\n  content: \"\\f32a\"; }\n\n.ion-md-mic:before {\n  content: \"\\f32c\"; }\n\n.ion-md-mic-off:before {\n  content: \"\\f32b\"; }\n\n.ion-md-microphone:before {\n  content: \"\\f32d\"; }\n\n.ion-md-moon:before {\n  content: \"\\f32e\"; }\n\n.ion-md-more:before {\n  content: \"\\f1c9\"; }\n\n.ion-md-move:before {\n  content: \"\\f331\"; }\n\n.ion-md-musical-note:before {\n  content: \"\\f332\"; }\n\n.ion-md-musical-notes:before {\n  content: \"\\f333\"; }\n\n.ion-md-navigate:before {\n  content: \"\\f334\"; }\n\n.ion-md-no-smoking:before {\n  content: \"\\f335\"; }\n\n.ion-md-notifications:before {\n  content: \"\\f338\"; }\n\n.ion-md-notifications-off:before {\n  content: \"\\f336\"; }\n\n.ion-md-notifications-outline:before {\n  content: \"\\f337\"; }\n\n.ion-md-nuclear:before {\n  content: \"\\f339\"; }\n\n.ion-md-nutrition:before {\n  content: \"\\f33a\"; }\n\n.ion-md-open:before {\n  content: \"\\f33b\"; }\n\n.ion-md-options:before {\n  content: \"\\f33c\"; }\n\n.ion-md-outlet:before {\n  content: \"\\f33d\"; }\n\n.ion-md-paper:before {\n  content: \"\\f33f\"; }\n\n.ion-md-paper-plane:before {\n  content: \"\\f33e\"; }\n\n.ion-md-partly-sunny:before {\n  content: \"\\f340\"; }\n\n.ion-md-pause:before {\n  content: \"\\f341\"; }\n\n.ion-md-paw:before {\n  content: \"\\f342\"; }\n\n.ion-md-people:before {\n  content: \"\\f343\"; }\n\n.ion-md-person:before {\n  content: \"\\f345\"; }\n\n.ion-md-person-add:before {\n  content: \"\\f344\"; }\n\n.ion-md-phone-landscape:before {\n  content: \"\\f346\"; }\n\n.ion-md-phone-portrait:before {\n  content: \"\\f347\"; }\n\n.ion-md-photos:before {\n  content: \"\\f348\"; }\n\n.ion-md-pie:before {\n  content: \"\\f349\"; }\n\n.ion-md-pin:before {\n  content: \"\\f34a\"; }\n\n.ion-md-pint:before {\n  content: \"\\f34b\"; }\n\n.ion-md-pizza:before {\n  content: \"\\f354\"; }\n\n.ion-md-plane:before {\n  content: \"\\f355\"; }\n\n.ion-md-planet:before {\n  content: \"\\f356\"; }\n\n.ion-md-play:before {\n  content: \"\\f357\"; }\n\n.ion-md-podium:before {\n  content: \"\\f358\"; }\n\n.ion-md-power:before {\n  content: \"\\f359\"; }\n\n.ion-md-pricetag:before {\n  content: \"\\f35a\"; }\n\n.ion-md-pricetags:before {\n  content: \"\\f35b\"; }\n\n.ion-md-print:before {\n  content: \"\\f35c\"; }\n\n.ion-md-pulse:before {\n  content: \"\\f35d\"; }\n\n.ion-md-qr-scanner:before {\n  content: \"\\f35e\"; }\n\n.ion-md-quote:before {\n  content: \"\\f35f\"; }\n\n.ion-md-radio:before {\n  content: \"\\f362\"; }\n\n.ion-md-radio-button-off:before {\n  content: \"\\f360\"; }\n\n.ion-md-radio-button-on:before {\n  content: \"\\f361\"; }\n\n.ion-md-rainy:before {\n  content: \"\\f363\"; }\n\n.ion-md-recording:before {\n  content: \"\\f364\"; }\n\n.ion-md-redo:before {\n  content: \"\\f365\"; }\n\n.ion-md-refresh:before {\n  content: \"\\f366\"; }\n\n.ion-md-refresh-circle:before {\n  content: \"\\f228\"; }\n\n.ion-md-remove:before {\n  content: \"\\f368\"; }\n\n.ion-md-remove-circle:before {\n  content: \"\\f367\"; }\n\n.ion-md-reorder:before {\n  content: \"\\f369\"; }\n\n.ion-md-repeat:before {\n  content: \"\\f36a\"; }\n\n.ion-md-resize:before {\n  content: \"\\f36b\"; }\n\n.ion-md-restaurant:before {\n  content: \"\\f36c\"; }\n\n.ion-md-return-left:before {\n  content: \"\\f36d\"; }\n\n.ion-md-return-right:before {\n  content: \"\\f36e\"; }\n\n.ion-md-reverse-camera:before {\n  content: \"\\f36f\"; }\n\n.ion-md-rewind:before {\n  content: \"\\f370\"; }\n\n.ion-md-ribbon:before {\n  content: \"\\f371\"; }\n\n.ion-md-rose:before {\n  content: \"\\f372\"; }\n\n.ion-md-sad:before {\n  content: \"\\f373\"; }\n\n.ion-md-school:before {\n  content: \"\\f374\"; }\n\n.ion-md-search:before {\n  content: \"\\f375\"; }\n\n.ion-md-send:before {\n  content: \"\\f376\"; }\n\n.ion-md-settings:before {\n  content: \"\\f377\"; }\n\n.ion-md-share:before {\n  content: \"\\f379\"; }\n\n.ion-md-share-alt:before {\n  content: \"\\f378\"; }\n\n.ion-md-shirt:before {\n  content: \"\\f37a\"; }\n\n.ion-md-shuffle:before {\n  content: \"\\f37b\"; }\n\n.ion-md-skip-backward:before {\n  content: \"\\f37c\"; }\n\n.ion-md-skip-forward:before {\n  content: \"\\f37d\"; }\n\n.ion-md-snow:before {\n  content: \"\\f37e\"; }\n\n.ion-md-speedometer:before {\n  content: \"\\f37f\"; }\n\n.ion-md-square:before {\n  content: \"\\f381\"; }\n\n.ion-md-square-outline:before {\n  content: \"\\f380\"; }\n\n.ion-md-star:before {\n  content: \"\\f384\"; }\n\n.ion-md-star-half:before {\n  content: \"\\f382\"; }\n\n.ion-md-star-outline:before {\n  content: \"\\f383\"; }\n\n.ion-md-stats:before {\n  content: \"\\f385\"; }\n\n.ion-md-stopwatch:before {\n  content: \"\\f386\"; }\n\n.ion-md-subway:before {\n  content: \"\\f387\"; }\n\n.ion-md-sunny:before {\n  content: \"\\f388\"; }\n\n.ion-md-swap:before {\n  content: \"\\f389\"; }\n\n.ion-md-switch:before {\n  content: \"\\f38a\"; }\n\n.ion-md-sync:before {\n  content: \"\\f38b\"; }\n\n.ion-md-tablet-landscape:before {\n  content: \"\\f38c\"; }\n\n.ion-md-tablet-portrait:before {\n  content: \"\\f38d\"; }\n\n.ion-md-tennisball:before {\n  content: \"\\f38e\"; }\n\n.ion-md-text:before {\n  content: \"\\f38f\"; }\n\n.ion-md-thermometer:before {\n  content: \"\\f390\"; }\n\n.ion-md-thumbs-down:before {\n  content: \"\\f391\"; }\n\n.ion-md-thumbs-up:before {\n  content: \"\\f392\"; }\n\n.ion-md-thunderstorm:before {\n  content: \"\\f393\"; }\n\n.ion-md-time:before {\n  content: \"\\f394\"; }\n\n.ion-md-timer:before {\n  content: \"\\f395\"; }\n\n.ion-md-train:before {\n  content: \"\\f396\"; }\n\n.ion-md-transgender:before {\n  content: \"\\f397\"; }\n\n.ion-md-trash:before {\n  content: \"\\f398\"; }\n\n.ion-md-trending-down:before {\n  content: \"\\f399\"; }\n\n.ion-md-trending-up:before {\n  content: \"\\f39a\"; }\n\n.ion-md-trophy:before {\n  content: \"\\f39b\"; }\n\n.ion-md-umbrella:before {\n  content: \"\\f39c\"; }\n\n.ion-md-undo:before {\n  content: \"\\f39d\"; }\n\n.ion-md-unlock:before {\n  content: \"\\f39e\"; }\n\n.ion-md-videocam:before {\n  content: \"\\f39f\"; }\n\n.ion-md-volume-down:before {\n  content: \"\\f3a0\"; }\n\n.ion-md-volume-mute:before {\n  content: \"\\f3a1\"; }\n\n.ion-md-volume-off:before {\n  content: \"\\f3a2\"; }\n\n.ion-md-volume-up:before {\n  content: \"\\f3a3\"; }\n\n.ion-md-walk:before {\n  content: \"\\f3a4\"; }\n\n.ion-md-warning:before {\n  content: \"\\f3a5\"; }\n\n.ion-md-watch:before {\n  content: \"\\f3a6\"; }\n\n.ion-md-water:before {\n  content: \"\\f3a7\"; }\n\n.ion-md-wifi:before {\n  content: \"\\f3a8\"; }\n\n.ion-md-wine:before {\n  content: \"\\f3a9\"; }\n\n.ion-md-woman:before {\n  content: \"\\f3aa\"; }\n\n@font-face {\n  font-family: \"Ionicons\";\n  src: url(\"../fonts/ionicons.woff2?v=3.0.0-alpha.3\") format(\"woff2\"), url(\"../fonts/ionicons.woff?v=3.0.0-alpha.3\") format(\"woff\"), url(\"../fonts/ionicons.ttf?v=3.0.0-alpha.3\") format(\"truetype\");\n  font-weight: normal;\n  font-style: normal; }\n\nion-icon {\n  display: inline-block;\n  font-family: \"Ionicons\";\n  -moz-osx-font-smoothing: grayscale;\n  -webkit-font-smoothing: antialiased;\n  font-style: normal;\n  font-variant: normal;\n  font-weight: normal;\n  line-height: 1;\n  text-rendering: auto;\n  text-transform: none;\n  speak: none; }\n\nion-content {\n  color: #000; }\n\nhr {\n  background-color: rgba(0, 0, 0, 0.08); }\n\nion-action-sheet {\n  position: absolute;\n  top: 0;\n  left: 0;\n  z-index: 1000;\n  display: block;\n  width: 100%;\n  height: 100%; }\n\n.action-sheet-wrapper {\n  position: absolute;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  z-index: 10;\n  display: block;\n  margin: auto;\n  width: 100%;\n  max-width: 500px;\n  -webkit-transform: translate3d(0, 100%, 0);\n  transform: translate3d(0, 100%, 0); }\n\n.action-sheet-button {\n  width: 100%; }\n\n.action-sheet-wrapper {\n  box-shadow: 0 -1px 0 rgba(0, 0, 0, 0.2); }\n\n.action-sheet-title {\n  padding: 19px 16px 17px;\n  font-size: 2rem;\n  text-align: left;\n  color: #4d4d4d; }\n\n.action-sheet-button {\n  padding: 0 16px;\n  min-height: 4.8rem;\n  font-size: 1.5rem;\n  text-align: left;\n  color: #4d4d4d;\n  background: transparent; }\n  .action-sheet-button.activated {\n    background: #aaa; }\n\n.action-sheet-icon {\n  margin: 0 16px 0 0;\n  min-width: 24px;\n  font-size: 2.4rem;\n  text-align: center;\n  vertical-align: middle; }\n\n.action-sheet-group {\n  background: #fff; }\n  .action-sheet-group:last-child .action-sheet-button {\n    margin-bottom: 8px; }\n  .action-sheet-group .button-inner {\n    -webkit-box-pack: start;\n    -webkit-justify-content: flex-start;\n    -ms-flex-pack: start;\n    justify-content: flex-start; }\n\n.action-sheet-selected {\n  font-weight: bold; }\n\n.action-sheet-cancel {\n  background: transparent; }\n\nion-alert {\n  position: absolute;\n  top: 0;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  z-index: 1000;\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  -webkit-box-pack: center;\n  -webkit-justify-content: center;\n  -ms-flex-pack: center;\n  justify-content: center; }\n  ion-alert input {\n    width: 100%; }\n\n.alert-wrapper {\n  z-index: 10;\n  display: -webkit-box;\n  display: -webkit-flex;\n  display: -ms-flexbox;\n  display: flex;\n  -webkit-box-orient: vertical;\n  -webkit-box-direction: normal;\n  -webkit-flex-direction: column;\n  -ms-flex-direction: column;\n  flex-direction: column;\n  min-width: 250px;\n  max-height: 90%;\n  opacity: 0; }\n\n.alert-title {\n  margin: 0;\n  padding: 0; }\n\n.alert-sub-title {\n  margin: 5px 0 0;\n  padding: 0;\n  font-weight: normal; }\n\n.alert-message {\n  overflow-y: scroll;\n  -webkit-overflow-scrolling: touch; }\n\n.alert-input {\n  padding: 10px 0;\n  border: 0;\n  background: inherit; }\n  .alert-input::-moz-placeholder {\n    color: #999; }\n  .alert-input:-ms-input-placeholder {\n    color: #999; }\n  .alert-input::-webkit-input-placeholder {\n    text-indent: 0;\n    color: #999; }\n\n.alert-button-group {\n  display: -webkit-box;\n  display: -webkit-flex;\n  display: -ms-flexbox;\n  display: flex;\n  -webkit-box-orient: horizontal;\n  -webkit-box-direction: normal;\n  -webkit-flex-direction: row;\n  -ms-flex-direction: row;\n  flex-direction: row; }\n  .alert-button-group.vertical {\n    -webkit-box-orient: vertical;\n    -webkit-box-direction: normal;\n    -webkit-flex-direction: column;\n    -ms-flex-direction: column;\n    flex-direction: column;\n    -webkit-flex-wrap: nowrap;\n    -ms-flex-wrap: nowrap;\n    flex-wrap: nowrap; }\n\n.alert-button {\n  z-index: 0;\n  display: block;\n  margin: 0;\n  font-size: 14px;\n  line-height: 20px; }\n\n.alert-tappable {\n  margin: 0;\n  padding: 0;\n  width: 100%;\n  font-size: inherit;\n  line-height: initial;\n  text-align: left;\n  background: transparent;\n  -webkit-appearance: none; }\n\nion-alert ion-backdrop {\n  background: #fff; }\n\n.alert-wrapper {\n  width: 100%;\n  max-width: 520px;\n  border: 1px solid #327eff;\n  border-radius: 0;\n  background: #e6e6e6; }\n\n.alert-head {\n  padding: 20px 22px 5px 22px;\n  text-align: left; }\n\n.alert-title {\n  font-size: 20px;\n  font-weight: 400; }\n\n.alert-sub-title {\n  font-size: 16px; }\n\n.alert-message,\n.alert-input-group {\n  padding: 0 22px 8px 22px;\n  color: #000; }\n\n.alert-message {\n  max-height: 240px;\n  font-size: 13px; }\n  .alert-message:empty {\n    padding: 0; }\n\n.alert-input {\n  margin: 5px 0 5px 0;\n  padding: 0 8px;\n  border: 2px solid rgba(0, 0, 0, 0.5);\n  line-height: 3rem;\n  color: #000; }\n  .alert-input:focus {\n    border-color: #327eff; }\n\n.alert-radio-group,\n.alert-checkbox-group {\n  position: relative;\n  overflow: auto;\n  max-height: 240px; }\n\n.alert-tappable {\n  position: relative;\n  display: -webkit-box;\n  display: -webkit-flex;\n  display: -ms-flexbox;\n  display: flex;\n  overflow: hidden;\n  min-height: 4.4rem; }\n\n.alert-radio-label {\n  overflow: hidden;\n  -webkit-box-flex: 1;\n  -webkit-flex: 1;\n  -ms-flex: 1;\n  flex: 1;\n  padding: 13px 26px;\n  text-overflow: ellipsis;\n  white-space: nowrap; }\n\n.alert-radio-icon {\n  position: relative;\n  top: 0;\n  left: 13px;\n  display: block;\n  margin: 0;\n  width: 16px;\n  height: 16px;\n  border-width: 2px;\n  border-style: solid;\n  border-radius: 50%;\n  border-color: rgba(0, 0, 0, 0.5); }\n\n.alert-radio-inner {\n  position: absolute;\n  top: 2px;\n  left: 2px;\n  display: none;\n  width: 8px;\n  height: 8px;\n  border-radius: 50%;\n  background: #327eff; }\n\n.alert-radio[aria-checked=true] .alert-radio-label {\n  color: #000; }\n\n.alert-radio[aria-checked=true] .alert-radio-icon {\n  border-color: rgba(0, 0, 0, 0.5); }\n\n.alert-radio[aria-checked=true] .alert-radio-inner {\n  display: block; }\n\n.alert-checkbox-label {\n  overflow: hidden;\n  -webkit-box-flex: 1;\n  -webkit-flex: 1;\n  -ms-flex: 1;\n  flex: 1;\n  padding: 13px 26px;\n  text-overflow: ellipsis;\n  white-space: nowrap; }\n\n.alert-checkbox[aria-checked=true] .alert-checkbox-label {\n  color: initial; }\n\n.alert-checkbox-icon {\n  position: relative;\n  top: 0;\n  left: 13px;\n  width: 16px;\n  height: 16px;\n  border-width: 2px;\n  border-style: solid;\n  border-radius: 0;\n  border-color: rgba(0, 0, 0, 0.5);\n  background: transparent; }\n\n.alert-checkbox[aria-checked=true] .alert-checkbox-icon {\n  border-color: #327eff;\n  background: #327eff; }\n\n.alert-checkbox[aria-checked=true] .alert-checkbox-inner {\n  position: absolute;\n  top: -2px;\n  left: 3px;\n  width: 6px;\n  height: 12px;\n  border-width: 1px;\n  border-top-width: 0;\n  border-left-width: 0;\n  border-style: solid;\n  border-color: #fff;\n  -webkit-transform: rotate(45deg);\n  transform: rotate(45deg); }\n\n.alert-button-group {\n  -webkit-flex-wrap: wrap-reverse;\n  -ms-flex-wrap: wrap-reverse;\n  flex-wrap: wrap-reverse;\n  -webkit-box-pack: end;\n  -webkit-justify-content: flex-end;\n  -ms-flex-pack: end;\n  justify-content: flex-end;\n  padding: 20px 22px 20px 22px; }\n  .alert-button-group.vertical .alert-button {\n    margin-top: 5px;\n    width: 100%; }\n    .alert-button-group.vertical .alert-button:first-child:not(:only-child) {\n      margin-top: 0; }\n\n.alert-button {\n  padding: 5px;\n  width: 49.5%;\n  border-radius: 0;\n  font-weight: 400;\n  color: #000;\n  background: #b8b8b8; }\n  .alert-button:first-child:not(:only-child) {\n    margin-right: 1%; }\n  .alert-button.activated {\n    background: darkgray; }\n\nion-badge {\n  display: inline-block;\n  padding: 3px 8px;\n  min-width: 10px;\n  font-size: 1.3rem;\n  font-weight: bold;\n  line-height: 1;\n  text-align: center;\n  white-space: nowrap;\n  vertical-align: baseline; }\n  ion-badge:empty {\n    display: none; }\n\nion-badge {\n  border-radius: 0;\n  color: #fff;\n  background-color: #327eff; }\n\n.badge-primary {\n  color: #fff;\n  background-color: #327eff; }\n\n.badge-secondary {\n  color: #fff;\n  background-color: #32db64; }\n\n.badge-danger {\n  color: #fff;\n  background-color: #f53d3d; }\n\n.badge-light {\n  color: #000;\n  background-color: #f4f4f4; }\n\n.badge-dark {\n  color: #fff;\n  background-color: #222; }\n\n.button {\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  -ms-user-select: none;\n  user-select: none;\n  -webkit-appearance: none;\n  -moz-appearance: none;\n  position: relative;\n  z-index: 0;\n  display: inline-block;\n  overflow: hidden;\n  text-align: center;\n  text-overflow: ellipsis;\n  text-transform: none;\n  white-space: nowrap;\n  cursor: pointer;\n  vertical-align: top;\n  vertical-align: -webkit-baseline-middle;\n  -webkit-transition: background-color, opacity 100ms linear;\n  transition: background-color, opacity 100ms linear;\n  -webkit-font-kerning: none;\n  font-kerning: none; }\n\n.button-inner {\n  display: -webkit-box;\n  display: -webkit-flex;\n  display: -ms-flexbox;\n  display: flex;\n  -webkit-flex-flow: row nowrap;\n  -ms-flex-flow: row nowrap;\n  flex-flow: row nowrap;\n  -webkit-flex-shrink: 0;\n  -ms-flex-negative: 0;\n  flex-shrink: 0;\n  -webkit-box-align: center;\n  -webkit-align-items: center;\n  -ms-flex-align: center;\n  align-items: center;\n  -webkit-box-pack: center;\n  -webkit-justify-content: center;\n  -ms-flex-pack: center;\n  justify-content: center;\n  width: 100%;\n  height: 100%; }\n\n[ion-button] {\n  text-decoration: none; }\n\na[disabled],\nbutton[disabled],\n[ion-button][disabled] {\n  cursor: default;\n  opacity: .4;\n  pointer-events: none; }\n\n.button-block {\n  display: block;\n  clear: both;\n  width: 100%; }\n  .button-block::after {\n    clear: both; }\n\n.button-full {\n  display: block;\n  width: 100%; }\n\n.button-full.button-outline {\n  border-right-width: 0;\n  border-left-width: 0;\n  border-radius: 0; }\n\n.button {\n  margin: 0.4rem 0.2rem;\n  padding: 0 1.1em;\n  height: 3.6rem;\n  border: 3px solid transparent;\n  border-radius: 0;\n  font-size: 1.4rem;\n  color: #fff;\n  background-color: #327eff; }\n  .button:hover:not(.disable-hover) {\n    border-color: #2e74eb;\n    background-color: #327eff; }\n  .button.activated {\n    background-color: #2e74eb; }\n\n.button-large {\n  padding: 0 1em;\n  height: 2.8em;\n  font-size: 2rem; }\n\n.button-small {\n  padding: 0 0.9em;\n  height: 2.1em;\n  font-size: 1.3rem; }\n  .button-small[icon-only] ion-icon {\n    font-size: 1.4em; }\n\n.button-block {\n  margin-right: 0;\n  margin-left: 0; }\n\n.button-full {\n  margin-right: 0;\n  margin-left: 0;\n  border-right-width: 0;\n  border-left-width: 0;\n  border-radius: 0; }\n\n.button-outline {\n  border-width: 1px;\n  border-style: solid;\n  border-color: #327eff;\n  color: #327eff;\n  background-color: transparent; }\n  .button-outline:hover:not(.disable-hover) {\n    background-color: rgba(158, 158, 158, 0.1); }\n  .button-outline.activated {\n    background-color: rgba(50, 126, 255, 0.16); }\n\n.button-clear {\n  color: #327eff;\n  background-color: transparent; }\n  .button-clear.activated {\n    background-color: rgba(158, 158, 158, 0.2); }\n  .button-clear:hover:not(.disable-hover) {\n    background-color: rgba(158, 158, 158, 0.1); }\n\n.button-round {\n  padding: 0 2.6rem;\n  border-radius: 64px; }\n\n.button-fab {\n  border-radius: 50%; }\n\n[icon-only] {\n  padding: 0; }\n\nion-button-effect {\n  display: none; }\n\n.button-primary {\n  color: #fff;\n  background-color: #327eff; }\n  .button-primary:hover:not(.disable-hover) {\n    border-color: #2e74eb;\n    background-color: #327eff; }\n  .button-primary.activated {\n    background-color: #2e74eb; }\n\n.button-outline-primary {\n  border-color: #3078f2;\n  color: #3078f2;\n  background-color: transparent; }\n  .button-outline-primary:hover:not(.disable-hover) {\n    border-color: #3078f2;\n    background-color: rgba(158, 158, 158, 0.1); }\n  .button-outline-primary.activated {\n    background-color: rgba(48, 120, 242, 0.16); }\n\n.button-clear-primary {\n  color: #327eff;\n  background-color: transparent; }\n  .button-clear-primary.activated {\n    background-color: rgba(158, 158, 158, 0.2); }\n  .button-clear-primary:hover:not(.disable-hover) {\n    color: #327eff; }\n\n.button-secondary {\n  color: #fff;\n  background-color: #32db64; }\n  .button-secondary:hover:not(.disable-hover) {\n    border-color: #2ec95c;\n    background-color: #32db64; }\n  .button-secondary.activated {\n    background-color: #2ec95c; }\n\n.button-outline-secondary {\n  border-color: #30d05f;\n  color: #30d05f;\n  background-color: transparent; }\n  .button-outline-secondary:hover:not(.disable-hover) {\n    border-color: #30d05f;\n    background-color: rgba(158, 158, 158, 0.1); }\n  .button-outline-secondary.activated {\n    background-color: rgba(48, 208, 95, 0.16); }\n\n.button-clear-secondary {\n  color: #32db64;\n  background-color: transparent; }\n  .button-clear-secondary.activated {\n    background-color: rgba(158, 158, 158, 0.2); }\n  .button-clear-secondary:hover:not(.disable-hover) {\n    color: #32db64; }\n\n.button-danger {\n  color: #fff;\n  background-color: #f53d3d; }\n  .button-danger:hover:not(.disable-hover) {\n    border-color: #e13838;\n    background-color: #f53d3d; }\n  .button-danger.activated {\n    background-color: #e13838; }\n\n.button-outline-danger {\n  border-color: #e93a3a;\n  color: #e93a3a;\n  background-color: transparent; }\n  .button-outline-danger:hover:not(.disable-hover) {\n    border-color: #e93a3a;\n    background-color: rgba(158, 158, 158, 0.1); }\n  .button-outline-danger.activated {\n    background-color: rgba(233, 58, 58, 0.16); }\n\n.button-clear-danger {\n  color: #f53d3d;\n  background-color: transparent; }\n  .button-clear-danger.activated {\n    background-color: rgba(158, 158, 158, 0.2); }\n  .button-clear-danger:hover:not(.disable-hover) {\n    color: #f53d3d; }\n\n.button-light {\n  color: #000;\n  background-color: #f4f4f4; }\n  .button-light:hover:not(.disable-hover) {\n    border-color: #e0e0e0;\n    background-color: #f4f4f4; }\n  .button-light.activated {\n    background-color: #e0e0e0; }\n\n.button-outline-light {\n  border-color: #e8e8e8;\n  color: #e8e8e8;\n  background-color: transparent; }\n  .button-outline-light:hover:not(.disable-hover) {\n    border-color: #e8e8e8;\n    background-color: rgba(158, 158, 158, 0.1); }\n  .button-outline-light.activated {\n    background-color: rgba(232, 232, 232, 0.16); }\n\n.button-clear-light {\n  color: #f4f4f4;\n  background-color: transparent; }\n  .button-clear-light.activated {\n    background-color: rgba(158, 158, 158, 0.2); }\n  .button-clear-light:hover:not(.disable-hover) {\n    color: #f4f4f4; }\n\n.button-dark {\n  color: #fff;\n  background-color: #222; }\n  .button-dark:hover:not(.disable-hover) {\n    border-color: #343434;\n    background-color: #222; }\n  .button-dark.activated {\n    background-color: #343434; }\n\n.button-outline-dark {\n  border-color: #2d2d2d;\n  color: #2d2d2d;\n  background-color: transparent; }\n  .button-outline-dark:hover:not(.disable-hover) {\n    border-color: #2d2d2d;\n    background-color: rgba(158, 158, 158, 0.1); }\n  .button-outline-dark.activated {\n    background-color: rgba(45, 45, 45, 0.16); }\n\n.button-clear-dark {\n  color: #222;\n  background-color: transparent; }\n  .button-clear-dark.activated {\n    background-color: rgba(158, 158, 158, 0.2); }\n  .button-clear-dark:hover:not(.disable-hover) {\n    color: #222; }\n\n.button-fab {\n  position: absolute;\n  overflow: hidden;\n  width: 56px;\n  min-width: 0;\n  height: 56px;\n  font-size: 14px;\n  line-height: 56px;\n  vertical-align: middle;\n  background-clip: padding-box; }\n\n.button-fab ion-icon {\n  -webkit-box-flex: 1;\n  -webkit-flex: 1;\n  -ms-flex: 1;\n  flex: 1;\n  font-size: 2.8rem; }\n\n[fab-center] {\n  left: 50%;\n  margin-left: -28px; }\n\n[fab-top] {\n  top: 16px; }\n\n[fab-right] {\n  right: 16px; }\n\n[fab-bottom] {\n  bottom: 16px; }\n\n[fab-left] {\n  left: 16px; }\n\n[fab-fixed] {\n  position: fixed; }\n\n[icon-left] ion-icon {\n  font-size: 1.4em;\n  line-height: .67;\n  pointer-events: none;\n  padding-right: .3em; }\n\n[icon-right] ion-icon {\n  font-size: 1.4em;\n  line-height: .67;\n  pointer-events: none;\n  padding-left: .4em; }\n\n[icon-only] {\n  padding: 0;\n  min-width: .9em; }\n\n[icon-only] ion-icon {\n  padding: 0 .5em;\n  font-size: 1.8em;\n  line-height: .67;\n  pointer-events: none; }\n\nion-card {\n  display: block;\n  overflow: hidden; }\n\nion-card img {\n  display: block;\n  width: 100%; }\n\nion-card-header {\n  display: block;\n  overflow: hidden;\n  text-overflow: ellipsis;\n  white-space: nowrap; }\n\nion-card-content {\n  display: block; }\n\nion-card {\n  margin: 8px 8px 8px 8px;\n  width: calc(100% - 16px);\n  border-radius: 1px;\n  font-size: 1.4rem;\n  background: #fff;\n  box-shadow: 0 1px 1px 1px rgba(0, 0, 0, 0.2); }\n  ion-card ion-list {\n    margin-bottom: 0; }\n  ion-card > .item:last-child,\n  ion-card > .item-wrapper:last-child .item {\n    border-bottom: 0; }\n  ion-card .item .item-inner {\n    border: 0; }\n  ion-card ion-card-content {\n    padding: 13px 16px 13px 16px;\n    font-size: 1.4rem;\n    line-height: 1.5; }\n  ion-card ion-card-header {\n    padding: 16px;\n    font-size: 1.6rem;\n    color: #222; }\n  ion-card ion-card-header + ion-card-content,\n  ion-card .item + ion-card-content {\n    padding-top: 0; }\n  ion-card ion-note[item-left],\n  ion-card ion-note[item-right] {\n    font-size: 1.3rem; }\n  ion-card ion-card-title {\n    display: block;\n    margin: 2px 0;\n    padding: 8px 0 8px 0;\n    font-size: 2.4rem;\n    line-height: 1.2;\n    color: #222; }\n  ion-card h1 {\n    margin: 0 0 2px;\n    font-size: 2.4rem;\n    font-weight: normal;\n    color: #222; }\n  ion-card h2 {\n    margin: 2px 0;\n    font-size: 1.6rem;\n    font-weight: normal;\n    color: #222; }\n  ion-card h3,\n  ion-card h4,\n  ion-card h5,\n  ion-card h6 {\n    margin: 2px 0;\n    font-size: 1.4rem;\n    font-weight: normal;\n    color: #222; }\n  ion-card p {\n    margin: 0 0 2px;\n    font-size: 1.4rem;\n    font-weight: normal;\n    line-height: 1.5;\n    color: #222; }\n\nion-card + ion-card {\n  margin-top: 0; }\n\nion-checkbox {\n  position: relative;\n  display: inline-block; }\n\n.checkbox-icon {\n  position: relative;\n  width: 16px;\n  height: 16px;\n  border-width: 2px;\n  border-style: solid;\n  border-radius: 0;\n  border-color: #333;\n  background-color: #fff; }\n\n.checkbox-checked {\n  border-color: #327eff;\n  background-color: #327eff; }\n\n.checkbox-checked .checkbox-inner {\n  position: absolute;\n  top: -2px;\n  left: 3px;\n  width: 6px;\n  height: 12px;\n  border-width: 1px;\n  border-top-width: 0;\n  border-left-width: 0;\n  border-style: solid;\n  border-color: #fff;\n  -webkit-transform: rotate(45deg);\n  transform: rotate(45deg); }\n\n.checkbox-disabled,\n.item-checkbox-disabled ion-label {\n  opacity: 0.3;\n  pointer-events: none; }\n\n.item ion-checkbox {\n  position: static;\n  display: block;\n  margin: 9px 16px 9px 4px; }\n  .item ion-checkbox[item-right] {\n    margin: 11px 10px 10px 0; }\n\nion-checkbox + .item-inner ion-label {\n  margin-left: 0; }\n\n.checkbox-primary .checkbox-checked {\n  border-color: #327eff;\n  background-color: #327eff; }\n  .checkbox-primary .checkbox-checked .checkbox-inner {\n    border-color: #fff; }\n\n.checkbox-secondary .checkbox-checked {\n  border-color: #32db64;\n  background-color: #32db64; }\n  .checkbox-secondary .checkbox-checked .checkbox-inner {\n    border-color: #fff; }\n\n.checkbox-danger .checkbox-checked {\n  border-color: #f53d3d;\n  background-color: #f53d3d; }\n  .checkbox-danger .checkbox-checked .checkbox-inner {\n    border-color: #fff; }\n\n.checkbox-light .checkbox-checked {\n  border-color: #f4f4f4;\n  background-color: #f4f4f4; }\n  .checkbox-light .checkbox-checked .checkbox-inner {\n    border-color: #000; }\n\n.checkbox-dark .checkbox-checked {\n  border-color: #222;\n  background-color: #222; }\n  .checkbox-dark .checkbox-checked .checkbox-inner {\n    border-color: #fff; }\n\nion-chip {\n  display: -webkit-inline-box;\n  display: -webkit-inline-flex;\n  display: -ms-inline-flexbox;\n  display: inline-flex;\n  -webkit-align-self: center;\n  -ms-flex-item-align: center;\n  align-self: center;\n  font-weight: normal;\n  vertical-align: middle;\n  box-sizing: border-box; }\n  ion-chip .button {\n    margin: 0;\n    width: 32px;\n    height: 32px;\n    border-radius: 50%; }\n  ion-chip ion-icon {\n    width: 32px;\n    height: 32px;\n    border-radius: 50%;\n    font-size: 18px;\n    line-height: 32px; }\n  ion-chip ion-avatar {\n    width: 32px;\n    min-width: 32px;\n    height: 32px;\n    min-height: 32px;\n    border-radius: 50%; }\n    ion-chip ion-avatar img {\n      display: block;\n      width: 100%;\n      max-width: 100%;\n      height: 100%;\n      max-height: 100%;\n      border-radius: 50%; }\n\nion-chip {\n  margin: 2px 0;\n  height: 32px;\n  border-radius: 16px;\n  font-size: 13px;\n  line-height: 32px;\n  color: rgba(0, 0, 0, 0.87);\n  background: rgba(0, 0, 0, 0.12); }\n  ion-chip > ion-label {\n    margin: 0 10px; }\n  ion-chip > ion-icon {\n    color: #fff;\n    background-color: #327eff; }\n  ion-chip .button {\n    border: 0; }\n\n.chip-primary,\nion-chip .icon-primary {\n  color: #fff;\n  background-color: #327eff; }\n\n.chip-secondary,\nion-chip .icon-secondary {\n  color: #fff;\n  background-color: #32db64; }\n\n.chip-danger,\nion-chip .icon-danger {\n  color: #fff;\n  background-color: #f53d3d; }\n\n.chip-light,\nion-chip .icon-light {\n  color: #000;\n  background-color: #f4f4f4; }\n\n.chip-dark,\nion-chip .icon-dark {\n  color: #fff;\n  background-color: #222; }\n\n[no-padding],\n[no-padding] scroll-content {\n  padding: 0; }\n\n[no-margin],\n[no-margin] scroll-content {\n  margin: 0; }\n\nion-fixed {\n  position: absolute;\n  z-index: 2;\n  -webkit-transform: translateZ(0);\n  transform: translateZ(0); }\n\nion-content {\n  background-color: #fff; }\n\n[padding],\n[padding] scroll-content {\n  padding: 16px; }\n\n[padding-top],\n[padding-top] scroll-content {\n  padding-top: 16px; }\n\n[padding-left],\n[padding-left] scroll-content {\n  padding-left: 16px; }\n\n[padding-right],\n[padding-right] scroll-content {\n  padding-right: 16px; }\n\n[padding-bottom],\n[padding-bottom] scroll-content {\n  padding-bottom: 16px; }\n\n[padding-vertical],\n[padding-vertical] scroll-content {\n  padding-top: 16px;\n  padding-bottom: 16px; }\n\n[padding-horizontal],\n[padding-horizontal] scroll-content {\n  padding-right: 16px;\n  padding-left: 16px; }\n\n[margin],\n[margin] scroll-content {\n  margin: 16px; }\n\n[margin-top],\n[margin-top] scroll-content {\n  margin-top: 16px; }\n\n[margin-left],\n[margin-left] scroll-content {\n  margin-left: 16px; }\n\n[margin-right],\n[margin-right] scroll-content {\n  margin-right: 16px; }\n\n[margin-bottom],\n[margin-bottom] scroll-content {\n  margin-bottom: 16px; }\n\n[margin-vertical],\n[margin-vertical] scroll-content {\n  margin-top: 16px;\n  margin-bottom: 16px; }\n\n[margin-horizontal],\n[margin-horizontal] scroll-content {\n  margin-right: 16px;\n  margin-left: 16px; }\n\nion-datetime {\n  display: -webkit-box;\n  display: -webkit-flex;\n  display: -ms-flexbox;\n  display: flex;\n  overflow: hidden; }\n\n.datetime-text {\n  overflow: hidden;\n  -webkit-box-flex: 1;\n  -webkit-flex: 1;\n  -ms-flex: 1;\n  flex: 1;\n  min-width: 16px;\n  min-height: 1.2em;\n  font-size: inherit;\n  line-height: 1.2;\n  text-overflow: ellipsis;\n  white-space: nowrap; }\n\n.datetime-disabled,\n.item-datetime-disabled ion-label {\n  opacity: .4;\n  pointer-events: none; }\n\n.item-label-stacked ion-datetime,\n.item-label-floating ion-datetime {\n  padding-left: 0;\n  width: 100%; }\n\nion-datetime {\n  padding: 13px 8px 13px 16px;\n  min-width: 45%; }\n\n.datetime-text {\n  padding: 0 8px;\n  min-height: 3.4rem;\n  border: 2px solid rgba(0, 0, 0, 0.5);\n  line-height: 3rem; }\n\n.item-datetime ion-label[floating] {\n  -webkit-transform: translate3d(8px, 41px, 0);\n  transform: translate3d(8px, 41px, 0); }\n\nion-icon {\n  display: inline-block;\n  font-size: 1.2em; }\n\nion-icon[small] {\n  min-height: 1.1em;\n  font-size: 1.1em; }\n\n.icon-primary {\n  color: #327eff; }\n\n.icon-secondary {\n  color: #32db64; }\n\n.icon-danger {\n  color: #f53d3d; }\n\n.icon-light {\n  color: #f4f4f4; }\n\n.icon-dark {\n  color: #222; }\n\nion-input,\nion-textarea {\n  position: relative;\n  display: block;\n  -webkit-box-flex: 1;\n  -webkit-flex: 1;\n  -ms-flex: 1;\n  flex: 1;\n  width: 100%; }\n\n.item-input ion-input,\n.item-input ion-textarea {\n  position: static; }\n\n.item.item-textarea {\n  -webkit-box-align: stretch;\n  -webkit-align-items: stretch;\n  -ms-flex-align: stretch;\n  align-items: stretch; }\n\n.text-input {\n  display: inline-block;\n  -webkit-box-flex: 1;\n  -webkit-flex: 1;\n  -ms-flex: 1;\n  flex: 1;\n  width: 92%;\n  width: calc(100% - 10px);\n  border: 0;\n  border-radius: 0;\n  background: transparent;\n  -webkit-appearance: none; }\n  .text-input::-moz-placeholder {\n    color: #999; }\n  .text-input:-ms-input-placeholder {\n    color: #999; }\n  .text-input::-webkit-input-placeholder {\n    text-indent: 0;\n    color: #999; }\n\ntextarea.text-input {\n  display: block; }\n\n.text-input[disabled] {\n  opacity: .4; }\n\ninput.text-input:-webkit-autofill {\n  background-color: transparent; }\n\n.platform-mobile textarea.text-input {\n  resize: none; }\n\n.input-cover {\n  position: absolute;\n  top: 0;\n  left: 0;\n  width: 100%;\n  height: 100%; }\n\n.input-has-focus .input-cover {\n  display: none; }\n\n.input-has-focus {\n  pointer-events: none; }\n\n.input-has-focus input,\n.input-has-focus textarea,\n.input-has-focus a,\n.input-has-focus button {\n  pointer-events: auto; }\n\n[next-input] {\n  position: absolute;\n  bottom: 1px;\n  padding: 0;\n  width: 1px;\n  height: 1px;\n  border: 0;\n  background: transparent;\n  pointer-events: none; }\n\n.text-input-clear-icon {\n  position: absolute;\n  top: 0;\n  display: none;\n  margin: 0;\n  padding: 0;\n  height: 100%;\n  background-repeat: no-repeat;\n  background-position: center; }\n\n.input-has-focus.input-has-value .text-input-clear-icon {\n  display: block; }\n\n.text-input.cloned-input {\n  position: relative;\n  top: 0;\n  pointer-events: none; }\n\n.item-input:not(.item-label-floating) .text-input.cloned-active {\n  display: none; }\n\n.text-input {\n  margin: 13px 8px 13px 8px;\n  padding: 0 8px;\n  width: calc(100% - 8px - 8px);\n  border: 2px solid rgba(0, 0, 0, 0.5);\n  line-height: 3rem; }\n\n.inset-input {\n  margin: 6.5px 16px 6.5px 16px;\n  padding: 6.5px 8px 6.5px 8px; }\n\n.item-input.input-has-focus .text-input {\n  border-color: #327eff; }\n\n.item-input.ng-valid.input-has-value:not(.input-has-focus) .text-input {\n  border-color: #32db64; }\n\n.item-input.ng-invalid.ng-touched:not(.input-has-focus) .text-input {\n  border-color: #f53d3d; }\n\n.item-label-stacked .text-input,\n.item-label-floating .text-input,\n.item-label-stacked ion-select,\n.item-label-floating ion-select {\n  margin-top: 8px;\n  margin-bottom: 8px;\n  margin-left: 0;\n  width: calc(100% - 8px); }\n\n.item-label-floating .text-input.cloned-input {\n  top: 32px; }\n\n.item-label-stacked .text-input.cloned-input {\n  top: 27px; }\n\n.item-label-stacked [item-right],\n.item-label-floating [item-right] {\n  -webkit-align-self: flex-end;\n  -ms-flex-item-align: end;\n  align-self: flex-end; }\n\nion-input[clearInput] {\n  position: relative; }\n  ion-input[clearInput] .text-input {\n    padding-right: 30px; }\n\n.text-input-clear-icon {\n  background-image: url(\"data:image/svg+xml;charset=utf-8,<svg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%20512%20512'><polygon%20fill='rgba(0,%200,%200,%200.5)'%20points='405,136.798%20375.202,107%20256,226.202%20136.798,107%20107,136.798%20226.202,256%20107,375.202%20136.798,405%20256,285.798%20375.202,405%20405,375.202%20285.798,256'/></svg>\");\n  right: 8px;\n  width: 30px;\n  background-size: 22px; }\n\n.item {\n  display: -webkit-box;\n  display: -webkit-flex;\n  display: -ms-flexbox;\n  display: flex;\n  overflow: hidden;\n  -webkit-box-align: center;\n  -webkit-align-items: center;\n  -ms-flex-align: center;\n  align-items: center;\n  -webkit-box-pack: justify;\n  -webkit-justify-content: space-between;\n  -ms-flex-pack: justify;\n  justify-content: space-between;\n  margin: 0;\n  padding: 0;\n  width: 100%;\n  min-height: 4.4rem;\n  border: 0;\n  font-weight: normal;\n  line-height: normal;\n  text-align: initial;\n  text-decoration: none;\n  color: inherit; }\n\n.item-inner {\n  display: -webkit-box;\n  display: -webkit-flex;\n  display: -ms-flexbox;\n  display: flex;\n  overflow: hidden;\n  -webkit-box-flex: 1;\n  -webkit-flex: 1;\n  -ms-flex: 1;\n  flex: 1;\n  -webkit-box-orient: vertical;\n  -webkit-box-direction: normal;\n  -webkit-flex-direction: inherit;\n  -ms-flex-direction: inherit;\n  flex-direction: inherit;\n  -webkit-box-align: inherit;\n  -webkit-align-items: inherit;\n  -ms-flex-align: inherit;\n  align-items: inherit;\n  -webkit-align-self: stretch;\n  -ms-flex-item-align: stretch;\n  align-self: stretch;\n  margin: 0;\n  padding: 0;\n  min-height: inherit;\n  border: 0; }\n\n.input-wrapper {\n  display: -webkit-box;\n  display: -webkit-flex;\n  display: -ms-flexbox;\n  display: flex;\n  overflow: hidden;\n  -webkit-box-flex: 1;\n  -webkit-flex: 1;\n  -ms-flex: 1;\n  flex: 1;\n  -webkit-box-orient: vertical;\n  -webkit-box-direction: normal;\n  -webkit-flex-direction: inherit;\n  -ms-flex-direction: inherit;\n  flex-direction: inherit;\n  -webkit-box-align: inherit;\n  -webkit-align-items: inherit;\n  -ms-flex-align: inherit;\n  align-items: inherit;\n  -webkit-align-self: stretch;\n  -ms-flex-item-align: stretch;\n  align-self: stretch;\n  text-overflow: ellipsis; }\n\n.item[no-lines],\n.item[no-lines] .item-inner {\n  border: 0; }\n\nion-item-group {\n  display: block; }\n\nion-item-divider {\n  z-index: 1000;\n  display: -webkit-box;\n  display: -webkit-flex;\n  display: -ms-flexbox;\n  display: flex;\n  overflow: hidden;\n  -webkit-box-align: center;\n  -webkit-align-items: center;\n  -ms-flex-align: center;\n  align-items: center;\n  -webkit-box-pack: justify;\n  -webkit-justify-content: space-between;\n  -ms-flex-pack: justify;\n  justify-content: space-between;\n  margin: 0;\n  padding: 0;\n  width: 100%;\n  min-height: 30px; }\n  ion-item-divider[sticky] {\n    position: -webkit-sticky;\n    position: sticky;\n    top: 0; }\n\n[vertical-align-top],\nion-input.item {\n  -webkit-box-align: start;\n  -webkit-align-items: flex-start;\n  -ms-flex-align: start;\n  align-items: flex-start; }\n\n.item > ion-icon[small]:first-child,\n.item-inner > ion-icon[small]:first-child {\n  min-width: 18px; }\n\n.item > ion-icon:first-child,\n.item-inner > ion-icon:first-child {\n  min-width: 24px;\n  text-align: center; }\n\n.item > ion-icon,\n.item-inner > ion-icon {\n  min-height: 2.4rem;\n  font-size: 2.4rem;\n  line-height: 1; }\n  .item > ion-icon[large],\n  .item-inner > ion-icon[large] {\n    min-height: 3.2rem;\n    font-size: 3.2rem; }\n  .item > ion-icon[small],\n  .item-inner > ion-icon[small] {\n    min-height: 1.8rem;\n    font-size: 1.8rem; }\n\nion-avatar,\nion-thumbnail {\n  display: block;\n  line-height: 1; }\n  ion-avatar img,\n  ion-thumbnail img {\n    display: block; }\n\n.item-cover {\n  position: absolute;\n  top: 0;\n  left: 0;\n  width: 100%;\n  height: 100%;\n  background: transparent;\n  cursor: pointer; }\n\nion-item-sliding {\n  position: relative;\n  display: block;\n  overflow: hidden;\n  width: 100%; }\n  ion-item-sliding .item {\n    position: static; }\n\nion-item-options {\n  position: absolute;\n  top: 0;\n  right: 0;\n  z-index: 1;\n  display: none;\n  -webkit-box-pack: end;\n  -webkit-justify-content: flex-end;\n  -ms-flex-pack: end;\n  justify-content: flex-end;\n  height: 100%;\n  font-size: 14px;\n  visibility: hidden; }\n\nion-item-options[side=left] {\n  right: auto;\n  left: 0;\n  -webkit-box-pack: start;\n  -webkit-justify-content: flex-start;\n  -ms-flex-pack: start;\n  justify-content: flex-start; }\n\nion-item-options .button {\n  margin: 0;\n  padding: 0 .7em;\n  height: 100%;\n  border-radius: 0;\n  box-shadow: none;\n  box-sizing: content-box; }\n\nion-item-options:not([icon-left]) .button .button-inner {\n  -webkit-box-orient: vertical;\n  -webkit-box-direction: normal;\n  -webkit-flex-direction: column;\n  -ms-flex-direction: column;\n  flex-direction: column; }\n\nion-item-options:not([icon-left]) .button ion-icon {\n  padding-right: 0;\n  padding-bottom: .3em;\n  padding-left: 0; }\n\nion-item-sliding.active-slide .item,\nion-item-sliding.active-slide .item.activated {\n  position: relative;\n  z-index: 2;\n  opacity: 1;\n  -webkit-transition: -webkit-transform 500ms cubic-bezier(0.36, 0.66, 0.04, 1);\n  transition: transform 500ms cubic-bezier(0.36, 0.66, 0.04, 1);\n  pointer-events: none;\n  will-change: transform; }\n\nion-item-sliding.active-slide ion-item-options {\n  display: -webkit-box;\n  display: -webkit-flex;\n  display: -ms-flexbox;\n  display: flex; }\n\nion-item-sliding.active-slide.active-options-left ion-item-options[side=left] {\n  width: 100%;\n  visibility: visible; }\n\nion-item-sliding.active-slide.active-options-right ion-item-options:not([side=left]) {\n  width: 100%;\n  visibility: visible; }\n\n.button-expandable {\n  -webkit-flex-shrink: 0;\n  -ms-flex-negative: 0;\n  flex-shrink: 0;\n  -webkit-transition-duration: 0;\n  transition-duration: 0;\n  -webkit-transition-property: none;\n  transition-property: none;\n  -webkit-transition-timing-function: cubic-bezier(0.65, 0.05, 0.36, 1);\n  transition-timing-function: cubic-bezier(0.65, 0.05, 0.36, 1); }\n\nion-item-sliding.active-swipe-right .button-expandable {\n  -webkit-box-ordinal-group: 2;\n  -webkit-order: 1;\n  -ms-flex-order: 1;\n  order: 1;\n  padding-left: 90%;\n  -webkit-transition-duration: .6s;\n  transition-duration: .6s;\n  -webkit-transition-property: padding-left;\n  transition-property: padding-left; }\n\nion-item-sliding.active-swipe-left .button-expandable {\n  -webkit-box-ordinal-group: 0;\n  -webkit-order: -1;\n  -ms-flex-order: -1;\n  order: -1;\n  padding-right: 90%;\n  -webkit-transition-duration: .6s;\n  transition-duration: .6s;\n  -webkit-transition-property: padding-right;\n  transition-property: padding-right; }\n\nion-reorder {\n  display: none;\n  -webkit-box-flex: 1;\n  -webkit-flex: 1;\n  -ms-flex: 1;\n  flex: 1;\n  -webkit-box-align: center;\n  -webkit-align-items: center;\n  -ms-flex-align: center;\n  align-items: center;\n  -webkit-box-pack: center;\n  -webkit-justify-content: center;\n  -ms-flex-pack: center;\n  justify-content: center;\n  max-width: 40px;\n  height: 100%;\n  font-size: 1.7em;\n  opacity: .25;\n  -webkit-transform: translate3d(120%, 0, 0);\n  transform: translate3d(120%, 0, 0);\n  -webkit-transition: -webkit-transform 125ms ease-in;\n  transition: transform 125ms ease-in;\n  pointer-events: all;\n  -ms-touch-action: manipulation;\n  touch-action: manipulation; }\n  ion-reorder ion-icon {\n    pointer-events: none; }\n\n.reorder-enabled ion-reorder {\n  display: -webkit-box;\n  display: -webkit-flex;\n  display: -ms-flexbox;\n  display: flex; }\n\n.reorder-visible ion-reorder {\n  -webkit-transform: translate3d(0, 0, 0);\n  transform: translate3d(0, 0, 0); }\n\n.reorder-list-active .item,\n.reorder-list-active .item-wrapper {\n  -webkit-transition: -webkit-transform 300ms;\n  transition: transform 300ms;\n  will-change: transform; }\n\n.reorder-list-active .item-inner {\n  pointer-events: none; }\n\n.item-wrapper.reorder-active,\n.item.reorder-active,\n.reorder-active {\n  z-index: 4;\n  box-shadow: 0 0 10px rgba(0, 0, 0, 0.4);\n  opacity: .8;\n  -webkit-transition: none;\n  transition: none;\n  pointer-events: none; }\n\n.item {\n  position: relative;\n  padding-right: 0;\n  padding-left: 16px;\n  font-size: 1.6rem;\n  font-weight: normal;\n  text-transform: none;\n  color: #000;\n  background-color: #fff;\n  box-shadow: none; }\n  .item h1 {\n    margin: 0 0 2px;\n    font-size: 2.4rem;\n    font-weight: normal; }\n  .item h2 {\n    margin: 2px 0;\n    font-size: 1.6rem;\n    font-weight: normal; }\n  .item h3,\n  .item h4,\n  .item h5,\n  .item h6 {\n    margin: 2px 0;\n    font-size: 1.4rem;\n    font-weight: normal;\n    line-height: normal; }\n  .item p {\n    overflow: inherit;\n    margin: 0 0 2px;\n    font-size: 1.4rem;\n    line-height: normal;\n    text-overflow: inherit;\n    color: #666; }\n\n.item.activated {\n  background-color: #aaa; }\n\n.item[no-lines] {\n  border-width: 0; }\n\n.item .item-inner {\n  padding-right: 8px;\n  border-bottom: 1px solid transparent; }\n\n[item-left],\n[item-right] {\n  margin: 9px 8px 9px 0; }\n\nion-icon[item-left],\nion-icon[item-right] {\n  margin-top: 11px;\n  margin-bottom: 10px;\n  margin-left: 0; }\n\n.item-button {\n  padding: 0 .6em;\n  height: 25px;\n  font-size: 1.2rem; }\n\n.item-button[icon-only] ion-icon,\n.item-button[icon-only] {\n  padding: 0 1px; }\n\n[text-wrap] ion-label {\n  font-size: 1.4rem;\n  line-height: 1.5; }\n\nion-icon[item-left] + .item-inner,\nion-icon[item-left] + .item-input {\n  margin-left: 8px; }\n\nion-avatar[item-left],\nion-thumbnail[item-left] {\n  margin: 8px 16px 8px 0; }\n\nion-avatar[item-right],\nion-thumbnail[item-right] {\n  margin: 8px; }\n\nion-avatar {\n  min-width: 4rem;\n  min-height: 4rem; }\n  ion-avatar img {\n    max-width: 4rem;\n    max-height: 4rem;\n    border-radius: 2rem; }\n\nion-thumbnail {\n  min-width: 8rem;\n  min-height: 8rem; }\n  ion-thumbnail img {\n    max-width: 8rem;\n    max-height: 8rem; }\n\nion-note {\n  color: rgba(0, 0, 0, 0.5); }\n\nion-item-divider {\n  padding-left: 16px;\n  color: #222;\n  background-color: #fff; }\n\n.item .text-primary {\n  color: #327eff; }\n\n.item-primary {\n  color: #fff;\n  background-color: #327eff; }\n\n.item .text-secondary {\n  color: #32db64; }\n\n.item-secondary {\n  color: #fff;\n  background-color: #32db64; }\n\n.item .text-danger {\n  color: #f53d3d; }\n\n.item-danger {\n  color: #fff;\n  background-color: #f53d3d; }\n\n.item .text-light {\n  color: #f4f4f4; }\n\n.item-light {\n  color: #000;\n  background-color: #f4f4f4; }\n\n.item .text-dark {\n  color: #222; }\n\n.item-dark {\n  color: #fff;\n  background-color: #222; }\n\nion-item-sliding {\n  background-color: #fff; }\n\nion-label {\n  display: block;\n  overflow: hidden;\n  -webkit-box-flex: 1;\n  -webkit-flex: 1;\n  -ms-flex: 1;\n  flex: 1;\n  margin: 0;\n  font-size: inherit;\n  text-overflow: ellipsis;\n  white-space: nowrap; }\n\n.item-input ion-label {\n  -webkit-box-flex: initial;\n  -webkit-flex: initial;\n  -ms-flex: initial;\n  flex: initial;\n  max-width: 200px;\n  pointer-events: none; }\n\n[text-wrap] ion-label {\n  white-space: normal; }\n\nion-label[fixed] {\n  -webkit-box-flex: 0;\n  -webkit-flex: 0 0 100px;\n  -ms-flex: 0 0 100px;\n  flex: 0 0 100px;\n  width: 100px;\n  min-width: 100px;\n  max-width: 200px; }\n\n.item-label-stacked ion-label,\n.item-label-floating ion-label {\n  -webkit-align-self: stretch;\n  -ms-flex-item-align: stretch;\n  align-self: stretch;\n  width: auto;\n  max-width: 100%; }\n\nion-label[stacked],\nion-label[floating] {\n  margin-bottom: 0; }\n\n.item-label-stacked .input-wrapper,\n.item-label-floating .input-wrapper {\n  -webkit-box-flex: 1;\n  -webkit-flex: 1;\n  -ms-flex: 1;\n  flex: 1;\n  -webkit-box-orient: vertical;\n  -webkit-box-direction: normal;\n  -webkit-flex-direction: column;\n  -ms-flex-direction: column;\n  flex-direction: column; }\n\n.item-label-stacked ion-select,\n.item-label-floating ion-select {\n  -webkit-align-self: stretch;\n  -ms-flex-item-align: stretch;\n  align-self: stretch;\n  max-width: 100%; }\n\n.item-select ion-label[floating] {\n  -webkit-transform: translate3d(0, 0, 0) scale(0.8);\n  transform: translate3d(0, 0, 0) scale(0.8); }\n\nion-label {\n  margin: 13px 8px 13px 0; }\n\n.item-input ion-label,\n.item-select ion-label,\n.item-datetime ion-label {\n  color: #999; }\n\nion-label[stacked] {\n  font-size: 1.2rem; }\n\nion-label[floating] {\n  -webkit-transform: translate3d(8px, 34px, 0);\n  transform: translate3d(8px, 34px, 0);\n  -webkit-transform-origin: left top;\n  transform-origin: left top; }\n\nion-label[stacked],\nion-label[floating] {\n  margin-bottom: 0;\n  margin-left: 0; }\n\n.input-has-focus ion-label[stacked],\n.input-has-focus ion-label[floating] {\n  color: #327eff; }\n\n.input-has-focus ion-label[floating],\n.input-has-value ion-label[floating] {\n  -webkit-transform: translate3d(0, 0, 0) scale(0.8);\n  transform: translate3d(0, 0, 0) scale(0.8); }\n\n.item-label-stacked [item-right],\n.item-label-floating [item-right] {\n  margin-top: 13px;\n  margin-bottom: 13px; }\n\n.label-primary,\n.item-input .label-primary,\n.item-select .label-primary,\n.item-datetime .label-primary {\n  color: #327eff; }\n\n.label-secondary,\n.item-input .label-secondary,\n.item-select .label-secondary,\n.item-datetime .label-secondary {\n  color: #32db64; }\n\n.label-danger,\n.item-input .label-danger,\n.item-select .label-danger,\n.item-datetime .label-danger {\n  color: #f53d3d; }\n\n.label-light,\n.item-input .label-light,\n.item-select .label-light,\n.item-datetime .label-light {\n  color: #f4f4f4; }\n\n.label-dark,\n.item-input .label-dark,\n.item-select .label-dark,\n.item-datetime .label-dark {\n  color: #222; }\n\nion-list-header {\n  display: -webkit-box;\n  display: -webkit-flex;\n  display: -ms-flexbox;\n  display: flex;\n  overflow: hidden;\n  -webkit-box-align: center;\n  -webkit-align-items: center;\n  -ms-flex-align: center;\n  align-items: center;\n  -webkit-box-pack: justify;\n  -webkit-justify-content: space-between;\n  -ms-flex-pack: justify;\n  justify-content: space-between;\n  margin: 0;\n  padding: 0;\n  width: 100%;\n  min-height: 4rem; }\n\nion-list {\n  display: block;\n  margin: 0;\n  padding: 0;\n  list-style-type: none; }\n\nion-list[inset] {\n  overflow: hidden;\n  -webkit-transform: translateZ(0);\n  transform: translateZ(0); }\n\nion-list-header,\nion-item-divider {\n  margin-left: 0;\n  padding-left: 16px;\n  border-bottom: 1px solid transparent;\n  font-size: 2rem;\n  color: #000; }\n\nion-list {\n  margin: 0 0 16px 0; }\n  ion-list .item .item-inner {\n    border-bottom: 1px solid transparent; }\n  ion-list > .item:first-child,\n  ion-list > .item-wrapper:first-child .item {\n    border-top: 1px solid transparent; }\n  ion-list > .item:last-child,\n  ion-list > .item-wrapper:last-child .item {\n    border-bottom: 1px solid transparent; }\n  ion-list > .item:last-child ion-label,\n  ion-list > .item:last-child .item-inner,\n  ion-list > .item-wrapper:last-child ion-label,\n  ion-list > .item-wrapper:last-child .item-inner {\n    border-bottom: 0; }\n  ion-list > ion-input:last-child::after {\n    left: 0; }\n  ion-list ion-item-options button,\n  ion-list ion-item-options [button] {\n    display: -webkit-inline-box;\n    display: -webkit-inline-flex;\n    display: -ms-inline-flexbox;\n    display: inline-flex;\n    -webkit-box-align: center;\n    -webkit-align-items: center;\n    -ms-flex-align: center;\n    align-items: center;\n    margin: 1px 0;\n    height: calc(100% - 2px);\n    border: 0;\n    border-radius: 0;\n    box-shadow: none;\n    box-sizing: border-box; }\n    ion-list ion-item-options button::before,\n    ion-list ion-item-options [button]::before {\n      margin: 0 auto; }\n  ion-list .item[no-lines],\n  ion-list .item[no-lines] .item-inner {\n    border-width: 0; }\n  ion-list + ion-list ion-list-header {\n    margin-top: -16px;\n    padding-top: 0; }\n\nion-list[inset] {\n  margin: 16px 16px 16px 16px;\n  border-radius: 2px; }\n  ion-list[inset] .item:first-child {\n    border-top-width: 0;\n    border-top-left-radius: 2px;\n    border-top-right-radius: 2px; }\n  ion-list[inset] .item:last-child {\n    border-bottom-width: 0;\n    border-bottom-left-radius: 2px;\n    border-bottom-right-radius: 2px; }\n  ion-list[inset] .item-input {\n    padding-right: 0;\n    padding-left: 0; }\n  ion-list[inset] + ion-list[inset] {\n    margin-top: 0; }\n  ion-list[inset] ion-list-header {\n    background-color: #fff; }\n\nion-list[no-lines] .item,\nion-list[no-lines] .item .item-inner {\n  border-width: 0; }\n\nion-loading {\n  position: absolute;\n  top: 0;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  z-index: 1000;\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  -webkit-box-pack: center;\n  -webkit-justify-content: center;\n  -ms-flex-pack: center;\n  justify-content: center; }\n\n.loading-wrapper {\n  z-index: 10;\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  opacity: 0; }\n\n.loading-wrapper {\n  padding: 20px;\n  max-width: 280px;\n  max-height: 90%;\n  border-radius: 2px;\n  color: #fff;\n  background: #000; }\n\n.loading-spinner + .loading-content {\n  margin-left: 16px; }\n\n.loading-spinner .spinner-ios line,\n.loading-spinner .spinner-ios-small line {\n  stroke: #fff; }\n\n.loading-spinner .spinner-bubbles circle {\n  fill: #fff; }\n\n.loading-spinner .spinner-circles circle {\n  fill: #fff; }\n\n.loading-spinner .spinner-crescent circle {\n  stroke: #fff; }\n\n.loading-spinner .spinner-dots circle {\n  fill: #fff; }\n\n.menu-inner {\n  background: #f2f2f2; }\n\n.modal-wrapper {\n  opacity: .01;\n  -webkit-transform: translate3d(0, 40px, 0);\n  transform: translate3d(0, 40px, 0); }\n\nion-picker-cmp {\n  position: absolute;\n  top: 0;\n  left: 0;\n  z-index: 1000;\n  display: block;\n  width: 100%;\n  height: 100%; }\n\n.picker-toolbar {\n  z-index: 1; }\n\n.picker-wrapper {\n  position: absolute;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  z-index: 10;\n  display: -webkit-box;\n  display: -webkit-flex;\n  display: -ms-flexbox;\n  display: flex;\n  overflow: hidden;\n  -webkit-box-orient: vertical;\n  -webkit-box-direction: normal;\n  -webkit-flex-direction: column;\n  -ms-flex-direction: column;\n  flex-direction: column;\n  margin: auto;\n  width: 100%;\n  max-width: 500px;\n  -webkit-transform: translate3d(0, 100%, 0);\n  transform: translate3d(0, 100%, 0); }\n\n.picker-columns {\n  position: relative;\n  display: -webkit-box;\n  display: -webkit-flex;\n  display: -ms-flexbox;\n  display: flex;\n  overflow: hidden;\n  -webkit-box-pack: center;\n  -webkit-justify-content: center;\n  -ms-flex-pack: center;\n  justify-content: center; }\n\n.picker-col {\n  position: relative;\n  display: -webkit-box;\n  display: -webkit-flex;\n  display: -ms-flexbox;\n  display: flex;\n  max-height: 100%; }\n\n.picker-opts {\n  position: relative;\n  width: 100%;\n  min-width: 50px;\n  max-width: 100%; }\n\n.picker-prefix {\n  position: relative;\n  -webkit-box-flex: 1;\n  -webkit-flex: 1;\n  -ms-flex: 1;\n  flex: 1;\n  min-width: 50px;\n  min-width: 45%;\n  text-align: right;\n  white-space: nowrap; }\n\n.picker-suffix {\n  position: relative;\n  -webkit-box-flex: 1;\n  -webkit-flex: 1;\n  -ms-flex: 1;\n  flex: 1;\n  min-width: 50px;\n  min-width: 45%;\n  text-align: left;\n  white-space: nowrap; }\n\n.picker-opt {\n  position: absolute;\n  top: 0;\n  left: 0;\n  overflow: hidden;\n  -webkit-box-flex: 1;\n  -webkit-flex: 1;\n  -ms-flex: 1;\n  flex: 1;\n  width: 100%; }\n\n.picker-opt .button-inner {\n  display: block;\n  overflow: hidden;\n  text-overflow: ellipsis;\n  white-space: nowrap;\n  -webkit-transition: opacity 150ms ease-in-out;\n  transition: opacity 150ms ease-in-out; }\n\n.picker-opt.picker-opt-disabled {\n  pointer-events: none; }\n\n.picker-opt-disabled .button-inner {\n  opacity: 0; }\n\n.picker-opts-left .button-inner {\n  -webkit-box-pack: start;\n  -webkit-justify-content: flex-start;\n  -ms-flex-pack: start;\n  justify-content: flex-start; }\n\n.picker-opts-right .button-inner {\n  -webkit-box-pack: end;\n  -webkit-justify-content: flex-end;\n  -ms-flex-pack: end;\n  justify-content: flex-end; }\n\n.picker-above-highlight,\n.picker-below-highlight {\n  display: none;\n  pointer-events: none; }\n\n.picker-wrapper {\n  height: 260px;\n  border-top: 1px solid transparent;\n  background: #fff; }\n\n.picker-toolbar {\n  display: -webkit-box;\n  display: -webkit-flex;\n  display: -ms-flexbox;\n  display: flex;\n  -webkit-box-pack: end;\n  -webkit-justify-content: flex-end;\n  -ms-flex-pack: end;\n  justify-content: flex-end;\n  height: 44px;\n  background: #fff; }\n\n.hairlines .picker-wrapper,\n.hairlines .picker-toolbar {\n  border-width: 0.55px; }\n\n.picker-toolbar-button {\n  -webkit-box-flex: 1;\n  -webkit-flex: 1;\n  -ms-flex: 1;\n  flex: 1;\n  text-align: right; }\n\n.picker-toolbar-cancel {\n  font-weight: normal;\n  text-align: left; }\n\n.picker-button,\n.picker-button.activated {\n  margin: 0;\n  height: 44px;\n  color: #327eff;\n  background: transparent;\n  box-shadow: none; }\n\n.picker-columns {\n  height: 216px;\n  -webkit-perspective: 1800px;\n  perspective: 1800px; }\n\n.picker-col {\n  padding: 0 4px;\n  -webkit-transform-style: preserve-3d;\n  transform-style: preserve-3d; }\n\n.picker-prefix,\n.picker-suffix,\n.picker-opts {\n  top: 77px;\n  font-size: 18px;\n  line-height: 42px;\n  color: #000;\n  -webkit-transform-style: preserve-3d;\n  transform-style: preserve-3d;\n  pointer-events: none; }\n\n.picker-opts ion-button-effect {\n  display: none; }\n\n.picker-opt {\n  margin: 0;\n  padding: 0;\n  font-size: 18px;\n  line-height: 42px;\n  background: transparent;\n  -webkit-transition-timing-function: ease-out;\n  transition-timing-function: ease-out;\n  -webkit-backface-visibility: hidden;\n  backface-visibility: hidden;\n  pointer-events: auto; }\n\n.picker-opt .button-inner {\n  -webkit-transition: 200ms;\n  transition: 200ms; }\n\n.picker-prefix,\n.picker-suffix,\n.picker-opt-selected {\n  font-size: 22px;\n  color: #327eff; }\n\n.picker-above-highlight {\n  position: absolute;\n  top: 0;\n  left: 0;\n  z-index: 10;\n  width: 100%;\n  height: 81px;\n  border-bottom: 1px solid transparent;\n  background: -webkit-linear-gradient(top, white 20%, rgba(255, 255, 255, 0.7) 100%);\n  background: linear-gradient(to bottom, white 20%, rgba(255, 255, 255, 0.7) 100%);\n  -webkit-transform: translate3d(0, 0, 90px);\n  transform: translate3d(0, 0, 90px); }\n\n.picker-below-highlight {\n  position: absolute;\n  top: 115px;\n  left: 0;\n  z-index: 11;\n  width: 100%;\n  height: 119px;\n  border-top: 1px solid transparent;\n  background: -webkit-linear-gradient(bottom, white 30%, rgba(255, 255, 255, 0.7) 100%);\n  background: linear-gradient(to top, white 30%, rgba(255, 255, 255, 0.7) 100%);\n  -webkit-transform: translate3d(0, 0, 90px);\n  transform: translate3d(0, 0, 90px); }\n\nion-popover {\n  position: absolute;\n  top: 0;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  z-index: 1000;\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  -webkit-box-pack: center;\n  -webkit-justify-content: center;\n  -ms-flex-pack: center;\n  justify-content: center; }\n\n.popover-wrapper {\n  z-index: 10;\n  opacity: 0; }\n\n.popover-content {\n  position: absolute;\n  z-index: 10;\n  display: -webkit-box;\n  display: -webkit-flex;\n  display: -ms-flexbox;\n  display: flex;\n  overflow: auto;\n  -webkit-box-orient: vertical;\n  -webkit-box-direction: normal;\n  -webkit-flex-direction: column;\n  -ms-flex-direction: column;\n  flex-direction: column; }\n  .popover-content scroll-content {\n    position: relative; }\n\n.popover-content {\n  width: 200px;\n  min-width: 0;\n  min-height: 0;\n  max-height: 90%;\n  border: 2px solid #ccc;\n  border-radius: 0;\n  color: #000;\n  background: #f2f2f2;\n  -webkit-transform-origin: top left;\n  transform-origin: top left; }\n  .popover-content ion-content {\n    background: #f2f2f2; }\n\n.popover-content .item {\n  background-color: #f2f2f2; }\n\n.popover-viewport {\n  opacity: 0;\n  -webkit-transition-delay: 100ms;\n  transition-delay: 100ms; }\n\nion-radio {\n  position: relative;\n  display: inline-block; }\n\n.radio-icon {\n  position: relative;\n  top: 0;\n  left: 0;\n  display: block;\n  margin: 0;\n  width: 16px;\n  height: 16px;\n  border-width: 2px;\n  border-style: solid;\n  border-radius: 50%;\n  border-color: #333; }\n\n.radio-inner {\n  position: absolute;\n  top: 2px;\n  left: 2px;\n  display: none;\n  width: 8px;\n  height: 8px;\n  border-radius: 50%;\n  background-color: #333; }\n\n.radio-checked {\n  border-color: #327eff; }\n\n.radio-checked .radio-inner {\n  display: block; }\n\n.radio-disabled,\n.item-radio-disabled ion-label {\n  opacity: 0.3;\n  pointer-events: none; }\n\n.item ion-radio {\n  position: static;\n  display: block;\n  -webkit-box-ordinal-group: 0;\n  -webkit-order: -1;\n  -ms-flex-order: -1;\n  order: -1;\n  margin: 9px 20px 9px 4px; }\n  .item ion-radio[item-right] {\n    -webkit-box-ordinal-group: 1;\n    -webkit-order: 0;\n    -ms-flex-order: 0;\n    order: 0;\n    margin: 11px 10px 10px 0; }\n\n.item-radio ion-label {\n  margin-left: 0; }\n\n.radio-primary .radio-checked {\n  border-color: #327eff; }\n\n.radio-secondary .radio-checked {\n  border-color: #32db64; }\n\n.radio-danger .radio-checked {\n  border-color: #f53d3d; }\n\n.radio-light .radio-checked {\n  border-color: #f4f4f4; }\n\n.radio-dark .radio-checked {\n  border-color: #222; }\n\n.item-range .item-inner {\n  overflow: visible; }\n\n.item-range .input-wrapper {\n  overflow: visible;\n  -webkit-box-orient: vertical;\n  -webkit-box-direction: normal;\n  -webkit-flex-direction: column;\n  -ms-flex-direction: column;\n  flex-direction: column; }\n\n.item-range ion-range {\n  width: 100%; }\n  .item-range ion-range ion-label {\n    -webkit-align-self: center;\n    -ms-flex-item-align: center;\n    align-self: center; }\n\nion-range {\n  position: relative;\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  ion-range ion-label {\n    -webkit-box-flex: initial;\n    -webkit-flex: initial;\n    -ms-flex: initial;\n    flex: initial; }\n  ion-range ion-icon {\n    min-height: 2.4rem;\n    font-size: 2.4rem;\n    line-height: 1; }\n\n.range-slider {\n  position: relative;\n  -webkit-box-flex: 1;\n  -webkit-flex: 1;\n  -ms-flex: 1;\n  flex: 1;\n  cursor: pointer; }\n\nion-range {\n  padding: 8px 8px; }\n\n[range-left],\n[range-right] {\n  margin: 0 12px; }\n\n[range-left] {\n  margin-left: 0; }\n\n[range-right] {\n  margin-right: 0; }\n\n.range-has-pin {\n  padding-top: 28px; }\n\n.range-slider {\n  height: 42px; }\n\n.range-bar {\n  position: absolute;\n  top: 21px;\n  left: 0;\n  width: 100%;\n  height: 2px;\n  background: #bdbdbd;\n  pointer-events: none; }\n\n.range-pressed .range-bar-active {\n  will-change: left, right; }\n\n.range-pressed .range-knob-handle {\n  will-change: left; }\n\n.range-bar-active {\n  bottom: 0;\n  width: auto;\n  background: #327eff; }\n\n.range-knob-handle {\n  position: absolute;\n  top: 21px;\n  left: 0%;\n  margin-top: -21px;\n  margin-left: -21px;\n  width: 42px;\n  height: 42px;\n  text-align: center; }\n\n.range-knob {\n  position: absolute;\n  top: 10px;\n  left: 17px;\n  width: 8px;\n  height: 24px;\n  border-radius: 4px;\n  background: #327eff;\n  pointer-events: none; }\n\n.range-tick {\n  position: absolute;\n  top: 19px;\n  margin-left: -1px;\n  width: 2px;\n  height: 6px;\n  border-radius: 4px;\n  background: #bdbdbd;\n  pointer-events: none; }\n\n.range-tick-active {\n  background: #327eff; }\n\n.range-pin {\n  position: relative;\n  top: -24px;\n  display: inline-block;\n  padding: 8px;\n  min-width: 28px;\n  border-radius: 50px;\n  font-size: 12px;\n  text-align: center;\n  color: #fff;\n  background: #327eff;\n  -webkit-transform: translate3d(0, 28px, 0) scale(0.01);\n  transform: translate3d(0, 28px, 0) scale(0.01);\n  -webkit-transition: -webkit-transform 120ms ease;\n  transition: transform 120ms ease; }\n\n.range-knob-pressed .range-pin {\n  -webkit-transform: translate3d(0, 0, 0) scale(1);\n  transform: translate3d(0, 0, 0) scale(1); }\n\n.range-disabled {\n  opacity: .5; }\n\n.range-primary .range-bar-active,\n.range-primary .range-tick-active,\n.range-primary .range-knob,\n.range-primary .range-pin {\n  background: #327eff; }\n\n.range-secondary .range-bar-active,\n.range-secondary .range-tick-active,\n.range-secondary .range-knob,\n.range-secondary .range-pin {\n  background: #32db64; }\n\n.range-danger .range-bar-active,\n.range-danger .range-tick-active,\n.range-danger .range-knob,\n.range-danger .range-pin {\n  background: #f53d3d; }\n\n.range-light .range-bar-active,\n.range-light .range-tick-active,\n.range-light .range-knob,\n.range-light .range-pin {\n  background: #f4f4f4; }\n\n.range-dark .range-bar-active,\n.range-dark .range-tick-active,\n.range-dark .range-knob,\n.range-dark .range-pin {\n  background: #222; }\n\nion-searchbar {\n  position: relative;\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  width: 100%; }\n\n.searchbar-icon {\n  pointer-events: none; }\n\n.searchbar-input-container {\n  position: relative;\n  display: block;\n  -webkit-flex-shrink: 1;\n  -ms-flex-negative: 1;\n  flex-shrink: 1;\n  width: 100%; }\n\n.searchbar-input {\n  -webkit-appearance: none;\n  -moz-appearance: none;\n  display: block;\n  width: 100%;\n  border: 0;\n  font-family: inherit; }\n\n.searchbar-clear-icon {\n  display: none;\n  margin: 0;\n  padding: 0;\n  min-height: 0; }\n\n.searchbar-has-value.searchbar-has-focus .searchbar-clear-icon {\n  display: block; }\n\nion-searchbar {\n  padding: 8px;\n  background: transparent; }\n\n.searchbar-input-container {\n  border: 2px solid rgba(0, 0, 0, 0.5); }\n\n.searchbar-search-icon {\n  background-image: url(\"data:image/svg+xml;charset=utf-8,<svg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%20512%20512'><path%20fill='%23858585'%20d='M337.509,305.372h-17.501l-6.571-5.486c20.791-25.232,33.922-57.054,33.922-93.257C347.358,127.632,283.896,64,205.135,64C127.452,64,64,127.632,64,206.629s63.452,142.628,142.225,142.628c35.011,0,67.831-13.167,92.991-34.008l6.561,5.487v17.551L415.18,448L448,415.086L337.509,305.372z%20M206.225,305.372c-54.702,0-98.463-43.887-98.463-98.743c0-54.858,43.761-98.742,98.463-98.742c54.7,0,98.462,43.884,98.462,98.742C304.687,261.485,260.925,305.372,206.225,305.372z'/></svg>\");\n  position: absolute;\n  top: 5px;\n  right: 8px;\n  width: 21px;\n  height: 21px;\n  background-repeat: no-repeat;\n  background-size: 20px; }\n  .searchbar-search-icon.activated {\n    background-color: transparent; }\n\n.searchbar-input {\n  padding: 0 8px;\n  height: auto;\n  border-radius: 0;\n  font-size: 1.4rem;\n  font-weight: 400;\n  line-height: 3rem;\n  color: #141414;\n  background-color: #fff;\n  background-position: 8px center; }\n  .searchbar-input::-moz-placeholder {\n    color: #858585; }\n  .searchbar-input:-ms-input-placeholder {\n    color: #858585; }\n  .searchbar-input::-webkit-input-placeholder {\n    text-indent: 0;\n    color: #858585; }\n\n.searchbar-clear-icon {\n  background-image: url(\"data:image/svg+xml;charset=utf-8,<svg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%20512%20512'><polygon%20fill='%23858585'%20points='405,136.798%20375.202,107%20256,226.202%20136.798,107%20107,136.798%20226.202,256%20107,375.202%20136.798,405%20256,285.798%20375.202,405%20405,375.202%20285.798,256'/></svg>\");\n  position: absolute;\n  top: 0;\n  right: 8px;\n  padding: 0;\n  width: 22px;\n  height: 100%;\n  background-repeat: no-repeat;\n  background-position: center;\n  background-size: 22px; }\n  .searchbar-clear-icon.activated {\n    background-color: transparent; }\n\n.searchbar-has-focus .searchbar-input-container {\n  border-color: #327eff; }\n\n.searchbar-has-value .searchbar-search-icon {\n  display: none; }\n\n.searchbar-ios-cancel {\n  display: none; }\n\n.searchbar-md-cancel {\n  display: none; }\n\n.toolbar ion-searchbar {\n  padding: 2px; }\n\n.searchbar-primary.searchbar-has-focus .searchbar-input-container {\n  border-color: #327eff; }\n\n.searchbar-secondary.searchbar-has-focus .searchbar-input-container {\n  border-color: #32db64; }\n\n.searchbar-danger.searchbar-has-focus .searchbar-input-container {\n  border-color: #f53d3d; }\n\n.searchbar-light.searchbar-has-focus .searchbar-input-container {\n  border-color: #f4f4f4; }\n\n.searchbar-dark.searchbar-has-focus .searchbar-input-container {\n  border-color: #222; }\n\nion-segment {\n  display: -webkit-box;\n  display: -webkit-flex;\n  display: -ms-flexbox;\n  display: flex;\n  -webkit-box-flex: 1;\n  -webkit-flex: 1;\n  -ms-flex: 1;\n  flex: 1;\n  -webkit-box-align: center;\n  -webkit-align-items: center;\n  -ms-flex-align: center;\n  align-items: center;\n  -webkit-box-pack: center;\n  -webkit-justify-content: center;\n  -ms-flex-pack: center;\n  justify-content: center;\n  width: 100%; }\n\n.segment-button {\n  position: relative;\n  display: block;\n  overflow: hidden;\n  margin-right: 0;\n  margin-left: 0;\n  text-align: center;\n  text-overflow: ellipsis;\n  white-space: nowrap;\n  cursor: pointer; }\n\nion-segment {\n  -webkit-box-pack: start;\n  -webkit-justify-content: flex-start;\n  -ms-flex-pack: start;\n  justify-content: flex-start; }\n\n.segment-button {\n  padding: 0 6px;\n  height: 4rem;\n  font-size: 1.3rem;\n  font-weight: bold;\n  line-height: 4rem;\n  text-transform: uppercase;\n  color: #000;\n  background-color: transparent;\n  opacity: 0.5; }\n  .segment-button.segment-activated {\n    opacity: 1; }\n  .segment-button ion-icon {\n    font-size: 2.6rem;\n    line-height: 4rem; }\n\n.segment-button-disabled {\n  opacity: 0.3;\n  pointer-events: none; }\n\n.toolbar ion-segment {\n  margin: 0 auto; }\n\n.segment-primary .segment-button {\n  color: #327eff; }\n  .segment-primary .segment-button.activated, .segment-primary .segment-button.segment-activated {\n    border-color: #327eff;\n    color: #327eff;\n    opacity: 1; }\n\n.segment-secondary .segment-button {\n  color: #32db64; }\n  .segment-secondary .segment-button.activated, .segment-secondary .segment-button.segment-activated {\n    border-color: #32db64;\n    color: #32db64;\n    opacity: 1; }\n\n.segment-danger .segment-button {\n  color: #f53d3d; }\n  .segment-danger .segment-button.activated, .segment-danger .segment-button.segment-activated {\n    border-color: #f53d3d;\n    color: #f53d3d;\n    opacity: 1; }\n\n.segment-light .segment-button {\n  color: #f4f4f4; }\n  .segment-light .segment-button.activated, .segment-light .segment-button.segment-activated {\n    border-color: #f4f4f4;\n    color: #f4f4f4;\n    opacity: 1; }\n\n.segment-dark .segment-button {\n  color: #222; }\n  .segment-dark .segment-button.activated, .segment-dark .segment-button.segment-activated {\n    border-color: #222;\n    color: #222;\n    opacity: 1; }\n\nion-select {\n  display: -webkit-box;\n  display: -webkit-flex;\n  display: -ms-flexbox;\n  display: flex;\n  overflow: hidden;\n  max-width: 45%; }\n\n.select-text {\n  overflow: hidden;\n  -webkit-box-flex: 1;\n  -webkit-flex: 1;\n  -ms-flex: 1;\n  flex: 1;\n  min-width: 16px;\n  font-size: inherit;\n  text-overflow: ellipsis;\n  white-space: nowrap; }\n\n.item-multiple-inputs ion-select {\n  position: relative; }\n\n.select-disabled,\n.item-select-disabled ion-label {\n  opacity: .4;\n  pointer-events: none; }\n\nion-select {\n  -webkit-box-flex: 1;\n  -webkit-flex: 1;\n  -ms-flex: 1;\n  flex: 1;\n  margin: 13px 8px 13px 8px;\n  padding: 0 8px;\n  max-width: 100%;\n  border: 2px solid rgba(0, 0, 0, 0.5);\n  line-height: 3rem; }\n\n.select-placeholder {\n  color: rgba(0, 0, 0, 0.5); }\n\n.item-select ion-label {\n  margin-left: 0; }\n\n.select-icon {\n  position: relative;\n  -webkit-align-self: center;\n  -ms-flex-item-align: center;\n  align-self: center;\n  width: 18px;\n  height: 18px; }\n\n.select-icon .select-icon-inner {\n  position: absolute;\n  top: 3px;\n  left: 5px;\n  display: block;\n  width: 9px;\n  height: 9px;\n  border-top: 2px solid rgba(0, 0, 0, 0.5);\n  border-right: 2px solid rgba(0, 0, 0, 0.5);\n  -webkit-transform: rotate(135deg);\n  transform: rotate(135deg);\n  pointer-events: none; }\n\n.select-text {\n  min-height: 3rem; }\n\nion-spinner {\n  position: relative;\n  display: inline-block;\n  width: 28px;\n  height: 28px; }\n\nion-spinner svg {\n  position: absolute;\n  top: 0;\n  left: 0;\n  width: 100%;\n  height: 100%;\n  -webkit-transform: translateZ(0);\n  transform: translateZ(0); }\n\nion-spinner.spinner-paused svg {\n  -webkit-animation-play-state: paused;\n  animation-play-state: paused; }\n\n.spinner-ios line,\n.spinner-ios-small line {\n  stroke: #69717d;\n  stroke-width: 4px;\n  stroke-linecap: round; }\n\n.spinner-ios svg,\n.spinner-ios-small svg {\n  -webkit-animation: spinner-fade-out 1s linear infinite;\n  animation: spinner-fade-out 1s linear infinite; }\n\n.spinner-bubbles circle {\n  fill: #000; }\n\n.spinner-bubbles svg {\n  -webkit-animation: spinner-scale-out 1s linear infinite;\n  animation: spinner-scale-out 1s linear infinite; }\n\n.spinner-circles circle {\n  fill: #69717d; }\n\n.spinner-circles svg {\n  -webkit-animation: spinner-fade-out 1s linear infinite;\n  animation: spinner-fade-out 1s linear infinite; }\n\n.spinner-crescent circle {\n  fill: transparent;\n  stroke: #000;\n  stroke-width: 4px;\n  stroke-dasharray: 128px;\n  stroke-dashoffset: 82px; }\n\n.spinner-crescent svg {\n  -webkit-animation: spinner-rotate 1s linear infinite;\n  animation: spinner-rotate 1s linear infinite; }\n\n.spinner-dots circle {\n  fill: #444;\n  stroke-width: 0; }\n\n.spinner-dots svg {\n  -webkit-transform-origin: center;\n  transform-origin: center;\n  -webkit-animation: spinner-dots 1s linear infinite;\n  animation: spinner-dots 1s linear infinite; }\n\n@keyframes spinner-fade-out {\n  0% {\n    opacity: 1; }\n  100% {\n    opacity: 0; } }\n\n@keyframes spinner-scale-out {\n  0% {\n    -webkit-transform: scale(1, 1);\n    transform: scale(1, 1); }\n  100% {\n    -webkit-transform: scale(0, 0);\n    transform: scale(0, 0); } }\n\n@keyframes spinner-rotate {\n  0% {\n    -webkit-transform: rotate(0deg);\n    transform: rotate(0deg); }\n  100% {\n    -webkit-transform: rotate(360deg);\n    transform: rotate(360deg); } }\n\n@keyframes spinner-dots {\n  0% {\n    opacity: .9;\n    -webkit-transform: scale(1, 1);\n    transform: scale(1, 1); }\n  50% {\n    opacity: .3;\n    -webkit-transform: scale(0.4, 0.4);\n    transform: scale(0.4, 0.4); }\n  100% {\n    opacity: .9;\n    -webkit-transform: scale(1, 1);\n    transform: scale(1, 1); } }\n\n.spinner-primary.spinner-ios line,\n.spinner-primary.spinner-ios-small line,\n.spinner-primary.spinner-crescent circle {\n  stroke: #327eff; }\n\n.spinner-primary.spinner-bubbles circle,\n.spinner-primary.spinner-circles circle,\n.spinner-primary.spinner-dots circle {\n  fill: #327eff; }\n\n.spinner-secondary.spinner-ios line,\n.spinner-secondary.spinner-ios-small line,\n.spinner-secondary.spinner-crescent circle {\n  stroke: #32db64; }\n\n.spinner-secondary.spinner-bubbles circle,\n.spinner-secondary.spinner-circles circle,\n.spinner-secondary.spinner-dots circle {\n  fill: #32db64; }\n\n.spinner-danger.spinner-ios line,\n.spinner-danger.spinner-ios-small line,\n.spinner-danger.spinner-crescent circle {\n  stroke: #f53d3d; }\n\n.spinner-danger.spinner-bubbles circle,\n.spinner-danger.spinner-circles circle,\n.spinner-danger.spinner-dots circle {\n  fill: #f53d3d; }\n\n.spinner-light.spinner-ios line,\n.spinner-light.spinner-ios-small line,\n.spinner-light.spinner-crescent circle {\n  stroke: #f4f4f4; }\n\n.spinner-light.spinner-bubbles circle,\n.spinner-light.spinner-circles circle,\n.spinner-light.spinner-dots circle {\n  fill: #f4f4f4; }\n\n.spinner-dark.spinner-ios line,\n.spinner-dark.spinner-ios-small line,\n.spinner-dark.spinner-crescent circle {\n  stroke: #222; }\n\n.spinner-dark.spinner-bubbles circle,\n.spinner-dark.spinner-circles circle,\n.spinner-dark.spinner-dots circle {\n  fill: #222; }\n\n.tab-button {\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  -ms-user-select: none;\n  user-select: none;\n  position: relative;\n  z-index: 0;\n  display: -webkit-box;\n  display: -webkit-flex;\n  display: -ms-flexbox;\n  display: flex;\n  overflow: hidden;\n  -webkit-box-flex: 1;\n  -webkit-flex: 1;\n  -ms-flex: 1;\n  flex: 1;\n  -webkit-box-orient: vertical;\n  -webkit-box-direction: normal;\n  -webkit-flex-direction: column;\n  -ms-flex-direction: column;\n  flex-direction: column;\n  -webkit-box-align: center;\n  -webkit-align-items: center;\n  -ms-flex-align: center;\n  align-items: center;\n  -webkit-align-self: center;\n  -ms-flex-item-align: center;\n  align-self: center;\n  -webkit-box-pack: center;\n  -webkit-justify-content: center;\n  -ms-flex-pack: center;\n  justify-content: center;\n  margin: 0;\n  border: 0;\n  border-radius: 0;\n  text-align: center;\n  text-decoration: none;\n  background: none;\n  cursor: pointer; }\n\n.tab-disabled {\n  pointer-events: none; }\n  .tab-disabled ion-badge,\n  .tab-disabled ion-icon,\n  .tab-disabled span {\n    opacity: .4; }\n\n.tab-hidden {\n  display: none; }\n\n.tab-button-text {\n  margin-top: 3px;\n  margin-bottom: 2px; }\n\n.tab-button-text,\n.tab-button-icon {\n  display: none;\n  overflow: hidden;\n  -webkit-align-self: center;\n  -ms-flex-item-align: center;\n  align-self: center;\n  min-width: 26px;\n  max-width: 100%;\n  text-overflow: ellipsis;\n  white-space: nowrap; }\n\n.has-icon .tab-button-icon,\n.has-title .tab-button-text {\n  display: block; }\n\n.has-title-only .tab-button-text {\n  white-space: normal; }\n\ntab-highlight {\n  display: none; }\n\n[tabsLayout=icon-bottom] .tab-button .tab-button-icon {\n  -webkit-box-ordinal-group: 11;\n  -webkit-order: 10;\n  -ms-flex-order: 10;\n  order: 10; }\n\n[tabsLayout=icon-left] .tab-button {\n  -webkit-box-orient: horizontal;\n  -webkit-box-direction: normal;\n  -webkit-flex-direction: row;\n  -ms-flex-direction: row;\n  flex-direction: row; }\n  [tabsLayout=icon-left] .tab-button .tab-button-icon {\n    padding-right: 8px;\n    text-align: right; }\n\n[tabsLayout=icon-right] .tab-button {\n  -webkit-box-orient: horizontal;\n  -webkit-box-direction: normal;\n  -webkit-flex-direction: row;\n  -ms-flex-direction: row;\n  flex-direction: row; }\n  [tabsLayout=icon-right] .tab-button .tab-button-icon {\n    -webkit-box-ordinal-group: 11;\n    -webkit-order: 10;\n    -ms-flex-order: 10;\n    order: 10;\n    padding-left: 8px;\n    text-align: left; }\n\n[tabsLayout=icon-hide] .tab-button-icon {\n  display: none; }\n\n[tabsLayout=title-hide] .tab-button-text {\n  display: none; }\n\n.tab-badge {\n  position: absolute;\n  top: 6%;\n  right: 4%;\n  right: calc(50% - 50px);\n  padding: 1px 6px;\n  height: auto;\n  font-size: 12px;\n  line-height: 16px; }\n\n.has-icon .tab-badge {\n  right: calc(50% - 30px); }\n\n[tabsLayout=icon-bottom] .tab-badge,\n[tabsLayout=icon-left] .tab-badge,\n[tabsLayout=icon-right] .tab-badge {\n  right: calc(50% - 50px); }\n\nion-tabbar {\n  background: #f8f8f8; }\n\n.tab-button {\n  padding: 12px 10px 5px 10px;\n  min-height: 4.8rem;\n  border-bottom: 2px solid transparent;\n  border-radius: 0;\n  font-size: 1.2rem;\n  font-weight: normal;\n  color: rgba(140, 140, 140, 0.7);\n  box-shadow: none; }\n  .tab-button[aria-selected=true] {\n    border-bottom-color: #327eff;\n    color: #327eff; }\n  .tab-button.activated {\n    background: rgba(0, 0, 0, 0.1); }\n\n.tab-button-text {\n  margin-top: 5px;\n  margin-bottom: 5px; }\n\n.tab-button-icon {\n  min-width: 2.4rem;\n  font-size: 2.4rem; }\n\n[tabsLayout=icon-bottom] .tab-button {\n  padding-top: 8px;\n  padding-bottom: 8px; }\n\n[tabsLayout=icon-right] .tab-button,\n[tabsLayout=icon-left] .tab-button {\n  padding-bottom: 10px; }\n  [tabsLayout=icon-right] .tab-button ion-icon,\n  [tabsLayout=icon-left] .tab-button ion-icon {\n    min-width: 24px; }\n\n[tabsLayout=icon-hide] .tab-button,\n[tabsLayout=title-hide] .tab-button,\n.tab-button.icon-only,\n.tab-button.has-title-only {\n  padding: 6px 10px; }\n\n[tabsPlacement=bottom] .tab-button {\n  border-top: 2px solid transparent;\n  border-bottom-width: 0; }\n  [tabsPlacement=bottom] .tab-button[aria-selected=true] {\n    border-top-color: #327eff; }\n\n.tabs-primary ion-tabbar {\n  background-color: #327eff; }\n  .tabs-primary ion-tabbar .tab-button {\n    color: rgba(255, 255, 255, 0.7); }\n  .tabs-primary ion-tabbar .tab-button:hover:not(.disable-hover),\n  .tabs-primary ion-tabbar .tab-button[aria-selected=true] {\n    border-color: #fff;\n    color: #fff; }\n\n.tabs-secondary ion-tabbar {\n  background-color: #32db64; }\n  .tabs-secondary ion-tabbar .tab-button {\n    color: rgba(255, 255, 255, 0.7); }\n  .tabs-secondary ion-tabbar .tab-button:hover:not(.disable-hover),\n  .tabs-secondary ion-tabbar .tab-button[aria-selected=true] {\n    border-color: #fff;\n    color: #fff; }\n\n.tabs-danger ion-tabbar {\n  background-color: #f53d3d; }\n  .tabs-danger ion-tabbar .tab-button {\n    color: rgba(255, 255, 255, 0.7); }\n  .tabs-danger ion-tabbar .tab-button:hover:not(.disable-hover),\n  .tabs-danger ion-tabbar .tab-button[aria-selected=true] {\n    border-color: #fff;\n    color: #fff; }\n\n.tabs-light ion-tabbar {\n  background-color: #f4f4f4; }\n  .tabs-light ion-tabbar .tab-button {\n    color: rgba(0, 0, 0, 0.7); }\n  .tabs-light ion-tabbar .tab-button:hover:not(.disable-hover),\n  .tabs-light ion-tabbar .tab-button[aria-selected=true] {\n    border-color: #000;\n    color: #000; }\n\n.tabs-dark ion-tabbar {\n  background-color: #222; }\n  .tabs-dark ion-tabbar .tab-button {\n    color: rgba(255, 255, 255, 0.7); }\n  .tabs-dark ion-tabbar .tab-button:hover:not(.disable-hover),\n  .tabs-dark ion-tabbar .tab-button[aria-selected=true] {\n    border-color: #fff;\n    color: #fff; }\n\nion-toggle {\n  position: relative; }\n\n.toggle-icon {\n  position: relative;\n  display: block;\n  width: 40px;\n  height: 18px;\n  border: 2px solid #323232;\n  border-radius: 18px;\n  background-color: transparent;\n  pointer-events: none; }\n\n.toggle-inner {\n  position: absolute;\n  top: 2px;\n  left: 2px;\n  width: 10px;\n  height: 10px;\n  border-radius: 50%;\n  background-color: #323232;\n  -webkit-transition-duration: 300ms;\n  transition-duration: 300ms;\n  -webkit-transition-property: -webkit-transform, background-color;\n  transition-property: transform, background-color; }\n\n.toggle-checked {\n  border-color: #327eff;\n  background-color: #327eff; }\n\n.toggle-checked .toggle-inner {\n  background-color: #fff;\n  -webkit-transform: translate3d(22px, 0, 0);\n  transform: translate3d(22px, 0, 0); }\n\n.toggle-disabled,\n.item-toggle-disabled ion-label {\n  opacity: 0.3;\n  pointer-events: none; }\n\n.toggle-disabled ion-radio {\n  opacity: 0.3; }\n\n.item ion-toggle {\n  margin: 0;\n  padding: 12px 8px 12px 16px;\n  cursor: pointer; }\n  .item ion-toggle[item-left] {\n    padding: 12px 18px 12px 2px; }\n\n.item-toggle ion-label {\n  margin-left: 0; }\n\n.toggle-primary .toggle-checked {\n  border-color: #327eff;\n  background-color: #327eff; }\n\n.toggle-primary .toggle-checked .toggle-inner {\n  background-color: #fff; }\n\n.toggle-secondary .toggle-checked {\n  border-color: #32db64;\n  background-color: #32db64; }\n\n.toggle-secondary .toggle-checked .toggle-inner {\n  background-color: #fff; }\n\n.toggle-danger .toggle-checked {\n  border-color: #f53d3d;\n  background-color: #f53d3d; }\n\n.toggle-danger .toggle-checked .toggle-inner {\n  background-color: #fff; }\n\n.toggle-light .toggle-checked {\n  border-color: #f4f4f4;\n  background-color: #f4f4f4; }\n\n.toggle-light .toggle-checked .toggle-inner {\n  background-color: #000; }\n\n.toggle-dark .toggle-checked {\n  border-color: #222;\n  background-color: #222; }\n\n.toggle-dark .toggle-checked .toggle-inner {\n  background-color: #fff; }\n\nion-toast {\n  position: absolute;\n  top: 0;\n  left: 0;\n  z-index: 1000;\n  display: block;\n  width: 100%;\n  height: 100%;\n  pointer-events: none; }\n\n.toast-container {\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  pointer-events: auto; }\n\n.toast-button {\n  padding: 19px 16px 17px;\n  font-size: 1.5rem; }\n\n.toast-message {\n  -webkit-box-flex: 1;\n  -webkit-flex: 1;\n  -ms-flex: 1;\n  flex: 1; }\n\n.toast-wrapper {\n  position: absolute;\n  right: 0;\n  left: 0;\n  z-index: 10;\n  display: block;\n  margin: auto;\n  max-width: 700px;\n  border-radius: 0;\n  background: black; }\n  .toast-wrapper.toast-top {\n    top: 0;\n    opacity: .01; }\n  .toast-wrapper.toast-bottom {\n    bottom: 0;\n    opacity: .01; }\n  .toast-wrapper.toast-middle {\n    opacity: .01; }\n\n.toast-message {\n  padding: 1.5rem;\n  font-size: 1.4rem;\n  color: #fff; }\n\n.toast-button {\n  color: #fff; }\n\n.toolbar {\n  display: -webkit-box;\n  display: -webkit-flex;\n  display: -ms-flexbox;\n  display: flex;\n  overflow: hidden;\n  -webkit-box-orient: horizontal;\n  -webkit-box-direction: normal;\n  -webkit-flex-direction: row;\n  -ms-flex-direction: row;\n  flex-direction: row;\n  -webkit-box-align: center;\n  -webkit-align-items: center;\n  -ms-flex-align: center;\n  align-items: center;\n  -webkit-box-pack: justify;\n  -webkit-justify-content: space-between;\n  -ms-flex-pack: justify;\n  justify-content: space-between;\n  width: 100%; }\n\n.toolbar-background {\n  position: absolute;\n  top: 0;\n  left: 0;\n  z-index: -1;\n  width: 100%;\n  height: 100%;\n  border: 0;\n  -webkit-transform: translateZ(0);\n  transform: translateZ(0);\n  pointer-events: none; }\n\nion-title {\n  display: -webkit-box;\n  display: -webkit-flex;\n  display: -ms-flexbox;\n  display: flex;\n  -webkit-box-flex: 1;\n  -webkit-flex: 1;\n  -ms-flex: 1;\n  flex: 1;\n  -webkit-box-align: center;\n  -webkit-align-items: center;\n  -ms-flex-align: center;\n  align-items: center;\n  -webkit-transform: translateZ(0);\n  transform: translateZ(0); }\n\n.toolbar-title {\n  display: block;\n  overflow: hidden;\n  width: 100%;\n  text-overflow: ellipsis;\n  white-space: nowrap; }\n\nion-buttons {\n  display: block;\n  margin: 0 .2rem;\n  -webkit-transform: translateZ(0);\n  transform: translateZ(0);\n  pointer-events: none; }\n\nion-buttons button,\nion-buttons a,\nion-buttons input,\nion-buttons textarea,\nion-buttons div {\n  pointer-events: auto; }\n\n.toolbar[transparent] .toolbar-background {\n  border-color: transparent;\n  background: transparent; }\n\nion-buttons,\n.bar-button-menutoggle {\n  z-index: 99;\n  -webkit-transform: translateZ(0);\n  transform: translateZ(0); }\n\nion-navbar.toolbar {\n  display: -webkit-box;\n  display: -webkit-flex;\n  display: -ms-flexbox;\n  display: flex;\n  opacity: 0;\n  -webkit-transform: translateZ(0);\n  transform: translateZ(0); }\n  ion-navbar.toolbar.show-navbar {\n    opacity: 1; }\n\n.bar-button {\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  -ms-user-select: none;\n  user-select: none;\n  -webkit-appearance: none;\n  -moz-appearance: none;\n  position: relative;\n  display: inline-block;\n  margin: 0;\n  padding: 0;\n  line-height: 1;\n  text-align: center;\n  text-overflow: ellipsis;\n  text-transform: none;\n  white-space: nowrap;\n  cursor: pointer;\n  vertical-align: top;\n  vertical-align: -webkit-baseline-middle; }\n\n.bar-button::after {\n  position: absolute;\n  top: -7px;\n  right: -2px;\n  bottom: -6px;\n  left: -2px;\n  content: \"\"; }\n\n.bar-button-menutoggle {\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.back-button {\n  display: none; }\n  .back-button.show-back-button {\n    display: inline-block; }\n\n.back-button-text {\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.toolbar {\n  padding: 4px;\n  min-height: 4.6rem; }\n\n.toolbar-background {\n  border-color: #b2b2b2;\n  background: #f8f8f8; }\n\n.toolbar-content {\n  -webkit-box-flex: 1;\n  -webkit-flex: 1;\n  -ms-flex: 1;\n  flex: 1;\n  -webkit-box-ordinal-group: 4;\n  -webkit-order: 3;\n  -ms-flex-order: 3;\n  order: 3;\n  min-width: 0;\n  max-width: 100%; }\n\n.toolbar-title {\n  padding: 0 6px;\n  font-size: 1.5rem;\n  font-weight: bold;\n  text-transform: uppercase;\n  color: #000; }\n\nion-buttons {\n  -webkit-box-ordinal-group: 5;\n  -webkit-order: 4;\n  -ms-flex-order: 4;\n  order: 4;\n  -webkit-transform: translateZ(0);\n  transform: translateZ(0); }\n\nion-buttons[left] {\n  -webkit-box-ordinal-group: 3;\n  -webkit-order: 2;\n  -ms-flex-order: 2;\n  order: 2; }\n\nion-buttons[left] .bar-button:first-child {\n  margin-left: 0; }\n\nion-buttons[end] {\n  -webkit-box-ordinal-group: 6;\n  -webkit-order: 5;\n  -ms-flex-order: 5;\n  order: 5;\n  text-align: right; }\n\nion-buttons[right] {\n  -webkit-box-ordinal-group: 7;\n  -webkit-order: 6;\n  -ms-flex-order: 6;\n  order: 6;\n  text-align: right; }\n\n.bar-button {\n  margin-top: 0;\n  margin-right: .2rem;\n  margin-bottom: 0;\n  margin-left: .2rem;\n  padding: 0 5px;\n  height: 32px;\n  border: 0;\n  border-radius: 2px;\n  font-size: 1.4rem;\n  font-weight: 500;\n  text-transform: uppercase; }\n\n.bar-button-solid,\n.bar-button-outline {\n  overflow: hidden; }\n\n.bar-button-outline {\n  border-width: 1px;\n  border-style: solid;\n  border-color: #000;\n  color: #000;\n  background-color: transparent; }\n  .bar-button-outline:hover:not(.disable-hover) {\n    opacity: .4; }\n  .bar-button-outline.activated {\n    color: #fff;\n    background-color: #000; }\n\n.bar-button-solid {\n  color: #fff;\n  background-color: #000; }\n  .bar-button-solid:hover:not(.disable-hover) {\n    color: #fff; }\n  .bar-button-solid.activated {\n    color: #fff;\n    background-color: #141414; }\n\n.bar-button-icon-left ion-icon {\n  padding-right: .3em;\n  font-size: 1.4em;\n  line-height: .67;\n  pointer-events: none; }\n\n.bar-button-icon-right ion-icon {\n  padding-left: .4em;\n  font-size: 1.4em;\n  line-height: .67;\n  pointer-events: none; }\n\n.bar-button[icon-only] {\n  padding: 0; }\n  .bar-button[icon-only] ion-icon {\n    padding: 0 .1em;\n    min-width: 28px;\n    font-size: 1.8em;\n    line-height: .67;\n    pointer-events: none; }\n\n.back-button {\n  margin: 0 6px;\n  min-width: 44px;\n  box-shadow: none; }\n\n.back-button-icon {\n  margin: 0;\n  padding: 0 6px;\n  font-size: 2.4rem;\n  font-weight: normal;\n  text-align: left; }\n\n.bar-button-menutoggle {\n  -webkit-box-ordinal-group: 2;\n  -webkit-order: 1;\n  -ms-flex-order: 1;\n  order: 1;\n  margin: 0 6px;\n  padding: 0 2px;\n  min-width: 44px; }\n  .bar-button-menutoggle ion-icon {\n    padding: 0 6px;\n    font-size: 2.4rem; }\n\n.bar-button-menutoggle[end],\n.bar-button-menutoggle[right] {\n  -webkit-box-ordinal-group: 8;\n  -webkit-order: 7;\n  -ms-flex-order: 7;\n  order: 7;\n  margin: 0 2px;\n  min-width: 28px; }\n\n.bar-button-clear-default,\n.bar-button-default {\n  color: #000;\n  background-color: transparent; }\n  .bar-button-clear-default:hover:not(.disable-hover),\n  .bar-button-default:hover:not(.disable-hover) {\n    color: #000; }\n\n.bar-button-clear-clear,\n.bar-button-clear {\n  color: #000;\n  background-color: transparent; }\n  .bar-button-clear-clear:hover:not(.disable-hover),\n  .bar-button-clear:hover:not(.disable-hover) {\n    color: #000; }\n\n.toolbar-primary .toolbar-background {\n  background: #327eff; }\n\n.toolbar-primary .bar-button-clear,\n.toolbar-primary .bar-button-default,\n.toolbar-primary .bar-button-outline,\n.toolbar-primary .toolbar-title {\n  color: #fff; }\n\n.toolbar-primary .bar-button-outline {\n  border-color: #fff; }\n\n.toolbar-primary .bar-button-clear-primary,\n.toolbar-primary .bar-button-primary {\n  color: #327eff;\n  background-color: transparent; }\n  .toolbar-primary .bar-button-clear-primary:hover:not(.disable-hover),\n  .toolbar-primary .bar-button-primary:hover:not(.disable-hover) {\n    color: #327eff; }\n\n.toolbar-primary .bar-button-outline-primary {\n  border-color: #2e74eb;\n  color: #2e74eb;\n  background-color: transparent; }\n  .toolbar-primary .bar-button-outline-primary.activated {\n    color: #fff;\n    background-color: #2e74eb; }\n\n.toolbar-primary .bar-button-solid-primary {\n  color: #fff;\n  background-color: #327eff; }\n  .toolbar-primary .bar-button-solid-primary.activated {\n    color: #fff;\n    background-color: #2e74eb; }\n\n.toolbar-primary .bar-button-clear-secondary,\n.toolbar-primary .bar-button-secondary {\n  color: #32db64;\n  background-color: transparent; }\n  .toolbar-primary .bar-button-clear-secondary:hover:not(.disable-hover),\n  .toolbar-primary .bar-button-secondary:hover:not(.disable-hover) {\n    color: #32db64; }\n\n.toolbar-primary .bar-button-outline-secondary {\n  border-color: #2ec95c;\n  color: #2ec95c;\n  background-color: transparent; }\n  .toolbar-primary .bar-button-outline-secondary.activated {\n    color: #fff;\n    background-color: #2ec95c; }\n\n.toolbar-primary .bar-button-solid-secondary {\n  color: #fff;\n  background-color: #32db64; }\n  .toolbar-primary .bar-button-solid-secondary.activated {\n    color: #fff;\n    background-color: #2ec95c; }\n\n.toolbar-primary .bar-button-clear-danger,\n.toolbar-primary .bar-button-danger {\n  color: #f53d3d;\n  background-color: transparent; }\n  .toolbar-primary .bar-button-clear-danger:hover:not(.disable-hover),\n  .toolbar-primary .bar-button-danger:hover:not(.disable-hover) {\n    color: #f53d3d; }\n\n.toolbar-primary .bar-button-outline-danger {\n  border-color: #e13838;\n  color: #e13838;\n  background-color: transparent; }\n  .toolbar-primary .bar-button-outline-danger.activated {\n    color: #fff;\n    background-color: #e13838; }\n\n.toolbar-primary .bar-button-solid-danger {\n  color: #fff;\n  background-color: #f53d3d; }\n  .toolbar-primary .bar-button-solid-danger.activated {\n    color: #fff;\n    background-color: #e13838; }\n\n.toolbar-primary .bar-button-clear-light,\n.toolbar-primary .bar-button-light {\n  color: #f4f4f4;\n  background-color: transparent; }\n  .toolbar-primary .bar-button-clear-light:hover:not(.disable-hover),\n  .toolbar-primary .bar-button-light:hover:not(.disable-hover) {\n    color: #f4f4f4; }\n\n.toolbar-primary .bar-button-outline-light {\n  border-color: #e0e0e0;\n  color: #e0e0e0;\n  background-color: transparent; }\n  .toolbar-primary .bar-button-outline-light.activated {\n    color: #000;\n    background-color: #e0e0e0; }\n\n.toolbar-primary .bar-button-solid-light {\n  color: #000;\n  background-color: #f4f4f4; }\n  .toolbar-primary .bar-button-solid-light.activated {\n    color: #000;\n    background-color: #e0e0e0; }\n\n.toolbar-primary .bar-button-clear-dark,\n.toolbar-primary .bar-button-dark {\n  color: #222;\n  background-color: transparent; }\n  .toolbar-primary .bar-button-clear-dark:hover:not(.disable-hover),\n  .toolbar-primary .bar-button-dark:hover:not(.disable-hover) {\n    color: #222; }\n\n.toolbar-primary .bar-button-outline-dark {\n  border-color: #343434;\n  color: #343434;\n  background-color: transparent; }\n  .toolbar-primary .bar-button-outline-dark.activated {\n    color: #fff;\n    background-color: #343434; }\n\n.toolbar-primary .bar-button-solid-dark {\n  color: #fff;\n  background-color: #222; }\n  .toolbar-primary .bar-button-solid-dark.activated {\n    color: #fff;\n    background-color: #343434; }\n\n.bar-button-clear-primary,\n.bar-button-primary {\n  color: #327eff;\n  background-color: transparent; }\n  .bar-button-clear-primary:hover:not(.disable-hover),\n  .bar-button-primary:hover:not(.disable-hover) {\n    color: #327eff; }\n\n.bar-button-outline-primary {\n  border-color: #2e74eb;\n  color: #2e74eb;\n  background-color: transparent; }\n  .bar-button-outline-primary.activated {\n    color: #fff;\n    background-color: #2e74eb; }\n\n.bar-button-solid-primary {\n  color: #fff;\n  background-color: #327eff; }\n  .bar-button-solid-primary.activated {\n    color: #fff;\n    background-color: #2e74eb; }\n\n.toolbar-secondary .toolbar-background {\n  background: #32db64; }\n\n.toolbar-secondary .bar-button-clear,\n.toolbar-secondary .bar-button-default,\n.toolbar-secondary .bar-button-outline,\n.toolbar-secondary .toolbar-title {\n  color: #fff; }\n\n.toolbar-secondary .bar-button-outline {\n  border-color: #fff; }\n\n.toolbar-secondary .bar-button-clear-primary,\n.toolbar-secondary .bar-button-primary {\n  color: #327eff;\n  background-color: transparent; }\n  .toolbar-secondary .bar-button-clear-primary:hover:not(.disable-hover),\n  .toolbar-secondary .bar-button-primary:hover:not(.disable-hover) {\n    color: #327eff; }\n\n.toolbar-secondary .bar-button-outline-primary {\n  border-color: #2e74eb;\n  color: #2e74eb;\n  background-color: transparent; }\n  .toolbar-secondary .bar-button-outline-primary.activated {\n    color: #fff;\n    background-color: #2e74eb; }\n\n.toolbar-secondary .bar-button-solid-primary {\n  color: #fff;\n  background-color: #327eff; }\n  .toolbar-secondary .bar-button-solid-primary.activated {\n    color: #fff;\n    background-color: #2e74eb; }\n\n.toolbar-secondary .bar-button-clear-secondary,\n.toolbar-secondary .bar-button-secondary {\n  color: #32db64;\n  background-color: transparent; }\n  .toolbar-secondary .bar-button-clear-secondary:hover:not(.disable-hover),\n  .toolbar-secondary .bar-button-secondary:hover:not(.disable-hover) {\n    color: #32db64; }\n\n.toolbar-secondary .bar-button-outline-secondary {\n  border-color: #2ec95c;\n  color: #2ec95c;\n  background-color: transparent; }\n  .toolbar-secondary .bar-button-outline-secondary.activated {\n    color: #fff;\n    background-color: #2ec95c; }\n\n.toolbar-secondary .bar-button-solid-secondary {\n  color: #fff;\n  background-color: #32db64; }\n  .toolbar-secondary .bar-button-solid-secondary.activated {\n    color: #fff;\n    background-color: #2ec95c; }\n\n.toolbar-secondary .bar-button-clear-danger,\n.toolbar-secondary .bar-button-danger {\n  color: #f53d3d;\n  background-color: transparent; }\n  .toolbar-secondary .bar-button-clear-danger:hover:not(.disable-hover),\n  .toolbar-secondary .bar-button-danger:hover:not(.disable-hover) {\n    color: #f53d3d; }\n\n.toolbar-secondary .bar-button-outline-danger {\n  border-color: #e13838;\n  color: #e13838;\n  background-color: transparent; }\n  .toolbar-secondary .bar-button-outline-danger.activated {\n    color: #fff;\n    background-color: #e13838; }\n\n.toolbar-secondary .bar-button-solid-danger {\n  color: #fff;\n  background-color: #f53d3d; }\n  .toolbar-secondary .bar-button-solid-danger.activated {\n    color: #fff;\n    background-color: #e13838; }\n\n.toolbar-secondary .bar-button-clear-light,\n.toolbar-secondary .bar-button-light {\n  color: #f4f4f4;\n  background-color: transparent; }\n  .toolbar-secondary .bar-button-clear-light:hover:not(.disable-hover),\n  .toolbar-secondary .bar-button-light:hover:not(.disable-hover) {\n    color: #f4f4f4; }\n\n.toolbar-secondary .bar-button-outline-light {\n  border-color: #e0e0e0;\n  color: #e0e0e0;\n  background-color: transparent; }\n  .toolbar-secondary .bar-button-outline-light.activated {\n    color: #000;\n    background-color: #e0e0e0; }\n\n.toolbar-secondary .bar-button-solid-light {\n  color: #000;\n  background-color: #f4f4f4; }\n  .toolbar-secondary .bar-button-solid-light.activated {\n    color: #000;\n    background-color: #e0e0e0; }\n\n.toolbar-secondary .bar-button-clear-dark,\n.toolbar-secondary .bar-button-dark {\n  color: #222;\n  background-color: transparent; }\n  .toolbar-secondary .bar-button-clear-dark:hover:not(.disable-hover),\n  .toolbar-secondary .bar-button-dark:hover:not(.disable-hover) {\n    color: #222; }\n\n.toolbar-secondary .bar-button-outline-dark {\n  border-color: #343434;\n  color: #343434;\n  background-color: transparent; }\n  .toolbar-secondary .bar-button-outline-dark.activated {\n    color: #fff;\n    background-color: #343434; }\n\n.toolbar-secondary .bar-button-solid-dark {\n  color: #fff;\n  background-color: #222; }\n  .toolbar-secondary .bar-button-solid-dark.activated {\n    color: #fff;\n    background-color: #343434; }\n\n.bar-button-clear-secondary,\n.bar-button-secondary {\n  color: #32db64;\n  background-color: transparent; }\n  .bar-button-clear-secondary:hover:not(.disable-hover),\n  .bar-button-secondary:hover:not(.disable-hover) {\n    color: #32db64; }\n\n.bar-button-outline-secondary {\n  border-color: #2ec95c;\n  color: #2ec95c;\n  background-color: transparent; }\n  .bar-button-outline-secondary.activated {\n    color: #fff;\n    background-color: #2ec95c; }\n\n.bar-button-solid-secondary {\n  color: #fff;\n  background-color: #32db64; }\n  .bar-button-solid-secondary.activated {\n    color: #fff;\n    background-color: #2ec95c; }\n\n.toolbar-danger .toolbar-background {\n  background: #f53d3d; }\n\n.toolbar-danger .bar-button-clear,\n.toolbar-danger .bar-button-default,\n.toolbar-danger .bar-button-outline,\n.toolbar-danger .toolbar-title {\n  color: #fff; }\n\n.toolbar-danger .bar-button-outline {\n  border-color: #fff; }\n\n.toolbar-danger .bar-button-clear-primary,\n.toolbar-danger .bar-button-primary {\n  color: #327eff;\n  background-color: transparent; }\n  .toolbar-danger .bar-button-clear-primary:hover:not(.disable-hover),\n  .toolbar-danger .bar-button-primary:hover:not(.disable-hover) {\n    color: #327eff; }\n\n.toolbar-danger .bar-button-outline-primary {\n  border-color: #2e74eb;\n  color: #2e74eb;\n  background-color: transparent; }\n  .toolbar-danger .bar-button-outline-primary.activated {\n    color: #fff;\n    background-color: #2e74eb; }\n\n.toolbar-danger .bar-button-solid-primary {\n  color: #fff;\n  background-color: #327eff; }\n  .toolbar-danger .bar-button-solid-primary.activated {\n    color: #fff;\n    background-color: #2e74eb; }\n\n.toolbar-danger .bar-button-clear-secondary,\n.toolbar-danger .bar-button-secondary {\n  color: #32db64;\n  background-color: transparent; }\n  .toolbar-danger .bar-button-clear-secondary:hover:not(.disable-hover),\n  .toolbar-danger .bar-button-secondary:hover:not(.disable-hover) {\n    color: #32db64; }\n\n.toolbar-danger .bar-button-outline-secondary {\n  border-color: #2ec95c;\n  color: #2ec95c;\n  background-color: transparent; }\n  .toolbar-danger .bar-button-outline-secondary.activated {\n    color: #fff;\n    background-color: #2ec95c; }\n\n.toolbar-danger .bar-button-solid-secondary {\n  color: #fff;\n  background-color: #32db64; }\n  .toolbar-danger .bar-button-solid-secondary.activated {\n    color: #fff;\n    background-color: #2ec95c; }\n\n.toolbar-danger .bar-button-clear-danger,\n.toolbar-danger .bar-button-danger {\n  color: #f53d3d;\n  background-color: transparent; }\n  .toolbar-danger .bar-button-clear-danger:hover:not(.disable-hover),\n  .toolbar-danger .bar-button-danger:hover:not(.disable-hover) {\n    color: #f53d3d; }\n\n.toolbar-danger .bar-button-outline-danger {\n  border-color: #e13838;\n  color: #e13838;\n  background-color: transparent; }\n  .toolbar-danger .bar-button-outline-danger.activated {\n    color: #fff;\n    background-color: #e13838; }\n\n.toolbar-danger .bar-button-solid-danger {\n  color: #fff;\n  background-color: #f53d3d; }\n  .toolbar-danger .bar-button-solid-danger.activated {\n    color: #fff;\n    background-color: #e13838; }\n\n.toolbar-danger .bar-button-clear-light,\n.toolbar-danger .bar-button-light {\n  color: #f4f4f4;\n  background-color: transparent; }\n  .toolbar-danger .bar-button-clear-light:hover:not(.disable-hover),\n  .toolbar-danger .bar-button-light:hover:not(.disable-hover) {\n    color: #f4f4f4; }\n\n.toolbar-danger .bar-button-outline-light {\n  border-color: #e0e0e0;\n  color: #e0e0e0;\n  background-color: transparent; }\n  .toolbar-danger .bar-button-outline-light.activated {\n    color: #000;\n    background-color: #e0e0e0; }\n\n.toolbar-danger .bar-button-solid-light {\n  color: #000;\n  background-color: #f4f4f4; }\n  .toolbar-danger .bar-button-solid-light.activated {\n    color: #000;\n    background-color: #e0e0e0; }\n\n.toolbar-danger .bar-button-clear-dark,\n.toolbar-danger .bar-button-dark {\n  color: #222;\n  background-color: transparent; }\n  .toolbar-danger .bar-button-clear-dark:hover:not(.disable-hover),\n  .toolbar-danger .bar-button-dark:hover:not(.disable-hover) {\n    color: #222; }\n\n.toolbar-danger .bar-button-outline-dark {\n  border-color: #343434;\n  color: #343434;\n  background-color: transparent; }\n  .toolbar-danger .bar-button-outline-dark.activated {\n    color: #fff;\n    background-color: #343434; }\n\n.toolbar-danger .bar-button-solid-dark {\n  color: #fff;\n  background-color: #222; }\n  .toolbar-danger .bar-button-solid-dark.activated {\n    color: #fff;\n    background-color: #343434; }\n\n.bar-button-clear-danger,\n.bar-button-danger {\n  color: #f53d3d;\n  background-color: transparent; }\n  .bar-button-clear-danger:hover:not(.disable-hover),\n  .bar-button-danger:hover:not(.disable-hover) {\n    color: #f53d3d; }\n\n.bar-button-outline-danger {\n  border-color: #e13838;\n  color: #e13838;\n  background-color: transparent; }\n  .bar-button-outline-danger.activated {\n    color: #fff;\n    background-color: #e13838; }\n\n.bar-button-solid-danger {\n  color: #fff;\n  background-color: #f53d3d; }\n  .bar-button-solid-danger.activated {\n    color: #fff;\n    background-color: #e13838; }\n\n.toolbar-light .toolbar-background {\n  background: #f4f4f4; }\n\n.toolbar-light .bar-button-clear,\n.toolbar-light .bar-button-default,\n.toolbar-light .bar-button-outline,\n.toolbar-light .toolbar-title {\n  color: #000; }\n\n.toolbar-light .bar-button-outline {\n  border-color: #000; }\n\n.toolbar-light .bar-button-clear-primary,\n.toolbar-light .bar-button-primary {\n  color: #327eff;\n  background-color: transparent; }\n  .toolbar-light .bar-button-clear-primary:hover:not(.disable-hover),\n  .toolbar-light .bar-button-primary:hover:not(.disable-hover) {\n    color: #327eff; }\n\n.toolbar-light .bar-button-outline-primary {\n  border-color: #2e74eb;\n  color: #2e74eb;\n  background-color: transparent; }\n  .toolbar-light .bar-button-outline-primary.activated {\n    color: #fff;\n    background-color: #2e74eb; }\n\n.toolbar-light .bar-button-solid-primary {\n  color: #fff;\n  background-color: #327eff; }\n  .toolbar-light .bar-button-solid-primary.activated {\n    color: #fff;\n    background-color: #2e74eb; }\n\n.toolbar-light .bar-button-clear-secondary,\n.toolbar-light .bar-button-secondary {\n  color: #32db64;\n  background-color: transparent; }\n  .toolbar-light .bar-button-clear-secondary:hover:not(.disable-hover),\n  .toolbar-light .bar-button-secondary:hover:not(.disable-hover) {\n    color: #32db64; }\n\n.toolbar-light .bar-button-outline-secondary {\n  border-color: #2ec95c;\n  color: #2ec95c;\n  background-color: transparent; }\n  .toolbar-light .bar-button-outline-secondary.activated {\n    color: #fff;\n    background-color: #2ec95c; }\n\n.toolbar-light .bar-button-solid-secondary {\n  color: #fff;\n  background-color: #32db64; }\n  .toolbar-light .bar-button-solid-secondary.activated {\n    color: #fff;\n    background-color: #2ec95c; }\n\n.toolbar-light .bar-button-clear-danger,\n.toolbar-light .bar-button-danger {\n  color: #f53d3d;\n  background-color: transparent; }\n  .toolbar-light .bar-button-clear-danger:hover:not(.disable-hover),\n  .toolbar-light .bar-button-danger:hover:not(.disable-hover) {\n    color: #f53d3d; }\n\n.toolbar-light .bar-button-outline-danger {\n  border-color: #e13838;\n  color: #e13838;\n  background-color: transparent; }\n  .toolbar-light .bar-button-outline-danger.activated {\n    color: #fff;\n    background-color: #e13838; }\n\n.toolbar-light .bar-button-solid-danger {\n  color: #fff;\n  background-color: #f53d3d; }\n  .toolbar-light .bar-button-solid-danger.activated {\n    color: #fff;\n    background-color: #e13838; }\n\n.toolbar-light .bar-button-clear-light,\n.toolbar-light .bar-button-light {\n  color: #f4f4f4;\n  background-color: transparent; }\n  .toolbar-light .bar-button-clear-light:hover:not(.disable-hover),\n  .toolbar-light .bar-button-light:hover:not(.disable-hover) {\n    color: #f4f4f4; }\n\n.toolbar-light .bar-button-outline-light {\n  border-color: #e0e0e0;\n  color: #e0e0e0;\n  background-color: transparent; }\n  .toolbar-light .bar-button-outline-light.activated {\n    color: #000;\n    background-color: #e0e0e0; }\n\n.toolbar-light .bar-button-solid-light {\n  color: #000;\n  background-color: #f4f4f4; }\n  .toolbar-light .bar-button-solid-light.activated {\n    color: #000;\n    background-color: #e0e0e0; }\n\n.toolbar-light .bar-button-clear-dark,\n.toolbar-light .bar-button-dark {\n  color: #222;\n  background-color: transparent; }\n  .toolbar-light .bar-button-clear-dark:hover:not(.disable-hover),\n  .toolbar-light .bar-button-dark:hover:not(.disable-hover) {\n    color: #222; }\n\n.toolbar-light .bar-button-outline-dark {\n  border-color: #343434;\n  color: #343434;\n  background-color: transparent; }\n  .toolbar-light .bar-button-outline-dark.activated {\n    color: #fff;\n    background-color: #343434; }\n\n.toolbar-light .bar-button-solid-dark {\n  color: #fff;\n  background-color: #222; }\n  .toolbar-light .bar-button-solid-dark.activated {\n    color: #fff;\n    background-color: #343434; }\n\n.bar-button-clear-light,\n.bar-button-light {\n  color: #f4f4f4;\n  background-color: transparent; }\n  .bar-button-clear-light:hover:not(.disable-hover),\n  .bar-button-light:hover:not(.disable-hover) {\n    color: #f4f4f4; }\n\n.bar-button-outline-light {\n  border-color: #e0e0e0;\n  color: #e0e0e0;\n  background-color: transparent; }\n  .bar-button-outline-light.activated {\n    color: #000;\n    background-color: #e0e0e0; }\n\n.bar-button-solid-light {\n  color: #000;\n  background-color: #f4f4f4; }\n  .bar-button-solid-light.activated {\n    color: #000;\n    background-color: #e0e0e0; }\n\n.toolbar-dark .toolbar-background {\n  background: #222; }\n\n.toolbar-dark .bar-button-clear,\n.toolbar-dark .bar-button-default,\n.toolbar-dark .bar-button-outline,\n.toolbar-dark .toolbar-title {\n  color: #fff; }\n\n.toolbar-dark .bar-button-outline {\n  border-color: #fff; }\n\n.toolbar-dark .bar-button-clear-primary,\n.toolbar-dark .bar-button-primary {\n  color: #327eff;\n  background-color: transparent; }\n  .toolbar-dark .bar-button-clear-primary:hover:not(.disable-hover),\n  .toolbar-dark .bar-button-primary:hover:not(.disable-hover) {\n    color: #327eff; }\n\n.toolbar-dark .bar-button-outline-primary {\n  border-color: #2e74eb;\n  color: #2e74eb;\n  background-color: transparent; }\n  .toolbar-dark .bar-button-outline-primary.activated {\n    color: #fff;\n    background-color: #2e74eb; }\n\n.toolbar-dark .bar-button-solid-primary {\n  color: #fff;\n  background-color: #327eff; }\n  .toolbar-dark .bar-button-solid-primary.activated {\n    color: #fff;\n    background-color: #2e74eb; }\n\n.toolbar-dark .bar-button-clear-secondary,\n.toolbar-dark .bar-button-secondary {\n  color: #32db64;\n  background-color: transparent; }\n  .toolbar-dark .bar-button-clear-secondary:hover:not(.disable-hover),\n  .toolbar-dark .bar-button-secondary:hover:not(.disable-hover) {\n    color: #32db64; }\n\n.toolbar-dark .bar-button-outline-secondary {\n  border-color: #2ec95c;\n  color: #2ec95c;\n  background-color: transparent; }\n  .toolbar-dark .bar-button-outline-secondary.activated {\n    color: #fff;\n    background-color: #2ec95c; }\n\n.toolbar-dark .bar-button-solid-secondary {\n  color: #fff;\n  background-color: #32db64; }\n  .toolbar-dark .bar-button-solid-secondary.activated {\n    color: #fff;\n    background-color: #2ec95c; }\n\n.toolbar-dark .bar-button-clear-danger,\n.toolbar-dark .bar-button-danger {\n  color: #f53d3d;\n  background-color: transparent; }\n  .toolbar-dark .bar-button-clear-danger:hover:not(.disable-hover),\n  .toolbar-dark .bar-button-danger:hover:not(.disable-hover) {\n    color: #f53d3d; }\n\n.toolbar-dark .bar-button-outline-danger {\n  border-color: #e13838;\n  color: #e13838;\n  background-color: transparent; }\n  .toolbar-dark .bar-button-outline-danger.activated {\n    color: #fff;\n    background-color: #e13838; }\n\n.toolbar-dark .bar-button-solid-danger {\n  color: #fff;\n  background-color: #f53d3d; }\n  .toolbar-dark .bar-button-solid-danger.activated {\n    color: #fff;\n    background-color: #e13838; }\n\n.toolbar-dark .bar-button-clear-light,\n.toolbar-dark .bar-button-light {\n  color: #f4f4f4;\n  background-color: transparent; }\n  .toolbar-dark .bar-button-clear-light:hover:not(.disable-hover),\n  .toolbar-dark .bar-button-light:hover:not(.disable-hover) {\n    color: #f4f4f4; }\n\n.toolbar-dark .bar-button-outline-light {\n  border-color: #e0e0e0;\n  color: #e0e0e0;\n  background-color: transparent; }\n  .toolbar-dark .bar-button-outline-light.activated {\n    color: #000;\n    background-color: #e0e0e0; }\n\n.toolbar-dark .bar-button-solid-light {\n  color: #000;\n  background-color: #f4f4f4; }\n  .toolbar-dark .bar-button-solid-light.activated {\n    color: #000;\n    background-color: #e0e0e0; }\n\n.toolbar-dark .bar-button-clear-dark,\n.toolbar-dark .bar-button-dark {\n  color: #222;\n  background-color: transparent; }\n  .toolbar-dark .bar-button-clear-dark:hover:not(.disable-hover),\n  .toolbar-dark .bar-button-dark:hover:not(.disable-hover) {\n    color: #222; }\n\n.toolbar-dark .bar-button-outline-dark {\n  border-color: #343434;\n  color: #343434;\n  background-color: transparent; }\n  .toolbar-dark .bar-button-outline-dark.activated {\n    color: #fff;\n    background-color: #343434; }\n\n.toolbar-dark .bar-button-solid-dark {\n  color: #fff;\n  background-color: #222; }\n  .toolbar-dark .bar-button-solid-dark.activated {\n    color: #fff;\n    background-color: #343434; }\n\n.bar-button-clear-dark,\n.bar-button-dark {\n  color: #222;\n  background-color: transparent; }\n  .bar-button-clear-dark:hover:not(.disable-hover),\n  .bar-button-dark:hover:not(.disable-hover) {\n    color: #222; }\n\n.bar-button-outline-dark {\n  border-color: #343434;\n  color: #343434;\n  background-color: transparent; }\n  .bar-button-outline-dark.activated {\n    color: #fff;\n    background-color: #343434; }\n\n.bar-button-solid-dark {\n  color: #fff;\n  background-color: #222; }\n  .bar-button-solid-dark.activated {\n    color: #fff;\n    background-color: #343434; }\n\nhtml {\n  font-size: 62.5%; }\n\na {\n  background-color: transparent; }\n\n.enable-hover a:hover {\n  opacity: .7; }\n\nh1,\nh2,\nh3,\nh4,\nh5,\nh6 {\n  margin-top: 1.6rem;\n  margin-bottom: 1rem;\n  font-weight: 500;\n  line-height: 1.2; }\n\n[padding] h1:first-child,\n[padding] h2:first-child,\n[padding] h3:first-child,\n[padding] h4:first-child,\n[padding] h5:first-child,\n[padding] h6:first-child {\n  margin-top: -.3rem; }\n\nh1 + h2,\nh1 + h3,\nh2 + h3 {\n  margin-top: -.3rem; }\n\nh1 {\n  margin-top: 2rem;\n  font-size: 2.6rem; }\n\nh2 {\n  margin-top: 1.8rem;\n  font-size: 2.4rem; }\n\nh3 {\n  font-size: 2.2rem; }\n\nh4 {\n  font-size: 2rem; }\n\nh5 {\n  font-size: 1.8rem; }\n\nh6 {\n  font-size: 1.6rem; }\n\nsmall {\n  font-size: 75%; }\n\nsub,\nsup {\n  position: relative;\n  font-size: 75%;\n  line-height: 0;\n  vertical-align: baseline; }\n\nsup {\n  top: -.5em; }\n\nsub {\n  bottom: -.25em; }\n\n[text-left] {\n  text-align: left; }\n\n[text-center] {\n  text-align: center; }\n\n[text-right] {\n  text-align: right; }\n\n[text-justify] {\n  text-align: justify; }\n\n[text-nowrap] {\n  white-space: nowrap; }\n\n[text-uppercase] {\n  text-transform: uppercase; }\n\n[text-lowercase] {\n  text-transform: lowercase; }\n\n[text-capitalize] {\n  text-transform: capitalize; }\n\np {\n  color: #000; }\n\na {\n  color: #327eff; }\n\n.text-primary {\n  color: #327eff; }\n\n.text-secondary {\n  color: #32db64; }\n\n.text-danger {\n  color: #f53d3d; }\n\n.text-light {\n  color: #f4f4f4; }\n\n.text-dark {\n  color: #222; }\n\nion-nav > ion-page > .toolbar.statusbar-padding:first-child,\nion-nav > ion-page > ion-header > .toolbar.statusbar-padding:first-child,\nion-tab > ion-page > ion-header > .toolbar.statusbar-padding:first-child,\nion-tabs > ion-page.tab-subpage > ion-header > .toolbar.statusbar-padding:first-child,\nion-menu > .menu-inner > .toolbar.statusbar-padding:first-child,\nion-menu > .menu-inner > ion-header > .toolbar.statusbar-padding:first-child {\n  padding-top: 20px;\n  height: calc(4.6rem + 20px);\n  min-height: calc(4.6rem + 20px); }\n\nion-nav > ion-page > ion-content.statusbar-padding:first-child scroll-content,\nion-nav > ion-page > ion-header > ion-content.statusbar-padding:first-child scroll-content,\nion-tab > ion-page > ion-header > ion-content.statusbar-padding:first-child scroll-content,\nion-tabs > ion-page.tab-subpage > ion-header > ion-content.statusbar-padding:first-child scroll-content,\nion-menu > .menu-inner > ion-content.statusbar-padding:first-child scroll-content,\nion-menu > .menu-inner > ion-header > ion-content.statusbar-padding:first-child scroll-content {\n  padding-top: 20px; }\n\nion-nav > ion-page > ion-content.statusbar-padding:first-child[padding] scroll-content,\nion-nav > ion-page > ion-content.statusbar-padding:first-child[padding-top] scroll-content,\nion-nav > ion-page > ion-header > ion-content.statusbar-padding:first-child[padding] scroll-content,\nion-nav > ion-page > ion-header > ion-content.statusbar-padding:first-child[padding-top] scroll-content,\nion-tab > ion-page > ion-header > ion-content.statusbar-padding:first-child[padding] scroll-content,\nion-tab > ion-page > ion-header > ion-content.statusbar-padding:first-child[padding-top] scroll-content,\nion-tabs > ion-page.tab-subpage > ion-header > ion-content.statusbar-padding:first-child[padding] scroll-content,\nion-tabs > ion-page.tab-subpage > ion-header > ion-content.statusbar-padding:first-child[padding-top] scroll-content,\nion-menu > .menu-inner > ion-content.statusbar-padding:first-child[padding] scroll-content,\nion-menu > .menu-inner > ion-content.statusbar-padding:first-child[padding-top] scroll-content,\nion-menu > .menu-inner > ion-header > ion-content.statusbar-padding:first-child[padding] scroll-content,\nion-menu > .menu-inner > ion-header > ion-content.statusbar-padding:first-child[padding-top] scroll-content {\n  padding-top: calc(16px + 20px); }\n\n@media only screen and (max-width: 767px) {\n  .modal-wrapper > ion-page > ion-header > .toolbar.statusbar-padding:first-child {\n    padding-top: 20px;\n    height: calc(4.6rem + 20px);\n    min-height: calc(4.6rem + 20px); }\n  .modal-wrapper > ion-page > ion-header > ion-content.statusbar-padding:first-child scroll-content {\n    padding-top: 20px; }\n  .modal-wrapper > ion-page > ion-header > ion-content.statusbar-padding:first-child[padding] scroll-content,\n  .modal-wrapper > ion-page > ion-header > ion-content.statusbar-padding:first-child[padding-top] scroll-content {\n    padding-top: calc(16px + 20px); } }\n\n@font-face {\n  font-family: \"Noto Sans\";\n  font-style: normal;\n  font-weight: 300;\n  src: local(\"Noto Sans\"), local(\"Noto-Sans-Regular\"), url(\"../fonts/noto-sans-regular.ttf\") format(\"truetype\"); }\n\n@font-face {\n  font-family: \"Noto Sans\";\n  font-style: normal;\n  font-weight: 400;\n  src: local(\"Noto Sans\"), local(\"Noto-Sans-Regular\"), url(\"../fonts/noto-sans-regular.ttf\") format(\"truetype\"); }\n\n@font-face {\n  font-family: \"Noto Sans\";\n  font-style: normal;\n  font-weight: 500;\n  src: local(\"Noto Sans Bold\"), local(\"Noto-Sans-Bold\"), url(\"../fonts/noto-sans-bold.ttf\") format(\"truetype\"); }\n\n@font-face {\n  font-family: \"Noto Sans\";\n  font-style: normal;\n  font-weight: 700;\n  src: local(\"Noto Sans Bold\"), local(\"Noto-Sans-Bold\"), url(\"../fonts/noto-sans-bold.ttf\") format(\"truetype\"); }\n\nbody {\n  font-family: \"Segoe UI\", \"Noto Sans\", sans-serif;\n  font-size: 1.4rem;\n  background-color: #fff; }\n"
  },
  {
    "path": "content/dist/demos/scrollbar-fix.css",
    "content": "body.has-scrollbar scroll-content {\n  margin-right: -15px;\n}\nbody.has-scrollbar ion-menu scroll-content {\n  margin-right: 0;\n}"
  },
  {
    "path": "content/dist/demos/scrollbar-fix.js",
    "content": "(function(){\n\n  function hasScrollbar() {\n\n    if (typeof window.top.innerWidth === 'number') {\n        return window.top.innerWidth > window.top.document.documentElement.clientWidth;  \n    }\n\n    // rootElem for quirksmode\n    var rootElem = window.top.document.documentElement || window.top.document.body;\n\n    // Check overflow style property on body for fauxscrollbars\n    var overflowStyle;\n\n    if (typeof rootElem.currentStyle !== 'undefined') {\n        overflowStyle = rootElem.currentStyle.overflow;\n    }\n\n    overflowStyle = overflowStyle || window.top.getComputedStyle(rootElem, '').overflow;\n\n    // Also need to check the Y axis overflow\n    var overflowYStyle;\n\n    if (typeof rootElem.currentStyle !== 'undefined') {\n        overflowYStyle = rootElem.currentStyle.overflowY;\n    }\n\n    overflowYStyle = overflowYStyle || window.top.getComputedStyle(rootElem, '').overflowY;\n\n    var contentOverflows = rootElem.scrollHeight > rootElem.clientHeight;\n    var overflowShown = /^(visible|auto)$/.test(overflowStyle) || /^(visible|auto)$/.test(overflowYStyle);\n    var alwaysShowScroll = overflowStyle === 'scroll' || overflowYStyle === 'scroll';\n\n    return (contentOverflows && overflowShown) || (alwaysShowScroll)\n  }\n\n\n  if (hasScrollbar() === true) {\n    setTimeout(function() {\n      var body = document.getElementsByTagName('body')[0];\n      body.className = body.className + ' has-scrollbar';\n    }, 500);\n  }\n\n})();"
  },
  {
    "path": "content/dist/preview-app/www/assets/fonts/ionicons.scss",
    "content": "\n// Ionicons Icon Font CSS\n// --------------------------\n// Ionicons CSS for Ionic's <ion-icon> element\n// ionicons-icons.scss has the icons and their unicode characters\n\n$ionicons-font-path: $font-path !default;\n\n@import \"ionicons-icons\";\n@import \"ionicons-variables\";\n\n\n@font-face {\n  font-family: \"Ionicons\";\n  src: url(\"#{$ionicons-font-path}/ionicons.woff2?v=#{$ionicons-version}\") format(\"woff2\"),\n    url(\"#{$ionicons-font-path}/ionicons.woff?v=#{$ionicons-version}\") format(\"woff\"),\n    url(\"#{$ionicons-font-path}/ionicons.ttf?v=#{$ionicons-version}\") format(\"truetype\");\n  font-weight: normal;\n  font-style: normal;\n}\n\nion-icon {\n  display: inline-block;\n\n  font-family: \"Ionicons\";\n  -moz-osx-font-smoothing: grayscale;\n  -webkit-font-smoothing: antialiased;\n  font-style: normal;\n  font-variant: normal;\n  font-weight: normal;\n  line-height: 1;\n  text-rendering: auto;\n  text-transform: none;\n  speak: none;\n\n  @include rtl() {\n    &[aria-label^=\"arrow\"]::before,\n    &[flip-rtl]::before {\n      transform: scaleX(-1);\n    }\n\n    &[unflip-rtl]::before {\n      transform: scaleX(1);\n    }\n  }\n\n  &::before {\n    display: inline-block;\n  }\n}\n"
  },
  {
    "path": "content/dist/preview-app/www/assets/fonts/noto-sans.scss",
    "content": "// Noto Sans Font\n// Google\n// Apache License, version 2.0\n// http://www.apache.org/licenses/LICENSE-2.0.html\n\n$noto-sans-font-path: $font-path !default;\n\n@font-face {\n  font-family: \"Noto Sans\";\n  font-style: normal;\n  font-weight: 300;\n  src: local(\"Noto Sans\"), local(\"Noto-Sans-Regular\"), url(\"#{$noto-sans-font-path}/noto-sans-regular.woff\") format(\"woff\"), url(\"#{$noto-sans-font-path}/noto-sans-regular.ttf\") format(\"truetype\");\n}\n\n@font-face {\n  font-family: \"Noto Sans\";\n  font-style: normal;\n  font-weight: 400;\n  src: local(\"Noto Sans\"), local(\"Noto-Sans-Regular\"), url(\"#{$noto-sans-font-path}/noto-sans-regular.woff\") format(\"woff\"), url(\"#{$noto-sans-font-path}/noto-sans-regular.ttf\") format(\"truetype\");\n}\n\n@font-face {\n  font-family: \"Noto Sans\";\n  font-style: normal;\n  font-weight: 500;\n  src: local(\"Noto Sans Bold\"), local(\"Noto-Sans-Bold\"), url(\"#{$noto-sans-font-path}/noto-sans-bold.woff\") format(\"woff\"), url(\"#{$noto-sans-font-path}/noto-sans-bold.ttf\") format(\"truetype\");\n}\n\n@font-face {\n  font-family: \"Noto Sans\";\n  font-style: normal;\n  font-weight: 700;\n  src: local(\"Noto Sans Bold\"), local(\"Noto-Sans-Bold\"), url(\"#{$noto-sans-font-path}/noto-sans-bold.woff\") format(\"woff\"), url(\"#{$noto-sans-font-path}/noto-sans-bold.ttf\") format(\"truetype\");\n}\n"
  },
  {
    "path": "content/dist/preview-app/www/assets/fonts/roboto.scss",
    "content": "// Roboto Font\n// Google\n// Apache License, version 2.0\n// http://www.apache.org/licenses/LICENSE-2.0.html\n\n$roboto-font-path: $font-path !default;\n\n@font-face {\n  font-family: \"Roboto\";\n  font-style: normal;\n  font-weight: 300;\n  src: local(\"Roboto Light\"), local(\"Roboto-Light\"), url(\"#{$roboto-font-path}/roboto-light.woff2\") format(\"woff2\"), url(\"#{$roboto-font-path}/roboto-light.woff\") format(\"woff\"), url(\"#{$roboto-font-path}/roboto-light.ttf\") format(\"truetype\");\n}\n\n@font-face {\n  font-family: \"Roboto\";\n  font-style: normal;\n  font-weight: 400;\n  src: local(\"Roboto\"), local(\"Roboto-Regular\"), url(\"#{$roboto-font-path}/roboto-regular.woff2\") format(\"woff2\"), url(\"#{$roboto-font-path}/roboto-regular.woff\") format(\"woff\"), url(\"#{$roboto-font-path}/roboto-regular.ttf\") format(\"truetype\");\n}\n\n@font-face {\n  font-family: \"Roboto\";\n  font-style: normal;\n  font-weight: 500;\n  src: local(\"Roboto Medium\"), local(\"Roboto-Medium\"), url(\"#{$roboto-font-path}/roboto-medium.woff2\") format(\"woff2\"), url(\"#{$roboto-font-path}/roboto-medium.woff\") format(\"woff\"), url(\"#{$roboto-font-path}/roboto-medium.ttf\") format(\"truetype\");\n}\n\n@font-face {\n  font-family: \"Roboto\";\n  font-style: normal;\n  font-weight: 700;\n  src: local(\"Roboto Bold\"), local(\"Roboto-Bold\"), url(\"#{$roboto-font-path}/roboto-bold.woff2\") format(\"woff2\"), url(\"#{$roboto-font-path}/roboto-bold.woff\") format(\"woff\"), url(\"#{$roboto-font-path}/roboto-bold.ttf\") format(\"truetype\");\n}\n"
  },
  {
    "path": "content/dist/preview-app/www/build/main.css",
    "content": ".ion-ios-add:before{content:\"\\f102\"}.ion-ios-add-circle:before{content:\"\\f101\"}.ion-ios-add-circle-outline:before{content:\"\\f100\"}.ion-ios-add-outline:before{content:\"\\f102\"}.ion-ios-alarm:before{content:\"\\f3c8\"}.ion-ios-alarm-outline:before{content:\"\\f3c7\"}.ion-ios-albums:before{content:\"\\f3ca\"}.ion-ios-albums-outline:before{content:\"\\f3c9\"}.ion-ios-alert:before{content:\"\\f104\"}.ion-ios-alert-outline:before{content:\"\\f103\"}.ion-ios-american-football:before{content:\"\\f106\"}.ion-ios-american-football-outline:before{content:\"\\f105\"}.ion-ios-analytics:before{content:\"\\f3ce\"}.ion-ios-analytics-outline:before{content:\"\\f3cd\"}.ion-ios-aperture:before{content:\"\\f108\"}.ion-ios-aperture-outline:before{content:\"\\f107\"}.ion-ios-apps:before{content:\"\\f10a\"}.ion-ios-apps-outline:before{content:\"\\f109\"}.ion-ios-appstore:before{content:\"\\f10c\"}.ion-ios-appstore-outline:before{content:\"\\f10b\"}.ion-ios-archive:before{content:\"\\f10e\"}.ion-ios-archive-outline:before{content:\"\\f10d\"}.ion-ios-arrow-back:before{content:\"\\f3cf\"}.ion-ios-arrow-back-outline:before{content:\"\\f3cf\"}.ion-ios-arrow-down:before{content:\"\\f3d0\"}.ion-ios-arrow-down-outline:before{content:\"\\f3d0\"}.ion-ios-arrow-dropdown:before{content:\"\\f110\"}.ion-ios-arrow-dropdown-circle:before{content:\"\\f10f\"}.ion-ios-arrow-dropdown-circle-outline:before{content:\"\\f10f\"}.ion-ios-arrow-dropdown-outline:before{content:\"\\f110\"}.ion-ios-arrow-dropleft:before{content:\"\\f112\"}.ion-ios-arrow-dropleft-circle:before{content:\"\\f111\"}.ion-ios-arrow-dropleft-circle-outline:before{content:\"\\f111\"}.ion-ios-arrow-dropleft-outline:before{content:\"\\f112\"}.ion-ios-arrow-dropright:before{content:\"\\f114\"}.ion-ios-arrow-dropright-circle:before{content:\"\\f113\"}.ion-ios-arrow-dropright-circle-outline:before{content:\"\\f113\"}.ion-ios-arrow-dropright-outline:before{content:\"\\f114\"}.ion-ios-arrow-dropup:before{content:\"\\f116\"}.ion-ios-arrow-dropup-circle:before{content:\"\\f115\"}.ion-ios-arrow-dropup-circle-outline:before{content:\"\\f115\"}.ion-ios-arrow-dropup-outline:before{content:\"\\f116\"}.ion-ios-arrow-forward:before{content:\"\\f3d1\"}.ion-ios-arrow-forward-outline:before{content:\"\\f3d1\"}.ion-ios-arrow-round-back:before{content:\"\\f117\"}.ion-ios-arrow-round-back-outline:before{content:\"\\f117\"}.ion-ios-arrow-round-down:before{content:\"\\f118\"}.ion-ios-arrow-round-down-outline:before{content:\"\\f118\"}.ion-ios-arrow-round-forward:before{content:\"\\f119\"}.ion-ios-arrow-round-forward-outline:before{content:\"\\f119\"}.ion-ios-arrow-round-up:before{content:\"\\f11a\"}.ion-ios-arrow-round-up-outline:before{content:\"\\f11a\"}.ion-ios-arrow-up:before{content:\"\\f3d8\"}.ion-ios-arrow-up-outline:before{content:\"\\f3d8\"}.ion-ios-at:before{content:\"\\f3da\"}.ion-ios-at-outline:before{content:\"\\f3d9\"}.ion-ios-attach:before{content:\"\\f11b\"}.ion-ios-attach-outline:before{content:\"\\f11b\"}.ion-ios-backspace:before{content:\"\\f11d\"}.ion-ios-backspace-outline:before{content:\"\\f11c\"}.ion-ios-barcode:before{content:\"\\f3dc\"}.ion-ios-barcode-outline:before{content:\"\\f3db\"}.ion-ios-baseball:before{content:\"\\f3de\"}.ion-ios-baseball-outline:before{content:\"\\f3dd\"}.ion-ios-basket:before{content:\"\\f11f\"}.ion-ios-basket-outline:before{content:\"\\f11e\"}.ion-ios-basketball:before{content:\"\\f3e0\"}.ion-ios-basketball-outline:before{content:\"\\f3df\"}.ion-ios-battery-charging:before{content:\"\\f120\"}.ion-ios-battery-charging-outline:before{content:\"\\f120\"}.ion-ios-battery-dead:before{content:\"\\f121\"}.ion-ios-battery-dead-outline:before{content:\"\\f121\"}.ion-ios-battery-full:before{content:\"\\f122\"}.ion-ios-battery-full-outline:before{content:\"\\f122\"}.ion-ios-beaker:before{content:\"\\f124\"}.ion-ios-beaker-outline:before{content:\"\\f123\"}.ion-ios-beer:before{content:\"\\f126\"}.ion-ios-beer-outline:before{content:\"\\f125\"}.ion-ios-bicycle:before{content:\"\\f127\"}.ion-ios-bicycle-outline:before{content:\"\\f127\"}.ion-ios-bluetooth:before{content:\"\\f128\"}.ion-ios-bluetooth-outline:before{content:\"\\f128\"}.ion-ios-boat:before{content:\"\\f12a\"}.ion-ios-boat-outline:before{content:\"\\f129\"}.ion-ios-body:before{content:\"\\f3e4\"}.ion-ios-body-outline:before{content:\"\\f3e3\"}.ion-ios-bonfire:before{content:\"\\f12c\"}.ion-ios-bonfire-outline:before{content:\"\\f12b\"}.ion-ios-book:before{content:\"\\f3e8\"}.ion-ios-book-outline:before{content:\"\\f3e7\"}.ion-ios-bookmark:before{content:\"\\f12e\"}.ion-ios-bookmark-outline:before{content:\"\\f12d\"}.ion-ios-bookmarks:before{content:\"\\f3ea\"}.ion-ios-bookmarks-outline:before{content:\"\\f3e9\"}.ion-ios-bowtie:before{content:\"\\f130\"}.ion-ios-bowtie-outline:before{content:\"\\f12f\"}.ion-ios-briefcase:before{content:\"\\f3ee\"}.ion-ios-briefcase-outline:before{content:\"\\f3ed\"}.ion-ios-browsers:before{content:\"\\f3f0\"}.ion-ios-browsers-outline:before{content:\"\\f3ef\"}.ion-ios-brush:before{content:\"\\f132\"}.ion-ios-brush-outline:before{content:\"\\f131\"}.ion-ios-bug:before{content:\"\\f134\"}.ion-ios-bug-outline:before{content:\"\\f133\"}.ion-ios-build:before{content:\"\\f136\"}.ion-ios-build-outline:before{content:\"\\f135\"}.ion-ios-bulb:before{content:\"\\f138\"}.ion-ios-bulb-outline:before{content:\"\\f137\"}.ion-ios-bus:before{content:\"\\f13a\"}.ion-ios-bus-outline:before{content:\"\\f139\"}.ion-ios-cafe:before{content:\"\\f13c\"}.ion-ios-cafe-outline:before{content:\"\\f13b\"}.ion-ios-calculator:before{content:\"\\f3f2\"}.ion-ios-calculator-outline:before{content:\"\\f3f1\"}.ion-ios-calendar:before{content:\"\\f3f4\"}.ion-ios-calendar-outline:before{content:\"\\f3f3\"}.ion-ios-call:before{content:\"\\f13e\"}.ion-ios-call-outline:before{content:\"\\f13d\"}.ion-ios-camera:before{content:\"\\f3f6\"}.ion-ios-camera-outline:before{content:\"\\f3f5\"}.ion-ios-car:before{content:\"\\f140\"}.ion-ios-car-outline:before{content:\"\\f13f\"}.ion-ios-card:before{content:\"\\f142\"}.ion-ios-card-outline:before{content:\"\\f141\"}.ion-ios-cart:before{content:\"\\f3f8\"}.ion-ios-cart-outline:before{content:\"\\f3f7\"}.ion-ios-cash:before{content:\"\\f144\"}.ion-ios-cash-outline:before{content:\"\\f143\"}.ion-ios-chatboxes:before{content:\"\\f3fa\"}.ion-ios-chatboxes-outline:before{content:\"\\f3f9\"}.ion-ios-chatbubbles:before{content:\"\\f146\"}.ion-ios-chatbubbles-outline:before{content:\"\\f145\"}.ion-ios-checkbox:before{content:\"\\f148\"}.ion-ios-checkbox-outline:before{content:\"\\f147\"}.ion-ios-checkmark:before{content:\"\\f3ff\"}.ion-ios-checkmark-circle:before{content:\"\\f14a\"}.ion-ios-checkmark-circle-outline:before{content:\"\\f149\"}.ion-ios-checkmark-outline:before{content:\"\\f3ff\"}.ion-ios-clipboard:before{content:\"\\f14c\"}.ion-ios-clipboard-outline:before{content:\"\\f14b\"}.ion-ios-clock:before{content:\"\\f403\"}.ion-ios-clock-outline:before{content:\"\\f402\"}.ion-ios-close:before{content:\"\\f406\"}.ion-ios-close-circle:before{content:\"\\f14e\"}.ion-ios-close-circle-outline:before{content:\"\\f14d\"}.ion-ios-close-outline:before{content:\"\\f406\"}.ion-ios-closed-captioning:before{content:\"\\f150\"}.ion-ios-closed-captioning-outline:before{content:\"\\f14f\"}.ion-ios-cloud:before{content:\"\\f40c\"}.ion-ios-cloud-circle:before{content:\"\\f152\"}.ion-ios-cloud-circle-outline:before{content:\"\\f151\"}.ion-ios-cloud-done:before{content:\"\\f154\"}.ion-ios-cloud-done-outline:before{content:\"\\f153\"}.ion-ios-cloud-download:before{content:\"\\f408\"}.ion-ios-cloud-download-outline:before{content:\"\\f407\"}.ion-ios-cloud-outline:before{content:\"\\f409\"}.ion-ios-cloud-upload:before{content:\"\\f40b\"}.ion-ios-cloud-upload-outline:before{content:\"\\f40a\"}.ion-ios-cloudy:before{content:\"\\f410\"}.ion-ios-cloudy-night:before{content:\"\\f40e\"}.ion-ios-cloudy-night-outline:before{content:\"\\f40d\"}.ion-ios-cloudy-outline:before{content:\"\\f40f\"}.ion-ios-code:before{content:\"\\f157\"}.ion-ios-code-download:before{content:\"\\f155\"}.ion-ios-code-download-outline:before{content:\"\\f155\"}.ion-ios-code-outline:before{content:\"\\f157\"}.ion-ios-code-working:before{content:\"\\f156\"}.ion-ios-code-working-outline:before{content:\"\\f156\"}.ion-ios-cog:before{content:\"\\f412\"}.ion-ios-cog-outline:before{content:\"\\f411\"}.ion-ios-color-fill:before{content:\"\\f159\"}.ion-ios-color-fill-outline:before{content:\"\\f158\"}.ion-ios-color-filter:before{content:\"\\f414\"}.ion-ios-color-filter-outline:before{content:\"\\f413\"}.ion-ios-color-palette:before{content:\"\\f15b\"}.ion-ios-color-palette-outline:before{content:\"\\f15a\"}.ion-ios-color-wand:before{content:\"\\f416\"}.ion-ios-color-wand-outline:before{content:\"\\f415\"}.ion-ios-compass:before{content:\"\\f15d\"}.ion-ios-compass-outline:before{content:\"\\f15c\"}.ion-ios-construct:before{content:\"\\f15f\"}.ion-ios-construct-outline:before{content:\"\\f15e\"}.ion-ios-contact:before{content:\"\\f41a\"}.ion-ios-contact-outline:before{content:\"\\f419\"}.ion-ios-contacts:before{content:\"\\f161\"}.ion-ios-contacts-outline:before{content:\"\\f160\"}.ion-ios-contract:before{content:\"\\f162\"}.ion-ios-contract-outline:before{content:\"\\f162\"}.ion-ios-contrast:before{content:\"\\f163\"}.ion-ios-contrast-outline:before{content:\"\\f163\"}.ion-ios-copy:before{content:\"\\f41c\"}.ion-ios-copy-outline:before{content:\"\\f41b\"}.ion-ios-create:before{content:\"\\f165\"}.ion-ios-create-outline:before{content:\"\\f164\"}.ion-ios-crop:before{content:\"\\f41e\"}.ion-ios-crop-outline:before{content:\"\\f166\"}.ion-ios-cube:before{content:\"\\f168\"}.ion-ios-cube-outline:before{content:\"\\f167\"}.ion-ios-cut:before{content:\"\\f16a\"}.ion-ios-cut-outline:before{content:\"\\f169\"}.ion-ios-desktop:before{content:\"\\f16c\"}.ion-ios-desktop-outline:before{content:\"\\f16b\"}.ion-ios-disc:before{content:\"\\f16e\"}.ion-ios-disc-outline:before{content:\"\\f16d\"}.ion-ios-document:before{content:\"\\f170\"}.ion-ios-document-outline:before{content:\"\\f16f\"}.ion-ios-done-all:before{content:\"\\f171\"}.ion-ios-done-all-outline:before{content:\"\\f171\"}.ion-ios-download:before{content:\"\\f420\"}.ion-ios-download-outline:before{content:\"\\f41f\"}.ion-ios-easel:before{content:\"\\f173\"}.ion-ios-easel-outline:before{content:\"\\f172\"}.ion-ios-egg:before{content:\"\\f175\"}.ion-ios-egg-outline:before{content:\"\\f174\"}.ion-ios-exit:before{content:\"\\f177\"}.ion-ios-exit-outline:before{content:\"\\f176\"}.ion-ios-expand:before{content:\"\\f178\"}.ion-ios-expand-outline:before{content:\"\\f178\"}.ion-ios-eye:before{content:\"\\f425\"}.ion-ios-eye-off:before{content:\"\\f17a\"}.ion-ios-eye-off-outline:before{content:\"\\f179\"}.ion-ios-eye-outline:before{content:\"\\f424\"}.ion-ios-fastforward:before{content:\"\\f427\"}.ion-ios-fastforward-outline:before{content:\"\\f426\"}.ion-ios-female:before{content:\"\\f17b\"}.ion-ios-female-outline:before{content:\"\\f17b\"}.ion-ios-filing:before{content:\"\\f429\"}.ion-ios-filing-outline:before{content:\"\\f428\"}.ion-ios-film:before{content:\"\\f42b\"}.ion-ios-film-outline:before{content:\"\\f42a\"}.ion-ios-finger-print:before{content:\"\\f17c\"}.ion-ios-finger-print-outline:before{content:\"\\f17c\"}.ion-ios-flag:before{content:\"\\f42d\"}.ion-ios-flag-outline:before{content:\"\\f42c\"}.ion-ios-flame:before{content:\"\\f42f\"}.ion-ios-flame-outline:before{content:\"\\f42e\"}.ion-ios-flash:before{content:\"\\f17e\"}.ion-ios-flash-outline:before{content:\"\\f17d\"}.ion-ios-flask:before{content:\"\\f431\"}.ion-ios-flask-outline:before{content:\"\\f430\"}.ion-ios-flower:before{content:\"\\f433\"}.ion-ios-flower-outline:before{content:\"\\f432\"}.ion-ios-folder:before{content:\"\\f435\"}.ion-ios-folder-open:before{content:\"\\f180\"}.ion-ios-folder-open-outline:before{content:\"\\f17f\"}.ion-ios-folder-outline:before{content:\"\\f434\"}.ion-ios-football:before{content:\"\\f437\"}.ion-ios-football-outline:before{content:\"\\f436\"}.ion-ios-funnel:before{content:\"\\f182\"}.ion-ios-funnel-outline:before{content:\"\\f181\"}.ion-ios-game-controller-a:before{content:\"\\f439\"}.ion-ios-game-controller-a-outline:before{content:\"\\f438\"}.ion-ios-game-controller-b:before{content:\"\\f43b\"}.ion-ios-game-controller-b-outline:before{content:\"\\f43a\"}.ion-ios-git-branch:before{content:\"\\f183\"}.ion-ios-git-branch-outline:before{content:\"\\f183\"}.ion-ios-git-commit:before{content:\"\\f184\"}.ion-ios-git-commit-outline:before{content:\"\\f184\"}.ion-ios-git-compare:before{content:\"\\f185\"}.ion-ios-git-compare-outline:before{content:\"\\f185\"}.ion-ios-git-merge:before{content:\"\\f186\"}.ion-ios-git-merge-outline:before{content:\"\\f186\"}.ion-ios-git-network:before{content:\"\\f187\"}.ion-ios-git-network-outline:before{content:\"\\f187\"}.ion-ios-git-pull-request:before{content:\"\\f188\"}.ion-ios-git-pull-request-outline:before{content:\"\\f188\"}.ion-ios-glasses:before{content:\"\\f43f\"}.ion-ios-glasses-outline:before{content:\"\\f43e\"}.ion-ios-globe:before{content:\"\\f18a\"}.ion-ios-globe-outline:before{content:\"\\f189\"}.ion-ios-grid:before{content:\"\\f18c\"}.ion-ios-grid-outline:before{content:\"\\f18b\"}.ion-ios-hammer:before{content:\"\\f18e\"}.ion-ios-hammer-outline:before{content:\"\\f18d\"}.ion-ios-hand:before{content:\"\\f190\"}.ion-ios-hand-outline:before{content:\"\\f18f\"}.ion-ios-happy:before{content:\"\\f192\"}.ion-ios-happy-outline:before{content:\"\\f191\"}.ion-ios-headset:before{content:\"\\f194\"}.ion-ios-headset-outline:before{content:\"\\f193\"}.ion-ios-heart:before{content:\"\\f443\"}.ion-ios-heart-outline:before{content:\"\\f442\"}.ion-ios-help:before{content:\"\\f446\"}.ion-ios-help-buoy:before{content:\"\\f196\"}.ion-ios-help-buoy-outline:before{content:\"\\f195\"}.ion-ios-help-circle:before{content:\"\\f198\"}.ion-ios-help-circle-outline:before{content:\"\\f197\"}.ion-ios-help-outline:before{content:\"\\f446\"}.ion-ios-home:before{content:\"\\f448\"}.ion-ios-home-outline:before{content:\"\\f447\"}.ion-ios-ice-cream:before{content:\"\\f19a\"}.ion-ios-ice-cream-outline:before{content:\"\\f199\"}.ion-ios-image:before{content:\"\\f19c\"}.ion-ios-image-outline:before{content:\"\\f19b\"}.ion-ios-images:before{content:\"\\f19e\"}.ion-ios-images-outline:before{content:\"\\f19d\"}.ion-ios-infinite:before{content:\"\\f44a\"}.ion-ios-infinite-outline:before{content:\"\\f449\"}.ion-ios-information:before{content:\"\\f44d\"}.ion-ios-information-circle:before{content:\"\\f1a0\"}.ion-ios-information-circle-outline:before{content:\"\\f19f\"}.ion-ios-information-outline:before{content:\"\\f44d\"}.ion-ios-ionic:before{content:\"\\f1a1\"}.ion-ios-ionic-outline:before{content:\"\\f44e\"}.ion-ios-ionitron:before{content:\"\\f1a3\"}.ion-ios-ionitron-outline:before{content:\"\\f1a2\"}.ion-ios-jet:before{content:\"\\f1a5\"}.ion-ios-jet-outline:before{content:\"\\f1a4\"}.ion-ios-key:before{content:\"\\f1a7\"}.ion-ios-key-outline:before{content:\"\\f1a6\"}.ion-ios-keypad:before{content:\"\\f450\"}.ion-ios-keypad-outline:before{content:\"\\f44f\"}.ion-ios-laptop:before{content:\"\\f1a8\"}.ion-ios-laptop-outline:before{content:\"\\f1a8\"}.ion-ios-leaf:before{content:\"\\f1aa\"}.ion-ios-leaf-outline:before{content:\"\\f1a9\"}.ion-ios-link:before{content:\"\\f22a\"}.ion-ios-link-outline:before{content:\"\\f1ca\"}.ion-ios-list:before{content:\"\\f454\"}.ion-ios-list-box:before{content:\"\\f1ac\"}.ion-ios-list-box-outline:before{content:\"\\f1ab\"}.ion-ios-list-outline:before{content:\"\\f454\"}.ion-ios-locate:before{content:\"\\f1ae\"}.ion-ios-locate-outline:before{content:\"\\f1ad\"}.ion-ios-lock:before{content:\"\\f1b0\"}.ion-ios-lock-outline:before{content:\"\\f1af\"}.ion-ios-log-in:before{content:\"\\f1b1\"}.ion-ios-log-in-outline:before{content:\"\\f1b1\"}.ion-ios-log-out:before{content:\"\\f1b2\"}.ion-ios-log-out-outline:before{content:\"\\f1b2\"}.ion-ios-magnet:before{content:\"\\f1b4\"}.ion-ios-magnet-outline:before{content:\"\\f1b3\"}.ion-ios-mail:before{content:\"\\f1b8\"}.ion-ios-mail-open:before{content:\"\\f1b6\"}.ion-ios-mail-open-outline:before{content:\"\\f1b5\"}.ion-ios-mail-outline:before{content:\"\\f1b7\"}.ion-ios-male:before{content:\"\\f1b9\"}.ion-ios-male-outline:before{content:\"\\f1b9\"}.ion-ios-man:before{content:\"\\f1bb\"}.ion-ios-man-outline:before{content:\"\\f1ba\"}.ion-ios-map:before{content:\"\\f1bd\"}.ion-ios-map-outline:before{content:\"\\f1bc\"}.ion-ios-medal:before{content:\"\\f1bf\"}.ion-ios-medal-outline:before{content:\"\\f1be\"}.ion-ios-medical:before{content:\"\\f45c\"}.ion-ios-medical-outline:before{content:\"\\f45b\"}.ion-ios-medkit:before{content:\"\\f45e\"}.ion-ios-medkit-outline:before{content:\"\\f45d\"}.ion-ios-megaphone:before{content:\"\\f1c1\"}.ion-ios-megaphone-outline:before{content:\"\\f1c0\"}.ion-ios-menu:before{content:\"\\f1c3\"}.ion-ios-menu-outline:before{content:\"\\f1c2\"}.ion-ios-mic:before{content:\"\\f461\"}.ion-ios-mic-off:before{content:\"\\f45f\"}.ion-ios-mic-off-outline:before{content:\"\\f1c4\"}.ion-ios-mic-outline:before{content:\"\\f460\"}.ion-ios-microphone:before{content:\"\\f1c6\"}.ion-ios-microphone-outline:before{content:\"\\f1c5\"}.ion-ios-moon:before{content:\"\\f468\"}.ion-ios-moon-outline:before{content:\"\\f467\"}.ion-ios-more:before{content:\"\\f1c8\"}.ion-ios-more-outline:before{content:\"\\f1c7\"}.ion-ios-move:before{content:\"\\f1cb\"}.ion-ios-move-outline:before{content:\"\\f1cb\"}.ion-ios-musical-note:before{content:\"\\f46b\"}.ion-ios-musical-note-outline:before{content:\"\\f1cc\"}.ion-ios-musical-notes:before{content:\"\\f46c\"}.ion-ios-musical-notes-outline:before{content:\"\\f1cd\"}.ion-ios-navigate:before{content:\"\\f46e\"}.ion-ios-navigate-outline:before{content:\"\\f46d\"}.ion-ios-no-smoking:before{content:\"\\f1cf\"}.ion-ios-no-smoking-outline:before{content:\"\\f1ce\"}.ion-ios-notifications:before{content:\"\\f1d3\"}.ion-ios-notifications-off:before{content:\"\\f1d1\"}.ion-ios-notifications-off-outline:before{content:\"\\f1d0\"}.ion-ios-notifications-outline:before{content:\"\\f1d2\"}.ion-ios-nuclear:before{content:\"\\f1d5\"}.ion-ios-nuclear-outline:before{content:\"\\f1d4\"}.ion-ios-nutrition:before{content:\"\\f470\"}.ion-ios-nutrition-outline:before{content:\"\\f46f\"}.ion-ios-open:before{content:\"\\f1d7\"}.ion-ios-open-outline:before{content:\"\\f1d6\"}.ion-ios-options:before{content:\"\\f1d9\"}.ion-ios-options-outline:before{content:\"\\f1d8\"}.ion-ios-outlet:before{content:\"\\f1db\"}.ion-ios-outlet-outline:before{content:\"\\f1da\"}.ion-ios-paper:before{content:\"\\f472\"}.ion-ios-paper-outline:before{content:\"\\f471\"}.ion-ios-paper-plane:before{content:\"\\f1dd\"}.ion-ios-paper-plane-outline:before{content:\"\\f1dc\"}.ion-ios-partly-sunny:before{content:\"\\f1df\"}.ion-ios-partly-sunny-outline:before{content:\"\\f1de\"}.ion-ios-pause:before{content:\"\\f478\"}.ion-ios-pause-outline:before{content:\"\\f477\"}.ion-ios-paw:before{content:\"\\f47a\"}.ion-ios-paw-outline:before{content:\"\\f479\"}.ion-ios-people:before{content:\"\\f47c\"}.ion-ios-people-outline:before{content:\"\\f47b\"}.ion-ios-person:before{content:\"\\f47e\"}.ion-ios-person-add:before{content:\"\\f1e1\"}.ion-ios-person-add-outline:before{content:\"\\f1e0\"}.ion-ios-person-outline:before{content:\"\\f47d\"}.ion-ios-phone-landscape:before{content:\"\\f1e2\"}.ion-ios-phone-landscape-outline:before{content:\"\\f1e2\"}.ion-ios-phone-portrait:before{content:\"\\f1e3\"}.ion-ios-phone-portrait-outline:before{content:\"\\f1e3\"}.ion-ios-photos:before{content:\"\\f482\"}.ion-ios-photos-outline:before{content:\"\\f481\"}.ion-ios-pie:before{content:\"\\f484\"}.ion-ios-pie-outline:before{content:\"\\f483\"}.ion-ios-pin:before{content:\"\\f1e5\"}.ion-ios-pin-outline:before{content:\"\\f1e4\"}.ion-ios-pint:before{content:\"\\f486\"}.ion-ios-pint-outline:before{content:\"\\f485\"}.ion-ios-pizza:before{content:\"\\f1e7\"}.ion-ios-pizza-outline:before{content:\"\\f1e6\"}.ion-ios-plane:before{content:\"\\f1e9\"}.ion-ios-plane-outline:before{content:\"\\f1e8\"}.ion-ios-planet:before{content:\"\\f1eb\"}.ion-ios-planet-outline:before{content:\"\\f1ea\"}.ion-ios-play:before{content:\"\\f488\"}.ion-ios-play-outline:before{content:\"\\f487\"}.ion-ios-podium:before{content:\"\\f1ed\"}.ion-ios-podium-outline:before{content:\"\\f1ec\"}.ion-ios-power:before{content:\"\\f1ef\"}.ion-ios-power-outline:before{content:\"\\f1ee\"}.ion-ios-pricetag:before{content:\"\\f48d\"}.ion-ios-pricetag-outline:before{content:\"\\f48c\"}.ion-ios-pricetags:before{content:\"\\f48f\"}.ion-ios-pricetags-outline:before{content:\"\\f48e\"}.ion-ios-print:before{content:\"\\f1f1\"}.ion-ios-print-outline:before{content:\"\\f1f0\"}.ion-ios-pulse:before{content:\"\\f493\"}.ion-ios-pulse-outline:before{content:\"\\f1f2\"}.ion-ios-qr-scanner:before{content:\"\\f1f3\"}.ion-ios-qr-scanner-outline:before{content:\"\\f1f3\"}.ion-ios-quote:before{content:\"\\f1f5\"}.ion-ios-quote-outline:before{content:\"\\f1f4\"}.ion-ios-radio:before{content:\"\\f1f9\"}.ion-ios-radio-button-off:before{content:\"\\f1f6\"}.ion-ios-radio-button-off-outline:before{content:\"\\f1f6\"}.ion-ios-radio-button-on:before{content:\"\\f1f7\"}.ion-ios-radio-button-on-outline:before{content:\"\\f1f7\"}.ion-ios-radio-outline:before{content:\"\\f1f8\"}.ion-ios-rainy:before{content:\"\\f495\"}.ion-ios-rainy-outline:before{content:\"\\f494\"}.ion-ios-recording:before{content:\"\\f497\"}.ion-ios-recording-outline:before{content:\"\\f496\"}.ion-ios-redo:before{content:\"\\f499\"}.ion-ios-redo-outline:before{content:\"\\f498\"}.ion-ios-refresh:before{content:\"\\f49c\"}.ion-ios-refresh-circle:before{content:\"\\f226\"}.ion-ios-refresh-circle-outline:before{content:\"\\f224\"}.ion-ios-refresh-outline:before{content:\"\\f49c\"}.ion-ios-remove:before{content:\"\\f1fc\"}.ion-ios-remove-circle:before{content:\"\\f1fb\"}.ion-ios-remove-circle-outline:before{content:\"\\f1fa\"}.ion-ios-remove-outline:before{content:\"\\f1fc\"}.ion-ios-reorder:before{content:\"\\f1fd\"}.ion-ios-reorder-outline:before{content:\"\\f1fd\"}.ion-ios-repeat:before{content:\"\\f1fe\"}.ion-ios-repeat-outline:before{content:\"\\f1fe\"}.ion-ios-resize:before{content:\"\\f1ff\"}.ion-ios-resize-outline:before{content:\"\\f1ff\"}.ion-ios-restaurant:before{content:\"\\f201\"}.ion-ios-restaurant-outline:before{content:\"\\f200\"}.ion-ios-return-left:before{content:\"\\f202\"}.ion-ios-return-left-outline:before{content:\"\\f202\"}.ion-ios-return-right:before{content:\"\\f203\"}.ion-ios-return-right-outline:before{content:\"\\f203\"}.ion-ios-reverse-camera:before{content:\"\\f49f\"}.ion-ios-reverse-camera-outline:before{content:\"\\f49e\"}.ion-ios-rewind:before{content:\"\\f4a1\"}.ion-ios-rewind-outline:before{content:\"\\f4a0\"}.ion-ios-ribbon:before{content:\"\\f205\"}.ion-ios-ribbon-outline:before{content:\"\\f204\"}.ion-ios-rose:before{content:\"\\f4a3\"}.ion-ios-rose-outline:before{content:\"\\f4a2\"}.ion-ios-sad:before{content:\"\\f207\"}.ion-ios-sad-outline:before{content:\"\\f206\"}.ion-ios-school:before{content:\"\\f209\"}.ion-ios-school-outline:before{content:\"\\f208\"}.ion-ios-search:before{content:\"\\f4a5\"}.ion-ios-search-outline:before{content:\"\\f20a\"}.ion-ios-send:before{content:\"\\f20c\"}.ion-ios-send-outline:before{content:\"\\f20b\"}.ion-ios-settings:before{content:\"\\f4a7\"}.ion-ios-settings-outline:before{content:\"\\f20d\"}.ion-ios-share:before{content:\"\\f211\"}.ion-ios-share-alt:before{content:\"\\f20f\"}.ion-ios-share-alt-outline:before{content:\"\\f20e\"}.ion-ios-share-outline:before{content:\"\\f210\"}.ion-ios-shirt:before{content:\"\\f213\"}.ion-ios-shirt-outline:before{content:\"\\f212\"}.ion-ios-shuffle:before{content:\"\\f4a9\"}.ion-ios-shuffle-outline:before{content:\"\\f4a9\"}.ion-ios-skip-backward:before{content:\"\\f215\"}.ion-ios-skip-backward-outline:before{content:\"\\f214\"}.ion-ios-skip-forward:before{content:\"\\f217\"}.ion-ios-skip-forward-outline:before{content:\"\\f216\"}.ion-ios-snow:before{content:\"\\f218\"}.ion-ios-snow-outline:before{content:\"\\f22c\"}.ion-ios-speedometer:before{content:\"\\f4b0\"}.ion-ios-speedometer-outline:before{content:\"\\f4af\"}.ion-ios-square:before{content:\"\\f21a\"}.ion-ios-square-outline:before{content:\"\\f219\"}.ion-ios-star:before{content:\"\\f4b3\"}.ion-ios-star-half:before{content:\"\\f4b1\"}.ion-ios-star-half-outline:before{content:\"\\f4b1\"}.ion-ios-star-outline:before{content:\"\\f4b2\"}.ion-ios-stats:before{content:\"\\f21c\"}.ion-ios-stats-outline:before{content:\"\\f21b\"}.ion-ios-stopwatch:before{content:\"\\f4b5\"}.ion-ios-stopwatch-outline:before{content:\"\\f4b4\"}.ion-ios-subway:before{content:\"\\f21e\"}.ion-ios-subway-outline:before{content:\"\\f21d\"}.ion-ios-sunny:before{content:\"\\f4b7\"}.ion-ios-sunny-outline:before{content:\"\\f4b6\"}.ion-ios-swap:before{content:\"\\f21f\"}.ion-ios-swap-outline:before{content:\"\\f21f\"}.ion-ios-switch:before{content:\"\\f221\"}.ion-ios-switch-outline:before{content:\"\\f220\"}.ion-ios-sync:before{content:\"\\f222\"}.ion-ios-sync-outline:before{content:\"\\f222\"}.ion-ios-tablet-landscape:before{content:\"\\f223\"}.ion-ios-tablet-landscape-outline:before{content:\"\\f223\"}.ion-ios-tablet-portrait:before{content:\"\\f24e\"}.ion-ios-tablet-portrait-outline:before{content:\"\\f24e\"}.ion-ios-tennisball:before{content:\"\\f4bb\"}.ion-ios-tennisball-outline:before{content:\"\\f4ba\"}.ion-ios-text:before{content:\"\\f250\"}.ion-ios-text-outline:before{content:\"\\f24f\"}.ion-ios-thermometer:before{content:\"\\f252\"}.ion-ios-thermometer-outline:before{content:\"\\f251\"}.ion-ios-thumbs-down:before{content:\"\\f254\"}.ion-ios-thumbs-down-outline:before{content:\"\\f253\"}.ion-ios-thumbs-up:before{content:\"\\f256\"}.ion-ios-thumbs-up-outline:before{content:\"\\f255\"}.ion-ios-thunderstorm:before{content:\"\\f4bd\"}.ion-ios-thunderstorm-outline:before{content:\"\\f4bc\"}.ion-ios-time:before{content:\"\\f4bf\"}.ion-ios-time-outline:before{content:\"\\f4be\"}.ion-ios-timer:before{content:\"\\f4c1\"}.ion-ios-timer-outline:before{content:\"\\f4c0\"}.ion-ios-train:before{content:\"\\f258\"}.ion-ios-train-outline:before{content:\"\\f257\"}.ion-ios-transgender:before{content:\"\\f259\"}.ion-ios-transgender-outline:before{content:\"\\f259\"}.ion-ios-trash:before{content:\"\\f4c5\"}.ion-ios-trash-outline:before{content:\"\\f4c4\"}.ion-ios-trending-down:before{content:\"\\f25a\"}.ion-ios-trending-down-outline:before{content:\"\\f25a\"}.ion-ios-trending-up:before{content:\"\\f25b\"}.ion-ios-trending-up-outline:before{content:\"\\f25b\"}.ion-ios-trophy:before{content:\"\\f25d\"}.ion-ios-trophy-outline:before{content:\"\\f25c\"}.ion-ios-umbrella:before{content:\"\\f25f\"}.ion-ios-umbrella-outline:before{content:\"\\f25e\"}.ion-ios-undo:before{content:\"\\f4c7\"}.ion-ios-undo-outline:before{content:\"\\f4c6\"}.ion-ios-unlock:before{content:\"\\f261\"}.ion-ios-unlock-outline:before{content:\"\\f260\"}.ion-ios-videocam:before{content:\"\\f4cd\"}.ion-ios-videocam-outline:before{content:\"\\f4cc\"}.ion-ios-volume-down:before{content:\"\\f262\"}.ion-ios-volume-down-outline:before{content:\"\\f262\"}.ion-ios-volume-mute:before{content:\"\\f263\"}.ion-ios-volume-mute-outline:before{content:\"\\f263\"}.ion-ios-volume-off:before{content:\"\\f264\"}.ion-ios-volume-off-outline:before{content:\"\\f264\"}.ion-ios-volume-up:before{content:\"\\f265\"}.ion-ios-volume-up-outline:before{content:\"\\f265\"}.ion-ios-walk:before{content:\"\\f266\"}.ion-ios-walk-outline:before{content:\"\\f266\"}.ion-ios-warning:before{content:\"\\f268\"}.ion-ios-warning-outline:before{content:\"\\f267\"}.ion-ios-watch:before{content:\"\\f269\"}.ion-ios-watch-outline:before{content:\"\\f269\"}.ion-ios-water:before{content:\"\\f26b\"}.ion-ios-water-outline:before{content:\"\\f26a\"}.ion-ios-wifi:before{content:\"\\f26d\"}.ion-ios-wifi-outline:before{content:\"\\f26c\"}.ion-ios-wine:before{content:\"\\f26f\"}.ion-ios-wine-outline:before{content:\"\\f26e\"}.ion-ios-woman:before{content:\"\\f271\"}.ion-ios-woman-outline:before{content:\"\\f270\"}.ion-logo-android:before{content:\"\\f225\"}.ion-logo-angular:before{content:\"\\f227\"}.ion-logo-apple:before{content:\"\\f229\"}.ion-logo-bitcoin:before{content:\"\\f22b\"}.ion-logo-buffer:before{content:\"\\f22d\"}.ion-logo-chrome:before{content:\"\\f22f\"}.ion-logo-codepen:before{content:\"\\f230\"}.ion-logo-css3:before{content:\"\\f231\"}.ion-logo-designernews:before{content:\"\\f232\"}.ion-logo-dribbble:before{content:\"\\f233\"}.ion-logo-dropbox:before{content:\"\\f234\"}.ion-logo-euro:before{content:\"\\f235\"}.ion-logo-facebook:before{content:\"\\f236\"}.ion-logo-foursquare:before{content:\"\\f237\"}.ion-logo-freebsd-devil:before{content:\"\\f238\"}.ion-logo-github:before{content:\"\\f239\"}.ion-logo-google:before{content:\"\\f23a\"}.ion-logo-googleplus:before{content:\"\\f23b\"}.ion-logo-hackernews:before{content:\"\\f23c\"}.ion-logo-html5:before{content:\"\\f23d\"}.ion-logo-instagram:before{content:\"\\f23e\"}.ion-logo-javascript:before{content:\"\\f23f\"}.ion-logo-linkedin:before{content:\"\\f240\"}.ion-logo-markdown:before{content:\"\\f241\"}.ion-logo-nodejs:before{content:\"\\f242\"}.ion-logo-octocat:before{content:\"\\f243\"}.ion-logo-pinterest:before{content:\"\\f244\"}.ion-logo-playstation:before{content:\"\\f245\"}.ion-logo-python:before{content:\"\\f246\"}.ion-logo-reddit:before{content:\"\\f247\"}.ion-logo-rss:before{content:\"\\f248\"}.ion-logo-sass:before{content:\"\\f249\"}.ion-logo-skype:before{content:\"\\f24a\"}.ion-logo-snapchat:before{content:\"\\f24b\"}.ion-logo-steam:before{content:\"\\f24c\"}.ion-logo-tumblr:before{content:\"\\f24d\"}.ion-logo-tux:before{content:\"\\f2ae\"}.ion-logo-twitch:before{content:\"\\f2af\"}.ion-logo-twitter:before{content:\"\\f2b0\"}.ion-logo-usd:before{content:\"\\f2b1\"}.ion-logo-vimeo:before{content:\"\\f2c4\"}.ion-logo-whatsapp:before{content:\"\\f2c5\"}.ion-logo-windows:before{content:\"\\f32f\"}.ion-logo-wordpress:before{content:\"\\f330\"}.ion-logo-xbox:before{content:\"\\f34c\"}.ion-logo-yahoo:before{content:\"\\f34d\"}.ion-logo-yen:before{content:\"\\f34e\"}.ion-logo-youtube:before{content:\"\\f34f\"}.ion-md-add:before{content:\"\\f273\"}.ion-md-add-circle:before{content:\"\\f272\"}.ion-md-alarm:before{content:\"\\f274\"}.ion-md-albums:before{content:\"\\f275\"}.ion-md-alert:before{content:\"\\f276\"}.ion-md-american-football:before{content:\"\\f277\"}.ion-md-analytics:before{content:\"\\f278\"}.ion-md-aperture:before{content:\"\\f279\"}.ion-md-apps:before{content:\"\\f27a\"}.ion-md-appstore:before{content:\"\\f27b\"}.ion-md-archive:before{content:\"\\f27c\"}.ion-md-arrow-back:before{content:\"\\f27d\"}.ion-md-arrow-down:before{content:\"\\f27e\"}.ion-md-arrow-dropdown:before{content:\"\\f280\"}.ion-md-arrow-dropdown-circle:before{content:\"\\f27f\"}.ion-md-arrow-dropleft:before{content:\"\\f282\"}.ion-md-arrow-dropleft-circle:before{content:\"\\f281\"}.ion-md-arrow-dropright:before{content:\"\\f284\"}.ion-md-arrow-dropright-circle:before{content:\"\\f283\"}.ion-md-arrow-dropup:before{content:\"\\f286\"}.ion-md-arrow-dropup-circle:before{content:\"\\f285\"}.ion-md-arrow-forward:before{content:\"\\f287\"}.ion-md-arrow-round-back:before{content:\"\\f288\"}.ion-md-arrow-round-down:before{content:\"\\f289\"}.ion-md-arrow-round-forward:before{content:\"\\f28a\"}.ion-md-arrow-round-up:before{content:\"\\f28b\"}.ion-md-arrow-up:before{content:\"\\f28c\"}.ion-md-at:before{content:\"\\f28d\"}.ion-md-attach:before{content:\"\\f28e\"}.ion-md-backspace:before{content:\"\\f28f\"}.ion-md-barcode:before{content:\"\\f290\"}.ion-md-baseball:before{content:\"\\f291\"}.ion-md-basket:before{content:\"\\f292\"}.ion-md-basketball:before{content:\"\\f293\"}.ion-md-battery-charging:before{content:\"\\f294\"}.ion-md-battery-dead:before{content:\"\\f295\"}.ion-md-battery-full:before{content:\"\\f296\"}.ion-md-beaker:before{content:\"\\f297\"}.ion-md-beer:before{content:\"\\f298\"}.ion-md-bicycle:before{content:\"\\f299\"}.ion-md-bluetooth:before{content:\"\\f29a\"}.ion-md-boat:before{content:\"\\f29b\"}.ion-md-body:before{content:\"\\f29c\"}.ion-md-bonfire:before{content:\"\\f29d\"}.ion-md-book:before{content:\"\\f29e\"}.ion-md-bookmark:before{content:\"\\f29f\"}.ion-md-bookmarks:before{content:\"\\f2a0\"}.ion-md-bowtie:before{content:\"\\f2a1\"}.ion-md-briefcase:before{content:\"\\f2a2\"}.ion-md-browsers:before{content:\"\\f2a3\"}.ion-md-brush:before{content:\"\\f2a4\"}.ion-md-bug:before{content:\"\\f2a5\"}.ion-md-build:before{content:\"\\f2a6\"}.ion-md-bulb:before{content:\"\\f2a7\"}.ion-md-bus:before{content:\"\\f2a8\"}.ion-md-cafe:before{content:\"\\f2a9\"}.ion-md-calculator:before{content:\"\\f2aa\"}.ion-md-calendar:before{content:\"\\f2ab\"}.ion-md-call:before{content:\"\\f2ac\"}.ion-md-camera:before{content:\"\\f2ad\"}.ion-md-car:before{content:\"\\f2b2\"}.ion-md-card:before{content:\"\\f2b3\"}.ion-md-cart:before{content:\"\\f2b4\"}.ion-md-cash:before{content:\"\\f2b5\"}.ion-md-chatboxes:before{content:\"\\f2b6\"}.ion-md-chatbubbles:before{content:\"\\f2b7\"}.ion-md-checkbox:before{content:\"\\f2b9\"}.ion-md-checkbox-outline:before{content:\"\\f2b8\"}.ion-md-checkmark:before{content:\"\\f2bc\"}.ion-md-checkmark-circle:before{content:\"\\f2bb\"}.ion-md-checkmark-circle-outline:before{content:\"\\f2ba\"}.ion-md-clipboard:before{content:\"\\f2bd\"}.ion-md-clock:before{content:\"\\f2be\"}.ion-md-close:before{content:\"\\f2c0\"}.ion-md-close-circle:before{content:\"\\f2bf\"}.ion-md-closed-captioning:before{content:\"\\f2c1\"}.ion-md-cloud:before{content:\"\\f2c9\"}.ion-md-cloud-circle:before{content:\"\\f2c2\"}.ion-md-cloud-done:before{content:\"\\f2c3\"}.ion-md-cloud-download:before{content:\"\\f2c6\"}.ion-md-cloud-outline:before{content:\"\\f2c7\"}.ion-md-cloud-upload:before{content:\"\\f2c8\"}.ion-md-cloudy:before{content:\"\\f2cb\"}.ion-md-cloudy-night:before{content:\"\\f2ca\"}.ion-md-code:before{content:\"\\f2ce\"}.ion-md-code-download:before{content:\"\\f2cc\"}.ion-md-code-working:before{content:\"\\f2cd\"}.ion-md-cog:before{content:\"\\f2cf\"}.ion-md-color-fill:before{content:\"\\f2d0\"}.ion-md-color-filter:before{content:\"\\f2d1\"}.ion-md-color-palette:before{content:\"\\f2d2\"}.ion-md-color-wand:before{content:\"\\f2d3\"}.ion-md-compass:before{content:\"\\f2d4\"}.ion-md-construct:before{content:\"\\f2d5\"}.ion-md-contact:before{content:\"\\f2d6\"}.ion-md-contacts:before{content:\"\\f2d7\"}.ion-md-contract:before{content:\"\\f2d8\"}.ion-md-contrast:before{content:\"\\f2d9\"}.ion-md-copy:before{content:\"\\f2da\"}.ion-md-create:before{content:\"\\f2db\"}.ion-md-crop:before{content:\"\\f2dc\"}.ion-md-cube:before{content:\"\\f2dd\"}.ion-md-cut:before{content:\"\\f2de\"}.ion-md-desktop:before{content:\"\\f2df\"}.ion-md-disc:before{content:\"\\f2e0\"}.ion-md-document:before{content:\"\\f2e1\"}.ion-md-done-all:before{content:\"\\f2e2\"}.ion-md-download:before{content:\"\\f2e3\"}.ion-md-easel:before{content:\"\\f2e4\"}.ion-md-egg:before{content:\"\\f2e5\"}.ion-md-exit:before{content:\"\\f2e6\"}.ion-md-expand:before{content:\"\\f2e7\"}.ion-md-eye:before{content:\"\\f2e9\"}.ion-md-eye-off:before{content:\"\\f2e8\"}.ion-md-fastforward:before{content:\"\\f2ea\"}.ion-md-female:before{content:\"\\f2eb\"}.ion-md-filing:before{content:\"\\f2ec\"}.ion-md-film:before{content:\"\\f2ed\"}.ion-md-finger-print:before{content:\"\\f2ee\"}.ion-md-flag:before{content:\"\\f2ef\"}.ion-md-flame:before{content:\"\\f2f0\"}.ion-md-flash:before{content:\"\\f2f1\"}.ion-md-flask:before{content:\"\\f2f2\"}.ion-md-flower:before{content:\"\\f2f3\"}.ion-md-folder:before{content:\"\\f2f5\"}.ion-md-folder-open:before{content:\"\\f2f4\"}.ion-md-football:before{content:\"\\f2f6\"}.ion-md-funnel:before{content:\"\\f2f7\"}.ion-md-game-controller-a:before{content:\"\\f2f8\"}.ion-md-game-controller-b:before{content:\"\\f2f9\"}.ion-md-git-branch:before{content:\"\\f2fa\"}.ion-md-git-commit:before{content:\"\\f2fb\"}.ion-md-git-compare:before{content:\"\\f2fc\"}.ion-md-git-merge:before{content:\"\\f2fd\"}.ion-md-git-network:before{content:\"\\f2fe\"}.ion-md-git-pull-request:before{content:\"\\f2ff\"}.ion-md-glasses:before{content:\"\\f300\"}.ion-md-globe:before{content:\"\\f301\"}.ion-md-grid:before{content:\"\\f302\"}.ion-md-hammer:before{content:\"\\f303\"}.ion-md-hand:before{content:\"\\f304\"}.ion-md-happy:before{content:\"\\f305\"}.ion-md-headset:before{content:\"\\f306\"}.ion-md-heart:before{content:\"\\f308\"}.ion-md-heart-outline:before{content:\"\\f307\"}.ion-md-help:before{content:\"\\f30b\"}.ion-md-help-buoy:before{content:\"\\f309\"}.ion-md-help-circle:before{content:\"\\f30a\"}.ion-md-home:before{content:\"\\f30c\"}.ion-md-ice-cream:before{content:\"\\f30d\"}.ion-md-image:before{content:\"\\f30e\"}.ion-md-images:before{content:\"\\f30f\"}.ion-md-infinite:before{content:\"\\f310\"}.ion-md-information:before{content:\"\\f312\"}.ion-md-information-circle:before{content:\"\\f311\"}.ion-md-ionic:before{content:\"\\f313\"}.ion-md-ionitron:before{content:\"\\f314\"}.ion-md-jet:before{content:\"\\f315\"}.ion-md-key:before{content:\"\\f316\"}.ion-md-keypad:before{content:\"\\f317\"}.ion-md-laptop:before{content:\"\\f318\"}.ion-md-leaf:before{content:\"\\f319\"}.ion-md-link:before{content:\"\\f22e\"}.ion-md-list:before{content:\"\\f31b\"}.ion-md-list-box:before{content:\"\\f31a\"}.ion-md-locate:before{content:\"\\f31c\"}.ion-md-lock:before{content:\"\\f31d\"}.ion-md-log-in:before{content:\"\\f31e\"}.ion-md-log-out:before{content:\"\\f31f\"}.ion-md-magnet:before{content:\"\\f320\"}.ion-md-mail:before{content:\"\\f322\"}.ion-md-mail-open:before{content:\"\\f321\"}.ion-md-male:before{content:\"\\f323\"}.ion-md-man:before{content:\"\\f324\"}.ion-md-map:before{content:\"\\f325\"}.ion-md-medal:before{content:\"\\f326\"}.ion-md-medical:before{content:\"\\f327\"}.ion-md-medkit:before{content:\"\\f328\"}.ion-md-megaphone:before{content:\"\\f329\"}.ion-md-menu:before{content:\"\\f32a\"}.ion-md-mic:before{content:\"\\f32c\"}.ion-md-mic-off:before{content:\"\\f32b\"}.ion-md-microphone:before{content:\"\\f32d\"}.ion-md-moon:before{content:\"\\f32e\"}.ion-md-more:before{content:\"\\f1c9\"}.ion-md-move:before{content:\"\\f331\"}.ion-md-musical-note:before{content:\"\\f332\"}.ion-md-musical-notes:before{content:\"\\f333\"}.ion-md-navigate:before{content:\"\\f334\"}.ion-md-no-smoking:before{content:\"\\f335\"}.ion-md-notifications:before{content:\"\\f338\"}.ion-md-notifications-off:before{content:\"\\f336\"}.ion-md-notifications-outline:before{content:\"\\f337\"}.ion-md-nuclear:before{content:\"\\f339\"}.ion-md-nutrition:before{content:\"\\f33a\"}.ion-md-open:before{content:\"\\f33b\"}.ion-md-options:before{content:\"\\f33c\"}.ion-md-outlet:before{content:\"\\f33d\"}.ion-md-paper:before{content:\"\\f33f\"}.ion-md-paper-plane:before{content:\"\\f33e\"}.ion-md-partly-sunny:before{content:\"\\f340\"}.ion-md-pause:before{content:\"\\f341\"}.ion-md-paw:before{content:\"\\f342\"}.ion-md-people:before{content:\"\\f343\"}.ion-md-person:before{content:\"\\f345\"}.ion-md-person-add:before{content:\"\\f344\"}.ion-md-phone-landscape:before{content:\"\\f346\"}.ion-md-phone-portrait:before{content:\"\\f347\"}.ion-md-photos:before{content:\"\\f348\"}.ion-md-pie:before{content:\"\\f349\"}.ion-md-pin:before{content:\"\\f34a\"}.ion-md-pint:before{content:\"\\f34b\"}.ion-md-pizza:before{content:\"\\f354\"}.ion-md-plane:before{content:\"\\f355\"}.ion-md-planet:before{content:\"\\f356\"}.ion-md-play:before{content:\"\\f357\"}.ion-md-podium:before{content:\"\\f358\"}.ion-md-power:before{content:\"\\f359\"}.ion-md-pricetag:before{content:\"\\f35a\"}.ion-md-pricetags:before{content:\"\\f35b\"}.ion-md-print:before{content:\"\\f35c\"}.ion-md-pulse:before{content:\"\\f35d\"}.ion-md-qr-scanner:before{content:\"\\f35e\"}.ion-md-quote:before{content:\"\\f35f\"}.ion-md-radio:before{content:\"\\f362\"}.ion-md-radio-button-off:before{content:\"\\f360\"}.ion-md-radio-button-on:before{content:\"\\f361\"}.ion-md-rainy:before{content:\"\\f363\"}.ion-md-recording:before{content:\"\\f364\"}.ion-md-redo:before{content:\"\\f365\"}.ion-md-refresh:before{content:\"\\f366\"}.ion-md-refresh-circle:before{content:\"\\f228\"}.ion-md-remove:before{content:\"\\f368\"}.ion-md-remove-circle:before{content:\"\\f367\"}.ion-md-reorder:before{content:\"\\f369\"}.ion-md-repeat:before{content:\"\\f36a\"}.ion-md-resize:before{content:\"\\f36b\"}.ion-md-restaurant:before{content:\"\\f36c\"}.ion-md-return-left:before{content:\"\\f36d\"}.ion-md-return-right:before{content:\"\\f36e\"}.ion-md-reverse-camera:before{content:\"\\f36f\"}.ion-md-rewind:before{content:\"\\f370\"}.ion-md-ribbon:before{content:\"\\f371\"}.ion-md-rose:before{content:\"\\f372\"}.ion-md-sad:before{content:\"\\f373\"}.ion-md-school:before{content:\"\\f374\"}.ion-md-search:before{content:\"\\f375\"}.ion-md-send:before{content:\"\\f376\"}.ion-md-settings:before{content:\"\\f377\"}.ion-md-share:before{content:\"\\f379\"}.ion-md-share-alt:before{content:\"\\f378\"}.ion-md-shirt:before{content:\"\\f37a\"}.ion-md-shuffle:before{content:\"\\f37b\"}.ion-md-skip-backward:before{content:\"\\f37c\"}.ion-md-skip-forward:before{content:\"\\f37d\"}.ion-md-snow:before{content:\"\\f37e\"}.ion-md-speedometer:before{content:\"\\f37f\"}.ion-md-square:before{content:\"\\f381\"}.ion-md-square-outline:before{content:\"\\f380\"}.ion-md-star:before{content:\"\\f384\"}.ion-md-star-half:before{content:\"\\f382\"}.ion-md-star-outline:before{content:\"\\f383\"}.ion-md-stats:before{content:\"\\f385\"}.ion-md-stopwatch:before{content:\"\\f386\"}.ion-md-subway:before{content:\"\\f387\"}.ion-md-sunny:before{content:\"\\f388\"}.ion-md-swap:before{content:\"\\f389\"}.ion-md-switch:before{content:\"\\f38a\"}.ion-md-sync:before{content:\"\\f38b\"}.ion-md-tablet-landscape:before{content:\"\\f38c\"}.ion-md-tablet-portrait:before{content:\"\\f38d\"}.ion-md-tennisball:before{content:\"\\f38e\"}.ion-md-text:before{content:\"\\f38f\"}.ion-md-thermometer:before{content:\"\\f390\"}.ion-md-thumbs-down:before{content:\"\\f391\"}.ion-md-thumbs-up:before{content:\"\\f392\"}.ion-md-thunderstorm:before{content:\"\\f393\"}.ion-md-time:before{content:\"\\f394\"}.ion-md-timer:before{content:\"\\f395\"}.ion-md-train:before{content:\"\\f396\"}.ion-md-transgender:before{content:\"\\f397\"}.ion-md-trash:before{content:\"\\f398\"}.ion-md-trending-down:before{content:\"\\f399\"}.ion-md-trending-up:before{content:\"\\f39a\"}.ion-md-trophy:before{content:\"\\f39b\"}.ion-md-umbrella:before{content:\"\\f39c\"}.ion-md-undo:before{content:\"\\f39d\"}.ion-md-unlock:before{content:\"\\f39e\"}.ion-md-videocam:before{content:\"\\f39f\"}.ion-md-volume-down:before{content:\"\\f3a0\"}.ion-md-volume-mute:before{content:\"\\f3a1\"}.ion-md-volume-off:before{content:\"\\f3a2\"}.ion-md-volume-up:before{content:\"\\f3a3\"}.ion-md-walk:before{content:\"\\f3a4\"}.ion-md-warning:before{content:\"\\f3a5\"}.ion-md-watch:before{content:\"\\f3a6\"}.ion-md-water:before{content:\"\\f3a7\"}.ion-md-wifi:before{content:\"\\f3a8\"}.ion-md-wine:before{content:\"\\f3a9\"}.ion-md-woman:before{content:\"\\f3aa\"}@font-face{font-family:Ionicons;src:url(../assets/fonts/ionicons.woff2?v=3.0.0-alpha.3) format(\"woff2\"),url(../assets/fonts/ionicons.woff?v=3.0.0-alpha.3) format(\"woff\"),url(../assets/fonts/ionicons.ttf?v=3.0.0-alpha.3) format(\"truetype\");font-weight:400;font-style:normal}ion-icon{display:inline-block;font-family:Ionicons;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-style:normal;font-variant:normal;font-weight:400;line-height:1;text-rendering:auto;text-transform:none;speak:none}ion-icon::before{display:inline-block}@font-face{font-family:Roboto;font-style:normal;font-weight:300;src:local(\"Roboto Light\"),local(\"Roboto-Light\"),url(../assets/fonts/roboto-light.woff2) format(\"woff2\"),url(../assets/fonts/roboto-light.woff) format(\"woff\"),url(../assets/fonts/roboto-light.ttf) format(\"truetype\")}@font-face{font-family:Roboto;font-style:normal;font-weight:400;src:local(\"Roboto\"),local(\"Roboto-Regular\"),url(../assets/fonts/roboto-regular.woff2) format(\"woff2\"),url(../assets/fonts/roboto-regular.woff) format(\"woff\"),url(../assets/fonts/roboto-regular.ttf) format(\"truetype\")}@font-face{font-family:Roboto;font-style:normal;font-weight:500;src:local(\"Roboto Medium\"),local(\"Roboto-Medium\"),url(../assets/fonts/roboto-medium.woff2) format(\"woff2\"),url(../assets/fonts/roboto-medium.woff) format(\"woff\"),url(../assets/fonts/roboto-medium.ttf) format(\"truetype\")}@font-face{font-family:Roboto;font-style:normal;font-weight:700;src:local(\"Roboto Bold\"),local(\"Roboto-Bold\"),url(../assets/fonts/roboto-bold.woff2) format(\"woff2\"),url(../assets/fonts/roboto-bold.woff) format(\"woff\"),url(../assets/fonts/roboto-bold.ttf) format(\"truetype\")}@font-face{font-family:\"Noto Sans\";font-style:normal;font-weight:300;src:local(\"Noto Sans\"),local(\"Noto-Sans-Regular\"),url(../assets/fonts/noto-sans-regular.woff) format(\"woff\"),url(../assets/fonts/noto-sans-regular.ttf) format(\"truetype\")}@font-face{font-family:\"Noto Sans\";font-style:normal;font-weight:400;src:local(\"Noto Sans\"),local(\"Noto-Sans-Regular\"),url(../assets/fonts/noto-sans-regular.woff) format(\"woff\"),url(../assets/fonts/noto-sans-regular.ttf) format(\"truetype\")}@font-face{font-family:\"Noto Sans\";font-style:normal;font-weight:500;src:local(\"Noto Sans Bold\"),local(\"Noto-Sans-Bold\"),url(../assets/fonts/noto-sans-bold.woff) format(\"woff\"),url(../assets/fonts/noto-sans-bold.ttf) format(\"truetype\")}@font-face{font-family:\"Noto Sans\";font-style:normal;font-weight:700;src:local(\"Noto Sans Bold\"),local(\"Noto-Sans-Bold\"),url(../assets/fonts/noto-sans-bold.woff) format(\"woff\"),url(../assets/fonts/noto-sans-bold.ttf) format(\"truetype\")}body,body a,body button,body media-switch,body:hover{cursor:url(https://ionicframework.com/img/finger.png) 8 8,auto}body ion-app{overflow:visible}ion-page{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}ion-scroll{width:100%;height:100%}body.has-scrollbar scroll-content{margin-right:-15px}body.has-scrollbar ion-menu scroll-content{margin-right:0}scroll-content{overflow-y:scroll}.statusbar-img{display:none}.ios .statusbar-img-ios{display:block!important;position:absolute;background-color:transparent;padding:5px 0;top:0;width:100%;height:auto;z-index:999}.ios .tabs-icon-text tabbar .tab-button:hover:not(.disable-hover),.ios .tabs-icon-text tabbar .tab-button[aria-selected=true]{color:#7e60ff}.md .statusbar-img-md{display:block!important;position:absolute;background-color:transparent;top:0;width:100%;height:auto;z-index:999}.md .tabs-icon-text ion-title div.toolbar-title{color:#fff!important}.md .tabs-icon-text tabbar{background-color:#7e60ff}.md .tabs-icon-text tabbar a{color:#fff!important}.md .tabs-icon-text tab-highlight{color:#fff;background-color:#fff}.wp .statusbar-img-wp{display:block!important;position:absolute;background-color:transparent;padding:5px 0;top:0;width:100%;height:auto;z-index:999}ion-action-sheet{left:0;top:0;position:absolute;z-index:1000;display:block;width:100%;height:100%}.action-sheet-wrapper{left:0;right:0;top:0;bottom:0;margin:auto;-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0);position:absolute;z-index:10;display:block;width:100%;max-width:500px;pointer-events:none}.action-sheet-button{width:100%}.action-sheet-container{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-flow:column;-ms-flex-flow:column;flex-flow:column;-webkit-box-pack:end;-webkit-justify-content:flex-end;-ms-flex-pack:end;justify-content:flex-end;height:100%;max-height:100%}.action-sheet-group{overflow:scroll;-webkit-flex-shrink:2;-ms-flex-negative:2;flex-shrink:2;pointer-events:all}.action-sheet-group-cancel{overflow:hidden;-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0}.action-sheet-ios{text-align:center}.action-sheet-ios .action-sheet-wrapper{margin:constant(safe-area-inset-top) auto constant(safe-area-inset-bottom);margin:env(safe-area-inset-top) auto env(safe-area-inset-bottom)}.action-sheet-ios .action-sheet-container{padding:0 10px}.action-sheet-ios .action-sheet-group{border-radius:13px;margin-bottom:8px;background:#f9f9f9}.action-sheet-ios .action-sheet-group:first-child{margin-top:10px}.action-sheet-ios .action-sheet-group:last-child{margin-bottom:10px}.action-sheet-ios .action-sheet-title{padding:1.5rem;text-align:center;border-radius:0;border-bottom:.55px solid #d6d6da;font-size:1.3rem;font-weight:400;color:#8f8f8f}.action-sheet-ios .action-sheet-button{margin:0;padding:18px;min-height:5.6rem;border-bottom:.55px solid #d6d6da;font-size:2rem;color:#007aff;background:0 0}.action-sheet-ios .action-sheet-button:last-child{border-bottom-color:transparent}.action-sheet-ios .action-sheet-button.activated{margin-top:-.55px;border-top:.55px solid #ebebeb;border-bottom-color:#ebebeb;background:#ebebeb}.action-sheet-ios .action-sheet-selected{font-weight:700;background:#fff}.action-sheet-ios .action-sheet-destructive{color:#f53d3d}.action-sheet-ios .action-sheet-cancel{font-weight:600;background:#fff}.action-sheet-md .action-sheet-title{text-align:left;text-align:start;font-size:1.6rem;color:#757575;padding:11px 16px 17px}.action-sheet-md .action-sheet-button{text-align:left;text-align:start;position:relative;overflow:hidden;min-height:4.8rem;font-size:1.6rem;color:#222;background:0 0;padding:0 16px}.action-sheet-md .action-sheet-button.activated{background:#f1f1f1}.action-sheet-md .action-sheet-icon{padding:0;text-align:center;width:2.3rem;font-size:2.4rem;vertical-align:middle;margin:0 32px 0 0}.action-sheet-md .action-sheet-group{background:#fafafa}.action-sheet-md .action-sheet-group:first-child{padding-top:.8rem}.action-sheet-md .action-sheet-group:last-child{padding-bottom:.8rem}.action-sheet-md .action-sheet-group .button-inner{-webkit-box-pack:start;-webkit-justify-content:flex-start;-ms-flex-pack:start;justify-content:flex-start}.action-sheet-md .action-sheet-selected{font-weight:700}.action-sheet-wp .action-sheet-title{text-align:left;text-align:start;font-size:2rem;color:#4d4d4d;padding:11px 16px 17px}.action-sheet-wp .action-sheet-button{text-align:left;text-align:start;min-height:4.8rem;font-size:1.5rem;color:#4d4d4d;background:0 0;padding:0 16px}.action-sheet-wp .action-sheet-button.activated{background:#aaa}.action-sheet-wp .action-sheet-icon{padding:0;text-align:center;width:2.3rem;font-size:2.4rem;vertical-align:middle;margin:0 20px 0 0}.action-sheet-wp .action-sheet-group{background:#fff}.action-sheet-wp .action-sheet-group:first-child{padding-top:.8rem;-webkit-box-shadow:0 -1px 0 rgba(0,0,0,.2);box-shadow:0 -1px 0 rgba(0,0,0,.2)}.action-sheet-wp .action-sheet-group:last-child{padding-bottom:.8rem}.action-sheet-wp .action-sheet-group .button-inner{-webkit-box-pack:start;-webkit-justify-content:flex-start;-ms-flex-pack:start;justify-content:flex-start}.action-sheet-wp .action-sheet-selected{font-weight:700}.action-sheet-wp .action-sheet-cancel{background:0 0}ion-alert{left:0;right:0;top:0;bottom:0;position:absolute;z-index:1000;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;contain:strict}ion-alert.alert-top{padding-top:50px;-webkit-box-align:start;-webkit-align-items:flex-start;-ms-flex-align:start;align-items:flex-start}ion-alert input{width:100%}.alert-wrapper{z-index:10;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;min-width:250px;max-height:90%;opacity:0;contain:content}.alert-title{margin:0;padding:0}.alert-sub-title{margin:5px 0 0;padding:0;font-weight:400}.alert-message{overflow-y:scroll;-webkit-overflow-scrolling:touch}.alert-input{padding:10px 0;border:0;background:inherit}.alert-input::-moz-placeholder{color:#999}.alert-input:-ms-input-placeholder{color:#999}.alert-input::-webkit-input-placeholder{text-indent:0;color:#999}.alert-button-group{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row}.alert-button-group-vertical{-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;-webkit-flex-wrap:nowrap;-ms-flex-wrap:nowrap;flex-wrap:nowrap}.alert-button{margin:0;z-index:0;display:block;font-size:14px;line-height:20px}.alert-tappable{text-align:left;text-align:start;-moz-appearance:none;-ms-appearance:none;-webkit-appearance:none;appearance:none;margin:0;padding:0;width:100%;font-size:inherit;line-height:initial;background:0 0}.alert-ios .alert-wrapper{border-radius:13px;overflow:hidden;max-width:270px;background-color:#f8f8f8;-webkit-box-shadow:none;box-shadow:none}.alert-ios .alert-head{text-align:center;padding:12px 16px 7px}.alert-ios .alert-title{margin-top:8px;font-size:17px;font-weight:600}.alert-ios .alert-sub-title{font-size:14px;color:#666}.alert-ios .alert-input-group,.alert-ios .alert-message{text-align:center;font-size:13px;color:inherit;padding:0 16px 21px}.alert-ios .alert-message{max-height:240px}.alert-ios .alert-message:empty{padding:0 0 12px}.alert-ios .alert-input{-moz-appearance:none;-ms-appearance:none;-webkit-appearance:none;appearance:none;margin-top:10px;border-radius:4px;border:.55px solid #ccc;background-color:#fff;padding:6px}.alert-ios .alert-checkbox-group,.alert-ios .alert-radio-group{overflow:scroll;max-height:240px;border-top:.55px solid #dbdbdf;-webkit-overflow-scrolling:touch}.alert-ios .alert-tappable{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;min-height:44px}.alert-ios .alert-radio-label{overflow:hidden;-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1;-webkit-box-ordinal-group:1;-webkit-order:0;-ms-flex-order:0;order:0;text-overflow:ellipsis;white-space:nowrap;color:initial;padding:13px}.alert-ios [aria-checked=true] .alert-radio-label{color:#488aff}.alert-ios .alert-radio-icon{position:relative;-webkit-box-ordinal-group:2;-webkit-order:1;-ms-flex-order:1;order:1;min-width:30px}.alert-ios [aria-checked=true] .alert-radio-inner{left:7px;top:-7px;position:absolute;width:6px;height:12px;border-width:2px;border-top-width:0;border-left-width:0;border-style:solid;border-color:#488aff;-webkit-transform:rotate(45deg);transform:rotate(45deg)}.alert-ios .alert-checkbox-label{overflow:hidden;-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1;text-overflow:ellipsis;white-space:nowrap;color:initial;padding:13px}.alert-ios [aria-checked=true] .alert-checkbox-label{color:initial}.alert-ios .alert-checkbox-icon{border-radius:50%;position:relative;width:21px;height:21px;border-width:.55px;border-style:solid;border-color:#c8c7cc;background-color:#fff;margin:10px 6px 10px 16px}.alert-ios [aria-checked=true] .alert-checkbox-icon{border-color:#488aff;background-color:#488aff}.alert-ios [aria-checked=true] .alert-checkbox-inner{left:7px;top:4px;position:absolute;width:4px;height:9px;border-width:.55px;border-top-width:0;border-left-width:0;border-style:solid;border-color:#fff;-webkit-transform:rotate(45deg);transform:rotate(45deg)}.alert-ios .alert-button-group{margin-right:-.55px;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap}.alert-ios .alert-button{margin:0;border-radius:0;overflow:hidden;-webkit-box-flex:1;-webkit-flex:1 1 auto;-ms-flex:1 1 auto;flex:1 1 auto;min-width:50%;height:44px;border-top:.55px solid #dbdbdf;border-right:.55px solid #dbdbdf;font-size:17px;color:#488aff;background-color:transparent}.alert-ios .alert-button:last-child{border-right:0;font-weight:700}.alert-ios .alert-button.activated{background-color:#e9e9e9}.alert-md .alert-wrapper{border-radius:2px;max-width:280px;background-color:#fafafa;-webkit-box-shadow:0 16px 20px rgba(0,0,0,.4);box-shadow:0 16px 20px rgba(0,0,0,.4)}.alert-md .alert-head{text-align:left;text-align:start;padding:24px 24px 20px}.alert-md .alert-title{font-size:22px}.alert-md .alert-sub-title{font-size:16px}.alert-md .alert-input-group,.alert-md .alert-message{color:rgba(0,0,0,.5);padding:0 24px 24px}.alert-md .alert-message{max-height:240px;font-size:15px}.alert-md .alert-message:empty{padding:0}.alert-md .alert-input{margin:5px 0;border-bottom:1px solid #dedede;color:#000}.alert-md .alert-input:focus{margin-bottom:4px;border-bottom:2px solid #488aff}.alert-md .alert-checkbox-group,.alert-md .alert-radio-group{position:relative;overflow:auto;max-height:240px;border-top:1px solid #dedede;border-bottom:1px solid #dedede}.alert-md .alert-tappable{position:relative;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;overflow:hidden;min-height:4.4rem}.alert-md .alert-radio-label{overflow:hidden;-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1;text-overflow:ellipsis;white-space:nowrap;color:initial;padding:13px 26px}.alert-md .alert-radio-icon{left:13px;top:0;border-radius:50%;position:relative;display:block;width:16px;height:16px;border-width:2px;border-style:solid;border-color:#787878}.alert-md .alert-radio-inner{left:2px;top:2px;border-radius:50%;position:absolute;width:8px;height:8px;background-color:#488aff;-webkit-transform:scale3d(0,0,0);transform:scale3d(0,0,0);-webkit-transition:-webkit-transform 280ms cubic-bezier(.4,0,.2,1);transition:-webkit-transform 280ms cubic-bezier(.4,0,.2,1);transition:transform 280ms cubic-bezier(.4,0,.2,1);transition:transform 280ms cubic-bezier(.4,0,.2,1),-webkit-transform 280ms cubic-bezier(.4,0,.2,1)}.alert-md [aria-checked=true] .alert-radio-label{color:#488aff}.alert-md [aria-checked=true] .alert-radio-icon{border-color:#488aff}.alert-md [aria-checked=true] .alert-radio-inner{-webkit-transform:scale3d(1,1,1);transform:scale3d(1,1,1)}.alert-md .alert-checkbox-label{overflow:hidden;-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1;text-overflow:ellipsis;white-space:nowrap;color:initial;padding:13px 26px}.alert-md [aria-checked=true] .alert-checkbox-label{color:initial}.alert-md .alert-checkbox-icon{left:13px;top:0;border-radius:2px;position:relative;width:16px;height:16px;border-width:2px;border-style:solid;border-color:#787878}.alert-md [aria-checked=true] .alert-checkbox-icon{border-color:#488aff;background-color:#488aff}.alert-md [aria-checked=true] .alert-checkbox-inner{left:3px;top:0;position:absolute;width:6px;height:10px;border-width:2px;border-top-width:0;border-left-width:0;border-style:solid;border-color:#fff;-webkit-transform:rotate(45deg);transform:rotate(45deg)}.alert-md .alert-button-group{-webkit-flex-wrap:wrap-reverse;-ms-flex-wrap:wrap-reverse;flex-wrap:wrap-reverse;-webkit-box-pack:end;-webkit-justify-content:flex-end;-ms-flex-pack:end;justify-content:flex-end;padding:8px 8px 8px 24px}.alert-md .alert-button{text-align:right;text-align:end;border-radius:2px;position:relative;overflow:hidden;font-weight:500;text-transform:uppercase;color:#488aff;background-color:transparent;margin:0 8px 0 0;padding:10px}.alert-md .alert-button.activated{background-color:rgba(158,158,158,.2)}.alert-md .alert-button .button-inner{-webkit-box-pack:end;-webkit-justify-content:flex-end;-ms-flex-pack:end;justify-content:flex-end}.alert-wp ion-backdrop{background:#fff}.alert-wp .alert-wrapper{border-radius:0;width:100%;max-width:520px;border:1px solid #488aff;background:#e6e6e6}.alert-wp .alert-head{text-align:left;text-align:start;padding:20px 22px 5px}.alert-wp .alert-title{font-size:20px;font-weight:400}.alert-wp .alert-sub-title{font-size:16px}.alert-wp .alert-input-group,.alert-wp .alert-message{color:#000;padding:0 22px 8px}.alert-wp .alert-message{max-height:240px;font-size:13px}.alert-wp .alert-message:empty{padding:0}.alert-wp .alert-input{border:2px solid rgba(0,0,0,.5);line-height:3rem;color:#000;margin:5px 0;padding:0 8px}.alert-wp .alert-input:focus{border-color:#488aff}.alert-wp .alert-checkbox-group,.alert-wp .alert-radio-group{position:relative;overflow:auto;max-height:240px}.alert-wp .alert-tappable{position:relative;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;overflow:hidden;min-height:4.4rem}.alert-wp .alert-radio-label{overflow:hidden;-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1;text-overflow:ellipsis;white-space:nowrap;color:initial;padding:13px 26px}.alert-wp .alert-radio-icon{left:13px;top:0;margin:0;border-radius:50%;position:relative;display:block;width:16px;height:16px;border-width:2px;border-style:solid;border-color:rgba(0,0,0,.5)}.alert-wp .alert-radio-inner{left:2px;top:2px;border-radius:50%;position:absolute;display:none;width:8px;height:8px;background:#488aff}.alert-wp [aria-checked=true] .alert-radio-label{color:#000}.alert-wp [aria-checked=true] .alert-radio-icon{border-color:rgba(0,0,0,.5)}.alert-wp [aria-checked=true] .alert-radio-inner{display:block}.alert-wp .alert-checkbox-label{overflow:hidden;-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1;text-overflow:ellipsis;white-space:nowrap;color:initial;padding:13px 26px}.alert-wp [aria-checked=true] .alert-checkbox-label{color:initial}.alert-wp .alert-checkbox-icon{left:13px;top:0;border-radius:0;position:relative;width:16px;height:16px;border-width:2px;border-style:solid;border-color:rgba(0,0,0,.5);background:0 0}.alert-wp [aria-checked=true] .alert-checkbox-icon{border-color:#488aff;background:#488aff}.alert-wp [aria-checked=true] .alert-checkbox-inner{left:3px;top:-2px;position:absolute;width:6px;height:12px;border-width:1px;border-top-width:0;border-left-width:0;border-style:solid;border-color:#fff;-webkit-transform:rotate(45deg);transform:rotate(45deg)}.alert-wp .alert-button-group{-webkit-flex-wrap:wrap-reverse;-ms-flex-wrap:wrap-reverse;flex-wrap:wrap-reverse;-webkit-box-pack:end;-webkit-justify-content:flex-end;-ms-flex-pack:end;justify-content:flex-end;padding:20px 22px}.alert-wp .alert-button-group-vertical .alert-button{margin-top:5px;width:100%}.alert-wp .alert-button-group-vertical .alert-button:first-child:not(:only-child){margin-right:0;margin-top:0}.alert-wp .alert-button{border-radius:0;width:49.5%;font-weight:400;color:#000;background:#b8b8b8;padding:5px}.alert-wp .alert-button:first-child:not(:only-child){margin-right:1%}.alert-wp .alert-button.activated{background:#a9a9a9}audio,canvas,progress,video{vertical-align:baseline}audio:not([controls]){display:none;height:0}b,strong{font-weight:700}img{max-width:100%;border:0}svg:not(:root){overflow:hidden}figure{margin:1em 40px}hr{height:1px;border-width:0;-webkit-box-sizing:content-box;box-sizing:content-box}pre{overflow:auto}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}input,label,select,textarea{font-family:inherit;line-height:normal}textarea{overflow:auto;height:auto;font:inherit;color:inherit}textarea::-webkit-input-placeholder{padding-left:2px}textarea:-ms-input-placeholder{padding-left:2px}textarea::-ms-input-placeholder{padding-left:2px}textarea::placeholder{padding-left:2px}form,input,optgroup,select{margin:0;font:inherit;color:inherit}html input[type=button],input[type=reset],input[type=submit]{cursor:pointer;-webkit-appearance:button}[tappable],[tappable] div,[tappable] ion-icon,[tappable] ion-label,[tappable] span,a,a div,a ion-icon,a ion-label,a span,button,button div,button ion-icon,button ion-label,button span,input,textarea{-ms-touch-action:manipulation;touch-action:manipulation}a ion-label,button ion-label{pointer-events:none}button{border:0;font-family:inherit;font-style:inherit;font-variant:inherit;line-height:1;text-transform:none;cursor:pointer;-webkit-appearance:button}[tappable]{cursor:pointer}a[disabled],button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{padding:0;border:0}input[type=checkbox],input[type=radio]{padding:0;-webkit-box-sizing:border-box;box-sizing:border-box}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{height:auto}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}table{border-collapse:collapse;border-spacing:0}td,th{padding:0}.hide,[hidden],template{display:none!important}.sticky{position:-webkit-sticky;position:sticky;top:0}:active,:focus{outline:0}.focus-outline :focus{outline:thin dotted;outline-offset:-1px}.focus-outline [ion-button]:focus,.focus-outline button:focus{border-color:#51a7e8;outline:2px solid #51a7e8;-webkit-box-shadow:0 0 8px 1px #51a7e8;box-shadow:0 0 8px 1px #51a7e8}ion-input :focus{outline:0}.click-block{display:none}.click-block-enabled{left:0;right:0;top:0;bottom:0;-webkit-transform:translate3d(0,-100%,0) translateY(1px);transform:translate3d(0,-100%,0) translateY(1px);position:absolute;z-index:99999;display:block;opacity:0;contain:strict}.click-block-active{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}*{-webkit-box-sizing:border-box;box-sizing:border-box;-webkit-tap-highlight-color:transparent;-webkit-tap-highlight-color:transparent;-webkit-touch-callout:none}html{width:100%;height:100%;font-size:62.5%;-webkit-text-size-adjust:100%;-moz-text-size-adjust:100%;-ms-text-size-adjust:100%;text-size-adjust:100%}body{margin:0;padding:0;position:fixed;overflow:hidden;width:100%;max-width:100%;height:100%;max-height:100%;-webkit-font-smoothing:antialiased;font-smoothing:antialiased;text-rendering:optimizeLegibility;-webkit-user-drag:none;-ms-content-zooming:none;-ms-touch-action:manipulation;touch-action:manipulation;word-wrap:break-word;-webkit-text-size-adjust:none;-moz-text-size-adjust:none;-ms-text-size-adjust:none;text-size-adjust:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}a{background-color:transparent}.enable-hover a:hover{opacity:.7}h1,h2,h3,h4,h5,h6{margin-top:1.6rem;margin-bottom:1rem;font-weight:500;line-height:1.2}[padding] h1:first-child,[padding] h2:first-child,[padding] h3:first-child,[padding] h4:first-child,[padding] h5:first-child,[padding] h6:first-child{margin-top:-.3rem}h1+h2,h1+h3,h2+h3{margin-top:-.3rem}h1{margin-top:2rem;font-size:2.6rem}h2{margin-top:1.8rem;font-size:2.4rem}h3{font-size:2.2rem}h4{font-size:2rem}h5{font-size:1.8rem}h6{font-size:1.6rem}small{font-size:75%}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}.app-root,ion-app,ion-nav,ion-tab,ion-tabs{left:0;top:0;position:absolute;z-index:0;display:block;width:100%;height:100%}ion-nav,ion-tab,ion-tabs{overflow:hidden}ion-tab{display:none}ion-tab.show-tab{display:block}.app-root,.ion-page,ion-app,ion-nav,ion-tab,ion-tabs{contain:strict}.ion-page{left:0;top:0;position:absolute;display:block;width:100%;height:100%;opacity:0}.ion-page.show-page{opacity:1}ion-header{left:0;top:0;position:absolute;z-index:10;display:block;width:100%}ion-footer{left:0;bottom:0;position:absolute;z-index:10;display:block;width:100%}.nav-decor,[app-viewport],[nav-viewport],[overlay-portal],[tab-portal]{display:none}[text-center]{text-align:center!important}[text-justify]{text-align:justify!important}[text-start]{text-align:left;text-align:start!important}[text-end]{text-align:right;text-align:end!important}[text-left]{text-align:left!important}[text-right]{text-align:right!important}[text-nowrap]{white-space:nowrap!important}[text-wrap]{white-space:normal!important}@media (min-width:576px){[text-sm-center]{text-align:center!important}[text-sm-justify]{text-align:justify!important}[text-sm-start]{text-align:left;text-align:start!important}[text-sm-end]{text-align:right;text-align:end!important}[text-sm-left]{text-align:left!important}[text-sm-right]{text-align:right!important}[text-sm-nowrap]{white-space:nowrap!important}[text-sm-wrap]{white-space:normal!important}}@media (min-width:768px){[text-md-center]{text-align:center!important}[text-md-justify]{text-align:justify!important}[text-md-start]{text-align:left;text-align:start!important}[text-md-end]{text-align:right;text-align:end!important}[text-md-left]{text-align:left!important}[text-md-right]{text-align:right!important}[text-md-nowrap]{white-space:nowrap!important}[text-md-wrap]{white-space:normal!important}}@media (min-width:992px){[text-lg-center]{text-align:center!important}[text-lg-justify]{text-align:justify!important}[text-lg-start]{text-align:left;text-align:start!important}[text-lg-end]{text-align:right;text-align:end!important}[text-lg-left]{text-align:left!important}[text-lg-right]{text-align:right!important}[text-lg-nowrap]{white-space:nowrap!important}[text-lg-wrap]{white-space:normal!important}}@media (min-width:1200px){[text-xl-center]{text-align:center!important}[text-xl-justify]{text-align:justify!important}[text-xl-start]{text-align:left;text-align:start!important}[text-xl-end]{text-align:right;text-align:end!important}[text-xl-left]{text-align:left!important}[text-xl-right]{text-align:right!important}[text-xl-nowrap]{white-space:nowrap!important}[text-xl-wrap]{white-space:normal!important}}[text-uppercase]{text-transform:uppercase!important}[text-lowercase]{text-transform:lowercase!important}[text-capitalize]{text-transform:capitalize!important}@media (min-width:576px){[text-sm-uppercase]{text-transform:uppercase!important}[text-sm-lowercase]{text-transform:lowercase!important}[text-sm-capitalize]{text-transform:capitalize!important}}@media (min-width:768px){[text-md-uppercase]{text-transform:uppercase!important}[text-md-lowercase]{text-transform:lowercase!important}[text-md-capitalize]{text-transform:capitalize!important}}@media (min-width:992px){[text-lg-uppercase]{text-transform:uppercase!important}[text-lg-lowercase]{text-transform:lowercase!important}[text-lg-capitalize]{text-transform:capitalize!important}}@media (min-width:1200px){[text-xl-uppercase]{text-transform:uppercase!important}[text-xl-lowercase]{text-transform:lowercase!important}[text-xl-capitalize]{text-transform:capitalize!important}}[float-left]{float:left!important}[float-right]{float:right!important}[float-start]{float:left!important}[float-end]{float:right!important}@media (min-width:576px){[float-sm-left]{float:left!important}[float-sm-right]{float:right!important}[float-sm-start]{float:left!important}[float-sm-end]{float:right!important}}@media (min-width:768px){[float-md-left]{float:left!important}[float-md-right]{float:right!important}[float-md-start]{float:left!important}[float-md-end]{float:right!important}}@media (min-width:992px){[float-lg-left]{float:left!important}[float-lg-right]{float:right!important}[float-lg-start]{float:left!important}[float-lg-end]{float:right!important}}@media (min-width:1200px){[float-xl-left]{float:left!important}[float-xl-right]{float:right!important}[float-xl-start]{float:left!important}[float-xl-end]{float:right!important}}ion-app.ios{font-family:-apple-system,\"Helvetica Neue\",Roboto,sans-serif;font-size:1.4rem;background-color:#fff}ion-app.md{font-family:Roboto,\"Helvetica Neue\",sans-serif;font-size:1.4rem;background-color:#fff}ion-app.wp{font-family:\"Segoe UI\",\"Noto Sans\",sans-serif;font-size:1.4rem;background-color:#fff}ion-backdrop{left:0;top:0;position:absolute;z-index:2;display:block;width:100%;height:100%;background-color:#000;opacity:.01;-webkit-transform:translateZ(0);transform:translateZ(0)}ion-backdrop.backdrop-no-tappable{cursor:auto}ion-badge{padding:3px 8px;text-align:center;display:inline-block;min-width:10px;font-size:1.3rem;font-weight:700;line-height:1;white-space:nowrap;vertical-align:baseline}ion-badge:empty{display:none}.badge-ios{border-radius:10px;color:#fff;background-color:#488aff}.badge-ios-primary{color:#fff;background-color:#488aff}.badge-ios-secondary{color:#fff;background-color:#32db64}.badge-ios-danger{color:#fff;background-color:#f53d3d}.badge-ios-light{color:#000;background-color:#f4f4f4}.badge-ios-dark{color:#fff;background-color:#222}.badge-ios-energized{color:#000;background-color:#ffc527}.badge-ios-royal{color:#fff;background-color:#7e60ff}.badge-ios-subtle{color:#fff;background-color:#444}.badge-ios-vibrant{color:#fff;background-color:#663399}.badge-ios-bright{color:#000;background-color:#ffc125}.badge-md{border-radius:4px;color:#fff;background-color:#488aff}.badge-md-primary{color:#fff;background-color:#488aff}.badge-md-secondary{color:#fff;background-color:#32db64}.badge-md-danger{color:#fff;background-color:#f53d3d}.badge-md-light{color:#000;background-color:#f4f4f4}.badge-md-dark{color:#fff;background-color:#222}.badge-md-energized{color:#000;background-color:#ffc527}.badge-md-royal{color:#fff;background-color:#7e60ff}.badge-md-subtle{color:#fff;background-color:#444}.badge-md-vibrant{color:#fff;background-color:#663399}.badge-md-bright{color:#000;background-color:#ffc125}.badge-wp{border-radius:0;color:#fff;background-color:#488aff}.badge-wp-primary{color:#fff;background-color:#488aff}.badge-wp-secondary{color:#fff;background-color:#32db64}.badge-wp-danger{color:#fff;background-color:#f53d3d}.badge-wp-light{color:#000;background-color:#f4f4f4}.badge-wp-dark{color:#fff;background-color:#222}.badge-wp-energized{color:#000;background-color:#ffc527}.badge-wp-royal{color:#fff;background-color:#7e60ff}.badge-wp-subtle{color:#fff;background-color:#444}.badge-wp-vibrant{color:#fff;background-color:#663399}.badge-wp-bright{color:#000;background-color:#ffc125}.button{text-align:center;-moz-appearance:none;-ms-appearance:none;-webkit-appearance:none;appearance:none;position:relative;z-index:0;display:inline-block;text-overflow:ellipsis;text-transform:none;white-space:nowrap;cursor:pointer;vertical-align:top;vertical-align:-webkit-baseline-middle;-webkit-transition:background-color,opacity .1s linear;transition:background-color,opacity .1s linear;-webkit-font-kerning:none;font-kerning:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;contain:content}.button-inner{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-webkit-flex-flow:row nowrap;-ms-flex-flow:row nowrap;flex-flow:row nowrap;-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;width:100%;height:100%}[ion-button]{text-decoration:none}[ion-button][disabled],a[disabled],button[disabled]{cursor:default;opacity:.4;pointer-events:none}.button-block{display:block;clear:both;width:100%;contain:strict}.button-block::after{clear:both}.button-full{display:block;width:100%;contain:strict}.button-full.button-outline{border-radius:0;border-right-width:0;border-left-width:0}[icon-left] ion-icon,[icon-start] ion-icon{font-size:1.4em;line-height:.67;pointer-events:none;padding-right:.3em}[icon-end] ion-icon,[icon-right] ion-icon{font-size:1.4em;line-height:.67;pointer-events:none;padding-left:.4em}.button[icon-only]{padding:0;min-width:.9em}[icon-only] ion-icon{padding:0 .5em;font-size:1.8em;line-height:.67;pointer-events:none}.button-ios{border-radius:4px;height:2.8em;font-size:1.6rem;color:#fff;background-color:#488aff;margin:.4rem .2rem;padding:0 1em}.button-ios.activated{background-color:#427feb;opacity:1}.button-ios:hover:not(.disable-hover){opacity:.8}.button-large-ios{height:2.8em;font-size:2rem;padding:0 1em}.button-small-ios{height:2.1em;font-size:1.3rem;padding:0 .9em}.button-small-ios[icon-only] ion-icon{font-size:1.3em}.button-block-ios{margin-left:0;margin-right:0}.button-full-ios{margin-left:0;margin-right:0;border-radius:0;border-right-width:0;border-left-width:0}.button-outline-ios{border-radius:4px;border-width:1px;border-style:solid;border-color:#488aff;color:#488aff;background-color:transparent}.button-outline-ios.activated{color:#fff;background-color:#488aff;opacity:1}.button-clear-ios{border-color:transparent;color:#488aff;background-color:transparent}.button-clear-ios.activated{background-color:transparent;opacity:.4}.button-clear-ios:hover:not(.disable-hover){color:#488aff;opacity:.6}.button-round-ios{border-radius:64px;padding:0 2.6rem}.button-ios-primary{color:#fff;background-color:#488aff}.button-ios-primary.activated{background-color:#427feb}.button-outline-ios-primary{border-color:#488aff;color:#488aff;background-color:transparent}.button-outline-ios-primary.activated{color:#fff;background-color:#488aff}.button-clear-ios-primary{border-color:transparent;color:#488aff;background-color:transparent}.button-clear-ios-primary.activated{opacity:.4}.button-clear-ios-primary:hover:not(.disable-hover){color:#488aff}.button-ios-secondary{color:#fff;background-color:#32db64}.button-ios-secondary.activated{background-color:#2ec95c}.button-outline-ios-secondary{border-color:#32db64;color:#32db64;background-color:transparent}.button-outline-ios-secondary.activated{color:#fff;background-color:#32db64}.button-clear-ios-secondary{border-color:transparent;color:#32db64;background-color:transparent}.button-clear-ios-secondary.activated{opacity:.4}.button-clear-ios-secondary:hover:not(.disable-hover){color:#32db64}.button-ios-danger{color:#fff;background-color:#f53d3d}.button-ios-danger.activated{background-color:#e13838}.button-outline-ios-danger{border-color:#f53d3d;color:#f53d3d;background-color:transparent}.button-outline-ios-danger.activated{color:#fff;background-color:#f53d3d}.button-clear-ios-danger{border-color:transparent;color:#f53d3d;background-color:transparent}.button-clear-ios-danger.activated{opacity:.4}.button-clear-ios-danger:hover:not(.disable-hover){color:#f53d3d}.button-ios-light{color:#000;background-color:#f4f4f4}.button-ios-light.activated{background-color:#e0e0e0}.button-outline-ios-light{border-color:#f4f4f4;color:#f4f4f4;background-color:transparent}.button-outline-ios-light.activated{color:#000;background-color:#f4f4f4}.button-clear-ios-light{border-color:transparent;color:#f4f4f4;background-color:transparent}.button-clear-ios-light.activated{opacity:.4}.button-clear-ios-light:hover:not(.disable-hover){color:#f4f4f4}.button-ios-dark{color:#fff;background-color:#222}.button-ios-dark.activated{background-color:#343434}.button-outline-ios-dark{border-color:#222;color:#222;background-color:transparent}.button-outline-ios-dark.activated{color:#fff;background-color:#222}.button-clear-ios-dark{border-color:transparent;color:#222;background-color:transparent}.button-clear-ios-dark.activated{opacity:.4}.button-clear-ios-dark:hover:not(.disable-hover){color:#222}.button-ios-energized{color:#000;background-color:#ffc527}.button-ios-energized.activated{background-color:#ebb524}.button-outline-ios-energized{border-color:#ffc527;color:#ffc527;background-color:transparent}.button-outline-ios-energized.activated{color:#000;background-color:#ffc527}.button-clear-ios-energized{border-color:transparent;color:#ffc527;background-color:transparent}.button-clear-ios-energized.activated{opacity:.4}.button-clear-ios-energized:hover:not(.disable-hover){color:#ffc527}.button-ios-royal{color:#fff;background-color:#7e60ff}.button-ios-royal.activated{background-color:#7458eb}.button-outline-ios-royal{border-color:#7e60ff;color:#7e60ff;background-color:transparent}.button-outline-ios-royal.activated{color:#fff;background-color:#7e60ff}.button-clear-ios-royal{border-color:transparent;color:#7e60ff;background-color:transparent}.button-clear-ios-royal.activated{opacity:.4}.button-clear-ios-royal:hover:not(.disable-hover){color:#7e60ff}.button-ios-subtle{color:#fff;background-color:#444}.button-ios-subtle.activated{background-color:#535353}.button-outline-ios-subtle{border-color:#444;color:#444;background-color:transparent}.button-outline-ios-subtle.activated{color:#fff;background-color:#444}.button-clear-ios-subtle{border-color:transparent;color:#444;background-color:transparent}.button-clear-ios-subtle.activated{opacity:.4}.button-clear-ios-subtle:hover:not(.disable-hover){color:#444}.button-ios-vibrant{color:#fff;background-color:#663399}.button-ios-vibrant.activated{background-color:#7243a1}.button-outline-ios-vibrant{border-color:#663399;color:#663399;background-color:transparent}.button-outline-ios-vibrant.activated{color:#fff;background-color:#663399}.button-clear-ios-vibrant{border-color:transparent;color:#663399;background-color:transparent}.button-clear-ios-vibrant.activated{opacity:.4}.button-clear-ios-vibrant:hover:not(.disable-hover){color:#663399}.button-ios-bright{color:#000;background-color:#ffc125}.button-ios-bright.activated{background-color:#ebb222}.button-outline-ios-bright{border-color:#ffc125;color:#ffc125;background-color:transparent}.button-outline-ios-bright.activated{color:#000;background-color:#ffc125}.button-clear-ios-bright{border-color:transparent;color:#ffc125;background-color:transparent}.button-clear-ios-bright.activated{opacity:.4}.button-clear-ios-bright:hover:not(.disable-hover){color:#ffc125}.button-strong-ios{font-weight:600}.button-md{border-radius:2px;overflow:hidden;height:3.6rem;font-size:1.4rem;font-weight:500;text-transform:uppercase;color:#fff;background-color:#488aff;-webkit-box-shadow:0 2px 2px 0 rgba(0,0,0,.14),0 3px 1px -2px rgba(0,0,0,.2),0 1px 5px 0 rgba(0,0,0,.12);box-shadow:0 2px 2px 0 rgba(0,0,0,.14),0 3px 1px -2px rgba(0,0,0,.2),0 1px 5px 0 rgba(0,0,0,.12);-webkit-transition:background-color .3s cubic-bezier(.4,0,.2,1),color .3s cubic-bezier(.4,0,.2,1),-webkit-box-shadow .3s cubic-bezier(.4,0,.2,1);transition:background-color .3s cubic-bezier(.4,0,.2,1),color .3s cubic-bezier(.4,0,.2,1),-webkit-box-shadow .3s cubic-bezier(.4,0,.2,1);transition:box-shadow .3s cubic-bezier(.4,0,.2,1),background-color .3s cubic-bezier(.4,0,.2,1),color .3s cubic-bezier(.4,0,.2,1);transition:box-shadow .3s cubic-bezier(.4,0,.2,1),background-color .3s cubic-bezier(.4,0,.2,1),color .3s cubic-bezier(.4,0,.2,1),-webkit-box-shadow .3s cubic-bezier(.4,0,.2,1);margin:.4rem .2rem;padding:0 1.1em}.button-md:hover:not(.disable-hover){background-color:#488aff}.button-md.activated{background-color:#427feb;-webkit-box-shadow:0 3px 5px rgba(0,0,0,.14),0 3px 5px rgba(0,0,0,.21),0 0 0 0 transparent;box-shadow:0 3px 5px rgba(0,0,0,.14),0 3px 5px rgba(0,0,0,.21),0 0 0 0 transparent}.button-md .button-effect{background-color:#fff}.button-large-md{height:2.8em;font-size:2rem;padding:0 1em}.button-small-md{height:2.1em;font-size:1.3rem;padding:0 .9em}.button-small-md[icon-only] ion-icon{font-size:1.4em}.button-block-md{margin-left:0;margin-right:0}.button-full-md{margin-left:0;margin-right:0;border-radius:0;border-right-width:0;border-left-width:0}.button-outline-md{border-width:1px;border-style:solid;border-color:#488aff;color:#488aff;background-color:transparent;-webkit-box-shadow:none;box-shadow:none}.button-outline-md:hover:not(.disable-hover){background-color:rgba(158,158,158,.1)}.button-outline-md.activated{background-color:transparent;-webkit-box-shadow:none;box-shadow:none;opacity:1}.button-outline-md .button-effect{background-color:#488aff}.button-clear-md{border-color:transparent;color:#488aff;background-color:transparent;-webkit-box-shadow:none;box-shadow:none;opacity:1}.button-clear-md.activated{background-color:rgba(158,158,158,.2);-webkit-box-shadow:none;box-shadow:none}.button-clear-md:hover:not(.disable-hover){background-color:rgba(158,158,158,.1)}.button-clear-md .button-effect{background-color:#999}.button-round-md{border-radius:64px;padding:0 2.6rem}.button-md [icon-only]{padding:0}.button-effect{border-radius:50%;-webkit-transform-origin:center center;transform-origin:center center;position:absolute;z-index:0;display:none;background-color:#555;opacity:.2;-webkit-transition-timing-function:ease-in-out;transition-timing-function:ease-in-out;pointer-events:none;top:0;left:0}.md button .button-effect{display:block}.button-md-primary{color:#fff;background-color:#488aff}.button-md-primary:hover:not(.disable-hover){background-color:#488aff}.button-md-primary.activated{background-color:#427feb;opacity:1}.button-md-primary .button-effect{background-color:#fff}.button-outline-md-primary{border-color:#4483f2;color:#4483f2;background-color:transparent}.button-outline-md-primary:hover:not(.disable-hover){background-color:rgba(158,158,158,.1)}.button-outline-md-primary.activated{background-color:transparent}.button-outline-md-primary .button-effect{background-color:#4483f2}.button-clear-md-primary{border-color:transparent;color:#488aff;background-color:transparent}.button-clear-md-primary.activated{background-color:rgba(158,158,158,.2);-webkit-box-shadow:none;box-shadow:none}.button-clear-md-primary:hover:not(.disable-hover){color:#488aff}.button-md-secondary{color:#fff;background-color:#32db64}.button-md-secondary:hover:not(.disable-hover){background-color:#32db64}.button-md-secondary.activated{background-color:#2ec95c;opacity:1}.button-md-secondary .button-effect{background-color:#fff}.button-outline-md-secondary{border-color:#30d05f;color:#30d05f;background-color:transparent}.button-outline-md-secondary:hover:not(.disable-hover){background-color:rgba(158,158,158,.1)}.button-outline-md-secondary.activated{background-color:transparent}.button-outline-md-secondary .button-effect{background-color:#30d05f}.button-clear-md-secondary{border-color:transparent;color:#32db64;background-color:transparent}.button-clear-md-secondary.activated{background-color:rgba(158,158,158,.2);-webkit-box-shadow:none;box-shadow:none}.button-clear-md-secondary:hover:not(.disable-hover){color:#32db64}.button-md-danger{color:#fff;background-color:#f53d3d}.button-md-danger:hover:not(.disable-hover){background-color:#f53d3d}.button-md-danger.activated{background-color:#e13838;opacity:1}.button-md-danger .button-effect{background-color:#fff}.button-outline-md-danger{border-color:#e93a3a;color:#e93a3a;background-color:transparent}.button-outline-md-danger:hover:not(.disable-hover){background-color:rgba(158,158,158,.1)}.button-outline-md-danger.activated{background-color:transparent}.button-outline-md-danger .button-effect{background-color:#e93a3a}.button-clear-md-danger{border-color:transparent;color:#f53d3d;background-color:transparent}.button-clear-md-danger.activated{background-color:rgba(158,158,158,.2);-webkit-box-shadow:none;box-shadow:none}.button-clear-md-danger:hover:not(.disable-hover){color:#f53d3d}.button-md-light{color:#000;background-color:#f4f4f4}.button-md-light:hover:not(.disable-hover){background-color:#f4f4f4}.button-md-light.activated{background-color:#e0e0e0;opacity:1}.button-md-light .button-effect{background-color:#000}.button-outline-md-light{border-color:#e8e8e8;color:#e8e8e8;background-color:transparent}.button-outline-md-light:hover:not(.disable-hover){background-color:rgba(158,158,158,.1)}.button-outline-md-light.activated{background-color:transparent}.button-outline-md-light .button-effect{background-color:#e8e8e8}.button-clear-md-light{border-color:transparent;color:#f4f4f4;background-color:transparent}.button-clear-md-light.activated{background-color:rgba(158,158,158,.2);-webkit-box-shadow:none;box-shadow:none}.button-clear-md-light:hover:not(.disable-hover){color:#f4f4f4}.button-md-dark{color:#fff;background-color:#222}.button-md-dark:hover:not(.disable-hover){background-color:#222}.button-md-dark.activated{background-color:#343434;opacity:1}.button-md-dark .button-effect{background-color:#fff}.button-outline-md-dark{border-color:#2d2d2d;color:#2d2d2d;background-color:transparent}.button-outline-md-dark:hover:not(.disable-hover){background-color:rgba(158,158,158,.1)}.button-outline-md-dark.activated{background-color:transparent}.button-outline-md-dark .button-effect{background-color:#2d2d2d}.button-clear-md-dark{border-color:transparent;color:#222;background-color:transparent}.button-clear-md-dark.activated{background-color:rgba(158,158,158,.2);-webkit-box-shadow:none;box-shadow:none}.button-clear-md-dark:hover:not(.disable-hover){color:#222}.button-md-energized{color:#000;background-color:#ffc527}.button-md-energized:hover:not(.disable-hover){background-color:#ffc527}.button-md-energized.activated{background-color:#ebb524;opacity:1}.button-md-energized .button-effect{background-color:#000}.button-outline-md-energized{border-color:#f2bb25;color:#f2bb25;background-color:transparent}.button-outline-md-energized:hover:not(.disable-hover){background-color:rgba(158,158,158,.1)}.button-outline-md-energized.activated{background-color:transparent}.button-outline-md-energized .button-effect{background-color:#f2bb25}.button-clear-md-energized{border-color:transparent;color:#ffc527;background-color:transparent}.button-clear-md-energized.activated{background-color:rgba(158,158,158,.2);-webkit-box-shadow:none;box-shadow:none}.button-clear-md-energized:hover:not(.disable-hover){color:#ffc527}.button-md-royal{color:#fff;background-color:#7e60ff}.button-md-royal:hover:not(.disable-hover){background-color:#7e60ff}.button-md-royal.activated{background-color:#7458eb;opacity:1}.button-md-royal .button-effect{background-color:#fff}.button-outline-md-royal{border-color:#785bf2;color:#785bf2;background-color:transparent}.button-outline-md-royal:hover:not(.disable-hover){background-color:rgba(158,158,158,.1)}.button-outline-md-royal.activated{background-color:transparent}.button-outline-md-royal .button-effect{background-color:#785bf2}.button-clear-md-royal{border-color:transparent;color:#7e60ff;background-color:transparent}.button-clear-md-royal.activated{background-color:rgba(158,158,158,.2);-webkit-box-shadow:none;box-shadow:none}.button-clear-md-royal:hover:not(.disable-hover){color:#7e60ff}.button-md-subtle{color:#fff;background-color:#444}.button-md-subtle:hover:not(.disable-hover){background-color:#444}.button-md-subtle.activated{background-color:#535353;opacity:1}.button-md-subtle .button-effect{background-color:#fff}.button-outline-md-subtle{border-color:#4d4d4d;color:#4d4d4d;background-color:transparent}.button-outline-md-subtle:hover:not(.disable-hover){background-color:rgba(158,158,158,.1)}.button-outline-md-subtle.activated{background-color:transparent}.button-outline-md-subtle .button-effect{background-color:#4d4d4d}.button-clear-md-subtle{border-color:transparent;color:#444;background-color:transparent}.button-clear-md-subtle.activated{background-color:rgba(158,158,158,.2);-webkit-box-shadow:none;box-shadow:none}.button-clear-md-subtle:hover:not(.disable-hover){color:#444}.button-md-vibrant{color:#fff;background-color:#663399}.button-md-vibrant:hover:not(.disable-hover){background-color:#663399}.button-md-vibrant.activated{background-color:#7243a1;opacity:1}.button-md-vibrant .button-effect{background-color:#fff}.button-outline-md-vibrant{border-color:#6e3d9e;color:#6e3d9e;background-color:transparent}.button-outline-md-vibrant:hover:not(.disable-hover){background-color:rgba(158,158,158,.1)}.button-outline-md-vibrant.activated{background-color:transparent}.button-outline-md-vibrant .button-effect{background-color:#6e3d9e}.button-clear-md-vibrant{border-color:transparent;color:#663399;background-color:transparent}.button-clear-md-vibrant.activated{background-color:rgba(158,158,158,.2);-webkit-box-shadow:none;box-shadow:none}.button-clear-md-vibrant:hover:not(.disable-hover){color:#663399}.button-md-bright{color:#000;background-color:#ffc125}.button-md-bright:hover:not(.disable-hover){background-color:#ffc125}.button-md-bright.activated{background-color:#ebb222;opacity:1}.button-md-bright .button-effect{background-color:#000}.button-outline-md-bright{border-color:#f2b723;color:#f2b723;background-color:transparent}.button-outline-md-bright:hover:not(.disable-hover){background-color:rgba(158,158,158,.1)}.button-outline-md-bright.activated{background-color:transparent}.button-outline-md-bright .button-effect{background-color:#f2b723}.button-clear-md-bright{border-color:transparent;color:#ffc125;background-color:transparent}.button-clear-md-bright.activated{background-color:rgba(158,158,158,.2);-webkit-box-shadow:none;box-shadow:none}.button-clear-md-bright:hover:not(.disable-hover){color:#ffc125}.button-strong-md{font-weight:700}.button-wp{border-radius:0;height:3.6rem;border:3px solid transparent;font-size:1.4rem;color:#fff;background-color:#488aff;margin:.4rem .2rem;padding:0 1.1em}.button-wp:hover:not(.disable-hover){border-color:#427feb;background-color:#488aff}.button-wp.activated{background-color:#427feb}.button-large-wp{height:2.8em;font-size:2rem;padding:0 1em}.button-small-wp{height:2.1em;font-size:1.3rem;padding:0 .9em}.button-small-wp[icon-only] ion-icon{font-size:1.4em}.button-block-wp{margin-left:0;margin-right:0}.button-full-wp{margin-left:0;margin-right:0;border-radius:0;border-right-width:0;border-left-width:0}.button-outline-wp{border-width:1px;border-style:solid;border-color:#488aff;color:#488aff;background-color:transparent}.button-outline-wp:hover:not(.disable-hover){background-color:rgba(158,158,158,.1)}.button-outline-wp.activated{background-color:rgba(72,138,255,.16)}.button-clear-wp{color:#488aff;background-color:transparent}.button-clear-wp.activated{background-color:rgba(158,158,158,.2)}.button-clear-wp:hover:not(.disable-hover){background-color:rgba(158,158,158,.1)}.button-round-wp{border-radius:64px;padding:0 2.6rem}.button-wp [icon-only]{padding:0}.button-wp-primary{color:#fff;background-color:#488aff}.button-wp-primary:hover:not(.disable-hover){border-color:#427feb;background-color:#488aff}.button-wp-primary.activated{background-color:#427feb}.button-outline-wp-primary{border-color:#4483f2;color:#4483f2;background-color:transparent}.button-outline-wp-primary:hover:not(.disable-hover){border-color:#4483f2;background-color:rgba(158,158,158,.1)}.button-outline-wp-primary.activated{background-color:rgba(68,131,242,.16)}.button-clear-wp-primary{color:#488aff;background-color:transparent}.button-clear-wp-primary.activated{background-color:rgba(158,158,158,.2)}.button-clear-wp-primary:hover:not(.disable-hover){color:#488aff}.button-wp-secondary{color:#fff;background-color:#32db64}.button-wp-secondary:hover:not(.disable-hover){border-color:#2ec95c;background-color:#32db64}.button-wp-secondary.activated{background-color:#2ec95c}.button-outline-wp-secondary{border-color:#30d05f;color:#30d05f;background-color:transparent}.button-outline-wp-secondary:hover:not(.disable-hover){border-color:#30d05f;background-color:rgba(158,158,158,.1)}.button-outline-wp-secondary.activated{background-color:rgba(48,208,95,.16)}.button-clear-wp-secondary{color:#32db64;background-color:transparent}.button-clear-wp-secondary.activated{background-color:rgba(158,158,158,.2)}.button-clear-wp-secondary:hover:not(.disable-hover){color:#32db64}.button-wp-danger{color:#fff;background-color:#f53d3d}.button-wp-danger:hover:not(.disable-hover){border-color:#e13838;background-color:#f53d3d}.button-wp-danger.activated{background-color:#e13838}.button-outline-wp-danger{border-color:#e93a3a;color:#e93a3a;background-color:transparent}.button-outline-wp-danger:hover:not(.disable-hover){border-color:#e93a3a;background-color:rgba(158,158,158,.1)}.button-outline-wp-danger.activated{background-color:rgba(233,58,58,.16)}.button-clear-wp-danger{color:#f53d3d;background-color:transparent}.button-clear-wp-danger.activated{background-color:rgba(158,158,158,.2)}.button-clear-wp-danger:hover:not(.disable-hover){color:#f53d3d}.button-wp-light{color:#000;background-color:#f4f4f4}.button-wp-light:hover:not(.disable-hover){border-color:#e0e0e0;background-color:#f4f4f4}.button-wp-light.activated{background-color:#e0e0e0}.button-outline-wp-light{border-color:#e8e8e8;color:#e8e8e8;background-color:transparent}.button-outline-wp-light:hover:not(.disable-hover){border-color:#e8e8e8;background-color:rgba(158,158,158,.1)}.button-outline-wp-light.activated{background-color:rgba(232,232,232,.16)}.button-clear-wp-light{color:#f4f4f4;background-color:transparent}.button-clear-wp-light.activated{background-color:rgba(158,158,158,.2)}.button-clear-wp-light:hover:not(.disable-hover){color:#f4f4f4}.button-wp-dark{color:#fff;background-color:#222}.button-wp-dark:hover:not(.disable-hover){border-color:#343434;background-color:#222}.button-wp-dark.activated{background-color:#343434}.button-outline-wp-dark{border-color:#2d2d2d;color:#2d2d2d;background-color:transparent}.button-outline-wp-dark:hover:not(.disable-hover){border-color:#2d2d2d;background-color:rgba(158,158,158,.1)}.button-outline-wp-dark.activated{background-color:rgba(45,45,45,.16)}.button-clear-wp-dark{color:#222;background-color:transparent}.button-clear-wp-dark.activated{background-color:rgba(158,158,158,.2)}.button-clear-wp-dark:hover:not(.disable-hover){color:#222}.button-wp-energized{color:#000;background-color:#ffc527}.button-wp-energized:hover:not(.disable-hover){border-color:#ebb524;background-color:#ffc527}.button-wp-energized.activated{background-color:#ebb524}.button-outline-wp-energized{border-color:#f2bb25;color:#f2bb25;background-color:transparent}.button-outline-wp-energized:hover:not(.disable-hover){border-color:#f2bb25;background-color:rgba(158,158,158,.1)}.button-outline-wp-energized.activated{background-color:rgba(242,187,37,.16)}.button-clear-wp-energized{color:#ffc527;background-color:transparent}.button-clear-wp-energized.activated{background-color:rgba(158,158,158,.2)}.button-clear-wp-energized:hover:not(.disable-hover){color:#ffc527}.button-wp-royal{color:#fff;background-color:#7e60ff}.button-wp-royal:hover:not(.disable-hover){border-color:#7458eb;background-color:#7e60ff}.button-wp-royal.activated{background-color:#7458eb}.button-outline-wp-royal{border-color:#785bf2;color:#785bf2;background-color:transparent}.button-outline-wp-royal:hover:not(.disable-hover){border-color:#785bf2;background-color:rgba(158,158,158,.1)}.button-outline-wp-royal.activated{background-color:rgba(120,91,242,.16)}.button-clear-wp-royal{color:#7e60ff;background-color:transparent}.button-clear-wp-royal.activated{background-color:rgba(158,158,158,.2)}.button-clear-wp-royal:hover:not(.disable-hover){color:#7e60ff}.button-wp-subtle{color:#fff;background-color:#444}.button-wp-subtle:hover:not(.disable-hover){border-color:#535353;background-color:#444}.button-wp-subtle.activated{background-color:#535353}.button-outline-wp-subtle{border-color:#4d4d4d;color:#4d4d4d;background-color:transparent}.button-outline-wp-subtle:hover:not(.disable-hover){border-color:#4d4d4d;background-color:rgba(158,158,158,.1)}.button-outline-wp-subtle.activated{background-color:rgba(77,77,77,.16)}.button-clear-wp-subtle{color:#444;background-color:transparent}.button-clear-wp-subtle.activated{background-color:rgba(158,158,158,.2)}.button-clear-wp-subtle:hover:not(.disable-hover){color:#444}.button-wp-vibrant{color:#fff;background-color:#663399}.button-wp-vibrant:hover:not(.disable-hover){border-color:#7243a1;background-color:#663399}.button-wp-vibrant.activated{background-color:#7243a1}.button-outline-wp-vibrant{border-color:#6e3d9e;color:#6e3d9e;background-color:transparent}.button-outline-wp-vibrant:hover:not(.disable-hover){border-color:#6e3d9e;background-color:rgba(158,158,158,.1)}.button-outline-wp-vibrant.activated{background-color:rgba(110,61,158,.16)}.button-clear-wp-vibrant{color:#663399;background-color:transparent}.button-clear-wp-vibrant.activated{background-color:rgba(158,158,158,.2)}.button-clear-wp-vibrant:hover:not(.disable-hover){color:#663399}.button-wp-bright{color:#000;background-color:#ffc125}.button-wp-bright:hover:not(.disable-hover){border-color:#ebb222;background-color:#ffc125}.button-wp-bright.activated{background-color:#ebb222}.button-outline-wp-bright{border-color:#f2b723;color:#f2b723;background-color:transparent}.button-outline-wp-bright:hover:not(.disable-hover){border-color:#f2b723;background-color:rgba(158,158,158,.1)}.button-outline-wp-bright.activated{background-color:rgba(242,183,35,.16)}.button-clear-wp-bright{color:#ffc125;background-color:transparent}.button-clear-wp-bright.activated{background-color:rgba(158,158,158,.2)}.button-clear-wp-bright:hover:not(.disable-hover){color:#ffc125}.button-strong-wp{font-weight:700}ion-card{display:block;overflow:hidden}ion-card img{display:block;width:100%}ion-card-header{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}ion-card-content{display:block}.card-ios{margin:12px;border-radius:2px;width:calc(100% - 24px);font-size:1.4rem;background:#fff;-webkit-box-shadow:0 1px 2px rgba(0,0,0,.3);box-shadow:0 1px 2px rgba(0,0,0,.3)}.card-ios ion-list{margin-bottom:0}.card-ios>.item-wrapper:last-child .item,.card-ios>.item:last-child,.card-ios>.item:last-child .item-inner{border-bottom:0}.card-ios .item-ios.item-block .item-inner{border:0}.card-content-ios{padding:13px 16px 14px;font-size:1.4rem;line-height:1.4}.card-header-ios{font-size:1.6rem;font-weight:500;color:#333;padding:16px}.card-header-ios+.card-content-ios,.card-ios .item+.card-content-ios{padding-top:0}.card .note-ios{font-size:1.3rem}.card-title-ios{display:block;font-size:1.8rem;line-height:1.2;color:#222;margin:2px 0;padding:8px 0}.card-ios h1{margin:0 0 2px;font-size:2.4rem;font-weight:400}.card-ios h2{margin:2px 0;font-size:1.6rem;font-weight:400}.card-ios h3,.card-ios h4,.card-ios h5,.card-ios h6{margin:2px 0;font-size:1.4rem;font-weight:400}.card-ios p{margin:0 0 2px;font-size:1.4rem;color:#666}.card-ios+ion-card{margin-top:0}.card-ios .text-ios-primary{color:#488aff}.card-ios-primary{color:#fff;background-color:#488aff}.card-ios-primary .card-content-ios,.card-ios-primary .card-header-ios,.card-ios-primary .card-title-ios,.card-ios-primary p{color:#fff}.card-ios-primary .card-content-ios-primary,.card-ios-primary .card-header-ios-primary,.card-ios-primary .card-title-ios-primary,.card-ios-primary .text-ios-primary{color:#488aff}.card-ios-primary .card-content-ios-secondary,.card-ios-primary .card-header-ios-secondary,.card-ios-primary .card-title-ios-secondary,.card-ios-primary .text-ios-secondary{color:#32db64}.card-ios-primary .card-content-ios-danger,.card-ios-primary .card-header-ios-danger,.card-ios-primary .card-title-ios-danger,.card-ios-primary .text-ios-danger{color:#f53d3d}.card-ios-primary .card-content-ios-light,.card-ios-primary .card-header-ios-light,.card-ios-primary .card-title-ios-light,.card-ios-primary .text-ios-light{color:#f4f4f4}.card-ios-primary .card-content-ios-dark,.card-ios-primary .card-header-ios-dark,.card-ios-primary .card-title-ios-dark,.card-ios-primary .text-ios-dark{color:#222}.card-ios-primary .card-content-ios-energized,.card-ios-primary .card-header-ios-energized,.card-ios-primary .card-title-ios-energized,.card-ios-primary .text-ios-energized{color:#ffc527}.card-ios-primary .card-content-ios-royal,.card-ios-primary .card-header-ios-royal,.card-ios-primary .card-title-ios-royal,.card-ios-primary .text-ios-royal{color:#7e60ff}.card-ios-primary .card-content-ios-subtle,.card-ios-primary .card-header-ios-subtle,.card-ios-primary .card-title-ios-subtle,.card-ios-primary .text-ios-subtle{color:#444}.card-ios-primary .card-content-ios-vibrant,.card-ios-primary .card-header-ios-vibrant,.card-ios-primary .card-title-ios-vibrant,.card-ios-primary .text-ios-vibrant{color:#663399}.card-ios-primary .card-content-ios-bright,.card-ios-primary .card-header-ios-bright,.card-ios-primary .card-title-ios-bright,.card-ios-primary .text-ios-bright{color:#ffc125}.card-content-ios-primary,.card-header-ios-primary,.card-title-ios-primary{color:#488aff}.card-ios .text-ios-secondary{color:#32db64}.card-ios-secondary{color:#fff;background-color:#32db64}.card-ios-secondary .card-content-ios,.card-ios-secondary .card-header-ios,.card-ios-secondary .card-title-ios,.card-ios-secondary p{color:#fff}.card-ios-secondary .card-content-ios-primary,.card-ios-secondary .card-header-ios-primary,.card-ios-secondary .card-title-ios-primary,.card-ios-secondary .text-ios-primary{color:#488aff}.card-ios-secondary .card-content-ios-secondary,.card-ios-secondary .card-header-ios-secondary,.card-ios-secondary .card-title-ios-secondary,.card-ios-secondary .text-ios-secondary{color:#32db64}.card-ios-secondary .card-content-ios-danger,.card-ios-secondary .card-header-ios-danger,.card-ios-secondary .card-title-ios-danger,.card-ios-secondary .text-ios-danger{color:#f53d3d}.card-ios-secondary .card-content-ios-light,.card-ios-secondary .card-header-ios-light,.card-ios-secondary .card-title-ios-light,.card-ios-secondary .text-ios-light{color:#f4f4f4}.card-ios-secondary .card-content-ios-dark,.card-ios-secondary .card-header-ios-dark,.card-ios-secondary .card-title-ios-dark,.card-ios-secondary .text-ios-dark{color:#222}.card-ios-secondary .card-content-ios-energized,.card-ios-secondary .card-header-ios-energized,.card-ios-secondary .card-title-ios-energized,.card-ios-secondary .text-ios-energized{color:#ffc527}.card-ios-secondary .card-content-ios-royal,.card-ios-secondary .card-header-ios-royal,.card-ios-secondary .card-title-ios-royal,.card-ios-secondary .text-ios-royal{color:#7e60ff}.card-ios-secondary .card-content-ios-subtle,.card-ios-secondary .card-header-ios-subtle,.card-ios-secondary .card-title-ios-subtle,.card-ios-secondary .text-ios-subtle{color:#444}.card-ios-secondary .card-content-ios-vibrant,.card-ios-secondary .card-header-ios-vibrant,.card-ios-secondary .card-title-ios-vibrant,.card-ios-secondary .text-ios-vibrant{color:#663399}.card-ios-secondary .card-content-ios-bright,.card-ios-secondary .card-header-ios-bright,.card-ios-secondary .card-title-ios-bright,.card-ios-secondary .text-ios-bright{color:#ffc125}.card-content-ios-secondary,.card-header-ios-secondary,.card-title-ios-secondary{color:#32db64}.card-ios .text-ios-danger{color:#f53d3d}.card-ios-danger{color:#fff;background-color:#f53d3d}.card-ios-danger .card-content-ios,.card-ios-danger .card-header-ios,.card-ios-danger .card-title-ios,.card-ios-danger p{color:#fff}.card-ios-danger .card-content-ios-primary,.card-ios-danger .card-header-ios-primary,.card-ios-danger .card-title-ios-primary,.card-ios-danger .text-ios-primary{color:#488aff}.card-ios-danger .card-content-ios-secondary,.card-ios-danger .card-header-ios-secondary,.card-ios-danger .card-title-ios-secondary,.card-ios-danger .text-ios-secondary{color:#32db64}.card-ios-danger .card-content-ios-danger,.card-ios-danger .card-header-ios-danger,.card-ios-danger .card-title-ios-danger,.card-ios-danger .text-ios-danger{color:#f53d3d}.card-ios-danger .card-content-ios-light,.card-ios-danger .card-header-ios-light,.card-ios-danger .card-title-ios-light,.card-ios-danger .text-ios-light{color:#f4f4f4}.card-ios-danger .card-content-ios-dark,.card-ios-danger .card-header-ios-dark,.card-ios-danger .card-title-ios-dark,.card-ios-danger .text-ios-dark{color:#222}.card-ios-danger .card-content-ios-energized,.card-ios-danger .card-header-ios-energized,.card-ios-danger .card-title-ios-energized,.card-ios-danger .text-ios-energized{color:#ffc527}.card-ios-danger .card-content-ios-royal,.card-ios-danger .card-header-ios-royal,.card-ios-danger .card-title-ios-royal,.card-ios-danger .text-ios-royal{color:#7e60ff}.card-ios-danger .card-content-ios-subtle,.card-ios-danger .card-header-ios-subtle,.card-ios-danger .card-title-ios-subtle,.card-ios-danger .text-ios-subtle{color:#444}.card-ios-danger .card-content-ios-vibrant,.card-ios-danger .card-header-ios-vibrant,.card-ios-danger .card-title-ios-vibrant,.card-ios-danger .text-ios-vibrant{color:#663399}.card-ios-danger .card-content-ios-bright,.card-ios-danger .card-header-ios-bright,.card-ios-danger .card-title-ios-bright,.card-ios-danger .text-ios-bright{color:#ffc125}.card-content-ios-danger,.card-header-ios-danger,.card-title-ios-danger{color:#f53d3d}.card-ios .text-ios-light{color:#f4f4f4}.card-ios-light{color:#000;background-color:#f4f4f4}.card-ios-light .card-content-ios,.card-ios-light .card-header-ios,.card-ios-light .card-title-ios,.card-ios-light p{color:#000}.card-ios-light .card-content-ios-primary,.card-ios-light .card-header-ios-primary,.card-ios-light .card-title-ios-primary,.card-ios-light .text-ios-primary{color:#488aff}.card-ios-light .card-content-ios-secondary,.card-ios-light .card-header-ios-secondary,.card-ios-light .card-title-ios-secondary,.card-ios-light .text-ios-secondary{color:#32db64}.card-ios-light .card-content-ios-danger,.card-ios-light .card-header-ios-danger,.card-ios-light .card-title-ios-danger,.card-ios-light .text-ios-danger{color:#f53d3d}.card-ios-light .card-content-ios-light,.card-ios-light .card-header-ios-light,.card-ios-light .card-title-ios-light,.card-ios-light .text-ios-light{color:#f4f4f4}.card-ios-light .card-content-ios-dark,.card-ios-light .card-header-ios-dark,.card-ios-light .card-title-ios-dark,.card-ios-light .text-ios-dark{color:#222}.card-ios-light .card-content-ios-energized,.card-ios-light .card-header-ios-energized,.card-ios-light .card-title-ios-energized,.card-ios-light .text-ios-energized{color:#ffc527}.card-ios-light .card-content-ios-royal,.card-ios-light .card-header-ios-royal,.card-ios-light .card-title-ios-royal,.card-ios-light .text-ios-royal{color:#7e60ff}.card-ios-light .card-content-ios-subtle,.card-ios-light .card-header-ios-subtle,.card-ios-light .card-title-ios-subtle,.card-ios-light .text-ios-subtle{color:#444}.card-ios-light .card-content-ios-vibrant,.card-ios-light .card-header-ios-vibrant,.card-ios-light .card-title-ios-vibrant,.card-ios-light .text-ios-vibrant{color:#663399}.card-ios-light .card-content-ios-bright,.card-ios-light .card-header-ios-bright,.card-ios-light .card-title-ios-bright,.card-ios-light .text-ios-bright{color:#ffc125}.card-content-ios-light,.card-header-ios-light,.card-title-ios-light{color:#f4f4f4}.card-ios .text-ios-dark{color:#222}.card-ios-dark{color:#fff;background-color:#222}.card-ios-dark .card-content-ios,.card-ios-dark .card-header-ios,.card-ios-dark .card-title-ios,.card-ios-dark p{color:#fff}.card-ios-dark .card-content-ios-primary,.card-ios-dark .card-header-ios-primary,.card-ios-dark .card-title-ios-primary,.card-ios-dark .text-ios-primary{color:#488aff}.card-ios-dark .card-content-ios-secondary,.card-ios-dark .card-header-ios-secondary,.card-ios-dark .card-title-ios-secondary,.card-ios-dark .text-ios-secondary{color:#32db64}.card-ios-dark .card-content-ios-danger,.card-ios-dark .card-header-ios-danger,.card-ios-dark .card-title-ios-danger,.card-ios-dark .text-ios-danger{color:#f53d3d}.card-ios-dark .card-content-ios-light,.card-ios-dark .card-header-ios-light,.card-ios-dark .card-title-ios-light,.card-ios-dark .text-ios-light{color:#f4f4f4}.card-ios-dark .card-content-ios-dark,.card-ios-dark .card-header-ios-dark,.card-ios-dark .card-title-ios-dark,.card-ios-dark .text-ios-dark{color:#222}.card-ios-dark .card-content-ios-energized,.card-ios-dark .card-header-ios-energized,.card-ios-dark .card-title-ios-energized,.card-ios-dark .text-ios-energized{color:#ffc527}.card-ios-dark .card-content-ios-royal,.card-ios-dark .card-header-ios-royal,.card-ios-dark .card-title-ios-royal,.card-ios-dark .text-ios-royal{color:#7e60ff}.card-ios-dark .card-content-ios-subtle,.card-ios-dark .card-header-ios-subtle,.card-ios-dark .card-title-ios-subtle,.card-ios-dark .text-ios-subtle{color:#444}.card-ios-dark .card-content-ios-vibrant,.card-ios-dark .card-header-ios-vibrant,.card-ios-dark .card-title-ios-vibrant,.card-ios-dark .text-ios-vibrant{color:#663399}.card-ios-dark .card-content-ios-bright,.card-ios-dark .card-header-ios-bright,.card-ios-dark .card-title-ios-bright,.card-ios-dark .text-ios-bright{color:#ffc125}.card-content-ios-dark,.card-header-ios-dark,.card-title-ios-dark{color:#222}.card-ios .text-ios-energized{color:#ffc527}.card-ios-energized{color:#000;background-color:#ffc527}.card-ios-energized .card-content-ios,.card-ios-energized .card-header-ios,.card-ios-energized .card-title-ios,.card-ios-energized p{color:#000}.card-ios-energized .card-content-ios-primary,.card-ios-energized .card-header-ios-primary,.card-ios-energized .card-title-ios-primary,.card-ios-energized .text-ios-primary{color:#488aff}.card-ios-energized .card-content-ios-secondary,.card-ios-energized .card-header-ios-secondary,.card-ios-energized .card-title-ios-secondary,.card-ios-energized .text-ios-secondary{color:#32db64}.card-ios-energized .card-content-ios-danger,.card-ios-energized .card-header-ios-danger,.card-ios-energized .card-title-ios-danger,.card-ios-energized .text-ios-danger{color:#f53d3d}.card-ios-energized .card-content-ios-light,.card-ios-energized .card-header-ios-light,.card-ios-energized .card-title-ios-light,.card-ios-energized .text-ios-light{color:#f4f4f4}.card-ios-energized .card-content-ios-dark,.card-ios-energized .card-header-ios-dark,.card-ios-energized .card-title-ios-dark,.card-ios-energized .text-ios-dark{color:#222}.card-ios-energized .card-content-ios-energized,.card-ios-energized .card-header-ios-energized,.card-ios-energized .card-title-ios-energized,.card-ios-energized .text-ios-energized{color:#ffc527}.card-ios-energized .card-content-ios-royal,.card-ios-energized .card-header-ios-royal,.card-ios-energized .card-title-ios-royal,.card-ios-energized .text-ios-royal{color:#7e60ff}.card-ios-energized .card-content-ios-subtle,.card-ios-energized .card-header-ios-subtle,.card-ios-energized .card-title-ios-subtle,.card-ios-energized .text-ios-subtle{color:#444}.card-ios-energized .card-content-ios-vibrant,.card-ios-energized .card-header-ios-vibrant,.card-ios-energized .card-title-ios-vibrant,.card-ios-energized .text-ios-vibrant{color:#663399}.card-ios-energized .card-content-ios-bright,.card-ios-energized .card-header-ios-bright,.card-ios-energized .card-title-ios-bright,.card-ios-energized .text-ios-bright{color:#ffc125}.card-content-ios-energized,.card-header-ios-energized,.card-title-ios-energized{color:#ffc527}.card-ios .text-ios-royal{color:#7e60ff}.card-ios-royal{color:#fff;background-color:#7e60ff}.card-ios-royal .card-content-ios,.card-ios-royal .card-header-ios,.card-ios-royal .card-title-ios,.card-ios-royal p{color:#fff}.card-ios-royal .card-content-ios-primary,.card-ios-royal .card-header-ios-primary,.card-ios-royal .card-title-ios-primary,.card-ios-royal .text-ios-primary{color:#488aff}.card-ios-royal .card-content-ios-secondary,.card-ios-royal .card-header-ios-secondary,.card-ios-royal .card-title-ios-secondary,.card-ios-royal .text-ios-secondary{color:#32db64}.card-ios-royal .card-content-ios-danger,.card-ios-royal .card-header-ios-danger,.card-ios-royal .card-title-ios-danger,.card-ios-royal .text-ios-danger{color:#f53d3d}.card-ios-royal .card-content-ios-light,.card-ios-royal .card-header-ios-light,.card-ios-royal .card-title-ios-light,.card-ios-royal .text-ios-light{color:#f4f4f4}.card-ios-royal .card-content-ios-dark,.card-ios-royal .card-header-ios-dark,.card-ios-royal .card-title-ios-dark,.card-ios-royal .text-ios-dark{color:#222}.card-ios-royal .card-content-ios-energized,.card-ios-royal .card-header-ios-energized,.card-ios-royal .card-title-ios-energized,.card-ios-royal .text-ios-energized{color:#ffc527}.card-ios-royal .card-content-ios-royal,.card-ios-royal .card-header-ios-royal,.card-ios-royal .card-title-ios-royal,.card-ios-royal .text-ios-royal{color:#7e60ff}.card-ios-royal .card-content-ios-subtle,.card-ios-royal .card-header-ios-subtle,.card-ios-royal .card-title-ios-subtle,.card-ios-royal .text-ios-subtle{color:#444}.card-ios-royal .card-content-ios-vibrant,.card-ios-royal .card-header-ios-vibrant,.card-ios-royal .card-title-ios-vibrant,.card-ios-royal .text-ios-vibrant{color:#663399}.card-ios-royal .card-content-ios-bright,.card-ios-royal .card-header-ios-bright,.card-ios-royal .card-title-ios-bright,.card-ios-royal .text-ios-bright{color:#ffc125}.card-content-ios-royal,.card-header-ios-royal,.card-title-ios-royal{color:#7e60ff}.card-ios .text-ios-subtle{color:#444}.card-ios-subtle{color:#fff;background-color:#444}.card-ios-subtle .card-content-ios,.card-ios-subtle .card-header-ios,.card-ios-subtle .card-title-ios,.card-ios-subtle p{color:#fff}.card-ios-subtle .card-content-ios-primary,.card-ios-subtle .card-header-ios-primary,.card-ios-subtle .card-title-ios-primary,.card-ios-subtle .text-ios-primary{color:#488aff}.card-ios-subtle .card-content-ios-secondary,.card-ios-subtle .card-header-ios-secondary,.card-ios-subtle .card-title-ios-secondary,.card-ios-subtle .text-ios-secondary{color:#32db64}.card-ios-subtle .card-content-ios-danger,.card-ios-subtle .card-header-ios-danger,.card-ios-subtle .card-title-ios-danger,.card-ios-subtle .text-ios-danger{color:#f53d3d}.card-ios-subtle .card-content-ios-light,.card-ios-subtle .card-header-ios-light,.card-ios-subtle .card-title-ios-light,.card-ios-subtle .text-ios-light{color:#f4f4f4}.card-ios-subtle .card-content-ios-dark,.card-ios-subtle .card-header-ios-dark,.card-ios-subtle .card-title-ios-dark,.card-ios-subtle .text-ios-dark{color:#222}.card-ios-subtle .card-content-ios-energized,.card-ios-subtle .card-header-ios-energized,.card-ios-subtle .card-title-ios-energized,.card-ios-subtle .text-ios-energized{color:#ffc527}.card-ios-subtle .card-content-ios-royal,.card-ios-subtle .card-header-ios-royal,.card-ios-subtle .card-title-ios-royal,.card-ios-subtle .text-ios-royal{color:#7e60ff}.card-ios-subtle .card-content-ios-subtle,.card-ios-subtle .card-header-ios-subtle,.card-ios-subtle .card-title-ios-subtle,.card-ios-subtle .text-ios-subtle{color:#444}.card-ios-subtle .card-content-ios-vibrant,.card-ios-subtle .card-header-ios-vibrant,.card-ios-subtle .card-title-ios-vibrant,.card-ios-subtle .text-ios-vibrant{color:#663399}.card-ios-subtle .card-content-ios-bright,.card-ios-subtle .card-header-ios-bright,.card-ios-subtle .card-title-ios-bright,.card-ios-subtle .text-ios-bright{color:#ffc125}.card-content-ios-subtle,.card-header-ios-subtle,.card-title-ios-subtle{color:#444}.card-ios .text-ios-vibrant{color:#663399}.card-ios-vibrant{color:#fff;background-color:#663399}.card-ios-vibrant .card-content-ios,.card-ios-vibrant .card-header-ios,.card-ios-vibrant .card-title-ios,.card-ios-vibrant p{color:#fff}.card-ios-vibrant .card-content-ios-primary,.card-ios-vibrant .card-header-ios-primary,.card-ios-vibrant .card-title-ios-primary,.card-ios-vibrant .text-ios-primary{color:#488aff}.card-ios-vibrant .card-content-ios-secondary,.card-ios-vibrant .card-header-ios-secondary,.card-ios-vibrant .card-title-ios-secondary,.card-ios-vibrant .text-ios-secondary{color:#32db64}.card-ios-vibrant .card-content-ios-danger,.card-ios-vibrant .card-header-ios-danger,.card-ios-vibrant .card-title-ios-danger,.card-ios-vibrant .text-ios-danger{color:#f53d3d}.card-ios-vibrant .card-content-ios-light,.card-ios-vibrant .card-header-ios-light,.card-ios-vibrant .card-title-ios-light,.card-ios-vibrant .text-ios-light{color:#f4f4f4}.card-ios-vibrant .card-content-ios-dark,.card-ios-vibrant .card-header-ios-dark,.card-ios-vibrant .card-title-ios-dark,.card-ios-vibrant .text-ios-dark{color:#222}.card-ios-vibrant .card-content-ios-energized,.card-ios-vibrant .card-header-ios-energized,.card-ios-vibrant .card-title-ios-energized,.card-ios-vibrant .text-ios-energized{color:#ffc527}.card-ios-vibrant .card-content-ios-royal,.card-ios-vibrant .card-header-ios-royal,.card-ios-vibrant .card-title-ios-royal,.card-ios-vibrant .text-ios-royal{color:#7e60ff}.card-ios-vibrant .card-content-ios-subtle,.card-ios-vibrant .card-header-ios-subtle,.card-ios-vibrant .card-title-ios-subtle,.card-ios-vibrant .text-ios-subtle{color:#444}.card-ios-vibrant .card-content-ios-vibrant,.card-ios-vibrant .card-header-ios-vibrant,.card-ios-vibrant .card-title-ios-vibrant,.card-ios-vibrant .text-ios-vibrant{color:#663399}.card-ios-vibrant .card-content-ios-bright,.card-ios-vibrant .card-header-ios-bright,.card-ios-vibrant .card-title-ios-bright,.card-ios-vibrant .text-ios-bright{color:#ffc125}.card-content-ios-vibrant,.card-header-ios-vibrant,.card-title-ios-vibrant{color:#663399}.card-ios .text-ios-bright{color:#ffc125}.card-ios-bright{color:#000;background-color:#ffc125}.card-ios-bright .card-content-ios,.card-ios-bright .card-header-ios,.card-ios-bright .card-title-ios,.card-ios-bright p{color:#000}.card-ios-bright .card-content-ios-primary,.card-ios-bright .card-header-ios-primary,.card-ios-bright .card-title-ios-primary,.card-ios-bright .text-ios-primary{color:#488aff}.card-ios-bright .card-content-ios-secondary,.card-ios-bright .card-header-ios-secondary,.card-ios-bright .card-title-ios-secondary,.card-ios-bright .text-ios-secondary{color:#32db64}.card-ios-bright .card-content-ios-danger,.card-ios-bright .card-header-ios-danger,.card-ios-bright .card-title-ios-danger,.card-ios-bright .text-ios-danger{color:#f53d3d}.card-ios-bright .card-content-ios-light,.card-ios-bright .card-header-ios-light,.card-ios-bright .card-title-ios-light,.card-ios-bright .text-ios-light{color:#f4f4f4}.card-ios-bright .card-content-ios-dark,.card-ios-bright .card-header-ios-dark,.card-ios-bright .card-title-ios-dark,.card-ios-bright .text-ios-dark{color:#222}.card-ios-bright .card-content-ios-energized,.card-ios-bright .card-header-ios-energized,.card-ios-bright .card-title-ios-energized,.card-ios-bright .text-ios-energized{color:#ffc527}.card-ios-bright .card-content-ios-royal,.card-ios-bright .card-header-ios-royal,.card-ios-bright .card-title-ios-royal,.card-ios-bright .text-ios-royal{color:#7e60ff}.card-ios-bright .card-content-ios-subtle,.card-ios-bright .card-header-ios-subtle,.card-ios-bright .card-title-ios-subtle,.card-ios-bright .text-ios-subtle{color:#444}.card-ios-bright .card-content-ios-vibrant,.card-ios-bright .card-header-ios-vibrant,.card-ios-bright .card-title-ios-vibrant,.card-ios-bright .text-ios-vibrant{color:#663399}.card-ios-bright .card-content-ios-bright,.card-ios-bright .card-header-ios-bright,.card-ios-bright .card-title-ios-bright,.card-ios-bright .text-ios-bright{color:#ffc125}.card-content-ios-bright,.card-header-ios-bright,.card-title-ios-bright{color:#ffc125}.card-md{margin:10px;border-radius:2px;width:calc(100% - 20px);font-size:1.4rem;background:#fff;-webkit-box-shadow:0 2px 2px 0 rgba(0,0,0,.14),0 3px 1px -2px rgba(0,0,0,.2),0 1px 5px 0 rgba(0,0,0,.12);box-shadow:0 2px 2px 0 rgba(0,0,0,.14),0 3px 1px -2px rgba(0,0,0,.2),0 1px 5px 0 rgba(0,0,0,.12)}.card-md ion-list{margin-bottom:0}.card-md>.item-wrapper:last-child .item,.card-md>.item:last-child,.card-md>.item:last-child .item-inner{border-bottom:0}.card-md .item-md.item-block .item-inner{border:0}.card-content-md{padding:13px 16px;font-size:1.4rem;line-height:1.5}.card-header-md{font-size:1.6rem;color:#222;padding:16px}.card-header-md+.card-content-md,.card-md .item+.card-content-md{padding-top:0}.card .note-md{font-size:1.3rem}.card-title-md{display:block;font-size:2.4rem;line-height:1.2;color:#222;margin:2px 0;padding:8px 0}.card-md h1{margin:0 0 2px;font-size:2.4rem;font-weight:400;color:#222}.card-md h2{margin:2px 0;font-size:1.6rem;font-weight:400;color:#222}.card-md h3,.card-md h4,.card-md h5,.card-md h6{margin:2px 0;font-size:1.4rem;font-weight:400;color:#222}.card-md p{margin:0 0 2px;font-size:1.4rem;font-weight:400;line-height:1.5;color:#222}.card-md+ion-card{margin-top:0}.card-md .text-md-primary{color:#488aff}.card-md-primary{color:#fff;background-color:#488aff}.card-md-primary .card-content-md,.card-md-primary .card-header-md,.card-md-primary .card-title-md,.card-md-primary h1,.card-md-primary h2,.card-md-primary h3,.card-md-primary h4,.card-md-primary h5,.card-md-primary h6,.card-md-primary p{color:#fff}.card-md-primary .card-content-md-primary,.card-md-primary .card-header-md-primary,.card-md-primary .card-title-md-primary,.card-md-primary .text-md-primary{color:#488aff}.card-md-primary .card-content-md-secondary,.card-md-primary .card-header-md-secondary,.card-md-primary .card-title-md-secondary,.card-md-primary .text-md-secondary{color:#32db64}.card-md-primary .card-content-md-danger,.card-md-primary .card-header-md-danger,.card-md-primary .card-title-md-danger,.card-md-primary .text-md-danger{color:#f53d3d}.card-md-primary .card-content-md-light,.card-md-primary .card-header-md-light,.card-md-primary .card-title-md-light,.card-md-primary .text-md-light{color:#f4f4f4}.card-md-primary .card-content-md-dark,.card-md-primary .card-header-md-dark,.card-md-primary .card-title-md-dark,.card-md-primary .text-md-dark{color:#222}.card-md-primary .card-content-md-energized,.card-md-primary .card-header-md-energized,.card-md-primary .card-title-md-energized,.card-md-primary .text-md-energized{color:#ffc527}.card-md-primary .card-content-md-royal,.card-md-primary .card-header-md-royal,.card-md-primary .card-title-md-royal,.card-md-primary .text-md-royal{color:#7e60ff}.card-md-primary .card-content-md-subtle,.card-md-primary .card-header-md-subtle,.card-md-primary .card-title-md-subtle,.card-md-primary .text-md-subtle{color:#444}.card-md-primary .card-content-md-vibrant,.card-md-primary .card-header-md-vibrant,.card-md-primary .card-title-md-vibrant,.card-md-primary .text-md-vibrant{color:#663399}.card-md-primary .card-content-md-bright,.card-md-primary .card-header-md-bright,.card-md-primary .card-title-md-bright,.card-md-primary .text-md-bright{color:#ffc125}.card-content-md-primary,.card-header-md-primary,.card-title-md-primary{color:#488aff}.card-md .text-md-secondary{color:#32db64}.card-md-secondary{color:#fff;background-color:#32db64}.card-md-secondary .card-content-md,.card-md-secondary .card-header-md,.card-md-secondary .card-title-md,.card-md-secondary h1,.card-md-secondary h2,.card-md-secondary h3,.card-md-secondary h4,.card-md-secondary h5,.card-md-secondary h6,.card-md-secondary p{color:#fff}.card-md-secondary .card-content-md-primary,.card-md-secondary .card-header-md-primary,.card-md-secondary .card-title-md-primary,.card-md-secondary .text-md-primary{color:#488aff}.card-md-secondary .card-content-md-secondary,.card-md-secondary .card-header-md-secondary,.card-md-secondary .card-title-md-secondary,.card-md-secondary .text-md-secondary{color:#32db64}.card-md-secondary .card-content-md-danger,.card-md-secondary .card-header-md-danger,.card-md-secondary .card-title-md-danger,.card-md-secondary .text-md-danger{color:#f53d3d}.card-md-secondary .card-content-md-light,.card-md-secondary .card-header-md-light,.card-md-secondary .card-title-md-light,.card-md-secondary .text-md-light{color:#f4f4f4}.card-md-secondary .card-content-md-dark,.card-md-secondary .card-header-md-dark,.card-md-secondary .card-title-md-dark,.card-md-secondary .text-md-dark{color:#222}.card-md-secondary .card-content-md-energized,.card-md-secondary .card-header-md-energized,.card-md-secondary .card-title-md-energized,.card-md-secondary .text-md-energized{color:#ffc527}.card-md-secondary .card-content-md-royal,.card-md-secondary .card-header-md-royal,.card-md-secondary .card-title-md-royal,.card-md-secondary .text-md-royal{color:#7e60ff}.card-md-secondary .card-content-md-subtle,.card-md-secondary .card-header-md-subtle,.card-md-secondary .card-title-md-subtle,.card-md-secondary .text-md-subtle{color:#444}.card-md-secondary .card-content-md-vibrant,.card-md-secondary .card-header-md-vibrant,.card-md-secondary .card-title-md-vibrant,.card-md-secondary .text-md-vibrant{color:#663399}.card-md-secondary .card-content-md-bright,.card-md-secondary .card-header-md-bright,.card-md-secondary .card-title-md-bright,.card-md-secondary .text-md-bright{color:#ffc125}.card-content-md-secondary,.card-header-md-secondary,.card-title-md-secondary{color:#32db64}.card-md .text-md-danger{color:#f53d3d}.card-md-danger{color:#fff;background-color:#f53d3d}.card-md-danger .card-content-md,.card-md-danger .card-header-md,.card-md-danger .card-title-md,.card-md-danger h1,.card-md-danger h2,.card-md-danger h3,.card-md-danger h4,.card-md-danger h5,.card-md-danger h6,.card-md-danger p{color:#fff}.card-md-danger .card-content-md-primary,.card-md-danger .card-header-md-primary,.card-md-danger .card-title-md-primary,.card-md-danger .text-md-primary{color:#488aff}.card-md-danger .card-content-md-secondary,.card-md-danger .card-header-md-secondary,.card-md-danger .card-title-md-secondary,.card-md-danger .text-md-secondary{color:#32db64}.card-md-danger .card-content-md-danger,.card-md-danger .card-header-md-danger,.card-md-danger .card-title-md-danger,.card-md-danger .text-md-danger{color:#f53d3d}.card-md-danger .card-content-md-light,.card-md-danger .card-header-md-light,.card-md-danger .card-title-md-light,.card-md-danger .text-md-light{color:#f4f4f4}.card-md-danger .card-content-md-dark,.card-md-danger .card-header-md-dark,.card-md-danger .card-title-md-dark,.card-md-danger .text-md-dark{color:#222}.card-md-danger .card-content-md-energized,.card-md-danger .card-header-md-energized,.card-md-danger .card-title-md-energized,.card-md-danger .text-md-energized{color:#ffc527}.card-md-danger .card-content-md-royal,.card-md-danger .card-header-md-royal,.card-md-danger .card-title-md-royal,.card-md-danger .text-md-royal{color:#7e60ff}.card-md-danger .card-content-md-subtle,.card-md-danger .card-header-md-subtle,.card-md-danger .card-title-md-subtle,.card-md-danger .text-md-subtle{color:#444}.card-md-danger .card-content-md-vibrant,.card-md-danger .card-header-md-vibrant,.card-md-danger .card-title-md-vibrant,.card-md-danger .text-md-vibrant{color:#663399}.card-md-danger .card-content-md-bright,.card-md-danger .card-header-md-bright,.card-md-danger .card-title-md-bright,.card-md-danger .text-md-bright{color:#ffc125}.card-content-md-danger,.card-header-md-danger,.card-title-md-danger{color:#f53d3d}.card-md .text-md-light{color:#f4f4f4}.card-md-light{color:#000;background-color:#f4f4f4}.card-md-light .card-content-md,.card-md-light .card-header-md,.card-md-light .card-title-md,.card-md-light h1,.card-md-light h2,.card-md-light h3,.card-md-light h4,.card-md-light h5,.card-md-light h6,.card-md-light p{color:#000}.card-md-light .card-content-md-primary,.card-md-light .card-header-md-primary,.card-md-light .card-title-md-primary,.card-md-light .text-md-primary{color:#488aff}.card-md-light .card-content-md-secondary,.card-md-light .card-header-md-secondary,.card-md-light .card-title-md-secondary,.card-md-light .text-md-secondary{color:#32db64}.card-md-light .card-content-md-danger,.card-md-light .card-header-md-danger,.card-md-light .card-title-md-danger,.card-md-light .text-md-danger{color:#f53d3d}.card-md-light .card-content-md-light,.card-md-light .card-header-md-light,.card-md-light .card-title-md-light,.card-md-light .text-md-light{color:#f4f4f4}.card-md-light .card-content-md-dark,.card-md-light .card-header-md-dark,.card-md-light .card-title-md-dark,.card-md-light .text-md-dark{color:#222}.card-md-light .card-content-md-energized,.card-md-light .card-header-md-energized,.card-md-light .card-title-md-energized,.card-md-light .text-md-energized{color:#ffc527}.card-md-light .card-content-md-royal,.card-md-light .card-header-md-royal,.card-md-light .card-title-md-royal,.card-md-light .text-md-royal{color:#7e60ff}.card-md-light .card-content-md-subtle,.card-md-light .card-header-md-subtle,.card-md-light .card-title-md-subtle,.card-md-light .text-md-subtle{color:#444}.card-md-light .card-content-md-vibrant,.card-md-light .card-header-md-vibrant,.card-md-light .card-title-md-vibrant,.card-md-light .text-md-vibrant{color:#663399}.card-md-light .card-content-md-bright,.card-md-light .card-header-md-bright,.card-md-light .card-title-md-bright,.card-md-light .text-md-bright{color:#ffc125}.card-content-md-light,.card-header-md-light,.card-title-md-light{color:#f4f4f4}.card-md .text-md-dark{color:#222}.card-md-dark{color:#fff;background-color:#222}.card-md-dark .card-content-md,.card-md-dark .card-header-md,.card-md-dark .card-title-md,.card-md-dark h1,.card-md-dark h2,.card-md-dark h3,.card-md-dark h4,.card-md-dark h5,.card-md-dark h6,.card-md-dark p{color:#fff}.card-md-dark .card-content-md-primary,.card-md-dark .card-header-md-primary,.card-md-dark .card-title-md-primary,.card-md-dark .text-md-primary{color:#488aff}.card-md-dark .card-content-md-secondary,.card-md-dark .card-header-md-secondary,.card-md-dark .card-title-md-secondary,.card-md-dark .text-md-secondary{color:#32db64}.card-md-dark .card-content-md-danger,.card-md-dark .card-header-md-danger,.card-md-dark .card-title-md-danger,.card-md-dark .text-md-danger{color:#f53d3d}.card-md-dark .card-content-md-light,.card-md-dark .card-header-md-light,.card-md-dark .card-title-md-light,.card-md-dark .text-md-light{color:#f4f4f4}.card-md-dark .card-content-md-dark,.card-md-dark .card-header-md-dark,.card-md-dark .card-title-md-dark,.card-md-dark .text-md-dark{color:#222}.card-md-dark .card-content-md-energized,.card-md-dark .card-header-md-energized,.card-md-dark .card-title-md-energized,.card-md-dark .text-md-energized{color:#ffc527}.card-md-dark .card-content-md-royal,.card-md-dark .card-header-md-royal,.card-md-dark .card-title-md-royal,.card-md-dark .text-md-royal{color:#7e60ff}.card-md-dark .card-content-md-subtle,.card-md-dark .card-header-md-subtle,.card-md-dark .card-title-md-subtle,.card-md-dark .text-md-subtle{color:#444}.card-md-dark .card-content-md-vibrant,.card-md-dark .card-header-md-vibrant,.card-md-dark .card-title-md-vibrant,.card-md-dark .text-md-vibrant{color:#663399}.card-md-dark .card-content-md-bright,.card-md-dark .card-header-md-bright,.card-md-dark .card-title-md-bright,.card-md-dark .text-md-bright{color:#ffc125}.card-content-md-dark,.card-header-md-dark,.card-title-md-dark{color:#222}.card-md .text-md-energized{color:#ffc527}.card-md-energized{color:#000;background-color:#ffc527}.card-md-energized .card-content-md,.card-md-energized .card-header-md,.card-md-energized .card-title-md,.card-md-energized h1,.card-md-energized h2,.card-md-energized h3,.card-md-energized h4,.card-md-energized h5,.card-md-energized h6,.card-md-energized p{color:#000}.card-md-energized .card-content-md-primary,.card-md-energized .card-header-md-primary,.card-md-energized .card-title-md-primary,.card-md-energized .text-md-primary{color:#488aff}.card-md-energized .card-content-md-secondary,.card-md-energized .card-header-md-secondary,.card-md-energized .card-title-md-secondary,.card-md-energized .text-md-secondary{color:#32db64}.card-md-energized .card-content-md-danger,.card-md-energized .card-header-md-danger,.card-md-energized .card-title-md-danger,.card-md-energized .text-md-danger{color:#f53d3d}.card-md-energized .card-content-md-light,.card-md-energized .card-header-md-light,.card-md-energized .card-title-md-light,.card-md-energized .text-md-light{color:#f4f4f4}.card-md-energized .card-content-md-dark,.card-md-energized .card-header-md-dark,.card-md-energized .card-title-md-dark,.card-md-energized .text-md-dark{color:#222}.card-md-energized .card-content-md-energized,.card-md-energized .card-header-md-energized,.card-md-energized .card-title-md-energized,.card-md-energized .text-md-energized{color:#ffc527}.card-md-energized .card-content-md-royal,.card-md-energized .card-header-md-royal,.card-md-energized .card-title-md-royal,.card-md-energized .text-md-royal{color:#7e60ff}.card-md-energized .card-content-md-subtle,.card-md-energized .card-header-md-subtle,.card-md-energized .card-title-md-subtle,.card-md-energized .text-md-subtle{color:#444}.card-md-energized .card-content-md-vibrant,.card-md-energized .card-header-md-vibrant,.card-md-energized .card-title-md-vibrant,.card-md-energized .text-md-vibrant{color:#663399}.card-md-energized .card-content-md-bright,.card-md-energized .card-header-md-bright,.card-md-energized .card-title-md-bright,.card-md-energized .text-md-bright{color:#ffc125}.card-content-md-energized,.card-header-md-energized,.card-title-md-energized{color:#ffc527}.card-md .text-md-royal{color:#7e60ff}.card-md-royal{color:#fff;background-color:#7e60ff}.card-md-royal .card-content-md,.card-md-royal .card-header-md,.card-md-royal .card-title-md,.card-md-royal h1,.card-md-royal h2,.card-md-royal h3,.card-md-royal h4,.card-md-royal h5,.card-md-royal h6,.card-md-royal p{color:#fff}.card-md-royal .card-content-md-primary,.card-md-royal .card-header-md-primary,.card-md-royal .card-title-md-primary,.card-md-royal .text-md-primary{color:#488aff}.card-md-royal .card-content-md-secondary,.card-md-royal .card-header-md-secondary,.card-md-royal .card-title-md-secondary,.card-md-royal .text-md-secondary{color:#32db64}.card-md-royal .card-content-md-danger,.card-md-royal .card-header-md-danger,.card-md-royal .card-title-md-danger,.card-md-royal .text-md-danger{color:#f53d3d}.card-md-royal .card-content-md-light,.card-md-royal .card-header-md-light,.card-md-royal .card-title-md-light,.card-md-royal .text-md-light{color:#f4f4f4}.card-md-royal .card-content-md-dark,.card-md-royal .card-header-md-dark,.card-md-royal .card-title-md-dark,.card-md-royal .text-md-dark{color:#222}.card-md-royal .card-content-md-energized,.card-md-royal .card-header-md-energized,.card-md-royal .card-title-md-energized,.card-md-royal .text-md-energized{color:#ffc527}.card-md-royal .card-content-md-royal,.card-md-royal .card-header-md-royal,.card-md-royal .card-title-md-royal,.card-md-royal .text-md-royal{color:#7e60ff}.card-md-royal .card-content-md-subtle,.card-md-royal .card-header-md-subtle,.card-md-royal .card-title-md-subtle,.card-md-royal .text-md-subtle{color:#444}.card-md-royal .card-content-md-vibrant,.card-md-royal .card-header-md-vibrant,.card-md-royal .card-title-md-vibrant,.card-md-royal .text-md-vibrant{color:#663399}.card-md-royal .card-content-md-bright,.card-md-royal .card-header-md-bright,.card-md-royal .card-title-md-bright,.card-md-royal .text-md-bright{color:#ffc125}.card-content-md-royal,.card-header-md-royal,.card-title-md-royal{color:#7e60ff}.card-md .text-md-subtle{color:#444}.card-md-subtle{color:#fff;background-color:#444}.card-md-subtle .card-content-md,.card-md-subtle .card-header-md,.card-md-subtle .card-title-md,.card-md-subtle h1,.card-md-subtle h2,.card-md-subtle h3,.card-md-subtle h4,.card-md-subtle h5,.card-md-subtle h6,.card-md-subtle p{color:#fff}.card-md-subtle .card-content-md-primary,.card-md-subtle .card-header-md-primary,.card-md-subtle .card-title-md-primary,.card-md-subtle .text-md-primary{color:#488aff}.card-md-subtle .card-content-md-secondary,.card-md-subtle .card-header-md-secondary,.card-md-subtle .card-title-md-secondary,.card-md-subtle .text-md-secondary{color:#32db64}.card-md-subtle .card-content-md-danger,.card-md-subtle .card-header-md-danger,.card-md-subtle .card-title-md-danger,.card-md-subtle .text-md-danger{color:#f53d3d}.card-md-subtle .card-content-md-light,.card-md-subtle .card-header-md-light,.card-md-subtle .card-title-md-light,.card-md-subtle .text-md-light{color:#f4f4f4}.card-md-subtle .card-content-md-dark,.card-md-subtle .card-header-md-dark,.card-md-subtle .card-title-md-dark,.card-md-subtle .text-md-dark{color:#222}.card-md-subtle .card-content-md-energized,.card-md-subtle .card-header-md-energized,.card-md-subtle .card-title-md-energized,.card-md-subtle .text-md-energized{color:#ffc527}.card-md-subtle .card-content-md-royal,.card-md-subtle .card-header-md-royal,.card-md-subtle .card-title-md-royal,.card-md-subtle .text-md-royal{color:#7e60ff}.card-md-subtle .card-content-md-subtle,.card-md-subtle .card-header-md-subtle,.card-md-subtle .card-title-md-subtle,.card-md-subtle .text-md-subtle{color:#444}.card-md-subtle .card-content-md-vibrant,.card-md-subtle .card-header-md-vibrant,.card-md-subtle .card-title-md-vibrant,.card-md-subtle .text-md-vibrant{color:#663399}.card-md-subtle .card-content-md-bright,.card-md-subtle .card-header-md-bright,.card-md-subtle .card-title-md-bright,.card-md-subtle .text-md-bright{color:#ffc125}.card-content-md-subtle,.card-header-md-subtle,.card-title-md-subtle{color:#444}.card-md .text-md-vibrant{color:#663399}.card-md-vibrant{color:#fff;background-color:#663399}.card-md-vibrant .card-content-md,.card-md-vibrant .card-header-md,.card-md-vibrant .card-title-md,.card-md-vibrant h1,.card-md-vibrant h2,.card-md-vibrant h3,.card-md-vibrant h4,.card-md-vibrant h5,.card-md-vibrant h6,.card-md-vibrant p{color:#fff}.card-md-vibrant .card-content-md-primary,.card-md-vibrant .card-header-md-primary,.card-md-vibrant .card-title-md-primary,.card-md-vibrant .text-md-primary{color:#488aff}.card-md-vibrant .card-content-md-secondary,.card-md-vibrant .card-header-md-secondary,.card-md-vibrant .card-title-md-secondary,.card-md-vibrant .text-md-secondary{color:#32db64}.card-md-vibrant .card-content-md-danger,.card-md-vibrant .card-header-md-danger,.card-md-vibrant .card-title-md-danger,.card-md-vibrant .text-md-danger{color:#f53d3d}.card-md-vibrant .card-content-md-light,.card-md-vibrant .card-header-md-light,.card-md-vibrant .card-title-md-light,.card-md-vibrant .text-md-light{color:#f4f4f4}.card-md-vibrant .card-content-md-dark,.card-md-vibrant .card-header-md-dark,.card-md-vibrant .card-title-md-dark,.card-md-vibrant .text-md-dark{color:#222}.card-md-vibrant .card-content-md-energized,.card-md-vibrant .card-header-md-energized,.card-md-vibrant .card-title-md-energized,.card-md-vibrant .text-md-energized{color:#ffc527}.card-md-vibrant .card-content-md-royal,.card-md-vibrant .card-header-md-royal,.card-md-vibrant .card-title-md-royal,.card-md-vibrant .text-md-royal{color:#7e60ff}.card-md-vibrant .card-content-md-subtle,.card-md-vibrant .card-header-md-subtle,.card-md-vibrant .card-title-md-subtle,.card-md-vibrant .text-md-subtle{color:#444}.card-md-vibrant .card-content-md-vibrant,.card-md-vibrant .card-header-md-vibrant,.card-md-vibrant .card-title-md-vibrant,.card-md-vibrant .text-md-vibrant{color:#663399}.card-md-vibrant .card-content-md-bright,.card-md-vibrant .card-header-md-bright,.card-md-vibrant .card-title-md-bright,.card-md-vibrant .text-md-bright{color:#ffc125}.card-content-md-vibrant,.card-header-md-vibrant,.card-title-md-vibrant{color:#663399}.card-md .text-md-bright{color:#ffc125}.card-md-bright{color:#000;background-color:#ffc125}.card-md-bright .card-content-md,.card-md-bright .card-header-md,.card-md-bright .card-title-md,.card-md-bright h1,.card-md-bright h2,.card-md-bright h3,.card-md-bright h4,.card-md-bright h5,.card-md-bright h6,.card-md-bright p{color:#000}.card-md-bright .card-content-md-primary,.card-md-bright .card-header-md-primary,.card-md-bright .card-title-md-primary,.card-md-bright .text-md-primary{color:#488aff}.card-md-bright .card-content-md-secondary,.card-md-bright .card-header-md-secondary,.card-md-bright .card-title-md-secondary,.card-md-bright .text-md-secondary{color:#32db64}.card-md-bright .card-content-md-danger,.card-md-bright .card-header-md-danger,.card-md-bright .card-title-md-danger,.card-md-bright .text-md-danger{color:#f53d3d}.card-md-bright .card-content-md-light,.card-md-bright .card-header-md-light,.card-md-bright .card-title-md-light,.card-md-bright .text-md-light{color:#f4f4f4}.card-md-bright .card-content-md-dark,.card-md-bright .card-header-md-dark,.card-md-bright .card-title-md-dark,.card-md-bright .text-md-dark{color:#222}.card-md-bright .card-content-md-energized,.card-md-bright .card-header-md-energized,.card-md-bright .card-title-md-energized,.card-md-bright .text-md-energized{color:#ffc527}.card-md-bright .card-content-md-royal,.card-md-bright .card-header-md-royal,.card-md-bright .card-title-md-royal,.card-md-bright .text-md-royal{color:#7e60ff}.card-md-bright .card-content-md-subtle,.card-md-bright .card-header-md-subtle,.card-md-bright .card-title-md-subtle,.card-md-bright .text-md-subtle{color:#444}.card-md-bright .card-content-md-vibrant,.card-md-bright .card-header-md-vibrant,.card-md-bright .card-title-md-vibrant,.card-md-bright .text-md-vibrant{color:#663399}.card-md-bright .card-content-md-bright,.card-md-bright .card-header-md-bright,.card-md-bright .card-title-md-bright,.card-md-bright .text-md-bright{color:#ffc125}.card-content-md-bright,.card-header-md-bright,.card-title-md-bright{color:#ffc125}.card-wp{margin:8px;border-radius:1px;width:calc(100% - 16px);font-size:1.4rem;background:#fff;-webkit-box-shadow:0 1px 1px 1px rgba(0,0,0,.2);box-shadow:0 1px 1px 1px rgba(0,0,0,.2)}.card-wp ion-list{margin-bottom:0}.card-wp>.item-wrapper:last-child .item,.card-wp>.item:last-child,.card-wp>.item:last-child .item-inner{border-bottom:0}.card-wp .item-wp.item-block .item-inner{border:0}.card-content-wp{padding:13px 16px;font-size:1.4rem;line-height:1.5}.card-header-wp{font-size:1.6rem;color:#222;padding:16px}.card-header-wp+.card-content-wp,.card-wp .item+.card-content-wp{padding-top:0}.card .note-wp{font-size:1.3rem}.card-title-wp{display:block;font-size:2.4rem;line-height:1.2;color:#222;margin:2px 0;padding:8px 0}.card-wp h1{margin:0 0 2px;font-size:2.4rem;font-weight:400;color:#222}.card-wp h2{margin:2px 0;font-size:1.6rem;font-weight:400;color:#222}.card-wp h3,.card-wp h4,.card-wp h5,.card-wp h6{margin:2px 0;font-size:1.4rem;font-weight:400;color:#222}.card-wp p{margin:0 0 2px;font-size:1.4rem;font-weight:400;line-height:1.5;color:#222}.card-wp+ion-card{margin-top:0}.card-wp .text-wp-primary{color:#488aff}.card-wp-primary{color:#fff;background-color:#488aff}.card-wp-primary .card-content-wp,.card-wp-primary .card-header-wp,.card-wp-primary .card-title-wp,.card-wp-primary h1,.card-wp-primary h2,.card-wp-primary h3,.card-wp-primary h4,.card-wp-primary h5,.card-wp-primary h6,.card-wp-primary p{color:#fff}.card-wp-primary .card-content-wp-primary,.card-wp-primary .card-header-wp-primary,.card-wp-primary .card-title-wp-primary,.card-wp-primary .text-wp-primary{color:#488aff}.card-wp-primary .card-content-wp-secondary,.card-wp-primary .card-header-wp-secondary,.card-wp-primary .card-title-wp-secondary,.card-wp-primary .text-wp-secondary{color:#32db64}.card-wp-primary .card-content-wp-danger,.card-wp-primary .card-header-wp-danger,.card-wp-primary .card-title-wp-danger,.card-wp-primary .text-wp-danger{color:#f53d3d}.card-wp-primary .card-content-wp-light,.card-wp-primary .card-header-wp-light,.card-wp-primary .card-title-wp-light,.card-wp-primary .text-wp-light{color:#f4f4f4}.card-wp-primary .card-content-wp-dark,.card-wp-primary .card-header-wp-dark,.card-wp-primary .card-title-wp-dark,.card-wp-primary .text-wp-dark{color:#222}.card-wp-primary .card-content-wp-energized,.card-wp-primary .card-header-wp-energized,.card-wp-primary .card-title-wp-energized,.card-wp-primary .text-wp-energized{color:#ffc527}.card-wp-primary .card-content-wp-royal,.card-wp-primary .card-header-wp-royal,.card-wp-primary .card-title-wp-royal,.card-wp-primary .text-wp-royal{color:#7e60ff}.card-wp-primary .card-content-wp-subtle,.card-wp-primary .card-header-wp-subtle,.card-wp-primary .card-title-wp-subtle,.card-wp-primary .text-wp-subtle{color:#444}.card-wp-primary .card-content-wp-vibrant,.card-wp-primary .card-header-wp-vibrant,.card-wp-primary .card-title-wp-vibrant,.card-wp-primary .text-wp-vibrant{color:#663399}.card-wp-primary .card-content-wp-bright,.card-wp-primary .card-header-wp-bright,.card-wp-primary .card-title-wp-bright,.card-wp-primary .text-wp-bright{color:#ffc125}.card-content-wp-primary,.card-header-wp-primary,.card-title-wp-primary{color:#488aff}.card-wp .text-wp-secondary{color:#32db64}.card-wp-secondary{color:#fff;background-color:#32db64}.card-wp-secondary .card-content-wp,.card-wp-secondary .card-header-wp,.card-wp-secondary .card-title-wp,.card-wp-secondary h1,.card-wp-secondary h2,.card-wp-secondary h3,.card-wp-secondary h4,.card-wp-secondary h5,.card-wp-secondary h6,.card-wp-secondary p{color:#fff}.card-wp-secondary .card-content-wp-primary,.card-wp-secondary .card-header-wp-primary,.card-wp-secondary .card-title-wp-primary,.card-wp-secondary .text-wp-primary{color:#488aff}.card-wp-secondary .card-content-wp-secondary,.card-wp-secondary .card-header-wp-secondary,.card-wp-secondary .card-title-wp-secondary,.card-wp-secondary .text-wp-secondary{color:#32db64}.card-wp-secondary .card-content-wp-danger,.card-wp-secondary .card-header-wp-danger,.card-wp-secondary .card-title-wp-danger,.card-wp-secondary .text-wp-danger{color:#f53d3d}.card-wp-secondary .card-content-wp-light,.card-wp-secondary .card-header-wp-light,.card-wp-secondary .card-title-wp-light,.card-wp-secondary .text-wp-light{color:#f4f4f4}.card-wp-secondary .card-content-wp-dark,.card-wp-secondary .card-header-wp-dark,.card-wp-secondary .card-title-wp-dark,.card-wp-secondary .text-wp-dark{color:#222}.card-wp-secondary .card-content-wp-energized,.card-wp-secondary .card-header-wp-energized,.card-wp-secondary .card-title-wp-energized,.card-wp-secondary .text-wp-energized{color:#ffc527}.card-wp-secondary .card-content-wp-royal,.card-wp-secondary .card-header-wp-royal,.card-wp-secondary .card-title-wp-royal,.card-wp-secondary .text-wp-royal{color:#7e60ff}.card-wp-secondary .card-content-wp-subtle,.card-wp-secondary .card-header-wp-subtle,.card-wp-secondary .card-title-wp-subtle,.card-wp-secondary .text-wp-subtle{color:#444}.card-wp-secondary .card-content-wp-vibrant,.card-wp-secondary .card-header-wp-vibrant,.card-wp-secondary .card-title-wp-vibrant,.card-wp-secondary .text-wp-vibrant{color:#663399}.card-wp-secondary .card-content-wp-bright,.card-wp-secondary .card-header-wp-bright,.card-wp-secondary .card-title-wp-bright,.card-wp-secondary .text-wp-bright{color:#ffc125}.card-content-wp-secondary,.card-header-wp-secondary,.card-title-wp-secondary{color:#32db64}.card-wp .text-wp-danger{color:#f53d3d}.card-wp-danger{color:#fff;background-color:#f53d3d}.card-wp-danger .card-content-wp,.card-wp-danger .card-header-wp,.card-wp-danger .card-title-wp,.card-wp-danger h1,.card-wp-danger h2,.card-wp-danger h3,.card-wp-danger h4,.card-wp-danger h5,.card-wp-danger h6,.card-wp-danger p{color:#fff}.card-wp-danger .card-content-wp-primary,.card-wp-danger .card-header-wp-primary,.card-wp-danger .card-title-wp-primary,.card-wp-danger .text-wp-primary{color:#488aff}.card-wp-danger .card-content-wp-secondary,.card-wp-danger .card-header-wp-secondary,.card-wp-danger .card-title-wp-secondary,.card-wp-danger .text-wp-secondary{color:#32db64}.card-wp-danger .card-content-wp-danger,.card-wp-danger .card-header-wp-danger,.card-wp-danger .card-title-wp-danger,.card-wp-danger .text-wp-danger{color:#f53d3d}.card-wp-danger .card-content-wp-light,.card-wp-danger .card-header-wp-light,.card-wp-danger .card-title-wp-light,.card-wp-danger .text-wp-light{color:#f4f4f4}.card-wp-danger .card-content-wp-dark,.card-wp-danger .card-header-wp-dark,.card-wp-danger .card-title-wp-dark,.card-wp-danger .text-wp-dark{color:#222}.card-wp-danger .card-content-wp-energized,.card-wp-danger .card-header-wp-energized,.card-wp-danger .card-title-wp-energized,.card-wp-danger .text-wp-energized{color:#ffc527}.card-wp-danger .card-content-wp-royal,.card-wp-danger .card-header-wp-royal,.card-wp-danger .card-title-wp-royal,.card-wp-danger .text-wp-royal{color:#7e60ff}.card-wp-danger .card-content-wp-subtle,.card-wp-danger .card-header-wp-subtle,.card-wp-danger .card-title-wp-subtle,.card-wp-danger .text-wp-subtle{color:#444}.card-wp-danger .card-content-wp-vibrant,.card-wp-danger .card-header-wp-vibrant,.card-wp-danger .card-title-wp-vibrant,.card-wp-danger .text-wp-vibrant{color:#663399}.card-wp-danger .card-content-wp-bright,.card-wp-danger .card-header-wp-bright,.card-wp-danger .card-title-wp-bright,.card-wp-danger .text-wp-bright{color:#ffc125}.card-content-wp-danger,.card-header-wp-danger,.card-title-wp-danger{color:#f53d3d}.card-wp .text-wp-light{color:#f4f4f4}.card-wp-light{color:#000;background-color:#f4f4f4}.card-wp-light .card-content-wp,.card-wp-light .card-header-wp,.card-wp-light .card-title-wp,.card-wp-light h1,.card-wp-light h2,.card-wp-light h3,.card-wp-light h4,.card-wp-light h5,.card-wp-light h6,.card-wp-light p{color:#000}.card-wp-light .card-content-wp-primary,.card-wp-light .card-header-wp-primary,.card-wp-light .card-title-wp-primary,.card-wp-light .text-wp-primary{color:#488aff}.card-wp-light .card-content-wp-secondary,.card-wp-light .card-header-wp-secondary,.card-wp-light .card-title-wp-secondary,.card-wp-light .text-wp-secondary{color:#32db64}.card-wp-light .card-content-wp-danger,.card-wp-light .card-header-wp-danger,.card-wp-light .card-title-wp-danger,.card-wp-light .text-wp-danger{color:#f53d3d}.card-wp-light .card-content-wp-light,.card-wp-light .card-header-wp-light,.card-wp-light .card-title-wp-light,.card-wp-light .text-wp-light{color:#f4f4f4}.card-wp-light .card-content-wp-dark,.card-wp-light .card-header-wp-dark,.card-wp-light .card-title-wp-dark,.card-wp-light .text-wp-dark{color:#222}.card-wp-light .card-content-wp-energized,.card-wp-light .card-header-wp-energized,.card-wp-light .card-title-wp-energized,.card-wp-light .text-wp-energized{color:#ffc527}.card-wp-light .card-content-wp-royal,.card-wp-light .card-header-wp-royal,.card-wp-light .card-title-wp-royal,.card-wp-light .text-wp-royal{color:#7e60ff}.card-wp-light .card-content-wp-subtle,.card-wp-light .card-header-wp-subtle,.card-wp-light .card-title-wp-subtle,.card-wp-light .text-wp-subtle{color:#444}.card-wp-light .card-content-wp-vibrant,.card-wp-light .card-header-wp-vibrant,.card-wp-light .card-title-wp-vibrant,.card-wp-light .text-wp-vibrant{color:#663399}.card-wp-light .card-content-wp-bright,.card-wp-light .card-header-wp-bright,.card-wp-light .card-title-wp-bright,.card-wp-light .text-wp-bright{color:#ffc125}.card-content-wp-light,.card-header-wp-light,.card-title-wp-light{color:#f4f4f4}.card-wp .text-wp-dark{color:#222}.card-wp-dark{color:#fff;background-color:#222}.card-wp-dark .card-content-wp,.card-wp-dark .card-header-wp,.card-wp-dark .card-title-wp,.card-wp-dark h1,.card-wp-dark h2,.card-wp-dark h3,.card-wp-dark h4,.card-wp-dark h5,.card-wp-dark h6,.card-wp-dark p{color:#fff}.card-wp-dark .card-content-wp-primary,.card-wp-dark .card-header-wp-primary,.card-wp-dark .card-title-wp-primary,.card-wp-dark .text-wp-primary{color:#488aff}.card-wp-dark .card-content-wp-secondary,.card-wp-dark .card-header-wp-secondary,.card-wp-dark .card-title-wp-secondary,.card-wp-dark .text-wp-secondary{color:#32db64}.card-wp-dark .card-content-wp-danger,.card-wp-dark .card-header-wp-danger,.card-wp-dark .card-title-wp-danger,.card-wp-dark .text-wp-danger{color:#f53d3d}.card-wp-dark .card-content-wp-light,.card-wp-dark .card-header-wp-light,.card-wp-dark .card-title-wp-light,.card-wp-dark .text-wp-light{color:#f4f4f4}.card-wp-dark .card-content-wp-dark,.card-wp-dark .card-header-wp-dark,.card-wp-dark .card-title-wp-dark,.card-wp-dark .text-wp-dark{color:#222}.card-wp-dark .card-content-wp-energized,.card-wp-dark .card-header-wp-energized,.card-wp-dark .card-title-wp-energized,.card-wp-dark .text-wp-energized{color:#ffc527}.card-wp-dark .card-content-wp-royal,.card-wp-dark .card-header-wp-royal,.card-wp-dark .card-title-wp-royal,.card-wp-dark .text-wp-royal{color:#7e60ff}.card-wp-dark .card-content-wp-subtle,.card-wp-dark .card-header-wp-subtle,.card-wp-dark .card-title-wp-subtle,.card-wp-dark .text-wp-subtle{color:#444}.card-wp-dark .card-content-wp-vibrant,.card-wp-dark .card-header-wp-vibrant,.card-wp-dark .card-title-wp-vibrant,.card-wp-dark .text-wp-vibrant{color:#663399}.card-wp-dark .card-content-wp-bright,.card-wp-dark .card-header-wp-bright,.card-wp-dark .card-title-wp-bright,.card-wp-dark .text-wp-bright{color:#ffc125}.card-content-wp-dark,.card-header-wp-dark,.card-title-wp-dark{color:#222}.card-wp .text-wp-energized{color:#ffc527}.card-wp-energized{color:#000;background-color:#ffc527}.card-wp-energized .card-content-wp,.card-wp-energized .card-header-wp,.card-wp-energized .card-title-wp,.card-wp-energized h1,.card-wp-energized h2,.card-wp-energized h3,.card-wp-energized h4,.card-wp-energized h5,.card-wp-energized h6,.card-wp-energized p{color:#000}.card-wp-energized .card-content-wp-primary,.card-wp-energized .card-header-wp-primary,.card-wp-energized .card-title-wp-primary,.card-wp-energized .text-wp-primary{color:#488aff}.card-wp-energized .card-content-wp-secondary,.card-wp-energized .card-header-wp-secondary,.card-wp-energized .card-title-wp-secondary,.card-wp-energized .text-wp-secondary{color:#32db64}.card-wp-energized .card-content-wp-danger,.card-wp-energized .card-header-wp-danger,.card-wp-energized .card-title-wp-danger,.card-wp-energized .text-wp-danger{color:#f53d3d}.card-wp-energized .card-content-wp-light,.card-wp-energized .card-header-wp-light,.card-wp-energized .card-title-wp-light,.card-wp-energized .text-wp-light{color:#f4f4f4}.card-wp-energized .card-content-wp-dark,.card-wp-energized .card-header-wp-dark,.card-wp-energized .card-title-wp-dark,.card-wp-energized .text-wp-dark{color:#222}.card-wp-energized .card-content-wp-energized,.card-wp-energized .card-header-wp-energized,.card-wp-energized .card-title-wp-energized,.card-wp-energized .text-wp-energized{color:#ffc527}.card-wp-energized .card-content-wp-royal,.card-wp-energized .card-header-wp-royal,.card-wp-energized .card-title-wp-royal,.card-wp-energized .text-wp-royal{color:#7e60ff}.card-wp-energized .card-content-wp-subtle,.card-wp-energized .card-header-wp-subtle,.card-wp-energized .card-title-wp-subtle,.card-wp-energized .text-wp-subtle{color:#444}.card-wp-energized .card-content-wp-vibrant,.card-wp-energized .card-header-wp-vibrant,.card-wp-energized .card-title-wp-vibrant,.card-wp-energized .text-wp-vibrant{color:#663399}.card-wp-energized .card-content-wp-bright,.card-wp-energized .card-header-wp-bright,.card-wp-energized .card-title-wp-bright,.card-wp-energized .text-wp-bright{color:#ffc125}.card-content-wp-energized,.card-header-wp-energized,.card-title-wp-energized{color:#ffc527}.card-wp .text-wp-royal{color:#7e60ff}.card-wp-royal{color:#fff;background-color:#7e60ff}.card-wp-royal .card-content-wp,.card-wp-royal .card-header-wp,.card-wp-royal .card-title-wp,.card-wp-royal h1,.card-wp-royal h2,.card-wp-royal h3,.card-wp-royal h4,.card-wp-royal h5,.card-wp-royal h6,.card-wp-royal p{color:#fff}.card-wp-royal .card-content-wp-primary,.card-wp-royal .card-header-wp-primary,.card-wp-royal .card-title-wp-primary,.card-wp-royal .text-wp-primary{color:#488aff}.card-wp-royal .card-content-wp-secondary,.card-wp-royal .card-header-wp-secondary,.card-wp-royal .card-title-wp-secondary,.card-wp-royal .text-wp-secondary{color:#32db64}.card-wp-royal .card-content-wp-danger,.card-wp-royal .card-header-wp-danger,.card-wp-royal .card-title-wp-danger,.card-wp-royal .text-wp-danger{color:#f53d3d}.card-wp-royal .card-content-wp-light,.card-wp-royal .card-header-wp-light,.card-wp-royal .card-title-wp-light,.card-wp-royal .text-wp-light{color:#f4f4f4}.card-wp-royal .card-content-wp-dark,.card-wp-royal .card-header-wp-dark,.card-wp-royal .card-title-wp-dark,.card-wp-royal .text-wp-dark{color:#222}.card-wp-royal .card-content-wp-energized,.card-wp-royal .card-header-wp-energized,.card-wp-royal .card-title-wp-energized,.card-wp-royal .text-wp-energized{color:#ffc527}.card-wp-royal .card-content-wp-royal,.card-wp-royal .card-header-wp-royal,.card-wp-royal .card-title-wp-royal,.card-wp-royal .text-wp-royal{color:#7e60ff}.card-wp-royal .card-content-wp-subtle,.card-wp-royal .card-header-wp-subtle,.card-wp-royal .card-title-wp-subtle,.card-wp-royal .text-wp-subtle{color:#444}.card-wp-royal .card-content-wp-vibrant,.card-wp-royal .card-header-wp-vibrant,.card-wp-royal .card-title-wp-vibrant,.card-wp-royal .text-wp-vibrant{color:#663399}.card-wp-royal .card-content-wp-bright,.card-wp-royal .card-header-wp-bright,.card-wp-royal .card-title-wp-bright,.card-wp-royal .text-wp-bright{color:#ffc125}.card-content-wp-royal,.card-header-wp-royal,.card-title-wp-royal{color:#7e60ff}.card-wp .text-wp-subtle{color:#444}.card-wp-subtle{color:#fff;background-color:#444}.card-wp-subtle .card-content-wp,.card-wp-subtle .card-header-wp,.card-wp-subtle .card-title-wp,.card-wp-subtle h1,.card-wp-subtle h2,.card-wp-subtle h3,.card-wp-subtle h4,.card-wp-subtle h5,.card-wp-subtle h6,.card-wp-subtle p{color:#fff}.card-wp-subtle .card-content-wp-primary,.card-wp-subtle .card-header-wp-primary,.card-wp-subtle .card-title-wp-primary,.card-wp-subtle .text-wp-primary{color:#488aff}.card-wp-subtle .card-content-wp-secondary,.card-wp-subtle .card-header-wp-secondary,.card-wp-subtle .card-title-wp-secondary,.card-wp-subtle .text-wp-secondary{color:#32db64}.card-wp-subtle .card-content-wp-danger,.card-wp-subtle .card-header-wp-danger,.card-wp-subtle .card-title-wp-danger,.card-wp-subtle .text-wp-danger{color:#f53d3d}.card-wp-subtle .card-content-wp-light,.card-wp-subtle .card-header-wp-light,.card-wp-subtle .card-title-wp-light,.card-wp-subtle .text-wp-light{color:#f4f4f4}.card-wp-subtle .card-content-wp-dark,.card-wp-subtle .card-header-wp-dark,.card-wp-subtle .card-title-wp-dark,.card-wp-subtle .text-wp-dark{color:#222}.card-wp-subtle .card-content-wp-energized,.card-wp-subtle .card-header-wp-energized,.card-wp-subtle .card-title-wp-energized,.card-wp-subtle .text-wp-energized{color:#ffc527}.card-wp-subtle .card-content-wp-royal,.card-wp-subtle .card-header-wp-royal,.card-wp-subtle .card-title-wp-royal,.card-wp-subtle .text-wp-royal{color:#7e60ff}.card-wp-subtle .card-content-wp-subtle,.card-wp-subtle .card-header-wp-subtle,.card-wp-subtle .card-title-wp-subtle,.card-wp-subtle .text-wp-subtle{color:#444}.card-wp-subtle .card-content-wp-vibrant,.card-wp-subtle .card-header-wp-vibrant,.card-wp-subtle .card-title-wp-vibrant,.card-wp-subtle .text-wp-vibrant{color:#663399}.card-wp-subtle .card-content-wp-bright,.card-wp-subtle .card-header-wp-bright,.card-wp-subtle .card-title-wp-bright,.card-wp-subtle .text-wp-bright{color:#ffc125}.card-content-wp-subtle,.card-header-wp-subtle,.card-title-wp-subtle{color:#444}.card-wp .text-wp-vibrant{color:#663399}.card-wp-vibrant{color:#fff;background-color:#663399}.card-wp-vibrant .card-content-wp,.card-wp-vibrant .card-header-wp,.card-wp-vibrant .card-title-wp,.card-wp-vibrant h1,.card-wp-vibrant h2,.card-wp-vibrant h3,.card-wp-vibrant h4,.card-wp-vibrant h5,.card-wp-vibrant h6,.card-wp-vibrant p{color:#fff}.card-wp-vibrant .card-content-wp-primary,.card-wp-vibrant .card-header-wp-primary,.card-wp-vibrant .card-title-wp-primary,.card-wp-vibrant .text-wp-primary{color:#488aff}.card-wp-vibrant .card-content-wp-secondary,.card-wp-vibrant .card-header-wp-secondary,.card-wp-vibrant .card-title-wp-secondary,.card-wp-vibrant .text-wp-secondary{color:#32db64}.card-wp-vibrant .card-content-wp-danger,.card-wp-vibrant .card-header-wp-danger,.card-wp-vibrant .card-title-wp-danger,.card-wp-vibrant .text-wp-danger{color:#f53d3d}.card-wp-vibrant .card-content-wp-light,.card-wp-vibrant .card-header-wp-light,.card-wp-vibrant .card-title-wp-light,.card-wp-vibrant .text-wp-light{color:#f4f4f4}.card-wp-vibrant .card-content-wp-dark,.card-wp-vibrant .card-header-wp-dark,.card-wp-vibrant .card-title-wp-dark,.card-wp-vibrant .text-wp-dark{color:#222}.card-wp-vibrant .card-content-wp-energized,.card-wp-vibrant .card-header-wp-energized,.card-wp-vibrant .card-title-wp-energized,.card-wp-vibrant .text-wp-energized{color:#ffc527}.card-wp-vibrant .card-content-wp-royal,.card-wp-vibrant .card-header-wp-royal,.card-wp-vibrant .card-title-wp-royal,.card-wp-vibrant .text-wp-royal{color:#7e60ff}.card-wp-vibrant .card-content-wp-subtle,.card-wp-vibrant .card-header-wp-subtle,.card-wp-vibrant .card-title-wp-subtle,.card-wp-vibrant .text-wp-subtle{color:#444}.card-wp-vibrant .card-content-wp-vibrant,.card-wp-vibrant .card-header-wp-vibrant,.card-wp-vibrant .card-title-wp-vibrant,.card-wp-vibrant .text-wp-vibrant{color:#663399}.card-wp-vibrant .card-content-wp-bright,.card-wp-vibrant .card-header-wp-bright,.card-wp-vibrant .card-title-wp-bright,.card-wp-vibrant .text-wp-bright{color:#ffc125}.card-content-wp-vibrant,.card-header-wp-vibrant,.card-title-wp-vibrant{color:#663399}.card-wp .text-wp-bright{color:#ffc125}.card-wp-bright{color:#000;background-color:#ffc125}.card-wp-bright .card-content-wp,.card-wp-bright .card-header-wp,.card-wp-bright .card-title-wp,.card-wp-bright h1,.card-wp-bright h2,.card-wp-bright h3,.card-wp-bright h4,.card-wp-bright h5,.card-wp-bright h6,.card-wp-bright p{color:#000}.card-wp-bright .card-content-wp-primary,.card-wp-bright .card-header-wp-primary,.card-wp-bright .card-title-wp-primary,.card-wp-bright .text-wp-primary{color:#488aff}.card-wp-bright .card-content-wp-secondary,.card-wp-bright .card-header-wp-secondary,.card-wp-bright .card-title-wp-secondary,.card-wp-bright .text-wp-secondary{color:#32db64}.card-wp-bright .card-content-wp-danger,.card-wp-bright .card-header-wp-danger,.card-wp-bright .card-title-wp-danger,.card-wp-bright .text-wp-danger{color:#f53d3d}.card-wp-bright .card-content-wp-light,.card-wp-bright .card-header-wp-light,.card-wp-bright .card-title-wp-light,.card-wp-bright .text-wp-light{color:#f4f4f4}.card-wp-bright .card-content-wp-dark,.card-wp-bright .card-header-wp-dark,.card-wp-bright .card-title-wp-dark,.card-wp-bright .text-wp-dark{color:#222}.card-wp-bright .card-content-wp-energized,.card-wp-bright .card-header-wp-energized,.card-wp-bright .card-title-wp-energized,.card-wp-bright .text-wp-energized{color:#ffc527}.card-wp-bright .card-content-wp-royal,.card-wp-bright .card-header-wp-royal,.card-wp-bright .card-title-wp-royal,.card-wp-bright .text-wp-royal{color:#7e60ff}.card-wp-bright .card-content-wp-subtle,.card-wp-bright .card-header-wp-subtle,.card-wp-bright .card-title-wp-subtle,.card-wp-bright .text-wp-subtle{color:#444}.card-wp-bright .card-content-wp-vibrant,.card-wp-bright .card-header-wp-vibrant,.card-wp-bright .card-title-wp-vibrant,.card-wp-bright .text-wp-vibrant{color:#663399}.card-wp-bright .card-content-wp-bright,.card-wp-bright .card-header-wp-bright,.card-wp-bright .card-title-wp-bright,.card-wp-bright .text-wp-bright{color:#ffc125}.card-content-wp-bright,.card-header-wp-bright,.card-title-wp-bright{color:#ffc125}.checkbox-ios{position:relative;display:inline-block}.checkbox-ios .checkbox-icon{border-radius:50%;position:relative;width:21px;height:21px;border-width:1px;border-style:solid;border-color:#c8c7cc;background-color:#fff}.checkbox-ios .checkbox-checked{border-color:#488aff;background-color:#488aff}.checkbox-ios .checkbox-checked .checkbox-inner{left:7px;top:4px;position:absolute;width:4px;height:9px;border-width:1px;border-top-width:0;border-left-width:0;border-style:solid;border-color:#fff;-webkit-transform:rotate(45deg);transform:rotate(45deg)}.checkbox-ios.checkbox-disabled,.item-ios.item-checkbox-disabled ion-label{opacity:.3;pointer-events:none}.item.item-ios .checkbox-ios{position:static;display:block;margin:8px 16px 8px 2px}.item.item-ios .checkbox-ios[item-end],.item.item-ios .checkbox-ios[item-right]{margin:10px 8px 9px 0}.checkbox-ios-primary .checkbox-checked{border-color:#488aff;background-color:#488aff}.checkbox-ios-primary .checkbox-checked .checkbox-inner{border-color:#fff}.checkbox-ios-secondary .checkbox-checked{border-color:#32db64;background-color:#32db64}.checkbox-ios-secondary .checkbox-checked .checkbox-inner{border-color:#fff}.checkbox-ios-danger .checkbox-checked{border-color:#f53d3d;background-color:#f53d3d}.checkbox-ios-danger .checkbox-checked .checkbox-inner{border-color:#fff}.checkbox-ios-light .checkbox-checked{border-color:#f4f4f4;background-color:#f4f4f4}.checkbox-ios-light .checkbox-checked .checkbox-inner{border-color:#000}.checkbox-ios-dark .checkbox-checked{border-color:#222;background-color:#222}.checkbox-ios-dark .checkbox-checked .checkbox-inner{border-color:#fff}.checkbox-ios-energized .checkbox-checked{border-color:#ffc527;background-color:#ffc527}.checkbox-ios-energized .checkbox-checked .checkbox-inner{border-color:#000}.checkbox-ios-royal .checkbox-checked{border-color:#7e60ff;background-color:#7e60ff}.checkbox-ios-royal .checkbox-checked .checkbox-inner{border-color:#fff}.checkbox-ios-subtle .checkbox-checked{border-color:#444;background-color:#444}.checkbox-ios-subtle .checkbox-checked .checkbox-inner{border-color:#fff}.checkbox-ios-vibrant .checkbox-checked{border-color:#663399;background-color:#663399}.checkbox-ios-vibrant .checkbox-checked .checkbox-inner{border-color:#fff}.checkbox-ios-bright .checkbox-checked{border-color:#ffc125;background-color:#ffc125}.checkbox-ios-bright .checkbox-checked .checkbox-inner{border-color:#000}.checkbox-md{position:relative;display:inline-block}.checkbox-md .checkbox-icon{border-radius:2px;position:relative;width:16px;height:16px;border-width:2px;border-style:solid;border-color:#787878;background-color:#fff;-webkit-transition-duration:280ms;transition-duration:280ms;-webkit-transition-property:background;transition-property:background;-webkit-transition-timing-function:cubic-bezier(.4,0,.2,1);transition-timing-function:cubic-bezier(.4,0,.2,1)}.checkbox-md .checkbox-checked{border-color:#488aff;background-color:#488aff}.checkbox-md .checkbox-checked .checkbox-inner{left:4px;top:0;position:absolute;width:5px;height:10px;border-width:2px;border-top-width:0;border-left-width:0;border-style:solid;border-color:#fff;-webkit-transform:rotate(45deg);transform:rotate(45deg)}.checkbox-md.checkbox-disabled,.item-md.item-checkbox-disabled ion-label{opacity:.3;pointer-events:none}.item.item-md .checkbox-md{position:static;display:block;margin:9px 36px 9px 4px}.item.item-md .checkbox-md[item-end],.item.item-md .checkbox-md[item-right]{margin:11px 10px 10px 0}.checkbox-md+.item-inner ion-label{margin-left:0}.checkbox-md-primary .checkbox-checked{border-color:#488aff;background-color:#488aff}.checkbox-md-primary .checkbox-checked .checkbox-inner{border-color:#fff}.checkbox-md-secondary .checkbox-checked{border-color:#32db64;background-color:#32db64}.checkbox-md-secondary .checkbox-checked .checkbox-inner{border-color:#fff}.checkbox-md-danger .checkbox-checked{border-color:#f53d3d;background-color:#f53d3d}.checkbox-md-danger .checkbox-checked .checkbox-inner{border-color:#fff}.checkbox-md-light .checkbox-checked{border-color:#f4f4f4;background-color:#f4f4f4}.checkbox-md-light .checkbox-checked .checkbox-inner{border-color:#000}.checkbox-md-dark .checkbox-checked{border-color:#222;background-color:#222}.checkbox-md-dark .checkbox-checked .checkbox-inner{border-color:#fff}.checkbox-md-energized .checkbox-checked{border-color:#ffc527;background-color:#ffc527}.checkbox-md-energized .checkbox-checked .checkbox-inner{border-color:#000}.checkbox-md-royal .checkbox-checked{border-color:#7e60ff;background-color:#7e60ff}.checkbox-md-royal .checkbox-checked .checkbox-inner{border-color:#fff}.checkbox-md-subtle .checkbox-checked{border-color:#444;background-color:#444}.checkbox-md-subtle .checkbox-checked .checkbox-inner{border-color:#fff}.checkbox-md-vibrant .checkbox-checked{border-color:#663399;background-color:#663399}.checkbox-md-vibrant .checkbox-checked .checkbox-inner{border-color:#fff}.checkbox-md-bright .checkbox-checked{border-color:#ffc125;background-color:#ffc125}.checkbox-md-bright .checkbox-checked .checkbox-inner{border-color:#000}.checkbox-wp{position:relative;display:inline-block}.checkbox-wp .checkbox-icon{border-radius:0;position:relative;width:16px;height:16px;border-width:2px;border-style:solid;border-color:#333;background-color:#fff}.checkbox-wp .checkbox-checked{border-color:#488aff;background-color:#488aff}.checkbox-wp .checkbox-checked .checkbox-inner{left:3px;top:-2px;position:absolute;width:6px;height:12px;border-width:1px;border-top-width:0;border-left-width:0;border-style:solid;border-color:#fff;-webkit-transform:rotate(45deg);transform:rotate(45deg)}.checkbox-wp.checkbox-disabled,.item-wp.item-checkbox-disabled ion-label{opacity:.3;pointer-events:none}.item.item-wp .checkbox-wp{position:static;display:block;margin:9px 16px 9px 4px}.item.item-wp .checkbox-wp[item-end],.item.item-wp .checkbox-wp[item-right]{margin:11px 10px 10px 0}.checkbox-wp+.item-inner ion-label{margin-left:0}.checkbox-wp-primary .checkbox-checked{border-color:#488aff;background-color:#488aff}.checkbox-wp-primary .checkbox-checked .checkbox-inner{border-color:#fff}.checkbox-wp-secondary .checkbox-checked{border-color:#32db64;background-color:#32db64}.checkbox-wp-secondary .checkbox-checked .checkbox-inner{border-color:#fff}.checkbox-wp-danger .checkbox-checked{border-color:#f53d3d;background-color:#f53d3d}.checkbox-wp-danger .checkbox-checked .checkbox-inner{border-color:#fff}.checkbox-wp-light .checkbox-checked{border-color:#f4f4f4;background-color:#f4f4f4}.checkbox-wp-light .checkbox-checked .checkbox-inner{border-color:#000}.checkbox-wp-dark .checkbox-checked{border-color:#222;background-color:#222}.checkbox-wp-dark .checkbox-checked .checkbox-inner{border-color:#fff}.checkbox-wp-energized .checkbox-checked{border-color:#ffc527;background-color:#ffc527}.checkbox-wp-energized .checkbox-checked .checkbox-inner{border-color:#000}.checkbox-wp-royal .checkbox-checked{border-color:#7e60ff;background-color:#7e60ff}.checkbox-wp-royal .checkbox-checked .checkbox-inner{border-color:#fff}.checkbox-wp-subtle .checkbox-checked{border-color:#444;background-color:#444}.checkbox-wp-subtle .checkbox-checked .checkbox-inner{border-color:#fff}.checkbox-wp-vibrant .checkbox-checked{border-color:#663399;background-color:#663399}.checkbox-wp-vibrant .checkbox-checked .checkbox-inner{border-color:#fff}.checkbox-wp-bright .checkbox-checked{border-color:#ffc125;background-color:#ffc125}.checkbox-wp-bright .checkbox-checked .checkbox-inner{border-color:#000}ion-chip{display:-webkit-inline-box;display:-webkit-inline-flex;display:-ms-inline-flexbox;display:inline-flex;-webkit-align-self:center;-ms-flex-item-align:center;align-self:center;font-weight:400;vertical-align:middle;-webkit-box-sizing:border-box;box-sizing:border-box}ion-chip .button{border-radius:50%;width:32px;height:32px;margin:0}ion-chip ion-icon{text-align:center;border-radius:50%;width:32px;height:32px;font-size:18px;line-height:32px}ion-chip ion-avatar{border-radius:50%;width:32px;min-width:32px;height:32px;min-height:32px}ion-chip ion-avatar img{border-radius:50%;display:block;width:100%;max-width:100%;height:100%;max-height:100%}.chip-ios{border-radius:16px;height:32px;font-size:13px;line-height:32px;color:rgba(0,0,0,.87);background:rgba(0,0,0,.12);margin:2px 0}.chip-ios>ion-label{margin:0 10px}.chip-ios>ion-icon{color:#fff;background-color:#488aff}.chip-ios .icon-ios-primary,.chip-ios-primary{color:#fff;background-color:#488aff}.chip-ios .icon-ios-secondary,.chip-ios-secondary{color:#fff;background-color:#32db64}.chip-ios .icon-ios-danger,.chip-ios-danger{color:#fff;background-color:#f53d3d}.chip-ios .icon-ios-light,.chip-ios-light{color:#000;background-color:#f4f4f4}.chip-ios .icon-ios-dark,.chip-ios-dark{color:#fff;background-color:#222}.chip-ios .icon-ios-energized,.chip-ios-energized{color:#000;background-color:#ffc527}.chip-ios .icon-ios-royal,.chip-ios-royal{color:#fff;background-color:#7e60ff}.chip-ios .icon-ios-subtle,.chip-ios-subtle{color:#fff;background-color:#444}.chip-ios .icon-ios-vibrant,.chip-ios-vibrant{color:#fff;background-color:#663399}.chip-ios .icon-ios-bright,.chip-ios-bright{color:#000;background-color:#ffc125}.chip-md{border-radius:16px;height:32px;font-size:13px;line-height:32px;color:rgba(0,0,0,.87);background:rgba(0,0,0,.12);margin:2px 0}.chip-md>ion-label{margin:0 10px}.chip-md>ion-icon{color:#fff;background-color:#488aff}.chip-md .icon-md-primary,.chip-md-primary{color:#fff;background-color:#488aff}.chip-md .icon-md-secondary,.chip-md-secondary{color:#fff;background-color:#32db64}.chip-md .icon-md-danger,.chip-md-danger{color:#fff;background-color:#f53d3d}.chip-md .icon-md-light,.chip-md-light{color:#000;background-color:#f4f4f4}.chip-md .icon-md-dark,.chip-md-dark{color:#fff;background-color:#222}.chip-md .icon-md-energized,.chip-md-energized{color:#000;background-color:#ffc527}.chip-md .icon-md-royal,.chip-md-royal{color:#fff;background-color:#7e60ff}.chip-md .icon-md-subtle,.chip-md-subtle{color:#fff;background-color:#444}.chip-md .icon-md-vibrant,.chip-md-vibrant{color:#fff;background-color:#663399}.chip-md .icon-md-bright,.chip-md-bright{color:#000;background-color:#ffc125}.chip-wp{border-radius:16px;height:32px;font-size:13px;line-height:32px;color:rgba(0,0,0,.87);background:rgba(0,0,0,.12);margin:2px 0}.chip-wp>ion-label{margin:0 10px}.chip-wp>ion-icon{color:#fff;background-color:#488aff}.chip-wp .button{border:0}.chip-wp .icon-wp-primary,.chip-wp-primary{color:#fff;background-color:#488aff}.chip-wp .icon-wp-secondary,.chip-wp-secondary{color:#fff;background-color:#32db64}.chip-wp .icon-wp-danger,.chip-wp-danger{color:#fff;background-color:#f53d3d}.chip-wp .icon-wp-light,.chip-wp-light{color:#000;background-color:#f4f4f4}.chip-wp .icon-wp-dark,.chip-wp-dark{color:#fff;background-color:#222}.chip-wp .icon-wp-energized,.chip-wp-energized{color:#000;background-color:#ffc527}.chip-wp .icon-wp-royal,.chip-wp-royal{color:#fff;background-color:#7e60ff}.chip-wp .icon-wp-subtle,.chip-wp-subtle{color:#fff;background-color:#444}.chip-wp .icon-wp-vibrant,.chip-wp-vibrant{color:#fff;background-color:#663399}.chip-wp .icon-wp-bright,.chip-wp-bright{color:#000;background-color:#ffc125}ion-content{left:0;top:0;position:relative;display:block;width:100%;height:100%;contain:layout size style}.ion-page>ion-content{position:absolute}a{color:#488aff}.scroll-content{left:0;right:0;top:0;bottom:0;position:absolute;z-index:1;display:block;overflow-x:hidden;overflow-y:scroll;-webkit-overflow-scrolling:touch;will-change:scroll-position;contain:size style layout}ion-content.js-scroll>.scroll-content{position:relative;min-height:100%;overflow-x:initial;overflow-y:initial;-webkit-overflow-scrolling:auto;will-change:initial}.disable-scroll .ion-page{pointer-events:none;-ms-touch-action:none;touch-action:none}ion-content.has-refresher>.scroll-content{background-color:inherit}.fixed-content{left:0;right:0;top:0;bottom:0;position:absolute;display:block}[ion-fixed]{position:absolute;z-index:999;-webkit-transform:translateZ(0);transform:translateZ(0)}ion-app [no-padding],ion-app [no-padding] .scroll-content{padding:0}ion-app [no-margin],ion-app [no-margin] .scroll-content{margin:0}.content-ios{color:#000;background-color:#fff}.content-ios.outer-content{background:#efeff4}.content-ios hr{height:.55px;background-color:rgba(0,0,0,.12)}.ios .ion-page.show-page~.nav-decor{left:0;top:0;position:absolute;z-index:0;display:block;width:100%;height:100%;background:#000;pointer-events:none}ion-app.ios [padding]{padding:16px}ion-app.ios [padding-top]{padding-top:16px}ion-app.ios [padding-left]{padding-left:16px}ion-app.ios [padding-right]{padding-right:16px}ion-app.ios [padding-bottom]{padding-bottom:16px}ion-app.ios [padding-vertical]{padding-top:16px;padding-bottom:16px}ion-app.ios [padding-horizontal]{padding-left:16px;padding-right:16px}ion-app.ios [padding] .scroll-content{padding:16px}@media screen and (orientation:landscape){ion-app.ios [padding] .scroll-content{padding-left:calc(constant(safe-area-inset-left) + 16px);padding-top:16px;padding-bottom:16px;padding:16px calc(env(safe-area-inset-right) + 16px) 16px calc(env(safe-area-inset-left) + 16px)}}ion-app.ios [padding-top] .scroll-content{padding-top:16px}@media screen and (orientation:landscape){ion-app.ios [padding-top] .scroll-content{padding-top:16px;padding-top:16px}}ion-app.ios [padding-left] .scroll-content{padding-left:16px}@media screen and (orientation:landscape){ion-app.ios [padding-left] .scroll-content{padding-left:calc(constant(safe-area-inset-left) + 16px);padding-left:calc(env(safe-area-inset-left) + 16px)}}ion-app.ios [padding-right] .scroll-content{padding-right:16px}@media screen and (orientation:landscape){ion-app.ios [padding-right] .scroll-content{padding-right:calc(constant(safe-area-inset-right) + 16px);padding-right:calc(env(safe-area-inset-right) + 16px)}}ion-app.ios [padding-bottom] .scroll-content{padding-bottom:16px}@media screen and (orientation:landscape){ion-app.ios [padding-bottom] .scroll-content{padding-bottom:16px;padding-bottom:16px}}ion-app.ios [padding-vertical] .scroll-content{padding-top:16px;padding-bottom:16px}@media screen and (orientation:landscape){ion-app.ios [padding-vertical] .scroll-content{padding-top:16px;padding-bottom:16px;padding-top:16px;padding-bottom:16px}}ion-app.ios [padding-horizontal] .scroll-content{padding-left:16px;padding-right:16px}@media screen and (orientation:landscape){ion-app.ios [padding-horizontal] .scroll-content{padding-left:calc(constant(safe-area-inset-left) + 16px);padding-right:calc(constant(safe-area-inset-right) + 16px);padding-left:calc(env(safe-area-inset-left) + 16px);padding-right:calc(env(safe-area-inset-right) + 16px)}}ion-app.ios [margin],ion-app.ios [margin] .scroll-content{margin:16px}ion-app.ios [margin-top],ion-app.ios [margin-top] .scroll-content{margin-top:16px}ion-app.ios [margin-left],ion-app.ios [margin-left] .scroll-content{margin-left:16px}ion-app.ios [margin-start],ion-app.ios [margin-start] .scroll-content{margin-left:16px}ion-app.ios [margin-right],ion-app.ios [margin-right] .scroll-content{margin-right:16px}ion-app.ios [margin-end],ion-app.ios [margin-end] .scroll-content{margin-right:16px}ion-app.ios [margin-bottom],ion-app.ios [margin-bottom] .scroll-content{margin-bottom:16px}ion-app.ios [margin-vertical],ion-app.ios [margin-vertical] .scroll-content{margin-top:16px;margin-bottom:16px}ion-app.ios [margin-horizontal],ion-app.ios [margin-horizontal] .scroll-content{margin-left:16px;margin-right:16px}.content-ios:not([no-bounce])>.scroll-content::after,.content-ios:not([no-bounce])>.scroll-content::before{position:absolute;width:1px;height:1px;content:\"\"}.content-ios:not([no-bounce])>.scroll-content::before{bottom:-1px}.content-ios:not([no-bounce])>.scroll-content::after{top:-1px}.platform-core .content-ios .scroll-content::after,.platform-core .content-ios .scroll-content::before{position:initial;top:initial;bottom:initial;width:initial;height:initial}.content-md{color:#000;background-color:#fff}.content-md hr{background-color:rgba(0,0,0,.08)}ion-app.md [padding]{padding:16px}ion-app.md [padding-top]{padding-top:16px}ion-app.md [padding-left]{padding-left:16px}ion-app.md [padding-right]{padding-right:16px}ion-app.md [padding-bottom]{padding-bottom:16px}ion-app.md [padding-vertical]{padding-top:16px;padding-bottom:16px}ion-app.md [padding-horizontal]{padding-left:16px;padding-right:16px}ion-app.md [padding] .scroll-content{padding:16px}@media screen and (orientation:landscape){ion-app.md [padding] .scroll-content{padding-left:calc(constant(safe-area-inset-left) + 16px);padding-top:16px;padding-bottom:16px;padding:16px calc(env(safe-area-inset-right) + 16px) 16px calc(env(safe-area-inset-left) + 16px)}}ion-app.md [padding-top] .scroll-content{padding-top:16px}@media screen and (orientation:landscape){ion-app.md [padding-top] .scroll-content{padding-top:16px;padding-top:16px}}ion-app.md [padding-left] .scroll-content{padding-left:16px}@media screen and (orientation:landscape){ion-app.md [padding-left] .scroll-content{padding-left:calc(constant(safe-area-inset-left) + 16px);padding-left:calc(env(safe-area-inset-left) + 16px)}}ion-app.md [padding-right] .scroll-content{padding-right:16px}@media screen and (orientation:landscape){ion-app.md [padding-right] .scroll-content{padding-right:calc(constant(safe-area-inset-right) + 16px);padding-right:calc(env(safe-area-inset-right) + 16px)}}ion-app.md [padding-bottom] .scroll-content{padding-bottom:16px}@media screen and (orientation:landscape){ion-app.md [padding-bottom] .scroll-content{padding-bottom:16px;padding-bottom:16px}}ion-app.md [padding-vertical] .scroll-content{padding-top:16px;padding-bottom:16px}@media screen and (orientation:landscape){ion-app.md [padding-vertical] .scroll-content{padding-top:16px;padding-bottom:16px;padding-top:16px;padding-bottom:16px}}ion-app.md [padding-horizontal] .scroll-content{padding-left:16px;padding-right:16px}@media screen and (orientation:landscape){ion-app.md [padding-horizontal] .scroll-content{padding-left:calc(constant(safe-area-inset-left) + 16px);padding-right:calc(constant(safe-area-inset-right) + 16px);padding-left:calc(env(safe-area-inset-left) + 16px);padding-right:calc(env(safe-area-inset-right) + 16px)}}ion-app.md [margin],ion-app.md [margin] .scroll-content{margin:16px}ion-app.md [margin-top],ion-app.md [margin-top] .scroll-content{margin-top:16px}ion-app.md [margin-left],ion-app.md [margin-left] .scroll-content{margin-left:16px}ion-app.md [margin-start],ion-app.md [margin-start] .scroll-content{margin-left:16px}ion-app.md [margin-right],ion-app.md [margin-right] .scroll-content{margin-right:16px}ion-app.md [margin-end],ion-app.md [margin-end] .scroll-content{margin-right:16px}ion-app.md [margin-bottom],ion-app.md [margin-bottom] .scroll-content{margin-bottom:16px}ion-app.md [margin-vertical],ion-app.md [margin-vertical] .scroll-content{margin-top:16px;margin-bottom:16px}ion-app.md [margin-horizontal],ion-app.md [margin-horizontal] .scroll-content{margin-left:16px;margin-right:16px}.content-wp{color:#000;background-color:#fff}.content-wp hr{background-color:rgba(0,0,0,.08)}ion-app.wp [padding]{padding:16px}ion-app.wp [padding-top]{padding-top:16px}ion-app.wp [padding-left]{padding-left:16px}ion-app.wp [padding-right]{padding-right:16px}ion-app.wp [padding-bottom]{padding-bottom:16px}ion-app.wp [padding-vertical]{padding-top:16px;padding-bottom:16px}ion-app.wp [padding-horizontal]{padding-left:16px;padding-right:16px}ion-app.wp [padding] .scroll-content{padding:16px}@media screen and (orientation:landscape){ion-app.wp [padding] .scroll-content{padding-left:calc(constant(safe-area-inset-left) + 16px);padding-top:16px;padding-bottom:16px;padding:16px calc(env(safe-area-inset-right) + 16px) 16px calc(env(safe-area-inset-left) + 16px)}}ion-app.wp [padding-top] .scroll-content{padding-top:16px}@media screen and (orientation:landscape){ion-app.wp [padding-top] .scroll-content{padding-top:16px;padding-top:16px}}ion-app.wp [padding-left] .scroll-content{padding-left:16px}@media screen and (orientation:landscape){ion-app.wp [padding-left] .scroll-content{padding-left:calc(constant(safe-area-inset-left) + 16px);padding-left:calc(env(safe-area-inset-left) + 16px)}}ion-app.wp [padding-right] .scroll-content{padding-right:16px}@media screen and (orientation:landscape){ion-app.wp [padding-right] .scroll-content{padding-right:calc(constant(safe-area-inset-right) + 16px);padding-right:calc(env(safe-area-inset-right) + 16px)}}ion-app.wp [padding-bottom] .scroll-content{padding-bottom:16px}@media screen and (orientation:landscape){ion-app.wp [padding-bottom] .scroll-content{padding-bottom:16px;padding-bottom:16px}}ion-app.wp [padding-vertical] .scroll-content{padding-top:16px;padding-bottom:16px}@media screen and (orientation:landscape){ion-app.wp [padding-vertical] .scroll-content{padding-top:16px;padding-bottom:16px;padding-top:16px;padding-bottom:16px}}ion-app.wp [padding-horizontal] .scroll-content{padding-left:16px;padding-right:16px}@media screen and (orientation:landscape){ion-app.wp [padding-horizontal] .scroll-content{padding-left:calc(constant(safe-area-inset-left) + 16px);padding-right:calc(constant(safe-area-inset-right) + 16px);padding-left:calc(env(safe-area-inset-left) + 16px);padding-right:calc(env(safe-area-inset-right) + 16px)}}ion-app.wp [margin],ion-app.wp [margin] .scroll-content{margin:16px}ion-app.wp [margin-top],ion-app.wp [margin-top] .scroll-content{margin-top:16px}ion-app.wp [margin-left],ion-app.wp [margin-left] .scroll-content{margin-left:16px}ion-app.wp [margin-start],ion-app.wp [margin-start] .scroll-content{margin-left:16px}ion-app.wp [margin-right],ion-app.wp [margin-right] .scroll-content{margin-right:16px}ion-app.wp [margin-end],ion-app.wp [margin-end] .scroll-content{margin-right:16px}ion-app.wp [margin-bottom],ion-app.wp [margin-bottom] .scroll-content{margin-bottom:16px}ion-app.wp [margin-vertical],ion-app.wp [margin-vertical] .scroll-content{margin-top:16px;margin-bottom:16px}ion-app.wp [margin-horizontal],ion-app.wp [margin-horizontal] .scroll-content{margin-left:16px;margin-right:16px}ion-datetime{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;overflow:hidden}.datetime-text{overflow:hidden;-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1;min-width:16px;min-height:1.2em;font-size:inherit;line-height:1.2;text-overflow:ellipsis;white-space:nowrap}.datetime-disabled,.item-datetime-disabled ion-label{opacity:.4;pointer-events:none}.item-label-floating ion-datetime,.item-label-stacked ion-datetime{padding-left:0;width:100%}.datetime-ios{padding:11px 8px 11px 16px}.datetime-ios .datetime-placeholder{color:#999}.datetime-md{padding:13px 8px 13px 16px}.datetime-md .datetime-placeholder{color:#999}.datetime-wp{padding:13px 8px 13px 16px;min-width:45%}.datetime-wp .datetime-text{padding:0 8px;min-height:3.4rem;border:2px solid rgba(0,0,0,.5);line-height:3rem}.item-datetime .datetime-wp ion-label[floating]{-webkit-transform:translate3d(8px,41px,0);transform:translate3d(8px,41px,0)}.datetime-wp .datetime-placeholder{color:rgba(0,0,0,.5)}.fab{text-align:center;-moz-appearance:none;-ms-appearance:none;-webkit-appearance:none;appearance:none;border-radius:50%;position:relative;z-index:0;display:block;overflow:hidden;width:56px;height:56px;font-size:14px;line-height:56px;text-overflow:ellipsis;text-transform:none;white-space:nowrap;cursor:pointer;-webkit-transition:background-color,opacity .1s linear;transition:background-color,opacity .1s linear;background-clip:padding-box;-webkit-font-kerning:none;font-kerning:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;contain:strict}.fab ion-icon{-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1;font-size:2.4rem}.fab[mini]{margin:8px;width:40px;height:40px;line-height:40px}.fab[mini] .fab-close-icon{line-height:40px}ion-fab{position:absolute;z-index:999}ion-fab[center]{left:50%;margin-left:-28px}ion-fab[middle]{margin-top:-28px;top:50%}ion-fab[top]{top:10px}ion-fab[right]{right:10px;right:calc(10px + constant(safe-area-inset-right));right:calc(10px + env(safe-area-inset-right))}ion-fab[end]{right:10px;right:calc(constant(safe-area-inset-right) + 10px);right:calc(env(safe-area-inset-right) + 10px)}ion-fab[bottom]{bottom:10px}ion-fab[left]{left:10px;left:calc(10px + constant(safe-area-inset-left));left:calc(10px + env(safe-area-inset-left))}ion-fab[start]{left:10px;left:calc(constant(safe-area-inset-left) + 10px);left:calc(env(safe-area-inset-left) + 10px)}ion-fab[top][edge]{top:-28px}ion-fab[bottom][edge]{bottom:-28px}ion-fab-list{margin:66px 0;position:absolute;top:0;display:none;-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;min-width:56px;min-height:56px}.fab-in-list{margin:8px 0;width:40px;height:40px;opacity:0;visibility:hidden;-webkit-transform:scale(0);transform:scale(0)}.fab-in-list.show{opacity:1;visibility:visible;-webkit-transform:scale(1);transform:scale(1)}ion-fab-list[side=left] .fab-in-list,ion-fab-list[side=right] .fab-in-list{margin:0 8px}ion-fab-list[side=top]{top:auto;bottom:0;-webkit-box-orient:vertical;-webkit-box-direction:reverse;-webkit-flex-direction:column-reverse;-ms-flex-direction:column-reverse;flex-direction:column-reverse}ion-fab-list[side=left]{margin:0 66px;right:0;-webkit-box-orient:horizontal;-webkit-box-direction:reverse;-webkit-flex-direction:row-reverse;-ms-flex-direction:row-reverse;flex-direction:row-reverse}ion-fab-list[side=right]{margin:0 66px;left:0;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row}.fab-list-active{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.fab-close-icon{left:0;right:0;top:0;position:absolute;line-height:56px;opacity:0;-webkit-transform:scale(.4) rotateZ(-45deg);transform:scale(.4) rotateZ(-45deg);-webkit-transition:all ease-in-out .3s;transition:all ease-in-out .3s;-webkit-transition-property:opacity,-webkit-transform;transition-property:opacity,-webkit-transform;transition-property:transform,opacity;transition-property:transform,opacity,-webkit-transform}.fab .button-inner{-webkit-transition:all ease-in-out .3s;transition:all ease-in-out .3s;-webkit-transition-property:opacity,-webkit-transform;transition-property:opacity,-webkit-transform;transition-property:transform,opacity;transition-property:transform,opacity,-webkit-transform}.fab-close-active .fab-close-icon{opacity:1;-webkit-transform:scale(1) rotateZ(0);transform:scale(1) rotateZ(0)}.fab-close-active .button-inner{opacity:0;-webkit-transform:scale(.4) rotateZ(45deg);transform:scale(.4) rotateZ(45deg)}.fab-ios{color:#fff;background-color:#488aff}.fab-ios.activated{background-color:#427feb}.fab-ios-in-list{color:#000;background-color:#f4f4f4;-webkit-transition:opacity .2s ease 10ms,-webkit-transform .2s ease 10ms;transition:opacity .2s ease 10ms,-webkit-transform .2s ease 10ms;transition:transform .2s ease 10ms,opacity .2s ease 10ms;transition:transform .2s ease 10ms,opacity .2s ease 10ms,-webkit-transform .2s ease 10ms}.fab-ios-in-list.activated{background-color:#e0e0e0}.fab-ios-primary{color:#fff;background-color:#488aff}.fab-ios-primary.activated{background-color:#427feb}.fab-ios-secondary{color:#fff;background-color:#32db64}.fab-ios-secondary.activated{background-color:#2ec95c}.fab-ios-danger{color:#fff;background-color:#f53d3d}.fab-ios-danger.activated{background-color:#e13838}.fab-ios-light{color:#000;background-color:#f4f4f4}.fab-ios-light.activated{background-color:#e0e0e0}.fab-ios-dark{color:#fff;background-color:#222}.fab-ios-dark.activated{background-color:#343434}.fab-ios-energized{color:#000;background-color:#ffc527}.fab-ios-energized.activated{background-color:#ebb524}.fab-ios-royal{color:#fff;background-color:#7e60ff}.fab-ios-royal.activated{background-color:#7458eb}.fab-ios-subtle{color:#fff;background-color:#444}.fab-ios-subtle.activated{background-color:#535353}.fab-ios-vibrant{color:#fff;background-color:#663399}.fab-ios-vibrant.activated{background-color:#7243a1}.fab-ios-bright{color:#000;background-color:#ffc125}.fab-ios-bright.activated{background-color:#ebb222}.fab-md{color:#fff;background-color:#488aff;-webkit-box-shadow:0 4px 6px 0 rgba(0,0,0,.14),0 4px 5px rgba(0,0,0,.1);box-shadow:0 4px 6px 0 rgba(0,0,0,.14),0 4px 5px rgba(0,0,0,.1);-webkit-transition:background-color .3s cubic-bezier(.4,0,.2,1),color .3s cubic-bezier(.4,0,.2,1),-webkit-box-shadow .3s cubic-bezier(.4,0,.2,1);transition:background-color .3s cubic-bezier(.4,0,.2,1),color .3s cubic-bezier(.4,0,.2,1),-webkit-box-shadow .3s cubic-bezier(.4,0,.2,1);transition:box-shadow .3s cubic-bezier(.4,0,.2,1),background-color .3s cubic-bezier(.4,0,.2,1),color .3s cubic-bezier(.4,0,.2,1);transition:box-shadow .3s cubic-bezier(.4,0,.2,1),background-color .3s cubic-bezier(.4,0,.2,1),color .3s cubic-bezier(.4,0,.2,1),-webkit-box-shadow .3s cubic-bezier(.4,0,.2,1)}.fab-md.activated{background-color:#427feb;-webkit-box-shadow:0 5px 15px 0 rgba(0,0,0,.4),0 4px 7px 0 rgba(0,0,0,.1);box-shadow:0 5px 15px 0 rgba(0,0,0,.4),0 4px 7px 0 rgba(0,0,0,.1)}.fab-md-in-list{color:#000;background-color:#f4f4f4;-webkit-transition:opacity .2s ease 10ms,background-color .3s cubic-bezier(.4,0,.2,1),color .3s cubic-bezier(.4,0,.2,1),-webkit-transform .2s ease 10ms,-webkit-box-shadow .3s cubic-bezier(.4,0,.2,1);transition:opacity .2s ease 10ms,background-color .3s cubic-bezier(.4,0,.2,1),color .3s cubic-bezier(.4,0,.2,1),-webkit-transform .2s ease 10ms,-webkit-box-shadow .3s cubic-bezier(.4,0,.2,1);transition:transform .2s ease 10ms,opacity .2s ease 10ms,box-shadow .3s cubic-bezier(.4,0,.2,1),background-color .3s cubic-bezier(.4,0,.2,1),color .3s cubic-bezier(.4,0,.2,1);transition:transform .2s ease 10ms,opacity .2s ease 10ms,box-shadow .3s cubic-bezier(.4,0,.2,1),background-color .3s cubic-bezier(.4,0,.2,1),color .3s cubic-bezier(.4,0,.2,1),-webkit-transform .2s ease 10ms,-webkit-box-shadow .3s cubic-bezier(.4,0,.2,1)}.fab-md-in-list.activated{background-color:#e0e0e0}.fab-md .button-effect{background-color:#fff}.fab-md-primary{color:#fff;background-color:#488aff}.fab-md-primary.activated{background-color:#427feb}.fab-md-primary .button-effect{background-color:#fff}.fab-md-secondary{color:#fff;background-color:#32db64}.fab-md-secondary.activated{background-color:#2ec95c}.fab-md-secondary .button-effect{background-color:#fff}.fab-md-danger{color:#fff;background-color:#f53d3d}.fab-md-danger.activated{background-color:#e13838}.fab-md-danger .button-effect{background-color:#fff}.fab-md-light{color:#000;background-color:#f4f4f4}.fab-md-light.activated{background-color:#e0e0e0}.fab-md-light .button-effect{background-color:#000}.fab-md-dark{color:#fff;background-color:#222}.fab-md-dark.activated{background-color:#343434}.fab-md-dark .button-effect{background-color:#fff}.fab-md-energized{color:#000;background-color:#ffc527}.fab-md-energized.activated{background-color:#ebb524}.fab-md-energized .button-effect{background-color:#000}.fab-md-royal{color:#fff;background-color:#7e60ff}.fab-md-royal.activated{background-color:#7458eb}.fab-md-royal .button-effect{background-color:#fff}.fab-md-subtle{color:#fff;background-color:#444}.fab-md-subtle.activated{background-color:#535353}.fab-md-subtle .button-effect{background-color:#fff}.fab-md-vibrant{color:#fff;background-color:#663399}.fab-md-vibrant.activated{background-color:#7243a1}.fab-md-vibrant .button-effect{background-color:#fff}.fab-md-bright{color:#000;background-color:#ffc125}.fab-md-bright.activated{background-color:#ebb222}.fab-md-bright .button-effect{background-color:#000}.fab-wp{color:#fff;background-color:#488aff}.fab-wp.activated{background-color:#427feb}.fab-wp-in-list{color:#000;background-color:#f4f4f4;-webkit-transition:opacity .2s ease 10ms,-webkit-transform .2s ease 10ms;transition:opacity .2s ease 10ms,-webkit-transform .2s ease 10ms;transition:transform .2s ease 10ms,opacity .2s ease 10ms;transition:transform .2s ease 10ms,opacity .2s ease 10ms,-webkit-transform .2s ease 10ms}.fab-wp-in-list.activated{background-color:#e0e0e0}.fab-wp-primary{color:#fff;background-color:#488aff}.fab-wp-primary.activated{background-color:#427feb}.fab-wp-secondary{color:#fff;background-color:#32db64}.fab-wp-secondary.activated{background-color:#2ec95c}.fab-wp-danger{color:#fff;background-color:#f53d3d}.fab-wp-danger.activated{background-color:#e13838}.fab-wp-light{color:#000;background-color:#f4f4f4}.fab-wp-light.activated{background-color:#e0e0e0}.fab-wp-dark{color:#fff;background-color:#222}.fab-wp-dark.activated{background-color:#343434}.fab-wp-energized{color:#000;background-color:#ffc527}.fab-wp-energized.activated{background-color:#ebb524}.fab-wp-royal{color:#fff;background-color:#7e60ff}.fab-wp-royal.activated{background-color:#7458eb}.fab-wp-subtle{color:#fff;background-color:#444}.fab-wp-subtle.activated{background-color:#535353}.fab-wp-vibrant{color:#fff;background-color:#663399}.fab-wp-vibrant.activated{background-color:#7243a1}.fab-wp-bright{color:#000;background-color:#ffc125}.fab-wp-bright.activated{background-color:#ebb222}.grid{padding:5px;margin-left:auto;margin-right:auto;width:100%;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column}.grid[no-padding]{padding:0}.grid[no-padding]>.row>.col{padding:0}@media (min-width:576px){.grid[fixed]{width:540px;max-width:100%}}@media (min-width:768px){.grid[fixed]{width:720px;max-width:100%}}@media (min-width:992px){.grid[fixed]{width:960px;max-width:100%}}@media (min-width:1200px){.grid[fixed]{width:1140px;max-width:100%}}.row{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap}.row[nowrap]{-webkit-flex-wrap:nowrap;-ms-flex-wrap:nowrap;flex-wrap:nowrap}.row[wrap-reverse]{-webkit-flex-wrap:wrap-reverse;-ms-flex-wrap:wrap-reverse;flex-wrap:wrap-reverse}.row[align-items-start]{-webkit-box-align:start;-webkit-align-items:flex-start;-ms-flex-align:start;align-items:flex-start}.row[align-items-center]{-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center}.row[align-items-end]{-webkit-box-align:end;-webkit-align-items:flex-end;-ms-flex-align:end;align-items:flex-end}.row[align-items-stretch]{-webkit-box-align:stretch;-webkit-align-items:stretch;-ms-flex-align:stretch;align-items:stretch}.row[align-items-baseline]{-webkit-box-align:baseline;-webkit-align-items:baseline;-ms-flex-align:baseline;align-items:baseline}.row[justify-content-start]{-webkit-box-pack:start;-webkit-justify-content:flex-start;-ms-flex-pack:start;justify-content:flex-start}.row[justify-content-center]{-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center}.row[justify-content-end]{-webkit-box-pack:end;-webkit-justify-content:flex-end;-ms-flex-pack:end;justify-content:flex-end}.row[justify-content-around]{-webkit-justify-content:space-around;-ms-flex-pack:distribute;justify-content:space-around}.row[justify-content-between]{-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between}.col{padding:5px;position:relative;width:100%;margin:0;min-height:1px;-webkit-flex-basis:0;-ms-flex-preferred-size:0;flex-basis:0;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col[align-self-start]{-webkit-align-self:flex-start;-ms-flex-item-align:start;align-self:flex-start}.col[align-self-end]{-webkit-align-self:flex-end;-ms-flex-item-align:end;align-self:flex-end}.col[align-self-center]{-webkit-align-self:center;-ms-flex-item-align:center;align-self:center}.col[align-self-stretch]{-webkit-align-self:stretch;-ms-flex-item-align:stretch;align-self:stretch}.col[align-self-baseline]{-webkit-align-self:baseline;-ms-flex-item-align:baseline;align-self:baseline}[col-1]{padding:5px}@media (min-width:576px){[col-1]{padding:5px}}@media (min-width:768px){[col-1]{padding:5px}}@media (min-width:992px){[col-1]{padding:5px}}@media (min-width:1200px){[col-1]{padding:5px}}[col-2]{padding:5px}@media (min-width:576px){[col-2]{padding:5px}}@media (min-width:768px){[col-2]{padding:5px}}@media (min-width:992px){[col-2]{padding:5px}}@media (min-width:1200px){[col-2]{padding:5px}}[col-3]{padding:5px}@media (min-width:576px){[col-3]{padding:5px}}@media (min-width:768px){[col-3]{padding:5px}}@media (min-width:992px){[col-3]{padding:5px}}@media (min-width:1200px){[col-3]{padding:5px}}[col-4]{padding:5px}@media (min-width:576px){[col-4]{padding:5px}}@media (min-width:768px){[col-4]{padding:5px}}@media (min-width:992px){[col-4]{padding:5px}}@media (min-width:1200px){[col-4]{padding:5px}}[col-5]{padding:5px}@media (min-width:576px){[col-5]{padding:5px}}@media (min-width:768px){[col-5]{padding:5px}}@media (min-width:992px){[col-5]{padding:5px}}@media (min-width:1200px){[col-5]{padding:5px}}[col-6]{padding:5px}@media (min-width:576px){[col-6]{padding:5px}}@media (min-width:768px){[col-6]{padding:5px}}@media (min-width:992px){[col-6]{padding:5px}}@media (min-width:1200px){[col-6]{padding:5px}}[col-7]{padding:5px}@media (min-width:576px){[col-7]{padding:5px}}@media (min-width:768px){[col-7]{padding:5px}}@media (min-width:992px){[col-7]{padding:5px}}@media (min-width:1200px){[col-7]{padding:5px}}[col-8]{padding:5px}@media (min-width:576px){[col-8]{padding:5px}}@media (min-width:768px){[col-8]{padding:5px}}@media (min-width:992px){[col-8]{padding:5px}}@media (min-width:1200px){[col-8]{padding:5px}}[col-9]{padding:5px}@media (min-width:576px){[col-9]{padding:5px}}@media (min-width:768px){[col-9]{padding:5px}}@media (min-width:992px){[col-9]{padding:5px}}@media (min-width:1200px){[col-9]{padding:5px}}[col-10]{padding:5px}@media (min-width:576px){[col-10]{padding:5px}}@media (min-width:768px){[col-10]{padding:5px}}@media (min-width:992px){[col-10]{padding:5px}}@media (min-width:1200px){[col-10]{padding:5px}}[col-11]{padding:5px}@media (min-width:576px){[col-11]{padding:5px}}@media (min-width:768px){[col-11]{padding:5px}}@media (min-width:992px){[col-11]{padding:5px}}@media (min-width:1200px){[col-11]{padding:5px}}[col-12]{padding:5px}@media (min-width:576px){[col-12]{padding:5px}}@media (min-width:768px){[col-12]{padding:5px}}@media (min-width:992px){[col-12]{padding:5px}}@media (min-width:1200px){[col-12]{padding:5px}}[col]{padding:5px}@media (min-width:576px){[col]{padding:5px}}@media (min-width:768px){[col]{padding:5px}}@media (min-width:992px){[col]{padding:5px}}@media (min-width:1200px){[col]{padding:5px}}[col]{-webkit-flex-basis:0;-ms-flex-preferred-size:0;flex-basis:0;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;max-width:100%}[col-auto]{-webkit-box-flex:0;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto;width:auto}[col-1]{-webkit-box-flex:0;-webkit-flex:0 0 8.33333%;-ms-flex:0 0 8.33333%;flex:0 0 8.33333%;width:8.33333%;max-width:8.33333%}[col-2]{-webkit-box-flex:0;-webkit-flex:0 0 16.66667%;-ms-flex:0 0 16.66667%;flex:0 0 16.66667%;width:16.66667%;max-width:16.66667%}[col-3]{-webkit-box-flex:0;-webkit-flex:0 0 25%;-ms-flex:0 0 25%;flex:0 0 25%;width:25%;max-width:25%}[col-4]{-webkit-box-flex:0;-webkit-flex:0 0 33.33333%;-ms-flex:0 0 33.33333%;flex:0 0 33.33333%;width:33.33333%;max-width:33.33333%}[col-5]{-webkit-box-flex:0;-webkit-flex:0 0 41.66667%;-ms-flex:0 0 41.66667%;flex:0 0 41.66667%;width:41.66667%;max-width:41.66667%}[col-6]{-webkit-box-flex:0;-webkit-flex:0 0 50%;-ms-flex:0 0 50%;flex:0 0 50%;width:50%;max-width:50%}[col-7]{-webkit-box-flex:0;-webkit-flex:0 0 58.33333%;-ms-flex:0 0 58.33333%;flex:0 0 58.33333%;width:58.33333%;max-width:58.33333%}[col-8]{-webkit-box-flex:0;-webkit-flex:0 0 66.66667%;-ms-flex:0 0 66.66667%;flex:0 0 66.66667%;width:66.66667%;max-width:66.66667%}[col-9]{-webkit-box-flex:0;-webkit-flex:0 0 75%;-ms-flex:0 0 75%;flex:0 0 75%;width:75%;max-width:75%}[col-10]{-webkit-box-flex:0;-webkit-flex:0 0 83.33333%;-ms-flex:0 0 83.33333%;flex:0 0 83.33333%;width:83.33333%;max-width:83.33333%}[col-11]{-webkit-box-flex:0;-webkit-flex:0 0 91.66667%;-ms-flex:0 0 91.66667%;flex:0 0 91.66667%;width:91.66667%;max-width:91.66667%}[col-12]{-webkit-box-flex:0;-webkit-flex:0 0 100%;-ms-flex:0 0 100%;flex:0 0 100%;width:100%;max-width:100%}[pull-0]{right:auto}[pull-1]{right:8.33333%}[pull-2]{right:16.66667%}[pull-3]{right:25%}[pull-4]{right:33.33333%}[pull-5]{right:41.66667%}[pull-6]{right:50%}[pull-7]{right:58.33333%}[pull-8]{right:66.66667%}[pull-9]{right:75%}[pull-10]{right:83.33333%}[pull-11]{right:91.66667%}[pull-12]{right:100%}[push-0]{left:auto}[push-1]{left:8.33333%}[push-2]{left:16.66667%}[push-3]{left:25%}[push-4]{left:33.33333%}[push-5]{left:41.66667%}[push-6]{left:50%}[push-7]{left:58.33333%}[push-8]{left:66.66667%}[push-9]{left:75%}[push-10]{left:83.33333%}[push-11]{left:91.66667%}[push-12]{left:100%}[offset-1]{margin-left:8.33333%}[offset-2]{margin-left:16.66667%}[offset-3]{margin-left:25%}[offset-4]{margin-left:33.33333%}[offset-5]{margin-left:41.66667%}[offset-6]{margin-left:50%}[offset-7]{margin-left:58.33333%}[offset-8]{margin-left:66.66667%}[offset-9]{margin-left:75%}[offset-10]{margin-left:83.33333%}[offset-11]{margin-left:91.66667%}[col-sm-1]{padding:5px}@media (min-width:576px){[col-sm-1]{padding:5px}}@media (min-width:768px){[col-sm-1]{padding:5px}}@media (min-width:992px){[col-sm-1]{padding:5px}}@media (min-width:1200px){[col-sm-1]{padding:5px}}[col-sm-2]{padding:5px}@media (min-width:576px){[col-sm-2]{padding:5px}}@media (min-width:768px){[col-sm-2]{padding:5px}}@media (min-width:992px){[col-sm-2]{padding:5px}}@media (min-width:1200px){[col-sm-2]{padding:5px}}[col-sm-3]{padding:5px}@media (min-width:576px){[col-sm-3]{padding:5px}}@media (min-width:768px){[col-sm-3]{padding:5px}}@media (min-width:992px){[col-sm-3]{padding:5px}}@media (min-width:1200px){[col-sm-3]{padding:5px}}[col-sm-4]{padding:5px}@media (min-width:576px){[col-sm-4]{padding:5px}}@media (min-width:768px){[col-sm-4]{padding:5px}}@media (min-width:992px){[col-sm-4]{padding:5px}}@media (min-width:1200px){[col-sm-4]{padding:5px}}[col-sm-5]{padding:5px}@media (min-width:576px){[col-sm-5]{padding:5px}}@media (min-width:768px){[col-sm-5]{padding:5px}}@media (min-width:992px){[col-sm-5]{padding:5px}}@media (min-width:1200px){[col-sm-5]{padding:5px}}[col-sm-6]{padding:5px}@media (min-width:576px){[col-sm-6]{padding:5px}}@media (min-width:768px){[col-sm-6]{padding:5px}}@media (min-width:992px){[col-sm-6]{padding:5px}}@media (min-width:1200px){[col-sm-6]{padding:5px}}[col-sm-7]{padding:5px}@media (min-width:576px){[col-sm-7]{padding:5px}}@media (min-width:768px){[col-sm-7]{padding:5px}}@media (min-width:992px){[col-sm-7]{padding:5px}}@media (min-width:1200px){[col-sm-7]{padding:5px}}[col-sm-8]{padding:5px}@media (min-width:576px){[col-sm-8]{padding:5px}}@media (min-width:768px){[col-sm-8]{padding:5px}}@media (min-width:992px){[col-sm-8]{padding:5px}}@media (min-width:1200px){[col-sm-8]{padding:5px}}[col-sm-9]{padding:5px}@media (min-width:576px){[col-sm-9]{padding:5px}}@media (min-width:768px){[col-sm-9]{padding:5px}}@media (min-width:992px){[col-sm-9]{padding:5px}}@media (min-width:1200px){[col-sm-9]{padding:5px}}[col-sm-10]{padding:5px}@media (min-width:576px){[col-sm-10]{padding:5px}}@media (min-width:768px){[col-sm-10]{padding:5px}}@media (min-width:992px){[col-sm-10]{padding:5px}}@media (min-width:1200px){[col-sm-10]{padding:5px}}[col-sm-11]{padding:5px}@media (min-width:576px){[col-sm-11]{padding:5px}}@media (min-width:768px){[col-sm-11]{padding:5px}}@media (min-width:992px){[col-sm-11]{padding:5px}}@media (min-width:1200px){[col-sm-11]{padding:5px}}[col-sm-12]{padding:5px}@media (min-width:576px){[col-sm-12]{padding:5px}}@media (min-width:768px){[col-sm-12]{padding:5px}}@media (min-width:992px){[col-sm-12]{padding:5px}}@media (min-width:1200px){[col-sm-12]{padding:5px}}[col-sm]{padding:5px}@media (min-width:576px){[col-sm]{padding:5px}}@media (min-width:768px){[col-sm]{padding:5px}}@media (min-width:992px){[col-sm]{padding:5px}}@media (min-width:1200px){[col-sm]{padding:5px}}@media (min-width:576px){[col-sm]{-webkit-flex-basis:0;-ms-flex-preferred-size:0;flex-basis:0;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;max-width:100%}[col-sm-auto]{-webkit-box-flex:0;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto;width:auto}[col-sm-1]{-webkit-box-flex:0;-webkit-flex:0 0 8.33333%;-ms-flex:0 0 8.33333%;flex:0 0 8.33333%;width:8.33333%;max-width:8.33333%}[col-sm-2]{-webkit-box-flex:0;-webkit-flex:0 0 16.66667%;-ms-flex:0 0 16.66667%;flex:0 0 16.66667%;width:16.66667%;max-width:16.66667%}[col-sm-3]{-webkit-box-flex:0;-webkit-flex:0 0 25%;-ms-flex:0 0 25%;flex:0 0 25%;width:25%;max-width:25%}[col-sm-4]{-webkit-box-flex:0;-webkit-flex:0 0 33.33333%;-ms-flex:0 0 33.33333%;flex:0 0 33.33333%;width:33.33333%;max-width:33.33333%}[col-sm-5]{-webkit-box-flex:0;-webkit-flex:0 0 41.66667%;-ms-flex:0 0 41.66667%;flex:0 0 41.66667%;width:41.66667%;max-width:41.66667%}[col-sm-6]{-webkit-box-flex:0;-webkit-flex:0 0 50%;-ms-flex:0 0 50%;flex:0 0 50%;width:50%;max-width:50%}[col-sm-7]{-webkit-box-flex:0;-webkit-flex:0 0 58.33333%;-ms-flex:0 0 58.33333%;flex:0 0 58.33333%;width:58.33333%;max-width:58.33333%}[col-sm-8]{-webkit-box-flex:0;-webkit-flex:0 0 66.66667%;-ms-flex:0 0 66.66667%;flex:0 0 66.66667%;width:66.66667%;max-width:66.66667%}[col-sm-9]{-webkit-box-flex:0;-webkit-flex:0 0 75%;-ms-flex:0 0 75%;flex:0 0 75%;width:75%;max-width:75%}[col-sm-10]{-webkit-box-flex:0;-webkit-flex:0 0 83.33333%;-ms-flex:0 0 83.33333%;flex:0 0 83.33333%;width:83.33333%;max-width:83.33333%}[col-sm-11]{-webkit-box-flex:0;-webkit-flex:0 0 91.66667%;-ms-flex:0 0 91.66667%;flex:0 0 91.66667%;width:91.66667%;max-width:91.66667%}[col-sm-12]{-webkit-box-flex:0;-webkit-flex:0 0 100%;-ms-flex:0 0 100%;flex:0 0 100%;width:100%;max-width:100%}[pull-sm-0]{right:auto}[pull-sm-1]{right:8.33333%}[pull-sm-2]{right:16.66667%}[pull-sm-3]{right:25%}[pull-sm-4]{right:33.33333%}[pull-sm-5]{right:41.66667%}[pull-sm-6]{right:50%}[pull-sm-7]{right:58.33333%}[pull-sm-8]{right:66.66667%}[pull-sm-9]{right:75%}[pull-sm-10]{right:83.33333%}[pull-sm-11]{right:91.66667%}[pull-sm-12]{right:100%}[push-sm-0]{left:auto}[push-sm-1]{left:8.33333%}[push-sm-2]{left:16.66667%}[push-sm-3]{left:25%}[push-sm-4]{left:33.33333%}[push-sm-5]{left:41.66667%}[push-sm-6]{left:50%}[push-sm-7]{left:58.33333%}[push-sm-8]{left:66.66667%}[push-sm-9]{left:75%}[push-sm-10]{left:83.33333%}[push-sm-11]{left:91.66667%}[push-sm-12]{left:100%}[offset-sm-0]{margin-left:0}[offset-sm-1]{margin-left:8.33333%}[offset-sm-2]{margin-left:16.66667%}[offset-sm-3]{margin-left:25%}[offset-sm-4]{margin-left:33.33333%}[offset-sm-5]{margin-left:41.66667%}[offset-sm-6]{margin-left:50%}[offset-sm-7]{margin-left:58.33333%}[offset-sm-8]{margin-left:66.66667%}[offset-sm-9]{margin-left:75%}[offset-sm-10]{margin-left:83.33333%}[offset-sm-11]{margin-left:91.66667%}}[col-md-1]{padding:5px}@media (min-width:576px){[col-md-1]{padding:5px}}@media (min-width:768px){[col-md-1]{padding:5px}}@media (min-width:992px){[col-md-1]{padding:5px}}@media (min-width:1200px){[col-md-1]{padding:5px}}[col-md-2]{padding:5px}@media (min-width:576px){[col-md-2]{padding:5px}}@media (min-width:768px){[col-md-2]{padding:5px}}@media (min-width:992px){[col-md-2]{padding:5px}}@media (min-width:1200px){[col-md-2]{padding:5px}}[col-md-3]{padding:5px}@media (min-width:576px){[col-md-3]{padding:5px}}@media (min-width:768px){[col-md-3]{padding:5px}}@media (min-width:992px){[col-md-3]{padding:5px}}@media (min-width:1200px){[col-md-3]{padding:5px}}[col-md-4]{padding:5px}@media (min-width:576px){[col-md-4]{padding:5px}}@media (min-width:768px){[col-md-4]{padding:5px}}@media (min-width:992px){[col-md-4]{padding:5px}}@media (min-width:1200px){[col-md-4]{padding:5px}}[col-md-5]{padding:5px}@media (min-width:576px){[col-md-5]{padding:5px}}@media (min-width:768px){[col-md-5]{padding:5px}}@media (min-width:992px){[col-md-5]{padding:5px}}@media (min-width:1200px){[col-md-5]{padding:5px}}[col-md-6]{padding:5px}@media (min-width:576px){[col-md-6]{padding:5px}}@media (min-width:768px){[col-md-6]{padding:5px}}@media (min-width:992px){[col-md-6]{padding:5px}}@media (min-width:1200px){[col-md-6]{padding:5px}}[col-md-7]{padding:5px}@media (min-width:576px){[col-md-7]{padding:5px}}@media (min-width:768px){[col-md-7]{padding:5px}}@media (min-width:992px){[col-md-7]{padding:5px}}@media (min-width:1200px){[col-md-7]{padding:5px}}[col-md-8]{padding:5px}@media (min-width:576px){[col-md-8]{padding:5px}}@media (min-width:768px){[col-md-8]{padding:5px}}@media (min-width:992px){[col-md-8]{padding:5px}}@media (min-width:1200px){[col-md-8]{padding:5px}}[col-md-9]{padding:5px}@media (min-width:576px){[col-md-9]{padding:5px}}@media (min-width:768px){[col-md-9]{padding:5px}}@media (min-width:992px){[col-md-9]{padding:5px}}@media (min-width:1200px){[col-md-9]{padding:5px}}[col-md-10]{padding:5px}@media (min-width:576px){[col-md-10]{padding:5px}}@media (min-width:768px){[col-md-10]{padding:5px}}@media (min-width:992px){[col-md-10]{padding:5px}}@media (min-width:1200px){[col-md-10]{padding:5px}}[col-md-11]{padding:5px}@media (min-width:576px){[col-md-11]{padding:5px}}@media (min-width:768px){[col-md-11]{padding:5px}}@media (min-width:992px){[col-md-11]{padding:5px}}@media (min-width:1200px){[col-md-11]{padding:5px}}[col-md-12]{padding:5px}@media (min-width:576px){[col-md-12]{padding:5px}}@media (min-width:768px){[col-md-12]{padding:5px}}@media (min-width:992px){[col-md-12]{padding:5px}}@media (min-width:1200px){[col-md-12]{padding:5px}}[col-md]{padding:5px}@media (min-width:576px){[col-md]{padding:5px}}@media (min-width:768px){[col-md]{padding:5px}}@media (min-width:992px){[col-md]{padding:5px}}@media (min-width:1200px){[col-md]{padding:5px}}@media (min-width:768px){[col-md]{-webkit-flex-basis:0;-ms-flex-preferred-size:0;flex-basis:0;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;max-width:100%}[col-md-auto]{-webkit-box-flex:0;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto;width:auto}[col-md-1]{-webkit-box-flex:0;-webkit-flex:0 0 8.33333%;-ms-flex:0 0 8.33333%;flex:0 0 8.33333%;width:8.33333%;max-width:8.33333%}[col-md-2]{-webkit-box-flex:0;-webkit-flex:0 0 16.66667%;-ms-flex:0 0 16.66667%;flex:0 0 16.66667%;width:16.66667%;max-width:16.66667%}[col-md-3]{-webkit-box-flex:0;-webkit-flex:0 0 25%;-ms-flex:0 0 25%;flex:0 0 25%;width:25%;max-width:25%}[col-md-4]{-webkit-box-flex:0;-webkit-flex:0 0 33.33333%;-ms-flex:0 0 33.33333%;flex:0 0 33.33333%;width:33.33333%;max-width:33.33333%}[col-md-5]{-webkit-box-flex:0;-webkit-flex:0 0 41.66667%;-ms-flex:0 0 41.66667%;flex:0 0 41.66667%;width:41.66667%;max-width:41.66667%}[col-md-6]{-webkit-box-flex:0;-webkit-flex:0 0 50%;-ms-flex:0 0 50%;flex:0 0 50%;width:50%;max-width:50%}[col-md-7]{-webkit-box-flex:0;-webkit-flex:0 0 58.33333%;-ms-flex:0 0 58.33333%;flex:0 0 58.33333%;width:58.33333%;max-width:58.33333%}[col-md-8]{-webkit-box-flex:0;-webkit-flex:0 0 66.66667%;-ms-flex:0 0 66.66667%;flex:0 0 66.66667%;width:66.66667%;max-width:66.66667%}[col-md-9]{-webkit-box-flex:0;-webkit-flex:0 0 75%;-ms-flex:0 0 75%;flex:0 0 75%;width:75%;max-width:75%}[col-md-10]{-webkit-box-flex:0;-webkit-flex:0 0 83.33333%;-ms-flex:0 0 83.33333%;flex:0 0 83.33333%;width:83.33333%;max-width:83.33333%}[col-md-11]{-webkit-box-flex:0;-webkit-flex:0 0 91.66667%;-ms-flex:0 0 91.66667%;flex:0 0 91.66667%;width:91.66667%;max-width:91.66667%}[col-md-12]{-webkit-box-flex:0;-webkit-flex:0 0 100%;-ms-flex:0 0 100%;flex:0 0 100%;width:100%;max-width:100%}[pull-md-0]{right:auto}[pull-md-1]{right:8.33333%}[pull-md-2]{right:16.66667%}[pull-md-3]{right:25%}[pull-md-4]{right:33.33333%}[pull-md-5]{right:41.66667%}[pull-md-6]{right:50%}[pull-md-7]{right:58.33333%}[pull-md-8]{right:66.66667%}[pull-md-9]{right:75%}[pull-md-10]{right:83.33333%}[pull-md-11]{right:91.66667%}[pull-md-12]{right:100%}[push-md-0]{left:auto}[push-md-1]{left:8.33333%}[push-md-2]{left:16.66667%}[push-md-3]{left:25%}[push-md-4]{left:33.33333%}[push-md-5]{left:41.66667%}[push-md-6]{left:50%}[push-md-7]{left:58.33333%}[push-md-8]{left:66.66667%}[push-md-9]{left:75%}[push-md-10]{left:83.33333%}[push-md-11]{left:91.66667%}[push-md-12]{left:100%}[offset-md-0]{margin-left:0}[offset-md-1]{margin-left:8.33333%}[offset-md-2]{margin-left:16.66667%}[offset-md-3]{margin-left:25%}[offset-md-4]{margin-left:33.33333%}[offset-md-5]{margin-left:41.66667%}[offset-md-6]{margin-left:50%}[offset-md-7]{margin-left:58.33333%}[offset-md-8]{margin-left:66.66667%}[offset-md-9]{margin-left:75%}[offset-md-10]{margin-left:83.33333%}[offset-md-11]{margin-left:91.66667%}}[col-lg-1]{padding:5px}@media (min-width:576px){[col-lg-1]{padding:5px}}@media (min-width:768px){[col-lg-1]{padding:5px}}@media (min-width:992px){[col-lg-1]{padding:5px}}@media (min-width:1200px){[col-lg-1]{padding:5px}}[col-lg-2]{padding:5px}@media (min-width:576px){[col-lg-2]{padding:5px}}@media (min-width:768px){[col-lg-2]{padding:5px}}@media (min-width:992px){[col-lg-2]{padding:5px}}@media (min-width:1200px){[col-lg-2]{padding:5px}}[col-lg-3]{padding:5px}@media (min-width:576px){[col-lg-3]{padding:5px}}@media (min-width:768px){[col-lg-3]{padding:5px}}@media (min-width:992px){[col-lg-3]{padding:5px}}@media (min-width:1200px){[col-lg-3]{padding:5px}}[col-lg-4]{padding:5px}@media (min-width:576px){[col-lg-4]{padding:5px}}@media (min-width:768px){[col-lg-4]{padding:5px}}@media (min-width:992px){[col-lg-4]{padding:5px}}@media (min-width:1200px){[col-lg-4]{padding:5px}}[col-lg-5]{padding:5px}@media (min-width:576px){[col-lg-5]{padding:5px}}@media (min-width:768px){[col-lg-5]{padding:5px}}@media (min-width:992px){[col-lg-5]{padding:5px}}@media (min-width:1200px){[col-lg-5]{padding:5px}}[col-lg-6]{padding:5px}@media (min-width:576px){[col-lg-6]{padding:5px}}@media (min-width:768px){[col-lg-6]{padding:5px}}@media (min-width:992px){[col-lg-6]{padding:5px}}@media (min-width:1200px){[col-lg-6]{padding:5px}}[col-lg-7]{padding:5px}@media (min-width:576px){[col-lg-7]{padding:5px}}@media (min-width:768px){[col-lg-7]{padding:5px}}@media (min-width:992px){[col-lg-7]{padding:5px}}@media (min-width:1200px){[col-lg-7]{padding:5px}}[col-lg-8]{padding:5px}@media (min-width:576px){[col-lg-8]{padding:5px}}@media (min-width:768px){[col-lg-8]{padding:5px}}@media (min-width:992px){[col-lg-8]{padding:5px}}@media (min-width:1200px){[col-lg-8]{padding:5px}}[col-lg-9]{padding:5px}@media (min-width:576px){[col-lg-9]{padding:5px}}@media (min-width:768px){[col-lg-9]{padding:5px}}@media (min-width:992px){[col-lg-9]{padding:5px}}@media (min-width:1200px){[col-lg-9]{padding:5px}}[col-lg-10]{padding:5px}@media (min-width:576px){[col-lg-10]{padding:5px}}@media (min-width:768px){[col-lg-10]{padding:5px}}@media (min-width:992px){[col-lg-10]{padding:5px}}@media (min-width:1200px){[col-lg-10]{padding:5px}}[col-lg-11]{padding:5px}@media (min-width:576px){[col-lg-11]{padding:5px}}@media (min-width:768px){[col-lg-11]{padding:5px}}@media (min-width:992px){[col-lg-11]{padding:5px}}@media (min-width:1200px){[col-lg-11]{padding:5px}}[col-lg-12]{padding:5px}@media (min-width:576px){[col-lg-12]{padding:5px}}@media (min-width:768px){[col-lg-12]{padding:5px}}@media (min-width:992px){[col-lg-12]{padding:5px}}@media (min-width:1200px){[col-lg-12]{padding:5px}}[col-lg]{padding:5px}@media (min-width:576px){[col-lg]{padding:5px}}@media (min-width:768px){[col-lg]{padding:5px}}@media (min-width:992px){[col-lg]{padding:5px}}@media (min-width:1200px){[col-lg]{padding:5px}}@media (min-width:992px){[col-lg]{-webkit-flex-basis:0;-ms-flex-preferred-size:0;flex-basis:0;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;max-width:100%}[col-lg-auto]{-webkit-box-flex:0;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto;width:auto}[col-lg-1]{-webkit-box-flex:0;-webkit-flex:0 0 8.33333%;-ms-flex:0 0 8.33333%;flex:0 0 8.33333%;width:8.33333%;max-width:8.33333%}[col-lg-2]{-webkit-box-flex:0;-webkit-flex:0 0 16.66667%;-ms-flex:0 0 16.66667%;flex:0 0 16.66667%;width:16.66667%;max-width:16.66667%}[col-lg-3]{-webkit-box-flex:0;-webkit-flex:0 0 25%;-ms-flex:0 0 25%;flex:0 0 25%;width:25%;max-width:25%}[col-lg-4]{-webkit-box-flex:0;-webkit-flex:0 0 33.33333%;-ms-flex:0 0 33.33333%;flex:0 0 33.33333%;width:33.33333%;max-width:33.33333%}[col-lg-5]{-webkit-box-flex:0;-webkit-flex:0 0 41.66667%;-ms-flex:0 0 41.66667%;flex:0 0 41.66667%;width:41.66667%;max-width:41.66667%}[col-lg-6]{-webkit-box-flex:0;-webkit-flex:0 0 50%;-ms-flex:0 0 50%;flex:0 0 50%;width:50%;max-width:50%}[col-lg-7]{-webkit-box-flex:0;-webkit-flex:0 0 58.33333%;-ms-flex:0 0 58.33333%;flex:0 0 58.33333%;width:58.33333%;max-width:58.33333%}[col-lg-8]{-webkit-box-flex:0;-webkit-flex:0 0 66.66667%;-ms-flex:0 0 66.66667%;flex:0 0 66.66667%;width:66.66667%;max-width:66.66667%}[col-lg-9]{-webkit-box-flex:0;-webkit-flex:0 0 75%;-ms-flex:0 0 75%;flex:0 0 75%;width:75%;max-width:75%}[col-lg-10]{-webkit-box-flex:0;-webkit-flex:0 0 83.33333%;-ms-flex:0 0 83.33333%;flex:0 0 83.33333%;width:83.33333%;max-width:83.33333%}[col-lg-11]{-webkit-box-flex:0;-webkit-flex:0 0 91.66667%;-ms-flex:0 0 91.66667%;flex:0 0 91.66667%;width:91.66667%;max-width:91.66667%}[col-lg-12]{-webkit-box-flex:0;-webkit-flex:0 0 100%;-ms-flex:0 0 100%;flex:0 0 100%;width:100%;max-width:100%}[pull-lg-0]{right:auto}[pull-lg-1]{right:8.33333%}[pull-lg-2]{right:16.66667%}[pull-lg-3]{right:25%}[pull-lg-4]{right:33.33333%}[pull-lg-5]{right:41.66667%}[pull-lg-6]{right:50%}[pull-lg-7]{right:58.33333%}[pull-lg-8]{right:66.66667%}[pull-lg-9]{right:75%}[pull-lg-10]{right:83.33333%}[pull-lg-11]{right:91.66667%}[pull-lg-12]{right:100%}[push-lg-0]{left:auto}[push-lg-1]{left:8.33333%}[push-lg-2]{left:16.66667%}[push-lg-3]{left:25%}[push-lg-4]{left:33.33333%}[push-lg-5]{left:41.66667%}[push-lg-6]{left:50%}[push-lg-7]{left:58.33333%}[push-lg-8]{left:66.66667%}[push-lg-9]{left:75%}[push-lg-10]{left:83.33333%}[push-lg-11]{left:91.66667%}[push-lg-12]{left:100%}[offset-lg-0]{margin-left:0}[offset-lg-1]{margin-left:8.33333%}[offset-lg-2]{margin-left:16.66667%}[offset-lg-3]{margin-left:25%}[offset-lg-4]{margin-left:33.33333%}[offset-lg-5]{margin-left:41.66667%}[offset-lg-6]{margin-left:50%}[offset-lg-7]{margin-left:58.33333%}[offset-lg-8]{margin-left:66.66667%}[offset-lg-9]{margin-left:75%}[offset-lg-10]{margin-left:83.33333%}[offset-lg-11]{margin-left:91.66667%}}[col-xl-1]{padding:5px}@media (min-width:576px){[col-xl-1]{padding:5px}}@media (min-width:768px){[col-xl-1]{padding:5px}}@media (min-width:992px){[col-xl-1]{padding:5px}}@media (min-width:1200px){[col-xl-1]{padding:5px}}[col-xl-2]{padding:5px}@media (min-width:576px){[col-xl-2]{padding:5px}}@media (min-width:768px){[col-xl-2]{padding:5px}}@media (min-width:992px){[col-xl-2]{padding:5px}}@media (min-width:1200px){[col-xl-2]{padding:5px}}[col-xl-3]{padding:5px}@media (min-width:576px){[col-xl-3]{padding:5px}}@media (min-width:768px){[col-xl-3]{padding:5px}}@media (min-width:992px){[col-xl-3]{padding:5px}}@media (min-width:1200px){[col-xl-3]{padding:5px}}[col-xl-4]{padding:5px}@media (min-width:576px){[col-xl-4]{padding:5px}}@media (min-width:768px){[col-xl-4]{padding:5px}}@media (min-width:992px){[col-xl-4]{padding:5px}}@media (min-width:1200px){[col-xl-4]{padding:5px}}[col-xl-5]{padding:5px}@media (min-width:576px){[col-xl-5]{padding:5px}}@media (min-width:768px){[col-xl-5]{padding:5px}}@media (min-width:992px){[col-xl-5]{padding:5px}}@media (min-width:1200px){[col-xl-5]{padding:5px}}[col-xl-6]{padding:5px}@media (min-width:576px){[col-xl-6]{padding:5px}}@media (min-width:768px){[col-xl-6]{padding:5px}}@media (min-width:992px){[col-xl-6]{padding:5px}}@media (min-width:1200px){[col-xl-6]{padding:5px}}[col-xl-7]{padding:5px}@media (min-width:576px){[col-xl-7]{padding:5px}}@media (min-width:768px){[col-xl-7]{padding:5px}}@media (min-width:992px){[col-xl-7]{padding:5px}}@media (min-width:1200px){[col-xl-7]{padding:5px}}[col-xl-8]{padding:5px}@media (min-width:576px){[col-xl-8]{padding:5px}}@media (min-width:768px){[col-xl-8]{padding:5px}}@media (min-width:992px){[col-xl-8]{padding:5px}}@media (min-width:1200px){[col-xl-8]{padding:5px}}[col-xl-9]{padding:5px}@media (min-width:576px){[col-xl-9]{padding:5px}}@media (min-width:768px){[col-xl-9]{padding:5px}}@media (min-width:992px){[col-xl-9]{padding:5px}}@media (min-width:1200px){[col-xl-9]{padding:5px}}[col-xl-10]{padding:5px}@media (min-width:576px){[col-xl-10]{padding:5px}}@media (min-width:768px){[col-xl-10]{padding:5px}}@media (min-width:992px){[col-xl-10]{padding:5px}}@media (min-width:1200px){[col-xl-10]{padding:5px}}[col-xl-11]{padding:5px}@media (min-width:576px){[col-xl-11]{padding:5px}}@media (min-width:768px){[col-xl-11]{padding:5px}}@media (min-width:992px){[col-xl-11]{padding:5px}}@media (min-width:1200px){[col-xl-11]{padding:5px}}[col-xl-12]{padding:5px}@media (min-width:576px){[col-xl-12]{padding:5px}}@media (min-width:768px){[col-xl-12]{padding:5px}}@media (min-width:992px){[col-xl-12]{padding:5px}}@media (min-width:1200px){[col-xl-12]{padding:5px}}[col-xl]{padding:5px}@media (min-width:576px){[col-xl]{padding:5px}}@media (min-width:768px){[col-xl]{padding:5px}}@media (min-width:992px){[col-xl]{padding:5px}}@media (min-width:1200px){[col-xl]{padding:5px}}@media (min-width:1200px){[col-xl]{-webkit-flex-basis:0;-ms-flex-preferred-size:0;flex-basis:0;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;max-width:100%}[col-xl-auto]{-webkit-box-flex:0;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto;width:auto}[col-xl-1]{-webkit-box-flex:0;-webkit-flex:0 0 8.33333%;-ms-flex:0 0 8.33333%;flex:0 0 8.33333%;width:8.33333%;max-width:8.33333%}[col-xl-2]{-webkit-box-flex:0;-webkit-flex:0 0 16.66667%;-ms-flex:0 0 16.66667%;flex:0 0 16.66667%;width:16.66667%;max-width:16.66667%}[col-xl-3]{-webkit-box-flex:0;-webkit-flex:0 0 25%;-ms-flex:0 0 25%;flex:0 0 25%;width:25%;max-width:25%}[col-xl-4]{-webkit-box-flex:0;-webkit-flex:0 0 33.33333%;-ms-flex:0 0 33.33333%;flex:0 0 33.33333%;width:33.33333%;max-width:33.33333%}[col-xl-5]{-webkit-box-flex:0;-webkit-flex:0 0 41.66667%;-ms-flex:0 0 41.66667%;flex:0 0 41.66667%;width:41.66667%;max-width:41.66667%}[col-xl-6]{-webkit-box-flex:0;-webkit-flex:0 0 50%;-ms-flex:0 0 50%;flex:0 0 50%;width:50%;max-width:50%}[col-xl-7]{-webkit-box-flex:0;-webkit-flex:0 0 58.33333%;-ms-flex:0 0 58.33333%;flex:0 0 58.33333%;width:58.33333%;max-width:58.33333%}[col-xl-8]{-webkit-box-flex:0;-webkit-flex:0 0 66.66667%;-ms-flex:0 0 66.66667%;flex:0 0 66.66667%;width:66.66667%;max-width:66.66667%}[col-xl-9]{-webkit-box-flex:0;-webkit-flex:0 0 75%;-ms-flex:0 0 75%;flex:0 0 75%;width:75%;max-width:75%}[col-xl-10]{-webkit-box-flex:0;-webkit-flex:0 0 83.33333%;-ms-flex:0 0 83.33333%;flex:0 0 83.33333%;width:83.33333%;max-width:83.33333%}[col-xl-11]{-webkit-box-flex:0;-webkit-flex:0 0 91.66667%;-ms-flex:0 0 91.66667%;flex:0 0 91.66667%;width:91.66667%;max-width:91.66667%}[col-xl-12]{-webkit-box-flex:0;-webkit-flex:0 0 100%;-ms-flex:0 0 100%;flex:0 0 100%;width:100%;max-width:100%}[pull-xl-0]{right:auto}[pull-xl-1]{right:8.33333%}[pull-xl-2]{right:16.66667%}[pull-xl-3]{right:25%}[pull-xl-4]{right:33.33333%}[pull-xl-5]{right:41.66667%}[pull-xl-6]{right:50%}[pull-xl-7]{right:58.33333%}[pull-xl-8]{right:66.66667%}[pull-xl-9]{right:75%}[pull-xl-10]{right:83.33333%}[pull-xl-11]{right:91.66667%}[pull-xl-12]{right:100%}[push-xl-0]{left:auto}[push-xl-1]{left:8.33333%}[push-xl-2]{left:16.66667%}[push-xl-3]{left:25%}[push-xl-4]{left:33.33333%}[push-xl-5]{left:41.66667%}[push-xl-6]{left:50%}[push-xl-7]{left:58.33333%}[push-xl-8]{left:66.66667%}[push-xl-9]{left:75%}[push-xl-10]{left:83.33333%}[push-xl-11]{left:91.66667%}[push-xl-12]{left:100%}[offset-xl-0]{margin-left:0}[offset-xl-1]{margin-left:8.33333%}[offset-xl-2]{margin-left:16.66667%}[offset-xl-3]{margin-left:25%}[offset-xl-4]{margin-left:33.33333%}[offset-xl-5]{margin-left:41.66667%}[offset-xl-6]{margin-left:50%}[offset-xl-7]{margin-left:58.33333%}[offset-xl-8]{margin-left:66.66667%}[offset-xl-9]{margin-left:75%}[offset-xl-10]{margin-left:83.33333%}[offset-xl-11]{margin-left:91.66667%}}ion-icon{display:inline-block;font-size:1.2em}ion-icon[small]{min-height:1.1em;font-size:1.1em}.icon-ios-primary{color:#488aff}.icon-ios-secondary{color:#32db64}.icon-ios-danger{color:#f53d3d}.icon-ios-light{color:#f4f4f4}.icon-ios-dark{color:#222}.icon-ios-energized{color:#ffc527}.icon-ios-royal{color:#7e60ff}.icon-ios-subtle{color:#444}.icon-ios-vibrant{color:#663399}.icon-ios-bright{color:#ffc125}.icon-md-primary{color:#488aff}.icon-md-secondary{color:#32db64}.icon-md-danger{color:#f53d3d}.icon-md-light{color:#f4f4f4}.icon-md-dark{color:#222}.icon-md-energized{color:#ffc527}.icon-md-royal{color:#7e60ff}.icon-md-subtle{color:#444}.icon-md-vibrant{color:#663399}.icon-md-bright{color:#ffc125}.icon-wp-primary{color:#488aff}.icon-wp-secondary{color:#32db64}.icon-wp-danger{color:#f53d3d}.icon-wp-light{color:#f4f4f4}.icon-wp-dark{color:#222}.icon-wp-energized{color:#ffc527}.icon-wp-royal{color:#7e60ff}.icon-wp-subtle{color:#444}.icon-wp-vibrant{color:#663399}.icon-wp-bright{color:#ffc125}ion-img{display:inline-block;min-width:20px;min-height:20px;background:#eee;contain:strict}ion-img img{-o-object-fit:cover;object-fit:cover}ion-img.img-unloaded img{display:none}ion-img.img-loaded img{display:block}ion-infinite-scroll{display:block;width:100%}ion-infinite-scroll-content{text-align:center;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;height:100%;min-height:84px}.infinite-loading{display:none;width:100%;margin:0 0 32px}.infinite-loading-text{color:#666;margin:4px 32px 0}.infinite-loading-spinner .spinner-crescent circle,.infinite-loading-spinner .spinner-ios line,.infinite-loading-spinner .spinner-ios-small line{stroke:#666}.infinite-loading-spinner .spinner-bubbles circle,.infinite-loading-spinner .spinner-circles circle,.infinite-loading-spinner .spinner-dots circle{fill:#666}ion-infinite-scroll-content[state=loading] .infinite-loading{display:block}ion-infinite-scroll-content[state=disabled]{display:none}ion-input,ion-textarea{position:relative;display:block;-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1;width:100%}.item-input ion-input,.item-input ion-textarea{position:static}.item.item-textarea{-webkit-box-align:stretch;-webkit-align-items:stretch;-ms-flex-align:stretch;align-items:stretch}.text-input{-moz-appearance:none;-ms-appearance:none;-webkit-appearance:none;appearance:none;border-radius:0;display:inline-block;-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1;width:92%;width:calc(100% - 10px);border:0;background:0 0}.text-input::-moz-placeholder{color:#999}.text-input:-ms-input-placeholder{color:#999}.text-input::-webkit-input-placeholder{text-indent:0;color:#999}textarea.text-input{display:block}.text-input[disabled]{opacity:.4}input.text-input:-webkit-autofill{background-color:transparent}.platform-mobile textarea.text-input{resize:none}.input-cover{left:0;top:0;position:absolute;width:100%;height:100%;-ms-touch-action:manipulation;touch-action:manipulation}.input[disabled] .input-cover{pointer-events:none}.input-has-focus .input-cover,.item-input-has-focus .input-cover{display:none}.input-has-focus,.item-input-has-focus{pointer-events:none}.input-has-focus a,.input-has-focus button,.input-has-focus input,.input-has-focus textarea,.item-input-has-focus a,.item-input-has-focus button,.item-input-has-focus input,.item-input-has-focus textarea{pointer-events:auto}.text-input-clear-icon{margin:0;padding:0;background-position:center;position:absolute;top:0;display:none;height:100%;background-repeat:no-repeat}.input-has-focus.input-has-value .text-input-clear-icon,.item-input-has-focus.item-input-has-value .text-input-clear-icon{display:block}.text-input-ios{margin:11px 8px 11px 0;padding:0;width:calc(100% - 8px)}.input-ios .inset-input{padding:5.5px 8px;margin:5.5px 16px 5.5px 0}.item-ios.item-label-floating .text-input,.item-ios.item-label-stacked .text-input{margin-left:0;margin-top:8px;margin-bottom:8px;width:calc(100% - 8px)}.item-ios.item-label-floating .label-ios+.input+.cloned-input,.item-ios.item-label-stacked .label-ios+.input+.cloned-input{margin-left:0}.item-label-floating .select-ios,.item-label-stacked .select-ios{padding-left:0;padding-top:8px;padding-bottom:8px}.input-ios[clearInput]{position:relative}.input-ios[clearInput] .text-input{padding-right:30px}.input-ios .text-input-clear-icon{right:8px;background-image:url(\"data:image/svg+xml;charset=utf-8,<svg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%20512%20512'><path%20fill='rgba(0,%200,%200,%200.5)'%20d='M403.1,108.9c-81.2-81.2-212.9-81.2-294.2,0s-81.2,212.9,0,294.2c81.2,81.2,212.9,81.2,294.2,0S484.3,190.1,403.1,108.9z%20M352,340.2L340.2,352l-84.4-84.2l-84,83.8L160,339.8l84-83.8l-84-83.8l11.8-11.8l84,83.8l84.4-84.2l11.8,11.8L267.6,256L352,340.2z'/></svg>\");width:30px;background-size:18px}.text-input-md{margin:13px 8px;padding:0;width:calc(100% - 8px - 8px)}.input-md .inset-input{padding:6.5px 8px;margin:6.5px 16px}.item-md.item-input.input-has-focus .item-inner,.item-md.item-input.item-input-has-focus .item-inner{border-bottom-color:#488aff;-webkit-box-shadow:inset 0 -1px 0 0 #488aff;box-shadow:inset 0 -1px 0 0 #488aff}.list-md .item-input.input-has-focus:last-child,.list-md .item-input.item-input-has-focus:last-child{border-bottom-color:#488aff;-webkit-box-shadow:inset 0 -1px 0 0 #488aff;box-shadow:inset 0 -1px 0 0 #488aff}.list-md .item-input.input-has-focus:last-child .item-inner,.list-md .item-input.item-input-has-focus:last-child .item-inner{-webkit-box-shadow:none;box-shadow:none}.item-md.item-input.ng-valid.input-has-value:not(.input-has-focus):not(.item-input-has-focus) .item-inner,.item-md.item-input.ng-valid.item-input-has-value:not(.input-has-focus):not(.item-input-has-focus) .item-inner{border-bottom-color:#32db64;-webkit-box-shadow:inset 0 -1px 0 0 #32db64;box-shadow:inset 0 -1px 0 0 #32db64}.list-md .item-input.ng-valid.input-has-value:not(.input-has-focus):not(.item-input-has-focus):last-child,.list-md .item-input.ng-valid.item-input-has-value:not(.input-has-focus):not(.item-input-has-focus):last-child{border-bottom-color:#32db64;-webkit-box-shadow:inset 0 -1px 0 0 #32db64;box-shadow:inset 0 -1px 0 0 #32db64}.list-md .item-input.ng-valid.input-has-value:not(.input-has-focus):not(.item-input-has-focus):last-child .item-inner,.list-md .item-input.ng-valid.item-input-has-value:not(.input-has-focus):not(.item-input-has-focus):last-child .item-inner{-webkit-box-shadow:none;box-shadow:none}.item-md.item-input.ng-invalid.ng-touched:not(.input-has-focus):not(.item-input-has-focus) .item-inner{border-bottom-color:#f53d3d;-webkit-box-shadow:inset 0 -1px 0 0 #f53d3d;box-shadow:inset 0 -1px 0 0 #f53d3d}.list-md .item-input.ng-invalid.ng-touched:not(.input-has-focus):not(.item-input-has-focus):last-child{border-bottom-color:#f53d3d;-webkit-box-shadow:inset 0 -1px 0 0 #f53d3d;box-shadow:inset 0 -1px 0 0 #f53d3d}.list-md .item-input.ng-invalid.ng-touched:not(.input-has-focus):not(.item-input-has-focus):last-child .item-inner{-webkit-box-shadow:none;box-shadow:none}.item-label-floating .text-input-md,.item-label-stacked .text-input-md{margin-left:0;margin-top:8px;margin-bottom:8px;width:calc(100% - 8px)}.item-label-floating .select-md,.item-label-stacked .select-md{padding-left:0;padding-top:8px;padding-bottom:8px}.input-md[clearInput]{position:relative}.input-md[clearInput] .text-input{padding-right:30px}.input-md .text-input-clear-icon{right:8px;background-image:url(\"data:image/svg+xml;charset=utf-8,<svg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%20512%20512'><polygon%20fill='%235b5b5b'%20points='405,136.798%20375.202,107%20256,226.202%20136.798,107%20107,136.798%20226.202,256%20107,375.202%20136.798,405%20256,285.798%20375.202,405%20405,375.202%20285.798,256'/></svg>\");width:30px;background-size:22px}.text-input-wp{margin:13px 8px;padding:0 8px;width:calc(100% - 8px - 8px);border:2px solid rgba(0,0,0,.5);line-height:3rem}.item-wp .inset-input{padding:6.5px 8px;margin:6.5px 16px}.item-wp.item-input.input-has-focus .text-input,.item-wp.item-input.item-input-has-focus .text-input{border-color:#488aff}.item-wp.item-input.ng-valid.input-has-value:not(.input-has-focus):not(.item-input-has-focus) .text-input,.item-wp.item-input.ng-valid.item-input-has-value:not(.input-has-focus):not(.item-input-has-focus) .text-input{border-color:#32db64}.item-wp.item-input.ng-invalid.ng-touched:not(.input-has-focus):not(.item-input-has-focus) .text-input{border-color:#f53d3d}.item-label-floating .select-wp,.item-label-floating .text-input-wp,.item-label-stacked .select-wp,.item-label-stacked .text-input-wp{margin-left:0;margin-top:8px;margin-bottom:8px;width:calc(100% - 8px)}.item-wp.item-label-floating [item-end],.item-wp.item-label-floating [item-right],.item-wp.item-label-stacked [item-end],.item-wp.item-label-stacked [item-right]{-webkit-align-self:flex-end;-ms-flex-item-align:end;align-self:flex-end}.input-wp[clearInput]{position:relative}.input-wp[clearInput] .text-input{padding-right:30px}.input-wp .text-input-clear-icon{right:8px;background-image:url(\"data:image/svg+xml;charset=utf-8,<svg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%20512%20512'><polygon%20fill='rgba(0,%200,%200,%200.5)'%20points='405,136.798%20375.202,107%20256,226.202%20136.798,107%20107,136.798%20226.202,256%20107,375.202%20136.798,405%20256,285.798%20375.202,405%20405,375.202%20285.798,256'/></svg>\");width:30px;background-size:22px}.item{contain:content}.item-block{margin:0;padding:0;text-align:initial;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;overflow:hidden;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;width:100%;min-height:4.4rem;border:0;font-weight:400;line-height:normal;text-decoration:none;color:inherit}.item-inner{margin:0;padding:0;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;overflow:hidden;-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1;-webkit-box-orient:inherit;-webkit-box-direction:inherit;-webkit-flex-direction:inherit;-ms-flex-direction:inherit;flex-direction:inherit;-webkit-box-align:inherit;-webkit-align-items:inherit;-ms-flex-align:inherit;align-items:inherit;-webkit-align-self:stretch;-ms-flex-item-align:stretch;align-self:stretch;min-height:inherit;border:0}.input-wrapper{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;overflow:hidden;-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1;-webkit-box-orient:inherit;-webkit-box-direction:inherit;-webkit-flex-direction:inherit;-ms-flex-direction:inherit;flex-direction:inherit;-webkit-box-align:inherit;-webkit-align-items:inherit;-ms-flex-align:inherit;align-items:inherit;-webkit-align-self:stretch;-ms-flex-item-align:stretch;align-self:stretch;text-overflow:ellipsis}.item.item[no-lines] .item-inner,.item[no-lines]{border:0}ion-item-group{display:block}ion-item-divider{margin:0;padding:0;z-index:100;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;overflow:hidden;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;width:100%;min-height:30px}ion-item-divider[sticky]{position:-webkit-sticky;position:sticky;top:0}[vertical-align-top],ion-input.item{-webkit-box-align:start;-webkit-align-items:flex-start;-ms-flex-align:start;align-items:flex-start}.item-inner>ion-icon[small]:first-child,.item>ion-icon[small]:first-child{min-width:18px}.item-inner>ion-icon:first-child,.item>ion-icon:first-child{text-align:center;min-width:24px}.item-inner>ion-icon,.item>ion-icon{min-height:2.8rem;font-size:2.8rem;line-height:1}.item-inner>ion-icon[large],.item>ion-icon[large]{min-height:3.2rem;font-size:3.2rem}.item-inner>ion-icon[small],.item>ion-icon[small]{min-height:1.8rem;font-size:1.8rem}ion-avatar,ion-thumbnail{display:block;line-height:1}ion-avatar img,ion-thumbnail img{display:block}.item-cover{left:0;top:0;position:absolute;width:100%;height:100%;background:0 0;cursor:pointer}ion-reorder{-webkit-transform:translate3d(300%,0,0);transform:translate3d(300%,0,0);display:none;-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;max-width:40px;height:100%;font-size:1.7em;opacity:.25;-webkit-transition:-webkit-transform 140ms ease-in;transition:-webkit-transform 140ms ease-in;transition:transform 140ms ease-in;transition:transform 140ms ease-in,-webkit-transform 140ms ease-in;pointer-events:all;-ms-touch-action:manipulation;touch-action:manipulation}.reorder-side-start ion-reorder{-webkit-transform:translate3d(-300%,0,0);transform:translate3d(-300%,0,0);-webkit-box-ordinal-group:0;-webkit-order:-1;-ms-flex-order:-1;order:-1}ion-reorder ion-icon{pointer-events:none}.reorder-enabled ion-reorder{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.reorder-visible ion-reorder{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}.reorder-list-active .item,.reorder-list-active .item-wrapper{-webkit-transition:-webkit-transform .3s;transition:-webkit-transform .3s;transition:transform .3s;transition:transform .3s,-webkit-transform .3s;will-change:transform}.reorder-list-active .item-inner{pointer-events:none}.item-wrapper.reorder-active,.item.reorder-active,.reorder-active{z-index:4;-webkit-box-shadow:0 0 10px rgba(0,0,0,.4);box-shadow:0 0 10px rgba(0,0,0,.4);opacity:.8;-webkit-transition:none;transition:none;pointer-events:none}ion-item-sliding{position:relative;display:block;overflow:hidden;width:100%}ion-item-sliding .item{position:static}ion-item-options{position:absolute;z-index:1;display:none;height:100%;font-size:14px;visibility:hidden;top:0;right:0;-webkit-box-pack:end;-webkit-justify-content:flex-end;-ms-flex-pack:end;justify-content:flex-end}ion-item-options[side=left]{right:auto;left:0;-webkit-box-pack:start;-webkit-justify-content:flex-start;-ms-flex-pack:start;justify-content:flex-start}ion-item-options .button{margin:0;padding:0 .7em;border-radius:0;height:100%;-webkit-box-shadow:none;box-shadow:none;-webkit-box-sizing:content-box;box-sizing:content-box}ion-item-options .button:last-child{padding-right:.7em}@media screen and (orientation:landscape){ion-item-options .button:last-child{padding-right:calc(constant(safe-area-inset-right) + .7em);padding-right:calc(env(safe-area-inset-right) + .7em)}}ion-item-options:not([icon-left]) .button:not([icon-only]) .button-inner,ion-item-options:not([icon-start]) .button:not([icon-only]) .button-inner{-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column}ion-item-options:not([icon-left]) .button:not([icon-only]) ion-icon,ion-item-options:not([icon-start]) .button:not([icon-only]) ion-icon{padding-left:0;padding-right:0;padding-bottom:.3em}ion-item-sliding.active-slide .item,ion-item-sliding.active-slide .item.activated{position:relative;z-index:2;opacity:1;-webkit-transition:-webkit-transform .5s cubic-bezier(.36,.66,.04,1);transition:-webkit-transform .5s cubic-bezier(.36,.66,.04,1);transition:transform .5s cubic-bezier(.36,.66,.04,1);transition:transform .5s cubic-bezier(.36,.66,.04,1),-webkit-transform .5s cubic-bezier(.36,.66,.04,1);pointer-events:none;will-change:transform}ion-item-sliding.active-slide ion-item-options{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}ion-item-sliding.active-slide.active-options-left ion-item-options[side=left],ion-item-sliding.active-slide.active-options-right ion-item-options:not([side=left]){width:100%;visibility:visible}button[expandable]{-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0;-webkit-transition-duration:0;transition-duration:0;-webkit-transition-property:none;transition-property:none;-webkit-transition-timing-function:cubic-bezier(.65,.05,.36,1);transition-timing-function:cubic-bezier(.65,.05,.36,1)}ion-item-sliding.active-swipe-right button[expandable]{-webkit-transition-duration:.6s;transition-duration:.6s;-webkit-transition-property:padding-left;transition-property:padding-left;padding-left:90%;-webkit-box-ordinal-group:2;-webkit-order:1;-ms-flex-order:1;order:1}ion-item-sliding.active-swipe-left button[expandable]{-webkit-transition-duration:.6s;transition-duration:.6s;-webkit-transition-property:padding-right;transition-property:padding-right;padding-right:90%;-webkit-box-ordinal-group:0;-webkit-order:-1;-ms-flex-order:-1;order:-1}.item-ios{padding-left:16px;padding-left:16px;border-radius:0;position:relative;font-size:1.7rem;color:#000;background-color:#fff;-webkit-transition:background-color .2s linear;transition:background-color .2s linear}@media screen and (orientation:landscape){.item-ios{padding-left:calc(constant(safe-area-inset-left) + 16px);padding-left:calc(env(safe-area-inset-left) + 16px)}}.item-ios.activated{background-color:#d9d9d9;-webkit-transition-duration:0s;transition-duration:0s}.item-ios h1{margin:0 0 2px;font-size:2.4rem;font-weight:400}.item-ios h2{margin:0 0 2px;font-size:1.7rem;font-weight:400}.item-ios h3,.item-ios h4,.item-ios h5,.item-ios h6{margin:0 0 3px;font-size:1.4rem;font-weight:400;line-height:normal}.item-ios p{overflow:inherit;font-size:1.4rem;line-height:normal;text-overflow:inherit;color:#8e9093;margin:0 0 2px}.item-ios h2:last-child,.item-ios h3:last-child,.item-ios h4:last-child,.item-ios h5:last-child,.item-ios h6:last-child,.item-ios p:last-child{margin-bottom:0}.item-ios.item-block .item-inner{padding-right:8px;padding-right:8px;border-bottom:.55px solid #c8c7cc}@media screen and (orientation:landscape){.item-ios.item-block .item-inner{padding-right:calc(constant(safe-area-inset-right) + 8px);padding-right:calc(env(safe-area-inset-right) + 8px)}}.item-ios [item-left],.item-ios [item-start]{margin:8px 16px 8px 0}.item-ios [item-end],.item-ios [item-right]{margin:8px}.item-ios ion-icon[item-end],.item-ios ion-icon[item-left],.item-ios ion-icon[item-right],.item-ios ion-icon[item-start]{margin-left:0;margin-top:9px;margin-bottom:8px}.item-ios .item-button{padding:0 .5em;height:24px;font-size:1.3rem}.item-ios .item-button[icon-only],.item-ios .item-button[icon-only] ion-icon{padding:0 1px}.item-ios ion-avatar[item-left],.item-ios ion-avatar[item-start],.item-ios ion-thumbnail[item-left],.item-ios ion-thumbnail[item-start]{margin:8px 16px 8px 0}.item-ios ion-avatar[item-end],.item-ios ion-avatar[item-right],.item-ios ion-thumbnail[item-end],.item-ios ion-thumbnail[item-right]{margin:8px}.item-ios ion-avatar{min-width:36px;min-height:36px}.item-ios ion-avatar img,.item-ios ion-avatar ion-img{border-radius:50%;overflow:hidden;width:36px;height:36px}.item-ios ion-thumbnail{min-width:56px;min-height:56px}.item-ios ion-thumbnail img,.item-ios ion-thumbnail ion-img{width:56px;height:56px}.item-ios[detail-push] .item-inner,a.item-ios:not([detail-none]) .item-inner,button.item-ios:not([detail-none]) .item-inner{background-image:url(\"data:image/svg+xml;charset=utf-8,<svg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%2012%2020'><path%20d='M2,20l-2-2l8-8L0,2l2-2l10,10L2,20z'%20fill='%23c8c7cc'/></svg>\");padding-right:32px;background-position:right 14px center;background-position:right calc(14px + constant(safe-area-inset-right)) center;background-position:right calc(14px + env(safe-area-inset-right)) center;background-repeat:no-repeat;background-size:14px 14px}ion-item-group .item-ios:first-child .item-inner{border-top-width:0}ion-item-group .item-ios:last-child .item-inner,ion-item-group .item-wrapper:last-child .item-ios .item-inner{border:0}.item-divider-ios{padding-left:16px;padding-left:16px;color:#222;background-color:#f7f7f7}@media screen and (orientation:landscape){.item-divider-ios{padding-left:calc(constant(safe-area-inset-left) + 16px);padding-left:calc(env(safe-area-inset-left) + 16px)}}.item-ios .text-ios-primary{color:#488aff}.item-divider-ios-primary,.item-ios-primary{color:#fff;background-color:#488aff}.item-divider-ios-primary p,.item-ios-primary p{color:#fff}.item-divider-ios-primary.activated,.item-ios-primary.activated{background-color:#427feb}.item-ios .text-ios-secondary{color:#32db64}.item-divider-ios-secondary,.item-ios-secondary{color:#fff;background-color:#32db64}.item-divider-ios-secondary p,.item-ios-secondary p{color:#fff}.item-divider-ios-secondary.activated,.item-ios-secondary.activated{background-color:#2ec95c}.item-ios .text-ios-danger{color:#f53d3d}.item-divider-ios-danger,.item-ios-danger{color:#fff;background-color:#f53d3d}.item-divider-ios-danger p,.item-ios-danger p{color:#fff}.item-divider-ios-danger.activated,.item-ios-danger.activated{background-color:#e13838}.item-ios .text-ios-light{color:#f4f4f4}.item-divider-ios-light,.item-ios-light{color:#000;background-color:#f4f4f4}.item-divider-ios-light p,.item-ios-light p{color:#000}.item-divider-ios-light.activated,.item-ios-light.activated{background-color:#e0e0e0}.item-ios .text-ios-dark{color:#222}.item-divider-ios-dark,.item-ios-dark{color:#fff;background-color:#222}.item-divider-ios-dark p,.item-ios-dark p{color:#fff}.item-divider-ios-dark.activated,.item-ios-dark.activated{background-color:#343434}.item-ios .text-ios-energized{color:#ffc527}.item-divider-ios-energized,.item-ios-energized{color:#000;background-color:#ffc527}.item-divider-ios-energized p,.item-ios-energized p{color:#000}.item-divider-ios-energized.activated,.item-ios-energized.activated{background-color:#ebb524}.item-ios .text-ios-royal{color:#7e60ff}.item-divider-ios-royal,.item-ios-royal{color:#fff;background-color:#7e60ff}.item-divider-ios-royal p,.item-ios-royal p{color:#fff}.item-divider-ios-royal.activated,.item-ios-royal.activated{background-color:#7458eb}.item-ios .text-ios-subtle{color:#444}.item-divider-ios-subtle,.item-ios-subtle{color:#fff;background-color:#444}.item-divider-ios-subtle p,.item-ios-subtle p{color:#fff}.item-divider-ios-subtle.activated,.item-ios-subtle.activated{background-color:#535353}.item-ios .text-ios-vibrant{color:#663399}.item-divider-ios-vibrant,.item-ios-vibrant{color:#fff;background-color:#663399}.item-divider-ios-vibrant p,.item-ios-vibrant p{color:#fff}.item-divider-ios-vibrant.activated,.item-ios-vibrant.activated{background-color:#7243a1}.item-ios .text-ios-bright{color:#ffc125}.item-divider-ios-bright,.item-ios-bright{color:#000;background-color:#ffc125}.item-divider-ios-bright p,.item-ios-bright p{color:#000}.item-divider-ios-bright.activated,.item-ios-bright.activated{background-color:#ebb222}.list-ios ion-item-sliding{background-color:#fff}.item-md{padding-left:16px;padding-right:0;position:relative;font-size:1.6rem;font-weight:400;text-transform:none;color:#000;background-color:#fff;-webkit-box-shadow:none;box-shadow:none;-webkit-transition:background-color .3s cubic-bezier(.4,0,.2,1);transition:background-color .3s cubic-bezier(.4,0,.2,1)}.item-md.activated{background-color:#f1f1f1}.item-md[no-lines]{border-width:0}.item-md h1{margin:0 0 2px;font-size:2.4rem;font-weight:400}.item-md h2{margin:2px 0;font-size:1.6rem;font-weight:400}.item-md h3,.item-md h4,.item-md h5,.item-md h6{margin:2px 0;font-size:1.4rem;font-weight:400;line-height:normal}.item-md p{margin:0 0 2px;overflow:inherit;font-size:1.4rem;line-height:normal;text-overflow:inherit;color:#666}.item-md.item-block .item-inner{padding-right:8px;border-bottom:1px solid #dedede}.item-md [item-end],.item-md [item-left],.item-md [item-right],.item-md [item-start]{margin:9px 8px 9px 0}.item-md ion-icon[item-end],.item-md ion-icon[item-left],.item-md ion-icon[item-right],.item-md ion-icon[item-start]{margin-left:0;margin-top:11px;margin-bottom:10px}.item-md .item-button{padding:0 .6em;height:25px;font-size:1.2rem}.item-md .item-button[icon-only],.item-md .item-button[icon-only] ion-icon{padding:0 1px}.item-md ion-icon[item-left]+.item-inner,.item-md ion-icon[item-left]+.item-input,.item-md ion-icon[item-start]+.item-inner,.item-md ion-icon[item-start]+.item-input{margin-left:24px}.item-md ion-avatar[item-left],.item-md ion-avatar[item-start],.item-md ion-thumbnail[item-left],.item-md ion-thumbnail[item-start]{margin:8px 16px 8px 0}.item-md ion-avatar[item-end],.item-md ion-avatar[item-right],.item-md ion-thumbnail[item-end],.item-md ion-thumbnail[item-right]{margin:8px}.item-md ion-avatar{min-width:40px;min-height:40px}.item-md ion-avatar img,.item-md ion-avatar ion-img{border-radius:50%;overflow:hidden;width:40px;height:40px}.item-md ion-thumbnail{min-width:80px;min-height:80px}.item-md ion-thumbnail img,.item-md ion-thumbnail ion-img{width:80px;height:80px}ion-item-group .item-md:first-child .item-inner{border-top-width:0}ion-item-group .item-md .item-wrapper:last-child .item-inner,ion-item-group .item-md:last-child .item-inner{border:0}.item-divider-md{padding-left:16px;border-bottom:1px solid #dedede;font-size:1.4rem;color:#858585;background-color:#fff}.item-md .text-md-primary{color:#488aff}.item-divider-md-primary,.item-md-primary{color:#fff;background-color:#488aff}.item-divider-md-primary p,.item-md-primary p{color:#fff}.item-divider-md-primary.activated,.item-md-primary.activated{background-color:#427feb}.item-md .text-md-secondary{color:#32db64}.item-divider-md-secondary,.item-md-secondary{color:#fff;background-color:#32db64}.item-divider-md-secondary p,.item-md-secondary p{color:#fff}.item-divider-md-secondary.activated,.item-md-secondary.activated{background-color:#2ec95c}.item-md .text-md-danger{color:#f53d3d}.item-divider-md-danger,.item-md-danger{color:#fff;background-color:#f53d3d}.item-divider-md-danger p,.item-md-danger p{color:#fff}.item-divider-md-danger.activated,.item-md-danger.activated{background-color:#e13838}.item-md .text-md-light{color:#f4f4f4}.item-divider-md-light,.item-md-light{color:#000;background-color:#f4f4f4}.item-divider-md-light p,.item-md-light p{color:#000}.item-divider-md-light.activated,.item-md-light.activated{background-color:#e0e0e0}.item-md .text-md-dark{color:#222}.item-divider-md-dark,.item-md-dark{color:#fff;background-color:#222}.item-divider-md-dark p,.item-md-dark p{color:#fff}.item-divider-md-dark.activated,.item-md-dark.activated{background-color:#343434}.item-md .text-md-energized{color:#ffc527}.item-divider-md-energized,.item-md-energized{color:#000;background-color:#ffc527}.item-divider-md-energized p,.item-md-energized p{color:#000}.item-divider-md-energized.activated,.item-md-energized.activated{background-color:#ebb524}.item-md .text-md-royal{color:#7e60ff}.item-divider-md-royal,.item-md-royal{color:#fff;background-color:#7e60ff}.item-divider-md-royal p,.item-md-royal p{color:#fff}.item-divider-md-royal.activated,.item-md-royal.activated{background-color:#7458eb}.item-md .text-md-subtle{color:#444}.item-divider-md-subtle,.item-md-subtle{color:#fff;background-color:#444}.item-divider-md-subtle p,.item-md-subtle p{color:#fff}.item-divider-md-subtle.activated,.item-md-subtle.activated{background-color:#535353}.item-md .text-md-vibrant{color:#663399}.item-divider-md-vibrant,.item-md-vibrant{color:#fff;background-color:#663399}.item-divider-md-vibrant p,.item-md-vibrant p{color:#fff}.item-divider-md-vibrant.activated,.item-md-vibrant.activated{background-color:#7243a1}.item-md .text-md-bright{color:#ffc125}.item-divider-md-bright,.item-md-bright{color:#000;background-color:#ffc125}.item-divider-md-bright p,.item-md-bright p{color:#000}.item-divider-md-bright.activated,.item-md-bright.activated{background-color:#ebb222}.list-md ion-item-sliding{background-color:#fff}.item-md ion-reorder{font-size:1.5em;opacity:.3}.item-wp{padding-left:16px;padding-right:0;position:relative;font-size:1.6rem;font-weight:400;text-transform:none;color:#000;background-color:#fff;-webkit-box-shadow:none;box-shadow:none}.item-wp.activated{background-color:#aaa}.item-wp[no-lines]{border-width:0}.item-wp h1{margin:0 0 2px;font-size:2.4rem;font-weight:400}.item-wp h2{margin:2px 0;font-size:1.6rem;font-weight:400}.item-wp h3,.item-wp h4,.item-wp h5,.item-wp h6{margin:2px 0;font-size:1.4rem;font-weight:400;line-height:normal}.item-wp p{margin:0 0 2px;overflow:inherit;font-size:1.4rem;line-height:normal;text-overflow:inherit;color:#666}.item-wp.item-block .item-inner{padding-right:8px;border-bottom:1px solid transparent}.item-wp [item-end],.item-wp [item-left],.item-wp [item-right],.item-wp [item-start]{margin:9px 8px 9px 0}.item-wp ion-icon[item-end],.item-wp ion-icon[item-left],.item-wp ion-icon[item-right],.item-wp ion-icon[item-start]{margin-left:0;margin-top:11px;margin-bottom:10px}.item-wp .item-button{padding:0 .6em;height:25px;font-size:1.2rem}.item-wp .item-button[icon-only],.item-wp .item-button[icon-only] ion-icon{padding:0 1px}.item-wp[text-wrap] ion-label{font-size:1.4rem;line-height:1.5}.item-wp ion-icon[item-left]+.item-inner,.item-wp ion-icon[item-left]+.item-input,.item-wp ion-icon[item-start]+.item-inner,.item-wp ion-icon[item-start]+.item-input{margin-left:8px}.item-wp ion-avatar[item-left],.item-wp ion-avatar[item-start],.item-wp ion-thumbnail[item-left],.item-wp ion-thumbnail[item-start]{margin:8px 16px 8px 0}.item-wp ion-avatar[item-end],.item-wp ion-avatar[item-right],.item-wp ion-thumbnail[item-end],.item-wp ion-thumbnail[item-right]{margin:8px}.item-wp ion-avatar{min-width:40px;min-height:40px}.item-wp ion-avatar img,.item-wp ion-avatar ion-img{border-radius:50%;overflow:hidden;width:40px;height:40px}.item-wp ion-thumbnail{min-width:80px;min-height:80px}.item-wp ion-thumbnail img,.item-wp ion-thumbnail ion-img{width:80px;height:80px}.item-divider-wp{padding-left:16px;border-bottom:1px solid transparent;font-size:2rem;color:#000;background-color:#fff}.item-wp .text-wp-primary{color:#488aff}.item-divider-wp-primary,.item-wp-primary{color:#fff;background-color:#488aff}.item-divider-wp-primary p,.item-wp-primary p{color:#fff}.item-divider-wp-primary.activated,.item-wp-primary.activated{background-color:#427feb}.item-wp .text-wp-secondary{color:#32db64}.item-divider-wp-secondary,.item-wp-secondary{color:#fff;background-color:#32db64}.item-divider-wp-secondary p,.item-wp-secondary p{color:#fff}.item-divider-wp-secondary.activated,.item-wp-secondary.activated{background-color:#2ec95c}.item-wp .text-wp-danger{color:#f53d3d}.item-divider-wp-danger,.item-wp-danger{color:#fff;background-color:#f53d3d}.item-divider-wp-danger p,.item-wp-danger p{color:#fff}.item-divider-wp-danger.activated,.item-wp-danger.activated{background-color:#e13838}.item-wp .text-wp-light{color:#f4f4f4}.item-divider-wp-light,.item-wp-light{color:#000;background-color:#f4f4f4}.item-divider-wp-light p,.item-wp-light p{color:#000}.item-divider-wp-light.activated,.item-wp-light.activated{background-color:#e0e0e0}.item-wp .text-wp-dark{color:#222}.item-divider-wp-dark,.item-wp-dark{color:#fff;background-color:#222}.item-divider-wp-dark p,.item-wp-dark p{color:#fff}.item-divider-wp-dark.activated,.item-wp-dark.activated{background-color:#343434}.item-wp .text-wp-energized{color:#ffc527}.item-divider-wp-energized,.item-wp-energized{color:#000;background-color:#ffc527}.item-divider-wp-energized p,.item-wp-energized p{color:#000}.item-divider-wp-energized.activated,.item-wp-energized.activated{background-color:#ebb524}.item-wp .text-wp-royal{color:#7e60ff}.item-divider-wp-royal,.item-wp-royal{color:#fff;background-color:#7e60ff}.item-divider-wp-royal p,.item-wp-royal p{color:#fff}.item-divider-wp-royal.activated,.item-wp-royal.activated{background-color:#7458eb}.item-wp .text-wp-subtle{color:#444}.item-divider-wp-subtle,.item-wp-subtle{color:#fff;background-color:#444}.item-divider-wp-subtle p,.item-wp-subtle p{color:#fff}.item-divider-wp-subtle.activated,.item-wp-subtle.activated{background-color:#535353}.item-wp .text-wp-vibrant{color:#663399}.item-divider-wp-vibrant,.item-wp-vibrant{color:#fff;background-color:#663399}.item-divider-wp-vibrant p,.item-wp-vibrant p{color:#fff}.item-divider-wp-vibrant.activated,.item-wp-vibrant.activated{background-color:#7243a1}.item-wp .text-wp-bright{color:#ffc125}.item-divider-wp-bright,.item-wp-bright{color:#000;background-color:#ffc125}.item-divider-wp-bright p,.item-wp-bright p{color:#000}.item-divider-wp-bright.activated,.item-wp-bright.activated{background-color:#ebb222}.list-wp ion-item-sliding{background-color:#fff}ion-label{margin:0;display:block;overflow:hidden;-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1;font-size:inherit;text-overflow:ellipsis;white-space:nowrap}.item-input ion-label{-webkit-box-flex:initial;-webkit-flex:initial;-ms-flex:initial;flex:initial;max-width:200px;pointer-events:none}[text-wrap] ion-label{white-space:normal}ion-label[fixed]{-webkit-box-flex:0;-webkit-flex:0 0 100px;-ms-flex:0 0 100px;flex:0 0 100px;width:100px;min-width:100px;max-width:200px}.item-label-floating ion-label,.item-label-stacked ion-label{-webkit-align-self:stretch;-ms-flex-item-align:stretch;align-self:stretch;width:auto;max-width:100%}ion-label[floating],ion-label[stacked]{margin-bottom:0}.item-label-floating .input-wrapper,.item-label-stacked .input-wrapper{-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1;-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column}.item-label-floating ion-select,.item-label-stacked ion-select{-webkit-align-self:stretch;-ms-flex-item-align:stretch;align-self:stretch;max-width:100%}.label-ios{margin:11px 8px 11px 0}.label-ios+.input+.cloned-input,.label-ios+ion-input .text-input,.label-ios+ion-textarea .text-input{margin-left:16px;width:calc(100% - (16px / 2) - 16px)}.label-ios[stacked]{margin-bottom:4px;font-size:1.2rem}.label-ios[floating]{margin-bottom:0;-webkit-transform:translate3d(0,27px,0);transform:translate3d(0,27px,0);-webkit-transform-origin:left top;transform-origin:left top;-webkit-transition:-webkit-transform 150ms ease-in-out;transition:-webkit-transform 150ms ease-in-out;transition:transform 150ms ease-in-out;transition:transform 150ms ease-in-out,-webkit-transform 150ms ease-in-out}.input-has-focus .label-ios[floating],.input-has-value .label-ios[floating],.item-input-has-focus .label-ios[floating],.item-input-has-value .label-ios[floating]{-webkit-transform:translate3d(0,0,0) scale(.8);transform:translate3d(0,0,0) scale(.8)}.item-ios.item-label-floating [item-end],.item-ios.item-label-floating [item-right],.item-ios.item-label-stacked [item-end],.item-ios.item-label-stacked [item-right]{margin-top:6px;margin-bottom:6px}.item-datetime .label-ios-primary,.item-input .label-ios-primary,.item-select .label-ios-primary,.label-ios-primary{color:#488aff}.item-datetime .label-ios-secondary,.item-input .label-ios-secondary,.item-select .label-ios-secondary,.label-ios-secondary{color:#32db64}.item-datetime .label-ios-danger,.item-input .label-ios-danger,.item-select .label-ios-danger,.label-ios-danger{color:#f53d3d}.item-datetime .label-ios-light,.item-input .label-ios-light,.item-select .label-ios-light,.label-ios-light{color:#f4f4f4}.item-datetime .label-ios-dark,.item-input .label-ios-dark,.item-select .label-ios-dark,.label-ios-dark{color:#222}.item-datetime .label-ios-energized,.item-input .label-ios-energized,.item-select .label-ios-energized,.label-ios-energized{color:#ffc527}.item-datetime .label-ios-royal,.item-input .label-ios-royal,.item-select .label-ios-royal,.label-ios-royal{color:#7e60ff}.item-datetime .label-ios-subtle,.item-input .label-ios-subtle,.item-select .label-ios-subtle,.label-ios-subtle{color:#444}.item-datetime .label-ios-vibrant,.item-input .label-ios-vibrant,.item-select .label-ios-vibrant,.label-ios-vibrant{color:#663399}.item-datetime .label-ios-bright,.item-input .label-ios-bright,.item-select .label-ios-bright,.label-ios-bright{color:#ffc125}.label-md{margin:13px 8px 13px 0}[text-wrap] .label-md{font-size:1.4rem;line-height:1.5}.item-datetime .label-md,.item-input .label-md,.item-select .label-md{color:#999}.label-md[stacked]{font-size:1.2rem}.label-md[floating]{-webkit-transform:translate3d(0,27px,0);transform:translate3d(0,27px,0);-webkit-transform-origin:left top;transform-origin:left top;-webkit-transition:-webkit-transform 150ms ease-in-out;transition:-webkit-transform 150ms ease-in-out;transition:transform 150ms ease-in-out;transition:transform 150ms ease-in-out,-webkit-transform 150ms ease-in-out}.label-md[floating],.label-md[stacked]{margin-left:0;margin-bottom:0}.input-has-focus .label-md[floating],.input-has-focus .label-md[stacked],.item-input-has-focus .label-md[floating],.item-input-has-focus .label-md[stacked]{color:#488aff}.input-has-focus .label-md[floating],.input-has-value .label-md[floating],.item-input-has-focus .label-md[floating],.item-input-has-value .label-md[floating]{-webkit-transform:translate3d(0,0,0) scale(.8);transform:translate3d(0,0,0) scale(.8)}.item-md.item-label-floating [item-end],.item-md.item-label-floating [item-right],.item-md.item-label-stacked [item-end],.item-md.item-label-stacked [item-right]{margin-top:7px;margin-bottom:7px}.item-datetime .label-md-primary,.item-input .label-md-primary,.item-select .label-md-primary,.label-md-primary{color:#488aff}.item-datetime .label-md-secondary,.item-input .label-md-secondary,.item-select .label-md-secondary,.label-md-secondary{color:#32db64}.item-datetime .label-md-danger,.item-input .label-md-danger,.item-select .label-md-danger,.label-md-danger{color:#f53d3d}.item-datetime .label-md-light,.item-input .label-md-light,.item-select .label-md-light,.label-md-light{color:#f4f4f4}.item-datetime .label-md-dark,.item-input .label-md-dark,.item-select .label-md-dark,.label-md-dark{color:#222}.item-datetime .label-md-energized,.item-input .label-md-energized,.item-select .label-md-energized,.label-md-energized{color:#ffc527}.item-datetime .label-md-royal,.item-input .label-md-royal,.item-select .label-md-royal,.label-md-royal{color:#7e60ff}.item-datetime .label-md-subtle,.item-input .label-md-subtle,.item-select .label-md-subtle,.label-md-subtle{color:#444}.item-datetime .label-md-vibrant,.item-input .label-md-vibrant,.item-select .label-md-vibrant,.label-md-vibrant{color:#663399}.item-datetime .label-md-bright,.item-input .label-md-bright,.item-select .label-md-bright,.label-md-bright{color:#ffc125}.label-wp{margin:13px 8px 13px 0}.item-datetime .label-wp,.item-input .label-wp,.item-select .label-wp{color:#999}.label-wp[stacked]{font-size:1.2rem}.label-wp[floating]{-webkit-transform:translate3d(8px,34px,0);transform:translate3d(8px,34px,0);-webkit-transform-origin:left top;transform-origin:left top}.label-wp[floating],.label-wp[stacked]{margin-left:0;margin-bottom:0}.input-has-focus .label-wp[floating],.input-has-focus .label-wp[stacked],.item-input-has-focus .label-wp[floating],.item-input-has-focus .label-wp[stacked]{color:#488aff}.input-has-focus .label-wp[floating],.input-has-value .label-wp[floating],.item-input-has-focus .label-wp[floating],.item-input-has-value .label-wp[floating]{-webkit-transform:translate3d(0,0,0) scale(.8);transform:translate3d(0,0,0) scale(.8)}.item-wp.item-label-floating [item-end],.item-wp.item-label-floating [item-right],.item-wp.item-label-stacked [item-end],.item-wp.item-label-stacked [item-right]{margin-top:13px;margin-bottom:13px}.item-datetime .label-wp-primary,.item-input .label-wp-primary,.item-select .label-wp-primary,.label-wp-primary{color:#488aff}.item-datetime .label-wp-secondary,.item-input .label-wp-secondary,.item-select .label-wp-secondary,.label-wp-secondary{color:#32db64}.item-datetime .label-wp-danger,.item-input .label-wp-danger,.item-select .label-wp-danger,.label-wp-danger{color:#f53d3d}.item-datetime .label-wp-light,.item-input .label-wp-light,.item-select .label-wp-light,.label-wp-light{color:#f4f4f4}.item-datetime .label-wp-dark,.item-input .label-wp-dark,.item-select .label-wp-dark,.label-wp-dark{color:#222}.item-datetime .label-wp-energized,.item-input .label-wp-energized,.item-select .label-wp-energized,.label-wp-energized{color:#ffc527}.item-datetime .label-wp-royal,.item-input .label-wp-royal,.item-select .label-wp-royal,.label-wp-royal{color:#7e60ff}.item-datetime .label-wp-subtle,.item-input .label-wp-subtle,.item-select .label-wp-subtle,.label-wp-subtle{color:#444}.item-datetime .label-wp-vibrant,.item-input .label-wp-vibrant,.item-select .label-wp-vibrant,.label-wp-vibrant{color:#663399}.item-datetime .label-wp-bright,.item-input .label-wp-bright,.item-select .label-wp-bright,.label-wp-bright{color:#ffc125}ion-list-header{margin:0;padding:0;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;overflow:hidden;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;width:100%;min-height:4rem}ion-list{margin:0;padding:0;display:block;list-style-type:none}ion-list[inset]{overflow:hidden;-webkit-transform:translateZ(0);transform:translateZ(0)}.list-ios{margin:-1px 0 32px}.list-ios>.item-block:first-child{border-top:.55px solid #c8c7cc}.list-ios>.item-block:last-child,.list-ios>.item-wrapper:last-child .item-block{border-bottom:.55px solid #c8c7cc}.list-ios>.item-block:last-child .item-inner,.list-ios>.item-wrapper:last-child .item-block .item-inner{border-bottom:0}.list-ios .item-block .item-inner{border-bottom:.55px solid #c8c7cc}.list-ios .item[no-lines],.list-ios .item[no-lines] .item-inner{border-width:0}.list-ios ion-item-options{border-bottom:.55px solid #c8c7cc}.list-ios ion-item-options .button{margin:0;border-radius:0;display:-webkit-inline-box;display:-webkit-inline-flex;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;height:100%;min-height:100%;border:0;-webkit-box-sizing:border-box;box-sizing:border-box}.list-ios ion-item-options .button::before{margin:0 auto}.list-ios:not([inset])+.list-ios:not([inset]) ion-list-header{margin-top:-10px;padding-top:0}.list-ios[inset]{margin:16px;border-radius:4px}.list-ios[inset] ion-list-header{background-color:#fff}.list-ios[inset] .item{border-bottom:1px solid #c8c7cc}.list-ios[inset] .item-inner{border-bottom:0}.list-ios[inset]>.item-wrapper:first-child .item,.list-ios[inset]>.item:first-child{border-top:0}.list-ios[inset]>.item-wrapper:last-child .item,.list-ios[inset]>.item:last-child{border-bottom:0}.list-ios[inset]+ion-list[inset]{margin-top:0}.list-ios[no-lines] .item,.list-ios[no-lines] .item .item-inner,.list-ios[no-lines] ion-item-options,.list-ios[no-lines] ion-list-header{border-width:0}.list-header-ios{padding-left:16px;padding-left:16px;position:relative;border-bottom:.55px solid #c8c7cc;font-size:1.2rem;font-weight:500;letter-spacing:.1rem;text-transform:uppercase;color:#333;background:0 0}@media screen and (orientation:landscape){.list-header-ios{padding-left:calc(constant(safe-area-inset-left) + 16px);padding-left:calc(env(safe-area-inset-left) + 16px)}}.list-header-ios-primary{color:#fff;background-color:#488aff}.list-header-ios-secondary{color:#fff;background-color:#32db64}.list-header-ios-danger{color:#fff;background-color:#f53d3d}.list-header-ios-light{color:#000;background-color:#f4f4f4}.list-header-ios-dark{color:#fff;background-color:#222}.list-header-ios-energized{color:#000;background-color:#ffc527}.list-header-ios-royal{color:#fff;background-color:#7e60ff}.list-header-ios-subtle{color:#fff;background-color:#444}.list-header-ios-vibrant{color:#fff;background-color:#663399}.list-header-ios-bright{color:#000;background-color:#ffc125}.list-md{margin:-1px 0 16px}.list-md .item-block .item-inner{border-bottom:1px solid #dedede}.list-md>.item-block:last-child .item-inner,.list-md>.item-block:last-child ion-label,.list-md>.item-wrapper:last-child .item-inner,.list-md>.item-wrapper:last-child ion-label{border-bottom:0}.list-md>ion-input:last-child::after{left:0}.list-md ion-item-options{border-bottom:1px solid #dedede}.list-md ion-item-options .button{margin:0;border-radius:0;display:-webkit-inline-box;display:-webkit-inline-flex;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;height:100%;border:0;-webkit-box-shadow:none;box-shadow:none;-webkit-box-sizing:border-box;box-sizing:border-box}.list-md ion-item-options .button::before{margin:0 auto}.list-md .item[no-lines],.list-md .item[no-lines] .item-inner{border-width:0}.list-md+ion-list ion-list-header{margin-top:-16px}.list-md[inset]{margin:16px;border-radius:2px}.list-md[inset] .item:first-child{border-top-left-radius:2px;border-top-right-radius:2px;border-top-width:0}.list-md[inset] .item:last-child{border-bottom-right-radius:2px;border-bottom-left-radius:2px;border-bottom-width:0}.list-md[inset] .item-input{padding-left:0;padding-right:0}.list-md[inset]+ion-list[inset]{margin-top:0}.list-md[inset] ion-list-header{background-color:#fff}.list-md[no-lines] .item .item-inner,.list-md[no-lines] .item-block,.list-md[no-lines] ion-item-options{border-width:0}.list-header-md{padding-left:16px;margin-bottom:13px;min-height:4.5rem;border-top:1px solid #dedede;font-size:1.4rem;color:#757575}.list-header-md-primary{color:#fff;background-color:#488aff}.list-header-md-secondary{color:#fff;background-color:#32db64}.list-header-md-danger{color:#fff;background-color:#f53d3d}.list-header-md-light{color:#000;background-color:#f4f4f4}.list-header-md-dark{color:#fff;background-color:#222}.list-header-md-energized{color:#000;background-color:#ffc527}.list-header-md-royal{color:#fff;background-color:#7e60ff}.list-header-md-subtle{color:#fff;background-color:#444}.list-header-md-vibrant{color:#fff;background-color:#663399}.list-header-md-bright{color:#000;background-color:#ffc125}.list-md .item-input:last-child{border-bottom:1px solid #dedede}.list-wp{margin:0 0 16px}.list-wp .item-block .item-inner{border-bottom:1px solid transparent}.list-wp>.item-block:first-child,.list-wp>.item-wrapper:first-child .item-block{border-top:1px solid transparent}.list-wp>.item-block:last-child,.list-wp>.item-wrapper:last-child .item-block{border-bottom:1px solid transparent}.list-wp>.item-block:last-child .item-inner,.list-wp>.item-block:last-child ion-label,.list-wp>.item-wrapper:last-child .item-inner,.list-wp>.item-wrapper:last-child ion-label{border-bottom:0}.list-wp>ion-input:last-child::after{left:0}.list-wp ion-item-options .button{margin:1px 0;border-radius:0;display:-webkit-inline-box;display:-webkit-inline-flex;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;height:calc(100% - 2px);border:0;-webkit-box-shadow:none;box-shadow:none;-webkit-box-sizing:border-box;box-sizing:border-box}.list-wp ion-item-options .button::before{margin:0 auto}.list-wp .item[no-lines],.list-wp .item[no-lines] .item-inner{border-width:0}.list-wp+ion-list ion-list-header{margin-top:-16px;padding-top:0}.list-wp[inset]{margin:16px;border-radius:2px}.list-wp[inset] .item:first-child{border-top-left-radius:2px;border-top-right-radius:2px;border-top-width:0}.list-wp[inset] .item:last-child{border-bottom-right-radius:2px;border-bottom-left-radius:2px;border-bottom-width:0}.list-wp[inset] .item-input{padding-left:0;padding-right:0}.list-wp[inset]+ion-list[inset]{margin-top:0}.list-wp[inset] ion-list-header{background-color:#fff}.list-wp[no-lines] .item,.list-wp[no-lines] .item .item-inner{border-width:0}.list-header-wp{padding-left:16px;border-bottom:1px solid transparent;font-size:2rem;color:#000}.list-header-wp-primary{color:#fff;background-color:#488aff}.list-header-wp-secondary{color:#fff;background-color:#32db64}.list-header-wp-danger{color:#fff;background-color:#f53d3d}.list-header-wp-light{color:#000;background-color:#f4f4f4}.list-header-wp-dark{color:#fff;background-color:#222}.list-header-wp-energized{color:#000;background-color:#ffc527}.list-header-wp-royal{color:#fff;background-color:#7e60ff}.list-header-wp-subtle{color:#fff;background-color:#444}.list-header-wp-vibrant{color:#fff;background-color:#663399}.list-header-wp-bright{color:#000;background-color:#ffc125}ion-loading{left:0;right:0;top:0;bottom:0;position:absolute;z-index:1000;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;contain:strict}.loading-wrapper{z-index:10;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;opacity:0}.loading-ios .loading-wrapper{border-radius:8px;max-width:270px;max-height:90%;color:#000;background:#f8f8f8;padding:24px 34px}.loading-ios .loading-content{font-weight:700}.loading-ios .loading-spinner+.loading-content{margin-left:16px}.loading-ios .spinner-ios line,.loading-ios .spinner-ios-small line{stroke:#69717d}.loading-ios .spinner-bubbles circle{fill:#69717d}.loading-ios .spinner-circles circle{fill:#69717d}.loading-ios .spinner-crescent circle{stroke:#69717d}.loading-ios .spinner-dots circle{fill:#69717d}.loading-md .loading-wrapper{border-radius:2px;max-width:280px;max-height:90%;color:rgba(0,0,0,.5);background:#fafafa;-webkit-box-shadow:0 16px 20px rgba(0,0,0,.4);box-shadow:0 16px 20px rgba(0,0,0,.4);padding:24px}.loading-md .loading-spinner+.loading-content{margin-left:16px}.loading-md .spinner-ios line,.loading-md .spinner-ios-small line{stroke:#488aff}.loading-md .spinner-bubbles circle{fill:#488aff}.loading-md .spinner-circles circle{fill:#488aff}.loading-md .spinner-crescent circle{stroke:#488aff}.loading-md .spinner-dots circle{fill:#488aff}.loading-wp .loading-wrapper{border-radius:2px;max-width:280px;max-height:90%;color:#fff;background:#000;padding:20px}.loading-wp .loading-spinner+.loading-content{margin-left:16px}.loading-wp .spinner-ios line,.loading-wp .spinner-ios-small line{stroke:#fff}.loading-wp .spinner-bubbles circle{fill:#fff}.loading-wp .spinner-circles circle{fill:#fff}.loading-wp .spinner-crescent circle{stroke:#fff}.loading-wp .spinner-dots circle{fill:#fff}ion-menu{left:0;right:0;top:0;bottom:0;position:absolute;display:none;contain:strict}ion-menu.show-menu{display:block}.menu-inner{left:0;right:auto;top:0;bottom:0;-webkit-transform:translate3d(-9999px,0,0);transform:translate3d(-9999px,0,0);position:absolute;display:block;width:304px;height:100%;contain:strict}.menu-inner>ion-content,.menu-inner>ion-footer,.menu-inner>ion-header{position:absolute}ion-menu[side=left]>.menu-inner{right:auto;left:0}ion-menu[side=right]>.menu-inner{right:0;left:auto}ion-menu[side=end]>.menu-inner{left:auto;right:0}ion-menu ion-backdrop{z-index:-1;display:none;opacity:.01}.menu-content{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}.menu-content-open{cursor:pointer;-ms-touch-action:manipulation;touch-action:manipulation}.menu-content-open .toolbar,.menu-content-open ion-content,.menu-content-open ion-pane{pointer-events:none}@media (max-width:340px){.menu-inner{width:264px}}ion-menu[type=reveal]{z-index:0}ion-menu[type=reveal].show-menu .menu-inner{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}ion-menu[type=overlay]{z-index:80}ion-menu[type=overlay] .show-backdrop{display:block}.ios .menu-inner{background:#fff}.ios .menu-content-reveal{-webkit-box-shadow:0 0 10px rgba(0,0,0,.25);box-shadow:0 0 10px rgba(0,0,0,.25)}.ios .menu-content-push{-webkit-box-shadow:0 0 10px rgba(0,0,0,.25);box-shadow:0 0 10px rgba(0,0,0,.25)}.ios ion-menu[type=overlay] .menu-inner{-webkit-box-shadow:0 0 10px rgba(0,0,0,.25);box-shadow:0 0 10px rgba(0,0,0,.25)}.md .menu-inner{background:#fff}.md .menu-content-reveal{-webkit-box-shadow:0 0 10px rgba(0,0,0,.25);box-shadow:0 0 10px rgba(0,0,0,.25)}.md .menu-content-push{-webkit-box-shadow:0 0 10px rgba(0,0,0,.25);box-shadow:0 0 10px rgba(0,0,0,.25)}.md ion-menu[type=overlay] .menu-inner{-webkit-box-shadow:0 0 10px rgba(0,0,0,.25);box-shadow:0 0 10px rgba(0,0,0,.25)}.wp .menu-inner{background:#f2f2f2}ion-modal{left:0;top:0;position:absolute;display:block;width:100%;height:100%;contain:strict}@media not all and (min-width:768px) and (min-height:600px){ion-modal ion-backdrop{visibility:hidden}}.modal-wrapper{z-index:10;height:100%;contain:strict}@media only screen and (min-width:768px) and (min-height:600px){.modal-wrapper{left:calc(50% - (600px/2));top:calc(50% - (500px/2));position:absolute;width:600px;height:500px}}@media only screen and (min-width:768px) and (min-height:768px){.modal-wrapper{left:calc(50% - (600px/2));top:calc(50% - (600px/2));position:absolute;width:600px;height:600px}}.ios .modal-wrapper{-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0)}@media only screen and (min-width:768px) and (min-height:600px){.ios .modal-wrapper{border-radius:10px;overflow:hidden}}.md .modal-wrapper{-webkit-transform:translate3d(0,40px,0);transform:translate3d(0,40px,0);opacity:.01}@media only screen and (min-width:768px) and (min-height:600px){.md .modal-wrapper{border-radius:2px;overflow:hidden;-webkit-box-shadow:0 28px 48px rgba(0,0,0,.4);box-shadow:0 28px 48px rgba(0,0,0,.4)}}.wp .modal-wrapper{-webkit-transform:translate3d(0,40px,0);transform:translate3d(0,40px,0);opacity:.01}.note-ios{color:#aeacb4}.note-ios-primary{color:#488aff}.note-ios-secondary{color:#32db64}.note-ios-danger{color:#f53d3d}.note-ios-light{color:#f4f4f4}.note-ios-dark{color:#222}.note-ios-energized{color:#ffc527}.note-ios-royal{color:#7e60ff}.note-ios-subtle{color:#444}.note-ios-vibrant{color:#663399}.note-ios-bright{color:#ffc125}.note-md{color:#c5c5c5}.note-md-primary{color:#488aff}.note-md-secondary{color:#32db64}.note-md-danger{color:#f53d3d}.note-md-light{color:#f4f4f4}.note-md-dark{color:#222}.note-md-energized{color:#ffc527}.note-md-royal{color:#7e60ff}.note-md-subtle{color:#444}.note-md-vibrant{color:#663399}.note-md-bright{color:#ffc125}.note-wp{color:rgba(0,0,0,.5)}.note-wp-primary{color:#488aff}.note-wp-secondary{color:#32db64}.note-wp-danger{color:#f53d3d}.note-wp-light{color:#f4f4f4}.note-wp-dark{color:#222}.note-wp-energized{color:#ffc527}.note-wp-royal{color:#7e60ff}.note-wp-subtle{color:#444}.note-wp-vibrant{color:#663399}.note-wp-bright{color:#ffc125}ion-picker-cmp{left:0;top:0;position:absolute;z-index:1000;display:block;width:100%;height:100%;contain:strict}.picker-toolbar{z-index:1;width:100%;contain:strict}.picker-wrapper{left:0;right:0;bottom:0;margin:auto;-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0);position:absolute;z-index:10;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;overflow:hidden;-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;width:100%;max-width:500px;contain:strict}.picker-columns{margin-bottom:constant(safe-area-inset-bottom);margin-bottom:env(safe-area-inset-bottom);position:relative;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;overflow:hidden;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;contain:strict}.picker-col{position:relative;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;height:100%;-webkit-box-sizing:content-box;box-sizing:content-box;contain:content}.picker-opts{position:relative;-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1;max-width:100%}.picker-prefix{text-align:right;text-align:end;position:relative;-webkit-box-flex:2;-webkit-flex:2;-ms-flex:2;flex:2;min-width:45%;max-width:50%;white-space:nowrap}.picker-suffix{text-align:left;text-align:start;position:relative;-webkit-box-flex:2;-webkit-flex:2;-ms-flex:2;flex:2;min-width:45%;max-width:50%;white-space:nowrap}.picker-opt{left:0;top:0;text-align:center;position:absolute;display:block;overflow:hidden;width:100%;text-overflow:ellipsis;white-space:nowrap;will-change:transform;contain:strict}.picker-opt.picker-opt-disabled{pointer-events:none}.picker-opt-disabled{opacity:0}.picker-opts-left{-webkit-box-pack:start;-webkit-justify-content:flex-start;-ms-flex-pack:start;justify-content:flex-start}.picker-opts-right{-webkit-box-pack:end;-webkit-justify-content:flex-end;-ms-flex-pack:end;justify-content:flex-end}.picker-above-highlight,.picker-below-highlight{display:none;pointer-events:none}.picker-ios .picker-wrapper{height:260px;border-top:1px solid #c8c7cc;background:#fff}.picker-ios .picker-toolbar{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;height:44px;border-bottom:.55px solid #c8c7cc;background:#fff}.picker-ios .picker-toolbar-button{text-align:right;text-align:end;-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1}.picker-ios .picker-toolbar-button:last-child .picker-button{font-weight:600}.picker-ios .picker-toolbar-cancel{text-align:left;text-align:start;font-weight:400}.picker-ios .picker-button,.picker-ios .picker-button.activated{margin:0;height:44px;color:#488aff;background:0 0}.picker-columns{height:215px;-webkit-perspective:1000px;perspective:1000px}.picker-ios .picker-col{-webkit-transform-style:preserve-3d;transform-style:preserve-3d;padding:0 4px}.picker-ios .picker-opts,.picker-ios .picker-prefix,.picker-ios .picker-suffix{top:77px;font-size:20px;line-height:42px;color:#000;-webkit-transform-style:preserve-3d;transform-style:preserve-3d;pointer-events:none}.picker-ios .picker-opt{margin:0;-webkit-transform-origin:center center;transform-origin:center center;height:4.6rem;font-size:20px;line-height:42px;color:#000;background:0 0;-webkit-transform-style:preserve-3d;transform-style:preserve-3d;-webkit-transition-timing-function:ease-out;transition-timing-function:ease-out;-webkit-backface-visibility:hidden;backface-visibility:hidden;pointer-events:auto;padding:0}.picker-ios .picker-above-highlight{left:0;top:0;-webkit-transform:translate3d(0,0,90px);transform:translate3d(0,0,90px);position:absolute;z-index:10;display:block;width:100%;height:81px;border-bottom:1px solid #c8c7cc;background:-webkit-gradient(linear,left top,left bottom,color-stop(20%,#fff),to(rgba(255,255,255,.7)));background:linear-gradient(to bottom,#fff 20%,rgba(255,255,255,.7) 100%)}.picker-ios .picker-below-highlight{left:0;top:115px;-webkit-transform:translate3d(0,0,90px);transform:translate3d(0,0,90px);position:absolute;z-index:11;display:block;width:100%;height:119px;border-top:1px solid #c8c7cc;background:-webkit-gradient(linear,left bottom,left top,color-stop(30%,#fff),to(rgba(255,255,255,.7)));background:linear-gradient(to top,#fff 30%,rgba(255,255,255,.7) 100%)}.picker-md .picker-wrapper{height:260px;border-top:.55px solid #dedede;background:#fff}.picker-md .picker-toolbar{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:end;-webkit-justify-content:flex-end;-ms-flex-pack:end;justify-content:flex-end;height:44px;background:#fff}.picker-md .picker-button,.picker-md .picker-button.activated{margin:0;height:44px;color:#488aff;background:0 0;-webkit-box-shadow:none;box-shadow:none}.picker-md .picker-columns{height:216px;-webkit-perspective:1800px;perspective:1800px}.picker-md .picker-col{-webkit-transform-style:preserve-3d;transform-style:preserve-3d;padding:0 8px}.picker-md .picker-opts,.picker-md .picker-prefix,.picker-md .picker-suffix{top:77px;font-size:22px;line-height:42px;color:#000;-webkit-transform-style:preserve-3d;transform-style:preserve-3d;pointer-events:none}.picker-md .picker-opt{margin:0;height:4.3rem;font-size:22px;line-height:42px;color:#000;background:0 0;-webkit-transition-timing-function:ease-out;transition-timing-function:ease-out;-webkit-backface-visibility:hidden;backface-visibility:hidden;pointer-events:auto;padding:0}.picker-md .picker-opt.picker-opt-selected,.picker-md .picker-prefix,.picker-md .picker-suffix{color:#488aff}.picker-md .picker-above-highlight{left:0;top:0;-webkit-transform:translate3d(0,0,90px);transform:translate3d(0,0,90px);position:absolute;z-index:10;width:100%;height:81px;border-bottom:1px solid #dedede;background:-webkit-gradient(linear,left top,left bottom,color-stop(20%,#fff),to(rgba(255,255,255,.7)));background:linear-gradient(to bottom,#fff 20%,rgba(255,255,255,.7) 100%)}.picker-md .picker-below-highlight{left:0;top:115px;-webkit-transform:translate3d(0,0,90px);transform:translate3d(0,0,90px);position:absolute;z-index:11;width:100%;height:119px;border-top:1px solid #dedede;background:-webkit-gradient(linear,left bottom,left top,color-stop(30%,#fff),to(rgba(255,255,255,.7)));background:linear-gradient(to top,#fff 30%,rgba(255,255,255,.7) 100%)}.picker-wp .picker-wrapper{height:260px;border-top:.55px solid transparent;background:#fff}.picker-wp .picker-toolbar{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:end;-webkit-justify-content:flex-end;-ms-flex-pack:end;justify-content:flex-end;height:44px;border-width:.55px;background:#fff}.picker-wp .picker-toolbar-button{text-align:right;text-align:end;-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1}.picker-wp .picker-toolbar-cancel{text-align:left;text-align:start;font-weight:400}.picker-wp .picker-button,.picker-wp .picker-button.activated{margin:0;height:44px;color:#488aff;background:0 0;-webkit-box-shadow:none;box-shadow:none}.picker-wp .picker-columns{height:216px;-webkit-perspective:1800px;perspective:1800px}.picker-wp .picker-col{-webkit-transform-style:preserve-3d;transform-style:preserve-3d;padding:0 4px}.picker-wp .picker-opts,.picker-wp .picker-prefix,.picker-wp .picker-suffix{top:77px;font-size:22px;line-height:42px;color:#000;-webkit-transform-style:preserve-3d;transform-style:preserve-3d;pointer-events:none}.picker-wp .picker-opt{margin:0;height:4.2rem;font-size:22px;line-height:42px;color:#000;background:0 0;-webkit-transition-timing-function:ease-out;transition-timing-function:ease-out;-webkit-backface-visibility:hidden;backface-visibility:hidden;pointer-events:auto;padding:0}.picker-wp .picker-opt-selected,.picker-wp .picker-prefix,.picker-wp .picker-suffix{color:#488aff}.picker-wp .picker-above-highlight{left:0;top:0;-webkit-transform:translate3d(0,0,90px);transform:translate3d(0,0,90px);position:absolute;z-index:10;width:100%;height:81px;border-bottom:1px solid transparent;background:-webkit-gradient(linear,left top,left bottom,color-stop(20%,#fff),to(rgba(255,255,255,.7)));background:linear-gradient(to bottom,#fff 20%,rgba(255,255,255,.7) 100%)}.picker-wp .picker-below-highlight{left:0;top:115px;-webkit-transform:translate3d(0,0,90px);transform:translate3d(0,0,90px);position:absolute;z-index:11;width:100%;height:119px;border-top:1px solid transparent;background:-webkit-gradient(linear,left bottom,left top,color-stop(30%,#fff),to(rgba(255,255,255,.7)));background:linear-gradient(to top,#fff 30%,rgba(255,255,255,.7) 100%)}ion-popover{left:0;right:0;top:0;bottom:0;position:absolute;z-index:1000;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center}.popover-wrapper{z-index:10;opacity:0}.popover-content{position:absolute;z-index:10;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;overflow:auto;-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column}.popover-content .scroll-content,.popover-content ion-content{contain:none}.popover-content .scroll-content{position:relative}.popover-ios .popover-content{border-radius:10px;width:200px;min-width:0;min-height:0;max-height:90%;color:#000;background:#fff}.popover-ios .popover-arrow{position:absolute;display:block;overflow:hidden;width:20px;height:10px}.popover-ios .popover-arrow::after{left:3px;top:3px;border-radius:3px;position:absolute;z-index:10;width:14px;height:14px;background-color:#fff;content:\"\";-webkit-transform:rotate(45deg);transform:rotate(45deg)}.popover-ios.popover-bottom .popover-arrow{top:auto;bottom:-10px}.popover-ios.popover-bottom .popover-arrow::after{top:-6px}.popover-ios .item-ios{padding-left:16px}.popover-ios .item-ios[detail-push] .item-inner,.popover-ios a.item-ios:not([detail-none]) .item-inner,.popover-ios button.item-ios:not([detail-none]) .item-inner{background-position:right 14px center}.popover-md .popover-content{border-radius:2px;-webkit-transform-origin:left top;transform-origin:left top;width:250px;min-width:0;min-height:0;max-height:90%;color:#000;background:#fff;-webkit-box-shadow:0 3px 12px 2px rgba(0,0,0,.3);box-shadow:0 3px 12px 2px rgba(0,0,0,.3)}.popover-md .popover-viewport{opacity:0;-webkit-transition-delay:.1s;transition-delay:.1s}.popover-wp .popover-content{border-radius:0;-webkit-transform-origin:left top;transform-origin:left top;width:200px;min-width:0;min-height:0;max-height:90%;border:2px solid #ccc;color:#000;background:#fff}.popover-wp .popover-viewport{opacity:0;-webkit-transition-delay:.1s;transition-delay:.1s}.radio-ios{position:relative;display:inline-block}.radio-ios .radio-icon{position:relative;display:block;width:16px;height:21px}.radio-ios .radio-checked .radio-inner{left:7px;top:4px;position:absolute;width:5px;height:12px;border-width:2px;border-top-width:0;border-left-width:0;border-style:solid;border-color:#488aff;-webkit-transform:rotate(45deg);transform:rotate(45deg)}.item-ios.item-radio-disabled ion-label,.radio-ios.radio-disabled{opacity:.3;pointer-events:none}.item-ios .radio-ios{position:static;display:block;margin:8px 11px 8px 8px}.item-ios .radio-ios[item-left],.item-ios .radio-ios[item-start]{margin:8px 21px 8px 3px}.item-radio.item-ios ion-label{margin-left:0}.item-radio-checked.item-ios ion-label{color:#488aff}.item-radio-ios-primary.item-radio-checked ion-label{color:#488aff}.radio-ios-primary .radio-checked{color:#488aff}.radio-ios-primary .radio-checked .radio-inner{border-color:#488aff}.item-radio-ios-secondary.item-radio-checked ion-label{color:#32db64}.radio-ios-secondary .radio-checked{color:#32db64}.radio-ios-secondary .radio-checked .radio-inner{border-color:#32db64}.item-radio-ios-danger.item-radio-checked ion-label{color:#f53d3d}.radio-ios-danger .radio-checked{color:#f53d3d}.radio-ios-danger .radio-checked .radio-inner{border-color:#f53d3d}.item-radio-ios-light.item-radio-checked ion-label{color:#f4f4f4}.radio-ios-light .radio-checked{color:#f4f4f4}.radio-ios-light .radio-checked .radio-inner{border-color:#f4f4f4}.item-radio-ios-dark.item-radio-checked ion-label{color:#222}.radio-ios-dark .radio-checked{color:#222}.radio-ios-dark .radio-checked .radio-inner{border-color:#222}.item-radio-ios-energized.item-radio-checked ion-label{color:#ffc527}.radio-ios-energized .radio-checked{color:#ffc527}.radio-ios-energized .radio-checked .radio-inner{border-color:#ffc527}.item-radio-ios-royal.item-radio-checked ion-label{color:#7e60ff}.radio-ios-royal .radio-checked{color:#7e60ff}.radio-ios-royal .radio-checked .radio-inner{border-color:#7e60ff}.item-radio-ios-subtle.item-radio-checked ion-label{color:#444}.radio-ios-subtle .radio-checked{color:#444}.radio-ios-subtle .radio-checked .radio-inner{border-color:#444}.item-radio-ios-vibrant.item-radio-checked ion-label{color:#663399}.radio-ios-vibrant .radio-checked{color:#663399}.radio-ios-vibrant .radio-checked .radio-inner{border-color:#663399}.item-radio-ios-bright.item-radio-checked ion-label{color:#ffc125}.radio-ios-bright .radio-checked{color:#ffc125}.radio-ios-bright .radio-checked .radio-inner{border-color:#ffc125}.radio-md{position:relative;display:inline-block}.radio-md .radio-icon{left:0;top:0;margin:0;border-radius:50%;position:relative;display:block;width:16px;height:16px;border-width:2px;border-style:solid;border-color:#787878}.radio-md .radio-inner{left:2px;top:2px;border-radius:50%;position:absolute;width:8px;height:8px;background-color:#488aff;-webkit-transform:scale3d(0,0,0);transform:scale3d(0,0,0);-webkit-transition:-webkit-transform 280ms cubic-bezier(.4,0,.2,1);transition:-webkit-transform 280ms cubic-bezier(.4,0,.2,1);transition:transform 280ms cubic-bezier(.4,0,.2,1);transition:transform 280ms cubic-bezier(.4,0,.2,1),-webkit-transform 280ms cubic-bezier(.4,0,.2,1)}.radio-md .radio-checked{border-color:#488aff}.radio-md .radio-checked .radio-inner{-webkit-transform:scale3d(1,1,1);transform:scale3d(1,1,1)}.item-md.item-radio-disabled ion-label,.radio-md.radio-disabled{opacity:.3;pointer-events:none}.item-md .radio-md{position:static;display:block;margin:9px 10px 9px 0}.item-md .radio-md[item-left],.item-md .radio-md[item-start]{margin:11px 36px 10px 4px}.item-radio.item-md ion-label{margin-left:0}.item-radio-checked.item-md ion-label{color:#488aff}.item-radio-md-primary.item-radio-checked ion-label{color:#488aff}.radio-md-primary .radio-checked{border-color:#488aff}.radio-md-primary .radio-inner{background-color:#488aff}.item-radio-md-secondary.item-radio-checked ion-label{color:#32db64}.radio-md-secondary .radio-checked{border-color:#32db64}.radio-md-secondary .radio-inner{background-color:#32db64}.item-radio-md-danger.item-radio-checked ion-label{color:#f53d3d}.radio-md-danger .radio-checked{border-color:#f53d3d}.radio-md-danger .radio-inner{background-color:#f53d3d}.item-radio-md-light.item-radio-checked ion-label{color:#f4f4f4}.radio-md-light .radio-checked{border-color:#f4f4f4}.radio-md-light .radio-inner{background-color:#f4f4f4}.item-radio-md-dark.item-radio-checked ion-label{color:#222}.radio-md-dark .radio-checked{border-color:#222}.radio-md-dark .radio-inner{background-color:#222}.item-radio-md-energized.item-radio-checked ion-label{color:#ffc527}.radio-md-energized .radio-checked{border-color:#ffc527}.radio-md-energized .radio-inner{background-color:#ffc527}.item-radio-md-royal.item-radio-checked ion-label{color:#7e60ff}.radio-md-royal .radio-checked{border-color:#7e60ff}.radio-md-royal .radio-inner{background-color:#7e60ff}.item-radio-md-subtle.item-radio-checked ion-label{color:#444}.radio-md-subtle .radio-checked{border-color:#444}.radio-md-subtle .radio-inner{background-color:#444}.item-radio-md-vibrant.item-radio-checked ion-label{color:#663399}.radio-md-vibrant .radio-checked{border-color:#663399}.radio-md-vibrant .radio-inner{background-color:#663399}.item-radio-md-bright.item-radio-checked ion-label{color:#ffc125}.radio-md-bright .radio-checked{border-color:#ffc125}.radio-md-bright .radio-inner{background-color:#ffc125}.radio-wp{position:relative;display:inline-block}.radio-wp .radio-icon{left:0;top:0;margin:0;border-radius:50%;position:relative;display:block;width:16px;height:16px;border-width:2px;border-style:solid;border-color:#333}.radio-wp .radio-inner{left:2px;top:2px;border-radius:50%;position:absolute;display:none;width:8px;height:8px;background-color:#333}.radio-wp .radio-checked{border-color:#488aff}.radio-wp .radio-checked .radio-inner{display:block}.item-wp.item-radio-disabled ion-label,.radio-wp.radio-disabled{opacity:.3;pointer-events:none}.item-wp .radio-wp{position:static;display:block;-webkit-box-ordinal-group:0;-webkit-order:-1;-ms-flex-order:-1;order:-1;margin:9px 20px 9px 4px}.item-wp .radio-wp[item-end],.item-wp .radio-wp[item-right]{-webkit-box-ordinal-group:1;-webkit-order:0;-ms-flex-order:0;order:0;margin:11px 10px 10px 0}.item-radio.item-wp ion-label{margin-left:0}.radio-wp-primary .radio-checked{border-color:#488aff}.radio-wp-secondary .radio-checked{border-color:#32db64}.radio-wp-danger .radio-checked{border-color:#f53d3d}.radio-wp-light .radio-checked{border-color:#f4f4f4}.radio-wp-dark .radio-checked{border-color:#222}.radio-wp-energized .radio-checked{border-color:#ffc527}.radio-wp-royal .radio-checked{border-color:#7e60ff}.radio-wp-subtle .radio-checked{border-color:#444}.radio-wp-vibrant .radio-checked{border-color:#663399}.radio-wp-bright .radio-checked{border-color:#ffc125}.item-range .item-inner{overflow:visible;width:100%}.item-range .input-wrapper{overflow:visible;-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;width:100%}.item-range ion-range{width:100%}.item-range ion-range ion-label{-webkit-align-self:center;-ms-flex-item-align:center;align-self:center}ion-range{position:relative;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center}ion-range ion-label{-webkit-box-flex:initial;-webkit-flex:initial;-ms-flex:initial;flex:initial}ion-range ion-icon{min-height:2.4rem;font-size:2.4rem;line-height:1}.range-slider{position:relative;-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1;cursor:pointer}.range-ios{padding:8px 16px}.range-ios [range-left]{margin:0 20px 0 0}.range-ios [range-right]{margin:0 0 0 20px}.range-ios.range-has-pin{padding-top:20px}.range-ios .range-slider{height:42px}.range-ios .range-bar{left:0;top:21px;border-radius:1px;position:absolute;width:100%;height:1px;background:#bdbdbd;pointer-events:none}.range-ios.range-pressed .range-bar-active{will-change:left,right}.range-ios.range-pressed .range-knob-handle{will-change:left}.range-ios .range-bar-active{bottom:0;width:auto;background:#488aff}.range-ios .range-knob-handle{left:0;top:21px;margin-left:-21px;margin-top:-21px;text-align:center;position:absolute;width:42px;height:42px}.range-ios .range-knob{left:7px;top:7px;border-radius:50%;position:absolute;width:28px;height:28px;background:#fff;-webkit-box-shadow:0 3px 1px rgba(0,0,0,.1),0 4px 8px rgba(0,0,0,.13),0 0 0 1px rgba(0,0,0,.02);box-shadow:0 3px 1px rgba(0,0,0,.1),0 4px 8px rgba(0,0,0,.13),0 0 0 1px rgba(0,0,0,.02);pointer-events:none}.range-ios .range-tick{margin-left:-.5px;border-radius:0;position:absolute;top:17.5px;width:1px;height:8px;background:#bdbdbd;pointer-events:none}.range-ios .range-tick-active{background:#488aff}.range-ios .range-pin{text-align:center;border-radius:50px;-webkit-transform:translate3d(0,28px,0) scale(.01);transform:translate3d(0,28px,0) scale(.01);position:relative;top:-20px;display:inline-block;min-width:28px;font-size:12px;color:#000;background:0 0;-webkit-transition:-webkit-transform 120ms ease;transition:-webkit-transform 120ms ease;transition:transform 120ms ease;transition:transform 120ms ease,-webkit-transform 120ms ease;padding:8px}.range-ios .range-knob-pressed .range-pin{-webkit-transform:translate3d(0,0,0) scale(1);transform:translate3d(0,0,0) scale(1)}.range-ios.range-disabled{opacity:.5}.range-ios-primary .range-bar-active,.range-ios-primary .range-tick-active{background:#488aff}.range-ios-secondary .range-bar-active,.range-ios-secondary .range-tick-active{background:#32db64}.range-ios-danger .range-bar-active,.range-ios-danger .range-tick-active{background:#f53d3d}.range-ios-light .range-bar-active,.range-ios-light .range-tick-active{background:#f4f4f4}.range-ios-dark .range-bar-active,.range-ios-dark .range-tick-active{background:#222}.range-ios-energized .range-bar-active,.range-ios-energized .range-tick-active{background:#ffc527}.range-ios-royal .range-bar-active,.range-ios-royal .range-tick-active{background:#7e60ff}.range-ios-subtle .range-bar-active,.range-ios-subtle .range-tick-active{background:#444}.range-ios-vibrant .range-bar-active,.range-ios-vibrant .range-tick-active{background:#663399}.range-ios-bright .range-bar-active,.range-ios-bright .range-tick-active{background:#ffc125}.range-md{padding:8px}.range-md [range-left]{margin:0 12px 0 0}.range-md [range-right]{margin:0 0 0 12px}.range-md.range-has-pin{padding-top:28px}.range-md .range-slider{height:42px}.range-md .range-bar{left:0;top:21px;position:absolute;width:100%;height:2px;background:#bdbdbd;pointer-events:none}.range-md.range-pressed .range-bar-active{will-change:left,right}.range-md.range-pressed .range-knob-handle{will-change:left}.range-md .range-bar-active{bottom:0;width:auto;background:#488aff}.range-md .range-knob-handle{left:0;top:21px;margin-left:-21px;margin-top:-21px;text-align:center;position:absolute;width:42px;height:42px}.range-md .range-knob{left:12px;top:13px;border-radius:50%;position:absolute;z-index:2;width:18px;height:18px;background:#488aff;-webkit-transform:scale(.67);transform:scale(.67);-webkit-transition-duration:120ms;transition-duration:120ms;-webkit-transition-property:background-color,border,-webkit-transform;transition-property:background-color,border,-webkit-transform;transition-property:transform,background-color,border;transition-property:transform,background-color,border,-webkit-transform;-webkit-transition-timing-function:ease;transition-timing-function:ease;pointer-events:none}.range-md .range-tick{margin-left:-1px;border-radius:50%;position:absolute;top:21px;z-index:1;width:2px;height:2px;background:#000;pointer-events:none}.range-md .range-tick-active{background:#000}.range-md .range-pin{padding:8px 0;text-align:center;border-radius:50%;-webkit-transform:translate3d(0,28px,0) scale(.01);transform:translate3d(0,28px,0) scale(.01);position:relative;top:-20px;display:inline-block;min-width:28px;height:28px;font-size:12px;color:#fff;background:#488aff;-webkit-transition:background-color 120ms ease,-webkit-transform 120ms ease;transition:background-color 120ms ease,-webkit-transform 120ms ease;transition:transform 120ms ease,background-color 120ms ease;transition:transform 120ms ease,background-color 120ms ease,-webkit-transform 120ms ease}.range-md .range-pin::before{left:50%;top:3px;border-top-left-radius:50%;border-top-right-radius:50%;border-bottom-right-radius:50%;border-bottom-left-radius:0;margin-left:-13px;position:absolute;z-index:-1;width:26px;height:26px;background:#488aff;content:\"\";-webkit-transform:rotate(-45deg);transform:rotate(-45deg);-webkit-transition:background-color 120ms ease;transition:background-color 120ms ease}.range-md .range-knob-pressed .range-pin{-webkit-transform:translate3d(0,0,0) scale(1);transform:translate3d(0,0,0) scale(1)}.range-md:not(.range-has-pin) .range-knob-pressed .range-knob{-webkit-transform:scale(1);transform:scale(1)}.range-md .range-knob-min.range-knob-min .range-knob{border:2px solid #bdbdbd;background:#fff}.range-md .range-knob-min.range-knob-min .range-pin,.range-md .range-knob-min.range-knob-min .range-pin::before{color:#fff;background:#bdbdbd}.range-md.range-disabled .range-bar-active{background-color:#bdbdbd}.range-md.range-disabled .range-knob{outline:5px solid #fff;background-color:#bdbdbd;-webkit-transform:scale(.55);transform:scale(.55)}.range-md-primary .range-md .range-knob-min.range-knob-min .range-knob{border:2px solid #bdbdbd;background:#fff}.range-md-primary .range-md .range-knob-min.range-knob-min .range-pin,.range-md-primary .range-md .range-knob-min.range-knob-min .range-pin::before{color:#fff;background:#bdbdbd}.range-md-primary .range-bar-active,.range-md-primary .range-knob,.range-md-primary .range-pin,.range-md-primary .range-pin::before{background:#488aff}.range-md-secondary .range-md .range-knob-min.range-knob-min .range-knob{border:2px solid #bdbdbd;background:#fff}.range-md-secondary .range-md .range-knob-min.range-knob-min .range-pin,.range-md-secondary .range-md .range-knob-min.range-knob-min .range-pin::before{color:#fff;background:#bdbdbd}.range-md-secondary .range-bar-active,.range-md-secondary .range-knob,.range-md-secondary .range-pin,.range-md-secondary .range-pin::before{background:#32db64}.range-md-danger .range-md .range-knob-min.range-knob-min .range-knob{border:2px solid #bdbdbd;background:#fff}.range-md-danger .range-md .range-knob-min.range-knob-min .range-pin,.range-md-danger .range-md .range-knob-min.range-knob-min .range-pin::before{color:#fff;background:#bdbdbd}.range-md-danger .range-bar-active,.range-md-danger .range-knob,.range-md-danger .range-pin,.range-md-danger .range-pin::before{background:#f53d3d}.range-md-light .range-md .range-knob-min.range-knob-min .range-knob{border:2px solid #bdbdbd;background:#fff}.range-md-light .range-md .range-knob-min.range-knob-min .range-pin,.range-md-light .range-md .range-knob-min.range-knob-min .range-pin::before{color:#fff;background:#bdbdbd}.range-md-light .range-bar-active,.range-md-light .range-knob,.range-md-light .range-pin,.range-md-light .range-pin::before{background:#f4f4f4}.range-md-dark .range-md .range-knob-min.range-knob-min .range-knob{border:2px solid #bdbdbd;background:#fff}.range-md-dark .range-md .range-knob-min.range-knob-min .range-pin,.range-md-dark .range-md .range-knob-min.range-knob-min .range-pin::before{color:#fff;background:#bdbdbd}.range-md-dark .range-bar-active,.range-md-dark .range-knob,.range-md-dark .range-pin,.range-md-dark .range-pin::before{background:#222}.range-md-energized .range-md .range-knob-min.range-knob-min .range-knob{border:2px solid #bdbdbd;background:#fff}.range-md-energized .range-md .range-knob-min.range-knob-min .range-pin,.range-md-energized .range-md .range-knob-min.range-knob-min .range-pin::before{color:#fff;background:#bdbdbd}.range-md-energized .range-bar-active,.range-md-energized .range-knob,.range-md-energized .range-pin,.range-md-energized .range-pin::before{background:#ffc527}.range-md-royal .range-md .range-knob-min.range-knob-min .range-knob{border:2px solid #bdbdbd;background:#fff}.range-md-royal .range-md .range-knob-min.range-knob-min .range-pin,.range-md-royal .range-md .range-knob-min.range-knob-min .range-pin::before{color:#fff;background:#bdbdbd}.range-md-royal .range-bar-active,.range-md-royal .range-knob,.range-md-royal .range-pin,.range-md-royal .range-pin::before{background:#7e60ff}.range-md-subtle .range-md .range-knob-min.range-knob-min .range-knob{border:2px solid #bdbdbd;background:#fff}.range-md-subtle .range-md .range-knob-min.range-knob-min .range-pin,.range-md-subtle .range-md .range-knob-min.range-knob-min .range-pin::before{color:#fff;background:#bdbdbd}.range-md-subtle .range-bar-active,.range-md-subtle .range-knob,.range-md-subtle .range-pin,.range-md-subtle .range-pin::before{background:#444}.range-md-vibrant .range-md .range-knob-min.range-knob-min .range-knob{border:2px solid #bdbdbd;background:#fff}.range-md-vibrant .range-md .range-knob-min.range-knob-min .range-pin,.range-md-vibrant .range-md .range-knob-min.range-knob-min .range-pin::before{color:#fff;background:#bdbdbd}.range-md-vibrant .range-bar-active,.range-md-vibrant .range-knob,.range-md-vibrant .range-pin,.range-md-vibrant .range-pin::before{background:#663399}.range-md-bright .range-md .range-knob-min.range-knob-min .range-knob{border:2px solid #bdbdbd;background:#fff}.range-md-bright .range-md .range-knob-min.range-knob-min .range-pin,.range-md-bright .range-md .range-knob-min.range-knob-min .range-pin::before{color:#fff;background:#bdbdbd}.range-md-bright .range-bar-active,.range-md-bright .range-knob,.range-md-bright .range-pin,.range-md-bright .range-pin::before{background:#ffc125}.range-wp{padding:8px}.range-wp [range-left]{margin:0 12px 0 0}.range-wp [range-right]{margin:0 0 0 12px}.range-wp.range-has-pin{padding-top:28px}.range-wp .range-slider{height:42px}.range-wp .range-bar{left:0;top:21px;position:absolute;width:100%;height:2px;background:#bdbdbd;pointer-events:none}.range-wp.range-pressed .range-bar-active{will-change:left,right}.range-wp.range-pressed .range-knob-handle{will-change:left}.range-wp .range-bar-active{bottom:0;width:auto;background:#488aff}.range-wp .range-knob-handle{left:0;top:21px;margin-left:-21px;margin-top:-21px;text-align:center;position:absolute;width:42px;height:42px}.range-wp .range-knob{left:17px;top:10px;border-radius:4px;position:absolute;width:8px;height:24px;background:#488aff;pointer-events:none}.range-wp .range-tick{margin-left:-1px;border-radius:4px;position:absolute;top:19px;width:2px;height:6px;background:#bdbdbd;pointer-events:none}.range-wp .range-tick-active{background:#488aff}.range-wp .range-pin{text-align:center;border-radius:50px;-webkit-transform:translate3d(0,28px,0) scale(.01);transform:translate3d(0,28px,0) scale(.01);position:relative;top:-24px;display:inline-block;min-width:28px;font-size:12px;color:#fff;background:#488aff;-webkit-transition:-webkit-transform 120ms ease;transition:-webkit-transform 120ms ease;transition:transform 120ms ease;transition:transform 120ms ease,-webkit-transform 120ms ease;padding:8px}.range-wp .range-knob-pressed .range-pin{-webkit-transform:translate3d(0,0,0) scale(1);transform:translate3d(0,0,0) scale(1)}.range-wp.range-disabled{opacity:.5}.range-wp-primary .range-bar-active,.range-wp-primary .range-knob,.range-wp-primary .range-pin,.range-wp-primary .range-tick-active{background:#488aff}.range-wp-secondary .range-bar-active,.range-wp-secondary .range-knob,.range-wp-secondary .range-pin,.range-wp-secondary .range-tick-active{background:#32db64}.range-wp-danger .range-bar-active,.range-wp-danger .range-knob,.range-wp-danger .range-pin,.range-wp-danger .range-tick-active{background:#f53d3d}.range-wp-light .range-bar-active,.range-wp-light .range-knob,.range-wp-light .range-pin,.range-wp-light .range-tick-active{background:#f4f4f4}.range-wp-dark .range-bar-active,.range-wp-dark .range-knob,.range-wp-dark .range-pin,.range-wp-dark .range-tick-active{background:#222}.range-wp-energized .range-bar-active,.range-wp-energized .range-knob,.range-wp-energized .range-pin,.range-wp-energized .range-tick-active{background:#ffc527}.range-wp-royal .range-bar-active,.range-wp-royal .range-knob,.range-wp-royal .range-pin,.range-wp-royal .range-tick-active{background:#7e60ff}.range-wp-subtle .range-bar-active,.range-wp-subtle .range-knob,.range-wp-subtle .range-pin,.range-wp-subtle .range-tick-active{background:#444}.range-wp-vibrant .range-bar-active,.range-wp-vibrant .range-knob,.range-wp-vibrant .range-pin,.range-wp-vibrant .range-tick-active{background:#663399}.range-wp-bright .range-bar-active,.range-wp-bright .range-knob,.range-wp-bright .range-pin,.range-wp-bright .range-tick-active{background:#ffc125}ion-refresher{left:0;top:0;position:absolute;z-index:0;display:none;width:100%;height:60px}ion-refresher.refresher-active{display:block}.has-refresher>.scroll-content{margin-top:-1px;border-top:1px solid #ddd;-webkit-transition:-webkit-transform 320ms cubic-bezier(.36,.66,.04,1);transition:-webkit-transform 320ms cubic-bezier(.36,.66,.04,1);transition:transform 320ms cubic-bezier(.36,.66,.04,1);transition:transform 320ms cubic-bezier(.36,.66,.04,1),-webkit-transform 320ms cubic-bezier(.36,.66,.04,1)}ion-refresher-content{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;height:100%}.refresher-pulling,.refresher-refreshing{display:none;width:100%}.refresher-pulling-icon,.refresher-refreshing-icon{text-align:center;-webkit-transform-origin:center;transform-origin:center;font-size:30px;color:#000;-webkit-transition:.2s;transition:.2s}.refresher-pulling-text,.refresher-refreshing-text{text-align:center;font-size:16px;color:#000}.refresher-refreshing .spinner-crescent circle,.refresher-refreshing .spinner-ios line,.refresher-refreshing .spinner-ios-small line{stroke:#000}.refresher-refreshing .spinner-bubbles circle,.refresher-refreshing .spinner-circles circle,.refresher-refreshing .spinner-dots circle{fill:#000}ion-refresher-content[state=pulling] .refresher-pulling{display:block}ion-refresher-content[state=ready] .refresher-pulling{display:block}ion-refresher-content[state=ready] .refresher-pulling-icon{-webkit-transform:rotate(180deg);transform:rotate(180deg)}ion-refresher-content[state=refreshing] .refresher-refreshing{display:block}ion-refresher-content[state=cancelling] .refresher-pulling{display:block}ion-refresher-content[state=cancelling] .refresher-pulling-icon{-webkit-transform:scale(0);transform:scale(0)}ion-refresher-content[state=completing] .refresher-refreshing{display:block}ion-refresher-content[state=completing] .refresher-refreshing-icon{-webkit-transform:scale(0);transform:scale(0)}ion-scroll{position:relative;display:block}ion-scroll.scroll-x .scroll-content{overflow-x:auto}ion-scroll.scroll-y .scroll-content{overflow-y:auto}ion-scroll[center] .scroll-content{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center}ion-scroll .scroll-content{left:0;right:0;top:0;bottom:0;position:absolute;overflow-y:hidden;overflow-x:hidden;-webkit-overflow-scrolling:touch;will-change:scroll-position}ion-searchbar{position:relative;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;width:100%}.searchbar-icon{pointer-events:none}.searchbar-input-container{position:relative;display:block;-webkit-flex-shrink:1;-ms-flex-negative:1;flex-shrink:1;width:100%}.searchbar-input{-moz-appearance:none;-ms-appearance:none;-webkit-appearance:none;appearance:none;display:block;width:100%;border:0;font-family:inherit}.searchbar-clear-icon{margin:0;padding:0;display:none;min-height:0}.searchbar-has-value.searchbar-has-focus .searchbar-clear-icon{display:block}.searchbar-ios{padding:0 8px;min-height:44px;border-top:.55px solid transparent;border-bottom:.55px solid rgba(0,0,0,.05);background:rgba(0,0,0,.2)}.searchbar-ios .searchbar-search-icon{left:9px;top:9px;background-image:url(\"data:image/svg+xml;charset=utf-8,<svg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%2013%2013'><path%20fill='rgba(0,%200,%200,%200.5)'%20d='M5,1c2.2,0,4,1.8,4,4S7.2,9,5,9S1,7.2,1,5S2.8,1,5,1%20M5,0C2.2,0,0,2.2,0,5s2.2,5,5,5s5-2.2,5-5S7.8,0,5,0%20L5,0z'/><line%20stroke='rgba(0,%200,%200,%200.5)'%20stroke-miterlimit='10'%20x1='12.6'%20y1='12.6'%20x2='8.2'%20y2='8.2'/></svg>\");margin-left:calc(50% - 60px);position:absolute;width:14px;height:14px;background-repeat:no-repeat;background-size:13px}.searchbar-ios .searchbar-input{padding:0 28px;border-radius:5px;height:3rem;font-size:1.4rem;font-weight:400;color:#000;background-color:#fff}.searchbar-ios .searchbar-input::-moz-placeholder{color:rgba(0,0,0,.5)}.searchbar-ios .searchbar-input:-ms-input-placeholder{color:rgba(0,0,0,.5)}.searchbar-ios .searchbar-input::-webkit-input-placeholder{text-indent:0;color:rgba(0,0,0,.5)}.searchbar-ios .searchbar-clear-icon{right:0;top:0;background-image:url(\"data:image/svg+xml;charset=utf-8,<svg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%20512%20512'><path%20fill='rgba(0,%200,%200,%200.5)'%20d='M403.1,108.9c-81.2-81.2-212.9-81.2-294.2,0s-81.2,212.9,0,294.2c81.2,81.2,212.9,81.2,294.2,0S484.3,190.1,403.1,108.9z%20M352,340.2L340.2,352l-84.4-84.2l-84,83.8L160,339.8l84-83.8l-84-83.8l11.8-11.8l84,83.8l84.4-84.2l11.8,11.8L267.6,256L352,340.2z'/></svg>\");background-position:center;position:absolute;width:30px;height:100%;background-repeat:no-repeat;background-size:18px}.searchbar-ios .searchbar-ios-cancel{padding:0 0 0 8px;margin-left:0;display:none;-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0;height:30px;cursor:pointer}.searchbar-ios.searchbar-left-aligned .searchbar-search-icon{margin-left:0}.searchbar-ios.searchbar-left-aligned .searchbar-input{padding-left:30px}.searchbar-ios.searchbar-show-cancel.searchbar-has-focus .searchbar-ios-cancel{display:block}.toolbar .searchbar-ios{border-bottom-width:0;background:0 0}.toolbar .searchbar-ios .searchbar-input{background:rgba(0,0,0,.08)}.toolbar .searchbar-ios .searchbar-ios-cancel{padding:0}.toolbar .searchbar-ios.searchbar-has-focus .searchbar-ios-cancel{padding-left:8px}.searchbar-ios .searchbar-md-cancel{display:none}.searchbar-ios-primary .searchbar-ios-cancel{color:#488aff}.searchbar-ios-primary .searchbar-ios-cancel:hover:not(.disable-hover){color:#427feb}.toolbar-ios-primary .searchbar-ios .searchbar-search-icon{background-image:url(\"data:image/svg+xml;charset=utf-8,<svg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%2013%2013'><path%20fill='rgba(255,%20255,%20255,%200.5)'%20d='M5,1c2.2,0,4,1.8,4,4S7.2,9,5,9S1,7.2,1,5S2.8,1,5,1%20M5,0C2.2,0,0,2.2,0,5s2.2,5,5,5s5-2.2,5-5S7.8,0,5,0%20L5,0z'/><line%20stroke='rgba(255,%20255,%20255,%200.5)'%20stroke-miterlimit='10'%20x1='12.6'%20y1='12.6'%20x2='8.2'%20y2='8.2'/></svg>\")}.toolbar-ios-primary .searchbar-ios .searchbar-input{color:#fff;background:rgba(255,255,255,.08)}.toolbar-ios-primary .searchbar-ios .searchbar-input::-moz-placeholder{color:rgba(255,255,255,.5)}.toolbar-ios-primary .searchbar-ios .searchbar-input:-ms-input-placeholder{color:rgba(255,255,255,.5)}.toolbar-ios-primary .searchbar-ios .searchbar-input::-webkit-input-placeholder{text-indent:0;color:rgba(255,255,255,.5)}.toolbar-ios-primary .searchbar-ios .searchbar-clear-icon{background-image:url(\"data:image/svg+xml;charset=utf-8,<svg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%20512%20512'><path%20fill='rgba(255,%20255,%20255,%200.5)'%20d='M403.1,108.9c-81.2-81.2-212.9-81.2-294.2,0s-81.2,212.9,0,294.2c81.2,81.2,212.9,81.2,294.2,0S484.3,190.1,403.1,108.9z%20M352,340.2L340.2,352l-84.4-84.2l-84,83.8L160,339.8l84-83.8l-84-83.8l11.8-11.8l84,83.8l84.4-84.2l11.8,11.8L267.6,256L352,340.2z'/></svg>\")}.toolbar-ios-primary .searchbar-ios .searchbar-ios-cancel{color:#fff}.searchbar-ios-secondary .searchbar-ios-cancel{color:#32db64}.searchbar-ios-secondary .searchbar-ios-cancel:hover:not(.disable-hover){color:#2ec95c}.toolbar-ios-secondary .searchbar-ios .searchbar-search-icon{background-image:url(\"data:image/svg+xml;charset=utf-8,<svg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%2013%2013'><path%20fill='rgba(255,%20255,%20255,%200.5)'%20d='M5,1c2.2,0,4,1.8,4,4S7.2,9,5,9S1,7.2,1,5S2.8,1,5,1%20M5,0C2.2,0,0,2.2,0,5s2.2,5,5,5s5-2.2,5-5S7.8,0,5,0%20L5,0z'/><line%20stroke='rgba(255,%20255,%20255,%200.5)'%20stroke-miterlimit='10'%20x1='12.6'%20y1='12.6'%20x2='8.2'%20y2='8.2'/></svg>\")}.toolbar-ios-secondary .searchbar-ios .searchbar-input{color:#fff;background:rgba(255,255,255,.08)}.toolbar-ios-secondary .searchbar-ios .searchbar-input::-moz-placeholder{color:rgba(255,255,255,.5)}.toolbar-ios-secondary .searchbar-ios .searchbar-input:-ms-input-placeholder{color:rgba(255,255,255,.5)}.toolbar-ios-secondary .searchbar-ios .searchbar-input::-webkit-input-placeholder{text-indent:0;color:rgba(255,255,255,.5)}.toolbar-ios-secondary .searchbar-ios .searchbar-clear-icon{background-image:url(\"data:image/svg+xml;charset=utf-8,<svg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%20512%20512'><path%20fill='rgba(255,%20255,%20255,%200.5)'%20d='M403.1,108.9c-81.2-81.2-212.9-81.2-294.2,0s-81.2,212.9,0,294.2c81.2,81.2,212.9,81.2,294.2,0S484.3,190.1,403.1,108.9z%20M352,340.2L340.2,352l-84.4-84.2l-84,83.8L160,339.8l84-83.8l-84-83.8l11.8-11.8l84,83.8l84.4-84.2l11.8,11.8L267.6,256L352,340.2z'/></svg>\")}.toolbar-ios-secondary .searchbar-ios .searchbar-ios-cancel{color:#fff}.searchbar-ios-danger .searchbar-ios-cancel{color:#f53d3d}.searchbar-ios-danger .searchbar-ios-cancel:hover:not(.disable-hover){color:#e13838}.toolbar-ios-danger .searchbar-ios .searchbar-search-icon{background-image:url(\"data:image/svg+xml;charset=utf-8,<svg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%2013%2013'><path%20fill='rgba(255,%20255,%20255,%200.5)'%20d='M5,1c2.2,0,4,1.8,4,4S7.2,9,5,9S1,7.2,1,5S2.8,1,5,1%20M5,0C2.2,0,0,2.2,0,5s2.2,5,5,5s5-2.2,5-5S7.8,0,5,0%20L5,0z'/><line%20stroke='rgba(255,%20255,%20255,%200.5)'%20stroke-miterlimit='10'%20x1='12.6'%20y1='12.6'%20x2='8.2'%20y2='8.2'/></svg>\")}.toolbar-ios-danger .searchbar-ios .searchbar-input{color:#fff;background:rgba(255,255,255,.08)}.toolbar-ios-danger .searchbar-ios .searchbar-input::-moz-placeholder{color:rgba(255,255,255,.5)}.toolbar-ios-danger .searchbar-ios .searchbar-input:-ms-input-placeholder{color:rgba(255,255,255,.5)}.toolbar-ios-danger .searchbar-ios .searchbar-input::-webkit-input-placeholder{text-indent:0;color:rgba(255,255,255,.5)}.toolbar-ios-danger .searchbar-ios .searchbar-clear-icon{background-image:url(\"data:image/svg+xml;charset=utf-8,<svg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%20512%20512'><path%20fill='rgba(255,%20255,%20255,%200.5)'%20d='M403.1,108.9c-81.2-81.2-212.9-81.2-294.2,0s-81.2,212.9,0,294.2c81.2,81.2,212.9,81.2,294.2,0S484.3,190.1,403.1,108.9z%20M352,340.2L340.2,352l-84.4-84.2l-84,83.8L160,339.8l84-83.8l-84-83.8l11.8-11.8l84,83.8l84.4-84.2l11.8,11.8L267.6,256L352,340.2z'/></svg>\")}.toolbar-ios-danger .searchbar-ios .searchbar-ios-cancel{color:#fff}.searchbar-ios-light .searchbar-ios-cancel{color:#f4f4f4}.searchbar-ios-light .searchbar-ios-cancel:hover:not(.disable-hover){color:#e0e0e0}.toolbar-ios-light .searchbar-ios .searchbar-search-icon{background-image:url(\"data:image/svg+xml;charset=utf-8,<svg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%2013%2013'><path%20fill='rgba(0,%200,%200,%200.5)'%20d='M5,1c2.2,0,4,1.8,4,4S7.2,9,5,9S1,7.2,1,5S2.8,1,5,1%20M5,0C2.2,0,0,2.2,0,5s2.2,5,5,5s5-2.2,5-5S7.8,0,5,0%20L5,0z'/><line%20stroke='rgba(0,%200,%200,%200.5)'%20stroke-miterlimit='10'%20x1='12.6'%20y1='12.6'%20x2='8.2'%20y2='8.2'/></svg>\")}.toolbar-ios-light .searchbar-ios .searchbar-input{color:#000;background:rgba(0,0,0,.08)}.toolbar-ios-light .searchbar-ios .searchbar-input::-moz-placeholder{color:rgba(0,0,0,.5)}.toolbar-ios-light .searchbar-ios .searchbar-input:-ms-input-placeholder{color:rgba(0,0,0,.5)}.toolbar-ios-light .searchbar-ios .searchbar-input::-webkit-input-placeholder{text-indent:0;color:rgba(0,0,0,.5)}.toolbar-ios-light .searchbar-ios .searchbar-clear-icon{background-image:url(\"data:image/svg+xml;charset=utf-8,<svg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%20512%20512'><path%20fill='rgba(0,%200,%200,%200.5)'%20d='M403.1,108.9c-81.2-81.2-212.9-81.2-294.2,0s-81.2,212.9,0,294.2c81.2,81.2,212.9,81.2,294.2,0S484.3,190.1,403.1,108.9z%20M352,340.2L340.2,352l-84.4-84.2l-84,83.8L160,339.8l84-83.8l-84-83.8l11.8-11.8l84,83.8l84.4-84.2l11.8,11.8L267.6,256L352,340.2z'/></svg>\")}.toolbar-ios-light .searchbar-ios .searchbar-ios-cancel{color:#488aff}.searchbar-ios-dark .searchbar-ios-cancel{color:#222}.searchbar-ios-dark .searchbar-ios-cancel:hover:not(.disable-hover){color:#343434}.toolbar-ios-dark .searchbar-ios .searchbar-search-icon{background-image:url(\"data:image/svg+xml;charset=utf-8,<svg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%2013%2013'><path%20fill='rgba(255,%20255,%20255,%200.5)'%20d='M5,1c2.2,0,4,1.8,4,4S7.2,9,5,9S1,7.2,1,5S2.8,1,5,1%20M5,0C2.2,0,0,2.2,0,5s2.2,5,5,5s5-2.2,5-5S7.8,0,5,0%20L5,0z'/><line%20stroke='rgba(255,%20255,%20255,%200.5)'%20stroke-miterlimit='10'%20x1='12.6'%20y1='12.6'%20x2='8.2'%20y2='8.2'/></svg>\")}.toolbar-ios-dark .searchbar-ios .searchbar-input{color:#fff;background:rgba(255,255,255,.08)}.toolbar-ios-dark .searchbar-ios .searchbar-input::-moz-placeholder{color:rgba(255,255,255,.5)}.toolbar-ios-dark .searchbar-ios .searchbar-input:-ms-input-placeholder{color:rgba(255,255,255,.5)}.toolbar-ios-dark .searchbar-ios .searchbar-input::-webkit-input-placeholder{text-indent:0;color:rgba(255,255,255,.5)}.toolbar-ios-dark .searchbar-ios .searchbar-clear-icon{background-image:url(\"data:image/svg+xml;charset=utf-8,<svg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%20512%20512'><path%20fill='rgba(255,%20255,%20255,%200.5)'%20d='M403.1,108.9c-81.2-81.2-212.9-81.2-294.2,0s-81.2,212.9,0,294.2c81.2,81.2,212.9,81.2,294.2,0S484.3,190.1,403.1,108.9z%20M352,340.2L340.2,352l-84.4-84.2l-84,83.8L160,339.8l84-83.8l-84-83.8l11.8-11.8l84,83.8l84.4-84.2l11.8,11.8L267.6,256L352,340.2z'/></svg>\")}.toolbar-ios-dark .searchbar-ios .searchbar-ios-cancel{color:#fff}.searchbar-ios-energized .searchbar-ios-cancel{color:#ffc527}.searchbar-ios-energized .searchbar-ios-cancel:hover:not(.disable-hover){color:#ebb524}.toolbar-ios-energized .searchbar-ios .searchbar-search-icon{background-image:url(\"data:image/svg+xml;charset=utf-8,<svg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%2013%2013'><path%20fill='rgba(0,%200,%200,%200.5)'%20d='M5,1c2.2,0,4,1.8,4,4S7.2,9,5,9S1,7.2,1,5S2.8,1,5,1%20M5,0C2.2,0,0,2.2,0,5s2.2,5,5,5s5-2.2,5-5S7.8,0,5,0%20L5,0z'/><line%20stroke='rgba(0,%200,%200,%200.5)'%20stroke-miterlimit='10'%20x1='12.6'%20y1='12.6'%20x2='8.2'%20y2='8.2'/></svg>\")}.toolbar-ios-energized .searchbar-ios .searchbar-input{color:#000;background:rgba(0,0,0,.08)}.toolbar-ios-energized .searchbar-ios .searchbar-input::-moz-placeholder{color:rgba(0,0,0,.5)}.toolbar-ios-energized .searchbar-ios .searchbar-input:-ms-input-placeholder{color:rgba(0,0,0,.5)}.toolbar-ios-energized .searchbar-ios .searchbar-input::-webkit-input-placeholder{text-indent:0;color:rgba(0,0,0,.5)}.toolbar-ios-energized .searchbar-ios .searchbar-clear-icon{background-image:url(\"data:image/svg+xml;charset=utf-8,<svg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%20512%20512'><path%20fill='rgba(0,%200,%200,%200.5)'%20d='M403.1,108.9c-81.2-81.2-212.9-81.2-294.2,0s-81.2,212.9,0,294.2c81.2,81.2,212.9,81.2,294.2,0S484.3,190.1,403.1,108.9z%20M352,340.2L340.2,352l-84.4-84.2l-84,83.8L160,339.8l84-83.8l-84-83.8l11.8-11.8l84,83.8l84.4-84.2l11.8,11.8L267.6,256L352,340.2z'/></svg>\")}.toolbar-ios-energized .searchbar-ios .searchbar-ios-cancel{color:#488aff}.searchbar-ios-royal .searchbar-ios-cancel{color:#7e60ff}.searchbar-ios-royal .searchbar-ios-cancel:hover:not(.disable-hover){color:#7458eb}.toolbar-ios-royal .searchbar-ios .searchbar-search-icon{background-image:url(\"data:image/svg+xml;charset=utf-8,<svg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%2013%2013'><path%20fill='rgba(255,%20255,%20255,%200.5)'%20d='M5,1c2.2,0,4,1.8,4,4S7.2,9,5,9S1,7.2,1,5S2.8,1,5,1%20M5,0C2.2,0,0,2.2,0,5s2.2,5,5,5s5-2.2,5-5S7.8,0,5,0%20L5,0z'/><line%20stroke='rgba(255,%20255,%20255,%200.5)'%20stroke-miterlimit='10'%20x1='12.6'%20y1='12.6'%20x2='8.2'%20y2='8.2'/></svg>\")}.toolbar-ios-royal .searchbar-ios .searchbar-input{color:#fff;background:rgba(255,255,255,.08)}.toolbar-ios-royal .searchbar-ios .searchbar-input::-moz-placeholder{color:rgba(255,255,255,.5)}.toolbar-ios-royal .searchbar-ios .searchbar-input:-ms-input-placeholder{color:rgba(255,255,255,.5)}.toolbar-ios-royal .searchbar-ios .searchbar-input::-webkit-input-placeholder{text-indent:0;color:rgba(255,255,255,.5)}.toolbar-ios-royal .searchbar-ios .searchbar-clear-icon{background-image:url(\"data:image/svg+xml;charset=utf-8,<svg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%20512%20512'><path%20fill='rgba(255,%20255,%20255,%200.5)'%20d='M403.1,108.9c-81.2-81.2-212.9-81.2-294.2,0s-81.2,212.9,0,294.2c81.2,81.2,212.9,81.2,294.2,0S484.3,190.1,403.1,108.9z%20M352,340.2L340.2,352l-84.4-84.2l-84,83.8L160,339.8l84-83.8l-84-83.8l11.8-11.8l84,83.8l84.4-84.2l11.8,11.8L267.6,256L352,340.2z'/></svg>\")}.toolbar-ios-royal .searchbar-ios .searchbar-ios-cancel{color:#fff}.searchbar-ios-subtle .searchbar-ios-cancel{color:#444}.searchbar-ios-subtle .searchbar-ios-cancel:hover:not(.disable-hover){color:#535353}.toolbar-ios-subtle .searchbar-ios .searchbar-search-icon{background-image:url(\"data:image/svg+xml;charset=utf-8,<svg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%2013%2013'><path%20fill='rgba(255,%20255,%20255,%200.5)'%20d='M5,1c2.2,0,4,1.8,4,4S7.2,9,5,9S1,7.2,1,5S2.8,1,5,1%20M5,0C2.2,0,0,2.2,0,5s2.2,5,5,5s5-2.2,5-5S7.8,0,5,0%20L5,0z'/><line%20stroke='rgba(255,%20255,%20255,%200.5)'%20stroke-miterlimit='10'%20x1='12.6'%20y1='12.6'%20x2='8.2'%20y2='8.2'/></svg>\")}.toolbar-ios-subtle .searchbar-ios .searchbar-input{color:#fff;background:rgba(255,255,255,.08)}.toolbar-ios-subtle .searchbar-ios .searchbar-input::-moz-placeholder{color:rgba(255,255,255,.5)}.toolbar-ios-subtle .searchbar-ios .searchbar-input:-ms-input-placeholder{color:rgba(255,255,255,.5)}.toolbar-ios-subtle .searchbar-ios .searchbar-input::-webkit-input-placeholder{text-indent:0;color:rgba(255,255,255,.5)}.toolbar-ios-subtle .searchbar-ios .searchbar-clear-icon{background-image:url(\"data:image/svg+xml;charset=utf-8,<svg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%20512%20512'><path%20fill='rgba(255,%20255,%20255,%200.5)'%20d='M403.1,108.9c-81.2-81.2-212.9-81.2-294.2,0s-81.2,212.9,0,294.2c81.2,81.2,212.9,81.2,294.2,0S484.3,190.1,403.1,108.9z%20M352,340.2L340.2,352l-84.4-84.2l-84,83.8L160,339.8l84-83.8l-84-83.8l11.8-11.8l84,83.8l84.4-84.2l11.8,11.8L267.6,256L352,340.2z'/></svg>\")}.toolbar-ios-subtle .searchbar-ios .searchbar-ios-cancel{color:#fff}.searchbar-ios-vibrant .searchbar-ios-cancel{color:#663399}.searchbar-ios-vibrant .searchbar-ios-cancel:hover:not(.disable-hover){color:#7243a1}.toolbar-ios-vibrant .searchbar-ios .searchbar-search-icon{background-image:url(\"data:image/svg+xml;charset=utf-8,<svg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%2013%2013'><path%20fill='rgba(255,%20255,%20255,%200.5)'%20d='M5,1c2.2,0,4,1.8,4,4S7.2,9,5,9S1,7.2,1,5S2.8,1,5,1%20M5,0C2.2,0,0,2.2,0,5s2.2,5,5,5s5-2.2,5-5S7.8,0,5,0%20L5,0z'/><line%20stroke='rgba(255,%20255,%20255,%200.5)'%20stroke-miterlimit='10'%20x1='12.6'%20y1='12.6'%20x2='8.2'%20y2='8.2'/></svg>\")}.toolbar-ios-vibrant .searchbar-ios .searchbar-input{color:#fff;background:rgba(255,255,255,.08)}.toolbar-ios-vibrant .searchbar-ios .searchbar-input::-moz-placeholder{color:rgba(255,255,255,.5)}.toolbar-ios-vibrant .searchbar-ios .searchbar-input:-ms-input-placeholder{color:rgba(255,255,255,.5)}.toolbar-ios-vibrant .searchbar-ios .searchbar-input::-webkit-input-placeholder{text-indent:0;color:rgba(255,255,255,.5)}.toolbar-ios-vibrant .searchbar-ios .searchbar-clear-icon{background-image:url(\"data:image/svg+xml;charset=utf-8,<svg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%20512%20512'><path%20fill='rgba(255,%20255,%20255,%200.5)'%20d='M403.1,108.9c-81.2-81.2-212.9-81.2-294.2,0s-81.2,212.9,0,294.2c81.2,81.2,212.9,81.2,294.2,0S484.3,190.1,403.1,108.9z%20M352,340.2L340.2,352l-84.4-84.2l-84,83.8L160,339.8l84-83.8l-84-83.8l11.8-11.8l84,83.8l84.4-84.2l11.8,11.8L267.6,256L352,340.2z'/></svg>\")}.toolbar-ios-vibrant .searchbar-ios .searchbar-ios-cancel{color:#fff}.searchbar-ios-bright .searchbar-ios-cancel{color:#ffc125}.searchbar-ios-bright .searchbar-ios-cancel:hover:not(.disable-hover){color:#ebb222}.toolbar-ios-bright .searchbar-ios .searchbar-search-icon{background-image:url(\"data:image/svg+xml;charset=utf-8,<svg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%2013%2013'><path%20fill='rgba(0,%200,%200,%200.5)'%20d='M5,1c2.2,0,4,1.8,4,4S7.2,9,5,9S1,7.2,1,5S2.8,1,5,1%20M5,0C2.2,0,0,2.2,0,5s2.2,5,5,5s5-2.2,5-5S7.8,0,5,0%20L5,0z'/><line%20stroke='rgba(0,%200,%200,%200.5)'%20stroke-miterlimit='10'%20x1='12.6'%20y1='12.6'%20x2='8.2'%20y2='8.2'/></svg>\")}.toolbar-ios-bright .searchbar-ios .searchbar-input{color:#000;background:rgba(0,0,0,.08)}.toolbar-ios-bright .searchbar-ios .searchbar-input::-moz-placeholder{color:rgba(0,0,0,.5)}.toolbar-ios-bright .searchbar-ios .searchbar-input:-ms-input-placeholder{color:rgba(0,0,0,.5)}.toolbar-ios-bright .searchbar-ios .searchbar-input::-webkit-input-placeholder{text-indent:0;color:rgba(0,0,0,.5)}.toolbar-ios-bright .searchbar-ios .searchbar-clear-icon{background-image:url(\"data:image/svg+xml;charset=utf-8,<svg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%20512%20512'><path%20fill='rgba(0,%200,%200,%200.5)'%20d='M403.1,108.9c-81.2-81.2-212.9-81.2-294.2,0s-81.2,212.9,0,294.2c81.2,81.2,212.9,81.2,294.2,0S484.3,190.1,403.1,108.9z%20M352,340.2L340.2,352l-84.4-84.2l-84,83.8L160,339.8l84-83.8l-84-83.8l11.8-11.8l84,83.8l84.4-84.2l11.8,11.8L267.6,256L352,340.2z'/></svg>\")}.toolbar-ios-bright .searchbar-ios .searchbar-ios-cancel{color:#488aff}.searchbar-ios.searchbar-animated.searchbar-show-cancel .searchbar-ios-cancel{display:block}.searchbar-ios.searchbar-animated .searchbar-input,.searchbar-ios.searchbar-animated .searchbar-search-icon{-webkit-transition:all .3s ease;transition:all .3s ease}.searchbar-animated.searchbar-has-focus .searchbar-ios-cancel{opacity:1;pointer-events:auto}.searchbar-animated .searchbar-ios-cancel{margin-right:-100%;-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0);opacity:0;-webkit-transition:all .3s ease;transition:all .3s ease;pointer-events:none}.searchbar-md{background:inherit;padding:8px}.searchbar-md .searchbar-search-icon{left:16px;top:11px;background-image:url(\"data:image/svg+xml;charset=utf-8,<svg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%20512%20512'><path%20fill='%235b5b5b'%20d='M337.509,305.372h-17.501l-6.571-5.486c20.791-25.232,33.922-57.054,33.922-93.257C347.358,127.632,283.896,64,205.135,64C127.452,64,64,127.632,64,206.629s63.452,142.628,142.225,142.628c35.011,0,67.831-13.167,92.991-34.008l6.561,5.487v17.551L415.18,448L448,415.086L337.509,305.372z%20M206.225,305.372c-54.702,0-98.463-43.887-98.463-98.743c0-54.858,43.761-98.742,98.463-98.742c54.7,0,98.462,43.884,98.462,98.742C304.687,261.485,260.925,305.372,206.225,305.372z'/></svg>\");width:21px;height:21px}.searchbar-md .searchbar-md-cancel{left:10px;top:0;margin:0;display:none;width:21px;height:100%}.searchbar-md .searchbar-md-cancel,.searchbar-md .searchbar-search-icon{position:absolute;background-repeat:no-repeat;background-size:20px}.searchbar-md .searchbar-md-cancel.activated,.searchbar-md .searchbar-search-icon.activated{background-color:transparent}.searchbar-md .searchbar-input{padding:6px 55px;border-radius:2px;background-position:left 8px center;height:auto;font-size:1.6rem;font-weight:400;line-height:3rem;color:#141414;background-color:#fff;-webkit-box-shadow:0 2px 2px 0 rgba(0,0,0,.14),0 3px 1px -2px rgba(0,0,0,.2),0 1px 5px 0 rgba(0,0,0,.12);box-shadow:0 2px 2px 0 rgba(0,0,0,.14),0 3px 1px -2px rgba(0,0,0,.2),0 1px 5px 0 rgba(0,0,0,.12)}.searchbar-md .searchbar-input::-moz-placeholder{color:#aeaeae}.searchbar-md .searchbar-input:-ms-input-placeholder{color:#aeaeae}.searchbar-md .searchbar-input::-webkit-input-placeholder{text-indent:0;color:#aeaeae}.searchbar-md .searchbar-clear-icon{right:13px;top:0;background-image:url(\"data:image/svg+xml;charset=utf-8,<svg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%20512%20512'><polygon%20fill='%235b5b5b'%20points='405,136.798%20375.202,107%20256,226.202%20136.798,107%20107,136.798%20226.202,256%20107,375.202%20136.798,405%20256,285.798%20375.202,405%20405,375.202%20285.798,256'/></svg>\");padding:0;background-position:center;position:absolute;width:22px;height:100%;background-repeat:no-repeat;background-size:22px}.searchbar-md .searchbar-clear-icon.activated{background-color:transparent}.searchbar-md.searchbar-has-focus.searchbar-show-cancel .searchbar-search-icon{display:none}.searchbar-md.searchbar-has-focus.searchbar-show-cancel .searchbar-md-cancel{display:-webkit-inline-box;display:-webkit-inline-flex;display:-ms-inline-flexbox;display:inline-flex}.toolbar .searchbar-md{padding:3px}.toolbar .searchbar-md .searchbar-md-cancel{left:14px}.searchbar-md .searchbar-ios-cancel{display:none}.searchbar-wp{background:0 0;padding:8px}.searchbar-wp .searchbar-input-container{border:2px solid rgba(0,0,0,.5)}.searchbar-wp .searchbar-search-icon{right:8px;top:5px;background-image:url(\"data:image/svg+xml;charset=utf-8,<svg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%20512%20512'><path%20fill='%23858585'%20d='M337.509,305.372h-17.501l-6.571-5.486c20.791-25.232,33.922-57.054,33.922-93.257C347.358,127.632,283.896,64,205.135,64C127.452,64,64,127.632,64,206.629s63.452,142.628,142.225,142.628c35.011,0,67.831-13.167,92.991-34.008l6.561,5.487v17.551L415.18,448L448,415.086L337.509,305.372z%20M206.225,305.372c-54.702,0-98.463-43.887-98.463-98.743c0-54.858,43.761-98.742,98.463-98.742c54.7,0,98.462,43.884,98.462,98.742C304.687,261.485,260.925,305.372,206.225,305.372z'/></svg>\");position:absolute;width:21px;height:21px;background-repeat:no-repeat;background-size:20px}.searchbar-wp .searchbar-search-icon.activated{background-color:transparent}.searchbar-wp .searchbar-input{padding:0 8px;border-radius:0;background-position:left 8px center;height:auto;font-size:1.4rem;font-weight:400;line-height:3rem;color:#141414;background-color:#fff}.searchbar-wp .searchbar-input::-moz-placeholder{color:#858585}.searchbar-wp .searchbar-input:-ms-input-placeholder{color:#858585}.searchbar-wp .searchbar-input::-webkit-input-placeholder{text-indent:0;color:#858585}.searchbar-wp .searchbar-clear-icon{right:8px;top:0;background-image:url(\"data:image/svg+xml;charset=utf-8,<svg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%20512%20512'><polygon%20fill='%23858585'%20points='405,136.798%20375.202,107%20256,226.202%20136.798,107%20107,136.798%20226.202,256%20107,375.202%20136.798,405%20256,285.798%20375.202,405%20405,375.202%20285.798,256'/></svg>\");padding:0;background-position:center;position:absolute;width:22px;height:100%;background-repeat:no-repeat;background-size:22px}.searchbar-wp .searchbar-clear-icon.activated{background-color:transparent}.searchbar-wp.searchbar-has-focus .searchbar-input-container{border-color:#488aff}.searchbar-wp.searchbar-has-value .searchbar-search-icon{display:none}.searchbar-wp .searchbar-ios-cancel{display:none}.searchbar-wp .searchbar-md-cancel{display:none}.toolbar .searchbar-wp{padding:2px}.searchbar-wp-primary.searchbar-has-focus .searchbar-input-container{border-color:#488aff}.searchbar-wp-secondary.searchbar-has-focus .searchbar-input-container{border-color:#32db64}.searchbar-wp-danger.searchbar-has-focus .searchbar-input-container{border-color:#f53d3d}.searchbar-wp-light.searchbar-has-focus .searchbar-input-container{border-color:#f4f4f4}.searchbar-wp-dark.searchbar-has-focus .searchbar-input-container{border-color:#222}.searchbar-wp-energized.searchbar-has-focus .searchbar-input-container{border-color:#ffc527}.searchbar-wp-royal.searchbar-has-focus .searchbar-input-container{border-color:#7e60ff}.searchbar-wp-subtle.searchbar-has-focus .searchbar-input-container{border-color:#444}.searchbar-wp-vibrant.searchbar-has-focus .searchbar-input-container{border-color:#663399}.searchbar-wp-bright.searchbar-has-focus .searchbar-input-container{border-color:#ffc125}ion-segment{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;width:100%}.segment-button{margin-left:0;margin-right:0;text-align:center;position:relative;display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;cursor:pointer}.segment-ios .segment-button{-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1;width:0;height:3.2rem;border-width:1px;border-style:solid;border-color:#488aff;font-size:1.3rem;line-height:3rem;color:#488aff;background-color:transparent}.segment-ios .segment-button ion-icon{font-size:2.6rem;line-height:2.8rem}.segment-ios .segment-button.segment-activated{color:#fff;background-color:#488aff;opacity:1;-webkit-transition:.1s all linear;transition:.1s all linear}.segment-ios .segment-button:hover:not(.segment-activated){background-color:rgba(72,138,255,.1);-webkit-transition:.1s all linear;transition:.1s all linear}.segment-ios .segment-button:active:not(.segment-activated){background-color:rgba(72,138,255,.16);-webkit-transition:.1s all linear;transition:.1s all linear}.segment-ios .segment-button:first-of-type{border-top-left-radius:4px;border-top-right-radius:0;border-bottom-right-radius:0;border-bottom-left-radius:4px;margin-right:0}.segment-ios .segment-button:not(:first-of-type){border-left-width:0}.segment-ios .segment-button:last-of-type{border-top-left-radius:0;border-top-right-radius:4px;border-bottom-right-radius:4px;border-bottom-left-radius:0;margin-left:0;border-left-width:0}[dir=rtl] .segment-ios .segment-button:first-of-type{border-left-width:0}[dir=rtl] .segment-ios .segment-button:last-of-type{border-left-width:1px}.segment-ios.segment-disabled{opacity:.4;pointer-events:none}.segment-ios .segment-button-disabled{color:rgba(72,138,255,.3);pointer-events:none}.toolbar-ios .segment-ios{left:0;right:0;top:0;bottom:0;position:absolute}.toolbar-ios .segment-button{max-width:100px;height:2.6rem;font-size:1.2rem;line-height:2.5rem}.toolbar-ios .segment-button ion-icon{font-size:2.2rem;line-height:2.4rem}.segment-ios-primary .segment-button{border-color:#488aff;color:#488aff}.segment-ios-primary .segment-button:hover:not(.segment-activated){background-color:rgba(72,138,255,.1)}.segment-ios-primary .segment-button:active:not(.segment-activated){background-color:rgba(72,138,255,.16)}.segment-ios-primary .segment-button.segment-activated{color:#fff;background-color:#488aff}.segment-ios-primary .segment-button-disabled{color:rgba(72,138,255,.3)}.toolbar-ios-primary .segment-ios .segment-button.segment-activated{color:#488aff}.segment-ios-secondary .segment-button{border-color:#32db64;color:#32db64}.segment-ios-secondary .segment-button:hover:not(.segment-activated){background-color:rgba(50,219,100,.1)}.segment-ios-secondary .segment-button:active:not(.segment-activated){background-color:rgba(50,219,100,.16)}.segment-ios-secondary .segment-button.segment-activated{color:#fff;background-color:#32db64}.segment-ios-secondary .segment-button-disabled{color:rgba(50,219,100,.3)}.toolbar-ios-secondary .segment-ios .segment-button.segment-activated{color:#32db64}.segment-ios-danger .segment-button{border-color:#f53d3d;color:#f53d3d}.segment-ios-danger .segment-button:hover:not(.segment-activated){background-color:rgba(245,61,61,.1)}.segment-ios-danger .segment-button:active:not(.segment-activated){background-color:rgba(245,61,61,.16)}.segment-ios-danger .segment-button.segment-activated{color:#fff;background-color:#f53d3d}.segment-ios-danger .segment-button-disabled{color:rgba(245,61,61,.3)}.toolbar-ios-danger .segment-ios .segment-button.segment-activated{color:#f53d3d}.segment-ios-light .segment-button{border-color:#f4f4f4;color:#f4f4f4}.segment-ios-light .segment-button:hover:not(.segment-activated){background-color:rgba(244,244,244,.1)}.segment-ios-light .segment-button:active:not(.segment-activated){background-color:rgba(244,244,244,.16)}.segment-ios-light .segment-button.segment-activated{color:#000;background-color:#f4f4f4}.segment-ios-light .segment-button-disabled{color:rgba(244,244,244,.3)}.toolbar-ios-light .segment-ios .segment-button.segment-activated{color:#f4f4f4}.segment-ios-dark .segment-button{border-color:#222;color:#222}.segment-ios-dark .segment-button:hover:not(.segment-activated){background-color:rgba(34,34,34,.1)}.segment-ios-dark .segment-button:active:not(.segment-activated){background-color:rgba(34,34,34,.16)}.segment-ios-dark .segment-button.segment-activated{color:#fff;background-color:#222}.segment-ios-dark .segment-button-disabled{color:rgba(34,34,34,.3)}.toolbar-ios-dark .segment-ios .segment-button.segment-activated{color:#222}.segment-ios-energized .segment-button{border-color:#ffc527;color:#ffc527}.segment-ios-energized .segment-button:hover:not(.segment-activated){background-color:rgba(255,197,39,.1)}.segment-ios-energized .segment-button:active:not(.segment-activated){background-color:rgba(255,197,39,.16)}.segment-ios-energized .segment-button.segment-activated{color:#000;background-color:#ffc527}.segment-ios-energized .segment-button-disabled{color:rgba(255,197,39,.3)}.toolbar-ios-energized .segment-ios .segment-button.segment-activated{color:#ffc527}.segment-ios-royal .segment-button{border-color:#7e60ff;color:#7e60ff}.segment-ios-royal .segment-button:hover:not(.segment-activated){background-color:rgba(126,96,255,.1)}.segment-ios-royal .segment-button:active:not(.segment-activated){background-color:rgba(126,96,255,.16)}.segment-ios-royal .segment-button.segment-activated{color:#fff;background-color:#7e60ff}.segment-ios-royal .segment-button-disabled{color:rgba(126,96,255,.3)}.toolbar-ios-royal .segment-ios .segment-button.segment-activated{color:#7e60ff}.segment-ios-subtle .segment-button{border-color:#444;color:#444}.segment-ios-subtle .segment-button:hover:not(.segment-activated){background-color:rgba(68,68,68,.1)}.segment-ios-subtle .segment-button:active:not(.segment-activated){background-color:rgba(68,68,68,.16)}.segment-ios-subtle .segment-button.segment-activated{color:#fff;background-color:#444}.segment-ios-subtle .segment-button-disabled{color:rgba(68,68,68,.3)}.toolbar-ios-subtle .segment-ios .segment-button.segment-activated{color:#444}.segment-ios-vibrant .segment-button{border-color:#663399;color:#663399}.segment-ios-vibrant .segment-button:hover:not(.segment-activated){background-color:rgba(102,51,153,.1)}.segment-ios-vibrant .segment-button:active:not(.segment-activated){background-color:rgba(102,51,153,.16)}.segment-ios-vibrant .segment-button.segment-activated{color:#fff;background-color:#663399}.segment-ios-vibrant .segment-button-disabled{color:rgba(102,51,153,.3)}.toolbar-ios-vibrant .segment-ios .segment-button.segment-activated{color:#663399}.segment-ios-bright .segment-button{border-color:#ffc125;color:#ffc125}.segment-ios-bright .segment-button:hover:not(.segment-activated){background-color:rgba(255,193,37,.1)}.segment-ios-bright .segment-button:active:not(.segment-activated){background-color:rgba(255,193,37,.16)}.segment-ios-bright .segment-button.segment-activated{color:#000;background-color:#ffc125}.segment-ios-bright .segment-button-disabled{color:rgba(255,193,37,.3)}.toolbar-ios-bright .segment-ios .segment-button.segment-activated{color:#ffc125}.segment-md .segment-button{-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1;width:0;height:4.2rem;border-bottom-width:2px;border-bottom-style:solid;border-bottom-color:rgba(0,0,0,.1);font-size:1.2rem;font-weight:500;line-height:4rem;text-transform:uppercase;color:#fff;background-color:transparent;opacity:.7;-webkit-transition:.1s all linear;transition:.1s all linear;padding:0 6px}.segment-md .segment-button ion-icon{font-size:2.6rem;line-height:4rem}.segment-md .segment-button.activated,.segment-md .segment-button.segment-activated{border-color:#fff;opacity:1}.segment-md .segment-button-disabled,.segment-md.segment-disabled{opacity:.3;pointer-events:none}.toolbar .segment-md{margin:0 auto}.toolbar .segment-md .segment-button.activated,.toolbar .segment-md .segment-button.segment-activated{opacity:1}.segment-md-primary .segment-button{color:#488aff}.segment-md-primary .segment-button.activated,.segment-md-primary .segment-button.segment-activated{border-color:#488aff;color:#488aff;opacity:1}.segment-md-secondary .segment-button{color:#32db64}.segment-md-secondary .segment-button.activated,.segment-md-secondary .segment-button.segment-activated{border-color:#32db64;color:#32db64;opacity:1}.segment-md-danger .segment-button{color:#f53d3d}.segment-md-danger .segment-button.activated,.segment-md-danger .segment-button.segment-activated{border-color:#f53d3d;color:#f53d3d;opacity:1}.segment-md-light .segment-button{color:#f4f4f4}.segment-md-light .segment-button.activated,.segment-md-light .segment-button.segment-activated{border-color:#f4f4f4;color:#f4f4f4;opacity:1}.segment-md-dark .segment-button{color:#222}.segment-md-dark .segment-button.activated,.segment-md-dark .segment-button.segment-activated{border-color:#222;color:#222;opacity:1}.segment-md-energized .segment-button{color:#ffc527}.segment-md-energized .segment-button.activated,.segment-md-energized .segment-button.segment-activated{border-color:#ffc527;color:#ffc527;opacity:1}.segment-md-royal .segment-button{color:#7e60ff}.segment-md-royal .segment-button.activated,.segment-md-royal .segment-button.segment-activated{border-color:#7e60ff;color:#7e60ff;opacity:1}.segment-md-subtle .segment-button{color:#444}.segment-md-subtle .segment-button.activated,.segment-md-subtle .segment-button.segment-activated{border-color:#444;color:#444;opacity:1}.segment-md-vibrant .segment-button{color:#663399}.segment-md-vibrant .segment-button.activated,.segment-md-vibrant .segment-button.segment-activated{border-color:#663399;color:#663399;opacity:1}.segment-md-bright .segment-button{color:#ffc125}.segment-md-bright .segment-button.activated,.segment-md-bright .segment-button.segment-activated{border-color:#ffc125;color:#ffc125;opacity:1}.segment-wp{-webkit-box-pack:start;-webkit-justify-content:flex-start;-ms-flex-pack:start;justify-content:flex-start}.segment-wp .segment-button{height:4rem;font-size:1.3rem;font-weight:700;line-height:4rem;text-transform:uppercase;color:#000;background-color:transparent;opacity:.5;padding:0 6px}.segment-wp .segment-button.segment-activated{opacity:1}.segment-wp .segment-button ion-icon{font-size:2.6rem;line-height:4rem}.segment-wp .segment-button-disabled,.segment-wp.segment-disabled{opacity:.3;pointer-events:none}.toolbar .segment-wp{margin:0 auto}.segment-wp-primary .segment-button{color:#488aff}.segment-wp-primary .segment-button.activated,.segment-wp-primary .segment-button.segment-activated{border-color:#488aff;color:#488aff;opacity:1}.segment-wp-secondary .segment-button{color:#32db64}.segment-wp-secondary .segment-button.activated,.segment-wp-secondary .segment-button.segment-activated{border-color:#32db64;color:#32db64;opacity:1}.segment-wp-danger .segment-button{color:#f53d3d}.segment-wp-danger .segment-button.activated,.segment-wp-danger .segment-button.segment-activated{border-color:#f53d3d;color:#f53d3d;opacity:1}.segment-wp-light .segment-button{color:#f4f4f4}.segment-wp-light .segment-button.activated,.segment-wp-light .segment-button.segment-activated{border-color:#f4f4f4;color:#f4f4f4;opacity:1}.segment-wp-dark .segment-button{color:#222}.segment-wp-dark .segment-button.activated,.segment-wp-dark .segment-button.segment-activated{border-color:#222;color:#222;opacity:1}.segment-wp-energized .segment-button{color:#ffc527}.segment-wp-energized .segment-button.activated,.segment-wp-energized .segment-button.segment-activated{border-color:#ffc527;color:#ffc527;opacity:1}.segment-wp-royal .segment-button{color:#7e60ff}.segment-wp-royal .segment-button.activated,.segment-wp-royal .segment-button.segment-activated{border-color:#7e60ff;color:#7e60ff;opacity:1}.segment-wp-subtle .segment-button{color:#444}.segment-wp-subtle .segment-button.activated,.segment-wp-subtle .segment-button.segment-activated{border-color:#444;color:#444;opacity:1}.segment-wp-vibrant .segment-button{color:#663399}.segment-wp-vibrant .segment-button.activated,.segment-wp-vibrant .segment-button.segment-activated{border-color:#663399;color:#663399;opacity:1}.segment-wp-bright .segment-button{color:#ffc125}.segment-wp-bright .segment-button.activated,.segment-wp-bright .segment-button.segment-activated{border-color:#ffc125;color:#ffc125;opacity:1}ion-select{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;overflow:hidden;max-width:45%}.select-text{overflow:hidden;-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1;min-width:16px;font-size:inherit;text-overflow:ellipsis;white-space:nowrap}.item-multiple-inputs ion-select{position:relative}.item-select-disabled ion-label,.select-disabled{opacity:.4;pointer-events:none}.select-popover ion-list{margin:-1px 0}.select-ios{padding:11px 8px 11px 16px}.select-ios .select-placeholder{color:#999}.select-ios .select-icon{position:relative;width:12px;height:18px}.select-ios .select-icon .select-icon-inner{left:5px;top:50%;margin-top:-2px;position:absolute;width:0;height:0;border-top:5px solid;border-right:5px solid transparent;border-left:5px solid transparent;color:#999;pointer-events:none}.select-md{padding:13px 8px 13px 16px}.select-md .select-placeholder{color:#999}.select-md .item-select ion-label{margin-left:0}.select-md .select-icon{position:relative;width:12px;height:19px}.select-md .select-icon .select-icon-inner{left:5px;top:50%;margin-top:-3px;position:absolute;width:0;height:0;border-top:5px solid;border-right:5px solid transparent;border-left:5px solid transparent;color:#999;pointer-events:none}.select-wp{margin:13px 8px;padding:0 8px;-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1;max-width:100%;border:2px solid rgba(0,0,0,.5);line-height:3rem}.select-wp .select-placeholder{color:rgba(0,0,0,.5)}.item-wp.item-select ion-label{margin-left:0}.select-wp .select-icon{position:relative;-webkit-align-self:center;-ms-flex-item-align:center;align-self:center;width:18px;height:18px}.select-wp .select-icon .select-icon-inner{left:5px;top:3px;position:absolute;display:block;width:9px;height:9px;border-top:2px solid rgba(0,0,0,.5);border-right:2px solid rgba(0,0,0,.5);-webkit-transform:rotate(135deg);transform:rotate(135deg);pointer-events:none}.select-wp .select-text{min-height:3rem}.hidden-show-when{display:none!important}.hidden-hide-when{display:none!important}.swiper-container{margin-left:auto;margin-right:auto;padding:0;position:relative;z-index:1;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;overflow:hidden;width:100%;height:100%}.swiper-container-no-flexbox .swiper-slide{float:left}.swiper-container-vertical>.swiper-wrapper{-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column}.swiper-wrapper{padding:0;position:relative;z-index:1;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;width:100%;height:100%;-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-box-sizing:content-box;box-sizing:content-box}.swiper-container-android .swiper-slide,.swiper-wrapper{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}.swiper-container-multirow>.swiper-wrapper{-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap}.swiper-container-free-mode>.swiper-wrapper{margin:0 auto;-webkit-transition-timing-function:ease-out;transition-timing-function:ease-out}.swiper-slide{text-align:center;position:relative;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;width:100%;height:100%;font-size:18px;-webkit-box-sizing:border-box;box-sizing:border-box}.swiper-container-autoheight,.swiper-container-autoheight .swiper-slide{height:auto}.swiper-container-autoheight .swiper-wrapper{-webkit-box-align:start;-webkit-align-items:flex-start;-ms-flex-align:start;align-items:flex-start;-webkit-transition-property:height,-webkit-transform;transition-property:height,-webkit-transform;transition-property:transform,height;transition-property:transform,height,-webkit-transform}.swiper-container .swiper-notification{left:0;top:0;position:absolute;z-index:-1000;opacity:0;pointer-events:none}.swiper-wp8-horizontal{-ms-touch-action:pan-y;touch-action:pan-y}.swiper-wp8-vertical{-ms-touch-action:pan-x;touch-action:pan-x}.swiper-button-next,.swiper-button-prev{top:50%;margin-top:-22px;background-position:center;position:absolute;z-index:10;width:27px;height:44px;background-repeat:no-repeat;background-size:27px 44px;cursor:pointer}.swiper-button-next.swiper-button-disabled,.swiper-button-prev.swiper-button-disabled{cursor:auto;opacity:.35;pointer-events:none}.swiper-button-prev,.swiper-container-rtl .swiper-button-next{left:10px;right:auto;background-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%2027%2044'%3E%3Cpath%20d%3D'M0%2C22L22%2C0l2.1%2C2.1L4.2%2C22l19.9%2C19.9L22%2C44L0%2C22L0%2C22L0%2C22z'%20fill%3D'%23007aff'%2F%3E%3C%2Fsvg%3E\")}.swiper-button-prev.swiper-button-black,.swiper-container-rtl .swiper-button-next.swiper-button-black{background-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%2027%2044'%3E%3Cpath%20d%3D'M0%2C22L22%2C0l2.1%2C2.1L4.2%2C22l19.9%2C19.9L22%2C44L0%2C22L0%2C22L0%2C22z'%20fill%3D'%23000000'%2F%3E%3C%2Fsvg%3E\")}.swiper-button-prev.swiper-button-white,.swiper-container-rtl .swiper-button-next.swiper-button-white{background-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%2027%2044'%3E%3Cpath%20d%3D'M0%2C22L22%2C0l2.1%2C2.1L4.2%2C22l19.9%2C19.9L22%2C44L0%2C22L0%2C22L0%2C22z'%20fill%3D'%23ffffff'%2F%3E%3C%2Fsvg%3E\")}.swiper-button-next,.swiper-container-rtl .swiper-button-prev{left:auto;right:10px;background-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%2027%2044'%3E%3Cpath%20d%3D'M27%2C22L27%2C22L5%2C44l-2.1-2.1L22.8%2C22L2.9%2C2.1L5%2C0L27%2C22L27%2C22z'%20fill%3D'%23007aff'%2F%3E%3C%2Fsvg%3E\")}.swiper-button-next.swiper-button-black,.swiper-container-rtl .swiper-button-prev.swiper-button-black{background-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%2027%2044'%3E%3Cpath%20d%3D'M27%2C22L27%2C22L5%2C44l-2.1-2.1L22.8%2C22L2.9%2C2.1L5%2C0L27%2C22L27%2C22z'%20fill%3D'%23000000'%2F%3E%3C%2Fsvg%3E\")}.swiper-button-next.swiper-button-white,.swiper-container-rtl .swiper-button-prev.swiper-button-white{background-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%2027%2044'%3E%3Cpath%20d%3D'M27%2C22L27%2C22L5%2C44l-2.1-2.1L22.8%2C22L2.9%2C2.1L5%2C0L27%2C22L27%2C22z'%20fill%3D'%23ffffff'%2F%3E%3C%2Fsvg%3E\")}.swiper-pagination{text-align:center;-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0);position:absolute;z-index:10;-webkit-transition:.3s;transition:.3s;pointer-events:none}.swiper-pagination.swiper-pagination-hidden{opacity:0}.swiper-container-horizontal>.swiper-pagination-bullets,.swiper-pagination-custom,.swiper-pagination-fraction{left:0;bottom:10px;width:100%}.swiper-pagination-bullet{border-radius:100%;display:inline-block;width:8px;height:8px;background:#000;opacity:.2;pointer-events:auto}button.swiper-pagination-bullet{margin:0;padding:0;-moz-appearance:none;-ms-appearance:none;-webkit-appearance:none;appearance:none;border:0;-webkit-box-shadow:none;box-shadow:none}.swiper-pagination-clickable .swiper-pagination-bullet{cursor:pointer}.swiper-pagination-white .swiper-pagination-bullet{background:#fff}.swiper-pagination-bullet-active{background:#007aff;opacity:1}.swiper-pagination-white .swiper-pagination-bullet-active{background:#fff}.swiper-pagination-black .swiper-pagination-bullet-active{background:#000}.swiper-container-vertical>.swiper-pagination-bullets{right:10px;top:50%;-webkit-transform:translate3d(0,-50%,0);transform:translate3d(0,-50%,0)}.swiper-container-vertical>.swiper-pagination-bullets .swiper-pagination-bullet{margin:5px 0;display:block}.swiper-container-horizontal>.swiper-pagination-bullets .swiper-pagination-bullet{margin:0 5px}.swiper-pagination-progress{position:absolute;background:rgba(0,0,0,.25)}.swiper-pagination-progress .swiper-pagination-progressbar{left:0;top:0;-webkit-transform-origin:left top;transform-origin:left top;position:absolute;width:100%;height:100%;background:#007aff;-webkit-transform:scale(0);transform:scale(0)}.swiper-container-rtl .swiper-pagination-progress .swiper-pagination-progressbar{-webkit-transform-origin:right top;transform-origin:right top}.swiper-container-horizontal>.swiper-pagination-progress{left:0;top:0;width:100%;height:4px}.swiper-container-vertical>.swiper-pagination-progress{left:0;top:0;width:4px;height:100%}.swiper-pagination-progress.swiper-pagination-white{background:rgba(255,255,255,.5)}.swiper-pagination-progress.swiper-pagination-white .swiper-pagination-progressbar{background:#fff}.swiper-pagination-progress.swiper-pagination-black .swiper-pagination-progressbar{background:#000}.swiper-container-3d{-webkit-perspective:1200px;perspective:1200px}.swiper-container-3d .swiper-cube-shadow,.swiper-container-3d .swiper-slide,.swiper-container-3d .swiper-slide-shadow-bottom,.swiper-container-3d .swiper-slide-shadow-left,.swiper-container-3d .swiper-slide-shadow-right,.swiper-container-3d .swiper-slide-shadow-top,.swiper-container-3d .swiper-wrapper{-webkit-transform-style:preserve-3d;transform-style:preserve-3d}.swiper-container-3d .swiper-slide-shadow-bottom,.swiper-container-3d .swiper-slide-shadow-left,.swiper-container-3d .swiper-slide-shadow-right,.swiper-container-3d .swiper-slide-shadow-top{left:0;top:0;position:absolute;z-index:10;width:100%;height:100%;pointer-events:none}.swiper-container-3d .swiper-slide-shadow-left{background-image:-webkit-gradient(linear,right top,left top,from(rgba(0,0,0,.5)),to(transparent));background-image:linear-gradient(to left,rgba(0,0,0,.5),transparent)}.swiper-container-3d .swiper-slide-shadow-right{background-image:-webkit-gradient(linear,left top,right top,from(rgba(0,0,0,.5)),to(transparent));background-image:linear-gradient(to right,rgba(0,0,0,.5),transparent)}.swiper-container-3d .swiper-slide-shadow-top{background-image:-webkit-gradient(linear,left bottom,left top,from(rgba(0,0,0,.5)),to(transparent));background-image:linear-gradient(to top,rgba(0,0,0,.5),transparent)}.swiper-container-3d .swiper-slide-shadow-bottom{background-image:-webkit-gradient(linear,left top,left bottom,from(rgba(0,0,0,.5)),to(transparent));background-image:linear-gradient(to bottom,rgba(0,0,0,.5),transparent)}.swiper-container-coverflow .swiper-wrapper,.swiper-container-flip .swiper-wrapper{-webkit-perspective:1200px;perspective:1200px}.swiper-container-cube,.swiper-container-flip{overflow:visible}.swiper-container-cube .swiper-slide,.swiper-container-flip .swiper-slide{z-index:1;-webkit-backface-visibility:hidden;backface-visibility:hidden;pointer-events:none}.swiper-container-cube .swiper-slide .swiper-slide,.swiper-container-flip .swiper-slide .swiper-slide{pointer-events:none}.swiper-container-cube .swiper-slide-active,.swiper-container-cube .swiper-slide-active .swiper-slide-active,.swiper-container-flip .swiper-slide-active,.swiper-container-flip .swiper-slide-active .swiper-slide-active{pointer-events:auto}.swiper-container-cube .swiper-slide-shadow-bottom,.swiper-container-cube .swiper-slide-shadow-left,.swiper-container-cube .swiper-slide-shadow-right,.swiper-container-cube .swiper-slide-shadow-top,.swiper-container-flip .swiper-slide-shadow-bottom,.swiper-container-flip .swiper-slide-shadow-left,.swiper-container-flip .swiper-slide-shadow-right,.swiper-container-flip .swiper-slide-shadow-top{z-index:0;-webkit-backface-visibility:hidden;backface-visibility:hidden}.swiper-container-cube .swiper-slide{-webkit-transform-origin:0 0;transform-origin:0 0;width:100%;height:100%;visibility:hidden}.swiper-container-cube.swiper-container-rtl .swiper-slide{-webkit-transform-origin:100% 0;transform-origin:100% 0}.swiper-container-cube .swiper-slide-active,.swiper-container-cube .swiper-slide-next,.swiper-container-cube .swiper-slide-next+.swiper-slide,.swiper-container-cube .swiper-slide-prev{visibility:visible;pointer-events:auto}.swiper-container-cube .swiper-cube-shadow{left:0;bottom:0;position:absolute;z-index:0;width:100%;height:100%;background:#000;opacity:.6;-webkit-filter:blur(50px);filter:blur(50px)}.swiper-container-fade.swiper-container-free-mode .swiper-slide{-webkit-transition-timing-function:ease-out;transition-timing-function:ease-out}.swiper-container-fade .swiper-slide{-webkit-transition-property:opacity;transition-property:opacity;pointer-events:none}.swiper-container-fade .swiper-slide .swiper-slide{pointer-events:none}.swiper-container-fade .swiper-slide-active,.swiper-container-fade .swiper-slide-active .swiper-slide-active{pointer-events:auto}.swiper-zoom-container{text-align:center;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;width:100%;height:100%}.swiper-zoom-container>canvas,.swiper-zoom-container>img,.swiper-zoom-container>svg{max-width:100%;max-height:100%;-o-object-fit:contain;object-fit:contain}.swiper-scrollbar{border-radius:10px;position:relative;background:rgba(0,0,0,.1);-ms-touch-action:none;touch-action:none}.swiper-container-horizontal>.swiper-scrollbar{left:1%;bottom:3px;position:absolute;z-index:50;width:98%;height:5px}.swiper-container-vertical>.swiper-scrollbar{right:3px;top:1%;position:absolute;z-index:50;width:5px;height:98%}.swiper-scrollbar-drag{left:0;top:0;border-radius:10px;position:relative;width:100%;height:100%;background:rgba(0,0,0,.5)}.swiper-scrollbar-cursor-drag{cursor:move}.swiper-lazy-preloader{left:50%;top:50%;margin-left:-21px;margin-top:-21px;-webkit-transform-origin:50%;transform-origin:50%;position:absolute;z-index:10;width:42px;height:42px;-webkit-animation:swiper-preloader-spin 1s steps(12,end) infinite;animation:swiper-preloader-spin 1s steps(12,end) infinite}.swiper-lazy-preloader::after{background-position:50%;display:block;width:100%;height:100%;background-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20viewBox%3D'0%200%20120%20120'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20xmlns%3Axlink%3D'http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink'%3E%3Cdefs%3E%3Cline%20id%3D'l'%20x1%3D'60'%20x2%3D'60'%20y1%3D'7'%20y2%3D'27'%20stroke%3D'%236c6c6c'%20stroke-width%3D'11'%20stroke-linecap%3D'round'%2F%3E%3C%2Fdefs%3E%3Cg%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(30%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(60%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(90%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(120%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(150%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.37'%20transform%3D'rotate(180%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.46'%20transform%3D'rotate(210%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.56'%20transform%3D'rotate(240%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.66'%20transform%3D'rotate(270%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.75'%20transform%3D'rotate(300%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.85'%20transform%3D'rotate(330%2060%2C60)'%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E\");background-repeat:no-repeat;background-size:100%;content:\"\"}.swiper-lazy-preloader-white::after{background-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20viewBox%3D'0%200%20120%20120'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20xmlns%3Axlink%3D'http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink'%3E%3Cdefs%3E%3Cline%20id%3D'l'%20x1%3D'60'%20x2%3D'60'%20y1%3D'7'%20y2%3D'27'%20stroke%3D'%23fff'%20stroke-width%3D'11'%20stroke-linecap%3D'round'%2F%3E%3C%2Fdefs%3E%3Cg%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(30%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(60%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(90%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(120%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(150%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.37'%20transform%3D'rotate(180%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.46'%20transform%3D'rotate(210%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.56'%20transform%3D'rotate(240%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.66'%20transform%3D'rotate(270%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.75'%20transform%3D'rotate(300%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.85'%20transform%3D'rotate(330%2060%2C60)'%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E\")}@-webkit-keyframes swiper-preloader-spin{100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes swiper-preloader-spin{100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}ion-slides{display:block;width:100%;height:100%}.slide-zoom{text-align:center;display:block;width:100%}.swiper-slide img{width:auto;max-width:100%;height:auto;max-height:100%}ion-spinner{position:relative;display:inline-block;width:28px;height:28px}ion-spinner svg{left:0;top:0;position:absolute;width:100%;height:100%;-webkit-transform:translateZ(0);transform:translateZ(0)}ion-spinner.spinner-paused svg{-webkit-animation-play-state:paused;animation-play-state:paused}.spinner-ios line,.spinner-ios-small line{stroke-width:4px;stroke-linecap:round}.spinner-ios svg,.spinner-ios-small svg{-webkit-animation:spinner-fade-out 1s linear infinite;animation:spinner-fade-out 1s linear infinite}.spinner-bubbles svg{-webkit-animation:spinner-scale-out 1s linear infinite;animation:spinner-scale-out 1s linear infinite}.spinner-circles svg{-webkit-animation:spinner-fade-out 1s linear infinite;animation:spinner-fade-out 1s linear infinite}.spinner-crescent circle{fill:transparent;stroke-width:4px;stroke-dasharray:128px;stroke-dashoffset:82px}.spinner-crescent svg{-webkit-animation:spinner-rotate 1s linear infinite;animation:spinner-rotate 1s linear infinite}.spinner-dots circle{stroke-width:0}.spinner-dots svg{-webkit-transform-origin:center;transform-origin:center;-webkit-animation:spinner-dots 1s linear infinite;animation:spinner-dots 1s linear infinite}@-webkit-keyframes spinner-fade-out{0%{opacity:1}100%{opacity:0}}@keyframes spinner-fade-out{0%{opacity:1}100%{opacity:0}}@-webkit-keyframes spinner-scale-out{0%{-webkit-transform:scale(1,1);transform:scale(1,1)}100%{-webkit-transform:scale(0,0);transform:scale(0,0)}}@keyframes spinner-scale-out{0%{-webkit-transform:scale(1,1);transform:scale(1,1)}100%{-webkit-transform:scale(0,0);transform:scale(0,0)}}@-webkit-keyframes spinner-rotate{0%{-webkit-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes spinner-rotate{0%{-webkit-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@-webkit-keyframes spinner-dots{0%{opacity:.9;-webkit-transform:scale(1,1);transform:scale(1,1)}50%{opacity:.3;-webkit-transform:scale(.4,.4);transform:scale(.4,.4)}100%{opacity:.9;-webkit-transform:scale(1,1);transform:scale(1,1)}}@keyframes spinner-dots{0%{opacity:.9;-webkit-transform:scale(1,1);transform:scale(1,1)}50%{opacity:.3;-webkit-transform:scale(.4,.4);transform:scale(.4,.4)}100%{opacity:.9;-webkit-transform:scale(1,1);transform:scale(1,1)}}.spinner-ios-ios line,.spinner-ios-ios-small line{stroke:#69717d}.spinner-ios-bubbles circle{fill:#000}.spinner-ios-circles circle{fill:#69717d}.spinner-ios-crescent circle{stroke:#000}.spinner-ios-dots circle{fill:#444}.spinner-ios-primary.spinner-crescent circle,.spinner-ios-primary.spinner-ios line,.spinner-ios-primary.spinner-ios-small line{stroke:#488aff}.spinner-ios-primary.spinner-bubbles circle,.spinner-ios-primary.spinner-circles circle,.spinner-ios-primary.spinner-dots circle{fill:#488aff}.spinner-ios-secondary.spinner-crescent circle,.spinner-ios-secondary.spinner-ios line,.spinner-ios-secondary.spinner-ios-small line{stroke:#32db64}.spinner-ios-secondary.spinner-bubbles circle,.spinner-ios-secondary.spinner-circles circle,.spinner-ios-secondary.spinner-dots circle{fill:#32db64}.spinner-ios-danger.spinner-crescent circle,.spinner-ios-danger.spinner-ios line,.spinner-ios-danger.spinner-ios-small line{stroke:#f53d3d}.spinner-ios-danger.spinner-bubbles circle,.spinner-ios-danger.spinner-circles circle,.spinner-ios-danger.spinner-dots circle{fill:#f53d3d}.spinner-ios-light.spinner-crescent circle,.spinner-ios-light.spinner-ios line,.spinner-ios-light.spinner-ios-small line{stroke:#f4f4f4}.spinner-ios-light.spinner-bubbles circle,.spinner-ios-light.spinner-circles circle,.spinner-ios-light.spinner-dots circle{fill:#f4f4f4}.spinner-ios-dark.spinner-crescent circle,.spinner-ios-dark.spinner-ios line,.spinner-ios-dark.spinner-ios-small line{stroke:#222}.spinner-ios-dark.spinner-bubbles circle,.spinner-ios-dark.spinner-circles circle,.spinner-ios-dark.spinner-dots circle{fill:#222}.spinner-ios-energized.spinner-crescent circle,.spinner-ios-energized.spinner-ios line,.spinner-ios-energized.spinner-ios-small line{stroke:#ffc527}.spinner-ios-energized.spinner-bubbles circle,.spinner-ios-energized.spinner-circles circle,.spinner-ios-energized.spinner-dots circle{fill:#ffc527}.spinner-ios-royal.spinner-crescent circle,.spinner-ios-royal.spinner-ios line,.spinner-ios-royal.spinner-ios-small line{stroke:#7e60ff}.spinner-ios-royal.spinner-bubbles circle,.spinner-ios-royal.spinner-circles circle,.spinner-ios-royal.spinner-dots circle{fill:#7e60ff}.spinner-ios-subtle.spinner-crescent circle,.spinner-ios-subtle.spinner-ios line,.spinner-ios-subtle.spinner-ios-small line{stroke:#444}.spinner-ios-subtle.spinner-bubbles circle,.spinner-ios-subtle.spinner-circles circle,.spinner-ios-subtle.spinner-dots circle{fill:#444}.spinner-ios-vibrant.spinner-crescent circle,.spinner-ios-vibrant.spinner-ios line,.spinner-ios-vibrant.spinner-ios-small line{stroke:#663399}.spinner-ios-vibrant.spinner-bubbles circle,.spinner-ios-vibrant.spinner-circles circle,.spinner-ios-vibrant.spinner-dots circle{fill:#663399}.spinner-ios-bright.spinner-crescent circle,.spinner-ios-bright.spinner-ios line,.spinner-ios-bright.spinner-ios-small line{stroke:#ffc125}.spinner-ios-bright.spinner-bubbles circle,.spinner-ios-bright.spinner-circles circle,.spinner-ios-bright.spinner-dots circle{fill:#ffc125}.spinner-md-ios line,.spinner-md-ios-small line{stroke:#69717d}.spinner-md-bubbles circle{fill:#000}.spinner-md-circles circle{fill:#69717d}.spinner-md-crescent circle{stroke:#000}.spinner-md-dots circle{fill:#444}.spinner-md-primary.spinner-crescent circle,.spinner-md-primary.spinner-ios line,.spinner-md-primary.spinner-ios-small line{stroke:#488aff}.spinner-md-primary.spinner-bubbles circle,.spinner-md-primary.spinner-circles circle,.spinner-md-primary.spinner-dots circle{fill:#488aff}.spinner-md-secondary.spinner-crescent circle,.spinner-md-secondary.spinner-ios line,.spinner-md-secondary.spinner-ios-small line{stroke:#32db64}.spinner-md-secondary.spinner-bubbles circle,.spinner-md-secondary.spinner-circles circle,.spinner-md-secondary.spinner-dots circle{fill:#32db64}.spinner-md-danger.spinner-crescent circle,.spinner-md-danger.spinner-ios line,.spinner-md-danger.spinner-ios-small line{stroke:#f53d3d}.spinner-md-danger.spinner-bubbles circle,.spinner-md-danger.spinner-circles circle,.spinner-md-danger.spinner-dots circle{fill:#f53d3d}.spinner-md-light.spinner-crescent circle,.spinner-md-light.spinner-ios line,.spinner-md-light.spinner-ios-small line{stroke:#f4f4f4}.spinner-md-light.spinner-bubbles circle,.spinner-md-light.spinner-circles circle,.spinner-md-light.spinner-dots circle{fill:#f4f4f4}.spinner-md-dark.spinner-crescent circle,.spinner-md-dark.spinner-ios line,.spinner-md-dark.spinner-ios-small line{stroke:#222}.spinner-md-dark.spinner-bubbles circle,.spinner-md-dark.spinner-circles circle,.spinner-md-dark.spinner-dots circle{fill:#222}.spinner-md-energized.spinner-crescent circle,.spinner-md-energized.spinner-ios line,.spinner-md-energized.spinner-ios-small line{stroke:#ffc527}.spinner-md-energized.spinner-bubbles circle,.spinner-md-energized.spinner-circles circle,.spinner-md-energized.spinner-dots circle{fill:#ffc527}.spinner-md-royal.spinner-crescent circle,.spinner-md-royal.spinner-ios line,.spinner-md-royal.spinner-ios-small line{stroke:#7e60ff}.spinner-md-royal.spinner-bubbles circle,.spinner-md-royal.spinner-circles circle,.spinner-md-royal.spinner-dots circle{fill:#7e60ff}.spinner-md-subtle.spinner-crescent circle,.spinner-md-subtle.spinner-ios line,.spinner-md-subtle.spinner-ios-small line{stroke:#444}.spinner-md-subtle.spinner-bubbles circle,.spinner-md-subtle.spinner-circles circle,.spinner-md-subtle.spinner-dots circle{fill:#444}.spinner-md-vibrant.spinner-crescent circle,.spinner-md-vibrant.spinner-ios line,.spinner-md-vibrant.spinner-ios-small line{stroke:#663399}.spinner-md-vibrant.spinner-bubbles circle,.spinner-md-vibrant.spinner-circles circle,.spinner-md-vibrant.spinner-dots circle{fill:#663399}.spinner-md-bright.spinner-crescent circle,.spinner-md-bright.spinner-ios line,.spinner-md-bright.spinner-ios-small line{stroke:#ffc125}.spinner-md-bright.spinner-bubbles circle,.spinner-md-bright.spinner-circles circle,.spinner-md-bright.spinner-dots circle{fill:#ffc125}.spinner-wp-ios line,.spinner-wp-ios-small line{stroke:#69717d}.spinner-wp-bubbles circle{fill:#000}.spinner-wp-circles circle{fill:#69717d}.spinner-wp-crescent circle{stroke:#000}.spinner-wp-dots circle{fill:#444}.spinner-wp-primary.spinner-crescent circle,.spinner-wp-primary.spinner-ios line,.spinner-wp-primary.spinner-ios-small line{stroke:#488aff}.spinner-wp-primary.spinner-bubbles circle,.spinner-wp-primary.spinner-circles circle,.spinner-wp-primary.spinner-dots circle{fill:#488aff}.spinner-wp-secondary.spinner-crescent circle,.spinner-wp-secondary.spinner-ios line,.spinner-wp-secondary.spinner-ios-small line{stroke:#32db64}.spinner-wp-secondary.spinner-bubbles circle,.spinner-wp-secondary.spinner-circles circle,.spinner-wp-secondary.spinner-dots circle{fill:#32db64}.spinner-wp-danger.spinner-crescent circle,.spinner-wp-danger.spinner-ios line,.spinner-wp-danger.spinner-ios-small line{stroke:#f53d3d}.spinner-wp-danger.spinner-bubbles circle,.spinner-wp-danger.spinner-circles circle,.spinner-wp-danger.spinner-dots circle{fill:#f53d3d}.spinner-wp-light.spinner-crescent circle,.spinner-wp-light.spinner-ios line,.spinner-wp-light.spinner-ios-small line{stroke:#f4f4f4}.spinner-wp-light.spinner-bubbles circle,.spinner-wp-light.spinner-circles circle,.spinner-wp-light.spinner-dots circle{fill:#f4f4f4}.spinner-wp-dark.spinner-crescent circle,.spinner-wp-dark.spinner-ios line,.spinner-wp-dark.spinner-ios-small line{stroke:#222}.spinner-wp-dark.spinner-bubbles circle,.spinner-wp-dark.spinner-circles circle,.spinner-wp-dark.spinner-dots circle{fill:#222}.spinner-wp-energized.spinner-crescent circle,.spinner-wp-energized.spinner-ios line,.spinner-wp-energized.spinner-ios-small line{stroke:#ffc527}.spinner-wp-energized.spinner-bubbles circle,.spinner-wp-energized.spinner-circles circle,.spinner-wp-energized.spinner-dots circle{fill:#ffc527}.spinner-wp-royal.spinner-crescent circle,.spinner-wp-royal.spinner-ios line,.spinner-wp-royal.spinner-ios-small line{stroke:#7e60ff}.spinner-wp-royal.spinner-bubbles circle,.spinner-wp-royal.spinner-circles circle,.spinner-wp-royal.spinner-dots circle{fill:#7e60ff}.spinner-wp-subtle.spinner-crescent circle,.spinner-wp-subtle.spinner-ios line,.spinner-wp-subtle.spinner-ios-small line{stroke:#444}.spinner-wp-subtle.spinner-bubbles circle,.spinner-wp-subtle.spinner-circles circle,.spinner-wp-subtle.spinner-dots circle{fill:#444}.spinner-wp-vibrant.spinner-crescent circle,.spinner-wp-vibrant.spinner-ios line,.spinner-wp-vibrant.spinner-ios-small line{stroke:#663399}.spinner-wp-vibrant.spinner-bubbles circle,.spinner-wp-vibrant.spinner-circles circle,.spinner-wp-vibrant.spinner-dots circle{fill:#663399}.spinner-wp-bright.spinner-crescent circle,.spinner-wp-bright.spinner-ios line,.spinner-wp-bright.spinner-ios-small line{stroke:#ffc125}.spinner-wp-bright.spinner-bubbles circle,.spinner-wp-bright.spinner-circles circle,.spinner-wp-bright.spinner-dots circle{fill:#ffc125}.split-pane{left:0;right:0;top:0;bottom:0;position:absolute;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-flex-wrap:nowrap;-ms-flex-wrap:nowrap;flex-wrap:nowrap;contain:strict}.split-pane-side:not(ion-menu){display:none}.split-pane-visible>.split-pane-main,.split-pane-visible>.split-pane-side{left:0;right:0;top:0;bottom:0;position:relative;z-index:0;-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1;-webkit-box-shadow:none!important;box-shadow:none!important}.split-pane-visible>.split-pane-side{-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0;-webkit-box-ordinal-group:0;-webkit-order:-1;-ms-flex-order:-1;order:-1}.split-pane-visible>.split-pane-main,.split-pane-visible>ion-menu.menu-enabled,.split-pane-visible>ion-nav.split-pane-side,.split-pane-visible>ion-tabs.split-pane-side{display:block}.split-pane-visible>ion-split-pane.split-pane-main,.split-pane-visible>ion-split-pane.split-pane-side{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.split-pane-visible>ion-menu.menu-enabled>.menu-inner{left:0;right:0;width:auto;-webkit-box-shadow:none!important;box-shadow:none!important;-webkit-transform:none!important;transform:none!important}.split-pane-visible>ion-menu.menu-enabled>.ion-backdrop{display:hidden!important}.split-pane-visible>.split-pane-side[side=start]{-webkit-box-ordinal-group:0;-webkit-order:-1;-ms-flex-order:-1;order:-1}.split-pane-visible>.split-pane-side[side=end]{-webkit-box-ordinal-group:2;-webkit-order:1;-ms-flex-order:1;order:1}.split-pane-visible>.split-pane-side[side=left]{-webkit-box-ordinal-group:0;-webkit-order:-1;-ms-flex-order:-1;order:-1}.split-pane-visible>.split-pane-side[side=right]{-webkit-box-ordinal-group:2;-webkit-order:1;-ms-flex-order:1;order:1}.split-pane-ios.split-pane-visible>.split-pane-side{min-width:270px;max-width:28%;border-right:.55px solid #c8c7cc;border-left:0}.split-pane-ios.split-pane-visible>.split-pane-side[side=right]{border-right:0;border-left:.55px solid #c8c7cc}.split-pane-md.split-pane-visible>.split-pane-side{min-width:270px;max-width:28%;border-right:1px solid #dedede;border-left:0}.split-pane-md.split-pane-visible>.split-pane-side[side=right]{border-right:0;border-left:1px solid #dedede}.split-pane-wp.split-pane-visible>.split-pane-side{min-width:270px;max-width:28%;border-right:1px solid transparent;border-left:0}.split-pane-wp.split-pane-visible>.split-pane-side[side=right]{border-right:0;border-left:1px solid transparent}.tabbar{left:0;bottom:0;position:absolute;z-index:10;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;width:100%;opacity:0}.tabbar-hidden .tabbar{display:none}.tabbar.show-tabbar{opacity:1}[tabsPlacement=top]>.tabbar{top:0;bottom:auto}.tab-button{margin:0;text-align:center;border-radius:0;position:relative;z-index:0;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;overflow:hidden;-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1;-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;-webkit-align-self:center;-ms-flex-item-align:center;align-self:center;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;border:0;text-decoration:none;background:0 0;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.tab-disabled{pointer-events:none}.tab-disabled ion-badge,.tab-disabled ion-icon,.tab-disabled span{opacity:.4}.tab-button-text{margin-top:3px;margin-bottom:2px}.tab-button-icon,.tab-button-text{display:none;overflow:hidden;-webkit-align-self:center;-ms-flex-item-align:center;align-self:center;min-width:26px;max-width:100%;text-overflow:ellipsis;white-space:nowrap}.has-icon .tab-button-icon,.has-title .tab-button-text{display:block}.has-title-only .tab-button-text{white-space:normal}[tabsLayout=icon-bottom] .tab-button .tab-button-icon{-webkit-box-ordinal-group:11;-webkit-order:10;-ms-flex-order:10;order:10}[tabsLayout=icon-end] .tab-button,[tabsLayout=icon-left] .tab-button,[tabsLayout=icon-right] .tab-button,[tabsLayout=icon-start] .tab-button{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row}[tabsLayout=icon-left] .tab-button .tab-button-icon,[tabsLayout=icon-start] .tab-button .tab-button-icon{padding-right:8px;text-align:right;text-align:end}[tabsLayout=icon-end] .tab-button .tab-button-icon,[tabsLayout=icon-right] .tab-button .tab-button-icon{padding-left:8px;text-align:left;text-align:start;-webkit-box-ordinal-group:11;-webkit-order:10;-ms-flex-order:10;order:10}.tab-hidden,.tab-highlight,[tabsLayout=icon-hide] .tab-button-icon,[tabsLayout=title-hide] .tab-button-text{display:none}.tab-badge{right:4%;top:6%;right:calc(50% - 50px);padding:1px 6px;position:absolute;height:auto;font-size:12px;line-height:16px}.has-icon .tab-badge{right:calc(50% - 30px)}[tabsLayout=icon-bottom] .tab-badge,[tabsLayout=icon-end] .tab-badge,[tabsLayout=icon-left] .tab-badge,[tabsLayout=icon-right] .tab-badge,[tabsLayout=icon-start] .tab-badge{right:calc(50% - 50px)}.tabs-ios .tabbar{-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;border-top:.55px solid rgba(0,0,0,.3);background:#f8f8f8}.tabs-ios[tabsPlacement=top] .tabbar{border-top:0;border-bottom:.55px solid rgba(0,0,0,.3)}.tabs-ios .tab-button{max-width:240px;min-height:49px;font-size:10px;font-weight:500;color:#8c8c8c;padding:0 2px}.tabs-ios .tab-button:hover:not(.disable-hover),.tabs-ios .tab-button[aria-selected=true]{color:#488aff}.tabs-ios .tab-button[aria-selected=true] .tab-button-icon{color:#488aff}.tabs-ios .tab-button-text{margin-top:0;margin-bottom:1px;min-height:11px}.tabs-ios .has-title-only .tab-button-text{font-size:12px}.tabs-ios .tab-button-icon{margin-top:4px;margin-bottom:1px;min-width:35px;height:30px;font-size:30px;color:#8c8c8c}.tabs-ios .tab-button-icon::before{vertical-align:top}.tabs-ios[tabsLayout=icon-end] .tab-button .tab-button-text,.tabs-ios[tabsLayout=icon-left] .tab-button .tab-button-text,.tabs-ios[tabsLayout=icon-right] .tab-button .tab-button-text,.tabs-ios[tabsLayout=icon-start] .tab-button .tab-button-text{font-size:1.4rem;line-height:1.1}.tabs-ios[tabsLayout=icon-end] .tab-button ion-icon,.tabs-ios[tabsLayout=icon-left] .tab-button ion-icon,.tabs-ios[tabsLayout=icon-right] .tab-button ion-icon,.tabs-ios[tabsLayout=icon-start] .tab-button ion-icon{min-width:24px;height:26px;font-size:24px}.tabs-ios .tab-button.has-title-only,.tabs-ios[tabsLayout=icon-hide] .tab-button{min-height:41px}.tabs-ios .tab-button.has-title-only .tab-button-text,.tabs-ios[tabsLayout=icon-hide] .tab-button .tab-button-text{margin:2px 0;font-size:1.4rem;line-height:1.1}.tabs-ios .tab-button.icon-only,.tabs-ios[tabsLayout=title-hide] .tab-button{min-height:41px}.tabs-ios-primary .tabbar{border-color:#1569ff;background-color:#488aff}.tabs-ios-primary .tab-button,.tabs-ios-primary .tab-button-icon,.tabs-ios-primary .tab-button:hover:not(.disable-hover),.tabs-ios-primary .tab-button:hover:not(.disable-hover) .tab-button-icon{color:rgba(255,255,255,.7)}.tabs-ios-primary .tab-button[aria-selected=true],.tabs-ios-primary .tab-button[aria-selected=true] .tab-button-icon{color:#fff}.tabs-ios-secondary .tabbar{border-color:#21b94e;background-color:#32db64}.tabs-ios-secondary .tab-button,.tabs-ios-secondary .tab-button-icon,.tabs-ios-secondary .tab-button:hover:not(.disable-hover),.tabs-ios-secondary .tab-button:hover:not(.disable-hover) .tab-button-icon{color:rgba(255,255,255,.7)}.tabs-ios-secondary .tab-button[aria-selected=true],.tabs-ios-secondary .tab-button[aria-selected=true] .tab-button-icon{color:#fff}.tabs-ios-danger .tabbar{border-color:#f30d0d;background-color:#f53d3d}.tabs-ios-danger .tab-button,.tabs-ios-danger .tab-button-icon,.tabs-ios-danger .tab-button:hover:not(.disable-hover),.tabs-ios-danger .tab-button:hover:not(.disable-hover) .tab-button-icon{color:rgba(255,255,255,.7)}.tabs-ios-danger .tab-button[aria-selected=true],.tabs-ios-danger .tab-button[aria-selected=true] .tab-button-icon{color:#fff}.tabs-ios-light .tabbar{border-color:#dbdbdb;background-color:#f4f4f4}.tabs-ios-light .tab-button,.tabs-ios-light .tab-button-icon,.tabs-ios-light .tab-button:hover:not(.disable-hover),.tabs-ios-light .tab-button:hover:not(.disable-hover) .tab-button-icon{color:rgba(0,0,0,.7)}.tabs-ios-light .tab-button[aria-selected=true],.tabs-ios-light .tab-button[aria-selected=true] .tab-button-icon{color:#000}.tabs-ios-dark .tabbar{border-color:#090909;background-color:#222}.tabs-ios-dark .tab-button,.tabs-ios-dark .tab-button-icon,.tabs-ios-dark .tab-button:hover:not(.disable-hover),.tabs-ios-dark .tab-button:hover:not(.disable-hover) .tab-button-icon{color:rgba(255,255,255,.7)}.tabs-ios-dark .tab-button[aria-selected=true],.tabs-ios-dark .tab-button[aria-selected=true] .tab-button-icon{color:#fff}.tabs-ios-energized .tabbar{border-color:#f3b200;background-color:#ffc527}.tabs-ios-energized .tab-button,.tabs-ios-energized .tab-button-icon,.tabs-ios-energized .tab-button:hover:not(.disable-hover),.tabs-ios-energized .tab-button:hover:not(.disable-hover) .tab-button-icon{color:rgba(0,0,0,.7)}.tabs-ios-energized .tab-button[aria-selected=true],.tabs-ios-energized .tab-button[aria-selected=true] .tab-button-icon{color:#000}.tabs-ios-royal .tabbar{border-color:#552dff;background-color:#7e60ff}.tabs-ios-royal .tab-button,.tabs-ios-royal .tab-button-icon,.tabs-ios-royal .tab-button:hover:not(.disable-hover),.tabs-ios-royal .tab-button:hover:not(.disable-hover) .tab-button-icon{color:rgba(255,255,255,.7)}.tabs-ios-royal .tab-button[aria-selected=true],.tabs-ios-royal .tab-button[aria-selected=true] .tab-button-icon{color:#fff}.tabs-ios-subtle .tabbar{border-color:#2b2b2b;background-color:#444}.tabs-ios-subtle .tab-button,.tabs-ios-subtle .tab-button-icon,.tabs-ios-subtle .tab-button:hover:not(.disable-hover),.tabs-ios-subtle .tab-button:hover:not(.disable-hover) .tab-button-icon{color:rgba(255,255,255,.7)}.tabs-ios-subtle .tab-button[aria-selected=true],.tabs-ios-subtle .tab-button[aria-selected=true] .tab-button-icon{color:#fff}.tabs-ios-vibrant .tabbar{border-color:#4d2673;background-color:#663399}.tabs-ios-vibrant .tab-button,.tabs-ios-vibrant .tab-button-icon,.tabs-ios-vibrant .tab-button:hover:not(.disable-hover),.tabs-ios-vibrant .tab-button:hover:not(.disable-hover) .tab-button-icon{color:rgba(255,255,255,.7)}.tabs-ios-vibrant .tab-button[aria-selected=true],.tabs-ios-vibrant .tab-button[aria-selected=true] .tab-button-icon{color:#fff}.tabs-ios-bright .tabbar{border-color:#f1ac00;background-color:#ffc125}.tabs-ios-bright .tab-button,.tabs-ios-bright .tab-button-icon,.tabs-ios-bright .tab-button:hover:not(.disable-hover),.tabs-ios-bright .tab-button:hover:not(.disable-hover) .tab-button-icon{color:rgba(0,0,0,.7)}.tabs-ios-bright .tab-button[aria-selected=true],.tabs-ios-bright .tab-button[aria-selected=true] .tab-button-icon{color:#000}.tabs-md .tabbar{background:#f8f8f8}.tabs-md .tab-button{min-height:5.6rem;font-weight:400;color:rgba(60,60,60,.7);padding:0}.tabs-md .tab-button[aria-selected=true]{color:#488aff;padding:0}.tabs-md .tab-button-text{font-size:1.2rem;text-transform:none;-webkit-transition:-webkit-transform .3s ease-in-out;transition:-webkit-transform .3s ease-in-out;transition:transform .3s ease-in-out;transition:transform .3s ease-in-out,-webkit-transform .3s ease-in-out;margin:0;-webkit-transform-origin:50% 80%;transform-origin:50% 80%}.tabs-md .tab-button[aria-selected=true] .tab-button-text{-webkit-transform:scale3d(1.16667,1.16667,1);transform:scale3d(1.16667,1.16667,1);-webkit-transition:-webkit-transform .3s ease-in-out;transition:-webkit-transform .3s ease-in-out;transition:transform .3s ease-in-out;transition:transform .3s ease-in-out,-webkit-transform .3s ease-in-out}.tabs-md[tabsLayout=icon-top] .has-icon .tab-button-text{margin-top:4px;margin-bottom:0}.tabs-md[tabsLayout=icon-bottom] .tab-button .tab-button-text{margin-top:0}.tabs-md .tab-button-icon{margin-top:1px;min-width:2.4rem;font-size:2.4rem;color:rgba(60,60,60,.7);-webkit-transition:-webkit-transform .3s ease-in-out;transition:-webkit-transform .3s ease-in-out;transition:transform .3s ease-in-out;transition:transform .3s ease-in-out,-webkit-transform .3s ease-in-out;-webkit-transform-origin:50% 150%;transform-origin:50% 150%}.tabs-md .tab-button[aria-selected=true] .tab-button-icon{color:#488aff;-webkit-transform:translate3d(0,-2px,0);transform:translate3d(0,-2px,0)}.tabs-md[tabsLayout=icon-end] .tab-button[aria-selected=true] .tab-button-icon,.tabs-md[tabsLayout=icon-right] .tab-button[aria-selected=true] .tab-button-icon{-webkit-transform:translate3d(2px,0,0);transform:translate3d(2px,0,0)}.tabs-md[tabsLayout=icon-bottom] .tab-button[aria-selected=true] .tab-button-icon{-webkit-transform:translate3d(0,2px,0);transform:translate3d(0,2px,0)}.tabs-md[tabsLayout=icon-left] .tab-button[aria-selected=true] .tab-button-icon,.tabs-md[tabsLayout=icon-start] .tab-button[aria-selected=true] .tab-button-icon{-webkit-transform:translate3d(-2px,0,0);transform:translate3d(-2px,0,0)}.tabs-md .tab-button.has-title-only,.tabs-md .tab-button.icon-only,.tabs-md[tabsLayout=icon-hide] .tab-button,.tabs-md[tabsLayout=title-hide] .tab-button{padding:0 10px}.tabs-md[tabsHighlight=true] .tab-highlight{left:0;bottom:0;-webkit-transform-origin:0 0;transform-origin:0 0;position:absolute;display:block;width:1px;height:2px;background:#488aff;-webkit-transform:translateZ(0);transform:translateZ(0)}.tabs-md[tabsHighlight=true] .tab-highlight.animate{-webkit-transition-duration:.3s;transition-duration:.3s}.tabs-md[tabsHighlight=true][tabsPlacement=bottom]>.tabbar>.tab-highlight{top:0}.tabs-md-primary .tabbar{background-color:#488aff}.tabs-md-primary .tab-button,.tabs-md-primary .tab-button-icon{color:rgba(255,255,255,.7)}.tabs-md-primary .tab-button:hover:not(.disable-hover),.tabs-md-primary .tab-button[aria-selected=true],.tabs-md-primary .tab-button[aria-selected=true] .tab-button-icon{color:#fff}.tabs-md-primary[tabsHighlight=true] .tab-highlight{background:#fff}.tabs-md-secondary .tabbar{background-color:#32db64}.tabs-md-secondary .tab-button,.tabs-md-secondary .tab-button-icon{color:rgba(255,255,255,.7)}.tabs-md-secondary .tab-button:hover:not(.disable-hover),.tabs-md-secondary .tab-button[aria-selected=true],.tabs-md-secondary .tab-button[aria-selected=true] .tab-button-icon{color:#fff}.tabs-md-secondary[tabsHighlight=true] .tab-highlight{background:#fff}.tabs-md-danger .tabbar{background-color:#f53d3d}.tabs-md-danger .tab-button,.tabs-md-danger .tab-button-icon{color:rgba(255,255,255,.7)}.tabs-md-danger .tab-button:hover:not(.disable-hover),.tabs-md-danger .tab-button[aria-selected=true],.tabs-md-danger .tab-button[aria-selected=true] .tab-button-icon{color:#fff}.tabs-md-danger[tabsHighlight=true] .tab-highlight{background:#fff}.tabs-md-light .tabbar{background-color:#f4f4f4}.tabs-md-light .tab-button,.tabs-md-light .tab-button-icon{color:rgba(0,0,0,.7)}.tabs-md-light .tab-button:hover:not(.disable-hover),.tabs-md-light .tab-button[aria-selected=true],.tabs-md-light .tab-button[aria-selected=true] .tab-button-icon{color:#000}.tabs-md-light[tabsHighlight=true] .tab-highlight{background:#000}.tabs-md-dark .tabbar{background-color:#222}.tabs-md-dark .tab-button,.tabs-md-dark .tab-button-icon{color:rgba(255,255,255,.7)}.tabs-md-dark .tab-button:hover:not(.disable-hover),.tabs-md-dark .tab-button[aria-selected=true],.tabs-md-dark .tab-button[aria-selected=true] .tab-button-icon{color:#fff}.tabs-md-dark[tabsHighlight=true] .tab-highlight{background:#fff}.tabs-md-energized .tabbar{background-color:#ffc527}.tabs-md-energized .tab-button,.tabs-md-energized .tab-button-icon{color:rgba(0,0,0,.7)}.tabs-md-energized .tab-button:hover:not(.disable-hover),.tabs-md-energized .tab-button[aria-selected=true],.tabs-md-energized .tab-button[aria-selected=true] .tab-button-icon{color:#000}.tabs-md-energized[tabsHighlight=true] .tab-highlight{background:#000}.tabs-md-royal .tabbar{background-color:#7e60ff}.tabs-md-royal .tab-button,.tabs-md-royal .tab-button-icon{color:rgba(255,255,255,.7)}.tabs-md-royal .tab-button:hover:not(.disable-hover),.tabs-md-royal .tab-button[aria-selected=true],.tabs-md-royal .tab-button[aria-selected=true] .tab-button-icon{color:#fff}.tabs-md-royal[tabsHighlight=true] .tab-highlight{background:#fff}.tabs-md-subtle .tabbar{background-color:#444}.tabs-md-subtle .tab-button,.tabs-md-subtle .tab-button-icon{color:rgba(255,255,255,.7)}.tabs-md-subtle .tab-button:hover:not(.disable-hover),.tabs-md-subtle .tab-button[aria-selected=true],.tabs-md-subtle .tab-button[aria-selected=true] .tab-button-icon{color:#fff}.tabs-md-subtle[tabsHighlight=true] .tab-highlight{background:#fff}.tabs-md-vibrant .tabbar{background-color:#663399}.tabs-md-vibrant .tab-button,.tabs-md-vibrant .tab-button-icon{color:rgba(255,255,255,.7)}.tabs-md-vibrant .tab-button:hover:not(.disable-hover),.tabs-md-vibrant .tab-button[aria-selected=true],.tabs-md-vibrant .tab-button[aria-selected=true] .tab-button-icon{color:#fff}.tabs-md-vibrant[tabsHighlight=true] .tab-highlight{background:#fff}.tabs-md-bright .tabbar{background-color:#ffc125}.tabs-md-bright .tab-button,.tabs-md-bright .tab-button-icon{color:rgba(0,0,0,.7)}.tabs-md-bright .tab-button:hover:not(.disable-hover),.tabs-md-bright .tab-button[aria-selected=true],.tabs-md-bright .tab-button[aria-selected=true] .tab-button-icon{color:#000}.tabs-md-bright[tabsHighlight=true] .tab-highlight{background:#000}.tabs-wp .tabbar{background:#f8f8f8}.tabs-wp .tab-button{border-radius:0;min-height:4.8rem;border-bottom:2px solid transparent;font-size:1.2rem;font-weight:400;color:rgba(140,140,140,.7);-webkit-box-shadow:none;box-shadow:none;padding:12px 10px 5px}.tabs-wp .tab-button[aria-selected=true]{border-bottom-color:#488aff;color:#488aff}.tabs-wp .tab-button.activated{background:rgba(0,0,0,.1)}.tabs-wp[tabsPlacement=bottom] .tab-button{border-top:2px solid transparent;border-bottom-width:0}.tabs-wp[tabsPlacement=bottom] .tab-button[aria-selected=true]{border-top-color:#488aff}.tabs-wp .tab-button-text{margin-top:5px;margin-bottom:5px}.tabs-wp .tab-button-icon{min-width:2.4rem;font-size:2.4rem;color:rgba(140,140,140,.7)}.tabs-wp .tab-button[aria-selected=true] .tab-button-icon{color:#488aff}.tabs-wp[tabsLayout=icon-bottom] .tab-button{padding-top:8px;padding-bottom:8px}.tabs-wp[tabsLayout=icon-end] .tab-button,.tabs-wp[tabsLayout=icon-left] .tab-button,.tabs-wp[tabsLayout=icon-right] .tab-button,.tabs-wp[tabsLayout=icon-start] .tab-button{padding-bottom:10px}.tabs-wp[tabsLayout=icon-end] .tab-button ion-icon,.tabs-wp[tabsLayout=icon-left] .tab-button ion-icon,.tabs-wp[tabsLayout=icon-right] .tab-button ion-icon,.tabs-wp[tabsLayout=icon-start] .tab-button ion-icon{min-width:24px}.tabs-wp .tab-button.has-title-only,.tabs-wp .tab-button.icon-only,.tabs-wp[tabsLayout=icon-hide] .tab-button,.tabs-wp[tabsLayout=title-hide] .tab-button{padding:6px 10px}.tabs-wp-primary .tabbar{background-color:#488aff}.tabs-wp-primary .tab-button,.tabs-wp-primary .tab-button-icon{color:rgba(255,255,255,.7)}.tabs-wp-primary .tab-button:hover:not(.disable-hover),.tabs-wp-primary .tab-button:hover:not(.disable-hover) .tab-button-icon,.tabs-wp-primary .tab-button[aria-selected=true],.tabs-wp-primary .tab-button[aria-selected=true] .tab-button-icon{border-color:#fff;color:#fff}.tabs-wp-secondary .tabbar{background-color:#32db64}.tabs-wp-secondary .tab-button,.tabs-wp-secondary .tab-button-icon{color:rgba(255,255,255,.7)}.tabs-wp-secondary .tab-button:hover:not(.disable-hover),.tabs-wp-secondary .tab-button:hover:not(.disable-hover) .tab-button-icon,.tabs-wp-secondary .tab-button[aria-selected=true],.tabs-wp-secondary .tab-button[aria-selected=true] .tab-button-icon{border-color:#fff;color:#fff}.tabs-wp-danger .tabbar{background-color:#f53d3d}.tabs-wp-danger .tab-button,.tabs-wp-danger .tab-button-icon{color:rgba(255,255,255,.7)}.tabs-wp-danger .tab-button:hover:not(.disable-hover),.tabs-wp-danger .tab-button:hover:not(.disable-hover) .tab-button-icon,.tabs-wp-danger .tab-button[aria-selected=true],.tabs-wp-danger .tab-button[aria-selected=true] .tab-button-icon{border-color:#fff;color:#fff}.tabs-wp-light .tabbar{background-color:#f4f4f4}.tabs-wp-light .tab-button,.tabs-wp-light .tab-button-icon{color:rgba(0,0,0,.7)}.tabs-wp-light .tab-button:hover:not(.disable-hover),.tabs-wp-light .tab-button:hover:not(.disable-hover) .tab-button-icon,.tabs-wp-light .tab-button[aria-selected=true],.tabs-wp-light .tab-button[aria-selected=true] .tab-button-icon{border-color:#000;color:#000}.tabs-wp-dark .tabbar{background-color:#222}.tabs-wp-dark .tab-button,.tabs-wp-dark .tab-button-icon{color:rgba(255,255,255,.7)}.tabs-wp-dark .tab-button:hover:not(.disable-hover),.tabs-wp-dark .tab-button:hover:not(.disable-hover) .tab-button-icon,.tabs-wp-dark .tab-button[aria-selected=true],.tabs-wp-dark .tab-button[aria-selected=true] .tab-button-icon{border-color:#fff;color:#fff}.tabs-wp-energized .tabbar{background-color:#ffc527}.tabs-wp-energized .tab-button,.tabs-wp-energized .tab-button-icon{color:rgba(0,0,0,.7)}.tabs-wp-energized .tab-button:hover:not(.disable-hover),.tabs-wp-energized .tab-button:hover:not(.disable-hover) .tab-button-icon,.tabs-wp-energized .tab-button[aria-selected=true],.tabs-wp-energized .tab-button[aria-selected=true] .tab-button-icon{border-color:#000;color:#000}.tabs-wp-royal .tabbar{background-color:#7e60ff}.tabs-wp-royal .tab-button,.tabs-wp-royal .tab-button-icon{color:rgba(255,255,255,.7)}.tabs-wp-royal .tab-button:hover:not(.disable-hover),.tabs-wp-royal .tab-button:hover:not(.disable-hover) .tab-button-icon,.tabs-wp-royal .tab-button[aria-selected=true],.tabs-wp-royal .tab-button[aria-selected=true] .tab-button-icon{border-color:#fff;color:#fff}.tabs-wp-subtle .tabbar{background-color:#444}.tabs-wp-subtle .tab-button,.tabs-wp-subtle .tab-button-icon{color:rgba(255,255,255,.7)}.tabs-wp-subtle .tab-button:hover:not(.disable-hover),.tabs-wp-subtle .tab-button:hover:not(.disable-hover) .tab-button-icon,.tabs-wp-subtle .tab-button[aria-selected=true],.tabs-wp-subtle .tab-button[aria-selected=true] .tab-button-icon{border-color:#fff;color:#fff}.tabs-wp-vibrant .tabbar{background-color:#663399}.tabs-wp-vibrant .tab-button,.tabs-wp-vibrant .tab-button-icon{color:rgba(255,255,255,.7)}.tabs-wp-vibrant .tab-button:hover:not(.disable-hover),.tabs-wp-vibrant .tab-button:hover:not(.disable-hover) .tab-button-icon,.tabs-wp-vibrant .tab-button[aria-selected=true],.tabs-wp-vibrant .tab-button[aria-selected=true] .tab-button-icon{border-color:#fff;color:#fff}.tabs-wp-bright .tabbar{background-color:#ffc125}.tabs-wp-bright .tab-button,.tabs-wp-bright .tab-button-icon{color:rgba(0,0,0,.7)}.tabs-wp-bright .tab-button:hover:not(.disable-hover),.tabs-wp-bright .tab-button:hover:not(.disable-hover) .tab-button-icon,.tabs-wp-bright .tab-button[aria-selected=true],.tabs-wp-bright .tab-button[aria-selected=true] .tab-button-icon{border-color:#000;color:#000}ion-toast{left:0;top:0;position:absolute;z-index:1000;display:block;width:100%;height:100%;pointer-events:none;contain:strict}.toast-container{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;pointer-events:auto;contain:content}.toast-button{padding:19px 16px 17px;font-size:1.5rem}.toast-message{-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1}.toast-ios .toast-wrapper{left:10px;right:10px;margin:auto;border-radius:.65rem;position:absolute;z-index:10;display:block;max-width:700px;background:rgba(0,0,0,.9)}.toast-ios .toast-wrapper.toast-top{-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0);margin:constant(safe-area-inset-top) auto auto;margin:env(safe-area-inset-top) auto auto;top:0}.toast-ios .toast-wrapper.toast-bottom{-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0);margin:auto auto constant(safe-area-inset-bottom);margin:auto auto env(safe-area-inset-bottom);bottom:0}.toast-ios .toast-wrapper.toast-middle{opacity:.01}.toast-ios .toast-message{font-size:1.4rem;color:#fff;padding:1.5rem}.toast-md .toast-wrapper{left:0;right:0;margin:auto;position:absolute;z-index:10;display:block;width:100%;max-width:700px;background:#333}.toast-md .toast-wrapper.toast-top{-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0);top:0}.toast-md .toast-wrapper.toast-bottom{-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0);bottom:0}.toast-md .toast-wrapper.toast-middle{opacity:.01}.toast-md .toast-message{font-size:1.5rem;color:#fff;padding:19px 16px 17px}.toast-wp .toast-wrapper{left:0;right:0;margin:auto;border-radius:0;position:absolute;z-index:10;display:block;max-width:700px;background:#000}.toast-wp .toast-wrapper.toast-top{top:0;opacity:.01}.toast-wp .toast-wrapper.toast-bottom{bottom:0;opacity:.01}.toast-wp .toast-wrapper.toast-middle{opacity:.01}.toast-message{font-size:1.4rem;color:#fff;padding:1.5rem}.toast-button{color:#fff}.toggle-ios{position:relative;width:51px;height:32px;-webkit-box-sizing:content-box;box-sizing:content-box;contain:strict}.toggle-ios .toggle-icon{border-radius:16px;position:relative;display:block;width:100%;height:100%;background-color:#e6e6e6;-webkit-transition:background-color .3s;transition:background-color .3s;pointer-events:none}.toggle-ios .toggle-icon::before{left:2px;right:2px;top:2px;bottom:2px;border-radius:16px;position:absolute;background-color:#fff;content:\"\";-webkit-transform:scale3d(1,1,1);transform:scale3d(1,1,1);-webkit-transition:-webkit-transform .3s;transition:-webkit-transform .3s;transition:transform .3s;transition:transform .3s,-webkit-transform .3s}.toggle-ios .toggle-inner{left:2px;top:2px;border-radius:14px;position:absolute;width:28px;height:28px;background-color:#fff;-webkit-box-shadow:0 3px 12px rgba(0,0,0,.16),0 3px 1px rgba(0,0,0,.1);box-shadow:0 3px 12px rgba(0,0,0,.16),0 3px 1px rgba(0,0,0,.1);-webkit-transition:width 120ms ease-in-out 80ms,left 110ms ease-in-out 80ms,right 110ms ease-in-out 80ms,-webkit-transform .3s;transition:width 120ms ease-in-out 80ms,left 110ms ease-in-out 80ms,right 110ms ease-in-out 80ms,-webkit-transform .3s;transition:transform .3s,width 120ms ease-in-out 80ms,left 110ms ease-in-out 80ms,right 110ms ease-in-out 80ms;transition:transform .3s,width 120ms ease-in-out 80ms,left 110ms ease-in-out 80ms,right 110ms ease-in-out 80ms,-webkit-transform .3s;will-change:transform;contain:strict}.toggle-ios.toggle-checked .toggle-icon{background-color:#488aff}.toggle-ios.toggle-activated .toggle-icon::before,.toggle-ios.toggle-checked .toggle-icon::before{-webkit-transform:scale3d(0,0,0);transform:scale3d(0,0,0)}.toggle-ios.toggle-checked .toggle-inner{-webkit-transform:translate3d(19px,0,0);transform:translate3d(19px,0,0)}.toggle-ios.toggle-activated.toggle-checked .toggle-inner::before{-webkit-transform:scale3d(0,0,0);transform:scale3d(0,0,0)}.toggle-ios.toggle-activated .toggle-inner{width:34px}.toggle-ios.toggle-activated.toggle-checked .toggle-inner{left:-4px}.item-ios.item-toggle-disabled ion-label,.toggle-ios.toggle-disabled{opacity:.3;pointer-events:none}.item-ios .toggle-ios{margin:0;padding:6px 8px 5px 16px}.item-ios .toggle-ios[item-left],.item-ios .toggle-ios[item-start]{padding:6px 16px 5px 0}.toggle-ios-primary.toggle-checked .toggle-icon{background-color:#488aff}.toggle-ios-secondary.toggle-checked .toggle-icon{background-color:#32db64}.toggle-ios-danger.toggle-checked .toggle-icon{background-color:#f53d3d}.toggle-ios-light.toggle-checked .toggle-icon{background-color:#f4f4f4}.toggle-ios-dark.toggle-checked .toggle-icon{background-color:#222}.toggle-ios-energized.toggle-checked .toggle-icon{background-color:#ffc527}.toggle-ios-royal.toggle-checked .toggle-icon{background-color:#7e60ff}.toggle-ios-subtle.toggle-checked .toggle-icon{background-color:#444}.toggle-ios-vibrant.toggle-checked .toggle-icon{background-color:#663399}.toggle-ios-bright.toggle-checked .toggle-icon{background-color:#ffc125}.toggle-md{position:relative;width:36px;height:14px;-webkit-box-sizing:content-box;box-sizing:content-box;contain:strict;padding:12px}.toggle-md .toggle-icon{border-radius:14px;position:relative;display:block;width:100%;height:100%;background-color:#dedede;-webkit-transition:background-color .3s;transition:background-color .3s;pointer-events:none}.toggle-md .toggle-inner{left:0;top:-3px;border-radius:50%;position:absolute;width:20px;height:20px;background-color:#fff;-webkit-box-shadow:0 2px 2px 0 rgba(0,0,0,.14),0 3px 1px -2px rgba(0,0,0,.2),0 1px 5px 0 rgba(0,0,0,.12);box-shadow:0 2px 2px 0 rgba(0,0,0,.14),0 3px 1px -2px rgba(0,0,0,.2),0 1px 5px 0 rgba(0,0,0,.12);-webkit-transition-duration:.3s;transition-duration:.3s;-webkit-transition-property:background-color,-webkit-transform;transition-property:background-color,-webkit-transform;transition-property:transform,background-color;transition-property:transform,background-color,-webkit-transform;will-change:transform,background-color;contain:strict}.toggle-md.toggle-checked .toggle-icon{background-color:#c8dcff}.toggle-md.toggle-checked .toggle-inner{-webkit-transform:translate3d(16px,0,0);transform:translate3d(16px,0,0);background-color:#488aff}.item-md.item-toggle-disabled ion-label,.toggle-md.toggle-disabled{opacity:.3;pointer-events:none}.toggle-md.toggle-disabled ion-radio{opacity:.3}.item-md .toggle-md{cursor:pointer;margin:0;padding:12px 8px 12px 16px}.item-md .toggle-md[item-left],.item-md .toggle-md[item-start]{padding:12px 18px 12px 2px}.item-md.item-toggle ion-label{margin-left:0}.toggle-md-primary.toggle-checked .toggle-icon{background-color:#c8dcff}.toggle-md-primary.toggle-checked .toggle-inner{background-color:#488aff}.toggle-md-secondary.toggle-checked .toggle-icon{background-color:#9eeeb6}.toggle-md-secondary.toggle-checked .toggle-inner{background-color:#32db64}.toggle-md-danger.toggle-checked .toggle-icon{background-color:#fbb6b6}.toggle-md-danger.toggle-checked .toggle-inner{background-color:#f53d3d}.toggle-md-light.toggle-checked .toggle-icon{background-color:#fff}.toggle-md-light.toggle-checked .toggle-inner{background-color:#f4f4f4}.toggle-md-dark.toggle-checked .toggle-icon{background-color:#626262}.toggle-md-dark.toggle-checked .toggle-inner{background-color:#222}.toggle-md-energized.toggle-checked .toggle-icon{background-color:#ffe7a7}.toggle-md-energized.toggle-checked .toggle-inner{background-color:#ffc527}.toggle-md-royal.toggle-checked .toggle-icon{background-color:#e5e0ff}.toggle-md-royal.toggle-checked .toggle-inner{background-color:#7e60ff}.toggle-md-subtle.toggle-checked .toggle-icon{background-color:#848484}.toggle-md-subtle.toggle-checked .toggle-inner{background-color:#444}.toggle-md-vibrant.toggle-checked .toggle-icon{background-color:#a679d2}.toggle-md-vibrant.toggle-checked .toggle-inner{background-color:#663399}.toggle-md-bright.toggle-checked .toggle-icon{background-color:#ffe5a5}.toggle-md-bright.toggle-checked .toggle-inner{background-color:#ffc125}.toggle-wp{position:relative;width:40px;height:18px;-webkit-box-sizing:content-box;box-sizing:content-box;contain:strict}.toggle-wp .toggle-icon{border-radius:18px;position:relative;display:block;width:100%;height:100%;border:2px solid #323232;background-color:transparent;pointer-events:none;contain:strict}.toggle-wp .toggle-inner{left:2px;top:2px;border-radius:50%;position:absolute;width:10px;height:10px;background-color:#323232;-webkit-transition-duration:.3s;transition-duration:.3s;-webkit-transition-property:background-color,-webkit-transform;transition-property:background-color,-webkit-transform;transition-property:transform,background-color;transition-property:transform,background-color,-webkit-transform;will-change:transform,background-color}.toggle-wp.toggle-checked .toggle-icon{border-color:#488aff;background-color:#488aff}.toggle-wp.toggle-checked .toggle-inner{-webkit-transform:translate3d(22px,0,0);transform:translate3d(22px,0,0);background-color:#fff}.item-wp.item-toggle-disabled ion-label,.toggle-wp.toggle-disabled{opacity:.3;pointer-events:none}.toggle-wp.toggle-disabled ion-radio{opacity:.3}.item-wp .toggle-wp{margin:0;cursor:pointer;padding:12px 8px 12px 16px}.item-wp .toggle-wp[item-left],.item-wp .toggle-wp[item-start]{padding:12px 18px 12px 2px}.item-wp.item-toggle ion-label{margin-left:0}.toggle-wp-primary.toggle-checked .toggle-icon{border-color:#488aff;background-color:#488aff}.toggle-wp-primary.toggle-checked .toggle-inner{background-color:#fff}.toggle-wp-secondary.toggle-checked .toggle-icon{border-color:#32db64;background-color:#32db64}.toggle-wp-secondary.toggle-checked .toggle-inner{background-color:#fff}.toggle-wp-danger.toggle-checked .toggle-icon{border-color:#f53d3d;background-color:#f53d3d}.toggle-wp-danger.toggle-checked .toggle-inner{background-color:#fff}.toggle-wp-light.toggle-checked .toggle-icon{border-color:#f4f4f4;background-color:#f4f4f4}.toggle-wp-light.toggle-checked .toggle-inner{background-color:#000}.toggle-wp-dark.toggle-checked .toggle-icon{border-color:#222;background-color:#222}.toggle-wp-dark.toggle-checked .toggle-inner{background-color:#fff}.toggle-wp-energized.toggle-checked .toggle-icon{border-color:#ffc527;background-color:#ffc527}.toggle-wp-energized.toggle-checked .toggle-inner{background-color:#000}.toggle-wp-royal.toggle-checked .toggle-icon{border-color:#7e60ff;background-color:#7e60ff}.toggle-wp-royal.toggle-checked .toggle-inner{background-color:#fff}.toggle-wp-subtle.toggle-checked .toggle-icon{border-color:#444;background-color:#444}.toggle-wp-subtle.toggle-checked .toggle-inner{background-color:#fff}.toggle-wp-vibrant.toggle-checked .toggle-icon{border-color:#663399;background-color:#663399}.toggle-wp-vibrant.toggle-checked .toggle-inner{background-color:#fff}.toggle-wp-bright.toggle-checked .toggle-icon{border-color:#ffc125;background-color:#ffc125}.toggle-wp-bright.toggle-checked .toggle-inner{background-color:#000}ion-toolbar{position:relative;z-index:10}.toolbar{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;overflow:hidden;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;width:100%;contain:content}.toolbar-background{left:0;top:0;position:absolute;z-index:-1;width:100%;height:100%;border:0;-webkit-transform:translateZ(0);transform:translateZ(0);pointer-events:none;contain:strict}ion-title{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;-webkit-transform:translateZ(0);transform:translateZ(0)}.toolbar-title{display:block;overflow:hidden;width:100%;text-overflow:ellipsis;white-space:nowrap}ion-buttons{margin:0 .2rem;display:block;-webkit-transform:translateZ(0);transform:translateZ(0);pointer-events:none}ion-buttons a,ion-buttons button,ion-buttons div,ion-buttons input,ion-buttons textarea{pointer-events:auto}.toolbar[transparent] .toolbar-background{border-color:transparent;background:0 0}.bar-button-menutoggle,ion-buttons{z-index:99;-webkit-transform:translateZ(0);transform:translateZ(0)}ion-navbar.toolbar{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-transform:translateZ(0);transform:translateZ(0)}.bar-button{margin:0;padding:0;text-align:center;-moz-appearance:none;-ms-appearance:none;-webkit-appearance:none;appearance:none;position:relative;display:inline-block;line-height:1;text-overflow:ellipsis;text-transform:none;white-space:nowrap;cursor:pointer;vertical-align:top;vertical-align:-webkit-baseline-middle;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.bar-button::after{left:-2px;right:-2px;top:-7px;bottom:-6px;position:absolute;content:\"\"}.bar-button-menutoggle{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center}.back-button{display:none}.back-button.show-back-button{display:inline-block}.back-button-text{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center}.toolbar-ios{padding:4px;padding-left:4px;padding-right:4px;min-height:44px}@media screen and (orientation:landscape){.toolbar-ios{padding-left:calc(constant(safe-area-inset-left) + 4px);padding-right:calc(constant(safe-area-inset-right) + 4px);padding-left:calc(env(safe-area-inset-left) + 4px);padding-right:calc(env(safe-area-inset-right) + 4px)}}.toolbar-background-ios{background:#f8f8f8}.footer-ios .toolbar-background-ios,.header-ios .toolbar-background-ios{border-style:solid;border-color:rgba(0,0,0,.3)}.header-ios .toolbar-ios:last-child .toolbar-background-ios{border-width:0 0 .55px}.footer-ios .toolbar-ios:first-child .toolbar-background-ios{border-width:.55px 0 0}.header-ios[no-border] .toolbar-ios:last-child .toolbar-background-ios{border-bottom-width:0}.footer-ios[no-border] .toolbar-ios:first-child .toolbar-background-ios{border-top-width:0}.toolbar-content-ios{-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1;-webkit-box-ordinal-group:5;-webkit-order:4;-ms-flex-order:4;order:4;min-width:0}.toolbar-title-ios{text-align:center;font-size:1.7rem;font-weight:600;color:#000;pointer-events:auto}.toolbar-ios ion-title{left:0;top:0;padding:0 90px 1px;position:absolute;width:100%;height:100%;-webkit-transform:translateZ(0);transform:translateZ(0);pointer-events:none}.bar-buttons-ios{-webkit-box-ordinal-group:4;-webkit-order:3;-ms-flex-order:3;order:3;-webkit-transform:translateZ(0);transform:translateZ(0)}.bar-buttons-ios[left]{-webkit-box-ordinal-group:3;-webkit-order:2;-ms-flex-order:2;order:2}.bar-buttons-ios[end]{text-align:right;text-align:end;-webkit-box-ordinal-group:6;-webkit-order:5;-ms-flex-order:5;order:5}.bar-buttons-ios[right]{text-align:right;-webkit-box-ordinal-group:7;-webkit-order:6;-ms-flex-order:6;order:6}.bar-button-ios{padding:0 4px;border-radius:4px;height:32px;border:0;font-size:1.7rem}.bar-button-outline-ios{border-width:1px;border-style:solid;border-color:#488aff;color:#488aff;background-color:transparent}.bar-button-outline-ios:hover:not(.disable-hover){opacity:.4}.bar-button-outline-ios.activated{color:#fff;background-color:#488aff}.bar-button-solid-ios{color:#fff;background-color:#488aff}.bar-button-solid-ios:hover:not(.disable-hover){color:#fff;opacity:.4}.bar-button-solid-ios.activated{color:#fff;background-color:#427feb;opacity:.4}.bar-button-ios.bar-button-icon-start ion-icon{padding-right:.3em;font-size:1.4em;line-height:.67;pointer-events:none}.bar-button-ios.bar-button-icon-end ion-icon{padding-left:.4em;font-size:1.4em;line-height:.67;pointer-events:none}.bar-button-ios[icon-only]{padding:0;min-width:.9em}.bar-button-ios[icon-only] ion-icon{padding:0 .1em;font-size:1.8em;line-height:.67;pointer-events:none}.back-button-ios{margin:0;z-index:99;overflow:visible;-webkit-box-ordinal-group:1;-webkit-order:0;-ms-flex-order:0;order:0;min-height:3.2rem;line-height:1;-webkit-transform:translateZ(0);transform:translateZ(0)}.back-button-icon-ios{margin:-1px 0 0;display:inherit;min-width:18px;font-size:3.4rem}.back-button-text-ios{letter-spacing:-.01em}.bar-button-menutoggle-ios{margin:0 6px;padding:0;-webkit-box-ordinal-group:2;-webkit-order:1;-ms-flex-order:1;order:1;min-width:36px}.bar-button-menutoggle-ios ion-icon{padding:0 6px;font-size:2.8rem}.bar-button-menutoggle-ios[end],.bar-button-menutoggle-ios[right]{-webkit-box-ordinal-group:8;-webkit-order:7;-ms-flex-order:7;order:7}.bar-button-clear-ios-default,.bar-button-default-ios,.bar-button-default.bar-button-ios-default{color:#488aff;background-color:transparent}.bar-button-clear-ios-default:hover:not(.disable-hover),.bar-button-default-ios:hover:not(.disable-hover),.bar-button-default.bar-button-ios-default:hover:not(.disable-hover){color:#488aff}.bar-button-clear-ios-default.activated,.bar-button-default-ios.activated,.bar-button-default.bar-button-ios-default.activated{opacity:.4}.bar-button-clear-ios,.bar-button-clear-ios-clear,.bar-button-default.bar-button-ios-clear{color:#488aff;background-color:transparent}.bar-button-clear-ios-clear:hover:not(.disable-hover),.bar-button-clear-ios:hover:not(.disable-hover),.bar-button-default.bar-button-ios-clear:hover:not(.disable-hover){color:#488aff}.bar-button-clear-ios-clear.activated,.bar-button-clear-ios.activated,.bar-button-default.bar-button-ios-clear.activated{opacity:.4}.toolbar-ios-primary .toolbar-background-ios{background:#488aff}.toolbar-ios-primary .bar-button-clear-ios,.toolbar-ios-primary .bar-button-default-ios,.toolbar-ios-primary .toolbar-title-ios{color:#fff}.toolbar-ios-primary .bar-button-clear-ios-primary,.toolbar-ios-primary .bar-button-default.bar-button-ios-primary,.toolbar-ios-primary .bar-button-primary-ios{color:#488aff;background-color:transparent}.toolbar-ios-primary .bar-button-clear-ios-primary:hover:not(.disable-hover),.toolbar-ios-primary .bar-button-default.bar-button-ios-primary:hover:not(.disable-hover),.toolbar-ios-primary .bar-button-primary-ios:hover:not(.disable-hover){color:#488aff}.toolbar-ios-primary .bar-button-clear-ios-primary.activated,.toolbar-ios-primary .bar-button-default.bar-button-ios-primary.activated,.toolbar-ios-primary .bar-button-primary-ios.activated{opacity:.4}.toolbar-ios-primary .bar-button-outline-ios-primary{border-color:#488aff;color:#488aff;background-color:transparent}.toolbar-ios-primary .bar-button-outline-ios-primary.activated{color:#fff;background-color:#488aff}.toolbar-ios-primary .bar-button-solid-ios-primary{color:#fff;background-color:#488aff}.toolbar-ios-primary .bar-button-solid-ios-primary.activated{color:#fff;background-color:#427feb}.toolbar-ios-primary .bar-button-clear-ios-secondary,.toolbar-ios-primary .bar-button-default.bar-button-ios-secondary,.toolbar-ios-primary .bar-button-secondary-ios{color:#32db64;background-color:transparent}.toolbar-ios-primary .bar-button-clear-ios-secondary:hover:not(.disable-hover),.toolbar-ios-primary .bar-button-default.bar-button-ios-secondary:hover:not(.disable-hover),.toolbar-ios-primary .bar-button-secondary-ios:hover:not(.disable-hover){color:#32db64}.toolbar-ios-primary .bar-button-clear-ios-secondary.activated,.toolbar-ios-primary .bar-button-default.bar-button-ios-secondary.activated,.toolbar-ios-primary .bar-button-secondary-ios.activated{opacity:.4}.toolbar-ios-primary .bar-button-outline-ios-secondary{border-color:#32db64;color:#32db64;background-color:transparent}.toolbar-ios-primary .bar-button-outline-ios-secondary.activated{color:#fff;background-color:#32db64}.toolbar-ios-primary .bar-button-solid-ios-secondary{color:#fff;background-color:#32db64}.toolbar-ios-primary .bar-button-solid-ios-secondary.activated{color:#fff;background-color:#2ec95c}.toolbar-ios-primary .bar-button-clear-ios-danger,.toolbar-ios-primary .bar-button-danger-ios,.toolbar-ios-primary .bar-button-default.bar-button-ios-danger{color:#f53d3d;background-color:transparent}.toolbar-ios-primary .bar-button-clear-ios-danger:hover:not(.disable-hover),.toolbar-ios-primary .bar-button-danger-ios:hover:not(.disable-hover),.toolbar-ios-primary .bar-button-default.bar-button-ios-danger:hover:not(.disable-hover){color:#f53d3d}.toolbar-ios-primary .bar-button-clear-ios-danger.activated,.toolbar-ios-primary .bar-button-danger-ios.activated,.toolbar-ios-primary .bar-button-default.bar-button-ios-danger.activated{opacity:.4}.toolbar-ios-primary .bar-button-outline-ios-danger{border-color:#f53d3d;color:#f53d3d;background-color:transparent}.toolbar-ios-primary .bar-button-outline-ios-danger.activated{color:#fff;background-color:#f53d3d}.toolbar-ios-primary .bar-button-solid-ios-danger{color:#fff;background-color:#f53d3d}.toolbar-ios-primary .bar-button-solid-ios-danger.activated{color:#fff;background-color:#e13838}.toolbar-ios-primary .bar-button-clear-ios-light,.toolbar-ios-primary .bar-button-default.bar-button-ios-light,.toolbar-ios-primary .bar-button-light-ios{color:#f4f4f4;background-color:transparent}.toolbar-ios-primary .bar-button-clear-ios-light:hover:not(.disable-hover),.toolbar-ios-primary .bar-button-default.bar-button-ios-light:hover:not(.disable-hover),.toolbar-ios-primary .bar-button-light-ios:hover:not(.disable-hover){color:#f4f4f4}.toolbar-ios-primary .bar-button-clear-ios-light.activated,.toolbar-ios-primary .bar-button-default.bar-button-ios-light.activated,.toolbar-ios-primary .bar-button-light-ios.activated{opacity:.4}.toolbar-ios-primary .bar-button-outline-ios-light{border-color:#f4f4f4;color:#f4f4f4;background-color:transparent}.toolbar-ios-primary .bar-button-outline-ios-light.activated{color:#000;background-color:#f4f4f4}.toolbar-ios-primary .bar-button-solid-ios-light{color:#000;background-color:#f4f4f4}.toolbar-ios-primary .bar-button-solid-ios-light.activated{color:#000;background-color:#e0e0e0}.toolbar-ios-primary .bar-button-clear-ios-dark,.toolbar-ios-primary .bar-button-dark-ios,.toolbar-ios-primary .bar-button-default.bar-button-ios-dark{color:#222;background-color:transparent}.toolbar-ios-primary .bar-button-clear-ios-dark:hover:not(.disable-hover),.toolbar-ios-primary .bar-button-dark-ios:hover:not(.disable-hover),.toolbar-ios-primary .bar-button-default.bar-button-ios-dark:hover:not(.disable-hover){color:#222}.toolbar-ios-primary .bar-button-clear-ios-dark.activated,.toolbar-ios-primary .bar-button-dark-ios.activated,.toolbar-ios-primary .bar-button-default.bar-button-ios-dark.activated{opacity:.4}.toolbar-ios-primary .bar-button-outline-ios-dark{border-color:#222;color:#222;background-color:transparent}.toolbar-ios-primary .bar-button-outline-ios-dark.activated{color:#fff;background-color:#222}.toolbar-ios-primary .bar-button-solid-ios-dark{color:#fff;background-color:#222}.toolbar-ios-primary .bar-button-solid-ios-dark.activated{color:#fff;background-color:#343434}.toolbar-ios-primary .bar-button-clear-ios-energized,.toolbar-ios-primary .bar-button-default.bar-button-ios-energized,.toolbar-ios-primary .bar-button-energized-ios{color:#ffc527;background-color:transparent}.toolbar-ios-primary .bar-button-clear-ios-energized:hover:not(.disable-hover),.toolbar-ios-primary .bar-button-default.bar-button-ios-energized:hover:not(.disable-hover),.toolbar-ios-primary .bar-button-energized-ios:hover:not(.disable-hover){color:#ffc527}.toolbar-ios-primary .bar-button-clear-ios-energized.activated,.toolbar-ios-primary .bar-button-default.bar-button-ios-energized.activated,.toolbar-ios-primary .bar-button-energized-ios.activated{opacity:.4}.toolbar-ios-primary .bar-button-outline-ios-energized{border-color:#ffc527;color:#ffc527;background-color:transparent}.toolbar-ios-primary .bar-button-outline-ios-energized.activated{color:#000;background-color:#ffc527}.toolbar-ios-primary .bar-button-solid-ios-energized{color:#000;background-color:#ffc527}.toolbar-ios-primary .bar-button-solid-ios-energized.activated{color:#000;background-color:#ebb524}.toolbar-ios-primary .bar-button-clear-ios-royal,.toolbar-ios-primary .bar-button-default.bar-button-ios-royal,.toolbar-ios-primary .bar-button-royal-ios{color:#7e60ff;background-color:transparent}.toolbar-ios-primary .bar-button-clear-ios-royal:hover:not(.disable-hover),.toolbar-ios-primary .bar-button-default.bar-button-ios-royal:hover:not(.disable-hover),.toolbar-ios-primary .bar-button-royal-ios:hover:not(.disable-hover){color:#7e60ff}.toolbar-ios-primary .bar-button-clear-ios-royal.activated,.toolbar-ios-primary .bar-button-default.bar-button-ios-royal.activated,.toolbar-ios-primary .bar-button-royal-ios.activated{opacity:.4}.toolbar-ios-primary .bar-button-outline-ios-royal{border-color:#7e60ff;color:#7e60ff;background-color:transparent}.toolbar-ios-primary .bar-button-outline-ios-royal.activated{color:#fff;background-color:#7e60ff}.toolbar-ios-primary .bar-button-solid-ios-royal{color:#fff;background-color:#7e60ff}.toolbar-ios-primary .bar-button-solid-ios-royal.activated{color:#fff;background-color:#7458eb}.toolbar-ios-primary .bar-button-clear-ios-subtle,.toolbar-ios-primary .bar-button-default.bar-button-ios-subtle,.toolbar-ios-primary .bar-button-subtle-ios{color:#444;background-color:transparent}.toolbar-ios-primary .bar-button-clear-ios-subtle:hover:not(.disable-hover),.toolbar-ios-primary .bar-button-default.bar-button-ios-subtle:hover:not(.disable-hover),.toolbar-ios-primary .bar-button-subtle-ios:hover:not(.disable-hover){color:#444}.toolbar-ios-primary .bar-button-clear-ios-subtle.activated,.toolbar-ios-primary .bar-button-default.bar-button-ios-subtle.activated,.toolbar-ios-primary .bar-button-subtle-ios.activated{opacity:.4}.toolbar-ios-primary .bar-button-outline-ios-subtle{border-color:#444;color:#444;background-color:transparent}.toolbar-ios-primary .bar-button-outline-ios-subtle.activated{color:#fff;background-color:#444}.toolbar-ios-primary .bar-button-solid-ios-subtle{color:#fff;background-color:#444}.toolbar-ios-primary .bar-button-solid-ios-subtle.activated{color:#fff;background-color:#535353}.toolbar-ios-primary .bar-button-clear-ios-vibrant,.toolbar-ios-primary .bar-button-default.bar-button-ios-vibrant,.toolbar-ios-primary .bar-button-vibrant-ios{color:#663399;background-color:transparent}.toolbar-ios-primary .bar-button-clear-ios-vibrant:hover:not(.disable-hover),.toolbar-ios-primary .bar-button-default.bar-button-ios-vibrant:hover:not(.disable-hover),.toolbar-ios-primary .bar-button-vibrant-ios:hover:not(.disable-hover){color:#663399}.toolbar-ios-primary .bar-button-clear-ios-vibrant.activated,.toolbar-ios-primary .bar-button-default.bar-button-ios-vibrant.activated,.toolbar-ios-primary .bar-button-vibrant-ios.activated{opacity:.4}.toolbar-ios-primary .bar-button-outline-ios-vibrant{border-color:#663399;color:#663399;background-color:transparent}.toolbar-ios-primary .bar-button-outline-ios-vibrant.activated{color:#fff;background-color:#663399}.toolbar-ios-primary .bar-button-solid-ios-vibrant{color:#fff;background-color:#663399}.toolbar-ios-primary .bar-button-solid-ios-vibrant.activated{color:#fff;background-color:#7243a1}.toolbar-ios-primary .bar-button-bright-ios,.toolbar-ios-primary .bar-button-clear-ios-bright,.toolbar-ios-primary .bar-button-default.bar-button-ios-bright{color:#ffc125;background-color:transparent}.toolbar-ios-primary .bar-button-bright-ios:hover:not(.disable-hover),.toolbar-ios-primary .bar-button-clear-ios-bright:hover:not(.disable-hover),.toolbar-ios-primary .bar-button-default.bar-button-ios-bright:hover:not(.disable-hover){color:#ffc125}.toolbar-ios-primary .bar-button-bright-ios.activated,.toolbar-ios-primary .bar-button-clear-ios-bright.activated,.toolbar-ios-primary .bar-button-default.bar-button-ios-bright.activated{opacity:.4}.toolbar-ios-primary .bar-button-outline-ios-bright{border-color:#ffc125;color:#ffc125;background-color:transparent}.toolbar-ios-primary .bar-button-outline-ios-bright.activated{color:#000;background-color:#ffc125}.toolbar-ios-primary .bar-button-solid-ios-bright{color:#000;background-color:#ffc125}.toolbar-ios-primary .bar-button-solid-ios-bright.activated{color:#000;background-color:#ebb222}.bar-button-clear-ios-primary,.bar-button-default.bar-button-ios-primary,.bar-button-primary-ios{color:#488aff;background-color:transparent}.bar-button-clear-ios-primary:hover:not(.disable-hover),.bar-button-default.bar-button-ios-primary:hover:not(.disable-hover),.bar-button-primary-ios:hover:not(.disable-hover){color:#488aff}.bar-button-clear-ios-primary.activated,.bar-button-default.bar-button-ios-primary.activated,.bar-button-primary-ios.activated{opacity:.4}.bar-button-outline-ios-primary{border-color:#488aff;color:#488aff;background-color:transparent}.bar-button-outline-ios-primary.activated{color:#fff;background-color:#488aff}.bar-button-solid-ios-primary{color:#fff;background-color:#488aff}.bar-button-solid-ios-primary.activated{color:#fff;background-color:#427feb}.toolbar-ios-secondary .toolbar-background-ios{background:#32db64}.toolbar-ios-secondary .bar-button-clear-ios,.toolbar-ios-secondary .bar-button-default-ios,.toolbar-ios-secondary .toolbar-title-ios{color:#fff}.toolbar-ios-secondary .bar-button-clear-ios-primary,.toolbar-ios-secondary .bar-button-default.bar-button-ios-primary,.toolbar-ios-secondary .bar-button-primary-ios{color:#488aff;background-color:transparent}.toolbar-ios-secondary .bar-button-clear-ios-primary:hover:not(.disable-hover),.toolbar-ios-secondary .bar-button-default.bar-button-ios-primary:hover:not(.disable-hover),.toolbar-ios-secondary .bar-button-primary-ios:hover:not(.disable-hover){color:#488aff}.toolbar-ios-secondary .bar-button-clear-ios-primary.activated,.toolbar-ios-secondary .bar-button-default.bar-button-ios-primary.activated,.toolbar-ios-secondary .bar-button-primary-ios.activated{opacity:.4}.toolbar-ios-secondary .bar-button-outline-ios-primary{border-color:#488aff;color:#488aff;background-color:transparent}.toolbar-ios-secondary .bar-button-outline-ios-primary.activated{color:#fff;background-color:#488aff}.toolbar-ios-secondary .bar-button-solid-ios-primary{color:#fff;background-color:#488aff}.toolbar-ios-secondary .bar-button-solid-ios-primary.activated{color:#fff;background-color:#427feb}.toolbar-ios-secondary .bar-button-clear-ios-secondary,.toolbar-ios-secondary .bar-button-default.bar-button-ios-secondary,.toolbar-ios-secondary .bar-button-secondary-ios{color:#32db64;background-color:transparent}.toolbar-ios-secondary .bar-button-clear-ios-secondary:hover:not(.disable-hover),.toolbar-ios-secondary .bar-button-default.bar-button-ios-secondary:hover:not(.disable-hover),.toolbar-ios-secondary .bar-button-secondary-ios:hover:not(.disable-hover){color:#32db64}.toolbar-ios-secondary .bar-button-clear-ios-secondary.activated,.toolbar-ios-secondary .bar-button-default.bar-button-ios-secondary.activated,.toolbar-ios-secondary .bar-button-secondary-ios.activated{opacity:.4}.toolbar-ios-secondary .bar-button-outline-ios-secondary{border-color:#32db64;color:#32db64;background-color:transparent}.toolbar-ios-secondary .bar-button-outline-ios-secondary.activated{color:#fff;background-color:#32db64}.toolbar-ios-secondary .bar-button-solid-ios-secondary{color:#fff;background-color:#32db64}.toolbar-ios-secondary .bar-button-solid-ios-secondary.activated{color:#fff;background-color:#2ec95c}.toolbar-ios-secondary .bar-button-clear-ios-danger,.toolbar-ios-secondary .bar-button-danger-ios,.toolbar-ios-secondary .bar-button-default.bar-button-ios-danger{color:#f53d3d;background-color:transparent}.toolbar-ios-secondary .bar-button-clear-ios-danger:hover:not(.disable-hover),.toolbar-ios-secondary .bar-button-danger-ios:hover:not(.disable-hover),.toolbar-ios-secondary .bar-button-default.bar-button-ios-danger:hover:not(.disable-hover){color:#f53d3d}.toolbar-ios-secondary .bar-button-clear-ios-danger.activated,.toolbar-ios-secondary .bar-button-danger-ios.activated,.toolbar-ios-secondary .bar-button-default.bar-button-ios-danger.activated{opacity:.4}.toolbar-ios-secondary .bar-button-outline-ios-danger{border-color:#f53d3d;color:#f53d3d;background-color:transparent}.toolbar-ios-secondary .bar-button-outline-ios-danger.activated{color:#fff;background-color:#f53d3d}.toolbar-ios-secondary .bar-button-solid-ios-danger{color:#fff;background-color:#f53d3d}.toolbar-ios-secondary .bar-button-solid-ios-danger.activated{color:#fff;background-color:#e13838}.toolbar-ios-secondary .bar-button-clear-ios-light,.toolbar-ios-secondary .bar-button-default.bar-button-ios-light,.toolbar-ios-secondary .bar-button-light-ios{color:#f4f4f4;background-color:transparent}.toolbar-ios-secondary .bar-button-clear-ios-light:hover:not(.disable-hover),.toolbar-ios-secondary .bar-button-default.bar-button-ios-light:hover:not(.disable-hover),.toolbar-ios-secondary .bar-button-light-ios:hover:not(.disable-hover){color:#f4f4f4}.toolbar-ios-secondary .bar-button-clear-ios-light.activated,.toolbar-ios-secondary .bar-button-default.bar-button-ios-light.activated,.toolbar-ios-secondary .bar-button-light-ios.activated{opacity:.4}.toolbar-ios-secondary .bar-button-outline-ios-light{border-color:#f4f4f4;color:#f4f4f4;background-color:transparent}.toolbar-ios-secondary .bar-button-outline-ios-light.activated{color:#000;background-color:#f4f4f4}.toolbar-ios-secondary .bar-button-solid-ios-light{color:#000;background-color:#f4f4f4}.toolbar-ios-secondary .bar-button-solid-ios-light.activated{color:#000;background-color:#e0e0e0}.toolbar-ios-secondary .bar-button-clear-ios-dark,.toolbar-ios-secondary .bar-button-dark-ios,.toolbar-ios-secondary .bar-button-default.bar-button-ios-dark{color:#222;background-color:transparent}.toolbar-ios-secondary .bar-button-clear-ios-dark:hover:not(.disable-hover),.toolbar-ios-secondary .bar-button-dark-ios:hover:not(.disable-hover),.toolbar-ios-secondary .bar-button-default.bar-button-ios-dark:hover:not(.disable-hover){color:#222}.toolbar-ios-secondary .bar-button-clear-ios-dark.activated,.toolbar-ios-secondary .bar-button-dark-ios.activated,.toolbar-ios-secondary .bar-button-default.bar-button-ios-dark.activated{opacity:.4}.toolbar-ios-secondary .bar-button-outline-ios-dark{border-color:#222;color:#222;background-color:transparent}.toolbar-ios-secondary .bar-button-outline-ios-dark.activated{color:#fff;background-color:#222}.toolbar-ios-secondary .bar-button-solid-ios-dark{color:#fff;background-color:#222}.toolbar-ios-secondary .bar-button-solid-ios-dark.activated{color:#fff;background-color:#343434}.toolbar-ios-secondary .bar-button-clear-ios-energized,.toolbar-ios-secondary .bar-button-default.bar-button-ios-energized,.toolbar-ios-secondary .bar-button-energized-ios{color:#ffc527;background-color:transparent}.toolbar-ios-secondary .bar-button-clear-ios-energized:hover:not(.disable-hover),.toolbar-ios-secondary .bar-button-default.bar-button-ios-energized:hover:not(.disable-hover),.toolbar-ios-secondary .bar-button-energized-ios:hover:not(.disable-hover){color:#ffc527}.toolbar-ios-secondary .bar-button-clear-ios-energized.activated,.toolbar-ios-secondary .bar-button-default.bar-button-ios-energized.activated,.toolbar-ios-secondary .bar-button-energized-ios.activated{opacity:.4}.toolbar-ios-secondary .bar-button-outline-ios-energized{border-color:#ffc527;color:#ffc527;background-color:transparent}.toolbar-ios-secondary .bar-button-outline-ios-energized.activated{color:#000;background-color:#ffc527}.toolbar-ios-secondary .bar-button-solid-ios-energized{color:#000;background-color:#ffc527}.toolbar-ios-secondary .bar-button-solid-ios-energized.activated{color:#000;background-color:#ebb524}.toolbar-ios-secondary .bar-button-clear-ios-royal,.toolbar-ios-secondary .bar-button-default.bar-button-ios-royal,.toolbar-ios-secondary .bar-button-royal-ios{color:#7e60ff;background-color:transparent}.toolbar-ios-secondary .bar-button-clear-ios-royal:hover:not(.disable-hover),.toolbar-ios-secondary .bar-button-default.bar-button-ios-royal:hover:not(.disable-hover),.toolbar-ios-secondary .bar-button-royal-ios:hover:not(.disable-hover){color:#7e60ff}.toolbar-ios-secondary .bar-button-clear-ios-royal.activated,.toolbar-ios-secondary .bar-button-default.bar-button-ios-royal.activated,.toolbar-ios-secondary .bar-button-royal-ios.activated{opacity:.4}.toolbar-ios-secondary .bar-button-outline-ios-royal{border-color:#7e60ff;color:#7e60ff;background-color:transparent}.toolbar-ios-secondary .bar-button-outline-ios-royal.activated{color:#fff;background-color:#7e60ff}.toolbar-ios-secondary .bar-button-solid-ios-royal{color:#fff;background-color:#7e60ff}.toolbar-ios-secondary .bar-button-solid-ios-royal.activated{color:#fff;background-color:#7458eb}.toolbar-ios-secondary .bar-button-clear-ios-subtle,.toolbar-ios-secondary .bar-button-default.bar-button-ios-subtle,.toolbar-ios-secondary .bar-button-subtle-ios{color:#444;background-color:transparent}.toolbar-ios-secondary .bar-button-clear-ios-subtle:hover:not(.disable-hover),.toolbar-ios-secondary .bar-button-default.bar-button-ios-subtle:hover:not(.disable-hover),.toolbar-ios-secondary .bar-button-subtle-ios:hover:not(.disable-hover){color:#444}.toolbar-ios-secondary .bar-button-clear-ios-subtle.activated,.toolbar-ios-secondary .bar-button-default.bar-button-ios-subtle.activated,.toolbar-ios-secondary .bar-button-subtle-ios.activated{opacity:.4}.toolbar-ios-secondary .bar-button-outline-ios-subtle{border-color:#444;color:#444;background-color:transparent}.toolbar-ios-secondary .bar-button-outline-ios-subtle.activated{color:#fff;background-color:#444}.toolbar-ios-secondary .bar-button-solid-ios-subtle{color:#fff;background-color:#444}.toolbar-ios-secondary .bar-button-solid-ios-subtle.activated{color:#fff;background-color:#535353}.toolbar-ios-secondary .bar-button-clear-ios-vibrant,.toolbar-ios-secondary .bar-button-default.bar-button-ios-vibrant,.toolbar-ios-secondary .bar-button-vibrant-ios{color:#663399;background-color:transparent}.toolbar-ios-secondary .bar-button-clear-ios-vibrant:hover:not(.disable-hover),.toolbar-ios-secondary .bar-button-default.bar-button-ios-vibrant:hover:not(.disable-hover),.toolbar-ios-secondary .bar-button-vibrant-ios:hover:not(.disable-hover){color:#663399}.toolbar-ios-secondary .bar-button-clear-ios-vibrant.activated,.toolbar-ios-secondary .bar-button-default.bar-button-ios-vibrant.activated,.toolbar-ios-secondary .bar-button-vibrant-ios.activated{opacity:.4}.toolbar-ios-secondary .bar-button-outline-ios-vibrant{border-color:#663399;color:#663399;background-color:transparent}.toolbar-ios-secondary .bar-button-outline-ios-vibrant.activated{color:#fff;background-color:#663399}.toolbar-ios-secondary .bar-button-solid-ios-vibrant{color:#fff;background-color:#663399}.toolbar-ios-secondary .bar-button-solid-ios-vibrant.activated{color:#fff;background-color:#7243a1}.toolbar-ios-secondary .bar-button-bright-ios,.toolbar-ios-secondary .bar-button-clear-ios-bright,.toolbar-ios-secondary .bar-button-default.bar-button-ios-bright{color:#ffc125;background-color:transparent}.toolbar-ios-secondary .bar-button-bright-ios:hover:not(.disable-hover),.toolbar-ios-secondary .bar-button-clear-ios-bright:hover:not(.disable-hover),.toolbar-ios-secondary .bar-button-default.bar-button-ios-bright:hover:not(.disable-hover){color:#ffc125}.toolbar-ios-secondary .bar-button-bright-ios.activated,.toolbar-ios-secondary .bar-button-clear-ios-bright.activated,.toolbar-ios-secondary .bar-button-default.bar-button-ios-bright.activated{opacity:.4}.toolbar-ios-secondary .bar-button-outline-ios-bright{border-color:#ffc125;color:#ffc125;background-color:transparent}.toolbar-ios-secondary .bar-button-outline-ios-bright.activated{color:#000;background-color:#ffc125}.toolbar-ios-secondary .bar-button-solid-ios-bright{color:#000;background-color:#ffc125}.toolbar-ios-secondary .bar-button-solid-ios-bright.activated{color:#000;background-color:#ebb222}.bar-button-clear-ios-secondary,.bar-button-default.bar-button-ios-secondary,.bar-button-secondary-ios{color:#32db64;background-color:transparent}.bar-button-clear-ios-secondary:hover:not(.disable-hover),.bar-button-default.bar-button-ios-secondary:hover:not(.disable-hover),.bar-button-secondary-ios:hover:not(.disable-hover){color:#32db64}.bar-button-clear-ios-secondary.activated,.bar-button-default.bar-button-ios-secondary.activated,.bar-button-secondary-ios.activated{opacity:.4}.bar-button-outline-ios-secondary{border-color:#32db64;color:#32db64;background-color:transparent}.bar-button-outline-ios-secondary.activated{color:#fff;background-color:#32db64}.bar-button-solid-ios-secondary{color:#fff;background-color:#32db64}.bar-button-solid-ios-secondary.activated{color:#fff;background-color:#2ec95c}.toolbar-ios-danger .toolbar-background-ios{background:#f53d3d}.toolbar-ios-danger .bar-button-clear-ios,.toolbar-ios-danger .bar-button-default-ios,.toolbar-ios-danger .toolbar-title-ios{color:#fff}.toolbar-ios-danger .bar-button-clear-ios-primary,.toolbar-ios-danger .bar-button-default.bar-button-ios-primary,.toolbar-ios-danger .bar-button-primary-ios{color:#488aff;background-color:transparent}.toolbar-ios-danger .bar-button-clear-ios-primary:hover:not(.disable-hover),.toolbar-ios-danger .bar-button-default.bar-button-ios-primary:hover:not(.disable-hover),.toolbar-ios-danger .bar-button-primary-ios:hover:not(.disable-hover){color:#488aff}.toolbar-ios-danger .bar-button-clear-ios-primary.activated,.toolbar-ios-danger .bar-button-default.bar-button-ios-primary.activated,.toolbar-ios-danger .bar-button-primary-ios.activated{opacity:.4}.toolbar-ios-danger .bar-button-outline-ios-primary{border-color:#488aff;color:#488aff;background-color:transparent}.toolbar-ios-danger .bar-button-outline-ios-primary.activated{color:#fff;background-color:#488aff}.toolbar-ios-danger .bar-button-solid-ios-primary{color:#fff;background-color:#488aff}.toolbar-ios-danger .bar-button-solid-ios-primary.activated{color:#fff;background-color:#427feb}.toolbar-ios-danger .bar-button-clear-ios-secondary,.toolbar-ios-danger .bar-button-default.bar-button-ios-secondary,.toolbar-ios-danger .bar-button-secondary-ios{color:#32db64;background-color:transparent}.toolbar-ios-danger .bar-button-clear-ios-secondary:hover:not(.disable-hover),.toolbar-ios-danger .bar-button-default.bar-button-ios-secondary:hover:not(.disable-hover),.toolbar-ios-danger .bar-button-secondary-ios:hover:not(.disable-hover){color:#32db64}.toolbar-ios-danger .bar-button-clear-ios-secondary.activated,.toolbar-ios-danger .bar-button-default.bar-button-ios-secondary.activated,.toolbar-ios-danger .bar-button-secondary-ios.activated{opacity:.4}.toolbar-ios-danger .bar-button-outline-ios-secondary{border-color:#32db64;color:#32db64;background-color:transparent}.toolbar-ios-danger .bar-button-outline-ios-secondary.activated{color:#fff;background-color:#32db64}.toolbar-ios-danger .bar-button-solid-ios-secondary{color:#fff;background-color:#32db64}.toolbar-ios-danger .bar-button-solid-ios-secondary.activated{color:#fff;background-color:#2ec95c}.toolbar-ios-danger .bar-button-clear-ios-danger,.toolbar-ios-danger .bar-button-danger-ios,.toolbar-ios-danger .bar-button-default.bar-button-ios-danger{color:#f53d3d;background-color:transparent}.toolbar-ios-danger .bar-button-clear-ios-danger:hover:not(.disable-hover),.toolbar-ios-danger .bar-button-danger-ios:hover:not(.disable-hover),.toolbar-ios-danger .bar-button-default.bar-button-ios-danger:hover:not(.disable-hover){color:#f53d3d}.toolbar-ios-danger .bar-button-clear-ios-danger.activated,.toolbar-ios-danger .bar-button-danger-ios.activated,.toolbar-ios-danger .bar-button-default.bar-button-ios-danger.activated{opacity:.4}.toolbar-ios-danger .bar-button-outline-ios-danger{border-color:#f53d3d;color:#f53d3d;background-color:transparent}.toolbar-ios-danger .bar-button-outline-ios-danger.activated{color:#fff;background-color:#f53d3d}.toolbar-ios-danger .bar-button-solid-ios-danger{color:#fff;background-color:#f53d3d}.toolbar-ios-danger .bar-button-solid-ios-danger.activated{color:#fff;background-color:#e13838}.toolbar-ios-danger .bar-button-clear-ios-light,.toolbar-ios-danger .bar-button-default.bar-button-ios-light,.toolbar-ios-danger .bar-button-light-ios{color:#f4f4f4;background-color:transparent}.toolbar-ios-danger .bar-button-clear-ios-light:hover:not(.disable-hover),.toolbar-ios-danger .bar-button-default.bar-button-ios-light:hover:not(.disable-hover),.toolbar-ios-danger .bar-button-light-ios:hover:not(.disable-hover){color:#f4f4f4}.toolbar-ios-danger .bar-button-clear-ios-light.activated,.toolbar-ios-danger .bar-button-default.bar-button-ios-light.activated,.toolbar-ios-danger .bar-button-light-ios.activated{opacity:.4}.toolbar-ios-danger .bar-button-outline-ios-light{border-color:#f4f4f4;color:#f4f4f4;background-color:transparent}.toolbar-ios-danger .bar-button-outline-ios-light.activated{color:#000;background-color:#f4f4f4}.toolbar-ios-danger .bar-button-solid-ios-light{color:#000;background-color:#f4f4f4}.toolbar-ios-danger .bar-button-solid-ios-light.activated{color:#000;background-color:#e0e0e0}.toolbar-ios-danger .bar-button-clear-ios-dark,.toolbar-ios-danger .bar-button-dark-ios,.toolbar-ios-danger .bar-button-default.bar-button-ios-dark{color:#222;background-color:transparent}.toolbar-ios-danger .bar-button-clear-ios-dark:hover:not(.disable-hover),.toolbar-ios-danger .bar-button-dark-ios:hover:not(.disable-hover),.toolbar-ios-danger .bar-button-default.bar-button-ios-dark:hover:not(.disable-hover){color:#222}.toolbar-ios-danger .bar-button-clear-ios-dark.activated,.toolbar-ios-danger .bar-button-dark-ios.activated,.toolbar-ios-danger .bar-button-default.bar-button-ios-dark.activated{opacity:.4}.toolbar-ios-danger .bar-button-outline-ios-dark{border-color:#222;color:#222;background-color:transparent}.toolbar-ios-danger .bar-button-outline-ios-dark.activated{color:#fff;background-color:#222}.toolbar-ios-danger .bar-button-solid-ios-dark{color:#fff;background-color:#222}.toolbar-ios-danger .bar-button-solid-ios-dark.activated{color:#fff;background-color:#343434}.toolbar-ios-danger .bar-button-clear-ios-energized,.toolbar-ios-danger .bar-button-default.bar-button-ios-energized,.toolbar-ios-danger .bar-button-energized-ios{color:#ffc527;background-color:transparent}.toolbar-ios-danger .bar-button-clear-ios-energized:hover:not(.disable-hover),.toolbar-ios-danger .bar-button-default.bar-button-ios-energized:hover:not(.disable-hover),.toolbar-ios-danger .bar-button-energized-ios:hover:not(.disable-hover){color:#ffc527}.toolbar-ios-danger .bar-button-clear-ios-energized.activated,.toolbar-ios-danger .bar-button-default.bar-button-ios-energized.activated,.toolbar-ios-danger .bar-button-energized-ios.activated{opacity:.4}.toolbar-ios-danger .bar-button-outline-ios-energized{border-color:#ffc527;color:#ffc527;background-color:transparent}.toolbar-ios-danger .bar-button-outline-ios-energized.activated{color:#000;background-color:#ffc527}.toolbar-ios-danger .bar-button-solid-ios-energized{color:#000;background-color:#ffc527}.toolbar-ios-danger .bar-button-solid-ios-energized.activated{color:#000;background-color:#ebb524}.toolbar-ios-danger .bar-button-clear-ios-royal,.toolbar-ios-danger .bar-button-default.bar-button-ios-royal,.toolbar-ios-danger .bar-button-royal-ios{color:#7e60ff;background-color:transparent}.toolbar-ios-danger .bar-button-clear-ios-royal:hover:not(.disable-hover),.toolbar-ios-danger .bar-button-default.bar-button-ios-royal:hover:not(.disable-hover),.toolbar-ios-danger .bar-button-royal-ios:hover:not(.disable-hover){color:#7e60ff}.toolbar-ios-danger .bar-button-clear-ios-royal.activated,.toolbar-ios-danger .bar-button-default.bar-button-ios-royal.activated,.toolbar-ios-danger .bar-button-royal-ios.activated{opacity:.4}.toolbar-ios-danger .bar-button-outline-ios-royal{border-color:#7e60ff;color:#7e60ff;background-color:transparent}.toolbar-ios-danger .bar-button-outline-ios-royal.activated{color:#fff;background-color:#7e60ff}.toolbar-ios-danger .bar-button-solid-ios-royal{color:#fff;background-color:#7e60ff}.toolbar-ios-danger .bar-button-solid-ios-royal.activated{color:#fff;background-color:#7458eb}.toolbar-ios-danger .bar-button-clear-ios-subtle,.toolbar-ios-danger .bar-button-default.bar-button-ios-subtle,.toolbar-ios-danger .bar-button-subtle-ios{color:#444;background-color:transparent}.toolbar-ios-danger .bar-button-clear-ios-subtle:hover:not(.disable-hover),.toolbar-ios-danger .bar-button-default.bar-button-ios-subtle:hover:not(.disable-hover),.toolbar-ios-danger .bar-button-subtle-ios:hover:not(.disable-hover){color:#444}.toolbar-ios-danger .bar-button-clear-ios-subtle.activated,.toolbar-ios-danger .bar-button-default.bar-button-ios-subtle.activated,.toolbar-ios-danger .bar-button-subtle-ios.activated{opacity:.4}.toolbar-ios-danger .bar-button-outline-ios-subtle{border-color:#444;color:#444;background-color:transparent}.toolbar-ios-danger .bar-button-outline-ios-subtle.activated{color:#fff;background-color:#444}.toolbar-ios-danger .bar-button-solid-ios-subtle{color:#fff;background-color:#444}.toolbar-ios-danger .bar-button-solid-ios-subtle.activated{color:#fff;background-color:#535353}.toolbar-ios-danger .bar-button-clear-ios-vibrant,.toolbar-ios-danger .bar-button-default.bar-button-ios-vibrant,.toolbar-ios-danger .bar-button-vibrant-ios{color:#663399;background-color:transparent}.toolbar-ios-danger .bar-button-clear-ios-vibrant:hover:not(.disable-hover),.toolbar-ios-danger .bar-button-default.bar-button-ios-vibrant:hover:not(.disable-hover),.toolbar-ios-danger .bar-button-vibrant-ios:hover:not(.disable-hover){color:#663399}.toolbar-ios-danger .bar-button-clear-ios-vibrant.activated,.toolbar-ios-danger .bar-button-default.bar-button-ios-vibrant.activated,.toolbar-ios-danger .bar-button-vibrant-ios.activated{opacity:.4}.toolbar-ios-danger .bar-button-outline-ios-vibrant{border-color:#663399;color:#663399;background-color:transparent}.toolbar-ios-danger .bar-button-outline-ios-vibrant.activated{color:#fff;background-color:#663399}.toolbar-ios-danger .bar-button-solid-ios-vibrant{color:#fff;background-color:#663399}.toolbar-ios-danger .bar-button-solid-ios-vibrant.activated{color:#fff;background-color:#7243a1}.toolbar-ios-danger .bar-button-bright-ios,.toolbar-ios-danger .bar-button-clear-ios-bright,.toolbar-ios-danger .bar-button-default.bar-button-ios-bright{color:#ffc125;background-color:transparent}.toolbar-ios-danger .bar-button-bright-ios:hover:not(.disable-hover),.toolbar-ios-danger .bar-button-clear-ios-bright:hover:not(.disable-hover),.toolbar-ios-danger .bar-button-default.bar-button-ios-bright:hover:not(.disable-hover){color:#ffc125}.toolbar-ios-danger .bar-button-bright-ios.activated,.toolbar-ios-danger .bar-button-clear-ios-bright.activated,.toolbar-ios-danger .bar-button-default.bar-button-ios-bright.activated{opacity:.4}.toolbar-ios-danger .bar-button-outline-ios-bright{border-color:#ffc125;color:#ffc125;background-color:transparent}.toolbar-ios-danger .bar-button-outline-ios-bright.activated{color:#000;background-color:#ffc125}.toolbar-ios-danger .bar-button-solid-ios-bright{color:#000;background-color:#ffc125}.toolbar-ios-danger .bar-button-solid-ios-bright.activated{color:#000;background-color:#ebb222}.bar-button-clear-ios-danger,.bar-button-danger-ios,.bar-button-default.bar-button-ios-danger{color:#f53d3d;background-color:transparent}.bar-button-clear-ios-danger:hover:not(.disable-hover),.bar-button-danger-ios:hover:not(.disable-hover),.bar-button-default.bar-button-ios-danger:hover:not(.disable-hover){color:#f53d3d}.bar-button-clear-ios-danger.activated,.bar-button-danger-ios.activated,.bar-button-default.bar-button-ios-danger.activated{opacity:.4}.bar-button-outline-ios-danger{border-color:#f53d3d;color:#f53d3d;background-color:transparent}.bar-button-outline-ios-danger.activated{color:#fff;background-color:#f53d3d}.bar-button-solid-ios-danger{color:#fff;background-color:#f53d3d}.bar-button-solid-ios-danger.activated{color:#fff;background-color:#e13838}.toolbar-ios-light .toolbar-background-ios{background:#f4f4f4}.toolbar-ios-light .bar-button-clear-ios,.toolbar-ios-light .bar-button-default-ios,.toolbar-ios-light .toolbar-title-ios{color:#000}.toolbar-ios-light .bar-button-clear-ios-primary,.toolbar-ios-light .bar-button-default.bar-button-ios-primary,.toolbar-ios-light .bar-button-primary-ios{color:#488aff;background-color:transparent}.toolbar-ios-light .bar-button-clear-ios-primary:hover:not(.disable-hover),.toolbar-ios-light .bar-button-default.bar-button-ios-primary:hover:not(.disable-hover),.toolbar-ios-light .bar-button-primary-ios:hover:not(.disable-hover){color:#488aff}.toolbar-ios-light .bar-button-clear-ios-primary.activated,.toolbar-ios-light .bar-button-default.bar-button-ios-primary.activated,.toolbar-ios-light .bar-button-primary-ios.activated{opacity:.4}.toolbar-ios-light .bar-button-outline-ios-primary{border-color:#488aff;color:#488aff;background-color:transparent}.toolbar-ios-light .bar-button-outline-ios-primary.activated{color:#fff;background-color:#488aff}.toolbar-ios-light .bar-button-solid-ios-primary{color:#fff;background-color:#488aff}.toolbar-ios-light .bar-button-solid-ios-primary.activated{color:#fff;background-color:#427feb}.toolbar-ios-light .bar-button-clear-ios-secondary,.toolbar-ios-light .bar-button-default.bar-button-ios-secondary,.toolbar-ios-light .bar-button-secondary-ios{color:#32db64;background-color:transparent}.toolbar-ios-light .bar-button-clear-ios-secondary:hover:not(.disable-hover),.toolbar-ios-light .bar-button-default.bar-button-ios-secondary:hover:not(.disable-hover),.toolbar-ios-light .bar-button-secondary-ios:hover:not(.disable-hover){color:#32db64}.toolbar-ios-light .bar-button-clear-ios-secondary.activated,.toolbar-ios-light .bar-button-default.bar-button-ios-secondary.activated,.toolbar-ios-light .bar-button-secondary-ios.activated{opacity:.4}.toolbar-ios-light .bar-button-outline-ios-secondary{border-color:#32db64;color:#32db64;background-color:transparent}.toolbar-ios-light .bar-button-outline-ios-secondary.activated{color:#fff;background-color:#32db64}.toolbar-ios-light .bar-button-solid-ios-secondary{color:#fff;background-color:#32db64}.toolbar-ios-light .bar-button-solid-ios-secondary.activated{color:#fff;background-color:#2ec95c}.toolbar-ios-light .bar-button-clear-ios-danger,.toolbar-ios-light .bar-button-danger-ios,.toolbar-ios-light .bar-button-default.bar-button-ios-danger{color:#f53d3d;background-color:transparent}.toolbar-ios-light .bar-button-clear-ios-danger:hover:not(.disable-hover),.toolbar-ios-light .bar-button-danger-ios:hover:not(.disable-hover),.toolbar-ios-light .bar-button-default.bar-button-ios-danger:hover:not(.disable-hover){color:#f53d3d}.toolbar-ios-light .bar-button-clear-ios-danger.activated,.toolbar-ios-light .bar-button-danger-ios.activated,.toolbar-ios-light .bar-button-default.bar-button-ios-danger.activated{opacity:.4}.toolbar-ios-light .bar-button-outline-ios-danger{border-color:#f53d3d;color:#f53d3d;background-color:transparent}.toolbar-ios-light .bar-button-outline-ios-danger.activated{color:#fff;background-color:#f53d3d}.toolbar-ios-light .bar-button-solid-ios-danger{color:#fff;background-color:#f53d3d}.toolbar-ios-light .bar-button-solid-ios-danger.activated{color:#fff;background-color:#e13838}.toolbar-ios-light .bar-button-clear-ios-light,.toolbar-ios-light .bar-button-default.bar-button-ios-light,.toolbar-ios-light .bar-button-light-ios{color:#f4f4f4;background-color:transparent}.toolbar-ios-light .bar-button-clear-ios-light:hover:not(.disable-hover),.toolbar-ios-light .bar-button-default.bar-button-ios-light:hover:not(.disable-hover),.toolbar-ios-light .bar-button-light-ios:hover:not(.disable-hover){color:#f4f4f4}.toolbar-ios-light .bar-button-clear-ios-light.activated,.toolbar-ios-light .bar-button-default.bar-button-ios-light.activated,.toolbar-ios-light .bar-button-light-ios.activated{opacity:.4}.toolbar-ios-light .bar-button-outline-ios-light{border-color:#f4f4f4;color:#f4f4f4;background-color:transparent}.toolbar-ios-light .bar-button-outline-ios-light.activated{color:#000;background-color:#f4f4f4}.toolbar-ios-light .bar-button-solid-ios-light{color:#000;background-color:#f4f4f4}.toolbar-ios-light .bar-button-solid-ios-light.activated{color:#000;background-color:#e0e0e0}.toolbar-ios-light .bar-button-clear-ios-dark,.toolbar-ios-light .bar-button-dark-ios,.toolbar-ios-light .bar-button-default.bar-button-ios-dark{color:#222;background-color:transparent}.toolbar-ios-light .bar-button-clear-ios-dark:hover:not(.disable-hover),.toolbar-ios-light .bar-button-dark-ios:hover:not(.disable-hover),.toolbar-ios-light .bar-button-default.bar-button-ios-dark:hover:not(.disable-hover){color:#222}.toolbar-ios-light .bar-button-clear-ios-dark.activated,.toolbar-ios-light .bar-button-dark-ios.activated,.toolbar-ios-light .bar-button-default.bar-button-ios-dark.activated{opacity:.4}.toolbar-ios-light .bar-button-outline-ios-dark{border-color:#222;color:#222;background-color:transparent}.toolbar-ios-light .bar-button-outline-ios-dark.activated{color:#fff;background-color:#222}.toolbar-ios-light .bar-button-solid-ios-dark{color:#fff;background-color:#222}.toolbar-ios-light .bar-button-solid-ios-dark.activated{color:#fff;background-color:#343434}.toolbar-ios-light .bar-button-clear-ios-energized,.toolbar-ios-light .bar-button-default.bar-button-ios-energized,.toolbar-ios-light .bar-button-energized-ios{color:#ffc527;background-color:transparent}.toolbar-ios-light .bar-button-clear-ios-energized:hover:not(.disable-hover),.toolbar-ios-light .bar-button-default.bar-button-ios-energized:hover:not(.disable-hover),.toolbar-ios-light .bar-button-energized-ios:hover:not(.disable-hover){color:#ffc527}.toolbar-ios-light .bar-button-clear-ios-energized.activated,.toolbar-ios-light .bar-button-default.bar-button-ios-energized.activated,.toolbar-ios-light .bar-button-energized-ios.activated{opacity:.4}.toolbar-ios-light .bar-button-outline-ios-energized{border-color:#ffc527;color:#ffc527;background-color:transparent}.toolbar-ios-light .bar-button-outline-ios-energized.activated{color:#000;background-color:#ffc527}.toolbar-ios-light .bar-button-solid-ios-energized{color:#000;background-color:#ffc527}.toolbar-ios-light .bar-button-solid-ios-energized.activated{color:#000;background-color:#ebb524}.toolbar-ios-light .bar-button-clear-ios-royal,.toolbar-ios-light .bar-button-default.bar-button-ios-royal,.toolbar-ios-light .bar-button-royal-ios{color:#7e60ff;background-color:transparent}.toolbar-ios-light .bar-button-clear-ios-royal:hover:not(.disable-hover),.toolbar-ios-light .bar-button-default.bar-button-ios-royal:hover:not(.disable-hover),.toolbar-ios-light .bar-button-royal-ios:hover:not(.disable-hover){color:#7e60ff}.toolbar-ios-light .bar-button-clear-ios-royal.activated,.toolbar-ios-light .bar-button-default.bar-button-ios-royal.activated,.toolbar-ios-light .bar-button-royal-ios.activated{opacity:.4}.toolbar-ios-light .bar-button-outline-ios-royal{border-color:#7e60ff;color:#7e60ff;background-color:transparent}.toolbar-ios-light .bar-button-outline-ios-royal.activated{color:#fff;background-color:#7e60ff}.toolbar-ios-light .bar-button-solid-ios-royal{color:#fff;background-color:#7e60ff}.toolbar-ios-light .bar-button-solid-ios-royal.activated{color:#fff;background-color:#7458eb}.toolbar-ios-light .bar-button-clear-ios-subtle,.toolbar-ios-light .bar-button-default.bar-button-ios-subtle,.toolbar-ios-light .bar-button-subtle-ios{color:#444;background-color:transparent}.toolbar-ios-light .bar-button-clear-ios-subtle:hover:not(.disable-hover),.toolbar-ios-light .bar-button-default.bar-button-ios-subtle:hover:not(.disable-hover),.toolbar-ios-light .bar-button-subtle-ios:hover:not(.disable-hover){color:#444}.toolbar-ios-light .bar-button-clear-ios-subtle.activated,.toolbar-ios-light .bar-button-default.bar-button-ios-subtle.activated,.toolbar-ios-light .bar-button-subtle-ios.activated{opacity:.4}.toolbar-ios-light .bar-button-outline-ios-subtle{border-color:#444;color:#444;background-color:transparent}.toolbar-ios-light .bar-button-outline-ios-subtle.activated{color:#fff;background-color:#444}.toolbar-ios-light .bar-button-solid-ios-subtle{color:#fff;background-color:#444}.toolbar-ios-light .bar-button-solid-ios-subtle.activated{color:#fff;background-color:#535353}.toolbar-ios-light .bar-button-clear-ios-vibrant,.toolbar-ios-light .bar-button-default.bar-button-ios-vibrant,.toolbar-ios-light .bar-button-vibrant-ios{color:#663399;background-color:transparent}.toolbar-ios-light .bar-button-clear-ios-vibrant:hover:not(.disable-hover),.toolbar-ios-light .bar-button-default.bar-button-ios-vibrant:hover:not(.disable-hover),.toolbar-ios-light .bar-button-vibrant-ios:hover:not(.disable-hover){color:#663399}.toolbar-ios-light .bar-button-clear-ios-vibrant.activated,.toolbar-ios-light .bar-button-default.bar-button-ios-vibrant.activated,.toolbar-ios-light .bar-button-vibrant-ios.activated{opacity:.4}.toolbar-ios-light .bar-button-outline-ios-vibrant{border-color:#663399;color:#663399;background-color:transparent}.toolbar-ios-light .bar-button-outline-ios-vibrant.activated{color:#fff;background-color:#663399}.toolbar-ios-light .bar-button-solid-ios-vibrant{color:#fff;background-color:#663399}.toolbar-ios-light .bar-button-solid-ios-vibrant.activated{color:#fff;background-color:#7243a1}.toolbar-ios-light .bar-button-bright-ios,.toolbar-ios-light .bar-button-clear-ios-bright,.toolbar-ios-light .bar-button-default.bar-button-ios-bright{color:#ffc125;background-color:transparent}.toolbar-ios-light .bar-button-bright-ios:hover:not(.disable-hover),.toolbar-ios-light .bar-button-clear-ios-bright:hover:not(.disable-hover),.toolbar-ios-light .bar-button-default.bar-button-ios-bright:hover:not(.disable-hover){color:#ffc125}.toolbar-ios-light .bar-button-bright-ios.activated,.toolbar-ios-light .bar-button-clear-ios-bright.activated,.toolbar-ios-light .bar-button-default.bar-button-ios-bright.activated{opacity:.4}.toolbar-ios-light .bar-button-outline-ios-bright{border-color:#ffc125;color:#ffc125;background-color:transparent}.toolbar-ios-light .bar-button-outline-ios-bright.activated{color:#000;background-color:#ffc125}.toolbar-ios-light .bar-button-solid-ios-bright{color:#000;background-color:#ffc125}.toolbar-ios-light .bar-button-solid-ios-bright.activated{color:#000;background-color:#ebb222}.bar-button-clear-ios-light,.bar-button-default.bar-button-ios-light,.bar-button-light-ios{color:#f4f4f4;background-color:transparent}.bar-button-clear-ios-light:hover:not(.disable-hover),.bar-button-default.bar-button-ios-light:hover:not(.disable-hover),.bar-button-light-ios:hover:not(.disable-hover){color:#f4f4f4}.bar-button-clear-ios-light.activated,.bar-button-default.bar-button-ios-light.activated,.bar-button-light-ios.activated{opacity:.4}.bar-button-outline-ios-light{border-color:#f4f4f4;color:#f4f4f4;background-color:transparent}.bar-button-outline-ios-light.activated{color:#000;background-color:#f4f4f4}.bar-button-solid-ios-light{color:#000;background-color:#f4f4f4}.bar-button-solid-ios-light.activated{color:#000;background-color:#e0e0e0}.toolbar-ios-dark .toolbar-background-ios{background:#222}.toolbar-ios-dark .bar-button-clear-ios,.toolbar-ios-dark .bar-button-default-ios,.toolbar-ios-dark .toolbar-title-ios{color:#fff}.toolbar-ios-dark .bar-button-clear-ios-primary,.toolbar-ios-dark .bar-button-default.bar-button-ios-primary,.toolbar-ios-dark .bar-button-primary-ios{color:#488aff;background-color:transparent}.toolbar-ios-dark .bar-button-clear-ios-primary:hover:not(.disable-hover),.toolbar-ios-dark .bar-button-default.bar-button-ios-primary:hover:not(.disable-hover),.toolbar-ios-dark .bar-button-primary-ios:hover:not(.disable-hover){color:#488aff}.toolbar-ios-dark .bar-button-clear-ios-primary.activated,.toolbar-ios-dark .bar-button-default.bar-button-ios-primary.activated,.toolbar-ios-dark .bar-button-primary-ios.activated{opacity:.4}.toolbar-ios-dark .bar-button-outline-ios-primary{border-color:#488aff;color:#488aff;background-color:transparent}.toolbar-ios-dark .bar-button-outline-ios-primary.activated{color:#fff;background-color:#488aff}.toolbar-ios-dark .bar-button-solid-ios-primary{color:#fff;background-color:#488aff}.toolbar-ios-dark .bar-button-solid-ios-primary.activated{color:#fff;background-color:#427feb}.toolbar-ios-dark .bar-button-clear-ios-secondary,.toolbar-ios-dark .bar-button-default.bar-button-ios-secondary,.toolbar-ios-dark .bar-button-secondary-ios{color:#32db64;background-color:transparent}.toolbar-ios-dark .bar-button-clear-ios-secondary:hover:not(.disable-hover),.toolbar-ios-dark .bar-button-default.bar-button-ios-secondary:hover:not(.disable-hover),.toolbar-ios-dark .bar-button-secondary-ios:hover:not(.disable-hover){color:#32db64}.toolbar-ios-dark .bar-button-clear-ios-secondary.activated,.toolbar-ios-dark .bar-button-default.bar-button-ios-secondary.activated,.toolbar-ios-dark .bar-button-secondary-ios.activated{opacity:.4}.toolbar-ios-dark .bar-button-outline-ios-secondary{border-color:#32db64;color:#32db64;background-color:transparent}.toolbar-ios-dark .bar-button-outline-ios-secondary.activated{color:#fff;background-color:#32db64}.toolbar-ios-dark .bar-button-solid-ios-secondary{color:#fff;background-color:#32db64}.toolbar-ios-dark .bar-button-solid-ios-secondary.activated{color:#fff;background-color:#2ec95c}.toolbar-ios-dark .bar-button-clear-ios-danger,.toolbar-ios-dark .bar-button-danger-ios,.toolbar-ios-dark .bar-button-default.bar-button-ios-danger{color:#f53d3d;background-color:transparent}.toolbar-ios-dark .bar-button-clear-ios-danger:hover:not(.disable-hover),.toolbar-ios-dark .bar-button-danger-ios:hover:not(.disable-hover),.toolbar-ios-dark .bar-button-default.bar-button-ios-danger:hover:not(.disable-hover){color:#f53d3d}.toolbar-ios-dark .bar-button-clear-ios-danger.activated,.toolbar-ios-dark .bar-button-danger-ios.activated,.toolbar-ios-dark .bar-button-default.bar-button-ios-danger.activated{opacity:.4}.toolbar-ios-dark .bar-button-outline-ios-danger{border-color:#f53d3d;color:#f53d3d;background-color:transparent}.toolbar-ios-dark .bar-button-outline-ios-danger.activated{color:#fff;background-color:#f53d3d}.toolbar-ios-dark .bar-button-solid-ios-danger{color:#fff;background-color:#f53d3d}.toolbar-ios-dark .bar-button-solid-ios-danger.activated{color:#fff;background-color:#e13838}.toolbar-ios-dark .bar-button-clear-ios-light,.toolbar-ios-dark .bar-button-default.bar-button-ios-light,.toolbar-ios-dark .bar-button-light-ios{color:#f4f4f4;background-color:transparent}.toolbar-ios-dark .bar-button-clear-ios-light:hover:not(.disable-hover),.toolbar-ios-dark .bar-button-default.bar-button-ios-light:hover:not(.disable-hover),.toolbar-ios-dark .bar-button-light-ios:hover:not(.disable-hover){color:#f4f4f4}.toolbar-ios-dark .bar-button-clear-ios-light.activated,.toolbar-ios-dark .bar-button-default.bar-button-ios-light.activated,.toolbar-ios-dark .bar-button-light-ios.activated{opacity:.4}.toolbar-ios-dark .bar-button-outline-ios-light{border-color:#f4f4f4;color:#f4f4f4;background-color:transparent}.toolbar-ios-dark .bar-button-outline-ios-light.activated{color:#000;background-color:#f4f4f4}.toolbar-ios-dark .bar-button-solid-ios-light{color:#000;background-color:#f4f4f4}.toolbar-ios-dark .bar-button-solid-ios-light.activated{color:#000;background-color:#e0e0e0}.toolbar-ios-dark .bar-button-clear-ios-dark,.toolbar-ios-dark .bar-button-dark-ios,.toolbar-ios-dark .bar-button-default.bar-button-ios-dark{color:#222;background-color:transparent}.toolbar-ios-dark .bar-button-clear-ios-dark:hover:not(.disable-hover),.toolbar-ios-dark .bar-button-dark-ios:hover:not(.disable-hover),.toolbar-ios-dark .bar-button-default.bar-button-ios-dark:hover:not(.disable-hover){color:#222}.toolbar-ios-dark .bar-button-clear-ios-dark.activated,.toolbar-ios-dark .bar-button-dark-ios.activated,.toolbar-ios-dark .bar-button-default.bar-button-ios-dark.activated{opacity:.4}.toolbar-ios-dark .bar-button-outline-ios-dark{border-color:#222;color:#222;background-color:transparent}.toolbar-ios-dark .bar-button-outline-ios-dark.activated{color:#fff;background-color:#222}.toolbar-ios-dark .bar-button-solid-ios-dark{color:#fff;background-color:#222}.toolbar-ios-dark .bar-button-solid-ios-dark.activated{color:#fff;background-color:#343434}.toolbar-ios-dark .bar-button-clear-ios-energized,.toolbar-ios-dark .bar-button-default.bar-button-ios-energized,.toolbar-ios-dark .bar-button-energized-ios{color:#ffc527;background-color:transparent}.toolbar-ios-dark .bar-button-clear-ios-energized:hover:not(.disable-hover),.toolbar-ios-dark .bar-button-default.bar-button-ios-energized:hover:not(.disable-hover),.toolbar-ios-dark .bar-button-energized-ios:hover:not(.disable-hover){color:#ffc527}.toolbar-ios-dark .bar-button-clear-ios-energized.activated,.toolbar-ios-dark .bar-button-default.bar-button-ios-energized.activated,.toolbar-ios-dark .bar-button-energized-ios.activated{opacity:.4}.toolbar-ios-dark .bar-button-outline-ios-energized{border-color:#ffc527;color:#ffc527;background-color:transparent}.toolbar-ios-dark .bar-button-outline-ios-energized.activated{color:#000;background-color:#ffc527}.toolbar-ios-dark .bar-button-solid-ios-energized{color:#000;background-color:#ffc527}.toolbar-ios-dark .bar-button-solid-ios-energized.activated{color:#000;background-color:#ebb524}.toolbar-ios-dark .bar-button-clear-ios-royal,.toolbar-ios-dark .bar-button-default.bar-button-ios-royal,.toolbar-ios-dark .bar-button-royal-ios{color:#7e60ff;background-color:transparent}.toolbar-ios-dark .bar-button-clear-ios-royal:hover:not(.disable-hover),.toolbar-ios-dark .bar-button-default.bar-button-ios-royal:hover:not(.disable-hover),.toolbar-ios-dark .bar-button-royal-ios:hover:not(.disable-hover){color:#7e60ff}.toolbar-ios-dark .bar-button-clear-ios-royal.activated,.toolbar-ios-dark .bar-button-default.bar-button-ios-royal.activated,.toolbar-ios-dark .bar-button-royal-ios.activated{opacity:.4}.toolbar-ios-dark .bar-button-outline-ios-royal{border-color:#7e60ff;color:#7e60ff;background-color:transparent}.toolbar-ios-dark .bar-button-outline-ios-royal.activated{color:#fff;background-color:#7e60ff}.toolbar-ios-dark .bar-button-solid-ios-royal{color:#fff;background-color:#7e60ff}.toolbar-ios-dark .bar-button-solid-ios-royal.activated{color:#fff;background-color:#7458eb}.toolbar-ios-dark .bar-button-clear-ios-subtle,.toolbar-ios-dark .bar-button-default.bar-button-ios-subtle,.toolbar-ios-dark .bar-button-subtle-ios{color:#444;background-color:transparent}.toolbar-ios-dark .bar-button-clear-ios-subtle:hover:not(.disable-hover),.toolbar-ios-dark .bar-button-default.bar-button-ios-subtle:hover:not(.disable-hover),.toolbar-ios-dark .bar-button-subtle-ios:hover:not(.disable-hover){color:#444}.toolbar-ios-dark .bar-button-clear-ios-subtle.activated,.toolbar-ios-dark .bar-button-default.bar-button-ios-subtle.activated,.toolbar-ios-dark .bar-button-subtle-ios.activated{opacity:.4}.toolbar-ios-dark .bar-button-outline-ios-subtle{border-color:#444;color:#444;background-color:transparent}.toolbar-ios-dark .bar-button-outline-ios-subtle.activated{color:#fff;background-color:#444}.toolbar-ios-dark .bar-button-solid-ios-subtle{color:#fff;background-color:#444}.toolbar-ios-dark .bar-button-solid-ios-subtle.activated{color:#fff;background-color:#535353}.toolbar-ios-dark .bar-button-clear-ios-vibrant,.toolbar-ios-dark .bar-button-default.bar-button-ios-vibrant,.toolbar-ios-dark .bar-button-vibrant-ios{color:#663399;background-color:transparent}.toolbar-ios-dark .bar-button-clear-ios-vibrant:hover:not(.disable-hover),.toolbar-ios-dark .bar-button-default.bar-button-ios-vibrant:hover:not(.disable-hover),.toolbar-ios-dark .bar-button-vibrant-ios:hover:not(.disable-hover){color:#663399}.toolbar-ios-dark .bar-button-clear-ios-vibrant.activated,.toolbar-ios-dark .bar-button-default.bar-button-ios-vibrant.activated,.toolbar-ios-dark .bar-button-vibrant-ios.activated{opacity:.4}.toolbar-ios-dark .bar-button-outline-ios-vibrant{border-color:#663399;color:#663399;background-color:transparent}.toolbar-ios-dark .bar-button-outline-ios-vibrant.activated{color:#fff;background-color:#663399}.toolbar-ios-dark .bar-button-solid-ios-vibrant{color:#fff;background-color:#663399}.toolbar-ios-dark .bar-button-solid-ios-vibrant.activated{color:#fff;background-color:#7243a1}.toolbar-ios-dark .bar-button-bright-ios,.toolbar-ios-dark .bar-button-clear-ios-bright,.toolbar-ios-dark .bar-button-default.bar-button-ios-bright{color:#ffc125;background-color:transparent}.toolbar-ios-dark .bar-button-bright-ios:hover:not(.disable-hover),.toolbar-ios-dark .bar-button-clear-ios-bright:hover:not(.disable-hover),.toolbar-ios-dark .bar-button-default.bar-button-ios-bright:hover:not(.disable-hover){color:#ffc125}.toolbar-ios-dark .bar-button-bright-ios.activated,.toolbar-ios-dark .bar-button-clear-ios-bright.activated,.toolbar-ios-dark .bar-button-default.bar-button-ios-bright.activated{opacity:.4}.toolbar-ios-dark .bar-button-outline-ios-bright{border-color:#ffc125;color:#ffc125;background-color:transparent}.toolbar-ios-dark .bar-button-outline-ios-bright.activated{color:#000;background-color:#ffc125}.toolbar-ios-dark .bar-button-solid-ios-bright{color:#000;background-color:#ffc125}.toolbar-ios-dark .bar-button-solid-ios-bright.activated{color:#000;background-color:#ebb222}.bar-button-clear-ios-dark,.bar-button-dark-ios,.bar-button-default.bar-button-ios-dark{color:#222;background-color:transparent}.bar-button-clear-ios-dark:hover:not(.disable-hover),.bar-button-dark-ios:hover:not(.disable-hover),.bar-button-default.bar-button-ios-dark:hover:not(.disable-hover){color:#222}.bar-button-clear-ios-dark.activated,.bar-button-dark-ios.activated,.bar-button-default.bar-button-ios-dark.activated{opacity:.4}.bar-button-outline-ios-dark{border-color:#222;color:#222;background-color:transparent}.bar-button-outline-ios-dark.activated{color:#fff;background-color:#222}.bar-button-solid-ios-dark{color:#fff;background-color:#222}.bar-button-solid-ios-dark.activated{color:#fff;background-color:#343434}.toolbar-ios-energized .toolbar-background-ios{background:#ffc527}.toolbar-ios-energized .bar-button-clear-ios,.toolbar-ios-energized .bar-button-default-ios,.toolbar-ios-energized .toolbar-title-ios{color:#000}.toolbar-ios-energized .bar-button-clear-ios-primary,.toolbar-ios-energized .bar-button-default.bar-button-ios-primary,.toolbar-ios-energized .bar-button-primary-ios{color:#488aff;background-color:transparent}.toolbar-ios-energized .bar-button-clear-ios-primary:hover:not(.disable-hover),.toolbar-ios-energized .bar-button-default.bar-button-ios-primary:hover:not(.disable-hover),.toolbar-ios-energized .bar-button-primary-ios:hover:not(.disable-hover){color:#488aff}.toolbar-ios-energized .bar-button-clear-ios-primary.activated,.toolbar-ios-energized .bar-button-default.bar-button-ios-primary.activated,.toolbar-ios-energized .bar-button-primary-ios.activated{opacity:.4}.toolbar-ios-energized .bar-button-outline-ios-primary{border-color:#488aff;color:#488aff;background-color:transparent}.toolbar-ios-energized .bar-button-outline-ios-primary.activated{color:#fff;background-color:#488aff}.toolbar-ios-energized .bar-button-solid-ios-primary{color:#fff;background-color:#488aff}.toolbar-ios-energized .bar-button-solid-ios-primary.activated{color:#fff;background-color:#427feb}.toolbar-ios-energized .bar-button-clear-ios-secondary,.toolbar-ios-energized .bar-button-default.bar-button-ios-secondary,.toolbar-ios-energized .bar-button-secondary-ios{color:#32db64;background-color:transparent}.toolbar-ios-energized .bar-button-clear-ios-secondary:hover:not(.disable-hover),.toolbar-ios-energized .bar-button-default.bar-button-ios-secondary:hover:not(.disable-hover),.toolbar-ios-energized .bar-button-secondary-ios:hover:not(.disable-hover){color:#32db64}.toolbar-ios-energized .bar-button-clear-ios-secondary.activated,.toolbar-ios-energized .bar-button-default.bar-button-ios-secondary.activated,.toolbar-ios-energized .bar-button-secondary-ios.activated{opacity:.4}.toolbar-ios-energized .bar-button-outline-ios-secondary{border-color:#32db64;color:#32db64;background-color:transparent}.toolbar-ios-energized .bar-button-outline-ios-secondary.activated{color:#fff;background-color:#32db64}.toolbar-ios-energized .bar-button-solid-ios-secondary{color:#fff;background-color:#32db64}.toolbar-ios-energized .bar-button-solid-ios-secondary.activated{color:#fff;background-color:#2ec95c}.toolbar-ios-energized .bar-button-clear-ios-danger,.toolbar-ios-energized .bar-button-danger-ios,.toolbar-ios-energized .bar-button-default.bar-button-ios-danger{color:#f53d3d;background-color:transparent}.toolbar-ios-energized .bar-button-clear-ios-danger:hover:not(.disable-hover),.toolbar-ios-energized .bar-button-danger-ios:hover:not(.disable-hover),.toolbar-ios-energized .bar-button-default.bar-button-ios-danger:hover:not(.disable-hover){color:#f53d3d}.toolbar-ios-energized .bar-button-clear-ios-danger.activated,.toolbar-ios-energized .bar-button-danger-ios.activated,.toolbar-ios-energized .bar-button-default.bar-button-ios-danger.activated{opacity:.4}.toolbar-ios-energized .bar-button-outline-ios-danger{border-color:#f53d3d;color:#f53d3d;background-color:transparent}.toolbar-ios-energized .bar-button-outline-ios-danger.activated{color:#fff;background-color:#f53d3d}.toolbar-ios-energized .bar-button-solid-ios-danger{color:#fff;background-color:#f53d3d}.toolbar-ios-energized .bar-button-solid-ios-danger.activated{color:#fff;background-color:#e13838}.toolbar-ios-energized .bar-button-clear-ios-light,.toolbar-ios-energized .bar-button-default.bar-button-ios-light,.toolbar-ios-energized .bar-button-light-ios{color:#f4f4f4;background-color:transparent}.toolbar-ios-energized .bar-button-clear-ios-light:hover:not(.disable-hover),.toolbar-ios-energized .bar-button-default.bar-button-ios-light:hover:not(.disable-hover),.toolbar-ios-energized .bar-button-light-ios:hover:not(.disable-hover){color:#f4f4f4}.toolbar-ios-energized .bar-button-clear-ios-light.activated,.toolbar-ios-energized .bar-button-default.bar-button-ios-light.activated,.toolbar-ios-energized .bar-button-light-ios.activated{opacity:.4}.toolbar-ios-energized .bar-button-outline-ios-light{border-color:#f4f4f4;color:#f4f4f4;background-color:transparent}.toolbar-ios-energized .bar-button-outline-ios-light.activated{color:#000;background-color:#f4f4f4}.toolbar-ios-energized .bar-button-solid-ios-light{color:#000;background-color:#f4f4f4}.toolbar-ios-energized .bar-button-solid-ios-light.activated{color:#000;background-color:#e0e0e0}.toolbar-ios-energized .bar-button-clear-ios-dark,.toolbar-ios-energized .bar-button-dark-ios,.toolbar-ios-energized .bar-button-default.bar-button-ios-dark{color:#222;background-color:transparent}.toolbar-ios-energized .bar-button-clear-ios-dark:hover:not(.disable-hover),.toolbar-ios-energized .bar-button-dark-ios:hover:not(.disable-hover),.toolbar-ios-energized .bar-button-default.bar-button-ios-dark:hover:not(.disable-hover){color:#222}.toolbar-ios-energized .bar-button-clear-ios-dark.activated,.toolbar-ios-energized .bar-button-dark-ios.activated,.toolbar-ios-energized .bar-button-default.bar-button-ios-dark.activated{opacity:.4}.toolbar-ios-energized .bar-button-outline-ios-dark{border-color:#222;color:#222;background-color:transparent}.toolbar-ios-energized .bar-button-outline-ios-dark.activated{color:#fff;background-color:#222}.toolbar-ios-energized .bar-button-solid-ios-dark{color:#fff;background-color:#222}.toolbar-ios-energized .bar-button-solid-ios-dark.activated{color:#fff;background-color:#343434}.toolbar-ios-energized .bar-button-clear-ios-energized,.toolbar-ios-energized .bar-button-default.bar-button-ios-energized,.toolbar-ios-energized .bar-button-energized-ios{color:#ffc527;background-color:transparent}.toolbar-ios-energized .bar-button-clear-ios-energized:hover:not(.disable-hover),.toolbar-ios-energized .bar-button-default.bar-button-ios-energized:hover:not(.disable-hover),.toolbar-ios-energized .bar-button-energized-ios:hover:not(.disable-hover){color:#ffc527}.toolbar-ios-energized .bar-button-clear-ios-energized.activated,.toolbar-ios-energized .bar-button-default.bar-button-ios-energized.activated,.toolbar-ios-energized .bar-button-energized-ios.activated{opacity:.4}.toolbar-ios-energized .bar-button-outline-ios-energized{border-color:#ffc527;color:#ffc527;background-color:transparent}.toolbar-ios-energized .bar-button-outline-ios-energized.activated{color:#000;background-color:#ffc527}.toolbar-ios-energized .bar-button-solid-ios-energized{color:#000;background-color:#ffc527}.toolbar-ios-energized .bar-button-solid-ios-energized.activated{color:#000;background-color:#ebb524}.toolbar-ios-energized .bar-button-clear-ios-royal,.toolbar-ios-energized .bar-button-default.bar-button-ios-royal,.toolbar-ios-energized .bar-button-royal-ios{color:#7e60ff;background-color:transparent}.toolbar-ios-energized .bar-button-clear-ios-royal:hover:not(.disable-hover),.toolbar-ios-energized .bar-button-default.bar-button-ios-royal:hover:not(.disable-hover),.toolbar-ios-energized .bar-button-royal-ios:hover:not(.disable-hover){color:#7e60ff}.toolbar-ios-energized .bar-button-clear-ios-royal.activated,.toolbar-ios-energized .bar-button-default.bar-button-ios-royal.activated,.toolbar-ios-energized .bar-button-royal-ios.activated{opacity:.4}.toolbar-ios-energized .bar-button-outline-ios-royal{border-color:#7e60ff;color:#7e60ff;background-color:transparent}.toolbar-ios-energized .bar-button-outline-ios-royal.activated{color:#fff;background-color:#7e60ff}.toolbar-ios-energized .bar-button-solid-ios-royal{color:#fff;background-color:#7e60ff}.toolbar-ios-energized .bar-button-solid-ios-royal.activated{color:#fff;background-color:#7458eb}.toolbar-ios-energized .bar-button-clear-ios-subtle,.toolbar-ios-energized .bar-button-default.bar-button-ios-subtle,.toolbar-ios-energized .bar-button-subtle-ios{color:#444;background-color:transparent}.toolbar-ios-energized .bar-button-clear-ios-subtle:hover:not(.disable-hover),.toolbar-ios-energized .bar-button-default.bar-button-ios-subtle:hover:not(.disable-hover),.toolbar-ios-energized .bar-button-subtle-ios:hover:not(.disable-hover){color:#444}.toolbar-ios-energized .bar-button-clear-ios-subtle.activated,.toolbar-ios-energized .bar-button-default.bar-button-ios-subtle.activated,.toolbar-ios-energized .bar-button-subtle-ios.activated{opacity:.4}.toolbar-ios-energized .bar-button-outline-ios-subtle{border-color:#444;color:#444;background-color:transparent}.toolbar-ios-energized .bar-button-outline-ios-subtle.activated{color:#fff;background-color:#444}.toolbar-ios-energized .bar-button-solid-ios-subtle{color:#fff;background-color:#444}.toolbar-ios-energized .bar-button-solid-ios-subtle.activated{color:#fff;background-color:#535353}.toolbar-ios-energized .bar-button-clear-ios-vibrant,.toolbar-ios-energized .bar-button-default.bar-button-ios-vibrant,.toolbar-ios-energized .bar-button-vibrant-ios{color:#663399;background-color:transparent}.toolbar-ios-energized .bar-button-clear-ios-vibrant:hover:not(.disable-hover),.toolbar-ios-energized .bar-button-default.bar-button-ios-vibrant:hover:not(.disable-hover),.toolbar-ios-energized .bar-button-vibrant-ios:hover:not(.disable-hover){color:#663399}.toolbar-ios-energized .bar-button-clear-ios-vibrant.activated,.toolbar-ios-energized .bar-button-default.bar-button-ios-vibrant.activated,.toolbar-ios-energized .bar-button-vibrant-ios.activated{opacity:.4}.toolbar-ios-energized .bar-button-outline-ios-vibrant{border-color:#663399;color:#663399;background-color:transparent}.toolbar-ios-energized .bar-button-outline-ios-vibrant.activated{color:#fff;background-color:#663399}.toolbar-ios-energized .bar-button-solid-ios-vibrant{color:#fff;background-color:#663399}.toolbar-ios-energized .bar-button-solid-ios-vibrant.activated{color:#fff;background-color:#7243a1}.toolbar-ios-energized .bar-button-bright-ios,.toolbar-ios-energized .bar-button-clear-ios-bright,.toolbar-ios-energized .bar-button-default.bar-button-ios-bright{color:#ffc125;background-color:transparent}.toolbar-ios-energized .bar-button-bright-ios:hover:not(.disable-hover),.toolbar-ios-energized .bar-button-clear-ios-bright:hover:not(.disable-hover),.toolbar-ios-energized .bar-button-default.bar-button-ios-bright:hover:not(.disable-hover){color:#ffc125}.toolbar-ios-energized .bar-button-bright-ios.activated,.toolbar-ios-energized .bar-button-clear-ios-bright.activated,.toolbar-ios-energized .bar-button-default.bar-button-ios-bright.activated{opacity:.4}.toolbar-ios-energized .bar-button-outline-ios-bright{border-color:#ffc125;color:#ffc125;background-color:transparent}.toolbar-ios-energized .bar-button-outline-ios-bright.activated{color:#000;background-color:#ffc125}.toolbar-ios-energized .bar-button-solid-ios-bright{color:#000;background-color:#ffc125}.toolbar-ios-energized .bar-button-solid-ios-bright.activated{color:#000;background-color:#ebb222}.bar-button-clear-ios-energized,.bar-button-default.bar-button-ios-energized,.bar-button-energized-ios{color:#ffc527;background-color:transparent}.bar-button-clear-ios-energized:hover:not(.disable-hover),.bar-button-default.bar-button-ios-energized:hover:not(.disable-hover),.bar-button-energized-ios:hover:not(.disable-hover){color:#ffc527}.bar-button-clear-ios-energized.activated,.bar-button-default.bar-button-ios-energized.activated,.bar-button-energized-ios.activated{opacity:.4}.bar-button-outline-ios-energized{border-color:#ffc527;color:#ffc527;background-color:transparent}.bar-button-outline-ios-energized.activated{color:#000;background-color:#ffc527}.bar-button-solid-ios-energized{color:#000;background-color:#ffc527}.bar-button-solid-ios-energized.activated{color:#000;background-color:#ebb524}.toolbar-ios-royal .toolbar-background-ios{background:#7e60ff}.toolbar-ios-royal .bar-button-clear-ios,.toolbar-ios-royal .bar-button-default-ios,.toolbar-ios-royal .toolbar-title-ios{color:#fff}.toolbar-ios-royal .bar-button-clear-ios-primary,.toolbar-ios-royal .bar-button-default.bar-button-ios-primary,.toolbar-ios-royal .bar-button-primary-ios{color:#488aff;background-color:transparent}.toolbar-ios-royal .bar-button-clear-ios-primary:hover:not(.disable-hover),.toolbar-ios-royal .bar-button-default.bar-button-ios-primary:hover:not(.disable-hover),.toolbar-ios-royal .bar-button-primary-ios:hover:not(.disable-hover){color:#488aff}.toolbar-ios-royal .bar-button-clear-ios-primary.activated,.toolbar-ios-royal .bar-button-default.bar-button-ios-primary.activated,.toolbar-ios-royal .bar-button-primary-ios.activated{opacity:.4}.toolbar-ios-royal .bar-button-outline-ios-primary{border-color:#488aff;color:#488aff;background-color:transparent}.toolbar-ios-royal .bar-button-outline-ios-primary.activated{color:#fff;background-color:#488aff}.toolbar-ios-royal .bar-button-solid-ios-primary{color:#fff;background-color:#488aff}.toolbar-ios-royal .bar-button-solid-ios-primary.activated{color:#fff;background-color:#427feb}.toolbar-ios-royal .bar-button-clear-ios-secondary,.toolbar-ios-royal .bar-button-default.bar-button-ios-secondary,.toolbar-ios-royal .bar-button-secondary-ios{color:#32db64;background-color:transparent}.toolbar-ios-royal .bar-button-clear-ios-secondary:hover:not(.disable-hover),.toolbar-ios-royal .bar-button-default.bar-button-ios-secondary:hover:not(.disable-hover),.toolbar-ios-royal .bar-button-secondary-ios:hover:not(.disable-hover){color:#32db64}.toolbar-ios-royal .bar-button-clear-ios-secondary.activated,.toolbar-ios-royal .bar-button-default.bar-button-ios-secondary.activated,.toolbar-ios-royal .bar-button-secondary-ios.activated{opacity:.4}.toolbar-ios-royal .bar-button-outline-ios-secondary{border-color:#32db64;color:#32db64;background-color:transparent}.toolbar-ios-royal .bar-button-outline-ios-secondary.activated{color:#fff;background-color:#32db64}.toolbar-ios-royal .bar-button-solid-ios-secondary{color:#fff;background-color:#32db64}.toolbar-ios-royal .bar-button-solid-ios-secondary.activated{color:#fff;background-color:#2ec95c}.toolbar-ios-royal .bar-button-clear-ios-danger,.toolbar-ios-royal .bar-button-danger-ios,.toolbar-ios-royal .bar-button-default.bar-button-ios-danger{color:#f53d3d;background-color:transparent}.toolbar-ios-royal .bar-button-clear-ios-danger:hover:not(.disable-hover),.toolbar-ios-royal .bar-button-danger-ios:hover:not(.disable-hover),.toolbar-ios-royal .bar-button-default.bar-button-ios-danger:hover:not(.disable-hover){color:#f53d3d}.toolbar-ios-royal .bar-button-clear-ios-danger.activated,.toolbar-ios-royal .bar-button-danger-ios.activated,.toolbar-ios-royal .bar-button-default.bar-button-ios-danger.activated{opacity:.4}.toolbar-ios-royal .bar-button-outline-ios-danger{border-color:#f53d3d;color:#f53d3d;background-color:transparent}.toolbar-ios-royal .bar-button-outline-ios-danger.activated{color:#fff;background-color:#f53d3d}.toolbar-ios-royal .bar-button-solid-ios-danger{color:#fff;background-color:#f53d3d}.toolbar-ios-royal .bar-button-solid-ios-danger.activated{color:#fff;background-color:#e13838}.toolbar-ios-royal .bar-button-clear-ios-light,.toolbar-ios-royal .bar-button-default.bar-button-ios-light,.toolbar-ios-royal .bar-button-light-ios{color:#f4f4f4;background-color:transparent}.toolbar-ios-royal .bar-button-clear-ios-light:hover:not(.disable-hover),.toolbar-ios-royal .bar-button-default.bar-button-ios-light:hover:not(.disable-hover),.toolbar-ios-royal .bar-button-light-ios:hover:not(.disable-hover){color:#f4f4f4}.toolbar-ios-royal .bar-button-clear-ios-light.activated,.toolbar-ios-royal .bar-button-default.bar-button-ios-light.activated,.toolbar-ios-royal .bar-button-light-ios.activated{opacity:.4}.toolbar-ios-royal .bar-button-outline-ios-light{border-color:#f4f4f4;color:#f4f4f4;background-color:transparent}.toolbar-ios-royal .bar-button-outline-ios-light.activated{color:#000;background-color:#f4f4f4}.toolbar-ios-royal .bar-button-solid-ios-light{color:#000;background-color:#f4f4f4}.toolbar-ios-royal .bar-button-solid-ios-light.activated{color:#000;background-color:#e0e0e0}.toolbar-ios-royal .bar-button-clear-ios-dark,.toolbar-ios-royal .bar-button-dark-ios,.toolbar-ios-royal .bar-button-default.bar-button-ios-dark{color:#222;background-color:transparent}.toolbar-ios-royal .bar-button-clear-ios-dark:hover:not(.disable-hover),.toolbar-ios-royal .bar-button-dark-ios:hover:not(.disable-hover),.toolbar-ios-royal .bar-button-default.bar-button-ios-dark:hover:not(.disable-hover){color:#222}.toolbar-ios-royal .bar-button-clear-ios-dark.activated,.toolbar-ios-royal .bar-button-dark-ios.activated,.toolbar-ios-royal .bar-button-default.bar-button-ios-dark.activated{opacity:.4}.toolbar-ios-royal .bar-button-outline-ios-dark{border-color:#222;color:#222;background-color:transparent}.toolbar-ios-royal .bar-button-outline-ios-dark.activated{color:#fff;background-color:#222}.toolbar-ios-royal .bar-button-solid-ios-dark{color:#fff;background-color:#222}.toolbar-ios-royal .bar-button-solid-ios-dark.activated{color:#fff;background-color:#343434}.toolbar-ios-royal .bar-button-clear-ios-energized,.toolbar-ios-royal .bar-button-default.bar-button-ios-energized,.toolbar-ios-royal .bar-button-energized-ios{color:#ffc527;background-color:transparent}.toolbar-ios-royal .bar-button-clear-ios-energized:hover:not(.disable-hover),.toolbar-ios-royal .bar-button-default.bar-button-ios-energized:hover:not(.disable-hover),.toolbar-ios-royal .bar-button-energized-ios:hover:not(.disable-hover){color:#ffc527}.toolbar-ios-royal .bar-button-clear-ios-energized.activated,.toolbar-ios-royal .bar-button-default.bar-button-ios-energized.activated,.toolbar-ios-royal .bar-button-energized-ios.activated{opacity:.4}.toolbar-ios-royal .bar-button-outline-ios-energized{border-color:#ffc527;color:#ffc527;background-color:transparent}.toolbar-ios-royal .bar-button-outline-ios-energized.activated{color:#000;background-color:#ffc527}.toolbar-ios-royal .bar-button-solid-ios-energized{color:#000;background-color:#ffc527}.toolbar-ios-royal .bar-button-solid-ios-energized.activated{color:#000;background-color:#ebb524}.toolbar-ios-royal .bar-button-clear-ios-royal,.toolbar-ios-royal .bar-button-default.bar-button-ios-royal,.toolbar-ios-royal .bar-button-royal-ios{color:#7e60ff;background-color:transparent}.toolbar-ios-royal .bar-button-clear-ios-royal:hover:not(.disable-hover),.toolbar-ios-royal .bar-button-default.bar-button-ios-royal:hover:not(.disable-hover),.toolbar-ios-royal .bar-button-royal-ios:hover:not(.disable-hover){color:#7e60ff}.toolbar-ios-royal .bar-button-clear-ios-royal.activated,.toolbar-ios-royal .bar-button-default.bar-button-ios-royal.activated,.toolbar-ios-royal .bar-button-royal-ios.activated{opacity:.4}.toolbar-ios-royal .bar-button-outline-ios-royal{border-color:#7e60ff;color:#7e60ff;background-color:transparent}.toolbar-ios-royal .bar-button-outline-ios-royal.activated{color:#fff;background-color:#7e60ff}.toolbar-ios-royal .bar-button-solid-ios-royal{color:#fff;background-color:#7e60ff}.toolbar-ios-royal .bar-button-solid-ios-royal.activated{color:#fff;background-color:#7458eb}.toolbar-ios-royal .bar-button-clear-ios-subtle,.toolbar-ios-royal .bar-button-default.bar-button-ios-subtle,.toolbar-ios-royal .bar-button-subtle-ios{color:#444;background-color:transparent}.toolbar-ios-royal .bar-button-clear-ios-subtle:hover:not(.disable-hover),.toolbar-ios-royal .bar-button-default.bar-button-ios-subtle:hover:not(.disable-hover),.toolbar-ios-royal .bar-button-subtle-ios:hover:not(.disable-hover){color:#444}.toolbar-ios-royal .bar-button-clear-ios-subtle.activated,.toolbar-ios-royal .bar-button-default.bar-button-ios-subtle.activated,.toolbar-ios-royal .bar-button-subtle-ios.activated{opacity:.4}.toolbar-ios-royal .bar-button-outline-ios-subtle{border-color:#444;color:#444;background-color:transparent}.toolbar-ios-royal .bar-button-outline-ios-subtle.activated{color:#fff;background-color:#444}.toolbar-ios-royal .bar-button-solid-ios-subtle{color:#fff;background-color:#444}.toolbar-ios-royal .bar-button-solid-ios-subtle.activated{color:#fff;background-color:#535353}.toolbar-ios-royal .bar-button-clear-ios-vibrant,.toolbar-ios-royal .bar-button-default.bar-button-ios-vibrant,.toolbar-ios-royal .bar-button-vibrant-ios{color:#663399;background-color:transparent}.toolbar-ios-royal .bar-button-clear-ios-vibrant:hover:not(.disable-hover),.toolbar-ios-royal .bar-button-default.bar-button-ios-vibrant:hover:not(.disable-hover),.toolbar-ios-royal .bar-button-vibrant-ios:hover:not(.disable-hover){color:#663399}.toolbar-ios-royal .bar-button-clear-ios-vibrant.activated,.toolbar-ios-royal .bar-button-default.bar-button-ios-vibrant.activated,.toolbar-ios-royal .bar-button-vibrant-ios.activated{opacity:.4}.toolbar-ios-royal .bar-button-outline-ios-vibrant{border-color:#663399;color:#663399;background-color:transparent}.toolbar-ios-royal .bar-button-outline-ios-vibrant.activated{color:#fff;background-color:#663399}.toolbar-ios-royal .bar-button-solid-ios-vibrant{color:#fff;background-color:#663399}.toolbar-ios-royal .bar-button-solid-ios-vibrant.activated{color:#fff;background-color:#7243a1}.toolbar-ios-royal .bar-button-bright-ios,.toolbar-ios-royal .bar-button-clear-ios-bright,.toolbar-ios-royal .bar-button-default.bar-button-ios-bright{color:#ffc125;background-color:transparent}.toolbar-ios-royal .bar-button-bright-ios:hover:not(.disable-hover),.toolbar-ios-royal .bar-button-clear-ios-bright:hover:not(.disable-hover),.toolbar-ios-royal .bar-button-default.bar-button-ios-bright:hover:not(.disable-hover){color:#ffc125}.toolbar-ios-royal .bar-button-bright-ios.activated,.toolbar-ios-royal .bar-button-clear-ios-bright.activated,.toolbar-ios-royal .bar-button-default.bar-button-ios-bright.activated{opacity:.4}.toolbar-ios-royal .bar-button-outline-ios-bright{border-color:#ffc125;color:#ffc125;background-color:transparent}.toolbar-ios-royal .bar-button-outline-ios-bright.activated{color:#000;background-color:#ffc125}.toolbar-ios-royal .bar-button-solid-ios-bright{color:#000;background-color:#ffc125}.toolbar-ios-royal .bar-button-solid-ios-bright.activated{color:#000;background-color:#ebb222}.bar-button-clear-ios-royal,.bar-button-default.bar-button-ios-royal,.bar-button-royal-ios{color:#7e60ff;background-color:transparent}.bar-button-clear-ios-royal:hover:not(.disable-hover),.bar-button-default.bar-button-ios-royal:hover:not(.disable-hover),.bar-button-royal-ios:hover:not(.disable-hover){color:#7e60ff}.bar-button-clear-ios-royal.activated,.bar-button-default.bar-button-ios-royal.activated,.bar-button-royal-ios.activated{opacity:.4}.bar-button-outline-ios-royal{border-color:#7e60ff;color:#7e60ff;background-color:transparent}.bar-button-outline-ios-royal.activated{color:#fff;background-color:#7e60ff}.bar-button-solid-ios-royal{color:#fff;background-color:#7e60ff}.bar-button-solid-ios-royal.activated{color:#fff;background-color:#7458eb}.toolbar-ios-subtle .toolbar-background-ios{background:#444}.toolbar-ios-subtle .bar-button-clear-ios,.toolbar-ios-subtle .bar-button-default-ios,.toolbar-ios-subtle .toolbar-title-ios{color:#fff}.toolbar-ios-subtle .bar-button-clear-ios-primary,.toolbar-ios-subtle .bar-button-default.bar-button-ios-primary,.toolbar-ios-subtle .bar-button-primary-ios{color:#488aff;background-color:transparent}.toolbar-ios-subtle .bar-button-clear-ios-primary:hover:not(.disable-hover),.toolbar-ios-subtle .bar-button-default.bar-button-ios-primary:hover:not(.disable-hover),.toolbar-ios-subtle .bar-button-primary-ios:hover:not(.disable-hover){color:#488aff}.toolbar-ios-subtle .bar-button-clear-ios-primary.activated,.toolbar-ios-subtle .bar-button-default.bar-button-ios-primary.activated,.toolbar-ios-subtle .bar-button-primary-ios.activated{opacity:.4}.toolbar-ios-subtle .bar-button-outline-ios-primary{border-color:#488aff;color:#488aff;background-color:transparent}.toolbar-ios-subtle .bar-button-outline-ios-primary.activated{color:#fff;background-color:#488aff}.toolbar-ios-subtle .bar-button-solid-ios-primary{color:#fff;background-color:#488aff}.toolbar-ios-subtle .bar-button-solid-ios-primary.activated{color:#fff;background-color:#427feb}.toolbar-ios-subtle .bar-button-clear-ios-secondary,.toolbar-ios-subtle .bar-button-default.bar-button-ios-secondary,.toolbar-ios-subtle .bar-button-secondary-ios{color:#32db64;background-color:transparent}.toolbar-ios-subtle .bar-button-clear-ios-secondary:hover:not(.disable-hover),.toolbar-ios-subtle .bar-button-default.bar-button-ios-secondary:hover:not(.disable-hover),.toolbar-ios-subtle .bar-button-secondary-ios:hover:not(.disable-hover){color:#32db64}.toolbar-ios-subtle .bar-button-clear-ios-secondary.activated,.toolbar-ios-subtle .bar-button-default.bar-button-ios-secondary.activated,.toolbar-ios-subtle .bar-button-secondary-ios.activated{opacity:.4}.toolbar-ios-subtle .bar-button-outline-ios-secondary{border-color:#32db64;color:#32db64;background-color:transparent}.toolbar-ios-subtle .bar-button-outline-ios-secondary.activated{color:#fff;background-color:#32db64}.toolbar-ios-subtle .bar-button-solid-ios-secondary{color:#fff;background-color:#32db64}.toolbar-ios-subtle .bar-button-solid-ios-secondary.activated{color:#fff;background-color:#2ec95c}.toolbar-ios-subtle .bar-button-clear-ios-danger,.toolbar-ios-subtle .bar-button-danger-ios,.toolbar-ios-subtle .bar-button-default.bar-button-ios-danger{color:#f53d3d;background-color:transparent}.toolbar-ios-subtle .bar-button-clear-ios-danger:hover:not(.disable-hover),.toolbar-ios-subtle .bar-button-danger-ios:hover:not(.disable-hover),.toolbar-ios-subtle .bar-button-default.bar-button-ios-danger:hover:not(.disable-hover){color:#f53d3d}.toolbar-ios-subtle .bar-button-clear-ios-danger.activated,.toolbar-ios-subtle .bar-button-danger-ios.activated,.toolbar-ios-subtle .bar-button-default.bar-button-ios-danger.activated{opacity:.4}.toolbar-ios-subtle .bar-button-outline-ios-danger{border-color:#f53d3d;color:#f53d3d;background-color:transparent}.toolbar-ios-subtle .bar-button-outline-ios-danger.activated{color:#fff;background-color:#f53d3d}.toolbar-ios-subtle .bar-button-solid-ios-danger{color:#fff;background-color:#f53d3d}.toolbar-ios-subtle .bar-button-solid-ios-danger.activated{color:#fff;background-color:#e13838}.toolbar-ios-subtle .bar-button-clear-ios-light,.toolbar-ios-subtle .bar-button-default.bar-button-ios-light,.toolbar-ios-subtle .bar-button-light-ios{color:#f4f4f4;background-color:transparent}.toolbar-ios-subtle .bar-button-clear-ios-light:hover:not(.disable-hover),.toolbar-ios-subtle .bar-button-default.bar-button-ios-light:hover:not(.disable-hover),.toolbar-ios-subtle .bar-button-light-ios:hover:not(.disable-hover){color:#f4f4f4}.toolbar-ios-subtle .bar-button-clear-ios-light.activated,.toolbar-ios-subtle .bar-button-default.bar-button-ios-light.activated,.toolbar-ios-subtle .bar-button-light-ios.activated{opacity:.4}.toolbar-ios-subtle .bar-button-outline-ios-light{border-color:#f4f4f4;color:#f4f4f4;background-color:transparent}.toolbar-ios-subtle .bar-button-outline-ios-light.activated{color:#000;background-color:#f4f4f4}.toolbar-ios-subtle .bar-button-solid-ios-light{color:#000;background-color:#f4f4f4}.toolbar-ios-subtle .bar-button-solid-ios-light.activated{color:#000;background-color:#e0e0e0}.toolbar-ios-subtle .bar-button-clear-ios-dark,.toolbar-ios-subtle .bar-button-dark-ios,.toolbar-ios-subtle .bar-button-default.bar-button-ios-dark{color:#222;background-color:transparent}.toolbar-ios-subtle .bar-button-clear-ios-dark:hover:not(.disable-hover),.toolbar-ios-subtle .bar-button-dark-ios:hover:not(.disable-hover),.toolbar-ios-subtle .bar-button-default.bar-button-ios-dark:hover:not(.disable-hover){color:#222}.toolbar-ios-subtle .bar-button-clear-ios-dark.activated,.toolbar-ios-subtle .bar-button-dark-ios.activated,.toolbar-ios-subtle .bar-button-default.bar-button-ios-dark.activated{opacity:.4}.toolbar-ios-subtle .bar-button-outline-ios-dark{border-color:#222;color:#222;background-color:transparent}.toolbar-ios-subtle .bar-button-outline-ios-dark.activated{color:#fff;background-color:#222}.toolbar-ios-subtle .bar-button-solid-ios-dark{color:#fff;background-color:#222}.toolbar-ios-subtle .bar-button-solid-ios-dark.activated{color:#fff;background-color:#343434}.toolbar-ios-subtle .bar-button-clear-ios-energized,.toolbar-ios-subtle .bar-button-default.bar-button-ios-energized,.toolbar-ios-subtle .bar-button-energized-ios{color:#ffc527;background-color:transparent}.toolbar-ios-subtle .bar-button-clear-ios-energized:hover:not(.disable-hover),.toolbar-ios-subtle .bar-button-default.bar-button-ios-energized:hover:not(.disable-hover),.toolbar-ios-subtle .bar-button-energized-ios:hover:not(.disable-hover){color:#ffc527}.toolbar-ios-subtle .bar-button-clear-ios-energized.activated,.toolbar-ios-subtle .bar-button-default.bar-button-ios-energized.activated,.toolbar-ios-subtle .bar-button-energized-ios.activated{opacity:.4}.toolbar-ios-subtle .bar-button-outline-ios-energized{border-color:#ffc527;color:#ffc527;background-color:transparent}.toolbar-ios-subtle .bar-button-outline-ios-energized.activated{color:#000;background-color:#ffc527}.toolbar-ios-subtle .bar-button-solid-ios-energized{color:#000;background-color:#ffc527}.toolbar-ios-subtle .bar-button-solid-ios-energized.activated{color:#000;background-color:#ebb524}.toolbar-ios-subtle .bar-button-clear-ios-royal,.toolbar-ios-subtle .bar-button-default.bar-button-ios-royal,.toolbar-ios-subtle .bar-button-royal-ios{color:#7e60ff;background-color:transparent}.toolbar-ios-subtle .bar-button-clear-ios-royal:hover:not(.disable-hover),.toolbar-ios-subtle .bar-button-default.bar-button-ios-royal:hover:not(.disable-hover),.toolbar-ios-subtle .bar-button-royal-ios:hover:not(.disable-hover){color:#7e60ff}.toolbar-ios-subtle .bar-button-clear-ios-royal.activated,.toolbar-ios-subtle .bar-button-default.bar-button-ios-royal.activated,.toolbar-ios-subtle .bar-button-royal-ios.activated{opacity:.4}.toolbar-ios-subtle .bar-button-outline-ios-royal{border-color:#7e60ff;color:#7e60ff;background-color:transparent}.toolbar-ios-subtle .bar-button-outline-ios-royal.activated{color:#fff;background-color:#7e60ff}.toolbar-ios-subtle .bar-button-solid-ios-royal{color:#fff;background-color:#7e60ff}.toolbar-ios-subtle .bar-button-solid-ios-royal.activated{color:#fff;background-color:#7458eb}.toolbar-ios-subtle .bar-button-clear-ios-subtle,.toolbar-ios-subtle .bar-button-default.bar-button-ios-subtle,.toolbar-ios-subtle .bar-button-subtle-ios{color:#444;background-color:transparent}.toolbar-ios-subtle .bar-button-clear-ios-subtle:hover:not(.disable-hover),.toolbar-ios-subtle .bar-button-default.bar-button-ios-subtle:hover:not(.disable-hover),.toolbar-ios-subtle .bar-button-subtle-ios:hover:not(.disable-hover){color:#444}.toolbar-ios-subtle .bar-button-clear-ios-subtle.activated,.toolbar-ios-subtle .bar-button-default.bar-button-ios-subtle.activated,.toolbar-ios-subtle .bar-button-subtle-ios.activated{opacity:.4}.toolbar-ios-subtle .bar-button-outline-ios-subtle{border-color:#444;color:#444;background-color:transparent}.toolbar-ios-subtle .bar-button-outline-ios-subtle.activated{color:#fff;background-color:#444}.toolbar-ios-subtle .bar-button-solid-ios-subtle{color:#fff;background-color:#444}.toolbar-ios-subtle .bar-button-solid-ios-subtle.activated{color:#fff;background-color:#535353}.toolbar-ios-subtle .bar-button-clear-ios-vibrant,.toolbar-ios-subtle .bar-button-default.bar-button-ios-vibrant,.toolbar-ios-subtle .bar-button-vibrant-ios{color:#663399;background-color:transparent}.toolbar-ios-subtle .bar-button-clear-ios-vibrant:hover:not(.disable-hover),.toolbar-ios-subtle .bar-button-default.bar-button-ios-vibrant:hover:not(.disable-hover),.toolbar-ios-subtle .bar-button-vibrant-ios:hover:not(.disable-hover){color:#663399}.toolbar-ios-subtle .bar-button-clear-ios-vibrant.activated,.toolbar-ios-subtle .bar-button-default.bar-button-ios-vibrant.activated,.toolbar-ios-subtle .bar-button-vibrant-ios.activated{opacity:.4}.toolbar-ios-subtle .bar-button-outline-ios-vibrant{border-color:#663399;color:#663399;background-color:transparent}.toolbar-ios-subtle .bar-button-outline-ios-vibrant.activated{color:#fff;background-color:#663399}.toolbar-ios-subtle .bar-button-solid-ios-vibrant{color:#fff;background-color:#663399}.toolbar-ios-subtle .bar-button-solid-ios-vibrant.activated{color:#fff;background-color:#7243a1}.toolbar-ios-subtle .bar-button-bright-ios,.toolbar-ios-subtle .bar-button-clear-ios-bright,.toolbar-ios-subtle .bar-button-default.bar-button-ios-bright{color:#ffc125;background-color:transparent}.toolbar-ios-subtle .bar-button-bright-ios:hover:not(.disable-hover),.toolbar-ios-subtle .bar-button-clear-ios-bright:hover:not(.disable-hover),.toolbar-ios-subtle .bar-button-default.bar-button-ios-bright:hover:not(.disable-hover){color:#ffc125}.toolbar-ios-subtle .bar-button-bright-ios.activated,.toolbar-ios-subtle .bar-button-clear-ios-bright.activated,.toolbar-ios-subtle .bar-button-default.bar-button-ios-bright.activated{opacity:.4}.toolbar-ios-subtle .bar-button-outline-ios-bright{border-color:#ffc125;color:#ffc125;background-color:transparent}.toolbar-ios-subtle .bar-button-outline-ios-bright.activated{color:#000;background-color:#ffc125}.toolbar-ios-subtle .bar-button-solid-ios-bright{color:#000;background-color:#ffc125}.toolbar-ios-subtle .bar-button-solid-ios-bright.activated{color:#000;background-color:#ebb222}.bar-button-clear-ios-subtle,.bar-button-default.bar-button-ios-subtle,.bar-button-subtle-ios{color:#444;background-color:transparent}.bar-button-clear-ios-subtle:hover:not(.disable-hover),.bar-button-default.bar-button-ios-subtle:hover:not(.disable-hover),.bar-button-subtle-ios:hover:not(.disable-hover){color:#444}.bar-button-clear-ios-subtle.activated,.bar-button-default.bar-button-ios-subtle.activated,.bar-button-subtle-ios.activated{opacity:.4}.bar-button-outline-ios-subtle{border-color:#444;color:#444;background-color:transparent}.bar-button-outline-ios-subtle.activated{color:#fff;background-color:#444}.bar-button-solid-ios-subtle{color:#fff;background-color:#444}.bar-button-solid-ios-subtle.activated{color:#fff;background-color:#535353}.toolbar-ios-vibrant .toolbar-background-ios{background:#663399}.toolbar-ios-vibrant .bar-button-clear-ios,.toolbar-ios-vibrant .bar-button-default-ios,.toolbar-ios-vibrant .toolbar-title-ios{color:#fff}.toolbar-ios-vibrant .bar-button-clear-ios-primary,.toolbar-ios-vibrant .bar-button-default.bar-button-ios-primary,.toolbar-ios-vibrant .bar-button-primary-ios{color:#488aff;background-color:transparent}.toolbar-ios-vibrant .bar-button-clear-ios-primary:hover:not(.disable-hover),.toolbar-ios-vibrant .bar-button-default.bar-button-ios-primary:hover:not(.disable-hover),.toolbar-ios-vibrant .bar-button-primary-ios:hover:not(.disable-hover){color:#488aff}.toolbar-ios-vibrant .bar-button-clear-ios-primary.activated,.toolbar-ios-vibrant .bar-button-default.bar-button-ios-primary.activated,.toolbar-ios-vibrant .bar-button-primary-ios.activated{opacity:.4}.toolbar-ios-vibrant .bar-button-outline-ios-primary{border-color:#488aff;color:#488aff;background-color:transparent}.toolbar-ios-vibrant .bar-button-outline-ios-primary.activated{color:#fff;background-color:#488aff}.toolbar-ios-vibrant .bar-button-solid-ios-primary{color:#fff;background-color:#488aff}.toolbar-ios-vibrant .bar-button-solid-ios-primary.activated{color:#fff;background-color:#427feb}.toolbar-ios-vibrant .bar-button-clear-ios-secondary,.toolbar-ios-vibrant .bar-button-default.bar-button-ios-secondary,.toolbar-ios-vibrant .bar-button-secondary-ios{color:#32db64;background-color:transparent}.toolbar-ios-vibrant .bar-button-clear-ios-secondary:hover:not(.disable-hover),.toolbar-ios-vibrant .bar-button-default.bar-button-ios-secondary:hover:not(.disable-hover),.toolbar-ios-vibrant .bar-button-secondary-ios:hover:not(.disable-hover){color:#32db64}.toolbar-ios-vibrant .bar-button-clear-ios-secondary.activated,.toolbar-ios-vibrant .bar-button-default.bar-button-ios-secondary.activated,.toolbar-ios-vibrant .bar-button-secondary-ios.activated{opacity:.4}.toolbar-ios-vibrant .bar-button-outline-ios-secondary{border-color:#32db64;color:#32db64;background-color:transparent}.toolbar-ios-vibrant .bar-button-outline-ios-secondary.activated{color:#fff;background-color:#32db64}.toolbar-ios-vibrant .bar-button-solid-ios-secondary{color:#fff;background-color:#32db64}.toolbar-ios-vibrant .bar-button-solid-ios-secondary.activated{color:#fff;background-color:#2ec95c}.toolbar-ios-vibrant .bar-button-clear-ios-danger,.toolbar-ios-vibrant .bar-button-danger-ios,.toolbar-ios-vibrant .bar-button-default.bar-button-ios-danger{color:#f53d3d;background-color:transparent}.toolbar-ios-vibrant .bar-button-clear-ios-danger:hover:not(.disable-hover),.toolbar-ios-vibrant .bar-button-danger-ios:hover:not(.disable-hover),.toolbar-ios-vibrant .bar-button-default.bar-button-ios-danger:hover:not(.disable-hover){color:#f53d3d}.toolbar-ios-vibrant .bar-button-clear-ios-danger.activated,.toolbar-ios-vibrant .bar-button-danger-ios.activated,.toolbar-ios-vibrant .bar-button-default.bar-button-ios-danger.activated{opacity:.4}.toolbar-ios-vibrant .bar-button-outline-ios-danger{border-color:#f53d3d;color:#f53d3d;background-color:transparent}.toolbar-ios-vibrant .bar-button-outline-ios-danger.activated{color:#fff;background-color:#f53d3d}.toolbar-ios-vibrant .bar-button-solid-ios-danger{color:#fff;background-color:#f53d3d}.toolbar-ios-vibrant .bar-button-solid-ios-danger.activated{color:#fff;background-color:#e13838}.toolbar-ios-vibrant .bar-button-clear-ios-light,.toolbar-ios-vibrant .bar-button-default.bar-button-ios-light,.toolbar-ios-vibrant .bar-button-light-ios{color:#f4f4f4;background-color:transparent}.toolbar-ios-vibrant .bar-button-clear-ios-light:hover:not(.disable-hover),.toolbar-ios-vibrant .bar-button-default.bar-button-ios-light:hover:not(.disable-hover),.toolbar-ios-vibrant .bar-button-light-ios:hover:not(.disable-hover){color:#f4f4f4}.toolbar-ios-vibrant .bar-button-clear-ios-light.activated,.toolbar-ios-vibrant .bar-button-default.bar-button-ios-light.activated,.toolbar-ios-vibrant .bar-button-light-ios.activated{opacity:.4}.toolbar-ios-vibrant .bar-button-outline-ios-light{border-color:#f4f4f4;color:#f4f4f4;background-color:transparent}.toolbar-ios-vibrant .bar-button-outline-ios-light.activated{color:#000;background-color:#f4f4f4}.toolbar-ios-vibrant .bar-button-solid-ios-light{color:#000;background-color:#f4f4f4}.toolbar-ios-vibrant .bar-button-solid-ios-light.activated{color:#000;background-color:#e0e0e0}.toolbar-ios-vibrant .bar-button-clear-ios-dark,.toolbar-ios-vibrant .bar-button-dark-ios,.toolbar-ios-vibrant .bar-button-default.bar-button-ios-dark{color:#222;background-color:transparent}.toolbar-ios-vibrant .bar-button-clear-ios-dark:hover:not(.disable-hover),.toolbar-ios-vibrant .bar-button-dark-ios:hover:not(.disable-hover),.toolbar-ios-vibrant .bar-button-default.bar-button-ios-dark:hover:not(.disable-hover){color:#222}.toolbar-ios-vibrant .bar-button-clear-ios-dark.activated,.toolbar-ios-vibrant .bar-button-dark-ios.activated,.toolbar-ios-vibrant .bar-button-default.bar-button-ios-dark.activated{opacity:.4}.toolbar-ios-vibrant .bar-button-outline-ios-dark{border-color:#222;color:#222;background-color:transparent}.toolbar-ios-vibrant .bar-button-outline-ios-dark.activated{color:#fff;background-color:#222}.toolbar-ios-vibrant .bar-button-solid-ios-dark{color:#fff;background-color:#222}.toolbar-ios-vibrant .bar-button-solid-ios-dark.activated{color:#fff;background-color:#343434}.toolbar-ios-vibrant .bar-button-clear-ios-energized,.toolbar-ios-vibrant .bar-button-default.bar-button-ios-energized,.toolbar-ios-vibrant .bar-button-energized-ios{color:#ffc527;background-color:transparent}.toolbar-ios-vibrant .bar-button-clear-ios-energized:hover:not(.disable-hover),.toolbar-ios-vibrant .bar-button-default.bar-button-ios-energized:hover:not(.disable-hover),.toolbar-ios-vibrant .bar-button-energized-ios:hover:not(.disable-hover){color:#ffc527}.toolbar-ios-vibrant .bar-button-clear-ios-energized.activated,.toolbar-ios-vibrant .bar-button-default.bar-button-ios-energized.activated,.toolbar-ios-vibrant .bar-button-energized-ios.activated{opacity:.4}.toolbar-ios-vibrant .bar-button-outline-ios-energized{border-color:#ffc527;color:#ffc527;background-color:transparent}.toolbar-ios-vibrant .bar-button-outline-ios-energized.activated{color:#000;background-color:#ffc527}.toolbar-ios-vibrant .bar-button-solid-ios-energized{color:#000;background-color:#ffc527}.toolbar-ios-vibrant .bar-button-solid-ios-energized.activated{color:#000;background-color:#ebb524}.toolbar-ios-vibrant .bar-button-clear-ios-royal,.toolbar-ios-vibrant .bar-button-default.bar-button-ios-royal,.toolbar-ios-vibrant .bar-button-royal-ios{color:#7e60ff;background-color:transparent}.toolbar-ios-vibrant .bar-button-clear-ios-royal:hover:not(.disable-hover),.toolbar-ios-vibrant .bar-button-default.bar-button-ios-royal:hover:not(.disable-hover),.toolbar-ios-vibrant .bar-button-royal-ios:hover:not(.disable-hover){color:#7e60ff}.toolbar-ios-vibrant .bar-button-clear-ios-royal.activated,.toolbar-ios-vibrant .bar-button-default.bar-button-ios-royal.activated,.toolbar-ios-vibrant .bar-button-royal-ios.activated{opacity:.4}.toolbar-ios-vibrant .bar-button-outline-ios-royal{border-color:#7e60ff;color:#7e60ff;background-color:transparent}.toolbar-ios-vibrant .bar-button-outline-ios-royal.activated{color:#fff;background-color:#7e60ff}.toolbar-ios-vibrant .bar-button-solid-ios-royal{color:#fff;background-color:#7e60ff}.toolbar-ios-vibrant .bar-button-solid-ios-royal.activated{color:#fff;background-color:#7458eb}.toolbar-ios-vibrant .bar-button-clear-ios-subtle,.toolbar-ios-vibrant .bar-button-default.bar-button-ios-subtle,.toolbar-ios-vibrant .bar-button-subtle-ios{color:#444;background-color:transparent}.toolbar-ios-vibrant .bar-button-clear-ios-subtle:hover:not(.disable-hover),.toolbar-ios-vibrant .bar-button-default.bar-button-ios-subtle:hover:not(.disable-hover),.toolbar-ios-vibrant .bar-button-subtle-ios:hover:not(.disable-hover){color:#444}.toolbar-ios-vibrant .bar-button-clear-ios-subtle.activated,.toolbar-ios-vibrant .bar-button-default.bar-button-ios-subtle.activated,.toolbar-ios-vibrant .bar-button-subtle-ios.activated{opacity:.4}.toolbar-ios-vibrant .bar-button-outline-ios-subtle{border-color:#444;color:#444;background-color:transparent}.toolbar-ios-vibrant .bar-button-outline-ios-subtle.activated{color:#fff;background-color:#444}.toolbar-ios-vibrant .bar-button-solid-ios-subtle{color:#fff;background-color:#444}.toolbar-ios-vibrant .bar-button-solid-ios-subtle.activated{color:#fff;background-color:#535353}.toolbar-ios-vibrant .bar-button-clear-ios-vibrant,.toolbar-ios-vibrant .bar-button-default.bar-button-ios-vibrant,.toolbar-ios-vibrant .bar-button-vibrant-ios{color:#663399;background-color:transparent}.toolbar-ios-vibrant .bar-button-clear-ios-vibrant:hover:not(.disable-hover),.toolbar-ios-vibrant .bar-button-default.bar-button-ios-vibrant:hover:not(.disable-hover),.toolbar-ios-vibrant .bar-button-vibrant-ios:hover:not(.disable-hover){color:#663399}.toolbar-ios-vibrant .bar-button-clear-ios-vibrant.activated,.toolbar-ios-vibrant .bar-button-default.bar-button-ios-vibrant.activated,.toolbar-ios-vibrant .bar-button-vibrant-ios.activated{opacity:.4}.toolbar-ios-vibrant .bar-button-outline-ios-vibrant{border-color:#663399;color:#663399;background-color:transparent}.toolbar-ios-vibrant .bar-button-outline-ios-vibrant.activated{color:#fff;background-color:#663399}.toolbar-ios-vibrant .bar-button-solid-ios-vibrant{color:#fff;background-color:#663399}.toolbar-ios-vibrant .bar-button-solid-ios-vibrant.activated{color:#fff;background-color:#7243a1}.toolbar-ios-vibrant .bar-button-bright-ios,.toolbar-ios-vibrant .bar-button-clear-ios-bright,.toolbar-ios-vibrant .bar-button-default.bar-button-ios-bright{color:#ffc125;background-color:transparent}.toolbar-ios-vibrant .bar-button-bright-ios:hover:not(.disable-hover),.toolbar-ios-vibrant .bar-button-clear-ios-bright:hover:not(.disable-hover),.toolbar-ios-vibrant .bar-button-default.bar-button-ios-bright:hover:not(.disable-hover){color:#ffc125}.toolbar-ios-vibrant .bar-button-bright-ios.activated,.toolbar-ios-vibrant .bar-button-clear-ios-bright.activated,.toolbar-ios-vibrant .bar-button-default.bar-button-ios-bright.activated{opacity:.4}.toolbar-ios-vibrant .bar-button-outline-ios-bright{border-color:#ffc125;color:#ffc125;background-color:transparent}.toolbar-ios-vibrant .bar-button-outline-ios-bright.activated{color:#000;background-color:#ffc125}.toolbar-ios-vibrant .bar-button-solid-ios-bright{color:#000;background-color:#ffc125}.toolbar-ios-vibrant .bar-button-solid-ios-bright.activated{color:#000;background-color:#ebb222}.bar-button-clear-ios-vibrant,.bar-button-default.bar-button-ios-vibrant,.bar-button-vibrant-ios{color:#663399;background-color:transparent}.bar-button-clear-ios-vibrant:hover:not(.disable-hover),.bar-button-default.bar-button-ios-vibrant:hover:not(.disable-hover),.bar-button-vibrant-ios:hover:not(.disable-hover){color:#663399}.bar-button-clear-ios-vibrant.activated,.bar-button-default.bar-button-ios-vibrant.activated,.bar-button-vibrant-ios.activated{opacity:.4}.bar-button-outline-ios-vibrant{border-color:#663399;color:#663399;background-color:transparent}.bar-button-outline-ios-vibrant.activated{color:#fff;background-color:#663399}.bar-button-solid-ios-vibrant{color:#fff;background-color:#663399}.bar-button-solid-ios-vibrant.activated{color:#fff;background-color:#7243a1}.toolbar-ios-bright .toolbar-background-ios{background:#ffc125}.toolbar-ios-bright .bar-button-clear-ios,.toolbar-ios-bright .bar-button-default-ios,.toolbar-ios-bright .toolbar-title-ios{color:#000}.toolbar-ios-bright .bar-button-clear-ios-primary,.toolbar-ios-bright .bar-button-default.bar-button-ios-primary,.toolbar-ios-bright .bar-button-primary-ios{color:#488aff;background-color:transparent}.toolbar-ios-bright .bar-button-clear-ios-primary:hover:not(.disable-hover),.toolbar-ios-bright .bar-button-default.bar-button-ios-primary:hover:not(.disable-hover),.toolbar-ios-bright .bar-button-primary-ios:hover:not(.disable-hover){color:#488aff}.toolbar-ios-bright .bar-button-clear-ios-primary.activated,.toolbar-ios-bright .bar-button-default.bar-button-ios-primary.activated,.toolbar-ios-bright .bar-button-primary-ios.activated{opacity:.4}.toolbar-ios-bright .bar-button-outline-ios-primary{border-color:#488aff;color:#488aff;background-color:transparent}.toolbar-ios-bright .bar-button-outline-ios-primary.activated{color:#fff;background-color:#488aff}.toolbar-ios-bright .bar-button-solid-ios-primary{color:#fff;background-color:#488aff}.toolbar-ios-bright .bar-button-solid-ios-primary.activated{color:#fff;background-color:#427feb}.toolbar-ios-bright .bar-button-clear-ios-secondary,.toolbar-ios-bright .bar-button-default.bar-button-ios-secondary,.toolbar-ios-bright .bar-button-secondary-ios{color:#32db64;background-color:transparent}.toolbar-ios-bright .bar-button-clear-ios-secondary:hover:not(.disable-hover),.toolbar-ios-bright .bar-button-default.bar-button-ios-secondary:hover:not(.disable-hover),.toolbar-ios-bright .bar-button-secondary-ios:hover:not(.disable-hover){color:#32db64}.toolbar-ios-bright .bar-button-clear-ios-secondary.activated,.toolbar-ios-bright .bar-button-default.bar-button-ios-secondary.activated,.toolbar-ios-bright .bar-button-secondary-ios.activated{opacity:.4}.toolbar-ios-bright .bar-button-outline-ios-secondary{border-color:#32db64;color:#32db64;background-color:transparent}.toolbar-ios-bright .bar-button-outline-ios-secondary.activated{color:#fff;background-color:#32db64}.toolbar-ios-bright .bar-button-solid-ios-secondary{color:#fff;background-color:#32db64}.toolbar-ios-bright .bar-button-solid-ios-secondary.activated{color:#fff;background-color:#2ec95c}.toolbar-ios-bright .bar-button-clear-ios-danger,.toolbar-ios-bright .bar-button-danger-ios,.toolbar-ios-bright .bar-button-default.bar-button-ios-danger{color:#f53d3d;background-color:transparent}.toolbar-ios-bright .bar-button-clear-ios-danger:hover:not(.disable-hover),.toolbar-ios-bright .bar-button-danger-ios:hover:not(.disable-hover),.toolbar-ios-bright .bar-button-default.bar-button-ios-danger:hover:not(.disable-hover){color:#f53d3d}.toolbar-ios-bright .bar-button-clear-ios-danger.activated,.toolbar-ios-bright .bar-button-danger-ios.activated,.toolbar-ios-bright .bar-button-default.bar-button-ios-danger.activated{opacity:.4}.toolbar-ios-bright .bar-button-outline-ios-danger{border-color:#f53d3d;color:#f53d3d;background-color:transparent}.toolbar-ios-bright .bar-button-outline-ios-danger.activated{color:#fff;background-color:#f53d3d}.toolbar-ios-bright .bar-button-solid-ios-danger{color:#fff;background-color:#f53d3d}.toolbar-ios-bright .bar-button-solid-ios-danger.activated{color:#fff;background-color:#e13838}.toolbar-ios-bright .bar-button-clear-ios-light,.toolbar-ios-bright .bar-button-default.bar-button-ios-light,.toolbar-ios-bright .bar-button-light-ios{color:#f4f4f4;background-color:transparent}.toolbar-ios-bright .bar-button-clear-ios-light:hover:not(.disable-hover),.toolbar-ios-bright .bar-button-default.bar-button-ios-light:hover:not(.disable-hover),.toolbar-ios-bright .bar-button-light-ios:hover:not(.disable-hover){color:#f4f4f4}.toolbar-ios-bright .bar-button-clear-ios-light.activated,.toolbar-ios-bright .bar-button-default.bar-button-ios-light.activated,.toolbar-ios-bright .bar-button-light-ios.activated{opacity:.4}.toolbar-ios-bright .bar-button-outline-ios-light{border-color:#f4f4f4;color:#f4f4f4;background-color:transparent}.toolbar-ios-bright .bar-button-outline-ios-light.activated{color:#000;background-color:#f4f4f4}.toolbar-ios-bright .bar-button-solid-ios-light{color:#000;background-color:#f4f4f4}.toolbar-ios-bright .bar-button-solid-ios-light.activated{color:#000;background-color:#e0e0e0}.toolbar-ios-bright .bar-button-clear-ios-dark,.toolbar-ios-bright .bar-button-dark-ios,.toolbar-ios-bright .bar-button-default.bar-button-ios-dark{color:#222;background-color:transparent}.toolbar-ios-bright .bar-button-clear-ios-dark:hover:not(.disable-hover),.toolbar-ios-bright .bar-button-dark-ios:hover:not(.disable-hover),.toolbar-ios-bright .bar-button-default.bar-button-ios-dark:hover:not(.disable-hover){color:#222}.toolbar-ios-bright .bar-button-clear-ios-dark.activated,.toolbar-ios-bright .bar-button-dark-ios.activated,.toolbar-ios-bright .bar-button-default.bar-button-ios-dark.activated{opacity:.4}.toolbar-ios-bright .bar-button-outline-ios-dark{border-color:#222;color:#222;background-color:transparent}.toolbar-ios-bright .bar-button-outline-ios-dark.activated{color:#fff;background-color:#222}.toolbar-ios-bright .bar-button-solid-ios-dark{color:#fff;background-color:#222}.toolbar-ios-bright .bar-button-solid-ios-dark.activated{color:#fff;background-color:#343434}.toolbar-ios-bright .bar-button-clear-ios-energized,.toolbar-ios-bright .bar-button-default.bar-button-ios-energized,.toolbar-ios-bright .bar-button-energized-ios{color:#ffc527;background-color:transparent}.toolbar-ios-bright .bar-button-clear-ios-energized:hover:not(.disable-hover),.toolbar-ios-bright .bar-button-default.bar-button-ios-energized:hover:not(.disable-hover),.toolbar-ios-bright .bar-button-energized-ios:hover:not(.disable-hover){color:#ffc527}.toolbar-ios-bright .bar-button-clear-ios-energized.activated,.toolbar-ios-bright .bar-button-default.bar-button-ios-energized.activated,.toolbar-ios-bright .bar-button-energized-ios.activated{opacity:.4}.toolbar-ios-bright .bar-button-outline-ios-energized{border-color:#ffc527;color:#ffc527;background-color:transparent}.toolbar-ios-bright .bar-button-outline-ios-energized.activated{color:#000;background-color:#ffc527}.toolbar-ios-bright .bar-button-solid-ios-energized{color:#000;background-color:#ffc527}.toolbar-ios-bright .bar-button-solid-ios-energized.activated{color:#000;background-color:#ebb524}.toolbar-ios-bright .bar-button-clear-ios-royal,.toolbar-ios-bright .bar-button-default.bar-button-ios-royal,.toolbar-ios-bright .bar-button-royal-ios{color:#7e60ff;background-color:transparent}.toolbar-ios-bright .bar-button-clear-ios-royal:hover:not(.disable-hover),.toolbar-ios-bright .bar-button-default.bar-button-ios-royal:hover:not(.disable-hover),.toolbar-ios-bright .bar-button-royal-ios:hover:not(.disable-hover){color:#7e60ff}.toolbar-ios-bright .bar-button-clear-ios-royal.activated,.toolbar-ios-bright .bar-button-default.bar-button-ios-royal.activated,.toolbar-ios-bright .bar-button-royal-ios.activated{opacity:.4}.toolbar-ios-bright .bar-button-outline-ios-royal{border-color:#7e60ff;color:#7e60ff;background-color:transparent}.toolbar-ios-bright .bar-button-outline-ios-royal.activated{color:#fff;background-color:#7e60ff}.toolbar-ios-bright .bar-button-solid-ios-royal{color:#fff;background-color:#7e60ff}.toolbar-ios-bright .bar-button-solid-ios-royal.activated{color:#fff;background-color:#7458eb}.toolbar-ios-bright .bar-button-clear-ios-subtle,.toolbar-ios-bright .bar-button-default.bar-button-ios-subtle,.toolbar-ios-bright .bar-button-subtle-ios{color:#444;background-color:transparent}.toolbar-ios-bright .bar-button-clear-ios-subtle:hover:not(.disable-hover),.toolbar-ios-bright .bar-button-default.bar-button-ios-subtle:hover:not(.disable-hover),.toolbar-ios-bright .bar-button-subtle-ios:hover:not(.disable-hover){color:#444}.toolbar-ios-bright .bar-button-clear-ios-subtle.activated,.toolbar-ios-bright .bar-button-default.bar-button-ios-subtle.activated,.toolbar-ios-bright .bar-button-subtle-ios.activated{opacity:.4}.toolbar-ios-bright .bar-button-outline-ios-subtle{border-color:#444;color:#444;background-color:transparent}.toolbar-ios-bright .bar-button-outline-ios-subtle.activated{color:#fff;background-color:#444}.toolbar-ios-bright .bar-button-solid-ios-subtle{color:#fff;background-color:#444}.toolbar-ios-bright .bar-button-solid-ios-subtle.activated{color:#fff;background-color:#535353}.toolbar-ios-bright .bar-button-clear-ios-vibrant,.toolbar-ios-bright .bar-button-default.bar-button-ios-vibrant,.toolbar-ios-bright .bar-button-vibrant-ios{color:#663399;background-color:transparent}.toolbar-ios-bright .bar-button-clear-ios-vibrant:hover:not(.disable-hover),.toolbar-ios-bright .bar-button-default.bar-button-ios-vibrant:hover:not(.disable-hover),.toolbar-ios-bright .bar-button-vibrant-ios:hover:not(.disable-hover){color:#663399}.toolbar-ios-bright .bar-button-clear-ios-vibrant.activated,.toolbar-ios-bright .bar-button-default.bar-button-ios-vibrant.activated,.toolbar-ios-bright .bar-button-vibrant-ios.activated{opacity:.4}.toolbar-ios-bright .bar-button-outline-ios-vibrant{border-color:#663399;color:#663399;background-color:transparent}.toolbar-ios-bright .bar-button-outline-ios-vibrant.activated{color:#fff;background-color:#663399}.toolbar-ios-bright .bar-button-solid-ios-vibrant{color:#fff;background-color:#663399}.toolbar-ios-bright .bar-button-solid-ios-vibrant.activated{color:#fff;background-color:#7243a1}.toolbar-ios-bright .bar-button-bright-ios,.toolbar-ios-bright .bar-button-clear-ios-bright,.toolbar-ios-bright .bar-button-default.bar-button-ios-bright{color:#ffc125;background-color:transparent}.toolbar-ios-bright .bar-button-bright-ios:hover:not(.disable-hover),.toolbar-ios-bright .bar-button-clear-ios-bright:hover:not(.disable-hover),.toolbar-ios-bright .bar-button-default.bar-button-ios-bright:hover:not(.disable-hover){color:#ffc125}.toolbar-ios-bright .bar-button-bright-ios.activated,.toolbar-ios-bright .bar-button-clear-ios-bright.activated,.toolbar-ios-bright .bar-button-default.bar-button-ios-bright.activated{opacity:.4}.toolbar-ios-bright .bar-button-outline-ios-bright{border-color:#ffc125;color:#ffc125;background-color:transparent}.toolbar-ios-bright .bar-button-outline-ios-bright.activated{color:#000;background-color:#ffc125}.toolbar-ios-bright .bar-button-solid-ios-bright{color:#000;background-color:#ffc125}.toolbar-ios-bright .bar-button-solid-ios-bright.activated{color:#000;background-color:#ebb222}.bar-button-bright-ios,.bar-button-clear-ios-bright,.bar-button-default.bar-button-ios-bright{color:#ffc125;background-color:transparent}.bar-button-bright-ios:hover:not(.disable-hover),.bar-button-clear-ios-bright:hover:not(.disable-hover),.bar-button-default.bar-button-ios-bright:hover:not(.disable-hover){color:#ffc125}.bar-button-bright-ios.activated,.bar-button-clear-ios-bright.activated,.bar-button-default.bar-button-ios-bright.activated{opacity:.4}.bar-button-outline-ios-bright{border-color:#ffc125;color:#ffc125;background-color:transparent}.bar-button-outline-ios-bright.activated{color:#000;background-color:#ffc125}.bar-button-solid-ios-bright{color:#000;background-color:#ffc125}.bar-button-solid-ios-bright.activated{color:#000;background-color:#ebb222}.bar-button-strong-ios{font-weight:600}.toolbar-md{padding:4px;min-height:56px}.toolbar-background-md{border-color:#b2b2b2;background:#488aff}.footer-md::before,.header-md::after,.tabs-md[tabsPlacement=bottom]>.tabbar::before,.tabs-md[tabsPlacement=top]>.tabbar::after{left:0;bottom:-5px;background-position:left 0 top -2px;position:absolute;width:100%;height:5px;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAHBAMAAADzDtBxAAAAD1BMVEUAAAAAAAAAAAAAAAAAAABPDueNAAAABXRSTlMUCS0gBIh/TXEAAAAaSURBVAjXYxCEAgY4UIICBmMogMsgFLtAAQCNSwXZKOdPxgAAAABJRU5ErkJggg==);background-repeat:repeat-x;content:\"\"}.footer-md::before,.tabs-md[tabsPlacement=bottom]>.tabbar::before{top:-2px;bottom:auto;background-position:left 0 top 0;height:2px}.footer-md[no-border]::before,.header-md[no-border]::after,.tabs-md[tabsPlacement=bottom][no-border]>.tabbar::before,.tabs-md[tabsPlacement=top][no-border]>.tabbar::after{display:none}.toolbar-content-md{-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1;-webkit-box-ordinal-group:4;-webkit-order:3;-ms-flex-order:3;order:3;min-width:0;max-width:100%}.toolbar-title-md{padding:0 12px;font-size:2rem;font-weight:500;color:#fff}.bar-buttons-md{-webkit-box-ordinal-group:5;-webkit-order:4;-ms-flex-order:4;order:4;-webkit-transform:translateZ(0);transform:translateZ(0)}.bar-buttons-md[left]{-webkit-box-ordinal-group:3;-webkit-order:2;-ms-flex-order:2;order:2}.bar-button-md:first-child{margin-left:0}.bar-buttons-md[end]{text-align:right;text-align:end;-webkit-box-ordinal-group:6;-webkit-order:5;-ms-flex-order:5;order:5}.bar-buttons-md[right]{text-align:right;-webkit-box-ordinal-group:7;-webkit-order:6;-ms-flex-order:6;order:6}.bar-button-md{margin:0 .2rem;padding:0 5px;border-radius:2px;height:32px;border:0;font-size:1.4rem;font-weight:500;text-transform:uppercase}.bar-button-outline-md,.bar-button-solid-md{overflow:hidden}.bar-button-outline-md{border-width:1px;border-style:solid;border-color:#fff;color:#fff;background-color:transparent}.bar-button-outline-md:hover:not(.disable-hover){opacity:.4}.bar-button-outline-md.activated{background-color:transparent}.bar-button-outline-md .button-effect{background-color:#fff}.bar-button-solid-md{color:#424242;background-color:#fff}.bar-button-solid-md:hover:not(.disable-hover){color:#424242}.bar-button-solid-md.activated{color:#424242;background-color:#ebebeb}.bar-button-md.bar-button-icon-start ion-icon{padding-right:.3em;font-size:1.4em;line-height:.67;pointer-events:none}.bar-button-md.bar-button-icon-end ion-icon{padding-left:.4em;font-size:1.4em;line-height:.67;pointer-events:none}.bar-button-md[icon-only]{padding:0}.bar-button-md[icon-only] ion-icon{padding:0 .1em;min-width:28px;font-size:1.8em;line-height:.67;pointer-events:none}.back-button-md{margin:0 6px;min-width:44px;-webkit-box-shadow:none;box-shadow:none}.back-button-icon-md{margin:0;padding:0 6px;text-align:left;text-align:start;font-size:2.4rem;font-weight:400}.bar-button-menutoggle-md{margin:0 6px;padding:0 2px;-webkit-box-ordinal-group:2;-webkit-order:1;-ms-flex-order:1;order:1;min-width:44px}.bar-button-menutoggle-md ion-icon{padding:0 6px;font-size:2.4rem}.bar-button-menutoggle-md[end],.bar-button-menutoggle-md[right]{margin:0 2px;-webkit-box-ordinal-group:8;-webkit-order:7;-ms-flex-order:7;order:7;min-width:28px}.bar-button-clear-md-default,.bar-button-default-md,.bar-button-md-default{color:#fff;background-color:transparent}.bar-button-clear-md-default:hover:not(.disable-hover),.bar-button-default-md:hover:not(.disable-hover),.bar-button-md-default:hover:not(.disable-hover){color:#fff}.bar-button-clear-md,.bar-button-clear-md-clear,.bar-button-md-clear{color:#fff;background-color:transparent}.bar-button-clear-md-clear:hover:not(.disable-hover),.bar-button-clear-md:hover:not(.disable-hover),.bar-button-md-clear:hover:not(.disable-hover){color:#fff}.toolbar-md-primary .toolbar-background-md{background:#488aff}.toolbar-md-primary .bar-button-clear-md,.toolbar-md-primary .bar-button-default-md,.toolbar-md-primary .bar-button-outline-md,.toolbar-md-primary .toolbar-title-md{color:#fff}.toolbar-md-primary .bar-button-clear-md .button-effect,.toolbar-md-primary .bar-button-default-md .button-effect,.toolbar-md-primary .bar-button-outline-md .button-effect{background-color:#fff}.toolbar-md-primary .bar-button-outline-md{border-color:#fff}.toolbar-md-primary .bar-button-clear-md-primary,.toolbar-md-primary .bar-button-md-primary,.toolbar-md-primary .bar-button-primary-md{color:#488aff;background-color:transparent}.toolbar-md-primary .bar-button-clear-md-primary:hover:not(.disable-hover),.toolbar-md-primary .bar-button-md-primary:hover:not(.disable-hover),.toolbar-md-primary .bar-button-primary-md:hover:not(.disable-hover){color:#488aff}.toolbar-md-primary .bar-button-outline-md-primary{border-color:#427feb;color:#427feb;background-color:transparent}.toolbar-md-primary .bar-button-outline-md-primary.activated{background-color:transparent}.toolbar-md-primary .bar-button-outline-md-primary .button-effect{background-color:#427feb}.toolbar-md-primary .bar-button-solid-md-primary{color:#fff;background-color:#488aff}.toolbar-md-primary .bar-button-solid-md-primary.activated{color:#fff;background-color:#427feb}.toolbar-md-primary .bar-button-clear-md-secondary,.toolbar-md-primary .bar-button-md-secondary,.toolbar-md-primary .bar-button-secondary-md{color:#32db64;background-color:transparent}.toolbar-md-primary .bar-button-clear-md-secondary:hover:not(.disable-hover),.toolbar-md-primary .bar-button-md-secondary:hover:not(.disable-hover),.toolbar-md-primary .bar-button-secondary-md:hover:not(.disable-hover){color:#32db64}.toolbar-md-primary .bar-button-outline-md-secondary{border-color:#2ec95c;color:#2ec95c;background-color:transparent}.toolbar-md-primary .bar-button-outline-md-secondary.activated{background-color:transparent}.toolbar-md-primary .bar-button-outline-md-secondary .button-effect{background-color:#2ec95c}.toolbar-md-primary .bar-button-solid-md-secondary{color:#fff;background-color:#32db64}.toolbar-md-primary .bar-button-solid-md-secondary.activated{color:#fff;background-color:#2ec95c}.toolbar-md-primary .bar-button-clear-md-danger,.toolbar-md-primary .bar-button-danger-md,.toolbar-md-primary .bar-button-md-danger{color:#f53d3d;background-color:transparent}.toolbar-md-primary .bar-button-clear-md-danger:hover:not(.disable-hover),.toolbar-md-primary .bar-button-danger-md:hover:not(.disable-hover),.toolbar-md-primary .bar-button-md-danger:hover:not(.disable-hover){color:#f53d3d}.toolbar-md-primary .bar-button-outline-md-danger{border-color:#e13838;color:#e13838;background-color:transparent}.toolbar-md-primary .bar-button-outline-md-danger.activated{background-color:transparent}.toolbar-md-primary .bar-button-outline-md-danger .button-effect{background-color:#e13838}.toolbar-md-primary .bar-button-solid-md-danger{color:#fff;background-color:#f53d3d}.toolbar-md-primary .bar-button-solid-md-danger.activated{color:#fff;background-color:#e13838}.toolbar-md-primary .bar-button-clear-md-light,.toolbar-md-primary .bar-button-light-md,.toolbar-md-primary .bar-button-md-light{color:#f4f4f4;background-color:transparent}.toolbar-md-primary .bar-button-clear-md-light:hover:not(.disable-hover),.toolbar-md-primary .bar-button-light-md:hover:not(.disable-hover),.toolbar-md-primary .bar-button-md-light:hover:not(.disable-hover){color:#f4f4f4}.toolbar-md-primary .bar-button-outline-md-light{border-color:#e0e0e0;color:#e0e0e0;background-color:transparent}.toolbar-md-primary .bar-button-outline-md-light.activated{background-color:transparent}.toolbar-md-primary .bar-button-outline-md-light .button-effect{background-color:#e0e0e0}.toolbar-md-primary .bar-button-solid-md-light{color:#424242;background-color:#f4f4f4}.toolbar-md-primary .bar-button-solid-md-light.activated{color:#424242;background-color:#e0e0e0}.toolbar-md-primary .bar-button-clear-md-dark,.toolbar-md-primary .bar-button-dark-md,.toolbar-md-primary .bar-button-md-dark{color:#222;background-color:transparent}.toolbar-md-primary .bar-button-clear-md-dark:hover:not(.disable-hover),.toolbar-md-primary .bar-button-dark-md:hover:not(.disable-hover),.toolbar-md-primary .bar-button-md-dark:hover:not(.disable-hover){color:#222}.toolbar-md-primary .bar-button-outline-md-dark{border-color:#343434;color:#343434;background-color:transparent}.toolbar-md-primary .bar-button-outline-md-dark.activated{background-color:transparent}.toolbar-md-primary .bar-button-outline-md-dark .button-effect{background-color:#343434}.toolbar-md-primary .bar-button-solid-md-dark{color:#fff;background-color:#222}.toolbar-md-primary .bar-button-solid-md-dark.activated{color:#fff;background-color:#343434}.toolbar-md-primary .bar-button-clear-md-energized,.toolbar-md-primary .bar-button-energized-md,.toolbar-md-primary .bar-button-md-energized{color:#ffc527;background-color:transparent}.toolbar-md-primary .bar-button-clear-md-energized:hover:not(.disable-hover),.toolbar-md-primary .bar-button-energized-md:hover:not(.disable-hover),.toolbar-md-primary .bar-button-md-energized:hover:not(.disable-hover){color:#ffc527}.toolbar-md-primary .bar-button-outline-md-energized{border-color:#ebb524;color:#ebb524;background-color:transparent}.toolbar-md-primary .bar-button-outline-md-energized.activated{background-color:transparent}.toolbar-md-primary .bar-button-outline-md-energized .button-effect{background-color:#ebb524}.toolbar-md-primary .bar-button-solid-md-energized{color:#424242;background-color:#ffc527}.toolbar-md-primary .bar-button-solid-md-energized.activated{color:#424242;background-color:#ebb524}.toolbar-md-primary .bar-button-clear-md-royal,.toolbar-md-primary .bar-button-md-royal,.toolbar-md-primary .bar-button-royal-md{color:#7e60ff;background-color:transparent}.toolbar-md-primary .bar-button-clear-md-royal:hover:not(.disable-hover),.toolbar-md-primary .bar-button-md-royal:hover:not(.disable-hover),.toolbar-md-primary .bar-button-royal-md:hover:not(.disable-hover){color:#7e60ff}.toolbar-md-primary .bar-button-outline-md-royal{border-color:#7458eb;color:#7458eb;background-color:transparent}.toolbar-md-primary .bar-button-outline-md-royal.activated{background-color:transparent}.toolbar-md-primary .bar-button-outline-md-royal .button-effect{background-color:#7458eb}.toolbar-md-primary .bar-button-solid-md-royal{color:#fff;background-color:#7e60ff}.toolbar-md-primary .bar-button-solid-md-royal.activated{color:#fff;background-color:#7458eb}.toolbar-md-primary .bar-button-clear-md-subtle,.toolbar-md-primary .bar-button-md-subtle,.toolbar-md-primary .bar-button-subtle-md{color:#444;background-color:transparent}.toolbar-md-primary .bar-button-clear-md-subtle:hover:not(.disable-hover),.toolbar-md-primary .bar-button-md-subtle:hover:not(.disable-hover),.toolbar-md-primary .bar-button-subtle-md:hover:not(.disable-hover){color:#444}.toolbar-md-primary .bar-button-outline-md-subtle{border-color:#535353;color:#535353;background-color:transparent}.toolbar-md-primary .bar-button-outline-md-subtle.activated{background-color:transparent}.toolbar-md-primary .bar-button-outline-md-subtle .button-effect{background-color:#535353}.toolbar-md-primary .bar-button-solid-md-subtle{color:#fff;background-color:#444}.toolbar-md-primary .bar-button-solid-md-subtle.activated{color:#fff;background-color:#535353}.toolbar-md-primary .bar-button-clear-md-vibrant,.toolbar-md-primary .bar-button-md-vibrant,.toolbar-md-primary .bar-button-vibrant-md{color:#663399;background-color:transparent}.toolbar-md-primary .bar-button-clear-md-vibrant:hover:not(.disable-hover),.toolbar-md-primary .bar-button-md-vibrant:hover:not(.disable-hover),.toolbar-md-primary .bar-button-vibrant-md:hover:not(.disable-hover){color:#663399}.toolbar-md-primary .bar-button-outline-md-vibrant{border-color:#7243a1;color:#7243a1;background-color:transparent}.toolbar-md-primary .bar-button-outline-md-vibrant.activated{background-color:transparent}.toolbar-md-primary .bar-button-outline-md-vibrant .button-effect{background-color:#7243a1}.toolbar-md-primary .bar-button-solid-md-vibrant{color:#fff;background-color:#663399}.toolbar-md-primary .bar-button-solid-md-vibrant.activated{color:#fff;background-color:#7243a1}.toolbar-md-primary .bar-button-bright-md,.toolbar-md-primary .bar-button-clear-md-bright,.toolbar-md-primary .bar-button-md-bright{color:#ffc125;background-color:transparent}.toolbar-md-primary .bar-button-bright-md:hover:not(.disable-hover),.toolbar-md-primary .bar-button-clear-md-bright:hover:not(.disable-hover),.toolbar-md-primary .bar-button-md-bright:hover:not(.disable-hover){color:#ffc125}.toolbar-md-primary .bar-button-outline-md-bright{border-color:#ebb222;color:#ebb222;background-color:transparent}.toolbar-md-primary .bar-button-outline-md-bright.activated{background-color:transparent}.toolbar-md-primary .bar-button-outline-md-bright .button-effect{background-color:#ebb222}.toolbar-md-primary .bar-button-solid-md-bright{color:#424242;background-color:#ffc125}.toolbar-md-primary .bar-button-solid-md-bright.activated{color:#424242;background-color:#ebb222}.bar-button-clear-md-primary,.bar-button-md-primary,.bar-button-primary-md{color:#488aff;background-color:transparent}.bar-button-clear-md-primary:hover:not(.disable-hover),.bar-button-md-primary:hover:not(.disable-hover),.bar-button-primary-md:hover:not(.disable-hover){color:#488aff}.bar-button-outline-md-primary{border-color:#427feb;color:#427feb;background-color:transparent}.bar-button-outline-md-primary.activated{background-color:transparent}.bar-button-outline-md-primary .button-effect{background-color:#427feb}.bar-button-solid-md-primary{color:#fff;background-color:#488aff}.bar-button-solid-md-primary.activated{color:#fff;background-color:#427feb}.toolbar-md-secondary .toolbar-background-md{background:#32db64}.toolbar-md-secondary .bar-button-clear-md,.toolbar-md-secondary .bar-button-default-md,.toolbar-md-secondary .bar-button-outline-md,.toolbar-md-secondary .toolbar-title-md{color:#fff}.toolbar-md-secondary .bar-button-clear-md .button-effect,.toolbar-md-secondary .bar-button-default-md .button-effect,.toolbar-md-secondary .bar-button-outline-md .button-effect{background-color:#fff}.toolbar-md-secondary .bar-button-outline-md{border-color:#fff}.toolbar-md-secondary .bar-button-clear-md-primary,.toolbar-md-secondary .bar-button-md-primary,.toolbar-md-secondary .bar-button-primary-md{color:#488aff;background-color:transparent}.toolbar-md-secondary .bar-button-clear-md-primary:hover:not(.disable-hover),.toolbar-md-secondary .bar-button-md-primary:hover:not(.disable-hover),.toolbar-md-secondary .bar-button-primary-md:hover:not(.disable-hover){color:#488aff}.toolbar-md-secondary .bar-button-outline-md-primary{border-color:#427feb;color:#427feb;background-color:transparent}.toolbar-md-secondary .bar-button-outline-md-primary.activated{background-color:transparent}.toolbar-md-secondary .bar-button-outline-md-primary .button-effect{background-color:#427feb}.toolbar-md-secondary .bar-button-solid-md-primary{color:#fff;background-color:#488aff}.toolbar-md-secondary .bar-button-solid-md-primary.activated{color:#fff;background-color:#427feb}.toolbar-md-secondary .bar-button-clear-md-secondary,.toolbar-md-secondary .bar-button-md-secondary,.toolbar-md-secondary .bar-button-secondary-md{color:#32db64;background-color:transparent}.toolbar-md-secondary .bar-button-clear-md-secondary:hover:not(.disable-hover),.toolbar-md-secondary .bar-button-md-secondary:hover:not(.disable-hover),.toolbar-md-secondary .bar-button-secondary-md:hover:not(.disable-hover){color:#32db64}.toolbar-md-secondary .bar-button-outline-md-secondary{border-color:#2ec95c;color:#2ec95c;background-color:transparent}.toolbar-md-secondary .bar-button-outline-md-secondary.activated{background-color:transparent}.toolbar-md-secondary .bar-button-outline-md-secondary .button-effect{background-color:#2ec95c}.toolbar-md-secondary .bar-button-solid-md-secondary{color:#fff;background-color:#32db64}.toolbar-md-secondary .bar-button-solid-md-secondary.activated{color:#fff;background-color:#2ec95c}.toolbar-md-secondary .bar-button-clear-md-danger,.toolbar-md-secondary .bar-button-danger-md,.toolbar-md-secondary .bar-button-md-danger{color:#f53d3d;background-color:transparent}.toolbar-md-secondary .bar-button-clear-md-danger:hover:not(.disable-hover),.toolbar-md-secondary .bar-button-danger-md:hover:not(.disable-hover),.toolbar-md-secondary .bar-button-md-danger:hover:not(.disable-hover){color:#f53d3d}.toolbar-md-secondary .bar-button-outline-md-danger{border-color:#e13838;color:#e13838;background-color:transparent}.toolbar-md-secondary .bar-button-outline-md-danger.activated{background-color:transparent}.toolbar-md-secondary .bar-button-outline-md-danger .button-effect{background-color:#e13838}.toolbar-md-secondary .bar-button-solid-md-danger{color:#fff;background-color:#f53d3d}.toolbar-md-secondary .bar-button-solid-md-danger.activated{color:#fff;background-color:#e13838}.toolbar-md-secondary .bar-button-clear-md-light,.toolbar-md-secondary .bar-button-light-md,.toolbar-md-secondary .bar-button-md-light{color:#f4f4f4;background-color:transparent}.toolbar-md-secondary .bar-button-clear-md-light:hover:not(.disable-hover),.toolbar-md-secondary .bar-button-light-md:hover:not(.disable-hover),.toolbar-md-secondary .bar-button-md-light:hover:not(.disable-hover){color:#f4f4f4}.toolbar-md-secondary .bar-button-outline-md-light{border-color:#e0e0e0;color:#e0e0e0;background-color:transparent}.toolbar-md-secondary .bar-button-outline-md-light.activated{background-color:transparent}.toolbar-md-secondary .bar-button-outline-md-light .button-effect{background-color:#e0e0e0}.toolbar-md-secondary .bar-button-solid-md-light{color:#424242;background-color:#f4f4f4}.toolbar-md-secondary .bar-button-solid-md-light.activated{color:#424242;background-color:#e0e0e0}.toolbar-md-secondary .bar-button-clear-md-dark,.toolbar-md-secondary .bar-button-dark-md,.toolbar-md-secondary .bar-button-md-dark{color:#222;background-color:transparent}.toolbar-md-secondary .bar-button-clear-md-dark:hover:not(.disable-hover),.toolbar-md-secondary .bar-button-dark-md:hover:not(.disable-hover),.toolbar-md-secondary .bar-button-md-dark:hover:not(.disable-hover){color:#222}.toolbar-md-secondary .bar-button-outline-md-dark{border-color:#343434;color:#343434;background-color:transparent}.toolbar-md-secondary .bar-button-outline-md-dark.activated{background-color:transparent}.toolbar-md-secondary .bar-button-outline-md-dark .button-effect{background-color:#343434}.toolbar-md-secondary .bar-button-solid-md-dark{color:#fff;background-color:#222}.toolbar-md-secondary .bar-button-solid-md-dark.activated{color:#fff;background-color:#343434}.toolbar-md-secondary .bar-button-clear-md-energized,.toolbar-md-secondary .bar-button-energized-md,.toolbar-md-secondary .bar-button-md-energized{color:#ffc527;background-color:transparent}.toolbar-md-secondary .bar-button-clear-md-energized:hover:not(.disable-hover),.toolbar-md-secondary .bar-button-energized-md:hover:not(.disable-hover),.toolbar-md-secondary .bar-button-md-energized:hover:not(.disable-hover){color:#ffc527}.toolbar-md-secondary .bar-button-outline-md-energized{border-color:#ebb524;color:#ebb524;background-color:transparent}.toolbar-md-secondary .bar-button-outline-md-energized.activated{background-color:transparent}.toolbar-md-secondary .bar-button-outline-md-energized .button-effect{background-color:#ebb524}.toolbar-md-secondary .bar-button-solid-md-energized{color:#424242;background-color:#ffc527}.toolbar-md-secondary .bar-button-solid-md-energized.activated{color:#424242;background-color:#ebb524}.toolbar-md-secondary .bar-button-clear-md-royal,.toolbar-md-secondary .bar-button-md-royal,.toolbar-md-secondary .bar-button-royal-md{color:#7e60ff;background-color:transparent}.toolbar-md-secondary .bar-button-clear-md-royal:hover:not(.disable-hover),.toolbar-md-secondary .bar-button-md-royal:hover:not(.disable-hover),.toolbar-md-secondary .bar-button-royal-md:hover:not(.disable-hover){color:#7e60ff}.toolbar-md-secondary .bar-button-outline-md-royal{border-color:#7458eb;color:#7458eb;background-color:transparent}.toolbar-md-secondary .bar-button-outline-md-royal.activated{background-color:transparent}.toolbar-md-secondary .bar-button-outline-md-royal .button-effect{background-color:#7458eb}.toolbar-md-secondary .bar-button-solid-md-royal{color:#fff;background-color:#7e60ff}.toolbar-md-secondary .bar-button-solid-md-royal.activated{color:#fff;background-color:#7458eb}.toolbar-md-secondary .bar-button-clear-md-subtle,.toolbar-md-secondary .bar-button-md-subtle,.toolbar-md-secondary .bar-button-subtle-md{color:#444;background-color:transparent}.toolbar-md-secondary .bar-button-clear-md-subtle:hover:not(.disable-hover),.toolbar-md-secondary .bar-button-md-subtle:hover:not(.disable-hover),.toolbar-md-secondary .bar-button-subtle-md:hover:not(.disable-hover){color:#444}.toolbar-md-secondary .bar-button-outline-md-subtle{border-color:#535353;color:#535353;background-color:transparent}.toolbar-md-secondary .bar-button-outline-md-subtle.activated{background-color:transparent}.toolbar-md-secondary .bar-button-outline-md-subtle .button-effect{background-color:#535353}.toolbar-md-secondary .bar-button-solid-md-subtle{color:#fff;background-color:#444}.toolbar-md-secondary .bar-button-solid-md-subtle.activated{color:#fff;background-color:#535353}.toolbar-md-secondary .bar-button-clear-md-vibrant,.toolbar-md-secondary .bar-button-md-vibrant,.toolbar-md-secondary .bar-button-vibrant-md{color:#663399;background-color:transparent}.toolbar-md-secondary .bar-button-clear-md-vibrant:hover:not(.disable-hover),.toolbar-md-secondary .bar-button-md-vibrant:hover:not(.disable-hover),.toolbar-md-secondary .bar-button-vibrant-md:hover:not(.disable-hover){color:#663399}.toolbar-md-secondary .bar-button-outline-md-vibrant{border-color:#7243a1;color:#7243a1;background-color:transparent}.toolbar-md-secondary .bar-button-outline-md-vibrant.activated{background-color:transparent}.toolbar-md-secondary .bar-button-outline-md-vibrant .button-effect{background-color:#7243a1}.toolbar-md-secondary .bar-button-solid-md-vibrant{color:#fff;background-color:#663399}.toolbar-md-secondary .bar-button-solid-md-vibrant.activated{color:#fff;background-color:#7243a1}.toolbar-md-secondary .bar-button-bright-md,.toolbar-md-secondary .bar-button-clear-md-bright,.toolbar-md-secondary .bar-button-md-bright{color:#ffc125;background-color:transparent}.toolbar-md-secondary .bar-button-bright-md:hover:not(.disable-hover),.toolbar-md-secondary .bar-button-clear-md-bright:hover:not(.disable-hover),.toolbar-md-secondary .bar-button-md-bright:hover:not(.disable-hover){color:#ffc125}.toolbar-md-secondary .bar-button-outline-md-bright{border-color:#ebb222;color:#ebb222;background-color:transparent}.toolbar-md-secondary .bar-button-outline-md-bright.activated{background-color:transparent}.toolbar-md-secondary .bar-button-outline-md-bright .button-effect{background-color:#ebb222}.toolbar-md-secondary .bar-button-solid-md-bright{color:#424242;background-color:#ffc125}.toolbar-md-secondary .bar-button-solid-md-bright.activated{color:#424242;background-color:#ebb222}.bar-button-clear-md-secondary,.bar-button-md-secondary,.bar-button-secondary-md{color:#32db64;background-color:transparent}.bar-button-clear-md-secondary:hover:not(.disable-hover),.bar-button-md-secondary:hover:not(.disable-hover),.bar-button-secondary-md:hover:not(.disable-hover){color:#32db64}.bar-button-outline-md-secondary{border-color:#2ec95c;color:#2ec95c;background-color:transparent}.bar-button-outline-md-secondary.activated{background-color:transparent}.bar-button-outline-md-secondary .button-effect{background-color:#2ec95c}.bar-button-solid-md-secondary{color:#fff;background-color:#32db64}.bar-button-solid-md-secondary.activated{color:#fff;background-color:#2ec95c}.toolbar-md-danger .toolbar-background-md{background:#f53d3d}.toolbar-md-danger .bar-button-clear-md,.toolbar-md-danger .bar-button-default-md,.toolbar-md-danger .bar-button-outline-md,.toolbar-md-danger .toolbar-title-md{color:#fff}.toolbar-md-danger .bar-button-clear-md .button-effect,.toolbar-md-danger .bar-button-default-md .button-effect,.toolbar-md-danger .bar-button-outline-md .button-effect{background-color:#fff}.toolbar-md-danger .bar-button-outline-md{border-color:#fff}.toolbar-md-danger .bar-button-clear-md-primary,.toolbar-md-danger .bar-button-md-primary,.toolbar-md-danger .bar-button-primary-md{color:#488aff;background-color:transparent}.toolbar-md-danger .bar-button-clear-md-primary:hover:not(.disable-hover),.toolbar-md-danger .bar-button-md-primary:hover:not(.disable-hover),.toolbar-md-danger .bar-button-primary-md:hover:not(.disable-hover){color:#488aff}.toolbar-md-danger .bar-button-outline-md-primary{border-color:#427feb;color:#427feb;background-color:transparent}.toolbar-md-danger .bar-button-outline-md-primary.activated{background-color:transparent}.toolbar-md-danger .bar-button-outline-md-primary .button-effect{background-color:#427feb}.toolbar-md-danger .bar-button-solid-md-primary{color:#fff;background-color:#488aff}.toolbar-md-danger .bar-button-solid-md-primary.activated{color:#fff;background-color:#427feb}.toolbar-md-danger .bar-button-clear-md-secondary,.toolbar-md-danger .bar-button-md-secondary,.toolbar-md-danger .bar-button-secondary-md{color:#32db64;background-color:transparent}.toolbar-md-danger .bar-button-clear-md-secondary:hover:not(.disable-hover),.toolbar-md-danger .bar-button-md-secondary:hover:not(.disable-hover),.toolbar-md-danger .bar-button-secondary-md:hover:not(.disable-hover){color:#32db64}.toolbar-md-danger .bar-button-outline-md-secondary{border-color:#2ec95c;color:#2ec95c;background-color:transparent}.toolbar-md-danger .bar-button-outline-md-secondary.activated{background-color:transparent}.toolbar-md-danger .bar-button-outline-md-secondary .button-effect{background-color:#2ec95c}.toolbar-md-danger .bar-button-solid-md-secondary{color:#fff;background-color:#32db64}.toolbar-md-danger .bar-button-solid-md-secondary.activated{color:#fff;background-color:#2ec95c}.toolbar-md-danger .bar-button-clear-md-danger,.toolbar-md-danger .bar-button-danger-md,.toolbar-md-danger .bar-button-md-danger{color:#f53d3d;background-color:transparent}.toolbar-md-danger .bar-button-clear-md-danger:hover:not(.disable-hover),.toolbar-md-danger .bar-button-danger-md:hover:not(.disable-hover),.toolbar-md-danger .bar-button-md-danger:hover:not(.disable-hover){color:#f53d3d}.toolbar-md-danger .bar-button-outline-md-danger{border-color:#e13838;color:#e13838;background-color:transparent}.toolbar-md-danger .bar-button-outline-md-danger.activated{background-color:transparent}.toolbar-md-danger .bar-button-outline-md-danger .button-effect{background-color:#e13838}.toolbar-md-danger .bar-button-solid-md-danger{color:#fff;background-color:#f53d3d}.toolbar-md-danger .bar-button-solid-md-danger.activated{color:#fff;background-color:#e13838}.toolbar-md-danger .bar-button-clear-md-light,.toolbar-md-danger .bar-button-light-md,.toolbar-md-danger .bar-button-md-light{color:#f4f4f4;background-color:transparent}.toolbar-md-danger .bar-button-clear-md-light:hover:not(.disable-hover),.toolbar-md-danger .bar-button-light-md:hover:not(.disable-hover),.toolbar-md-danger .bar-button-md-light:hover:not(.disable-hover){color:#f4f4f4}.toolbar-md-danger .bar-button-outline-md-light{border-color:#e0e0e0;color:#e0e0e0;background-color:transparent}.toolbar-md-danger .bar-button-outline-md-light.activated{background-color:transparent}.toolbar-md-danger .bar-button-outline-md-light .button-effect{background-color:#e0e0e0}.toolbar-md-danger .bar-button-solid-md-light{color:#424242;background-color:#f4f4f4}.toolbar-md-danger .bar-button-solid-md-light.activated{color:#424242;background-color:#e0e0e0}.toolbar-md-danger .bar-button-clear-md-dark,.toolbar-md-danger .bar-button-dark-md,.toolbar-md-danger .bar-button-md-dark{color:#222;background-color:transparent}.toolbar-md-danger .bar-button-clear-md-dark:hover:not(.disable-hover),.toolbar-md-danger .bar-button-dark-md:hover:not(.disable-hover),.toolbar-md-danger .bar-button-md-dark:hover:not(.disable-hover){color:#222}.toolbar-md-danger .bar-button-outline-md-dark{border-color:#343434;color:#343434;background-color:transparent}.toolbar-md-danger .bar-button-outline-md-dark.activated{background-color:transparent}.toolbar-md-danger .bar-button-outline-md-dark .button-effect{background-color:#343434}.toolbar-md-danger .bar-button-solid-md-dark{color:#fff;background-color:#222}.toolbar-md-danger .bar-button-solid-md-dark.activated{color:#fff;background-color:#343434}.toolbar-md-danger .bar-button-clear-md-energized,.toolbar-md-danger .bar-button-energized-md,.toolbar-md-danger .bar-button-md-energized{color:#ffc527;background-color:transparent}.toolbar-md-danger .bar-button-clear-md-energized:hover:not(.disable-hover),.toolbar-md-danger .bar-button-energized-md:hover:not(.disable-hover),.toolbar-md-danger .bar-button-md-energized:hover:not(.disable-hover){color:#ffc527}.toolbar-md-danger .bar-button-outline-md-energized{border-color:#ebb524;color:#ebb524;background-color:transparent}.toolbar-md-danger .bar-button-outline-md-energized.activated{background-color:transparent}.toolbar-md-danger .bar-button-outline-md-energized .button-effect{background-color:#ebb524}.toolbar-md-danger .bar-button-solid-md-energized{color:#424242;background-color:#ffc527}.toolbar-md-danger .bar-button-solid-md-energized.activated{color:#424242;background-color:#ebb524}.toolbar-md-danger .bar-button-clear-md-royal,.toolbar-md-danger .bar-button-md-royal,.toolbar-md-danger .bar-button-royal-md{color:#7e60ff;background-color:transparent}.toolbar-md-danger .bar-button-clear-md-royal:hover:not(.disable-hover),.toolbar-md-danger .bar-button-md-royal:hover:not(.disable-hover),.toolbar-md-danger .bar-button-royal-md:hover:not(.disable-hover){color:#7e60ff}.toolbar-md-danger .bar-button-outline-md-royal{border-color:#7458eb;color:#7458eb;background-color:transparent}.toolbar-md-danger .bar-button-outline-md-royal.activated{background-color:transparent}.toolbar-md-danger .bar-button-outline-md-royal .button-effect{background-color:#7458eb}.toolbar-md-danger .bar-button-solid-md-royal{color:#fff;background-color:#7e60ff}.toolbar-md-danger .bar-button-solid-md-royal.activated{color:#fff;background-color:#7458eb}.toolbar-md-danger .bar-button-clear-md-subtle,.toolbar-md-danger .bar-button-md-subtle,.toolbar-md-danger .bar-button-subtle-md{color:#444;background-color:transparent}.toolbar-md-danger .bar-button-clear-md-subtle:hover:not(.disable-hover),.toolbar-md-danger .bar-button-md-subtle:hover:not(.disable-hover),.toolbar-md-danger .bar-button-subtle-md:hover:not(.disable-hover){color:#444}.toolbar-md-danger .bar-button-outline-md-subtle{border-color:#535353;color:#535353;background-color:transparent}.toolbar-md-danger .bar-button-outline-md-subtle.activated{background-color:transparent}.toolbar-md-danger .bar-button-outline-md-subtle .button-effect{background-color:#535353}.toolbar-md-danger .bar-button-solid-md-subtle{color:#fff;background-color:#444}.toolbar-md-danger .bar-button-solid-md-subtle.activated{color:#fff;background-color:#535353}.toolbar-md-danger .bar-button-clear-md-vibrant,.toolbar-md-danger .bar-button-md-vibrant,.toolbar-md-danger .bar-button-vibrant-md{color:#663399;background-color:transparent}.toolbar-md-danger .bar-button-clear-md-vibrant:hover:not(.disable-hover),.toolbar-md-danger .bar-button-md-vibrant:hover:not(.disable-hover),.toolbar-md-danger .bar-button-vibrant-md:hover:not(.disable-hover){color:#663399}.toolbar-md-danger .bar-button-outline-md-vibrant{border-color:#7243a1;color:#7243a1;background-color:transparent}.toolbar-md-danger .bar-button-outline-md-vibrant.activated{background-color:transparent}.toolbar-md-danger .bar-button-outline-md-vibrant .button-effect{background-color:#7243a1}.toolbar-md-danger .bar-button-solid-md-vibrant{color:#fff;background-color:#663399}.toolbar-md-danger .bar-button-solid-md-vibrant.activated{color:#fff;background-color:#7243a1}.toolbar-md-danger .bar-button-bright-md,.toolbar-md-danger .bar-button-clear-md-bright,.toolbar-md-danger .bar-button-md-bright{color:#ffc125;background-color:transparent}.toolbar-md-danger .bar-button-bright-md:hover:not(.disable-hover),.toolbar-md-danger .bar-button-clear-md-bright:hover:not(.disable-hover),.toolbar-md-danger .bar-button-md-bright:hover:not(.disable-hover){color:#ffc125}.toolbar-md-danger .bar-button-outline-md-bright{border-color:#ebb222;color:#ebb222;background-color:transparent}.toolbar-md-danger .bar-button-outline-md-bright.activated{background-color:transparent}.toolbar-md-danger .bar-button-outline-md-bright .button-effect{background-color:#ebb222}.toolbar-md-danger .bar-button-solid-md-bright{color:#424242;background-color:#ffc125}.toolbar-md-danger .bar-button-solid-md-bright.activated{color:#424242;background-color:#ebb222}.bar-button-clear-md-danger,.bar-button-danger-md,.bar-button-md-danger{color:#f53d3d;background-color:transparent}.bar-button-clear-md-danger:hover:not(.disable-hover),.bar-button-danger-md:hover:not(.disable-hover),.bar-button-md-danger:hover:not(.disable-hover){color:#f53d3d}.bar-button-outline-md-danger{border-color:#e13838;color:#e13838;background-color:transparent}.bar-button-outline-md-danger.activated{background-color:transparent}.bar-button-outline-md-danger .button-effect{background-color:#e13838}.bar-button-solid-md-danger{color:#fff;background-color:#f53d3d}.bar-button-solid-md-danger.activated{color:#fff;background-color:#e13838}.toolbar-md-light .toolbar-background-md{background:#f4f4f4}.toolbar-md-light .bar-button-clear-md,.toolbar-md-light .bar-button-default-md,.toolbar-md-light .bar-button-outline-md,.toolbar-md-light .toolbar-title-md{color:#424242}.toolbar-md-light .bar-button-clear-md .button-effect,.toolbar-md-light .bar-button-default-md .button-effect,.toolbar-md-light .bar-button-outline-md .button-effect{background-color:#424242}.toolbar-md-light .bar-button-outline-md{border-color:#424242}.toolbar-md-light .bar-button-clear-md-primary,.toolbar-md-light .bar-button-md-primary,.toolbar-md-light .bar-button-primary-md{color:#488aff;background-color:transparent}.toolbar-md-light .bar-button-clear-md-primary:hover:not(.disable-hover),.toolbar-md-light .bar-button-md-primary:hover:not(.disable-hover),.toolbar-md-light .bar-button-primary-md:hover:not(.disable-hover){color:#488aff}.toolbar-md-light .bar-button-outline-md-primary{border-color:#427feb;color:#427feb;background-color:transparent}.toolbar-md-light .bar-button-outline-md-primary.activated{background-color:transparent}.toolbar-md-light .bar-button-outline-md-primary .button-effect{background-color:#427feb}.toolbar-md-light .bar-button-solid-md-primary{color:#fff;background-color:#488aff}.toolbar-md-light .bar-button-solid-md-primary.activated{color:#fff;background-color:#427feb}.toolbar-md-light .bar-button-clear-md-secondary,.toolbar-md-light .bar-button-md-secondary,.toolbar-md-light .bar-button-secondary-md{color:#32db64;background-color:transparent}.toolbar-md-light .bar-button-clear-md-secondary:hover:not(.disable-hover),.toolbar-md-light .bar-button-md-secondary:hover:not(.disable-hover),.toolbar-md-light .bar-button-secondary-md:hover:not(.disable-hover){color:#32db64}.toolbar-md-light .bar-button-outline-md-secondary{border-color:#2ec95c;color:#2ec95c;background-color:transparent}.toolbar-md-light .bar-button-outline-md-secondary.activated{background-color:transparent}.toolbar-md-light .bar-button-outline-md-secondary .button-effect{background-color:#2ec95c}.toolbar-md-light .bar-button-solid-md-secondary{color:#fff;background-color:#32db64}.toolbar-md-light .bar-button-solid-md-secondary.activated{color:#fff;background-color:#2ec95c}.toolbar-md-light .bar-button-clear-md-danger,.toolbar-md-light .bar-button-danger-md,.toolbar-md-light .bar-button-md-danger{color:#f53d3d;background-color:transparent}.toolbar-md-light .bar-button-clear-md-danger:hover:not(.disable-hover),.toolbar-md-light .bar-button-danger-md:hover:not(.disable-hover),.toolbar-md-light .bar-button-md-danger:hover:not(.disable-hover){color:#f53d3d}.toolbar-md-light .bar-button-outline-md-danger{border-color:#e13838;color:#e13838;background-color:transparent}.toolbar-md-light .bar-button-outline-md-danger.activated{background-color:transparent}.toolbar-md-light .bar-button-outline-md-danger .button-effect{background-color:#e13838}.toolbar-md-light .bar-button-solid-md-danger{color:#fff;background-color:#f53d3d}.toolbar-md-light .bar-button-solid-md-danger.activated{color:#fff;background-color:#e13838}.toolbar-md-light .bar-button-clear-md-light,.toolbar-md-light .bar-button-light-md,.toolbar-md-light .bar-button-md-light{color:#f4f4f4;background-color:transparent}.toolbar-md-light .bar-button-clear-md-light:hover:not(.disable-hover),.toolbar-md-light .bar-button-light-md:hover:not(.disable-hover),.toolbar-md-light .bar-button-md-light:hover:not(.disable-hover){color:#f4f4f4}.toolbar-md-light .bar-button-outline-md-light{border-color:#e0e0e0;color:#e0e0e0;background-color:transparent}.toolbar-md-light .bar-button-outline-md-light.activated{background-color:transparent}.toolbar-md-light .bar-button-outline-md-light .button-effect{background-color:#e0e0e0}.toolbar-md-light .bar-button-solid-md-light{color:#424242;background-color:#f4f4f4}.toolbar-md-light .bar-button-solid-md-light.activated{color:#424242;background-color:#e0e0e0}.toolbar-md-light .bar-button-clear-md-dark,.toolbar-md-light .bar-button-dark-md,.toolbar-md-light .bar-button-md-dark{color:#222;background-color:transparent}.toolbar-md-light .bar-button-clear-md-dark:hover:not(.disable-hover),.toolbar-md-light .bar-button-dark-md:hover:not(.disable-hover),.toolbar-md-light .bar-button-md-dark:hover:not(.disable-hover){color:#222}.toolbar-md-light .bar-button-outline-md-dark{border-color:#343434;color:#343434;background-color:transparent}.toolbar-md-light .bar-button-outline-md-dark.activated{background-color:transparent}.toolbar-md-light .bar-button-outline-md-dark .button-effect{background-color:#343434}.toolbar-md-light .bar-button-solid-md-dark{color:#fff;background-color:#222}.toolbar-md-light .bar-button-solid-md-dark.activated{color:#fff;background-color:#343434}.toolbar-md-light .bar-button-clear-md-energized,.toolbar-md-light .bar-button-energized-md,.toolbar-md-light .bar-button-md-energized{color:#ffc527;background-color:transparent}.toolbar-md-light .bar-button-clear-md-energized:hover:not(.disable-hover),.toolbar-md-light .bar-button-energized-md:hover:not(.disable-hover),.toolbar-md-light .bar-button-md-energized:hover:not(.disable-hover){color:#ffc527}.toolbar-md-light .bar-button-outline-md-energized{border-color:#ebb524;color:#ebb524;background-color:transparent}.toolbar-md-light .bar-button-outline-md-energized.activated{background-color:transparent}.toolbar-md-light .bar-button-outline-md-energized .button-effect{background-color:#ebb524}.toolbar-md-light .bar-button-solid-md-energized{color:#424242;background-color:#ffc527}.toolbar-md-light .bar-button-solid-md-energized.activated{color:#424242;background-color:#ebb524}.toolbar-md-light .bar-button-clear-md-royal,.toolbar-md-light .bar-button-md-royal,.toolbar-md-light .bar-button-royal-md{color:#7e60ff;background-color:transparent}.toolbar-md-light .bar-button-clear-md-royal:hover:not(.disable-hover),.toolbar-md-light .bar-button-md-royal:hover:not(.disable-hover),.toolbar-md-light .bar-button-royal-md:hover:not(.disable-hover){color:#7e60ff}.toolbar-md-light .bar-button-outline-md-royal{border-color:#7458eb;color:#7458eb;background-color:transparent}.toolbar-md-light .bar-button-outline-md-royal.activated{background-color:transparent}.toolbar-md-light .bar-button-outline-md-royal .button-effect{background-color:#7458eb}.toolbar-md-light .bar-button-solid-md-royal{color:#fff;background-color:#7e60ff}.toolbar-md-light .bar-button-solid-md-royal.activated{color:#fff;background-color:#7458eb}.toolbar-md-light .bar-button-clear-md-subtle,.toolbar-md-light .bar-button-md-subtle,.toolbar-md-light .bar-button-subtle-md{color:#444;background-color:transparent}.toolbar-md-light .bar-button-clear-md-subtle:hover:not(.disable-hover),.toolbar-md-light .bar-button-md-subtle:hover:not(.disable-hover),.toolbar-md-light .bar-button-subtle-md:hover:not(.disable-hover){color:#444}.toolbar-md-light .bar-button-outline-md-subtle{border-color:#535353;color:#535353;background-color:transparent}.toolbar-md-light .bar-button-outline-md-subtle.activated{background-color:transparent}.toolbar-md-light .bar-button-outline-md-subtle .button-effect{background-color:#535353}.toolbar-md-light .bar-button-solid-md-subtle{color:#fff;background-color:#444}.toolbar-md-light .bar-button-solid-md-subtle.activated{color:#fff;background-color:#535353}.toolbar-md-light .bar-button-clear-md-vibrant,.toolbar-md-light .bar-button-md-vibrant,.toolbar-md-light .bar-button-vibrant-md{color:#663399;background-color:transparent}.toolbar-md-light .bar-button-clear-md-vibrant:hover:not(.disable-hover),.toolbar-md-light .bar-button-md-vibrant:hover:not(.disable-hover),.toolbar-md-light .bar-button-vibrant-md:hover:not(.disable-hover){color:#663399}.toolbar-md-light .bar-button-outline-md-vibrant{border-color:#7243a1;color:#7243a1;background-color:transparent}.toolbar-md-light .bar-button-outline-md-vibrant.activated{background-color:transparent}.toolbar-md-light .bar-button-outline-md-vibrant .button-effect{background-color:#7243a1}.toolbar-md-light .bar-button-solid-md-vibrant{color:#fff;background-color:#663399}.toolbar-md-light .bar-button-solid-md-vibrant.activated{color:#fff;background-color:#7243a1}.toolbar-md-light .bar-button-bright-md,.toolbar-md-light .bar-button-clear-md-bright,.toolbar-md-light .bar-button-md-bright{color:#ffc125;background-color:transparent}.toolbar-md-light .bar-button-bright-md:hover:not(.disable-hover),.toolbar-md-light .bar-button-clear-md-bright:hover:not(.disable-hover),.toolbar-md-light .bar-button-md-bright:hover:not(.disable-hover){color:#ffc125}.toolbar-md-light .bar-button-outline-md-bright{border-color:#ebb222;color:#ebb222;background-color:transparent}.toolbar-md-light .bar-button-outline-md-bright.activated{background-color:transparent}.toolbar-md-light .bar-button-outline-md-bright .button-effect{background-color:#ebb222}.toolbar-md-light .bar-button-solid-md-bright{color:#424242;background-color:#ffc125}.toolbar-md-light .bar-button-solid-md-bright.activated{color:#424242;background-color:#ebb222}.bar-button-clear-md-light,.bar-button-light-md,.bar-button-md-light{color:#f4f4f4;background-color:transparent}.bar-button-clear-md-light:hover:not(.disable-hover),.bar-button-light-md:hover:not(.disable-hover),.bar-button-md-light:hover:not(.disable-hover){color:#f4f4f4}.bar-button-outline-md-light{border-color:#e0e0e0;color:#e0e0e0;background-color:transparent}.bar-button-outline-md-light.activated{background-color:transparent}.bar-button-outline-md-light .button-effect{background-color:#e0e0e0}.bar-button-solid-md-light{color:#424242;background-color:#f4f4f4}.bar-button-solid-md-light.activated{color:#424242;background-color:#e0e0e0}.toolbar-md-dark .toolbar-background-md{background:#222}.toolbar-md-dark .bar-button-clear-md,.toolbar-md-dark .bar-button-default-md,.toolbar-md-dark .bar-button-outline-md,.toolbar-md-dark .toolbar-title-md{color:#fff}.toolbar-md-dark .bar-button-clear-md .button-effect,.toolbar-md-dark .bar-button-default-md .button-effect,.toolbar-md-dark .bar-button-outline-md .button-effect{background-color:#fff}.toolbar-md-dark .bar-button-outline-md{border-color:#fff}.toolbar-md-dark .bar-button-clear-md-primary,.toolbar-md-dark .bar-button-md-primary,.toolbar-md-dark .bar-button-primary-md{color:#488aff;background-color:transparent}.toolbar-md-dark .bar-button-clear-md-primary:hover:not(.disable-hover),.toolbar-md-dark .bar-button-md-primary:hover:not(.disable-hover),.toolbar-md-dark .bar-button-primary-md:hover:not(.disable-hover){color:#488aff}.toolbar-md-dark .bar-button-outline-md-primary{border-color:#427feb;color:#427feb;background-color:transparent}.toolbar-md-dark .bar-button-outline-md-primary.activated{background-color:transparent}.toolbar-md-dark .bar-button-outline-md-primary .button-effect{background-color:#427feb}.toolbar-md-dark .bar-button-solid-md-primary{color:#fff;background-color:#488aff}.toolbar-md-dark .bar-button-solid-md-primary.activated{color:#fff;background-color:#427feb}.toolbar-md-dark .bar-button-clear-md-secondary,.toolbar-md-dark .bar-button-md-secondary,.toolbar-md-dark .bar-button-secondary-md{color:#32db64;background-color:transparent}.toolbar-md-dark .bar-button-clear-md-secondary:hover:not(.disable-hover),.toolbar-md-dark .bar-button-md-secondary:hover:not(.disable-hover),.toolbar-md-dark .bar-button-secondary-md:hover:not(.disable-hover){color:#32db64}.toolbar-md-dark .bar-button-outline-md-secondary{border-color:#2ec95c;color:#2ec95c;background-color:transparent}.toolbar-md-dark .bar-button-outline-md-secondary.activated{background-color:transparent}.toolbar-md-dark .bar-button-outline-md-secondary .button-effect{background-color:#2ec95c}.toolbar-md-dark .bar-button-solid-md-secondary{color:#fff;background-color:#32db64}.toolbar-md-dark .bar-button-solid-md-secondary.activated{color:#fff;background-color:#2ec95c}.toolbar-md-dark .bar-button-clear-md-danger,.toolbar-md-dark .bar-button-danger-md,.toolbar-md-dark .bar-button-md-danger{color:#f53d3d;background-color:transparent}.toolbar-md-dark .bar-button-clear-md-danger:hover:not(.disable-hover),.toolbar-md-dark .bar-button-danger-md:hover:not(.disable-hover),.toolbar-md-dark .bar-button-md-danger:hover:not(.disable-hover){color:#f53d3d}.toolbar-md-dark .bar-button-outline-md-danger{border-color:#e13838;color:#e13838;background-color:transparent}.toolbar-md-dark .bar-button-outline-md-danger.activated{background-color:transparent}.toolbar-md-dark .bar-button-outline-md-danger .button-effect{background-color:#e13838}.toolbar-md-dark .bar-button-solid-md-danger{color:#fff;background-color:#f53d3d}.toolbar-md-dark .bar-button-solid-md-danger.activated{color:#fff;background-color:#e13838}.toolbar-md-dark .bar-button-clear-md-light,.toolbar-md-dark .bar-button-light-md,.toolbar-md-dark .bar-button-md-light{color:#f4f4f4;background-color:transparent}.toolbar-md-dark .bar-button-clear-md-light:hover:not(.disable-hover),.toolbar-md-dark .bar-button-light-md:hover:not(.disable-hover),.toolbar-md-dark .bar-button-md-light:hover:not(.disable-hover){color:#f4f4f4}.toolbar-md-dark .bar-button-outline-md-light{border-color:#e0e0e0;color:#e0e0e0;background-color:transparent}.toolbar-md-dark .bar-button-outline-md-light.activated{background-color:transparent}.toolbar-md-dark .bar-button-outline-md-light .button-effect{background-color:#e0e0e0}.toolbar-md-dark .bar-button-solid-md-light{color:#424242;background-color:#f4f4f4}.toolbar-md-dark .bar-button-solid-md-light.activated{color:#424242;background-color:#e0e0e0}.toolbar-md-dark .bar-button-clear-md-dark,.toolbar-md-dark .bar-button-dark-md,.toolbar-md-dark .bar-button-md-dark{color:#222;background-color:transparent}.toolbar-md-dark .bar-button-clear-md-dark:hover:not(.disable-hover),.toolbar-md-dark .bar-button-dark-md:hover:not(.disable-hover),.toolbar-md-dark .bar-button-md-dark:hover:not(.disable-hover){color:#222}.toolbar-md-dark .bar-button-outline-md-dark{border-color:#343434;color:#343434;background-color:transparent}.toolbar-md-dark .bar-button-outline-md-dark.activated{background-color:transparent}.toolbar-md-dark .bar-button-outline-md-dark .button-effect{background-color:#343434}.toolbar-md-dark .bar-button-solid-md-dark{color:#fff;background-color:#222}.toolbar-md-dark .bar-button-solid-md-dark.activated{color:#fff;background-color:#343434}.toolbar-md-dark .bar-button-clear-md-energized,.toolbar-md-dark .bar-button-energized-md,.toolbar-md-dark .bar-button-md-energized{color:#ffc527;background-color:transparent}.toolbar-md-dark .bar-button-clear-md-energized:hover:not(.disable-hover),.toolbar-md-dark .bar-button-energized-md:hover:not(.disable-hover),.toolbar-md-dark .bar-button-md-energized:hover:not(.disable-hover){color:#ffc527}.toolbar-md-dark .bar-button-outline-md-energized{border-color:#ebb524;color:#ebb524;background-color:transparent}.toolbar-md-dark .bar-button-outline-md-energized.activated{background-color:transparent}.toolbar-md-dark .bar-button-outline-md-energized .button-effect{background-color:#ebb524}.toolbar-md-dark .bar-button-solid-md-energized{color:#424242;background-color:#ffc527}.toolbar-md-dark .bar-button-solid-md-energized.activated{color:#424242;background-color:#ebb524}.toolbar-md-dark .bar-button-clear-md-royal,.toolbar-md-dark .bar-button-md-royal,.toolbar-md-dark .bar-button-royal-md{color:#7e60ff;background-color:transparent}.toolbar-md-dark .bar-button-clear-md-royal:hover:not(.disable-hover),.toolbar-md-dark .bar-button-md-royal:hover:not(.disable-hover),.toolbar-md-dark .bar-button-royal-md:hover:not(.disable-hover){color:#7e60ff}.toolbar-md-dark .bar-button-outline-md-royal{border-color:#7458eb;color:#7458eb;background-color:transparent}.toolbar-md-dark .bar-button-outline-md-royal.activated{background-color:transparent}.toolbar-md-dark .bar-button-outline-md-royal .button-effect{background-color:#7458eb}.toolbar-md-dark .bar-button-solid-md-royal{color:#fff;background-color:#7e60ff}.toolbar-md-dark .bar-button-solid-md-royal.activated{color:#fff;background-color:#7458eb}.toolbar-md-dark .bar-button-clear-md-subtle,.toolbar-md-dark .bar-button-md-subtle,.toolbar-md-dark .bar-button-subtle-md{color:#444;background-color:transparent}.toolbar-md-dark .bar-button-clear-md-subtle:hover:not(.disable-hover),.toolbar-md-dark .bar-button-md-subtle:hover:not(.disable-hover),.toolbar-md-dark .bar-button-subtle-md:hover:not(.disable-hover){color:#444}.toolbar-md-dark .bar-button-outline-md-subtle{border-color:#535353;color:#535353;background-color:transparent}.toolbar-md-dark .bar-button-outline-md-subtle.activated{background-color:transparent}.toolbar-md-dark .bar-button-outline-md-subtle .button-effect{background-color:#535353}.toolbar-md-dark .bar-button-solid-md-subtle{color:#fff;background-color:#444}.toolbar-md-dark .bar-button-solid-md-subtle.activated{color:#fff;background-color:#535353}.toolbar-md-dark .bar-button-clear-md-vibrant,.toolbar-md-dark .bar-button-md-vibrant,.toolbar-md-dark .bar-button-vibrant-md{color:#663399;background-color:transparent}.toolbar-md-dark .bar-button-clear-md-vibrant:hover:not(.disable-hover),.toolbar-md-dark .bar-button-md-vibrant:hover:not(.disable-hover),.toolbar-md-dark .bar-button-vibrant-md:hover:not(.disable-hover){color:#663399}.toolbar-md-dark .bar-button-outline-md-vibrant{border-color:#7243a1;color:#7243a1;background-color:transparent}.toolbar-md-dark .bar-button-outline-md-vibrant.activated{background-color:transparent}.toolbar-md-dark .bar-button-outline-md-vibrant .button-effect{background-color:#7243a1}.toolbar-md-dark .bar-button-solid-md-vibrant{color:#fff;background-color:#663399}.toolbar-md-dark .bar-button-solid-md-vibrant.activated{color:#fff;background-color:#7243a1}.toolbar-md-dark .bar-button-bright-md,.toolbar-md-dark .bar-button-clear-md-bright,.toolbar-md-dark .bar-button-md-bright{color:#ffc125;background-color:transparent}.toolbar-md-dark .bar-button-bright-md:hover:not(.disable-hover),.toolbar-md-dark .bar-button-clear-md-bright:hover:not(.disable-hover),.toolbar-md-dark .bar-button-md-bright:hover:not(.disable-hover){color:#ffc125}.toolbar-md-dark .bar-button-outline-md-bright{border-color:#ebb222;color:#ebb222;background-color:transparent}.toolbar-md-dark .bar-button-outline-md-bright.activated{background-color:transparent}.toolbar-md-dark .bar-button-outline-md-bright .button-effect{background-color:#ebb222}.toolbar-md-dark .bar-button-solid-md-bright{color:#424242;background-color:#ffc125}.toolbar-md-dark .bar-button-solid-md-bright.activated{color:#424242;background-color:#ebb222}.bar-button-clear-md-dark,.bar-button-dark-md,.bar-button-md-dark{color:#222;background-color:transparent}.bar-button-clear-md-dark:hover:not(.disable-hover),.bar-button-dark-md:hover:not(.disable-hover),.bar-button-md-dark:hover:not(.disable-hover){color:#222}.bar-button-outline-md-dark{border-color:#343434;color:#343434;background-color:transparent}.bar-button-outline-md-dark.activated{background-color:transparent}.bar-button-outline-md-dark .button-effect{background-color:#343434}.bar-button-solid-md-dark{color:#fff;background-color:#222}.bar-button-solid-md-dark.activated{color:#fff;background-color:#343434}.toolbar-md-energized .toolbar-background-md{background:#ffc527}.toolbar-md-energized .bar-button-clear-md,.toolbar-md-energized .bar-button-default-md,.toolbar-md-energized .bar-button-outline-md,.toolbar-md-energized .toolbar-title-md{color:#424242}.toolbar-md-energized .bar-button-clear-md .button-effect,.toolbar-md-energized .bar-button-default-md .button-effect,.toolbar-md-energized .bar-button-outline-md .button-effect{background-color:#424242}.toolbar-md-energized .bar-button-outline-md{border-color:#424242}.toolbar-md-energized .bar-button-clear-md-primary,.toolbar-md-energized .bar-button-md-primary,.toolbar-md-energized .bar-button-primary-md{color:#488aff;background-color:transparent}.toolbar-md-energized .bar-button-clear-md-primary:hover:not(.disable-hover),.toolbar-md-energized .bar-button-md-primary:hover:not(.disable-hover),.toolbar-md-energized .bar-button-primary-md:hover:not(.disable-hover){color:#488aff}.toolbar-md-energized .bar-button-outline-md-primary{border-color:#427feb;color:#427feb;background-color:transparent}.toolbar-md-energized .bar-button-outline-md-primary.activated{background-color:transparent}.toolbar-md-energized .bar-button-outline-md-primary .button-effect{background-color:#427feb}.toolbar-md-energized .bar-button-solid-md-primary{color:#fff;background-color:#488aff}.toolbar-md-energized .bar-button-solid-md-primary.activated{color:#fff;background-color:#427feb}.toolbar-md-energized .bar-button-clear-md-secondary,.toolbar-md-energized .bar-button-md-secondary,.toolbar-md-energized .bar-button-secondary-md{color:#32db64;background-color:transparent}.toolbar-md-energized .bar-button-clear-md-secondary:hover:not(.disable-hover),.toolbar-md-energized .bar-button-md-secondary:hover:not(.disable-hover),.toolbar-md-energized .bar-button-secondary-md:hover:not(.disable-hover){color:#32db64}.toolbar-md-energized .bar-button-outline-md-secondary{border-color:#2ec95c;color:#2ec95c;background-color:transparent}.toolbar-md-energized .bar-button-outline-md-secondary.activated{background-color:transparent}.toolbar-md-energized .bar-button-outline-md-secondary .button-effect{background-color:#2ec95c}.toolbar-md-energized .bar-button-solid-md-secondary{color:#fff;background-color:#32db64}.toolbar-md-energized .bar-button-solid-md-secondary.activated{color:#fff;background-color:#2ec95c}.toolbar-md-energized .bar-button-clear-md-danger,.toolbar-md-energized .bar-button-danger-md,.toolbar-md-energized .bar-button-md-danger{color:#f53d3d;background-color:transparent}.toolbar-md-energized .bar-button-clear-md-danger:hover:not(.disable-hover),.toolbar-md-energized .bar-button-danger-md:hover:not(.disable-hover),.toolbar-md-energized .bar-button-md-danger:hover:not(.disable-hover){color:#f53d3d}.toolbar-md-energized .bar-button-outline-md-danger{border-color:#e13838;color:#e13838;background-color:transparent}.toolbar-md-energized .bar-button-outline-md-danger.activated{background-color:transparent}.toolbar-md-energized .bar-button-outline-md-danger .button-effect{background-color:#e13838}.toolbar-md-energized .bar-button-solid-md-danger{color:#fff;background-color:#f53d3d}.toolbar-md-energized .bar-button-solid-md-danger.activated{color:#fff;background-color:#e13838}.toolbar-md-energized .bar-button-clear-md-light,.toolbar-md-energized .bar-button-light-md,.toolbar-md-energized .bar-button-md-light{color:#f4f4f4;background-color:transparent}.toolbar-md-energized .bar-button-clear-md-light:hover:not(.disable-hover),.toolbar-md-energized .bar-button-light-md:hover:not(.disable-hover),.toolbar-md-energized .bar-button-md-light:hover:not(.disable-hover){color:#f4f4f4}.toolbar-md-energized .bar-button-outline-md-light{border-color:#e0e0e0;color:#e0e0e0;background-color:transparent}.toolbar-md-energized .bar-button-outline-md-light.activated{background-color:transparent}.toolbar-md-energized .bar-button-outline-md-light .button-effect{background-color:#e0e0e0}.toolbar-md-energized .bar-button-solid-md-light{color:#424242;background-color:#f4f4f4}.toolbar-md-energized .bar-button-solid-md-light.activated{color:#424242;background-color:#e0e0e0}.toolbar-md-energized .bar-button-clear-md-dark,.toolbar-md-energized .bar-button-dark-md,.toolbar-md-energized .bar-button-md-dark{color:#222;background-color:transparent}.toolbar-md-energized .bar-button-clear-md-dark:hover:not(.disable-hover),.toolbar-md-energized .bar-button-dark-md:hover:not(.disable-hover),.toolbar-md-energized .bar-button-md-dark:hover:not(.disable-hover){color:#222}.toolbar-md-energized .bar-button-outline-md-dark{border-color:#343434;color:#343434;background-color:transparent}.toolbar-md-energized .bar-button-outline-md-dark.activated{background-color:transparent}.toolbar-md-energized .bar-button-outline-md-dark .button-effect{background-color:#343434}.toolbar-md-energized .bar-button-solid-md-dark{color:#fff;background-color:#222}.toolbar-md-energized .bar-button-solid-md-dark.activated{color:#fff;background-color:#343434}.toolbar-md-energized .bar-button-clear-md-energized,.toolbar-md-energized .bar-button-energized-md,.toolbar-md-energized .bar-button-md-energized{color:#ffc527;background-color:transparent}.toolbar-md-energized .bar-button-clear-md-energized:hover:not(.disable-hover),.toolbar-md-energized .bar-button-energized-md:hover:not(.disable-hover),.toolbar-md-energized .bar-button-md-energized:hover:not(.disable-hover){color:#ffc527}.toolbar-md-energized .bar-button-outline-md-energized{border-color:#ebb524;color:#ebb524;background-color:transparent}.toolbar-md-energized .bar-button-outline-md-energized.activated{background-color:transparent}.toolbar-md-energized .bar-button-outline-md-energized .button-effect{background-color:#ebb524}.toolbar-md-energized .bar-button-solid-md-energized{color:#424242;background-color:#ffc527}.toolbar-md-energized .bar-button-solid-md-energized.activated{color:#424242;background-color:#ebb524}.toolbar-md-energized .bar-button-clear-md-royal,.toolbar-md-energized .bar-button-md-royal,.toolbar-md-energized .bar-button-royal-md{color:#7e60ff;background-color:transparent}.toolbar-md-energized .bar-button-clear-md-royal:hover:not(.disable-hover),.toolbar-md-energized .bar-button-md-royal:hover:not(.disable-hover),.toolbar-md-energized .bar-button-royal-md:hover:not(.disable-hover){color:#7e60ff}.toolbar-md-energized .bar-button-outline-md-royal{border-color:#7458eb;color:#7458eb;background-color:transparent}.toolbar-md-energized .bar-button-outline-md-royal.activated{background-color:transparent}.toolbar-md-energized .bar-button-outline-md-royal .button-effect{background-color:#7458eb}.toolbar-md-energized .bar-button-solid-md-royal{color:#fff;background-color:#7e60ff}.toolbar-md-energized .bar-button-solid-md-royal.activated{color:#fff;background-color:#7458eb}.toolbar-md-energized .bar-button-clear-md-subtle,.toolbar-md-energized .bar-button-md-subtle,.toolbar-md-energized .bar-button-subtle-md{color:#444;background-color:transparent}.toolbar-md-energized .bar-button-clear-md-subtle:hover:not(.disable-hover),.toolbar-md-energized .bar-button-md-subtle:hover:not(.disable-hover),.toolbar-md-energized .bar-button-subtle-md:hover:not(.disable-hover){color:#444}.toolbar-md-energized .bar-button-outline-md-subtle{border-color:#535353;color:#535353;background-color:transparent}.toolbar-md-energized .bar-button-outline-md-subtle.activated{background-color:transparent}.toolbar-md-energized .bar-button-outline-md-subtle .button-effect{background-color:#535353}.toolbar-md-energized .bar-button-solid-md-subtle{color:#fff;background-color:#444}.toolbar-md-energized .bar-button-solid-md-subtle.activated{color:#fff;background-color:#535353}.toolbar-md-energized .bar-button-clear-md-vibrant,.toolbar-md-energized .bar-button-md-vibrant,.toolbar-md-energized .bar-button-vibrant-md{color:#663399;background-color:transparent}.toolbar-md-energized .bar-button-clear-md-vibrant:hover:not(.disable-hover),.toolbar-md-energized .bar-button-md-vibrant:hover:not(.disable-hover),.toolbar-md-energized .bar-button-vibrant-md:hover:not(.disable-hover){color:#663399}.toolbar-md-energized .bar-button-outline-md-vibrant{border-color:#7243a1;color:#7243a1;background-color:transparent}.toolbar-md-energized .bar-button-outline-md-vibrant.activated{background-color:transparent}.toolbar-md-energized .bar-button-outline-md-vibrant .button-effect{background-color:#7243a1}.toolbar-md-energized .bar-button-solid-md-vibrant{color:#fff;background-color:#663399}.toolbar-md-energized .bar-button-solid-md-vibrant.activated{color:#fff;background-color:#7243a1}.toolbar-md-energized .bar-button-bright-md,.toolbar-md-energized .bar-button-clear-md-bright,.toolbar-md-energized .bar-button-md-bright{color:#ffc125;background-color:transparent}.toolbar-md-energized .bar-button-bright-md:hover:not(.disable-hover),.toolbar-md-energized .bar-button-clear-md-bright:hover:not(.disable-hover),.toolbar-md-energized .bar-button-md-bright:hover:not(.disable-hover){color:#ffc125}.toolbar-md-energized .bar-button-outline-md-bright{border-color:#ebb222;color:#ebb222;background-color:transparent}.toolbar-md-energized .bar-button-outline-md-bright.activated{background-color:transparent}.toolbar-md-energized .bar-button-outline-md-bright .button-effect{background-color:#ebb222}.toolbar-md-energized .bar-button-solid-md-bright{color:#424242;background-color:#ffc125}.toolbar-md-energized .bar-button-solid-md-bright.activated{color:#424242;background-color:#ebb222}.bar-button-clear-md-energized,.bar-button-energized-md,.bar-button-md-energized{color:#ffc527;background-color:transparent}.bar-button-clear-md-energized:hover:not(.disable-hover),.bar-button-energized-md:hover:not(.disable-hover),.bar-button-md-energized:hover:not(.disable-hover){color:#ffc527}.bar-button-outline-md-energized{border-color:#ebb524;color:#ebb524;background-color:transparent}.bar-button-outline-md-energized.activated{background-color:transparent}.bar-button-outline-md-energized .button-effect{background-color:#ebb524}.bar-button-solid-md-energized{color:#424242;background-color:#ffc527}.bar-button-solid-md-energized.activated{color:#424242;background-color:#ebb524}.toolbar-md-royal .toolbar-background-md{background:#7e60ff}.toolbar-md-royal .bar-button-clear-md,.toolbar-md-royal .bar-button-default-md,.toolbar-md-royal .bar-button-outline-md,.toolbar-md-royal .toolbar-title-md{color:#fff}.toolbar-md-royal .bar-button-clear-md .button-effect,.toolbar-md-royal .bar-button-default-md .button-effect,.toolbar-md-royal .bar-button-outline-md .button-effect{background-color:#fff}.toolbar-md-royal .bar-button-outline-md{border-color:#fff}.toolbar-md-royal .bar-button-clear-md-primary,.toolbar-md-royal .bar-button-md-primary,.toolbar-md-royal .bar-button-primary-md{color:#488aff;background-color:transparent}.toolbar-md-royal .bar-button-clear-md-primary:hover:not(.disable-hover),.toolbar-md-royal .bar-button-md-primary:hover:not(.disable-hover),.toolbar-md-royal .bar-button-primary-md:hover:not(.disable-hover){color:#488aff}.toolbar-md-royal .bar-button-outline-md-primary{border-color:#427feb;color:#427feb;background-color:transparent}.toolbar-md-royal .bar-button-outline-md-primary.activated{background-color:transparent}.toolbar-md-royal .bar-button-outline-md-primary .button-effect{background-color:#427feb}.toolbar-md-royal .bar-button-solid-md-primary{color:#fff;background-color:#488aff}.toolbar-md-royal .bar-button-solid-md-primary.activated{color:#fff;background-color:#427feb}.toolbar-md-royal .bar-button-clear-md-secondary,.toolbar-md-royal .bar-button-md-secondary,.toolbar-md-royal .bar-button-secondary-md{color:#32db64;background-color:transparent}.toolbar-md-royal .bar-button-clear-md-secondary:hover:not(.disable-hover),.toolbar-md-royal .bar-button-md-secondary:hover:not(.disable-hover),.toolbar-md-royal .bar-button-secondary-md:hover:not(.disable-hover){color:#32db64}.toolbar-md-royal .bar-button-outline-md-secondary{border-color:#2ec95c;color:#2ec95c;background-color:transparent}.toolbar-md-royal .bar-button-outline-md-secondary.activated{background-color:transparent}.toolbar-md-royal .bar-button-outline-md-secondary .button-effect{background-color:#2ec95c}.toolbar-md-royal .bar-button-solid-md-secondary{color:#fff;background-color:#32db64}.toolbar-md-royal .bar-button-solid-md-secondary.activated{color:#fff;background-color:#2ec95c}.toolbar-md-royal .bar-button-clear-md-danger,.toolbar-md-royal .bar-button-danger-md,.toolbar-md-royal .bar-button-md-danger{color:#f53d3d;background-color:transparent}.toolbar-md-royal .bar-button-clear-md-danger:hover:not(.disable-hover),.toolbar-md-royal .bar-button-danger-md:hover:not(.disable-hover),.toolbar-md-royal .bar-button-md-danger:hover:not(.disable-hover){color:#f53d3d}.toolbar-md-royal .bar-button-outline-md-danger{border-color:#e13838;color:#e13838;background-color:transparent}.toolbar-md-royal .bar-button-outline-md-danger.activated{background-color:transparent}.toolbar-md-royal .bar-button-outline-md-danger .button-effect{background-color:#e13838}.toolbar-md-royal .bar-button-solid-md-danger{color:#fff;background-color:#f53d3d}.toolbar-md-royal .bar-button-solid-md-danger.activated{color:#fff;background-color:#e13838}.toolbar-md-royal .bar-button-clear-md-light,.toolbar-md-royal .bar-button-light-md,.toolbar-md-royal .bar-button-md-light{color:#f4f4f4;background-color:transparent}.toolbar-md-royal .bar-button-clear-md-light:hover:not(.disable-hover),.toolbar-md-royal .bar-button-light-md:hover:not(.disable-hover),.toolbar-md-royal .bar-button-md-light:hover:not(.disable-hover){color:#f4f4f4}.toolbar-md-royal .bar-button-outline-md-light{border-color:#e0e0e0;color:#e0e0e0;background-color:transparent}.toolbar-md-royal .bar-button-outline-md-light.activated{background-color:transparent}.toolbar-md-royal .bar-button-outline-md-light .button-effect{background-color:#e0e0e0}.toolbar-md-royal .bar-button-solid-md-light{color:#424242;background-color:#f4f4f4}.toolbar-md-royal .bar-button-solid-md-light.activated{color:#424242;background-color:#e0e0e0}.toolbar-md-royal .bar-button-clear-md-dark,.toolbar-md-royal .bar-button-dark-md,.toolbar-md-royal .bar-button-md-dark{color:#222;background-color:transparent}.toolbar-md-royal .bar-button-clear-md-dark:hover:not(.disable-hover),.toolbar-md-royal .bar-button-dark-md:hover:not(.disable-hover),.toolbar-md-royal .bar-button-md-dark:hover:not(.disable-hover){color:#222}.toolbar-md-royal .bar-button-outline-md-dark{border-color:#343434;color:#343434;background-color:transparent}.toolbar-md-royal .bar-button-outline-md-dark.activated{background-color:transparent}.toolbar-md-royal .bar-button-outline-md-dark .button-effect{background-color:#343434}.toolbar-md-royal .bar-button-solid-md-dark{color:#fff;background-color:#222}.toolbar-md-royal .bar-button-solid-md-dark.activated{color:#fff;background-color:#343434}.toolbar-md-royal .bar-button-clear-md-energized,.toolbar-md-royal .bar-button-energized-md,.toolbar-md-royal .bar-button-md-energized{color:#ffc527;background-color:transparent}.toolbar-md-royal .bar-button-clear-md-energized:hover:not(.disable-hover),.toolbar-md-royal .bar-button-energized-md:hover:not(.disable-hover),.toolbar-md-royal .bar-button-md-energized:hover:not(.disable-hover){color:#ffc527}.toolbar-md-royal .bar-button-outline-md-energized{border-color:#ebb524;color:#ebb524;background-color:transparent}.toolbar-md-royal .bar-button-outline-md-energized.activated{background-color:transparent}.toolbar-md-royal .bar-button-outline-md-energized .button-effect{background-color:#ebb524}.toolbar-md-royal .bar-button-solid-md-energized{color:#424242;background-color:#ffc527}.toolbar-md-royal .bar-button-solid-md-energized.activated{color:#424242;background-color:#ebb524}.toolbar-md-royal .bar-button-clear-md-royal,.toolbar-md-royal .bar-button-md-royal,.toolbar-md-royal .bar-button-royal-md{color:#7e60ff;background-color:transparent}.toolbar-md-royal .bar-button-clear-md-royal:hover:not(.disable-hover),.toolbar-md-royal .bar-button-md-royal:hover:not(.disable-hover),.toolbar-md-royal .bar-button-royal-md:hover:not(.disable-hover){color:#7e60ff}.toolbar-md-royal .bar-button-outline-md-royal{border-color:#7458eb;color:#7458eb;background-color:transparent}.toolbar-md-royal .bar-button-outline-md-royal.activated{background-color:transparent}.toolbar-md-royal .bar-button-outline-md-royal .button-effect{background-color:#7458eb}.toolbar-md-royal .bar-button-solid-md-royal{color:#fff;background-color:#7e60ff}.toolbar-md-royal .bar-button-solid-md-royal.activated{color:#fff;background-color:#7458eb}.toolbar-md-royal .bar-button-clear-md-subtle,.toolbar-md-royal .bar-button-md-subtle,.toolbar-md-royal .bar-button-subtle-md{color:#444;background-color:transparent}.toolbar-md-royal .bar-button-clear-md-subtle:hover:not(.disable-hover),.toolbar-md-royal .bar-button-md-subtle:hover:not(.disable-hover),.toolbar-md-royal .bar-button-subtle-md:hover:not(.disable-hover){color:#444}.toolbar-md-royal .bar-button-outline-md-subtle{border-color:#535353;color:#535353;background-color:transparent}.toolbar-md-royal .bar-button-outline-md-subtle.activated{background-color:transparent}.toolbar-md-royal .bar-button-outline-md-subtle .button-effect{background-color:#535353}.toolbar-md-royal .bar-button-solid-md-subtle{color:#fff;background-color:#444}.toolbar-md-royal .bar-button-solid-md-subtle.activated{color:#fff;background-color:#535353}.toolbar-md-royal .bar-button-clear-md-vibrant,.toolbar-md-royal .bar-button-md-vibrant,.toolbar-md-royal .bar-button-vibrant-md{color:#663399;background-color:transparent}.toolbar-md-royal .bar-button-clear-md-vibrant:hover:not(.disable-hover),.toolbar-md-royal .bar-button-md-vibrant:hover:not(.disable-hover),.toolbar-md-royal .bar-button-vibrant-md:hover:not(.disable-hover){color:#663399}.toolbar-md-royal .bar-button-outline-md-vibrant{border-color:#7243a1;color:#7243a1;background-color:transparent}.toolbar-md-royal .bar-button-outline-md-vibrant.activated{background-color:transparent}.toolbar-md-royal .bar-button-outline-md-vibrant .button-effect{background-color:#7243a1}.toolbar-md-royal .bar-button-solid-md-vibrant{color:#fff;background-color:#663399}.toolbar-md-royal .bar-button-solid-md-vibrant.activated{color:#fff;background-color:#7243a1}.toolbar-md-royal .bar-button-bright-md,.toolbar-md-royal .bar-button-clear-md-bright,.toolbar-md-royal .bar-button-md-bright{color:#ffc125;background-color:transparent}.toolbar-md-royal .bar-button-bright-md:hover:not(.disable-hover),.toolbar-md-royal .bar-button-clear-md-bright:hover:not(.disable-hover),.toolbar-md-royal .bar-button-md-bright:hover:not(.disable-hover){color:#ffc125}.toolbar-md-royal .bar-button-outline-md-bright{border-color:#ebb222;color:#ebb222;background-color:transparent}.toolbar-md-royal .bar-button-outline-md-bright.activated{background-color:transparent}.toolbar-md-royal .bar-button-outline-md-bright .button-effect{background-color:#ebb222}.toolbar-md-royal .bar-button-solid-md-bright{color:#424242;background-color:#ffc125}.toolbar-md-royal .bar-button-solid-md-bright.activated{color:#424242;background-color:#ebb222}.bar-button-clear-md-royal,.bar-button-md-royal,.bar-button-royal-md{color:#7e60ff;background-color:transparent}.bar-button-clear-md-royal:hover:not(.disable-hover),.bar-button-md-royal:hover:not(.disable-hover),.bar-button-royal-md:hover:not(.disable-hover){color:#7e60ff}.bar-button-outline-md-royal{border-color:#7458eb;color:#7458eb;background-color:transparent}.bar-button-outline-md-royal.activated{background-color:transparent}.bar-button-outline-md-royal .button-effect{background-color:#7458eb}.bar-button-solid-md-royal{color:#fff;background-color:#7e60ff}.bar-button-solid-md-royal.activated{color:#fff;background-color:#7458eb}.toolbar-md-subtle .toolbar-background-md{background:#444}.toolbar-md-subtle .bar-button-clear-md,.toolbar-md-subtle .bar-button-default-md,.toolbar-md-subtle .bar-button-outline-md,.toolbar-md-subtle .toolbar-title-md{color:#fff}.toolbar-md-subtle .bar-button-clear-md .button-effect,.toolbar-md-subtle .bar-button-default-md .button-effect,.toolbar-md-subtle .bar-button-outline-md .button-effect{background-color:#fff}.toolbar-md-subtle .bar-button-outline-md{border-color:#fff}.toolbar-md-subtle .bar-button-clear-md-primary,.toolbar-md-subtle .bar-button-md-primary,.toolbar-md-subtle .bar-button-primary-md{color:#488aff;background-color:transparent}.toolbar-md-subtle .bar-button-clear-md-primary:hover:not(.disable-hover),.toolbar-md-subtle .bar-button-md-primary:hover:not(.disable-hover),.toolbar-md-subtle .bar-button-primary-md:hover:not(.disable-hover){color:#488aff}.toolbar-md-subtle .bar-button-outline-md-primary{border-color:#427feb;color:#427feb;background-color:transparent}.toolbar-md-subtle .bar-button-outline-md-primary.activated{background-color:transparent}.toolbar-md-subtle .bar-button-outline-md-primary .button-effect{background-color:#427feb}.toolbar-md-subtle .bar-button-solid-md-primary{color:#fff;background-color:#488aff}.toolbar-md-subtle .bar-button-solid-md-primary.activated{color:#fff;background-color:#427feb}.toolbar-md-subtle .bar-button-clear-md-secondary,.toolbar-md-subtle .bar-button-md-secondary,.toolbar-md-subtle .bar-button-secondary-md{color:#32db64;background-color:transparent}.toolbar-md-subtle .bar-button-clear-md-secondary:hover:not(.disable-hover),.toolbar-md-subtle .bar-button-md-secondary:hover:not(.disable-hover),.toolbar-md-subtle .bar-button-secondary-md:hover:not(.disable-hover){color:#32db64}.toolbar-md-subtle .bar-button-outline-md-secondary{border-color:#2ec95c;color:#2ec95c;background-color:transparent}.toolbar-md-subtle .bar-button-outline-md-secondary.activated{background-color:transparent}.toolbar-md-subtle .bar-button-outline-md-secondary .button-effect{background-color:#2ec95c}.toolbar-md-subtle .bar-button-solid-md-secondary{color:#fff;background-color:#32db64}.toolbar-md-subtle .bar-button-solid-md-secondary.activated{color:#fff;background-color:#2ec95c}.toolbar-md-subtle .bar-button-clear-md-danger,.toolbar-md-subtle .bar-button-danger-md,.toolbar-md-subtle .bar-button-md-danger{color:#f53d3d;background-color:transparent}.toolbar-md-subtle .bar-button-clear-md-danger:hover:not(.disable-hover),.toolbar-md-subtle .bar-button-danger-md:hover:not(.disable-hover),.toolbar-md-subtle .bar-button-md-danger:hover:not(.disable-hover){color:#f53d3d}.toolbar-md-subtle .bar-button-outline-md-danger{border-color:#e13838;color:#e13838;background-color:transparent}.toolbar-md-subtle .bar-button-outline-md-danger.activated{background-color:transparent}.toolbar-md-subtle .bar-button-outline-md-danger .button-effect{background-color:#e13838}.toolbar-md-subtle .bar-button-solid-md-danger{color:#fff;background-color:#f53d3d}.toolbar-md-subtle .bar-button-solid-md-danger.activated{color:#fff;background-color:#e13838}.toolbar-md-subtle .bar-button-clear-md-light,.toolbar-md-subtle .bar-button-light-md,.toolbar-md-subtle .bar-button-md-light{color:#f4f4f4;background-color:transparent}.toolbar-md-subtle .bar-button-clear-md-light:hover:not(.disable-hover),.toolbar-md-subtle .bar-button-light-md:hover:not(.disable-hover),.toolbar-md-subtle .bar-button-md-light:hover:not(.disable-hover){color:#f4f4f4}.toolbar-md-subtle .bar-button-outline-md-light{border-color:#e0e0e0;color:#e0e0e0;background-color:transparent}.toolbar-md-subtle .bar-button-outline-md-light.activated{background-color:transparent}.toolbar-md-subtle .bar-button-outline-md-light .button-effect{background-color:#e0e0e0}.toolbar-md-subtle .bar-button-solid-md-light{color:#424242;background-color:#f4f4f4}.toolbar-md-subtle .bar-button-solid-md-light.activated{color:#424242;background-color:#e0e0e0}.toolbar-md-subtle .bar-button-clear-md-dark,.toolbar-md-subtle .bar-button-dark-md,.toolbar-md-subtle .bar-button-md-dark{color:#222;background-color:transparent}.toolbar-md-subtle .bar-button-clear-md-dark:hover:not(.disable-hover),.toolbar-md-subtle .bar-button-dark-md:hover:not(.disable-hover),.toolbar-md-subtle .bar-button-md-dark:hover:not(.disable-hover){color:#222}.toolbar-md-subtle .bar-button-outline-md-dark{border-color:#343434;color:#343434;background-color:transparent}.toolbar-md-subtle .bar-button-outline-md-dark.activated{background-color:transparent}.toolbar-md-subtle .bar-button-outline-md-dark .button-effect{background-color:#343434}.toolbar-md-subtle .bar-button-solid-md-dark{color:#fff;background-color:#222}.toolbar-md-subtle .bar-button-solid-md-dark.activated{color:#fff;background-color:#343434}.toolbar-md-subtle .bar-button-clear-md-energized,.toolbar-md-subtle .bar-button-energized-md,.toolbar-md-subtle .bar-button-md-energized{color:#ffc527;background-color:transparent}.toolbar-md-subtle .bar-button-clear-md-energized:hover:not(.disable-hover),.toolbar-md-subtle .bar-button-energized-md:hover:not(.disable-hover),.toolbar-md-subtle .bar-button-md-energized:hover:not(.disable-hover){color:#ffc527}.toolbar-md-subtle .bar-button-outline-md-energized{border-color:#ebb524;color:#ebb524;background-color:transparent}.toolbar-md-subtle .bar-button-outline-md-energized.activated{background-color:transparent}.toolbar-md-subtle .bar-button-outline-md-energized .button-effect{background-color:#ebb524}.toolbar-md-subtle .bar-button-solid-md-energized{color:#424242;background-color:#ffc527}.toolbar-md-subtle .bar-button-solid-md-energized.activated{color:#424242;background-color:#ebb524}.toolbar-md-subtle .bar-button-clear-md-royal,.toolbar-md-subtle .bar-button-md-royal,.toolbar-md-subtle .bar-button-royal-md{color:#7e60ff;background-color:transparent}.toolbar-md-subtle .bar-button-clear-md-royal:hover:not(.disable-hover),.toolbar-md-subtle .bar-button-md-royal:hover:not(.disable-hover),.toolbar-md-subtle .bar-button-royal-md:hover:not(.disable-hover){color:#7e60ff}.toolbar-md-subtle .bar-button-outline-md-royal{border-color:#7458eb;color:#7458eb;background-color:transparent}.toolbar-md-subtle .bar-button-outline-md-royal.activated{background-color:transparent}.toolbar-md-subtle .bar-button-outline-md-royal .button-effect{background-color:#7458eb}.toolbar-md-subtle .bar-button-solid-md-royal{color:#fff;background-color:#7e60ff}.toolbar-md-subtle .bar-button-solid-md-royal.activated{color:#fff;background-color:#7458eb}.toolbar-md-subtle .bar-button-clear-md-subtle,.toolbar-md-subtle .bar-button-md-subtle,.toolbar-md-subtle .bar-button-subtle-md{color:#444;background-color:transparent}.toolbar-md-subtle .bar-button-clear-md-subtle:hover:not(.disable-hover),.toolbar-md-subtle .bar-button-md-subtle:hover:not(.disable-hover),.toolbar-md-subtle .bar-button-subtle-md:hover:not(.disable-hover){color:#444}.toolbar-md-subtle .bar-button-outline-md-subtle{border-color:#535353;color:#535353;background-color:transparent}.toolbar-md-subtle .bar-button-outline-md-subtle.activated{background-color:transparent}.toolbar-md-subtle .bar-button-outline-md-subtle .button-effect{background-color:#535353}.toolbar-md-subtle .bar-button-solid-md-subtle{color:#fff;background-color:#444}.toolbar-md-subtle .bar-button-solid-md-subtle.activated{color:#fff;background-color:#535353}.toolbar-md-subtle .bar-button-clear-md-vibrant,.toolbar-md-subtle .bar-button-md-vibrant,.toolbar-md-subtle .bar-button-vibrant-md{color:#663399;background-color:transparent}.toolbar-md-subtle .bar-button-clear-md-vibrant:hover:not(.disable-hover),.toolbar-md-subtle .bar-button-md-vibrant:hover:not(.disable-hover),.toolbar-md-subtle .bar-button-vibrant-md:hover:not(.disable-hover){color:#663399}.toolbar-md-subtle .bar-button-outline-md-vibrant{border-color:#7243a1;color:#7243a1;background-color:transparent}.toolbar-md-subtle .bar-button-outline-md-vibrant.activated{background-color:transparent}.toolbar-md-subtle .bar-button-outline-md-vibrant .button-effect{background-color:#7243a1}.toolbar-md-subtle .bar-button-solid-md-vibrant{color:#fff;background-color:#663399}.toolbar-md-subtle .bar-button-solid-md-vibrant.activated{color:#fff;background-color:#7243a1}.toolbar-md-subtle .bar-button-bright-md,.toolbar-md-subtle .bar-button-clear-md-bright,.toolbar-md-subtle .bar-button-md-bright{color:#ffc125;background-color:transparent}.toolbar-md-subtle .bar-button-bright-md:hover:not(.disable-hover),.toolbar-md-subtle .bar-button-clear-md-bright:hover:not(.disable-hover),.toolbar-md-subtle .bar-button-md-bright:hover:not(.disable-hover){color:#ffc125}.toolbar-md-subtle .bar-button-outline-md-bright{border-color:#ebb222;color:#ebb222;background-color:transparent}.toolbar-md-subtle .bar-button-outline-md-bright.activated{background-color:transparent}.toolbar-md-subtle .bar-button-outline-md-bright .button-effect{background-color:#ebb222}.toolbar-md-subtle .bar-button-solid-md-bright{color:#424242;background-color:#ffc125}.toolbar-md-subtle .bar-button-solid-md-bright.activated{color:#424242;background-color:#ebb222}.bar-button-clear-md-subtle,.bar-button-md-subtle,.bar-button-subtle-md{color:#444;background-color:transparent}.bar-button-clear-md-subtle:hover:not(.disable-hover),.bar-button-md-subtle:hover:not(.disable-hover),.bar-button-subtle-md:hover:not(.disable-hover){color:#444}.bar-button-outline-md-subtle{border-color:#535353;color:#535353;background-color:transparent}.bar-button-outline-md-subtle.activated{background-color:transparent}.bar-button-outline-md-subtle .button-effect{background-color:#535353}.bar-button-solid-md-subtle{color:#fff;background-color:#444}.bar-button-solid-md-subtle.activated{color:#fff;background-color:#535353}.toolbar-md-vibrant .toolbar-background-md{background:#663399}.toolbar-md-vibrant .bar-button-clear-md,.toolbar-md-vibrant .bar-button-default-md,.toolbar-md-vibrant .bar-button-outline-md,.toolbar-md-vibrant .toolbar-title-md{color:#fff}.toolbar-md-vibrant .bar-button-clear-md .button-effect,.toolbar-md-vibrant .bar-button-default-md .button-effect,.toolbar-md-vibrant .bar-button-outline-md .button-effect{background-color:#fff}.toolbar-md-vibrant .bar-button-outline-md{border-color:#fff}.toolbar-md-vibrant .bar-button-clear-md-primary,.toolbar-md-vibrant .bar-button-md-primary,.toolbar-md-vibrant .bar-button-primary-md{color:#488aff;background-color:transparent}.toolbar-md-vibrant .bar-button-clear-md-primary:hover:not(.disable-hover),.toolbar-md-vibrant .bar-button-md-primary:hover:not(.disable-hover),.toolbar-md-vibrant .bar-button-primary-md:hover:not(.disable-hover){color:#488aff}.toolbar-md-vibrant .bar-button-outline-md-primary{border-color:#427feb;color:#427feb;background-color:transparent}.toolbar-md-vibrant .bar-button-outline-md-primary.activated{background-color:transparent}.toolbar-md-vibrant .bar-button-outline-md-primary .button-effect{background-color:#427feb}.toolbar-md-vibrant .bar-button-solid-md-primary{color:#fff;background-color:#488aff}.toolbar-md-vibrant .bar-button-solid-md-primary.activated{color:#fff;background-color:#427feb}.toolbar-md-vibrant .bar-button-clear-md-secondary,.toolbar-md-vibrant .bar-button-md-secondary,.toolbar-md-vibrant .bar-button-secondary-md{color:#32db64;background-color:transparent}.toolbar-md-vibrant .bar-button-clear-md-secondary:hover:not(.disable-hover),.toolbar-md-vibrant .bar-button-md-secondary:hover:not(.disable-hover),.toolbar-md-vibrant .bar-button-secondary-md:hover:not(.disable-hover){color:#32db64}.toolbar-md-vibrant .bar-button-outline-md-secondary{border-color:#2ec95c;color:#2ec95c;background-color:transparent}.toolbar-md-vibrant .bar-button-outline-md-secondary.activated{background-color:transparent}.toolbar-md-vibrant .bar-button-outline-md-secondary .button-effect{background-color:#2ec95c}.toolbar-md-vibrant .bar-button-solid-md-secondary{color:#fff;background-color:#32db64}.toolbar-md-vibrant .bar-button-solid-md-secondary.activated{color:#fff;background-color:#2ec95c}.toolbar-md-vibrant .bar-button-clear-md-danger,.toolbar-md-vibrant .bar-button-danger-md,.toolbar-md-vibrant .bar-button-md-danger{color:#f53d3d;background-color:transparent}.toolbar-md-vibrant .bar-button-clear-md-danger:hover:not(.disable-hover),.toolbar-md-vibrant .bar-button-danger-md:hover:not(.disable-hover),.toolbar-md-vibrant .bar-button-md-danger:hover:not(.disable-hover){color:#f53d3d}.toolbar-md-vibrant .bar-button-outline-md-danger{border-color:#e13838;color:#e13838;background-color:transparent}.toolbar-md-vibrant .bar-button-outline-md-danger.activated{background-color:transparent}.toolbar-md-vibrant .bar-button-outline-md-danger .button-effect{background-color:#e13838}.toolbar-md-vibrant .bar-button-solid-md-danger{color:#fff;background-color:#f53d3d}.toolbar-md-vibrant .bar-button-solid-md-danger.activated{color:#fff;background-color:#e13838}.toolbar-md-vibrant .bar-button-clear-md-light,.toolbar-md-vibrant .bar-button-light-md,.toolbar-md-vibrant .bar-button-md-light{color:#f4f4f4;background-color:transparent}.toolbar-md-vibrant .bar-button-clear-md-light:hover:not(.disable-hover),.toolbar-md-vibrant .bar-button-light-md:hover:not(.disable-hover),.toolbar-md-vibrant .bar-button-md-light:hover:not(.disable-hover){color:#f4f4f4}.toolbar-md-vibrant .bar-button-outline-md-light{border-color:#e0e0e0;color:#e0e0e0;background-color:transparent}.toolbar-md-vibrant .bar-button-outline-md-light.activated{background-color:transparent}.toolbar-md-vibrant .bar-button-outline-md-light .button-effect{background-color:#e0e0e0}.toolbar-md-vibrant .bar-button-solid-md-light{color:#424242;background-color:#f4f4f4}.toolbar-md-vibrant .bar-button-solid-md-light.activated{color:#424242;background-color:#e0e0e0}.toolbar-md-vibrant .bar-button-clear-md-dark,.toolbar-md-vibrant .bar-button-dark-md,.toolbar-md-vibrant .bar-button-md-dark{color:#222;background-color:transparent}.toolbar-md-vibrant .bar-button-clear-md-dark:hover:not(.disable-hover),.toolbar-md-vibrant .bar-button-dark-md:hover:not(.disable-hover),.toolbar-md-vibrant .bar-button-md-dark:hover:not(.disable-hover){color:#222}.toolbar-md-vibrant .bar-button-outline-md-dark{border-color:#343434;color:#343434;background-color:transparent}.toolbar-md-vibrant .bar-button-outline-md-dark.activated{background-color:transparent}.toolbar-md-vibrant .bar-button-outline-md-dark .button-effect{background-color:#343434}.toolbar-md-vibrant .bar-button-solid-md-dark{color:#fff;background-color:#222}.toolbar-md-vibrant .bar-button-solid-md-dark.activated{color:#fff;background-color:#343434}.toolbar-md-vibrant .bar-button-clear-md-energized,.toolbar-md-vibrant .bar-button-energized-md,.toolbar-md-vibrant .bar-button-md-energized{color:#ffc527;background-color:transparent}.toolbar-md-vibrant .bar-button-clear-md-energized:hover:not(.disable-hover),.toolbar-md-vibrant .bar-button-energized-md:hover:not(.disable-hover),.toolbar-md-vibrant .bar-button-md-energized:hover:not(.disable-hover){color:#ffc527}.toolbar-md-vibrant .bar-button-outline-md-energized{border-color:#ebb524;color:#ebb524;background-color:transparent}.toolbar-md-vibrant .bar-button-outline-md-energized.activated{background-color:transparent}.toolbar-md-vibrant .bar-button-outline-md-energized .button-effect{background-color:#ebb524}.toolbar-md-vibrant .bar-button-solid-md-energized{color:#424242;background-color:#ffc527}.toolbar-md-vibrant .bar-button-solid-md-energized.activated{color:#424242;background-color:#ebb524}.toolbar-md-vibrant .bar-button-clear-md-royal,.toolbar-md-vibrant .bar-button-md-royal,.toolbar-md-vibrant .bar-button-royal-md{color:#7e60ff;background-color:transparent}.toolbar-md-vibrant .bar-button-clear-md-royal:hover:not(.disable-hover),.toolbar-md-vibrant .bar-button-md-royal:hover:not(.disable-hover),.toolbar-md-vibrant .bar-button-royal-md:hover:not(.disable-hover){color:#7e60ff}.toolbar-md-vibrant .bar-button-outline-md-royal{border-color:#7458eb;color:#7458eb;background-color:transparent}.toolbar-md-vibrant .bar-button-outline-md-royal.activated{background-color:transparent}.toolbar-md-vibrant .bar-button-outline-md-royal .button-effect{background-color:#7458eb}.toolbar-md-vibrant .bar-button-solid-md-royal{color:#fff;background-color:#7e60ff}.toolbar-md-vibrant .bar-button-solid-md-royal.activated{color:#fff;background-color:#7458eb}.toolbar-md-vibrant .bar-button-clear-md-subtle,.toolbar-md-vibrant .bar-button-md-subtle,.toolbar-md-vibrant .bar-button-subtle-md{color:#444;background-color:transparent}.toolbar-md-vibrant .bar-button-clear-md-subtle:hover:not(.disable-hover),.toolbar-md-vibrant .bar-button-md-subtle:hover:not(.disable-hover),.toolbar-md-vibrant .bar-button-subtle-md:hover:not(.disable-hover){color:#444}.toolbar-md-vibrant .bar-button-outline-md-subtle{border-color:#535353;color:#535353;background-color:transparent}.toolbar-md-vibrant .bar-button-outline-md-subtle.activated{background-color:transparent}.toolbar-md-vibrant .bar-button-outline-md-subtle .button-effect{background-color:#535353}.toolbar-md-vibrant .bar-button-solid-md-subtle{color:#fff;background-color:#444}.toolbar-md-vibrant .bar-button-solid-md-subtle.activated{color:#fff;background-color:#535353}.toolbar-md-vibrant .bar-button-clear-md-vibrant,.toolbar-md-vibrant .bar-button-md-vibrant,.toolbar-md-vibrant .bar-button-vibrant-md{color:#663399;background-color:transparent}.toolbar-md-vibrant .bar-button-clear-md-vibrant:hover:not(.disable-hover),.toolbar-md-vibrant .bar-button-md-vibrant:hover:not(.disable-hover),.toolbar-md-vibrant .bar-button-vibrant-md:hover:not(.disable-hover){color:#663399}.toolbar-md-vibrant .bar-button-outline-md-vibrant{border-color:#7243a1;color:#7243a1;background-color:transparent}.toolbar-md-vibrant .bar-button-outline-md-vibrant.activated{background-color:transparent}.toolbar-md-vibrant .bar-button-outline-md-vibrant .button-effect{background-color:#7243a1}.toolbar-md-vibrant .bar-button-solid-md-vibrant{color:#fff;background-color:#663399}.toolbar-md-vibrant .bar-button-solid-md-vibrant.activated{color:#fff;background-color:#7243a1}.toolbar-md-vibrant .bar-button-bright-md,.toolbar-md-vibrant .bar-button-clear-md-bright,.toolbar-md-vibrant .bar-button-md-bright{color:#ffc125;background-color:transparent}.toolbar-md-vibrant .bar-button-bright-md:hover:not(.disable-hover),.toolbar-md-vibrant .bar-button-clear-md-bright:hover:not(.disable-hover),.toolbar-md-vibrant .bar-button-md-bright:hover:not(.disable-hover){color:#ffc125}.toolbar-md-vibrant .bar-button-outline-md-bright{border-color:#ebb222;color:#ebb222;background-color:transparent}.toolbar-md-vibrant .bar-button-outline-md-bright.activated{background-color:transparent}.toolbar-md-vibrant .bar-button-outline-md-bright .button-effect{background-color:#ebb222}.toolbar-md-vibrant .bar-button-solid-md-bright{color:#424242;background-color:#ffc125}.toolbar-md-vibrant .bar-button-solid-md-bright.activated{color:#424242;background-color:#ebb222}.bar-button-clear-md-vibrant,.bar-button-md-vibrant,.bar-button-vibrant-md{color:#663399;background-color:transparent}.bar-button-clear-md-vibrant:hover:not(.disable-hover),.bar-button-md-vibrant:hover:not(.disable-hover),.bar-button-vibrant-md:hover:not(.disable-hover){color:#663399}.bar-button-outline-md-vibrant{border-color:#7243a1;color:#7243a1;background-color:transparent}.bar-button-outline-md-vibrant.activated{background-color:transparent}.bar-button-outline-md-vibrant .button-effect{background-color:#7243a1}.bar-button-solid-md-vibrant{color:#fff;background-color:#663399}.bar-button-solid-md-vibrant.activated{color:#fff;background-color:#7243a1}.toolbar-md-bright .toolbar-background-md{background:#ffc125}.toolbar-md-bright .bar-button-clear-md,.toolbar-md-bright .bar-button-default-md,.toolbar-md-bright .bar-button-outline-md,.toolbar-md-bright .toolbar-title-md{color:#424242}.toolbar-md-bright .bar-button-clear-md .button-effect,.toolbar-md-bright .bar-button-default-md .button-effect,.toolbar-md-bright .bar-button-outline-md .button-effect{background-color:#424242}.toolbar-md-bright .bar-button-outline-md{border-color:#424242}.toolbar-md-bright .bar-button-clear-md-primary,.toolbar-md-bright .bar-button-md-primary,.toolbar-md-bright .bar-button-primary-md{color:#488aff;background-color:transparent}.toolbar-md-bright .bar-button-clear-md-primary:hover:not(.disable-hover),.toolbar-md-bright .bar-button-md-primary:hover:not(.disable-hover),.toolbar-md-bright .bar-button-primary-md:hover:not(.disable-hover){color:#488aff}.toolbar-md-bright .bar-button-outline-md-primary{border-color:#427feb;color:#427feb;background-color:transparent}.toolbar-md-bright .bar-button-outline-md-primary.activated{background-color:transparent}.toolbar-md-bright .bar-button-outline-md-primary .button-effect{background-color:#427feb}.toolbar-md-bright .bar-button-solid-md-primary{color:#fff;background-color:#488aff}.toolbar-md-bright .bar-button-solid-md-primary.activated{color:#fff;background-color:#427feb}.toolbar-md-bright .bar-button-clear-md-secondary,.toolbar-md-bright .bar-button-md-secondary,.toolbar-md-bright .bar-button-secondary-md{color:#32db64;background-color:transparent}.toolbar-md-bright .bar-button-clear-md-secondary:hover:not(.disable-hover),.toolbar-md-bright .bar-button-md-secondary:hover:not(.disable-hover),.toolbar-md-bright .bar-button-secondary-md:hover:not(.disable-hover){color:#32db64}.toolbar-md-bright .bar-button-outline-md-secondary{border-color:#2ec95c;color:#2ec95c;background-color:transparent}.toolbar-md-bright .bar-button-outline-md-secondary.activated{background-color:transparent}.toolbar-md-bright .bar-button-outline-md-secondary .button-effect{background-color:#2ec95c}.toolbar-md-bright .bar-button-solid-md-secondary{color:#fff;background-color:#32db64}.toolbar-md-bright .bar-button-solid-md-secondary.activated{color:#fff;background-color:#2ec95c}.toolbar-md-bright .bar-button-clear-md-danger,.toolbar-md-bright .bar-button-danger-md,.toolbar-md-bright .bar-button-md-danger{color:#f53d3d;background-color:transparent}.toolbar-md-bright .bar-button-clear-md-danger:hover:not(.disable-hover),.toolbar-md-bright .bar-button-danger-md:hover:not(.disable-hover),.toolbar-md-bright .bar-button-md-danger:hover:not(.disable-hover){color:#f53d3d}.toolbar-md-bright .bar-button-outline-md-danger{border-color:#e13838;color:#e13838;background-color:transparent}.toolbar-md-bright .bar-button-outline-md-danger.activated{background-color:transparent}.toolbar-md-bright .bar-button-outline-md-danger .button-effect{background-color:#e13838}.toolbar-md-bright .bar-button-solid-md-danger{color:#fff;background-color:#f53d3d}.toolbar-md-bright .bar-button-solid-md-danger.activated{color:#fff;background-color:#e13838}.toolbar-md-bright .bar-button-clear-md-light,.toolbar-md-bright .bar-button-light-md,.toolbar-md-bright .bar-button-md-light{color:#f4f4f4;background-color:transparent}.toolbar-md-bright .bar-button-clear-md-light:hover:not(.disable-hover),.toolbar-md-bright .bar-button-light-md:hover:not(.disable-hover),.toolbar-md-bright .bar-button-md-light:hover:not(.disable-hover){color:#f4f4f4}.toolbar-md-bright .bar-button-outline-md-light{border-color:#e0e0e0;color:#e0e0e0;background-color:transparent}.toolbar-md-bright .bar-button-outline-md-light.activated{background-color:transparent}.toolbar-md-bright .bar-button-outline-md-light .button-effect{background-color:#e0e0e0}.toolbar-md-bright .bar-button-solid-md-light{color:#424242;background-color:#f4f4f4}.toolbar-md-bright .bar-button-solid-md-light.activated{color:#424242;background-color:#e0e0e0}.toolbar-md-bright .bar-button-clear-md-dark,.toolbar-md-bright .bar-button-dark-md,.toolbar-md-bright .bar-button-md-dark{color:#222;background-color:transparent}.toolbar-md-bright .bar-button-clear-md-dark:hover:not(.disable-hover),.toolbar-md-bright .bar-button-dark-md:hover:not(.disable-hover),.toolbar-md-bright .bar-button-md-dark:hover:not(.disable-hover){color:#222}.toolbar-md-bright .bar-button-outline-md-dark{border-color:#343434;color:#343434;background-color:transparent}.toolbar-md-bright .bar-button-outline-md-dark.activated{background-color:transparent}.toolbar-md-bright .bar-button-outline-md-dark .button-effect{background-color:#343434}.toolbar-md-bright .bar-button-solid-md-dark{color:#fff;background-color:#222}.toolbar-md-bright .bar-button-solid-md-dark.activated{color:#fff;background-color:#343434}.toolbar-md-bright .bar-button-clear-md-energized,.toolbar-md-bright .bar-button-energized-md,.toolbar-md-bright .bar-button-md-energized{color:#ffc527;background-color:transparent}.toolbar-md-bright .bar-button-clear-md-energized:hover:not(.disable-hover),.toolbar-md-bright .bar-button-energized-md:hover:not(.disable-hover),.toolbar-md-bright .bar-button-md-energized:hover:not(.disable-hover){color:#ffc527}.toolbar-md-bright .bar-button-outline-md-energized{border-color:#ebb524;color:#ebb524;background-color:transparent}.toolbar-md-bright .bar-button-outline-md-energized.activated{background-color:transparent}.toolbar-md-bright .bar-button-outline-md-energized .button-effect{background-color:#ebb524}.toolbar-md-bright .bar-button-solid-md-energized{color:#424242;background-color:#ffc527}.toolbar-md-bright .bar-button-solid-md-energized.activated{color:#424242;background-color:#ebb524}.toolbar-md-bright .bar-button-clear-md-royal,.toolbar-md-bright .bar-button-md-royal,.toolbar-md-bright .bar-button-royal-md{color:#7e60ff;background-color:transparent}.toolbar-md-bright .bar-button-clear-md-royal:hover:not(.disable-hover),.toolbar-md-bright .bar-button-md-royal:hover:not(.disable-hover),.toolbar-md-bright .bar-button-royal-md:hover:not(.disable-hover){color:#7e60ff}.toolbar-md-bright .bar-button-outline-md-royal{border-color:#7458eb;color:#7458eb;background-color:transparent}.toolbar-md-bright .bar-button-outline-md-royal.activated{background-color:transparent}.toolbar-md-bright .bar-button-outline-md-royal .button-effect{background-color:#7458eb}.toolbar-md-bright .bar-button-solid-md-royal{color:#fff;background-color:#7e60ff}.toolbar-md-bright .bar-button-solid-md-royal.activated{color:#fff;background-color:#7458eb}.toolbar-md-bright .bar-button-clear-md-subtle,.toolbar-md-bright .bar-button-md-subtle,.toolbar-md-bright .bar-button-subtle-md{color:#444;background-color:transparent}.toolbar-md-bright .bar-button-clear-md-subtle:hover:not(.disable-hover),.toolbar-md-bright .bar-button-md-subtle:hover:not(.disable-hover),.toolbar-md-bright .bar-button-subtle-md:hover:not(.disable-hover){color:#444}.toolbar-md-bright .bar-button-outline-md-subtle{border-color:#535353;color:#535353;background-color:transparent}.toolbar-md-bright .bar-button-outline-md-subtle.activated{background-color:transparent}.toolbar-md-bright .bar-button-outline-md-subtle .button-effect{background-color:#535353}.toolbar-md-bright .bar-button-solid-md-subtle{color:#fff;background-color:#444}.toolbar-md-bright .bar-button-solid-md-subtle.activated{color:#fff;background-color:#535353}.toolbar-md-bright .bar-button-clear-md-vibrant,.toolbar-md-bright .bar-button-md-vibrant,.toolbar-md-bright .bar-button-vibrant-md{color:#663399;background-color:transparent}.toolbar-md-bright .bar-button-clear-md-vibrant:hover:not(.disable-hover),.toolbar-md-bright .bar-button-md-vibrant:hover:not(.disable-hover),.toolbar-md-bright .bar-button-vibrant-md:hover:not(.disable-hover){color:#663399}.toolbar-md-bright .bar-button-outline-md-vibrant{border-color:#7243a1;color:#7243a1;background-color:transparent}.toolbar-md-bright .bar-button-outline-md-vibrant.activated{background-color:transparent}.toolbar-md-bright .bar-button-outline-md-vibrant .button-effect{background-color:#7243a1}.toolbar-md-bright .bar-button-solid-md-vibrant{color:#fff;background-color:#663399}.toolbar-md-bright .bar-button-solid-md-vibrant.activated{color:#fff;background-color:#7243a1}.toolbar-md-bright .bar-button-bright-md,.toolbar-md-bright .bar-button-clear-md-bright,.toolbar-md-bright .bar-button-md-bright{color:#ffc125;background-color:transparent}.toolbar-md-bright .bar-button-bright-md:hover:not(.disable-hover),.toolbar-md-bright .bar-button-clear-md-bright:hover:not(.disable-hover),.toolbar-md-bright .bar-button-md-bright:hover:not(.disable-hover){color:#ffc125}.toolbar-md-bright .bar-button-outline-md-bright{border-color:#ebb222;color:#ebb222;background-color:transparent}.toolbar-md-bright .bar-button-outline-md-bright.activated{background-color:transparent}.toolbar-md-bright .bar-button-outline-md-bright .button-effect{background-color:#ebb222}.toolbar-md-bright .bar-button-solid-md-bright{color:#424242;background-color:#ffc125}.toolbar-md-bright .bar-button-solid-md-bright.activated{color:#424242;background-color:#ebb222}.bar-button-bright-md,.bar-button-clear-md-bright,.bar-button-md-bright{color:#ffc125;background-color:transparent}.bar-button-bright-md:hover:not(.disable-hover),.bar-button-clear-md-bright:hover:not(.disable-hover),.bar-button-md-bright:hover:not(.disable-hover){color:#ffc125}.bar-button-outline-md-bright{border-color:#ebb222;color:#ebb222;background-color:transparent}.bar-button-outline-md-bright.activated{background-color:transparent}.bar-button-outline-md-bright .button-effect{background-color:#ebb222}.bar-button-solid-md-bright{color:#424242;background-color:#ffc125}.bar-button-solid-md-bright.activated{color:#424242;background-color:#ebb222}.bar-button-strong-md{font-weight:700}.toolbar-wp{padding:4px;min-height:46px}.toolbar-background-wp{border-color:#b2b2b2;background:#f8f8f8}.toolbar-content-wp{-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1;-webkit-box-ordinal-group:4;-webkit-order:3;-ms-flex-order:3;order:3;min-width:0;max-width:100%}.toolbar-title-wp{font-size:1.5rem;font-weight:700;text-transform:uppercase;color:#000;padding:0 6px}.bar-buttons-wp{-webkit-box-ordinal-group:5;-webkit-order:4;-ms-flex-order:4;order:4;-webkit-transform:translateZ(0);transform:translateZ(0)}.bar-buttons-wp[left]{-webkit-box-ordinal-group:3;-webkit-order:2;-ms-flex-order:2;order:2}.bar-buttons-wp[left] .bar-button:first-child{margin-left:0}.bar-buttons-wp[end]{text-align:right;text-align:end;-webkit-box-ordinal-group:6;-webkit-order:5;-ms-flex-order:5;order:5}.bar-buttons-wp[right]{text-align:right;-webkit-box-ordinal-group:7;-webkit-order:6;-ms-flex-order:6;order:6}.bar-button-wp{margin:0 .2rem;padding:0 5px;border-radius:2px;height:32px;border:0;font-size:1.4rem;font-weight:500;text-transform:uppercase}.bar-button-outline-wp,.bar-button-solid-wp{overflow:hidden}.bar-button-outline-wp{border-width:1px;border-style:solid;border-color:#000;color:#000;background-color:transparent}.bar-button-outline-wp:hover:not(.disable-hover){opacity:.4}.bar-button-outline-wp.activated{color:#fff;background-color:#000}.bar-button-solid-wp{color:#fff;background-color:#000}.bar-button-solid-wp:hover:not(.disable-hover){color:#fff}.bar-button-solid-wp.activated{color:#fff;background-color:#141414}.bar-button-wp.bar-button-icon-start ion-icon{padding-right:.3em;font-size:1.4em;line-height:.67;pointer-events:none}.bar-button-wp.bar-button-icon-end ion-icon{padding-left:.4em;font-size:1.4em;line-height:.67;pointer-events:none}.bar-button-wp[icon-only]{padding:0}.bar-button-wp[icon-only] ion-icon{padding:0 .1em;min-width:28px;font-size:1.8em;line-height:.67;pointer-events:none}.back-button-wp{margin:0 6px;min-width:44px;-webkit-box-shadow:none;box-shadow:none}.back-button-icon-wp{text-align:left;text-align:start;margin:0;padding:0 6px;font-size:2.4rem;font-weight:400}.bar-button-menutoggle-wp{margin:0 6px;padding:0 2px;-webkit-box-ordinal-group:2;-webkit-order:1;-ms-flex-order:1;order:1;min-width:44px}.bar-button-menutoggle-wp ion-icon{padding:0 6px;font-size:2.4rem}.bar-button-menutoggle-wp[end],.bar-button-menutoggle-wp[right]{margin:0 2px;-webkit-box-ordinal-group:8;-webkit-order:7;-ms-flex-order:7;order:7;min-width:28px}.bar-button-clear-wp-default,.bar-button-default-wp,.bar-button-wp-default{color:#000;background-color:transparent}.bar-button-clear-wp-default:hover:not(.disable-hover),.bar-button-default-wp:hover:not(.disable-hover),.bar-button-wp-default:hover:not(.disable-hover){color:#000}.bar-button-clear-wp,.bar-button-clear-wp-clear,.bar-button-wp-clear{color:#000;background-color:transparent}.bar-button-clear-wp-clear:hover:not(.disable-hover),.bar-button-clear-wp:hover:not(.disable-hover),.bar-button-wp-clear:hover:not(.disable-hover){color:#000}.toolbar-wp-primary .toolbar-background-wp{background:#488aff}.toolbar-wp-primary .bar-button-clear-wp,.toolbar-wp-primary .bar-button-default-wp,.toolbar-wp-primary .bar-button-outline-wp,.toolbar-wp-primary .toolbar-title-wp{color:#fff}.toolbar-wp-primary .bar-button-outline-wp{border-color:#fff}.toolbar-wp-primary .bar-button-clear-wp-primary,.toolbar-wp-primary .bar-button-primary-wp,.toolbar-wp-primary .bar-button-wp-primary{color:#488aff;background-color:transparent}.toolbar-wp-primary .bar-button-clear-wp-primary:hover:not(.disable-hover),.toolbar-wp-primary .bar-button-primary-wp:hover:not(.disable-hover),.toolbar-wp-primary .bar-button-wp-primary:hover:not(.disable-hover){color:#488aff}.toolbar-wp-primary .bar-button-outline-wp-primary{border-color:#427feb;color:#427feb;background-color:transparent}.toolbar-wp-primary .bar-button-outline-wp-primary.activated{color:#fff;background-color:#427feb}.toolbar-wp-primary .bar-button-solid-wp-primary{color:#fff;background-color:#488aff}.toolbar-wp-primary .bar-button-solid-wp-primary.activated{color:#fff;background-color:#427feb}.toolbar-wp-primary .bar-button-clear-wp-secondary,.toolbar-wp-primary .bar-button-secondary-wp,.toolbar-wp-primary .bar-button-wp-secondary{color:#32db64;background-color:transparent}.toolbar-wp-primary .bar-button-clear-wp-secondary:hover:not(.disable-hover),.toolbar-wp-primary .bar-button-secondary-wp:hover:not(.disable-hover),.toolbar-wp-primary .bar-button-wp-secondary:hover:not(.disable-hover){color:#32db64}.toolbar-wp-primary .bar-button-outline-wp-secondary{border-color:#2ec95c;color:#2ec95c;background-color:transparent}.toolbar-wp-primary .bar-button-outline-wp-secondary.activated{color:#fff;background-color:#2ec95c}.toolbar-wp-primary .bar-button-solid-wp-secondary{color:#fff;background-color:#32db64}.toolbar-wp-primary .bar-button-solid-wp-secondary.activated{color:#fff;background-color:#2ec95c}.toolbar-wp-primary .bar-button-clear-wp-danger,.toolbar-wp-primary .bar-button-danger-wp,.toolbar-wp-primary .bar-button-wp-danger{color:#f53d3d;background-color:transparent}.toolbar-wp-primary .bar-button-clear-wp-danger:hover:not(.disable-hover),.toolbar-wp-primary .bar-button-danger-wp:hover:not(.disable-hover),.toolbar-wp-primary .bar-button-wp-danger:hover:not(.disable-hover){color:#f53d3d}.toolbar-wp-primary .bar-button-outline-wp-danger{border-color:#e13838;color:#e13838;background-color:transparent}.toolbar-wp-primary .bar-button-outline-wp-danger.activated{color:#fff;background-color:#e13838}.toolbar-wp-primary .bar-button-solid-wp-danger{color:#fff;background-color:#f53d3d}.toolbar-wp-primary .bar-button-solid-wp-danger.activated{color:#fff;background-color:#e13838}.toolbar-wp-primary .bar-button-clear-wp-light,.toolbar-wp-primary .bar-button-light-wp,.toolbar-wp-primary .bar-button-wp-light{color:#f4f4f4;background-color:transparent}.toolbar-wp-primary .bar-button-clear-wp-light:hover:not(.disable-hover),.toolbar-wp-primary .bar-button-light-wp:hover:not(.disable-hover),.toolbar-wp-primary .bar-button-wp-light:hover:not(.disable-hover){color:#f4f4f4}.toolbar-wp-primary .bar-button-outline-wp-light{border-color:#e0e0e0;color:#e0e0e0;background-color:transparent}.toolbar-wp-primary .bar-button-outline-wp-light.activated{color:#000;background-color:#e0e0e0}.toolbar-wp-primary .bar-button-solid-wp-light{color:#000;background-color:#f4f4f4}.toolbar-wp-primary .bar-button-solid-wp-light.activated{color:#000;background-color:#e0e0e0}.toolbar-wp-primary .bar-button-clear-wp-dark,.toolbar-wp-primary .bar-button-dark-wp,.toolbar-wp-primary .bar-button-wp-dark{color:#222;background-color:transparent}.toolbar-wp-primary .bar-button-clear-wp-dark:hover:not(.disable-hover),.toolbar-wp-primary .bar-button-dark-wp:hover:not(.disable-hover),.toolbar-wp-primary .bar-button-wp-dark:hover:not(.disable-hover){color:#222}.toolbar-wp-primary .bar-button-outline-wp-dark{border-color:#343434;color:#343434;background-color:transparent}.toolbar-wp-primary .bar-button-outline-wp-dark.activated{color:#fff;background-color:#343434}.toolbar-wp-primary .bar-button-solid-wp-dark{color:#fff;background-color:#222}.toolbar-wp-primary .bar-button-solid-wp-dark.activated{color:#fff;background-color:#343434}.toolbar-wp-primary .bar-button-clear-wp-energized,.toolbar-wp-primary .bar-button-energized-wp,.toolbar-wp-primary .bar-button-wp-energized{color:#ffc527;background-color:transparent}.toolbar-wp-primary .bar-button-clear-wp-energized:hover:not(.disable-hover),.toolbar-wp-primary .bar-button-energized-wp:hover:not(.disable-hover),.toolbar-wp-primary .bar-button-wp-energized:hover:not(.disable-hover){color:#ffc527}.toolbar-wp-primary .bar-button-outline-wp-energized{border-color:#ebb524;color:#ebb524;background-color:transparent}.toolbar-wp-primary .bar-button-outline-wp-energized.activated{color:#000;background-color:#ebb524}.toolbar-wp-primary .bar-button-solid-wp-energized{color:#000;background-color:#ffc527}.toolbar-wp-primary .bar-button-solid-wp-energized.activated{color:#000;background-color:#ebb524}.toolbar-wp-primary .bar-button-clear-wp-royal,.toolbar-wp-primary .bar-button-royal-wp,.toolbar-wp-primary .bar-button-wp-royal{color:#7e60ff;background-color:transparent}.toolbar-wp-primary .bar-button-clear-wp-royal:hover:not(.disable-hover),.toolbar-wp-primary .bar-button-royal-wp:hover:not(.disable-hover),.toolbar-wp-primary .bar-button-wp-royal:hover:not(.disable-hover){color:#7e60ff}.toolbar-wp-primary .bar-button-outline-wp-royal{border-color:#7458eb;color:#7458eb;background-color:transparent}.toolbar-wp-primary .bar-button-outline-wp-royal.activated{color:#fff;background-color:#7458eb}.toolbar-wp-primary .bar-button-solid-wp-royal{color:#fff;background-color:#7e60ff}.toolbar-wp-primary .bar-button-solid-wp-royal.activated{color:#fff;background-color:#7458eb}.toolbar-wp-primary .bar-button-clear-wp-subtle,.toolbar-wp-primary .bar-button-subtle-wp,.toolbar-wp-primary .bar-button-wp-subtle{color:#444;background-color:transparent}.toolbar-wp-primary .bar-button-clear-wp-subtle:hover:not(.disable-hover),.toolbar-wp-primary .bar-button-subtle-wp:hover:not(.disable-hover),.toolbar-wp-primary .bar-button-wp-subtle:hover:not(.disable-hover){color:#444}.toolbar-wp-primary .bar-button-outline-wp-subtle{border-color:#535353;color:#535353;background-color:transparent}.toolbar-wp-primary .bar-button-outline-wp-subtle.activated{color:#fff;background-color:#535353}.toolbar-wp-primary .bar-button-solid-wp-subtle{color:#fff;background-color:#444}.toolbar-wp-primary .bar-button-solid-wp-subtle.activated{color:#fff;background-color:#535353}.toolbar-wp-primary .bar-button-clear-wp-vibrant,.toolbar-wp-primary .bar-button-vibrant-wp,.toolbar-wp-primary .bar-button-wp-vibrant{color:#663399;background-color:transparent}.toolbar-wp-primary .bar-button-clear-wp-vibrant:hover:not(.disable-hover),.toolbar-wp-primary .bar-button-vibrant-wp:hover:not(.disable-hover),.toolbar-wp-primary .bar-button-wp-vibrant:hover:not(.disable-hover){color:#663399}.toolbar-wp-primary .bar-button-outline-wp-vibrant{border-color:#7243a1;color:#7243a1;background-color:transparent}.toolbar-wp-primary .bar-button-outline-wp-vibrant.activated{color:#fff;background-color:#7243a1}.toolbar-wp-primary .bar-button-solid-wp-vibrant{color:#fff;background-color:#663399}.toolbar-wp-primary .bar-button-solid-wp-vibrant.activated{color:#fff;background-color:#7243a1}.toolbar-wp-primary .bar-button-bright-wp,.toolbar-wp-primary .bar-button-clear-wp-bright,.toolbar-wp-primary .bar-button-wp-bright{color:#ffc125;background-color:transparent}.toolbar-wp-primary .bar-button-bright-wp:hover:not(.disable-hover),.toolbar-wp-primary .bar-button-clear-wp-bright:hover:not(.disable-hover),.toolbar-wp-primary .bar-button-wp-bright:hover:not(.disable-hover){color:#ffc125}.toolbar-wp-primary .bar-button-outline-wp-bright{border-color:#ebb222;color:#ebb222;background-color:transparent}.toolbar-wp-primary .bar-button-outline-wp-bright.activated{color:#000;background-color:#ebb222}.toolbar-wp-primary .bar-button-solid-wp-bright{color:#000;background-color:#ffc125}.toolbar-wp-primary .bar-button-solid-wp-bright.activated{color:#000;background-color:#ebb222}.bar-button-clear-wp-primary,.bar-button-primary-wp,.bar-button-wp-primary{color:#488aff;background-color:transparent}.bar-button-clear-wp-primary:hover:not(.disable-hover),.bar-button-primary-wp:hover:not(.disable-hover),.bar-button-wp-primary:hover:not(.disable-hover){color:#488aff}.bar-button-outline-wp-primary{border-color:#427feb;color:#427feb;background-color:transparent}.bar-button-outline-wp-primary.activated{color:#fff;background-color:#427feb}.bar-button-solid-wp-primary{color:#fff;background-color:#488aff}.bar-button-solid-wp-primary.activated{color:#fff;background-color:#427feb}.toolbar-wp-secondary .toolbar-background-wp{background:#32db64}.toolbar-wp-secondary .bar-button-clear-wp,.toolbar-wp-secondary .bar-button-default-wp,.toolbar-wp-secondary .bar-button-outline-wp,.toolbar-wp-secondary .toolbar-title-wp{color:#fff}.toolbar-wp-secondary .bar-button-outline-wp{border-color:#fff}.toolbar-wp-secondary .bar-button-clear-wp-primary,.toolbar-wp-secondary .bar-button-primary-wp,.toolbar-wp-secondary .bar-button-wp-primary{color:#488aff;background-color:transparent}.toolbar-wp-secondary .bar-button-clear-wp-primary:hover:not(.disable-hover),.toolbar-wp-secondary .bar-button-primary-wp:hover:not(.disable-hover),.toolbar-wp-secondary .bar-button-wp-primary:hover:not(.disable-hover){color:#488aff}.toolbar-wp-secondary .bar-button-outline-wp-primary{border-color:#427feb;color:#427feb;background-color:transparent}.toolbar-wp-secondary .bar-button-outline-wp-primary.activated{color:#fff;background-color:#427feb}.toolbar-wp-secondary .bar-button-solid-wp-primary{color:#fff;background-color:#488aff}.toolbar-wp-secondary .bar-button-solid-wp-primary.activated{color:#fff;background-color:#427feb}.toolbar-wp-secondary .bar-button-clear-wp-secondary,.toolbar-wp-secondary .bar-button-secondary-wp,.toolbar-wp-secondary .bar-button-wp-secondary{color:#32db64;background-color:transparent}.toolbar-wp-secondary .bar-button-clear-wp-secondary:hover:not(.disable-hover),.toolbar-wp-secondary .bar-button-secondary-wp:hover:not(.disable-hover),.toolbar-wp-secondary .bar-button-wp-secondary:hover:not(.disable-hover){color:#32db64}.toolbar-wp-secondary .bar-button-outline-wp-secondary{border-color:#2ec95c;color:#2ec95c;background-color:transparent}.toolbar-wp-secondary .bar-button-outline-wp-secondary.activated{color:#fff;background-color:#2ec95c}.toolbar-wp-secondary .bar-button-solid-wp-secondary{color:#fff;background-color:#32db64}.toolbar-wp-secondary .bar-button-solid-wp-secondary.activated{color:#fff;background-color:#2ec95c}.toolbar-wp-secondary .bar-button-clear-wp-danger,.toolbar-wp-secondary .bar-button-danger-wp,.toolbar-wp-secondary .bar-button-wp-danger{color:#f53d3d;background-color:transparent}.toolbar-wp-secondary .bar-button-clear-wp-danger:hover:not(.disable-hover),.toolbar-wp-secondary .bar-button-danger-wp:hover:not(.disable-hover),.toolbar-wp-secondary .bar-button-wp-danger:hover:not(.disable-hover){color:#f53d3d}.toolbar-wp-secondary .bar-button-outline-wp-danger{border-color:#e13838;color:#e13838;background-color:transparent}.toolbar-wp-secondary .bar-button-outline-wp-danger.activated{color:#fff;background-color:#e13838}.toolbar-wp-secondary .bar-button-solid-wp-danger{color:#fff;background-color:#f53d3d}.toolbar-wp-secondary .bar-button-solid-wp-danger.activated{color:#fff;background-color:#e13838}.toolbar-wp-secondary .bar-button-clear-wp-light,.toolbar-wp-secondary .bar-button-light-wp,.toolbar-wp-secondary .bar-button-wp-light{color:#f4f4f4;background-color:transparent}.toolbar-wp-secondary .bar-button-clear-wp-light:hover:not(.disable-hover),.toolbar-wp-secondary .bar-button-light-wp:hover:not(.disable-hover),.toolbar-wp-secondary .bar-button-wp-light:hover:not(.disable-hover){color:#f4f4f4}.toolbar-wp-secondary .bar-button-outline-wp-light{border-color:#e0e0e0;color:#e0e0e0;background-color:transparent}.toolbar-wp-secondary .bar-button-outline-wp-light.activated{color:#000;background-color:#e0e0e0}.toolbar-wp-secondary .bar-button-solid-wp-light{color:#000;background-color:#f4f4f4}.toolbar-wp-secondary .bar-button-solid-wp-light.activated{color:#000;background-color:#e0e0e0}.toolbar-wp-secondary .bar-button-clear-wp-dark,.toolbar-wp-secondary .bar-button-dark-wp,.toolbar-wp-secondary .bar-button-wp-dark{color:#222;background-color:transparent}.toolbar-wp-secondary .bar-button-clear-wp-dark:hover:not(.disable-hover),.toolbar-wp-secondary .bar-button-dark-wp:hover:not(.disable-hover),.toolbar-wp-secondary .bar-button-wp-dark:hover:not(.disable-hover){color:#222}.toolbar-wp-secondary .bar-button-outline-wp-dark{border-color:#343434;color:#343434;background-color:transparent}.toolbar-wp-secondary .bar-button-outline-wp-dark.activated{color:#fff;background-color:#343434}.toolbar-wp-secondary .bar-button-solid-wp-dark{color:#fff;background-color:#222}.toolbar-wp-secondary .bar-button-solid-wp-dark.activated{color:#fff;background-color:#343434}.toolbar-wp-secondary .bar-button-clear-wp-energized,.toolbar-wp-secondary .bar-button-energized-wp,.toolbar-wp-secondary .bar-button-wp-energized{color:#ffc527;background-color:transparent}.toolbar-wp-secondary .bar-button-clear-wp-energized:hover:not(.disable-hover),.toolbar-wp-secondary .bar-button-energized-wp:hover:not(.disable-hover),.toolbar-wp-secondary .bar-button-wp-energized:hover:not(.disable-hover){color:#ffc527}.toolbar-wp-secondary .bar-button-outline-wp-energized{border-color:#ebb524;color:#ebb524;background-color:transparent}.toolbar-wp-secondary .bar-button-outline-wp-energized.activated{color:#000;background-color:#ebb524}.toolbar-wp-secondary .bar-button-solid-wp-energized{color:#000;background-color:#ffc527}.toolbar-wp-secondary .bar-button-solid-wp-energized.activated{color:#000;background-color:#ebb524}.toolbar-wp-secondary .bar-button-clear-wp-royal,.toolbar-wp-secondary .bar-button-royal-wp,.toolbar-wp-secondary .bar-button-wp-royal{color:#7e60ff;background-color:transparent}.toolbar-wp-secondary .bar-button-clear-wp-royal:hover:not(.disable-hover),.toolbar-wp-secondary .bar-button-royal-wp:hover:not(.disable-hover),.toolbar-wp-secondary .bar-button-wp-royal:hover:not(.disable-hover){color:#7e60ff}.toolbar-wp-secondary .bar-button-outline-wp-royal{border-color:#7458eb;color:#7458eb;background-color:transparent}.toolbar-wp-secondary .bar-button-outline-wp-royal.activated{color:#fff;background-color:#7458eb}.toolbar-wp-secondary .bar-button-solid-wp-royal{color:#fff;background-color:#7e60ff}.toolbar-wp-secondary .bar-button-solid-wp-royal.activated{color:#fff;background-color:#7458eb}.toolbar-wp-secondary .bar-button-clear-wp-subtle,.toolbar-wp-secondary .bar-button-subtle-wp,.toolbar-wp-secondary .bar-button-wp-subtle{color:#444;background-color:transparent}.toolbar-wp-secondary .bar-button-clear-wp-subtle:hover:not(.disable-hover),.toolbar-wp-secondary .bar-button-subtle-wp:hover:not(.disable-hover),.toolbar-wp-secondary .bar-button-wp-subtle:hover:not(.disable-hover){color:#444}.toolbar-wp-secondary .bar-button-outline-wp-subtle{border-color:#535353;color:#535353;background-color:transparent}.toolbar-wp-secondary .bar-button-outline-wp-subtle.activated{color:#fff;background-color:#535353}.toolbar-wp-secondary .bar-button-solid-wp-subtle{color:#fff;background-color:#444}.toolbar-wp-secondary .bar-button-solid-wp-subtle.activated{color:#fff;background-color:#535353}.toolbar-wp-secondary .bar-button-clear-wp-vibrant,.toolbar-wp-secondary .bar-button-vibrant-wp,.toolbar-wp-secondary .bar-button-wp-vibrant{color:#663399;background-color:transparent}.toolbar-wp-secondary .bar-button-clear-wp-vibrant:hover:not(.disable-hover),.toolbar-wp-secondary .bar-button-vibrant-wp:hover:not(.disable-hover),.toolbar-wp-secondary .bar-button-wp-vibrant:hover:not(.disable-hover){color:#663399}.toolbar-wp-secondary .bar-button-outline-wp-vibrant{border-color:#7243a1;color:#7243a1;background-color:transparent}.toolbar-wp-secondary .bar-button-outline-wp-vibrant.activated{color:#fff;background-color:#7243a1}.toolbar-wp-secondary .bar-button-solid-wp-vibrant{color:#fff;background-color:#663399}.toolbar-wp-secondary .bar-button-solid-wp-vibrant.activated{color:#fff;background-color:#7243a1}.toolbar-wp-secondary .bar-button-bright-wp,.toolbar-wp-secondary .bar-button-clear-wp-bright,.toolbar-wp-secondary .bar-button-wp-bright{color:#ffc125;background-color:transparent}.toolbar-wp-secondary .bar-button-bright-wp:hover:not(.disable-hover),.toolbar-wp-secondary .bar-button-clear-wp-bright:hover:not(.disable-hover),.toolbar-wp-secondary .bar-button-wp-bright:hover:not(.disable-hover){color:#ffc125}.toolbar-wp-secondary .bar-button-outline-wp-bright{border-color:#ebb222;color:#ebb222;background-color:transparent}.toolbar-wp-secondary .bar-button-outline-wp-bright.activated{color:#000;background-color:#ebb222}.toolbar-wp-secondary .bar-button-solid-wp-bright{color:#000;background-color:#ffc125}.toolbar-wp-secondary .bar-button-solid-wp-bright.activated{color:#000;background-color:#ebb222}.bar-button-clear-wp-secondary,.bar-button-secondary-wp,.bar-button-wp-secondary{color:#32db64;background-color:transparent}.bar-button-clear-wp-secondary:hover:not(.disable-hover),.bar-button-secondary-wp:hover:not(.disable-hover),.bar-button-wp-secondary:hover:not(.disable-hover){color:#32db64}.bar-button-outline-wp-secondary{border-color:#2ec95c;color:#2ec95c;background-color:transparent}.bar-button-outline-wp-secondary.activated{color:#fff;background-color:#2ec95c}.bar-button-solid-wp-secondary{color:#fff;background-color:#32db64}.bar-button-solid-wp-secondary.activated{color:#fff;background-color:#2ec95c}.toolbar-wp-danger .toolbar-background-wp{background:#f53d3d}.toolbar-wp-danger .bar-button-clear-wp,.toolbar-wp-danger .bar-button-default-wp,.toolbar-wp-danger .bar-button-outline-wp,.toolbar-wp-danger .toolbar-title-wp{color:#fff}.toolbar-wp-danger .bar-button-outline-wp{border-color:#fff}.toolbar-wp-danger .bar-button-clear-wp-primary,.toolbar-wp-danger .bar-button-primary-wp,.toolbar-wp-danger .bar-button-wp-primary{color:#488aff;background-color:transparent}.toolbar-wp-danger .bar-button-clear-wp-primary:hover:not(.disable-hover),.toolbar-wp-danger .bar-button-primary-wp:hover:not(.disable-hover),.toolbar-wp-danger .bar-button-wp-primary:hover:not(.disable-hover){color:#488aff}.toolbar-wp-danger .bar-button-outline-wp-primary{border-color:#427feb;color:#427feb;background-color:transparent}.toolbar-wp-danger .bar-button-outline-wp-primary.activated{color:#fff;background-color:#427feb}.toolbar-wp-danger .bar-button-solid-wp-primary{color:#fff;background-color:#488aff}.toolbar-wp-danger .bar-button-solid-wp-primary.activated{color:#fff;background-color:#427feb}.toolbar-wp-danger .bar-button-clear-wp-secondary,.toolbar-wp-danger .bar-button-secondary-wp,.toolbar-wp-danger .bar-button-wp-secondary{color:#32db64;background-color:transparent}.toolbar-wp-danger .bar-button-clear-wp-secondary:hover:not(.disable-hover),.toolbar-wp-danger .bar-button-secondary-wp:hover:not(.disable-hover),.toolbar-wp-danger .bar-button-wp-secondary:hover:not(.disable-hover){color:#32db64}.toolbar-wp-danger .bar-button-outline-wp-secondary{border-color:#2ec95c;color:#2ec95c;background-color:transparent}.toolbar-wp-danger .bar-button-outline-wp-secondary.activated{color:#fff;background-color:#2ec95c}.toolbar-wp-danger .bar-button-solid-wp-secondary{color:#fff;background-color:#32db64}.toolbar-wp-danger .bar-button-solid-wp-secondary.activated{color:#fff;background-color:#2ec95c}.toolbar-wp-danger .bar-button-clear-wp-danger,.toolbar-wp-danger .bar-button-danger-wp,.toolbar-wp-danger .bar-button-wp-danger{color:#f53d3d;background-color:transparent}.toolbar-wp-danger .bar-button-clear-wp-danger:hover:not(.disable-hover),.toolbar-wp-danger .bar-button-danger-wp:hover:not(.disable-hover),.toolbar-wp-danger .bar-button-wp-danger:hover:not(.disable-hover){color:#f53d3d}.toolbar-wp-danger .bar-button-outline-wp-danger{border-color:#e13838;color:#e13838;background-color:transparent}.toolbar-wp-danger .bar-button-outline-wp-danger.activated{color:#fff;background-color:#e13838}.toolbar-wp-danger .bar-button-solid-wp-danger{color:#fff;background-color:#f53d3d}.toolbar-wp-danger .bar-button-solid-wp-danger.activated{color:#fff;background-color:#e13838}.toolbar-wp-danger .bar-button-clear-wp-light,.toolbar-wp-danger .bar-button-light-wp,.toolbar-wp-danger .bar-button-wp-light{color:#f4f4f4;background-color:transparent}.toolbar-wp-danger .bar-button-clear-wp-light:hover:not(.disable-hover),.toolbar-wp-danger .bar-button-light-wp:hover:not(.disable-hover),.toolbar-wp-danger .bar-button-wp-light:hover:not(.disable-hover){color:#f4f4f4}.toolbar-wp-danger .bar-button-outline-wp-light{border-color:#e0e0e0;color:#e0e0e0;background-color:transparent}.toolbar-wp-danger .bar-button-outline-wp-light.activated{color:#000;background-color:#e0e0e0}.toolbar-wp-danger .bar-button-solid-wp-light{color:#000;background-color:#f4f4f4}.toolbar-wp-danger .bar-button-solid-wp-light.activated{color:#000;background-color:#e0e0e0}.toolbar-wp-danger .bar-button-clear-wp-dark,.toolbar-wp-danger .bar-button-dark-wp,.toolbar-wp-danger .bar-button-wp-dark{color:#222;background-color:transparent}.toolbar-wp-danger .bar-button-clear-wp-dark:hover:not(.disable-hover),.toolbar-wp-danger .bar-button-dark-wp:hover:not(.disable-hover),.toolbar-wp-danger .bar-button-wp-dark:hover:not(.disable-hover){color:#222}.toolbar-wp-danger .bar-button-outline-wp-dark{border-color:#343434;color:#343434;background-color:transparent}.toolbar-wp-danger .bar-button-outline-wp-dark.activated{color:#fff;background-color:#343434}.toolbar-wp-danger .bar-button-solid-wp-dark{color:#fff;background-color:#222}.toolbar-wp-danger .bar-button-solid-wp-dark.activated{color:#fff;background-color:#343434}.toolbar-wp-danger .bar-button-clear-wp-energized,.toolbar-wp-danger .bar-button-energized-wp,.toolbar-wp-danger .bar-button-wp-energized{color:#ffc527;background-color:transparent}.toolbar-wp-danger .bar-button-clear-wp-energized:hover:not(.disable-hover),.toolbar-wp-danger .bar-button-energized-wp:hover:not(.disable-hover),.toolbar-wp-danger .bar-button-wp-energized:hover:not(.disable-hover){color:#ffc527}.toolbar-wp-danger .bar-button-outline-wp-energized{border-color:#ebb524;color:#ebb524;background-color:transparent}.toolbar-wp-danger .bar-button-outline-wp-energized.activated{color:#000;background-color:#ebb524}.toolbar-wp-danger .bar-button-solid-wp-energized{color:#000;background-color:#ffc527}.toolbar-wp-danger .bar-button-solid-wp-energized.activated{color:#000;background-color:#ebb524}.toolbar-wp-danger .bar-button-clear-wp-royal,.toolbar-wp-danger .bar-button-royal-wp,.toolbar-wp-danger .bar-button-wp-royal{color:#7e60ff;background-color:transparent}.toolbar-wp-danger .bar-button-clear-wp-royal:hover:not(.disable-hover),.toolbar-wp-danger .bar-button-royal-wp:hover:not(.disable-hover),.toolbar-wp-danger .bar-button-wp-royal:hover:not(.disable-hover){color:#7e60ff}.toolbar-wp-danger .bar-button-outline-wp-royal{border-color:#7458eb;color:#7458eb;background-color:transparent}.toolbar-wp-danger .bar-button-outline-wp-royal.activated{color:#fff;background-color:#7458eb}.toolbar-wp-danger .bar-button-solid-wp-royal{color:#fff;background-color:#7e60ff}.toolbar-wp-danger .bar-button-solid-wp-royal.activated{color:#fff;background-color:#7458eb}.toolbar-wp-danger .bar-button-clear-wp-subtle,.toolbar-wp-danger .bar-button-subtle-wp,.toolbar-wp-danger .bar-button-wp-subtle{color:#444;background-color:transparent}.toolbar-wp-danger .bar-button-clear-wp-subtle:hover:not(.disable-hover),.toolbar-wp-danger .bar-button-subtle-wp:hover:not(.disable-hover),.toolbar-wp-danger .bar-button-wp-subtle:hover:not(.disable-hover){color:#444}.toolbar-wp-danger .bar-button-outline-wp-subtle{border-color:#535353;color:#535353;background-color:transparent}.toolbar-wp-danger .bar-button-outline-wp-subtle.activated{color:#fff;background-color:#535353}.toolbar-wp-danger .bar-button-solid-wp-subtle{color:#fff;background-color:#444}.toolbar-wp-danger .bar-button-solid-wp-subtle.activated{color:#fff;background-color:#535353}.toolbar-wp-danger .bar-button-clear-wp-vibrant,.toolbar-wp-danger .bar-button-vibrant-wp,.toolbar-wp-danger .bar-button-wp-vibrant{color:#663399;background-color:transparent}.toolbar-wp-danger .bar-button-clear-wp-vibrant:hover:not(.disable-hover),.toolbar-wp-danger .bar-button-vibrant-wp:hover:not(.disable-hover),.toolbar-wp-danger .bar-button-wp-vibrant:hover:not(.disable-hover){color:#663399}.toolbar-wp-danger .bar-button-outline-wp-vibrant{border-color:#7243a1;color:#7243a1;background-color:transparent}.toolbar-wp-danger .bar-button-outline-wp-vibrant.activated{color:#fff;background-color:#7243a1}.toolbar-wp-danger .bar-button-solid-wp-vibrant{color:#fff;background-color:#663399}.toolbar-wp-danger .bar-button-solid-wp-vibrant.activated{color:#fff;background-color:#7243a1}.toolbar-wp-danger .bar-button-bright-wp,.toolbar-wp-danger .bar-button-clear-wp-bright,.toolbar-wp-danger .bar-button-wp-bright{color:#ffc125;background-color:transparent}.toolbar-wp-danger .bar-button-bright-wp:hover:not(.disable-hover),.toolbar-wp-danger .bar-button-clear-wp-bright:hover:not(.disable-hover),.toolbar-wp-danger .bar-button-wp-bright:hover:not(.disable-hover){color:#ffc125}.toolbar-wp-danger .bar-button-outline-wp-bright{border-color:#ebb222;color:#ebb222;background-color:transparent}.toolbar-wp-danger .bar-button-outline-wp-bright.activated{color:#000;background-color:#ebb222}.toolbar-wp-danger .bar-button-solid-wp-bright{color:#000;background-color:#ffc125}.toolbar-wp-danger .bar-button-solid-wp-bright.activated{color:#000;background-color:#ebb222}.bar-button-clear-wp-danger,.bar-button-danger-wp,.bar-button-wp-danger{color:#f53d3d;background-color:transparent}.bar-button-clear-wp-danger:hover:not(.disable-hover),.bar-button-danger-wp:hover:not(.disable-hover),.bar-button-wp-danger:hover:not(.disable-hover){color:#f53d3d}.bar-button-outline-wp-danger{border-color:#e13838;color:#e13838;background-color:transparent}.bar-button-outline-wp-danger.activated{color:#fff;background-color:#e13838}.bar-button-solid-wp-danger{color:#fff;background-color:#f53d3d}.bar-button-solid-wp-danger.activated{color:#fff;background-color:#e13838}.toolbar-wp-light .toolbar-background-wp{background:#f4f4f4}.toolbar-wp-light .bar-button-clear-wp,.toolbar-wp-light .bar-button-default-wp,.toolbar-wp-light .bar-button-outline-wp,.toolbar-wp-light .toolbar-title-wp{color:#000}.toolbar-wp-light .bar-button-outline-wp{border-color:#000}.toolbar-wp-light .bar-button-clear-wp-primary,.toolbar-wp-light .bar-button-primary-wp,.toolbar-wp-light .bar-button-wp-primary{color:#488aff;background-color:transparent}.toolbar-wp-light .bar-button-clear-wp-primary:hover:not(.disable-hover),.toolbar-wp-light .bar-button-primary-wp:hover:not(.disable-hover),.toolbar-wp-light .bar-button-wp-primary:hover:not(.disable-hover){color:#488aff}.toolbar-wp-light .bar-button-outline-wp-primary{border-color:#427feb;color:#427feb;background-color:transparent}.toolbar-wp-light .bar-button-outline-wp-primary.activated{color:#fff;background-color:#427feb}.toolbar-wp-light .bar-button-solid-wp-primary{color:#fff;background-color:#488aff}.toolbar-wp-light .bar-button-solid-wp-primary.activated{color:#fff;background-color:#427feb}.toolbar-wp-light .bar-button-clear-wp-secondary,.toolbar-wp-light .bar-button-secondary-wp,.toolbar-wp-light .bar-button-wp-secondary{color:#32db64;background-color:transparent}.toolbar-wp-light .bar-button-clear-wp-secondary:hover:not(.disable-hover),.toolbar-wp-light .bar-button-secondary-wp:hover:not(.disable-hover),.toolbar-wp-light .bar-button-wp-secondary:hover:not(.disable-hover){color:#32db64}.toolbar-wp-light .bar-button-outline-wp-secondary{border-color:#2ec95c;color:#2ec95c;background-color:transparent}.toolbar-wp-light .bar-button-outline-wp-secondary.activated{color:#fff;background-color:#2ec95c}.toolbar-wp-light .bar-button-solid-wp-secondary{color:#fff;background-color:#32db64}.toolbar-wp-light .bar-button-solid-wp-secondary.activated{color:#fff;background-color:#2ec95c}.toolbar-wp-light .bar-button-clear-wp-danger,.toolbar-wp-light .bar-button-danger-wp,.toolbar-wp-light .bar-button-wp-danger{color:#f53d3d;background-color:transparent}.toolbar-wp-light .bar-button-clear-wp-danger:hover:not(.disable-hover),.toolbar-wp-light .bar-button-danger-wp:hover:not(.disable-hover),.toolbar-wp-light .bar-button-wp-danger:hover:not(.disable-hover){color:#f53d3d}.toolbar-wp-light .bar-button-outline-wp-danger{border-color:#e13838;color:#e13838;background-color:transparent}.toolbar-wp-light .bar-button-outline-wp-danger.activated{color:#fff;background-color:#e13838}.toolbar-wp-light .bar-button-solid-wp-danger{color:#fff;background-color:#f53d3d}.toolbar-wp-light .bar-button-solid-wp-danger.activated{color:#fff;background-color:#e13838}.toolbar-wp-light .bar-button-clear-wp-light,.toolbar-wp-light .bar-button-light-wp,.toolbar-wp-light .bar-button-wp-light{color:#f4f4f4;background-color:transparent}.toolbar-wp-light .bar-button-clear-wp-light:hover:not(.disable-hover),.toolbar-wp-light .bar-button-light-wp:hover:not(.disable-hover),.toolbar-wp-light .bar-button-wp-light:hover:not(.disable-hover){color:#f4f4f4}.toolbar-wp-light .bar-button-outline-wp-light{border-color:#e0e0e0;color:#e0e0e0;background-color:transparent}.toolbar-wp-light .bar-button-outline-wp-light.activated{color:#000;background-color:#e0e0e0}.toolbar-wp-light .bar-button-solid-wp-light{color:#000;background-color:#f4f4f4}.toolbar-wp-light .bar-button-solid-wp-light.activated{color:#000;background-color:#e0e0e0}.toolbar-wp-light .bar-button-clear-wp-dark,.toolbar-wp-light .bar-button-dark-wp,.toolbar-wp-light .bar-button-wp-dark{color:#222;background-color:transparent}.toolbar-wp-light .bar-button-clear-wp-dark:hover:not(.disable-hover),.toolbar-wp-light .bar-button-dark-wp:hover:not(.disable-hover),.toolbar-wp-light .bar-button-wp-dark:hover:not(.disable-hover){color:#222}.toolbar-wp-light .bar-button-outline-wp-dark{border-color:#343434;color:#343434;background-color:transparent}.toolbar-wp-light .bar-button-outline-wp-dark.activated{color:#fff;background-color:#343434}.toolbar-wp-light .bar-button-solid-wp-dark{color:#fff;background-color:#222}.toolbar-wp-light .bar-button-solid-wp-dark.activated{color:#fff;background-color:#343434}.toolbar-wp-light .bar-button-clear-wp-energized,.toolbar-wp-light .bar-button-energized-wp,.toolbar-wp-light .bar-button-wp-energized{color:#ffc527;background-color:transparent}.toolbar-wp-light .bar-button-clear-wp-energized:hover:not(.disable-hover),.toolbar-wp-light .bar-button-energized-wp:hover:not(.disable-hover),.toolbar-wp-light .bar-button-wp-energized:hover:not(.disable-hover){color:#ffc527}.toolbar-wp-light .bar-button-outline-wp-energized{border-color:#ebb524;color:#ebb524;background-color:transparent}.toolbar-wp-light .bar-button-outline-wp-energized.activated{color:#000;background-color:#ebb524}.toolbar-wp-light .bar-button-solid-wp-energized{color:#000;background-color:#ffc527}.toolbar-wp-light .bar-button-solid-wp-energized.activated{color:#000;background-color:#ebb524}.toolbar-wp-light .bar-button-clear-wp-royal,.toolbar-wp-light .bar-button-royal-wp,.toolbar-wp-light .bar-button-wp-royal{color:#7e60ff;background-color:transparent}.toolbar-wp-light .bar-button-clear-wp-royal:hover:not(.disable-hover),.toolbar-wp-light .bar-button-royal-wp:hover:not(.disable-hover),.toolbar-wp-light .bar-button-wp-royal:hover:not(.disable-hover){color:#7e60ff}.toolbar-wp-light .bar-button-outline-wp-royal{border-color:#7458eb;color:#7458eb;background-color:transparent}.toolbar-wp-light .bar-button-outline-wp-royal.activated{color:#fff;background-color:#7458eb}.toolbar-wp-light .bar-button-solid-wp-royal{color:#fff;background-color:#7e60ff}.toolbar-wp-light .bar-button-solid-wp-royal.activated{color:#fff;background-color:#7458eb}.toolbar-wp-light .bar-button-clear-wp-subtle,.toolbar-wp-light .bar-button-subtle-wp,.toolbar-wp-light .bar-button-wp-subtle{color:#444;background-color:transparent}.toolbar-wp-light .bar-button-clear-wp-subtle:hover:not(.disable-hover),.toolbar-wp-light .bar-button-subtle-wp:hover:not(.disable-hover),.toolbar-wp-light .bar-button-wp-subtle:hover:not(.disable-hover){color:#444}.toolbar-wp-light .bar-button-outline-wp-subtle{border-color:#535353;color:#535353;background-color:transparent}.toolbar-wp-light .bar-button-outline-wp-subtle.activated{color:#fff;background-color:#535353}.toolbar-wp-light .bar-button-solid-wp-subtle{color:#fff;background-color:#444}.toolbar-wp-light .bar-button-solid-wp-subtle.activated{color:#fff;background-color:#535353}.toolbar-wp-light .bar-button-clear-wp-vibrant,.toolbar-wp-light .bar-button-vibrant-wp,.toolbar-wp-light .bar-button-wp-vibrant{color:#663399;background-color:transparent}.toolbar-wp-light .bar-button-clear-wp-vibrant:hover:not(.disable-hover),.toolbar-wp-light .bar-button-vibrant-wp:hover:not(.disable-hover),.toolbar-wp-light .bar-button-wp-vibrant:hover:not(.disable-hover){color:#663399}.toolbar-wp-light .bar-button-outline-wp-vibrant{border-color:#7243a1;color:#7243a1;background-color:transparent}.toolbar-wp-light .bar-button-outline-wp-vibrant.activated{color:#fff;background-color:#7243a1}.toolbar-wp-light .bar-button-solid-wp-vibrant{color:#fff;background-color:#663399}.toolbar-wp-light .bar-button-solid-wp-vibrant.activated{color:#fff;background-color:#7243a1}.toolbar-wp-light .bar-button-bright-wp,.toolbar-wp-light .bar-button-clear-wp-bright,.toolbar-wp-light .bar-button-wp-bright{color:#ffc125;background-color:transparent}.toolbar-wp-light .bar-button-bright-wp:hover:not(.disable-hover),.toolbar-wp-light .bar-button-clear-wp-bright:hover:not(.disable-hover),.toolbar-wp-light .bar-button-wp-bright:hover:not(.disable-hover){color:#ffc125}.toolbar-wp-light .bar-button-outline-wp-bright{border-color:#ebb222;color:#ebb222;background-color:transparent}.toolbar-wp-light .bar-button-outline-wp-bright.activated{color:#000;background-color:#ebb222}.toolbar-wp-light .bar-button-solid-wp-bright{color:#000;background-color:#ffc125}.toolbar-wp-light .bar-button-solid-wp-bright.activated{color:#000;background-color:#ebb222}.bar-button-clear-wp-light,.bar-button-light-wp,.bar-button-wp-light{color:#f4f4f4;background-color:transparent}.bar-button-clear-wp-light:hover:not(.disable-hover),.bar-button-light-wp:hover:not(.disable-hover),.bar-button-wp-light:hover:not(.disable-hover){color:#f4f4f4}.bar-button-outline-wp-light{border-color:#e0e0e0;color:#e0e0e0;background-color:transparent}.bar-button-outline-wp-light.activated{color:#000;background-color:#e0e0e0}.bar-button-solid-wp-light{color:#000;background-color:#f4f4f4}.bar-button-solid-wp-light.activated{color:#000;background-color:#e0e0e0}.toolbar-wp-dark .toolbar-background-wp{background:#222}.toolbar-wp-dark .bar-button-clear-wp,.toolbar-wp-dark .bar-button-default-wp,.toolbar-wp-dark .bar-button-outline-wp,.toolbar-wp-dark .toolbar-title-wp{color:#fff}.toolbar-wp-dark .bar-button-outline-wp{border-color:#fff}.toolbar-wp-dark .bar-button-clear-wp-primary,.toolbar-wp-dark .bar-button-primary-wp,.toolbar-wp-dark .bar-button-wp-primary{color:#488aff;background-color:transparent}.toolbar-wp-dark .bar-button-clear-wp-primary:hover:not(.disable-hover),.toolbar-wp-dark .bar-button-primary-wp:hover:not(.disable-hover),.toolbar-wp-dark .bar-button-wp-primary:hover:not(.disable-hover){color:#488aff}.toolbar-wp-dark .bar-button-outline-wp-primary{border-color:#427feb;color:#427feb;background-color:transparent}.toolbar-wp-dark .bar-button-outline-wp-primary.activated{color:#fff;background-color:#427feb}.toolbar-wp-dark .bar-button-solid-wp-primary{color:#fff;background-color:#488aff}.toolbar-wp-dark .bar-button-solid-wp-primary.activated{color:#fff;background-color:#427feb}.toolbar-wp-dark .bar-button-clear-wp-secondary,.toolbar-wp-dark .bar-button-secondary-wp,.toolbar-wp-dark .bar-button-wp-secondary{color:#32db64;background-color:transparent}.toolbar-wp-dark .bar-button-clear-wp-secondary:hover:not(.disable-hover),.toolbar-wp-dark .bar-button-secondary-wp:hover:not(.disable-hover),.toolbar-wp-dark .bar-button-wp-secondary:hover:not(.disable-hover){color:#32db64}.toolbar-wp-dark .bar-button-outline-wp-secondary{border-color:#2ec95c;color:#2ec95c;background-color:transparent}.toolbar-wp-dark .bar-button-outline-wp-secondary.activated{color:#fff;background-color:#2ec95c}.toolbar-wp-dark .bar-button-solid-wp-secondary{color:#fff;background-color:#32db64}.toolbar-wp-dark .bar-button-solid-wp-secondary.activated{color:#fff;background-color:#2ec95c}.toolbar-wp-dark .bar-button-clear-wp-danger,.toolbar-wp-dark .bar-button-danger-wp,.toolbar-wp-dark .bar-button-wp-danger{color:#f53d3d;background-color:transparent}.toolbar-wp-dark .bar-button-clear-wp-danger:hover:not(.disable-hover),.toolbar-wp-dark .bar-button-danger-wp:hover:not(.disable-hover),.toolbar-wp-dark .bar-button-wp-danger:hover:not(.disable-hover){color:#f53d3d}.toolbar-wp-dark .bar-button-outline-wp-danger{border-color:#e13838;color:#e13838;background-color:transparent}.toolbar-wp-dark .bar-button-outline-wp-danger.activated{color:#fff;background-color:#e13838}.toolbar-wp-dark .bar-button-solid-wp-danger{color:#fff;background-color:#f53d3d}.toolbar-wp-dark .bar-button-solid-wp-danger.activated{color:#fff;background-color:#e13838}.toolbar-wp-dark .bar-button-clear-wp-light,.toolbar-wp-dark .bar-button-light-wp,.toolbar-wp-dark .bar-button-wp-light{color:#f4f4f4;background-color:transparent}.toolbar-wp-dark .bar-button-clear-wp-light:hover:not(.disable-hover),.toolbar-wp-dark .bar-button-light-wp:hover:not(.disable-hover),.toolbar-wp-dark .bar-button-wp-light:hover:not(.disable-hover){color:#f4f4f4}.toolbar-wp-dark .bar-button-outline-wp-light{border-color:#e0e0e0;color:#e0e0e0;background-color:transparent}.toolbar-wp-dark .bar-button-outline-wp-light.activated{color:#000;background-color:#e0e0e0}.toolbar-wp-dark .bar-button-solid-wp-light{color:#000;background-color:#f4f4f4}.toolbar-wp-dark .bar-button-solid-wp-light.activated{color:#000;background-color:#e0e0e0}.toolbar-wp-dark .bar-button-clear-wp-dark,.toolbar-wp-dark .bar-button-dark-wp,.toolbar-wp-dark .bar-button-wp-dark{color:#222;background-color:transparent}.toolbar-wp-dark .bar-button-clear-wp-dark:hover:not(.disable-hover),.toolbar-wp-dark .bar-button-dark-wp:hover:not(.disable-hover),.toolbar-wp-dark .bar-button-wp-dark:hover:not(.disable-hover){color:#222}.toolbar-wp-dark .bar-button-outline-wp-dark{border-color:#343434;color:#343434;background-color:transparent}.toolbar-wp-dark .bar-button-outline-wp-dark.activated{color:#fff;background-color:#343434}.toolbar-wp-dark .bar-button-solid-wp-dark{color:#fff;background-color:#222}.toolbar-wp-dark .bar-button-solid-wp-dark.activated{color:#fff;background-color:#343434}.toolbar-wp-dark .bar-button-clear-wp-energized,.toolbar-wp-dark .bar-button-energized-wp,.toolbar-wp-dark .bar-button-wp-energized{color:#ffc527;background-color:transparent}.toolbar-wp-dark .bar-button-clear-wp-energized:hover:not(.disable-hover),.toolbar-wp-dark .bar-button-energized-wp:hover:not(.disable-hover),.toolbar-wp-dark .bar-button-wp-energized:hover:not(.disable-hover){color:#ffc527}.toolbar-wp-dark .bar-button-outline-wp-energized{border-color:#ebb524;color:#ebb524;background-color:transparent}.toolbar-wp-dark .bar-button-outline-wp-energized.activated{color:#000;background-color:#ebb524}.toolbar-wp-dark .bar-button-solid-wp-energized{color:#000;background-color:#ffc527}.toolbar-wp-dark .bar-button-solid-wp-energized.activated{color:#000;background-color:#ebb524}.toolbar-wp-dark .bar-button-clear-wp-royal,.toolbar-wp-dark .bar-button-royal-wp,.toolbar-wp-dark .bar-button-wp-royal{color:#7e60ff;background-color:transparent}.toolbar-wp-dark .bar-button-clear-wp-royal:hover:not(.disable-hover),.toolbar-wp-dark .bar-button-royal-wp:hover:not(.disable-hover),.toolbar-wp-dark .bar-button-wp-royal:hover:not(.disable-hover){color:#7e60ff}.toolbar-wp-dark .bar-button-outline-wp-royal{border-color:#7458eb;color:#7458eb;background-color:transparent}.toolbar-wp-dark .bar-button-outline-wp-royal.activated{color:#fff;background-color:#7458eb}.toolbar-wp-dark .bar-button-solid-wp-royal{color:#fff;background-color:#7e60ff}.toolbar-wp-dark .bar-button-solid-wp-royal.activated{color:#fff;background-color:#7458eb}.toolbar-wp-dark .bar-button-clear-wp-subtle,.toolbar-wp-dark .bar-button-subtle-wp,.toolbar-wp-dark .bar-button-wp-subtle{color:#444;background-color:transparent}.toolbar-wp-dark .bar-button-clear-wp-subtle:hover:not(.disable-hover),.toolbar-wp-dark .bar-button-subtle-wp:hover:not(.disable-hover),.toolbar-wp-dark .bar-button-wp-subtle:hover:not(.disable-hover){color:#444}.toolbar-wp-dark .bar-button-outline-wp-subtle{border-color:#535353;color:#535353;background-color:transparent}.toolbar-wp-dark .bar-button-outline-wp-subtle.activated{color:#fff;background-color:#535353}.toolbar-wp-dark .bar-button-solid-wp-subtle{color:#fff;background-color:#444}.toolbar-wp-dark .bar-button-solid-wp-subtle.activated{color:#fff;background-color:#535353}.toolbar-wp-dark .bar-button-clear-wp-vibrant,.toolbar-wp-dark .bar-button-vibrant-wp,.toolbar-wp-dark .bar-button-wp-vibrant{color:#663399;background-color:transparent}.toolbar-wp-dark .bar-button-clear-wp-vibrant:hover:not(.disable-hover),.toolbar-wp-dark .bar-button-vibrant-wp:hover:not(.disable-hover),.toolbar-wp-dark .bar-button-wp-vibrant:hover:not(.disable-hover){color:#663399}.toolbar-wp-dark .bar-button-outline-wp-vibrant{border-color:#7243a1;color:#7243a1;background-color:transparent}.toolbar-wp-dark .bar-button-outline-wp-vibrant.activated{color:#fff;background-color:#7243a1}.toolbar-wp-dark .bar-button-solid-wp-vibrant{color:#fff;background-color:#663399}.toolbar-wp-dark .bar-button-solid-wp-vibrant.activated{color:#fff;background-color:#7243a1}.toolbar-wp-dark .bar-button-bright-wp,.toolbar-wp-dark .bar-button-clear-wp-bright,.toolbar-wp-dark .bar-button-wp-bright{color:#ffc125;background-color:transparent}.toolbar-wp-dark .bar-button-bright-wp:hover:not(.disable-hover),.toolbar-wp-dark .bar-button-clear-wp-bright:hover:not(.disable-hover),.toolbar-wp-dark .bar-button-wp-bright:hover:not(.disable-hover){color:#ffc125}.toolbar-wp-dark .bar-button-outline-wp-bright{border-color:#ebb222;color:#ebb222;background-color:transparent}.toolbar-wp-dark .bar-button-outline-wp-bright.activated{color:#000;background-color:#ebb222}.toolbar-wp-dark .bar-button-solid-wp-bright{color:#000;background-color:#ffc125}.toolbar-wp-dark .bar-button-solid-wp-bright.activated{color:#000;background-color:#ebb222}.bar-button-clear-wp-dark,.bar-button-dark-wp,.bar-button-wp-dark{color:#222;background-color:transparent}.bar-button-clear-wp-dark:hover:not(.disable-hover),.bar-button-dark-wp:hover:not(.disable-hover),.bar-button-wp-dark:hover:not(.disable-hover){color:#222}.bar-button-outline-wp-dark{border-color:#343434;color:#343434;background-color:transparent}.bar-button-outline-wp-dark.activated{color:#fff;background-color:#343434}.bar-button-solid-wp-dark{color:#fff;background-color:#222}.bar-button-solid-wp-dark.activated{color:#fff;background-color:#343434}.toolbar-wp-energized .toolbar-background-wp{background:#ffc527}.toolbar-wp-energized .bar-button-clear-wp,.toolbar-wp-energized .bar-button-default-wp,.toolbar-wp-energized .bar-button-outline-wp,.toolbar-wp-energized .toolbar-title-wp{color:#000}.toolbar-wp-energized .bar-button-outline-wp{border-color:#000}.toolbar-wp-energized .bar-button-clear-wp-primary,.toolbar-wp-energized .bar-button-primary-wp,.toolbar-wp-energized .bar-button-wp-primary{color:#488aff;background-color:transparent}.toolbar-wp-energized .bar-button-clear-wp-primary:hover:not(.disable-hover),.toolbar-wp-energized .bar-button-primary-wp:hover:not(.disable-hover),.toolbar-wp-energized .bar-button-wp-primary:hover:not(.disable-hover){color:#488aff}.toolbar-wp-energized .bar-button-outline-wp-primary{border-color:#427feb;color:#427feb;background-color:transparent}.toolbar-wp-energized .bar-button-outline-wp-primary.activated{color:#fff;background-color:#427feb}.toolbar-wp-energized .bar-button-solid-wp-primary{color:#fff;background-color:#488aff}.toolbar-wp-energized .bar-button-solid-wp-primary.activated{color:#fff;background-color:#427feb}.toolbar-wp-energized .bar-button-clear-wp-secondary,.toolbar-wp-energized .bar-button-secondary-wp,.toolbar-wp-energized .bar-button-wp-secondary{color:#32db64;background-color:transparent}.toolbar-wp-energized .bar-button-clear-wp-secondary:hover:not(.disable-hover),.toolbar-wp-energized .bar-button-secondary-wp:hover:not(.disable-hover),.toolbar-wp-energized .bar-button-wp-secondary:hover:not(.disable-hover){color:#32db64}.toolbar-wp-energized .bar-button-outline-wp-secondary{border-color:#2ec95c;color:#2ec95c;background-color:transparent}.toolbar-wp-energized .bar-button-outline-wp-secondary.activated{color:#fff;background-color:#2ec95c}.toolbar-wp-energized .bar-button-solid-wp-secondary{color:#fff;background-color:#32db64}.toolbar-wp-energized .bar-button-solid-wp-secondary.activated{color:#fff;background-color:#2ec95c}.toolbar-wp-energized .bar-button-clear-wp-danger,.toolbar-wp-energized .bar-button-danger-wp,.toolbar-wp-energized .bar-button-wp-danger{color:#f53d3d;background-color:transparent}.toolbar-wp-energized .bar-button-clear-wp-danger:hover:not(.disable-hover),.toolbar-wp-energized .bar-button-danger-wp:hover:not(.disable-hover),.toolbar-wp-energized .bar-button-wp-danger:hover:not(.disable-hover){color:#f53d3d}.toolbar-wp-energized .bar-button-outline-wp-danger{border-color:#e13838;color:#e13838;background-color:transparent}.toolbar-wp-energized .bar-button-outline-wp-danger.activated{color:#fff;background-color:#e13838}.toolbar-wp-energized .bar-button-solid-wp-danger{color:#fff;background-color:#f53d3d}.toolbar-wp-energized .bar-button-solid-wp-danger.activated{color:#fff;background-color:#e13838}.toolbar-wp-energized .bar-button-clear-wp-light,.toolbar-wp-energized .bar-button-light-wp,.toolbar-wp-energized .bar-button-wp-light{color:#f4f4f4;background-color:transparent}.toolbar-wp-energized .bar-button-clear-wp-light:hover:not(.disable-hover),.toolbar-wp-energized .bar-button-light-wp:hover:not(.disable-hover),.toolbar-wp-energized .bar-button-wp-light:hover:not(.disable-hover){color:#f4f4f4}.toolbar-wp-energized .bar-button-outline-wp-light{border-color:#e0e0e0;color:#e0e0e0;background-color:transparent}.toolbar-wp-energized .bar-button-outline-wp-light.activated{color:#000;background-color:#e0e0e0}.toolbar-wp-energized .bar-button-solid-wp-light{color:#000;background-color:#f4f4f4}.toolbar-wp-energized .bar-button-solid-wp-light.activated{color:#000;background-color:#e0e0e0}.toolbar-wp-energized .bar-button-clear-wp-dark,.toolbar-wp-energized .bar-button-dark-wp,.toolbar-wp-energized .bar-button-wp-dark{color:#222;background-color:transparent}.toolbar-wp-energized .bar-button-clear-wp-dark:hover:not(.disable-hover),.toolbar-wp-energized .bar-button-dark-wp:hover:not(.disable-hover),.toolbar-wp-energized .bar-button-wp-dark:hover:not(.disable-hover){color:#222}.toolbar-wp-energized .bar-button-outline-wp-dark{border-color:#343434;color:#343434;background-color:transparent}.toolbar-wp-energized .bar-button-outline-wp-dark.activated{color:#fff;background-color:#343434}.toolbar-wp-energized .bar-button-solid-wp-dark{color:#fff;background-color:#222}.toolbar-wp-energized .bar-button-solid-wp-dark.activated{color:#fff;background-color:#343434}.toolbar-wp-energized .bar-button-clear-wp-energized,.toolbar-wp-energized .bar-button-energized-wp,.toolbar-wp-energized .bar-button-wp-energized{color:#ffc527;background-color:transparent}.toolbar-wp-energized .bar-button-clear-wp-energized:hover:not(.disable-hover),.toolbar-wp-energized .bar-button-energized-wp:hover:not(.disable-hover),.toolbar-wp-energized .bar-button-wp-energized:hover:not(.disable-hover){color:#ffc527}.toolbar-wp-energized .bar-button-outline-wp-energized{border-color:#ebb524;color:#ebb524;background-color:transparent}.toolbar-wp-energized .bar-button-outline-wp-energized.activated{color:#000;background-color:#ebb524}.toolbar-wp-energized .bar-button-solid-wp-energized{color:#000;background-color:#ffc527}.toolbar-wp-energized .bar-button-solid-wp-energized.activated{color:#000;background-color:#ebb524}.toolbar-wp-energized .bar-button-clear-wp-royal,.toolbar-wp-energized .bar-button-royal-wp,.toolbar-wp-energized .bar-button-wp-royal{color:#7e60ff;background-color:transparent}.toolbar-wp-energized .bar-button-clear-wp-royal:hover:not(.disable-hover),.toolbar-wp-energized .bar-button-royal-wp:hover:not(.disable-hover),.toolbar-wp-energized .bar-button-wp-royal:hover:not(.disable-hover){color:#7e60ff}.toolbar-wp-energized .bar-button-outline-wp-royal{border-color:#7458eb;color:#7458eb;background-color:transparent}.toolbar-wp-energized .bar-button-outline-wp-royal.activated{color:#fff;background-color:#7458eb}.toolbar-wp-energized .bar-button-solid-wp-royal{color:#fff;background-color:#7e60ff}.toolbar-wp-energized .bar-button-solid-wp-royal.activated{color:#fff;background-color:#7458eb}.toolbar-wp-energized .bar-button-clear-wp-subtle,.toolbar-wp-energized .bar-button-subtle-wp,.toolbar-wp-energized .bar-button-wp-subtle{color:#444;background-color:transparent}.toolbar-wp-energized .bar-button-clear-wp-subtle:hover:not(.disable-hover),.toolbar-wp-energized .bar-button-subtle-wp:hover:not(.disable-hover),.toolbar-wp-energized .bar-button-wp-subtle:hover:not(.disable-hover){color:#444}.toolbar-wp-energized .bar-button-outline-wp-subtle{border-color:#535353;color:#535353;background-color:transparent}.toolbar-wp-energized .bar-button-outline-wp-subtle.activated{color:#fff;background-color:#535353}.toolbar-wp-energized .bar-button-solid-wp-subtle{color:#fff;background-color:#444}.toolbar-wp-energized .bar-button-solid-wp-subtle.activated{color:#fff;background-color:#535353}.toolbar-wp-energized .bar-button-clear-wp-vibrant,.toolbar-wp-energized .bar-button-vibrant-wp,.toolbar-wp-energized .bar-button-wp-vibrant{color:#663399;background-color:transparent}.toolbar-wp-energized .bar-button-clear-wp-vibrant:hover:not(.disable-hover),.toolbar-wp-energized .bar-button-vibrant-wp:hover:not(.disable-hover),.toolbar-wp-energized .bar-button-wp-vibrant:hover:not(.disable-hover){color:#663399}.toolbar-wp-energized .bar-button-outline-wp-vibrant{border-color:#7243a1;color:#7243a1;background-color:transparent}.toolbar-wp-energized .bar-button-outline-wp-vibrant.activated{color:#fff;background-color:#7243a1}.toolbar-wp-energized .bar-button-solid-wp-vibrant{color:#fff;background-color:#663399}.toolbar-wp-energized .bar-button-solid-wp-vibrant.activated{color:#fff;background-color:#7243a1}.toolbar-wp-energized .bar-button-bright-wp,.toolbar-wp-energized .bar-button-clear-wp-bright,.toolbar-wp-energized .bar-button-wp-bright{color:#ffc125;background-color:transparent}.toolbar-wp-energized .bar-button-bright-wp:hover:not(.disable-hover),.toolbar-wp-energized .bar-button-clear-wp-bright:hover:not(.disable-hover),.toolbar-wp-energized .bar-button-wp-bright:hover:not(.disable-hover){color:#ffc125}.toolbar-wp-energized .bar-button-outline-wp-bright{border-color:#ebb222;color:#ebb222;background-color:transparent}.toolbar-wp-energized .bar-button-outline-wp-bright.activated{color:#000;background-color:#ebb222}.toolbar-wp-energized .bar-button-solid-wp-bright{color:#000;background-color:#ffc125}.toolbar-wp-energized .bar-button-solid-wp-bright.activated{color:#000;background-color:#ebb222}.bar-button-clear-wp-energized,.bar-button-energized-wp,.bar-button-wp-energized{color:#ffc527;background-color:transparent}.bar-button-clear-wp-energized:hover:not(.disable-hover),.bar-button-energized-wp:hover:not(.disable-hover),.bar-button-wp-energized:hover:not(.disable-hover){color:#ffc527}.bar-button-outline-wp-energized{border-color:#ebb524;color:#ebb524;background-color:transparent}.bar-button-outline-wp-energized.activated{color:#000;background-color:#ebb524}.bar-button-solid-wp-energized{color:#000;background-color:#ffc527}.bar-button-solid-wp-energized.activated{color:#000;background-color:#ebb524}.toolbar-wp-royal .toolbar-background-wp{background:#7e60ff}.toolbar-wp-royal .bar-button-clear-wp,.toolbar-wp-royal .bar-button-default-wp,.toolbar-wp-royal .bar-button-outline-wp,.toolbar-wp-royal .toolbar-title-wp{color:#fff}.toolbar-wp-royal .bar-button-outline-wp{border-color:#fff}.toolbar-wp-royal .bar-button-clear-wp-primary,.toolbar-wp-royal .bar-button-primary-wp,.toolbar-wp-royal .bar-button-wp-primary{color:#488aff;background-color:transparent}.toolbar-wp-royal .bar-button-clear-wp-primary:hover:not(.disable-hover),.toolbar-wp-royal .bar-button-primary-wp:hover:not(.disable-hover),.toolbar-wp-royal .bar-button-wp-primary:hover:not(.disable-hover){color:#488aff}.toolbar-wp-royal .bar-button-outline-wp-primary{border-color:#427feb;color:#427feb;background-color:transparent}.toolbar-wp-royal .bar-button-outline-wp-primary.activated{color:#fff;background-color:#427feb}.toolbar-wp-royal .bar-button-solid-wp-primary{color:#fff;background-color:#488aff}.toolbar-wp-royal .bar-button-solid-wp-primary.activated{color:#fff;background-color:#427feb}.toolbar-wp-royal .bar-button-clear-wp-secondary,.toolbar-wp-royal .bar-button-secondary-wp,.toolbar-wp-royal .bar-button-wp-secondary{color:#32db64;background-color:transparent}.toolbar-wp-royal .bar-button-clear-wp-secondary:hover:not(.disable-hover),.toolbar-wp-royal .bar-button-secondary-wp:hover:not(.disable-hover),.toolbar-wp-royal .bar-button-wp-secondary:hover:not(.disable-hover){color:#32db64}.toolbar-wp-royal .bar-button-outline-wp-secondary{border-color:#2ec95c;color:#2ec95c;background-color:transparent}.toolbar-wp-royal .bar-button-outline-wp-secondary.activated{color:#fff;background-color:#2ec95c}.toolbar-wp-royal .bar-button-solid-wp-secondary{color:#fff;background-color:#32db64}.toolbar-wp-royal .bar-button-solid-wp-secondary.activated{color:#fff;background-color:#2ec95c}.toolbar-wp-royal .bar-button-clear-wp-danger,.toolbar-wp-royal .bar-button-danger-wp,.toolbar-wp-royal .bar-button-wp-danger{color:#f53d3d;background-color:transparent}.toolbar-wp-royal .bar-button-clear-wp-danger:hover:not(.disable-hover),.toolbar-wp-royal .bar-button-danger-wp:hover:not(.disable-hover),.toolbar-wp-royal .bar-button-wp-danger:hover:not(.disable-hover){color:#f53d3d}.toolbar-wp-royal .bar-button-outline-wp-danger{border-color:#e13838;color:#e13838;background-color:transparent}.toolbar-wp-royal .bar-button-outline-wp-danger.activated{color:#fff;background-color:#e13838}.toolbar-wp-royal .bar-button-solid-wp-danger{color:#fff;background-color:#f53d3d}.toolbar-wp-royal .bar-button-solid-wp-danger.activated{color:#fff;background-color:#e13838}.toolbar-wp-royal .bar-button-clear-wp-light,.toolbar-wp-royal .bar-button-light-wp,.toolbar-wp-royal .bar-button-wp-light{color:#f4f4f4;background-color:transparent}.toolbar-wp-royal .bar-button-clear-wp-light:hover:not(.disable-hover),.toolbar-wp-royal .bar-button-light-wp:hover:not(.disable-hover),.toolbar-wp-royal .bar-button-wp-light:hover:not(.disable-hover){color:#f4f4f4}.toolbar-wp-royal .bar-button-outline-wp-light{border-color:#e0e0e0;color:#e0e0e0;background-color:transparent}.toolbar-wp-royal .bar-button-outline-wp-light.activated{color:#000;background-color:#e0e0e0}.toolbar-wp-royal .bar-button-solid-wp-light{color:#000;background-color:#f4f4f4}.toolbar-wp-royal .bar-button-solid-wp-light.activated{color:#000;background-color:#e0e0e0}.toolbar-wp-royal .bar-button-clear-wp-dark,.toolbar-wp-royal .bar-button-dark-wp,.toolbar-wp-royal .bar-button-wp-dark{color:#222;background-color:transparent}.toolbar-wp-royal .bar-button-clear-wp-dark:hover:not(.disable-hover),.toolbar-wp-royal .bar-button-dark-wp:hover:not(.disable-hover),.toolbar-wp-royal .bar-button-wp-dark:hover:not(.disable-hover){color:#222}.toolbar-wp-royal .bar-button-outline-wp-dark{border-color:#343434;color:#343434;background-color:transparent}.toolbar-wp-royal .bar-button-outline-wp-dark.activated{color:#fff;background-color:#343434}.toolbar-wp-royal .bar-button-solid-wp-dark{color:#fff;background-color:#222}.toolbar-wp-royal .bar-button-solid-wp-dark.activated{color:#fff;background-color:#343434}.toolbar-wp-royal .bar-button-clear-wp-energized,.toolbar-wp-royal .bar-button-energized-wp,.toolbar-wp-royal .bar-button-wp-energized{color:#ffc527;background-color:transparent}.toolbar-wp-royal .bar-button-clear-wp-energized:hover:not(.disable-hover),.toolbar-wp-royal .bar-button-energized-wp:hover:not(.disable-hover),.toolbar-wp-royal .bar-button-wp-energized:hover:not(.disable-hover){color:#ffc527}.toolbar-wp-royal .bar-button-outline-wp-energized{border-color:#ebb524;color:#ebb524;background-color:transparent}.toolbar-wp-royal .bar-button-outline-wp-energized.activated{color:#000;background-color:#ebb524}.toolbar-wp-royal .bar-button-solid-wp-energized{color:#000;background-color:#ffc527}.toolbar-wp-royal .bar-button-solid-wp-energized.activated{color:#000;background-color:#ebb524}.toolbar-wp-royal .bar-button-clear-wp-royal,.toolbar-wp-royal .bar-button-royal-wp,.toolbar-wp-royal .bar-button-wp-royal{color:#7e60ff;background-color:transparent}.toolbar-wp-royal .bar-button-clear-wp-royal:hover:not(.disable-hover),.toolbar-wp-royal .bar-button-royal-wp:hover:not(.disable-hover),.toolbar-wp-royal .bar-button-wp-royal:hover:not(.disable-hover){color:#7e60ff}.toolbar-wp-royal .bar-button-outline-wp-royal{border-color:#7458eb;color:#7458eb;background-color:transparent}.toolbar-wp-royal .bar-button-outline-wp-royal.activated{color:#fff;background-color:#7458eb}.toolbar-wp-royal .bar-button-solid-wp-royal{color:#fff;background-color:#7e60ff}.toolbar-wp-royal .bar-button-solid-wp-royal.activated{color:#fff;background-color:#7458eb}.toolbar-wp-royal .bar-button-clear-wp-subtle,.toolbar-wp-royal .bar-button-subtle-wp,.toolbar-wp-royal .bar-button-wp-subtle{color:#444;background-color:transparent}.toolbar-wp-royal .bar-button-clear-wp-subtle:hover:not(.disable-hover),.toolbar-wp-royal .bar-button-subtle-wp:hover:not(.disable-hover),.toolbar-wp-royal .bar-button-wp-subtle:hover:not(.disable-hover){color:#444}.toolbar-wp-royal .bar-button-outline-wp-subtle{border-color:#535353;color:#535353;background-color:transparent}.toolbar-wp-royal .bar-button-outline-wp-subtle.activated{color:#fff;background-color:#535353}.toolbar-wp-royal .bar-button-solid-wp-subtle{color:#fff;background-color:#444}.toolbar-wp-royal .bar-button-solid-wp-subtle.activated{color:#fff;background-color:#535353}.toolbar-wp-royal .bar-button-clear-wp-vibrant,.toolbar-wp-royal .bar-button-vibrant-wp,.toolbar-wp-royal .bar-button-wp-vibrant{color:#663399;background-color:transparent}.toolbar-wp-royal .bar-button-clear-wp-vibrant:hover:not(.disable-hover),.toolbar-wp-royal .bar-button-vibrant-wp:hover:not(.disable-hover),.toolbar-wp-royal .bar-button-wp-vibrant:hover:not(.disable-hover){color:#663399}.toolbar-wp-royal .bar-button-outline-wp-vibrant{border-color:#7243a1;color:#7243a1;background-color:transparent}.toolbar-wp-royal .bar-button-outline-wp-vibrant.activated{color:#fff;background-color:#7243a1}.toolbar-wp-royal .bar-button-solid-wp-vibrant{color:#fff;background-color:#663399}.toolbar-wp-royal .bar-button-solid-wp-vibrant.activated{color:#fff;background-color:#7243a1}.toolbar-wp-royal .bar-button-bright-wp,.toolbar-wp-royal .bar-button-clear-wp-bright,.toolbar-wp-royal .bar-button-wp-bright{color:#ffc125;background-color:transparent}.toolbar-wp-royal .bar-button-bright-wp:hover:not(.disable-hover),.toolbar-wp-royal .bar-button-clear-wp-bright:hover:not(.disable-hover),.toolbar-wp-royal .bar-button-wp-bright:hover:not(.disable-hover){color:#ffc125}.toolbar-wp-royal .bar-button-outline-wp-bright{border-color:#ebb222;color:#ebb222;background-color:transparent}.toolbar-wp-royal .bar-button-outline-wp-bright.activated{color:#000;background-color:#ebb222}.toolbar-wp-royal .bar-button-solid-wp-bright{color:#000;background-color:#ffc125}.toolbar-wp-royal .bar-button-solid-wp-bright.activated{color:#000;background-color:#ebb222}.bar-button-clear-wp-royal,.bar-button-royal-wp,.bar-button-wp-royal{color:#7e60ff;background-color:transparent}.bar-button-clear-wp-royal:hover:not(.disable-hover),.bar-button-royal-wp:hover:not(.disable-hover),.bar-button-wp-royal:hover:not(.disable-hover){color:#7e60ff}.bar-button-outline-wp-royal{border-color:#7458eb;color:#7458eb;background-color:transparent}.bar-button-outline-wp-royal.activated{color:#fff;background-color:#7458eb}.bar-button-solid-wp-royal{color:#fff;background-color:#7e60ff}.bar-button-solid-wp-royal.activated{color:#fff;background-color:#7458eb}.toolbar-wp-subtle .toolbar-background-wp{background:#444}.toolbar-wp-subtle .bar-button-clear-wp,.toolbar-wp-subtle .bar-button-default-wp,.toolbar-wp-subtle .bar-button-outline-wp,.toolbar-wp-subtle .toolbar-title-wp{color:#fff}.toolbar-wp-subtle .bar-button-outline-wp{border-color:#fff}.toolbar-wp-subtle .bar-button-clear-wp-primary,.toolbar-wp-subtle .bar-button-primary-wp,.toolbar-wp-subtle .bar-button-wp-primary{color:#488aff;background-color:transparent}.toolbar-wp-subtle .bar-button-clear-wp-primary:hover:not(.disable-hover),.toolbar-wp-subtle .bar-button-primary-wp:hover:not(.disable-hover),.toolbar-wp-subtle .bar-button-wp-primary:hover:not(.disable-hover){color:#488aff}.toolbar-wp-subtle .bar-button-outline-wp-primary{border-color:#427feb;color:#427feb;background-color:transparent}.toolbar-wp-subtle .bar-button-outline-wp-primary.activated{color:#fff;background-color:#427feb}.toolbar-wp-subtle .bar-button-solid-wp-primary{color:#fff;background-color:#488aff}.toolbar-wp-subtle .bar-button-solid-wp-primary.activated{color:#fff;background-color:#427feb}.toolbar-wp-subtle .bar-button-clear-wp-secondary,.toolbar-wp-subtle .bar-button-secondary-wp,.toolbar-wp-subtle .bar-button-wp-secondary{color:#32db64;background-color:transparent}.toolbar-wp-subtle .bar-button-clear-wp-secondary:hover:not(.disable-hover),.toolbar-wp-subtle .bar-button-secondary-wp:hover:not(.disable-hover),.toolbar-wp-subtle .bar-button-wp-secondary:hover:not(.disable-hover){color:#32db64}.toolbar-wp-subtle .bar-button-outline-wp-secondary{border-color:#2ec95c;color:#2ec95c;background-color:transparent}.toolbar-wp-subtle .bar-button-outline-wp-secondary.activated{color:#fff;background-color:#2ec95c}.toolbar-wp-subtle .bar-button-solid-wp-secondary{color:#fff;background-color:#32db64}.toolbar-wp-subtle .bar-button-solid-wp-secondary.activated{color:#fff;background-color:#2ec95c}.toolbar-wp-subtle .bar-button-clear-wp-danger,.toolbar-wp-subtle .bar-button-danger-wp,.toolbar-wp-subtle .bar-button-wp-danger{color:#f53d3d;background-color:transparent}.toolbar-wp-subtle .bar-button-clear-wp-danger:hover:not(.disable-hover),.toolbar-wp-subtle .bar-button-danger-wp:hover:not(.disable-hover),.toolbar-wp-subtle .bar-button-wp-danger:hover:not(.disable-hover){color:#f53d3d}.toolbar-wp-subtle .bar-button-outline-wp-danger{border-color:#e13838;color:#e13838;background-color:transparent}.toolbar-wp-subtle .bar-button-outline-wp-danger.activated{color:#fff;background-color:#e13838}.toolbar-wp-subtle .bar-button-solid-wp-danger{color:#fff;background-color:#f53d3d}.toolbar-wp-subtle .bar-button-solid-wp-danger.activated{color:#fff;background-color:#e13838}.toolbar-wp-subtle .bar-button-clear-wp-light,.toolbar-wp-subtle .bar-button-light-wp,.toolbar-wp-subtle .bar-button-wp-light{color:#f4f4f4;background-color:transparent}.toolbar-wp-subtle .bar-button-clear-wp-light:hover:not(.disable-hover),.toolbar-wp-subtle .bar-button-light-wp:hover:not(.disable-hover),.toolbar-wp-subtle .bar-button-wp-light:hover:not(.disable-hover){color:#f4f4f4}.toolbar-wp-subtle .bar-button-outline-wp-light{border-color:#e0e0e0;color:#e0e0e0;background-color:transparent}.toolbar-wp-subtle .bar-button-outline-wp-light.activated{color:#000;background-color:#e0e0e0}.toolbar-wp-subtle .bar-button-solid-wp-light{color:#000;background-color:#f4f4f4}.toolbar-wp-subtle .bar-button-solid-wp-light.activated{color:#000;background-color:#e0e0e0}.toolbar-wp-subtle .bar-button-clear-wp-dark,.toolbar-wp-subtle .bar-button-dark-wp,.toolbar-wp-subtle .bar-button-wp-dark{color:#222;background-color:transparent}.toolbar-wp-subtle .bar-button-clear-wp-dark:hover:not(.disable-hover),.toolbar-wp-subtle .bar-button-dark-wp:hover:not(.disable-hover),.toolbar-wp-subtle .bar-button-wp-dark:hover:not(.disable-hover){color:#222}.toolbar-wp-subtle .bar-button-outline-wp-dark{border-color:#343434;color:#343434;background-color:transparent}.toolbar-wp-subtle .bar-button-outline-wp-dark.activated{color:#fff;background-color:#343434}.toolbar-wp-subtle .bar-button-solid-wp-dark{color:#fff;background-color:#222}.toolbar-wp-subtle .bar-button-solid-wp-dark.activated{color:#fff;background-color:#343434}.toolbar-wp-subtle .bar-button-clear-wp-energized,.toolbar-wp-subtle .bar-button-energized-wp,.toolbar-wp-subtle .bar-button-wp-energized{color:#ffc527;background-color:transparent}.toolbar-wp-subtle .bar-button-clear-wp-energized:hover:not(.disable-hover),.toolbar-wp-subtle .bar-button-energized-wp:hover:not(.disable-hover),.toolbar-wp-subtle .bar-button-wp-energized:hover:not(.disable-hover){color:#ffc527}.toolbar-wp-subtle .bar-button-outline-wp-energized{border-color:#ebb524;color:#ebb524;background-color:transparent}.toolbar-wp-subtle .bar-button-outline-wp-energized.activated{color:#000;background-color:#ebb524}.toolbar-wp-subtle .bar-button-solid-wp-energized{color:#000;background-color:#ffc527}.toolbar-wp-subtle .bar-button-solid-wp-energized.activated{color:#000;background-color:#ebb524}.toolbar-wp-subtle .bar-button-clear-wp-royal,.toolbar-wp-subtle .bar-button-royal-wp,.toolbar-wp-subtle .bar-button-wp-royal{color:#7e60ff;background-color:transparent}.toolbar-wp-subtle .bar-button-clear-wp-royal:hover:not(.disable-hover),.toolbar-wp-subtle .bar-button-royal-wp:hover:not(.disable-hover),.toolbar-wp-subtle .bar-button-wp-royal:hover:not(.disable-hover){color:#7e60ff}.toolbar-wp-subtle .bar-button-outline-wp-royal{border-color:#7458eb;color:#7458eb;background-color:transparent}.toolbar-wp-subtle .bar-button-outline-wp-royal.activated{color:#fff;background-color:#7458eb}.toolbar-wp-subtle .bar-button-solid-wp-royal{color:#fff;background-color:#7e60ff}.toolbar-wp-subtle .bar-button-solid-wp-royal.activated{color:#fff;background-color:#7458eb}.toolbar-wp-subtle .bar-button-clear-wp-subtle,.toolbar-wp-subtle .bar-button-subtle-wp,.toolbar-wp-subtle .bar-button-wp-subtle{color:#444;background-color:transparent}.toolbar-wp-subtle .bar-button-clear-wp-subtle:hover:not(.disable-hover),.toolbar-wp-subtle .bar-button-subtle-wp:hover:not(.disable-hover),.toolbar-wp-subtle .bar-button-wp-subtle:hover:not(.disable-hover){color:#444}.toolbar-wp-subtle .bar-button-outline-wp-subtle{border-color:#535353;color:#535353;background-color:transparent}.toolbar-wp-subtle .bar-button-outline-wp-subtle.activated{color:#fff;background-color:#535353}.toolbar-wp-subtle .bar-button-solid-wp-subtle{color:#fff;background-color:#444}.toolbar-wp-subtle .bar-button-solid-wp-subtle.activated{color:#fff;background-color:#535353}.toolbar-wp-subtle .bar-button-clear-wp-vibrant,.toolbar-wp-subtle .bar-button-vibrant-wp,.toolbar-wp-subtle .bar-button-wp-vibrant{color:#663399;background-color:transparent}.toolbar-wp-subtle .bar-button-clear-wp-vibrant:hover:not(.disable-hover),.toolbar-wp-subtle .bar-button-vibrant-wp:hover:not(.disable-hover),.toolbar-wp-subtle .bar-button-wp-vibrant:hover:not(.disable-hover){color:#663399}.toolbar-wp-subtle .bar-button-outline-wp-vibrant{border-color:#7243a1;color:#7243a1;background-color:transparent}.toolbar-wp-subtle .bar-button-outline-wp-vibrant.activated{color:#fff;background-color:#7243a1}.toolbar-wp-subtle .bar-button-solid-wp-vibrant{color:#fff;background-color:#663399}.toolbar-wp-subtle .bar-button-solid-wp-vibrant.activated{color:#fff;background-color:#7243a1}.toolbar-wp-subtle .bar-button-bright-wp,.toolbar-wp-subtle .bar-button-clear-wp-bright,.toolbar-wp-subtle .bar-button-wp-bright{color:#ffc125;background-color:transparent}.toolbar-wp-subtle .bar-button-bright-wp:hover:not(.disable-hover),.toolbar-wp-subtle .bar-button-clear-wp-bright:hover:not(.disable-hover),.toolbar-wp-subtle .bar-button-wp-bright:hover:not(.disable-hover){color:#ffc125}.toolbar-wp-subtle .bar-button-outline-wp-bright{border-color:#ebb222;color:#ebb222;background-color:transparent}.toolbar-wp-subtle .bar-button-outline-wp-bright.activated{color:#000;background-color:#ebb222}.toolbar-wp-subtle .bar-button-solid-wp-bright{color:#000;background-color:#ffc125}.toolbar-wp-subtle .bar-button-solid-wp-bright.activated{color:#000;background-color:#ebb222}.bar-button-clear-wp-subtle,.bar-button-subtle-wp,.bar-button-wp-subtle{color:#444;background-color:transparent}.bar-button-clear-wp-subtle:hover:not(.disable-hover),.bar-button-subtle-wp:hover:not(.disable-hover),.bar-button-wp-subtle:hover:not(.disable-hover){color:#444}.bar-button-outline-wp-subtle{border-color:#535353;color:#535353;background-color:transparent}.bar-button-outline-wp-subtle.activated{color:#fff;background-color:#535353}.bar-button-solid-wp-subtle{color:#fff;background-color:#444}.bar-button-solid-wp-subtle.activated{color:#fff;background-color:#535353}.toolbar-wp-vibrant .toolbar-background-wp{background:#663399}.toolbar-wp-vibrant .bar-button-clear-wp,.toolbar-wp-vibrant .bar-button-default-wp,.toolbar-wp-vibrant .bar-button-outline-wp,.toolbar-wp-vibrant .toolbar-title-wp{color:#fff}.toolbar-wp-vibrant .bar-button-outline-wp{border-color:#fff}.toolbar-wp-vibrant .bar-button-clear-wp-primary,.toolbar-wp-vibrant .bar-button-primary-wp,.toolbar-wp-vibrant .bar-button-wp-primary{color:#488aff;background-color:transparent}.toolbar-wp-vibrant .bar-button-clear-wp-primary:hover:not(.disable-hover),.toolbar-wp-vibrant .bar-button-primary-wp:hover:not(.disable-hover),.toolbar-wp-vibrant .bar-button-wp-primary:hover:not(.disable-hover){color:#488aff}.toolbar-wp-vibrant .bar-button-outline-wp-primary{border-color:#427feb;color:#427feb;background-color:transparent}.toolbar-wp-vibrant .bar-button-outline-wp-primary.activated{color:#fff;background-color:#427feb}.toolbar-wp-vibrant .bar-button-solid-wp-primary{color:#fff;background-color:#488aff}.toolbar-wp-vibrant .bar-button-solid-wp-primary.activated{color:#fff;background-color:#427feb}.toolbar-wp-vibrant .bar-button-clear-wp-secondary,.toolbar-wp-vibrant .bar-button-secondary-wp,.toolbar-wp-vibrant .bar-button-wp-secondary{color:#32db64;background-color:transparent}.toolbar-wp-vibrant .bar-button-clear-wp-secondary:hover:not(.disable-hover),.toolbar-wp-vibrant .bar-button-secondary-wp:hover:not(.disable-hover),.toolbar-wp-vibrant .bar-button-wp-secondary:hover:not(.disable-hover){color:#32db64}.toolbar-wp-vibrant .bar-button-outline-wp-secondary{border-color:#2ec95c;color:#2ec95c;background-color:transparent}.toolbar-wp-vibrant .bar-button-outline-wp-secondary.activated{color:#fff;background-color:#2ec95c}.toolbar-wp-vibrant .bar-button-solid-wp-secondary{color:#fff;background-color:#32db64}.toolbar-wp-vibrant .bar-button-solid-wp-secondary.activated{color:#fff;background-color:#2ec95c}.toolbar-wp-vibrant .bar-button-clear-wp-danger,.toolbar-wp-vibrant .bar-button-danger-wp,.toolbar-wp-vibrant .bar-button-wp-danger{color:#f53d3d;background-color:transparent}.toolbar-wp-vibrant .bar-button-clear-wp-danger:hover:not(.disable-hover),.toolbar-wp-vibrant .bar-button-danger-wp:hover:not(.disable-hover),.toolbar-wp-vibrant .bar-button-wp-danger:hover:not(.disable-hover){color:#f53d3d}.toolbar-wp-vibrant .bar-button-outline-wp-danger{border-color:#e13838;color:#e13838;background-color:transparent}.toolbar-wp-vibrant .bar-button-outline-wp-danger.activated{color:#fff;background-color:#e13838}.toolbar-wp-vibrant .bar-button-solid-wp-danger{color:#fff;background-color:#f53d3d}.toolbar-wp-vibrant .bar-button-solid-wp-danger.activated{color:#fff;background-color:#e13838}.toolbar-wp-vibrant .bar-button-clear-wp-light,.toolbar-wp-vibrant .bar-button-light-wp,.toolbar-wp-vibrant .bar-button-wp-light{color:#f4f4f4;background-color:transparent}.toolbar-wp-vibrant .bar-button-clear-wp-light:hover:not(.disable-hover),.toolbar-wp-vibrant .bar-button-light-wp:hover:not(.disable-hover),.toolbar-wp-vibrant .bar-button-wp-light:hover:not(.disable-hover){color:#f4f4f4}.toolbar-wp-vibrant .bar-button-outline-wp-light{border-color:#e0e0e0;color:#e0e0e0;background-color:transparent}.toolbar-wp-vibrant .bar-button-outline-wp-light.activated{color:#000;background-color:#e0e0e0}.toolbar-wp-vibrant .bar-button-solid-wp-light{color:#000;background-color:#f4f4f4}.toolbar-wp-vibrant .bar-button-solid-wp-light.activated{color:#000;background-color:#e0e0e0}.toolbar-wp-vibrant .bar-button-clear-wp-dark,.toolbar-wp-vibrant .bar-button-dark-wp,.toolbar-wp-vibrant .bar-button-wp-dark{color:#222;background-color:transparent}.toolbar-wp-vibrant .bar-button-clear-wp-dark:hover:not(.disable-hover),.toolbar-wp-vibrant .bar-button-dark-wp:hover:not(.disable-hover),.toolbar-wp-vibrant .bar-button-wp-dark:hover:not(.disable-hover){color:#222}.toolbar-wp-vibrant .bar-button-outline-wp-dark{border-color:#343434;color:#343434;background-color:transparent}.toolbar-wp-vibrant .bar-button-outline-wp-dark.activated{color:#fff;background-color:#343434}.toolbar-wp-vibrant .bar-button-solid-wp-dark{color:#fff;background-color:#222}.toolbar-wp-vibrant .bar-button-solid-wp-dark.activated{color:#fff;background-color:#343434}.toolbar-wp-vibrant .bar-button-clear-wp-energized,.toolbar-wp-vibrant .bar-button-energized-wp,.toolbar-wp-vibrant .bar-button-wp-energized{color:#ffc527;background-color:transparent}.toolbar-wp-vibrant .bar-button-clear-wp-energized:hover:not(.disable-hover),.toolbar-wp-vibrant .bar-button-energized-wp:hover:not(.disable-hover),.toolbar-wp-vibrant .bar-button-wp-energized:hover:not(.disable-hover){color:#ffc527}.toolbar-wp-vibrant .bar-button-outline-wp-energized{border-color:#ebb524;color:#ebb524;background-color:transparent}.toolbar-wp-vibrant .bar-button-outline-wp-energized.activated{color:#000;background-color:#ebb524}.toolbar-wp-vibrant .bar-button-solid-wp-energized{color:#000;background-color:#ffc527}.toolbar-wp-vibrant .bar-button-solid-wp-energized.activated{color:#000;background-color:#ebb524}.toolbar-wp-vibrant .bar-button-clear-wp-royal,.toolbar-wp-vibrant .bar-button-royal-wp,.toolbar-wp-vibrant .bar-button-wp-royal{color:#7e60ff;background-color:transparent}.toolbar-wp-vibrant .bar-button-clear-wp-royal:hover:not(.disable-hover),.toolbar-wp-vibrant .bar-button-royal-wp:hover:not(.disable-hover),.toolbar-wp-vibrant .bar-button-wp-royal:hover:not(.disable-hover){color:#7e60ff}.toolbar-wp-vibrant .bar-button-outline-wp-royal{border-color:#7458eb;color:#7458eb;background-color:transparent}.toolbar-wp-vibrant .bar-button-outline-wp-royal.activated{color:#fff;background-color:#7458eb}.toolbar-wp-vibrant .bar-button-solid-wp-royal{color:#fff;background-color:#7e60ff}.toolbar-wp-vibrant .bar-button-solid-wp-royal.activated{color:#fff;background-color:#7458eb}.toolbar-wp-vibrant .bar-button-clear-wp-subtle,.toolbar-wp-vibrant .bar-button-subtle-wp,.toolbar-wp-vibrant .bar-button-wp-subtle{color:#444;background-color:transparent}.toolbar-wp-vibrant .bar-button-clear-wp-subtle:hover:not(.disable-hover),.toolbar-wp-vibrant .bar-button-subtle-wp:hover:not(.disable-hover),.toolbar-wp-vibrant .bar-button-wp-subtle:hover:not(.disable-hover){color:#444}.toolbar-wp-vibrant .bar-button-outline-wp-subtle{border-color:#535353;color:#535353;background-color:transparent}.toolbar-wp-vibrant .bar-button-outline-wp-subtle.activated{color:#fff;background-color:#535353}.toolbar-wp-vibrant .bar-button-solid-wp-subtle{color:#fff;background-color:#444}.toolbar-wp-vibrant .bar-button-solid-wp-subtle.activated{color:#fff;background-color:#535353}.toolbar-wp-vibrant .bar-button-clear-wp-vibrant,.toolbar-wp-vibrant .bar-button-vibrant-wp,.toolbar-wp-vibrant .bar-button-wp-vibrant{color:#663399;background-color:transparent}.toolbar-wp-vibrant .bar-button-clear-wp-vibrant:hover:not(.disable-hover),.toolbar-wp-vibrant .bar-button-vibrant-wp:hover:not(.disable-hover),.toolbar-wp-vibrant .bar-button-wp-vibrant:hover:not(.disable-hover){color:#663399}.toolbar-wp-vibrant .bar-button-outline-wp-vibrant{border-color:#7243a1;color:#7243a1;background-color:transparent}.toolbar-wp-vibrant .bar-button-outline-wp-vibrant.activated{color:#fff;background-color:#7243a1}.toolbar-wp-vibrant .bar-button-solid-wp-vibrant{color:#fff;background-color:#663399}.toolbar-wp-vibrant .bar-button-solid-wp-vibrant.activated{color:#fff;background-color:#7243a1}.toolbar-wp-vibrant .bar-button-bright-wp,.toolbar-wp-vibrant .bar-button-clear-wp-bright,.toolbar-wp-vibrant .bar-button-wp-bright{color:#ffc125;background-color:transparent}.toolbar-wp-vibrant .bar-button-bright-wp:hover:not(.disable-hover),.toolbar-wp-vibrant .bar-button-clear-wp-bright:hover:not(.disable-hover),.toolbar-wp-vibrant .bar-button-wp-bright:hover:not(.disable-hover){color:#ffc125}.toolbar-wp-vibrant .bar-button-outline-wp-bright{border-color:#ebb222;color:#ebb222;background-color:transparent}.toolbar-wp-vibrant .bar-button-outline-wp-bright.activated{color:#000;background-color:#ebb222}.toolbar-wp-vibrant .bar-button-solid-wp-bright{color:#000;background-color:#ffc125}.toolbar-wp-vibrant .bar-button-solid-wp-bright.activated{color:#000;background-color:#ebb222}.bar-button-clear-wp-vibrant,.bar-button-vibrant-wp,.bar-button-wp-vibrant{color:#663399;background-color:transparent}.bar-button-clear-wp-vibrant:hover:not(.disable-hover),.bar-button-vibrant-wp:hover:not(.disable-hover),.bar-button-wp-vibrant:hover:not(.disable-hover){color:#663399}.bar-button-outline-wp-vibrant{border-color:#7243a1;color:#7243a1;background-color:transparent}.bar-button-outline-wp-vibrant.activated{color:#fff;background-color:#7243a1}.bar-button-solid-wp-vibrant{color:#fff;background-color:#663399}.bar-button-solid-wp-vibrant.activated{color:#fff;background-color:#7243a1}.toolbar-wp-bright .toolbar-background-wp{background:#ffc125}.toolbar-wp-bright .bar-button-clear-wp,.toolbar-wp-bright .bar-button-default-wp,.toolbar-wp-bright .bar-button-outline-wp,.toolbar-wp-bright .toolbar-title-wp{color:#000}.toolbar-wp-bright .bar-button-outline-wp{border-color:#000}.toolbar-wp-bright .bar-button-clear-wp-primary,.toolbar-wp-bright .bar-button-primary-wp,.toolbar-wp-bright .bar-button-wp-primary{color:#488aff;background-color:transparent}.toolbar-wp-bright .bar-button-clear-wp-primary:hover:not(.disable-hover),.toolbar-wp-bright .bar-button-primary-wp:hover:not(.disable-hover),.toolbar-wp-bright .bar-button-wp-primary:hover:not(.disable-hover){color:#488aff}.toolbar-wp-bright .bar-button-outline-wp-primary{border-color:#427feb;color:#427feb;background-color:transparent}.toolbar-wp-bright .bar-button-outline-wp-primary.activated{color:#fff;background-color:#427feb}.toolbar-wp-bright .bar-button-solid-wp-primary{color:#fff;background-color:#488aff}.toolbar-wp-bright .bar-button-solid-wp-primary.activated{color:#fff;background-color:#427feb}.toolbar-wp-bright .bar-button-clear-wp-secondary,.toolbar-wp-bright .bar-button-secondary-wp,.toolbar-wp-bright .bar-button-wp-secondary{color:#32db64;background-color:transparent}.toolbar-wp-bright .bar-button-clear-wp-secondary:hover:not(.disable-hover),.toolbar-wp-bright .bar-button-secondary-wp:hover:not(.disable-hover),.toolbar-wp-bright .bar-button-wp-secondary:hover:not(.disable-hover){color:#32db64}.toolbar-wp-bright .bar-button-outline-wp-secondary{border-color:#2ec95c;color:#2ec95c;background-color:transparent}.toolbar-wp-bright .bar-button-outline-wp-secondary.activated{color:#fff;background-color:#2ec95c}.toolbar-wp-bright .bar-button-solid-wp-secondary{color:#fff;background-color:#32db64}.toolbar-wp-bright .bar-button-solid-wp-secondary.activated{color:#fff;background-color:#2ec95c}.toolbar-wp-bright .bar-button-clear-wp-danger,.toolbar-wp-bright .bar-button-danger-wp,.toolbar-wp-bright .bar-button-wp-danger{color:#f53d3d;background-color:transparent}.toolbar-wp-bright .bar-button-clear-wp-danger:hover:not(.disable-hover),.toolbar-wp-bright .bar-button-danger-wp:hover:not(.disable-hover),.toolbar-wp-bright .bar-button-wp-danger:hover:not(.disable-hover){color:#f53d3d}.toolbar-wp-bright .bar-button-outline-wp-danger{border-color:#e13838;color:#e13838;background-color:transparent}.toolbar-wp-bright .bar-button-outline-wp-danger.activated{color:#fff;background-color:#e13838}.toolbar-wp-bright .bar-button-solid-wp-danger{color:#fff;background-color:#f53d3d}.toolbar-wp-bright .bar-button-solid-wp-danger.activated{color:#fff;background-color:#e13838}.toolbar-wp-bright .bar-button-clear-wp-light,.toolbar-wp-bright .bar-button-light-wp,.toolbar-wp-bright .bar-button-wp-light{color:#f4f4f4;background-color:transparent}.toolbar-wp-bright .bar-button-clear-wp-light:hover:not(.disable-hover),.toolbar-wp-bright .bar-button-light-wp:hover:not(.disable-hover),.toolbar-wp-bright .bar-button-wp-light:hover:not(.disable-hover){color:#f4f4f4}.toolbar-wp-bright .bar-button-outline-wp-light{border-color:#e0e0e0;color:#e0e0e0;background-color:transparent}.toolbar-wp-bright .bar-button-outline-wp-light.activated{color:#000;background-color:#e0e0e0}.toolbar-wp-bright .bar-button-solid-wp-light{color:#000;background-color:#f4f4f4}.toolbar-wp-bright .bar-button-solid-wp-light.activated{color:#000;background-color:#e0e0e0}.toolbar-wp-bright .bar-button-clear-wp-dark,.toolbar-wp-bright .bar-button-dark-wp,.toolbar-wp-bright .bar-button-wp-dark{color:#222;background-color:transparent}.toolbar-wp-bright .bar-button-clear-wp-dark:hover:not(.disable-hover),.toolbar-wp-bright .bar-button-dark-wp:hover:not(.disable-hover),.toolbar-wp-bright .bar-button-wp-dark:hover:not(.disable-hover){color:#222}.toolbar-wp-bright .bar-button-outline-wp-dark{border-color:#343434;color:#343434;background-color:transparent}.toolbar-wp-bright .bar-button-outline-wp-dark.activated{color:#fff;background-color:#343434}.toolbar-wp-bright .bar-button-solid-wp-dark{color:#fff;background-color:#222}.toolbar-wp-bright .bar-button-solid-wp-dark.activated{color:#fff;background-color:#343434}.toolbar-wp-bright .bar-button-clear-wp-energized,.toolbar-wp-bright .bar-button-energized-wp,.toolbar-wp-bright .bar-button-wp-energized{color:#ffc527;background-color:transparent}.toolbar-wp-bright .bar-button-clear-wp-energized:hover:not(.disable-hover),.toolbar-wp-bright .bar-button-energized-wp:hover:not(.disable-hover),.toolbar-wp-bright .bar-button-wp-energized:hover:not(.disable-hover){color:#ffc527}.toolbar-wp-bright .bar-button-outline-wp-energized{border-color:#ebb524;color:#ebb524;background-color:transparent}.toolbar-wp-bright .bar-button-outline-wp-energized.activated{color:#000;background-color:#ebb524}.toolbar-wp-bright .bar-button-solid-wp-energized{color:#000;background-color:#ffc527}.toolbar-wp-bright .bar-button-solid-wp-energized.activated{color:#000;background-color:#ebb524}.toolbar-wp-bright .bar-button-clear-wp-royal,.toolbar-wp-bright .bar-button-royal-wp,.toolbar-wp-bright .bar-button-wp-royal{color:#7e60ff;background-color:transparent}.toolbar-wp-bright .bar-button-clear-wp-royal:hover:not(.disable-hover),.toolbar-wp-bright .bar-button-royal-wp:hover:not(.disable-hover),.toolbar-wp-bright .bar-button-wp-royal:hover:not(.disable-hover){color:#7e60ff}.toolbar-wp-bright .bar-button-outline-wp-royal{border-color:#7458eb;color:#7458eb;background-color:transparent}.toolbar-wp-bright .bar-button-outline-wp-royal.activated{color:#fff;background-color:#7458eb}.toolbar-wp-bright .bar-button-solid-wp-royal{color:#fff;background-color:#7e60ff}.toolbar-wp-bright .bar-button-solid-wp-royal.activated{color:#fff;background-color:#7458eb}.toolbar-wp-bright .bar-button-clear-wp-subtle,.toolbar-wp-bright .bar-button-subtle-wp,.toolbar-wp-bright .bar-button-wp-subtle{color:#444;background-color:transparent}.toolbar-wp-bright .bar-button-clear-wp-subtle:hover:not(.disable-hover),.toolbar-wp-bright .bar-button-subtle-wp:hover:not(.disable-hover),.toolbar-wp-bright .bar-button-wp-subtle:hover:not(.disable-hover){color:#444}.toolbar-wp-bright .bar-button-outline-wp-subtle{border-color:#535353;color:#535353;background-color:transparent}.toolbar-wp-bright .bar-button-outline-wp-subtle.activated{color:#fff;background-color:#535353}.toolbar-wp-bright .bar-button-solid-wp-subtle{color:#fff;background-color:#444}.toolbar-wp-bright .bar-button-solid-wp-subtle.activated{color:#fff;background-color:#535353}.toolbar-wp-bright .bar-button-clear-wp-vibrant,.toolbar-wp-bright .bar-button-vibrant-wp,.toolbar-wp-bright .bar-button-wp-vibrant{color:#663399;background-color:transparent}.toolbar-wp-bright .bar-button-clear-wp-vibrant:hover:not(.disable-hover),.toolbar-wp-bright .bar-button-vibrant-wp:hover:not(.disable-hover),.toolbar-wp-bright .bar-button-wp-vibrant:hover:not(.disable-hover){color:#663399}.toolbar-wp-bright .bar-button-outline-wp-vibrant{border-color:#7243a1;color:#7243a1;background-color:transparent}.toolbar-wp-bright .bar-button-outline-wp-vibrant.activated{color:#fff;background-color:#7243a1}.toolbar-wp-bright .bar-button-solid-wp-vibrant{color:#fff;background-color:#663399}.toolbar-wp-bright .bar-button-solid-wp-vibrant.activated{color:#fff;background-color:#7243a1}.toolbar-wp-bright .bar-button-bright-wp,.toolbar-wp-bright .bar-button-clear-wp-bright,.toolbar-wp-bright .bar-button-wp-bright{color:#ffc125;background-color:transparent}.toolbar-wp-bright .bar-button-bright-wp:hover:not(.disable-hover),.toolbar-wp-bright .bar-button-clear-wp-bright:hover:not(.disable-hover),.toolbar-wp-bright .bar-button-wp-bright:hover:not(.disable-hover){color:#ffc125}.toolbar-wp-bright .bar-button-outline-wp-bright{border-color:#ebb222;color:#ebb222;background-color:transparent}.toolbar-wp-bright .bar-button-outline-wp-bright.activated{color:#000;background-color:#ebb222}.toolbar-wp-bright .bar-button-solid-wp-bright{color:#000;background-color:#ffc125}.toolbar-wp-bright .bar-button-solid-wp-bright.activated{color:#000;background-color:#ebb222}.bar-button-bright-wp,.bar-button-clear-wp-bright,.bar-button-wp-bright{color:#ffc125;background-color:transparent}.bar-button-bright-wp:hover:not(.disable-hover),.bar-button-clear-wp-bright:hover:not(.disable-hover),.bar-button-wp-bright:hover:not(.disable-hover){color:#ffc125}.bar-button-outline-wp-bright{border-color:#ebb222;color:#ebb222;background-color:transparent}.bar-button-outline-wp-bright.activated{color:#000;background-color:#ebb222}.bar-button-solid-wp-bright{color:#000;background-color:#ffc125}.bar-button-solid-wp-bright.activated{color:#000;background-color:#ebb222}.bar-button-strong-wp{font-weight:700}.text-ios-primary{color:#488aff}.text-ios-secondary{color:#32db64}.text-ios-danger{color:#f53d3d}.text-ios-light{color:#f4f4f4}.text-ios-dark{color:#222}.text-ios-energized{color:#ffc527}.text-ios-royal{color:#7e60ff}.text-ios-subtle{color:#444}.text-ios-vibrant{color:#663399}.text-ios-bright{color:#ffc125}.text-md-primary{color:#488aff}.text-md-secondary{color:#32db64}.text-md-danger{color:#f53d3d}.text-md-light{color:#f4f4f4}.text-md-dark{color:#222}.text-md-energized{color:#ffc527}.text-md-royal{color:#7e60ff}.text-md-subtle{color:#444}.text-md-vibrant{color:#663399}.text-md-bright{color:#ffc125}.text-wp-primary{color:#488aff}.text-wp-secondary{color:#32db64}.text-wp-danger{color:#f53d3d}.text-wp-light{color:#f4f4f4}.text-wp-dark{color:#222}.text-wp-energized{color:#ffc527}.text-wp-royal{color:#7e60ff}.text-wp-subtle{color:#444}.text-wp-vibrant{color:#663399}.text-wp-bright{color:#ffc125}.virtual-loading{opacity:0}.virtual-scroll{position:relative;contain:content}.virtual-scroll .virtual-position,.virtual-scroll .virtual-position.item{left:0;top:0;position:absolute;-webkit-transition-duration:0s;transition-duration:0s;contain:content}.virtual-scroll .virtual-last{display:none}.ios ion-menu>.menu-inner>.toolbar.statusbar-padding:first-child,.ios ion-menu>.menu-inner>ion-header>.toolbar.statusbar-padding:first-child,.ios ion-nav>.ion-page>.toolbar.statusbar-padding:first-child,.ios ion-nav>.ion-page>ion-header>.toolbar.statusbar-padding:first-child,.ios ion-tab>.ion-page>.toolbar.statusbar-padding:first-child,.ios ion-tab>.ion-page>ion-header>.toolbar.statusbar-padding:first-child,.ios ion-tabs>.ion-page.tab-subpage>ion-header>.toolbar.statusbar-padding:first-child{padding-top:calc(20px + 4px);padding-top:calc(constant(safe-area-inset-top) + 4px);padding-top:calc(env(safe-area-inset-top) + 4px);min-height:calc(44px + 20px);min-height:calc(44px + constant(safe-area-inset-top));min-height:calc(44px + env(safe-area-inset-top))}.ios ion-menu>.menu-inner>ion-content.statusbar-padding:first-child .scroll-content,.ios ion-menu>.menu-inner>ion-header>ion-content.statusbar-padding:first-child .scroll-content,.ios ion-nav>.ion-page>ion-content.statusbar-padding:first-child .scroll-content,.ios ion-nav>.ion-page>ion-header>ion-content.statusbar-padding:first-child .scroll-content,.ios ion-tab>.ion-page>ion-content.statusbar-padding:first-child .scroll-content,.ios ion-tab>.ion-page>ion-header>ion-content.statusbar-padding:first-child .scroll-content,.ios ion-tabs>.ion-page.tab-subpage>ion-header>ion-content.statusbar-padding:first-child .scroll-content{padding-top:20px;padding-top:constant(safe-area-inset-top);padding-top:env(safe-area-inset-top)}.ios ion-menu>.menu-inner>ion-content.statusbar-padding:first-child[padding-top] .scroll-content,.ios ion-menu>.menu-inner>ion-content.statusbar-padding:first-child[padding] .scroll-content,.ios ion-menu>.menu-inner>ion-header>ion-content.statusbar-padding:first-child[padding-top] .scroll-content,.ios ion-menu>.menu-inner>ion-header>ion-content.statusbar-padding:first-child[padding] .scroll-content,.ios ion-nav>.ion-page>ion-content.statusbar-padding:first-child[padding-top] .scroll-content,.ios ion-nav>.ion-page>ion-content.statusbar-padding:first-child[padding] .scroll-content,.ios ion-nav>.ion-page>ion-header>ion-content.statusbar-padding:first-child[padding-top] .scroll-content,.ios ion-nav>.ion-page>ion-header>ion-content.statusbar-padding:first-child[padding] .scroll-content,.ios ion-tab>.ion-page>ion-content.statusbar-padding:first-child[padding-top] .scroll-content,.ios ion-tab>.ion-page>ion-content.statusbar-padding:first-child[padding] .scroll-content,.ios ion-tab>.ion-page>ion-header>ion-content.statusbar-padding:first-child[padding-top] .scroll-content,.ios ion-tab>.ion-page>ion-header>ion-content.statusbar-padding:first-child[padding] .scroll-content,.ios ion-tabs>.ion-page.tab-subpage>ion-header>ion-content.statusbar-padding:first-child[padding-top] .scroll-content,.ios ion-tabs>.ion-page.tab-subpage>ion-header>ion-content.statusbar-padding:first-child[padding] .scroll-content{padding-top:calc(16px + 20px);padding-top:constant(safe-area-inset-top);padding-top:env(safe-area-inset-top)}.ios ion-menu>.menu-inner>.toolbar.statusbar-padding:first-child ion-segment,.ios ion-menu>.menu-inner>.toolbar.statusbar-padding:first-child ion-title,.ios ion-menu>.menu-inner>ion-header>.toolbar.statusbar-padding:first-child ion-segment,.ios ion-menu>.menu-inner>ion-header>.toolbar.statusbar-padding:first-child ion-title,.ios ion-nav>.ion-page>.toolbar.statusbar-padding:first-child ion-segment,.ios ion-nav>.ion-page>.toolbar.statusbar-padding:first-child ion-title,.ios ion-nav>.ion-page>ion-header>.toolbar.statusbar-padding:first-child ion-segment,.ios ion-nav>.ion-page>ion-header>.toolbar.statusbar-padding:first-child ion-title,.ios ion-tab>.ion-page>.toolbar.statusbar-padding:first-child ion-segment,.ios ion-tab>.ion-page>.toolbar.statusbar-padding:first-child ion-title,.ios ion-tab>.ion-page>ion-header>.toolbar.statusbar-padding:first-child ion-segment,.ios ion-tab>.ion-page>ion-header>.toolbar.statusbar-padding:first-child ion-title,.ios ion-tabs>.ion-page.tab-subpage>ion-header>.toolbar.statusbar-padding:first-child ion-segment,.ios ion-tabs>.ion-page.tab-subpage>ion-header>.toolbar.statusbar-padding:first-child ion-title{padding-top:20px;padding-top:constant(safe-area-inset-top);padding-top:env(safe-area-inset-top);height:calc(44px + 20px);height:calc(44px + constant(safe-area-inset-top));height:calc(44px + env(safe-area-inset-top));min-height:calc(44px + 20px);min-height:calc(44px + constant(safe-area-inset-top));min-height:calc(44px + env(safe-area-inset-top))}@media only screen and (max-width:767px){.ios .modal-wrapper>.ion-page>ion-header>.toolbar.statusbar-padding:first-child{padding-top:calc(20px + 4px);padding-top:calc(constant(safe-area-inset-top) + 4px);padding-top:calc(env(safe-area-inset-top) + 4px);min-height:calc(44px + 20px);min-height:calc(44px + constant(safe-area-inset-top));min-height:calc(44px + env(safe-area-inset-top))}.ios .modal-wrapper>.ion-page>ion-header>ion-content.statusbar-padding:first-child .scroll-content{padding-top:20px;padding-top:constant(safe-area-inset-top);padding-top:env(safe-area-inset-top)}.ios .modal-wrapper>.ion-page>ion-header>ion-content.statusbar-padding:first-child[padding-top] .scroll-content,.ios .modal-wrapper>.ion-page>ion-header>ion-content.statusbar-padding:first-child[padding] .scroll-content{padding-top:calc(16px + 20px);padding-top:constant(safe-area-inset-top);padding-top:env(safe-area-inset-top)}.ios .modal-wrapper>.ion-page>ion-header>.toolbar.statusbar-padding:first-child ion-segment,.ios .modal-wrapper>.ion-page>ion-header>.toolbar.statusbar-padding:first-child ion-title{padding-top:20px;padding-top:constant(safe-area-inset-top);padding-top:env(safe-area-inset-top);height:calc(44px + 20px);height:calc(44px + constant(safe-area-inset-top));height:calc(44px + env(safe-area-inset-top));min-height:calc(44px + 20px);min-height:calc(44px + constant(safe-area-inset-top));min-height:calc(44px + env(safe-area-inset-top))}}.ios .tabs:not(.tabs-ios[tabsPlacement=top]) .tabbar{padding-bottom:constant(safe-area-inset-bottom);padding-bottom:env(safe-area-inset-bottom)}.ios ion-footer .toolbar:last-child{padding-bottom:calc(constant(safe-area-inset-bottom) + 4px);padding-bottom:calc(env(safe-area-inset-bottom) + 4px);min-height:calc(44px + constant(safe-area-inset-bottom));min-height:calc(44px + env(safe-area-inset-bottom))}.md ion-menu>.menu-inner>.toolbar.statusbar-padding:first-child,.md ion-menu>.menu-inner>ion-header>.toolbar.statusbar-padding:first-child,.md ion-nav>.ion-page>.toolbar.statusbar-padding:first-child,.md ion-nav>.ion-page>ion-header>.toolbar.statusbar-padding:first-child,.md ion-tab>.ion-page>.toolbar.statusbar-padding:first-child,.md ion-tab>.ion-page>ion-header>.toolbar.statusbar-padding:first-child,.md ion-tabs>.ion-page.tab-subpage>ion-header>.toolbar.statusbar-padding:first-child{padding-top:calc(29px + 4px);padding-top:calc(constant(safe-area-inset-top) + 4px);padding-top:calc(env(safe-area-inset-top) + 4px);min-height:calc(56px + 29px);min-height:calc(56px + constant(safe-area-inset-top));min-height:calc(56px + env(safe-area-inset-top))}.md ion-menu>.menu-inner>ion-content.statusbar-padding:first-child .scroll-content,.md ion-menu>.menu-inner>ion-header>ion-content.statusbar-padding:first-child .scroll-content,.md ion-nav>.ion-page>ion-content.statusbar-padding:first-child .scroll-content,.md ion-nav>.ion-page>ion-header>ion-content.statusbar-padding:first-child .scroll-content,.md ion-tab>.ion-page>ion-content.statusbar-padding:first-child .scroll-content,.md ion-tab>.ion-page>ion-header>ion-content.statusbar-padding:first-child .scroll-content,.md ion-tabs>.ion-page.tab-subpage>ion-header>ion-content.statusbar-padding:first-child .scroll-content{padding-top:29px;padding-top:constant(safe-area-inset-top);padding-top:env(safe-area-inset-top)}.md ion-menu>.menu-inner>ion-content.statusbar-padding:first-child[padding-top] .scroll-content,.md ion-menu>.menu-inner>ion-content.statusbar-padding:first-child[padding] .scroll-content,.md ion-menu>.menu-inner>ion-header>ion-content.statusbar-padding:first-child[padding-top] .scroll-content,.md ion-menu>.menu-inner>ion-header>ion-content.statusbar-padding:first-child[padding] .scroll-content,.md ion-nav>.ion-page>ion-content.statusbar-padding:first-child[padding-top] .scroll-content,.md ion-nav>.ion-page>ion-content.statusbar-padding:first-child[padding] .scroll-content,.md ion-nav>.ion-page>ion-header>ion-content.statusbar-padding:first-child[padding-top] .scroll-content,.md ion-nav>.ion-page>ion-header>ion-content.statusbar-padding:first-child[padding] .scroll-content,.md ion-tab>.ion-page>ion-content.statusbar-padding:first-child[padding-top] .scroll-content,.md ion-tab>.ion-page>ion-content.statusbar-padding:first-child[padding] .scroll-content,.md ion-tab>.ion-page>ion-header>ion-content.statusbar-padding:first-child[padding-top] .scroll-content,.md ion-tab>.ion-page>ion-header>ion-content.statusbar-padding:first-child[padding] .scroll-content,.md ion-tabs>.ion-page.tab-subpage>ion-header>ion-content.statusbar-padding:first-child[padding-top] .scroll-content,.md ion-tabs>.ion-page.tab-subpage>ion-header>ion-content.statusbar-padding:first-child[padding] .scroll-content{padding-top:calc(16px + 29px);padding-top:constant(safe-area-inset-top);padding-top:env(safe-area-inset-top)}@media only screen and (max-width:767px){.md .modal-wrapper>.ion-page>ion-header>.toolbar.statusbar-padding:first-child{padding-top:calc(29px + 4px);padding-top:calc(constant(safe-area-inset-top) + 4px);padding-top:calc(env(safe-area-inset-top) + 4px);min-height:calc(56px + 29px);min-height:calc(56px + constant(safe-area-inset-top));min-height:calc(56px + env(safe-area-inset-top))}.md .modal-wrapper>.ion-page>ion-header>ion-content.statusbar-padding:first-child .scroll-content{padding-top:29px;padding-top:constant(safe-area-inset-top);padding-top:env(safe-area-inset-top)}.md .modal-wrapper>.ion-page>ion-header>ion-content.statusbar-padding:first-child[padding-top] .scroll-content,.md .modal-wrapper>.ion-page>ion-header>ion-content.statusbar-padding:first-child[padding] .scroll-content{padding-top:calc(16px + 29px);padding-top:constant(safe-area-inset-top);padding-top:env(safe-area-inset-top)}}.md .tabs:not(.tabs-ios[tabsPlacement=top]) .tabbar{padding-bottom:constant(safe-area-inset-bottom);padding-bottom:env(safe-area-inset-bottom)}.md ion-footer .toolbar:last-child{padding-bottom:calc(constant(safe-area-inset-bottom) + 4px);padding-bottom:calc(env(safe-area-inset-bottom) + 4px);min-height:calc(56px + constant(safe-area-inset-bottom));min-height:calc(56px + env(safe-area-inset-bottom))}.wp ion-menu>.menu-inner>.toolbar.statusbar-padding:first-child,.wp ion-menu>.menu-inner>ion-header>.toolbar.statusbar-padding:first-child,.wp ion-nav>.ion-page>.toolbar.statusbar-padding:first-child,.wp ion-nav>.ion-page>ion-header>.toolbar.statusbar-padding:first-child,.wp ion-tab>.ion-page>.toolbar.statusbar-padding:first-child,.wp ion-tab>.ion-page>ion-header>.toolbar.statusbar-padding:first-child,.wp ion-tabs>.ion-page.tab-subpage>ion-header>.toolbar.statusbar-padding:first-child{padding-top:calc(31px + 4px);padding-top:calc(constant(safe-area-inset-top) + 4px);padding-top:calc(env(safe-area-inset-top) + 4px);min-height:calc(46px + 31px);min-height:calc(46px + constant(safe-area-inset-top));min-height:calc(46px + env(safe-area-inset-top))}.wp ion-menu>.menu-inner>ion-content.statusbar-padding:first-child .scroll-content,.wp ion-menu>.menu-inner>ion-header>ion-content.statusbar-padding:first-child .scroll-content,.wp ion-nav>.ion-page>ion-content.statusbar-padding:first-child .scroll-content,.wp ion-nav>.ion-page>ion-header>ion-content.statusbar-padding:first-child .scroll-content,.wp ion-tab>.ion-page>ion-content.statusbar-padding:first-child .scroll-content,.wp ion-tab>.ion-page>ion-header>ion-content.statusbar-padding:first-child .scroll-content,.wp ion-tabs>.ion-page.tab-subpage>ion-header>ion-content.statusbar-padding:first-child .scroll-content{padding-top:31px;padding-top:constant(safe-area-inset-top);padding-top:env(safe-area-inset-top)}.wp ion-menu>.menu-inner>ion-content.statusbar-padding:first-child[padding-top] .scroll-content,.wp ion-menu>.menu-inner>ion-content.statusbar-padding:first-child[padding] .scroll-content,.wp ion-menu>.menu-inner>ion-header>ion-content.statusbar-padding:first-child[padding-top] .scroll-content,.wp ion-menu>.menu-inner>ion-header>ion-content.statusbar-padding:first-child[padding] .scroll-content,.wp ion-nav>.ion-page>ion-content.statusbar-padding:first-child[padding-top] .scroll-content,.wp ion-nav>.ion-page>ion-content.statusbar-padding:first-child[padding] .scroll-content,.wp ion-nav>.ion-page>ion-header>ion-content.statusbar-padding:first-child[padding-top] .scroll-content,.wp ion-nav>.ion-page>ion-header>ion-content.statusbar-padding:first-child[padding] .scroll-content,.wp ion-tab>.ion-page>ion-content.statusbar-padding:first-child[padding-top] .scroll-content,.wp ion-tab>.ion-page>ion-content.statusbar-padding:first-child[padding] .scroll-content,.wp ion-tab>.ion-page>ion-header>ion-content.statusbar-padding:first-child[padding-top] .scroll-content,.wp ion-tab>.ion-page>ion-header>ion-content.statusbar-padding:first-child[padding] .scroll-content,.wp ion-tabs>.ion-page.tab-subpage>ion-header>ion-content.statusbar-padding:first-child[padding-top] .scroll-content,.wp ion-tabs>.ion-page.tab-subpage>ion-header>ion-content.statusbar-padding:first-child[padding] .scroll-content{padding-top:calc(16px + 31px);padding-top:constant(safe-area-inset-top);padding-top:env(safe-area-inset-top)}@media only screen and (max-width:767px){.wp .modal-wrapper>.ion-page>ion-header>.toolbar.statusbar-padding:first-child{padding-top:calc(31px + 4px);padding-top:calc(constant(safe-area-inset-top) + 4px);padding-top:calc(env(safe-area-inset-top) + 4px);min-height:calc(46px + 31px);min-height:calc(46px + constant(safe-area-inset-top));min-height:calc(46px + env(safe-area-inset-top))}.wp .modal-wrapper>.ion-page>ion-header>ion-content.statusbar-padding:first-child .scroll-content{padding-top:31px;padding-top:constant(safe-area-inset-top);padding-top:env(safe-area-inset-top)}.wp .modal-wrapper>.ion-page>ion-header>ion-content.statusbar-padding:first-child[padding-top] .scroll-content,.wp .modal-wrapper>.ion-page>ion-header>ion-content.statusbar-padding:first-child[padding] .scroll-content{padding-top:calc(16px + 31px);padding-top:constant(safe-area-inset-top);padding-top:env(safe-area-inset-top)}}.wp .tabs:not(.tabs-ios[tabsPlacement=top]) .tabbar{padding-bottom:constant(safe-area-inset-bottom);padding-bottom:env(safe-area-inset-bottom)}.wp ion-footer .toolbar:last-child{padding-bottom:calc(constant(safe-area-inset-bottom) + 4px);padding-bottom:calc(env(safe-area-inset-bottom) + 4px);min-height:calc(46px + constant(safe-area-inset-bottom));min-height:calc(46px + env(safe-area-inset-bottom))}.action-sheets-basic-page .ion-md-share{color:#ed4248}.action-sheets-basic-page .ion-md-arrow-dropright-circle{color:#508ae4}.action-sheets-basic-page .ion-md-heart-outline{color:#31d55f}.action-sheets-basic-page .action-sheet-cancel ion-icon,.action-sheets-basic-page .action-sheet-destructive ion-icon{color:#757575}.buttons-components-page ion-card{margin-bottom:2em}.buttons-components-page ion-card-content{background-color:#f4f5f8}.buttons-components-page ion-card img{width:auto;height:44px;display:block;margin:20px auto}ion-card.adv-map p{font-size:.7em!important}button[fab].fab-map{top:calc(100% - 35px);z-index:50}.item-bold{font-weight:700}ion-content.cards-bg{background-color:#f4f4f7}ion-content ion-card ion-item.advanced-trans p{color:#fff}ion-card ion-item.advanced-trans.item{position:absolute;top:0;width:100%;padding:12px 20px!important;background:0 0}ion-card ion-item.advanced-trans.item p{font-size:12px;letter-spacing:1.7px;font-weight:500;opacity:.7}ion-card p.advanced-background-title-large{top:29%;font-weight:400;font-size:4.4em;color:#fff!important}ion-card p.advanced-background-title-large span{vertical-align:top;padding-top:5px;font-size:72px;height:74px;line-height:1;display:inline-block}.preview-weather-cards ion-card ion-item.advanced-trans.item p{font-size:12px;letter-spacing:1.7px;font-weight:500;opacity:.7}.preview-weather-cards ion-card ion-item.advanced-trans.item p{font-size:12px;letter-spacing:1.7px;font-weight:500;opacity:.7;color:#fff!important}.preview-weather-cards ion-card p.advanced-background-subtitle{font-size:1em;position:absolute;top:48%;width:100%;color:#fff!important}.preview-weather-cards .advanced-background{position:relative;text-align:center!important}.preview-weather-cards ion-card ion-item.advanced-trans.item{position:absolute;top:0;width:100%;padding:12px 20px!important;background:0 0}.preview-weather-cards ion-card p.advanced-background-title{position:absolute;top:25%;font-size:2em;width:100%;font-weight:700;color:#fff!important}.preview-weather-cards ion-card p.advanced-background-title-large{top:29%;font-weight:400;font-size:4.4em;color:#fff!important}.preview-weather-cards ion-card p.advanced-background-title-large span{vertical-align:top;padding-top:5px;font-size:72px;height:74px;line-height:1;display:inline-block}.preview-weather-cards ion-card .advanced-weather-tabs tabbar{background:0 0;border-top:none}.preview-weather-cards ion-card .advanced-weather-tabs tabbar a{height:100%;border-top:2px solid transparent!important;border-bottom:0!important}.preview-weather-cards ion-card .advanced-weather-tabs tabbar a ion-icon.tab-button-icon{color:#fff;font-size:2.8em}.preview-weather-cards ion-card .advanced-weather-tabs tabbar a span.tab-button-text{color:#fff;font-size:13px}.preview-weather-cards md-ripple{background:rgba(255,255,255,.15)}.preview-weather-cards ion-card .advanced-weather-tabs{position:absolute;bottom:0;width:100%;background:0 0}.preview-weather-cards ion-card ion-item.advanced-trans.item{position:absolute;top:0;width:100%;padding:12px 20px!important;background:0 0;color:#fff!important}ion-card .advanced-weather-tabs{position:absolute;bottom:0;width:100%;background:0 0}ion-card .advanced-weather-tabs tabbar{height:88px}ion-card p.advanced-background-title-large span{font-weight:300}ion-card .advanced-weather-tabs tabbar{height:100px}ion-card .advanced-weather-tabs tabbar a span.tab-button-text{text-transform:uppercase}.cards-bg tab-highlight{background-color:#fff!important;top:0}.card-background-page ion-card{position:relative;text-align:center}.card-background-page .card-title{position:absolute;top:36%;font-size:2em;width:100%;font-weight:700;color:#fff}.card-background-page .card-subtitle{font-size:1em;position:absolute;top:52%;width:100%;color:#fff}ion-card.cards-list-demo ion-card-header{color:#488aff}.grid-basic-page ion-col div{background-color:#f0f5ff;border:1px solid #e6e9ee;border-radius:2px;padding:5px;text-align:center}.grid-basic-page p{padding:10px 0 0 10px!important;margin:0}.icons-basic-page ion-icon{font-size:50px}.icons-basic-page ion-row{height:100%;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap}.icons-basic-page ion-col{-webkit-box-flex:0;-webkit-flex:0 0 25%;-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%;text-align:center;padding:10px 5px}.list-avatar-page ion-note{font-size:12px;-webkit-align-self:flex-start;-ms-flex-item-align:start;align-self:flex-start;margin-top:14px}.popover-page .text-to-change div{margin:10px auto}.popover-page ion-col,.popover-page ion-row{padding:0}.popover-page .text-button{padding-left:0;text-align:center;min-height:20px;line-height:18px}.popover-page .text-button .item-inner{padding-right:0}.popover-page .text-smaller{font-size:12px}.popover-page .text-larger{font-size:16px}.popover-page .row-dots{text-align:center}.popover-page .row-dots .dot{height:30px;width:30px;border-radius:50%;margin:10px auto;position:relative}.popover-page .dot-white{background-color:#fff}.popover-page .dot-tan{background-color:#f9f1e4}.popover-page .dot-grey{background-color:#4c4b50}.popover-page .dot-black{background-color:#000}.popover-page .dot.selected{border-width:2px;border-color:#327eff}.popover-page .text-athelas{font-family:Athelas}.popover-page .text-charter{font-family:Charter}.popover-page .text-iowan{font-family:Iowan}.popover-page .text-palatino{font-family:Palatino}.popover-page .text-san-francisco{font-family:\"San Francisco\"}.popover-page .text-seravek{font-family:Seravek}.popover-page .text-times-new-roman{font-family:\"Times New Roman\"}.popover-page .dot,.popover-page .row-dots,.popover-page .text-smaller{border-width:.55px}.popover-page .text-smaller{border-right:1px solid #c8c7cc}.popover-page .row-dots{border-bottom:1px solid #c8c7cc}.popover-page .dot{border:1px solid #c8c7cc}.popover-page .text-smaller{border-right:1px solid #dedede}.popover-page .row-dots{border-bottom:1px solid #dedede}.popover-page .dot{border:1px solid #dedede}.popover-page .dot{border:2px solid #ccc}.tutorial-page .toolbar-background{background:#fff;border-color:transparent}.tutorial-page .slide-zoom{height:100%}.tutorial-page .slide-title{margin-top:2.8rem}.tutorial-page .slide-image{max-height:50%;max-width:60%;margin:18px 0}.tutorial-page b{font-weight:500}.tutorial-page p{padding:0 40px;font-size:14px;line-height:1.5;color:#60646b}.tutorial-page p b{color:#000}body.ios .tab-button[aria-selected=false]{color:#8c8c8c!important}body.ios .tab-button[aria-selected=true]{color:#f53d3d!important}.toolbar-buttons-page .footer-title{padding:0 1rem}.toolbar-buttons-page .footer-title .toolbar-title{font-size:1.6rem;text-align:left;padding:0}"
  },
  {
    "path": "content/dist/preview-app/www/build/main.js",
    "content": "webpackJsonp([0],{165:function(l,n){function u(l){return Promise.resolve().then(function(){throw new Error(\"Cannot find module '\"+l+\"'.\")})}u.keys=function(){return[]},u.resolve=u,l.exports=u,u.id=165},180:function(l,n){function u(l){return Promise.resolve().then(function(){throw new Error(\"Cannot find module '\"+l+\"'.\")})}u.keys=function(){return[]},u.resolve=u,l.exports=u,u.id=180},193:function(l,n,u){\"use strict\";function a(){return{overview:_,\"action-sheets\":_,alert:s,\"alert-confirm\":r,\"alert-prompt\":d,\"alert-radio\":b,\"alert-checkbox\":c,badges:m,buttons:g,\"block-buttons\":h,\"clear-buttons\":p,\"full-buttons\":Y,\"outline-buttons\":f,\"round-buttons\":z,\"buttons-in-components\":Z,\"button-sizes\":k,fabs:v,\"icon-buttons\":j,cards:w,\"card-header\":L,\"card-list\":x,\"card-image\":I,\"card-background\":C,\"advanced-cards\":P,\"card-advanced-map\":y,\"card-advanced-social\":P,checkbox:T,datetime:S,gestures:M,inputs:R,\"fixed-inline-labels\":D,\"floating-labels\":V,\"inline-labels\":N,\"inset-labels\":X,\"placeholder-labels\":O,\"stacked-labels\":E,icons:F,grid:B,lists:W,\"list-lines\":W,\"list-no-lines\":J,\"avatar-list\":U,\"icon-list\":G,\"inset-list\":$,\"list-dividers\":q,\"list-headers\":H,\"multiline-list\":K,\"sliding-list\":Q,\"thumbnail-list\":ll,loading:nl,menus:ul,modals:tl,navigation:sl,popovers:rl,radio:dl,range:bl,segment:gl,select:hl,searchbar:ml,toggle:Cl,slides:pl,tabs:fl,\"tabs-icon\":kl,\"tabs-icon-text\":yl,\"tabs-badges\":Yl,toast:Pl,toolbar:wl,\"toolbar-buttons\":Ll,\"toolbar-segment\":Bl,\"toolbar-searchbar\":Ml,\"toolbar-colors\":Sl}}function e(l){return a()[l]}function o(l,n,u){var a;return function(){var e=this,o=arguments,t=u&&!a;clearTimeout(a),a=setTimeout(function(){a=null,u||l.apply(e,o)},n),t&&l.apply(e,o)}}Object.defineProperty(n,\"__esModule\",{value:!0});var t=u(57),i=u(0),_=(u(3),u(32),function(){function l(l,n){this.platform=l,this.actionsheetCtrl=n}return l.prototype.openMenu=function(){this.actionsheetCtrl.create({title:\"Albums\",cssClass:\"action-sheets-basic-page\",buttons:[{text:\"Delete\",role:\"destructive\",icon:this.platform.is(\"ios\")?null:\"trash\",handler:function(){console.log(\"Delete clicked\")}},{text:\"Share\",icon:this.platform.is(\"ios\")?null:\"share\",handler:function(){console.log(\"Share clicked\")}},{text:\"Play\",icon:this.platform.is(\"ios\")?null:\"arrow-dropright-circle\",handler:function(){console.log(\"Play clicked\")}},{text:\"Favorite\",icon:this.platform.is(\"ios\")?null:\"heart-outline\",handler:function(){console.log(\"Favorite clicked\")}},{text:\"Cancel\",role:\"cancel\",icon:this.platform.is(\"ios\")?null:\"close\",handler:function(){console.log(\"Cancel clicked\")}}]}).present()},l}()),s=function(){function l(l){this.alerCtrl=l}return l.prototype.doAlert=function(){this.alerCtrl.create({title:\"New Friend!\",message:\"Your friend, Obi wan Kenobi, just approved your friend request!\",buttons:[\"Ok\"]}).present()},l}(),c=function(){function l(l){this.alertCtrl=l}return l.prototype.doCheckbox=function(){var l=this,n=this.alertCtrl.create();n.setTitle(\"Which planets have you visited?\"),n.addInput({type:\"checkbox\",label:\"Alderaan\",value:\"value1\",checked:!0}),n.addInput({type:\"checkbox\",label:\"Bespin\",value:\"value2\"}),n.addInput({type:\"checkbox\",label:\"Coruscant\",value:\"value3\"}),n.addInput({type:\"checkbox\",label:\"Endor\",value:\"value4\"}),n.addInput({type:\"checkbox\",label:\"Hoth\",value:\"value5\"}),n.addInput({type:\"checkbox\",label:\"Jakku\",value:\"value6\"}),n.addInput({type:\"checkbox\",label:\"Naboo\",value:\"value6\"}),n.addInput({type:\"checkbox\",label:\"Takodana\",value:\"value6\"}),n.addInput({type:\"checkbox\",label:\"Tatooine\",value:\"value6\"}),n.addButton(\"Cancel\"),n.addButton({text:\"Okay\",handler:function(n){console.log(\"Checkbox data:\",n),l.testCheckboxOpen=!1,l.testCheckboxResult=n}}),n.present().then(function(){l.testCheckboxOpen=!0})},l}(),r=function(){function l(l){this.alerCtrl=l}return l.prototype.doConfirm=function(){this.alerCtrl.create({title:\"Use this lightsaber?\",message:\"Do you agree to use this lightsaber to do good across the intergalactic galaxy?\",buttons:[{text:\"Disagree\",handler:function(){console.log(\"Disagree clicked\")}},{text:\"Agree\",handler:function(){console.log(\"Agree clicked\")}}]}).present()},l}(),d=function(){function l(l){this.alertCtrl=l}return l.prototype.doPrompt=function(){this.alertCtrl.create({title:\"Login\",message:\"Enter a name for this new album you're so keen on adding\",inputs:[{name:\"title\",placeholder:\"Title\"}],buttons:[{text:\"Cancel\",handler:function(l){console.log(\"Cancel clicked\")}},{text:\"Save\",handler:function(l){console.log(\"Saved clicked\")}}]}).present()},l}(),b=function(){function l(l){this.alerCtrl=l}return l.prototype.doRadio=function(){var l=this,n=this.alerCtrl.create();n.setTitle(\"Lightsaber color\"),n.addInput({type:\"radio\",label:\"Blue\",value:\"blue\",checked:!0}),n.addInput({type:\"radio\",label:\"Green\",value:\"green\"}),n.addInput({type:\"radio\",label:\"Red\",value:\"red\"}),n.addInput({type:\"radio\",label:\"Yellow\",value:\"yellow\"}),n.addInput({type:\"radio\",label:\"Purple\",value:\"purple\"}),n.addInput({type:\"radio\",label:\"White\",value:\"white\"}),n.addInput({type:\"radio\",label:\"Black\",value:\"black\"}),n.addButton(\"Cancel\"),n.addButton({text:\"Ok\",handler:function(n){console.log(\"Radio data:\",n),l.testRadioOpen=!1,l.testRadioResult=n}}),n.present().then(function(){l.testRadioOpen=!0})},l}(),m=function(){return function(){}}(),g=function(){return function(){}}(),h=function(){return function(){}}(),p=function(){return function(){}}(),Z=function(){return function(){}}(),Y=function(){return function(){}}(),j=function(){return function(){}}(),f=function(){return function(){}}(),z=function(){return function(){}}(),k=function(){return function(){}}(),v=function(){return function(){}}(),y=function(){return function(){}}(),P=function(){return function(){}}(),C=function(){return function(){}}(),w=function(){return function(){}}(),L=function(){return function(){}}(),I=function(){return function(){}}(),x=function(){return function(){}}(),T=function(){return function(){}}(),S=function(){return function(){this.event={month:\"1990-02-19\",timeStarts:\"07:43\",timeEnds:\"1990-02-20\"}}}(),M=function(){function l(){this.press=0,this.pan=0,this.swipe=0,this.tap=0}return l.prototype.pressEvent=function(l){this.press++},l.prototype.panEvent=function(l){this.pan++},l.prototype.swipeEvent=function(l){this.swipe++},l.prototype.tapEvent=function(l){this.tap++},l}(),B=function(){return function(){}}(),F=function(){return function(){}}(),A=u(24),R=function(){function l(l){this.alertCtrl=l,this.form=new A.g({firstName:new A.e(\"\",A.p.required),lastName:new A.e(\"\",A.p.required)})}return l.prototype.processForm=function(){var l=this.alertCtrl.create({title:\"Account Created\",message:\"Created Account for: \"+this.form.value.firstName+\" \"+this.form.value.lastName,buttons:[{text:\"Ok\"}]});\"VALID\"===this.form.status&&l.present()},l}(),V=function(){return function(){}}(),D=function(){return function(){}}(),N=function(){return function(){}}(),X=function(){return function(){}}(),O=function(){return function(){}}(),E=function(){return function(){}}(),U=function(){return function(){}}(),W=function(){function l(){this.items=[\"Pokémon Yellow\",\"Super Metroid\",\"Mega Man X\",\"The Legend of Zelda\",\"Pac-Man\",\"Super Mario World\",\"Street Fighter II\",\"Half Life\",\"Final Fantasy VII\",\"Star Fox\",\"Tetris\",\"Donkey Kong III\",\"GoldenEye 007\",\"Doom\",\"Fallout\",\"GTA\",\"Halo\"]}return l.prototype.itemSelected=function(l){console.log(\"Selected Item\",l)},l}(),q=function(){return function(){}}(),H=function(){return function(){}}(),G=function(){return function(){}}(),$=function(){function l(){this.items=[\"Pokémon Yellow\",\"Super Metroid\",\"Mega Man X\",\"The Legend of Zelda\",\"Pac-Man\",\"Super Mario World\",\"Street Fighter II\",\"Half Life\",\"Final Fantasy VII\",\"Star Fox\",\"Tetris\",\"Donkey Kong III\",\"GoldenEye 007\",\"Doom\",\"Fallout\",\"GTA\",\"Halo\"]}return l.prototype.itemSelected=function(l){console.log(\"Selected Item\",l)},l}(),K=function(){return function(){}}(),J=function(){function l(){this.items=[\"Pokémon Yellow\",\"Super Metroid\",\"Mega Man X\",\"The Legend of Zelda\",\"Pac-Man\",\"Super Mario World\",\"Street Fighter II\",\"Half Life\",\"Final Fantasy VII\",\"Star Fox\",\"Tetris\",\"Donkey Kong III\",\"GoldenEye 007\",\"Doom\",\"Fallout\",\"GTA\",\"Halo\"]}return l.prototype.itemSelected=function(l){console.log(\"Selected Item\",l)},l}(),Q=function(){return function(){}}(),ll=function(){return function(){}}(),nl=function(){function l(l){this.loadingCtrl=l}return l.prototype.presentLoading=function(){this.loadingCtrl.create({content:\"Please wait...\",duration:3e3,dismissOnPageChange:!0}).present()},l}(),ul=function(){return function(l,n){n.enable(!0)}}(),al=function(){return function(){}}(),el=function(){return function(){}}(),ol=function(){return function(){}}(),tl=function(){function l(l){this.modalCtrl=l}return l.prototype.openModal=function(l){this.modalCtrl.create(il,l).present()},l}(),il=function(){function l(l,n,u){this.platform=l,this.params=n,this.viewCtrl=u;this.character=[{name:\"Gollum\",quote:\"Sneaky little hobbitses!\",image:\"assets/img/avatar-gollum.jpg\",items:[{title:\"Race\",note:\"Hobbit\"},{title:\"Culture\",note:\"River Folk\"},{title:\"Alter Ego\",note:\"Smeagol\"}]},{name:\"Frodo\",quote:\"Go back, Sam! I'm going to Mordor alone!\",image:\"assets/img/avatar-frodo.jpg\",items:[{title:\"Race\",note:\"Hobbit\"},{title:\"Culture\",note:\"Shire Folk\"},{title:\"Weapon\",note:\"Sting\"}]},{name:\"Samwise Gamgee\",quote:\"What we need is a few good taters.\",image:\"assets/img/avatar-samwise.jpg\",items:[{title:\"Race\",note:\"Hobbit\"},{title:\"Culture\",note:\"Shire Folk\"},{title:\"Nickname\",note:\"Sam\"}]}][this.params.get(\"charNum\")]}return l.prototype.dismiss=function(){this.viewCtrl.dismiss()},l}(),_l=function(){return function(l){this.item=l.data.item}}(),sl=function(){function l(l){this.nav=l,this.items=[],this.items=[{title:\"Angular\",icon:\"angular\",description:\"A powerful Javascript framework for building single page apps. Angular is open source, and maintained by Google.\",color:\"#E63135\"},{title:\"CSS3\",icon:\"css3\",description:\"The latest version of cascading stylesheets - the styling language of the web!\",color:\"#0CA9EA\"},{title:\"HTML5\",icon:\"html5\",description:\"The latest version of the web's markup language.\",color:\"#F46529\"},{title:\"JavaScript\",icon:\"javascript\",description:\"One of the most popular programming languages on the Web!\",color:\"#FFD439\"},{title:\"Sass\",icon:\"sass\",description:\"Syntactically Awesome Stylesheets - a mature, stable, and powerful professional grade CSS extension.\",color:\"#CE6296\"},{title:\"NodeJS\",icon:\"nodejs\",description:\"An open-source, cross-platform runtime environment for developing server-side Web applications.\",color:\"#78BD43\"},{title:\"Python\",icon:\"python\",description:\"A clear and powerful object-oriented programming language!\",color:\"#3575AC\"},{title:\"Markdown\",icon:\"markdown\",description:\"A super simple way to add formatting like headers, bold, bulleted lists, and so on to plain text.\",color:\"#412159\"},{title:\"Tux\",icon:\"tux\",description:\"The official mascot of the Linux kernel!\",color:\"#000\"}]}return l.prototype.openNavDetailsPage=function(l){this.nav.push(_l,{item:l})},l}(),cl=function(){function l(l){this.navParams=l,this.colors={white:{bg:\"rgb(255, 255, 255)\",fg:\"rgb(0, 0, 0)\"},tan:{bg:\"rgb(249, 241, 228)\",fg:\"rgb(0, 0, 0)\"},grey:{bg:\"rgb(76, 75, 80)\",fg:\"rgb(255, 255, 255)\"},black:{bg:\"rgb(0, 0, 0)\",fg:\"rgb(255, 255, 255)\"}}}return l.prototype.ngOnInit=function(){this.navParams.data&&(this.contentEle=this.navParams.data.contentEle,this.textEle=this.navParams.data.textEle,this.background=this.getColorName(this.contentEle.style.backgroundColor),this.setFontFamily())},l.prototype.getColorName=function(l){var n=\"white\";if(!l)return\"white\";for(var u in this.colors)this.colors[u].bg==l&&(n=u);return n},l.prototype.setFontFamily=function(){this.textEle.style.fontFamily&&(this.fontFamily=this.textEle.style.fontFamily.replace(/'/g,\"\"))},l.prototype.changeBackground=function(l){this.background=l,this.contentEle.style.backgroundColor=this.colors[l].bg,this.textEle.style.color=this.colors[l].fg},l.prototype.changeFontSize=function(l){this.textEle.style.fontSize=l},l.prototype.changeFontFamily=function(){this.fontFamily&&(this.textEle.style.fontFamily=this.fontFamily)},l}(),rl=function(){function l(l){this.popoverCtrl=l}return l.prototype.presentPopover=function(l){this.popoverCtrl.create(cl,{contentEle:this.content.nativeElement,textEle:this.text.nativeElement}).present({ev:l})},l}(),dl=function(){function l(){this.langForm=new A.g({langs:new A.e({value:\"rust\",disabled:!1})})}return l.prototype.doSubmit=function(l){console.log(\"Submitting form\",this.langForm.value),l.preventDefault()},l}(),bl=function(){return function(){this.brightness=20,this.contrast=0,this.warmth=1300,this.structure={lower:33,upper:60},this.text=0}}(),ml=function(){function l(){this.initializeItems()}return l.prototype.initializeItems=function(){this.items=[\"Amsterdam\",\"Bogota\",\"Buenos Aires\",\"Cairo\",\"Dhaka\",\"Edinburgh\",\"Geneva\",\"Genoa\",\"Glasglow\",\"Hanoi\",\"Hong Kong\",\"Islamabad\",\"Istanbul\",\"Jakarta\",\"Kiel\",\"Kyoto\",\"Le Havre\",\"Lebanon\",\"Lhasa\",\"Lima\",\"London\",\"Los Angeles\",\"Madrid\",\"Manila\",\"New York\",\"Olympia\",\"Oslo\",\"Panama City\",\"Peking\",\"Philadelphia\",\"San Francisco\",\"Seoul\",\"Taipeh\",\"Tel Aviv\",\"Tokio\",\"Uelzen\",\"Washington\"]},l.prototype.getItems=function(l){this.initializeItems();var n=l.target.value;n&&\"\"!=n.trim()&&(this.items=this.items.filter(function(l){return l.toLowerCase().indexOf(n.toLowerCase())>-1}))},l}(),gl=function(){return function(l){this.pet=\"puppies\",this.isAndroid=!1,this.isAndroid=l.is(\"android\")}}(),hl=function(){function l(){this.gaming=\"n64\",this.gender=\"f\",this.musicAlertOpts={title:\"1994 Music\",subTitle:\"Select your favorite\"}}return l.prototype.stpSelect=function(){console.log(\"STP selected\")},l}(),pl=function(){return function(){this.slides=[{title:\"Welcome to the Docs!\",description:\"The <b>Ionic Component Documentation</b> showcases a number of useful components that are included out of the box with Ionic.\",image:\"assets/img/ica-slidebox-img-1.png\"},{title:\"What is Ionic?\",description:\"<b>Ionic Framework</b> is an open source SDK that enables developers to build high quality mobile apps with web technologies like HTML, CSS, and JavaScript.\",image:\"assets/img/ica-slidebox-img-2.png\"},{title:\"What is Ionic Cloud?\",description:\"The <b>Ionic Cloud</b> is a cloud platform for managing and scaling Ionic apps with integrated services like push notifications, native builds, user auth, and live updating.\",image:\"assets/img/ica-slidebox-img-3.png\"}]}}(),Zl=function(){return function(){}}(),Yl=function(){return function(){this.rootPage=Zl}}(),jl=function(){return function(l){this.isAndroid=!1,this.isAndroid=l.is(\"android\")}}(),fl=function(){return function(){this.rootPage=jl}}(),zl=function(){return function(l){this.isAndroid=!1,this.isAndroid=l.is(\"android\")}}(),kl=function(){return function(l){this.rootPage=zl,this.isAndroid=!1,this.isAndroid=l.is(\"android\")}}(),vl=function(){return function(l){this.isAndroid=!1,this.isAndroid=l.is(\"android\")}}(),yl=function(){return function(l){this.rootPage=vl,this.isAndroid=!1,this.isAndroid=l.is(\"android\")}}(),Pl=function(){function l(l){this.toastCtrl=l}return l.prototype.showToast=function(l){var n=this.toastCtrl.create({message:\"Mmmm, buttered toast\",duration:2e3,position:l});n.present(n)},l.prototype.showToastWithCloseButton=function(){this.toastCtrl.create({message:\"Your files were successfully saved\",showCloseButton:!0,closeButtonText:\"Ok\"}).present()},l.prototype.showLongToast=function(){this.toastCtrl.create({message:\"Lorem ipsum dolor sit amet, consectetur adipisicing elit. Ea voluptatibus quibusdam eum nihil optio, ullam accusamus magni, nobis suscipit reprehenderit, sequi quam amet impedit. Accusamus dolorem voluptates laborum dolor obcaecati.\",duration:2e3}).present()},l}(),Cl=function(){return function(){}}(),wl=function(){return function(){}}(),Ll=function(){return function(l){this.isAndroid=!1,this.isAndroid=l.is(\"android\")}}(),Il=function(){function l(l){this.nav=l}return l.prototype.goBack=function(){this.nav.setRoot(Sl)},l}(),xl=function(){function l(l){this.nav=l}return l.prototype.pushPage=function(){this.nav.push(Il)},l}(),Tl=function(){function l(l){this.nav=l}return l.prototype.pushPage=function(){this.nav.push(xl)},l}(),Sl=function(){function l(l){this.nav=l}return l.prototype.pushPage=function(){this.nav.push(Tl)},l}(),Ml=function(){function l(){this.initializeItems()}return l.prototype.initializeItems=function(){this.items=[\"Angular 1.x\",\"Angular 2\",\"ReactJS\",\"EmberJS\",\"Meteor\",\"Typescript\",\"Dart\",\"CoffeeScript\"]},l.prototype.getItems=function(l){this.initializeItems();var n=l.target.value;n&&\"\"!=n.trim()&&(this.items=this.items.filter(function(l){return l.toLowerCase().indexOf(n.toLowerCase())>-1}))},l}(),Bl=function(){return function(l){this.isAndroid=!1,this.selectedSegment=\"hot\",this.isAndroid=l.is(\"android\")}}(),Fl=function(){function l(l,n,u){this.platform=l,this.config=n,this.zone=u,this.isProductionMode=!1,this.isLab=!1,this.currentPlatform=\"ios\",this.currentPageIndex=1,this.pages=[{title:\"Home\",component:al},{title:\"Friends\",component:el},{title:\"Events\",component:ol}],this.rootPage=_}return l.prototype.ngAfterContentInit=function(){var l=this;this.isLab=\"/ionic-lab\"===window.parent.location.pathname,this.isLab&&this.config.set(\"statusbarPadding\",!1),\"true\"===this.platform.getQueryParam(\"production\")&&(this.isProductionMode=!0,this.platform.is(\"android\")?this.currentPlatform=\"android\":this.platform.is(\"windows\")&&(this.currentPlatform=\"windows\"),!0===function(){if(\"number\"==typeof window.top.innerWidth)return window.top.innerWidth>window.top.document.documentElement.clientWidth;var l,n=window.top.document.documentElement||window.top.document.body;void 0!==n.style&&(l=n.style.overflow),l=l||window.top.getComputedStyle(n,\"\").overflow;var u;void 0!==n.style&&(u=n.style.overflowY),u=u||window.top.getComputedStyle(n,\"\").overflowY;var a=n.scrollHeight>n.clientHeight,e=/^(visible|auto)$/.test(l)||/^(visible|auto)$/.test(u);return a&&e||\"scroll\"===l||\"scroll\"===u}()&&setTimeout(function(){var l=document.getElementsByTagName(\"body\")[0];l.className=l.className+\" has-scrollbar\"},500),window.parent.postMessage(this.currentPlatform,\"*\"),window.addEventListener(\"message\",function(n){l.zone.run(function(){if(n.data){var u;try{u=JSON.parse(n.data)}catch(l){console.error(l)}u.hash?(l.nextPage=e(u.hash.replace(\"#\",\"\")),\"menus\"!==u.hash&&(l.menu.close(),l.menu.enable(!1))):(l.currentPageIndex=1,l.nextPage=_),setTimeout(function(){o(l.content.setRoot(l.nextPage),60,!1)})}})}))},l.prototype.previousSection=function(){var l=this.currentPageIndex-1;l<0&&(l=0);var n=Object.keys(a())[l];this.content.setRoot(e(n),{},{animate:!1}),this.currentPageIndex=l},l.prototype.nextSection=function(){var l=this.currentPageIndex+1,n=Object.keys(a());l>=n.length&&(l=n.length-1);this.content.setRoot(e(n[l]),{},{animate:!1}),this.currentPageIndex=l},l.prototype.openPage=function(l){o(this.content.setRoot(l.component),60,!1)},l}(),Al=function(){return function(){}}(),Rl=function(){function l(){}return l.prototype.transform=function(l){return l=l.replace(\"/\",\"\").replace(\"/\",\": \").replace(\"-\",\" \"),l=this.capitalize(l)},l.prototype.capitalize=function(l){return l.toLowerCase().replace(/\\b\\w/g,function(l){return l.toUpperCase()})},l}(),Vl=function(){return function(){}}(),Dl=u(75),Nl=u(224),Xl=u(225),Ol=u(226),El=u(227),Ul=u(228),Wl=u(229),ql=u(230),Hl=u(231),Gl=u(232),$l=u(26),Kl=u(20),Jl=u(19),Ql=u(1),ln=u(23),nn=u(25),un=u(135),an=u(43),en=u(27),on=u(2),tn=u(15),_n=u(6),sn=u(28),cn=u(152),rn=u(69),dn=u(153),bn=u(54),mn=u(30),gn=u(233),hn=u(38),pn=u(104),Zn=u(9),Yn=u(5),jn=u(12),fn=u(4),zn=u(65),kn=u(11),vn=u(16),yn=u(13),Pn=u(10),Cn=u(14),wn=u(8),Ln=u(7),In=u(234),xn=u(79),Tn=u(37),Sn=u(31),Mn=i.X({encapsulation:2,styles:[],data:{}}),Bn=i.V(\"ng-component\",Fl,function(l){return i._22(0,[(l()(),i.Z(0,0,null,null,1,\"ng-component\",[],null,null,null,function(l){return i._22(0,[i._14(0,Rl,[]),i._18(402653184,1,{content:0}),i._18(402653184,2,{menu:0}),(l()(),i.U(16777216,null,null,1,null,function(l){return i._22(0,[(l()(),i.Z(0,0,null,null,0,\"img\",[[\"class\",\"statusbar-img statusbar-img-md\"],[\"src\",\"assets/img/android-statusbar.png\"]],null,null,null,null,null))],null,null)})),i.Y(4,16384,null,0,sn.i,[i.I,i.F],{ngIf:[0,\"ngIf\"]},null),(l()(),i._20(-1,null,[\"\\n\"])),(l()(),i.U(16777216,null,null,1,null,function(l){return i._22(0,[(l()(),i.Z(0,0,null,null,0,\"img\",[[\"class\",\"statusbar-img statusbar-img-ios\"],[\"src\",\"assets/img/ios-statusbar.png\"]],null,null,null,null,null))],null,null)})),i.Y(7,16384,null,0,sn.i,[i.I,i.F],{ngIf:[0,\"ngIf\"]},null),(l()(),i._20(-1,null,[\"\\n\"])),(l()(),i.U(16777216,null,null,1,null,function(l){return i._22(0,[(l()(),i.Z(0,0,null,null,0,\"img\",[[\"class\",\"statusbar-img statusbar-img-wp\"],[\"src\",\"assets/img/wp-statusbar.png\"]],null,null,null,null,null))],null,null)})),i.Y(10,16384,null,0,sn.i,[i.I,i.F],{ngIf:[0,\"ngIf\"]},null),(l()(),i._20(-1,null,[\"\\n\\n\"])),(l()(),i.Z(12,0,null,null,29,\"ion-menu\",[[\"role\",\"navigation\"]],null,null,null,gn.b,gn.a)),i._17(6144,null,hn.a,null,[pn.a]),i.Y(14,245760,[[2,4]],2,pn.a,[an.a,i.j,Ql.a,on.a,i.z,Zn.a,tn.l,_n.a,Yn.a],{content:[0,\"content\"]},null),i._18(335544320,3,{menuContent:0}),i._18(335544320,4,{menuNav:0}),(l()(),i._20(-1,0,[\"\\n  \"])),(l()(),i.Z(18,0,null,0,10,\"ion-header\",[],null,null,null,null,null)),i.Y(19,16384,null,0,jn.a,[Ql.a,i.j,i.z,[2,fn.a]],null,null),(l()(),i._20(-1,null,[\"\\n    \"])),(l()(),i.Z(21,0,null,null,6,\"ion-toolbar\",[[\"class\",\"toolbar\"],[\"color\",\"primary\"]],[[2,\"statusbar-padding\",null]],null,null,zn.b,zn.a)),i.Y(22,49152,null,0,kn.a,[Ql.a,i.j,i.z],{color:[0,\"color\"]},null),(l()(),i._20(-1,3,[\"\\n      \"])),(l()(),i.Z(24,0,null,3,2,\"ion-title\",[],null,null,null,vn.b,vn.a)),i.Y(25,49152,null,0,yn.a,[Ql.a,i.j,i.z,[2,kn.a],[2,Pn.a]],null,null),(l()(),i._20(-1,0,[\"Menu\"])),(l()(),i._20(-1,3,[\"\\n    \"])),(l()(),i._20(-1,null,[\"\\n  \"])),(l()(),i._20(-1,0,[\"\\n\\n  \"])),(l()(),i.Z(30,0,null,0,10,\"ion-content\",[],[[2,\"statusbar-padding\",null],[2,\"has-refresher\",null]],null,null,Cn.b,Cn.a)),i.Y(31,4374528,[[3,4]],0,wn.a,[Ql.a,on.a,_n.a,i.j,i.z,Yn.a,Zn.a,i.u,[2,fn.a],[2,Ln.a]],null,null),(l()(),i._20(-1,1,[\"\\n    \"])),(l()(),i._20(-1,1,[\"\\n    \"])),(l()(),i.U(16777216,null,1,1,null,function(l){return i._22(0,[(l()(),i.Z(0,0,null,null,14,\"ion-list\",[],null,null,null,null,null)),i.Y(1,16384,null,0,en.a,[Ql.a,i.j,i.z,on.a,tn.l,_n.a],null,null),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i.U(16777216,null,null,1,null,function(l){return i._22(0,[(l()(),i.Z(0,0,null,null,7,\"button\",[[\"class\",\"item item-block\"],[\"ion-item\",\"\"],[\"menuClose\",\"\"]],null,[[null,\"click\"]],function(l,n,u){var a=!0,e=l.component;return\"click\"===n&&(a=!1!==i._13(l,6).close()&&a),\"click\"===n&&(a=!1!==e.openPage(l.context.$implicit)&&a),a},$l.b,$l.a)),i.Y(1,1097728,null,3,Kl.a,[Jl.a,Ql.a,i.j,i.z,[2,ln.a]],null,null),i._18(335544320,5,{contentLabel:0}),i._18(603979776,6,{_buttons:1}),i._18(603979776,7,{_icons:1}),i.Y(5,16384,null,0,nn.a,[],null,null),i.Y(6,16384,null,0,un.a,[an.a],{menuClose:[0,\"menuClose\"]},null),(l()(),i._20(7,2,[\"\\n        \",\"\\n      \"]))],function(l,n){l(n,6,0,\"\")},function(l,n){l(n,7,0,n.context.$implicit.title)})})),i.Y(4,802816,null,0,sn.h,[i.I,i.F,i.p],{ngForOf:[0,\"ngForOf\"]},null),(l()(),i._20(-1,null,[\"\\n\\n      \"])),(l()(),i.Z(6,0,null,null,7,\"button\",[[\"class\",\"item item-block\"],[\"detail-none\",\"\"],[\"ion-item\",\"\"],[\"menuClose\",\"\"]],null,[[null,\"click\"]],function(l,n,u){var a=!0;return\"click\"===n&&(a=!1!==i._13(l,12).close()&&a),a},$l.b,$l.a)),i.Y(7,1097728,null,3,Kl.a,[Jl.a,Ql.a,i.j,i.z,[2,ln.a]],null,null),i._18(335544320,8,{contentLabel:0}),i._18(603979776,9,{_buttons:1}),i._18(603979776,10,{_icons:1}),i.Y(11,16384,null,0,nn.a,[],null,null),i.Y(12,16384,null,0,un.a,[an.a],{menuClose:[0,\"menuClose\"]},null),(l()(),i._20(-1,2,[\"\\n        Close Menu\\n      \"])),(l()(),i._20(-1,null,[\"\\n    \"]))],function(l,n){l(n,4,0,n.component.pages),l(n,12,0,\"\")},null)})),i.Y(35,16384,null,0,sn.i,[i.I,i.F],{ngIf:[0,\"ngIf\"]},null),(l()(),i._20(-1,1,[\"\\n\\n    \"])),(l()(),i._20(-1,1,[\"\\n    \"])),(l()(),i.U(16777216,null,1,1,null,function(l){return i._22(0,[(l()(),i.Z(0,0,null,null,5,\"ion-list\",[],null,null,null,null,null)),i.Y(1,16384,null,0,en.a,[Ql.a,i.j,i.z,on.a,tn.l,_n.a],null,null),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i.U(16777216,null,null,1,null,function(l){return i._22(0,[(l()(),i.Z(0,0,null,null,8,\"button\",[[\"class\",\"item item-block\"],[\"ion-item\",\"\"],[\"menuClose\",\"\"]],null,[[null,\"click\"]],function(l,n,u){var a=!0,e=l.component;return\"click\"===n&&(a=!1!==i._13(l,6).close()&&a),\"click\"===n&&(a=!1!==e.openPage(l.context.$implicit)&&a),a},$l.b,$l.a)),i.Y(1,1097728,null,3,Kl.a,[Jl.a,Ql.a,i.j,i.z,[2,ln.a]],null,null),i._18(335544320,11,{contentLabel:0}),i._18(603979776,12,{_buttons:1}),i._18(603979776,13,{_icons:1}),i.Y(5,16384,null,0,nn.a,[],null,null),i.Y(6,16384,null,0,un.a,[an.a],{menuClose:[0,\"menuClose\"]},null),(l()(),i._20(7,2,[\"\\n        \",\"\\n      \"])),i._16(8,1)],function(l,n){l(n,6,0,\"\")},function(l,n){l(n,7,0,i._21(n,7,0,l(n,8,0,i._13(n.parent.parent,0),n.context.$implicit.path)))})})),i.Y(4,802816,null,0,sn.h,[i.I,i.F,i.p],{ngForOf:[0,\"ngForOf\"]},null),(l()(),i._20(-1,null,[\"\\n    \"]))],function(l,n){l(n,4,0,n.component.routes)},null)})),i.Y(39,16384,null,0,sn.i,[i.I,i.F],{ngIf:[0,\"ngIf\"]},null),(l()(),i._20(-1,1,[\"\\n  \"])),(l()(),i._20(-1,0,[\"\\n\\n\"])),(l()(),i._20(-1,null,[\"\\n\\n\"])),(l()(),i.Z(43,0,null,null,2,\"ion-nav\",[],null,null,null,In.b,In.a)),i._17(6144,null,hn.a,null,[xn.a]),i.Y(45,4374528,[[1,4],[\"content\",4]],0,xn.a,[[2,fn.a],[2,Ln.a],Yn.a,Ql.a,on.a,i.j,i.u,i.z,i.i,tn.l,Tn.a,[2,Sn.a],_n.a,i.k],{root:[0,\"root\"]},null),(l()(),i._20(-1,null,[\"\\n\\n\"])),(l()(),i.U(16777216,null,null,1,null,function(l){return i._22(0,[(l()(),i.Z(0,0,null,null,27,\"div\",[],null,null,null,null,null)),(l()(),i._20(-1,null,[\"\\n  \"])),(l()(),i.Z(2,0,null,null,11,\"ion-fab\",[[\"left\",\"\"],[\"middle\",\"\"]],null,null,null,cn.b,cn.a)),i.Y(3,1228800,null,2,rn.a,[on.a],null,null),i._18(335544320,14,{_mainButton:0}),i._18(603979776,15,{_fabLists:1}),(l()(),i._20(-1,0,[\"\\n    \"])),(l()(),i.Z(7,0,null,0,5,\"button\",[[\"color\",\"light\"],[\"ion-fab\",\"\"]],null,[[null,\"click\"]],function(l,n,u){var a=!0;return\"click\"===n&&(a=!1!==l.component.previousSection()&&a),a},dn.b,dn.a)),i.Y(8,49152,[[14,4]],0,bn.a,[Ql.a,i.j,i.z],{color:[0,\"color\"]},null),(l()(),i._20(-1,0,[\"\\n      \"])),(l()(),i.Z(10,0,null,0,1,\"ion-icon\",[[\"name\",\"arrow-back\"],[\"role\",\"img\"]],[[2,\"hide\",null]],null,null,null,null)),i.Y(11,147456,null,0,mn.a,[Ql.a,i.j,i.z],{name:[0,\"name\"]},null),(l()(),i._20(-1,0,[\"\\n    \"])),(l()(),i._20(-1,0,[\"\\n  \"])),(l()(),i._20(-1,null,[\"\\n\\n  \"])),(l()(),i.Z(15,0,null,null,11,\"ion-fab\",[[\"middle\",\"\"],[\"right\",\"\"]],null,null,null,cn.b,cn.a)),i.Y(16,1228800,null,2,rn.a,[on.a],null,null),i._18(335544320,16,{_mainButton:0}),i._18(603979776,17,{_fabLists:1}),(l()(),i._20(-1,0,[\"\\n    \"])),(l()(),i.Z(20,0,null,0,5,\"button\",[[\"color\",\"light\"],[\"ion-fab\",\"\"]],null,[[null,\"click\"]],function(l,n,u){var a=!0;return\"click\"===n&&(a=!1!==l.component.nextSection()&&a),a},dn.b,dn.a)),i.Y(21,49152,[[16,4]],0,bn.a,[Ql.a,i.j,i.z],{color:[0,\"color\"]},null),(l()(),i._20(-1,0,[\"\\n      \"])),(l()(),i.Z(23,0,null,0,1,\"ion-icon\",[[\"name\",\"arrow-forward\"],[\"role\",\"img\"]],[[2,\"hide\",null]],null,null,null,null)),i.Y(24,147456,null,0,mn.a,[Ql.a,i.j,i.z],{name:[0,\"name\"]},null),(l()(),i._20(-1,0,[\"\\n    \"])),(l()(),i._20(-1,0,[\"\\n  \"])),(l()(),i._20(-1,null,[\"\\n\"]))],function(l,n){l(n,8,0,\"light\"),l(n,11,0,\"arrow-back\"),l(n,21,0,\"light\"),l(n,24,0,\"arrow-forward\")},function(l,n){l(n,10,0,i._13(n,11)._hidden),l(n,23,0,i._13(n,24)._hidden)})})),i.Y(48,16384,null,0,sn.i,[i.I,i.F],{ngIf:[0,\"ngIf\"]},null)],function(l,n){var u=n.component;l(n,4,0,!u.isLab),l(n,7,0,!u.isLab),l(n,10,0,!u.isLab),l(n,14,0,i._13(n,45)),l(n,22,0,\"primary\"),l(n,35,0,u.isProductionMode),l(n,39,0,!u.isProductionMode),l(n,45,0,u.rootPage),l(n,48,0,!u.isProductionMode)},function(l,n){l(n,21,0,i._13(n,22)._sbPadding),l(n,30,0,i._13(n,31).statusbarPadding,i._13(n,31)._hasRefresher)})},Mn)),i.Y(1,1097728,null,0,Fl,[on.a,Ql.a,i.u],null,null)],null,null)},{},{},[]),Fn=u(17),An=u(22),Rn=u(21),Vn=u(90),Dn=i.X({encapsulation:2,styles:[],data:{}}),Nn=i.V(\"ng-component\",_,function(l){return i._22(0,[(l()(),i.Z(0,0,null,null,1,\"ng-component\",[],null,null,null,function(l){return i._22(0,[(l()(),i._20(-1,null,[\"\\n\"])),(l()(),i.Z(1,0,null,null,10,\"ion-header\",[],null,null,null,null,null)),i.Y(2,16384,null,0,jn.a,[Ql.a,i.j,i.z,[2,fn.a]],null,null),(l()(),i._20(-1,null,[\"\\n  \"])),(l()(),i.Z(4,0,null,null,6,\"ion-navbar\",[[\"class\",\"toolbar\"]],[[8,\"hidden\",0],[2,\"statusbar-padding\",null]],null,null,Fn.b,Fn.a)),i.Y(5,49152,null,0,Pn.a,[Yn.a,[2,fn.a],[2,Ln.a],Ql.a,i.j,i.z],null,null),(l()(),i._20(-1,3,[\"\\n    \"])),(l()(),i.Z(7,0,null,3,2,\"ion-title\",[],null,null,null,vn.b,vn.a)),i.Y(8,49152,null,0,yn.a,[Ql.a,i.j,i.z,[2,kn.a],[2,Pn.a]],null,null),(l()(),i._20(-1,0,[\"Action Sheets\"])),(l()(),i._20(-1,3,[\"\\n  \"])),(l()(),i._20(-1,null,[\"\\n\"])),(l()(),i._20(-1,null,[\"\\n\\n\"])),(l()(),i.Z(13,0,null,null,6,\"ion-content\",[[\"class\",\"action-sheets-basic-page\"],[\"padding\",\"\"]],[[2,\"statusbar-padding\",null],[2,\"has-refresher\",null]],null,null,Cn.b,Cn.a)),i.Y(14,4374528,null,0,wn.a,[Ql.a,on.a,_n.a,i.j,i.z,Yn.a,Zn.a,i.u,[2,fn.a],[2,Ln.a]],null,null),(l()(),i._20(-1,1,[\"\\n  \"])),(l()(),i.Z(16,0,null,1,2,\"button\",[[\"block\",\"\"],[\"ion-button\",\"\"]],null,[[null,\"click\"]],function(l,n,u){var a=!0;return\"click\"===n&&(a=!1!==l.component.openMenu()&&a),a},An.b,An.a)),i.Y(17,1097728,null,0,Rn.a,[[8,\"\"],Ql.a,i.j,i.z],{block:[0,\"block\"]},null),(l()(),i._20(-1,0,[\"\\n    Show Action Sheet\\n  \"])),(l()(),i._20(-1,1,[\"\\n\"])),(l()(),i._20(-1,null,[\"\\n\"]))],function(l,n){l(n,17,0,\"\")},function(l,n){l(n,4,0,i._13(n,5)._hidden,i._13(n,5)._sbPadding),l(n,13,0,i._13(n,14).statusbarPadding,i._13(n,14)._hasRefresher)})},Dn)),i.Y(1,49152,null,0,_,[on.a,Vn.a],null,null)],null,null)},{},{},[]),Xn=u(48),On=i.X({encapsulation:2,styles:[],data:{}}),En=i.V(\"ng-component\",s,function(l){return i._22(0,[(l()(),i.Z(0,0,null,null,1,\"ng-component\",[],null,null,null,function(l){return i._22(0,[(l()(),i._20(-1,null,[\"\\n\"])),(l()(),i.Z(1,0,null,null,10,\"ion-header\",[],null,null,null,null,null)),i.Y(2,16384,null,0,jn.a,[Ql.a,i.j,i.z,[2,fn.a]],null,null),(l()(),i._20(-1,null,[\"\\n  \"])),(l()(),i.Z(4,0,null,null,6,\"ion-navbar\",[[\"class\",\"toolbar\"]],[[8,\"hidden\",0],[2,\"statusbar-padding\",null]],null,null,Fn.b,Fn.a)),i.Y(5,49152,null,0,Pn.a,[Yn.a,[2,fn.a],[2,Ln.a],Ql.a,i.j,i.z],null,null),(l()(),i._20(-1,3,[\"\\n    \"])),(l()(),i.Z(7,0,null,3,2,\"ion-title\",[],null,null,null,vn.b,vn.a)),i.Y(8,49152,null,0,yn.a,[Ql.a,i.j,i.z,[2,kn.a],[2,Pn.a]],null,null),(l()(),i._20(-1,0,[\"Alerts\"])),(l()(),i._20(-1,3,[\"\\n  \"])),(l()(),i._20(-1,null,[\"\\n\"])),(l()(),i._20(-1,null,[\"\\n\\n\"])),(l()(),i.Z(13,0,null,null,6,\"ion-content\",[[\"padding\",\"\"]],[[2,\"statusbar-padding\",null],[2,\"has-refresher\",null]],null,null,Cn.b,Cn.a)),i.Y(14,4374528,null,0,wn.a,[Ql.a,on.a,_n.a,i.j,i.z,Yn.a,Zn.a,i.u,[2,fn.a],[2,Ln.a]],null,null),(l()(),i._20(-1,1,[\"\\n  \"])),(l()(),i.Z(16,0,null,1,2,\"button\",[[\"block\",\"\"],[\"color\",\"dark\"],[\"ion-button\",\"\"]],null,[[null,\"click\"]],function(l,n,u){var a=!0;return\"click\"===n&&(a=!1!==l.component.doAlert()&&a),a},An.b,An.a)),i.Y(17,1097728,null,0,Rn.a,[[8,\"\"],Ql.a,i.j,i.z],{color:[0,\"color\"],block:[1,\"block\"]},null),(l()(),i._20(-1,0,[\"Show Basic Alert\"])),(l()(),i._20(-1,1,[\"\\n\"])),(l()(),i._20(-1,null,[\"\\n\"]))],function(l,n){l(n,17,0,\"dark\",\"\")},function(l,n){l(n,4,0,i._13(n,5)._hidden,i._13(n,5)._sbPadding),l(n,13,0,i._13(n,14).statusbarPadding,i._13(n,14)._hasRefresher)})},On)),i.Y(1,49152,null,0,s,[Xn.a],null,null)],null,null)},{},{},[]),Un=i.X({encapsulation:2,styles:[],data:{}}),Wn=i.V(\"ng-component\",c,function(l){return i._22(0,[(l()(),i.Z(0,0,null,null,1,\"ng-component\",[],null,null,null,function(l){return i._22(0,[(l()(),i._20(-1,null,[\"\\n\"])),(l()(),i.Z(1,0,null,null,10,\"ion-header\",[],null,null,null,null,null)),i.Y(2,16384,null,0,jn.a,[Ql.a,i.j,i.z,[2,fn.a]],null,null),(l()(),i._20(-1,null,[\"\\n  \"])),(l()(),i.Z(4,0,null,null,6,\"ion-navbar\",[[\"class\",\"toolbar\"]],[[8,\"hidden\",0],[2,\"statusbar-padding\",null]],null,null,Fn.b,Fn.a)),i.Y(5,49152,null,0,Pn.a,[Yn.a,[2,fn.a],[2,Ln.a],Ql.a,i.j,i.z],null,null),(l()(),i._20(-1,3,[\"\\n    \"])),(l()(),i.Z(7,0,null,3,2,\"ion-title\",[],null,null,null,vn.b,vn.a)),i.Y(8,49152,null,0,yn.a,[Ql.a,i.j,i.z,[2,kn.a],[2,Pn.a]],null,null),(l()(),i._20(-1,0,[\"Checkbox\"])),(l()(),i._20(-1,3,[\"\\n  \"])),(l()(),i._20(-1,null,[\"\\n\"])),(l()(),i._20(-1,null,[\"\\n\\n\"])),(l()(),i.Z(13,0,null,null,6,\"ion-content\",[[\"padding\",\"\"]],[[2,\"statusbar-padding\",null],[2,\"has-refresher\",null]],null,null,Cn.b,Cn.a)),i.Y(14,4374528,null,0,wn.a,[Ql.a,on.a,_n.a,i.j,i.z,Yn.a,Zn.a,i.u,[2,fn.a],[2,Ln.a]],null,null),(l()(),i._20(-1,1,[\"\\n  \"])),(l()(),i.Z(16,0,null,1,2,\"button\",[[\"block\",\"\"],[\"color\",\"danger\"],[\"ion-button\",\"\"]],null,[[null,\"click\"]],function(l,n,u){var a=!0;return\"click\"===n&&(a=!1!==l.component.doCheckbox()&&a),a},An.b,An.a)),i.Y(17,1097728,null,0,Rn.a,[[8,\"\"],Ql.a,i.j,i.z],{color:[0,\"color\"],block:[1,\"block\"]},null),(l()(),i._20(-1,0,[\"Show Checkbox Alert\"])),(l()(),i._20(-1,1,[\"\\n\"])),(l()(),i._20(-1,null,[\"\\n\"]))],function(l,n){l(n,17,0,\"danger\",\"\")},function(l,n){l(n,4,0,i._13(n,5)._hidden,i._13(n,5)._sbPadding),l(n,13,0,i._13(n,14).statusbarPadding,i._13(n,14)._hasRefresher)})},Un)),i.Y(1,49152,null,0,c,[Xn.a],null,null)],null,null)},{},{},[]),qn=i.X({encapsulation:2,styles:[],data:{}}),Hn=i.V(\"ng-component\",r,function(l){return i._22(0,[(l()(),i.Z(0,0,null,null,1,\"ng-component\",[],null,null,null,function(l){return i._22(0,[(l()(),i._20(-1,null,[\"\\n\"])),(l()(),i.Z(1,0,null,null,10,\"ion-header\",[],null,null,null,null,null)),i.Y(2,16384,null,0,jn.a,[Ql.a,i.j,i.z,[2,fn.a]],null,null),(l()(),i._20(-1,null,[\"\\n  \"])),(l()(),i.Z(4,0,null,null,6,\"ion-navbar\",[[\"class\",\"toolbar\"]],[[8,\"hidden\",0],[2,\"statusbar-padding\",null]],null,null,Fn.b,Fn.a)),i.Y(5,49152,null,0,Pn.a,[Yn.a,[2,fn.a],[2,Ln.a],Ql.a,i.j,i.z],null,null),(l()(),i._20(-1,3,[\"\\n    \"])),(l()(),i.Z(7,0,null,3,2,\"ion-title\",[],null,null,null,vn.b,vn.a)),i.Y(8,49152,null,0,yn.a,[Ql.a,i.j,i.z,[2,kn.a],[2,Pn.a]],null,null),(l()(),i._20(-1,0,[\"Confirm\"])),(l()(),i._20(-1,3,[\"\\n  \"])),(l()(),i._20(-1,null,[\"\\n\"])),(l()(),i._20(-1,null,[\"\\n\\n\"])),(l()(),i.Z(13,0,null,null,6,\"ion-content\",[[\"padding\",\"\"]],[[2,\"statusbar-padding\",null],[2,\"has-refresher\",null]],null,null,Cn.b,Cn.a)),i.Y(14,4374528,null,0,wn.a,[Ql.a,on.a,_n.a,i.j,i.z,Yn.a,Zn.a,i.u,[2,fn.a],[2,Ln.a]],null,null),(l()(),i._20(-1,1,[\"\\n  \"])),(l()(),i.Z(16,0,null,1,2,\"button\",[[\"block\",\"\"],[\"color\",\"primary\"],[\"ion-button\",\"\"]],null,[[null,\"click\"]],function(l,n,u){var a=!0;return\"click\"===n&&(a=!1!==l.component.doConfirm()&&a),a},An.b,An.a)),i.Y(17,1097728,null,0,Rn.a,[[8,\"\"],Ql.a,i.j,i.z],{color:[0,\"color\"],block:[1,\"block\"]},null),(l()(),i._20(-1,0,[\"Show Confirm Alert\"])),(l()(),i._20(-1,1,[\"\\n\"])),(l()(),i._20(-1,null,[\"\\n\"]))],function(l,n){l(n,17,0,\"primary\",\"\")},function(l,n){l(n,4,0,i._13(n,5)._hidden,i._13(n,5)._sbPadding),l(n,13,0,i._13(n,14).statusbarPadding,i._13(n,14)._hasRefresher)})},qn)),i.Y(1,49152,null,0,r,[Xn.a],null,null)],null,null)},{},{},[]),Gn=i.X({encapsulation:2,styles:[],data:{}}),$n=i.V(\"ng-component\",d,function(l){return i._22(0,[(l()(),i.Z(0,0,null,null,1,\"ng-component\",[],null,null,null,function(l){return i._22(0,[(l()(),i._20(-1,null,[\"\\n\"])),(l()(),i.Z(1,0,null,null,10,\"ion-header\",[],null,null,null,null,null)),i.Y(2,16384,null,0,jn.a,[Ql.a,i.j,i.z,[2,fn.a]],null,null),(l()(),i._20(-1,null,[\"\\n  \"])),(l()(),i.Z(4,0,null,null,6,\"ion-navbar\",[[\"class\",\"toolbar\"]],[[8,\"hidden\",0],[2,\"statusbar-padding\",null]],null,null,Fn.b,Fn.a)),i.Y(5,49152,null,0,Pn.a,[Yn.a,[2,fn.a],[2,Ln.a],Ql.a,i.j,i.z],null,null),(l()(),i._20(-1,3,[\"\\n    \"])),(l()(),i.Z(7,0,null,3,2,\"ion-title\",[],null,null,null,vn.b,vn.a)),i.Y(8,49152,null,0,yn.a,[Ql.a,i.j,i.z,[2,kn.a],[2,Pn.a]],null,null),(l()(),i._20(-1,0,[\"Prompt\"])),(l()(),i._20(-1,3,[\"\\n  \"])),(l()(),i._20(-1,null,[\"\\n\"])),(l()(),i._20(-1,null,[\"\\n\\n\"])),(l()(),i.Z(13,0,null,null,6,\"ion-content\",[[\"padding\",\"\"]],[[2,\"statusbar-padding\",null],[2,\"has-refresher\",null]],null,null,Cn.b,Cn.a)),i.Y(14,4374528,null,0,wn.a,[Ql.a,on.a,_n.a,i.j,i.z,Yn.a,Zn.a,i.u,[2,fn.a],[2,Ln.a]],null,null),(l()(),i._20(-1,1,[\"\\n  \"])),(l()(),i.Z(16,0,null,1,2,\"button\",[[\"block\",\"\"],[\"color\",\"secondary\"],[\"ion-button\",\"\"]],null,[[null,\"click\"]],function(l,n,u){var a=!0;return\"click\"===n&&(a=!1!==l.component.doPrompt()&&a),a},An.b,An.a)),i.Y(17,1097728,null,0,Rn.a,[[8,\"\"],Ql.a,i.j,i.z],{color:[0,\"color\"],block:[1,\"block\"]},null),(l()(),i._20(-1,0,[\"Show Prompt Alert\"])),(l()(),i._20(-1,1,[\"\\n\"])),(l()(),i._20(-1,null,[\"\\n\"]))],function(l,n){l(n,17,0,\"secondary\",\"\")},function(l,n){l(n,4,0,i._13(n,5)._hidden,i._13(n,5)._sbPadding),l(n,13,0,i._13(n,14).statusbarPadding,i._13(n,14)._hasRefresher)})},Gn)),i.Y(1,49152,null,0,d,[Xn.a],null,null)],null,null)},{},{},[]),Kn=i.X({encapsulation:2,styles:[],data:{}}),Jn=i.V(\"ng-component\",b,function(l){return i._22(0,[(l()(),i.Z(0,0,null,null,1,\"ng-component\",[],null,null,null,function(l){return i._22(0,[(l()(),i._20(-1,null,[\"\\n\"])),(l()(),i.Z(1,0,null,null,10,\"ion-header\",[],null,null,null,null,null)),i.Y(2,16384,null,0,jn.a,[Ql.a,i.j,i.z,[2,fn.a]],null,null),(l()(),i._20(-1,null,[\"\\n  \"])),(l()(),i.Z(4,0,null,null,6,\"ion-navbar\",[[\"class\",\"toolbar\"]],[[8,\"hidden\",0],[2,\"statusbar-padding\",null]],null,null,Fn.b,Fn.a)),i.Y(5,49152,null,0,Pn.a,[Yn.a,[2,fn.a],[2,Ln.a],Ql.a,i.j,i.z],null,null),(l()(),i._20(-1,3,[\"\\n    \"])),(l()(),i.Z(7,0,null,3,2,\"ion-title\",[],null,null,null,vn.b,vn.a)),i.Y(8,49152,null,0,yn.a,[Ql.a,i.j,i.z,[2,kn.a],[2,Pn.a]],null,null),(l()(),i._20(-1,0,[\"Radio\"])),(l()(),i._20(-1,3,[\"\\n  \"])),(l()(),i._20(-1,null,[\"\\n\"])),(l()(),i._20(-1,null,[\"\\n\\n\"])),(l()(),i.Z(13,0,null,null,6,\"ion-content\",[[\"padding\",\"\"]],[[2,\"statusbar-padding\",null],[2,\"has-refresher\",null]],null,null,Cn.b,Cn.a)),i.Y(14,4374528,null,0,wn.a,[Ql.a,on.a,_n.a,i.j,i.z,Yn.a,Zn.a,i.u,[2,fn.a],[2,Ln.a]],null,null),(l()(),i._20(-1,1,[\"\\n  \"])),(l()(),i.Z(16,0,null,1,2,\"button\",[[\"block\",\"\"],[\"ion-button\",\"\"],[\"light\",\"\"]],null,[[null,\"click\"]],function(l,n,u){var a=!0;return\"click\"===n&&(a=!1!==l.component.doRadio()&&a),a},An.b,An.a)),i.Y(17,1097728,null,0,Rn.a,[[8,\"\"],Ql.a,i.j,i.z],{block:[0,\"block\"]},null),(l()(),i._20(-1,0,[\"Show Radio Alert\"])),(l()(),i._20(-1,1,[\"\\n\"])),(l()(),i._20(-1,null,[\"\\n\"]))],function(l,n){l(n,17,0,\"\")},function(l,n){l(n,4,0,i._13(n,5)._hidden,i._13(n,5)._sbPadding),l(n,13,0,i._13(n,14).statusbarPadding,i._13(n,14)._hasRefresher)})},Kn)),i.Y(1,49152,null,0,b,[Xn.a],null,null)],null,null)},{},{},[]),Qn=u(39),lu=u(52),nu=u(94),uu=u(92),au=i.X({encapsulation:2,styles:[],data:{}}),eu=i.V(\"ng-component\",m,function(l){return i._22(0,[(l()(),i.Z(0,0,null,null,1,\"ng-component\",[],null,null,null,function(l){return i._22(0,[(l()(),i._20(-1,null,[\"\\n\"])),(l()(),i.Z(1,0,null,null,10,\"ion-header\",[],null,null,null,null,null)),i.Y(2,16384,null,0,jn.a,[Ql.a,i.j,i.z,[2,fn.a]],null,null),(l()(),i._20(-1,null,[\"\\n  \"])),(l()(),i.Z(4,0,null,null,6,\"ion-navbar\",[[\"class\",\"toolbar\"]],[[8,\"hidden\",0],[2,\"statusbar-padding\",null]],null,null,Fn.b,Fn.a)),i.Y(5,49152,null,0,Pn.a,[Yn.a,[2,fn.a],[2,Ln.a],Ql.a,i.j,i.z],null,null),(l()(),i._20(-1,3,[\"\\n    \"])),(l()(),i.Z(7,0,null,3,2,\"ion-title\",[],null,null,null,vn.b,vn.a)),i.Y(8,49152,null,0,yn.a,[Ql.a,i.j,i.z,[2,kn.a],[2,Pn.a]],null,null),(l()(),i._20(-1,0,[\"Badges\"])),(l()(),i._20(-1,3,[\"\\n  \"])),(l()(),i._20(-1,null,[\"\\n\"])),(l()(),i._20(-1,null,[\"\\n\\n\"])),(l()(),i.Z(13,0,null,null,49,\"ion-content\",[],[[2,\"statusbar-padding\",null],[2,\"has-refresher\",null]],null,null,Cn.b,Cn.a)),i.Y(14,4374528,null,0,wn.a,[Ql.a,on.a,_n.a,i.j,i.z,Yn.a,Zn.a,i.u,[2,fn.a],[2,Ln.a]],null,null),(l()(),i._20(-1,1,[\"\\n\\n  \"])),(l()(),i.Z(16,0,null,1,45,\"ion-card\",[],null,null,null,null,null)),i.Y(17,16384,null,0,Qn.a,[Ql.a,i.j,i.z],null,null),(l()(),i._20(-1,null,[\"\\n\\n    \"])),(l()(),i.Z(19,0,null,null,0,\"img\",[[\"src\",\"assets/img/bjork-live.jpg\"]],null,null,null,null,null)),(l()(),i._20(-1,null,[\"\\n\\n    \"])),(l()(),i.Z(21,0,null,null,9,\"ion-card-content\",[],null,null,null,null,null)),i.Y(22,16384,null,0,lu.a,[Ql.a,i.j,i.z],null,null),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i.Z(24,0,null,null,2,\"ion-card-title\",[],null,null,null,null,null)),i.Y(25,16384,null,0,nu.a,[Ql.a,i.j,i.z],null,null),(l()(),i._20(-1,null,[\"\\n        Björk\\n      \"])),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i.Z(28,0,null,null,1,\"p\",[],null,null,null,null,null)),(l()(),i._20(-1,null,[\"\\n        Björk first came to prominence as one of the lead vocalists of the avant pop Icelandic sextet the Sugarcubes, but when...\\n      \"])),(l()(),i._20(-1,null,[\"\\n    \"])),(l()(),i._20(-1,null,[\"\\n\\n    \"])),(l()(),i.Z(32,0,null,null,13,\"ion-item\",[[\"class\",\"item item-block\"]],null,null,null,$l.b,$l.a)),i.Y(33,1097728,null,3,Kl.a,[Jl.a,Ql.a,i.j,i.z,[2,ln.a]],null,null),i._18(335544320,1,{contentLabel:0}),i._18(603979776,2,{_buttons:1}),i._18(603979776,3,{_icons:1}),i.Y(37,16384,null,0,nn.a,[],null,null),(l()(),i._20(-1,2,[\"\\n      \"])),(l()(),i.Z(39,0,null,0,1,\"ion-icon\",[[\"item-start\",\"\"],[\"name\",\"musical-notes\"],[\"role\",\"img\"],[\"style\",\"color: #d03e84\"]],[[2,\"hide\",null]],null,null,null,null)),i.Y(40,147456,[[3,4]],0,mn.a,[Ql.a,i.j,i.z],{name:[0,\"name\"]},null),(l()(),i._20(-1,2,[\"\\n      Albums\\n      \"])),(l()(),i.Z(42,0,null,4,2,\"ion-badge\",[[\"item-end\",\"\"]],null,null,null,null,null)),i.Y(43,16384,null,0,uu.a,[Ql.a,i.j,i.z],null,null),(l()(),i._20(-1,null,[\"9\"])),(l()(),i._20(-1,2,[\"\\n    \"])),(l()(),i._20(-1,null,[\"\\n\\n    \"])),(l()(),i.Z(47,0,null,null,13,\"ion-item\",[[\"class\",\"item item-block\"]],null,null,null,$l.b,$l.a)),i.Y(48,1097728,null,3,Kl.a,[Jl.a,Ql.a,i.j,i.z,[2,ln.a]],null,null),i._18(335544320,4,{contentLabel:0}),i._18(603979776,5,{_buttons:1}),i._18(603979776,6,{_icons:1}),i.Y(52,16384,null,0,nn.a,[],null,null),(l()(),i._20(-1,2,[\"\\n      \"])),(l()(),i.Z(54,0,null,0,1,\"ion-icon\",[[\"item-start\",\"\"],[\"name\",\"logo-twitter\"],[\"role\",\"img\"],[\"style\",\"color: #55acee\"]],[[2,\"hide\",null]],null,null,null,null)),i.Y(55,147456,[[6,4]],0,mn.a,[Ql.a,i.j,i.z],{name:[0,\"name\"]},null),(l()(),i._20(-1,2,[\"\\n      Followers\\n      \"])),(l()(),i.Z(57,0,null,4,2,\"ion-badge\",[[\"item-end\",\"\"]],null,null,null,null,null)),i.Y(58,16384,null,0,uu.a,[Ql.a,i.j,i.z],null,null),(l()(),i._20(-1,null,[\"260k\"])),(l()(),i._20(-1,2,[\"\\n    \"])),(l()(),i._20(-1,null,[\"\\n\\n  \"])),(l()(),i._20(-1,1,[\"\\n\\n\"])),(l()(),i._20(-1,null,[\"\\n\"]))],function(l,n){l(n,40,0,\"musical-notes\"),l(n,55,0,\"logo-twitter\")},function(l,n){l(n,4,0,i._13(n,5)._hidden,i._13(n,5)._sbPadding),l(n,13,0,i._13(n,14).statusbarPadding,i._13(n,14)._hasRefresher),l(n,39,0,i._13(n,40)._hidden),l(n,54,0,i._13(n,55)._hidden)})},au)),i.Y(1,49152,null,0,m,[],null,null)],null,null)},{},{},[]),ou=i.X({encapsulation:2,styles:[],data:{}}),tu=i.V(\"ng-component\",g,function(l){return i._22(0,[(l()(),i.Z(0,0,null,null,1,\"ng-component\",[],null,null,null,function(l){return i._22(0,[(l()(),i._20(-1,null,[\"\\n\"])),(l()(),i.Z(1,0,null,null,10,\"ion-header\",[],null,null,null,null,null)),i.Y(2,16384,null,0,jn.a,[Ql.a,i.j,i.z,[2,fn.a]],null,null),(l()(),i._20(-1,null,[\"\\n  \"])),(l()(),i.Z(4,0,null,null,6,\"ion-navbar\",[[\"class\",\"toolbar\"]],[[8,\"hidden\",0],[2,\"statusbar-padding\",null]],null,null,Fn.b,Fn.a)),i.Y(5,49152,null,0,Pn.a,[Yn.a,[2,fn.a],[2,Ln.a],Ql.a,i.j,i.z],null,null),(l()(),i._20(-1,3,[\"\\n    \"])),(l()(),i.Z(7,0,null,3,2,\"ion-title\",[],null,null,null,vn.b,vn.a)),i.Y(8,49152,null,0,yn.a,[Ql.a,i.j,i.z,[2,kn.a],[2,Pn.a]],null,null),(l()(),i._20(-1,0,[\"Buttons\"])),(l()(),i._20(-1,3,[\"\\n  \"])),(l()(),i._20(-1,null,[\"\\n\"])),(l()(),i._20(-1,null,[\"\\n\\n\"])),(l()(),i.Z(13,0,null,null,37,\"ion-content\",[[\"padding\",\"\"]],[[2,\"statusbar-padding\",null],[2,\"has-refresher\",null]],null,null,Cn.b,Cn.a)),i.Y(14,4374528,null,0,wn.a,[Ql.a,on.a,_n.a,i.j,i.z,Yn.a,Zn.a,i.u,[2,fn.a],[2,Ln.a]],null,null),(l()(),i._20(-1,1,[\"\\n  \"])),(l()(),i.Z(16,0,null,1,5,\"p\",[],null,null,null,null,null)),(l()(),i._20(-1,null,[\"\\n    \"])),(l()(),i.Z(18,0,null,null,2,\"button\",[[\"color\",\"light\"],[\"ion-button\",\"\"]],null,null,null,An.b,An.a)),i.Y(19,1097728,null,0,Rn.a,[[8,\"\"],Ql.a,i.j,i.z],{color:[0,\"color\"]},null),(l()(),i._20(-1,0,[\"Light\"])),(l()(),i._20(-1,null,[\"\\n  \"])),(l()(),i._20(-1,1,[\"\\n\\n  \"])),(l()(),i.Z(23,0,null,1,5,\"p\",[],null,null,null,null,null)),(l()(),i._20(-1,null,[\"\\n    \"])),(l()(),i.Z(25,0,null,null,2,\"button\",[[\"ion-button\",\"\"]],null,null,null,An.b,An.a)),i.Y(26,1097728,null,0,Rn.a,[[8,\"\"],Ql.a,i.j,i.z],null,null),(l()(),i._20(-1,0,[\"Default\"])),(l()(),i._20(-1,null,[\"\\n  \"])),(l()(),i._20(-1,1,[\"\\n\\n  \"])),(l()(),i.Z(30,0,null,1,5,\"p\",[],null,null,null,null,null)),(l()(),i._20(-1,null,[\"\\n    \"])),(l()(),i.Z(32,0,null,null,2,\"button\",[[\"color\",\"secondary\"],[\"ion-button\",\"\"]],null,null,null,An.b,An.a)),i.Y(33,1097728,null,0,Rn.a,[[8,\"\"],Ql.a,i.j,i.z],{color:[0,\"color\"]},null),(l()(),i._20(-1,0,[\"Secondary\"])),(l()(),i._20(-1,null,[\"\\n  \"])),(l()(),i._20(-1,1,[\"\\n\\n  \"])),(l()(),i.Z(37,0,null,1,5,\"p\",[],null,null,null,null,null)),(l()(),i._20(-1,null,[\"\\n    \"])),(l()(),i.Z(39,0,null,null,2,\"button\",[[\"color\",\"danger\"],[\"ion-button\",\"\"]],null,null,null,An.b,An.a)),i.Y(40,1097728,null,0,Rn.a,[[8,\"\"],Ql.a,i.j,i.z],{color:[0,\"color\"]},null),(l()(),i._20(-1,0,[\"Danger\"])),(l()(),i._20(-1,null,[\"\\n  \"])),(l()(),i._20(-1,1,[\"\\n\\n  \"])),(l()(),i.Z(44,0,null,1,5,\"p\",[],null,null,null,null,null)),(l()(),i._20(-1,null,[\"\\n    \"])),(l()(),i.Z(46,0,null,null,2,\"button\",[[\"color\",\"dark\"],[\"ion-button\",\"\"]],null,null,null,An.b,An.a)),i.Y(47,1097728,null,0,Rn.a,[[8,\"\"],Ql.a,i.j,i.z],{color:[0,\"color\"]},null),(l()(),i._20(-1,0,[\"Dark\"])),(l()(),i._20(-1,null,[\"\\n  \"])),(l()(),i._20(-1,1,[\"\\n\"])),(l()(),i._20(-1,null,[\"\\n\"]))],function(l,n){l(n,19,0,\"light\"),l(n,33,0,\"secondary\"),l(n,40,0,\"danger\"),l(n,47,0,\"dark\")},function(l,n){l(n,4,0,i._13(n,5)._hidden,i._13(n,5)._sbPadding),l(n,13,0,i._13(n,14).statusbarPadding,i._13(n,14)._hasRefresher)})},ou)),i.Y(1,49152,null,0,g,[],null,null)],null,null)},{},{},[]),iu=i.X({encapsulation:2,styles:[],data:{}}),_u=i.V(\"ng-component\",h,function(l){return i._22(0,[(l()(),i.Z(0,0,null,null,1,\"ng-component\",[],null,null,null,function(l){return i._22(0,[(l()(),i._20(-1,null,[\"\\n\"])),(l()(),i.Z(1,0,null,null,10,\"ion-header\",[],null,null,null,null,null)),i.Y(2,16384,null,0,jn.a,[Ql.a,i.j,i.z,[2,fn.a]],null,null),(l()(),i._20(-1,null,[\"\\n  \"])),(l()(),i.Z(4,0,null,null,6,\"ion-navbar\",[[\"class\",\"toolbar\"]],[[8,\"hidden\",0],[2,\"statusbar-padding\",null]],null,null,Fn.b,Fn.a)),i.Y(5,49152,null,0,Pn.a,[Yn.a,[2,fn.a],[2,Ln.a],Ql.a,i.j,i.z],null,null),(l()(),i._20(-1,3,[\"\\n    \"])),(l()(),i.Z(7,0,null,3,2,\"ion-title\",[],null,null,null,vn.b,vn.a)),i.Y(8,49152,null,0,yn.a,[Ql.a,i.j,i.z,[2,kn.a],[2,Pn.a]],null,null),(l()(),i._20(-1,0,[\"Block Buttons\"])),(l()(),i._20(-1,3,[\"\\n  \"])),(l()(),i._20(-1,null,[\"\\n\"])),(l()(),i._20(-1,null,[\"\\n\\n\"])),(l()(),i.Z(13,0,null,null,37,\"ion-content\",[[\"padding\",\"\"]],[[2,\"statusbar-padding\",null],[2,\"has-refresher\",null]],null,null,Cn.b,Cn.a)),i.Y(14,4374528,null,0,wn.a,[Ql.a,on.a,_n.a,i.j,i.z,Yn.a,Zn.a,i.u,[2,fn.a],[2,Ln.a]],null,null),(l()(),i._20(-1,1,[\"\\n  \"])),(l()(),i.Z(16,0,null,1,5,\"p\",[],null,null,null,null,null)),(l()(),i._20(-1,null,[\"\\n    \"])),(l()(),i.Z(18,0,null,null,2,\"button\",[[\"block\",\"\"],[\"color\",\"light\"],[\"ion-button\",\"\"]],null,null,null,An.b,An.a)),i.Y(19,1097728,null,0,Rn.a,[[8,\"\"],Ql.a,i.j,i.z],{color:[0,\"color\"],block:[1,\"block\"]},null),(l()(),i._20(-1,0,[\"Light\"])),(l()(),i._20(-1,null,[\"\\n  \"])),(l()(),i._20(-1,1,[\"\\n\\n  \"])),(l()(),i.Z(23,0,null,1,5,\"p\",[],null,null,null,null,null)),(l()(),i._20(-1,null,[\"\\n    \"])),(l()(),i.Z(25,0,null,null,2,\"button\",[[\"block\",\"\"],[\"ion-button\",\"\"]],null,null,null,An.b,An.a)),i.Y(26,1097728,null,0,Rn.a,[[8,\"\"],Ql.a,i.j,i.z],{block:[0,\"block\"]},null),(l()(),i._20(-1,0,[\"Default\"])),(l()(),i._20(-1,null,[\"\\n  \"])),(l()(),i._20(-1,1,[\"\\n\\n  \"])),(l()(),i.Z(30,0,null,1,5,\"p\",[],null,null,null,null,null)),(l()(),i._20(-1,null,[\"\\n    \"])),(l()(),i.Z(32,0,null,null,2,\"button\",[[\"block\",\"\"],[\"color\",\"secondary\"],[\"ion-button\",\"\"]],null,null,null,An.b,An.a)),i.Y(33,1097728,null,0,Rn.a,[[8,\"\"],Ql.a,i.j,i.z],{color:[0,\"color\"],block:[1,\"block\"]},null),(l()(),i._20(-1,0,[\"Secondary\"])),(l()(),i._20(-1,null,[\"\\n  \"])),(l()(),i._20(-1,1,[\"\\n\\n  \"])),(l()(),i.Z(37,0,null,1,5,\"p\",[],null,null,null,null,null)),(l()(),i._20(-1,null,[\"\\n    \"])),(l()(),i.Z(39,0,null,null,2,\"button\",[[\"block\",\"\"],[\"color\",\"danger\"],[\"ion-button\",\"\"]],null,null,null,An.b,An.a)),i.Y(40,1097728,null,0,Rn.a,[[8,\"\"],Ql.a,i.j,i.z],{color:[0,\"color\"],block:[1,\"block\"]},null),(l()(),i._20(-1,0,[\"Danger\"])),(l()(),i._20(-1,null,[\"\\n  \"])),(l()(),i._20(-1,1,[\"\\n\\n  \"])),(l()(),i.Z(44,0,null,1,5,\"p\",[],null,null,null,null,null)),(l()(),i._20(-1,null,[\"\\n    \"])),(l()(),i.Z(46,0,null,null,2,\"button\",[[\"block\",\"\"],[\"color\",\"dark\"],[\"ion-button\",\"\"]],null,null,null,An.b,An.a)),i.Y(47,1097728,null,0,Rn.a,[[8,\"\"],Ql.a,i.j,i.z],{color:[0,\"color\"],block:[1,\"block\"]},null),(l()(),i._20(-1,0,[\"Dark\"])),(l()(),i._20(-1,null,[\"\\n  \"])),(l()(),i._20(-1,1,[\"\\n\"])),(l()(),i._20(-1,null,[\"\\n\"]))],function(l,n){l(n,19,0,\"light\",\"\"),l(n,26,0,\"\"),l(n,33,0,\"secondary\",\"\"),l(n,40,0,\"danger\",\"\"),l(n,47,0,\"dark\",\"\")},function(l,n){l(n,4,0,i._13(n,5)._hidden,i._13(n,5)._sbPadding),l(n,13,0,i._13(n,14).statusbarPadding,i._13(n,14)._hasRefresher)})},iu)),i.Y(1,49152,null,0,h,[],null,null)],null,null)},{},{},[]),su=i.X({encapsulation:2,styles:[],data:{}}),cu=i.V(\"ng-component\",p,function(l){return i._22(0,[(l()(),i.Z(0,0,null,null,1,\"ng-component\",[],null,null,null,function(l){return i._22(0,[(l()(),i._20(-1,null,[\"\\n\"])),(l()(),i.Z(1,0,null,null,10,\"ion-header\",[],null,null,null,null,null)),i.Y(2,16384,null,0,jn.a,[Ql.a,i.j,i.z,[2,fn.a]],null,null),(l()(),i._20(-1,null,[\"\\n  \"])),(l()(),i.Z(4,0,null,null,6,\"ion-navbar\",[[\"class\",\"toolbar\"]],[[8,\"hidden\",0],[2,\"statusbar-padding\",null]],null,null,Fn.b,Fn.a)),i.Y(5,49152,null,0,Pn.a,[Yn.a,[2,fn.a],[2,Ln.a],Ql.a,i.j,i.z],null,null),(l()(),i._20(-1,3,[\"\\n    \"])),(l()(),i.Z(7,0,null,3,2,\"ion-title\",[],null,null,null,vn.b,vn.a)),i.Y(8,49152,null,0,yn.a,[Ql.a,i.j,i.z,[2,kn.a],[2,Pn.a]],null,null),(l()(),i._20(-1,0,[\"Clear Buttons\"])),(l()(),i._20(-1,3,[\"\\n  \"])),(l()(),i._20(-1,null,[\"\\n\"])),(l()(),i._20(-1,null,[\"\\n\\n\"])),(l()(),i.Z(13,0,null,null,37,\"ion-content\",[[\"padding\",\"\"]],[[2,\"statusbar-padding\",null],[2,\"has-refresher\",null]],null,null,Cn.b,Cn.a)),i.Y(14,4374528,null,0,wn.a,[Ql.a,on.a,_n.a,i.j,i.z,Yn.a,Zn.a,i.u,[2,fn.a],[2,Ln.a]],null,null),(l()(),i._20(-1,1,[\"\\n  \"])),(l()(),i.Z(16,0,null,1,5,\"p\",[],null,null,null,null,null)),(l()(),i._20(-1,null,[\"\\n    \"])),(l()(),i.Z(18,0,null,null,2,\"button\",[[\"clear\",\"\"],[\"color\",\"light\"],[\"ion-button\",\"\"]],null,null,null,An.b,An.a)),i.Y(19,1097728,null,0,Rn.a,[[8,\"\"],Ql.a,i.j,i.z],{color:[0,\"color\"],clear:[1,\"clear\"]},null),(l()(),i._20(-1,0,[\"Light\"])),(l()(),i._20(-1,null,[\"\\n  \"])),(l()(),i._20(-1,1,[\"\\n\\n  \"])),(l()(),i.Z(23,0,null,1,5,\"p\",[],null,null,null,null,null)),(l()(),i._20(-1,null,[\"\\n    \"])),(l()(),i.Z(25,0,null,null,2,\"button\",[[\"clear\",\"\"],[\"ion-button\",\"\"]],null,null,null,An.b,An.a)),i.Y(26,1097728,null,0,Rn.a,[[8,\"\"],Ql.a,i.j,i.z],{clear:[0,\"clear\"]},null),(l()(),i._20(-1,0,[\"Default\"])),(l()(),i._20(-1,null,[\"\\n  \"])),(l()(),i._20(-1,1,[\"\\n\\n  \"])),(l()(),i.Z(30,0,null,1,5,\"p\",[],null,null,null,null,null)),(l()(),i._20(-1,null,[\"\\n    \"])),(l()(),i.Z(32,0,null,null,2,\"button\",[[\"clear\",\"\"],[\"color\",\"secondary\"],[\"ion-button\",\"\"]],null,null,null,An.b,An.a)),i.Y(33,1097728,null,0,Rn.a,[[8,\"\"],Ql.a,i.j,i.z],{color:[0,\"color\"],clear:[1,\"clear\"]},null),(l()(),i._20(-1,0,[\"Secondary\"])),(l()(),i._20(-1,null,[\"\\n  \"])),(l()(),i._20(-1,1,[\"\\n\\n  \"])),(l()(),i.Z(37,0,null,1,5,\"p\",[],null,null,null,null,null)),(l()(),i._20(-1,null,[\"\\n    \"])),(l()(),i.Z(39,0,null,null,2,\"button\",[[\"clear\",\"\"],[\"color\",\"danger\"],[\"ion-button\",\"\"]],null,null,null,An.b,An.a)),i.Y(40,1097728,null,0,Rn.a,[[8,\"\"],Ql.a,i.j,i.z],{color:[0,\"color\"],clear:[1,\"clear\"]},null),(l()(),i._20(-1,0,[\"Danger\"])),(l()(),i._20(-1,null,[\"\\n  \"])),(l()(),i._20(-1,1,[\"\\n\\n  \"])),(l()(),i.Z(44,0,null,1,5,\"p\",[],null,null,null,null,null)),(l()(),i._20(-1,null,[\"\\n    \"])),(l()(),i.Z(46,0,null,null,2,\"button\",[[\"clear\",\"\"],[\"color\",\"dark\"],[\"ion-button\",\"\"]],null,null,null,An.b,An.a)),i.Y(47,1097728,null,0,Rn.a,[[8,\"\"],Ql.a,i.j,i.z],{color:[0,\"color\"],clear:[1,\"clear\"]},null),(l()(),i._20(-1,0,[\"Dark\"])),(l()(),i._20(-1,null,[\"\\n  \"])),(l()(),i._20(-1,1,[\"\\n\"])),(l()(),i._20(-1,null,[\"\\n\"]))],function(l,n){l(n,19,0,\"light\",\"\"),l(n,26,0,\"\"),l(n,33,0,\"secondary\",\"\"),l(n,40,0,\"danger\",\"\"),l(n,47,0,\"dark\",\"\")},function(l,n){l(n,4,0,i._13(n,5)._hidden,i._13(n,5)._sbPadding),l(n,13,0,i._13(n,14).statusbarPadding,i._13(n,14)._hasRefresher)})},su)),i.Y(1,49152,null,0,p,[],null,null)],null,null)},{},{},[]),ru=u(49),du=i.X({encapsulation:2,styles:[],data:{}}),bu=i.V(\"ng-component\",Z,function(l){return i._22(0,[(l()(),i.Z(0,0,null,null,1,\"ng-component\",[],null,null,null,function(l){return i._22(0,[(l()(),i.Z(0,0,null,null,34,\"ion-header\",[],null,null,null,null,null)),i.Y(1,16384,null,0,jn.a,[Ql.a,i.j,i.z,[2,fn.a]],null,null),(l()(),i._20(-1,null,[\"\\n  \"])),(l()(),i.Z(3,0,null,null,30,\"ion-navbar\",[[\"class\",\"toolbar\"]],[[8,\"hidden\",0],[2,\"statusbar-padding\",null]],null,null,Fn.b,Fn.a)),i.Y(4,49152,null,0,Pn.a,[Yn.a,[2,fn.a],[2,Ln.a],Ql.a,i.j,i.z],null,null),(l()(),i._20(-1,3,[\"\\n    \"])),(l()(),i.Z(6,0,null,3,2,\"ion-title\",[],null,null,null,vn.b,vn.a)),i.Y(7,49152,null,0,yn.a,[Ql.a,i.j,i.z,[2,kn.a],[2,Pn.a]],null,null),(l()(),i._20(-1,0,[\"Buttons In Components\"])),(l()(),i._20(-1,3,[\"\\n    \"])),(l()(),i.Z(10,0,null,1,10,\"ion-buttons\",[[\"start\",\"\"]],null,null,null,null,null)),i.Y(11,16384,null,1,ru.a,[Ql.a,i.j,i.z,[2,kn.a],[2,Pn.a]],null,null),i._18(603979776,1,{_buttons:1}),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i.Z(14,0,null,null,5,\"button\",[[\"icon-only\",\"\"],[\"ion-button\",\"\"]],null,null,null,An.b,An.a)),i.Y(15,1097728,[[1,4]],0,Rn.a,[[8,\"\"],Ql.a,i.j,i.z],null,null),(l()(),i._20(-1,0,[\"\\n        \"])),(l()(),i.Z(17,0,null,0,1,\"ion-icon\",[[\"name\",\"contact\"],[\"role\",\"img\"]],[[2,\"hide\",null]],null,null,null,null)),i.Y(18,147456,null,0,mn.a,[Ql.a,i.j,i.z],{name:[0,\"name\"]},null),(l()(),i._20(-1,0,[\"\\n      \"])),(l()(),i._20(-1,null,[\"\\n    \"])),(l()(),i._20(-1,3,[\"\\n    \"])),(l()(),i.Z(22,0,null,2,10,\"ion-buttons\",[[\"end\",\"\"]],null,null,null,null,null)),i.Y(23,16384,null,1,ru.a,[Ql.a,i.j,i.z,[2,kn.a],[2,Pn.a]],null,null),i._18(603979776,2,{_buttons:1}),(l()(),i._20(-1,null,[\"\\n    \"])),(l()(),i.Z(26,0,null,null,5,\"button\",[[\"icon-only\",\"\"],[\"ion-button\",\"\"]],null,null,null,An.b,An.a)),i.Y(27,1097728,[[2,4]],0,Rn.a,[[8,\"\"],Ql.a,i.j,i.z],null,null),(l()(),i._20(-1,0,[\"\\n      \"])),(l()(),i.Z(29,0,null,0,1,\"ion-icon\",[[\"name\",\"search\"],[\"role\",\"img\"]],[[2,\"hide\",null]],null,null,null,null)),i.Y(30,147456,null,0,mn.a,[Ql.a,i.j,i.z],{name:[0,\"name\"]},null),(l()(),i._20(-1,0,[\"\\n    \"])),(l()(),i._20(-1,null,[\"\\n    \"])),(l()(),i._20(-1,3,[\"\\n  \"])),(l()(),i._20(-1,null,[\"\\n\"])),(l()(),i._20(-1,null,[\"\\n\\n\"])),(l()(),i.Z(36,0,null,null,74,\"ion-content\",[[\"class\",\"buttons-components-page\"],[\"padding\",\"\"]],[[2,\"statusbar-padding\",null],[2,\"has-refresher\",null]],null,null,Cn.b,Cn.a)),i.Y(37,4374528,null,0,wn.a,[Ql.a,on.a,_n.a,i.j,i.z,Yn.a,Zn.a,i.u,[2,fn.a],[2,Ln.a]],null,null),(l()(),i._20(-1,1,[\"\\n  \"])),(l()(),i.Z(39,0,null,1,24,\"ion-card\",[],null,null,null,null,null)),i.Y(40,16384,null,0,Qn.a,[Ql.a,i.j,i.z],null,null),(l()(),i._20(-1,null,[\"\\n    \"])),(l()(),i.Z(42,0,null,null,4,\"ion-card-content\",[],null,null,null,null,null)),i.Y(43,16384,null,0,lu.a,[Ql.a,i.j,i.z],null,null),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i.Z(45,0,null,null,0,\"img\",[[\"src\",\"assets/img/img-icon.png\"]],null,null,null,null,null)),(l()(),i._20(-1,null,[\"\\n    \"])),(l()(),i._20(-1,null,[\"\\n\\n    \"])),(l()(),i.Z(48,0,null,null,14,\"ion-item\",[[\"class\",\"item item-block\"]],null,null,null,$l.b,$l.a)),i.Y(49,1097728,null,3,Kl.a,[Jl.a,Ql.a,i.j,i.z,[2,ln.a]],null,null),i._18(335544320,3,{contentLabel:0}),i._18(603979776,4,{_buttons:1}),i._18(603979776,5,{_icons:1}),i.Y(53,16384,null,0,nn.a,[],null,null),(l()(),i._20(-1,2,[\"\\n      \"])),(l()(),i.Z(55,0,null,0,2,\"button\",[[\"clear\",\"\"],[\"ion-button\",\"\"],[\"item-start\",\"\"]],null,null,null,An.b,An.a)),i.Y(56,1097728,[[4,4]],0,Rn.a,[[8,\"\"],Ql.a,i.j,i.z],{clear:[0,\"clear\"]},null),(l()(),i._20(-1,0,[\"Like\"])),(l()(),i._20(-1,2,[\"\\n      \"])),(l()(),i.Z(59,0,null,4,2,\"button\",[[\"clear\",\"\"],[\"ion-button\",\"\"],[\"item-end\",\"\"]],null,null,null,An.b,An.a)),i.Y(60,1097728,[[4,4]],0,Rn.a,[[8,\"\"],Ql.a,i.j,i.z],{clear:[0,\"clear\"]},null),(l()(),i._20(-1,0,[\"Comment\"])),(l()(),i._20(-1,2,[\"\\n    \"])),(l()(),i._20(-1,null,[\"\\n  \"])),(l()(),i._20(-1,1,[\"\\n\\n  \"])),(l()(),i.Z(65,0,null,1,44,\"ion-list\",[],null,null,null,null,null)),i.Y(66,16384,null,0,en.a,[Ql.a,i.j,i.z,on.a,tn.l,_n.a],null,null),(l()(),i._20(-1,null,[\"\\n    \"])),(l()(),i.Z(68,0,null,null,10,\"ion-item\",[[\"class\",\"item item-block\"]],null,null,null,$l.b,$l.a)),i.Y(69,1097728,null,3,Kl.a,[Jl.a,Ql.a,i.j,i.z,[2,ln.a]],null,null),i._18(335544320,6,{contentLabel:0}),i._18(603979776,7,{_buttons:1}),i._18(603979776,8,{_icons:1}),i.Y(73,16384,null,0,nn.a,[],null,null),(l()(),i._20(-1,2,[\"\\n      Inner Button\\n      \"])),(l()(),i.Z(75,0,null,4,2,\"button\",[[\"ion-button\",\"\"],[\"item-end\",\"\"],[\"outline\",\"\"]],null,null,null,An.b,An.a)),i.Y(76,1097728,[[7,4]],0,Rn.a,[[8,\"\"],Ql.a,i.j,i.z],{outline:[0,\"outline\"]},null),(l()(),i._20(-1,0,[\"Outline\"])),(l()(),i._20(-1,2,[\"\\n    \"])),(l()(),i._20(-1,null,[\"\\n\\n    \"])),(l()(),i.Z(80,0,null,null,13,\"ion-item\",[[\"class\",\"item item-block\"]],null,null,null,$l.b,$l.a)),i.Y(81,1097728,null,3,Kl.a,[Jl.a,Ql.a,i.j,i.z,[2,ln.a]],null,null),i._18(335544320,9,{contentLabel:0}),i._18(603979776,10,{_buttons:1}),i._18(603979776,11,{_icons:1}),i.Y(85,16384,null,0,nn.a,[],null,null),(l()(),i._20(-1,2,[\"\\n      Left Icon Button\\n      \"])),(l()(),i.Z(87,0,null,4,5,\"button\",[[\"icon-start\",\"\"],[\"ion-button\",\"\"],[\"item-end\",\"\"],[\"outline\",\"\"]],null,null,null,An.b,An.a)),i.Y(88,1097728,[[10,4]],0,Rn.a,[[8,\"\"],Ql.a,i.j,i.z],{outline:[0,\"outline\"]},null),(l()(),i._20(-1,0,[\"\\n        \"])),(l()(),i.Z(90,0,null,0,1,\"ion-icon\",[[\"name\",\"star\"],[\"role\",\"img\"]],[[2,\"hide\",null]],null,null,null,null)),i.Y(91,147456,null,0,mn.a,[Ql.a,i.j,i.z],{name:[0,\"name\"]},null),(l()(),i._20(-1,0,[\"\\n        Left Icon\\n      \"])),(l()(),i._20(-1,2,[\"\\n    \"])),(l()(),i._20(-1,null,[\"\\n\\n    \"])),(l()(),i.Z(95,0,null,null,13,\"ion-item\",[[\"class\",\"item item-block\"]],null,null,null,$l.b,$l.a)),i.Y(96,1097728,null,3,Kl.a,[Jl.a,Ql.a,i.j,i.z,[2,ln.a]],null,null),i._18(335544320,12,{contentLabel:0}),i._18(603979776,13,{_buttons:1}),i._18(603979776,14,{_icons:1}),i.Y(100,16384,null,0,nn.a,[],null,null),(l()(),i._20(-1,2,[\"\\n      Right Icon Button\\n      \"])),(l()(),i.Z(102,0,null,4,5,\"button\",[[\"icon-end\",\"\"],[\"ion-button\",\"\"],[\"item-end\",\"\"],[\"outline\",\"\"]],null,null,null,An.b,An.a)),i.Y(103,1097728,[[13,4]],0,Rn.a,[[8,\"\"],Ql.a,i.j,i.z],{outline:[0,\"outline\"]},null),(l()(),i._20(-1,0,[\"\\n        Right Icon\\n        \"])),(l()(),i.Z(105,0,null,0,1,\"ion-icon\",[[\"name\",\"star\"],[\"role\",\"img\"]],[[2,\"hide\",null]],null,null,null,null)),i.Y(106,147456,null,0,mn.a,[Ql.a,i.j,i.z],{name:[0,\"name\"]},null),(l()(),i._20(-1,0,[\"\\n      \"])),(l()(),i._20(-1,2,[\"\\n    \"])),(l()(),i._20(-1,null,[\"\\n  \"])),(l()(),i._20(-1,1,[\"\\n\"])),(l()(),i._20(-1,null,[\"\\n\"]))],function(l,n){l(n,18,0,\"contact\"),l(n,30,0,\"search\"),l(n,56,0,\"\"),l(n,60,0,\"\"),l(n,76,0,\"\"),l(n,88,0,\"\"),l(n,91,0,\"star\"),l(n,103,0,\"\"),l(n,106,0,\"star\")},function(l,n){l(n,3,0,i._13(n,4)._hidden,i._13(n,4)._sbPadding),l(n,17,0,i._13(n,18)._hidden),l(n,29,0,i._13(n,30)._hidden),l(n,36,0,i._13(n,37).statusbarPadding,i._13(n,37)._hasRefresher),l(n,90,0,i._13(n,91)._hidden),l(n,105,0,i._13(n,106)._hidden)})},du)),i.Y(1,49152,null,0,Z,[],null,null)],null,null)},{},{},[]),mu=i.X({encapsulation:2,styles:[],data:{}}),gu=i.V(\"ng-component\",Y,function(l){return i._22(0,[(l()(),i.Z(0,0,null,null,1,\"ng-component\",[],null,null,null,function(l){return i._22(0,[(l()(),i._20(-1,null,[\"\\n\"])),(l()(),i.Z(1,0,null,null,10,\"ion-header\",[],null,null,null,null,null)),i.Y(2,16384,null,0,jn.a,[Ql.a,i.j,i.z,[2,fn.a]],null,null),(l()(),i._20(-1,null,[\"\\n  \"])),(l()(),i.Z(4,0,null,null,6,\"ion-navbar\",[[\"class\",\"toolbar\"]],[[8,\"hidden\",0],[2,\"statusbar-padding\",null]],null,null,Fn.b,Fn.a)),i.Y(5,49152,null,0,Pn.a,[Yn.a,[2,fn.a],[2,Ln.a],Ql.a,i.j,i.z],null,null),(l()(),i._20(-1,3,[\"\\n    \"])),(l()(),i.Z(7,0,null,3,2,\"ion-title\",[],null,null,null,vn.b,vn.a)),i.Y(8,49152,null,0,yn.a,[Ql.a,i.j,i.z,[2,kn.a],[2,Pn.a]],null,null),(l()(),i._20(-1,0,[\"Full Buttons\"])),(l()(),i._20(-1,3,[\"\\n  \"])),(l()(),i._20(-1,null,[\"\\n\"])),(l()(),i._20(-1,null,[\"\\n\\n\"])),(l()(),i.Z(13,0,null,null,37,\"ion-content\",[],[[2,\"statusbar-padding\",null],[2,\"has-refresher\",null]],null,null,Cn.b,Cn.a)),i.Y(14,4374528,null,0,wn.a,[Ql.a,on.a,_n.a,i.j,i.z,Yn.a,Zn.a,i.u,[2,fn.a],[2,Ln.a]],null,null),(l()(),i._20(-1,1,[\"\\n\\n  \"])),(l()(),i.Z(16,0,null,1,5,\"p\",[],null,null,null,null,null)),(l()(),i._20(-1,null,[\"\\n    \"])),(l()(),i.Z(18,0,null,null,2,\"button\",[[\"color\",\"light\"],[\"full\",\"\"],[\"ion-button\",\"\"]],null,null,null,An.b,An.a)),i.Y(19,1097728,null,0,Rn.a,[[8,\"\"],Ql.a,i.j,i.z],{color:[0,\"color\"],full:[1,\"full\"]},null),(l()(),i._20(-1,0,[\"Light\"])),(l()(),i._20(-1,null,[\"\\n  \"])),(l()(),i._20(-1,1,[\"\\n  \"])),(l()(),i.Z(23,0,null,1,5,\"p\",[],null,null,null,null,null)),(l()(),i._20(-1,null,[\"\\n    \"])),(l()(),i.Z(25,0,null,null,2,\"button\",[[\"full\",\"\"],[\"ion-button\",\"\"]],null,null,null,An.b,An.a)),i.Y(26,1097728,null,0,Rn.a,[[8,\"\"],Ql.a,i.j,i.z],{full:[0,\"full\"]},null),(l()(),i._20(-1,0,[\"Default\"])),(l()(),i._20(-1,null,[\"\\n  \"])),(l()(),i._20(-1,1,[\"\\n\\n  \"])),(l()(),i.Z(30,0,null,1,5,\"p\",[],null,null,null,null,null)),(l()(),i._20(-1,null,[\"\\n    \"])),(l()(),i.Z(32,0,null,null,2,\"button\",[[\"color\",\"secondary\"],[\"full\",\"\"],[\"ion-button\",\"\"]],null,null,null,An.b,An.a)),i.Y(33,1097728,null,0,Rn.a,[[8,\"\"],Ql.a,i.j,i.z],{color:[0,\"color\"],full:[1,\"full\"]},null),(l()(),i._20(-1,0,[\"Secondary\"])),(l()(),i._20(-1,null,[\"\\n  \"])),(l()(),i._20(-1,1,[\"\\n\\n  \"])),(l()(),i.Z(37,0,null,1,5,\"p\",[],null,null,null,null,null)),(l()(),i._20(-1,null,[\"\\n    \"])),(l()(),i.Z(39,0,null,null,2,\"button\",[[\"color\",\"danger\"],[\"full\",\"\"],[\"ion-button\",\"\"]],null,null,null,An.b,An.a)),i.Y(40,1097728,null,0,Rn.a,[[8,\"\"],Ql.a,i.j,i.z],{color:[0,\"color\"],full:[1,\"full\"]},null),(l()(),i._20(-1,0,[\"Danger\"])),(l()(),i._20(-1,null,[\"\\n  \"])),(l()(),i._20(-1,1,[\"\\n  \"])),(l()(),i.Z(44,0,null,1,5,\"p\",[],null,null,null,null,null)),(l()(),i._20(-1,null,[\"\\n    \"])),(l()(),i.Z(46,0,null,null,2,\"button\",[[\"color\",\"dark\"],[\"full\",\"\"],[\"ion-button\",\"\"]],null,null,null,An.b,An.a)),i.Y(47,1097728,null,0,Rn.a,[[8,\"\"],Ql.a,i.j,i.z],{color:[0,\"color\"],full:[1,\"full\"]},null),(l()(),i._20(-1,0,[\"Dark\"])),(l()(),i._20(-1,null,[\"\\n  \"])),(l()(),i._20(-1,1,[\"\\n\"])),(l()(),i._20(-1,null,[\"\\n\"]))],function(l,n){l(n,19,0,\"light\",\"\"),l(n,26,0,\"\"),l(n,33,0,\"secondary\",\"\"),l(n,40,0,\"danger\",\"\"),l(n,47,0,\"dark\",\"\")},function(l,n){l(n,4,0,i._13(n,5)._hidden,i._13(n,5)._sbPadding),l(n,13,0,i._13(n,14).statusbarPadding,i._13(n,14)._hasRefresher)})},mu)),i.Y(1,49152,null,0,Y,[],null,null)],null,null)},{},{},[]),hu=i.X({encapsulation:2,styles:[],data:{}}),pu=i.V(\"ng-component\",j,function(l){return i._22(0,[(l()(),i.Z(0,0,null,null,1,\"ng-component\",[],null,null,null,function(l){return i._22(0,[(l()(),i._20(-1,null,[\"\\n\"])),(l()(),i.Z(1,0,null,null,10,\"ion-header\",[],null,null,null,null,null)),i.Y(2,16384,null,0,jn.a,[Ql.a,i.j,i.z,[2,fn.a]],null,null),(l()(),i._20(-1,null,[\"\\n  \"])),(l()(),i.Z(4,0,null,null,6,\"ion-navbar\",[[\"class\",\"toolbar\"]],[[8,\"hidden\",0],[2,\"statusbar-padding\",null]],null,null,Fn.b,Fn.a)),i.Y(5,49152,null,0,Pn.a,[Yn.a,[2,fn.a],[2,Ln.a],Ql.a,i.j,i.z],null,null),(l()(),i._20(-1,3,[\"\\n    \"])),(l()(),i.Z(7,0,null,3,2,\"ion-title\",[],null,null,null,vn.b,vn.a)),i.Y(8,49152,null,0,yn.a,[Ql.a,i.j,i.z,[2,kn.a],[2,Pn.a]],null,null),(l()(),i._20(-1,0,[\"Icon Buttons\"])),(l()(),i._20(-1,3,[\"\\n  \"])),(l()(),i._20(-1,null,[\"\\n\"])),(l()(),i._20(-1,null,[\"\\n\\n\"])),(l()(),i.Z(13,0,null,null,115,\"ion-content\",[[\"padding\",\"\"]],[[2,\"statusbar-padding\",null],[2,\"has-refresher\",null]],null,null,Cn.b,Cn.a)),i.Y(14,4374528,null,0,wn.a,[Ql.a,on.a,_n.a,i.j,i.z,Yn.a,Zn.a,i.u,[2,fn.a],[2,Ln.a]],null,null),(l()(),i._20(-1,1,[\"\\n\\n  \"])),(l()(),i.Z(16,0,null,1,29,\"p\",[],null,null,null,null,null)),(l()(),i._20(-1,null,[\"\\n    \"])),(l()(),i.Z(18,0,null,null,5,\"button\",[[\"color\",\"light\"],[\"icon-start\",\"\"],[\"ion-button\",\"\"]],null,null,null,An.b,An.a)),i.Y(19,1097728,null,0,Rn.a,[[8,\"\"],Ql.a,i.j,i.z],{color:[0,\"color\"]},null),(l()(),i._20(-1,0,[\"\\n      \"])),(l()(),i.Z(21,0,null,0,1,\"ion-icon\",[[\"name\",\"arrow-back\"],[\"role\",\"img\"]],[[2,\"hide\",null]],null,null,null,null)),i.Y(22,147456,null,0,mn.a,[Ql.a,i.j,i.z],{name:[0,\"name\"]},null),(l()(),i._20(-1,0,[\"\\n      Back\\n    \"])),(l()(),i._20(-1,null,[\"\\n\\n    \"])),(l()(),i.Z(25,0,null,null,5,\"button\",[[\"color\",\"light\"],[\"icon-only\",\"\"],[\"ion-button\",\"\"]],null,null,null,An.b,An.a)),i.Y(26,1097728,null,0,Rn.a,[[8,\"\"],Ql.a,i.j,i.z],{color:[0,\"color\"]},null),(l()(),i._20(-1,0,[\"\\n      \"])),(l()(),i.Z(28,0,null,0,1,\"ion-icon\",[[\"name\",\"arrow-down\"],[\"role\",\"img\"]],[[2,\"hide\",null]],null,null,null,null)),i.Y(29,147456,null,0,mn.a,[Ql.a,i.j,i.z],{name:[0,\"name\"]},null),(l()(),i._20(-1,0,[\"\\n    \"])),(l()(),i._20(-1,null,[\"\\n\\n    \"])),(l()(),i.Z(32,0,null,null,5,\"button\",[[\"color\",\"light\"],[\"icon-only\",\"\"],[\"ion-button\",\"\"]],null,null,null,An.b,An.a)),i.Y(33,1097728,null,0,Rn.a,[[8,\"\"],Ql.a,i.j,i.z],{color:[0,\"color\"]},null),(l()(),i._20(-1,0,[\"\\n      \"])),(l()(),i.Z(35,0,null,0,1,\"ion-icon\",[[\"name\",\"arrow-up\"],[\"role\",\"img\"]],[[2,\"hide\",null]],null,null,null,null)),i.Y(36,147456,null,0,mn.a,[Ql.a,i.j,i.z],{name:[0,\"name\"]},null),(l()(),i._20(-1,0,[\"\\n    \"])),(l()(),i._20(-1,null,[\"\\n\\n    \"])),(l()(),i.Z(39,0,null,null,5,\"button\",[[\"color\",\"light\"],[\"icon-end\",\"\"],[\"ion-button\",\"\"]],null,null,null,An.b,An.a)),i.Y(40,1097728,null,0,Rn.a,[[8,\"\"],Ql.a,i.j,i.z],{color:[0,\"color\"]},null),(l()(),i._20(-1,0,[\"\\n      Next\\n      \"])),(l()(),i.Z(42,0,null,0,1,\"ion-icon\",[[\"name\",\"arrow-forward\"],[\"role\",\"img\"]],[[2,\"hide\",null]],null,null,null,null)),i.Y(43,147456,null,0,mn.a,[Ql.a,i.j,i.z],{name:[0,\"name\"]},null),(l()(),i._20(-1,0,[\"\\n    \"])),(l()(),i._20(-1,null,[\"\\n  \"])),(l()(),i._20(-1,1,[\"\\n\\n  \"])),(l()(),i.Z(47,0,null,1,22,\"p\",[],null,null,null,null,null)),(l()(),i._20(-1,null,[\"\\n    \"])),(l()(),i.Z(49,0,null,null,5,\"button\",[[\"icon-start\",\"\"],[\"ion-button\",\"\"]],null,null,null,An.b,An.a)),i.Y(50,1097728,null,0,Rn.a,[[8,\"\"],Ql.a,i.j,i.z],null,null),(l()(),i._20(-1,0,[\"\\n      \"])),(l()(),i.Z(52,0,null,0,1,\"ion-icon\",[[\"name\",\"home\"],[\"role\",\"img\"]],[[2,\"hide\",null]],null,null,null,null)),i.Y(53,147456,null,0,mn.a,[Ql.a,i.j,i.z],{name:[0,\"name\"]},null),(l()(),i._20(-1,0,[\"\\n      Home\\n    \"])),(l()(),i._20(-1,null,[\"\\n    \"])),(l()(),i.Z(56,0,null,null,5,\"button\",[[\"icon-start\",\"\"],[\"ion-button\",\"\"],[\"outline\",\"\"]],null,null,null,An.b,An.a)),i.Y(57,1097728,null,0,Rn.a,[[8,\"\"],Ql.a,i.j,i.z],{outline:[0,\"outline\"]},null),(l()(),i._20(-1,0,[\"\\n      \"])),(l()(),i.Z(59,0,null,0,1,\"ion-icon\",[[\"is-active\",\"false\"],[\"name\",\"briefcase\"],[\"role\",\"img\"]],[[2,\"hide\",null]],null,null,null,null)),i.Y(60,147456,null,0,mn.a,[Ql.a,i.j,i.z],{name:[0,\"name\"]},null),(l()(),i._20(-1,0,[\"\\n      Work\\n    \"])),(l()(),i._20(-1,null,[\"\\n    \"])),(l()(),i.Z(63,0,null,null,5,\"button\",[[\"clear\",\"\"],[\"icon-start\",\"\"],[\"ion-button\",\"\"]],null,null,null,An.b,An.a)),i.Y(64,1097728,null,0,Rn.a,[[8,\"\"],Ql.a,i.j,i.z],{clear:[0,\"clear\"]},null),(l()(),i._20(-1,0,[\"\\n      \"])),(l()(),i.Z(66,0,null,0,1,\"ion-icon\",[[\"is-active\",\"false\"],[\"name\",\"beer\"],[\"role\",\"img\"]],[[2,\"hide\",null]],null,null,null,null)),i.Y(67,147456,null,0,mn.a,[Ql.a,i.j,i.z],{name:[0,\"name\"]},null),(l()(),i._20(-1,0,[\"\\n      Pub\\n    \"])),(l()(),i._20(-1,null,[\"\\n  \"])),(l()(),i._20(-1,1,[\"\\n\\n  \"])),(l()(),i.Z(71,0,null,1,15,\"p\",[],null,null,null,null,null)),(l()(),i._20(-1,null,[\"\\n    \"])),(l()(),i.Z(73,0,null,null,5,\"button\",[[\"color\",\"secondary\"],[\"icon-start\",\"\"],[\"ion-button\",\"\"]],null,null,null,An.b,An.a)),i.Y(74,1097728,null,0,Rn.a,[[8,\"\"],Ql.a,i.j,i.z],{color:[0,\"color\"]},null),(l()(),i._20(-1,0,[\"\\n      \"])),(l()(),i.Z(76,0,null,0,1,\"ion-icon\",[[\"name\",\"people\"],[\"role\",\"img\"]],[[2,\"hide\",null]],null,null,null,null)),i.Y(77,147456,null,0,mn.a,[Ql.a,i.j,i.z],{name:[0,\"name\"]},null),(l()(),i._20(-1,0,[\"\\n      Friends\\n    \"])),(l()(),i._20(-1,null,[\"\\n    \"])),(l()(),i.Z(80,0,null,null,5,\"button\",[[\"color\",\"secondary\"],[\"icon-start\",\"\"],[\"ion-button\",\"\"],[\"outline\",\"\"]],null,null,null,An.b,An.a)),i.Y(81,1097728,null,0,Rn.a,[[8,\"\"],Ql.a,i.j,i.z],{color:[0,\"color\"],outline:[1,\"outline\"]},null),(l()(),i._20(-1,0,[\"\\n      \"])),(l()(),i.Z(83,0,null,0,1,\"ion-icon\",[[\"is-active\",\"false\"],[\"name\",\"paw\"],[\"role\",\"img\"]],[[2,\"hide\",null]],null,null,null,null)),i.Y(84,147456,null,0,mn.a,[Ql.a,i.j,i.z],{name:[0,\"name\"]},null),(l()(),i._20(-1,0,[\"\\n      Best Friend\\n    \"])),(l()(),i._20(-1,null,[\"\\n  \"])),(l()(),i._20(-1,1,[\"\\n\\n  \"])),(l()(),i.Z(88,0,null,1,22,\"p\",[],null,null,null,null,null)),(l()(),i._20(-1,null,[\"\\n    \"])),(l()(),i.Z(90,0,null,null,5,\"button\",[[\"color\",\"danger\"],[\"icon-start\",\"\"],[\"ion-button\",\"\"]],null,null,null,An.b,An.a)),i.Y(91,1097728,null,0,Rn.a,[[8,\"\"],Ql.a,i.j,i.z],{color:[0,\"color\"]},null),(l()(),i._20(-1,0,[\"\\n      \"])),(l()(),i.Z(93,0,null,0,1,\"ion-icon\",[[\"name\",\"close\"],[\"role\",\"img\"]],[[2,\"hide\",null]],null,null,null,null)),i.Y(94,147456,null,0,mn.a,[Ql.a,i.j,i.z],{name:[0,\"name\"]},null),(l()(),i._20(-1,0,[\"\\n      Remove\\n    \"])),(l()(),i._20(-1,null,[\"\\n    \"])),(l()(),i.Z(97,0,null,null,5,\"button\",[[\"color\",\"danger\"],[\"icon-only\",\"\"],[\"ion-button\",\"\"],[\"outline\",\"\"]],null,null,null,An.b,An.a)),i.Y(98,1097728,null,0,Rn.a,[[8,\"\"],Ql.a,i.j,i.z],{color:[0,\"color\"],outline:[1,\"outline\"]},null),(l()(),i._20(-1,0,[\"\\n      \"])),(l()(),i.Z(100,0,null,0,1,\"ion-icon\",[[\"is-active\",\"false\"],[\"name\",\"remove-circle\"],[\"role\",\"img\"]],[[2,\"hide\",null]],null,null,null,null)),i.Y(101,147456,null,0,mn.a,[Ql.a,i.j,i.z],{name:[0,\"name\"]},null),(l()(),i._20(-1,0,[\"\\n    \"])),(l()(),i._20(-1,null,[\"\\n    \"])),(l()(),i.Z(104,0,null,null,5,\"button\",[[\"clear\",\"\"],[\"color\",\"danger\"],[\"icon-only\",\"\"],[\"ion-button\",\"\"]],null,null,null,An.b,An.a)),i.Y(105,1097728,null,0,Rn.a,[[8,\"\"],Ql.a,i.j,i.z],{color:[0,\"color\"],clear:[1,\"clear\"]},null),(l()(),i._20(-1,0,[\"\\n      \"])),(l()(),i.Z(107,0,null,0,1,\"ion-icon\",[[\"is-active\",\"false\"],[\"name\",\"trash\"],[\"role\",\"img\"]],[[2,\"hide\",null]],null,null,null,null)),i.Y(108,147456,null,0,mn.a,[Ql.a,i.j,i.z],{name:[0,\"name\"]},null),(l()(),i._20(-1,0,[\"\\n    \"])),(l()(),i._20(-1,null,[\"\\n  \"])),(l()(),i._20(-1,1,[\"\\n\\n  \"])),(l()(),i.Z(112,0,null,1,15,\"p\",[],null,null,null,null,null)),(l()(),i._20(-1,null,[\"\\n    \"])),(l()(),i.Z(114,0,null,null,5,\"button\",[[\"color\",\"dark\"],[\"icon-start\",\"\"],[\"ion-button\",\"\"],[\"round\",\"\"]],null,null,null,An.b,An.a)),i.Y(115,1097728,null,0,Rn.a,[[8,\"\"],Ql.a,i.j,i.z],{color:[0,\"color\"],round:[1,\"round\"]},null),(l()(),i._20(-1,0,[\"\\n      \"])),(l()(),i.Z(117,0,null,0,1,\"ion-icon\",[[\"is-active\",\"false\"],[\"name\",\"construct\"],[\"role\",\"img\"]],[[2,\"hide\",null]],null,null,null,null)),i.Y(118,147456,null,0,mn.a,[Ql.a,i.j,i.z],{name:[0,\"name\"]},null),(l()(),i._20(-1,0,[\"\\n      Tools\\n    \"])),(l()(),i._20(-1,null,[\"\\n    \"])),(l()(),i.Z(121,0,null,null,5,\"button\",[[\"clear\",\"\"],[\"color\",\"dark\"],[\"icon-only\",\"\"],[\"ion-button\",\"\"]],null,null,null,An.b,An.a)),i.Y(122,1097728,null,0,Rn.a,[[8,\"\"],Ql.a,i.j,i.z],{color:[0,\"color\"],clear:[1,\"clear\"]},null),(l()(),i._20(-1,0,[\"\\n      \"])),(l()(),i.Z(124,0,null,0,1,\"ion-icon\",[[\"is-active\",\"false\"],[\"name\",\"hammer\"],[\"role\",\"img\"]],[[2,\"hide\",null]],null,null,null,null)),i.Y(125,147456,null,0,mn.a,[Ql.a,i.j,i.z],{name:[0,\"name\"]},null),(l()(),i._20(-1,0,[\"\\n    \"])),(l()(),i._20(-1,null,[\"\\n  \"])),(l()(),i._20(-1,1,[\"\\n\\n\"])),(l()(),i._20(-1,null,[\"\\n\"]))],function(l,n){l(n,19,0,\"light\"),l(n,22,0,\"arrow-back\"),l(n,26,0,\"light\"),l(n,29,0,\"arrow-down\"),l(n,33,0,\"light\"),l(n,36,0,\"arrow-up\"),l(n,40,0,\"light\"),l(n,43,0,\"arrow-forward\"),l(n,53,0,\"home\"),l(n,57,0,\"\"),l(n,60,0,\"briefcase\"),l(n,64,0,\"\"),l(n,67,0,\"beer\"),l(n,74,0,\"secondary\"),l(n,77,0,\"people\"),l(n,81,0,\"secondary\",\"\"),l(n,84,0,\"paw\"),l(n,91,0,\"danger\"),l(n,94,0,\"close\"),l(n,98,0,\"danger\",\"\"),l(n,101,0,\"remove-circle\"),l(n,105,0,\"danger\",\"\"),l(n,108,0,\"trash\"),l(n,115,0,\"dark\",\"\"),l(n,118,0,\"construct\"),l(n,122,0,\"dark\",\"\"),l(n,125,0,\"hammer\")},function(l,n){l(n,4,0,i._13(n,5)._hidden,i._13(n,5)._sbPadding),l(n,13,0,i._13(n,14).statusbarPadding,i._13(n,14)._hasRefresher),l(n,21,0,i._13(n,22)._hidden),l(n,28,0,i._13(n,29)._hidden),l(n,35,0,i._13(n,36)._hidden),l(n,42,0,i._13(n,43)._hidden),l(n,52,0,i._13(n,53)._hidden),l(n,59,0,i._13(n,60)._hidden),l(n,66,0,i._13(n,67)._hidden),l(n,76,0,i._13(n,77)._hidden),l(n,83,0,i._13(n,84)._hidden),l(n,93,0,i._13(n,94)._hidden),l(n,100,0,i._13(n,101)._hidden),l(n,107,0,i._13(n,108)._hidden),l(n,117,0,i._13(n,118)._hidden),l(n,124,0,i._13(n,125)._hidden)})},hu)),i.Y(1,49152,null,0,j,[],null,null)],null,null)},{},{},[]),Zu=i.X({encapsulation:2,styles:[],data:{}}),Yu=i.V(\"ng-component\",f,function(l){return i._22(0,[(l()(),i.Z(0,0,null,null,1,\"ng-component\",[],null,null,null,function(l){return i._22(0,[(l()(),i._20(-1,null,[\"\\n\"])),(l()(),i.Z(1,0,null,null,10,\"ion-header\",[],null,null,null,null,null)),i.Y(2,16384,null,0,jn.a,[Ql.a,i.j,i.z,[2,fn.a]],null,null),(l()(),i._20(-1,null,[\"\\n  \"])),(l()(),i.Z(4,0,null,null,6,\"ion-navbar\",[[\"class\",\"toolbar\"]],[[8,\"hidden\",0],[2,\"statusbar-padding\",null]],null,null,Fn.b,Fn.a)),i.Y(5,49152,null,0,Pn.a,[Yn.a,[2,fn.a],[2,Ln.a],Ql.a,i.j,i.z],null,null),(l()(),i._20(-1,3,[\"\\n    \"])),(l()(),i.Z(7,0,null,3,2,\"ion-title\",[],null,null,null,vn.b,vn.a)),i.Y(8,49152,null,0,yn.a,[Ql.a,i.j,i.z,[2,kn.a],[2,Pn.a]],null,null),(l()(),i._20(-1,0,[\"Outline Buttons\"])),(l()(),i._20(-1,3,[\"\\n  \"])),(l()(),i._20(-1,null,[\"\\n\"])),(l()(),i._20(-1,null,[\"\\n\\n\"])),(l()(),i.Z(13,0,null,null,37,\"ion-content\",[[\"padding\",\"\"]],[[2,\"statusbar-padding\",null],[2,\"has-refresher\",null]],null,null,Cn.b,Cn.a)),i.Y(14,4374528,null,0,wn.a,[Ql.a,on.a,_n.a,i.j,i.z,Yn.a,Zn.a,i.u,[2,fn.a],[2,Ln.a]],null,null),(l()(),i._20(-1,1,[\"\\n\\n  \"])),(l()(),i.Z(16,0,null,1,5,\"p\",[],null,null,null,null,null)),(l()(),i._20(-1,null,[\"\\n    \"])),(l()(),i.Z(18,0,null,null,2,\"button\",[[\"color\",\"light\"],[\"ion-button\",\"\"],[\"outline\",\"\"]],null,null,null,An.b,An.a)),i.Y(19,1097728,null,0,Rn.a,[[8,\"\"],Ql.a,i.j,i.z],{color:[0,\"color\"],outline:[1,\"outline\"]},null),(l()(),i._20(-1,0,[\"Light\"])),(l()(),i._20(-1,null,[\"\\n  \"])),(l()(),i._20(-1,1,[\"\\n\\n  \"])),(l()(),i.Z(23,0,null,1,5,\"p\",[],null,null,null,null,null)),(l()(),i._20(-1,null,[\"\\n    \"])),(l()(),i.Z(25,0,null,null,2,\"button\",[[\"ion-button\",\"\"],[\"outline\",\"\"]],null,null,null,An.b,An.a)),i.Y(26,1097728,null,0,Rn.a,[[8,\"\"],Ql.a,i.j,i.z],{outline:[0,\"outline\"]},null),(l()(),i._20(-1,0,[\"Default\"])),(l()(),i._20(-1,null,[\"\\n  \"])),(l()(),i._20(-1,1,[\"\\n\\n  \"])),(l()(),i.Z(30,0,null,1,5,\"p\",[],null,null,null,null,null)),(l()(),i._20(-1,null,[\"\\n    \"])),(l()(),i.Z(32,0,null,null,2,\"button\",[[\"color\",\"secondary\"],[\"ion-button\",\"\"],[\"outline\",\"\"]],null,null,null,An.b,An.a)),i.Y(33,1097728,null,0,Rn.a,[[8,\"\"],Ql.a,i.j,i.z],{color:[0,\"color\"],outline:[1,\"outline\"]},null),(l()(),i._20(-1,0,[\"Secondary\"])),(l()(),i._20(-1,null,[\"\\n  \"])),(l()(),i._20(-1,1,[\"\\n\\n  \"])),(l()(),i.Z(37,0,null,1,5,\"p\",[],null,null,null,null,null)),(l()(),i._20(-1,null,[\"\\n    \"])),(l()(),i.Z(39,0,null,null,2,\"button\",[[\"color\",\"danger\"],[\"ion-button\",\"\"],[\"outline\",\"\"]],null,null,null,An.b,An.a)),i.Y(40,1097728,null,0,Rn.a,[[8,\"\"],Ql.a,i.j,i.z],{color:[0,\"color\"],outline:[1,\"outline\"]},null),(l()(),i._20(-1,0,[\"Danger\"])),(l()(),i._20(-1,null,[\"\\n  \"])),(l()(),i._20(-1,1,[\"\\n\\n  \"])),(l()(),i.Z(44,0,null,1,5,\"p\",[],null,null,null,null,null)),(l()(),i._20(-1,null,[\"\\n    \"])),(l()(),i.Z(46,0,null,null,2,\"button\",[[\"color\",\"dark\"],[\"ion-button\",\"\"],[\"outline\",\"\"]],null,null,null,An.b,An.a)),i.Y(47,1097728,null,0,Rn.a,[[8,\"\"],Ql.a,i.j,i.z],{color:[0,\"color\"],outline:[1,\"outline\"]},null),(l()(),i._20(-1,0,[\"Dark\"])),(l()(),i._20(-1,null,[\"\\n  \"])),(l()(),i._20(-1,1,[\"\\n\"])),(l()(),i._20(-1,null,[\"\\n\"]))],function(l,n){l(n,19,0,\"light\",\"\"),l(n,26,0,\"\"),l(n,33,0,\"secondary\",\"\"),l(n,40,0,\"danger\",\"\"),l(n,47,0,\"dark\",\"\")},function(l,n){l(n,4,0,i._13(n,5)._hidden,i._13(n,5)._sbPadding),l(n,13,0,i._13(n,14).statusbarPadding,i._13(n,14)._hasRefresher)})},Zu)),i.Y(1,49152,null,0,f,[],null,null)],null,null)},{},{},[]),ju=i.X({encapsulation:2,styles:[],data:{}}),fu=i.V(\"ng-component\",z,function(l){return i._22(0,[(l()(),i.Z(0,0,null,null,1,\"ng-component\",[],null,null,null,function(l){return i._22(0,[(l()(),i._20(-1,null,[\"\\n\"])),(l()(),i.Z(1,0,null,null,10,\"ion-header\",[],null,null,null,null,null)),i.Y(2,16384,null,0,jn.a,[Ql.a,i.j,i.z,[2,fn.a]],null,null),(l()(),i._20(-1,null,[\"\\n  \"])),(l()(),i.Z(4,0,null,null,6,\"ion-navbar\",[[\"class\",\"toolbar\"]],[[8,\"hidden\",0],[2,\"statusbar-padding\",null]],null,null,Fn.b,Fn.a)),i.Y(5,49152,null,0,Pn.a,[Yn.a,[2,fn.a],[2,Ln.a],Ql.a,i.j,i.z],null,null),(l()(),i._20(-1,3,[\"\\n    \"])),(l()(),i.Z(7,0,null,3,2,\"ion-title\",[],null,null,null,vn.b,vn.a)),i.Y(8,49152,null,0,yn.a,[Ql.a,i.j,i.z,[2,kn.a],[2,Pn.a]],null,null),(l()(),i._20(-1,0,[\"Round Buttons\"])),(l()(),i._20(-1,3,[\"\\n  \"])),(l()(),i._20(-1,null,[\"\\n\"])),(l()(),i._20(-1,null,[\"\\n\\n\"])),(l()(),i.Z(13,0,null,null,37,\"ion-content\",[[\"padding\",\"\"]],[[2,\"statusbar-padding\",null],[2,\"has-refresher\",null]],null,null,Cn.b,Cn.a)),i.Y(14,4374528,null,0,wn.a,[Ql.a,on.a,_n.a,i.j,i.z,Yn.a,Zn.a,i.u,[2,fn.a],[2,Ln.a]],null,null),(l()(),i._20(-1,1,[\"\\n  \"])),(l()(),i.Z(16,0,null,1,5,\"p\",[],null,null,null,null,null)),(l()(),i._20(-1,null,[\"\\n    \"])),(l()(),i.Z(18,0,null,null,2,\"button\",[[\"color\",\"light\"],[\"ion-button\",\"\"],[\"round\",\"\"]],null,null,null,An.b,An.a)),i.Y(19,1097728,null,0,Rn.a,[[8,\"\"],Ql.a,i.j,i.z],{color:[0,\"color\"],round:[1,\"round\"]},null),(l()(),i._20(-1,0,[\"Light\"])),(l()(),i._20(-1,null,[\"\\n  \"])),(l()(),i._20(-1,1,[\"\\n  \"])),(l()(),i.Z(23,0,null,1,5,\"p\",[],null,null,null,null,null)),(l()(),i._20(-1,null,[\"\\n    \"])),(l()(),i.Z(25,0,null,null,2,\"button\",[[\"ion-button\",\"\"],[\"round\",\"\"]],null,null,null,An.b,An.a)),i.Y(26,1097728,null,0,Rn.a,[[8,\"\"],Ql.a,i.j,i.z],{round:[0,\"round\"]},null),(l()(),i._20(-1,0,[\"Default\"])),(l()(),i._20(-1,null,[\"\\n  \"])),(l()(),i._20(-1,1,[\"\\n\\n  \"])),(l()(),i.Z(30,0,null,1,5,\"p\",[],null,null,null,null,null)),(l()(),i._20(-1,null,[\"\\n    \"])),(l()(),i.Z(32,0,null,null,2,\"button\",[[\"color\",\"secondary\"],[\"ion-button\",\"\"],[\"round\",\"\"]],null,null,null,An.b,An.a)),i.Y(33,1097728,null,0,Rn.a,[[8,\"\"],Ql.a,i.j,i.z],{color:[0,\"color\"],round:[1,\"round\"]},null),(l()(),i._20(-1,0,[\"Secondary\"])),(l()(),i._20(-1,null,[\"\\n  \"])),(l()(),i._20(-1,1,[\"\\n\\n  \"])),(l()(),i.Z(37,0,null,1,5,\"p\",[],null,null,null,null,null)),(l()(),i._20(-1,null,[\"\\n    \"])),(l()(),i.Z(39,0,null,null,2,\"button\",[[\"color\",\"danger\"],[\"ion-button\",\"\"],[\"round\",\"\"]],null,null,null,An.b,An.a)),i.Y(40,1097728,null,0,Rn.a,[[8,\"\"],Ql.a,i.j,i.z],{color:[0,\"color\"],round:[1,\"round\"]},null),(l()(),i._20(-1,0,[\"Danger\"])),(l()(),i._20(-1,null,[\"\\n  \"])),(l()(),i._20(-1,1,[\"\\n\\n  \"])),(l()(),i.Z(44,0,null,1,5,\"p\",[],null,null,null,null,null)),(l()(),i._20(-1,null,[\"\\n    \"])),(l()(),i.Z(46,0,null,null,2,\"button\",[[\"color\",\"dark\"],[\"ion-button\",\"\"],[\"round\",\"\"]],null,null,null,An.b,An.a)),i.Y(47,1097728,null,0,Rn.a,[[8,\"\"],Ql.a,i.j,i.z],{color:[0,\"color\"],round:[1,\"round\"]},null),(l()(),i._20(-1,0,[\"Dark\"])),(l()(),i._20(-1,null,[\"\\n  \"])),(l()(),i._20(-1,1,[\"\\n\"])),(l()(),i._20(-1,null,[\"\\n\"]))],function(l,n){l(n,19,0,\"light\",\"\"),l(n,26,0,\"\"),l(n,33,0,\"secondary\",\"\"),l(n,40,0,\"danger\",\"\"),l(n,47,0,\"dark\",\"\")},function(l,n){l(n,4,0,i._13(n,5)._hidden,i._13(n,5)._sbPadding),l(n,13,0,i._13(n,14).statusbarPadding,i._13(n,14)._hasRefresher)})},ju)),i.Y(1,49152,null,0,z,[],null,null)],null,null)},{},{},[]),zu=i.X({encapsulation:2,styles:[],data:{}}),ku=i.V(\"ng-component\",k,function(l){return i._22(0,[(l()(),i.Z(0,0,null,null,1,\"ng-component\",[],null,null,null,function(l){return i._22(0,[(l()(),i._20(-1,null,[\"\\n\"])),(l()(),i.Z(1,0,null,null,10,\"ion-header\",[],null,null,null,null,null)),i.Y(2,16384,null,0,jn.a,[Ql.a,i.j,i.z,[2,fn.a]],null,null),(l()(),i._20(-1,null,[\"\\n  \"])),(l()(),i.Z(4,0,null,null,6,\"ion-navbar\",[[\"class\",\"toolbar\"]],[[8,\"hidden\",0],[2,\"statusbar-padding\",null]],null,null,Fn.b,Fn.a)),i.Y(5,49152,null,0,Pn.a,[Yn.a,[2,fn.a],[2,Ln.a],Ql.a,i.j,i.z],null,null),(l()(),i._20(-1,3,[\"\\n    \"])),(l()(),i.Z(7,0,null,3,2,\"ion-title\",[],null,null,null,vn.b,vn.a)),i.Y(8,49152,null,0,yn.a,[Ql.a,i.j,i.z,[2,kn.a],[2,Pn.a]],null,null),(l()(),i._20(-1,0,[\"Button Sizes\"])),(l()(),i._20(-1,3,[\"\\n  \"])),(l()(),i._20(-1,null,[\"\\n\"])),(l()(),i._20(-1,null,[\"\\n\\n\"])),(l()(),i.Z(13,0,null,null,37,\"ion-content\",[[\"padding\",\"\"]],[[2,\"statusbar-padding\",null],[2,\"has-refresher\",null]],null,null,Cn.b,Cn.a)),i.Y(14,4374528,null,0,wn.a,[Ql.a,on.a,_n.a,i.j,i.z,Yn.a,Zn.a,i.u,[2,fn.a],[2,Ln.a]],null,null),(l()(),i._20(-1,1,[\"\\n  \"])),(l()(),i.Z(16,0,null,1,5,\"p\",[],null,null,null,null,null)),(l()(),i._20(-1,null,[\"\\n    \"])),(l()(),i.Z(18,0,null,null,2,\"button\",[[\"color\",\"light\"],[\"ion-button\",\"\"],[\"small\",\"\"]],null,null,null,An.b,An.a)),i.Y(19,1097728,null,0,Rn.a,[[8,\"\"],Ql.a,i.j,i.z],{color:[0,\"color\"],small:[1,\"small\"]},null),(l()(),i._20(-1,0,[\"Light Small\"])),(l()(),i._20(-1,null,[\"\\n  \"])),(l()(),i._20(-1,1,[\"\\n  \"])),(l()(),i.Z(23,0,null,1,5,\"p\",[],null,null,null,null,null)),(l()(),i._20(-1,null,[\"\\n    \"])),(l()(),i.Z(25,0,null,null,2,\"button\",[[\"ion-button\",\"\"],[\"small\",\"\"]],null,null,null,An.b,An.a)),i.Y(26,1097728,null,0,Rn.a,[[8,\"\"],Ql.a,i.j,i.z],{small:[0,\"small\"]},null),(l()(),i._20(-1,0,[\"Default Small\"])),(l()(),i._20(-1,null,[\"\\n  \"])),(l()(),i._20(-1,1,[\"\\n  \"])),(l()(),i.Z(30,0,null,1,5,\"p\",[],null,null,null,null,null)),(l()(),i._20(-1,null,[\"\\n    \"])),(l()(),i.Z(32,0,null,null,2,\"button\",[[\"color\",\"secondary\"],[\"ion-button\",\"\"]],null,null,null,An.b,An.a)),i.Y(33,1097728,null,0,Rn.a,[[8,\"\"],Ql.a,i.j,i.z],{color:[0,\"color\"]},null),(l()(),i._20(-1,0,[\"Secondary Medium\"])),(l()(),i._20(-1,null,[\"\\n  \"])),(l()(),i._20(-1,1,[\"\\n\\n  \"])),(l()(),i.Z(37,0,null,1,5,\"p\",[],null,null,null,null,null)),(l()(),i._20(-1,null,[\"\\n    \"])),(l()(),i.Z(39,0,null,null,2,\"button\",[[\"color\",\"danger\"],[\"ion-button\",\"\"],[\"medium\",\"\"]],null,null,null,An.b,An.a)),i.Y(40,1097728,null,0,Rn.a,[[8,\"\"],Ql.a,i.j,i.z],{color:[0,\"color\"]},null),(l()(),i._20(-1,0,[\"Danger Medium\"])),(l()(),i._20(-1,null,[\"\\n  \"])),(l()(),i._20(-1,1,[\"\\n  \"])),(l()(),i.Z(44,0,null,1,5,\"p\",[],null,null,null,null,null)),(l()(),i._20(-1,null,[\"\\n    \"])),(l()(),i.Z(46,0,null,null,2,\"button\",[[\"color\",\"dark\"],[\"ion-button\",\"\"],[\"large\",\"\"]],null,null,null,An.b,An.a)),i.Y(47,1097728,null,0,Rn.a,[[8,\"\"],Ql.a,i.j,i.z],{color:[0,\"color\"],large:[1,\"large\"]},null),(l()(),i._20(-1,0,[\"Dark Large\"])),(l()(),i._20(-1,null,[\"\\n  \"])),(l()(),i._20(-1,1,[\"\\n\"])),(l()(),i._20(-1,null,[\"\\n\"]))],function(l,n){l(n,19,0,\"light\",\"\"),l(n,26,0,\"\"),l(n,33,0,\"secondary\"),l(n,40,0,\"danger\"),l(n,47,0,\"dark\",\"\")},function(l,n){l(n,4,0,i._13(n,5)._hidden,i._13(n,5)._sbPadding),l(n,13,0,i._13(n,14).statusbarPadding,i._13(n,14)._hasRefresher)})},zu)),i.Y(1,49152,null,0,k,[],null,null)],null,null)},{},{},[]),vu=u(98),yu=i.X({encapsulation:2,styles:[],data:{}}),Pu=i.V(\"ng-component\",v,function(l){return i._22(0,[(l()(),i.Z(0,0,null,null,1,\"ng-component\",[],null,null,null,function(l){return i._22(0,[(l()(),i.Z(0,0,null,null,10,\"ion-header\",[],null,null,null,null,null)),i.Y(1,16384,null,0,jn.a,[Ql.a,i.j,i.z,[2,fn.a]],null,null),(l()(),i._20(-1,null,[\"\\n  \"])),(l()(),i.Z(3,0,null,null,6,\"ion-navbar\",[[\"class\",\"toolbar\"]],[[8,\"hidden\",0],[2,\"statusbar-padding\",null]],null,null,Fn.b,Fn.a)),i.Y(4,49152,null,0,Pn.a,[Yn.a,[2,fn.a],[2,Ln.a],Ql.a,i.j,i.z],null,null),(l()(),i._20(-1,3,[\"\\n    \"])),(l()(),i.Z(6,0,null,3,2,\"ion-title\",[],null,null,null,vn.b,vn.a)),i.Y(7,49152,null,0,yn.a,[Ql.a,i.j,i.z,[2,kn.a],[2,Pn.a]],null,null),(l()(),i._20(-1,0,[\"\\n      FABs\\n    \"])),(l()(),i._20(-1,3,[\"\\n  \"])),(l()(),i._20(-1,null,[\"\\n\"])),(l()(),i._20(-1,null,[\"\\n\\n\"])),(l()(),i.Z(12,0,null,null,208,\"ion-content\",[],[[2,\"statusbar-padding\",null],[2,\"has-refresher\",null]],null,null,Cn.b,Cn.a)),i.Y(13,4374528,null,0,wn.a,[Ql.a,on.a,_n.a,i.j,i.z,Yn.a,Zn.a,i.u,[2,fn.a],[2,Ln.a]],null,null),(l()(),i._20(-1,1,[\"\\n\\n  \"])),(l()(),i.Z(15,0,null,0,34,\"ion-fab\",[[\"edge\",\"\"],[\"right\",\"\"],[\"top\",\"\"]],null,null,null,cn.b,cn.a)),i.Y(16,1228800,null,2,rn.a,[on.a],null,null),i._18(335544320,1,{_mainButton:0}),i._18(603979776,2,{_fabLists:1}),(l()(),i._20(-1,0,[\"\\n    \"])),(l()(),i.Z(20,0,null,0,3,\"button\",[[\"color\",\"vibrant\"],[\"ion-fab\",\"\"],[\"mini\",\"\"]],null,null,null,dn.b,dn.a)),i.Y(21,49152,[[1,4]],0,bn.a,[Ql.a,i.j,i.z],{color:[0,\"color\"]},null),(l()(),i.Z(22,0,null,0,1,\"ion-icon\",[[\"name\",\"add\"],[\"role\",\"img\"]],[[2,\"hide\",null]],null,null,null,null)),i.Y(23,147456,null,0,mn.a,[Ql.a,i.j,i.z],{name:[0,\"name\"]},null),(l()(),i._20(-1,0,[\"\\n    \"])),(l()(),i.Z(25,0,null,0,23,\"ion-fab-list\",[],null,null,null,null,null)),i.Y(26,16384,[[2,4]],1,vu.a,[i.j,i.z,Ql.a,on.a],null,null),i._18(603979776,3,{_setbuttons:1}),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i.Z(29,0,null,null,3,\"button\",[[\"ion-fab\",\"\"]],null,null,null,dn.b,dn.a)),i.Y(30,49152,[[3,4],[1,4]],0,bn.a,[Ql.a,i.j,i.z],null,null),(l()(),i.Z(31,0,null,0,1,\"ion-icon\",[[\"name\",\"logo-facebook\"],[\"role\",\"img\"]],[[2,\"hide\",null]],null,null,null,null)),i.Y(32,147456,null,0,mn.a,[Ql.a,i.j,i.z],{name:[0,\"name\"]},null),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i.Z(34,0,null,null,3,\"button\",[[\"ion-fab\",\"\"]],null,null,null,dn.b,dn.a)),i.Y(35,49152,[[3,4],[1,4]],0,bn.a,[Ql.a,i.j,i.z],null,null),(l()(),i.Z(36,0,null,0,1,\"ion-icon\",[[\"name\",\"logo-twitter\"],[\"role\",\"img\"]],[[2,\"hide\",null]],null,null,null,null)),i.Y(37,147456,null,0,mn.a,[Ql.a,i.j,i.z],{name:[0,\"name\"]},null),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i.Z(39,0,null,null,3,\"button\",[[\"ion-fab\",\"\"]],null,null,null,dn.b,dn.a)),i.Y(40,49152,[[3,4],[1,4]],0,bn.a,[Ql.a,i.j,i.z],null,null),(l()(),i.Z(41,0,null,0,1,\"ion-icon\",[[\"name\",\"logo-vimeo\"],[\"role\",\"img\"]],[[2,\"hide\",null]],null,null,null,null)),i.Y(42,147456,null,0,mn.a,[Ql.a,i.j,i.z],{name:[0,\"name\"]},null),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i.Z(44,0,null,null,3,\"button\",[[\"ion-fab\",\"\"]],null,null,null,dn.b,dn.a)),i.Y(45,49152,[[3,4],[1,4]],0,bn.a,[Ql.a,i.j,i.z],null,null),(l()(),i.Z(46,0,null,0,1,\"ion-icon\",[[\"name\",\"logo-googleplus\"],[\"role\",\"img\"]],[[2,\"hide\",null]],null,null,null,null)),i.Y(47,147456,null,0,mn.a,[Ql.a,i.j,i.z],{name:[0,\"name\"]},null),(l()(),i._20(-1,null,[\"\\n    \"])),(l()(),i._20(-1,0,[\"\\n  \"])),(l()(),i._20(-1,1,[\"\\n\\n  \"])),(l()(),i.Z(51,0,null,0,34,\"ion-fab\",[[\"bottom\",\"\"],[\"right\",\"\"]],null,null,null,cn.b,cn.a)),i.Y(52,1228800,null,2,rn.a,[on.a],null,null),i._18(335544320,4,{_mainButton:0}),i._18(603979776,5,{_fabLists:1}),(l()(),i._20(-1,0,[\"\\n    \"])),(l()(),i.Z(56,0,null,0,3,\"button\",[[\"color\",\"light\"],[\"ion-fab\",\"\"]],null,null,null,dn.b,dn.a)),i.Y(57,49152,[[4,4]],0,bn.a,[Ql.a,i.j,i.z],{color:[0,\"color\"]},null),(l()(),i.Z(58,0,null,0,1,\"ion-icon\",[[\"name\",\"arrow-dropleft\"],[\"role\",\"img\"]],[[2,\"hide\",null]],null,null,null,null)),i.Y(59,147456,null,0,mn.a,[Ql.a,i.j,i.z],{name:[0,\"name\"]},null),(l()(),i._20(-1,0,[\"\\n    \"])),(l()(),i.Z(61,0,null,0,23,\"ion-fab-list\",[[\"side\",\"left\"]],null,null,null,null,null)),i.Y(62,16384,[[5,4]],1,vu.a,[i.j,i.z,Ql.a,on.a],null,null),i._18(603979776,6,{_setbuttons:1}),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i.Z(65,0,null,null,3,\"button\",[[\"ion-fab\",\"\"]],null,null,null,dn.b,dn.a)),i.Y(66,49152,[[6,4],[4,4]],0,bn.a,[Ql.a,i.j,i.z],null,null),(l()(),i.Z(67,0,null,0,1,\"ion-icon\",[[\"name\",\"logo-facebook\"],[\"role\",\"img\"]],[[2,\"hide\",null]],null,null,null,null)),i.Y(68,147456,null,0,mn.a,[Ql.a,i.j,i.z],{name:[0,\"name\"]},null),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i.Z(70,0,null,null,3,\"button\",[[\"ion-fab\",\"\"]],null,null,null,dn.b,dn.a)),i.Y(71,49152,[[6,4],[4,4]],0,bn.a,[Ql.a,i.j,i.z],null,null),(l()(),i.Z(72,0,null,0,1,\"ion-icon\",[[\"name\",\"logo-twitter\"],[\"role\",\"img\"]],[[2,\"hide\",null]],null,null,null,null)),i.Y(73,147456,null,0,mn.a,[Ql.a,i.j,i.z],{name:[0,\"name\"]},null),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i.Z(75,0,null,null,3,\"button\",[[\"ion-fab\",\"\"]],null,null,null,dn.b,dn.a)),i.Y(76,49152,[[6,4],[4,4]],0,bn.a,[Ql.a,i.j,i.z],null,null),(l()(),i.Z(77,0,null,0,1,\"ion-icon\",[[\"name\",\"logo-vimeo\"],[\"role\",\"img\"]],[[2,\"hide\",null]],null,null,null,null)),i.Y(78,147456,null,0,mn.a,[Ql.a,i.j,i.z],{name:[0,\"name\"]},null),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i.Z(80,0,null,null,3,\"button\",[[\"ion-fab\",\"\"]],null,null,null,dn.b,dn.a)),i.Y(81,49152,[[6,4],[4,4]],0,bn.a,[Ql.a,i.j,i.z],null,null),(l()(),i.Z(82,0,null,0,1,\"ion-icon\",[[\"name\",\"logo-googleplus\"],[\"role\",\"img\"]],[[2,\"hide\",null]],null,null,null,null)),i.Y(83,147456,null,0,mn.a,[Ql.a,i.j,i.z],{name:[0,\"name\"]},null),(l()(),i._20(-1,null,[\"\\n    \"])),(l()(),i._20(-1,0,[\"\\n  \"])),(l()(),i._20(-1,1,[\"\\n\\n  \"])),(l()(),i.Z(87,0,null,0,34,\"ion-fab\",[[\"left\",\"\"],[\"top\",\"\"]],null,null,null,cn.b,cn.a)),i.Y(88,1228800,null,2,rn.a,[on.a],null,null),i._18(335544320,7,{_mainButton:0}),i._18(603979776,8,{_fabLists:1}),(l()(),i._20(-1,0,[\"\\n    \"])),(l()(),i.Z(92,0,null,0,3,\"button\",[[\"color\",\"secondary\"],[\"ion-fab\",\"\"]],null,null,null,dn.b,dn.a)),i.Y(93,49152,[[7,4]],0,bn.a,[Ql.a,i.j,i.z],{color:[0,\"color\"]},null),(l()(),i.Z(94,0,null,0,1,\"ion-icon\",[[\"name\",\"arrow-dropright\"],[\"role\",\"img\"]],[[2,\"hide\",null]],null,null,null,null)),i.Y(95,147456,null,0,mn.a,[Ql.a,i.j,i.z],{name:[0,\"name\"]},null),(l()(),i._20(-1,0,[\"\\n    \"])),(l()(),i.Z(97,0,null,0,23,\"ion-fab-list\",[[\"side\",\"right\"]],null,null,null,null,null)),i.Y(98,16384,[[8,4]],1,vu.a,[i.j,i.z,Ql.a,on.a],null,null),i._18(603979776,9,{_setbuttons:1}),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i.Z(101,0,null,null,3,\"button\",[[\"ion-fab\",\"\"]],null,null,null,dn.b,dn.a)),i.Y(102,49152,[[9,4],[7,4]],0,bn.a,[Ql.a,i.j,i.z],null,null),(l()(),i.Z(103,0,null,0,1,\"ion-icon\",[[\"name\",\"logo-facebook\"],[\"role\",\"img\"]],[[2,\"hide\",null]],null,null,null,null)),i.Y(104,147456,null,0,mn.a,[Ql.a,i.j,i.z],{name:[0,\"name\"]},null),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i.Z(106,0,null,null,3,\"button\",[[\"ion-fab\",\"\"]],null,null,null,dn.b,dn.a)),i.Y(107,49152,[[9,4],[7,4]],0,bn.a,[Ql.a,i.j,i.z],null,null),(l()(),i.Z(108,0,null,0,1,\"ion-icon\",[[\"name\",\"logo-twitter\"],[\"role\",\"img\"]],[[2,\"hide\",null]],null,null,null,null)),i.Y(109,147456,null,0,mn.a,[Ql.a,i.j,i.z],{name:[0,\"name\"]},null),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i.Z(111,0,null,null,3,\"button\",[[\"ion-fab\",\"\"]],null,null,null,dn.b,dn.a)),i.Y(112,49152,[[9,4],[7,4]],0,bn.a,[Ql.a,i.j,i.z],null,null),(l()(),i.Z(113,0,null,0,1,\"ion-icon\",[[\"name\",\"logo-vimeo\"],[\"role\",\"img\"]],[[2,\"hide\",null]],null,null,null,null)),i.Y(114,147456,null,0,mn.a,[Ql.a,i.j,i.z],{name:[0,\"name\"]},null),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i.Z(116,0,null,null,3,\"button\",[[\"ion-fab\",\"\"]],null,null,null,dn.b,dn.a)),i.Y(117,49152,[[9,4],[7,4]],0,bn.a,[Ql.a,i.j,i.z],null,null),(l()(),i.Z(118,0,null,0,1,\"ion-icon\",[[\"name\",\"logo-googleplus\"],[\"role\",\"img\"]],[[2,\"hide\",null]],null,null,null,null)),i.Y(119,147456,null,0,mn.a,[Ql.a,i.j,i.z],{name:[0,\"name\"]},null),(l()(),i._20(-1,null,[\"\\n    \"])),(l()(),i._20(-1,0,[\"\\n  \"])),(l()(),i._20(-1,1,[\"\\n\\n  \"])),(l()(),i.Z(123,0,null,0,34,\"ion-fab\",[[\"bottom\",\"\"],[\"left\",\"\"]],null,null,null,cn.b,cn.a)),i.Y(124,1228800,null,2,rn.a,[on.a],null,null),i._18(335544320,10,{_mainButton:0}),i._18(603979776,11,{_fabLists:1}),(l()(),i._20(-1,0,[\"\\n    \"])),(l()(),i.Z(128,0,null,0,3,\"button\",[[\"color\",\"dark\"],[\"ion-fab\",\"\"]],null,null,null,dn.b,dn.a)),i.Y(129,49152,[[10,4]],0,bn.a,[Ql.a,i.j,i.z],{color:[0,\"color\"]},null),(l()(),i.Z(130,0,null,0,1,\"ion-icon\",[[\"name\",\"arrow-dropup\"],[\"role\",\"img\"]],[[2,\"hide\",null]],null,null,null,null)),i.Y(131,147456,null,0,mn.a,[Ql.a,i.j,i.z],{name:[0,\"name\"]},null),(l()(),i._20(-1,0,[\"\\n    \"])),(l()(),i.Z(133,0,null,0,23,\"ion-fab-list\",[[\"side\",\"top\"]],null,null,null,null,null)),i.Y(134,16384,[[11,4]],1,vu.a,[i.j,i.z,Ql.a,on.a],null,null),i._18(603979776,12,{_setbuttons:1}),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i.Z(137,0,null,null,3,\"button\",[[\"ion-fab\",\"\"]],null,null,null,dn.b,dn.a)),i.Y(138,49152,[[12,4],[10,4]],0,bn.a,[Ql.a,i.j,i.z],null,null),(l()(),i.Z(139,0,null,0,1,\"ion-icon\",[[\"name\",\"logo-facebook\"],[\"role\",\"img\"]],[[2,\"hide\",null]],null,null,null,null)),i.Y(140,147456,null,0,mn.a,[Ql.a,i.j,i.z],{name:[0,\"name\"]},null),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i.Z(142,0,null,null,3,\"button\",[[\"ion-fab\",\"\"]],null,null,null,dn.b,dn.a)),i.Y(143,49152,[[12,4],[10,4]],0,bn.a,[Ql.a,i.j,i.z],null,null),(l()(),i.Z(144,0,null,0,1,\"ion-icon\",[[\"name\",\"logo-twitter\"],[\"role\",\"img\"]],[[2,\"hide\",null]],null,null,null,null)),i.Y(145,147456,null,0,mn.a,[Ql.a,i.j,i.z],{name:[0,\"name\"]},null),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i.Z(147,0,null,null,3,\"button\",[[\"ion-fab\",\"\"]],null,null,null,dn.b,dn.a)),i.Y(148,49152,[[12,4],[10,4]],0,bn.a,[Ql.a,i.j,i.z],null,null),(l()(),i.Z(149,0,null,0,1,\"ion-icon\",[[\"name\",\"logo-vimeo\"],[\"role\",\"img\"]],[[2,\"hide\",null]],null,null,null,null)),i.Y(150,147456,null,0,mn.a,[Ql.a,i.j,i.z],{name:[0,\"name\"]},null),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i.Z(152,0,null,null,3,\"button\",[[\"ion-fab\",\"\"]],null,null,null,dn.b,dn.a)),i.Y(153,49152,[[12,4],[10,4]],0,bn.a,[Ql.a,i.j,i.z],null,null),(l()(),i.Z(154,0,null,0,1,\"ion-icon\",[[\"name\",\"logo-googleplus\"],[\"role\",\"img\"]],[[2,\"hide\",null]],null,null,null,null)),i.Y(155,147456,null,0,mn.a,[Ql.a,i.j,i.z],{name:[0,\"name\"]},null),(l()(),i._20(-1,null,[\"\\n    \"])),(l()(),i._20(-1,0,[\"\\n  \"])),(l()(),i._20(-1,1,[\"\\n\\n  \"])),(l()(),i.Z(159,0,null,0,49,\"ion-fab\",[[\"center\",\"\"],[\"middle\",\"\"]],null,null,null,cn.b,cn.a)),i.Y(160,1228800,null,2,rn.a,[on.a],null,null),i._18(335544320,13,{_mainButton:0}),i._18(603979776,14,{_fabLists:1}),(l()(),i._20(-1,0,[\"\\n    \"])),(l()(),i.Z(164,0,null,0,3,\"button\",[[\"color\",\"danger\"],[\"ion-fab\",\"\"]],null,null,null,dn.b,dn.a)),i.Y(165,49152,[[13,4]],0,bn.a,[Ql.a,i.j,i.z],{color:[0,\"color\"]},null),(l()(),i.Z(166,0,null,0,1,\"ion-icon\",[[\"name\",\"md-share\"],[\"role\",\"img\"]],[[2,\"hide\",null]],null,null,null,null)),i.Y(167,147456,null,0,mn.a,[Ql.a,i.j,i.z],{name:[0,\"name\"]},null),(l()(),i._20(-1,0,[\"\\n    \"])),(l()(),i.Z(169,0,null,0,8,\"ion-fab-list\",[[\"side\",\"top\"]],null,null,null,null,null)),i.Y(170,16384,[[14,4]],1,vu.a,[i.j,i.z,Ql.a,on.a],null,null),i._18(603979776,15,{_setbuttons:1}),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i.Z(173,0,null,null,3,\"button\",[[\"color\",\"primary\"],[\"ion-fab\",\"\"]],null,null,null,dn.b,dn.a)),i.Y(174,49152,[[15,4],[13,4]],0,bn.a,[Ql.a,i.j,i.z],{color:[0,\"color\"]},null),(l()(),i.Z(175,0,null,0,1,\"ion-icon\",[[\"name\",\"logo-vimeo\"],[\"role\",\"img\"]],[[2,\"hide\",null]],null,null,null,null)),i.Y(176,147456,null,0,mn.a,[Ql.a,i.j,i.z],{name:[0,\"name\"]},null),(l()(),i._20(-1,null,[\"\\n    \"])),(l()(),i._20(-1,0,[\"\\n    \"])),(l()(),i.Z(179,0,null,0,8,\"ion-fab-list\",[[\"side\",\"bottom\"]],null,null,null,null,null)),i.Y(180,16384,[[14,4]],1,vu.a,[i.j,i.z,Ql.a,on.a],null,null),i._18(603979776,16,{_setbuttons:1}),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i.Z(183,0,null,null,3,\"button\",[[\"color\",\"secondary\"],[\"ion-fab\",\"\"]],null,null,null,dn.b,dn.a)),i.Y(184,49152,[[16,4],[13,4]],0,bn.a,[Ql.a,i.j,i.z],{color:[0,\"color\"]},null),(l()(),i.Z(185,0,null,0,1,\"ion-icon\",[[\"name\",\"logo-facebook\"],[\"role\",\"img\"]],[[2,\"hide\",null]],null,null,null,null)),i.Y(186,147456,null,0,mn.a,[Ql.a,i.j,i.z],{name:[0,\"name\"]},null),(l()(),i._20(-1,null,[\"\\n    \"])),(l()(),i._20(-1,0,[\"\\n    \"])),(l()(),i.Z(189,0,null,0,8,\"ion-fab-list\",[[\"side\",\"left\"]],null,null,null,null,null)),i.Y(190,16384,[[14,4]],1,vu.a,[i.j,i.z,Ql.a,on.a],null,null),i._18(603979776,17,{_setbuttons:1}),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i.Z(193,0,null,null,3,\"button\",[[\"color\",\"light\"],[\"ion-fab\",\"\"]],null,null,null,dn.b,dn.a)),i.Y(194,49152,[[17,4],[13,4]],0,bn.a,[Ql.a,i.j,i.z],{color:[0,\"color\"]},null),(l()(),i.Z(195,0,null,0,1,\"ion-icon\",[[\"name\",\"logo-googleplus\"],[\"role\",\"img\"]],[[2,\"hide\",null]],null,null,null,null)),i.Y(196,147456,null,0,mn.a,[Ql.a,i.j,i.z],{name:[0,\"name\"]},null),(l()(),i._20(-1,null,[\"\\n    \"])),(l()(),i._20(-1,0,[\"\\n    \"])),(l()(),i.Z(199,0,null,0,8,\"ion-fab-list\",[[\"side\",\"right\"]],null,null,null,null,null)),i.Y(200,16384,[[14,4]],1,vu.a,[i.j,i.z,Ql.a,on.a],null,null),i._18(603979776,18,{_setbuttons:1}),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i.Z(203,0,null,null,3,\"button\",[[\"color\",\"dark\"],[\"ion-fab\",\"\"]],null,null,null,dn.b,dn.a)),i.Y(204,49152,[[18,4],[13,4]],0,bn.a,[Ql.a,i.j,i.z],{color:[0,\"color\"]},null),(l()(),i.Z(205,0,null,0,1,\"ion-icon\",[[\"name\",\"logo-twitter\"],[\"role\",\"img\"]],[[2,\"hide\",null]],null,null,null,null)),i.Y(206,147456,null,0,mn.a,[Ql.a,i.j,i.z],{name:[0,\"name\"]},null),(l()(),i._20(-1,null,[\"\\n    \"])),(l()(),i._20(-1,0,[\"\\n  \"])),(l()(),i._20(-1,1,[\"\\n\\n  \"])),(l()(),i.Z(210,0,null,0,9,\"ion-fab\",[[\"middle\",\"\"],[\"right\",\"\"]],null,null,null,cn.b,cn.a)),i.Y(211,1228800,null,2,rn.a,[on.a],null,null),i._18(335544320,19,{_mainButton:0}),i._18(603979776,20,{_fabLists:1}),(l()(),i._20(-1,0,[\"\\n    \"])),(l()(),i.Z(215,0,null,0,3,\"button\",[[\"color\",\"danger\"],[\"ion-fab\",\"\"]],null,null,null,dn.b,dn.a)),i.Y(216,49152,[[19,4]],0,bn.a,[Ql.a,i.j,i.z],{color:[0,\"color\"]},null),(l()(),i.Z(217,0,null,0,1,\"ion-icon\",[[\"name\",\"add\"],[\"role\",\"img\"]],[[2,\"hide\",null]],null,null,null,null)),i.Y(218,147456,null,0,mn.a,[Ql.a,i.j,i.z],{name:[0,\"name\"]},null),(l()(),i._20(-1,0,[\"\\n  \"])),(l()(),i._20(-1,1,[\"\\n\"])),(l()(),i._20(-1,null,[\"\\n\"]))],function(l,n){l(n,21,0,\"vibrant\"),l(n,23,0,\"add\"),l(n,32,0,\"logo-facebook\"),l(n,37,0,\"logo-twitter\"),l(n,42,0,\"logo-vimeo\"),l(n,47,0,\"logo-googleplus\"),l(n,57,0,\"light\"),l(n,59,0,\"arrow-dropleft\"),l(n,68,0,\"logo-facebook\"),l(n,73,0,\"logo-twitter\"),l(n,78,0,\"logo-vimeo\"),l(n,83,0,\"logo-googleplus\"),l(n,93,0,\"secondary\"),l(n,95,0,\"arrow-dropright\"),l(n,104,0,\"logo-facebook\"),l(n,109,0,\"logo-twitter\"),l(n,114,0,\"logo-vimeo\"),l(n,119,0,\"logo-googleplus\"),l(n,129,0,\"dark\"),l(n,131,0,\"arrow-dropup\"),l(n,140,0,\"logo-facebook\"),l(n,145,0,\"logo-twitter\"),l(n,150,0,\"logo-vimeo\"),l(n,155,0,\"logo-googleplus\"),l(n,165,0,\"danger\"),l(n,167,0,\"md-share\"),l(n,174,0,\"primary\"),l(n,176,0,\"logo-vimeo\"),l(n,184,0,\"secondary\"),l(n,186,0,\"logo-facebook\"),l(n,194,0,\"light\"),l(n,196,0,\"logo-googleplus\"),l(n,204,0,\"dark\"),l(n,206,0,\"logo-twitter\"),l(n,216,0,\"danger\"),l(n,218,0,\"add\")},function(l,n){l(n,3,0,i._13(n,4)._hidden,i._13(n,4)._sbPadding),l(n,12,0,i._13(n,13).statusbarPadding,i._13(n,13)._hasRefresher),l(n,22,0,i._13(n,23)._hidden),l(n,31,0,i._13(n,32)._hidden),l(n,36,0,i._13(n,37)._hidden),l(n,41,0,i._13(n,42)._hidden),l(n,46,0,i._13(n,47)._hidden),l(n,58,0,i._13(n,59)._hidden),l(n,67,0,i._13(n,68)._hidden),l(n,72,0,i._13(n,73)._hidden),l(n,77,0,i._13(n,78)._hidden),l(n,82,0,i._13(n,83)._hidden),l(n,94,0,i._13(n,95)._hidden),l(n,103,0,i._13(n,104)._hidden),l(n,108,0,i._13(n,109)._hidden),l(n,113,0,i._13(n,114)._hidden),l(n,118,0,i._13(n,119)._hidden),l(n,130,0,i._13(n,131)._hidden),l(n,139,0,i._13(n,140)._hidden),l(n,144,0,i._13(n,145)._hidden),l(n,149,0,i._13(n,150)._hidden),l(n,154,0,i._13(n,155)._hidden),l(n,166,0,i._13(n,167)._hidden),l(n,175,0,i._13(n,176)._hidden),l(n,185,0,i._13(n,186)._hidden),l(n,195,0,i._13(n,196)._hidden),l(n,205,0,i._13(n,206)._hidden),l(n,217,0,i._13(n,218)._hidden)})},yu)),i.Y(1,49152,null,0,v,[],null,null)],null,null)},{},{},[]),Cu=u(123),wu=i.X({encapsulation:2,styles:[],data:{}}),Lu=i.V(\"ng-component\",y,function(l){return i._22(0,[(l()(),i.Z(0,0,null,null,1,\"ng-component\",[],null,null,null,function(l){return i._22(0,[(l()(),i._20(-1,null,[\"\\n\"])),(l()(),i.Z(1,0,null,null,10,\"ion-header\",[],null,null,null,null,null)),i.Y(2,16384,null,0,jn.a,[Ql.a,i.j,i.z,[2,fn.a]],null,null),(l()(),i._20(-1,null,[\"\\n  \"])),(l()(),i.Z(4,0,null,null,6,\"ion-navbar\",[[\"class\",\"toolbar\"]],[[8,\"hidden\",0],[2,\"statusbar-padding\",null]],null,null,Fn.b,Fn.a)),i.Y(5,49152,null,0,Pn.a,[Yn.a,[2,fn.a],[2,Ln.a],Ql.a,i.j,i.z],null,null),(l()(),i._20(-1,3,[\"\\n    \"])),(l()(),i.Z(7,0,null,3,2,\"ion-title\",[],null,null,null,vn.b,vn.a)),i.Y(8,49152,null,0,yn.a,[Ql.a,i.j,i.z,[2,kn.a],[2,Pn.a]],null,null),(l()(),i._20(-1,0,[\"Map Card\"])),(l()(),i._20(-1,3,[\"\\n  \"])),(l()(),i._20(-1,null,[\"\\n\"])),(l()(),i._20(-1,null,[\"\\n\\n\"])),(l()(),i.Z(13,0,null,null,239,\"ion-content\",[[\"class\",\"cards-bg\"]],[[2,\"statusbar-padding\",null],[2,\"has-refresher\",null]],null,null,Cn.b,Cn.a)),i.Y(14,4374528,null,0,wn.a,[Ql.a,on.a,_n.a,i.j,i.z,Yn.a,Zn.a,i.u,[2,fn.a],[2,Ln.a]],null,null),(l()(),i._20(-1,1,[\"\\n\\n\"])),(l()(),i.Z(16,0,null,1,77,\"ion-card\",[[\"class\",\"adv-map\"]],null,null,null,null,null)),i.Y(17,16384,null,0,Qn.a,[Ql.a,i.j,i.z],null,null),(l()(),i._20(-1,null,[\"\\n  \"])),(l()(),i.Z(19,0,null,null,16,\"div\",[[\"style\",\"position: relative\"]],null,null,null,null,null)),(l()(),i._20(-1,null,[\"\\n    \"])),(l()(),i.Z(21,0,null,null,0,\"img\",[[\"src\",\"assets/img/advance-card-map-madison.png\"]],null,null,null,null,null)),(l()(),i._20(-1,null,[\"\\n    \"])),(l()(),i.Z(23,0,null,null,11,\"ion-fab\",[[\"right\",\"\"],[\"top\",\"\"]],null,null,null,cn.b,cn.a)),i.Y(24,1228800,null,2,rn.a,[on.a],null,null),i._18(335544320,1,{_mainButton:0}),i._18(603979776,2,{_fabLists:1}),(l()(),i._20(-1,0,[\"\\n      \"])),(l()(),i.Z(28,0,null,0,5,\"button\",[[\"class\",\"fab-map\"],[\"ion-fab\",\"\"]],null,null,null,dn.b,dn.a)),i.Y(29,49152,[[1,4]],0,bn.a,[Ql.a,i.j,i.z],null,null),(l()(),i._20(-1,0,[\"\\n        \"])),(l()(),i.Z(31,0,null,0,1,\"ion-icon\",[[\"name\",\"pin\"],[\"role\",\"img\"]],[[2,\"hide\",null]],null,null,null,null)),i.Y(32,147456,null,0,mn.a,[Ql.a,i.j,i.z],{name:[0,\"name\"]},null),(l()(),i._20(-1,0,[\"\\n      \"])),(l()(),i._20(-1,0,[\"\\n    \"])),(l()(),i._20(-1,null,[\"\\n  \"])),(l()(),i._20(-1,null,[\"\\n  \"])),(l()(),i.Z(37,0,null,null,15,\"ion-item\",[[\"class\",\"item item-block\"]],null,null,null,$l.b,$l.a)),i.Y(38,1097728,null,3,Kl.a,[Jl.a,Ql.a,i.j,i.z,[2,ln.a]],null,null),i._18(335544320,3,{contentLabel:0}),i._18(603979776,4,{_buttons:1}),i._18(603979776,5,{_icons:1}),i.Y(42,16384,null,0,nn.a,[],null,null),(l()(),i._20(-1,2,[\"\\n    \"])),(l()(),i.Z(44,0,null,0,1,\"ion-icon\",[[\"color\",\"subtle\"],[\"item-start\",\"\"],[\"large\",\"\"],[\"name\",\"football\"],[\"role\",\"img\"]],[[2,\"hide\",null]],null,null,null,null)),i.Y(45,147456,[[5,4]],0,mn.a,[Ql.a,i.j,i.z],{color:[0,\"color\"],name:[1,\"name\"]},null),(l()(),i._20(-1,2,[\"\\n    \"])),(l()(),i.Z(47,0,null,2,1,\"h2\",[],null,null,null,null,null)),(l()(),i._20(-1,null,[\"Museum of Football\"])),(l()(),i._20(-1,2,[\"\\n    \"])),(l()(),i.Z(50,0,null,2,1,\"p\",[],null,null,null,null,null)),(l()(),i._20(-1,null,[\"11 N. Way St, Madison, WI 53703\"])),(l()(),i._20(-1,2,[\"\\n  \"])),(l()(),i._20(-1,null,[\"\\n  \"])),(l()(),i.Z(54,0,null,null,15,\"ion-item\",[[\"class\",\"item item-block\"]],null,null,null,$l.b,$l.a)),i.Y(55,1097728,null,3,Kl.a,[Jl.a,Ql.a,i.j,i.z,[2,ln.a]],null,null),i._18(335544320,6,{contentLabel:0}),i._18(603979776,7,{_buttons:1}),i._18(603979776,8,{_icons:1}),i.Y(59,16384,null,0,nn.a,[],null,null),(l()(),i._20(-1,2,[\"\\n    \"])),(l()(),i.Z(61,0,null,0,1,\"ion-icon\",[[\"color\",\"subtle\"],[\"item-start\",\"\"],[\"large\",\"\"],[\"name\",\"wine\"],[\"role\",\"img\"]],[[2,\"hide\",null]],null,null,null,null)),i.Y(62,147456,[[8,4]],0,mn.a,[Ql.a,i.j,i.z],{color:[0,\"color\"],name:[1,\"name\"]},null),(l()(),i._20(-1,2,[\"\\n    \"])),(l()(),i.Z(64,0,null,2,1,\"h2\",[],null,null,null,null,null)),(l()(),i._20(-1,null,[\"Institute of Fine Cocktails\"])),(l()(),i._20(-1,2,[\"\\n    \"])),(l()(),i.Z(67,0,null,2,1,\"p\",[],null,null,null,null,null)),(l()(),i._20(-1,null,[\"14 S. Hop Avenue, Madison, WI 53703\"])),(l()(),i._20(-1,2,[\"\\n  \"])),(l()(),i._20(-1,null,[\"\\n  \"])),(l()(),i.Z(71,0,null,null,21,\"ion-item\",[[\"actions\",\"\"],[\"class\",\"item item-block\"]],null,null,null,$l.b,$l.a)),i.Y(72,1097728,null,3,Kl.a,[Jl.a,Ql.a,i.j,i.z,[2,ln.a]],null,null),i._18(335544320,9,{contentLabel:0}),i._18(603979776,10,{_buttons:1}),i._18(603979776,11,{_icons:1}),i.Y(76,16384,null,0,nn.a,[],null,null),(l()(),i._20(-1,2,[\"\\n    \"])),(l()(),i.Z(78,0,null,0,2,\"span\",[[\"class\",\"item-bold\"],[\"color\",\"secondary\"],[\"ion-text\",\"\"],[\"item-start\",\"\"]],null,null,null,null,null)),i.Y(79,16384,null,0,Cu.a,[Ql.a,i.j,i.z],{color:[0,\"color\"]},null),(l()(),i._20(-1,null,[\"18 min\"])),(l()(),i._20(-1,2,[\"\\n    \"])),(l()(),i.Z(82,0,null,0,2,\"span\",[[\"color\",\"subtle\"],[\"ion-text\",\"\"],[\"item-start\",\"\"]],null,null,null,null,null)),i.Y(83,16384,null,0,Cu.a,[Ql.a,i.j,i.z],{color:[0,\"color\"]},null),(l()(),i._20(-1,null,[\"(2.6 mi)\"])),(l()(),i._20(-1,2,[\"\\n    \"])),(l()(),i.Z(86,0,null,4,5,\"button\",[[\"clear\",\"\"],[\"color\",\"primary\"],[\"icon-start\",\"\"],[\"ion-button\",\"\"],[\"item-end\",\"\"]],null,null,null,An.b,An.a)),i.Y(87,1097728,[[10,4]],0,Rn.a,[[8,\"\"],Ql.a,i.j,i.z],{color:[0,\"color\"],clear:[1,\"clear\"]},null),(l()(),i._20(-1,0,[\"\\n      \"])),(l()(),i.Z(89,0,null,0,1,\"ion-icon\",[[\"name\",\"navigate\"],[\"role\",\"img\"]],[[2,\"hide\",null]],null,null,null,null)),i.Y(90,147456,null,0,mn.a,[Ql.a,i.j,i.z],{name:[0,\"name\"]},null),(l()(),i._20(-1,0,[\"\\n      Start\\n    \"])),(l()(),i._20(-1,2,[\"\\n  \"])),(l()(),i._20(-1,null,[\"\\n\\n\"])),(l()(),i._20(-1,1,[\"\\n\\n\"])),(l()(),i.Z(95,0,null,1,77,\"ion-card\",[[\"class\",\"adv-map\"]],null,null,null,null,null)),i.Y(96,16384,null,0,Qn.a,[Ql.a,i.j,i.z],null,null),(l()(),i._20(-1,null,[\"\\n  \"])),(l()(),i.Z(98,0,null,null,16,\"div\",[[\"style\",\"position: relative\"]],null,null,null,null,null)),(l()(),i._20(-1,null,[\"\\n    \"])),(l()(),i.Z(100,0,null,null,0,\"img\",[[\"src\",\"assets/img/advance-card-map-mario.png\"]],null,null,null,null,null)),(l()(),i._20(-1,null,[\"\\n\\n    \"])),(l()(),i.Z(102,0,null,null,11,\"ion-fab\",[[\"right\",\"\"],[\"top\",\"\"]],null,null,null,cn.b,cn.a)),i.Y(103,1228800,null,2,rn.a,[on.a],null,null),i._18(335544320,12,{_mainButton:0}),i._18(603979776,13,{_fabLists:1}),(l()(),i._20(-1,0,[\"\\n      \"])),(l()(),i.Z(107,0,null,0,5,\"button\",[[\"class\",\"fab-map\"],[\"color\",\"danger\"],[\"ion-fab\",\"\"]],null,null,null,dn.b,dn.a)),i.Y(108,49152,[[12,4]],0,bn.a,[Ql.a,i.j,i.z],{color:[0,\"color\"]},null),(l()(),i._20(-1,0,[\"\\n        \"])),(l()(),i.Z(110,0,null,0,1,\"ion-icon\",[[\"name\",\"pin\"],[\"role\",\"img\"]],[[2,\"hide\",null]],null,null,null,null)),i.Y(111,147456,null,0,mn.a,[Ql.a,i.j,i.z],{name:[0,\"name\"]},null),(l()(),i._20(-1,0,[\"\\n      \"])),(l()(),i._20(-1,0,[\"\\n    \"])),(l()(),i._20(-1,null,[\"\\n  \"])),(l()(),i._20(-1,null,[\"\\n  \"])),(l()(),i.Z(116,0,null,null,15,\"ion-item\",[[\"class\",\"item item-block\"]],null,null,null,$l.b,$l.a)),i.Y(117,1097728,null,3,Kl.a,[Jl.a,Ql.a,i.j,i.z,[2,ln.a]],null,null),i._18(335544320,14,{contentLabel:0}),i._18(603979776,15,{_buttons:1}),i._18(603979776,16,{_icons:1}),i.Y(121,16384,null,0,nn.a,[],null,null),(l()(),i._20(-1,2,[\"\\n    \"])),(l()(),i.Z(123,0,null,0,1,\"ion-icon\",[[\"color\",\"subtle\"],[\"item-start\",\"\"],[\"large\",\"\"],[\"name\",\"cloud\"],[\"role\",\"img\"]],[[2,\"hide\",null]],null,null,null,null)),i.Y(124,147456,[[16,4]],0,mn.a,[Ql.a,i.j,i.z],{color:[0,\"color\"],name:[1,\"name\"]},null),(l()(),i._20(-1,2,[\"\\n    \"])),(l()(),i.Z(126,0,null,2,1,\"h2\",[],null,null,null,null,null)),(l()(),i._20(-1,null,[\"Yoshi's Island\"])),(l()(),i._20(-1,2,[\"\\n    \"])),(l()(),i.Z(129,0,null,2,1,\"p\",[],null,null,null,null,null)),(l()(),i._20(-1,null,[\"Iggy Koopa\"])),(l()(),i._20(-1,2,[\"\\n  \"])),(l()(),i._20(-1,null,[\"\\n  \"])),(l()(),i.Z(133,0,null,null,15,\"ion-item\",[[\"class\",\"item item-block\"]],null,null,null,$l.b,$l.a)),i.Y(134,1097728,null,3,Kl.a,[Jl.a,Ql.a,i.j,i.z,[2,ln.a]],null,null),i._18(335544320,17,{contentLabel:0}),i._18(603979776,18,{_buttons:1}),i._18(603979776,19,{_icons:1}),i.Y(138,16384,null,0,nn.a,[],null,null),(l()(),i._20(-1,2,[\"\\n    \"])),(l()(),i.Z(140,0,null,0,1,\"ion-icon\",[[\"color\",\"subtle\"],[\"item-start\",\"\"],[\"large\",\"\"],[\"name\",\"leaf\"],[\"role\",\"img\"]],[[2,\"hide\",null]],null,null,null,null)),i.Y(141,147456,[[19,4]],0,mn.a,[Ql.a,i.j,i.z],{color:[0,\"color\"],name:[1,\"name\"]},null),(l()(),i._20(-1,2,[\"\\n    \"])),(l()(),i.Z(143,0,null,2,1,\"h2\",[],null,null,null,null,null)),(l()(),i._20(-1,null,[\"Forest of Illusion\"])),(l()(),i._20(-1,2,[\"\\n    \"])),(l()(),i.Z(146,0,null,2,1,\"p\",[],null,null,null,null,null)),(l()(),i._20(-1,null,[\"Roy Koopa\"])),(l()(),i._20(-1,2,[\"\\n  \"])),(l()(),i._20(-1,null,[\"\\n  \"])),(l()(),i.Z(150,0,null,null,21,\"ion-item\",[[\"actions\",\"\"],[\"class\",\"item item-block\"]],null,null,null,$l.b,$l.a)),i.Y(151,1097728,null,3,Kl.a,[Jl.a,Ql.a,i.j,i.z,[2,ln.a]],null,null),i._18(335544320,20,{contentLabel:0}),i._18(603979776,21,{_buttons:1}),i._18(603979776,22,{_icons:1}),i.Y(155,16384,null,0,nn.a,[],null,null),(l()(),i._20(-1,2,[\"\\n    \"])),(l()(),i.Z(157,0,null,0,2,\"span\",[[\"class\",\"item-bold\"],[\"ion-text\",\"\"],[\"item-start\",\"\"]],null,null,null,null,null)),i.Y(158,16384,null,0,Cu.a,[Ql.a,i.j,i.z],null,null),(l()(),i._20(-1,null,[\"3 hr\"])),(l()(),i._20(-1,2,[\"\\n    \"])),(l()(),i.Z(161,0,null,0,2,\"span\",[[\"color\",\"subtle\"],[\"ion-text\",\"\"],[\"item-start\",\"\"]],null,null,null,null,null)),i.Y(162,16384,null,0,Cu.a,[Ql.a,i.j,i.z],{color:[0,\"color\"]},null),(l()(),i._20(-1,null,[\"(4.8 mi)\"])),(l()(),i._20(-1,2,[\"\\n    \"])),(l()(),i.Z(165,0,null,4,5,\"button\",[[\"clear\",\"\"],[\"color\",\"danger\"],[\"icon-start\",\"\"],[\"ion-button\",\"\"],[\"item-end\",\"\"]],null,null,null,An.b,An.a)),i.Y(166,1097728,[[21,4]],0,Rn.a,[[8,\"\"],Ql.a,i.j,i.z],{color:[0,\"color\"],clear:[1,\"clear\"]},null),(l()(),i._20(-1,0,[\"\\n      \"])),(l()(),i.Z(168,0,null,0,1,\"ion-icon\",[[\"name\",\"navigate\"],[\"role\",\"img\"]],[[2,\"hide\",null]],null,null,null,null)),i.Y(169,147456,null,0,mn.a,[Ql.a,i.j,i.z],{name:[0,\"name\"]},null),(l()(),i._20(-1,0,[\"\\n      Start\\n    \"])),(l()(),i._20(-1,2,[\"\\n  \"])),(l()(),i._20(-1,null,[\"\\n\\n\"])),(l()(),i._20(-1,1,[\"\\n\\n\"])),(l()(),i.Z(174,0,null,1,77,\"ion-card\",[[\"class\",\"adv-map\"]],null,null,null,null,null)),i.Y(175,16384,null,0,Qn.a,[Ql.a,i.j,i.z],null,null),(l()(),i._20(-1,null,[\"\\n  \"])),(l()(),i.Z(177,0,null,null,16,\"div\",[[\"style\",\"position: relative\"]],null,null,null,null,null)),(l()(),i._20(-1,null,[\"\\n    \"])),(l()(),i.Z(179,0,null,null,0,\"img\",[[\"src\",\"assets/img/advance-card-map-paris.png\"]],null,null,null,null,null)),(l()(),i._20(-1,null,[\"\\n    \"])),(l()(),i.Z(181,0,null,null,11,\"ion-fab\",[[\"right\",\"\"],[\"top\",\"\"]],null,null,null,cn.b,cn.a)),i.Y(182,1228800,null,2,rn.a,[on.a],null,null),i._18(335544320,23,{_mainButton:0}),i._18(603979776,24,{_fabLists:1}),(l()(),i._20(-1,0,[\"\\n      \"])),(l()(),i.Z(186,0,null,0,5,\"button\",[[\"color\",\"secondary\"],[\"ion-fab\",\"\"]],null,null,null,dn.b,dn.a)),i.Y(187,49152,[[23,4]],0,bn.a,[Ql.a,i.j,i.z],{color:[0,\"color\"]},null),(l()(),i._20(-1,0,[\"\\n        \"])),(l()(),i.Z(189,0,null,0,1,\"ion-icon\",[[\"name\",\"pin\"],[\"role\",\"img\"]],[[2,\"hide\",null]],null,null,null,null)),i.Y(190,147456,null,0,mn.a,[Ql.a,i.j,i.z],{name:[0,\"name\"]},null),(l()(),i._20(-1,0,[\"\\n      \"])),(l()(),i._20(-1,0,[\"\\n    \"])),(l()(),i._20(-1,null,[\"\\n  \"])),(l()(),i._20(-1,null,[\"\\n  \"])),(l()(),i.Z(195,0,null,null,15,\"ion-item\",[[\"class\",\"item item-block\"]],null,null,null,$l.b,$l.a)),i.Y(196,1097728,null,3,Kl.a,[Jl.a,Ql.a,i.j,i.z,[2,ln.a]],null,null),i._18(335544320,25,{contentLabel:0}),i._18(603979776,26,{_buttons:1}),i._18(603979776,27,{_icons:1}),i.Y(200,16384,null,0,nn.a,[],null,null),(l()(),i._20(-1,2,[\"\\n    \"])),(l()(),i.Z(202,0,null,0,1,\"ion-icon\",[[\"color\",\"subtle\"],[\"item-start\",\"\"],[\"large\",\"\"],[\"name\",\"information-circle\"],[\"role\",\"img\"]],[[2,\"hide\",null]],null,null,null,null)),i.Y(203,147456,[[27,4]],0,mn.a,[Ql.a,i.j,i.z],{color:[0,\"color\"],name:[1,\"name\"]},null),(l()(),i._20(-1,2,[\"\\n    \"])),(l()(),i.Z(205,0,null,2,1,\"h2\",[],null,null,null,null,null)),(l()(),i._20(-1,null,[\"Museum of Information\"])),(l()(),i._20(-1,2,[\"\\n    \"])),(l()(),i.Z(208,0,null,2,1,\"p\",[],null,null,null,null,null)),(l()(),i._20(-1,null,[\"44 Rue de Info, 75010 Paris, France\"])),(l()(),i._20(-1,2,[\"\\n  \"])),(l()(),i._20(-1,null,[\"\\n  \"])),(l()(),i.Z(212,0,null,null,15,\"ion-item\",[[\"class\",\"item item-block\"]],null,null,null,$l.b,$l.a)),i.Y(213,1097728,null,3,Kl.a,[Jl.a,Ql.a,i.j,i.z,[2,ln.a]],null,null),i._18(335544320,28,{contentLabel:0}),i._18(603979776,29,{_buttons:1}),i._18(603979776,30,{_icons:1}),i.Y(217,16384,null,0,nn.a,[],null,null),(l()(),i._20(-1,2,[\"\\n    \"])),(l()(),i.Z(219,0,null,0,1,\"ion-icon\",[[\"color\",\"subtle\"],[\"item-start\",\"\"],[\"large\",\"\"],[\"name\",\"leaf\"],[\"role\",\"img\"]],[[2,\"hide\",null]],null,null,null,null)),i.Y(220,147456,[[30,4]],0,mn.a,[Ql.a,i.j,i.z],{color:[0,\"color\"],name:[1,\"name\"]},null),(l()(),i._20(-1,2,[\"\\n    \"])),(l()(),i.Z(222,0,null,2,1,\"h2\",[],null,null,null,null,null)),(l()(),i._20(-1,null,[\"General Pharmacy\"])),(l()(),i._20(-1,2,[\"\\n    \"])),(l()(),i.Z(225,0,null,2,1,\"p\",[],null,null,null,null,null)),(l()(),i._20(-1,null,[\"1 Avenue Faux, 75010 Paris, France\"])),(l()(),i._20(-1,2,[\"\\n  \"])),(l()(),i._20(-1,null,[\"\\n  \"])),(l()(),i.Z(229,0,null,null,21,\"ion-item\",[[\"actions\",\"\"],[\"class\",\"item item-block\"]],null,null,null,$l.b,$l.a)),i.Y(230,1097728,null,3,Kl.a,[Jl.a,Ql.a,i.j,i.z,[2,ln.a]],null,null),i._18(335544320,31,{contentLabel:0}),i._18(603979776,32,{_buttons:1}),i._18(603979776,33,{_icons:1}),i.Y(234,16384,null,0,nn.a,[],null,null),(l()(),i._20(-1,2,[\"\\n    \"])),(l()(),i.Z(236,0,null,0,2,\"span\",[[\"class\",\"item-bold\"],[\"color\",\"secondary\"],[\"ion-text\",\"\"],[\"item-start\",\"\"]],null,null,null,null,null)),i.Y(237,16384,null,0,Cu.a,[Ql.a,i.j,i.z],{color:[0,\"color\"]},null),(l()(),i._20(-1,null,[\"26 min\"])),(l()(),i._20(-1,2,[\"\\n    \"])),(l()(),i.Z(240,0,null,0,2,\"span\",[[\"color\",\"subtle\"],[\"ion-text\",\"\"],[\"item-start\",\"\"]],null,null,null,null,null)),i.Y(241,16384,null,0,Cu.a,[Ql.a,i.j,i.z],{color:[0,\"color\"]},null),(l()(),i._20(-1,null,[\"(8.1 mi)\"])),(l()(),i._20(-1,2,[\"\\n    \"])),(l()(),i.Z(244,0,null,4,5,\"button\",[[\"clear\",\"\"],[\"color\",\"secondary\"],[\"icon-start\",\"\"],[\"ion-button\",\"\"],[\"item-end\",\"\"]],null,null,null,An.b,An.a)),i.Y(245,1097728,[[32,4]],0,Rn.a,[[8,\"\"],Ql.a,i.j,i.z],{color:[0,\"color\"],clear:[1,\"clear\"]},null),(l()(),i._20(-1,0,[\"\\n      \"])),(l()(),i.Z(247,0,null,0,1,\"ion-icon\",[[\"name\",\"navigate\"],[\"role\",\"img\"]],[[2,\"hide\",null]],null,null,null,null)),i.Y(248,147456,null,0,mn.a,[Ql.a,i.j,i.z],{name:[0,\"name\"]},null),(l()(),i._20(-1,0,[\"\\n      Start\\n    \"])),(l()(),i._20(-1,2,[\"\\n  \"])),(l()(),i._20(-1,null,[\"\\n\\n\"])),(l()(),i._20(-1,1,[\"\\n\\n\\n\"])),(l()(),i._20(-1,null,[\"\\n\"]))],function(l,n){l(n,32,0,\"pin\"),l(n,45,0,\"subtle\",\"football\"),l(n,62,0,\"subtle\",\"wine\"),l(n,79,0,\"secondary\"),l(n,83,0,\"subtle\"),l(n,87,0,\"primary\",\"\"),l(n,90,0,\"navigate\"),l(n,108,0,\"danger\"),l(n,111,0,\"pin\"),l(n,124,0,\"subtle\",\"cloud\"),l(n,141,0,\"subtle\",\"leaf\"),l(n,162,0,\"subtle\"),l(n,166,0,\"danger\",\"\"),l(n,169,0,\"navigate\"),l(n,187,0,\"secondary\"),l(n,190,0,\"pin\"),l(n,203,0,\"subtle\",\"information-circle\"),l(n,220,0,\"subtle\",\"leaf\"),l(n,237,0,\"secondary\"),l(n,241,0,\"subtle\"),l(n,245,0,\"secondary\",\"\"),l(n,248,0,\"navigate\")},function(l,n){l(n,4,0,i._13(n,5)._hidden,i._13(n,5)._sbPadding),l(n,13,0,i._13(n,14).statusbarPadding,i._13(n,14)._hasRefresher),l(n,31,0,i._13(n,32)._hidden),l(n,44,0,i._13(n,45)._hidden),l(n,61,0,i._13(n,62)._hidden),l(n,89,0,i._13(n,90)._hidden),l(n,110,0,i._13(n,111)._hidden),l(n,123,0,i._13(n,124)._hidden),l(n,140,0,i._13(n,141)._hidden),l(n,168,0,i._13(n,169)._hidden),l(n,189,0,i._13(n,190)._hidden),l(n,202,0,i._13(n,203)._hidden),l(n,219,0,i._13(n,220)._hidden),l(n,247,0,i._13(n,248)._hidden)})},wu)),i.Y(1,49152,null,0,y,[],null,null)],null,null)},{},{},[]),Iu=u(60),xu=u(62),Tu=u(61),Su=u(63),Mu=i.X({encapsulation:0,styles:[\".social-cards[_ngcontent-%COMP%]   ion-col[_ngcontent-%COMP%] {\\n    padding: 0;\\n  }\"],data:{}}),Bu=i.V(\"ng-component\",P,function(l){return i._22(0,[(l()(),i.Z(0,0,null,null,1,\"ng-component\",[],null,null,null,function(l){return i._22(0,[(l()(),i._20(-1,null,[\"\\n\"])),(l()(),i.Z(1,0,null,null,10,\"ion-header\",[],null,null,null,null,null)),i.Y(2,16384,null,0,jn.a,[Ql.a,i.j,i.z,[2,fn.a]],null,null),(l()(),i._20(-1,null,[\"\\n  \"])),(l()(),i.Z(4,0,null,null,6,\"ion-navbar\",[[\"class\",\"toolbar\"]],[[8,\"hidden\",0],[2,\"statusbar-padding\",null]],null,null,Fn.b,Fn.a)),i.Y(5,49152,null,0,Pn.a,[Yn.a,[2,fn.a],[2,Ln.a],Ql.a,i.j,i.z],null,null),(l()(),i._20(-1,3,[\"\\n    \"])),(l()(),i.Z(7,0,null,3,2,\"ion-title\",[],null,null,null,vn.b,vn.a)),i.Y(8,49152,null,0,yn.a,[Ql.a,i.j,i.z,[2,kn.a],[2,Pn.a]],null,null),(l()(),i._20(-1,0,[\"Social Card\"])),(l()(),i._20(-1,3,[\"\\n  \"])),(l()(),i._20(-1,null,[\"\\n\"])),(l()(),i._20(-1,null,[\"\\n\\n\"])),(l()(),i.Z(13,0,null,null,203,\"ion-content\",[[\"class\",\"cards-bg social-cards\"]],[[2,\"statusbar-padding\",null],[2,\"has-refresher\",null]],null,null,Cn.b,Cn.a)),i.Y(14,4374528,null,0,wn.a,[Ql.a,on.a,_n.a,i.j,i.z,Yn.a,Zn.a,i.u,[2,fn.a],[2,Ln.a]],null,null),(l()(),i._20(-1,1,[\"\\n\\n\"])),(l()(),i.Z(16,0,null,1,65,\"ion-card\",[],null,null,null,null,null)),i.Y(17,16384,null,0,Qn.a,[Ql.a,i.j,i.z],null,null),(l()(),i._20(-1,null,[\"\\n\\n  \"])),(l()(),i.Z(19,0,null,null,18,\"ion-item\",[[\"class\",\"item item-block\"]],null,null,null,$l.b,$l.a)),i.Y(20,1097728,null,3,Kl.a,[Jl.a,Ql.a,i.j,i.z,[2,ln.a]],null,null),i._18(335544320,1,{contentLabel:0}),i._18(603979776,2,{_buttons:1}),i._18(603979776,3,{_icons:1}),i.Y(24,16384,null,0,nn.a,[],null,null),(l()(),i._20(-1,2,[\"\\n    \"])),(l()(),i.Z(26,0,null,0,4,\"ion-avatar\",[[\"item-start\",\"\"]],null,null,null,null,null)),i.Y(27,16384,null,0,Iu.a,[],null,null),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i.Z(29,0,null,null,0,\"img\",[[\"src\",\"assets/img/marty-avatar.png\"]],null,null,null,null,null)),(l()(),i._20(-1,null,[\"\\n    \"])),(l()(),i._20(-1,2,[\"\\n    \"])),(l()(),i.Z(32,0,null,2,1,\"h2\",[],null,null,null,null,null)),(l()(),i._20(-1,null,[\"Marty McFly\"])),(l()(),i._20(-1,2,[\"\\n    \"])),(l()(),i.Z(35,0,null,2,1,\"p\",[],null,null,null,null,null)),(l()(),i._20(-1,null,[\"November 5, 1955\"])),(l()(),i._20(-1,2,[\"\\n  \"])),(l()(),i._20(-1,null,[\"\\n\\n  \"])),(l()(),i.Z(39,0,null,null,0,\"img\",[[\"src\",\"assets/img/advance-card-bttf.png\"]],null,null,null,null,null)),(l()(),i._20(-1,null,[\"\\n\\n  \"])),(l()(),i.Z(41,0,null,null,5,\"ion-card-content\",[],null,null,null,null,null)),i.Y(42,16384,null,0,lu.a,[Ql.a,i.j,i.z],null,null),(l()(),i._20(-1,null,[\"\\n    \"])),(l()(),i.Z(44,0,null,null,1,\"p\",[],null,null,null,null,null)),(l()(),i._20(-1,null,[\"Wait a minute. Wait a minute, Doc. Uhhh... Are you telling me that you built a time machine... out of a DeLorean?! Whoa. This is heavy.\"])),(l()(),i._20(-1,null,[\"\\n  \"])),(l()(),i._20(-1,null,[\"\\n\\n  \"])),(l()(),i.Z(48,0,null,null,32,\"ion-row\",[[\"class\",\"row\"]],null,null,null,null,null)),i.Y(49,16384,null,0,xu.a,[],null,null),(l()(),i._20(-1,null,[\"\\n    \"])),(l()(),i.Z(51,0,null,null,9,\"ion-col\",[[\"class\",\"col\"]],null,null,null,null,null)),i.Y(52,16384,null,0,Tu.a,[],null,null),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i.Z(54,0,null,null,5,\"button\",[[\"clear\",\"\"],[\"color\",\"primary\"],[\"icon-start\",\"\"],[\"ion-button\",\"\"],[\"small\",\"\"]],null,null,null,An.b,An.a)),i.Y(55,1097728,null,0,Rn.a,[[8,\"\"],Ql.a,i.j,i.z],{color:[0,\"color\"],small:[1,\"small\"],clear:[2,\"clear\"]},null),(l()(),i._20(-1,0,[\"\\n        \"])),(l()(),i.Z(57,0,null,0,1,\"ion-icon\",[[\"name\",\"thumbs-up\"],[\"role\",\"img\"]],[[2,\"hide\",null]],null,null,null,null)),i.Y(58,147456,null,0,mn.a,[Ql.a,i.j,i.z],{name:[0,\"name\"]},null),(l()(),i._20(-1,0,[\"\\n        12 Likes\\n      \"])),(l()(),i._20(-1,null,[\"\\n    \"])),(l()(),i._20(-1,null,[\"\\n    \"])),(l()(),i.Z(62,0,null,null,9,\"ion-col\",[[\"class\",\"col\"]],null,null,null,null,null)),i.Y(63,16384,null,0,Tu.a,[],null,null),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i.Z(65,0,null,null,5,\"button\",[[\"clear\",\"\"],[\"color\",\"primary\"],[\"icon-start\",\"\"],[\"ion-button\",\"\"],[\"small\",\"\"]],null,null,null,An.b,An.a)),i.Y(66,1097728,null,0,Rn.a,[[8,\"\"],Ql.a,i.j,i.z],{color:[0,\"color\"],small:[1,\"small\"],clear:[2,\"clear\"]},null),(l()(),i._20(-1,0,[\"\\n        \"])),(l()(),i.Z(68,0,null,0,1,\"ion-icon\",[[\"name\",\"text\"],[\"role\",\"img\"]],[[2,\"hide\",null]],null,null,null,null)),i.Y(69,147456,null,0,mn.a,[Ql.a,i.j,i.z],{name:[0,\"name\"]},null),(l()(),i._20(-1,0,[\"\\n        4 Comments\\n      \"])),(l()(),i._20(-1,null,[\"\\n    \"])),(l()(),i._20(-1,null,[\"\\n    \"])),(l()(),i.Z(73,0,null,null,6,\"ion-col\",[[\"align-self-center\",\"\"],[\"class\",\"col\"],[\"text-center\",\"\"]],null,null,null,null,null)),i.Y(74,16384,null,0,Tu.a,[],null,null),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i.Z(76,0,null,null,2,\"ion-note\",[],null,null,null,null,null)),i.Y(77,16384,null,0,Su.a,[Ql.a,i.j,i.z],null,null),(l()(),i._20(-1,null,[\"\\n        11h ago\\n      \"])),(l()(),i._20(-1,null,[\"\\n    \"])),(l()(),i._20(-1,null,[\"\\n  \"])),(l()(),i._20(-1,null,[\"\\n\\n\"])),(l()(),i._20(-1,1,[\"\\n\\n\\n\"])),(l()(),i.Z(83,0,null,1,65,\"ion-card\",[],null,null,null,null,null)),i.Y(84,16384,null,0,Qn.a,[Ql.a,i.j,i.z],null,null),(l()(),i._20(-1,null,[\"\\n\\n  \"])),(l()(),i.Z(86,0,null,null,18,\"ion-item\",[[\"class\",\"item item-block\"]],null,null,null,$l.b,$l.a)),i.Y(87,1097728,null,3,Kl.a,[Jl.a,Ql.a,i.j,i.z,[2,ln.a]],null,null),i._18(335544320,4,{contentLabel:0}),i._18(603979776,5,{_buttons:1}),i._18(603979776,6,{_icons:1}),i.Y(91,16384,null,0,nn.a,[],null,null),(l()(),i._20(-1,2,[\"\\n    \"])),(l()(),i.Z(93,0,null,0,4,\"ion-avatar\",[[\"item-start\",\"\"]],null,null,null,null,null)),i.Y(94,16384,null,0,Iu.a,[],null,null),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i.Z(96,0,null,null,0,\"img\",[[\"src\",\"assets/img/sarah-avatar.png.jpeg\"]],null,null,null,null,null)),(l()(),i._20(-1,null,[\"\\n    \"])),(l()(),i._20(-1,2,[\"\\n    \"])),(l()(),i.Z(99,0,null,2,1,\"h2\",[],null,null,null,null,null)),(l()(),i._20(-1,null,[\"Sarah Connor\"])),(l()(),i._20(-1,2,[\"\\n    \"])),(l()(),i.Z(102,0,null,2,1,\"p\",[],null,null,null,null,null)),(l()(),i._20(-1,null,[\"May 12, 1984\"])),(l()(),i._20(-1,2,[\"\\n  \"])),(l()(),i._20(-1,null,[\"\\n\\n  \"])),(l()(),i.Z(106,0,null,null,0,\"img\",[[\"src\",\"assets/img/advance-card-tmntr.jpg\"]],null,null,null,null,null)),(l()(),i._20(-1,null,[\"\\n\\n  \"])),(l()(),i.Z(108,0,null,null,5,\"ion-card-content\",[],null,null,null,null,null)),i.Y(109,16384,null,0,lu.a,[Ql.a,i.j,i.z],null,null),(l()(),i._20(-1,null,[\"\\n    \"])),(l()(),i.Z(111,0,null,null,1,\"p\",[],null,null,null,null,null)),(l()(),i._20(-1,null,[\"I face the unknown future, with a sense of hope. Because if a machine, a Terminator, can learn the value of human life, maybe we can too.\"])),(l()(),i._20(-1,null,[\"\\n  \"])),(l()(),i._20(-1,null,[\"\\n\\n  \"])),(l()(),i.Z(115,0,null,null,32,\"ion-row\",[[\"class\",\"row\"]],null,null,null,null,null)),i.Y(116,16384,null,0,xu.a,[],null,null),(l()(),i._20(-1,null,[\"\\n    \"])),(l()(),i.Z(118,0,null,null,9,\"ion-col\",[[\"class\",\"col\"]],null,null,null,null,null)),i.Y(119,16384,null,0,Tu.a,[],null,null),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i.Z(121,0,null,null,5,\"button\",[[\"clear\",\"\"],[\"color\",\"primary\"],[\"icon-start\",\"\"],[\"ion-button\",\"\"],[\"small\",\"\"]],null,null,null,An.b,An.a)),i.Y(122,1097728,null,0,Rn.a,[[8,\"\"],Ql.a,i.j,i.z],{color:[0,\"color\"],small:[1,\"small\"],clear:[2,\"clear\"]},null),(l()(),i._20(-1,0,[\"\\n        \"])),(l()(),i.Z(124,0,null,0,1,\"ion-icon\",[[\"name\",\"thumbs-up\"],[\"role\",\"img\"]],[[2,\"hide\",null]],null,null,null,null)),i.Y(125,147456,null,0,mn.a,[Ql.a,i.j,i.z],{name:[0,\"name\"]},null),(l()(),i._20(-1,0,[\"\\n        30 Likes\\n      \"])),(l()(),i._20(-1,null,[\"\\n    \"])),(l()(),i._20(-1,null,[\"\\n    \"])),(l()(),i.Z(129,0,null,null,9,\"ion-col\",[[\"class\",\"col\"]],null,null,null,null,null)),i.Y(130,16384,null,0,Tu.a,[],null,null),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i.Z(132,0,null,null,5,\"button\",[[\"clear\",\"\"],[\"color\",\"primary\"],[\"icon-start\",\"\"],[\"ion-button\",\"\"],[\"small\",\"\"]],null,null,null,An.b,An.a)),i.Y(133,1097728,null,0,Rn.a,[[8,\"\"],Ql.a,i.j,i.z],{color:[0,\"color\"],small:[1,\"small\"],clear:[2,\"clear\"]},null),(l()(),i._20(-1,0,[\"\\n        \"])),(l()(),i.Z(135,0,null,0,1,\"ion-icon\",[[\"name\",\"text\"],[\"role\",\"img\"]],[[2,\"hide\",null]],null,null,null,null)),i.Y(136,147456,null,0,mn.a,[Ql.a,i.j,i.z],{name:[0,\"name\"]},null),(l()(),i._20(-1,0,[\"\\n        64 Comments\\n      \"])),(l()(),i._20(-1,null,[\"\\n    \"])),(l()(),i._20(-1,null,[\"\\n    \"])),(l()(),i.Z(140,0,null,null,6,\"ion-col\",[[\"align-self-center\",\"\"],[\"class\",\"col\"],[\"text-center\",\"\"]],null,null,null,null,null)),i.Y(141,16384,null,0,Tu.a,[],null,null),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i.Z(143,0,null,null,2,\"ion-note\",[],null,null,null,null,null)),i.Y(144,16384,null,0,Su.a,[Ql.a,i.j,i.z],null,null),(l()(),i._20(-1,null,[\"\\n        30yr ago\\n      \"])),(l()(),i._20(-1,null,[\"\\n    \"])),(l()(),i._20(-1,null,[\"\\n  \"])),(l()(),i._20(-1,null,[\"\\n\\n\"])),(l()(),i._20(-1,1,[\"\\n\\n\\n\"])),(l()(),i.Z(150,0,null,1,65,\"ion-card\",[],null,null,null,null,null)),i.Y(151,16384,null,0,Qn.a,[Ql.a,i.j,i.z],null,null),(l()(),i._20(-1,null,[\"\\n\\n  \"])),(l()(),i.Z(153,0,null,null,18,\"ion-item\",[[\"class\",\"item item-block\"]],null,null,null,$l.b,$l.a)),i.Y(154,1097728,null,3,Kl.a,[Jl.a,Ql.a,i.j,i.z,[2,ln.a]],null,null),i._18(335544320,7,{contentLabel:0}),i._18(603979776,8,{_buttons:1}),i._18(603979776,9,{_icons:1}),i.Y(158,16384,null,0,nn.a,[],null,null),(l()(),i._20(-1,2,[\"\\n    \"])),(l()(),i.Z(160,0,null,0,4,\"ion-avatar\",[[\"item-start\",\"\"]],null,null,null,null,null)),i.Y(161,16384,null,0,Iu.a,[],null,null),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i.Z(163,0,null,null,0,\"img\",[[\"src\",\"assets/img/ian-avatar.png\"]],null,null,null,null,null)),(l()(),i._20(-1,null,[\"\\n    \"])),(l()(),i._20(-1,2,[\"\\n    \"])),(l()(),i.Z(166,0,null,2,1,\"h2\",[],null,null,null,null,null)),(l()(),i._20(-1,null,[\"Dr. Ian Malcolm\"])),(l()(),i._20(-1,2,[\"\\n    \"])),(l()(),i.Z(169,0,null,2,1,\"p\",[],null,null,null,null,null)),(l()(),i._20(-1,null,[\"June 28, 1990\"])),(l()(),i._20(-1,2,[\"\\n  \"])),(l()(),i._20(-1,null,[\"\\n\\n  \"])),(l()(),i.Z(173,0,null,null,0,\"img\",[[\"src\",\"assets/img/advance-card-jp.jpg\"]],null,null,null,null,null)),(l()(),i._20(-1,null,[\"\\n\\n  \"])),(l()(),i.Z(175,0,null,null,5,\"ion-card-content\",[],null,null,null,null,null)),i.Y(176,16384,null,0,lu.a,[Ql.a,i.j,i.z],null,null),(l()(),i._20(-1,null,[\"\\n    \"])),(l()(),i.Z(178,0,null,null,1,\"p\",[],null,null,null,null,null)),(l()(),i._20(-1,null,[\"Your scientists were so preoccupied with whether or not they could, that they didn't stop to think if they should.\"])),(l()(),i._20(-1,null,[\"\\n  \"])),(l()(),i._20(-1,null,[\"\\n\\n  \"])),(l()(),i.Z(182,0,null,null,32,\"ion-row\",[[\"class\",\"row\"]],null,null,null,null,null)),i.Y(183,16384,null,0,xu.a,[],null,null),(l()(),i._20(-1,null,[\"\\n    \"])),(l()(),i.Z(185,0,null,null,9,\"ion-col\",[[\"class\",\"col\"]],null,null,null,null,null)),i.Y(186,16384,null,0,Tu.a,[],null,null),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i.Z(188,0,null,null,5,\"button\",[[\"clear\",\"\"],[\"color\",\"primary\"],[\"icon-start\",\"\"],[\"ion-button\",\"\"],[\"small\",\"\"]],null,null,null,An.b,An.a)),i.Y(189,1097728,null,0,Rn.a,[[8,\"\"],Ql.a,i.j,i.z],{color:[0,\"color\"],small:[1,\"small\"],clear:[2,\"clear\"]},null),(l()(),i._20(-1,0,[\"\\n        \"])),(l()(),i.Z(191,0,null,0,1,\"ion-icon\",[[\"name\",\"thumbs-up\"],[\"role\",\"img\"]],[[2,\"hide\",null]],null,null,null,null)),i.Y(192,147456,null,0,mn.a,[Ql.a,i.j,i.z],{name:[0,\"name\"]},null),(l()(),i._20(-1,0,[\"\\n        46 Likes\\n      \"])),(l()(),i._20(-1,null,[\"\\n    \"])),(l()(),i._20(-1,null,[\"\\n    \"])),(l()(),i.Z(196,0,null,null,9,\"ion-col\",[[\"class\",\"col\"]],null,null,null,null,null)),i.Y(197,16384,null,0,Tu.a,[],null,null),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i.Z(199,0,null,null,5,\"button\",[[\"clear\",\"\"],[\"color\",\"primary\"],[\"icon-start\",\"\"],[\"ion-button\",\"\"],[\"small\",\"\"]],null,null,null,An.b,An.a)),i.Y(200,1097728,null,0,Rn.a,[[8,\"\"],Ql.a,i.j,i.z],{color:[0,\"color\"],small:[1,\"small\"],clear:[2,\"clear\"]},null),(l()(),i._20(-1,0,[\"\\n        \"])),(l()(),i.Z(202,0,null,0,1,\"ion-icon\",[[\"name\",\"text\"],[\"role\",\"img\"]],[[2,\"hide\",null]],null,null,null,null)),i.Y(203,147456,null,0,mn.a,[Ql.a,i.j,i.z],{name:[0,\"name\"]},null),(l()(),i._20(-1,0,[\"\\n        66 Comments\\n      \"])),(l()(),i._20(-1,null,[\"\\n    \"])),(l()(),i._20(-1,null,[\"\\n    \"])),(l()(),i.Z(207,0,null,null,6,\"ion-col\",[[\"align-self-center\",\"\"],[\"class\",\"col\"],[\"text-center\",\"\"]],null,null,null,null,null)),i.Y(208,16384,null,0,Tu.a,[],null,null),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i.Z(210,0,null,null,2,\"ion-note\",[],null,null,null,null,null)),i.Y(211,16384,null,0,Su.a,[Ql.a,i.j,i.z],null,null),(l()(),i._20(-1,null,[\"\\n        2d ago\\n      \"])),(l()(),i._20(-1,null,[\"\\n    \"])),(l()(),i._20(-1,null,[\"\\n  \"])),(l()(),i._20(-1,null,[\"\\n\\n\"])),(l()(),i._20(-1,1,[\"\\n\\n\\n\"])),(l()(),i._20(-1,null,[\"\\n\\n\"])),(l()(),i._20(-1,null,[\"\\n\"]))],function(l,n){l(n,55,0,\"primary\",\"\",\"\"),l(n,58,0,\"thumbs-up\"),l(n,66,0,\"primary\",\"\",\"\"),l(n,69,0,\"text\"),l(n,122,0,\"primary\",\"\",\"\"),l(n,125,0,\"thumbs-up\"),l(n,133,0,\"primary\",\"\",\"\"),l(n,136,0,\"text\"),l(n,189,0,\"primary\",\"\",\"\"),l(n,192,0,\"thumbs-up\"),l(n,200,0,\"primary\",\"\",\"\"),l(n,203,0,\"text\")},function(l,n){l(n,4,0,i._13(n,5)._hidden,i._13(n,5)._sbPadding),l(n,13,0,i._13(n,14).statusbarPadding,i._13(n,14)._hasRefresher),l(n,57,0,i._13(n,58)._hidden),l(n,68,0,i._13(n,69)._hidden),l(n,124,0,i._13(n,125)._hidden),l(n,135,0,i._13(n,136)._hidden),l(n,191,0,i._13(n,192)._hidden),l(n,202,0,i._13(n,203)._hidden)})},Mu)),i.Y(1,49152,null,0,P,[],null,null)],null,null)},{},{},[]),Fu=u(84),Au=u(46),Ru=u(85),Vu=u(55),Du=i.X({encapsulation:2,styles:[],data:{}}),Nu=i.V(\"ng-component\",Al,function(l){return i._22(0,[(l()(),i.Z(0,0,null,null,1,\"ng-component\",[],null,null,null,function(l){return i._22(0,[(l()(),i._20(-1,null,[\"\\n\"])),(l()(),i.Z(1,0,null,null,10,\"ion-header\",[],null,null,null,null,null)),i.Y(2,16384,null,0,jn.a,[Ql.a,i.j,i.z,[2,fn.a]],null,null),(l()(),i._20(-1,null,[\"\\n  \"])),(l()(),i.Z(4,0,null,null,6,\"ion-navbar\",[[\"class\",\"toolbar\"]],[[8,\"hidden\",0],[2,\"statusbar-padding\",null]],null,null,Fn.b,Fn.a)),i.Y(5,49152,null,0,Pn.a,[Yn.a,[2,fn.a],[2,Ln.a],Ql.a,i.j,i.z],null,null),(l()(),i._20(-1,3,[\"\\n    \"])),(l()(),i.Z(7,0,null,3,2,\"ion-title\",[],null,null,null,vn.b,vn.a)),i.Y(8,49152,null,0,yn.a,[Ql.a,i.j,i.z,[2,kn.a],[2,Pn.a]],null,null),(l()(),i._20(-1,0,[\"Weather Card\"])),(l()(),i._20(-1,3,[\"\\n  \"])),(l()(),i._20(-1,null,[\"\\n\"])),(l()(),i._20(-1,null,[\"\\n\\n\"])),(l()(),i.Z(13,0,null,null,131,\"ion-content\",[[\"class\",\"cards-bg preview-weather-cards\"]],[[2,\"statusbar-padding\",null],[2,\"has-refresher\",null]],null,null,Cn.b,Cn.a)),i.Y(14,4374528,null,0,wn.a,[Ql.a,on.a,_n.a,i.j,i.z,Yn.a,Zn.a,i.u,[2,fn.a],[2,Ln.a]],null,null),(l()(),i._20(-1,1,[\"\\n\\n\"])),(l()(),i.Z(16,0,null,1,41,\"ion-card\",[[\"class\",\"advanced-background\"]],null,null,null,null,null)),i.Y(17,16384,null,0,Qn.a,[Ql.a,i.j,i.z],null,null),(l()(),i._20(-1,null,[\"\\n  \"])),(l()(),i.Z(19,0,null,null,0,\"img\",[[\"src\",\"assets/img/advance-card-alaska.jpg\"]],null,null,null,null,null)),(l()(),i._20(-1,null,[\"\\n\\n  \"])),(l()(),i.Z(21,0,null,null,12,\"ion-item\",[[\"class\",\"advanced-trans item item-block\"]],null,null,null,$l.b,$l.a)),i.Y(22,1097728,null,3,Kl.a,[Jl.a,Ql.a,i.j,i.z,[2,ln.a]],null,null),i._18(335544320,1,{contentLabel:0}),i._18(603979776,2,{_buttons:1}),i._18(603979776,3,{_icons:1}),i.Y(26,16384,null,0,nn.a,[],null,null),(l()(),i._20(-1,2,[\"\\n    \"])),(l()(),i.Z(28,0,null,0,1,\"p\",[[\"item-start\",\"\"]],null,null,null,null,null)),(l()(),i._20(-1,null,[\"ALASKA, USA\"])),(l()(),i._20(-1,2,[\"\\n    \"])),(l()(),i.Z(31,0,null,4,1,\"p\",[[\"item-end\",\"\"]],null,null,null,null,null)),(l()(),i._20(-1,null,[\"SUN\"])),(l()(),i._20(-1,2,[\"\\n  \"])),(l()(),i._20(-1,null,[\"\\n\\n  \"])),(l()(),i.Z(35,0,null,null,7,\"p\",[[\"class\",\"advanced-background-title advanced-background-title-large\"]],null,null,null,null,null)),(l()(),i._20(-1,null,[\"\\n    \"])),(l()(),i.Z(37,0,null,null,1,\"ion-icon\",[[\"name\",\"moon\"],[\"role\",\"img\"]],[[2,\"hide\",null]],null,null,null,null)),i.Y(38,147456,null,0,mn.a,[Ql.a,i.j,i.z],{name:[0,\"name\"]},null),(l()(),i._20(-1,null,[\"\\n    \"])),(l()(),i.Z(40,0,null,null,1,\"span\",[],null,null,null,null,null)),(l()(),i._20(-1,null,[\"23°\"])),(l()(),i._20(-1,null,[\"\\n  \"])),(l()(),i._20(-1,null,[\"\\n\\n  \"])),(l()(),i.Z(44,0,null,null,12,\"ion-tabs\",[[\"class\",\"advanced-weather-tabs\"],[\"color\",\"light\"],[\"no-navbar\",\"\"]],null,null,null,Fu.b,Fu.a)),i._17(6144,null,hn.a,null,[Au.a]),i.Y(46,4374528,null,0,Au.a,[[2,Ln.a],[2,fn.a],Yn.a,Ql.a,i.j,on.a,i.z,Sn.a,Zn.a],{color:[0,\"color\"]},null),(l()(),i._20(-1,0,[\"\\n    \"])),(l()(),i.Z(48,0,null,0,1,\"ion-tab\",[[\"color\",\"light\"],[\"role\",\"tabpanel\"],[\"tabIcon\",\"sunny\"],[\"tabTitle\",\"Sun\"]],[[1,\"id\",0],[1,\"aria-labelledby\",0]],null,null,Ru.b,Ru.a)),i.Y(49,245760,null,0,Vu.a,[Au.a,Yn.a,Ql.a,on.a,i.j,i.u,i.z,i.i,i.g,tn.l,Tn.a,[2,Sn.a],_n.a,i.k],{color:[0,\"color\"],tabTitle:[1,\"tabTitle\"],tabIcon:[2,\"tabIcon\"]},null),(l()(),i._20(-1,0,[\"\\n    \"])),(l()(),i.Z(51,0,null,0,1,\"ion-tab\",[[\"role\",\"tabpanel\"],[\"tabIcon\",\"snow\"],[\"tabTitle\",\"Mon\"]],[[1,\"id\",0],[1,\"aria-labelledby\",0]],null,null,Ru.b,Ru.a)),i.Y(52,245760,null,0,Vu.a,[Au.a,Yn.a,Ql.a,on.a,i.j,i.u,i.z,i.i,i.g,tn.l,Tn.a,[2,Sn.a],_n.a,i.k],{tabTitle:[0,\"tabTitle\"],tabIcon:[1,\"tabIcon\"]},null),(l()(),i._20(-1,0,[\"\\n    \"])),(l()(),i.Z(54,0,null,0,1,\"ion-tab\",[[\"role\",\"tabpanel\"],[\"tabIcon\",\"cloudy\"],[\"tabTitle\",\"Tue\"]],[[1,\"id\",0],[1,\"aria-labelledby\",0]],null,null,Ru.b,Ru.a)),i.Y(55,245760,null,0,Vu.a,[Au.a,Yn.a,Ql.a,on.a,i.j,i.u,i.z,i.i,i.g,tn.l,Tn.a,[2,Sn.a],_n.a,i.k],{tabTitle:[0,\"tabTitle\"],tabIcon:[1,\"tabIcon\"]},null),(l()(),i._20(-1,0,[\"\\n  \"])),(l()(),i._20(-1,null,[\"\\n\"])),(l()(),i._20(-1,1,[\"\\n\\n\"])),(l()(),i.Z(59,0,null,1,41,\"ion-card\",[[\"class\",\"advanced-background\"]],null,null,null,null,null)),i.Y(60,16384,null,0,Qn.a,[Ql.a,i.j,i.z],null,null),(l()(),i._20(-1,null,[\"\\n  \"])),(l()(),i.Z(62,0,null,null,0,\"img\",[[\"src\",\"assets/img/advance-card-machu-picchu-1.jpg\"]],null,null,null,null,null)),(l()(),i._20(-1,null,[\"\\n\\n  \"])),(l()(),i.Z(64,0,null,null,12,\"ion-item\",[[\"class\",\"advanced-trans item item-block\"]],null,null,null,$l.b,$l.a)),i.Y(65,1097728,null,3,Kl.a,[Jl.a,Ql.a,i.j,i.z,[2,ln.a]],null,null),i._18(335544320,4,{contentLabel:0}),i._18(603979776,5,{_buttons:1}),i._18(603979776,6,{_icons:1}),i.Y(69,16384,null,0,nn.a,[],null,null),(l()(),i._20(-1,2,[\"\\n    \"])),(l()(),i.Z(71,0,null,0,1,\"p\",[[\"item-start\",\"\"]],null,null,null,null,null)),(l()(),i._20(-1,null,[\"MACHU PICCHU, PERU\"])),(l()(),i._20(-1,2,[\"\\n    \"])),(l()(),i.Z(74,0,null,4,1,\"p\",[[\"item-end\",\"\"]],null,null,null,null,null)),(l()(),i._20(-1,null,[\"TUE\"])),(l()(),i._20(-1,2,[\"\\n  \"])),(l()(),i._20(-1,null,[\"\\n\\n  \"])),(l()(),i.Z(78,0,null,null,7,\"p\",[[\"class\",\"advanced-background-title advanced-background-title-large\"]],null,null,null,null,null)),(l()(),i._20(-1,null,[\"\\n    \"])),(l()(),i.Z(80,0,null,null,1,\"ion-icon\",[[\"name\",\"sunny\"],[\"role\",\"img\"]],[[2,\"hide\",null]],null,null,null,null)),i.Y(81,147456,null,0,mn.a,[Ql.a,i.j,i.z],{name:[0,\"name\"]},null),(l()(),i._20(-1,null,[\"\\n    \"])),(l()(),i.Z(83,0,null,null,1,\"span\",[],null,null,null,null,null)),(l()(),i._20(-1,null,[\"78°\"])),(l()(),i._20(-1,null,[\"\\n  \"])),(l()(),i._20(-1,null,[\"\\n\\n  \"])),(l()(),i.Z(87,0,null,null,12,\"ion-tabs\",[[\"class\",\"advanced-weather-tabs\"],[\"color\",\"light\"],[\"no-navbar\",\"\"]],null,null,null,Fu.b,Fu.a)),i._17(6144,null,hn.a,null,[Au.a]),i.Y(89,4374528,null,0,Au.a,[[2,Ln.a],[2,fn.a],Yn.a,Ql.a,i.j,on.a,i.z,Sn.a,Zn.a],{color:[0,\"color\"]},null),(l()(),i._20(-1,0,[\"\\n    \"])),(l()(),i.Z(91,0,null,0,1,\"ion-tab\",[[\"color\",\"light\"],[\"role\",\"tabpanel\"],[\"tabIcon\",\"sunny\"],[\"tabTitle\",\"Tue\"]],[[1,\"id\",0],[1,\"aria-labelledby\",0]],null,null,Ru.b,Ru.a)),i.Y(92,245760,null,0,Vu.a,[Au.a,Yn.a,Ql.a,on.a,i.j,i.u,i.z,i.i,i.g,tn.l,Tn.a,[2,Sn.a],_n.a,i.k],{color:[0,\"color\"],tabTitle:[1,\"tabTitle\"],tabIcon:[2,\"tabIcon\"]},null),(l()(),i._20(-1,0,[\"\\n    \"])),(l()(),i.Z(94,0,null,0,1,\"ion-tab\",[[\"role\",\"tabpanel\"],[\"tabIcon\",\"partly-sunny\"],[\"tabTitle\",\"Wed\"]],[[1,\"id\",0],[1,\"aria-labelledby\",0]],null,null,Ru.b,Ru.a)),i.Y(95,245760,null,0,Vu.a,[Au.a,Yn.a,Ql.a,on.a,i.j,i.u,i.z,i.i,i.g,tn.l,Tn.a,[2,Sn.a],_n.a,i.k],{tabTitle:[0,\"tabTitle\"],tabIcon:[1,\"tabIcon\"]},null),(l()(),i._20(-1,0,[\"\\n    \"])),(l()(),i.Z(97,0,null,0,1,\"ion-tab\",[[\"role\",\"tabpanel\"],[\"tabIcon\",\"cloudy\"],[\"tabTitle\",\"Thr\"]],[[1,\"id\",0],[1,\"aria-labelledby\",0]],null,null,Ru.b,Ru.a)),i.Y(98,245760,null,0,Vu.a,[Au.a,Yn.a,Ql.a,on.a,i.j,i.u,i.z,i.i,i.g,tn.l,Tn.a,[2,Sn.a],_n.a,i.k],{tabTitle:[0,\"tabTitle\"],tabIcon:[1,\"tabIcon\"]},null),(l()(),i._20(-1,0,[\"\\n  \"])),(l()(),i._20(-1,null,[\"\\n\"])),(l()(),i._20(-1,1,[\"\\n\\n\"])),(l()(),i.Z(102,0,null,1,41,\"ion-card\",[[\"class\",\"advanced-background\"]],null,null,null,null,null)),i.Y(103,16384,null,0,Qn.a,[Ql.a,i.j,i.z],null,null),(l()(),i._20(-1,null,[\"\\n  \"])),(l()(),i.Z(105,0,null,null,0,\"img\",[[\"src\",\"assets/img/advance-card-london.jpg\"]],null,null,null,null,null)),(l()(),i._20(-1,null,[\"\\n\\n  \"])),(l()(),i.Z(107,0,null,null,12,\"ion-item\",[[\"class\",\"advanced-trans item item-block\"]],null,null,null,$l.b,$l.a)),i.Y(108,1097728,null,3,Kl.a,[Jl.a,Ql.a,i.j,i.z,[2,ln.a]],null,null),i._18(335544320,7,{contentLabel:0}),i._18(603979776,8,{_buttons:1}),i._18(603979776,9,{_icons:1}),i.Y(112,16384,null,0,nn.a,[],null,null),(l()(),i._20(-1,2,[\"\\n    \"])),(l()(),i.Z(114,0,null,0,1,\"p\",[[\"item-start\",\"\"]],null,null,null,null,null)),(l()(),i._20(-1,null,[\"LONDON, UK\"])),(l()(),i._20(-1,2,[\"\\n    \"])),(l()(),i.Z(117,0,null,4,1,\"p\",[[\"item-end\",\"\"]],null,null,null,null,null)),(l()(),i._20(-1,null,[\"SUN\"])),(l()(),i._20(-1,2,[\"\\n  \"])),(l()(),i._20(-1,null,[\"\\n\\n  \"])),(l()(),i.Z(121,0,null,null,7,\"p\",[[\"class\",\"advanced-background-title advanced-background-title-large\"]],null,null,null,null,null)),(l()(),i._20(-1,null,[\"\\n    \"])),(l()(),i.Z(123,0,null,null,1,\"ion-icon\",[[\"name\",\"thunderstorm\"],[\"role\",\"img\"]],[[2,\"hide\",null]],null,null,null,null)),i.Y(124,147456,null,0,mn.a,[Ql.a,i.j,i.z],{name:[0,\"name\"]},null),(l()(),i._20(-1,null,[\"\\n    \"])),(l()(),i.Z(126,0,null,null,1,\"span\",[],null,null,null,null,null)),(l()(),i._20(-1,null,[\"41°\"])),(l()(),i._20(-1,null,[\"\\n  \"])),(l()(),i._20(-1,null,[\"\\n\\n  \"])),(l()(),i.Z(130,0,null,null,12,\"ion-tabs\",[[\"class\",\"advanced-weather-tabs\"],[\"color\",\"light\"],[\"no-navbar\",\"\"]],null,null,null,Fu.b,Fu.a)),i._17(6144,null,hn.a,null,[Au.a]),i.Y(132,4374528,null,0,Au.a,[[2,Ln.a],[2,fn.a],Yn.a,Ql.a,i.j,on.a,i.z,Sn.a,Zn.a],{color:[0,\"color\"]},null),(l()(),i._20(-1,0,[\"\\n    \"])),(l()(),i.Z(134,0,null,0,1,\"ion-tab\",[[\"color\",\"light\"],[\"role\",\"tabpanel\"],[\"tabIcon\",\"thunderstorm\"],[\"tabTitle\",\"Sun\"]],[[1,\"id\",0],[1,\"aria-labelledby\",0]],null,null,Ru.b,Ru.a)),i.Y(135,245760,null,0,Vu.a,[Au.a,Yn.a,Ql.a,on.a,i.j,i.u,i.z,i.i,i.g,tn.l,Tn.a,[2,Sn.a],_n.a,i.k],{color:[0,\"color\"],tabTitle:[1,\"tabTitle\"],tabIcon:[2,\"tabIcon\"]},null),(l()(),i._20(-1,0,[\"\\n    \"])),(l()(),i.Z(137,0,null,0,1,\"ion-tab\",[[\"role\",\"tabpanel\"],[\"tabIcon\",\"rainy\"],[\"tabTitle\",\"Mon\"]],[[1,\"id\",0],[1,\"aria-labelledby\",0]],null,null,Ru.b,Ru.a)),i.Y(138,245760,null,0,Vu.a,[Au.a,Yn.a,Ql.a,on.a,i.j,i.u,i.z,i.i,i.g,tn.l,Tn.a,[2,Sn.a],_n.a,i.k],{tabTitle:[0,\"tabTitle\"],tabIcon:[1,\"tabIcon\"]},null),(l()(),i._20(-1,0,[\"\\n    \"])),(l()(),i.Z(140,0,null,0,1,\"ion-tab\",[[\"role\",\"tabpanel\"],[\"tabIcon\",\"rainy\"],[\"tabTitle\",\"Tue\"]],[[1,\"id\",0],[1,\"aria-labelledby\",0]],null,null,Ru.b,Ru.a)),i.Y(141,245760,null,0,Vu.a,[Au.a,Yn.a,Ql.a,on.a,i.j,i.u,i.z,i.i,i.g,tn.l,Tn.a,[2,Sn.a],_n.a,i.k],{tabTitle:[0,\"tabTitle\"],tabIcon:[1,\"tabIcon\"]},null),(l()(),i._20(-1,0,[\"\\n  \"])),(l()(),i._20(-1,null,[\"\\n\"])),(l()(),i._20(-1,1,[\"\\n\\n\\n\"])),(l()(),i._20(-1,null,[\"\\n\"]))],function(l,n){l(n,38,0,\"moon\"),l(n,46,0,\"light\"),l(n,49,0,\"light\",\"Sun\",\"sunny\"),l(n,52,0,\"Mon\",\"snow\"),l(n,55,0,\"Tue\",\"cloudy\"),l(n,81,0,\"sunny\"),l(n,89,0,\"light\"),l(n,92,0,\"light\",\"Tue\",\"sunny\"),l(n,95,0,\"Wed\",\"partly-sunny\"),l(n,98,0,\"Thr\",\"cloudy\"),l(n,124,0,\"thunderstorm\"),l(n,132,0,\"light\"),l(n,135,0,\"light\",\"Sun\",\"thunderstorm\"),l(n,138,0,\"Mon\",\"rainy\"),l(n,141,0,\"Tue\",\"rainy\")},function(l,n){l(n,4,0,i._13(n,5)._hidden,i._13(n,5)._sbPadding),l(n,13,0,i._13(n,14).statusbarPadding,i._13(n,14)._hasRefresher),l(n,37,0,i._13(n,38)._hidden),l(n,48,0,i._13(n,49)._tabId,i._13(n,49)._btnId),l(n,51,0,i._13(n,52)._tabId,i._13(n,52)._btnId),l(n,54,0,i._13(n,55)._tabId,i._13(n,55)._btnId),l(n,80,0,i._13(n,81)._hidden),l(n,91,0,i._13(n,92)._tabId,i._13(n,92)._btnId),l(n,94,0,i._13(n,95)._tabId,i._13(n,95)._btnId),l(n,97,0,i._13(n,98)._tabId,i._13(n,98)._btnId),l(n,123,0,i._13(n,124)._hidden),l(n,134,0,i._13(n,135)._tabId,i._13(n,135)._btnId),l(n,137,0,i._13(n,138)._tabId,i._13(n,138)._btnId),l(n,140,0,i._13(n,141)._tabId,i._13(n,141)._btnId)})},Du)),i.Y(1,49152,null,0,Al,[],null,null)],null,null)},{},{},[]),Xu=i.X({encapsulation:2,styles:[],data:{}}),Ou=i.V(\"ng-component\",C,function(l){return i._22(0,[(l()(),i.Z(0,0,null,null,1,\"ng-component\",[],null,null,null,function(l){return i._22(0,[(l()(),i._20(-1,null,[\"\\n\"])),(l()(),i.Z(1,0,null,null,10,\"ion-header\",[],null,null,null,null,null)),i.Y(2,16384,null,0,jn.a,[Ql.a,i.j,i.z,[2,fn.a]],null,null),(l()(),i._20(-1,null,[\"\\n  \"])),(l()(),i.Z(4,0,null,null,6,\"ion-navbar\",[[\"class\",\"toolbar\"]],[[8,\"hidden\",0],[2,\"statusbar-padding\",null]],null,null,Fn.b,Fn.a)),i.Y(5,49152,null,0,Pn.a,[Yn.a,[2,fn.a],[2,Ln.a],Ql.a,i.j,i.z],null,null),(l()(),i._20(-1,3,[\"\\n    \"])),(l()(),i.Z(7,0,null,3,2,\"ion-title\",[],null,null,null,vn.b,vn.a)),i.Y(8,49152,null,0,yn.a,[Ql.a,i.j,i.z,[2,kn.a],[2,Pn.a]],null,null),(l()(),i._20(-1,0,[\"Background Images\"])),(l()(),i._20(-1,3,[\"\\n  \"])),(l()(),i._20(-1,null,[\"\\n\"])),(l()(),i._20(-1,null,[\"\\n\\n\"])),(l()(),i.Z(13,0,null,null,50,\"ion-content\",[[\"class\",\"card-background-page\"]],[[2,\"statusbar-padding\",null],[2,\"has-refresher\",null]],null,null,Cn.b,Cn.a)),i.Y(14,4374528,null,0,wn.a,[Ql.a,on.a,_n.a,i.j,i.z,Yn.a,Zn.a,i.u,[2,fn.a],[2,Ln.a]],null,null),(l()(),i._20(-1,1,[\"\\n\\n  \"])),(l()(),i.Z(16,0,null,1,10,\"ion-card\",[],null,null,null,null,null)),i.Y(17,16384,null,0,Qn.a,[Ql.a,i.j,i.z],null,null),(l()(),i._20(-1,null,[\"\\n    \"])),(l()(),i.Z(19,0,null,null,0,\"img\",[[\"src\",\"assets/img/card-saopaolo.png\"]],null,null,null,null,null)),(l()(),i._20(-1,null,[\"\\n    \"])),(l()(),i.Z(21,0,null,null,1,\"div\",[[\"class\",\"card-title\"]],null,null,null,null,null)),(l()(),i._20(-1,null,[\"São Paulo\"])),(l()(),i._20(-1,null,[\"\\n    \"])),(l()(),i.Z(24,0,null,null,1,\"div\",[[\"class\",\"card-subtitle\"]],null,null,null,null,null)),(l()(),i._20(-1,null,[\"41 Listings\"])),(l()(),i._20(-1,null,[\"\\n  \"])),(l()(),i._20(-1,1,[\"\\n\\n  \"])),(l()(),i.Z(28,0,null,1,10,\"ion-card\",[],null,null,null,null,null)),i.Y(29,16384,null,0,Qn.a,[Ql.a,i.j,i.z],null,null),(l()(),i._20(-1,null,[\"\\n    \"])),(l()(),i.Z(31,0,null,null,0,\"img\",[[\"src\",\"assets/img/card-amsterdam.png\"]],null,null,null,null,null)),(l()(),i._20(-1,null,[\"\\n    \"])),(l()(),i.Z(33,0,null,null,1,\"div\",[[\"class\",\"card-title\"]],null,null,null,null,null)),(l()(),i._20(-1,null,[\"Amsterdam\"])),(l()(),i._20(-1,null,[\"\\n    \"])),(l()(),i.Z(36,0,null,null,1,\"div\",[[\"class\",\"card-subtitle\"]],null,null,null,null,null)),(l()(),i._20(-1,null,[\"64 Listings\"])),(l()(),i._20(-1,null,[\"\\n  \"])),(l()(),i._20(-1,1,[\"\\n\\n  \"])),(l()(),i.Z(40,0,null,1,10,\"ion-card\",[],null,null,null,null,null)),i.Y(41,16384,null,0,Qn.a,[Ql.a,i.j,i.z],null,null),(l()(),i._20(-1,null,[\"\\n    \"])),(l()(),i.Z(43,0,null,null,0,\"img\",[[\"src\",\"assets/img/card-sf.png\"]],null,null,null,null,null)),(l()(),i._20(-1,null,[\"\\n    \"])),(l()(),i.Z(45,0,null,null,1,\"div\",[[\"class\",\"card-title\"]],null,null,null,null,null)),(l()(),i._20(-1,null,[\"San Francisco\"])),(l()(),i._20(-1,null,[\"\\n    \"])),(l()(),i.Z(48,0,null,null,1,\"div\",[[\"class\",\"card-subtitle\"]],null,null,null,null,null)),(l()(),i._20(-1,null,[\"72 Listings\"])),(l()(),i._20(-1,null,[\"\\n  \"])),(l()(),i._20(-1,1,[\"\\n\\n  \"])),(l()(),i.Z(52,0,null,1,10,\"ion-card\",[],null,null,null,null,null)),i.Y(53,16384,null,0,Qn.a,[Ql.a,i.j,i.z],null,null),(l()(),i._20(-1,null,[\"\\n    \"])),(l()(),i.Z(55,0,null,null,0,\"img\",[[\"src\",\"assets/img/card-madison.png\"]],null,null,null,null,null)),(l()(),i._20(-1,null,[\"\\n    \"])),(l()(),i.Z(57,0,null,null,1,\"div\",[[\"class\",\"card-title\"]],null,null,null,null,null)),(l()(),i._20(-1,null,[\"Madison\"])),(l()(),i._20(-1,null,[\"\\n    \"])),(l()(),i.Z(60,0,null,null,1,\"div\",[[\"class\",\"card-subtitle\"]],null,null,null,null,null)),(l()(),i._20(-1,null,[\"28 Listings\"])),(l()(),i._20(-1,null,[\"\\n  \"])),(l()(),i._20(-1,1,[\"\\n\\n\"])),(l()(),i._20(-1,null,[\"\\n\"]))],null,function(l,n){l(n,4,0,i._13(n,5)._hidden,i._13(n,5)._sbPadding),l(n,13,0,i._13(n,14).statusbarPadding,i._13(n,14)._hasRefresher)})},Xu)),i.Y(1,49152,null,0,C,[],null,null)],null,null)},{},{},[]),Eu=i.X({encapsulation:2,styles:[],data:{}}),Uu=i.V(\"ng-component\",w,function(l){return i._22(0,[(l()(),i.Z(0,0,null,null,1,\"ng-component\",[],null,null,null,function(l){return i._22(0,[(l()(),i._20(-1,null,[\"\\n\"])),(l()(),i.Z(1,0,null,null,10,\"ion-header\",[],null,null,null,null,null)),i.Y(2,16384,null,0,jn.a,[Ql.a,i.j,i.z,[2,fn.a]],null,null),(l()(),i._20(-1,null,[\"\\n  \"])),(l()(),i.Z(4,0,null,null,6,\"ion-navbar\",[[\"class\",\"toolbar\"]],[[8,\"hidden\",0],[2,\"statusbar-padding\",null]],null,null,Fn.b,Fn.a)),i.Y(5,49152,null,0,Pn.a,[Yn.a,[2,fn.a],[2,Ln.a],Ql.a,i.j,i.z],null,null),(l()(),i._20(-1,3,[\"\\n    \"])),(l()(),i.Z(7,0,null,3,2,\"ion-title\",[],null,null,null,vn.b,vn.a)),i.Y(8,49152,null,0,yn.a,[Ql.a,i.j,i.z,[2,kn.a],[2,Pn.a]],null,null),(l()(),i._20(-1,0,[\"Basic Cards\"])),(l()(),i._20(-1,3,[\"\\n  \"])),(l()(),i._20(-1,null,[\"\\n\"])),(l()(),i._20(-1,null,[\"\\n\\n\"])),(l()(),i.Z(13,0,null,null,10,\"ion-content\",[[\"class\",\"cards-bg\"]],[[2,\"statusbar-padding\",null],[2,\"has-refresher\",null]],null,null,Cn.b,Cn.a)),i.Y(14,4374528,null,0,wn.a,[Ql.a,on.a,_n.a,i.j,i.z,Yn.a,Zn.a,i.u,[2,fn.a],[2,Ln.a]],null,null),(l()(),i._20(-1,1,[\"\\n\\n\"])),(l()(),i.Z(16,0,null,1,6,\"ion-card\",[],null,null,null,null,null)),i.Y(17,16384,null,0,Qn.a,[Ql.a,i.j,i.z],null,null),(l()(),i._20(-1,null,[\"\\n\\n  \"])),(l()(),i.Z(19,0,null,null,2,\"ion-card-content\",[],null,null,null,null,null)),i.Y(20,16384,null,0,lu.a,[Ql.a,i.j,i.z],null,null),(l()(),i._20(-1,null,[\"\\n    This is just your basic card with some text to boot. Like it?  Keep scrolling...\\n  \"])),(l()(),i._20(-1,null,[\"\\n\\n\"])),(l()(),i._20(-1,1,[\"\\n\\n\\n\"])),(l()(),i._20(-1,null,[\"\\n\"]))],null,function(l,n){l(n,4,0,i._13(n,5)._hidden,i._13(n,5)._sbPadding),l(n,13,0,i._13(n,14).statusbarPadding,i._13(n,14)._hasRefresher)})},Eu)),i.Y(1,49152,null,0,w,[],null,null)],null,null)},{},{},[]),Wu=u(93),qu=i.X({encapsulation:2,styles:[],data:{}}),Hu=i.V(\"ng-component\",L,function(l){return i._22(0,[(l()(),i.Z(0,0,null,null,1,\"ng-component\",[],null,null,null,function(l){return i._22(0,[(l()(),i._20(-1,null,[\"\\n\"])),(l()(),i.Z(1,0,null,null,10,\"ion-header\",[],null,null,null,null,null)),i.Y(2,16384,null,0,jn.a,[Ql.a,i.j,i.z,[2,fn.a]],null,null),(l()(),i._20(-1,null,[\"\\n  \"])),(l()(),i.Z(4,0,null,null,6,\"ion-navbar\",[[\"class\",\"toolbar\"]],[[8,\"hidden\",0],[2,\"statusbar-padding\",null]],null,null,Fn.b,Fn.a)),i.Y(5,49152,null,0,Pn.a,[Yn.a,[2,fn.a],[2,Ln.a],Ql.a,i.j,i.z],null,null),(l()(),i._20(-1,3,[\"\\n    \"])),(l()(),i.Z(7,0,null,3,2,\"ion-title\",[],null,null,null,vn.b,vn.a)),i.Y(8,49152,null,0,yn.a,[Ql.a,i.j,i.z,[2,kn.a],[2,Pn.a]],null,null),(l()(),i._20(-1,0,[\"Card Headers\"])),(l()(),i._20(-1,3,[\"\\n  \"])),(l()(),i._20(-1,null,[\"\\n\"])),(l()(),i._20(-1,null,[\"\\n\\n\"])),(l()(),i.Z(13,0,null,null,14,\"ion-content\",[[\"class\",\"cards-bg\"]],[[2,\"statusbar-padding\",null],[2,\"has-refresher\",null]],null,null,Cn.b,Cn.a)),i.Y(14,4374528,null,0,wn.a,[Ql.a,on.a,_n.a,i.j,i.z,Yn.a,Zn.a,i.u,[2,fn.a],[2,Ln.a]],null,null),(l()(),i._20(-1,1,[\"\\n\\n\"])),(l()(),i.Z(16,0,null,1,10,\"ion-card\",[],null,null,null,null,null)),i.Y(17,16384,null,0,Qn.a,[Ql.a,i.j,i.z],null,null),(l()(),i._20(-1,null,[\"\\n\\n  \"])),(l()(),i.Z(19,0,null,null,2,\"ion-card-header\",[],null,null,null,null,null)),i.Y(20,16384,null,0,Wu.a,[Ql.a,i.j,i.z],null,null),(l()(),i._20(-1,null,[\"\\n    Header\\n  \"])),(l()(),i._20(-1,null,[\"\\n\\n  \"])),(l()(),i.Z(23,0,null,null,2,\"ion-card-content\",[],null,null,null,null,null)),i.Y(24,16384,null,0,lu.a,[Ql.a,i.j,i.z],null,null),(l()(),i._20(-1,null,['\\n    The British use the term \"header\", but the American term \"head-shot\" the English simply refuse to adopt.\\n  '])),(l()(),i._20(-1,null,[\"\\n\\n\"])),(l()(),i._20(-1,1,[\"\\n\\n\\n\"])),(l()(),i._20(-1,null,[\"\\n\"]))],null,function(l,n){l(n,4,0,i._13(n,5)._hidden,i._13(n,5)._sbPadding),l(n,13,0,i._13(n,14).statusbarPadding,i._13(n,14)._hasRefresher)})},qu)),i.Y(1,49152,null,0,L,[],null,null)],null,null)},{},{},[]),Gu=i.X({encapsulation:2,styles:[],data:{}}),$u=i.V(\"ng-component\",I,function(l){return i._22(0,[(l()(),i.Z(0,0,null,null,1,\"ng-component\",[],null,null,null,function(l){return i._22(0,[(l()(),i._20(-1,null,[\"\\n\"])),(l()(),i.Z(1,0,null,null,10,\"ion-header\",[],null,null,null,null,null)),i.Y(2,16384,null,0,jn.a,[Ql.a,i.j,i.z,[2,fn.a]],null,null),(l()(),i._20(-1,null,[\"\\n  \"])),(l()(),i.Z(4,0,null,null,6,\"ion-navbar\",[[\"class\",\"toolbar\"]],[[8,\"hidden\",0],[2,\"statusbar-padding\",null]],null,null,Fn.b,Fn.a)),i.Y(5,49152,null,0,Pn.a,[Yn.a,[2,fn.a],[2,Ln.a],Ql.a,i.j,i.z],null,null),(l()(),i._20(-1,3,[\"\\n    \"])),(l()(),i.Z(7,0,null,3,2,\"ion-title\",[],null,null,null,vn.b,vn.a)),i.Y(8,49152,null,0,yn.a,[Ql.a,i.j,i.z,[2,kn.a],[2,Pn.a]],null,null),(l()(),i._20(-1,0,[\"Card Images\"])),(l()(),i._20(-1,3,[\"\\n  \"])),(l()(),i._20(-1,null,[\"\\n\"])),(l()(),i._20(-1,null,[\"\\n\\n\"])),(l()(),i.Z(13,0,null,null,227,\"ion-content\",[[\"class\",\"cards-bg\"]],[[2,\"statusbar-padding\",null],[2,\"has-refresher\",null]],null,null,Cn.b,Cn.a)),i.Y(14,4374528,null,0,wn.a,[Ql.a,on.a,_n.a,i.j,i.z,Yn.a,Zn.a,i.u,[2,fn.a],[2,Ln.a]],null,null),(l()(),i._20(-1,1,[\"\\n\\n  \"])),(l()(),i.Z(16,0,null,1,52,\"ion-card\",[],null,null,null,null,null)),i.Y(17,16384,null,0,Qn.a,[Ql.a,i.j,i.z],null,null),(l()(),i._20(-1,null,[\"\\n\\n    \"])),(l()(),i.Z(19,0,null,null,0,\"img\",[[\"src\",\"assets/img/nin-live.png\"]],null,null,null,null,null)),(l()(),i._20(-1,null,[\"\\n\\n    \"])),(l()(),i.Z(21,0,null,null,9,\"ion-card-content\",[],null,null,null,null,null)),i.Y(22,16384,null,0,lu.a,[Ql.a,i.j,i.z],null,null),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i.Z(24,0,null,null,2,\"ion-card-title\",[],null,null,null,null,null)),i.Y(25,16384,null,0,nu.a,[Ql.a,i.j,i.z],null,null),(l()(),i._20(-1,null,[\"\\n        Nine Inch Nails Live\\n      \"])),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i.Z(28,0,null,null,1,\"p\",[],null,null,null,null,null)),(l()(),i._20(-1,null,[\"\\n        The most popular industrial group ever, and largely responsible for bringing the music to a mass audience.\\n      \"])),(l()(),i._20(-1,null,[\"\\n    \"])),(l()(),i._20(-1,null,[\"\\n\\n    \"])),(l()(),i.Z(32,0,null,null,35,\"ion-row\",[[\"class\",\"row\"],[\"no-padding\",\"\"]],null,null,null,null,null)),i.Y(33,16384,null,0,xu.a,[],null,null),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i.Z(35,0,null,null,9,\"ion-col\",[[\"class\",\"col\"]],null,null,null,null,null)),i.Y(36,16384,null,0,Tu.a,[],null,null),(l()(),i._20(-1,null,[\"\\n        \"])),(l()(),i.Z(38,0,null,null,5,\"button\",[[\"clear\",\"\"],[\"color\",\"danger\"],[\"icon-start\",\"\"],[\"ion-button\",\"\"],[\"small\",\"\"]],null,null,null,An.b,An.a)),i.Y(39,1097728,null,0,Rn.a,[[8,\"\"],Ql.a,i.j,i.z],{color:[0,\"color\"],small:[1,\"small\"],clear:[2,\"clear\"]},null),(l()(),i._20(-1,0,[\"\\n          \"])),(l()(),i.Z(41,0,null,0,1,\"ion-icon\",[[\"name\",\"star\"],[\"role\",\"img\"]],[[2,\"hide\",null]],null,null,null,null)),i.Y(42,147456,null,0,mn.a,[Ql.a,i.j,i.z],{name:[0,\"name\"]},null),(l()(),i._20(-1,0,[\"\\n          Favorite\\n        \"])),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i.Z(46,0,null,null,9,\"ion-col\",[[\"class\",\"col\"],[\"text-center\",\"\"]],null,null,null,null,null)),i.Y(47,16384,null,0,Tu.a,[],null,null),(l()(),i._20(-1,null,[\"\\n        \"])),(l()(),i.Z(49,0,null,null,5,\"button\",[[\"clear\",\"\"],[\"color\",\"danger\"],[\"icon-start\",\"\"],[\"ion-button\",\"\"],[\"small\",\"\"]],null,null,null,An.b,An.a)),i.Y(50,1097728,null,0,Rn.a,[[8,\"\"],Ql.a,i.j,i.z],{color:[0,\"color\"],small:[1,\"small\"],clear:[2,\"clear\"]},null),(l()(),i._20(-1,0,[\"\\n          \"])),(l()(),i.Z(52,0,null,0,1,\"ion-icon\",[[\"name\",\"musical-notes\"],[\"role\",\"img\"]],[[2,\"hide\",null]],null,null,null,null)),i.Y(53,147456,null,0,mn.a,[Ql.a,i.j,i.z],{name:[0,\"name\"]},null),(l()(),i._20(-1,0,[\"\\n          Listen\\n        \"])),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i.Z(57,0,null,null,9,\"ion-col\",[[\"class\",\"col\"],[\"text-right\",\"\"]],null,null,null,null,null)),i.Y(58,16384,null,0,Tu.a,[],null,null),(l()(),i._20(-1,null,[\"\\n        \"])),(l()(),i.Z(60,0,null,null,5,\"button\",[[\"clear\",\"\"],[\"color\",\"danger\"],[\"icon-start\",\"\"],[\"ion-button\",\"\"],[\"small\",\"\"]],null,null,null,An.b,An.a)),i.Y(61,1097728,null,0,Rn.a,[[8,\"\"],Ql.a,i.j,i.z],{color:[0,\"color\"],small:[1,\"small\"],clear:[2,\"clear\"]},null),(l()(),i._20(-1,0,[\"\\n          \"])),(l()(),i.Z(63,0,null,0,1,\"ion-icon\",[[\"name\",\"share-alt\"],[\"role\",\"img\"]],[[2,\"hide\",null]],null,null,null,null)),i.Y(64,147456,null,0,mn.a,[Ql.a,i.j,i.z],{name:[0,\"name\"]},null),(l()(),i._20(-1,0,[\"\\n          Share\\n        \"])),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i._20(-1,null,[\"\\n    \"])),(l()(),i._20(-1,null,[\"\\n\\n  \"])),(l()(),i._20(-1,1,[\"\\n\\n  \"])),(l()(),i.Z(70,0,null,1,55,\"ion-card\",[],null,null,null,null,null)),i.Y(71,16384,null,0,Qn.a,[Ql.a,i.j,i.z],null,null),(l()(),i._20(-1,null,[\"\\n\\n    \"])),(l()(),i.Z(73,0,null,null,3,\"div\",[],null,null,null,null,null)),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i.Z(75,0,null,null,0,\"img\",[[\"src\",\"assets/img/badu-live.png\"]],null,null,null,null,null)),(l()(),i._20(-1,null,[\"\\n    \"])),(l()(),i._20(-1,null,[\"\\n\\n    \"])),(l()(),i.Z(78,0,null,null,9,\"ion-card-content\",[],null,null,null,null,null)),i.Y(79,16384,null,0,lu.a,[Ql.a,i.j,i.z],null,null),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i.Z(81,0,null,null,2,\"ion-card-title\",[],null,null,null,null,null)),i.Y(82,16384,null,0,nu.a,[Ql.a,i.j,i.z],null,null),(l()(),i._20(-1,null,[\"\\n        Erykah Badu\\n      \"])),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i.Z(85,0,null,null,1,\"p\",[],null,null,null,null,null)),(l()(),i._20(-1,null,[\"\\n      American singer-songwriter, record producer, activist, and actress, Badu's style is a prime example of neo-soul.\\n      \"])),(l()(),i._20(-1,null,[\"\\n    \"])),(l()(),i._20(-1,null,[\"\\n\\n    \"])),(l()(),i.Z(89,0,null,null,35,\"ion-row\",[[\"class\",\"row\"],[\"no-padding\",\"\"]],null,null,null,null,null)),i.Y(90,16384,null,0,xu.a,[],null,null),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i.Z(92,0,null,null,9,\"ion-col\",[[\"class\",\"col\"]],null,null,null,null,null)),i.Y(93,16384,null,0,Tu.a,[],null,null),(l()(),i._20(-1,null,[\"\\n        \"])),(l()(),i.Z(95,0,null,null,5,\"button\",[[\"clear\",\"\"],[\"color\",\"danger\"],[\"icon-start\",\"\"],[\"ion-button\",\"\"],[\"small\",\"\"]],null,null,null,An.b,An.a)),i.Y(96,1097728,null,0,Rn.a,[[8,\"\"],Ql.a,i.j,i.z],{color:[0,\"color\"],small:[1,\"small\"],clear:[2,\"clear\"]},null),(l()(),i._20(-1,0,[\"\\n          \"])),(l()(),i.Z(98,0,null,0,1,\"ion-icon\",[[\"name\",\"star\"],[\"role\",\"img\"]],[[2,\"hide\",null]],null,null,null,null)),i.Y(99,147456,null,0,mn.a,[Ql.a,i.j,i.z],{name:[0,\"name\"]},null),(l()(),i._20(-1,0,[\"\\n          Favorite\\n        \"])),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i.Z(103,0,null,null,9,\"ion-col\",[[\"class\",\"col\"],[\"text-center\",\"\"]],null,null,null,null,null)),i.Y(104,16384,null,0,Tu.a,[],null,null),(l()(),i._20(-1,null,[\"\\n        \"])),(l()(),i.Z(106,0,null,null,5,\"button\",[[\"clear\",\"\"],[\"color\",\"danger\"],[\"icon-start\",\"\"],[\"ion-button\",\"\"],[\"small\",\"\"]],null,null,null,An.b,An.a)),i.Y(107,1097728,null,0,Rn.a,[[8,\"\"],Ql.a,i.j,i.z],{color:[0,\"color\"],small:[1,\"small\"],clear:[2,\"clear\"]},null),(l()(),i._20(-1,0,[\"\\n          \"])),(l()(),i.Z(109,0,null,0,1,\"ion-icon\",[[\"name\",\"musical-notes\"],[\"role\",\"img\"]],[[2,\"hide\",null]],null,null,null,null)),i.Y(110,147456,null,0,mn.a,[Ql.a,i.j,i.z],{name:[0,\"name\"]},null),(l()(),i._20(-1,0,[\"\\n          Listen\\n        \"])),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i.Z(114,0,null,null,9,\"ion-col\",[[\"class\",\"col\"],[\"text-right\",\"\"]],null,null,null,null,null)),i.Y(115,16384,null,0,Tu.a,[],null,null),(l()(),i._20(-1,null,[\"\\n        \"])),(l()(),i.Z(117,0,null,null,5,\"button\",[[\"clear\",\"\"],[\"color\",\"danger\"],[\"icon-start\",\"\"],[\"ion-button\",\"\"],[\"small\",\"\"]],null,null,null,An.b,An.a)),i.Y(118,1097728,null,0,Rn.a,[[8,\"\"],Ql.a,i.j,i.z],{color:[0,\"color\"],small:[1,\"small\"],clear:[2,\"clear\"]},null),(l()(),i._20(-1,0,[\"\\n          \"])),(l()(),i.Z(120,0,null,0,1,\"ion-icon\",[[\"name\",\"share-alt\"],[\"role\",\"img\"]],[[2,\"hide\",null]],null,null,null,null)),i.Y(121,147456,null,0,mn.a,[Ql.a,i.j,i.z],{name:[0,\"name\"]},null),(l()(),i._20(-1,0,[\"\\n          Share\\n        \"])),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i._20(-1,null,[\"\\n    \"])),(l()(),i._20(-1,null,[\"\\n\\n  \"])),(l()(),i._20(-1,1,[\"\\n\\n  \"])),(l()(),i.Z(127,0,null,1,55,\"ion-card\",[],null,null,null,null,null)),i.Y(128,16384,null,0,Qn.a,[Ql.a,i.j,i.z],null,null),(l()(),i._20(-1,null,[\"\\n\\n    \"])),(l()(),i.Z(130,0,null,null,3,\"div\",[],null,null,null,null,null)),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i.Z(132,0,null,null,0,\"img\",[[\"src\",\"assets/img/queen-live.png\"]],null,null,null,null,null)),(l()(),i._20(-1,null,[\"\\n    \"])),(l()(),i._20(-1,null,[\"\\n\\n    \"])),(l()(),i.Z(135,0,null,null,9,\"ion-card-content\",[],null,null,null,null,null)),i.Y(136,16384,null,0,lu.a,[Ql.a,i.j,i.z],null,null),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i.Z(138,0,null,null,2,\"ion-card-title\",[],null,null,null,null,null)),i.Y(139,16384,null,0,nu.a,[Ql.a,i.j,i.z],null,null),(l()(),i._20(-1,null,[\"\\n        Queen\\n      \"])),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i.Z(142,0,null,null,1,\"p\",[],null,null,null,null,null)),(l()(),i._20(-1,null,[\"\\n        The British rock band formed in London in 1970, and is considered one of the biggest stadium rock bands in the world.\\n      \"])),(l()(),i._20(-1,null,[\"\\n    \"])),(l()(),i._20(-1,null,[\"\\n\\n    \"])),(l()(),i.Z(146,0,null,null,35,\"ion-row\",[[\"class\",\"row\"],[\"no-padding\",\"\"]],null,null,null,null,null)),i.Y(147,16384,null,0,xu.a,[],null,null),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i.Z(149,0,null,null,9,\"ion-col\",[[\"class\",\"col\"]],null,null,null,null,null)),i.Y(150,16384,null,0,Tu.a,[],null,null),(l()(),i._20(-1,null,[\"\\n        \"])),(l()(),i.Z(152,0,null,null,5,\"button\",[[\"clear\",\"\"],[\"color\",\"danger\"],[\"icon-start\",\"\"],[\"ion-button\",\"\"],[\"small\",\"\"]],null,null,null,An.b,An.a)),i.Y(153,1097728,null,0,Rn.a,[[8,\"\"],Ql.a,i.j,i.z],{color:[0,\"color\"],small:[1,\"small\"],clear:[2,\"clear\"]},null),(l()(),i._20(-1,0,[\"\\n          \"])),(l()(),i.Z(155,0,null,0,1,\"ion-icon\",[[\"name\",\"star\"],[\"role\",\"img\"]],[[2,\"hide\",null]],null,null,null,null)),i.Y(156,147456,null,0,mn.a,[Ql.a,i.j,i.z],{name:[0,\"name\"]},null),(l()(),i._20(-1,0,[\"\\n          Favorite\\n        \"])),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i.Z(160,0,null,null,9,\"ion-col\",[[\"class\",\"col\"],[\"text-center\",\"\"]],null,null,null,null,null)),i.Y(161,16384,null,0,Tu.a,[],null,null),(l()(),i._20(-1,null,[\"\\n        \"])),(l()(),i.Z(163,0,null,null,5,\"button\",[[\"clear\",\"\"],[\"color\",\"danger\"],[\"icon-start\",\"\"],[\"ion-button\",\"\"],[\"small\",\"\"]],null,null,null,An.b,An.a)),i.Y(164,1097728,null,0,Rn.a,[[8,\"\"],Ql.a,i.j,i.z],{color:[0,\"color\"],small:[1,\"small\"],clear:[2,\"clear\"]},null),(l()(),i._20(-1,0,[\"\\n          \"])),(l()(),i.Z(166,0,null,0,1,\"ion-icon\",[[\"name\",\"musical-notes\"],[\"role\",\"img\"]],[[2,\"hide\",null]],null,null,null,null)),i.Y(167,147456,null,0,mn.a,[Ql.a,i.j,i.z],{name:[0,\"name\"]},null),(l()(),i._20(-1,0,[\"\\n          Listen\\n        \"])),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i.Z(171,0,null,null,9,\"ion-col\",[[\"class\",\"col\"],[\"text-right\",\"\"]],null,null,null,null,null)),i.Y(172,16384,null,0,Tu.a,[],null,null),(l()(),i._20(-1,null,[\"\\n        \"])),(l()(),i.Z(174,0,null,null,5,\"button\",[[\"clear\",\"\"],[\"color\",\"danger\"],[\"icon-start\",\"\"],[\"ion-button\",\"\"],[\"small\",\"\"]],null,null,null,An.b,An.a)),i.Y(175,1097728,null,0,Rn.a,[[8,\"\"],Ql.a,i.j,i.z],{color:[0,\"color\"],small:[1,\"small\"],clear:[2,\"clear\"]},null),(l()(),i._20(-1,0,[\"\\n          \"])),(l()(),i.Z(177,0,null,0,1,\"ion-icon\",[[\"name\",\"share-alt\"],[\"role\",\"img\"]],[[2,\"hide\",null]],null,null,null,null)),i.Y(178,147456,null,0,mn.a,[Ql.a,i.j,i.z],{name:[0,\"name\"]},null),(l()(),i._20(-1,0,[\"\\n          Share\\n        \"])),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i._20(-1,null,[\"\\n    \"])),(l()(),i._20(-1,null,[\"\\n\\n  \"])),(l()(),i._20(-1,1,[\"\\n\\n  \"])),(l()(),i.Z(184,0,null,1,55,\"ion-card\",[],null,null,null,null,null)),i.Y(185,16384,null,0,Qn.a,[Ql.a,i.j,i.z],null,null),(l()(),i._20(-1,null,[\"\\n\\n    \"])),(l()(),i.Z(187,0,null,null,3,\"div\",[],null,null,null,null,null)),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i.Z(189,0,null,null,0,\"img\",[[\"src\",\"assets/img/rundmc-live.png\"]],null,null,null,null,null)),(l()(),i._20(-1,null,[\"\\n    \"])),(l()(),i._20(-1,null,[\"\\n\\n    \"])),(l()(),i.Z(192,0,null,null,9,\"ion-card-content\",[],null,null,null,null,null)),i.Y(193,16384,null,0,lu.a,[Ql.a,i.j,i.z],null,null),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i.Z(195,0,null,null,2,\"ion-card-title\",[],null,null,null,null,null)),i.Y(196,16384,null,0,nu.a,[Ql.a,i.j,i.z],null,null),(l()(),i._20(-1,null,[\"\\n        Run-D.M.C.\\n      \"])),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i.Z(199,0,null,null,1,\"p\",[],null,null,null,null,null)),(l()(),i._20(-1,null,[\"\\n        The American hip hop group widely acknowledged as one of the most influential acts in the history of hip hop.\\n      \"])),(l()(),i._20(-1,null,[\"\\n    \"])),(l()(),i._20(-1,null,[\"\\n\\n    \"])),(l()(),i.Z(203,0,null,null,35,\"ion-row\",[[\"class\",\"row\"],[\"no-padding\",\"\"]],null,null,null,null,null)),i.Y(204,16384,null,0,xu.a,[],null,null),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i.Z(206,0,null,null,9,\"ion-col\",[[\"class\",\"col\"]],null,null,null,null,null)),i.Y(207,16384,null,0,Tu.a,[],null,null),(l()(),i._20(-1,null,[\"\\n        \"])),(l()(),i.Z(209,0,null,null,5,\"button\",[[\"clear\",\"\"],[\"color\",\"danger\"],[\"icon-start\",\"\"],[\"ion-button\",\"\"],[\"small\",\"\"]],null,null,null,An.b,An.a)),i.Y(210,1097728,null,0,Rn.a,[[8,\"\"],Ql.a,i.j,i.z],{color:[0,\"color\"],small:[1,\"small\"],clear:[2,\"clear\"]},null),(l()(),i._20(-1,0,[\"\\n          \"])),(l()(),i.Z(212,0,null,0,1,\"ion-icon\",[[\"name\",\"star\"],[\"role\",\"img\"]],[[2,\"hide\",null]],null,null,null,null)),i.Y(213,147456,null,0,mn.a,[Ql.a,i.j,i.z],{name:[0,\"name\"]},null),(l()(),i._20(-1,0,[\"\\n          Favorite\\n        \"])),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i.Z(217,0,null,null,9,\"ion-col\",[[\"class\",\"col\"],[\"text-center\",\"\"]],null,null,null,null,null)),i.Y(218,16384,null,0,Tu.a,[],null,null),(l()(),i._20(-1,null,[\"\\n        \"])),(l()(),i.Z(220,0,null,null,5,\"button\",[[\"clear\",\"\"],[\"color\",\"danger\"],[\"icon-start\",\"\"],[\"ion-button\",\"\"],[\"small\",\"\"]],null,null,null,An.b,An.a)),i.Y(221,1097728,null,0,Rn.a,[[8,\"\"],Ql.a,i.j,i.z],{color:[0,\"color\"],small:[1,\"small\"],clear:[2,\"clear\"]},null),(l()(),i._20(-1,0,[\"\\n          \"])),(l()(),i.Z(223,0,null,0,1,\"ion-icon\",[[\"name\",\"musical-notes\"],[\"role\",\"img\"]],[[2,\"hide\",null]],null,null,null,null)),i.Y(224,147456,null,0,mn.a,[Ql.a,i.j,i.z],{name:[0,\"name\"]},null),(l()(),i._20(-1,0,[\"\\n          Listen\\n        \"])),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i.Z(228,0,null,null,9,\"ion-col\",[[\"class\",\"col\"],[\"text-right\",\"\"]],null,null,null,null,null)),i.Y(229,16384,null,0,Tu.a,[],null,null),(l()(),i._20(-1,null,[\"\\n        \"])),(l()(),i.Z(231,0,null,null,5,\"button\",[[\"clear\",\"\"],[\"color\",\"danger\"],[\"icon-start\",\"\"],[\"ion-button\",\"\"],[\"small\",\"\"]],null,null,null,An.b,An.a)),i.Y(232,1097728,null,0,Rn.a,[[8,\"\"],Ql.a,i.j,i.z],{color:[0,\"color\"],small:[1,\"small\"],clear:[2,\"clear\"]},null),(l()(),i._20(-1,0,[\"\\n          \"])),(l()(),i.Z(234,0,null,0,1,\"ion-icon\",[[\"name\",\"share-alt\"],[\"role\",\"img\"]],[[2,\"hide\",null]],null,null,null,null)),i.Y(235,147456,null,0,mn.a,[Ql.a,i.j,i.z],{name:[0,\"name\"]},null),(l()(),i._20(-1,0,[\"\\n          Share\\n        \"])),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i._20(-1,null,[\"\\n    \"])),(l()(),i._20(-1,null,[\"\\n\\n  \"])),(l()(),i._20(-1,1,[\"\\n\\n\\n\\n\"])),(l()(),i._20(-1,null,[\"\\n\"]))],function(l,n){l(n,39,0,\"danger\",\"\",\"\"),l(n,42,0,\"star\"),l(n,50,0,\"danger\",\"\",\"\"),l(n,53,0,\"musical-notes\"),l(n,61,0,\"danger\",\"\",\"\"),l(n,64,0,\"share-alt\"),l(n,96,0,\"danger\",\"\",\"\"),l(n,99,0,\"star\"),l(n,107,0,\"danger\",\"\",\"\"),l(n,110,0,\"musical-notes\"),l(n,118,0,\"danger\",\"\",\"\"),l(n,121,0,\"share-alt\"),l(n,153,0,\"danger\",\"\",\"\"),l(n,156,0,\"star\"),l(n,164,0,\"danger\",\"\",\"\"),l(n,167,0,\"musical-notes\"),l(n,175,0,\"danger\",\"\",\"\"),l(n,178,0,\"share-alt\"),l(n,210,0,\"danger\",\"\",\"\"),l(n,213,0,\"star\"),l(n,221,0,\"danger\",\"\",\"\"),l(n,224,0,\"musical-notes\"),l(n,232,0,\"danger\",\"\",\"\"),l(n,235,0,\"share-alt\")},function(l,n){l(n,4,0,i._13(n,5)._hidden,i._13(n,5)._sbPadding),l(n,13,0,i._13(n,14).statusbarPadding,i._13(n,14)._hasRefresher),l(n,41,0,i._13(n,42)._hidden),l(n,52,0,i._13(n,53)._hidden),l(n,63,0,i._13(n,64)._hidden),l(n,98,0,i._13(n,99)._hidden),l(n,109,0,i._13(n,110)._hidden),l(n,120,0,i._13(n,121)._hidden),l(n,155,0,i._13(n,156)._hidden),l(n,166,0,i._13(n,167)._hidden),l(n,177,0,i._13(n,178)._hidden),l(n,212,0,i._13(n,213)._hidden),l(n,223,0,i._13(n,224)._hidden),l(n,234,0,i._13(n,235)._hidden)})},Gu)),i.Y(1,49152,null,0,I,[],null,null)],null,null)},{},{},[]),Ku=i.X({encapsulation:2,styles:[],data:{}}),Ju=i.V(\"ng-component\",x,function(l){return i._22(0,[(l()(),i.Z(0,0,null,null,1,\"ng-component\",[],null,null,null,function(l){return i._22(0,[(l()(),i._20(-1,null,[\"\\n\"])),(l()(),i.Z(1,0,null,null,10,\"ion-header\",[],null,null,null,null,null)),i.Y(2,16384,null,0,jn.a,[Ql.a,i.j,i.z,[2,fn.a]],null,null),(l()(),i._20(-1,null,[\"\\n  \"])),(l()(),i.Z(4,0,null,null,6,\"ion-navbar\",[[\"class\",\"toolbar\"]],[[8,\"hidden\",0],[2,\"statusbar-padding\",null]],null,null,Fn.b,Fn.a)),i.Y(5,49152,null,0,Pn.a,[Yn.a,[2,fn.a],[2,Ln.a],Ql.a,i.j,i.z],null,null),(l()(),i._20(-1,3,[\"\\n    \"])),(l()(),i.Z(7,0,null,3,2,\"ion-title\",[],null,null,null,vn.b,vn.a)),i.Y(8,49152,null,0,yn.a,[Ql.a,i.j,i.z,[2,kn.a],[2,Pn.a]],null,null),(l()(),i._20(-1,0,[\"Card Lists\"])),(l()(),i._20(-1,3,[\"\\n  \"])),(l()(),i._20(-1,null,[\"\\n\"])),(l()(),i._20(-1,null,[\"\\n\\n\"])),(l()(),i.Z(13,0,null,null,80,\"ion-content\",[[\"class\",\" cards-bg\"]],[[2,\"statusbar-padding\",null],[2,\"has-refresher\",null]],null,null,Cn.b,Cn.a)),i.Y(14,4374528,null,0,wn.a,[Ql.a,on.a,_n.a,i.j,i.z,Yn.a,Zn.a,i.u,[2,fn.a],[2,Ln.a]],null,null),(l()(),i._20(-1,1,[\"\\n\\n  \"])),(l()(),i.Z(16,0,null,1,76,\"ion-card\",[[\"class\",\"cards-list-demo\"]],null,null,null,null,null)),i.Y(17,16384,null,0,Qn.a,[Ql.a,i.j,i.z],null,null),(l()(),i._20(-1,null,[\"\\n    \"])),(l()(),i.Z(19,0,null,null,2,\"ion-card-header\",[],null,null,null,null,null)),i.Y(20,16384,null,0,Wu.a,[Ql.a,i.j,i.z],null,null),(l()(),i._20(-1,null,[\"\\n      Explore Nearby\\n    \"])),(l()(),i._20(-1,null,[\"\\n\\n    \"])),(l()(),i.Z(23,0,null,null,68,\"ion-list\",[],null,null,null,null,null)),i.Y(24,16384,null,0,en.a,[Ql.a,i.j,i.z,on.a,tn.l,_n.a],null,null),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i.Z(26,0,null,null,9,\"button\",[[\"class\",\"item item-block\"],[\"ion-item\",\"\"]],null,null,null,$l.b,$l.a)),i.Y(27,1097728,null,3,Kl.a,[Jl.a,Ql.a,i.j,i.z,[2,ln.a]],null,null),i._18(335544320,1,{contentLabel:0}),i._18(603979776,2,{_buttons:1}),i._18(603979776,3,{_icons:1}),i.Y(31,16384,null,0,nn.a,[],null,null),(l()(),i._20(-1,2,[\"\\n        \"])),(l()(),i.Z(33,0,null,0,1,\"ion-icon\",[[\"item-start\",\"\"],[\"name\",\"cart\"],[\"role\",\"img\"]],[[2,\"hide\",null]],null,null,null,null)),i.Y(34,147456,[[3,4]],0,mn.a,[Ql.a,i.j,i.z],{name:[0,\"name\"]},null),(l()(),i._20(-1,2,[\"\\n        Shopping\\n      \"])),(l()(),i._20(-1,null,[\"\\n\\n      \"])),(l()(),i.Z(37,0,null,null,9,\"button\",[[\"class\",\"item item-block\"],[\"ion-item\",\"\"]],null,null,null,$l.b,$l.a)),i.Y(38,1097728,null,3,Kl.a,[Jl.a,Ql.a,i.j,i.z,[2,ln.a]],null,null),i._18(335544320,4,{contentLabel:0}),i._18(603979776,5,{_buttons:1}),i._18(603979776,6,{_icons:1}),i.Y(42,16384,null,0,nn.a,[],null,null),(l()(),i._20(-1,2,[\"\\n        \"])),(l()(),i.Z(44,0,null,0,1,\"ion-icon\",[[\"item-start\",\"\"],[\"name\",\"medical\"],[\"role\",\"img\"]],[[2,\"hide\",null]],null,null,null,null)),i.Y(45,147456,[[6,4]],0,mn.a,[Ql.a,i.j,i.z],{name:[0,\"name\"]},null),(l()(),i._20(-1,2,[\"\\n        Hospital\\n      \"])),(l()(),i._20(-1,null,[\"\\n\\n      \"])),(l()(),i.Z(48,0,null,null,9,\"button\",[[\"class\",\"item item-block\"],[\"ion-item\",\"\"]],null,null,null,$l.b,$l.a)),i.Y(49,1097728,null,3,Kl.a,[Jl.a,Ql.a,i.j,i.z,[2,ln.a]],null,null),i._18(335544320,7,{contentLabel:0}),i._18(603979776,8,{_buttons:1}),i._18(603979776,9,{_icons:1}),i.Y(53,16384,null,0,nn.a,[],null,null),(l()(),i._20(-1,2,[\"\\n        \"])),(l()(),i.Z(55,0,null,0,1,\"ion-icon\",[[\"item-start\",\"\"],[\"name\",\"cafe\"],[\"role\",\"img\"]],[[2,\"hide\",null]],null,null,null,null)),i.Y(56,147456,[[9,4]],0,mn.a,[Ql.a,i.j,i.z],{name:[0,\"name\"]},null),(l()(),i._20(-1,2,[\"\\n        Cafe\\n      \"])),(l()(),i._20(-1,null,[\"\\n\\n      \"])),(l()(),i.Z(59,0,null,null,9,\"button\",[[\"class\",\"item item-block\"],[\"ion-item\",\"\"]],null,null,null,$l.b,$l.a)),i.Y(60,1097728,null,3,Kl.a,[Jl.a,Ql.a,i.j,i.z,[2,ln.a]],null,null),i._18(335544320,10,{contentLabel:0}),i._18(603979776,11,{_buttons:1}),i._18(603979776,12,{_icons:1}),i.Y(64,16384,null,0,nn.a,[],null,null),(l()(),i._20(-1,2,[\"\\n        \"])),(l()(),i.Z(66,0,null,0,1,\"ion-icon\",[[\"item-start\",\"\"],[\"name\",\"paw\"],[\"role\",\"img\"]],[[2,\"hide\",null]],null,null,null,null)),i.Y(67,147456,[[12,4]],0,mn.a,[Ql.a,i.j,i.z],{name:[0,\"name\"]},null),(l()(),i._20(-1,2,[\"\\n        Dog Park\\n      \"])),(l()(),i._20(-1,null,[\"\\n\\n      \"])),(l()(),i.Z(70,0,null,null,9,\"button\",[[\"class\",\"item item-block\"],[\"ion-item\",\"\"]],null,null,null,$l.b,$l.a)),i.Y(71,1097728,null,3,Kl.a,[Jl.a,Ql.a,i.j,i.z,[2,ln.a]],null,null),i._18(335544320,13,{contentLabel:0}),i._18(603979776,14,{_buttons:1}),i._18(603979776,15,{_icons:1}),i.Y(75,16384,null,0,nn.a,[],null,null),(l()(),i._20(-1,2,[\"\\n        \"])),(l()(),i.Z(77,0,null,0,1,\"ion-icon\",[[\"item-start\",\"\"],[\"name\",\"beer\"],[\"role\",\"img\"]],[[2,\"hide\",null]],null,null,null,null)),i.Y(78,147456,[[15,4]],0,mn.a,[Ql.a,i.j,i.z],{name:[0,\"name\"]},null),(l()(),i._20(-1,2,[\"\\n        Pub\\n      \"])),(l()(),i._20(-1,null,[\"\\n\\n      \"])),(l()(),i.Z(81,0,null,null,9,\"button\",[[\"class\",\"item item-block\"],[\"ion-item\",\"\"]],null,null,null,$l.b,$l.a)),i.Y(82,1097728,null,3,Kl.a,[Jl.a,Ql.a,i.j,i.z,[2,ln.a]],null,null),i._18(335544320,16,{contentLabel:0}),i._18(603979776,17,{_buttons:1}),i._18(603979776,18,{_icons:1}),i.Y(86,16384,null,0,nn.a,[],null,null),(l()(),i._20(-1,2,[\"\\n        \"])),(l()(),i.Z(88,0,null,0,1,\"ion-icon\",[[\"item-start\",\"\"],[\"name\",\"planet\"],[\"role\",\"img\"]],[[2,\"hide\",null]],null,null,null,null)),i.Y(89,147456,[[18,4]],0,mn.a,[Ql.a,i.j,i.z],{name:[0,\"name\"]},null),(l()(),i._20(-1,2,[\"\\n        Space\\n      \"])),(l()(),i._20(-1,null,[\"\\n\\n    \"])),(l()(),i._20(-1,null,[\"\\n  \"])),(l()(),i._20(-1,1,[\"\\n\\n\"])),(l()(),i._20(-1,null,[\"\\n\"]))],function(l,n){l(n,34,0,\"cart\"),l(n,45,0,\"medical\"),l(n,56,0,\"cafe\"),l(n,67,0,\"paw\"),l(n,78,0,\"beer\"),l(n,89,0,\"planet\")},function(l,n){l(n,4,0,i._13(n,5)._hidden,i._13(n,5)._sbPadding),l(n,13,0,i._13(n,14).statusbarPadding,i._13(n,14)._hasRefresher),l(n,33,0,i._13(n,34)._hidden),l(n,44,0,i._13(n,45)._hidden),l(n,55,0,i._13(n,56)._hidden),l(n,66,0,i._13(n,67)._hidden),l(n,77,0,i._13(n,78)._hidden),l(n,88,0,i._13(n,89)._hidden)})},Ku)),i.Y(1,49152,null,0,x,[],null,null)],null,null)},{},{},[]),Qu=u(41),la=u(34),na=u(235),ua=u(95),aa=i.X({encapsulation:2,styles:[],data:{}}),ea=i.V(\"ng-component\",T,function(l){return i._22(0,[(l()(),i.Z(0,0,null,null,1,\"ng-component\",[],null,null,null,function(l){return i._22(0,[(l()(),i._20(-1,null,[\"\\n\"])),(l()(),i.Z(1,0,null,null,10,\"ion-header\",[],null,null,null,null,null)),i.Y(2,16384,null,0,jn.a,[Ql.a,i.j,i.z,[2,fn.a]],null,null),(l()(),i._20(-1,null,[\"\\n  \"])),(l()(),i.Z(4,0,null,null,6,\"ion-navbar\",[[\"class\",\"toolbar\"]],[[8,\"hidden\",0],[2,\"statusbar-padding\",null]],null,null,Fn.b,Fn.a)),i.Y(5,49152,null,0,Pn.a,[Yn.a,[2,fn.a],[2,Ln.a],Ql.a,i.j,i.z],null,null),(l()(),i._20(-1,3,[\"\\n    \"])),(l()(),i.Z(7,0,null,3,2,\"ion-title\",[],null,null,null,vn.b,vn.a)),i.Y(8,49152,null,0,yn.a,[Ql.a,i.j,i.z,[2,kn.a],[2,Pn.a]],null,null),(l()(),i._20(-1,0,[\"\\n      Checkboxes\\n    \"])),(l()(),i._20(-1,3,[\"\\n  \"])),(l()(),i._20(-1,null,[\"\\n\"])),(l()(),i._20(-1,null,[\"\\n\\n\"])),(l()(),i.Z(13,0,null,null,206,\"ion-content\",[],[[2,\"statusbar-padding\",null],[2,\"has-refresher\",null]],null,null,Cn.b,Cn.a)),i.Y(14,4374528,null,0,wn.a,[Ql.a,on.a,_n.a,i.j,i.z,Yn.a,Zn.a,i.u,[2,fn.a],[2,Ln.a]],null,null),(l()(),i._20(-1,1,[\"\\n\\n  \"])),(l()(),i.Z(16,0,null,1,202,\"ion-list\",[],null,null,null,null,null)),i.Y(17,16384,null,0,en.a,[Ql.a,i.j,i.z,on.a,tn.l,_n.a],null,null),(l()(),i._20(-1,null,[\"\\n    \"])),(l()(),i.Z(19,0,null,null,6,\"ion-list-header\",[[\"class\",\"item\"]],null,null,null,$l.b,$l.a)),i.Y(20,1097728,null,3,Kl.a,[Jl.a,Ql.a,i.j,i.z,[2,ln.a]],null,null),i._18(335544320,1,{contentLabel:0}),i._18(603979776,2,{_buttons:1}),i._18(603979776,3,{_icons:1}),i.Y(24,16384,null,0,Qu.a,[Ql.a,i.z,i.j,[8,null]],null,null),(l()(),i._20(-1,2,[\"\\n      Characters\\n    \"])),(l()(),i._20(-1,null,[\"\\n\\n    \"])),(l()(),i.Z(27,0,null,null,14,\"ion-item\",[[\"class\",\"item item-block\"]],null,null,null,$l.b,$l.a)),i.Y(28,1097728,null,3,Kl.a,[Jl.a,Ql.a,i.j,i.z,[2,ln.a]],null,null),i._18(335544320,4,{contentLabel:0}),i._18(603979776,5,{_buttons:1}),i._18(603979776,6,{_icons:1}),i.Y(32,16384,null,0,nn.a,[],null,null),(l()(),i._20(-1,2,[\"\\n      \"])),(l()(),i.Z(34,0,null,1,2,\"ion-label\",[],null,null,null,null,null)),i.Y(35,16384,[[4,4]],0,la.a,[Ql.a,i.j,i.z,[8,null],[8,null],[8,null],[8,null]],null,null),(l()(),i._20(-1,null,[\"Jon Snow\"])),(l()(),i._20(-1,2,[\"\\n      \"])),(l()(),i.Z(38,0,null,0,2,\"ion-checkbox\",[[\"checked\",\"true\"]],[[2,\"checkbox-disabled\",null]],[[null,\"click\"]],function(l,n,u){var a=!0;return\"click\"===n&&(a=!1!==i._13(l,40)._click(u)&&a),a},na.b,na.a)),i._17(5120,null,A.j,function(l){return[l]},[ua.a]),i.Y(40,1228800,null,0,ua.a,[Ql.a,Jl.a,[2,Kl.a],i.j,i.z],{checked:[0,\"checked\"]},null),(l()(),i._20(-1,2,[\"\\n    \"])),(l()(),i._20(-1,null,[\"\\n\\n    \"])),(l()(),i.Z(43,0,null,null,14,\"ion-item\",[[\"class\",\"item item-block\"]],null,null,null,$l.b,$l.a)),i.Y(44,1097728,null,3,Kl.a,[Jl.a,Ql.a,i.j,i.z,[2,ln.a]],null,null),i._18(335544320,7,{contentLabel:0}),i._18(603979776,8,{_buttons:1}),i._18(603979776,9,{_icons:1}),i.Y(48,16384,null,0,nn.a,[],null,null),(l()(),i._20(-1,2,[\"\\n      \"])),(l()(),i.Z(50,0,null,1,2,\"ion-label\",[],null,null,null,null,null)),i.Y(51,16384,[[7,4]],0,la.a,[Ql.a,i.j,i.z,[8,null],[8,null],[8,null],[8,null]],null,null),(l()(),i._20(-1,null,[\"Daenerys Targaryen\"])),(l()(),i._20(-1,2,[\"\\n      \"])),(l()(),i.Z(54,0,null,0,2,\"ion-checkbox\",[[\"checked\",\"true\"],[\"color\",\"dark\"]],[[2,\"checkbox-disabled\",null]],[[null,\"click\"]],function(l,n,u){var a=!0;return\"click\"===n&&(a=!1!==i._13(l,56)._click(u)&&a),a},na.b,na.a)),i._17(5120,null,A.j,function(l){return[l]},[ua.a]),i.Y(56,1228800,null,0,ua.a,[Ql.a,Jl.a,[2,Kl.a],i.j,i.z],{color:[0,\"color\"],checked:[1,\"checked\"]},null),(l()(),i._20(-1,2,[\"\\n    \"])),(l()(),i._20(-1,null,[\"\\n\\n    \"])),(l()(),i.Z(59,0,null,null,14,\"ion-item\",[[\"class\",\"item item-block\"]],null,null,null,$l.b,$l.a)),i.Y(60,1097728,null,3,Kl.a,[Jl.a,Ql.a,i.j,i.z,[2,ln.a]],null,null),i._18(335544320,10,{contentLabel:0}),i._18(603979776,11,{_buttons:1}),i._18(603979776,12,{_icons:1}),i.Y(64,16384,null,0,nn.a,[],null,null),(l()(),i._20(-1,2,[\"\\n      \"])),(l()(),i.Z(66,0,null,1,2,\"ion-label\",[],null,null,null,null,null)),i.Y(67,16384,[[10,4]],0,la.a,[Ql.a,i.j,i.z,[8,null],[8,null],[8,null],[8,null]],null,null),(l()(),i._20(-1,null,[\"Arya Stark\"])),(l()(),i._20(-1,2,[\"\\n      \"])),(l()(),i.Z(70,0,null,0,2,\"ion-checkbox\",[[\"disabled\",\"true\"],[\"value\",\"cherry\"]],[[2,\"checkbox-disabled\",null]],[[null,\"click\"]],function(l,n,u){var a=!0;return\"click\"===n&&(a=!1!==i._13(l,72)._click(u)&&a),a},na.b,na.a)),i._17(5120,null,A.j,function(l){return[l]},[ua.a]),i.Y(72,1228800,null,0,ua.a,[Ql.a,Jl.a,[2,Kl.a],i.j,i.z],{disabled:[0,\"disabled\"]},null),(l()(),i._20(-1,2,[\"\\n    \"])),(l()(),i._20(-1,null,[\"\\n\\n    \"])),(l()(),i.Z(75,0,null,null,14,\"ion-item\",[[\"class\",\"item item-block\"]],null,null,null,$l.b,$l.a)),i.Y(76,1097728,null,3,Kl.a,[Jl.a,Ql.a,i.j,i.z,[2,ln.a]],null,null),i._18(335544320,13,{contentLabel:0}),i._18(603979776,14,{_buttons:1}),i._18(603979776,15,{_icons:1}),i.Y(80,16384,null,0,nn.a,[],null,null),(l()(),i._20(-1,2,[\"\\n      \"])),(l()(),i.Z(82,0,null,1,2,\"ion-label\",[],null,null,null,null,null)),i.Y(83,16384,[[13,4]],0,la.a,[Ql.a,i.j,i.z,[8,null],[8,null],[8,null],[8,null]],null,null),(l()(),i._20(-1,null,[\"Tyrion Lannister\"])),(l()(),i._20(-1,2,[\"\\n      \"])),(l()(),i.Z(86,0,null,0,2,\"ion-checkbox\",[[\"color\",\"secondary\"]],[[2,\"checkbox-disabled\",null]],[[null,\"click\"]],function(l,n,u){var a=!0;return\"click\"===n&&(a=!1!==i._13(l,88)._click(u)&&a),a},na.b,na.a)),i._17(5120,null,A.j,function(l){return[l]},[ua.a]),i.Y(88,1228800,null,0,ua.a,[Ql.a,Jl.a,[2,Kl.a],i.j,i.z],{color:[0,\"color\"]},null),(l()(),i._20(-1,2,[\"\\n    \"])),(l()(),i._20(-1,null,[\"\\n\\n    \"])),(l()(),i.Z(91,0,null,null,14,\"ion-item\",[[\"class\",\"item item-block\"]],null,null,null,$l.b,$l.a)),i.Y(92,1097728,null,3,Kl.a,[Jl.a,Ql.a,i.j,i.z,[2,ln.a]],null,null),i._18(335544320,16,{contentLabel:0}),i._18(603979776,17,{_buttons:1}),i._18(603979776,18,{_icons:1}),i.Y(96,16384,null,0,nn.a,[],null,null),(l()(),i._20(-1,2,[\"\\n      \"])),(l()(),i.Z(98,0,null,1,2,\"ion-label\",[],null,null,null,null,null)),i.Y(99,16384,[[16,4]],0,la.a,[Ql.a,i.j,i.z,[8,null],[8,null],[8,null],[8,null]],null,null),(l()(),i._20(-1,null,[\"Sansa Stark\"])),(l()(),i._20(-1,2,[\"\\n      \"])),(l()(),i.Z(102,0,null,0,2,\"ion-checkbox\",[[\"checked\",\"true\"],[\"color\",\"danger\"]],[[2,\"checkbox-disabled\",null]],[[null,\"click\"]],function(l,n,u){var a=!0;return\"click\"===n&&(a=!1!==i._13(l,104)._click(u)&&a),a},na.b,na.a)),i._17(5120,null,A.j,function(l){return[l]},[ua.a]),i.Y(104,1228800,null,0,ua.a,[Ql.a,Jl.a,[2,Kl.a],i.j,i.z],{color:[0,\"color\"],checked:[1,\"checked\"]},null),(l()(),i._20(-1,2,[\"\\n    \"])),(l()(),i._20(-1,null,[\"\\n\\n    \"])),(l()(),i.Z(107,0,null,null,14,\"ion-item\",[[\"class\",\"item item-block\"]],null,null,null,$l.b,$l.a)),i.Y(108,1097728,null,3,Kl.a,[Jl.a,Ql.a,i.j,i.z,[2,ln.a]],null,null),i._18(335544320,19,{contentLabel:0}),i._18(603979776,20,{_buttons:1}),i._18(603979776,21,{_icons:1}),i.Y(112,16384,null,0,nn.a,[],null,null),(l()(),i._20(-1,2,[\"\\n      \"])),(l()(),i.Z(114,0,null,1,2,\"ion-label\",[],null,null,null,null,null)),i.Y(115,16384,[[19,4]],0,la.a,[Ql.a,i.j,i.z,[8,null],[8,null],[8,null],[8,null]],null,null),(l()(),i._20(-1,null,[\"Khal Drogo\"])),(l()(),i._20(-1,2,[\"\\n      \"])),(l()(),i.Z(118,0,null,0,2,\"ion-checkbox\",[],[[2,\"checkbox-disabled\",null]],[[null,\"click\"]],function(l,n,u){var a=!0;return\"click\"===n&&(a=!1!==i._13(l,120)._click(u)&&a),a},na.b,na.a)),i._17(5120,null,A.j,function(l){return[l]},[ua.a]),i.Y(120,1228800,null,0,ua.a,[Ql.a,Jl.a,[2,Kl.a],i.j,i.z],null,null),(l()(),i._20(-1,2,[\"\\n    \"])),(l()(),i._20(-1,null,[\"\\n\\n    \"])),(l()(),i.Z(123,0,null,null,14,\"ion-item\",[[\"class\",\"item item-block\"]],null,null,null,$l.b,$l.a)),i.Y(124,1097728,null,3,Kl.a,[Jl.a,Ql.a,i.j,i.z,[2,ln.a]],null,null),i._18(335544320,22,{contentLabel:0}),i._18(603979776,23,{_buttons:1}),i._18(603979776,24,{_icons:1}),i.Y(128,16384,null,0,nn.a,[],null,null),(l()(),i._20(-1,2,[\"\\n      \"])),(l()(),i.Z(130,0,null,1,2,\"ion-label\",[],null,null,null,null,null)),i.Y(131,16384,[[22,4]],0,la.a,[Ql.a,i.j,i.z,[8,null],[8,null],[8,null],[8,null]],null,null),(l()(),i._20(-1,null,[\"Cersei Lannister\"])),(l()(),i._20(-1,2,[\"\\n      \"])),(l()(),i.Z(134,0,null,0,2,\"ion-checkbox\",[[\"checked\",\"true\"],[\"color\",\"dark\"]],[[2,\"checkbox-disabled\",null]],[[null,\"click\"]],function(l,n,u){var a=!0;return\"click\"===n&&(a=!1!==i._13(l,136)._click(u)&&a),a},na.b,na.a)),i._17(5120,null,A.j,function(l){return[l]},[ua.a]),i.Y(136,1228800,null,0,ua.a,[Ql.a,Jl.a,[2,Kl.a],i.j,i.z],{color:[0,\"color\"],checked:[1,\"checked\"]},null),(l()(),i._20(-1,2,[\"\\n    \"])),(l()(),i._20(-1,null,[\"\\n\\n    \"])),(l()(),i.Z(139,0,null,null,14,\"ion-item\",[[\"class\",\"item item-block\"]],null,null,null,$l.b,$l.a)),i.Y(140,1097728,null,3,Kl.a,[Jl.a,Ql.a,i.j,i.z,[2,ln.a]],null,null),i._18(335544320,25,{contentLabel:0}),i._18(603979776,26,{_buttons:1}),i._18(603979776,27,{_icons:1}),i.Y(144,16384,null,0,nn.a,[],null,null),(l()(),i._20(-1,2,[\"\\n      \"])),(l()(),i.Z(146,0,null,1,2,\"ion-label\",[],null,null,null,null,null)),i.Y(147,16384,[[25,4]],0,la.a,[Ql.a,i.j,i.z,[8,null],[8,null],[8,null],[8,null]],null,null),(l()(),i._20(-1,null,[\"Stannis Baratheon\"])),(l()(),i._20(-1,2,[\"\\n      \"])),(l()(),i.Z(150,0,null,0,2,\"ion-checkbox\",[[\"checked\",\"true\"],[\"color\",\"royal\"]],[[2,\"checkbox-disabled\",null]],[[null,\"click\"]],function(l,n,u){var a=!0;return\"click\"===n&&(a=!1!==i._13(l,152)._click(u)&&a),a},na.b,na.a)),i._17(5120,null,A.j,function(l){return[l]},[ua.a]),i.Y(152,1228800,null,0,ua.a,[Ql.a,Jl.a,[2,Kl.a],i.j,i.z],{color:[0,\"color\"],checked:[1,\"checked\"]},null),(l()(),i._20(-1,2,[\"\\n    \"])),(l()(),i._20(-1,null,[\"\\n\\n    \"])),(l()(),i.Z(155,0,null,null,14,\"ion-item\",[[\"class\",\"item item-block\"]],null,null,null,$l.b,$l.a)),i.Y(156,1097728,null,3,Kl.a,[Jl.a,Ql.a,i.j,i.z,[2,ln.a]],null,null),i._18(335544320,28,{contentLabel:0}),i._18(603979776,29,{_buttons:1}),i._18(603979776,30,{_icons:1}),i.Y(160,16384,null,0,nn.a,[],null,null),(l()(),i._20(-1,2,[\"\\n      \"])),(l()(),i.Z(162,0,null,1,2,\"ion-label\",[],null,null,null,null,null)),i.Y(163,16384,[[28,4]],0,la.a,[Ql.a,i.j,i.z,[8,null],[8,null],[8,null],[8,null]],null,null),(l()(),i._20(-1,null,[\"Petyr Baelish\"])),(l()(),i._20(-1,2,[\"\\n      \"])),(l()(),i.Z(166,0,null,0,2,\"ion-checkbox\",[[\"disabled\",\"true\"]],[[2,\"checkbox-disabled\",null]],[[null,\"click\"]],function(l,n,u){var a=!0;return\"click\"===n&&(a=!1!==i._13(l,168)._click(u)&&a),a},na.b,na.a)),i._17(5120,null,A.j,function(l){return[l]},[ua.a]),i.Y(168,1228800,null,0,ua.a,[Ql.a,Jl.a,[2,Kl.a],i.j,i.z],{disabled:[0,\"disabled\"]},null),(l()(),i._20(-1,2,[\"\\n    \"])),(l()(),i._20(-1,null,[\"\\n\\n    \"])),(l()(),i.Z(171,0,null,null,14,\"ion-item\",[[\"class\",\"item item-block\"]],null,null,null,$l.b,$l.a)),i.Y(172,1097728,null,3,Kl.a,[Jl.a,Ql.a,i.j,i.z,[2,ln.a]],null,null),i._18(335544320,31,{contentLabel:0}),i._18(603979776,32,{_buttons:1}),i._18(603979776,33,{_icons:1}),i.Y(176,16384,null,0,nn.a,[],null,null),(l()(),i._20(-1,2,[\"\\n      \"])),(l()(),i.Z(178,0,null,1,2,\"ion-label\",[],null,null,null,null,null)),i.Y(179,16384,[[31,4]],0,la.a,[Ql.a,i.j,i.z,[8,null],[8,null],[8,null],[8,null]],null,null),(l()(),i._20(-1,null,[\"Hodor\"])),(l()(),i._20(-1,2,[\"\\n      \"])),(l()(),i.Z(182,0,null,0,2,\"ion-checkbox\",[[\"checked\",\"true\"],[\"color\",\"dark\"]],[[2,\"checkbox-disabled\",null]],[[null,\"click\"]],function(l,n,u){var a=!0;return\"click\"===n&&(a=!1!==i._13(l,184)._click(u)&&a),a},na.b,na.a)),i._17(5120,null,A.j,function(l){return[l]},[ua.a]),i.Y(184,1228800,null,0,ua.a,[Ql.a,Jl.a,[2,Kl.a],i.j,i.z],{color:[0,\"color\"],checked:[1,\"checked\"]},null),(l()(),i._20(-1,2,[\"\\n    \"])),(l()(),i._20(-1,null,[\"\\n\\n    \"])),(l()(),i.Z(187,0,null,null,14,\"ion-item\",[[\"class\",\"item item-block\"]],null,null,null,$l.b,$l.a)),i.Y(188,1097728,null,3,Kl.a,[Jl.a,Ql.a,i.j,i.z,[2,ln.a]],null,null),i._18(335544320,34,{contentLabel:0}),i._18(603979776,35,{_buttons:1}),i._18(603979776,36,{_icons:1}),i.Y(192,16384,null,0,nn.a,[],null,null),(l()(),i._20(-1,2,[\"\\n      \"])),(l()(),i.Z(194,0,null,1,2,\"ion-label\",[],null,null,null,null,null)),i.Y(195,16384,[[34,4]],0,la.a,[Ql.a,i.j,i.z,[8,null],[8,null],[8,null],[8,null]],null,null),(l()(),i._20(-1,null,[\"Catelyn Stark\"])),(l()(),i._20(-1,2,[\"\\n      \"])),(l()(),i.Z(198,0,null,0,2,\"ion-checkbox\",[[\"checked\",\"true\"],[\"color\",\"secondary\"]],[[2,\"checkbox-disabled\",null]],[[null,\"click\"]],function(l,n,u){var a=!0;return\"click\"===n&&(a=!1!==i._13(l,200)._click(u)&&a),a},na.b,na.a)),i._17(5120,null,A.j,function(l){return[l]},[ua.a]),i.Y(200,1228800,null,0,ua.a,[Ql.a,Jl.a,[2,Kl.a],i.j,i.z],{color:[0,\"color\"],checked:[1,\"checked\"]},null),(l()(),i._20(-1,2,[\"\\n    \"])),(l()(),i._20(-1,null,[\"\\n\\n    \"])),(l()(),i.Z(203,0,null,null,14,\"ion-item\",[[\"class\",\"item item-block\"]],null,null,null,$l.b,$l.a)),i.Y(204,1097728,null,3,Kl.a,[Jl.a,Ql.a,i.j,i.z,[2,ln.a]],null,null),i._18(335544320,37,{contentLabel:0}),i._18(603979776,38,{_buttons:1}),i._18(603979776,39,{_icons:1}),i.Y(208,16384,null,0,nn.a,[],null,null),(l()(),i._20(-1,2,[\"\\n      \"])),(l()(),i.Z(210,0,null,1,2,\"ion-label\",[],null,null,null,null,null)),i.Y(211,16384,[[37,4]],0,la.a,[Ql.a,i.j,i.z,[8,null],[8,null],[8,null],[8,null]],null,null),(l()(),i._20(-1,null,[\"Bronn\"])),(l()(),i._20(-1,2,[\"\\n      \"])),(l()(),i.Z(214,0,null,0,2,\"ion-checkbox\",[[\"color\",\"royal\"]],[[2,\"checkbox-disabled\",null]],[[null,\"click\"]],function(l,n,u){var a=!0;return\"click\"===n&&(a=!1!==i._13(l,216)._click(u)&&a),a},na.b,na.a)),i._17(5120,null,A.j,function(l){return[l]},[ua.a]),i.Y(216,1228800,null,0,ua.a,[Ql.a,Jl.a,[2,Kl.a],i.j,i.z],{color:[0,\"color\"]},null),(l()(),i._20(-1,2,[\"\\n    \"])),(l()(),i._20(-1,null,[\"\\n\\n\\n  \"])),(l()(),i._20(-1,1,[\"\\n\\n\"])),(l()(),i._20(-1,null,[\"\\n\"]))],function(l,n){l(n,40,0,\"true\"),l(n,56,0,\"dark\",\"true\"),l(n,72,0,\"true\"),l(n,88,0,\"secondary\"),l(n,104,0,\"danger\",\"true\"),l(n,136,0,\"dark\",\"true\"),l(n,152,0,\"royal\",\"true\"),l(n,168,0,\"true\"),l(n,184,0,\"dark\",\"true\"),l(n,200,0,\"secondary\",\"true\"),l(n,216,0,\"royal\")},function(l,n){l(n,4,0,i._13(n,5)._hidden,i._13(n,5)._sbPadding),l(n,13,0,i._13(n,14).statusbarPadding,i._13(n,14)._hasRefresher),l(n,38,0,i._13(n,40)._disabled),l(n,54,0,i._13(n,56)._disabled),l(n,70,0,i._13(n,72)._disabled),l(n,86,0,i._13(n,88)._disabled),l(n,102,0,i._13(n,104)._disabled),l(n,118,0,i._13(n,120)._disabled),l(n,134,0,i._13(n,136)._disabled),l(n,150,0,i._13(n,152)._disabled),l(n,166,0,i._13(n,168)._disabled),l(n,182,0,i._13(n,184)._disabled),l(n,198,0,i._13(n,200)._disabled),l(n,214,0,i._13(n,216)._disabled)})},aa)),i.Y(1,49152,null,0,T,[],null,null)],null,null)},{},{},[]),oa=u(56),ta=u(44),ia=u(236),_a=u(96),sa=u(68),ca=i.X({encapsulation:0,styles:[\"ion-list[_ngcontent-%COMP%]:first-child {\\n    margin-top: 32px;\\n  }\\n\\n  ion-list[_ngcontent-%COMP%]    + ion-list[_ngcontent-%COMP%] {\\n    margin-top: 0;\\n  }\"],data:{}}),ra=i.V(\"ng-component\",S,function(l){return i._22(0,[(l()(),i.Z(0,0,null,null,1,\"ng-component\",[],null,null,null,function(l){return i._22(0,[(l()(),i._20(-1,null,[\"\\n\"])),(l()(),i.Z(1,0,null,null,10,\"ion-header\",[],null,null,null,null,null)),i.Y(2,16384,null,0,jn.a,[Ql.a,i.j,i.z,[2,fn.a]],null,null),(l()(),i._20(-1,null,[\"\\n  \"])),(l()(),i.Z(4,0,null,null,6,\"ion-navbar\",[[\"class\",\"toolbar\"]],[[8,\"hidden\",0],[2,\"statusbar-padding\",null]],null,null,Fn.b,Fn.a)),i.Y(5,49152,null,0,Pn.a,[Yn.a,[2,fn.a],[2,Ln.a],Ql.a,i.j,i.z],null,null),(l()(),i._20(-1,3,[\"\\n    \"])),(l()(),i.Z(7,0,null,3,2,\"ion-title\",[],null,null,null,vn.b,vn.a)),i.Y(8,49152,null,0,yn.a,[Ql.a,i.j,i.z,[2,kn.a],[2,Pn.a]],null,null),(l()(),i._20(-1,0,[\"\\n      DateTime\\n    \"])),(l()(),i._20(-1,3,[\"\\n  \"])),(l()(),i._20(-1,null,[\"\\n\"])),(l()(),i._20(-1,null,[\"\\n\\n\"])),(l()(),i.Z(13,0,null,null,141,\"ion-content\",[[\"class\",\"outer-content\"]],[[2,\"statusbar-padding\",null],[2,\"has-refresher\",null]],null,null,Cn.b,Cn.a)),i.Y(14,4374528,null,0,wn.a,[Ql.a,on.a,_n.a,i.j,i.z,Yn.a,Zn.a,i.u,[2,fn.a],[2,Ln.a]],null,null),(l()(),i._20(-1,1,[\"\\n\\n  \"])),(l()(),i.Z(16,0,null,1,24,\"ion-list\",[],null,null,null,null,null)),i.Y(17,16384,null,0,en.a,[Ql.a,i.j,i.z,on.a,tn.l,_n.a],null,null),(l()(),i._20(-1,null,[\"\\n    \"])),(l()(),i.Z(19,0,null,null,9,\"ion-item\",[[\"class\",\"item item-block\"]],null,null,null,$l.b,$l.a)),i.Y(20,1097728,null,3,Kl.a,[Jl.a,Ql.a,i.j,i.z,[2,ln.a]],null,null),i._18(335544320,1,{contentLabel:0}),i._18(603979776,2,{_buttons:1}),i._18(603979776,3,{_icons:1}),i.Y(24,16384,null,0,nn.a,[],null,null),(l()(),i._20(-1,2,[\"\\n      \"])),(l()(),i.Z(26,0,null,3,1,\"ion-input\",[[\"placeholder\",\"Title\"]],null,null,null,oa.b,oa.a)),i.Y(27,5423104,null,0,ta.a,[Ql.a,on.a,Jl.a,Yn.a,i.j,i.z,[2,wn.a],[2,Kl.a],[2,A.k],_n.a],{placeholder:[0,\"placeholder\"]},null),(l()(),i._20(-1,2,[\"\\n    \"])),(l()(),i._20(-1,null,[\"\\n    \"])),(l()(),i.Z(30,0,null,null,9,\"ion-item\",[[\"class\",\"item item-block\"]],null,null,null,$l.b,$l.a)),i.Y(31,1097728,null,3,Kl.a,[Jl.a,Ql.a,i.j,i.z,[2,ln.a]],null,null),i._18(335544320,4,{contentLabel:0}),i._18(603979776,5,{_buttons:1}),i._18(603979776,6,{_icons:1}),i.Y(35,16384,null,0,nn.a,[],null,null),(l()(),i._20(-1,2,[\"\\n      \"])),(l()(),i.Z(37,0,null,3,1,\"ion-input\",[[\"placeholder\",\"Location\"]],null,null,null,oa.b,oa.a)),i.Y(38,5423104,null,0,ta.a,[Ql.a,on.a,Jl.a,Yn.a,i.j,i.z,[2,wn.a],[2,Kl.a],[2,A.k],_n.a],{placeholder:[0,\"placeholder\"]},null),(l()(),i._20(-1,2,[\"\\n    \"])),(l()(),i._20(-1,null,[\"\\n  \"])),(l()(),i._20(-1,1,[\"\\n\\n  \"])),(l()(),i.Z(42,0,null,1,91,\"ion-list\",[],null,null,null,null,null)),i.Y(43,16384,null,0,en.a,[Ql.a,i.j,i.z,on.a,tn.l,_n.a],null,null),(l()(),i._20(-1,null,[\"\\n    \"])),(l()(),i.Z(45,0,null,null,17,\"ion-item\",[[\"class\",\"item item-block\"]],null,null,null,$l.b,$l.a)),i.Y(46,1097728,null,3,Kl.a,[Jl.a,Ql.a,i.j,i.z,[2,ln.a]],null,null),i._18(335544320,7,{contentLabel:0}),i._18(603979776,8,{_buttons:1}),i._18(603979776,9,{_icons:1}),i.Y(50,16384,null,0,nn.a,[],null,null),(l()(),i._20(-1,2,[\"\\n      \"])),(l()(),i.Z(52,0,null,1,2,\"ion-label\",[],null,null,null,null,null)),i.Y(53,16384,[[7,4]],0,la.a,[Ql.a,i.j,i.z,[8,null],[8,null],[8,null],[8,null]],null,null),(l()(),i._20(-1,null,[\"Start Date\"])),(l()(),i._20(-1,2,[\"\\n      \"])),(l()(),i.Z(56,0,null,3,5,\"ion-datetime\",[[\"displayFormat\",\"MMM DD YYYY\"]],[[2,\"datetime-disabled\",null],[2,\"ng-untouched\",null],[2,\"ng-touched\",null],[2,\"ng-pristine\",null],[2,\"ng-dirty\",null],[2,\"ng-valid\",null],[2,\"ng-invalid\",null],[2,\"ng-pending\",null]],[[null,\"ngModelChange\"],[null,\"click\"],[null,\"keyup.space\"]],function(l,n,u){var a=!0,e=l.component;return\"click\"===n&&(a=!1!==i._13(l,57)._click(u)&&a),\"keyup.space\"===n&&(a=!1!==i._13(l,57)._keyup()&&a),\"ngModelChange\"===n&&(a=!1!==(e.event.month=u)&&a),a},ia.b,ia.a)),i.Y(57,1228800,null,0,_a.a,[Jl.a,Ql.a,i.j,i.z,[2,Kl.a],[2,sa.a]],{displayFormat:[0,\"displayFormat\"]},null),i._17(1024,null,A.j,function(l){return[l]},[_a.a]),i.Y(59,671744,null,0,A.n,[[8,null],[8,null],[8,null],[2,A.j]],{model:[0,\"model\"]},{update:\"ngModelChange\"}),i._17(2048,null,A.k,null,[A.n]),i.Y(61,16384,null,0,A.l,[A.k],null,null),(l()(),i._20(-1,2,[\"\\n    \"])),(l()(),i._20(-1,null,[\"\\n\\n\\n    \"])),(l()(),i.Z(64,0,null,null,17,\"ion-item\",[[\"class\",\"item item-block\"]],null,null,null,$l.b,$l.a)),i.Y(65,1097728,null,3,Kl.a,[Jl.a,Ql.a,i.j,i.z,[2,ln.a]],null,null),i._18(335544320,10,{contentLabel:0}),i._18(603979776,11,{_buttons:1}),i._18(603979776,12,{_icons:1}),i.Y(69,16384,null,0,nn.a,[],null,null),(l()(),i._20(-1,2,[\"\\n      \"])),(l()(),i.Z(71,0,null,1,2,\"ion-label\",[],null,null,null,null,null)),i.Y(72,16384,[[10,4]],0,la.a,[Ql.a,i.j,i.z,[8,null],[8,null],[8,null],[8,null]],null,null),(l()(),i._20(-1,null,[\"Start Time\"])),(l()(),i._20(-1,2,[\"\\n      \"])),(l()(),i.Z(75,0,null,3,5,\"ion-datetime\",[[\"displayFormat\",\"h:mm A\"],[\"pickerFormat\",\"h mm A\"]],[[2,\"datetime-disabled\",null],[2,\"ng-untouched\",null],[2,\"ng-touched\",null],[2,\"ng-pristine\",null],[2,\"ng-dirty\",null],[2,\"ng-valid\",null],[2,\"ng-invalid\",null],[2,\"ng-pending\",null]],[[null,\"ngModelChange\"],[null,\"click\"],[null,\"keyup.space\"]],function(l,n,u){var a=!0,e=l.component;return\"click\"===n&&(a=!1!==i._13(l,76)._click(u)&&a),\"keyup.space\"===n&&(a=!1!==i._13(l,76)._keyup()&&a),\"ngModelChange\"===n&&(a=!1!==(e.event.timeStarts=u)&&a),a},ia.b,ia.a)),i.Y(76,1228800,null,0,_a.a,[Jl.a,Ql.a,i.j,i.z,[2,Kl.a],[2,sa.a]],{displayFormat:[0,\"displayFormat\"],pickerFormat:[1,\"pickerFormat\"]},null),i._17(1024,null,A.j,function(l){return[l]},[_a.a]),i.Y(78,671744,null,0,A.n,[[8,null],[8,null],[8,null],[2,A.j]],{model:[0,\"model\"]},{update:\"ngModelChange\"}),i._17(2048,null,A.k,null,[A.n]),i.Y(80,16384,null,0,A.l,[A.k],null,null),(l()(),i._20(-1,2,[\"\\n    \"])),(l()(),i._20(-1,null,[\"\\n\\n    \"])),(l()(),i.Z(83,0,null,null,17,\"ion-item\",[[\"class\",\"item item-block\"]],null,null,null,$l.b,$l.a)),i.Y(84,1097728,null,3,Kl.a,[Jl.a,Ql.a,i.j,i.z,[2,ln.a]],null,null),i._18(335544320,13,{contentLabel:0}),i._18(603979776,14,{_buttons:1}),i._18(603979776,15,{_icons:1}),i.Y(88,16384,null,0,nn.a,[],null,null),(l()(),i._20(-1,2,[\"\\n      \"])),(l()(),i.Z(90,0,null,1,2,\"ion-label\",[],null,null,null,null,null)),i.Y(91,16384,[[13,4]],0,la.a,[Ql.a,i.j,i.z,[8,null],[8,null],[8,null],[8,null]],null,null),(l()(),i._20(-1,null,[\"Ends\"])),(l()(),i._20(-1,2,[\"\\n      \"])),(l()(),i.Z(94,0,null,3,5,\"ion-datetime\",[[\"displayFormat\",\"MMM DD YYYY\"]],[[2,\"datetime-disabled\",null],[2,\"ng-untouched\",null],[2,\"ng-touched\",null],[2,\"ng-pristine\",null],[2,\"ng-dirty\",null],[2,\"ng-valid\",null],[2,\"ng-invalid\",null],[2,\"ng-pending\",null]],[[null,\"ngModelChange\"],[null,\"click\"],[null,\"keyup.space\"]],function(l,n,u){var a=!0,e=l.component;return\"click\"===n&&(a=!1!==i._13(l,95)._click(u)&&a),\"keyup.space\"===n&&(a=!1!==i._13(l,95)._keyup()&&a),\"ngModelChange\"===n&&(a=!1!==(e.event.timeEnds=u)&&a),a},ia.b,ia.a)),i.Y(95,1228800,null,0,_a.a,[Jl.a,Ql.a,i.j,i.z,[2,Kl.a],[2,sa.a]],{displayFormat:[0,\"displayFormat\"]},null),i._17(1024,null,A.j,function(l){return[l]},[_a.a]),i.Y(97,671744,null,0,A.n,[[8,null],[8,null],[8,null],[2,A.j]],{model:[0,\"model\"]},{update:\"ngModelChange\"}),i._17(2048,null,A.k,null,[A.n]),i.Y(99,16384,null,0,A.l,[A.k],null,null),(l()(),i._20(-1,2,[\"\\n    \"])),(l()(),i._20(-1,null,[\"\\n\\n    \"])),(l()(),i.Z(102,0,null,null,14,\"button\",[[\"class\",\"item item-block\"],[\"ion-item\",\"\"]],null,null,null,$l.b,$l.a)),i.Y(103,1097728,null,3,Kl.a,[Jl.a,Ql.a,i.j,i.z,[2,ln.a]],null,null),i._18(335544320,16,{contentLabel:0}),i._18(603979776,17,{_buttons:1}),i._18(603979776,18,{_icons:1}),i.Y(107,16384,null,0,nn.a,[],null,null),(l()(),i._20(-1,2,[\"\\n      \"])),(l()(),i.Z(109,0,null,1,2,\"ion-label\",[],null,null,null,null,null)),i.Y(110,16384,[[16,4]],0,la.a,[Ql.a,i.j,i.z,[8,null],[8,null],[8,null],[8,null]],null,null),(l()(),i._20(-1,null,[\"Repeat\"])),(l()(),i._20(-1,2,[\"\\n      \"])),(l()(),i.Z(113,0,null,4,2,\"ion-note\",[[\"item-end\",\"\"]],null,null,null,null,null)),i.Y(114,16384,null,0,Su.a,[Ql.a,i.j,i.z],null,null),(l()(),i._20(-1,null,[\"Never\"])),(l()(),i._20(-1,2,[\"\\n    \"])),(l()(),i._20(-1,null,[\"\\n\\n    \"])),(l()(),i.Z(118,0,null,null,14,\"button\",[[\"class\",\"item item-block\"],[\"ion-item\",\"\"]],null,null,null,$l.b,$l.a)),i.Y(119,1097728,null,3,Kl.a,[Jl.a,Ql.a,i.j,i.z,[2,ln.a]],null,null),i._18(335544320,19,{contentLabel:0}),i._18(603979776,20,{_buttons:1}),i._18(603979776,21,{_icons:1}),i.Y(123,16384,null,0,nn.a,[],null,null),(l()(),i._20(-1,2,[\"\\n      \"])),(l()(),i.Z(125,0,null,1,2,\"ion-label\",[],null,null,null,null,null)),i.Y(126,16384,[[19,4]],0,la.a,[Ql.a,i.j,i.z,[8,null],[8,null],[8,null],[8,null]],null,null),(l()(),i._20(-1,null,[\"Travel Time\"])),(l()(),i._20(-1,2,[\"\\n      \"])),(l()(),i.Z(129,0,null,4,2,\"ion-note\",[[\"item-end\",\"\"]],null,null,null,null,null)),i.Y(130,16384,null,0,Su.a,[Ql.a,i.j,i.z],null,null),(l()(),i._20(-1,null,[\"None\"])),(l()(),i._20(-1,2,[\"\\n    \"])),(l()(),i._20(-1,null,[\"\\n  \"])),(l()(),i._20(-1,1,[\"\\n\\n  \"])),(l()(),i.Z(135,0,null,1,18,\"ion-list\",[],null,null,null,null,null)),i.Y(136,16384,null,0,en.a,[Ql.a,i.j,i.z,on.a,tn.l,_n.a],null,null),(l()(),i._20(-1,null,[\"\\n    \"])),(l()(),i.Z(138,0,null,null,14,\"button\",[[\"class\",\"item item-block\"],[\"ion-item\",\"\"]],null,null,null,$l.b,$l.a)),i.Y(139,1097728,null,3,Kl.a,[Jl.a,Ql.a,i.j,i.z,[2,ln.a]],null,null),i._18(335544320,22,{contentLabel:0}),i._18(603979776,23,{_buttons:1}),i._18(603979776,24,{_icons:1}),i.Y(143,16384,null,0,nn.a,[],null,null),(l()(),i._20(-1,2,[\"\\n      \"])),(l()(),i.Z(145,0,null,1,2,\"ion-label\",[],null,null,null,null,null)),i.Y(146,16384,[[22,4]],0,la.a,[Ql.a,i.j,i.z,[8,null],[8,null],[8,null],[8,null]],null,null),(l()(),i._20(-1,null,[\"Alert\"])),(l()(),i._20(-1,2,[\"\\n      \"])),(l()(),i.Z(149,0,null,4,2,\"ion-note\",[[\"item-end\",\"\"]],null,null,null,null,null)),i.Y(150,16384,null,0,Su.a,[Ql.a,i.j,i.z],null,null),(l()(),i._20(-1,null,[\"None\"])),(l()(),i._20(-1,2,[\"\\n    \"])),(l()(),i._20(-1,null,[\"\\n  \"])),(l()(),i._20(-1,1,[\"\\n\\n\"])),(l()(),i._20(-1,null,[\"\\n\\n\"])),(l()(),i._20(-1,null,[\"\\n\"]))],function(l,n){var u=n.component;l(n,27,0,\"Title\"),l(n,38,0,\"Location\"),l(n,57,0,\"MMM DD YYYY\"),l(n,59,0,u.event.month),l(n,76,0,\"h:mm A\",\"h mm A\"),l(n,78,0,u.event.timeStarts),l(n,95,0,\"MMM DD YYYY\"),l(n,97,0,u.event.timeEnds)},function(l,n){l(n,4,0,i._13(n,5)._hidden,i._13(n,5)._sbPadding),l(n,13,0,i._13(n,14).statusbarPadding,i._13(n,14)._hasRefresher),l(n,56,0,i._13(n,57)._disabled,i._13(n,61).ngClassUntouched,i._13(n,61).ngClassTouched,i._13(n,61).ngClassPristine,i._13(n,61).ngClassDirty,i._13(n,61).ngClassValid,i._13(n,61).ngClassInvalid,i._13(n,61).ngClassPending),l(n,75,0,i._13(n,76)._disabled,i._13(n,80).ngClassUntouched,i._13(n,80).ngClassTouched,i._13(n,80).ngClassPristine,i._13(n,80).ngClassDirty,i._13(n,80).ngClassValid,i._13(n,80).ngClassInvalid,i._13(n,80).ngClassPending),l(n,94,0,i._13(n,95)._disabled,i._13(n,99).ngClassUntouched,i._13(n,99).ngClassTouched,i._13(n,99).ngClassPristine,i._13(n,99).ngClassDirty,i._13(n,99).ngClassValid,i._13(n,99).ngClassInvalid,i._13(n,99).ngClassPending)})},ca)),i.Y(1,49152,null,0,S,[],null,null)],null,null)},{},{},[]),da=i.X({encapsulation:2,styles:[],data:{}}),ba=i.V(\"ng-component\",M,function(l){return i._22(0,[(l()(),i.Z(0,0,null,null,1,\"ng-component\",[],null,null,null,function(l){return i._22(0,[(l()(),i._20(-1,null,[\"\\n\"])),(l()(),i.Z(1,0,null,null,10,\"ion-header\",[],null,null,null,null,null)),i.Y(2,16384,null,0,jn.a,[Ql.a,i.j,i.z,[2,fn.a]],null,null),(l()(),i._20(-1,null,[\"\\n  \"])),(l()(),i.Z(4,0,null,null,6,\"ion-navbar\",[[\"class\",\"toolbar\"]],[[8,\"hidden\",0],[2,\"statusbar-padding\",null]],null,null,Fn.b,Fn.a)),i.Y(5,49152,null,0,Pn.a,[Yn.a,[2,fn.a],[2,Ln.a],Ql.a,i.j,i.z],null,null),(l()(),i._20(-1,3,[\"\\n    \"])),(l()(),i.Z(7,0,null,3,2,\"ion-title\",[],null,null,null,vn.b,vn.a)),i.Y(8,49152,null,0,yn.a,[Ql.a,i.j,i.z,[2,kn.a],[2,Pn.a]],null,null),(l()(),i._20(-1,0,[\"Events\"])),(l()(),i._20(-1,3,[\"\\n  \"])),(l()(),i._20(-1,null,[\"\\n\"])),(l()(),i._20(-1,null,[\"\\n\\n\"])),(l()(),i.Z(13,0,null,null,50,\"ion-content\",[],[[2,\"statusbar-padding\",null],[2,\"has-refresher\",null]],null,null,Cn.b,Cn.a)),i.Y(14,4374528,null,0,wn.a,[Ql.a,on.a,_n.a,i.j,i.z,Yn.a,Zn.a,i.u,[2,fn.a],[2,Ln.a]],null,null),(l()(),i._20(-1,1,[\"\\n\\n  \"])),(l()(),i.Z(16,0,null,1,10,\"ion-card\",[],null,[[null,\"tap\"]],function(l,n,u){var a=!0;return\"tap\"===n&&(a=!1!==l.component.tapEvent(u)&&a),a},null,null)),i.Y(17,16384,null,0,Qn.a,[Ql.a,i.j,i.z],null,null),(l()(),i._20(-1,null,[\"\\n    \"])),(l()(),i.Z(19,0,null,null,6,\"ion-item\",[[\"class\",\"item item-block\"]],null,null,null,$l.b,$l.a)),i.Y(20,1097728,null,3,Kl.a,[Jl.a,Ql.a,i.j,i.z,[2,ln.a]],null,null),i._18(335544320,1,{contentLabel:0}),i._18(603979776,2,{_buttons:1}),i._18(603979776,3,{_icons:1}),i.Y(24,16384,null,0,nn.a,[],null,null),(l()(),i._20(25,2,[\"\\n      Tapped: \",\" times\\n    \"])),(l()(),i._20(-1,null,[\"\\n  \"])),(l()(),i._20(-1,1,[\"\\n\\n  \"])),(l()(),i.Z(28,0,null,1,10,\"ion-card\",[],null,[[null,\"press\"]],function(l,n,u){var a=!0;return\"press\"===n&&(a=!1!==l.component.pressEvent(u)&&a),a},null,null)),i.Y(29,16384,null,0,Qn.a,[Ql.a,i.j,i.z],null,null),(l()(),i._20(-1,null,[\"\\n    \"])),(l()(),i.Z(31,0,null,null,6,\"ion-item\",[[\"class\",\"item item-block\"]],null,null,null,$l.b,$l.a)),i.Y(32,1097728,null,3,Kl.a,[Jl.a,Ql.a,i.j,i.z,[2,ln.a]],null,null),i._18(335544320,4,{contentLabel:0}),i._18(603979776,5,{_buttons:1}),i._18(603979776,6,{_icons:1}),i.Y(36,16384,null,0,nn.a,[],null,null),(l()(),i._20(37,2,[\"\\n      Pressed: \",\" times\\n    \"])),(l()(),i._20(-1,null,[\"\\n  \"])),(l()(),i._20(-1,1,[\"\\n\\n  \"])),(l()(),i.Z(40,0,null,1,10,\"ion-card\",[],null,[[null,\"pan\"]],function(l,n,u){var a=!0;return\"pan\"===n&&(a=!1!==l.component.panEvent(u)&&a),a},null,null)),i.Y(41,16384,null,0,Qn.a,[Ql.a,i.j,i.z],null,null),(l()(),i._20(-1,null,[\"\\n    \"])),(l()(),i.Z(43,0,null,null,6,\"ion-item\",[[\"class\",\"item item-block\"]],null,null,null,$l.b,$l.a)),i.Y(44,1097728,null,3,Kl.a,[Jl.a,Ql.a,i.j,i.z,[2,ln.a]],null,null),i._18(335544320,7,{contentLabel:0}),i._18(603979776,8,{_buttons:1}),i._18(603979776,9,{_icons:1}),i.Y(48,16384,null,0,nn.a,[],null,null),(l()(),i._20(49,2,[\"\\n      Panned: \",\" times\\n    \"])),(l()(),i._20(-1,null,[\"\\n  \"])),(l()(),i._20(-1,1,[\"\\n\\n  \"])),(l()(),i.Z(52,0,null,1,10,\"ion-card\",[],null,[[null,\"swipe\"]],function(l,n,u){var a=!0;return\"swipe\"===n&&(a=!1!==l.component.swipeEvent(u)&&a),a},null,null)),i.Y(53,16384,null,0,Qn.a,[Ql.a,i.j,i.z],null,null),(l()(),i._20(-1,null,[\"\\n    \"])),(l()(),i.Z(55,0,null,null,6,\"ion-item\",[[\"class\",\"item item-block\"]],null,null,null,$l.b,$l.a)),i.Y(56,1097728,null,3,Kl.a,[Jl.a,Ql.a,i.j,i.z,[2,ln.a]],null,null),i._18(335544320,10,{contentLabel:0}),i._18(603979776,11,{_buttons:1}),i._18(603979776,12,{_icons:1}),i.Y(60,16384,null,0,nn.a,[],null,null),(l()(),i._20(61,2,[\"\\n      Swiped: \",\" times\\n    \"])),(l()(),i._20(-1,null,[\"\\n  \"])),(l()(),i._20(-1,1,[\"\\n\\n\"])),(l()(),i._20(-1,null,[\"\\n\"]))],null,function(l,n){var u=n.component;l(n,4,0,i._13(n,5)._hidden,i._13(n,5)._sbPadding),l(n,13,0,i._13(n,14).statusbarPadding,i._13(n,14)._hasRefresher),l(n,25,0,u.tap),l(n,37,0,u.press),l(n,49,0,u.pan),l(n,61,0,u.swipe)})},da)),i.Y(1,49152,null,0,M,[],null,null)],null,null)},{},{},[]),ma=u(131),ga=i.X({encapsulation:2,styles:[],data:{}}),ha=i.V(\"ng-component\",B,function(l){return i._22(0,[(l()(),i.Z(0,0,null,null,1,\"ng-component\",[],null,null,null,function(l){return i._22(0,[(l()(),i._20(-1,null,[\"\\n\"])),(l()(),i.Z(1,0,null,null,10,\"ion-header\",[],null,null,null,null,null)),i.Y(2,16384,null,0,jn.a,[Ql.a,i.j,i.z,[2,fn.a]],null,null),(l()(),i._20(-1,null,[\"\\n  \"])),(l()(),i.Z(4,0,null,null,6,\"ion-navbar\",[[\"class\",\"toolbar\"]],[[8,\"hidden\",0],[2,\"statusbar-padding\",null]],null,null,Fn.b,Fn.a)),i.Y(5,49152,null,0,Pn.a,[Yn.a,[2,fn.a],[2,Ln.a],Ql.a,i.j,i.z],null,null),(l()(),i._20(-1,3,[\"\\n    \"])),(l()(),i.Z(7,0,null,3,2,\"ion-title\",[],null,null,null,vn.b,vn.a)),i.Y(8,49152,null,0,yn.a,[Ql.a,i.j,i.z,[2,kn.a],[2,Pn.a]],null,null),(l()(),i._20(-1,0,[\"Grid\"])),(l()(),i._20(-1,3,[\"\\n  \"])),(l()(),i._20(-1,null,[\"\\n\"])),(l()(),i._20(-1,null,[\"\\n\\n\"])),(l()(),i.Z(13,0,null,null,605,\"ion-content\",[[\"class\",\"grid-basic-page\"]],[[2,\"statusbar-padding\",null],[2,\"has-refresher\",null]],null,null,Cn.b,Cn.a)),i.Y(14,4374528,null,0,wn.a,[Ql.a,on.a,_n.a,i.j,i.z,Yn.a,Zn.a,i.u,[2,fn.a],[2,Ln.a]],null,null),(l()(),i._20(-1,1,[\"\\n\\n\\n  \"])),(l()(),i.Z(16,0,null,1,1,\"p\",[[\"padding\",\"\"]],null,null,null,null,null)),(l()(),i._20(-1,null,[\"\\n    Equal-width columns\\n  \"])),(l()(),i._20(-1,1,[\"\\n  \"])),(l()(),i.Z(19,0,null,1,45,\"ion-grid\",[[\"class\",\"grid\"]],null,null,null,null,null)),i.Y(20,16384,null,0,ma.a,[],null,null),(l()(),i._20(-1,null,[\"\\n    \"])),(l()(),i.Z(22,0,null,null,16,\"ion-row\",[[\"class\",\"row\"]],null,null,null,null,null)),i.Y(23,16384,null,0,xu.a,[],null,null),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i.Z(25,0,null,null,5,\"ion-col\",[[\"class\",\"col\"]],null,null,null,null,null)),i.Y(26,16384,null,0,Tu.a,[],null,null),(l()(),i._20(-1,null,[\"\\n        \"])),(l()(),i.Z(28,0,null,null,1,\"div\",[],null,null,null,null,null)),(l()(),i._20(-1,null,[\"1 of 2\"])),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i.Z(32,0,null,null,5,\"ion-col\",[[\"class\",\"col\"]],null,null,null,null,null)),i.Y(33,16384,null,0,Tu.a,[],null,null),(l()(),i._20(-1,null,[\"\\n        \"])),(l()(),i.Z(35,0,null,null,1,\"div\",[],null,null,null,null,null)),(l()(),i._20(-1,null,[\"2 of 2\"])),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i._20(-1,null,[\"\\n    \"])),(l()(),i._20(-1,null,[\"\\n    \"])),(l()(),i.Z(40,0,null,null,23,\"ion-row\",[[\"class\",\"row\"]],null,null,null,null,null)),i.Y(41,16384,null,0,xu.a,[],null,null),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i.Z(43,0,null,null,5,\"ion-col\",[[\"class\",\"col\"]],null,null,null,null,null)),i.Y(44,16384,null,0,Tu.a,[],null,null),(l()(),i._20(-1,null,[\"\\n        \"])),(l()(),i.Z(46,0,null,null,1,\"div\",[],null,null,null,null,null)),(l()(),i._20(-1,null,[\"1 of 3\"])),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i.Z(50,0,null,null,5,\"ion-col\",[[\"class\",\"col\"]],null,null,null,null,null)),i.Y(51,16384,null,0,Tu.a,[],null,null),(l()(),i._20(-1,null,[\"\\n        \"])),(l()(),i.Z(53,0,null,null,1,\"div\",[],null,null,null,null,null)),(l()(),i._20(-1,null,[\"2 of 3\"])),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i.Z(57,0,null,null,5,\"ion-col\",[[\"class\",\"col\"]],null,null,null,null,null)),i.Y(58,16384,null,0,Tu.a,[],null,null),(l()(),i._20(-1,null,[\"\\n        \"])),(l()(),i.Z(60,0,null,null,1,\"div\",[],null,null,null,null,null)),(l()(),i._20(-1,null,[\"3 of 3\"])),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i._20(-1,null,[\"\\n    \"])),(l()(),i._20(-1,null,[\"\\n  \"])),(l()(),i._20(-1,1,[\"\\n\\n  \"])),(l()(),i.Z(66,0,null,1,1,\"p\",[[\"padding\",\"\"]],null,null,null,null,null)),(l()(),i._20(-1,null,[\"\\n    Setting one column width\\n  \"])),(l()(),i._20(-1,1,[\"\\n  \"])),(l()(),i.Z(69,0,null,1,52,\"ion-grid\",[[\"class\",\"grid\"]],null,null,null,null,null)),i.Y(70,16384,null,0,ma.a,[],null,null),(l()(),i._20(-1,null,[\"\\n    \"])),(l()(),i.Z(72,0,null,null,23,\"ion-row\",[[\"class\",\"row\"]],null,null,null,null,null)),i.Y(73,16384,null,0,xu.a,[],null,null),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i.Z(75,0,null,null,5,\"ion-col\",[[\"class\",\"col\"]],null,null,null,null,null)),i.Y(76,16384,null,0,Tu.a,[],null,null),(l()(),i._20(-1,null,[\"\\n        \"])),(l()(),i.Z(78,0,null,null,1,\"div\",[],null,null,null,null,null)),(l()(),i._20(-1,null,[\"1 of 3\"])),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i.Z(82,0,null,null,5,\"ion-col\",[[\"class\",\"col\"],[\"col-6\",\"\"]],null,null,null,null,null)),i.Y(83,16384,null,0,Tu.a,[],null,null),(l()(),i._20(-1,null,[\"\\n        \"])),(l()(),i.Z(85,0,null,null,1,\"div\",[],null,null,null,null,null)),(l()(),i._20(-1,null,[\"2 of 3 (wider)\"])),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i.Z(89,0,null,null,5,\"ion-col\",[[\"class\",\"col\"]],null,null,null,null,null)),i.Y(90,16384,null,0,Tu.a,[],null,null),(l()(),i._20(-1,null,[\"\\n        \"])),(l()(),i.Z(92,0,null,null,1,\"div\",[],null,null,null,null,null)),(l()(),i._20(-1,null,[\"3 of 3\"])),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i._20(-1,null,[\"\\n    \"])),(l()(),i._20(-1,null,[\"\\n    \"])),(l()(),i.Z(97,0,null,null,23,\"ion-row\",[[\"class\",\"row\"]],null,null,null,null,null)),i.Y(98,16384,null,0,xu.a,[],null,null),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i.Z(100,0,null,null,5,\"ion-col\",[[\"class\",\"col\"],[\"col-6\",\"\"]],null,null,null,null,null)),i.Y(101,16384,null,0,Tu.a,[],null,null),(l()(),i._20(-1,null,[\"\\n        \"])),(l()(),i.Z(103,0,null,null,1,\"div\",[],null,null,null,null,null)),(l()(),i._20(-1,null,[\"1 of 3 (wider)\"])),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i.Z(107,0,null,null,5,\"ion-col\",[[\"class\",\"col\"]],null,null,null,null,null)),i.Y(108,16384,null,0,Tu.a,[],null,null),(l()(),i._20(-1,null,[\"\\n        \"])),(l()(),i.Z(110,0,null,null,1,\"div\",[],null,null,null,null,null)),(l()(),i._20(-1,null,[\"2 of 3\"])),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i.Z(114,0,null,null,5,\"ion-col\",[[\"class\",\"col\"]],null,null,null,null,null)),i.Y(115,16384,null,0,Tu.a,[],null,null),(l()(),i._20(-1,null,[\"\\n        \"])),(l()(),i.Z(117,0,null,null,1,\"div\",[],null,null,null,null,null)),(l()(),i._20(-1,null,[\"3 of 3\"])),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i._20(-1,null,[\"\\n    \"])),(l()(),i._20(-1,null,[\"\\n  \"])),(l()(),i._20(-1,1,[\"\\n\\n  \"])),(l()(),i.Z(123,0,null,1,1,\"p\",[[\"padding\",\"\"]],null,null,null,null,null)),(l()(),i._20(-1,null,[\"\\n    Variable-width columns\\n  \"])),(l()(),i._20(-1,1,[\"\\n  \"])),(l()(),i.Z(126,0,null,1,60,\"ion-grid\",[[\"class\",\"grid\"]],null,null,null,null,null)),i.Y(127,16384,null,0,ma.a,[],null,null),(l()(),i._20(-1,null,[\"\\n    \"])),(l()(),i.Z(129,0,null,null,23,\"ion-row\",[[\"class\",\"row\"]],null,null,null,null,null)),i.Y(130,16384,null,0,xu.a,[],null,null),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i.Z(132,0,null,null,5,\"ion-col\",[[\"class\",\"col\"]],null,null,null,null,null)),i.Y(133,16384,null,0,Tu.a,[],null,null),(l()(),i._20(-1,null,[\"\\n        \"])),(l()(),i.Z(135,0,null,null,1,\"div\",[],null,null,null,null,null)),(l()(),i._20(-1,null,[\"1 of 3\"])),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i.Z(139,0,null,null,5,\"ion-col\",[[\"class\",\"col\"],[\"col-auto\",\"\"]],null,null,null,null,null)),i.Y(140,16384,null,0,Tu.a,[],null,null),(l()(),i._20(-1,null,[\"\\n        \"])),(l()(),i.Z(142,0,null,null,1,\"div\",[],null,null,null,null,null)),(l()(),i._20(-1,null,[\"Variable width content\"])),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i.Z(146,0,null,null,5,\"ion-col\",[[\"class\",\"col\"]],null,null,null,null,null)),i.Y(147,16384,null,0,Tu.a,[],null,null),(l()(),i._20(-1,null,[\"\\n        \"])),(l()(),i.Z(149,0,null,null,1,\"div\",[],null,null,null,null,null)),(l()(),i._20(-1,null,[\"3 of 3\"])),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i._20(-1,null,[\"\\n    \"])),(l()(),i._20(-1,null,[\"\\n    \"])),(l()(),i.Z(154,0,null,null,31,\"ion-row\",[[\"class\",\"row\"]],null,null,null,null,null)),i.Y(155,16384,null,0,xu.a,[],null,null),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i.Z(157,0,null,null,5,\"ion-col\",[[\"class\",\"col\"]],null,null,null,null,null)),i.Y(158,16384,null,0,Tu.a,[],null,null),(l()(),i._20(-1,null,[\"\\n        \"])),(l()(),i.Z(160,0,null,null,1,\"div\",[],null,null,null,null,null)),(l()(),i._20(-1,null,[\"1 of 4\"])),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i.Z(164,0,null,null,5,\"ion-col\",[[\"class\",\"col\"]],null,null,null,null,null)),i.Y(165,16384,null,0,Tu.a,[],null,null),(l()(),i._20(-1,null,[\"\\n        \"])),(l()(),i.Z(167,0,null,null,1,\"div\",[],null,null,null,null,null)),(l()(),i._20(-1,null,[\"2 of 4\"])),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i.Z(171,0,null,null,6,\"ion-col\",[[\"class\",\"col\"],[\"col-auto\",\"\"]],null,null,null,null,null)),i.Y(172,16384,null,0,Tu.a,[],null,null),(l()(),i._20(-1,null,[\"\\n        \"])),(l()(),i.Z(174,0,null,null,2,\"div\",[],null,null,null,null,null)),(l()(),i.Z(175,0,null,null,1,\"ion-icon\",[[\"name\",\"globe\"],[\"role\",\"img\"]],[[2,\"hide\",null]],null,null,null,null)),i.Y(176,147456,null,0,mn.a,[Ql.a,i.j,i.z],{name:[0,\"name\"]},null),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i.Z(179,0,null,null,5,\"ion-col\",[[\"class\",\"col\"]],null,null,null,null,null)),i.Y(180,16384,null,0,Tu.a,[],null,null),(l()(),i._20(-1,null,[\"\\n        \"])),(l()(),i.Z(182,0,null,null,1,\"div\",[],null,null,null,null,null)),(l()(),i._20(-1,null,[\"4 of 4\"])),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i._20(-1,null,[\"\\n    \"])),(l()(),i._20(-1,null,[\"\\n  \"])),(l()(),i._20(-1,1,[\"\\n\\n  \"])),(l()(),i.Z(188,0,null,1,1,\"p\",[[\"padding\",\"\"]],null,null,null,null,null)),(l()(),i._20(-1,null,[\"\\n    Offsetting columns\\n  \"])),(l()(),i._20(-1,1,[\"\\n  \"])),(l()(),i.Z(191,0,null,1,38,\"ion-grid\",[[\"class\",\"grid\"]],null,null,null,null,null)),i.Y(192,16384,null,0,ma.a,[],null,null),(l()(),i._20(-1,null,[\"\\n    \"])),(l()(),i.Z(194,0,null,null,16,\"ion-row\",[[\"class\",\"row\"]],null,null,null,null,null)),i.Y(195,16384,null,0,xu.a,[],null,null),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i.Z(197,0,null,null,5,\"ion-col\",[[\"class\",\"col\"]],null,null,null,null,null)),i.Y(198,16384,null,0,Tu.a,[],null,null),(l()(),i._20(-1,null,[\"\\n        \"])),(l()(),i.Z(200,0,null,null,1,\"div\",[],null,null,null,null,null)),(l()(),i._20(-1,null,[\"1 of 2\"])),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i.Z(204,0,null,null,5,\"ion-col\",[[\"class\",\"col\"],[\"offset-4\",\"\"]],null,null,null,null,null)),i.Y(205,16384,null,0,Tu.a,[],null,null),(l()(),i._20(-1,null,[\"\\n        \"])),(l()(),i.Z(207,0,null,null,1,\"div\",[],null,null,null,null,null)),(l()(),i._20(-1,null,[\"2 of 2\"])),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i._20(-1,null,[\"\\n    \"])),(l()(),i._20(-1,null,[\"\\n\\n    \"])),(l()(),i.Z(212,0,null,null,16,\"ion-row\",[[\"class\",\"row\"]],null,null,null,null,null)),i.Y(213,16384,null,0,xu.a,[],null,null),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i.Z(215,0,null,null,5,\"ion-col\",[[\"class\",\"col\"],[\"offset-4\",\"\"]],null,null,null,null,null)),i.Y(216,16384,null,0,Tu.a,[],null,null),(l()(),i._20(-1,null,[\"\\n        \"])),(l()(),i.Z(218,0,null,null,1,\"div\",[],null,null,null,null,null)),(l()(),i._20(-1,null,[\"1 of 2\"])),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i.Z(222,0,null,null,5,\"ion-col\",[[\"class\",\"col\"]],null,null,null,null,null)),i.Y(223,16384,null,0,Tu.a,[],null,null),(l()(),i._20(-1,null,[\"\\n        \"])),(l()(),i.Z(225,0,null,null,1,\"div\",[],null,null,null,null,null)),(l()(),i._20(-1,null,[\"2 of 2\"])),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i._20(-1,null,[\"\\n    \"])),(l()(),i._20(-1,null,[\"\\n  \"])),(l()(),i._20(-1,1,[\"\\n\\n  \"])),(l()(),i.Z(231,0,null,1,1,\"p\",[[\"padding\",\"\"]],null,null,null,null,null)),(l()(),i._20(-1,null,[\"\\n    Push and pull\\n  \"])),(l()(),i._20(-1,1,[\"\\n  \"])),(l()(),i.Z(234,0,null,1,45,\"ion-grid\",[[\"class\",\"grid\"]],null,null,null,null,null)),i.Y(235,16384,null,0,ma.a,[],null,null),(l()(),i._20(-1,null,[\"\\n    \"])),(l()(),i.Z(237,0,null,null,16,\"ion-row\",[[\"class\",\"row\"]],null,null,null,null,null)),i.Y(238,16384,null,0,xu.a,[],null,null),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i.Z(240,0,null,null,5,\"ion-col\",[[\"class\",\"col\"],[\"col-9\",\"\"],[\"push-3\",\"\"]],null,null,null,null,null)),i.Y(241,16384,null,0,Tu.a,[],null,null),(l()(),i._20(-1,null,[\"\\n        \"])),(l()(),i.Z(243,0,null,null,1,\"div\",[],null,null,null,null,null)),(l()(),i._20(-1,null,[\"1 of 2\"])),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i.Z(247,0,null,null,5,\"ion-col\",[[\"class\",\"col\"],[\"col-3\",\"\"],[\"pull-9\",\"\"]],null,null,null,null,null)),i.Y(248,16384,null,0,Tu.a,[],null,null),(l()(),i._20(-1,null,[\"\\n        \"])),(l()(),i.Z(250,0,null,null,1,\"div\",[],null,null,null,null,null)),(l()(),i._20(-1,null,[\"2 of 2\"])),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i._20(-1,null,[\"\\n    \"])),(l()(),i._20(-1,null,[\"\\n\\n    \"])),(l()(),i.Z(255,0,null,null,23,\"ion-row\",[[\"class\",\"row\"]],null,null,null,null,null)),i.Y(256,16384,null,0,xu.a,[],null,null),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i.Z(258,0,null,null,5,\"ion-col\",[[\"class\",\"col\"],[\"col-6\",\"\"],[\"push-3\",\"\"]],null,null,null,null,null)),i.Y(259,16384,null,0,Tu.a,[],null,null),(l()(),i._20(-1,null,[\"\\n        \"])),(l()(),i.Z(261,0,null,null,1,\"div\",[],null,null,null,null,null)),(l()(),i._20(-1,null,[\"1 of 3\"])),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i.Z(265,0,null,null,5,\"ion-col\",[[\"class\",\"col\"],[\"col-3\",\"\"],[\"push-3\",\"\"]],null,null,null,null,null)),i.Y(266,16384,null,0,Tu.a,[],null,null),(l()(),i._20(-1,null,[\"\\n        \"])),(l()(),i.Z(268,0,null,null,1,\"div\",[],null,null,null,null,null)),(l()(),i._20(-1,null,[\"2 of 3\"])),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i.Z(272,0,null,null,5,\"ion-col\",[[\"class\",\"col\"],[\"col-3\",\"\"],[\"pull-9\",\"\"]],null,null,null,null,null)),i.Y(273,16384,null,0,Tu.a,[],null,null),(l()(),i._20(-1,null,[\"\\n        \"])),(l()(),i.Z(275,0,null,null,1,\"div\",[],null,null,null,null,null)),(l()(),i._20(-1,null,[\"3 of 3\"])),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i._20(-1,null,[\"\\n    \"])),(l()(),i._20(-1,null,[\"\\n  \"])),(l()(),i._20(-1,1,[\"\\n\\n  \"])),(l()(),i.Z(281,0,null,1,3,\"p\",[[\"padding\",\"\"]],null,null,null,null,null)),(l()(),i._20(-1,null,[\"\\n    Setting all column widths\"])),(l()(),i.Z(283,0,null,null,0,\"br\",[],null,null,null,null,null)),(l()(),i._20(-1,null,[\"\\n  \"])),(l()(),i._20(-1,1,[\"\\n  \"])),(l()(),i.Z(286,0,null,1,27,\"ion-grid\",[[\"class\",\"grid\"]],null,null,null,null,null)),i.Y(287,16384,null,0,ma.a,[],null,null),(l()(),i._20(-1,null,[\"\\n    \"])),(l()(),i.Z(289,0,null,null,23,\"ion-row\",[[\"class\",\"row\"]],null,null,null,null,null)),i.Y(290,16384,null,0,xu.a,[],null,null),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i.Z(292,0,null,null,5,\"ion-col\",[[\"class\",\"col\"],[\"col-4\",\"\"]],null,null,null,null,null)),i.Y(293,16384,null,0,Tu.a,[],null,null),(l()(),i._20(-1,null,[\"\\n        \"])),(l()(),i.Z(295,0,null,null,1,\"div\",[],null,null,null,null,null)),(l()(),i._20(-1,null,[\"1 of 3\"])),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i.Z(299,0,null,null,5,\"ion-col\",[[\"class\",\"col\"],[\"col-3\",\"\"]],null,null,null,null,null)),i.Y(300,16384,null,0,Tu.a,[],null,null),(l()(),i._20(-1,null,[\"\\n        \"])),(l()(),i.Z(302,0,null,null,1,\"div\",[],null,null,null,null,null)),(l()(),i._20(-1,null,[\"2 of 3\"])),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i.Z(306,0,null,null,5,\"ion-col\",[[\"class\",\"col\"],[\"col-5\",\"\"]],null,null,null,null,null)),i.Y(307,16384,null,0,Tu.a,[],null,null),(l()(),i._20(-1,null,[\"\\n        \"])),(l()(),i.Z(309,0,null,null,1,\"div\",[],null,null,null,null,null)),(l()(),i._20(-1,null,[\"3 of 3\"])),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i._20(-1,null,[\"\\n    \"])),(l()(),i._20(-1,null,[\"\\n  \"])),(l()(),i._20(-1,1,[\"\\n\\n  \"])),(l()(),i.Z(315,0,null,1,1,\"p\",[[\"padding\",\"\"]],null,null,null,null,null)),(l()(),i._20(-1,null,[\"\\n    Vertical alignment\\n  \"])),(l()(),i._20(-1,1,[\"\\n  \"])),(l()(),i.Z(318,0,null,1,160,\"ion-grid\",[[\"class\",\"grid\"]],null,null,null,null,null)),i.Y(319,16384,null,0,ma.a,[],null,null),(l()(),i._20(-1,null,[\"\\n    \"])),(l()(),i.Z(321,0,null,null,42,\"ion-row\",[[\"class\",\"row\"]],null,null,null,null,null)),i.Y(322,16384,null,0,xu.a,[],null,null),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i.Z(324,0,null,null,5,\"ion-col\",[[\"class\",\"col\"]],null,null,null,null,null)),i.Y(325,16384,null,0,Tu.a,[],null,null),(l()(),i._20(-1,null,[\"\\n        \"])),(l()(),i.Z(327,0,null,null,1,\"div\",[],null,null,null,null,null)),(l()(),i._20(-1,null,[\"1 of 4\"])),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i.Z(331,0,null,null,7,\"ion-col\",[[\"class\",\"col\"]],null,null,null,null,null)),i.Y(332,16384,null,0,Tu.a,[],null,null),(l()(),i._20(-1,null,[\"\\n        \"])),(l()(),i.Z(334,0,null,null,3,\"div\",[],null,null,null,null,null)),(l()(),i._20(-1,null,[\"2 of 4 \"])),(l()(),i.Z(336,0,null,null,0,\"br\",[],null,null,null,null,null)),(l()(),i._20(-1,null,[\"#\"])),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i.Z(340,0,null,null,9,\"ion-col\",[[\"class\",\"col\"]],null,null,null,null,null)),i.Y(341,16384,null,0,Tu.a,[],null,null),(l()(),i._20(-1,null,[\"\\n        \"])),(l()(),i.Z(343,0,null,null,5,\"div\",[],null,null,null,null,null)),(l()(),i._20(-1,null,[\"3 of 4 \"])),(l()(),i.Z(345,0,null,null,0,\"br\",[],null,null,null,null,null)),(l()(),i._20(-1,null,[\"#\"])),(l()(),i.Z(347,0,null,null,0,\"br\",[],null,null,null,null,null)),(l()(),i._20(-1,null,[\"#\"])),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i.Z(351,0,null,null,11,\"ion-col\",[[\"class\",\"col\"]],null,null,null,null,null)),i.Y(352,16384,null,0,Tu.a,[],null,null),(l()(),i._20(-1,null,[\"\\n        \"])),(l()(),i.Z(354,0,null,null,7,\"div\",[],null,null,null,null,null)),(l()(),i._20(-1,null,[\"4 of 4 \"])),(l()(),i.Z(356,0,null,null,0,\"br\",[],null,null,null,null,null)),(l()(),i._20(-1,null,[\"#\"])),(l()(),i.Z(358,0,null,null,0,\"br\",[],null,null,null,null,null)),(l()(),i._20(-1,null,[\"#\"])),(l()(),i.Z(360,0,null,null,0,\"br\",[],null,null,null,null,null)),(l()(),i._20(-1,null,[\"#\"])),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i._20(-1,null,[\"\\n    \"])),(l()(),i._20(-1,null,[\"\\n\\n    \"])),(l()(),i.Z(365,0,null,null,36,\"ion-row\",[[\"align-items-start\",\"\"],[\"class\",\"row\"]],null,null,null,null,null)),i.Y(366,16384,null,0,xu.a,[],null,null),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i.Z(368,0,null,null,5,\"ion-col\",[[\"class\",\"col\"]],null,null,null,null,null)),i.Y(369,16384,null,0,Tu.a,[],null,null),(l()(),i._20(-1,null,[\"\\n        \"])),(l()(),i.Z(371,0,null,null,1,\"div\",[],null,null,null,null,null)),(l()(),i._20(-1,null,[\"1 of 4\"])),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i.Z(375,0,null,null,5,\"ion-col\",[[\"class\",\"col\"]],null,null,null,null,null)),i.Y(376,16384,null,0,Tu.a,[],null,null),(l()(),i._20(-1,null,[\"\\n        \"])),(l()(),i.Z(378,0,null,null,1,\"div\",[],null,null,null,null,null)),(l()(),i._20(-1,null,[\"2 of 4\"])),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i.Z(382,0,null,null,5,\"ion-col\",[[\"class\",\"col\"]],null,null,null,null,null)),i.Y(383,16384,null,0,Tu.a,[],null,null),(l()(),i._20(-1,null,[\"\\n        \"])),(l()(),i.Z(385,0,null,null,1,\"div\",[],null,null,null,null,null)),(l()(),i._20(-1,null,[\"3 of 4\"])),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i.Z(389,0,null,null,11,\"ion-col\",[[\"class\",\"col\"]],null,null,null,null,null)),i.Y(390,16384,null,0,Tu.a,[],null,null),(l()(),i._20(-1,null,[\"\\n        \"])),(l()(),i.Z(392,0,null,null,7,\"div\",[],null,null,null,null,null)),(l()(),i._20(-1,null,[\"4 of 4 \"])),(l()(),i.Z(394,0,null,null,0,\"br\",[],null,null,null,null,null)),(l()(),i._20(-1,null,[\"#\"])),(l()(),i.Z(396,0,null,null,0,\"br\",[],null,null,null,null,null)),(l()(),i._20(-1,null,[\"#\"])),(l()(),i.Z(398,0,null,null,0,\"br\",[],null,null,null,null,null)),(l()(),i._20(-1,null,[\"#\"])),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i._20(-1,null,[\"\\n    \"])),(l()(),i._20(-1,null,[\"\\n\\n    \"])),(l()(),i.Z(403,0,null,null,36,\"ion-row\",[[\"align-items-center\",\"\"],[\"class\",\"row\"]],null,null,null,null,null)),i.Y(404,16384,null,0,xu.a,[],null,null),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i.Z(406,0,null,null,5,\"ion-col\",[[\"class\",\"col\"]],null,null,null,null,null)),i.Y(407,16384,null,0,Tu.a,[],null,null),(l()(),i._20(-1,null,[\"\\n        \"])),(l()(),i.Z(409,0,null,null,1,\"div\",[],null,null,null,null,null)),(l()(),i._20(-1,null,[\"1 of 4\"])),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i.Z(413,0,null,null,5,\"ion-col\",[[\"class\",\"col\"]],null,null,null,null,null)),i.Y(414,16384,null,0,Tu.a,[],null,null),(l()(),i._20(-1,null,[\"\\n        \"])),(l()(),i.Z(416,0,null,null,1,\"div\",[],null,null,null,null,null)),(l()(),i._20(-1,null,[\"2 of 4\"])),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i.Z(420,0,null,null,5,\"ion-col\",[[\"class\",\"col\"]],null,null,null,null,null)),i.Y(421,16384,null,0,Tu.a,[],null,null),(l()(),i._20(-1,null,[\"\\n        \"])),(l()(),i.Z(423,0,null,null,1,\"div\",[],null,null,null,null,null)),(l()(),i._20(-1,null,[\"3 of 4\"])),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i.Z(427,0,null,null,11,\"ion-col\",[[\"class\",\"col\"]],null,null,null,null,null)),i.Y(428,16384,null,0,Tu.a,[],null,null),(l()(),i._20(-1,null,[\"\\n        \"])),(l()(),i.Z(430,0,null,null,7,\"div\",[],null,null,null,null,null)),(l()(),i._20(-1,null,[\"4 of 4 \"])),(l()(),i.Z(432,0,null,null,0,\"br\",[],null,null,null,null,null)),(l()(),i._20(-1,null,[\"#\"])),(l()(),i.Z(434,0,null,null,0,\"br\",[],null,null,null,null,null)),(l()(),i._20(-1,null,[\"#\"])),(l()(),i.Z(436,0,null,null,0,\"br\",[],null,null,null,null,null)),(l()(),i._20(-1,null,[\"#\"])),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i._20(-1,null,[\"\\n    \"])),(l()(),i._20(-1,null,[\"\\n\\n    \"])),(l()(),i.Z(441,0,null,null,36,\"ion-row\",[[\"align-items-end\",\"\"],[\"class\",\"row\"]],null,null,null,null,null)),i.Y(442,16384,null,0,xu.a,[],null,null),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i.Z(444,0,null,null,5,\"ion-col\",[[\"class\",\"col\"]],null,null,null,null,null)),i.Y(445,16384,null,0,Tu.a,[],null,null),(l()(),i._20(-1,null,[\"\\n        \"])),(l()(),i.Z(447,0,null,null,1,\"div\",[],null,null,null,null,null)),(l()(),i._20(-1,null,[\"1 of 4\"])),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i.Z(451,0,null,null,5,\"ion-col\",[[\"class\",\"col\"]],null,null,null,null,null)),i.Y(452,16384,null,0,Tu.a,[],null,null),(l()(),i._20(-1,null,[\"\\n        \"])),(l()(),i.Z(454,0,null,null,1,\"div\",[],null,null,null,null,null)),(l()(),i._20(-1,null,[\"2 of 4\"])),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i.Z(458,0,null,null,5,\"ion-col\",[[\"class\",\"col\"]],null,null,null,null,null)),i.Y(459,16384,null,0,Tu.a,[],null,null),(l()(),i._20(-1,null,[\"\\n        \"])),(l()(),i.Z(461,0,null,null,1,\"div\",[],null,null,null,null,null)),(l()(),i._20(-1,null,[\"3 of 4\"])),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i.Z(465,0,null,null,11,\"ion-col\",[[\"class\",\"col\"]],null,null,null,null,null)),i.Y(466,16384,null,0,Tu.a,[],null,null),(l()(),i._20(-1,null,[\"\\n        \"])),(l()(),i.Z(468,0,null,null,7,\"div\",[],null,null,null,null,null)),(l()(),i._20(-1,null,[\"4 of 4 \"])),(l()(),i.Z(470,0,null,null,0,\"br\",[],null,null,null,null,null)),(l()(),i._20(-1,null,[\"#\"])),(l()(),i.Z(472,0,null,null,0,\"br\",[],null,null,null,null,null)),(l()(),i._20(-1,null,[\"#\"])),(l()(),i.Z(474,0,null,null,0,\"br\",[],null,null,null,null,null)),(l()(),i._20(-1,null,[\"#\"])),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i._20(-1,null,[\"\\n    \"])),(l()(),i._20(-1,null,[\"\\n  \"])),(l()(),i._20(-1,1,[\"\\n\\n  \"])),(l()(),i.Z(480,0,null,1,40,\"ion-grid\",[[\"class\",\"grid\"]],null,null,null,null,null)),i.Y(481,16384,null,0,ma.a,[],null,null),(l()(),i._20(-1,null,[\"\\n    \"])),(l()(),i.Z(483,0,null,null,36,\"ion-row\",[[\"class\",\"row\"]],null,null,null,null,null)),i.Y(484,16384,null,0,xu.a,[],null,null),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i.Z(486,0,null,null,5,\"ion-col\",[[\"align-self-start\",\"\"],[\"class\",\"col\"]],null,null,null,null,null)),i.Y(487,16384,null,0,Tu.a,[],null,null),(l()(),i._20(-1,null,[\"\\n        \"])),(l()(),i.Z(489,0,null,null,1,\"div\",[],null,null,null,null,null)),(l()(),i._20(-1,null,[\"1 of 4\"])),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i.Z(493,0,null,null,5,\"ion-col\",[[\"align-self-center\",\"\"],[\"class\",\"col\"]],null,null,null,null,null)),i.Y(494,16384,null,0,Tu.a,[],null,null),(l()(),i._20(-1,null,[\"\\n        \"])),(l()(),i.Z(496,0,null,null,1,\"div\",[],null,null,null,null,null)),(l()(),i._20(-1,null,[\"2 of 4\"])),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i.Z(500,0,null,null,5,\"ion-col\",[[\"align-self-end\",\"\"],[\"class\",\"col\"]],null,null,null,null,null)),i.Y(501,16384,null,0,Tu.a,[],null,null),(l()(),i._20(-1,null,[\"\\n        \"])),(l()(),i.Z(503,0,null,null,1,\"div\",[],null,null,null,null,null)),(l()(),i._20(-1,null,[\"3 of 4\"])),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i.Z(507,0,null,null,11,\"ion-col\",[[\"class\",\"col\"]],null,null,null,null,null)),i.Y(508,16384,null,0,Tu.a,[],null,null),(l()(),i._20(-1,null,[\"\\n        \"])),(l()(),i.Z(510,0,null,null,7,\"div\",[],null,null,null,null,null)),(l()(),i._20(-1,null,[\"4 of 4 \"])),(l()(),i.Z(512,0,null,null,0,\"br\",[],null,null,null,null,null)),(l()(),i._20(-1,null,[\"#\"])),(l()(),i.Z(514,0,null,null,0,\"br\",[],null,null,null,null,null)),(l()(),i._20(-1,null,[\"#\"])),(l()(),i.Z(516,0,null,null,0,\"br\",[],null,null,null,null,null)),(l()(),i._20(-1,null,[\"#\"])),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i._20(-1,null,[\"\\n    \"])),(l()(),i._20(-1,null,[\"\\n  \"])),(l()(),i._20(-1,1,[\"\\n\\n  \"])),(l()(),i.Z(522,0,null,1,1,\"p\",[[\"padding\",\"\"]],null,null,null,null,null)),(l()(),i._20(-1,null,[\"\\n    Horizontal Alignment\\n  \"])),(l()(),i._20(-1,1,[\"\\n  \"])),(l()(),i.Z(525,0,null,1,92,\"ion-grid\",[[\"class\",\"grid\"]],null,null,null,null,null)),i.Y(526,16384,null,0,ma.a,[],null,null),(l()(),i._20(-1,null,[\"\\n    \"])),(l()(),i.Z(528,0,null,null,16,\"ion-row\",[[\"class\",\"row\"],[\"justify-content-start\",\"\"]],null,null,null,null,null)),i.Y(529,16384,null,0,xu.a,[],null,null),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i.Z(531,0,null,null,5,\"ion-col\",[[\"class\",\"col\"],[\"col-3\",\"\"]],null,null,null,null,null)),i.Y(532,16384,null,0,Tu.a,[],null,null),(l()(),i._20(-1,null,[\"\\n        \"])),(l()(),i.Z(534,0,null,null,1,\"div\",[],null,null,null,null,null)),(l()(),i._20(-1,null,[\"1 of 2\"])),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i.Z(538,0,null,null,5,\"ion-col\",[[\"class\",\"col\"],[\"col-3\",\"\"]],null,null,null,null,null)),i.Y(539,16384,null,0,Tu.a,[],null,null),(l()(),i._20(-1,null,[\"\\n        \"])),(l()(),i.Z(541,0,null,null,1,\"div\",[],null,null,null,null,null)),(l()(),i._20(-1,null,[\"2 of 2\"])),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i._20(-1,null,[\"\\n    \"])),(l()(),i._20(-1,null,[\"\\n\\n    \"])),(l()(),i.Z(546,0,null,null,16,\"ion-row\",[[\"class\",\"row\"],[\"justify-content-center\",\"\"]],null,null,null,null,null)),i.Y(547,16384,null,0,xu.a,[],null,null),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i.Z(549,0,null,null,5,\"ion-col\",[[\"class\",\"col\"],[\"col-3\",\"\"]],null,null,null,null,null)),i.Y(550,16384,null,0,Tu.a,[],null,null),(l()(),i._20(-1,null,[\"\\n        \"])),(l()(),i.Z(552,0,null,null,1,\"div\",[],null,null,null,null,null)),(l()(),i._20(-1,null,[\"1 of 2\"])),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i.Z(556,0,null,null,5,\"ion-col\",[[\"class\",\"col\"],[\"col-3\",\"\"]],null,null,null,null,null)),i.Y(557,16384,null,0,Tu.a,[],null,null),(l()(),i._20(-1,null,[\"\\n        \"])),(l()(),i.Z(559,0,null,null,1,\"div\",[],null,null,null,null,null)),(l()(),i._20(-1,null,[\"2 of 2\"])),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i._20(-1,null,[\"\\n    \"])),(l()(),i._20(-1,null,[\"\\n\\n    \"])),(l()(),i.Z(564,0,null,null,16,\"ion-row\",[[\"class\",\"row\"],[\"justify-content-end\",\"\"]],null,null,null,null,null)),i.Y(565,16384,null,0,xu.a,[],null,null),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i.Z(567,0,null,null,5,\"ion-col\",[[\"class\",\"col\"],[\"col-3\",\"\"]],null,null,null,null,null)),i.Y(568,16384,null,0,Tu.a,[],null,null),(l()(),i._20(-1,null,[\"\\n        \"])),(l()(),i.Z(570,0,null,null,1,\"div\",[],null,null,null,null,null)),(l()(),i._20(-1,null,[\"1 of 2\"])),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i.Z(574,0,null,null,5,\"ion-col\",[[\"class\",\"col\"],[\"col-3\",\"\"]],null,null,null,null,null)),i.Y(575,16384,null,0,Tu.a,[],null,null),(l()(),i._20(-1,null,[\"\\n        \"])),(l()(),i.Z(577,0,null,null,1,\"div\",[],null,null,null,null,null)),(l()(),i._20(-1,null,[\"2 of 2\"])),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i._20(-1,null,[\"\\n    \"])),(l()(),i._20(-1,null,[\"\\n\\n    \"])),(l()(),i.Z(582,0,null,null,16,\"ion-row\",[[\"class\",\"row\"],[\"justify-content-around\",\"\"]],null,null,null,null,null)),i.Y(583,16384,null,0,xu.a,[],null,null),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i.Z(585,0,null,null,5,\"ion-col\",[[\"class\",\"col\"],[\"col-3\",\"\"]],null,null,null,null,null)),i.Y(586,16384,null,0,Tu.a,[],null,null),(l()(),i._20(-1,null,[\"\\n        \"])),(l()(),i.Z(588,0,null,null,1,\"div\",[],null,null,null,null,null)),(l()(),i._20(-1,null,[\"1 of 2\"])),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i.Z(592,0,null,null,5,\"ion-col\",[[\"class\",\"col\"],[\"col-3\",\"\"]],null,null,null,null,null)),i.Y(593,16384,null,0,Tu.a,[],null,null),(l()(),i._20(-1,null,[\"\\n        \"])),(l()(),i.Z(595,0,null,null,1,\"div\",[],null,null,null,null,null)),(l()(),i._20(-1,null,[\"2 of 2\"])),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i._20(-1,null,[\"\\n    \"])),(l()(),i._20(-1,null,[\"\\n\\n    \"])),(l()(),i.Z(600,0,null,null,16,\"ion-row\",[[\"class\",\"row\"],[\"justify-content-between\",\"\"]],null,null,null,null,null)),i.Y(601,16384,null,0,xu.a,[],null,null),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i.Z(603,0,null,null,5,\"ion-col\",[[\"class\",\"col\"],[\"col-3\",\"\"]],null,null,null,null,null)),i.Y(604,16384,null,0,Tu.a,[],null,null),(l()(),i._20(-1,null,[\"\\n        \"])),(l()(),i.Z(606,0,null,null,1,\"div\",[],null,null,null,null,null)),(l()(),i._20(-1,null,[\"1 of 2\"])),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i.Z(610,0,null,null,5,\"ion-col\",[[\"class\",\"col\"],[\"col-3\",\"\"]],null,null,null,null,null)),i.Y(611,16384,null,0,Tu.a,[],null,null),(l()(),i._20(-1,null,[\"\\n        \"])),(l()(),i.Z(613,0,null,null,1,\"div\",[],null,null,null,null,null)),(l()(),i._20(-1,null,[\"2 of 2\"])),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i._20(-1,null,[\"\\n    \"])),(l()(),i._20(-1,null,[\"\\n  \"])),(l()(),i._20(-1,1,[\"\\n\"]))],function(l,n){l(n,176,0,\"globe\")},function(l,n){l(n,4,0,i._13(n,5)._hidden,i._13(n,5)._sbPadding),l(n,13,0,i._13(n,14).statusbarPadding,i._13(n,14)._hasRefresher),l(n,175,0,i._13(n,176)._hidden)})},ga)),i.Y(1,49152,null,0,B,[],null,null)],null,null)},{},{},[]),pa=i.X({encapsulation:2,styles:[],data:{}}),Za=i.V(\"ng-component\",F,function(l){return i._22(0,[(l()(),i.Z(0,0,null,null,1,\"ng-component\",[],null,null,null,function(l){return i._22(0,[(l()(),i._20(-1,null,[\"\\n\"])),(l()(),i.Z(1,0,null,null,10,\"ion-header\",[],null,null,null,null,null)),i.Y(2,16384,null,0,jn.a,[Ql.a,i.j,i.z,[2,fn.a]],null,null),(l()(),i._20(-1,null,[\"\\n  \"])),(l()(),i.Z(4,0,null,null,6,\"ion-navbar\",[[\"class\",\"toolbar\"]],[[8,\"hidden\",0],[2,\"statusbar-padding\",null]],null,null,Fn.b,Fn.a)),i.Y(5,49152,null,0,Pn.a,[Yn.a,[2,fn.a],[2,Ln.a],Ql.a,i.j,i.z],null,null),(l()(),i._20(-1,3,[\"\\n    \"])),(l()(),i.Z(7,0,null,3,2,\"ion-title\",[],null,null,null,vn.b,vn.a)),i.Y(8,49152,null,0,yn.a,[Ql.a,i.j,i.z,[2,kn.a],[2,Pn.a]],null,null),(l()(),i._20(-1,0,[\"Icons\"])),(l()(),i._20(-1,3,[\"\\n  \"])),(l()(),i._20(-1,null,[\"\\n\"])),(l()(),i._20(-1,null,[\"\\n\\n\"])),(l()(),i.Z(13,0,null,null,186,\"ion-content\",[[\"class\",\"icons-basic-page\"],[\"text-center\",\"\"]],[[2,\"statusbar-padding\",null],[2,\"has-refresher\",null]],null,null,Cn.b,Cn.a)),i.Y(14,4374528,null,0,wn.a,[Ql.a,on.a,_n.a,i.j,i.z,Yn.a,Zn.a,i.u,[2,fn.a],[2,Ln.a]],null,null),(l()(),i._20(-1,1,[\"\\n\\n  \"])),(l()(),i.Z(16,0,null,1,182,\"ion-row\",[[\"class\",\"row\"]],null,null,null,null,null)),i.Y(17,16384,null,0,xu.a,[],null,null),(l()(),i._20(-1,null,[\"\\n    \"])),(l()(),i.Z(19,0,null,null,3,\"ion-col\",[[\"class\",\"col\"]],null,null,null,null,null)),i.Y(20,16384,null,0,Tu.a,[],null,null),(l()(),i.Z(21,0,null,null,1,\"ion-icon\",[[\"color\",\"primary\"],[\"name\",\"ionic\"],[\"role\",\"img\"]],[[2,\"hide\",null]],null,null,null,null)),i.Y(22,147456,null,0,mn.a,[Ql.a,i.j,i.z],{color:[0,\"color\"],name:[1,\"name\"]},null),(l()(),i._20(-1,null,[\"\\n    \"])),(l()(),i.Z(24,0,null,null,3,\"ion-col\",[[\"class\",\"col\"]],null,null,null,null,null)),i.Y(25,16384,null,0,Tu.a,[],null,null),(l()(),i.Z(26,0,null,null,1,\"ion-icon\",[[\"name\",\"logo-angular\"],[\"role\",\"img\"]],[[2,\"hide\",null]],null,null,null,null)),i.Y(27,147456,null,0,mn.a,[Ql.a,i.j,i.z],{name:[0,\"name\"]},null),(l()(),i._20(-1,null,[\"\\n    \"])),(l()(),i.Z(29,0,null,null,3,\"ion-col\",[[\"class\",\"col\"]],null,null,null,null,null)),i.Y(30,16384,null,0,Tu.a,[],null,null),(l()(),i.Z(31,0,null,null,1,\"ion-icon\",[[\"color\",\"danger\"],[\"name\",\"heart\"],[\"role\",\"img\"]],[[2,\"hide\",null]],null,null,null,null)),i.Y(32,147456,null,0,mn.a,[Ql.a,i.j,i.z],{color:[0,\"color\"],name:[1,\"name\"]},null),(l()(),i._20(-1,null,[\"\\n    \"])),(l()(),i.Z(34,0,null,null,3,\"ion-col\",[[\"class\",\"col\"]],null,null,null,null,null)),i.Y(35,16384,null,0,Tu.a,[],null,null),(l()(),i.Z(36,0,null,null,1,\"ion-icon\",[[\"color\",\"primary\"],[\"name\",\"ionitron\"],[\"role\",\"img\"]],[[2,\"hide\",null]],null,null,null,null)),i.Y(37,147456,null,0,mn.a,[Ql.a,i.j,i.z],{color:[0,\"color\"],name:[1,\"name\"]},null),(l()(),i._20(-1,null,[\"\\n\\n    \"])),(l()(),i.Z(39,0,null,null,3,\"ion-col\",[[\"class\",\"col\"]],null,null,null,null,null)),i.Y(40,16384,null,0,Tu.a,[],null,null),(l()(),i.Z(41,0,null,null,1,\"ion-icon\",[[\"color\",\"vibrant\"],[\"name\",\"happy\"],[\"role\",\"img\"]],[[2,\"hide\",null]],null,null,null,null)),i.Y(42,147456,null,0,mn.a,[Ql.a,i.j,i.z],{color:[0,\"color\"],name:[1,\"name\"]},null),(l()(),i._20(-1,null,[\"\\n    \"])),(l()(),i.Z(44,0,null,null,3,\"ion-col\",[[\"class\",\"col\"]],null,null,null,null,null)),i.Y(45,16384,null,0,Tu.a,[],null,null),(l()(),i.Z(46,0,null,null,1,\"ion-icon\",[[\"name\",\"people\"],[\"role\",\"img\"]],[[2,\"hide\",null]],null,null,null,null)),i.Y(47,147456,null,0,mn.a,[Ql.a,i.j,i.z],{name:[0,\"name\"]},null),(l()(),i._20(-1,null,[\"\\n    \"])),(l()(),i.Z(49,0,null,null,3,\"ion-col\",[[\"class\",\"col\"]],null,null,null,null,null)),i.Y(50,16384,null,0,Tu.a,[],null,null),(l()(),i.Z(51,0,null,null,1,\"ion-icon\",[[\"name\",\"person\"],[\"role\",\"img\"]],[[2,\"hide\",null]],null,null,null,null)),i.Y(52,147456,null,0,mn.a,[Ql.a,i.j,i.z],{name:[0,\"name\"]},null),(l()(),i._20(-1,null,[\"\\n    \"])),(l()(),i.Z(54,0,null,null,3,\"ion-col\",[[\"class\",\"col\"]],null,null,null,null,null)),i.Y(55,16384,null,0,Tu.a,[],null,null),(l()(),i.Z(56,0,null,null,1,\"ion-icon\",[[\"name\",\"contact\"],[\"role\",\"img\"]],[[2,\"hide\",null]],null,null,null,null)),i.Y(57,147456,null,0,mn.a,[Ql.a,i.j,i.z],{name:[0,\"name\"]},null),(l()(),i._20(-1,null,[\"\\n\\n    \"])),(l()(),i.Z(59,0,null,null,3,\"ion-col\",[[\"class\",\"col\"]],null,null,null,null,null)),i.Y(60,16384,null,0,Tu.a,[],null,null),(l()(),i.Z(61,0,null,null,1,\"ion-icon\",[[\"name\",\"apps\"],[\"role\",\"img\"]],[[2,\"hide\",null]],null,null,null,null)),i.Y(62,147456,null,0,mn.a,[Ql.a,i.j,i.z],{name:[0,\"name\"]},null),(l()(),i._20(-1,null,[\"\\n    \"])),(l()(),i.Z(64,0,null,null,3,\"ion-col\",[[\"class\",\"col\"]],null,null,null,null,null)),i.Y(65,16384,null,0,Tu.a,[],null,null),(l()(),i.Z(66,0,null,null,1,\"ion-icon\",[[\"name\",\"lock\"],[\"role\",\"img\"]],[[2,\"hide\",null]],null,null,null,null)),i.Y(67,147456,null,0,mn.a,[Ql.a,i.j,i.z],{name:[0,\"name\"]},null),(l()(),i._20(-1,null,[\"\\n    \"])),(l()(),i.Z(69,0,null,null,3,\"ion-col\",[[\"class\",\"col\"]],null,null,null,null,null)),i.Y(70,16384,null,0,Tu.a,[],null,null),(l()(),i.Z(71,0,null,null,1,\"ion-icon\",[[\"color\",\"bright\"],[\"name\",\"key\"],[\"role\",\"img\"]],[[2,\"hide\",null]],null,null,null,null)),i.Y(72,147456,null,0,mn.a,[Ql.a,i.j,i.z],{color:[0,\"color\"],name:[1,\"name\"]},null),(l()(),i._20(-1,null,[\"\\n    \"])),(l()(),i.Z(74,0,null,null,3,\"ion-col\",[[\"class\",\"col\"]],null,null,null,null,null)),i.Y(75,16384,null,0,Tu.a,[],null,null),(l()(),i.Z(76,0,null,null,1,\"ion-icon\",[[\"name\",\"unlock\"],[\"role\",\"img\"]],[[2,\"hide\",null]],null,null,null,null)),i.Y(77,147456,null,0,mn.a,[Ql.a,i.j,i.z],{name:[0,\"name\"]},null),(l()(),i._20(-1,null,[\"\\n\\n    \"])),(l()(),i.Z(79,0,null,null,3,\"ion-col\",[[\"class\",\"col\"]],null,null,null,null,null)),i.Y(80,16384,null,0,Tu.a,[],null,null),(l()(),i.Z(81,0,null,null,1,\"ion-icon\",[[\"color\",\"secondary\"],[\"name\",\"map\"],[\"role\",\"img\"]],[[2,\"hide\",null]],null,null,null,null)),i.Y(82,147456,null,0,mn.a,[Ql.a,i.j,i.z],{color:[0,\"color\"],name:[1,\"name\"]},null),(l()(),i._20(-1,null,[\"\\n    \"])),(l()(),i.Z(84,0,null,null,3,\"ion-col\",[[\"class\",\"col\"]],null,null,null,null,null)),i.Y(85,16384,null,0,Tu.a,[],null,null),(l()(),i.Z(86,0,null,null,1,\"ion-icon\",[[\"name\",\"navigate\"],[\"role\",\"img\"]],[[2,\"hide\",null]],null,null,null,null)),i.Y(87,147456,null,0,mn.a,[Ql.a,i.j,i.z],{name:[0,\"name\"]},null),(l()(),i._20(-1,null,[\"\\n    \"])),(l()(),i.Z(89,0,null,null,3,\"ion-col\",[[\"class\",\"col\"]],null,null,null,null,null)),i.Y(90,16384,null,0,Tu.a,[],null,null),(l()(),i.Z(91,0,null,null,1,\"ion-icon\",[[\"name\",\"pin\"],[\"role\",\"img\"]],[[2,\"hide\",null]],null,null,null,null)),i.Y(92,147456,null,0,mn.a,[Ql.a,i.j,i.z],{name:[0,\"name\"]},null),(l()(),i._20(-1,null,[\"\\n    \"])),(l()(),i.Z(94,0,null,null,3,\"ion-col\",[[\"class\",\"col\"]],null,null,null,null,null)),i.Y(95,16384,null,0,Tu.a,[],null,null),(l()(),i.Z(96,0,null,null,1,\"ion-icon\",[[\"name\",\"locate\"],[\"role\",\"img\"]],[[2,\"hide\",null]],null,null,null,null)),i.Y(97,147456,null,0,mn.a,[Ql.a,i.j,i.z],{name:[0,\"name\"]},null),(l()(),i._20(-1,null,[\"\\n\\n    \"])),(l()(),i.Z(99,0,null,null,3,\"ion-col\",[[\"class\",\"col\"]],null,null,null,null,null)),i.Y(100,16384,null,0,Tu.a,[],null,null),(l()(),i.Z(101,0,null,null,1,\"ion-icon\",[[\"name\",\"mic\"],[\"role\",\"img\"]],[[2,\"hide\",null]],null,null,null,null)),i.Y(102,147456,null,0,mn.a,[Ql.a,i.j,i.z],{name:[0,\"name\"]},null),(l()(),i._20(-1,null,[\"\\n    \"])),(l()(),i.Z(104,0,null,null,3,\"ion-col\",[[\"class\",\"col\"]],null,null,null,null,null)),i.Y(105,16384,null,0,Tu.a,[],null,null),(l()(),i.Z(106,0,null,null,1,\"ion-icon\",[[\"color\",\"vibrant\"],[\"name\",\"musical-notes\"],[\"role\",\"img\"]],[[2,\"hide\",null]],null,null,null,null)),i.Y(107,147456,null,0,mn.a,[Ql.a,i.j,i.z],{color:[0,\"color\"],name:[1,\"name\"]},null),(l()(),i._20(-1,null,[\"\\n    \"])),(l()(),i.Z(109,0,null,null,3,\"ion-col\",[[\"class\",\"col\"]],null,null,null,null,null)),i.Y(110,16384,null,0,Tu.a,[],null,null),(l()(),i.Z(111,0,null,null,1,\"ion-icon\",[[\"name\",\"volume-up\"],[\"role\",\"img\"]],[[2,\"hide\",null]],null,null,null,null)),i.Y(112,147456,null,0,mn.a,[Ql.a,i.j,i.z],{name:[0,\"name\"]},null),(l()(),i._20(-1,null,[\"\\n    \"])),(l()(),i.Z(114,0,null,null,3,\"ion-col\",[[\"class\",\"col\"]],null,null,null,null,null)),i.Y(115,16384,null,0,Tu.a,[],null,null),(l()(),i.Z(116,0,null,null,1,\"ion-icon\",[[\"name\",\"microphone\"],[\"role\",\"img\"]],[[2,\"hide\",null]],null,null,null,null)),i.Y(117,147456,null,0,mn.a,[Ql.a,i.j,i.z],{name:[0,\"name\"]},null),(l()(),i._20(-1,null,[\"\\n\\n    \"])),(l()(),i.Z(119,0,null,null,3,\"ion-col\",[[\"class\",\"col\"]],null,null,null,null,null)),i.Y(120,16384,null,0,Tu.a,[],null,null),(l()(),i.Z(121,0,null,null,1,\"ion-icon\",[[\"color\",\"bright\"],[\"name\",\"cafe\"],[\"role\",\"img\"]],[[2,\"hide\",null]],null,null,null,null)),i.Y(122,147456,null,0,mn.a,[Ql.a,i.j,i.z],{color:[0,\"color\"],name:[1,\"name\"]},null),(l()(),i._20(-1,null,[\"\\n    \"])),(l()(),i.Z(124,0,null,null,3,\"ion-col\",[[\"class\",\"col\"]],null,null,null,null,null)),i.Y(125,16384,null,0,Tu.a,[],null,null),(l()(),i.Z(126,0,null,null,1,\"ion-icon\",[[\"name\",\"calculator\"],[\"role\",\"img\"]],[[2,\"hide\",null]],null,null,null,null)),i.Y(127,147456,null,0,mn.a,[Ql.a,i.j,i.z],{name:[0,\"name\"]},null),(l()(),i._20(-1,null,[\"\\n    \"])),(l()(),i.Z(129,0,null,null,3,\"ion-col\",[[\"class\",\"col\"]],null,null,null,null,null)),i.Y(130,16384,null,0,Tu.a,[],null,null),(l()(),i.Z(131,0,null,null,1,\"ion-icon\",[[\"name\",\"bus\"],[\"role\",\"img\"]],[[2,\"hide\",null]],null,null,null,null)),i.Y(132,147456,null,0,mn.a,[Ql.a,i.j,i.z],{name:[0,\"name\"]},null),(l()(),i._20(-1,null,[\"\\n    \"])),(l()(),i.Z(134,0,null,null,3,\"ion-col\",[[\"class\",\"col\"]],null,null,null,null,null)),i.Y(135,16384,null,0,Tu.a,[],null,null),(l()(),i.Z(136,0,null,null,1,\"ion-icon\",[[\"color\",\"danger\"],[\"name\",\"wine\"],[\"role\",\"img\"]],[[2,\"hide\",null]],null,null,null,null)),i.Y(137,147456,null,0,mn.a,[Ql.a,i.j,i.z],{color:[0,\"color\"],name:[1,\"name\"]},null),(l()(),i._20(-1,null,[\"\\n\\n    \"])),(l()(),i.Z(139,0,null,null,3,\"ion-col\",[[\"class\",\"col\"]],null,null,null,null,null)),i.Y(140,16384,null,0,Tu.a,[],null,null),(l()(),i.Z(141,0,null,null,1,\"ion-icon\",[[\"name\",\"camera\"],[\"role\",\"img\"]],[[2,\"hide\",null]],null,null,null,null)),i.Y(142,147456,null,0,mn.a,[Ql.a,i.j,i.z],{name:[0,\"name\"]},null),(l()(),i._20(-1,null,[\"\\n    \"])),(l()(),i.Z(144,0,null,null,3,\"ion-col\",[[\"class\",\"col\"]],null,null,null,null,null)),i.Y(145,16384,null,0,Tu.a,[],null,null),(l()(),i.Z(146,0,null,null,1,\"ion-icon\",[[\"color\",\"secondary\"],[\"name\",\"image\"],[\"role\",\"img\"]],[[2,\"hide\",null]],null,null,null,null)),i.Y(147,147456,null,0,mn.a,[Ql.a,i.j,i.z],{color:[0,\"color\"],name:[1,\"name\"]},null),(l()(),i._20(-1,null,[\"\\n    \"])),(l()(),i.Z(149,0,null,null,3,\"ion-col\",[[\"class\",\"col\"]],null,null,null,null,null)),i.Y(150,16384,null,0,Tu.a,[],null,null),(l()(),i.Z(151,0,null,null,1,\"ion-icon\",[[\"color\",\"bright\"],[\"name\",\"star\"],[\"role\",\"img\"]],[[2,\"hide\",null]],null,null,null,null)),i.Y(152,147456,null,0,mn.a,[Ql.a,i.j,i.z],{color:[0,\"color\"],name:[1,\"name\"]},null),(l()(),i._20(-1,null,[\"\\n    \"])),(l()(),i.Z(154,0,null,null,3,\"ion-col\",[[\"class\",\"col\"]],null,null,null,null,null)),i.Y(155,16384,null,0,Tu.a,[],null,null),(l()(),i.Z(156,0,null,null,1,\"ion-icon\",[[\"name\",\"pin\"],[\"role\",\"img\"]],[[2,\"hide\",null]],null,null,null,null)),i.Y(157,147456,null,0,mn.a,[Ql.a,i.j,i.z],{name:[0,\"name\"]},null),(l()(),i._20(-1,null,[\"\\n\\n    \"])),(l()(),i.Z(159,0,null,null,3,\"ion-col\",[[\"class\",\"col\"]],null,null,null,null,null)),i.Y(160,16384,null,0,Tu.a,[],null,null),(l()(),i.Z(161,0,null,null,1,\"ion-icon\",[[\"color\",\"vibrant\"],[\"name\",\"arrow-dropup-circle\"],[\"role\",\"img\"]],[[2,\"hide\",null]],null,null,null,null)),i.Y(162,147456,null,0,mn.a,[Ql.a,i.j,i.z],{color:[0,\"color\"],name:[1,\"name\"]},null),(l()(),i._20(-1,null,[\"\\n    \"])),(l()(),i.Z(164,0,null,null,3,\"ion-col\",[[\"class\",\"col\"]],null,null,null,null,null)),i.Y(165,16384,null,0,Tu.a,[],null,null),(l()(),i.Z(166,0,null,null,1,\"ion-icon\",[[\"name\",\"arrow-back\"],[\"role\",\"img\"]],[[2,\"hide\",null]],null,null,null,null)),i.Y(167,147456,null,0,mn.a,[Ql.a,i.j,i.z],{name:[0,\"name\"]},null),(l()(),i._20(-1,null,[\"\\n    \"])),(l()(),i.Z(169,0,null,null,3,\"ion-col\",[[\"class\",\"col\"]],null,null,null,null,null)),i.Y(170,16384,null,0,Tu.a,[],null,null),(l()(),i.Z(171,0,null,null,1,\"ion-icon\",[[\"name\",\"arrow-dropdown\"],[\"role\",\"img\"]],[[2,\"hide\",null]],null,null,null,null)),i.Y(172,147456,null,0,mn.a,[Ql.a,i.j,i.z],{name:[0,\"name\"]},null),(l()(),i._20(-1,null,[\"\\n    \"])),(l()(),i.Z(174,0,null,null,3,\"ion-col\",[[\"class\",\"col\"]],null,null,null,null,null)),i.Y(175,16384,null,0,Tu.a,[],null,null),(l()(),i.Z(176,0,null,null,1,\"ion-icon\",[[\"name\",\"arrow-forward\"],[\"role\",\"img\"]],[[2,\"hide\",null]],null,null,null,null)),i.Y(177,147456,null,0,mn.a,[Ql.a,i.j,i.z],{name:[0,\"name\"]},null),(l()(),i._20(-1,null,[\"\\n\\n    \"])),(l()(),i.Z(179,0,null,null,3,\"ion-col\",[[\"class\",\"col\"]],null,null,null,null,null)),i.Y(180,16384,null,0,Tu.a,[],null,null),(l()(),i.Z(181,0,null,null,1,\"ion-icon\",[[\"name\",\"cloud\"],[\"role\",\"img\"]],[[2,\"hide\",null]],null,null,null,null)),i.Y(182,147456,null,0,mn.a,[Ql.a,i.j,i.z],{name:[0,\"name\"]},null),(l()(),i._20(-1,null,[\"\\n    \"])),(l()(),i.Z(184,0,null,null,3,\"ion-col\",[[\"class\",\"col\"]],null,null,null,null,null)),i.Y(185,16384,null,0,Tu.a,[],null,null),(l()(),i.Z(186,0,null,null,1,\"ion-icon\",[[\"color\",\"bright\"],[\"name\",\"sunny\"],[\"role\",\"img\"]],[[2,\"hide\",null]],null,null,null,null)),i.Y(187,147456,null,0,mn.a,[Ql.a,i.j,i.z],{color:[0,\"color\"],name:[1,\"name\"]},null),(l()(),i._20(-1,null,[\"\\n    \"])),(l()(),i.Z(189,0,null,null,3,\"ion-col\",[[\"class\",\"col\"]],null,null,null,null,null)),i.Y(190,16384,null,0,Tu.a,[],null,null),(l()(),i.Z(191,0,null,null,1,\"ion-icon\",[[\"name\",\"umbrella\"],[\"role\",\"img\"]],[[2,\"hide\",null]],null,null,null,null)),i.Y(192,147456,null,0,mn.a,[Ql.a,i.j,i.z],{name:[0,\"name\"]},null),(l()(),i._20(-1,null,[\"\\n    \"])),(l()(),i.Z(194,0,null,null,3,\"ion-col\",[[\"class\",\"col\"]],null,null,null,null,null)),i.Y(195,16384,null,0,Tu.a,[],null,null),(l()(),i.Z(196,0,null,null,1,\"ion-icon\",[[\"color\",\"primary\"],[\"name\",\"rainy\"],[\"role\",\"img\"]],[[2,\"hide\",null]],null,null,null,null)),i.Y(197,147456,null,0,mn.a,[Ql.a,i.j,i.z],{color:[0,\"color\"],name:[1,\"name\"]},null),(l()(),i._20(-1,null,[\"\\n  \"])),(l()(),i._20(-1,1,[\"\\n\\n\"])),(l()(),i._20(-1,null,[\"\\n\"]))],function(l,n){l(n,22,0,\"primary\",\"ionic\"),l(n,27,0,\"logo-angular\"),l(n,32,0,\"danger\",\"heart\"),l(n,37,0,\"primary\",\"ionitron\"),l(n,42,0,\"vibrant\",\"happy\"),l(n,47,0,\"people\"),l(n,52,0,\"person\"),l(n,57,0,\"contact\"),l(n,62,0,\"apps\"),l(n,67,0,\"lock\"),l(n,72,0,\"bright\",\"key\"),l(n,77,0,\"unlock\"),l(n,82,0,\"secondary\",\"map\"),l(n,87,0,\"navigate\"),l(n,92,0,\"pin\"),l(n,97,0,\"locate\"),l(n,102,0,\"mic\"),l(n,107,0,\"vibrant\",\"musical-notes\"),l(n,112,0,\"volume-up\"),l(n,117,0,\"microphone\"),l(n,122,0,\"bright\",\"cafe\"),l(n,127,0,\"calculator\"),l(n,132,0,\"bus\"),l(n,137,0,\"danger\",\"wine\"),l(n,142,0,\"camera\"),l(n,147,0,\"secondary\",\"image\"),l(n,152,0,\"bright\",\"star\"),l(n,157,0,\"pin\"),l(n,162,0,\"vibrant\",\"arrow-dropup-circle\"),l(n,167,0,\"arrow-back\"),l(n,172,0,\"arrow-dropdown\"),l(n,177,0,\"arrow-forward\"),l(n,182,0,\"cloud\"),l(n,187,0,\"bright\",\"sunny\"),l(n,192,0,\"umbrella\"),l(n,197,0,\"primary\",\"rainy\")},function(l,n){l(n,4,0,i._13(n,5)._hidden,i._13(n,5)._sbPadding),l(n,13,0,i._13(n,14).statusbarPadding,i._13(n,14)._hasRefresher),l(n,21,0,i._13(n,22)._hidden),l(n,26,0,i._13(n,27)._hidden),l(n,31,0,i._13(n,32)._hidden),l(n,36,0,i._13(n,37)._hidden),l(n,41,0,i._13(n,42)._hidden),l(n,46,0,i._13(n,47)._hidden),l(n,51,0,i._13(n,52)._hidden),l(n,56,0,i._13(n,57)._hidden),l(n,61,0,i._13(n,62)._hidden),l(n,66,0,i._13(n,67)._hidden),l(n,71,0,i._13(n,72)._hidden),l(n,76,0,i._13(n,77)._hidden),l(n,81,0,i._13(n,82)._hidden),l(n,86,0,i._13(n,87)._hidden),l(n,91,0,i._13(n,92)._hidden),l(n,96,0,i._13(n,97)._hidden),l(n,101,0,i._13(n,102)._hidden),l(n,106,0,i._13(n,107)._hidden),l(n,111,0,i._13(n,112)._hidden),l(n,116,0,i._13(n,117)._hidden),l(n,121,0,i._13(n,122)._hidden),l(n,126,0,i._13(n,127)._hidden),l(n,131,0,i._13(n,132)._hidden),l(n,136,0,i._13(n,137)._hidden),l(n,141,0,i._13(n,142)._hidden),l(n,146,0,i._13(n,147)._hidden),l(n,151,0,i._13(n,152)._hidden),l(n,156,0,i._13(n,157)._hidden),l(n,161,0,i._13(n,162)._hidden),l(n,166,0,i._13(n,167)._hidden),l(n,171,0,i._13(n,172)._hidden),l(n,176,0,i._13(n,177)._hidden),l(n,181,0,i._13(n,182)._hidden),l(n,186,0,i._13(n,187)._hidden),l(n,191,0,i._13(n,192)._hidden),l(n,196,0,i._13(n,197)._hidden)})},pa)),i.Y(1,49152,null,0,F,[],null,null)],null,null)},{},{},[]),Ya=i.X({encapsulation:2,styles:[],data:{}}),ja=i.V(\"ng-component\",R,function(l){return i._22(0,[(l()(),i.Z(0,0,null,null,1,\"ng-component\",[],null,null,null,function(l){return i._22(0,[(l()(),i._20(-1,null,[\"\\n\"])),(l()(),i.Z(1,0,null,null,10,\"ion-header\",[],null,null,null,null,null)),i.Y(2,16384,null,0,jn.a,[Ql.a,i.j,i.z,[2,fn.a]],null,null),(l()(),i._20(-1,null,[\"\\n  \"])),(l()(),i.Z(4,0,null,null,6,\"ion-navbar\",[[\"class\",\"toolbar\"]],[[8,\"hidden\",0],[2,\"statusbar-padding\",null]],null,null,Fn.b,Fn.a)),i.Y(5,49152,null,0,Pn.a,[Yn.a,[2,fn.a],[2,Ln.a],Ql.a,i.j,i.z],null,null),(l()(),i._20(-1,3,[\"\\n    \"])),(l()(),i.Z(7,0,null,3,2,\"ion-title\",[],null,null,null,vn.b,vn.a)),i.Y(8,49152,null,0,yn.a,[Ql.a,i.j,i.z,[2,kn.a],[2,Pn.a]],null,null),(l()(),i._20(-1,0,[\"Inputs\"])),(l()(),i._20(-1,3,[\"\\n  \"])),(l()(),i._20(-1,null,[\"\\n\"])),(l()(),i._20(-1,null,[\"\\n\\n\"])),(l()(),i.Z(13,0,null,null,48,\"ion-content\",[],[[2,\"statusbar-padding\",null],[2,\"has-refresher\",null]],null,null,Cn.b,Cn.a)),i.Y(14,4374528,null,0,wn.a,[Ql.a,on.a,_n.a,i.j,i.z,Yn.a,Zn.a,i.u,[2,fn.a],[2,Ln.a]],null,null),(l()(),i._20(-1,1,[\"\\n  \"])),(l()(),i.Z(16,0,null,1,44,\"form\",[[\"novalidate\",\"\"]],[[2,\"ng-untouched\",null],[2,\"ng-touched\",null],[2,\"ng-pristine\",null],[2,\"ng-dirty\",null],[2,\"ng-valid\",null],[2,\"ng-invalid\",null],[2,\"ng-pending\",null]],[[null,\"submit\"],[null,\"reset\"]],function(l,n,u){var a=!0,e=l.component;return\"submit\"===n&&(a=!1!==i._13(l,18).onSubmit(u)&&a),\"reset\"===n&&(a=!1!==i._13(l,18).onReset()&&a),\"submit\"===n&&(a=!1!==e.processForm()&&a),a},null,null)),i.Y(17,16384,null,0,A.r,[],null,null),i.Y(18,540672,null,0,A.h,[[8,null],[8,null]],{form:[0,\"form\"]},null),i._17(2048,null,A.b,null,[A.h]),i.Y(20,16384,null,0,A.m,[A.b],null,null),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i.Z(22,0,null,null,30,\"ion-list\",[],null,null,null,null,null)),i.Y(23,16384,null,0,en.a,[Ql.a,i.j,i.z,on.a,tn.l,_n.a],null,null),(l()(),i._20(-1,null,[\"\\n\\n      \"])),(l()(),i.Z(25,0,null,null,12,\"ion-item\",[[\"class\",\"item item-block\"]],null,null,null,$l.b,$l.a)),i.Y(26,1097728,null,3,Kl.a,[Jl.a,Ql.a,i.j,i.z,[2,ln.a]],null,null),i._18(335544320,1,{contentLabel:0}),i._18(603979776,2,{_buttons:1}),i._18(603979776,3,{_icons:1}),i.Y(30,16384,null,0,nn.a,[],null,null),(l()(),i._20(-1,2,[\"\\n        \"])),(l()(),i.Z(32,0,null,3,4,\"ion-input\",[[\"formControlName\",\"firstName\"],[\"placeholder\",\"First Name\"],[\"type\",\"text\"]],[[2,\"ng-untouched\",null],[2,\"ng-touched\",null],[2,\"ng-pristine\",null],[2,\"ng-dirty\",null],[2,\"ng-valid\",null],[2,\"ng-invalid\",null],[2,\"ng-pending\",null]],null,null,oa.b,oa.a)),i.Y(33,671744,null,0,A.f,[[3,A.b],[8,null],[8,null],[8,null]],{name:[0,\"name\"]},null),i._17(2048,null,A.k,null,[A.f]),i.Y(35,16384,null,0,A.l,[A.k],null,null),i.Y(36,5423104,null,0,ta.a,[Ql.a,on.a,Jl.a,Yn.a,i.j,i.z,[2,wn.a],[2,Kl.a],[2,A.k],_n.a],{type:[0,\"type\"],placeholder:[1,\"placeholder\"]},null),(l()(),i._20(-1,2,[\"\\n      \"])),(l()(),i._20(-1,null,[\"\\n\\n      \"])),(l()(),i.Z(39,0,null,null,12,\"ion-item\",[[\"class\",\"item item-block\"]],null,null,null,$l.b,$l.a)),i.Y(40,1097728,null,3,Kl.a,[Jl.a,Ql.a,i.j,i.z,[2,ln.a]],null,null),i._18(335544320,4,{contentLabel:0}),i._18(603979776,5,{_buttons:1}),i._18(603979776,6,{_icons:1}),i.Y(44,16384,null,0,nn.a,[],null,null),(l()(),i._20(-1,2,[\"\\n        \"])),(l()(),i.Z(46,0,null,3,4,\"ion-input\",[[\"formControlName\",\"lastName\"],[\"placeholder\",\"Last Name\"],[\"type\",\"text\"]],[[2,\"ng-untouched\",null],[2,\"ng-touched\",null],[2,\"ng-pristine\",null],[2,\"ng-dirty\",null],[2,\"ng-valid\",null],[2,\"ng-invalid\",null],[2,\"ng-pending\",null]],null,null,oa.b,oa.a)),i.Y(47,671744,null,0,A.f,[[3,A.b],[8,null],[8,null],[8,null]],{name:[0,\"name\"]},null),i._17(2048,null,A.k,null,[A.f]),i.Y(49,16384,null,0,A.l,[A.k],null,null),i.Y(50,5423104,null,0,ta.a,[Ql.a,on.a,Jl.a,Yn.a,i.j,i.z,[2,wn.a],[2,Kl.a],[2,A.k],_n.a],{type:[0,\"type\"],placeholder:[1,\"placeholder\"]},null),(l()(),i._20(-1,2,[\"\\n      \"])),(l()(),i._20(-1,null,[\"\\n\\n    \"])),(l()(),i._20(-1,null,[\"\\n    \"])),(l()(),i.Z(54,0,null,null,5,\"div\",[[\"padding\",\"\"]],null,null,null,null,null)),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i.Z(56,0,null,null,2,\"button\",[[\"block\",\"\"],[\"ion-button\",\"\"],[\"type\",\"submit\"]],null,null,null,An.b,An.a)),i.Y(57,1097728,null,0,Rn.a,[[8,\"\"],Ql.a,i.j,i.z],{block:[0,\"block\"]},null),(l()(),i._20(-1,0,[\"Create Account\"])),(l()(),i._20(-1,null,[\"\\n    \"])),(l()(),i._20(-1,null,[\"\\n  \"])),(l()(),i._20(-1,1,[\"\\n\"])),(l()(),i._20(-1,null,[\"\\n\"]))],function(l,n){l(n,18,0,n.component.form),l(n,33,0,\"firstName\"),l(n,36,0,\"text\",\"First Name\"),l(n,47,0,\"lastName\"),l(n,50,0,\"text\",\"Last Name\"),l(n,57,0,\"\")},function(l,n){l(n,4,0,i._13(n,5)._hidden,i._13(n,5)._sbPadding),l(n,13,0,i._13(n,14).statusbarPadding,i._13(n,14)._hasRefresher),l(n,16,0,i._13(n,20).ngClassUntouched,i._13(n,20).ngClassTouched,i._13(n,20).ngClassPristine,i._13(n,20).ngClassDirty,i._13(n,20).ngClassValid,i._13(n,20).ngClassInvalid,i._13(n,20).ngClassPending),l(n,32,0,i._13(n,35).ngClassUntouched,i._13(n,35).ngClassTouched,i._13(n,35).ngClassPristine,i._13(n,35).ngClassDirty,i._13(n,35).ngClassValid,i._13(n,35).ngClassInvalid,i._13(n,35).ngClassPending),l(n,46,0,i._13(n,49).ngClassUntouched,i._13(n,49).ngClassTouched,i._13(n,49).ngClassPristine,i._13(n,49).ngClassDirty,i._13(n,49).ngClassValid,i._13(n,49).ngClassInvalid,i._13(n,49).ngClassPending)})},Ya)),i.Y(1,49152,null,0,R,[Xn.a],null,null)],null,null)},{},{},[]),fa=i.X({encapsulation:2,styles:[],data:{}}),za=i.V(\"ng-component\",V,function(l){return i._22(0,[(l()(),i.Z(0,0,null,null,1,\"ng-component\",[],null,null,null,function(l){return i._22(0,[(l()(),i._20(-1,null,[\"\\n\"])),(l()(),i.Z(1,0,null,null,10,\"ion-header\",[],null,null,null,null,null)),i.Y(2,16384,null,0,jn.a,[Ql.a,i.j,i.z,[2,fn.a]],null,null),(l()(),i._20(-1,null,[\"\\n  \"])),(l()(),i.Z(4,0,null,null,6,\"ion-navbar\",[[\"class\",\"toolbar\"]],[[8,\"hidden\",0],[2,\"statusbar-padding\",null]],null,null,Fn.b,Fn.a)),i.Y(5,49152,null,0,Pn.a,[Yn.a,[2,fn.a],[2,Ln.a],Ql.a,i.j,i.z],null,null),(l()(),i._20(-1,3,[\"\\n    \"])),(l()(),i.Z(7,0,null,3,2,\"ion-title\",[],null,null,null,vn.b,vn.a)),i.Y(8,49152,null,0,yn.a,[Ql.a,i.j,i.z,[2,kn.a],[2,Pn.a]],null,null),(l()(),i._20(-1,0,[\"Floating Labels\"])),(l()(),i._20(-1,3,[\"\\n  \"])),(l()(),i._20(-1,null,[\"\\n\"])),(l()(),i._20(-1,null,[\"\\n\\n\"])),(l()(),i.Z(13,0,null,null,43,\"ion-content\",[],[[2,\"statusbar-padding\",null],[2,\"has-refresher\",null]],null,null,Cn.b,Cn.a)),i.Y(14,4374528,null,0,wn.a,[Ql.a,on.a,_n.a,i.j,i.z,Yn.a,Zn.a,i.u,[2,fn.a],[2,Ln.a]],null,null),(l()(),i._20(-1,1,[\"\\n\\n    \"])),(l()(),i.Z(16,0,null,1,32,\"ion-list\",[],null,null,null,null,null)),i.Y(17,16384,null,0,en.a,[Ql.a,i.j,i.z,on.a,tn.l,_n.a],null,null),(l()(),i._20(-1,null,[\"\\n\\n      \"])),(l()(),i.Z(19,0,null,null,13,\"ion-item\",[[\"class\",\"item item-block\"]],null,null,null,$l.b,$l.a)),i.Y(20,1097728,null,3,Kl.a,[Jl.a,Ql.a,i.j,i.z,[2,ln.a]],null,null),i._18(335544320,1,{contentLabel:0}),i._18(603979776,2,{_buttons:1}),i._18(603979776,3,{_icons:1}),i.Y(24,16384,null,0,nn.a,[],null,null),(l()(),i._20(-1,2,[\"\\n        \"])),(l()(),i.Z(26,0,null,1,2,\"ion-label\",[[\"floating\",\"\"]],null,null,null,null,null)),i.Y(27,16384,[[1,4]],0,la.a,[Ql.a,i.j,i.z,[8,\"\"],[8,null],[8,null],[8,null]],null,null),(l()(),i._20(-1,null,[\"Username\"])),(l()(),i._20(-1,2,[\"\\n        \"])),(l()(),i.Z(30,0,null,3,1,\"ion-input\",[[\"type\",\"text\"],[\"value\",\"\"]],null,null,null,oa.b,oa.a)),i.Y(31,5423104,null,0,ta.a,[Ql.a,on.a,Jl.a,Yn.a,i.j,i.z,[2,wn.a],[2,Kl.a],[2,A.k],_n.a],{value:[0,\"value\"],type:[1,\"type\"]},null),(l()(),i._20(-1,2,[\"\\n      \"])),(l()(),i._20(-1,null,[\"\\n\\n      \"])),(l()(),i.Z(34,0,null,null,13,\"ion-item\",[[\"class\",\"item item-block\"]],null,null,null,$l.b,$l.a)),i.Y(35,1097728,null,3,Kl.a,[Jl.a,Ql.a,i.j,i.z,[2,ln.a]],null,null),i._18(335544320,4,{contentLabel:0}),i._18(603979776,5,{_buttons:1}),i._18(603979776,6,{_icons:1}),i.Y(39,16384,null,0,nn.a,[],null,null),(l()(),i._20(-1,2,[\"\\n        \"])),(l()(),i.Z(41,0,null,1,2,\"ion-label\",[[\"floating\",\"\"]],null,null,null,null,null)),i.Y(42,16384,[[4,4]],0,la.a,[Ql.a,i.j,i.z,[8,\"\"],[8,null],[8,null],[8,null]],null,null),(l()(),i._20(-1,null,[\"Password\"])),(l()(),i._20(-1,2,[\"\\n        \"])),(l()(),i.Z(45,0,null,3,1,\"ion-input\",[[\"type\",\"password\"],[\"value\",\"\"]],null,null,null,oa.b,oa.a)),i.Y(46,5423104,null,0,ta.a,[Ql.a,on.a,Jl.a,Yn.a,i.j,i.z,[2,wn.a],[2,Kl.a],[2,A.k],_n.a],{value:[0,\"value\"],type:[1,\"type\"]},null),(l()(),i._20(-1,2,[\"\\n      \"])),(l()(),i._20(-1,null,[\"\\n\\n    \"])),(l()(),i._20(-1,1,[\"\\n\\n    \"])),(l()(),i.Z(50,0,null,1,5,\"div\",[[\"padding\",\"\"]],null,null,null,null,null)),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i.Z(52,0,null,null,2,\"button\",[[\"block\",\"\"],[\"color\",\"primary\"],[\"ion-button\",\"\"]],null,null,null,An.b,An.a)),i.Y(53,1097728,null,0,Rn.a,[[8,\"\"],Ql.a,i.j,i.z],{color:[0,\"color\"],block:[1,\"block\"]},null),(l()(),i._20(-1,0,[\"Sign In\"])),(l()(),i._20(-1,null,[\"\\n    \"])),(l()(),i._20(-1,1,[\"\\n\\n\"])),(l()(),i._20(-1,null,[\"\\n\"]))],function(l,n){l(n,31,0,\"\",\"text\"),l(n,46,0,\"\",\"password\"),l(n,53,0,\"primary\",\"\")},function(l,n){l(n,4,0,i._13(n,5)._hidden,i._13(n,5)._sbPadding),l(n,13,0,i._13(n,14).statusbarPadding,i._13(n,14)._hasRefresher)})},fa)),i.Y(1,49152,null,0,V,[],null,null)],null,null)},{},{},[]),ka=i.X({encapsulation:2,styles:[],data:{}}),va=i.V(\"ng-component\",D,function(l){return i._22(0,[(l()(),i.Z(0,0,null,null,1,\"ng-component\",[],null,null,null,function(l){return i._22(0,[(l()(),i._20(-1,null,[\"\\n\"])),(l()(),i.Z(1,0,null,null,10,\"ion-header\",[],null,null,null,null,null)),i.Y(2,16384,null,0,jn.a,[Ql.a,i.j,i.z,[2,fn.a]],null,null),(l()(),i._20(-1,null,[\"\\n  \"])),(l()(),i.Z(4,0,null,null,6,\"ion-navbar\",[[\"class\",\"toolbar\"]],[[8,\"hidden\",0],[2,\"statusbar-padding\",null]],null,null,Fn.b,Fn.a)),i.Y(5,49152,null,0,Pn.a,[Yn.a,[2,fn.a],[2,Ln.a],Ql.a,i.j,i.z],null,null),(l()(),i._20(-1,3,[\"\\n    \"])),(l()(),i.Z(7,0,null,3,2,\"ion-title\",[],null,null,null,vn.b,vn.a)),i.Y(8,49152,null,0,yn.a,[Ql.a,i.j,i.z,[2,kn.a],[2,Pn.a]],null,null),(l()(),i._20(-1,0,[\"Fixed Labels\"])),(l()(),i._20(-1,3,[\"\\n  \"])),(l()(),i._20(-1,null,[\"\\n\"])),(l()(),i._20(-1,null,[\"\\n\\n\"])),(l()(),i.Z(13,0,null,null,43,\"ion-content\",[],[[2,\"statusbar-padding\",null],[2,\"has-refresher\",null]],null,null,Cn.b,Cn.a)),i.Y(14,4374528,null,0,wn.a,[Ql.a,on.a,_n.a,i.j,i.z,Yn.a,Zn.a,i.u,[2,fn.a],[2,Ln.a]],null,null),(l()(),i._20(-1,1,[\"\\n\\n  \"])),(l()(),i.Z(16,0,null,1,32,\"ion-list\",[],null,null,null,null,null)),i.Y(17,16384,null,0,en.a,[Ql.a,i.j,i.z,on.a,tn.l,_n.a],null,null),(l()(),i._20(-1,null,[\"\\n\\n    \"])),(l()(),i.Z(19,0,null,null,13,\"ion-item\",[[\"class\",\"item item-block\"]],null,null,null,$l.b,$l.a)),i.Y(20,1097728,null,3,Kl.a,[Jl.a,Ql.a,i.j,i.z,[2,ln.a]],null,null),i._18(335544320,1,{contentLabel:0}),i._18(603979776,2,{_buttons:1}),i._18(603979776,3,{_icons:1}),i.Y(24,16384,null,0,nn.a,[],null,null),(l()(),i._20(-1,2,[\"\\n      \"])),(l()(),i.Z(26,0,null,1,2,\"ion-label\",[[\"fixed\",\"\"]],null,null,null,null,null)),i.Y(27,16384,[[1,4]],0,la.a,[Ql.a,i.j,i.z,[8,null],[8,null],[8,\"\"],[8,null]],null,null),(l()(),i._20(-1,null,[\"Username\"])),(l()(),i._20(-1,2,[\"\\n      \"])),(l()(),i.Z(30,0,null,3,1,\"ion-input\",[[\"type\",\"text\"]],null,null,null,oa.b,oa.a)),i.Y(31,5423104,null,0,ta.a,[Ql.a,on.a,Jl.a,Yn.a,i.j,i.z,[2,wn.a],[2,Kl.a],[2,A.k],_n.a],{type:[0,\"type\"]},null),(l()(),i._20(-1,2,[\"\\n    \"])),(l()(),i._20(-1,null,[\"\\n\\n    \"])),(l()(),i.Z(34,0,null,null,13,\"ion-item\",[[\"class\",\"item item-block\"]],null,null,null,$l.b,$l.a)),i.Y(35,1097728,null,3,Kl.a,[Jl.a,Ql.a,i.j,i.z,[2,ln.a]],null,null),i._18(335544320,4,{contentLabel:0}),i._18(603979776,5,{_buttons:1}),i._18(603979776,6,{_icons:1}),i.Y(39,16384,null,0,nn.a,[],null,null),(l()(),i._20(-1,2,[\"\\n      \"])),(l()(),i.Z(41,0,null,1,2,\"ion-label\",[[\"fixed\",\"\"]],null,null,null,null,null)),i.Y(42,16384,[[4,4]],0,la.a,[Ql.a,i.j,i.z,[8,null],[8,null],[8,\"\"],[8,null]],null,null),(l()(),i._20(-1,null,[\"Password\"])),(l()(),i._20(-1,2,[\"\\n      \"])),(l()(),i.Z(45,0,null,3,1,\"ion-input\",[[\"type\",\"password\"]],null,null,null,oa.b,oa.a)),i.Y(46,5423104,null,0,ta.a,[Ql.a,on.a,Jl.a,Yn.a,i.j,i.z,[2,wn.a],[2,Kl.a],[2,A.k],_n.a],{type:[0,\"type\"]},null),(l()(),i._20(-1,2,[\"\\n    \"])),(l()(),i._20(-1,null,[\"\\n\\n  \"])),(l()(),i._20(-1,1,[\"\\n\\n  \"])),(l()(),i.Z(50,0,null,1,5,\"div\",[[\"padding\",\"\"]],null,null,null,null,null)),(l()(),i._20(-1,null,[\"\\n    \"])),(l()(),i.Z(52,0,null,null,2,\"button\",[[\"block\",\"\"],[\"color\",\"primary\"],[\"ion-button\",\"\"]],null,null,null,An.b,An.a)),i.Y(53,1097728,null,0,Rn.a,[[8,\"\"],Ql.a,i.j,i.z],{color:[0,\"color\"],block:[1,\"block\"]},null),(l()(),i._20(-1,0,[\"Sign In\"])),(l()(),i._20(-1,null,[\"\\n  \"])),(l()(),i._20(-1,1,[\"\\n\\n\\n\"])),(l()(),i._20(-1,null,[\"\\n\"]))],function(l,n){l(n,31,0,\"text\"),l(n,46,0,\"password\"),l(n,53,0,\"primary\",\"\")},function(l,n){l(n,4,0,i._13(n,5)._hidden,i._13(n,5)._sbPadding),l(n,13,0,i._13(n,14).statusbarPadding,i._13(n,14)._hasRefresher)})},ka)),i.Y(1,49152,null,0,D,[],null,null)],null,null)},{},{},[]),ya=i.X({encapsulation:2,styles:[],data:{}}),Pa=i.V(\"ng-component\",N,function(l){return i._22(0,[(l()(),i.Z(0,0,null,null,1,\"ng-component\",[],null,null,null,function(l){return i._22(0,[(l()(),i._20(-1,null,[\"\\n\"])),(l()(),i.Z(1,0,null,null,10,\"ion-header\",[],null,null,null,null,null)),i.Y(2,16384,null,0,jn.a,[Ql.a,i.j,i.z,[2,fn.a]],null,null),(l()(),i._20(-1,null,[\"\\n  \"])),(l()(),i.Z(4,0,null,null,6,\"ion-navbar\",[[\"class\",\"toolbar\"]],[[8,\"hidden\",0],[2,\"statusbar-padding\",null]],null,null,Fn.b,Fn.a)),i.Y(5,49152,null,0,Pn.a,[Yn.a,[2,fn.a],[2,Ln.a],Ql.a,i.j,i.z],null,null),(l()(),i._20(-1,3,[\"\\n    \"])),(l()(),i.Z(7,0,null,3,2,\"ion-title\",[],null,null,null,vn.b,vn.a)),i.Y(8,49152,null,0,yn.a,[Ql.a,i.j,i.z,[2,kn.a],[2,Pn.a]],null,null),(l()(),i._20(-1,0,[\"Inline Labels\"])),(l()(),i._20(-1,3,[\"\\n  \"])),(l()(),i._20(-1,null,[\"\\n\"])),(l()(),i._20(-1,null,[\"\\n\\n\"])),(l()(),i.Z(13,0,null,null,43,\"ion-content\",[],[[2,\"statusbar-padding\",null],[2,\"has-refresher\",null]],null,null,Cn.b,Cn.a)),i.Y(14,4374528,null,0,wn.a,[Ql.a,on.a,_n.a,i.j,i.z,Yn.a,Zn.a,i.u,[2,fn.a],[2,Ln.a]],null,null),(l()(),i._20(-1,1,[\"\\n\\n  \"])),(l()(),i.Z(16,0,null,1,32,\"ion-list\",[],null,null,null,null,null)),i.Y(17,16384,null,0,en.a,[Ql.a,i.j,i.z,on.a,tn.l,_n.a],null,null),(l()(),i._20(-1,null,[\"\\n\\n    \"])),(l()(),i.Z(19,0,null,null,13,\"ion-item\",[[\"class\",\"item item-block\"]],null,null,null,$l.b,$l.a)),i.Y(20,1097728,null,3,Kl.a,[Jl.a,Ql.a,i.j,i.z,[2,ln.a]],null,null),i._18(335544320,1,{contentLabel:0}),i._18(603979776,2,{_buttons:1}),i._18(603979776,3,{_icons:1}),i.Y(24,16384,null,0,nn.a,[],null,null),(l()(),i._20(-1,2,[\"\\n      \"])),(l()(),i.Z(26,0,null,1,2,\"ion-label\",[],null,null,null,null,null)),i.Y(27,16384,[[1,4]],0,la.a,[Ql.a,i.j,i.z,[8,null],[8,null],[8,null],[8,null]],null,null),(l()(),i._20(-1,null,[\"Username\"])),(l()(),i._20(-1,2,[\"\\n      \"])),(l()(),i.Z(30,0,null,3,1,\"ion-input\",[[\"type\",\"text\"],[\"value\",\"\"]],null,null,null,oa.b,oa.a)),i.Y(31,5423104,null,0,ta.a,[Ql.a,on.a,Jl.a,Yn.a,i.j,i.z,[2,wn.a],[2,Kl.a],[2,A.k],_n.a],{value:[0,\"value\"],type:[1,\"type\"]},null),(l()(),i._20(-1,2,[\"\\n    \"])),(l()(),i._20(-1,null,[\"\\n\\n    \"])),(l()(),i.Z(34,0,null,null,13,\"ion-item\",[[\"class\",\"item item-block\"]],null,null,null,$l.b,$l.a)),i.Y(35,1097728,null,3,Kl.a,[Jl.a,Ql.a,i.j,i.z,[2,ln.a]],null,null),i._18(335544320,4,{contentLabel:0}),i._18(603979776,5,{_buttons:1}),i._18(603979776,6,{_icons:1}),i.Y(39,16384,null,0,nn.a,[],null,null),(l()(),i._20(-1,2,[\"\\n      \"])),(l()(),i.Z(41,0,null,1,2,\"ion-label\",[],null,null,null,null,null)),i.Y(42,16384,[[4,4]],0,la.a,[Ql.a,i.j,i.z,[8,null],[8,null],[8,null],[8,null]],null,null),(l()(),i._20(-1,null,[\"Password\"])),(l()(),i._20(-1,2,[\"\\n      \"])),(l()(),i.Z(45,0,null,3,1,\"ion-input\",[[\"type\",\"password\"],[\"value\",\"\"]],null,null,null,oa.b,oa.a)),i.Y(46,5423104,null,0,ta.a,[Ql.a,on.a,Jl.a,Yn.a,i.j,i.z,[2,wn.a],[2,Kl.a],[2,A.k],_n.a],{value:[0,\"value\"],type:[1,\"type\"]},null),(l()(),i._20(-1,2,[\"\\n    \"])),(l()(),i._20(-1,null,[\"\\n\\n  \"])),(l()(),i._20(-1,1,[\"\\n\\n  \"])),(l()(),i.Z(50,0,null,1,5,\"div\",[[\"padding\",\"\"]],null,null,null,null,null)),(l()(),i._20(-1,null,[\"\\n    \"])),(l()(),i.Z(52,0,null,null,2,\"button\",[[\"block\",\"\"],[\"color\",\"primary\"],[\"ion-button\",\"\"]],null,null,null,An.b,An.a)),i.Y(53,1097728,null,0,Rn.a,[[8,\"\"],Ql.a,i.j,i.z],{color:[0,\"color\"],block:[1,\"block\"]},null),(l()(),i._20(-1,0,[\"Sign In\"])),(l()(),i._20(-1,null,[\"\\n  \"])),(l()(),i._20(-1,1,[\"\\n\\n\"])),(l()(),i._20(-1,null,[\"\\n\"]))],function(l,n){l(n,31,0,\"\",\"text\"),l(n,46,0,\"\",\"password\"),l(n,53,0,\"primary\",\"\")},function(l,n){l(n,4,0,i._13(n,5)._hidden,i._13(n,5)._sbPadding),l(n,13,0,i._13(n,14).statusbarPadding,i._13(n,14)._hasRefresher)})},ya)),i.Y(1,49152,null,0,N,[],null,null)],null,null)},{},{},[]),Ca=i.X({encapsulation:2,styles:[],data:{}}),wa=i.V(\"ng-component\",X,function(l){return i._22(0,[(l()(),i.Z(0,0,null,null,1,\"ng-component\",[],null,null,null,function(l){return i._22(0,[(l()(),i._20(-1,null,[\"\\n\"])),(l()(),i.Z(1,0,null,null,10,\"ion-header\",[],null,null,null,null,null)),i.Y(2,16384,null,0,jn.a,[Ql.a,i.j,i.z,[2,fn.a]],null,null),(l()(),i._20(-1,null,[\"\\n  \"])),(l()(),i.Z(4,0,null,null,6,\"ion-navbar\",[[\"class\",\"toolbar\"]],[[8,\"hidden\",0],[2,\"statusbar-padding\",null]],null,null,Fn.b,Fn.a)),i.Y(5,49152,null,0,Pn.a,[Yn.a,[2,fn.a],[2,Ln.a],Ql.a,i.j,i.z],null,null),(l()(),i._20(-1,3,[\"\\n    \"])),(l()(),i.Z(7,0,null,3,2,\"ion-title\",[],null,null,null,vn.b,vn.a)),i.Y(8,49152,null,0,yn.a,[Ql.a,i.j,i.z,[2,kn.a],[2,Pn.a]],null,null),(l()(),i._20(-1,0,[\"Inset Labels\"])),(l()(),i._20(-1,3,[\"\\n  \"])),(l()(),i._20(-1,null,[\"\\n\"])),(l()(),i._20(-1,null,[\"\\n\\n\"])),(l()(),i.Z(13,0,null,null,43,\"ion-content\",[],[[2,\"statusbar-padding\",null],[2,\"has-refresher\",null]],null,null,Cn.b,Cn.a)),i.Y(14,4374528,null,0,wn.a,[Ql.a,on.a,_n.a,i.j,i.z,Yn.a,Zn.a,i.u,[2,fn.a],[2,Ln.a]],null,null),(l()(),i._20(-1,1,[\"\\n  \"])),(l()(),i.Z(16,0,null,1,32,\"ion-list\",[[\"inset\",\"\"]],null,null,null,null,null)),i.Y(17,16384,null,0,en.a,[Ql.a,i.j,i.z,on.a,tn.l,_n.a],null,null),(l()(),i._20(-1,null,[\"\\n\\n    \"])),(l()(),i.Z(19,0,null,null,13,\"ion-item\",[[\"class\",\"item item-block\"]],null,null,null,$l.b,$l.a)),i.Y(20,1097728,null,3,Kl.a,[Jl.a,Ql.a,i.j,i.z,[2,ln.a]],null,null),i._18(335544320,1,{contentLabel:0}),i._18(603979776,2,{_buttons:1}),i._18(603979776,3,{_icons:1}),i.Y(24,16384,null,0,nn.a,[],null,null),(l()(),i._20(-1,2,[\"\\n      \"])),(l()(),i.Z(26,0,null,1,2,\"ion-label\",[],null,null,null,null,null)),i.Y(27,16384,[[1,4]],0,la.a,[Ql.a,i.j,i.z,[8,null],[8,null],[8,null],[8,null]],null,null),(l()(),i._20(-1,null,[\"Username\"])),(l()(),i._20(-1,2,[\"\\n      \"])),(l()(),i.Z(30,0,null,3,1,\"ion-input\",[[\"type\",\"text\"],[\"value\",\"\"]],null,null,null,oa.b,oa.a)),i.Y(31,5423104,null,0,ta.a,[Ql.a,on.a,Jl.a,Yn.a,i.j,i.z,[2,wn.a],[2,Kl.a],[2,A.k],_n.a],{value:[0,\"value\"],type:[1,\"type\"]},null),(l()(),i._20(-1,2,[\"\\n    \"])),(l()(),i._20(-1,null,[\"\\n\\n    \"])),(l()(),i.Z(34,0,null,null,13,\"ion-item\",[[\"class\",\"item item-block\"]],null,null,null,$l.b,$l.a)),i.Y(35,1097728,null,3,Kl.a,[Jl.a,Ql.a,i.j,i.z,[2,ln.a]],null,null),i._18(335544320,4,{contentLabel:0}),i._18(603979776,5,{_buttons:1}),i._18(603979776,6,{_icons:1}),i.Y(39,16384,null,0,nn.a,[],null,null),(l()(),i._20(-1,2,[\"\\n      \"])),(l()(),i.Z(41,0,null,1,2,\"ion-label\",[],null,null,null,null,null)),i.Y(42,16384,[[4,4]],0,la.a,[Ql.a,i.j,i.z,[8,null],[8,null],[8,null],[8,null]],null,null),(l()(),i._20(-1,null,[\"Password\"])),(l()(),i._20(-1,2,[\"\\n      \"])),(l()(),i.Z(45,0,null,3,1,\"ion-input\",[[\"type\",\"password\"],[\"value\",\"\"]],null,null,null,oa.b,oa.a)),i.Y(46,5423104,null,0,ta.a,[Ql.a,on.a,Jl.a,Yn.a,i.j,i.z,[2,wn.a],[2,Kl.a],[2,A.k],_n.a],{value:[0,\"value\"],type:[1,\"type\"]},null),(l()(),i._20(-1,2,[\"\\n    \"])),(l()(),i._20(-1,null,[\"\\n\\n  \"])),(l()(),i._20(-1,1,[\"\\n\\n  \"])),(l()(),i.Z(50,0,null,1,5,\"div\",[[\"padding\",\"\"]],null,null,null,null,null)),(l()(),i._20(-1,null,[\"\\n    \"])),(l()(),i.Z(52,0,null,null,2,\"button\",[[\"block\",\"\"],[\"color\",\"primary\"],[\"ion-button\",\"\"]],null,null,null,An.b,An.a)),i.Y(53,1097728,null,0,Rn.a,[[8,\"\"],Ql.a,i.j,i.z],{color:[0,\"color\"],block:[1,\"block\"]},null),(l()(),i._20(-1,0,[\"Sign In\"])),(l()(),i._20(-1,null,[\"\\n  \"])),(l()(),i._20(-1,1,[\"\\n\"])),(l()(),i._20(-1,null,[\"\\n\"]))],function(l,n){l(n,31,0,\"\",\"text\"),l(n,46,0,\"\",\"password\"),l(n,53,0,\"primary\",\"\")},function(l,n){l(n,4,0,i._13(n,5)._hidden,i._13(n,5)._sbPadding),l(n,13,0,i._13(n,14).statusbarPadding,i._13(n,14)._hasRefresher)})},Ca)),i.Y(1,49152,null,0,X,[],null,null)],null,null)},{},{},[]),La=i.X({encapsulation:2,styles:[],data:{}}),Ia=i.V(\"ng-component\",O,function(l){return i._22(0,[(l()(),i.Z(0,0,null,null,1,\"ng-component\",[],null,null,null,function(l){return i._22(0,[(l()(),i._20(-1,null,[\"\\n\"])),(l()(),i.Z(1,0,null,null,10,\"ion-header\",[],null,null,null,null,null)),i.Y(2,16384,null,0,jn.a,[Ql.a,i.j,i.z,[2,fn.a]],null,null),(l()(),i._20(-1,null,[\"\\n  \"])),(l()(),i.Z(4,0,null,null,6,\"ion-navbar\",[[\"class\",\"toolbar\"]],[[8,\"hidden\",0],[2,\"statusbar-padding\",null]],null,null,Fn.b,Fn.a)),i.Y(5,49152,null,0,Pn.a,[Yn.a,[2,fn.a],[2,Ln.a],Ql.a,i.j,i.z],null,null),(l()(),i._20(-1,3,[\"\\n    \"])),(l()(),i.Z(7,0,null,3,2,\"ion-title\",[],null,null,null,vn.b,vn.a)),i.Y(8,49152,null,0,yn.a,[Ql.a,i.j,i.z,[2,kn.a],[2,Pn.a]],null,null),(l()(),i._20(-1,0,[\"Placeholders\"])),(l()(),i._20(-1,3,[\"\\n  \"])),(l()(),i._20(-1,null,[\"\\n\"])),(l()(),i._20(-1,null,[\"\\n\\n\"])),(l()(),i.Z(13,0,null,null,35,\"ion-content\",[],[[2,\"statusbar-padding\",null],[2,\"has-refresher\",null]],null,null,Cn.b,Cn.a)),i.Y(14,4374528,null,0,wn.a,[Ql.a,on.a,_n.a,i.j,i.z,Yn.a,Zn.a,i.u,[2,fn.a],[2,Ln.a]],null,null),(l()(),i._20(-1,1,[\"\\n\\n  \"])),(l()(),i.Z(16,0,null,1,24,\"ion-list\",[],null,null,null,null,null)),i.Y(17,16384,null,0,en.a,[Ql.a,i.j,i.z,on.a,tn.l,_n.a],null,null),(l()(),i._20(-1,null,[\"\\n\\n    \"])),(l()(),i.Z(19,0,null,null,9,\"ion-item\",[[\"class\",\"item item-block\"]],null,null,null,$l.b,$l.a)),i.Y(20,1097728,null,3,Kl.a,[Jl.a,Ql.a,i.j,i.z,[2,ln.a]],null,null),i._18(335544320,1,{contentLabel:0}),i._18(603979776,2,{_buttons:1}),i._18(603979776,3,{_icons:1}),i.Y(24,16384,null,0,nn.a,[],null,null),(l()(),i._20(-1,2,[\"\\n      \"])),(l()(),i.Z(26,0,null,3,1,\"ion-input\",[[\"placeholder\",\"Username\"],[\"type\",\"text\"]],null,null,null,oa.b,oa.a)),i.Y(27,5423104,null,0,ta.a,[Ql.a,on.a,Jl.a,Yn.a,i.j,i.z,[2,wn.a],[2,Kl.a],[2,A.k],_n.a],{type:[0,\"type\"],placeholder:[1,\"placeholder\"]},null),(l()(),i._20(-1,2,[\"\\n    \"])),(l()(),i._20(-1,null,[\"\\n\\n    \"])),(l()(),i.Z(30,0,null,null,9,\"ion-item\",[[\"class\",\"item item-block\"]],null,null,null,$l.b,$l.a)),i.Y(31,1097728,null,3,Kl.a,[Jl.a,Ql.a,i.j,i.z,[2,ln.a]],null,null),i._18(335544320,4,{contentLabel:0}),i._18(603979776,5,{_buttons:1}),i._18(603979776,6,{_icons:1}),i.Y(35,16384,null,0,nn.a,[],null,null),(l()(),i._20(-1,2,[\"\\n      \"])),(l()(),i.Z(37,0,null,3,1,\"ion-input\",[[\"placeholder\",\"Password\"],[\"type\",\"password\"]],null,null,null,oa.b,oa.a)),i.Y(38,5423104,null,0,ta.a,[Ql.a,on.a,Jl.a,Yn.a,i.j,i.z,[2,wn.a],[2,Kl.a],[2,A.k],_n.a],{type:[0,\"type\"],placeholder:[1,\"placeholder\"]},null),(l()(),i._20(-1,2,[\"\\n    \"])),(l()(),i._20(-1,null,[\"\\n\\n  \"])),(l()(),i._20(-1,1,[\"\\n\\n  \"])),(l()(),i.Z(42,0,null,1,5,\"div\",[[\"padding\",\"\"]],null,null,null,null,null)),(l()(),i._20(-1,null,[\"\\n    \"])),(l()(),i.Z(44,0,null,null,2,\"button\",[[\"block\",\"\"],[\"color\",\"primary\"],[\"ion-button\",\"\"]],null,null,null,An.b,An.a)),i.Y(45,1097728,null,0,Rn.a,[[8,\"\"],Ql.a,i.j,i.z],{color:[0,\"color\"],block:[1,\"block\"]},null),(l()(),i._20(-1,0,[\"Sign In\"])),(l()(),i._20(-1,null,[\"\\n  \"])),(l()(),i._20(-1,1,[\"\\n\\n\"])),(l()(),i._20(-1,null,[\"\\n\"]))],function(l,n){l(n,27,0,\"text\",\"Username\"),l(n,38,0,\"password\",\"Password\"),l(n,45,0,\"primary\",\"\")},function(l,n){l(n,4,0,i._13(n,5)._hidden,i._13(n,5)._sbPadding),l(n,13,0,i._13(n,14).statusbarPadding,i._13(n,14)._hasRefresher)})},La)),i.Y(1,49152,null,0,O,[],null,null)],null,null)},{},{},[]),xa=i.X({encapsulation:2,styles:[],data:{}}),Ta=i.V(\"ng-component\",E,function(l){return i._22(0,[(l()(),i.Z(0,0,null,null,1,\"ng-component\",[],null,null,null,function(l){return i._22(0,[(l()(),i._20(-1,null,[\"\\n\"])),(l()(),i.Z(1,0,null,null,10,\"ion-header\",[],null,null,null,null,null)),i.Y(2,16384,null,0,jn.a,[Ql.a,i.j,i.z,[2,fn.a]],null,null),(l()(),i._20(-1,null,[\"\\n  \"])),(l()(),i.Z(4,0,null,null,6,\"ion-navbar\",[[\"class\",\"toolbar\"]],[[8,\"hidden\",0],[2,\"statusbar-padding\",null]],null,null,Fn.b,Fn.a)),i.Y(5,49152,null,0,Pn.a,[Yn.a,[2,fn.a],[2,Ln.a],Ql.a,i.j,i.z],null,null),(l()(),i._20(-1,3,[\"\\n    \"])),(l()(),i.Z(7,0,null,3,2,\"ion-title\",[],null,null,null,vn.b,vn.a)),i.Y(8,49152,null,0,yn.a,[Ql.a,i.j,i.z,[2,kn.a],[2,Pn.a]],null,null),(l()(),i._20(-1,0,[\"Stacked Labels\"])),(l()(),i._20(-1,3,[\"\\n  \"])),(l()(),i._20(-1,null,[\"\\n\"])),(l()(),i._20(-1,null,[\"\\n\\n\"])),(l()(),i.Z(13,0,null,null,43,\"ion-content\",[],[[2,\"statusbar-padding\",null],[2,\"has-refresher\",null]],null,null,Cn.b,Cn.a)),i.Y(14,4374528,null,0,wn.a,[Ql.a,on.a,_n.a,i.j,i.z,Yn.a,Zn.a,i.u,[2,fn.a],[2,Ln.a]],null,null),(l()(),i._20(-1,1,[\"\\n  \"])),(l()(),i.Z(16,0,null,1,32,\"ion-list\",[],null,null,null,null,null)),i.Y(17,16384,null,0,en.a,[Ql.a,i.j,i.z,on.a,tn.l,_n.a],null,null),(l()(),i._20(-1,null,[\"\\n\\n    \"])),(l()(),i.Z(19,0,null,null,13,\"ion-item\",[[\"class\",\"item item-block\"]],null,null,null,$l.b,$l.a)),i.Y(20,1097728,null,3,Kl.a,[Jl.a,Ql.a,i.j,i.z,[2,ln.a]],null,null),i._18(335544320,1,{contentLabel:0}),i._18(603979776,2,{_buttons:1}),i._18(603979776,3,{_icons:1}),i.Y(24,16384,null,0,nn.a,[],null,null),(l()(),i._20(-1,2,[\"\\n      \"])),(l()(),i.Z(26,0,null,1,2,\"ion-label\",[[\"stacked\",\"\"]],null,null,null,null,null)),i.Y(27,16384,[[1,4]],0,la.a,[Ql.a,i.j,i.z,[8,null],[8,\"\"],[8,null],[8,null]],null,null),(l()(),i._20(-1,null,[\"Username\"])),(l()(),i._20(-1,2,[\"\\n      \"])),(l()(),i.Z(30,0,null,3,1,\"ion-input\",[[\"type\",\"text\"]],null,null,null,oa.b,oa.a)),i.Y(31,5423104,null,0,ta.a,[Ql.a,on.a,Jl.a,Yn.a,i.j,i.z,[2,wn.a],[2,Kl.a],[2,A.k],_n.a],{type:[0,\"type\"]},null),(l()(),i._20(-1,2,[\"\\n    \"])),(l()(),i._20(-1,null,[\"\\n\\n    \"])),(l()(),i.Z(34,0,null,null,13,\"ion-item\",[[\"class\",\"item item-block\"]],null,null,null,$l.b,$l.a)),i.Y(35,1097728,null,3,Kl.a,[Jl.a,Ql.a,i.j,i.z,[2,ln.a]],null,null),i._18(335544320,4,{contentLabel:0}),i._18(603979776,5,{_buttons:1}),i._18(603979776,6,{_icons:1}),i.Y(39,16384,null,0,nn.a,[],null,null),(l()(),i._20(-1,2,[\"\\n      \"])),(l()(),i.Z(41,0,null,1,2,\"ion-label\",[[\"stacked\",\"\"]],null,null,null,null,null)),i.Y(42,16384,[[4,4]],0,la.a,[Ql.a,i.j,i.z,[8,null],[8,\"\"],[8,null],[8,null]],null,null),(l()(),i._20(-1,null,[\"Password\"])),(l()(),i._20(-1,2,[\"\\n      \"])),(l()(),i.Z(45,0,null,3,1,\"ion-input\",[[\"type\",\"password\"]],null,null,null,oa.b,oa.a)),i.Y(46,5423104,null,0,ta.a,[Ql.a,on.a,Jl.a,Yn.a,i.j,i.z,[2,wn.a],[2,Kl.a],[2,A.k],_n.a],{type:[0,\"type\"]},null),(l()(),i._20(-1,2,[\"\\n    \"])),(l()(),i._20(-1,null,[\"\\n\\n  \"])),(l()(),i._20(-1,1,[\"\\n\\n  \"])),(l()(),i.Z(50,0,null,1,5,\"div\",[[\"padding\",\"\"]],null,null,null,null,null)),(l()(),i._20(-1,null,[\"\\n    \"])),(l()(),i.Z(52,0,null,null,2,\"button\",[[\"block\",\"\"],[\"color\",\"primary\"],[\"ion-button\",\"\"]],null,null,null,An.b,An.a)),i.Y(53,1097728,null,0,Rn.a,[[8,\"\"],Ql.a,i.j,i.z],{color:[0,\"color\"],block:[1,\"block\"]},null),(l()(),i._20(-1,0,[\"Sign In\"])),(l()(),i._20(-1,null,[\"\\n  \"])),(l()(),i._20(-1,1,[\"\\n\\n\"])),(l()(),i._20(-1,null,[\"\\n\"]))],function(l,n){l(n,31,0,\"text\"),l(n,46,0,\"password\"),l(n,53,0,\"primary\",\"\")},function(l,n){l(n,4,0,i._13(n,5)._hidden,i._13(n,5)._sbPadding),l(n,13,0,i._13(n,14).statusbarPadding,i._13(n,14)._hasRefresher)})},xa)),i.Y(1,49152,null,0,E,[],null,null)],null,null)},{},{},[]),Sa=i.X({encapsulation:2,styles:[],data:{}}),Ma=i.V(\"ng-component\",U,function(l){return i._22(0,[(l()(),i.Z(0,0,null,null,1,\"ng-component\",[],null,null,null,function(l){return i._22(0,[(l()(),i._20(-1,null,[\"\\n\"])),(l()(),i.Z(1,0,null,null,10,\"ion-header\",[],null,null,null,null,null)),i.Y(2,16384,null,0,jn.a,[Ql.a,i.j,i.z,[2,fn.a]],null,null),(l()(),i._20(-1,null,[\"\\n  \"])),(l()(),i.Z(4,0,null,null,6,\"ion-navbar\",[[\"class\",\"toolbar\"]],[[8,\"hidden\",0],[2,\"statusbar-padding\",null]],null,null,Fn.b,Fn.a)),i.Y(5,49152,null,0,Pn.a,[Yn.a,[2,fn.a],[2,Ln.a],Ql.a,i.j,i.z],null,null),(l()(),i._20(-1,3,[\"\\n    \"])),(l()(),i.Z(7,0,null,3,2,\"ion-title\",[],null,null,null,vn.b,vn.a)),i.Y(8,49152,null,0,yn.a,[Ql.a,i.j,i.z,[2,kn.a],[2,Pn.a]],null,null),(l()(),i._20(-1,0,[\"Avatar List\"])),(l()(),i._20(-1,3,[\"\\n  \"])),(l()(),i._20(-1,null,[\"\\n\"])),(l()(),i._20(-1,null,[\"\\n\\n\"])),(l()(),i.Z(13,0,null,null,326,\"ion-content\",[[\"class\",\"list-avatar-page\"]],[[2,\"statusbar-padding\",null],[2,\"has-refresher\",null]],null,null,Cn.b,Cn.a)),i.Y(14,4374528,null,0,wn.a,[Ql.a,on.a,_n.a,i.j,i.z,Yn.a,Zn.a,i.u,[2,fn.a],[2,Ln.a]],null,null),(l()(),i._20(-1,1,[\"\\n  \"])),(l()(),i.Z(16,0,null,1,106,\"ion-list\",[],null,null,null,null,null)),i.Y(17,16384,null,0,en.a,[Ql.a,i.j,i.z,on.a,tn.l,_n.a],null,null),(l()(),i._20(-1,null,[\"\\n\\n    \"])),(l()(),i.Z(19,0,null,null,6,\"ion-list-header\",[[\"class\",\"item\"]],null,null,null,$l.b,$l.a)),i.Y(20,1097728,null,3,Kl.a,[Jl.a,Ql.a,i.j,i.z,[2,ln.a]],null,null),i._18(335544320,1,{contentLabel:0}),i._18(603979776,2,{_buttons:1}),i._18(603979776,3,{_icons:1}),i.Y(24,16384,null,0,Qu.a,[Ql.a,i.z,i.j,[8,null]],null,null),(l()(),i._20(-1,2,[\"Today\"])),(l()(),i._20(-1,null,[\"\\n\\n    \"])),(l()(),i.Z(27,0,null,null,22,\"ion-item\",[[\"class\",\"item item-block\"]],null,null,null,$l.b,$l.a)),i.Y(28,1097728,null,3,Kl.a,[Jl.a,Ql.a,i.j,i.z,[2,ln.a]],null,null),i._18(335544320,4,{contentLabel:0}),i._18(603979776,5,{_buttons:1}),i._18(603979776,6,{_icons:1}),i.Y(32,16384,null,0,nn.a,[],null,null),(l()(),i._20(-1,2,[\"\\n      \"])),(l()(),i.Z(34,0,null,0,4,\"ion-avatar\",[[\"item-start\",\"\"]],null,null,null,null,null)),i.Y(35,16384,null,0,Iu.a,[],null,null),(l()(),i._20(-1,null,[\"\\n        \"])),(l()(),i.Z(37,0,null,null,0,\"img\",[[\"src\",\"assets/img/avatar-ts-woody.png\"]],null,null,null,null,null)),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i._20(-1,2,[\"\\n      \"])),(l()(),i.Z(40,0,null,2,1,\"h2\",[],null,null,null,null,null)),(l()(),i._20(-1,null,[\"Woody\"])),(l()(),i._20(-1,2,[\"\\n      \"])),(l()(),i.Z(43,0,null,2,1,\"p\",[],null,null,null,null,null)),(l()(),i._20(-1,null,[\"This town ain't big enough for the two of us!\"])),(l()(),i._20(-1,2,[\"\\n      \"])),(l()(),i.Z(46,0,null,4,2,\"ion-note\",[[\"item-end\",\"\"]],null,null,null,null,null)),i.Y(47,16384,null,0,Su.a,[Ql.a,i.j,i.z],null,null),(l()(),i._20(-1,null,[\"3:43 pm\"])),(l()(),i._20(-1,2,[\"\\n    \"])),(l()(),i._20(-1,null,[\"\\n\\n    \"])),(l()(),i.Z(51,0,null,null,22,\"ion-item\",[[\"class\",\"item item-block\"]],null,null,null,$l.b,$l.a)),i.Y(52,1097728,null,3,Kl.a,[Jl.a,Ql.a,i.j,i.z,[2,ln.a]],null,null),i._18(335544320,7,{contentLabel:0}),i._18(603979776,8,{_buttons:1}),i._18(603979776,9,{_icons:1}),i.Y(56,16384,null,0,nn.a,[],null,null),(l()(),i._20(-1,2,[\"\\n      \"])),(l()(),i.Z(58,0,null,0,4,\"ion-avatar\",[[\"item-start\",\"\"]],null,null,null,null,null)),i.Y(59,16384,null,0,Iu.a,[],null,null),(l()(),i._20(-1,null,[\"\\n        \"])),(l()(),i.Z(61,0,null,null,0,\"img\",[[\"src\",\"assets/img/avatar-ts-buzz.png\"]],null,null,null,null,null)),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i._20(-1,2,[\"\\n      \"])),(l()(),i.Z(64,0,null,2,1,\"h2\",[],null,null,null,null,null)),(l()(),i._20(-1,null,[\"Buzz Lightyear\"])),(l()(),i._20(-1,2,[\"\\n      \"])),(l()(),i.Z(67,0,null,2,1,\"p\",[],null,null,null,null,null)),(l()(),i._20(-1,null,[\"My eyeballs could have been sucked from their sockets!\"])),(l()(),i._20(-1,2,[\"\\n      \"])),(l()(),i.Z(70,0,null,4,2,\"ion-note\",[[\"item-end\",\"\"]],null,null,null,null,null)),i.Y(71,16384,null,0,Su.a,[Ql.a,i.j,i.z],null,null),(l()(),i._20(-1,null,[\"1:12 pm\"])),(l()(),i._20(-1,2,[\"\\n    \"])),(l()(),i._20(-1,null,[\"\\n\\n    \"])),(l()(),i.Z(75,0,null,null,22,\"ion-item\",[[\"class\",\"item item-block\"]],null,null,null,$l.b,$l.a)),i.Y(76,1097728,null,3,Kl.a,[Jl.a,Ql.a,i.j,i.z,[2,ln.a]],null,null),i._18(335544320,10,{contentLabel:0}),i._18(603979776,11,{_buttons:1}),i._18(603979776,12,{_icons:1}),i.Y(80,16384,null,0,nn.a,[],null,null),(l()(),i._20(-1,2,[\"\\n      \"])),(l()(),i.Z(82,0,null,0,4,\"ion-avatar\",[[\"item-start\",\"\"]],null,null,null,null,null)),i.Y(83,16384,null,0,Iu.a,[],null,null),(l()(),i._20(-1,null,[\"\\n        \"])),(l()(),i.Z(85,0,null,null,0,\"img\",[[\"src\",\"assets/img/avatar-ts-jessie.png\"]],null,null,null,null,null)),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i._20(-1,2,[\"\\n      \"])),(l()(),i.Z(88,0,null,2,1,\"h2\",[],null,null,null,null,null)),(l()(),i._20(-1,null,[\"Jessie\"])),(l()(),i._20(-1,2,[\"\\n      \"])),(l()(),i.Z(91,0,null,2,1,\"p\",[],null,null,null,null,null)),(l()(),i._20(-1,null,[\"Well aren't you just the sweetest space toy I ever did meet!\"])),(l()(),i._20(-1,2,[\"\\n      \"])),(l()(),i.Z(94,0,null,4,2,\"ion-note\",[[\"item-end\",\"\"]],null,null,null,null,null)),i.Y(95,16384,null,0,Su.a,[Ql.a,i.j,i.z],null,null),(l()(),i._20(-1,null,[\"10:03 am\"])),(l()(),i._20(-1,2,[\"\\n    \"])),(l()(),i._20(-1,null,[\"\\n\\n    \"])),(l()(),i.Z(99,0,null,null,22,\"ion-item\",[[\"class\",\"item item-block\"]],null,null,null,$l.b,$l.a)),i.Y(100,1097728,null,3,Kl.a,[Jl.a,Ql.a,i.j,i.z,[2,ln.a]],null,null),i._18(335544320,13,{contentLabel:0}),i._18(603979776,14,{_buttons:1}),i._18(603979776,15,{_icons:1}),i.Y(104,16384,null,0,nn.a,[],null,null),(l()(),i._20(-1,2,[\"\\n      \"])),(l()(),i.Z(106,0,null,0,4,\"ion-avatar\",[[\"item-start\",\"\"]],null,null,null,null,null)),i.Y(107,16384,null,0,Iu.a,[],null,null),(l()(),i._20(-1,null,[\"\\n        \"])),(l()(),i.Z(109,0,null,null,0,\"img\",[[\"src\",\"assets/img/avatar-ts-potatohead.png\"]],null,null,null,null,null)),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i._20(-1,2,[\"\\n      \"])),(l()(),i.Z(112,0,null,2,1,\"h2\",[],null,null,null,null,null)),(l()(),i._20(-1,null,[\"Mr. Potato Head\"])),(l()(),i._20(-1,2,[\"\\n      \"])),(l()(),i.Z(115,0,null,2,1,\"p\",[],null,null,null,null,null)),(l()(),i._20(-1,null,[\"You're not turning me into a Mashed Potato.\"])),(l()(),i._20(-1,2,[\"\\n      \"])),(l()(),i.Z(118,0,null,4,2,\"ion-note\",[[\"item-end\",\"\"]],null,null,null,null,null)),i.Y(119,16384,null,0,Su.a,[Ql.a,i.j,i.z],null,null),(l()(),i._20(-1,null,[\"5:47 am\"])),(l()(),i._20(-1,2,[\"\\n    \"])),(l()(),i._20(-1,null,[\"\\n\\n  \"])),(l()(),i._20(-1,1,[\"\\n\\n  \"])),(l()(),i.Z(124,0,null,1,106,\"ion-list\",[],null,null,null,null,null)),i.Y(125,16384,null,0,en.a,[Ql.a,i.j,i.z,on.a,tn.l,_n.a],null,null),(l()(),i._20(-1,null,[\"\\n\\n    \"])),(l()(),i.Z(127,0,null,null,6,\"ion-list-header\",[[\"class\",\"item\"]],null,null,null,$l.b,$l.a)),i.Y(128,1097728,null,3,Kl.a,[Jl.a,Ql.a,i.j,i.z,[2,ln.a]],null,null),i._18(335544320,16,{contentLabel:0}),i._18(603979776,17,{_buttons:1}),i._18(603979776,18,{_icons:1}),i.Y(132,16384,null,0,Qu.a,[Ql.a,i.z,i.j,[8,null]],null,null),(l()(),i._20(-1,2,[\"Yesterday\"])),(l()(),i._20(-1,null,[\"\\n\\n    \"])),(l()(),i.Z(135,0,null,null,22,\"ion-item\",[[\"class\",\"item item-block\"]],null,null,null,$l.b,$l.a)),i.Y(136,1097728,null,3,Kl.a,[Jl.a,Ql.a,i.j,i.z,[2,ln.a]],null,null),i._18(335544320,19,{contentLabel:0}),i._18(603979776,20,{_buttons:1}),i._18(603979776,21,{_icons:1}),i.Y(140,16384,null,0,nn.a,[],null,null),(l()(),i._20(-1,2,[\"\\n      \"])),(l()(),i.Z(142,0,null,0,4,\"ion-avatar\",[[\"item-start\",\"\"]],null,null,null,null,null)),i.Y(143,16384,null,0,Iu.a,[],null,null),(l()(),i._20(-1,null,[\"\\n        \"])),(l()(),i.Z(145,0,null,null,0,\"img\",[[\"src\",\"assets/img/avatar-ts-hamm.png\"]],null,null,null,null,null)),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i._20(-1,2,[\"\\n      \"])),(l()(),i.Z(148,0,null,2,1,\"h2\",[],null,null,null,null,null)),(l()(),i._20(-1,null,[\"Hamm\"])),(l()(),i._20(-1,2,[\"\\n      \"])),(l()(),i.Z(151,0,null,2,1,\"p\",[],null,null,null,null,null)),(l()(),i._20(-1,null,[\"You heard of Kung Fu? Well get ready for pork chop.\"])),(l()(),i._20(-1,2,[\"\\n      \"])),(l()(),i.Z(154,0,null,4,2,\"ion-note\",[[\"item-end\",\"\"]],null,null,null,null,null)),i.Y(155,16384,null,0,Su.a,[Ql.a,i.j,i.z],null,null),(l()(),i._20(-1,null,[\"11:11 pm\"])),(l()(),i._20(-1,2,[\"\\n    \"])),(l()(),i._20(-1,null,[\"\\n\\n    \"])),(l()(),i.Z(159,0,null,null,22,\"ion-item\",[[\"class\",\"item item-block\"]],null,null,null,$l.b,$l.a)),i.Y(160,1097728,null,3,Kl.a,[Jl.a,Ql.a,i.j,i.z,[2,ln.a]],null,null),i._18(335544320,22,{contentLabel:0}),i._18(603979776,23,{_buttons:1}),i._18(603979776,24,{_icons:1}),i.Y(164,16384,null,0,nn.a,[],null,null),(l()(),i._20(-1,2,[\"\\n      \"])),(l()(),i.Z(166,0,null,0,4,\"ion-avatar\",[[\"item-start\",\"\"]],null,null,null,null,null)),i.Y(167,16384,null,0,Iu.a,[],null,null),(l()(),i._20(-1,null,[\"\\n        \"])),(l()(),i.Z(169,0,null,null,0,\"img\",[[\"src\",\"assets/img/avatar-ts-slinky.png\"]],null,null,null,null,null)),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i._20(-1,2,[\"\\n      \"])),(l()(),i.Z(172,0,null,2,1,\"h2\",[],null,null,null,null,null)),(l()(),i._20(-1,null,[\"Slinky Dog\"])),(l()(),i._20(-1,2,[\"\\n      \"])),(l()(),i.Z(175,0,null,2,1,\"p\",[],null,null,null,null,null)),(l()(),i._20(-1,null,[\"I may not be a smart dog, but I know what roadkill is.\"])),(l()(),i._20(-1,2,[\"\\n      \"])),(l()(),i.Z(178,0,null,4,2,\"ion-note\",[[\"item-end\",\"\"]],null,null,null,null,null)),i.Y(179,16384,null,0,Su.a,[Ql.a,i.j,i.z],null,null),(l()(),i._20(-1,null,[\"8:54 pm\"])),(l()(),i._20(-1,2,[\"\\n    \"])),(l()(),i._20(-1,null,[\"\\n\\n    \"])),(l()(),i.Z(183,0,null,null,22,\"ion-item\",[[\"class\",\"item item-block\"]],null,null,null,$l.b,$l.a)),i.Y(184,1097728,null,3,Kl.a,[Jl.a,Ql.a,i.j,i.z,[2,ln.a]],null,null),i._18(335544320,25,{contentLabel:0}),i._18(603979776,26,{_buttons:1}),i._18(603979776,27,{_icons:1}),i.Y(188,16384,null,0,nn.a,[],null,null),(l()(),i._20(-1,2,[\"\\n      \"])),(l()(),i.Z(190,0,null,0,4,\"ion-avatar\",[[\"item-start\",\"\"]],null,null,null,null,null)),i.Y(191,16384,null,0,Iu.a,[],null,null),(l()(),i._20(-1,null,[\"\\n        \"])),(l()(),i.Z(193,0,null,null,0,\"img\",[[\"src\",\"assets/img/avatar-ts-rex.png\"]],null,null,null,null,null)),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i._20(-1,2,[\"\\n      \"])),(l()(),i.Z(196,0,null,2,1,\"h2\",[],null,null,null,null,null)),(l()(),i._20(-1,null,[\"Rex\"])),(l()(),i._20(-1,2,[\"\\n      \"])),(l()(),i.Z(199,0,null,2,1,\"p\",[],null,null,null,null,null)),(l()(),i._20(-1,null,[\"Were you scared? Tell me honestly.\"])),(l()(),i._20(-1,2,[\"\\n      \"])),(l()(),i.Z(202,0,null,4,2,\"ion-note\",[[\"item-end\",\"\"]],null,null,null,null,null)),i.Y(203,16384,null,0,Su.a,[Ql.a,i.j,i.z],null,null),(l()(),i._20(-1,null,[\"7:22 am\"])),(l()(),i._20(-1,2,[\"\\n    \"])),(l()(),i._20(-1,null,[\"\\n\\n    \"])),(l()(),i.Z(207,0,null,null,22,\"ion-item\",[[\"class\",\"item item-block\"]],null,null,null,$l.b,$l.a)),i.Y(208,1097728,null,3,Kl.a,[Jl.a,Ql.a,i.j,i.z,[2,ln.a]],null,null),i._18(335544320,28,{contentLabel:0}),i._18(603979776,29,{_buttons:1}),i._18(603979776,30,{_icons:1}),i.Y(212,16384,null,0,nn.a,[],null,null),(l()(),i._20(-1,2,[\"\\n      \"])),(l()(),i.Z(214,0,null,0,4,\"ion-avatar\",[[\"item-start\",\"\"]],null,null,null,null,null)),i.Y(215,16384,null,0,Iu.a,[],null,null),(l()(),i._20(-1,null,[\"\\n        \"])),(l()(),i.Z(217,0,null,null,0,\"img\",[[\"src\",\"assets/img/avatar-ts-bullseye.png\"]],null,null,null,null,null)),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i._20(-1,2,[\"\\n      \"])),(l()(),i.Z(220,0,null,2,1,\"h2\",[],null,null,null,null,null)),(l()(),i._20(-1,null,[\"Bullseye\"])),(l()(),i._20(-1,2,[\"\\n      \"])),(l()(),i.Z(223,0,null,2,1,\"p\",[],null,null,null,null,null)),(l()(),i._20(-1,null,[\"Neigh!\"])),(l()(),i._20(-1,2,[\"\\n      \"])),(l()(),i.Z(226,0,null,4,2,\"ion-note\",[[\"item-end\",\"\"]],null,null,null,null,null)),i.Y(227,16384,null,0,Su.a,[Ql.a,i.j,i.z],null,null),(l()(),i._20(-1,null,[\"2:08 am\"])),(l()(),i._20(-1,2,[\"\\n    \"])),(l()(),i._20(-1,null,[\"\\n\\n  \"])),(l()(),i._20(-1,1,[\"\\n\\n  \"])),(l()(),i.Z(232,0,null,1,106,\"ion-list\",[],null,null,null,null,null)),i.Y(233,16384,null,0,en.a,[Ql.a,i.j,i.z,on.a,tn.l,_n.a],null,null),(l()(),i._20(-1,null,[\"\\n\\n    \"])),(l()(),i.Z(235,0,null,null,6,\"ion-list-header\",[[\"class\",\"item\"]],null,null,null,$l.b,$l.a)),i.Y(236,1097728,null,3,Kl.a,[Jl.a,Ql.a,i.j,i.z,[2,ln.a]],null,null),i._18(335544320,31,{contentLabel:0}),i._18(603979776,32,{_buttons:1}),i._18(603979776,33,{_icons:1}),i.Y(240,16384,null,0,Qu.a,[Ql.a,i.z,i.j,[8,null]],null,null),(l()(),i._20(-1,2,[\"Last Week\"])),(l()(),i._20(-1,null,[\"\\n\\n    \"])),(l()(),i.Z(243,0,null,null,22,\"ion-item\",[[\"class\",\"item item-block\"]],null,null,null,$l.b,$l.a)),i.Y(244,1097728,null,3,Kl.a,[Jl.a,Ql.a,i.j,i.z,[2,ln.a]],null,null),i._18(335544320,34,{contentLabel:0}),i._18(603979776,35,{_buttons:1}),i._18(603979776,36,{_icons:1}),i.Y(248,16384,null,0,nn.a,[],null,null),(l()(),i._20(-1,2,[\"\\n      \"])),(l()(),i.Z(250,0,null,0,4,\"ion-avatar\",[[\"item-start\",\"\"]],null,null,null,null,null)),i.Y(251,16384,null,0,Iu.a,[],null,null),(l()(),i._20(-1,null,[\"\\n        \"])),(l()(),i.Z(253,0,null,null,0,\"img\",[[\"src\",\"assets/img/avatar-ts-barbie.png\"]],null,null,null,null,null)),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i._20(-1,2,[\"\\n      \"])),(l()(),i.Z(256,0,null,2,1,\"h2\",[],null,null,null,null,null)),(l()(),i._20(-1,null,[\"Barbie\"])),(l()(),i._20(-1,2,[\"\\n      \"])),(l()(),i.Z(259,0,null,2,1,\"p\",[],null,null,null,null,null)),(l()(),i._20(-1,null,[\"So, who's ready for Ken's dream tour?\"])),(l()(),i._20(-1,2,[\"\\n      \"])),(l()(),i.Z(262,0,null,4,2,\"ion-note\",[[\"item-end\",\"\"]],null,null,null,null,null)),i.Y(263,16384,null,0,Su.a,[Ql.a,i.j,i.z],null,null),(l()(),i._20(-1,null,[\"Sun\"])),(l()(),i._20(-1,2,[\"\\n    \"])),(l()(),i._20(-1,null,[\"\\n\\n    \"])),(l()(),i.Z(267,0,null,null,22,\"ion-item\",[[\"class\",\"item item-block\"]],null,null,null,$l.b,$l.a)),i.Y(268,1097728,null,3,Kl.a,[Jl.a,Ql.a,i.j,i.z,[2,ln.a]],null,null),i._18(335544320,37,{contentLabel:0}),i._18(603979776,38,{_buttons:1}),i._18(603979776,39,{_icons:1}),i.Y(272,16384,null,0,nn.a,[],null,null),(l()(),i._20(-1,2,[\"\\n      \"])),(l()(),i.Z(274,0,null,0,4,\"ion-avatar\",[[\"item-start\",\"\"]],null,null,null,null,null)),i.Y(275,16384,null,0,Iu.a,[],null,null),(l()(),i._20(-1,null,[\"\\n        \"])),(l()(),i.Z(277,0,null,null,0,\"img\",[[\"src\",\"assets/img/avatar-ts-squeeze.png\"]],null,null,null,null,null)),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i._20(-1,2,[\"\\n      \"])),(l()(),i.Z(280,0,null,2,1,\"h2\",[],null,null,null,null,null)),(l()(),i._20(-1,null,[\"Squeeze\"])),(l()(),i._20(-1,2,[\"\\n      \"])),(l()(),i.Z(283,0,null,2,1,\"p\",[],null,null,null,null,null)),(l()(),i._20(-1,null,[\"The claw is our master.\"])),(l()(),i._20(-1,2,[\"\\n      \"])),(l()(),i.Z(286,0,null,4,2,\"ion-note\",[[\"item-end\",\"\"]],null,null,null,null,null)),i.Y(287,16384,null,0,Su.a,[Ql.a,i.j,i.z],null,null),(l()(),i._20(-1,null,[\"Fri\"])),(l()(),i._20(-1,2,[\"\\n    \"])),(l()(),i._20(-1,null,[\"\\n\\n    \"])),(l()(),i.Z(291,0,null,null,22,\"ion-item\",[[\"class\",\"item item-block\"]],null,null,null,$l.b,$l.a)),i.Y(292,1097728,null,3,Kl.a,[Jl.a,Ql.a,i.j,i.z,[2,ln.a]],null,null),i._18(335544320,40,{contentLabel:0}),i._18(603979776,41,{_buttons:1}),i._18(603979776,42,{_icons:1}),i.Y(296,16384,null,0,nn.a,[],null,null),(l()(),i._20(-1,2,[\"\\n      \"])),(l()(),i.Z(298,0,null,0,4,\"ion-avatar\",[[\"item-start\",\"\"]],null,null,null,null,null)),i.Y(299,16384,null,0,Iu.a,[],null,null),(l()(),i._20(-1,null,[\"\\n        \"])),(l()(),i.Z(301,0,null,null,0,\"img\",[[\"src\",\"assets/img/avatar-ts-sarge.png\"]],null,null,null,null,null)),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i._20(-1,2,[\"\\n      \"])),(l()(),i.Z(304,0,null,2,1,\"h2\",[],null,null,null,null,null)),(l()(),i._20(-1,null,[\"Sarge\"])),(l()(),i._20(-1,2,[\"\\n      \"])),(l()(),i.Z(307,0,null,2,1,\"p\",[],null,null,null,null,null)),(l()(),i._20(-1,null,[\"Code Red, repeat: We're at Code Red!\"])),(l()(),i._20(-1,2,[\"\\n      \"])),(l()(),i.Z(310,0,null,4,2,\"ion-note\",[[\"item-end\",\"\"]],null,null,null,null,null)),i.Y(311,16384,null,0,Su.a,[Ql.a,i.j,i.z],null,null),(l()(),i._20(-1,null,[\"Wed\"])),(l()(),i._20(-1,2,[\"\\n    \"])),(l()(),i._20(-1,null,[\"\\n\\n    \"])),(l()(),i.Z(315,0,null,null,22,\"ion-item\",[[\"class\",\"item item-block\"]],null,null,null,$l.b,$l.a)),i.Y(316,1097728,null,3,Kl.a,[Jl.a,Ql.a,i.j,i.z,[2,ln.a]],null,null),i._18(335544320,43,{contentLabel:0}),i._18(603979776,44,{_buttons:1}),i._18(603979776,45,{_icons:1}),i.Y(320,16384,null,0,nn.a,[],null,null),(l()(),i._20(-1,2,[\"\\n      \"])),(l()(),i.Z(322,0,null,0,4,\"ion-avatar\",[[\"item-start\",\"\"]],null,null,null,null,null)),i.Y(323,16384,null,0,Iu.a,[],null,null),(l()(),i._20(-1,null,[\"\\n        \"])),(l()(),i.Z(325,0,null,null,0,\"img\",[[\"src\",\"assets/img/avatar-ts-bopeep.png\"]],null,null,null,null,null)),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i._20(-1,2,[\"\\n      \"])),(l()(),i.Z(328,0,null,2,1,\"h2\",[],null,null,null,null,null)),(l()(),i._20(-1,null,[\"Bo Peep\"])),(l()(),i._20(-1,2,[\"\\n      \"])),(l()(),i.Z(331,0,null,2,1,\"p\",[],null,null,null,null,null)),(l()(),i._20(-1,null,[\"What would you say if I get someone else to watch the sheep for me tonight?\"])),(l()(),i._20(-1,2,[\"\\n      \"])),(l()(),i.Z(334,0,null,4,2,\"ion-note\",[[\"item-end\",\"\"]],null,null,null,null,null)),i.Y(335,16384,null,0,Su.a,[Ql.a,i.j,i.z],null,null),(l()(),i._20(-1,null,[\"Mon\"])),(l()(),i._20(-1,2,[\"\\n    \"])),(l()(),i._20(-1,null,[\"\\n\\n  \"])),(l()(),i._20(-1,1,[\"\\n\\n\"])),(l()(),i._20(-1,null,[\"\\n\"]))],null,function(l,n){l(n,4,0,i._13(n,5)._hidden,i._13(n,5)._sbPadding),l(n,13,0,i._13(n,14).statusbarPadding,i._13(n,14)._hasRefresher)})},Sa)),i.Y(1,49152,null,0,U,[],null,null)],null,null)},{},{},[]),Ba=i.X({encapsulation:2,styles:[],data:{}}),Fa=i.V(\"ng-component\",W,function(l){return i._22(0,[(l()(),i.Z(0,0,null,null,1,\"ng-component\",[],null,null,null,function(l){return i._22(0,[(l()(),i._20(-1,null,[\"\\n\"])),(l()(),i.Z(1,0,null,null,10,\"ion-header\",[],null,null,null,null,null)),i.Y(2,16384,null,0,jn.a,[Ql.a,i.j,i.z,[2,fn.a]],null,null),(l()(),i._20(-1,null,[\"\\n  \"])),(l()(),i.Z(4,0,null,null,6,\"ion-navbar\",[[\"class\",\"toolbar\"]],[[8,\"hidden\",0],[2,\"statusbar-padding\",null]],null,null,Fn.b,Fn.a)),i.Y(5,49152,null,0,Pn.a,[Yn.a,[2,fn.a],[2,Ln.a],Ql.a,i.j,i.z],null,null),(l()(),i._20(-1,3,[\"\\n    \"])),(l()(),i.Z(7,0,null,3,2,\"ion-title\",[],null,null,null,vn.b,vn.a)),i.Y(8,49152,null,0,yn.a,[Ql.a,i.j,i.z,[2,kn.a],[2,Pn.a]],null,null),(l()(),i._20(-1,0,[\"Lists\"])),(l()(),i._20(-1,3,[\"\\n  \"])),(l()(),i._20(-1,null,[\"\\n\"])),(l()(),i._20(-1,null,[\"\\n\\n\"])),(l()(),i.Z(13,0,null,null,9,\"ion-content\",[],[[2,\"statusbar-padding\",null],[2,\"has-refresher\",null]],null,null,Cn.b,Cn.a)),i.Y(14,4374528,null,0,wn.a,[Ql.a,on.a,_n.a,i.j,i.z,Yn.a,Zn.a,i.u,[2,fn.a],[2,Ln.a]],null,null),(l()(),i._20(-1,1,[\"\\n  \"])),(l()(),i.Z(16,0,null,1,5,\"ion-list\",[],null,null,null,null,null)),i.Y(17,16384,null,0,en.a,[Ql.a,i.j,i.z,on.a,tn.l,_n.a],null,null),(l()(),i._20(-1,null,[\"\\n    \"])),(l()(),i.U(16777216,null,null,1,null,function(l){return i._22(0,[(l()(),i.Z(0,0,null,null,6,\"button\",[[\"class\",\"item item-block\"],[\"ion-item\",\"\"]],null,[[null,\"click\"]],function(l,n,u){var a=!0;return\"click\"===n&&(a=!1!==l.component.itemSelected(l.context.$implicit)&&a),a},$l.b,$l.a)),i.Y(1,1097728,null,3,Kl.a,[Jl.a,Ql.a,i.j,i.z,[2,ln.a]],null,null),i._18(335544320,1,{contentLabel:0}),i._18(603979776,2,{_buttons:1}),i._18(603979776,3,{_icons:1}),i.Y(5,16384,null,0,nn.a,[],null,null),(l()(),i._20(6,2,[\"\\n      \",\"\\n    \"]))],null,function(l,n){l(n,6,0,n.context.$implicit)})})),i.Y(20,802816,null,0,sn.h,[i.I,i.F,i.p],{ngForOf:[0,\"ngForOf\"]},null),(l()(),i._20(-1,null,[\"\\n  \"])),(l()(),i._20(-1,1,[\"\\n\"])),(l()(),i._20(-1,null,[\"\\n\"]))],function(l,n){l(n,20,0,n.component.items)},function(l,n){l(n,4,0,i._13(n,5)._hidden,i._13(n,5)._sbPadding),l(n,13,0,i._13(n,14).statusbarPadding,i._13(n,14)._hasRefresher)})},Ba)),i.Y(1,49152,null,0,W,[],null,null)],null,null)},{},{},[]),Aa=u(134),Ra=u(133),Va=i.X({encapsulation:2,styles:[],data:{}}),Da=i.V(\"ng-component\",q,function(l){return i._22(0,[(l()(),i.Z(0,0,null,null,1,\"ng-component\",[],null,null,null,function(l){return i._22(0,[(l()(),i._20(-1,null,[\"\\n\"])),(l()(),i.Z(1,0,null,null,10,\"ion-header\",[],null,null,null,null,null)),i.Y(2,16384,null,0,jn.a,[Ql.a,i.j,i.z,[2,fn.a]],null,null),(l()(),i._20(-1,null,[\"\\n  \"])),(l()(),i.Z(4,0,null,null,6,\"ion-navbar\",[[\"class\",\"toolbar\"]],[[8,\"hidden\",0],[2,\"statusbar-padding\",null]],null,null,Fn.b,Fn.a)),i.Y(5,49152,null,0,Pn.a,[Yn.a,[2,fn.a],[2,Ln.a],Ql.a,i.j,i.z],null,null),(l()(),i._20(-1,3,[\"\\n    \"])),(l()(),i.Z(7,0,null,3,2,\"ion-title\",[],null,null,null,vn.b,vn.a)),i.Y(8,49152,null,0,yn.a,[Ql.a,i.j,i.z,[2,kn.a],[2,Pn.a]],null,null),(l()(),i._20(-1,0,[\"List Dividers\"])),(l()(),i._20(-1,3,[\"\\n  \"])),(l()(),i._20(-1,null,[\"\\n\"])),(l()(),i._20(-1,null,[\"\\n\\n\"])),(l()(),i.Z(13,0,null,null,206,\"ion-content\",[],[[2,\"statusbar-padding\",null],[2,\"has-refresher\",null]],null,null,Cn.b,Cn.a)),i.Y(14,4374528,null,0,wn.a,[Ql.a,on.a,_n.a,i.j,i.z,Yn.a,Zn.a,i.u,[2,fn.a],[2,Ln.a]],null,null),(l()(),i._20(-1,1,[\"\\n\\n    \"])),(l()(),i.Z(16,0,null,1,50,\"ion-item-group\",[],null,null,null,null,null)),i.Y(17,16384,null,0,Aa.a,[],null,null),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i.Z(19,0,null,null,6,\"ion-item-divider\",[[\"class\",\"item item-divider\"],[\"color\",\"light\"]],null,null,null,$l.b,$l.a)),i.Y(20,1097728,null,3,Kl.a,[Jl.a,Ql.a,i.j,i.z,[2,ln.a]],{color:[0,\"color\"]},null),i._18(335544320,1,{contentLabel:0}),i._18(603979776,2,{_buttons:1}),i._18(603979776,3,{_icons:1}),i.Y(24,16384,null,0,Ra.a,[Ql.a,i.j,i.z],{color:[0,\"color\"]},null),(l()(),i._20(-1,2,[\"A\"])),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i.Z(27,0,null,null,6,\"ion-item\",[[\"class\",\"item item-block\"]],null,null,null,$l.b,$l.a)),i.Y(28,1097728,null,3,Kl.a,[Jl.a,Ql.a,i.j,i.z,[2,ln.a]],null,null),i._18(335544320,4,{contentLabel:0}),i._18(603979776,5,{_buttons:1}),i._18(603979776,6,{_icons:1}),i.Y(32,16384,null,0,nn.a,[],null,null),(l()(),i._20(-1,2,[\"Angola\"])),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i.Z(35,0,null,null,6,\"ion-item\",[[\"class\",\"item item-block\"]],null,null,null,$l.b,$l.a)),i.Y(36,1097728,null,3,Kl.a,[Jl.a,Ql.a,i.j,i.z,[2,ln.a]],null,null),i._18(335544320,7,{contentLabel:0}),i._18(603979776,8,{_buttons:1}),i._18(603979776,9,{_icons:1}),i.Y(40,16384,null,0,nn.a,[],null,null),(l()(),i._20(-1,2,[\"Argentina\"])),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i.Z(43,0,null,null,6,\"ion-item\",[[\"class\",\"item item-block\"]],null,null,null,$l.b,$l.a)),i.Y(44,1097728,null,3,Kl.a,[Jl.a,Ql.a,i.j,i.z,[2,ln.a]],null,null),i._18(335544320,10,{contentLabel:0}),i._18(603979776,11,{_buttons:1}),i._18(603979776,12,{_icons:1}),i.Y(48,16384,null,0,nn.a,[],null,null),(l()(),i._20(-1,2,[\"Armenia\"])),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i.Z(51,0,null,null,6,\"ion-item\",[[\"class\",\"item item-block\"]],null,null,null,$l.b,$l.a)),i.Y(52,1097728,null,3,Kl.a,[Jl.a,Ql.a,i.j,i.z,[2,ln.a]],null,null),i._18(335544320,13,{contentLabel:0}),i._18(603979776,14,{_buttons:1}),i._18(603979776,15,{_icons:1}),i.Y(56,16384,null,0,nn.a,[],null,null),(l()(),i._20(-1,2,[\"Australia\"])),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i.Z(59,0,null,null,6,\"ion-item\",[[\"class\",\"item item-block\"]],null,null,null,$l.b,$l.a)),i.Y(60,1097728,null,3,Kl.a,[Jl.a,Ql.a,i.j,i.z,[2,ln.a]],null,null),i._18(335544320,16,{contentLabel:0}),i._18(603979776,17,{_buttons:1}),i._18(603979776,18,{_icons:1}),i.Y(64,16384,null,0,nn.a,[],null,null),(l()(),i._20(-1,2,[\"Austria\"])),(l()(),i._20(-1,null,[\"\\n    \"])),(l()(),i._20(-1,1,[\"\\n\\n    \"])),(l()(),i.Z(68,0,null,1,58,\"ion-item-group\",[],null,null,null,null,null)),i.Y(69,16384,null,0,Aa.a,[],null,null),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i.Z(71,0,null,null,6,\"ion-item-divider\",[[\"class\",\"item item-divider\"],[\"color\",\"light\"]],null,null,null,$l.b,$l.a)),i.Y(72,1097728,null,3,Kl.a,[Jl.a,Ql.a,i.j,i.z,[2,ln.a]],{color:[0,\"color\"]},null),i._18(335544320,19,{contentLabel:0}),i._18(603979776,20,{_buttons:1}),i._18(603979776,21,{_icons:1}),i.Y(76,16384,null,0,Ra.a,[Ql.a,i.j,i.z],{color:[0,\"color\"]},null),(l()(),i._20(-1,2,[\"B\"])),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i.Z(79,0,null,null,6,\"ion-item\",[[\"class\",\"item item-block\"]],null,null,null,$l.b,$l.a)),i.Y(80,1097728,null,3,Kl.a,[Jl.a,Ql.a,i.j,i.z,[2,ln.a]],null,null),i._18(335544320,22,{contentLabel:0}),i._18(603979776,23,{_buttons:1}),i._18(603979776,24,{_icons:1}),i.Y(84,16384,null,0,nn.a,[],null,null),(l()(),i._20(-1,2,[\"Bangladesh\"])),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i.Z(87,0,null,null,6,\"ion-item\",[[\"class\",\"item item-block\"]],null,null,null,$l.b,$l.a)),i.Y(88,1097728,null,3,Kl.a,[Jl.a,Ql.a,i.j,i.z,[2,ln.a]],null,null),i._18(335544320,25,{contentLabel:0}),i._18(603979776,26,{_buttons:1}),i._18(603979776,27,{_icons:1}),i.Y(92,16384,null,0,nn.a,[],null,null),(l()(),i._20(-1,2,[\"Belarus\"])),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i.Z(95,0,null,null,6,\"ion-item\",[[\"class\",\"item item-block\"]],null,null,null,$l.b,$l.a)),i.Y(96,1097728,null,3,Kl.a,[Jl.a,Ql.a,i.j,i.z,[2,ln.a]],null,null),i._18(335544320,28,{contentLabel:0}),i._18(603979776,29,{_buttons:1}),i._18(603979776,30,{_icons:1}),i.Y(100,16384,null,0,nn.a,[],null,null),(l()(),i._20(-1,2,[\"Belgium\"])),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i.Z(103,0,null,null,6,\"ion-item\",[[\"class\",\"item item-block\"]],null,null,null,$l.b,$l.a)),i.Y(104,1097728,null,3,Kl.a,[Jl.a,Ql.a,i.j,i.z,[2,ln.a]],null,null),i._18(335544320,31,{contentLabel:0}),i._18(603979776,32,{_buttons:1}),i._18(603979776,33,{_icons:1}),i.Y(108,16384,null,0,nn.a,[],null,null),(l()(),i._20(-1,2,[\"Bhutan\"])),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i.Z(111,0,null,null,6,\"ion-item\",[[\"class\",\"item item-block\"]],null,null,null,$l.b,$l.a)),i.Y(112,1097728,null,3,Kl.a,[Jl.a,Ql.a,i.j,i.z,[2,ln.a]],null,null),i._18(335544320,34,{contentLabel:0}),i._18(603979776,35,{_buttons:1}),i._18(603979776,36,{_icons:1}),i.Y(116,16384,null,0,nn.a,[],null,null),(l()(),i._20(-1,2,[\"Bolivia\"])),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i.Z(119,0,null,null,6,\"ion-item\",[[\"class\",\"item item-block\"]],null,null,null,$l.b,$l.a)),i.Y(120,1097728,null,3,Kl.a,[Jl.a,Ql.a,i.j,i.z,[2,ln.a]],null,null),i._18(335544320,37,{contentLabel:0}),i._18(603979776,38,{_buttons:1}),i._18(603979776,39,{_icons:1}),i.Y(124,16384,null,0,nn.a,[],null,null),(l()(),i._20(-1,2,[\"Brazil\"])),(l()(),i._20(-1,null,[\"\\n    \"])),(l()(),i._20(-1,1,[\"\\n\\n    \"])),(l()(),i.Z(128,0,null,1,90,\"ion-item-group\",[],null,null,null,null,null)),i.Y(129,16384,null,0,Aa.a,[],null,null),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i.Z(131,0,null,null,6,\"ion-item-divider\",[[\"class\",\"item item-divider\"],[\"color\",\"light\"]],null,null,null,$l.b,$l.a)),i.Y(132,1097728,null,3,Kl.a,[Jl.a,Ql.a,i.j,i.z,[2,ln.a]],{color:[0,\"color\"]},null),i._18(335544320,40,{contentLabel:0}),i._18(603979776,41,{_buttons:1}),i._18(603979776,42,{_icons:1}),i.Y(136,16384,null,0,Ra.a,[Ql.a,i.j,i.z],{color:[0,\"color\"]},null),(l()(),i._20(-1,2,[\"C\"])),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i.Z(139,0,null,null,6,\"ion-item\",[[\"class\",\"item item-block\"]],null,null,null,$l.b,$l.a)),i.Y(140,1097728,null,3,Kl.a,[Jl.a,Ql.a,i.j,i.z,[2,ln.a]],null,null),i._18(335544320,43,{contentLabel:0}),i._18(603979776,44,{_buttons:1}),i._18(603979776,45,{_icons:1}),i.Y(144,16384,null,0,nn.a,[],null,null),(l()(),i._20(-1,2,[\"Cambodia\"])),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i.Z(147,0,null,null,6,\"ion-item\",[[\"class\",\"item item-block\"]],null,null,null,$l.b,$l.a)),i.Y(148,1097728,null,3,Kl.a,[Jl.a,Ql.a,i.j,i.z,[2,ln.a]],null,null),i._18(335544320,46,{contentLabel:0}),i._18(603979776,47,{_buttons:1}),i._18(603979776,48,{_icons:1}),i.Y(152,16384,null,0,nn.a,[],null,null),(l()(),i._20(-1,2,[\"Cameroon\"])),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i.Z(155,0,null,null,6,\"ion-item\",[[\"class\",\"item item-block\"]],null,null,null,$l.b,$l.a)),i.Y(156,1097728,null,3,Kl.a,[Jl.a,Ql.a,i.j,i.z,[2,ln.a]],null,null),i._18(335544320,49,{contentLabel:0}),i._18(603979776,50,{_buttons:1}),i._18(603979776,51,{_icons:1}),i.Y(160,16384,null,0,nn.a,[],null,null),(l()(),i._20(-1,2,[\"Canada\"])),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i.Z(163,0,null,null,6,\"ion-item\",[[\"class\",\"item item-block\"]],null,null,null,$l.b,$l.a)),i.Y(164,1097728,null,3,Kl.a,[Jl.a,Ql.a,i.j,i.z,[2,ln.a]],null,null),i._18(335544320,52,{contentLabel:0}),i._18(603979776,53,{_buttons:1}),i._18(603979776,54,{_icons:1}),i.Y(168,16384,null,0,nn.a,[],null,null),(l()(),i._20(-1,2,[\"Chile\"])),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i.Z(171,0,null,null,6,\"ion-item\",[[\"class\",\"item item-block\"]],null,null,null,$l.b,$l.a)),i.Y(172,1097728,null,3,Kl.a,[Jl.a,Ql.a,i.j,i.z,[2,ln.a]],null,null),i._18(335544320,55,{contentLabel:0}),i._18(603979776,56,{_buttons:1}),i._18(603979776,57,{_icons:1}),i.Y(176,16384,null,0,nn.a,[],null,null),(l()(),i._20(-1,2,[\"China\"])),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i.Z(179,0,null,null,6,\"ion-item\",[[\"class\",\"item item-block\"]],null,null,null,$l.b,$l.a)),i.Y(180,1097728,null,3,Kl.a,[Jl.a,Ql.a,i.j,i.z,[2,ln.a]],null,null),i._18(335544320,58,{contentLabel:0}),i._18(603979776,59,{_buttons:1}),i._18(603979776,60,{_icons:1}),i.Y(184,16384,null,0,nn.a,[],null,null),(l()(),i._20(-1,2,[\"Colombia\"])),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i.Z(187,0,null,null,6,\"ion-item\",[[\"class\",\"item item-block\"]],null,null,null,$l.b,$l.a)),i.Y(188,1097728,null,3,Kl.a,[Jl.a,Ql.a,i.j,i.z,[2,ln.a]],null,null),i._18(335544320,61,{contentLabel:0}),i._18(603979776,62,{_buttons:1}),i._18(603979776,63,{_icons:1}),i.Y(192,16384,null,0,nn.a,[],null,null),(l()(),i._20(-1,2,[\"Costa Rica\"])),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i.Z(195,0,null,null,6,\"ion-item\",[[\"class\",\"item item-block\"]],null,null,null,$l.b,$l.a)),i.Y(196,1097728,null,3,Kl.a,[Jl.a,Ql.a,i.j,i.z,[2,ln.a]],null,null),i._18(335544320,64,{contentLabel:0}),i._18(603979776,65,{_buttons:1}),i._18(603979776,66,{_icons:1}),i.Y(200,16384,null,0,nn.a,[],null,null),(l()(),i._20(-1,2,[\"Cuba\"])),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i.Z(203,0,null,null,6,\"ion-item\",[[\"class\",\"item item-block\"]],null,null,null,$l.b,$l.a)),i.Y(204,1097728,null,3,Kl.a,[Jl.a,Ql.a,i.j,i.z,[2,ln.a]],null,null),i._18(335544320,67,{contentLabel:0}),i._18(603979776,68,{_buttons:1}),i._18(603979776,69,{_icons:1}),i.Y(208,16384,null,0,nn.a,[],null,null),(l()(),i._20(-1,2,[\"Cyprus\"])),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i.Z(211,0,null,null,6,\"ion-item\",[[\"class\",\"item item-block\"]],null,null,null,$l.b,$l.a)),i.Y(212,1097728,null,3,Kl.a,[Jl.a,Ql.a,i.j,i.z,[2,ln.a]],null,null),i._18(335544320,70,{contentLabel:0}),i._18(603979776,71,{_buttons:1}),i._18(603979776,72,{_icons:1}),i.Y(216,16384,null,0,nn.a,[],null,null),(l()(),i._20(-1,2,[\"Czech Republic\"])),(l()(),i._20(-1,null,[\"\\n    \"])),(l()(),i._20(-1,1,[\"\\n\\n\"])),(l()(),i._20(-1,null,[\"\\n\"]))],function(l,n){l(n,20,0,\"light\"),l(n,24,0,\"light\"),l(n,72,0,\"light\"),l(n,76,0,\"light\"),l(n,132,0,\"light\"),l(n,136,0,\"light\")},function(l,n){l(n,4,0,i._13(n,5)._hidden,i._13(n,5)._sbPadding),l(n,13,0,i._13(n,14).statusbarPadding,i._13(n,14)._hasRefresher)})},Va)),i.Y(1,49152,null,0,q,[],null,null)],null,null)},{},{},[]),Na=i.X({encapsulation:2,styles:[],data:{}}),Xa=i.V(\"ng-component\",H,function(l){return i._22(0,[(l()(),i.Z(0,0,null,null,1,\"ng-component\",[],null,null,null,function(l){return i._22(0,[(l()(),i._20(-1,null,[\"\\n\"])),(l()(),i.Z(1,0,null,null,10,\"ion-header\",[],null,null,null,null,null)),i.Y(2,16384,null,0,jn.a,[Ql.a,i.j,i.z,[2,fn.a]],null,null),(l()(),i._20(-1,null,[\"\\n  \"])),(l()(),i.Z(4,0,null,null,6,\"ion-navbar\",[[\"class\",\"toolbar\"]],[[8,\"hidden\",0],[2,\"statusbar-padding\",null]],null,null,Fn.b,Fn.a)),i.Y(5,49152,null,0,Pn.a,[Yn.a,[2,fn.a],[2,Ln.a],Ql.a,i.j,i.z],null,null),(l()(),i._20(-1,3,[\"\\n    \"])),(l()(),i.Z(7,0,null,3,2,\"ion-title\",[],null,null,null,vn.b,vn.a)),i.Y(8,49152,null,0,yn.a,[Ql.a,i.j,i.z,[2,kn.a],[2,Pn.a]],null,null),(l()(),i._20(-1,0,[\"List Headers\"])),(l()(),i._20(-1,3,[\"\\n  \"])),(l()(),i._20(-1,null,[\"\\n\"])),(l()(),i._20(-1,null,[\"\\n\\n\"])),(l()(),i.Z(13,0,null,null,110,\"ion-content\",[],[[2,\"statusbar-padding\",null],[2,\"has-refresher\",null]],null,null,Cn.b,Cn.a)),i.Y(14,4374528,null,0,wn.a,[Ql.a,on.a,_n.a,i.j,i.z,Yn.a,Zn.a,i.u,[2,fn.a],[2,Ln.a]],null,null),(l()(),i._20(-1,1,[\"\\n\\n  \"])),(l()(),i.Z(16,0,null,1,34,\"ion-list\",[],null,null,null,null,null)),i.Y(17,16384,null,0,en.a,[Ql.a,i.j,i.z,on.a,tn.l,_n.a],null,null),(l()(),i._20(-1,null,[\"\\n    \"])),(l()(),i.Z(19,0,null,null,6,\"ion-list-header\",[[\"class\",\"item\"]],null,null,null,$l.b,$l.a)),i.Y(20,1097728,null,3,Kl.a,[Jl.a,Ql.a,i.j,i.z,[2,ln.a]],null,null),i._18(335544320,1,{contentLabel:0}),i._18(603979776,2,{_buttons:1}),i._18(603979776,3,{_icons:1}),i.Y(24,16384,null,0,Qu.a,[Ql.a,i.z,i.j,[8,null]],null,null),(l()(),i._20(-1,2,[\"Comedy\"])),(l()(),i._20(-1,null,[\"\\n    \"])),(l()(),i.Z(27,0,null,null,6,\"ion-item\",[[\"class\",\"item item-block\"]],null,null,null,$l.b,$l.a)),i.Y(28,1097728,null,3,Kl.a,[Jl.a,Ql.a,i.j,i.z,[2,ln.a]],null,null),i._18(335544320,4,{contentLabel:0}),i._18(603979776,5,{_buttons:1}),i._18(603979776,6,{_icons:1}),i.Y(32,16384,null,0,nn.a,[],null,null),(l()(),i._20(-1,2,[\"Airplane!\"])),(l()(),i._20(-1,null,[\"\\n    \"])),(l()(),i.Z(35,0,null,null,6,\"ion-item\",[[\"class\",\"item item-block\"]],null,null,null,$l.b,$l.a)),i.Y(36,1097728,null,3,Kl.a,[Jl.a,Ql.a,i.j,i.z,[2,ln.a]],null,null),i._18(335544320,7,{contentLabel:0}),i._18(603979776,8,{_buttons:1}),i._18(603979776,9,{_icons:1}),i.Y(40,16384,null,0,nn.a,[],null,null),(l()(),i._20(-1,2,[\"Caddyshack\"])),(l()(),i._20(-1,null,[\"\\n    \"])),(l()(),i.Z(43,0,null,null,6,\"ion-item\",[[\"class\",\"item item-block\"]],null,null,null,$l.b,$l.a)),i.Y(44,1097728,null,3,Kl.a,[Jl.a,Ql.a,i.j,i.z,[2,ln.a]],null,null),i._18(335544320,10,{contentLabel:0}),i._18(603979776,11,{_buttons:1}),i._18(603979776,12,{_icons:1}),i.Y(48,16384,null,0,nn.a,[],null,null),(l()(),i._20(-1,2,[\"Coming To America\"])),(l()(),i._20(-1,null,[\"\\n  \"])),(l()(),i._20(-1,1,[\"\\n\\n  \"])),(l()(),i.Z(52,0,null,1,34,\"ion-list\",[],null,null,null,null,null)),i.Y(53,16384,null,0,en.a,[Ql.a,i.j,i.z,on.a,tn.l,_n.a],null,null),(l()(),i._20(-1,null,[\"\\n    \"])),(l()(),i.Z(55,0,null,null,6,\"ion-list-header\",[[\"class\",\"item\"]],null,null,null,$l.b,$l.a)),i.Y(56,1097728,null,3,Kl.a,[Jl.a,Ql.a,i.j,i.z,[2,ln.a]],null,null),i._18(335544320,13,{contentLabel:0}),i._18(603979776,14,{_buttons:1}),i._18(603979776,15,{_icons:1}),i.Y(60,16384,null,0,Qu.a,[Ql.a,i.z,i.j,[8,null]],null,null),(l()(),i._20(-1,2,[\"Action\"])),(l()(),i._20(-1,null,[\"\\n    \"])),(l()(),i.Z(63,0,null,null,6,\"ion-item\",[[\"class\",\"item item-block\"]],null,null,null,$l.b,$l.a)),i.Y(64,1097728,null,3,Kl.a,[Jl.a,Ql.a,i.j,i.z,[2,ln.a]],null,null),i._18(335544320,16,{contentLabel:0}),i._18(603979776,17,{_buttons:1}),i._18(603979776,18,{_icons:1}),i.Y(68,16384,null,0,nn.a,[],null,null),(l()(),i._20(-1,2,[\"Terminator II\"])),(l()(),i._20(-1,null,[\"\\n    \"])),(l()(),i.Z(71,0,null,null,6,\"ion-item\",[[\"class\",\"item item-block\"]],null,null,null,$l.b,$l.a)),i.Y(72,1097728,null,3,Kl.a,[Jl.a,Ql.a,i.j,i.z,[2,ln.a]],null,null),i._18(335544320,19,{contentLabel:0}),i._18(603979776,20,{_buttons:1}),i._18(603979776,21,{_icons:1}),i.Y(76,16384,null,0,nn.a,[],null,null),(l()(),i._20(-1,2,[\"The Empire Strikes Back\"])),(l()(),i._20(-1,null,[\"\\n    \"])),(l()(),i.Z(79,0,null,null,6,\"ion-item\",[[\"class\",\"item item-block\"]],null,null,null,$l.b,$l.a)),i.Y(80,1097728,null,3,Kl.a,[Jl.a,Ql.a,i.j,i.z,[2,ln.a]],null,null),i._18(335544320,22,{contentLabel:0}),i._18(603979776,23,{_buttons:1}),i._18(603979776,24,{_icons:1}),i.Y(84,16384,null,0,nn.a,[],null,null),(l()(),i._20(-1,2,[\"Blade Runner\"])),(l()(),i._20(-1,null,[\"\\n  \"])),(l()(),i._20(-1,1,[\"\\n\\n  \"])),(l()(),i.Z(88,0,null,1,34,\"ion-list\",[],null,null,null,null,null)),i.Y(89,16384,null,0,en.a,[Ql.a,i.j,i.z,on.a,tn.l,_n.a],null,null),(l()(),i._20(-1,null,[\"\\n    \"])),(l()(),i.Z(91,0,null,null,6,\"ion-list-header\",[[\"class\",\"item\"]],null,null,null,$l.b,$l.a)),i.Y(92,1097728,null,3,Kl.a,[Jl.a,Ql.a,i.j,i.z,[2,ln.a]],null,null),i._18(335544320,25,{contentLabel:0}),i._18(603979776,26,{_buttons:1}),i._18(603979776,27,{_icons:1}),i.Y(96,16384,null,0,Qu.a,[Ql.a,i.z,i.j,[8,null]],null,null),(l()(),i._20(-1,2,[\"Horror\"])),(l()(),i._20(-1,null,[\"\\n    \"])),(l()(),i.Z(99,0,null,null,6,\"ion-item\",[[\"class\",\"item item-block\"]],null,null,null,$l.b,$l.a)),i.Y(100,1097728,null,3,Kl.a,[Jl.a,Ql.a,i.j,i.z,[2,ln.a]],null,null),i._18(335544320,28,{contentLabel:0}),i._18(603979776,29,{_buttons:1}),i._18(603979776,30,{_icons:1}),i.Y(104,16384,null,0,nn.a,[],null,null),(l()(),i._20(-1,2,[\"The Evil Dead\"])),(l()(),i._20(-1,null,[\"\\n    \"])),(l()(),i.Z(107,0,null,null,6,\"ion-item\",[[\"class\",\"item item-block\"]],null,null,null,$l.b,$l.a)),i.Y(108,1097728,null,3,Kl.a,[Jl.a,Ql.a,i.j,i.z,[2,ln.a]],null,null),i._18(335544320,31,{contentLabel:0}),i._18(603979776,32,{_buttons:1}),i._18(603979776,33,{_icons:1}),i.Y(112,16384,null,0,nn.a,[],null,null),(l()(),i._20(-1,2,[\"Poldergeist\"])),(l()(),i._20(-1,null,[\"\\n    \"])),(l()(),i.Z(115,0,null,null,6,\"ion-item\",[[\"class\",\"item item-block\"]],null,null,null,$l.b,$l.a)),i.Y(116,1097728,null,3,Kl.a,[Jl.a,Ql.a,i.j,i.z,[2,ln.a]],null,null),i._18(335544320,34,{contentLabel:0}),i._18(603979776,35,{_buttons:1}),i._18(603979776,36,{_icons:1}),i.Y(120,16384,null,0,nn.a,[],null,null),(l()(),i._20(-1,2,[\"Aliens\"])),(l()(),i._20(-1,null,[\"\\n  \"])),(l()(),i._20(-1,1,[\"\\n\\n\"])),(l()(),i._20(-1,null,[\"\\n\"]))],null,function(l,n){l(n,4,0,i._13(n,5)._hidden,i._13(n,5)._sbPadding),l(n,13,0,i._13(n,14).statusbarPadding,i._13(n,14)._hasRefresher)})},Na)),i.Y(1,49152,null,0,H,[],null,null)],null,null)},{},{},[]),Oa=u(190),Ea=u(82),Ua=u(40),Wa=i.X({encapsulation:2,styles:[],data:{}}),qa=i.V(\"ng-component\",G,function(l){return i._22(0,[(l()(),i.Z(0,0,null,null,1,\"ng-component\",[],null,null,null,function(l){return i._22(0,[(l()(),i._20(-1,null,[\"\\n\"])),(l()(),i.Z(1,0,null,null,10,\"ion-header\",[],null,null,null,null,null)),i.Y(2,16384,null,0,jn.a,[Ql.a,i.j,i.z,[2,fn.a]],null,null),(l()(),i._20(-1,null,[\"\\n  \"])),(l()(),i.Z(4,0,null,null,6,\"ion-navbar\",[[\"class\",\"toolbar\"]],[[8,\"hidden\",0],[2,\"statusbar-padding\",null]],null,null,Fn.b,Fn.a)),i.Y(5,49152,null,0,Pn.a,[Yn.a,[2,fn.a],[2,Ln.a],Ql.a,i.j,i.z],null,null),(l()(),i._20(-1,3,[\"\\n    \"])),(l()(),i.Z(7,0,null,3,2,\"ion-title\",[],null,null,null,vn.b,vn.a)),i.Y(8,49152,null,0,yn.a,[Ql.a,i.j,i.z,[2,kn.a],[2,Pn.a]],null,null),(l()(),i._20(-1,0,[\"Icon List\"])),(l()(),i._20(-1,3,[\"\\n  \"])),(l()(),i._20(-1,null,[\"\\n\"])),(l()(),i._20(-1,null,[\"\\n\\n\"])),(l()(),i.Z(13,0,null,null,195,\"ion-content\",[],[[2,\"statusbar-padding\",null],[2,\"has-refresher\",null]],null,null,Cn.b,Cn.a)),i.Y(14,4374528,null,0,wn.a,[Ql.a,on.a,_n.a,i.j,i.z,Yn.a,Zn.a,i.u,[2,fn.a],[2,Ln.a]],null,null),(l()(),i._20(-1,1,[\"\\n  \"])),(l()(),i.Z(16,0,null,1,73,\"ion-list\",[[\"no-border\",\"\"]],null,null,null,null,null)),i.Y(17,16384,null,0,en.a,[Ql.a,i.j,i.z,on.a,tn.l,_n.a],null,null),(l()(),i._20(-1,null,[\"\\n\\n    \"])),(l()(),i.Z(19,0,null,null,6,\"ion-list-header\",[[\"class\",\"item\"]],null,null,null,$l.b,$l.a)),i.Y(20,1097728,null,3,Kl.a,[Jl.a,Ql.a,i.j,i.z,[2,ln.a]],null,null),i._18(335544320,1,{contentLabel:0}),i._18(603979776,2,{_buttons:1}),i._18(603979776,3,{_icons:1}),i.Y(24,16384,null,0,Qu.a,[Ql.a,i.z,i.j,[8,null]],null,null),(l()(),i._20(-1,2,[\"\\n      Classes\\n    \"])),(l()(),i._20(-1,null,[\"\\n\\n    \"])),(l()(),i.Z(27,0,null,null,13,\"ion-item\",[[\"class\",\"item item-block\"]],null,null,null,$l.b,$l.a)),i.Y(28,1097728,null,3,Kl.a,[Jl.a,Ql.a,i.j,i.z,[2,ln.a]],null,null),i._18(335544320,4,{contentLabel:0}),i._18(603979776,5,{_buttons:1}),i._18(603979776,6,{_icons:1}),i.Y(32,16384,null,0,nn.a,[],null,null),(l()(),i._20(-1,2,[\"\\n      \"])),(l()(),i.Z(34,0,null,0,1,\"ion-icon\",[[\"item-start\",\"\"],[\"name\",\"planet\"],[\"role\",\"img\"]],[[2,\"hide\",null]],null,null,null,null)),i.Y(35,147456,[[6,4]],0,mn.a,[Ql.a,i.j,i.z],{name:[0,\"name\"]},null),(l()(),i._20(-1,2,[\"\\n      Astronomy\\n      \"])),(l()(),i.Z(37,0,null,4,2,\"ion-note\",[[\"item-end\",\"\"]],null,null,null,null,null)),i.Y(38,16384,null,0,Su.a,[Ql.a,i.j,i.z],null,null),(l()(),i._20(-1,null,[\"\\n      To the moon\\n      \"])),(l()(),i._20(-1,2,[\"\\n    \"])),(l()(),i._20(-1,null,[\"\\n\\n    \"])),(l()(),i.Z(42,0,null,null,17,\"ion-item\",[[\"class\",\"item item-block\"]],null,null,null,$l.b,$l.a)),i.Y(43,1097728,null,3,Kl.a,[Jl.a,Ql.a,i.j,i.z,[2,ln.a]],null,null),i._18(335544320,7,{contentLabel:0}),i._18(603979776,8,{_buttons:1}),i._18(603979776,9,{_icons:1}),i.Y(47,16384,null,0,nn.a,[],null,null),(l()(),i._20(-1,2,[\"\\n      \"])),(l()(),i.Z(49,0,null,4,2,\"ion-toggle\",[[\"checked\",\"false\"]],[[2,\"toggle-disabled\",null],[2,\"toggle-checked\",null],[2,\"toggle-activated\",null]],[[null,\"keyup\"]],function(l,n,u){var a=!0;return\"keyup\"===n&&(a=!1!==i._13(l,51)._keyup(u)&&a),a},Oa.b,Oa.a)),i._17(5120,null,A.j,function(l){return[l]},[Ea.a]),i.Y(51,1228800,null,0,Ea.a,[Jl.a,Ql.a,on.a,i.j,i.z,Ua.a,[2,Kl.a],tn.l,_n.a,i.u],{checked:[0,\"checked\"]},null),(l()(),i._20(-1,2,[\"\\n      \"])),(l()(),i.Z(53,0,null,1,2,\"ion-label\",[],null,null,null,null,null)),i.Y(54,16384,[[7,4]],0,la.a,[Ql.a,i.j,i.z,[8,null],[8,null],[8,null],[8,null]],null,null),(l()(),i._20(-1,null,[\"\\n        Muggle Studies\\n      \"])),(l()(),i._20(-1,2,[\"\\n      \"])),(l()(),i.Z(57,0,null,0,1,\"ion-icon\",[[\"item-start\",\"\"],[\"name\",\"body\"],[\"role\",\"img\"]],[[2,\"hide\",null]],null,null,null,null)),i.Y(58,147456,[[9,4]],0,mn.a,[Ql.a,i.j,i.z],{name:[0,\"name\"]},null),(l()(),i._20(-1,2,[\"\\n    \"])),(l()(),i._20(-1,null,[\"\\n\\n    \"])),(l()(),i.Z(61,0,null,null,12,\"ion-item\",[[\"class\",\"item item-block\"]],null,null,null,$l.b,$l.a)),i.Y(62,1097728,null,3,Kl.a,[Jl.a,Ql.a,i.j,i.z,[2,ln.a]],null,null),i._18(335544320,10,{contentLabel:0}),i._18(603979776,11,{_buttons:1}),i._18(603979776,12,{_icons:1}),i.Y(66,16384,null,0,nn.a,[],null,null),(l()(),i._20(-1,2,[\"\\n      \"])),(l()(),i.Z(68,0,null,0,1,\"ion-icon\",[[\"item-start\",\"\"],[\"name\",\"leaf\"],[\"role\",\"img\"]],[[2,\"hide\",null]],null,null,null,null)),i.Y(69,147456,[[12,4]],0,mn.a,[Ql.a,i.j,i.z],{name:[0,\"name\"]},null),(l()(),i._20(-1,2,[\"\\n      Herbology\\n      \"])),(l()(),i.Z(71,0,null,4,1,\"ion-icon\",[[\"color\",\"secondary\"],[\"item-end\",\"\"],[\"name\",\"rose\"],[\"role\",\"img\"]],[[2,\"hide\",null]],null,null,null,null)),i.Y(72,147456,[[12,4]],0,mn.a,[Ql.a,i.j,i.z],{color:[0,\"color\"],name:[1,\"name\"]},null),(l()(),i._20(-1,2,[\"\\n    \"])),(l()(),i._20(-1,null,[\"\\n\\n    \"])),(l()(),i.Z(75,0,null,null,13,\"ion-item\",[[\"class\",\"item item-block\"]],null,null,null,$l.b,$l.a)),i.Y(76,1097728,null,3,Kl.a,[Jl.a,Ql.a,i.j,i.z,[2,ln.a]],null,null),i._18(335544320,13,{contentLabel:0}),i._18(603979776,14,{_buttons:1}),i._18(603979776,15,{_icons:1}),i.Y(80,16384,null,0,nn.a,[],null,null),(l()(),i._20(-1,2,[\"\\n      \"])),(l()(),i.Z(82,0,null,0,1,\"ion-icon\",[[\"item-start\",\"\"],[\"name\",\"flask\"],[\"role\",\"img\"]],[[2,\"hide\",null]],null,null,null,null)),i.Y(83,147456,[[15,4]],0,mn.a,[Ql.a,i.j,i.z],{name:[0,\"name\"]},null),(l()(),i._20(-1,2,[\"\\n      Potions\\n      \"])),(l()(),i.Z(85,0,null,4,2,\"ion-note\",[[\"item-end\",\"\"]],null,null,null,null,null)),i.Y(86,16384,null,0,Su.a,[Ql.a,i.j,i.z],null,null),(l()(),i._20(-1,null,[\"\\n      Poisonous\\n      \"])),(l()(),i._20(-1,2,[\"\\n    \"])),(l()(),i._20(-1,null,[\"\\n\\n\\n\\n  \"])),(l()(),i._20(-1,1,[\"\\n\\n\\n  \"])),(l()(),i.Z(91,0,null,1,59,\"ion-list\",[],null,null,null,null,null)),i.Y(92,16384,null,0,en.a,[Ql.a,i.j,i.z,on.a,tn.l,_n.a],null,null),(l()(),i._20(-1,null,[\"\\n\\n    \"])),(l()(),i.Z(94,0,null,null,6,\"ion-list-header\",[[\"class\",\"item\"]],null,null,null,$l.b,$l.a)),i.Y(95,1097728,null,3,Kl.a,[Jl.a,Ql.a,i.j,i.z,[2,ln.a]],null,null),i._18(335544320,16,{contentLabel:0}),i._18(603979776,17,{_buttons:1}),i._18(603979776,18,{_icons:1}),i.Y(99,16384,null,0,Qu.a,[Ql.a,i.z,i.j,[8,null]],null,null),(l()(),i._20(-1,2,[\"\\n      Activities\\n    \"])),(l()(),i._20(-1,null,[\"\\n\\n    \"])),(l()(),i.Z(102,0,null,null,13,\"ion-item\",[[\"class\",\"item item-block\"]],null,null,null,$l.b,$l.a)),i.Y(103,1097728,null,3,Kl.a,[Jl.a,Ql.a,i.j,i.z,[2,ln.a]],null,null),i._18(335544320,19,{contentLabel:0}),i._18(603979776,20,{_buttons:1}),i._18(603979776,21,{_icons:1}),i.Y(107,16384,null,0,nn.a,[],null,null),(l()(),i._20(-1,2,[\"\\n      Incantation\\n      \"])),(l()(),i.Z(109,0,null,0,1,\"ion-icon\",[[\"item-start\",\"\"],[\"name\",\"color-wand\"],[\"role\",\"img\"]],[[2,\"hide\",null]],null,null,null,null)),i.Y(110,147456,[[21,4]],0,mn.a,[Ql.a,i.j,i.z],{name:[0,\"name\"]},null),(l()(),i._20(-1,2,[\"\\n      \"])),(l()(),i.Z(112,0,null,4,2,\"ion-note\",[[\"item-end\",\"\"]],null,null,null,null,null)),i.Y(113,16384,null,0,Su.a,[Ql.a,i.j,i.z],null,null),(l()(),i._20(-1,null,[\"Crucio!\"])),(l()(),i._20(-1,2,[\"\\n    \"])),(l()(),i._20(-1,null,[\"\\n\\n    \"])),(l()(),i.Z(117,0,null,null,17,\"ion-item\",[[\"class\",\"item item-block\"]],null,null,null,$l.b,$l.a)),i.Y(118,1097728,null,3,Kl.a,[Jl.a,Ql.a,i.j,i.z,[2,ln.a]],null,null),i._18(335544320,22,{contentLabel:0}),i._18(603979776,23,{_buttons:1}),i._18(603979776,24,{_icons:1}),i.Y(122,16384,null,0,nn.a,[],null,null),(l()(),i._20(-1,2,[\"\\n      \"])),(l()(),i.Z(124,0,null,4,2,\"ion-toggle\",[[\"checked\",\"true\"]],[[2,\"toggle-disabled\",null],[2,\"toggle-checked\",null],[2,\"toggle-activated\",null]],[[null,\"keyup\"]],function(l,n,u){var a=!0;return\"keyup\"===n&&(a=!1!==i._13(l,126)._keyup(u)&&a),a},Oa.b,Oa.a)),i._17(5120,null,A.j,function(l){return[l]},[Ea.a]),i.Y(126,1228800,null,0,Ea.a,[Jl.a,Ql.a,on.a,i.j,i.z,Ua.a,[2,Kl.a],tn.l,_n.a,i.u],{checked:[0,\"checked\"]},null),(l()(),i._20(-1,2,[\"\\n      \"])),(l()(),i.Z(128,0,null,1,2,\"ion-label\",[],null,null,null,null,null)),i.Y(129,16384,[[22,4]],0,la.a,[Ql.a,i.j,i.z,[8,null],[8,null],[8,null],[8,null]],null,null),(l()(),i._20(-1,null,[\"\\n        Quidditch Practice\\n      \"])),(l()(),i._20(-1,2,[\"\\n      \"])),(l()(),i.Z(132,0,null,0,1,\"ion-icon\",[[\"item-start\",\"\"],[\"name\",\"brush\"],[\"role\",\"img\"]],[[2,\"hide\",null]],null,null,null,null)),i.Y(133,147456,[[24,4]],0,mn.a,[Ql.a,i.j,i.z],{name:[0,\"name\"]},null),(l()(),i._20(-1,2,[\"\\n    \"])),(l()(),i._20(-1,null,[\"\\n\\n\\n    \"])),(l()(),i.Z(136,0,null,null,13,\"ion-item\",[[\"class\",\"item item-block\"]],null,null,null,$l.b,$l.a)),i.Y(137,1097728,null,3,Kl.a,[Jl.a,Ql.a,i.j,i.z,[2,ln.a]],null,null),i._18(335544320,25,{contentLabel:0}),i._18(603979776,26,{_buttons:1}),i._18(603979776,27,{_icons:1}),i.Y(141,16384,null,0,nn.a,[],null,null),(l()(),i._20(-1,2,[\"\\n      \"])),(l()(),i.Z(143,0,null,0,1,\"ion-icon\",[[\"item-start\",\"\"],[\"name\",\"wine\"],[\"role\",\"img\"]],[[2,\"hide\",null]],null,null,null,null)),i.Y(144,147456,[[27,4]],0,mn.a,[Ql.a,i.j,i.z],{name:[0,\"name\"]},null),(l()(),i._20(-1,2,[\"\\n      Mead Drinking\\n      \"])),(l()(),i.Z(146,0,null,4,2,\"ion-note\",[[\"item-end\",\"\"]],null,null,null,null,null)),i.Y(147,16384,null,0,Su.a,[Ql.a,i.j,i.z],null,null),(l()(),i._20(-1,null,[\"Yes please\"])),(l()(),i._20(-1,2,[\"\\n    \"])),(l()(),i._20(-1,null,[\"\\n\\n\\n  \"])),(l()(),i._20(-1,1,[\"\\n\\n  \"])),(l()(),i.Z(152,0,null,1,55,\"ion-list\",[],null,null,null,null,null)),i.Y(153,16384,null,0,en.a,[Ql.a,i.j,i.z,on.a,tn.l,_n.a],null,null),(l()(),i._20(-1,null,[\"\\n\\n    \"])),(l()(),i.Z(155,0,null,null,6,\"ion-list-header\",[[\"class\",\"item\"]],null,null,null,$l.b,$l.a)),i.Y(156,1097728,null,3,Kl.a,[Jl.a,Ql.a,i.j,i.z,[2,ln.a]],null,null),i._18(335544320,28,{contentLabel:0}),i._18(603979776,29,{_buttons:1}),i._18(603979776,30,{_icons:1}),i.Y(160,16384,null,0,Qu.a,[Ql.a,i.z,i.j,[8,null]],null,null),(l()(),i._20(-1,2,[\"\\n      Friends\\n    \"])),(l()(),i._20(-1,null,[\"\\n\\n    \"])),(l()(),i.Z(163,0,null,null,13,\"ion-item\",[[\"class\",\"item item-block\"]],null,null,null,$l.b,$l.a)),i.Y(164,1097728,null,3,Kl.a,[Jl.a,Ql.a,i.j,i.z,[2,ln.a]],null,null),i._18(335544320,31,{contentLabel:0}),i._18(603979776,32,{_buttons:1}),i._18(603979776,33,{_icons:1}),i.Y(168,16384,null,0,nn.a,[],null,null),(l()(),i._20(-1,2,[\"\\n      \"])),(l()(),i.Z(170,0,null,0,1,\"ion-icon\",[[\"item-start\",\"\"],[\"name\",\"flash\"],[\"role\",\"img\"]],[[2,\"hide\",null]],null,null,null,null)),i.Y(171,147456,[[33,4]],0,mn.a,[Ql.a,i.j,i.z],{name:[0,\"name\"]},null),(l()(),i._20(-1,2,[\"\\n      Harry\\n      \"])),(l()(),i.Z(173,0,null,4,2,\"ion-note\",[[\"item-end\",\"\"]],null,null,null,null,null)),i.Y(174,16384,null,0,Su.a,[Ql.a,i.j,i.z],null,null),(l()(),i._20(-1,null,[\"The boy who lived\"])),(l()(),i._20(-1,2,[\"\\n    \"])),(l()(),i._20(-1,null,[\"\\n\\n    \"])),(l()(),i.Z(178,0,null,null,13,\"ion-item\",[[\"class\",\"item item-block\"]],null,null,null,$l.b,$l.a)),i.Y(179,1097728,null,3,Kl.a,[Jl.a,Ql.a,i.j,i.z,[2,ln.a]],null,null),i._18(335544320,34,{contentLabel:0}),i._18(603979776,35,{_buttons:1}),i._18(603979776,36,{_icons:1}),i.Y(183,16384,null,0,nn.a,[],null,null),(l()(),i._20(-1,2,[\"\\n      \"])),(l()(),i.Z(185,0,null,0,1,\"ion-icon\",[[\"item-start\",\"\"],[\"name\",\"book\"],[\"role\",\"img\"]],[[2,\"hide\",null]],null,null,null,null)),i.Y(186,147456,[[36,4]],0,mn.a,[Ql.a,i.j,i.z],{name:[0,\"name\"]},null),(l()(),i._20(-1,2,[\"\\n      Hermoine\\n      \"])),(l()(),i.Z(188,0,null,4,2,\"ion-note\",[[\"item-end\",\"\"]],null,null,null,null,null)),i.Y(189,16384,null,0,Su.a,[Ql.a,i.j,i.z],null,null),(l()(),i._20(-1,null,[\"Muggle-born\"])),(l()(),i._20(-1,2,[\"\\n    \"])),(l()(),i._20(-1,null,[\"\\n\\n    \"])),(l()(),i.Z(193,0,null,null,13,\"ion-item\",[[\"class\",\"item item-block\"]],null,null,null,$l.b,$l.a)),i.Y(194,1097728,null,3,Kl.a,[Jl.a,Ql.a,i.j,i.z,[2,ln.a]],null,null),i._18(335544320,37,{contentLabel:0}),i._18(603979776,38,{_buttons:1}),i._18(603979776,39,{_icons:1}),i.Y(198,16384,null,0,nn.a,[],null,null),(l()(),i._20(-1,2,[\"\\n      \"])),(l()(),i.Z(200,0,null,0,1,\"ion-icon\",[[\"item-start\",\"\"],[\"name\",\"beer\"],[\"role\",\"img\"]],[[2,\"hide\",null]],null,null,null,null)),i.Y(201,147456,[[39,4]],0,mn.a,[Ql.a,i.j,i.z],{name:[0,\"name\"]},null),(l()(),i._20(-1,2,[\"\\n      Ron\\n      \"])),(l()(),i.Z(203,0,null,4,2,\"ion-note\",[[\"item-end\",\"\"]],null,null,null,null,null)),i.Y(204,16384,null,0,Su.a,[Ql.a,i.j,i.z],null,null),(l()(),i._20(-1,null,[\"Brilliant!\"])),(l()(),i._20(-1,2,[\"\\n    \"])),(l()(),i._20(-1,null,[\"\\n\\n\\n  \"])),(l()(),i._20(-1,1,[\"\\n\\n\\n\"])),(l()(),i._20(-1,null,[\"\\n\"]))],function(l,n){l(n,35,0,\"planet\"),l(n,51,0,\"false\"),l(n,58,0,\"body\"),l(n,69,0,\"leaf\"),l(n,72,0,\"secondary\",\"rose\"),l(n,83,0,\"flask\"),l(n,110,0,\"color-wand\"),l(n,126,0,\"true\"),l(n,133,0,\"brush\"),l(n,144,0,\"wine\"),l(n,171,0,\"flash\"),l(n,186,0,\"book\"),l(n,201,0,\"beer\")},function(l,n){l(n,4,0,i._13(n,5)._hidden,i._13(n,5)._sbPadding),l(n,13,0,i._13(n,14).statusbarPadding,i._13(n,14)._hasRefresher),l(n,34,0,i._13(n,35)._hidden),l(n,49,0,i._13(n,51)._disabled,i._13(n,51)._value,i._13(n,51)._activated),l(n,57,0,i._13(n,58)._hidden),l(n,68,0,i._13(n,69)._hidden),l(n,71,0,i._13(n,72)._hidden),l(n,82,0,i._13(n,83)._hidden),l(n,109,0,i._13(n,110)._hidden),l(n,124,0,i._13(n,126)._disabled,i._13(n,126)._value,i._13(n,126)._activated),l(n,132,0,i._13(n,133)._hidden),l(n,143,0,i._13(n,144)._hidden),l(n,170,0,i._13(n,171)._hidden),l(n,185,0,i._13(n,186)._hidden),l(n,200,0,i._13(n,201)._hidden)})},Wa)),i.Y(1,49152,null,0,G,[],null,null)],null,null)},{},{},[]),Ha=i.X({encapsulation:2,styles:[],data:{}}),Ga=i.V(\"ng-component\",$,function(l){return i._22(0,[(l()(),i.Z(0,0,null,null,1,\"ng-component\",[],null,null,null,function(l){return i._22(0,[(l()(),i._20(-1,null,[\"\\n\"])),(l()(),i.Z(1,0,null,null,10,\"ion-header\",[],null,null,null,null,null)),i.Y(2,16384,null,0,jn.a,[Ql.a,i.j,i.z,[2,fn.a]],null,null),(l()(),i._20(-1,null,[\"\\n  \"])),(l()(),i.Z(4,0,null,null,6,\"ion-navbar\",[[\"class\",\"toolbar\"]],[[8,\"hidden\",0],[2,\"statusbar-padding\",null]],null,null,Fn.b,Fn.a)),i.Y(5,49152,null,0,Pn.a,[Yn.a,[2,fn.a],[2,Ln.a],Ql.a,i.j,i.z],null,null),(l()(),i._20(-1,3,[\"\\n    \"])),(l()(),i.Z(7,0,null,3,2,\"ion-title\",[],null,null,null,vn.b,vn.a)),i.Y(8,49152,null,0,yn.a,[Ql.a,i.j,i.z,[2,kn.a],[2,Pn.a]],null,null),(l()(),i._20(-1,0,[\"Inset List\"])),(l()(),i._20(-1,3,[\"\\n  \"])),(l()(),i._20(-1,null,[\"\\n\"])),(l()(),i._20(-1,null,[\"\\n\\n\"])),(l()(),i.Z(13,0,null,null,9,\"ion-content\",[],[[2,\"statusbar-padding\",null],[2,\"has-refresher\",null]],null,null,Cn.b,Cn.a)),i.Y(14,4374528,null,0,wn.a,[Ql.a,on.a,_n.a,i.j,i.z,Yn.a,Zn.a,i.u,[2,fn.a],[2,Ln.a]],null,null),(l()(),i._20(-1,1,[\"\\n  \"])),(l()(),i.Z(16,0,null,1,5,\"ion-list\",[[\"inset\",\"\"]],null,null,null,null,null)),i.Y(17,16384,null,0,en.a,[Ql.a,i.j,i.z,on.a,tn.l,_n.a],null,null),(l()(),i._20(-1,null,[\"\\n    \"])),(l()(),i.U(16777216,null,null,1,null,function(l){return i._22(0,[(l()(),i.Z(0,0,null,null,6,\"button\",[[\"class\",\"item item-block\"],[\"ion-item\",\"\"]],null,[[null,\"click\"]],function(l,n,u){var a=!0;return\"click\"===n&&(a=!1!==l.component.itemSelected(l.context.$implicit)&&a),a},$l.b,$l.a)),i.Y(1,1097728,null,3,Kl.a,[Jl.a,Ql.a,i.j,i.z,[2,ln.a]],null,null),i._18(335544320,1,{contentLabel:0}),i._18(603979776,2,{_buttons:1}),i._18(603979776,3,{_icons:1}),i.Y(5,16384,null,0,nn.a,[],null,null),(l()(),i._20(6,2,[\"\\n      \",\"\\n    \"]))],null,function(l,n){l(n,6,0,n.context.$implicit)})})),i.Y(20,802816,null,0,sn.h,[i.I,i.F,i.p],{ngForOf:[0,\"ngForOf\"]},null),(l()(),i._20(-1,null,[\"\\n  \"])),(l()(),i._20(-1,1,[\"\\n\"])),(l()(),i._20(-1,null,[\"\\n\"]))],function(l,n){l(n,20,0,n.component.items)},function(l,n){l(n,4,0,i._13(n,5)._hidden,i._13(n,5)._sbPadding),l(n,13,0,i._13(n,14).statusbarPadding,i._13(n,14)._hasRefresher)})},Ha)),i.Y(1,49152,null,0,$,[],null,null)],null,null)},{},{},[]),$a=i.X({encapsulation:2,styles:[],data:{}}),Ka=i.V(\"ng-component\",K,function(l){return i._22(0,[(l()(),i.Z(0,0,null,null,1,\"ng-component\",[],null,null,null,function(l){return i._22(0,[(l()(),i._20(-1,null,[\"\\n\"])),(l()(),i.Z(1,0,null,null,10,\"ion-header\",[],null,null,null,null,null)),i.Y(2,16384,null,0,jn.a,[Ql.a,i.j,i.z,[2,fn.a]],null,null),(l()(),i._20(-1,null,[\"\\n  \"])),(l()(),i.Z(4,0,null,null,6,\"ion-navbar\",[[\"class\",\"toolbar\"]],[[8,\"hidden\",0],[2,\"statusbar-padding\",null]],null,null,Fn.b,Fn.a)),i.Y(5,49152,null,0,Pn.a,[Yn.a,[2,fn.a],[2,Ln.a],Ql.a,i.j,i.z],null,null),(l()(),i._20(-1,3,[\"\\n    \"])),(l()(),i.Z(7,0,null,3,2,\"ion-title\",[],null,null,null,vn.b,vn.a)),i.Y(8,49152,null,0,yn.a,[Ql.a,i.j,i.z,[2,kn.a],[2,Pn.a]],null,null),(l()(),i._20(-1,0,[\"Multiline Items\"])),(l()(),i._20(-1,3,[\"\\n  \"])),(l()(),i._20(-1,null,[\"\\n\"])),(l()(),i._20(-1,null,[\"\\n\\n\"])),(l()(),i.Z(13,0,null,null,210,\"ion-content\",[],[[2,\"statusbar-padding\",null],[2,\"has-refresher\",null]],null,null,Cn.b,Cn.a)),i.Y(14,4374528,null,0,wn.a,[Ql.a,on.a,_n.a,i.j,i.z,Yn.a,Zn.a,i.u,[2,fn.a],[2,Ln.a]],null,null),(l()(),i._20(-1,1,[\"\\n  \"])),(l()(),i.Z(16,0,null,1,102,\"ion-list\",[],null,null,null,null,null)),i.Y(17,16384,null,0,en.a,[Ql.a,i.j,i.z,on.a,tn.l,_n.a],null,null),(l()(),i._20(-1,null,[\"\\n    \"])),(l()(),i.Z(19,0,null,null,6,\"ion-list-header\",[[\"class\",\"item\"]],null,null,null,$l.b,$l.a)),i.Y(20,1097728,null,3,Kl.a,[Jl.a,Ql.a,i.j,i.z,[2,ln.a]],null,null),i._18(335544320,1,{contentLabel:0}),i._18(603979776,2,{_buttons:1}),i._18(603979776,3,{_icons:1}),i.Y(24,16384,null,0,Qu.a,[Ql.a,i.z,i.j,[8,null]],null,null),(l()(),i._20(-1,2,[\"\\n      Recent Conversations\\n    \"])),(l()(),i._20(-1,null,[\"\\n\\n    \"])),(l()(),i.Z(27,0,null,null,21,\"ion-item\",[[\"class\",\"item item-block\"]],null,null,null,$l.b,$l.a)),i.Y(28,1097728,null,3,Kl.a,[Jl.a,Ql.a,i.j,i.z,[2,ln.a]],null,null),i._18(335544320,4,{contentLabel:0}),i._18(603979776,5,{_buttons:1}),i._18(603979776,6,{_icons:1}),i.Y(32,16384,null,0,nn.a,[],null,null),(l()(),i._20(-1,2,[\"\\n      \"])),(l()(),i.Z(34,0,null,0,4,\"ion-avatar\",[[\"item-start\",\"\"]],null,null,null,null,null)),i.Y(35,16384,null,0,Iu.a,[],null,null),(l()(),i._20(-1,null,[\"\\n        \"])),(l()(),i.Z(37,0,null,null,0,\"img\",[[\"src\",\"assets/img/avatar-finn.png\"]],null,null,null,null,null)),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i._20(-1,2,[\"\\n      \"])),(l()(),i.Z(40,0,null,2,1,\"h2\",[],null,null,null,null,null)),(l()(),i._20(-1,null,[\"Finn\"])),(l()(),i._20(-1,2,[\"\\n      \"])),(l()(),i.Z(43,0,null,2,1,\"h3\",[],null,null,null,null,null)),(l()(),i._20(-1,null,[\"I'm a big deal\"])),(l()(),i._20(-1,2,[\"\\n      \"])),(l()(),i.Z(46,0,null,2,1,\"p\",[],null,null,null,null,null)),(l()(),i._20(-1,null,[\"Listen, I've had a pretty messed up day...\"])),(l()(),i._20(-1,2,[\"\\n    \"])),(l()(),i._20(-1,null,[\"\\n\\n    \"])),(l()(),i.Z(50,0,null,null,21,\"ion-item\",[[\"class\",\"item item-block\"]],null,null,null,$l.b,$l.a)),i.Y(51,1097728,null,3,Kl.a,[Jl.a,Ql.a,i.j,i.z,[2,ln.a]],null,null),i._18(335544320,7,{contentLabel:0}),i._18(603979776,8,{_buttons:1}),i._18(603979776,9,{_icons:1}),i.Y(55,16384,null,0,nn.a,[],null,null),(l()(),i._20(-1,2,[\"\\n      \"])),(l()(),i.Z(57,0,null,0,4,\"ion-avatar\",[[\"item-start\",\"\"]],null,null,null,null,null)),i.Y(58,16384,null,0,Iu.a,[],null,null),(l()(),i._20(-1,null,[\"\\n        \"])),(l()(),i.Z(60,0,null,null,0,\"img\",[[\"src\",\"assets/img/avatar-han.png\"]],null,null,null,null,null)),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i._20(-1,2,[\"\\n      \"])),(l()(),i.Z(63,0,null,2,1,\"h2\",[],null,null,null,null,null)),(l()(),i._20(-1,null,[\"Han\"])),(l()(),i._20(-1,2,[\"\\n      \"])),(l()(),i.Z(66,0,null,2,1,\"h3\",[],null,null,null,null,null)),(l()(),i._20(-1,null,[\"Look, kid...\"])),(l()(),i._20(-1,2,[\"\\n      \"])),(l()(),i.Z(69,0,null,2,1,\"p\",[],null,null,null,null,null)),(l()(),i._20(-1,null,[\"I've got enough on my plate as it is, and I...\"])),(l()(),i._20(-1,2,[\"\\n    \"])),(l()(),i._20(-1,null,[\"\\n\\n    \"])),(l()(),i.Z(73,0,null,null,21,\"ion-item\",[[\"class\",\"item item-block\"]],null,null,null,$l.b,$l.a)),i.Y(74,1097728,null,3,Kl.a,[Jl.a,Ql.a,i.j,i.z,[2,ln.a]],null,null),i._18(335544320,10,{contentLabel:0}),i._18(603979776,11,{_buttons:1}),i._18(603979776,12,{_icons:1}),i.Y(78,16384,null,0,nn.a,[],null,null),(l()(),i._20(-1,2,[\"\\n      \"])),(l()(),i.Z(80,0,null,0,4,\"ion-avatar\",[[\"item-start\",\"\"]],null,null,null,null,null)),i.Y(81,16384,null,0,Iu.a,[],null,null),(l()(),i._20(-1,null,[\"\\n        \"])),(l()(),i.Z(83,0,null,null,0,\"img\",[[\"src\",\"assets/img/avatar-rey.png\"]],null,null,null,null,null)),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i._20(-1,2,[\"\\n      \"])),(l()(),i.Z(86,0,null,2,1,\"h2\",[],null,null,null,null,null)),(l()(),i._20(-1,null,[\"Rey\"])),(l()(),i._20(-1,2,[\"\\n      \"])),(l()(),i.Z(89,0,null,2,1,\"h3\",[],null,null,null,null,null)),(l()(),i._20(-1,null,[\"I can handle myself\"])),(l()(),i._20(-1,2,[\"\\n      \"])),(l()(),i.Z(92,0,null,2,1,\"p\",[],null,null,null,null,null)),(l()(),i._20(-1,null,[\"You will remove these restraints and leave...\"])),(l()(),i._20(-1,2,[\"\\n    \"])),(l()(),i._20(-1,null,[\"\\n\\n    \"])),(l()(),i.Z(96,0,null,null,21,\"ion-item\",[[\"class\",\"item item-block\"]],null,null,null,$l.b,$l.a)),i.Y(97,1097728,null,3,Kl.a,[Jl.a,Ql.a,i.j,i.z,[2,ln.a]],null,null),i._18(335544320,13,{contentLabel:0}),i._18(603979776,14,{_buttons:1}),i._18(603979776,15,{_icons:1}),i.Y(101,16384,null,0,nn.a,[],null,null),(l()(),i._20(-1,2,[\"\\n      \"])),(l()(),i.Z(103,0,null,0,4,\"ion-avatar\",[[\"item-start\",\"\"]],null,null,null,null,null)),i.Y(104,16384,null,0,Iu.a,[],null,null),(l()(),i._20(-1,null,[\"\\n        \"])),(l()(),i.Z(106,0,null,null,0,\"img\",[[\"src\",\"assets/img/avatar-luke.png\"]],null,null,null,null,null)),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i._20(-1,2,[\"\\n      \"])),(l()(),i.Z(109,0,null,2,1,\"h2\",[],null,null,null,null,null)),(l()(),i._20(-1,null,[\"Luke\"])),(l()(),i._20(-1,2,[\"\\n      \"])),(l()(),i.Z(112,0,null,2,1,\"h3\",[],null,null,null,null,null)),(l()(),i._20(-1,null,[\"Your thoughts betray you\"])),(l()(),i._20(-1,2,[\"\\n      \"])),(l()(),i.Z(115,0,null,2,1,\"p\",[],null,null,null,null,null)),(l()(),i._20(-1,null,[\"I feel the good in you, the conflict...\"])),(l()(),i._20(-1,2,[\"\\n    \"])),(l()(),i._20(-1,null,[\"\\n  \"])),(l()(),i._20(-1,1,[\"\\n\\n  \"])),(l()(),i.Z(120,0,null,1,102,\"ion-list\",[],null,null,null,null,null)),i.Y(121,16384,null,0,en.a,[Ql.a,i.j,i.z,on.a,tn.l,_n.a],null,null),(l()(),i._20(-1,null,[\"\\n    \"])),(l()(),i.Z(123,0,null,null,6,\"ion-list-header\",[[\"class\",\"item\"]],null,null,null,$l.b,$l.a)),i.Y(124,1097728,null,3,Kl.a,[Jl.a,Ql.a,i.j,i.z,[2,ln.a]],null,null),i._18(335544320,16,{contentLabel:0}),i._18(603979776,17,{_buttons:1}),i._18(603979776,18,{_icons:1}),i.Y(128,16384,null,0,Qu.a,[Ql.a,i.z,i.j,[8,null]],null,null),(l()(),i._20(-1,2,[\"\\n      Online\\n    \"])),(l()(),i._20(-1,null,[\"\\n\\n    \"])),(l()(),i.Z(131,0,null,null,21,\"ion-item\",[[\"class\",\"item item-block\"]],null,null,null,$l.b,$l.a)),i.Y(132,1097728,null,3,Kl.a,[Jl.a,Ql.a,i.j,i.z,[2,ln.a]],null,null),i._18(335544320,19,{contentLabel:0}),i._18(603979776,20,{_buttons:1}),i._18(603979776,21,{_icons:1}),i.Y(136,16384,null,0,nn.a,[],null,null),(l()(),i._20(-1,2,[\"\\n      \"])),(l()(),i.Z(138,0,null,0,4,\"ion-avatar\",[[\"item-start\",\"\"]],null,null,null,null,null)),i.Y(139,16384,null,0,Iu.a,[],null,null),(l()(),i._20(-1,null,[\"\\n        \"])),(l()(),i.Z(141,0,null,null,0,\"img\",[[\"src\",\"assets/img/avatar-poe.png\"]],null,null,null,null,null)),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i._20(-1,2,[\"\\n      \"])),(l()(),i.Z(144,0,null,2,1,\"h2\",[],null,null,null,null,null)),(l()(),i._20(-1,null,[\"Poe\"])),(l()(),i._20(-1,2,[\"\\n      \"])),(l()(),i.Z(147,0,null,2,1,\"h3\",[],null,null,null,null,null)),(l()(),i._20(-1,null,[\"New Ride\"])),(l()(),i._20(-1,2,[\"\\n      \"])),(l()(),i.Z(150,0,null,2,1,\"p\",[],null,null,null,null,null)),(l()(),i._20(-1,null,[\"I just upgraded my X-Wing. Next time...\"])),(l()(),i._20(-1,2,[\"\\n    \"])),(l()(),i._20(-1,null,[\"\\n\\n    \"])),(l()(),i.Z(154,0,null,null,21,\"ion-item\",[[\"class\",\"item item-block\"]],null,null,null,$l.b,$l.a)),i.Y(155,1097728,null,3,Kl.a,[Jl.a,Ql.a,i.j,i.z,[2,ln.a]],null,null),i._18(335544320,22,{contentLabel:0}),i._18(603979776,23,{_buttons:1}),i._18(603979776,24,{_icons:1}),i.Y(159,16384,null,0,nn.a,[],null,null),(l()(),i._20(-1,2,[\"\\n      \"])),(l()(),i.Z(161,0,null,0,4,\"ion-avatar\",[[\"item-start\",\"\"]],null,null,null,null,null)),i.Y(162,16384,null,0,Iu.a,[],null,null),(l()(),i._20(-1,null,[\"\\n        \"])),(l()(),i.Z(164,0,null,null,0,\"img\",[[\"src\",\"assets/img/avatar-ben.png\"]],null,null,null,null,null)),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i._20(-1,2,[\"\\n      \"])),(l()(),i.Z(167,0,null,2,1,\"h2\",[],null,null,null,null,null)),(l()(),i._20(-1,null,[\"Ben\"])),(l()(),i._20(-1,2,[\"\\n      \"])),(l()(),i.Z(170,0,null,2,1,\"h3\",[],null,null,null,null,null)),(l()(),i._20(-1,null,[\"Move Along\"])),(l()(),i._20(-1,2,[\"\\n      \"])),(l()(),i.Z(173,0,null,2,1,\"p\",[],null,null,null,null,null)),(l()(),i._20(-1,null,[\"These aren't the droids you're looking for...\"])),(l()(),i._20(-1,2,[\"\\n    \"])),(l()(),i._20(-1,null,[\"\\n\\n    \"])),(l()(),i.Z(177,0,null,null,21,\"ion-item\",[[\"class\",\"item item-block\"]],null,null,null,$l.b,$l.a)),i.Y(178,1097728,null,3,Kl.a,[Jl.a,Ql.a,i.j,i.z,[2,ln.a]],null,null),i._18(335544320,25,{contentLabel:0}),i._18(603979776,26,{_buttons:1}),i._18(603979776,27,{_icons:1}),i.Y(182,16384,null,0,nn.a,[],null,null),(l()(),i._20(-1,2,[\"\\n      \"])),(l()(),i.Z(184,0,null,0,4,\"ion-avatar\",[[\"item-start\",\"\"]],null,null,null,null,null)),i.Y(185,16384,null,0,Iu.a,[],null,null),(l()(),i._20(-1,null,[\"\\n        \"])),(l()(),i.Z(187,0,null,null,0,\"img\",[[\"src\",\"assets/img/avatar-leia.png\"]],null,null,null,null,null)),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i._20(-1,2,[\"\\n      \"])),(l()(),i.Z(190,0,null,2,1,\"h2\",[],null,null,null,null,null)),(l()(),i._20(-1,null,[\"Leia\"])),(l()(),i._20(-1,2,[\"\\n      \"])),(l()(),i.Z(193,0,null,2,1,\"h3\",[],null,null,null,null,null)),(l()(),i._20(-1,null,[\"You're My Only Hope\"])),(l()(),i._20(-1,2,[\"\\n      \"])),(l()(),i.Z(196,0,null,2,1,\"p\",[],null,null,null,null,null)),(l()(),i._20(-1,null,[\"I've placed information vital to the survival...\"])),(l()(),i._20(-1,2,[\"\\n    \"])),(l()(),i._20(-1,null,[\"\\n\\n    \"])),(l()(),i.Z(200,0,null,null,21,\"ion-item\",[[\"class\",\"item item-block\"]],null,null,null,$l.b,$l.a)),i.Y(201,1097728,null,3,Kl.a,[Jl.a,Ql.a,i.j,i.z,[2,ln.a]],null,null),i._18(335544320,28,{contentLabel:0}),i._18(603979776,29,{_buttons:1}),i._18(603979776,30,{_icons:1}),i.Y(205,16384,null,0,nn.a,[],null,null),(l()(),i._20(-1,2,[\"\\n      \"])),(l()(),i.Z(207,0,null,0,4,\"ion-avatar\",[[\"item-start\",\"\"]],null,null,null,null,null)),i.Y(208,16384,null,0,Iu.a,[],null,null),(l()(),i._20(-1,null,[\"\\n        \"])),(l()(),i.Z(210,0,null,null,0,\"img\",[[\"src\",\"assets/img/avatar-yoda.png\"]],null,null,null,null,null)),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i._20(-1,2,[\"\\n      \"])),(l()(),i.Z(213,0,null,2,1,\"h2\",[],null,null,null,null,null)),(l()(),i._20(-1,null,[\"Yoda\"])),(l()(),i._20(-1,2,[\"\\n      \"])),(l()(),i.Z(216,0,null,2,1,\"h3\",[],null,null,null,null,null)),(l()(),i._20(-1,null,[\"Size matters not\"])),(l()(),i._20(-1,2,[\"\\n      \"])),(l()(),i.Z(219,0,null,2,1,\"p\",[],null,null,null,null,null)),(l()(),i._20(-1,null,[\"Do or do not. There is no try...\"])),(l()(),i._20(-1,2,[\"\\n    \"])),(l()(),i._20(-1,null,[\"\\n  \"])),(l()(),i._20(-1,1,[\"\\n\"])),(l()(),i._20(-1,null,[\"\\n\"]))],null,function(l,n){l(n,4,0,i._13(n,5)._hidden,i._13(n,5)._sbPadding),l(n,13,0,i._13(n,14).statusbarPadding,i._13(n,14)._hasRefresher)})},$a)),i.Y(1,49152,null,0,K,[],null,null)],null,null)},{},{},[]),Ja=i.X({encapsulation:2,styles:[],data:{}}),Qa=i.V(\"ng-component\",J,function(l){return i._22(0,[(l()(),i.Z(0,0,null,null,1,\"ng-component\",[],null,null,null,function(l){return i._22(0,[(l()(),i.Z(0,0,null,null,10,\"ion-header\",[],null,null,null,null,null)),i.Y(1,16384,null,0,jn.a,[Ql.a,i.j,i.z,[2,fn.a]],null,null),(l()(),i._20(-1,null,[\"\\n  \"])),(l()(),i.Z(3,0,null,null,6,\"ion-navbar\",[[\"class\",\"toolbar\"]],[[8,\"hidden\",0],[2,\"statusbar-padding\",null]],null,null,Fn.b,Fn.a)),i.Y(4,49152,null,0,Pn.a,[Yn.a,[2,fn.a],[2,Ln.a],Ql.a,i.j,i.z],null,null),(l()(),i._20(-1,3,[\"\\n    \"])),(l()(),i.Z(6,0,null,3,2,\"ion-title\",[],null,null,null,vn.b,vn.a)),i.Y(7,49152,null,0,yn.a,[Ql.a,i.j,i.z,[2,kn.a],[2,Pn.a]],null,null),(l()(),i._20(-1,0,[\"No Lines\"])),(l()(),i._20(-1,3,[\"\\n  \"])),(l()(),i._20(-1,null,[\"\\n\"])),(l()(),i._20(-1,null,[\"\\n\\n\"])),(l()(),i.Z(12,0,null,null,9,\"ion-content\",[],[[2,\"statusbar-padding\",null],[2,\"has-refresher\",null]],null,null,Cn.b,Cn.a)),i.Y(13,4374528,null,0,wn.a,[Ql.a,on.a,_n.a,i.j,i.z,Yn.a,Zn.a,i.u,[2,fn.a],[2,Ln.a]],null,null),(l()(),i._20(-1,1,[\"\\n  \"])),(l()(),i.Z(15,0,null,1,5,\"ion-list\",[[\"no-lines\",\"\"]],null,null,null,null,null)),i.Y(16,16384,null,0,en.a,[Ql.a,i.j,i.z,on.a,tn.l,_n.a],null,null),(l()(),i._20(-1,null,[\"\\n    \"])),(l()(),i.U(16777216,null,null,1,null,function(l){return i._22(0,[(l()(),i.Z(0,0,null,null,6,\"button\",[[\"class\",\"item item-block\"],[\"ion-item\",\"\"]],null,[[null,\"click\"]],function(l,n,u){var a=!0;return\"click\"===n&&(a=!1!==l.component.itemSelected(l.context.$implicit)&&a),a},$l.b,$l.a)),i.Y(1,1097728,null,3,Kl.a,[Jl.a,Ql.a,i.j,i.z,[2,ln.a]],null,null),i._18(335544320,1,{contentLabel:0}),i._18(603979776,2,{_buttons:1}),i._18(603979776,3,{_icons:1}),i.Y(5,16384,null,0,nn.a,[],null,null),(l()(),i._20(6,2,[\"\\n      \",\"\\n    \"]))],null,function(l,n){l(n,6,0,n.context.$implicit)})})),i.Y(19,802816,null,0,sn.h,[i.I,i.F,i.p],{ngForOf:[0,\"ngForOf\"]},null),(l()(),i._20(-1,null,[\"\\n  \"])),(l()(),i._20(-1,1,[\"\\n\"])),(l()(),i._20(-1,null,[\"\\n\"]))],function(l,n){l(n,19,0,n.component.items)},function(l,n){l(n,3,0,i._13(n,4)._hidden,i._13(n,4)._sbPadding),l(n,12,0,i._13(n,13).statusbarPadding,i._13(n,13)._hasRefresher)})},Ja)),i.Y(1,49152,null,0,J,[],null,null)],null,null)},{},{},[]),le=u(237),ne=u(100),ue=u(99),ae=i.X({encapsulation:2,styles:[],data:{}}),ee=i.V(\"ng-component\",Q,function(l){return i._22(0,[(l()(),i.Z(0,0,null,null,1,\"ng-component\",[],null,null,null,function(l){return i._22(0,[(l()(),i._20(-1,null,[\"\\n\"])),(l()(),i.Z(1,0,null,null,10,\"ion-header\",[],null,null,null,null,null)),i.Y(2,16384,null,0,jn.a,[Ql.a,i.j,i.z,[2,fn.a]],null,null),(l()(),i._20(-1,null,[\"\\n  \"])),(l()(),i.Z(4,0,null,null,6,\"ion-navbar\",[[\"class\",\"toolbar\"]],[[8,\"hidden\",0],[2,\"statusbar-padding\",null]],null,null,Fn.b,Fn.a)),i.Y(5,49152,null,0,Pn.a,[Yn.a,[2,fn.a],[2,Ln.a],Ql.a,i.j,i.z],null,null),(l()(),i._20(-1,3,[\"\\n    \"])),(l()(),i.Z(7,0,null,3,2,\"ion-title\",[],null,null,null,vn.b,vn.a)),i.Y(8,49152,null,0,yn.a,[Ql.a,i.j,i.z,[2,kn.a],[2,Pn.a]],null,null),(l()(),i._20(-1,0,[\"Sliding Items\"])),(l()(),i._20(-1,3,[\"\\n  \"])),(l()(),i._20(-1,null,[\"\\n\"])),(l()(),i._20(-1,null,[\"\\n\\n\"])),(l()(),i.Z(13,0,null,null,485,\"ion-content\",[[\"class\",\"outer-content\"]],[[2,\"statusbar-padding\",null],[2,\"has-refresher\",null]],null,null,Cn.b,Cn.a)),i.Y(14,4374528,null,0,wn.a,[Ql.a,on.a,_n.a,i.j,i.z,Yn.a,Zn.a,i.u,[2,fn.a],[2,Ln.a]],null,null),(l()(),i._20(-1,1,[\"\\n  \"])),(l()(),i.Z(16,0,null,1,316,\"ion-list\",[],null,null,null,null,null)),i.Y(17,16384,null,0,en.a,[Ql.a,i.j,i.z,on.a,tn.l,_n.a],null,null),(l()(),i._20(-1,null,[\"\\n    \"])),(l()(),i.Z(19,0,null,null,6,\"ion-list-header\",[[\"class\",\"item\"]],null,null,null,$l.b,$l.a)),i.Y(20,1097728,null,3,Kl.a,[Jl.a,Ql.a,i.j,i.z,[2,ln.a]],null,null),i._18(335544320,1,{contentLabel:0}),i._18(603979776,2,{_buttons:1}),i._18(603979776,3,{_icons:1}),i.Y(24,16384,null,0,Qu.a,[Ql.a,i.z,i.j,[8,null]],null,null),(l()(),i._20(-1,2,[\"\\n      Busters\\n    \"])),(l()(),i._20(-1,null,[\"\\n\\n    \"])),(l()(),i.Z(27,0,null,null,49,\"ion-item-sliding\",[],null,null,null,le.b,le.a)),i.Y(28,49152,null,2,ne.a,[[2,en.a],on.a,i.z,i.j,i.u],null,null),i._18(335544320,4,{item:0}),i._18(603979776,5,{_itemOptions:1}),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i.Z(32,0,null,0,18,\"ion-item\",[[\"class\",\"item item-block\"]],null,null,null,$l.b,$l.a)),i.Y(33,1097728,[[4,4]],3,Kl.a,[Jl.a,Ql.a,i.j,i.z,[2,ln.a]],null,null),i._18(335544320,6,{contentLabel:0}),i._18(603979776,7,{_buttons:1}),i._18(603979776,8,{_icons:1}),i.Y(37,16384,null,0,nn.a,[],null,null),(l()(),i._20(-1,2,[\"\\n        \"])),(l()(),i.Z(39,0,null,0,4,\"ion-avatar\",[[\"item-start\",\"\"]],null,null,null,null,null)),i.Y(40,16384,null,0,Iu.a,[],null,null),(l()(),i._20(-1,null,[\"\\n          \"])),(l()(),i.Z(42,0,null,null,0,\"img\",[[\"src\",\"assets/img/venkman.jpg\"]],null,null,null,null,null)),(l()(),i._20(-1,null,[\"\\n        \"])),(l()(),i._20(-1,2,[\"\\n        \"])),(l()(),i.Z(45,0,null,2,1,\"h2\",[],null,null,null,null,null)),(l()(),i._20(-1,null,[\"Venkman\"])),(l()(),i._20(-1,2,[\"\\n        \"])),(l()(),i.Z(48,0,null,2,1,\"p\",[],null,null,null,null,null)),(l()(),i._20(-1,null,[\"Back off man, I'm a scientist.\"])),(l()(),i._20(-1,2,[\"\\n      \"])),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i.Z(52,0,null,1,23,\"ion-item-options\",[],null,null,null,null,null)),i.Y(53,16384,[[5,4]],0,ue.a,[i.j,on.a],null,null),(l()(),i._20(-1,null,[\"\\n        \"])),(l()(),i.Z(55,0,null,null,5,\"button\",[[\"color\",\"light\"],[\"icon-start\",\"\"],[\"ion-button\",\"\"]],null,null,null,An.b,An.a)),i.Y(56,1097728,null,0,Rn.a,[[8,\"\"],Ql.a,i.j,i.z],{color:[0,\"color\"]},null),(l()(),i._20(-1,0,[\"\\n          \"])),(l()(),i.Z(58,0,null,0,1,\"ion-icon\",[[\"name\",\"ios-more\"],[\"role\",\"img\"]],[[2,\"hide\",null]],null,null,null,null)),i.Y(59,147456,null,0,mn.a,[Ql.a,i.j,i.z],{name:[0,\"name\"]},null),(l()(),i._20(-1,0,[\"\\n          More\\n        \"])),(l()(),i._20(-1,null,[\"\\n        \"])),(l()(),i.Z(62,0,null,null,5,\"button\",[[\"color\",\"primary\"],[\"icon-start\",\"\"],[\"ion-button\",\"\"]],null,null,null,An.b,An.a)),i.Y(63,1097728,null,0,Rn.a,[[8,\"\"],Ql.a,i.j,i.z],{color:[0,\"color\"]},null),(l()(),i._20(-1,0,[\"\\n          \"])),(l()(),i.Z(65,0,null,0,1,\"ion-icon\",[[\"name\",\"text\"],[\"role\",\"img\"]],[[2,\"hide\",null]],null,null,null,null)),i.Y(66,147456,null,0,mn.a,[Ql.a,i.j,i.z],{name:[0,\"name\"]},null),(l()(),i._20(-1,0,[\"\\n          Text\\n        \"])),(l()(),i._20(-1,null,[\"\\n        \"])),(l()(),i.Z(69,0,null,null,5,\"button\",[[\"color\",\"secondary\"],[\"icon-start\",\"\"],[\"ion-button\",\"\"]],null,null,null,An.b,An.a)),i.Y(70,1097728,null,0,Rn.a,[[8,\"\"],Ql.a,i.j,i.z],{color:[0,\"color\"]},null),(l()(),i._20(-1,0,[\"\\n          \"])),(l()(),i.Z(72,0,null,0,1,\"ion-icon\",[[\"name\",\"call\"],[\"role\",\"img\"]],[[2,\"hide\",null]],null,null,null,null)),i.Y(73,147456,null,0,mn.a,[Ql.a,i.j,i.z],{name:[0,\"name\"]},null),(l()(),i._20(-1,0,[\"\\n          Call\\n        \"])),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i._20(-1,null,[\"\\n    \"])),(l()(),i._20(-1,null,[\"\\n\\n\\n    \"])),(l()(),i.Z(78,0,null,null,49,\"ion-item-sliding\",[],null,null,null,le.b,le.a)),i.Y(79,49152,null,2,ne.a,[[2,en.a],on.a,i.z,i.j,i.u],null,null),i._18(335544320,9,{item:0}),i._18(603979776,10,{_itemOptions:1}),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i.Z(83,0,null,0,18,\"ion-item\",[[\"class\",\"item item-block\"]],null,null,null,$l.b,$l.a)),i.Y(84,1097728,[[9,4]],3,Kl.a,[Jl.a,Ql.a,i.j,i.z,[2,ln.a]],null,null),i._18(335544320,11,{contentLabel:0}),i._18(603979776,12,{_buttons:1}),i._18(603979776,13,{_icons:1}),i.Y(88,16384,null,0,nn.a,[],null,null),(l()(),i._20(-1,2,[\"\\n        \"])),(l()(),i.Z(90,0,null,0,4,\"ion-avatar\",[[\"item-start\",\"\"]],null,null,null,null,null)),i.Y(91,16384,null,0,Iu.a,[],null,null),(l()(),i._20(-1,null,[\"\\n          \"])),(l()(),i.Z(93,0,null,null,0,\"img\",[[\"src\",\"assets/img/spengler.jpg\"]],null,null,null,null,null)),(l()(),i._20(-1,null,[\"\\n        \"])),(l()(),i._20(-1,2,[\"\\n        \"])),(l()(),i.Z(96,0,null,2,1,\"h2\",[],null,null,null,null,null)),(l()(),i._20(-1,null,[\"Egon\"])),(l()(),i._20(-1,2,[\"\\n        \"])),(l()(),i.Z(99,0,null,2,1,\"p\",[],null,null,null,null,null)),(l()(),i._20(-1,null,[\"We're gonna go full stream.\"])),(l()(),i._20(-1,2,[\"\\n      \"])),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i.Z(103,0,null,1,23,\"ion-item-options\",[],null,null,null,null,null)),i.Y(104,16384,[[10,4]],0,ue.a,[i.j,on.a],null,null),(l()(),i._20(-1,null,[\"\\n        \"])),(l()(),i.Z(106,0,null,null,5,\"button\",[[\"color\",\"light\"],[\"icon-start\",\"\"],[\"ion-button\",\"\"]],null,null,null,An.b,An.a)),i.Y(107,1097728,null,0,Rn.a,[[8,\"\"],Ql.a,i.j,i.z],{color:[0,\"color\"]},null),(l()(),i._20(-1,0,[\"\\n          \"])),(l()(),i.Z(109,0,null,0,1,\"ion-icon\",[[\"name\",\"ios-more\"],[\"role\",\"img\"]],[[2,\"hide\",null]],null,null,null,null)),i.Y(110,147456,null,0,mn.a,[Ql.a,i.j,i.z],{name:[0,\"name\"]},null),(l()(),i._20(-1,0,[\"\\n          More\\n        \"])),(l()(),i._20(-1,null,[\"\\n        \"])),(l()(),i.Z(113,0,null,null,5,\"button\",[[\"color\",\"primary\"],[\"icon-start\",\"\"],[\"ion-button\",\"\"]],null,null,null,An.b,An.a)),i.Y(114,1097728,null,0,Rn.a,[[8,\"\"],Ql.a,i.j,i.z],{color:[0,\"color\"]},null),(l()(),i._20(-1,0,[\"\\n          \"])),(l()(),i.Z(116,0,null,0,1,\"ion-icon\",[[\"name\",\"text\"],[\"role\",\"img\"]],[[2,\"hide\",null]],null,null,null,null)),i.Y(117,147456,null,0,mn.a,[Ql.a,i.j,i.z],{name:[0,\"name\"]},null),(l()(),i._20(-1,0,[\"\\n          Text\\n        \"])),(l()(),i._20(-1,null,[\"\\n        \"])),(l()(),i.Z(120,0,null,null,5,\"button\",[[\"color\",\"secondary\"],[\"icon-start\",\"\"],[\"ion-button\",\"\"]],null,null,null,An.b,An.a)),i.Y(121,1097728,null,0,Rn.a,[[8,\"\"],Ql.a,i.j,i.z],{color:[0,\"color\"]},null),(l()(),i._20(-1,0,[\"\\n          \"])),(l()(),i.Z(123,0,null,0,1,\"ion-icon\",[[\"name\",\"call\"],[\"role\",\"img\"]],[[2,\"hide\",null]],null,null,null,null)),i.Y(124,147456,null,0,mn.a,[Ql.a,i.j,i.z],{name:[0,\"name\"]},null),(l()(),i._20(-1,0,[\"\\n          Call\\n        \"])),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i._20(-1,null,[\"\\n    \"])),(l()(),i._20(-1,null,[\"\\n\\n    \"])),(l()(),i.Z(129,0,null,null,49,\"ion-item-sliding\",[],null,null,null,le.b,le.a)),i.Y(130,49152,null,2,ne.a,[[2,en.a],on.a,i.z,i.j,i.u],null,null),i._18(335544320,14,{item:0}),i._18(603979776,15,{_itemOptions:1}),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i.Z(134,0,null,0,18,\"ion-item\",[[\"class\",\"item item-block\"]],null,null,null,$l.b,$l.a)),i.Y(135,1097728,[[14,4]],3,Kl.a,[Jl.a,Ql.a,i.j,i.z,[2,ln.a]],null,null),i._18(335544320,16,{contentLabel:0}),i._18(603979776,17,{_buttons:1}),i._18(603979776,18,{_icons:1}),i.Y(139,16384,null,0,nn.a,[],null,null),(l()(),i._20(-1,2,[\"\\n        \"])),(l()(),i.Z(141,0,null,0,4,\"ion-avatar\",[[\"item-start\",\"\"]],null,null,null,null,null)),i.Y(142,16384,null,0,Iu.a,[],null,null),(l()(),i._20(-1,null,[\"\\n          \"])),(l()(),i.Z(144,0,null,null,0,\"img\",[[\"src\",\"assets/img/stantz.jpg\"]],null,null,null,null,null)),(l()(),i._20(-1,null,[\"\\n        \"])),(l()(),i._20(-1,2,[\"\\n        \"])),(l()(),i.Z(147,0,null,2,1,\"h2\",[],null,null,null,null,null)),(l()(),i._20(-1,null,[\"Ray\"])),(l()(),i._20(-1,2,[\"\\n        \"])),(l()(),i.Z(150,0,null,2,1,\"p\",[],null,null,null,null,null)),(l()(),i._20(-1,null,[\"Ugly little spud, isn't he?\"])),(l()(),i._20(-1,2,[\"\\n      \"])),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i.Z(154,0,null,1,23,\"ion-item-options\",[],null,null,null,null,null)),i.Y(155,16384,[[15,4]],0,ue.a,[i.j,on.a],null,null),(l()(),i._20(-1,null,[\"\\n        \"])),(l()(),i.Z(157,0,null,null,5,\"button\",[[\"color\",\"light\"],[\"icon-start\",\"\"],[\"ion-button\",\"\"]],null,null,null,An.b,An.a)),i.Y(158,1097728,null,0,Rn.a,[[8,\"\"],Ql.a,i.j,i.z],{color:[0,\"color\"]},null),(l()(),i._20(-1,0,[\"\\n          \"])),(l()(),i.Z(160,0,null,0,1,\"ion-icon\",[[\"name\",\"ios-more\"],[\"role\",\"img\"]],[[2,\"hide\",null]],null,null,null,null)),i.Y(161,147456,null,0,mn.a,[Ql.a,i.j,i.z],{name:[0,\"name\"]},null),(l()(),i._20(-1,0,[\"\\n          More\\n        \"])),(l()(),i._20(-1,null,[\"\\n        \"])),(l()(),i.Z(164,0,null,null,5,\"button\",[[\"color\",\"primary\"],[\"icon-start\",\"\"],[\"ion-button\",\"\"]],null,null,null,An.b,An.a)),i.Y(165,1097728,null,0,Rn.a,[[8,\"\"],Ql.a,i.j,i.z],{color:[0,\"color\"]},null),(l()(),i._20(-1,0,[\"\\n          \"])),(l()(),i.Z(167,0,null,0,1,\"ion-icon\",[[\"name\",\"text\"],[\"role\",\"img\"]],[[2,\"hide\",null]],null,null,null,null)),i.Y(168,147456,null,0,mn.a,[Ql.a,i.j,i.z],{name:[0,\"name\"]},null),(l()(),i._20(-1,0,[\"\\n          Text\\n        \"])),(l()(),i._20(-1,null,[\"\\n        \"])),(l()(),i.Z(171,0,null,null,5,\"button\",[[\"color\",\"secondary\"],[\"icon-start\",\"\"],[\"ion-button\",\"\"]],null,null,null,An.b,An.a)),i.Y(172,1097728,null,0,Rn.a,[[8,\"\"],Ql.a,i.j,i.z],{color:[0,\"color\"]},null),(l()(),i._20(-1,0,[\"\\n          \"])),(l()(),i.Z(174,0,null,0,1,\"ion-icon\",[[\"name\",\"call\"],[\"role\",\"img\"]],[[2,\"hide\",null]],null,null,null,null)),i.Y(175,147456,null,0,mn.a,[Ql.a,i.j,i.z],{name:[0,\"name\"]},null),(l()(),i._20(-1,0,[\"\\n          Call\\n        \"])),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i._20(-1,null,[\"\\n    \"])),(l()(),i._20(-1,null,[\"\\n\\n    \"])),(l()(),i.Z(180,0,null,null,49,\"ion-item-sliding\",[],null,null,null,le.b,le.a)),i.Y(181,49152,null,2,ne.a,[[2,en.a],on.a,i.z,i.j,i.u],null,null),i._18(335544320,19,{item:0}),i._18(603979776,20,{_itemOptions:1}),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i.Z(185,0,null,0,18,\"ion-item\",[[\"class\",\"item item-block\"]],null,null,null,$l.b,$l.a)),i.Y(186,1097728,[[19,4]],3,Kl.a,[Jl.a,Ql.a,i.j,i.z,[2,ln.a]],null,null),i._18(335544320,21,{contentLabel:0}),i._18(603979776,22,{_buttons:1}),i._18(603979776,23,{_icons:1}),i.Y(190,16384,null,0,nn.a,[],null,null),(l()(),i._20(-1,2,[\"\\n        \"])),(l()(),i.Z(192,0,null,0,4,\"ion-avatar\",[[\"item-start\",\"\"]],null,null,null,null,null)),i.Y(193,16384,null,0,Iu.a,[],null,null),(l()(),i._20(-1,null,[\"\\n          \"])),(l()(),i.Z(195,0,null,null,0,\"img\",[[\"src\",\"assets/img/winston.jpg\"]],null,null,null,null,null)),(l()(),i._20(-1,null,[\"\\n        \"])),(l()(),i._20(-1,2,[\"\\n        \"])),(l()(),i.Z(198,0,null,2,1,\"h2\",[],null,null,null,null,null)),(l()(),i._20(-1,null,[\"Winston\"])),(l()(),i._20(-1,2,[\"\\n        \"])),(l()(),i.Z(201,0,null,2,1,\"p\",[],null,null,null,null,null)),(l()(),i._20(-1,null,[\"That's a big Twinkie.\"])),(l()(),i._20(-1,2,[\"\\n      \"])),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i.Z(205,0,null,1,23,\"ion-item-options\",[],null,null,null,null,null)),i.Y(206,16384,[[20,4]],0,ue.a,[i.j,on.a],null,null),(l()(),i._20(-1,null,[\"\\n        \"])),(l()(),i.Z(208,0,null,null,5,\"button\",[[\"color\",\"light\"],[\"icon-start\",\"\"],[\"ion-button\",\"\"]],null,null,null,An.b,An.a)),i.Y(209,1097728,null,0,Rn.a,[[8,\"\"],Ql.a,i.j,i.z],{color:[0,\"color\"]},null),(l()(),i._20(-1,0,[\"\\n          \"])),(l()(),i.Z(211,0,null,0,1,\"ion-icon\",[[\"name\",\"ios-more\"],[\"role\",\"img\"]],[[2,\"hide\",null]],null,null,null,null)),i.Y(212,147456,null,0,mn.a,[Ql.a,i.j,i.z],{name:[0,\"name\"]},null),(l()(),i._20(-1,0,[\"\\n          More\\n        \"])),(l()(),i._20(-1,null,[\"\\n        \"])),(l()(),i.Z(215,0,null,null,5,\"button\",[[\"color\",\"primary\"],[\"icon-start\",\"\"],[\"ion-button\",\"\"]],null,null,null,An.b,An.a)),i.Y(216,1097728,null,0,Rn.a,[[8,\"\"],Ql.a,i.j,i.z],{color:[0,\"color\"]},null),(l()(),i._20(-1,0,[\"\\n          \"])),(l()(),i.Z(218,0,null,0,1,\"ion-icon\",[[\"name\",\"text\"],[\"role\",\"img\"]],[[2,\"hide\",null]],null,null,null,null)),i.Y(219,147456,null,0,mn.a,[Ql.a,i.j,i.z],{name:[0,\"name\"]},null),(l()(),i._20(-1,0,[\"\\n          Text\\n        \"])),(l()(),i._20(-1,null,[\"\\n        \"])),(l()(),i.Z(222,0,null,null,5,\"button\",[[\"color\",\"secondary\"],[\"icon-start\",\"\"],[\"ion-button\",\"\"]],null,null,null,An.b,An.a)),i.Y(223,1097728,null,0,Rn.a,[[8,\"\"],Ql.a,i.j,i.z],{color:[0,\"color\"]},null),(l()(),i._20(-1,0,[\"\\n          \"])),(l()(),i.Z(225,0,null,0,1,\"ion-icon\",[[\"name\",\"call\"],[\"role\",\"img\"]],[[2,\"hide\",null]],null,null,null,null)),i.Y(226,147456,null,0,mn.a,[Ql.a,i.j,i.z],{name:[0,\"name\"]},null),(l()(),i._20(-1,0,[\"\\n          Call\\n        \"])),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i._20(-1,null,[\"\\n    \"])),(l()(),i._20(-1,null,[\"\\n\\n    \"])),(l()(),i.Z(231,0,null,null,49,\"ion-item-sliding\",[],null,null,null,le.b,le.a)),i.Y(232,49152,null,2,ne.a,[[2,en.a],on.a,i.z,i.j,i.u],null,null),i._18(335544320,24,{item:0}),i._18(603979776,25,{_itemOptions:1}),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i.Z(236,0,null,0,18,\"ion-item\",[[\"class\",\"item item-block\"]],null,null,null,$l.b,$l.a)),i.Y(237,1097728,[[24,4]],3,Kl.a,[Jl.a,Ql.a,i.j,i.z,[2,ln.a]],null,null),i._18(335544320,26,{contentLabel:0}),i._18(603979776,27,{_buttons:1}),i._18(603979776,28,{_icons:1}),i.Y(241,16384,null,0,nn.a,[],null,null),(l()(),i._20(-1,2,[\"\\n        \"])),(l()(),i.Z(243,0,null,0,4,\"ion-avatar\",[[\"item-start\",\"\"]],null,null,null,null,null)),i.Y(244,16384,null,0,Iu.a,[],null,null),(l()(),i._20(-1,null,[\"\\n          \"])),(l()(),i.Z(246,0,null,null,0,\"img\",[[\"src\",\"assets/img/tully.jpg\"]],null,null,null,null,null)),(l()(),i._20(-1,null,[\"\\n        \"])),(l()(),i._20(-1,2,[\"\\n        \"])),(l()(),i.Z(249,0,null,2,1,\"h2\",[],null,null,null,null,null)),(l()(),i._20(-1,null,[\"Tully\"])),(l()(),i._20(-1,2,[\"\\n        \"])),(l()(),i.Z(252,0,null,2,1,\"p\",[],null,null,null,null,null)),(l()(),i._20(-1,null,[\"Okay, who brought the dog?\"])),(l()(),i._20(-1,2,[\"\\n      \"])),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i.Z(256,0,null,1,23,\"ion-item-options\",[],null,null,null,null,null)),i.Y(257,16384,[[25,4]],0,ue.a,[i.j,on.a],null,null),(l()(),i._20(-1,null,[\"\\n        \"])),(l()(),i.Z(259,0,null,null,5,\"button\",[[\"color\",\"light\"],[\"icon-start\",\"\"],[\"ion-button\",\"\"]],null,null,null,An.b,An.a)),i.Y(260,1097728,null,0,Rn.a,[[8,\"\"],Ql.a,i.j,i.z],{color:[0,\"color\"]},null),(l()(),i._20(-1,0,[\"\\n          \"])),(l()(),i.Z(262,0,null,0,1,\"ion-icon\",[[\"name\",\"ios-more\"],[\"role\",\"img\"]],[[2,\"hide\",null]],null,null,null,null)),i.Y(263,147456,null,0,mn.a,[Ql.a,i.j,i.z],{name:[0,\"name\"]},null),(l()(),i._20(-1,0,[\"\\n          More\\n        \"])),(l()(),i._20(-1,null,[\"\\n        \"])),(l()(),i.Z(266,0,null,null,5,\"button\",[[\"color\",\"primary\"],[\"icon-start\",\"\"],[\"ion-button\",\"\"]],null,null,null,An.b,An.a)),i.Y(267,1097728,null,0,Rn.a,[[8,\"\"],Ql.a,i.j,i.z],{color:[0,\"color\"]},null),(l()(),i._20(-1,0,[\"\\n          \"])),(l()(),i.Z(269,0,null,0,1,\"ion-icon\",[[\"name\",\"text\"],[\"role\",\"img\"]],[[2,\"hide\",null]],null,null,null,null)),i.Y(270,147456,null,0,mn.a,[Ql.a,i.j,i.z],{name:[0,\"name\"]},null),(l()(),i._20(-1,0,[\"\\n          Text\\n        \"])),(l()(),i._20(-1,null,[\"\\n        \"])),(l()(),i.Z(273,0,null,null,5,\"button\",[[\"color\",\"secondary\"],[\"icon-start\",\"\"],[\"ion-button\",\"\"]],null,null,null,An.b,An.a)),i.Y(274,1097728,null,0,Rn.a,[[8,\"\"],Ql.a,i.j,i.z],{color:[0,\"color\"]},null),(l()(),i._20(-1,0,[\"\\n          \"])),(l()(),i.Z(276,0,null,0,1,\"ion-icon\",[[\"name\",\"call\"],[\"role\",\"img\"]],[[2,\"hide\",null]],null,null,null,null)),i.Y(277,147456,null,0,mn.a,[Ql.a,i.j,i.z],{name:[0,\"name\"]},null),(l()(),i._20(-1,0,[\"\\n          Call\\n        \"])),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i._20(-1,null,[\"\\n    \"])),(l()(),i._20(-1,null,[\"\\n\\n    \"])),(l()(),i.Z(282,0,null,null,49,\"ion-item-sliding\",[],null,null,null,le.b,le.a)),i.Y(283,49152,null,2,ne.a,[[2,en.a],on.a,i.z,i.j,i.u],null,null),i._18(335544320,29,{item:0}),i._18(603979776,30,{_itemOptions:1}),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i.Z(287,0,null,0,18,\"ion-item\",[[\"class\",\"item item-block\"]],null,null,null,$l.b,$l.a)),i.Y(288,1097728,[[29,4]],3,Kl.a,[Jl.a,Ql.a,i.j,i.z,[2,ln.a]],null,null),i._18(335544320,31,{contentLabel:0}),i._18(603979776,32,{_buttons:1}),i._18(603979776,33,{_icons:1}),i.Y(292,16384,null,0,nn.a,[],null,null),(l()(),i._20(-1,2,[\"\\n        \"])),(l()(),i.Z(294,0,null,0,4,\"ion-avatar\",[[\"item-start\",\"\"]],null,null,null,null,null)),i.Y(295,16384,null,0,Iu.a,[],null,null),(l()(),i._20(-1,null,[\"\\n          \"])),(l()(),i.Z(297,0,null,null,0,\"img\",[[\"src\",\"assets/img/barrett.jpg\"]],null,null,null,null,null)),(l()(),i._20(-1,null,[\"\\n        \"])),(l()(),i._20(-1,2,[\"\\n        \"])),(l()(),i.Z(300,0,null,2,1,\"h2\",[],null,null,null,null,null)),(l()(),i._20(-1,null,[\"Dana\"])),(l()(),i._20(-1,2,[\"\\n        \"])),(l()(),i.Z(303,0,null,2,1,\"p\",[],null,null,null,null,null)),(l()(),i._20(-1,null,[\"I am The Gatekeeper!\"])),(l()(),i._20(-1,2,[\"\\n      \"])),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i.Z(307,0,null,1,23,\"ion-item-options\",[],null,null,null,null,null)),i.Y(308,16384,[[30,4]],0,ue.a,[i.j,on.a],null,null),(l()(),i._20(-1,null,[\"\\n        \"])),(l()(),i.Z(310,0,null,null,5,\"button\",[[\"color\",\"light\"],[\"icon-start\",\"\"],[\"ion-button\",\"\"]],null,null,null,An.b,An.a)),i.Y(311,1097728,null,0,Rn.a,[[8,\"\"],Ql.a,i.j,i.z],{color:[0,\"color\"]},null),(l()(),i._20(-1,0,[\"\\n          \"])),(l()(),i.Z(313,0,null,0,1,\"ion-icon\",[[\"name\",\"ios-more\"],[\"role\",\"img\"]],[[2,\"hide\",null]],null,null,null,null)),i.Y(314,147456,null,0,mn.a,[Ql.a,i.j,i.z],{name:[0,\"name\"]},null),(l()(),i._20(-1,0,[\"\\n          More\\n        \"])),(l()(),i._20(-1,null,[\"\\n        \"])),(l()(),i.Z(317,0,null,null,5,\"button\",[[\"color\",\"primary\"],[\"icon-start\",\"\"],[\"ion-button\",\"\"]],null,null,null,An.b,An.a)),i.Y(318,1097728,null,0,Rn.a,[[8,\"\"],Ql.a,i.j,i.z],{color:[0,\"color\"]},null),(l()(),i._20(-1,0,[\"\\n          \"])),(l()(),i.Z(320,0,null,0,1,\"ion-icon\",[[\"name\",\"text\"],[\"role\",\"img\"]],[[2,\"hide\",null]],null,null,null,null)),i.Y(321,147456,null,0,mn.a,[Ql.a,i.j,i.z],{name:[0,\"name\"]},null),(l()(),i._20(-1,0,[\"\\n          Text\\n        \"])),(l()(),i._20(-1,null,[\"\\n        \"])),(l()(),i.Z(324,0,null,null,5,\"button\",[[\"color\",\"secondary\"],[\"icon-start\",\"\"],[\"ion-button\",\"\"]],null,null,null,An.b,An.a)),i.Y(325,1097728,null,0,Rn.a,[[8,\"\"],Ql.a,i.j,i.z],{color:[0,\"color\"]},null),(l()(),i._20(-1,0,[\"\\n          \"])),(l()(),i.Z(327,0,null,0,1,\"ion-icon\",[[\"name\",\"call\"],[\"role\",\"img\"]],[[2,\"hide\",null]],null,null,null,null)),i.Y(328,147456,null,0,mn.a,[Ql.a,i.j,i.z],{name:[0,\"name\"]},null),(l()(),i._20(-1,0,[\"\\n          Call\\n        \"])),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i._20(-1,null,[\"\\n    \"])),(l()(),i._20(-1,null,[\"\\n\\n  \"])),(l()(),i._20(-1,1,[\"\\n\\n  \"])),(l()(),i.Z(334,0,null,1,163,\"ion-list\",[],null,null,null,null,null)),i.Y(335,16384,null,0,en.a,[Ql.a,i.j,i.z,on.a,tn.l,_n.a],null,null),(l()(),i._20(-1,null,[\"\\n    \"])),(l()(),i.Z(337,0,null,null,6,\"ion-list-header\",[[\"class\",\"item\"]],null,null,null,$l.b,$l.a)),i.Y(338,1097728,null,3,Kl.a,[Jl.a,Ql.a,i.j,i.z,[2,ln.a]],null,null),i._18(335544320,34,{contentLabel:0}),i._18(603979776,35,{_buttons:1}),i._18(603979776,36,{_icons:1}),i.Y(342,16384,null,0,Qu.a,[Ql.a,i.z,i.j,[8,null]],null,null),(l()(),i._20(-1,2,[\"\\n      Ghosts\\n    \"])),(l()(),i._20(-1,null,[\"\\n\\n    \"])),(l()(),i.Z(345,0,null,null,49,\"ion-item-sliding\",[],null,null,null,le.b,le.a)),i.Y(346,49152,null,2,ne.a,[[2,en.a],on.a,i.z,i.j,i.u],null,null),i._18(335544320,37,{item:0}),i._18(603979776,38,{_itemOptions:1}),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i.Z(350,0,null,0,18,\"ion-item\",[[\"class\",\"item item-block\"]],null,null,null,$l.b,$l.a)),i.Y(351,1097728,[[37,4]],3,Kl.a,[Jl.a,Ql.a,i.j,i.z,[2,ln.a]],null,null),i._18(335544320,39,{contentLabel:0}),i._18(603979776,40,{_buttons:1}),i._18(603979776,41,{_icons:1}),i.Y(355,16384,null,0,nn.a,[],null,null),(l()(),i._20(-1,2,[\"\\n        \"])),(l()(),i.Z(357,0,null,0,4,\"ion-avatar\",[[\"item-start\",\"\"]],null,null,null,null,null)),i.Y(358,16384,null,0,Iu.a,[],null,null),(l()(),i._20(-1,null,[\"\\n          \"])),(l()(),i.Z(360,0,null,null,0,\"img\",[[\"src\",\"assets/img/slimer.jpg\"]],null,null,null,null,null)),(l()(),i._20(-1,null,[\"\\n        \"])),(l()(),i._20(-1,2,[\"\\n        \"])),(l()(),i.Z(363,0,null,2,1,\"h2\",[],null,null,null,null,null)),(l()(),i._20(-1,null,[\"Slimer\"])),(l()(),i._20(-1,2,[\"\\n        \"])),(l()(),i.Z(366,0,null,2,1,\"p\",[],null,null,null,null,null)),(l()(),i._20(-1,null,[\"Boo!\"])),(l()(),i._20(-1,2,[\"\\n      \"])),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i.Z(370,0,null,1,23,\"ion-item-options\",[],null,null,null,null,null)),i.Y(371,16384,[[38,4]],0,ue.a,[i.j,on.a],null,null),(l()(),i._20(-1,null,[\"\\n        \"])),(l()(),i.Z(373,0,null,null,5,\"button\",[[\"color\",\"light\"],[\"icon-start\",\"\"],[\"ion-button\",\"\"]],null,null,null,An.b,An.a)),i.Y(374,1097728,null,0,Rn.a,[[8,\"\"],Ql.a,i.j,i.z],{color:[0,\"color\"]},null),(l()(),i._20(-1,0,[\"\\n          \"])),(l()(),i.Z(376,0,null,0,1,\"ion-icon\",[[\"name\",\"ios-more\"],[\"role\",\"img\"]],[[2,\"hide\",null]],null,null,null,null)),i.Y(377,147456,null,0,mn.a,[Ql.a,i.j,i.z],{name:[0,\"name\"]},null),(l()(),i._20(-1,0,[\"\\n          More\\n        \"])),(l()(),i._20(-1,null,[\"\\n        \"])),(l()(),i.Z(380,0,null,null,5,\"button\",[[\"color\",\"primary\"],[\"icon-start\",\"\"],[\"ion-button\",\"\"]],null,null,null,An.b,An.a)),i.Y(381,1097728,null,0,Rn.a,[[8,\"\"],Ql.a,i.j,i.z],{color:[0,\"color\"]},null),(l()(),i._20(-1,0,[\"\\n          \"])),(l()(),i.Z(383,0,null,0,1,\"ion-icon\",[[\"name\",\"text\"],[\"role\",\"img\"]],[[2,\"hide\",null]],null,null,null,null)),i.Y(384,147456,null,0,mn.a,[Ql.a,i.j,i.z],{name:[0,\"name\"]},null),(l()(),i._20(-1,0,[\"\\n          Text\\n        \"])),(l()(),i._20(-1,null,[\"\\n        \"])),(l()(),i.Z(387,0,null,null,5,\"button\",[[\"color\",\"secondary\"],[\"icon-start\",\"\"],[\"ion-button\",\"\"]],null,null,null,An.b,An.a)),i.Y(388,1097728,null,0,Rn.a,[[8,\"\"],Ql.a,i.j,i.z],{color:[0,\"color\"]},null),(l()(),i._20(-1,0,[\"\\n          \"])),(l()(),i.Z(390,0,null,0,1,\"ion-icon\",[[\"name\",\"call\"],[\"role\",\"img\"]],[[2,\"hide\",null]],null,null,null,null)),i.Y(391,147456,null,0,mn.a,[Ql.a,i.j,i.z],{name:[0,\"name\"]},null),(l()(),i._20(-1,0,[\"\\n          Call\\n        \"])),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i._20(-1,null,[\"\\n    \"])),(l()(),i._20(-1,null,[\"\\n\\n    \"])),(l()(),i.Z(396,0,null,null,49,\"ion-item-sliding\",[],null,null,null,le.b,le.a)),i.Y(397,49152,null,2,ne.a,[[2,en.a],on.a,i.z,i.j,i.u],null,null),i._18(335544320,42,{item:0}),i._18(603979776,43,{_itemOptions:1}),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i.Z(401,0,null,0,18,\"ion-item\",[[\"class\",\"item item-block\"]],null,null,null,$l.b,$l.a)),i.Y(402,1097728,[[42,4]],3,Kl.a,[Jl.a,Ql.a,i.j,i.z,[2,ln.a]],null,null),i._18(335544320,44,{contentLabel:0}),i._18(603979776,45,{_buttons:1}),i._18(603979776,46,{_icons:1}),i.Y(406,16384,null,0,nn.a,[],null,null),(l()(),i._20(-1,2,[\"\\n        \"])),(l()(),i.Z(408,0,null,0,4,\"ion-avatar\",[[\"item-start\",\"\"]],null,null,null,null,null)),i.Y(409,16384,null,0,Iu.a,[],null,null),(l()(),i._20(-1,null,[\"\\n          \"])),(l()(),i.Z(411,0,null,null,0,\"img\",[[\"src\",\"assets/img/marshmallow-man.png\"]],null,null,null,null,null)),(l()(),i._20(-1,null,[\"\\n        \"])),(l()(),i._20(-1,2,[\"\\n        \"])),(l()(),i.Z(414,0,null,2,1,\"h2\",[],null,null,null,null,null)),(l()(),i._20(-1,null,[\"Stay Puft Marshmallow Man\"])),(l()(),i._20(-1,2,[\"\\n        \"])),(l()(),i.Z(417,0,null,2,1,\"p\",[],null,null,null,null,null)),(l()(),i._20(-1,null,[\"Never cross the streams!\"])),(l()(),i._20(-1,2,[\"\\n      \"])),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i.Z(421,0,null,1,23,\"ion-item-options\",[],null,null,null,null,null)),i.Y(422,16384,[[43,4]],0,ue.a,[i.j,on.a],null,null),(l()(),i._20(-1,null,[\"\\n        \"])),(l()(),i.Z(424,0,null,null,5,\"button\",[[\"color\",\"light\"],[\"icon-start\",\"\"],[\"ion-button\",\"\"]],null,null,null,An.b,An.a)),i.Y(425,1097728,null,0,Rn.a,[[8,\"\"],Ql.a,i.j,i.z],{color:[0,\"color\"]},null),(l()(),i._20(-1,0,[\"\\n          \"])),(l()(),i.Z(427,0,null,0,1,\"ion-icon\",[[\"name\",\"ios-more\"],[\"role\",\"img\"]],[[2,\"hide\",null]],null,null,null,null)),i.Y(428,147456,null,0,mn.a,[Ql.a,i.j,i.z],{name:[0,\"name\"]},null),(l()(),i._20(-1,0,[\"\\n          More\\n        \"])),(l()(),i._20(-1,null,[\"\\n        \"])),(l()(),i.Z(431,0,null,null,5,\"button\",[[\"color\",\"primary\"],[\"icon-start\",\"\"],[\"ion-button\",\"\"]],null,null,null,An.b,An.a)),i.Y(432,1097728,null,0,Rn.a,[[8,\"\"],Ql.a,i.j,i.z],{color:[0,\"color\"]},null),(l()(),i._20(-1,0,[\"\\n          \"])),(l()(),i.Z(434,0,null,0,1,\"ion-icon\",[[\"name\",\"text\"],[\"role\",\"img\"]],[[2,\"hide\",null]],null,null,null,null)),i.Y(435,147456,null,0,mn.a,[Ql.a,i.j,i.z],{name:[0,\"name\"]},null),(l()(),i._20(-1,0,[\"\\n          Text\\n        \"])),(l()(),i._20(-1,null,[\"\\n        \"])),(l()(),i.Z(438,0,null,null,5,\"button\",[[\"color\",\"secondary\"],[\"icon-start\",\"\"],[\"ion-button\",\"\"]],null,null,null,An.b,An.a)),i.Y(439,1097728,null,0,Rn.a,[[8,\"\"],Ql.a,i.j,i.z],{color:[0,\"color\"]},null),(l()(),i._20(-1,0,[\"\\n          \"])),(l()(),i.Z(441,0,null,0,1,\"ion-icon\",[[\"name\",\"call\"],[\"role\",\"img\"]],[[2,\"hide\",null]],null,null,null,null)),i.Y(442,147456,null,0,mn.a,[Ql.a,i.j,i.z],{name:[0,\"name\"]},null),(l()(),i._20(-1,0,[\"\\n          Call\\n        \"])),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i._20(-1,null,[\"\\n    \"])),(l()(),i._20(-1,null,[\"\\n\\n    \"])),(l()(),i.Z(447,0,null,null,49,\"ion-item-sliding\",[],null,null,null,le.b,le.a)),i.Y(448,49152,null,2,ne.a,[[2,en.a],on.a,i.z,i.j,i.u],null,null),i._18(335544320,47,{item:0}),i._18(603979776,48,{_itemOptions:1}),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i.Z(452,0,null,0,18,\"ion-item\",[[\"class\",\"item item-block\"]],null,null,null,$l.b,$l.a)),i.Y(453,1097728,[[47,4]],3,Kl.a,[Jl.a,Ql.a,i.j,i.z,[2,ln.a]],null,null),i._18(335544320,49,{contentLabel:0}),i._18(603979776,50,{_buttons:1}),i._18(603979776,51,{_icons:1}),i.Y(457,16384,null,0,nn.a,[],null,null),(l()(),i._20(-1,2,[\"\\n        \"])),(l()(),i.Z(459,0,null,0,4,\"ion-avatar\",[[\"item-start\",\"\"]],null,null,null,null,null)),i.Y(460,16384,null,0,Iu.a,[],null,null),(l()(),i._20(-1,null,[\"\\n          \"])),(l()(),i.Z(462,0,null,null,0,\"img\",[[\"src\",\"assets/img/gozer.png\"]],null,null,null,null,null)),(l()(),i._20(-1,null,[\"\\n        \"])),(l()(),i._20(-1,2,[\"\\n        \"])),(l()(),i.Z(465,0,null,2,1,\"h2\",[],null,null,null,null,null)),(l()(),i._20(-1,null,[\"Gozer\"])),(l()(),i._20(-1,2,[\"\\n        \"])),(l()(),i.Z(468,0,null,2,1,\"p\",[],null,null,null,null,null)),(l()(),i._20(-1,null,[\"Are you a God?\"])),(l()(),i._20(-1,2,[\"\\n      \"])),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i.Z(472,0,null,1,23,\"ion-item-options\",[],null,null,null,null,null)),i.Y(473,16384,[[48,4]],0,ue.a,[i.j,on.a],null,null),(l()(),i._20(-1,null,[\"\\n        \"])),(l()(),i.Z(475,0,null,null,5,\"button\",[[\"color\",\"light\"],[\"icon-start\",\"\"],[\"ion-button\",\"\"]],null,null,null,An.b,An.a)),i.Y(476,1097728,null,0,Rn.a,[[8,\"\"],Ql.a,i.j,i.z],{color:[0,\"color\"]},null),(l()(),i._20(-1,0,[\"\\n          \"])),(l()(),i.Z(478,0,null,0,1,\"ion-icon\",[[\"name\",\"ios-more\"],[\"role\",\"img\"]],[[2,\"hide\",null]],null,null,null,null)),i.Y(479,147456,null,0,mn.a,[Ql.a,i.j,i.z],{name:[0,\"name\"]},null),(l()(),i._20(-1,0,[\"\\n          More\\n        \"])),(l()(),i._20(-1,null,[\"\\n        \"])),(l()(),i.Z(482,0,null,null,5,\"button\",[[\"color\",\"primary\"],[\"icon-start\",\"\"],[\"ion-button\",\"\"]],null,null,null,An.b,An.a)),i.Y(483,1097728,null,0,Rn.a,[[8,\"\"],Ql.a,i.j,i.z],{color:[0,\"color\"]},null),(l()(),i._20(-1,0,[\"\\n          \"])),(l()(),i.Z(485,0,null,0,1,\"ion-icon\",[[\"name\",\"text\"],[\"role\",\"img\"]],[[2,\"hide\",null]],null,null,null,null)),i.Y(486,147456,null,0,mn.a,[Ql.a,i.j,i.z],{name:[0,\"name\"]},null),(l()(),i._20(-1,0,[\"\\n          Text\\n        \"])),(l()(),i._20(-1,null,[\"\\n        \"])),(l()(),i.Z(489,0,null,null,5,\"button\",[[\"color\",\"secondary\"],[\"icon-start\",\"\"],[\"ion-button\",\"\"]],null,null,null,An.b,An.a)),i.Y(490,1097728,null,0,Rn.a,[[8,\"\"],Ql.a,i.j,i.z],{color:[0,\"color\"]},null),(l()(),i._20(-1,0,[\"\\n          \"])),(l()(),i.Z(492,0,null,0,1,\"ion-icon\",[[\"name\",\"call\"],[\"role\",\"img\"]],[[2,\"hide\",null]],null,null,null,null)),i.Y(493,147456,null,0,mn.a,[Ql.a,i.j,i.z],{name:[0,\"name\"]},null),(l()(),i._20(-1,0,[\"\\n          Call\\n        \"])),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i._20(-1,null,[\"\\n    \"])),(l()(),i._20(-1,null,[\"\\n\\n  \"])),(l()(),i._20(-1,1,[\"\\n\\n\"])),(l()(),i._20(-1,null,[\"\\n\"]))],function(l,n){l(n,56,0,\"light\"),l(n,59,0,\"ios-more\"),l(n,63,0,\"primary\"),l(n,66,0,\"text\"),l(n,70,0,\"secondary\"),l(n,73,0,\"call\"),l(n,107,0,\"light\"),l(n,110,0,\"ios-more\"),l(n,114,0,\"primary\"),l(n,117,0,\"text\"),l(n,121,0,\"secondary\"),l(n,124,0,\"call\"),l(n,158,0,\"light\"),l(n,161,0,\"ios-more\"),l(n,165,0,\"primary\"),l(n,168,0,\"text\"),l(n,172,0,\"secondary\"),l(n,175,0,\"call\"),l(n,209,0,\"light\"),l(n,212,0,\"ios-more\"),l(n,216,0,\"primary\"),l(n,219,0,\"text\"),l(n,223,0,\"secondary\"),l(n,226,0,\"call\"),l(n,260,0,\"light\"),l(n,263,0,\"ios-more\"),l(n,267,0,\"primary\"),l(n,270,0,\"text\"),l(n,274,0,\"secondary\"),l(n,277,0,\"call\"),l(n,311,0,\"light\"),l(n,314,0,\"ios-more\"),l(n,318,0,\"primary\"),l(n,321,0,\"text\"),l(n,325,0,\"secondary\"),l(n,328,0,\"call\"),l(n,374,0,\"light\"),l(n,377,0,\"ios-more\"),l(n,381,0,\"primary\"),l(n,384,0,\"text\"),l(n,388,0,\"secondary\"),l(n,391,0,\"call\"),l(n,425,0,\"light\"),l(n,428,0,\"ios-more\"),l(n,432,0,\"primary\"),l(n,435,0,\"text\"),l(n,439,0,\"secondary\"),l(n,442,0,\"call\"),l(n,476,0,\"light\"),l(n,479,0,\"ios-more\"),l(n,483,0,\"primary\"),l(n,486,0,\"text\"),l(n,490,0,\"secondary\"),l(n,493,0,\"call\")},function(l,n){l(n,4,0,i._13(n,5)._hidden,i._13(n,5)._sbPadding),l(n,13,0,i._13(n,14).statusbarPadding,i._13(n,14)._hasRefresher),l(n,58,0,i._13(n,59)._hidden),l(n,65,0,i._13(n,66)._hidden),l(n,72,0,i._13(n,73)._hidden),l(n,109,0,i._13(n,110)._hidden),l(n,116,0,i._13(n,117)._hidden),l(n,123,0,i._13(n,124)._hidden),l(n,160,0,i._13(n,161)._hidden),l(n,167,0,i._13(n,168)._hidden),l(n,174,0,i._13(n,175)._hidden),l(n,211,0,i._13(n,212)._hidden),l(n,218,0,i._13(n,219)._hidden),l(n,225,0,i._13(n,226)._hidden),l(n,262,0,i._13(n,263)._hidden),l(n,269,0,i._13(n,270)._hidden),l(n,276,0,i._13(n,277)._hidden),l(n,313,0,i._13(n,314)._hidden),l(n,320,0,i._13(n,321)._hidden),l(n,327,0,i._13(n,328)._hidden),l(n,376,0,i._13(n,377)._hidden),l(n,383,0,i._13(n,384)._hidden),l(n,390,0,i._13(n,391)._hidden),l(n,427,0,i._13(n,428)._hidden),l(n,434,0,i._13(n,435)._hidden),l(n,441,0,i._13(n,442)._hidden),l(n,478,0,i._13(n,479)._hidden),l(n,485,0,i._13(n,486)._hidden),l(n,492,0,i._13(n,493)._hidden)})},ae)),i.Y(1,49152,null,0,Q,[],null,null)],null,null)},{},{},[]),oe=u(122),te=i.X({encapsulation:2,styles:[],data:{}}),ie=i.V(\"ng-component\",ll,function(l){return i._22(0,[(l()(),i.Z(0,0,null,null,1,\"ng-component\",[],null,null,null,function(l){return i._22(0,[(l()(),i._20(-1,null,[\"\\n\"])),(l()(),i.Z(1,0,null,null,10,\"ion-header\",[],null,null,null,null,null)),i.Y(2,16384,null,0,jn.a,[Ql.a,i.j,i.z,[2,fn.a]],null,null),(l()(),i._20(-1,null,[\"\\n  \"])),(l()(),i.Z(4,0,null,null,6,\"ion-navbar\",[[\"class\",\"toolbar\"]],[[8,\"hidden\",0],[2,\"statusbar-padding\",null]],null,null,Fn.b,Fn.a)),i.Y(5,49152,null,0,Pn.a,[Yn.a,[2,fn.a],[2,Ln.a],Ql.a,i.j,i.z],null,null),(l()(),i._20(-1,3,[\"\\n    \"])),(l()(),i.Z(7,0,null,3,2,\"ion-title\",[],null,null,null,vn.b,vn.a)),i.Y(8,49152,null,0,yn.a,[Ql.a,i.j,i.z,[2,kn.a],[2,Pn.a]],null,null),(l()(),i._20(-1,0,[\"Thumbnails\"])),(l()(),i._20(-1,3,[\"\\n  \"])),(l()(),i._20(-1,null,[\"\\n\"])),(l()(),i._20(-1,null,[\"\\n\\n\"])),(l()(),i.Z(13,0,null,null,174,\"ion-content\",[],[[2,\"statusbar-padding\",null],[2,\"has-refresher\",null]],null,null,Cn.b,Cn.a)),i.Y(14,4374528,null,0,wn.a,[Ql.a,on.a,_n.a,i.j,i.z,Yn.a,Zn.a,i.u,[2,fn.a],[2,Ln.a]],null,null),(l()(),i._20(-1,1,[\"\\n  \"])),(l()(),i.Z(16,0,null,1,170,\"ion-list\",[],null,null,null,null,null)),i.Y(17,16384,null,0,en.a,[Ql.a,i.j,i.z,on.a,tn.l,_n.a],null,null),(l()(),i._20(-1,null,[\"\\n\\n    \"])),(l()(),i.Z(19,0,null,null,22,\"ion-item\",[[\"class\",\"item item-block\"]],null,null,null,$l.b,$l.a)),i.Y(20,1097728,null,3,Kl.a,[Jl.a,Ql.a,i.j,i.z,[2,ln.a]],null,null),i._18(335544320,1,{contentLabel:0}),i._18(603979776,2,{_buttons:1}),i._18(603979776,3,{_icons:1}),i.Y(24,16384,null,0,nn.a,[],null,null),(l()(),i._20(-1,2,[\"\\n      \"])),(l()(),i.Z(26,0,null,0,4,\"ion-thumbnail\",[[\"item-start\",\"\"]],null,null,null,null,null)),i.Y(27,16384,null,0,oe.a,[],null,null),(l()(),i._20(-1,null,[\"\\n        \"])),(l()(),i.Z(29,0,null,null,0,\"img\",[[\"src\",\"assets/img/thumbnail-totoro.png\"]],null,null,null,null,null)),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i._20(-1,2,[\"\\n      \"])),(l()(),i.Z(32,0,null,2,1,\"h2\",[],null,null,null,null,null)),(l()(),i._20(-1,null,[\"My Neighbor Totoro\"])),(l()(),i._20(-1,2,[\"\\n      \"])),(l()(),i.Z(35,0,null,2,1,\"p\",[],null,null,null,null,null)),(l()(),i._20(-1,null,[\"Hayao Miyazaki • 1988\"])),(l()(),i._20(-1,2,[\"\\n      \"])),(l()(),i.Z(38,0,null,4,2,\"button\",[[\"clear\",\"\"],[\"ion-button\",\"\"],[\"item-end\",\"\"]],null,null,null,An.b,An.a)),i.Y(39,1097728,[[2,4]],0,Rn.a,[[8,\"\"],Ql.a,i.j,i.z],{clear:[0,\"clear\"]},null),(l()(),i._20(-1,0,[\"View\"])),(l()(),i._20(-1,2,[\"\\n    \"])),(l()(),i._20(-1,null,[\"\\n\\n    \"])),(l()(),i.Z(43,0,null,null,22,\"ion-item\",[[\"class\",\"item item-block\"]],null,null,null,$l.b,$l.a)),i.Y(44,1097728,null,3,Kl.a,[Jl.a,Ql.a,i.j,i.z,[2,ln.a]],null,null),i._18(335544320,4,{contentLabel:0}),i._18(603979776,5,{_buttons:1}),i._18(603979776,6,{_icons:1}),i.Y(48,16384,null,0,nn.a,[],null,null),(l()(),i._20(-1,2,[\"\\n      \"])),(l()(),i.Z(50,0,null,0,4,\"ion-thumbnail\",[[\"item-start\",\"\"]],null,null,null,null,null)),i.Y(51,16384,null,0,oe.a,[],null,null),(l()(),i._20(-1,null,[\"\\n        \"])),(l()(),i.Z(53,0,null,null,0,\"img\",[[\"src\",\"assets/img/thumbnail-rotla.png\"]],null,null,null,null,null)),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i._20(-1,2,[\"\\n      \"])),(l()(),i.Z(56,0,null,2,1,\"h2\",[],null,null,null,null,null)),(l()(),i._20(-1,null,[\"Raiders of the Lost Ark\"])),(l()(),i._20(-1,2,[\"\\n      \"])),(l()(),i.Z(59,0,null,2,1,\"p\",[],null,null,null,null,null)),(l()(),i._20(-1,null,[\"Steven Spielberg • 1981\"])),(l()(),i._20(-1,2,[\"\\n      \"])),(l()(),i.Z(62,0,null,4,2,\"button\",[[\"clear\",\"\"],[\"ion-button\",\"\"],[\"item-end\",\"\"]],null,null,null,An.b,An.a)),i.Y(63,1097728,[[5,4]],0,Rn.a,[[8,\"\"],Ql.a,i.j,i.z],{clear:[0,\"clear\"]},null),(l()(),i._20(-1,0,[\"View\"])),(l()(),i._20(-1,2,[\"\\n    \"])),(l()(),i._20(-1,null,[\"\\n\\n    \"])),(l()(),i.Z(67,0,null,null,22,\"ion-item\",[[\"class\",\"item item-block\"]],null,null,null,$l.b,$l.a)),i.Y(68,1097728,null,3,Kl.a,[Jl.a,Ql.a,i.j,i.z,[2,ln.a]],null,null),i._18(335544320,7,{contentLabel:0}),i._18(603979776,8,{_buttons:1}),i._18(603979776,9,{_icons:1}),i.Y(72,16384,null,0,nn.a,[],null,null),(l()(),i._20(-1,2,[\"\\n      \"])),(l()(),i.Z(74,0,null,0,4,\"ion-thumbnail\",[[\"item-start\",\"\"]],null,null,null,null,null)),i.Y(75,16384,null,0,oe.a,[],null,null),(l()(),i._20(-1,null,[\"\\n        \"])),(l()(),i.Z(77,0,null,null,0,\"img\",[[\"src\",\"assets/img/thumbnail-ghostbusters.png\"]],null,null,null,null,null)),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i._20(-1,2,[\"\\n      \"])),(l()(),i.Z(80,0,null,2,1,\"h2\",[],null,null,null,null,null)),(l()(),i._20(-1,null,[\"Ghostbusters\"])),(l()(),i._20(-1,2,[\"\\n      \"])),(l()(),i.Z(83,0,null,2,1,\"p\",[],null,null,null,null,null)),(l()(),i._20(-1,null,[\"Ivan Reitman • 1984\"])),(l()(),i._20(-1,2,[\"\\n      \"])),(l()(),i.Z(86,0,null,4,2,\"button\",[[\"clear\",\"\"],[\"ion-button\",\"\"],[\"item-end\",\"\"]],null,null,null,An.b,An.a)),i.Y(87,1097728,[[8,4]],0,Rn.a,[[8,\"\"],Ql.a,i.j,i.z],{clear:[0,\"clear\"]},null),(l()(),i._20(-1,0,[\"View\"])),(l()(),i._20(-1,2,[\"\\n    \"])),(l()(),i._20(-1,null,[\"\\n\\n    \"])),(l()(),i.Z(91,0,null,null,22,\"ion-item\",[[\"class\",\"item item-block\"]],null,null,null,$l.b,$l.a)),i.Y(92,1097728,null,3,Kl.a,[Jl.a,Ql.a,i.j,i.z,[2,ln.a]],null,null),i._18(335544320,10,{contentLabel:0}),i._18(603979776,11,{_buttons:1}),i._18(603979776,12,{_icons:1}),i.Y(96,16384,null,0,nn.a,[],null,null),(l()(),i._20(-1,2,[\"\\n      \"])),(l()(),i.Z(98,0,null,0,4,\"ion-thumbnail\",[[\"item-start\",\"\"]],null,null,null,null,null)),i.Y(99,16384,null,0,oe.a,[],null,null),(l()(),i._20(-1,null,[\"\\n        \"])),(l()(),i.Z(101,0,null,null,0,\"img\",[[\"src\",\"assets/img/thumbnail-batman.png\"]],null,null,null,null,null)),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i._20(-1,2,[\"\\n      \"])),(l()(),i.Z(104,0,null,2,1,\"h2\",[],null,null,null,null,null)),(l()(),i._20(-1,null,[\"Batman\"])),(l()(),i._20(-1,2,[\"\\n      \"])),(l()(),i.Z(107,0,null,2,1,\"p\",[],null,null,null,null,null)),(l()(),i._20(-1,null,[\"Tim Burton • 1988\"])),(l()(),i._20(-1,2,[\"\\n      \"])),(l()(),i.Z(110,0,null,4,2,\"button\",[[\"clear\",\"\"],[\"ion-button\",\"\"],[\"item-end\",\"\"]],null,null,null,An.b,An.a)),i.Y(111,1097728,[[11,4]],0,Rn.a,[[8,\"\"],Ql.a,i.j,i.z],{clear:[0,\"clear\"]},null),(l()(),i._20(-1,0,[\"View\"])),(l()(),i._20(-1,2,[\"\\n    \"])),(l()(),i._20(-1,null,[\"\\n\\n    \"])),(l()(),i.Z(115,0,null,null,22,\"ion-item\",[[\"class\",\"item item-block\"]],null,null,null,$l.b,$l.a)),i.Y(116,1097728,null,3,Kl.a,[Jl.a,Ql.a,i.j,i.z,[2,ln.a]],null,null),i._18(335544320,13,{contentLabel:0}),i._18(603979776,14,{_buttons:1}),i._18(603979776,15,{_icons:1}),i.Y(120,16384,null,0,nn.a,[],null,null),(l()(),i._20(-1,2,[\"\\n      \"])),(l()(),i.Z(122,0,null,0,4,\"ion-thumbnail\",[[\"item-start\",\"\"]],null,null,null,null,null)),i.Y(123,16384,null,0,oe.a,[],null,null),(l()(),i._20(-1,null,[\"\\n        \"])),(l()(),i.Z(125,0,null,null,0,\"img\",[[\"src\",\"assets/img/thumbnail-bttf.png\"]],null,null,null,null,null)),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i._20(-1,2,[\"\\n      \"])),(l()(),i.Z(128,0,null,2,1,\"h2\",[],null,null,null,null,null)),(l()(),i._20(-1,null,[\"Back to the Future\"])),(l()(),i._20(-1,2,[\"\\n      \"])),(l()(),i.Z(131,0,null,2,1,\"p\",[],null,null,null,null,null)),(l()(),i._20(-1,null,[\"Robert Zemeckis • 1985\"])),(l()(),i._20(-1,2,[\"\\n      \"])),(l()(),i.Z(134,0,null,4,2,\"button\",[[\"clear\",\"\"],[\"ion-button\",\"\"],[\"item-end\",\"\"]],null,null,null,An.b,An.a)),i.Y(135,1097728,[[14,4]],0,Rn.a,[[8,\"\"],Ql.a,i.j,i.z],{clear:[0,\"clear\"]},null),(l()(),i._20(-1,0,[\"View\"])),(l()(),i._20(-1,2,[\"\\n    \"])),(l()(),i._20(-1,null,[\"\\n\\n    \"])),(l()(),i.Z(139,0,null,null,22,\"ion-item\",[[\"class\",\"item item-block\"]],null,null,null,$l.b,$l.a)),i.Y(140,1097728,null,3,Kl.a,[Jl.a,Ql.a,i.j,i.z,[2,ln.a]],null,null),i._18(335544320,16,{contentLabel:0}),i._18(603979776,17,{_buttons:1}),i._18(603979776,18,{_icons:1}),i.Y(144,16384,null,0,nn.a,[],null,null),(l()(),i._20(-1,2,[\"\\n      \"])),(l()(),i.Z(146,0,null,0,4,\"ion-thumbnail\",[[\"item-start\",\"\"]],null,null,null,null,null)),i.Y(147,16384,null,0,oe.a,[],null,null),(l()(),i._20(-1,null,[\"\\n        \"])),(l()(),i.Z(149,0,null,null,0,\"img\",[[\"src\",\"assets/img/thumbnail-esb.png\"]],null,null,null,null,null)),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i._20(-1,2,[\"\\n      \"])),(l()(),i.Z(152,0,null,2,1,\"h2\",[],null,null,null,null,null)),(l()(),i._20(-1,null,[\"The Empire Strikes Back\"])),(l()(),i._20(-1,2,[\"\\n      \"])),(l()(),i.Z(155,0,null,2,1,\"p\",[],null,null,null,null,null)),(l()(),i._20(-1,null,[\"Irvin Kershner • 1980\"])),(l()(),i._20(-1,2,[\"\\n      \"])),(l()(),i.Z(158,0,null,4,2,\"button\",[[\"clear\",\"\"],[\"ion-button\",\"\"],[\"item-end\",\"\"]],null,null,null,An.b,An.a)),i.Y(159,1097728,[[17,4]],0,Rn.a,[[8,\"\"],Ql.a,i.j,i.z],{clear:[0,\"clear\"]},null),(l()(),i._20(-1,0,[\"View\"])),(l()(),i._20(-1,2,[\"\\n    \"])),(l()(),i._20(-1,null,[\"\\n\\n    \"])),(l()(),i.Z(163,0,null,null,22,\"ion-item\",[[\"class\",\"item item-block\"]],null,null,null,$l.b,$l.a)),i.Y(164,1097728,null,3,Kl.a,[Jl.a,Ql.a,i.j,i.z,[2,ln.a]],null,null),i._18(335544320,19,{contentLabel:0}),i._18(603979776,20,{_buttons:1}),i._18(603979776,21,{_icons:1}),i.Y(168,16384,null,0,nn.a,[],null,null),(l()(),i._20(-1,2,[\"\\n      \"])),(l()(),i.Z(170,0,null,0,4,\"ion-thumbnail\",[[\"item-start\",\"\"]],null,null,null,null,null)),i.Y(171,16384,null,0,oe.a,[],null,null),(l()(),i._20(-1,null,[\"\\n        \"])),(l()(),i.Z(173,0,null,null,0,\"img\",[[\"src\",\"assets/img/thumbnail-terminator.png\"]],null,null,null,null,null)),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i._20(-1,2,[\"\\n      \"])),(l()(),i.Z(176,0,null,2,1,\"h2\",[],null,null,null,null,null)),(l()(),i._20(-1,null,[\"The Terminator\"])),(l()(),i._20(-1,2,[\"\\n      \"])),(l()(),i.Z(179,0,null,2,1,\"p\",[],null,null,null,null,null)),(l()(),i._20(-1,null,[\"James Cameron • 1984\"])),(l()(),i._20(-1,2,[\"\\n      \"])),(l()(),i.Z(182,0,null,4,2,\"button\",[[\"clear\",\"\"],[\"ion-button\",\"\"],[\"item-end\",\"\"]],null,null,null,An.b,An.a)),i.Y(183,1097728,[[20,4]],0,Rn.a,[[8,\"\"],Ql.a,i.j,i.z],{clear:[0,\"clear\"]},null),(l()(),i._20(-1,0,[\"View\"])),(l()(),i._20(-1,2,[\"\\n    \"])),(l()(),i._20(-1,null,[\"\\n\\n  \"])),(l()(),i._20(-1,1,[\"\\n\"])),(l()(),i._20(-1,null,[\"\\n\"]))],function(l,n){l(n,39,0,\"\"),l(n,63,0,\"\"),l(n,87,0,\"\"),l(n,111,0,\"\"),l(n,135,0,\"\"),l(n,159,0,\"\"),l(n,183,0,\"\")},function(l,n){l(n,4,0,i._13(n,5)._hidden,i._13(n,5)._sbPadding),l(n,13,0,i._13(n,14).statusbarPadding,i._13(n,14)._hasRefresher)})},te)),i.Y(1,49152,null,0,ll,[],null,null)],null,null)},{},{},[]),_e=u(103),se=i.X({encapsulation:2,styles:[],data:{}}),ce=i.V(\"ng-component\",nl,function(l){return i._22(0,[(l()(),i.Z(0,0,null,null,1,\"ng-component\",[],null,null,null,function(l){return i._22(0,[(l()(),i._20(-1,null,[\"\\n\"])),(l()(),i.Z(1,0,null,null,10,\"ion-header\",[],null,null,null,null,null)),i.Y(2,16384,null,0,jn.a,[Ql.a,i.j,i.z,[2,fn.a]],null,null),(l()(),i._20(-1,null,[\"\\n  \"])),(l()(),i.Z(4,0,null,null,6,\"ion-navbar\",[[\"class\",\"toolbar\"]],[[8,\"hidden\",0],[2,\"statusbar-padding\",null]],null,null,Fn.b,Fn.a)),i.Y(5,49152,null,0,Pn.a,[Yn.a,[2,fn.a],[2,Ln.a],Ql.a,i.j,i.z],null,null),(l()(),i._20(-1,3,[\"\\n    \"])),(l()(),i.Z(7,0,null,3,2,\"ion-title\",[],null,null,null,vn.b,vn.a)),i.Y(8,49152,null,0,yn.a,[Ql.a,i.j,i.z,[2,kn.a],[2,Pn.a]],null,null),(l()(),i._20(-1,0,[\"Loading\"])),(l()(),i._20(-1,3,[\"\\n  \"])),(l()(),i._20(-1,null,[\"\\n\"])),(l()(),i._20(-1,null,[\"\\n\\n\"])),(l()(),i.Z(13,0,null,null,6,\"ion-content\",[[\"padding\",\"\"]],[[2,\"statusbar-padding\",null],[2,\"has-refresher\",null]],null,null,Cn.b,Cn.a)),i.Y(14,4374528,null,0,wn.a,[Ql.a,on.a,_n.a,i.j,i.z,Yn.a,Zn.a,i.u,[2,fn.a],[2,Ln.a]],null,null),(l()(),i._20(-1,1,[\"\\n  \"])),(l()(),i.Z(16,0,null,1,2,\"button\",[[\"block\",\"\"],[\"ion-button\",\"\"]],null,[[null,\"click\"]],function(l,n,u){var a=!0;return\"click\"===n&&(a=!1!==l.component.presentLoading()&&a),a},An.b,An.a)),i.Y(17,1097728,null,0,Rn.a,[[8,\"\"],Ql.a,i.j,i.z],{block:[0,\"block\"]},null),(l()(),i._20(-1,0,[\"Show Loading\"])),(l()(),i._20(-1,1,[\"\\n\"])),(l()(),i._20(-1,null,[\"\\n\"]))],function(l,n){l(n,17,0,\"\")},function(l,n){l(n,4,0,i._13(n,5)._hidden,i._13(n,5)._sbPadding),l(n,13,0,i._13(n,14).statusbarPadding,i._13(n,14)._hasRefresher)})},se)),i.Y(1,49152,null,0,nl,[_e.a],null,null)],null,null)},{},{},[]),re=u(136),de=i.X({encapsulation:2,styles:[],data:{}}),be=i.V(\"ng-component\",ul,function(l){return i._22(0,[(l()(),i.Z(0,0,null,null,1,\"ng-component\",[],null,null,null,function(l){return i._22(0,[(l()(),i._20(-1,null,[\"\\n\"])),(l()(),i.Z(1,0,null,null,20,\"ion-header\",[],null,null,null,null,null)),i.Y(2,16384,null,0,jn.a,[Ql.a,i.j,i.z,[2,fn.a]],null,null),(l()(),i._20(-1,null,[\"\\n  \"])),(l()(),i.Z(4,0,null,null,16,\"ion-navbar\",[[\"class\",\"toolbar\"]],[[8,\"hidden\",0],[2,\"statusbar-padding\",null]],null,null,Fn.b,Fn.a)),i.Y(5,49152,null,0,Pn.a,[Yn.a,[2,fn.a],[2,Ln.a],Ql.a,i.j,i.z],null,null),(l()(),i._20(-1,3,[\"\\n    \"])),(l()(),i.Z(7,0,null,0,8,\"button\",[[\"icon-only\",\"\"],[\"ion-button\",\"\"],[\"menuToggle\",\"\"]],[[8,\"hidden\",0]],[[null,\"click\"]],function(l,n,u){var a=!0;return\"click\"===n&&(a=!1!==i._13(l,9).toggle()&&a),a},An.b,An.a)),i.Y(8,1097728,[[1,4]],0,Rn.a,[[8,\"\"],Ql.a,i.j,i.z],null,null),i.Y(9,1064960,null,0,re.a,[an.a,[2,fn.a],[2,Rn.a],[2,Pn.a]],{menuToggle:[0,\"menuToggle\"]},null),i.Y(10,16384,null,1,ru.a,[Ql.a,i.j,i.z,[2,kn.a],[2,Pn.a]],null,null),i._18(603979776,1,{_buttons:1}),(l()(),i._20(-1,0,[\"\\n      \"])),(l()(),i.Z(13,0,null,0,1,\"ion-icon\",[[\"name\",\"menu\"],[\"role\",\"img\"]],[[2,\"hide\",null]],null,null,null,null)),i.Y(14,147456,null,0,mn.a,[Ql.a,i.j,i.z],{name:[0,\"name\"]},null),(l()(),i._20(-1,0,[\"\\n    \"])),(l()(),i._20(-1,3,[\"\\n    \"])),(l()(),i.Z(17,0,null,3,2,\"ion-title\",[],null,null,null,vn.b,vn.a)),i.Y(18,49152,null,0,yn.a,[Ql.a,i.j,i.z,[2,kn.a],[2,Pn.a]],null,null),(l()(),i._20(-1,0,[\"\\n      Menus\\n    \"])),(l()(),i._20(-1,3,[\"\\n  \"])),(l()(),i._20(-1,null,[\"\\n\"])),(l()(),i._20(-1,null,[\"\\n\"])),(l()(),i.Z(23,0,null,null,9,\"ion-content\",[[\"padding\",\"\"]],[[2,\"statusbar-padding\",null],[2,\"has-refresher\",null]],null,null,Cn.b,Cn.a)),i.Y(24,4374528,null,0,wn.a,[Ql.a,on.a,_n.a,i.j,i.z,Yn.a,Zn.a,i.u,[2,fn.a],[2,Ln.a]],null,null),(l()(),i._20(-1,1,[\"\\n  \"])),(l()(),i.Z(26,0,null,1,5,\"button\",[[\"block\",\"\"],[\"ion-button\",\"\"],[\"menuToggle\",\"\"]],[[8,\"hidden\",0]],[[null,\"click\"]],function(l,n,u){var a=!0;return\"click\"===n&&(a=!1!==i._13(l,28).toggle()&&a),a},An.b,An.a)),i.Y(27,1097728,[[2,4]],0,Rn.a,[[8,\"\"],Ql.a,i.j,i.z],{block:[0,\"block\"]},null),i.Y(28,1064960,null,0,re.a,[an.a,[2,fn.a],[2,Rn.a],[2,Pn.a]],{menuToggle:[0,\"menuToggle\"]},null),i.Y(29,16384,null,1,ru.a,[Ql.a,i.j,i.z,[2,kn.a],[2,Pn.a]],null,null),i._18(603979776,2,{_buttons:1}),(l()(),i._20(-1,0,[\"Toggle Menu\"])),(l()(),i._20(-1,1,[\"\\n\"])),(l()(),i._20(-1,null,[\"\\n\"]))],function(l,n){l(n,9,0,\"\"),l(n,14,0,\"menu\"),l(n,27,0,\"\"),l(n,28,0,\"\")},function(l,n){l(n,4,0,i._13(n,5)._hidden,i._13(n,5)._sbPadding),l(n,7,0,i._13(n,9).isHidden),l(n,13,0,i._13(n,14)._hidden),l(n,23,0,i._13(n,24).statusbarPadding,i._13(n,24)._hasRefresher),l(n,26,0,i._13(n,28).isHidden)})},de)),i.Y(1,49152,null,0,ul,[Yn.a,an.a],null,null)],null,null)},{},{},[]),me=i.X({encapsulation:2,styles:[],data:{}}),ge=i.V(\"ng-component\",al,function(l){return i._22(0,[(l()(),i.Z(0,0,null,null,1,\"ng-component\",[],null,null,null,function(l){return i._22(0,[(l()(),i._20(-1,null,[\"\\n\"])),(l()(),i.Z(1,0,null,null,20,\"ion-header\",[],null,null,null,null,null)),i.Y(2,16384,null,0,jn.a,[Ql.a,i.j,i.z,[2,fn.a]],null,null),(l()(),i._20(-1,null,[\"\\n  \"])),(l()(),i.Z(4,0,null,null,16,\"ion-navbar\",[[\"class\",\"toolbar\"]],[[8,\"hidden\",0],[2,\"statusbar-padding\",null]],null,null,Fn.b,Fn.a)),i.Y(5,49152,null,0,Pn.a,[Yn.a,[2,fn.a],[2,Ln.a],Ql.a,i.j,i.z],null,null),(l()(),i._20(-1,3,[\"\\n    \"])),(l()(),i.Z(7,0,null,0,8,\"button\",[[\"icon-only\",\"\"],[\"ion-button\",\"\"],[\"menuToggle\",\"\"]],[[8,\"hidden\",0]],[[null,\"click\"]],function(l,n,u){var a=!0;return\"click\"===n&&(a=!1!==i._13(l,9).toggle()&&a),a},An.b,An.a)),i.Y(8,1097728,[[1,4]],0,Rn.a,[[8,\"\"],Ql.a,i.j,i.z],null,null),i.Y(9,1064960,null,0,re.a,[an.a,[2,fn.a],[2,Rn.a],[2,Pn.a]],{menuToggle:[0,\"menuToggle\"]},null),i.Y(10,16384,null,1,ru.a,[Ql.a,i.j,i.z,[2,kn.a],[2,Pn.a]],null,null),i._18(603979776,1,{_buttons:1}),(l()(),i._20(-1,0,[\"\\n      \"])),(l()(),i.Z(13,0,null,0,1,\"ion-icon\",[[\"name\",\"menu\"],[\"role\",\"img\"]],[[2,\"hide\",null]],null,null,null,null)),i.Y(14,147456,null,0,mn.a,[Ql.a,i.j,i.z],{name:[0,\"name\"]},null),(l()(),i._20(-1,0,[\"\\n    \"])),(l()(),i._20(-1,3,[\"\\n    \"])),(l()(),i.Z(17,0,null,3,2,\"ion-title\",[],null,null,null,vn.b,vn.a)),i.Y(18,49152,null,0,yn.a,[Ql.a,i.j,i.z,[2,kn.a],[2,Pn.a]],null,null),(l()(),i._20(-1,0,[\"\\n      Menus\\n    \"])),(l()(),i._20(-1,3,[\"\\n  \"])),(l()(),i._20(-1,null,[\"\\n\"])),(l()(),i._20(-1,null,[\"\\n\"])),(l()(),i.Z(23,0,null,null,9,\"ion-content\",[[\"padding\",\"\"]],[[2,\"statusbar-padding\",null],[2,\"has-refresher\",null]],null,null,Cn.b,Cn.a)),i.Y(24,4374528,null,0,wn.a,[Ql.a,on.a,_n.a,i.j,i.z,Yn.a,Zn.a,i.u,[2,fn.a],[2,Ln.a]],null,null),(l()(),i._20(-1,1,[\"\\n  \"])),(l()(),i.Z(26,0,null,1,5,\"button\",[[\"block\",\"\"],[\"ion-button\",\"\"],[\"menuToggle\",\"\"]],[[8,\"hidden\",0]],[[null,\"click\"]],function(l,n,u){var a=!0;return\"click\"===n&&(a=!1!==i._13(l,28).toggle()&&a),a},An.b,An.a)),i.Y(27,1097728,[[2,4]],0,Rn.a,[[8,\"\"],Ql.a,i.j,i.z],{block:[0,\"block\"]},null),i.Y(28,1064960,null,0,re.a,[an.a,[2,fn.a],[2,Rn.a],[2,Pn.a]],{menuToggle:[0,\"menuToggle\"]},null),i.Y(29,16384,null,1,ru.a,[Ql.a,i.j,i.z,[2,kn.a],[2,Pn.a]],null,null),i._18(603979776,2,{_buttons:1}),(l()(),i._20(-1,0,[\"Toggle Menu\"])),(l()(),i._20(-1,1,[\"\\n\"])),(l()(),i._20(-1,null,[\"\\n\"]))],function(l,n){l(n,9,0,\"\"),l(n,14,0,\"menu\"),l(n,27,0,\"\"),l(n,28,0,\"\")},function(l,n){l(n,4,0,i._13(n,5)._hidden,i._13(n,5)._sbPadding),l(n,7,0,i._13(n,9).isHidden),l(n,13,0,i._13(n,14)._hidden),l(n,23,0,i._13(n,24).statusbarPadding,i._13(n,24)._hasRefresher),l(n,26,0,i._13(n,28).isHidden)})},me)),i.Y(1,49152,null,0,al,[],null,null)],null,null)},{},{},[]),he=i.X({encapsulation:2,styles:[],data:{}}),pe=i.V(\"ng-component\",el,function(l){return i._22(0,[(l()(),i.Z(0,0,null,null,1,\"ng-component\",[],null,null,null,function(l){return i._22(0,[(l()(),i._20(-1,null,[\"\\n\"])),(l()(),i.Z(1,0,null,null,20,\"ion-header\",[],null,null,null,null,null)),i.Y(2,16384,null,0,jn.a,[Ql.a,i.j,i.z,[2,fn.a]],null,null),(l()(),i._20(-1,null,[\"\\n  \"])),(l()(),i.Z(4,0,null,null,16,\"ion-navbar\",[[\"class\",\"toolbar\"]],[[8,\"hidden\",0],[2,\"statusbar-padding\",null]],null,null,Fn.b,Fn.a)),i.Y(5,49152,null,0,Pn.a,[Yn.a,[2,fn.a],[2,Ln.a],Ql.a,i.j,i.z],null,null),(l()(),i._20(-1,3,[\"\\n    \"])),(l()(),i.Z(7,0,null,0,8,\"button\",[[\"icon-only\",\"\"],[\"ion-button\",\"\"],[\"menuToggle\",\"\"]],[[8,\"hidden\",0]],[[null,\"click\"]],function(l,n,u){var a=!0;return\"click\"===n&&(a=!1!==i._13(l,9).toggle()&&a),a},An.b,An.a)),i.Y(8,1097728,[[1,4]],0,Rn.a,[[8,\"\"],Ql.a,i.j,i.z],null,null),i.Y(9,1064960,null,0,re.a,[an.a,[2,fn.a],[2,Rn.a],[2,Pn.a]],{menuToggle:[0,\"menuToggle\"]},null),i.Y(10,16384,null,1,ru.a,[Ql.a,i.j,i.z,[2,kn.a],[2,Pn.a]],null,null),i._18(603979776,1,{_buttons:1}),(l()(),i._20(-1,0,[\"\\n      \"])),(l()(),i.Z(13,0,null,0,1,\"ion-icon\",[[\"name\",\"menu\"],[\"role\",\"img\"]],[[2,\"hide\",null]],null,null,null,null)),i.Y(14,147456,null,0,mn.a,[Ql.a,i.j,i.z],{name:[0,\"name\"]},null),(l()(),i._20(-1,0,[\"\\n    \"])),(l()(),i._20(-1,3,[\"\\n    \"])),(l()(),i.Z(17,0,null,3,2,\"ion-title\",[],null,null,null,vn.b,vn.a)),i.Y(18,49152,null,0,yn.a,[Ql.a,i.j,i.z,[2,kn.a],[2,Pn.a]],null,null),(l()(),i._20(-1,0,[\"\\n      Friends\\n    \"])),(l()(),i._20(-1,3,[\"\\n  \"])),(l()(),i._20(-1,null,[\"\\n\"])),(l()(),i._20(-1,null,[\"\\n\"])),(l()(),i.Z(23,0,null,null,9,\"ion-content\",[[\"padding\",\"\"]],[[2,\"statusbar-padding\",null],[2,\"has-refresher\",null]],null,null,Cn.b,Cn.a)),i.Y(24,4374528,null,0,wn.a,[Ql.a,on.a,_n.a,i.j,i.z,Yn.a,Zn.a,i.u,[2,fn.a],[2,Ln.a]],null,null),(l()(),i._20(-1,1,[\"\\n  \"])),(l()(),i.Z(26,0,null,1,5,\"button\",[[\"block\",\"\"],[\"ion-button\",\"\"],[\"menuToggle\",\"\"]],[[8,\"hidden\",0]],[[null,\"click\"]],function(l,n,u){var a=!0;return\"click\"===n&&(a=!1!==i._13(l,28).toggle()&&a),a},An.b,An.a)),i.Y(27,1097728,[[2,4]],0,Rn.a,[[8,\"\"],Ql.a,i.j,i.z],{block:[0,\"block\"]},null),i.Y(28,1064960,null,0,re.a,[an.a,[2,fn.a],[2,Rn.a],[2,Pn.a]],{menuToggle:[0,\"menuToggle\"]},null),i.Y(29,16384,null,1,ru.a,[Ql.a,i.j,i.z,[2,kn.a],[2,Pn.a]],null,null),i._18(603979776,2,{_buttons:1}),(l()(),i._20(-1,0,[\"Toggle Menu\"])),(l()(),i._20(-1,1,[\"\\n\"])),(l()(),i._20(-1,null,[\"\\n\"]))],function(l,n){l(n,9,0,\"\"),l(n,14,0,\"menu\"),l(n,27,0,\"\"),l(n,28,0,\"\")},function(l,n){l(n,4,0,i._13(n,5)._hidden,i._13(n,5)._sbPadding),l(n,7,0,i._13(n,9).isHidden),l(n,13,0,i._13(n,14)._hidden),l(n,23,0,i._13(n,24).statusbarPadding,i._13(n,24)._hasRefresher),l(n,26,0,i._13(n,28).isHidden)})},he)),i.Y(1,49152,null,0,el,[],null,null)],null,null)},{},{},[]),Ze=i.X({encapsulation:2,styles:[],data:{}}),Ye=i.V(\"ng-component\",ol,function(l){return i._22(0,[(l()(),i.Z(0,0,null,null,1,\"ng-component\",[],null,null,null,function(l){return i._22(0,[(l()(),i._20(-1,null,[\"\\n\"])),(l()(),i.Z(1,0,null,null,20,\"ion-header\",[],null,null,null,null,null)),i.Y(2,16384,null,0,jn.a,[Ql.a,i.j,i.z,[2,fn.a]],null,null),(l()(),i._20(-1,null,[\"\\n  \"])),(l()(),i.Z(4,0,null,null,16,\"ion-navbar\",[[\"class\",\"toolbar\"]],[[8,\"hidden\",0],[2,\"statusbar-padding\",null]],null,null,Fn.b,Fn.a)),i.Y(5,49152,null,0,Pn.a,[Yn.a,[2,fn.a],[2,Ln.a],Ql.a,i.j,i.z],null,null),(l()(),i._20(-1,3,[\"\\n    \"])),(l()(),i.Z(7,0,null,0,8,\"button\",[[\"icon-only\",\"\"],[\"ion-button\",\"\"],[\"menuToggle\",\"\"]],[[8,\"hidden\",0]],[[null,\"click\"]],function(l,n,u){var a=!0;return\"click\"===n&&(a=!1!==i._13(l,9).toggle()&&a),a},An.b,An.a)),i.Y(8,1097728,[[1,4]],0,Rn.a,[[8,\"\"],Ql.a,i.j,i.z],null,null),i.Y(9,1064960,null,0,re.a,[an.a,[2,fn.a],[2,Rn.a],[2,Pn.a]],{menuToggle:[0,\"menuToggle\"]},null),i.Y(10,16384,null,1,ru.a,[Ql.a,i.j,i.z,[2,kn.a],[2,Pn.a]],null,null),i._18(603979776,1,{_buttons:1}),(l()(),i._20(-1,0,[\"\\n      \"])),(l()(),i.Z(13,0,null,0,1,\"ion-icon\",[[\"name\",\"menu\"],[\"role\",\"img\"]],[[2,\"hide\",null]],null,null,null,null)),i.Y(14,147456,null,0,mn.a,[Ql.a,i.j,i.z],{name:[0,\"name\"]},null),(l()(),i._20(-1,0,[\"\\n    \"])),(l()(),i._20(-1,3,[\"\\n    \"])),(l()(),i.Z(17,0,null,3,2,\"ion-title\",[],null,null,null,vn.b,vn.a)),i.Y(18,49152,null,0,yn.a,[Ql.a,i.j,i.z,[2,kn.a],[2,Pn.a]],null,null),(l()(),i._20(-1,0,[\"\\n      Events\\n    \"])),(l()(),i._20(-1,3,[\"\\n  \"])),(l()(),i._20(-1,null,[\"\\n\"])),(l()(),i._20(-1,null,[\"\\n\"])),(l()(),i.Z(23,0,null,null,9,\"ion-content\",[[\"padding\",\"\"]],[[2,\"statusbar-padding\",null],[2,\"has-refresher\",null]],null,null,Cn.b,Cn.a)),i.Y(24,4374528,null,0,wn.a,[Ql.a,on.a,_n.a,i.j,i.z,Yn.a,Zn.a,i.u,[2,fn.a],[2,Ln.a]],null,null),(l()(),i._20(-1,1,[\"\\n  \"])),(l()(),i.Z(26,0,null,1,5,\"button\",[[\"block\",\"\"],[\"ion-button\",\"\"],[\"menuToggle\",\"\"]],[[8,\"hidden\",0]],[[null,\"click\"]],function(l,n,u){var a=!0;return\"click\"===n&&(a=!1!==i._13(l,28).toggle()&&a),a},An.b,An.a)),i.Y(27,1097728,[[2,4]],0,Rn.a,[[8,\"\"],Ql.a,i.j,i.z],{block:[0,\"block\"]},null),i.Y(28,1064960,null,0,re.a,[an.a,[2,fn.a],[2,Rn.a],[2,Pn.a]],{menuToggle:[0,\"menuToggle\"]},null),i.Y(29,16384,null,1,ru.a,[Ql.a,i.j,i.z,[2,kn.a],[2,Pn.a]],null,null),i._18(603979776,2,{_buttons:1}),(l()(),i._20(-1,0,[\"Toggle Menu\"])),(l()(),i._20(-1,1,[\"\\n\"])),(l()(),i._20(-1,null,[\"\\n\"]))],function(l,n){l(n,9,0,\"\"),l(n,14,0,\"menu\"),l(n,27,0,\"\"),l(n,28,0,\"\")},function(l,n){l(n,4,0,i._13(n,5)._hidden,i._13(n,5)._sbPadding),l(n,7,0,i._13(n,9).isHidden),l(n,13,0,i._13(n,14)._hidden),l(n,23,0,i._13(n,24).statusbarPadding,i._13(n,24)._hasRefresher),l(n,26,0,i._13(n,28).isHidden)})},Ze)),i.Y(1,49152,null,0,ol,[],null,null)],null,null)},{},{},[]),je=u(106),fe=u(81),ze=u(33),ke=i.X({encapsulation:2,styles:[],data:{}}),ve=i.V(\"ng-component\",tl,function(l){return i._22(0,[(l()(),i.Z(0,0,null,null,1,\"ng-component\",[],null,null,null,function(l){return i._22(0,[(l()(),i._20(-1,null,[\"\\n\"])),(l()(),i.Z(1,0,null,null,10,\"ion-header\",[],null,null,null,null,null)),i.Y(2,16384,null,0,jn.a,[Ql.a,i.j,i.z,[2,fn.a]],null,null),(l()(),i._20(-1,null,[\"\\n  \"])),(l()(),i.Z(4,0,null,null,6,\"ion-navbar\",[[\"class\",\"toolbar\"]],[[8,\"hidden\",0],[2,\"statusbar-padding\",null]],null,null,Fn.b,Fn.a)),i.Y(5,49152,null,0,Pn.a,[Yn.a,[2,fn.a],[2,Ln.a],Ql.a,i.j,i.z],null,null),(l()(),i._20(-1,3,[\"\\n    \"])),(l()(),i.Z(7,0,null,3,2,\"ion-title\",[],null,null,null,vn.b,vn.a)),i.Y(8,49152,null,0,yn.a,[Ql.a,i.j,i.z,[2,kn.a],[2,Pn.a]],null,null),(l()(),i._20(-1,0,[\"Modals\"])),(l()(),i._20(-1,3,[\"\\n  \"])),(l()(),i._20(-1,null,[\"\\n\"])),(l()(),i._20(-1,null,[\"\\n\\n\"])),(l()(),i.Z(13,0,null,null,38,\"ion-content\",[],[[2,\"statusbar-padding\",null],[2,\"has-refresher\",null]],null,null,Cn.b,Cn.a)),i.Y(14,4374528,null,0,wn.a,[Ql.a,on.a,_n.a,i.j,i.z,Yn.a,Zn.a,i.u,[2,fn.a],[2,Ln.a]],null,null),(l()(),i._20(-1,1,[\"\\n\\n  \"])),(l()(),i.Z(16,0,null,1,34,\"ion-list\",[],null,null,null,null,null)),i.Y(17,16384,null,0,en.a,[Ql.a,i.j,i.z,on.a,tn.l,_n.a],null,null),(l()(),i._20(-1,null,[\"\\n    \"])),(l()(),i.Z(19,0,null,null,6,\"ion-list-header\",[[\"class\",\"item\"]],null,null,null,$l.b,$l.a)),i.Y(20,1097728,null,3,Kl.a,[Jl.a,Ql.a,i.j,i.z,[2,ln.a]],null,null),i._18(335544320,1,{contentLabel:0}),i._18(603979776,2,{_buttons:1}),i._18(603979776,3,{_icons:1}),i.Y(24,16384,null,0,Qu.a,[Ql.a,i.z,i.j,[8,null]],null,null),(l()(),i._20(-1,2,[\"\\n      Hobbits\\n    \"])),(l()(),i._20(-1,null,[\"\\n    \"])),(l()(),i.Z(27,0,null,null,6,\"a\",[[\"class\",\"item item-block\"],[\"ion-item\",\"\"]],null,[[null,\"click\"]],function(l,n,u){var a=!0;return\"click\"===n&&(a=!1!==l.component.openModal({charNum:0})&&a),a},$l.b,$l.a)),i.Y(28,1097728,null,3,Kl.a,[Jl.a,Ql.a,i.j,i.z,[2,ln.a]],null,null),i._18(335544320,4,{contentLabel:0}),i._18(603979776,5,{_buttons:1}),i._18(603979776,6,{_icons:1}),i.Y(32,16384,null,0,nn.a,[],null,null),(l()(),i._20(-1,2,[\"\\n      Gollum\\n    \"])),(l()(),i._20(-1,null,[\"\\n    \"])),(l()(),i.Z(35,0,null,null,6,\"a\",[[\"class\",\"item item-block\"],[\"ion-item\",\"\"]],null,[[null,\"click\"]],function(l,n,u){var a=!0;return\"click\"===n&&(a=!1!==l.component.openModal({charNum:1})&&a),a},$l.b,$l.a)),i.Y(36,1097728,null,3,Kl.a,[Jl.a,Ql.a,i.j,i.z,[2,ln.a]],null,null),i._18(335544320,7,{contentLabel:0}),i._18(603979776,8,{_buttons:1}),i._18(603979776,9,{_icons:1}),i.Y(40,16384,null,0,nn.a,[],null,null),(l()(),i._20(-1,2,[\"\\n      Frodo Baggins\\n    \"])),(l()(),i._20(-1,null,[\"\\n    \"])),(l()(),i.Z(43,0,null,null,6,\"a\",[[\"class\",\"item item-block\"],[\"ion-item\",\"\"]],null,[[null,\"click\"]],function(l,n,u){var a=!0;return\"click\"===n&&(a=!1!==l.component.openModal({charNum:2})&&a),a},$l.b,$l.a)),i.Y(44,1097728,null,3,Kl.a,[Jl.a,Ql.a,i.j,i.z,[2,ln.a]],null,null),i._18(335544320,10,{contentLabel:0}),i._18(603979776,11,{_buttons:1}),i._18(603979776,12,{_icons:1}),i.Y(48,16384,null,0,nn.a,[],null,null),(l()(),i._20(-1,2,[\"\\n      Sam\\n    \"])),(l()(),i._20(-1,null,[\"\\n  \"])),(l()(),i._20(-1,1,[\"\\n\\n\"])),(l()(),i._20(-1,null,[\"\\n\"]))],null,function(l,n){l(n,4,0,i._13(n,5)._hidden,i._13(n,5)._sbPadding),l(n,13,0,i._13(n,14).statusbarPadding,i._13(n,14)._hasRefresher)})},ke)),i.Y(1,49152,null,0,tl,[je.a],null,null)],null,null)},{},{},[]),ye=i.X({encapsulation:2,styles:[],data:{}}),Pe=i.V(\"ng-component\",il,function(l){return i._22(0,[(l()(),i.Z(0,0,null,null,1,\"ng-component\",[],null,null,null,function(l){return i._22(0,[(l()(),i._20(-1,null,[\"\\n\"])),(l()(),i.Z(1,0,null,null,28,\"ion-header\",[],null,null,null,null,null)),i.Y(2,16384,null,0,jn.a,[Ql.a,i.j,i.z,[2,fn.a]],null,null),(l()(),i._20(-1,null,[\"\\n  \"])),(l()(),i.Z(4,0,null,null,24,\"ion-toolbar\",[[\"class\",\"toolbar\"]],[[2,\"statusbar-padding\",null]],null,null,zn.b,zn.a)),i.Y(5,49152,null,0,kn.a,[Ql.a,i.j,i.z],null,null),(l()(),i._20(-1,3,[\"\\n    \"])),(l()(),i.Z(7,0,null,3,2,\"ion-title\",[],null,null,null,vn.b,vn.a)),i.Y(8,49152,null,0,yn.a,[Ql.a,i.j,i.z,[2,kn.a],[2,Pn.a]],null,null),(l()(),i._20(-1,0,[\"\\n      Description\\n    \"])),(l()(),i._20(-1,3,[\"\\n    \"])),(l()(),i.Z(11,0,null,1,16,\"ion-buttons\",[[\"start\",\"\"]],null,null,null,null,null)),i.Y(12,16384,null,1,ru.a,[Ql.a,i.j,i.z,[2,kn.a],[2,Pn.a]],null,null),i._18(603979776,1,{_buttons:1}),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i.Z(15,0,null,null,11,\"button\",[[\"ion-button\",\"\"]],null,[[null,\"click\"]],function(l,n,u){var a=!0;return\"click\"===n&&(a=!1!==l.component.dismiss()&&a),a},An.b,An.a)),i.Y(16,1097728,[[1,4]],0,Rn.a,[[8,\"\"],Ql.a,i.j,i.z],null,null),(l()(),i._20(-1,0,[\"\\n        \"])),(l()(),i.Z(18,0,null,0,3,\"span\",[[\"color\",\"primary\"],[\"ion-text\",\"\"],[\"showWhen\",\"ios\"]],[[2,\"hidden-show-when\",null]],null,null,null,null)),i.Y(19,147456,null,0,fe.a,[[8,\"ios\"],on.a,i.u],null,null),i.Y(20,16384,null,0,Cu.a,[Ql.a,i.j,i.z],{color:[0,\"color\"]},null),(l()(),i._20(-1,null,[\"Cancel\"])),(l()(),i._20(-1,0,[\"\\n        \"])),(l()(),i.Z(23,0,null,0,2,\"ion-icon\",[[\"name\",\"md-close\"],[\"role\",\"img\"],[\"showWhen\",\"android, windows\"]],[[2,\"hide\",null],[2,\"hidden-show-when\",null]],null,null,null,null)),i.Y(24,147456,null,0,mn.a,[Ql.a,i.j,i.z],{name:[0,\"name\"]},null),i.Y(25,147456,null,0,fe.a,[[8,\"android, windows\"],on.a,i.u],null,null),(l()(),i._20(-1,0,[\"\\n      \"])),(l()(),i._20(-1,null,[\"\\n    \"])),(l()(),i._20(-1,3,[\"\\n  \"])),(l()(),i._20(-1,null,[\"\\n\"])),(l()(),i._20(-1,null,[\"\\n\\n\"])),(l()(),i.Z(31,0,null,null,29,\"ion-content\",[],[[2,\"statusbar-padding\",null],[2,\"has-refresher\",null]],null,null,Cn.b,Cn.a)),i.Y(32,4374528,null,0,wn.a,[Ql.a,on.a,_n.a,i.j,i.z,Yn.a,Zn.a,i.u,[2,fn.a],[2,Ln.a]],null,null),(l()(),i._20(-1,1,[\"\\n  \"])),(l()(),i.Z(34,0,null,1,25,\"ion-list\",[],null,null,null,null,null)),i.Y(35,16384,null,0,en.a,[Ql.a,i.j,i.z,on.a,tn.l,_n.a],null,null),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i.Z(37,0,null,null,18,\"ion-item\",[[\"class\",\"item item-block\"]],null,null,null,$l.b,$l.a)),i.Y(38,1097728,null,3,Kl.a,[Jl.a,Ql.a,i.j,i.z,[2,ln.a]],null,null),i._18(335544320,2,{contentLabel:0}),i._18(603979776,3,{_buttons:1}),i._18(603979776,4,{_icons:1}),i.Y(42,16384,null,0,nn.a,[],null,null),(l()(),i._20(-1,2,[\"\\n        \"])),(l()(),i.Z(44,0,null,0,4,\"ion-avatar\",[[\"item-start\",\"\"]],null,null,null,null,null)),i.Y(45,16384,null,0,Iu.a,[],null,null),(l()(),i._20(-1,null,[\"\\n          \"])),(l()(),i.Z(47,0,null,null,0,\"img\",[],[[8,\"src\",4]],null,null,null,null)),(l()(),i._20(-1,null,[\"\\n        \"])),(l()(),i._20(-1,2,[\"\\n        \"])),(l()(),i.Z(50,0,null,2,1,\"h2\",[],null,null,null,null,null)),(l()(),i._20(51,null,[\"\",\"\"])),(l()(),i._20(-1,2,[\"\\n        \"])),(l()(),i.Z(53,0,null,2,1,\"p\",[],null,null,null,null,null)),(l()(),i._20(54,null,[\"\",\"\"])),(l()(),i._20(-1,2,[\"\\n      \"])),(l()(),i._20(-1,null,[\"\\n\\n      \"])),(l()(),i.U(16777216,null,null,1,null,function(l){return i._22(0,[(l()(),i.Z(0,0,null,null,10,\"ion-item\",[[\"class\",\"item item-block\"]],null,null,null,$l.b,$l.a)),i.Y(1,1097728,null,3,Kl.a,[Jl.a,Ql.a,i.j,i.z,[2,ln.a]],null,null),i._18(335544320,5,{contentLabel:0}),i._18(603979776,6,{_buttons:1}),i._18(603979776,7,{_icons:1}),i.Y(5,16384,null,0,nn.a,[],null,null),(l()(),i._20(6,2,[\"\\n        \",\"\\n        \"])),(l()(),i.Z(7,0,null,4,2,\"ion-note\",[[\"item-end\",\"\"]],null,null,null,null,null)),i.Y(8,16384,null,0,Su.a,[Ql.a,i.j,i.z],null,null),(l()(),i._20(9,null,[\"\\n          \",\"\\n        \"])),(l()(),i._20(-1,2,[\"\\n      \"]))],null,function(l,n){l(n,6,0,n.context.$implicit.title),l(n,9,0,n.context.$implicit.note)})})),i.Y(58,802816,null,0,sn.h,[i.I,i.F,i.p],{ngForOf:[0,\"ngForOf\"]},null),(l()(),i._20(-1,null,[\"\\n  \"])),(l()(),i._20(-1,1,[\"\\n\"])),(l()(),i._20(-1,null,[\"\\n\"]))],function(l,n){var u=n.component;l(n,20,0,\"primary\"),l(n,24,0,\"md-close\"),l(n,58,0,u.character.items)},function(l,n){var u=n.component;l(n,4,0,i._13(n,5)._sbPadding),l(n,18,0,!i._13(n,19).isMatch),l(n,23,0,i._13(n,24)._hidden,!i._13(n,25).isMatch),l(n,31,0,i._13(n,32).statusbarPadding,i._13(n,32)._hasRefresher),l(n,47,0,i._2(1,\"\",u.character.image,\"\")),l(n,51,0,u.character.name),l(n,54,0,u.character.quote)})},ye)),i.Y(1,49152,null,0,il,[on.a,ze.a,fn.a],null,null)],null,null)},{},{},[]),Ce=i.X({encapsulation:2,styles:[],data:{}}),we=i.V(\"ng-component\",_l,function(l){return i._22(0,[(l()(),i.Z(0,0,null,null,1,\"ng-component\",[],null,null,null,function(l){return i._22(0,[(l()(),i._20(-1,null,[\"\\n\"])),(l()(),i.Z(1,0,null,null,10,\"ion-header\",[],null,null,null,null,null)),i.Y(2,16384,null,0,jn.a,[Ql.a,i.j,i.z,[2,fn.a]],null,null),(l()(),i._20(-1,null,[\"\\n  \"])),(l()(),i.Z(4,0,null,null,6,\"ion-navbar\",[[\"class\",\"toolbar\"]],[[8,\"hidden\",0],[2,\"statusbar-padding\",null]],null,null,Fn.b,Fn.a)),i.Y(5,49152,null,0,Pn.a,[Yn.a,[2,fn.a],[2,Ln.a],Ql.a,i.j,i.z],null,null),(l()(),i._20(-1,3,[\"\\n    \"])),(l()(),i.Z(7,0,null,3,2,\"ion-title\",[],null,null,null,vn.b,vn.a)),i.Y(8,49152,null,0,yn.a,[Ql.a,i.j,i.z,[2,kn.a],[2,Pn.a]],null,null),(l()(),i._20(9,0,[\"\\n      \",\"\\n    \"])),(l()(),i._20(-1,3,[\"\\n  \"])),(l()(),i._20(-1,null,[\"\\n\"])),(l()(),i._20(-1,null,[\"\\n\\n\"])),(l()(),i.Z(13,0,null,null,7,\"ion-content\",[[\"padding\",\"\"]],[[2,\"statusbar-padding\",null],[2,\"has-refresher\",null]],null,null,Cn.b,Cn.a)),i.Y(14,4374528,null,0,wn.a,[Ql.a,on.a,_n.a,i.j,i.z,Yn.a,Zn.a,i.u,[2,fn.a],[2,Ln.a]],null,null),(l()(),i._20(-1,1,[\"\\n  \"])),(l()(),i.Z(16,0,null,1,3,\"ion-icon\",[[\"role\",\"img\"]],[[2,\"hide\",null]],null,null,null,null)),i.Y(17,278528,null,0,sn.l,[i.q,i.j,i.A],{ngStyle:[0,\"ngStyle\"]},null),i._15(18,{color:0}),i.Y(19,147456,null,0,mn.a,[Ql.a,i.j,i.z],{name:[0,\"name\"]},null),(l()(),i._20(20,1,[\"\\n  \",\"\\n\"])),(l()(),i._20(-1,null,[\"\\n\"]))],function(l,n){var u=n.component;l(n,17,0,l(n,18,0,u.item.color)),l(n,19,0,\"logo-\"+u.item.icon)},function(l,n){var u=n.component;l(n,4,0,i._13(n,5)._hidden,i._13(n,5)._sbPadding),l(n,9,0,u.item.title),l(n,13,0,i._13(n,14).statusbarPadding,i._13(n,14)._hasRefresher),l(n,16,0,i._13(n,19)._hidden),l(n,20,0,u.item.description)})},Ce)),i.Y(1,49152,null,0,_l,[ze.a],null,null)],null,null)},{},{},[]),Le=i.X({encapsulation:2,styles:[],data:{}}),Ie=i.V(\"ng-component\",sl,function(l){return i._22(0,[(l()(),i.Z(0,0,null,null,1,\"ng-component\",[],null,null,null,function(l){return i._22(0,[(l()(),i._20(-1,null,[\"\\n\"])),(l()(),i.Z(1,0,null,null,10,\"ion-header\",[],null,null,null,null,null)),i.Y(2,16384,null,0,jn.a,[Ql.a,i.j,i.z,[2,fn.a]],null,null),(l()(),i._20(-1,null,[\"\\n  \"])),(l()(),i.Z(4,0,null,null,6,\"ion-navbar\",[[\"class\",\"toolbar\"]],[[8,\"hidden\",0],[2,\"statusbar-padding\",null]],null,null,Fn.b,Fn.a)),i.Y(5,49152,null,0,Pn.a,[Yn.a,[2,fn.a],[2,Ln.a],Ql.a,i.j,i.z],null,null),(l()(),i._20(-1,3,[\"\\n    \"])),(l()(),i.Z(7,0,null,3,2,\"ion-title\",[],null,null,null,vn.b,vn.a)),i.Y(8,49152,null,0,yn.a,[Ql.a,i.j,i.z,[2,kn.a],[2,Pn.a]],null,null),(l()(),i._20(-1,0,[\"Navigation\"])),(l()(),i._20(-1,3,[\"\\n  \"])),(l()(),i._20(-1,null,[\"\\n\"])),(l()(),i._20(-1,null,[\"\\n\\n\"])),(l()(),i.Z(13,0,null,null,9,\"ion-content\",[],[[2,\"statusbar-padding\",null],[2,\"has-refresher\",null]],null,null,Cn.b,Cn.a)),i.Y(14,4374528,null,0,wn.a,[Ql.a,on.a,_n.a,i.j,i.z,Yn.a,Zn.a,i.u,[2,fn.a],[2,Ln.a]],null,null),(l()(),i._20(-1,1,[\"\\n  \"])),(l()(),i.Z(16,0,null,1,5,\"ion-list\",[],null,null,null,null,null)),i.Y(17,16384,null,0,en.a,[Ql.a,i.j,i.z,on.a,tn.l,_n.a],null,null),(l()(),i._20(-1,null,[\"\\n    \"])),(l()(),i.U(16777216,null,null,1,null,function(l){return i._22(0,[(l()(),i.Z(0,0,null,null,11,\"button\",[[\"class\",\"item item-block\"],[\"icon-start\",\"\"],[\"ion-item\",\"\"]],null,[[null,\"click\"]],function(l,n,u){var a=!0;return\"click\"===n&&(a=!1!==l.component.openNavDetailsPage(l.context.$implicit)&&a),a},$l.b,$l.a)),i.Y(1,1097728,null,3,Kl.a,[Jl.a,Ql.a,i.j,i.z,[2,ln.a]],null,null),i._18(335544320,1,{contentLabel:0}),i._18(603979776,2,{_buttons:1}),i._18(603979776,3,{_icons:1}),i.Y(5,16384,null,0,nn.a,[],null,null),(l()(),i._20(-1,2,[\"\\n      \"])),(l()(),i.Z(7,0,null,0,3,\"ion-icon\",[[\"item-start\",\"\"],[\"role\",\"img\"]],[[2,\"hide\",null]],null,null,null,null)),i.Y(8,278528,null,0,sn.l,[i.q,i.j,i.A],{ngStyle:[0,\"ngStyle\"]},null),i._15(9,{color:0}),i.Y(10,147456,[[3,4]],0,mn.a,[Ql.a,i.j,i.z],{name:[0,\"name\"]},null),(l()(),i._20(11,2,[\"\\n      \",\"\\n    \"]))],function(l,n){l(n,8,0,l(n,9,0,n.context.$implicit.color)),l(n,10,0,\"logo-\"+n.context.$implicit.icon)},function(l,n){l(n,7,0,i._13(n,10)._hidden),l(n,11,0,n.context.$implicit.title)})})),i.Y(20,802816,null,0,sn.h,[i.I,i.F,i.p],{ngForOf:[0,\"ngForOf\"]},null),(l()(),i._20(-1,null,[\"\\n  \"])),(l()(),i._20(-1,1,[\"\\n\"])),(l()(),i._20(-1,null,[\"\\n\"]))],function(l,n){l(n,20,0,n.component.items)},function(l,n){l(n,4,0,i._13(n,5)._hidden,i._13(n,5)._sbPadding),l(n,13,0,i._13(n,14).statusbarPadding,i._13(n,14)._hasRefresher)})},Le)),i.Y(1,49152,null,0,sl,[Ln.a],null,null)],null,null)},{},{},[]),xe=u(64),Te=u(151),Se=u(71),Me=u(109),Be=i.X({encapsulation:2,styles:[],data:{}}),Fe=i.V(\"ng-component\",cl,function(l){return i._22(0,[(l()(),i.Z(0,0,null,null,1,\"ng-component\",[],null,null,null,function(l){return i._22(0,[(l()(),i._20(-1,null,[\"\\n    \"])),(l()(),i.Z(1,0,null,null,173,\"ion-list\",[[\"class\",\"popover-page\"],[\"radio-group\",\"\"],[\"role\",\"radiogroup\"]],[[2,\"ng-untouched\",null],[2,\"ng-touched\",null],[2,\"ng-pristine\",null],[2,\"ng-dirty\",null],[2,\"ng-valid\",null],[2,\"ng-invalid\",null],[2,\"ng-pending\",null]],[[null,\"ngModelChange\"],[null,\"ionChange\"]],function(l,n,u){var a=!0,e=l.component;return\"ngModelChange\"===n&&(a=!1!==(e.fontFamily=u)&&a),\"ionChange\"===n&&(a=!1!==e.changeFontFamily()&&a),a},null,null)),i.Y(2,1064960,null,1,xe.a,[i.z,i.j,i.g],null,{ionChange:\"ionChange\"}),i._18(335544320,1,{_header:0}),i._17(1024,null,A.j,function(l){return[l]},[xe.a]),i.Y(5,671744,null,0,A.n,[[8,null],[8,null],[8,null],[2,A.j]],{model:[0,\"model\"]},{update:\"ngModelChange\"}),i._17(2048,null,A.k,null,[A.n]),i.Y(7,16384,null,0,A.l,[A.k],null,null),i.Y(8,16384,null,0,en.a,[Ql.a,i.j,i.z,on.a,tn.l,_n.a],null,null),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i.Z(10,0,null,null,26,\"ion-row\",[[\"class\",\"row\"]],null,null,null,null,null)),i.Y(11,16384,null,0,xu.a,[],null,null),(l()(),i._20(-1,null,[\"\\n        \"])),(l()(),i.Z(13,0,null,null,10,\"ion-col\",[[\"class\",\"col\"]],null,null,null,null,null)),i.Y(14,16384,null,0,Tu.a,[],null,null),(l()(),i._20(-1,null,[\"\\n          \"])),(l()(),i.Z(16,0,null,null,6,\"button\",[[\"class\",\"text-button text-smaller item item-block\"],[\"detail-none\",\"\"],[\"ion-item\",\"\"]],null,[[null,\"click\"]],function(l,n,u){var a=!0;return\"click\"===n&&(a=!1!==l.component.changeFontSize(\"smaller\")&&a),a},$l.b,$l.a)),i.Y(17,1097728,null,3,Kl.a,[Jl.a,Ql.a,i.j,i.z,[2,ln.a]],null,null),i._18(335544320,2,{contentLabel:0}),i._18(603979776,3,{_buttons:1}),i._18(603979776,4,{_icons:1}),i.Y(21,16384,null,0,nn.a,[],null,null),(l()(),i._20(-1,2,[\"A\"])),(l()(),i._20(-1,null,[\"\\n        \"])),(l()(),i._20(-1,null,[\"\\n        \"])),(l()(),i.Z(25,0,null,null,10,\"ion-col\",[[\"class\",\"col\"]],null,null,null,null,null)),i.Y(26,16384,null,0,Tu.a,[],null,null),(l()(),i._20(-1,null,[\"\\n          \"])),(l()(),i.Z(28,0,null,null,6,\"button\",[[\"class\",\"text-button text-larger item item-block\"],[\"detail-none\",\"\"],[\"ion-item\",\"\"]],null,[[null,\"click\"]],function(l,n,u){var a=!0;return\"click\"===n&&(a=!1!==l.component.changeFontSize(\"larger\")&&a),a},$l.b,$l.a)),i.Y(29,1097728,null,3,Kl.a,[Jl.a,Ql.a,i.j,i.z,[2,ln.a]],null,null),i._18(335544320,5,{contentLabel:0}),i._18(603979776,6,{_buttons:1}),i._18(603979776,7,{_icons:1}),i.Y(33,16384,null,0,nn.a,[],null,null),(l()(),i._20(-1,2,[\"A\"])),(l()(),i._20(-1,null,[\"\\n        \"])),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i.Z(38,0,null,null,30,\"ion-row\",[[\"class\",\"row-dots row\"]],null,null,null,null,null)),i.Y(39,16384,null,0,xu.a,[],null,null),(l()(),i._20(-1,null,[\"\\n        \"])),(l()(),i.Z(41,0,null,null,5,\"ion-col\",[[\"class\",\"col\"]],null,null,null,null,null)),i.Y(42,16384,null,0,Tu.a,[],null,null),(l()(),i._20(-1,null,[\"\\n          \"])),(l()(),i.Z(44,0,null,null,1,\"button\",[[\"class\",\"dot-white\"],[\"ion-button\",\"dot\"]],[[2,\"selected\",null]],[[null,\"click\"]],function(l,n,u){var a=!0;return\"click\"===n&&(a=!1!==l.component.changeBackground(\"white\")&&a),a},An.b,An.a)),i.Y(45,1097728,null,0,Rn.a,[[8,\"dot\"],Ql.a,i.j,i.z],null,null),(l()(),i._20(-1,null,[\"\\n        \"])),(l()(),i._20(-1,null,[\"\\n        \"])),(l()(),i.Z(48,0,null,null,5,\"ion-col\",[[\"class\",\"col\"]],null,null,null,null,null)),i.Y(49,16384,null,0,Tu.a,[],null,null),(l()(),i._20(-1,null,[\"\\n          \"])),(l()(),i.Z(51,0,null,null,1,\"button\",[[\"class\",\"dot-tan\"],[\"ion-button\",\"dot\"]],[[2,\"selected\",null]],[[null,\"click\"]],function(l,n,u){var a=!0;return\"click\"===n&&(a=!1!==l.component.changeBackground(\"tan\")&&a),a},An.b,An.a)),i.Y(52,1097728,null,0,Rn.a,[[8,\"dot\"],Ql.a,i.j,i.z],null,null),(l()(),i._20(-1,null,[\"\\n        \"])),(l()(),i._20(-1,null,[\"\\n        \"])),(l()(),i.Z(55,0,null,null,5,\"ion-col\",[[\"class\",\"col\"]],null,null,null,null,null)),i.Y(56,16384,null,0,Tu.a,[],null,null),(l()(),i._20(-1,null,[\"\\n          \"])),(l()(),i.Z(58,0,null,null,1,\"button\",[[\"class\",\"dot-grey\"],[\"ion-button\",\"dot\"]],[[2,\"selected\",null]],[[null,\"click\"]],function(l,n,u){var a=!0;return\"click\"===n&&(a=!1!==l.component.changeBackground(\"grey\")&&a),a},An.b,An.a)),i.Y(59,1097728,null,0,Rn.a,[[8,\"dot\"],Ql.a,i.j,i.z],null,null),(l()(),i._20(-1,null,[\"\\n        \"])),(l()(),i._20(-1,null,[\"\\n        \"])),(l()(),i.Z(62,0,null,null,5,\"ion-col\",[[\"class\",\"col\"]],null,null,null,null,null)),i.Y(63,16384,null,0,Tu.a,[],null,null),(l()(),i._20(-1,null,[\"\\n          \"])),(l()(),i.Z(65,0,null,null,1,\"button\",[[\"class\",\"dot-black\"],[\"ion-button\",\"dot\"]],[[2,\"selected\",null]],[[null,\"click\"]],function(l,n,u){var a=!0;return\"click\"===n&&(a=!1!==l.component.changeBackground(\"black\")&&a),a},An.b,An.a)),i.Y(66,1097728,null,0,Rn.a,[[8,\"dot\"],Ql.a,i.j,i.z],null,null),(l()(),i._20(-1,null,[\"\\n        \"])),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i.Z(70,0,null,null,13,\"ion-item\",[[\"class\",\"text-athelas item item-block\"]],null,null,null,$l.b,$l.a)),i.Y(71,1097728,null,3,Kl.a,[Jl.a,Ql.a,i.j,i.z,[2,ln.a]],null,null),i._18(335544320,8,{contentLabel:0}),i._18(603979776,9,{_buttons:1}),i._18(603979776,10,{_icons:1}),i.Y(75,16384,null,0,nn.a,[],null,null),(l()(),i._20(-1,2,[\"\\n        \"])),(l()(),i.Z(77,0,null,1,2,\"ion-label\",[],null,null,null,null,null)),i.Y(78,16384,[[8,4]],0,la.a,[Ql.a,i.j,i.z,[8,null],[8,null],[8,null],[8,null]],null,null),(l()(),i._20(-1,null,[\"Athelas\"])),(l()(),i._20(-1,2,[\"\\n        \"])),(l()(),i.Z(81,0,null,4,1,\"ion-radio\",[[\"value\",\"Athelas\"]],[[2,\"radio-disabled\",null]],[[null,\"click\"]],function(l,n,u){var a=!0;return\"click\"===n&&(a=!1!==i._13(l,82)._click(u)&&a),a},Te.b,Te.a)),i.Y(82,245760,null,0,Se.a,[Jl.a,Ql.a,i.j,i.z,[2,Kl.a],[2,xe.a]],{value:[0,\"value\"]},null),(l()(),i._20(-1,2,[\"\\n      \"])),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i.Z(85,0,null,null,13,\"ion-item\",[[\"class\",\"text-charter item item-block\"]],null,null,null,$l.b,$l.a)),i.Y(86,1097728,null,3,Kl.a,[Jl.a,Ql.a,i.j,i.z,[2,ln.a]],null,null),i._18(335544320,11,{contentLabel:0}),i._18(603979776,12,{_buttons:1}),i._18(603979776,13,{_icons:1}),i.Y(90,16384,null,0,nn.a,[],null,null),(l()(),i._20(-1,2,[\"\\n        \"])),(l()(),i.Z(92,0,null,1,2,\"ion-label\",[],null,null,null,null,null)),i.Y(93,16384,[[11,4]],0,la.a,[Ql.a,i.j,i.z,[8,null],[8,null],[8,null],[8,null]],null,null),(l()(),i._20(-1,null,[\"Charter\"])),(l()(),i._20(-1,2,[\"\\n        \"])),(l()(),i.Z(96,0,null,4,1,\"ion-radio\",[[\"value\",\"Charter\"]],[[2,\"radio-disabled\",null]],[[null,\"click\"]],function(l,n,u){var a=!0;return\"click\"===n&&(a=!1!==i._13(l,97)._click(u)&&a),a},Te.b,Te.a)),i.Y(97,245760,null,0,Se.a,[Jl.a,Ql.a,i.j,i.z,[2,Kl.a],[2,xe.a]],{value:[0,\"value\"]},null),(l()(),i._20(-1,2,[\"\\n      \"])),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i.Z(100,0,null,null,13,\"ion-item\",[[\"class\",\"text-iowan item item-block\"]],null,null,null,$l.b,$l.a)),i.Y(101,1097728,null,3,Kl.a,[Jl.a,Ql.a,i.j,i.z,[2,ln.a]],null,null),i._18(335544320,14,{contentLabel:0}),i._18(603979776,15,{_buttons:1}),i._18(603979776,16,{_icons:1}),i.Y(105,16384,null,0,nn.a,[],null,null),(l()(),i._20(-1,2,[\"\\n        \"])),(l()(),i.Z(107,0,null,1,2,\"ion-label\",[],null,null,null,null,null)),i.Y(108,16384,[[14,4]],0,la.a,[Ql.a,i.j,i.z,[8,null],[8,null],[8,null],[8,null]],null,null),(l()(),i._20(-1,null,[\"Iowan\"])),(l()(),i._20(-1,2,[\"\\n        \"])),(l()(),i.Z(111,0,null,4,1,\"ion-radio\",[[\"value\",\"Iowan\"]],[[2,\"radio-disabled\",null]],[[null,\"click\"]],function(l,n,u){var a=!0;return\"click\"===n&&(a=!1!==i._13(l,112)._click(u)&&a),a},Te.b,Te.a)),i.Y(112,245760,null,0,Se.a,[Jl.a,Ql.a,i.j,i.z,[2,Kl.a],[2,xe.a]],{value:[0,\"value\"]},null),(l()(),i._20(-1,2,[\"\\n      \"])),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i.Z(115,0,null,null,13,\"ion-item\",[[\"class\",\"text-palatino item item-block\"]],null,null,null,$l.b,$l.a)),i.Y(116,1097728,null,3,Kl.a,[Jl.a,Ql.a,i.j,i.z,[2,ln.a]],null,null),i._18(335544320,17,{contentLabel:0}),i._18(603979776,18,{_buttons:1}),i._18(603979776,19,{_icons:1}),i.Y(120,16384,null,0,nn.a,[],null,null),(l()(),i._20(-1,2,[\"\\n        \"])),(l()(),i.Z(122,0,null,1,2,\"ion-label\",[],null,null,null,null,null)),i.Y(123,16384,[[17,4]],0,la.a,[Ql.a,i.j,i.z,[8,null],[8,null],[8,null],[8,null]],null,null),(l()(),i._20(-1,null,[\"Palatino\"])),(l()(),i._20(-1,2,[\"\\n        \"])),(l()(),i.Z(126,0,null,4,1,\"ion-radio\",[[\"value\",\"Palatino\"]],[[2,\"radio-disabled\",null]],[[null,\"click\"]],function(l,n,u){var a=!0;return\"click\"===n&&(a=!1!==i._13(l,127)._click(u)&&a),a},Te.b,Te.a)),i.Y(127,245760,null,0,Se.a,[Jl.a,Ql.a,i.j,i.z,[2,Kl.a],[2,xe.a]],{value:[0,\"value\"]},null),(l()(),i._20(-1,2,[\"\\n      \"])),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i.Z(130,0,null,null,13,\"ion-item\",[[\"class\",\"text-san-francisco item item-block\"]],null,null,null,$l.b,$l.a)),i.Y(131,1097728,null,3,Kl.a,[Jl.a,Ql.a,i.j,i.z,[2,ln.a]],null,null),i._18(335544320,20,{contentLabel:0}),i._18(603979776,21,{_buttons:1}),i._18(603979776,22,{_icons:1}),i.Y(135,16384,null,0,nn.a,[],null,null),(l()(),i._20(-1,2,[\"\\n        \"])),(l()(),i.Z(137,0,null,1,2,\"ion-label\",[],null,null,null,null,null)),i.Y(138,16384,[[20,4]],0,la.a,[Ql.a,i.j,i.z,[8,null],[8,null],[8,null],[8,null]],null,null),(l()(),i._20(-1,null,[\"San Francisco\"])),(l()(),i._20(-1,2,[\"\\n        \"])),(l()(),i.Z(141,0,null,4,1,\"ion-radio\",[[\"value\",\"San Francisco\"]],[[2,\"radio-disabled\",null]],[[null,\"click\"]],function(l,n,u){var a=!0;return\"click\"===n&&(a=!1!==i._13(l,142)._click(u)&&a),a},Te.b,Te.a)),i.Y(142,245760,null,0,Se.a,[Jl.a,Ql.a,i.j,i.z,[2,Kl.a],[2,xe.a]],{value:[0,\"value\"]},null),(l()(),i._20(-1,2,[\"\\n      \"])),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i.Z(145,0,null,null,13,\"ion-item\",[[\"class\",\"text-seravek item item-block\"]],null,null,null,$l.b,$l.a)),i.Y(146,1097728,null,3,Kl.a,[Jl.a,Ql.a,i.j,i.z,[2,ln.a]],null,null),i._18(335544320,23,{contentLabel:0}),i._18(603979776,24,{_buttons:1}),i._18(603979776,25,{_icons:1}),i.Y(150,16384,null,0,nn.a,[],null,null),(l()(),i._20(-1,2,[\"\\n        \"])),(l()(),i.Z(152,0,null,1,2,\"ion-label\",[],null,null,null,null,null)),i.Y(153,16384,[[23,4]],0,la.a,[Ql.a,i.j,i.z,[8,null],[8,null],[8,null],[8,null]],null,null),(l()(),i._20(-1,null,[\"Seravek\"])),(l()(),i._20(-1,2,[\"\\n        \"])),(l()(),i.Z(156,0,null,4,1,\"ion-radio\",[[\"value\",\"Seravek\"]],[[2,\"radio-disabled\",null]],[[null,\"click\"]],function(l,n,u){var a=!0;return\"click\"===n&&(a=!1!==i._13(l,157)._click(u)&&a),a},Te.b,Te.a)),i.Y(157,245760,null,0,Se.a,[Jl.a,Ql.a,i.j,i.z,[2,Kl.a],[2,xe.a]],{value:[0,\"value\"]},null),(l()(),i._20(-1,2,[\"\\n      \"])),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i.Z(160,0,null,null,13,\"ion-item\",[[\"class\",\"text-times-new-roman item item-block\"]],null,null,null,$l.b,$l.a)),i.Y(161,1097728,null,3,Kl.a,[Jl.a,Ql.a,i.j,i.z,[2,ln.a]],null,null),i._18(335544320,26,{contentLabel:0}),i._18(603979776,27,{_buttons:1}),i._18(603979776,28,{_icons:1}),i.Y(165,16384,null,0,nn.a,[],null,null),(l()(),i._20(-1,2,[\"\\n        \"])),(l()(),i.Z(167,0,null,1,2,\"ion-label\",[],null,null,null,null,null)),i.Y(168,16384,[[26,4]],0,la.a,[Ql.a,i.j,i.z,[8,null],[8,null],[8,null],[8,null]],null,null),(l()(),i._20(-1,null,[\"Times New Roman\"])),(l()(),i._20(-1,2,[\"\\n        \"])),(l()(),i.Z(171,0,null,4,1,\"ion-radio\",[[\"value\",\"Times New Roman\"]],[[2,\"radio-disabled\",null]],[[null,\"click\"]],function(l,n,u){var a=!0;return\"click\"===n&&(a=!1!==i._13(l,172)._click(u)&&a),a},Te.b,Te.a)),i.Y(172,245760,null,0,Se.a,[Jl.a,Ql.a,i.j,i.z,[2,Kl.a],[2,xe.a]],{value:[0,\"value\"]},null),(l()(),i._20(-1,2,[\"\\n      \"])),(l()(),i._20(-1,null,[\"\\n    \"])),(l()(),i._20(-1,null,[\"\\n  \"]))],function(l,n){l(n,5,0,n.component.fontFamily),l(n,82,0,\"Athelas\"),l(n,97,0,\"Charter\"),l(n,112,0,\"Iowan\"),l(n,127,0,\"Palatino\"),l(n,142,0,\"San Francisco\"),l(n,157,0,\"Seravek\"),l(n,172,0,\"Times New Roman\")},function(l,n){var u=n.component;l(n,1,0,i._13(n,7).ngClassUntouched,i._13(n,7).ngClassTouched,i._13(n,7).ngClassPristine,i._13(n,7).ngClassDirty,i._13(n,7).ngClassValid,i._13(n,7).ngClassInvalid,i._13(n,7).ngClassPending),l(n,44,0,\"white\"==u.background),l(n,51,0,\"tan\"==u.background),l(n,58,0,\"grey\"==u.background),l(n,65,0,\"black\"==u.background),l(n,81,0,i._13(n,82)._disabled),l(n,96,0,i._13(n,97)._disabled),l(n,111,0,i._13(n,112)._disabled),l(n,126,0,i._13(n,127)._disabled),l(n,141,0,i._13(n,142)._disabled),l(n,156,0,i._13(n,157)._disabled),l(n,171,0,i._13(n,172)._disabled)})},Be)),i.Y(1,114688,null,0,cl,[ze.a],null,null)],function(l,n){l(n,1,0)},null)},{},{},[]),Ae=i.X({encapsulation:2,styles:[],data:{}}),Re=i.V(\"ng-component\",rl,function(l){return i._22(0,[(l()(),i.Z(0,0,null,null,1,\"ng-component\",[],null,null,null,function(l){return i._22(0,[i._18(402653184,1,{content:0}),i._18(402653184,2,{text:0}),(l()(),i._20(-1,null,[\"\\n\"])),(l()(),i.Z(3,0,null,null,22,\"ion-header\",[],null,null,null,null,null)),i.Y(4,16384,null,0,jn.a,[Ql.a,i.j,i.z,[2,fn.a]],null,null),(l()(),i._20(-1,null,[\"\\n  \"])),(l()(),i.Z(6,0,null,null,18,\"ion-navbar\",[[\"class\",\"toolbar\"]],[[8,\"hidden\",0],[2,\"statusbar-padding\",null]],null,null,Fn.b,Fn.a)),i.Y(7,49152,null,0,Pn.a,[Yn.a,[2,fn.a],[2,Ln.a],Ql.a,i.j,i.z],null,null),(l()(),i._20(-1,3,[\"\\n    \"])),(l()(),i.Z(9,0,null,3,2,\"ion-title\",[],null,null,null,vn.b,vn.a)),i.Y(10,49152,null,0,yn.a,[Ql.a,i.j,i.z,[2,kn.a],[2,Pn.a]],null,null),(l()(),i._20(-1,0,[\"Popovers\"])),(l()(),i._20(-1,3,[\"\\n    \"])),(l()(),i.Z(13,0,null,2,10,\"ion-buttons\",[[\"end\",\"\"]],null,null,null,null,null)),i.Y(14,16384,null,1,ru.a,[Ql.a,i.j,i.z,[2,kn.a],[2,Pn.a]],null,null),i._18(603979776,3,{_buttons:1}),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i.Z(17,0,null,null,5,\"button\",[[\"icon-only\",\"\"],[\"ion-button\",\"\"]],null,[[null,\"click\"]],function(l,n,u){var a=!0;return\"click\"===n&&(a=!1!==l.component.presentPopover(u)&&a),a},An.b,An.a)),i.Y(18,1097728,[[3,4]],0,Rn.a,[[8,\"\"],Ql.a,i.j,i.z],null,null),(l()(),i._20(-1,0,[\"\\n        \"])),(l()(),i.Z(20,0,null,0,1,\"ion-icon\",[[\"name\",\"more\"],[\"role\",\"img\"]],[[2,\"hide\",null]],null,null,null,null)),i.Y(21,147456,null,0,mn.a,[Ql.a,i.j,i.z],{name:[0,\"name\"]},null),(l()(),i._20(-1,0,[\"\\n      \"])),(l()(),i._20(-1,null,[\"\\n    \"])),(l()(),i._20(-1,3,[\"\\n  \"])),(l()(),i._20(-1,null,[\"\\n\"])),(l()(),i._20(-1,null,[\"\\n\\n\"])),(l()(),i.Z(27,0,[[1,0]],null,20,\"ion-content\",[[\"class\",\"popover-page\"],[\"padding\",\"\"]],[[2,\"statusbar-padding\",null],[2,\"has-refresher\",null]],null,null,Cn.b,Cn.a)),i.Y(28,4374528,[[\"popoverContent\",4]],0,wn.a,[Ql.a,on.a,_n.a,i.j,i.z,Yn.a,Zn.a,i.u,[2,fn.a],[2,Ln.a]],null,null),(l()(),i._20(-1,1,[\"\\n  \"])),(l()(),i.Z(30,0,[[2,0],[\"popoverText\",1]],1,16,\"div\",[[\"class\",\"text-to-change\"]],null,null,null,null,null)),(l()(),i._20(-1,null,[\"\\n    \"])),(l()(),i.Z(32,0,null,null,1,\"div\",[],null,null,null,null,null)),(l()(),i._20(-1,null,[\"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Mauris vel ipsum in purus mollis dictum eget vitae purus. Nulla ultrices est odio, a maximus velit pretium ac. Donec vel elementum mi. Proin elementum pulvinar neque, in lacinia nibh tempus auctor. Nam sapien velit, commodo ac nibh a, maximus ullamcorper nunc. Integer luctus tortor dignissim, dictum neque at, scelerisque purus. Vivamus nec erat vel magna posuere euismod. Sed ac augue eu tellus tincidunt fermentum eget sit amet nunc. Donec sit amet mi libero. Cras nunc arcu, ultrices nec sapien eu, convallis posuere libero. Pellentesque vulputate lacus eros, at lobortis lorem egestas et. Vestibulum tempus quam in efficitur lobortis. Maecenas consectetur consequat sem pharetra aliquet. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos.\"])),(l()(),i._20(-1,null,[\"\\n\\n    \"])),(l()(),i.Z(35,0,null,null,1,\"div\",[],null,null,null,null,null)),(l()(),i._20(-1,null,[\"Mauris ac ligula elit. Nulla pulvinar eget leo ut aliquet. Praesent sit amet luctus quam. Nam fringilla iaculis mi, ut maximus mauris molestie feugiat. Curabitur nec scelerisque elit. Nunc eu odio facilisis, tempor enim eget, venenatis sem. Sed vitae lorem vehicula, auctor orci ultrices, finibus mauris. Donec vitae pulvinar diam. Nulla luctus congue quam, sed lacinia arcu dictum a.\"])),(l()(),i._20(-1,null,[\"\\n\\n    \"])),(l()(),i.Z(38,0,null,null,1,\"div\",[],null,null,null,null,null)),(l()(),i._20(-1,null,[\"Morbi laoreet magna elit, id dapibus massa varius consequat. Praesent rhoncus nunc quam, eu mollis velit commodo ut. Etiam euismod elit mi, non auctor velit blandit ut. Aenean vitae pulvinar mi, ac pretium tellus. Morbi eu auctor sem, sollicitudin cursus felis. Praesent vestibulum velit sed eros iaculis ornare. Praesent diam diam, pellentesque eget scelerisque sed, bibendum ut risus. Sed sed fermentum sem. Integer vel justo felis. Proin eget quam est. In sit amet ipsum sagittis, convallis ipsum fringilla, interdum ante. Etiam vel tincidunt mauris. Nunc feugiat eros nunc, et vestibulum metus mollis et. Nullam eu viverra velit, id ultrices nisl. Donec non enim elementum, laoreet sapien id, feugiat tellus.\"])),(l()(),i._20(-1,null,[\"\\n\\n    \"])),(l()(),i.Z(41,0,null,null,1,\"div\",[],null,null,null,null,null)),(l()(),i._20(-1,null,[\"Sed pellentesque ipsum eget ante hendrerit maximus. Aliquam id venenatis nulla. Nullam in nibh at enim vestibulum ullamcorper. Nam felis dolor, lobortis vel est non, condimentum malesuada nisl. In metus sapien, malesuada at nulla in, pretium aliquam turpis. Quisque elementum purus mi, sed tristique turpis ultricies in. Donec feugiat dolor non ultricies ultricies. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Proin ut purus et diam porta cursus vitae semper mi. Donec fringilla tellus orci. Interdum et malesuada fames ac ante ipsum primis in faucibus. Nunc vitae commodo sem. Duis vehicula quam sit amet imperdiet facilisis. Pellentesque eget dignissim neque, et scelerisque libero. Maecenas molestie metus sed orci cursus, in venenatis justo dapibus.\"])),(l()(),i._20(-1,null,[\"\\n\\n    \"])),(l()(),i.Z(44,0,null,null,1,\"div\",[],null,null,null,null,null)),(l()(),i._20(-1,null,[\"Aenean rhoncus urna at interdum blandit. Donec ac massa nec libero vehicula tincidunt. Sed sit amet hendrerit risus. Aliquam vitae vestibulum ipsum, non feugiat orci. Vivamus eu rutrum elit. Nulla dapibus tortor non dignissim pretium. Nulla in luctus turpis. Etiam non mattis tortor, at aliquet ex. Nunc ut ante varius, auctor dui vel, volutpat elit. Nunc laoreet augue sit amet ultrices porta. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Vestibulum pellentesque lobortis est, ut tincidunt ligula mollis sit amet. In porta risus arcu, quis pellentesque dolor mattis non. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae;\"])),(l()(),i._20(-1,null,[\"\\n  \"])),(l()(),i._20(-1,1,[\"\\n\"])),(l()(),i._20(-1,null,[\"\\n\"]))],function(l,n){l(n,21,0,\"more\")},function(l,n){l(n,6,0,i._13(n,7)._hidden,i._13(n,7)._sbPadding),l(n,20,0,i._13(n,21)._hidden),l(n,27,0,i._13(n,28).statusbarPadding,i._13(n,28)._hasRefresher)})},Ae)),i.Y(1,49152,null,0,rl,[Me.a],null,null)],null,null)},{},{},[]),Ve=i.X({encapsulation:2,styles:[],data:{}}),De=i.V(\"ng-component\",dl,function(l){return i._22(0,[(l()(),i.Z(0,0,null,null,1,\"ng-component\",[],null,null,null,function(l){return i._22(0,[(l()(),i._20(-1,null,[\"\\n\"])),(l()(),i.Z(1,0,null,null,10,\"ion-header\",[],null,null,null,null,null)),i.Y(2,16384,null,0,jn.a,[Ql.a,i.j,i.z,[2,fn.a]],null,null),(l()(),i._20(-1,null,[\"\\n  \"])),(l()(),i.Z(4,0,null,null,6,\"ion-navbar\",[[\"class\",\"toolbar\"]],[[8,\"hidden\",0],[2,\"statusbar-padding\",null]],null,null,Fn.b,Fn.a)),i.Y(5,49152,null,0,Pn.a,[Yn.a,[2,fn.a],[2,Ln.a],Ql.a,i.j,i.z],null,null),(l()(),i._20(-1,3,[\"\\n    \"])),(l()(),i.Z(7,0,null,3,2,\"ion-title\",[],null,null,null,vn.b,vn.a)),i.Y(8,49152,null,0,yn.a,[Ql.a,i.j,i.z,[2,kn.a],[2,Pn.a]],null,null),(l()(),i._20(-1,0,[\"\\n      Radios\\n    \"])),(l()(),i._20(-1,3,[\"\\n  \"])),(l()(),i._20(-1,null,[\"\\n\"])),(l()(),i._20(-1,null,[\"\\n\\n\"])),(l()(),i.Z(13,0,null,null,207,\"ion-content\",[],[[2,\"statusbar-padding\",null],[2,\"has-refresher\",null]],null,null,Cn.b,Cn.a)),i.Y(14,4374528,null,0,wn.a,[Ql.a,on.a,_n.a,i.j,i.z,Yn.a,Zn.a,i.u,[2,fn.a],[2,Ln.a]],null,null),(l()(),i._20(-1,1,[\"\\n\\n  \"])),(l()(),i.Z(16,0,null,1,203,\"form\",[[\"novalidate\",\"\"]],[[2,\"ng-untouched\",null],[2,\"ng-touched\",null],[2,\"ng-pristine\",null],[2,\"ng-dirty\",null],[2,\"ng-valid\",null],[2,\"ng-invalid\",null],[2,\"ng-pending\",null]],[[null,\"submit\"],[null,\"reset\"]],function(l,n,u){var a=!0,e=l.component;return\"submit\"===n&&(a=!1!==i._13(l,18).onSubmit(u)&&a),\"reset\"===n&&(a=!1!==i._13(l,18).onReset()&&a),\"submit\"===n&&(a=!1!==e.doSubmit(u)&&a),a},null,null)),i.Y(17,16384,null,0,A.r,[],null,null),i.Y(18,540672,null,0,A.h,[[8,null],[8,null]],{form:[0,\"form\"]},null),i._17(2048,null,A.b,null,[A.h]),i.Y(20,16384,null,0,A.m,[A.b],null,null),(l()(),i._20(-1,null,[\"\\n    \"])),(l()(),i.Z(22,0,null,null,196,\"ion-list\",[[\"formControlName\",\"langs\"],[\"radio-group\",\"\"],[\"role\",\"radiogroup\"]],[[2,\"ng-untouched\",null],[2,\"ng-touched\",null],[2,\"ng-pristine\",null],[2,\"ng-dirty\",null],[2,\"ng-valid\",null],[2,\"ng-invalid\",null],[2,\"ng-pending\",null]],null,null,null,null)),i.Y(23,1064960,null,1,xe.a,[i.z,i.j,i.g],null,null),i._18(335544320,1,{_header:0}),i._17(1024,null,A.j,function(l){return[l]},[xe.a]),i.Y(26,671744,null,0,A.f,[[3,A.b],[8,null],[8,null],[2,A.j]],{name:[0,\"name\"]},null),i._17(2048,null,A.k,null,[A.f]),i.Y(28,16384,null,0,A.l,[A.k],null,null),i.Y(29,16384,null,0,en.a,[Ql.a,i.j,i.z,on.a,tn.l,_n.a],null,null),(l()(),i._20(-1,null,[\"\\n\\n      \"])),(l()(),i.Z(31,0,null,null,6,\"ion-list-header\",[[\"class\",\"item\"]],null,null,null,$l.b,$l.a)),i.Y(32,1097728,null,3,Kl.a,[Jl.a,Ql.a,i.j,i.z,[2,ln.a]],null,null),i._18(335544320,2,{contentLabel:0}),i._18(603979776,3,{_buttons:1}),i._18(603979776,4,{_icons:1}),i.Y(36,16384,[[1,4]],0,Qu.a,[Ql.a,i.z,i.j,[8,null]],null,null),(l()(),i._20(-1,2,[\"\\n        Language\\n      \"])),(l()(),i._20(-1,null,[\"\\n\\n      \"])),(l()(),i.Z(39,0,null,null,13,\"ion-item\",[[\"class\",\"item item-block\"]],null,null,null,$l.b,$l.a)),i.Y(40,1097728,null,3,Kl.a,[Jl.a,Ql.a,i.j,i.z,[2,ln.a]],null,null),i._18(335544320,5,{contentLabel:0}),i._18(603979776,6,{_buttons:1}),i._18(603979776,7,{_icons:1}),i.Y(44,16384,null,0,nn.a,[],null,null),(l()(),i._20(-1,2,[\"\\n        \"])),(l()(),i.Z(46,0,null,1,2,\"ion-label\",[],null,null,null,null,null)),i.Y(47,16384,[[5,4]],0,la.a,[Ql.a,i.j,i.z,[8,null],[8,null],[8,null],[8,null]],null,null),(l()(),i._20(-1,null,[\"Go\"])),(l()(),i._20(-1,2,[\"\\n        \"])),(l()(),i.Z(50,0,null,4,1,\"ion-radio\",[[\"checked\",\"true\"],[\"value\",\"golang\"]],[[2,\"radio-disabled\",null]],[[null,\"click\"]],function(l,n,u){var a=!0;return\"click\"===n&&(a=!1!==i._13(l,51)._click(u)&&a),a},Te.b,Te.a)),i.Y(51,245760,null,0,Se.a,[Jl.a,Ql.a,i.j,i.z,[2,Kl.a],[2,xe.a]],{value:[0,\"value\"],checked:[1,\"checked\"]},null),(l()(),i._20(-1,2,[\"\\n      \"])),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i.Z(54,0,null,null,13,\"ion-item\",[[\"class\",\"item item-block\"]],null,null,null,$l.b,$l.a)),i.Y(55,1097728,null,3,Kl.a,[Jl.a,Ql.a,i.j,i.z,[2,ln.a]],null,null),i._18(335544320,8,{contentLabel:0}),i._18(603979776,9,{_buttons:1}),i._18(603979776,10,{_icons:1}),i.Y(59,16384,null,0,nn.a,[],null,null),(l()(),i._20(-1,2,[\"\\n        \"])),(l()(),i.Z(61,0,null,1,2,\"ion-label\",[],null,null,null,null,null)),i.Y(62,16384,[[8,4]],0,la.a,[Ql.a,i.j,i.z,[8,null],[8,null],[8,null],[8,null]],null,null),(l()(),i._20(-1,null,[\"Rust\"])),(l()(),i._20(-1,2,[\"\\n        \"])),(l()(),i.Z(65,0,null,4,1,\"ion-radio\",[[\"value\",\"rust\"]],[[2,\"radio-disabled\",null]],[[null,\"click\"]],function(l,n,u){var a=!0;return\"click\"===n&&(a=!1!==i._13(l,66)._click(u)&&a),a},Te.b,Te.a)),i.Y(66,245760,null,0,Se.a,[Jl.a,Ql.a,i.j,i.z,[2,Kl.a],[2,xe.a]],{value:[0,\"value\"]},null),(l()(),i._20(-1,2,[\"\\n      \"])),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i.Z(69,0,null,null,13,\"ion-item\",[[\"class\",\"item item-block\"]],null,null,null,$l.b,$l.a)),i.Y(70,1097728,null,3,Kl.a,[Jl.a,Ql.a,i.j,i.z,[2,ln.a]],null,null),i._18(335544320,11,{contentLabel:0}),i._18(603979776,12,{_buttons:1}),i._18(603979776,13,{_icons:1}),i.Y(74,16384,null,0,nn.a,[],null,null),(l()(),i._20(-1,2,[\"\\n        \"])),(l()(),i.Z(76,0,null,1,2,\"ion-label\",[],null,null,null,null,null)),i.Y(77,16384,[[11,4]],0,la.a,[Ql.a,i.j,i.z,[8,null],[8,null],[8,null],[8,null]],null,null),(l()(),i._20(-1,null,[\"Python\"])),(l()(),i._20(-1,2,[\"\\n        \"])),(l()(),i.Z(80,0,null,4,1,\"ion-radio\",[[\"value\",\"python\"]],[[2,\"radio-disabled\",null]],[[null,\"click\"]],function(l,n,u){var a=!0;return\"click\"===n&&(a=!1!==i._13(l,81)._click(u)&&a),a},Te.b,Te.a)),i.Y(81,245760,null,0,Se.a,[Jl.a,Ql.a,i.j,i.z,[2,Kl.a],[2,xe.a]],{value:[0,\"value\"]},null),(l()(),i._20(-1,2,[\"\\n      \"])),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i.Z(84,0,null,null,13,\"ion-item\",[[\"class\",\"item item-block\"]],null,null,null,$l.b,$l.a)),i.Y(85,1097728,null,3,Kl.a,[Jl.a,Ql.a,i.j,i.z,[2,ln.a]],null,null),i._18(335544320,14,{contentLabel:0}),i._18(603979776,15,{_buttons:1}),i._18(603979776,16,{_icons:1}),i.Y(89,16384,null,0,nn.a,[],null,null),(l()(),i._20(-1,2,[\"\\n        \"])),(l()(),i.Z(91,0,null,1,2,\"ion-label\",[],null,null,null,null,null)),i.Y(92,16384,[[14,4]],0,la.a,[Ql.a,i.j,i.z,[8,null],[8,null],[8,null],[8,null]],null,null),(l()(),i._20(-1,null,[\"Ruby\"])),(l()(),i._20(-1,2,[\"\\n        \"])),(l()(),i.Z(95,0,null,4,1,\"ion-radio\",[[\"value\",\"ruby\"]],[[2,\"radio-disabled\",null]],[[null,\"click\"]],function(l,n,u){var a=!0;return\"click\"===n&&(a=!1!==i._13(l,96)._click(u)&&a),a},Te.b,Te.a)),i.Y(96,245760,null,0,Se.a,[Jl.a,Ql.a,i.j,i.z,[2,Kl.a],[2,xe.a]],{value:[0,\"value\"]},null),(l()(),i._20(-1,2,[\"\\n      \"])),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i.Z(99,0,null,null,13,\"ion-item\",[[\"class\",\"item item-block\"]],null,null,null,$l.b,$l.a)),i.Y(100,1097728,null,3,Kl.a,[Jl.a,Ql.a,i.j,i.z,[2,ln.a]],null,null),i._18(335544320,17,{contentLabel:0}),i._18(603979776,18,{_buttons:1}),i._18(603979776,19,{_icons:1}),i.Y(104,16384,null,0,nn.a,[],null,null),(l()(),i._20(-1,2,[\"\\n        \"])),(l()(),i.Z(106,0,null,1,2,\"ion-label\",[],null,null,null,null,null)),i.Y(107,16384,[[17,4]],0,la.a,[Ql.a,i.j,i.z,[8,null],[8,null],[8,null],[8,null]],null,null),(l()(),i._20(-1,null,[\"Clojure\"])),(l()(),i._20(-1,2,[\"\\n        \"])),(l()(),i.Z(110,0,null,4,1,\"ion-radio\",[[\"value\",\"clojure\"]],[[2,\"radio-disabled\",null]],[[null,\"click\"]],function(l,n,u){var a=!0;return\"click\"===n&&(a=!1!==i._13(l,111)._click(u)&&a),a},Te.b,Te.a)),i.Y(111,245760,null,0,Se.a,[Jl.a,Ql.a,i.j,i.z,[2,Kl.a],[2,xe.a]],{value:[0,\"value\"]},null),(l()(),i._20(-1,2,[\"\\n      \"])),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i.Z(114,0,null,null,13,\"ion-item\",[[\"class\",\"item item-block\"]],null,null,null,$l.b,$l.a)),i.Y(115,1097728,null,3,Kl.a,[Jl.a,Ql.a,i.j,i.z,[2,ln.a]],null,null),i._18(335544320,20,{contentLabel:0}),i._18(603979776,21,{_buttons:1}),i._18(603979776,22,{_icons:1}),i.Y(119,16384,null,0,nn.a,[],null,null),(l()(),i._20(-1,2,[\"\\n        \"])),(l()(),i.Z(121,0,null,1,2,\"ion-label\",[],null,null,null,null,null)),i.Y(122,16384,[[20,4]],0,la.a,[Ql.a,i.j,i.z,[8,null],[8,null],[8,null],[8,null]],null,null),(l()(),i._20(-1,null,[\"Java\"])),(l()(),i._20(-1,2,[\"\\n        \"])),(l()(),i.Z(125,0,null,4,1,\"ion-radio\",[[\"value\",\"java\"]],[[2,\"radio-disabled\",null]],[[null,\"click\"]],function(l,n,u){var a=!0;return\"click\"===n&&(a=!1!==i._13(l,126)._click(u)&&a),a},Te.b,Te.a)),i.Y(126,245760,null,0,Se.a,[Jl.a,Ql.a,i.j,i.z,[2,Kl.a],[2,xe.a]],{value:[0,\"value\"]},null),(l()(),i._20(-1,2,[\"\\n      \"])),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i.Z(129,0,null,null,13,\"ion-item\",[[\"class\",\"item item-block\"]],null,null,null,$l.b,$l.a)),i.Y(130,1097728,null,3,Kl.a,[Jl.a,Ql.a,i.j,i.z,[2,ln.a]],null,null),i._18(335544320,23,{contentLabel:0}),i._18(603979776,24,{_buttons:1}),i._18(603979776,25,{_icons:1}),i.Y(134,16384,null,0,nn.a,[],null,null),(l()(),i._20(-1,2,[\"\\n        \"])),(l()(),i.Z(136,0,null,1,2,\"ion-label\",[],null,null,null,null,null)),i.Y(137,16384,[[23,4]],0,la.a,[Ql.a,i.j,i.z,[8,null],[8,null],[8,null],[8,null]],null,null),(l()(),i._20(-1,null,[\"PHP\"])),(l()(),i._20(-1,2,[\"\\n        \"])),(l()(),i.Z(140,0,null,4,1,\"ion-radio\",[[\"value\",\"php\"]],[[2,\"radio-disabled\",null]],[[null,\"click\"]],function(l,n,u){var a=!0;return\"click\"===n&&(a=!1!==i._13(l,141)._click(u)&&a),a},Te.b,Te.a)),i.Y(141,245760,null,0,Se.a,[Jl.a,Ql.a,i.j,i.z,[2,Kl.a],[2,xe.a]],{value:[0,\"value\"]},null),(l()(),i._20(-1,2,[\"\\n      \"])),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i.Z(144,0,null,null,13,\"ion-item\",[[\"class\",\"item item-block\"]],null,null,null,$l.b,$l.a)),i.Y(145,1097728,null,3,Kl.a,[Jl.a,Ql.a,i.j,i.z,[2,ln.a]],null,null),i._18(335544320,26,{contentLabel:0}),i._18(603979776,27,{_buttons:1}),i._18(603979776,28,{_icons:1}),i.Y(149,16384,null,0,nn.a,[],null,null),(l()(),i._20(-1,2,[\"\\n        \"])),(l()(),i.Z(151,0,null,1,2,\"ion-label\",[],null,null,null,null,null)),i.Y(152,16384,[[26,4]],0,la.a,[Ql.a,i.j,i.z,[8,null],[8,null],[8,null],[8,null]],null,null),(l()(),i._20(-1,null,[\".NET\"])),(l()(),i._20(-1,2,[\"\\n        \"])),(l()(),i.Z(155,0,null,4,1,\"ion-radio\",[[\"value\",\"dotnet\"]],[[2,\"radio-disabled\",null]],[[null,\"click\"]],function(l,n,u){var a=!0;return\"click\"===n&&(a=!1!==i._13(l,156)._click(u)&&a),a},Te.b,Te.a)),i.Y(156,245760,null,0,Se.a,[Jl.a,Ql.a,i.j,i.z,[2,Kl.a],[2,xe.a]],{value:[0,\"value\"]},null),(l()(),i._20(-1,2,[\"\\n      \"])),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i.Z(159,0,null,null,13,\"ion-item\",[[\"class\",\"item item-block\"]],null,null,null,$l.b,$l.a)),i.Y(160,1097728,null,3,Kl.a,[Jl.a,Ql.a,i.j,i.z,[2,ln.a]],null,null),i._18(335544320,29,{contentLabel:0}),i._18(603979776,30,{_buttons:1}),i._18(603979776,31,{_icons:1}),i.Y(164,16384,null,0,nn.a,[],null,null),(l()(),i._20(-1,2,[\"\\n        \"])),(l()(),i.Z(166,0,null,1,2,\"ion-label\",[],null,null,null,null,null)),i.Y(167,16384,[[29,4]],0,la.a,[Ql.a,i.j,i.z,[8,null],[8,null],[8,null],[8,null]],null,null),(l()(),i._20(-1,null,[\"C++\"])),(l()(),i._20(-1,2,[\"\\n        \"])),(l()(),i.Z(170,0,null,4,1,\"ion-radio\",[[\"value\",\"cplusplus\"]],[[2,\"radio-disabled\",null]],[[null,\"click\"]],function(l,n,u){var a=!0;return\"click\"===n&&(a=!1!==i._13(l,171)._click(u)&&a),a},Te.b,Te.a)),i.Y(171,245760,null,0,Se.a,[Jl.a,Ql.a,i.j,i.z,[2,Kl.a],[2,xe.a]],{value:[0,\"value\"]},null),(l()(),i._20(-1,2,[\"\\n      \"])),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i.Z(174,0,null,null,13,\"ion-item\",[[\"class\",\"item item-block\"]],null,null,null,$l.b,$l.a)),i.Y(175,1097728,null,3,Kl.a,[Jl.a,Ql.a,i.j,i.z,[2,ln.a]],null,null),i._18(335544320,32,{contentLabel:0}),i._18(603979776,33,{_buttons:1}),i._18(603979776,34,{_icons:1}),i.Y(179,16384,null,0,nn.a,[],null,null),(l()(),i._20(-1,2,[\"\\n        \"])),(l()(),i.Z(181,0,null,1,2,\"ion-label\",[],null,null,null,null,null)),i.Y(182,16384,[[32,4]],0,la.a,[Ql.a,i.j,i.z,[8,null],[8,null],[8,null],[8,null]],null,null),(l()(),i._20(-1,null,[\"Scala\"])),(l()(),i._20(-1,2,[\"\\n        \"])),(l()(),i.Z(185,0,null,4,1,\"ion-radio\",[[\"value\",\"scala\"]],[[2,\"radio-disabled\",null]],[[null,\"click\"]],function(l,n,u){var a=!0;return\"click\"===n&&(a=!1!==i._13(l,186)._click(u)&&a),a},Te.b,Te.a)),i.Y(186,245760,null,0,Se.a,[Jl.a,Ql.a,i.j,i.z,[2,Kl.a],[2,xe.a]],{value:[0,\"value\"]},null),(l()(),i._20(-1,2,[\"\\n      \"])),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i.Z(189,0,null,null,13,\"ion-item\",[[\"class\",\"item item-block\"]],null,null,null,$l.b,$l.a)),i.Y(190,1097728,null,3,Kl.a,[Jl.a,Ql.a,i.j,i.z,[2,ln.a]],null,null),i._18(335544320,35,{contentLabel:0}),i._18(603979776,36,{_buttons:1}),i._18(603979776,37,{_icons:1}),i.Y(194,16384,null,0,nn.a,[],null,null),(l()(),i._20(-1,2,[\"\\n        \"])),(l()(),i.Z(196,0,null,1,2,\"ion-label\",[],null,null,null,null,null)),i.Y(197,16384,[[35,4]],0,la.a,[Ql.a,i.j,i.z,[8,null],[8,null],[8,null],[8,null]],null,null),(l()(),i._20(-1,null,[\"Haskell\"])),(l()(),i._20(-1,2,[\"\\n        \"])),(l()(),i.Z(200,0,null,4,1,\"ion-radio\",[[\"value\",\"haskell\"]],[[2,\"radio-disabled\",null]],[[null,\"click\"]],function(l,n,u){var a=!0;return\"click\"===n&&(a=!1!==i._13(l,201)._click(u)&&a),a},Te.b,Te.a)),i.Y(201,245760,null,0,Se.a,[Jl.a,Ql.a,i.j,i.z,[2,Kl.a],[2,xe.a]],{value:[0,\"value\"]},null),(l()(),i._20(-1,2,[\"\\n      \"])),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i.Z(204,0,null,null,13,\"ion-item\",[[\"class\",\"item item-block\"]],null,null,null,$l.b,$l.a)),i.Y(205,1097728,null,3,Kl.a,[Jl.a,Ql.a,i.j,i.z,[2,ln.a]],null,null),i._18(335544320,38,{contentLabel:0}),i._18(603979776,39,{_buttons:1}),i._18(603979776,40,{_icons:1}),i.Y(209,16384,null,0,nn.a,[],null,null),(l()(),i._20(-1,2,[\"\\n        \"])),(l()(),i.Z(211,0,null,1,2,\"ion-label\",[],null,null,null,null,null)),i.Y(212,16384,[[38,4]],0,la.a,[Ql.a,i.j,i.z,[8,null],[8,null],[8,null],[8,null]],null,null),(l()(),i._20(-1,null,[\"Erlang\"])),(l()(),i._20(-1,2,[\"\\n        \"])),(l()(),i.Z(215,0,null,4,1,\"ion-radio\",[[\"value\",\"erlang\"]],[[2,\"radio-disabled\",null]],[[null,\"click\"]],function(l,n,u){var a=!0;return\"click\"===n&&(a=!1!==i._13(l,216)._click(u)&&a),a},Te.b,Te.a)),i.Y(216,245760,null,0,Se.a,[Jl.a,Ql.a,i.j,i.z,[2,Kl.a],[2,xe.a]],{value:[0,\"value\"]},null),(l()(),i._20(-1,2,[\"\\n      \"])),(l()(),i._20(-1,null,[\"\\n    \"])),(l()(),i._20(-1,null,[\"\\n  \"])),(l()(),i._20(-1,1,[\"\\n\\n\"])),(l()(),i._20(-1,null,[\"\\n\"]))],function(l,n){l(n,18,0,n.component.langForm),l(n,26,0,\"langs\"),l(n,51,0,\"golang\",\"true\"),l(n,66,0,\"rust\"),l(n,81,0,\"python\"),l(n,96,0,\"ruby\"),l(n,111,0,\"clojure\"),l(n,126,0,\"java\"),l(n,141,0,\"php\"),l(n,156,0,\"dotnet\"),l(n,171,0,\"cplusplus\"),l(n,186,0,\"scala\"),l(n,201,0,\"haskell\"),l(n,216,0,\"erlang\")},function(l,n){l(n,4,0,i._13(n,5)._hidden,i._13(n,5)._sbPadding),l(n,13,0,i._13(n,14).statusbarPadding,i._13(n,14)._hasRefresher),l(n,16,0,i._13(n,20).ngClassUntouched,i._13(n,20).ngClassTouched,i._13(n,20).ngClassPristine,i._13(n,20).ngClassDirty,i._13(n,20).ngClassValid,i._13(n,20).ngClassInvalid,i._13(n,20).ngClassPending),l(n,22,0,i._13(n,28).ngClassUntouched,i._13(n,28).ngClassTouched,i._13(n,28).ngClassPristine,i._13(n,28).ngClassDirty,i._13(n,28).ngClassValid,i._13(n,28).ngClassInvalid,i._13(n,28).ngClassPending),l(n,50,0,i._13(n,51)._disabled),l(n,65,0,i._13(n,66)._disabled),l(n,80,0,i._13(n,81)._disabled),l(n,95,0,i._13(n,96)._disabled),l(n,110,0,i._13(n,111)._disabled),l(n,125,0,i._13(n,126)._disabled),l(n,140,0,i._13(n,141)._disabled),l(n,155,0,i._13(n,156)._disabled),l(n,170,0,i._13(n,171)._disabled),l(n,185,0,i._13(n,186)._disabled),l(n,200,0,i._13(n,201)._disabled),l(n,215,0,i._13(n,216)._disabled)})},Ve)),i.Y(1,49152,null,0,dl,[],null,null)],null,null)},{},{},[]),Ne=u(238),Xe=u(110),Oe=i.X({encapsulation:0,styles:[\"ion-list[_ngcontent-%COMP%]    + ion-list[_ngcontent-%COMP%] {\\n    margin-top: 0;\\n  }\\n\\n  .small-text[_ngcontent-%COMP%] {\\n    font-size: 10px;\\n  }\"],data:{}}),Ee=i.V(\"ng-component\",bl,function(l){return i._22(0,[(l()(),i.Z(0,0,null,null,1,\"ng-component\",[],null,null,null,function(l){return i._22(0,[(l()(),i._20(-1,null,[\"\\n\"])),(l()(),i.Z(1,0,null,null,10,\"ion-header\",[],null,null,null,null,null)),i.Y(2,16384,null,0,jn.a,[Ql.a,i.j,i.z,[2,fn.a]],null,null),(l()(),i._20(-1,null,[\"\\n  \"])),(l()(),i.Z(4,0,null,null,6,\"ion-navbar\",[[\"class\",\"toolbar\"]],[[8,\"hidden\",0],[2,\"statusbar-padding\",null]],null,null,Fn.b,Fn.a)),i.Y(5,49152,null,0,Pn.a,[Yn.a,[2,fn.a],[2,Ln.a],Ql.a,i.j,i.z],null,null),(l()(),i._20(-1,3,[\"\\n    \"])),(l()(),i.Z(7,0,null,3,2,\"ion-title\",[],null,null,null,vn.b,vn.a)),i.Y(8,49152,null,0,yn.a,[Ql.a,i.j,i.z,[2,kn.a],[2,Pn.a]],null,null),(l()(),i._20(-1,0,[\"\\n      Ranges\\n    \"])),(l()(),i._20(-1,3,[\"\\n  \"])),(l()(),i._20(-1,null,[\"\\n\"])),(l()(),i._20(-1,null,[\"\\n\\n\"])),(l()(),i.Z(13,0,null,null,138,\"ion-content\",[[\"class\",\"outer-content\"]],[[2,\"statusbar-padding\",null],[2,\"has-refresher\",null]],null,null,Cn.b,Cn.a)),i.Y(14,4374528,null,0,wn.a,[Ql.a,on.a,_n.a,i.j,i.z,Yn.a,Zn.a,i.u,[2,fn.a],[2,Ln.a]],null,null),(l()(),i._20(-1,1,[\"\\n  \"])),(l()(),i.Z(16,0,null,1,98,\"ion-list\",[],null,null,null,null,null)),i.Y(17,16384,null,0,en.a,[Ql.a,i.j,i.z,on.a,tn.l,_n.a],null,null),(l()(),i._20(-1,null,[\"\\n    \"])),(l()(),i.Z(19,0,null,null,6,\"ion-list-header\",[[\"class\",\"item\"]],null,null,null,$l.b,$l.a)),i.Y(20,1097728,null,3,Kl.a,[Jl.a,Ql.a,i.j,i.z,[2,ln.a]],null,null),i._18(335544320,1,{contentLabel:0}),i._18(603979776,2,{_buttons:1}),i._18(603979776,3,{_icons:1}),i.Y(24,16384,null,0,Qu.a,[Ql.a,i.z,i.j,[8,null]],null,null),(l()(),i._20(-1,2,[\"\\n      Adjust Display\\n    \"])),(l()(),i._20(-1,null,[\"\\n    \"])),(l()(),i.Z(27,0,null,null,20,\"ion-item\",[[\"class\",\"item item-block\"]],null,null,null,$l.b,$l.a)),i.Y(28,1097728,null,3,Kl.a,[Jl.a,Ql.a,i.j,i.z,[2,ln.a]],null,null),i._18(335544320,4,{contentLabel:0}),i._18(603979776,5,{_buttons:1}),i._18(603979776,6,{_icons:1}),i.Y(32,16384,null,0,nn.a,[],null,null),(l()(),i._20(-1,2,[\"\\n      \"])),(l()(),i.Z(34,0,null,3,12,\"ion-range\",[],[[2,\"range-disabled\",null],[2,\"range-pressed\",null],[2,\"range-has-pin\",null],[2,\"ng-untouched\",null],[2,\"ng-touched\",null],[2,\"ng-pristine\",null],[2,\"ng-dirty\",null],[2,\"ng-valid\",null],[2,\"ng-invalid\",null],[2,\"ng-pending\",null]],[[null,\"ngModelChange\"]],function(l,n,u){var a=!0;return\"ngModelChange\"===n&&(a=!1!==(l.component.brightness=u)&&a),a},Ne.b,Ne.a)),i.Y(35,1228800,null,0,Xe.a,[Jl.a,Ua.a,[2,Kl.a],Ql.a,on.a,i.j,i.z,_n.a,i.g],null,null),i._17(1024,null,A.j,function(l){return[l]},[Xe.a]),i.Y(37,671744,null,0,A.n,[[8,null],[8,null],[8,null],[2,A.j]],{model:[0,\"model\"]},{update:\"ngModelChange\"}),i._17(2048,null,A.k,null,[A.n]),i.Y(39,16384,null,0,A.l,[A.k],null,null),(l()(),i._20(-1,null,[\"\\n        \"])),(l()(),i.Z(41,0,null,0,1,\"ion-icon\",[[\"name\",\"sunny\"],[\"range-left\",\"\"],[\"role\",\"img\"],[\"small\",\"\"]],[[2,\"hide\",null]],null,null,null,null)),i.Y(42,147456,null,0,mn.a,[Ql.a,i.j,i.z],{name:[0,\"name\"]},null),(l()(),i._20(-1,null,[\"\\n        \"])),(l()(),i.Z(44,0,null,1,1,\"ion-icon\",[[\"name\",\"sunny\"],[\"range-right\",\"\"],[\"role\",\"img\"]],[[2,\"hide\",null]],null,null,null,null)),i.Y(45,147456,null,0,mn.a,[Ql.a,i.j,i.z],{name:[0,\"name\"]},null),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i._20(-1,2,[\"\\n    \"])),(l()(),i._20(-1,null,[\"\\n    \"])),(l()(),i.Z(49,0,null,null,20,\"ion-item\",[[\"class\",\"item item-block\"]],null,null,null,$l.b,$l.a)),i.Y(50,1097728,null,3,Kl.a,[Jl.a,Ql.a,i.j,i.z,[2,ln.a]],null,null),i._18(335544320,7,{contentLabel:0}),i._18(603979776,8,{_buttons:1}),i._18(603979776,9,{_icons:1}),i.Y(54,16384,null,0,nn.a,[],null,null),(l()(),i._20(-1,2,[\"\\n      \"])),(l()(),i.Z(56,0,null,3,12,\"ion-range\",[[\"color\",\"secondary\"],[\"max\",\"200\"],[\"min\",\"-200\"],[\"pin\",\"true\"]],[[2,\"range-disabled\",null],[2,\"range-pressed\",null],[2,\"range-has-pin\",null],[2,\"ng-untouched\",null],[2,\"ng-touched\",null],[2,\"ng-pristine\",null],[2,\"ng-dirty\",null],[2,\"ng-valid\",null],[2,\"ng-invalid\",null],[2,\"ng-pending\",null]],[[null,\"ngModelChange\"]],function(l,n,u){var a=!0;return\"ngModelChange\"===n&&(a=!1!==(l.component.contrast=u)&&a),a},Ne.b,Ne.a)),i.Y(57,1228800,null,0,Xe.a,[Jl.a,Ua.a,[2,Kl.a],Ql.a,on.a,i.j,i.z,_n.a,i.g],{color:[0,\"color\"],min:[1,\"min\"],max:[2,\"max\"],pin:[3,\"pin\"]},null),i._17(1024,null,A.j,function(l){return[l]},[Xe.a]),i.Y(59,671744,null,0,A.n,[[8,null],[8,null],[8,null],[2,A.j]],{model:[0,\"model\"]},{update:\"ngModelChange\"}),i._17(2048,null,A.k,null,[A.n]),i.Y(61,16384,null,0,A.l,[A.k],null,null),(l()(),i._20(-1,null,[\"\\n        \"])),(l()(),i.Z(63,0,null,0,1,\"ion-icon\",[[\"name\",\"contrast\"],[\"range-left\",\"\"],[\"role\",\"img\"],[\"small\",\"\"]],[[2,\"hide\",null]],null,null,null,null)),i.Y(64,147456,null,0,mn.a,[Ql.a,i.j,i.z],{name:[0,\"name\"]},null),(l()(),i._20(-1,null,[\"\\n        \"])),(l()(),i.Z(66,0,null,1,1,\"ion-icon\",[[\"name\",\"contrast\"],[\"range-right\",\"\"],[\"role\",\"img\"]],[[2,\"hide\",null]],null,null,null,null)),i.Y(67,147456,null,0,mn.a,[Ql.a,i.j,i.z],{name:[0,\"name\"]},null),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i._20(-1,2,[\"\\n    \"])),(l()(),i._20(-1,null,[\"\\n    \"])),(l()(),i.Z(71,0,null,null,20,\"ion-item\",[[\"class\",\"item item-block\"]],null,null,null,$l.b,$l.a)),i.Y(72,1097728,null,3,Kl.a,[Jl.a,Ql.a,i.j,i.z,[2,ln.a]],null,null),i._18(335544320,10,{contentLabel:0}),i._18(603979776,11,{_buttons:1}),i._18(603979776,12,{_icons:1}),i.Y(76,16384,null,0,nn.a,[],null,null),(l()(),i._20(-1,2,[\"\\n      \"])),(l()(),i.Z(78,0,null,3,12,\"ion-range\",[[\"color\",\"dark\"],[\"dualKnobs\",\"true\"],[\"pin\",\"true\"]],[[2,\"range-disabled\",null],[2,\"range-pressed\",null],[2,\"range-has-pin\",null],[2,\"ng-untouched\",null],[2,\"ng-touched\",null],[2,\"ng-pristine\",null],[2,\"ng-dirty\",null],[2,\"ng-valid\",null],[2,\"ng-invalid\",null],[2,\"ng-pending\",null]],[[null,\"ngModelChange\"]],function(l,n,u){var a=!0;return\"ngModelChange\"===n&&(a=!1!==(l.component.structure=u)&&a),a},Ne.b,Ne.a)),i.Y(79,1228800,null,0,Xe.a,[Jl.a,Ua.a,[2,Kl.a],Ql.a,on.a,i.j,i.z,_n.a,i.g],{color:[0,\"color\"],pin:[1,\"pin\"],dualKnobs:[2,\"dualKnobs\"]},null),i._17(1024,null,A.j,function(l){return[l]},[Xe.a]),i.Y(81,671744,null,0,A.n,[[8,null],[8,null],[8,null],[2,A.j]],{model:[0,\"model\"]},{update:\"ngModelChange\"}),i._17(2048,null,A.k,null,[A.n]),i.Y(83,16384,null,0,A.l,[A.k],null,null),(l()(),i._20(-1,null,[\"\\n        \"])),(l()(),i.Z(85,0,null,0,1,\"ion-icon\",[[\"name\",\"brush\"],[\"range-left\",\"\"],[\"role\",\"img\"],[\"small\",\"\"]],[[2,\"hide\",null]],null,null,null,null)),i.Y(86,147456,null,0,mn.a,[Ql.a,i.j,i.z],{name:[0,\"name\"]},null),(l()(),i._20(-1,null,[\"\\n        \"])),(l()(),i.Z(88,0,null,1,1,\"ion-icon\",[[\"name\",\"brush\"],[\"range-right\",\"\"],[\"role\",\"img\"]],[[2,\"hide\",null]],null,null,null,null)),i.Y(89,147456,null,0,mn.a,[Ql.a,i.j,i.z],{name:[0,\"name\"]},null),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i._20(-1,2,[\"\\n    \"])),(l()(),i._20(-1,null,[\"\\n    \"])),(l()(),i.Z(93,0,null,null,20,\"ion-item\",[[\"class\",\"item item-block\"]],null,null,null,$l.b,$l.a)),i.Y(94,1097728,null,3,Kl.a,[Jl.a,Ql.a,i.j,i.z,[2,ln.a]],null,null),i._18(335544320,13,{contentLabel:0}),i._18(603979776,14,{_buttons:1}),i._18(603979776,15,{_icons:1}),i.Y(98,16384,null,0,nn.a,[],null,null),(l()(),i._20(-1,2,[\"\\n      \"])),(l()(),i.Z(100,0,null,3,12,\"ion-range\",[[\"color\",\"danger\"],[\"max\",\"2000\"],[\"min\",\"1000\"],[\"snaps\",\"true\"],[\"step\",\"100\"]],[[2,\"range-disabled\",null],[2,\"range-pressed\",null],[2,\"range-has-pin\",null],[2,\"ng-untouched\",null],[2,\"ng-touched\",null],[2,\"ng-pristine\",null],[2,\"ng-dirty\",null],[2,\"ng-valid\",null],[2,\"ng-invalid\",null],[2,\"ng-pending\",null]],[[null,\"ngModelChange\"]],function(l,n,u){var a=!0;return\"ngModelChange\"===n&&(a=!1!==(l.component.warmth=u)&&a),a},Ne.b,Ne.a)),i.Y(101,1228800,null,0,Xe.a,[Jl.a,Ua.a,[2,Kl.a],Ql.a,on.a,i.j,i.z,_n.a,i.g],{color:[0,\"color\"],min:[1,\"min\"],max:[2,\"max\"],step:[3,\"step\"],snaps:[4,\"snaps\"]},null),i._17(1024,null,A.j,function(l){return[l]},[Xe.a]),i.Y(103,671744,null,0,A.n,[[8,null],[8,null],[8,null],[2,A.j]],{model:[0,\"model\"]},{update:\"ngModelChange\"}),i._17(2048,null,A.k,null,[A.n]),i.Y(105,16384,null,0,A.l,[A.k],null,null),(l()(),i._20(-1,null,[\"\\n        \"])),(l()(),i.Z(107,0,null,0,1,\"ion-icon\",[[\"color\",\"danger\"],[\"name\",\"thermometer\"],[\"range-left\",\"\"],[\"role\",\"img\"],[\"small\",\"\"]],[[2,\"hide\",null]],null,null,null,null)),i.Y(108,147456,null,0,mn.a,[Ql.a,i.j,i.z],{color:[0,\"color\"],name:[1,\"name\"]},null),(l()(),i._20(-1,null,[\"\\n        \"])),(l()(),i.Z(110,0,null,1,1,\"ion-icon\",[[\"color\",\"danger\"],[\"name\",\"thermometer\"],[\"range-right\",\"\"],[\"role\",\"img\"]],[[2,\"hide\",null]],null,null,null,null)),i.Y(111,147456,null,0,mn.a,[Ql.a,i.j,i.z],{color:[0,\"color\"],name:[1,\"name\"]},null),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i._20(-1,2,[\"\\n    \"])),(l()(),i._20(-1,null,[\"\\n  \"])),(l()(),i._20(-1,1,[\"\\n\\n  \"])),(l()(),i.Z(116,0,null,1,34,\"ion-list\",[],null,null,null,null,null)),i.Y(117,16384,null,0,en.a,[Ql.a,i.j,i.z,on.a,tn.l,_n.a],null,null),(l()(),i._20(-1,null,[\"\\n    \"])),(l()(),i.Z(119,0,null,null,6,\"ion-list-header\",[[\"class\",\"item\"]],null,null,null,$l.b,$l.a)),i.Y(120,1097728,null,3,Kl.a,[Jl.a,Ql.a,i.j,i.z,[2,ln.a]],null,null),i._18(335544320,16,{contentLabel:0}),i._18(603979776,17,{_buttons:1}),i._18(603979776,18,{_icons:1}),i.Y(124,16384,null,0,Qu.a,[Ql.a,i.z,i.j,[8,null]],null,null),(l()(),i._20(-1,2,[\"\\n      Adjust Text\\n    \"])),(l()(),i._20(-1,null,[\"\\n    \"])),(l()(),i.Z(127,0,null,null,22,\"ion-item\",[[\"class\",\"item item-block\"]],null,null,null,$l.b,$l.a)),i.Y(128,1097728,null,3,Kl.a,[Jl.a,Ql.a,i.j,i.z,[2,ln.a]],null,null),i._18(335544320,19,{contentLabel:0}),i._18(603979776,20,{_buttons:1}),i._18(603979776,21,{_icons:1}),i.Y(132,16384,null,0,nn.a,[],null,null),(l()(),i._20(-1,2,[\"\\n      \"])),(l()(),i.Z(134,0,null,3,14,\"ion-range\",[[\"min\",\"-100\"],[\"snaps\",\"true\"],[\"step\",\"10\"]],[[2,\"range-disabled\",null],[2,\"range-pressed\",null],[2,\"range-has-pin\",null],[2,\"ng-untouched\",null],[2,\"ng-touched\",null],[2,\"ng-pristine\",null],[2,\"ng-dirty\",null],[2,\"ng-valid\",null],[2,\"ng-invalid\",null],[2,\"ng-pending\",null]],[[null,\"ngModelChange\"]],function(l,n,u){var a=!0;return\"ngModelChange\"===n&&(a=!1!==(l.component.text=u)&&a),a},Ne.b,Ne.a)),i.Y(135,1228800,null,0,Xe.a,[Jl.a,Ua.a,[2,Kl.a],Ql.a,on.a,i.j,i.z,_n.a,i.g],{min:[0,\"min\"],step:[1,\"step\"],snaps:[2,\"snaps\"]},null),i._17(1024,null,A.j,function(l){return[l]},[Xe.a]),i.Y(137,671744,null,0,A.n,[[8,null],[8,null],[8,null],[2,A.j]],{model:[0,\"model\"]},{update:\"ngModelChange\"}),i._17(2048,null,A.k,null,[A.n]),i.Y(139,16384,null,0,A.l,[A.k],null,null),(l()(),i._20(-1,null,[\"\\n        \"])),(l()(),i.Z(141,0,null,0,2,\"ion-label\",[[\"class\",\"small-text\"],[\"range-left\",\"\"]],null,null,null,null,null)),i.Y(142,16384,[[19,4]],0,la.a,[Ql.a,i.j,i.z,[8,null],[8,null],[8,null],[8,null]],null,null),(l()(),i._20(-1,null,[\"A\"])),(l()(),i._20(-1,null,[\"\\n        \"])),(l()(),i.Z(145,0,null,1,2,\"ion-label\",[[\"range-right\",\"\"]],null,null,null,null,null)),i.Y(146,16384,[[19,4]],0,la.a,[Ql.a,i.j,i.z,[8,null],[8,null],[8,null],[8,null]],null,null),(l()(),i._20(-1,null,[\"A\"])),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i._20(-1,2,[\"\\n    \"])),(l()(),i._20(-1,null,[\"\\n  \"])),(l()(),i._20(-1,1,[\"\\n\"])),(l()(),i._20(-1,null,[\"\\n\\n\"])),(l()(),i._20(-1,null,[\"\\n\"]))],function(l,n){var u=n.component;l(n,37,0,u.brightness),l(n,42,0,\"sunny\"),l(n,45,0,\"sunny\"),l(n,57,0,\"secondary\",\"-200\",\"200\",\"true\"),l(n,59,0,u.contrast),l(n,64,0,\"contrast\"),l(n,67,0,\"contrast\"),l(n,79,0,\"dark\",\"true\",\"true\"),l(n,81,0,u.structure),l(n,86,0,\"brush\"),l(n,89,0,\"brush\"),l(n,101,0,\"danger\",\"1000\",\"2000\",\"100\",\"true\"),l(n,103,0,u.warmth),l(n,108,0,\"danger\",\"thermometer\"),l(n,111,0,\"danger\",\"thermometer\"),l(n,135,0,\"-100\",\"10\",\"true\"),l(n,137,0,u.text)},function(l,n){l(n,4,0,i._13(n,5)._hidden,i._13(n,5)._sbPadding),l(n,13,0,i._13(n,14).statusbarPadding,i._13(n,14)._hasRefresher),l(n,34,0,i._13(n,35)._disabled,i._13(n,35)._pressed,i._13(n,35)._pin,i._13(n,39).ngClassUntouched,i._13(n,39).ngClassTouched,i._13(n,39).ngClassPristine,i._13(n,39).ngClassDirty,i._13(n,39).ngClassValid,i._13(n,39).ngClassInvalid,i._13(n,39).ngClassPending),l(n,41,0,i._13(n,42)._hidden),l(n,44,0,i._13(n,45)._hidden),l(n,56,0,i._13(n,57)._disabled,i._13(n,57)._pressed,i._13(n,57)._pin,i._13(n,61).ngClassUntouched,i._13(n,61).ngClassTouched,i._13(n,61).ngClassPristine,i._13(n,61).ngClassDirty,i._13(n,61).ngClassValid,i._13(n,61).ngClassInvalid,i._13(n,61).ngClassPending),l(n,63,0,i._13(n,64)._hidden),l(n,66,0,i._13(n,67)._hidden),l(n,78,0,i._13(n,79)._disabled,i._13(n,79)._pressed,i._13(n,79)._pin,i._13(n,83).ngClassUntouched,i._13(n,83).ngClassTouched,i._13(n,83).ngClassPristine,i._13(n,83).ngClassDirty,i._13(n,83).ngClassValid,i._13(n,83).ngClassInvalid,i._13(n,83).ngClassPending),l(n,85,0,i._13(n,86)._hidden),l(n,88,0,i._13(n,89)._hidden),l(n,100,0,i._13(n,101)._disabled,i._13(n,101)._pressed,i._13(n,101)._pin,i._13(n,105).ngClassUntouched,i._13(n,105).ngClassTouched,i._13(n,105).ngClassPristine,i._13(n,105).ngClassDirty,i._13(n,105).ngClassValid,i._13(n,105).ngClassInvalid,i._13(n,105).ngClassPending),l(n,107,0,i._13(n,108)._hidden),l(n,110,0,i._13(n,111)._hidden),l(n,134,0,i._13(n,135)._disabled,i._13(n,135)._pressed,i._13(n,135)._pin,i._13(n,139).ngClassUntouched,i._13(n,139).ngClassTouched,i._13(n,139).ngClassPristine,i._13(n,139).ngClassDirty,i._13(n,139).ngClassValid,i._13(n,139).ngClassInvalid,i._13(n,139).ngClassPending)})},Oe)),i.Y(1,49152,null,0,bl,[],null,null)],null,null)},{},{},[]),Ue=u(191),We=u(80),qe=i.X({encapsulation:2,styles:[],data:{}}),He=i.V(\"ng-component\",ml,function(l){return i._22(0,[(l()(),i.Z(0,0,null,null,1,\"ng-component\",[],null,null,null,function(l){return i._22(0,[(l()(),i._20(-1,null,[\"\\n\"])),(l()(),i.Z(1,0,null,null,10,\"ion-header\",[],null,null,null,null,null)),i.Y(2,16384,null,0,jn.a,[Ql.a,i.j,i.z,[2,fn.a]],null,null),(l()(),i._20(-1,null,[\"\\n  \"])),(l()(),i.Z(4,0,null,null,6,\"ion-navbar\",[[\"class\",\"toolbar\"]],[[8,\"hidden\",0],[2,\"statusbar-padding\",null]],null,null,Fn.b,Fn.a)),i.Y(5,49152,null,0,Pn.a,[Yn.a,[2,fn.a],[2,Ln.a],Ql.a,i.j,i.z],null,null),(l()(),i._20(-1,3,[\"\\n    \"])),(l()(),i.Z(7,0,null,3,2,\"ion-title\",[],null,null,null,vn.b,vn.a)),i.Y(8,49152,null,0,yn.a,[Ql.a,i.j,i.z,[2,kn.a],[2,Pn.a]],null,null),(l()(),i._20(-1,0,[\"\\n      Searchbars\\n    \"])),(l()(),i._20(-1,3,[\"\\n  \"])),(l()(),i._20(-1,null,[\"\\n\"])),(l()(),i._20(-1,null,[\"\\n\\n\"])),(l()(),i.Z(13,0,null,null,12,\"ion-content\",[],[[2,\"statusbar-padding\",null],[2,\"has-refresher\",null]],null,null,Cn.b,Cn.a)),i.Y(14,4374528,null,0,wn.a,[Ql.a,on.a,_n.a,i.j,i.z,Yn.a,Zn.a,i.u,[2,fn.a],[2,Ln.a]],null,null),(l()(),i._20(-1,1,[\"\\n  \"])),(l()(),i.Z(16,0,null,1,1,\"ion-searchbar\",[],[[2,\"searchbar-animated\",null],[2,\"searchbar-has-value\",null],[2,\"searchbar-active\",null],[2,\"searchbar-show-cancel\",null],[2,\"searchbar-left-aligned\",null],[2,\"searchbar-has-focus\",null]],[[null,\"ionInput\"]],function(l,n,u){var a=!0;return\"ionInput\"===n&&(a=!1!==l.component.getItems(u)&&a),a},Ue.b,Ue.a)),i.Y(17,1294336,null,0,We.a,[Ql.a,on.a,i.j,i.z,[2,A.k]],null,{ionInput:\"ionInput\"}),(l()(),i._20(-1,1,[\"\\n  \"])),(l()(),i.Z(19,0,null,1,5,\"ion-list\",[],null,null,null,null,null)),i.Y(20,16384,null,0,en.a,[Ql.a,i.j,i.z,on.a,tn.l,_n.a],null,null),(l()(),i._20(-1,null,[\"\\n    \"])),(l()(),i.U(16777216,null,null,1,null,function(l){return i._22(0,[(l()(),i.Z(0,0,null,null,6,\"ion-item\",[[\"class\",\"item item-block\"]],null,null,null,$l.b,$l.a)),i.Y(1,1097728,null,3,Kl.a,[Jl.a,Ql.a,i.j,i.z,[2,ln.a]],null,null),i._18(335544320,1,{contentLabel:0}),i._18(603979776,2,{_buttons:1}),i._18(603979776,3,{_icons:1}),i.Y(5,16384,null,0,nn.a,[],null,null),(l()(),i._20(6,2,[\"\\n      \",\"\\n    \"]))],null,function(l,n){l(n,6,0,n.context.$implicit)})})),i.Y(23,802816,null,0,sn.h,[i.I,i.F,i.p],{ngForOf:[0,\"ngForOf\"]},null),(l()(),i._20(-1,null,[\"\\n  \"])),(l()(),i._20(-1,1,[\"\\n\"])),(l()(),i._20(-1,null,[\"\\n\"]))],function(l,n){var u=n.component;l(n,17,0),l(n,23,0,u.items)},function(l,n){l(n,4,0,i._13(n,5)._hidden,i._13(n,5)._sbPadding),l(n,13,0,i._13(n,14).statusbarPadding,i._13(n,14)._hasRefresher),l(n,16,0,i._13(n,17)._animated,i._13(n,17)._value,i._13(n,17)._isActive,i._13(n,17)._showCancelButton,i._13(n,17)._shouldAlignLeft,i._13(n,17)._isFocus)})},qe)),i.Y(1,49152,null,0,ml,[],null,null)],null,null)},{},{},[]),Ge=u(112),$e=u(192),Ke=u(72),Je=i.X({encapsulation:2,styles:[],data:{}}),Qe=i.V(\"ng-component\",gl,function(l){return i._22(0,[(l()(),i.Z(0,0,null,null,1,\"ng-component\",[],null,null,null,function(l){return i._22(0,[(l()(),i._20(-1,null,[\"\\n\"])),(l()(),i.Z(1,0,null,null,34,\"ion-header\",[],null,null,null,null,null)),i.Y(2,16384,null,0,jn.a,[Ql.a,i.j,i.z,[2,fn.a]],null,null),(l()(),i._20(-1,null,[\"\\n  \"])),(l()(),i.Z(4,0,null,null,6,\"ion-navbar\",[[\"class\",\"toolbar\"],[\"no-border-bottom\",\"\"]],[[8,\"hidden\",0],[2,\"statusbar-padding\",null]],null,null,Fn.b,Fn.a)),i.Y(5,49152,null,0,Pn.a,[Yn.a,[2,fn.a],[2,Ln.a],Ql.a,i.j,i.z],null,null),(l()(),i._20(-1,3,[\"\\n    \"])),(l()(),i.Z(7,0,null,3,2,\"ion-title\",[],null,null,null,vn.b,vn.a)),i.Y(8,49152,null,0,yn.a,[Ql.a,i.j,i.z,[2,kn.a],[2,Pn.a]],null,null),(l()(),i._20(-1,0,[\"\\n      Segments\\n    \"])),(l()(),i._20(-1,3,[\"\\n  \"])),(l()(),i._20(-1,null,[\"\\n\\n  \"])),(l()(),i.Z(12,0,null,null,22,\"ion-toolbar\",[[\"class\",\"toolbar\"],[\"no-border-top\",\"\"]],[[2,\"statusbar-padding\",null]],null,null,zn.b,zn.a)),i.Y(13,49152,null,0,kn.a,[Ql.a,i.j,i.z],null,null),(l()(),i._20(-1,3,[\"\\n    \"])),(l()(),i.Z(15,0,null,3,18,\"ion-segment\",[],[[2,\"ng-untouched\",null],[2,\"ng-touched\",null],[2,\"ng-pristine\",null],[2,\"ng-dirty\",null],[2,\"ng-valid\",null],[2,\"ng-invalid\",null],[2,\"ng-pending\",null],[2,\"segment-disabled\",null]],[[null,\"ngModelChange\"]],function(l,n,u){var a=!0;return\"ngModelChange\"===n&&(a=!1!==(l.component.pet=u)&&a),a},null,null)),i.Y(16,671744,null,0,A.n,[[8,null],[8,null],[8,null],[8,null]],{model:[0,\"model\"]},{update:\"ngModelChange\"}),i._17(2048,null,A.k,null,[A.n]),i.Y(18,16384,null,0,A.l,[A.k],null,null),i.Y(19,1196032,null,1,Ge.a,[Ql.a,i.j,i.z,[2,A.k]],null,null),i._18(603979776,1,{_buttons:1}),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i.Z(22,0,null,null,2,\"ion-segment-button\",[[\"class\",\"segment-button\"],[\"role\",\"button\"],[\"tappable\",\"\"],[\"value\",\"puppies\"]],[[2,\"segment-button-disabled\",null],[2,\"segment-activated\",null],[1,\"aria-pressed\",0]],[[null,\"click\"]],function(l,n,u){var a=!0;return\"click\"===n&&(a=!1!==i._13(l,23).onClick()&&a),a},$e.b,$e.a)),i.Y(23,114688,[[1,4]],0,Ke.a,[],{value:[0,\"value\"]},null),(l()(),i._20(-1,0,[\"\\n        Puppies\\n      \"])),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i.Z(26,0,null,null,2,\"ion-segment-button\",[[\"class\",\"segment-button\"],[\"role\",\"button\"],[\"tappable\",\"\"],[\"value\",\"kittens\"]],[[2,\"segment-button-disabled\",null],[2,\"segment-activated\",null],[1,\"aria-pressed\",0]],[[null,\"click\"]],function(l,n,u){var a=!0;return\"click\"===n&&(a=!1!==i._13(l,27).onClick()&&a),a},$e.b,$e.a)),i.Y(27,114688,[[1,4]],0,Ke.a,[],{value:[0,\"value\"]},null),(l()(),i._20(-1,0,[\"\\n        Kittens\\n      \"])),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i.Z(30,0,null,null,2,\"ion-segment-button\",[[\"class\",\"segment-button\"],[\"role\",\"button\"],[\"tappable\",\"\"],[\"value\",\"ducklings\"]],[[2,\"segment-button-disabled\",null],[2,\"segment-activated\",null],[1,\"aria-pressed\",0]],[[null,\"click\"]],function(l,n,u){var a=!0;return\"click\"===n&&(a=!1!==i._13(l,31).onClick()&&a),a},$e.b,$e.a)),i.Y(31,114688,[[1,4]],0,Ke.a,[],{value:[0,\"value\"]},null),(l()(),i._20(-1,0,[\"\\n        Ducklings\\n      \"])),(l()(),i._20(-1,null,[\"\\n    \"])),(l()(),i._20(-1,3,[\"\\n  \"])),(l()(),i._20(-1,null,[\"\\n\"])),(l()(),i._20(-1,null,[\"\\n\\n\"])),(l()(),i.Z(37,0,null,null,15,\"ion-content\",[],[[2,\"statusbar-padding\",null],[2,\"has-refresher\",null]],null,null,Cn.b,Cn.a)),i.Y(38,4374528,null,0,wn.a,[Ql.a,on.a,_n.a,i.j,i.z,Yn.a,Zn.a,i.u,[2,fn.a],[2,Ln.a]],null,null),(l()(),i._20(-1,1,[\"\\n  \"])),(l()(),i.Z(40,0,null,1,11,\"div\",[],null,null,null,null,null)),i.Y(41,16384,null,0,sn.m,[],{ngSwitch:[0,\"ngSwitch\"]},null),(l()(),i._20(-1,null,[\"\\n    \"])),(l()(),i.U(16777216,null,null,1,null,function(l){return i._22(0,[(l()(),i.Z(0,0,null,null,70,\"ion-list\",[],null,null,null,null,null)),i.Y(1,16384,null,0,en.a,[Ql.a,i.j,i.z,on.a,tn.l,_n.a],null,null),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i.Z(3,0,null,null,15,\"ion-item\",[[\"class\",\"item item-block\"]],null,null,null,$l.b,$l.a)),i.Y(4,1097728,null,3,Kl.a,[Jl.a,Ql.a,i.j,i.z,[2,ln.a]],null,null),i._18(335544320,2,{contentLabel:0}),i._18(603979776,3,{_buttons:1}),i._18(603979776,4,{_icons:1}),i.Y(8,16384,null,0,nn.a,[],null,null),(l()(),i._20(-1,2,[\"\\n        \"])),(l()(),i.Z(10,0,null,0,4,\"ion-thumbnail\",[[\"item-start\",\"\"]],null,null,null,null,null)),i.Y(11,16384,null,0,oe.a,[],null,null),(l()(),i._20(-1,null,[\"\\n          \"])),(l()(),i.Z(13,0,null,null,0,\"img\",[[\"src\",\"assets/img/thumbnail-puppy-1.jpg\"]],null,null,null,null,null)),(l()(),i._20(-1,null,[\"\\n        \"])),(l()(),i._20(-1,2,[\"\\n        \"])),(l()(),i.Z(16,0,null,2,1,\"h2\",[],null,null,null,null,null)),(l()(),i._20(-1,null,[\"Ruby\"])),(l()(),i._20(-1,2,[\"\\n      \"])),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i.Z(20,0,null,null,15,\"ion-item\",[[\"class\",\"item item-block\"]],null,null,null,$l.b,$l.a)),i.Y(21,1097728,null,3,Kl.a,[Jl.a,Ql.a,i.j,i.z,[2,ln.a]],null,null),i._18(335544320,5,{contentLabel:0}),i._18(603979776,6,{_buttons:1}),i._18(603979776,7,{_icons:1}),i.Y(25,16384,null,0,nn.a,[],null,null),(l()(),i._20(-1,2,[\"\\n        \"])),(l()(),i.Z(27,0,null,0,4,\"ion-thumbnail\",[[\"item-start\",\"\"]],null,null,null,null,null)),i.Y(28,16384,null,0,oe.a,[],null,null),(l()(),i._20(-1,null,[\"\\n          \"])),(l()(),i.Z(30,0,null,null,0,\"img\",[[\"src\",\"assets/img/thumbnail-puppy-2.jpg\"]],null,null,null,null,null)),(l()(),i._20(-1,null,[\"\\n        \"])),(l()(),i._20(-1,2,[\"\\n        \"])),(l()(),i.Z(33,0,null,2,1,\"h2\",[],null,null,null,null,null)),(l()(),i._20(-1,null,[\"Oscar\"])),(l()(),i._20(-1,2,[\"\\n      \"])),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i.Z(37,0,null,null,15,\"ion-item\",[[\"class\",\"item item-block\"]],null,null,null,$l.b,$l.a)),i.Y(38,1097728,null,3,Kl.a,[Jl.a,Ql.a,i.j,i.z,[2,ln.a]],null,null),i._18(335544320,8,{contentLabel:0}),i._18(603979776,9,{_buttons:1}),i._18(603979776,10,{_icons:1}),i.Y(42,16384,null,0,nn.a,[],null,null),(l()(),i._20(-1,2,[\"\\n        \"])),(l()(),i.Z(44,0,null,0,4,\"ion-thumbnail\",[[\"item-start\",\"\"]],null,null,null,null,null)),i.Y(45,16384,null,0,oe.a,[],null,null),(l()(),i._20(-1,null,[\"\\n          \"])),(l()(),i.Z(47,0,null,null,0,\"img\",[[\"src\",\"assets/img/thumbnail-puppy-4.jpg\"]],null,null,null,null,null)),(l()(),i._20(-1,null,[\"\\n        \"])),(l()(),i._20(-1,2,[\"\\n        \"])),(l()(),i.Z(50,0,null,2,1,\"h2\",[],null,null,null,null,null)),(l()(),i._20(-1,null,[\"Zoey\"])),(l()(),i._20(-1,2,[\"\\n      \"])),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i.Z(54,0,null,null,15,\"ion-item\",[[\"class\",\"item item-block\"]],null,null,null,$l.b,$l.a)),i.Y(55,1097728,null,3,Kl.a,[Jl.a,Ql.a,i.j,i.z,[2,ln.a]],null,null),i._18(335544320,11,{contentLabel:0}),i._18(603979776,12,{_buttons:1}),i._18(603979776,13,{_icons:1}),i.Y(59,16384,null,0,nn.a,[],null,null),(l()(),i._20(-1,2,[\"\\n        \"])),(l()(),i.Z(61,0,null,0,4,\"ion-thumbnail\",[[\"item-start\",\"\"]],null,null,null,null,null)),i.Y(62,16384,null,0,oe.a,[],null,null),(l()(),i._20(-1,null,[\"\\n          \"])),(l()(),i.Z(64,0,null,null,0,\"img\",[[\"src\",\"assets/img/thumbnail-puppy-3.jpg\"]],null,null,null,null,null)),(l()(),i._20(-1,null,[\"\\n        \"])),(l()(),i._20(-1,2,[\"\\n        \"])),(l()(),i.Z(67,0,null,2,1,\"h2\",[],null,null,null,null,null)),(l()(),i._20(-1,null,[\"Otto\"])),(l()(),i._20(-1,2,[\"\\n      \"])),(l()(),i._20(-1,null,[\"\\n    \"]))],null,null)})),i.Y(44,278528,null,0,sn.n,[i.I,i.F,sn.m],{ngSwitchCase:[0,\"ngSwitchCase\"]},null),(l()(),i._20(-1,null,[\"\\n\\n    \"])),(l()(),i.U(16777216,null,null,1,null,function(l){return i._22(0,[(l()(),i.Z(0,0,null,null,70,\"ion-list\",[],null,null,null,null,null)),i.Y(1,16384,null,0,en.a,[Ql.a,i.j,i.z,on.a,tn.l,_n.a],null,null),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i.Z(3,0,null,null,15,\"ion-item\",[[\"class\",\"item item-block\"]],null,null,null,$l.b,$l.a)),i.Y(4,1097728,null,3,Kl.a,[Jl.a,Ql.a,i.j,i.z,[2,ln.a]],null,null),i._18(335544320,14,{contentLabel:0}),i._18(603979776,15,{_buttons:1}),i._18(603979776,16,{_icons:1}),i.Y(8,16384,null,0,nn.a,[],null,null),(l()(),i._20(-1,2,[\"\\n        \"])),(l()(),i.Z(10,0,null,0,4,\"ion-thumbnail\",[[\"item-start\",\"\"]],null,null,null,null,null)),i.Y(11,16384,null,0,oe.a,[],null,null),(l()(),i._20(-1,null,[\"\\n          \"])),(l()(),i.Z(13,0,null,null,0,\"img\",[[\"src\",\"assets/img/thumbnail-kitten-1.jpg\"]],null,null,null,null,null)),(l()(),i._20(-1,null,[\"\\n        \"])),(l()(),i._20(-1,2,[\"\\n        \"])),(l()(),i.Z(16,0,null,2,1,\"h2\",[],null,null,null,null,null)),(l()(),i._20(-1,null,[\"Luna\"])),(l()(),i._20(-1,2,[\"\\n      \"])),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i.Z(20,0,null,null,15,\"ion-item\",[[\"class\",\"item item-block\"]],null,null,null,$l.b,$l.a)),i.Y(21,1097728,null,3,Kl.a,[Jl.a,Ql.a,i.j,i.z,[2,ln.a]],null,null),i._18(335544320,17,{contentLabel:0}),i._18(603979776,18,{_buttons:1}),i._18(603979776,19,{_icons:1}),i.Y(25,16384,null,0,nn.a,[],null,null),(l()(),i._20(-1,2,[\"\\n        \"])),(l()(),i.Z(27,0,null,0,4,\"ion-thumbnail\",[[\"item-start\",\"\"]],null,null,null,null,null)),i.Y(28,16384,null,0,oe.a,[],null,null),(l()(),i._20(-1,null,[\"\\n          \"])),(l()(),i.Z(30,0,null,null,0,\"img\",[[\"src\",\"assets/img/thumbnail-kitten-3.jpg\"]],null,null,null,null,null)),(l()(),i._20(-1,null,[\"\\n        \"])),(l()(),i._20(-1,2,[\"\\n        \"])),(l()(),i.Z(33,0,null,2,1,\"h2\",[],null,null,null,null,null)),(l()(),i._20(-1,null,[\"Milo\"])),(l()(),i._20(-1,2,[\"\\n      \"])),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i.Z(37,0,null,null,15,\"ion-item\",[[\"class\",\"item item-block\"]],null,null,null,$l.b,$l.a)),i.Y(38,1097728,null,3,Kl.a,[Jl.a,Ql.a,i.j,i.z,[2,ln.a]],null,null),i._18(335544320,20,{contentLabel:0}),i._18(603979776,21,{_buttons:1}),i._18(603979776,22,{_icons:1}),i.Y(42,16384,null,0,nn.a,[],null,null),(l()(),i._20(-1,2,[\"\\n        \"])),(l()(),i.Z(44,0,null,0,4,\"ion-thumbnail\",[[\"item-start\",\"\"]],null,null,null,null,null)),i.Y(45,16384,null,0,oe.a,[],null,null),(l()(),i._20(-1,null,[\"\\n          \"])),(l()(),i.Z(47,0,null,null,0,\"img\",[[\"src\",\"assets/img/thumbnail-kitten-4.jpg\"]],null,null,null,null,null)),(l()(),i._20(-1,null,[\"\\n        \"])),(l()(),i._20(-1,2,[\"\\n        \"])),(l()(),i.Z(50,0,null,2,1,\"h2\",[],null,null,null,null,null)),(l()(),i._20(-1,null,[\"Bandit\"])),(l()(),i._20(-1,2,[\"\\n      \"])),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i.Z(54,0,null,null,15,\"ion-item\",[[\"class\",\"item item-block\"]],null,null,null,$l.b,$l.a)),i.Y(55,1097728,null,3,Kl.a,[Jl.a,Ql.a,i.j,i.z,[2,ln.a]],null,null),i._18(335544320,23,{contentLabel:0}),i._18(603979776,24,{_buttons:1}),i._18(603979776,25,{_icons:1}),i.Y(59,16384,null,0,nn.a,[],null,null),(l()(),i._20(-1,2,[\"\\n        \"])),(l()(),i.Z(61,0,null,0,4,\"ion-thumbnail\",[[\"item-start\",\"\"]],null,null,null,null,null)),i.Y(62,16384,null,0,oe.a,[],null,null),(l()(),i._20(-1,null,[\"\\n          \"])),(l()(),i.Z(64,0,null,null,0,\"img\",[[\"src\",\"assets/img/thumbnail-kitten-2.jpg\"]],null,null,null,null,null)),(l()(),i._20(-1,null,[\"\\n        \"])),(l()(),i._20(-1,2,[\"\\n        \"])),(l()(),i.Z(67,0,null,2,1,\"h2\",[],null,null,null,null,null)),(l()(),i._20(-1,null,[\"Nala\"])),(l()(),i._20(-1,2,[\"\\n      \"])),(l()(),i._20(-1,null,[\"\\n    \"]))],null,null)})),i.Y(47,278528,null,0,sn.n,[i.I,i.F,sn.m],{ngSwitchCase:[0,\"ngSwitchCase\"]},null),(l()(),i._20(-1,null,[\"\\n\\n    \"])),(l()(),i.U(16777216,null,null,1,null,function(l){return i._22(0,[(l()(),i.Z(0,0,null,null,70,\"ion-list\",[],null,null,null,null,null)),i.Y(1,16384,null,0,en.a,[Ql.a,i.j,i.z,on.a,tn.l,_n.a],null,null),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i.Z(3,0,null,null,15,\"ion-item\",[[\"class\",\"item item-block\"]],null,null,null,$l.b,$l.a)),i.Y(4,1097728,null,3,Kl.a,[Jl.a,Ql.a,i.j,i.z,[2,ln.a]],null,null),i._18(335544320,26,{contentLabel:0}),i._18(603979776,27,{_buttons:1}),i._18(603979776,28,{_icons:1}),i.Y(8,16384,null,0,nn.a,[],null,null),(l()(),i._20(-1,2,[\"\\n        \"])),(l()(),i.Z(10,0,null,0,4,\"ion-thumbnail\",[[\"item-start\",\"\"]],null,null,null,null,null)),i.Y(11,16384,null,0,oe.a,[],null,null),(l()(),i._20(-1,null,[\"\\n          \"])),(l()(),i.Z(13,0,null,null,0,\"img\",[[\"src\",\"assets/img/thumbnail-duckling-1.jpg\"]],null,null,null,null,null)),(l()(),i._20(-1,null,[\"\\n        \"])),(l()(),i._20(-1,2,[\"\\n        \"])),(l()(),i.Z(16,0,null,2,1,\"h2\",[],null,null,null,null,null)),(l()(),i._20(-1,null,[\"Daffy\"])),(l()(),i._20(-1,2,[\"\\n      \"])),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i.Z(20,0,null,null,15,\"ion-item\",[[\"class\",\"item item-block\"]],null,null,null,$l.b,$l.a)),i.Y(21,1097728,null,3,Kl.a,[Jl.a,Ql.a,i.j,i.z,[2,ln.a]],null,null),i._18(335544320,29,{contentLabel:0}),i._18(603979776,30,{_buttons:1}),i._18(603979776,31,{_icons:1}),i.Y(25,16384,null,0,nn.a,[],null,null),(l()(),i._20(-1,2,[\"\\n        \"])),(l()(),i.Z(27,0,null,0,4,\"ion-thumbnail\",[[\"item-start\",\"\"]],null,null,null,null,null)),i.Y(28,16384,null,0,oe.a,[],null,null),(l()(),i._20(-1,null,[\"\\n          \"])),(l()(),i.Z(30,0,null,null,0,\"img\",[[\"src\",\"assets/img/thumbnail-duckling-2.jpg\"]],null,null,null,null,null)),(l()(),i._20(-1,null,[\"\\n        \"])),(l()(),i._20(-1,2,[\"\\n        \"])),(l()(),i.Z(33,0,null,2,1,\"h2\",[],null,null,null,null,null)),(l()(),i._20(-1,null,[\"Huey\"])),(l()(),i._20(-1,2,[\"\\n      \"])),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i.Z(37,0,null,null,15,\"ion-item\",[[\"class\",\"item item-block\"]],null,null,null,$l.b,$l.a)),i.Y(38,1097728,null,3,Kl.a,[Jl.a,Ql.a,i.j,i.z,[2,ln.a]],null,null),i._18(335544320,32,{contentLabel:0}),i._18(603979776,33,{_buttons:1}),i._18(603979776,34,{_icons:1}),i.Y(42,16384,null,0,nn.a,[],null,null),(l()(),i._20(-1,2,[\"\\n        \"])),(l()(),i.Z(44,0,null,0,4,\"ion-thumbnail\",[[\"item-start\",\"\"]],null,null,null,null,null)),i.Y(45,16384,null,0,oe.a,[],null,null),(l()(),i._20(-1,null,[\"\\n          \"])),(l()(),i.Z(47,0,null,null,0,\"img\",[[\"src\",\"assets/img/thumbnail-duckling-3.jpg\"]],null,null,null,null,null)),(l()(),i._20(-1,null,[\"\\n        \"])),(l()(),i._20(-1,2,[\"\\n        \"])),(l()(),i.Z(50,0,null,2,1,\"h2\",[],null,null,null,null,null)),(l()(),i._20(-1,null,[\"Dewey\"])),(l()(),i._20(-1,2,[\"\\n      \"])),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i.Z(54,0,null,null,15,\"ion-item\",[[\"class\",\"item item-block\"]],null,null,null,$l.b,$l.a)),i.Y(55,1097728,null,3,Kl.a,[Jl.a,Ql.a,i.j,i.z,[2,ln.a]],null,null),i._18(335544320,35,{contentLabel:0}),i._18(603979776,36,{_buttons:1}),i._18(603979776,37,{_icons:1}),i.Y(59,16384,null,0,nn.a,[],null,null),(l()(),i._20(-1,2,[\"\\n        \"])),(l()(),i.Z(61,0,null,0,4,\"ion-thumbnail\",[[\"item-start\",\"\"]],null,null,null,null,null)),i.Y(62,16384,null,0,oe.a,[],null,null),(l()(),i._20(-1,null,[\"\\n          \"])),(l()(),i.Z(64,0,null,null,0,\"img\",[[\"src\",\"assets/img/thumbnail-duckling-4.jpg\"]],null,null,null,null,null)),(l()(),i._20(-1,null,[\"\\n        \"])),(l()(),i._20(-1,2,[\"\\n        \"])),(l()(),i.Z(67,0,null,2,1,\"h2\",[],null,null,null,null,null)),(l()(),i._20(-1,null,[\"Louie\"])),(l()(),i._20(-1,2,[\"\\n      \"])),(l()(),i._20(-1,null,[\"\\n    \"]))],null,null)})),i.Y(50,278528,null,0,sn.n,[i.I,i.F,sn.m],{ngSwitchCase:[0,\"ngSwitchCase\"]},null),(l()(),i._20(-1,null,[\"\\n  \"])),(l()(),i._20(-1,1,[\"\\n\"])),(l()(),i._20(-1,null,[\"\\n\"]))],function(l,n){var u=n.component;l(n,16,0,u.pet),l(n,23,0,\"puppies\"),l(n,27,0,\"kittens\"),l(n,31,0,\"ducklings\"),l(n,41,0,u.pet),l(n,44,0,\"puppies\"),l(n,47,0,\"kittens\"),l(n,50,0,\"ducklings\")},function(l,n){l(n,4,0,i._13(n,5)._hidden,i._13(n,5)._sbPadding),l(n,12,0,i._13(n,13)._sbPadding),l(n,15,0,i._13(n,18).ngClassUntouched,i._13(n,18).ngClassTouched,i._13(n,18).ngClassPristine,i._13(n,18).ngClassDirty,i._13(n,18).ngClassValid,i._13(n,18).ngClassInvalid,i._13(n,18).ngClassPending,i._13(n,19)._disabled),l(n,22,0,i._13(n,23)._disabled,i._13(n,23).isActive,i._13(n,23).isActive),l(n,26,0,i._13(n,27)._disabled,i._13(n,27).isActive,i._13(n,27).isActive),l(n,30,0,i._13(n,31)._disabled,i._13(n,31).isActive,i._13(n,31).isActive),l(n,37,0,i._13(n,38).statusbarPadding,i._13(n,38)._hasRefresher)})},Je)),i.Y(1,49152,null,0,gl,[on.a],null,null)],null,null)},{},{},[]),lo=u(239),no=u(113),uo=u(107),ao=i.X({encapsulation:2,styles:[],data:{}}),eo=i.V(\"ng-component\",hl,function(l){return i._22(0,[(l()(),i.Z(0,0,null,null,1,\"ng-component\",[],null,null,null,function(l){return i._22(0,[(l()(),i._20(-1,null,[\"\\n\"])),(l()(),i.Z(1,0,null,null,10,\"ion-header\",[],null,null,null,null,null)),i.Y(2,16384,null,0,jn.a,[Ql.a,i.j,i.z,[2,fn.a]],null,null),(l()(),i._20(-1,null,[\"\\n  \"])),(l()(),i.Z(4,0,null,null,6,\"ion-navbar\",[[\"class\",\"toolbar\"]],[[8,\"hidden\",0],[2,\"statusbar-padding\",null]],null,null,Fn.b,Fn.a)),i.Y(5,49152,null,0,Pn.a,[Yn.a,[2,fn.a],[2,Ln.a],Ql.a,i.j,i.z],null,null),(l()(),i._20(-1,3,[\"\\n    \"])),(l()(),i.Z(7,0,null,3,2,\"ion-title\",[],null,null,null,vn.b,vn.a)),i.Y(8,49152,null,0,yn.a,[Ql.a,i.j,i.z,[2,kn.a],[2,Pn.a]],null,null),(l()(),i._20(-1,0,[\"\\n      Selects\\n    \"])),(l()(),i._20(-1,3,[\"\\n  \"])),(l()(),i._20(-1,null,[\"\\n\"])),(l()(),i._20(-1,null,[\"\\n\\n\"])),(l()(),i.Z(13,0,null,null,337,\"ion-content\",[],[[2,\"statusbar-padding\",null],[2,\"has-refresher\",null]],null,null,Cn.b,Cn.a)),i.Y(14,4374528,null,0,wn.a,[Ql.a,on.a,_n.a,i.j,i.z,Yn.a,Zn.a,i.u,[2,fn.a],[2,Ln.a]],null,null),(l()(),i._20(-1,1,[\"\\n  \"])),(l()(),i.Z(16,0,null,1,333,\"ion-list\",[],null,null,null,null,null)),i.Y(17,16384,null,0,en.a,[Ql.a,i.j,i.z,on.a,tn.l,_n.a],null,null),(l()(),i._20(-1,null,[\"\\n    \"])),(l()(),i.Z(19,0,null,null,27,\"ion-item\",[[\"class\",\"item item-block\"]],null,null,null,$l.b,$l.a)),i.Y(20,1097728,null,3,Kl.a,[Jl.a,Ql.a,i.j,i.z,[2,ln.a]],null,null),i._18(335544320,1,{contentLabel:0}),i._18(603979776,2,{_buttons:1}),i._18(603979776,3,{_icons:1}),i.Y(24,16384,null,0,nn.a,[],null,null),(l()(),i._20(-1,2,[\"\\n      \"])),(l()(),i.Z(26,0,null,1,2,\"ion-label\",[],null,null,null,null,null)),i.Y(27,16384,[[1,4]],0,la.a,[Ql.a,i.j,i.z,[8,null],[8,null],[8,null],[8,null]],null,null),(l()(),i._20(-1,null,[\"Gender\"])),(l()(),i._20(-1,2,[\"\\n      \"])),(l()(),i.Z(30,0,null,3,15,\"ion-select\",[],[[2,\"select-disabled\",null],[2,\"ng-untouched\",null],[2,\"ng-touched\",null],[2,\"ng-pristine\",null],[2,\"ng-dirty\",null],[2,\"ng-valid\",null],[2,\"ng-invalid\",null],[2,\"ng-pending\",null]],[[null,\"ngModelChange\"],[null,\"click\"],[null,\"keyup.space\"]],function(l,n,u){var a=!0,e=l.component;return\"click\"===n&&(a=!1!==i._13(l,31)._click(u)&&a),\"keyup.space\"===n&&(a=!1!==i._13(l,31)._keyup()&&a),\"ngModelChange\"===n&&(a=!1!==(e.gender=u)&&a),a},lo.b,lo.a)),i.Y(31,1228800,null,1,no.a,[Yn.a,Jl.a,Ql.a,i.j,i.z,[2,Kl.a],Sn.a],null,null),i._18(603979776,4,{options:1}),i._17(1024,null,A.j,function(l){return[l]},[no.a]),i.Y(34,671744,null,0,A.n,[[8,null],[8,null],[8,null],[2,A.j]],{model:[0,\"model\"]},{update:\"ngModelChange\"}),i._17(2048,null,A.k,null,[A.n]),i.Y(36,16384,null,0,A.l,[A.k],null,null),(l()(),i._20(-1,null,[\"\\n        \"])),(l()(),i.Z(38,0,null,null,2,\"ion-option\",[[\"value\",\"f\"]],null,null,null,null,null)),i.Y(39,16384,[[4,4]],0,uo.a,[i.j],{value:[0,\"value\"]},null),(l()(),i._20(-1,null,[\"Female\"])),(l()(),i._20(-1,null,[\"\\n        \"])),(l()(),i.Z(42,0,null,null,2,\"ion-option\",[[\"value\",\"m\"]],null,null,null,null,null)),i.Y(43,16384,[[4,4]],0,uo.a,[i.j],{value:[0,\"value\"]},null),(l()(),i._20(-1,null,[\"Male\"])),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i._20(-1,2,[\"\\n    \"])),(l()(),i._20(-1,null,[\"\\n\\n    \"])),(l()(),i.Z(48,0,null,null,43,\"ion-item\",[[\"class\",\"item item-block\"]],null,null,null,$l.b,$l.a)),i.Y(49,1097728,null,3,Kl.a,[Jl.a,Ql.a,i.j,i.z,[2,ln.a]],null,null),i._18(335544320,5,{contentLabel:0}),i._18(603979776,6,{_buttons:1}),i._18(603979776,7,{_icons:1}),i.Y(53,16384,null,0,nn.a,[],null,null),(l()(),i._20(-1,2,[\"\\n      \"])),(l()(),i.Z(55,0,null,1,2,\"ion-label\",[],null,null,null,null,null)),i.Y(56,16384,[[5,4]],0,la.a,[Ql.a,i.j,i.z,[8,null],[8,null],[8,null],[8,null]],null,null),(l()(),i._20(-1,null,[\"Gaming\"])),(l()(),i._20(-1,2,[\"\\n      \"])),(l()(),i.Z(59,0,null,3,31,\"ion-select\",[[\"interface\",\"popover\"]],[[2,\"select-disabled\",null],[2,\"ng-untouched\",null],[2,\"ng-touched\",null],[2,\"ng-pristine\",null],[2,\"ng-dirty\",null],[2,\"ng-valid\",null],[2,\"ng-invalid\",null],[2,\"ng-pending\",null]],[[null,\"ngModelChange\"],[null,\"click\"],[null,\"keyup.space\"]],function(l,n,u){var a=!0,e=l.component;return\"click\"===n&&(a=!1!==i._13(l,60)._click(u)&&a),\"keyup.space\"===n&&(a=!1!==i._13(l,60)._keyup()&&a),\"ngModelChange\"===n&&(a=!1!==(e.gaming=u)&&a),a},lo.b,lo.a)),i.Y(60,1228800,null,1,no.a,[Yn.a,Jl.a,Ql.a,i.j,i.z,[2,Kl.a],Sn.a],{interface:[0,\"interface\"]},null),i._18(603979776,8,{options:1}),i._17(1024,null,A.j,function(l){return[l]},[no.a]),i.Y(63,671744,null,0,A.n,[[8,null],[8,null],[8,null],[2,A.j]],{model:[0,\"model\"]},{update:\"ngModelChange\"}),i._17(2048,null,A.k,null,[A.n]),i.Y(65,16384,null,0,A.l,[A.k],null,null),(l()(),i._20(-1,null,[\"\\n        \"])),(l()(),i.Z(67,0,null,null,2,\"ion-option\",[[\"value\",\"nes\"]],null,null,null,null,null)),i.Y(68,16384,[[8,4]],0,uo.a,[i.j],{value:[0,\"value\"]},null),(l()(),i._20(-1,null,[\"NES\"])),(l()(),i._20(-1,null,[\"\\n        \"])),(l()(),i.Z(71,0,null,null,2,\"ion-option\",[[\"value\",\"n64\"]],null,null,null,null,null)),i.Y(72,16384,[[8,4]],0,uo.a,[i.j],{value:[0,\"value\"]},null),(l()(),i._20(-1,null,[\"Nintendo64\"])),(l()(),i._20(-1,null,[\"\\n        \"])),(l()(),i.Z(75,0,null,null,2,\"ion-option\",[[\"value\",\"ps\"]],null,null,null,null,null)),i.Y(76,16384,[[8,4]],0,uo.a,[i.j],{value:[0,\"value\"]},null),(l()(),i._20(-1,null,[\"PlayStation\"])),(l()(),i._20(-1,null,[\"\\n        \"])),(l()(),i.Z(79,0,null,null,2,\"ion-option\",[[\"value\",\"genesis\"]],null,null,null,null,null)),i.Y(80,16384,[[8,4]],0,uo.a,[i.j],{value:[0,\"value\"]},null),(l()(),i._20(-1,null,[\"Sega Genesis\"])),(l()(),i._20(-1,null,[\"\\n        \"])),(l()(),i.Z(83,0,null,null,2,\"ion-option\",[[\"value\",\"saturn\"]],null,null,null,null,null)),i.Y(84,16384,[[8,4]],0,uo.a,[i.j],{value:[0,\"value\"]},null),(l()(),i._20(-1,null,[\"Sega Saturn\"])),(l()(),i._20(-1,null,[\"\\n        \"])),(l()(),i.Z(87,0,null,null,2,\"ion-option\",[[\"value\",\"snes\"]],null,null,null,null,null)),i.Y(88,16384,[[8,4]],0,uo.a,[i.j],{value:[0,\"value\"]},null),(l()(),i._20(-1,null,[\"SNES\"])),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i._20(-1,2,[\"\\n    \"])),(l()(),i._20(-1,null,[\"\\n\\n    \"])),(l()(),i.Z(93,0,null,null,35,\"ion-item\",[[\"class\",\"item item-block\"]],null,null,null,$l.b,$l.a)),i.Y(94,1097728,null,3,Kl.a,[Jl.a,Ql.a,i.j,i.z,[2,ln.a]],null,null),i._18(335544320,9,{contentLabel:0}),i._18(603979776,10,{_buttons:1}),i._18(603979776,11,{_icons:1}),i.Y(98,16384,null,0,nn.a,[],null,null),(l()(),i._20(-1,2,[\"\\n      \"])),(l()(),i.Z(100,0,null,1,2,\"ion-label\",[],null,null,null,null,null)),i.Y(101,16384,[[9,4]],0,la.a,[Ql.a,i.j,i.z,[8,null],[8,null],[8,null],[8,null]],null,null),(l()(),i._20(-1,null,[\"Notifications\"])),(l()(),i._20(-1,2,[\"\\n      \"])),(l()(),i.Z(104,0,null,3,23,\"ion-select\",[[\"interface\",\"action-sheet\"]],[[2,\"select-disabled\",null],[2,\"ng-untouched\",null],[2,\"ng-touched\",null],[2,\"ng-pristine\",null],[2,\"ng-dirty\",null],[2,\"ng-valid\",null],[2,\"ng-invalid\",null],[2,\"ng-pending\",null]],[[null,\"ngModelChange\"],[null,\"click\"],[null,\"keyup.space\"]],function(l,n,u){var a=!0,e=l.component;return\"click\"===n&&(a=!1!==i._13(l,105)._click(u)&&a),\"keyup.space\"===n&&(a=!1!==i._13(l,105)._keyup()&&a),\"ngModelChange\"===n&&(a=!1!==(e.notifications=u)&&a),a},lo.b,lo.a)),i.Y(105,1228800,null,1,no.a,[Yn.a,Jl.a,Ql.a,i.j,i.z,[2,Kl.a],Sn.a],{interface:[0,\"interface\"]},null),i._18(603979776,12,{options:1}),i._17(1024,null,A.j,function(l){return[l]},[no.a]),i.Y(108,671744,null,0,A.n,[[8,null],[8,null],[8,null],[2,A.j]],{model:[0,\"model\"]},{update:\"ngModelChange\"}),i._17(2048,null,A.k,null,[A.n]),i.Y(110,16384,null,0,A.l,[A.k],null,null),(l()(),i._20(-1,null,[\"\\n        \"])),(l()(),i.Z(112,0,null,null,2,\"ion-option\",[[\"value\",\"enable\"]],null,null,null,null,null)),i.Y(113,16384,[[12,4]],0,uo.a,[i.j],{value:[0,\"value\"]},null),(l()(),i._20(-1,null,[\"Enable\"])),(l()(),i._20(-1,null,[\"\\n        \"])),(l()(),i.Z(116,0,null,null,2,\"ion-option\",[[\"value\",\"mute\"]],null,null,null,null,null)),i.Y(117,16384,[[12,4]],0,uo.a,[i.j],{value:[0,\"value\"]},null),(l()(),i._20(-1,null,[\"Mute\"])),(l()(),i._20(-1,null,[\"\\n        \"])),(l()(),i.Z(120,0,null,null,2,\"ion-option\",[[\"value\",\"mute_week\"]],null,null,null,null,null)),i.Y(121,16384,[[12,4]],0,uo.a,[i.j],{value:[0,\"value\"]},null),(l()(),i._20(-1,null,[\"Mute for a week\"])),(l()(),i._20(-1,null,[\"\\n        \"])),(l()(),i.Z(124,0,null,null,2,\"ion-option\",[[\"value\",\"mute_year\"]],null,[[null,\"ionSelect\"]],function(l,n,u){var a=!0;return\"ionSelect\"===n&&(a=!1!==l.component.notificationSelect(u)&&a),a},null,null)),i.Y(125,16384,[[12,4]],0,uo.a,[i.j],{value:[0,\"value\"]},{ionSelect:\"ionSelect\"}),(l()(),i._20(-1,null,[\"Mute for a year\"])),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i._20(-1,2,[\"\\n    \"])),(l()(),i._20(-1,null,[\"\\n\\n    \"])),(l()(),i.Z(130,0,null,null,47,\"ion-item\",[[\"class\",\"item item-block\"]],null,null,null,$l.b,$l.a)),i.Y(131,1097728,null,3,Kl.a,[Jl.a,Ql.a,i.j,i.z,[2,ln.a]],null,null),i._18(335544320,13,{contentLabel:0}),i._18(603979776,14,{_buttons:1}),i._18(603979776,15,{_icons:1}),i.Y(135,16384,null,0,nn.a,[],null,null),(l()(),i._20(-1,2,[\"\\n      \"])),(l()(),i.Z(137,0,null,1,2,\"ion-label\",[],null,null,null,null,null)),i.Y(138,16384,[[13,4]],0,la.a,[Ql.a,i.j,i.z,[8,null],[8,null],[8,null],[8,null]],null,null),(l()(),i._20(-1,null,[\"Operating System\"])),(l()(),i._20(-1,2,[\"\\n      \"])),(l()(),i.Z(141,0,null,3,35,\"ion-select\",[[\"cancelText\",\"Nah\"],[\"submitText\",\"Okay\"]],[[2,\"select-disabled\",null],[2,\"ng-untouched\",null],[2,\"ng-touched\",null],[2,\"ng-pristine\",null],[2,\"ng-dirty\",null],[2,\"ng-valid\",null],[2,\"ng-invalid\",null],[2,\"ng-pending\",null]],[[null,\"ngModelChange\"],[null,\"click\"],[null,\"keyup.space\"]],function(l,n,u){var a=!0,e=l.component;return\"click\"===n&&(a=!1!==i._13(l,142)._click(u)&&a),\"keyup.space\"===n&&(a=!1!==i._13(l,142)._keyup()&&a),\"ngModelChange\"===n&&(a=!1!==(e.os=u)&&a),a},lo.b,lo.a)),i.Y(142,1228800,null,1,no.a,[Yn.a,Jl.a,Ql.a,i.j,i.z,[2,Kl.a],Sn.a],{cancelText:[0,\"cancelText\"]},null),i._18(603979776,16,{options:1}),i._17(1024,null,A.j,function(l){return[l]},[no.a]),i.Y(145,671744,null,0,A.n,[[8,null],[8,null],[8,null],[2,A.j]],{model:[0,\"model\"]},{update:\"ngModelChange\"}),i._17(2048,null,A.k,null,[A.n]),i.Y(147,16384,null,0,A.l,[A.k],null,null),(l()(),i._20(-1,null,[\"\\n        \"])),(l()(),i.Z(149,0,null,null,2,\"ion-option\",[[\"value\",\"dos\"]],null,null,null,null,null)),i.Y(150,16384,[[16,4]],0,uo.a,[i.j],{value:[0,\"value\"]},null),(l()(),i._20(-1,null,[\"DOS\"])),(l()(),i._20(-1,null,[\"\\n        \"])),(l()(),i.Z(153,0,null,null,2,\"ion-option\",[[\"value\",\"lunix\"]],null,null,null,null,null)),i.Y(154,16384,[[16,4]],0,uo.a,[i.j],{value:[0,\"value\"]},null),(l()(),i._20(-1,null,[\"Linux\"])),(l()(),i._20(-1,null,[\"\\n        \"])),(l()(),i.Z(157,0,null,null,2,\"ion-option\",[[\"value\",\"mac7\"]],null,null,null,null,null)),i.Y(158,16384,[[16,4]],0,uo.a,[i.j],{value:[0,\"value\"]},null),(l()(),i._20(-1,null,[\"Mac OS 7\"])),(l()(),i._20(-1,null,[\"\\n        \"])),(l()(),i.Z(161,0,null,null,2,\"ion-option\",[[\"value\",\"mac8\"]],null,null,null,null,null)),i.Y(162,16384,[[16,4]],0,uo.a,[i.j],{value:[0,\"value\"]},null),(l()(),i._20(-1,null,[\"Mac OS 8\"])),(l()(),i._20(-1,null,[\"\\n        \"])),(l()(),i.Z(165,0,null,null,2,\"ion-option\",[[\"value\",\"win3.1\"]],null,null,null,null,null)),i.Y(166,16384,[[16,4]],0,uo.a,[i.j],{value:[0,\"value\"]},null),(l()(),i._20(-1,null,[\"Windows 3.1\"])),(l()(),i._20(-1,null,[\"\\n        \"])),(l()(),i.Z(169,0,null,null,2,\"ion-option\",[[\"value\",\"win95\"]],null,null,null,null,null)),i.Y(170,16384,[[16,4]],0,uo.a,[i.j],{value:[0,\"value\"]},null),(l()(),i._20(-1,null,[\"Windows 95\"])),(l()(),i._20(-1,null,[\"\\n        \"])),(l()(),i.Z(173,0,null,null,2,\"ion-option\",[[\"value\",\"win98\"]],null,null,null,null,null)),i.Y(174,16384,[[16,4]],0,uo.a,[i.j],{value:[0,\"value\"]},null),(l()(),i._20(-1,null,[\"Windows 98\"])),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i._20(-1,2,[\"\\n    \"])),(l()(),i._20(-1,null,[\"\\n\\n    \"])),(l()(),i.Z(179,0,null,null,47,\"ion-item\",[[\"class\",\"item item-block\"]],null,null,null,$l.b,$l.a)),i.Y(180,1097728,null,3,Kl.a,[Jl.a,Ql.a,i.j,i.z,[2,ln.a]],null,null),i._18(335544320,17,{contentLabel:0}),i._18(603979776,18,{_buttons:1}),i._18(603979776,19,{_icons:1}),i.Y(184,16384,null,0,nn.a,[],null,null),(l()(),i._20(-1,2,[\"\\n      \"])),(l()(),i.Z(186,0,null,1,2,\"ion-label\",[],null,null,null,null,null)),i.Y(187,16384,[[17,4]],0,la.a,[Ql.a,i.j,i.z,[8,null],[8,null],[8,null],[8,null]],null,null),(l()(),i._20(-1,null,[\"Music\"])),(l()(),i._20(-1,2,[\"\\n      \"])),(l()(),i.Z(190,0,null,3,35,\"ion-select\",[],[[2,\"select-disabled\",null],[2,\"ng-untouched\",null],[2,\"ng-touched\",null],[2,\"ng-pristine\",null],[2,\"ng-dirty\",null],[2,\"ng-valid\",null],[2,\"ng-invalid\",null],[2,\"ng-pending\",null]],[[null,\"ngModelChange\"],[null,\"click\"],[null,\"keyup.space\"]],function(l,n,u){var a=!0,e=l.component;return\"click\"===n&&(a=!1!==i._13(l,191)._click(u)&&a),\"keyup.space\"===n&&(a=!1!==i._13(l,191)._keyup()&&a),\"ngModelChange\"===n&&(a=!1!==(e.music=u)&&a),a},lo.b,lo.a)),i.Y(191,1228800,null,1,no.a,[Yn.a,Jl.a,Ql.a,i.j,i.z,[2,Kl.a],Sn.a],{selectOptions:[0,\"selectOptions\"]},null),i._18(603979776,20,{options:1}),i._17(1024,null,A.j,function(l){return[l]},[no.a]),i.Y(194,671744,null,0,A.n,[[8,null],[8,null],[8,null],[2,A.j]],{model:[0,\"model\"]},{update:\"ngModelChange\"}),i._17(2048,null,A.k,null,[A.n]),i.Y(196,16384,null,0,A.l,[A.k],null,null),(l()(),i._20(-1,null,[\"\\n        \"])),(l()(),i.Z(198,0,null,null,2,\"ion-option\",[],null,null,null,null,null)),i.Y(199,16384,[[20,4]],0,uo.a,[i.j],null,null),(l()(),i._20(-1,null,[\"Alice in Chains\"])),(l()(),i._20(-1,null,[\"\\n        \"])),(l()(),i.Z(202,0,null,null,2,\"ion-option\",[],null,null,null,null,null)),i.Y(203,16384,[[20,4]],0,uo.a,[i.j],null,null),(l()(),i._20(-1,null,[\"Green Day\"])),(l()(),i._20(-1,null,[\"\\n        \"])),(l()(),i.Z(206,0,null,null,2,\"ion-option\",[],null,null,null,null,null)),i.Y(207,16384,[[20,4]],0,uo.a,[i.j],null,null),(l()(),i._20(-1,null,[\"Nirvana\"])),(l()(),i._20(-1,null,[\"\\n        \"])),(l()(),i.Z(210,0,null,null,2,\"ion-option\",[],null,null,null,null,null)),i.Y(211,16384,[[20,4]],0,uo.a,[i.j],null,null),(l()(),i._20(-1,null,[\"Pearl Jam\"])),(l()(),i._20(-1,null,[\"\\n        \"])),(l()(),i.Z(214,0,null,null,2,\"ion-option\",[],null,null,null,null,null)),i.Y(215,16384,[[20,4]],0,uo.a,[i.j],null,null),(l()(),i._20(-1,null,[\"Smashing Pumpkins\"])),(l()(),i._20(-1,null,[\"\\n        \"])),(l()(),i.Z(218,0,null,null,2,\"ion-option\",[],null,null,null,null,null)),i.Y(219,16384,[[20,4]],0,uo.a,[i.j],null,null),(l()(),i._20(-1,null,[\"Soundgarden\"])),(l()(),i._20(-1,null,[\"\\n        \"])),(l()(),i.Z(222,0,null,null,2,\"ion-option\",[],null,[[null,\"select\"]],function(l,n,u){var a=!0;return\"select\"===n&&(a=!1!==l.component.stpSelect()&&a),a},null,null)),i.Y(223,16384,[[20,4]],0,uo.a,[i.j],null,null),(l()(),i._20(-1,null,[\"Stone Temple Pilots\"])),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i._20(-1,2,[\"\\n    \"])),(l()(),i._20(-1,null,[\"\\n\\n    \"])),(l()(),i.Z(228,0,null,null,120,\"ion-item\",[[\"class\",\"item item-block\"]],null,null,null,$l.b,$l.a)),i.Y(229,1097728,null,3,Kl.a,[Jl.a,Ql.a,i.j,i.z,[2,ln.a]],null,null),i._18(335544320,21,{contentLabel:0}),i._18(603979776,22,{_buttons:1}),i._18(603979776,23,{_icons:1}),i.Y(233,16384,null,0,nn.a,[],null,null),(l()(),i._20(-1,2,[\"\\n      \"])),(l()(),i.Z(235,0,null,1,2,\"ion-label\",[],null,null,null,null,null)),i.Y(236,16384,[[21,4]],0,la.a,[Ql.a,i.j,i.z,[8,null],[8,null],[8,null],[8,null]],null,null),(l()(),i._20(-1,null,[\"Date\"])),(l()(),i._20(-1,2,[\"\\n      \"])),(l()(),i.Z(239,0,null,3,55,\"ion-select\",[],[[2,\"select-disabled\",null],[2,\"ng-untouched\",null],[2,\"ng-touched\",null],[2,\"ng-pristine\",null],[2,\"ng-dirty\",null],[2,\"ng-valid\",null],[2,\"ng-invalid\",null],[2,\"ng-pending\",null]],[[null,\"ngModelChange\"],[null,\"click\"],[null,\"keyup.space\"]],function(l,n,u){var a=!0,e=l.component;return\"click\"===n&&(a=!1!==i._13(l,240)._click(u)&&a),\"keyup.space\"===n&&(a=!1!==i._13(l,240)._keyup()&&a),\"ngModelChange\"===n&&(a=!1!==(e.month=u)&&a),a},lo.b,lo.a)),i.Y(240,1228800,null,1,no.a,[Yn.a,Jl.a,Ql.a,i.j,i.z,[2,Kl.a],Sn.a],null,null),i._18(603979776,24,{options:1}),i._17(1024,null,A.j,function(l){return[l]},[no.a]),i.Y(243,671744,null,0,A.n,[[8,null],[8,null],[8,null],[2,A.j]],{model:[0,\"model\"]},{update:\"ngModelChange\"}),i._17(2048,null,A.k,null,[A.n]),i.Y(245,16384,null,0,A.l,[A.k],null,null),(l()(),i._20(-1,null,[\"\\n        \"])),(l()(),i.Z(247,0,null,null,2,\"ion-option\",[[\"value\",\"01\"]],null,null,null,null,null)),i.Y(248,16384,[[24,4]],0,uo.a,[i.j],{value:[0,\"value\"]},null),(l()(),i._20(-1,null,[\"January\"])),(l()(),i._20(-1,null,[\"\\n        \"])),(l()(),i.Z(251,0,null,null,2,\"ion-option\",[[\"value\",\"02\"]],null,null,null,null,null)),i.Y(252,16384,[[24,4]],0,uo.a,[i.j],{value:[0,\"value\"]},null),(l()(),i._20(-1,null,[\"February\"])),(l()(),i._20(-1,null,[\"\\n        \"])),(l()(),i.Z(255,0,null,null,2,\"ion-option\",[[\"value\",\"03\"]],null,null,null,null,null)),i.Y(256,16384,[[24,4]],0,uo.a,[i.j],{value:[0,\"value\"]},null),(l()(),i._20(-1,null,[\"March\"])),(l()(),i._20(-1,null,[\"\\n        \"])),(l()(),i.Z(259,0,null,null,2,\"ion-option\",[[\"value\",\"04\"]],null,null,null,null,null)),i.Y(260,16384,[[24,4]],0,uo.a,[i.j],{value:[0,\"value\"]},null),(l()(),i._20(-1,null,[\"April\"])),(l()(),i._20(-1,null,[\"\\n        \"])),(l()(),i.Z(263,0,null,null,2,\"ion-option\",[[\"value\",\"05\"]],null,null,null,null,null)),i.Y(264,16384,[[24,4]],0,uo.a,[i.j],{value:[0,\"value\"]},null),(l()(),i._20(-1,null,[\"May\"])),(l()(),i._20(-1,null,[\"\\n        \"])),(l()(),i.Z(267,0,null,null,2,\"ion-option\",[[\"value\",\"06\"]],null,null,null,null,null)),i.Y(268,16384,[[24,4]],0,uo.a,[i.j],{value:[0,\"value\"]},null),(l()(),i._20(-1,null,[\"June\"])),(l()(),i._20(-1,null,[\"\\n        \"])),(l()(),i.Z(271,0,null,null,2,\"ion-option\",[[\"value\",\"07\"]],null,null,null,null,null)),i.Y(272,16384,[[24,4]],0,uo.a,[i.j],{value:[0,\"value\"]},null),(l()(),i._20(-1,null,[\"July\"])),(l()(),i._20(-1,null,[\"\\n        \"])),(l()(),i.Z(275,0,null,null,2,\"ion-option\",[[\"value\",\"08\"]],null,null,null,null,null)),i.Y(276,16384,[[24,4]],0,uo.a,[i.j],{value:[0,\"value\"]},null),(l()(),i._20(-1,null,[\"August\"])),(l()(),i._20(-1,null,[\"\\n        \"])),(l()(),i.Z(279,0,null,null,2,\"ion-option\",[[\"value\",\"09\"]],null,null,null,null,null)),i.Y(280,16384,[[24,4]],0,uo.a,[i.j],{value:[0,\"value\"]},null),(l()(),i._20(-1,null,[\"September\"])),(l()(),i._20(-1,null,[\"\\n        \"])),(l()(),i.Z(283,0,null,null,2,\"ion-option\",[[\"value\",\"10\"]],null,null,null,null,null)),i.Y(284,16384,[[24,4]],0,uo.a,[i.j],{value:[0,\"value\"]},null),(l()(),i._20(-1,null,[\"October\"])),(l()(),i._20(-1,null,[\"\\n        \"])),(l()(),i.Z(287,0,null,null,2,\"ion-option\",[[\"value\",\"11\"]],null,null,null,null,null)),i.Y(288,16384,[[24,4]],0,uo.a,[i.j],{value:[0,\"value\"]},null),(l()(),i._20(-1,null,[\"November\"])),(l()(),i._20(-1,null,[\"\\n        \"])),(l()(),i.Z(291,0,null,null,2,\"ion-option\",[[\"checked\",\"true\"],[\"value\",\"12\"]],null,null,null,null,null)),i.Y(292,16384,[[24,4]],0,uo.a,[i.j],{value:[0,\"value\"]},null),(l()(),i._20(-1,null,[\"December\"])),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i._20(-1,2,[\"\\n      \"])),(l()(),i.Z(296,0,null,3,51,\"ion-select\",[],[[2,\"select-disabled\",null],[2,\"ng-untouched\",null],[2,\"ng-touched\",null],[2,\"ng-pristine\",null],[2,\"ng-dirty\",null],[2,\"ng-valid\",null],[2,\"ng-invalid\",null],[2,\"ng-pending\",null]],[[null,\"ngModelChange\"],[null,\"click\"],[null,\"keyup.space\"]],function(l,n,u){var a=!0,e=l.component;return\"click\"===n&&(a=!1!==i._13(l,297)._click(u)&&a),\"keyup.space\"===n&&(a=!1!==i._13(l,297)._keyup()&&a),\"ngModelChange\"===n&&(a=!1!==(e.year=u)&&a),a},lo.b,lo.a)),i.Y(297,1228800,null,1,no.a,[Yn.a,Jl.a,Ql.a,i.j,i.z,[2,Kl.a],Sn.a],null,null),i._18(603979776,25,{options:1}),i._17(1024,null,A.j,function(l){return[l]},[no.a]),i.Y(300,671744,null,0,A.n,[[8,null],[8,null],[8,null],[2,A.j]],{model:[0,\"model\"]},{update:\"ngModelChange\"}),i._17(2048,null,A.k,null,[A.n]),i.Y(302,16384,null,0,A.l,[A.k],null,null),(l()(),i._20(-1,null,[\"\\n        \"])),(l()(),i.Z(304,0,null,null,2,\"ion-option\",[],null,null,null,null,null)),i.Y(305,16384,[[25,4]],0,uo.a,[i.j],null,null),(l()(),i._20(-1,null,[\"1989\"])),(l()(),i._20(-1,null,[\"\\n        \"])),(l()(),i.Z(308,0,null,null,2,\"ion-option\",[],null,null,null,null,null)),i.Y(309,16384,[[25,4]],0,uo.a,[i.j],null,null),(l()(),i._20(-1,null,[\"1990\"])),(l()(),i._20(-1,null,[\"\\n        \"])),(l()(),i.Z(312,0,null,null,2,\"ion-option\",[],null,null,null,null,null)),i.Y(313,16384,[[25,4]],0,uo.a,[i.j],null,null),(l()(),i._20(-1,null,[\"1991\"])),(l()(),i._20(-1,null,[\"\\n        \"])),(l()(),i.Z(316,0,null,null,2,\"ion-option\",[],null,null,null,null,null)),i.Y(317,16384,[[25,4]],0,uo.a,[i.j],null,null),(l()(),i._20(-1,null,[\"1992\"])),(l()(),i._20(-1,null,[\"\\n        \"])),(l()(),i.Z(320,0,null,null,2,\"ion-option\",[],null,null,null,null,null)),i.Y(321,16384,[[25,4]],0,uo.a,[i.j],null,null),(l()(),i._20(-1,null,[\"1993\"])),(l()(),i._20(-1,null,[\"\\n        \"])),(l()(),i.Z(324,0,null,null,2,\"ion-option\",[[\"checked\",\"true\"]],null,null,null,null,null)),i.Y(325,16384,[[25,4]],0,uo.a,[i.j],null,null),(l()(),i._20(-1,null,[\"1994\"])),(l()(),i._20(-1,null,[\"\\n        \"])),(l()(),i.Z(328,0,null,null,2,\"ion-option\",[],null,null,null,null,null)),i.Y(329,16384,[[25,4]],0,uo.a,[i.j],null,null),(l()(),i._20(-1,null,[\"1995\"])),(l()(),i._20(-1,null,[\"\\n        \"])),(l()(),i.Z(332,0,null,null,2,\"ion-option\",[],null,null,null,null,null)),i.Y(333,16384,[[25,4]],0,uo.a,[i.j],null,null),(l()(),i._20(-1,null,[\"1996\"])),(l()(),i._20(-1,null,[\"\\n        \"])),(l()(),i.Z(336,0,null,null,2,\"ion-option\",[],null,null,null,null,null)),i.Y(337,16384,[[25,4]],0,uo.a,[i.j],null,null),(l()(),i._20(-1,null,[\"1997\"])),(l()(),i._20(-1,null,[\"\\n        \"])),(l()(),i.Z(340,0,null,null,2,\"ion-option\",[],null,null,null,null,null)),i.Y(341,16384,[[25,4]],0,uo.a,[i.j],null,null),(l()(),i._20(-1,null,[\"1998\"])),(l()(),i._20(-1,null,[\"\\n        \"])),(l()(),i.Z(344,0,null,null,2,\"ion-option\",[],null,null,null,null,null)),i.Y(345,16384,[[25,4]],0,uo.a,[i.j],null,null),(l()(),i._20(-1,null,[\"1999\"])),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i._20(-1,2,[\"\\n    \"])),(l()(),i._20(-1,null,[\"\\n  \"])),(l()(),i._20(-1,1,[\"\\n\"])),(l()(),i._20(-1,null,[\"\\n\"]))],function(l,n){var u=n.component;l(n,34,0,u.gender),l(n,39,0,\"f\"),l(n,43,0,\"m\"),l(n,60,0,\"popover\"),l(n,63,0,u.gaming),l(n,68,0,\"nes\"),l(n,72,0,\"n64\"),l(n,76,0,\"ps\"),l(n,80,0,\"genesis\"),l(n,84,0,\"saturn\"),l(n,88,0,\"snes\"),l(n,105,0,\"action-sheet\"),l(n,108,0,u.notifications),l(n,113,0,\"enable\"),l(n,117,0,\"mute\"),l(n,121,0,\"mute_week\"),l(n,125,0,\"mute_year\"),l(n,142,0,\"Nah\"),l(n,145,0,u.os),l(n,150,0,\"dos\"),l(n,154,0,\"lunix\"),l(n,158,0,\"mac7\"),l(n,162,0,\"mac8\"),l(n,166,0,\"win3.1\"),l(n,170,0,\"win95\"),l(n,174,0,\"win98\"),l(n,191,0,u.musicAlertOpts),l(n,194,0,u.music),l(n,243,0,u.month),l(n,248,0,\"01\"),l(n,252,0,\"02\"),l(n,256,0,\"03\"),l(n,260,0,\"04\"),l(n,264,0,\"05\"),l(n,268,0,\"06\"),l(n,272,0,\"07\"),l(n,276,0,\"08\"),l(n,280,0,\"09\"),l(n,284,0,\"10\"),l(n,288,0,\"11\"),l(n,292,0,\"12\"),l(n,300,0,u.year)},function(l,n){l(n,4,0,i._13(n,5)._hidden,i._13(n,5)._sbPadding),l(n,13,0,i._13(n,14).statusbarPadding,i._13(n,14)._hasRefresher),l(n,30,0,i._13(n,31)._disabled,i._13(n,36).ngClassUntouched,i._13(n,36).ngClassTouched,i._13(n,36).ngClassPristine,i._13(n,36).ngClassDirty,i._13(n,36).ngClassValid,i._13(n,36).ngClassInvalid,i._13(n,36).ngClassPending),l(n,59,0,i._13(n,60)._disabled,i._13(n,65).ngClassUntouched,i._13(n,65).ngClassTouched,i._13(n,65).ngClassPristine,i._13(n,65).ngClassDirty,i._13(n,65).ngClassValid,i._13(n,65).ngClassInvalid,i._13(n,65).ngClassPending),l(n,104,0,i._13(n,105)._disabled,i._13(n,110).ngClassUntouched,i._13(n,110).ngClassTouched,i._13(n,110).ngClassPristine,i._13(n,110).ngClassDirty,i._13(n,110).ngClassValid,i._13(n,110).ngClassInvalid,i._13(n,110).ngClassPending),l(n,141,0,i._13(n,142)._disabled,i._13(n,147).ngClassUntouched,i._13(n,147).ngClassTouched,i._13(n,147).ngClassPristine,i._13(n,147).ngClassDirty,i._13(n,147).ngClassValid,i._13(n,147).ngClassInvalid,i._13(n,147).ngClassPending),l(n,190,0,i._13(n,191)._disabled,i._13(n,196).ngClassUntouched,i._13(n,196).ngClassTouched,i._13(n,196).ngClassPristine,i._13(n,196).ngClassDirty,i._13(n,196).ngClassValid,i._13(n,196).ngClassInvalid,i._13(n,196).ngClassPending),l(n,239,0,i._13(n,240)._disabled,i._13(n,245).ngClassUntouched,i._13(n,245).ngClassTouched,i._13(n,245).ngClassPristine,i._13(n,245).ngClassDirty,i._13(n,245).ngClassValid,i._13(n,245).ngClassInvalid,i._13(n,245).ngClassPending),l(n,296,0,i._13(n,297)._disabled,i._13(n,302).ngClassUntouched,i._13(n,302).ngClassTouched,i._13(n,302).ngClassPristine,i._13(n,302).ngClassDirty,i._13(n,302).ngClassValid,i._13(n,302).ngClassInvalid,i._13(n,302).ngClassPending)})},ao)),i.Y(1,49152,null,0,hl,[],null,null)],null,null)},{},{},[]),oo=u(240),to=u(116),io=u(73),_o=u(241),so=i.X({encapsulation:2,styles:[],data:{}}),co=i.V(\"ng-component\",pl,function(l){return i._22(0,[(l()(),i.Z(0,0,null,null,1,\"ng-component\",[],null,null,null,function(l){return i._22(0,[(l()(),i._20(-1,null,[\"\\n\"])),(l()(),i.Z(1,0,null,null,10,\"ion-header\",[],null,null,null,null,null)),i.Y(2,16384,null,0,jn.a,[Ql.a,i.j,i.z,[2,fn.a]],null,null),(l()(),i._20(-1,null,[\"\\n  \"])),(l()(),i.Z(4,0,null,null,6,\"ion-navbar\",[[\"class\",\"toolbar\"]],[[8,\"hidden\",0],[2,\"statusbar-padding\",null]],null,null,Fn.b,Fn.a)),i.Y(5,49152,null,0,Pn.a,[Yn.a,[2,fn.a],[2,Ln.a],Ql.a,i.j,i.z],null,null),(l()(),i._20(-1,3,[\"\\n    \"])),(l()(),i.Z(7,0,null,3,2,\"ion-title\",[],null,null,null,vn.b,vn.a)),i.Y(8,49152,null,0,yn.a,[Ql.a,i.j,i.z,[2,kn.a],[2,Pn.a]],null,null),(l()(),i._20(-1,0,[\"Slides\"])),(l()(),i._20(-1,3,[\"\\n  \"])),(l()(),i._20(-1,null,[\"\\n\"])),(l()(),i._20(-1,null,[\"\\n\\n\"])),(l()(),i.Z(13,0,null,null,29,\"ion-content\",[[\"class\",\"tutorial-page\"]],[[2,\"statusbar-padding\",null],[2,\"has-refresher\",null]],null,null,Cn.b,Cn.a)),i.Y(14,4374528,null,0,wn.a,[Ql.a,on.a,_n.a,i.j,i.z,Yn.a,Zn.a,i.u,[2,fn.a],[2,Ln.a]],null,null),(l()(),i._20(-1,1,[\"\\n\\n  \"])),(l()(),i.Z(16,0,null,1,25,\"ion-slides\",[[\"pager\",\"\"]],null,null,null,_o.b,_o.a)),i.Y(17,1228800,null,0,io.a,[Ql.a,on.a,i.u,[2,fn.a],i.j,i.z],{pager:[0,\"pager\"]},null),(l()(),i._20(-1,0,[\"\\n    \"])),(l()(),i.U(16777216,null,0,1,null,function(l){return i._22(0,[(l()(),i.Z(0,0,null,null,21,\"ion-slide\",[],null,null,null,oo.b,oo.a)),i.Y(1,180224,null,0,to.a,[i.j,i.z,io.a],null,null),(l()(),i._20(-1,0,[\"\\n      \"])),(l()(),i.Z(3,0,null,0,11,\"ion-toolbar\",[[\"class\",\"toolbar\"]],[[2,\"statusbar-padding\",null]],null,null,zn.b,zn.a)),i.Y(4,49152,null,0,kn.a,[Ql.a,i.j,i.z],null,null),(l()(),i._20(-1,3,[\"\\n        \"])),(l()(),i.Z(6,0,null,2,7,\"ion-buttons\",[[\"end\",\"\"]],null,null,null,null,null)),i.Y(7,16384,null,1,ru.a,[Ql.a,i.j,i.z,[2,kn.a],[2,Pn.a]],null,null),i._18(603979776,1,{_buttons:1}),(l()(),i._20(-1,null,[\"\\n          \"])),(l()(),i.Z(10,0,null,null,2,\"button\",[[\"color\",\"primary\"],[\"ion-button\",\"\"]],null,null,null,An.b,An.a)),i.Y(11,1097728,[[1,4]],0,Rn.a,[[8,\"\"],Ql.a,i.j,i.z],{color:[0,\"color\"]},null),(l()(),i._20(-1,0,[\"Skip\"])),(l()(),i._20(-1,null,[\"\\n        \"])),(l()(),i._20(-1,3,[\"\\n      \"])),(l()(),i._20(-1,0,[\"\\n      \"])),(l()(),i.Z(16,0,null,0,0,\"img\",[[\"class\",\"slide-image\"]],[[8,\"src\",4]],null,null,null,null)),(l()(),i._20(-1,0,[\"\\n      \"])),(l()(),i.Z(18,0,null,0,0,\"h2\",[[\"class\",\"slide-title\"]],[[8,\"innerHTML\",1]],null,null,null,null)),(l()(),i._20(-1,0,[\"\\n      \"])),(l()(),i.Z(20,0,null,0,0,\"p\",[],[[8,\"innerHTML\",1]],null,null,null,null)),(l()(),i._20(-1,0,[\"\\n    \"]))],function(l,n){l(n,11,0,\"primary\")},function(l,n){l(n,3,0,i._13(n,4)._sbPadding),l(n,16,0,n.context.$implicit.image),l(n,18,0,n.context.$implicit.title),l(n,20,0,n.context.$implicit.description)})})),i.Y(20,802816,null,0,sn.h,[i.I,i.F,i.p],{ngForOf:[0,\"ngForOf\"]},null),(l()(),i._20(-1,0,[\"\\n    \"])),(l()(),i.Z(22,0,null,0,18,\"ion-slide\",[],null,null,null,oo.b,oo.a)),i.Y(23,180224,null,0,to.a,[i.j,i.z,io.a],null,null),(l()(),i._20(-1,0,[\"\\n      \"])),(l()(),i.Z(25,0,null,0,2,\"ion-toolbar\",[[\"class\",\"toolbar\"]],[[2,\"statusbar-padding\",null]],null,null,zn.b,zn.a)),i.Y(26,49152,null,0,kn.a,[Ql.a,i.j,i.z],null,null),(l()(),i._20(-1,3,[\"\\n      \"])),(l()(),i._20(-1,0,[\"\\n      \"])),(l()(),i.Z(29,0,null,0,0,\"img\",[[\"class\",\"slide-image\"],[\"src\",\"assets/img/ica-slidebox-img-4.png\"]],null,null,null,null,null)),(l()(),i._20(-1,0,[\"\\n      \"])),(l()(),i.Z(31,0,null,0,1,\"h2\",[[\"class\",\"slide-title\"]],null,null,null,null,null)),(l()(),i._20(-1,null,[\"Ready to Play?\"])),(l()(),i._20(-1,0,[\"\\n      \"])),(l()(),i.Z(34,0,null,0,5,\"button\",[[\"clear\",\"\"],[\"color\",\"primary\"],[\"icon-end\",\"\"],[\"ion-button\",\"\"],[\"large\",\"\"]],null,null,null,An.b,An.a)),i.Y(35,1097728,null,0,Rn.a,[[8,\"\"],Ql.a,i.j,i.z],{color:[0,\"color\"],large:[1,\"large\"],clear:[2,\"clear\"]},null),(l()(),i._20(-1,0,[\"\\n        Continue\\n        \"])),(l()(),i.Z(37,0,null,0,1,\"ion-icon\",[[\"name\",\"arrow-forward\"],[\"role\",\"img\"]],[[2,\"hide\",null]],null,null,null,null)),i.Y(38,147456,null,0,mn.a,[Ql.a,i.j,i.z],{name:[0,\"name\"]},null),(l()(),i._20(-1,0,[\"\\n      \"])),(l()(),i._20(-1,0,[\"\\n    \"])),(l()(),i._20(-1,0,[\"\\n  \"])),(l()(),i._20(-1,1,[\"\\n\"])),(l()(),i._20(-1,null,[\"\\n\"]))],function(l,n){var u=n.component;l(n,17,0,\"\"),l(n,20,0,u.slides),l(n,35,0,\"primary\",\"\",\"\"),l(n,38,0,\"arrow-forward\")},function(l,n){l(n,4,0,i._13(n,5)._hidden,i._13(n,5)._sbPadding),l(n,13,0,i._13(n,14).statusbarPadding,i._13(n,14)._hasRefresher),l(n,25,0,i._13(n,26)._sbPadding),l(n,37,0,i._13(n,38)._hidden)})},so)),i.Y(1,49152,null,0,pl,[],null,null)],null,null)},{},{},[]),ro=i.X({encapsulation:2,styles:[],data:{}}),bo=i.V(\"ng-component\",Zl,function(l){return i._22(0,[(l()(),i.Z(0,0,null,null,1,\"ng-component\",[],null,null,null,function(l){return i._22(0,[(l()(),i._20(-1,null,[\"\\n    \"])),(l()(),i.Z(1,0,null,null,10,\"ion-header\",[],null,null,null,null,null)),i.Y(2,16384,null,0,jn.a,[Ql.a,i.j,i.z,[2,fn.a]],null,null),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i.Z(4,0,null,null,6,\"ion-navbar\",[[\"class\",\"toolbar\"]],[[8,\"hidden\",0],[2,\"statusbar-padding\",null]],null,null,Fn.b,Fn.a)),i.Y(5,49152,null,0,Pn.a,[Yn.a,[2,fn.a],[2,Ln.a],Ql.a,i.j,i.z],null,null),(l()(),i._20(-1,3,[\"\\n        \"])),(l()(),i.Z(7,0,null,3,2,\"ion-title\",[],null,null,null,vn.b,vn.a)),i.Y(8,49152,null,0,yn.a,[Ql.a,i.j,i.z,[2,kn.a],[2,Pn.a]],null,null),(l()(),i._20(-1,0,[\"Tabs\"])),(l()(),i._20(-1,3,[\"\\n      \"])),(l()(),i._20(-1,null,[\"\\n    \"])),(l()(),i._20(-1,null,[\"\\n\\n    \"])),(l()(),i.Z(13,0,null,null,2,\"ion-content\",[],[[2,\"statusbar-padding\",null],[2,\"has-refresher\",null]],null,null,Cn.b,Cn.a)),i.Y(14,4374528,null,0,wn.a,[Ql.a,on.a,_n.a,i.j,i.z,Yn.a,Zn.a,i.u,[2,fn.a],[2,Ln.a]],null,null),(l()(),i._20(-1,1,[\"\\n    \"])),(l()(),i._20(-1,null,[\"\\n\"]))],null,function(l,n){l(n,4,0,i._13(n,5)._hidden,i._13(n,5)._sbPadding),l(n,13,0,i._13(n,14).statusbarPadding,i._13(n,14)._hasRefresher)})},ro)),i.Y(1,49152,null,0,Zl,[],null,null)],null,null)},{},{},[]),mo=i.X({encapsulation:2,styles:[],data:{}}),go=i.V(\"ng-component\",Yl,function(l){return i._22(0,[(l()(),i.Z(0,0,null,null,1,\"ng-component\",[],null,null,null,function(l){return i._22(0,[(l()(),i._20(-1,null,[\"\\n    \"])),(l()(),i.Z(1,0,null,null,12,\"ion-tabs\",[],null,null,null,Fu.b,Fu.a)),i._17(6144,null,hn.a,null,[Au.a]),i.Y(3,4374528,null,0,Au.a,[[2,Ln.a],[2,fn.a],Yn.a,Ql.a,i.j,on.a,i.z,Sn.a,Zn.a],null,null),(l()(),i._20(-1,0,[\"\\n      \"])),(l()(),i.Z(5,0,null,0,1,\"ion-tab\",[[\"role\",\"tabpanel\"],[\"tabBadge\",\"3\"],[\"tabBadgeStyle\",\"danger\"],[\"tabIcon\",\"call\"]],[[1,\"id\",0],[1,\"aria-labelledby\",0]],null,null,Ru.b,Ru.a)),i.Y(6,245760,null,0,Vu.a,[Au.a,Yn.a,Ql.a,on.a,i.j,i.u,i.z,i.i,i.g,tn.l,Tn.a,[2,Sn.a],_n.a,i.k],{root:[0,\"root\"],tabIcon:[1,\"tabIcon\"],tabBadge:[2,\"tabBadge\"],tabBadgeStyle:[3,\"tabBadgeStyle\"]},null),(l()(),i._20(-1,0,[\"\\n      \"])),(l()(),i.Z(8,0,null,0,1,\"ion-tab\",[[\"role\",\"tabpanel\"],[\"tabBadge\",\"14\"],[\"tabBadgeStyle\",\"danger\"],[\"tabIcon\",\"chatbubbles\"]],[[1,\"id\",0],[1,\"aria-labelledby\",0]],null,null,Ru.b,Ru.a)),i.Y(9,245760,null,0,Vu.a,[Au.a,Yn.a,Ql.a,on.a,i.j,i.u,i.z,i.i,i.g,tn.l,Tn.a,[2,Sn.a],_n.a,i.k],{root:[0,\"root\"],tabIcon:[1,\"tabIcon\"],tabBadge:[2,\"tabBadge\"],tabBadgeStyle:[3,\"tabBadgeStyle\"]},null),(l()(),i._20(-1,0,[\"\\n      \"])),(l()(),i.Z(11,0,null,0,1,\"ion-tab\",[[\"role\",\"tabpanel\"],[\"tabIcon\",\"musical-notes\"]],[[1,\"id\",0],[1,\"aria-labelledby\",0]],null,null,Ru.b,Ru.a)),i.Y(12,245760,null,0,Vu.a,[Au.a,Yn.a,Ql.a,on.a,i.j,i.u,i.z,i.i,i.g,tn.l,Tn.a,[2,Sn.a],_n.a,i.k],{root:[0,\"root\"],tabIcon:[1,\"tabIcon\"]},null),(l()(),i._20(-1,0,[\"\\n    \"])),(l()(),i._20(-1,null,[\"\\n\"]))],function(l,n){var u=n.component;l(n,6,0,u.rootPage,\"call\",\"3\",\"danger\"),l(n,9,0,u.rootPage,\"chatbubbles\",\"14\",\"danger\"),l(n,12,0,u.rootPage,\"musical-notes\")},function(l,n){l(n,5,0,i._13(n,6)._tabId,i._13(n,6)._btnId),l(n,8,0,i._13(n,9)._tabId,i._13(n,9)._btnId),l(n,11,0,i._13(n,12)._tabId,i._13(n,12)._btnId)})},mo)),i.Y(1,49152,null,0,Yl,[],null,null)],null,null)},{},{},[]),ho=i.X({encapsulation:2,styles:[],data:{}}),po=i.V(\"ng-component\",jl,function(l){return i._22(0,[(l()(),i.Z(0,0,null,null,1,\"ng-component\",[],null,null,null,function(l){return i._22(0,[(l()(),i._20(-1,null,[\"\\n    \"])),(l()(),i.Z(1,0,null,null,10,\"ion-header\",[],null,null,null,null,null)),i.Y(2,16384,null,0,jn.a,[Ql.a,i.j,i.z,[2,fn.a]],null,null),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i.Z(4,0,null,null,6,\"ion-navbar\",[[\"class\",\"toolbar\"]],[[8,\"hidden\",0],[2,\"statusbar-padding\",null]],null,null,Fn.b,Fn.a)),i.Y(5,49152,null,0,Pn.a,[Yn.a,[2,fn.a],[2,Ln.a],Ql.a,i.j,i.z],null,null),(l()(),i._20(-1,3,[\"\\n        \"])),(l()(),i.Z(7,0,null,3,2,\"ion-title\",[],null,null,null,vn.b,vn.a)),i.Y(8,49152,null,0,yn.a,[Ql.a,i.j,i.z,[2,kn.a],[2,Pn.a]],null,null),(l()(),i._20(-1,0,[\"Tabs\"])),(l()(),i._20(-1,3,[\"\\n      \"])),(l()(),i._20(-1,null,[\"\\n    \"])),(l()(),i._20(-1,null,[\"\\n\\n    \"])),(l()(),i.Z(13,0,null,null,2,\"ion-content\",[],[[2,\"statusbar-padding\",null],[2,\"has-refresher\",null]],null,null,Cn.b,Cn.a)),i.Y(14,4374528,null,0,wn.a,[Ql.a,on.a,_n.a,i.j,i.z,Yn.a,Zn.a,i.u,[2,fn.a],[2,Ln.a]],null,null),(l()(),i._20(-1,1,[\"\\n    \"])),(l()(),i._20(-1,null,[\"\\n\"]))],null,function(l,n){l(n,4,0,i._13(n,5)._hidden,i._13(n,5)._sbPadding),l(n,13,0,i._13(n,14).statusbarPadding,i._13(n,14)._hasRefresher)})},ho)),i.Y(1,49152,null,0,jl,[on.a],null,null)],null,null)},{},{},[]),Zo=i.X({encapsulation:2,styles:[],data:{}}),Yo=i.V(\"ng-component\",fl,function(l){return i._22(0,[(l()(),i.Z(0,0,null,null,1,\"ng-component\",[],null,null,null,function(l){return i._22(0,[(l()(),i._20(-1,null,[\"\\n    \"])),(l()(),i.Z(1,0,null,null,12,\"ion-tabs\",[[\"class\",\"tabs-basic\"]],null,null,null,Fu.b,Fu.a)),i._17(6144,null,hn.a,null,[Au.a]),i.Y(3,4374528,null,0,Au.a,[[2,Ln.a],[2,fn.a],Yn.a,Ql.a,i.j,on.a,i.z,Sn.a,Zn.a],null,null),(l()(),i._20(-1,0,[\"\\n      \"])),(l()(),i.Z(5,0,null,0,1,\"ion-tab\",[[\"role\",\"tabpanel\"],[\"tabTitle\",\"Music\"]],[[1,\"id\",0],[1,\"aria-labelledby\",0]],null,null,Ru.b,Ru.a)),i.Y(6,245760,null,0,Vu.a,[Au.a,Yn.a,Ql.a,on.a,i.j,i.u,i.z,i.i,i.g,tn.l,Tn.a,[2,Sn.a],_n.a,i.k],{root:[0,\"root\"],tabTitle:[1,\"tabTitle\"]},null),(l()(),i._20(-1,0,[\"\\n      \"])),(l()(),i.Z(8,0,null,0,1,\"ion-tab\",[[\"role\",\"tabpanel\"],[\"tabTitle\",\"Movies\"]],[[1,\"id\",0],[1,\"aria-labelledby\",0]],null,null,Ru.b,Ru.a)),i.Y(9,245760,null,0,Vu.a,[Au.a,Yn.a,Ql.a,on.a,i.j,i.u,i.z,i.i,i.g,tn.l,Tn.a,[2,Sn.a],_n.a,i.k],{root:[0,\"root\"],tabTitle:[1,\"tabTitle\"]},null),(l()(),i._20(-1,0,[\"\\n      \"])),(l()(),i.Z(11,0,null,0,1,\"ion-tab\",[[\"role\",\"tabpanel\"],[\"tabTitle\",\"Games\"]],[[1,\"id\",0],[1,\"aria-labelledby\",0]],null,null,Ru.b,Ru.a)),i.Y(12,245760,null,0,Vu.a,[Au.a,Yn.a,Ql.a,on.a,i.j,i.u,i.z,i.i,i.g,tn.l,Tn.a,[2,Sn.a],_n.a,i.k],{root:[0,\"root\"],tabTitle:[1,\"tabTitle\"]},null),(l()(),i._20(-1,0,[\"\\n    \"])),(l()(),i._20(-1,null,[\"\\n\"]))],function(l,n){var u=n.component;l(n,6,0,u.rootPage,\"Music\"),l(n,9,0,u.rootPage,\"Movies\"),l(n,12,0,u.rootPage,\"Games\")},function(l,n){l(n,5,0,i._13(n,6)._tabId,i._13(n,6)._btnId),l(n,8,0,i._13(n,9)._tabId,i._13(n,9)._btnId),l(n,11,0,i._13(n,12)._tabId,i._13(n,12)._btnId)})},Zo)),i.Y(1,49152,null,0,fl,[],null,null)],null,null)},{},{},[]),jo=i.X({encapsulation:2,styles:[],data:{}}),fo=i.V(\"ng-component\",zl,function(l){return i._22(0,[(l()(),i.Z(0,0,null,null,1,\"ng-component\",[],null,null,null,function(l){return i._22(0,[(l()(),i._20(-1,null,[\"\\n    \"])),(l()(),i.Z(1,0,null,null,10,\"ion-header\",[],null,null,null,null,null)),i.Y(2,16384,null,0,jn.a,[Ql.a,i.j,i.z,[2,fn.a]],null,null),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i.Z(4,0,null,null,6,\"ion-navbar\",[[\"class\",\"toolbar\"]],[[8,\"hidden\",0],[2,\"statusbar-padding\",null]],null,null,Fn.b,Fn.a)),i.Y(5,49152,null,0,Pn.a,[Yn.a,[2,fn.a],[2,Ln.a],Ql.a,i.j,i.z],{color:[0,\"color\"]},null),(l()(),i._20(-1,3,[\"\\n        \"])),(l()(),i.Z(7,0,null,3,2,\"ion-title\",[],null,null,null,vn.b,vn.a)),i.Y(8,49152,null,0,yn.a,[Ql.a,i.j,i.z,[2,kn.a],[2,Pn.a]],null,null),(l()(),i._20(-1,0,[\"Tabs\"])),(l()(),i._20(-1,3,[\"\\n      \"])),(l()(),i._20(-1,null,[\"\\n    \"])),(l()(),i._20(-1,null,[\"\\n\\n    \"])),(l()(),i.Z(13,0,null,null,2,\"ion-content\",[],[[2,\"statusbar-padding\",null],[2,\"has-refresher\",null]],null,null,Cn.b,Cn.a)),i.Y(14,4374528,null,0,wn.a,[Ql.a,on.a,_n.a,i.j,i.z,Yn.a,Zn.a,i.u,[2,fn.a],[2,Ln.a]],null,null),(l()(),i._20(-1,1,[\"\\n    \"])),(l()(),i._20(-1,null,[\"\\n\"]))],function(l,n){l(n,5,0,n.component.isAndroid?\"danger\":\"primary\")},function(l,n){l(n,4,0,i._13(n,5)._hidden,i._13(n,5)._sbPadding),l(n,13,0,i._13(n,14).statusbarPadding,i._13(n,14)._hasRefresher)})},jo)),i.Y(1,49152,null,0,zl,[on.a],null,null)],null,null)},{},{},[]),zo=i.X({encapsulation:2,styles:[],data:{}}),ko=i.V(\"ng-component\",kl,function(l){return i._22(0,[(l()(),i.Z(0,0,null,null,1,\"ng-component\",[],null,null,null,function(l){return i._22(0,[(l()(),i._20(-1,null,[\"\\n  \"])),(l()(),i.Z(1,0,null,null,15,\"ion-tabs\",[[\"class\",\"tabs-icon\"]],null,null,null,Fu.b,Fu.a)),i._17(6144,null,hn.a,null,[Au.a]),i.Y(3,4374528,null,0,Au.a,[[2,Ln.a],[2,fn.a],Yn.a,Ql.a,i.j,on.a,i.z,Sn.a,Zn.a],{color:[0,\"color\"]},null),(l()(),i._20(-1,0,[\"\\n    \"])),(l()(),i.Z(5,0,null,0,1,\"ion-tab\",[[\"role\",\"tabpanel\"],[\"tabIcon\",\"contact\"]],[[1,\"id\",0],[1,\"aria-labelledby\",0]],null,null,Ru.b,Ru.a)),i.Y(6,245760,null,0,Vu.a,[Au.a,Yn.a,Ql.a,on.a,i.j,i.u,i.z,i.i,i.g,tn.l,Tn.a,[2,Sn.a],_n.a,i.k],{root:[0,\"root\"],tabIcon:[1,\"tabIcon\"]},null),(l()(),i._20(-1,0,[\"\\n    \"])),(l()(),i.Z(8,0,null,0,1,\"ion-tab\",[[\"role\",\"tabpanel\"],[\"tabIcon\",\"compass\"]],[[1,\"id\",0],[1,\"aria-labelledby\",0]],null,null,Ru.b,Ru.a)),i.Y(9,245760,null,0,Vu.a,[Au.a,Yn.a,Ql.a,on.a,i.j,i.u,i.z,i.i,i.g,tn.l,Tn.a,[2,Sn.a],_n.a,i.k],{root:[0,\"root\"],tabIcon:[1,\"tabIcon\"]},null),(l()(),i._20(-1,0,[\"\\n    \"])),(l()(),i.Z(11,0,null,0,1,\"ion-tab\",[[\"role\",\"tabpanel\"],[\"tabIcon\",\"analytics\"]],[[1,\"id\",0],[1,\"aria-labelledby\",0]],null,null,Ru.b,Ru.a)),i.Y(12,245760,null,0,Vu.a,[Au.a,Yn.a,Ql.a,on.a,i.j,i.u,i.z,i.i,i.g,tn.l,Tn.a,[2,Sn.a],_n.a,i.k],{root:[0,\"root\"],tabIcon:[1,\"tabIcon\"]},null),(l()(),i._20(-1,0,[\"\\n    \"])),(l()(),i.Z(14,0,null,0,1,\"ion-tab\",[[\"role\",\"tabpanel\"],[\"tabIcon\",\"settings\"]],[[1,\"id\",0],[1,\"aria-labelledby\",0]],null,null,Ru.b,Ru.a)),i.Y(15,245760,null,0,Vu.a,[Au.a,Yn.a,Ql.a,on.a,i.j,i.u,i.z,i.i,i.g,tn.l,Tn.a,[2,Sn.a],_n.a,i.k],{root:[0,\"root\"],tabIcon:[1,\"tabIcon\"]},null),(l()(),i._20(-1,0,[\"\\n  \"])),(l()(),i._20(-1,null,[\"\\n\"]))],function(l,n){var u=n.component;l(n,3,0,u.isAndroid?\"danger\":\"primary\"),l(n,6,0,u.rootPage,\"contact\"),l(n,9,0,u.rootPage,\"compass\"),l(n,12,0,u.rootPage,\"analytics\"),l(n,15,0,u.rootPage,\"settings\")},function(l,n){l(n,5,0,i._13(n,6)._tabId,i._13(n,6)._btnId),l(n,8,0,i._13(n,9)._tabId,i._13(n,9)._btnId),l(n,11,0,i._13(n,12)._tabId,i._13(n,12)._btnId),l(n,14,0,i._13(n,15)._tabId,i._13(n,15)._btnId)})},zo)),i.Y(1,49152,null,0,kl,[on.a],null,null)],null,null)},{},{},[]),vo=i.X({encapsulation:2,styles:[],data:{}}),yo=i.V(\"ng-component\",vl,function(l){return i._22(0,[(l()(),i.Z(0,0,null,null,1,\"ng-component\",[],null,null,null,function(l){return i._22(0,[(l()(),i._20(-1,null,[\"\\n    \"])),(l()(),i.Z(1,0,null,null,10,\"ion-header\",[],null,null,null,null,null)),i.Y(2,16384,null,0,jn.a,[Ql.a,i.j,i.z,[2,fn.a]],null,null),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i.Z(4,0,null,null,6,\"ion-navbar\",[[\"class\",\"toolbar\"]],[[8,\"hidden\",0],[2,\"statusbar-padding\",null]],null,null,Fn.b,Fn.a)),i.Y(5,49152,null,0,Pn.a,[Yn.a,[2,fn.a],[2,Ln.a],Ql.a,i.j,i.z],{color:[0,\"color\"]},null),(l()(),i._20(-1,3,[\"\\n        \"])),(l()(),i.Z(7,0,null,3,2,\"ion-title\",[],null,null,null,vn.b,vn.a)),i.Y(8,49152,null,0,yn.a,[Ql.a,i.j,i.z,[2,kn.a],[2,Pn.a]],null,null),(l()(),i._20(-1,0,[\"Tabs\"])),(l()(),i._20(-1,3,[\"\\n      \"])),(l()(),i._20(-1,null,[\"\\n    \"])),(l()(),i._20(-1,null,[\"\\n\\n    \"])),(l()(),i.Z(13,0,null,null,2,\"ion-content\",[],[[2,\"statusbar-padding\",null],[2,\"has-refresher\",null]],null,null,Cn.b,Cn.a)),i.Y(14,4374528,null,0,wn.a,[Ql.a,on.a,_n.a,i.j,i.z,Yn.a,Zn.a,i.u,[2,fn.a],[2,Ln.a]],null,null),(l()(),i._20(-1,1,[\"\\n    \"])),(l()(),i._20(-1,null,[\"\\n\"]))],function(l,n){l(n,5,0,n.component.isAndroid?\"royal\":\"primary\")},function(l,n){l(n,4,0,i._13(n,5)._hidden,i._13(n,5)._sbPadding),l(n,13,0,i._13(n,14).statusbarPadding,i._13(n,14)._hasRefresher)})},vo)),i.Y(1,49152,null,0,vl,[on.a],null,null)],null,null)},{},{},[]),Po=i.X({encapsulation:2,styles:[],data:{}}),Co=i.V(\"ng-component\",yl,function(l){return i._22(0,[(l()(),i.Z(0,0,null,null,1,\"ng-component\",[],null,null,null,function(l){return i._22(0,[(l()(),i._20(-1,null,[\"\\n    \"])),(l()(),i.Z(1,0,null,null,15,\"ion-tabs\",[[\"class\",\"tabs-icon-text\"]],null,null,null,Fu.b,Fu.a)),i._17(6144,null,hn.a,null,[Au.a]),i.Y(3,4374528,null,0,Au.a,[[2,Ln.a],[2,fn.a],Yn.a,Ql.a,i.j,on.a,i.z,Sn.a,Zn.a],{color:[0,\"color\"]},null),(l()(),i._20(-1,0,[\"\\n      \"])),(l()(),i.Z(5,0,null,0,1,\"ion-tab\",[[\"role\",\"tabpanel\"],[\"tabIcon\",\"water\"],[\"tabTitle\",\"Water\"]],[[1,\"id\",0],[1,\"aria-labelledby\",0]],null,null,Ru.b,Ru.a)),i.Y(6,245760,null,0,Vu.a,[Au.a,Yn.a,Ql.a,on.a,i.j,i.u,i.z,i.i,i.g,tn.l,Tn.a,[2,Sn.a],_n.a,i.k],{root:[0,\"root\"],tabTitle:[1,\"tabTitle\"],tabIcon:[2,\"tabIcon\"]},null),(l()(),i._20(-1,0,[\"\\n      \"])),(l()(),i.Z(8,0,null,0,1,\"ion-tab\",[[\"role\",\"tabpanel\"],[\"tabIcon\",\"leaf\"],[\"tabTitle\",\"Life\"]],[[1,\"id\",0],[1,\"aria-labelledby\",0]],null,null,Ru.b,Ru.a)),i.Y(9,245760,null,0,Vu.a,[Au.a,Yn.a,Ql.a,on.a,i.j,i.u,i.z,i.i,i.g,tn.l,Tn.a,[2,Sn.a],_n.a,i.k],{root:[0,\"root\"],tabTitle:[1,\"tabTitle\"],tabIcon:[2,\"tabIcon\"]},null),(l()(),i._20(-1,0,[\"\\n      \"])),(l()(),i.Z(11,0,null,0,1,\"ion-tab\",[[\"role\",\"tabpanel\"],[\"tabIcon\",\"flame\"],[\"tabTitle\",\"Fire\"]],[[1,\"id\",0],[1,\"aria-labelledby\",0]],null,null,Ru.b,Ru.a)),i.Y(12,245760,null,0,Vu.a,[Au.a,Yn.a,Ql.a,on.a,i.j,i.u,i.z,i.i,i.g,tn.l,Tn.a,[2,Sn.a],_n.a,i.k],{root:[0,\"root\"],tabTitle:[1,\"tabTitle\"],tabIcon:[2,\"tabIcon\"]},null),(l()(),i._20(-1,0,[\"\\n      \"])),(l()(),i.Z(14,0,null,0,1,\"ion-tab\",[[\"role\",\"tabpanel\"],[\"tabIcon\",\"magnet\"],[\"tabTitle\",\"Force\"]],[[1,\"id\",0],[1,\"aria-labelledby\",0]],null,null,Ru.b,Ru.a)),i.Y(15,245760,null,0,Vu.a,[Au.a,Yn.a,Ql.a,on.a,i.j,i.u,i.z,i.i,i.g,tn.l,Tn.a,[2,Sn.a],_n.a,i.k],{root:[0,\"root\"],tabTitle:[1,\"tabTitle\"],tabIcon:[2,\"tabIcon\"]},null),(l()(),i._20(-1,0,[\"\\n    \"])),(l()(),i._20(-1,null,[\"\\n\"]))],function(l,n){var u=n.component;l(n,3,0,u.isAndroid?\"royal\":\"primary\"),l(n,6,0,u.rootPage,\"Water\",\"water\"),l(n,9,0,u.rootPage,\"Life\",\"leaf\"),l(n,12,0,u.rootPage,\"Fire\",\"flame\"),l(n,15,0,u.rootPage,\"Force\",\"magnet\")},function(l,n){l(n,5,0,i._13(n,6)._tabId,i._13(n,6)._btnId),l(n,8,0,i._13(n,9)._tabId,i._13(n,9)._btnId),l(n,11,0,i._13(n,12)._tabId,i._13(n,12)._btnId),l(n,14,0,i._13(n,15)._tabId,i._13(n,15)._btnId)})},Po)),i.Y(1,49152,null,0,yl,[on.a],null,null)],null,null)},{},{},[]),wo=u(121),Lo=i.X({encapsulation:2,styles:[],data:{}}),Io=i.V(\"ng-component\",Pl,function(l){return i._22(0,[(l()(),i.Z(0,0,null,null,1,\"ng-component\",[],null,null,null,function(l){return i._22(0,[(l()(),i._20(-1,null,[\"\\n\"])),(l()(),i.Z(1,0,null,null,10,\"ion-header\",[],null,null,null,null,null)),i.Y(2,16384,null,0,jn.a,[Ql.a,i.j,i.z,[2,fn.a]],null,null),(l()(),i._20(-1,null,[\"\\n  \"])),(l()(),i.Z(4,0,null,null,6,\"ion-navbar\",[[\"class\",\"toolbar\"]],[[8,\"hidden\",0],[2,\"statusbar-padding\",null]],null,null,Fn.b,Fn.a)),i.Y(5,49152,null,0,Pn.a,[Yn.a,[2,fn.a],[2,Ln.a],Ql.a,i.j,i.z],null,null),(l()(),i._20(-1,3,[\"\\n    \"])),(l()(),i.Z(7,0,null,3,2,\"ion-title\",[],null,null,null,vn.b,vn.a)),i.Y(8,49152,null,0,yn.a,[Ql.a,i.j,i.z,[2,kn.a],[2,Pn.a]],null,null),(l()(),i._20(-1,0,[\"\\n      Toast\\n    \"])),(l()(),i._20(-1,3,[\"\\n  \"])),(l()(),i._20(-1,null,[\"\\n\"])),(l()(),i._20(-1,null,[\"\\n\\n\"])),(l()(),i.Z(13,0,null,null,22,\"ion-content\",[[\"padding\",\"\"]],[[2,\"statusbar-padding\",null],[2,\"has-refresher\",null]],null,null,Cn.b,Cn.a)),i.Y(14,4374528,null,0,wn.a,[Ql.a,on.a,_n.a,i.j,i.z,Yn.a,Zn.a,i.u,[2,fn.a],[2,Ln.a]],null,null),(l()(),i._20(-1,1,[\"\\n  \"])),(l()(),i.Z(16,0,null,1,2,\"button\",[[\"block\",\"\"],[\"ion-button\",\"\"]],null,[[null,\"click\"]],function(l,n,u){var a=!0;return\"click\"===n&&(a=!1!==l.component.showToast(\"top\")&&a),a},An.b,An.a)),i.Y(17,1097728,null,0,Rn.a,[[8,\"\"],Ql.a,i.j,i.z],{block:[0,\"block\"]},null),(l()(),i._20(-1,0,[\"Show Toast Top Position\"])),(l()(),i._20(-1,1,[\"\\n  \"])),(l()(),i.Z(20,0,null,1,2,\"button\",[[\"block\",\"\"],[\"ion-button\",\"\"]],null,[[null,\"click\"]],function(l,n,u){var a=!0;return\"click\"===n&&(a=!1!==l.component.showToast(\"middle\")&&a),a},An.b,An.a)),i.Y(21,1097728,null,0,Rn.a,[[8,\"\"],Ql.a,i.j,i.z],{block:[0,\"block\"]},null),(l()(),i._20(-1,0,[\"Show Toast Middle Position\"])),(l()(),i._20(-1,1,[\"\\n  \"])),(l()(),i.Z(24,0,null,1,2,\"button\",[[\"block\",\"\"],[\"ion-button\",\"\"]],null,[[null,\"click\"]],function(l,n,u){var a=!0;return\"click\"===n&&(a=!1!==l.component.showToast(\"bottom\")&&a),a},An.b,An.a)),i.Y(25,1097728,null,0,Rn.a,[[8,\"\"],Ql.a,i.j,i.z],{block:[0,\"block\"]},null),(l()(),i._20(-1,0,[\"Show Toast Bottom Position\"])),(l()(),i._20(-1,1,[\"\\n  \"])),(l()(),i.Z(28,0,null,1,2,\"button\",[[\"block\",\"\"],[\"ion-button\",\"\"]],null,[[null,\"click\"]],function(l,n,u){var a=!0;return\"click\"===n&&(a=!1!==l.component.showLongToast()&&a),a},An.b,An.a)),i.Y(29,1097728,null,0,Rn.a,[[8,\"\"],Ql.a,i.j,i.z],{block:[0,\"block\"]},null),(l()(),i._20(-1,0,[\"Show Long Toast\"])),(l()(),i._20(-1,1,[\"\\n  \"])),(l()(),i.Z(32,0,null,1,2,\"button\",[[\"block\",\"\"],[\"ion-button\",\"\"]],null,[[null,\"click\"]],function(l,n,u){var a=!0;return\"click\"===n&&(a=!1!==l.component.showToastWithCloseButton()&&a),a},An.b,An.a)),i.Y(33,1097728,null,0,Rn.a,[[8,\"\"],Ql.a,i.j,i.z],{block:[0,\"block\"]},null),(l()(),i._20(-1,0,[\"Show Toast W/ Close Button\"])),(l()(),i._20(-1,1,[\"\\n\"])),(l()(),i._20(-1,null,[\"\\n\"]))],function(l,n){l(n,17,0,\"\"),l(n,21,0,\"\"),l(n,25,0,\"\"),l(n,29,0,\"\"),l(n,33,0,\"\")},function(l,n){l(n,4,0,i._13(n,5)._hidden,i._13(n,5)._sbPadding),l(n,13,0,i._13(n,14).statusbarPadding,i._13(n,14)._hasRefresher)})},Lo)),i.Y(1,49152,null,0,Pl,[wo.a],null,null)],null,null)},{},{},[]),xo=i.X({encapsulation:2,styles:[],data:{}}),To=i.V(\"ng-component\",Cl,function(l){return i._22(0,[(l()(),i.Z(0,0,null,null,1,\"ng-component\",[],null,null,null,function(l){return i._22(0,[(l()(),i._20(-1,null,[\"\\n\"])),(l()(),i.Z(1,0,null,null,10,\"ion-header\",[],null,null,null,null,null)),i.Y(2,16384,null,0,jn.a,[Ql.a,i.j,i.z,[2,fn.a]],null,null),(l()(),i._20(-1,null,[\"\\n  \"])),(l()(),i.Z(4,0,null,null,6,\"ion-navbar\",[[\"class\",\"toolbar\"]],[[8,\"hidden\",0],[2,\"statusbar-padding\",null]],null,null,Fn.b,Fn.a)),i.Y(5,49152,null,0,Pn.a,[Yn.a,[2,fn.a],[2,Ln.a],Ql.a,i.j,i.z],null,null),(l()(),i._20(-1,3,[\"\\n    \"])),(l()(),i.Z(7,0,null,3,2,\"ion-title\",[],null,null,null,vn.b,vn.a)),i.Y(8,49152,null,0,yn.a,[Ql.a,i.j,i.z,[2,kn.a],[2,Pn.a]],null,null),(l()(),i._20(-1,0,[\"\\n      Toggles\\n    \"])),(l()(),i._20(-1,3,[\"\\n  \"])),(l()(),i._20(-1,null,[\"\\n\"])),(l()(),i._20(-1,null,[\"\\n\\n\"])),(l()(),i.Z(13,0,null,null,206,\"ion-content\",[],[[2,\"statusbar-padding\",null],[2,\"has-refresher\",null]],null,null,Cn.b,Cn.a)),i.Y(14,4374528,null,0,wn.a,[Ql.a,on.a,_n.a,i.j,i.z,Yn.a,Zn.a,i.u,[2,fn.a],[2,Ln.a]],null,null),(l()(),i._20(-1,1,[\"\\n\\n  \"])),(l()(),i.Z(16,0,null,1,202,\"ion-list\",[],null,null,null,null,null)),i.Y(17,16384,null,0,en.a,[Ql.a,i.j,i.z,on.a,tn.l,_n.a],null,null),(l()(),i._20(-1,null,[\"\\n    \"])),(l()(),i.Z(19,0,null,null,6,\"ion-list-header\",[[\"class\",\"item\"]],null,null,null,$l.b,$l.a)),i.Y(20,1097728,null,3,Kl.a,[Jl.a,Ql.a,i.j,i.z,[2,ln.a]],null,null),i._18(335544320,1,{contentLabel:0}),i._18(603979776,2,{_buttons:1}),i._18(603979776,3,{_icons:1}),i.Y(24,16384,null,0,Qu.a,[Ql.a,i.z,i.j,[8,null]],null,null),(l()(),i._20(-1,2,[\"\\n      Characters\\n    \"])),(l()(),i._20(-1,null,[\"\\n\\n    \"])),(l()(),i.Z(27,0,null,null,14,\"ion-item\",[[\"class\",\"item item-block\"]],null,null,null,$l.b,$l.a)),i.Y(28,1097728,null,3,Kl.a,[Jl.a,Ql.a,i.j,i.z,[2,ln.a]],null,null),i._18(335544320,4,{contentLabel:0}),i._18(603979776,5,{_buttons:1}),i._18(603979776,6,{_icons:1}),i.Y(32,16384,null,0,nn.a,[],null,null),(l()(),i._20(-1,2,[\"\\n      \"])),(l()(),i.Z(34,0,null,1,2,\"ion-label\",[],null,null,null,null,null)),i.Y(35,16384,[[4,4]],0,la.a,[Ql.a,i.j,i.z,[8,null],[8,null],[8,null],[8,null]],null,null),(l()(),i._20(-1,null,[\"Frodo Baggins\"])),(l()(),i._20(-1,2,[\"\\n      \"])),(l()(),i.Z(38,0,null,4,2,\"ion-toggle\",[[\"checked\",\"true\"],[\"value\",\"foo\"]],[[2,\"toggle-disabled\",null],[2,\"toggle-checked\",null],[2,\"toggle-activated\",null]],[[null,\"keyup\"]],function(l,n,u){var a=!0;return\"keyup\"===n&&(a=!1!==i._13(l,40)._keyup(u)&&a),a},Oa.b,Oa.a)),i._17(5120,null,A.j,function(l){return[l]},[Ea.a]),i.Y(40,1228800,null,0,Ea.a,[Jl.a,Ql.a,on.a,i.j,i.z,Ua.a,[2,Kl.a],tn.l,_n.a,i.u],{checked:[0,\"checked\"]},null),(l()(),i._20(-1,2,[\"\\n    \"])),(l()(),i._20(-1,null,[\"\\n\\n    \"])),(l()(),i.Z(43,0,null,null,14,\"ion-item\",[[\"class\",\"item item-block\"]],null,null,null,$l.b,$l.a)),i.Y(44,1097728,null,3,Kl.a,[Jl.a,Ql.a,i.j,i.z,[2,ln.a]],null,null),i._18(335544320,7,{contentLabel:0}),i._18(603979776,8,{_buttons:1}),i._18(603979776,9,{_icons:1}),i.Y(48,16384,null,0,nn.a,[],null,null),(l()(),i._20(-1,2,[\"\\n      \"])),(l()(),i.Z(50,0,null,1,2,\"ion-label\",[],null,null,null,null,null)),i.Y(51,16384,[[7,4]],0,la.a,[Ql.a,i.j,i.z,[8,null],[8,null],[8,null],[8,null]],null,null),(l()(),i._20(-1,null,[\"Sam\"])),(l()(),i._20(-1,2,[\"\\n      \"])),(l()(),i.Z(54,0,null,4,2,\"ion-toggle\",[[\"color\",\"energized\"]],[[2,\"toggle-disabled\",null],[2,\"toggle-checked\",null],[2,\"toggle-activated\",null]],[[null,\"keyup\"]],function(l,n,u){var a=!0;return\"keyup\"===n&&(a=!1!==i._13(l,56)._keyup(u)&&a),a},Oa.b,Oa.a)),i._17(5120,null,A.j,function(l){return[l]},[Ea.a]),i.Y(56,1228800,null,0,Ea.a,[Jl.a,Ql.a,on.a,i.j,i.z,Ua.a,[2,Kl.a],tn.l,_n.a,i.u],{color:[0,\"color\"]},null),(l()(),i._20(-1,2,[\"\\n    \"])),(l()(),i._20(-1,null,[\"\\n\\n    \"])),(l()(),i.Z(59,0,null,null,14,\"ion-item\",[[\"class\",\"item item-block\"]],null,null,null,$l.b,$l.a)),i.Y(60,1097728,null,3,Kl.a,[Jl.a,Ql.a,i.j,i.z,[2,ln.a]],null,null),i._18(335544320,10,{contentLabel:0}),i._18(603979776,11,{_buttons:1}),i._18(603979776,12,{_icons:1}),i.Y(64,16384,null,0,nn.a,[],null,null),(l()(),i._20(-1,2,[\"\\n      \"])),(l()(),i.Z(66,0,null,1,2,\"ion-label\",[],null,null,null,null,null)),i.Y(67,16384,[[10,4]],0,la.a,[Ql.a,i.j,i.z,[8,null],[8,null],[8,null],[8,null]],null,null),(l()(),i._20(-1,null,[\"Éowyn\"])),(l()(),i._20(-1,2,[\"\\n      \"])),(l()(),i.Z(70,0,null,4,2,\"ion-toggle\",[[\"checked\",\"true\"],[\"color\",\"danger\"]],[[2,\"toggle-disabled\",null],[2,\"toggle-checked\",null],[2,\"toggle-activated\",null]],[[null,\"keyup\"]],function(l,n,u){var a=!0;return\"keyup\"===n&&(a=!1!==i._13(l,72)._keyup(u)&&a),a},Oa.b,Oa.a)),i._17(5120,null,A.j,function(l){return[l]},[Ea.a]),i.Y(72,1228800,null,0,Ea.a,[Jl.a,Ql.a,on.a,i.j,i.z,Ua.a,[2,Kl.a],tn.l,_n.a,i.u],{color:[0,\"color\"],checked:[1,\"checked\"]},null),(l()(),i._20(-1,2,[\"\\n    \"])),(l()(),i._20(-1,null,[\"\\n\\n    \"])),(l()(),i.Z(75,0,null,null,14,\"ion-item\",[[\"class\",\"item item-block\"]],null,null,null,$l.b,$l.a)),i.Y(76,1097728,null,3,Kl.a,[Jl.a,Ql.a,i.j,i.z,[2,ln.a]],null,null),i._18(335544320,13,{contentLabel:0}),i._18(603979776,14,{_buttons:1}),i._18(603979776,15,{_icons:1}),i.Y(80,16384,null,0,nn.a,[],null,null),(l()(),i._20(-1,2,[\"\\n      \"])),(l()(),i.Z(82,0,null,1,2,\"ion-label\",[],null,null,null,null,null)),i.Y(83,16384,[[13,4]],0,la.a,[Ql.a,i.j,i.z,[8,null],[8,null],[8,null],[8,null]],null,null),(l()(),i._20(-1,null,[\"Legolas\"])),(l()(),i._20(-1,2,[\"\\n      \"])),(l()(),i.Z(86,0,null,4,2,\"ion-toggle\",[[\"checked\",\"true\"],[\"color\",\"royal\"]],[[2,\"toggle-disabled\",null],[2,\"toggle-checked\",null],[2,\"toggle-activated\",null]],[[null,\"keyup\"]],function(l,n,u){var a=!0;return\"keyup\"===n&&(a=!1!==i._13(l,88)._keyup(u)&&a),a},Oa.b,Oa.a)),i._17(5120,null,A.j,function(l){return[l]},[Ea.a]),i.Y(88,1228800,null,0,Ea.a,[Jl.a,Ql.a,on.a,i.j,i.z,Ua.a,[2,Kl.a],tn.l,_n.a,i.u],{color:[0,\"color\"],checked:[1,\"checked\"]},null),(l()(),i._20(-1,2,[\"\\n    \"])),(l()(),i._20(-1,null,[\"\\n\\n    \"])),(l()(),i.Z(91,0,null,null,14,\"ion-item\",[[\"class\",\"item item-block\"]],null,null,null,$l.b,$l.a)),i.Y(92,1097728,null,3,Kl.a,[Jl.a,Ql.a,i.j,i.z,[2,ln.a]],null,null),i._18(335544320,16,{contentLabel:0}),i._18(603979776,17,{_buttons:1}),i._18(603979776,18,{_icons:1}),i.Y(96,16384,null,0,nn.a,[],null,null),(l()(),i._20(-1,2,[\"\\n      \"])),(l()(),i.Z(98,0,null,1,2,\"ion-label\",[],null,null,null,null,null)),i.Y(99,16384,[[16,4]],0,la.a,[Ql.a,i.j,i.z,[8,null],[8,null],[8,null],[8,null]],null,null),(l()(),i._20(-1,null,[\"Gimli\"])),(l()(),i._20(-1,2,[\"\\n      \"])),(l()(),i.Z(102,0,null,4,2,\"ion-toggle\",[[\"color\",\"danger\"]],[[2,\"toggle-disabled\",null],[2,\"toggle-checked\",null],[2,\"toggle-activated\",null]],[[null,\"keyup\"]],function(l,n,u){var a=!0;return\"keyup\"===n&&(a=!1!==i._13(l,104)._keyup(u)&&a),a},Oa.b,Oa.a)),i._17(5120,null,A.j,function(l){return[l]},[Ea.a]),i.Y(104,1228800,null,0,Ea.a,[Jl.a,Ql.a,on.a,i.j,i.z,Ua.a,[2,Kl.a],tn.l,_n.a,i.u],{color:[0,\"color\"]},null),(l()(),i._20(-1,2,[\"\\n    \"])),(l()(),i._20(-1,null,[\"\\n\\n    \"])),(l()(),i.Z(107,0,null,null,14,\"ion-item\",[[\"class\",\"item item-block\"]],null,null,null,$l.b,$l.a)),i.Y(108,1097728,null,3,Kl.a,[Jl.a,Ql.a,i.j,i.z,[2,ln.a]],null,null),i._18(335544320,19,{contentLabel:0}),i._18(603979776,20,{_buttons:1}),i._18(603979776,21,{_icons:1}),i.Y(112,16384,null,0,nn.a,[],null,null),(l()(),i._20(-1,2,[\"\\n      \"])),(l()(),i.Z(114,0,null,1,2,\"ion-label\",[],null,null,null,null,null)),i.Y(115,16384,[[19,4]],0,la.a,[Ql.a,i.j,i.z,[8,null],[8,null],[8,null],[8,null]],null,null),(l()(),i._20(-1,null,[\"Saruman\"])),(l()(),i._20(-1,2,[\"\\n      \"])),(l()(),i.Z(118,0,null,4,2,\"ion-toggle\",[[\"checked\",\"true\"],[\"color\",\"dark\"]],[[2,\"toggle-disabled\",null],[2,\"toggle-checked\",null],[2,\"toggle-activated\",null]],[[null,\"keyup\"]],function(l,n,u){var a=!0;return\"keyup\"===n&&(a=!1!==i._13(l,120)._keyup(u)&&a),a},Oa.b,Oa.a)),i._17(5120,null,A.j,function(l){return[l]},[Ea.a]),i.Y(120,1228800,null,0,Ea.a,[Jl.a,Ql.a,on.a,i.j,i.z,Ua.a,[2,Kl.a],tn.l,_n.a,i.u],{color:[0,\"color\"],checked:[1,\"checked\"]},null),(l()(),i._20(-1,2,[\"\\n    \"])),(l()(),i._20(-1,null,[\"\\n\\n    \"])),(l()(),i.Z(123,0,null,null,14,\"ion-item\",[[\"class\",\"item item-block\"]],null,null,null,$l.b,$l.a)),i.Y(124,1097728,null,3,Kl.a,[Jl.a,Ql.a,i.j,i.z,[2,ln.a]],null,null),i._18(335544320,22,{contentLabel:0}),i._18(603979776,23,{_buttons:1}),i._18(603979776,24,{_icons:1}),i.Y(128,16384,null,0,nn.a,[],null,null),(l()(),i._20(-1,2,[\"\\n      \"])),(l()(),i.Z(130,0,null,1,2,\"ion-label\",[],null,null,null,null,null)),i.Y(131,16384,[[22,4]],0,la.a,[Ql.a,i.j,i.z,[8,null],[8,null],[8,null],[8,null]],null,null),(l()(),i._20(-1,null,[\"Gandalf\"])),(l()(),i._20(-1,2,[\"\\n      \"])),(l()(),i.Z(134,0,null,4,2,\"ion-toggle\",[[\"checked\",\"true\"],[\"color\",\"energized\"]],[[2,\"toggle-disabled\",null],[2,\"toggle-checked\",null],[2,\"toggle-activated\",null]],[[null,\"keyup\"]],function(l,n,u){var a=!0;return\"keyup\"===n&&(a=!1!==i._13(l,136)._keyup(u)&&a),a},Oa.b,Oa.a)),i._17(5120,null,A.j,function(l){return[l]},[Ea.a]),i.Y(136,1228800,null,0,Ea.a,[Jl.a,Ql.a,on.a,i.j,i.z,Ua.a,[2,Kl.a],tn.l,_n.a,i.u],{color:[0,\"color\"],checked:[1,\"checked\"]},null),(l()(),i._20(-1,2,[\"\\n    \"])),(l()(),i._20(-1,null,[\"\\n\\n    \"])),(l()(),i.Z(139,0,null,null,14,\"ion-item\",[[\"class\",\"item item-block\"]],null,null,null,$l.b,$l.a)),i.Y(140,1097728,null,3,Kl.a,[Jl.a,Ql.a,i.j,i.z,[2,ln.a]],null,null),i._18(335544320,25,{contentLabel:0}),i._18(603979776,26,{_buttons:1}),i._18(603979776,27,{_icons:1}),i.Y(144,16384,null,0,nn.a,[],null,null),(l()(),i._20(-1,2,[\"\\n      \"])),(l()(),i.Z(146,0,null,1,2,\"ion-label\",[],null,null,null,null,null)),i.Y(147,16384,[[25,4]],0,la.a,[Ql.a,i.j,i.z,[8,null],[8,null],[8,null],[8,null]],null,null),(l()(),i._20(-1,null,[\"Arwen\"])),(l()(),i._20(-1,2,[\"\\n      \"])),(l()(),i.Z(150,0,null,4,2,\"ion-toggle\",[[\"color\",\"royal\"]],[[2,\"toggle-disabled\",null],[2,\"toggle-checked\",null],[2,\"toggle-activated\",null]],[[null,\"keyup\"]],function(l,n,u){var a=!0;return\"keyup\"===n&&(a=!1!==i._13(l,152)._keyup(u)&&a),a},Oa.b,Oa.a)),i._17(5120,null,A.j,function(l){return[l]},[Ea.a]),i.Y(152,1228800,null,0,Ea.a,[Jl.a,Ql.a,on.a,i.j,i.z,Ua.a,[2,Kl.a],tn.l,_n.a,i.u],{color:[0,\"color\"]},null),(l()(),i._20(-1,2,[\"\\n    \"])),(l()(),i._20(-1,null,[\"\\n\\n    \"])),(l()(),i.Z(155,0,null,null,14,\"ion-item\",[[\"class\",\"item item-block\"]],null,null,null,$l.b,$l.a)),i.Y(156,1097728,null,3,Kl.a,[Jl.a,Ql.a,i.j,i.z,[2,ln.a]],null,null),i._18(335544320,28,{contentLabel:0}),i._18(603979776,29,{_buttons:1}),i._18(603979776,30,{_icons:1}),i.Y(160,16384,null,0,nn.a,[],null,null),(l()(),i._20(-1,2,[\"\\n      \"])),(l()(),i.Z(162,0,null,1,2,\"ion-label\",[],null,null,null,null,null)),i.Y(163,16384,[[28,4]],0,la.a,[Ql.a,i.j,i.z,[8,null],[8,null],[8,null],[8,null]],null,null),(l()(),i._20(-1,null,[\"Treebeard\"])),(l()(),i._20(-1,2,[\"\\n      \"])),(l()(),i.Z(166,0,null,4,2,\"ion-toggle\",[[\"checked\",\"true\"],[\"color\",\"secondary\"]],[[2,\"toggle-disabled\",null],[2,\"toggle-checked\",null],[2,\"toggle-activated\",null]],[[null,\"keyup\"]],function(l,n,u){var a=!0;return\"keyup\"===n&&(a=!1!==i._13(l,168)._keyup(u)&&a),a},Oa.b,Oa.a)),i._17(5120,null,A.j,function(l){return[l]},[Ea.a]),i.Y(168,1228800,null,0,Ea.a,[Jl.a,Ql.a,on.a,i.j,i.z,Ua.a,[2,Kl.a],tn.l,_n.a,i.u],{color:[0,\"color\"],checked:[1,\"checked\"]},null),(l()(),i._20(-1,2,[\"\\n    \"])),(l()(),i._20(-1,null,[\"\\n\\n    \"])),(l()(),i.Z(171,0,null,null,14,\"ion-item\",[[\"class\",\"item item-block\"]],null,null,null,$l.b,$l.a)),i.Y(172,1097728,null,3,Kl.a,[Jl.a,Ql.a,i.j,i.z,[2,ln.a]],null,null),i._18(335544320,31,{contentLabel:0}),i._18(603979776,32,{_buttons:1}),i._18(603979776,33,{_icons:1}),i.Y(176,16384,null,0,nn.a,[],null,null),(l()(),i._20(-1,2,[\"\\n      \"])),(l()(),i.Z(178,0,null,1,2,\"ion-label\",[],null,null,null,null,null)),i.Y(179,16384,[[31,4]],0,la.a,[Ql.a,i.j,i.z,[8,null],[8,null],[8,null],[8,null]],null,null),(l()(),i._20(-1,null,[\"Boromir\"])),(l()(),i._20(-1,2,[\"\\n      \"])),(l()(),i.Z(182,0,null,4,2,\"ion-toggle\",[[\"color\",\"royal\"]],[[2,\"toggle-disabled\",null],[2,\"toggle-checked\",null],[2,\"toggle-activated\",null]],[[null,\"keyup\"]],function(l,n,u){var a=!0;return\"keyup\"===n&&(a=!1!==i._13(l,184)._keyup(u)&&a),a},Oa.b,Oa.a)),i._17(5120,null,A.j,function(l){return[l]},[Ea.a]),i.Y(184,1228800,null,0,Ea.a,[Jl.a,Ql.a,on.a,i.j,i.z,Ua.a,[2,Kl.a],tn.l,_n.a,i.u],{color:[0,\"color\"]},null),(l()(),i._20(-1,2,[\"\\n    \"])),(l()(),i._20(-1,null,[\"\\n\\n    \"])),(l()(),i.Z(187,0,null,null,14,\"ion-item\",[[\"class\",\"item item-block\"]],null,null,null,$l.b,$l.a)),i.Y(188,1097728,null,3,Kl.a,[Jl.a,Ql.a,i.j,i.z,[2,ln.a]],null,null),i._18(335544320,34,{contentLabel:0}),i._18(603979776,35,{_buttons:1}),i._18(603979776,36,{_icons:1}),i.Y(192,16384,null,0,nn.a,[],null,null),(l()(),i._20(-1,2,[\"\\n      \"])),(l()(),i.Z(194,0,null,1,2,\"ion-label\",[],null,null,null,null,null)),i.Y(195,16384,[[34,4]],0,la.a,[Ql.a,i.j,i.z,[8,null],[8,null],[8,null],[8,null]],null,null),(l()(),i._20(-1,null,[\"Gollum\"])),(l()(),i._20(-1,2,[\"\\n      \"])),(l()(),i.Z(198,0,null,4,2,\"ion-toggle\",[[\"checked\",\"true\"],[\"color\",\"dark\"]],[[2,\"toggle-disabled\",null],[2,\"toggle-checked\",null],[2,\"toggle-activated\",null]],[[null,\"keyup\"]],function(l,n,u){var a=!0;return\"keyup\"===n&&(a=!1!==i._13(l,200)._keyup(u)&&a),a},Oa.b,Oa.a)),i._17(5120,null,A.j,function(l){return[l]},[Ea.a]),i.Y(200,1228800,null,0,Ea.a,[Jl.a,Ql.a,on.a,i.j,i.z,Ua.a,[2,Kl.a],tn.l,_n.a,i.u],{color:[0,\"color\"],checked:[1,\"checked\"]},null),(l()(),i._20(-1,2,[\"\\n    \"])),(l()(),i._20(-1,null,[\"\\n\\n    \"])),(l()(),i.Z(203,0,null,null,14,\"ion-item\",[[\"class\",\"item item-block\"]],null,null,null,$l.b,$l.a)),i.Y(204,1097728,null,3,Kl.a,[Jl.a,Ql.a,i.j,i.z,[2,ln.a]],null,null),i._18(335544320,37,{contentLabel:0}),i._18(603979776,38,{_buttons:1}),i._18(603979776,39,{_icons:1}),i.Y(208,16384,null,0,nn.a,[],null,null),(l()(),i._20(-1,2,[\"\\n      \"])),(l()(),i.Z(210,0,null,1,2,\"ion-label\",[],null,null,null,null,null)),i.Y(211,16384,[[37,4]],0,la.a,[Ql.a,i.j,i.z,[8,null],[8,null],[8,null],[8,null]],null,null),(l()(),i._20(-1,null,[\"Galadriel\"])),(l()(),i._20(-1,2,[\"\\n      \"])),(l()(),i.Z(214,0,null,4,2,\"ion-toggle\",[[\"color\",\"energized\"]],[[2,\"toggle-disabled\",null],[2,\"toggle-checked\",null],[2,\"toggle-activated\",null]],[[null,\"keyup\"]],function(l,n,u){var a=!0;return\"keyup\"===n&&(a=!1!==i._13(l,216)._keyup(u)&&a),a},Oa.b,Oa.a)),i._17(5120,null,A.j,function(l){return[l]},[Ea.a]),i.Y(216,1228800,null,0,Ea.a,[Jl.a,Ql.a,on.a,i.j,i.z,Ua.a,[2,Kl.a],tn.l,_n.a,i.u],{color:[0,\"color\"]},null),(l()(),i._20(-1,2,[\"\\n    \"])),(l()(),i._20(-1,null,[\"\\n\\n\\n  \"])),(l()(),i._20(-1,1,[\"\\n\\n\"])),(l()(),i._20(-1,null,[\"\\n\"]))],function(l,n){l(n,40,0,\"true\"),l(n,56,0,\"energized\"),l(n,72,0,\"danger\",\"true\"),l(n,88,0,\"royal\",\"true\"),l(n,104,0,\"danger\"),l(n,120,0,\"dark\",\"true\"),l(n,136,0,\"energized\",\"true\"),l(n,152,0,\"royal\"),l(n,168,0,\"secondary\",\"true\"),l(n,184,0,\"royal\"),l(n,200,0,\"dark\",\"true\"),l(n,216,0,\"energized\")},function(l,n){l(n,4,0,i._13(n,5)._hidden,i._13(n,5)._sbPadding),l(n,13,0,i._13(n,14).statusbarPadding,i._13(n,14)._hasRefresher),l(n,38,0,i._13(n,40)._disabled,i._13(n,40)._value,i._13(n,40)._activated),l(n,54,0,i._13(n,56)._disabled,i._13(n,56)._value,i._13(n,56)._activated),l(n,70,0,i._13(n,72)._disabled,i._13(n,72)._value,i._13(n,72)._activated),l(n,86,0,i._13(n,88)._disabled,i._13(n,88)._value,i._13(n,88)._activated),l(n,102,0,i._13(n,104)._disabled,i._13(n,104)._value,i._13(n,104)._activated),l(n,118,0,i._13(n,120)._disabled,i._13(n,120)._value,i._13(n,120)._activated),l(n,134,0,i._13(n,136)._disabled,i._13(n,136)._value,i._13(n,136)._activated),l(n,150,0,i._13(n,152)._disabled,i._13(n,152)._value,i._13(n,152)._activated),l(n,166,0,i._13(n,168)._disabled,i._13(n,168)._value,i._13(n,168)._activated),l(n,182,0,i._13(n,184)._disabled,i._13(n,184)._value,i._13(n,184)._activated),l(n,198,0,i._13(n,200)._disabled,i._13(n,200)._value,i._13(n,200)._activated),l(n,214,0,i._13(n,216)._disabled,i._13(n,216)._value,i._13(n,216)._activated)})},xo)),i.Y(1,49152,null,0,Cl,[],null,null)],null,null)},{},{},[]),So=u(83),Mo=i.X({encapsulation:2,styles:[],data:{}}),Bo=i.V(\"ng-component\",wl,function(l){return i._22(0,[(l()(),i.Z(0,0,null,null,1,\"ng-component\",[],null,null,null,function(l){return i._22(0,[(l()(),i._20(-1,null,[\"\\n\"])),(l()(),i.Z(1,0,null,null,10,\"ion-header\",[],null,null,null,null,null)),i.Y(2,16384,null,0,jn.a,[Ql.a,i.j,i.z,[2,fn.a]],null,null),(l()(),i._20(-1,null,[\"\\n  \"])),(l()(),i.Z(4,0,null,null,6,\"ion-navbar\",[[\"class\",\"toolbar\"]],[[8,\"hidden\",0],[2,\"statusbar-padding\",null]],null,null,Fn.b,Fn.a)),i.Y(5,49152,null,0,Pn.a,[Yn.a,[2,fn.a],[2,Ln.a],Ql.a,i.j,i.z],null,null),(l()(),i._20(-1,3,[\"\\n    \"])),(l()(),i.Z(7,0,null,3,2,\"ion-title\",[],null,null,null,vn.b,vn.a)),i.Y(8,49152,null,0,yn.a,[Ql.a,i.j,i.z,[2,kn.a],[2,Pn.a]],null,null),(l()(),i._20(-1,0,[\"Toolbar\"])),(l()(),i._20(-1,3,[\"\\n  \"])),(l()(),i._20(-1,null,[\"\\n\"])),(l()(),i._20(-1,null,[\"\\n\\n\"])),(l()(),i.Z(13,0,null,null,1,\"ion-content\",[],[[2,\"statusbar-padding\",null],[2,\"has-refresher\",null]],null,null,Cn.b,Cn.a)),i.Y(14,4374528,null,0,wn.a,[Ql.a,on.a,_n.a,i.j,i.z,Yn.a,Zn.a,i.u,[2,fn.a],[2,Ln.a]],null,null),(l()(),i._20(-1,null,[\"\\n\\n\"])),(l()(),i.Z(16,0,null,null,10,\"ion-footer\",[],null,null,null,null,null)),i.Y(17,16384,null,0,So.a,[Ql.a,i.j,i.z,[2,fn.a]],null,null),(l()(),i._20(-1,null,[\"\\n  \"])),(l()(),i.Z(19,0,null,null,6,\"ion-toolbar\",[[\"class\",\"toolbar\"]],[[2,\"statusbar-padding\",null]],null,null,zn.b,zn.a)),i.Y(20,49152,null,0,kn.a,[Ql.a,i.j,i.z],null,null),(l()(),i._20(-1,3,[\"\\n    \"])),(l()(),i.Z(22,0,null,3,2,\"ion-title\",[],null,null,null,vn.b,vn.a)),i.Y(23,49152,null,0,yn.a,[Ql.a,i.j,i.z,[2,kn.a],[2,Pn.a]],null,null),(l()(),i._20(-1,0,[\"Footer Toolbar\"])),(l()(),i._20(-1,3,[\"\\n  \"])),(l()(),i._20(-1,null,[\"\\n\"])),(l()(),i._20(-1,null,[\"\\n\"]))],null,function(l,n){l(n,4,0,i._13(n,5)._hidden,i._13(n,5)._sbPadding),l(n,13,0,i._13(n,14).statusbarPadding,i._13(n,14)._hasRefresher),l(n,19,0,i._13(n,20)._sbPadding)})},Mo)),i.Y(1,49152,null,0,wl,[],null,null)],null,null)},{},{},[]),Fo=u(115),Ao=i.X({encapsulation:2,styles:[],data:{}}),Ro=i.V(\"ng-component\",Ll,function(l){return i._22(0,[(l()(),i.Z(0,0,null,null,1,\"ng-component\",[],null,null,null,function(l){return i._22(0,[(l()(),i._20(-1,null,[\"\\n\"])),(l()(),i.Z(1,0,null,null,52,\"ion-header\",[],null,null,null,null,null)),i.Y(2,16384,null,0,jn.a,[Ql.a,i.j,i.z,[2,fn.a]],null,null),(l()(),i._20(-1,null,[\"\\n  \"])),(l()(),i.Z(4,0,null,null,48,\"ion-navbar\",[[\"class\",\"toolbar\"]],[[8,\"hidden\",0],[2,\"statusbar-padding\",null]],null,null,Fn.b,Fn.a)),i.Y(5,49152,null,0,Pn.a,[Yn.a,[2,fn.a],[2,Ln.a],Ql.a,i.j,i.z],{color:[0,\"color\"]},null),(l()(),i._20(-1,3,[\"\\n    \"])),(l()(),i.Z(7,0,null,1,19,\"ion-buttons\",[[\"start\",\"\"]],null,null,null,null,null)),i.Y(8,16384,null,1,ru.a,[Ql.a,i.j,i.z,[2,kn.a],[2,Pn.a]],null,null),i._18(603979776,1,{_buttons:1}),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i.Z(11,0,null,null,6,\"button\",[[\"color\",\"royal\"],[\"icon-only\",\"\"],[\"ion-button\",\"\"],[\"showWhen\",\"ios,windows\"]],[[2,\"hidden-show-when\",null]],null,null,An.b,An.a)),i.Y(12,1097728,[[1,4]],0,Rn.a,[[8,\"\"],Ql.a,i.j,i.z],{color:[0,\"color\"]},null),i.Y(13,147456,null,0,fe.a,[[8,\"ios,windows\"],on.a,i.u],null,null),(l()(),i._20(-1,0,[\"\\n        \"])),(l()(),i.Z(15,0,null,0,1,\"ion-icon\",[[\"name\",\"search\"],[\"role\",\"img\"]],[[2,\"hide\",null]],null,null,null,null)),i.Y(16,147456,null,0,mn.a,[Ql.a,i.j,i.z],{name:[0,\"name\"]},null),(l()(),i._20(-1,0,[\"\\n      \"])),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i.Z(19,0,null,null,6,\"button\",[[\"color\",\"light\"],[\"hideWhen\",\"ios,windows\"],[\"icon-only\",\"\"],[\"ion-button\",\"\"]],[[2,\"hidden-hide-when\",null]],null,null,An.b,An.a)),i.Y(20,1097728,[[1,4]],0,Rn.a,[[8,\"\"],Ql.a,i.j,i.z],{color:[0,\"color\"]},null),i.Y(21,147456,null,0,Fo.a,[[8,\"ios,windows\"],on.a,i.u],null,null),(l()(),i._20(-1,0,[\"\\n        \"])),(l()(),i.Z(23,0,null,0,1,\"ion-icon\",[[\"name\",\"search\"],[\"role\",\"img\"]],[[2,\"hide\",null]],null,null,null,null)),i.Y(24,147456,null,0,mn.a,[Ql.a,i.j,i.z],{name:[0,\"name\"]},null),(l()(),i._20(-1,0,[\"\\n      \"])),(l()(),i._20(-1,null,[\"\\n    \"])),(l()(),i._20(-1,3,[\"\\n    \"])),(l()(),i.Z(28,0,null,3,2,\"ion-title\",[],null,null,null,vn.b,vn.a)),i.Y(29,49152,null,0,yn.a,[Ql.a,i.j,i.z,[2,kn.a],[2,Pn.a]],null,null),(l()(),i._20(-1,0,[\"Send To...\"])),(l()(),i._20(-1,3,[\"\\n    \"])),(l()(),i.Z(32,0,null,2,19,\"ion-buttons\",[[\"end\",\"\"]],null,null,null,null,null)),i.Y(33,16384,null,1,ru.a,[Ql.a,i.j,i.z,[2,kn.a],[2,Pn.a]],null,null),i._18(603979776,2,{_buttons:1}),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i.Z(36,0,null,null,6,\"button\",[[\"color\",\"royal\"],[\"icon-only\",\"\"],[\"ion-button\",\"\"],[\"showWhen\",\"ios,windows\"]],[[2,\"hidden-show-when\",null]],null,null,An.b,An.a)),i.Y(37,1097728,[[2,4]],0,Rn.a,[[8,\"\"],Ql.a,i.j,i.z],{color:[0,\"color\"]},null),i.Y(38,147456,null,0,fe.a,[[8,\"ios,windows\"],on.a,i.u],null,null),(l()(),i._20(-1,0,[\"\\n        \"])),(l()(),i.Z(40,0,null,0,1,\"ion-icon\",[[\"name\",\"person-add\"],[\"role\",\"img\"]],[[2,\"hide\",null]],null,null,null,null)),i.Y(41,147456,null,0,mn.a,[Ql.a,i.j,i.z],{name:[0,\"name\"]},null),(l()(),i._20(-1,0,[\"\\n      \"])),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i.Z(44,0,null,null,6,\"button\",[[\"color\",\"light\"],[\"hideWhen\",\"ios,windows\"],[\"icon-only\",\"\"],[\"ion-button\",\"\"]],[[2,\"hidden-hide-when\",null]],null,null,An.b,An.a)),i.Y(45,1097728,[[2,4]],0,Rn.a,[[8,\"\"],Ql.a,i.j,i.z],{color:[0,\"color\"]},null),i.Y(46,147456,null,0,Fo.a,[[8,\"ios,windows\"],on.a,i.u],null,null),(l()(),i._20(-1,0,[\"\\n        \"])),(l()(),i.Z(48,0,null,0,1,\"ion-icon\",[[\"name\",\"person-add\"],[\"role\",\"img\"]],[[2,\"hide\",null]],null,null,null,null)),i.Y(49,147456,null,0,mn.a,[Ql.a,i.j,i.z],{name:[0,\"name\"]},null),(l()(),i._20(-1,0,[\"\\n      \"])),(l()(),i._20(-1,null,[\"\\n    \"])),(l()(),i._20(-1,3,[\"\\n  \"])),(l()(),i._20(-1,null,[\"\\n\"])),(l()(),i._20(-1,null,[\"\\n\\n\"])),(l()(),i.Z(55,0,null,null,2,\"ion-content\",[],[[2,\"statusbar-padding\",null],[2,\"has-refresher\",null]],null,null,Cn.b,Cn.a)),i.Y(56,4374528,null,0,wn.a,[Ql.a,on.a,_n.a,i.j,i.z,Yn.a,Zn.a,i.u,[2,fn.a],[2,Ln.a]],null,null),(l()(),i._20(-1,1,[\"\\n\\n\"])),(l()(),i._20(-1,null,[\"\\n\\n\"])),(l()(),i.Z(59,0,null,null,31,\"ion-footer\",[],null,null,null,null,null)),i.Y(60,16384,null,0,So.a,[Ql.a,i.j,i.z,[2,fn.a]],null,null),(l()(),i._20(-1,null,[\"\\n  \"])),(l()(),i.Z(62,0,null,null,27,\"ion-toolbar\",[[\"class\",\"toolbar-buttons-page toolbar\"]],[[2,\"statusbar-padding\",null]],null,null,zn.b,zn.a)),i.Y(63,49152,null,0,kn.a,[Ql.a,i.j,i.z],{color:[0,\"color\"]},null),(l()(),i._20(-1,3,[\"\\n    \"])),(l()(),i.Z(65,0,null,3,2,\"ion-title\",[[\"class\",\"footer-title\"]],null,null,null,vn.b,vn.a)),i.Y(66,49152,null,0,yn.a,[Ql.a,i.j,i.z,[2,kn.a],[2,Pn.a]],null,null),(l()(),i._20(-1,0,[\"Ash, Misty, Brock\"])),(l()(),i._20(-1,3,[\"\\n    \"])),(l()(),i.Z(69,0,null,2,19,\"ion-buttons\",[[\"end\",\"\"]],null,null,null,null,null)),i.Y(70,16384,null,1,ru.a,[Ql.a,i.j,i.z,[2,kn.a],[2,Pn.a]],null,null),i._18(603979776,3,{_buttons:1}),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i.Z(73,0,null,null,6,\"button\",[[\"color\",\"royal\"],[\"icon-end\",\"\"],[\"ion-button\",\"\"],[\"large\",\"\"],[\"showWhen\",\"ios\"]],[[2,\"hidden-show-when\",null]],null,null,An.b,An.a)),i.Y(74,1097728,[[3,4]],0,Rn.a,[[8,\"\"],Ql.a,i.j,i.z],{color:[0,\"color\"],large:[1,\"large\"]},null),i.Y(75,147456,null,0,fe.a,[[8,\"ios\"],on.a,i.u],null,null),(l()(),i._20(-1,0,[\"\\n        Send\\n        \"])),(l()(),i.Z(77,0,null,0,1,\"ion-icon\",[[\"name\",\"send\"],[\"role\",\"img\"]],[[2,\"hide\",null]],null,null,null,null)),i.Y(78,147456,null,0,mn.a,[Ql.a,i.j,i.z],{name:[0,\"name\"]},null),(l()(),i._20(-1,0,[\"\\n      \"])),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i.Z(81,0,null,null,6,\"button\",[[\"color\",\"light\"],[\"hideWhen\",\"ios\"],[\"icon-end\",\"\"],[\"ion-button\",\"\"],[\"large\",\"\"]],[[2,\"hidden-hide-when\",null]],null,null,An.b,An.a)),i.Y(82,1097728,[[3,4]],0,Rn.a,[[8,\"\"],Ql.a,i.j,i.z],{color:[0,\"color\"],large:[1,\"large\"]},null),i.Y(83,147456,null,0,Fo.a,[[8,\"ios\"],on.a,i.u],null,null),(l()(),i._20(-1,0,[\"\\n        Send\\n        \"])),(l()(),i.Z(85,0,null,0,1,\"ion-icon\",[[\"name\",\"send\"],[\"role\",\"img\"]],[[2,\"hide\",null]],null,null,null,null)),i.Y(86,147456,null,0,mn.a,[Ql.a,i.j,i.z],{name:[0,\"name\"]},null),(l()(),i._20(-1,0,[\"\\n      \"])),(l()(),i._20(-1,null,[\"\\n    \"])),(l()(),i._20(-1,3,[\"\\n  \"])),(l()(),i._20(-1,null,[\"\\n\"])),(l()(),i._20(-1,null,[\"\\n\"]))],function(l,n){var u=n.component;l(n,5,0,u.isAndroid?\"royal\":\"light\"),l(n,12,0,\"royal\"),l(n,16,0,\"search\"),l(n,20,0,\"light\"),l(n,24,0,\"search\"),l(n,37,0,\"royal\"),l(n,41,0,\"person-add\"),l(n,45,0,\"light\"),l(n,49,0,\"person-add\"),l(n,63,0,u.isAndroid?\"royal\":\"light\"),l(n,74,0,\"royal\",\"\"),l(n,78,0,\"send\"),l(n,82,0,\"light\",\"\"),l(n,86,0,\"send\")},function(l,n){l(n,4,0,i._13(n,5)._hidden,i._13(n,5)._sbPadding),l(n,11,0,!i._13(n,13).isMatch),l(n,15,0,i._13(n,16)._hidden),l(n,19,0,i._13(n,21).isMatch),l(n,23,0,i._13(n,24)._hidden),l(n,36,0,!i._13(n,38).isMatch),l(n,40,0,i._13(n,41)._hidden),l(n,44,0,i._13(n,46).isMatch),l(n,48,0,i._13(n,49)._hidden),l(n,55,0,i._13(n,56).statusbarPadding,i._13(n,56)._hasRefresher),l(n,62,0,i._13(n,63)._sbPadding),l(n,73,0,!i._13(n,75).isMatch),l(n,77,0,i._13(n,78)._hidden),l(n,81,0,i._13(n,83).isMatch),l(n,85,0,i._13(n,86)._hidden)})},Ao)),i.Y(1,49152,null,0,Ll,[on.a],null,null)],null,null)},{},{},[]),Vo=i.X({encapsulation:2,styles:[],data:{}}),Do=i.V(\"ng-component\",Il,function(l){return i._22(0,[(l()(),i.Z(0,0,null,null,1,\"ng-component\",[],null,null,null,function(l){return i._22(0,[(l()(),i._20(-1,null,[\"\\n    \"])),(l()(),i.Z(1,0,null,null,10,\"ion-header\",[],null,null,null,null,null)),i.Y(2,16384,null,0,jn.a,[Ql.a,i.j,i.z,[2,fn.a]],null,null),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i.Z(4,0,null,null,6,\"ion-navbar\",[[\"class\",\"toolbar\"],[\"color\",\"light\"]],[[8,\"hidden\",0],[2,\"statusbar-padding\",null]],null,null,Fn.b,Fn.a)),i.Y(5,49152,null,0,Pn.a,[Yn.a,[2,fn.a],[2,Ln.a],Ql.a,i.j,i.z],{color:[0,\"color\"]},null),(l()(),i._20(-1,3,[\"\\n        \"])),(l()(),i.Z(7,0,null,3,2,\"ion-title\",[],null,null,null,vn.b,vn.a)),i.Y(8,49152,null,0,yn.a,[Ql.a,i.j,i.z,[2,kn.a],[2,Pn.a]],null,null),(l()(),i._20(-1,0,[\"Toolbar: Light\"])),(l()(),i._20(-1,3,[\"\\n      \"])),(l()(),i._20(-1,null,[\"\\n    \"])),(l()(),i._20(-1,null,[\"\\n\\n    \"])),(l()(),i.Z(13,0,null,null,6,\"ion-content\",[[\"padding\",\"\"]],[[2,\"statusbar-padding\",null],[2,\"has-refresher\",null]],null,null,Cn.b,Cn.a)),i.Y(14,4374528,null,0,wn.a,[Ql.a,on.a,_n.a,i.j,i.z,Yn.a,Zn.a,i.u,[2,fn.a],[2,Ln.a]],null,null),(l()(),i._20(-1,1,[\"\\n      \"])),(l()(),i.Z(16,0,null,1,2,\"button\",[[\"block\",\"\"],[\"ion-button\",\"\"]],null,[[null,\"click\"]],function(l,n,u){var a=!0;return\"click\"===n&&(a=!1!==l.component.goBack()&&a),a},An.b,An.a)),i.Y(17,1097728,null,0,Rn.a,[[8,\"\"],Ql.a,i.j,i.z],{block:[0,\"block\"]},null),(l()(),i._20(-1,0,[\"Go Back to Beginning\"])),(l()(),i._20(-1,1,[\"\\n    \"])),(l()(),i._20(-1,null,[\"\\n  \"]))],function(l,n){l(n,5,0,\"light\"),l(n,17,0,\"\")},function(l,n){l(n,4,0,i._13(n,5)._hidden,i._13(n,5)._sbPadding),l(n,13,0,i._13(n,14).statusbarPadding,i._13(n,14)._hasRefresher)})},Vo)),i.Y(1,49152,null,0,Il,[Ln.a],null,null)],null,null)},{},{},[]),No=i.X({encapsulation:2,styles:[],data:{}}),Xo=i.V(\"ng-component\",xl,function(l){return i._22(0,[(l()(),i.Z(0,0,null,null,1,\"ng-component\",[],null,null,null,function(l){return i._22(0,[(l()(),i._20(-1,null,[\"\\n    \"])),(l()(),i.Z(1,0,null,null,10,\"ion-header\",[],null,null,null,null,null)),i.Y(2,16384,null,0,jn.a,[Ql.a,i.j,i.z,[2,fn.a]],null,null),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i.Z(4,0,null,null,6,\"ion-navbar\",[[\"class\",\"toolbar\"],[\"color\",\"danger\"]],[[8,\"hidden\",0],[2,\"statusbar-padding\",null]],null,null,Fn.b,Fn.a)),i.Y(5,49152,null,0,Pn.a,[Yn.a,[2,fn.a],[2,Ln.a],Ql.a,i.j,i.z],{color:[0,\"color\"]},null),(l()(),i._20(-1,3,[\"\\n        \"])),(l()(),i.Z(7,0,null,3,2,\"ion-title\",[],null,null,null,vn.b,vn.a)),i.Y(8,49152,null,0,yn.a,[Ql.a,i.j,i.z,[2,kn.a],[2,Pn.a]],null,null),(l()(),i._20(-1,0,[\"Toolbar: Danger\"])),(l()(),i._20(-1,3,[\"\\n      \"])),(l()(),i._20(-1,null,[\"\\n    \"])),(l()(),i._20(-1,null,[\"\\n\\n    \"])),(l()(),i.Z(13,0,null,null,6,\"ion-content\",[[\"padding\",\"\"]],[[2,\"statusbar-padding\",null],[2,\"has-refresher\",null]],null,null,Cn.b,Cn.a)),i.Y(14,4374528,null,0,wn.a,[Ql.a,on.a,_n.a,i.j,i.z,Yn.a,Zn.a,i.u,[2,fn.a],[2,Ln.a]],null,null),(l()(),i._20(-1,1,[\"\\n      \"])),(l()(),i.Z(16,0,null,1,2,\"button\",[[\"block\",\"\"],[\"ion-button\",\"\"]],null,[[null,\"click\"]],function(l,n,u){var a=!0;return\"click\"===n&&(a=!1!==l.component.pushPage()&&a),a},An.b,An.a)),i.Y(17,1097728,null,0,Rn.a,[[8,\"\"],Ql.a,i.j,i.z],{block:[0,\"block\"]},null),(l()(),i._20(-1,0,[\"Next Page\"])),(l()(),i._20(-1,1,[\"\\n    \"])),(l()(),i._20(-1,null,[\"\\n  \"]))],function(l,n){l(n,5,0,\"danger\"),l(n,17,0,\"\")},function(l,n){l(n,4,0,i._13(n,5)._hidden,i._13(n,5)._sbPadding),l(n,13,0,i._13(n,14).statusbarPadding,i._13(n,14)._hasRefresher)})},No)),i.Y(1,49152,null,0,xl,[Ln.a],null,null)],null,null)},{},{},[]),Oo=i.X({encapsulation:2,styles:[],data:{}}),Eo=i.V(\"ng-component\",Tl,function(l){return i._22(0,[(l()(),i.Z(0,0,null,null,1,\"ng-component\",[],null,null,null,function(l){return i._22(0,[(l()(),i._20(-1,null,[\"\\n    \"])),(l()(),i.Z(1,0,null,null,10,\"ion-header\",[],null,null,null,null,null)),i.Y(2,16384,null,0,jn.a,[Ql.a,i.j,i.z,[2,fn.a]],null,null),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i.Z(4,0,null,null,6,\"ion-navbar\",[[\"class\",\"toolbar\"],[\"color\",\"secondary\"]],[[8,\"hidden\",0],[2,\"statusbar-padding\",null]],null,null,Fn.b,Fn.a)),i.Y(5,49152,null,0,Pn.a,[Yn.a,[2,fn.a],[2,Ln.a],Ql.a,i.j,i.z],{color:[0,\"color\"]},null),(l()(),i._20(-1,3,[\"\\n        \"])),(l()(),i.Z(7,0,null,3,2,\"ion-title\",[],null,null,null,vn.b,vn.a)),i.Y(8,49152,null,0,yn.a,[Ql.a,i.j,i.z,[2,kn.a],[2,Pn.a]],null,null),(l()(),i._20(-1,0,[\"Toolbar: Secondary\"])),(l()(),i._20(-1,3,[\"\\n      \"])),(l()(),i._20(-1,null,[\"\\n    \"])),(l()(),i._20(-1,null,[\"\\n\\n    \"])),(l()(),i.Z(13,0,null,null,6,\"ion-content\",[[\"padding\",\"\"]],[[2,\"statusbar-padding\",null],[2,\"has-refresher\",null]],null,null,Cn.b,Cn.a)),i.Y(14,4374528,null,0,wn.a,[Ql.a,on.a,_n.a,i.j,i.z,Yn.a,Zn.a,i.u,[2,fn.a],[2,Ln.a]],null,null),(l()(),i._20(-1,1,[\"\\n      \"])),(l()(),i.Z(16,0,null,1,2,\"button\",[[\"block\",\"\"],[\"ion-button\",\"\"]],null,[[null,\"click\"]],function(l,n,u){var a=!0;return\"click\"===n&&(a=!1!==l.component.pushPage()&&a),a},An.b,An.a)),i.Y(17,1097728,null,0,Rn.a,[[8,\"\"],Ql.a,i.j,i.z],{block:[0,\"block\"]},null),(l()(),i._20(-1,0,[\"Next Page\"])),(l()(),i._20(-1,1,[\"\\n    \"])),(l()(),i._20(-1,null,[\"\\n  \"]))],function(l,n){l(n,5,0,\"secondary\"),l(n,17,0,\"\")},function(l,n){l(n,4,0,i._13(n,5)._hidden,i._13(n,5)._sbPadding),l(n,13,0,i._13(n,14).statusbarPadding,i._13(n,14)._hasRefresher)})},Oo)),i.Y(1,49152,null,0,Tl,[Ln.a],null,null)],null,null)},{},{},[]),Uo=i.X({encapsulation:2,styles:[],data:{}}),Wo=i.V(\"ng-component\",Sl,function(l){return i._22(0,[(l()(),i.Z(0,0,null,null,1,\"ng-component\",[],null,null,null,function(l){return i._22(0,[(l()(),i._20(-1,null,[\"\\n    \"])),(l()(),i.Z(1,0,null,null,10,\"ion-header\",[],null,null,null,null,null)),i.Y(2,16384,null,0,jn.a,[Ql.a,i.j,i.z,[2,fn.a]],null,null),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i.Z(4,0,null,null,6,\"ion-navbar\",[[\"class\",\"toolbar\"],[\"color\",\"primary\"]],[[8,\"hidden\",0],[2,\"statusbar-padding\",null]],null,null,Fn.b,Fn.a)),i.Y(5,49152,null,0,Pn.a,[Yn.a,[2,fn.a],[2,Ln.a],Ql.a,i.j,i.z],{color:[0,\"color\"]},null),(l()(),i._20(-1,3,[\"\\n        \"])),(l()(),i.Z(7,0,null,3,2,\"ion-title\",[],null,null,null,vn.b,vn.a)),i.Y(8,49152,null,0,yn.a,[Ql.a,i.j,i.z,[2,kn.a],[2,Pn.a]],null,null),(l()(),i._20(-1,0,[\"Toolbar: Primary\"])),(l()(),i._20(-1,3,[\"\\n      \"])),(l()(),i._20(-1,null,[\"\\n    \"])),(l()(),i._20(-1,null,[\"\\n\\n    \"])),(l()(),i.Z(13,0,null,null,6,\"ion-content\",[[\"padding\",\"\"]],[[2,\"statusbar-padding\",null],[2,\"has-refresher\",null]],null,null,Cn.b,Cn.a)),i.Y(14,4374528,null,0,wn.a,[Ql.a,on.a,_n.a,i.j,i.z,Yn.a,Zn.a,i.u,[2,fn.a],[2,Ln.a]],null,null),(l()(),i._20(-1,1,[\"\\n      \"])),(l()(),i.Z(16,0,null,1,2,\"button\",[[\"block\",\"\"],[\"ion-button\",\"\"]],null,[[null,\"click\"]],function(l,n,u){var a=!0;return\"click\"===n&&(a=!1!==l.component.pushPage()&&a),a},An.b,An.a)),i.Y(17,1097728,null,0,Rn.a,[[8,\"\"],Ql.a,i.j,i.z],{block:[0,\"block\"]},null),(l()(),i._20(-1,0,[\"Next Page\"])),(l()(),i._20(-1,1,[\"\\n    \"])),(l()(),i._20(-1,null,[\"\\n  \"]))],function(l,n){l(n,5,0,\"primary\"),l(n,17,0,\"\")},function(l,n){l(n,4,0,i._13(n,5)._hidden,i._13(n,5)._sbPadding),l(n,13,0,i._13(n,14).statusbarPadding,i._13(n,14)._hasRefresher)})},Uo)),i.Y(1,49152,null,0,Sl,[Ln.a],null,null)],null,null)},{},{},[]),qo=i.X({encapsulation:2,styles:[],data:{}}),Ho=i.V(\"ng-component\",Ml,function(l){return i._22(0,[(l()(),i.Z(0,0,null,null,1,\"ng-component\",[],null,null,null,function(l){return i._22(0,[(l()(),i._20(-1,null,[\"\\n\"])),(l()(),i.Z(1,0,null,null,9,\"ion-header\",[],null,null,null,null,null)),i.Y(2,16384,null,0,jn.a,[Ql.a,i.j,i.z,[2,fn.a]],null,null),(l()(),i._20(-1,null,[\"\\n  \"])),(l()(),i.Z(4,0,null,null,5,\"ion-navbar\",[[\"class\",\"toolbar\"],[\"color\",\"primary\"]],[[8,\"hidden\",0],[2,\"statusbar-padding\",null]],null,null,Fn.b,Fn.a)),i.Y(5,49152,null,0,Pn.a,[Yn.a,[2,fn.a],[2,Ln.a],Ql.a,i.j,i.z],{color:[0,\"color\"]},null),(l()(),i._20(-1,3,[\"\\n    \"])),(l()(),i.Z(7,0,null,3,1,\"ion-searchbar\",[],[[2,\"searchbar-animated\",null],[2,\"searchbar-has-value\",null],[2,\"searchbar-active\",null],[2,\"searchbar-show-cancel\",null],[2,\"searchbar-left-aligned\",null],[2,\"searchbar-has-focus\",null]],[[null,\"ionInput\"]],function(l,n,u){var a=!0;return\"ionInput\"===n&&(a=!1!==l.component.getItems(u)&&a),a},Ue.b,Ue.a)),i.Y(8,1294336,null,0,We.a,[Ql.a,on.a,i.j,i.z,[2,A.k]],null,{ionInput:\"ionInput\"}),(l()(),i._20(-1,3,[\"\\n  \"])),(l()(),i._20(-1,null,[\"\\n\"])),(l()(),i._20(-1,null,[\"\\n\\n\"])),(l()(),i.Z(12,0,null,null,9,\"ion-content\",[],[[2,\"statusbar-padding\",null],[2,\"has-refresher\",null]],null,null,Cn.b,Cn.a)),i.Y(13,4374528,null,0,wn.a,[Ql.a,on.a,_n.a,i.j,i.z,Yn.a,Zn.a,i.u,[2,fn.a],[2,Ln.a]],null,null),(l()(),i._20(-1,1,[\"\\n  \"])),(l()(),i.Z(15,0,null,1,5,\"ion-list\",[],null,null,null,null,null)),i.Y(16,16384,null,0,en.a,[Ql.a,i.j,i.z,on.a,tn.l,_n.a],null,null),(l()(),i._20(-1,null,[\"\\n    \"])),(l()(),i.U(16777216,null,null,1,null,function(l){return i._22(0,[(l()(),i.Z(0,0,null,null,6,\"ion-item\",[[\"class\",\"item item-block\"]],null,null,null,$l.b,$l.a)),i.Y(1,1097728,null,3,Kl.a,[Jl.a,Ql.a,i.j,i.z,[2,ln.a]],null,null),i._18(335544320,1,{contentLabel:0}),i._18(603979776,2,{_buttons:1}),i._18(603979776,3,{_icons:1}),i.Y(5,16384,null,0,nn.a,[],null,null),(l()(),i._20(6,2,[\"\\n      \",\"\\n    \"]))],null,function(l,n){l(n,6,0,n.context.$implicit)})})),i.Y(19,802816,null,0,sn.h,[i.I,i.F,i.p],{ngForOf:[0,\"ngForOf\"]},null),(l()(),i._20(-1,null,[\"\\n  \"])),(l()(),i._20(-1,1,[\"\\n\"])),(l()(),i._20(-1,null,[\"\\n\"]))],function(l,n){var u=n.component;l(n,5,0,\"primary\"),l(n,8,0),l(n,19,0,u.items)},function(l,n){l(n,4,0,i._13(n,5)._hidden,i._13(n,5)._sbPadding),l(n,7,0,i._13(n,8)._animated,i._13(n,8)._value,i._13(n,8)._isActive,i._13(n,8)._showCancelButton,i._13(n,8)._shouldAlignLeft,i._13(n,8)._isFocus),l(n,12,0,i._13(n,13).statusbarPadding,i._13(n,13)._hasRefresher)})},qo)),i.Y(1,49152,null,0,Ml,[],null,null)],null,null)},{},{},[]),Go=i.X({encapsulation:2,styles:[],data:{}}),$o=i.V(\"ng-component\",Bl,function(l){return i._22(0,[(l()(),i.Z(0,0,null,null,1,\"ng-component\",[],null,null,null,function(l){return i._22(0,[(l()(),i._20(-1,null,[\"\\n\"])),(l()(),i.Z(1,0,null,null,64,\"ion-header\",[],null,null,null,null,null)),i.Y(2,16384,null,0,jn.a,[Ql.a,i.j,i.z,[2,fn.a]],null,null),(l()(),i._20(-1,null,[\"\\n  \"])),(l()(),i.Z(4,0,null,null,60,\"ion-navbar\",[[\"class\",\"toolbar\"]],[[8,\"hidden\",0],[2,\"statusbar-padding\",null]],null,null,Fn.b,Fn.a)),i.Y(5,49152,null,0,Pn.a,[Yn.a,[2,fn.a],[2,Ln.a],Ql.a,i.j,i.z],{color:[0,\"color\"]},null),(l()(),i._20(-1,3,[\"\\n    \"])),(l()(),i.Z(7,0,null,1,19,\"ion-buttons\",[[\"start\",\"\"]],null,null,null,null,null)),i.Y(8,16384,null,1,ru.a,[Ql.a,i.j,i.z,[2,kn.a],[2,Pn.a]],null,null),i._18(603979776,1,{_buttons:1}),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i.Z(11,0,null,null,6,\"button\",[[\"color\",\"danger\"],[\"icon-only\",\"\"],[\"ion-button\",\"\"],[\"showWhen\",\"ios\"]],[[2,\"hidden-show-when\",null]],null,null,An.b,An.a)),i.Y(12,1097728,[[1,4]],0,Rn.a,[[8,\"\"],Ql.a,i.j,i.z],{color:[0,\"color\"]},null),i.Y(13,147456,null,0,fe.a,[[8,\"ios\"],on.a,i.u],null,null),(l()(),i._20(-1,0,[\"\\n        \"])),(l()(),i.Z(15,0,null,0,1,\"ion-icon\",[[\"name\",\"create\"],[\"role\",\"img\"]],[[2,\"hide\",null]],null,null,null,null)),i.Y(16,147456,null,0,mn.a,[Ql.a,i.j,i.z],{name:[0,\"name\"]},null),(l()(),i._20(-1,0,[\"\\n      \"])),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i.Z(19,0,null,null,6,\"button\",[[\"hideWhen\",\"ios\"],[\"icon-only\",\"\"],[\"ion-button\",\"\"]],[[2,\"hidden-hide-when\",null]],null,null,An.b,An.a)),i.Y(20,1097728,[[1,4]],0,Rn.a,[[8,\"\"],Ql.a,i.j,i.z],null,null),i.Y(21,147456,null,0,Fo.a,[[8,\"ios\"],on.a,i.u],null,null),(l()(),i._20(-1,0,[\"\\n        \"])),(l()(),i.Z(23,0,null,0,1,\"ion-icon\",[[\"name\",\"create\"],[\"role\",\"img\"]],[[2,\"hide\",null]],null,null,null,null)),i.Y(24,147456,null,0,mn.a,[Ql.a,i.j,i.z],{name:[0,\"name\"]},null),(l()(),i._20(-1,0,[\"\\n      \"])),(l()(),i._20(-1,null,[\"\\n    \"])),(l()(),i._20(-1,3,[\"\\n    \"])),(l()(),i.Z(28,0,null,3,14,\"ion-segment\",[],[[2,\"ng-untouched\",null],[2,\"ng-touched\",null],[2,\"ng-pristine\",null],[2,\"ng-dirty\",null],[2,\"ng-valid\",null],[2,\"ng-invalid\",null],[2,\"ng-pending\",null],[2,\"segment-disabled\",null]],[[null,\"ngModelChange\"]],function(l,n,u){var a=!0;return\"ngModelChange\"===n&&(a=!1!==(l.component.selectedSegment=u)&&a),a},null,null)),i.Y(29,671744,null,0,A.n,[[8,null],[8,null],[8,null],[8,null]],{model:[0,\"model\"]},{update:\"ngModelChange\"}),i._17(2048,null,A.k,null,[A.n]),i.Y(31,16384,null,0,A.l,[A.k],null,null),i.Y(32,1196032,null,1,Ge.a,[Ql.a,i.j,i.z,[2,A.k]],{color:[0,\"color\"]},null),i._18(603979776,2,{_buttons:1}),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i.Z(35,0,null,null,2,\"ion-segment-button\",[[\"checked\",\"\"],[\"class\",\"segment-button\"],[\"role\",\"button\"],[\"tappable\",\"\"],[\"value\",\"new\"]],[[2,\"segment-button-disabled\",null],[2,\"segment-activated\",null],[1,\"aria-pressed\",0]],[[null,\"click\"]],function(l,n,u){var a=!0;return\"click\"===n&&(a=!1!==i._13(l,36).onClick()&&a),a},$e.b,$e.a)),i.Y(36,114688,[[2,4]],0,Ke.a,[],{value:[0,\"value\"]},null),(l()(),i._20(-1,0,[\"\\n        New\\n      \"])),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i.Z(39,0,null,null,2,\"ion-segment-button\",[[\"class\",\"segment-button\"],[\"role\",\"button\"],[\"tappable\",\"\"],[\"value\",\"hot\"]],[[2,\"segment-button-disabled\",null],[2,\"segment-activated\",null],[1,\"aria-pressed\",0]],[[null,\"click\"]],function(l,n,u){var a=!0;return\"click\"===n&&(a=!1!==i._13(l,40).onClick()&&a),a},$e.b,$e.a)),i.Y(40,114688,[[2,4]],0,Ke.a,[],{value:[0,\"value\"]},null),(l()(),i._20(-1,0,[\"\\n        Hot\\n      \"])),(l()(),i._20(-1,null,[\"\\n    \"])),(l()(),i._20(-1,3,[\"\\n    \"])),(l()(),i.Z(44,0,null,2,19,\"ion-buttons\",[[\"end\",\"\"]],null,null,null,null,null)),i.Y(45,16384,null,1,ru.a,[Ql.a,i.j,i.z,[2,kn.a],[2,Pn.a]],null,null),i._18(603979776,3,{_buttons:1}),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i.Z(48,0,null,null,6,\"button\",[[\"color\",\"danger\"],[\"icon-only\",\"\"],[\"ion-button\",\"\"],[\"showWhen\",\"ios\"]],[[2,\"hidden-show-when\",null]],null,null,An.b,An.a)),i.Y(49,1097728,[[3,4]],0,Rn.a,[[8,\"\"],Ql.a,i.j,i.z],{color:[0,\"color\"]},null),i.Y(50,147456,null,0,fe.a,[[8,\"ios\"],on.a,i.u],null,null),(l()(),i._20(-1,0,[\"\\n        \"])),(l()(),i.Z(52,0,null,0,1,\"ion-icon\",[[\"name\",\"more\"],[\"role\",\"img\"]],[[2,\"hide\",null]],null,null,null,null)),i.Y(53,147456,null,0,mn.a,[Ql.a,i.j,i.z],{name:[0,\"name\"]},null),(l()(),i._20(-1,0,[\"\\n      \"])),(l()(),i._20(-1,null,[\"\\n      \"])),(l()(),i.Z(56,0,null,null,6,\"button\",[[\"hideWhen\",\"ios\"],[\"icon-only\",\"\"],[\"ion-button\",\"\"]],[[2,\"hidden-hide-when\",null]],null,null,An.b,An.a)),i.Y(57,1097728,[[3,4]],0,Rn.a,[[8,\"\"],Ql.a,i.j,i.z],null,null),i.Y(58,147456,null,0,Fo.a,[[8,\"ios\"],on.a,i.u],null,null),(l()(),i._20(-1,0,[\"\\n        \"])),(l()(),i.Z(60,0,null,0,1,\"ion-icon\",[[\"name\",\"more\"],[\"role\",\"img\"]],[[2,\"hide\",null]],null,null,null,null)),i.Y(61,147456,null,0,mn.a,[Ql.a,i.j,i.z],{name:[0,\"name\"]},null),(l()(),i._20(-1,0,[\"\\n      \"])),(l()(),i._20(-1,null,[\"\\n    \"])),(l()(),i._20(-1,3,[\"\\n  \"])),(l()(),i._20(-1,null,[\"\\n\"])),(l()(),i._20(-1,null,[\"\\n\\n\"])),(l()(),i.Z(67,0,null,null,1,\"ion-content\",[],[[2,\"statusbar-padding\",null],[2,\"has-refresher\",null]],null,null,Cn.b,Cn.a)),i.Y(68,4374528,null,0,wn.a,[Ql.a,on.a,_n.a,i.j,i.z,Yn.a,Zn.a,i.u,[2,fn.a],[2,Ln.a]],null,null),(l()(),i._20(-1,null,[\"\\n\\n\"])),(l()(),i.Z(70,0,null,null,10,\"ion-footer\",[],null,null,null,null,null)),i.Y(71,16384,null,0,So.a,[Ql.a,i.j,i.z,[2,fn.a]],null,null),(l()(),i._20(-1,null,[\"\\n  \"])),(l()(),i.Z(73,0,null,null,6,\"ion-toolbar\",[[\"class\",\"toolbar\"]],[[2,\"statusbar-padding\",null]],null,null,zn.b,zn.a)),i.Y(74,49152,null,0,kn.a,[Ql.a,i.j,i.z],{color:[0,\"color\"]},null),(l()(),i._20(-1,3,[\"\\n    \"])),(l()(),i.Z(76,0,null,3,2,\"ion-title\",[],null,null,null,vn.b,vn.a)),i.Y(77,49152,null,0,yn.a,[Ql.a,i.j,i.z,[2,kn.a],[2,Pn.a]],null,null),(l()(),i._20(-1,0,[\"Karma Score: 2317\"])),(l()(),i._20(-1,3,[\"\\n  \"])),(l()(),i._20(-1,null,[\"\\n\"])),(l()(),i._20(-1,null,[\"\\n\"]))],function(l,n){var u=n.component;l(n,5,0,u.isAndroid?\"danger\":\"\"),l(n,12,0,\"danger\"),l(n,16,0,\"create\"),l(n,24,0,\"create\"),l(n,29,0,u.selectedSegment),l(n,32,0,u.isAndroid?\"light\":\"danger\"),l(n,36,0,\"new\"),l(n,40,0,\"hot\"),l(n,49,0,\"danger\"),l(n,53,0,\"more\"),l(n,61,0,\"more\"),l(n,74,0,u.isAndroid?\"danger\":\"light\")},function(l,n){l(n,4,0,i._13(n,5)._hidden,i._13(n,5)._sbPadding),l(n,11,0,!i._13(n,13).isMatch),l(n,15,0,i._13(n,16)._hidden),l(n,19,0,i._13(n,21).isMatch),l(n,23,0,i._13(n,24)._hidden),l(n,28,0,i._13(n,31).ngClassUntouched,i._13(n,31).ngClassTouched,i._13(n,31).ngClassPristine,i._13(n,31).ngClassDirty,i._13(n,31).ngClassValid,i._13(n,31).ngClassInvalid,i._13(n,31).ngClassPending,i._13(n,32)._disabled),l(n,35,0,i._13(n,36)._disabled,i._13(n,36).isActive,i._13(n,36).isActive),l(n,39,0,i._13(n,40)._disabled,i._13(n,40).isActive,i._13(n,40).isActive),l(n,48,0,!i._13(n,50).isMatch),l(n,52,0,i._13(n,53)._hidden),l(n,56,0,i._13(n,58).isMatch),l(n,60,0,i._13(n,61)._hidden),l(n,67,0,i._13(n,68).statusbarPadding,i._13(n,68)._hasRefresher),l(n,73,0,i._13(n,74)._sbPadding)})},Go)),i.Y(1,49152,null,0,Bl,[on.a],null,null)],null,null)},{},{},[]),Ko=u(150),Jo=u(147),Qo=u(188),lt=u(77),nt=u(70),ut=u(146),at=u(148),et=u(137),ot=u(149),tt=i.W(Vl,[Dl.b],function(l){return i._10([i._11(512,i.i,i.S,[[8,[Nl.a,Xl.a,Ol.a,El.a,Ul.a,Wl.a,ql.a,Hl.a,Gl.a,Bn,Nn,En,Wn,Hn,$n,Jn,eu,tu,_u,cu,bu,gu,pu,Yu,fu,ku,Pu,Lu,Bu,Nu,Ou,Uu,Hu,$u,Ju,ea,ra,ba,ha,Za,ja,za,va,Pa,wa,Ia,Ta,Ma,Fa,Da,Xa,qa,Ga,Ka,Qa,ee,ie,ce,be,ge,pe,Ye,ve,Pe,Ie,we,Re,Fe,De,Ee,He,Qe,eo,co,go,bo,Yo,po,ko,fo,Co,yo,Io,To,Bo,Ro,Wo,Eo,Xo,Do,Ho,$o]],[3,i.i],i.s]),i._11(5120,i.r,i._9,[[3,i.r]]),i._11(4608,sn.k,sn.j,[i.r,[2,sn.s]]),i._11(5120,i.b,i._0,[]),i._11(5120,i.p,i._6,[]),i._11(5120,i.q,i._7,[]),i._11(4608,t.c,t.r,[sn.c]),i._11(6144,i.D,null,[t.c]),i._11(4608,t.f,Ko.a,[]),i._11(5120,t.d,function(l,n,u,a,e){return[new t.k(l,n),new t.o(u),new t.n(a,e)]},[sn.c,i.u,sn.c,sn.c,t.f]),i._11(4608,t.e,t.e,[t.d,i.u]),i._11(135680,t.m,t.m,[sn.c]),i._11(4608,t.l,t.l,[t.e,t.m]),i._11(6144,i.B,null,[t.l]),i._11(6144,t.p,null,[t.m]),i._11(4608,i.G,i.G,[i.u]),i._11(4608,t.h,t.h,[sn.c]),i._11(4608,t.i,t.i,[sn.c]),i._11(4608,A.s,A.s,[]),i._11(4608,A.d,A.d,[]),i._11(4608,Vn.a,Vn.a,[Yn.a,Ql.a]),i._11(4608,Xn.a,Xn.a,[Yn.a,Ql.a]),i._11(4608,Jo.a,Jo.a,[]),i._11(4608,Jl.a,Jl.a,[]),i._11(4608,Ua.a,Ua.a,[on.a]),i._11(4608,Zn.a,Zn.a,[Ql.a,on.a,i.u,_n.a]),i._11(4608,_e.a,_e.a,[Yn.a,Ql.a]),i._11(5120,sn.f,Qo.b,[sn.q,[2,sn.a],Ql.a]),i._11(4608,sn.e,sn.e,[sn.f]),i._11(5120,lt.b,lt.d,[Yn.a,lt.a]),i._11(5120,Sn.a,Sn.b,[Yn.a,lt.b,sn.e,nt.b,i.i]),i._11(4608,je.a,je.a,[Yn.a,Ql.a,Sn.a]),i._11(4608,sa.a,sa.a,[Yn.a,Ql.a]),i._11(4608,Me.a,Me.a,[Yn.a,Ql.a,Sn.a]),i._11(4608,ut.a,ut.a,[Ql.a,on.a,_n.a,Yn.a,tn.l]),i._11(4608,wo.a,wo.a,[Yn.a,Ql.a]),i._11(4608,Tn.a,Tn.a,[on.a,Ql.a]),i._11(512,sn.b,sn.b,[]),i._11(1024,i.k,t.q,[]),i._11(256,Ql.b,{statusbarPadding:!0},[]),i._11(1024,at.a,at.b,[]),i._11(1024,on.a,on.b,[t.b,at.a,i.u]),i._11(1024,Ql.a,Ql.c,[Ql.b,on.a]),i._11(512,_n.a,_n.a,[on.a]),i._11(512,an.a,an.a,[]),i._11(512,Yn.a,Yn.a,[Ql.a,on.a,[2,an.a]]),i._11(512,tn.l,tn.l,[Yn.a]),i._11(256,lt.a,{links:[{component:_,name:\"ActionSheetBasicPage\",segment:\"action-sheet-basic\"},{component:s,name:\"AlertBasicPage\",segment:\"alert-basic\"},{component:c,name:\"AlertCheckboxPage\",segment:\"alert-checkbox\"},{component:r,name:\"AlertConfirmPage\",segment:\"alert-confirm\"},{component:d,name:\"AlertPromptPage\",segment:\"alert-prompt\"},{component:b,name:\"AlertRadioPage\",segment:\"alert-radio\"},{component:m,name:\"BadgeBasicPage\",segment:\"badge-basic\"},{component:g,name:\"ButtonBasicPage\",segment:\"button-basic\"},{component:h,name:\"ButtonBlockPage\",segment:\"button-block\"},{component:p,name:\"ButtonClearPage\",segment:\"button-clear\"},{component:Z,name:\"ButtonComponentsPage\",segment:\"button-components\"},{component:Y,name:\"ButtonFullPage\",segment:\"button-full\"},{component:j,name:\"ButtonIconsPage\",segment:\"button-icons\"},{component:f,name:\"ButtonOutlinePage\",segment:\"button-outline\"},{component:z,name:\"ButtonRoundPage\",segment:\"button-round\"},{component:k,name:\"ButtonSizesPage\",segment:\"button-sizes\"},{component:v,name:\"FabBasicPage\",segment:\"fab-basic\"},{component:y,name:\"CardAdvancedMapPage\",segment:\"card-advanced-map\"},{component:P,name:\"CardAdvancedSocialPage\",segment:\"card-advanced-social\"},{component:Al,name:\"CardAdvancedWeatherPage\",segment:\"card-advanced-weather\"},{component:C,name:\"CardBackgroundPage\",segment:\"card-background\"},{component:w,name:\"CardBasicPage\",segment:\"card-basic\"},{component:L,name:\"CardHeaderPage\",segment:\"card-header\"},{component:I,name:\"CardImagePage\",segment:\"card-image\"},{component:x,name:\"CardListPage\",segment:\"card-list\"},{component:T,name:\"CheckboxBasicPage\",segment:\"checkbox-basic\"},{component:S,name:\"DatetimeBasicPage\",segment:\"datetime-basic\"},{component:M,name:\"GestureBasicPage\",segment:\"gesture-basic\"},{component:B,name:\"GridBasicPage\",segment:\"grid-basic\"},{component:F,name:\"IconBasicPage\",segment:\"icon-basic\"},{component:R,name:\"InputBasicPage\",segment:\"input-basic\"},{component:V,name:\"InputFloatingPage\",segment:\"input-floating\"},{component:D,name:\"InputFixedInlinePage\",segment:\"input-fixed-inline\"},{component:N,name:\"InputInlinePage\",segment:\"input-inline\"},{component:X,name:\"InputInsetPage\",segment:\"input-inset\"},{component:O,name:\"InputPlaceholderPage\",segment:\"input-placeholder\"},{component:E,name:\"InputStackedPage\",segment:\"input-stacked\"},{component:U,name:\"ListAvatarPage\",segment:\"list-avatar\"},{component:W,name:\"ListBasicPage\",segment:\"list-basic\"},{component:q,name:\"ListDividersPage\",segment:\"list-dividers\"},{component:H,name:\"ListHeadersPage\",segment:\"list-headers\"},{component:G,name:\"ListIconPage\",segment:\"list-icon\"},{component:$,name:\"ListInsetPage\",segment:\"list-inset\"},{component:K,name:\"ListMultilinePage\",segment:\"list-multiline\"},{component:J,name:\"ListNoLinesPage\",segment:\"list-no-lines\"},{component:Q,name:\"ListSlidingPage\",segment:\"list-sliding\"},{component:ll,name:\"ListThumbnailPage\",segment:\"list-thumbnail\"},{component:nl,name:\"LoadingBasicPage\",segment:\"loading-basic\"},{component:ul,name:\"MenuBasicPage\",segment:\"menu-basic\"},{component:al,name:\"MenuPageOne\",segment:\"menu-one\"},{component:el,name:\"MenuPageTwo\",segment:\"menu-two\"},{component:ol,name:\"MenuPageThree\",segment:\"menu-three\"},{component:tl,name:\"ModalBasicPage\",segment:\"modal-basic\"},{component:il,name:\"ModalContentPage\",segment:\"modal-content\"},{component:sl,name:\"NavigationBasicPage\",segment:\"navigation-basic\"},{component:_l,name:\"NavigationDetailsPage\",segment:\"navigation-details\"},{component:rl,name:\"PopoverBasicPage\",segment:\"popover-basic\"},{component:cl,name:\"PopoverContentPage\",segment:\"popover-content\"},{component:dl,name:\"RadioBasicPage\",segment:\"radio-basic\"},{component:bl,name:\"RangeBasicPage\",segment:\"range-basic\"},{component:ml,name:\"SearchbarBasicPage\",segment:\"searchbar-basic\"},{component:gl,name:\"SegmentBasicPage\",segment:\"segment-basic\"},{component:hl,name:\"SelectBasicPage\",segment:\"select-basic\"},{component:pl,name:\"SlideBasicPage\",segment:\"slide-basic\"},{component:Yl,name:\"TabBadgesPage\",segment:\"tab-badges\"},{component:fl,name:\"TabBasicPage\",segment:\"tab-basic\"},{component:kl,name:\"TabIconPage\",segment:\"tab-icon\"},{component:yl,name:\"TabIconTextPage\",segment:\"tab-icon-text\"},{component:Pl,name:\"ToastBasicPage\",segment:\"toast-basic\"},{component:Cl,name:\"ToggleBasicPage\",segment:\"toggle-basic\"},{component:wl,name:\"ToolbarBasicPage\",segment:\"toolbar-basic\"},{component:Ll,name:\"ToolbarButtonsPage\",segment:\"toolbar-buttons\"},{component:Sl,name:\"ToolbarColorsPage\",segment:\"toolbar-colors\"},{component:Tl,name:\"ToolbarColorsPage2\",segment:\"toolbar-colors2\"},{component:xl,name:\"ToolbarColorsPage3\",segment:\"toolbar-colors3\"},{component:Il,name:\"ToolbarColorsPage4\",segment:\"toolbar-colors4\"},{component:Ml,name:\"ToolbarSearchbarPage\",segment:\"toolbar-searchbar\"},{component:Bl,name:\"ToolbarSegmentPage\",segment:\"toolbar-segment\"}]},[]),i._11(512,i.h,i.h,[]),i._11(512,et.a,et.a,[i.h]),i._11(1024,nt.b,nt.c,[et.a,i.o]),i._11(1024,i.c,function(l,n,u,a,e,o,i,_,s,c,r,d,b){return[t.t(l),ot.a(n),Jo.b(u,a),ut.b(e,o,i,_,s),nt.d(c,r,d,b)]},[[2,i.t],Ql.a,on.a,_n.a,Ql.a,on.a,_n.a,Yn.a,tn.l,Ql.a,lt.a,nt.b,i.u]),i._11(512,i.d,i.d,[[2,i.c]]),i._11(131584,i.f,i.f,[i.u,i.T,i.o,i.k,i.i,i.d]),i._11(512,i.e,i.e,[i.f]),i._11(512,t.a,t.a,[[3,t.a]]),i._11(512,A.q,A.q,[]),i._11(512,A.i,A.i,[]),i._11(512,A.o,A.o,[]),i._11(512,Qo.a,Qo.a,[]),i._11(512,Vl,Vl,[]),i._11(256,Dl.a,Fl,[]),i._11(256,sn.a,\"/\",[])])});Object(i.M)(),Object(t.j)().bootstrapModuleFactory(tt)}},[193]);"
  },
  {
    "path": "content/dist/preview-app/www/build/polyfills.js",
    "content": "!function(t){\"use strict\";function e(t,e){return e={exports:{}},t(e,e.exports),e.exports}function n(t){return isFinite(t=+t)&&0!=t?t<0?-n(-t):Math.log(t+Math.sqrt(t*t+1)):t}function r(t,e){var n,o,i=arguments.length<3?t:arguments[2];return v(t)===i?t[e]:(n=dn.f(t,e))?M(n,\"value\")?n.value:void 0!==n.get?n.get.call(i):void 0:p(o=bt(t))?r(o,e,i):void 0}function o(t,e,n){var r,i,a=arguments.length<4?t:arguments[3],u=dn.f(v(t),e);if(!u){if(p(i=bt(t)))return o(i,e,n,a);u=E(0)}return M(u,\"value\")?!(!1===u.writable||!p(a))&&(r=dn.f(a,e)||E(0),r.value=n,T.f(a,e,r),!0):void 0!==u.set&&(u.set.call(a,n),!0)}var i=Math.ceil,a=Math.floor,u=function(t){return isNaN(t=+t)?0:(t>0?a:i)(t)},c=function(t){if(void 0==t)throw TypeError(\"Can't call method on  \"+t);return t},s=function(t){return function(e,n){var r,o,i=String(c(e)),a=u(n),s=i.length;return a<0||a>=s?t?\"\":void 0:(r=i.charCodeAt(a),r<55296||r>56319||a+1===s||(o=i.charCodeAt(a+1))<56320||o>57343?t?i.charAt(a):r:t?i.slice(a,a+2):o-56320+(r-55296<<10)+65536)}},f=\"undefined\"!=typeof window?window:\"undefined\"!=typeof global?global:\"undefined\"!=typeof self?self:{},l=e(function(t){var e=t.exports=\"undefined\"!=typeof window&&window.Math==Math?window:\"undefined\"!=typeof self&&self.Math==Math?self:Function(\"return this\")();\"number\"==typeof __g&&(__g=e)}),h=e(function(t){var e=t.exports={version:\"2.5.1\"};\"number\"==typeof __e&&(__e=e)}),p=function(t){return\"object\"==typeof t?null!==t:\"function\"==typeof t},v=function(t){if(!p(t))throw TypeError(t+\" is not an object!\");return t},d=function(t){try{return!!t()}catch(t){return!0}},g=!d(function(){return 7!=Object.defineProperty({},\"a\",{get:function(){return 7}}).a}),y=l.document,m=p(y)&&p(y.createElement),b=function(t){return m?y.createElement(t):{}},_=!g&&!d(function(){return 7!=Object.defineProperty(b(\"div\"),\"a\",{get:function(){return 7}}).a}),k=function(t,e){if(!p(t))return t;var n,r;if(e&&\"function\"==typeof(n=t.toString)&&!p(r=n.call(t)))return r;if(\"function\"==typeof(n=t.valueOf)&&!p(r=n.call(t)))return r;if(!e&&\"function\"==typeof(n=t.toString)&&!p(r=n.call(t)))return r;throw TypeError(\"Can't convert object to primitive value\")},w=Object.defineProperty,S=g?Object.defineProperty:function(t,e,n){if(v(t),e=k(e,!0),v(n),_)try{return w(t,e,n)}catch(t){}if(\"get\"in n||\"set\"in n)throw TypeError(\"Accessors not supported!\");return\"value\"in n&&(t[e]=n.value),t},T={f:S},E=function(t,e){return{enumerable:!(1&t),configurable:!(2&t),writable:!(4&t),value:e}},O=g?function(t,e,n){return T.f(t,e,E(1,n))}:function(t,e,n){return t[e]=n,t},P={}.hasOwnProperty,M=function(t,e){return P.call(t,e)},F=0,j=Math.random(),D=function(t){return\"Symbol(\".concat(void 0===t?\"\":t,\")_\",(++F+j).toString(36))},x=e(function(t){var e=D(\"src\"),n=Function.toString,r=(\"\"+n).split(\"toString\");h.inspectSource=function(t){return n.call(t)},(t.exports=function(t,n,o,i){var a=\"function\"==typeof o;a&&(M(o,\"name\")||O(o,\"name\",n)),t[n]!==o&&(a&&(M(o,e)||O(o,e,t[n]?\"\"+t[n]:r.join(String(n)))),t===l?t[n]=o:i?t[n]?t[n]=o:O(t,n,o):(delete t[n],O(t,n,o)))})(Function.prototype,\"toString\",function(){return\"function\"==typeof this&&this[e]||n.call(this)})}),I=function(t){if(\"function\"!=typeof t)throw TypeError(t+\" is not a function!\");return t},A=function(t,e,n){if(I(t),void 0===e)return t;switch(n){case 1:return function(n){return t.call(e,n)};case 2:return function(n,r){return t.call(e,n,r)};case 3:return function(n,r,o){return t.call(e,n,r,o)}}return function(){return t.apply(e,arguments)}},L=function(t,e,n){var r,o,i,a,u=t&L.F,c=t&L.G,s=t&L.S,f=t&L.P,p=t&L.B,v=c?l:s?l[e]||(l[e]={}):(l[e]||{}).prototype,d=c?h:h[e]||(h[e]={}),g=d.prototype||(d.prototype={});c&&(n=e);for(r in n)o=!u&&v&&void 0!==v[r],i=(o?v:n)[r],a=p&&o?A(i,l):f&&\"function\"==typeof i?A(Function.call,i):i,v&&x(v,r,i,t&L.U),d[r]!=i&&O(d,r,a),f&&g[r]!=i&&(g[r]=i)};l.core=h,L.F=1,L.G=2,L.S=4,L.P=8,L.B=16,L.W=32,L.U=64,L.R=128;var R=L,N={},C={}.toString,z=function(t){return C.call(t).slice(8,-1)},Z=Object(\"z\").propertyIsEnumerable(0)?Object:function(t){return\"String\"==z(t)?t.split(\"\"):Object(t)},H=function(t){return Z(c(t))},W=Math.min,B=function(t){return t>0?W(u(t),9007199254740991):0},q=Math.max,U=Math.min,V=function(t,e){return t=u(t),t<0?q(t+e,0):U(t,e)},G=function(t){return function(e,n,r){var o,i=H(e),a=B(i.length),u=V(r,a);if(t&&n!=n){for(;a>u;)if((o=i[u++])!=o)return!0}else for(;a>u;u++)if((t||u in i)&&i[u]===n)return t||u||0;return!t&&-1}},X=l[\"__core-js_shared__\"]||(l[\"__core-js_shared__\"]={}),Y=function(t){return X[t]||(X[t]={})},K=Y(\"keys\"),J=function(t){return K[t]||(K[t]=D(t))},$=G(!1),Q=J(\"IE_PROTO\"),tt=function(t,e){var n,r=H(t),o=0,i=[];for(n in r)n!=Q&&M(r,n)&&i.push(n);for(;e.length>o;)M(r,n=e[o++])&&(~$(i,n)||i.push(n));return i},et=\"constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf\".split(\",\"),nt=Object.keys||function(t){return tt(t,et)},rt=g?Object.defineProperties:function(t,e){v(t);for(var n,r=nt(e),o=r.length,i=0;o>i;)T.f(t,n=r[i++],e[n]);return t},ot=l.document,it=ot&&ot.documentElement,at=J(\"IE_PROTO\"),ut=function(){},ct=function(){var t,e=b(\"iframe\"),n=et.length;for(e.style.display=\"none\",it.appendChild(e),e.src=\"javascript:\",t=e.contentWindow.document,t.open(),t.write(\"<script>document.F=Object<\\/script>\"),t.close(),ct=t.F;n--;)delete ct.prototype[et[n]];return ct()},st=Object.create||function(t,e){var n;return null!==t?(ut.prototype=v(t),n=new ut,ut.prototype=null,n[at]=t):n=ct(),void 0===e?n:rt(n,e)},ft=e(function(t){var e=Y(\"wks\"),n=l.Symbol,r=\"function\"==typeof n;(t.exports=function(t){return e[t]||(e[t]=r&&n[t]||(r?n:D)(\"Symbol.\"+t))}).store=e}),lt=T.f,ht=ft(\"toStringTag\"),pt=function(t,e,n){t&&!M(t=n?t:t.prototype,ht)&&lt(t,ht,{configurable:!0,value:e})},vt={};O(vt,ft(\"iterator\"),function(){return this});var dt=function(t,e,n){t.prototype=st(vt,{next:E(1,n)}),pt(t,e+\" Iterator\")},gt=function(t){return Object(c(t))},yt=J(\"IE_PROTO\"),mt=Object.prototype,bt=Object.getPrototypeOf||function(t){return t=gt(t),M(t,yt)?t[yt]:\"function\"==typeof t.constructor&&t instanceof t.constructor?t.constructor.prototype:t instanceof Object?mt:null},_t=ft(\"iterator\"),kt=!([].keys&&\"next\"in[].keys()),wt=function(){return this},St=function(t,e,n,r,o,i,a){dt(n,e,r);var u,c,s,f=function(t){if(!kt&&t in v)return v[t];switch(t){case\"keys\":case\"values\":return function(){return new n(this,t)}}return function(){return new n(this,t)}},l=e+\" Iterator\",h=\"values\"==o,p=!1,v=t.prototype,d=v[_t]||v[\"@@iterator\"]||o&&v[o],g=d||f(o),y=o?h?f(\"entries\"):g:void 0,m=\"Array\"==e?v.entries||d:d;if(m&&(s=bt(m.call(new t)))!==Object.prototype&&s.next&&(pt(s,l,!0),M(s,_t)||O(s,_t,wt)),h&&d&&\"values\"!==d.name&&(p=!0,g=function(){return d.call(this)}),(kt||p||!v[_t])&&O(v,_t,g),N[e]=g,N[l]=wt,o)if(u={values:h?g:f(\"values\"),keys:i?g:f(\"keys\"),entries:y},a)for(c in u)c in v||x(v,c,u[c]);else R(R.P+R.F*(kt||p),e,u);return u},Tt=s(!0);St(String,\"String\",function(t){this._t=String(t),this._i=0},function(){var t,e=this._t,n=this._i;return n>=e.length?{value:void 0,done:!0}:(t=Tt(e,n),this._i+=t.length,{value:t,done:!1})});var Et=Array.isArray||function(t){return\"Array\"==z(t)};R(R.S,\"Array\",{isArray:Et});var Ot=function(t,e,n,r){try{return r?e(v(n)[0],n[1]):e(n)}catch(e){var o=t.return;throw void 0!==o&&v(o.call(t)),e}},Pt=ft(\"iterator\"),Mt=Array.prototype,Ft=function(t){return void 0!==t&&(N.Array===t||Mt[Pt]===t)},jt=function(t,e,n){e in t?T.f(t,e,E(0,n)):t[e]=n},Dt=ft(\"toStringTag\"),xt=\"Arguments\"==z(function(){return arguments}()),It=function(t,e){try{return t[e]}catch(t){}},At=function(t){var e,n,r;return void 0===t?\"Undefined\":null===t?\"Null\":\"string\"==typeof(n=It(e=Object(t),Dt))?n:xt?z(e):\"Object\"==(r=z(e))&&\"function\"==typeof e.callee?\"Arguments\":r},Lt=ft(\"iterator\"),Rt=h.getIteratorMethod=function(t){if(void 0!=t)return t[Lt]||t[\"@@iterator\"]||N[At(t)]},Nt=ft(\"iterator\"),Ct=!1;try{var zt=[7][Nt]();zt.return=function(){Ct=!0},Array.from(zt,function(){throw 2})}catch(t){}var Zt=function(t,e){if(!e&&!Ct)return!1;var n=!1;try{var r=[7],o=r[Nt]();o.next=function(){return{done:n=!0}},r[Nt]=function(){return o},t(r)}catch(t){}return n};R(R.S+R.F*!Zt(function(t){Array.from(t)}),\"Array\",{from:function(t){var e,n,r,o,i=gt(t),a=\"function\"==typeof this?this:Array,u=arguments.length,c=u>1?arguments[1]:void 0,s=void 0!==c,f=0,l=Rt(i);if(s&&(c=A(c,u>2?arguments[2]:void 0,2)),void 0==l||a==Array&&Ft(l))for(e=B(i.length),n=new a(e);e>f;f++)jt(n,f,s?c(i[f],f):i[f]);else for(o=l.call(i),n=new a;!(r=o.next()).done;f++)jt(n,f,s?Ot(o,c,[r.value,f],!0):r.value);return n.length=f,n}}),R(R.S+R.F*d(function(){function t(){}return!(Array.of.call(t)instanceof t)}),\"Array\",{of:function(){for(var t=0,e=arguments.length,n=new(\"function\"==typeof this?this:Array)(e);e>t;)jt(n,t,arguments[t++]);return n.length=e,n}});var Ht=function(t,e){return!!t&&d(function(){e?t.call(null,function(){},1):t.call(null)})},Wt=[].join;R(R.P+R.F*(Z!=Object||!Ht(Wt)),\"Array\",{join:function(t){return Wt.call(H(this),void 0===t?\",\":t)}});var Bt=[].slice;R(R.P+R.F*d(function(){it&&Bt.call(it)}),\"Array\",{slice:function(t,e){var n=B(this.length),r=z(this);if(e=void 0===e?n:e,\"Array\"==r)return Bt.call(this,t,e);for(var o=V(t,n),i=V(e,n),a=B(i-o),u=Array(a),c=0;c<a;c++)u[c]=\"String\"==r?this.charAt(o+c):this[o+c];return u}});var qt=[].sort,Ut=[1,2,3];R(R.P+R.F*(d(function(){Ut.sort(void 0)})||!d(function(){Ut.sort(null)})||!Ht(qt)),\"Array\",{sort:function(t){return void 0===t?qt.call(gt(this)):qt.call(gt(this),I(t))}});var Vt=ft(\"species\"),Gt=function(t){var e;return Et(t)&&(e=t.constructor,\"function\"!=typeof e||e!==Array&&!Et(e.prototype)||(e=void 0),p(e)&&null===(e=e[Vt])&&(e=void 0)),void 0===e?Array:e},Xt=function(t,e){return new(Gt(t))(e)},Yt=function(t,e){var n=1==t,r=2==t,o=3==t,i=4==t,a=6==t,u=5==t||a,c=e||Xt;return function(e,s,f){for(var l,h,p=gt(e),v=Z(p),d=A(s,f,3),g=B(v.length),y=0,m=n?c(e,g):r?c(e,0):void 0;g>y;y++)if((u||y in v)&&(l=v[y],h=d(l,y,p),t))if(n)m[y]=h;else if(h)switch(t){case 3:return!0;case 5:return l;case 6:return y;case 2:m.push(l)}else if(i)return!1;return a?-1:o||i?i:m}},Kt=Yt(0),Jt=Ht([].forEach,!0);R(R.P+R.F*!Jt,\"Array\",{forEach:function(t){return Kt(this,t,arguments[1])}});var $t=Yt(1);R(R.P+R.F*!Ht([].map,!0),\"Array\",{map:function(t){return $t(this,t,arguments[1])}});var Qt=Yt(2);R(R.P+R.F*!Ht([].filter,!0),\"Array\",{filter:function(t){return Qt(this,t,arguments[1])}});var te=Yt(3);R(R.P+R.F*!Ht([].some,!0),\"Array\",{some:function(t){return te(this,t,arguments[1])}});var ee=Yt(4);R(R.P+R.F*!Ht([].every,!0),\"Array\",{every:function(t){return ee(this,t,arguments[1])}});var ne=function(t,e,n,r,o){I(e);var i=gt(t),a=Z(i),u=B(i.length),c=o?u-1:0,s=o?-1:1;if(n<2)for(;;){if(c in a){r=a[c],c+=s;break}if(c+=s,o?c<0:u<=c)throw TypeError(\"Reduce of empty array with no initial value\")}for(;o?c>=0:u>c;c+=s)c in a&&(r=e(r,a[c],c,i));return r};R(R.P+R.F*!Ht([].reduce,!0),\"Array\",{reduce:function(t){return ne(this,t,arguments.length,arguments[1],!1)}}),R(R.P+R.F*!Ht([].reduceRight,!0),\"Array\",{reduceRight:function(t){return ne(this,t,arguments.length,arguments[1],!0)}});var re=G(!1),oe=[].indexOf,ie=!!oe&&1/[1].indexOf(1,-0)<0;R(R.P+R.F*(ie||!Ht(oe)),\"Array\",{indexOf:function(t){return ie?oe.apply(this,arguments)||0:re(this,t,arguments[1])}});var ae=[].lastIndexOf,ue=!!ae&&1/[1].lastIndexOf(1,-0)<0;R(R.P+R.F*(ue||!Ht(ae)),\"Array\",{lastIndexOf:function(t){if(ue)return ae.apply(this,arguments)||0;var e=H(this),n=B(e.length),r=n-1;for(arguments.length>1&&(r=Math.min(r,u(arguments[1]))),r<0&&(r=n+r);r>=0;r--)if(r in e&&e[r]===t)return r||0;return-1}});var ce=[].copyWithin||function(t,e){var n=gt(this),r=B(n.length),o=V(t,r),i=V(e,r),a=arguments.length>2?arguments[2]:void 0,u=Math.min((void 0===a?r:V(a,r))-i,r-o),c=1;for(i<o&&o<i+u&&(c=-1,i+=u-1,o+=u-1);u-- >0;)i in n?n[o]=n[i]:delete n[o],o+=c,i+=c;return n},se=ft(\"unscopables\"),fe=Array.prototype;void 0==fe[se]&&O(fe,se,{});var le=function(t){fe[se][t]=!0};R(R.P,\"Array\",{copyWithin:ce}),le(\"copyWithin\");var he=function(t){for(var e=gt(this),n=B(e.length),r=arguments.length,o=V(r>1?arguments[1]:void 0,n),i=r>2?arguments[2]:void 0,a=void 0===i?n:V(i,n);a>o;)e[o++]=t;return e};R(R.P,\"Array\",{fill:he}),le(\"fill\");var pe=Yt(5),ve=!0;\"find\"in[]&&Array(1).find(function(){ve=!1}),R(R.P+R.F*ve,\"Array\",{find:function(t){return pe(this,t,arguments.length>1?arguments[1]:void 0)}}),le(\"find\");var de=Yt(6),ge=!0;\"findIndex\"in[]&&Array(1).findIndex(function(){ge=!1}),R(R.P+R.F*ge,\"Array\",{findIndex:function(t){return de(this,t,arguments.length>1?arguments[1]:void 0)}}),le(\"findIndex\");var ye=ft(\"species\"),me=function(t){var e=l[t];g&&e&&!e[ye]&&T.f(e,ye,{configurable:!0,get:function(){return this}})};me(\"Array\");var be=function(t,e){return{value:e,done:!!t}},_e=St(Array,\"Array\",function(t,e){this._t=H(t),this._i=0,this._k=e},function(){var t=this._t,e=this._k,n=this._i++;return!t||n>=t.length?(this._t=void 0,be(1)):\"keys\"==e?be(0,n):\"values\"==e?be(0,t[n]):be(0,[n,t[n]])},\"values\");N.Arguments=N.Array,le(\"keys\"),le(\"values\"),le(\"entries\");var ke=h.Array;R(R.S,\"Date\",{now:function(){return(new Date).getTime()}}),R(R.P+R.F*d(function(){return null!==new Date(NaN).toJSON()||1!==Date.prototype.toJSON.call({toISOString:function(){return 1}})}),\"Date\",{toJSON:function(t){var e=gt(this),n=k(e);return\"number\"!=typeof n||isFinite(n)?e.toISOString():null}});var we=Date.prototype.getTime,Se=Date.prototype.toISOString,Te=function(t){return t>9?t:\"0\"+t},Ee=d(function(){return\"0385-07-25T07:06:39.999Z\"!=Se.call(new Date(-5e13-1))})||!d(function(){Se.call(new Date(NaN))})?function(){if(!isFinite(we.call(this)))throw RangeError(\"Invalid time value\");var t=this,e=t.getUTCFullYear(),n=t.getUTCMilliseconds(),r=e<0?\"-\":e>9999?\"+\":\"\";return r+(\"00000\"+Math.abs(e)).slice(r?-6:-4)+\"-\"+Te(t.getUTCMonth()+1)+\"-\"+Te(t.getUTCDate())+\"T\"+Te(t.getUTCHours())+\":\"+Te(t.getUTCMinutes())+\":\"+Te(t.getUTCSeconds())+\".\"+(n>99?n:\"0\"+Te(n))+\"Z\"}:Se;R(R.P+R.F*(Date.prototype.toISOString!==Ee),\"Date\",{toISOString:Ee});var Oe=Date.prototype,Pe=Oe.toString,Me=Oe.getTime;new Date(NaN)+\"\"!=\"Invalid Date\"&&x(Oe,\"toString\",function(){var t=Me.call(this);return t===t?Pe.call(this):\"Invalid Date\"});var Fe=function(t){if(\"string\"!==t&&\"number\"!==t&&\"default\"!==t)throw TypeError(\"Incorrect hint\");return k(v(this),\"number\"!=t)},je=ft(\"toPrimitive\"),De=Date.prototype;je in De||O(De,je,Fe);var xe=function(t,e,n){var r=void 0===n;switch(e.length){case 0:return r?t():t.call(n);case 1:return r?t(e[0]):t.call(n,e[0]);case 2:return r?t(e[0],e[1]):t.call(n,e[0],e[1]);case 3:return r?t(e[0],e[1],e[2]):t.call(n,e[0],e[1],e[2]);case 4:return r?t(e[0],e[1],e[2],e[3]):t.call(n,e[0],e[1],e[2],e[3])}return t.apply(n,e)},Ie=[].slice,Ae={},Le=function(t,e,n){if(!(e in Ae)){for(var r=[],o=0;o<e;o++)r[o]=\"a[\"+o+\"]\";Ae[e]=Function(\"F,a\",\"return new F(\"+r.join(\",\")+\")\")}return Ae[e](t,n)},Re=Function.bind||function(t){var e=I(this),n=Ie.call(arguments,1),r=function(){var o=n.concat(Ie.call(arguments));return this instanceof r?Le(e,o.length,o):xe(e,o,t)};return p(e.prototype)&&(r.prototype=e.prototype),r};R(R.P,\"Function\",{bind:Re});var Ne=T.f,Ce=Function.prototype,ze=/^\\s*function ([^ (]*)/;\"name\"in Ce||g&&Ne(Ce,\"name\",{configurable:!0,get:function(){try{return(\"\"+this).match(ze)[1]}catch(t){return\"\"}}});var Ze=ft(\"hasInstance\"),He=Function.prototype;Ze in He||T.f(He,Ze,{value:function(t){if(\"function\"!=typeof this||!p(t))return!1;if(!p(this.prototype))return t instanceof this;for(;t=bt(t);)if(this.prototype===t)return!0;return!1}});var We={};We[ft(\"toStringTag\")]=\"z\",We+\"\"!=\"[object z]\"&&x(Object.prototype,\"toString\",function(){return\"[object \"+At(this)+\"]\"},!0);for(var Be=ft(\"iterator\"),qe=ft(\"toStringTag\"),Ue=N.Array,Ve={CSSRuleList:!0,CSSStyleDeclaration:!1,CSSValueList:!1,ClientRectList:!1,DOMRectList:!1,DOMStringList:!1,DOMTokenList:!0,DataTransferItemList:!1,FileList:!1,HTMLAllCollection:!1,HTMLCollection:!1,HTMLFormElement:!1,HTMLSelectElement:!1,MediaList:!0,MimeTypeArray:!1,NamedNodeMap:!1,NodeList:!0,PaintRequestList:!1,Plugin:!1,PluginArray:!1,SVGLengthList:!1,SVGNumberList:!1,SVGPathSegList:!1,SVGPointList:!1,SVGStringList:!1,SVGTransformList:!1,SourceBufferList:!1,StyleSheetList:!0,TextTrackCueList:!1,TextTrackList:!1,TouchList:!1},Ge=nt(Ve),Xe=0;Xe<Ge.length;Xe++){var Ye,Ke=Ge[Xe],Je=Ve[Ke],$e=l[Ke],Qe=$e&&$e.prototype;if(Qe&&(Qe[Be]||O(Qe,Be,Ue),Qe[qe]||O(Qe,qe,Ke),N[Ke]=Ue,Je))for(Ye in _e)Qe[Ye]||x(Qe,Ye,_e[Ye],!0)}var tn=function(t,e,n){for(var r in e)x(t,r,e[r],n);return t},en=function(t,e,n,r){if(!(t instanceof e)||void 0!==r&&r in t)throw TypeError(n+\": incorrect invocation!\");return t},nn=e(function(t){var e={},n={},r=t.exports=function(t,r,o,i,a){var u,c,s,f,l=a?function(){return t}:Rt(t),h=A(o,i,r?2:1),p=0;if(\"function\"!=typeof l)throw TypeError(t+\" is not iterable!\");if(Ft(l)){for(u=B(t.length);u>p;p++)if((f=r?h(v(c=t[p])[0],c[1]):h(t[p]))===e||f===n)return f}else for(s=l.call(t);!(c=s.next()).done;)if((f=Ot(s,h,c.value,r))===e||f===n)return f};r.BREAK=e,r.RETURN=n}),rn=e(function(t){var e=D(\"meta\"),n=T.f,r=0,o=Object.isExtensible||function(){return!0},i=!d(function(){return o(Object.preventExtensions({}))}),a=function(t){n(t,e,{value:{i:\"O\"+ ++r,w:{}}})},u=function(t,n){if(!p(t))return\"symbol\"==typeof t?t:(\"string\"==typeof t?\"S\":\"P\")+t;if(!M(t,e)){if(!o(t))return\"F\";if(!n)return\"E\";a(t)}return t[e].i},c=function(t,n){if(!M(t,e)){if(!o(t))return!0;if(!n)return!1;a(t)}return t[e].w},s=function(t){return i&&f.NEED&&o(t)&&!M(t,e)&&a(t),t},f=t.exports={KEY:e,NEED:!1,fastKey:u,getWeak:c,onFreeze:s}}),on=function(t,e){if(!p(t)||t._t!==e)throw TypeError(\"Incompatible receiver, \"+e+\" required!\");return t},an=T.f,un=rn.fastKey,cn=g?\"_s\":\"size\",sn=function(t,e){var n,r=un(e);if(\"F\"!==r)return t._i[r];for(n=t._f;n;n=n.n)if(n.k==e)return n},fn={getConstructor:function(t,e,n,r){var o=t(function(t,i){en(t,o,e,\"_i\"),t._t=e,t._i=st(null),t._f=void 0,t._l=void 0,t[cn]=0,void 0!=i&&nn(i,n,t[r],t)});return tn(o.prototype,{clear:function(){for(var t=on(this,e),n=t._i,r=t._f;r;r=r.n)r.r=!0,r.p&&(r.p=r.p.n=void 0),delete n[r.i];t._f=t._l=void 0,t[cn]=0},delete:function(t){var n=on(this,e),r=sn(n,t);if(r){var o=r.n,i=r.p;delete n._i[r.i],r.r=!0,i&&(i.n=o),o&&(o.p=i),n._f==r&&(n._f=o),n._l==r&&(n._l=i),n[cn]--}return!!r},forEach:function(t){on(this,e);for(var n,r=A(t,arguments.length>1?arguments[1]:void 0,3);n=n?n.n:this._f;)for(r(n.v,n.k,this);n&&n.r;)n=n.p},has:function(t){return!!sn(on(this,e),t)}}),g&&an(o.prototype,\"size\",{get:function(){return on(this,e)[cn]}}),o},def:function(t,e,n){var r,o,i=sn(t,e);return i?i.v=n:(t._l=i={i:o=un(e,!0),k:e,v:n,p:r=t._l,n:void 0,r:!1},t._f||(t._f=i),r&&(r.n=i),t[cn]++,\"F\"!==o&&(t._i[o]=i)),t},getEntry:sn,setStrong:function(t,e,n){St(t,e,function(t,n){this._t=on(t,e),this._k=n,this._l=void 0},function(){for(var t=this,e=t._k,n=t._l;n&&n.r;)n=n.p;return t._t&&(t._l=n=n?n.n:t._t._f)?\"keys\"==e?be(0,n.k):\"values\"==e?be(0,n.v):be(0,[n.k,n.v]):(t._t=void 0,be(1))},n?\"entries\":\"values\",!n,!0),me(e)}},ln={}.propertyIsEnumerable,hn={f:ln},pn=Object.getOwnPropertyDescriptor,vn=g?pn:function(t,e){if(t=H(t),e=k(e,!0),_)try{return pn(t,e)}catch(t){}if(M(t,e))return E(!hn.f.call(t,e),t[e])},dn={f:vn},gn=function(t,e){if(v(t),!p(e)&&null!==e)throw TypeError(e+\": can't set as prototype!\")},yn={set:Object.setPrototypeOf||(\"__proto__\"in{}?function(t,e,n){try{n=A(Function.call,dn.f(Object.prototype,\"__proto__\").set,2),n(t,[]),e=!(t instanceof Array)}catch(t){e=!0}return function(t,r){return gn(t,r),e?t.__proto__=r:n(t,r),t}}({},!1):void 0),check:gn},mn=yn.set,bn=function(t,e,n){var r,o=e.constructor;return o!==n&&\"function\"==typeof o&&(r=o.prototype)!==n.prototype&&p(r)&&mn&&mn(t,r),t},_n=function(t,e,n,r,o,i){var a=l[t],u=a,c=o?\"set\":\"add\",s=u&&u.prototype,f={},h=function(t){var e=s[t];x(s,t,\"delete\"==t?function(t){return!(i&&!p(t))&&e.call(this,0===t?0:t)}:\"has\"==t?function(t){return!(i&&!p(t))&&e.call(this,0===t?0:t)}:\"get\"==t?function(t){return i&&!p(t)?void 0:e.call(this,0===t?0:t)}:\"add\"==t?function(t){return e.call(this,0===t?0:t),this}:function(t,n){return e.call(this,0===t?0:t,n),this})};if(\"function\"==typeof u&&(i||s.forEach&&!d(function(){(new u).entries().next()}))){var v=new u,g=v[c](i?{}:-0,1)!=v,y=d(function(){v.has(1)}),m=Zt(function(t){new u(t)}),b=!i&&d(function(){for(var t=new u,e=5;e--;)t[c](e,e);return!t.has(-0)});m||(u=e(function(e,n){en(e,u,t);var r=bn(new a,e,u);return void 0!=n&&nn(n,o,r[c],r),r}),u.prototype=s,s.constructor=u),(y||b)&&(h(\"delete\"),h(\"has\"),o&&h(\"get\")),(b||g)&&h(c),i&&s.clear&&delete s.clear}else u=r.getConstructor(e,t,o,c),tn(u.prototype,n),rn.NEED=!0;return pt(u,t),f[t]=u,R(R.G+R.W+R.F*(u!=a),f),i||r.setStrong(u,t,o),u},kn=_n(\"Map\",function(t){return function(){return t(this,arguments.length>0?arguments[0]:void 0)}},{get:function(t){var e=fn.getEntry(on(this,\"Map\"),t);return e&&e.v},set:function(t,e){return fn.def(on(this,\"Map\"),0===t?0:t,e)}},fn,!0),wn=Math.log1p||function(t){return(t=+t)>-1e-8&&t<1e-8?t-t*t/2:Math.log(1+t)},Sn=Math.sqrt,Tn=Math.acosh;R(R.S+R.F*!(Tn&&710==Math.floor(Tn(Number.MAX_VALUE))&&Tn(1/0)==1/0),\"Math\",{acosh:function(t){return(t=+t)<1?NaN:t>94906265.62425156?Math.log(t)+Math.LN2:wn(t-1+Sn(t-1)*Sn(t+1))}});var En=Math.asinh;R(R.S+R.F*!(En&&1/En(0)>0),\"Math\",{asinh:n});var On=Math.atanh;R(R.S+R.F*!(On&&1/On(-0)<0),\"Math\",{atanh:function(t){return 0==(t=+t)?t:Math.log((1+t)/(1-t))/2}});var Pn=Math.sign||function(t){return 0==(t=+t)||t!=t?t:t<0?-1:1};R(R.S,\"Math\",{cbrt:function(t){return Pn(t=+t)*Math.pow(Math.abs(t),1/3)}}),R(R.S,\"Math\",{clz32:function(t){return(t>>>=0)?31-Math.floor(Math.log(t+.5)*Math.LOG2E):32}});var Mn=Math.exp;R(R.S,\"Math\",{cosh:function(t){return(Mn(t=+t)+Mn(-t))/2}});var Fn=Math.expm1,jn=!Fn||Fn(10)>22025.465794806718||Fn(10)<22025.465794806718||-2e-17!=Fn(-2e-17)?function(t){return 0==(t=+t)?t:t>-1e-6&&t<1e-6?t+t*t/2:Math.exp(t)-1}:Fn;R(R.S+R.F*(jn!=Math.expm1),\"Math\",{expm1:jn});var Dn=Math.pow,xn=Dn(2,-52),In=Dn(2,-23),An=Dn(2,127)*(2-In),Ln=Dn(2,-126),Rn=function(t){return t+1/xn-1/xn},Nn=Math.fround||function(t){var e,n,r=Math.abs(t),o=Pn(t);return r<Ln?o*Rn(r/Ln/In)*Ln*In:(e=(1+In/xn)*r,n=e-(e-r),n>An||n!=n?o*(1/0):o*n)};R(R.S,\"Math\",{fround:Nn});var Cn=Math.abs;R(R.S,\"Math\",{hypot:function(t,e){for(var n,r,o=0,i=0,a=arguments.length,u=0;i<a;)n=Cn(arguments[i++]),u<n?(r=u/n,o=o*r*r+1,u=n):n>0?(r=n/u,o+=r*r):o+=n;return u===1/0?1/0:u*Math.sqrt(o)}});var zn=Math.imul;R(R.S+R.F*d(function(){return-5!=zn(4294967295,5)||2!=zn.length}),\"Math\",{imul:function(t,e){var n=+t,r=+e,o=65535&n,i=65535&r;return 0|o*i+((65535&n>>>16)*i+o*(65535&r>>>16)<<16>>>0)}}),R(R.S,\"Math\",{log10:function(t){return Math.log(t)*Math.LOG10E}}),R(R.S,\"Math\",{log1p:wn}),R(R.S,\"Math\",{log2:function(t){return Math.log(t)/Math.LN2}}),R(R.S,\"Math\",{sign:Pn});var Zn=Math.exp;R(R.S+R.F*d(function(){return-2e-17!=!Math.sinh(-2e-17)}),\"Math\",{sinh:function(t){return Math.abs(t=+t)<1?(jn(t)-jn(-t))/2:(Zn(t-1)-Zn(-t-1))*(Math.E/2)}});var Hn=Math.exp;R(R.S,\"Math\",{tanh:function(t){var e=jn(t=+t),n=jn(-t);return e==1/0?1:n==1/0?-1:(e-n)/(Hn(t)+Hn(-t))}}),R(R.S,\"Math\",{trunc:function(t){return(t>0?Math.floor:Math.ceil)(t)}});var Wn=et.concat(\"length\",\"prototype\"),Bn=Object.getOwnPropertyNames||function(t){return tt(t,Wn)},qn={f:Bn},Un=\"\\t\\n\\v\\f\\r   ᠎             　\\u2028\\u2029\\ufeff\",Vn=\"[\"+Un+\"]\",Gn=\"​\",Xn=RegExp(\"^\"+Vn+Vn+\"*\"),Yn=RegExp(Vn+Vn+\"*$\"),Kn=function(t,e,n){var r={},o=d(function(){return!!Un[t]()||Gn[t]()!=Gn}),i=r[t]=o?e(Jn):Un[t];n&&(r[n]=i),R(R.P+R.F*o,\"String\",r)},Jn=Kn.trim=function(t,e){return t=String(c(t)),1&e&&(t=t.replace(Xn,\"\")),2&e&&(t=t.replace(Yn,\"\")),t},$n=Kn,Qn=qn.f,tr=dn.f,er=T.f,nr=$n.trim,rr=l.Number,or=rr,ir=rr.prototype,ar=\"Number\"==z(st(ir)),ur=\"trim\"in String.prototype,cr=function(t){var e=k(t,!1);if(\"string\"==typeof e&&e.length>2){e=ur?e.trim():nr(e,3);var n,r,o,i=e.charCodeAt(0);if(43===i||45===i){if(88===(n=e.charCodeAt(2))||120===n)return NaN}else if(48===i){switch(e.charCodeAt(1)){case 66:case 98:r=2,o=49;break;case 79:case 111:r=8,o=55;break;default:return+e}for(var a,u=e.slice(2),c=0,s=u.length;c<s;c++)if((a=u.charCodeAt(c))<48||a>o)return NaN;return parseInt(u,r)}}return+e};if(!rr(\" 0o1\")||!rr(\"0b1\")||rr(\"+0x1\")){rr=function(t){var e=arguments.length<1?0:t,n=this;return n instanceof rr&&(ar?d(function(){ir.valueOf.call(n)}):\"Number\"!=z(n))?bn(new or(cr(e)),n,rr):cr(e)};for(var sr,fr=g?Qn(or):\"MAX_VALUE,MIN_VALUE,NaN,NEGATIVE_INFINITY,POSITIVE_INFINITY,EPSILON,isFinite,isInteger,isNaN,isSafeInteger,MAX_SAFE_INTEGER,MIN_SAFE_INTEGER,parseFloat,parseInt,isInteger\".split(\",\"),lr=0;fr.length>lr;lr++)M(or,sr=fr[lr])&&!M(rr,sr)&&er(rr,sr,tr(or,sr));rr.prototype=ir,ir.constructor=rr,x(l,\"Number\",rr)}var hr=function(t,e){if(\"number\"!=typeof t&&\"Number\"!=z(t))throw TypeError(e);return+t},pr=function(t){var e=String(c(this)),n=\"\",r=u(t);if(r<0||r==1/0)throw RangeError(\"Count can't be negative\");for(;r>0;(r>>>=1)&&(e+=e))1&r&&(n+=e);return n},vr=1..toFixed,dr=Math.floor,gr=[0,0,0,0,0,0],yr=\"Number.toFixed: incorrect invocation!\",mr=function(t,e){for(var n=-1,r=e;++n<6;)r+=t*gr[n],gr[n]=r%1e7,r=dr(r/1e7)},br=function(t){for(var e=6,n=0;--e>=0;)n+=gr[e],gr[e]=dr(n/t),n=n%t*1e7},_r=function(){for(var t=6,e=\"\";--t>=0;)if(\"\"!==e||0===t||0!==gr[t]){var n=String(gr[t]);e=\"\"===e?n:e+pr.call(\"0\",7-n.length)+n}return e},kr=function(t,e,n){return 0===e?n:e%2==1?kr(t,e-1,n*t):kr(t*t,e/2,n)},wr=function(t){for(var e=0,n=t;n>=4096;)e+=12,n/=4096;for(;n>=2;)e+=1,n/=2;return e};R(R.P+R.F*(!!vr&&(\"0.000\"!==8e-5.toFixed(3)||\"1\"!==.9.toFixed(0)||\"1.25\"!==1.255.toFixed(2)||\"1000000000000000128\"!==(0xde0b6b3a7640080).toFixed(0))||!d(function(){vr.call({})})),\"Number\",{toFixed:function(t){var e,n,r,o,i=hr(this,yr),a=u(t),c=\"\",s=\"0\";if(a<0||a>20)throw RangeError(yr);if(i!=i)return\"NaN\";if(i<=-1e21||i>=1e21)return String(i);if(i<0&&(c=\"-\",i=-i),i>1e-21)if(e=wr(i*kr(2,69,1))-69,n=e<0?i*kr(2,-e,1):i/kr(2,e,1),n*=4503599627370496,(e=52-e)>0){for(mr(0,n),r=a;r>=7;)mr(1e7,0),r-=7;for(mr(kr(10,r,1),0),r=e-1;r>=23;)br(1<<23),r-=23;br(1<<r),mr(1,1),br(2),s=_r()}else mr(0,n),mr(1<<-e,0),s=_r()+pr.call(\"0\",a);return a>0?(o=s.length,s=c+(o<=a?\"0.\"+pr.call(\"0\",a-o)+s:s.slice(0,o-a)+\".\"+s.slice(o-a))):s=c+s,s}});var Sr=1..toPrecision;R(R.P+R.F*(d(function(){return\"1\"!==Sr.call(1,void 0)})||!d(function(){Sr.call({})})),\"Number\",{toPrecision:function(t){var e=hr(this,\"Number#toPrecision: incorrect invocation!\");return void 0===t?Sr.call(e):Sr.call(e,t)}}),R(R.S,\"Number\",{EPSILON:Math.pow(2,-52)});var Tr=l.isFinite;R(R.S,\"Number\",{isFinite:function(t){return\"number\"==typeof t&&Tr(t)}});var Er=Math.floor,Or=function(t){return!p(t)&&isFinite(t)&&Er(t)===t};R(R.S,\"Number\",{isInteger:Or}),R(R.S,\"Number\",{isNaN:function(t){return t!=t}});var Pr=Math.abs;R(R.S,\"Number\",{isSafeInteger:function(t){return Or(t)&&Pr(t)<=9007199254740991}}),R(R.S,\"Number\",{MAX_SAFE_INTEGER:9007199254740991}),R(R.S,\"Number\",{MIN_SAFE_INTEGER:-9007199254740991});var Mr=l.parseFloat,Fr=$n.trim,jr=1/Mr(Un+\"-0\")!=-1/0?function(t){var e=Fr(String(t),3),n=Mr(e);return 0===n&&\"-\"==e.charAt(0)?-0:n}:Mr;R(R.S+R.F*(Number.parseFloat!=jr),\"Number\",{parseFloat:jr});var Dr=l.parseInt,xr=$n.trim,Ir=/^[-+]?0[xX]/,Ar=8!==Dr(Un+\"08\")||22!==Dr(Un+\"0x16\")?function(t,e){var n=xr(String(t),3);return Dr(n,e>>>0||(Ir.test(n)?16:10))}:Dr;R(R.S+R.F*(Number.parseInt!=Ar),\"Number\",{parseInt:Ar});var Lr=ft,Rr={f:Lr},Nr=T.f,Cr=Object.getOwnPropertySymbols,zr={f:Cr},Zr=function(t){var e=nt(t),n=zr.f;if(n)for(var r,o=n(t),i=hn.f,a=0;o.length>a;)i.call(t,r=o[a++])&&e.push(r);return e},Hr=qn.f,Wr={}.toString,Br=\"object\"==typeof window&&window&&Object.getOwnPropertyNames?Object.getOwnPropertyNames(window):[],qr=function(t){try{return Hr(t)}catch(t){return Br.slice()}},Ur=function(t){return Br&&\"[object Window]\"==Wr.call(t)?qr(t):Hr(H(t))},Vr={f:Ur},Gr=rn.KEY,Xr=dn.f,Yr=T.f,Kr=Vr.f,Jr=l.Symbol,$r=l.JSON,Qr=$r&&$r.stringify,to=ft(\"_hidden\"),eo=ft(\"toPrimitive\"),no={}.propertyIsEnumerable,ro=Y(\"symbol-registry\"),oo=Y(\"symbols\"),io=Y(\"op-symbols\"),ao=Object.prototype,uo=\"function\"==typeof Jr,co=l.QObject,so=!co||!co.prototype||!co.prototype.findChild,fo=g&&d(function(){return 7!=st(Yr({},\"a\",{get:function(){return Yr(this,\"a\",{value:7}).a}})).a})?function(t,e,n){var r=Xr(ao,e);r&&delete ao[e],Yr(t,e,n),r&&t!==ao&&Yr(ao,e,r)}:Yr,lo=function(t){var e=oo[t]=st(Jr.prototype);return e._k=t,e},ho=uo&&\"symbol\"==typeof Jr.iterator?function(t){return\"symbol\"==typeof t}:function(t){return t instanceof Jr},po=function(t,e,n){return t===ao&&po(io,e,n),v(t),e=k(e,!0),v(n),M(oo,e)?(n.enumerable?(M(t,to)&&t[to][e]&&(t[to][e]=!1),n=st(n,{enumerable:E(0,!1)})):(M(t,to)||Yr(t,to,E(1,{})),t[to][e]=!0),fo(t,e,n)):Yr(t,e,n)},vo=function(t,e){v(t);for(var n,r=Zr(e=H(e)),o=0,i=r.length;i>o;)po(t,n=r[o++],e[n]);return t},go=function(t,e){return void 0===e?st(t):vo(st(t),e)},yo=function(t){var e=no.call(this,t=k(t,!0));return!(this===ao&&M(oo,t)&&!M(io,t))&&(!(e||!M(this,t)||!M(oo,t)||M(this,to)&&this[to][t])||e)},mo=function(t,e){if(t=H(t),e=k(e,!0),t!==ao||!M(oo,e)||M(io,e)){var n=Xr(t,e);return!n||!M(oo,e)||M(t,to)&&t[to][e]||(n.enumerable=!0),n}},bo=function(t){for(var e,n=Kr(H(t)),r=[],o=0;n.length>o;)M(oo,e=n[o++])||e==to||e==Gr||r.push(e);return r},_o=function(t){for(var e,n=t===ao,r=Kr(n?io:H(t)),o=[],i=0;r.length>i;)!M(oo,e=r[i++])||n&&!M(ao,e)||o.push(oo[e]);return o};uo||(Jr=function(){if(this instanceof Jr)throw TypeError(\"Symbol is not a constructor!\");var t=D(arguments.length>0?arguments[0]:void 0),e=function(n){this===ao&&e.call(io,n),M(this,to)&&M(this[to],t)&&(this[to][t]=!1),fo(this,t,E(1,n))};return g&&so&&fo(ao,t,{configurable:!0,set:e}),lo(t)},x(Jr.prototype,\"toString\",function(){return this._k}),dn.f=mo,T.f=po,qn.f=Vr.f=bo,hn.f=yo,zr.f=_o,g&&x(ao,\"propertyIsEnumerable\",yo,!0),Rr.f=function(t){return lo(ft(t))}),R(R.G+R.W+R.F*!uo,{Symbol:Jr});for(var ko=\"hasInstance,isConcatSpreadable,iterator,match,replace,search,species,split,toPrimitive,toStringTag,unscopables\".split(\",\"),wo=0;ko.length>wo;)ft(ko[wo++]);for(var So=nt(ft.store),To=0;So.length>To;)!function(t){var e=h.Symbol||(h.Symbol=l.Symbol||{});\"_\"==t.charAt(0)||t in e||Nr(e,t,{value:Rr.f(t)})}(So[To++]);R(R.S+R.F*!uo,\"Symbol\",{for:function(t){return M(ro,t+=\"\")?ro[t]:ro[t]=Jr(t)},keyFor:function(t){if(!ho(t))throw TypeError(t+\" is not a symbol!\");for(var e in ro)if(ro[e]===t)return e},useSetter:function(){so=!0},useSimple:function(){so=!1}}),R(R.S+R.F*!uo,\"Object\",{create:go,defineProperty:po,defineProperties:vo,getOwnPropertyDescriptor:mo,getOwnPropertyNames:bo,getOwnPropertySymbols:_o}),$r&&R(R.S+R.F*(!uo||d(function(){var t=Jr();return\"[null]\"!=Qr([t])||\"{}\"!=Qr({a:t})||\"{}\"!=Qr(Object(t))})),\"JSON\",{stringify:function(t){if(void 0!==t&&!ho(t)){for(var e,n,r=[t],o=1;arguments.length>o;)r.push(arguments[o++]);return e=r[1],\"function\"==typeof e&&(n=e),!n&&Et(e)||(e=function(t,e){if(n&&(e=n.call(this,t,e)),!ho(e))return e}),r[1]=e,Qr.apply($r,r)}}}),Jr.prototype[eo]||O(Jr.prototype,eo,Jr.prototype.valueOf),pt(Jr,\"Symbol\"),pt(Math,\"Math\",!0),pt(l.JSON,\"JSON\",!0),R(R.S,\"Object\",{create:st}),R(R.S+R.F*!g,\"Object\",{defineProperty:T.f}),R(R.S+R.F*!g,\"Object\",{defineProperties:rt});var Eo=function(t,e){var n=(h.Object||{})[t]||Object[t],r={};r[t]=e(n),R(R.S+R.F*d(function(){n(1)}),\"Object\",r)},Oo=dn.f;Eo(\"getOwnPropertyDescriptor\",function(){return function(t,e){return Oo(H(t),e)}}),Eo(\"getPrototypeOf\",function(){return function(t){return bt(gt(t))}}),Eo(\"keys\",function(){return function(t){return nt(gt(t))}}),Eo(\"getOwnPropertyNames\",function(){return Vr.f});var Po=rn.onFreeze;Eo(\"freeze\",function(t){return function(e){return t&&p(e)?t(Po(e)):e}});var Mo=rn.onFreeze;Eo(\"seal\",function(t){return function(e){return t&&p(e)?t(Mo(e)):e}});var Fo=rn.onFreeze;Eo(\"preventExtensions\",function(t){return function(e){return t&&p(e)?t(Fo(e)):e}}),Eo(\"isFrozen\",function(t){return function(e){return!p(e)||!!t&&t(e)}}),Eo(\"isSealed\",function(t){return function(e){return!p(e)||!!t&&t(e)}}),Eo(\"isExtensible\",function(t){return function(e){return!!p(e)&&(!t||t(e))}});var jo=Object.assign,Do=!jo||d(function(){\nvar t={},e={},n=Symbol(),r=\"abcdefghijklmnopqrst\";return t[n]=7,r.split(\"\").forEach(function(t){e[t]=t}),7!=jo({},t)[n]||Object.keys(jo({},e)).join(\"\")!=r})?function(t,e){for(var n=gt(t),r=arguments.length,o=1,i=zr.f,a=hn.f;r>o;)for(var u,c=Z(arguments[o++]),s=i?nt(c).concat(i(c)):nt(c),f=s.length,l=0;f>l;)a.call(c,u=s[l++])&&(n[u]=c[u]);return n}:jo;R(R.S+R.F,\"Object\",{assign:Do});var xo=Object.is||function(t,e){return t===e?0!==t||1/t==1/e:t!=t&&e!=e};R(R.S,\"Object\",{is:xo}),R(R.S,\"Object\",{setPrototypeOf:yn.set}),R(R.G+R.F*(parseFloat!=jr),{parseFloat:jr}),R(R.G+R.F*(parseInt!=Ar),{parseInt:Ar});var Io=(l.Reflect||{}).apply,Ao=Function.apply;R(R.S+R.F*!d(function(){Io(function(){})}),\"Reflect\",{apply:function(t,e,n){var r=I(t),o=v(n);return Io?Io(r,e,o):Ao.call(r,e,o)}});var Lo=(l.Reflect||{}).construct,Ro=d(function(){function t(){}return!(Lo(function(){},[],t)instanceof t)}),No=!d(function(){Lo(function(){})});R(R.S+R.F*(Ro||No),\"Reflect\",{construct:function(t,e){I(t),v(e);var n=arguments.length<3?t:I(arguments[2]);if(No&&!Ro)return Lo(t,e,n);if(t==n){switch(e.length){case 0:return new t;case 1:return new t(e[0]);case 2:return new t(e[0],e[1]);case 3:return new t(e[0],e[1],e[2]);case 4:return new t(e[0],e[1],e[2],e[3])}var r=[null];return r.push.apply(r,e),new(Re.apply(t,r))}var o=n.prototype,i=st(p(o)?o:Object.prototype),a=Function.apply.call(t,i,e);return p(a)?a:i}}),R(R.S+R.F*d(function(){Reflect.defineProperty(T.f({},1,{value:1}),1,{value:2})}),\"Reflect\",{defineProperty:function(t,e,n){v(t),e=k(e,!0),v(n);try{return T.f(t,e,n),!0}catch(t){return!1}}});var Co=dn.f;R(R.S,\"Reflect\",{deleteProperty:function(t,e){var n=Co(v(t),e);return!(n&&!n.configurable)&&delete t[e]}});var zo=function(t){this._t=v(t),this._i=0;var e,n=this._k=[];for(e in t)n.push(e)};dt(zo,\"Object\",function(){var t,e=this,n=e._k;do{if(e._i>=n.length)return{value:void 0,done:!0}}while(!((t=n[e._i++])in e._t));return{value:t,done:!1}}),R(R.S,\"Reflect\",{enumerate:function(t){return new zo(t)}}),R(R.S,\"Reflect\",{get:r}),R(R.S,\"Reflect\",{getOwnPropertyDescriptor:function(t,e){return dn.f(v(t),e)}}),R(R.S,\"Reflect\",{getPrototypeOf:function(t){return bt(v(t))}}),R(R.S,\"Reflect\",{has:function(t,e){return e in t}});var Zo=Object.isExtensible;R(R.S,\"Reflect\",{isExtensible:function(t){return v(t),!Zo||Zo(t)}});var Ho=l.Reflect,Wo=Ho&&Ho.ownKeys||function(t){var e=qn.f(v(t)),n=zr.f;return n?e.concat(n(t)):e};R(R.S,\"Reflect\",{ownKeys:Wo});var Bo=Object.preventExtensions;R(R.S,\"Reflect\",{preventExtensions:function(t){v(t);try{return Bo&&Bo(t),!0}catch(t){return!1}}}),R(R.S,\"Reflect\",{set:o}),yn&&R(R.S,\"Reflect\",{setPrototypeOf:function(t,e){yn.check(t,e);try{return yn.set(t,e),!0}catch(t){return!1}}});var qo=ft(\"match\"),Uo=function(t){var e;return p(t)&&(void 0!==(e=t[qo])?!!e:\"RegExp\"==z(t))},Vo=function(){var t=v(this),e=\"\";return t.global&&(e+=\"g\"),t.ignoreCase&&(e+=\"i\"),t.multiline&&(e+=\"m\"),t.unicode&&(e+=\"u\"),t.sticky&&(e+=\"y\"),e},Go=T.f,Xo=qn.f,Yo=l.RegExp,Ko=Yo,Jo=Yo.prototype,$o=/a/g,Qo=/a/g,ti=new Yo($o)!==$o;if(g&&(!ti||d(function(){return Qo[ft(\"match\")]=!1,Yo($o)!=$o||Yo(Qo)==Qo||\"/a/i\"!=Yo($o,\"i\")}))){Yo=function(t,e){var n=this instanceof Yo,r=Uo(t),o=void 0===e;return!n&&r&&t.constructor===Yo&&o?t:bn(ti?new Ko(r&&!o?t.source:t,e):Ko((r=t instanceof Yo)?t.source:t,r&&o?Vo.call(t):e),n?this:Jo,Yo)};for(var ei=Xo(Ko),ni=0;ei.length>ni;)!function(t){t in Yo||Go(Yo,t,{configurable:!0,get:function(){return Ko[t]},set:function(e){Ko[t]=e}})}(ei[ni++]);Jo.constructor=Yo,Yo.prototype=Jo,x(l,\"RegExp\",Yo)}me(\"RegExp\"),g&&\"g\"!=/./g.flags&&T.f(RegExp.prototype,\"flags\",{configurable:!0,get:Vo});var ri=/./.toString,oi=function(t){x(RegExp.prototype,\"toString\",t,!0)};d(function(){return\"/a/b\"!=ri.call({source:\"a\",flags:\"b\"})})?oi(function(){var t=v(this);return\"/\".concat(t.source,\"/\",\"flags\"in t?t.flags:!g&&t instanceof RegExp?Vo.call(t):void 0)}):\"toString\"!=ri.name&&oi(function(){return ri.call(this)});var ii=function(t,e,n){var r=ft(t),o=n(c,r,\"\"[t]),i=o[0],a=o[1];d(function(){var e={};return e[r]=function(){return 7},7!=\"\"[t](e)})&&(x(String.prototype,t,i),O(RegExp.prototype,r,2==e?function(t,e){return a.call(t,this,e)}:function(t){return a.call(t,this)}))};ii(\"match\",1,function(t,e,n){return[function(n){var r=t(this),o=void 0==n?void 0:n[e];return void 0!==o?o.call(n,r):new RegExp(n)[e](String(r))},n]}),ii(\"replace\",2,function(t,e,n){return[function(r,o){var i=t(this),a=void 0==r?void 0:r[e];return void 0!==a?a.call(r,i,o):n.call(String(i),r,o)},n]}),ii(\"search\",1,function(t,e,n){return[function(n){var r=t(this),o=void 0==n?void 0:n[e];return void 0!==o?o.call(n,r):new RegExp(n)[e](String(r))},n]}),ii(\"split\",2,function(t,e,n){var r=Uo,o=n,i=[].push,a=\"length\";if(\"c\"==\"abbc\".split(/(b)*/)[1]||4!=\"test\".split(/(?:)/,-1)[a]||2!=\"ab\".split(/(?:ab)*/)[a]||4!=\".\".split(/(.?)(.?)/)[a]||\".\".split(/()()/)[a]>1||\"\".split(/.?/)[a]){var u=void 0===/()??/.exec(\"\")[1];n=function(t,e){var n=String(this);if(void 0===t&&0===e)return[];if(!r(t))return o.call(n,t,e);var c,s,f,l,h,p=[],v=(t.ignoreCase?\"i\":\"\")+(t.multiline?\"m\":\"\")+(t.unicode?\"u\":\"\")+(t.sticky?\"y\":\"\"),d=0,g=void 0===e?4294967295:e>>>0,y=new RegExp(t.source,v+\"g\");for(u||(c=new RegExp(\"^\"+y.source+\"$(?!\\\\s)\",v));(s=y.exec(n))&&!((f=s.index+s[0][a])>d&&(p.push(n.slice(d,s.index)),!u&&s[a]>1&&s[0].replace(c,function(){for(h=1;h<arguments[a]-2;h++)void 0===arguments[h]&&(s[h]=void 0)}),s[a]>1&&s.index<n[a]&&i.apply(p,s.slice(1)),l=s[0][a],d=f,p[a]>=g));)y.lastIndex===s.index&&y.lastIndex++;return d===n[a]?!l&&y.test(\"\")||p.push(\"\"):p.push(n.slice(d)),p[a]>g?p.slice(0,g):p}}else\"0\".split(void 0,0)[a]&&(n=function(t,e){return void 0===t&&0===e?[]:o.call(this,t,e)});return[function(r,o){var i=t(this),a=void 0==r?void 0:r[e];return void 0!==a?a.call(r,i,o):n.call(String(i),r,o)},n]});var ai=_n(\"Set\",function(t){return function(){return t(this,arguments.length>0?arguments[0]:void 0)}},{add:function(t){return fn.def(on(this,\"Set\"),t=0===t?0:t,t)}},fn),ui=String.fromCharCode,ci=String.fromCodePoint;R(R.S+R.F*(!!ci&&1!=ci.length),\"String\",{fromCodePoint:function(t){for(var e,n=[],r=arguments.length,o=0;r>o;){if(e=+arguments[o++],V(e,1114111)!==e)throw RangeError(e+\" is not a valid code point\");n.push(e<65536?ui(e):ui(55296+((e-=65536)>>10),e%1024+56320))}return n.join(\"\")}}),R(R.S,\"String\",{raw:function(t){for(var e=H(t.raw),n=B(e.length),r=arguments.length,o=[],i=0;n>i;)o.push(String(e[i++])),i<r&&o.push(String(arguments[i]));return o.join(\"\")}}),$n(\"trim\",function(t){return function(){return t(this,3)}});var si=s(!1);R(R.P,\"String\",{codePointAt:function(t){return si(this,t)}});var fi=function(t,e,n){if(Uo(e))throw TypeError(\"String#\"+n+\" doesn't accept regex!\");return String(c(t))},li=ft(\"match\"),hi=function(t){var e=/./;try{\"/./\"[t](e)}catch(n){try{return e[li]=!1,!\"/./\"[t](e)}catch(t){}}return!0},pi=\"\".endsWith;R(R.P+R.F*hi(\"endsWith\"),\"String\",{endsWith:function(t){var e=fi(this,t,\"endsWith\"),n=arguments.length>1?arguments[1]:void 0,r=B(e.length),o=void 0===n?r:Math.min(B(n),r),i=String(t);return pi?pi.call(e,i,o):e.slice(o-i.length,o)===i}});R(R.P+R.F*hi(\"includes\"),\"String\",{includes:function(t){return!!~fi(this,t,\"includes\").indexOf(t,arguments.length>1?arguments[1]:void 0)}}),R(R.P,\"String\",{repeat:pr});var vi=\"\".startsWith;R(R.P+R.F*hi(\"startsWith\"),\"String\",{startsWith:function(t){var e=fi(this,t,\"startsWith\"),n=B(Math.min(arguments.length>1?arguments[1]:void 0,e.length)),r=String(t);return vi?vi.call(e,r,n):e.slice(n,n+r.length)===r}});var di=/\"/g,gi=function(t,e,n,r){var o=String(c(t)),i=\"<\"+e;return\"\"!==n&&(i+=\" \"+n+'=\"'+String(r).replace(di,\"&quot;\")+'\"'),i+\">\"+o+\"</\"+e+\">\"},yi=function(t,e){var n={};n[t]=e(gi),R(R.P+R.F*d(function(){var e=\"\"[t]('\"');return e!==e.toLowerCase()||e.split('\"').length>3}),\"String\",n)};yi(\"anchor\",function(t){return function(e){return t(this,\"a\",\"name\",e)}}),yi(\"big\",function(t){return function(){return t(this,\"big\",\"\",\"\")}}),yi(\"blink\",function(t){return function(){return t(this,\"blink\",\"\",\"\")}}),yi(\"bold\",function(t){return function(){return t(this,\"b\",\"\",\"\")}}),yi(\"fixed\",function(t){return function(){return t(this,\"tt\",\"\",\"\")}}),yi(\"fontcolor\",function(t){return function(e){return t(this,\"font\",\"color\",e)}}),yi(\"fontsize\",function(t){return function(e){return t(this,\"font\",\"size\",e)}}),yi(\"italics\",function(t){return function(){return t(this,\"i\",\"\",\"\")}}),yi(\"link\",function(t){return function(e){return t(this,\"a\",\"href\",e)}}),yi(\"small\",function(t){return function(){return t(this,\"small\",\"\",\"\")}}),yi(\"strike\",function(t){return function(){return t(this,\"strike\",\"\",\"\")}}),yi(\"sub\",function(t){return function(){return t(this,\"sub\",\"\",\"\")}}),yi(\"sup\",function(t){return function(){return t(this,\"sup\",\"\",\"\")}});for(var mi,bi=D(\"typed_array\"),_i=D(\"view\"),ki=!(!l.ArrayBuffer||!l.DataView),wi=ki,Si=0,Ti=\"Int8Array,Uint8Array,Uint8ClampedArray,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array\".split(\",\");Si<9;)(mi=l[Ti[Si++]])?(O(mi.prototype,bi,!0),O(mi.prototype,_i,!0)):wi=!1;var Ei={ABV:ki,CONSTR:wi,TYPED:bi,VIEW:_i},Oi=function(t){if(void 0===t)return 0;var e=u(t),n=B(e);if(e!==n)throw RangeError(\"Wrong length!\");return n},Pi=e(function(t,e){function n(t,e,n){var r,o,i,a=Array(n),u=8*n-e-1,c=(1<<u)-1,s=c>>1,f=23===e?j(2,-24)-j(2,-77):0,l=0,h=t<0||0===t&&1/t<0?1:0;for(t=F(t),t!=t||t===P?(o=t!=t?1:0,r=c):(r=D(x(t)/I),t*(i=j(2,-r))<1&&(r--,i*=2),t+=r+s>=1?f/i:f*j(2,1-s),t*i>=2&&(r++,i/=2),r+s>=c?(o=0,r=c):r+s>=1?(o=(t*i-1)*j(2,e),r+=s):(o=t*j(2,s-1)*j(2,e),r=0));e>=8;a[l++]=255&o,o/=256,e-=8);for(r=r<<e|o,u+=e;u>0;a[l++]=255&r,r/=256,u-=8);return a[--l]|=128*h,a}function r(t,e,n){var r,o=8*n-e-1,i=(1<<o)-1,a=i>>1,u=o-7,c=n-1,s=t[c--],f=127&s;for(s>>=7;u>0;f=256*f+t[c],c--,u-=8);for(r=f&(1<<-u)-1,f>>=-u,u+=e;u>0;r=256*r+t[c],c--,u-=8);if(0===f)f=1-a;else{if(f===i)return r?NaN:s?-P:P;r+=j(2,e),f-=a}return(s?-1:1)*r*j(2,f-e)}function o(t){return t[3]<<24|t[2]<<16|t[1]<<8|t[0]}function i(t){return[255&t]}function a(t){return[255&t,t>>8&255]}function c(t){return[255&t,t>>8&255,t>>16&255,t>>24&255]}function s(t){return n(t,52,8)}function f(t){return n(t,23,4)}function h(t,e,n){m(t[b],e,{get:function(){return this[n]}})}function p(t,e,n,r){var o=+n,i=Oi(o);if(i+e>t[L])throw E(_);var a=t[A]._b,u=i+t[R],c=a.slice(u,u+e);return r?c:c.reverse()}function v(t,e,n,r,o,i){var a=+n,u=Oi(a);if(u+e>t[L])throw E(_);for(var c=t[A]._b,s=u+t[R],f=r(+o),l=0;l<e;l++)c[s+l]=f[i?l:e-l-1]}var y=qn.f,m=T.f,b=\"prototype\",_=\"Wrong index!\",k=l.ArrayBuffer,w=l.DataView,S=l.Math,E=l.RangeError,P=l.Infinity,M=k,F=S.abs,j=S.pow,D=S.floor,x=S.log,I=S.LN2,A=g?\"_b\":\"buffer\",L=g?\"_l\":\"byteLength\",R=g?\"_o\":\"byteOffset\";if(Ei.ABV){if(!d(function(){k(1)})||!d(function(){new k(-1)})||d(function(){return new k,new k(1.5),new k(NaN),\"ArrayBuffer\"!=k.name})){k=function(t){return en(this,k),new M(Oi(t))};for(var N,C=k[b]=M[b],z=y(M),Z=0;z.length>Z;)(N=z[Z++])in k||O(k,N,M[N]);C.constructor=k}var H=new w(new k(2)),W=w[b].setInt8;H.setInt8(0,2147483648),H.setInt8(1,2147483649),!H.getInt8(0)&&H.getInt8(1)||tn(w[b],{setInt8:function(t,e){W.call(this,t,e<<24>>24)},setUint8:function(t,e){W.call(this,t,e<<24>>24)}},!0)}else k=function(t){en(this,k,\"ArrayBuffer\");var e=Oi(t);this._b=he.call(Array(e),0),this[L]=e},w=function(t,e,n){en(this,w,\"DataView\"),en(t,k,\"DataView\");var r=t[L],o=u(e);if(o<0||o>r)throw E(\"Wrong offset!\");if(n=void 0===n?r-o:B(n),o+n>r)throw E(\"Wrong length!\");this[A]=t,this[R]=o,this[L]=n},g&&(h(k,\"byteLength\",\"_l\"),h(w,\"buffer\",\"_b\"),h(w,\"byteLength\",\"_l\"),h(w,\"byteOffset\",\"_o\")),tn(w[b],{getInt8:function(t){return p(this,1,t)[0]<<24>>24},getUint8:function(t){return p(this,1,t)[0]},getInt16:function(t){var e=p(this,2,t,arguments[1]);return(e[1]<<8|e[0])<<16>>16},getUint16:function(t){var e=p(this,2,t,arguments[1]);return e[1]<<8|e[0]},getInt32:function(t){return o(p(this,4,t,arguments[1]))},getUint32:function(t){return o(p(this,4,t,arguments[1]))>>>0},getFloat32:function(t){return r(p(this,4,t,arguments[1]),23,4)},getFloat64:function(t){return r(p(this,8,t,arguments[1]),52,8)},setInt8:function(t,e){v(this,1,t,i,e)},setUint8:function(t,e){v(this,1,t,i,e)},setInt16:function(t,e){v(this,2,t,a,e,arguments[2])},setUint16:function(t,e){v(this,2,t,a,e,arguments[2])},setInt32:function(t,e){v(this,4,t,c,e,arguments[2])},setUint32:function(t,e){v(this,4,t,c,e,arguments[2])},setFloat32:function(t,e){v(this,4,t,f,e,arguments[2])},setFloat64:function(t,e){v(this,8,t,s,e,arguments[2])}});pt(k,\"ArrayBuffer\"),pt(w,\"DataView\"),O(w[b],Ei.VIEW,!0),e.ArrayBuffer=k,e.DataView=w}),Mi=ft(\"species\"),Fi=function(t,e){var n,r=v(t).constructor;return void 0===r||void 0==(n=v(r)[Mi])?e:I(n)},ji=l.ArrayBuffer,Di=Pi.ArrayBuffer,xi=Pi.DataView,Ii=Ei.ABV&&ji.isView,Ai=Di.prototype.slice,Li=Ei.VIEW;R(R.G+R.W+R.F*(ji!==Di),{ArrayBuffer:Di}),R(R.S+R.F*!Ei.CONSTR,\"ArrayBuffer\",{isView:function(t){return Ii&&Ii(t)||p(t)&&Li in t}}),R(R.P+R.U+R.F*d(function(){return!new Di(2).slice(1,void 0).byteLength}),\"ArrayBuffer\",{slice:function(t,e){if(void 0!==Ai&&void 0===e)return Ai.call(v(this),t);for(var n=v(this).byteLength,r=V(t,n),o=V(void 0===e?n:e,n),i=new(Fi(this,Di))(B(o-r)),a=new xi(this),u=new xi(i),c=0;r<o;)u.setUint8(c++,a.getUint8(r++));return i}}),me(\"ArrayBuffer\"),R(R.G+R.W+R.F*!Ei.ABV,{DataView:Pi.DataView});var Ri=e(function(t){if(g){var e=l,n=d,r=R,o=Ei,i=Pi,a=A,c=en,s=E,f=O,h=tn,v=u,y=B,m=Oi,b=V,_=k,w=M,S=At,P=p,F=gt,j=Ft,x=st,I=bt,L=qn.f,C=Rt,z=D,Z=ft,H=Yt,W=G,q=Fi,U=_e,X=N,Y=Zt,K=me,J=he,$=ce,Q=T,tt=dn,et=Q.f,nt=tt.f,rt=e.RangeError,ot=e.TypeError,it=e.Uint8Array,at=Array.prototype,ut=i.ArrayBuffer,ct=i.DataView,lt=H(0),ht=H(2),pt=H(3),vt=H(4),dt=H(5),yt=H(6),mt=W(!0),_t=W(!1),kt=U.values,wt=U.keys,St=U.entries,Tt=at.lastIndexOf,Et=at.reduce,Ot=at.reduceRight,Pt=at.join,Mt=at.sort,jt=at.slice,Dt=at.toString,xt=at.toLocaleString,It=Z(\"iterator\"),Lt=Z(\"toStringTag\"),Nt=z(\"typed_constructor\"),Ct=z(\"def_constructor\"),zt=o.CONSTR,Ht=o.TYPED,Wt=o.VIEW,Bt=H(1,function(t,e){return Xt(q(t,t[Ct]),e)}),qt=n(function(){return 1===new it(new Uint16Array([1]).buffer)[0]}),Ut=!!it&&!!it.prototype.set&&n(function(){new it(1).set({})}),Vt=function(t,e){var n=v(t);if(n<0||n%e)throw rt(\"Wrong offset!\");return n},Gt=function(t){if(P(t)&&Ht in t)return t;throw ot(t+\" is not a typed array!\")},Xt=function(t,e){if(!(P(t)&&Nt in t))throw ot(\"It is not a typed array constructor!\");return new t(e)},Kt=function(t,e){return Jt(q(t,t[Ct]),e)},Jt=function(t,e){for(var n=0,r=e.length,o=Xt(t,r);r>n;)o[n]=e[n++];return o},$t=function(t,e,n){et(t,e,{get:function(){return this._d[n]}})},Qt=function(t){var e,n,r,o,i,u,c=F(t),s=arguments.length,f=s>1?arguments[1]:void 0,l=void 0!==f,h=C(c);if(void 0!=h&&!j(h)){for(u=h.call(c),r=[],e=0;!(i=u.next()).done;e++)r.push(i.value);c=r}for(l&&s>2&&(f=a(f,arguments[2],2)),e=0,n=y(c.length),o=Xt(this,n);n>e;e++)o[e]=l?f(c[e],e):c[e];return o},te=function(){for(var t=0,e=arguments.length,n=Xt(this,e);e>t;)n[t]=arguments[t++];return n},ee=!!it&&n(function(){xt.call(new it(1))}),ne=function(){return xt.apply(ee?jt.call(Gt(this)):Gt(this),arguments)},re={copyWithin:function(t,e){return $.call(Gt(this),t,e,arguments.length>2?arguments[2]:void 0)},every:function(t){return vt(Gt(this),t,arguments.length>1?arguments[1]:void 0)},fill:function(t){return J.apply(Gt(this),arguments)},filter:function(t){return Kt(this,ht(Gt(this),t,arguments.length>1?arguments[1]:void 0))},find:function(t){return dt(Gt(this),t,arguments.length>1?arguments[1]:void 0)},findIndex:function(t){return yt(Gt(this),t,arguments.length>1?arguments[1]:void 0)},forEach:function(t){lt(Gt(this),t,arguments.length>1?arguments[1]:void 0)},indexOf:function(t){return _t(Gt(this),t,arguments.length>1?arguments[1]:void 0)},includes:function(t){return mt(Gt(this),t,arguments.length>1?arguments[1]:void 0)},join:function(t){return Pt.apply(Gt(this),arguments)},lastIndexOf:function(t){return Tt.apply(Gt(this),arguments)},map:function(t){return Bt(Gt(this),t,arguments.length>1?arguments[1]:void 0)},reduce:function(t){return Et.apply(Gt(this),arguments)},reduceRight:function(t){return Ot.apply(Gt(this),arguments)},reverse:function(){for(var t,e=this,n=Gt(e).length,r=Math.floor(n/2),o=0;o<r;)t=e[o],e[o++]=e[--n],e[n]=t;return e},some:function(t){return pt(Gt(this),t,arguments.length>1?arguments[1]:void 0)},sort:function(t){return Mt.call(Gt(this),t)},subarray:function(t,e){var n=Gt(this),r=n.length,o=b(t,r);return new(q(n,n[Ct]))(n.buffer,n.byteOffset+o*n.BYTES_PER_ELEMENT,y((void 0===e?r:b(e,r))-o))}},oe=function(t,e){return Kt(this,jt.call(Gt(this),t,e))},ie=function(t){Gt(this);var e=Vt(arguments[1],1),n=this.length,r=F(t),o=y(r.length),i=0;if(o+e>n)throw rt(\"Wrong length!\");for(;i<o;)this[e+i]=r[i++]},ae={entries:function(){return St.call(Gt(this))},keys:function(){return wt.call(Gt(this))},values:function(){return kt.call(Gt(this))}},ue=function(t,e){return P(t)&&t[Ht]&&\"symbol\"!=typeof e&&e in t&&String(+e)==String(e)},se=function(t,e){return ue(t,e=_(e,!0))?s(2,t[e]):nt(t,e)},fe=function(t,e,n){return!(ue(t,e=_(e,!0))&&P(n)&&w(n,\"value\"))||w(n,\"get\")||w(n,\"set\")||n.configurable||w(n,\"writable\")&&!n.writable||w(n,\"enumerable\")&&!n.enumerable?et(t,e,n):(t[e]=n.value,t)};zt||(tt.f=se,Q.f=fe),r(r.S+r.F*!zt,\"Object\",{getOwnPropertyDescriptor:se,defineProperty:fe}),n(function(){Dt.call({})})&&(Dt=xt=function(){return Pt.call(this)});var le=h({},re);h(le,ae),f(le,It,ae.values),h(le,{slice:oe,set:ie,constructor:function(){},toString:Dt,toLocaleString:ne}),$t(le,\"buffer\",\"b\"),$t(le,\"byteOffset\",\"o\"),$t(le,\"byteLength\",\"l\"),$t(le,\"length\",\"e\"),et(le,Lt,{get:function(){return this[Ht]}}),t.exports=function(t,i,a,u){u=!!u;var s=t+(u?\"Clamped\":\"\")+\"Array\",l=\"get\"+t,h=\"set\"+t,p=e[s],v=p||{},d=p&&I(p),g=!p||!o.ABV,b={},_=p&&p.prototype,k=function(t,e){var n=t._d;return n.v[l](e*i+n.o,qt)},w=function(t,e,n){var r=t._d;u&&(n=(n=Math.round(n))<0?0:n>255?255:255&n),r.v[h](e*i+r.o,n,qt)},T=function(t,e){et(t,e,{get:function(){return k(this,e)},set:function(t){return w(this,e,t)},enumerable:!0})};g?(p=a(function(t,e,n,r){c(t,p,s,\"_d\");var o,a,u,l,h=0,v=0;if(P(e)){if(!(e instanceof ut||\"ArrayBuffer\"==(l=S(e))||\"SharedArrayBuffer\"==l))return Ht in e?Jt(p,e):Qt.call(p,e);o=e,v=Vt(n,i);var d=e.byteLength;if(void 0===r){if(d%i)throw rt(\"Wrong length!\");if((a=d-v)<0)throw rt(\"Wrong length!\")}else if((a=y(r)*i)+v>d)throw rt(\"Wrong length!\");u=a/i}else u=m(e),a=u*i,o=new ut(a);for(f(t,\"_d\",{b:o,o:v,l:a,e:u,v:new ct(o)});h<u;)T(t,h++)}),_=p.prototype=x(le),f(_,\"constructor\",p)):n(function(){p(1)})&&n(function(){new p(-1)})&&Y(function(t){new p,new p(null),new p(1.5),new p(t)},!0)||(p=a(function(t,e,n,r){c(t,p,s);var o;return P(e)?e instanceof ut||\"ArrayBuffer\"==(o=S(e))||\"SharedArrayBuffer\"==o?void 0!==r?new v(e,Vt(n,i),r):void 0!==n?new v(e,Vt(n,i)):new v(e):Ht in e?Jt(p,e):Qt.call(p,e):new v(m(e))}),lt(d!==Function.prototype?L(v).concat(L(d)):L(v),function(t){t in p||f(p,t,v[t])}),p.prototype=_,_.constructor=p);var E=_[It],O=!!E&&(\"values\"==E.name||void 0==E.name),M=ae.values;f(p,Nt,!0),f(_,Ht,s),f(_,Wt,!0),f(_,Ct,p),(u?new p(1)[Lt]==s:Lt in _)||et(_,Lt,{get:function(){return s}}),b[s]=p,r(r.G+r.W+r.F*(p!=v),b),r(r.S,s,{BYTES_PER_ELEMENT:i}),r(r.S+r.F*n(function(){v.of.call(p,1)}),s,{from:Qt,of:te}),\"BYTES_PER_ELEMENT\"in _||f(_,\"BYTES_PER_ELEMENT\",i),r(r.P,s,re),K(s),r(r.P+r.F*Ut,s,{set:ie}),r(r.P+r.F*!O,s,ae),_.toString!=Dt&&(_.toString=Dt),r(r.P+r.F*n(function(){new p(1).slice()}),s,{slice:oe}),r(r.P+r.F*(n(function(){return[1,2].toLocaleString()!=new p([1,2]).toLocaleString()})||!n(function(){_.toLocaleString.call([1,2])})),s,{toLocaleString:ne}),X[s]=O?E:M,O||f(_,It,M)}}else t.exports=function(){}});Ri(\"Int8\",1,function(t){return function(e,n,r){return t(this,e,n,r)}}),Ri(\"Uint8\",1,function(t){return function(e,n,r){return t(this,e,n,r)}}),Ri(\"Uint8\",1,function(t){return function(e,n,r){return t(this,e,n,r)}},!0),Ri(\"Int16\",2,function(t){return function(e,n,r){return t(this,e,n,r)}}),Ri(\"Uint16\",2,function(t){return function(e,n,r){return t(this,e,n,r)}}),Ri(\"Int32\",4,function(t){return function(e,n,r){return t(this,e,n,r)}}),Ri(\"Uint32\",4,function(t){return function(e,n,r){return t(this,e,n,r)}}),Ri(\"Float32\",4,function(t){return function(e,n,r){return t(this,e,n,r)}}),Ri(\"Float64\",8,function(t){return function(e,n,r){return t(this,e,n,r)}});var Ni=rn.getWeak,Ci=Yt(5),zi=Yt(6),Zi=0,Hi=function(t){return t._l||(t._l=new Wi)},Wi=function(){this.a=[]},Bi=function(t,e){return Ci(t.a,function(t){return t[0]===e})};Wi.prototype={get:function(t){var e=Bi(this,t);if(e)return e[1]},has:function(t){return!!Bi(this,t)},set:function(t,e){var n=Bi(this,t);n?n[1]=e:this.a.push([t,e])},delete:function(t){var e=zi(this.a,function(e){return e[0]===t});return~e&&this.a.splice(e,1),!!~e}};var qi={getConstructor:function(t,e,n,r){var o=t(function(t,i){en(t,o,e,\"_i\"),t._t=e,t._i=Zi++,t._l=void 0,void 0!=i&&nn(i,n,t[r],t)});return tn(o.prototype,{delete:function(t){if(!p(t))return!1;var n=Ni(t);return!0===n?Hi(on(this,e)).delete(t):n&&M(n,this._i)&&delete n[this._i]},has:function(t){if(!p(t))return!1;var n=Ni(t);return!0===n?Hi(on(this,e)).has(t):n&&M(n,this._i)}}),o},def:function(t,e,n){var r=Ni(v(e),!0);return!0===r?Hi(t).set(e,n):r[t._i]=n,t},ufstore:Hi},Ui=e(function(t){var e,n=Yt(0),r=rn.getWeak,o=Object.isExtensible,i=qi.ufstore,a={},u=function(t){return function(){return t(this,arguments.length>0?arguments[0]:void 0)}},c={get:function(t){if(p(t)){var e=r(t);return!0===e?i(on(this,\"WeakMap\")).get(t):e?e[this._i]:void 0}},set:function(t,e){return qi.def(on(this,\"WeakMap\"),t,e)}},s=t.exports=_n(\"WeakMap\",u,c,qi,!0,!0);d(function(){return 7!=(new s).set((Object.freeze||Object)(a),7).get(a)})&&(e=qi.getConstructor(u,\"WeakMap\"),Do(e.prototype,c),rn.NEED=!0,n([\"delete\",\"has\",\"get\",\"set\"],function(t){var n=s.prototype,r=n[t];x(n,t,function(n,i){if(p(n)&&!o(n)){this._f||(this._f=new e);var a=this._f[t](n,i);return\"set\"==t?this:a}return r.call(this,n,i)})}))});_n(\"WeakSet\",function(t){return function(){return t(this,arguments.length>0?arguments[0]:void 0)}},{add:function(t){return qi.def(on(this,\"WeakSet\"),t,!0)}},qi,!1,!0);var Vi=Y(\"metadata\"),Gi=Vi.store||(Vi.store=new Ui),Xi=function(t,e,n){var r=Gi.get(t);if(!r){if(!n)return;Gi.set(t,r=new kn)}var o=r.get(e);if(!o){if(!n)return;r.set(e,o=new kn)}return o},Yi=function(t,e,n){var r=Xi(e,n,!1);return void 0!==r&&r.has(t)},Ki=function(t,e,n){var r=Xi(e,n,!1);return void 0===r?void 0:r.get(t)},Ji=function(t,e,n,r){Xi(n,r,!0).set(t,e)},$i=function(t,e){var n=Xi(t,e,!1),r=[];return n&&n.forEach(function(t,e){r.push(e)}),r},Qi=function(t){return void 0===t||\"symbol\"==typeof t?t:String(t)},ta=function(t){R(R.S,\"Reflect\",t)},ea={store:Gi,map:Xi,has:Yi,get:Ki,set:Ji,keys:$i,key:Qi,exp:ta},na=ea.key,ra=ea.set;ea.exp({defineMetadata:function(t,e,n,r){ra(t,e,v(n),na(r))}});var oa=ea.key,ia=ea.map,aa=ea.store;ea.exp({deleteMetadata:function(t,e){var n=arguments.length<3?void 0:oa(arguments[2]),r=ia(v(e),n,!1);if(void 0===r||!r.delete(t))return!1;if(r.size)return!0;var o=aa.get(e);return o.delete(n),!!o.size||aa.delete(e)}});var ua=ea.has,ca=ea.get,sa=ea.key,fa=function(t,e,n){if(ua(t,e,n))return ca(t,e,n);var r=bt(e);return null!==r?fa(t,r,n):void 0};ea.exp({getMetadata:function(t,e){return fa(t,v(e),arguments.length<3?void 0:sa(arguments[2]))}});var la=function(t,e){var n=[];return nn(t,!1,n.push,n,e),n},ha=ea.keys,pa=ea.key,va=function(t,e){var n=ha(t,e),r=bt(t);if(null===r)return n;var o=va(r,e);return o.length?n.length?la(new ai(n.concat(o))):o:n};ea.exp({getMetadataKeys:function(t){return va(v(t),arguments.length<2?void 0:pa(arguments[1]))}});var da=ea.get,ga=ea.key;ea.exp({getOwnMetadata:function(t,e){return da(t,v(e),arguments.length<3?void 0:ga(arguments[2]))}});var ya=ea.keys,ma=ea.key;ea.exp({getOwnMetadataKeys:function(t){return ya(v(t),arguments.length<2?void 0:ma(arguments[1]))}});var ba=ea.has,_a=ea.key,ka=function(t,e,n){if(ba(t,e,n))return!0;var r=bt(e);return null!==r&&ka(t,r,n)};ea.exp({hasMetadata:function(t,e){return ka(t,v(e),arguments.length<3?void 0:_a(arguments[2]))}});var wa=ea.has,Sa=ea.key;ea.exp({hasOwnMetadata:function(t,e){return wa(t,v(e),arguments.length<3?void 0:Sa(arguments[2]))}});var Ta=ea.key,Ea=ea.set;ea.exp({metadata:function(t,e){return function(n,r){Ea(t,e,(void 0!==r?v:I)(n),Ta(r))}}});e(function(t,e){!function(t,e){e()}(0,function(){function t(t,e){for(var n=t.length-1;n>=0;n--)typeof t[n]===I&&(t[n]=Zone.current.wrap(t[n],e+\"_\"+n));return t}function e(e,r){for(var o=e.constructor.name,i=0;i<r.length;i++)!function(i){var a=r[i],u=e[a];if(u){if(!n(Object.getOwnPropertyDescriptor(e,a)))return\"continue\";e[a]=function(e){var n=function(){return e.apply(this,t(arguments,o+\".\"+a))};return c(n,e),n}(u)}}(i)}function n(t){return!t||!1!==t.writable&&(typeof t.get!==I||typeof t.set!==A)}function r(t,e,n){var r=Object.getOwnPropertyDescriptor(t,e);if(!r&&n){Object.getOwnPropertyDescriptor(n,e)&&(r={enumerable:!0,configurable:!0})}if(r&&r.configurable){delete r.writable,delete r.value;var o=r.get,i=e.substr(2),a=Z[i];a||(a=Z[i]=D(\"ON_PROPERTY\"+i)),r.set=function(e){var n=this;if(n||t!==x||(n=x),n){n[a]&&n.removeEventListener(i,H),\"function\"==typeof e?(n[a]=e,n.addEventListener(i,H,!1)):n[a]=null}},r.get=function(){var n=this;if(n||t!==x||(n=x),!n)return null;var i=n[a];if(i)return i;if(o){var u=o&&o.apply(this);if(u)return r.set.apply(this,[u]),typeof n[L]===I&&n.removeAttribute(e),u}return null},Object.defineProperty(t,e,r)}}function o(t,e,n){if(e)for(var o=0;o<e.length;o++)r(t,\"on\"+e[o],n);else{var i=[];for(var a in t)\"on\"==a.substr(0,2)&&i.push(a);for(var u=0;u<i.length;u++)r(t,i[u],n)}}function i(e){var n=x[e];if(n){x[D(e)]=n,x[e]=function(){var r=t(arguments,e);switch(r.length){case 0:this[W]=new n;break;case 1:this[W]=new n(r[0]);break;case 2:this[W]=new n(r[0],r[1]);break;case 3:this[W]=new n(r[0],r[1],r[2]);break;case 4:this[W]=new n(r[0],r[1],r[2],r[3]);break;default:throw new Error(\"Arg list too long.\")}},c(x[e],n);var r,o=new n(function(){});for(r in o)\"XMLHttpRequest\"===e&&\"responseBlob\"===r||function(t){\"function\"==typeof o[t]?x[e].prototype[t]=function(){return this[W][t].apply(this[W],arguments)}:Object.defineProperty(x[e].prototype,t,{set:function(n){\"function\"==typeof n?(this[W][t]=Zone.current.wrap(n,e+\".\"+t),c(this[W][t],n)):this[W][t]=n},get:function(){return this[W][t]}})}(r);for(r in n)\"prototype\"!==r&&n.hasOwnProperty(r)&&(x[e][r]=n[r])}}function a(t,e,r){for(var o=t;o&&!o.hasOwnProperty(e);)o=Object.getPrototypeOf(o);!o&&t[e]&&(o=t);var i,a=D(e);if(o&&!(i=o[a])){i=o[a]=o[e];if(n(o&&Object.getOwnPropertyDescriptor(o,e))){var u=r(i,a,e);o[e]=function(){return u(this,arguments)},c(o[e],i)}}return i}function u(t,e,n){function r(t){var e=t.data;return e.args[e.callbackIndex]=function(){t.invoke.apply(this,arguments)},o.apply(e.target,e.args),t}var o=null;o=a(t,e,function(t){return function(e,o){var i=n(e,o);if(i.callbackIndex>=0&&\"function\"==typeof o[i.callbackIndex]){return Zone.current.scheduleMacroTask(i.name,o[i.callbackIndex],i,r,null)}return t.apply(e,o)}})}function c(t,e){t[D(\"OriginalDelegate\")]=e}function s(){if(B)return q;B=!0;try{var t=window.navigator.userAgent;t.indexOf(\"MSIE \");return-1===t.indexOf(\"MSIE \")&&-1===t.indexOf(\"Trident/\")&&-1===t.indexOf(\"Edge/\")||(q=!0),q}catch(t){}}function l(t,e,n){for(var r=n&&n.addEventListenerFnName||\"addEventListener\",o=n&&n.removeEventListenerFnName||\"removeEventListener\",i=n&&n.listenersFnName||\"eventListeners\",a=n&&n.removeAllFnName||\"removeAllListeners\",u=D(r),s=\".\"+r+\":\",f=\"prependListener\",l=\".\"+f+\":\",p=function(t,e,n){if(!t.isRemoved){var r=t.callback;typeof r===tt&&r.handleEvent&&(t.callback=function(t){return r.handleEvent(t)},t.originalDelegate=r),t.invoke(t,e,[n]);var i=t.options;if(i&&\"object\"==typeof i&&i.once){var a=t.originalDelegate?t.originalDelegate:t.callback;e[o].apply(e,[n.type,a,i])}}},v=function(e){if(e=e||t.event){var n=this||e.target||t,r=n[K[e.type][X]];if(r)if(1===r.length)p(r[0],n,e);else for(var o=r.slice(),i=0;i<o.length&&(!e||!0!==e[rt]);i++)p(o[i],n,e)}},d=function(e){if(e=e||t.event){var n=this||e.target||t,r=n[K[e.type][G]];if(r)if(1===r.length)p(r[0],n,e);else for(var o=r.slice(),i=0;i<o.length&&(!e||!0!==e[rt]);i++)p(o[i],n,e)}},g=[],y=0;y<e.length;y++)g[y]=function(e,n){if(!e)return!1;var p=!0;n&&void 0!==n.useGlobalCallback&&(p=n.useGlobalCallback);var g=n&&n.validateHandler,y=!0;n&&void 0!==n.checkDuplicate&&(y=n.checkDuplicate);var m=!1;n&&void 0!==n.returnTarget&&(m=n.returnTarget);for(var b=e;b&&!b.hasOwnProperty(r);)b=Object.getPrototypeOf(b);if(!b&&e[r]&&(b=e),!b)return!1;if(b[u])return!1;var _,k={},w=b[u]=b[r],S=b[D(o)]=b[o],T=b[D(i)]=b[i],E=b[D(a)]=b[a];n&&n.prependEventListenerFnName&&(_=b[D(n.prependEventListenerFnName)]=b[n.prependEventListenerFnName]);var O=function(t){if(!k.isExisting)return w.apply(k.target,[k.eventName,k.capture?d:v,k.options])},P=function(t){if(!t.isRemoved){var e=K[t.eventName],n=void 0;e&&(n=e[t.capture?G:X]);var r=n&&t.target[n];if(r)for(var o=0;o<r.length;o++){var i=r[o];if(i===t){r.splice(o,1),t.isRemoved=!0,0===r.length&&(t.allRemoved=!0,t.target[n]=null);break}}}if(t.allRemoved)return S.apply(t.target,[t.eventName,t.capture?d:v,t.options])},M=function(t){return w.apply(k.target,[k.eventName,t.invoke,k.options])},F=function(t){return _.apply(k.target,[k.eventName,t.invoke,k.options])},j=function(t){return S.apply(t.target,[t.eventName,t.invoke,t.options])},x=p?O:M,I=p?P:j,A=function(t,e){var n=typeof e;return n===Q&&t.callback===e||n===tt&&t.originalDelegate===e},L=n&&n.compareTaskCallbackVsDelegate?n.compareTaskCallbackVsDelegate:A,R=function(e,n,r,o,i,a){return void 0===i&&(i=!1),void 0===a&&(a=!1),function(){var u=this||t,c=(Zone.current,arguments[1]);if(!c)return e.apply(this,arguments);var s=!1;if(typeof c!==Q){if(!c.handleEvent)return e.apply(this,arguments);s=!0}if(!g||g(e,c,u,arguments)){var f,l=arguments[0],h=arguments[2],v=!1;void 0===h?f=!1:!0===h?f=!0:!1===h?f=!1:(f=!!h&&!!h.capture,v=!!h&&!!h.once);var d,m=Zone.current,b=K[l];if(b)d=b[f?G:X];else{var _=l+X,w=l+G,S=et+_,T=et+w;K[l]={},K[l][X]=S,K[l][G]=T,d=f?T:S}var E=u[d],O=!1;if(E){if(O=!0,y)for(var P=0;P<E.length;P++)if(L(E[P],c))return}else E=u[d]=[];var M,F=u.constructor[$],j=J[F];j&&(M=j[l]),M||(M=F+n+l),k.options=h,v&&(k.options.once=!1),k.target=u,k.capture=f,k.eventName=l,k.isExisting=O;var D=p?Y:null,x=m.scheduleEventTask(M,c,D,r,o);return v&&(h.once=!0),x.options=h,x.target=u,x.capture=f,x.eventName=l,s&&(x.originalDelegate=c),a?E.unshift(x):E.push(x),i?u:void 0}}};return b[r]=R(w,s,x,I,m),_&&(b[f]=R(_,l,F,I,m,!0)),b[o]=function(){var e,n=this||t,r=arguments[0],o=arguments[2];e=void 0!==o&&(!0===o||!1!==o&&(!!o&&!!o.capture));var i=arguments[1];if(!i)return S.apply(this,arguments);if(!g||g(S,i,n,arguments)){var a,u=K[r];u&&(a=u[e?G:X]);var c=a&&n[a];if(c)for(var s=0;s<c.length;s++){var f=c[s];if(L(f,i))return c.splice(s,1),f.isRemoved=!0,0===c.length&&(f.allRemoved=!0,n[a]=null),void f.zone.cancelTask(f)}}},b[i]=function(){for(var e=this||t,n=arguments[0],r=[],o=h(e,n),i=0;i<o.length;i++){var a=o[i],u=a.originalDelegate?a.originalDelegate:a.callback;r.push(u)}return r},b[a]=function(){var e=this||t,n=arguments[0];if(n){var r=K[n];if(r){var i=r[X],u=r[G],c=e[i],s=e[u];if(c)for(var f=V(c),l=0;l<f.length;l++){var h=f[l],p=h.originalDelegate?h.originalDelegate:h.callback;this[o].apply(this,[n,p,h.options])}if(s)for(var f=V(s),l=0;l<f.length;l++){var h=f[l],p=h.originalDelegate?h.originalDelegate:h.callback;this[o].apply(this,[n,p,h.options])}}}else{for(var v=Object.keys(e),l=0;l<v.length;l++){var d=v[l],g=nt.exec(d),y=g&&g[1];y&&\"removeListener\"!==y&&this[a].apply(this,[y])}this[a].apply(this,[\"removeListener\"])}},c(b[r],w),c(b[o],S),E&&c(b[a],E),T&&c(b[i],T),!0}(e[y],n);return g}function h(t,e){var n=[];for(var r in t){var o=nt.exec(r),i=o&&o[1];if(i&&(!e||i===e)){var a=t[r];if(a)for(var u=0;u<a.length;u++)n.push(a[u])}}return n}function p(t,e){var n=t.Event;n&&n.prototype&&e.patchMethod(n.prototype,\"stopImmediatePropagation\",function(t){return function(t,e){t[rt]=!0}})}\nfunction v(t,e,n,r){function o(e){function n(){try{e.invoke.apply(this,arguments)}finally{typeof r.handleId===f?delete s[r.handleId]:r.handleId&&(r.handleId[ot]=null)}}var r=e.data;return r.args[0]=n,r.handleId=u.apply(t,r.args),e}function i(t){return c(t.data.handleId)}var u=null,c=null;e+=r,n+=r;var s={},f=\"number\";u=a(t,e,function(n){return function(a,u){if(\"function\"==typeof u[0]){var c=Zone.current,l={handleId:null,isPeriodic:\"Interval\"===r,delay:\"Timeout\"===r||\"Interval\"===r?u[1]||0:null,args:u},h=c.scheduleMacroTask(e,u[0],l,o,i);if(!h)return h;var p=h.data.handleId;return typeof p===f?s[p]=h:p&&(p[ot]=h),p&&p.ref&&p.unref&&\"function\"==typeof p.ref&&\"function\"==typeof p.unref&&(h.ref=p.ref.bind(p),h.unref=p.unref.bind(p)),typeof p===f||p?p:h}return n.apply(t,u)}}),c=a(t,n,function(e){return function(n,r){var o,i=r[0];typeof i===f?o=s[i]:(o=i&&i[ot])||(o=i),o&&\"string\"==typeof o.type?\"notScheduled\"!==o.state&&(o.cancelFn&&o.data.isPeriodic||0===o.runCount)&&(typeof i===f?delete s[i]:i&&(i[ot]=null),o.zone.cancelTask(o)):e.apply(t,r)}})}function d(){Object.defineProperty=function(t,e,n){if(y(t,e))throw new TypeError(\"Cannot assign to read only property '\"+e+\"' of \"+t);var r=n.configurable;return e!==st&&(n=m(t,e,n)),b(t,e,n,r)},Object.defineProperties=function(t,e){return Object.keys(e).forEach(function(n){Object.defineProperty(t,n,e[n])}),t},Object.create=function(t,e){return typeof e!==ft||Object.isFrozen(e)||Object.keys(e).forEach(function(n){e[n]=m(t,n,e[n])}),ut(t,e)},Object.getOwnPropertyDescriptor=function(t,e){var n=at(t,e);return y(t,e)&&(n.configurable=!1),n}}function g(t,e,n){var r=n.configurable;return n=m(t,e,n),b(t,e,n,r)}function y(t,e){return t&&t[ct]&&t[ct][e]}function m(t,e,n){return n.configurable=!0,n.configurable||(t[ct]||it(t,ct,{writable:!0,value:{}}),t[ct][e]=!0),n}function b(t,e,n,r){try{return it(t,e,n)}catch(i){if(!n.configurable)throw i;typeof r==lt?delete n.configurable:n.configurable=r;try{return it(t,e,n)}catch(r){var o=null;try{o=JSON.stringify(n)}catch(t){o=o.toString()}console.log(\"Attempting to configure '\"+e+\"' with descriptor '\"+o+\"' on object '\"+t+\"' and got error, giving up: \"+r)}}}function _(t,e){var n=e.WebSocket;e.EventTarget||l(e,[n.prototype]),e.WebSocket=function(t,e){var r,i,a=arguments.length>1?new n(t,e):new n(t),u=Object.getOwnPropertyDescriptor(a,\"onmessage\");return u&&!1===u.configurable?(r=Object.create(a),i=a,[\"addEventListener\",\"removeEventListener\",\"send\",\"close\"].forEach(function(t){r[t]=function(){var e=Array.prototype.slice.call(arguments);if(\"addEventListener\"===t||\"removeEventListener\"===t){var n=e.length>0?e[0]:void 0;if(n){var o=Zone.__symbol__(\"ON_PROPERTY\"+n);a[o]=r[o]}}return a[t].apply(a,e)}})):r=a,o(r,[\"close\",\"error\",\"message\",\"open\"],i),r};var r=e.WebSocket;for(var i in n)r[i]=n[i]}function k(t,e,n){if(!n)return e;var r=n.filter(function(e){return e.target===t});if(!r||0===r.length)return e;var o=r[0].ignoreProperties;return e.filter(function(t){return-1===o.indexOf(t)})}function w(t,e,n,r){o(t,k(t,e,n),r)}function S(t,e){if(!N||z){var n=\"undefined\"!=typeof WebSocket;if(T()){var r=e.__Zone_ignore_on_properties;if(C){w(window,Mt.concat([\"messageerror\"]),r,Object.getPrototypeOf(window)),w(Document.prototype,Mt,r),void 0!==window.SVGElement&&w(window.SVGElement.prototype,Mt,r),w(Element.prototype,Mt,r),w(HTMLElement.prototype,Mt,r),w(HTMLMediaElement.prototype,gt,r),w(HTMLFrameSetElement.prototype,vt.concat(wt),r),w(HTMLBodyElement.prototype,vt.concat(wt),r),w(HTMLFrameElement.prototype,kt,r),w(HTMLIFrameElement.prototype,kt,r);var o=window.HTMLMarqueeElement;o&&w(o.prototype,St,r);var a=window.Worker;a&&w(a.prototype,Pt,r)}w(XMLHttpRequest.prototype,Tt,r);var u=e.XMLHttpRequestEventTarget;u&&w(u&&u.prototype,Tt,r),\"undefined\"!=typeof IDBIndex&&(w(IDBIndex.prototype,Et,r),w(IDBRequest.prototype,Et,r),w(IDBOpenDBRequest.prototype,Et,r),w(IDBDatabase.prototype,Et,r),w(IDBTransaction.prototype,Et,r),w(IDBCursor.prototype,Et,r)),n&&w(WebSocket.prototype,Ot,r)}else E(),i(\"XMLHttpRequest\"),n&&_(t,e)}}function T(){if((C||z)&&!Object.getOwnPropertyDescriptor(HTMLElement.prototype,\"onclick\")&&\"undefined\"!=typeof Element){var t=Object.getOwnPropertyDescriptor(Element.prototype,\"onclick\");if(t&&!t.configurable)return!1}var e=Object.getOwnPropertyDescriptor(XMLHttpRequest.prototype,\"onreadystatechange\");if(e){Object.defineProperty(XMLHttpRequest.prototype,\"onreadystatechange\",{enumerable:!0,configurable:!0,get:function(){return!0}});var n=new XMLHttpRequest,r=!!n.onreadystatechange;return Object.defineProperty(XMLHttpRequest.prototype,\"onreadystatechange\",e||{}),r}var o=D(\"fakeonreadystatechange\");Object.defineProperty(XMLHttpRequest.prototype,\"onreadystatechange\",{enumerable:!0,configurable:!0,get:function(){return this[o]},set:function(t){this[o]=t}});var n=new XMLHttpRequest,i=function(){};n.onreadystatechange=i;var r=n[o]===i;return n.onreadystatechange=null,r}function E(){for(var t=0;t<Mt.length;t++)!function(t){var e=Mt[t],n=\"on\"+e;self.addEventListener(e,function(t){var e,r,o=t.target;for(r=o?o.constructor.name+\".\"+n:\"unknown.\"+n;o;)o[n]&&!o[n][Ft]&&(e=Zone.current.wrap(o[n],r),e[Ft]=o[n],o[n]=e),o=o.parentElement},!0)}(t)}function O(t,e){var n=\"Anchor,Area,Audio,BR,Base,BaseFont,Body,Button,Canvas,Content,DList,Directory,Div,Embed,FieldSet,Font,Form,Frame,FrameSet,HR,Head,Heading,Html,IFrame,Image,Input,Keygen,LI,Label,Legend,Link,Map,Marquee,Media,Menu,Meta,Meter,Mod,OList,Object,OptGroup,Option,Output,Paragraph,Pre,Progress,Quote,Script,Select,Source,Span,Style,TableCaption,TableCell,TableCol,Table,TableRow,TableSection,TextArea,Title,Track,UList,Unknown,Video\",r=\"ApplicationCache,EventSource,FileReader,InputMethodContext,MediaController,MessagePort,Node,Performance,SVGElementInstance,SharedWorker,TextTrack,TextTrackCue,TextTrackList,WebKitNamedFlow,Window,Worker,WorkerGlobalScope,XMLHttpRequest,XMLHttpRequestEventTarget,XMLHttpRequestUpload,IDBRequest,IDBOpenDBRequest,IDBDatabase,IDBTransaction,IDBCursor,DBIndex,WebSocket\".split(\",\"),o=[],i=t.wtf,a=n.split(\",\");i?o=a.map(function(t){return\"HTML\"+t+\"Element\"}).concat(r):t.EventTarget?o.push(\"EventTarget\"):o=r;for(var u=t.__Zone_disable_IE_check||!1,c=t.__Zone_enable_cross_context_check||!1,f=s(),h=\"function __BROWSERTOOLS_CONSOLE_SAFEFUNC() { [native code] }\",p=0;p<Mt.length;p++){var v=Mt[p],d=v+X,g=v+G,y=et+d,m=et+g;K[v]={},K[v][X]=y,K[v][G]=m}for(var p=0;p<n.length;p++)for(var b=a[p],_=J[b]={},k=0;k<Mt.length;k++){var v=Mt[k];_[v]=b+\".addEventListener:\"+v}for(var w=function(t,e,n,r){if(!u&&f)if(c)try{var o=e.toString();if(\"[object FunctionWrapper]\"===o||o==h)return t.apply(n,r),!1}catch(e){return t.apply(n,r),!1}else{var o=e.toString();if(\"[object FunctionWrapper]\"===o||o==h)return t.apply(n,r),!1}else if(c)try{e.toString()}catch(e){return t.apply(n,r),!1}return!0},S=[],p=0;p<o.length;p++){var T=t[o[p]];S.push(T&&T.prototype)}return l(t,S,{validateHandler:w}),e.patchEventTarget=l,!0}function P(t,e){p(t,e)}function M(t){if((C||z)&&\"registerElement\"in t.document){var e=document.registerElement,n=[\"createdCallback\",\"attachedCallback\",\"detachedCallback\",\"attributeChangedCallback\"];document.registerElement=function(t,r){return r&&r.prototype&&n.forEach(function(t){var e=\"Document.registerElement::\"+t;if(r.prototype.hasOwnProperty(t)){var n=Object.getOwnPropertyDescriptor(r.prototype,t);n&&n.value?(n.value=Zone.current.wrap(n.value,e),g(r.prototype,t,n)):r.prototype[t]=Zone.current.wrap(r.prototype[t],e)}else r.prototype[t]&&(r.prototype[t]=Zone.current.wrap(r.prototype[t],e))}),e.apply(document,[t,r])},c(document.registerElement,e)}}var F=(function(t){function e(t){u&&u.mark&&u.mark(t)}function n(t,e){u&&u.measure&&u.measure(t,e)}function r(e){0===x&&0===g.length&&(s||t[v]&&(s=t[v].resolve(0)),s?s[d](o):t[p](o,0)),e&&g.push(e)}function o(){if(!y){for(y=!0;g.length;){var t=g;g=[];for(var e=0;e<t.length;e++){var n=t[e];try{n.zone.runTask(n,null,null)}catch(t){F.onUnhandledError(t)}}}c[a(\"ignoreConsoleErrorUncaughtError\")];F.microtaskDrainDone(),y=!1}}function i(){}function a(t){return\"__zone_symbol__\"+t}var u=t.performance;if(e(\"Zone\"),t.Zone)throw new Error(\"Zone already loaded.\");var c=function(){function r(t,e){this._properties=null,this._parent=t,this._name=e?e.name||\"unnamed\":\"<root>\",this._properties=e&&e.properties||{},this._zoneDelegate=new l(this,this._parent&&this._parent._zoneDelegate,e)}return r.assertZonePatched=function(){if(t.Promise!==M.ZoneAwarePromise)throw new Error(\"Zone.js has detected that ZoneAwarePromise `(window|global).Promise` has been overwritten.\\nMost likely cause is that a Promise polyfill has been loaded after Zone.js (Polyfilling Promise api is not necessary when zone.js is loaded. If you must load one, do so before loading zone.js.)\")},Object.defineProperty(r,\"root\",{get:function(){for(var t=r.current;t.parent;)t=t.parent;return t},enumerable:!0,configurable:!0}),Object.defineProperty(r,\"current\",{get:function(){return j.zone},enumerable:!0,configurable:!0}),Object.defineProperty(r,\"currentTask\",{get:function(){return D},enumerable:!0,configurable:!0}),r.__load_patch=function(o,i){if(M.hasOwnProperty(o))throw Error(\"Already loaded patch: \"+o);if(!t[\"__Zone_disable_\"+o]){var a=\"Zone:\"+o;e(a),M[o]=i(t,r,F),n(a,a)}},Object.defineProperty(r.prototype,\"parent\",{get:function(){return this._parent},enumerable:!0,configurable:!0}),Object.defineProperty(r.prototype,\"name\",{get:function(){return this._name},enumerable:!0,configurable:!0}),r.prototype.get=function(t){var e=this.getZoneWith(t);if(e)return e._properties[t]},r.prototype.getZoneWith=function(t){for(var e=this;e;){if(e._properties.hasOwnProperty(t))return e;e=e._parent}return null},r.prototype.fork=function(t){if(!t)throw new Error(\"ZoneSpec required!\");return this._zoneDelegate.fork(this,t)},r.prototype.wrap=function(t,e){if(\"function\"!=typeof t)throw new Error(\"Expecting function got: \"+t);var n=this._zoneDelegate.intercept(this,t,e),r=this;return function(){return r.runGuarded(n,this,arguments,e)}},r.prototype.run=function(t,e,n,r){void 0===e&&(e=void 0),void 0===n&&(n=null),void 0===r&&(r=null),j={parent:j,zone:this};try{return this._zoneDelegate.invoke(this,t,e,n,r)}finally{j=j.parent}},r.prototype.runGuarded=function(t,e,n,r){void 0===e&&(e=null),void 0===n&&(n=null),void 0===r&&(r=null),j={parent:j,zone:this};try{try{return this._zoneDelegate.invoke(this,t,e,n,r)}catch(t){if(this._zoneDelegate.handleError(this,t))throw t}}finally{j=j.parent}},r.prototype.runTask=function(t,e,n){if(t.zone!=this)throw new Error(\"A task can only be run in the zone of creation! (Creation: \"+(t.zone||m).name+\"; Execution: \"+this.name+\")\");if(t.state!==b||t.type!==P){var r=t.state!=w;r&&t._transitionTo(w,k),t.runCount++;var o=D;D=t,j={parent:j,zone:this};try{t.type==O&&t.data&&!t.data.isPeriodic&&(t.cancelFn=null);try{return this._zoneDelegate.invokeTask(this,t,e,n)}catch(t){if(this._zoneDelegate.handleError(this,t))throw t}}finally{t.state!==b&&t.state!==T&&(t.type==P||t.data&&t.data.isPeriodic?r&&t._transitionTo(k,w):(t.runCount=0,this._updateTaskCount(t,-1),r&&t._transitionTo(b,w,b))),j=j.parent,D=o}}},r.prototype.scheduleTask=function(t){if(t.zone&&t.zone!==this)for(var e=this;e;){if(e===t.zone)throw Error(\"can not reschedule task to \"+this.name+\" which is descendants of the original zone \"+t.zone.name);e=e.parent}t._transitionTo(_,b);var n=[];t._zoneDelegates=n,t._zone=this;try{t=this._zoneDelegate.scheduleTask(this,t)}catch(e){throw t._transitionTo(T,_,b),this._zoneDelegate.handleError(this,e),e}return t._zoneDelegates===n&&this._updateTaskCount(t,1),t.state==_&&t._transitionTo(k,_),t},r.prototype.scheduleMicroTask=function(t,e,n,r){return this.scheduleTask(new h(E,t,e,n,r,null))},r.prototype.scheduleMacroTask=function(t,e,n,r,o){return this.scheduleTask(new h(O,t,e,n,r,o))},r.prototype.scheduleEventTask=function(t,e,n,r,o){return this.scheduleTask(new h(P,t,e,n,r,o))},r.prototype.cancelTask=function(t){if(t.zone!=this)throw new Error(\"A task can only be cancelled in the zone of creation! (Creation: \"+(t.zone||m).name+\"; Execution: \"+this.name+\")\");t._transitionTo(S,k,w);try{this._zoneDelegate.cancelTask(this,t)}catch(e){throw t._transitionTo(T,S),this._zoneDelegate.handleError(this,e),e}return this._updateTaskCount(t,-1),t._transitionTo(b,S),t.runCount=0,t},r.prototype._updateTaskCount=function(t,e){var n=t._zoneDelegates;-1==e&&(t._zoneDelegates=null);for(var r=0;r<n.length;r++)n[r]._updateTaskCount(t.type,e)},r}();c.__symbol__=a;var s,f={name:\"\",onHasTask:function(t,e,n,r){return t.hasTask(n,r)},onScheduleTask:function(t,e,n,r){return t.scheduleTask(n,r)},onInvokeTask:function(t,e,n,r,o,i){return t.invokeTask(n,r,o,i)},onCancelTask:function(t,e,n,r){return t.cancelTask(n,r)}},l=function(){function t(t,e,n){this._taskCounts={microTask:0,macroTask:0,eventTask:0},this.zone=t,this._parentDelegate=e,this._forkZS=n&&(n&&n.onFork?n:e._forkZS),this._forkDlgt=n&&(n.onFork?e:e._forkDlgt),this._forkCurrZone=n&&(n.onFork?this.zone:e.zone),this._interceptZS=n&&(n.onIntercept?n:e._interceptZS),this._interceptDlgt=n&&(n.onIntercept?e:e._interceptDlgt),this._interceptCurrZone=n&&(n.onIntercept?this.zone:e.zone),this._invokeZS=n&&(n.onInvoke?n:e._invokeZS),this._invokeDlgt=n&&(n.onInvoke?e:e._invokeDlgt),this._invokeCurrZone=n&&(n.onInvoke?this.zone:e.zone),this._handleErrorZS=n&&(n.onHandleError?n:e._handleErrorZS),this._handleErrorDlgt=n&&(n.onHandleError?e:e._handleErrorDlgt),this._handleErrorCurrZone=n&&(n.onHandleError?this.zone:e.zone),this._scheduleTaskZS=n&&(n.onScheduleTask?n:e._scheduleTaskZS),this._scheduleTaskDlgt=n&&(n.onScheduleTask?e:e._scheduleTaskDlgt),this._scheduleTaskCurrZone=n&&(n.onScheduleTask?this.zone:e.zone),this._invokeTaskZS=n&&(n.onInvokeTask?n:e._invokeTaskZS),this._invokeTaskDlgt=n&&(n.onInvokeTask?e:e._invokeTaskDlgt),this._invokeTaskCurrZone=n&&(n.onInvokeTask?this.zone:e.zone),this._cancelTaskZS=n&&(n.onCancelTask?n:e._cancelTaskZS),this._cancelTaskDlgt=n&&(n.onCancelTask?e:e._cancelTaskDlgt),this._cancelTaskCurrZone=n&&(n.onCancelTask?this.zone:e.zone),this._hasTaskZS=null,this._hasTaskDlgt=null,this._hasTaskDlgtOwner=null,this._hasTaskCurrZone=null;var r=n&&n.onHasTask,o=e&&e._hasTaskZS;(r||o)&&(this._hasTaskZS=r?n:f,this._hasTaskDlgt=e,this._hasTaskDlgtOwner=this,this._hasTaskCurrZone=t,n.onScheduleTask||(this._scheduleTaskZS=f,this._scheduleTaskDlgt=e,this._scheduleTaskCurrZone=this.zone),n.onInvokeTask||(this._invokeTaskZS=f,this._invokeTaskDlgt=e,this._invokeTaskCurrZone=this.zone),n.onCancelTask||(this._cancelTaskZS=f,this._cancelTaskDlgt=e,this._cancelTaskCurrZone=this.zone))}return t.prototype.fork=function(t,e){return this._forkZS?this._forkZS.onFork(this._forkDlgt,this.zone,t,e):new c(t,e)},t.prototype.intercept=function(t,e,n){return this._interceptZS?this._interceptZS.onIntercept(this._interceptDlgt,this._interceptCurrZone,t,e,n):e},t.prototype.invoke=function(t,e,n,r,o){return this._invokeZS?this._invokeZS.onInvoke(this._invokeDlgt,this._invokeCurrZone,t,e,n,r,o):e.apply(n,r)},t.prototype.handleError=function(t,e){return!this._handleErrorZS||this._handleErrorZS.onHandleError(this._handleErrorDlgt,this._handleErrorCurrZone,t,e)},t.prototype.scheduleTask=function(t,e){var n=e;if(this._scheduleTaskZS)this._hasTaskZS&&n._zoneDelegates.push(this._hasTaskDlgtOwner),(n=this._scheduleTaskZS.onScheduleTask(this._scheduleTaskDlgt,this._scheduleTaskCurrZone,t,e))||(n=e);else if(e.scheduleFn)e.scheduleFn(e);else{if(e.type!=E)throw new Error(\"Task is missing scheduleFn.\");r(e)}return n},t.prototype.invokeTask=function(t,e,n,r){return this._invokeTaskZS?this._invokeTaskZS.onInvokeTask(this._invokeTaskDlgt,this._invokeTaskCurrZone,t,e,n,r):e.callback.apply(n,r)},t.prototype.cancelTask=function(t,e){var n;if(this._cancelTaskZS)n=this._cancelTaskZS.onCancelTask(this._cancelTaskDlgt,this._cancelTaskCurrZone,t,e);else{if(!e.cancelFn)throw Error(\"Task is not cancelable\");n=e.cancelFn(e)}return n},t.prototype.hasTask=function(t,e){try{return this._hasTaskZS&&this._hasTaskZS.onHasTask(this._hasTaskDlgt,this._hasTaskCurrZone,t,e)}catch(e){this.handleError(t,e)}},t.prototype._updateTaskCount=function(t,e){var n=this._taskCounts,r=n[t],o=n[t]=r+e;if(o<0)throw new Error(\"More tasks executed then were scheduled.\");if(0==r||0==o){var i={microTask:n.microTask>0,macroTask:n.macroTask>0,eventTask:n.eventTask>0,change:t};this.hasTask(this.zone,i)}},t}(),h=function(){function e(n,r,o,i,a,u){this._zone=null,this.runCount=0,this._zoneDelegates=null,this._state=\"notScheduled\",this.type=n,this.source=r,this.data=i,this.scheduleFn=a,this.cancelFn=u,this.callback=o;var c=this;n===P&&i&&i.isUsingGlobalCallback?this.invoke=e.invokeTask:this.invoke=function(){return e.invokeTask.apply(t,[c,this,arguments])}}return e.invokeTask=function(t,e,n){t||(t=this),x++;try{return t.runCount++,t.zone.runTask(t,e,n)}finally{1==x&&o(),x--}},Object.defineProperty(e.prototype,\"zone\",{get:function(){return this._zone},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,\"state\",{get:function(){return this._state},enumerable:!0,configurable:!0}),e.prototype.cancelScheduleRequest=function(){this._transitionTo(b,_)},e.prototype._transitionTo=function(t,e,n){if(this._state!==e&&this._state!==n)throw new Error(this.type+\" '\"+this.source+\"': can not transition to '\"+t+\"', expecting state '\"+e+\"'\"+(n?\" or '\"+n+\"'\":\"\")+\", was '\"+this._state+\"'.\");this._state=t,t==b&&(this._zoneDelegates=null)},e.prototype.toString=function(){return this.data&&void 0!==this.data.handleId?this.data.handleId:Object.prototype.toString.call(this)},e.prototype.toJSON=function(){return{type:this.type,state:this.state,source:this.source,zone:this.zone.name,invoke:this.invoke,scheduleFn:this.scheduleFn,cancelFn:this.cancelFn,runCount:this.runCount,callback:this.callback}},e}(),p=a(\"setTimeout\"),v=a(\"Promise\"),d=a(\"then\"),g=[],y=!1,m={name:\"NO ZONE\"},b=\"notScheduled\",_=\"scheduling\",k=\"scheduled\",w=\"running\",S=\"canceling\",T=\"unknown\",E=\"microTask\",O=\"macroTask\",P=\"eventTask\",M={},F={symbol:a,currentZoneFrame:function(){return j},onUnhandledError:i,microtaskDrainDone:i,scheduleMicroTask:r,showUncaughtError:function(){return!c[a(\"ignoreConsoleErrorUncaughtError\")]},patchEventTarget:function(){return[]},patchOnProperties:i,patchMethod:function(){return i},setNativePromise:function(t){s=t.resolve(0)}},j={parent:null,zone:new c(null,null)},D=null,x=0;n(\"Zone\",\"Zone\"),t.Zone=c}(\"undefined\"!=typeof window&&window||\"undefined\"!=typeof self&&self||f),function(t,e){var n=\"function\"==typeof Symbol&&t[Symbol.iterator];if(!n)return t;var r,o,i=n.call(t),a=[];try{for(;(void 0===e||e-- >0)&&!(r=i.next()).done;)a.push(r.value)}catch(t){o={error:t}}finally{try{r&&!r.done&&(n=i.return)&&n.call(i)}finally{if(o)throw o.error}}return a}),j=function(t){var e=\"function\"==typeof Symbol&&t[Symbol.iterator],n=0;return e?e.call(t):{next:function(){return t&&n>=t.length&&(t=void 0),{value:t&&t[n++],done:!t}}}};Zone.__load_patch(\"ZoneAwarePromise\",function(t,e,n){function r(t){n.onUnhandledError(t);try{var r=e[g];r&&\"function\"==typeof r&&r.apply(this,[t])}catch(t){}}function o(t){return t&&t.then}function i(t){return t}function a(t){return x.reject(t)}function u(t,e){return function(n){try{c(t,e,n)}catch(e){c(t,!1,e)}}}function c(t,r,o){var i=T();if(t===o)throw new TypeError(E);if(t[y]===_){var a=null;try{typeof o!==O&&typeof o!==P||(a=o&&o.then)}catch(e){return i(function(){c(t,!1,e)})(),t}if(r!==w&&o instanceof x&&o.hasOwnProperty(y)&&o.hasOwnProperty(m)&&o[y]!==_)s(o),c(t,o[y],o[m]);else if(r!==w&&typeof a===P)try{a.apply(o,[i(u(t,r)),i(u(t,!1))])}catch(e){i(function(){c(t,!1,e)})()}else{t[y]=r;var l=t[m];t[m]=o,r===w&&o instanceof Error&&(o[M]=e.currentTask);for(var h=0;h<l.length;)f(t,l[h++],l[h++],l[h++],l[h++]);if(0==l.length&&r==w){t[y]=S;try{throw new Error(\"Uncaught (in promise): \"+o+(o&&o.stack?\"\\n\"+o.stack:\"\"))}catch(r){var v=r;v.rejection=o,v.promise=t,v.zone=e.current,v.task=e.currentTask,p.push(v),n.scheduleMicroTask()}}}}return t}function s(t){if(t[y]===S){try{var n=e[D];n&&typeof n===P&&n.apply(this,[{rejection:t[m],promise:t}])}catch(t){}t[y]=w;for(var r=0;r<p.length;r++)t===p[r].promise&&p.splice(r,1)}}function f(t,e,n,r,o){s(t);var u=t[y]?typeof r===P?r:i:typeof o===P?o:a;e.scheduleMicroTask(b,function(){try{c(n,!0,e.run(u,void 0,[t[m]]))}catch(t){c(n,!1,t)}})}function l(t){var e=t.prototype,n=e.then;e[d]=n;var r=Object.getOwnPropertyDescriptor(t.prototype,\"then\");r&&!1===r.writable&&r.configurable&&Object.defineProperty(t.prototype,\"then\",{writable:!0}),t.prototype.then=function(t,e){var r=this;return new x(function(t,e){n.call(r,t,e)}).then(t,e)},t[R]=!0}var h=n.symbol,p=[],v=h(\"Promise\"),d=h(\"then\");n.onUnhandledError=function(t){if(n.showUncaughtError()){var e=t&&t.rejection;e?console.error(\"Unhandled Promise rejection:\",e instanceof Error?e.message:e,\"; Zone:\",t.zone.name,\"; Task:\",t.task&&t.task.source,\"; Value:\",e,e instanceof Error?e.stack:void 0):console.error(t)}},n.microtaskDrainDone=function(){for(;p.length;)for(;p.length;)!function(){var t=p.shift();try{t.zone.runGuarded(function(){throw t})}catch(t){r(t)}}()};var g=h(\"unhandledPromiseRejectionHandler\"),y=h(\"state\"),m=h(\"value\"),b=\"Promise.then\",_=null,k=!0,w=!1,S=0,T=function(){var t=!1;return function(e){return function(){t||(t=!0,e.apply(null,arguments))}}},E=\"Promise resolved with itself\",O=\"object\",P=\"function\",M=h(\"currentTask\"),D=h(\"rejectionHandledHandler\"),x=function(){function t(e){var n=this;if(!(n instanceof t))throw new Error(\"Must be an instanceof Promise.\");n[y]=_,n[m]=[];try{e&&e(u(n,k),u(n,w))}catch(t){c(n,!1,t)}}return t.toString=function(){return\"function ZoneAwarePromise() { [native code] }\"},t.resolve=function(t){return c(new this(null),k,t)},t.reject=function(t){return c(new this(null),w,t)},t.race=function(t){function e(t){a&&(a=r(t))}function n(t){a&&(a=i(t))}var r,i,a=new this(function(t,e){n=F([t,e],2),r=n[0],i=n[1];var n});try{for(var u=j(t),c=u.next();!c.done;c=u.next()){var s=c.value;o(s)||(s=this.resolve(s)),s.then(e,n)}}catch(t){f={error:t}}finally{try{c&&!c.done&&(l=u.return)&&l.call(u)}finally{if(f)throw f.error}}return a;var f,l},t.all=function(t){var e,n,r=new this(function(t,r){e=t,n=r}),i=0,a=[];try{for(var u=j(t),c=u.next();!c.done;c=u.next()){var s=c.value;o(s)||(s=this.resolve(s)),s.then(function(t){return function(n){a[t]=n,--i||e(a)}}(i),n),i++}}catch(t){f={error:t}}finally{try{c&&!c.done&&(l=u.return)&&l.call(u)}finally{if(f)throw f.error}}return i||e(a),r;var f,l},t.prototype.then=function(t,n){var r=new this.constructor(null),o=e.current;return this[y]==_?this[m].push(o,r,t,n):f(this,o,r,t,n),r},t.prototype.catch=function(t){return this.then(null,t)},t}();x.resolve=x.resolve,x.reject=x.reject,x.race=x.race,x.all=x.all;var I=t[v]=t.Promise,A=e.__symbol__(\"ZoneAwarePromise\"),L=Object.getOwnPropertyDescriptor(t,\"Promise\");L&&!L.configurable||(L&&delete L.writable,L&&delete L.value,L||(L={configurable:!0,enumerable:!0}),L.get=function(){return t[A]?t[A]:t[v]},L.set=function(e){e===x?t[A]=e:(t[v]=e,e.prototype[d]||l(e),n.setNativePromise(e))},Object.defineProperty(t,\"Promise\",L)),t.Promise=x;var R=h(\"thenPatched\");if(I){l(I);var N=t.fetch;typeof N==P&&(t.fetch=function(t){return function(){var e=t.apply(this,arguments);if(e instanceof x)return e;var n=e.constructor;return n[R]||l(n),e}}(N))}return Promise[e.__symbol__(\"uncaughtPromiseErrors\")]=p,x});var D=Zone.__symbol__,x=\"object\"==typeof window&&window||\"object\"==typeof self&&self||f,I=\"function\",A=\"undefined\",L=\"removeAttribute\",R=\"undefined\"!=typeof WorkerGlobalScope&&self instanceof WorkerGlobalScope,N=!(\"nw\"in x)&&void 0!==x.process&&\"[object process]\"==={}.toString.call(x.process),C=!N&&!R&&!(\"undefined\"==typeof window||!window.HTMLElement),z=void 0!==x.process&&\"[object process]\"==={}.toString.call(x.process)&&!R&&!(\"undefined\"==typeof window||!window.HTMLElement),Z={},H=function(t){if(t=t||x.event){var e=Z[t.type];e||(e=Z[t.type]=D(\"ON_PROPERTY\"+t.type));var n=this||t.target||x,r=n[e],o=r&&r.apply(this,arguments);return void 0==o||o||t.preventDefault(),o}},W=D(\"originalInstance\"),B=!1,q=!1;Zone.__load_patch(\"toString\",function(t,e,n){var r=e.__zone_symbol__originalToString=Function.prototype.toString,o=D(\"OriginalDelegate\"),i=D(\"Promise\"),a=D(\"Error\");Function.prototype.toString=function(){if(\"function\"==typeof this){var e=this[o];if(e)return\"function\"==typeof e?r.apply(this[o],arguments):Object.prototype.toString.call(e);if(this===Promise){var n=t[i];if(n)return r.apply(n,arguments)}if(this===Error){var u=t[a];if(u)return r.apply(u,arguments)}}return r.apply(this,arguments)};var u=Object.prototype.toString;Object.prototype.toString=function(){return this instanceof Promise?\"[object Promise]\":u.apply(this,arguments)}});var U=function(t,e){var n=\"function\"==typeof Symbol&&t[Symbol.iterator];if(!n)return t;var r,o,i=n.call(t),a=[];try{for(;(void 0===e||e-- >0)&&!(r=i.next()).done;)a.push(r.value)}catch(t){o={error:t}}finally{try{r&&!r.done&&(n=i.return)&&n.call(i)}finally{if(o)throw o.error}}return a},V=function(){for(var t=[],e=0;e<arguments.length;e++)t=t.concat(U(arguments[e]));return t},G=\"true\",X=\"false\",Y={isUsingGlobalCallback:!0},K={},J={},$=\"name\",Q=\"function\",tt=\"object\",et=\"__zone_symbol__\",nt=/^__zone_symbol__(\\w+)(true|false)$/,rt=\"__zone_symbol__propagationStopped\",ot=D(\"zoneTask\"),it=Object[D(\"defineProperty\")]=Object.defineProperty,at=Object[D(\"getOwnPropertyDescriptor\")]=Object.getOwnPropertyDescriptor,ut=Object.create,ct=D(\"unconfigurables\"),st=\"prototype\",ft=\"object\",lt=\"undefined\",ht=[\"abort\",\"animationcancel\",\"animationend\",\"animationiteration\",\"auxclick\",\"beforeinput\",\"blur\",\"cancel\",\"canplay\",\"canplaythrough\",\"change\",\"compositionstart\",\"compositionupdate\",\"compositionend\",\"cuechange\",\"click\",\"close\",\"contextmenu\",\"curechange\",\"dblclick\",\"drag\",\"dragend\",\"dragenter\",\"dragexit\",\"dragleave\",\"dragover\",\"drop\",\"durationchange\",\"emptied\",\"ended\",\"error\",\"focus\",\"focusin\",\"focusout\",\"gotpointercapture\",\"input\",\"invalid\",\"keydown\",\"keypress\",\"keyup\",\"load\",\"loadstart\",\"loadeddata\",\"loadedmetadata\",\"lostpointercapture\",\"mousedown\",\"mouseenter\",\"mouseleave\",\"mousemove\",\"mouseout\",\"mouseover\",\"mouseup\",\"mousewheel\",\"orientationchange\",\"pause\",\"play\",\"playing\",\"pointercancel\",\"pointerdown\",\"pointerenter\",\"pointerleave\",\"pointerlockchange\",\"mozpointerlockchange\",\"webkitpointerlockerchange\",\"pointerlockerror\",\"mozpointerlockerror\",\"webkitpointerlockerror\",\"pointermove\",\"pointout\",\"pointerover\",\"pointerup\",\"progress\",\"ratechange\",\"reset\",\"resize\",\"scroll\",\"seeked\",\"seeking\",\"select\",\"selectionchange\",\"selectstart\",\"show\",\"sort\",\"stalled\",\"submit\",\"suspend\",\"timeupdate\",\"volumechange\",\"touchcancel\",\"touchmove\",\"touchstart\",\"touchend\",\"transitioncancel\",\"transitionend\",\"waiting\",\"wheel\"],pt=[\"afterscriptexecute\",\"beforescriptexecute\",\"DOMContentLoaded\",\"fullscreenchange\",\"mozfullscreenchange\",\"webkitfullscreenchange\",\"msfullscreenchange\",\"fullscreenerror\",\"mozfullscreenerror\",\"webkitfullscreenerror\",\"msfullscreenerror\",\"readystatechange\",\"visibilitychange\"],vt=[\"absolutedeviceorientation\",\"afterinput\",\"afterprint\",\"appinstalled\",\"beforeinstallprompt\",\"beforeprint\",\"beforeunload\",\"devicelight\",\"devicemotion\",\"deviceorientation\",\"deviceorientationabsolute\",\"deviceproximity\",\"hashchange\",\"languagechange\",\"message\",\"mozbeforepaint\",\"offline\",\"online\",\"paint\",\"pageshow\",\"pagehide\",\"popstate\",\"rejectionhandled\",\"storage\",\"unhandledrejection\",\"unload\",\"userproximity\",\"vrdisplyconnected\",\"vrdisplaydisconnected\",\"vrdisplaypresentchange\"],dt=[\"beforecopy\",\"beforecut\",\"beforepaste\",\"copy\",\"cut\",\"paste\",\"dragstart\",\"loadend\",\"animationstart\",\"search\",\"transitionrun\",\"transitionstart\",\"webkitanimationend\",\"webkitanimationiteration\",\"webkitanimationstart\",\"webkittransitionend\"],gt=[\"encrypted\",\"waitingforkey\",\"msneedkey\",\"mozinterruptbegin\",\"mozinterruptend\"],yt=[\"activate\",\"afterupdate\",\"ariarequest\",\"beforeactivate\",\"beforedeactivate\",\"beforeeditfocus\",\"beforeupdate\",\"cellchange\",\"controlselect\",\"dataavailable\",\"datasetchanged\",\"datasetcomplete\",\"errorupdate\",\"filterchange\",\"layoutcomplete\",\"losecapture\",\"move\",\"moveend\",\"movestart\",\"propertychange\",\"resizeend\",\"resizestart\",\"rowenter\",\"rowexit\",\"rowsdelete\",\"rowsinserted\",\"command\",\"compassneedscalibration\",\"deactivate\",\"help\",\"mscontentzoom\",\"msmanipulationstatechanged\",\"msgesturechange\",\"msgesturedoubletap\",\"msgestureend\",\"msgesturehold\",\"msgesturestart\",\"msgesturetap\",\"msgotpointercapture\",\"msinertiastart\",\"mslostpointercapture\",\"mspointercancel\",\"mspointerdown\",\"mspointerenter\",\"mspointerhover\",\"mspointerleave\",\"mspointermove\",\"mspointerout\",\"mspointerover\",\"mspointerup\",\"pointerout\",\"mssitemodejumplistitemremoved\",\"msthumbnailclick\",\"stop\",\"storagecommit\"],mt=[\"webglcontextrestored\",\"webglcontextlost\",\"webglcontextcreationerror\"],bt=[\"autocomplete\",\"autocompleteerror\"],_t=[\"toggle\"],kt=[\"load\"],wt=[\"blur\",\"error\",\"focus\",\"load\",\"resize\",\"scroll\",\"messageerror\"],St=[\"bounce\",\"finish\",\"start\"],Tt=[\"loadstart\",\"progress\",\"abort\",\"error\",\"load\",\"progress\",\"timeout\",\"loadend\",\"readystatechange\"],Et=[\"upgradeneeded\",\"complete\",\"abort\",\"success\",\"error\",\"blocked\",\"versionchange\",\"close\"],Ot=[\"close\",\"error\",\"open\",\"message\"],Pt=[\"error\",\"message\"],Mt=ht.concat(mt,bt,_t,pt,vt,dt,yt),Ft=D(\"unbound\");Zone.__load_patch(\"util\",function(t,e,n){n.patchOnProperties=o,n.patchMethod=a}),Zone.__load_patch(\"timers\",function(t,e,n){v(t,\"set\",\"clear\",\"Timeout\"),v(t,\"set\",\"clear\",\"Interval\"),v(t,\"set\",\"clear\",\"Immediate\")}),Zone.__load_patch(\"requestAnimationFrame\",function(t,e,n){v(t,\"request\",\"cancel\",\"AnimationFrame\"),v(t,\"mozRequest\",\"mozCancel\",\"AnimationFrame\"),v(t,\"webkitRequest\",\"webkitCancel\",\"AnimationFrame\")}),Zone.__load_patch(\"blocking\",function(t,e,n){for(var r=[\"alert\",\"prompt\",\"confirm\"],o=0;o<r.length;o++){a(t,r[o],function(n,r,o){return function(r,i){return e.current.run(n,t,i,o)}})}}),Zone.__load_patch(\"EventTarget\",function(t,e,n){P(t,n),O(t,n);var r=t.XMLHttpRequestEventTarget;r&&r.prototype&&n.patchEventTarget(t,[r.prototype]),i(\"MutationObserver\"),i(\"WebKitMutationObserver\"),i(\"IntersectionObserver\"),i(\"FileReader\")}),Zone.__load_patch(\"on_property\",function(t,e,n){S(n,t),d(),M(t)}),Zone.__load_patch(\"canvas\",function(t,e,n){var r=t.HTMLCanvasElement;void 0!==r&&r.prototype&&r.prototype.toBlob&&u(r.prototype,\"toBlob\",function(t,e){return{name:\"HTMLCanvasElement.toBlob\",target:t,callbackIndex:0,args:e}})}),Zone.__load_patch(\"XHR\",function(t,e,n){!function(t){function n(t){return t[r]}function s(t){XMLHttpRequest[u]=!1;var e=t.data,n=e.target,o=n[i];v||(v=n[h],d=n[p]),o&&d.apply(n,[y,o]);var a=n[i]=function(){n.readyState===n.DONE&&!e.aborted&&XMLHttpRequest[u]&&t.state===m&&t.invoke()};return v.apply(n,[y,a]),n[r]||(n[r]=t),_.apply(n,e.args),XMLHttpRequest[u]=!0,t}function f(){}function l(t){var e=t.data;return e.aborted=!0,k.apply(e.target,e.args)}var h=D(\"addEventListener\"),p=D(\"removeEventListener\"),v=XMLHttpRequest.prototype[h],d=XMLHttpRequest.prototype[p];if(!v){var g=t.XMLHttpRequestEventTarget;g&&(v=g.prototype[h],d=g.prototype[p])}var y=\"readystatechange\",m=\"scheduled\",b=a(t.XMLHttpRequest.prototype,\"open\",function(){return function(t,e){return t[o]=0==e[2],t[c]=e[1],b.apply(t,e)}}),_=a(t.XMLHttpRequest.prototype,\"send\",function(){return function(t,n){var r=e.current;if(t[o])return _.apply(t,n);var i={target:t,url:t[c],isPeriodic:!1,delay:null,args:n,aborted:!1};return r.scheduleMacroTask(\"XMLHttpRequest.send\",f,i,s,l)}}),k=a(t.XMLHttpRequest.prototype,\"abort\",function(t){return function(t,e){var r=n(t);if(r&&\"string\"==typeof r.type){if(null==r.cancelFn||r.data&&r.data.aborted)return;r.zone.cancelTask(r)}}})}(t);var r=D(\"xhrTask\"),o=D(\"xhrSync\"),i=D(\"xhrListener\"),u=D(\"xhrScheduled\"),c=D(\"xhrURL\")}),Zone.__load_patch(\"geolocation\",function(t,n,r){t.navigator&&t.navigator.geolocation&&e(t.navigator.geolocation,[\"getCurrentPosition\",\"watchPosition\"])}),Zone.__load_patch(\"PromiseRejectionEvent\",function(t,e,n){function r(e){return function(n){h(t,e).forEach(function(r){var o=t.PromiseRejectionEvent;if(o){var i=new o(e,{\npromise:n.promise,reason:n.rejection});r.invoke(i)}})}}t.PromiseRejectionEvent&&(e[D(\"unhandledPromiseRejectionHandler\")]=r(\"unhandledrejection\"),e[D(\"rejectionHandledHandler\")]=r(\"rejectionhandled\"))})})});!function(){\"function\"!=typeof Element.prototype.matches&&(Element.prototype.matches=Element.prototype.msMatchesSelector||Element.prototype.webkitMatchesSelector||function(t){for(var e=this,n=(e.document||e.ownerDocument).querySelectorAll(t),r=0;n[r]&&n[r]!==e;)++r;return Boolean(n[r])}),\"function\"!=typeof Element.prototype.closest&&(Element.prototype.closest=function(t){for(var e=this;e&&1===e.nodeType;){if(e.matches(t))return e;e=e.parentNode}return null});var t=window;t.requestAnimationFrame||(t.requestAnimationFrame=t.webkitRequestAnimationFrame,t.cancelAnimationFrame=t.webkitCancelAnimationFrame||t.webkitCancelRequestAnimationFrame,t.requestAnimationFrame||(t.requestAnimationFrame=function(e,n){var r=(new Date).getTime(),o=Math.max(0,16-(r-lastTime)),i=t.setTimeout(function(){e(r+o)},o);return lastTime=r+o,i}),t.cancelAnimationFrame||(t.cancelAnimationFrame=function(t){clearTimeout(t)}))}(),t.__moduleExports=ke}(this.MyBundle=this.MyBundle||{});\n"
  },
  {
    "path": "content/dist/preview-app/www/build/sw-toolbox.js",
    "content": "/* \n Copyright 2016 Google Inc. All Rights Reserved.\n\n Licensed under the Apache License, Version 2.0 (the \"License\");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n\n     http://www.apache.org/licenses/LICENSE-2.0\n\n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n*/!function(e){if(\"object\"==typeof exports&&\"undefined\"!=typeof module)module.exports=e();else if(\"function\"==typeof define&&define.amd)define([],e);else{var t;t=\"undefined\"!=typeof window?window:\"undefined\"!=typeof global?global:\"undefined\"!=typeof self?self:this,t.toolbox=e()}}(function(){return function e(t,n,r){function o(c,s){if(!n[c]){if(!t[c]){var a=\"function\"==typeof require&&require;if(!s&&a)return a(c,!0);if(i)return i(c,!0);var u=new Error(\"Cannot find module '\"+c+\"'\");throw u.code=\"MODULE_NOT_FOUND\",u}var f=n[c]={exports:{}};t[c][0].call(f.exports,function(e){var n=t[c][1][e];return o(n?n:e)},f,f.exports,e,t,n,r)}return n[c].exports}for(var i=\"function\"==typeof require&&require,c=0;c<r.length;c++)o(r[c]);return o}({1:[function(e,t,n){\"use strict\";function r(e,t){t=t||{};var n=t.debug||m.debug;n&&console.log(\"[sw-toolbox] \"+e)}function o(e){var t;return e&&e.cache&&(t=e.cache.name),t=t||m.cache.name,caches.open(t)}function i(e,t){t=t||{};var n=t.successResponses||m.successResponses;return fetch(e.clone()).then(function(r){return\"GET\"===e.method&&n.test(r.status)&&o(t).then(function(n){n.put(e,r).then(function(){var r=t.cache||m.cache;(r.maxEntries||r.maxAgeSeconds)&&r.name&&c(e,n,r)})}),r.clone()})}function c(e,t,n){var r=s.bind(null,e,t,n);d=d?d.then(r):r()}function s(e,t,n){var o=e.url,i=n.maxAgeSeconds,c=n.maxEntries,s=n.name,a=Date.now();return r(\"Updating LRU order for \"+o+\". Max entries is \"+c+\", max age is \"+i),g.getDb(s).then(function(e){return g.setTimestampForUrl(e,o,a)}).then(function(e){return g.expireEntries(e,c,i,a)}).then(function(e){r(\"Successfully updated IDB.\");var n=e.map(function(e){return t.delete(e)});return Promise.all(n).then(function(){r(\"Done with cache cleanup.\")})}).catch(function(e){r(e)})}function a(e,t,n){return r(\"Renaming cache: [\"+e+\"] to [\"+t+\"]\",n),caches.delete(t).then(function(){return Promise.all([caches.open(e),caches.open(t)]).then(function(t){var n=t[0],r=t[1];return n.keys().then(function(e){return Promise.all(e.map(function(e){return n.match(e).then(function(t){return r.put(e,t)})}))}).then(function(){return caches.delete(e)})})})}function u(e,t){return o(t).then(function(t){return t.add(e)})}function f(e,t){return o(t).then(function(t){return t.delete(e)})}function h(e){e instanceof Promise||p(e),m.preCacheItems=m.preCacheItems.concat(e)}function p(e){var t=Array.isArray(e);if(t&&e.forEach(function(e){\"string\"==typeof e||e instanceof Request||(t=!1)}),!t)throw new TypeError(\"The precache method expects either an array of strings and/or Requests or a Promise that resolves to an array of strings and/or Requests.\");return e}function l(e,t,n){if(!e)return!1;if(t){var r=e.headers.get(\"date\");if(r){var o=new Date(r);if(o.getTime()+1e3*t<n)return!1}}return!0}var d,m=e(\"./options\"),g=e(\"./idb-cache-expiration\");t.exports={debug:r,fetchAndCache:i,openCache:o,renameCache:a,cache:u,uncache:f,precache:h,validatePrecacheInput:p,isResponseFresh:l}},{\"./idb-cache-expiration\":2,\"./options\":4}],2:[function(e,t,n){\"use strict\";function r(e){return new Promise(function(t,n){var r=indexedDB.open(u+e,f);r.onupgradeneeded=function(){var e=r.result.createObjectStore(h,{keyPath:p});e.createIndex(l,l,{unique:!1})},r.onsuccess=function(){t(r.result)},r.onerror=function(){n(r.error)}})}function o(e){return e in d||(d[e]=r(e)),d[e]}function i(e,t,n){return new Promise(function(r,o){var i=e.transaction(h,\"readwrite\"),c=i.objectStore(h);c.put({url:t,timestamp:n}),i.oncomplete=function(){r(e)},i.onabort=function(){o(i.error)}})}function c(e,t,n){return t?new Promise(function(r,o){var i=1e3*t,c=[],s=e.transaction(h,\"readwrite\"),a=s.objectStore(h),u=a.index(l);u.openCursor().onsuccess=function(e){var t=e.target.result;if(t&&n-i>t.value[l]){var r=t.value[p];c.push(r),a.delete(r),t.continue()}},s.oncomplete=function(){r(c)},s.onabort=o}):Promise.resolve([])}function s(e,t){return t?new Promise(function(n,r){var o=[],i=e.transaction(h,\"readwrite\"),c=i.objectStore(h),s=c.index(l),a=s.count();s.count().onsuccess=function(){var e=a.result;e>t&&(s.openCursor().onsuccess=function(n){var r=n.target.result;if(r){var i=r.value[p];o.push(i),c.delete(i),e-o.length>t&&r.continue()}})},i.oncomplete=function(){n(o)},i.onabort=r}):Promise.resolve([])}function a(e,t,n,r){return c(e,n,r).then(function(n){return s(e,t).then(function(e){return n.concat(e)})})}var u=\"sw-toolbox-\",f=1,h=\"store\",p=\"url\",l=\"timestamp\",d={};t.exports={getDb:o,setTimestampForUrl:i,expireEntries:a}},{}],3:[function(e,t,n){\"use strict\";function r(e){var t=a.match(e.request);t?e.respondWith(t(e.request)):a.default&&\"GET\"===e.request.method&&0===e.request.url.indexOf(\"http\")&&e.respondWith(a.default(e.request))}function o(e){s.debug(\"activate event fired\");var t=u.cache.name+\"$$$inactive$$$\";e.waitUntil(s.renameCache(t,u.cache.name))}function i(e){return e.reduce(function(e,t){return e.concat(t)},[])}function c(e){var t=u.cache.name+\"$$$inactive$$$\";s.debug(\"install event fired\"),s.debug(\"creating cache [\"+t+\"]\"),e.waitUntil(s.openCache({cache:{name:t}}).then(function(e){return Promise.all(u.preCacheItems).then(i).then(s.validatePrecacheInput).then(function(t){return s.debug(\"preCache list: \"+(t.join(\", \")||\"(none)\")),e.addAll(t)})}))}e(\"serviceworker-cache-polyfill\");var s=e(\"./helpers\"),a=e(\"./router\"),u=e(\"./options\");t.exports={fetchListener:r,activateListener:o,installListener:c}},{\"./helpers\":1,\"./options\":4,\"./router\":6,\"serviceworker-cache-polyfill\":16}],4:[function(e,t,n){\"use strict\";var r;r=self.registration?self.registration.scope:self.scope||new URL(\"./\",self.location).href,t.exports={cache:{name:\"$$$toolbox-cache$$$\"+r+\"$$$\",maxAgeSeconds:null,maxEntries:null},debug:!1,networkTimeoutSeconds:null,preCacheItems:[],successResponses:/^0|([123]\\d\\d)|(40[14567])|410$/}},{}],5:[function(e,t,n){\"use strict\";var r=new URL(\"./\",self.location),o=r.pathname,i=e(\"path-to-regexp\"),c=function(e,t,n,r){t instanceof RegExp?this.fullUrlRegExp=t:(0!==t.indexOf(\"/\")&&(t=o+t),this.keys=[],this.regexp=i(t,this.keys)),this.method=e,this.options=r,this.handler=n};c.prototype.makeHandler=function(e){var t;if(this.regexp){var n=this.regexp.exec(e);t={},this.keys.forEach(function(e,r){t[e.name]=n[r+1]})}return function(e){return this.handler(e,t,this.options)}.bind(this)},t.exports=c},{\"path-to-regexp\":15}],6:[function(e,t,n){\"use strict\";function r(e){return e.replace(/[-\\/\\\\^$*+?.()|[\\]{}]/g,\"\\\\$&\")}var o=e(\"./route\"),i=e(\"./helpers\"),c=function(e,t){for(var n=e.entries(),r=n.next(),o=[];!r.done;){var i=new RegExp(r.value[0]);i.test(t)&&o.push(r.value[1]),r=n.next()}return o},s=function(){this.routes=new Map,this.routes.set(RegExp,new Map),this.default=null};[\"get\",\"post\",\"put\",\"delete\",\"head\",\"any\"].forEach(function(e){s.prototype[e]=function(t,n,r){return this.add(e,t,n,r)}}),s.prototype.add=function(e,t,n,c){c=c||{};var s;t instanceof RegExp?s=RegExp:(s=c.origin||self.location.origin,s=s instanceof RegExp?s.source:r(s)),e=e.toLowerCase();var a=new o(e,t,n,c);this.routes.has(s)||this.routes.set(s,new Map);var u=this.routes.get(s);u.has(e)||u.set(e,new Map);var f=u.get(e),h=a.regexp||a.fullUrlRegExp;f.has(h.source)&&i.debug('\"'+t+'\" resolves to same regex as existing route.'),f.set(h.source,a)},s.prototype.matchMethod=function(e,t){var n=new URL(t),r=n.origin,o=n.pathname;return this._match(e,c(this.routes,r),o)||this._match(e,[this.routes.get(RegExp)],t)},s.prototype._match=function(e,t,n){if(0===t.length)return null;for(var r=0;r<t.length;r++){var o=t[r],i=o&&o.get(e.toLowerCase());if(i){var s=c(i,n);if(s.length>0)return s[0].makeHandler(n)}}return null},s.prototype.match=function(e){return this.matchMethod(e.method,e.url)||this.matchMethod(\"any\",e.url)},t.exports=new s},{\"./helpers\":1,\"./route\":5}],7:[function(e,t,n){\"use strict\";function r(e,t,n){return n=n||{},i.debug(\"Strategy: cache first [\"+e.url+\"]\",n),i.openCache(n).then(function(t){return t.match(e).then(function(t){var r=n.cache||o.cache,c=Date.now();return i.isResponseFresh(t,r.maxAgeSeconds,c)?t:i.fetchAndCache(e,n)})})}var o=e(\"../options\"),i=e(\"../helpers\");t.exports=r},{\"../helpers\":1,\"../options\":4}],8:[function(e,t,n){\"use strict\";function r(e,t,n){return n=n||{},i.debug(\"Strategy: cache only [\"+e.url+\"]\",n),i.openCache(n).then(function(t){return t.match(e).then(function(e){var t=n.cache||o.cache,r=Date.now();if(i.isResponseFresh(e,t.maxAgeSeconds,r))return e})})}var o=e(\"../options\"),i=e(\"../helpers\");t.exports=r},{\"../helpers\":1,\"../options\":4}],9:[function(e,t,n){\"use strict\";function r(e,t,n){return o.debug(\"Strategy: fastest [\"+e.url+\"]\",n),new Promise(function(r,c){var s=!1,a=[],u=function(e){a.push(e.toString()),s?c(new Error('Both cache and network failed: \"'+a.join('\", \"')+'\"')):s=!0},f=function(e){e instanceof Response?r(e):u(\"No result returned\")};o.fetchAndCache(e.clone(),n).then(f,u),i(e,t,n).then(f,u)})}var o=e(\"../helpers\"),i=e(\"./cacheOnly\");t.exports=r},{\"../helpers\":1,\"./cacheOnly\":8}],10:[function(e,t,n){t.exports={networkOnly:e(\"./networkOnly\"),networkFirst:e(\"./networkFirst\"),cacheOnly:e(\"./cacheOnly\"),cacheFirst:e(\"./cacheFirst\"),fastest:e(\"./fastest\")}},{\"./cacheFirst\":7,\"./cacheOnly\":8,\"./fastest\":9,\"./networkFirst\":11,\"./networkOnly\":12}],11:[function(e,t,n){\"use strict\";function r(e,t,n){n=n||{};var r=n.successResponses||o.successResponses,c=n.networkTimeoutSeconds||o.networkTimeoutSeconds;return i.debug(\"Strategy: network first [\"+e.url+\"]\",n),i.openCache(n).then(function(t){var s,a,u=[];if(c){var f=new Promise(function(r){s=setTimeout(function(){t.match(e).then(function(e){var t=n.cache||o.cache,c=Date.now(),s=t.maxAgeSeconds;i.isResponseFresh(e,s,c)&&r(e)})},1e3*c)});u.push(f)}var h=i.fetchAndCache(e,n).then(function(e){if(s&&clearTimeout(s),r.test(e.status))return e;throw i.debug(\"Response was an HTTP error: \"+e.statusText,n),a=e,new Error(\"Bad response\")}).catch(function(r){return i.debug(\"Network or response error, fallback to cache [\"+e.url+\"]\",n),t.match(e).then(function(e){if(e)return e;if(a)return a;throw r})});return u.push(h),Promise.race(u)})}var o=e(\"../options\"),i=e(\"../helpers\");t.exports=r},{\"../helpers\":1,\"../options\":4}],12:[function(e,t,n){\"use strict\";function r(e,t,n){return o.debug(\"Strategy: network only [\"+e.url+\"]\",n),fetch(e)}var o=e(\"../helpers\");t.exports=r},{\"../helpers\":1}],13:[function(e,t,n){\"use strict\";var r=e(\"./options\"),o=e(\"./router\"),i=e(\"./helpers\"),c=e(\"./strategies\"),s=e(\"./listeners\");i.debug(\"Service Worker Toolbox is loading\"),self.addEventListener(\"install\",s.installListener),self.addEventListener(\"activate\",s.activateListener),self.addEventListener(\"fetch\",s.fetchListener),t.exports={networkOnly:c.networkOnly,networkFirst:c.networkFirst,cacheOnly:c.cacheOnly,cacheFirst:c.cacheFirst,fastest:c.fastest,router:o,options:r,cache:i.cache,uncache:i.uncache,precache:i.precache}},{\"./helpers\":1,\"./listeners\":3,\"./options\":4,\"./router\":6,\"./strategies\":10}],14:[function(e,t,n){t.exports=Array.isArray||function(e){return\"[object Array]\"==Object.prototype.toString.call(e)}},{}],15:[function(e,t,n){function r(e,t){for(var n,r=[],o=0,i=0,c=\"\",s=t&&t.delimiter||\"/\";null!=(n=x.exec(e));){var f=n[0],h=n[1],p=n.index;if(c+=e.slice(i,p),i=p+f.length,h)c+=h[1];else{var l=e[i],d=n[2],m=n[3],g=n[4],v=n[5],w=n[6],y=n[7];c&&(r.push(c),c=\"\");var b=null!=d&&null!=l&&l!==d,E=\"+\"===w||\"*\"===w,R=\"?\"===w||\"*\"===w,k=n[2]||s,$=g||v;r.push({name:m||o++,prefix:d||\"\",delimiter:k,optional:R,repeat:E,partial:b,asterisk:!!y,pattern:$?u($):y?\".*\":\"[^\"+a(k)+\"]+?\"})}}return i<e.length&&(c+=e.substr(i)),c&&r.push(c),r}function o(e,t){return s(r(e,t))}function i(e){return encodeURI(e).replace(/[\\/?#]/g,function(e){return\"%\"+e.charCodeAt(0).toString(16).toUpperCase()})}function c(e){return encodeURI(e).replace(/[?#]/g,function(e){return\"%\"+e.charCodeAt(0).toString(16).toUpperCase()})}function s(e){for(var t=new Array(e.length),n=0;n<e.length;n++)\"object\"==typeof e[n]&&(t[n]=new RegExp(\"^(?:\"+e[n].pattern+\")$\"));return function(n,r){for(var o=\"\",s=n||{},a=r||{},u=a.pretty?i:encodeURIComponent,f=0;f<e.length;f++){var h=e[f];if(\"string\"!=typeof h){var p,l=s[h.name];if(null==l){if(h.optional){h.partial&&(o+=h.prefix);continue}throw new TypeError('Expected \"'+h.name+'\" to be defined')}if(v(l)){if(!h.repeat)throw new TypeError('Expected \"'+h.name+'\" to not repeat, but received `'+JSON.stringify(l)+\"`\");if(0===l.length){if(h.optional)continue;throw new TypeError('Expected \"'+h.name+'\" to not be empty')}for(var d=0;d<l.length;d++){if(p=u(l[d]),!t[f].test(p))throw new TypeError('Expected all \"'+h.name+'\" to match \"'+h.pattern+'\", but received `'+JSON.stringify(p)+\"`\");o+=(0===d?h.prefix:h.delimiter)+p}}else{if(p=h.asterisk?c(l):u(l),!t[f].test(p))throw new TypeError('Expected \"'+h.name+'\" to match \"'+h.pattern+'\", but received \"'+p+'\"');o+=h.prefix+p}}else o+=h}return o}}function a(e){return e.replace(/([.+*?=^!:${}()[\\]|\\/\\\\])/g,\"\\\\$1\")}function u(e){return e.replace(/([=!:$\\/()])/g,\"\\\\$1\")}function f(e,t){return e.keys=t,e}function h(e){return e.sensitive?\"\":\"i\"}function p(e,t){var n=e.source.match(/\\((?!\\?)/g);if(n)for(var r=0;r<n.length;r++)t.push({name:r,prefix:null,delimiter:null,optional:!1,repeat:!1,partial:!1,asterisk:!1,pattern:null});return f(e,t)}function l(e,t,n){for(var r=[],o=0;o<e.length;o++)r.push(g(e[o],t,n).source);var i=new RegExp(\"(?:\"+r.join(\"|\")+\")\",h(n));return f(i,t)}function d(e,t,n){return m(r(e,n),t,n)}function m(e,t,n){v(t)||(n=t||n,t=[]),n=n||{};for(var r=n.strict,o=n.end!==!1,i=\"\",c=0;c<e.length;c++){var s=e[c];if(\"string\"==typeof s)i+=a(s);else{var u=a(s.prefix),p=\"(?:\"+s.pattern+\")\";t.push(s),s.repeat&&(p+=\"(?:\"+u+p+\")*\"),p=s.optional?s.partial?u+\"(\"+p+\")?\":\"(?:\"+u+\"(\"+p+\"))?\":u+\"(\"+p+\")\",i+=p}}var l=a(n.delimiter||\"/\"),d=i.slice(-l.length)===l;return r||(i=(d?i.slice(0,-l.length):i)+\"(?:\"+l+\"(?=$))?\"),i+=o?\"$\":r&&d?\"\":\"(?=\"+l+\"|$)\",f(new RegExp(\"^\"+i,h(n)),t)}function g(e,t,n){return v(t)||(n=t||n,t=[]),n=n||{},e instanceof RegExp?p(e,t):v(e)?l(e,t,n):d(e,t,n)}var v=e(\"isarray\");t.exports=g,t.exports.parse=r,t.exports.compile=o,t.exports.tokensToFunction=s,t.exports.tokensToRegExp=m;var x=new RegExp([\"(\\\\\\\\.)\",\"([\\\\/.])?(?:(?:\\\\:(\\\\w+)(?:\\\\(((?:\\\\\\\\.|[^\\\\\\\\()])+)\\\\))?|\\\\(((?:\\\\\\\\.|[^\\\\\\\\()])+)\\\\))([+*?])?|(\\\\*))\"].join(\"|\"),\"g\")},{isarray:14}],16:[function(e,t,n){!function(){var e=Cache.prototype.addAll,t=navigator.userAgent.match(/(Firefox|Chrome)\\/(\\d+\\.)/);if(t)var n=t[1],r=parseInt(t[2]);e&&(!t||\"Firefox\"===n&&r>=46||\"Chrome\"===n&&r>=50)||(Cache.prototype.addAll=function(e){function t(e){this.name=\"NetworkError\",this.code=19,this.message=e}var n=this;return t.prototype=Object.create(Error.prototype),Promise.resolve().then(function(){if(arguments.length<1)throw new TypeError;return e=e.map(function(e){return e instanceof Request?e:String(e)}),Promise.all(e.map(function(e){\"string\"==typeof e&&(e=new Request(e));var n=new URL(e.url).protocol;if(\"http:\"!==n&&\"https:\"!==n)throw new t(\"Invalid scheme\");return fetch(e.clone())}))}).then(function(r){if(r.some(function(e){return!e.ok}))throw new t(\"Incorrect response status\");return Promise.all(r.map(function(t,r){return n.put(e[r],t)}))}).then(function(){})},Cache.prototype.add=function(e){return this.addAll([e])})}()},{}]},{},[13])(13)});\n//# sourceMappingURL=sw-toolbox.js.map\n"
  },
  {
    "path": "content/dist/preview-app/www/build/vendor.js",
    "content": "!function(t){function e(n){if(i[n])return i[n].exports;var r=i[n]={i:n,l:!1,exports:{}};return t[n].call(r.exports,r,r.exports,e),r.l=!0,r.exports}var n=window.webpackJsonp;window.webpackJsonp=function(i,o,s){for(var a,l,u,c=0,p=[];c<i.length;c++)r[l=i[c]]&&p.push(r[l][0]),r[l]=0;for(a in o)Object.prototype.hasOwnProperty.call(o,a)&&(t[a]=o[a]);for(n&&n(i,o,s);p.length;)p.shift()();if(s)for(c=0;c<s.length;c++)u=e(e.s=s[c]);return u};var i={},r={1:0};e.e=function(t){function n(){a.onerror=a.onload=null,clearTimeout(l);var e=r[t];0!==e&&(e&&e[1](new Error(\"Loading chunk \"+t+\" failed.\")),r[t]=void 0)}var i=r[t];if(0===i)return new Promise(function(t){t()});if(i)return i[2];var o=new Promise(function(e,n){i=r[t]=[e,n]});i[2]=o;var s=document.getElementsByTagName(\"head\")[0],a=document.createElement(\"script\");a.type=\"text/javascript\",a.charset=\"utf-8\",a.async=!0,a.timeout=12e4,e.nc&&a.setAttribute(\"nonce\",e.nc),a.src=e.p+\"\"+t+\".js\";var l=setTimeout(n,12e4);return a.onerror=a.onload=n,s.appendChild(a),o},e.m=t,e.c=i,e.d=function(t,n,i){e.o(t,n)||Object.defineProperty(t,n,{configurable:!1,enumerable:!0,get:i})},e.n=function(t){var n=t&&t.__esModule?function(){return t.default}:function(){return t};return e.d(n,\"a\",n),n},e.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},e.p=\"build/\",e.oe=function(t){throw console.error(t),t}}([function(t,e,n){\"use strict\";(function(t){function i(t){return function(){for(var e=[],n=0;n<arguments.length;n++)e[n]=arguments[n];if(t){var i=t.apply(void 0,e);for(var r in i)this[r]=i[r]}}}function r(t,e,n){function r(){function t(t,e,n){for(var r=t.hasOwnProperty(Be)?t[Be]:Object.defineProperty(t,Be,{value:[]})[Be];r.length<=n;)r.push(null);return(r[n]=r[n]||[]).push(i),t}for(var e=[],n=0;n<arguments.length;n++)e[n]=arguments[n];if(this instanceof r)return o.apply(this,e),this;var i=new((s=r).bind.apply(s,[void 0].concat(e)));return t.annotation=i,t;var s}var o=i(e);return n&&(r.prototype=Object.create(n.prototype)),r.prototype.ngMetadataName=t,r.annotationCls=r,r}function o(){if(!Je){var t=Qe.Symbol;if(t&&t.iterator)Je=t.iterator;else for(var e=Object.getOwnPropertyNames(Map.prototype),n=0;n<e.length;++n){var i=e[n];\"entries\"!==i&&\"size\"!==i&&Map.prototype[i]===Map.prototype.entries&&(Je=i)}}return Je}function s(t){Zone.current.scheduleMicroTask(\"scheduleMicrotask\",t)}function a(t,e){return t===e||\"number\"==typeof t&&\"number\"==typeof e&&isNaN(t)&&isNaN(e)}function l(t){if(\"string\"==typeof t)return t;if(t instanceof Array)return\"[\"+t.map(l).join(\", \")+\"]\";if(null==t)return\"\"+t;if(t.overriddenName)return\"\"+t.overriddenName;if(t.name)return\"\"+t.name;var e=t.toString();if(null==e)return\"\"+e;var n=e.indexOf(\"\\n\");return-1===n?e:e.substring(0,n)}function u(t){return t.__forward_ref__=u,t.toString=function(){return l(this())},t}function c(t){return\"function\"==typeof t&&t.hasOwnProperty(\"__forward_ref__\")&&t.__forward_ref__===u?t():t}function p(t){return _(\"Cannot mix multi providers and regular providers\",t)}function h(t,e){if(e)if((e=c(e))instanceof Array)for(var n=0;n<e.length;n++)h(t,e[n]);else{if(\"function\"==typeof e)throw _(\"Function/Class not supported\",e);if(!e||\"object\"!=typeof e||!e.provide)throw _(\"Unexpected provider\",e);var i=c(e.provide),r=function(t){var e=function(t){var e=sn,n=t.deps;if(n&&n.length){e=[];for(var i=0;i<n.length;i++){var r=6;if((l=c(n[i]))instanceof Array)for(var o=0,s=l;o<s.length;o++){var a=s[o];a instanceof Ge||a==Ge?r|=1:a instanceof Xe||a==Xe?r&=-3:a instanceof We||a==We?r&=-5:l=a instanceof Ze?a.token:c(a)}e.push({token:l,options:r})}}else if(t.useExisting){var l=c(t.useExisting);e=[{token:l,options:6}]}else if(!(n||pn in t))throw _(\"'deps' required\",t);return e}(t),n=on,i=sn,r=!1,o=c(t.provide);if(pn in t)i=t.useValue;else if(t.useFactory)n=t.useFactory;else if(t.useExisting);else if(t.useClass)r=!0,n=c(t.useClass);else{if(\"function\"!=typeof o)throw _(\"StaticProvider does not have [useValue|useFactory|useExisting|useClass] or [provide] is not newable\",t);r=!0,n=o}return{deps:e,fn:n,useNew:r,value:i}}(e);if(!0===e.multi){var o=t.get(i);if(o){if(o.fn!==ln)throw p(i)}else t.set(i,o={token:e.provide,deps:[],useNew:!1,fn:ln,value:sn});o.deps.push({token:i=e,options:6})}var s=t.get(i);if(s&&s.fn==ln)throw p(i);t.set(i,r)}}function f(t,e,n,i,r){try{return function(t,e,n,i,r){var o;if(e){if((o=e.value)==an)throw Error(_n+\"Circular dependency\");if(o===sn){e.value=an;var s=void 0,a=e.useNew,l=e.fn,u=e.deps,c=sn;if(u.length){c=[];for(var p=0;p<u.length;p++){var h=u[p],d=h.options,_=2&d?n.get(h.token):void 0;c.push(f(h.token,_,n,_||4&d?i:fn,1&d?null:rn.THROW_IF_NOT_FOUND))}}e.value=o=a?new((v=l).bind.apply(v,[void 0].concat(c))):l.apply(s,c)}}else o=i.get(t,r);return o;var v}(t,e,n,i,r)}catch(n){n instanceof Error||(n=new Error(n));throw(n[hn]=n[hn]||[]).unshift(t),e&&e.value==an&&(e.value=sn),n}}function d(t,e){t=t&&\"\\n\"===t.charAt(0)&&t.charAt(1)==_n?t.substr(2):t;var n=l(e);if(e instanceof Array)n=e.map(l).join(\" -> \");else if(\"object\"==typeof e){var i=[];for(var r in e)if(e.hasOwnProperty(r)){var o=e[r];i.push(r+\":\"+(\"string\"==typeof o?JSON.stringify(o):l(o)))}n=\"{\"+i.join(\", \")+\"}\"}return\"StaticInjectorError[\"+n+\"]: \"+t.replace(dn,\"\\n  \")}function _(t,e){return new Error(d(t,e))}function v(t){return t[yn]}function y(t){return t[mn]}function m(t){if(t.length>1){return\" (\"+function(t){for(var e=[],n=0;n<t.length;++n){if(e.indexOf(t[n])>-1)return e.push(t[n]),e;e.push(t[n])}return e}(t.slice().reverse()).map(function(t){return l(t.token)}).join(\" -> \")+\")\"}return\"\"}function g(t,e,n,i){var r=[e],o=n(r),s=i?function(t,e){var n=t+\" caused by: \"+(e instanceof Error?e.message:e),i=Error(n);return i[mn]=e,i}(o,i):Error(o);return s.addKey=function(t,e){this.injectors.push(t),this.keys.push(e),this.message=this.constructResolvingMessage(this.keys)},s.keys=r,s.injectors=[t],s.constructResolvingMessage=n,s[mn]=i,s}function b(t,e){for(var n=[],i=0,r=e.length;i<r;i++){var o=e[i];n.push(o&&0!=o.length?o.map(l).join(\" \"):\"?\")}return Error(\"Cannot resolve all parameters for '\"+l(t)+\"'(\"+n.join(\", \")+\"). Make sure that all the parameters are decorated with Inject or have valid type annotations and that '\"+l(t)+\"' is decorated with Injectable.\")}function w(t){return\"function\"==typeof t}function C(t){return t?t.map(function(t){var e=t.type.annotationCls;return new(e.bind.apply(e,[void 0].concat(t.args?t.args:[])))}):[]}function O(t){var e=Object.getPrototypeOf(t.prototype);return(e?e.constructor:null)||Object}function S(t,e){return t.forEach(function(t){if(t instanceof On)e.push({provide:t,useClass:t});else if(t&&\"object\"==typeof t&&void 0!==t.provide)e.push(t);else{if(!(t instanceof Array))throw function(t){return Error(\"Invalid provider - only instances of Provider and Type are allowed, got: \"+t)}(t);S(t,e)}}),e}function E(t){var e=xn.parameters(t);if(!e)return[];if(e.some(function(t){return null==t}))throw b(t,e);return e.map(function(n){return x(t,n,e)})}function x(t,e,n){var i=null,r=!1;if(!Array.isArray(e))return e instanceof Ze?T(e.token,r,null):T(e,r,null);for(var o=null,s=0;s<e.length;++s){var a=e[s];a instanceof On?i=a:a instanceof Ze?i=a.token:a instanceof Ge?r=!0:a instanceof We||a instanceof Xe?o=a:a instanceof Le&&(i=a)}if(null!=(i=c(i)))return T(i,r,o);throw b(t,n)}function T(t,e,n){return new Tn(wn.get(t),e,n)}function k(t){return!!t&&\"function\"==typeof t.then}function P(){return\"\"+A()+A()+A()}function A(){return String.fromCharCode(97+Math.floor(25*Math.random()))}function I(){throw new Error(\"Runtime compiler is not loaded\")}function j(t){var e=Error(\"No component factory found for \"+l(t)+\". Did you add it to @NgModule.entryComponents?\");return e[qn]=t,e}function D(){}function M(t){if(0==t._nesting&&!t.hasPendingMicrotasks&&!t.isStable)try{t._nesting++,t.onMicrotaskEmpty.emit(null)}finally{if(t._nesting--,!t.hasPendingMicrotasks)try{t.runOutsideAngular(function(){return t.onStable.emit(null)})}finally{t.isStable=!0}}}function R(t){t._nesting++,t.isStable&&(t.isStable=!1,t.onUnstable.emit(null))}function N(t){t._nesting--,M(t)}function V(){return ui=!0,li}function L(t,e,n){void 0===n&&(n=[]);var i=new Le(\"Platform: \"+e);return function(e){void 0===e&&(e=[]);var r=F();return r&&!r.injector.get(ci,!1)||(t?t(n.concat(e).concat({provide:i,useValue:!0})):function(t){if(Pe&&!Pe.destroyed&&!Pe.injector.get(ci,!1))throw new Error(\"There can be only one platform. Destroy the previous one to create a new one.\");Pe=t.get(hi);var e=t.get(Vn,null);e&&e.forEach(function(t){return t()})}(rn.create(n.concat(e).concat({provide:i,useValue:!0})))),function(t){var e=F();if(!e)throw new Error(\"No platform exists!\");if(!e.injector.get(t,null))throw new Error(\"A platform with a different configuration has been created. Please destroy it first.\");return e}(i)}}function F(){return Pe&&!Pe.destroyed?Pe:null}function B(t,e){return t=Array.isArray(e)?e.reduce(B,t):Object(De.__assign)({},t,e)}function z(t,e){var n=t.indexOf(e);n>-1&&t.splice(n,1)}function H(t){return t.reduce(function(t,e){var n=Array.isArray(e)?H(e):e;return t.concat(n)},[])}function Y(t,e,n){t.childNodes.forEach(function(t){t instanceof Ei&&(e(t)&&n.push(t),Y(t,e,n))})}function U(t,e,n){t instanceof Ei&&t.childNodes.forEach(function(t){e(t)&&n.push(t),t instanceof Ei&&U(t,e,n)})}function q(t){return xi.get(t)||null}function Z(t){xi.set(t.nativeNode,t)}function G(t,e){var n=W(t),i=W(e);if(n&&i)return function(t,e,n){var i=t[o()](),r=e[o()]();for(;;){var s=i.next(),a=r.next();if(s.done&&a.done)return!0;if(s.done||a.done)return!1;if(!n(s.value,a.value))return!1}}(t,e,G);return!(n||!(t&&(\"object\"==typeof t||\"function\"==typeof t))||i||!(e&&(\"object\"==typeof e||\"function\"==typeof e)))||a(t,e)}function W(t){return!!X(t)&&(Array.isArray(t)||!(t instanceof Map)&&o()in t)}function X(t){return null!==t&&(\"function\"==typeof t||\"object\"==typeof t)}function $(t,e,n){var i=t.previousIndex;if(null===i)return i;var r=0;return n&&i<n.length&&(r=n[i]),i+e+r}function K(t,e){return t.nodes[e]}function Q(t,e){return t.nodes[e]}function J(t,e){return t.nodes[e]}function tt(t,e){return t.nodes[e]}function et(t,e){return t.nodes[e]}function nt(t,e,n,i){var r=\"ExpressionChangedAfterItHasBeenCheckedError: Expression has changed after it was checked. Previous value: '\"+e+\"'. Current value: '\"+n+\"'.\";return i&&(r+=\" It seems like the view has been created after its parent and its children have been dirty checked. Has it been created in a change detection hook ?\"),function(t,e){var n=new Error(t);return it(n,e),n}(r,t)}function it(t,e){t[yn]=e,t[gn]=e.logError.bind(e)}function rt(t){return new Error(\"ViewDestroyedError: Attempt to use a destroyed view: \"+t)}function ot(t){var e=$i.get(t);return e||(e=l(t)+\"_\"+$i.size,$i.set(t,e)),e}function st(t,e,n,i){return!(!(2&t.state)&&a(t.oldValues[e.bindingIndex+n],i))}function at(t,e,n,i){return!!st(t,e,n,i)&&(t.oldValues[e.bindingIndex+n]=i,!0)}function lt(t,e,n,i){var r=t.oldValues[e.bindingIndex+n];if(1&t.state||!G(r,i))throw nt(Wi.createDebugContext(t,e.nodeIndex),r,i,0!=(1&t.state))}function ut(t){for(var e=t;e;)2&e.def.flags&&(e.state|=8),e=e.viewContainerParent||e.parent}function ct(t,e,n,i){try{return ut(33554432&t.def.nodes[e].flags?Q(t,e).componentView:t),Wi.handleEvent(t,e,n,i)}catch(e){t.root.errorHandler.handleError(e)}}function pt(t){if(t.parent){return Q(t.parent,t.parentNodeDef.nodeIndex)}return null}function ht(t){return t.parent?t.parentNodeDef.parent:null}function ft(t,e){switch(201347067&e.flags){case 1:return Q(t,e.nodeIndex).renderElement;case 2:return K(t,e.nodeIndex).renderText}}function dt(t){return!!t.parent&&!!(32768&t.parentNodeDef.flags)}function _t(t){return 1<<t%32}function vt(t){var e={},n=0,i={};return t&&t.forEach(function(t){var r=t[0],o=t[1];\"number\"==typeof r?(e[r]=o,n|=_t(r)):i[r]=o}),{matchedQueries:e,references:i,matchedQueryIds:n}}function yt(t){return t.map(function(t){var e,n;return Array.isArray(t)?(n=t[0],e=t[1]):(n=0,e=t),{flags:n,token:e,tokenKey:ot(e)}})}function mt(t,e,n){var i=n.renderParent;return i?0==(1&i.flags)||0==(33554432&i.flags)||i.element.componentRendererType&&i.element.componentRendererType.encapsulation===Ye.Native?Q(t,n.renderParent.nodeIndex).renderElement:void 0:e}function gt(t){var e=tr.get(t);return e||((e=t(function(){return Xi})).factory=t,tr.set(t,e)),e}function bt(t,e,n,i,r){3===e&&(n=t.renderer.parentNode(ft(t,t.def.lastRenderRootNode))),wt(t,e,0,t.def.nodes.length-1,n,i,r)}function wt(t,e,n,i,r,o,s){for(var a=n;a<=i;a++){var l=t.def.nodes[a];11&l.flags&&Ot(t,l,e,r,o,s),a+=l.childCount}}function Ct(t,e,n,i,r,o){for(var s=t;s&&!dt(s);)s=s.parent;for(var a=s.parent,l=ht(s),u=l.nodeIndex+l.childCount,c=l.nodeIndex+1;c<=u;c++){var p=a.def.nodes[c];p.ngContentIndex===e&&Ot(a,p,n,i,r,o),c+=p.childCount}if(!a.parent){var h=t.root.projectableNodes[e];if(h)for(c=0;c<h.length;c++)St(t,h[c],n,i,r,o)}}function Ot(t,e,n,i,r,o){if(8&e.flags)Ct(t,e.ngContent.index,n,i,r,o);else{var s=ft(t,e);if(3===n&&33554432&e.flags&&48&e.bindingFlags){if(16&e.bindingFlags&&St(t,s,n,i,r,o),32&e.bindingFlags){St(Q(t,e.nodeIndex).componentView,s,n,i,r,o)}}else St(t,s,n,i,r,o);if(16777216&e.flags)for(var a=Q(t,e.nodeIndex).viewContainer._embeddedViews,l=0;l<a.length;l++)bt(a[l],n,i,r,o);1&e.flags&&!e.element.name&&wt(t,n,e.nodeIndex+1,e.nodeIndex+e.childCount,i,r,o)}}function St(t,e,n,i,r,o){var s=t.renderer;switch(n){case 1:s.appendChild(i,e);break;case 2:s.insertBefore(i,e,r);break;case 3:s.removeChild(i,e);break;case 0:o.push(e)}}function Et(t){if(\":\"===t[0]){var e=t.match(er);return[e[1],e[2]]}return[\"\",t]}function xt(t){for(var e=0,n=0;n<t.length;n++)e|=t[n].flags;return e}function Tt(t){return null!=t?t.toString():\"\"}function kt(t,e,n,i){if(!at(t,e,n,i))return!1;var r=e.bindings[n],o=Q(t,e.nodeIndex),s=o.renderElement,a=r.name;switch(15&r.flags){case 1:!function(t,e,n,i,r,o){var s=e.securityContext,a=s?t.root.sanitizer.sanitize(s,o):o;a=null!=a?a.toString():null;var l=t.renderer;null!=o?l.setAttribute(n,r,a,i):l.removeAttribute(n,r,i)}(t,r,s,r.ns,a,i);break;case 2:!function(t,e,n,i){var r=t.renderer;i?r.addClass(e,n):r.removeClass(e,n)}(t,s,a,i);break;case 4:!function(t,e,n,i,r){var o=t.root.sanitizer.sanitize(Zi.STYLE,r);if(null!=o){o=o.toString();var s=e.suffix;null!=s&&(o+=s)}else o=null;var a=t.renderer;null!=o?a.setStyle(n,i,o):a.removeStyle(n,i)}(t,r,s,a,i);break;case 8:!function(t,e,n,i,r){var o=e.securityContext,s=o?t.root.sanitizer.sanitize(o,r):r;t.renderer.setProperty(n,i,s)}(33554432&e.flags&&32&r.flags?o.componentView:t,r,s,a,i)}return!0}function Pt(t,e,n){if(void 0===n&&(n=rn.THROW_IF_NOT_FOUND),8&e.flags)return e.token;if(2&e.flags&&(n=null),1&e.flags)return t._parent.get(e.token,n);var i=e.tokenKey;switch(i){case ir:case rr:return t}var r=t._def.providersByKey[i];if(r){var o=t._providers[r.index];return void 0===o&&(o=t._providers[r.index]=At(t,r)),o===nr?void 0:o}return t._parent.get(e.token,n)}function At(t,e){var n;switch(201347067&e.flags){case 512:n=function(t,e,n){var i=n.length;switch(i){case 0:return new e;case 1:return new e(Pt(t,n[0]));case 2:return new e(Pt(t,n[0]),Pt(t,n[1]));case 3:return new e(Pt(t,n[0]),Pt(t,n[1]),Pt(t,n[2]));default:for(var r=new Array(i),o=0;o<i;o++)r[o]=Pt(t,n[o]);return new(e.bind.apply(e,[void 0].concat(r)))}}(t,e.value,e.deps);break;case 1024:n=function(t,e,n){var i=n.length;switch(i){case 0:return e();case 1:return e(Pt(t,n[0]));case 2:return e(Pt(t,n[0]),Pt(t,n[1]));case 3:return e(Pt(t,n[0]),Pt(t,n[1]),Pt(t,n[2]));default:for(var r=Array(i),o=0;o<i;o++)r[o]=Pt(t,n[o]);return e.apply(void 0,r)}}(t,e.value,e.deps);break;case 2048:n=Pt(t,e.deps[0]);break;case 256:n=e.value}return void 0===n?nr:n}function It(t,e){var n=t.viewContainer._embeddedViews;if((null==e||e>=n.length)&&(e=n.length-1),e<0)return null;var i=n[e];return i.viewContainerParent=null,Rt(n,e),Wi.dirtyParentQueries(i),Dt(i),i}function jt(t,e,n){var i=e?ft(e,e.def.lastRenderRootNode):t.renderElement;bt(n,2,n.renderer.parentNode(i),n.renderer.nextSibling(i),void 0)}function Dt(t){bt(t,3,null,null,void 0)}function Mt(t,e,n){e>=t.length?t.push(n):t.splice(e,0,n)}function Rt(t,e){e>=t.length-1?t.pop():t.splice(e,1)}function Nt(t,e){return new pr(t,e)}function Vt(t,e,n,i){return new fr(t,e,n,i)}function Lt(t,e,n,i,r,o,s,a,l){var u=vt(n),p=u.matchedQueries,h=u.references,f=u.matchedQueryIds;l||(l=[]),a||(a=[]),o=c(o);var d=yt(s);return{nodeIndex:-1,parent:null,renderParent:null,bindingIndex:-1,outputIndex:-1,checkIndex:t,flags:e,childFlags:0,directChildFlags:0,childMatchedQueries:0,matchedQueries:p,matchedQueryIds:f,references:h,ngContentIndex:-1,childCount:i,bindings:a,bindingFlags:xt(a),outputs:l,element:null,provider:{token:r,value:o,deps:d},text:null,query:null,ngContent:null}}function Ft(t,e){var n=(8192&e.flags)>0,i=e.provider;switch(201347067&e.flags){case 512:return Bt(t,e.parent,n,i.value,i.deps);case 1024:return function(t,e,n,i,r){var o=r.length;switch(o){case 0:return i();case 1:return i(zt(t,e,n,r[0]));case 2:return i(zt(t,e,n,r[0]),zt(t,e,n,r[1]));case 3:return i(zt(t,e,n,r[0]),zt(t,e,n,r[1]),zt(t,e,n,r[2]));default:for(var s=Array(o),a=0;a<o;a++)s[a]=zt(t,e,n,r[a]);return i.apply(void 0,s)}}(t,e.parent,n,i.value,i.deps);case 2048:return zt(t,e.parent,n,i.deps[0]);case 256:return i.value}}function Bt(t,e,n,i,r){var o=r.length;switch(o){case 0:return new i;case 1:return new i(zt(t,e,n,r[0]));case 2:return new i(zt(t,e,n,r[0]),zt(t,e,n,r[1]));case 3:return new i(zt(t,e,n,r[0]),zt(t,e,n,r[1]),zt(t,e,n,r[2]));default:for(var s=new Array(o),a=0;a<o;a++)s[a]=zt(t,e,n,r[a]);return new(i.bind.apply(i,[void 0].concat(s)))}}function zt(t,e,n,i,r){if(void 0===r&&(r=rn.THROW_IF_NOT_FOUND),8&i.flags)return i.token;var o=t;2&i.flags&&(r=null);var s=i.tokenKey;for(s===gr&&(n=!(!e||!e.element.componentView)),e&&1&i.flags&&(n=!1,e=e.parent);t;){if(e)switch(s){case dr:return function(t){return new hr(t.renderer)}(a=Ht(t,e,n));case _r:var a=Ht(t,e,n);return a.renderer;case vr:return new mi(Q(t,e.nodeIndex).renderElement);case yr:return Q(t,e.nodeIndex).viewContainer;case mr:if(e.element.template)return Q(t,e.nodeIndex).template;break;case gr:return function(t){return new ur(t)}(Ht(t,e,n));case br:return Nt(t,e);default:var l=(n?e.element.allProviders:e.element.publicProviders)[s];if(l){var u=J(t,l.nodeIndex);return u||(u={instance:Ft(t,l)},t.nodes[l.nodeIndex]=u),u.instance}}n=dt(t),e=ht(t),t=t.parent}var c=o.root.injector.get(i.token,wr);return c!==wr||r===wr?c:o.root.ngModule.injector.get(i.token,r)}function Ht(t,e,n){var i;if(n)i=Q(t,e.nodeIndex).componentView;else for(i=t;i.parent&&!dt(i);)i=i.parent;return i}function Yt(t,e,n,i,r,o){if(32768&n.flags){var s=Q(t,n.parent.nodeIndex).componentView;2&s.def.flags&&(s.state|=8)}if(e.instance[n.bindings[i].name]=r,524288&n.flags){o=o||{};var a=t.oldValues[n.bindingIndex+i];a instanceof Ti&&(a=a.wrapped);o[n.bindings[i].nonMinifiedName]=new ki(a,r,0!=(2&t.state))}return t.oldValues[n.bindingIndex+i]=r,o}function Ut(t,e){if(t.def.nodeFlags&e)for(var n=t.def.nodes,i=0;i<n.length;i++){var r=n[i],o=r.parent;for(!o&&r.flags&e&&qt(t,i,r.flags&e),0==(r.childFlags&e)&&(i+=r.childCount);o&&1&o.flags&&i===o.nodeIndex+o.childCount;)o.directChildFlags&e&&function(t,e,n){for(var i=e.nodeIndex+1;i<=e.nodeIndex+e.childCount;i++){var r=t.def.nodes[i];r.flags&n&&qt(t,i,r.flags&n),i+=r.childCount}}(t,o,e),o=o.parent}}function qt(t,e,n){var i=J(t,e);if(i){var r=i.instance;r&&(Wi.setCurrentNode(t,e),1048576&n&&r.ngAfterContentInit(),2097152&n&&r.ngAfterContentChecked(),4194304&n&&r.ngAfterViewInit(),8388608&n&&r.ngAfterViewChecked(),131072&n&&r.ngOnDestroy())}}function Zt(t,e,n,i,r){for(var o=e;o<=n;o++){var s=t.def.nodes[o],a=s.matchedQueries[i.id];if(null!=a&&r.push(Gt(t,s,a)),1&s.flags&&s.element.template&&(s.element.template.nodeMatchedQueries&i.filterId)===i.filterId){var l=Q(t,o);if((s.childMatchedQueries&i.filterId)===i.filterId&&(Zt(t,o+1,o+s.childCount,i,r),o+=s.childCount),16777216&s.flags)for(var u=l.viewContainer._embeddedViews,c=0;c<u.length;c++){var p=u[c],h=pt(p);h&&h===l&&Zt(p,0,p.def.nodes.length-1,i,r)}var f=l.template._projectedViews;if(f)for(c=0;c<f.length;c++){var d=f[c];Zt(d,0,d.def.nodes.length-1,i,r)}}(s.childMatchedQueries&i.filterId)!==i.filterId&&(o+=s.childCount)}return r}function Gt(t,e,n){if(null!=n)switch(n){case 1:return Q(t,e.nodeIndex).renderElement;case 0:return new mi(Q(t,e.nodeIndex).renderElement);case 2:return Q(t,e.nodeIndex).template;case 3:return Q(t,e.nodeIndex).viewContainer;case 4:return J(t,e.nodeIndex).instance}}function Wt(t,e,n){for(var i=new Array(n.length),r=0;r<n.length;r++){var o=n[r];i[r]={flags:8,name:o,ns:null,nonMinifiedName:o,securityContext:null,suffix:null}}return{nodeIndex:-1,parent:null,renderParent:null,bindingIndex:-1,outputIndex:-1,checkIndex:e,flags:t,childFlags:0,directChildFlags:0,childMatchedQueries:0,matchedQueries:{},matchedQueryIds:0,references:{},ngContentIndex:-1,childCount:0,bindings:i,bindingFlags:xt(i),outputs:[],element:null,provider:null,text:null,query:null,ngContent:null}}function Xt(t,e){return(null!=t?t.toString():\"\")+e.suffix}function $t(t){return 0!=(1&t.flags)&&null===t.element.name}function Kt(t,e,n,i){var r=te(t.root,t.renderer,t,e,n);return ee(r,t.component,i),ne(r),r}function Qt(t,e,n){var i=te(t,t.renderer,null,null,e);return ee(i,n,n),ne(i),i}function Jt(t,e,n,i){var r,o=e.element.componentRendererType;return r=o?t.root.rendererFactory.createRenderer(i,o):t.root.renderer,te(t.root,r,t,e.element.componentProvider,n)}function te(t,e,n,i,r){var o=new Array(r.nodes.length),s=r.outputCount?new Array(r.outputCount):null;return{def:r,parent:n,viewContainerParent:null,parentNodeDef:i,context:null,component:null,nodes:o,state:13,root:t,renderer:e,oldValues:new Array(r.bindingCount),disposables:s}}function ee(t,e,n){t.component=e,t.context=n}function ne(t){var e;if(dt(t)){e=Q(t.parent,t.parentNodeDef.parent.nodeIndex).renderElement}for(var n=t.def,i=t.nodes,r=0;r<n.nodes.length;r++){var o=n.nodes[r];Wi.setCurrentNode(t,r);var s=void 0;switch(201347067&o.flags){case 1:var a=function(t,e,n){var i,r=n.element,o=t.root.selectorOrNode,s=t.renderer;if(t.parent||!o){i=r.name?s.createElement(r.name,r.ns):s.createComment(\"\");var a=mt(t,e,n);a&&s.appendChild(a,i)}else i=s.selectRootElement(o);if(r.attrs)for(var l=0;l<r.attrs.length;l++){var u=r.attrs[l];s.setAttribute(i,u[1],u[2],u[0])}return i}(t,e,o),l=void 0;if(33554432&o.flags){var u=gt(o.element.componentView);l=Wi.createComponentView(t,o,u,a)}!function(t,e,n,i){for(var r=0;r<n.outputs.length;r++){var o=n.outputs[r],s=function(t,e,n){return function(i){return ct(t,e,n,i)}}(t,n.nodeIndex,function(t,e){return t?t+\":\"+e:e}(o.target,o.eventName)),a=o.target,l=t;\"component\"===o.target&&(a=null,l=e);var u=l.renderer.listen(a||i,o.eventName,s);t.disposables[n.outputIndex+r]=u}}(t,l,o,a),s={renderElement:a,componentView:l,viewContainer:null,template:o.element.template?function(t,e){return new cr(t,e)}(t,o):void 0},16777216&o.flags&&(s.viewContainer=function(t,e,n){return new lr(t,e,n)}(t,o,s));break;case 2:s=function(t,e,n){var i,r=t.renderer;i=r.createText(n.text.prefix);var o=mt(t,e,n);return o&&r.appendChild(o,i),{renderText:i}}(t,e,o);break;case 512:case 1024:case 2048:case 256:if(!((s=i[r])||4096&o.flags)){s={instance:c=function(t,e){return Ft(t,e)}(t,o)}}break;case 16:s={instance:c=function(t,e){for(var n=t;n.parent&&!dt(n);)n=n.parent;return Bt(n.parent,ht(n),!0,e.provider.value,e.provider.deps)}(t,o)};break;case 16384:if(!(s=i[r])){var c=function(t,e){var n=Bt(t,e.parent,(32768&e.flags)>0,e.provider.value,e.provider.deps);if(e.outputs.length)for(var i=0;i<e.outputs.length;i++){var r=e.outputs[i],o=n[r.propName].subscribe(function(t,e,n){return function(i){return ct(t,e,n,i)}}(t,e.parent.nodeIndex,r.eventName));t.disposables[e.outputIndex+i]=o.unsubscribe.bind(o)}return n}(t,o);s={instance:c}}if(32768&o.flags){ee(Q(t,o.parent.nodeIndex).componentView,s.instance,s.instance)}break;case 32:case 64:case 128:s={value:void 0};break;case 67108864:case 134217728:s=new gi;break;case 8:!function(t,e,n){var i=mt(t,e,n);i&&Ct(t,n.ngContent.index,1,i,null,void 0)}(t,e,o),s=void 0}i[r]=s}ue(t,Cr.CreateViewNodes),fe(t,201326592,268435456,0)}function ie(t){se(t),Wi.updateDirectives(t,1),ce(t,Cr.CheckNoChanges),Wi.updateRenderer(t,1),ue(t,Cr.CheckNoChanges),t.state&=-97}function re(t){1&t.state?(t.state&=-2,t.state|=2):t.state&=-3,se(t),Wi.updateDirectives(t,0),ce(t,Cr.CheckAndUpdate),fe(t,67108864,536870912,0),Ut(t,2097152|(2&t.state?1048576:0)),Wi.updateRenderer(t,0),ue(t,Cr.CheckAndUpdate),fe(t,134217728,536870912,0),Ut(t,8388608|(2&t.state?4194304:0)),2&t.def.flags&&(t.state&=-9),t.state&=-97}function oe(t,e,n,i,r,o,s,a,l,u,c,p,h){return 0===n?function(t,e,n,i,r,o,s,a,l,u,c,p){switch(201347067&e.flags){case 1:return function(t,e,n,i,r,o,s,a,l,u,c,p){var h=e.bindings.length,f=!1;return h>0&&kt(t,e,0,n)&&(f=!0),h>1&&kt(t,e,1,i)&&(f=!0),h>2&&kt(t,e,2,r)&&(f=!0),h>3&&kt(t,e,3,o)&&(f=!0),h>4&&kt(t,e,4,s)&&(f=!0),h>5&&kt(t,e,5,a)&&(f=!0),h>6&&kt(t,e,6,l)&&(f=!0),h>7&&kt(t,e,7,u)&&(f=!0),h>8&&kt(t,e,8,c)&&(f=!0),h>9&&kt(t,e,9,p)&&(f=!0),f}(t,e,n,i,r,o,s,a,l,u,c,p);case 2:return function(t,e,n,i,r,o,s,a,l,u,c,p){var h=!1,f=e.bindings,d=f.length;if(d>0&&at(t,e,0,n)&&(h=!0),d>1&&at(t,e,1,i)&&(h=!0),d>2&&at(t,e,2,r)&&(h=!0),d>3&&at(t,e,3,o)&&(h=!0),d>4&&at(t,e,4,s)&&(h=!0),d>5&&at(t,e,5,a)&&(h=!0),d>6&&at(t,e,6,l)&&(h=!0),d>7&&at(t,e,7,u)&&(h=!0),d>8&&at(t,e,8,c)&&(h=!0),d>9&&at(t,e,9,p)&&(h=!0),h){var _=e.text.prefix;d>0&&(_+=Xt(n,f[0])),d>1&&(_+=Xt(i,f[1])),d>2&&(_+=Xt(r,f[2])),d>3&&(_+=Xt(o,f[3])),d>4&&(_+=Xt(s,f[4])),d>5&&(_+=Xt(a,f[5])),d>6&&(_+=Xt(l,f[6])),d>7&&(_+=Xt(u,f[7])),d>8&&(_+=Xt(c,f[8])),d>9&&(_+=Xt(p,f[9]));var v=K(t,e.nodeIndex).renderText;t.renderer.setValue(v,_)}return h}(t,e,n,i,r,o,s,a,l,u,c,p);case 16384:return function(t,e,n,i,r,o,s,a,l,u,c,p){var h=J(t,e.nodeIndex),f=h.instance,d=!1,_=void 0,v=e.bindings.length;return v>0&&st(t,e,0,n)&&(d=!0,_=Yt(t,h,e,0,n,_)),v>1&&st(t,e,1,i)&&(d=!0,_=Yt(t,h,e,1,i,_)),v>2&&st(t,e,2,r)&&(d=!0,_=Yt(t,h,e,2,r,_)),v>3&&st(t,e,3,o)&&(d=!0,_=Yt(t,h,e,3,o,_)),v>4&&st(t,e,4,s)&&(d=!0,_=Yt(t,h,e,4,s,_)),v>5&&st(t,e,5,a)&&(d=!0,_=Yt(t,h,e,5,a,_)),v>6&&st(t,e,6,l)&&(d=!0,_=Yt(t,h,e,6,l,_)),v>7&&st(t,e,7,u)&&(d=!0,_=Yt(t,h,e,7,u,_)),v>8&&st(t,e,8,c)&&(d=!0,_=Yt(t,h,e,8,c,_)),v>9&&st(t,e,9,p)&&(d=!0,_=Yt(t,h,e,9,p,_)),_&&f.ngOnChanges(_),2&t.state&&65536&e.flags&&f.ngOnInit(),262144&e.flags&&f.ngDoCheck(),d}(t,e,n,i,r,o,s,a,l,u,c,p);case 32:case 64:case 128:return function(t,e,n,i,r,o,s,a,l,u,c,p){var h=e.bindings,f=!1,d=h.length;if(d>0&&at(t,e,0,n)&&(f=!0),d>1&&at(t,e,1,i)&&(f=!0),d>2&&at(t,e,2,r)&&(f=!0),d>3&&at(t,e,3,o)&&(f=!0),d>4&&at(t,e,4,s)&&(f=!0),d>5&&at(t,e,5,a)&&(f=!0),d>6&&at(t,e,6,l)&&(f=!0),d>7&&at(t,e,7,u)&&(f=!0),d>8&&at(t,e,8,c)&&(f=!0),d>9&&at(t,e,9,p)&&(f=!0),f){var _=tt(t,e.nodeIndex),v=void 0;switch(201347067&e.flags){case 32:v=new Array(h.length),d>0&&(v[0]=n),d>1&&(v[1]=i),d>2&&(v[2]=r),d>3&&(v[3]=o),d>4&&(v[4]=s),d>5&&(v[5]=a),d>6&&(v[6]=l),d>7&&(v[7]=u),d>8&&(v[8]=c),d>9&&(v[9]=p);break;case 64:v={},d>0&&(v[h[0].name]=n),d>1&&(v[h[1].name]=i),d>2&&(v[h[2].name]=r),d>3&&(v[h[3].name]=o),d>4&&(v[h[4].name]=s),d>5&&(v[h[5].name]=a),d>6&&(v[h[6].name]=l),d>7&&(v[h[7].name]=u),d>8&&(v[h[8].name]=c),d>9&&(v[h[9].name]=p);break;case 128:var y=n;switch(d){case 1:v=y.transform(n);break;case 2:v=y.transform(i);break;case 3:v=y.transform(i,r);break;case 4:v=y.transform(i,r,o);break;case 5:v=y.transform(i,r,o,s);break;case 6:v=y.transform(i,r,o,s,a);break;case 7:v=y.transform(i,r,o,s,a,l);break;case 8:v=y.transform(i,r,o,s,a,l,u);break;case 9:v=y.transform(i,r,o,s,a,l,u,c);break;case 10:v=y.transform(i,r,o,s,a,l,u,c,p)}}_.value=v}return f}(t,e,n,i,r,o,s,a,l,u,c,p);default:throw\"unreachable\"}}(t,e,i,r,o,s,a,l,u,c,p,h):function(t,e,n){switch(201347067&e.flags){case 1:return function(t,e,n){for(var i=!1,r=0;r<n.length;r++)kt(t,e,r,n[r])&&(i=!0);return i}(t,e,n);case 2:return function(t,e,n){for(var i=e.bindings,r=!1,o=0;o<n.length;o++)at(t,e,o,n[o])&&(r=!0);if(r){for(var s=\"\",o=0;o<n.length;o++)s+=Xt(n[o],i[o]);s=e.text.prefix+s;var a=K(t,e.nodeIndex).renderText;t.renderer.setValue(a,s)}return r}(t,e,n);case 16384:return function(t,e,n){for(var i=J(t,e.nodeIndex),r=i.instance,o=!1,s=void 0,a=0;a<n.length;a++)st(t,e,a,n[a])&&(o=!0,s=Yt(t,i,e,a,n[a],s));return s&&r.ngOnChanges(s),2&t.state&&65536&e.flags&&r.ngOnInit(),262144&e.flags&&r.ngDoCheck(),o}(t,e,n);case 32:case 64:case 128:return function(t,e,n){for(var i=e.bindings,r=!1,o=0;o<n.length;o++)at(t,e,o,n[o])&&(r=!0);if(r){var s=tt(t,e.nodeIndex),a=void 0;switch(201347067&e.flags){case 32:a=n;break;case 64:for(a={},o=0;o<n.length;o++)a[i[o].name]=n[o];break;case 128:var l=n[0],u=n.slice(1);a=l.transform.apply(l,u)}s.value=a}return r}(t,e,n);default:throw\"unreachable\"}}(t,e,i)}function se(t){var e=t.def;if(4&e.nodeFlags)for(var n=0;n<e.nodes.length;n++){var i=e.nodes[n];if(4&i.flags){var r=Q(t,n).template._projectedViews;if(r)for(var o=0;o<r.length;o++){var s=r[o];s.state|=32,function(t,e){for(var n=t;n&&n!==e;)n.state|=64,n=n.viewContainerParent||n.parent}(s,t)}}else 0==(4&i.childFlags)&&(n+=i.childCount)}}function ae(t,e,n,i,r,o,s,a,l,u,c,p,h){return 0===n?function(t,e,n,i,r,o,s,a,l,u,c,p){var h=e.bindings.length;h>0&&lt(t,e,0,n);h>1&&lt(t,e,1,i);h>2&&lt(t,e,2,r);h>3&&lt(t,e,3,o);h>4&&lt(t,e,4,s);h>5&&lt(t,e,5,a);h>6&&lt(t,e,6,l);h>7&&lt(t,e,7,u);h>8&&lt(t,e,8,c);h>9&&lt(t,e,9,p)}(t,e,i,r,o,s,a,l,u,c,p,h):function(t,e,n){for(var i=0;i<n.length;i++)lt(t,e,i,n[i])}(t,e,i),!1}function le(t){if(!(128&t.state)){if(ce(t,Cr.Destroy),ue(t,Cr.Destroy),Ut(t,131072),t.disposables)for(var e=0;e<t.disposables.length;e++)t.disposables[e]();!function(t){if(16&t.state){var e=pt(t);if(e){var n=e.template._projectedViews;n&&(Rt(n,n.indexOf(t)),Wi.dirtyParentQueries(t))}}}(t),t.renderer.destroyNode&&function(t){for(var e=t.def.nodes.length,n=0;n<e;n++){var i=t.def.nodes[n];1&i.flags?t.renderer.destroyNode(Q(t,n).renderElement):2&i.flags?t.renderer.destroyNode(K(t,n).renderText):(67108864&i.flags||134217728&i.flags)&&et(t,n).destroy()}}(t),dt(t)&&t.renderer.destroy(),t.state|=128}}function ue(t,e){var n=t.def;if(33554432&n.nodeFlags)for(var i=0;i<n.nodes.length;i++){var r=n.nodes[i];33554432&r.flags?pe(Q(t,i).componentView,e):0==(33554432&r.childFlags)&&(i+=r.childCount)}}function ce(t,e){var n=t.def;if(16777216&n.nodeFlags)for(var i=0;i<n.nodes.length;i++){var r=n.nodes[i];if(16777216&r.flags)for(var o=Q(t,i).viewContainer._embeddedViews,s=0;s<o.length;s++)pe(o[s],e);else 0==(16777216&r.childFlags)&&(i+=r.childCount)}}function pe(t,e){var n=t.state;switch(e){case Cr.CheckNoChanges:0==(128&n)&&(12==(12&n)?ie(t):64&n&&he(t,Cr.CheckNoChangesProjectedViews));break;case Cr.CheckNoChangesProjectedViews:0==(128&n)&&(32&n?ie(t):64&n&&he(t,e));break;case Cr.CheckAndUpdate:0==(128&n)&&(12==(12&n)?re(t):64&n&&he(t,Cr.CheckAndUpdateProjectedViews));break;case Cr.CheckAndUpdateProjectedViews:0==(128&n)&&(32&n?re(t):64&n&&he(t,e));break;case Cr.Destroy:le(t);break;case Cr.CreateViewNodes:ne(t)}}function he(t,e){ce(t,e),ue(t,e)}function fe(t,e,n,i){if(t.def.nodeFlags&e&&t.def.nodeFlags&n)for(var r=t.def.nodes.length,o=0;o<r;o++){var s=t.def.nodes[o];if(s.flags&e&&s.flags&n)switch(Wi.setCurrentNode(t,s.nodeIndex),i){case 0:!function(t,e){var n=et(t,e.nodeIndex);if(n.dirty){var i,r=void 0;if(67108864&e.flags){var o=e.parent.parent;r=Zt(t,o.nodeIndex,o.nodeIndex+o.childCount,e.query,[]),i=J(t,e.parent.nodeIndex).instance}else 134217728&e.flags&&(r=Zt(t,0,t.def.nodes.length-1,e.query,[]),i=t.component);n.reset(r);for(var s=e.query.bindings,a=!1,l=0;l<s.length;l++){var u=s[l],c=void 0;switch(u.bindingType){case 0:c=n.first;break;case 1:c=n,a=!0}i[u.propName]=c}a&&n.notifyOnChanges()}}(t,s);break;case 1:!function(t,e){if(et(t,e.nodeIndex).dirty)throw nt(Wi.createDebugContext(t,e.nodeIndex),\"Query \"+e.query.id+\" not dirty\",\"Query \"+e.query.id+\" dirty\",0!=(1&t.state))}(t,s)}s.childFlags&e&&s.childFlags&n||(o+=s.childCount)}}function de(){if(!Or){Or=!0;var t=V()?{setCurrentNode:ge,createRootView:function(t,e,n,i,r,o){var s=r.injector.get(_i),a=_e(t,r,new kr(s),e,n),l=ve(i);return Ee(Er.create,Qt,null,[a,l,o])},createEmbeddedView:function(t,e,n,i){var r=ve(n);return Ee(Er.create,Kt,null,[t,e,r,i])},createComponentView:function(t,e,n,i){var r=ve(n);return Ee(Er.create,Jt,null,[t,e,r,i])},createNgModuleRef:function(t,e,n,i){var r=function(t){var e=function(t){var e=!1,n=!1;if(0===Sr.size)return{hasOverrides:e,hasDeprecatedOverrides:n};return t.providers.forEach(function(t){var i=Sr.get(t.token);3840&t.flags&&i&&(e=!0,n=n||i.deprecatedBehavior)}),{hasOverrides:e,hasDeprecatedOverrides:n}}(t),n=e.hasDeprecatedOverrides;if(!e.hasOverrides)return t;return t=t.factory(function(){return Xi}),function(t){for(var e=0;e<t.providers.length;e++){var i=t.providers[e];n&&(i.flags|=4096);var r=Sr.get(i.token);r&&(i.flags=-3841&i.flags|r.flags,i.deps=yt(r.deps),i.value=r.value)}}(t),t}(i);return Vt(t,e,n,r)},overrideProvider:function(t){Sr.set(t.token,t)},clearProviderOverrides:function(){Sr.clear()},checkAndUpdateView:function(t){return Ee(Er.detectChanges,re,null,[t])},checkNoChangesView:function(t){return Ee(Er.checkNoChanges,ie,null,[t])},destroyView:function(t){return Ee(Er.destroy,le,null,[t])},createDebugContext:function(t,e){return new Tr(t,e)},handleEvent:function(t,e,n,i){return ge(t,e),Ee(Er.handleEvent,t.def.handleEvent,null,[t,e,n,i])},updateDirectives:function(t,e){if(128&t.state)throw rt(Er[Ae]);return ge(t,Ce(t,0)),t.def.updateDirectives(function(t,n,i){for(var r=[],o=3;o<arguments.length;o++)r[o-3]=arguments[o];var s=t.def.nodes[n];return 0===e?be(t,s,i,r):we(t,s,i,r),16384&s.flags&&ge(t,Ce(t,n)),224&s.flags?tt(t,s.nodeIndex).value:void 0},t)},updateRenderer:function(t,e){if(128&t.state)throw rt(Er[Ae]);return ge(t,Oe(t,0)),t.def.updateRenderer(function(t,n,i){for(var r=[],o=3;o<arguments.length;o++)r[o-3]=arguments[o];var s=t.def.nodes[n];return 0===e?be(t,s,i,r):we(t,s,i,r),3&s.flags&&ge(t,Oe(t,n)),224&s.flags?tt(t,s.nodeIndex).value:void 0},t)}}:{setCurrentNode:function(){},createRootView:function(t,e,n,i,r,o){var s=r.injector.get(_i);return Qt(_e(t,r,s,e,n),i,o)},createEmbeddedView:Kt,createComponentView:Jt,createNgModuleRef:Vt,overrideProvider:Xi,clearProviderOverrides:Xi,checkAndUpdateView:re,checkNoChangesView:ie,destroyView:le,createDebugContext:function(t,e){return new Tr(t,e)},handleEvent:function(t,e,n,i){return t.def.handleEvent(t,e,n,i)},updateDirectives:function(t,e){return t.def.updateDirectives(0===e?ye:me,t)},updateRenderer:function(t,e){return t.def.updateRenderer(0===e?ye:me,t)}};Wi.setCurrentNode=t.setCurrentNode,Wi.createRootView=t.createRootView,Wi.createEmbeddedView=t.createEmbeddedView,Wi.createComponentView=t.createComponentView,Wi.createNgModuleRef=t.createNgModuleRef,Wi.overrideProvider=t.overrideProvider,Wi.clearProviderOverrides=t.clearProviderOverrides,Wi.checkAndUpdateView=t.checkAndUpdateView,Wi.checkNoChangesView=t.checkNoChangesView,Wi.destroyView=t.destroyView,Wi.resolveDep=zt,Wi.createDebugContext=t.createDebugContext,Wi.handleEvent=t.handleEvent,Wi.updateDirectives=t.updateDirectives,Wi.updateRenderer=t.updateRenderer,Wi.dirtyParentQueries=function(t){for(var e=t.def.nodeMatchedQueries;t.parent&&function(t){return!(!t.parent||32768&t.parentNodeDef.flags)}(t);){var n=t.parentNodeDef;t=t.parent;for(var i=n.nodeIndex+n.childCount,r=0;r<=i;r++)67108864&(o=t.def.nodes[r]).flags&&536870912&o.flags&&(o.query.filterId&e)===o.query.filterId&&et(t,r).setDirty(),!(1&o.flags&&r+o.childCount<n.nodeIndex)&&67108864&o.childFlags&&536870912&o.childFlags||(r+=o.childCount)}if(134217728&t.def.nodeFlags)for(r=0;r<t.def.nodes.length;r++){var o=t.def.nodes[r];134217728&o.flags&&536870912&o.flags&&et(t,r).setDirty(),r+=o.childCount}}}}function _e(t,e,n,i,r){var o=e.injector.get(Gi),s=e.injector.get(bn);return{ngModule:e,injector:t,projectableNodes:i,selectorOrNode:r,sanitizer:o,rendererFactory:n,renderer:n.createRenderer(null,null),errorHandler:s}}function ve(t){if(0===Sr.size)return t;var e=function(t){for(var e=[],n=null,i=0;i<t.nodes.length;i++){var r=t.nodes[i];1&r.flags&&(n=r),n&&3840&r.flags&&Sr.has(r.provider.token)&&(e.push(n.nodeIndex),n=null)}return e}(t);if(0===e.length)return t;t=t.factory(function(){return Xi});for(var n=0;n<e.length;n++)!function(t,e){for(var n=e+1;n<t.nodes.length;n++){var i=t.nodes[n];if(1&i.flags)return;if(3840&i.flags){var r=i.provider,o=Sr.get(r.token);o&&(i.flags=-3841&i.flags|o.flags,r.deps=yt(o.deps),r.value=o.value)}}}(t,e[n]);return t}function ye(t,e,n,i,r,o,s,a,l,u,c,p,h){var f=t.def.nodes[e];return oe(t,f,n,i,r,o,s,a,l,u,c,p,h),224&f.flags?tt(t,e).value:void 0}function me(t,e,n,i,r,o,s,a,l,u,c,p,h){var f=t.def.nodes[e];return ae(t,f,n,i,r,o,s,a,l,u,c,p,h),224&f.flags?tt(t,e).value:void 0}function ge(t,e){Ie=t,je=e}function be(t,e,n,i){if(oe.apply(void 0,[t,e,n].concat(i))){var r=1===n?i[0]:i;if(16384&e.flags){for(var o={},s=0;s<e.bindings.length;s++){var a=e.bindings[s],l=r[s];8&a.flags&&(o[function(t){return\"ng-reflect-\"+(t=t.replace(/[$@]/g,\"_\").replace(xr,function(){for(var t=[],e=0;e<arguments.length;e++)t[e]=arguments[e];return\"-\"+t[1].toLowerCase()}))}(a.nonMinifiedName)]=function(t){try{return null!=t?t.toString().slice(0,30):t}catch(t){return\"[ERROR] Exception while trying to serialize the value\"}}(l))}var u=e.parent,c=Q(t,u.nodeIndex).renderElement;if(u.element.name)for(var p in o){null!=(l=o[p])?t.renderer.setAttribute(c,p,l):t.renderer.removeAttribute(c,p)}else t.renderer.setValue(c,\"bindings=\"+JSON.stringify(o,null,2))}}}function we(t,e,n,i){ae.apply(void 0,[t,e,n].concat(i))}function Ce(t,e){for(var n=e;n<t.def.nodes.length;n++){var i=t.def.nodes[n];if(16384&i.flags&&i.bindings&&i.bindings.length)return n}return null}function Oe(t,e){for(var n=e;n<t.def.nodes.length;n++){var i=t.def.nodes[n];if(3&i.flags&&i.bindings&&i.bindings.length)return n}return null}function Se(t,e,n){for(var i in e.references)n[i]=Gt(t,e,e.references[i])}function Ee(t,e,n,i){var r=Ae,o=Ie,s=je;try{Ae=t;var a=e.apply(n,i);return Ie=o,je=s,Ae=r,a}catch(t){if(function(t){return!!v(t)}(t)||!Ie)throw t;throw function(t,e){return t instanceof Error||(t=new Error(t.toString())),it(t,e),t}(t,xe())}}function xe(){return Ie?new Tr(Ie,je):null}n.d(e,\"f\",function(){return fi}),n.d(e,\"M\",function(){return function(){if(ui)throw new Error(\"Cannot enable prod mode after platform setup.\");li=!1}}),n.d(e,\"P\",function(){return V}),n.d(e,\"L\",function(){return L}),n.d(e,\"t\",function(){return pi}),n.d(e,\"b\",function(){return Nn}),n.d(e,\"x\",function(){return Vn}),n.d(e,\"w\",function(){return Ln}),n.d(e,\"c\",function(){return Mn}),n.d(e,\"d\",function(){return Rn}),n.d(e,\"O\",function(){return q}),n.d(e,\"G\",function(){return oi}),n.d(e,\"R\",function(){return function(t){ai=t}}),n.d(e,\"r\",function(){return Ui}),n.d(e,\"e\",function(){return qi}),n.d(e,\"l\",function(){return ei}),n.d(e,\"k\",function(){return bn}),n.d(e,\"D\",function(){return Gi}),n.d(e,\"E\",function(){return Zi}),n.d(e,\"a\",function(){return He}),n.d(e,\"J\",function(){return Ye}),n.d(e,\"H\",function(){return Ue}),n.d(e,\"N\",function(){return u}),n.d(e,\"o\",function(){return rn}),n.d(e,\"y\",function(){return jn}),n.d(e,\"n\",function(){return Le}),n.d(e,\"m\",function(){return Ze}),n.d(e,\"v\",function(){return Ge}),n.d(e,\"u\",function(){return ni}),n.d(e,\"z\",function(){return di}),n.d(e,\"A\",function(){return yi}),n.d(e,\"B\",function(){return _i}),n.d(e,\"C\",function(){return vi}),n.d(e,\"h\",function(){return zn}),n.d(e,\"i\",function(){return Gn}),n.d(e,\"j\",function(){return mi}),n.d(e,\"s\",function(){return $n}),n.d(e,\"F\",function(){return bi}),n.d(e,\"I\",function(){return wi}),n.d(e,\"g\",function(){return Ci}),n.d(e,\"p\",function(){return Li}),n.d(e,\"q\",function(){return Fi}),n.d(e,\"K\",function(){return Ti}),n.d(e,\"Q\",function(){return Yi}),n.d(e,\"_3\",function(){return W}),n.d(e,\"T\",function(){return Bn}),n.d(e,\"S\",function(){return Wn}),n.d(e,\"_1\",function(){return Qe}),n.d(e,\"_8\",function(){return a}),n.d(e,\"_19\",function(){return l}),n.d(e,\"_4\",function(){return function(t){return!!t&&\"function\"==typeof t.subscribe}}),n.d(e,\"_5\",function(){return k}),n.d(e,\"U\",function(){return function(t,e,n,i,r,o){t|=1;var s=vt(e);return{nodeIndex:-1,parent:null,renderParent:null,bindingIndex:-1,outputIndex:-1,flags:t,checkIndex:-1,childFlags:0,directChildFlags:0,childMatchedQueries:0,matchedQueries:s.matchedQueries,matchedQueryIds:s.matchedQueryIds,references:s.references,ngContentIndex:n,childCount:i,bindings:[],bindingFlags:0,outputs:[],element:{ns:null,name:null,attrs:null,template:o?gt(o):null,componentProvider:null,componentView:null,componentRendererType:null,publicProviders:null,allProviders:null,handleEvent:r||Xi},provider:null,text:null,query:null,ngContent:null}}}),n.d(e,\"V\",function(){return function(t,e,n,i,r,o){return new sr(t,e,n,i,r,o)}}),n.d(e,\"W\",function(){return function(t,e,n){return new Ar(t,e,n)}}),n.d(e,\"X\",function(){return function(t){return{id:Ki,styles:t.styles,encapsulation:t.encapsulation,data:t.data}}}),n.d(e,\"Y\",function(){return function(t,e,n,i,r,o,s,a){var l=[];if(s)for(var u in s){var c=s[u];l[c[0]]={flags:8,name:u,nonMinifiedName:c[1],ns:null,securityContext:null,suffix:null}}var p=[];if(a)for(var h in a)p.push({type:1,propName:h,target:null,eventName:a[h]});return e|=16384,Lt(t,e,n,i,r,r,o,l,p)}}),n.d(e,\"Z\",function(){return function(t,e,n,i,r,o,s,a,l,u,c,p){void 0===s&&(s=[]),u||(u=Xi);var h=vt(n),f=h.matchedQueries,d=h.references,_=h.matchedQueryIds,v=null,y=null;o&&(v=(A=Et(o))[0],y=A[1]),a=a||[];for(var m=new Array(a.length),g=0;g<a.length;g++){var b=a[g],w=b[0],C=b[2],O=Et(b[1]),S=O[1],E=void 0,x=void 0;switch(15&w){case 4:x=C;break;case 1:case 8:E=C}m[g]={flags:w,ns:O[0],name:S,nonMinifiedName:S,securityContext:E,suffix:x}}l=l||[];for(var T=new Array(l.length),g=0;g<l.length;g++){var k=l[g];T[g]={type:0,target:k[0],eventName:k[1],propName:null}}var P=(s=s||[]).map(function(t){var e=t[1],n=Et(t[0]);return[n[0],n[1],e]});return p=function(t){if(t&&t.id===Ki){var e=null!=t.encapsulation&&t.encapsulation!==Ye.None||t.styles.length||Object.keys(t.data).length;t.id=e?\"c\"+Ji++:Qi}return t&&t.id===Qi&&(t=null),t||null}(p),c&&(e|=33554432),e|=1,{nodeIndex:-1,parent:null,renderParent:null,bindingIndex:-1,outputIndex:-1,checkIndex:t,flags:e,childFlags:0,directChildFlags:0,childMatchedQueries:0,matchedQueries:f,matchedQueryIds:_,references:d,ngContentIndex:i,childCount:r,bindings:m,bindingFlags:xt(m),outputs:T,element:{ns:v,name:y,attrs:P,template:null,componentProvider:null,componentView:c||null,componentRendererType:p,publicProviders:null,allProviders:null,handleEvent:u||Xi},provider:null,text:null,query:null,ngContent:null};var A}}),n.d(e,\"_2\",function(){return function(t,e,n,i,r,o,s,a,l,u,c,p,h,f,d,_,v,y,m,g){switch(t){case 1:return e+Tt(n)+i;case 2:return e+Tt(n)+i+Tt(r)+o;case 3:return e+Tt(n)+i+Tt(r)+o+Tt(s)+a;case 4:return e+Tt(n)+i+Tt(r)+o+Tt(s)+a+Tt(l)+u;case 5:return e+Tt(n)+i+Tt(r)+o+Tt(s)+a+Tt(l)+u+Tt(c)+p;case 6:return e+Tt(n)+i+Tt(r)+o+Tt(s)+a+Tt(l)+u+Tt(c)+p+Tt(h)+f;case 7:return e+Tt(n)+i+Tt(r)+o+Tt(s)+a+Tt(l)+u+Tt(c)+p+Tt(h)+f+Tt(d)+_;case 8:return e+Tt(n)+i+Tt(r)+o+Tt(s)+a+Tt(l)+u+Tt(c)+p+Tt(h)+f+Tt(d)+_+Tt(v)+y;case 9:return e+Tt(n)+i+Tt(r)+o+Tt(s)+a+Tt(l)+u+Tt(c)+p+Tt(h)+f+Tt(d)+_+Tt(v)+y+Tt(m)+g;default:throw new Error(\"Does not support more than 9 expressions\")}}}),n.d(e,\"_10\",function(){return function(t){for(var e={},n=0;n<t.length;n++){var i=t[n];i.index=n,e[ot(i.token)]=i}return{factory:null,providersByKey:e,providers:t}}}),n.d(e,\"_11\",function(){return function(t,e,n,i){return n=c(n),{index:-1,deps:yt(i),flags:t,token:e,value:n}}}),n.d(e,\"_12\",function(){return function(t,e){return{nodeIndex:-1,parent:null,renderParent:null,bindingIndex:-1,outputIndex:-1,checkIndex:-1,flags:8,childFlags:0,directChildFlags:0,childMatchedQueries:0,matchedQueries:{},matchedQueryIds:0,references:{},ngContentIndex:t,childCount:0,bindings:[],bindingFlags:0,outputs:[],element:null,provider:null,text:null,query:null,ngContent:{index:e}}}}),n.d(e,\"_13\",function(){return function(t,e){var n=t.def.nodes[e];if(1&n.flags){var i=Q(t,n.nodeIndex);return n.element.template?i.template:i.renderElement}if(2&n.flags)return K(t,n.nodeIndex).renderText;if(20240&n.flags)return J(t,n.nodeIndex).instance;throw new Error(\"Illegal state: read nodeValue for node index \"+e)}}),n.d(e,\"_14\",function(){return function(t,e,n){return t|=16,Lt(-1,t,null,0,e,e,n)}}),n.d(e,\"_17\",function(){return function(t,e,n,i,r){return Lt(-1,t,e,0,n,i,r)}}),n.d(e,\"_15\",function(){return function(t,e){for(var n=Object.keys(e),i=n.length,r=new Array(i),o=0;o<i;o++){var s=n[o];r[e[s]]=s}return Wt(64,t,r)}}),n.d(e,\"_16\",function(){return function(t,e){return Wt(128,t,new Array(e+1))}}),n.d(e,\"_18\",function(){return function(t,e,n){var i=[];for(var r in n)i.push({propName:r,bindingType:n[r]});return{nodeIndex:-1,parent:null,renderParent:null,bindingIndex:-1,outputIndex:-1,checkIndex:-1,flags:t,childFlags:0,directChildFlags:0,childMatchedQueries:0,ngContentIndex:-1,matchedQueries:{},matchedQueryIds:0,references:{},childCount:0,bindings:[],bindingFlags:0,outputs:[],element:null,provider:null,text:null,query:{id:e,filterId:_t(e),bindings:i},ngContent:null}}}),n.d(e,\"_20\",function(){return function(t,e,n){for(var i=new Array(n.length-1),r=1;r<n.length;r++)i[r-1]={flags:8,name:null,ns:null,nonMinifiedName:null,securityContext:null,suffix:n[r]};return{nodeIndex:-1,parent:null,renderParent:null,bindingIndex:-1,outputIndex:-1,checkIndex:t,flags:2,childFlags:0,directChildFlags:0,childMatchedQueries:0,matchedQueries:{},matchedQueryIds:0,references:{},ngContentIndex:e,childCount:0,bindings:i,bindingFlags:8,outputs:[],element:null,provider:null,text:{prefix:n[0]},query:null,ngContent:null}}}),n.d(e,\"_21\",function(){return function(t,e,n,i){if(i instanceof Ti){i=i.wrapped;var r=t.def.nodes[e].bindingIndex+n,o=t.oldValues[r];o instanceof Ti&&(o=o.wrapped),t.oldValues[r]=new Ti(o)}return i}}),n.d(e,\"_22\",function(){return function(t,e,n,i){for(var r=0,o=0,s=0,a=0,l=0,u=null,c=null,p=!1,h=!1,f=null,d=0;d<e.length;d++){var _=e[d];if(_.nodeIndex=d,_.parent=u,_.bindingIndex=r,_.outputIndex=o,_.renderParent=c,s|=_.flags,l|=_.matchedQueryIds,_.element){var v=_.element;v.publicProviders=u?u.element.publicProviders:Object.create(null),v.allProviders=v.publicProviders,p=!1,h=!1,_.element.template&&(l|=_.element.template.nodeMatchedQueries)}if(function(t,e,n){var i=e.element&&e.element.template;if(i){if(!i.lastRenderRootNode)throw new Error(\"Illegal State: Embedded templates without nodes are not allowed!\");if(i.lastRenderRootNode&&16777216&i.lastRenderRootNode.flags)throw new Error(\"Illegal State: Last root node of a template can't have embedded views, at index \"+e.nodeIndex+\"!\")}if(20224&e.flags&&0==(1&(t?t.flags:0)))throw new Error(\"Illegal State: StaticProvider/Directive nodes need to be children of elements or anchors, at index \"+e.nodeIndex+\"!\");if(e.query){if(67108864&e.flags&&(!t||0==(16384&t.flags)))throw new Error(\"Illegal State: Content Query nodes need to be children of directives, at index \"+e.nodeIndex+\"!\");if(134217728&e.flags&&t)throw new Error(\"Illegal State: View Query nodes have to be top level nodes, at index \"+e.nodeIndex+\"!\")}if(e.childCount){var r=t?t.nodeIndex+t.childCount:n-1;if(e.nodeIndex<=r&&e.nodeIndex+e.childCount>r)throw new Error(\"Illegal State: childCount of node leads outside of parent, at index \"+e.nodeIndex+\"!\")}}(u,_,e.length),r+=_.bindings.length,o+=_.outputs.length,!c&&3&_.flags&&(f=_),20224&_.flags){p||(p=!0,u.element.publicProviders=Object.create(u.element.publicProviders),u.element.allProviders=u.element.publicProviders);var y=0!=(32768&_.flags);0==(8192&_.flags)||y?u.element.publicProviders[ot(_.provider.token)]=_:(h||(h=!0,u.element.allProviders=Object.create(u.element.publicProviders)),u.element.allProviders[ot(_.provider.token)]=_),y&&(u.element.componentProvider=_)}if(u?(u.childFlags|=_.flags,u.directChildFlags|=_.flags,u.childMatchedQueries|=_.matchedQueryIds,_.element&&_.element.template&&(u.childMatchedQueries|=_.element.template.nodeMatchedQueries)):a|=_.flags,_.childCount>0)u=_,$t(_)||(c=_);else for(;u&&d===u.nodeIndex+u.childCount;){var m=u.parent;m&&(m.childFlags|=u.childFlags,m.childMatchedQueries|=u.childMatchedQueries),c=(u=m)&&$t(u)?u.renderParent:u}}return{factory:null,nodeFlags:s,rootNodeFlags:a,nodeMatchedQueries:l,flags:t,nodes:e,updateDirectives:n||Xi,updateRenderer:i||Xi,handleEvent:function(t,n,i,r){return e[n].element.handleEvent(t,i,r)},bindingCount:r,outputCount:o,lastRenderRootNode:f}}}),n.d(e,\"_6\",function(){return function(){return zi}}),n.d(e,\"_7\",function(){return function(){return Hi}}),n.d(e,\"_9\",function(){return function(t){return t||\"en-US\"}}),n.d(e,\"_0\",function(){return P});var Te,ke,Pe,Ae,Ie,je,De=n(3),Me=n(42),Re=n(199),Ne=n(210),Ve=n(74),Le=function(){function t(t){this._desc=t,this.ngMetadataName=\"InjectionToken\"}return t.prototype.toString=function(){return\"InjectionToken \"+this._desc},t}(),Fe=\"__annotations__\",Be=\"__paramaters__\",ze=\"__prop__metadata__\",He=new Le(\"AnalyzeForEntryComponents\"),Ye=function(){var t={Emulated:0,Native:1,None:2};return t[t.Emulated]=\"Emulated\",t[t.Native]=\"Native\",t[t.None]=\"None\",t}(),Ue=function(){return function(t){this.full=t,this.major=t.split(\".\")[0],this.minor=t.split(\".\")[1],this.patch=t.split(\".\").slice(2).join(\".\")}}(),qe=new Ue(\"5.0.0\"),Ze=r(\"Inject\",function(t){return{token:t}}),Ge=r(\"Optional\"),We=r(\"Self\"),Xe=r(\"SkipSelf\"),$e=\"undefined\"!=typeof window&&window,Ke=\"undefined\"!=typeof self&&\"undefined\"!=typeof WorkerGlobalScope&&self instanceof WorkerGlobalScope&&self,Qe=$e||void 0!==t&&t||Ke,Je=null,tn=new Object,en=tn,nn=function(){function t(){}return t.prototype.get=function(t,e){if(void 0===e&&(e=tn),e===tn)throw new Error(\"NullInjectorError: No provider for \"+l(t)+\"!\");return e},t}(),rn=function(){function t(){}return t.create=function(t,e){return new vn(t,e)},t.THROW_IF_NOT_FOUND=tn,t.NULL=new nn,t}(),on=function(t){return t},sn=[],an=on,ln=function(){return Array.prototype.slice.call(arguments)},un={},cn=un,pn=function(t){for(var e in t)if(t[e]===un)return e;throw Error(\"!prop\")}({provide:String,useValue:cn}),hn=\"ngTempTokenPath\",fn=rn.NULL,dn=/\\n/gm,_n=\"ɵ\",vn=function(){function t(t,e){void 0===e&&(e=fn),this.parent=e;var n=this._records=new Map;n.set(rn,{token:rn,fn:on,deps:sn,value:this,useNew:!1}),h(n,t)}return t.prototype.get=function(t,e){var n=this._records.get(t);try{return f(t,n,this._records,this.parent,e)}catch(t){var i=t[hn];throw t.message=d(\"\\n\"+t.message,i),t.ngTokenPath=i,t[hn]=null,t}},t.prototype.toString=function(){var t=[];return this._records.forEach(function(e,n){return t.push(l(n))}),\"StaticInjector[\"+t.join(\", \")+\"]\"},t}(),yn=\"ngDebugContext\",mn=\"ngOriginalError\",gn=\"ngErrorLogger\",bn=function(){function t(){this._console=console}return t.prototype.handleError=function(t){var e=this._findOriginalError(t),n=this._findContext(t),i=function(t){return t[gn]||function(t){for(var e=[],n=1;n<arguments.length;n++)e[n-1]=arguments[n];t.error.apply(t,e)}}(t);i(this._console,\"ERROR\",t),e&&i(this._console,\"ORIGINAL ERROR\",e),n&&i(this._console,\"ERROR CONTEXT\",n)},t.prototype._findContext=function(t){return t?v(t)?v(t):this._findContext(y(t)):null},t.prototype._findOriginalError=function(t){for(var e=y(t);e&&y(e);)e=y(e);return e},t}(),wn=function(){function t(t,e){if(this.token=t,this.id=e,!t)throw new Error(\"Token must be defined!\");this.displayName=l(this.token)}return t.get=function(t){return Cn.get(c(t))},Object.defineProperty(t,\"numberOfKeys\",{get:function(){return Cn.numberOfKeys},enumerable:!0,configurable:!0}),t}(),Cn=new(function(){function t(){this._allKeys=new Map}return t.prototype.get=function(t){if(t instanceof wn)return t;if(this._allKeys.has(t))return this._allKeys.get(t);var e=new wn(t,wn.numberOfKeys);return this._allKeys.set(t,e),e},Object.defineProperty(t.prototype,\"numberOfKeys\",{get:function(){return this._allKeys.size},enumerable:!0,configurable:!0}),t}()),On=Function,Sn=/^function\\s+\\S+\\(\\)\\s*{[\\s\\S]+\\.apply\\(this,\\s*arguments\\)/,En=function(){function t(t){this._reflect=t||Qe.Reflect}return t.prototype.isReflectionEnabled=function(){return!0},t.prototype.factory=function(t){return function(){for(var e=[],n=0;n<arguments.length;n++)e[n]=arguments[n];return new(t.bind.apply(t,[void 0].concat(e)))}},t.prototype._zipTypesAndAnnotations=function(t,e){var n;n=void 0===t?new Array(e.length):new Array(t.length);for(var i=0;i<n.length;i++)n[i]=void 0===t?[]:t[i]!=Object?[t[i]]:[],e&&null!=e[i]&&(n[i]=n[i].concat(e[i]));return n},t.prototype._ownParameters=function(t,e){if(Sn.exec(t.toString()))return null;if(t.parameters&&t.parameters!==e.parameters)return t.parameters;var n=t.ctorParameters;if(n&&n!==e.ctorParameters){var i=\"function\"==typeof n?n():n,r=i.map(function(t){return t&&t.type}),o=i.map(function(t){return t&&C(t.decorators)});return this._zipTypesAndAnnotations(r,o)}var s=t.hasOwnProperty(Be)&&t[Be],a=this._reflect&&this._reflect.getOwnMetadata&&this._reflect.getOwnMetadata(\"design:paramtypes\",t);return a||s?this._zipTypesAndAnnotations(a,s):new Array(t.length).fill(void 0)},t.prototype.parameters=function(t){if(!w(t))return[];var e=O(t),n=this._ownParameters(t,e);return n||e===Object||(n=this.parameters(e)),n||[]},t.prototype._ownAnnotations=function(t,e){if(t.annotations&&t.annotations!==e.annotations){var n=t.annotations;return\"function\"==typeof n&&n.annotations&&(n=n.annotations),n}return t.decorators&&t.decorators!==e.decorators?C(t.decorators):t.hasOwnProperty(Fe)?t[Fe]:null},t.prototype.annotations=function(t){if(!w(t))return[];var e=O(t),n=this._ownAnnotations(t,e)||[];return(e!==Object?this.annotations(e):[]).concat(n)},t.prototype._ownPropMetadata=function(t,e){if(t.propMetadata&&t.propMetadata!==e.propMetadata){var n=t.propMetadata;return\"function\"==typeof n&&n.propMetadata&&(n=n.propMetadata),n}if(t.propDecorators&&t.propDecorators!==e.propDecorators){var i=t.propDecorators,r={};return Object.keys(i).forEach(function(t){r[t]=C(i[t])}),r}return t.hasOwnProperty(ze)?t[ze]:null},t.prototype.propMetadata=function(t){if(!w(t))return{};var e=O(t),n={};if(e!==Object){var i=this.propMetadata(e);Object.keys(i).forEach(function(t){n[t]=i[t]})}var r=this._ownPropMetadata(t,e);return r&&Object.keys(r).forEach(function(t){var e=[];n.hasOwnProperty(t)&&e.push.apply(e,n[t]),e.push.apply(e,r[t]),n[t]=e}),n},t.prototype.hasLifecycleHook=function(t,e){return t instanceof On&&e in t.prototype},t.prototype.getter=function(t){return new Function(\"o\",\"return o.\"+t+\";\")},t.prototype.setter=function(t){return new Function(\"o\",\"v\",\"return o.\"+t+\" = v;\")},t.prototype.method=function(t){var e=\"if (!o.\"+t+\") throw new Error('\\\"\"+t+\"\\\" is undefined');\\n        return o.\"+t+\".apply(o, args);\";return new Function(\"o\",\"args\",e)},t.prototype.importUri=function(t){return\"object\"==typeof t&&t.filePath?t.filePath:\"./\"+l(t)},t.prototype.resourceUri=function(t){return\"./\"+l(t)},t.prototype.resolveIdentifier=function(t,e,n,i){return i},t.prototype.resolveEnum=function(t,e){return t[e]},t}(),xn=new(function(){function t(t){this.reflectionCapabilities=t}return t.prototype.updateCapabilities=function(t){this.reflectionCapabilities=t},t.prototype.factory=function(t){return this.reflectionCapabilities.factory(t)},t.prototype.parameters=function(t){return this.reflectionCapabilities.parameters(t)},t.prototype.annotations=function(t){return this.reflectionCapabilities.annotations(t)},t.prototype.propMetadata=function(t){return this.reflectionCapabilities.propMetadata(t)},t.prototype.hasLifecycleHook=function(t,e){return this.reflectionCapabilities.hasLifecycleHook(t,e)},t.prototype.getter=function(t){return this.reflectionCapabilities.getter(t)},t.prototype.setter=function(t){return this.reflectionCapabilities.setter(t)},t.prototype.method=function(t){return this.reflectionCapabilities.method(t)},t.prototype.importUri=function(t){return this.reflectionCapabilities.importUri(t)},t.prototype.resourceUri=function(t){return this.reflectionCapabilities.resourceUri(t)},t.prototype.resolveIdentifier=function(t,e,n,i){return this.reflectionCapabilities.resolveIdentifier(t,e,n,i)},t.prototype.resolveEnum=function(t,e){return this.reflectionCapabilities.resolveEnum(t,e)},t}())(new En),Tn=function(){function t(t,e,n){this.key=t,this.optional=e,this.visibility=n}return t.fromKey=function(e){return new t(e,!1,null)},t}(),kn=[],Pn=function(){function t(t,e,n){this.key=t,this.resolvedFactories=e,this.multiProvider=n}return Object.defineProperty(t.prototype,\"resolvedFactory\",{get:function(){return this.resolvedFactories[0]},enumerable:!0,configurable:!0}),t}(),An=function(){return function(t,e){this.factory=t,this.dependencies=e}}(),In=new Object,jn=function(){function t(){}return t.resolve=function(t){return function(t){var e=function(t,e){for(var n=0;n<t.length;n++){var i=t[n],r=e.get(i.key.id);if(r){if(i.multiProvider!==r.multiProvider)throw function(t,e){return Error(\"Cannot mix multi providers and regular providers, got: \"+t+\" \"+e)}(r,i);if(i.multiProvider)for(var o=0;o<i.resolvedFactories.length;o++)r.resolvedFactories.push(i.resolvedFactories[o]);else e.set(i.key.id,i)}else{var s=void 0;s=i.multiProvider?new Pn(i.key,i.resolvedFactories.slice(),i.multiProvider):i,e.set(i.key.id,s)}}return e}(S(t,[]).map(function(t){return new Pn(wn.get(t.provide),[function(t){var e,n;if(t.useClass){var i=c(t.useClass);e=xn.factory(i),n=E(i)}else t.useExisting?(e=function(t){return t},n=[Tn.fromKey(wn.get(t.useExisting))]):t.useFactory?(e=t.useFactory,n=function(t,e){if(e){var n=e.map(function(t){return[t]});return e.map(function(e){return x(t,e,n)})}return E(t)}(t.useFactory,t.deps)):(e=function(){return t.useValue},n=kn);return new An(e,n)}(t)],t.multi||!1)}),new Map);return Array.from(e.values())}(t)},t.resolveAndCreate=function(e,n){var i=t.resolve(e);return t.fromResolvedProviders(i,n)},t.fromResolvedProviders=function(t,e){return new Dn(t,e)},t}(),Dn=function(){function t(t,e){this._constructionCounter=0,this._providers=t,this.parent=e||null;var n=t.length;this.keyIds=new Array(n),this.objs=new Array(n);for(var i=0;i<n;i++)this.keyIds[i]=t[i].key.id,this.objs[i]=In}return t.prototype.get=function(t,e){return void 0===e&&(e=en),this._getByKey(wn.get(t),null,e)},t.prototype.resolveAndCreateChild=function(t){var e=jn.resolve(t);return this.createChildFromResolved(e)},t.prototype.createChildFromResolved=function(e){var n=new t(e);return n.parent=this,n},t.prototype.resolveAndInstantiate=function(t){return this.instantiateResolved(jn.resolve([t])[0])},t.prototype.instantiateResolved=function(t){return this._instantiateProvider(t)},t.prototype.getProviderAtIndex=function(t){if(t<0||t>=this._providers.length)throw function(t){return Error(\"Index \"+t+\" is out-of-bounds.\")}(t);return this._providers[t]},t.prototype._new=function(t){if(this._constructionCounter++>this._getMaxNumberOfObjects())throw function(t,e){return g(t,e,function(t){return\"Cannot instantiate cyclic dependency!\"+m(t)})}(this,t.key);return this._instantiateProvider(t)},t.prototype._getMaxNumberOfObjects=function(){return this.objs.length},t.prototype._instantiateProvider=function(t){if(t.multiProvider){for(var e=new Array(t.resolvedFactories.length),n=0;n<t.resolvedFactories.length;++n)e[n]=this._instantiate(t,t.resolvedFactories[n]);return e}return this._instantiate(t,t.resolvedFactories[0])},t.prototype._instantiate=function(t,e){var n,i=this,r=e.factory;try{n=e.dependencies.map(function(t){return i._getByReflectiveDependency(t)})}catch(e){throw e.addKey&&e.addKey(this,t.key),e}var o;try{o=r.apply(void 0,n)}catch(e){throw function(t,e,n,i){return g(t,i,function(t){var n=l(t[0].token);return e.message+\": Error during instantiation of \"+n+\"!\"+m(t)+\".\"},e)}(this,e,0,t.key)}return o},t.prototype._getByReflectiveDependency=function(t){return this._getByKey(t.key,t.visibility,t.optional?null:en)},t.prototype._getByKey=function(e,n,i){return e===t.INJECTOR_KEY?this:n instanceof We?this._getByKeySelf(e,i):this._getByKeyDefault(e,i,n)},t.prototype._getObjByKeyId=function(t){for(var e=0;e<this.keyIds.length;e++)if(this.keyIds[e]===t)return this.objs[e]===In&&(this.objs[e]=this._new(this._providers[e])),this.objs[e];return In},t.prototype._throwOrNull=function(t,e){if(e!==en)return e;throw function(t,e){return g(t,e,function(t){return\"No provider for \"+l(t[0].token)+\"!\"+m(t)})}(this,t)},t.prototype._getByKeySelf=function(t,e){var n=this._getObjByKeyId(t.id);return n!==In?n:this._throwOrNull(t,e)},t.prototype._getByKeyDefault=function(e,n,i){var r;for(r=i instanceof Xe?this.parent:this;r instanceof t;){var o=r,s=o._getObjByKeyId(e.id);if(s!==In)return s;r=o.parent}return null!==r?r.get(e.token,n):this._throwOrNull(e,n)},Object.defineProperty(t.prototype,\"displayName\",{get:function(){return\"ReflectiveInjector(providers: [\"+function(t,e){for(var n=new Array(t._providers.length),i=0;i<t._providers.length;++i)n[i]=e(t.getProviderAtIndex(i));return n}(this,function(t){return' \"'+t.key.displayName+'\" '}).join(\", \")+\"])\"},enumerable:!0,configurable:!0}),t.prototype.toString=function(){return this.displayName},t.INJECTOR_KEY=wn.get(rn),t}(),Mn=new Le(\"Application Initializer\"),Rn=function(){function t(t){var e=this;this.appInits=t,this.initialized=!1,this.done=!1,this.donePromise=new Promise(function(t,n){e.resolve=t,e.reject=n})}return t.prototype.runInitializers=function(){var t=this;if(!this.initialized){var e=[],n=function(){t.done=!0,t.resolve()};if(this.appInits)for(var i=0;i<this.appInits.length;i++){var r=this.appInits[i]();k(r)&&e.push(r)}Promise.all(e).then(function(){n()}).catch(function(e){t.reject(e)}),0===e.length&&n(),this.initialized=!0}},t}(),Nn=new Le(\"AppId\"),Vn=new Le(\"Platform Initializer\"),Ln=new Le(\"Platform ID\"),Fn=new Le(\"appBootstrapListener\"),Bn=function(){function t(){}return t.prototype.log=function(t){console.log(t)},t.prototype.warn=function(t){console.warn(t)},t.ctorParameters=function(){return[]},t}(),zn=function(){function t(){}return t.prototype.compileModuleSync=function(t){throw I()},t.prototype.compileModuleAsync=function(t){throw I()},t.prototype.compileModuleAndAllComponentsSync=function(t){throw I()},t.prototype.compileModuleAndAllComponentsAsync=function(t){throw I()},t.prototype.clearCache=function(){},t.prototype.clearCacheFor=function(t){},t}(),Hn=function(){return function(){}}(),Yn=function(){return function(){}}(),Un=function(){return function(){}}(),qn=\"ngComponent\",Zn=function(){function t(){}return t.prototype.resolveComponentFactory=function(t){throw j(t)},t}(),Gn=function(){function t(){}return t.NULL=new Zn,t}(),Wn=function(){function t(t,e,n){this._parent=e,this._ngModule=n,this._factories=new Map;for(var i=0;i<t.length;i++){var r=t[i];this._factories.set(r.componentType,r)}}return t.prototype.resolveComponentFactory=function(t){var e=this._factories.get(t);if(!e&&this._parent&&(e=this._parent.resolveComponentFactory(t)),!e)throw j(t);return new Xn(e,this._ngModule)},t}(),Xn=function(t){function e(e,n){var i=t.call(this)||this;return i.factory=e,i.ngModule=n,i}return Object(De.__extends)(e,t),Object.defineProperty(e.prototype,\"selector\",{get:function(){return this.factory.selector},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,\"componentType\",{get:function(){return this.factory.componentType},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,\"ngContentSelectors\",{get:function(){return this.factory.ngContentSelectors},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,\"inputs\",{get:function(){return this.factory.inputs},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,\"outputs\",{get:function(){return this.factory.outputs},enumerable:!0,configurable:!0}),e.prototype.create=function(t,e,n,i){return this.factory.create(t,e,n,i||this.ngModule)},e}(Un),$n=function(){return function(){}}(),Kn=function(){return function(){}}(),Qn=function(){var t=Qe.wtf;return!(!t||!(Te=t.trace)||(ke=Te.events,0))}(),Jn=Qn?function(t,e){return void 0===e&&(e=null),ke.createScope(t,e)}:function(t,e){return function(t,e){return null}},ti=Qn?function(t,e){return Te.leaveScope(t,e),e}:function(t,e){return e},ei=function(t){function e(e){void 0===e&&(e=!1);var n=t.call(this)||this;return n.__isAsync=e,n}return Object(De.__extends)(e,t),e.prototype.emit=function(e){t.prototype.next.call(this,e)},e.prototype.subscribe=function(e,n,i){var r,o=function(t){return null},s=function(){return null};return e&&\"object\"==typeof e?(r=this.__isAsync?function(t){setTimeout(function(){return e.next(t)})}:function(t){e.next(t)},e.error&&(o=this.__isAsync?function(t){setTimeout(function(){return e.error(t)})}:function(t){e.error(t)}),e.complete&&(s=this.__isAsync?function(){setTimeout(function(){return e.complete()})}:function(){e.complete()})):(r=this.__isAsync?function(t){setTimeout(function(){return e(t)})}:function(t){e(t)},n&&(o=this.__isAsync?function(t){setTimeout(function(){return n(t)})}:function(t){n(t)}),i&&(s=this.__isAsync?function(){setTimeout(function(){return i()})}:function(){i()})),t.prototype.subscribe.call(this,r,o,s)},e}(Ve.Subject),ni=function(){function t(t){var e=t.enableLongStackTrace,n=void 0!==e&&e;if(this.hasPendingMicrotasks=!1,this.hasPendingMacrotasks=!1,this.isStable=!0,this.onUnstable=new ei(!1),this.onMicrotaskEmpty=new ei(!1),this.onStable=new ei(!1),this.onError=new ei(!1),\"undefined\"==typeof Zone)throw new Error(\"Angular requires Zone.js prolyfill.\");Zone.assertZonePatched();var i=this;i._nesting=0,i._outer=i._inner=Zone.current,Zone.wtfZoneSpec&&(i._inner=i._inner.fork(Zone.wtfZoneSpec)),n&&Zone.longStackTraceZoneSpec&&(i._inner=i._inner.fork(Zone.longStackTraceZoneSpec)),function(t){t._inner=t._inner.fork({name:\"angular\",properties:{isAngularZone:!0},onInvokeTask:function(e,n,i,r,o,s){try{return R(t),e.invokeTask(i,r,o,s)}finally{N(t)}},onInvoke:function(e,n,i,r,o,s,a){try{return R(t),e.invoke(i,r,o,s,a)}finally{N(t)}},onHasTask:function(e,n,i,r){e.hasTask(i,r),n===i&&(\"microTask\"==r.change?(t.hasPendingMicrotasks=r.microTask,M(t)):\"macroTask\"==r.change&&(t.hasPendingMacrotasks=r.macroTask))},onHandleError:function(e,n,i,r){return e.handleError(i,r),t.runOutsideAngular(function(){return t.onError.emit(r)}),!1}})}(i)}return t.isInAngularZone=function(){return!0===Zone.current.get(\"isAngularZone\")},t.assertInAngularZone=function(){if(!t.isInAngularZone())throw new Error(\"Expected to be in Angular Zone, but it is not!\")},t.assertNotInAngularZone=function(){if(t.isInAngularZone())throw new Error(\"Expected to not be in Angular Zone, but it is!\")},t.prototype.run=function(t,e,n){return this._inner.run(t,e,n)},t.prototype.runTask=function(t,e,n,i){var r=this._inner,o=r.scheduleEventTask(\"NgZoneEvent: \"+i,t,ii,D,D);try{return r.runTask(o,e,n)}finally{r.cancelTask(o)}},t.prototype.runGuarded=function(t,e,n){return this._inner.runGuarded(t,e,n)},t.prototype.runOutsideAngular=function(t){return this._outer.run(t)},t}(),ii={},ri=function(){function t(){this.hasPendingMicrotasks=!1,this.hasPendingMacrotasks=!1,this.isStable=!0,this.onUnstable=new ei,this.onMicrotaskEmpty=new ei,this.onStable=new ei,this.onError=new ei}return t.prototype.run=function(t){return t()},t.prototype.runGuarded=function(t){return t()},t.prototype.runOutsideAngular=function(t){return t()},t.prototype.runTask=function(t){return t()},t}(),oi=function(){function t(t){this._ngZone=t,this._pendingCount=0,this._isZoneStable=!0,this._didWork=!1,this._callbacks=[],this._watchAngularEvents()}return t.prototype._watchAngularEvents=function(){var t=this;this._ngZone.onUnstable.subscribe({next:function(){t._didWork=!0,t._isZoneStable=!1}}),this._ngZone.runOutsideAngular(function(){t._ngZone.onStable.subscribe({next:function(){ni.assertNotInAngularZone(),s(function(){t._isZoneStable=!0,t._runCallbacksIfReady()})}})})},t.prototype.increasePendingRequestCount=function(){return this._pendingCount+=1,this._didWork=!0,this._pendingCount},t.prototype.decreasePendingRequestCount=function(){if(this._pendingCount-=1,this._pendingCount<0)throw new Error(\"pending async requests below zero\");return this._runCallbacksIfReady(),this._pendingCount},t.prototype.isStable=function(){return this._isZoneStable&&0==this._pendingCount&&!this._ngZone.hasPendingMacrotasks},t.prototype._runCallbacksIfReady=function(){var t=this;this.isStable()?s(function(){for(;0!==t._callbacks.length;)t._callbacks.pop()(t._didWork);t._didWork=!1}):this._didWork=!0},t.prototype.whenStable=function(t){this._callbacks.push(t),this._runCallbacksIfReady()},t.prototype.getPendingRequestCount=function(){return this._pendingCount},t.prototype.findProviders=function(t,e,n){return[]},t}(),si=function(){function t(){this._applications=new Map,ai.addToWindow(this)}return t.prototype.registerApplication=function(t,e){this._applications.set(t,e)},t.prototype.unregisterApplication=function(t){this._applications.delete(t)},t.prototype.unregisterAllApplications=function(){this._applications.clear()},t.prototype.getTestability=function(t){return this._applications.get(t)||null},t.prototype.getAllTestabilities=function(){return Array.from(this._applications.values())},t.prototype.getAllRootElements=function(){return Array.from(this._applications.keys())},t.prototype.findTestabilityInTree=function(t,e){return void 0===e&&(e=!0),ai.findTestabilityInTree(this,t,e)},t.ctorParameters=function(){return[]},t}(),ai=new(function(){function t(){}return t.prototype.addToWindow=function(t){},t.prototype.findTestabilityInTree=function(t,e,n){return null},t}()),li=!0,ui=!1,ci=new Le(\"AllowMultipleToken\"),pi=function(){return function(t,e){this.name=t,this.token=e}}(),hi=function(){function t(t){this._injector=t,this._modules=[],this._destroyListeners=[],this._destroyed=!1}return t.prototype.bootstrapModuleFactory=function(t,e){var n=this,i=function(t){return\"noop\"===t?new ri:(\"zone.js\"===t?void 0:t)||new ni({enableLongStackTrace:V()})}(e?e.ngZone:void 0);return i.run(function(){var e=rn.create([{provide:ni,useValue:i}],n.injector),r=t.create(e),o=r.injector.get(bn,null);if(!o)throw new Error(\"No ErrorHandler. Is platform module (BrowserModule) included?\");return r.onDestroy(function(){return z(n._modules,r)}),i.runOutsideAngular(function(){return i.onError.subscribe({next:function(t){o.handleError(t)}})}),function(t,e,n){try{var i=n();return k(i)?i.catch(function(n){throw e.runOutsideAngular(function(){return t.handleError(n)}),n}):i}catch(n){throw e.runOutsideAngular(function(){return t.handleError(n)}),n}}(o,i,function(){var t=r.injector.get(Rn);return t.runInitializers(),t.donePromise.then(function(){return n._moduleDoBootstrap(r),r})})})},t.prototype.bootstrapModule=function(t,e){var n=this;void 0===e&&(e=[]);var i=this.injector.get(Hn),r=B({},e);return i.createCompiler([r]).compileModuleAsync(t).then(function(t){return n.bootstrapModuleFactory(t,r)})},t.prototype._moduleDoBootstrap=function(t){var e=t.injector.get(fi);if(t._bootstrapComponents.length>0)t._bootstrapComponents.forEach(function(t){return e.bootstrap(t)});else{if(!t.instance.ngDoBootstrap)throw new Error(\"The module \"+l(t.instance.constructor)+' was bootstrapped, but it does not declare \"@NgModule.bootstrap\" components nor a \"ngDoBootstrap\" method. Please define one of these.');t.instance.ngDoBootstrap(e)}this._modules.push(t)},t.prototype.onDestroy=function(t){this._destroyListeners.push(t)},Object.defineProperty(t.prototype,\"injector\",{get:function(){return this._injector},enumerable:!0,configurable:!0}),t.prototype.destroy=function(){if(this._destroyed)throw new Error(\"The platform has already been destroyed!\");this._modules.slice().forEach(function(t){return t.destroy()}),this._destroyListeners.forEach(function(t){return t()}),this._destroyed=!0},Object.defineProperty(t.prototype,\"destroyed\",{get:function(){return this._destroyed},enumerable:!0,configurable:!0}),t}(),fi=function(){function t(t,e,n,i,r,o){var a=this;this._zone=t,this._console=e,this._injector=n,this._exceptionHandler=i,this._componentFactoryResolver=r,this._initStatus=o,this._bootstrapListeners=[],this._views=[],this._runningTick=!1,this._enforceNoNewChanges=!1,this._stable=!0,this.componentTypes=[],this.components=[],this._enforceNoNewChanges=V(),this._zone.onMicrotaskEmpty.subscribe({next:function(){a._zone.run(function(){a.tick()})}});var l=new Me.Observable(function(t){a._stable=a._zone.isStable&&!a._zone.hasPendingMacrotasks&&!a._zone.hasPendingMicrotasks,a._zone.runOutsideAngular(function(){t.next(a._stable),t.complete()})}),u=new Me.Observable(function(t){var e;a._zone.runOutsideAngular(function(){e=a._zone.onStable.subscribe(function(){ni.assertNotInAngularZone(),s(function(){a._stable||a._zone.hasPendingMacrotasks||a._zone.hasPendingMicrotasks||(a._stable=!0,t.next(!0))})})});var n=a._zone.onUnstable.subscribe(function(){ni.assertInAngularZone(),a._stable&&(a._stable=!1,a._zone.runOutsideAngular(function(){t.next(!1)}))});return function(){e.unsubscribe(),n.unsubscribe()}});this.isStable=Object(Re.merge)(l,Ne.share.call(u))}return t.prototype.bootstrap=function(t,e){var n=this;if(!this._initStatus.done)throw new Error(\"Cannot bootstrap as there are still asynchronous initializers running. Bootstrap components in the `ngDoBootstrap` method of the root module.\");var i;i=t instanceof Un?t:this._componentFactoryResolver.resolveComponentFactory(t),this.componentTypes.push(i.componentType);var r=i instanceof Xn?null:this._injector.get($n),o=i.create(rn.NULL,[],e||i.selector,r);o.onDestroy(function(){n._unloadComponent(o)});var s=o.injector.get(oi,null);return s&&o.injector.get(si).registerApplication(o.location.nativeElement,s),this._loadComponent(o),V()&&this._console.log(\"Angular is running in the development mode. Call enableProdMode() to enable the production mode.\"),o},t.prototype.tick=function(){var e=this;if(this._runningTick)throw new Error(\"ApplicationRef.tick is called recursively\");var n=t._tickScope();try{this._runningTick=!0,this._views.forEach(function(t){return t.detectChanges()}),this._enforceNoNewChanges&&this._views.forEach(function(t){return t.checkNoChanges()})}catch(t){this._zone.runOutsideAngular(function(){return e._exceptionHandler.handleError(t)})}finally{this._runningTick=!1,ti(n)}},t.prototype.attachView=function(t){var e=t;this._views.push(e),e.attachToAppRef(this)},t.prototype.detachView=function(t){var e=t;z(this._views,e),e.detachFromAppRef()},t.prototype._loadComponent=function(t){this.attachView(t.hostView),this.tick(),this.components.push(t);this._injector.get(Fn,[]).concat(this._bootstrapListeners).forEach(function(e){return e(t)})},t.prototype._unloadComponent=function(t){this.detachView(t.hostView),z(this.components,t)},t.prototype.ngOnDestroy=function(){this._views.slice().forEach(function(t){return t.destroy()})},Object.defineProperty(t.prototype,\"viewCount\",{get:function(){return this._views.length},enumerable:!0,configurable:!0}),t._tickScope=Jn(\"ApplicationRef#tick()\"),t}(),di=function(){return function(){}}(),_i=function(){return function(){}}(),vi=function(){var t={Important:1,DashCase:2};return t[t.Important]=\"Important\",t[t.DashCase]=\"DashCase\",t}(),yi=function(){return function(){}}(),mi=function(){return function(t){this.nativeElement=t}}(),gi=function(){function t(){this.dirty=!0,this._results=[],this.changes=new ei}return Object.defineProperty(t.prototype,\"length\",{get:function(){return this._results.length},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,\"first\",{get:function(){return this._results[0]},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,\"last\",{get:function(){return this._results[this.length-1]},enumerable:!0,configurable:!0}),t.prototype.map=function(t){return this._results.map(t)},t.prototype.filter=function(t){return this._results.filter(t)},t.prototype.find=function(t){return this._results.find(t)},t.prototype.reduce=function(t,e){return this._results.reduce(t,e)},t.prototype.forEach=function(t){this._results.forEach(t)},t.prototype.some=function(t){return this._results.some(t)},t.prototype.toArray=function(){return this._results.slice()},t.prototype[o()]=function(){return this._results[o()]()},t.prototype.toString=function(){return this._results.toString()},t.prototype.reset=function(t){this._results=H(t),this.dirty=!1},t.prototype.notifyOnChanges=function(){this.changes.emit(this)},t.prototype.setDirty=function(){this.dirty=!0},t.prototype.destroy=function(){this.changes.complete(),this.changes.unsubscribe()},t}(),bi=function(){return function(){}}(),wi=function(){return function(){}}(),Ci=function(){return function(){}}(),Oi=function(){return function(t,e){this.name=t,this.callback=e}}(),Si=function(){function t(t,e,n){this._debugContext=n,this.nativeNode=t,e&&e instanceof Ei?e.addChild(this):this.parent=null,this.listeners=[]}return Object.defineProperty(t.prototype,\"injector\",{get:function(){return this._debugContext.injector},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,\"componentInstance\",{get:function(){return this._debugContext.component},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,\"context\",{get:function(){return this._debugContext.context},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,\"references\",{get:function(){return this._debugContext.references},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,\"providerTokens\",{get:function(){return this._debugContext.providerTokens},enumerable:!0,configurable:!0}),t}(),Ei=function(t){function e(e,n,i){var r=t.call(this,e,n,i)||this;return r.properties={},r.attributes={},r.classes={},r.styles={},r.childNodes=[],r.nativeElement=e,r}return Object(De.__extends)(e,t),e.prototype.addChild=function(t){t&&(this.childNodes.push(t),t.parent=this)},e.prototype.removeChild=function(t){var e=this.childNodes.indexOf(t);-1!==e&&(t.parent=null,this.childNodes.splice(e,1))},e.prototype.insertChildrenAfter=function(t,e){var n=this,i=this.childNodes.indexOf(t);-1!==i&&((r=this.childNodes).splice.apply(r,[i+1,0].concat(e)),e.forEach(function(t){t.parent&&t.parent.removeChild(t),t.parent=n}));var r},e.prototype.insertBefore=function(t,e){var n=this.childNodes.indexOf(t);-1===n?this.addChild(e):(e.parent&&e.parent.removeChild(e),e.parent=this,this.childNodes.splice(n,0,e))},e.prototype.query=function(t){return this.queryAll(t)[0]||null},e.prototype.queryAll=function(t){var e=[];return Y(this,t,e),e},e.prototype.queryAllNodes=function(t){var e=[];return U(this,t,e),e},Object.defineProperty(e.prototype,\"children\",{get:function(){return this.childNodes.filter(function(t){return t instanceof e})},enumerable:!0,configurable:!0}),e.prototype.triggerEventHandler=function(t,e){this.listeners.forEach(function(n){n.name==t&&n.callback(e)})},e}(Si),xi=new Map,Ti=function(){function t(t){this.wrapped=t}return t.wrap=function(e){return new t(e)},t}(),ki=function(){function t(t,e,n){this.previousValue=t,this.currentValue=e,this.firstChange=n}return t.prototype.isFirstChange=function(){return this.firstChange},t}(),Pi=function(){function t(){}return t.prototype.supports=function(t){return W(t)},t.prototype.create=function(t){return new Ii(t)},t}(),Ai=function(t,e){return e},Ii=function(){function t(t){this.length=0,this._linkedRecords=null,this._unlinkedRecords=null,this._previousItHead=null,this._itHead=null,this._itTail=null,this._additionsHead=null,this._additionsTail=null,this._movesHead=null,this._movesTail=null,this._removalsHead=null,this._removalsTail=null,this._identityChangesHead=null,this._identityChangesTail=null,this._trackByFn=t||Ai}return t.prototype.forEachItem=function(t){var e;for(e=this._itHead;null!==e;e=e._next)t(e)},t.prototype.forEachOperation=function(t){for(var e=this._itHead,n=this._removalsHead,i=0,r=null;e||n;){var o=!n||e&&e.currentIndex<$(n,i,r)?e:n,s=$(o,i,r),a=o.currentIndex;if(o===n)i--,n=n._nextRemoved;else if(e=e._next,null==o.previousIndex)i++;else{r||(r=[]);var l=s-i,u=a-i;if(l!=u){for(var c=0;c<l;c++){var p=c<r.length?r[c]:r[c]=0,h=p+c;u<=h&&h<l&&(r[c]=p+1)}r[o.previousIndex]=u-l}}s!==a&&t(o,s,a)}},t.prototype.forEachPreviousItem=function(t){var e;for(e=this._previousItHead;null!==e;e=e._nextPrevious)t(e)},t.prototype.forEachAddedItem=function(t){var e;for(e=this._additionsHead;null!==e;e=e._nextAdded)t(e)},t.prototype.forEachMovedItem=function(t){var e;for(e=this._movesHead;null!==e;e=e._nextMoved)t(e)},t.prototype.forEachRemovedItem=function(t){var e;for(e=this._removalsHead;null!==e;e=e._nextRemoved)t(e)},t.prototype.forEachIdentityChange=function(t){var e;for(e=this._identityChangesHead;null!==e;e=e._nextIdentityChange)t(e)},t.prototype.diff=function(t){if(null==t&&(t=[]),!W(t))throw new Error(\"Error trying to diff '\"+l(t)+\"'. Only arrays and iterables are allowed\");return this.check(t)?this:null},t.prototype.onDestroy=function(){},t.prototype.check=function(t){var e=this;this._reset();var n,i,r,s=this._itHead,l=!1;if(Array.isArray(t)){this.length=t.length;for(var u=0;u<this.length;u++)r=this._trackByFn(u,i=t[u]),null!==s&&a(s.trackById,r)?(l&&(s=this._verifyReinsertion(s,i,r,u)),a(s.item,i)||this._addIdentityChange(s,i)):(s=this._mismatch(s,i,r,u),l=!0),s=s._next}else n=0,function(t,e){if(Array.isArray(t))for(var n=0;n<t.length;n++)e(t[n]);else for(var i=t[o()](),r=void 0;!(r=i.next()).done;)e(r.value)}(t,function(t){r=e._trackByFn(n,t),null!==s&&a(s.trackById,r)?(l&&(s=e._verifyReinsertion(s,t,r,n)),a(s.item,t)||e._addIdentityChange(s,t)):(s=e._mismatch(s,t,r,n),l=!0),s=s._next,n++}),this.length=n;return this._truncate(s),this.collection=t,this.isDirty},Object.defineProperty(t.prototype,\"isDirty\",{get:function(){return null!==this._additionsHead||null!==this._movesHead||null!==this._removalsHead||null!==this._identityChangesHead},enumerable:!0,configurable:!0}),t.prototype._reset=function(){if(this.isDirty){var t=void 0,e=void 0;for(t=this._previousItHead=this._itHead;null!==t;t=t._next)t._nextPrevious=t._next;for(t=this._additionsHead;null!==t;t=t._nextAdded)t.previousIndex=t.currentIndex;for(this._additionsHead=this._additionsTail=null,t=this._movesHead;null!==t;t=e)t.previousIndex=t.currentIndex,e=t._nextMoved;this._movesHead=this._movesTail=null,this._removalsHead=this._removalsTail=null,this._identityChangesHead=this._identityChangesTail=null}},t.prototype._mismatch=function(t,e,n,i){var r;return null===t?r=this._itTail:(r=t._prev,this._remove(t)),null!==(t=null===this._linkedRecords?null:this._linkedRecords.get(n,i))?(a(t.item,e)||this._addIdentityChange(t,e),this._moveAfter(t,r,i)):null!==(t=null===this._unlinkedRecords?null:this._unlinkedRecords.get(n,null))?(a(t.item,e)||this._addIdentityChange(t,e),this._reinsertAfter(t,r,i)):t=this._addAfter(new ji(e,n),r,i),t},t.prototype._verifyReinsertion=function(t,e,n,i){var r=null===this._unlinkedRecords?null:this._unlinkedRecords.get(n,null);return null!==r?t=this._reinsertAfter(r,t._prev,i):t.currentIndex!=i&&(t.currentIndex=i,this._addToMoves(t,i)),t},t.prototype._truncate=function(t){for(;null!==t;){var e=t._next;this._addToRemovals(this._unlink(t)),t=e}null!==this._unlinkedRecords&&this._unlinkedRecords.clear(),null!==this._additionsTail&&(this._additionsTail._nextAdded=null),null!==this._movesTail&&(this._movesTail._nextMoved=null),null!==this._itTail&&(this._itTail._next=null),null!==this._removalsTail&&(this._removalsTail._nextRemoved=null),null!==this._identityChangesTail&&(this._identityChangesTail._nextIdentityChange=null)},t.prototype._reinsertAfter=function(t,e,n){null!==this._unlinkedRecords&&this._unlinkedRecords.remove(t);var i=t._prevRemoved,r=t._nextRemoved;return null===i?this._removalsHead=r:i._nextRemoved=r,null===r?this._removalsTail=i:r._prevRemoved=i,this._insertAfter(t,e,n),this._addToMoves(t,n),t},t.prototype._moveAfter=function(t,e,n){return this._unlink(t),this._insertAfter(t,e,n),this._addToMoves(t,n),t},t.prototype._addAfter=function(t,e,n){return this._insertAfter(t,e,n),this._additionsTail=null===this._additionsTail?this._additionsHead=t:this._additionsTail._nextAdded=t,t},t.prototype._insertAfter=function(t,e,n){var i=null===e?this._itHead:e._next;return t._next=i,t._prev=e,null===i?this._itTail=t:i._prev=t,null===e?this._itHead=t:e._next=t,null===this._linkedRecords&&(this._linkedRecords=new Mi),this._linkedRecords.put(t),t.currentIndex=n,t},t.prototype._remove=function(t){return this._addToRemovals(this._unlink(t))},t.prototype._unlink=function(t){null!==this._linkedRecords&&this._linkedRecords.remove(t);var e=t._prev,n=t._next;return null===e?this._itHead=n:e._next=n,null===n?this._itTail=e:n._prev=e,t},t.prototype._addToMoves=function(t,e){return t.previousIndex===e?t:(this._movesTail=null===this._movesTail?this._movesHead=t:this._movesTail._nextMoved=t,t)},t.prototype._addToRemovals=function(t){return null===this._unlinkedRecords&&(this._unlinkedRecords=new Mi),this._unlinkedRecords.put(t),t.currentIndex=null,t._nextRemoved=null,null===this._removalsTail?(this._removalsTail=this._removalsHead=t,t._prevRemoved=null):(t._prevRemoved=this._removalsTail,this._removalsTail=this._removalsTail._nextRemoved=t),t},t.prototype._addIdentityChange=function(t,e){return t.item=e,this._identityChangesTail=null===this._identityChangesTail?this._identityChangesHead=t:this._identityChangesTail._nextIdentityChange=t,t},t}(),ji=function(){return function(t,e){this.item=t,this.trackById=e,this.currentIndex=null,this.previousIndex=null,this._nextPrevious=null,this._prev=null,this._next=null,this._prevDup=null,this._nextDup=null,this._prevRemoved=null,this._nextRemoved=null,this._nextAdded=null,this._nextMoved=null,this._nextIdentityChange=null}}(),Di=function(){function t(){this._head=null,this._tail=null}return t.prototype.add=function(t){null===this._head?(this._head=this._tail=t,t._nextDup=null,t._prevDup=null):(this._tail._nextDup=t,t._prevDup=this._tail,t._nextDup=null,this._tail=t)},t.prototype.get=function(t,e){var n;for(n=this._head;null!==n;n=n._nextDup)if((null===e||e<=n.currentIndex)&&a(n.trackById,t))return n;return null},t.prototype.remove=function(t){var e=t._prevDup,n=t._nextDup;return null===e?this._head=n:e._nextDup=n,null===n?this._tail=e:n._prevDup=e,null===this._head},t}(),Mi=function(){function t(){this.map=new Map}return t.prototype.put=function(t){var e=t.trackById,n=this.map.get(e);n||(n=new Di,this.map.set(e,n)),n.add(t)},t.prototype.get=function(t,e){var n=this.map.get(t);return n?n.get(t,e):null},t.prototype.remove=function(t){var e=t.trackById;return this.map.get(e).remove(t)&&this.map.delete(e),t},Object.defineProperty(t.prototype,\"isEmpty\",{get:function(){return 0===this.map.size},enumerable:!0,configurable:!0}),t.prototype.clear=function(){this.map.clear()},t}(),Ri=function(){function t(){}return t.prototype.supports=function(t){return t instanceof Map||X(t)},t.prototype.create=function(){return new Ni},t}(),Ni=function(){function t(){this._records=new Map,this._mapHead=null,this._appendAfter=null,this._previousMapHead=null,this._changesHead=null,this._changesTail=null,this._additionsHead=null,this._additionsTail=null,this._removalsHead=null,this._removalsTail=null}return Object.defineProperty(t.prototype,\"isDirty\",{get:function(){return null!==this._additionsHead||null!==this._changesHead||null!==this._removalsHead},enumerable:!0,configurable:!0}),t.prototype.forEachItem=function(t){var e;for(e=this._mapHead;null!==e;e=e._next)t(e)},t.prototype.forEachPreviousItem=function(t){var e;for(e=this._previousMapHead;null!==e;e=e._nextPrevious)t(e)},t.prototype.forEachChangedItem=function(t){var e;for(e=this._changesHead;null!==e;e=e._nextChanged)t(e)},t.prototype.forEachAddedItem=function(t){var e;for(e=this._additionsHead;null!==e;e=e._nextAdded)t(e)},t.prototype.forEachRemovedItem=function(t){var e;for(e=this._removalsHead;null!==e;e=e._nextRemoved)t(e)},t.prototype.diff=function(t){if(t){if(!(t instanceof Map||X(t)))throw new Error(\"Error trying to diff '\"+l(t)+\"'. Only maps and objects are allowed\")}else t=new Map;return this.check(t)?this:null},t.prototype.onDestroy=function(){},t.prototype.check=function(t){var e=this;this._reset();var n=this._mapHead;if(this._appendAfter=null,this._forEach(t,function(t,i){if(n&&n.key===i)e._maybeAddToChanges(n,t),e._appendAfter=n,n=n._next;else{var r=e._getOrCreateRecordForKey(i,t);n=e._insertBeforeOrAppend(n,r)}}),n){n._prev&&(n._prev._next=null),this._removalsHead=n;for(var i=n;null!==i;i=i._nextRemoved)i===this._mapHead&&(this._mapHead=null),this._records.delete(i.key),i._nextRemoved=i._next,i.previousValue=i.currentValue,i.currentValue=null,i._prev=null,i._next=null}return this._changesTail&&(this._changesTail._nextChanged=null),this._additionsTail&&(this._additionsTail._nextAdded=null),this.isDirty},t.prototype._insertBeforeOrAppend=function(t,e){if(t){var n=t._prev;return e._next=t,e._prev=n,t._prev=e,n&&(n._next=e),t===this._mapHead&&(this._mapHead=e),this._appendAfter=t,t}return this._appendAfter?(this._appendAfter._next=e,e._prev=this._appendAfter):this._mapHead=e,this._appendAfter=e,null},t.prototype._getOrCreateRecordForKey=function(t,e){if(this._records.has(t)){var n=this._records.get(t);this._maybeAddToChanges(n,e);var i=n._prev,r=n._next;return i&&(i._next=r),r&&(r._prev=i),n._next=null,n._prev=null,n}var o=new Vi(t);return this._records.set(t,o),o.currentValue=e,this._addToAdditions(o),o},t.prototype._reset=function(){if(this.isDirty){var t=void 0;for(this._previousMapHead=this._mapHead,t=this._previousMapHead;null!==t;t=t._next)t._nextPrevious=t._next;for(t=this._changesHead;null!==t;t=t._nextChanged)t.previousValue=t.currentValue;for(t=this._additionsHead;null!=t;t=t._nextAdded)t.previousValue=t.currentValue;this._changesHead=this._changesTail=null,this._additionsHead=this._additionsTail=null,this._removalsHead=null}},t.prototype._maybeAddToChanges=function(t,e){a(e,t.currentValue)||(t.previousValue=t.currentValue,t.currentValue=e,this._addToChanges(t))},t.prototype._addToAdditions=function(t){null===this._additionsHead?this._additionsHead=this._additionsTail=t:(this._additionsTail._nextAdded=t,this._additionsTail=t)},t.prototype._addToChanges=function(t){null===this._changesHead?this._changesHead=this._changesTail=t:(this._changesTail._nextChanged=t,this._changesTail=t)},t.prototype._forEach=function(t,e){t instanceof Map?t.forEach(e):Object.keys(t).forEach(function(n){return e(t[n],n)})},t}(),Vi=function(){return function(t){this.key=t,this.previousValue=null,this.currentValue=null,this._nextPrevious=null,this._next=null,this._prev=null,this._nextAdded=null,this._nextRemoved=null,this._nextChanged=null}}(),Li=function(){function t(t){this.factories=t}return t.create=function(e,n){if(null!=n){var i=n.factories.slice();return e=e.concat(i),new t(e)}return new t(e)},t.extend=function(e){return{provide:t,useFactory:function(n){if(!n)throw new Error(\"Cannot extend IterableDiffers without a parent injector\");return t.create(e,n)},deps:[[t,new Xe,new Ge]]}},t.prototype.find=function(t){var e=this.factories.find(function(e){return e.supports(t)});if(null!=e)return e;throw new Error(\"Cannot find a differ supporting object '\"+t+\"' of type '\"+function(t){return t.name||typeof t}(t)+\"'\")},t}(),Fi=function(){function t(t){this.factories=t}return t.create=function(e,n){if(n){var i=n.factories.slice();e=e.concat(i)}return new t(e)},t.extend=function(e){return{provide:t,useFactory:function(n){if(!n)throw new Error(\"Cannot extend KeyValueDiffers without a parent injector\");return t.create(e,n)},deps:[[t,new Xe,new Ge]]}},t.prototype.find=function(t){var e=this.factories.find(function(e){return e.supports(t)});if(e)return e;throw new Error(\"Cannot find a differ supporting object '\"+t+\"'\")},t}(),Bi=[new Ri],zi=new Li([new Pi]),Hi=new Fi(Bi),Yi=L(null,\"core\",[{provide:Ln,useValue:\"unknown\"},{provide:hi,deps:[rn]},{provide:si,deps:[]},{provide:Bn,deps:[]}]),Ui=new Le(\"LocaleId\"),qi=function(){return function(t){}}(),Zi=function(){var t={NONE:0,HTML:1,STYLE:2,SCRIPT:3,URL:4,RESOURCE_URL:5};return t[t.NONE]=\"NONE\",t[t.HTML]=\"HTML\",t[t.STYLE]=\"STYLE\",t[t.SCRIPT]=\"SCRIPT\",t[t.URL]=\"URL\",t[t.RESOURCE_URL]=\"RESOURCE_URL\",t}(),Gi=function(){return function(){}}(),Wi={setCurrentNode:void 0,createRootView:void 0,createEmbeddedView:void 0,createComponentView:void 0,createNgModuleRef:void 0,overrideProvider:void 0,clearProviderOverrides:void 0,checkAndUpdateView:void 0,checkNoChangesView:void 0,destroyView:void 0,resolveDep:void 0,createDebugContext:void 0,handleEvent:void 0,updateDirectives:void 0,updateRenderer:void 0,dirtyParentQueries:void 0},Xi=function(){},$i=new Map,Ki=\"$$undefined\",Qi=\"$$empty\",Ji=0,tr=new WeakMap,er=/^:([^:]+):(.+)$/,nr=new Object,ir=ot(rn),rr=ot($n),or=new Object,sr=function(t){function e(e,n,i,r,o,s){var a=t.call(this)||this;return a.selector=e,a.componentType=n,a._inputs=r,a._outputs=o,a.ngContentSelectors=s,a.viewDefFactory=i,a}return Object(De.__extends)(e,t),Object.defineProperty(e.prototype,\"inputs\",{get:function(){var t=[],e=this._inputs;for(var n in e){t.push({propName:n,templateName:e[n]})}return t},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,\"outputs\",{get:function(){var t=[];for(var e in this._outputs){t.push({propName:e,templateName:this._outputs[e]})}return t},enumerable:!0,configurable:!0}),e.prototype.create=function(t,e,n,i){if(!i)throw new Error(\"ngModule should be provided\");var r=gt(this.viewDefFactory),o=r.nodes[0].element.componentProvider.nodeIndex,s=Wi.createRootView(t,e||[],n,r,i,or),a=J(s,o).instance;return n&&s.renderer.setAttribute(Q(s,0).renderElement,\"ng-version\",qe.full),new ar(s,new ur(s),a)},e}(Un),ar=function(t){function e(e,n,i){var r=t.call(this)||this;return r._view=e,r._viewRef=n,r._component=i,r._elDef=r._view.def.nodes[0],r.hostView=n,r.changeDetectorRef=n,r.instance=i,r}return Object(De.__extends)(e,t),Object.defineProperty(e.prototype,\"location\",{get:function(){return new mi(Q(this._view,this._elDef.nodeIndex).renderElement)},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,\"injector\",{get:function(){return new pr(this._view,this._elDef)},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,\"componentType\",{get:function(){return this._component.constructor},enumerable:!0,configurable:!0}),e.prototype.destroy=function(){this._viewRef.destroy()},e.prototype.onDestroy=function(t){this._viewRef.onDestroy(t)},e}(Yn),lr=function(){function t(t,e,n){this._view=t,this._elDef=e,this._data=n,this._embeddedViews=[]}return Object.defineProperty(t.prototype,\"element\",{get:function(){return new mi(this._data.renderElement)},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,\"injector\",{get:function(){return new pr(this._view,this._elDef)},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,\"parentInjector\",{get:function(){for(var t=this._view,e=this._elDef.parent;!e&&t;)e=ht(t),t=t.parent;return t?new pr(t,e):new pr(this._view,null)},enumerable:!0,configurable:!0}),t.prototype.clear=function(){for(var t=this._embeddedViews.length-1;t>=0;t--){var e=It(this._data,t);Wi.destroyView(e)}},t.prototype.get=function(t){var e=this._embeddedViews[t];if(e){var n=new ur(e);return n.attachToViewContainerRef(this),n}return null},Object.defineProperty(t.prototype,\"length\",{get:function(){return this._embeddedViews.length},enumerable:!0,configurable:!0}),t.prototype.createEmbeddedView=function(t,e,n){var i=t.createEmbeddedView(e||{});return this.insert(i,n),i},t.prototype.createComponent=function(t,e,n,i,r){var o=n||this.parentInjector;r||t instanceof Xn||(r=o.get($n));var s=t.create(o,i,void 0,r);return this.insert(s.hostView,e),s},t.prototype.insert=function(t,e){if(t.destroyed)throw new Error(\"Cannot insert a destroyed View in a ViewContainer!\");var n=t;return function(t,e,n,i){var r=e.viewContainer._embeddedViews;null!==n&&void 0!==n||(n=r.length),i.viewContainerParent=t,Mt(r,n,i),function(t,e){var n=pt(e);if(n&&n!==t&&!(16&e.state)){e.state|=16;var i=n.template._projectedViews;i||(i=n.template._projectedViews=[]),i.push(e),function(t,n){if(!(4&n.flags)){e.parent.def.nodeFlags|=4,n.flags|=4;for(var i=n.parent;i;)i.childFlags|=4,i=i.parent}}(0,e.parentNodeDef)}}(e,i),Wi.dirtyParentQueries(i),jt(e,n>0?r[n-1]:null,i)}(this._view,this._data,e,n._view),n.attachToViewContainerRef(this),t},t.prototype.move=function(t,e){if(t.destroyed)throw new Error(\"Cannot move a destroyed View in a ViewContainer!\");var n=this._embeddedViews.indexOf(t._view);return function(t,e,n){var i=t.viewContainer._embeddedViews,r=i[e];Rt(i,e),null==n&&(n=i.length),Mt(i,n,r),Wi.dirtyParentQueries(r),Dt(r),jt(t,n>0?i[n-1]:null,r)}(this._data,n,e),t},t.prototype.indexOf=function(t){return this._embeddedViews.indexOf(t._view)},t.prototype.remove=function(t){var e=It(this._data,t);e&&Wi.destroyView(e)},t.prototype.detach=function(t){var e=It(this._data,t);return e?new ur(e):null},t}(),ur=function(){function t(t){this._view=t,this._viewContainerRef=null,this._appRef=null}return Object.defineProperty(t.prototype,\"rootNodes\",{get:function(){return function(t){var e=[];return bt(t,0,void 0,void 0,e),e}(this._view)},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,\"context\",{get:function(){return this._view.context},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,\"destroyed\",{get:function(){return 0!=(128&this._view.state)},enumerable:!0,configurable:!0}),t.prototype.markForCheck=function(){ut(this._view)},t.prototype.detach=function(){this._view.state&=-5},t.prototype.detectChanges=function(){var t=this._view.root.rendererFactory;t.begin&&t.begin(),Wi.checkAndUpdateView(this._view),t.end&&t.end()},t.prototype.checkNoChanges=function(){Wi.checkNoChangesView(this._view)},t.prototype.reattach=function(){this._view.state|=4},t.prototype.onDestroy=function(t){this._view.disposables||(this._view.disposables=[]),this._view.disposables.push(t)},t.prototype.destroy=function(){this._appRef?this._appRef.detachView(this):this._viewContainerRef&&this._viewContainerRef.detach(this._viewContainerRef.indexOf(this)),Wi.destroyView(this._view)},t.prototype.detachFromAppRef=function(){this._appRef=null,Dt(this._view),Wi.dirtyParentQueries(this._view)},t.prototype.attachToAppRef=function(t){if(this._viewContainerRef)throw new Error(\"This view is already attached to a ViewContainer!\");this._appRef=t},t.prototype.attachToViewContainerRef=function(t){if(this._appRef)throw new Error(\"This view is already attached directly to the ApplicationRef!\");this._viewContainerRef=t},t}(),cr=function(t){function e(e,n){var i=t.call(this)||this;return i._parentView=e,i._def=n,i}return Object(De.__extends)(e,t),e.prototype.createEmbeddedView=function(t){return new ur(Wi.createEmbeddedView(this._parentView,this._def,this._def.element.template,t))},Object.defineProperty(e.prototype,\"elementRef\",{get:function(){return new mi(Q(this._parentView,this._def.nodeIndex).renderElement)},enumerable:!0,configurable:!0}),e}(bi),pr=function(){function t(t,e){this.view=t,this.elDef=e}return t.prototype.get=function(t,e){void 0===e&&(e=rn.THROW_IF_NOT_FOUND);return Wi.resolveDep(this.view,this.elDef,!!this.elDef&&0!=(33554432&this.elDef.flags),{flags:0,token:t,tokenKey:ot(t)},e)},t}(),hr=function(){function t(t){this.delegate=t}return t.prototype.selectRootElement=function(t){return this.delegate.selectRootElement(t)},t.prototype.createElement=function(t,e){var n=Et(e),i=this.delegate.createElement(n[1],n[0]);return t&&this.delegate.appendChild(t,i),i},t.prototype.createViewRoot=function(t){return t},t.prototype.createTemplateAnchor=function(t){var e=this.delegate.createComment(\"\");return t&&this.delegate.appendChild(t,e),e},t.prototype.createText=function(t,e){var n=this.delegate.createText(e);return t&&this.delegate.appendChild(t,n),n},t.prototype.projectNodes=function(t,e){for(var n=0;n<e.length;n++)this.delegate.appendChild(t,e[n])},t.prototype.attachViewAfter=function(t,e){for(var n=this.delegate.parentNode(t),i=this.delegate.nextSibling(t),r=0;r<e.length;r++)this.delegate.insertBefore(n,e[r],i)},t.prototype.detachView=function(t){for(var e=0;e<t.length;e++){var n=t[e],i=this.delegate.parentNode(n);this.delegate.removeChild(i,n)}},t.prototype.destroyView=function(t,e){for(var n=0;n<e.length;n++)this.delegate.destroyNode(e[n])},t.prototype.listen=function(t,e,n){return this.delegate.listen(t,e,n)},t.prototype.listenGlobal=function(t,e,n){return this.delegate.listen(t,e,n)},t.prototype.setElementProperty=function(t,e,n){this.delegate.setProperty(t,e,n)},t.prototype.setElementAttribute=function(t,e,n){var i=Et(e),r=i[0],o=i[1];null!=n?this.delegate.setAttribute(t,o,n,r):this.delegate.removeAttribute(t,o,r)},t.prototype.setBindingDebugInfo=function(t,e,n){},t.prototype.setElementClass=function(t,e,n){n?this.delegate.addClass(t,e):this.delegate.removeClass(t,e)},t.prototype.setElementStyle=function(t,e,n){null!=n?this.delegate.setStyle(t,e,n):this.delegate.removeStyle(t,e)},t.prototype.invokeElementMethod=function(t,e,n){t[e].apply(t,n)},t.prototype.setText=function(t,e){this.delegate.setValue(t,e)},t.prototype.animate=function(){throw new Error(\"Renderer.animate is no longer supported!\")},t}(),fr=function(){function t(t,e,n,i){this._moduleType=t,this._parent=e,this._bootstrapComponents=n,this._def=i,this._destroyListeners=[],this._destroyed=!1,function(t){for(var e=t._def,n=t._providers=new Array(e.providers.length),i=0;i<e.providers.length;i++){var r=e.providers[i];4096&r.flags||(n[i]=At(t,r))}}(this)}return t.prototype.get=function(t,e){return void 0===e&&(e=rn.THROW_IF_NOT_FOUND),Pt(this,{token:t,tokenKey:ot(t),flags:0},e)},Object.defineProperty(t.prototype,\"instance\",{get:function(){return this.get(this._moduleType)},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,\"componentFactoryResolver\",{get:function(){return this.get(Gn)},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,\"injector\",{get:function(){return this},enumerable:!0,configurable:!0}),t.prototype.destroy=function(){if(this._destroyed)throw new Error(\"The ng module \"+l(this.instance.constructor)+\" has already been destroyed.\");this._destroyed=!0,function(t,e){for(var n=t._def,i=0;i<n.providers.length;i++)if(131072&n.providers[i].flags){var r=t._providers[i];r&&r!==nr&&r.ngOnDestroy()}}(this),this._destroyListeners.forEach(function(t){return t()})},t.prototype.onDestroy=function(t){this._destroyListeners.push(t)},t}(),dr=ot(di),_r=ot(yi),vr=ot(mi),yr=ot(wi),mr=ot(bi),gr=ot(Ci),br=ot(rn),wr={},Cr=function(){var t={CreateViewNodes:0,CheckNoChanges:1,CheckNoChangesProjectedViews:2,CheckAndUpdate:3,CheckAndUpdateProjectedViews:4,Destroy:5};return t[t.CreateViewNodes]=\"CreateViewNodes\",t[t.CheckNoChanges]=\"CheckNoChanges\",t[t.CheckNoChangesProjectedViews]=\"CheckNoChangesProjectedViews\",t[t.CheckAndUpdate]=\"CheckAndUpdate\",t[t.CheckAndUpdateProjectedViews]=\"CheckAndUpdateProjectedViews\",t[t.Destroy]=\"Destroy\",t}(),Or=!1,Sr=new Map,Er=function(){var t={create:0,detectChanges:1,checkNoChanges:2,destroy:3,handleEvent:4};return t[t.create]=\"create\",t[t.detectChanges]=\"detectChanges\",t[t.checkNoChanges]=\"checkNoChanges\",t[t.destroy]=\"destroy\",t[t.handleEvent]=\"handleEvent\",t}(),xr=/([A-Z])/g,Tr=function(){function t(t,e){this.view=t,this.nodeIndex=e,null==e&&(this.nodeIndex=e=0),this.nodeDef=t.def.nodes[e];for(var n=this.nodeDef,i=t;n&&0==(1&n.flags);)n=n.parent;if(!n)for(;!n&&i;)n=ht(i),i=i.parent;this.elDef=n,this.elView=i}return Object.defineProperty(t.prototype,\"elOrCompView\",{get:function(){return Q(this.elView,this.elDef.nodeIndex).componentView||this.view},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,\"injector\",{get:function(){return Nt(this.elView,this.elDef)},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,\"component\",{get:function(){return this.elOrCompView.component},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,\"context\",{get:function(){return this.elOrCompView.context},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,\"providerTokens\",{get:function(){var t=[];if(this.elDef)for(var e=this.elDef.nodeIndex+1;e<=this.elDef.nodeIndex+this.elDef.childCount;e++){var n=this.elView.def.nodes[e];20224&n.flags&&t.push(n.provider.token),e+=n.childCount}return t},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,\"references\",{get:function(){var t={};if(this.elDef){Se(this.elView,this.elDef,t);for(var e=this.elDef.nodeIndex+1;e<=this.elDef.nodeIndex+this.elDef.childCount;e++){var n=this.elView.def.nodes[e];20224&n.flags&&Se(this.elView,n,t),e+=n.childCount}}return t},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,\"componentRenderElement\",{get:function(){var t=function(t){for(;t&&!dt(t);)t=t.parent;return t.parent?Q(t.parent,ht(t).nodeIndex):null}(this.elOrCompView);return t?t.renderElement:void 0},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,\"renderNode\",{get:function(){return 2&this.nodeDef.flags?ft(this.view,this.nodeDef):ft(this.elView,this.elDef)},enumerable:!0,configurable:!0}),t.prototype.logError=function(t){for(var e=[],n=1;n<arguments.length;n++)e[n-1]=arguments[n];var i,r;2&this.nodeDef.flags?(i=this.view.def,r=this.nodeDef.nodeIndex):(i=this.elView.def,r=this.elDef.nodeIndex);var o=function(t,e){for(var n=-1,i=0;i<=e;i++)3&t.nodes[i].flags&&n++;return n}(i,r),s=-1;i.factory(function(){return++s===o?(n=t.error).bind.apply(n,[t].concat(e)):Xi;var n}),s<o&&(t.error(\"Illegal state: the ViewDefinitionFactory did not call the logger!\"),t.error.apply(t,e))},t}(),kr=function(){function t(t){this.delegate=t}return t.prototype.createRenderer=function(t,e){return new Pr(this.delegate.createRenderer(t,e))},t.prototype.begin=function(){this.delegate.begin&&this.delegate.begin()},t.prototype.end=function(){this.delegate.end&&this.delegate.end()},t.prototype.whenRenderingDone=function(){return this.delegate.whenRenderingDone?this.delegate.whenRenderingDone():Promise.resolve(null)},t}(),Pr=function(){function t(t){this.delegate=t}return Object.defineProperty(t.prototype,\"data\",{get:function(){return this.delegate.data},enumerable:!0,configurable:!0}),t.prototype.destroyNode=function(t){!function(t){xi.delete(t.nativeNode)}(q(t)),this.delegate.destroyNode&&this.delegate.destroyNode(t)},t.prototype.destroy=function(){this.delegate.destroy()},t.prototype.createElement=function(t,e){var n=this.delegate.createElement(t,e),i=xe();if(i){var r=new Ei(n,null,i);r.name=t,Z(r)}return n},t.prototype.createComment=function(t){var e=this.delegate.createComment(t),n=xe();return n&&Z(new Si(e,null,n)),e},t.prototype.createText=function(t){var e=this.delegate.createText(t),n=xe();return n&&Z(new Si(e,null,n)),e},t.prototype.appendChild=function(t,e){var n=q(t),i=q(e);n&&i&&n instanceof Ei&&n.addChild(i),this.delegate.appendChild(t,e)},t.prototype.insertBefore=function(t,e,n){var i=q(t),r=q(e),o=q(n);i&&r&&i instanceof Ei&&i.insertBefore(o,r),this.delegate.insertBefore(t,e,n)},t.prototype.removeChild=function(t,e){var n=q(t),i=q(e);n&&i&&n instanceof Ei&&n.removeChild(i),this.delegate.removeChild(t,e)},t.prototype.selectRootElement=function(t){var e=this.delegate.selectRootElement(t),n=xe();return n&&Z(new Ei(e,null,n)),e},t.prototype.setAttribute=function(t,e,n,i){var r=q(t);if(r&&r instanceof Ei){r.attributes[i?i+\":\"+e:e]=n}this.delegate.setAttribute(t,e,n,i)},t.prototype.removeAttribute=function(t,e,n){var i=q(t);if(i&&i instanceof Ei){i.attributes[n?n+\":\"+e:e]=null}this.delegate.removeAttribute(t,e,n)},t.prototype.addClass=function(t,e){var n=q(t);n&&n instanceof Ei&&(n.classes[e]=!0),this.delegate.addClass(t,e)},t.prototype.removeClass=function(t,e){var n=q(t);n&&n instanceof Ei&&(n.classes[e]=!1),this.delegate.removeClass(t,e)},t.prototype.setStyle=function(t,e,n,i){var r=q(t);r&&r instanceof Ei&&(r.styles[e]=n),this.delegate.setStyle(t,e,n,i)},t.prototype.removeStyle=function(t,e,n){var i=q(t);i&&i instanceof Ei&&(i.styles[e]=null),this.delegate.removeStyle(t,e,n)},t.prototype.setProperty=function(t,e,n){var i=q(t);i&&i instanceof Ei&&(i.properties[e]=n),this.delegate.setProperty(t,e,n)},t.prototype.listen=function(t,e,n){if(\"string\"!=typeof t){var i=q(t);i&&i.listeners.push(new Oi(e,n))}return this.delegate.listen(t,e,n)},t.prototype.parentNode=function(t){return this.delegate.parentNode(t)},t.prototype.nextSibling=function(t){return this.delegate.nextSibling(t)},t.prototype.setValue=function(t,e){return this.delegate.setValue(t,e)},t}(),Ar=function(t){function e(e,n,i){var r=t.call(this)||this;return r.moduleType=e,r._bootstrapComponents=n,r._ngModuleDefFactory=i,r}return Object(De.__extends)(e,t),e.prototype.create=function(t){de();var e=gt(this._ngModuleDefFactory);return Wi.createNgModuleRef(this.moduleType,t||rn.NULL,this._bootstrapComponents,e)},e}(Kn)}).call(e,n(154))},function(t,e,n){\"use strict\";n.d(e,\"a\",function(){return o}),e.c=function(t,e){var n=new o;n.init(t,e);var i=e.win();return i.Ionic=i.Ionic||{},i.Ionic.config=n,n},n.d(e,\"b\",function(){return s});var i=n(0),r=n(18),o=function(){function t(){this._c={},this._s={},this._modes={},this._trns={}}return t.prototype.init=function(t,e){this._s=t&&Object(r.k)(t)&&!Object(r.e)(t)?t:{},this.plt=e},t.prototype.get=function(t,e){void 0===e&&(e=null);var n=this.plt;if(!Object(r.h)(this._c[t])){if(!Object(r.h)(t))throw\"config key is not defined\";var i=void 0,o=this._s[t],s=void 0,a=void 0,l=void 0,u=void 0,c=null;if(n){var p=n.getQueryParam(\"ionic\"+t);if(Object(r.h)(p))return this._c[t]=\"true\"===p||\"false\"!==p&&p;for(var h=n.platforms(),f=0,d=h.length;f<d;f++)this._s.platforms&&(c=this._s.platforms[h[f]])&&(Object(r.h)(c[t])&&(i=c[t]),(c=this.getModeConfig(c.mode))&&Object(r.h)(c[t])&&(s=c[t])),(c=n.getPlatformConfig(h[f]))&&c.settings&&(Object(r.h)(c.settings[t])&&(l=c.settings[t]),(c=this.getModeConfig(c.settings.mode))&&Object(r.h)(c[t])&&(u=c[t]))}(c=this.getModeConfig(this._s.mode))&&Object(r.h)(c[t])&&(a=c[t]),this._c[t]=Object(r.h)(i)?i:Object(r.h)(o)?o:Object(r.h)(s)?s:Object(r.h)(a)?a:Object(r.h)(l)?l:Object(r.h)(u)?u:null}var _=this._c[t];return Object(r.i)(_)&&(_=_(n)),null!==_?_:e},t.prototype.getBoolean=function(t,e){void 0===e&&(e=!1);var n=this.get(t);return null===n?e:\"string\"==typeof n?\"true\"===n:!!n},t.prototype.getNumber=function(t,e){void 0===e&&(e=NaN);var n=parseFloat(this.get(t));return isNaN(n)?e:n},t.prototype.set=function(){for(var t=[],e=0;e<arguments.length;e++)t[e]=arguments[e];var n=t[0],i=t[1];switch(t.length){case 2:this._s[n]=i,delete this._c[n];break;case 3:this._s.platforms=this._s.platforms||{},this._s.platforms[n]=this._s.platforms[n]||{},this._s.platforms[n][i]=t[2],delete this._c[i]}return this},t.prototype.settings=function(t,e){switch(arguments.length){case 0:return this._s;case 1:this._s=t,this._c={};break;case 2:this._s.platforms=this._s.platforms||{},this._s.platforms[t]=e,this._c={}}return this},t.prototype.setModeConfig=function(t,e){this._modes[t]=e},t.prototype.getModeConfig=function(t){return this._modes[t]||null},t.prototype.setTransition=function(t,e){this._trns[t]=e},t.prototype.getTransition=function(t){return this._trns[t]||null},t}(),s=new i.n(\"USERCONFIG\")},function(t,e,n){\"use strict\";var i=n(0),r=n(35),o=function(){function t(){this.data={}}return t.prototype.parseUrl=function(t){if(t){var e=t.indexOf(\"?\");if(e>-1)for(var n=t.slice(e+1).split(\"&\"),i=0;i<n.length;i++)if(n[i].indexOf(\"=\")>0){var r=n[i].split(\"=\");r.length>1&&(this.data[r[0].toLowerCase()]=r[1].split(\"#\")[0])}}},t.prototype.get=function(t){return this.data[t.toLowerCase()]},t}(),s=n(18);n.d(e,\"a\",function(){return a}),e.b=function(t,e,n){var i=new a;i.setDefault(\"core\"),i.setPlatformConfigs(e),i.setZone(n);var r=t.documentElement;i.setDocument(t);var o=r.dir;i.setDir(\"rtl\"===o?\"rtl\":\"ltr\",!o),i.setLang(r.lang,!1),i.setCssProps(r);var s=t.defaultView;return i.setWindow(s),i.setNavigatorPlatform(s.navigator.platform),i.setUserAgent(s.navigator.userAgent),i.setQueryParams(s.location.href),i.init(),s.Ionic=s.Ionic||{},s.Ionic.platform=i,i};var a=function(){function t(){var t=this;this._versions={},this._qp=new o,this._bbActions=[],this._pW=0,this._pH=0,this._lW=0,this._lH=0,this._isPortrait=null,this._uiEvtOpts=!1,this._platforms=[],this.backButton=new i.l,this.pause=new i.l,this.resume=new i.l,this.resize=new i.l,this._readyPromise=new Promise(function(e){t._readyResolve=e}),this.backButton.subscribe(function(){t.runBackButtonAction()})}return t.prototype.setWindow=function(t){this._win=t},t.prototype.win=function(){return this._win},t.prototype.setDocument=function(t){this._doc=t},t.prototype.doc=function(){return this._doc},t.prototype.setZone=function(t){this.zone=t},t.prototype.setCssProps=function(t){this.Css=Object(r.c)(t)},t.prototype.is=function(t){return this._platforms.indexOf(t)>-1},t.prototype.platforms=function(){return this._platforms},t.prototype.versions=function(){return this._versions},t.prototype.version=function(){for(var t in this._versions)if(this._versions[t])return this._versions[t];return{}},t.prototype.ready=function(){return this._readyPromise},t.prototype.triggerReady=function(t){var e=this;this.zone.run(function(){e._readyResolve(t)})},t.prototype.prepareReady=function(){function t(){e._doc.removeEventListener(\"DOMContentLoaded\",t,!1),e._win.removeEventListener(\"load\",t,!1),e.triggerReady(\"dom\")}var e=this;\"complete\"===e._doc.readyState||\"interactive\"===e._doc.readyState?e.triggerReady(\"dom\"):(e._doc.addEventListener(\"DOMContentLoaded\",t,!1),e._win.addEventListener(\"load\",t,!1))},t.prototype.setDir=function(t,e){this._dir=t,this.isRTL=\"rtl\"===t,!1!==e&&this._doc.documentElement.setAttribute(\"dir\",t)},t.prototype.dir=function(){return this._dir},t.prototype.setLang=function(t,e){this._lang=t,!1!==e&&this._doc.documentElement.setAttribute(\"lang\",t)},t.prototype.lang=function(){return this._lang},t.prototype.exitApp=function(){},t.prototype.registerBackButtonAction=function(t,e){var n=this;void 0===e&&(e=0);var i={fn:t,priority:e};return this._bbActions.push(i),function(){Object(s.q)(n._bbActions,i)}},t.prototype.runBackButtonAction=function(){var t=null;this._bbActions.forEach(function(e){(!t||e.priority>=t.priority)&&(t=e)}),t&&t.fn&&t.fn()},t.prototype.setUserAgent=function(t){this._ua=t},t.prototype.setQueryParams=function(t){this._qp.parseUrl(t)},t.prototype.getQueryParam=function(t){return this._qp.get(t)},t.prototype.url=function(){return this._win.location.href},t.prototype.userAgent=function(){return this._ua||\"\"},t.prototype.setNavigatorPlatform=function(t){this._nPlt=t},t.prototype.navigatorPlatform=function(){return this._nPlt||\"\"},t.prototype.width=function(){return this._calcDim(),this._isPortrait?this._pW:this._lW},t.prototype.height=function(){return this._calcDim(),this._isPortrait?this._pH:this._lH},t.prototype.getElementComputedStyle=function(t,e){return this._win.getComputedStyle(t,e)},t.prototype.getElementFromPoint=function(t,e){return this._doc.elementFromPoint(t,e)},t.prototype.getElementBoundingClientRect=function(t){return t.getBoundingClientRect()},t.prototype.isPortrait=function(){return this._calcDim(),this._isPortrait},t.prototype.isLandscape=function(){return!this.isPortrait()},t.prototype._calcDim=function(){if(null===this._isPortrait||!1===this._isPortrait&&this._win.innerWidth<this._win.innerHeight){var t=this._win,e=t.innerWidth,n=t.innerHeight;t.screen.width>0&&t.screen.height>0&&(e<n?(this._pW<=e&&(this._isPortrait=!0,this._pW=e),this._pH<=n&&(this._isPortrait=!0,this._pH=n)):(this._lW!==e&&(this._isPortrait=!1,this._lW=e),this._lH!==n&&(this._isPortrait=!1,this._lH=n)))}},t.prototype.raf=function(t){return this._win.__zone_symbol__requestAnimationFrame(t)},t.prototype.cancelRaf=function(t){return this._win.__zone_symbol__cancelAnimationFrame(t)},t.prototype.timeout=function(t,e){return this._win.__zone_symbol__setTimeout(t,e)},t.prototype.cancelTimeout=function(t){this._win.__zone_symbol__clearTimeout(t)},t.prototype.registerListener=function(t,e,n,i,r){var o,s=this._uiEvtOpts?{capture:!!i.capture,passive:!!i.passive}:!!i.capture;return!i.zone&&t.__zone_symbol__addEventListener?(t.__zone_symbol__addEventListener(e,n,s),o=function(){t.__zone_symbol__removeEventListener(e,n,s)}):(t.addEventListener(e,n,s),o=function(){t.removeEventListener(e,n,s)}),r&&r.push(o),o},t.prototype.transitionEnd=function(t,e,n){function i(){o.forEach(function(t){t()})}function r(n){t===n.target&&(i(),e(n))}void 0===n&&(n=!0);var o=[];return t&&(this.registerListener(t,\"webkitTransitionEnd\",r,{zone:n},o),this.registerListener(t,\"transitionend\",r,{zone:n},o)),i},t.prototype.windowLoad=function(t){var e,n=this._win,i=this._doc;\"complete\"===i.readyState?t(n,i):e=this.registerListener(n,\"load\",function(){e&&e(),t(n,i)},{zone:!1})},t.prototype.isActiveElement=function(t){return!(!t||this.getActiveElement()!==t)},t.prototype.getActiveElement=function(){return this._doc.activeElement},t.prototype.hasFocus=function(t){return!(!t||this.getActiveElement()!==t||t.parentElement.querySelector(\":focus\")!==t)},t.prototype.hasFocusedTextInput=function(){var t=this.getActiveElement();return!!Object(r.e)(t)&&t.parentElement.querySelector(\":focus\")===t},t.prototype.focusOutActiveElement=function(){var t=this.getActiveElement();t&&t.blur&&t.blur()},t.prototype._initEvents=function(){var t=this;try{var e=Object.defineProperty({},\"passive\",{get:function(){t._uiEvtOpts=!0}});this._win.addEventListener(\"optsTest\",null,e)}catch(t){}this.timeout(function(){var e;t.registerListener(t._win,\"resize\",function(){clearTimeout(e),e=setTimeout(function(){!1===t.hasFocusedTextInput()&&(t._isPortrait=null),t.zone.run(function(){return t.resize.emit()})},200)},{passive:!0,zone:!1})},2e3)},t.prototype.setPlatformConfigs=function(t){this._registry=t||{}},t.prototype.getPlatformConfig=function(t){return this._registry[t]||{}},t.prototype.registry=function(){return this._registry},t.prototype.setDefault=function(t){this._default=t},t.prototype.testQuery=function(t,e){return t.toLowerCase().split(\";\").indexOf(e)>-1},t.prototype.testNavigatorPlatform=function(t){return new RegExp(t,\"i\").test(this._nPlt)},t.prototype.matchUserAgentVersion=function(t){if(this._ua&&t){var e=this._ua.match(t);if(e)return{major:e[1],minor:e[2]}}},t.prototype.testUserAgent=function(t){return!!this._ua&&this._ua.indexOf(t)>=0},t.prototype.isPlatformMatch=function(t,e,n){void 0===n&&(n=[]);var i=this._qp.get(\"ionicplatform\");if(i)return this.testQuery(i,t);e=e||[t];for(var r=this._ua.toLowerCase(),o=0;o<e.length;o++)if(r.indexOf(e[o])>-1){for(var s=0;s<n.length;s++)if(r.indexOf(n[s])>-1)return!1;return!0}return!1},t.prototype.init=function(){this._initEvents();var t,e,n;for(var i in this._registry)(n=this.matchPlatform(i))&&(n.isEngine?e=n:(!t||n.depth>t.depth)&&(t=n));if(t||(t=new l(this._registry,this._default)),t){e&&(e.child=t,t.parent=e,t=e);for(var r=t;r;)!function(t,e){var n=e.superset();if(n){var i=new l(t,n);i.parent=e.parent,i.child=e,i.parent&&(i.parent.child=i),e.parent=i}}(this._registry,r),r=r.child;for(r=t.parent;r;)t=r,r=r.parent;for(r=t;r;){if(r.initialize(this),\"iphone\"===r.name&&\"iPad\"===this.navigatorPlatform())return this._platforms.push(\"tablet\"),void this._platforms.push(\"ipad\");this._platforms.push(r.name),this._versions[r.name]=r.version(this),r=r.child}}this._platforms.indexOf(\"mobile\")>-1&&-1===this._platforms.indexOf(\"cordova\")&&this._platforms.push(\"mobileweb\")},t.prototype.matchPlatform=function(t){var e=new l(this._registry,t).getRoot(this);if(e){e.depth=0;for(var n=e.child;n;)e.depth++,n=n.child}return e},t}(),l=function(){function t(t,e){this.registry=t,this.c=t[e],this.name=e,this.isEngine=this.c.isEngine}return t.prototype.settings=function(){return this.c.settings||{}},t.prototype.superset=function(){return this.c.superset},t.prototype.isMatch=function(t){return this.c.isMatch&&this.c.isMatch(t)||!1},t.prototype.initialize=function(t){this.c.initialize&&this.c.initialize(t)},t.prototype.version=function(t){if(this.c.versionParser){var e=this.c.versionParser(t);if(e){var n=e.major+\".\"+e.minor;return{str:n,num:parseFloat(n),major:parseInt(e.major,10),minor:parseInt(e.minor,10)}}}},t.prototype.getRoot=function(e){if(this.isMatch(e)){var n=this.getSubsetParents(this.name);if(!n.length)return this;for(var i=null,r=null,o=0;o<n.length;o++)if(i=new t(this.registry,n[o]),i.child=this,r=i.getRoot(e))return this.parent=i,r}return null},t.prototype.getSubsetParents=function(t){var e=[],n=null;for(var i in this.registry)(n=this.registry[i]).subsets&&n.subsets.indexOf(t)>-1&&e.push(i);return e},t}()},function(t,e,n){\"use strict\";function i(t){var e=\"function\"==typeof Symbol&&t[Symbol.iterator],n=0;return e?e.call(t):{next:function(){return t&&n>=t.length&&(t=void 0),{value:t&&t[n++],done:!t}}}}function r(t,e){var n=\"function\"==typeof Symbol&&t[Symbol.iterator];if(!n)return t;var i,r,o=n.call(t),s=[];try{for(;(void 0===e||e-- >0)&&!(i=o.next()).done;)s.push(i.value)}catch(t){r={error:t}}finally{try{i&&!i.done&&(n=o.return)&&n.call(o)}finally{if(r)throw r.error}}return s}function o(t){return this instanceof o?(this.v=t,this):new o(t)}Object.defineProperty(e,\"__esModule\",{value:!0}),e.__extends=function(t,e){function n(){this.constructor=t}s(t,e),t.prototype=null===e?Object.create(e):(n.prototype=e.prototype,new n)},n.d(e,\"__assign\",function(){return a}),e.__rest=function(t,e){var n={};for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&e.indexOf(i)<0&&(n[i]=t[i]);if(null!=t&&\"function\"==typeof Object.getOwnPropertySymbols)for(var r=0,i=Object.getOwnPropertySymbols(t);r<i.length;r++)e.indexOf(i[r])<0&&(n[i[r]]=t[i[r]]);return n},e.__decorate=function(t,e,n,i){var r,o=arguments.length,s=o<3?e:null===i?i=Object.getOwnPropertyDescriptor(e,n):i;if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.decorate)s=Reflect.decorate(t,e,n,i);else for(var a=t.length-1;a>=0;a--)(r=t[a])&&(s=(o<3?r(s):o>3?r(e,n,s):r(e,n))||s);return o>3&&s&&Object.defineProperty(e,n,s),s},e.__param=function(t,e){return function(n,i){e(n,i,t)}},e.__metadata=function(t,e){if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.metadata)return Reflect.metadata(t,e)},e.__awaiter=function(t,e,n,i){return new(n||(n=Promise))(function(r,o){function s(t){t.done?r(t.value):new n(function(e){e(t.value)}).then(function(t){try{s(i.next(t))}catch(t){o(t)}},function(t){try{s(i.throw(t))}catch(t){o(t)}})}s((i=i.apply(t,e||[])).next())})},e.__generator=function(t,e){function n(n){return function(s){return function(n){if(i)throw new TypeError(\"Generator is already executing.\");for(;a;)try{if(i=1,r&&(o=r[2&n[0]?\"return\":n[0]?\"throw\":\"next\"])&&!(o=o.call(r,n[1])).done)return o;switch(r=0,o&&(n=[0,o.value]),n[0]){case 0:case 1:o=n;break;case 4:return a.label++,{value:n[1],done:!1};case 5:a.label++,r=n[1],n=[0];continue;case 7:n=a.ops.pop(),a.trys.pop();continue;default:if(o=a.trys,!(o=o.length>0&&o[o.length-1])&&(6===n[0]||2===n[0])){a=0;continue}if(3===n[0]&&(!o||n[1]>o[0]&&n[1]<o[3])){a.label=n[1];break}if(6===n[0]&&a.label<o[1]){a.label=o[1],o=n;break}if(o&&a.label<o[2]){a.label=o[2],a.ops.push(n);break}o[2]&&a.ops.pop(),a.trys.pop();continue}n=e.call(t,a)}catch(t){n=[6,t],r=0}finally{i=o=0}if(5&n[0])throw n[1];return{value:n[0]?n[1]:void 0,done:!0}}([n,s])}}var i,r,o,s,a={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return s={next:n(0),throw:n(1),return:n(2)},\"function\"==typeof Symbol&&(s[Symbol.iterator]=function(){return this}),s},e.__exportStar=function(t,e){for(var n in t)e.hasOwnProperty(n)||(e[n]=t[n])},e.__values=i,e.__read=r,e.__spread=function(){for(var t=[],e=0;e<arguments.length;e++)t=t.concat(r(arguments[e]));return t},e.__await=o,e.__asyncGenerator=function(t,e,n){function i(t){l[t]&&(a[t]=function(e){return new Promise(function(n,i){u.push([t,e,n,i])>1||r(t,e)})})}function r(t,e){try{!function(t){t.value instanceof o?Promise.resolve(t.value.v).then(function(t){r(\"next\",t)},function(t){r(\"throw\",t)}):s(u[0][2],t)}(l[t](e))}catch(t){s(u[0][3],t)}}function s(t,e){t(e),u.shift(),u.length&&r(u[0][0],u[0][1])}if(!Symbol.asyncIterator)throw new TypeError(\"Symbol.asyncIterator is not defined.\");var a,l=n.apply(t,e||[]),u=[];return a={},i(\"next\"),i(\"throw\"),i(\"return\"),a[Symbol.asyncIterator]=function(){return this},a},e.__asyncDelegator=function(t){function e(e,r){t[e]&&(n[e]=function(n){return(i=!i)?{value:o(t[e](n)),done:\"return\"===e}:r?r(n):n})}var n,i;return n={},e(\"next\"),e(\"throw\",function(t){throw t}),e(\"return\"),n[Symbol.iterator]=function(){return this},n},e.__asyncValues=function(t){if(!Symbol.asyncIterator)throw new TypeError(\"Symbol.asyncIterator is not defined.\");var e=t[Symbol.asyncIterator];return e?e.call(t):\"function\"==typeof i?i(t):t[Symbol.iterator]()},e.__makeTemplateObject=function(t,e){return Object.defineProperty?Object.defineProperty(t,\"raw\",{value:e}):t.raw=e,t};var s=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n])},a=Object.assign||function(t){for(var e,n=1,i=arguments.length;n<i;n++){e=arguments[n];for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])}return t}},function(t,e,n){\"use strict\";n.d(e,\"a\",function(){return a}),e.b=function(t){return!!(t&&t._didLoad&&t._willUnload)};var i=n(0),r=n(18),o=n(50),s=n(33),a=function(){function t(t,e,n){void 0===n&&(n=l),this.component=t,this._isHidden=!1,this._state=o.h,this.willEnter=new i.l,this.didEnter=new i.l,this.willLeave=new i.l,this.didLeave=new i.l,this.willUnload=new i.l,this.readReady=new i.l,this.writeReady=new i.l,this.isOverlay=!1,this._emitter=new i.l,this.data=e instanceof s.a?e.data:Object(r.l)(e)?e:{},this._cssClass=n,this._ts=Date.now(),window.addEventListener(\"orientationchange\",this.handleOrientationChange.bind(this))}return t.prototype.handleOrientationChange=function(){this.getContent()&&this.getContent().resize()},t.prototype.init=function(t){this._ts=Date.now(),this._cmp=t,this.instance=this.instance||t.instance,this._detached=!1},t.prototype._setNav=function(t){this._nav=t},t.prototype._setInstance=function(t){this.instance=t},t.prototype.subscribe=function(t){return this._emitter.subscribe(t)},t.prototype.emit=function(t){this._emitter.emit(t)},t.prototype.onDidDismiss=function(t){this._onDidDismiss=t},t.prototype.onWillDismiss=function(t){this._onWillDismiss=t},t.prototype.dismiss=function(t,e,n){if(void 0===n&&(n={}),!this._nav)return Promise.resolve(!1);this.isOverlay&&!n.minClickBlockDuration&&(n.minClickBlockDuration=400),this._dismissData=t,this._dismissRole=e;var i=Object.assign({},this._leavingOpts,n);return this._nav.removeView(this,i).then(function(){return t})},t.prototype.getNav=function(){return this._nav},t.prototype.getTransitionName=function(t){return this._nav&&this._nav.config.get(\"pageTransition\")},t.prototype.getNavParams=function(){return new s.a(this.data)},t.prototype.setLeavingOpts=function(t){this._leavingOpts=t},t.prototype.enableBack=function(){if(!this._nav)return!1;return!!this._nav.getPrevious(this)},Object.defineProperty(t.prototype,\"name\",{get:function(){return this.component?this.component.name:\"\"},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,\"index\",{get:function(){return this._nav?this._nav.indexOf(this):-1},enumerable:!0,configurable:!0}),t.prototype.isFirst=function(){return!!this._nav&&this._nav.first()===this},t.prototype.isLast=function(){return!!this._nav&&this._nav.last()===this},t.prototype._domShow=function(t,e){if(this._cmp&&t===this._isHidden){this._isHidden=!t;var n=t?null:\"\";e.setElementAttribute(this.pageRef().nativeElement,\"hidden\",n)}},t.prototype.getZIndex=function(){return this._zIndex},t.prototype._setZIndex=function(t,e){if(t!==this._zIndex){this._zIndex=t;var n=this.pageRef();n&&e.setElementStyle(n.nativeElement,\"z-index\",t)}},t.prototype.pageRef=function(){return this._cmp&&this._cmp.location},t.prototype._setContent=function(t){this._cntDir=t},t.prototype.getContent=function(){return this._cntDir},t.prototype._setContentRef=function(t){this._cntRef=t},t.prototype.contentRef=function(){return this._cntRef},t.prototype._setIONContent=function(t){this._setContent(t),this._ionCntDir=t},t.prototype.getIONContent=function(){return this._ionCntDir},t.prototype._setIONContentRef=function(t){this._setContentRef(t),this._ionCntRef=t},t.prototype.getIONContentRef=function(){return this._ionCntRef},t.prototype._setHeader=function(t){this._hdrDir=t},t.prototype.getHeader=function(){return this._hdrDir},t.prototype._setFooter=function(t){this._ftrDir=t},t.prototype.getFooter=function(){return this._ftrDir},t.prototype._setNavbar=function(t){this._nb=t},t.prototype.getNavbar=function(){return this._nb},t.prototype.hasNavbar=function(){return!!this._nb},t.prototype.setBackButtonText=function(t){this._nb&&this._nb.setBackButtonText(t)},t.prototype.showBackButton=function(t){this._nb&&(this._nb.hideBackButton=!t)},t.prototype._preLoad=function(){this._lifecycle(\"PreLoad\")},t.prototype._willLoad=function(){this._lifecycle(\"WillLoad\")},t.prototype._didLoad=function(){this._lifecycle(\"DidLoad\")},t.prototype._willEnter=function(){this.handleOrientationChange(),this._detached&&this._cmp&&(this._cmp.changeDetectorRef.reattach(),this._detached=!1),this.willEnter.emit(null),this._lifecycle(\"WillEnter\")},t.prototype._didEnter=function(){this._nb&&this._nb.didEnter(),this.didEnter.emit(null),this._lifecycle(\"DidEnter\")},t.prototype._willLeave=function(t){this.willLeave.emit(null),this._lifecycle(\"WillLeave\"),t&&this._onWillDismiss&&(this._onWillDismiss(this._dismissData,this._dismissRole),this._onWillDismiss=null)},t.prototype._didLeave=function(){this.didLeave.emit(null),this._lifecycle(\"DidLeave\"),!this._detached&&this._cmp&&(this._cmp.changeDetectorRef.detach(),this._detached=!0)},t.prototype._willUnload=function(){this.willUnload.emit(null),this._lifecycle(\"WillUnload\"),this._onDidDismiss&&this._onDidDismiss(this._dismissData,this._dismissRole),this._onDidDismiss=null,this._dismissData=null,this._dismissRole=null},t.prototype._destroy=function(t){if(this._cmp){if(t){var e=this._cmp.location.nativeElement;t.setElementAttribute(e,\"class\",null),t.setElementAttribute(e,\"style\",null)}window.removeEventListener(\"orientationchange\",this.handleOrientationChange.bind(this)),this._cmp.destroy()}this._nav=this._cmp=this.instance=this._cntDir=this._cntRef=this._leavingOpts=this._hdrDir=this._ftrDir=this._nb=this._onDidDismiss=this._onWillDismiss=null,this._state=o.f},t.prototype._lifecycleTest=function(t){var e=this.instance,n=\"ionViewCan\"+t;if(e&&e[n])try{var i=e[n]();return i instanceof Promise?i:Promise.resolve(!1!==i)}catch(t){return Promise.reject(this.name+\" \"+n+\" error: \"+t.message)}return Promise.resolve(!0)},t.prototype._lifecycle=function(t){var e=this.instance,n=\"ionView\"+t;e&&e[n]&&e[n]()},t}(),l=\"ion-page\"},function(t,e,n){\"use strict\";function i(t,e){if(t.id===e||t.name===e)return t;for(var n=0,r=t.getAllChildNavs();n<r.length;n++){var o=i(r[n],e);if(o)return o}return null}function r(t){if(!t)return null;if(Object(u.m)(t))return r(t.parent);var e=t.length();return e>1||t._isPortal&&e>0?t:r(t.parent)}function o(t){var e=[],n=t.getActiveChildNavs();return n&&n.length?n.forEach(function(t){var n=o(t);e=e.concat(n)}):e.push(t),e}var s=n(0),a=n(57),l=n(76),u=(n(1),n(50)),c=(n(43),n(2),n(36)),p=n(18),h=n(67),f=this&&this.__extends||function(){var t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n])};return function(e,n){function i(){this.constructor=e}t(e,n),e.prototype=null===n?Object.create(n):(i.prototype=n.prototype,new i)}}(),d=\"opacity\",_=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return f(e,t),e.prototype.init=function(){t.prototype.init.call(this);var e=this.plt,n=e.isRTL?\"-99.5%\":\"99.5%\",i=e.isRTL?\"33%\":\"-33%\",r=this.enteringView,o=this.leavingView,s=this.opts;this.duration(Object(p.l)(s.duration)?s.duration:500),this.easing(Object(p.l)(s.easing)?s.easing:\"cubic-bezier(0.36,0.66,0.04,1)\");var a=\"back\"===s.direction,l=r&&r.hasNavbar(),u=o&&o.hasNavbar();if(r){var h=r.pageRef().nativeElement,f=new c.a(e,r.contentRef());if(f.element(h.querySelectorAll(\"ion-header > *:not(ion-navbar),ion-footer > *\")),this.add(f),a?f.fromTo(\"translateX\",i,\"0%\",!0).fromTo(d,.8,1,!0):f.beforeClearStyles([d]).fromTo(\"translateX\",n,\"0%\",!0),l){var _=h.querySelector(\"ion-navbar\"),v=new c.a(e,_);this.add(v);var y=new c.a(e,_.querySelector(\"ion-title\")),m=new c.a(e,_.querySelectorAll(\"ion-buttons,[menuToggle]\")),g=new c.a(e,_.querySelector(\".toolbar-background\")),b=new c.a(e,_.querySelector(\".back-button\"));if(v.add(y).add(m).add(g).add(b),y.fromTo(d,.01,1,!0),m.fromTo(d,.01,1,!0),a)y.fromTo(\"translateX\",i,\"0%\",!0),r.enableBack()&&b.beforeAddClass(\"show-back-button\").fromTo(d,.01,1,!0);else if(y.fromTo(\"translateX\",n,\"0%\",!0),g.beforeClearStyles([d]).fromTo(\"translateX\",n,\"0%\",!0),r.enableBack()){b.beforeAddClass(\"show-back-button\").fromTo(d,.01,1,!0);var w=new c.a(e,_.querySelector(\".back-button-text\"));w.fromTo(\"translateX\",e.isRTL?\"-100px\":\"100px\",\"0px\"),v.add(w)}else b.beforeRemoveClass(\"show-back-button\")}}if(o&&o.pageRef()){var C=o.pageRef().nativeElement,O=new c.a(e,o.contentRef());if(O.element(C.querySelectorAll(\"ion-header > *:not(ion-navbar),ion-footer > *\")),this.add(O),a?O.beforeClearStyles([d]).fromTo(\"translateX\",\"0%\",e.isRTL?\"-100%\":\"100%\"):O.fromTo(\"translateX\",\"0%\",i).fromTo(d,1,.8).afterClearStyles([\"transform\",d]),u){var S=C.querySelector(\"ion-navbar\"),E=new c.a(e,S),x=new c.a(e,S.querySelector(\"ion-title\")),T=new c.a(e,S.querySelectorAll(\"ion-buttons,[menuToggle]\")),k=new c.a(e,S.querySelector(\".toolbar-background\")),P=new c.a(e,S.querySelector(\".back-button\"));if(E.add(x).add(T).add(P).add(k),this.add(E),P.fromTo(d,.99,0),x.fromTo(d,.99,0),T.fromTo(d,.99,0),a){x.fromTo(\"translateX\",\"0%\",e.isRTL?\"-100%\":\"100%\"),k.beforeClearStyles([d]).fromTo(\"translateX\",\"0%\",e.isRTL?\"-100%\":\"100%\");var A=new c.a(e,S.querySelector(\".back-button-text\"));A.fromTo(\"translateX\",\"0%\",(e.isRTL?-300:300)+\"px\"),E.add(A)}else x.fromTo(\"translateX\",\"0%\",i).afterClearStyles([\"transform\"]),P.afterClearStyles([d]),x.afterClearStyles([d]),T.afterClearStyles([d])}}},e}(h.a),v=this&&this.__extends||function(){var t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n])};return function(e,n){function i(){this.constructor=e}t(e,n),e.prototype=null===n?Object.create(n):(i.prototype=n.prototype,new i)}}(),y=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return v(e,t),e.prototype.init=function(){t.prototype.init.call(this);var e=this.plt,n=this.enteringView,i=this.leavingView,r=this.opts,o=\"back\"===r.direction;if(n&&(o?this.duration(Object(p.l)(r.duration)?r.duration:200).easing(\"cubic-bezier(0.47,0,0.745,0.715)\"):(this.duration(Object(p.l)(r.duration)?r.duration:280).easing(\"cubic-bezier(0.36,0.66,0.04,1)\"),this.enteringPage.fromTo(\"translateY\",\"40px\",\"0px\",!0).fromTo(\"opacity\",.01,1,!0)),n.hasNavbar())){var s=n.pageRef().nativeElement.querySelector(\"ion-navbar\"),a=new c.a(e,s);this.add(a);var l=new c.a(e,s.querySelector(\".back-button\"));this.add(l),n.enableBack()?l.beforeAddClass(\"show-back-button\"):l.beforeRemoveClass(\"show-back-button\")}if(i&&o){this.duration(r.duration||200).easing(\"cubic-bezier(0.47,0,0.745,0.715)\");var u=new c.a(e,i.pageRef());this.add(u.fromTo(\"translateY\",\"0px\",\"40px\").fromTo(\"opacity\",1,0))}},e}(h.a),m=this&&this.__extends||function(){var t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n])};return function(e,n){function i(){this.constructor=e}t(e,n),e.prototype=null===n?Object.create(n):(i.prototype=n.prototype,new i)}}(),g=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return m(e,t),e.prototype.init=function(){t.prototype.init.call(this);var e=this.plt,n=this.enteringView,i=this.leavingView,r=this.opts,o=\"back\"===r.direction;if(n&&(o?(this.duration(Object(p.l)(r.duration)?r.duration:120).easing(\"cubic-bezier(0.47,0,0.745,0.715)\"),this.enteringPage.beforeClearStyles([\"scale\"])):(this.duration(Object(p.l)(r.duration)?r.duration:280).easing(\"cubic-bezier(0,0,0.05,1)\"),this.enteringPage.fromTo(\"scale\",.95,1,!0).fromTo(\"opacity\",.01,1,!0)),n.hasNavbar())){var s=n.pageRef().nativeElement.querySelector(\"ion-navbar\"),a=new c.a(e,s);this.add(a);var l=new c.a(e,s.querySelector(\".back-button\"));this.add(l),n.enableBack()?l.beforeAddClass(\"show-back-button\"):l.beforeRemoveClass(\"show-back-button\")}if(i&&o){this.duration(r.duration||200).easing(\"cubic-bezier(0.47,0,0.745,0.715)\");var u=new c.a(e,i.pageRef());this.add(u.fromTo(\"scale\",1,.95).fromTo(\"opacity\",.99,0))}},e}(h.a);n.d(e,\"a\",function(){return b});var b=function(){function t(t,e,n){this._config=t,this._plt=e,this._menuCtrl=n,this._disTime=0,this._scrollTime=0,this._title=\"\",this._titleSrv=new a.i(a.b),this._rootNavs=new Map,this._didScroll=!1,this.viewDidLoad=new s.l,this.viewWillEnter=new s.l,this.viewDidEnter=new s.l,this.viewWillLeave=new s.l,this.viewDidLeave=new s.l,this.viewWillUnload=new s.l,e.registerBackButtonAction(this.goBack.bind(this)),this._disableScrollAssist=t.getBoolean(\"disableScrollAssist\",!1);t.getBoolean(\"inputBlurring\",!1)&&this._enableInputBlurring(),t.setTransition(\"ios-transition\",_),t.setTransition(\"md-transition\",y),t.setTransition(\"wp-transition\",g)}return t.prototype.setTitle=function(t){t!==this._title&&(this._title=t,this._titleSrv.setTitle(t))},t.prototype.setElementClass=function(t,e){this._appRoot.setElementClass(t,e)},t.prototype.setEnabled=function(t,e,n){void 0===e&&(e=700),void 0===n&&(n=0),this._disTime=t?0:Date.now()+e,this._clickBlock&&(t?this._clickBlock.activate(!1,O,n):this._clickBlock.activate(!0,e+O,n))},t.prototype._setDisableScroll=function(t){this._disableScrollAssist&&this._appRoot._disableScroll(t)},t.prototype.isEnabled=function(){var t=this._disTime;return 0===t||t<Date.now()},t.prototype.setScrolling=function(){this._scrollTime=Date.now()+C,this._didScroll=!0},t.prototype.isScrolling=function(){var t=this._scrollTime;return 0!==t&&(!(t<Date.now())||(this._scrollTime=0,!1))},t.prototype.getActiveNav=function(){console.warn(\"(getActiveNav) is deprecated and will be removed in the next major release. Use getActiveNavs instead.\");var t=this.getActiveNavs();return t&&t.length?t[0]:null},t.prototype.getActiveNavs=function(t){var e=this._appRoot._getPortal(l.c);if(e.length()>0)return o(e);if(!this._rootNavs||!this._rootNavs.size)return[];if(1===this._rootNavs.size)return o(this._rootNavs.values().next().value);if(t)return o(this._rootNavs.get(t));var n=[];return this._rootNavs.forEach(function(t){var e=o(t);n=n.concat(e)}),n},t.prototype.getRootNav=function(){console.warn(\"(getRootNav) is deprecated and will be removed in the next major release. Use getRootNavById instead.\");var t=this.getRootNavs();return 0===t.length?null:(t.length>1&&console.warn(\"(getRootNav) there are multiple root navs, use getRootNavs instead\"),t[0])},t.prototype.getRootNavs=function(){var t=[];return this._rootNavs.forEach(function(e){return t.push(e)}),t},t.prototype.getRootNavById=function(t){return this._rootNavs.get(t)},t.prototype.registerRootNav=function(t){this._rootNavs.set(t.id,t)},t.prototype.unregisterRootNav=function(t){this._rootNavs.delete(t.id)},t.prototype.getActiveNavContainers=function(){var t=[];return this._rootNavs.forEach(function(e){t=t.concat(o(e))}),t},t.prototype.present=function(t,e,n){var i=this._appRoot._getPortal(n);return t._setNav(i),e.direction=u.b,e.animation||(e.animation=t.getTransitionName(u.b)),t.setLeavingOpts({keyboardClose:e.keyboardClose,direction:u.a,animation:t.getTransitionName(u.a),ev:e.ev}),i.insertPages(-1,[t],e)},t.prototype.goBack=function(){if(this._menuCtrl&&this._menuCtrl.isOpen())return this._menuCtrl.close();var t=this.navPop();return t||this._config.getBoolean(\"navExitApp\",!0)&&this._plt.exitApp(),t},t.prototype.navPop=function(){var t=this;if(!this._rootNavs||0===this._rootNavs.size||!this.isEnabled())return Promise.resolve();if(this._appRoot._getPortal(l.a).length()>0)return Promise.resolve();var e=null,n=null;return this._rootNavs.forEach(function(i){t.getActiveNavs(i.id).map(function(t){return r(t)}).filter(function(t){return!!t}).forEach(function(t){var i=t.last();(t._isPortal||i&&t.length()>1&&(!n||i._ts>=n._ts))&&(n=i,e=t)})}),e?e.pop():void 0},t.prototype._enableInputBlurring=function(){var t=!0,e=this,n=this._plt;n.registerListener(n.doc(),\"focusin\",function(){t=!0},{capture:!0,zone:!1,passive:!0}),n.registerListener(n.doc(),\"touchend\",function(i){if(e._didScroll)e._didScroll=!1;else{var r=e._plt.getActiveElement();if(r&&-1!==w.indexOf(r.tagName)){var o=i.target;o!==r&&(w.indexOf(o.tagName)>=0||o.classList.contains(\"input-cover\")||(t=!1,n.timeout(function(){t||r.blur()},50)))}}},{capture:!1,zone:!1,passive:!0})},t.prototype.getNavByIdOrName=function(t){for(var e=0,n=Array.from(this._rootNavs.values());e<n.length;e++){var r=i(n[e],t);if(r)return r}return null},t}(),w=[\"INPUT\",\"TEXTAREA\",\"ION-INPUT\",\"ION-TEXTAREA\"],C=100,O=64},function(t,e,n){\"use strict\";n.d(e,\"a\",function(){return o});n(2);var i=n(18),r=function(){function t(t){this.dom=t,this.writeTask=null,this.readTask=null}return t.prototype.read=function(t){var e=this;if(!this.readTask)return this.readTask=this.dom.read(function(n){e.readTask=null,t(n)})},t.prototype.write=function(t){var e=this;if(!this.writeTask)return this.writeTask=this.dom.write(function(n){e.writeTask=null,t(n)})},t.prototype.cancel=function(){var t=this.writeTask;t&&this.dom.cancel(t);var e=this.readTask;e&&this.dom.cancel(e),this.readTask=this.writeTask=null},t}(),o=function(){function t(t){this.plt=t,this.r=[],this.w=[]}return t.prototype.debouncer=function(){return new r(this)},t.prototype.read=function(t,e){var n=this;return e?t.timeoutId=this.plt.timeout(function(){n.r.push(t),n._queue()},e):(this.r.push(t),this._queue()),t},t.prototype.write=function(t,e){var n=this;return e?t.timeoutId=this.plt.timeout(function(){n.w.push(t),n._queue()},e):(this.w.push(t),this._queue()),t},t.prototype.cancel=function(t){t&&(t.timeoutId&&this.plt.cancelTimeout(t.timeoutId),Object(i.q)(this.r,t)||Object(i.q)(this.w,t))},t.prototype._queue=function(){var t=this;t.q||(t.q=!0,t.plt.raf(function(e){t._flush(e)}))},t.prototype._flush=function(t){var e;try{!function(t,e,n){for(var i;i=e.shift();)i(t);for(;i=n.shift();)i(t)}(t,this.r,this.w)}catch(t){e=t}if(this.q=!1,(this.r.length||this.w.length)&&this._queue(),e)throw e},t}()},function(t,e,n){\"use strict\";n.d(e,\"a\",function(){return i});var i=function(){return function(){}}()},function(t,e,n){\"use strict\";function i(t,e){return t.top<e.top?-1:t.top>e.top?1:0}function r(t){return t.indexOf(\"px\")>0?parseInt(t,10):0}function o(t){return t>0?t+\"px\":\"\"}n.d(e,\"a\",function(){return f});var s=n(0),a=(n(1),n(6),n(29)),l=n(50),u=n(18),c=(n(9),n(7),n(2),n(169)),p=(n(4),this&&this.__extends||function(){var t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n])};return function(e,n){function i(){this.constructor=e}t(e,n),e.prototype=null===n?Object.create(n):(i.prototype=n.prototype,new i)}}()),h=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return p(e,t),e.prototype.subscribe=function(e,n,i){return this.onSubscribe(),t.prototype.subscribe.call(this,e,n,i)},e}(s.l),f=function(t){function e(e,n,i,r,o,s,a,u,p,f){var d=t.call(this,e,r,o,\"content\")||this;d._plt=n,d._dom=i,d._app=s,d._keyboard=a,d._zone=u,d._scrollPadding=0,d._inputPolling=!1,d._hasRefresher=!1,d._imgs=[],d._scrollDownOnLoad=!1,d.ionScrollStart=new h,d.ionScroll=new h,d.ionScrollEnd=new h;var _=function(){return d._scroll.enableEvents()};for(d.ionScroll.onSubscribe=_,d.ionScrollStart.onSubscribe=_,d.ionScrollEnd.onSubscribe=_,d.statusbarPadding=e.getBoolean(\"statusbarPadding\",!1),d._imgReqBfr=e.getNumber(\"imgRequestBuffer\",1400),d._imgRndBfr=e.getNumber(\"imgRenderBuffer\",400),d._imgVelMax=e.getNumber(\"imgVelocityMax\",3),d._scroll=new c.a(s,n,i);f;){if(Object(l.m)(f)){d._tabs=f;break}f=f.parent}return p?(d._viewCtrl=p,p._setIONContent(d),p._setIONContentRef(r),d._viewCtrlReadSub=p.readReady.subscribe(function(){d._viewCtrlReadSub.unsubscribe(),d._readDimensions()}),d._viewCtrlWriteSub=p.writeReady.subscribe(function(){d._viewCtrlWriteSub.unsubscribe(),d._writeDimensions()})):(i.read(d._readDimensions.bind(d)),i.write(d._writeDimensions.bind(d))),d}return p(e,t),Object.defineProperty(e.prototype,\"contentHeight\",{get:function(){return this._scroll.ev.contentHeight},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,\"contentWidth\",{get:function(){return this._scroll.ev.contentWidth},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,\"scrollHeight\",{get:function(){return this._scroll.ev.scrollHeight},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,\"scrollWidth\",{get:function(){return this._scroll.ev.scrollWidth},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,\"scrollTop\",{get:function(){return this._scroll.ev.scrollTop},set:function(t){this._scroll.setTop(t)},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,\"scrollLeft\",{get:function(){return this._scroll.ev.scrollLeft},set:function(t){this._scroll.setLeft(t)},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,\"isScrolling\",{get:function(){return this._scroll.isScrolling},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,\"directionY\",{get:function(){return this._scroll.ev.directionY},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,\"directionX\",{get:function(){return this._scroll.ev.directionX},enumerable:!0,configurable:!0}),e.prototype.ngAfterViewInit=function(){var t=this,e=this._scroll;e.ev.fixedElement=this.getFixedElement(),e.ev.scrollElement=this.getScrollElement(),e.onScrollStart=function(e){t.ionScrollStart.emit(e)},e.onScroll=function(e){t.ionScroll.emit(e),t.imgsUpdate()},e.onScrollEnd=function(e){t.ionScrollEnd.emit(e),t.imgsUpdate()}},e.prototype.enableJsScroll=function(){this._scroll.enableJsScroll(this._cTop,this._cBottom)},e.prototype.ngOnDestroy=function(){this._scLsn&&this._scLsn(),this._viewCtrlReadSub&&this._viewCtrlReadSub.unsubscribe(),this._viewCtrlWriteSub&&this._viewCtrlWriteSub.unsubscribe(),this._viewCtrlReadSub=this._viewCtrlWriteSub=null,this._scroll&&this._scroll.destroy(),this._footerEle=this._scLsn=this._scroll=null},e.prototype.getScrollElement=function(){return this._scrollContent.nativeElement},e.prototype.getFixedElement=function(){return this._fixedContent.nativeElement},e.prototype.onScrollElementTransitionEnd=function(t){this._plt.transitionEnd(this.getScrollElement(),t)},e.prototype.scrollTo=function(t,e,n,i){return void 0===n&&(n=300),this._scroll.scrollTo(t,e,n,i)},e.prototype.scrollToTop=function(t){return void 0===t&&(t=300),this._scroll.scrollToTop(t)},e.prototype.scrollToBottom=function(t){return void 0===t&&(t=300),this._scroll.scrollToBottom(t)},Object.defineProperty(e.prototype,\"fullscreen\",{get:function(){return this._fullscreen},set:function(t){this._fullscreen=Object(u.o)(t)},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,\"scrollDownOnLoad\",{get:function(){return this._scrollDownOnLoad},set:function(t){this._scrollDownOnLoad=Object(u.o)(t)},enumerable:!0,configurable:!0}),e.prototype.addImg=function(t){this._imgs.push(t)},e.prototype.removeImg=function(t){Object(u.q)(this._imgs,t)},e.prototype.setScrollElementStyle=function(t,e){var n=this.getScrollElement();n&&this._dom.write(function(){n.style[t]=e})},e.prototype.getContentDimensions=function(){var t=this.getScrollElement(),e=t.parentElement;return{contentHeight:e.offsetHeight-this._cTop-this._cBottom,contentTop:this._cTop,contentBottom:this._cBottom,contentWidth:e.offsetWidth,contentLeft:e.offsetLeft,scrollHeight:t.scrollHeight,scrollTop:t.scrollTop,scrollWidth:t.scrollWidth,scrollLeft:t.scrollLeft}},e.prototype.addScrollPadding=function(t){if(0===t&&(this._inputPolling=!1,this._scrollPadding=-1),t>this._scrollPadding){this._scrollPadding=t;var e=this.getScrollElement();e&&this._dom.write(function(){e.style.paddingBottom=t>0?t+\"px\":\"\"})}},e.prototype.clearScrollPaddingFocusOut=function(){var t=this;this._inputPolling||(this._inputPolling=!0,this._keyboard.onClose(function(){t.addScrollPadding(0)},200,3e3))},e.prototype.resize=function(){this._dom.read(this._readDimensions.bind(this)),this._dom.write(this._writeDimensions.bind(this))},e.prototype._readDimensions=function(){var t,e=this._pTop,n=this._pRight,i=this._pBottom,o=this._pLeft,s=this._hdrHeight,a=this._ftrHeight,l=this._tabsPlacement,u=0;if(this._pTop=0,this._pRight=0,this._pBottom=0,this._pLeft=0,this._hdrHeight=0,this._ftrHeight=0,this._tabsPlacement=null,this._tTop=0,this._fTop=0,this._fBottom=0,this._scroll){t=this._scroll.ev;var c=this.getNativeElement();if(c){for(var p,h,f=c.parentElement,d=f.children,_=d.length-1;_>=0;_--)\"ION-CONTENT\"===(h=(c=d[_]).tagName)?(t.contentElement=c,this._fullscreen&&(p=getComputedStyle(c),this._pTop=r(p.paddingTop),this._pBottom=r(p.paddingBottom),this._pRight=r(p.paddingRight),this._pLeft=r(p.paddingLeft))):\"ION-HEADER\"===h?(t.headerElement=c,this._hdrHeight=c.clientHeight):\"ION-FOOTER\"===h&&(t.footerElement=c,this._ftrHeight=c.clientHeight,this._footerEle=c);c=f;for(;c&&\"ION-MODAL\"!==c.tagName&&!c.classList.contains(\"tab-subpage\");)\"ION-TABS\"===c.tagName&&(this._tabbarHeight=c.firstElementChild.clientHeight,null===this._tabsPlacement&&(this._tabsPlacement=c.getAttribute(\"tabsplacement\"))),c=c.parentElement;this._tabs&&\"top\"===this._tabsPlacement&&(this._tTop=this._hdrHeight,u=this._tabs._top),this._cTop=this._hdrHeight,this._cBottom=this._ftrHeight,\"top\"===this._tabsPlacement?this._cTop+=this._tabbarHeight:\"bottom\"===this._tabsPlacement&&(this._cBottom+=this._tabbarHeight),this._hasRefresher&&(this._cTop-=1),this._fTop=this._cTop,this._fBottom=this._cBottom,this._fullscreen&&(this._cTop+=this._pTop,this._cBottom+=this._pBottom);var v=this.getContentDimensions();t.scrollHeight=v.scrollHeight,t.scrollWidth=v.scrollWidth,t.contentHeight=v.contentHeight,t.contentWidth=v.contentWidth,t.contentTop=v.contentTop,t.contentBottom=v.contentBottom,this._dirty=e!==this._pTop||i!==this._pBottom||o!==this._pLeft||n!==this._pRight||s!==this._hdrHeight||a!==this._ftrHeight||l!==this._tabsPlacement||u!==this._tTop||this._cTop!==this.contentTop||this._cBottom!==this.contentBottom,this._scroll.init(this.getScrollElement(),this._cTop,this._cBottom),this.imgsUpdate()}}},e.prototype._writeDimensions=function(){if(this._dirty){var t=this.getScrollElement();if(t){var e=this.getFixedElement();if(e){if(\"bottom\"===this._tabsPlacement&&this._cBottom>0&&this._footerEle){this._footerEle.style.bottom=o(this._cBottom-this._ftrHeight)}var n=\"marginTop\",i=\"marginBottom\",r=this._fTop,s=this._fBottom;this._fullscreen&&(n=\"paddingTop\",i=\"paddingBottom\"),this._cTop!==this.contentTop&&(t.style[n]=o(this._cTop),e.style.marginTop=o(r),this.contentTop=this._cTop),this._cBottom!==this.contentBottom&&(t.style[i]=o(this._cBottom),e.style.marginBottom=o(s),this.contentBottom=this._cBottom),null!==this._tabsPlacement&&this._tabs&&(\"top\"===this._tabsPlacement?this._tabs.setTabbarPosition(this._tTop,-1):this._tabs.setTabbarPosition(-1,0)),this._scrollDownOnLoad&&(this.scrollToBottom(0),this._scrollDownOnLoad=!1)}}}},e.prototype.imgsUpdate=function(){this._scroll.initialized&&this._imgs.length&&this.isImgsUpdatable()&&function(t,e,n,r,o,s){for(var a,l=e+n,u=[],c=[],p=0,h=t.length;p<h;p++){if(a=t[p],\"up\"===r){if(a.top<l&&a.bottom>e-s){a.canRequest=a.canRender=!0,u.push(a);continue}if(a.bottom<=e&&a.bottom>e-o){a.canRequest=!0,a.canRender=!1,c.push(a);continue}if(a.top>=l&&a.top<l+s){a.canRequest=a.canRender=!1;continue}}else{if(a.bottom>e&&a.top<l+s){a.canRequest=a.canRender=!0,u.push(a);continue}if(a.top>=l&&a.top<l+o){a.canRequest=!0,a.canRender=!1,c.push(a);continue}if(a.bottom<=e&&a.bottom>e-s){a.canRequest=a.canRender=!1;continue}}a.canRequest=a.canRender=!1,a.reset()}u.sort(i).forEach(function(t){return t.update()}),\"up\"===r?c.sort(i).reverse().forEach(function(t){return t.update()}):c.sort(i).forEach(function(t){return t.update()})}(this._imgs,this.scrollTop,this.contentHeight,this.directionY,this._imgReqBfr,this._imgRndBfr)},e.prototype.isImgsUpdatable=function(){return Math.abs(this._scroll.ev.velocityY)<this._imgVelMax},e}(a.a)},function(t,e,n){\"use strict\";n.d(e,\"a\",function(){return s});var i=n(0),r=(n(1),n(6),n(35)),o=n(47),s=(n(2),function(){function t(t,e,n,r){this._plt=e,this._zone=n,this._dom=r,this.willShow=new i.l,this.willHide=new i.l,this.didShow=new i.l,this.didHide=new i.l,this.eventsAvailable=!1,this.focusOutline(t.get(\"focusOutline\"));var o=e.win();o.Ionic&&o.Ionic.keyboardPlugin?this.listenV2(o):this.listenV1(o)}return t.prototype.listenV2=function(t){var e=this,n=this._plt;n.registerListener(t,\"keyboardWillShow\",function(t){e._zone.run(function(){e.willShow.emit(t.keyboardHeight)})},{zone:!1,passive:!0}),n.registerListener(t,\"keyboardWillHide\",function(){e._zone.run(function(){e.willHide.emit()})},{zone:!1,passive:!0}),n.registerListener(t,\"keyboardDidShow\",function(t){e._zone.run(function(){e.didShow.emit(t.keyboardHeight)})},{zone:!1,passive:!0}),n.registerListener(t,\"keyboardDidHide\",function(){e._zone.run(function(){e.didHide.emit()})},{zone:!1,passive:!0}),this.eventsAvailable=!0},t.prototype.listenV1=function(t){var e=this,n=this._plt;n.registerListener(t,\"native.keyboardhide\",function(){e.blurActiveInput(!0)},{zone:!1,passive:!0}),n.registerListener(t,\"native.keyboardshow\",function(){e.blurActiveInput(!1)},{zone:!1,passive:!0})},t.prototype.blurActiveInput=function(t){var e=this,n=this._plt;n.cancelTimeout(this._tmr),t&&(this._tmr=n.timeout(function(){e.isOpen()&&n.focusOutActiveElement()},80))},t.prototype.isOpen=function(){return this.hasFocusedTextInput()},t.prototype.onClose=function(t,e,n){function i(){!r.isOpen()||o>n?r._plt.timeout(function(){r._zone.run(function(){t()})},400):r._plt.timeout(i,e),o++}void 0===e&&(e=a),void 0===n&&(n=l);var r=this,o=0,s=null;return t||(s=new Promise(function(e){t=e})),r._plt.timeout(i,e),s},t.prototype.close=function(){var t=this;this._dom.read(function(){t.isOpen()&&t._dom.write(function(){t._plt.focusOutActiveElement()})})},t.prototype.focusOutline=function(t){function e(){a._dom.write(function(){l.doc().body.classList[c?\"add\":\"remove\"](\"focus-outline\")})}function n(){c=!1,i()}function i(){e(),r&&r(),s&&s(),c&&(r=l.registerListener(u,\"mousedown\",n,p),s=l.registerListener(u,\"touchstart\",n,p))}var r,s,a=this,l=a._plt,u=l.doc(),c=!1,p={passive:!0,zone:!1};if(!0===t)return c=!0,e();!1!==t&&l.registerListener(l.doc(),\"keydown\",function(t){c||t.keyCode!==o.g||(c=!0,i())},p)},t.prototype.hasFocusedTextInput=function(){var t=this._plt.getActiveElement();return!!Object(r.e)(t)&&t.parentElement.querySelector(\":focus\")===t},t.prototype.hideFormAccessoryBar=function(t){var e=this._plt.win();e&&e.Keyboard&&e.Keyboard.hideFormAccessoryBar&&e.Keyboard.hideFormAccessoryBar(t)},t}()),a=150,l=100},function(t,e,n){\"use strict\";n.d(e,\"a\",function(){return s});n(1);var i=n(18),r=(n(7),n(177)),o=(n(4),this&&this.__extends||function(){var t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n])};return function(e,n){function i(){this.constructor=e}t(e,n),e.prototype=null===n?Object.create(n):(i.prototype=n.prototype,new i)}}()),s=function(t){function e(e,n,i,r,o,s){var a=t.call(this,r,o,s)||this;return a._app=e,a.navCtrl=i,a._hidden=!1,a._hideBb=!1,n&&n._setNavbar(a),a._bbIcon=r.get(\"backButtonIcon\"),a._sbPadding=r.getBoolean(\"statusbarPadding\"),a._backText=r.get(\"backButtonText\",\"Back\"),a}return o(e,t),Object.defineProperty(e.prototype,\"hideBackButton\",{get:function(){return this._hideBb},set:function(t){this._hideBb=Object(i.o)(t)},enumerable:!0,configurable:!0}),e.prototype.backButtonClick=function(t){t.preventDefault(),t.stopPropagation(),this.navCtrl&&this.navCtrl.pop(null,null)},e.prototype.setBackButtonText=function(t){this._backText=t},e.prototype.didEnter=function(){try{this._app.setTitle(this.getTitleText())}catch(t){console.error(t)}},e.prototype.setHidden=function(t){this._hidden=t},e}(r.a)},function(t,e,n){\"use strict\";n.d(e,\"a\",function(){return o});n(1);var i=n(177),r=this&&this.__extends||function(){var t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n])};return function(e,n){function i(){this.constructor=e}t(e,n),e.prototype=null===n?Object.create(n):(i.prototype=n.prototype,new i)}}(),o=function(t){function e(e,n,i){var r=t.call(this,e,n,i)||this;return r._sbPadding=e.getBoolean(\"statusbarPadding\"),r}return r(e,t),e}(i.a)},function(t,e,n){\"use strict\";n.d(e,\"a\",function(){return o});n(1);var i=n(29),r=(n(4),this&&this.__extends||function(){var t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n])};return function(e,n){function i(){this.constructor=e}t(e,n),e.prototype=null===n?Object.create(n):(i.prototype=n.prototype,new i)}}()),o=function(t){function e(e,n,i,r){var o=t.call(this,e,n,i,\"header\")||this;return r&&r._setHeader(o),o}return r(e,t),e}(i.a)},function(t,e,n){\"use strict\";n.d(e,\"a\",function(){return o});n(1);var i=n(29),r=(n(10),n(11),this&&this.__extends||function(){var t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n])};return function(e,n){function i(){this.constructor=e}t(e,n),e.prototype=null===n?Object.create(n):(i.prototype=n.prototype,new i)}}()),o=function(t){function e(e,n,i,r,o){var s=t.call(this,e,n,i,\"title\")||this;return r&&r._setTitle(s),o&&o._setTitle(s),s}return r(e,t),e.prototype.getTitleText=function(){return this._elementRef.nativeElement.textContent},e}(i.a)},function(t,e,n){\"use strict\";function i(t){return r._22(2,[r._18(402653184,1,{_fixedContent:0}),r._18(402653184,2,{_scrollContent:0}),(t()(),r.Z(2,0,[[1,0],[\"fixedContent\",1]],null,1,\"div\",[[\"class\",\"fixed-content\"]],null,null,null,null,null)),r._12(null,0),(t()(),r.Z(4,0,[[2,0],[\"scrollContent\",1]],null,1,\"div\",[[\"class\",\"scroll-content\"]],null,null,null,null,null)),r._12(null,1),r._12(null,2)],null,null)}n.d(e,\"a\",function(){return o}),e.b=i;var r=n(0),o=(n(8),n(1),n(2),n(6),n(9),n(4),n(7),r.X({encapsulation:2,styles:[],data:{}}))},function(t,e,n){\"use strict\";n.d(e,\"b\",function(){return i}),n.d(e,\"d\",function(){return r}),n.d(e,\"c\",function(){return o}),n.d(e,\"j\",function(){return s}),n.d(e,\"k\",function(){return a}),n.d(e,\"h\",function(){return l}),n.d(e,\"g\",function(){return u}),n.d(e,\"f\",function(){return c}),n.d(e,\"e\",function(){return p}),n.d(e,\"i\",function(){return h}),n.d(e,\"a\",function(){return f}),n.d(e,\"l\",function(){return d});n(5);var i=\"goback-swipe\",r=\"menu-swipe\",o=\"item-swipe\",s=\"refresher\",a=\"toggle\",l=-10,u=0,c=10,p=20,h=30,f={disable:[r,i],disableScroll:!0},d=function(){function t(t){this._app=t,this.id=1,this.requestedStart={},this.disabledGestures={},this.disabledScroll=new Set,this.capturedID=null}return t.prototype.createGesture=function(t){if(!t.name)throw new Error(\"name is undefined\");return new _(t.name,this.newID(),this,t.priority||0,!!t.disableScroll)},t.prototype.createBlocker=function(t){return void 0===t&&(t={}),new v(this.newID(),this,t.disable,!!t.disableScroll)},t.prototype.newID=function(){var t=this.id;return this.id++,t},t.prototype.start=function(t,e,n){return this.canStart(t)?(this.requestedStart[e]=n,!0):(delete this.requestedStart[e],!1)},t.prototype.capture=function(t,e,n){if(!this.start(t,e,n))return!1;var i=this.requestedStart,r=-1e4;for(var o in i)r=Math.max(r,i[o]);return r===n?(this.capturedID=e,this.requestedStart={},!0):(delete i[e],!1)},t.prototype.release=function(t){delete this.requestedStart[t],this.capturedID&&t===this.capturedID&&(this.capturedID=null)},t.prototype.disableGesture=function(t,e){var n=this.disabledGestures[t];n||(n=new Set,this.disabledGestures[t]=n),n.add(e)},t.prototype.enableGesture=function(t,e){var n=this.disabledGestures[t];n&&n.delete(e)},t.prototype.disableScroll=function(t){var e=!this.isScrollDisabled();this.disabledScroll.add(t),this._app&&e&&this.isScrollDisabled()&&this._app._setDisableScroll(!0)},t.prototype.enableScroll=function(t){var e=this.isScrollDisabled();this.disabledScroll.delete(t),this._app&&e&&!this.isScrollDisabled()&&this._app._setDisableScroll(!1)},t.prototype.canStart=function(t){return!this.capturedID&&!this.isDisabled(t)},t.prototype.isCaptured=function(){return!!this.capturedID},t.prototype.isScrollDisabled=function(){return this.disabledScroll.size>0},t.prototype.isDisabled=function(t){var e=this.disabledGestures[t];return!!(e&&e.size>0)},t}(),_=function(){function t(t,e,n,i,r){this.name=t,this.id=e,this.controller=n,this.priority=i,this.disableScroll=r}return t.prototype.canStart=function(){return!!this.controller&&this.controller.canStart(this.name)},t.prototype.start=function(){return!!this.controller&&this.controller.start(this.name,this.id,this.priority)},t.prototype.capture=function(){if(!this.controller)return!1;var t=this.controller.capture(this.name,this.id,this.priority);return t&&this.disableScroll&&this.controller.disableScroll(this.id),t},t.prototype.release=function(){this.controller&&(this.controller.release(this.id),this.disableScroll&&this.controller.enableScroll(this.id))},t.prototype.destroy=function(){this.release(),this.controller=null},t}(),v=function(){function t(t,e,n,i){this.id=t,this.controller=e,this.disable=n,this.disableScroll=i,this.blocked=!1}return t.prototype.block=function(){var t=this;this.controller&&(this.disable&&this.disable.forEach(function(e){t.controller.disableGesture(e,t.id)}),this.disableScroll&&this.controller.disableScroll(this.id),this.blocked=!0)},t.prototype.unblock=function(){var t=this;this.controller&&(this.disable&&this.disable.forEach(function(e){t.controller.enableGesture(e,t.id)}),this.disableScroll&&this.controller.enableScroll(this.id),this.blocked=!1)},t.prototype.destroy=function(){this.unblock(),this.controller=null},t}()},function(t,e,n){\"use strict\";function i(t){return r._22(2,[(t()(),r.Z(0,0,null,null,2,\"div\",[[\"class\",\"toolbar-title\"]],null,null,null,null,null)),r.Y(1,278528,null,0,o.g,[r.p,r.q,r.j,r.A],{klass:[0,\"klass\"],ngClass:[1,\"ngClass\"]},null),r._12(null,0)],function(t,e){t(e,1,0,\"toolbar-title\",\"toolbar-title-\"+e.component._mode)},null)}n.d(e,\"a\",function(){return s}),e.b=i;var r=n(0),o=n(28),s=(n(13),n(1),n(11),n(10),r.X({encapsulation:2,styles:[],data:{}}))},function(t,e,n){\"use strict\";function i(t){return r._22(0,[(t()(),r.Z(0,0,null,null,1,\"div\",[[\"class\",\"toolbar-background\"]],null,null,null,null,null)),r.Y(1,278528,null,0,o.g,[r.p,r.q,r.j,r.A],{klass:[0,\"klass\"],ngClass:[1,\"ngClass\"]},null),(t()(),r.Z(2,0,null,null,8,\"button\",[[\"class\",\"back-button\"],[\"ion-button\",\"bar-button\"]],[[8,\"hidden\",0]],[[null,\"click\"]],function(t,e,n){var i=!0;if(\"click\"===e){i=!1!==t.component.backButtonClick(n)&&i}return i},s.b,s.a)),r.Y(3,278528,null,0,o.g,[r.p,r.q,r.j,r.A],{klass:[0,\"klass\"],ngClass:[1,\"ngClass\"]},null),r.Y(4,1097728,null,0,a.a,[[8,\"bar-button\"],l.a,r.j,r.z],null,null),(t()(),r.Z(5,0,null,0,2,\"ion-icon\",[[\"class\",\"back-button-icon\"],[\"role\",\"img\"]],[[2,\"hide\",null]],null,null,null,null)),r.Y(6,278528,null,0,o.g,[r.p,r.q,r.j,r.A],{klass:[0,\"klass\"],ngClass:[1,\"ngClass\"]},null),r.Y(7,147456,null,0,u.a,[l.a,r.j,r.z],{name:[0,\"name\"]},null),(t()(),r.Z(8,0,null,0,2,\"span\",[[\"class\",\"back-button-text\"]],null,null,null,null,null)),r.Y(9,278528,null,0,o.g,[r.p,r.q,r.j,r.A],{klass:[0,\"klass\"],ngClass:[1,\"ngClass\"]},null),(t()(),r._20(10,null,[\"\",\"\"])),r._12(null,0),r._12(null,1),r._12(null,2),(t()(),r.Z(14,0,null,null,2,\"div\",[[\"class\",\"toolbar-content\"]],null,null,null,null,null)),r.Y(15,278528,null,0,o.g,[r.p,r.q,r.j,r.A],{klass:[0,\"klass\"],ngClass:[1,\"ngClass\"]},null),r._12(null,3)],function(t,e){var n=e.component;t(e,1,0,\"toolbar-background\",\"toolbar-background-\"+n._mode);t(e,3,0,\"back-button\",\"back-button-\"+n._mode);t(e,6,0,\"back-button-icon\",\"back-button-icon-\"+n._mode);t(e,7,0,n._bbIcon);t(e,9,0,\"back-button-text\",\"back-button-text-\"+n._mode);t(e,15,0,\"toolbar-content\",\"toolbar-content-\"+n._mode)},function(t,e){var n=e.component;t(e,2,0,n._hideBb);t(e,5,0,r._13(e,7)._hidden);t(e,10,0,n._backText)})}n.d(e,\"a\",function(){return c}),e.b=i;var r=n(0),o=n(28),s=n(22),a=n(21),l=n(1),u=n(30),c=(n(10),n(4),n(7),r.X({encapsulation:2,styles:[],data:{}}))},function(t,e,n){\"use strict\";function i(t){return\"string\"==typeof t}function r(t){return\"number\"==typeof t}e.a=function(t,e,n){return Math.max(t,Math.min(e,n))},e.b=function(t){return JSON.parse(JSON.stringify(t))},e.c=function(t,e){return t===e||JSON.stringify(t)===JSON.stringify(e)},e.d=function(t){for(var e=[],n=1;n<arguments.length;n++)e[n-1]=arguments[n];for(var i=arguments.length-1;i>=1;i--){var r=arguments[i];if(r)for(var o in r)r.hasOwnProperty(o)&&!t.hasOwnProperty(o)&&(t[o]=r[o])}return t},e.n=i,e.j=r,e.i=function(t){return\"function\"==typeof t},e.h=function(t){return void 0!==t},e.p=function(t){return void 0===t},e.l=function(t){return void 0!==t&&null!==t},e.f=function(t){return void 0===t||null===t},e.k=function(t){return\"object\"==typeof t},e.e=function(t){return Array.isArray(t)},e.o=function(t){return\"string\"==typeof t?\"true\"===(t=t.toLowerCase().trim())||\"on\"===t||\"\"===t:!!t},e.g=function(t,e){return void 0===t||null===t||\"\"===t?void 0===e||null===e||\"\"===e:!0===t||\"true\"===t?!0===e||\"true\"===e:!1===t||\"false\"===t?!1===e||\"false\"===e:0===t||\"0\"===t?0===e||\"0\"===e:t==e},e.m=function(t,e,n){switch(void 0===n&&(n=!1),t){case\"right\":return!0;case\"left\":return!1;case\"end\":return!e;case\"start\":return e;default:return n?!e:e}},e.r=function(t,e){var n=t[e.from];return t.splice(e.from,1),t.splice(e.to,0,n),t},e.q=function(t,e){var n=t.indexOf(e);return!!~n&&!!t.splice(n,1)},e.t=function(t,e,n){return!e&&n||t&&e},e.s=function(t){return\"requestIdleCallback\"in window?window.requestIdleCallback(t):setTimeout(t,500)}},function(t,e,n){\"use strict\";n.d(e,\"a\",function(){return r});var i=n(18),r=function(){function t(){this._focused=null,this._ids=-1,this._inputs=[]}return t.prototype.register=function(t){this._inputs.push(t)},t.prototype.deregister=function(t){Object(i.q)(this._inputs,t),this.unsetAsFocused(t)},t.prototype.setAsFocused=function(t){this._focused=t},t.prototype.unsetAsFocused=function(t){t===this._focused&&(this._focused=null)},t.prototype.tabFocus=function(t){var e=this._inputs,n=e.indexOf(t)+1;if(n>0&&n<e.length){var i=e[n];if(i!==this._focused)return i.initFocus()}if((n=e.indexOf(this._focused))>0){var r=e[n-1];r&&r.initFocus()}},t.prototype.nextId=function(){return++this._ids},t}()},function(t,e,n){\"use strict\";n.d(e,\"a\",function(){return o});n(1),n(19);var i=n(29),r=(n(23),this&&this.__extends||function(){var t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n])};return function(e,n){function i(){this.constructor=e}t(e,n),e.prototype=null===n?Object.create(n):(i.prototype=n.prototype,new i)}}()),o=function(t){function e(e,n,i,r,o){var s=t.call(this,n,i,r,\"item\")||this;return s._ids=-1,s._inputs=[],s._viewLabel=!0,s._name=\"item\",s.labelId=null,s._setName(i),s._hasReorder=!!o,s.id=e.nextId().toString(),s.labelId=\"lbl-\"+s.id,r.orgListen||(r.orgListen=r.listen,r.listen=function(t,e,n){return\"click\"===e&&t.setAttribute&&t.setAttribute(\"tappable\",\"\"),r.orgListen(t,e,n)}),s}return r(e,t),e.prototype.registerInput=function(t){return this._inputs.push(t),this.id+\"-\"+ ++this._ids},e.prototype.ngAfterContentInit=function(){if(this._viewLabel&&this._inputs.length){var t=this.getLabelText().trim();this._viewLabel=t.length>0}this._inputs.length>1&&this.setElementClass(\"item-multiple-inputs\",!0)},e.prototype._updateColor=function(t,e){this._setColor(t,e=e||\"item\")},e.prototype._setName=function(t){var e=t.nativeElement.nodeName.replace(\"ION-\",\"\");\"LIST-HEADER\"!==e&&\"ITEM-DIVIDER\"!==e||(this._name=e)},e.prototype.getLabelText=function(){return this._label?this._label.text:\"\"},Object.defineProperty(e.prototype,\"contentLabel\",{set:function(t){t&&(this._label=t,t.id=this.labelId,t.type&&this.setElementClass(\"item-label-\"+t.type,!0),this._viewLabel=!1)},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,\"viewLabel\",{set:function(t){this._label||(this._label=t)},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,\"_buttons\",{set:function(t){t.forEach(function(t){t._size||t.setElementClass(\"item-button\",!0)})},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,\"_icons\",{set:function(t){t.forEach(function(t){t.setElementClass(\"item-icon\",!0)})},enumerable:!0,configurable:!0}),e}(i.a)},function(t,e,n){\"use strict\";n.d(e,\"a\",function(){return s});n(1);var i=n(29),r=n(18),o=this&&this.__extends||function(){var t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n])};return function(e,n){function i(){this.constructor=e}t(e,n),e.prototype=null===n?Object.create(n):(i.prototype=n.prototype,new i)}}(),s=function(t){function e(e,n,i,r){var o=t.call(this,n,i,r)||this;return o._role=\"button\",o._style=\"default\",o._mode=n.get(\"mode\"),!1===n.get(\"hoverCSS\")&&o.setElementClass(\"disable-hover\",!0),e.trim().length>0&&o.setRole(e),o}return o(e,t),Object.defineProperty(e.prototype,\"large\",{set:function(t){this._attr(\"_size\",\"large\",t)},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,\"small\",{set:function(t){this._attr(\"_size\",\"small\",t)},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,\"default\",{set:function(t){this._attr(\"_size\",\"default\",t)},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,\"outline\",{set:function(t){this._attr(\"_style\",\"outline\",t)},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,\"clear\",{set:function(t){this._attr(\"_style\",\"clear\",t)},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,\"solid\",{set:function(t){this._attr(\"_style\",\"solid\",t)},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,\"round\",{set:function(t){this._attr(\"_shape\",\"round\",t)},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,\"block\",{set:function(t){this._attr(\"_display\",\"block\",t)},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,\"full\",{set:function(t){this._attr(\"_display\",\"full\",t)},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,\"strong\",{set:function(t){this._attr(\"_decorator\",\"strong\",t)},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,\"mode\",{set:function(t){this._assignCss(!1),this._mode=t,this._assignCss(!0)},enumerable:!0,configurable:!0}),e.prototype._attr=function(t,e,n){\"_style\"===t&&this._updateColor(this._color,!1),this._setClass(this[t],!1),Object(r.o)(n)?(this[t]=e,this._setClass(e,!0)):(this[t]=\"_style\"===t?\"default\":null,this._setClass(this[t],!0)),\"_style\"===t&&this._updateColor(this._color,!0)},Object.defineProperty(e.prototype,\"color\",{set:function(t){this._updateColor(this._color,!1),this._updateColor(t,!0),this._color=t},enumerable:!0,configurable:!0}),e.prototype.ngAfterContentInit=function(){this._init=!0,this._assignCss(!0)},e.prototype.setRole=function(t){this._assignCss(!1),this._role=t,this._assignCss(!0)},e.prototype._assignCss=function(t){var e=this._role;e&&(this.setElementClass(e,t),this.setElementClass(e+\"-\"+this._mode,t),this._setClass(this._style,t),this._setClass(this._shape,t),this._setClass(this._display,t),this._setClass(this._size,t),this._setClass(this._decorator,t),this._updateColor(this._color,t))},e.prototype._setClass=function(t,e){t&&this._init&&(t=t.toLocaleLowerCase(),this.setElementClass(this._role+\"-\"+t,e),this.setElementClass(this._role+\"-\"+t+\"-\"+this._mode,e))},e.prototype._updateColor=function(t,e){if(t&&this._init){var n=this._role,i=this._style;n+=null!==(i=\"bar-button\"!==this._role&&\"solid\"===i?\"default\":i)&&\"\"!==i&&\"default\"!==i?\"-\"+i.toLowerCase():\"\",null!==t&&\"\"!==t&&this.setElementClass(n+\"-\"+this._mode+\"-\"+t,e)}},e}(i.a)},function(t,e,n){\"use strict\";function i(t){return r._22(2,[(t()(),r.Z(0,0,null,null,1,\"span\",[[\"class\",\"button-inner\"]],null,null,null,null,null)),r._12(null,0),(t()(),r.Z(2,0,null,null,0,\"div\",[[\"class\",\"button-effect\"]],null,null,null,null,null))],null,null)}n.d(e,\"a\",function(){return o}),e.b=i;var r=n(0),o=(n(21),n(1),r.X({encapsulation:2,styles:[],data:{}}))},function(t,e,n){\"use strict\";var i=n(0),r=(n(8),n(6),n(18)),o=n(170),s=n(35),a=n(51),l=function(){function t(t,e){this.plt=t,this.reorderList=e,this.selectedItemEle=null,this.events=new a.a(t),this.events.pointerEvents({element:this.reorderList.getNativeElement(),pointerDown:this.onDragStart.bind(this),pointerMove:this.onDragMove.bind(this),pointerUp:this.onDragEnd.bind(this),zone:!1})}return t.prototype.onDragStart=function(t){if(this.selectedItemEle)return!1;var e=t.target;if(\"ION-REORDER\"!==e.nodeName)return!1;var n=e.$ionComponent;if(!n)return console.error(\"ion-reorder does not contain $ionComponent\"),!1;this.reorderList._reorderPrepare();var i=n.getReorderNode();return i?(t.preventDefault(),this.selectedItemEle=i,this.selectedItemHeight=i.offsetHeight,this.lastYcoord=-100,this.lastToIndex=Object(o.b)(i),this.windowHeight=this.plt.height()-u,this.lastScrollPosition=this.reorderList._scrollContent(0),this.offset=Object(s.f)(t),this.offset.y+=this.lastScrollPosition,i.classList.add(p),this.reorderList._reorderStart(),!0):(console.error(\"reorder node not found\"),!1)},t.prototype.onDragMove=function(t){var e=this.selectedItemEle;if(e){t.preventDefault();var n=Object(s.f)(t),i=n.y,r=this.scroll(i);if(Math.abs(i-this.lastYcoord)>30){var a=this.itemForCoord(n);if(a){var l=Object(o.b)(a);if(void 0!==l&&(l!==this.lastToIndex||this.emptyZone)){var u=Object(o.b)(e);this.lastToIndex=l,this.lastYcoord=i,this.emptyZone=!1,this.reorderList._reorderMove(u,l,this.selectedItemHeight)}}else this.emptyZone=!0}var c=Math.round(i-this.offset.y+r);e.style[this.plt.Css.transform]=\"translateY(\"+c+\"px)\"}},t.prototype.onDragEnd=function(t){var e=this,n=this.selectedItemEle;if(n){t&&(t.preventDefault(),t.stopPropagation());var i=this.lastToIndex,r=Object(o.b)(n),s=function(){e.selectedItemEle.style.transition=\"\",e.selectedItemEle.classList.remove(p),e.selectedItemEle=null};i===r?(n.style.transition=\"transform 200ms ease-in-out\",setTimeout(s,200)):s(),this.reorderList._reorderEmit(r,i)}},t.prototype.itemForCoord=function(t){var e=this.plt.getElementFromPoint(this.offset.x+(this.reorderList._isStart===this.plt.isRTL?-100:100),t.y);return Object(o.a)(e,this.reorderList.getNativeElement())},t.prototype.scroll=function(t){return t<u?this.lastScrollPosition=this.reorderList._scrollContent(-c):t>this.windowHeight&&(this.lastScrollPosition=this.reorderList._scrollContent(c)),this.lastScrollPosition},t.prototype.destroy=function(){this.onDragEnd(null),this.events.destroy(),this.events=null,this.reorderList=null},t}(),u=60,c=10,p=\"reorder-active\";n(2);n.d(e,\"a\",function(){return f});var h=function(){function t(t,e){this.from=t,this.to=e}return t.prototype.applyTo=function(t){Object(r.r)(t,this)},t}(),f=function(){function t(t,e,n,r,o,s){this._plt=t,this._dom=e,this._rendered=r,this._zone=o,this._content=s,this._enableReorder=!1,this._visibleReorder=!1,this._isStart=!1,this._lastToIndex=-1,this.ionItemReorder=new i.l,this._element=n.nativeElement}return Object.defineProperty(t.prototype,\"side\",{set:function(t){this._isStart=\"start\"===t},enumerable:!0,configurable:!0}),t.prototype.ngOnDestroy=function(){this._element=null,this._reorderGesture&&this._reorderGesture.destroy()},Object.defineProperty(t.prototype,\"reorder\",{get:function(){return this._enableReorder},set:function(t){var e=this,n=Object(r.o)(t);!n&&this._reorderGesture?(this._reorderGesture.destroy(),this._reorderGesture=null,this._visibleReorder=!1,setTimeout(function(){return e._enableReorder=!1},400)):n&&!this._reorderGesture&&(this._reorderGesture=new l(this._plt,this),this._enableReorder=!0,this._dom.write(function(){e._zone.run(function(){e._visibleReorder=!0})},16))},enumerable:!0,configurable:!0}),t.prototype._reorderPrepare=function(){for(var t=this._element,e=t.children,n=0,i=e.length;n<i;n++){var r=e[n];r.$ionIndex=n,r.$ionReorderList=t}},t.prototype._reorderStart=function(){this.setElementClass(\"reorder-list-active\",!0)},t.prototype._reorderEmit=function(t,e){var n=this;this._reorderReset(),t!==e&&this._zone.run(function(){var i=new h(t,e);n.ionItemReorder.emit(i)})},t.prototype._scrollContent=function(t){var e=this._content.scrollTop+t;return 0!==t&&this._content.scrollTo(0,e,0),e},t.prototype._reorderReset=function(){var t=this._element.children,e=t.length;this.setElementClass(\"reorder-list-active\",!1);for(var n=this._plt.Css.transform,i=0;i<e;i++)t[i].style[n]=\"\";this._lastToIndex=-1},t.prototype._reorderMove=function(t,e,n){-1===this._lastToIndex&&(this._lastToIndex=t);var i=this._lastToIndex;this._lastToIndex=e;var r=this._element.children,o=this._plt.Css.transform;if(e>=i)for(s=i;s<=e;s++)s!==t&&(r[s].style[o]=s>t?\"translateY(\"+-n+\"px)\":\"\");if(e<=i)for(var s=e;s<=i;s++)s!==t&&(r[s].style[o]=s<t?\"translateY(\"+n+\"px)\":\"\")},t.prototype.setElementClass=function(t,e){this._rendered.setElementClass(this._element,t,e)},t.prototype.getNativeElement=function(){return this._element},t}()},function(t,e,n){\"use strict\";function i(t){return null==t||0===t.length}function r(t){return null!=t}function o(t){var e=Object(x._5)(t)?Object(k.fromPromise)(t):t;if(!Object(x._4)(e))throw new Error(\"Expected validator to return Promise or Observable.\");return e}function s(t){var e=t.reduce(function(t,e){return null!=e?Object(E.__assign)({},t,e):t},{});return 0===Object.keys(e).length?null:e}function a(){throw new Error(\"unimplemented\")}function l(t,e){return null==t?\"\"+e:(e&&\"object\"==typeof e&&(e=\"Object\"),(t+\": \"+e).slice(0,50))}function u(t,e){return e.path.concat([t])}function c(t,e){t||d(e,\"Cannot find control with\"),e.valueAccessor||d(e,\"No value accessor for form control with\"),t.validator=M.compose([t.validator,e.validator]),t.asyncValidator=M.composeAsync([t.asyncValidator,e.asyncValidator]),e.valueAccessor.writeValue(t.value),function(t,e){e.valueAccessor.registerOnChange(function(n){t._pendingValue=n,t._pendingDirty=!0,\"change\"===t.updateOn&&p(t,e)})}(t,e),function(t,e){t.registerOnChange(function(t,n){e.valueAccessor.writeValue(t),n&&e.viewToModelUpdate(t)})}(t,e),function(t,e){e.valueAccessor.registerOnTouched(function(){t._pendingTouched=!0,\"blur\"===t.updateOn&&p(t,e),\"submit\"!==t.updateOn&&t.markAsTouched()})}(t,e),e.valueAccessor.setDisabledState&&t.registerOnDisabledChange(function(t){e.valueAccessor.setDisabledState(t)}),e._rawValidators.forEach(function(e){e.registerOnValidatorChange&&e.registerOnValidatorChange(function(){return t.updateValueAndValidity()})}),e._rawAsyncValidators.forEach(function(e){e.registerOnValidatorChange&&e.registerOnValidatorChange(function(){return t.updateValueAndValidity()})})}function p(t,e){e.viewToModelUpdate(t._pendingValue),t._pendingDirty&&t.markAsDirty(),t.setValue(t._pendingValue,{emitModelToViewChange:!1})}function h(t,e){null==t&&d(e,\"Cannot find control with\"),t.validator=M.compose([t.validator,e.validator]),t.asyncValidator=M.composeAsync([t.asyncValidator,e.asyncValidator])}function f(t){return d(t,\"There is no FormControl instance attached to form control element with\")}function d(t,e){var n;throw n=t.path.length>1?\"path: '\"+t.path.join(\" -> \")+\"'\":t.path[0]?\"name: '\"+t.path+\"'\":\"unspecified name attribute\",new Error(e+\" \"+n)}function _(t){return null!=t?M.compose(t.map(function(t){return t.validate?function(e){return t.validate(e)}:t})):null}function v(t){return null!=t?M.composeAsync(t.map(function(t){return t.validate?function(e){return t.validate(e)}:t})):null}function y(t,e){if(!t.hasOwnProperty(\"model\"))return!1;var n=t.model;return!!n.isFirstChange()||!Object(x._8)(e,n.currentValue)}function m(t,e){t._syncPendingControls(),e.forEach(function(t){var e=t.control;\"submit\"===e.updateOn&&t.viewToModelUpdate(e._pendingValue)})}function g(t,e){if(!e)return null;var n=void 0,i=void 0,r=void 0;return e.forEach(function(e){e.constructor===L?n=e:!function(t){return Z.some(function(e){return t.constructor===e})}(e)?(r&&d(t,\"More than one custom value accessor matches form control with\"),r=e):(i&&d(t,\"More than one built-in value accessor matches form control with\"),i=e)}),r||(i||(n||(d(t,\"No valid value accessor for form control with\"),null)))}function b(t,e){var n=t.indexOf(e);n>-1&&t.splice(n,1)}function w(t){var e=O(t)?t.validators:t;return Array.isArray(e)?_(e):e||null}function C(t,e){var n=O(e)?e.asyncValidators:t;return Array.isArray(n)?v(n):n||null}function O(t){return null!=t&&!Array.isArray(t)&&\"object\"==typeof t}function S(t){return!(t instanceof ct||t instanceof ut||t instanceof pt)}n.d(e,\"b\",function(){return j}),n.d(e,\"j\",function(){return R}),n.d(e,\"a\",function(){return V}),n.d(e,\"c\",function(){return L}),n.d(e,\"k\",function(){return B}),n.d(e,\"l\",function(){return X}),n.d(e,\"m\",function(){return $}),n.d(e,\"n\",function(){return at}),n.d(e,\"f\",function(){return ht}),n.d(e,\"h\",function(){return ut}),n.d(e,\"d\",function(){return ft}),n.d(e,\"e\",function(){return Q}),n.d(e,\"g\",function(){return J}),n.d(e,\"p\",function(){return M}),n.d(e,\"i\",function(){return vt}),n.d(e,\"o\",function(){return yt}),n.d(e,\"q\",function(){return _t}),n.d(e,\"r\",function(){return dt}),n.d(e,\"s\",function(){return z});var E=n(3),x=n(0),T=n(216),k=n(218),P=n(220),A=n(57),I=function(){function t(){}return Object.defineProperty(t.prototype,\"value\",{get:function(){return this.control?this.control.value:null},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,\"valid\",{get:function(){return this.control?this.control.valid:null},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,\"invalid\",{get:function(){return this.control?this.control.invalid:null},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,\"pending\",{get:function(){return this.control?this.control.pending:null},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,\"disabled\",{get:function(){return this.control?this.control.disabled:null},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,\"enabled\",{get:function(){return this.control?this.control.enabled:null},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,\"errors\",{get:function(){return this.control?this.control.errors:null},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,\"pristine\",{get:function(){return this.control?this.control.pristine:null},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,\"dirty\",{get:function(){return this.control?this.control.dirty:null},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,\"touched\",{get:function(){return this.control?this.control.touched:null},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,\"status\",{get:function(){return this.control?this.control.status:null},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,\"untouched\",{get:function(){return this.control?this.control.untouched:null},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,\"statusChanges\",{get:function(){return this.control?this.control.statusChanges:null},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,\"valueChanges\",{get:function(){return this.control?this.control.valueChanges:null},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,\"path\",{get:function(){return null},enumerable:!0,configurable:!0}),t.prototype.reset=function(t){void 0===t&&(t=void 0),this.control&&this.control.reset(t)},t.prototype.hasError=function(t,e){return!!this.control&&this.control.hasError(t,e)},t.prototype.getError=function(t,e){return this.control?this.control.getError(t,e):null},t}(),j=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return Object(E.__extends)(e,t),Object.defineProperty(e.prototype,\"formDirective\",{get:function(){return null},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,\"path\",{get:function(){return null},enumerable:!0,configurable:!0}),e}(I),D=/^(?=.{1,254}$)(?=.{1,64}@)[-!#$%&'*+/0-9=?A-Z^_`a-z{|}~]+(\\.[-!#$%&'*+/0-9=?A-Z^_`a-z{|}~]+)*@[A-Za-z0-9]([A-Za-z0-9-]{0,61}[A-Za-z0-9])?(\\.[A-Za-z0-9]([A-Za-z0-9-]{0,61}[A-Za-z0-9])?)*$/,M=function(){function t(){}return t.min=function(t){return function(e){if(i(e.value)||i(t))return null;var n=parseFloat(e.value);return!isNaN(n)&&n<t?{min:{min:t,actual:e.value}}:null}},t.max=function(t){return function(e){if(i(e.value)||i(t))return null;var n=parseFloat(e.value);return!isNaN(n)&&n>t?{max:{max:t,actual:e.value}}:null}},t.required=function(t){return i(t.value)?{required:!0}:null},t.requiredTrue=function(t){return!0===t.value?null:{required:!0}},t.email=function(t){return D.test(t.value)?null:{email:!0}},t.minLength=function(t){return function(e){if(i(e.value))return null;var n=e.value?e.value.length:0;return n<t?{minlength:{requiredLength:t,actualLength:n}}:null}},t.maxLength=function(t){return function(e){var n=e.value?e.value.length:0;return n>t?{maxlength:{requiredLength:t,actualLength:n}}:null}},t.pattern=function(e){if(!e)return t.nullValidator;var n,r;return\"string\"==typeof e?(r=\"^\"+e+\"$\",n=new RegExp(r)):(r=e.toString(),n=e),function(t){if(i(t.value))return null;var e=t.value;return n.test(e)?null:{pattern:{requiredPattern:r,actualValue:e}}}},t.nullValidator=function(t){return null},t.compose=function(t){if(!t)return null;var e=t.filter(r);return 0==e.length?null:function(t){return s(function(t,e){return e.map(function(e){return e(t)})}(t,e))}},t.composeAsync=function(t){if(!t)return null;var e=t.filter(r);return 0==e.length?null:function(t){var n=function(t,e){return e.map(function(e){return e(t)})}(t,e).map(o);return P.map.call(Object(T.forkJoin)(n),s)}},t}(),R=new x.n(\"NgValueAccessor\"),N=function(){function t(t,e){this._renderer=t,this._elementRef=e,this.onChange=function(t){},this.onTouched=function(){}}return t.prototype.writeValue=function(t){this._renderer.setProperty(this._elementRef.nativeElement,\"checked\",t)},t.prototype.registerOnChange=function(t){this.onChange=t},t.prototype.registerOnTouched=function(t){this.onTouched=t},t.prototype.setDisabledState=function(t){this._renderer.setProperty(this._elementRef.nativeElement,\"disabled\",t)},t}(),V=new x.n(\"CompositionEventMode\"),L=function(){function t(t,e,n){this._renderer=t,this._elementRef=e,this._compositionMode=n,this.onChange=function(t){},this.onTouched=function(){},this._composing=!1,null==this._compositionMode&&(this._compositionMode=!function(){var t=Object(A.s)()?Object(A.s)().getUserAgent():\"\";return/android (\\d+)/.test(t.toLowerCase())}())}return t.prototype.writeValue=function(t){this._renderer.setProperty(this._elementRef.nativeElement,\"value\",null==t?\"\":t)},t.prototype.registerOnChange=function(t){this.onChange=t},t.prototype.registerOnTouched=function(t){this.onTouched=t},t.prototype.setDisabledState=function(t){this._renderer.setProperty(this._elementRef.nativeElement,\"disabled\",t)},t.prototype._handleInput=function(t){(!this._compositionMode||this._compositionMode&&!this._composing)&&this.onChange(t)},t.prototype._compositionStart=function(){this._composing=!0},t.prototype._compositionEnd=function(t){this._composing=!1,this._compositionMode&&this.onChange(t)},t}(),F=function(){function t(t,e){this._renderer=t,this._elementRef=e,this.onChange=function(t){},this.onTouched=function(){}}return t.prototype.writeValue=function(t){this._renderer.setProperty(this._elementRef.nativeElement,\"value\",null==t?\"\":t)},t.prototype.registerOnChange=function(t){this.onChange=function(e){t(\"\"==e?null:parseFloat(e))}},t.prototype.registerOnTouched=function(t){this.onTouched=t},t.prototype.setDisabledState=function(t){this._renderer.setProperty(this._elementRef.nativeElement,\"disabled\",t)},t}(),B=function(t){function e(){var e=null!==t&&t.apply(this,arguments)||this;return e._parent=null,e.name=null,e.valueAccessor=null,e._rawValidators=[],e._rawAsyncValidators=[],e}return Object(E.__extends)(e,t),Object.defineProperty(e.prototype,\"validator\",{get:function(){return a()},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,\"asyncValidator\",{get:function(){return a()},enumerable:!0,configurable:!0}),e}(I),z=function(){function t(){this._accessors=[]}return t.prototype.add=function(t,e){this._accessors.push([t,e])},t.prototype.remove=function(t){for(var e=this._accessors.length-1;e>=0;--e)if(this._accessors[e][1]===t)return void this._accessors.splice(e,1)},t.prototype.select=function(t){var e=this;this._accessors.forEach(function(n){e._isSameGroup(n,t)&&n[1]!==t&&n[1].fireUncheck(t.value)})},t.prototype._isSameGroup=function(t,e){return!!t[0].control&&(t[0]._parent===e._control._parent&&t[1].name===e.name)},t}(),H=function(){function t(t,e,n,i){this._renderer=t,this._elementRef=e,this._registry=n,this._injector=i,this.onChange=function(){},this.onTouched=function(){}}return t.prototype.ngOnInit=function(){this._control=this._injector.get(B),this._checkName(),this._registry.add(this._control,this)},t.prototype.ngOnDestroy=function(){this._registry.remove(this)},t.prototype.writeValue=function(t){this._state=t===this.value,this._renderer.setProperty(this._elementRef.nativeElement,\"checked\",this._state)},t.prototype.registerOnChange=function(t){var e=this;this._fn=t,this.onChange=function(){t(e.value),e._registry.select(e)}},t.prototype.fireUncheck=function(t){this.writeValue(t)},t.prototype.registerOnTouched=function(t){this.onTouched=t},t.prototype.setDisabledState=function(t){this._renderer.setProperty(this._elementRef.nativeElement,\"disabled\",t)},t.prototype._checkName=function(){this.name&&this.formControlName&&this.name!==this.formControlName&&this._throwNameError(),!this.name&&this.formControlName&&(this.name=this.formControlName)},t.prototype._throwNameError=function(){throw new Error('\\n      If you define both a name and a formControlName attribute on your radio button, their values\\n      must match. Ex: <input type=\"radio\" formControlName=\"food\" name=\"food\">\\n    ')},t}(),Y=function(){function t(t,e){this._renderer=t,this._elementRef=e,this.onChange=function(t){},this.onTouched=function(){}}return t.prototype.writeValue=function(t){this._renderer.setProperty(this._elementRef.nativeElement,\"value\",parseFloat(t))},t.prototype.registerOnChange=function(t){this.onChange=function(e){t(\"\"==e?null:parseFloat(e))}},t.prototype.registerOnTouched=function(t){this.onTouched=t},t.prototype.setDisabledState=function(t){this._renderer.setProperty(this._elementRef.nativeElement,\"disabled\",t)},t}(),U=function(){function t(t,e){this._renderer=t,this._elementRef=e,this._optionMap=new Map,this._idCounter=0,this.onChange=function(t){},this.onTouched=function(){},this._compareWith=x._8}return Object.defineProperty(t.prototype,\"compareWith\",{set:function(t){if(\"function\"!=typeof t)throw new Error(\"compareWith must be a function, but received \"+JSON.stringify(t));this._compareWith=t},enumerable:!0,configurable:!0}),t.prototype.writeValue=function(t){this.value=t;var e=this._getOptionId(t);null==e&&this._renderer.setProperty(this._elementRef.nativeElement,\"selectedIndex\",-1);var n=l(e,t);this._renderer.setProperty(this._elementRef.nativeElement,\"value\",n)},t.prototype.registerOnChange=function(t){var e=this;this.onChange=function(n){e.value=e._getOptionValue(n),t(e.value)}},t.prototype.registerOnTouched=function(t){this.onTouched=t},t.prototype.setDisabledState=function(t){this._renderer.setProperty(this._elementRef.nativeElement,\"disabled\",t)},t.prototype._registerOption=function(){return(this._idCounter++).toString()},t.prototype._getOptionId=function(t){for(var e=0,n=Array.from(this._optionMap.keys());e<n.length;e++){var i=n[e];if(this._compareWith(this._optionMap.get(i),t))return i}return null},t.prototype._getOptionValue=function(t){var e=function(t){return t.split(\":\")[0]}(t);return this._optionMap.has(e)?this._optionMap.get(e):t},t}(),q=function(){function t(t,e){this._renderer=t,this._elementRef=e,this._optionMap=new Map,this._idCounter=0,this.onChange=function(t){},this.onTouched=function(){},this._compareWith=x._8}return Object.defineProperty(t.prototype,\"compareWith\",{set:function(t){if(\"function\"!=typeof t)throw new Error(\"compareWith must be a function, but received \"+JSON.stringify(t));this._compareWith=t},enumerable:!0,configurable:!0}),t.prototype.writeValue=function(t){var e=this;this.value=t;var n;if(Array.isArray(t)){var i=t.map(function(t){return e._getOptionId(t)});n=function(t,e){t._setSelected(i.indexOf(e.toString())>-1)}}else n=function(t,e){t._setSelected(!1)};this._optionMap.forEach(n)},t.prototype.registerOnChange=function(t){var e=this;this.onChange=function(n){var i=[];if(n.hasOwnProperty(\"selectedOptions\"))for(var r=n.selectedOptions,o=0;o<r.length;o++){var s=r.item(o),a=e._getOptionValue(s.value);i.push(a)}else for(var r=n.options,o=0;o<r.length;o++){if((s=r.item(o)).selected){a=e._getOptionValue(s.value);i.push(a)}}e.value=i,t(i)}},t.prototype.registerOnTouched=function(t){this.onTouched=t},t.prototype.setDisabledState=function(t){this._renderer.setProperty(this._elementRef.nativeElement,\"disabled\",t)},t.prototype._registerOption=function(t){var e=(this._idCounter++).toString();return this._optionMap.set(e,t),e},t.prototype._getOptionId=function(t){for(var e=0,n=Array.from(this._optionMap.keys());e<n.length;e++){var i=n[e];if(this._compareWith(this._optionMap.get(i)._value,t))return i}return null},t.prototype._getOptionValue=function(t){var e=function(t){return t.split(\":\")[0]}(t);return this._optionMap.has(e)?this._optionMap.get(e)._value:t},t}(),Z=[N,Y,F,U,q,H],G=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return Object(E.__extends)(e,t),e.prototype.ngOnInit=function(){this._checkParentType(),this.formDirective.addFormGroup(this)},e.prototype.ngOnDestroy=function(){this.formDirective&&this.formDirective.removeFormGroup(this)},Object.defineProperty(e.prototype,\"control\",{get:function(){return this.formDirective.getFormGroup(this)},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,\"path\",{get:function(){return u(this.name,this._parent)},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,\"formDirective\",{get:function(){return this._parent?this._parent.formDirective:null},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,\"validator\",{get:function(){return _(this._validators)},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,\"asyncValidator\",{get:function(){return v(this._asyncValidators)},enumerable:!0,configurable:!0}),e.prototype._checkParentType=function(){},e}(j),W=function(){function t(t){this._cd=t}return Object.defineProperty(t.prototype,\"ngClassUntouched\",{get:function(){return!!this._cd.control&&this._cd.control.untouched},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,\"ngClassTouched\",{get:function(){return!!this._cd.control&&this._cd.control.touched},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,\"ngClassPristine\",{get:function(){return!!this._cd.control&&this._cd.control.pristine},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,\"ngClassDirty\",{get:function(){return!!this._cd.control&&this._cd.control.dirty},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,\"ngClassValid\",{get:function(){return!!this._cd.control&&this._cd.control.valid},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,\"ngClassInvalid\",{get:function(){return!!this._cd.control&&this._cd.control.invalid},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,\"ngClassPending\",{get:function(){return!!this._cd.control&&this._cd.control.pending},enumerable:!0,configurable:!0}),t}(),X=function(t){function e(e){return t.call(this,e)||this}return Object(E.__extends)(e,t),e}(W),$=function(t){function e(e){return t.call(this,e)||this}return Object(E.__extends)(e,t),e}(W),K=function(){function t(t,e){this.validator=t,this.asyncValidator=e,this._onCollectionChange=function(){},this.pristine=!0,this.touched=!1,this._onDisabledChange=[]}return Object.defineProperty(t.prototype,\"parent\",{get:function(){return this._parent},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,\"valid\",{get:function(){return\"VALID\"===this.status},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,\"invalid\",{get:function(){return\"INVALID\"===this.status},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,\"pending\",{get:function(){return\"PENDING\"==this.status},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,\"disabled\",{get:function(){return\"DISABLED\"===this.status},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,\"enabled\",{get:function(){return\"DISABLED\"!==this.status},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,\"dirty\",{get:function(){return!this.pristine},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,\"untouched\",{get:function(){return!this.touched},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,\"updateOn\",{get:function(){return this._updateOn?this._updateOn:this.parent?this.parent.updateOn:\"change\"},enumerable:!0,configurable:!0}),t.prototype.setValidators=function(t){this.validator=w(t)},t.prototype.setAsyncValidators=function(t){this.asyncValidator=C(t)},t.prototype.clearValidators=function(){this.validator=null},t.prototype.clearAsyncValidators=function(){this.asyncValidator=null},t.prototype.markAsTouched=function(t){void 0===t&&(t={}),this.touched=!0,this._parent&&!t.onlySelf&&this._parent.markAsTouched(t)},t.prototype.markAsUntouched=function(t){void 0===t&&(t={}),this.touched=!1,this._pendingTouched=!1,this._forEachChild(function(t){t.markAsUntouched({onlySelf:!0})}),this._parent&&!t.onlySelf&&this._parent._updateTouched(t)},t.prototype.markAsDirty=function(t){void 0===t&&(t={}),this.pristine=!1,this._parent&&!t.onlySelf&&this._parent.markAsDirty(t)},t.prototype.markAsPristine=function(t){void 0===t&&(t={}),this.pristine=!0,this._pendingDirty=!1,this._forEachChild(function(t){t.markAsPristine({onlySelf:!0})}),this._parent&&!t.onlySelf&&this._parent._updatePristine(t)},t.prototype.markAsPending=function(t){void 0===t&&(t={}),this.status=\"PENDING\",this._parent&&!t.onlySelf&&this._parent.markAsPending(t)},t.prototype.disable=function(t){void 0===t&&(t={}),this.status=\"DISABLED\",this.errors=null,this._forEachChild(function(t){t.disable({onlySelf:!0})}),this._updateValue(),!1!==t.emitEvent&&(this.valueChanges.emit(this.value),this.statusChanges.emit(this.status)),this._updateAncestors(!!t.onlySelf),this._onDisabledChange.forEach(function(t){return t(!0)})},t.prototype.enable=function(t){void 0===t&&(t={}),this.status=\"VALID\",this._forEachChild(function(t){t.enable({onlySelf:!0})}),this.updateValueAndValidity({onlySelf:!0,emitEvent:t.emitEvent}),this._updateAncestors(!!t.onlySelf),this._onDisabledChange.forEach(function(t){return t(!1)})},t.prototype._updateAncestors=function(t){this._parent&&!t&&(this._parent.updateValueAndValidity(),this._parent._updatePristine(),this._parent._updateTouched())},t.prototype.setParent=function(t){this._parent=t},t.prototype.updateValueAndValidity=function(t){void 0===t&&(t={}),this._setInitialStatus(),this._updateValue(),this.enabled&&(this._cancelExistingSubscription(),this.errors=this._runValidator(),this.status=this._calculateStatus(),\"VALID\"!==this.status&&\"PENDING\"!==this.status||this._runAsyncValidator(t.emitEvent)),!1!==t.emitEvent&&(this.valueChanges.emit(this.value),this.statusChanges.emit(this.status)),this._parent&&!t.onlySelf&&this._parent.updateValueAndValidity(t)},t.prototype._updateTreeValidity=function(t){void 0===t&&(t={emitEvent:!0}),this._forEachChild(function(e){return e._updateTreeValidity(t)}),this.updateValueAndValidity({onlySelf:!0,emitEvent:t.emitEvent})},t.prototype._setInitialStatus=function(){this.status=this._allControlsDisabled()?\"DISABLED\":\"VALID\"},t.prototype._runValidator=function(){return this.validator?this.validator(this):null},t.prototype._runAsyncValidator=function(t){var e=this;if(this.asyncValidator){this.status=\"PENDING\";var n=o(this.asyncValidator(this));this._asyncValidationSubscription=n.subscribe(function(n){return e.setErrors(n,{emitEvent:t})})}},t.prototype._cancelExistingSubscription=function(){this._asyncValidationSubscription&&this._asyncValidationSubscription.unsubscribe()},t.prototype.setErrors=function(t,e){void 0===e&&(e={}),this.errors=t,this._updateControlsErrors(!1!==e.emitEvent)},t.prototype.get=function(t){return function(t,e,n){return null==e?null:(e instanceof Array||(e=e.split(n)),e instanceof Array&&0===e.length?null:e.reduce(function(t,e){return t instanceof J?t.controls[e]||null:t instanceof tt?t.at(e)||null:null},t))}(this,t,\".\")},t.prototype.getError=function(t,e){var n=e?this.get(e):this;return n&&n.errors?n.errors[t]:null},t.prototype.hasError=function(t,e){return!!this.getError(t,e)},Object.defineProperty(t.prototype,\"root\",{get:function(){for(var t=this;t._parent;)t=t._parent;return t},enumerable:!0,configurable:!0}),t.prototype._updateControlsErrors=function(t){this.status=this._calculateStatus(),t&&this.statusChanges.emit(this.status),this._parent&&this._parent._updateControlsErrors(t)},t.prototype._initObservables=function(){this.valueChanges=new x.l,this.statusChanges=new x.l},t.prototype._calculateStatus=function(){return this._allControlsDisabled()?\"DISABLED\":this.errors?\"INVALID\":this._anyControlsHaveStatus(\"PENDING\")?\"PENDING\":this._anyControlsHaveStatus(\"INVALID\")?\"INVALID\":\"VALID\"},t.prototype._anyControlsHaveStatus=function(t){return this._anyControls(function(e){return e.status===t})},t.prototype._anyControlsDirty=function(){return this._anyControls(function(t){return t.dirty})},t.prototype._anyControlsTouched=function(){return this._anyControls(function(t){return t.touched})},t.prototype._updatePristine=function(t){void 0===t&&(t={}),this.pristine=!this._anyControlsDirty(),this._parent&&!t.onlySelf&&this._parent._updatePristine(t)},t.prototype._updateTouched=function(t){void 0===t&&(t={}),this.touched=this._anyControlsTouched(),this._parent&&!t.onlySelf&&this._parent._updateTouched(t)},t.prototype._isBoxedValue=function(t){return\"object\"==typeof t&&null!==t&&2===Object.keys(t).length&&\"value\"in t&&\"disabled\"in t},t.prototype._registerOnCollectionChange=function(t){this._onCollectionChange=t},t.prototype._setUpdateStrategy=function(t){O(t)&&null!=t.updateOn&&(this._updateOn=t.updateOn)},t}(),Q=function(t){function e(e,n,i){void 0===e&&(e=null);var r=t.call(this,w(n),C(i,n))||this;return r._onChange=[],r._applyFormState(e),r._setUpdateStrategy(n),r.updateValueAndValidity({onlySelf:!0,emitEvent:!1}),r._initObservables(),r}return Object(E.__extends)(e,t),e.prototype.setValue=function(t,e){var n=this;void 0===e&&(e={}),this.value=this._pendingValue=t,this._onChange.length&&!1!==e.emitModelToViewChange&&this._onChange.forEach(function(t){return t(n.value,!1!==e.emitViewToModelChange)}),this.updateValueAndValidity(e)},e.prototype.patchValue=function(t,e){void 0===e&&(e={}),this.setValue(t,e)},e.prototype.reset=function(t,e){void 0===t&&(t=null),void 0===e&&(e={}),this._applyFormState(t),this.markAsPristine(e),this.markAsUntouched(e),this.setValue(this.value,e)},e.prototype._updateValue=function(){},e.prototype._anyControls=function(t){return!1},e.prototype._allControlsDisabled=function(){return this.disabled},e.prototype.registerOnChange=function(t){this._onChange.push(t)},e.prototype._clearChangeFns=function(){this._onChange=[],this._onDisabledChange=[],this._onCollectionChange=function(){}},e.prototype.registerOnDisabledChange=function(t){this._onDisabledChange.push(t)},e.prototype._forEachChild=function(t){},e.prototype._syncPendingControls=function(){return\"submit\"===this.updateOn&&(this.setValue(this._pendingValue,{onlySelf:!0,emitModelToViewChange:!1}),this._pendingDirty&&this.markAsDirty(),this._pendingTouched&&this.markAsTouched(),!0)},e.prototype._applyFormState=function(t){this._isBoxedValue(t)?(this.value=this._pendingValue=t.value,t.disabled?this.disable({onlySelf:!0,emitEvent:!1}):this.enable({onlySelf:!0,emitEvent:!1})):this.value=this._pendingValue=t},e}(K),J=function(t){function e(e,n,i){var r=t.call(this,w(n),C(i,n))||this;return r.controls=e,r._initObservables(),r._setUpdateStrategy(n),r._setUpControls(),r.updateValueAndValidity({onlySelf:!0,emitEvent:!1}),r}return Object(E.__extends)(e,t),e.prototype.registerControl=function(t,e){return this.controls[t]?this.controls[t]:(this.controls[t]=e,e.setParent(this),e._registerOnCollectionChange(this._onCollectionChange),e)},e.prototype.addControl=function(t,e){this.registerControl(t,e),this.updateValueAndValidity(),this._onCollectionChange()},e.prototype.removeControl=function(t){this.controls[t]&&this.controls[t]._registerOnCollectionChange(function(){}),delete this.controls[t],this.updateValueAndValidity(),this._onCollectionChange()},e.prototype.setControl=function(t,e){this.controls[t]&&this.controls[t]._registerOnCollectionChange(function(){}),delete this.controls[t],e&&this.registerControl(t,e),this.updateValueAndValidity(),this._onCollectionChange()},e.prototype.contains=function(t){return this.controls.hasOwnProperty(t)&&this.controls[t].enabled},e.prototype.setValue=function(t,e){var n=this;void 0===e&&(e={}),this._checkAllValuesPresent(t),Object.keys(t).forEach(function(i){n._throwIfControlMissing(i),n.controls[i].setValue(t[i],{onlySelf:!0,emitEvent:e.emitEvent})}),this.updateValueAndValidity(e)},e.prototype.patchValue=function(t,e){var n=this;void 0===e&&(e={}),Object.keys(t).forEach(function(i){n.controls[i]&&n.controls[i].patchValue(t[i],{onlySelf:!0,emitEvent:e.emitEvent})}),this.updateValueAndValidity(e)},e.prototype.reset=function(t,e){void 0===t&&(t={}),void 0===e&&(e={}),this._forEachChild(function(n,i){n.reset(t[i],{onlySelf:!0,emitEvent:e.emitEvent})}),this.updateValueAndValidity(e),this._updatePristine(e),this._updateTouched(e)},e.prototype.getRawValue=function(){return this._reduceChildren({},function(t,e,n){return t[n]=e instanceof Q?e.value:e.getRawValue(),t})},e.prototype._syncPendingControls=function(){var t=this._reduceChildren(!1,function(t,e){return!!e._syncPendingControls()||t});return t&&this.updateValueAndValidity({onlySelf:!0}),t},e.prototype._throwIfControlMissing=function(t){if(!Object.keys(this.controls).length)throw new Error(\"\\n        There are no form controls registered with this group yet.  If you're using ngModel,\\n        you may want to check next tick (e.g. use setTimeout).\\n      \");if(!this.controls[t])throw new Error(\"Cannot find form control with name: \"+t+\".\")},e.prototype._forEachChild=function(t){var e=this;Object.keys(this.controls).forEach(function(n){return t(e.controls[n],n)})},e.prototype._setUpControls=function(){var t=this;this._forEachChild(function(e){e.setParent(t),e._registerOnCollectionChange(t._onCollectionChange)})},e.prototype._updateValue=function(){this.value=this._reduceValue()},e.prototype._anyControls=function(t){var e=this,n=!1;return this._forEachChild(function(i,r){n=n||e.contains(r)&&t(i)}),n},e.prototype._reduceValue=function(){var t=this;return this._reduceChildren({},function(e,n,i){return(n.enabled||t.disabled)&&(e[i]=n.value),e})},e.prototype._reduceChildren=function(t,e){var n=t;return this._forEachChild(function(t,i){n=e(n,t,i)}),n},e.prototype._allControlsDisabled=function(){for(var t=0,e=Object.keys(this.controls);t<e.length;t++){if(this.controls[e[t]].enabled)return!1}return Object.keys(this.controls).length>0||this.disabled},e.prototype._checkAllValuesPresent=function(t){this._forEachChild(function(e,n){if(void 0===t[n])throw new Error(\"Must supply a value for form control with name: '\"+n+\"'.\")})},e}(K),tt=function(t){function e(e,n,i){var r=t.call(this,w(n),C(i,n))||this;return r.controls=e,r._initObservables(),r._setUpdateStrategy(n),r._setUpControls(),r.updateValueAndValidity({onlySelf:!0,emitEvent:!1}),r}return Object(E.__extends)(e,t),e.prototype.at=function(t){return this.controls[t]},e.prototype.push=function(t){this.controls.push(t),this._registerControl(t),this.updateValueAndValidity(),this._onCollectionChange()},e.prototype.insert=function(t,e){this.controls.splice(t,0,e),this._registerControl(e),this.updateValueAndValidity(),this._onCollectionChange()},e.prototype.removeAt=function(t){this.controls[t]&&this.controls[t]._registerOnCollectionChange(function(){}),this.controls.splice(t,1),this.updateValueAndValidity(),this._onCollectionChange()},e.prototype.setControl=function(t,e){this.controls[t]&&this.controls[t]._registerOnCollectionChange(function(){}),this.controls.splice(t,1),e&&(this.controls.splice(t,0,e),this._registerControl(e)),this.updateValueAndValidity(),this._onCollectionChange()},Object.defineProperty(e.prototype,\"length\",{get:function(){return this.controls.length},enumerable:!0,configurable:!0}),e.prototype.setValue=function(t,e){var n=this;void 0===e&&(e={}),this._checkAllValuesPresent(t),t.forEach(function(t,i){n._throwIfControlMissing(i),n.at(i).setValue(t,{onlySelf:!0,emitEvent:e.emitEvent})}),this.updateValueAndValidity(e)},e.prototype.patchValue=function(t,e){var n=this;void 0===e&&(e={}),t.forEach(function(t,i){n.at(i)&&n.at(i).patchValue(t,{onlySelf:!0,emitEvent:e.emitEvent})}),this.updateValueAndValidity(e)},e.prototype.reset=function(t,e){void 0===t&&(t=[]),void 0===e&&(e={}),this._forEachChild(function(n,i){n.reset(t[i],{onlySelf:!0,emitEvent:e.emitEvent})}),this.updateValueAndValidity(e),this._updatePristine(e),this._updateTouched(e)},e.prototype.getRawValue=function(){return this.controls.map(function(t){return t instanceof Q?t.value:t.getRawValue()})},e.prototype._syncPendingControls=function(){var t=this.controls.reduce(function(t,e){return!!e._syncPendingControls()||t},!1);return t&&this.updateValueAndValidity({onlySelf:!0}),t},e.prototype._throwIfControlMissing=function(t){if(!this.controls.length)throw new Error(\"\\n        There are no form controls registered with this array yet.  If you're using ngModel,\\n        you may want to check next tick (e.g. use setTimeout).\\n      \");if(!this.at(t))throw new Error(\"Cannot find form control at index \"+t)},e.prototype._forEachChild=function(t){this.controls.forEach(function(e,n){t(e,n)})},e.prototype._updateValue=function(){var t=this;this.value=this.controls.filter(function(e){return e.enabled||t.disabled}).map(function(t){return t.value})},e.prototype._anyControls=function(t){return this.controls.some(function(e){return e.enabled&&t(e)})},e.prototype._setUpControls=function(){var t=this;this._forEachChild(function(e){return t._registerControl(e)})},e.prototype._checkAllValuesPresent=function(t){this._forEachChild(function(e,n){if(void 0===t[n])throw new Error(\"Must supply a value for form control at index: \"+n+\".\")})},e.prototype._allControlsDisabled=function(){for(var t=0,e=this.controls;t<e.length;t++){if(e[t].enabled)return!1}return this.controls.length>0||this.disabled},e.prototype._registerControl=function(t){t.setParent(this),t._registerOnCollectionChange(this._onCollectionChange)},e}(K),et=Promise.resolve(null),nt=function(t){function e(e,n){var i=t.call(this)||this;return i.submitted=!1,i._directives=[],i.ngSubmit=new x.l,i.form=new J({},_(e),v(n)),i}return Object(E.__extends)(e,t),e.prototype.ngAfterViewInit=function(){this._setUpdateStrategy()},Object.defineProperty(e.prototype,\"formDirective\",{get:function(){return this},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,\"control\",{get:function(){return this.form},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,\"path\",{get:function(){return[]},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,\"controls\",{get:function(){return this.form.controls},enumerable:!0,configurable:!0}),e.prototype.addControl=function(t){var e=this;et.then(function(){var n=e._findContainer(t.path);t.control=n.registerControl(t.name,t.control),c(t.control,t),t.control.updateValueAndValidity({emitEvent:!1}),e._directives.push(t)})},e.prototype.getControl=function(t){return this.form.get(t.path)},e.prototype.removeControl=function(t){var e=this;et.then(function(){var n=e._findContainer(t.path);n&&n.removeControl(t.name),b(e._directives,t)})},e.prototype.addFormGroup=function(t){var e=this;et.then(function(){var n=e._findContainer(t.path),i=new J({});h(i,t),n.registerControl(t.name,i),i.updateValueAndValidity({emitEvent:!1})})},e.prototype.removeFormGroup=function(t){var e=this;et.then(function(){var n=e._findContainer(t.path);n&&n.removeControl(t.name)})},e.prototype.getFormGroup=function(t){return this.form.get(t.path)},e.prototype.updateModel=function(t,e){var n=this;et.then(function(){n.form.get(t.path).setValue(e)})},e.prototype.setValue=function(t){this.control.setValue(t)},e.prototype.onSubmit=function(t){return this.submitted=!0,m(this.form,this._directives),this.ngSubmit.emit(t),!1},e.prototype.onReset=function(){this.resetForm()},e.prototype.resetForm=function(t){void 0===t&&(t=void 0),this.form.reset(t),this.submitted=!1},e.prototype._setUpdateStrategy=function(){this.options&&null!=this.options.updateOn&&(this.form._updateOn=this.options.updateOn)},e.prototype._findContainer=function(t){return t.pop(),t.length?this.form.get(t):this.form},e}(j),it={formControlName:'\\n    <div [formGroup]=\"myGroup\">\\n      <input formControlName=\"firstName\">\\n    </div>\\n\\n    In your class:\\n\\n    this.myGroup = new FormGroup({\\n       firstName: new FormControl()\\n    });',formGroupName:'\\n    <div [formGroup]=\"myGroup\">\\n       <div formGroupName=\"person\">\\n          <input formControlName=\"firstName\">\\n       </div>\\n    </div>\\n\\n    In your class:\\n\\n    this.myGroup = new FormGroup({\\n       person: new FormGroup({ firstName: new FormControl() })\\n    });',formArrayName:'\\n    <div [formGroup]=\"myGroup\">\\n      <div formArrayName=\"cities\">\\n        <div *ngFor=\"let city of cityArray.controls; index as i\">\\n          <input [formControlName]=\"i\">\\n        </div>\\n      </div>\\n    </div>\\n\\n    In your class:\\n\\n    this.cityArray = new FormArray([new FormControl(\\'SF\\')]);\\n    this.myGroup = new FormGroup({\\n      cities: this.cityArray\\n    });',ngModelGroup:'\\n    <form>\\n       <div ngModelGroup=\"person\">\\n          <input [(ngModel)]=\"person.name\" name=\"firstName\">\\n       </div>\\n    </form>',ngModelWithFormGroup:'\\n    <div [formGroup]=\"myGroup\">\\n       <input formControlName=\"firstName\">\\n       <input [(ngModel)]=\"showMoreControls\" [ngModelOptions]=\"{standalone: true}\">\\n    </div>\\n  '},rt=function(){function t(){}return t.modelParentException=function(){throw new Error('\\n      ngModel cannot be used to register form controls with a parent formGroup directive.  Try using\\n      formGroup\\'s partner directive \"formControlName\" instead.  Example:\\n\\n      '+it.formControlName+\"\\n\\n      Or, if you'd like to avoid registering this form control, indicate that it's standalone in ngModelOptions:\\n\\n      Example:\\n\\n      \"+it.ngModelWithFormGroup)},t.formGroupNameException=function(){throw new Error(\"\\n      ngModel cannot be used to register form controls with a parent formGroupName or formArrayName directive.\\n\\n      Option 1: Use formControlName instead of ngModel (reactive strategy):\\n\\n      \"+it.formGroupName+\"\\n\\n      Option 2:  Update ngModel's parent be ngModelGroup (template-driven strategy):\\n\\n      \"+it.ngModelGroup)},t.missingNameException=function(){throw new Error('If ngModel is used within a form tag, either the name attribute must be set or the form\\n      control must be defined as \\'standalone\\' in ngModelOptions.\\n\\n      Example 1: <input [(ngModel)]=\"person.firstName\" name=\"first\">\\n      Example 2: <input [(ngModel)]=\"person.firstName\" [ngModelOptions]=\"{standalone: true}\">')},t.modelGroupParentException=function(){throw new Error(\"\\n      ngModelGroup cannot be used with a parent formGroup directive.\\n\\n      Option 1: Use formGroupName instead of ngModelGroup (reactive strategy):\\n\\n      \"+it.formGroupName+\"\\n\\n      Option 2:  Use a regular form tag instead of the formGroup directive (template-driven strategy):\\n\\n      \"+it.ngModelGroup)},t}(),ot=function(t){function e(e,n,i){var r=t.call(this)||this;return r._parent=e,r._validators=n,r._asyncValidators=i,r}return Object(E.__extends)(e,t),e.prototype._checkParentType=function(){this._parent instanceof e||this._parent instanceof nt||rt.modelGroupParentException()},e}(G),st=Promise.resolve(null),at=function(t){function e(e,n,i,r){var o=t.call(this)||this;return o.control=new Q,o._registered=!1,o.update=new x.l,o._parent=e,o._rawValidators=n||[],o._rawAsyncValidators=i||[],o.valueAccessor=g(o,r),o}return Object(E.__extends)(e,t),e.prototype.ngOnChanges=function(t){this._checkForErrors(),this._registered||this._setUpControl(),\"isDisabled\"in t&&this._updateDisabled(t),y(t,this.viewModel)&&(this._updateValue(this.model),this.viewModel=this.model)},e.prototype.ngOnDestroy=function(){this.formDirective&&this.formDirective.removeControl(this)},Object.defineProperty(e.prototype,\"path\",{get:function(){return this._parent?u(this.name,this._parent):[this.name]},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,\"formDirective\",{get:function(){return this._parent?this._parent.formDirective:null},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,\"validator\",{get:function(){return _(this._rawValidators)},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,\"asyncValidator\",{get:function(){return v(this._rawAsyncValidators)},enumerable:!0,configurable:!0}),e.prototype.viewToModelUpdate=function(t){this.viewModel=t,this.update.emit(t)},e.prototype._setUpControl=function(){this._setUpdateStrategy(),this._isStandalone()?this._setUpStandalone():this.formDirective.addControl(this),this._registered=!0},e.prototype._setUpdateStrategy=function(){this.options&&null!=this.options.updateOn&&(this.control._updateOn=this.options.updateOn)},e.prototype._isStandalone=function(){return!this._parent||!(!this.options||!this.options.standalone)},e.prototype._setUpStandalone=function(){c(this.control,this),this.control.updateValueAndValidity({emitEvent:!1})},e.prototype._checkForErrors=function(){this._isStandalone()||this._checkParentType(),this._checkName()},e.prototype._checkParentType=function(){!(this._parent instanceof ot)&&this._parent instanceof G?rt.formGroupNameException():this._parent instanceof ot||this._parent instanceof nt||rt.modelParentException()},e.prototype._checkName=function(){this.options&&this.options.name&&(this.name=this.options.name),this._isStandalone()||this.name||rt.missingNameException()},e.prototype._updateValue=function(t){var e=this;st.then(function(){e.control.setValue(t,{emitViewToModelChange:!1})})},e.prototype._updateDisabled=function(t){var e=this,n=t.isDisabled.currentValue,i=\"\"===n||n&&\"false\"!==n;st.then(function(){i&&!e.control.disabled?e.control.disable():!i&&e.control.disabled&&e.control.enable()})},e}(B),lt=function(){function t(){}return t.controlParentException=function(){throw new Error(\"formControlName must be used with a parent formGroup directive.  You'll want to add a formGroup\\n       directive and pass it an existing FormGroup instance (you can create one in your class).\\n\\n      Example:\\n\\n      \"+it.formControlName)},t.ngModelGroupException=function(){throw new Error('formControlName cannot be used with an ngModelGroup parent. It is only compatible with parents\\n       that also have a \"form\" prefix: formGroupName, formArrayName, or formGroup.\\n\\n       Option 1:  Update the parent to be formGroupName (reactive form strategy)\\n\\n        '+it.formGroupName+\"\\n\\n        Option 2: Use ngModel instead of formControlName (template-driven strategy)\\n\\n        \"+it.ngModelGroup)},t.missingFormException=function(){throw new Error(\"formGroup expects a FormGroup instance. Please pass one in.\\n\\n       Example:\\n\\n       \"+it.formControlName)},t.groupParentException=function(){throw new Error(\"formGroupName must be used with a parent formGroup directive.  You'll want to add a formGroup\\n      directive and pass it an existing FormGroup instance (you can create one in your class).\\n\\n      Example:\\n\\n      \"+it.formGroupName)},t.arrayParentException=function(){throw new Error(\"formArrayName must be used with a parent formGroup directive.  You'll want to add a formGroup\\n       directive and pass it an existing FormGroup instance (you can create one in your class).\\n\\n        Example:\\n\\n        \"+it.formArrayName)},t.disabledAttrWarning=function(){console.warn(\"\\n      It looks like you're using the disabled attribute with a reactive form directive. If you set disabled to true\\n      when you set up this control in your component class, the disabled attribute will actually be set in the DOM for\\n      you. We recommend using this approach to avoid 'changed after checked' errors.\\n       \\n      Example: \\n      form = new FormGroup({\\n        first: new FormControl({value: 'Nancy', disabled: true}, Validators.required),\\n        last: new FormControl('Drew', Validators.required)\\n      });\\n    \")},t}(),ut=function(t){function e(e,n){var i=t.call(this)||this;return i._validators=e,i._asyncValidators=n,i.submitted=!1,i.directives=[],i.form=null,i.ngSubmit=new x.l,i}return Object(E.__extends)(e,t),e.prototype.ngOnChanges=function(t){this._checkFormPresent(),t.hasOwnProperty(\"form\")&&(this._updateValidators(),this._updateDomValue(),this._updateRegistrations())},Object.defineProperty(e.prototype,\"formDirective\",{get:function(){return this},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,\"control\",{get:function(){return this.form},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,\"path\",{get:function(){return[]},enumerable:!0,configurable:!0}),e.prototype.addControl=function(t){var e=this.form.get(t.path);return c(e,t),e.updateValueAndValidity({emitEvent:!1}),this.directives.push(t),e},e.prototype.getControl=function(t){return this.form.get(t.path)},e.prototype.removeControl=function(t){b(this.directives,t)},e.prototype.addFormGroup=function(t){var e=this.form.get(t.path);h(e,t),e.updateValueAndValidity({emitEvent:!1})},e.prototype.removeFormGroup=function(t){},e.prototype.getFormGroup=function(t){return this.form.get(t.path)},e.prototype.addFormArray=function(t){var e=this.form.get(t.path);h(e,t),e.updateValueAndValidity({emitEvent:!1})},e.prototype.removeFormArray=function(t){},e.prototype.getFormArray=function(t){return this.form.get(t.path)},e.prototype.updateModel=function(t,e){this.form.get(t.path).setValue(e)},e.prototype.onSubmit=function(t){return this.submitted=!0,m(this.form,this.directives),this.ngSubmit.emit(t),!1},e.prototype.onReset=function(){this.resetForm()},e.prototype.resetForm=function(t){void 0===t&&(t=void 0),this.form.reset(t),this.submitted=!1},e.prototype._updateDomValue=function(){var t=this;this.directives.forEach(function(e){var n=t.form.get(e.path);e.control!==n&&(!function(t,e){e.valueAccessor.registerOnChange(function(){return f(e)}),e.valueAccessor.registerOnTouched(function(){return f(e)}),e._rawValidators.forEach(function(t){t.registerOnValidatorChange&&t.registerOnValidatorChange(null)}),e._rawAsyncValidators.forEach(function(t){t.registerOnValidatorChange&&t.registerOnValidatorChange(null)}),t&&t._clearChangeFns()}(e.control,e),n&&c(n,e),e.control=n)}),this.form._updateTreeValidity({emitEvent:!1})},e.prototype._updateRegistrations=function(){var t=this;this.form._registerOnCollectionChange(function(){return t._updateDomValue()}),this._oldForm&&this._oldForm._registerOnCollectionChange(function(){}),this._oldForm=this.form},e.prototype._updateValidators=function(){var t=_(this._validators);this.form.validator=M.compose([this.form.validator,t]);var e=v(this._asyncValidators);this.form.asyncValidator=M.composeAsync([this.form.asyncValidator,e])},e.prototype._checkFormPresent=function(){this.form||lt.missingFormException()},e}(j),ct=function(t){function e(e,n,i){var r=t.call(this)||this;return r._parent=e,r._validators=n,r._asyncValidators=i,r}return Object(E.__extends)(e,t),e.prototype._checkParentType=function(){S(this._parent)&&lt.groupParentException()},e}(G),pt=function(t){function e(e,n,i){var r=t.call(this)||this;return r._parent=e,r._validators=n,r._asyncValidators=i,r}return Object(E.__extends)(e,t),e.prototype.ngOnInit=function(){this._checkParentType(),this.formDirective.addFormArray(this)},e.prototype.ngOnDestroy=function(){this.formDirective&&this.formDirective.removeFormArray(this)},Object.defineProperty(e.prototype,\"control\",{get:function(){return this.formDirective.getFormArray(this)},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,\"formDirective\",{get:function(){return this._parent?this._parent.formDirective:null},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,\"path\",{get:function(){return u(this.name,this._parent)},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,\"validator\",{get:function(){return _(this._validators)},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,\"asyncValidator\",{get:function(){return v(this._asyncValidators)},enumerable:!0,configurable:!0}),e.prototype._checkParentType=function(){S(this._parent)&&lt.arrayParentException()},e}(j),ht=function(t){function e(e,n,i,r){var o=t.call(this)||this;return o._added=!1,o.update=new x.l,o._parent=e,o._rawValidators=n||[],o._rawAsyncValidators=i||[],o.valueAccessor=g(o,r),o}return Object(E.__extends)(e,t),Object.defineProperty(e.prototype,\"isDisabled\",{set:function(t){lt.disabledAttrWarning()},enumerable:!0,configurable:!0}),e.prototype.ngOnChanges=function(t){this._added||this._setUpControl(),y(t,this.viewModel)&&(this.viewModel=this.model,this.formDirective.updateModel(this,this.model))},e.prototype.ngOnDestroy=function(){this.formDirective&&this.formDirective.removeControl(this)},e.prototype.viewToModelUpdate=function(t){this.viewModel=t,this.update.emit(t)},Object.defineProperty(e.prototype,\"path\",{get:function(){return u(this.name,this._parent)},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,\"formDirective\",{get:function(){return this._parent?this._parent.formDirective:null},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,\"validator\",{get:function(){return _(this._rawValidators)},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,\"asyncValidator\",{get:function(){return v(this._rawAsyncValidators)},enumerable:!0,configurable:!0}),e.prototype._checkParentType=function(){!(this._parent instanceof ct)&&this._parent instanceof G?lt.ngModelGroupException():this._parent instanceof ct||this._parent instanceof ut||this._parent instanceof pt||lt.controlParentException()},e.prototype._setUpControl=function(){this._checkParentType(),this.control=this.formDirective.addControl(this),this.control.disabled&&this.valueAccessor.setDisabledState&&this.valueAccessor.setDisabledState(!0),this._added=!0},e}(B),ft=function(){function t(){}return t.prototype.group=function(t,e){void 0===e&&(e=null);var n=this._reduceControls(t);return new J(n,null!=e?e.validator:null,null!=e?e.asyncValidator:null)},t.prototype.control=function(t,e,n){return new Q(t,e,n)},t.prototype.array=function(t,e,n){var i=this,r=t.map(function(t){return i._createControl(t)});return new tt(r,e,n)},t.prototype._reduceControls=function(t){var e=this,n={};return Object.keys(t).forEach(function(i){n[i]=e._createControl(t[i])}),n},t.prototype._createControl=function(t){if(t instanceof Q||t instanceof J||t instanceof tt)return t;if(Array.isArray(t)){return this.control(t[0],t.length>1?t[1]:null,t.length>2?t[2]:null)}return this.control(t)},t}(),dt=function(){return function(){}}(),_t=function(){return function(){}}(),vt=function(){return function(){}}(),yt=function(){return function(){}}()},function(t,e,n){\"use strict\";n.d(e,\"a\",function(){return i});var i=function(){return function(){}}()},function(t,e,n){\"use strict\";function i(t){return o._22(0,[(t()(),o.Z(0,0,null,null,1,\"ion-icon\",[[\"name\",\"reorder\"],[\"role\",\"img\"]],[[2,\"hide\",null]],null,null,null,null)),o.Y(1,147456,null,0,l.a,[a.a,o.j,o.z],{name:[0,\"name\"]},null)],function(t,e){t(e,1,0,\"reorder\")},function(t,e){t(e,0,0,o._13(e,1)._hidden)})}function r(t){return o._22(2,[o._18(671088640,1,{viewLabel:0}),o._12(null,0),(t()(),o.Z(2,0,null,null,8,\"div\",[[\"class\",\"item-inner\"]],null,null,null,null,null)),(t()(),o.Z(3,0,null,null,4,\"div\",[[\"class\",\"input-wrapper\"]],null,null,null,null,null)),o._12(null,1),(t()(),o.U(16777216,null,null,1,null,function(t){return o._22(0,[(t()(),o.Z(0,0,null,null,2,\"ion-label\",[],null,null,null,null,null)),o.Y(1,16384,[[1,4]],0,s.a,[a.a,o.j,o.z,[8,null],[8,null],[8,null],[8,null]],null,null),o._12(null,2)],null,null)})),o.Y(6,16384,null,0,p.i,[o.I,o.F],{ngIf:[0,\"ngIf\"]},null),o._12(null,3),o._12(null,4),(t()(),o.U(16777216,null,null,1,null,function(t){return o._22(0,[(t()(),o.Z(0,0,null,null,1,\"ion-reorder\",[],null,[[null,\"click\"]],function(t,e,n){var i=!0;return\"click\"===e&&(i=!1!==o._13(t,1).onClick(n)&&i),i},i,c)),o.Y(1,49152,null,0,u.a,[o.j],null,null)],null,null)})),o.Y(10,16384,null,0,p.i,[o.I,o.F],{ngIf:[0,\"ngIf\"]},null),(t()(),o.Z(11,0,null,null,0,\"div\",[[\"class\",\"button-effect\"]],null,null,null,null,null))],function(t,e){var n=e.component;t(e,6,0,n._viewLabel);t(e,10,0,n._hasReorder)},null)}var o=n(0),s=n(34),a=n(1),l=n(30),u=n(101),c=o.X({encapsulation:2,styles:[],data:{}}),p=n(28);n(20),n(19),n(23);n.d(e,\"a\",function(){return h}),e.b=r;var h=o.X({encapsulation:2,styles:[],data:{}})},function(t,e,n){\"use strict\";n(0),n(1),n(6);var i=n(15),r=n(29),o=n(18),s=n(88),a=n(35),l=this&&this.__extends||function(){var t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n])};return function(e,n){function i(){this.constructor=e}t(e,n),e.prototype=null===n?Object.create(n):(i.prototype=n.prototype,new i)}}(),u=function(t){function e(e,n,r,o){var s=t.call(this,e,n.getNativeElement(),{maxAngle:20,threshold:5,zone:!1,domController:o,gesture:r.createGesture({name:i.c,priority:i.h,disableScroll:!0})})||this;return s.list=n,s.preSelectedContainer=null,s.selectedContainer=null,s.openContainer=null,s}return l(e,t),e.prototype.canStart=function(t){if(this.selectedContainer)return!1;var e=function(t){var e=t.target.closest(\"ion-item-sliding\");return e?e.$ionComponent:null}(t);if(!e)return this.closeOpened(),!1;e!==this.openContainer&&this.closeOpened();var n=Object(a.f)(t);return this.preSelectedContainer=e,this.firstCoordX=n.x,this.firstTimestamp=Date.now(),!0},e.prototype.onDragStart=function(t){t.preventDefault();var e=Object(a.f)(t);this.selectedContainer=this.openContainer=this.preSelectedContainer,this.selectedContainer.startSliding(e.x)},e.prototype.onDragMove=function(t){t.preventDefault(),this.selectedContainer.moveSliding(Object(a.f)(t).x)},e.prototype.onDragEnd=function(t){t.preventDefault();var e=Object(a.f)(t).x-this.firstCoordX,n=Date.now()-this.firstTimestamp;this.selectedContainer.endSliding(e/n),this.selectedContainer=null,this.preSelectedContainer=null},e.prototype.notCaptured=function(t){(function(t){return!!t.target.closest(\"ion-item-options>button\")})(t)||this.closeOpened()},e.prototype.closeOpened=function(){return this.selectedContainer=null,!!this.openContainer&&(this.openContainer.close(),this.openContainer=null,!0)},e.prototype.destroy=function(){t.prototype.destroy.call(this),this.closeOpened(),this.list=null,this.preSelectedContainer=null,this.selectedContainer=null,this.openContainer=null},e}(s.a);n(2);n.d(e,\"a\",function(){return p});var c=this&&this.__extends||function(){var t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n])};return function(e,n){function i(){this.constructor=e}t(e,n),e.prototype=null===n?Object.create(n):(i.prototype=n.prototype,new i)}}(),p=function(t){function e(e,n,i,r,o,s){var a=t.call(this,e,n,i,\"list\")||this;return a._plt=r,a._gestureCtrl=o,a._domCtrl=s,a._enableSliding=!0,a._containsSlidingItems=!1,a}return c(e,t),Object.defineProperty(e.prototype,\"sliding\",{get:function(){return this._enableSliding},set:function(t){this._enableSliding=Object(o.o)(t),this._updateSlidingState()},enumerable:!0,configurable:!0}),e.prototype.containsSlidingItem=function(t){this._containsSlidingItems=t,this._updateSlidingState()},e.prototype._updateSlidingState=function(){this._enableSliding&&this._containsSlidingItems?this._slidingGesture||(this._slidingGesture=new u(this._plt,this,this._gestureCtrl,this._domCtrl),this._slidingGesture.listen()):(this._slidingGesture&&this._slidingGesture.destroy(),this._slidingGesture=null)},e.prototype.closeSlidingItems=function(){this._slidingGesture&&this._slidingGesture.closeOpened()},e.prototype.destroy=function(){this._slidingGesture&&this._slidingGesture.destroy()},e}(r.a)},function(t,e,n){\"use strict\";function i(t){return t.replace(/\\/index.html$/,\"\")}function r(t){var e=t.toLowerCase().replace(/_/g,\"-\"),n=d[e];if(n)return n;var i=e.split(\"-\")[0];if(n=d[i])return n;if(\"en\"===i)return f;throw new Error('Missing locale data for the locale \"'+t+'\".')}n.d(e,\"j\",function(){return m}),n.d(e,\"k\",function(){return y}),n.d(e,\"t\",function(){return function(t,e){e=encodeURIComponent(e);for(var n=0,i=t.split(\";\");n<i.length;n++){var r=i[n],o=r.indexOf(\"=\"),s=-1==o?[r,\"\"]:[r.slice(0,o),r.slice(o+1)],a=s[1];if(s[0].trim()===e)return decodeURIComponent(a)}return null}}),n.d(e,\"b\",function(){return A}),n.d(e,\"g\",function(){return g}),n.d(e,\"h\",function(){return w}),n.d(e,\"i\",function(){return O}),n.d(e,\"l\",function(){return P}),n.d(e,\"m\",function(){return x}),n.d(e,\"n\",function(){return T}),n.d(e,\"o\",function(){return k}),n.d(e,\"c\",function(){return I}),n.d(e,\"r\",function(){return j}),n.d(e,\"q\",function(){return a}),n.d(e,\"f\",function(){return l}),n.d(e,\"a\",function(){return u}),n.d(e,\"d\",function(){return p}),n.d(e,\"p\",function(){return h}),n.d(e,\"e\",function(){return c}),n.d(e,\"s\",function(){return v});var o=n(0),s=n(3),a=function(){return function(){}}(),l=function(){return function(){}}(),u=new o.n(\"appBaseHref\"),c=function(){function t(e){var n=this;this._subject=new o.l,this._platformStrategy=e;var r=this._platformStrategy.getBaseHref();this._baseHref=t.stripTrailingSlash(i(r)),this._platformStrategy.onPopState(function(t){n._subject.emit({url:n.path(!0),pop:!0,type:t.type})})}return t.prototype.path=function(t){return void 0===t&&(t=!1),this.normalize(this._platformStrategy.path(t))},t.prototype.isCurrentPathEqualTo=function(e,n){return void 0===n&&(n=\"\"),this.path()==this.normalize(e+t.normalizeQueryParams(n))},t.prototype.normalize=function(e){return t.stripTrailingSlash(function(t,e){return t&&e.startsWith(t)?e.substring(t.length):e}(this._baseHref,i(e)))},t.prototype.prepareExternalUrl=function(t){return t&&\"/\"!==t[0]&&(t=\"/\"+t),this._platformStrategy.prepareExternalUrl(t)},t.prototype.go=function(t,e){void 0===e&&(e=\"\"),this._platformStrategy.pushState(null,\"\",t,e)},t.prototype.replaceState=function(t,e){void 0===e&&(e=\"\"),this._platformStrategy.replaceState(null,\"\",t,e)},t.prototype.forward=function(){this._platformStrategy.forward()},t.prototype.back=function(){this._platformStrategy.back()},t.prototype.subscribe=function(t,e,n){return this._subject.subscribe({next:t,error:e,complete:n})},t.normalizeQueryParams=function(t){return t&&\"?\"!==t[0]?\"?\"+t:t},t.joinWithSlash=function(t,e){if(0==t.length)return e;if(0==e.length)return t;var n=0;return t.endsWith(\"/\")&&n++,e.startsWith(\"/\")&&n++,2==n?t+e.substring(1):1==n?t+e:t+\"/\"+e},t.stripTrailingSlash=function(t){var e=t.match(/#|\\?|$/),n=e&&e.index||t.length;return t.slice(0,n-(\"/\"===t[n-1]?1:0))+t.slice(n)},t}(),p=function(t){function e(e,n){var i=t.call(this)||this;return i._platformLocation=e,i._baseHref=\"\",null!=n&&(i._baseHref=n),i}return Object(s.__extends)(e,t),e.prototype.onPopState=function(t){this._platformLocation.onPopState(t),this._platformLocation.onHashChange(t)},e.prototype.getBaseHref=function(){return this._baseHref},e.prototype.path=function(t){void 0===t&&(t=!1);var e=this._platformLocation.hash;return null==e&&(e=\"#\"),e.length>0?e.substring(1):e},e.prototype.prepareExternalUrl=function(t){var e=c.joinWithSlash(this._baseHref,t);return e.length>0?\"#\"+e:e},e.prototype.pushState=function(t,e,n,i){var r=this.prepareExternalUrl(n+c.normalizeQueryParams(i));0==r.length&&(r=this._platformLocation.pathname),this._platformLocation.pushState(t,e,r)},e.prototype.replaceState=function(t,e,n,i){var r=this.prepareExternalUrl(n+c.normalizeQueryParams(i));0==r.length&&(r=this._platformLocation.pathname),this._platformLocation.replaceState(t,e,r)},e.prototype.forward=function(){this._platformLocation.forward()},e.prototype.back=function(){this._platformLocation.back()},e}(l),h=function(t){function e(e,n){var i=t.call(this)||this;if(i._platformLocation=e,null==n&&(n=i._platformLocation.getBaseHrefFromDOM()),null==n)throw new Error(\"No base href set. Please provide a value for the APP_BASE_HREF token or add a base element to the document.\");return i._baseHref=n,i}return Object(s.__extends)(e,t),e.prototype.onPopState=function(t){this._platformLocation.onPopState(t),this._platformLocation.onHashChange(t)},e.prototype.getBaseHref=function(){return this._baseHref},e.prototype.prepareExternalUrl=function(t){return c.joinWithSlash(this._baseHref,t)},e.prototype.path=function(t){void 0===t&&(t=!1);var e=this._platformLocation.pathname+c.normalizeQueryParams(this._platformLocation.search),n=this._platformLocation.hash;return n&&t?\"\"+e+n:e},e.prototype.pushState=function(t,e,n,i){var r=this.prepareExternalUrl(n+c.normalizeQueryParams(i));this._platformLocation.pushState(t,e,r)},e.prototype.replaceState=function(t,e,n,i){var r=this.prepareExternalUrl(n+c.normalizeQueryParams(i));this._platformLocation.replaceState(t,e,r)},e.prototype.forward=function(){this._platformLocation.forward()},e.prototype.back=function(){this._platformLocation.back()},e}(l),f=[\"en\",[[\"a\",\"p\"],[\"AM\",\"PM\"]],[[\"AM\",\"PM\"],,],[[\"S\",\"M\",\"T\",\"W\",\"T\",\"F\",\"S\"],[\"Sun\",\"Mon\",\"Tue\",\"Wed\",\"Thu\",\"Fri\",\"Sat\"],[\"Sunday\",\"Monday\",\"Tuesday\",\"Wednesday\",\"Thursday\",\"Friday\",\"Saturday\"],[\"Su\",\"Mo\",\"Tu\",\"We\",\"Th\",\"Fr\",\"Sa\"]],,[[\"J\",\"F\",\"M\",\"A\",\"M\",\"J\",\"J\",\"A\",\"S\",\"O\",\"N\",\"D\"],[\"Jan\",\"Feb\",\"Mar\",\"Apr\",\"May\",\"Jun\",\"Jul\",\"Aug\",\"Sep\",\"Oct\",\"Nov\",\"Dec\"],[\"January\",\"February\",\"March\",\"April\",\"May\",\"June\",\"July\",\"August\",\"September\",\"October\",\"November\",\"December\"]],,[[\"B\",\"A\"],[\"BC\",\"AD\"],[\"Before Christ\",\"Anno Domini\"]],0,[6,0],[\"M/d/yy\",\"MMM d, y\",\"MMMM d, y\",\"EEEE, MMMM d, y\"],[\"h:mm a\",\"h:mm:ss a\",\"h:mm:ss a z\",\"h:mm:ss a zzzz\"],[\"{1}, {0}\",,\"{1} 'at' {0}\"],[\".\",\",\",\";\",\"%\",\"+\",\"-\",\"E\",\"×\",\"‰\",\"∞\",\"NaN\",\":\"],[\"#,##0.###\",\"#,##0%\",\"¤#,##0.00\",\"#E0\"],\"$\",\"US Dollar\",function(t){var e=Math.floor(Math.abs(t)),n=t.toString().replace(/^[^.]*\\.?/,\"\").length;return 1===e&&0===n?1:5}],d={},_=function(){var t={Zero:0,One:1,Two:2,Few:3,Many:4,Other:5};return t[t.Zero]=\"Zero\",t[t.One]=\"One\",t[t.Two]=\"Two\",t[t.Few]=\"Few\",t[t.Many]=\"Many\",t[t.Other]=\"Other\",t}(),v=new o.n(\"UseV4Plurals\"),y=function(){return function(){}}(),m=function(t){function e(e,n){var i=t.call(this)||this;return i.locale=e,i.deprecatedPluralFn=n,i}return Object(s.__extends)(e,t),e.prototype.getPluralCategory=function(t,e){switch(this.deprecatedPluralFn?this.deprecatedPluralFn(e||this.locale,t):function(t){return r(t)[17]}(e||this.locale)(t)){case _.Zero:return\"zero\";case _.One:return\"one\";case _.Two:return\"two\";case _.Few:return\"few\";case _.Many:return\"many\";default:return\"other\"}},e}(y),g=function(){function t(t,e,n,i){this._iterableDiffers=t,this._keyValueDiffers=e,this._ngEl=n,this._renderer=i,this._initialClasses=[]}return Object.defineProperty(t.prototype,\"klass\",{set:function(t){this._applyInitialClasses(!0),this._initialClasses=\"string\"==typeof t?t.split(/\\s+/):[],this._applyInitialClasses(!1),this._applyClasses(this._rawClass,!1)},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,\"ngClass\",{set:function(t){this._cleanupClasses(this._rawClass),this._iterableDiffer=null,this._keyValueDiffer=null,this._rawClass=\"string\"==typeof t?t.split(/\\s+/):t,this._rawClass&&(Object(o._3)(this._rawClass)?this._iterableDiffer=this._iterableDiffers.find(this._rawClass).create():this._keyValueDiffer=this._keyValueDiffers.find(this._rawClass).create())},enumerable:!0,configurable:!0}),t.prototype.ngDoCheck=function(){if(this._iterableDiffer){var t=this._iterableDiffer.diff(this._rawClass);t&&this._applyIterableChanges(t)}else if(this._keyValueDiffer){var e=this._keyValueDiffer.diff(this._rawClass);e&&this._applyKeyValueChanges(e)}},t.prototype._cleanupClasses=function(t){this._applyClasses(t,!0),this._applyInitialClasses(!1)},t.prototype._applyKeyValueChanges=function(t){var e=this;t.forEachAddedItem(function(t){return e._toggleClass(t.key,t.currentValue)}),t.forEachChangedItem(function(t){return e._toggleClass(t.key,t.currentValue)}),t.forEachRemovedItem(function(t){t.previousValue&&e._toggleClass(t.key,!1)})},t.prototype._applyIterableChanges=function(t){var e=this;t.forEachAddedItem(function(t){if(\"string\"!=typeof t.item)throw new Error(\"NgClass can only toggle CSS classes expressed as strings, got \"+Object(o._19)(t.item));e._toggleClass(t.item,!0)}),t.forEachRemovedItem(function(t){return e._toggleClass(t.item,!1)})},t.prototype._applyInitialClasses=function(t){var e=this;this._initialClasses.forEach(function(n){return e._toggleClass(n,!t)})},t.prototype._applyClasses=function(t,e){var n=this;t&&(Array.isArray(t)||t instanceof Set?t.forEach(function(t){return n._toggleClass(t,!e)}):Object.keys(t).forEach(function(i){null!=t[i]&&n._toggleClass(i,!e)}))},t.prototype._toggleClass=function(t,e){var n=this;(t=t.trim())&&t.split(/\\s+/g).forEach(function(t){e?n._renderer.addClass(n._ngEl.nativeElement,t):n._renderer.removeClass(n._ngEl.nativeElement,t)})},t}(),b=function(){function t(t,e,n,i){this.$implicit=t,this.ngForOf=e,this.index=n,this.count=i}return Object.defineProperty(t.prototype,\"first\",{get:function(){return 0===this.index},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,\"last\",{get:function(){return this.index===this.count-1},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,\"even\",{get:function(){return this.index%2==0},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,\"odd\",{get:function(){return!this.even},enumerable:!0,configurable:!0}),t}(),w=function(){function t(t,e,n){this._viewContainer=t,this._template=e,this._differs=n,this._differ=null}return Object.defineProperty(t.prototype,\"ngForTrackBy\",{get:function(){return this._trackByFn},set:function(t){Object(o.P)()&&null!=t&&\"function\"!=typeof t&&console&&console.warn&&console.warn(\"trackBy must be a function, but received \"+JSON.stringify(t)+\". See https://angular.io/docs/ts/latest/api/common/index/NgFor-directive.html#!#change-propagation for more information.\"),this._trackByFn=t},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,\"ngForTemplate\",{set:function(t){t&&(this._template=t)},enumerable:!0,configurable:!0}),t.prototype.ngOnChanges=function(t){if(\"ngForOf\"in t){var e=t.ngForOf.currentValue;if(!this._differ&&e)try{this._differ=this._differs.find(e).create(this.ngForTrackBy)}catch(t){throw new Error(\"Cannot find a differ supporting object '\"+e+\"' of type '\"+function(t){return t.name||typeof t}(e)+\"'. NgFor only supports binding to Iterables such as Arrays.\")}}},t.prototype.ngDoCheck=function(){if(this._differ){var t=this._differ.diff(this.ngForOf);t&&this._applyChanges(t)}},t.prototype._applyChanges=function(t){var e=this,n=[];t.forEachOperation(function(t,i,r){if(null==t.previousIndex){var o=e._viewContainer.createEmbeddedView(e._template,new b(null,e.ngForOf,-1,-1),r),s=new C(t,o);n.push(s)}else if(null==r)e._viewContainer.remove(i);else{o=e._viewContainer.get(i);e._viewContainer.move(o,r);s=new C(t,o);n.push(s)}});for(i=0;i<n.length;i++)this._perViewChange(n[i].view,n[i].record);for(var i=0,r=this._viewContainer.length;i<r;i++){var o=this._viewContainer.get(i);o.context.index=i,o.context.count=r}t.forEachIdentityChange(function(t){e._viewContainer.get(t.currentIndex).context.$implicit=t.item})},t.prototype._perViewChange=function(t,e){t.context.$implicit=e.item},t}(),C=function(){return function(t,e){this.record=t,this.view=e}}(),O=function(){function t(t,e){this._viewContainer=t,this._context=new S,this._thenTemplateRef=null,this._elseTemplateRef=null,this._thenViewRef=null,this._elseViewRef=null,this._thenTemplateRef=e}return Object.defineProperty(t.prototype,\"ngIf\",{set:function(t){this._context.$implicit=this._context.ngIf=t,this._updateView()},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,\"ngIfThen\",{set:function(t){this._thenTemplateRef=t,this._thenViewRef=null,this._updateView()},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,\"ngIfElse\",{set:function(t){this._elseTemplateRef=t,this._elseViewRef=null,this._updateView()},enumerable:!0,configurable:!0}),t.prototype._updateView=function(){this._context.$implicit?this._thenViewRef||(this._viewContainer.clear(),this._elseViewRef=null,this._thenTemplateRef&&(this._thenViewRef=this._viewContainer.createEmbeddedView(this._thenTemplateRef,this._context))):this._elseViewRef||(this._viewContainer.clear(),this._thenViewRef=null,this._elseTemplateRef&&(this._elseViewRef=this._viewContainer.createEmbeddedView(this._elseTemplateRef,this._context)))},t}(),S=function(){return function(){this.$implicit=null,this.ngIf=null}}(),E=function(){function t(t,e){this._viewContainerRef=t,this._templateRef=e,this._created=!1}return t.prototype.create=function(){this._created=!0,this._viewContainerRef.createEmbeddedView(this._templateRef)},t.prototype.destroy=function(){this._created=!1,this._viewContainerRef.clear()},t.prototype.enforceState=function(t){t&&!this._created?this.create():!t&&this._created&&this.destroy()},t}(),x=function(){function t(){this._defaultUsed=!1,this._caseCount=0,this._lastCaseCheckIndex=0,this._lastCasesMatched=!1}return Object.defineProperty(t.prototype,\"ngSwitch\",{set:function(t){this._ngSwitch=t,0===this._caseCount&&this._updateDefaultCases(!0)},enumerable:!0,configurable:!0}),t.prototype._addCase=function(){return this._caseCount++},t.prototype._addDefault=function(t){this._defaultViews||(this._defaultViews=[]),this._defaultViews.push(t)},t.prototype._matchCase=function(t){var e=t==this._ngSwitch;return this._lastCasesMatched=this._lastCasesMatched||e,this._lastCaseCheckIndex++,this._lastCaseCheckIndex===this._caseCount&&(this._updateDefaultCases(!this._lastCasesMatched),this._lastCaseCheckIndex=0,this._lastCasesMatched=!1),e},t.prototype._updateDefaultCases=function(t){if(this._defaultViews&&t!==this._defaultUsed){this._defaultUsed=t;for(var e=0;e<this._defaultViews.length;e++){this._defaultViews[e].enforceState(t)}}},t}(),T=function(){function t(t,e,n){this.ngSwitch=n,n._addCase(),this._view=new E(t,e)}return t.prototype.ngDoCheck=function(){this._view.enforceState(this.ngSwitch._matchCase(this.ngSwitchCase))},t}(),k=function(){return function(t,e,n){n._addDefault(new E(t,e))}}(),P=function(){function t(t,e,n){this._differs=t,this._ngEl=e,this._renderer=n}return Object.defineProperty(t.prototype,\"ngStyle\",{set:function(t){this._ngStyle=t,!this._differ&&t&&(this._differ=this._differs.find(t).create())},enumerable:!0,configurable:!0}),t.prototype.ngDoCheck=function(){if(this._differ){var t=this._differ.diff(this._ngStyle);t&&this._applyChanges(t)}},t.prototype._applyChanges=function(t){var e=this;t.forEachRemovedItem(function(t){return e._setStyle(t.key,null)}),t.forEachAddedItem(function(t){return e._setStyle(t.key,t.currentValue)}),t.forEachChangedItem(function(t){return e._setStyle(t.key,t.currentValue)})},t.prototype._setStyle=function(t,e){var n=t.split(\".\"),i=n[1];this._renderer.setStyle(this._ngEl.nativeElement,n[0],e=null!=e&&i?\"\"+e+i:e)},t}(),A=function(){return function(){}}(),I=new o.n(\"DocumentToken\"),j=\"browser\"},function(t,e,n){\"use strict\";n.d(e,\"a\",function(){return i});var i=function(){function t(t,e,n,i){this._config=t,this._elementRef=e,this._renderer=n,this._componentName=i,i&&(this._setComponentName(),this._setMode(t.get(\"mode\")))}return Object.defineProperty(t.prototype,\"color\",{get:function(){return this._color},set:function(t){this._setColor(t)},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,\"mode\",{get:function(){return this._mode},set:function(t){this._setMode(t)},enumerable:!0,configurable:!0}),t.prototype.setElementClass=function(t,e){this._renderer.setElementClass(this._elementRef.nativeElement,t,e)},t.prototype.setElementAttribute=function(t,e){this._renderer.setElementAttribute(this._elementRef.nativeElement,t,e)},t.prototype.setElementStyle=function(t,e){this._renderer.setElementStyle(this._elementRef.nativeElement,t,e)},t.prototype._setColor=function(t,e){e&&(this._componentName=e),this._color&&this.setElementClass(this._componentName+\"-\"+this._mode+\"-\"+this._color,!1),t&&(this.setElementClass(this._componentName+\"-\"+this._mode+\"-\"+t,!0),this._color=t)},t.prototype._setMode=function(t){this._mode&&this.setElementClass(this._componentName+\"-\"+this._mode,!1),t&&(this.setElementClass(this._componentName+\"-\"+t,!0),this._setColor(null),this._mode=t,this._setColor(this._color))},t.prototype._setComponentName=function(){this.setElementClass(this._componentName,!0)},t.prototype.getElementRef=function(){return this._elementRef},t.prototype.getNativeElement=function(){return this._elementRef.nativeElement},t}()},function(t,e,n){\"use strict\";n.d(e,\"a\",function(){return s});var i=n(18),r=(n(1),n(29)),o=this&&this.__extends||function(){var t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n])};return function(e,n){function i(){this.constructor=e}t(e,n),e.prototype=null===n?Object.create(n):(i.prototype=n.prototype,new i)}}(),s=function(t){function e(e,n,i){var r=t.call(this,e,n,i,\"icon\")||this;return r._isActive=!0,r._name=\"\",r._ios=\"\",r._md=\"\",r._css=\"\",r._hidden=!1,r._iconMode=e.get(\"iconMode\"),r}return o(e,t),e.prototype.ngOnDestroy=function(){this._css&&this.setElementClass(this._css,!1)},Object.defineProperty(e.prototype,\"name\",{get:function(){return this._name},set:function(t){this._name=/^md-|^ios-|^logo-/.test(t)?t:this._iconMode+\"-\"+t,this.update()},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,\"ios\",{get:function(){return this._ios},set:function(t){this._ios=t,this.update()},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,\"md\",{get:function(){return this._md},set:function(t){this._md=t,this.update()},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,\"isActive\",{get:function(){return this._isActive},set:function(t){this._isActive=Object(i.o)(t),this.update()},enumerable:!0,configurable:!0}),e.prototype.update=function(){var t;if(!(this._hidden=null===(t=this._ios&&\"ios\"===this._iconMode?this._ios:this._md&&\"md\"===this._iconMode?this._md:this._name))){\"ios\"===t.split(\"-\",2)[0]&&!this._isActive&&t.indexOf(\"logo-\")<0&&t.indexOf(\"-outline\")<0&&(t+=\"-outline\");var e=\"ion-\"+t;if(this._css!==e){this._css&&this.setElementClass(this._css,!1),this._css=e,this.setElementClass(e,!0);var n=t.replace(\"ios-\",\"\").replace(\"md-\",\"\").replace(\"-\",\" \");this.setElementAttribute(\"aria-label\",n)}}},e}(r.a)},function(t,e,n){\"use strict\";function i(t){return\"/\"!==(t=t.trim()).charAt(0)&&(t=\"/\"+t),t.length>1&&\"/\"===t.charAt(t.length-1)&&(t=t.substr(0,t.length-1)),t}n.d(e,\"a\",function(){return l}),e.b=function(t,e,n,i,r){var o=new l(t,e,n,i,r);return o.init(),o};var r=n(50),o=n(18),s=n(77),a=n(4),l=function(){function t(t,e,n,i,r){this._app=t,this._serializer=e,this._location=n,this._moduleLoader=i,this._baseCfr=r,this._history=[]}return t.prototype.init=function(){var t=this,e=i(this._location.path());this._historyPush(e),this._location.subscribe(function(e){t._urlChange(i(e.url))})},t.prototype._urlChange=function(t){var e=this;if(!this._isCurrentUrl(t)){this._isBackUrl(t)?this._historyPop():(!1,this._historyPush(t));var n=this._app.getActiveNavContainers();if(n&&n.length){if(\"/\"===t){if(!Object(o.l)(this._indexAliasUrl))return void n.forEach(function(t){t.goToRoot({updateUrl:!1,isNavRoot:!0})});t=this._indexAliasUrl}this.getCurrentSegments(t).map(function(t){for(var e=0,i=n;e<i.length;e++){var r=function(t,e){for(;t;){if(t.id===e||t.name===e)return t;t=t.parent}return null}(i[e],t.navId);if(r)return{segment:t,navContainer:r}}}).filter(function(t){return!!t}).forEach(function(t){e._loadViewForSegment(t.navContainer,t.segment,function(){})})}}},t.prototype.getCurrentSegments=function(t){return t||(t=i(this._location.path())),this._serializer.parse(t)},t.prototype.navChange=function(t){if(t){for(var e=0,n=this._app.getActiveNavContainers();e<n.length;e++){var i=n[e];if(Object(r.m)(i)||i.isTransitioning())return}for(var o=[],s=0,a=this._app.getRootNavs();s<a.length;s++){var l=this.getSegmentsFromNav(a[s]);o=o.concat(l)}if((o=o.filter(function(t){return!!t})).length){var u=this._serializer.serialize(o);this._updateLocation(u,t)}}},t.prototype.getSegmentsFromNav=function(t){var e=this,n=[];return Object(r.k)(t)?n.push(this.getSegmentFromNav(t)):Object(r.l)(t)&&n.push(this.getSegmentFromTab(t)),t.getActiveChildNavs().forEach(function(t){n=n.concat(e.getSegmentsFromNav(t))}),n},t.prototype.getSegmentFromNav=function(t,e,n){if(!e){var i=t.getActive(!0);i&&(e=i.component,n=i.data)}return this._serializer.serializeComponent(t,e,n)},t.prototype.getSegmentFromTab=function(t,e,n){if(t&&t.parent){var i=t.parent,r=i.getActiveChildNavs();if(r&&r.length){var o=r[0].getActive(!0);return o&&(e=o.component,n=o.data),this._serializer.serializeComponent(i,e,n)}}},t.prototype._updateLocation=function(t,e){this._indexAliasUrl===t&&(t=\"/\"),e===r.a&&this._isBackUrl(t)?(this._historyPop(),this._location.back()):this._isCurrentUrl(t)||(this._historyPush(t),this._location.go(t))},t.prototype.getComponentFromName=function(t){var e=this._serializer.getLinkFromName(t);return e?this.getNavLinkComponent(e):Promise.reject(\"invalid link: \"+t)},t.prototype.getNavLinkComponent=function(t){return t.component?Promise.resolve(t.component):t.loadChildren?this._moduleLoader.load(t.loadChildren).then(function(e){return t.component=e.component,e.component}):Promise.reject(\"invalid link component: \"+t.name)},t.prototype.resolveComponent=function(t){var e=this._moduleLoader.getComponentFactoryResolver(t);return e||(e=this._baseCfr),e.resolveComponentFactory(t)},t.prototype.createUrl=function(t,e,n,i){void 0===i&&(i=!0);var r=this._serializer.createSegmentFromName(t,e),o=this.getCurrentSegments();if(r)for(var s=0;s<o.length;s++)if(o[s].navId===t.name||o[s].navId===t.id){o[s]=r;var a=this._serializer.serialize(o);return i?this._location.prepareExternalUrl(a):a}return\"\"},t.prototype.getSegmentByNavIdOrName=function(t,e){for(var n=i(this._location.path()),r=0,o=this._serializer.parse(n);r<o.length;r++){var s=o[r];if(s.navId===t||s.navId===e)return s}return null},t.prototype.initViews=function(t){var e=this,n=this._serializer.getLinkFromName(t.name);return this.getNavLinkComponent(n).then(function(n){t.component=n;var i=new a.a(n,t.data);return i.id=t.id,Object(o.e)(t.defaultHistory)?Object(r.i)(e,t.defaultHistory).then(function(t){return t.push(i),t}):[i]})},t.prototype._isBackUrl=function(t){return t===this._history[this._history.length-2]},t.prototype._isCurrentUrl=function(t){return t===this._history[this._history.length-1]},t.prototype._historyPush=function(t){this._isCurrentUrl(t)||(this._history.push(t),this._history.length>30&&this._history.shift())},t.prototype._historyPop=function(){this._history.pop(),this._history.length||this._historyPush(this._location.path())},t.prototype._getTabSelector=function(t){return Object(o.l)(t.tabUrlPath)?t.tabUrlPath:Object(o.l)(t.tabTitle)?Object(s.c)(t.tabTitle):\"tab-\"+t.index},t.prototype._loadViewForSegment=function(t,e,n){if(!e)return n(!1,!1);if(Object(r.m)(t)||Object(r.l)(t)&&t.parent){var i=Object(r.m)(t)?t:t.parent,o=i._getSelectedTabIndex(e.secondaryId),s=i.getByIndex(o);return s._segment=e,i.select(s,{updateUrl:!1,animate:!1},!0),n(!1,!1)}for(var a=t,l=a.length()-1,u=l;u>=0;u--){var c=a.getByIndex(u);if(c&&(c.id===e.id||c.id===e.name))return u===l?n(!1,!1):a.popTo(c,{animate:!1,updateUrl:!1},n)}return a.setRoot(e.component||e.name,e.data,{id:e.id,animate:!1,updateUrl:!1},n)},t}()},function(t,e,n){\"use strict\";function i(t,e,n){return setTimeout(a(t,n),e)}function r(t,e,n){return!!Array.isArray(t)&&(o(t,n[e],n),!0)}function o(t,e,n){var i;if(t)if(t.forEach)t.forEach(e,n);else if(void 0!==t.length)for(i=0;i<t.length;)e.call(n,t[i],i,t),i++;else for(i in t)t.hasOwnProperty(i)&&e.call(n,t[i],i,t)}function s(t,e,n){var i,r=e.prototype;(i=t.prototype=Object.create(r)).constructor=t,i._super=r,n&&Object.assign(i,n)}function a(t,e){return function(){return t.apply(e,arguments)}}function l(t,e){return typeof t==$e?t.apply(e?e[0]||void 0:void 0,e):t}function u(t,e){return void 0===t?e:t}function c(t,e,n){o(d(e),function(e){t.addEventListener(e,n,!1)})}function p(t,e,n){o(d(e),function(e){t.removeEventListener(e,n,!1)})}function h(t,e){for(;t;){if(t==e)return!0;t=t.parentNode}return!1}function f(t,e){return t.indexOf(e)>-1}function d(t){return t.trim().split(/\\s+/g)}function _(t,e,n){if(t.indexOf&&!n)return t.indexOf(e);for(var i=0;i<t.length;){if(n&&t[i][n]==e||!n&&t[i]===e)return i;i++}return-1}function v(t){return Array.prototype.slice.call(t,0)}function y(t,e,n){for(var i=[],r=[],o=0;o<t.length;){var s=e?t[o][e]:t[o];_(r,s)<0&&i.push(t[o]),r[o]=s,o++}return n&&(i=e?i.sort(function(t,n){return t[e]>n[e]?1:0}):i.sort()),i}function m(t,e){for(var n,i,r=e[0].toUpperCase()+e.slice(1),o=0;o<We.length;){if(n=We[o],(i=n?n+r:e)in t)return i;o++}}function g(t){var e=t.ownerDocument||t;return e.defaultView||e.parentWindow||window}function b(t,e){var n=this;this.manager=t,this.callback=e,this.element=t.element,this.target=t.options.inputTarget,this.domHandler=function(e){l(t.options.enable,[t])&&n.handler(e)},this.init()}function w(t){for(var e=[],n=0;n<t.pointers.length;)e[n]={clientX:Ke(t.pointers[n].clientX),clientY:Ke(t.pointers[n].clientY)},n++;return{timeStamp:Je(),pointers:e,center:C(e),deltaX:t.deltaX,deltaY:t.deltaY}}function C(t){var e=t.length;if(1===e)return{x:Ke(t[0].clientX),y:Ke(t[0].clientY)};for(var n=0,i=0,r=0;r<e;)n+=t[r].clientX,i+=t[r].clientY,r++;return{x:Ke(n/e),y:Ke(i/e)}}function O(t,e,n){return{x:e/t||0,y:n/t||0}}function S(t,e){return t===e?cn:Qe(t)>=Qe(e)?t<0?pn:hn:e<0?fn:dn}function E(t,e,n){n||(n=mn);var i=e[n[0]]-t[n[0]],r=e[n[1]]-t[n[1]];return Math.sqrt(i*i+r*r)}function x(t,e,n){n||(n=mn);var i=e[n[0]]-t[n[0]],r=e[n[1]]-t[n[1]];return 180*Math.atan2(r,i)/Math.PI}function T(t,e){this.evEl=wn,this.evWin=Cn,this.allow=!0,this.pressed=!1,b.apply(this,arguments)}function k(){this.evEl=En,this.evWin=xn,b.apply(this,arguments),this.store=this.manager.session.pointerEvents=[]}function P(){this.evTarget=kn,this.evWin=Pn,this.started=!1,b.apply(this,arguments)}function A(t,e){this.evTarget=In,this.targetIds={},b.apply(this,arguments)}function I(){b.apply(this,arguments);var t=a(this.handler,this);this.touch=new A(this.manager,t),this.mouse=new T(this.manager,t)}function j(t,e){this.manager=t,this.set(e)}function D(t){this.options=Object.assign({},this.defaults,t||{}),this.id=tn++,this.manager=null,this.options.enable=u(this.options.enable,!0),this.state=Fn,this.simultaneous={},this.requireFail=[]}function M(t){return t&Un?\"cancel\":t&Hn?\"end\":t&zn?\"move\":t&Bn?\"start\":\"\"}function R(t){return t==dn?\"down\":t==fn?\"up\":t==pn?\"left\":t==hn?\"right\":\"\"}function N(t,e){var n=e.manager;return n?n.get(t):t}function V(){D.apply(this,arguments)}function L(){V.apply(this,arguments),this.pX=null,this.pY=null}function F(){V.apply(this,arguments)}function B(){D.apply(this,arguments),this._timer=null,this._input=null}function z(){V.apply(this,arguments)}function H(){V.apply(this,arguments)}function Y(){D.apply(this,arguments),this.pTime=!1,this.pCenter=!1,this._timer=null,this._input=null,this.count=0}function U(t,e){return e=e||{},e.recognizers=u(e.recognizers,qn.preset),new q(t,e)}function q(t,e){this.options=Object.assign({},qn,e||{}),this.options.inputTarget=this.options.inputTarget||t,this.handlers={},this.session={},this.recognizers=[],this.element=t,this.input=function(t){var e=t.options.inputClass;return new(e||(nn?k:rn?A:en?I:T))(t,function(t,e,n){var i=n.pointers.length,r=n.changedPointers.length,o=e&sn&&i-r==0,s=e&(ln|un)&&i-r==0;n.isFirst=!!o,n.isFinal=!!s,o&&(t.session={}),n.eventType=e,function(t,e){var n=t.session,i=e.pointers,r=i.length;n.firstInput||(n.firstInput=w(e)),r>1&&!n.firstMultiple?n.firstMultiple=w(e):1===r&&(n.firstMultiple=!1);var o=n.firstInput,s=n.firstMultiple,a=s?s.center:o.center,l=e.center=C(i);e.timeStamp=Je(),e.deltaTime=e.timeStamp-o.timeStamp,e.angle=x(a,l),e.distance=E(a,l),function(t,e){var n=e.center,i=t.offsetDelta||{},r=t.prevDelta||{},o=t.prevInput||{};e.eventType!==sn&&o.eventType!==ln||(r=t.prevDelta={x:o.deltaX||0,y:o.deltaY||0},i=t.offsetDelta={x:n.x,y:n.y}),e.deltaX=r.x+(n.x-i.x),e.deltaY=r.y+(n.y-i.y)}(n,e),e.offsetDirection=S(e.deltaX,e.deltaY);var u=O(e.deltaTime,e.deltaX,e.deltaY);e.overallVelocityX=u.x,e.overallVelocityY=u.y,e.overallVelocity=Qe(u.x)>Qe(u.y)?u.x:u.y,e.scale=s?function(t,e){return E(e[0],e[1],gn)/E(t[0],t[1],gn)}(s.pointers,i):1,e.rotation=s?function(t,e){return x(e[1],e[0],gn)+x(t[1],t[0],gn)}(s.pointers,i):0,e.maxPointers=n.prevInput?e.pointers.length>n.prevInput.maxPointers?e.pointers.length:n.prevInput.maxPointers:e.pointers.length,function(t,e){var n,i,r,o,s=t.lastInterval||e,a=e.timeStamp-s.timeStamp;if(e.eventType!=un&&(a>on||void 0===s.velocity)){var l=e.deltaX-s.deltaX,u=e.deltaY-s.deltaY,c=O(a,l,u);i=c.x,r=c.y,n=Qe(c.x)>Qe(c.y)?c.x:c.y,o=S(l,u),t.lastInterval=e}else n=s.velocity,i=s.velocityX,r=s.velocityY,o=s.direction;e.velocity=n,e.velocityX=i,e.velocityY=r,e.direction=o}(n,e);var c=t.element;h(e.srcEvent.target,c)&&(c=e.srcEvent.target),e.target=c}(t,n),t.emit(\"hammer.input\",n),t.recognize(n),t.session.prevInput=n})}(this),this.touchAction=new j(this,this.options.touchAction),Z(this,!0),o(this.options.recognizers,function(t){var e=this.add(new t[0](t[1]));t[2]&&e.recognizeWith(t[2]),t[3]&&e.requireFailure(t[3])},this)}function Z(t,e){var n=t.element;n.style&&o(t.options.cssProps,function(t,i){n.style[m(n.style,i)]=e?t:\"\"})}var G=n(75),W=n(43),X=n(129),$=n(90),K=n(89),Q=n(130),J=n(48),tt=n(91),et=n(5),nt=n(60),it=n(45),rt=n(92),ot=n(21),st=n(39),at=n(52),lt=n(93),ut=n(94),ct=n(95),pt=(n(171),n(8)),ht=n(96),ft=n(54),dt=n(69),_t=n(98),vt=n(61),yt=n(131),mt=n(62),gt=n(29),bt=n(30),wt=(n(173),n(132),n(174),n(44)),Ct=n(20),Ot=n(25),St=n(133),Et=n(134),xt=n(99),Tt=n(23),kt=n(100),Pt=n(101),At=n(34),It=n(27),jt=n(41),Dt=n(176),Mt=n(103),Rt=n(102),Nt=n(104),Vt=n(135),Lt=n(136),Ft=n(36),Bt=this&&this.__extends||function(){var t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n])};return function(e,n){function i(){this.constructor=e}t(e,n),e.prototype=null===n?Object.create(n):(i.prototype=n.prototype,new i)}}(),zt=function(){function t(t){this.ani=new Ft.a(t),this.ani.easing(\"cubic-bezier(0.0, 0.0, 0.2, 1)\").easingReverse(\"cubic-bezier(0.4, 0.0, 0.6, 1)\").duration(280)}return t.prototype.setOpen=function(t,e,n){var i=this.ani.onFinish(n,!0,!0).reverse(!t);e?i.play():i.syncPlay()},t.prototype.setProgressStart=function(t){this.isOpening=!t,this.ani.reverse(t).progressStart()},t.prototype.setProgessStep=function(t){this.ani.progressStep(t)},t.prototype.setProgressEnd=function(t,e,n,i){var r=this,o=this.isOpening&&t;this.isOpening||t||(o=!0);var s=this.ani;s.onFinish(function(){r.isOpening=!1,i(o)},!0);var a=1-Math.min(Math.abs(n)/4,.7),l=s.getDuration()*a;s.progressEnd(t,e,l)},t.prototype.destroy=function(){this.ani.destroy(),this.ani=null},t}();W.a.registerType(\"reveal\",function(t){function e(e,n){var i=t.call(this,n)||this,r=e.width()*(e.isRightSide?-1:1)+\"px\",o=new Ft.a(n,e.getContentElement());return o.fromTo(\"translateX\",\"0px\",r),i.ani.add(o),i}return Bt(e,t),e}(zt));W.a.registerType(\"push\",function(t){function e(e,n){var i,r,o,s=t.call(this,n)||this,a=e.width();e.isRightSide?(i=-a+\"px\",r=a+\"px\",o=\"0px\"):(i=a+\"px\",o=\"0px\",r=-a+\"px\");var l=new Ft.a(n,e.getMenuElement());l.fromTo(\"translateX\",r,o),s.ani.add(l);var u=new Ft.a(n,e.getContentElement());return u.fromTo(\"translateX\",\"0px\",i),s.ani.add(u),s}return Bt(e,t),e}(zt));W.a.registerType(\"overlay\",function(t){function e(e,n){var i,r,o=t.call(this,n)||this,s=e.width();e.isRightSide?(i=8+s+\"px\",r=\"0px\"):(i=-(8+s)+\"px\",r=\"0px\");var a=new Ft.a(n,e.getMenuElement());a.fromTo(\"translateX\",i,r),o.ani.add(a);var l=new Ft.a(n,e.getBackdropElement());return l.fromTo(\"opacity\",.01,.35),o.ani.add(l),o}return Bt(e,t),e}(zt));var Ht=n(178),Yt=n(105),Ut=n(106),qt=n(79),Zt=(n(138),n(181),n(139),n(182),n(63)),Gt=n(107),Wt=n(172),Xt=n(97),$t=n(78),Kt=n(68),Qt=n(140),Jt=n(108),te=n(109),ee=n(71),ne=n(64),ie=n(110),re=n(111),oe=(n(141),n(183),n(184),n(80)),se=n(112),ae=n(72),le=n(113),ue=n(114),ce=n(81),pe=n(142),he=n(115),fe=n(116),de=n(73),_e=n(117),ve=n(38),ye=n(55),me=n(119),ge=n(118),be=n(46),we=n(186),Ce=n(120),Oe=n(121),Se=n(82),Ee=n(83),xe=n(12),Te=n(11),ke=n(49),Pe=n(13),Ae=n(10),Ie=n(122),je=n(123),De=(n(143),n(144),n(145),n(187),n(1)),Me=n(6),Re=n(2),Ne=n(40),Ve=n(31),Le=n(7),Fe=n(87),Be=n(33),ze=(n(50),n(146)),He=n(77),Ye=n(4),Ue=n(88),qe=n(18),Ze=window,Ge=document,We=[\"\",\"webkit\",\"Moz\",\"MS\",\"ms\",\"o\"],Xe=Ge.createElement(\"div\"),$e=\"function\",Ke=Math.round,Qe=Math.abs,Je=Date.now,tn=1,en=\"ontouchstart\"in window,nn=void 0!==m(window,\"PointerEvent\"),rn=en&&/mobile|tablet|ip(ad|hone|od)|android/i.test(navigator.userAgent),on=25,sn=1,an=2,ln=4,un=8,cn=1,pn=2,hn=4,fn=8,dn=16,_n=pn|hn,vn=fn|dn,yn=_n|vn,mn=[\"x\",\"y\"],gn=[\"clientX\",\"clientY\"];b.prototype={handler:function(){},init:function(){this.evEl&&c(this.element,this.evEl,this.domHandler),this.evTarget&&c(this.target,this.evTarget,this.domHandler),this.evWin&&c(g(this.element),this.evWin,this.domHandler)},destroy:function(){this.evEl&&p(this.element,this.evEl,this.domHandler),this.evTarget&&p(this.target,this.evTarget,this.domHandler),this.evWin&&p(g(this.element),this.evWin,this.domHandler)}};var bn={mousedown:sn,mousemove:an,mouseup:ln},wn=\"mousedown\",Cn=\"mousemove mouseup\";s(T,b,{handler:function(t){var e=bn[t.type];e&sn&&0===t.button&&(this.pressed=!0),e&an&&1!==t.which&&(e=ln),this.pressed&&this.allow&&(e&ln&&(this.pressed=!1),this.callback(this.manager,e,{pointers:[t],changedPointers:[t],pointerType:\"mouse\",srcEvent:t}))}});var On={pointerdown:sn,pointermove:an,pointerup:ln,pointercancel:un,pointerout:un},Sn={2:\"touch\",3:\"pen\",4:\"mouse\",5:\"kinect\"},En=\"pointerdown\",xn=\"pointermove pointerup pointercancel\";Ze.MSPointerEvent&&!Ze.PointerEvent&&(En=\"MSPointerDown\",xn=\"MSPointerMove MSPointerUp MSPointerCancel\"),s(k,b,{handler:function(t){var e=this.store,n=!1,i=t.type.toLowerCase().replace(\"ms\",\"\"),r=On[i],o=Sn[t.pointerType]||t.pointerType,s=\"touch\"==o,a=_(e,t.pointerId,\"pointerId\");r&sn&&(0===t.button||s)?a<0&&(e.push(t),a=e.length-1):r&(ln|un)&&(n=!0),a<0||(e[a]=t,this.callback(this.manager,r,{pointers:e,changedPointers:[t],pointerType:o,srcEvent:t}),n&&e.splice(a,1))}});var Tn={touchstart:sn,touchmove:an,touchend:ln,touchcancel:un},kn=\"touchstart\",Pn=\"touchstart touchmove touchend touchcancel\";s(P,b,{handler:function(t){var e=Tn[t.type];if(e===sn&&(this.started=!0),this.started){var n=function(t,e){var n=v(t.touches),i=v(t.changedTouches);return e&(ln|un)&&(n=y(n.concat(i),\"identifier\",!0)),[n,i]}.call(this,t,e);e&(ln|un)&&n[0].length-n[1].length==0&&(this.started=!1),this.callback(this.manager,e,{pointers:n[0],changedPointers:n[1],pointerType:\"touch\",srcEvent:t})}}});var An={touchstart:sn,touchmove:an,touchend:ln,touchcancel:un},In=\"touchstart touchmove touchend touchcancel\";s(A,b,{handler:function(t){var e=An[t.type],n=function(t,e){var n=v(t.touches),i=this.targetIds;if(e&(sn|an)&&1===n.length)return i[n[0].identifier]=!0,[n,n];var r,o,s=v(t.changedTouches),a=[],l=this.target;if(o=n.filter(function(t){return h(t.target,l)}),e===sn)for(r=0;r<o.length;)i[o[r].identifier]=!0,r++;for(r=0;r<s.length;)i[s[r].identifier]&&a.push(s[r]),e&(ln|un)&&delete i[s[r].identifier],r++;return a.length?[y(o.concat(a),\"identifier\",!0),a]:void 0}.call(this,t,e);n&&this.callback(this.manager,e,{pointers:n[0],changedPointers:n[1],pointerType:\"touch\",srcEvent:t})}}),s(I,b,{handler:function(t,e,n){var i=\"mouse\"==n.pointerType;if(\"touch\"==n.pointerType)this.mouse.allow=!1;else if(i&&!this.mouse.allow)return;e&(ln|un)&&(this.mouse.allow=!0),this.callback(t,e,n)},destroy:function(){this.touch.destroy(),this.mouse.destroy()}});var jn=m(Xe.style,\"touchAction\"),Dn=void 0!==jn,Mn=\"auto\",Rn=\"manipulation\",Nn=\"none\",Vn=\"pan-x\",Ln=\"pan-y\";j.prototype={set:function(t){\"compute\"==t&&(t=this.compute()),Dn&&this.manager.element.style&&(this.manager.element.style[jn]=t),this.actions=t.toLowerCase().trim()},update:function(){this.set(this.manager.options.touchAction)},compute:function(){var t=[];return o(this.manager.recognizers,function(e){l(e.options.enable,[e])&&(t=t.concat(e.getTouchAction()))}),function(t){if(f(t,Nn))return Nn;var e=f(t,Vn),n=f(t,Ln);return e&&n?Nn:e||n?e?Vn:Ln:f(t,Rn)?Rn:Mn}(t.join(\" \"))},preventDefaults:function(t){if(!Dn){var e=t.srcEvent,n=t.offsetDirection;if(this.manager.session.prevented)e.preventDefault();else{var i=this.actions,r=f(i,Nn),o=f(i,Ln),s=f(i,Vn);if(r){if(1===t.pointers.length&&t.distance<2&&t.deltaTime<250)return}if(!s||!o)return r||o&&n&_n||s&&n&vn?this.preventSrc(e):void 0}}},preventSrc:function(t){this.manager.session.prevented=!0,t.preventDefault()}};var Fn=1,Bn=2,zn=4,Hn=8,Yn=Hn,Un=16;D.prototype={defaults:{},set:function(t){return Object.assign(this.options,t),this.manager&&this.manager.touchAction.update(),this},recognizeWith:function(t){if(r(t,\"recognizeWith\",this))return this;var e=this.simultaneous;return t=N(t,this),e[t.id]||(e[t.id]=t,t.recognizeWith(this)),this},dropRecognizeWith:function(t){return r(t,\"dropRecognizeWith\",this)?this:(t=N(t,this),delete this.simultaneous[t.id],this)},requireFailure:function(t){if(r(t,\"requireFailure\",this))return this;var e=this.requireFail;return t=N(t,this),-1===_(e,t)&&(e.push(t),t.requireFailure(this)),this},dropRequireFailure:function(t){if(r(t,\"dropRequireFailure\",this))return this;t=N(t,this);var e=_(this.requireFail,t);return e>-1&&this.requireFail.splice(e,1),this},hasRequireFailures:function(){return this.requireFail.length>0},canRecognizeWith:function(t){return!!this.simultaneous[t.id]},emit:function(t){function e(e){n.manager.emit(e,t)}var n=this,i=this.state;i<Hn&&e(n.options.event+M(i)),e(n.options.event),t.additionalEvent&&e(t.additionalEvent),i>=Hn&&e(n.options.event+M(i))},tryEmit:function(t){if(this.canEmit())return this.emit(t);this.state=32},canEmit:function(){for(var t=0;t<this.requireFail.length;){if(!(this.requireFail[t].state&(32|Fn)))return!1;t++}return!0},recognize:function(t){var e=Object.assign({},t);if(!l(this.options.enable,[this,e]))return this.reset(),void(this.state=32);this.state&(Yn|Un|32)&&(this.state=Fn),this.state=this.process(e),this.state&(Bn|zn|Hn|Un)&&this.tryEmit(e)},process:function(t){},getTouchAction:function(){},reset:function(){}},s(V,D,{defaults:{pointers:1},attrTest:function(t){var e=this.options.pointers;return 0===e||t.pointers.length===e},process:function(t){var e=this.state,n=t.eventType,i=e&(Bn|zn),r=this.attrTest(t);return i&&(n&un||!r)?e|Un:i||r?n&ln?e|Hn:e&Bn?e|zn:Bn:32}}),s(L,V,{defaults:{event:\"pan\",threshold:10,pointers:1,direction:yn},getTouchAction:function(){var t=this.options.direction,e=[];return t&_n&&e.push(Ln),t&vn&&e.push(Vn),e},directionTest:function(t){var e=this.options,n=!0,i=t.distance,r=t.direction,o=t.deltaX,s=t.deltaY;return r&e.direction||(e.direction&_n?(r=0===o?cn:o<0?pn:hn,n=o!=this.pX,i=Math.abs(t.deltaX)):(r=0===s?cn:s<0?fn:dn,n=s!=this.pY,i=Math.abs(t.deltaY))),t.direction=r,n&&i>e.threshold&&r&e.direction},attrTest:function(t){return V.prototype.attrTest.call(this,t)&&(this.state&Bn||!(this.state&Bn)&&this.directionTest(t))},emit:function(t){this.pX=t.deltaX,this.pY=t.deltaY;var e=R(t.direction);e&&(t.additionalEvent=this.options.event+e),this._super.emit.call(this,t)}}),s(F,V,{defaults:{event:\"pinch\",threshold:0,pointers:2},getTouchAction:function(){return[Nn]},attrTest:function(t){return this._super.attrTest.call(this,t)&&(Math.abs(t.scale-1)>this.options.threshold||this.state&Bn)},emit:function(t){if(1!==t.scale){t.additionalEvent=this.options.event+(t.scale<1?\"in\":\"out\")}this._super.emit.call(this,t)}}),s(B,D,{defaults:{event:\"press\",pointers:1,time:251,threshold:9},getTouchAction:function(){return[Mn]},process:function(t){var e=this.options,n=t.pointers.length===e.pointers,r=t.distance<e.threshold,o=t.deltaTime>e.time;if(this._input=t,!r||!n||t.eventType&(ln|un)&&!o)this.reset();else if(t.eventType&sn)this.reset(),this._timer=i(function(){this.state=Yn,this.tryEmit()},e.time,this);else if(t.eventType&ln)return Yn;return 32},reset:function(){clearTimeout(this._timer)},emit:function(t){this.state===Yn&&(t&&t.eventType&ln?this.manager.emit(this.options.event+\"up\",t):(this._input.timeStamp=Je(),this.manager.emit(this.options.event,this._input)))}}),s(z,V,{defaults:{event:\"rotate\",threshold:0,pointers:2},getTouchAction:function(){return[Nn]},attrTest:function(t){return this._super.attrTest.call(this,t)&&(Math.abs(t.rotation)>this.options.threshold||this.state&Bn)}}),s(H,V,{defaults:{event:\"swipe\",threshold:10,velocity:.3,direction:_n|vn,pointers:1},getTouchAction:function(){return L.prototype.getTouchAction.call(this)},attrTest:function(t){var e,n=this.options.direction;return n&(_n|vn)?e=t.overallVelocity:n&_n?e=t.overallVelocityX:n&vn&&(e=t.overallVelocityY),this._super.attrTest.call(this,t)&&n&t.offsetDirection&&t.distance>this.options.threshold&&t.maxPointers==this.options.pointers&&Qe(e)>this.options.velocity&&t.eventType&ln},emit:function(t){var e=R(t.offsetDirection);e&&this.manager.emit(this.options.event+e,t),this.manager.emit(this.options.event,t)}}),s(Y,D,{defaults:{event:\"tap\",pointers:1,taps:1,interval:300,time:250,threshold:9,posThreshold:10},getTouchAction:function(){return[Rn]},process:function(t){var e=this.options,n=t.pointers.length===e.pointers,r=t.distance<e.threshold,o=t.deltaTime<e.time;if(this.reset(),t.eventType&sn&&0===this.count)return this.failTimeout();if(r&&o&&n){if(t.eventType!=ln)return this.failTimeout();var s=!this.pTime||t.timeStamp-this.pTime<e.interval,a=!this.pCenter||E(this.pCenter,t.center)<e.posThreshold;this.pTime=t.timeStamp,this.pCenter=t.center,a&&s?this.count+=1:this.count=1,this._input=t;if(0===this.count%e.taps)return this.hasRequireFailures()?(this._timer=i(function(){this.state=Yn,this.tryEmit()},e.interval,this),Bn):Yn}return 32},failTimeout:function(){return this._timer=i(function(){this.state=32},this.options.interval,this),32},reset:function(){clearTimeout(this._timer)},emit:function(){this.state==Yn&&(this._input.tapCount=this.count,this.manager.emit(this.options.event,this._input))}});var qn={domEvents:!1,touchAction:\"compute\",enable:!0,inputTarget:null,inputClass:null,preset:[[z,{enable:!1}],[F,{enable:!1},[\"rotate\"]],[H,{direction:_n}],[L,{direction:_n},[\"swipe\"]],[Y],[Y,{event:\"doubletap\",taps:2},[\"tap\"]],[B]],cssProps:{userSelect:\"none\",touchSelect:\"none\",touchCallout:\"none\",contentZooming:\"none\",userDrag:\"none\",tapHighlightColor:\"rgba(0,0,0,0)\"}};q.prototype={set:function(t){return Object.assign(this.options,t),t.touchAction&&this.touchAction.update(),t.inputTarget&&(this.input.destroy(),this.input.target=t.inputTarget,this.input.init()),this},stop:function(t){this.session.stopped=t?2:1},recognize:function(t){var e=this.session;if(!e.stopped){this.touchAction.preventDefaults(t);var n,i=this.recognizers,r=e.curRecognizer;(!r||r&&r.state&Yn)&&(r=e.curRecognizer=null);for(var o=0;o<i.length;)n=i[o],2===e.stopped||r&&n!=r&&!n.canRecognizeWith(r)?n.reset():n.recognize(t),!r&&n.state&(Bn|zn|Hn)&&(r=e.curRecognizer=n),o++}},get:function(t){if(t instanceof D)return t;for(var e=this.recognizers,n=0;n<e.length;n++)if(e[n].options.event==t)return e[n];return null},add:function(t){if(r(t,\"add\",this))return this;var e=this.get(t.options.event);return e&&this.remove(e),this.recognizers.push(t),t.manager=this,this.touchAction.update(),t},remove:function(t){if(r(t,\"remove\",this))return this;if(t=this.get(t)){var e=this.recognizers,n=_(e,t);-1!==n&&(e.splice(n,1),this.touchAction.update())}return this},on:function(t,e){var n=this.handlers;return o(d(t),function(t){n[t]=n[t]||[],n[t].push(e)}),this},off:function(t,e){var n=this.handlers;return o(d(t),function(t){e?n[t]&&n[t].splice(_(n[t],e),1):delete n[t]}),this},emit:function(t,e){this.options.domEvents&&function(t,e){var n=Ge.createEvent(\"Event\");n.initEvent(t,!0,!0),n.gesture=e,e.target.dispatchEvent(n)}(t,e);var n=this.handlers[t]&&this.handlers[t].slice();if(n&&n.length){e.type=t,e.preventDefault=function(){e.srcEvent.preventDefault()};for(var i=0;i<n.length;)n[i](e),i++}},destroy:function(){this.element&&Z(this,!1),this.handlers={},this.session={},this.input.destroy(),this.element=null}},Object.assign(U,{INPUT_START:sn,INPUT_MOVE:an,INPUT_END:ln,INPUT_CANCEL:un,STATE_POSSIBLE:Fn,STATE_BEGAN:Bn,STATE_CHANGED:zn,STATE_ENDED:Hn,STATE_RECOGNIZED:Yn,STATE_CANCELLED:Un,STATE_FAILED:32,DIRECTION_NONE:cn,DIRECTION_LEFT:pn,DIRECTION_RIGHT:hn,DIRECTION_UP:fn,DIRECTION_DOWN:dn,DIRECTION_HORIZONTAL:_n,DIRECTION_VERTICAL:vn,DIRECTION_ALL:yn,Manager:q,Input:b,TouchAction:j,TouchInput:A,MouseInput:T,PointerEventInput:k,TouchMouseInput:I,SingleTouchInput:P,Recognizer:D,AttrRecognizer:V,Tap:Y,Pan:L,Swipe:H,Pinch:F,Rotate:z,Press:B,on:c,off:p,each:o,inherit:s,bindFn:a,prefixed:m}),Ze.Hammer=U;var Zn=function(){function t(t,e){void 0===e&&(e={}),this._callbacks={},this.isListening=!1,Object(qe.d)(e,{domEvents:!0}),this.element=t,this.direction=e.direction||\"x\",e.direction=\"x\"===this.direction?_n:vn,this._options=e}return t.prototype.options=function(t){Object.assign(this._options,t)},t.prototype.on=function(t,e){\"pinch\"!==t&&\"rotate\"!==t||this._hammer.get(t).set({enable:!0}),this._hammer.on(t,e),(this._callbacks[t]||(this._callbacks[t]=[])).push(e)},t.prototype.off=function(t,e){this._hammer.off(t,this._callbacks[t]?e:null)},t.prototype.listen=function(){this.isListening||(this._hammer=U(this.element,this._options)),this.isListening=!0},t.prototype.unlisten=function(){var t,e;if(this._hammer&&this.isListening){for(t in this._callbacks)for(e=0;e<this._callbacks[t].length;e++)this._hammer.off(t,this._callbacks[t]);this._hammer.destroy()}this._callbacks={},this._hammer=null,this.isListening=!1},t.prototype.destroy=function(){this.unlisten(),this.element=this._options=null},t}(),Gn=n(128),Wn=n(166),Xn=n(15),$n=n(147),Kn=n(0),Qn=this&&this.__extends||function(){var t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n])};return function(e,n){function i(){this.constructor=e}t(e,n),e.prototype=null===n?Object.create(n):(i.prototype=n.prototype,new i)}}(),Jn=function(t){function e(){return t.call(this)||this}return Qn(e,t),e.prototype.handleError=function(e){t.prototype.handleError.call(this,e);try{var n=window,i=void 0;(i=n.IonicDevServer)&&i.handleError&&i.handleError(e),(i=(n.Ionic=n.Ionic||{}).Monitor)&&i.handleError&&i.handleError(e)}catch(t){}},e}(Kn.k),ti=n(9),ei=n(19),ni=n(67),ii=n(59),ri=n(148),oi=n(149),si=n(150),ai=n(188);n.d(e,!1,function(){return G.b}),n.d(e,!1,function(){return W.a}),n.d(e,!1,function(){return X.a}),n.d(e,!1,function(){return $.a}),n.d(e,!1,function(){return K.a}),n.d(e,!1,function(){return Q.a}),n.d(e,!1,function(){return J.a}),n.d(e,!1,function(){return tt.a}),n.d(e,!1,function(){return et.a}),n.d(e,!1,function(){return nt.a}),n.d(e,!1,function(){return it.a}),n.d(e,!1,function(){return rt.a}),n.d(e,!1,function(){return ot.a}),n.d(e,!1,function(){return st.a}),n.d(e,!1,function(){return at.a}),n.d(e,!1,function(){return lt.a}),n.d(e,!1,function(){return ut.a}),n.d(e,!1,function(){return ct.a}),n.d(e,!1,function(){}),n.d(e,!1,function(){return pt.a}),n.d(e,!1,function(){return ht.a}),n.d(e,!1,function(){return ft.a}),n.d(e,!1,function(){return dt.a}),n.d(e,!1,function(){return _t.a}),n.d(e,!1,function(){return vt.a}),n.d(e,!1,function(){return yt.a}),n.d(e,!1,function(){return mt.a}),n.d(e,!1,function(){return gt.a}),n.d(e,!1,function(){return bt.a}),n.d(e,!1,function(){}),n.d(e,!1,function(){}),n.d(e,!1,function(){}),n.d(e,!1,function(){return wt.a}),n.d(e,!1,function(){return Ct.a}),n.d(e,!1,function(){return Ot.a}),n.d(e,!1,function(){return St.a}),n.d(e,!1,function(){return Et.a}),n.d(e,!1,function(){return xt.a}),n.d(e,!1,function(){return Tt.a}),n.d(e,!1,function(){return kt.a}),n.d(e,!1,function(){return Pt.a}),n.d(e,!1,function(){return At.a}),n.d(e,!1,function(){return It.a}),n.d(e,!1,function(){return jt.a}),n.d(e,!1,function(){return Dt.a}),n.d(e,!1,function(){return Mt.a}),n.d(e,!1,function(){return Rt.a}),n.d(e,!1,function(){return Nt.a}),n.d(e,!1,function(){return Vt.a}),n.d(e,!1,function(){return Lt.a}),n.d(e,!1,function(){return zt}),n.d(e,!1,function(){return Ht.a}),n.d(e,!1,function(){return Yt.a}),n.d(e,!1,function(){return Ut.a}),n.d(e,!1,function(){return qt.a}),n.d(e,!1,function(){}),n.d(e,!1,function(){}),n.d(e,!1,function(){}),n.d(e,!1,function(){}),n.d(e,!1,function(){return Zt.a}),n.d(e,!1,function(){return Gt.a}),n.d(e,!1,function(){return Wt.a}),n.d(e,!1,function(){return Xt.a}),n.d(e,!1,function(){return $t.a}),n.d(e,!1,function(){return Kt.a}),n.d(e,!1,function(){return Qt.a}),n.d(e,!1,function(){return Jt.a}),n.d(e,!1,function(){return te.a}),n.d(e,!1,function(){return ee.a}),n.d(e,!1,function(){return ne.a}),n.d(e,!1,function(){return ie.a}),n.d(e,!1,function(){return re.a}),n.d(e,!1,function(){}),n.d(e,!1,function(){}),n.d(e,!1,function(){}),n.d(e,!1,function(){return oe.a}),n.d(e,!1,function(){return se.a}),n.d(e,!1,function(){return ae.a}),n.d(e,!1,function(){return le.a}),n.d(e,!1,function(){return ue.a}),n.d(e,!1,function(){return ce.a}),n.d(e,!1,function(){return pe.a}),n.d(e,!1,function(){return he.a}),n.d(e,!1,function(){return fe.a}),n.d(e,!1,function(){return de.a}),n.d(e,!1,function(){return _e.a}),n.d(e,!1,function(){}),n.d(e,!1,function(){return ve.a}),n.d(e,!1,function(){return ye.a}),n.d(e,!1,function(){return me.a}),n.d(e,!1,function(){return ge.a}),n.d(e,!1,function(){return be.a}),n.d(e,!1,function(){return we.a}),n.d(e,!1,function(){return Ce.a}),n.d(e,!1,function(){return Oe.a}),n.d(e,!1,function(){return Se.a}),n.d(e,!1,function(){return Ee.a}),n.d(e,!1,function(){return xe.a}),n.d(e,!1,function(){return Te.a}),n.d(e,!1,function(){return ke.a}),n.d(e,!1,function(){return Pe.a}),n.d(e,!1,function(){return Ae.a}),n.d(e,!1,function(){return Ie.a}),n.d(e,!1,function(){return je.a}),n.d(e,!1,function(){}),n.d(e,!1,function(){}),n.d(e,!1,function(){}),n.d(e,!1,function(){}),n.d(e,!1,function(){return De.a}),n.d(e,!1,function(){return De.c}),n.d(e,!1,function(){return De.b}),n.d(e,!1,function(){return Me.a}),n.d(e,!1,function(){return Re.a}),n.d(e,!1,function(){return Re.b}),n.d(e,!1,function(){return Ne.a}),n.d(e,!1,function(){return Ve.a}),n.d(e,!1,function(){return function(t){return function(t){return t}}}),n.d(e,!1,function(){return Le.a}),n.d(e,!1,function(){return Fe.a}),n.d(e,!1,function(){return Be.a}),n.d(e,!1,function(){}),n.d(e,!1,function(){}),n.d(e,!1,function(){return ze.a}),n.d(e,!1,function(){return ze.b}),n.d(e,!1,function(){}),n.d(e,!1,function(){return He.b}),n.d(e,!1,function(){return He.a}),n.d(e,!1,function(){return Ye.a}),n.d(e,!1,function(){return Ue.a}),n.d(e,!1,function(){return Zn}),n.d(e,!1,function(){return Gn.a}),n.d(e,!1,function(){return Wn.a}),n.d(e,!1,function(){return Xn.a}),n.d(e,!1,function(){return Xn.b}),n.d(e,!1,function(){return Xn.d}),n.d(e,!1,function(){return Xn.c}),n.d(e,!1,function(){return Xn.j}),n.d(e,!1,function(){return Xn.k}),n.d(e,!1,function(){return Xn.l}),n.d(e,!1,function(){}),n.d(e,!1,function(){}),n.d(e,!1,function(){return $n.a}),n.d(e,!1,function(){}),n.d(e,!1,function(){return $n.b}),n.d(e,!1,function(){return Jn}),n.d(e,!1,function(){return ti.a}),n.d(e,!1,function(){return ei.a}),n.d(e,!1,function(){}),n.d(e,!1,function(){}),n.d(e,!1,function(){return qe.r}),n.d(e,!1,function(){}),n.d(e,!1,function(){return Ft.a}),n.d(e,!1,function(){return ni.a}),n.d(e,!1,function(){return ii.a}),n.d(e,!1,function(){return ri.a}),n.d(e,!1,function(){return oi.a}),n.d(e,!1,function(){return si.a}),n.d(e,!1,function(){return ai.a}),n.d(e,!1,function(){}),n.d(e,!1,function(){return ai.b})},function(t,e,n){\"use strict\";n.d(e,\"a\",function(){return i});var i=function(){function t(t){void 0===t&&(t={}),this.data=t}return t.prototype.get=function(t){return this.data[t]},t}()},function(t,e,n){\"use strict\";n.d(e,\"a\",function(){return o});n(1);var i=n(29),r=this&&this.__extends||function(){var t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n])};return function(e,n){function i(){this.constructor=e}t(e,n),e.prototype=null===n?Object.create(n):(i.prototype=n.prototype,new i)}}(),o=function(t){function e(e,n,i,r,o,s,a){var l=t.call(this,e,n,i,\"label\")||this;return l.type=\"\"===r?\"floating\":\"\"===o?\"stacked\":\"\"===s?\"fixed\":\"\"===a?\"inset\":null,l}return r(e,t),Object.defineProperty(e.prototype,\"id\",{get:function(){return this._id},set:function(t){this._id=t,t&&this.setElementAttribute(\"id\",t)},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,\"text\",{get:function(){return this.getNativeElement().textContent||\"\"},enumerable:!0,configurable:!0}),e}(i.a)},function(t,e,n){\"use strict\";e.c=function(t){var e,n={},i=[\"webkitTransform\",\"-webkit-transform\",\"webkit-transform\",\"transform\"];for(e=0;e<i.length;e++)if(void 0!==t.style[i[e]]){n.transform=i[e];break}for(i=[\"webkitTransition\",\"transition\"],e=0;e<i.length;e++)if(void 0!==t.style[i[e]]){n.transition=i[e];break}var r=n.transition.indexOf(\"webkit\")>-1;return n.transitionDuration=(r?\"-webkit-\":\"\")+\"transition-duration\",n.transitionTimingFn=(r?\"-webkit-\":\"\")+\"transition-timing-function\",n.transitionDelay=(r?\"-webkit-\":\"\")+\"transition-delay\",n.transitionEnd=(r?\"webkitTransitionEnd \":\"\")+\"transitionend\",n.transformOrigin=(r?\"-webkit-\":\"\")+\"transform-origin\",n.animationDelay=r?\"webkitAnimationDelay\":\"animationDelay\",n},e.f=function(t){if(t){var e=t.changedTouches;if(e&&e.length>0){var n=e[0];return{x:n.clientX,y:n.clientY}}var i=t.pageX;if(void 0!==i)return{x:i,y:t.pageY}}return{x:0,y:0}},e.d=function(t,e,n){if(e&&n){var i=e.x-n.x,r=e.y-n.y;return i*i+r*r>t*t}return!1},e.e=function(t){return!!t&&(\"TEXTAREA\"===t.tagName||\"true\"===t.contentEditable||\"INPUT\"===t.tagName&&!i.test(t.type))},n.d(e,\"a\",function(){return i}),e.b=function(t,e){for(var n=t.attributes,i=0;i<n.length;i++){var o=n[i];-1===r.indexOf(o.name)&&e.setAttribute(o.name,o.value)}};var i=/^(radio|checkbox|range|file|submit|reset|color|image|button)$/i,r=[\"value\",\"checked\",\"disabled\",\"readonly\",\"placeholder\",\"type\",\"class\",\"style\",\"id\",\"autofocus\",\"autocomplete\",\"autocorrect\"]},function(t,e,n){\"use strict\";n.d(e,\"a\",function(){return r});var i=n(18),r=function(){function t(t,e,n){this._dur=null,this._es=null,this._rvEs=null,this.hasChildren=!1,this.isPlaying=!1,this.hasCompleted=!1,this.plt=t,this.element(e),this.opts=n}return t.prototype.element=function(t){if(t)if(\"string\"==typeof t){t=this.plt.doc().querySelectorAll(t);for(e=0;e<t.length;e++)this._addEle(t[e])}else if(t.length)for(var e=0;e<t.length;e++)this._addEle(t[e]);else this._addEle(t);return this},t.prototype._addEle=function(t){t.nativeElement&&(t=t.nativeElement),1===t.nodeType&&(this._eL=(this._e=this._e||[]).push(t))},t.prototype.add=function(t){return t.parent=this,this.hasChildren=!0,this._cL=(this._c=this._c||[]).push(t),this},t.prototype.getDuration=function(t){return t&&Object(i.h)(t.duration)?t.duration:null!==this._dur?this._dur:this.parent?this.parent.getDuration():0},t.prototype.isRoot=function(){return!this.parent},t.prototype.duration=function(t){return this._dur=t,this},t.prototype.getEasing=function(){return this._rv&&this._rvEs?this._rvEs:null!==this._es?this._es:this.parent&&this.parent.getEasing()||null},t.prototype.easing=function(t){return this._es=t,this},t.prototype.easingReverse=function(t){return this._rvEs=t,this},t.prototype.from=function(t,e){return this._addProp(\"from\",t,e),this},t.prototype.to=function(t,e,n){var i=this._addProp(\"to\",t,e);return n&&this.afterClearStyles([i.trans?this.plt.Css.transform:t]),this},t.prototype.fromTo=function(t,e,n,i){return this.from(t,e).to(t,n,i)},t.prototype._getProp=function(t){return this._fx?this._fx.find(function(e){return e.name===t}):(this._fx=[],null)},t.prototype._addProp=function(t,e,n){var i=this._getProp(e);if(!i){var r=1===o[e];this._fx.push(i={name:e,trans:r,wc:r?this.plt.Css.transform:e})}var a={val:n,num:null,unit:\"\"};if(i[t]=a,\"string\"==typeof n&&n.indexOf(\" \")<0){var l=n.match(s),u=parseFloat(l[1]);isNaN(u)||(a.num=u),a.unit=l[0]!==l[2]?l[2]:\"\"}else\"number\"==typeof n&&(a.num=n);return i},t.prototype.beforeAddClass=function(t){return(this._bfAdd=this._bfAdd||[]).push(t),this},t.prototype.beforeRemoveClass=function(t){return(this._bfRm=this._bfRm||[]).push(t),this},t.prototype.beforeStyles=function(t){return this._bfSty=t,this},t.prototype.beforeClearStyles=function(t){this._bfSty=this._bfSty||{};for(var e=0;e<t.length;e++)this._bfSty[t[e]]=\"\";return this},t.prototype.beforeAddRead=function(t){return(this._rdFn=this._rdFn||[]).push(t),this},t.prototype.beforeAddWrite=function(t){return(this._wrFn=this._wrFn||[]).push(t),this},t.prototype.afterAddClass=function(t){return(this._afAdd=this._afAdd||[]).push(t),this},t.prototype.afterRemoveClass=function(t){return(this._afRm=this._afRm||[]).push(t),this},t.prototype.afterStyles=function(t){return this._afSty=t,this},t.prototype.afterClearStyles=function(t){this._afSty=this._afSty||{};for(var e=0;e<t.length;e++)this._afSty[t[e]]=\"\";return this},t.prototype.play=function(t){var e=this;this.plt&&(this._isAsync=this._hasDuration(t),this._clearAsync(),this._playInit(t),this.plt.raf(function(){e.plt.raf(e._playDomInspect.bind(e,t))}))},t.prototype.syncPlay=function(){if(this.plt){var t={duration:0};this._isAsync=!1,this._clearAsync(),this._playInit(t),this._playDomInspect(t)}},t.prototype._playInit=function(t){this._twn=!1,this.isPlaying=!0,this.hasCompleted=!1,this._hasDur=this.getDuration(t)>a;for(var e=this._c,n=0;n<this._cL;n++)e[n]._playInit(t);this._hasDur&&(this._progress(0),this._willChg(!0))},t.prototype._playDomInspect=function(t){this._beforeAnimation();var e=this.getDuration(t);this._isAsync&&this._asyncEnd(e,!0),this._playProgress(t),this._isAsync&&this.plt&&this.plt.raf(this._playToStep.bind(this,1))},t.prototype._playProgress=function(t){for(var e=this._c,n=0;n<this._cL;n++)e[n]._playProgress(t);this._hasDur?this._setTrans(this.getDuration(t),!1):(this._progress(1),this._setAfterStyles(),this._didFinish(!0))},t.prototype._playToStep=function(t){for(var e=this._c,n=0;n<this._cL;n++)e[n]._playToStep(t);this._hasDur&&this._progress(t)},t.prototype._asyncEnd=function(t,e){var n=this;n._unrgTrns=this.plt.transitionEnd(n._transEl(),function(){n._clearAsync(),n._playEnd(),n._didFinishAll(e,!0,!1)},!1),n._tm=n.plt.timeout(function(){n._tm=void 0,n._clearAsync(),n._playEnd(e?1:0),n._didFinishAll(e,!0,!1)},t+l)},t.prototype._playEnd=function(t){for(var e=this._c,n=0;n<this._cL;n++)e[n]._playEnd(t);this._hasDur&&(Object(i.h)(t)&&(this._setTrans(0,!0),this._progress(t)),this._setAfterStyles(),this._willChg(!1))},t.prototype._hasDuration=function(t){if(this.getDuration(t)>a)return!0;for(var e=this._c,n=0;n<this._cL;n++)if(e[n]._hasDuration(t))return!0;return!1},t.prototype._hasDomReads=function(){if(this._rdFn&&this._rdFn.length)return!0;for(var t=this._c,e=0;e<this._cL;e++)if(t[e]._hasDomReads())return!0;return!1},t.prototype.stop=function(t){void 0===t&&(t=1),this._clearAsync(),this._hasDur=!0,this._playEnd(t)},t.prototype._clearAsync=function(){this._unrgTrns&&this._unrgTrns(),this._tm&&clearTimeout(this._tm),this._tm=this._unrgTrns=void 0},t.prototype._progress=function(t){var e,n=this._fx,i=this._eL;if(n&&i){this._rv&&(t=-1*t+1);var r,o,s=\"\",a=this._e;for(r=0;r<n.length;r++){var l=n[r];if(l.from&&l.to){var u=l.from.num,c=l.to.num,p=u!==c;if(p&&(this._twn=!0),0===t)e=l.from.val;else if(1===t)e=l.to.val;else if(p){var h=(c-u)*t+u,f=l.to.unit;\"px\"===f&&(h=Math.round(h)),e=h+f}if(null!==e){var d=l.name;if(l.trans)s+=d+\"(\"+e+\") \";else for(o=0;o<i;o++)a[o].style[d]=e}}}if(s.length){(!this._rv&&1!==t||this._rv&&0!==t)&&(s+=\"translateZ(0px)\");var _=this.plt.Css.transform;for(r=0;r<a.length;r++)a[r].style[_]=s}}},t.prototype._setTrans=function(t,e){if(this._fx)for(var n,i=this._e,r=e?\"linear\":this.getEasing(),o=t+\"ms\",s=this.plt.Css,a=s.transition,l=s.transitionDuration,u=s.transitionTimingFn,c=0;c<this._eL;c++)n=i[c].style,t>0?(n[a]=\"\",n[l]=o,r&&(n[u]=r)):n[a]=\"none\"},t.prototype._beforeAnimation=function(){this._fireBeforeReadFunc(),this._fireBeforeWriteFunc(),this._setBeforeStyles()},t.prototype._setBeforeStyles=function(){var t,e,n=this._c;for(t=0;t<this._cL;t++)n[t]._setBeforeStyles();if(!this._rv){var i,r,o,s=this._bfAdd,a=this._bfRm;for(t=0;t<this._eL;t++){if(i=this._e[t],r=i.classList,s)for(e=0;e<s.length;e++)r.add(s[e]);if(a)for(e=0;e<a.length;e++)r.remove(a[e]);if(this._bfSty)for(o in this._bfSty)i.style[o]=this._bfSty[o]}}},t.prototype._fireBeforeReadFunc=function(){for(var t=this._c,e=0;e<this._cL;e++)t[e]._fireBeforeReadFunc();var n=this._rdFn;if(n)for(e=0;e<n.length;e++)n[e]()},t.prototype._fireBeforeWriteFunc=function(){for(var t=this._c,e=0;e<this._cL;e++)t[e]._fireBeforeWriteFunc();var n=this._wrFn;if(this._wrFn)for(e=0;e<n.length;e++)n[e]()},t.prototype._setAfterStyles=function(){var t,e,n,i,r=this._e;for(t=0;t<this._eL;t++)if(n=r[t],i=n.classList,n.style[this.plt.Css.transitionDuration]=n.style[this.plt.Css.transitionTimingFn]=\"\",this._rv){if(this._bfAdd)for(e=0;e<this._bfAdd.length;e++)i.remove(this._bfAdd[e]);if(this._bfRm)for(e=0;e<this._bfRm.length;e++)i.add(this._bfRm[e]);if(this._bfSty)for(var o in this._bfSty)n.style[o]=\"\"}else{if(this._afAdd)for(e=0;e<this._afAdd.length;e++)i.add(this._afAdd[e]);if(this._afRm)for(e=0;e<this._afRm.length;e++)i.remove(this._afRm[e]);if(this._afSty)for(var o in this._afSty)n.style[o]=this._afSty[o]}},t.prototype._willChg=function(t){var e,n,i=this._fx;if(t&&i){e=[];for(o=0;o<i.length;o++){var r=i[o].wc;\"webkitTransform\"===r?e.push(\"transform\",\"-webkit-transform\"):e.push(r)}n=e.join(\",\")}else n=\"\";for(var o=0;o<this._eL;o++)this._e[o].style.willChange=n},t.prototype.progressStart=function(){this._clearAsync(),this._beforeAnimation(),this._progressStart()},t.prototype._progressStart=function(){for(var t=this._c,e=0;e<this._cL;e++)t[e]._progressStart();this._setTrans(0,!0),this._willChg(!0)},t.prototype.progressStep=function(t){t=Math.min(1,Math.max(0,t));for(var e=this._c,n=0;n<this._cL;n++)e[n].progressStep(t);this._rv&&(t=-1*t+1),this._progress(t)},t.prototype.progressEnd=function(t,e,n){void 0===n&&(n=-1),this._rv&&(e=-1*e+1);var i=t?1:0;Math.abs(e-i)<.05?n=0:n<0&&(n=this._dur),this._isAsync=n>30,this._progressEnd(t,i,n,this._isAsync),this._isAsync&&(this._asyncEnd(n,t),this.plt&&this.plt.raf(this._playToStep.bind(this,i)))},t.prototype._progressEnd=function(t,e,n,i){for(var r=this._c,o=0;o<this._cL;o++)r[o]._progressEnd(t,e,n,i);i?(this.isPlaying=!0,this.hasCompleted=!1,this._hasDur=!0,this._willChg(!0),this._setTrans(n,!1)):(this._progress(e),this._willChg(!1),this._setAfterStyles(),this._didFinish(t))},t.prototype.onFinish=function(t,e,n){return void 0===e&&(e=!1),void 0===n&&(n=!1),n&&(this._fFn=this._fOneFn=void 0),e?(this._fOneFn=this._fOneFn||[],this._fOneFn.push(t)):(this._fFn=this._fFn||[],this._fFn.push(t)),this},t.prototype._didFinishAll=function(t,e,n){for(var i=this._c,r=0;r<this._cL;r++)i[r]._didFinishAll(t,e,n);(e&&this._isAsync||n&&!this._isAsync)&&this._didFinish(t)},t.prototype._didFinish=function(t){if(this.isPlaying=!1,this.hasCompleted=t,this._fFn)for(e=0;e<this._fFn.length;e++)this._fFn[e](this);if(this._fOneFn){for(var e=0;e<this._fOneFn.length;e++)this._fOneFn[e](this);this._fOneFn.length=0}},t.prototype.reverse=function(t){void 0===t&&(t=!0);for(var e=this._c,n=0;n<this._cL;n++)e[n].reverse(t);return this._rv=t,this},t.prototype.destroy=function(){for(var t=this._c,e=0;e<this._cL;e++)t[e].destroy();this._clearAsync(),this.parent=this.plt=this._e=this._rdFn=this._wrFn=null,this._c&&(this._c.length=this._cL=0),this._fFn&&(this._fFn.length=0),this._fOneFn&&(this._fOneFn.length=0)},t.prototype._transEl=function(){for(var t,e=0;e<this._cL;e++)if(t=this._c[e]._transEl())return t;return this._twn&&this._hasDur&&this._eL?this._e[0]:null},t}(),o={translateX:1,translateY:1,translateZ:1,scale:1,scaleX:1,scaleY:1,scaleZ:1,rotate:1,rotateX:1,rotateY:1,rotateZ:1,skewX:1,skewY:1,perspective:1},s=/(^-?\\d*\\.?\\d*)(.*)/,a=32,l=400},function(t,e,n){\"use strict\";n.d(e,\"a\",function(){return r});n(1);var i=n(18),r=(n(2),function(){function t(t,e){this.plt=t,this._config=e,this._ids=0,this._trns={}}return t.prototype.getRootTrnsId=function(t){for(t=t.parent;t;){if(Object(i.l)(t._trnsId))return t._trnsId;t=t.parent}return null},t.prototype.nextId=function(){return this._ids++},t.prototype.get=function(t,e,n,i){var r=this._config.getTransition(i.animation);r||(r=this._config.getTransition(\"ios-transition\"));var o=new r(this.plt,e,n,i);return o.trnsId=t,this._trns[t]?this._trns[t].add(o):this._trns[t]=o,o},t.prototype.destroy=function(t){var e=this._trns[t];e&&(e.destroy(),delete this._trns[t])},t}())},function(t,e,n){\"use strict\";n.d(e,\"a\",function(){return i});n(29),n(18),n(1),n(2),this&&this.__extends||function(){var t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n])}}();var i=function(){return function(){}}()},function(t,e,n){\"use strict\";n.d(e,\"a\",function(){return o});n(1);var i=n(29),r=this&&this.__extends||function(){var t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n])};return function(e,n){function i(){this.constructor=e}t(e,n),e.prototype=null===n?Object.create(n):(i.prototype=n.prototype,new i)}}(),o=function(t){function e(e,n,i){return t.call(this,e,n,i,\"card\")||this}return r(e,t),e}(i.a)},function(t,e,n){\"use strict\";n.d(e,\"a\",function(){return i});n(2);var i=function(){function t(t){var e=this;t&&t.ready().then(function(){e._p=t.win().TapticEngine})}return t.prototype.available=function(){return!!this._p},t.prototype.selection=function(){this._p&&this._p.selection()},t.prototype.gestureSelectionStart=function(){this._p&&this._p.gestureSelectionStart()},t.prototype.gestureSelectionChanged=function(){this._p&&this._p.gestureSelectionChanged()},t.prototype.gestureSelectionEnd=function(){this._p&&this._p.gestureSelectionEnd()},t.prototype.notification=function(t){this._p&&this._p.notification(t)},t.prototype.impact=function(t){this._p&&this._p.impact(t)},t}()},function(t,e,n){\"use strict\";n.d(e,\"a\",function(){return o});n(1);var i=n(29),r=this&&this.__extends||function(){var t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n])};return function(e,n){function i(){this.constructor=e}t(e,n),e.prototype=null===n?Object.create(n):(i.prototype=n.prototype,new i)}}(),o=function(t){function e(e,n,i,r){var o=t.call(this,e,i,n,\"list-header\")||this;return o._id=r,o}return r(e,t),Object.defineProperty(e.prototype,\"id\",{get:function(){return this._id},set:function(t){this._id=t,this.setElementAttribute(\"id\",t)},enumerable:!0,configurable:!0}),e}(i.a)},function(t,e,n){\"use strict\";var i=n(66),r=n(194),o=n(160),s=n(197);e.Observable=function(){function t(t){this._isScalar=!1,t&&(this._subscribe=t)}return t.prototype.lift=function(e){var n=new t;return n.source=this,n.operator=e,n},t.prototype.subscribe=function(t,e,n){var i=this.operator,o=r.toSubscriber(t,e,n);if(i?i.call(o,this.source):o.add(this.source?this._subscribe(o):this._trySubscribe(o)),o.syncErrorThrowable&&(o.syncErrorThrowable=!1,o.syncErrorThrown))throw o.syncErrorValue;return o},t.prototype._trySubscribe=function(t){try{return this._subscribe(t)}catch(e){t.syncErrorThrown=!0,t.syncErrorValue=e,t.error(e)}},t.prototype.forEach=function(t,e){var n=this;if(e||(i.root.Rx&&i.root.Rx.config&&i.root.Rx.config.Promise?e=i.root.Rx.config.Promise:i.root.Promise&&(e=i.root.Promise)),!e)throw new Error(\"no Promise impl found\");return new e(function(e,i){var r;r=n.subscribe(function(e){if(r)try{t(e)}catch(t){i(t),r.unsubscribe()}else t(e)},i,e)})},t.prototype._subscribe=function(t){return this.source.subscribe(t)},t.prototype[o.observable]=function(){return this},t.prototype.pipe=function(){for(var t=[],e=0;e<arguments.length;e++)t[e-0]=arguments[e];return 0===t.length?this:s.pipeFromArray(t)(this)},t.prototype.toPromise=function(t){var e=this;if(t||(i.root.Rx&&i.root.Rx.config&&i.root.Rx.config.Promise?t=i.root.Rx.config.Promise:i.root.Promise&&(t=i.root.Promise)),!t)throw new Error(\"no Promise impl found\");return new t(function(t,n){var i;e.subscribe(function(t){return i=t},function(t){return n(t)},function(){return t(i)})})},t.create=function(e){return new t(e)},t}()},function(t,e,n){\"use strict\";n.d(e,\"a\",function(){return r});var i=n(18),r=function(){function t(){this._menus=[]}return t.prototype.open=function(t){var e=this.get(t);if(e&&!this.isAnimating()){var n=this.getOpen();return n&&e!==n&&n.setOpen(!1,!1),e.open()}return Promise.resolve(!1)},t.prototype.close=function(t){var e;return(e=t?this.get(t):this.getOpen())?e.close():Promise.resolve(!1)},t.prototype.toggle=function(t){var e=this.get(t);if(e&&!this.isAnimating()){var n=this.getOpen();return n&&e!==n&&n.setOpen(!1,!1),e.toggle()}return Promise.resolve(!1)},t.prototype.enable=function(t,e){var n=this.get(e);if(n)return n.enable(t)},t.prototype.swipeEnable=function(t,e){var n=this.get(e);if(n)return n.swipeEnable(t)},t.prototype.isOpen=function(t){if(t){var e=this.get(t);return e&&e.isOpen||!1}return!!this.getOpen()},t.prototype.isEnabled=function(t){var e=this.get(t);return e&&e.enabled||!1},t.prototype.get=function(t){return\"left\"===t||\"right\"===t?this._menus.find(function(e){return e.side===t&&e.enabled})||this._menus.find(function(e){return e.side===t})||null:t?this._menus.find(function(e){return e.id===t})||null:this._menus.find(function(t){return t.enabled})||(this._menus.length?this._menus[0]:null)},t.prototype.getOpen=function(){return this._menus.find(function(t){return t.isOpen})},t.prototype.getMenus=function(){return this._menus},t.prototype.isAnimating=function(){return this._menus.some(function(t){return t.isAnimating()})},t.prototype._register=function(t){this._menus.push(t)},t.prototype._unregister=function(t){Object(i.q)(this._menus,t)},t.prototype._setActiveMenu=function(t){var e=t.side;this._menus.filter(function(n){return n.side===e&&n!==t}).map(function(t){return t.enable(!1)})},t.registerType=function(t,e){o[t]=e},t.create=function(t,e,n){return new o[t](e,n)},t}(),o={}},function(t,e,n){\"use strict\";n.d(e,\"a\",function(){return c});var i=n(0),r=n(74),o=n(175),s=(n.n(o),n(1),n(35)),a=(n(6),n(19),n(53)),l=n(18),u=(n(20),n(2),this&&this.__extends||function(){var t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n])};return function(e,n){function i(){this.constructor=e}t(e,n),e.prototype=null===n?Object.create(n):(i.prototype=n.prototype,new i)}}()),c=function(t){function e(e,n,o,s,a,l,u,c,p,h){var f=t.call(this,e,a,l,\"input\",\"\",o,c,p)||this;if(f._plt=n,f._app=s,f._content=u,f.ngControl=p,f._dom=h,f._clearInput=!1,f._readonly=!1,f._type=\"text\",f._isTextarea=!1,f._onDestroy=new r.Subject,f._useAssist=!1,f._relocated=!1,f.autocomplete=\"\",f.autocorrect=\"\",f.placeholder=\"\",f.min=null,f.max=null,f.step=null,f.input=new i.l,f.blur=new i.l,f.focus=new i.l,f.autocomplete=e.get(\"autocomplete\",\"off\"),f.autocorrect=e.get(\"autocorrect\",\"off\"),f._autoFocusAssist=e.get(\"autoFocusAssist\",\"delay\"),f._keyboardHeight=e.getNumber(\"keyboardHeight\"),f._isTextarea=!(\"ION-TEXTAREA\"!==a.nativeElement.tagName),f._isTextarea&&c&&c.setElementClass(\"item-textarea\",!0),!u)return f;e.getBoolean(\"hideCaretOnScroll\",!1)&&f._enableHideCaretOnScroll();var d=n.win();if(d.Ionic&&d.Ionic.keyboardPlugin){e.getBoolean(\"keyboardResizes\",!1)?(f._keyboardHeight=e.getNumber(\"keyboardSafeArea\",60),f._enableScrollMove()):(f._enableScrollPadding(),f._enableScrollMove())}else{f._useAssist=e.getBoolean(\"scrollAssist\",!1);e.getBoolean(\"scrollPadding\",f._useAssist)&&f._enableScrollPadding()}return f}return u(e,t),Object.defineProperty(e.prototype,\"clearInput\",{get:function(){return this._clearInput},set:function(t){this._clearInput=!this._isTextarea&&Object(l.o)(t)},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,\"type\",{get:function(){return this._isTextarea?\"text\":this._type},set:function(t){this._type=t},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,\"readonly\",{get:function(){return this._readonly},set:function(t){this._readonly=Object(l.o)(t)},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,\"clearOnEdit\",{get:function(){return this._clearOnEdit},set:function(t){this._clearOnEdit=Object(l.o)(t)},enumerable:!0,configurable:!0}),e.prototype.ngAfterContentInit=function(){},e.prototype.ngAfterViewInit=function(){!1!==this.clearOnEdit&&\"password\"===this.type&&(this.clearOnEdit=!0);var t=this._elementRef.nativeElement,e=this._native.nativeElement;if(Object(s.b)(t,e),t.hasAttribute(\"tabIndex\")&&t.removeAttribute(\"tabIndex\"),t.hasAttribute(\"autofocus\"))switch(t.removeAttribute(\"autofocus\"),this._autoFocusAssist){case\"immediate\":e.focus();break;case\"delay\":this._plt.timeout(function(){return e.focus()},800)}this._initialize(),this.focus.observers.length>0&&console.warn(\"(focus) is deprecated in ion-input, use (ionFocus) instead\"),this.blur.observers.length>0&&console.warn(\"(blur) is deprecated in ion-input, use (ionBlur) instead\")},e.prototype.ngOnDestroy=function(){t.prototype.ngOnDestroy.call(this),this._onDestroy.next(),this._onDestroy=null},e.prototype.initFocus=function(){this.setFocus()},e.prototype.setFocus=function(){this.isFocus()||this._native.nativeElement.focus()},e.prototype.setBlur=function(){this.isFocus()&&this._native.nativeElement.blur()},e.prototype.onInput=function(t){this.value=t.target.value,this.input.emit(t)},e.prototype.onBlur=function(t){this._fireBlur(),this.blur.emit(t),this._scrollData=null,this._clearOnEdit&&this.hasValue()&&(this._didBlurAfterEdit=!0)},e.prototype.onFocus=function(t){this._fireFocus(),this.focus.emit(t)},e.prototype.onKeydown=function(t){t&&this._clearOnEdit&&this.checkClearOnEdit(t.target.value)},e.prototype._inputUpdated=function(){t.prototype._inputUpdated.call(this);var e=this._native.nativeElement,n=this._value;e.value!==n&&(e.value=n)},e.prototype.clearTextInput=function(){this.value=\"\"},e.prototype.checkClearOnEdit=function(t){this._clearOnEdit&&(this._didBlurAfterEdit&&this.hasValue()&&this.clearTextInput(),this._didBlurAfterEdit=!1)},e.prototype._getScrollData=function(){if(!this._content)return{scrollAmount:0,scrollTo:0,scrollPadding:0,scrollDuration:0,inputSafeY:0};if(this._scrollData)return this._scrollData;var t=this._elementRef.nativeElement;return t=t.closest(\"ion-item,[ion-item]\")||t,this._scrollData=function(t,e,n,i,r){var o=t+n.contentTop-n.scrollTop,s=o+e,a=n.contentTop,l=(r-i-a)/2,u=a+l,c=o>=a&&o<=u,h=o<a,f=o>u,d=s>=a&&s<=u,_=s>u,v={scrollAmount:0,scrollTo:0,scrollPadding:0,scrollDuration:0,inputSafeY:0};if(v.scrollPadding=i,c&&d)return v;(f||_||h)&&(v.scrollAmount=l>e?Math.round(u-s):Math.round(a-o),v.inputSafeY=4-(o-a),h&&v.scrollAmount>e&&(v.scrollAmount=e)),v.scrollTo=n.scrollTop-v.scrollAmount;var y=Math.abs(v.scrollAmount)/p;return v.scrollDuration=Math.min(400,Math.max(150,y)),v}(t.offsetTop,t.offsetHeight,this._content.getContentDimensions(),this._keyboardHeight,this._plt.height())},e.prototype._relocateInput=function(t){if(this._relocated!==t){var e=this._plt,n=this.getNativeElement(),i=this._native.nativeElement;if(t){!function(t,e,n){if(e){var i=e.offsetTop,r=e.offsetLeft,o=e.offsetWidth,s=e.offsetHeight,a=e.cloneNode(!1),l=a.style;a.classList.add(\"cloned-input\"),a.setAttribute(\"aria-hidden\",\"true\"),l.pointerEvents=\"none\",l.position=\"absolute\",l.top=i+\"px\",l.left=r+\"px\",l.width=o+\"px\",l.height=s+\"px\";var u=n.cloneNode(!1);u.value=n.value,u.tabIndex=-1,a.appendChild(u),e.parentNode.appendChild(a),e.style.pointerEvents=\"none\"}n.style[t.Css.transform]=\"scale(0)\"}(e,n,i);var r=this._getScrollData().inputSafeY;i.style[e.Css.transform]=\"translate3d(\"+(this._plt.isRTL?9999:-9999)+\"px,\"+r+\"px,0)\",i.style.opacity=\"0\"}else!function(t,e,n){if(e&&e.parentElement){for(var i=e.parentElement.querySelectorAll(\".cloned-input\"),r=0;r<i.length;r++)i[r].parentNode.removeChild(i[r]);e.style.pointerEvents=\"\"}n.style[t.Css.transform]=\"\",n.style.opacity=\"\"}(e,n,i);this._relocated=t}},e.prototype._enableScrollPadding=function(){var t=this;this.ionFocus.subscribe(function(){var e=t._content,n=t._getScrollData().scrollPadding;e.addScrollPadding(n),e.clearScrollPaddingFocusOut()})},e.prototype._enableHideCaretOnScroll=function(){function t(t){i.isFocus()&&i._dom.write(function(){return i._relocateInput(t)})}var e=this,n=this._content;n.ionScrollStart.takeUntil(this._onDestroy).subscribe(function(){return t(!0)}),n.ionScrollEnd.takeUntil(this._onDestroy).subscribe(function(){return t(!1)}),this.ionBlur.subscribe(function(){return e._relocateInput(!1)});var i=this},e.prototype._enableScrollMove=function(){var t=this;this.ionFocus.subscribe(function(){var e=t._getScrollData();Math.abs(e.scrollAmount)>4&&t._content.scrollTo(0,e.scrollTo,e.scrollDuration)})},e.prototype._pointerStart=function(t){\"touchstart\"===t.type&&(this._isTouch=!0),(this._isTouch||!this._isTouch&&\"mousedown\"===t.type)&&this._app.isEnabled()&&(this._coord=Object(s.f)(t))},e.prototype._pointerEnd=function(t){if(this._isTouch&&\"mouseup\"===t.type||!this._app.isEnabled())t.preventDefault(),t.stopPropagation();else if(this._coord){var e=Object(s.f)(t);Object(s.d)(8,this._coord,e)||this.isFocus()||(t.preventDefault(),t.stopPropagation(),this._jsSetFocus())}this._coord=null},e.prototype._jsSetFocus=function(){var t=this,e=this._content;e||this.setFocus();var n=this._getScrollData();Math.abs(n.scrollAmount)<4?this.setFocus():(this._relocateInput(!0),this.setFocus(),e.scrollTo(0,n.scrollTo,n.scrollDuration,function(){t._relocateInput(!1),t.setFocus()}))},e}(a.a),p=.3},function(t,e,n){\"use strict\";n.d(e,\"a\",function(){return i});var i=function(){function t(t,e){this._elementRef=t,this._renderer=e}return t.prototype.getNativeElement=function(){return this._elementRef.nativeElement},t.prototype.setElementClass=function(t,e){this._renderer.setElementClass(this._elementRef.nativeElement,t,e)},t}()},function(t,e,n){\"use strict\";n.d(e,\"a\",function(){return p});var i=n(0),r=n(74),o=n(175),s=(n.n(o),n(1),n(31),n(29)),a=n(18),l=(n(9),n(7),n(50)),u=n(77),c=(n(38),n(2),n(118),n(4),this&&this.__extends||function(){var t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n])};return function(e,n){function i(){this.constructor=e}t(e,n),e.prototype=null===n?Object.create(n):(i.prototype=n.prototype,new i)}}()),p=function(t){function e(e,n,o,s,a,l,u,c,p){var f=t.call(this,s,a,u,\"tabs\")||this;f.viewCtrl=n,f._app=o,f._plt=l,f._linker=c,f._ids=-1,f._tabs=[],f._selectHistory=[],f._onDestroy=new r.Subject,f.ionChange=new i.l,f.parent=e,f.id=\"t\"+ ++h,f._sbPadding=s.getBoolean(\"statusbarPadding\"),f.tabsHighlight=s.getBoolean(\"tabsHighlight\"),f.parent?f.parent.registerChildNav(f):n&&n.getNav()?(f.parent=n.getNav(),f.parent.registerChildNav(f)):f._app&&f._app.registerRootNav(f),n&&(n._setContent(f),n._setContentRef(a));var d=s.getBoolean(\"keyboardResizes\",!1);return p&&d&&(p.willHide.takeUntil(f._onDestroy).subscribe(function(){f._plt.timeout(function(){return f.setTabbarHidden(!1)},50)}),p.willShow.takeUntil(f._onDestroy).subscribe(function(){return f.setTabbarHidden(!0)})),f}return c(e,t),e.prototype.setTabbarHidden=function(t){this.setElementClass(\"tabbar-hidden\",t),this.resize()},e.prototype.ngOnDestroy=function(){this._onDestroy.next(),this.parent?this.parent.unregisterChildNav(this):this._app.unregisterRootNav(this)},e.prototype.ngAfterViewInit=function(){var t=this;this._setConfig(\"tabsPlacement\",\"bottom\"),this._setConfig(\"tabsLayout\",\"icon-top\"),this._setConfig(\"tabsHighlight\",this.tabsHighlight),this.tabsHighlight&&this._plt.resize.takeUntil(this._onDestroy).subscribe(function(){return t._highlight.select(t.getSelected())}),this.initTabs()},e.prototype.initTabs=function(){var t=this,e=Object(a.f)(this.selectedIndex)?0:parseInt(this.selectedIndex,10),n=this._linker.getSegmentByNavIdOrName(this.id,this.name);n&&(e=this._getSelectedTabIndex(n.secondaryId,e));var i=this._tabs.find(function(t,n){return n===e&&t.enabled&&t.show});i||(i=this._tabs.find(function(t){return t.enabled&&t.show}));var r=Promise.resolve();return i&&(i._segment=n,r=this.select(i)),r.then(function(){t._tabs.forEach(function(t){t.updateHref(t.root,t.rootParams)})})},e.prototype._setConfig=function(t,e){var n=this[t];Object(a.f)(n)&&(n=this._config.get(t,e)),this.setElementAttribute(t,n)},e.prototype.add=function(t){return this._tabs.push(t),this.id+\"-\"+ ++this._ids},e.prototype.select=function(t,e,n){var i=this;void 0===e&&(e={}),void 0===n&&(n=!1);var r=\"number\"==typeof t?this.getByIndex(t):t;if(Object(a.f)(r))return Promise.resolve();var o=this.getSelected();if(r===o&&o.getActive())return this._updateCurrentTab(r,n);if(r.root){var s;o&&(s=o.getActive())&&s._willLeave(!1);var u=r.getActive();return u&&u._willEnter(),e.animate=!1,r.load(e).then(function(){i._tabSwitchEnd(r,u,s),!1!==e.updateUrl&&i._linker.navChange(l.c),i._fireChangeEvent(r)})}return this._fireChangeEvent(r),Promise.resolve()},e.prototype._fireChangeEvent=function(t){t.ionSelect.emit(t),this.ionChange.emit(t)},e.prototype._tabSwitchEnd=function(t,e,n){for(var i,r=this._tabs,o=0;o<r.length;o++)(i=r[o]).setSelected(i===t);this.tabsHighlight&&this._highlight.select(t),e&&(e._didEnter(),this._app.viewDidEnter.emit(e)),n&&(n&&n._didLeave(),this._app.viewDidLeave.emit(n)),this._selectHistory[this._selectHistory.length-1]!==t.id&&this._selectHistory.push(t.id)},e.prototype.previousTab=function(t){var e=this;void 0===t&&(t=!0);for(var n=this._selectHistory.length-2;n>=0;n--){var i=this._tabs.find(function(t){return t.id===e._selectHistory[n]});if(i&&i.enabled&&i.show)return t&&this._selectHistory.splice(n+1),i}return null},e.prototype.getByIndex=function(t){return this._tabs[t]},e.prototype.getSelected=function(){for(var t=this._tabs,e=0;e<t.length;e++)if(t[e].isSelected)return t[e];return null},e.prototype.getActiveChildNavs=function(){var t=this.getSelected();return t?[t]:[]},e.prototype.getAllChildNavs=function(){return this._tabs},e.prototype.getIndex=function(t){return this._tabs.indexOf(t)},e.prototype.length=function(){return this._tabs.length},e.prototype._updateCurrentTab=function(t,e){var n=t.getActive();if(n){if(e&&t._segment){var i=t.getViewById(t._segment.name);return i?t.popTo(i,{animate:!1,updateUrl:!1}):0===t._views.length&&t._segment.defaultHistory&&t._segment.defaultHistory.length?this._linker.initViews(t._segment).then(function(e){return t.setPages(e,{animate:!1,updateUrl:!1})}).then(function(){t._segment=null}):t.setRoot(t._segment.name,t._segment.data,{animate:!1,updateUrl:!1}).then(function(){t._segment=null})}return n._cmp&&n._cmp.instance.ionSelected?(n._cmp.instance.ionSelected(),Promise.resolve()):t.length()>1?t.popToRoot():Object(l.j)(this._linker,t.root).then(function(e){if(e.component!==n.component)return t.setRoot(t.root)}).catch(function(){})}},e.prototype.setTabbarPosition=function(t,e){if(this._top!==t||this._bottom!==e){var n=this._tabbar.nativeElement;n.style.top=t>-1?t+\"px\":\"\",n.style.bottom=e>-1?e+\"px\":\"\",n.classList.add(\"show-tabbar\"),this._top=t,this._bottom=e}},e.prototype.resize=function(){var t=this.getSelected();t&&t.resize()},e.prototype.initPane=function(){return this._elementRef.nativeElement.hasAttribute(\"main\")},e.prototype.paneChanged=function(t){t&&this.resize()},e.prototype.goToRoot=function(t){if(this._tabs.length)return this.select(this._tabs[0],t)},e.prototype.getType=function(){return\"tabs\"},e.prototype.getSecondaryIdentifier=function(){var t=this.getActiveChildNavs();return t&&t.length?this._linker._getTabSelector(t[0]):\"\"},e.prototype._getSelectedTabIndex=function(t,e){void 0===t&&(t=\"\"),void 0===e&&(e=0);var n=t.match(/tab-(\\d+)/);if(n)return parseInt(n[1],10);var i=this._tabs.find(function(e){return Object(a.l)(e.tabUrlPath)&&e.tabUrlPath===t||Object(a.l)(e.tabTitle)&&Object(u.c)(e.tabTitle)===t});return Object(a.l)(i)?i.index:e},e}(s.a),h=-1},function(t,e,n){\"use strict\";n.d(e,\"d\",function(){return i}),n.d(e,\"h\",function(){return r}),n.d(e,\"e\",function(){return o}),n.d(e,\"a\",function(){return s}),n.d(e,\"b\",function(){return a}),n.d(e,\"c\",function(){return l}),n.d(e,\"f\",function(){return u}),n.d(e,\"g\",function(){return c});var i=37,r=38,o=39,s=40,a=13,l=27,u=32,c=9},function(t,e,n){\"use strict\";n.d(e,\"a\",function(){return r});var i=n(130),r=(n(1),function(){function t(t,e){this._app=t,this.config=e}return t.prototype.create=function(t){return void 0===t&&(t={}),new i.a(this._app,t,this.config)},t}())},function(t,e,n){\"use strict\";n.d(e,\"a\",function(){return o});n(1);var i=n(29),r=(n(10),n(11),this&&this.__extends||function(){var t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n])};return function(e,n){function i(){this.constructor=e}t(e,n),e.prototype=null===n?Object.create(n):(i.prototype=n.prototype,new i)}}()),o=function(t){function e(e,n,i,r,o){var s=t.call(this,e,n,i,\"bar-buttons\")||this;return s.inToolbar=!(!r&&!o),s}return r(e,t),Object.defineProperty(e.prototype,\"_buttons\",{set:function(t){this.inToolbar&&t.forEach(function(t){t.setRole(\"bar-button\")})},enumerable:!0,configurable:!0}),e}(i.a)},function(t,e,n){\"use strict\";function i(t,e,n){return\"function\"==typeof e?Promise.resolve(new s.a(e,n)):\"string\"==typeof e?t.getComponentFromName(e).then(function(t){var i=new s.a(t,n);return i.id=e,i}):Promise.resolve(null)}function r(t,e,n){return e?Object(s.b)(e)?Promise.resolve(e):i(t,e,n):Promise.resolve(null)}e.j=i,e.i=function(t,e){var n=[];if(Object(o.e)(e))for(var i=0;i<e.length;i++){var a=e[i];a&&n.push(Object(s.b)(a)?a:a.page?r(t,a.page,a.params):r(t,a,null))}return Promise.all(n)},e.n=function(t,e,n,i,r){if(e){if(t._isPortal)return i===d&&e._setZIndex(t._zIndexOffset+a,r),void a++;(n=n||t.getPrevious(e))&&Object(o.l)(n._zIndex)?i===f?e._setZIndex(n._zIndex-1,r):e._setZIndex(n._zIndex+1,r):e._setZIndex(h+t._zIndexOffset,r)}},e.m=function(t){return!!t&&!!t.getSelected},e.l=function(t){return!!t&&Object(o.l)(t._tabId)},e.k=function(t){return!!t&&!!t.push&&\"nav\"===t.getType()},n.d(e,\"h\",function(){return l}),n.d(e,\"g\",function(){return u}),n.d(e,\"e\",function(){return c}),n.d(e,\"f\",function(){return p}),n.d(e,\"d\",function(){return h}),n.d(e,\"a\",function(){return f}),n.d(e,\"b\",function(){return d}),n.d(e,\"c\",function(){return _});var o=n(18),s=n(4),a=9999,l=1,u=2,c=3,p=4,h=100,f=\"back\",d=\"forward\",_=\"switch\"},function(t,e,n){\"use strict\";n.d(e,\"a\",function(){return r});var i=n(167),r=function(){function t(t){this.plt=t,this.evts=[]}return t.prototype.pointerEvents=function(t){if(t.element&&t.pointerDown){var e=new i.b(this.plt,t.element,t.pointerDown,t.pointerMove,t.pointerUp,{capture:t.capture,passive:t.passive,zone:t.zone});return this.evts.push(function(){return e.destroy()}),e}console.error(\"PointerEvents config is invalid\")},t.prototype.listen=function(t,e,n,i){if(t){var r=this.plt.registerListener(t,e,n,i);return this.evts.push(r),r}},t.prototype.unlistenAll=function(){this.evts.forEach(function(t){t()}),this.evts.length=0},t.prototype.destroy=function(){this.unlistenAll(),this.evts=null},t}()},function(t,e,n){\"use strict\";n.d(e,\"a\",function(){return o});n(1);var i=n(29),r=this&&this.__extends||function(){var t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n])};return function(e,n){function i(){this.constructor=e}t(e,n),e.prototype=null===n?Object.create(n):(i.prototype=n.prototype,new i)}}(),o=function(t){function e(e,n,i){return t.call(this,e,n,i,\"card-content\")||this}return r(e,t),e}(i.a)},function(t,e,n){\"use strict\";n.d(e,\"a\",function(){return l});var i=n(0),r=n(18),o=n(29),s=n(168),a=this&&this.__extends||function(){var t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n])};return function(e,n){function i(){this.constructor=e}t(e,n),e.prototype=null===n?Object.create(n):(i.prototype=n.prototype,new i)}}(),l=function(t){function e(e,n,o,a,l,u,c,p){var h=t.call(this,e,n,o,a)||this;return h._defaultValue=l,h._form=u,h._item=c,h._ngControl=p,h._isFocus=!1,h._disabled=!1,h._debouncer=new s.a(0),h._init=!1,h._initModel=!1,h.ionFocus=new i.l,h.ionChange=new i.l,h.ionBlur=new i.l,u&&u.register(h),h._value=Object(r.b)(h._defaultValue),c&&(h.id=a+\"-\"+c.registerInput(a),h._labelId=c.labelId,h._item.setElementClass(\"item-\"+a,!0)),p&&(p.valueAccessor=h),h}return a(e,t),Object.defineProperty(e.prototype,\"disabled\",{get:function(){return this._disabled},set:function(t){this.setDisabledState(t)},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,\"value\",{get:function(){return this._value},set:function(t){this._writeValue(t)&&(this.onChange(),this._fireIonChange())},enumerable:!0,configurable:!0}),e.prototype.setValue=function(t){this.value=t},e.prototype.setDisabledState=function(t){this._disabled=t=Object(r.o)(t),this._item&&this._item.setElementClass(\"item-\"+this._componentName+\"-disabled\",t)},e.prototype.writeValue=function(t){this._writeValue(t)&&(this._initModel?this._fireIonChange():this._init&&(this._initModel=!0))},e.prototype._writeValue=function(t){if(Object(r.p)(t))return!1;var e=null===t?Object(r.b)(this._defaultValue):this._inputNormalize(t);return!(Object(r.p)(e)||!this._inputShouldChange(e))&&(this._value=e,this._init&&this._inputUpdated(),!0)},e.prototype._fireIonChange=function(){var t=this;this._init&&this._debouncer.debounce(function(){t.ionChange.emit(t._inputChangeEvent()),t._initModel=!0})},e.prototype.registerOnChange=function(t){this._onChanged=t},e.prototype.registerOnTouched=function(t){this._onTouched=t},e.prototype._initialize=function(){this._init||(this._init=!0,Object(r.l)(this._value)&&this._inputUpdated())},e.prototype._fireFocus=function(){this._isFocus||(this._form&&this._form.setAsFocused(this),this._setFocus(!0),this.ionFocus.emit(this))},e.prototype._fireBlur=function(){this._isFocus&&(this._form&&this._form.unsetAsFocused(this),this._setFocus(!1),this._fireTouched(),this.ionBlur.emit(this))},e.prototype._fireTouched=function(){this._onTouched&&this._onTouched()},e.prototype._setFocus=function(t){this._isFocus=t;var e=this._item;e&&(e.setElementClass(\"input-has-focus\",t),e.setElementClass(\"item-input-has-focus\",t)),this._inputUpdated()},e.prototype.onChange=function(){this._onChanged&&this._onChanged(this._inputNgModelEvent())},e.prototype.isFocus=function(){return this._isFocus},e.prototype.hasValue=function(){var t=this._value;return!!Object(r.l)(t)&&(!Object(r.e)(t)&&!Object(r.n)(t)||t.length>0)},e.prototype.focusNext=function(){this._form&&this._form.tabFocus(this)},e.prototype.ngOnDestroy=function(){var t=this._form;t&&t.deregister(this),this._init=!1},e.prototype.ngAfterContentInit=function(){this._initialize()},e.prototype.initFocus=function(){var t=this._elementRef.nativeElement.querySelector(\"button\");t&&t.focus()},e.prototype._inputNormalize=function(t){return t},e.prototype._inputShouldChange=function(t){return this._value!==t},e.prototype._inputChangeEvent=function(){return this},e.prototype._inputNgModelEvent=function(){return this._value},e.prototype._inputUpdated=function(){var t=this._item;if(t){!function(t,e){e&&(t.setElementClass(\"ng-untouched\",e.untouched),t.setElementClass(\"ng-touched\",e.touched),t.setElementClass(\"ng-pristine\",e.pristine),t.setElementClass(\"ng-dirty\",e.dirty),t.setElementClass(\"ng-valid\",e.valid),t.setElementClass(\"ng-invalid\",!e.valid))}(t,this._ngControl);var e=this.hasValue();t.setElementClass(\"input-has-value\",e),t.setElementClass(\"item-input-has-value\",e)}},e}(o.a)},function(t,e,n){\"use strict\";n.d(e,\"a\",function(){return o});n(1);var i=n(29),r=this&&this.__extends||function(){var t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n])};return function(e,n){function i(){this.constructor=e}t(e,n),e.prototype=null===n?Object.create(n):(i.prototype=n.prototype,new i)}}(),o=function(t){function e(e,n,i){return t.call(this,e,n,i,\"fab\")||this}return r(e,t),e.prototype.setActiveClose=function(t){this.setElementClass(\"fab-close-active\",t)},e}(i.a)},function(t,e,n){\"use strict\";n.d(e,\"a\",function(){return a});var i=n(0),r=(n(1),n(31),n(6),n(15),n(18)),o=n(87),s=(n(2),n(46),n(37),this&&this.__extends||function(){var t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n])};return function(e,n){function i(){this.constructor=e}t(e,n),e.prototype=null===n?Object.create(n):(i.prototype=n.prototype,new i)}}()),a=function(t){function e(e,n,r,o,s,a,l,u,c,p,h,f,d,_){var v=t.call(this,e,n,r,o,s,a,l,u,p,h,f,d,_)||this;return v._cd=c,v.linker=f,v._dom=d,v._isEnabled=!0,v._isShown=!0,v.ionSelect=new i.l,v.id=e.add(v),v._tabsHideOnSubPages=r.getBoolean(\"tabsHideOnSubPages\"),v._tabId=\"tabpanel-\"+v.id,v._btnId=\"tab-\"+v.id,v}return s(e,t),Object.defineProperty(e.prototype,\"enabled\",{get:function(){return this._isEnabled},set:function(t){this._isEnabled=Object(r.o)(t)},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,\"show\",{get:function(){return this._isShown},set:function(t){this._isShown=Object(r.o)(t)},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,\"tabsHideOnSubPages\",{get:function(){return this._tabsHideOnSubPages},set:function(t){this._tabsHideOnSubPages=Object(r.o)(t)},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,\"_vp\",{set:function(t){this.setViewport(t)},enumerable:!0,configurable:!0}),e.prototype.ngOnInit=function(){this.tabBadgeStyle=this.tabBadgeStyle?this.tabBadgeStyle:\"default\"},e.prototype.load=function(t){var e=this,n=this._segment;if(n||!this._loaded&&this.root){this.setElementClass(\"show-tab\",!0);for(var i=n&&n.name?n.name:this.root,r=n?n.data:this.rootParams,o=this.length()-1,s=o;s>=0;s--){var a=this.getByIndex(s);if(a&&(a.id===i||a.component===i))return s===o?Promise.resolve():this.popTo(a,{animate:!1,updateUrl:!1})}return(n&&n.defaultHistory&&n.defaultHistory.length&&0===this._views.length?this.linker.initViews(n).then(function(n){return e.setPages(n,t)}):this.push(i,r,t)).then(function(){e._segment=null,e._loaded=!0})}return this._dom.read(function(){e.resize()}),Promise.resolve()},e.prototype.resize=function(){var t=this.getActive();if(t){var e=t.getIONContent();e&&e.resize()}},e.prototype._viewAttachToDOM=function(e,n,i){var r=this._tabsHideOnSubPages&&e.index>0;if(r&&(i=this.parent.portal),t.prototype._viewAttachToDOM.call(this,e,n,i),r){var o=e.pageRef();o&&this._renderer.setElementClass(o.nativeElement,\"tab-subpage\",!0)}},e.prototype.setSelected=function(t){this.isSelected=t,this.setElementClass(\"show-tab\",t),this.setElementAttribute(\"aria-hidden\",(!t).toString()),t?this._cd.reattach():this._cd.detach()},Object.defineProperty(e.prototype,\"index\",{get:function(){return this.parent.getIndex(this)},enumerable:!0,configurable:!0}),e.prototype.updateHref=function(t,e){if(this.btn&&this.linker){var n=this.linker.createUrl(this.parent,t,e)||\"#\";this.btn.updateHref(n)}},e.prototype.ngOnDestroy=function(){this.destroy()},e.prototype.getType=function(){return\"tab\"},e.prototype.goToRoot=function(t){return this.setRoot(this.root,this.rootParams,t,null)},e}(o.a)},function(t,e,n){\"use strict\";function i(t){return r._22(2,[r._18(671088640,1,{_native:0}),(t()(),r.U(16777216,null,null,1,null,function(t){return r._22(0,[(t()(),r.Z(0,0,[[1,0],[\"textInput\",1]],null,1,\"input\",[[\"class\",\"text-input\"],[\"dir\",\"auto\"]],[[8,\"type\",0],[1,\"aria-labelledby\",0],[1,\"min\",0],[1,\"max\",0],[1,\"step\",0],[1,\"autocomplete\",0],[1,\"autocorrect\",0],[8,\"placeholder\",0],[8,\"disabled\",0],[8,\"readOnly\",0]],[[null,\"input\"],[null,\"blur\"],[null,\"focus\"],[null,\"keydown\"]],function(t,e,n){var i=!0,r=t.component;return\"input\"===e&&(i=!1!==r.onInput(n)&&i),\"blur\"===e&&(i=!1!==r.onBlur(n)&&i),\"focus\"===e&&(i=!1!==r.onFocus(n)&&i),\"keydown\"===e&&(i=!1!==r.onKeydown(n)&&i),i},null,null)),r.Y(1,278528,null,0,o.g,[r.p,r.q,r.j,r.A],{klass:[0,\"klass\"],ngClass:[1,\"ngClass\"]},null)],function(t,e){t(e,1,0,\"text-input\",\"text-input-\"+e.component._mode)},function(t,e){var n=e.component;t(e,0,0,n._type,n._labelId,n.min,n.max,n.step,n.autocomplete,n.autocorrect,n.placeholder,n._disabled,n._readonly)})})),r.Y(2,16384,null,0,o.i,[r.I,r.F],{ngIf:[0,\"ngIf\"]},null),(t()(),r.U(16777216,null,null,1,null,function(t){return r._22(0,[(t()(),r.Z(0,0,[[1,0],[\"textInput\",1]],null,1,\"textarea\",[[\"class\",\"text-input\"]],[[1,\"aria-labelledby\",0],[1,\"autocomplete\",0],[1,\"autocorrect\",0],[8,\"placeholder\",0],[8,\"disabled\",0],[8,\"readOnly\",0]],[[null,\"input\"],[null,\"blur\"],[null,\"focus\"],[null,\"keydown\"]],function(t,e,n){var i=!0,r=t.component;return\"input\"===e&&(i=!1!==r.onInput(n)&&i),\"blur\"===e&&(i=!1!==r.onBlur(n)&&i),\"focus\"===e&&(i=!1!==r.onFocus(n)&&i),\"keydown\"===e&&(i=!1!==r.onKeydown(n)&&i),i},null,null)),r.Y(1,278528,null,0,o.g,[r.p,r.q,r.j,r.A],{klass:[0,\"klass\"],ngClass:[1,\"ngClass\"]},null)],function(t,e){t(e,1,0,\"text-input\",\"text-input-\"+e.component._mode)},function(t,e){var n=e.component;t(e,0,0,n._labelId,n.autocomplete,n.autocorrect,n.placeholder,n._disabled,n._readonly)})})),r.Y(4,16384,null,0,o.i,[r.I,r.F],{ngIf:[0,\"ngIf\"]},null),(t()(),r.U(16777216,null,null,1,null,function(t){return r._22(0,[(t()(),r.Z(0,0,null,null,1,\"button\",[[\"class\",\"text-input-clear-icon\"],[\"clear\",\"\"],[\"ion-button\",\"\"],[\"tabindex\",\"-1\"],[\"type\",\"button\"]],null,[[null,\"click\"],[null,\"mousedown\"]],function(t,e,n){var i=!0,r=t.component;return\"click\"===e&&(i=!1!==r.clearTextInput(n)&&i),\"mousedown\"===e&&(i=!1!==r.clearTextInput(n)&&i),i},s.b,s.a)),r.Y(1,1097728,null,0,a.a,[[8,\"\"],l.a,r.j,r.z],{clear:[0,\"clear\"]},null)],function(t,e){t(e,1,0,\"\")},null)})),r.Y(6,16384,null,0,o.i,[r.I,r.F],{ngIf:[0,\"ngIf\"]},null),(t()(),r.U(16777216,null,null,1,null,function(t){return r._22(0,[(t()(),r.Z(0,0,null,null,0,\"div\",[[\"class\",\"input-cover\"]],null,[[null,\"touchstart\"],[null,\"touchend\"],[null,\"mousedown\"],[null,\"mouseup\"]],function(t,e,n){var i=!0,r=t.component;return\"touchstart\"===e&&(i=!1!==r._pointerStart(n)&&i),\"touchend\"===e&&(i=!1!==r._pointerEnd(n)&&i),\"mousedown\"===e&&(i=!1!==r._pointerStart(n)&&i),\"mouseup\"===e&&(i=!1!==r._pointerEnd(n)&&i),i},null,null))],null,null)})),r.Y(8,16384,null,0,o.i,[r.I,r.F],{ngIf:[0,\"ngIf\"]},null)],function(t,e){var n=e.component;t(e,2,0,!n._isTextarea);t(e,4,0,n._isTextarea);t(e,6,0,n._clearInput);t(e,8,0,n._useAssist)},null)}n.d(e,\"a\",function(){return u}),e.b=i;var r=n(0),o=n(28),s=n(22),a=n(21),l=n(1),u=(n(44),n(2),n(19),n(20),n(6),r.X({encapsulation:2,styles:[],data:{}}))},function(t,e,n){\"use strict\";function i(){return w}function r(){return!!window.history.pushState}function o(t,e){if(\"undefined\"==typeof COMPILED||!COMPILED){(g._1.ng=g._1.ng||{})[t]=e}}function s(t){return Object(g.O)(t)}function a(t){return o(V,s),o(L,Object(b.__assign)({},N,function(t){return t.reduce(function(t,e){return t[e.name]=e.token,t},{})}(t||[]))),function(){return s}}function l(t,e,n){for(var i=0;i<e.length;i++){var r=e[i];Array.isArray(r)?l(t,r,n):(r=r.replace(q,t),n.push(r))}return n}function u(t){return function(e){!1===t(e)&&(e.preventDefault(),e.returnValue=!1)}}function c(t,e){if(t.charCodeAt(0)===$)throw new Error(\"Found the synthetic \"+e+\" \"+t+'. Please include either \"BrowserAnimationsModule\" or \"NoopAnimationsModule\" in your application.')}function p(t){return(t=String(t)).match(dt)||t.match(_t)?t:(Object(g.P)()&&i().log(\"WARNING: sanitizing unsafe URL value \"+t+\" (see http://g.co/ng/security#xss)\"),\"unsafe:\"+t)}function h(t){for(var e={},n=0,i=t.split(\",\");n<i.length;n++){e[i[n]]=!0}return e}function f(){for(var t=[],e=0;e<arguments.length;e++)t[e]=arguments[e];for(var n={},i=0,r=t;i<r.length;i++){var o=r[i];for(var s in o)o.hasOwnProperty(s)&&(n[s]=!0)}return n}function d(t,e){if(e&&yt.contains(t,e))throw new Error(\"Failed to sanitize html because the element is clobbered: \"+yt.getOuterHTML(t));return e}function _(t){return t.replace(/&/g,\"&amp;\").replace(Tt,function(t){return\"&#\"+(1024*(t.charCodeAt(0)-55296)+(t.charCodeAt(1)-56320)+65536)+\";\"}).replace(kt,function(t){return\"&#\"+t.charCodeAt(0)+\";\"}).replace(/</g,\"&lt;\").replace(/>/g,\"&gt;\")}function v(t){yt.attributeMap(t).forEach(function(e,n){\"xmlns:ns1\"!==n&&0!==n.indexOf(\"ns1:\")||yt.removeAttribute(t,n)});for(var e=0,n=yt.childNodesAsList(t);e<n.length;e++){var i=n[e];yt.isElementNode(i)&&v(i)}}n.d(e,\"a\",function(){return zt}),n.d(e,\"j\",function(){return Bt}),n.d(e,\"h\",function(){return I}),n.d(e,\"i\",function(){return R}),n.d(e,\"b\",function(){return P}),n.d(e,\"d\",function(){return F}),n.d(e,\"e\",function(){return B}),n.d(e,\"f\",function(){return lt}),n.d(e,\"g\",function(){return ut}),n.d(e,\"c\",function(){return It}),n.d(e,\"s\",function(){return i}),n.d(e,\"l\",function(){return W}),n.d(e,\"k\",function(){return st}),n.d(e,\"n\",function(){return ct}),n.d(e,\"o\",function(){return ft}),n.d(e,\"m\",function(){return Y}),n.d(e,\"p\",function(){return H}),n.d(e,\"q\",function(){return function(){return new g.k}}),n.d(e,\"t\",function(){return a}),n.d(e,\"r\",function(){return jt});var y,m=n(28),g=n(0),b=n(3),w=null,C={class:\"className\",innerHtml:\"innerHTML\",readonly:\"readOnly\",tabindex:\"tabIndex\"},O={\"\\b\":\"Backspace\",\"\\t\":\"Tab\",\"\":\"Delete\",\"\u001b\":\"Escape\",Del:\"Delete\",Esc:\"Escape\",Left:\"ArrowLeft\",Right:\"ArrowRight\",Up:\"ArrowUp\",Down:\"ArrowDown\",Menu:\"ContextMenu\",Scroll:\"ScrollLock\",Win:\"OS\"},S={A:\"1\",B:\"2\",C:\"3\",D:\"4\",E:\"5\",F:\"6\",G:\"7\",H:\"8\",I:\"9\",J:\"*\",K:\"+\",M:\"-\",N:\".\",O:\"/\",\"`\":\"0\",\"\":\"NumLock\"};g._1.Node&&(y=g._1.Node.prototype.contains||function(t){return!!(16&this.compareDocumentPosition(t))});var E,x,T=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return Object(b.__extends)(e,t),e.prototype.parse=function(t){throw new Error(\"parse not implemented\")},e.makeCurrent=function(){!function(t){w||(w=t)}(new e)},e.prototype.hasProperty=function(t,e){return e in t},e.prototype.setProperty=function(t,e,n){t[e]=n},e.prototype.getProperty=function(t,e){return t[e]},e.prototype.invoke=function(t,e,n){(i=t)[e].apply(i,n);var i},e.prototype.logError=function(t){window.console&&(console.error?console.error(t):console.log(t))},e.prototype.log=function(t){window.console&&window.console.log&&window.console.log(t)},e.prototype.logGroup=function(t){window.console&&window.console.group&&window.console.group(t)},e.prototype.logGroupEnd=function(){window.console&&window.console.groupEnd&&window.console.groupEnd()},Object.defineProperty(e.prototype,\"attrToPropMap\",{get:function(){return C},enumerable:!0,configurable:!0}),e.prototype.contains=function(t,e){return y.call(t,e)},e.prototype.querySelector=function(t,e){return t.querySelector(e)},e.prototype.querySelectorAll=function(t,e){return t.querySelectorAll(e)},e.prototype.on=function(t,e,n){t.addEventListener(e,n,!1)},e.prototype.onAndCancel=function(t,e,n){return t.addEventListener(e,n,!1),function(){t.removeEventListener(e,n,!1)}},e.prototype.dispatchEvent=function(t,e){t.dispatchEvent(e)},e.prototype.createMouseEvent=function(t){var e=this.getDefaultDocument().createEvent(\"MouseEvent\");return e.initEvent(t,!0,!0),e},e.prototype.createEvent=function(t){var e=this.getDefaultDocument().createEvent(\"Event\");return e.initEvent(t,!0,!0),e},e.prototype.preventDefault=function(t){t.preventDefault(),t.returnValue=!1},e.prototype.isPrevented=function(t){return t.defaultPrevented||null!=t.returnValue&&!t.returnValue},e.prototype.getInnerHTML=function(t){return t.innerHTML},e.prototype.getTemplateContent=function(t){return\"content\"in t&&this.isTemplateElement(t)?t.content:null},e.prototype.getOuterHTML=function(t){return t.outerHTML},e.prototype.nodeName=function(t){return t.nodeName},e.prototype.nodeValue=function(t){return t.nodeValue},e.prototype.type=function(t){return t.type},e.prototype.content=function(t){return this.hasProperty(t,\"content\")?t.content:t},e.prototype.firstChild=function(t){return t.firstChild},e.prototype.nextSibling=function(t){return t.nextSibling},e.prototype.parentElement=function(t){return t.parentNode},e.prototype.childNodes=function(t){return t.childNodes},e.prototype.childNodesAsList=function(t){for(var e=t.childNodes,n=new Array(e.length),i=0;i<e.length;i++)n[i]=e[i];return n},e.prototype.clearNodes=function(t){for(;t.firstChild;)t.removeChild(t.firstChild)},e.prototype.appendChild=function(t,e){t.appendChild(e)},e.prototype.removeChild=function(t,e){t.removeChild(e)},e.prototype.replaceChild=function(t,e,n){t.replaceChild(e,n)},e.prototype.remove=function(t){return t.parentNode&&t.parentNode.removeChild(t),t},e.prototype.insertBefore=function(t,e,n){t.insertBefore(n,e)},e.prototype.insertAllBefore=function(t,e,n){n.forEach(function(n){return t.insertBefore(n,e)})},e.prototype.insertAfter=function(t,e,n){t.insertBefore(n,e.nextSibling)},e.prototype.setInnerHTML=function(t,e){t.innerHTML=e},e.prototype.getText=function(t){return t.textContent},e.prototype.setText=function(t,e){t.textContent=e},e.prototype.getValue=function(t){return t.value},e.prototype.setValue=function(t,e){t.value=e},e.prototype.getChecked=function(t){return t.checked},e.prototype.setChecked=function(t,e){t.checked=e},e.prototype.createComment=function(t){return this.getDefaultDocument().createComment(t)},e.prototype.createTemplate=function(t){var e=this.getDefaultDocument().createElement(\"template\");return e.innerHTML=t,e},e.prototype.createElement=function(t,e){return(e=e||this.getDefaultDocument()).createElement(t)},e.prototype.createElementNS=function(t,e,n){return(n=n||this.getDefaultDocument()).createElementNS(t,e)},e.prototype.createTextNode=function(t,e){return(e=e||this.getDefaultDocument()).createTextNode(t)},e.prototype.createScriptTag=function(t,e,n){var i=(n=n||this.getDefaultDocument()).createElement(\"SCRIPT\");return i.setAttribute(t,e),i},e.prototype.createStyleElement=function(t,e){var n=(e=e||this.getDefaultDocument()).createElement(\"style\");return this.appendChild(n,this.createTextNode(t,e)),n},e.prototype.createShadowRoot=function(t){return t.createShadowRoot()},e.prototype.getShadowRoot=function(t){return t.shadowRoot},e.prototype.getHost=function(t){return t.host},e.prototype.clone=function(t){return t.cloneNode(!0)},e.prototype.getElementsByClassName=function(t,e){return t.getElementsByClassName(e)},e.prototype.getElementsByTagName=function(t,e){return t.getElementsByTagName(e)},e.prototype.classList=function(t){return Array.prototype.slice.call(t.classList,0)},e.prototype.addClass=function(t,e){t.classList.add(e)},e.prototype.removeClass=function(t,e){t.classList.remove(e)},e.prototype.hasClass=function(t,e){return t.classList.contains(e)},e.prototype.setStyle=function(t,e,n){t.style[e]=n},e.prototype.removeStyle=function(t,e){t.style[e]=\"\"},e.prototype.getStyle=function(t,e){return t.style[e]},e.prototype.hasStyle=function(t,e,n){var i=this.getStyle(t,e)||\"\";return n?i==n:i.length>0},e.prototype.tagName=function(t){return t.tagName},e.prototype.attributeMap=function(t){for(var e=new Map,n=t.attributes,i=0;i<n.length;i++){var r=n.item(i);e.set(r.name,r.value)}return e},e.prototype.hasAttribute=function(t,e){return t.hasAttribute(e)},e.prototype.hasAttributeNS=function(t,e,n){return t.hasAttributeNS(e,n)},e.prototype.getAttribute=function(t,e){return t.getAttribute(e)},e.prototype.getAttributeNS=function(t,e,n){return t.getAttributeNS(e,n)},e.prototype.setAttribute=function(t,e,n){t.setAttribute(e,n)},e.prototype.setAttributeNS=function(t,e,n,i){t.setAttributeNS(e,n,i)},e.prototype.removeAttribute=function(t,e){t.removeAttribute(e)},e.prototype.removeAttributeNS=function(t,e,n){t.removeAttributeNS(e,n)},e.prototype.templateAwareRoot=function(t){return this.isTemplateElement(t)?this.content(t):t},e.prototype.createHtmlDocument=function(){return document.implementation.createHTMLDocument(\"fakeTitle\")},e.prototype.getDefaultDocument=function(){return document},e.prototype.getBoundingClientRect=function(t){try{return t.getBoundingClientRect()}catch(t){return{top:0,bottom:0,left:0,right:0,width:0,height:0}}},e.prototype.getTitle=function(t){return t.title},e.prototype.setTitle=function(t,e){t.title=e||\"\"},e.prototype.elementMatches=function(t,e){return!!this.isElementNode(t)&&(t.matches&&t.matches(e)||t.msMatchesSelector&&t.msMatchesSelector(e)||t.webkitMatchesSelector&&t.webkitMatchesSelector(e))},e.prototype.isTemplateElement=function(t){return this.isElementNode(t)&&\"TEMPLATE\"===t.nodeName},e.prototype.isTextNode=function(t){return t.nodeType===Node.TEXT_NODE},e.prototype.isCommentNode=function(t){return t.nodeType===Node.COMMENT_NODE},e.prototype.isElementNode=function(t){return t.nodeType===Node.ELEMENT_NODE},e.prototype.hasShadowRoot=function(t){return null!=t.shadowRoot&&t instanceof HTMLElement},e.prototype.isShadowRoot=function(t){return t instanceof DocumentFragment},e.prototype.importIntoDoc=function(t){return document.importNode(this.templateAwareRoot(t),!0)},e.prototype.adoptNode=function(t){return document.adoptNode(t)},e.prototype.getHref=function(t){return t.getAttribute(\"href\")},e.prototype.getEventKey=function(t){var e=t.key;if(null==e){if(null==(e=t.keyIdentifier))return\"Unidentified\";e.startsWith(\"U+\")&&(e=String.fromCharCode(parseInt(e.substring(2),16)),3===t.location&&S.hasOwnProperty(e)&&(e=S[e]))}return O[e]||e},e.prototype.getGlobalEventTarget=function(t,e){return\"window\"===e?window:\"document\"===e?t:\"body\"===e?t.body:null},e.prototype.getHistory=function(){return window.history},e.prototype.getLocation=function(){return window.location},e.prototype.getBaseHref=function(t){var e=k||(k=document.querySelector(\"base\"))?k.getAttribute(\"href\"):null;return null==e?null:function(t){return E||(E=document.createElement(\"a\")),E.setAttribute(\"href\",t),\"/\"===E.pathname.charAt(0)?E.pathname:\"/\"+E.pathname}(e)},e.prototype.resetBaseElement=function(){k=null},e.prototype.getUserAgent=function(){return window.navigator.userAgent},e.prototype.setData=function(t,e,n){this.setAttribute(t,\"data-\"+e,n)},e.prototype.getData=function(t,e){return this.getAttribute(t,\"data-\"+e)},e.prototype.getComputedStyle=function(t){return getComputedStyle(t)},e.prototype.supportsWebAnimation=function(){return\"function\"==typeof Element.prototype.animate},e.prototype.performanceNow=function(){return window.performance&&window.performance.now?window.performance.now():(new Date).getTime()},e.prototype.supportsCookies=function(){return!0},e.prototype.getCookie=function(t){return Object(m.t)(document.cookie,t)},e.prototype.setCookie=function(t,e){document.cookie=encodeURIComponent(t)+\"=\"+encodeURIComponent(e)},e}(function(t){function e(){var e=t.call(this)||this;e._animationPrefix=null,e._transitionEnd=null;try{var n=e.createElement(\"div\",document);if(null!=e.getStyle(n,\"animationName\"))e._animationPrefix=\"\";else for(var i=[\"Webkit\",\"Moz\",\"O\",\"ms\"],r=0;r<i.length;r++)if(null!=e.getStyle(n,i[r]+\"AnimationName\")){e._animationPrefix=\"-\"+i[r].toLowerCase()+\"-\";break}var o={WebkitTransition:\"webkitTransitionEnd\",MozTransition:\"transitionend\",OTransition:\"oTransitionEnd otransitionend\",transition:\"transitionend\"};Object.keys(o).forEach(function(t){null!=e.getStyle(n,t)&&(e._transitionEnd=o[t])})}catch(t){e._animationPrefix=null,e._transitionEnd=null}return e}return Object(b.__extends)(e,t),e.prototype.getDistributedNodes=function(t){return t.getDistributedNodes()},e.prototype.resolveAndSetHref=function(t,e,n){t.href=null==n?e:e+\"/../\"+n},e.prototype.supportsDOMEvents=function(){return!0},e.prototype.supportsNativeShadowDOM=function(){return\"function\"==typeof document.body.createShadowRoot},e.prototype.getAnimationPrefix=function(){return this._animationPrefix?this._animationPrefix:\"\"},e.prototype.getTransitionEnd=function(){return this._transitionEnd?this._transitionEnd:\"\"},e.prototype.supportsAnimation=function(){return null!=this._animationPrefix&&null!=this._transitionEnd},e}(function(){function t(){this.resourceLoaderType=null}return Object.defineProperty(t.prototype,\"attrToPropMap\",{get:function(){return this._attrToPropMap},set:function(t){this._attrToPropMap=t},enumerable:!0,configurable:!0}),t}())),k=null,P=m.c,A=function(t){function e(e){var n=t.call(this)||this;return n._doc=e,n._init(),n}return Object(b.__extends)(e,t),e.prototype._init=function(){this.location=i().getLocation(),this._history=i().getHistory()},e.prototype.getBaseHrefFromDOM=function(){return i().getBaseHref(this._doc)},e.prototype.onPopState=function(t){i().getGlobalEventTarget(this._doc,\"window\").addEventListener(\"popstate\",t,!1)},e.prototype.onHashChange=function(t){i().getGlobalEventTarget(this._doc,\"window\").addEventListener(\"hashchange\",t,!1)},Object.defineProperty(e.prototype,\"pathname\",{get:function(){return this.location.pathname},set:function(t){this.location.pathname=t},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,\"search\",{get:function(){return this.location.search},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,\"hash\",{get:function(){return this.location.hash},enumerable:!0,configurable:!0}),e.prototype.pushState=function(t,e,n){r()?this._history.pushState(t,e,n):this.location.hash=n},e.prototype.replaceState=function(t,e,n){r()?this._history.replaceState(t,e,n):this.location.hash=n},e.prototype.forward=function(){this._history.forward()},e.prototype.back=function(){this._history.back()},e.ctorParameters=function(){return[{type:void 0,decorators:[{type:g.m,args:[P]}]}]},e}(m.q),I=function(){function t(t){this._doc=t,this._dom=i()}return t.prototype.addTag=function(t,e){return void 0===e&&(e=!1),t?this._getOrCreateElement(t,e):null},t.prototype.addTags=function(t,e){var n=this;return void 0===e&&(e=!1),t?t.reduce(function(t,i){return i&&t.push(n._getOrCreateElement(i,e)),t},[]):[]},t.prototype.getTag=function(t){return t?this._dom.querySelector(this._doc,\"meta[\"+t+\"]\")||null:null},t.prototype.getTags=function(t){if(!t)return[];var e=this._dom.querySelectorAll(this._doc,\"meta[\"+t+\"]\");return e?[].slice.call(e):[]},t.prototype.updateTag=function(t,e){if(!t)return null;e=e||this._parseSelector(t);var n=this.getTag(e);return n?this._setMetaElementAttributes(t,n):this._getOrCreateElement(t,!0)},t.prototype.removeTag=function(t){this.removeTagElement(this.getTag(t))},t.prototype.removeTagElement=function(t){t&&this._dom.remove(t)},t.prototype._getOrCreateElement=function(t,e){if(void 0===e&&(e=!1),!e){var n=this._parseSelector(t),i=this.getTag(n);if(i&&this._containsAttributes(t,i))return i}var r=this._dom.createElement(\"meta\");this._setMetaElementAttributes(t,r);var o=this._dom.getElementsByTagName(this._doc,\"head\")[0];return this._dom.appendChild(o,r),r},t.prototype._setMetaElementAttributes=function(t,e){var n=this;return Object.keys(t).forEach(function(i){return n._dom.setAttribute(e,i,t[i])}),e},t.prototype._parseSelector=function(t){var e=t.name?\"name\":\"property\";return e+'=\"'+t[e]+'\"'},t.prototype._containsAttributes=function(t,e){var n=this;return Object.keys(t).every(function(i){return n._dom.getAttribute(e,i)===t[i]})},t}(),j=new g.n(\"TRANSITION_ID\"),D=[{provide:g.c,useFactory:function(t,e,n){return function(){n.get(g.d).donePromise.then(function(){var n=i();Array.prototype.slice.apply(n.querySelectorAll(e,\"style[ng-transition]\")).filter(function(e){return n.getAttribute(e,\"ng-transition\")===t}).forEach(function(t){return n.remove(t)})})}},deps:[j,P,g.o],multi:!0}],M=function(){function t(){}return t.init=function(){Object(g.R)(new t)},t.prototype.addToWindow=function(t){g._1.getAngularTestability=function(e,n){void 0===n&&(n=!0);var i=t.findTestabilityInTree(e,n);if(null==i)throw new Error(\"Could not find testability for element.\");return i},g._1.getAllAngularTestabilities=function(){return t.getAllTestabilities()},g._1.getAllAngularRootElements=function(){return t.getAllRootElements()};g._1.frameworkStabilizers||(g._1.frameworkStabilizers=[]),g._1.frameworkStabilizers.push(function(t){var e=g._1.getAllAngularTestabilities(),n=e.length,i=!1;e.forEach(function(e){e.whenStable(function(e){i=i||e,0==--n&&t(i)})})})},t.prototype.findTestabilityInTree=function(t,e,n){if(null==e)return null;var r=t.getTestability(e);return null!=r?r:n?i().isShadowRoot(e)?this.findTestabilityInTree(t,i().getHost(e),!0):this.findTestabilityInTree(t,i().parentElement(e),!0):null},t}(),R=function(){function t(t){this._doc=t}return t.prototype.getTitle=function(){return i().getTitle(this._doc)},t.prototype.setTitle=function(t){i().setTitle(this._doc,t)},t}(),N={ApplicationRef:g.f,NgZone:g.u},V=\"probe\",L=\"coreTokens\",F=new g.n(\"EventManagerPlugins\"),B=function(){function t(t,e){var n=this;this._zone=e,this._eventNameToPlugin=new Map,t.forEach(function(t){return t.manager=n}),this._plugins=t.slice().reverse()}return t.prototype.addEventListener=function(t,e,n){return this._findPluginFor(e).addEventListener(t,e,n)},t.prototype.addGlobalEventListener=function(t,e,n){return this._findPluginFor(e).addGlobalEventListener(t,e,n)},t.prototype.getZone=function(){return this._zone},t.prototype._findPluginFor=function(t){var e=this._eventNameToPlugin.get(t);if(e)return e;for(var n=this._plugins,i=0;i<n.length;i++){var r=n[i];if(r.supports(t))return this._eventNameToPlugin.set(t,r),r}throw new Error(\"No event manager plugin found for event \"+t)},t}(),z=function(){function t(t){this._doc=t}return t.prototype.addGlobalEventListener=function(t,e,n){var r=i().getGlobalEventTarget(this._doc,t);if(!r)throw new Error(\"Unsupported event target \"+r+\" for event \"+e);return this.addEventListener(r,e,n)},t}(),H=function(){function t(){this._stylesSet=new Set}return t.prototype.addStyles=function(t){var e=this,n=new Set;t.forEach(function(t){e._stylesSet.has(t)||(e._stylesSet.add(t),n.add(t))}),this.onStylesAdded(n)},t.prototype.onStylesAdded=function(t){},t.prototype.getAllStyles=function(){return Array.from(this._stylesSet)},t}(),Y=function(t){function e(e){var n=t.call(this)||this;return n._doc=e,n._hostNodes=new Set,n._styleNodes=new Set,n._hostNodes.add(e.head),n}return Object(b.__extends)(e,t),e.prototype._addStylesToHost=function(t,e){var n=this;t.forEach(function(t){var i=n._doc.createElement(\"style\");i.textContent=t,n._styleNodes.add(e.appendChild(i))})},e.prototype.addHost=function(t){this._addStylesToHost(this._stylesSet,t),this._hostNodes.add(t)},e.prototype.removeHost=function(t){this._hostNodes.delete(t)},e.prototype.onStylesAdded=function(t){var e=this;this._hostNodes.forEach(function(n){return e._addStylesToHost(t,n)})},e.prototype.ngOnDestroy=function(){this._styleNodes.forEach(function(t){return i().remove(t)})},e}(H),U={svg:\"http://www.w3.org/2000/svg\",xhtml:\"http://www.w3.org/1999/xhtml\",xlink:\"http://www.w3.org/1999/xlink\",xml:\"http://www.w3.org/XML/1998/namespace\",xmlns:\"http://www.w3.org/2000/xmlns/\"},q=/%COMP%/g,Z=\"_nghost-%COMP%\",G=\"_ngcontent-%COMP%\",W=function(){function t(t,e){this.eventManager=t,this.sharedStylesHost=e,this.rendererByCompId=new Map,this.defaultRenderer=new X(t)}return t.prototype.createRenderer=function(t,e){if(!t||!e)return this.defaultRenderer;switch(e.encapsulation){case g.J.Emulated:var n=this.rendererByCompId.get(e.id);return n||(n=new K(this.eventManager,this.sharedStylesHost,e),this.rendererByCompId.set(e.id,n)),n.applyToHost(t),n;case g.J.Native:return new Q(this.eventManager,this.sharedStylesHost,t,e);default:if(!this.rendererByCompId.has(e.id)){var i=l(e.id,e.styles,[]);this.sharedStylesHost.addStyles(i),this.rendererByCompId.set(e.id,this.defaultRenderer)}return this.defaultRenderer}},t.prototype.begin=function(){},t.prototype.end=function(){},t}(),X=function(){function t(t){this.eventManager=t,this.data=Object.create(null)}return t.prototype.destroy=function(){},t.prototype.createElement=function(t,e){return e?document.createElementNS(U[e],t):document.createElement(t)},t.prototype.createComment=function(t){return document.createComment(t)},t.prototype.createText=function(t){return document.createTextNode(t)},t.prototype.appendChild=function(t,e){t.appendChild(e)},t.prototype.insertBefore=function(t,e,n){t&&t.insertBefore(e,n)},t.prototype.removeChild=function(t,e){t&&t.removeChild(e)},t.prototype.selectRootElement=function(t){var e=\"string\"==typeof t?document.querySelector(t):t;if(!e)throw new Error('The selector \"'+t+'\" did not match any elements');return e.textContent=\"\",e},t.prototype.parentNode=function(t){return t.parentNode},t.prototype.nextSibling=function(t){return t.nextSibling},t.prototype.setAttribute=function(t,e,n,i){if(i){e=i+\":\"+e;var r=U[i];r?t.setAttributeNS(r,e,n):t.setAttribute(e,n)}else t.setAttribute(e,n)},t.prototype.removeAttribute=function(t,e,n){if(n){var i=U[n];i?t.removeAttributeNS(i,e):t.removeAttribute(n+\":\"+e)}else t.removeAttribute(e)},t.prototype.addClass=function(t,e){t.classList.add(e)},t.prototype.removeClass=function(t,e){t.classList.remove(e)},t.prototype.setStyle=function(t,e,n,i){i&g.C.DashCase?t.style.setProperty(e,n,i&g.C.Important?\"important\":\"\"):t.style[e]=n},t.prototype.removeStyle=function(t,e,n){n&g.C.DashCase?t.style.removeProperty(e):t.style[e]=\"\"},t.prototype.setProperty=function(t,e,n){c(e,\"property\"),t[e]=n},t.prototype.setValue=function(t,e){t.nodeValue=e},t.prototype.listen=function(t,e,n){return c(e,\"listener\"),\"string\"==typeof t?this.eventManager.addGlobalEventListener(t,e,u(n)):this.eventManager.addEventListener(t,e,u(n))},t}(),$=\"@\".charCodeAt(0),K=function(t){function e(e,n,i){var r=t.call(this,e)||this;r.component=i;var o=l(i.id,i.styles,[]);return n.addStyles(o),r.contentAttr=function(t){return G.replace(q,t)}(i.id),r.hostAttr=function(t){return Z.replace(q,t)}(i.id),r}return Object(b.__extends)(e,t),e.prototype.applyToHost=function(e){t.prototype.setAttribute.call(this,e,this.hostAttr,\"\")},e.prototype.createElement=function(e,n){var i=t.prototype.createElement.call(this,e,n);return t.prototype.setAttribute.call(this,i,this.contentAttr,\"\"),i},e}(X),Q=function(t){function e(e,n,i,r){var o=t.call(this,e)||this;o.sharedStylesHost=n,o.hostEl=i,o.component=r,o.shadowRoot=i.createShadowRoot(),o.sharedStylesHost.addHost(o.shadowRoot);for(var s=l(r.id,r.styles,[]),a=0;a<s.length;a++){var u=document.createElement(\"style\");u.textContent=s[a],o.shadowRoot.appendChild(u)}return o}return Object(b.__extends)(e,t),e.prototype.nodeOrShadowRoot=function(t){return t===this.hostEl?this.shadowRoot:t},e.prototype.destroy=function(){this.sharedStylesHost.removeHost(this.shadowRoot)},e.prototype.appendChild=function(e,n){return t.prototype.appendChild.call(this,this.nodeOrShadowRoot(e),n)},e.prototype.insertBefore=function(e,n,i){return t.prototype.insertBefore.call(this,this.nodeOrShadowRoot(e),n,i)},e.prototype.removeChild=function(e,n){return t.prototype.removeChild.call(this,this.nodeOrShadowRoot(e),n)},e.prototype.parentNode=function(e){return this.nodeOrShadowRoot(t.prototype.parentNode.call(this,this.nodeOrShadowRoot(e)))},e}(X),J=\"undefined\"!=typeof Zone&&Zone.__symbol__||function(t){return t},tt=J(\"addEventListener\"),et=J(\"removeEventListener\"),nt={},it=\"undefined\"!=typeof Zone&&Zone[J(\"BLACK_LISTED_EVENTS\")];it&&(x={});var rt=function(t){return!!x&&x.hasOwnProperty(t)},ot=function(t){var e=nt[t.type];if(e){var n=this[e];if(n){var i=[t];if(1===n.length){return(s=n[0]).zone!==Zone.current?s.zone.run(s.handler,this,i):s.handler.apply(this,i)}for(var r=n.slice(),o=0;o<r.length;o++){var s=r[o];s.zone!==Zone.current?s.zone.run(s.handler,this,i):s.handler.apply(this,i)}}}},st=function(t){function e(e,n){var i=t.call(this,e)||this;return i.ngZone=n,i}return Object(b.__extends)(e,t),e.prototype.supports=function(t){return!0},e.prototype.addEventListener=function(t,e,n){var i=this,r=n;if(!t[tt]||g.u.isInAngularZone()&&!rt(e))t.addEventListener(e,r,!1);else{var o=nt[e];o||(o=nt[e]=J(\"ANGULAR\"+e+\"FALSE\"));var s=t[o],a=s&&s.length>0;s||(s=t[o]=[]);var l=rt(e)?Zone.root:Zone.current;if(0===s.length)s.push({zone:l,handler:r});else{for(var u=!1,c=0;c<s.length;c++)if(s[c].handler===r){u=!0;break}u||s.push({zone:l,handler:r})}a||t[tt](e,ot,!1)}return function(){return i.removeEventListener(t,e,r)}},e.prototype.removeEventListener=function(t,e,n){var i=t[et];if(!i)return t.removeEventListener.apply(t,[e,n,!1]);var r=nt[e],o=r&&t[r];if(!o)return t.removeEventListener.apply(t,[e,n,!1]);for(var s=0;s<o.length;s++)if(o[s].handler===n){o.splice(s,1);break}0===o.length&&i.apply(t,[e,ot,!1])},e}(z),at={pan:!0,panstart:!0,panmove:!0,panend:!0,pancancel:!0,panleft:!0,panright:!0,panup:!0,pandown:!0,pinch:!0,pinchstart:!0,pinchmove:!0,pinchend:!0,pinchcancel:!0,pinchin:!0,pinchout:!0,press:!0,pressup:!0,rotate:!0,rotatestart:!0,rotatemove:!0,rotateend:!0,rotatecancel:!0,swipe:!0,swipeleft:!0,swiperight:!0,swipeup:!0,swipedown:!0,tap:!0},lt=new g.n(\"HammerGestureConfig\"),ut=function(){function t(){this.events=[],this.overrides={}}return t.prototype.buildHammer=function(t){var e=new Hammer(t);e.get(\"pinch\").set({enable:!0}),e.get(\"rotate\").set({enable:!0});for(var n in this.overrides)e.get(n).set(this.overrides[n]);return e},t}(),ct=function(t){function e(e,n){var i=t.call(this,e)||this;return i._config=n,i}return Object(b.__extends)(e,t),e.prototype.supports=function(t){if(!at.hasOwnProperty(t.toLowerCase())&&!this.isCustomEvent(t))return!1;if(!window.Hammer)throw new Error(\"Hammer.js is not loaded, can not bind \"+t+\" event\");return!0},e.prototype.addEventListener=function(t,e,n){var i=this,r=this.manager.getZone();return e=e.toLowerCase(),r.runOutsideAngular(function(){var o=i._config.buildHammer(t),s=function(t){r.runGuarded(function(){n(t)})};return o.on(e,s),function(){return o.off(e,s)}})},e.prototype.isCustomEvent=function(t){return this._config.events.indexOf(t)>-1},e}(z),pt=[\"alt\",\"control\",\"meta\",\"shift\"],ht={alt:function(t){return t.altKey},control:function(t){return t.ctrlKey},meta:function(t){return t.metaKey},shift:function(t){return t.shiftKey}},ft=function(t){function e(e){return t.call(this,e)||this}return Object(b.__extends)(e,t),e.prototype.supports=function(t){return null!=e.parseEventName(t)},e.prototype.addEventListener=function(t,n,r){var o=e.parseEventName(n),s=e.eventCallback(o.fullKey,r,this.manager.getZone());return this.manager.getZone().runOutsideAngular(function(){return i().onAndCancel(t,o.domEventName,s)})},e.parseEventName=function(t){var n=t.toLowerCase().split(\".\"),i=n.shift();if(0===n.length||\"keydown\"!==i&&\"keyup\"!==i)return null;var r=e._normalizeKey(n.pop()),o=\"\";if(pt.forEach(function(t){var e=n.indexOf(t);e>-1&&(n.splice(e,1),o+=t+\".\")}),o+=r,0!=n.length||0===r.length)return null;var s={};return s.domEventName=i,s.fullKey=o,s},e.getEventFullKey=function(t){var e=\"\",n=i().getEventKey(t);return\" \"===(n=n.toLowerCase())?n=\"space\":\".\"===n&&(n=\"dot\"),pt.forEach(function(i){if(i!=n){(0,ht[i])(t)&&(e+=i+\".\")}}),e+=n},e.eventCallback=function(t,n,i){return function(r){e.getEventFullKey(r)===t&&i.runGuarded(function(){return n(r)})}},e._normalizeKey=function(t){switch(t){case\"esc\":return\"escape\";default:return t}},e}(z),dt=/^(?:(?:https?|mailto|ftp|tel|file):|[^&:/?#]*(?:[/?#]|$))/gi,_t=/^data:(?:image\\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\\/(?:mpeg|mp4|ogg|webm)|audio\\/(?:mp3|oga|ogg|opus));base64,[a-z0-9+\\/]+=*$/i,vt=null,yt=null,mt=h(\"area,br,col,hr,img,wbr\"),gt=h(\"colgroup,dd,dt,li,p,tbody,td,tfoot,th,thead,tr\"),bt=h(\"rp,rt\"),wt=f(bt,gt),Ct=f(mt,f(gt,h(\"address,article,aside,blockquote,caption,center,del,details,dialog,dir,div,dl,figure,figcaption,footer,h1,h2,h3,h4,h5,h6,header,hgroup,hr,ins,main,map,menu,nav,ol,pre,section,summary,table,ul\")),f(bt,h(\"a,abbr,acronym,audio,b,bdi,bdo,big,br,cite,code,del,dfn,em,font,i,img,ins,kbd,label,map,mark,picture,q,ruby,rp,rt,s,samp,small,source,span,strike,strong,sub,sup,time,track,tt,u,var,video\")),wt),Ot=h(\"background,cite,href,itemtype,longdesc,poster,src,xlink:href\"),St=h(\"srcset\"),Et=f(Ot,St,h(\"abbr,accesskey,align,alt,autoplay,axis,bgcolor,border,cellpadding,cellspacing,class,clear,color,cols,colspan,compact,controls,coords,datetime,default,dir,download,face,headers,height,hidden,hreflang,hspace,ismap,itemscope,itemprop,kind,label,lang,language,loop,media,muted,nohref,nowrap,open,preload,rel,rev,role,rows,rowspan,rules,scope,scrolling,shape,size,sizes,span,srclang,start,summary,tabindex,target,title,translate,type,usemap,valign,value,vspace,width\")),xt=function(){function t(){this.sanitizedSomething=!1,this.buf=[]}return t.prototype.sanitizeChildren=function(t){for(var e=t.firstChild;e;)if(yt.isElementNode(e)?this.startElement(e):yt.isTextNode(e)?this.chars(yt.nodeValue(e)):this.sanitizedSomething=!0,yt.firstChild(e))e=yt.firstChild(e);else for(;e;){yt.isElementNode(e)&&this.endElement(e);var n=d(e,yt.nextSibling(e));if(n){e=n;break}e=d(e,yt.parentElement(e))}return this.buf.join(\"\")},t.prototype.startElement=function(t){var e=this,n=yt.nodeName(t).toLowerCase();Ct.hasOwnProperty(n)?(this.buf.push(\"<\"),this.buf.push(n),yt.attributeMap(t).forEach(function(t,n){var i=n.toLowerCase();Et.hasOwnProperty(i)?(Ot[i]&&(t=p(t)),St[i]&&(t=function(t){return(t=String(t)).split(\",\").map(function(t){return p(t.trim())}).join(\", \")}(t)),e.buf.push(\" \"),e.buf.push(n),e.buf.push('=\"'),e.buf.push(_(t)),e.buf.push('\"')):e.sanitizedSomething=!0}),this.buf.push(\">\")):this.sanitizedSomething=!0},t.prototype.endElement=function(t){var e=yt.nodeName(t).toLowerCase();Ct.hasOwnProperty(e)&&!mt.hasOwnProperty(e)&&(this.buf.push(\"</\"),this.buf.push(e),this.buf.push(\">\"))},t.prototype.chars=function(t){this.buf.push(_(t))},t}(),Tt=/[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]/g,kt=/([^\\#-~ |!])/g,Pt=new RegExp(\"^([-,.\\\"'%_!# a-zA-Z0-9]+|(?:(?:matrix|translate|scale|rotate|skew|perspective)(?:X|Y|3d)?|(?:rgb|hsl)a?|(?:repeating-)?(?:linear|radial)-gradient|(?:calc|attr))\\\\([-0-9.%, #a-zA-Z]+\\\\))$\",\"g\"),At=/^url\\(([^)]+)\\)$/,It=function(){return function(){}}(),jt=function(t){function e(e){var n=t.call(this)||this;return n._doc=e,n}return Object(b.__extends)(e,t),e.prototype.sanitize=function(t,e){if(null==e)return null;switch(t){case g.E.NONE:return e;case g.E.HTML:return e instanceof Mt?e.changingThisBreaksApplicationSecurity:(this.checkNotSafeValue(e,\"HTML\"),function(t,e){try{var n=function(){if(vt)return vt;var t=(yt=i()).createElement(\"template\");if(\"content\"in t)return t;var e=yt.createHtmlDocument();if(null==(vt=yt.querySelector(e,\"body\"))){var n=yt.createElement(\"html\",e);vt=yt.createElement(\"body\",e),yt.appendChild(n,vt),yt.appendChild(e,n)}return vt}(),r=e?String(e):\"\",o=5,s=r;do{if(0===o)throw new Error(\"Failed to sanitize html because the input is unstable\");o--,yt.setInnerHTML(n,r=s),t.documentMode&&v(n),s=yt.getInnerHTML(n)}while(r!==s);for(var a=new xt,l=a.sanitizeChildren(yt.getTemplateContent(n)||n),u=yt.getTemplateContent(n)||n,c=0,p=yt.childNodesAsList(u);c<p.length;c++)yt.removeChild(u,p[c]);return Object(g.P)()&&a.sanitizedSomething&&yt.log(\"WARNING: sanitizing HTML stripped some content (see http://g.co/ng/security#xss).\"),l}catch(t){throw vt=null,t}}(this._doc,String(e)));case g.E.STYLE:return e instanceof Rt?e.changingThisBreaksApplicationSecurity:(this.checkNotSafeValue(e,\"Style\"),function(t){if(!(t=String(t).trim()))return\"\";var e=t.match(At);return e&&p(e[1])===e[1]||t.match(Pt)&&function(t){for(var e=!0,n=!0,i=0;i<t.length;i++){var r=t.charAt(i);\"'\"===r&&n?e=!e:'\"'===r&&e&&(n=!n)}return e&&n}(t)?t:(Object(g.P)()&&i().log(\"WARNING: sanitizing unsafe style value \"+t+\" (see http://g.co/ng/security#xss).\"),\"unsafe\")}(e));case g.E.SCRIPT:if(e instanceof Nt)return e.changingThisBreaksApplicationSecurity;throw this.checkNotSafeValue(e,\"Script\"),new Error(\"unsafe value used in a script context\");case g.E.URL:return e instanceof Lt||e instanceof Vt?e.changingThisBreaksApplicationSecurity:(this.checkNotSafeValue(e,\"URL\"),p(String(e)));case g.E.RESOURCE_URL:if(e instanceof Lt)return e.changingThisBreaksApplicationSecurity;throw this.checkNotSafeValue(e,\"ResourceURL\"),new Error(\"unsafe value used in a resource URL context (see http://g.co/ng/security#xss)\");default:throw new Error(\"Unexpected SecurityContext \"+t+\" (see http://g.co/ng/security#xss)\")}},e.prototype.checkNotSafeValue=function(t,e){if(t instanceof Dt)throw new Error(\"Required a safe \"+e+\", got a \"+t.getTypeName()+\" (see http://g.co/ng/security#xss)\")},e.prototype.bypassSecurityTrustHtml=function(t){return new Mt(t)},e.prototype.bypassSecurityTrustStyle=function(t){return new Rt(t)},e.prototype.bypassSecurityTrustScript=function(t){return new Nt(t)},e.prototype.bypassSecurityTrustUrl=function(t){return new Vt(t)},e.prototype.bypassSecurityTrustResourceUrl=function(t){return new Lt(t)},e}(It),Dt=function(){function t(t){this.changingThisBreaksApplicationSecurity=t}return t.prototype.toString=function(){return\"SafeValue must use [property]=binding: \"+this.changingThisBreaksApplicationSecurity+\" (see http://g.co/ng/security#xss)\"},t}(),Mt=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return Object(b.__extends)(e,t),e.prototype.getTypeName=function(){return\"HTML\"},e}(Dt),Rt=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return Object(b.__extends)(e,t),e.prototype.getTypeName=function(){return\"Style\"},e}(Dt),Nt=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return Object(b.__extends)(e,t),e.prototype.getTypeName=function(){return\"Script\"},e}(Dt),Vt=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return Object(b.__extends)(e,t),e.prototype.getTypeName=function(){return\"URL\"},e}(Dt),Lt=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return Object(b.__extends)(e,t),e.prototype.getTypeName=function(){return\"ResourceURL\"},e}(Dt),Ft=[{provide:g.w,useValue:m.r},{provide:g.x,useValue:function(){T.makeCurrent(),M.init()},multi:!0},{provide:m.q,useClass:A,deps:[P]},{provide:P,useFactory:function(){return document},deps:[]}],Bt=Object(g.L)(g.Q,\"browser\",Ft),zt=function(){function t(t){if(t)throw new Error(\"BrowserModule has already been loaded. If you need access to common directives such as NgIf and NgFor from a lazy loaded module, import CommonModule instead.\")}return t.withServerTransition=function(e){return{ngModule:t,providers:[{provide:g.b,useValue:e.appId},{provide:j,useExisting:g.b},D]}},t}();\"undefined\"!=typeof window&&window},function(t,e,n){\"use strict\";var i=n(3).__extends,r=n(155),o=n(86),s=n(159),a=n(124),l=function(t){function e(n,i,r){switch(t.call(this),this.syncErrorValue=null,this.syncErrorThrown=!1,this.syncErrorThrowable=!1,this.isStopped=!1,arguments.length){case 0:this.destination=s.empty;break;case 1:if(!n){this.destination=s.empty;break}if(\"object\"==typeof n){n instanceof e?(this.destination=n,this.destination.add(this)):(this.syncErrorThrowable=!0,this.destination=new u(this,n));break}default:this.syncErrorThrowable=!0,this.destination=new u(this,n,i,r)}}return i(e,t),e.prototype[a.rxSubscriber]=function(){return this},e.create=function(t,n,i){var r=new e(t,n,i);return r.syncErrorThrowable=!1,r},e.prototype.next=function(t){this.isStopped||this._next(t)},e.prototype.error=function(t){this.isStopped||(this.isStopped=!0,this._error(t))},e.prototype.complete=function(){this.isStopped||(this.isStopped=!0,this._complete())},e.prototype.unsubscribe=function(){this.closed||(this.isStopped=!0,t.prototype.unsubscribe.call(this))},e.prototype._next=function(t){this.destination.next(t)},e.prototype._error=function(t){this.destination.error(t),this.unsubscribe()},e.prototype._complete=function(){this.destination.complete(),this.unsubscribe()},e.prototype._unsubscribeAndRecycle=function(){var t=this._parent,e=this._parents;return this._parent=null,this._parents=null,this.unsubscribe(),this.closed=!1,this.isStopped=!1,this._parent=t,this._parents=e,this},e}(o.Subscription);e.Subscriber=l;var u=function(t){function e(e,n,i,o){t.call(this),this._parentSubscriber=e;var a,l=this;r.isFunction(n)?a=n:n&&(a=n.next,i=n.error,o=n.complete,n!==s.empty&&(l=Object.create(n),r.isFunction(l.unsubscribe)&&this.add(l.unsubscribe.bind(l)),l.unsubscribe=this.unsubscribe.bind(this))),this._context=l,this._next=a,this._error=i,this._complete=o}return i(e,t),e.prototype.next=function(t){if(!this.isStopped&&this._next){var e=this._parentSubscriber;e.syncErrorThrowable?this.__tryOrSetError(e,this._next,t)&&this.unsubscribe():this.__tryOrUnsub(this._next,t)}},e.prototype.error=function(t){if(!this.isStopped){var e=this._parentSubscriber;if(this._error)e.syncErrorThrowable?(this.__tryOrSetError(e,this._error,t),this.unsubscribe()):(this.__tryOrUnsub(this._error,t),this.unsubscribe());else{if(!e.syncErrorThrowable)throw this.unsubscribe(),t;e.syncErrorValue=t,e.syncErrorThrown=!0,this.unsubscribe()}}},e.prototype.complete=function(){var t=this;if(!this.isStopped){var e=this._parentSubscriber;if(this._complete){var n=function(){return t._complete.call(t._context)};e.syncErrorThrowable?(this.__tryOrSetError(e,n),this.unsubscribe()):(this.__tryOrUnsub(n),this.unsubscribe())}else this.unsubscribe()}},e.prototype.__tryOrUnsub=function(t,e){try{t.call(this._context,e)}catch(t){throw this.unsubscribe(),t}},e.prototype.__tryOrSetError=function(t,e,n){try{e.call(this._context,n)}catch(e){return t.syncErrorValue=e,t.syncErrorThrown=!0,!0}return!1},e.prototype._unsubscribe=function(){var t=this._parentSubscriber;this._context=null,this._parentSubscriber=null,t.unsubscribe()},e}(l)},function(t,e,n){\"use strict\";n.d(e,\"a\",function(){return o});var i=n(36),r=this&&this.__extends||function(){var t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n])};return function(e,n){function i(){this.constructor=e}t(e,n),e.prototype=null===n?Object.create(n):(i.prototype=n.prototype,new i)}}(),o=function(t){function e(e,n,i,r){var o=t.call(this,e,null,r)||this;return o.enteringView=n,o.leavingView=i,o}return r(e,t),e.prototype.init=function(){},e.prototype.registerStart=function(t){this._trnsStart=t},e.prototype.start=function(){this._trnsStart&&this._trnsStart(),this._trnsStart=null,this.parent&&this.parent.start()},e.prototype.destroy=function(){t.prototype.destroy.call(this),this.parent=this.enteringView=this.leavingView=this._trnsStart=null},e}(i.a)},function(t,e,n){\"use strict\";n.d(e,\"a\",function(){return i});var i=function(){return function(){}}()},function(t,e,n){\"use strict\";n.d(e,\"a\",function(){return i});var i=function(){return function(){}}()},function(t,e,n){\"use strict\";n.d(e,\"a\",function(){return i});var i=function(){return function(){}}()},function(t,e,n){\"use strict\";n.d(e,\"a\",function(){return o});n(1);var i=n(29),r=this&&this.__extends||function(){var t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n])};return function(e,n){function i(){this.constructor=e}t(e,n),e.prototype=null===n?Object.create(n):(i.prototype=n.prototype,new i)}}(),o=function(t){function e(e,n,i){return t.call(this,e,n,i,\"note\")||this}return r(e,t),e}(i.a)},function(t,e,n){\"use strict\";n.d(e,\"a\",function(){return o});var i=n(0),r=(n(41),n(18)),o=function(){function t(t,e,n){this._renderer=t,this._elementRef=e,this._cd=n,this._disabled=!1,this._btns=[],this._ids=-1,this._init=!1,this.ionChange=new i.l,this.id=++s}return Object.defineProperty(t.prototype,\"disabled\",{get:function(){return this._disabled},set:function(t){this._disabled=Object(r.o)(t)},enumerable:!0,configurable:!0}),t.prototype.ngAfterContentInit=function(){var t=this._btns.find(function(t){return t.checked});t&&this._setActive(t)},t.prototype.writeValue=function(t){this.value=t,this._init&&(this._update(),this.onTouched(),this.ionChange.emit(t)),this._init=!0},t.prototype.registerOnChange=function(t){var e=this;this._fn=t,this.onChange=function(n){t(n),e.value=n,e._update(),e.onTouched(),e.ionChange.emit(n)}},t.prototype.registerOnTouched=function(t){this.onTouched=t},t.prototype._update=function(){var t=this,e=!1;this._btns.forEach(function(n){n.checked=Object(r.g)(t.value,n.value)&&!e,n.checked&&(t._setActive(n),e=!0)})},t.prototype._setActive=function(t){this._renderer.setElementAttribute(this._elementRef.nativeElement,\"aria-activedescendant\",t.id)},t.prototype.add=function(t){var e=this;return this._btns.push(t),t.ionSelect.subscribe(function(t){e.onChange(t)}),this.id+\"-\"+ ++this._ids},t.prototype.remove=function(t){var e=this._btns.indexOf(t);e>-1&&(t.value===this.value&&(this.value=null),this._btns.splice(e,1))},Object.defineProperty(t.prototype,\"_header\",{set:function(t){t&&(t.id||(t.id=\"rg-hdr-\"+this.id),this._renderer.setElementAttribute(this._elementRef.nativeElement,\"aria-describedby\",t.id))},enumerable:!0,configurable:!0}),t.prototype.onChange=function(t){this.value=t,this._update(),this.onTouched(),this.ionChange.emit(t),this._cd.detectChanges()},t.prototype.onTouched=function(){},t.prototype.setDisabledState=function(t){this.disabled=t},t}(),s=-1},function(t,e,n){\"use strict\";function i(t){return r._22(2,[(t()(),r.Z(0,0,null,null,1,\"div\",[[\"class\",\"toolbar-background\"]],null,null,null,null,null)),r.Y(1,278528,null,0,o.g,[r.p,r.q,r.j,r.A],{klass:[0,\"klass\"],ngClass:[1,\"ngClass\"]},null),r._12(null,0),r._12(null,1),r._12(null,2),(t()(),r.Z(5,0,null,null,2,\"div\",[[\"class\",\"toolbar-content\"]],null,null,null,null,null)),r.Y(6,278528,null,0,o.g,[r.p,r.q,r.j,r.A],{klass:[0,\"klass\"],ngClass:[1,\"ngClass\"]},null),r._12(null,3)],function(t,e){var n=e.component;t(e,1,0,\"toolbar-background\",\"toolbar-background-\"+n._mode);t(e,6,0,\"toolbar-content\",\"toolbar-content-\"+n._mode)},null)}n.d(e,\"a\",function(){return s}),e.b=i;var r=n(0),o=n(28),s=(n(11),n(1),r.X({encapsulation:2,styles:[],data:{}}))},function(t,e,n){\"use strict\";(function(t){var n=\"undefined\"!=typeof window&&window,i=\"undefined\"!=typeof self&&\"undefined\"!=typeof WorkerGlobalScope&&self instanceof WorkerGlobalScope&&self,r=n||void 0!==t&&t||i;e.root=r,function(){if(!r)throw new Error(\"RxJS could not find any global context (window, self, global)\")}()}).call(e,n(154))},function(t,e,n){\"use strict\";n.d(e,\"a\",function(){return s});var i=n(36),r=n(59),o=this&&this.__extends||function(){var t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n])};return function(e,n){function i(){this.constructor=e}t(e,n),e.prototype=null===n?Object.create(n):(i.prototype=n.prototype,new i)}}(),s=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return o(e,t),e.prototype.init=function(){var t=this;this.enteringView&&(this.enteringPage=new i.a(this.plt,this.enteringView.pageRef()),this.add(this.enteringPage.beforeAddClass(\"show-page\")),this.beforeAddRead(function(){t.enteringView.readReady.emit()}),this.beforeAddWrite(function(){t.enteringView.writeReady.emit()}))},e.prototype.destroy=function(){t.prototype.destroy.call(this),this.enteringPage&&this.enteringPage.destroy(),this.enteringPage=null},e}(r.a)},function(t,e,n){\"use strict\";n.d(e,\"a\",function(){return r});n(1);var i=n(172),r=function(){function t(t,e){this._app=t,this.config=e}return t.prototype.create=function(t){return void 0===t&&(t={}),new i.a(this._app,t,this.config)},t}()},function(t,e,n){\"use strict\";n.d(e,\"a\",function(){return r});n(2);var i=n(51),r=(n(54),n(98),function(){function t(t){this._listsActive=!1,this._events=new i.a(t)}return t.prototype.ngAfterContentInit=function(){var t=this._mainButton;t&&t.getNativeElement()?this._events.listen(t.getNativeElement(),\"click\",this.clickHandler.bind(this),{zone:!0}):console.error(\"FAB container needs a main <button ion-fab>\")},t.prototype.clickHandler=function(t){this.canActivateList(t)&&this.toggleList()},t.prototype.canActivateList=function(t){if(this._fabLists.length>0&&this._mainButton&&t.target){var e=t.target.closest(\"ion-fab>[ion-fab]\");return e&&e===this._mainButton.getNativeElement()}return!1},t.prototype.toggleList=function(){this.setActiveLists(!this._listsActive)},t.prototype.setActiveLists=function(t){if(t!==this._listsActive){for(var e=0,n=this._fabLists.toArray();e<n.length;e++){n[e].setVisible(t)}this._mainButton.setActiveClose(t),this._listsActive=t}},t.prototype.close=function(){this.setActiveLists(!1)},t.prototype.ngOnDestroy=function(){this._events.destroy()},t}())},function(t,e,n){\"use strict\";n.d(e,\"a\",function(){return o}),n.d(e,\"b\",function(){return s}),e.c=function(t,e){return new s(t,e)},e.d=function(t,e,n,i){return function(){Object(r.s)(function(){i.runOutsideAngular(function(){!function(t,e,n){if(!e||!e.links||!t.getBoolean(\"preloadModules\"))return Promise.resolve();var i=e.links.filter(function(t){return!!t.loadChildren&&\"off\"!==t.priority}),r=i.filter(function(t){return\"high\"===t.priority}).map(function(t){return n.load(t.loadChildren)});Promise.all(r).then(function(){var t=i.filter(function(t){return\"low\"===t.priority}).map(function(t){return n.load(t.loadChildren)});return Promise.all(t)}).catch(function(t){console.error(t.message)})}(t,e,n)})})}};var i=n(0),r=(n(137),n(18)),o=new i.n(\"LZYCMP\"),s=function(){function t(t,e){this._ngModuleLoader=t,this._injector=e,this._cfrMap=new Map,this._promiseMap=new Map}return t.prototype.load=function(t){var e=this,n=t.split(a),i=this._promiseMap.get(t);return i||(i=this._ngModuleLoader.load(n[0],n[1]),this._promiseMap.set(t,i)),i.then(function(t){var n=t.create(e._injector),i=n.injector.get(o);return e._cfrMap.set(i,n.componentFactoryResolver),{componentFactoryResolver:n.componentFactoryResolver,component:i}})},t.prototype.getComponentFactoryResolver=function(t){return this._cfrMap.get(t)},t}(),a=\"#\"},function(t,e,n){\"use strict\";n.d(e,\"a\",function(){return a});var i=n(0),r=(n(1),n(19),n(29)),o=n(18),s=(n(64),this&&this.__extends||function(){var t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n])};return function(e,n){function i(){this.constructor=e}t(e,n),e.prototype=null===n?Object.create(n):(i.prototype=n.prototype,new i)}}()),a=function(t){function e(e,n,r,o,s,a){var l=t.call(this,n,r,o,\"radio\")||this;return l._form=e,l._item=s,l._group=a,l._checked=!1,l._disabled=!1,l._value=null,l.ionSelect=new i.l,e.register(l),a&&(l.id=\"rb-\"+a.add(l)),s&&(l.id=\"rb-\"+s.registerInput(\"radio\"),l._labelId=\"lbl-\"+s.id,l._item.setElementClass(\"item-radio\",!0)),l}return s(e,t),Object.defineProperty(e.prototype,\"color\",{set:function(t){this._setColor(t),this._item&&this._item._updateColor(t,\"item-radio\")},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,\"value\",{get:function(){return Object(o.f)(this._value)?this.id:this._value},set:function(t){this._value=t},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,\"checked\",{get:function(){return this._checked},set:function(t){this._checked=Object(o.o)(t),this._item&&this._item.setElementClass(\"item-radio-checked\",this._checked)},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,\"disabled\",{get:function(){return this._disabled||null!=this._group&&this._group.disabled},set:function(t){this._disabled=Object(o.o)(t),this._item&&this._item.setElementClass(\"item-radio-disabled\",this._disabled)},enumerable:!0,configurable:!0}),e.prototype.initFocus=function(){this._elementRef.nativeElement.querySelector(\"button\").focus()},e.prototype._click=function(t){t.preventDefault(),t.stopPropagation(),this.checked=!0,this.ionSelect.emit(this.value)},e.prototype.ngOnInit=function(){this._group&&Object(o.l)(this._group.value)&&(this.checked=Object(o.g)(this._group.value,this.value)),this._group&&this._group.disabled&&(this.disabled=this._group.disabled)},e.prototype.ngOnDestroy=function(){this._form.deregister(this),this._group&&this._group.remove(this)},e}(r.a)},function(t,e,n){\"use strict\";n.d(e,\"a\",function(){return o});var i=n(0),r=n(18),o=function(){function t(){this.isActive=!1,this._disabled=!1,this.ionSelect=new i.l}return Object.defineProperty(t.prototype,\"disabled\",{get:function(){return this._disabled},set:function(t){this._disabled=Object(r.o)(t)},enumerable:!0,configurable:!0}),t.prototype.onClick=function(){this.ionSelect.emit(this)},t.prototype.ngOnInit=function(){Object(r.l)(this.value)||console.warn('<ion-segment-button> requires a \"value\" attribute')},t}()},function(t,e,n){\"use strict\";function i(t){return Math.floor(t)}function r(t,e){if(t)if(t.length)for(var n=0;n<t.length;n++)r(t[n],e);else if(t.nodeType)for(var i=Object.keys(e),o=0;o<i.length;o++)t.style[i[o]]=e[i[o]]}function o(t,e){if(t)if(t.length)for(var n=0;n<t.length;n++)o(t[n],e);else t.nodeType&&(Array.isArray(e)?e.forEach(function(e){t.classList.add(e)}):t.classList.add(e))}function s(t,e){if(t)if(t.length)for(var n=0;n<t.length;n++)s(t[n],e);else t.nodeType&&(Array.isArray(e)?e.forEach(function(e){t.classList.remove(e)}):t.classList.remove(e))}function a(t){var e=0;if(t)for(;null!==(t=t.previousSibling);)1===t.nodeType&&e++;return e}function l(t,e){return t?t.querySelectorAll(e):[]}function u(t,e,n){if(t)for(var i=t.querySelectorAll(e),r=0;r<i.length;r++)n(i[r])}function c(t,e){if(t){var n=t.style;n.webkitTransform=n.MsTransform=n.msTransform=n.transform=e}}function p(t,e){if(t){\"string\"!=typeof e&&(e+=\"ms\");var n=t.style;n.webkitTransitionDuration=n.MsTransitionDuration=n.msTransitionDuration=n.transitionDuration=e}}function h(t,e){try{var n=new(t.win().CustomEvent)(\"transitionend\",{bubbles:!0,cancelable:!0});e.dispatchEvent(n)}catch(t){}}function f(t,e){if(t){var n=e.getElementBoundingClientRect(t),i=e.doc().body,r=e.win();return{top:n.top+(r.pageYOffset||t.scrollTop)-(t.clientTop||i.clientTop||0),left:n.left+(r.pageXOffset||t.scrollLeft)-(t.clientLeft||i.clientLeft||0)}}return null}function d(t){for(var e=0;e<t._slides.length;e++)t._slides[e].swiperSlideOffset=_(t)?t._slides[e].offsetLeft:t._slides[e].offsetTop}function _(t){return\"horizontal\"===t.direction}function v(t){return!!t&&dt.indexOf(t.tagName)>-1}function y(t){return-t._snapGrid[0]}function m(t){return-t._snapGrid[t._snapGrid.length-1]}function g(t,e,n){var i,r,o,s=t._rtl?-1:1;i=e.getAttribute(\"data-swiper-parallax\")||\"0\",r=e.getAttribute(\"data-swiper-parallax-x\"),o=e.getAttribute(\"data-swiper-parallax-y\"),r||o?(r=r||\"0\",o=o||\"0\"):_(t)?(r=i,o=\"0\"):(o=i,r=\"0\"),c(e,\"translate3d(\"+(r=r.indexOf(\"%\")>=0?parseInt(r,10)*n*s+\"%\":r*n*s+\"px\")+\", \"+(o=o.indexOf(\"%\")>=0?parseInt(o,10)*n+\"%\":o*n+\"px\")+\",0px)\")}function b(t){u(t.container,\"[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y]\",function(e){g(t,e,t.progress)});for(var e=0;e<t._slides.length;e++){var n=t._slides[e];u(n,\"[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y]\",function(){var e=Math.min(Math.max(n.progress,-1),1);g(t,n,e)})}}function w(t,e){void 0===e&&(e=t._translate||0);var n=m(t)-y(t),i=t._isBeginning,r=t._isEnd;0===n?(t.progress=0,t._isBeginning=t._isEnd=!0):(t.progress=(e-y(t))/n,t._isBeginning=t.progress<=0,t._isEnd=t.progress>=1),t._zone.run(function(){t._isBeginning&&!i&&t.ionSlideReachStart.emit(),t._isEnd&&!r&&t.ionSlideReachEnd.emit(),t.watchSlidesProgress&&function(t,e){void 0===e&&(e=t._translate||0);if(0===t._slides.length)return;void 0===t._slides[0].swiperSlideOffset&&d(t);var n=-e;t._rtl&&(n=e);s(t._slides,_t.slideVisible);for(var i=0;i<t._slides.length;i++){var r=t._slides[i],o=(n+(t.centeredSlides?y(t):0)-r.swiperSlideOffset)/(r.swiperSlideSize+t.spaceBetween);if(t.watchSlidesVisibility){var a=-(n-r.swiperSlideOffset),l=a+t._slidesSizesGrid[i];(a>=0&&a<t._renderedSize||l>0&&l<=t._renderedSize||a<=0&&l>=t._renderedSize)&&t._slides[i].classList.add(_t.slideVisible)}r.progress=t._rtl?-o:o}}(t,e),t.ionSlideProgress.emit(t.progress)})}function C(t,e){e?t.setAttribute(\"aria-disabled\",\"true\"):t.hasAttribute(\"aria-disabled\")&&t.removeAttribute(\"aria-disabled\")}function O(t,e){e?t.setAttribute(\"aria-hidden\",\"true\"):t.hasAttribute(\"aria-hidden\")&&t.removeAttribute(\"aria-hidden\")}function S(t){if(t.paginationType&&t._paginationContainer){var e=\"\";if(\"bullets\"===t.paginationType)for(var n=t.loop?Math.ceil((t._slides.length-2*t.loopedSlides)/t.slidesPerGroup):t._snapGrid.length,i=0;i<n;i++)e+=t.paginationBulletRender?t.paginationBulletRender(i,_t.bullet):'<button class=\"'+_t.bullet+'\" aria-label=\"Go to slide '+(i+1)+'\" data-slide-index=\"'+i+'\"></button>';else\"fraction\"===t.paginationType?e='<span class=\"'+_t.paginationCurrent+'\"></span> / <span class=\"'+_t.paginationTotal+'\"></span>':\"progress\"===t.paginationType&&(e='<span class=\"'+_t.paginationProgressbar+'\"></span>');t._paginationContainer.innerHTML=e,t._bullets=t._paginationContainer.querySelectorAll(\".\"+_t.bullet)}}function E(t){s(t._slides,[_t.slideActive,_t.slideNext,_t.slidePrev,_t.slideDuplicateActive,_t.slideDuplicateNext,_t.slideDuplicatePrev]);for(var e=0;e<t._slides.length;e++)O(t._slides[e],!0);var n=t._slides[t._activeIndex];if(n){o(n,_t.slideActive),O(n,!1),t.loop&&o(n.classList.contains(_t.slideDuplicate)?l(t._wrapper,\".\"+_t.slide+\":not(.\"+_t.slideDuplicate+')[data-swiper-slide-index=\"'+t.realIndex+'\"]'):l(t._wrapper,\".\"+_t.slide+\".\"+_t.slideDuplicate+'[data-swiper-slide-index=\"'+t.realIndex+'\"]'),_t.slideDuplicateActive);var i=n.nextElementSibling;t.loop&&!i&&(i=t._slides[0]),i&&i.classList.add(_t.slideNext);var r=n.previousElementSibling;t.loop&&!r&&(r=t._slides[t._slides.length-1]),r&&r.classList.add(_t.slidePrev),t.loop&&(o(i.classList.contains(_t.slideDuplicate)?l(t._wrapper,\".\"+_t.slide+\":not(.\"+_t.slideDuplicate+')[data-swiper-slide-index=\"'+i.getAttribute(\"data-swiper-slide-index\")+'\"]'):l(t._wrapper,\".\"+_t.slide+\".\"+_t.slideDuplicate+'[data-swiper-slide-index=\"'+i.getAttribute(\"data-swiper-slide-index\")+'\"]'),_t.slideDuplicateNext),o(r.classList.contains(_t.slideDuplicate)?l(t._wrapper,\".\"+_t.slide+\":not(.\"+_t.slideDuplicate+')[data-swiper-slide-index=\"'+r.getAttribute(\"data-swiper-slide-index\")+'\"]'):l(t._wrapper,\".\"+_t.slide+\".\"+_t.slideDuplicate+'[data-swiper-slide-index=\"'+r.getAttribute(\"data-swiper-slide-index\")+'\"]'),_t.slideDuplicatePrev)),t._paginationContainer&&function(t){var e,n=t.loop?Math.ceil((t._slides.length-2*t.loopedSlides)/t.slidesPerGroup):t._snapGrid.length;if(t.loop?((e=Math.ceil((t._activeIndex-t.loopedSlides)/t.slidesPerGroup))>t._slides.length-1-2*t.loopedSlides&&(e-=t._slides.length-2*t.loopedSlides),e>n-1&&(e-=n),e<0&&\"bullets\"!==t.paginationType&&(e=n+e)):e=void 0!==t._snapIndex?t._snapIndex:t._activeIndex||0,\"bullets\"===t.paginationType&&t._bullets)for(var i=e+(e<0?t._bullets.length:0),r=0;r<t._bullets.length;r++)r===i?o(t._bullets[r],_t.bulletActive):s(t._bullets[r],_t.bulletActive);if(\"fraction\"===t.paginationType&&(u(t._paginationContainer,\".\"+_t.paginationCurrent,function(t){t.textContent=e+1}),u(t._paginationContainer,\".\"+_t.paginationTotal,function(t){t.textContent=n})),\"progress\"===t.paginationType){var a=(e+1)/n,l=a,h=1;_(t)||(h=a,l=1),u(t._paginationContainer,\".\"+_t.paginationProgressbar,function(e){c(e,\"translate3d(0,0,0) scaleX(\"+l+\") scaleY(\"+h+\")\"),p(e,t.speed)})}}(t),t.loop||(t.prevButton&&(t._isBeginning?(t.prevButton.classList.add(_t.buttonDisabled),C(t.prevButton,!0)):(t.prevButton.classList.remove(_t.buttonDisabled),C(t.prevButton,!1))),t.nextButton&&(t._isEnd?(t.nextButton.classList.add(_t.buttonDisabled),C(t.nextButton,!0)):(t.nextButton.classList.remove(_t.buttonDisabled),C(t.nextButton,!1))))}}function x(t){var e,n,i,r=t._rtl?t._translate:-t._translate;for(n=0;n<t._slidesGrid.length;n++)void 0!==t._slidesGrid[n+1]?r>=t._slidesGrid[n]&&r<t._slidesGrid[n+1]-(t._slidesGrid[n+1]-t._slidesGrid[n])/2?e=n:r>=t._slidesGrid[n]&&r<t._slidesGrid[n+1]&&(e=n+1):r>=t._slidesGrid[n]&&(e=n);(i=Math.floor(e/t.slidesPerGroup))>=t._snapGrid.length&&(i=t._snapGrid.length-1),e!==t._activeIndex&&(t._snapIndex=i,t._previousIndex=t._activeIndex,t._activeIndex=e,E(t),T(t))}function T(t){var e=t._slides[t._activeIndex];e&&(t.realIndex=parseInt(e.getAttribute(\"data-swiper-slide-index\")||t._activeIndex,10))}function k(t,e,n,r,o){var s=0,a=0;_(t)?s=t._rtl?-n:n:a=n,t.roundLengths&&(s=i(s),a=i(a)),t.virtualTranslate||c(t._wrapper,\"translate3d(\"+s+\"px, \"+a+\"px, 0px)\"),t._translate=_(t)?s:a;var l=m(t)-y(t);(0===l?0:(n-y(t))/l)!==t.progress&&w(t,n),r&&x(t),\"slide\"!==t.effect&&mt[t.effect]&&mt[t.effect].setTranslate(t,e),t.parallax&&b(t),t.control&&vt.setTranslate(t,e,t._translate,o,k)}function P(t,e,n,i){var r,o,s,a,l=e.win();return void 0===i&&(i=\"x\"),t.virtualTranslate?t._rtl?-t._translate:t._translate:(s=e.getElementComputedStyle(n),l.WebKitCSSMatrix?((o=s.transform||s.webkitTransform).split(\",\").length>6&&(o=o.split(\", \").map(function(t){return t.replace(\",\",\".\")}).join(\", \")),a=new l.WebKitCSSMatrix(\"none\"===o?\"\":o)):r=(a=s.MozTransform||s.OTransform||s.MsTransform||s.msTransform||s.transform||s.getPropertyValue(\"transform\").replace(\"translate(\",\"matrix(1, 0, 0, 1,\")).toString().split(\",\"),\"x\"===i&&(o=l.WebKitCSSMatrix?a.m41:16===r.length?parseFloat(r[12]):parseFloat(r[4])),\"y\"===i&&(o=l.WebKitCSSMatrix?a.m42:16===r.length?parseFloat(r[13]):parseFloat(r[5])),t._rtl&&o&&(o=-o),o||0)}function A(t,e,n,i){p(t._wrapper,n),\"slide\"!==t.effect&&mt[t.effect]&&mt[t.effect].setTransition(t,e,n),t.parallax&&function(t,e){void 0===e&&(e=t.speed),u(t.container,\"[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y]\",function(t){var n=parseInt(t.getAttribute(\"data-swiper-parallax-duration\"),10)||e;0===e&&(n=0),p(t,n)})}(t,n),t.control&&vt.setTransition(t,e,n,i,A)}function I(t){if(t.targetTouches.length<2)return 1;var e=t.targetTouches[0].pageX,n=t.targetTouches[0].pageY,i=t.targetTouches[1].pageX,r=t.targetTouches[1].pageY;return Math.sqrt(Math.pow(i-e,2)+Math.pow(r-n,2))}function j(t,e,n){var i=t._zoom;if(t.originalEvent=n,!t._supportGestures){if(\"touchstart\"!==n.type||\"touchstart\"===n.type&&n.targetTouches.length<2)return;i.gesture.scaleStart=I(n)}if(!i.gesture.slide&&(n.currentTarget&&n.currentTarget.classList.contains(_t.slide)&&(i.gesture.slide=n.currentTarget),i.gesture.slide||(i.gesture.slide=t._slides[t._activeIndex]),i.gesture.image=i.gesture.slide.querySelector(\"img, svg, canvas, ion-img\"),i.gesture.image)){if(i.gesture.imageWrap=i.gesture.image.closest(\".\"+_t.zoomContainer),!i.gesture.imageWrap)return void(i.gesture.image=void 0);i.gesture.zoomMax=parseInt(i.gesture.imageWrap.getAttribute(\"data-swiper-zoom\")||t.zoomMax,10)}p(i.gesture.image,0),i.isScaling=!0}function D(t,e,n){var i=t._zoom;if(t.originalEvent=n,!t._supportGestures){if(\"touchmove\"!==n.type||\"touchmove\"===n.type&&n.targetTouches.length<2)return;i.gesture.scaleMove=I(n)}i.gesture.image&&(i.scale=t._supportGestures?n.scale*i.currentScale:i.gesture.scaleMove/i.gesture.scaleStart*i.currentScale,i.scale>i.gesture.zoomMax&&(i.scale=i.gesture.zoomMax-1+Math.pow(i.scale-i.gesture.zoomMax+1,.5)),i.scale<t.zoomMin&&(i.scale=t.zoomMin+1-Math.pow(t.zoomMin-i.scale+1,.5)),c(i.gesture.image,\"translate3d(0,0,0) scale(\"+i.scale+\")\"))}function M(t,e,n){var i=t._zoom;t.originalEvent=n,!t._supportGestures&&(\"touchend\"!==n.type||\"touchend\"===n.type&&n.changedTouches.length<2)||i.gesture.image&&(i.scale=Math.max(Math.min(i.scale,i.gesture.zoomMax),t.zoomMin),p(i.gesture.image,t.speed),c(i.gesture.image,\"translate3d(0,0,0) scale(\"+i.scale+\")\"),i.currentScale=i.scale,i.isScaling=!1,1===i.scale&&(i.gesture.slide=void 0))}function R(t,e){N(t);var n,i=t._zoom.unRegs,r={passive:\"touchstart\"===t._touchEvents.start,zone:!1},o=t._slides;if(t._supportGestures)for(a=0;a<o.length;a++)e.registerListener(n=o[a],\"gesturestart\",function(e){j(t,0,e)},r,i),e.registerListener(n,\"gesturechange\",function(e){D(t,0,e)},r,i),e.registerListener(n,\"gestureend\",function(e){M(t,0,e)},r,i);else if(\"touchstart\"===t._touchEvents.start)for(a=0;a<o.length;a++)e.registerListener(n=o[a],t._touchEvents.start,function(e){j(t,0,e)},r,i),e.registerListener(n,t._touchEvents.move,function(e){D(t,0,e)},r,i),e.registerListener(n,t._touchEvents.end,function(e){M(t,0,e)},r,i);var s=t.ionSlideTouchStart.subscribe(function(n){!function(t,e,n){var i=t._zoom;t.originalEvent=n,i.gesture.image&&!i.image.isTouched&&(e.is(\"android\")&&n.preventDefault(),i.image.isTouched=!0,i.image.touchesStart.x=\"touchstart\"===n.type?n.targetTouches[0].pageX:n.pageX,i.image.touchesStart.y=\"touchstart\"===n.type?n.targetTouches[0].pageY:n.pageY)}(t,e,n)});i.push(function(){s.unsubscribe()});for(var a=0;a<o.length;a++)(n=o[a]).querySelector(\".\"+_t.zoomContainer)&&e.registerListener(n,\"s.touchEvents.move\",function(n){!function(t,e,n){var i=t._zoom;if(t.originalEvent=n,i.gesture.image&&(t._allowClick=!1,i.image.isTouched&&i.gesture.slide)){i.image.isMoved||(i.image.width=i.gesture.image.offsetWidth,i.image.height=i.gesture.image.offsetHeight,i.image.startX=P(t,e,i.gesture.imageWrap,\"x\")||0,i.image.startY=P(t,e,i.gesture.imageWrap,\"y\")||0,i.gesture.slideWidth=i.gesture.slide.offsetWidth,i.gesture.slideHeight=i.gesture.slide.offsetHeight,p(i.gesture.imageWrap,0),t._rtl&&(i.image.startX=-i.image.startX,i.image.startY=-i.image.startY));var r=i.image.width*i.scale,o=i.image.height*i.scale;if(!(r<i.gesture.slideWidth&&o<i.gesture.slideHeight)){if(i.image.minX=Math.min(i.gesture.slideWidth/2-r/2,0),i.image.maxX=-i.image.minX,i.image.minY=Math.min(i.gesture.slideHeight/2-o/2,0),i.image.maxY=-i.image.minY,i.image.touchesCurrent.x=\"touchmove\"===n.type?n.targetTouches[0].pageX:n.pageX,i.image.touchesCurrent.y=\"touchmove\"===n.type?n.targetTouches[0].pageY:n.pageY,!i.image.isMoved&&!i.isScaling){if(_(t)&&Math.floor(i.image.minX)===Math.floor(i.image.startX)&&i.image.touchesCurrent.x<i.image.touchesStart.x||Math.floor(i.image.maxX)===Math.floor(i.image.startX)&&i.image.touchesCurrent.x>i.image.touchesStart.x)return void(i.image.isTouched=!1);if(!_(t)&&Math.floor(i.image.minY)===Math.floor(i.image.startY)&&i.image.touchesCurrent.y<i.image.touchesStart.y||Math.floor(i.image.maxY)===Math.floor(i.image.startY)&&i.image.touchesCurrent.y>i.image.touchesStart.y)return void(i.image.isTouched=!1)}n.preventDefault(),n.stopPropagation(),i.image.isMoved=!0,i.image.currentX=i.image.touchesCurrent.x-i.image.touchesStart.x+i.image.startX,i.image.currentY=i.image.touchesCurrent.y-i.image.touchesStart.y+i.image.startY,i.image.currentX<i.image.minX&&(i.image.currentX=i.image.minX+1-Math.pow(i.image.minX-i.image.currentX+1,.8)),i.image.currentX>i.image.maxX&&(i.image.currentX=i.image.maxX-1+Math.pow(i.image.currentX-i.image.maxX+1,.8)),i.image.currentY<i.image.minY&&(i.image.currentY=i.image.minY+1-Math.pow(i.image.minY-i.image.currentY+1,.8)),i.image.currentY>i.image.maxY&&(i.image.currentY=i.image.maxY-1+Math.pow(i.image.currentY-i.image.maxY+1,.8)),i.velocity.prevPositionX||(i.velocity.prevPositionX=i.image.touchesCurrent.x),i.velocity.prevPositionY||(i.velocity.prevPositionY=i.image.touchesCurrent.y),i.velocity.prevTime||(i.velocity.prevTime=Date.now()),i.velocity.x=(i.image.touchesCurrent.x-i.velocity.prevPositionX)/(Date.now()-i.velocity.prevTime)/2,i.velocity.y=(i.image.touchesCurrent.y-i.velocity.prevPositionY)/(Date.now()-i.velocity.prevTime)/2,Math.abs(i.image.touchesCurrent.x-i.velocity.prevPositionX)<2&&(i.velocity.x=0),Math.abs(i.image.touchesCurrent.y-i.velocity.prevPositionY)<2&&(i.velocity.y=0),i.velocity.prevPositionX=i.image.touchesCurrent.x,i.velocity.prevPositionY=i.image.touchesCurrent.y,i.velocity.prevTime=Date.now(),c(i.gesture.imageWrap,\"translate3d(\"+i.image.currentX+\"px, \"+i.image.currentY+\"px,0)\")}}}(t,e,n)},r,i);var l=t.ionSlideTouchEnd.subscribe(function(){!function(t){var e=t._zoom;if(e.gesture.image){if(!e.image.isTouched||!e.image.isMoved)return e.image.isTouched=!1,void(e.image.isMoved=!1);e.image.isTouched=!1,e.image.isMoved=!1;var n=300,i=300,r=e.image.currentX+e.velocity.x*n,o=e.image.currentY+e.velocity.y*i;0!==e.velocity.x&&(n=Math.abs((r-e.image.currentX)/e.velocity.x)),0!==e.velocity.y&&(i=Math.abs((o-e.image.currentY)/e.velocity.y));var s=Math.max(n,i);e.image.currentX=r,e.image.currentY=o;var a=e.image.width*e.scale,l=e.image.height*e.scale;e.image.minX=Math.min(e.gesture.slideWidth/2-a/2,0),e.image.maxX=-e.image.minX,e.image.minY=Math.min(e.gesture.slideHeight/2-l/2,0),e.image.maxY=-e.image.minY,e.image.currentX=Math.max(Math.min(e.image.currentX,e.image.maxX),e.image.minX),e.image.currentY=Math.max(Math.min(e.image.currentY,e.image.maxY),e.image.minY),p(e.gesture.imageWrap,s),c(e.gesture.imageWrap,\"translate3d(\"+e.image.currentX+\"px, \"+e.image.currentY+\"px,0)\")}}(t)});i.push(function(){l.unsubscribe()});var u=t.ionSlideTouchEnd.subscribe(function(){!function(t){var e=t._zoom;e.gesture.slide&&t._previousIndex!==t._activeIndex&&(c(e.gesture.image,\"translate3d(0,0,0) scale(1)\"),c(e.gesture.imageWrap,\"translate3d(0,0,0)\"),e.gesture.slide=e.gesture.image=e.gesture.imageWrap=void 0,e.scale=e.currentScale=1)}(t)});if(i.push(function(){u.unsubscribe()}),t.zoomToggle){var h=t.ionSlideDoubleTap.subscribe(function(){!function(t,e){var n=t._zoom,i=t.originalEvent;if(n.gesture.slide||(n.gesture.slide=t.clickedSlide?t.clickedSlide:t._slides[t._activeIndex],n.gesture.image=n.gesture.slide.querySelector(\"img, svg, canvas, ion-img\"),n.gesture.imageWrap=n.gesture.image&&n.gesture.image.closest(\".\"+_t.zoomContainer)),n.gesture.imageWrap){var r,o,s,a,l,u,h,d,_,v,y,m,g,b;if(void 0===n.image.touchesStart.x&&i?(r=\"touchend\"===i.type?i.changedTouches[0].pageX:i.pageX,o=\"touchend\"===i.type?i.changedTouches[0].pageY:i.pageY):(r=n.image.touchesStart.x,o=n.image.touchesStart.y),n.scale&&1!==n.scale)n.scale=n.currentScale=1,p(n.gesture.imageWrap,300),c(n.gesture.imageWrap,\"translate3d(0,0,0)\"),p(n.gesture.image,300),c(n.gesture.image,\"translate3d(0,0,0) scale(1)\"),n.gesture.slide=void 0;else{if(n.scale=n.currentScale=parseInt(n.gesture.imageWrap.getAttribute(\"data-swiper-zoom\")||t.zoomMax,10),i){g=n.gesture.slide.offsetWidth,b=n.gesture.slide.offsetHeight;var w=f(n.gesture.slide,e);s=w.left+g/2-r,a=w.top+b/2-o,h=n.gesture.image.offsetWidth*n.scale,d=n.gesture.image.offsetHeight*n.scale,y=-(_=Math.min(g/2-h/2,0)),m=-(v=Math.min(b/2-d/2,0)),u=a*n.scale,(l=s*n.scale)<_&&(l=_),l>y&&(l=y),u<v&&(u=v),u>m&&(u=m)}else l=0,u=0;p(n.gesture.imageWrap,300),c(n.gesture.imageWrap,\"translate3d(\"+l+\"px, \"+u+\"px,0)\"),p(n.gesture.image,300),c(n.gesture.image,\"translate3d(0,0,0) scale(\"+n.scale+\")\")}}}(t,e)});i.push(function(){h.unsubscribe()})}}function N(t){t._zoom.unRegs.forEach(function(t){t()}),t._zoom.unRegs.length=0}function V(t,e){var n=t.autoplay,i=t._slides[t._activeIndex];i.hasAttribute(\"data-swiper-autoplay\")&&(n=i.getAttribute(\"data-swiper-autoplay\")||t.autoplay),t._autoplayTimeoutId=e.timeout(function(){t._zone.run(function(){t.loop?(U(t,e),W(t,e,!0,void 0,!0),t.ionSlideAutoplay.emit(t)):t._isEnd?t.autoplayStopOnLast?F(t):(q(t,e,0),t.ionSlideAutoplay.emit(t)):(W(t,e,!0,void 0,!0),t.ionSlideAutoplay.emit(t))})},n)}function L(t,e){return void 0===t._autoplayTimeoutId&&(!(!t.autoplay||t._autoplaying)&&(t._autoplaying=!0,t._zone.run(function(){t.ionSlideAutoplayStart.emit(t)}),void V(t,e)))}function F(t){t._autoplayTimeoutId&&(t._autoplayTimeoutId&&clearTimeout(t._autoplayTimeoutId),t._autoplaying=!1,t._autoplayTimeoutId=void 0,t._zone.run(function(){t.ionSlideAutoplayStop.emit(t)}))}function B(t,e,n){t._autoplayPaused||(t._autoplayTimeoutId&&clearTimeout(t._autoplayTimeoutId),t._autoplayPaused=!0,0===n?(t._autoplayPaused=!1,V(t,e)):e.transitionEnd(t._wrapper,function(){t&&(t._autoplayPaused=!1,t._autoplaying?V(t,e):F(t))}))}function z(t){var e,n=[],i=0;if(\"auto\"!==t.slidesPerView&&t.slidesPerView>1)for(e=0;e<Math.ceil(t.slidesPerView);e++){var r=t._activeIndex+e;if(r>t._slides.length)break;n.push(t._slides[r])}else n.push(t._slides[t._activeIndex]);for(e=0;e<n.length;e++)if(void 0!==n[e]){var o=n[e].offsetHeight;i=o>i?o:i}i&&(t._wrapper.style.height=i+\"px\")}function H(t,e){var n,i,r=t.container;if(n=void 0!==t.width?t.width:r.clientWidth,i=void 0!==t.renderedHeight?t.renderedHeight:r.clientHeight,!(0===n&&_(t)||0===i&&!_(t))){var o=e.getElementComputedStyle(r);n=n-parseInt(o.paddingLeft,10)-parseInt(o.paddingRight,10),i=i-parseInt(o.paddingTop,10)-parseInt(o.paddingBottom,10),t.renderedWidth=n,t.renderedHeight=i,t._renderedSize=_(t)?n:i}}function Y(t,e){t._slides=t._wrapper.querySelectorAll(\".\"+_t.slide),t._snapGrid=[],t._slidesGrid=[],t._slidesSizesGrid=[];var n,o=t.spaceBetween,s=-t.slidesOffsetBefore,a=0,l=0;if(void 0!==t._renderedSize){\"string\"==typeof o&&o.indexOf(\"%\")>=0&&(o=parseFloat(o.replace(\"%\",\"\"))/100*t._renderedSize),t._virtualSize=-o,t._rtl?r(t._slides,{marginLeft:\"\",marginTop:\"\"}):r(t._slides,{marginRight:\"\",marginBottom:\"\"});var u;t.slidesPerColumn>1&&(u=Math.floor(t._slides.length/t.slidesPerColumn)===t._slides.length/t.slidesPerColumn?t._slides.length:Math.ceil(t._slides.length/t.slidesPerColumn)*t.slidesPerColumn,\"auto\"!==t.slidesPerView&&\"row\"===t.slidesPerColumnFill&&(u=Math.max(u,t.slidesPerView*t.slidesPerColumn)));var c,p=t.slidesPerColumn,h=u/p,f=h-(t.slidesPerColumn*h-t._slides.length);for(n=0;n<t._slides.length;n++){c=0;var v=t._slides[n];if(t.slidesPerColumn>1){var y,m,g;\"column\"===t.slidesPerColumnFill?(g=n-(m=Math.floor(n/p))*p,(m>f||m===f&&g===p-1)&&++g>=p&&(g=0,m++),r(v,{\"-webkit-box-ordinal-group\":y=m+g*u/p,\"-moz-box-ordinal-group\":y,\"-ms-flex-order\":y,\"-webkit-order\":y,order:y})):m=n-(g=Math.floor(n/h))*h;var b=0!==g&&t.spaceBetween&&t.spaceBetween+\"px\",w={};_(t)?w.marginTop=b:w.marginLeft=b,r(v,w),v.setAttribute(\"data-swiper-column\",m),v.setAttribute(\"data-swiper-row\",g)}if(\"none\"!==v.style.display){if(\"auto\"===t.slidesPerView){var C=e.getElementComputedStyle(v);c=_(t)?v.offsetWidth+parseFloat(C.marginRight)+parseFloat(C.marginLeft):v.offsetHeight+parseFloat(C.marginTop)+parseFloat(C.marginBottom),t.roundLengths&&(c=i(c))}else c=(t._renderedSize-(t.slidesPerView-1)*o)/t.slidesPerView,t.roundLengths&&(c=i(c)),_(t)?t._slides[n].style.width=c+\"px\":t._slides[n].style.height=c+\"px\";t._slides[n].swiperSlideSize=c,t._slidesSizesGrid.push(c),t.centeredSlides?(s=s+c/2+a/2+o,0===n&&(s=s-t._renderedSize/2-o),Math.abs(s)<.001&&(s=0),l%t.slidesPerGroup==0&&t._snapGrid.push(s),t._slidesGrid.push(s)):(l%t.slidesPerGroup==0&&t._snapGrid.push(s),t._slidesGrid.push(s),s=s+c+o),t._virtualSize+=c+o,a=c,l++}}t._virtualSize=Math.max(t._virtualSize,t._renderedSize)+t.slidesOffsetAfter;var O;if(!t._rtl||\"slide\"!==t.effect&&\"coverflow\"!==t.effect||r(t._wrapper,{width:t._virtualSize+t.spaceBetween+\"px\"}),t.setWrapperSize&&(_(t)?r(t._wrapper,{width:t._virtualSize+t.spaceBetween+\"px\"}):r(t._wrapper,{height:t._virtualSize+t.spaceBetween+\"px\"})),t.slidesPerColumn>1&&(t._virtualSize=(c+t.spaceBetween)*u,t._virtualSize=Math.ceil(t._virtualSize/t.slidesPerColumn)-t.spaceBetween,_(t)?r(t._wrapper,{width:t._virtualSize+t.spaceBetween+\"px\"}):r(t._wrapper,{height:t._virtualSize+t.spaceBetween+\"px\"}),t.centeredSlides)){for(O=[],n=0;n<t._snapGrid.length;n++)t._snapGrid[n]<t._virtualSize+t._snapGrid[0]&&O.push(t._snapGrid[n]);t._snapGrid=O}if(!t.centeredSlides){for(O=[],n=0;n<t._snapGrid.length;n++)t._snapGrid[n]<=t._virtualSize-t._renderedSize&&O.push(t._snapGrid[n]);t._snapGrid=O,Math.floor(t._virtualSize-t._renderedSize)-Math.floor(t._snapGrid[t._snapGrid.length-1])>1&&t._snapGrid.push(t._virtualSize-t._renderedSize)}0===t._snapGrid.length&&(t._snapGrid=[0]),0!==t.spaceBetween&&(_(t)?t._rtl?r(t._slides,{marginLeft:o+\"px\"}):r(t._slides,{marginRight:o+\"px\"}):r(t._slides,{marginBottom:o+\"px\"})),t.watchSlidesProgress&&d(t)}}function U(t,e){var n;t._activeIndex<t.loopedSlides?(n=t._slides.length-3*t.loopedSlides+t._activeIndex,q(t,e,n+=t.loopedSlides,0,!1,!0)):(\"auto\"===t.slidesPerView&&t._activeIndex>=2*t.loopedSlides||t._activeIndex>t._slides.length-2*t.slidesPerView)&&(n=-t._slides.length+t._activeIndex+t.loopedSlides,q(t,e,n+=t.loopedSlides,0,!1,!0))}function q(t,e,n,i,r,o){void 0===r&&(r=!0),void 0===n&&(n=0),n<0&&(n=0),t._snapIndex=Math.floor(n/t.slidesPerGroup),t._snapIndex>=t._snapGrid.length&&(t._snapIndex=t._snapGrid.length-1);var s=-t._snapGrid[t._snapIndex];return t.autoplay&&t._autoplaying&&(o||!t.autoplayDisableOnInteraction?B(t,e,i):F(t)),w(t,s),!(!t._allowSwipeToNext&&s<t._translate&&s<y(t))&&(!(!t._allowSwipeToPrev&&s>t._translate&&s>m(t)&&(t._activeIndex||0)!==n)&&(void 0===i&&(i=t.speed),t._previousIndex=t._activeIndex||0,t._activeIndex=n,T(t),t._rtl&&-s===t._translate||!t._rtl&&s===t._translate?(t.autoHeight&&z(t),E(t),\"slide\"!==t.effect&&k(t,e,s),!1):(E(t),Z(t,r),0===i?(k(t,e,s),A(t,e,0),G(t,e,r)):(k(t,e,s),A(t,e,i),t._animating||(t._animating=!0,e.transitionEnd(t._wrapper,function(){t&&G(t,e,r)}))),!0)))}function Z(t,e){void 0===e&&(e=!0),t.autoHeight&&z(t),e&&t._zone.run(function(){t.ionSlideTransitionStart.emit(t),t._activeIndex!==t._previousIndex&&(t.ionSlideWillChange.emit(t),t._activeIndex>t._previousIndex?t.ionSlideNextStart.emit(t):t.ionSlidePrevStart.emit(t))})}function G(t,e,n){void 0===n&&(n=!0),t._animating=!1,A(t,e,0),n&&t._zone.run(function(){t.ionSlideTransitionEnd.emit(t),t._activeIndex!==t._previousIndex&&(t.ionSlideDidChange.emit(t),t._activeIndex>t._previousIndex?t.ionSlideNextEnd.emit(t):t.ionSlidePrevEnd.emit(t))})}function W(t,e,n,i,r){if(t.loop)return!t._animating&&(U(t,e),q(t,e,t._activeIndex+t.slidesPerGroup,i,n,r));var o=t._activeIndex+t.slidesPerGroup;return o<t._slides.length&&q(t,e,o,i,n,r)}function X(t,e,n,i,r){if(t.loop)return!t._animating&&(U(t,e),q(t,e,t._activeIndex-1,i,n,r));return t._activeIndex-1>=0&&q(t,e,t._activeIndex-1,i,n,r)}function $(t,e){var n=t.target;if(!n.matches(e))if(\"string\"==typeof e)n=n.closest(e);else if(e.nodeType){for(var i=n.parentElement;i;)if(i===e)return e;return}return n}function K(t,e,n){if(n.originalEvent&&(n=n.originalEvent),t.originalEvent=n,(ct=\"touchstart\"===n.type)||!(\"which\"in n)||3!==n.which)if(t.noSwiping&&$(n,\".\"+_t.noSwiping))t._allowClick=!0;else if(!t.swipeHandler||$(n,t.swipeHandler)){var i=t._touches.currentX=\"touchstart\"===n.type?n.targetTouches[0].pageX:n.pageX,r=t._touches.currentY=\"touchstart\"===n.type?n.targetTouches[0].pageY:n.pageY;if(!(e.is(\"ios\")&&t.iOSEdgeSwipeDetection&&i<=t.iOSEdgeSwipeThreshold)){if(tt=!0,et=!1,nt=!0,rt=void 0,pt=void 0,t._touches.startX=i,t._touches.startY=r,it=Date.now(),t._allowClick=!0,H(t,e),t.swipeDirection=void 0,t.threshold>0&&(at=!1),\"touchstart\"!==n.type){var o=!0;v(n.target)&&(o=!1),e.focusOutActiveElement(),o&&n.preventDefault()}t.ionSlideTouchStart.emit(n)}}}function Q(t,e,n){if(n.originalEvent&&(n=n.originalEvent),t.originalEvent=n,!ct||\"mousemove\"!==n.type){if(n.preventedByNestedSwiper)return t._touches.startX=\"touchmove\"===n.type?n.targetTouches[0].pageX:n.pageX,void(t._touches.startY=\"touchmove\"===n.type?n.targetTouches[0].pageY:n.pageY);if(t.onlyExternal)return t._allowClick=!1,void(tt&&(t._touches.startX=t._touches.currentX=\"touchmove\"===n.type?n.targetTouches[0].pageX:n.pageX,t._touches.startY=t._touches.currentY=\"touchmove\"===n.type?n.targetTouches[0].pageY:n.pageY,it=Date.now()));if(ct&&t.touchReleaseOnEdges&&!t.loop)if(_(t)){if(t._touches.currentX<t._touches.startX&&t._translate<=m(t)||t._touches.currentX>t._touches.startX&&t._translate>=y(t))return}else if(t._touches.currentY<t._touches.startY&&t._translate<=m(t)||t._touches.currentY>t._touches.startY&&t._translate>=y(t))return;var i=e.getActiveElement();if(ct&&i&&n.target===i&&v(n.target))return et=!0,void(t._allowClick=!1);if(!(n.targetTouches&&n.targetTouches.length>1)){if(t._touches.currentX=\"touchmove\"===n.type?n.targetTouches[0].pageX:n.pageX,t._touches.currentY=\"touchmove\"===n.type?n.targetTouches[0].pageY:n.pageY,void 0===rt){var r;_(t)&&t._touches.currentY===t._touches.startY||!_(t)&&t._touches.currentX===t._touches.startX?rt=!1:(r=180*Math.atan2(Math.abs(t._touches.currentY-t._touches.startY),Math.abs(t._touches.currentX-t._touches.startX))/Math.PI,rt=_(t)?r>t.touchAngle:90-r>t.touchAngle)}if(tt)if(rt)tt=!1;else{t._allowClick=!1,t.ionSlideDrag.emit(t),n.preventDefault(),t.touchMoveStopPropagation&&n.stopPropagation(),et||(t.loop&&U(t,e),st=function(t,e,n){return void 0===n&&(n=_(t)?\"x\":\"y\"),P(t,e,t._wrapper,n)}(t,e),A(t,e,0),t._animating&&h(e,t._wrapper),t.autoplay&&t._autoplaying&&(t.autoplayDisableOnInteraction?F(t):B(t,e)),ut=!1),et=!0;var o=t._touches.diff=_(t)?t._touches.currentX-t._touches.startX:t._touches.currentY-t._touches.startY;o*=t.touchRatio,t._rtl&&(o=-o),t.swipeDirection=o>0?\"prev\":\"next\",ot=o+st;var s=!0;if(o>0&&ot>y(t)?(s=!1,t.resistance&&(ot=y(t)-1+Math.pow(-y(t)+st+o,t.resistanceRatio))):o<0&&ot<m(t)&&(s=!1,t.resistance&&(ot=m(t)+1-Math.pow(m(t)-st-o,t.resistanceRatio))),s&&(n.preventedByNestedSwiper=!0),!t._allowSwipeToNext&&\"next\"===t.swipeDirection&&ot<st&&(ot=st),!t._allowSwipeToPrev&&\"prev\"===t.swipeDirection&&ot>st&&(ot=st),t.threshold>0){if(!(Math.abs(o)>t.threshold||at))return void(ot=st);if(!at)return at=!0,t._touches.startX=t._touches.currentX,t._touches.startY=t._touches.currentY,ot=st,void(t._touches.diff=_(t)?t._touches.currentX-t._touches.startX:t._touches.currentY-t._touches.startY)}t.followFinger&&((t.freeMode||t.watchSlidesProgress)&&x(t),t.freeMode&&(0===Ct.length&&Ct.push({position:t._touches[_(t)?\"startX\":\"startY\"],time:it}),Ct.push({position:t._touches[_(t)?\"currentX\":\"currentY\"],time:(new Date).getTime()})),w(t,ot),k(t,e,ot))}}}}function J(t,e,n){if(n.originalEvent&&(n=n.originalEvent),t.originalEvent=n,nt&&t.ionSlideTouchEnd.emit(n),nt=!1,tt){var i=Date.now(),r=i-it;if(t._allowClick&&(!function(t,e,n){var i=$(n,\".\"+_t.slide),r=-1;if(i)for(var o=0;o<t._slides.length;o++)if(t._slides[o]===i){r=o;break}if(!(i&&r>-1))return t.clickedSlide=void 0,void(t.clickedIndex=void 0);if(t.clickedSlide=i,t.clickedIndex=r,t.slideToClickedSlide&&void 0!==t.clickedIndex&&t.clickedIndex!==t._activeIndex){var s,l=t.clickedIndex,u=\"auto\"===t.slidesPerView?function(t){var e,n,i=1;if(t.centeredSlides){var r,o=t._slides[t._activeIndex].swiperSlideSize;for(e=t._activeIndex+1;e<t._slides.length;e++)t._slides[e]&&!r&&(i++,(o+=t._slides[e].swiperSlideSize)>t._renderedSize&&(r=!0));for(n=t._activeIndex-1;n>=0;n--)t._slides[n]&&!r&&(i++,(o+=t._slides[n].swiperSlideSize)>t._renderedSize&&(r=!0))}else for(e=t._activeIndex+1;e<t._slides.length;e++)t._slidesGrid[e]-t._slidesGrid[t._activeIndex]<t._renderedSize&&i++;return i}(t):t.slidesPerView;if(t.loop){if(t._animating)return;s=parseInt(t.clickedSlide.getAttribute(\"data-swiper-slide-index\"),10),t.centeredSlides?l<t.loopedSlides-u/2||l>t._slides.length-t.loopedSlides+u/2?(U(t,e),l=a(t._wrapper.querySelector(\".\"+_t.slide+'[data-swiper-slide-index=\"'+s+'\"]:not(.'+_t.slideDuplicate+\")\")),e.timeout(function(){q(t,e,l)})):q(t,e,l):l>t._slides.length-u?(U(t,e),l=a(t._wrapper.querySelector(\".\"+_t.slide+'[data-swiper-slide-index=\"'+s+'\"]:not(.'+_t.slideDuplicate+\")\")),e.timeout(function(){q(t,e,l)})):q(t,e,l)}else q(t,e,l)}}(t,e,n),t._zone.run(function(){t.ionSlideTap.emit(t),r<300&&i-wt>300&&(lt&&e.cancelTimeout(lt),lt=e.timeout(function(){t&&t.paginationHide&&t._paginationContainer&&!n.target.classList.contains(_t.bullet)&&t._paginationContainer.classList.toggle(_t.paginationHidden)},300)),r<300&&i-wt<300&&(lt&&clearTimeout(lt),t.ionSlideDoubleTap.emit(t))})),wt=Date.now(),e.timeout(function(){t&&(t._allowClick=!0)}),tt&&et&&t.swipeDirection&&0!==t._touches.diff&&ot!==st){tt=et=!1;var o;if(o=t.followFinger?t._rtl?t._translate:-t._translate:-ot,t.freeMode){if(o<-y(t))return void q(t,e,t._activeIndex);if(o>-m(t))return void(t._slides.length<t._snapGrid.length?q(t,e,t._snapGrid.length-1):q(t,e,t._slides.length-1));if(t.freeModeMomentum){if(Ct.length>1){var s=Ct.pop(),l=Ct.pop(),u=s.time-l.time;t.velocity=(s.position-l.position)/u,t.velocity=t.velocity/2,Math.abs(t.velocity)<t.freeModeMinimumVelocity&&(t.velocity=0),(u>150||(new Date).getTime()-s.time>300)&&(t.velocity=0)}else t.velocity=0;t.velocity=t.velocity*t.freeModeMomentumVelocityRatio,Ct.length=0;var c=1e3*t.freeModeMomentumRatio,p=t._translate+t.velocity*c;t._rtl&&(p=-p);var h,f=!1,d=20*Math.abs(t.velocity)*t.freeModeMomentumBounceRatio;if(p<m(t))t.freeModeMomentumBounce?(p+m(t)<-d&&(p=m(t)-d),h=m(t),f=!0,ut=!0):p=m(t);else if(p>y(t))t.freeModeMomentumBounce?(p-y(t)>d&&(p=y(t)+d),h=y(t),f=!0,ut=!0):p=y(t);else if(t.freeModeSticky){var _,v=0;for(v=0;v<t._snapGrid.length;v+=1)if(t._snapGrid[v]>-p){_=v;break}p=Math.abs(t._snapGrid[_]-p)<Math.abs(t._snapGrid[_-1]-p)||\"next\"===t.swipeDirection?t._snapGrid[_]:t._snapGrid[_-1],t._rtl||(p=-p)}if(0!==t.velocity)c=t._rtl?Math.abs((-p-t._translate)/t.velocity):Math.abs((p-t._translate)/t.velocity);else if(t.freeModeSticky)return void function(t,e,n,i){q(t,e,t._activeIndex,i,n,!0)}(t,e);t.freeModeMomentumBounce&&f?(w(t,h),A(t,e,c),k(t,e,p),Z(t),t._animating=!0,e.transitionEnd(t._wrapper,function(){t&&ut&&(A(t,e,t.speed),k(t,e,h),e.transitionEnd(t._wrapper,function(){t&&G(t,e)}))})):t.velocity?(w(t,p),A(t,e,c),k(t,e,p),Z(t),t._animating||(t._animating=!0,e.transitionEnd(t._wrapper,function(){t&&G(t,e)}))):w(t,p),x(t)}(!t.freeModeMomentum||r>=t.longSwipesMs)&&(w(t),x(t))}else{for(var g=0,b=t._slidesSizesGrid[0],C=0;C<t._slidesGrid.length;C+=t.slidesPerGroup)void 0!==t._slidesGrid[C+t.slidesPerGroup]?o>=t._slidesGrid[C]&&o<t._slidesGrid[C+t.slidesPerGroup]&&(g=C,b=t._slidesGrid[C+t.slidesPerGroup]-t._slidesGrid[C]):o>=t._slidesGrid[C]&&(g=C,b=t._slidesGrid[t._slidesGrid.length-1]-t._slidesGrid[t._slidesGrid.length-2]);var O=(o-t._slidesGrid[g])/b;if(r>t.longSwipesMs){if(!t.longSwipes)return void q(t,e,t._activeIndex);\"next\"===t.swipeDirection&&(O>=t.longSwipesRatio?q(t,e,g+t.slidesPerGroup):q(t,e,g)),\"prev\"===t.swipeDirection&&(O>1-t.longSwipesRatio?q(t,e,g+t.slidesPerGroup):q(t,e,g))}else{if(!t.shortSwipes)return void q(t,e,t._activeIndex);\"next\"===t.swipeDirection&&q(t,e,g+t.slidesPerGroup),\"prev\"===t.swipeDirection&&q(t,e,g)}}}else tt=et=!1}}var tt,et,nt,it,rt,ot,st,at,lt,ut,ct,pt,ht,ft=n(0),dt=(n(1),[\"INPUT\",\"SELECT\",\"TEXTAREA\",\"BUTTON\",\"VIDEO\"]),_t={noSwiping:\"swiper-no-swiping\",containerModifier:\"swiper-container-\",slide:\"swiper-slide\",slideActive:\"swiper-slide-active\",slideDuplicateActive:\"swiper-slide-duplicate-active\",slideVisible:\"swiper-slide-visible\",slideDuplicate:\"swiper-slide-duplicate\",slideNext:\"swiper-slide-next\",slideDuplicateNext:\"swiper-slide-duplicate-next\",slidePrev:\"swiper-slide-prev\",slideDuplicatePrev:\"swiper-slide-duplicate-prev\",wrapper:\"swiper-wrapper\",bullet:\"swiper-pagination-bullet\",bulletActive:\"swiper-pagination-bullet-active\",buttonDisabled:\"swiper-button-disabled\",paginationCurrent:\"swiper-pagination-current\",paginationTotal:\"swiper-pagination-total\",paginationHidden:\"swiper-pagination-hidden\",paginationProgressbar:\"swiper-pagination-progressbar\",paginationClickable:\"swiper-pagination-clickable\",paginationModifier:\"swiper-pagination-\",lazyLoading:\"swiper-lazy\",lazyStatusLoading:\"swiper-lazy-loading\",lazyStatusLoaded:\"swiper-lazy-loaded\",lazyPreloader:\"swiper-lazy-preloader\",notification:\"swiper-notification\",preloader:\"preloader\",zoomContainer:\"swiper-zoom-container\"},vt={LinearSpline:function(t,e,n,i){this.x=n,this.y=i,this.lastIndex=n.length-1;var r,o;this.interpolate=function(t){return t?(o=s(this.x,t),r=o-1,(t-this.x[r])*(this.y[o]-this.y[r])/(this.x[o]-this.x[r])+this.y[r]):0};var s=function(){var t,e,n;return function(i,r){for(e=-1,t=i.length;t-e>1;)i[n=t+e>>1]<=r?e=n:t=n;return t}}()},getInterpolateFunction:function(t,e,n){t._spline||(t._spline=t.loop?new vt.LinearSpline(t,e,t._slidesGrid,n._slidesGrid):new vt.LinearSpline(t,e,t._snapGrid,n._snapGrid))},setTranslate:function(t,e,n,i,r){function o(i){n=i._rtl&&_(i)?-t._translate:t._translate,\"slide\"===t.controlBy&&(vt.getInterpolateFunction(t,e,i),a=-t._spline.interpolate(-n)),a&&\"container\"!==t.controlBy||(s=(m(i)-y(i))/(m(t)-y(t)),a=(n-y(t))*s+y(i)),t.controlInverse&&(a=m(i)-a),w(i,a),r(i,e,a,!1,t),x(i)}var s,a,l=t.control;if(Array.isArray(l))for(var u=0;u<l.length;u++)l[u]!==i&&o(l[u]);else i!==l&&o(l)},setTransition:function(t,e,n,i,r){function o(i){r(i,e,n,t),0!==n&&(Z(i),e.transitionEnd(i._wrapper,function(){a&&(i.loop&&\"slide\"===t.controlBy&&U(i,e),G(i,e))}))}var s,a=t.control;if(Array.isArray(a))for(s=0;s<a.length;s++)a[s]!==i&&o(a[s]);else i!==a&&o(a)}},yt=n(185),mt={fade:{setTranslate:function(t){for(var e=0;e<t._slides.length;e++){var n=t._slides[e],i=-n.swiperSlideOffset;t.virtualTranslate||(i-=t._translate);var r=0;_(t)||(r=i,i=0);var o=t.fade.crossFade?Math.max(1-Math.abs(n.progress),0):1+Math.min(Math.max(n.progress,-1),0);n.style.opacity=o,c(n,\"translate3d(\"+i+\"px, \"+r+\"px, 0px)\")}},setTransition:function(t,e,n){for(var i=t._slides,r=0;r<i.length;r++)p(i[r],n);if(t.virtualTranslate&&0!==n)for(var o=!1,s=0;s<i.length;s++)e.transitionEnd(i[s],function(){!o&&t&&(o=!0,t._animating=!1,h(e,t._wrapper))})}},flip:{setTranslate:function(t,e){for(var n=0;n<t._slides.length;n++){var i=t._slides[n],r=i.progress;t.flip.limitRotation&&(r=Math.max(Math.min(i.progress,1),-1));var o=-180*r,s=0,a=-i.swiperSlideOffset,l=0;if(_(t)?t._rtl&&(o=-o):(l=a,a=0,s=-o,o=0),i.style.zIndex=-Math.abs(Math.round(r))+t._slides.length,t.flip.slideShadows){var u=i.querySelector(_(t)?\".swiper-slide-shadow-left\":\".swiper-slide-shadow-top\"),p=i.querySelector(_(t)?\".swiper-slide-shadow-right\":\".swiper-slide-shadow-bottom\");u||((u=e.doc().createElement(\"div\")).className=\"swiper-slide-shadow-\"+(_(t)?\"left\":\"top\"),i.appendChild(u)),p||((p=e.doc().createElement(\"div\")).className=\"swiper-slide-shadow-\"+(_(t)?\"right\":\"bottom\"),i.appendChild(p)),u&&(u.style.opacity=Math.max(-r,0)),p&&(p.style.opacity=Math.max(r,0))}c(i,\"translate3d(\"+a+\"px, \"+l+\"px, 0px) rotateX(\"+s+\"deg) rotateY(\"+o+\"deg)\")}},setTransition:function(t,e,n){for(var i=0;i<t._slides.length;i++){var r=t._slides[i];p(r,n),u(r,\".swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left\",function(t){p(t,n)})}if(t.virtualTranslate&&0!==n){var o=!1;e.transitionEnd(t._slides[t._activeIndex],function(n){!o&&t&&n.target.classList.contains(_t.slideActive)&&(o=!0,t._animating=!1,h(e,t._wrapper))})}}},cube:{setTranslate:function(t,e){var n,i=0;t.cube.shadow&&(_(t)?((n=t._wrapper.querySelector(\".swiper-cube-shadow\"))||((n=e.doc().createElement(\"div\")).className=\"swiper-cube-shadow\",t._wrapper.appendChild(n)),n.style.height=t.renderedWidth+\"px\"):(n=t.container.querySelector(\".swiper-cube-shadow\"))||((n=e.doc().createElement(\"div\")).className=\"swiper-cube-shadow\",t._wrapper.appendChild(n)));for(var r=0;r<t._slides.length;r++){var o=t._slides[r],s=90*r,a=Math.floor(s/360);t._rtl&&(s=-s,a=Math.floor(-s/360));var l=Math.max(Math.min(o.progress,1),-1),u=0,p=0,h=0;r%4==0?(u=4*-a*t._renderedSize,h=0):(r-1)%4==0?(u=0,h=4*-a*t._renderedSize):(r-2)%4==0?(u=t._renderedSize+4*a*t._renderedSize,h=t._renderedSize):(r-3)%4==0&&(u=-t._renderedSize,h=3*t._renderedSize+4*t._renderedSize*a),t._rtl&&(u=-u),_(t)||(p=u,u=0);var f=\"rotateX(\"+(_(t)?0:-s)+\"deg) rotateY(\"+(_(t)?s:0)+\"deg) translate3d(\"+u+\"px, \"+p+\"px, \"+h+\"px)\";if(l<=1&&l>-1&&(i=90*r+90*l,t._rtl&&(i=90*-r-90*l)),c(o,f),t.cube.slideShadows){var d=o.querySelector(_(t)?\".swiper-slide-shadow-left\":\".swiper-slide-shadow-top\"),v=o.querySelector(_(t)?\".swiper-slide-shadow-right\":\".swiper-slide-shadow-bottom\");d||((d=e.doc().createElement(\"div\")).className=\"swiper-slide-shadow-\"+(_(t)?\"left\":\"top\"),o.appendChild(d)),v||((v=e.doc().createElement(\"div\")).className=\"swiper-slide-shadow-\"+(_(t)?\"right\":\"bottom\"),o.appendChild(v)),d&&(d.style.opacity=Math.max(-l,0)),v&&(v.style.opacity=Math.max(l,0))}}if(t._wrapper.style.transformOrigin=t._wrapper.style.webkitTransformOrigin=\"50% 50% -\"+t._renderedSize/2+\"px\",t.cube.shadow)if(_(t))c(n,\"translate3d(0px, \"+(t.renderedWidth/2+t.cube.shadowOffset)+\"px, \"+-t.renderedWidth/2+\"px) rotateX(90deg) rotateZ(0deg) scale(\"+t.cube.shadowScale+\")\");else{var y=Math.abs(i)-90*Math.floor(Math.abs(i)/90),m=1.5-(Math.sin(2*y*Math.PI/360)/2+Math.cos(2*y*Math.PI/360)/2),g=t.cube.shadowScale/m;c(n,\"scale3d(\"+t.cube.shadowScale+\", 1, \"+g+\") translate3d(0px, \"+(t.renderedHeight/2+t.cube.shadowOffset)+\"px, \"+-t.renderedHeight/2/g+\"px) rotateX(-90deg)\")}var b=Object(yt.e)(e)||Object(yt.d)(e)?-t._renderedSize/2:0;c(t._wrapper,\"translate3d(0px,0,\"+b+\"px) rotateX(\"+(_(t)?0:i)+\"deg) rotateY(\"+(_(t)?-i:0)+\"deg)\")},setTransition:function(t,e,n){for(var i=0;i<t._slides.length;i++){var r=t._slides[i];p(r,n),u(r,\".swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left\",function(t){p(t,n)})}t.cube.shadow&&!_(t)&&u(t.container,\".swiper-cube-shadow\",function(t){p(t,n)})}},coverflow:{setTranslate:function(t,e){for(var n=t._translate,i=_(t)?t.renderedWidth/2-n:t.renderedHeight/2-n,r=_(t)?t.coverflow.rotate:-t.coverflow.rotate,o=t.coverflow.depth,s=0,a=t._slides.length;s<a;s++){var l=t._slides[s],u=t._slidesSizesGrid[s],p=(i-l.swiperSlideOffset-u/2)/u*t.coverflow.modifier,h=_(t)?r*p:0,f=_(t)?0:r*p,d=-o*Math.abs(p),v=_(t)?0:t.coverflow.stretch*p,y=_(t)?t.coverflow.stretch*p:0;Math.abs(y)<.001&&(y=0),Math.abs(v)<.001&&(v=0),Math.abs(d)<.001&&(d=0),Math.abs(h)<.001&&(h=0),Math.abs(f)<.001&&(f=0);if(c(l,\"translate3d(\"+y+\"px,\"+v+\"px,\"+d+\"px)  rotateX(\"+f+\"deg) rotateY(\"+h+\"deg)\"),l.style.zIndex=1-Math.abs(Math.round(p)),t.coverflow.slideShadows){var m=l.querySelector(_(t)?\".swiper-slide-shadow-left\":\".swiper-slide-shadow-top\"),g=l.querySelector(_(t)?\".swiper-slide-shadow-right\":\".swiper-slide-shadow-bottom\");m||((m=e.doc().createElement(\"div\")).className=\"swiper-slide-shadow-\"+(_(t)?\"left\":\"top\"),l.appendChild(m)),g||((g=e.doc().createElement(\"div\")).className=\"swiper-slide-shadow-\"+(_(t)?\"right\":\"bottom\"),l.appendChild(g)),m&&(m.style.opacity=p>0?p:0),g&&(g.style.opacity=-p>0?-p:0)}}},setTransition:function(t,e,n){for(var i=0;i<t._slides.length;i++){var r=t._slides[i];p(r,n),u(r,\".swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left\",function(t){p(t,n)})}}}},gt=n(29),bt=n(18),wt=Date.now(),Ct=[];n(2),n(4);n.d(e,\"a\",function(){return St});var Ot=this&&this.__extends||function(){var t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n])};return function(e,n){function i(){this.constructor=e}t(e,n),e.prototype=null===n?Object.create(n):(i.prototype=n.prototype,new i)}}(),St=function(t){function e(e,n,i,r,o,s){var a=t.call(this,e,o,s,\"slides\")||this;if(a._plt=n,a._control=null,a._effectName=\"slide\",a._direction=\"horizontal\",a._initialSlide=0,a._isLoop=!1,a._pager=!1,a._paginationType=\"bullets\",a.paginationBulletRender=null,a._isParallax=!1,a._speedMs=300,a._isZoom=!1,a.virtualTranslate=!1,a.roundLengths=!1,a._spaceBetween=0,a._slidesPerView=1,a._centeredSlides=!1,a.slidesPerColumn=1,a.slidesPerColumnFill=\"column\",a.slidesPerGroup=1,a.slidesOffsetBefore=0,a.slidesOffsetAfter=0,a.autoplayDisableOnInteraction=!0,a.autoplayStopOnLast=!1,a.freeMode=!1,a.freeModeMomentum=!0,a.freeModeMomentumRatio=1,a.freeModeMomentumBounce=!0,a.freeModeMomentumBounceRatio=1,a.freeModeMomentumVelocityRatio=1,a.freeModeSticky=!1,a.freeModeMinimumVelocity=.02,a.autoHeight=!1,a.setWrapperSize=!1,a.zoomMax=3,a.zoomMin=1,a.zoomToggle=!0,a.touchRatio=1,a.touchAngle=45,a.simulateTouch=!0,a.shortSwipes=!0,a.longSwipes=!0,a.longSwipesRatio=.5,a.longSwipesMs=300,a.followFinger=!0,a.onlyExternal=!1,a.threshold=0,a.touchMoveStopPropagation=!0,a.touchReleaseOnEdges=!1,a.iOSEdgeSwipeDetection=!1,a.iOSEdgeSwipeThreshold=20,a.paginationClickable=!1,a.paginationHide=!1,a.resistance=!0,a.resistanceRatio=.85,a.watchSlidesProgress=!1,a.watchSlidesVisibility=!1,a.preventClicks=!0,a.preventClicksPropagation=!0,a.slideToClickedSlide=!1,a.loopAdditionalSlides=0,a.loopedSlides=null,a.swipeHandler=null,a.noSwiping=!0,a.runCallbacksOnInit=!0,a.controlBy=\"slide\",a.controlInverse=!1,a.keyboardControl=!0,a.coverflow={rotate:50,stretch:0,depth:100,modifier:1,slideShadows:!0},a.flip={slideShadows:!0,limitRotation:!0},a.cube={slideShadows:!0,shadow:!0,shadowOffset:20,shadowScale:.94},a.fade={crossFade:!1},a.prevSlideMessage=\"Previous slide\",a.nextSlideMessage=\"Next slide\",a.firstSlideMessage=\"This is the first slide\",a.lastSlideMessage=\"This is the last slide\",a.ionSlideWillChange=new ft.l,a.ionSlideDidChange=new ft.l,a.ionSlideDrag=new ft.l,a.ionSlideReachStart=new ft.l,a.ionSlideReachEnd=new ft.l,a.ionSlideAutoplay=new ft.l,a.ionSlideAutoplayStart=new ft.l,a.ionSlideAutoplayStop=new ft.l,a.ionSlideNextStart=new ft.l,a.ionSlidePrevStart=new ft.l,a.ionSlideNextEnd=new ft.l,a.ionSlidePrevEnd=new ft.l,a.ionSlideTap=new ft.l,a.ionSlideDoubleTap=new ft.l,a.ionSlideProgress=new ft.l,a.ionSlideTransitionStart=new ft.l,a.ionSlideTransitionEnd=new ft.l,a.ionSlideTouchStart=new ft.l,a.ionSlideTouchEnd=new ft.l,a._unregs=[],a._allowSwipeToNext=!0,a._allowSwipeToPrev=!0,a._zone=i,a.id=++Et,a.slideId=\"slides-\"+a.id,a.setElementClass(a.slideId,!0),r)var l=r.readReady.subscribe(function(){l.unsubscribe(),a._initSlides()});return a}return Ot(e,t),Object.defineProperty(e.prototype,\"autoplay\",{get:function(){return this._autoplayMs},set:function(t){this._autoplayMs=parseInt(t,10)},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,\"control\",{get:function(){return this._control},set:function(t){(t instanceof e||Array.isArray(t))&&(this._control=t)},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,\"effect\",{get:function(){return this._effectName},set:function(t){mt[t]&&(this._effectName=t)},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,\"direction\",{get:function(){return this._direction},set:function(t){\"horizontal\"!==t&&\"vertical\"!==t||(this._direction=t)},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,\"initialSlide\",{get:function(){return this._initialSlide},set:function(t){this._initialSlide=parseInt(t,10)},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,\"loop\",{get:function(){return this._isLoop},set:function(t){this._isLoop=Object(bt.o)(t)},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,\"pager\",{get:function(){return this._pager},set:function(t){this._pager=Object(bt.o)(t)},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,\"dir\",{set:function(t){this._rtl=\"rtl\"===t.toLowerCase()},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,\"paginationType\",{get:function(){return this._paginationType},set:function(t){\"bullets\"!==t&&\"fraction\"!==t&&\"progress\"!==t||(this._paginationType=t)},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,\"parallax\",{get:function(){return this._isParallax},set:function(t){this._isParallax=Object(bt.o)(t)},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,\"speed\",{get:function(){return this._speedMs},set:function(t){this._speedMs=parseInt(t,10)},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,\"zoom\",{get:function(){return this._isZoom},set:function(t){this._isZoom=Object(bt.o)(t)},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,\"spaceBetween\",{get:function(){return this._spaceBetween},set:function(t){this._spaceBetween=parseInt(t,10)},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,\"slidesPerView\",{get:function(){return this._slidesPerView},set:function(t){this._slidesPerView=\"auto\"===t?\"auto\":parseFloat(t)},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,\"centeredSlides\",{get:function(){return this._centeredSlides},set:function(t){this._centeredSlides=Object(bt.o)(t)},enumerable:!0,configurable:!0}),e.prototype._initSlides=function(){if(!this._init){var t=this,e=t._plt;t.container=this.getNativeElement().children[0],function(t,e){if(t._classNames=[],t.container){t.container.swiper=t;var n=_t.containerModifier;t._classNames.push(n+t.direction),t.freeMode&&t._classNames.push(n+\"free-mode\"),t.autoHeight&&t._classNames.push(n+\"autoheight\"),(t.parallax||t.watchSlidesVisibility)&&(t.watchSlidesProgress=!0),t.touchReleaseOnEdges&&(t.resistanceRatio=0);var i=t.effect;[\"cube\",\"coverflow\",\"flip\"].indexOf(i)>=0&&(t.watchSlidesProgress=!0,t._classNames.push(n+\"3d\")),\"slide\"!==i&&t._classNames.push(n+i),\"cube\"===i&&(t.resistanceRatio=0,t.slidesPerView=1,t.slidesPerColumn=1,t.slidesPerGroup=1,t.centeredSlides=!1,t.spaceBetween=0,t.virtualTranslate=!0,t.setWrapperSize=!1),\"fade\"!==i&&\"flip\"!==i||(t.slidesPerView=1,t.slidesPerColumn=1,t.slidesPerGroup=1,t.watchSlidesProgress=!0,t.spaceBetween=0,t.setWrapperSize=!1,t.virtualTranslate=!0),t._wrapper=t.container.querySelector(\".\"+_t.wrapper),t.paginationType&&(t._paginationContainer=t.container.querySelector(\".swiper-pagination\"),\"bullets\"===t.paginationType&&t._paginationContainer.classList.add(_t.paginationModifier+\"clickable\"),t._paginationContainer.classList.add(_t.paginationModifier+t.paginationType)),t._rtl=_(t)&&(\"rtl\"===t.container.dir.toLowerCase()||\"rtl\"===t.container.style.direction),t._rtl&&t._classNames.push(n+\"rtl\"),t.slidesPerColumn>1&&t._classNames.push(n+\"multirow\"),e.is(\"android\")&&t._classNames.push(n+\"android\"),t._classNames.forEach(function(e){t.container.classList.add(e)}),t._translate=0,t.progress=0,t.velocity=0,t._autoplayTimeoutId=void 0,t._autoplaying=!1,t._autoplayPaused=!1,t._allowClick=!0,t._animating=!1,t._touches={startX:0,startY:0,currentX:0,currentY:0,diff:0},t.loop&&function(t){u(t._wrapper,\".\"+_t.slide+\".\"+_t.slideDuplicate,function(t){t.parentElement.removeChild(t)});var e=t._wrapper.querySelectorAll(\".\"+_t.slide);\"auto\"!==t.slidesPerView||t.loopedSlides||(t.loopedSlides=e.length),t.loopedSlides=parseInt(t.loopedSlides||t.slidesPerView,10),t.loopedSlides=t.loopedSlides+t.loopAdditionalSlides,t.loopedSlides>e.length&&(t.loopedSlides=e.length);for(var n=[],i=[],r=0;r<e.length;r++){var s=e[r];r<t.loopedSlides&&i.push(s),r<e.length&&r>=e.length-t.loopedSlides&&n.push(s),s.setAttribute(\"data-swiper-slide-index\",r)}for(r=0;r<i.length;r++){var a=i[r].cloneNode(!0);o(a,_t.slideDuplicate),t._wrapper.appendChild(a)}for(r=n.length-1;r>=0;r--){var l=n[r].cloneNode(!0);o(l,_t.slideDuplicate),t._wrapper.insertBefore(l,t._wrapper.firstElementChild)}}(t),H(t,e),Y(t,e),S(t),\"slide\"!==i&&mt[i]&&(t.loop||w(t),mt[i].setTranslate(t,e)),t.loop?q(t,e,t.initialSlide+t.loopedSlides,0,t.runCallbacksOnInit):(q(t,e,t.initialSlide,0,t.runCallbacksOnInit),0===t.initialSlide&&b(t)),t.autoplay&&L(t,e)}}(t,e),this._unregs.push(function(t,e){var n=e.win(),i=e.doc();t._supportTouch=!!(\"ontouchstart\"in n||n.DocumentTouch&&i instanceof n.DocumentTouch),t._touchEventsDesktop={start:\"mousedown\",move:\"mousemove\",end:\"mouseup\"},n.navigator.pointerEnabled?t._touchEventsDesktop={start:\"pointerdown\",move:\"pointermove\",end:\"pointerup\"}:n.navigator.msPointerEnabled&&(t._touchEventsDesktop={start:\"MSPointerDown\",move:\"MSPointerMove\",end:\"MSPointerUp\"}),t._touchEvents={start:t._supportTouch||!t.simulateTouch?\"touchstart\":t._touchEventsDesktop.start,move:t._supportTouch||!t.simulateTouch?\"touchmove\":t._touchEventsDesktop.move,end:t._supportTouch||!t.simulateTouch?\"touchend\":t._touchEventsDesktop.end},(n.navigator.pointerEnabled||n.navigator.msPointerEnabled)&&(\"container\"===t.touchEventsTarget?t.container:t._wrapper).classList.add(\"swiper-wp8-\"+t.direction);var r=[],o=\"container\"===t.touchEventsTarget?t.container:t._wrapper;t._supportTouch&&(e.registerListener(o,t._touchEvents.start,function(n){K(t,e,n)},{passive:!0,zone:!1},r),e.registerListener(o,t._touchEvents.move,function(n){Q(t,e,n)},{zone:!1},r),e.registerListener(o,t._touchEvents.end,function(n){J(t,e,n)},{passive:!0,zone:!1},r)),(t.simulateTouch&&!e.is(\"ios\")&&!e.is(\"android\")||t.simulateTouch&&!t._supportTouch&&e.is(\"ios\")||e.getQueryParam(\"ionicPlatform\"))&&(e.registerListener(o,\"mousedown\",function(n){K(t,e,n)},{zone:!1},r),e.registerListener(o,\"mousemove\",function(n){Q(t,e,n)},{zone:!1},r),e.registerListener(o,\"mouseup\",function(n){J(t,e,n)},{zone:!1},r));var s=e.resize.subscribe(function(){return function(t,e,n){ht&&(e.cancelTimeout(ht),ht=null),ht=e.timeout(function(){return function(t,e,n){ht=null;var i=t._allowSwipeToPrev,r=t._allowSwipeToNext;if(t._allowSwipeToPrev=t._allowSwipeToNext=!0,H(t,e),Y(t,e),(\"auto\"===t.slidesPerView||t.freeMode||n)&&S(t),t._spline&&(t._spline=void 0),t.freeMode){var o=Math.min(Math.max(t._translate,m(t)),y(t));k(t,e,o),x(t),E(t),t.autoHeight&&z(t)}else E(t),(\"auto\"===t.slidesPerView||t.slidesPerView>1)&&t._isEnd&&!t.centeredSlides?q(t,e,t._slides.length-1,0,!1,!0):q(t,e,t._activeIndex,0,!1,!0);t._allowSwipeToPrev=i,t._allowSwipeToNext=r}(t,e,n)},200)}(t,e,!1)});return t.nextButton&&e.registerListener(t.nextButton,\"click\",function(n){!function(t,e,i){n.preventDefault(),(!t._isEnd||t.loop)&&W(t,e)}(t,e)},{zone:!1},r),t.prevButton&&e.registerListener(t.prevButton,\"click\",function(n){!function(t,e,i){n.preventDefault(),(!t._isBeginning||t.loop)&&X(t,e)}(t,e)},{zone:!1},r),t.paginationType&&e.registerListener(t._paginationContainer,\"click\",function(n){!function(t,e,n){var i=n.target.getAttribute(\"data-slide-index\");if(i){var r=parseInt(i,10);n.preventDefault(),t.loop&&(r+=t.loopedSlides),q(t,e,r)}}(t,e,n)},{zone:!1},r),(t.preventClicks||t.preventClicksPropagation)&&e.registerListener(o,\"click\",function(e){!function(t,e){t._allowClick||(t.preventClicks&&e.preventDefault(),t.preventClicksPropagation&&t._animating&&(e.stopPropagation(),e.stopImmediatePropagation()))}(t,e)},{zone:!1,capture:!0},r),function(){s.unsubscribe(),r.forEach(function(t){t()}),r=null}}(t,e)),this.zoom&&this._unregs.push(function(t,e){return t._supportGestures=\"ongesturestart\"in e.win(),t._zoom={scale:1,currentScale:1,isScaling:!1,gesture:{slide:void 0,slideWidth:void 0,slideHeight:void 0,image:void 0,imageWrap:void 0,zoomMax:t.zoomMax},image:{isTouched:void 0,isMoved:void 0,currentX:void 0,currentY:void 0,minX:void 0,minY:void 0,maxX:void 0,maxY:void 0,width:void 0,height:void 0,startX:void 0,startY:void 0,touchesStart:{},touchesCurrent:{}},velocity:{x:void 0,y:void 0,prevPositionX:void 0,prevPositionY:void 0,prevTime:void 0},unRegs:[]},R(t,e),function(){N(t)}}(t,e)),this.keyboardControl&&t.enableKeyboardControl(!0),this._init=!0}},e.prototype.ngAfterContentInit=function(){var t=this;this._plt.timeout(function(){t._initSlides()},300)},e.prototype.update=function(t){var e=this;void 0===t&&(t=300),this._init&&(this._plt.cancelTimeout(this._tmr),this._tmr=this._plt.timeout(function(){!function(t,e,n){function i(){r=Math.min(Math.max(t._translate,m(t)),y(t)),k(t,e,r),x(t),E(t)}if(t){H(t,e),Y(t,e),w(t),S(t),E(t),t.zoom&&R(t,e);var r;n?(t._spline&&(t._spline=void 0),t.freeMode?(i(),t.autoHeight&&z(t)):((\"auto\"===t.slidesPerView||t.slidesPerView>1)&&t._isEnd&&!t.centeredSlides?q(t,e,t._slides.length-1,0,!1,!0):q(t,e,t._activeIndex,0,!1,!0))||i()):t.autoHeight&&z(t)}}(e,e._plt),e.length()>10&&(e.paginationType=void 0)},t))},e.prototype.resize=function(){},e.prototype.slideTo=function(t,e,n){q(this,this._plt,t,e,n)},e.prototype.slideNext=function(t,e){W(this,this._plt,e,t,!0)},e.prototype.slidePrev=function(t,e){X(this,this._plt,e,t,!0)},e.prototype.getActiveIndex=function(){return this._activeIndex},e.prototype.getPreviousIndex=function(){return this._previousIndex},e.prototype.length=function(){return this._slides.length},e.prototype.isEnd=function(){return this._isEnd},e.prototype.isBeginning=function(){return this._isBeginning},e.prototype.startAutoplay=function(){L(this,this._plt)},e.prototype.stopAutoplay=function(){F(this)},e.prototype.lockSwipeToNext=function(t){this._allowSwipeToNext=!t},e.prototype.lockSwipeToPrev=function(t){this._allowSwipeToPrev=!t},e.prototype.lockSwipes=function(t){this._allowSwipeToNext=this._allowSwipeToPrev=!t},e.prototype.enableKeyboardControl=function(t){!function(t,e,n){n&&!t._keyboardUnReg?t._keyboardUnReg=e.registerListener(e.doc(),\"keydown\",function(n){!function(t,e,n){var i=e.win(),r=n.keyCode||n.charCode;if(!t._allowSwipeToNext&&(_(t)&&39===r||!_(t)&&40===r))return!1;if(!t._allowSwipeToPrev&&(_(t)&&37===r||!_(t)&&38===r))return!1;if(!(n.shiftKey||n.altKey||n.ctrlKey||n.metaKey)){var o=e.getActiveElement();if(!o||!o.nodeName||\"input\"!==o.nodeName.toLowerCase()&&\"textarea\"!==o.nodeName.toLowerCase()){if(37===r||39===r||38===r||40===r){var s=!1;if(t.container.closest(\".\"+_t.slide)&&!t.container.closest(\".\"+_t.slideActive))return;var a={left:i.pageXOffset,top:i.pageYOffset},l=e.width(),u=e.height(),c=f(t.container,e);t._rtl&&(c.left=c.left-t.container.scrollLeft);for(var p=[[c.left,c.top],[c.left+t.renderedWidth,c.top],[c.left,c.top+t.renderedHeight],[c.left+t.renderedWidth,c.top+t.renderedHeight]],h=0;h<p.length;h++){var d=p[h];d[0]>=a.left&&d[0]<=a.left+l&&d[1]>=a.top&&d[1]<=a.top+u&&(s=!0)}if(!s)return}_(t)?(37!==r&&39!==r||(n.preventDefault?n.preventDefault():n.returnValue=!1),(39===r&&!t._rtl||37===r&&t._rtl)&&W(t,e),(37===r&&!t._rtl||39===r&&t._rtl)&&X(t,e)):(38!==r&&40!==r||(n.preventDefault?n.preventDefault():n.returnValue=!1),40===r&&W(t,e),38===r&&X(t,e))}}}(t,e,n)},{zone:!1}):!n&&t._keyboardUnReg&&t._keyboardUnReg()}(this,this._plt,t)},e.prototype.ngOnDestroy=function(){this._init=!1,this._unregs.forEach(function(t){t()}),this._unregs.length=0,function(t){F(t),t.loop&&function(t){if(u(t._wrapper,\".\"+_t.slide+\".\"+_t.slideDuplicate,function(t){t.parentElement.removeChild(t)}),t._slides)for(var e=0;e<t._slides.length;e++)t._slides[e].removeAttribute(\"data-swiper-slide-index\")}(t),function(t){if(t.container&&t._wrapper){if(t.container&&(s(t.container,t._classNames),t.container.removeAttribute(\"style\")),t._wrapper.removeAttribute(\"style\"),t._slides&&t._slides.length){s(t._slides,[_t.slideVisible,_t.slideActive,_t.slideNext,_t.slidePrev]);for(var e=0;e<t._slides.length;e++){var n=t._slides[e];n.removeAttribute(\"style\"),n.removeAttribute(\"data-swiper-column\"),n.removeAttribute(\"data-swiper-row\")}}s(t._bullets,_t.bulletActive),s(t.prevButton,_t.buttonDisabled),s(t.nextButton,_t.buttonDisabled)}}(t)}(this),this.enableKeyboardControl(!1)},e}(gt.a),Et=-1},function(t,e,n){\"use strict\";var i=n(3).__extends,r=n(42),o=n(58),s=n(86),a=n(214),l=n(215),u=n(124),c=function(t){function e(e){t.call(this,e),this.destination=e}return i(e,t),e}(o.Subscriber);e.SubjectSubscriber=c;var p=function(t){function e(){t.call(this),this.observers=[],this.closed=!1,this.isStopped=!1,this.hasError=!1,this.thrownError=null}return i(e,t),e.prototype[u.rxSubscriber]=function(){return new c(this)},e.prototype.lift=function(t){var e=new h(this,this);return e.operator=t,e},e.prototype.next=function(t){if(this.closed)throw new a.ObjectUnsubscribedError;if(!this.isStopped)for(var e=this.observers,n=e.length,i=e.slice(),r=0;r<n;r++)i[r].next(t)},e.prototype.error=function(t){if(this.closed)throw new a.ObjectUnsubscribedError;this.hasError=!0,this.thrownError=t,this.isStopped=!0;for(var e=this.observers,n=e.length,i=e.slice(),r=0;r<n;r++)i[r].error(t);this.observers.length=0},e.prototype.complete=function(){if(this.closed)throw new a.ObjectUnsubscribedError;this.isStopped=!0;for(var t=this.observers,e=t.length,n=t.slice(),i=0;i<e;i++)n[i].complete();this.observers.length=0},e.prototype.unsubscribe=function(){this.isStopped=!0,this.closed=!0,this.observers=null},e.prototype._trySubscribe=function(e){if(this.closed)throw new a.ObjectUnsubscribedError;return t.prototype._trySubscribe.call(this,e)},e.prototype._subscribe=function(t){if(this.closed)throw new a.ObjectUnsubscribedError;return this.hasError?(t.error(this.thrownError),s.Subscription.EMPTY):this.isStopped?(t.complete(),s.Subscription.EMPTY):(this.observers.push(t),new l.SubjectSubscription(this,t))},e.prototype.asObservable=function(){var t=new r.Observable;return t.source=this,t},e.create=function(t,e){return new h(t,e)},e}(r.Observable);e.Subject=p;var h=function(t){function e(e,n){t.call(this),this.destination=e,this.source=n}return i(e,t),e.prototype.next=function(t){var e=this.destination;e&&e.next&&e.next(t)},e.prototype.error=function(t){var e=this.destination;e&&e.error&&this.destination.error(t)},e.prototype.complete=function(){var t=this.destination;t&&t.complete&&this.destination.complete()},e.prototype._subscribe=function(t){return this.source?this.source.subscribe(t):s.Subscription.EMPTY},e}(p);e.AnonymousSubject=h},function(t,e,n){\"use strict\";n.d(e,\"a\",function(){return a}),n.d(e,\"b\",function(){return l});var i=n(0),r=(n(5),n(1),n(29)),o=(n(127),n(2),n(76)),s=this&&this.__extends||function(){var t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n])};return function(e,n){function i(){this.constructor=e}t(e,n),e.prototype=null===n?Object.create(n):(i.prototype=n.prototype,new i)}}(),a=new i.n(\"USERROOT\"),l=function(t){function e(e,n,i,r,o,s,a){var l=t.call(this,o,i,r,\"app-root\")||this;return l._userCmp=e,l._cfr=n,l._plt=s,a._appRoot=l,l._stopScrollPlugin=window.IonicStopScroll,l}return s(e,t),e.prototype.ngOnInit=function(){var t=this,e=this._cfr.resolveComponentFactory(this._userCmp),n=this._viewport.createComponent(e);this._renderer.setElementClass(n.location.nativeElement,\"app-root\",!0),n.changeDetectorRef.detectChanges(),this.setElementClass(this._config.get(\"mode\"),!0);var i=this._plt.versions();this._plt.platforms().forEach(function(e){var n=\"platform-\"+e;t.setElementClass(n,!0);var r=i[e];r&&(t.setElementClass(n+=r.major,!0),t.setElementClass(n+\"_\"+r.minor,!0))}),this._config.getBoolean(\"hoverCSS\",!0)&&this.setElementClass(\"enable-hover\",!0),this._plt.prepareReady()},e.prototype._getPortal=function(t){return t===o.b?this._loadingPortal:t===o.d?this._toastPortal:t===o.c?this._modalPortal:this._overlayPortal},e.prototype._getActivePortal=function(){var t=this._overlayPortal,e=this._modalPortal,n=e.length()>0,i=t.length()>0;if(!n&&!i)return null;if(n&&i){return t.getActive().getZIndex()>e.getActive().getZIndex()?t:e}return n?e:i?t:void 0},e.prototype._disableScroll=function(t){var e=this;if(t)this.stopScroll().then(function(){e._tmr=e._plt.timeout(function(){e.setElementClass(\"disable-scroll\",!0)},32)});else{var n=this._stopScrollPlugin;n&&n.cancel&&n.cancel(),clearTimeout(this._tmr),this.setElementClass(\"disable-scroll\",!1)}},e.prototype.stopScroll=function(){var t=this;return this._stopScrollPlugin?new Promise(function(e){t._stopScrollPlugin.stop(function(){return e(!0)})}):Promise.resolve(!1)},e}(r.a)},function(t,e,n){\"use strict\";n.d(e,\"a\",function(){return i}),n.d(e,\"c\",function(){return r}),n.d(e,\"b\",function(){return o}),n.d(e,\"d\",function(){return s});var i=1,r=2,o=3,s=4},function(t,e,n){\"use strict\";function i(t,e){var n=Object.assign({},t);return n.type=e.getType(),n.navId=e.name||e.id,n.secondaryId=t.secondaryId,n}n.d(e,\"b\",function(){return s}),e.c=function(t){for(t=(t=t.replace(p,\"-\")).charAt(0).toLowerCase()+t.substring(1).replace(/[A-Z]/g,function(t){return\"-\"+t.toLowerCase()});t.indexOf(\"--\")>-1;)t=t.replace(\"--\",\"-\");return\"-\"===t.charAt(0)&&(t=t.substring(1)),\"-\"===t.substring(t.length-1)&&(t=t.substring(0,t.length-1)),encodeURIComponent(t)},n.d(e,\"a\",function(){return h}),e.d=function(t,e){return new s(t,e)};var r=n(0),o=n(18),s=function(){function t(t,e){this._app=t,this.links=e&&Object(o.e)(e.links)?c(e.links):[]}return t.prototype.parse=function(t){return\"/\"===t.charAt(0)&&(t=t.substr(1)),t=t.split(\"?\")[0].split(\"#\")[0],function(t,e,n){return function(t,e){for(var n=[],r=0;r<e.length;r++)for(var o=function(t,e){if(t.navId){var n=e.getNavByIdOrName(t.navId);return n?[n]:[]}return e.getRootNavs()}(e[r].navGroup,t),s=0,a=e[r].segments;s<a.length;s++){var l=a[s];if(1===o.length)n.push(i(l,o[0])),o=o[0].getActiveChildNavs();else{if(!(o.length>1))break;n.push(i(l,o[o.length-1])),o=o[o.length-1].getActiveChildNavs()}}return n}(t,function(t,e){return function(t,e){for(var n=[],i=new Set,r=0,o=t;r<o.length;r++){for(var s=o[r],u=[],c=s.segmentPieces.concat([]),p=c.length;p>=0;p--){for(var h=!1,f=0;f<p;f++){for(var d=p-f-1,_=p,v=c.slice(d,_),y=0,m=e;y<m.length;y++){var g=m[y];if(!i.has(g.name)){var b=function(t,e){if(e.segmentPartsLen!==t.length)return null;for(var n=0;n<t.length;n++)if(!a(t[n],e.segmentParts[n]))return null;return{id:t.join(\"/\"),name:e.name,component:e.component,loadChildren:e.loadChildren,data:l(t,e),defaultHistory:e.defaultHistory}}(v,g);if(b){p=d+1,i.add(g.name),h=!0,u.push(b);for(var w=d;w<_;w++)c[w]=null;break}}}if(h)break}!h&&c[p-1]&&u.push({id:null,name:null,secondaryId:c[p-1],component:null,loadChildren:null,data:null,defaultHistory:null})}for(var C=u.reverse(),p=0;p<C.length;p++)C[p].secondaryId&&!C[p].id&&p+1<=C.length-1&&(C[p+1].secondaryId=C[p].secondaryId,C[p]=null);var O=u.filter(function(t){return!!t});s.secondaryId&&u.length&&(O[0].secondaryId=s.secondaryId),n.push({navGroup:s,segments:O})}return n}(function(t){for(var e=t.split(\"/\"),n=[],i=0;i<e.length;i++)0===i||\"nav\"!==e[i]&&\"tabs\"!==e[i]||n.push(i);n.push(e.length);for(var r=[],o=0,s=[],i=0;i<e.length;i++)i>=n[o]&&(r.push(s.join(\"/\")),s=[],o++),s.push(e[i]);return r.push(s.join(\"/\")),r}(t).map(function(t){var e=t.split(\"/\");return\"nav\"===e[0]?{type:\"nav\",navId:e[1],niceId:e[1],secondaryId:null,segmentPieces:e.splice(2)}:\"tabs\"===e[0]?{type:\"tabs\",navId:e[1],niceId:e[1],secondaryId:e[2],segmentPieces:e.splice(3)}:{type:null,navId:null,niceId:null,secondaryId:null,segmentPieces:e}}),e)}(e,n))}(this._app,t,this.links)},t.prototype.createSegmentFromName=function(t,e){var n=this.getLinkFromName(e);return n?this._createSegment(this._app,t,n,null):null},t.prototype.getLinkFromName=function(t){return this.links.find(function(e){return e.component===t||e.name===t})},t.prototype.serialize=function(t){if(!t||!t.length)return\"/\";return t.map(function(t){return\"tabs\"===t.type?t.requiresExplicitNavPrefix?\"/\"+t.type+\"/\"+t.navId+\"/\"+t.secondaryId+\"/\"+t.id:\"/\"+t.secondaryId+\"/\"+t.id:t.requiresExplicitNavPrefix?\"/\"+t.type+\"/\"+t.navId+\"/\"+t.id:\"/\"+t.id}).join(\"\")},t.prototype.serializeComponent=function(t,e,n){if(e){var i=u(this.links,e,n);if(i)return this._createSegment(this._app,t,i,n)}return null},t.prototype._createSegment=function(t,e,n,i){var r=n.segmentParts;if(Object(o.l)(i)){r=r.slice();var s=Object.keys(i),a=s.length;if(a)for(var l=0;l<r.length;l++)if(\":\"===r[l].charAt(0))for(var u=0;u<a;u++)if(r[l]===\":\"+s[u]){r[l]=encodeURIComponent(i[s[u]]);break}}var c=!0;return c=e.parent?e.parent&&e.parent.getAllChildNavs().length>1:t.getRootNavById(e.id)&&t.getRootNavs().length>1,{id:r.join(\"/\"),name:n.name,component:n.component,loadChildren:n.loadChildren,data:i,defaultHistory:n.defaultHistory,navId:e.name||e.id,type:e.getType(),secondaryId:e.getSecondaryIdentifier(),requiresExplicitNavPrefix:c}},t}(),a=function(t,e){return!(!Object(o.l)(t)||!Object(o.l)(e))&&(\":\"===e.charAt(0)||t===e)},l=function(t,e){for(var n=null,i=0;i<e.segmentPartsLen;i++)\":\"===e.segmentParts[i].charAt(0)&&((n=n||{})[e.segmentParts[i].substring(1)]=decodeURIComponent(t[i]));return n},u=function(t,e,n){for(var i=null,r=-1,s=0;s<t.length;s++){var a=t[s];if(a.component===e){var l=0;if(n)for(var u=Object.keys(n),c=0;c<u.length;c++)Object(o.l)(a.dataKeys[u[c]])&&l++;else if(a.dataLen)continue;l>=r&&(i=a,r=l)}}return i},c=function(t){for(var e=0,n=t.length;e<n;e++){var i=t[e];Object(o.f)(i.segment)&&(i.segment=i.name),i.dataKeys={},i.segmentParts=i.segment.split(\"/\"),i.segmentPartsLen=i.segmentParts.length,i.staticLen=i.dataLen=0;for(var r=!0,s=0;s<i.segmentPartsLen;s++)\":\"===i.segmentParts[s].charAt(0)?(i.dataLen++,r=!1,i.dataKeys[i.segmentParts[s].substring(1)]=!0):r&&i.staticLen++}return t.sort(function(t,e){return t.segmentPartsLen>e.segmentPartsLen?-1:t.segmentPartsLen<e.segmentPartsLen?1:t.staticLen>e.staticLen?-1:t.staticLen<e.staticLen?1:t.dataLen<e.dataLen?-1:t.dataLen>e.dataLen?1:0})},p=/\\s+|\\?|\\!|\\$|\\,|\\.|\\+|\\\"|\\'|\\*|\\^|\\||\\/|\\\\|\\[|\\]|#|%|`|>|<|;|:|@|&|=/g,h=new r.n(\"USERLINKS\")},function(t,e,n){\"use strict\";var i=n(0),r=n(18),o=(n(1),n(6),n(40),n(2),n(35)),s=n(51);n.d(e,\"a\",function(){return a});var a=function(){function t(t,e,n,r,o,a,l){this._plt=e,this.elementRef=n,this._zone=r,this._haptic=o,this.y=0,this.pos=[],this.startY=null,this.ionChange=new i.l,this.events=new s.a(a),this.rotateFactor=t.getNumber(\"pickerRotateFactor\",0),this.scaleFactor=t.getNumber(\"pickerScaleFactor\",1),this.decelerateFunc=this.decelerate.bind(this),this.debouncer=l.debouncer()}return t.prototype.ngAfterViewInit=function(){var t=this.colEle.nativeElement;this.colHeight=t.clientHeight,this.optHeight=t.firstElementChild?t.firstElementChild.clientHeight:0,this.events.pointerEvents({element:this.elementRef.nativeElement,pointerDown:this.pointerStart.bind(this),pointerMove:this.pointerMove.bind(this),pointerUp:this.pointerEnd.bind(this),capture:!0,zone:!1})},t.prototype.ngOnDestroy=function(){this._plt.cancelRaf(this.rafId),this.events.destroy()},t.prototype.pointerStart=function(t){this._haptic.gestureSelectionStart(),t.preventDefault(),this._plt.cancelRaf(this.rafId),this.startY=Object(o.f)(t).y,this.velocity=0,this.pos.length=0,this.pos.push(this.startY,Date.now());for(var e=this.col.options,n=e.length-1,i=0,r=0;r<e.length;r++)e[r].disabled||(n=Math.min(n,r),i=Math.max(i,r));return this.minY=n*this.optHeight*-1,this.maxY=i*this.optHeight*-1,!0},t.prototype.pointerMove=function(t){var e=this;t.preventDefault(),t.stopPropagation();var n=Object(o.f)(t).y;this.pos.push(n,Date.now()),this.debouncer.write(function(){if(null!==e.startY){var t=e.y+(n-e.startY);t>e.minY?(t=Math.pow(t,.8),e.bounceFrom=t):t<e.maxY?(t+=Math.pow(e.maxY-t,.9),e.bounceFrom=t):e.bounceFrom=0,e.update(t,0,!1,!1);var i=Math.max(Math.abs(Math.round(t/e.optHeight)),0);i!==e.lastTempIndex&&(e._haptic.gestureSelectionChanged(),e.lastTempIndex=i)}})},t.prototype.pointerEnd=function(t){if(t.preventDefault(),this.debouncer.cancel(),null!==this.startY)if(this.velocity=0,this.bounceFrom>0)this.update(this.minY,100,!0,!0);else if(this.bounceFrom<0)this.update(this.maxY,100,!0,!0);else{var e=Object(o.f)(t).y;this.pos.push(e,Date.now());for(var n=this.pos.length-1,i=n,s=Date.now()-100,a=n;a>0&&this.pos[a]>s;a-=2)i=a;if(i!==n){var l=(this.pos[i-1]-this.pos[n-1])/(this.pos[n]-this.pos[i])*(1e3/60);this.velocity=Object(r.a)(-60,l,60)}if(Math.abs(e-this.startY)>3){this.update(this.y+(e-this.startY),0,!0,!0)}this.startY=null,this.decelerate()}},t.prototype.decelerate=function(){var t=0;if(isNaN(this.y)||!this.optHeight)this.update(t,0,!0,!0),this._haptic.gestureSelectionEnd();else if(Math.abs(this.velocity)>0){this.velocity*=.97,this.velocity=this.velocity>0?Math.max(this.velocity,1):Math.min(this.velocity,-1),(t=Math.round(this.y-this.velocity))>this.minY?(t=this.minY,this.velocity=0):t<this.maxY&&(t=this.maxY,this.velocity=0);var e=t%this.optHeight!=0||Math.abs(this.velocity)>1;this.update(t,0,!0,!e),e&&(this.rafId=this._plt.raf(this.decelerateFunc))}else if(this.y%this.optHeight!=0){var n=Math.abs(this.y%this.optHeight);this.velocity=n>this.optHeight/2?1:-1,this._haptic.gestureSelectionEnd(),this.decelerate()}var i=Math.max(Math.abs(Math.round(t/this.optHeight)),0);i!==this.lastTempIndex&&this._haptic.gestureSelectionChanged(),this.lastTempIndex=i},t.prototype.optClick=function(t,e){this.velocity||(t.preventDefault(),t.stopPropagation(),this.setSelected(e,150))},t.prototype.setSelected=function(t,e){var n=t>-1?t*this.optHeight*-1:0;this._plt.cancelRaf(this.rafId),this.velocity=0,this.update(n,e,!0,!0)},t.prototype.update=function(t,e,n,i){t=Math.round(t);var r,o,s,a,l,u,c,p,h,f,d=this.colEle.nativeElement.children,_=d.length,v=this.col.selectedIndex=Math.min(Math.max(Math.round(-t/this.optHeight),0),_-1),y=0===e?null:e+\"ms\",m=\"scale(\"+this.scaleFactor+\")\";for(r=0;r<_;r++)o=d[r],s=this.col.options[r],a=r*this.optHeight+t,l=!0,h=\"\",0!==this.rotateFactor?(p=a*this.rotateFactor,Math.abs(p)>90?l=!1:(0,u=0,c=90,h=\"rotateX(\"+p+\"deg) \")):(0,c=0,u=a,Math.abs(u)>170&&(l=!1)),f=v===r,l?(h+=\"translate3d(0px,\"+u+\"px,\"+c+\"px) \",1===this.scaleFactor||f||(h+=m)):h=\"translate3d(-9999px,0px,0px)\",e!==s._dur&&(s._dur=e,o.style[this._plt.Css.transitionDuration]=y),h!==s._trans&&(s._trans=h,o.style[this._plt.Css.transform]=h),f!==s._selected&&(s._selected=f,f?o.classList.add(\"picker-opt-selected\"):o.classList.remove(\"picker-opt-selected\"));if(this.col.prevSelected=v,n&&(this.y=t),i)if(void 0===this.lastIndex)this.lastIndex=this.col.selectedIndex;else if(this.lastIndex!==this.col.selectedIndex){this.lastIndex=this.col.selectedIndex;var g=this.ionChange;g.observers.length>0&&this._zone.run(g.emit.bind(g,this.col.options[this.col.selectedIndex]))}},t.prototype.refresh=function(){for(var t=this.col.options.length-1,e=0,n=this.col.options,i=0;i<n.length;i++)n[i].disabled||(t=Math.min(t,i),e=Math.max(e,i));var o=Object(r.a)(t,this.col.selectedIndex,e);if(this.col.prevSelected!==o){var s=o*this.optHeight*-1;this._plt.cancelRaf(this.rafId),this.velocity=0,this.update(s,150,!0,!1)}},t}()},function(t,e,n){\"use strict\";n.d(e,\"a\",function(){return o});n(1),n(31),n(6),n(15),n(7);var i=n(87),r=(n(2),n(37),n(4),n(38),this&&this.__extends||function(){var t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n])};return function(e,n){function i(){this.constructor=e}t(e,n),e.prototype=null===n?Object.create(n):(i.prototype=n.prototype,new i)}}()),o=function(t){function e(e,n,i,r,o,s,a,l,u,c,p,h,f,d){var _=t.call(this,n,i,r,o,s,a,l,u,c,p,h,f,d)||this;return _._hasInit=!1,e&&e._setContent(_),n?n.registerChildNav(_):e&&e.getNav()?(_.parent=e.getNav(),_.parent.registerChildNav(_)):i&&!i.getRootNavById(_.id)&&i.registerRootNav(_),_}return r(e,t),Object.defineProperty(e.prototype,\"_vp\",{set:function(t){this.setViewport(t)},enumerable:!0,configurable:!0}),e.prototype.ngAfterViewInit=function(){var t=this;this._hasInit=!0;var e=this._linker.getSegmentByNavIdOrName(this.id,this.name);if(e&&(e.component||e.loadChildren))return this._linker.initViews(e).then(function(e){return t.setPages(e,null,null)});if(this._root){var n=!e;return this.push(this._root,this.rootParams,{isNavRoot:this._app.getRootNavById(this.id)===this,updateUrl:n},null)}},Object.defineProperty(e.prototype,\"root\",{get:function(){return this._root},set:function(t){this._root=t,this._hasInit&&this.setRoot(t)},enumerable:!0,configurable:!0}),e.prototype.ngOnDestroy=function(){this.destroy()},e.prototype.initPane=function(){return this._elementRef.nativeElement.hasAttribute(\"main\")},e.prototype.paneChanged=function(t){t&&this.resize()},e.prototype.goToRoot=function(t){return this.setRoot(this._root,this.rootParams,t,null)},e.prototype.getType=function(){return\"nav\"},e.prototype.getSecondaryIdentifier=function(){return null},e}(i.a)},function(t,e,n){\"use strict\";n.d(e,\"a\",function(){return l});var i=n(0),r=(n(1),n(53)),o=n(18),s=n(168),a=(n(2),this&&this.__extends||function(){var t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n])};return function(e,n){function i(){this.constructor=e}t(e,n),e.prototype=null===n?Object.create(n):(i.prototype=n.prototype,new i)}}()),l=function(t){function e(e,n,r,o,a){var l=t.call(this,e,r,o,\"searchbar\",\"\",null,null,a)||this;return l._plt=n,l._shouldBlur=!0,l._shouldAlignLeft=!0,l._isCancelVisible=!1,l._spellcheck=!1,l._autocomplete=\"off\",l._autocorrect=\"off\",l._isActive=!1,l._showCancelButton=!1,l._animated=!1,l._inputDebouncer=new s.a(0),l.cancelButtonText=\"Cancel\",l.placeholder=\"Search\",l.type=\"search\",l.ionInput=new i.l,l.ionCancel=new i.l,l.ionClear=new i.l,l.debounce=250,l}return a(e,t),Object.defineProperty(e.prototype,\"showCancelButton\",{get:function(){return this._showCancelButton},set:function(t){this._showCancelButton=Object(o.o)(t)},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,\"debounce\",{get:function(){return this._debouncer.wait},set:function(t){this._debouncer.wait=t,this._inputDebouncer.wait=t},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,\"autocomplete\",{set:function(t){this._autocomplete=\"\"===t||\"on\"===t?\"on\":this._config.get(\"autocomplete\",\"off\")},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,\"autocorrect\",{set:function(t){this._autocorrect=\"\"===t||\"on\"===t?\"on\":this._config.get(\"autocorrect\",\"off\")},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,\"spellcheck\",{set:function(t){this._spellcheck=\"\"===t||\"true\"===t||!0===t||this._config.getBoolean(\"spellcheck\",!1)},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,\"animated\",{get:function(){return this._animated},set:function(t){this._animated=Object(o.o)(t)},enumerable:!0,configurable:!0}),e.prototype.ngOnInit=function(){var t=this.showCancelButton;\"string\"==typeof t&&(this.showCancelButton=\"\"===t||\"true\"===t)},e.prototype._inputUpdated=function(){var t=this._searchbarInput.nativeElement,e=this._value;t.value!==e&&(t.value=e),this.positionElements()},e.prototype.positionElements=function(){var t=this._animated,e=this._shouldAlignLeft,n=!t||this._value&&\"\"!==this._value.toString().trim()||!0===this._isFocus;this._shouldAlignLeft=n,\"ios\"===this._mode&&(e!==n&&this.positionPlaceholder(),t&&this.positionCancelButton())},e.prototype.positionPlaceholder=function(){var t=this._searchbarInput.nativeElement,e=this._searchbarIcon.nativeElement;if(this._shouldAlignLeft)t.removeAttribute(\"style\"),e.removeAttribute(\"style\");else{var n=this._plt.doc(),i=n.createElement(\"span\");i.innerHTML=this.placeholder,n.body.appendChild(i);var r=i.offsetWidth;n.body.removeChild(i);var o=\"calc(50% - \"+r/2+\"px)\";this._plt.isRTL?t.style.paddingRight=o:t.style.paddingLeft=o;var s=\"calc(50% - \"+(r/2+30)+\"px)\";this._plt.isRTL?e.style.marginRight=s:e.style.marginLeft=s}},e.prototype.positionCancelButton=function(){var t=this._isFocus;if(t!==this._isCancelVisible){var e=this._cancelButton.nativeElement,n=e.style;if(this._isCancelVisible=t,t)this._plt.isRTL?n.marginLeft=\"0\":n.marginRight=\"0\";else{var i=e.offsetWidth;i>0&&(this._plt.isRTL?n.marginLeft=-i+\"px\":n.marginRight=-i+\"px\")}}},e.prototype.inputChanged=function(t){var e=this;this.value=t.target.value,this._inputDebouncer.debounce(function(){e.ionInput.emit(t)})},e.prototype.inputFocused=function(){this._isActive=!0,this._fireFocus(),this.positionElements()},e.prototype.inputBlurred=function(){if(!1===this._shouldBlur)return this._searchbarInput.nativeElement.focus(),void(this._shouldBlur=!0);this._fireBlur(),this.positionElements()},e.prototype.clearInput=function(t){var e=this;this.ionClear.emit(t),setTimeout(function(){var n=e._value;Object(o.l)(n)&&\"\"!==n&&(e.value=\"\",e.ionInput.emit(t))},64),this._shouldBlur=!1},e.prototype.cancelSearchbar=function(t){this.ionCancel.emit(t),this.clearInput(t),this._shouldBlur=!0,this._isActive=!1},e.prototype.setFocus=function(){this._renderer.invokeElementMethod(this._searchbarInput.nativeElement,\"focus\")},e}(r.a)},function(t,e,n){\"use strict\";n.d(e,\"a\",function(){return o});var i=n(142),r=(n(2),this&&this.__extends||function(){var t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n])};return function(e,n){function i(){this.constructor=e}t(e,n),e.prototype=null===n?Object.create(n):(i.prototype=n.prototype,new i)}}()),o=function(t){function e(e,n,i){return t.call(this,e,n,i)||this}return r(e,t),e}(i.a)},function(t,e,n){\"use strict\";n(0),n(24),n(1),n(6),n(19);var i=n(15),r=(n(40),n(18)),o=n(53),s=(n(20),n(47)),a=(n(2),n(88)),l=n(35),u=this&&this.__extends||function(){var t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n])};return function(e,n){function i(){this.constructor=e}t(e,n),e.prototype=null===n?Object.create(n):(i.prototype=n.prototype,new i)}}(),c=function(t){function e(e,n,r,o){var s=t.call(this,e,n.getNativeElement(),{threshold:0,zone:!1,domController:o,gesture:r.createGesture({name:i.k,priority:i.i})})||this;return s.toggle=n,s}return u(e,t),e.prototype.canStart=function(){return!0},e.prototype.onDragStart=function(t){t.preventDefault(),this.toggle._onDragStart(Object(l.f)(t).x)},e.prototype.onDragMove=function(t){t.preventDefault(),this.toggle._onDragMove(Object(l.f)(t).x)},e.prototype.onDragEnd=function(t){t.preventDefault(),this.toggle._onDragEnd(Object(l.f)(t).x)},e}(a.a);n.d(e,\"a\",function(){return h});var p=this&&this.__extends||function(){var t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n])};return function(e,n){function i(){this.constructor=e}t(e,n),e.prototype=null===n?Object.create(n):(i.prototype=n.prototype,new i)}}(),h=function(t){function e(e,n,i,r,o,s,a,l,u,c){var p=t.call(this,n,r,o,\"toggle\",!1,e,a,null)||this;return p._plt=i,p._haptic=s,p._gestureCtrl=l,p._domCtrl=u,p._zone=c,p._activated=!1,p}return p(e,t),Object.defineProperty(e.prototype,\"checked\",{get:function(){return this.value},set:function(t){this.value=t},enumerable:!0,configurable:!0}),e.prototype.ngAfterContentInit=function(){this._initialize(),this._gesture=new c(this._plt,this,this._gestureCtrl,this._domCtrl),this._gesture.listen()},e.prototype._inputUpdated=function(){},e.prototype._inputNormalize=function(t){return Object(r.o)(t)},e.prototype._onDragStart=function(t){var e=this;this._zone.run(function(){e._startX=t,e._fireFocus(),e._activated=!0})},e.prototype._onDragMove=function(t){var e=this;this._startX&&this._shouldToggle(t,-15)&&this._zone.run(function(){e.value=!e.value,e._startX=t,e._haptic.selection()})},e.prototype._onDragEnd=function(t){var e=this;this._startX&&this._zone.run(function(){e._shouldToggle(t,4)&&(e.value=!e.value,e._haptic.selection()),e._activated=!1,e._fireBlur(),e._startX=null})},e.prototype._shouldToggle=function(t,e){var n=!this._plt.isRTL,i=this._startX;return this._value?n&&i+e>t||!n&&i-e<t:n&&i-e<t||!n&&i+e>t},e.prototype._keyup=function(t){t.keyCode!==s.f&&t.keyCode!==s.b||(t.preventDefault(),t.stopPropagation(),this.value=!this.value)},e.prototype.ngOnDestroy=function(){t.prototype.ngOnDestroy.call(this),this._gesture&&this._gesture.destroy()},e}(o.a)},function(t,e,n){\"use strict\";n.d(e,\"a\",function(){return o});n(1);var i=n(29),r=(n(4),this&&this.__extends||function(){var t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n])};return function(e,n){function i(){this.constructor=e}t(e,n),e.prototype=null===n?Object.create(n):(i.prototype=n.prototype,new i)}}()),o=function(t){function e(e,n,i,r){var o=t.call(this,e,n,i,\"footer\")||this;return r&&r._setFooter(o),o}return r(e,t),e}(i.a)},function(t,e,n){\"use strict\";function i(t){return o._22(0,[(t()(),o.U(16777216,null,null,1,null,function(t){return o._22(0,[(t()(),o.Z(0,0,null,null,1,\"ion-icon\",[[\"class\",\"tab-button-icon\"],[\"role\",\"img\"]],[[2,\"hide\",null]],null,null,null,null)),o.Y(1,147456,null,0,s.a,[a.a,o.j,o.z],{name:[0,\"name\"],isActive:[1,\"isActive\"]},null)],function(t,e){var n=e.component;t(e,1,0,n.tab.tabIcon,n.tab.isSelected)},function(t,e){t(e,0,0,o._13(e,1)._hidden)})})),o.Y(1,16384,null,0,u.i,[o.I,o.F],{ngIf:[0,\"ngIf\"]},null),(t()(),o.U(16777216,null,null,1,null,function(t){return o._22(0,[(t()(),o.Z(0,0,null,null,1,\"span\",[[\"class\",\"tab-button-text\"]],null,null,null,null,null)),(t()(),o._20(1,null,[\"\",\"\"]))],null,function(t,e){t(e,1,0,e.component.tab.tabTitle)})})),o.Y(3,16384,null,0,u.i,[o.I,o.F],{ngIf:[0,\"ngIf\"]},null),(t()(),o.U(16777216,null,null,1,null,function(t){return o._22(0,[(t()(),o.Z(0,0,null,null,2,\"ion-badge\",[[\"class\",\"tab-badge\"]],null,null,null,null,null)),o.Y(1,16384,null,0,l.a,[a.a,o.j,o.z],{color:[0,\"color\"]},null),(t()(),o._20(2,null,[\"\",\"\"]))],function(t,e){t(e,1,0,e.component.tab.tabBadgeStyle)},function(t,e){t(e,2,0,e.component.tab.tabBadge)})})),o.Y(5,16384,null,0,u.i,[o.I,o.F],{ngIf:[0,\"ngIf\"]},null),(t()(),o.Z(6,0,null,null,0,\"div\",[[\"class\",\"button-effect\"]],null,null,null,null,null))],function(t,e){var n=e.component;t(e,1,0,n.tab.tabIcon);t(e,3,0,n.tab.tabTitle);t(e,5,0,n.tab.tabBadge)},null)}function r(t){return o._22(0,[o._18(402653184,1,{_highlight:0}),o._18(402653184,2,{_tabbar:0}),o._18(402653184,3,{portal:0}),(t()(),o.Z(3,0,[[2,0],[\"tabbar\",1]],null,4,\"div\",[[\"class\",\"tabbar\"],[\"role\",\"tablist\"]],null,null,null,null,null)),(t()(),o.U(16777216,null,null,1,null,function(t){return o._22(0,[(t()(),o.Z(0,0,null,null,1,\"a\",[[\"class\",\"tab-button\"],[\"href\",\"#\"],[\"role\",\"tab\"]],[[1,\"id\",0],[1,\"aria-controls\",0],[1,\"aria-selected\",0],[2,\"has-title\",null],[2,\"has-icon\",null],[2,\"has-title-only\",null],[2,\"icon-only\",null],[2,\"has-badge\",null],[2,\"disable-hover\",null],[2,\"tab-disabled\",null],[2,\"tab-hidden\",null]],[[null,\"ionSelect\"],[null,\"click\"]],function(t,e,n){var i=!0,r=t.component;return\"click\"===e&&(i=!1!==o._13(t,1).onClick()&&i),\"ionSelect\"===e&&(i=!1!==r.select(t.context.$implicit)&&i),i},i,p)),o.Y(1,114688,null,0,c.a,[a.a,o.j,o.z],{tab:[0,\"tab\"]},{ionSelect:\"ionSelect\"})],function(t,e){t(e,1,0,e.context.$implicit)},function(t,e){t(e,0,1,[o._13(e,1).tab._btnId,o._13(e,1).tab._tabId,o._13(e,1).tab.isSelected,o._13(e,1).hasTitle,o._13(e,1).hasIcon,o._13(e,1).hasTitleOnly,o._13(e,1).hasIconOnly,o._13(e,1).hasBadge,o._13(e,1).disHover,!o._13(e,1).tab.enabled,!o._13(e,1).tab.show])})})),o.Y(5,802816,null,0,u.h,[o.I,o.F,o.p],{ngForOf:[0,\"ngForOf\"]},null),(t()(),o.Z(6,0,null,null,1,\"div\",[[\"class\",\"tab-highlight\"]],null,null,null,null,null)),o.Y(7,16384,[[1,4]],0,h.a,[o.j,f.a],null,null),o._12(null,0),(t()(),o.Z(9,16777216,[[3,3],[\"portal\",1]],null,0,\"div\",[[\"tab-portal\",\"\"]],null,null,null,null,null))],function(t,e){t(e,5,0,e.component._tabs)},null)}var o=n(0),s=n(30),a=n(1),l=n(92),u=n(28),c=n(119),p=o.X({encapsulation:2,styles:[],data:{}}),h=n(118),f=n(6);n(38),n(46),n(7),n(4),n(5),n(2),n(31),n(9);n.d(e,\"a\",function(){return d}),e.b=r;var d=o.X({encapsulation:2,styles:[],data:{}})},function(t,e,n){\"use strict\";function i(t){return r._22(0,[r._18(402653184,1,{_vp:0}),(t()(),r.Z(1,16777216,[[1,3],[\"viewport\",1]],null,0,\"div\",[],null,null,null,null,null)),(t()(),r.Z(2,0,null,null,0,\"div\",[[\"class\",\"nav-decor\"]],null,null,null,null,null))],null,null)}n.d(e,\"a\",function(){return o}),e.b=i;var r=n(0),o=(n(55),n(46),n(1),n(2),n(15),n(37),n(31),n(6),r.X({encapsulation:2,styles:[],data:{}}))},function(t,e,n){\"use strict\";function i(t){return t.reduce(function(t,e){return t.concat(e instanceof u.UnsubscriptionError?e.errors:e)},[])}var r=n(156),o=n(157),s=n(155),a=n(195),l=n(158),u=n(196);e.Subscription=function(){function t(t){this.closed=!1,this._parent=null,this._parents=null,this._subscriptions=null,t&&(this._unsubscribe=t)}return t.prototype.unsubscribe=function(){var t,e=!1;if(!this.closed){var n=this._parent,c=this._parents,p=this._unsubscribe,h=this._subscriptions;this.closed=!0,this._parent=null,this._parents=null,this._subscriptions=null;for(var f=-1,d=c?c.length:0;n;)n.remove(this),n=++f<d&&c[f]||null;if(s.isFunction(p)){(v=a.tryCatch(p).call(this))===l.errorObject&&(e=!0,t=t||(l.errorObject.e instanceof u.UnsubscriptionError?i(l.errorObject.e.errors):[l.errorObject.e]))}if(r.isArray(h))for(f=-1,d=h.length;++f<d;){var _=h[f];if(o.isObject(_)){var v=a.tryCatch(_.unsubscribe).call(_);if(v===l.errorObject){e=!0,t=t||[];var y=l.errorObject.e;y instanceof u.UnsubscriptionError?t=t.concat(i(y.errors)):t.push(y)}}}if(e)throw new u.UnsubscriptionError(t)}},t.prototype.add=function(e){if(!e||e===t.EMPTY)return t.EMPTY;if(e===this)return this;var n=e;switch(typeof e){case\"function\":n=new t(e);case\"object\":if(n.closed||\"function\"!=typeof n.unsubscribe)return n;if(this.closed)return n.unsubscribe(),n;if(\"function\"!=typeof n._addParent){var i=n;(n=new t)._subscriptions=[i]}break;default:throw new Error(\"unrecognized teardown \"+e+\" added to Subscription.\")}return(this._subscriptions||(this._subscriptions=[])).push(n),n._addParent(this),n},t.prototype.remove=function(t){var e=this._subscriptions;if(e){var n=e.indexOf(t);-1!==n&&e.splice(n,1)}},t.prototype._addParent=function(t){var e=this._parent,n=this._parents;e&&e!==t?n?-1===n.indexOf(t)&&n.push(t):this._parents=[t]:this._parent=t},t.EMPTY=function(t){return t.closed=!0,t}(new t),t}()},function(t,e,n){\"use strict\";var i=n(0),r=n(50),o=n(18),s=n(4),a=n(29),l=n(7),u=n(33),c=n(15),p=n(128),h=this&&this.__extends||function(){var t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n])};return function(e,n){function i(){this.constructor=e}t(e,n),e.prototype=null===n?Object.create(n):(i.prototype=n.prototype,new i)}}(),f=function(t){function e(e,n,i,r){var o=t.call(this,e,e.doc().body,{direction:\"x\",edge:\"start\",maxEdgeStart:75,threshold:5,zone:!1,domController:r,gesture:i.createGesture({name:c.b,priority:c.e,disableScroll:!0})})||this;return o._nav=n,o}return h(e,t),e.prototype.canStart=function(e){return this._nav.canSwipeBack()&&t.prototype.canStart.call(this,e)},e.prototype.onSlideBeforeStart=function(t){this._nav.swipeBackStart()},e.prototype.onSlide=function(t,e){e.preventDefault(),e.stopPropagation();this._nav.swipeBackProgress(t.distance/t.max)},e.prototype.onSlideEnd=function(t,e){var n=t.velocity,i=t.distance/t.max,r=n<0,s=Math.abs(t.velocity)>.4,a=Math.abs(t.delta)<.5*Math.abs(t.max),l=!Object(o.t)(r,s,a);this._nav.swipeBackEnd(l,i,n)},e}(p.a);n.d(e,\"a\",function(){return _});var d=this&&this.__extends||function(){var t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n])};return function(e,n){function i(){this.constructor=e}t(e,n),e.prototype=null===n?Object.create(n):(i.prototype=n.prototype,new i)}}(),_=function(t){function e(e,n,r,o,s,a,l,u,c,p,h,f,d){var _=t.call(this,r,s,l)||this;return _.parent=e,_._app=n,_.config=r,_.plt=o,_._zone=a,_._cfr=u,_._gestureCtrl=c,_._trnsCtrl=p,_._linker=h,_._domCtrl=f,_._errHandler=d,_._ids=-1,_._init=!1,_._queue=[],_._trnsId=null,_._trnsTm=!1,_._views=[],_._zIndexOffset=0,_.viewDidLoad=new i.l,_.viewWillEnter=new i.l,_.viewDidEnter=new i.l,_.viewWillLeave=new i.l,_.viewDidLeave=new i.l,_.viewWillUnload=new i.l,_._sbEnabled=r.getBoolean(\"swipeBackEnabled\"),_._children=[],_.id=\"n\"+ ++v,_._destroyed=!1,_}return d(e,t),Object.defineProperty(e.prototype,\"swipeBackEnabled\",{get:function(){return this._sbEnabled},set:function(t){this._sbEnabled=Object(o.o)(t),this._swipeBackCheck()},enumerable:!0,configurable:!0}),e.prototype.push=function(t,e,n,i){return this._queueTrns({insertStart:-1,insertViews:[{page:t,params:e}],opts:n},i)},e.prototype.insert=function(t,e,n,i,r){return this._queueTrns({insertStart:t,insertViews:[{page:e,params:n}],opts:i},r)},e.prototype.insertPages=function(t,e,n,i){return this._queueTrns({insertStart:t,insertViews:e,opts:n},i)},e.prototype.pop=function(t,e){return this._queueTrns({removeStart:-1,removeCount:1,opts:t},e)},e.prototype.popTo=function(t,e,n){var i={removeStart:-1,removeCount:-1,opts:e};return Object(s.b)(t)?(i.removeView=t,i.removeStart=1):Object(o.j)(t)&&(i.removeStart=t+1),this._queueTrns(i,n)},e.prototype.popToRoot=function(t,e){return this._queueTrns({removeStart:1,removeCount:-1,opts:t},e)},e.prototype.popAll=function(){for(var t=[],e=this._views.length-1;e>=0;e--)t.push(this.pop(null));return Promise.all(t)},e.prototype.remove=function(t,e,n,i){return void 0===e&&(e=1),this._queueTrns({removeStart:t,removeCount:e,opts:n},i)},e.prototype.removeView=function(t,e,n){return this._queueTrns({removeView:t,removeStart:0,removeCount:1,opts:e},n)},e.prototype.setRoot=function(t,e,n,i){return this.setPages([{page:t,params:e}],n,i)},e.prototype.setPages=function(t,e,n){return Object(o.f)(e)&&(e={}),!0!==e.animate&&(e.animate=!1),this._queueTrns({insertStart:0,insertViews:t,removeStart:0,removeCount:-1,opts:e},n)},e.prototype._queueTrns=function(t,e){var n=new Promise(function(e,n){t.resolve=e,t.reject=n});return t.done=e,t.insertViews&&0===t.insertViews.length&&(t.insertViews=void 0),this._queue.push(t),this._nextTrns(),n},e.prototype._success=function(t,e){null!==this._queue?(this._init=!0,this._trnsId=null,this.setTransitioning(!1),this._swipeBackCheck(),this._nextTrns(),e.done&&e.done(t.hasCompleted,t.requiresTransition,t.enteringName,t.leavingName,t.direction),e.resolve(t.hasCompleted)):this._fireError(\"nav controller was destroyed\",e)},e.prototype._failed=function(t,e){null!==this._queue?(this._trnsId=null,this._queue.length=0,this.setTransitioning(!1),this._swipeBackCheck(),this._nextTrns(),this._fireError(t,e)):this._fireError(\"nav controller was destroyed\",e)},e.prototype._fireError=function(t,e){e.done&&e.done(!1,!1,t),e.reject&&!this._destroyed?e.reject(t):e.resolve(!1)},e.prototype._nextTrns=function(){var t=this;if(this.isTransitioning())return!1;var e=this._queue.shift();if(!e)return!1;var n,i;return this._startTI(e).then(function(){return t._loadLazyLoading(e)}).then(function(){if(i=t.getActive(),n=t._getEnteringView(e,i),!i&&!n)throw\"no views in the stack to be removed\";n&&n._state===r.h&&t._viewInit(n),e.requiresTransition=(e.enteringRequiresTransition||e.leavingRequiresTransition)&&n!==i}).then(function(){return t._viewTest(n,i,e)}).then(function(){return t._postViewInit(n,i,e)}).then(function(){return t._transition(n,i,e)}).then(function(n){return t._success(n,e)}).catch(function(n){return t._failed(n,e)}),!0},e.prototype._startTI=function(t){var e=this._views.length;if(Object(o.l)(t.removeView)){var n=this.indexOf(t.removeView);if(n<0)return Promise.reject(\"removeView was not found\");t.removeStart+=n}return Object(o.l)(t.removeStart)&&(t.removeStart<0&&(t.removeStart=e-1),t.removeCount<0&&(t.removeCount=e-t.removeStart),t.leavingRequiresTransition=t.removeCount>0&&t.removeStart+t.removeCount===e),t.insertViews&&((t.insertStart<0||t.insertStart>e)&&(t.insertStart=e),t.enteringRequiresTransition=t.insertStart===e),this.setTransitioning(!0),Promise.resolve()},e.prototype._loadLazyLoading=function(t){var e=this,n=t.insertViews;return n?Object(r.i)(this._linker,n).then(function(n){if(0===(n=n.filter(function(t){return null!==t})).length)throw\"invalid views to insert\";for(var i=0;i<n.length;i++){var o=n[i],s=o._nav;if(s&&s!==e)throw\"inserted view was already inserted\";if(o._state===r.f)throw\"inserted view was already destroyed\"}t.insertViews=n}):Promise.resolve()},e.prototype._getEnteringView=function(t,e){var n=t.insertViews;if(n)return n[n.length-1];var i=t.removeStart;if(Object(o.l)(i)){var r,s,a=this._views,l=i+t.removeCount;for(r=a.length-1;r>=0;r--)if(s=a[r],(r<i||r>=l)&&s!==e)return s}return null},e.prototype._postViewInit=function(t,e,n){var i,s,a,l=this,u=n.opts||{},c=n.insertViews,p=n.removeStart,h=n.removeCount;if(Object(o.l)(p)){for(a=[],s=0;s<h;s++)(i=this._views[s+p])&&i!==t&&i!==e&&a.push(i);u.direction=u.direction||r.a}if(0===this._views.length+(c?c.length:0)-(h||0)&&!this._isPortal)throw console.warn(\"You can't remove all the pages in the navigation stack. nav.pop() is probably called too many times.\",this,this.getNativeElement()),\"navigation stack needs at least one root page\";if(c){for(Object(o.l)(u.id)&&(t.id=u.id),s=0;s<c.length;s++)this._insertViewAt(i=c[s],n.insertStart+s);n.enteringRequiresTransition&&(u.direction=u.direction||r.b)}if(a&&a.length>0)for(this._zone.run(function(){for(s=0;s<a.length;s++)l._willLeave(i=a[s],!0),l._didLeave(i),l._willUnload(i)}),s=0;s<a.length;s++)this._destroyView(a[s]);n.requiresTransition&&!u.animation&&(u.animation=Object(o.l)(n.removeStart)?(e||t).getTransitionName(u.direction):(t||e).getTransitionName(u.direction)),n.opts=u},e.prototype._viewInit=function(t){var e=i.y.resolve([{provide:l.a,useValue:this},{provide:s.a,useValue:t},{provide:u.a,useValue:t.getNavParams()}]),n=this._linker.resolveComponent(t.component),o=i.y.fromResolvedProviders(e,this._viewport.parentInjector);t.init(n.create(o,[])),t._state=r.g,this._preLoad(t)},e.prototype._viewAttachToDOM=function(t,e,n){if(this._willLoad(t),n.insert(e.hostView,n.length),t._state=r.e,t._cssClass){this._renderer.setElementClass(e.location.nativeElement,t._cssClass,!0)}e.changeDetectorRef.detectChanges(),this._zone.run(this._didLoad.bind(this,t))},e.prototype._viewTest=function(t,e,n){if(!n.requiresTransition)return Promise.resolve();var i=[];return e&&i.push(e._lifecycleTest(\"Leave\")),t&&i.push(t._lifecycleTest(\"Enter\")),0===i.length?Promise.resolve():Promise.all(i).then(function(t){if(t.some(function(t){return!1===t}))throw\"canEnter/Leave returned false\"}).catch(function(t){throw n.reject=null,t})},e.prototype._transition=function(t,e,n){var i=this;if(!n.requiresTransition)return Promise.resolve({hasCompleted:!0,requiresTransition:!1});var o=n.opts;this._trnsId=this._trnsCtrl.getRootTrnsId(this),null===this._trnsId&&(this._trnsId=this._trnsCtrl.nextId());var s=this._trnsCtrl.get(this._trnsId,t,e,{animation:o.animation,direction:o.direction,duration:!1===o.animate?0:o.duration,easing:o.easing,isRTL:this._config.plt.isRTL,ev:o.ev});this._sbTrns&&this._sbTrns.destroy(),this._sbTrns=null,s.isRoot()&&o.progressAnimation&&(this._sbTrns=s);var a=new Promise(function(t){return s.registerStart(t)}).then(function(){return i._transitionStart(s,t,e,o)});return t&&t._state===r.g&&this._viewAttachToDOM(t,t._cmp,this._viewport),s.hasChildren||s.start(),a},e.prototype._transitionStart=function(t,e,n,i){var o=this;this._trnsId=null,Object(r.n)(this,e,n,i.direction,this._renderer),e&&e._domShow(!0,this._renderer),n&&n._domShow(!0,this._renderer),t.init();var s=!this._init&&1===this._views.length&&!this._isPortal,a=!1===this._config.get(\"animate\");(s||a)&&(i.animate=!1),!1===i.animate&&t.duration(0),t.beforeAddRead(this._viewsWillLifecycles.bind(this,e,n));var l=t.getDuration(),u=new Promise(function(e){t.onFinish(e)});return t.isRoot()&&(l>y&&!1!==i.disableApp&&this._app.setEnabled(!1,l+g,i.minClickBlockDuration),i.progressAnimation?t.progressStart():t.play()),u.then(function(){return o._zone.run(function(){return o._transitionFinish(t,i)})})},e.prototype._transitionFinish=function(t,e){var n,i,r=t.hasCompleted,o=t.enteringView,s=t.leavingView;return r?(o&&(n=o.name,this._didEnter(o)),s&&(i=s.name,this._didLeave(s)),this._cleanup(o)):this._cleanup(s),t.isRoot()&&(this._trnsCtrl.destroy(t.trnsId),this._app.setEnabled(!0),this.setTransitioning(!1),this.hasChildren()||!1===e.updateUrl||this._linker.navChange(e.direction),!1!==e.keyboardClose&&this.plt.focusOutActiveElement()),{hasCompleted:r,requiresTransition:!0,enteringName:n,leavingName:i,direction:e.direction}},e.prototype._viewsWillLifecycles=function(t,e){var n=this;(t||e)&&this._zone.run(function(){if(e){n._willLeave(e,!t||e.index>t.index)}t&&n._willEnter(t)})},e.prototype._insertViewAt=function(t,e){var n=this._views.indexOf(t);n>-1?this._views.splice(e,0,this._views.splice(n,1)[0]):(t._setNav(this),this._ids++,t.id||(t.id=this.id+\"-\"+this._ids),this._views.splice(e,0,t))},e.prototype._removeView=function(t){var e=this._views,n=e.indexOf(t);n>=0&&e.splice(n,1)},e.prototype._destroyView=function(t){t._destroy(this._renderer),this._removeView(t)},e.prototype._cleanup=function(t){if(!this._destroyed){var e=this._views.indexOf(t),n=this._views,i=!1,o=void 0,s=void 0;for(s=n.length-1;s>=0;s--)o=n[s],s>e?(this._willUnload(o),this._destroyView(o)):s<e&&!this._isPortal&&o._domShow(!1,this._renderer),o._zIndex<=0&&(i=!0);if(!this._isPortal&&i)for(s=0;s<n.length;s++)(o=n[s])._setZIndex(o._zIndex+r.d+1,this._renderer)}},e.prototype._preLoad=function(t){t._preLoad()},e.prototype._willLoad=function(t){try{t._willLoad()}catch(t){this._errHandler&&this._errHandler.handleError(t)}},e.prototype._didLoad=function(t){try{t._didLoad(),this.viewDidLoad.emit(t),this._app.viewDidLoad.emit(t)}catch(t){this._errHandler&&this._errHandler.handleError(t)}},e.prototype._willEnter=function(t){try{t._willEnter(),this.viewWillEnter.emit(t),this._app.viewWillEnter.emit(t)}catch(t){this._errHandler&&this._errHandler.handleError(t)}},e.prototype._didEnter=function(t){try{t._didEnter(),this.viewDidEnter.emit(t),this._app.viewDidEnter.emit(t)}catch(t){this._errHandler&&this._errHandler.handleError(t)}},e.prototype._willLeave=function(t,e){try{t._willLeave(e),this.viewWillLeave.emit(t),this._app.viewWillLeave.emit(t)}catch(t){this._errHandler&&this._errHandler.handleError(t)}},e.prototype._didLeave=function(t){try{t._didLeave(),this.viewDidLeave.emit(t),this._app.viewDidLeave.emit(t)}catch(t){this._errHandler&&this._errHandler.handleError(t)}},e.prototype._willUnload=function(t){try{t._willUnload(),this.viewWillUnload.emit(t),this._app.viewWillUnload.emit(t)}catch(t){this._errHandler&&this._errHandler.handleError(t)}},e.prototype.hasChildren=function(){return this._children&&this._children.length>0},e.prototype.getActiveChildNavs=function(){return this._children},e.prototype.getAllChildNavs=function(){return this._children},e.prototype.registerChildNav=function(t){this._children.push(t)},e.prototype.unregisterChildNav=function(t){this._children=this._children.filter(function(e){return e!==t})},e.prototype.destroy=function(){for(var t,e=this._views,n=0;n<e.length;n++)(t=e[n])._willUnload(),t._destroy(this._renderer);this._sbGesture&&this._sbGesture.destroy(),this._sbTrns&&this._sbTrns.destroy(),this._queue=this._views=this._sbGesture=this._sbTrns=null,this.parent&&this.parent.unregisterChildNav?this.parent.unregisterChildNav(this):this._app&&this._app.unregisterRootNav(this),this._destroyed=!0},e.prototype.swipeBackStart=function(){if(!(this.isTransitioning()||this._queue.length>0)){this._queueTrns({removeStart:-1,removeCount:1,opts:{direction:r.a,progressAnimation:!0}},null)}},e.prototype.swipeBackProgress=function(t){this._sbTrns&&this._sbGesture&&(this._app.setEnabled(!1,m),this.setTransitioning(!0),this._sbTrns.progressStep(t))},e.prototype.swipeBackEnd=function(t,e,n){if(this._sbTrns&&this._sbGesture){var i=this._sbTrns.getDuration()/(Math.abs(n)+1);this._sbTrns.progressEnd(t,e,i)}},e.prototype._swipeBackCheck=function(){this.canSwipeBack()?(this._sbGesture||(this._sbGesture=new f(this.plt,this,this._gestureCtrl,this._domCtrl)),this._sbGesture.listen()):this._sbGesture&&this._sbGesture.unlisten()},e.prototype.canSwipeBack=function(){return this._sbEnabled&&!this._isPortal&&!this._children.length&&!this.isTransitioning()&&this._app.isEnabled()&&this.canGoBack()},e.prototype.canGoBack=function(){var t=this.getActive();return!(!t||!t.enableBack())},e.prototype.isTransitioning=function(){return this._trnsTm},e.prototype.setTransitioning=function(t){this._trnsTm=t},e.prototype.getActive=function(){return this._views[this._views.length-1]},e.prototype.isActive=function(t){return t===this.getActive()},e.prototype.getByIndex=function(t){return this._views[t]},e.prototype.getPrevious=function(t){t||(t=this.getActive());var e=this._views,n=e.indexOf(t);return n>0?e[n-1]:null},e.prototype.first=function(){return this._views[0]},e.prototype.last=function(){var t=this._views;return t[t.length-1]},e.prototype.indexOf=function(t){return this._views.indexOf(t)},e.prototype.length=function(){return this._views.length},e.prototype.getViews=function(){return this._views},e.prototype.getViewById=function(t){for(var e=0,n=this._views;e<n.length;e++){var i=n[e];if(i&&i.id===t)return i}return null},e.prototype.isSwipeBackEnabled=function(){return this._sbEnabled},e.prototype.dismissPageChangeViews=function(){for(var t=0,e=this._views;t<e.length;t++){var n=e[t];n.data&&n.data.dismissOnPageChange&&n.dismiss().catch(function(){})}},e.prototype.setViewport=function(t){this._viewport=t},e.prototype.resize=function(){var t=this.getActive();if(t){var e=t.getIONContent();e&&e.resize()}},e.prototype.goToRoot=function(t){return Promise.reject(new Error(\"goToRoot needs to be implemented by child class\"))},e.prototype.getType=function(){return\"nav\"},e.prototype.getSecondaryIdentifier=function(){return null},e.prototype.getActiveChildNav=function(){return console.warn(\"(getActiveChildNav) is deprecated and will be removed in the next major release. Use getActiveChildNavs instead.\"),this._children[this._children.length-1]},e}(a.a),v=-1,y=64,m=5e3,g=2e3},function(t,e,n){\"use strict\";var i=n(18),r=function(){function t(t,e,n){this.direction=t,this.dirty=!1,this._angle=0,this._isPan=0;var i=n*(Math.PI/180);this.maxCosine=Math.cos(i),this.threshold=e*e}return t.prototype.start=function(t){this.startCoord=t,this._angle=0,this._isPan=0,this.dirty=!0},t.prototype.detect=function(t){if(!this.dirty)return!1;var e=t.x-this.startCoord.x,n=t.y-this.startCoord.y;if(e*e+n*n>=this.threshold){var i=Math.atan2(n,e),r=\"y\"===this.direction?Math.sin(i):Math.cos(i);return this._angle=i,this._isPan=r>this.maxCosine?1:r<-this.maxCosine?-1:0,this.dirty=!1,!0}return!1},t.prototype.angle=function(){return this._angle},t.prototype.pan=function(){return this._isPan},t}(),o=n(35),s=n(51);n.d(e,\"a\",function(){return a});var a=function(){function t(t,e,n){void 0===n&&(n={}),this.plt=t,this.element=e,Object(i.d)(n,{threshold:20,maxAngle:40,direction:\"x\",zone:!0,capture:!1,passive:!1}),this.events=new s.a(t),n.domController&&(this.debouncer=n.domController.debouncer()),this.gestute=n.gesture,this.direction=n.direction,this.eventsConfig={element:this.element,pointerDown:this.pointerDown.bind(this),pointerMove:this.pointerMove.bind(this),pointerUp:this.pointerUp.bind(this),zone:n.zone,capture:n.capture,passive:n.passive},n.threshold>0&&(this.detector=new r(n.direction,n.threshold,n.maxAngle))}return t.prototype.listen=function(){this.isListening||(this.pointerEvents=this.events.pointerEvents(this.eventsConfig),this.isListening=!0)},t.prototype.unlisten=function(){this.isListening&&(this.gestute&&this.gestute.release(),this.events.unlistenAll(),this.isListening=!1)},t.prototype.destroy=function(){this.gestute&&this.gestute.destroy(),this.gestute=null,this.unlisten(),this.events.destroy(),this.events=this.element=this.gestute=null},t.prototype.pointerDown=function(t){if(!this.started){if(!this.canStart(t))return!1;if(this.gestute&&(this.gestute.release(),!this.gestute.start()))return!1;this.started=!0,this.captured=!1;var e=Object(o.f)(t);if(this.detector)this.detector.start(e);else if(!this.tryToCapture(t))return this.started=!1,this.captured=!1,this.gestute.release(),!1;return!0}},t.prototype.pointerMove=function(t){var e=this;if(this.captured)this.debouncer.write(function(){e.onDragMove(t)});else{var n=Object(o.f)(t);this.detector.detect(n)&&0!==this.detector.pan()&&(this.tryToCapture(t)||this.abort(t))}},t.prototype.pointerUp=function(t){this.debouncer.cancel(),this.gestute&&this.gestute.release(),this.captured?this.onDragEnd(t):this.notCaptured(t),this.captured=!1,this.started=!1},t.prototype.tryToCapture=function(t){return!(this.gestute&&!this.gestute.capture())&&(this.onDragStart(t),this.captured=!0,!0)},t.prototype.abort=function(t){this.started=!1,this.captured=!1,this.gestute.release(),this.pointerEvents.stop(),this.notCaptured(t)},t.prototype.getNativeElement=function(){return this.element},t.prototype.canStart=function(t){return!0},t.prototype.onDragStart=function(t){},t.prototype.onDragMove=function(t){},t.prototype.onDragEnd=function(t){},t.prototype.notCaptured=function(t){},t}()},function(t,e,n){\"use strict\";n.d(e,\"a\",function(){return o});var i=n(15),r=(n(1),n(47)),o=(n(33),n(4),function(){function t(t,e,n,r,o,a){this._viewCtrl=t,this._elementRef=n,this.gestureBlocker=r.createBlocker(i.a),this.d=o.data,this.mode=e.get(\"mode\"),a.setElementClass(n.nativeElement,\"action-sheet-\"+this.mode,!0),this.d.cssClass&&this.d.cssClass.split(\" \").forEach(function(t){\"\"!==t.trim()&&a.setElementClass(n.nativeElement,t,!0)}),this.id=++s,this.d.title&&(this.hdrId=\"acst-hdr-\"+this.id),this.d.subTitle&&(this.descId=\"acst-subhdr-\"+this.id)}return t.prototype.ionViewDidLoad=function(){var t=this;this.d.buttons=this.d.buttons.map(function(e){switch(\"string\"==typeof e&&(e={text:e}),e.cssClass||(e.cssClass=\"\"),e.role){case\"cancel\":return t.cancelButton=e,null;case\"destructive\":e.cssClass=(e.cssClass+\" \"||\"\")+\"action-sheet-destructive\";break;case\"selected\":e.cssClass=(e.cssClass+\" \"||\"\")+\"action-sheet-selected\"}return e}).filter(function(t){return null!==t})},t.prototype.ionViewWillEnter=function(){this.gestureBlocker.block()},t.prototype.ionViewDidLeave=function(){this.gestureBlocker.unblock()},t.prototype.ionViewDidEnter=function(){var t=this._elementRef.nativeElement.querySelector(\"button\");t&&t.focus(),this.enabled=!0},t.prototype.keyUp=function(t){this.enabled&&t.keyCode===r.c&&this._viewCtrl.isLast()&&this.bdClick()},t.prototype.click=function(t){if(this.enabled){var e=!0;t.handler&&!1===t.handler()&&(e=!1),e&&this.dismiss(t.role)}},t.prototype.bdClick=function(){this.enabled&&this.d.enableBackdropDismiss&&(this.cancelButton?this.click(this.cancelButton):this.dismiss(\"backdrop\"))},t.prototype.dismiss=function(t){return this._viewCtrl.dismiss(null,t,{minClickBlockDuration:400})},t.prototype.ngOnDestroy=function(){this.d=this.cancelButton=null,this.gestureBlocker.destroy()},t}()),s=-1},function(t,e,n){\"use strict\";n.d(e,\"a\",function(){return r});var i=n(129),r=(n(1),function(){function t(t,e){this._app=t,this.config=e}return t.prototype.create=function(t){return void 0===t&&(t={}),new i.a(this._app,t,this.config)},t}())},function(t,e,n){\"use strict\";n.d(e,\"a\",function(){return a});n(1);var i=n(35),r=n(15),o=n(18),s=n(47),a=(n(33),n(2),n(4),function(){function t(t,e,n,i,o,s,a){this._viewCtrl=t,this._elementRef=e,this._renderer=s,this._plt=a,this.gestureBlocker=i.createBlocker(r.a),this.d=o.data,this.mode=this.d.mode||n.get(\"mode\"),this.keyboardResizes=n.getBoolean(\"keyboardResizes\",!1),s.setElementClass(e.nativeElement,\"alert-\"+this.mode,!0),this.d.cssClass&&this.d.cssClass.split(\" \").forEach(function(t){\"\"!==t.trim()&&s.setElementClass(e.nativeElement,t,!0)}),this.id=++l,this.descId=\"\",this.hdrId=\"alert-hdr-\"+this.id,this.subHdrId=\"alert-subhdr-\"+this.id,this.msgId=\"alert-msg-\"+this.id,this.activeId=\"\",this.lastClick=0,this.d.message?this.descId=this.msgId:this.d.subTitle&&(this.descId=this.subHdrId),this.d.message||(this.d.message=\"\")}return t.prototype.ionViewDidLoad=function(){var t=this,e=this.d;e.buttons=e.buttons.map(function(t){return\"string\"==typeof t?{text:t}:t}),e.inputs=e.inputs.map(function(e,n){return{type:e.type||\"text\",name:Object(o.l)(e.name)?e.name:n+\"\",placeholder:Object(o.l)(e.placeholder)?e.placeholder:\"\",value:Object(o.l)(e.value)?e.value:\"\",label:e.label,checked:!!e.checked,disabled:!!e.disabled,id:Object(o.l)(e.id)?e.id:\"alert-input-\"+t.id+\"-\"+n,handler:Object(o.l)(e.handler)?e.handler:null,min:Object(o.l)(e.min)?e.min:null,max:Object(o.l)(e.max)?e.max:null}});var n=[];e.inputs.forEach(function(t){n.indexOf(t.type)<0&&n.push(t.type)}),n.length>1&&(n.indexOf(\"checkbox\")>-1||n.indexOf(\"radio\")>-1)&&console.warn(\"Alert cannot mix input types: \"+n.join(\"/\")+\". Please see alert docs for more info.\"),this.inputType=n.length?n[0]:null;var r=this.d.inputs.find(function(t){return t.checked});r&&(this.activeId=r.id);var s=this.d.inputs.length&&this.d.inputs.some(function(t){return!i.a.test(t.type)});!this.keyboardResizes&&s&&this._plt.is(\"mobile\")&&this._renderer.setElementClass(this._elementRef.nativeElement,\"alert-top\",!0)},t.prototype.ionViewWillEnter=function(){this.gestureBlocker.block()},t.prototype.ionViewDidLeave=function(){this.gestureBlocker.unblock()},t.prototype.ionViewDidEnter=function(){var t=this._elementRef.nativeElement.querySelector(\"input,button\");t&&setTimeout(function(){return t.focus()}),this.enabled=!0},t.prototype.keyUp=function(t){if(this.enabled&&this._viewCtrl.isLast())if(t.keyCode===s.b){if(this.lastClick+1e3<Date.now()){this.btnClick(this.d.buttons[this.d.buttons.length-1])}}else t.keyCode===s.c&&this.bdClick()},t.prototype.btnClick=function(t){if(this.enabled){this.lastClick=Date.now();var e=!0;t.handler&&!1===t.handler(this.getValues())&&(e=!1),e&&this.dismiss(t.role)}},t.prototype.rbClick=function(t){this.enabled&&(this.d.inputs.forEach(function(e){e.checked=t===e}),this.activeId=t.id,t.handler&&t.handler(t))},t.prototype.cbClick=function(t){this.enabled&&(t.checked=!t.checked,t.handler&&t.handler(t))},t.prototype.bdClick=function(){if(this.enabled&&this.d.enableBackdropDismiss){var t=this.d.buttons.find(function(t){return\"cancel\"===t.role});t?this.btnClick(t):this.dismiss(\"backdrop\")}},t.prototype.dismiss=function(t){return this._viewCtrl.dismiss(this.getValues(),t,{minClickBlockDuration:400})},t.prototype.getValues=function(){if(\"radio\"===this.inputType){var t=this.d.inputs.find(function(t){return t.checked});return t?t.value:void 0}if(\"checkbox\"===this.inputType)return this.d.inputs.filter(function(t){return t.checked}).map(function(t){return t.value});if(0!==this.d.inputs.length){var e={};return this.d.inputs.forEach(function(t){e[t.name]=t.value}),e}},t.prototype.ngOnDestroy=function(){this.gestureBlocker.destroy()},t}()),l=-1},function(t,e,n){\"use strict\";n.d(e,\"a\",function(){return o});n(1);var i=n(29),r=this&&this.__extends||function(){var t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n])};return function(e,n){function i(){this.constructor=e}t(e,n),e.prototype=null===n?Object.create(n):(i.prototype=n.prototype,new i)}}(),o=function(t){function e(e,n,i){return t.call(this,e,n,i,\"badge\")||this}return r(e,t),e}(i.a)},function(t,e,n){\"use strict\";n.d(e,\"a\",function(){return o});n(1);var i=n(29),r=this&&this.__extends||function(){var t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n])};return function(e,n){function i(){this.constructor=e}t(e,n),e.prototype=null===n?Object.create(n):(i.prototype=n.prototype,new i)}}(),o=function(t){function e(e,n,i){return t.call(this,e,n,i,\"card-header\")||this}return r(e,t),e}(i.a)},function(t,e,n){\"use strict\";n.d(e,\"a\",function(){return o});n(1);var i=n(29),r=this&&this.__extends||function(){var t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n])};return function(e,n){function i(){this.constructor=e}t(e,n),e.prototype=null===n?Object.create(n):(i.prototype=n.prototype,new i)}}(),o=function(t){function e(e,n,i){return t.call(this,e,n,i,\"card-title\")||this}return r(e,t),e}(i.a)},function(t,e,n){\"use strict\";n.d(e,\"a\",function(){return s});n(1);var i=n(18),r=(n(19),n(53)),o=this&&this.__extends||function(){var t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n])};return function(e,n){function i(){this.constructor=e}t(e,n),e.prototype=null===n?Object.create(n):(i.prototype=n.prototype,new i)}}(),s=function(t){function e(e,n,i,r,o){return t.call(this,e,r,o,\"checkbox\",!1,n,i,null)||this}return o(e,t),Object.defineProperty(e.prototype,\"checked\",{get:function(){return this.value},set:function(t){this.value=t},enumerable:!0,configurable:!0}),e.prototype._click=function(t){t.preventDefault(),t.stopPropagation(),this.value=!this.value,this._fireTouched()},e.prototype._inputNormalize=function(t){return Object(i.o)(t)},e.prototype._inputUpdated=function(){this._item&&this._item.setElementClass(\"item-checkbox-checked\",this._value)},e}(r.a)},function(t,e,n){\"use strict\";function i(t,e,n,i){if(t===S||t===E){try{return e=new Date(n.year,n.month-1,n.day).getDay(),t===S?(Object(_.l)(i.dayNames)?i.dayNames:F)[e]:(Object(_.l)(i.dayShortNames)?i.dayShortNames:B)[e]}catch(t){}return\"\"}if(t===N)return n?n.hour<12?\"AM\":\"PM\":Object(_.l)(e)?e.toUpperCase():\"\";if(t===V)return n?n.hour<12?\"am\":\"pm\":Object(_.l)(e)?e:\"\";if(Object(_.f)(e))return\"\";if(t===g||t===C||t===x||t===k||t===j||t===M)return u(e);if(t===m)return p(e);if(t===b)return(Object(_.l)(i.monthNames)?i.monthNames:z)[e-1];if(t===w)return(Object(_.l)(i.monthShortNames)?i.monthShortNames:H)[e-1];if(t===A||t===I){if(0===e)return\"12\";if(e>12&&(e-=12),t===A&&e<10)return\"0\"+e}return e.toString()}function r(t,e,n,i,r){return void 0===i&&(i=0),void 0===r&&(r=0),parseInt(\"1\"+p(t)+u(e)+u(n)+u(i)+u(r),10)}function o(t){return t?r(t.year,t.month,t.day,t.hour,t.minute):-1}function s(t){var e;if(Object(_.l)(t)&&\"\"!==t&&(e=y.exec(t),Object(_.l)(e)?(e.unshift(void 0,void 0),e[2]=e[3]=void 0):e=v.exec(t)),Object(_.f)(e))return null;for(var n=1;n<8;n++)e[n]=void 0!==e[n]?parseInt(e[n],10):null;var i=0;return Object(_.l)(e[9])&&Object(_.l)(e[10])&&(i=60*parseInt(e[10],10),Object(_.l)(e[11])&&(i+=parseInt(e[11],10)),\"-\"===e[9]&&(i*=-1)),{year:e[1],month:e[2],day:e[3],hour:e[4],minute:e[5],second:e[6],millisecond:e[7],tzOffset:i}}function a(t,e){if(Object(_.l)(e)&&\"\"!==e){if(Object(_.n)(e)){if(e=s(e))return Object.assign(t,e),!0}else if(Object(_.l)(e.year)||Object(_.l)(e.hour)||Object(_.l)(e.month)||Object(_.l)(e.day)||Object(_.l)(e.minute)||Object(_.l)(e.second)){Object(_.l)(e.ampm)&&Object(_.l)(e.hour)&&(e.hour.value=\"pm\"===e.ampm.value?12===e.hour.value?12:e.hour.value+12:12===e.hour.value?0:e.hour.value);for(var n in e)t[n]=e[n].value;return!0}console.warn('Error parsing date: \"'+e+'\". Please provide a valid ISO 8601 datetime format: https://www.w3.org/TR/NOTE-datetime')}else for(var n in t)delete t[n];return!1}function l(t){for(var e in L)if(L[e].f===t)return L[e].k;return null}function u(t){return(\"0\"+(Object(_.l)(t)?Math.abs(t):\"0\")).slice(-2)}function c(t){return(\"00\"+(Object(_.l)(t)?Math.abs(t):\"0\")).slice(-3)}function p(t){return(\"000\"+(Object(_.l)(t)?Math.abs(t):\"0\")).slice(-4)}function h(t,e){Object(_.n)(t)&&(t=t.replace(/\\[|\\]|\\s/g,\"\").split(\",\"));var n;return Object(_.e)(t)&&(n=t.map(function(t){return parseInt(t,10)}).filter(isFinite)),n&&n.length||console.warn('Invalid \"'+e+'Values\". Must be an array of numbers, or a comma separated string of numbers.'),n}var f=n(0),d=(n(24),n(1),n(68),n(19),n(53)),_=(n(20),n(18)),v=/^(\\d{4}|[+\\-]\\d{6})(?:-(\\d{2})(?:-(\\d{2}))?)?(?:T(\\d{2}):(\\d{2})(?::(\\d{2})(?:\\.(\\d{3}))?)?(?:(Z)|([+\\-])(\\d{2})(?::(\\d{2}))?)?)?$/,y=/^((\\d{2}):(\\d{2})(?::(\\d{2})(?:\\.(\\d{3}))?)?(?:(Z)|([+\\-])(\\d{2})(?::(\\d{2}))?)?)?$/,m=\"YYYY\",g=\"YY\",b=\"MMMM\",w=\"MMM\",C=\"MM\",O=\"M\",S=\"DDDD\",E=\"DDD\",x=\"DD\",T=\"D\",k=\"HH\",P=\"H\",A=\"hh\",I=\"h\",j=\"mm\",D=\"m\",M=\"ss\",R=\"s\",N=\"A\",V=\"a\",L=[{f:m,k:\"year\"},{f:b,k:\"month\"},{f:S,k:\"day\"},{f:w,k:\"month\"},{f:E,k:\"day\"},{f:g,k:\"year\"},{f:C,k:\"month\"},{f:x,k:\"day\"},{f:k,k:\"hour\"},{f:A,k:\"hour\"},{f:j,k:\"minute\"},{f:M,k:\"second\"},{f:O,k:\"month\"},{f:T,k:\"day\"},{f:P,k:\"hour\"},{f:I,k:\"hour\"},{f:D,k:\"minute\"},{f:R,k:\"second\"},{f:N,k:\"ampm\"},{f:V,k:\"ampm\"}],F=[\"Sunday\",\"Monday\",\"Tuesday\",\"Wednesday\",\"Thursday\",\"Friday\",\"Saturday\"],B=[\"Sun\",\"Mon\",\"Tue\",\"Wed\",\"Thu\",\"Fri\",\"Sat\"],z=[\"January\",\"February\",\"March\",\"April\",\"May\",\"June\",\"July\",\"August\",\"September\",\"October\",\"November\",\"December\"],H=[\"Jan\",\"Feb\",\"Mar\",\"Apr\",\"May\",\"Jun\",\"Jul\",\"Aug\",\"Sep\",\"Oct\",\"Nov\",\"Dec\"],Y=[A,I,j,D,M,R];n.d(e,\"a\",function(){return Z});var U=this&&this.__extends||function(){var t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n])};return function(e,n){function i(){this.constructor=e}t(e,n),e.prototype=null===n?Object.create(n):(i.prototype=n.prototype,new i)}}(),q=this&&this.__assign||Object.assign||function(t){for(var e,n=1,i=arguments.length;n<i;n++){e=arguments[n];for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])}return t},Z=function(t){function e(e,n,i,r,o,s){var a=t.call(this,n,i,r,\"datetime\",{},e,o,null)||this;return a._pickerCtrl=s,a._text=\"\",a._locale={},a.cancelText=\"Cancel\",a.doneText=\"Done\",a.pickerOptions={},a.placeholder=\"\",a.ionCancel=new f.l,a}return U(e,t),e.prototype.ngAfterContentInit=function(){var t=this;[\"monthNames\",\"monthShortNames\",\"dayNames\",\"dayShortNames\"].forEach(function(e){t._locale[e]=function(t,e){if(Object(_.l)(t)){Object(_.n)(t)&&(t=t.replace(/\\[|\\]/g,\"\").split(\",\"));var n;return Object(_.e)(t)&&(n=t.map(function(t){return t.trim()})),n&&n.length||console.warn('Invalid \"'+e+'Names\". Must be an array of strings, or a comma separated string.'),n}}(Object(_.l)(t[e])?t[e]:t._config.get(e),e)}),this._initialize()},e.prototype._inputNormalize=function(t){return a(this._value,t),this._value},e.prototype._inputUpdated=function(){t.prototype._inputUpdated.call(this),this.updateText()},e.prototype._inputShouldChange=function(){return!0},e.prototype._inputChangeEvent=function(){return this.value},e.prototype._inputNgModelEvent=function(){return function(t){var e=\"\";return Object(_.l)(t)&&(Object(_.l)(t.year)?(e=p(t.year),Object(_.l)(t.month)&&(e+=\"-\"+u(t.month),Object(_.l)(t.day)&&(e+=\"-\"+u(t.day),Object(_.l)(t.hour)&&(e+=\"T\"+u(t.hour)+\":\"+u(t.minute)+\":\"+u(t.second),t.millisecond>0&&(e+=\".\"+c(t.millisecond)),Object(_.f)(t.tzOffset)||0===t.tzOffset?e+=\"Z\":e+=(t.tzOffset>0?\"+\":\"-\")+u(Math.floor(t.tzOffset/60))+\":\"+u(t.tzOffset%60))))):Object(_.l)(t.hour)&&(e=u(t.hour)+\":\"+u(t.minute),Object(_.l)(t.second)&&(e+=\":\"+u(t.second),Object(_.l)(t.millisecond)&&(e+=\".\"+c(t.millisecond))))),e}(this.value)},e.prototype._click=function(t){t.preventDefault(),t.stopPropagation(),this.open()},e.prototype._keyup=function(){this.open()},e.prototype.open=function(){var t=this;if(!this.isFocus()&&!this._disabled){var e=q({},this.pickerOptions);e.buttons=(e.buttons||[]).concat([{text:this.cancelText,role:\"cancel\",handler:function(){return t.ionCancel.emit(t)}},{text:this.doneText,handler:function(e){return t.value=e}}]);var n=this._picker=this._pickerCtrl.create(e);n.ionChange.subscribe(function(){t.validate(),n.refresh()}),this.generate(),this.validate(),this._fireFocus(),n.present(e),n.onDidDismiss(function(){t._fireBlur()})}},e.prototype.generate=function(){var t=this,e=this._picker,n=this.pickerFormat||this.displayFormat||G;if(Object(_.l)(n)){this.calcMinMax(),-1===(n=n.replace(\"DDDD\",\"{~}\").replace(\"DDD\",\"{~}\")).indexOf(\"D\")&&(n=n.replace(\"{~}\",\"D\")),function(t){var e=[];t=t.replace(/[^\\w\\s]/gi,\" \"),L.forEach(function(e){e.f.length>1&&t.indexOf(e.f)>-1&&t.indexOf(e.f+e.f.charAt(0))<0&&(t=t.replace(e.f,\" \"+e.f+\" \"))});var n=t.split(\" \").filter(function(t){return t.length>0});return n.forEach(function(t,i){L.forEach(function(r){if(t===r.f){if((t===N||t===V)&&(e.indexOf(I)<0&&e.indexOf(A)<0||-1===Y.indexOf(n[i-1])))return;e.push(t)}})}),e}(n=n.replace(/{~}/g,\"\")).forEach(function(n){var r,o=l(n),s={name:o,selectedIndex:0,options:(r=Object(_.l)(t[o+\"Values\"])?h(t[o+\"Values\"],o):function(t,e,n){var i,r=[];if(t===m||t===g)for(i=n.year;i>=e.year;)r.push(i--);else if(t===b||t===w||t===C||t===O||t===A||t===I)for(i=1;i<13;i++)r.push(i);else if(t===S||t===E||t===x||t===T)for(i=1;i<32;i++)r.push(i);else if(t===k||t===P)for(i=0;i<24;i++)r.push(i);else if(t===j||t===D)for(i=0;i<60;i++)r.push(i);else if(t===M||t===R)for(i=0;i<60;i++)r.push(i);else t!==N&&t!==V||r.push(\"am\",\"pm\");return r}(n,t._min,t._max)).map(function(e){return{value:e,text:i(n,e,null,t._locale)}})},a=function(t,e){return e===N||e===V?t.hour<12?\"am\":\"pm\":e===A||e===I?t.hour>12?t.hour-12:t.hour:t[l(e)]}(t.getValueOrDefault(),n),u=s.options.findIndex(function(t){return t.value===a});u>=0&&(s.selectedIndex=u),e.addColumn(s)});var r=this._min,o=this._max,s=this._picker.getColumns();[\"month\",\"day\",\"hour\",\"minute\"].filter(function(t){return!s.find(function(e){return e.name===t})}).forEach(function(t){r[t]=0,o[t]=0}),this.divyColumns()}},e.prototype.validateColumn=function(t,e,n,i,o,s){var a=this._picker.getColumn(t);if(!a)return 0;for(var l=o.slice(),u=s.slice(),c=a.options,p=c.length-1,h=0,f=0;f<c.length;f++){var d=c[f],v=d.value;l[e]=d.value,u[e]=d.value;(d.disabled=v<o[e]||v>s[e]||r(u[0],u[1],u[2],u[3],u[4])<n||r(l[0],l[1],l[2],l[3],l[4])>i)||(p=Math.min(p,f),h=Math.max(h,f))}var y=a.selectedIndex=Object(_.a)(p,a.selectedIndex,h);return(d=a.options[y])?d.value:0},e.prototype.validate=function(){var t=new Date,e=o(this._min),n=o(this._max),i=this._picker.getColumn(\"year\"),r=t.getFullYear();if(i){i.options.find(function(e){return e.value===t.getFullYear()})||(r=i.options[0].value);var s=i.options[i.selectedIndex];s&&(r=s.value)}var a=this.validateColumn(\"month\",1,e,n,[r,0,0,0,0],[r,12,31,23,59]),l=function(t,e){return 4===t||6===t||9===t||11===t?30:2===t?function(t){return t%4==0&&t%100!=0||t%400==0}(e)?29:28:31}(a,r),u=this.validateColumn(\"day\",2,e,n,[r,a,0,0,0],[r,a,l,23,59]),c=this.validateColumn(\"hour\",3,e,n,[r,a,u,0,0],[r,a,u,23,59]);this.validateColumn(\"minute\",4,e,n,[r,a,u,c,0],[r,a,u,c,59])},e.prototype.divyColumns=function(){for(var t,e,n=this._picker.getColumns(),i=[],r=0;r<n.length;r++){t=n[r],i.push(0);for(var o=0;o<t.options.length;o++)(e=t.options[o].text.length)>i[r]&&(i[r]=e)}2===i.length?(e=Math.max(i[0],i[1]),n[0].align=\"right\",n[1].align=\"left\",n[0].optionsWidth=n[1].optionsWidth=17*e+\"px\"):3===i.length&&(e=Math.max(i[0],i[2]),n[0].align=\"right\",n[1].columnWidth=17*i[1]+\"px\",n[0].optionsWidth=n[2].optionsWidth=17*e+\"px\",n[2].align=\"left\")},e.prototype.updateText=function(){this._text=function(t,e,n){if(Object(_.f)(e))return\"\";var r=[],o=!1;if(L.forEach(function(s,a){if(t.indexOf(s.f)>-1){var l=\"{\"+a+\"}\",u=i(s.f,e[s.k],e,n);!o&&u&&Object(_.l)(e[s.k])&&(o=!0),r.push(l,u),t=t.replace(s.f,l)}}),!o)return\"\";for(var s=0;s<r.length;s+=2)t=t.replace(r[s],r[s+1]);return t}(this.displayFormat||this.pickerFormat||G,this.getValue(),this._locale)},e.prototype.getValue=function(){return this._value},e.prototype.getValueOrDefault=function(){if(this.hasValue())return this._value;var t={};return a(t,this.getDefaultValueDateString()),t},e.prototype.getDefaultValueDateString=function(){if(this.initialValue)return this.initialValue;var t=(new Date).toISOString();if(this.max){var e=s(t),n=s(this.max);for(var i in n)null===n[i]&&(n[i]=e[i]);if(function(t,e){var n=new Date(t.year,t.month,t.day,t.hour,t.minute,t.second),i=new Date(e.year,e.month,e.day,e.hour,e.minute,e.second);return n.getTime()-i.getTime()}(e,n)>0)return this.max}return t},e.prototype.hasValue=function(){var t=this._value;return Object(_.l)(t)&&Object(_.k)(t)&&Object.keys(t).length>0},e.prototype.calcMinMax=function(t){var e=(t||new Date).getFullYear();if(Object(_.l)(this.yearValues)){var n=h(this.yearValues,\"year\");Object(_.f)(this.min)&&(this.min=Math.min.apply(Math,n)),Object(_.f)(this.max)&&(this.max=Math.max.apply(Math,n))}else Object(_.f)(this.min)&&(this.min=(e-100).toString()),Object(_.f)(this.max)&&(this.max=e.toString());var i=this._min=s(this.min),r=this._max=s(this.max);i.year=i.year||e,r.year=r.year||e,i.month=i.month||1,r.month=r.month||12,i.day=i.day||1,r.day=r.day||31,i.hour=i.hour||0,r.hour=r.hour||23,i.minute=i.minute||0,r.minute=r.minute||59,i.second=i.second||0,r.second=r.second||59,i.year>r.year&&(console.error(\"min.year > max.year\"),i.year=r.year-100),i.year===r.year&&(i.month>r.month?(console.error(\"min.month > max.month\"),i.month=1):i.month===r.month&&i.day>r.day&&(console.error(\"min.day > max.day\"),i.day=1))},e}(d.a),G=\"MMM D, YYYY\"},function(t,e,n){\"use strict\";n.d(e,\"a\",function(){return s});var i=n(18),r=(n(1),n(15)),o=n(47),s=(n(33),n(4),n(78),function(){function t(t,e,n,i,o,s){this._viewCtrl=t,this._elementRef=e,this._gestureBlocker=i.createBlocker(r.a),this.d=o.data,this.mode=n.get(\"mode\"),s.setElementClass(e.nativeElement,\"picker-\"+this.mode,!0),this.d.cssClass&&this.d.cssClass.split(\" \").forEach(function(t){s.setElementClass(e.nativeElement,t,!0)}),this.id=++a,this.lastClick=0}return t.prototype.ionViewWillLoad=function(){var t=this.d;t.buttons=t.buttons.map(function(t){return Object(i.n)(t)?{text:t}:(t.role&&(t.cssRole=\"picker-toolbar-\"+t.role),t)}),t.columns=t.columns.map(function(t){return Object(i.l)(t.options)||(t.options=[]),t.selectedIndex=t.selectedIndex||0,t.options=t.options.map(function(t){var e={text:\"\",value:\"\",disabled:t.disabled};return Object(i.l)(t)&&(Object(i.n)(t)||Object(i.j)(t)?(e.text=t.toString(),e.value=t):(e.text=Object(i.l)(t.text)?t.text:t.value,e.value=Object(i.l)(t.value)?t.value:t.text)),e}),t})},t.prototype.ionViewDidLoad=function(){this.refresh()},t.prototype.ionViewWillEnter=function(){this._gestureBlocker.block()},t.prototype.ionViewDidLeave=function(){this._gestureBlocker.unblock()},t.prototype.refresh=function(){this._cols.forEach(function(t){return t.refresh()})},t.prototype._colChange=function(){this._viewCtrl.ionChange.emit(this.getSelected())},t.prototype._keyUp=function(t){if(this.enabled&&this._viewCtrl.isLast())if(t.keyCode===o.b){if(this.lastClick+1e3<Date.now()){this.btnClick(this.d.buttons[this.d.buttons.length-1])}}else t.keyCode===o.c&&this.bdClick()},t.prototype.ionViewDidEnter=function(){var t=this._elementRef.nativeElement.querySelector(\"button\");t&&t.focus(),this.enabled=!0},t.prototype.btnClick=function(t){if(this.enabled){this.lastClick=Date.now();var e=!0;t.handler&&!1===t.handler(this.getSelected())&&(e=!1),e&&this.dismiss(t.role)}},t.prototype.bdClick=function(){if(this.enabled&&this.d.enableBackdropDismiss){var t=this.d.buttons.find(function(t){return\"cancel\"===t.role});t?this.btnClick(t):this.dismiss(\"backdrop\")}},t.prototype.dismiss=function(t){return this._viewCtrl.dismiss(this.getSelected(),t)},t.prototype.getSelected=function(){var t={};return this.d.columns.forEach(function(e,n){var i=e.options[e.selectedIndex];t[e.name]={text:i?i.text:null,value:i?i.value:null,columnIndex:n}}),t},t.prototype.ngOnDestroy=function(){this._gestureBlocker.destroy()},t}()),a=-1},function(t,e,n){\"use strict\";n.d(e,\"a\",function(){return r});n(1);var i=n(18),r=(n(2),n(54),function(){function t(t,e,n,i){this._elementRef=t,this._renderer=e,this._plt=i,this._visible=!1,this._fabs=[],this._mode=n.get(\"mode\")}return Object.defineProperty(t.prototype,\"_setbuttons\",{set:function(t){for(var e=this._fabs=t.toArray(),n=\"fab-\"+this._mode+\"-in-list\",i=0,r=e;i<r.length;i++){var o=r[i];o.setElementClass(\"fab-in-list\",!0),o.setElementClass(n,!0)}},enumerable:!0,configurable:!0}),t.prototype.setVisible=function(t){var e=this,n=Object(i.o)(t);if(n!==this._visible){this._visible=n;var r=this._fabs,o=1;r.forEach(n?function(t){e._plt.timeout(function(){return t.setElementClass(\"show\",!0)},30*o),o++}:function(t){return t.setElementClass(\"show\",!1)}),this.setElementClass(\"fab-list-active\",n)}},t.prototype.setElementClass=function(t,e){this._renderer.setElementClass(this._elementRef.nativeElement,t,e)},t}())},function(t,e,n){\"use strict\";n.d(e,\"a\",function(){return o});var i=n(0),r=(n(2),n(18)),o=function(){function t(t,e){this._elementRef=t,this._plt=e,this.ionSwipe=new i.l}return t.prototype.isRightSide=function(){return Object(r.m)(this.side,this._plt.isRTL,!0)},t.prototype.width=function(){return this._elementRef.nativeElement.offsetWidth},t}()},function(t,e,n){\"use strict\";n.d(e,\"a\",function(){return o});var i=n(0),r=n(18),o=(n(20),n(2),n(99),function(){function t(t,e,n,r,o){this._plt=e,this._renderer=n,this._elementRef=r,this._zone=o,this._openAmount=0,this._startX=0,this._optsWidthRightSide=0,this._optsWidthLeftSide=0,this._tmr=null,this._optsDirty=!0,this._state=2,this.ionDrag=new i.l,t&&t.containsSlidingItem(!0),r.nativeElement.$ionComponent=this,this.setElementClass(\"item-wrapper\",!0)}return Object.defineProperty(t.prototype,\"_itemOptions\",{set:function(t){var e=0;this._leftOptions=this._rightOptions=null;for(var n=0,i=t.toArray();n<i.length;n++){var r=i[n];r.isRightSide()?(this._rightOptions=r,e|=2):(this._leftOptions=r,e|=1)}this._optsDirty=!0,this._sides=e},enumerable:!0,configurable:!0}),t.prototype.getOpenAmount=function(){return this._openAmount},t.prototype.getSlidingPercent=function(){var t=this._openAmount;return t>0?t/this._optsWidthRightSide:t<0?t/this._optsWidthLeftSide:0},t.prototype.startSliding=function(t){this._tmr&&(this._plt.cancelTimeout(this._tmr),this._tmr=null),0===this._openAmount&&(this._optsDirty=!0,this._setState(4)),this._startX=t+this._openAmount,this.item.setElementStyle(this._plt.Css.transition,\"none\")},t.prototype.moveSliding=function(t){if(!this._optsDirty){var e=this._startX-t;switch(this._sides){case 2:e=Math.max(0,e);break;case 1:e=Math.min(0,e);break;case 3:break;case 0:return}if(e>this._optsWidthRightSide){e=(n=this._optsWidthRightSide)+.55*(e-n)}else if(e<-this._optsWidthLeftSide){var n=-this._optsWidthLeftSide;e=n+.55*(e-n)}return this._setOpenAmount(e,!1),e}this.calculateOptsWidth()},t.prototype.endSliding=function(t){var e=this._openAmount>0?this._optsWidthRightSide:-this._optsWidthLeftSide,n=this._openAmount>0==!(t<0),i=Math.abs(t)>.3,o=Math.abs(this._openAmount)<Math.abs(e/2);return Object(r.t)(n,i,o)&&(e=0),this.fireSwipeEvent(),this._setOpenAmount(e,!0),e},t.prototype.fireSwipeEvent=function(){var t=this;32&this._state?this._zone.run(function(){return t._rightOptions.ionSwipe.emit(t)}):64&this._state&&this._zone.run(function(){return t._leftOptions.ionSwipe.emit(t)})},t.prototype.calculateOptsWidth=function(){this._optsDirty&&(this._optsWidthRightSide=0,this._rightOptions&&(this._optsWidthRightSide=this._rightOptions.width()),this._optsWidthLeftSide=0,this._leftOptions&&(this._optsWidthLeftSide=this._leftOptions.width()),this._optsDirty=!1)},t.prototype._setOpenAmount=function(t,e){var n=this,i=this._plt;if(this._tmr&&(i.cancelTimeout(this._tmr),this._tmr=null),this._openAmount=t,e&&this.item.setElementStyle(i.Css.transition,\"\"),t>0){this._setState(t>=this._optsWidthRightSide+30?40:8)}else{if(!(t<0))return this._tmr=i.timeout(function(){n._setState(2),n._tmr=null},600),void this.item.setElementStyle(i.Css.transform,\"\");this._setState(t<=-this._optsWidthLeftSide-30?80:16)}this.item.setElementStyle(i.Css.transform,\"translate3d(\"+-t+\"px,0,0)\");var r=this.ionDrag;r.observers.length>0&&r.emit(this)},t.prototype._setState=function(t){t!==this._state&&(this.setElementClass(\"active-slide\",2!==t),this.setElementClass(\"active-options-right\",!!(8&t)),this.setElementClass(\"active-options-left\",!!(16&t)),this.setElementClass(\"active-swipe-right\",!!(32&t)),this.setElementClass(\"active-swipe-left\",!!(64&t)),this._state=t)},t.prototype.close=function(){this._setOpenAmount(0,!0)},t.prototype.setElementClass=function(t,e){this._renderer.setElementClass(this._elementRef.nativeElement,t,e)},t}())},function(t,e,n){\"use strict\";n.d(e,\"a\",function(){return r});var i=n(170),r=function(){function t(t){this.elementRef=t,t.nativeElement.$ionComponent=this}return t.prototype.getReorderNode=function(){return Object(i.a)(this.elementRef.nativeElement,null)},t.prototype.onClick=function(t){t.preventDefault(),t.stopPropagation()},t}()},function(t,e,n){\"use strict\";n.d(e,\"a\",function(){return s});n(1);var i=n(15),r=n(18),o=n(47),s=(n(33),n(4),function(){function t(t,e,n,r,o,s){this._viewCtrl=t,this._config=e,this.gestureBlocker=r.createBlocker(i.a),this.d=o.data,s.setElementClass(n.nativeElement,\"loading-\"+e.get(\"mode\"),!0),this.d.cssClass&&this.d.cssClass.split(\" \").forEach(function(t){\"\"!==t.trim()&&s.setElementClass(n.nativeElement,t,!0)}),this.id=++a}return t.prototype.ngOnInit=function(){Object(r.p)(this.d.spinner)&&(this.d.spinner=this._config.get(\"loadingSpinner\",this._config.get(\"spinner\",\"ios\"))),this.showSpinner=Object(r.h)(this.d.spinner)&&\"hide\"!==this.d.spinner},t.prototype.ionViewWillEnter=function(){this.gestureBlocker.block()},t.prototype.ionViewDidLeave=function(){this.gestureBlocker.unblock()},t.prototype.ionViewDidEnter=function(){var t=this;this.d&&this.d.duration&&(this.durationTimeout=setTimeout(function(){return t.dismiss(\"backdrop\")},this.d.duration))},t.prototype.keyUp=function(t){this._viewCtrl.isLast()&&t.keyCode===o.c&&this.bdClick()},t.prototype.bdClick=function(){this.d.enableBackdropDismiss&&this.dismiss(\"backdrop\")},t.prototype.dismiss=function(t){return this.durationTimeout&&clearTimeout(this.durationTimeout),this._viewCtrl.dismiss(null,t)},t.prototype.ngOnDestroy=function(){this.gestureBlocker.destroy()},t}()),a=-1},function(t,e,n){\"use strict\";n.d(e,\"a\",function(){return r});n(1);var i=n(176),r=function(){function t(t,e){this._app=t,this.config=e}return t.prototype.create=function(t){return void 0===t&&(t={}),new i.a(this._app,t,this.config)},t}()},function(t,e,n){\"use strict\";var i=n(0),r=(n(5),n(45),n(1),n(8),n(6),n(15)),o=n(18),s=(n(9),n(128)),a=this&&this.__extends||function(){var t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n])};return function(e,n){function i(){this.constructor=e}t(e,n),e.prototype=null===n?Object.create(n):(i.prototype=n.prototype,new i)}}(),l=function(t){function e(e,n,i,o){var s=t.call(this,e,e.doc().body,{direction:\"x\",edge:n.side,threshold:5,maxEdgeStart:n.maxEdgeStart||50,zone:!1,passive:!0,domController:o,gesture:i.createGesture({name:r.d,priority:r.f,disableScroll:!0})})||this;return s.menu=n,s}return a(e,t),e.prototype.canStart=function(e){var n=this.menu;return!!n.canSwipe()&&(!!n.isOpen||!n.getMenuController().getOpen()&&t.prototype.canStart.call(this,e))},e.prototype.onSlideBeforeStart=function(){this.menu._swipeBeforeStart()},e.prototype.onSlideStart=function(){this.menu._swipeStart()},e.prototype.onSlide=function(t){this.menu._swipeProgress(t.distance/(this.menu.isRightSide!==this.plt.isRTL?t.min:t.max))},e.prototype.onSlideEnd=function(t){var e=this.menu.isRightSide!==this.plt.isRTL?t.min:t.max,n=t.distance/e,i=t.velocity;e=Math.abs(.5*e);this.menu._swipeEnd(i<=0&&(i<-.2||t.delta<-e),i>=0&&(i>.2||t.delta>e),n,i)},e.prototype.getElementStartPos=function(t){var e=this.menu;return e.isRightSide!==this.plt.isRTL?e.isOpen?t.min:t.max:e.isOpen?t.max:t.min},e.prototype.getSlideBoundaries=function(){var t=this.menu;return t.isRightSide!==this.plt.isRTL?{min:-t.width(),max:0}:{min:0,max:t.width()}},e}(s.a),u=n(43),c=(n(79),n(2),n(51));n(38);n.d(e,\"a\",function(){return p});var p=function(){function t(t,e,n,o,s,a,l,u,p){this._menuCtrl=t,this._elementRef=e,this._config=n,this._plt=o,this._renderer=s,this._keyboard=a,this._gestureCtrl=l,this._domCtrl=u,this._app=p,this._isSwipeEnabled=!0,this._isAnimating=!1,this._isPersistent=!1,this._init=!1,this._isPane=!1,this.isOpen=!1,this.isRightSide=!1,this.ionDrag=new i.l,this.ionOpen=new i.l,this.ionClose=new i.l,this._events=new c.a(o),this._gestureBlocker=l.createBlocker({disable:[r.b]}),this.side=\"start\"}return Object.defineProperty(t.prototype,\"enabled\",{get:function(){return this._isEnabled},set:function(t){var e=Object(o.o)(t);this.enable(e)},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,\"side\",{get:function(){return this._side},set:function(t){this.isRightSide=Object(o.m)(t,this._plt.isRTL),this._side=this.isRightSide?\"right\":\"left\"},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,\"swipeEnabled\",{get:function(){return this._isSwipeEnabled},set:function(t){var e=Object(o.o)(t);this.swipeEnable(e)},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,\"persistent\",{get:function(){return this._isPersistent},set:function(t){this._isPersistent=Object(o.o)(t)},enumerable:!0,configurable:!0}),t.prototype.ngOnInit=function(){var t=this;this._init=!0;var e=this.content;if(this._cntEle=e instanceof Node?e:e&&e.getNativeElement&&e.getNativeElement(),!this._cntEle)return console.error('Menu: must have a [content] element to listen for drag events on. Example:\\n\\n<ion-menu [content]=\"content\"></ion-menu>\\n\\n<ion-nav #content></ion-nav>');this.setElementAttribute(\"side\",this._side),this.type||(this.type=this._config.get(\"menuType\")),this.setElementAttribute(\"type\",this.type),this._gesture=new l(this._plt,this,this._gestureCtrl,this._domCtrl),this._cntEle.classList.add(\"menu-content\"),this._cntEle.classList.add(\"menu-content-\"+this.type);var n=this._isEnabled;!0!==n&&void 0!==n||(n=!this._menuCtrl.getMenus().some(function(e){return e.side===t.side&&e.enabled})),this._menuCtrl._register(this),this.enable(n)},t.prototype.onBackdropClick=function(t){t.preventDefault(),t.stopPropagation(),this._menuCtrl.close()},t.prototype._getType=function(){return this._type||(this._type=u.a.create(this.type,this,this._plt),!1===this._config.get(\"animate\")&&this._type.ani.duration(0)),this._type},t.prototype.setOpen=function(t,e){var n=this;return void 0===e&&(e=!0),t===this.isOpen||!this._canOpen()||this._isAnimating?Promise.resolve(this.isOpen):new Promise(function(i){n._before(),n._getType().setOpen(t,e,function(){n._after(t),i(n.isOpen)})})},t.prototype._forceClosing=function(){var t=this;this._isAnimating=!0,this._getType().setOpen(!1,!1,function(){t._after(!1)})},t.prototype.canSwipe=function(){return this._isSwipeEnabled&&!this._isAnimating&&this._canOpen()&&this._app.isEnabled()},t.prototype.isAnimating=function(){return this._isAnimating},t.prototype._swipeBeforeStart=function(){this.canSwipe()&&this._before()},t.prototype._swipeStart=function(){this._isAnimating&&this._getType().setProgressStart(this.isOpen)},t.prototype._swipeProgress=function(t){if(this._isAnimating){this._getType().setProgessStep(t);var e=this.ionDrag;e.observers.length>0&&e.emit(t)}},t.prototype._swipeEnd=function(t,e,n,i){var r=this;if(this._isAnimating){var o=this.isRightSide,s=this._plt.isRTL,a=!this.isOpen?o!==s?t:e:o!==s?e:t;this._getType().setProgressEnd(a,n,i,function(t){r._after(t)})}},t.prototype._before=function(){this.setElementClass(\"show-menu\",!0),this.backdrop.setElementClass(\"show-backdrop\",!0),this.resize(),this._keyboard.close(),this._isAnimating=!0},t.prototype._after=function(t){if(this._app.setEnabled(!1,100),this.isOpen=t,this._isAnimating=!1,this._events.unlistenAll(),t){this._gestureBlocker.block(),this._cntEle.classList.add(\"menu-content-open\");var e=this.onBackdropClick.bind(this);this._events.listen(this._cntEle,\"click\",e,{capture:!0}),this._events.listen(this.backdrop.getNativeElement(),\"click\",e,{capture:!0}),this.ionOpen.emit(!0)}else this._gestureBlocker.unblock(),this._cntEle.classList.remove(\"menu-content-open\"),this.setElementClass(\"show-menu\",!1),this.backdrop.setElementClass(\"show-menu\",!1),this.ionClose.emit(!0)},t.prototype.open=function(){return this.setOpen(!0)},t.prototype.close=function(){return this.setOpen(!1)},t.prototype.resize=function(){var t=this.menuContent?this.menuContent:this.menuNav;t&&t.resize()},t.prototype.toggle=function(){return this.setOpen(!this.isOpen)},t.prototype._canOpen=function(){return this._isEnabled&&!this._isPane},t.prototype._updateState=function(){var t=this._canOpen();if(!t&&this.isOpen&&this._forceClosing(),this._isEnabled&&this._menuCtrl&&this._menuCtrl._setActiveMenu(this),this._init){var e=this._gesture;t&&this._isSwipeEnabled&&!e.isListening?e.listen():!e.isListening||t&&this._isSwipeEnabled||e.unlisten(),(this.isOpen||this._isPane&&this._isEnabled)&&this.resize()}},t.prototype.enable=function(t){return this._isEnabled=t,this.setElementClass(\"menu-enabled\",t),this._updateState(),this},t.prototype.initPane=function(){return!1},t.prototype.paneChanged=function(t){this._isPane=t,this._updateState()},t.prototype.swipeEnable=function(t){return this._isSwipeEnabled=t,this._updateState(),this},t.prototype.getNativeElement=function(){return this._elementRef.nativeElement},t.prototype.getMenuElement=function(){return this.getNativeElement().querySelector(\".menu-inner\")},t.prototype.getContentElement=function(){return this._cntEle},t.prototype.getBackdropElement=function(){return this.backdrop.getNativeElement()},t.prototype.width=function(){return this.getMenuElement().offsetWidth},t.prototype.getMenuController=function(){return this._menuCtrl},t.prototype.setElementClass=function(t,e){this._renderer.setElementClass(this._elementRef.nativeElement,t,e)},t.prototype.setElementAttribute=function(t,e){this._renderer.setElementAttribute(this._elementRef.nativeElement,t,e)},t.prototype.getElementRef=function(){return this._elementRef},t.prototype.ngOnDestroy=function(){this._menuCtrl._unregister(this),this._events.destroy(),this._gesture&&this._gesture.destroy(),this._type&&this._type.destroy(),this._gesture=null,this._type=null,this._cntEle=null},t}()},function(t,e,n){\"use strict\";n.d(e,\"a\",function(){return o});var i=n(47),r=(n(33),n(4),n(15)),o=(n(70),function(){function t(t,e,n,i,o,s,a){this._cfr=t,this._renderer=e,this._elementRef=n,this._navParams=i,this._viewCtrl=o,this.moduleLoader=a;var l=i.get(\"opts\");this._gestureBlocker=s.createBlocker({disable:[r.d,r.b]}),this._bdDismiss=l.enableBackdropDismiss,l.cssClass&&l.cssClass.split(\" \").forEach(function(t){\"\"!==t.trim()&&e.setElementClass(n.nativeElement,t,!0)})}return t.prototype.ionViewPreLoad=function(){var t=this._navParams.data.component;if(t){var e=this.moduleLoader.getComponentFactoryResolver(t);e||(e=this._cfr);var n=e.resolveComponentFactory(t),i=this._viewport.createComponent(n,this._viewport.length,this._viewport.parentInjector,[]);this._setCssClass(i,\"ion-page\"),this._setCssClass(i,\"show-page\"),this._viewCtrl._setInstance(i.instance),this._viewCtrl.willEnter.subscribe(this._viewWillEnter.bind(this)),this._viewCtrl.didLeave.subscribe(this._viewDidLeave.bind(this)),this._enabled=!0}else console.warn(\"modal's page was not defined\")},t.prototype._viewWillEnter=function(){this._gestureBlocker.block()},t.prototype._viewDidLeave=function(){this._gestureBlocker.unblock()},t.prototype._setCssClass=function(t,e){this._renderer.setElementClass(t.location.nativeElement,e,!0)},t.prototype._bdClick=function(){if(this._enabled&&this._bdDismiss){return this._viewCtrl.dismiss(null,\"backdrop\",{minClickBlockDuration:400})}},t.prototype._keyUp=function(t){this._enabled&&this._viewCtrl.isLast()&&t.keyCode===i.c&&this._bdClick()},t.prototype.ngOnDestroy=function(){this._gestureBlocker.destroy()},t}())},function(t,e,n){\"use strict\";n.d(e,\"a\",function(){return r});n(1);var i=n(178),r=(n(31),function(){function t(t,e,n){this._app=t,this.config=e,this.deepLinker=n}return t.prototype.create=function(t,e,n){return void 0===e&&(e={}),void 0===n&&(n={}),new i.a(this._app,t,e,n,this.config,this.deepLinker)},t}())},function(t,e,n){\"use strict\";n.d(e,\"a\",function(){return o});var i=n(0),r=n(18),o=function(){function t(t){this._elementRef=t,this._selected=!1,this._disabled=!1,this.ionSelect=new i.l}return Object.defineProperty(t.prototype,\"disabled\",{get:function(){return this._disabled},set:function(t){this._disabled=Object(r.o)(t)},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,\"selected\",{get:function(){return this._selected},set:function(t){this._selected=Object(r.o)(t)},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,\"value\",{get:function(){return Object(r.l)(this._value)?this._value:this.text},set:function(t){this._value=t},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,\"text\",{get:function(){return this._elementRef.nativeElement.textContent},enumerable:!0,configurable:!0}),t}()},function(t,e,n){\"use strict\";n.d(e,\"a\",function(){return o});n(1);var i=n(47),r=(n(33),n(4),n(15)),o=(n(70),function(){function t(t,e,n,i,o,a,l,u){this._cfr=t,this._elementRef=e,this._renderer=n,this._config=i,this._navParams=o,this._viewCtrl=a,this.moduleLoader=u,this._gestureBlocker=l.createBlocker(r.a),this.d=o.data.opts,n.setElementClass(e.nativeElement,\"popover-\"+i.get(\"mode\"),!0),this.d.cssClass&&this.d.cssClass.split(\" \").forEach(function(t){\"\"!==t.trim()&&n.setElementClass(e.nativeElement,t,!0)}),this.id=++s}return t.prototype.ionViewPreLoad=function(){this._load(this._navParams.data.component)},t.prototype._load=function(t){if(t){var e=this.moduleLoader.getComponentFactoryResolver(t);e||(e=this._cfr);var n=e.resolveComponentFactory(t),i=this._viewport.createComponent(n,this._viewport.length,this._viewport.parentInjector,[]);this._viewCtrl._setInstance(i.instance),this._enabled=!0,this._viewCtrl.willEnter.subscribe(this._viewWillEnter.bind(this)),this._viewCtrl.didLeave.subscribe(this._viewDidLeave.bind(this))}},t.prototype._viewWillEnter=function(){this._gestureBlocker.block()},t.prototype._viewDidLeave=function(){this._gestureBlocker.unblock()},t.prototype._setCssClass=function(t,e){this._renderer.setElementClass(t.location.nativeElement,e,!0)},t.prototype._bdClick=function(){if(this._enabled&&this.d.enableBackdropDismiss)return this._viewCtrl.dismiss(null,\"backdrop\")},t.prototype._keyUp=function(t){this._enabled&&t.keyCode===i.c&&this._viewCtrl.isLast()&&this._bdClick()},t.prototype.ngOnDestroy=function(){this._gestureBlocker.destroy()},t}()),s=-1},function(t,e,n){\"use strict\";n.d(e,\"a\",function(){return r});n(1);var i=n(140),r=(n(31),function(){function t(t,e,n){this._app=t,this.config=e,this._deepLinker=n}return t.prototype.create=function(t,e,n){return void 0===e&&(e={}),void 0===n&&(n={}),new i.a(this._app,t,e,n,this.config,this._deepLinker)},t}())},function(t,e,n){\"use strict\";n.d(e,\"a\",function(){return l});var i=n(18),r=(n(1),n(6),n(19),n(40),n(53)),o=(n(2),n(35)),s=n(51),a=this&&this.__extends||function(){var t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n])};return function(e,n){function i(){this.constructor=e}t(e,n),e.prototype=null===n?Object.create(n):(i.prototype=n.prototype,new i)}}(),l=function(t){function e(e,n,i,r,o,a,l,u,c){var p=t.call(this,r,a,l,\"range\",0,e,i,null)||this;return p._haptic=n,p._plt=o,p._dom=u,p._cd=c,p._min=0,p._max=100,p._step=1,p._valA=0,p._valB=0,p._ratioA=0,p._ratioB=0,p._events=new s.a(o),p}return a(e,t),Object.defineProperty(e.prototype,\"min\",{get:function(){return this._min},set:function(t){t=Math.round(t),isNaN(t)||(this._min=t,this._inputUpdated())},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,\"max\",{get:function(){return this._max},set:function(t){t=Math.round(t),isNaN(t)||(this._max=t,this._inputUpdated())},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,\"step\",{get:function(){return this._step},set:function(t){t=Math.round(t),!isNaN(t)&&t>0&&(this._step=t)},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,\"snaps\",{get:function(){return this._snaps},set:function(t){this._snaps=Object(i.o)(t)},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,\"pin\",{get:function(){return this._pin},set:function(t){this._pin=Object(i.o)(t)},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,\"debounce\",{get:function(){return this._debouncer.wait},set:function(t){this._debouncer.wait=t},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,\"dualKnobs\",{get:function(){return this._dual},set:function(t){this._dual=Object(i.o)(t)},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,\"ratio\",{get:function(){return this._dual?Math.min(this._ratioA,this._ratioB):this._ratioA},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,\"ratioUpper\",{get:function(){return this._dual?Math.max(this._ratioA,this._ratioB):null},enumerable:!0,configurable:!0}),e.prototype.ngAfterContentInit=function(){this._initialize(),this._events.pointerEvents({element:this._slider.nativeElement,pointerDown:this._pointerDown.bind(this),pointerMove:this._pointerMove.bind(this),pointerUp:this._pointerUp.bind(this),zone:!0}),this._createTicks()},e.prototype._pointerDown=function(t){if(this._disabled)return!1;this._fireFocus(),t.preventDefault(),t.stopPropagation();var e=Object(o.f)(t),n=this._rect=this._plt.getElementBoundingClientRect(this._slider.nativeElement),r=Object(i.a)(0,(e.x-n.left)/n.width,1);return this._activeB=this._dual&&Math.abs(r-this._ratioA)>Math.abs(r-this._ratioB),this._update(e,n,!0),this._haptic.gestureSelectionStart(),!0},e.prototype._pointerMove=function(t){if(!this._disabled){t.preventDefault(),t.stopPropagation();this._update(Object(o.f)(t),this._rect,!0)&&this._snaps&&this._haptic.gestureSelectionChanged()}},e.prototype._pointerUp=function(t){this._disabled||(t.preventDefault(),t.stopPropagation(),this._update(Object(o.f)(t),this._rect,!1),this._haptic.gestureSelectionEnd(),this._fireBlur())},e.prototype._update=function(t,e,n){var r=Object(i.a)(0,(t.x-e.left)/e.width,1),o=this._ratioToValue(r);this._snaps&&(r=this._valueToRatio(o)),this._pressed=n;var s=!1;if(this._activeB?(this._pressedB=n,this._pressedA=!1,this._ratioB=r,s=o===this._valB,this._valB=o):(this._pressedA=n,this._pressedB=!1,this._ratioA=r,s=o===this._valA,this._valA=o),this._updateBar(),s)return!1;var a;return a=this._dual?{lower:Math.min(this._valA,this._valB),upper:Math.max(this._valA,this._valB)}:this._valA,this.value=a,!0},e.prototype._updateBar=function(){var t=this._ratioA,e=this._ratioB;this._dual?(this._barL=100*Math.min(t,e)+\"%\",this._barR=100-100*Math.max(t,e)+\"%\"):(this._barL=\"\",this._barR=100-100*t+\"%\"),this._updateTicks()},e.prototype._createTicks=function(){var t=this;this._snaps&&this._dom.write(function(){t._ticks=[];for(var e=t._min;e<=t._max;e+=t._step){var n=t._valueToRatio(e);t._ticks.push({ratio:n,left:100*n+\"%\"})}t._updateTicks()})},e.prototype._updateTicks=function(){var t=this._ticks,e=this.ratio;if(this._snaps&&t)if(this._dual){var n=this.ratioUpper;t.forEach(function(t){t.active=t.ratio>=e&&t.ratio<=n})}else t.forEach(function(t){t.active=t.ratio<=e})},e.prototype._keyChg=function(t,e){var n=this._step;e?(t?this._valB+=n:this._valB-=n,this._valB=Object(i.a)(this._min,this._valB,this._max),this._ratioB=this._valueToRatio(this._valB)):(t?this._valA+=n:this._valA-=n,this._valA=Object(i.a)(this._min,this._valA,this._max),this._ratioA=this._valueToRatio(this._valA)),this._updateBar()},e.prototype._ratioToValue=function(t){return t=Math.round((this._max-this._min)*t),t=Math.round(t/this._step)*this._step+this._min,Object(i.a)(this._min,t,this._max)},e.prototype._valueToRatio=function(t){return t=Math.round((t-this._min)/this._step)*this._step,t/=this._max-this._min,Object(i.a)(0,t,1)},e.prototype._inputNormalize=function(t){return this._dual?t:(t=parseFloat(t),isNaN(t)?void 0:t)},e.prototype._inputUpdated=function(){var t=this.value;this._dual?(this._valA=t.lower,this._valB=t.upper,this._ratioA=this._valueToRatio(t.lower),this._ratioB=this._valueToRatio(t.upper)):(this._valA=t,this._ratioA=this._valueToRatio(t)),this._updateBar(),this._cd.detectChanges()},e.prototype.ngOnDestroy=function(){t.prototype.ngOnDestroy.call(this),this._events.destroy()},e}(r.a)},function(t,e,n){\"use strict\";n.d(e,\"a\",function(){return o});var i=n(0),r=n(47),o=function(){function t(){this.ionIncrease=new i.l,this.ionDecrease=new i.l}return Object.defineProperty(t.prototype,\"ratio\",{set:function(t){this._x=100*t+\"%\"},enumerable:!0,configurable:!0}),t.prototype._keyup=function(t){var e=t.keyCode;e===r.d||e===r.a?(this.ionDecrease.emit(),t.preventDefault(),t.stopPropagation()):e!==r.e&&e!==r.h||(this.ionIncrease.emit(),t.preventDefault(),t.stopPropagation())},t}()},function(t,e,n){\"use strict\";n.d(e,\"a\",function(){return o});n(1);var i=n(53),r=(n(72),this&&this.__extends||function(){var t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n])};return function(e,n){function i(){this.constructor=e}t(e,n),e.prototype=null===n?Object.create(n):(i.prototype=n.prototype,new i)}}()),o=function(t){function e(e,n,i,r){return t.call(this,e,n,i,\"segment\",null,null,null,r)||this}return r(e,t),e.prototype.ngAfterContentInit=function(){var t=this;this._initialize(),this._buttons.forEach(function(e){e.ionSelect.subscribe(function(e){t.value=e.value,t._fireTouched()})})},e.prototype._inputUpdated=function(){if(this._buttons)for(var t=this._buttons.toArray(),e=this.value,n=0,i=t;n<i.length;n++){var r=i[n];r.isActive=r.value===e}},e}(i.a)},function(t,e,n){\"use strict\";n.d(e,\"a\",function(){return p});var i=n(0),r=n(129),o=n(130),s=n(140),a=(n(1),n(31),n(19),n(53)),l=n(18),u=(n(20),n(107),n(114)),c=this&&this.__extends||function(){var t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n])};return function(e,n){function i(){this.constructor=e}t(e,n),e.prototype=null===n?Object.create(n):(i.prototype=n.prototype,new i)}}(),p=function(t){function e(e,n,r,o,s,a,u){var c=t.call(this,r,o,s,\"select\",[],n,a,null)||this;return c._app=e,c.config=r,c.deepLinker=u,c._multi=!1,c._texts=[],c._text=\"\",c._compareWith=l.g,c.cancelText=\"Cancel\",c.okText=\"OK\",c.selectOptions={},c.interface=\"\",c.selectedText=\"\",c.ionCancel=new i.l,c}return c(e,t),Object.defineProperty(e.prototype,\"compareWith\",{set:function(t){if(\"function\"!=typeof t)throw new Error(\"compareWith must be a function, but received \"+JSON.stringify(t));this._compareWith=t},enumerable:!0,configurable:!0}),e.prototype._click=function(t){t.preventDefault(),t.stopPropagation(),this.open(t)},e.prototype._keyup=function(){this.open()},e.prototype.getValues=function(){return Array.isArray(this._value)?this._value:[this._value]},e.prototype.open=function(t){var e=this;if(!this.isFocus()&&!this._disabled){var n=Object(l.b)(this.selectOptions);n.buttons=[{text:this.cancelText,role:\"cancel\",handler:function(){e.ionCancel.emit(e)}}],!n.title&&this._item&&(n.title=this._item.getLabelText());var i=this._options.toArray();\"action-sheet\"!==this.interface&&\"popover\"!==this.interface||!this._multi||(console.warn('Interface cannot be \"'+this.interface+'\" with a multi-value select. Using the \"alert\" interface.'),this.interface=\"alert\"),\"popover\"!==this.interface||t||(console.warn('Interface cannot be \"popover\" without UIEvent.'),this.interface=\"alert\");var a;if(\"action-sheet\"===this.interface){n.buttons=n.buttons.concat(i.map(function(t){return{role:t.selected?\"selected\":\"\",text:t.text,handler:function(){e.value=t.value,t.ionSelect.emit(t.value)}}}));var c=\"select-action-sheet\";n.cssClass=c+=n.cssClass?\" \"+n.cssClass:\"\",a=new r.a(this._app,n,this.config)}else if(\"popover\"===this.interface){var p=i.map(function(t){return{text:t.text,checked:t.selected,disabled:t.disabled,value:t.value,handler:function(){e.value=t.value,t.ionSelect.emit(t.value)}}}),h=\"select-popover\";a=new s.a(this._app,u.a,{options:p},{cssClass:h+=n.cssClass?\" \"+n.cssClass:\"\"},this.config,this.deepLinker),Object.defineProperty(t,\"target\",{value:t.currentTarget}),n.ev=t}else{this.interface=\"alert\",n.inputs=this._options.map(function(t){return{type:e._multi?\"checkbox\":\"radio\",label:t.text,value:t.value,checked:t.selected,disabled:t.disabled,handler:function(e){e.checked&&t.ionSelect.emit(t.value)}}});var f=\"select-alert\";a=new o.a(this._app,n,this.config),f+=this._multi?\" multiple-select-alert\":\" single-select-alert\",a.setCssClass(f+=n.cssClass?\" \"+n.cssClass:\"\"),a.addButton({text:this.okText,handler:function(t){return e.value=t}})}a.present(n),this._fireFocus(),a.onDidDismiss(function(){e._fireBlur(),e._overlay=void 0}),this._overlay=a}},e.prototype.close=function(){if(this._overlay&&this.isFocus())return this._overlay.dismiss()},Object.defineProperty(e.prototype,\"multiple\",{get:function(){return this._multi},set:function(t){this._multi=Object(l.o)(t)},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,\"text\",{get:function(){return this._multi?this._texts:this._texts.join()},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,\"options\",{set:function(t){this._options=t;0===this.getValues().length?this.writeValue(t.filter(function(t){return t.selected}).map(function(t){return t.value})):this._updateText()},enumerable:!0,configurable:!0}),e.prototype._inputShouldChange=function(t){return!Object(l.c)(this._value,t)},e.prototype._inputChangeEvent=function(){return this.value},e.prototype._updateText=function(){var t=this;this._texts.length=0,this._options&&this._options.forEach(function(e){e.selected=t.getValues().some(function(n){return t._compareWith(n,e.value)}),e.selected&&t._texts.push(e.text)}),this._text=this._texts.join(\", \")},e.prototype._inputUpdated=function(){this._updateText(),t.prototype._inputUpdated.call(this)},e}(a.a)},function(t,e,n){\"use strict\";n.d(e,\"a\",function(){return i});n(33),n(4);var i=function(){function t(t,e){this.navParams=t,this.viewController=e}return Object.defineProperty(t.prototype,\"value\",{get:function(){var t=this.options.find(function(t){return t.checked});return t?t.value:void 0},set:function(t){var e=this.options.find(function(e){return e.value===t});e&&e.handler&&e.handler(),this.viewController.dismiss(t)},enumerable:!0,configurable:!0}),t.prototype.ngOnInit=function(){this.options=this.navParams.data.options},t}()},function(t,e,n){\"use strict\";n.d(e,\"a\",function(){return o});n(2);var i=n(142),r=this&&this.__extends||function(){var t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n])};return function(e,n){function i(){this.constructor=e}t(e,n),e.prototype=null===n?Object.create(n):(i.prototype=n.prototype,new i)}}(),o=function(t){function e(e,n,i){return t.call(this,e,n,i)||this}return r(e,t),e}(i.a)},function(t,e,n){\"use strict\";n.d(e,\"a\",function(){return i});n(73);var i=function(){function t(t,e,n){this._slides=n,e.setElementClass(t.nativeElement,\"swiper-slide\",!0),n.update(10)}return t.prototype.ngOnDestroy=function(){this._slides.update(10)},t}()},function(t,e,n){\"use strict\";n.d(e,\"a\",function(){return s});n(1);var i=n(29),r=n(18),o=this&&this.__extends||function(){var t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n])};return function(e,n){function i(){this.constructor=e}t(e,n),e.prototype=null===n?Object.create(n):(i.prototype=n.prototype,new i)}}(),s=function(t){function e(e,n,i){var r=t.call(this,e,n,i,\"spinner\")||this;return r._dur=null,r._paused=!1,r}return o(e,t),Object.defineProperty(e.prototype,\"name\",{get:function(){return this._name},set:function(t){this._name=t,this.load()},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,\"duration\",{get:function(){return this._dur},set:function(t){this._dur=t,this.load()},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,\"paused\",{get:function(){return this._paused},set:function(t){this._paused=Object(r.o)(t)},enumerable:!0,configurable:!0}),e.prototype.ngOnInit=function(){this._init=!0,this.load()},e.prototype.load=function(){if(this._init){this._l=[],this._c=[];var t=this._name||this._config.get(\"spinner\",\"ios\"),e=a[t];if(e){if(e.lines)for(var n=0,i=e.lines;n<i;n++)this._l.push(this._loadEle(e,n,i));else if(e.circles)for(var n=0,i=e.circles;n<i;n++)this._c.push(this._loadEle(e,n,i));this.setElementClass(\"spinner-\"+t,!0),this.setElementClass(\"spinner-\"+this._mode+\"-\"+t,!0)}}},e.prototype._loadEle=function(t,e,n){var i=this._dur||t.dur,r=t.fn(i,e,n);return r.style.animationDuration=i+\"ms\",r},e}(i.a),a={ios:{dur:1e3,lines:12,fn:function(t,e,n){var i=\"rotate(\"+(30*e+(e<6?180:-180))+\"deg)\",r=-(t-t/n*e)+\"ms\";return{y1:17,y2:29,style:{transform:i,webkitTransform:i,animationDelay:r,webkitAnimationDelay:r}}}},\"ios-small\":{dur:1e3,lines:12,fn:function(t,e,n){var i=\"rotate(\"+(30*e+(e<6?180:-180))+\"deg)\",r=-(t-t/n*e)+\"ms\";return{y1:12,y2:20,style:{transform:i,webkitTransform:i,animationDelay:r,webkitAnimationDelay:r}}}},bubbles:{dur:1e3,circles:9,fn:function(t,e,n){var i=-(t-t/n*e)+\"ms\";return{r:5,style:{top:9*Math.sin(2*Math.PI*e/n)+\"px\",left:9*Math.cos(2*Math.PI*e/n)+\"px\",animationDelay:i,webkitAnimationDelay:i}}}},circles:{dur:1e3,circles:8,fn:function(t,e,n){var i=-(t-t/n*e)+\"ms\";return{r:5,style:{top:9*Math.sin(2*Math.PI*e/n)+\"px\",left:9*Math.cos(2*Math.PI*e/n)+\"px\",animationDelay:i,webkitAnimationDelay:i}}}},crescent:{dur:750,circles:1,fn:function(){return{r:26,style:{}}}},dots:{dur:750,circles:3,fn:function(t,e){var n=-110*e+\"ms\";return{r:6,style:{left:9-9*e+\"px\",animationDelay:n,webkitAnimationDelay:n}}}}}},function(t,e,n){\"use strict\";n.d(e,\"a\",function(){return i});n(6);var i=function(){function t(t,e){this._elementRef=t,this._dom=e}return t.prototype.select=function(t){var e=this;if(t){var n=this._dom;n.read(function(){var i=t.btn.getNativeElement(),r=\"translate3d(\"+i.offsetLeft+\"px,0,0) scaleX(\"+i.offsetWidth+\")\";n.write(function(){var t=e._elementRef.nativeElement;t.style[n.plt.Css.transform]=r,e._init||(e._init=!0,n.write(function(){t.classList.add(\"animate\")},80))})},32)}},t}()},function(t,e,n){\"use strict\";n.d(e,\"a\",function(){return s});var i=n(0),r=(n(1),n(29)),o=this&&this.__extends||function(){var t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n])};return function(e,n){function i(){this.constructor=e}t(e,n),e.prototype=null===n?Object.create(n):(i.prototype=n.prototype,new i)}}(),s=function(t){function e(e,n,r){var o=t.call(this,e,n,r)||this;return o.ionSelect=new i.l,o.disHover=!1===e.get(\"hoverCSS\"),o.layout=e.get(\"tabsLayout\"),o}return o(e,t),e.prototype.ngOnInit=function(){this.tab.btn=this,this.layout=this.tab.parent.tabsLayout||this.layout,this.hasTitle=!!this.tab.tabTitle,this.hasIcon=!!this.tab.tabIcon&&\"icon-hide\"!==this.layout,this.hasTitleOnly=this.hasTitle&&!this.hasIcon,this.hasIconOnly=this.hasIcon&&!this.hasTitle,this.hasBadge=!!this.tab.tabBadge},e.prototype.onClick=function(){return this.ionSelect.emit(this.tab),!1},e.prototype.updateHref=function(t){this.setElementAttribute(\"href\",t)},e}(r.a)},function(t,e,n){\"use strict\";n.d(e,\"a\",function(){return i});n(1),n(33),n(4);var i=function(){function t(t,e,n,i,o){this._viewCtrl=t,this._config=e,this._elementRef=n,this.dismissTimeout=void 0,o.setElementClass(n.nativeElement,\"toast-\"+e.get(\"mode\"),!0),this.d=i.data,this.d.cssClass&&this.d.cssClass.split(\" \").forEach(function(t){\"\"!==t.trim()&&o.setElementClass(n.nativeElement,t,!0)}),this.id=++r,this.d.message&&(this.hdrId=\"toast-hdr-\"+this.id)}return t.prototype.ngAfterViewInit=function(){var t=this;this.d.duration&&(this.dismissTimeout=setTimeout(function(){t.dismiss(\"backdrop\")},this.d.duration)),this.enabled=!0},t.prototype.ionViewDidEnter=function(){var t=document.activeElement;t&&t.blur();var e=this._elementRef.nativeElement.querySelector(\"button\");e&&e.focus()},t.prototype.cbClick=function(){this.enabled&&this.dismiss(\"close\")},t.prototype.dismiss=function(t){return clearTimeout(this.dismissTimeout),this.dismissTimeout=void 0,this._viewCtrl.dismiss(null,t,{disableApp:!1})},t}(),r=-1},function(t,e,n){\"use strict\";n.d(e,\"a\",function(){return r});n(1);var i=n(186),r=function(){function t(t,e){this._app=t,this.config=e}return t.prototype.create=function(t){return void 0===t&&(t={}),new i.a(this._app,t,this.config)},t}()},function(t,e,n){\"use strict\";n.d(e,\"a\",function(){return i});var i=function(){return function(){}}()},function(t,e,n){\"use strict\";n.d(e,\"a\",function(){return o});n(1);var i=n(29),r=this&&this.__extends||function(){var t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n])};return function(e,n){function i(){this.constructor=e}t(e,n),e.prototype=null===n?Object.create(n):(i.prototype=n.prototype,new i)}}(),o=function(t){function e(e,n,i){return t.call(this,e,n,i,\"text\")||this}return r(e,t),e}(i.a)},function(t,e,n){\"use strict\";var i=n(66).root.Symbol;e.rxSubscriber=\"function\"==typeof i&&\"function\"==typeof i.for?i.for(\"rxSubscriber\"):\"@@rxSubscriber\",e.$$rxSubscriber=e.rxSubscriber},function(t,e,n){\"use strict\";var i=n(66),r=n(205),o=n(206),s=n(157),a=n(42),l=n(207),u=n(208),c=n(160);e.subscribeToResult=function(t,e,n,p){var h=new u.InnerSubscriber(t,n,p);if(h.closed)return null;if(e instanceof a.Observable)return e._isScalar?(h.next(e.value),h.complete(),null):(h.syncErrorThrowable=!0,e.subscribe(h));if(r.isArrayLike(e)){for(var f=0,d=e.length;f<d&&!h.closed;f++)h.next(e[f]);h.closed||h.complete()}else{if(o.isPromise(e))return e.then(function(t){h.closed||(h.next(t),h.complete())},function(t){return h.error(t)}).then(null,function(t){i.root.setTimeout(function(){throw t})}),h;if(e&&\"function\"==typeof e[l.iterator])for(var _=e[l.iterator]();;){var v=_.next();if(v.done){h.complete();break}if(h.next(v.value),h.closed)break}else if(e&&\"function\"==typeof e[c.observable]){var y=e[c.observable]();if(\"function\"==typeof y.subscribe)return y.subscribe(new u.InnerSubscriber(t,n,p));h.error(new TypeError(\"Provided object does not correctly implement Symbol.observable\"))}else{var m=\"You provided \"+(s.isObject(e)?\"an invalid object\":\"'\"+e+\"'\")+\" where a stream was expected. You can provide an Observable, Promise, Array, or Iterable.\";h.error(new TypeError(m))}}return null}},function(t,e,n){\"use strict\";var i=n(3).__extends,r=n(58);e.OuterSubscriber=function(t){function e(){t.apply(this,arguments)}return i(e,t),e.prototype.notifyNext=function(t,e,n,i,r){this.destination.next(e)},e.prototype.notifyError=function(t,e){this.destination.error(t)},e.prototype.notifyComplete=function(t){this.destination.complete()},e}(r.Subscriber)},function(t,e,n){\"use strict\";n.d(e,\"a\",function(){return o});n(5),n(1),n(31),n(6),n(15);var i=n(87),r=(n(2),n(37),this&&this.__extends||function(){var t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n])};return function(e,n){function i(){this.constructor=e}t(e,n),e.prototype=null===n?Object.create(n):(i.prototype=n.prototype,new i)}}()),o=function(t){function e(e,n,i,r,o,s,a,l,u,c,p,h,f){var d=t.call(this,null,e,n,i,r,o,s,a,l,u,c,h,f)||this;return d._isPortal=!0,d._init=!0,d.setViewport(p),e.viewDidLeave.subscribe(function(t){t.isOverlay||d.dismissPageChangeViews()}),d}return r(e,t),Object.defineProperty(e.prototype,\"_overlayPortal\",{set:function(t){this._zIndexOffset=t||0},enumerable:!0,configurable:!0}),e.prototype.ngOnDestroy=function(){this.destroy()},e.prototype.getType=function(){return\"portal\"},e.prototype.getSecondaryIdentifier=function(){return null},e}(i.a)},function(t,e,n){\"use strict\";n.d(e,\"a\",function(){return a});var i=n(166),r=n(18),o=n(35),s=this&&this.__extends||function(){var t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n])};return function(e,n){function i(){this.constructor=e}t(e,n),e.prototype=null===n?Object.create(n):(i.prototype=n.prototype,new i)}}(),a=function(t){function e(e,n,i){void 0===i&&(i={});var o=this;return Object(r.d)(i,{edge:\"start\",maxEdgeStart:50}),(o=t.call(this,e,n,i)||this).setEdges(i.edge),o.maxEdgeStart=i.maxEdgeStart,o}return s(e,t),e.prototype.setEdges=function(t){var e=this.plt.isRTL;this.edges=t.split(\" \").map(function(t){switch(t){case\"start\":return e?\"right\":\"left\";case\"end\":return e?\"left\":\"right\";default:return t}})},e.prototype.canStart=function(t){var e=this,n=Object(o.f)(t);return this._d=this.getContainerDimensions(),this.edges.every(function(t){return e._checkEdge(t,n)})},e.prototype.getContainerDimensions=function(){var t=this.plt;return{left:0,top:0,width:t.width(),height:t.height()}},e.prototype._checkEdge=function(t,e){var n=this._d,i=this.maxEdgeStart;switch(t){case\"left\":return e.x<=n.left+i;case\"right\":return e.x>=n.width-i;case\"top\":return e.y<=n.top+i;case\"bottom\":return e.y>=n.height-i}return!1},e}(i.a)},function(t,e,n){\"use strict\";var i=n(89),r=n(36),o=n(59),s=this&&this.__extends||function(){var t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n])};return function(e,n){function i(){this.constructor=e}t(e,n),e.prototype=null===n?Object.create(n):(i.prototype=n.prototype,new i)}}(),a=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return s(e,t),e.prototype.init=function(){var t=this.enteringView.pageRef().nativeElement,e=new r.a(this.plt,t.querySelector(\"ion-backdrop\")),n=new r.a(this.plt,t.querySelector(\".action-sheet-wrapper\"));e.fromTo(\"opacity\",.01,.4),n.fromTo(\"translateY\",\"100%\",\"0%\"),this.easing(\"cubic-bezier(.36,.66,.04,1)\").duration(400).add(e).add(n)},e}(o.a),l=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return s(e,t),e.prototype.init=function(){var t=this.leavingView.pageRef().nativeElement,e=new r.a(this.plt,t.querySelector(\"ion-backdrop\")),n=new r.a(this.plt,t.querySelector(\".action-sheet-wrapper\"));e.fromTo(\"opacity\",.4,0),n.fromTo(\"translateY\",\"0%\",\"100%\"),this.easing(\"cubic-bezier(.36,.66,.04,1)\").duration(300).add(e).add(n)},e}(o.a),u=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return s(e,t),e.prototype.init=function(){var t=this.enteringView.pageRef().nativeElement,e=new r.a(this.plt,t.querySelector(\"ion-backdrop\")),n=new r.a(this.plt,t.querySelector(\".action-sheet-wrapper\"));e.fromTo(\"opacity\",.01,.26),n.fromTo(\"translateY\",\"100%\",\"0%\"),this.easing(\"cubic-bezier(.36,.66,.04,1)\").duration(400).add(e).add(n)},e}(o.a),c=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return s(e,t),e.prototype.init=function(){var t=this.leavingView.pageRef().nativeElement,e=new r.a(this.plt,t.querySelector(\"ion-backdrop\")),n=new r.a(this.plt,t.querySelector(\".action-sheet-wrapper\"));e.fromTo(\"opacity\",.26,0),n.fromTo(\"translateY\",\"0%\",\"100%\"),this.easing(\"cubic-bezier(.36,.66,.04,1)\").duration(450).add(e).add(n)},e}(o.a),p=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return s(e,t),e.prototype.init=function(){var t=this.enteringView.pageRef().nativeElement,e=new r.a(this.plt,t.querySelector(\"ion-backdrop\")),n=new r.a(this.plt,t.querySelector(\".action-sheet-wrapper\"));e.fromTo(\"opacity\",.01,.16),n.fromTo(\"translateY\",\"100%\",\"0%\"),this.easing(\"cubic-bezier(.36,.66,.04,1)\").duration(400).add(e).add(n)},e}(o.a),h=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return s(e,t),e.prototype.init=function(){var t=this.leavingView.pageRef().nativeElement,e=new r.a(this.plt,t.querySelector(\"ion-backdrop\")),n=new r.a(this.plt,t.querySelector(\".action-sheet-wrapper\"));e.fromTo(\"opacity\",.1,0),n.fromTo(\"translateY\",\"0%\",\"100%\"),this.easing(\"cubic-bezier(.36,.66,.04,1)\").duration(450).add(e).add(n)},e}(o.a),f=n(18),d=n(4);n.d(e,\"a\",function(){return v});var _=this&&this.__extends||function(){var t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n])};return function(e,n){function i(){this.constructor=e}t(e,n),e.prototype=null===n?Object.create(n):(i.prototype=n.prototype,new i)}}(),v=function(t){function e(e,n,r){var o=this;return n.buttons=n.buttons||[],n.enableBackdropDismiss=!Object(f.l)(n.enableBackdropDismiss)||!!n.enableBackdropDismiss,o=t.call(this,i.a,n,null)||this,o._app=e,o.isOverlay=!0,r.setTransition(\"action-sheet-slide-in\",a),r.setTransition(\"action-sheet-slide-out\",l),r.setTransition(\"action-sheet-md-slide-in\",u),r.setTransition(\"action-sheet-md-slide-out\",c),r.setTransition(\"action-sheet-wp-slide-in\",p),r.setTransition(\"action-sheet-wp-slide-out\",h),o}return _(e,t),e.prototype.getTransitionName=function(t){return this._nav&&this._nav.config.get(\"actionSheet\"+(\"back\"===t?\"Leave\":\"Enter\"))},e.prototype.setTitle=function(t){return this.data.title=t,this},e.prototype.setSubTitle=function(t){return this.data.subTitle=t,this},e.prototype.addButton=function(t){return this.data.buttons.push(t),this},e.prototype.present=function(t){return void 0===t&&(t={}),t.minClickBlockDuration=t.minClickBlockDuration||400,this._app.present(this,t)},e}(d.a)},function(t,e,n){\"use strict\";var i=n(91),r=n(36),o=n(59),s=this&&this.__extends||function(){var t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n])};return function(e,n){function i(){this.constructor=e}t(e,n),e.prototype=null===n?Object.create(n):(i.prototype=n.prototype,new i)}}(),a=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return s(e,t),e.prototype.init=function(){var t=this.enteringView.pageRef().nativeElement,e=new r.a(this.plt,t.querySelector(\"ion-backdrop\")),n=new r.a(this.plt,t.querySelector(\".alert-wrapper\"));n.fromTo(\"opacity\",.01,1).fromTo(\"scale\",1.1,1),e.fromTo(\"opacity\",.01,.3),this.easing(\"ease-in-out\").duration(200).add(e).add(n)},e}(o.a),l=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return s(e,t),e.prototype.init=function(){var t=this.leavingView.pageRef().nativeElement,e=new r.a(this.plt,t.querySelector(\"ion-backdrop\")),n=new r.a(this.plt,t.querySelector(\".alert-wrapper\"));n.fromTo(\"opacity\",.99,0).fromTo(\"scale\",1,.9),e.fromTo(\"opacity\",.3,0),this.easing(\"ease-in-out\").duration(200).add(e).add(n)},e}(o.a),u=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return s(e,t),e.prototype.init=function(){var t=this.enteringView.pageRef().nativeElement,e=new r.a(this.plt,t.querySelector(\"ion-backdrop\")),n=new r.a(this.plt,t.querySelector(\".alert-wrapper\"));n.fromTo(\"opacity\",.01,1).fromTo(\"scale\",1.1,1),e.fromTo(\"opacity\",.01,.5),this.easing(\"ease-in-out\").duration(200).add(e).add(n)},e}(o.a),c=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return s(e,t),e.prototype.init=function(){var t=this.leavingView.pageRef().nativeElement,e=new r.a(this.plt,t.querySelector(\"ion-backdrop\")),n=new r.a(this.plt,t.querySelector(\".alert-wrapper\"));n.fromTo(\"opacity\",.99,0).fromTo(\"scale\",1,.9),e.fromTo(\"opacity\",.5,0),this.easing(\"ease-in-out\").duration(200).add(e).add(n)},e}(o.a),p=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return s(e,t),e.prototype.init=function(){var t=this.enteringView.pageRef().nativeElement,e=new r.a(this.plt,t.querySelector(\"ion-backdrop\")),n=new r.a(this.plt,t.querySelector(\".alert-wrapper\"));n.fromTo(\"opacity\",.01,1).fromTo(\"scale\",1.3,1),e.fromTo(\"opacity\",.01,.5),this.easing(\"cubic-bezier(0,0,0.05,1)\").duration(200).add(e).add(n)},e}(o.a),h=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return s(e,t),e.prototype.init=function(){var t=this.leavingView.pageRef().nativeElement,e=new r.a(this.plt,t.querySelector(\"ion-backdrop\")),n=new r.a(this.plt,t.querySelector(\".alert-wrapper\"));n.fromTo(\"opacity\",.99,0).fromTo(\"scale\",1,1.3),e.fromTo(\"opacity\",.5,0),this.easing(\"ease-out\").duration(150).add(e).add(n)},e}(o.a),f=n(18),d=n(4);n.d(e,\"a\",function(){return v});var _=this&&this.__extends||function(){var t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n])};return function(e,n){function i(){this.constructor=e}t(e,n),e.prototype=null===n?Object.create(n):(i.prototype=n.prototype,new i)}}(),v=function(t){function e(e,n,r){void 0===n&&(n={});var o=this;return n.inputs=n.inputs||[],n.buttons=n.buttons||[],n.enableBackdropDismiss=!Object(f.l)(n.enableBackdropDismiss)||!!n.enableBackdropDismiss,o=t.call(this,i.a,n,null)||this,o._app=e,o.isOverlay=!0,r.setTransition(\"alert-pop-in\",a),r.setTransition(\"alert-pop-out\",l),r.setTransition(\"alert-md-pop-in\",u),r.setTransition(\"alert-md-pop-out\",c),r.setTransition(\"alert-wp-pop-in\",p),r.setTransition(\"alert-wp-pop-out\",h),o}return _(e,t),e.prototype.getTransitionName=function(t){return this._nav&&this._nav.config.get(\"back\"===t?\"alertLeave\":\"alertEnter\")},e.prototype.setTitle=function(t){return this.data.title=t,this},e.prototype.setSubTitle=function(t){return this.data.subTitle=t,this},e.prototype.setMessage=function(t){return this.data.message=t,this},e.prototype.addInput=function(t){return this.data.inputs.push(t),this},e.prototype.addButton=function(t){return this.data.buttons.push(t),this},e.prototype.setCssClass=function(t){return this.data.cssClass=t,this},e.prototype.setMode=function(t){this.data.mode=t},e.prototype.present=function(t){return void 0===t&&(t={}),t.minClickBlockDuration=t.minClickBlockDuration||400,this._app.present(this,t)},e}(d.a)},function(t,e,n){\"use strict\";n.d(e,\"a\",function(){return i});var i=function(){return function(){}}()},function(t,e,n){\"use strict\";n(6)},function(t,e,n){\"use strict\";n.d(e,\"a\",function(){return o});n(1);var i=n(29),r=this&&this.__extends||function(){var t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n])};return function(e,n){function i(){this.constructor=e}t(e,n),e.prototype=null===n?Object.create(n):(i.prototype=n.prototype,new i)}}(),o=function(t){function e(e,n,i){return t.call(this,e,n,i,\"item-divider\")||this}return r(e,t),e}(i.a)},function(t,e,n){\"use strict\";n.d(e,\"a\",function(){return i});var i=function(){return function(){}}()},function(t,e,n){\"use strict\";n.d(e,\"a\",function(){return i});var i=function(){function t(t){this._menu=t}return t.prototype.close=function(){var t=this._menu.get(this.menuClose);t&&t.close()},t}()},function(t,e,n){\"use strict\";n.d(e,\"a\",function(){return i});n(10),n(4);var i=function(){function t(t,e,n,i){this._menu=t,this._viewCtrl=e,this._button=n,this._isButton=!!n,this._inNavbar=!!i}return t.prototype.ngAfterContentInit=function(){this._isButton&&this._button._setClass(\"menutoggle\",!0)},t.prototype.toggle=function(){var t=this._menu.get(this.menuToggle);t&&t.toggle()},Object.defineProperty(t.prototype,\"isHidden\",{get:function(){var t=this._menu.get(this.menuToggle);if(this._inNavbar&&this._viewCtrl){if(!t||!t._canOpen())return!0;if(this._viewCtrl.isFirst())return!1;if(t)return!t.persistent}return!1},enumerable:!0,configurable:!0}),t}()},function(t,e,n){\"use strict\";n.d(e,\"a\",function(){return r});var i=n(0),r=function(){function t(t){this._compiler=t}return t.prototype.load=function(t,e){return this._compiler instanceof i.h?function(t,e){return n(180)(t).then(function(n){var i=n[e];if(!i)throw new Error(\"Module \"+t+\" does not export \"+e);return i})}(t,e):function(t,e,i){return i||(i=\"default\"),n(180)(e).then(function(n){var r=n[i];if(!r)throw new Error(\"Module \"+e+\" does not export \"+i);return t.compileModuleAsync(r)})}(this._compiler,t,e)},t}()},function(t,e,n){\"use strict\";n(7)},function(t,e,n){\"use strict\";n(7)},function(t,e,n){\"use strict\";var i=n(179),r=n(18),o=n(108),s=n(36),a=n(67),l=this&&this.__extends||function(){var t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n])};return function(e,n){function i(){this.constructor=e}t(e,n),e.prototype=null===n?Object.create(n):(i.prototype=n.prototype,new i)}}(),u=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return l(e,t),e.prototype.mdPositionView=function(t,e){var n=\"top\",i=\"left\",r=t.querySelector(\".popover-wrapper\"),o=t.querySelector(\".popover-content\"),s=o.getBoundingClientRect(),a=s.width,l=s.height,u=this.plt.width(),c=this.plt.height(),p=e&&e.target&&e.target.getBoundingClientRect(),h=p&&\"top\"in p?p.top:c/2-l/2,f=p&&p.height||0,d={top:h,left:p&&\"left\"in p?p.left:u/2-a/2};d.left<_?d.left=_:a+_+d.left>u&&(d.left=u-a-_,i=\"right\"),h+f+l>c&&h-l>0?(d.top=h-l,t.className=t.className+\" popover-bottom\",n=\"bottom\"):h+f+l>c&&(o.style.bottom=_+\"px\"),o.style.top=d.top+\"px\",o.style.left=d.left+\"px\",o.style[this.plt.Css.transformOrigin]=n+\" \"+i,r.style.opacity=\"1\"},e.prototype.iosPositionView=function(t,e){var n=\"top\",i=\"left\",r=t.querySelector(\".popover-wrapper\"),o=t.querySelector(\".popover-content\"),s=o.getBoundingClientRect(),a=s.width,l=s.height,u=this.plt.width(),c=this.plt.height(),p=e&&e.target&&e.target.getBoundingClientRect(),h=p&&\"top\"in p?p.top:c/2-l/2,f=p&&\"left\"in p?p.left:u/2,_=p&&p.width||0,v=p&&p.height||0,y=t.querySelector(\".popover-arrow\"),m=y.getBoundingClientRect(),g=m.width,b=m.height;p||(y.style.display=\"none\");var w={top:h+v,left:f+_/2-g/2},C={top:h+v+(b-1),left:f+_/2-a/2},O=!1,S=!1;C.left<d+25?(O=!0,C.left=d):a+d+C.left+25>u&&(S=!0,C.left=u-a-d,i=\"right\"),h+v+l>c&&h-l>0?(w.top=h-(b+1),C.top=h-l-(b-1),t.className=t.className+\" popover-bottom\",n=\"bottom\"):h+v+l>c&&(o.style.bottom=d+\"%\"),y.style.top=w.top+\"px\",y.style.left=w.left+\"px\",o.style.top=C.top+\"px\",o.style.left=C.left+\"px\",O&&(CSS.supports(\"left\",\"constant(safe-area-inset-left)\")?o.style.left=\"calc(\"+C.left+\"px + constant(safe-area-inset-left)\":CSS.supports(\"left\",\"env(safe-area-inset-left)\")&&(o.style.left=\"calc(\"+C.left+\"px + env(safe-area-inset-left)\")),S&&(CSS.supports(\"right\",\"constant(safe-area-inset-right)\")?o.style.left=\"calc(\"+C.left+\"px - constant(safe-area-inset-right)\":CSS.supports(\"right\",\"env(safe-area-inset-right)\")&&(o.style.left=\"calc(\"+C.left+\"px - env(safe-area-inset-right)\")),o.style[this.plt.Css.transformOrigin]=n+\" \"+i,r.style.opacity=\"1\"},e}(a.a),c=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return l(e,t),e.prototype.init=function(){var t=this.enteringView.pageRef().nativeElement,e=new s.a(this.plt,t.querySelector(\"ion-backdrop\")),n=new s.a(this.plt,t.querySelector(\".popover-wrapper\"));n.fromTo(\"opacity\",.01,1),e.fromTo(\"opacity\",.01,.08),this.easing(\"ease\").duration(100).add(e).add(n)},e.prototype.play=function(){var e=this;this.plt.raf(function(){e.iosPositionView(e.enteringView.pageRef().nativeElement,e.opts.ev),t.prototype.play.call(e)})},e}(u),p=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return l(e,t),e.prototype.init=function(){var t=this.leavingView.pageRef().nativeElement,e=new s.a(this.plt,t.querySelector(\"ion-backdrop\")),n=new s.a(this.plt,t.querySelector(\".popover-wrapper\"));n.fromTo(\"opacity\",.99,0),e.fromTo(\"opacity\",.08,0),this.easing(\"ease\").duration(500).add(e).add(n)},e}(u),h=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return l(e,t),e.prototype.init=function(){var t=this.enteringView.pageRef().nativeElement,e=new s.a(this.plt,t.querySelector(\".popover-content\")),n=new s.a(this.plt,t.querySelector(\".popover-viewport\"));e.fromTo(\"scale\",.001,1),n.fromTo(\"opacity\",.01,1),this.easing(\"cubic-bezier(0.36,0.66,0.04,1)\").duration(300).add(e).add(n)},e.prototype.play=function(){var e=this;this.plt.raf(function(){e.mdPositionView(e.enteringView.pageRef().nativeElement,e.opts.ev),t.prototype.play.call(e)})},e}(u),f=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return l(e,t),e.prototype.init=function(){var t=this.leavingView.pageRef().nativeElement,e=new s.a(this.plt,t.querySelector(\".popover-wrapper\"));e.fromTo(\"opacity\",.99,0),this.easing(\"ease\").duration(500).fromTo(\"opacity\",.01,1).add(e)},e}(u),d=2,_=12,v=n(4),y=this&&this.__extends||function(){var t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n])};return function(e,n){function i(){this.constructor=e}t(e,n),e.prototype=null===n?Object.create(n):(i.prototype=n.prototype,new i)}}(),m=function(t){function e(e,n,i,s,a){void 0===i&&(i={}),void 0===s&&(s={});var l=this;return s.showBackdrop=!Object(r.l)(s.showBackdrop)||!!s.showBackdrop,s.enableBackdropDismiss=!Object(r.l)(s.enableBackdropDismiss)||!!s.enableBackdropDismiss,i.component=n,i.opts=s,l=t.call(this,o.a,i,null)||this,l._app=e,l.isOverlay=!0,a.setTransition(\"popover-pop-in\",c),a.setTransition(\"popover-pop-out\",p),a.setTransition(\"popover-md-pop-in\",h),a.setTransition(\"popover-md-pop-out\",f),l}return y(e,t),e.prototype.getTransitionName=function(t){return this._nav&&this._nav.config.get(\"back\"===t?\"popoverLeave\":\"popoverEnter\")},e.prototype.present=function(t){return void 0===t&&(t={}),this._app.present(this,t)},e}(v.a);n.d(e,\"a\",function(){return b});var g=this&&this.__extends||function(){var t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n])};return function(e,n){function i(){this.constructor=e}t(e,n),e.prototype=null===n?Object.create(n):(i.prototype=n.prototype,new i)}}(),b=function(t){function e(e,n,i,r,o,s){void 0===r&&(r={});var a=t.call(this,e,n,o,s)||this;return a.data=i,a.opts=r,a.isOverlay=!0,a}return g(e,t),e.prototype.getImplementation=function(){return new m(this._app,this._component,this.data,this.opts,this._config)},e}(i.a)},function(t,e,n){\"use strict\";n(15),n(18),n(2),n(35),n(51)},function(t,e,n){\"use strict\";n.d(e,\"a\",function(){return i});var i=function(){function t(t,e,n){if(this._plt=e,this.zone=n,this.isMatch=!1,t){this.conditions=t.replace(/\\s/g,\"\").split(\",\");for(var i=0;i<this.conditions.length;i++)if(this.conditions[i]&&e.is(this.conditions[i]))return void(this.isMatch=!0);this.orientation()&&(this.resizeObs=e.resize.subscribe(this.orientation.bind(this)))}}return t.prototype.orientation=function(){for(var t=0;t<this.conditions.length;t++){if(\"portrait\"===this.conditions[t])return this.isMatch=this._plt.isPortrait(),!0;if(\"landscape\"===this.conditions[t])return this.isMatch=this._plt.isLandscape(),!0}return!1},t.prototype.ngOnDestroy=function(){this.resizeObs&&this.resizeObs.unsubscribe(),this.resizeObs=null},t}()},function(t,e,n){\"use strict\"},function(t,e,n){\"use strict\"},function(t,e,n){\"use strict\"},function(t,e,n){\"use strict\";function i(t,e){if(!e||!e.parentNode)return!0;if(!t)return!1;if(t.defaultPrevented)return!0;for(var n=t.target,i=0;i<4&&n;i++){if(n.hasAttribute(\"disable-activated\"))return!0;n=n.parentElement}return!1}function r(t){for(var e=t,n=0;n<10&&e;n++){if(function(t){if(d.indexOf(t.tagName)>-1)return!0;for(var e=0,n=_.length;e<n;e++)if(t.hasAttribute&&t.hasAttribute(_[e]))return!0;return!1}(e))return e;e=e.parentElement}return null}n(0);var o=function(){function t(t,e,n){this.app=t,this.dom=n,this._queue=[],this._active=[],this.activatedDelay=s,this.clearDelay=a,this._css=e.get(\"activatedClass\",\"activated\")}return t.prototype.clickAction=function(t,e,n){if(!i(t,e)){this._scheduleClear(),this._queue.length=0;for(var r=0;r<this._active.length;r++)this._active[r].classList.remove(this._css);this._active.length=0,e&&e.parentNode&&(this._active.push(e),e.classList.add(this._css))}},t.prototype.downAction=function(t,e,n){var r=this;i(t,e)||(this.unscheduleClear(),this.deactivate(!0),this._queue.push(e),this._activeDefer=this.dom.write(function(){r._activeDefer=null;for(var t,e=0;e<r._queue.length;e++)r._active.push(t=r._queue[e]),t.classList.add(r._css);r._queue.length=0},this.activatedDelay))},t.prototype.upAction=function(t,e,n){this._scheduleClear()},t.prototype._scheduleClear=function(){var t=this;this._clearDefer||(this._clearDefer=this.dom.write(function(){t.clearState(!0),t._clearDefer=null},this.clearDelay))},t.prototype.unscheduleClear=function(){this._clearDefer&&(this._clearDefer(),this._clearDefer=null)},t.prototype.clearState=function(t){var e=this;this.app.isEnabled()?this.deactivate(t):this.dom.write(function(){e.clearState(t)},600)},t.prototype.deactivate=function(t){this._clearDeferred(),this._queue.length=0;for(var e,n=0;n<this._active.length;n++)(e=this._active[n]).style[this.dom.plt.Css.transition]=t?\"\":\"none\",e.classList.remove(this._css);this._active.length=0},t.prototype._clearDeferred=function(){this._activeDefer&&(this._activeDefer(),this._activeDefer=null)},t}(),s=80,a=80,l=(n(5),n(1),n(6),n(15),n(2),n(35)),u=n(167),c=function(){function t(t,e,n){this.dom=n,this.highlight=new o(t,e,n)}return t.prototype.clickAction=function(t,e,n){this.highlight&&this.highlight.clickAction(t,e,n),this._clickAction(t,e,n)},t.prototype.downAction=function(t,e,n){this.highlight&&this.highlight.downAction(t,e,n),this._downAction(t,e,n)},t.prototype.upAction=function(t,e,n){this.highlight&&this.highlight.upAction(t,e,n),this._upAction(t,e,n)},t.prototype.clearState=function(t){this.highlight&&this.highlight.clearState(t)},t.prototype._downAction=function(t,e,n){if(!i(t,e))for(var r=e.childElementCount;r--;){var o=e.children[r];if(o.classList.contains(\"button-effect\")){var s=e.getBoundingClientRect();o.$top=s.top,o.$left=s.left,o.$width=s.width,o.$height=s.height;break}}},t.prototype._upAction=function(t,e,n){if(!Object(l.d)(6,n,Object(l.f)(t)))for(var i=e.childElementCount;i--;){var r=e.children[i];if(r.classList.contains(\"button-effect\")){this.startRippleEffect(r,e,n);break}}},t.prototype._clickAction=function(t,e,n){},t.prototype.startRippleEffect=function(t,e,n){if(n){var i=n.x-t.$left,r=n.y-t.$top,o=2*Math.max(Math.abs(t.$width-i),i),s=2*Math.max(Math.abs(t.$height-r),r),a=Math.min(Math.max(Math.hypot(o,s),64),240);e.hasAttribute(\"ion-item\")&&(a=Math.min(a,140)),i-=a/2,r-=a/2,i=Math.round(i),r=Math.round(r),a=Math.round(a);var l=this.dom.plt.Css;t.style.opacity=\"\",t.style[l.transform]=\"translate3d(\"+i+\"px, \"+r+\"px, 0px) scale(0.001)\",t.style[l.transition]=\"\";var u=Math.sqrt(t.$width+t.$height),c=Math.max(1600*Math.sqrt(u/p)+.5,260),h=Math.round(.7*c),f=Math.round(c-h),d=\"translate3d(\"+i+\"px, \"+r+\"px, 0px) scale(1)\",_=\"transform \"+(c=Math.round(c))+\"ms,opacity \"+h+\"ms \"+f+\"ms\";this.dom.write(function(){t.style.width=t.style.height=a+\"px\",t.style.opacity=\"0\",t.style[l.transform]=d,t.style[l.transition]=_},16)}},t}(),p=300,h=n(51);n.d(e,\"a\",function(){return f}),e.b=function(t,e,n,i,r){return function(){return new f(t,e,n,i,r)}};var f=function(){function t(t,e,n,i,r){this.plt=e,this.app=i,this.gestureCtrl=r,this.disableClick=0,this.events=new h.a(e);var s=t.get(\"activator\");\"ripple\"===s?this.activator=new c(i,t,n):\"highlight\"===s&&(this.activator=new o(i,t,n)),this.usePolyfill=t.getBoolean(\"tapPolyfill\");var a=e.doc();this.events.listen(a,\"click\",this.click.bind(this),{passive:!1,capture:!0}),this.pointerEvents=this.events.pointerEvents({element:a,pointerDown:this.pointerStart.bind(this),pointerMove:this.pointerMove.bind(this),pointerUp:this.pointerEnd.bind(this),passive:!0}),this.pointerEvents.mouseWait=y}return t.prototype.pointerStart=function(t){return!this.startCoord&&(!!this.app.isEnabled()&&(this.lastTouchEnd=0,this.dispatchClick=!0,this.plt.doc()===t.target?(this.startCoord=Object(l.f)(t),!0):(this.activatableEle=r(t.target),this.activatableEle?(this.startCoord=Object(l.f)(t),this.activator&&this.activator.downAction(t,this.activatableEle,this.startCoord),!0):(this.startCoord=null,!1))))},t.prototype.pointerMove=function(t){this.startCoord&&this.shouldCancelEvent(t)&&this.pointerCancel(t)},t.prototype.pointerEnd=function(t,e){if(this.dispatchClick&&this.startCoord){if(this.activator&&t.target!==this.plt.doc()){var n=r(t.target)||this.activatableEle;n&&this.activator.upAction(t,n,this.startCoord)}this.usePolyfill&&e===u.a&&this.app.isEnabled()&&this.handleTapPolyfill(t),this.startCoord=null,this.activatableEle=null}},t.prototype.pointerCancel=function(t){this.startCoord=null,this.activatableEle=null,this.dispatchClick=!1,this.activator&&this.activator.clearState(!1),this.pointerEvents.stop()},t.prototype.shouldCancelEvent=function(t){return this.app.isScrolling()||this.gestureCtrl.isCaptured()||Object(l.d)(v,this.startCoord,Object(l.f)(t))},t.prototype.click=function(t){if(this.shouldCancelClick(t))return t.preventDefault(),void t.stopPropagation();if(this.activator&&this.plt.doc()!==t.target){var e=r(t.target);e&&this.activator.clickAction(t,e,this.startCoord)}},t.prototype.shouldCancelClick=function(t){if(this.usePolyfill){if(!t.isIonicTap&&this.isDisabledNativeClick())return!0}else if(!this.dispatchClick)return!0;return!this.app.isEnabled()||!!this.gestureCtrl.isCaptured()},t.prototype.profileClickDelay=function(t){if(this.lastTouchEnd){var e=Date.now()-this.lastTouchEnd;e<100||console.warn(\"SLOW click dispatched. Delay(ms):\",e,t),this.lastTouchEnd=null}},t.prototype.handleTapPolyfill=function(t){var e=Object(l.f)(t);if(!Object(l.d)(v,this.startCoord,e))if(this.disableClick=Date.now()+y,this.app.isScrolling());else{var n=this.plt.doc().createEvent(\"MouseEvents\");n.initMouseEvent(\"click\",!0,!0,this.plt.win(),1,0,0,e.x,e.y,!1,!1,!1,!1,0,null),n.isIonicTap=!0,t.target.dispatchEvent(n)}},t.prototype.isDisabledNativeClick=function(){return this.disableClick>Date.now()},t}(),d=[\"A\",\"BUTTON\"],_=[\"tappable\",\"ion-button\"],v=100,y=2500},function(t,e,n){\"use strict\";n.d(e,\"a\",function(){return r}),e.b=function(t,e){return function(){return function(t,e){var n=new r,o=t.win(),s=t.doc();return t.timeout(function(){o.addEventListener(\"online\",function(t){n.publish(\"app:online\",t)},!1),o.addEventListener(\"offline\",function(t){n.publish(\"app:offline\",t)},!1),o.addEventListener(\"orientationchange\",function(t){n.publish(\"app:rotated\",t)}),o.addEventListener(\"statusTap\",function(){var n=s.elementFromPoint(t.width()/2,t.height()/2);if(n){var r=n.closest(\".scroll-content\");if(r){var o=r.style,a=new i.a(null,t,e);a._el=r,o.WebkitBackfaceVisibility=\"hidden\",o.WebkitTransform=\"translate3d(0,0,0)\",e.write(function(){function e(){o.overflow=\"\",o.WebkitBackfaceVisibility=\"\",o.WebkitTransform=\"\"}o.overflow=\"hidden\";var n=t.timeout(function(){e()},400);a.scrollTo(0,0,300).then(function(){t.cancelTimeout(n),e()})})}}})},2e3),n}(t,e)}};var i=n(169),r=function(){function t(){this._channels=[]}return t.prototype.subscribe=function(t){for(var e=this,n=[],i=1;i<arguments.length;i++)n[i-1]=arguments[i];this._channels[t]||(this._channels[t]=[]),n.forEach(function(n){e._channels[t].push(n)})},t.prototype.unsubscribe=function(t,e){void 0===e&&(e=null);var n=this._channels[t];if(!n)return!1;if(!e)return delete this._channels[t],!0;var i=n.indexOf(e);return!(i<0)&&(n.splice(i,1),n.length||delete this._channels[t],!0)},t.prototype.publish=function(t){for(var e=[],n=1;n<arguments.length;n++)e[n-1]=arguments[n];var i=this._channels[t];if(!i)return null;var r=[];return i.forEach(function(t){r.push(t.apply(void 0,e))}),r},t}()},function(t,e,n){\"use strict\";n.d(e,\"a\",function(){return s}),e.b=function(){return o};var i=n(0),r=n(185),o={core:{settings:{mode:\"md\",keyboardHeight:290}},mobile:{},phablet:{isMatch:function(t){var e=Math.min(t.width(),t.height()),n=Math.max(t.width(),t.height());return e>390&&e<520&&n>620&&n<800}},tablet:{isMatch:function(t){var e=Math.min(t.width(),t.height()),n=Math.max(t.width(),t.height());return e>460&&e<820&&n>780&&n<1400}},android:{superset:\"mobile\",subsets:[\"phablet\",\"tablet\"],settings:{activator:function(t){if(t.testNavigatorPlatform(\"linux\")){var e=t.matchUserAgentVersion(/Chrome\\/(\\d+).(\\d+)?/);if(e)return parseInt(e.major,10)<36||t.version().major<5?\"none\":\"ripple\";if(t.version().major<5)return\"none\"}return\"ripple\"},autoFocusAssist:\"immediate\",inputCloning:!0,scrollAssist:!0,hoverCSS:!1,keyboardHeight:300,mode:\"md\"},isMatch:function(t){return t.isPlatformMatch(\"android\",[\"android\",\"silk\"],[\"windows phone\"])},versionParser:function(t){return t.matchUserAgentVersion(/Android (\\d+).(\\d+)?/)}},ios:{superset:\"mobile\",subsets:[\"ipad\",\"iphone\"],settings:{autoFocusAssist:\"delay\",hideCaretOnScroll:!0,hoverCSS:!1,inputBlurring:r.c,inputCloning:r.c,keyboardHeight:250,mode:\"ios\",statusbarPadding:r.a,swipeBackEnabled:r.c,tapPolyfill:r.d,virtualScrollEventAssist:r.d,disableScrollAssist:r.c,scrollAssist:r.c,keyboardResizes:function(t){var e=t.win();return!(!e.Ionic||!0!==e.Ionic.keyboardResizes)}},isMatch:function(t){return t.isPlatformMatch(\"ios\",[\"iphone\",\"ipad\",\"ipod\"],[\"windows phone\"])},versionParser:function(t){return t.matchUserAgentVersion(/OS (\\d+)_(\\d+)?/)}},ipad:{superset:\"tablet\",settings:{keyboardHeight:500},isMatch:function(t){return t.isPlatformMatch(\"ipad\")}},iphone:{subsets:[\"phablet\"],isMatch:function(t){return t.isPlatformMatch(\"iphone\")}},windows:{superset:\"mobile\",subsets:[\"phablet\",\"tablet\"],settings:{mode:\"wp\",autoFocusAssist:\"immediate\",hoverCSS:!1},isMatch:function(t){return t.isPlatformMatch(\"windows\",[\"windows phone\"])},versionParser:function(t){return t.matchUserAgentVersion(/Windows Phone (\\d+).(\\d+)?/)}},cordova:{isEngine:!0,initialize:function(t){t.prepareReady=function(){t.windowLoad(function(e,n){n.addEventListener(\"deviceready\",function(){n.addEventListener(\"backbutton\",function(e){t.zone.run(function(){t.backButton.emit(e)})}),n.addEventListener(\"pause\",function(e){t.zone.run(function(){t.pause.emit(e)})}),n.addEventListener(\"resume\",function(e){t.zone.run(function(){t.resume.emit(e)})}),t.exitApp=function(){e.navigator.app.exitApp()},t.triggerReady(\"cordova\")})})}},isMatch:function(t){return Object(r.a)(t)}},electron:{superset:\"core\",initialize:function(t){t.prepareReady=function(){t.windowLoad(function(){t.triggerReady(\"electron\")})}},isMatch:function(t){return Object(r.b)(t)}}},s=new i.n(\"PLTCONFIG\")},function(t,e,n){\"use strict\";e.a=function(t){return function(){t.setModeConfig(\"ios\",i),t.setModeConfig(\"md\",r),t.setModeConfig(\"wp\",o)}};var i={activator:\"highlight\",actionSheetEnter:\"action-sheet-slide-in\",actionSheetLeave:\"action-sheet-slide-out\",alertEnter:\"alert-pop-in\",alertLeave:\"alert-pop-out\",backButtonText:\"Back\",backButtonIcon:\"ios-arrow-back\",iconMode:\"ios\",loadingEnter:\"loading-pop-in\",loadingLeave:\"loading-pop-out\",menuType:\"reveal\",modalEnter:\"modal-slide-in\",modalLeave:\"modal-slide-out\",pageTransition:\"ios-transition\",pickerEnter:\"picker-slide-in\",pickerLeave:\"picker-slide-out\",pickerRotateFactor:-.46,pickerScaleFactor:1,popoverEnter:\"popover-pop-in\",popoverLeave:\"popover-pop-out\",spinner:\"ios\",tabsHighlight:!1,tabsPlacement:\"bottom\",tabsHideOnSubPages:!1,toastEnter:\"toast-slide-in\",toastLeave:\"toast-slide-out\"},r={activator:\"ripple\",actionSheetEnter:\"action-sheet-md-slide-in\",actionSheetLeave:\"action-sheet-md-slide-out\",alertEnter:\"alert-md-pop-in\",alertLeave:\"alert-md-pop-out\",backButtonText:\"\",backButtonIcon:\"md-arrow-back\",iconMode:\"md\",loadingEnter:\"loading-md-pop-in\",loadingLeave:\"loading-md-pop-out\",menuType:\"overlay\",modalEnter:\"modal-md-slide-in\",modalLeave:\"modal-md-slide-out\",pageTransition:\"md-transition\",pickerEnter:\"picker-slide-in\",pickerLeave:\"picker-slide-out\",pickerRotateFactor:0,pickerScaleFactor:.81,popoverEnter:\"popover-md-pop-in\",popoverLeave:\"popover-md-pop-out\",spinner:\"crescent\",tabsHighlight:!1,tabsPlacement:\"bottom\",tabsHideOnSubPages:!1,toastEnter:\"toast-md-slide-in\",toastLeave:\"toast-md-slide-out\"},o={activator:\"highlight\",actionSheetEnter:\"action-sheet-wp-slide-in\",actionSheetLeave:\"action-sheet-wp-slide-out\",alertEnter:\"alert-wp-pop-in\",alertLeave:\"alert-wp-pop-out\",backButtonText:\"\",backButtonIcon:\"ios-arrow-back\",iconMode:\"ios\",loadingEnter:\"loading-wp-pop-in\",loadingLeave:\"loading-wp-pop-out\",menuType:\"overlay\",modalEnter:\"modal-md-slide-in\",modalLeave:\"modal-md-slide-out\",pageTransition:\"wp-transition\",pickerEnter:\"picker-slide-in\",pickerLeave:\"picker-slide-out\",pickerRotateFactor:0,pickerScaleFactor:.81,popoverEnter:\"popover-md-pop-in\",popoverLeave:\"popover-md-pop-out\",spinner:\"circles\",tabsHighlight:!1,tabsPlacement:\"top\",tabsHideOnSubPages:!0,toastEnter:\"toast-wp-slide-in\",toastLeave:\"toast-wp-slide-out\"}},function(t,e,n){\"use strict\";n.d(e,\"a\",function(){return o});var i=n(57),r=this&&this.__extends||function(){var t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n])};return function(e,n){function i(){this.constructor=e}t(e,n),e.prototype=null===n?Object.create(n):(i.prototype=n.prototype,new i)}}(),o=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return r(e,t),e.prototype.buildHammer=function(t){var e=new window.Hammer(t);for(var n in this.overrides)e.get(n).set(this.overrides[n]);return e},e}(i.g)},function(t,e,n){\"use strict\";function i(t){return r._22(0,[(t()(),r.Z(0,0,null,null,3,\"div\",[[\"class\",\"radio-icon\"]],[[2,\"radio-checked\",null]],null,null,null,null)),(t()(),r._20(-1,null,[\" \"])),(t()(),r.Z(2,0,null,null,0,\"div\",[[\"class\",\"radio-inner\"]],null,null,null,null,null)),(t()(),r._20(-1,null,[\" \"])),(t()(),r._20(-1,null,[\" \"])),(t()(),r.Z(5,0,null,null,2,\"button\",[[\"class\",\"item-cover\"],[\"ion-button\",\"item-cover\"],[\"role\",\"radio\"],[\"type\",\"button\"]],[[8,\"id\",0],[1,\"aria-checked\",0],[1,\"aria-labelledby\",0],[1,\"aria-disabled\",0]],null,null,o.b,o.a)),r.Y(6,1097728,null,0,s.a,[[8,\"item-cover\"],a.a,r.j,r.z],null,null),(t()(),r._20(-1,0,[\" \"]))],null,function(t,e){var n=e.component;t(e,0,0,n._checked);t(e,5,0,n.id,n._checked,n._labelId,n._disabled)})}n.d(e,\"a\",function(){return l}),e.b=i;var r=n(0),o=n(22),s=n(21),a=n(1),l=(n(71),n(19),n(64),r.X({encapsulation:2,styles:[],data:{}}))},function(t,e,n){\"use strict\";function i(t){return r._22(0,[r._12(null,0)],null,null)}n.d(e,\"a\",function(){return o}),e.b=i;var r=n(0),o=(n(69),n(2),r.X({encapsulation:2,styles:[],data:{}}))},function(t,e,n){\"use strict\";function i(t){return r._22(2,[(t()(),r.Z(0,0,null,null,1,\"ion-icon\",[[\"class\",\"fab-close-icon\"],[\"name\",\"close\"],[\"role\",\"img\"]],[[2,\"hide\",null]],null,null,null,null)),r.Y(1,147456,null,0,o.a,[s.a,r.j,r.z],{name:[0,\"name\"]},null),(t()(),r.Z(2,0,null,null,1,\"span\",[[\"class\",\"button-inner\"]],null,null,null,null,null)),r._12(null,0),(t()(),r.Z(4,0,null,null,0,\"div\",[[\"class\",\"button-effect\"]],null,null,null,null,null))],function(t,e){t(e,1,0,\"close\")},function(t,e){t(e,0,0,r._13(e,1)._hidden)})}n.d(e,\"a\",function(){return a}),e.b=i;var r=n(0),o=n(30),s=n(1),a=(n(54),r.X({encapsulation:2,styles:[],data:{}}))},function(t,e){var n;n=function(){return this}();try{n=n||Function(\"return this\")()||(0,eval)(\"this\")}catch(t){\"object\"==typeof window&&(n=window)}t.exports=n},function(t,e,n){\"use strict\";e.isFunction=function(t){return\"function\"==typeof t}},function(t,e,n){\"use strict\";e.isArray=Array.isArray||function(t){return t&&\"number\"==typeof t.length}},function(t,e,n){\"use strict\";e.isObject=function(t){return null!=t&&\"object\"==typeof t}},function(t,e,n){\"use strict\";e.errorObject={e:{}}},function(t,e,n){\"use strict\";e.empty={closed:!0,next:function(t){},error:function(t){throw t},complete:function(){}}},function(t,e,n){\"use strict\";function i(t){var e,n=t.Symbol;return\"function\"==typeof n?n.observable?e=n.observable:(e=n(\"observable\"),n.observable=e):e=\"@@observable\",e}var r=n(66);e.getSymbolObservable=i,e.observable=i(r.root),e.$$observable=e.observable},function(t,e,n){\"use strict\";function i(){for(var t=[],e=0;e<arguments.length;e++)t[e-0]=arguments[e];var n=Number.POSITIVE_INFINITY,i=null,l=t[t.length-1];return a.isScheduler(l)?(i=t.pop(),t.length>1&&\"number\"==typeof t[t.length-1]&&(n=t.pop())):\"number\"==typeof l&&(n=t.pop()),null===i&&1===t.length&&t[0]instanceof r.Observable?t[0]:s.mergeAll(n)(new o.ArrayObservable(t,i))}var r=n(42),o=n(201),s=n(203),a=n(163);e.merge=function(){for(var t=[],e=0;e<arguments.length;e++)t[e-0]=arguments[e];return function(e){return e.lift.call(i.apply(void 0,[e].concat(t)))}},e.mergeStatic=i},function(t,e,n){\"use strict\";var i=n(3).__extends,r=n(42);e.EmptyObservable=function(t){function e(e){t.call(this),this.scheduler=e}return i(e,t),e.create=function(t){return new e(t)},e.dispatch=function(t){t.subscriber.complete()},e.prototype._subscribe=function(t){var n=this.scheduler;if(n)return n.schedule(e.dispatch,0,{subscriber:t});t.complete()},e}(r.Observable)},function(t,e,n){\"use strict\";e.isScheduler=function(t){return t&&\"function\"==typeof t.schedule}},function(t,e,n){\"use strict\";var i=n(3).__extends,r=n(58);e.refCount=function(){return function(t){return t.lift(new o(t))}};var o=function(){function t(t){this.connectable=t}return t.prototype.call=function(t,e){var n=this.connectable;n._refCount++;var i=new s(t,n),r=e.subscribe(i);return i.closed||(i.connection=n.connect()),r},t}(),s=function(t){function e(e,n){t.call(this,e),this.connectable=n}return i(e,t),e.prototype._unsubscribe=function(){var t=this.connectable;if(t){this.connectable=null;var e=t._refCount;if(e<=0)this.connection=null;else if(t._refCount=e-1,e>1)this.connection=null;else{var n=this.connection,i=t._connection;this.connection=null,!i||n&&i!==n||i.unsubscribe()}}else this.connection=null},e}(r.Subscriber)},,function(t,e,n){\"use strict\";n.d(e,\"a\",function(){return a});var i=n(88),r=n(18),o=n(35),s=this&&this.__extends||function(){var t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n])};return function(e,n){function i(){this.constructor=e}t(e,n),e.prototype=null===n?Object.create(n):(i.prototype=n.prototype,new i)}}(),a=function(t){function e(e,n,i){void 0===i&&(i={});var r=t.call(this,e,n,i)||this;return r.slide=null,r}return s(e,t),e.prototype.getSlideBoundaries=function(t,e){return{min:0,max:this.getNativeElement().offsetWidth}},e.prototype.getElementStartPos=function(t,e){return 0},e.prototype.onDragStart=function(t){this.onSlideBeforeStart(t);var e=Object(o.f)(t)[this.direction];this.slide={min:0,max:0,pointerStartPos:e,pos:e,timestamp:Date.now(),elementStartPos:0,started:!0,delta:0,distance:0,velocity:0};var n=this.getSlideBoundaries(this.slide,t),i=n.max;this.slide.min=n.min,this.slide.max=i,this.slide.elementStartPos=this.getElementStartPos(this.slide,t),this.onSlideStart(this.slide,t)},e.prototype.onDragMove=function(t){var e=this.slide,n=Object(o.f)(t)[this.direction],i=Date.now(),s=(this.plt.isRTL?e.pos-n:n-e.pos)/(i-e.timestamp);e.pos=n,e.timestamp=i,e.distance=Object(r.a)(e.min,(this.plt.isRTL?e.pointerStartPos-n:n-e.pointerStartPos)+e.elementStartPos,e.max),e.velocity=s,e.delta=this.plt.isRTL?e.pointerStartPos-n:n-e.pointerStartPos,this.onSlide(e,t)},e.prototype.onDragEnd=function(t){this.onSlideEnd(this.slide,t),this.slide=null},e.prototype.onSlideBeforeStart=function(t){},e.prototype.onSlideStart=function(t,e){},e.prototype.onSlide=function(t,e){},e.prototype.onSlideEnd=function(t,e){},e}(i.a)},function(t,e,n){\"use strict\";n.d(e,\"b\",function(){return i}),n.d(e,\"a\",function(){return o});var i=function(){function t(t,e,n,i,r,o){this.plt=t,this.ele=e,this.pointerDown=n,this.pointerMove=i,this.pointerUp=r,this.option=o,this.rmTouchStart=null,this.rmTouchMove=null,this.rmTouchEnd=null,this.rmTouchCancel=null,this.rmMouseStart=null,this.rmMouseMove=null,this.rmMouseUp=null,this.lastTouchEvent=0,this.mouseWait=2e3,this.bindTouchEnd=this.handleTouchEnd.bind(this),this.bindMouseUp=this.handleMouseUp.bind(this),this.rmTouchStart=this.plt.registerListener(e,\"touchstart\",this.handleTouchStart.bind(this),o),this.rmMouseStart=this.plt.registerListener(e,\"mousedown\",this.handleMouseDown.bind(this),o)}return t.prototype.handleTouchStart=function(t){this.lastTouchEvent=Date.now()+this.mouseWait,this.lastEventType=o,this.pointerDown(t,o)&&(!this.rmTouchMove&&this.pointerMove&&(this.rmTouchMove=this.plt.registerListener(this.ele,\"touchmove\",this.pointerMove,this.option)),this.rmTouchEnd||(this.rmTouchEnd=this.plt.registerListener(this.ele,\"touchend\",this.bindTouchEnd,this.option)),this.rmTouchCancel||(this.rmTouchCancel=this.plt.registerListener(this.ele,\"touchcancel\",this.bindTouchEnd,this.option)))},t.prototype.handleMouseDown=function(t){this.lastTouchEvent>Date.now()||(this.lastEventType=r,this.pointerDown(t,r)&&(!this.rmMouseMove&&this.pointerMove&&(this.rmMouseMove=this.plt.registerListener(this.plt.doc(),\"mousemove\",this.pointerMove,this.option)),this.rmMouseUp||(this.rmMouseUp=this.plt.registerListener(this.plt.doc(),\"mouseup\",this.bindMouseUp,this.option))))},t.prototype.handleTouchEnd=function(t){this.stopTouch(),this.pointerUp&&this.pointerUp(t,o)},t.prototype.handleMouseUp=function(t){this.stopMouse(),this.pointerUp&&this.pointerUp(t,r)},t.prototype.stopTouch=function(){this.rmTouchMove&&this.rmTouchMove(),this.rmTouchEnd&&this.rmTouchEnd(),this.rmTouchCancel&&this.rmTouchCancel(),this.rmTouchMove=this.rmTouchEnd=this.rmTouchCancel=null},t.prototype.stopMouse=function(){this.rmMouseMove&&this.rmMouseMove(),this.rmMouseUp&&this.rmMouseUp(),this.rmMouseMove=this.rmMouseUp=null},t.prototype.stop=function(){this.stopTouch(),this.stopMouse()},t.prototype.destroy=function(){this.rmTouchStart&&this.rmTouchStart(),this.rmMouseStart&&this.rmMouseStart(),this.stop(),this.ele=this.pointerUp=this.pointerMove=this.pointerDown=this.rmTouchStart=this.rmMouseStart=null},t}(),r=1,o=2},function(t,e,n){\"use strict\";n.d(e,\"a\",function(){return i});var i=function(){function t(t){this.wait=t,this.timer=null}return t.prototype.debounce=function(t){this.callback=t,this.schedule()},t.prototype.schedule=function(){this.cancel(),this.wait<=0?this.callback():this.timer=setTimeout(this.callback,this.wait)},t.prototype.cancel=function(){this.timer&&(clearTimeout(this.timer),this.timer=null)},t}()},function(t,e,n){\"use strict\";n.d(e,\"a\",function(){return r});var i=n(35),r=function(){function t(t,e,n){this._app=t,this._plt=e,this._dom=n,this.isScrolling=!1,this.initialized=!1,this._eventsEnabled=!1,this._t=0,this._l=0,this.ev={timeStamp:0,scrollTop:0,scrollLeft:0,scrollHeight:0,scrollWidth:0,contentHeight:0,contentWidth:0,contentTop:0,contentBottom:0,startY:0,startX:0,deltaY:0,deltaX:0,velocityY:0,velocityX:0,directionY:\"down\",directionX:null,domWrite:n.write.bind(n)}}return t.prototype.init=function(t,e,n){this._el=t,this.initialized||(this.initialized=!0,this._js?this.enableJsScroll(e,n):this.enableNativeScrolling())},t.prototype.enableEvents=function(){this._eventsEnabled=!0},t.prototype.setScrolling=function(t,e){this.isScrolling?t?this.onScroll&&this.onScroll(e):(this.isScrolling=!1,this.onScrollEnd&&this.onScrollEnd(e)):t&&(this.isScrolling=!0,this.onScrollStart&&this.onScrollStart(e))},t.prototype.enableNativeScrolling=function(){if(this._js=!1,this._el){var t=this,e=t.ev,n=[];t._lsn&&t._lsn(),t._lsn=t._plt.registerListener(t._el,\"scroll\",function(i){if(t._app.setScrolling(),t._eventsEnabled){if(e.timeStamp=i.timeStamp,e.timeStamp||(e.timeStamp=Date.now()),e.scrollTop=t.getTop(),e.scrollLeft=t.getLeft(),t.isScrolling||(e.startY=e.scrollTop,e.startX=e.scrollLeft,e.velocityY=e.velocityX=0,e.deltaY=e.deltaX=0,n.length=0),n.push(e.scrollTop,e.scrollLeft,e.timeStamp),n.length>3){e.deltaY=e.scrollTop-e.startY,e.deltaX=e.scrollLeft-e.startX;for(var r=n.length-1,s=r,a=e.timeStamp-100,l=r;l>0&&n[l]>a;l-=3)s=l;if(s!==r){var c=n[s-2]-n[r-2],p=n[s-1]-n[r-1],h=u/(n[r]-n[s]);e.velocityY=c*h,e.velocityX=p*h,e.directionY=c>0?\"up\":\"down\",e.directionX=p>0?\"left\":\"right\"}}t.setScrolling(!0,e),t._dom.cancel(t._endTmr),t._endTmr=t._dom.read(function(){e.velocityY=e.velocityX=0,t.setScrolling(!1,e),t._endTmr=null},o)}},c)}},t.prototype.enableJsScroll=function(t,e){function n(){f||(f=p.scrollHeight-p.parentElement.offsetHeight+t+e)}function r(t){d.timeStamp=t,d.velocityY&&(d.velocityY*=l,n(),o._t=Math.min(Math.max(o._t+d.velocityY,0),f),d.scrollTop=o._t,o.onScroll(d),o._dom.write(function(){o.setTop(o._t),o._t>0&&o._t<f&&Math.abs(d.velocityY)>a?h=o._dom.read(function(t){r(t)}):(o.isScrolling=!1,d.velocityY=d.velocityX=0,o.onScrollEnd(d))}))}var o=this;o._js=!0;var p=o._el;if(p){var h,f,d=o.ev,_=[],v=o._plt,y=v.registerListener(p,\"touchstart\",function(t){_.length=0,f=null,o._dom.cancel(h),_.push(Object(i.f)(t).y,t.timeStamp)},c),m=v.registerListener(p,\"touchmove\",function(t){if(_.length){d.timeStamp=t.timeStamp;var e=Object(i.f)(t).y;n(),o._t-=e-_[_.length-2],o._t=Math.min(Math.max(o._t,0),f),_.push(e,d.timeStamp),o.isScrolling||(d.startY=o._t,d.velocityY=d.deltaY=0,o.isScrolling=!0,o.onScrollStart(d)),o._dom.write(function(){o.setTop(o._t)})}},c),g=v.registerListener(p,\"touchend\",function(t){if(o._dom.cancel(h),!_.length&&o.isScrolling)return o.isScrolling=!1,d.velocityY=d.velocityX=0,void o.onScrollEnd(d);var e=Object(i.f)(t).y;_.push(e,t.timeStamp);for(var a=_.length-1,l=a,c=t.timeStamp-100,p=a;p>0&&_[p]>c;p-=2)l=p;l!==a?(d.velocityY=(_[l-1]-_[a-1])/(_[a]-_[l])*u,Math.abs(d.velocityY)>s&&(n(),h=o._dom.read(function(t){r(t)}))):(o.isScrolling=!1,d.velocityY=0,o.onScrollEnd(d));_.length=0},c);p.parentElement.classList.add(\"js-scroll\"),o._lsn&&o._lsn(),o._lsn=function(){y(),m(),g(),p.parentElement.classList.remove(\"js-scroll\")}}},t.prototype.getTop=function(){return this._js?this._t:this._t=this._el.scrollTop},t.prototype.getLeft=function(){return this._js?0:this._l=this._el.scrollLeft},t.prototype.setTop=function(t){this._t=t,this._js?this._el.style[this._plt.Css.transform]=\"translate3d(\"+-1*this._l+\"px,\"+-1*t+\"px,0px)\":this._el.scrollTop=t},t.prototype.setLeft=function(t){this._l=t,this._js?this._el.style[this._plt.Css.transform]=\"translate3d(\"+-1*t+\"px,\"+-1*this._t+\"px,0px)\":this._el.scrollLeft=t},t.prototype.scrollTo=function(t,e,n,i){function r(o){if(f++,!s._el||d||f>p)return s.setScrolling(!1,null),a.style[h]=\"\",void i();var _=Math.min(1,(o-l)/n),v=--_*_*_+1;u!==e&&s.setTop(v*(e-u)+u),c!==t&&s.setLeft(Math.floor(v*(t-c)+c)),v<1?s._plt.raf(r):(d=!0,s.setScrolling(!1,null),a.style[h]=\"\",i())}var o;void 0===i&&(o=new Promise(function(t){i=t}));var s=this,a=s._el;if(!a)return i(),o;if(n<32)return s.setTop(e),s.setLeft(t),i(),o;var l,u=a.scrollTop,c=a.scrollLeft,p=n/16+100,h=s._plt.Css.transform,f=0,d=!1;return s.setScrolling(!0,null),s.isScrolling=!0,s._dom.write(function(t){l=t,r(t)},16),o},t.prototype.scrollToTop=function(t){return this.scrollTo(0,0,t)},t.prototype.scrollToBottom=function(t){var e=0;return this._el&&(e=this._el.scrollHeight-this._el.clientHeight),this.scrollTo(0,e,t)},t.prototype.stop=function(){this.setScrolling(!1,null)},t.prototype.destroy=function(){this.stop(),this._endTmr&&this._dom.cancel(this._endTmr),this._lsn&&this._lsn();var t=this.ev;t.domWrite=t.contentElement=t.fixedElement=t.scrollElement=t.headerElement=null,this._lsn=this._el=this._dom=this.ev=t=null,this.onScrollStart=this.onScroll=this.onScrollEnd=null},t}(),o=80,s=4,a=.12,l=.97,u=1e3/60,c={passive:!0,zone:!1}},function(t,e,n){\"use strict\";function i(t){return t.$ionIndex}e.b=i,e.a=function(t,e){for(var n=0;t&&n<4;){if(void 0!==i(t))return e&&t.parentNode!==e?null:t;t=t.parentNode,n++}return null}},function(t,e,n){\"use strict\";n(1),n(29),this&&this.__extends||function(){var t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n])}}()},function(t,e,n){\"use strict\";var i=n(0),r=n(18),o=n(97),s=n(36),a=n(59),l=this&&this.__extends||function(){var t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n])};return function(e,n){function i(){this.constructor=e}t(e,n),e.prototype=null===n?Object.create(n):(i.prototype=n.prototype,new i)}}(),u=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return l(e,t),e.prototype.init=function(){var t=this.enteringView.pageRef().nativeElement,e=new s.a(this.plt,t.querySelector(\"ion-backdrop\")),n=new s.a(this.plt,t.querySelector(\".picker-wrapper\"));e.fromTo(\"opacity\",.01,.26),n.fromTo(\"translateY\",\"100%\",\"0%\"),this.easing(\"cubic-bezier(.36,.66,.04,1)\").duration(400).add(e).add(n)},e}(a.a),c=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return l(e,t),e.prototype.init=function(){var t=this.leavingView.pageRef().nativeElement,e=new s.a(this.plt,t.querySelector(\"ion-backdrop\")),n=new s.a(this.plt,t.querySelector(\".picker-wrapper\"));e.fromTo(\"opacity\",.26,0),n.fromTo(\"translateY\",\"0%\",\"100%\"),this.easing(\"cubic-bezier(.36,.66,.04,1)\").duration(450).add(e).add(n)},e}(a.a),p=n(4);n.d(e,\"a\",function(){return f});var h=this&&this.__extends||function(){var t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n])};return function(e,n){function i(){this.constructor=e}t(e,n),e.prototype=null===n?Object.create(n):(i.prototype=n.prototype,new i)}}(),f=function(t){function e(e,n,s){void 0===n&&(n={});var a=this;return n||(n={}),n.columns=n.columns||[],n.buttons=n.buttons||[],n.enableBackdropDismiss=!Object(r.l)(n.enableBackdropDismiss)||Boolean(n.enableBackdropDismiss),a=t.call(this,o.a,n,null)||this,a._app=e,a.isOverlay=!0,a.ionChange=new i.l,s.setTransition(\"picker-slide-in\",u),s.setTransition(\"picker-slide-out\",c),a}return h(e,t),e.prototype.getTransitionName=function(t){return this._nav&&this._nav.config.get(\"back\"===t?\"pickerLeave\":\"pickerEnter\")},e.prototype.addButton=function(t){this.data.buttons.push(t)},e.prototype.addColumn=function(t){this.data.columns.push(t)},e.prototype.getColumns=function(){return this.data.columns},e.prototype.getColumn=function(t){return this.getColumns().find(function(e){return e.name===t})},e.prototype.refresh=function(){this._cmp&&this._cmp.instance.refresh&&this._cmp.instance.refresh()},e.prototype.setCssClass=function(t){this.data.cssClass=t},e.prototype.present=function(t){return void 0===t&&(t={}),this._app.present(this,t)},e}(p.a)},function(t,e,n){\"use strict\";n(6),n(18),n(2)},function(t,e,n){\"use strict\";n(1),n(132)},function(t,e,n){\"use strict\";var i=n(42),r=n(222);i.Observable.prototype.takeUntil=r.takeUntil},function(t,e,n){\"use strict\";var i=n(18),r=n(76),o=n(102),s=n(36),a=n(59),l=this&&this.__extends||function(){var t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n])};return function(e,n){function i(){this.constructor=e}t(e,n),e.prototype=null===n?Object.create(n):(i.prototype=n.prototype,new i)}}(),u=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return l(e,t),e.prototype.init=function(){var t=this.enteringView.pageRef().nativeElement,e=new s.a(this.plt,t.querySelector(\"ion-backdrop\")),n=new s.a(this.plt,t.querySelector(\".loading-wrapper\"));n.fromTo(\"opacity\",.01,1).fromTo(\"scale\",1.1,1),e.fromTo(\"opacity\",.01,.3),this.easing(\"ease-in-out\").duration(200).add(e).add(n)},e}(a.a),c=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return l(e,t),e.prototype.init=function(){var t=this.leavingView.pageRef().nativeElement,e=new s.a(this.plt,t.querySelector(\"ion-backdrop\")),n=new s.a(this.plt,t.querySelector(\".loading-wrapper\"));n.fromTo(\"opacity\",.99,0).fromTo(\"scale\",1,.9),e.fromTo(\"opacity\",.3,0),this.easing(\"ease-in-out\").duration(200).add(e).add(n)},e}(a.a),p=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return l(e,t),e.prototype.init=function(){var t=this.enteringView.pageRef().nativeElement,e=new s.a(this.plt,t.querySelector(\"ion-backdrop\")),n=new s.a(this.plt,t.querySelector(\".loading-wrapper\"));n.fromTo(\"opacity\",.01,1).fromTo(\"scale\",1.1,1),e.fromTo(\"opacity\",.01,.5),this.easing(\"ease-in-out\").duration(200).add(e).add(n)},e}(a.a),h=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return l(e,t),e.prototype.init=function(){var t=this.leavingView.pageRef().nativeElement,e=new s.a(this.plt,t.querySelector(\"ion-backdrop\")),n=new s.a(this.plt,t.querySelector(\".loading-wrapper\"));n.fromTo(\"opacity\",.99,0).fromTo(\"scale\",1,.9),e.fromTo(\"opacity\",.5,0),this.easing(\"ease-in-out\").duration(200).add(e).add(n)},e}(a.a),f=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return l(e,t),e.prototype.init=function(){var t=this.enteringView.pageRef().nativeElement,e=new s.a(this.plt,t.querySelector(\"ion-backdrop\")),n=new s.a(this.plt,t.querySelector(\".loading-wrapper\"));n.fromTo(\"opacity\",.01,1).fromTo(\"scale\",1.3,1),e.fromTo(\"opacity\",.01,.16),this.easing(\"cubic-bezier(0,0,0.05,1)\").duration(200).add(e).add(n)},e}(a.a),d=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return l(e,t),e.prototype.init=function(){var t=this.leavingView.pageRef().nativeElement,e=new s.a(this.plt,t.querySelector(\"ion-backdrop\")),n=new s.a(this.plt,t.querySelector(\".loading-wrapper\"));n.fromTo(\"opacity\",.99,0).fromTo(\"scale\",1,1.3),e.fromTo(\"opacity\",.16,0),this.easing(\"ease-out\").duration(150).add(e).add(n)},e}(a.a),_=n(4);n.d(e,\"a\",function(){return y});var v=this&&this.__extends||function(){var t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n])};return function(e,n){function i(){this.constructor=e}t(e,n),e.prototype=null===n?Object.create(n):(i.prototype=n.prototype,new i)}}(),y=function(t){function e(e,n,r){void 0===n&&(n={});var s=this;return n.showBackdrop=!Object(i.l)(n.showBackdrop)||!!n.showBackdrop,n.enableBackdropDismiss=!!Object(i.l)(n.enableBackdropDismiss)&&!!n.enableBackdropDismiss,n.dismissOnPageChange=!!Object(i.l)(n.dismissOnPageChange)&&!!n.dismissOnPageChange,s=t.call(this,o.a,n,null)||this,s._app=e,s.isOverlay=!0,r.setTransition(\"loading-pop-in\",u),r.setTransition(\"loading-pop-out\",c),r.setTransition(\"loading-md-pop-in\",p),r.setTransition(\"loading-md-pop-out\",h),r.setTransition(\"loading-wp-pop-in\",f),r.setTransition(\"loading-wp-pop-out\",d),s}return v(e,t),e.prototype.getTransitionName=function(t){return this._nav&&this._nav.config.get(\"back\"===t?\"loadingLeave\":\"loadingEnter\")},e.prototype.setContent=function(t){return this.data.content=t,this},e.prototype.setSpinner=function(t){return this.data.spinner=t,this},e.prototype.setCssClass=function(t){return this.data.cssClass=t,this},e.prototype.setShowBackdrop=function(t){return this.data.showBackdrop=t,this},e.prototype.setDuration=function(t){return this.data.duration=t,this},e.prototype.present=function(t){return void 0===t&&(t={}),this._app.present(this,t,r.b)},e.prototype.dismissAll=function(){this._nav&&this._nav.popAll()},e}(_.a)},function(t,e,n){\"use strict\";n.d(e,\"a\",function(){return o});var i=n(29),r=this&&this.__extends||function(){var t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n])};return function(e,n){function i(){this.constructor=e}t(e,n),e.prototype=null===n?Object.create(n):(i.prototype=n.prototype,new i)}}(),o=function(t){function e(e,n,i){return t.call(this,e,n,i,\"toolbar\")||this}return r(e,t),e.prototype._setTitle=function(t){this._title=t},e.prototype.getTitleText=function(){return this._title&&this._title.getTitleText()||\"\"},e}(i.a)},function(t,e,n){\"use strict\";var i=n(179),r=n(18),o=n(76),s=n(105),a=n(36),l=n(67),u=this&&this.__extends||function(){var t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n])};return function(e,n){function i(){this.constructor=e}t(e,n),e.prototype=null===n?Object.create(n):(i.prototype=n.prototype,new i)}}(),c=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return u(e,t),e.prototype.init=function(){t.prototype.init.call(this);var e=this.enteringView.pageRef().nativeElement,n=e.querySelector(\"ion-backdrop\"),i=new a.a(this.plt,n),r=new a.a(this.plt,e.querySelector(\".modal-wrapper\"));r.beforeStyles({opacity:1}),r.fromTo(\"translateY\",\"100%\",\"0%\"),i.fromTo(\"opacity\",.01,.4),this.element(this.enteringView.pageRef()).easing(\"cubic-bezier(0.36,0.66,0.04,1)\").duration(400).add(i).add(r)},e}(l.a),p=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return u(e,t),e.prototype.init=function(){t.prototype.init.call(this);var e=this.leavingView.pageRef().nativeElement,n=new a.a(this.plt,e.querySelector(\"ion-backdrop\")),i=e.querySelector(\".modal-wrapper\"),r=i.getBoundingClientRect(),o=new a.a(this.plt,i);o.fromTo(\"translateY\",\"0px\",this.plt.height()-r.top+\"px\"),n.fromTo(\"opacity\",.4,0),this.element(this.leavingView.pageRef()).easing(\"ease-out\").duration(250).add(n).add(o)},e}(l.a),h=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return u(e,t),e.prototype.init=function(){t.prototype.init.call(this);var e=this.enteringView.pageRef().nativeElement,n=new a.a(this.plt,e.querySelector(\"ion-backdrop\")),i=new a.a(this.plt,e.querySelector(\".modal-wrapper\"));n.fromTo(\"opacity\",.01,.4),i.fromTo(\"translateY\",\"40px\",\"0px\"),i.fromTo(\"opacity\",.01,1);this.element(this.enteringView.pageRef()).easing(\"cubic-bezier(0.36,0.66,0.04,1)\").duration(280).add(n).add(i)},e}(l.a),f=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return u(e,t),e.prototype.init=function(){t.prototype.init.call(this);var e=this.leavingView.pageRef().nativeElement,n=new a.a(this.plt,e.querySelector(\"ion-backdrop\")),i=new a.a(this.plt,e.querySelector(\".modal-wrapper\"));n.fromTo(\"opacity\",.4,0),i.fromTo(\"translateY\",\"0px\",\"40px\"),i.fromTo(\"opacity\",.99,0),this.element(this.leavingView.pageRef()).duration(200).easing(\"cubic-bezier(0.47,0,0.745,0.715)\").add(i).add(n)},e}(l.a),d=n(4),_=this&&this.__extends||function(){var t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n])};return function(e,n){function i(){this.constructor=e}t(e,n),e.prototype=null===n?Object.create(n):(i.prototype=n.prototype,new i)}}(),v=function(t){function e(e,n,i,o,a){void 0===o&&(o={});var l=this;return i=i||{},i.component=n,o.showBackdrop=!Object(r.l)(o.showBackdrop)||!!o.showBackdrop,o.enableBackdropDismiss=!Object(r.l)(o.enableBackdropDismiss)||!!o.enableBackdropDismiss,i.opts=o,l=t.call(this,s.a,i,null)||this,l._app=e,l._enterAnimation=o.enterAnimation,l._leaveAnimation=o.leaveAnimation,l.isOverlay=!0,a.setTransition(\"modal-slide-in\",c),a.setTransition(\"modal-slide-out\",p),a.setTransition(\"modal-md-slide-in\",h),a.setTransition(\"modal-md-slide-out\",f),l}return _(e,t),e.prototype.getTransitionName=function(t){var e;if(\"back\"===t){if(this._leaveAnimation)return this._leaveAnimation;e=\"modalLeave\"}else{if(this._enterAnimation)return this._enterAnimation;e=\"modalEnter\"}return this._nav&&this._nav.config.get(e)},e.prototype.present=function(t){return void 0===t&&(t={}),t.minClickBlockDuration=t.minClickBlockDuration||400,this._app.present(this,t,o.c)},e}(d.a);n.d(e,\"a\",function(){return m});var y=this&&this.__extends||function(){var t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n])};return function(e,n){function i(){this.constructor=e}t(e,n),e.prototype=null===n?Object.create(n):(i.prototype=n.prototype,new i)}}(),m=function(t){function e(e,n,i,r,o,s){void 0===r&&(r={});var a=t.call(this,e,n,o,s)||this;return a.data=i,a.opts=r,a.isOverlay=!0,a}return y(e,t),e.prototype.getImplementation=function(){return new v(this._app,this._component,this.data,this.opts,this._config)},e}(i.a)},function(t,e,n){\"use strict\";n.d(e,\"a\",function(){return r});var i=n(18),r=function(){function t(t,e,n,i){this._app=t,this._component=e,this._config=n,this._deepLinker=i}return t.prototype.getImplementation=function(){throw new Error('Child class must implement \"getImplementation\" method')},t.prototype.present=function(t){var e=this;void 0===t&&(t={});return Object(i.n)(this._component)?this._deepLinker.getComponentFromName(this._component).then(function(n){return e._component=n,e.createAndPresentOverlay(t)}):this.createAndPresentOverlay(t)},t.prototype.dismiss=function(t,e,n){if(this.overlay)return this.overlay.dismiss(t,e,n)},t.prototype.onDidDismiss=function(t){this._onDidDismiss=t,this.overlay&&this.overlay.onDidDismiss(this._onDidDismiss)},t.prototype.createAndPresentOverlay=function(t){return this.overlay=this.getImplementation(),this.overlay.onWillDismiss(this._onWillDismiss),this.overlay.onDidDismiss(this._onDidDismiss),this.overlay.present(t)},t.prototype.onWillDismiss=function(t){this._onWillDismiss=t,this.overlay&&this.overlay.onWillDismiss(this._onWillDismiss)},t}()},,function(t,e,n){\"use strict\";n(31),n(4),n(138)},function(t,e,n){\"use strict\";n(31),n(139)},function(t,e,n){\"use strict\";n(1),n(141)},function(t,e,n){\"use strict\";n(18)},function(t,e,n){\"use strict\";function i(t){return t.testNavigatorPlatform(\"iphone|ipad|ipod\")}function r(t){return t.testUserAgent(\"Safari\")}e.a=function(t){var e=t.win();return!!(e.cordova||e.PhoneGap||e.phonegap)},e.b=function(t){return t.testUserAgent(\"Electron\")},e.c=i,e.e=r,e.d=function(t){return i(t)&&!function(t){return i(t)&&!!t.win().webkit}(t)&&!r(t)}},function(t,e,n){\"use strict\";var i=n(18),r=n(76),o=n(120),s=n(36),a=n(59),l=this&&this.__extends||function(){var t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n])};return function(e,n){function i(){this.constructor=e}t(e,n),e.prototype=null===n?Object.create(n):(i.prototype=n.prototype,new i)}}(),u=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return l(e,t),e.prototype.init=function(){var t=this.enteringView.pageRef().nativeElement,e=t.querySelector(\".toast-wrapper\"),n=new s.a(this.plt,e);if(this.enteringView.data&&this.enteringView.data.position===_)n.fromTo(\"translateY\",\"-100%\",\"10px\");else if(this.enteringView.data&&this.enteringView.data.position===v){var i=Math.floor(t.clientHeight/2-e.clientHeight/2);e.style.top=i+\"px\",n.fromTo(\"opacity\",.01,1)}else n.fromTo(\"translateY\",\"100%\",\"-10px\");this.easing(\"cubic-bezier(.36,.66,.04,1)\").duration(400).add(n)},e}(a.a),c=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return l(e,t),e.prototype.init=function(){var t=this.leavingView.pageRef().nativeElement.querySelector(\".toast-wrapper\"),e=new s.a(this.plt,t);this.leavingView.data&&this.leavingView.data.position===_?e.fromTo(\"translateY\",\"10px\",\"-100%\"):this.leavingView.data&&this.leavingView.data.position===v?e.fromTo(\"opacity\",.99,0):e.fromTo(\"translateY\",\"-10px\",\"100%\"),this.easing(\"cubic-bezier(.36,.66,.04,1)\").duration(300).add(e)},e}(a.a),p=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return l(e,t),e.prototype.init=function(){var t=this.enteringView.pageRef().nativeElement,e=t.querySelector(\".toast-wrapper\"),n=new s.a(this.plt,e);if(this.enteringView.data&&this.enteringView.data.position===_)n.fromTo(\"translateY\",\"-100%\",\"0%\");else if(this.enteringView.data&&this.enteringView.data.position===v){var i=Math.floor(t.clientHeight/2-e.clientHeight/2);e.style.top=i+\"px\",n.fromTo(\"opacity\",.01,1)}else n.fromTo(\"translateY\",\"100%\",\"0%\");this.easing(\"cubic-bezier(.36,.66,.04,1)\").duration(400).add(n)},e}(a.a),h=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return l(e,t),e.prototype.init=function(){var t=this.leavingView.pageRef().nativeElement.querySelector(\".toast-wrapper\"),e=new s.a(this.plt,t);this.leavingView.data&&this.leavingView.data.position===_?e.fromTo(\"translateY\",\"0%\",\"-100%\"):this.leavingView.data&&this.leavingView.data.position===v?e.fromTo(\"opacity\",.99,0):e.fromTo(\"translateY\",\"0%\",\"100%\"),this.easing(\"cubic-bezier(.36,.66,.04,1)\").duration(450).add(e)},e}(a.a),f=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return l(e,t),e.prototype.init=function(){var t=this.enteringView.pageRef().nativeElement,e=t.querySelector(\".toast-wrapper\"),n=new s.a(this.plt,e);if(this.enteringView.data&&this.enteringView.data.position===_)n.fromTo(\"opacity\",.01,1),n.fromTo(\"scale\",1.3,1);else if(this.enteringView.data&&this.enteringView.data.position===v){var i=Math.floor(t.clientHeight/2-e.clientHeight/2);e.style.top=i+\"px\",n.fromTo(\"opacity\",.01,1),n.fromTo(\"scale\",1.3,1)}else n.fromTo(\"opacity\",.01,1),n.fromTo(\"scale\",1.3,1);this.easing(\"cubic-bezier(0,0,0.05,1)\").duration(200).add(n)},e}(a.a),d=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return l(e,t),e.prototype.init=function(){var t=this.leavingView.pageRef().nativeElement.querySelector(\".toast-wrapper\"),e=new s.a(this.plt,t);e.fromTo(\"opacity\",.99,0),e.fromTo(\"scale\",1,1.3);this.easing(\"ease-out\").duration(150).add(e)},e}(a.a),_=\"top\",v=\"middle\",y=n(4);n.d(e,\"a\",function(){return g});var m=this&&this.__extends||function(){var t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n])};return function(e,n){function i(){this.constructor=e}t(e,n),e.prototype=null===n?Object.create(n):(i.prototype=n.prototype,new i)}}(),g=function(t){function e(e,n,r){void 0===n&&(n={});var s=this;return n.dismissOnPageChange=!!Object(i.l)(n.dismissOnPageChange)&&!!n.dismissOnPageChange,s=t.call(this,o.a,n,null)||this,s._app=e,n.position&&s.isValidPosition(n.position)||(n.position=C),s.isOverlay=!0,r.setTransition(\"toast-slide-in\",u),r.setTransition(\"toast-slide-out\",c),r.setTransition(\"toast-md-slide-in\",p),r.setTransition(\"toast-md-slide-out\",h),r.setTransition(\"toast-wp-slide-out\",d),r.setTransition(\"toast-wp-slide-in\",f),s}return m(e,t),e.prototype.getTransitionName=function(t){return this._nav&&this._nav.config.get(\"toast\"+(\"back\"===t?\"Leave\":\"Enter\"))},e.prototype.isValidPosition=function(t){return t===b||t===w||t===C},e.prototype.setMessage=function(t){return this.data.message=t,this},e.prototype.setDuration=function(t){return this.data.duration=t,this},e.prototype.setPosition=function(t){return this.data.position=t,this},e.prototype.setCssClass=function(t){return this.data.cssClass=t,this},e.prototype.setShowCloseButton=function(t){return this.data.showCloseButton=t,this},e.prototype.present=function(t){return void 0===t&&(t={}),t.disableApp=!1,t.keyboardClose=!1,this._app.present(this,t,r.d)},e.prototype.dismissAll=function(){this._nav&&this._nav.popAll()},e}(y.a),b=\"top\",w=\"middle\",C=\"bottom\"},function(t,e,n){\"use strict\";n(0),n(1),n(8),n(6),n(18),n(2),n(4),n(145),n(143),n(144)},function(t,e,n){\"use strict\";function i(t,e,n){return\"path\"===n.get(\"locationStrategy\")?new o.p(t,e):new o.d(t,e)}n.d(e,\"a\",function(){return M}),e.b=i;var r=n(0),o=n(28),s=n(57),a=n(5),l=n(75),u=n(1),c=n(31),p=n(6),h=n(147),f=n(19),d=n(15),_=n(150),v=n(40),y=n(9),m=n(70),g=n(137),b=n(2),w=n(148),C=n(146),O=n(149),S=n(37),E=n(77),x=(n(89),n(90)),T=(n(91),n(48)),k=(n(189),n(127),n(60),n(45),n(92),n(21),n(39),n(52),n(93),n(94),n(95),n(171),n(8),n(96),n(54),n(69),n(98),n(61),n(131),n(62),n(30),n(173),n(132),n(174),n(44),n(20),n(25),n(133),n(134),n(99),n(23),n(100),n(101),n(34),n(27),n(41),n(102),n(103)),P=(n(104),n(135),n(43)),A=(n(136),n(105),n(106)),I=(n(79),n(138),n(181),n(139),n(182),n(63),n(107),n(97),n(78),n(68)),j=(n(108),n(109)),D=(n(71),n(64),n(110),n(111),n(141),n(183),n(184),n(80),n(112),n(113),n(114),n(72),n(81),n(115),n(116),n(73),n(117),n(38),n(55),n(119),n(118),n(46),n(122),n(120),n(121)),M=(n(82),n(83),n(12),n(11),n(49),n(13),n(10),n(123),n(143),n(144),n(145),n(187),function(){function t(){}return t.forRoot=function(e,n,M){return void 0===n&&(n=null),void 0===M&&(M=null),{ngModule:t,providers:[{provide:l.a,useValue:e},{provide:u.b,useValue:n},{provide:E.a,useValue:M},{provide:o.a,useValue:\"/\"},{provide:w.a,useFactory:w.b},{provide:b.a,useFactory:b.b,deps:[s.b,w.a,r.u]},{provide:u.a,useFactory:u.c,deps:[u.b,b.a]},{provide:r.c,useFactory:O.a,deps:[u.a],multi:!0},{provide:r.c,useFactory:h.b,deps:[b.a,p.a],multi:!0},{provide:r.c,useFactory:C.b,deps:[u.a,b.a,p.a,a.a,d.l],multi:!0},{provide:r.c,useFactory:m.d,deps:[u.a,E.a,m.b,r.u],multi:!0},{provide:s.f,useClass:_.a},{provide:r.a,useValue:e,multi:!0},x.a,T.a,a.a,p.a,h.a,f.a,d.l,v.a,y.a,k.a,o.e,P.a,A.a,g.a,I.a,j.a,C.a,D.a,S.a,{provide:m.b,useFactory:m.c,deps:[g.a,r.o]},{provide:o.f,useFactory:i,deps:[o.q,[new r.m(o.a),new r.v],u.a]},{provide:E.b,useFactory:E.d,deps:[a.a,E.a]},{provide:c.a,useFactory:c.b,deps:[a.a,E.b,o.e,m.b,r.i]}]}},t}())},function(t,e,n){\"use strict\";n.d(e,\"a\",function(){return i});n(1),n(2);var i=function(){function t(t,e,n,i,r){this.plt=n,this.elementRef=i,this.renderer=r,this._showing=!1,t._clickBlock=this;(this.isEnabled=e.getBoolean(\"clickBlock\",!0))&&this._setElementClass(\"click-block-enabled\",!0)}return t.prototype.activate=function(t,e,n){void 0===e&&(e=100),void 0===n&&(n=0),this.isEnabled&&(this.plt.cancelTimeout(this._tmr),t&&(this._start=Date.now(),this._minEnd=this._start+(n||0),this._activate(!0)),this._tmr=this.plt.timeout(this._activate.bind(this,!1),e))},t.prototype._activate=function(t){if(this._showing!==t){if(!t){var e=Date.now();if(e<this._minEnd)return void(this._tmr=this.plt.timeout(this._activate.bind(this,!1),this._minEnd-e))}this._setElementClass(\"click-block-active\",t),this._showing=t}},t.prototype._setElementClass=function(t,e){this.renderer.setElementClass(this.elementRef.nativeElement,t,e)},t}()},function(t,e,n){\"use strict\";function i(t){return r._22(0,[(t()(),r.Z(0,0,null,null,1,\"div\",[[\"class\",\"toggle-icon\"]],null,null,null,null,null)),(t()(),r.Z(1,0,null,null,0,\"div\",[[\"class\",\"toggle-inner\"]],null,null,null,null,null)),(t()(),r.Z(2,0,null,null,1,\"button\",[[\"class\",\"item-cover\"],[\"disable-activated\",\"\"],[\"ion-button\",\"item-cover\"],[\"role\",\"checkbox\"],[\"type\",\"button\"]],[[8,\"id\",0],[1,\"aria-checked\",0],[1,\"aria-labelledby\",0],[1,\"aria-disabled\",0]],null,null,o.b,o.a)),r.Y(3,1097728,null,0,s.a,[[8,\"item-cover\"],a.a,r.j,r.z],null,null)],null,function(t,e){var n=e.component;t(e,2,0,n.id,n._value,n._labelId,n._disabled)})}n.d(e,\"a\",function(){return l}),e.b=i;var r=n(0),o=n(22),s=n(21),a=n(1),l=(n(82),n(19),n(2),n(40),n(15),n(6),r.X({encapsulation:2,styles:[],data:{}}))},function(t,e,n){\"use strict\";function i(t){return r._22(0,[r._18(402653184,1,{_searchbarInput:0}),r._18(402653184,2,{_searchbarIcon:0}),r._18(402653184,3,{_cancelButton:0}),(t()(),r.Z(3,0,null,null,8,\"div\",[[\"class\",\"searchbar-input-container\"]],null,null,null,null,null)),(t()(),r.Z(4,0,null,null,3,\"button\",[[\"class\",\"searchbar-md-cancel\"],[\"clear\",\"\"],[\"color\",\"dark\"],[\"ion-button\",\"\"],[\"mode\",\"md\"],[\"type\",\"button\"]],null,[[null,\"click\"],[null,\"mousedown\"]],function(t,e,n){var i=!0,r=t.component;if(\"click\"===e){i=!1!==r.cancelSearchbar(n)&&i}if(\"mousedown\"===e){i=!1!==r.cancelSearchbar(n)&&i}return i},o.b,o.a)),r.Y(5,1097728,null,0,s.a,[[8,\"\"],a.a,r.j,r.z],{color:[0,\"color\"],mode:[1,\"mode\"],clear:[2,\"clear\"]},null),(t()(),r.Z(6,0,null,0,1,\"ion-icon\",[[\"name\",\"md-arrow-back\"],[\"role\",\"img\"]],[[2,\"hide\",null]],null,null,null,null)),r.Y(7,147456,null,0,l.a,[a.a,r.j,r.z],{name:[0,\"name\"]},null),(t()(),r.Z(8,0,[[2,0],[\"searchbarIcon\",1]],null,0,\"div\",[[\"class\",\"searchbar-search-icon\"]],null,null,null,null,null)),(t()(),r.Z(9,0,[[1,0],[\"searchbarInput\",1]],null,0,\"input\",[[\"class\",\"searchbar-input\"],[\"dir\",\"auto\"]],[[1,\"placeholder\",0],[1,\"type\",0],[1,\"autocomplete\",0],[1,\"autocorrect\",0],[1,\"spellcheck\",0]],[[null,\"input\"],[null,\"blur\"],[null,\"focus\"]],function(t,e,n){var i=!0,r=t.component;if(\"input\"===e){i=!1!==r.inputChanged(n)&&i}if(\"blur\"===e){i=!1!==r.inputBlurred()&&i}if(\"focus\"===e){i=!1!==r.inputFocused()&&i}return i},null,null)),(t()(),r.Z(10,0,null,null,1,\"button\",[[\"class\",\"searchbar-clear-icon\"],[\"clear\",\"\"],[\"ion-button\",\"\"],[\"type\",\"button\"]],null,[[null,\"click\"],[null,\"mousedown\"]],function(t,e,n){var i=!0,r=t.component;if(\"click\"===e){i=!1!==r.clearInput(n)&&i}if(\"mousedown\"===e){i=!1!==r.clearInput(n)&&i}return i},o.b,o.a)),r.Y(11,1097728,null,0,s.a,[[8,\"\"],a.a,r.j,r.z],{mode:[0,\"mode\"],clear:[1,\"clear\"]},null),(t()(),r.Z(12,0,[[3,0]],null,2,\"button\",[[\"class\",\"searchbar-ios-cancel\"],[\"clear\",\"\"],[\"ion-button\",\"\"],[\"mode\",\"ios\"],[\"type\",\"button\"]],[[8,\"tabIndex\",0]],[[null,\"click\"],[null,\"mousedown\"]],function(t,e,n){var i=!0,r=t.component;if(\"click\"===e){i=!1!==r.cancelSearchbar(n)&&i}if(\"mousedown\"===e){i=!1!==r.cancelSearchbar(n)&&i}return i},o.b,o.a)),r.Y(13,1097728,[[\"cancelButton\",4]],0,s.a,[[8,\"\"],a.a,r.j,r.z],{mode:[0,\"mode\"],clear:[1,\"clear\"]},null),(t()(),r._20(14,0,[\"\",\"\"]))],function(t,e){var n=e.component;t(e,5,0,\"dark\",\"md\",\"\");t(e,7,0,\"md-arrow-back\");t(e,11,0,n._mode,\"\");t(e,13,0,\"ios\",\"\")},function(t,e){var n=e.component;t(e,6,0,r._13(e,7)._hidden);t(e,9,0,n.placeholder,n.type,n._autocomplete,n._autocorrect,n._spellcheck);t(e,12,0,n._isActive?1:-1);t(e,14,0,n.cancelButtonText)})}n.d(e,\"a\",function(){return u}),e.b=i;var r=n(0),o=n(22),s=n(21),a=n(1),l=n(30),u=(n(80),n(2),r.X({encapsulation:2,styles:[],data:{}}))},function(t,e,n){\"use strict\";function i(t){return r._22(0,[r._12(null,0),(t()(),r.Z(1,0,null,null,0,\"div\",[[\"class\",\"button-effect\"]],null,null,null,null,null))],null,null)}n.d(e,\"a\",function(){return o}),e.b=i;var r=n(0),o=(n(72),r.X({encapsulation:2,styles:[],data:{}}))},,function(t,e,n){\"use strict\";var i=n(58),r=n(124),o=n(159);e.toSubscriber=function(t,e,n){if(t){if(t instanceof i.Subscriber)return t;if(t[r.rxSubscriber])return t[r.rxSubscriber]()}return t||e||n?new i.Subscriber(t,e,n):new i.Subscriber(o.empty)}},function(t,e,n){\"use strict\";var i,r=n(158);e.tryCatch=function(t){return i=t,function(){try{return i.apply(this,arguments)}catch(t){return r.errorObject.e=t,r.errorObject}}}},function(t,e,n){\"use strict\";var i=n(3).__extends,r=function(t){function e(e){t.call(this),this.errors=e;var n=Error.call(this,e?e.length+\" errors occurred during unsubscription:\\n  \"+e.map(function(t,e){return e+1+\") \"+t.toString()}).join(\"\\n  \"):\"\");this.name=n.name=\"UnsubscriptionError\",this.stack=n.stack,this.message=n.message}return i(e,t),e}(Error);e.UnsubscriptionError=r},function(t,e,n){\"use strict\";function i(t){return t?1===t.length?t[0]:function(e){return t.reduce(function(t,e){return e(t)},e)}:r.noop}var r=n(198);e.pipe=function(){for(var t=[],e=0;e<arguments.length;e++)t[e-0]=arguments[e];return i(t)},e.pipeFromArray=i},function(t,e,n){\"use strict\";e.noop=function(){}},function(t,e,n){\"use strict\";var i=n(200);e.merge=i.mergeStatic},function(t,e,n){\"use strict\";var i=n(161),r=n(161);e.mergeStatic=r.mergeStatic,e.merge=function(){for(var t=[],e=0;e<arguments.length;e++)t[e-0]=arguments[e];return i.merge.apply(void 0,t)(this)}},function(t,e,n){\"use strict\";var i=n(3).__extends,r=n(42),o=n(202),s=n(162),a=n(163);e.ArrayObservable=function(t){function e(e,n){t.call(this),this.array=e,this.scheduler=n,n||1!==e.length||(this._isScalar=!0,this.value=e[0])}return i(e,t),e.create=function(t,n){return new e(t,n)},e.of=function(){for(var t=[],n=0;n<arguments.length;n++)t[n-0]=arguments[n];var i=t[t.length-1];a.isScheduler(i)?t.pop():i=null;var r=t.length;return r>1?new e(t,i):1===r?new o.ScalarObservable(t[0],i):new s.EmptyObservable(i)},e.dispatch=function(t){var e=t.array,n=t.index,i=t.subscriber;n>=t.count?i.complete():(i.next(e[n]),i.closed||(t.index=n+1,this.schedule(t)))},e.prototype._subscribe=function(t){var n=this.array,i=n.length,r=this.scheduler;if(r)return r.schedule(e.dispatch,0,{array:n,index:0,count:i,subscriber:t});for(var o=0;o<i&&!t.closed;o++)t.next(n[o]);t.complete()},e}(r.Observable)},function(t,e,n){\"use strict\";var i=n(3).__extends,r=n(42);e.ScalarObservable=function(t){function e(e,n){t.call(this),this.value=e,this.scheduler=n,this._isScalar=!0,n&&(this._isScalar=!1)}return i(e,t),e.create=function(t,n){return new e(t,n)},e.dispatch=function(t){var e=t.value,n=t.subscriber;t.done?n.complete():(n.next(e),n.closed||(t.done=!0,this.schedule(t)))},e.prototype._subscribe=function(t){var n=this.value,i=this.scheduler;if(i)return i.schedule(e.dispatch,0,{done:!1,value:n,subscriber:t});t.next(n),t.closed||t.complete()},e}(r.Observable)},function(t,e,n){\"use strict\";var i=n(204),r=n(209);e.mergeAll=function(t){return void 0===t&&(t=Number.POSITIVE_INFINITY),i.mergeMap(r.identity,null,t)}},function(t,e,n){\"use strict\";var i=n(3).__extends,r=n(125),o=n(126);e.mergeMap=function(t,e,n){return void 0===n&&(n=Number.POSITIVE_INFINITY),function(i){return\"number\"==typeof e&&(n=e,e=null),i.lift(new s(t,e,n))}};var s=function(){function t(t,e,n){void 0===n&&(n=Number.POSITIVE_INFINITY),this.project=t,this.resultSelector=e,this.concurrent=n}return t.prototype.call=function(t,e){return e.subscribe(new a(t,this.project,this.resultSelector,this.concurrent))},t}();e.MergeMapOperator=s;var a=function(t){function e(e,n,i,r){void 0===r&&(r=Number.POSITIVE_INFINITY),t.call(this,e),this.project=n,this.resultSelector=i,this.concurrent=r,this.hasCompleted=!1,this.buffer=[],this.active=0,this.index=0}return i(e,t),e.prototype._next=function(t){this.active<this.concurrent?this._tryNext(t):this.buffer.push(t)},e.prototype._tryNext=function(t){var e,n=this.index++;try{e=this.project(t,n)}catch(t){return void this.destination.error(t)}this.active++,this._innerSub(e,t,n)},e.prototype._innerSub=function(t,e,n){this.add(r.subscribeToResult(this,t,e,n))},e.prototype._complete=function(){this.hasCompleted=!0,0===this.active&&0===this.buffer.length&&this.destination.complete()},e.prototype.notifyNext=function(t,e,n,i,r){this.resultSelector?this._notifyResultSelector(t,e,n,i):this.destination.next(e)},e.prototype._notifyResultSelector=function(t,e,n,i){var r;try{r=this.resultSelector(t,e,n,i)}catch(t){return void this.destination.error(t)}this.destination.next(r)},e.prototype.notifyComplete=function(t){var e=this.buffer;this.remove(t),this.active--,e.length>0?this._next(e.shift()):0===this.active&&this.hasCompleted&&this.destination.complete()},e}(o.OuterSubscriber);e.MergeMapSubscriber=a},function(t,e,n){\"use strict\";e.isArrayLike=function(t){return t&&\"number\"==typeof t.length}},function(t,e,n){\"use strict\";e.isPromise=function(t){return t&&\"function\"!=typeof t.subscribe&&\"function\"==typeof t.then}},function(t,e,n){\"use strict\";function i(t){var e=t.Symbol;if(\"function\"==typeof e)return e.iterator||(e.iterator=e(\"iterator polyfill\")),e.iterator;var n=t.Set;if(n&&\"function\"==typeof(new n)[\"@@iterator\"])return\"@@iterator\";var i=t.Map;if(i)for(var r=Object.getOwnPropertyNames(i.prototype),o=0;o<r.length;++o){var s=r[o];if(\"entries\"!==s&&\"size\"!==s&&i.prototype[s]===i.prototype.entries)return s}return\"@@iterator\"}var r=n(66);e.symbolIteratorPonyfill=i,e.iterator=i(r.root),e.$$iterator=e.iterator},function(t,e,n){\"use strict\";var i=n(3).__extends,r=n(58);e.InnerSubscriber=function(t){function e(e,n,i){t.call(this),this.parent=e,this.outerValue=n,this.outerIndex=i,this.index=0}return i(e,t),e.prototype._next=function(t){this.parent.notifyNext(this.outerValue,t,this.outerIndex,this.index++,this)},e.prototype._error=function(t){this.parent.notifyError(t,this),this.unsubscribe()},e.prototype._complete=function(){this.parent.notifyComplete(this),this.unsubscribe()},e}(r.Subscriber)},function(t,e,n){\"use strict\";e.identity=function(t){return t}},function(t,e,n){\"use strict\";var i=n(211);e.share=function(){return i.share()(this)}},function(t,e,n){\"use strict\";var i=n(212),r=n(164),o=n(74);e.share=function(){return function(t){return r.refCount()(i.multicast(function(){return new o.Subject})(t))}}},function(t,e,n){\"use strict\";var i=n(213);e.multicast=function(t,e){return function(n){var o;if(o=\"function\"==typeof t?t:function(){return t},\"function\"==typeof e)return n.lift(new r(o,e));var s=Object.create(n,i.connectableObservableDescriptor);return s.source=n,s.subjectFactory=o,s}};var r=function(){function t(t,e){this.subjectFactory=t,this.selector=e}return t.prototype.call=function(t,e){var n=this.selector,i=this.subjectFactory(),r=n(i).subscribe(t);return r.add(e.subscribe(i)),r},t}();e.MulticastOperator=r},function(t,e,n){\"use strict\";var i=n(3).__extends,r=n(74),o=n(42),s=(n(58),n(86)),a=n(164),l=function(t){function e(e,n){t.call(this),this.source=e,this.subjectFactory=n,this._refCount=0,this._isComplete=!1}return i(e,t),e.prototype._subscribe=function(t){return this.getSubject().subscribe(t)},e.prototype.getSubject=function(){var t=this._subject;return t&&!t.isStopped||(this._subject=this.subjectFactory()),this._subject},e.prototype.connect=function(){var t=this._connection;return t||(this._isComplete=!1,(t=this._connection=new s.Subscription).add(this.source.subscribe(new c(this.getSubject(),this))),t.closed?(this._connection=null,t=s.Subscription.EMPTY):this._connection=t),t},e.prototype.refCount=function(){return a.refCount()(this)},e}(o.Observable);e.ConnectableObservable=l;var u=l.prototype;e.connectableObservableDescriptor={operator:{value:null},_refCount:{value:0,writable:!0},_subject:{value:null,writable:!0},_connection:{value:null,writable:!0},_subscribe:{value:u._subscribe},_isComplete:{value:u._isComplete,writable:!0},getSubject:{value:u.getSubject},connect:{value:u.connect},refCount:{value:u.refCount}};var c=function(t){function e(e,n){t.call(this,e),this.connectable=n}return i(e,t),e.prototype._error=function(e){this._unsubscribe(),t.prototype._error.call(this,e)},e.prototype._complete=function(){this.connectable._isComplete=!0,this._unsubscribe(),t.prototype._complete.call(this)},e.prototype._unsubscribe=function(){var t=this.connectable;if(t){this.connectable=null;var e=t._connection;t._refCount=0,t._subject=null,t._connection=null,e&&e.unsubscribe()}},e}(r.SubjectSubscriber)},function(t,e,n){\"use strict\";var i=n(3).__extends,r=function(t){function e(){var e=t.call(this,\"object unsubscribed\");this.name=e.name=\"ObjectUnsubscribedError\",this.stack=e.stack,this.message=e.message}return i(e,t),e}(Error);e.ObjectUnsubscribedError=r},function(t,e,n){\"use strict\";var i=n(3).__extends,r=n(86);e.SubjectSubscription=function(t){function e(e,n){t.call(this),this.subject=e,this.subscriber=n,this.closed=!1}return i(e,t),e.prototype.unsubscribe=function(){if(!this.closed){this.closed=!0;var t=this.subject,e=t.observers;if(this.subject=null,e&&0!==e.length&&!t.isStopped&&!t.closed){var n=e.indexOf(this.subscriber);-1!==n&&e.splice(n,1)}}},e}(r.Subscription)},function(t,e,n){\"use strict\";var i=n(217);e.forkJoin=i.ForkJoinObservable.create},function(t,e,n){\"use strict\";var i=n(3).__extends,r=n(42),o=n(162),s=n(156),a=n(125),l=n(126);e.ForkJoinObservable=function(t){function e(e,n){t.call(this),this.sources=e,this.resultSelector=n}return i(e,t),e.create=function(){for(var t=[],n=0;n<arguments.length;n++)t[n-0]=arguments[n];if(null===t||0===arguments.length)return new o.EmptyObservable;var i=null;return\"function\"==typeof t[t.length-1]&&(i=t.pop()),1===t.length&&s.isArray(t[0])&&(t=t[0]),0===t.length?new o.EmptyObservable:new e(t,i)},e.prototype._subscribe=function(t){return new u(t,this.sources,this.resultSelector)},e}(r.Observable);var u=function(t){function e(e,n,i){t.call(this,e),this.sources=n,this.resultSelector=i,this.completed=0,this.haveValues=0;var r=n.length;this.total=r,this.values=new Array(r);for(var o=0;o<r;o++){var s=a.subscribeToResult(this,n[o],null,o);s&&(s.outerIndex=o,this.add(s))}}return i(e,t),e.prototype.notifyNext=function(t,e,n,i,r){this.values[n]=e,r._hasValue||(r._hasValue=!0,this.haveValues++)},e.prototype.notifyComplete=function(t){var e=this.destination,n=this.haveValues,i=this.resultSelector,r=this.values,o=r.length;if(t._hasValue){if(this.completed++,this.completed===o){if(n===o){var s=i?i.apply(this,r):r;e.next(s)}e.complete()}}else e.complete()},e}(l.OuterSubscriber)},function(t,e,n){\"use strict\";var i=n(219);e.fromPromise=i.PromiseObservable.create},function(t,e,n){\"use strict\";function i(t){var e=t.subscriber;e.closed||(e.next(t.value),e.complete())}var r=n(3).__extends,o=n(66),s=n(42);e.PromiseObservable=function(t){function e(e,n){t.call(this),this.promise=e,this.scheduler=n}return r(e,t),e.create=function(t,n){return new e(t,n)},e.prototype._subscribe=function(t){var e=this,n=this.promise,r=this.scheduler;if(null==r)this._isScalar?t.closed||(t.next(this.value),t.complete()):n.then(function(n){e.value=n,e._isScalar=!0,t.closed||(t.next(n),t.complete())},function(e){t.closed||t.error(e)}).then(null,function(t){o.root.setTimeout(function(){throw t})});else if(this._isScalar){if(!t.closed)return r.schedule(i,0,{value:this.value,subscriber:t})}else n.then(function(n){e.value=n,e._isScalar=!0,t.closed||t.add(r.schedule(i,0,{value:n,subscriber:t}))},function(e){t.closed||t.add(r.schedule(function(t){var e=t.subscriber;e.closed||e.error(t.err)},0,{err:e,subscriber:t}))}).then(null,function(t){o.root.setTimeout(function(){throw t})})},e}(s.Observable)},function(t,e,n){\"use strict\";var i=n(221);e.map=function(t,e){return i.map(t,e)(this)}},function(t,e,n){\"use strict\";var i=n(3).__extends,r=n(58);e.map=function(t,e){return function(n){if(\"function\"!=typeof t)throw new TypeError(\"argument is not a function. Are you looking for `mapTo()`?\");return n.lift(new o(t,e))}};var o=function(){function t(t,e){this.project=t,this.thisArg=e}return t.prototype.call=function(t,e){return e.subscribe(new s(t,this.project,this.thisArg))},t}();e.MapOperator=o;var s=function(t){function e(e,n,i){t.call(this,e),this.project=n,this.count=0,this.thisArg=i||this}return i(e,t),e.prototype._next=function(t){var e;try{e=this.project.call(this.thisArg,t,this.count++)}catch(t){return void this.destination.error(t)}this.destination.next(e)},e}(r.Subscriber)},function(t,e,n){\"use strict\";var i=n(223);e.takeUntil=function(t){return i.takeUntil(t)(this)}},function(t,e,n){\"use strict\";var i=n(3).__extends,r=n(126),o=n(125);e.takeUntil=function(t){return function(e){return e.lift(new s(t))}};var s=function(){function t(t){this.notifier=t}return t.prototype.call=function(t,e){return e.subscribe(new a(t,this.notifier))},t}(),a=function(t){function e(e,n){t.call(this,e),this.notifier=n,this.add(o.subscribeToResult(this,n))}return i(e,t),e.prototype.notifyNext=function(t,e,n,i,r){this.complete()},e.prototype.notifyComplete=function(){},e}(r.OuterSubscriber)},function(t,e,n){\"use strict\";n.d(e,\"a\",function(){return _});var i=n(0),r=n(30),o=n(1),s=n(22),a=n(28),l=n(21),u=n(45),c=n(89),p=n(4),h=n(15),f=n(33),d=i.X({encapsulation:2,styles:[],data:{}}),_=i.V(\"ion-action-sheet\",c.a,function(t){return i._22(0,[(t()(),i.Z(0,0,null,null,1,\"ion-action-sheet\",[[\"role\",\"dialog\"]],[[1,\"aria-labelledby\",0],[1,\"aria-describedby\",0]],[[\"body\",\"keyup\"]],function(t,e,n){var r=!0;return\"body:keyup\"===e&&(r=!1!==i._13(t,1).keyUp(n)&&r),r},function(t){return i._22(0,[(t()(),i.Z(0,0,null,null,1,\"ion-backdrop\",[[\"disable-activated\",\"\"],[\"role\",\"presentation\"],[\"tappable\",\"\"]],[[2,\"backdrop-no-tappable\",null]],[[null,\"click\"]],function(t,e,n){var i=!0;return\"click\"===e&&(i=!1!==t.component.bdClick()&&i),i},null,null)),i.Y(1,16384,null,0,u.a,[i.j,i.z],null,null),(t()(),i.Z(2,0,null,null,10,\"div\",[[\"class\",\"action-sheet-wrapper\"]],null,null,null,null,null)),(t()(),i.Z(3,0,null,null,9,\"div\",[[\"class\",\"action-sheet-container\"]],null,null,null,null,null)),(t()(),i.Z(4,0,null,null,6,\"div\",[[\"class\",\"action-sheet-group\"]],null,null,null,null,null)),(t()(),i.U(16777216,null,null,1,null,function(t){return i._22(0,[(t()(),i.Z(0,0,null,null,1,\"div\",[[\"class\",\"action-sheet-title\"]],[[8,\"id\",0]],null,null,null,null)),(t()(),i._20(1,null,[\"\",\"\"]))],null,function(t,e){var n=e.component;t(e,0,0,i._2(1,\"\",n.hdrId,\"\")),t(e,1,0,n.d.title)})})),i.Y(6,16384,null,0,a.i,[i.I,i.F],{ngIf:[0,\"ngIf\"]},null),(t()(),i.U(16777216,null,null,1,null,function(t){return i._22(0,[(t()(),i.Z(0,0,null,null,1,\"div\",[[\"class\",\"action-sheet-sub-title\"]],[[8,\"id\",0]],null,null,null,null)),(t()(),i._20(1,null,[\"\",\"\"]))],null,function(t,e){var n=e.component;t(e,0,0,i._2(1,\"\",n.descId,\"\")),t(e,1,0,n.d.subTitle)})})),i.Y(8,16384,null,0,a.i,[i.I,i.F],{ngIf:[0,\"ngIf\"]},null),(t()(),i.U(16777216,null,null,1,null,function(t){return i._22(0,[(t()(),i.Z(0,0,null,null,5,\"button\",[[\"class\",\"disable-hover\"],[\"ion-button\",\"action-sheet-button\"]],[[1,\"icon-start\",0]],[[null,\"click\"]],function(t,e,n){var i=!0;return\"click\"===e&&(i=!1!==t.component.click(t.context.$implicit)&&i),i},s.b,s.a)),i.Y(1,278528,null,0,a.g,[i.p,i.q,i.j,i.A],{klass:[0,\"klass\"],ngClass:[1,\"ngClass\"]},null),i.Y(2,1097728,null,0,l.a,[[8,\"action-sheet-button\"],o.a,i.j,i.z],null,null),(t()(),i.U(16777216,null,0,1,null,function(t){return i._22(0,[(t()(),i.Z(0,0,null,null,1,\"ion-icon\",[[\"class\",\"action-sheet-icon\"],[\"role\",\"img\"]],[[2,\"hide\",null]],null,null,null,null)),i.Y(1,147456,null,0,r.a,[o.a,i.j,i.z],{name:[0,\"name\"]},null)],function(t,e){t(e,1,0,e.parent.context.$implicit.icon)},function(t,e){t(e,0,0,i._13(e,1)._hidden)})})),i.Y(4,16384,null,0,a.i,[i.I,i.F],{ngIf:[0,\"ngIf\"]},null),(t()(),i._20(5,0,[\"\",\"\"]))],function(t,e){t(e,1,0,\"disable-hover\",e.context.$implicit.cssClass),t(e,4,0,e.context.$implicit.icon)},function(t,e){t(e,0,0,e.context.$implicit.icon?\"\":null),t(e,5,0,e.context.$implicit.text)})})),i.Y(10,802816,null,0,a.h,[i.I,i.F,i.p],{ngForOf:[0,\"ngForOf\"]},null),(t()(),i.U(16777216,null,null,1,null,function(t){return i._22(0,[(t()(),i.Z(0,0,null,null,6,\"div\",[[\"class\",\"action-sheet-group action-sheet-group-cancel\"]],null,null,null,null,null)),(t()(),i.Z(1,0,null,null,5,\"button\",[[\"class\",\"action-sheet-cancel disable-hover\"],[\"ion-button\",\"action-sheet-button\"]],[[1,\"icon-start\",0]],[[null,\"click\"]],function(t,e,n){var i=!0,r=t.component;return\"click\"===e&&(i=!1!==r.click(r.cancelButton)&&i),i},s.b,s.a)),i.Y(2,278528,null,0,a.g,[i.p,i.q,i.j,i.A],{klass:[0,\"klass\"],ngClass:[1,\"ngClass\"]},null),i.Y(3,1097728,null,0,l.a,[[8,\"action-sheet-button\"],o.a,i.j,i.z],null,null),(t()(),i.U(16777216,null,0,1,null,function(t){return i._22(0,[(t()(),i.Z(0,0,null,null,1,\"ion-icon\",[[\"class\",\"action-sheet-icon\"],[\"role\",\"img\"]],[[2,\"hide\",null]],null,null,null,null)),i.Y(1,147456,null,0,r.a,[o.a,i.j,i.z],{name:[0,\"name\"]},null)],function(t,e){t(e,1,0,e.component.cancelButton.icon)},function(t,e){t(e,0,0,i._13(e,1)._hidden)})})),i.Y(5,16384,null,0,a.i,[i.I,i.F],{ngIf:[0,\"ngIf\"]},null),(t()(),i._20(6,0,[\"\",\"\"]))],function(t,e){var n=e.component;t(e,2,0,\"action-sheet-cancel disable-hover\",n.cancelButton.cssClass),t(e,5,0,n.cancelButton.icon)},function(t,e){var n=e.component;t(e,1,0,n.cancelButton.icon?\"\":null),t(e,6,0,n.cancelButton.text)})})),i.Y(12,16384,null,0,a.i,[i.I,i.F],{ngIf:[0,\"ngIf\"]},null)],function(t,e){var n=e.component;t(e,6,0,n.d.title),t(e,8,0,n.d.subTitle),t(e,10,0,n.d.buttons),t(e,12,0,n.cancelButton)},function(t,e){t(e,0,0,!e.component.d.enableBackdropDismiss)})},d)),i.Y(1,180224,null,0,c.a,[p.a,o.a,i.j,h.l,f.a,i.z],null,null)],null,function(t,e){t(e,0,0,i._13(e,1).hdrId,i._13(e,1).descId)})},{},{},[])},function(t,e,n){\"use strict\";n.d(e,\"a\",function(){return v});var i=n(0),r=n(22),o=n(21),s=n(1),a=n(28),l=n(24),u=n(45),c=n(91),p=n(4),h=n(15),f=n(33),d=n(2),_=i.X({encapsulation:2,styles:[],data:{}}),v=i.V(\"ion-alert\",c.a,function(t){return i._22(0,[(t()(),i.Z(0,0,null,null,1,\"ion-alert\",[[\"role\",\"dialog\"]],[[1,\"aria-labelledby\",0],[1,\"aria-describedby\",0]],[[\"body\",\"keyup\"]],function(t,e,n){var r=!0;return\"body:keyup\"===e&&(r=!1!==i._13(t,1).keyUp(n)&&r),r},function(t){return i._22(0,[(t()(),i.Z(0,0,null,null,1,\"ion-backdrop\",[[\"disable-activated\",\"\"],[\"role\",\"presentation\"],[\"tappable\",\"\"]],[[2,\"backdrop-no-tappable\",null]],[[null,\"click\"]],function(t,e,n){var i=!0;return\"click\"===e&&(i=!1!==t.component.bdClick()&&i),i},null,null)),i.Y(1,16384,null,0,u.a,[i.j,i.z],null,null),(t()(),i.Z(2,0,null,null,13,\"div\",[[\"class\",\"alert-wrapper\"]],null,null,null,null,null)),(t()(),i.Z(3,0,null,null,4,\"div\",[[\"class\",\"alert-head\"]],null,null,null,null,null)),(t()(),i.U(16777216,null,null,1,null,function(t){return i._22(0,[(t()(),i.Z(0,0,null,null,0,\"h2\",[[\"class\",\"alert-title\"]],[[8,\"id\",0],[8,\"innerHTML\",1]],null,null,null,null))],null,function(t,e){var n=e.component;t(e,0,0,i._2(1,\"\",n.hdrId,\"\"),n.d.title)})})),i.Y(5,16384,null,0,a.i,[i.I,i.F],{ngIf:[0,\"ngIf\"]},null),(t()(),i.U(16777216,null,null,1,null,function(t){return i._22(0,[(t()(),i.Z(0,0,null,null,0,\"h3\",[[\"class\",\"alert-sub-title\"]],[[8,\"id\",0],[8,\"innerHTML\",1]],null,null,null,null))],null,function(t,e){var n=e.component;t(e,0,0,i._2(1,\"\",n.subHdrId,\"\"),n.d.subTitle)})})),i.Y(7,16384,null,0,a.i,[i.I,i.F],{ngIf:[0,\"ngIf\"]},null),(t()(),i.Z(8,0,null,null,0,\"div\",[[\"class\",\"alert-message\"]],[[8,\"id\",0],[8,\"innerHTML\",1]],null,null,null,null)),(t()(),i.U(16777216,null,null,1,null,function(t){return i._22(0,[(t()(),i.Z(0,0,null,null,7,\"div\",[],null,null,null,null,null)),i.Y(1,16384,null,0,a.m,[],{ngSwitch:[0,\"ngSwitch\"]},null),(t()(),i.U(16777216,null,null,1,null,function(t){return i._22(0,[(t()(),i.Z(0,0,null,null,2,\"div\",[[\"class\",\"alert-radio-group\"],[\"role\",\"radiogroup\"]],[[1,\"aria-labelledby\",0],[1,\"aria-activedescendant\",0]],null,null,null,null)),(t()(),i.U(16777216,null,null,1,null,function(t){return i._22(0,[(t()(),i.Z(0,0,null,null,5,\"button\",[[\"class\",\"alert-tappable alert-radio\"],[\"ion-button\",\"alert-radio-button\"],[\"role\",\"radio\"]],[[1,\"aria-checked\",0],[8,\"disabled\",0],[1,\"id\",0]],[[null,\"click\"]],function(t,e,n){var i=!0;return\"click\"===e&&(i=!1!==t.component.rbClick(t.context.$implicit)&&i),i},r.b,r.a)),i.Y(1,1097728,null,0,o.a,[[8,\"alert-radio-button\"],s.a,i.j,i.z],null,null),(t()(),i.Z(2,0,null,0,1,\"div\",[[\"class\",\"alert-radio-icon\"]],null,null,null,null,null)),(t()(),i.Z(3,0,null,null,0,\"div\",[[\"class\",\"alert-radio-inner\"]],null,null,null,null,null)),(t()(),i.Z(4,0,null,0,1,\"div\",[[\"class\",\"alert-radio-label\"]],null,null,null,null,null)),(t()(),i._20(5,null,[\"\",\"\"]))],null,function(t,e){t(e,0,0,e.context.$implicit.checked,e.context.$implicit.disabled,e.context.$implicit.id),t(e,5,0,e.context.$implicit.label)})})),i.Y(2,802816,null,0,a.h,[i.I,i.F,i.p],{ngForOf:[0,\"ngForOf\"]},null)],function(t,e){t(e,2,0,e.component.d.inputs)},function(t,e){var n=e.component;t(e,0,0,n.hdrId,n.activeId)})})),i.Y(3,278528,null,0,a.n,[i.I,i.F,a.m],{ngSwitchCase:[0,\"ngSwitchCase\"]},null),(t()(),i.U(16777216,null,null,1,null,function(t){return i._22(0,[(t()(),i.Z(0,0,null,null,2,\"div\",[[\"class\",\"alert-checkbox-group\"]],null,null,null,null,null)),(t()(),i.U(16777216,null,null,1,null,function(t){return i._22(0,[(t()(),i.Z(0,0,null,null,5,\"button\",[[\"class\",\"alert-tappable alert-checkbox\"],[\"ion-button\",\"alert-checkbox-button\"],[\"role\",\"checkbox\"]],[[1,\"aria-checked\",0],[1,\"id\",0],[8,\"disabled\",0]],[[null,\"click\"]],function(t,e,n){var i=!0;return\"click\"===e&&(i=!1!==t.component.cbClick(t.context.$implicit)&&i),i},r.b,r.a)),i.Y(1,1097728,null,0,o.a,[[8,\"alert-checkbox-button\"],s.a,i.j,i.z],null,null),(t()(),i.Z(2,0,null,0,1,\"div\",[[\"class\",\"alert-checkbox-icon\"]],null,null,null,null,null)),(t()(),i.Z(3,0,null,null,0,\"div\",[[\"class\",\"alert-checkbox-inner\"]],null,null,null,null,null)),(t()(),i.Z(4,0,null,0,1,\"div\",[[\"class\",\"alert-checkbox-label\"]],null,null,null,null,null)),(t()(),i._20(5,null,[\"\",\"\"]))],null,function(t,e){t(e,0,0,e.context.$implicit.checked,e.context.$implicit.id,e.context.$implicit.disabled),t(e,5,0,e.context.$implicit.label)})})),i.Y(2,802816,null,0,a.h,[i.I,i.F,i.p],{ngForOf:[0,\"ngForOf\"]},null)],function(t,e){t(e,2,0,e.component.d.inputs)},null)})),i.Y(5,278528,null,0,a.n,[i.I,i.F,a.m],{ngSwitchCase:[0,\"ngSwitchCase\"]},null),(t()(),i.U(16777216,null,null,1,null,function(t){return i._22(0,[(t()(),i.Z(0,0,null,null,2,\"div\",[[\"class\",\"alert-input-group\"]],null,null,null,null,null)),(t()(),i.U(16777216,null,null,1,null,function(t){return i._22(0,[(t()(),i.Z(0,0,null,null,6,\"div\",[[\"class\",\"alert-input-wrapper\"]],null,null,null,null,null)),(t()(),i.Z(1,0,null,null,5,\"input\",[[\"class\",\"alert-input\"],[\"dir\",\"auto\"]],[[8,\"placeholder\",0],[8,\"type\",0],[8,\"min\",0],[8,\"max\",0],[1,\"id\",0],[2,\"ng-untouched\",null],[2,\"ng-touched\",null],[2,\"ng-pristine\",null],[2,\"ng-dirty\",null],[2,\"ng-valid\",null],[2,\"ng-invalid\",null],[2,\"ng-pending\",null]],[[null,\"ngModelChange\"],[null,\"input\"],[null,\"blur\"],[null,\"compositionstart\"],[null,\"compositionend\"]],function(t,e,n){var r=!0;return\"input\"===e&&(r=!1!==i._13(t,2)._handleInput(n.target.value)&&r),\"blur\"===e&&(r=!1!==i._13(t,2).onTouched()&&r),\"compositionstart\"===e&&(r=!1!==i._13(t,2)._compositionStart()&&r),\"compositionend\"===e&&(r=!1!==i._13(t,2)._compositionEnd(n.target.value)&&r),\"ngModelChange\"===e&&(r=!1!==(t.context.$implicit.value=n)&&r),r},null,null)),i.Y(2,16384,null,0,l.c,[i.A,i.j,[2,l.a]],null,null),i._17(1024,null,l.j,function(t){return[t]},[l.c]),i.Y(4,671744,null,0,l.n,[[8,null],[8,null],[8,null],[2,l.j]],{model:[0,\"model\"]},{update:\"ngModelChange\"}),i._17(2048,null,l.k,null,[l.n]),i.Y(6,16384,null,0,l.l,[l.k],null,null)],function(t,e){t(e,4,0,e.context.$implicit.value)},function(t,e){t(e,1,1,[e.context.$implicit.placeholder,e.context.$implicit.type,e.context.$implicit.min,e.context.$implicit.max,e.context.$implicit.id,i._13(e,6).ngClassUntouched,i._13(e,6).ngClassTouched,i._13(e,6).ngClassPristine,i._13(e,6).ngClassDirty,i._13(e,6).ngClassValid,i._13(e,6).ngClassInvalid,i._13(e,6).ngClassPending])})})),i.Y(2,802816,null,0,a.h,[i.I,i.F,i.p],{ngForOf:[0,\"ngForOf\"]},null)],function(t,e){t(e,2,0,e.component.d.inputs)},null)})),i.Y(7,16384,null,0,a.o,[i.I,i.F,a.m],null,null)],function(t,e){t(e,1,0,e.component.inputType),t(e,3,0,\"radio\"),t(e,5,0,\"checkbox\")},null)})),i.Y(10,16384,null,0,a.i,[i.I,i.F],{ngIf:[0,\"ngIf\"]},null),(t()(),i.Z(11,0,null,null,4,\"div\",[[\"class\",\"alert-button-group\"]],null,null,null,null,null)),i.Y(12,278528,null,0,a.g,[i.p,i.q,i.j,i.A],{klass:[0,\"klass\"],ngClass:[1,\"ngClass\"]},null),i._15(13,{\"alert-button-group-vertical\":0}),(t()(),i.U(16777216,null,null,1,null,function(t){return i._22(0,[(t()(),i.Z(0,0,null,null,3,\"button\",[[\"ion-button\",\"alert-button\"]],null,[[null,\"click\"]],function(t,e,n){var i=!0;return\"click\"===e&&(i=!1!==t.component.btnClick(t.context.$implicit)&&i),i},r.b,r.a)),i.Y(1,278528,null,0,a.g,[i.p,i.q,i.j,i.A],{ngClass:[0,\"ngClass\"]},null),i.Y(2,1097728,null,0,o.a,[[8,\"alert-button\"],s.a,i.j,i.z],null,null),(t()(),i._20(3,0,[\"\",\"\"]))],function(t,e){t(e,1,0,e.context.$implicit.cssClass)},function(t,e){t(e,3,0,e.context.$implicit.text)})})),i.Y(15,802816,null,0,a.h,[i.I,i.F,i.p],{ngForOf:[0,\"ngForOf\"]},null)],function(t,e){var n=e.component;t(e,5,0,n.d.title),t(e,7,0,n.d.subTitle),t(e,10,0,n.d.inputs.length),t(e,12,0,\"alert-button-group\",t(e,13,0,n.d.buttons.length>2)),t(e,15,0,n.d.buttons)},function(t,e){var n=e.component;t(e,0,0,!n.d.enableBackdropDismiss),t(e,8,0,i._2(1,\"\",n.msgId,\"\"),n.d.message)})},_)),i.Y(1,180224,null,0,c.a,[p.a,i.j,s.a,h.l,f.a,i.z,d.a],null,null)],null,function(t,e){t(e,0,0,i._13(e,1).hdrId,i._13(e,1).descId)})},{},{},[])},function(t,e,n){\"use strict\";n.d(e,\"a\",function(){return _});var i=n(0),r=n(127),o=n(5),s=n(1),a=n(2),l=n(15),u=n(37),c=n(31),p=n(6),h=n(189),f=n(75),d=i.X({encapsulation:2,styles:[],data:{}}),_=i.V(\"ion-app\",f.b,function(t){return i._22(0,[(t()(),i.Z(0,0,null,null,1,\"ion-app\",[],null,null,null,function(t){return i._22(0,[i._18(402653184,1,{_viewport:0}),i._18(402653184,2,{_modalPortal:0}),i._18(402653184,3,{_overlayPortal:0}),i._18(402653184,4,{_loadingPortal:0}),i._18(402653184,5,{_toastPortal:0}),(t()(),i.Z(5,16777216,[[1,3],[\"viewport\",1]],null,0,\"div\",[[\"app-viewport\",\"\"]],null,null,null,null,null)),(t()(),i.Z(6,16777216,[[\"modalPortal\",1]],null,1,\"div\",[[\"overlay-portal\",\"\"]],null,null,null,null,null)),i.Y(7,147456,[[2,4]],0,r.a,[o.a,s.a,a.a,i.j,i.u,i.z,i.i,l.l,u.a,[2,c.a],i.I,p.a,i.k],{_overlayPortal:[0,\"_overlayPortal\"]},null),(t()(),i.Z(8,16777216,[[\"overlayPortal\",1]],null,1,\"div\",[[\"overlay-portal\",\"\"]],null,null,null,null,null)),i.Y(9,147456,[[3,4]],0,r.a,[o.a,s.a,a.a,i.j,i.u,i.z,i.i,l.l,u.a,[2,c.a],i.I,p.a,i.k],{_overlayPortal:[0,\"_overlayPortal\"]},null),(t()(),i.Z(10,16777216,[[\"loadingPortal\",1]],null,1,\"div\",[[\"class\",\"loading-portal\"],[\"overlay-portal\",\"\"]],null,null,null,null,null)),i.Y(11,147456,[[4,4]],0,r.a,[o.a,s.a,a.a,i.j,i.u,i.z,i.i,l.l,u.a,[2,c.a],i.I,p.a,i.k],{_overlayPortal:[0,\"_overlayPortal\"]},null),(t()(),i.Z(12,16777216,[[\"toastPortal\",1]],null,1,\"div\",[[\"class\",\"toast-portal\"]],null,null,null,null,null)),i.Y(13,147456,[[5,4]],0,r.a,[o.a,s.a,a.a,i.j,i.u,i.z,i.i,l.l,u.a,[2,c.a],i.I,p.a,i.k],{_overlayPortal:[0,\"_overlayPortal\"]},null),(t()(),i.Z(14,0,null,null,1,\"div\",[[\"class\",\"click-block\"]],null,null,null,null,null)),i.Y(15,16384,null,0,h.a,[o.a,s.a,a.a,i.j,i.z],null,null)],function(t,e){t(e,7,0,\"\"),t(e,9,0,\"\"),t(e,11,0,\"\"),t(e,13,0,1e4)},null)},d)),i.Y(1,114688,null,0,f.b,[f.a,i.i,i.j,i.z,s.a,a.a,o.a],null,null)],function(t,e){t(e,1,0)},null)},{color:\"color\",mode:\"mode\"},{},[])},function(t,e,n){\"use strict\";function i(t){return r._22(2,[(t()(),r.U(16777216,null,null,1,null,function(t){return r._22(0,[(t()(),r.Z(0,0,null,null,2,\":svg:svg\",[[\"viewBox\",\"0 0 64 64\"]],null,null,null,null,null)),r.Y(1,278528,null,0,o.l,[r.q,r.j,r.A],{ngStyle:[0,\"ngStyle\"]},null),(t()(),r.Z(2,0,null,null,0,\":svg:circle\",[[\"transform\",\"translate(32,32)\"]],[[1,\"r\",0]],null,null,null,null))],function(t,e){t(e,1,0,e.context.$implicit.style)},function(t,e){t(e,2,0,e.context.$implicit.r)})})),r.Y(1,802816,null,0,o.h,[r.I,r.F,r.p],{ngForOf:[0,\"ngForOf\"]},null),(t()(),r.U(16777216,null,null,1,null,function(t){return r._22(0,[(t()(),r.Z(0,0,null,null,2,\":svg:svg\",[[\"viewBox\",\"0 0 64 64\"]],null,null,null,null,null)),r.Y(1,278528,null,0,o.l,[r.q,r.j,r.A],{ngStyle:[0,\"ngStyle\"]},null),(t()(),r.Z(2,0,null,null,0,\":svg:line\",[[\"transform\",\"translate(32,32)\"]],[[1,\"y1\",0],[1,\"y2\",0]],null,null,null,null))],function(t,e){t(e,1,0,e.context.$implicit.style)},function(t,e){t(e,2,0,e.context.$implicit.y1,e.context.$implicit.y2)})})),r.Y(3,802816,null,0,o.h,[r.I,r.F,r.p],{ngForOf:[0,\"ngForOf\"]},null)],function(t,e){var n=e.component;t(e,1,0,n._c);t(e,3,0,n._l)},null)}var r=n(0),o=n(28),s=n(117),a=n(1),l=r.X({encapsulation:2,styles:[],data:{}}),u=n(45),c=n(102),p=n(4),h=n(15),f=n(33);n.d(e,\"a\",function(){return _});var d=r.X({encapsulation:2,styles:[],data:{}}),_=r.V(\"ion-loading\",c.a,function(t){return r._22(0,[(t()(),r.Z(0,0,null,null,1,\"ion-loading\",[[\"role\",\"dialog\"]],null,[[\"body\",\"keyup\"]],function(t,e,n){var i=!0;return\"body:keyup\"===e&&(i=!1!==r._13(t,1).keyUp(n)&&i),i},function(t){return r._22(0,[(t()(),r.Z(0,0,null,null,1,\"ion-backdrop\",[[\"disable-activated\",\"\"],[\"role\",\"presentation\"],[\"tappable\",\"\"]],[[8,\"hidden\",0],[2,\"backdrop-no-tappable\",null]],[[null,\"click\"]],function(t,e,n){var i=!0;return\"click\"===e&&(i=!1!==t.component.bdClick()&&i),i},null,null)),r.Y(1,16384,null,0,u.a,[r.j,r.z],null,null),(t()(),r.Z(2,0,null,null,4,\"div\",[[\"class\",\"loading-wrapper\"]],null,null,null,null,null)),(t()(),r.U(16777216,null,null,1,null,function(t){return r._22(0,[(t()(),r.Z(0,0,null,null,2,\"div\",[[\"class\",\"loading-spinner\"]],null,null,null,null,null)),(t()(),r.Z(1,0,null,null,1,\"ion-spinner\",[],[[2,\"spinner-paused\",null]],null,null,i,l)),r.Y(2,114688,null,0,s.a,[a.a,r.j,r.z],{name:[0,\"name\"]},null)],function(t,e){t(e,2,0,e.component.d.spinner)},function(t,e){t(e,1,0,r._13(e,2)._paused)})})),r.Y(4,16384,null,0,o.i,[r.I,r.F],{ngIf:[0,\"ngIf\"]},null),(t()(),r.U(16777216,null,null,1,null,function(t){return r._22(0,[(t()(),r.Z(0,0,null,null,0,\"div\",[[\"class\",\"loading-content\"]],[[8,\"innerHTML\",1]],null,null,null,null))],null,function(t,e){t(e,0,0,e.component.d.content)})})),r.Y(6,16384,null,0,o.i,[r.I,r.F],{ngIf:[0,\"ngIf\"]},null)],function(t,e){var n=e.component;t(e,4,0,n.showSpinner),t(e,6,0,n.d.content)},function(t,e){var n=e.component;t(e,0,0,!n.d.showBackdrop,!n.d.enableBackdropDismiss)})},d)),r.Y(1,245760,null,0,c.a,[p.a,a.a,r.j,h.l,f.a,r.z],null,null)],function(t,e){t(e,1,0)},null)},{},{},[])},function(t,e,n){\"use strict\";n.d(e,\"a\",function(){return p});var i=n(0),r=n(45),o=n(105),s=n(33),a=n(4),l=n(15),u=n(70),c=i.X({encapsulation:2,styles:[],data:{}}),p=i.V(\"ion-modal\",o.a,function(t){return i._22(0,[(t()(),i.Z(0,0,null,null,1,\"ion-modal\",[],null,[[\"body\",\"keyup\"]],function(t,e,n){var r=!0;return\"body:keyup\"===e&&(r=!1!==i._13(t,1)._keyUp(n)&&r),r},function(t){return i._22(0,[i._18(402653184,1,{_viewport:0}),(t()(),i.Z(1,0,null,null,1,\"ion-backdrop\",[[\"disable-activated\",\"\"],[\"role\",\"presentation\"],[\"tappable\",\"\"]],[[2,\"backdrop-no-tappable\",null]],[[null,\"click\"]],function(t,e,n){var i=!0;return\"click\"===e&&(i=!1!==t.component._bdClick()&&i),i},null,null)),i.Y(2,16384,null,0,r.a,[i.j,i.z],null,null),(t()(),i.Z(3,0,null,null,1,\"div\",[[\"class\",\"modal-wrapper\"]],null,null,null,null,null)),(t()(),i.Z(4,16777216,[[1,3],[\"viewport\",1]],null,0,\"div\",[[\"nav-viewport\",\"\"]],null,null,null,null,null))],null,function(t,e){t(e,1,0,!e.component._bdDismiss)})},c)),i.Y(1,180224,null,0,o.a,[i.i,i.z,i.j,s.a,a.a,l.l,u.b],null,null)],null,null)},{},{},[])},function(t,e,n){\"use strict\";function i(t){return r._22(0,[r._18(402653184,1,{colEle:0}),(t()(),r.U(16777216,null,null,1,null,function(t){return r._22(0,[(t()(),r.Z(0,0,null,null,1,\"div\",[[\"class\",\"picker-prefix\"]],[[4,\"width\",null]],null,null,null,null)),(t()(),r._20(1,null,[\"\",\"\"]))],null,function(t,e){var n=e.component;t(e,0,0,n.col.prefixWidth),t(e,1,0,n.col.prefix)})})),r.Y(2,16384,null,0,o.i,[r.I,r.F],{ngIf:[0,\"ngIf\"]},null),(t()(),r.Z(3,0,[[1,0],[\"colEle\",1]],null,2,\"div\",[[\"class\",\"picker-opts\"]],[[4,\"max-width\",null]],null,null,null,null)),(t()(),r.U(16777216,null,null,1,null,function(t){return r._22(0,[(t()(),r.Z(0,0,null,null,1,\"button\",[[\"class\",\"picker-opt\"],[\"disable-activated\",\"\"]],[[2,\"picker-opt-disabled\",null]],[[null,\"click\"]],function(t,e,n){var i=!0;return\"click\"===e&&(i=!1!==t.component.optClick(n,t.context.index)&&i),i},null,null)),(t()(),r._20(1,null,[\"\",\"\"]))],null,function(t,e){t(e,0,0,e.context.$implicit.disabled),t(e,1,0,e.context.$implicit.text)})})),r.Y(5,802816,null,0,o.h,[r.I,r.F,r.p],{ngForOf:[0,\"ngForOf\"]},null),(t()(),r.U(16777216,null,null,1,null,function(t){return r._22(0,[(t()(),r.Z(0,0,null,null,1,\"div\",[[\"class\",\"picker-suffix\"]],[[4,\"width\",null]],null,null,null,null)),(t()(),r._20(1,null,[\"\",\"\"]))],null,function(t,e){var n=e.component;t(e,0,0,n.col.suffixWidth),t(e,1,0,n.col.suffix)})})),r.Y(7,16384,null,0,o.i,[r.I,r.F],{ngIf:[0,\"ngIf\"]},null)],function(t,e){var n=e.component;t(e,2,0,n.col.prefix);t(e,5,0,n.col.options);t(e,7,0,n.col.suffix)},function(t,e){t(e,3,0,e.component.col.optionsWidth)})}var r=n(0),o=n(28),s=n(22),a=n(21),l=n(1),u=n(78),c=n(2),p=n(40),h=n(6),f=r.X({encapsulation:2,styles:[],data:{}}),d=n(45),_=n(97),v=n(4),y=n(15),m=n(33);n.d(e,\"a\",function(){return b});var g=r.X({encapsulation:2,styles:[],data:{}}),b=r.V(\"ion-picker-cmp\",_.a,function(t){return r._22(0,[(t()(),r.Z(0,0,null,null,1,\"ion-picker-cmp\",[[\"role\",\"dialog\"]],null,[[\"body\",\"keyup\"]],function(t,e,n){var i=!0;return\"body:keyup\"===e&&(i=!1!==r._13(t,1)._keyUp(n)&&i),i},function(t){return r._22(0,[r._18(671088640,1,{_cols:1}),(t()(),r._20(-1,null,[\"\\n    \"])),(t()(),r.Z(2,0,null,null,1,\"ion-backdrop\",[[\"disable-activated\",\"\"],[\"role\",\"presentation\"],[\"tappable\",\"\"]],null,[[null,\"click\"]],function(t,e,n){var i=!0;return\"click\"===e&&(i=!1!==t.component.bdClick()&&i),i},null,null)),r.Y(3,16384,null,0,d.a,[r.j,r.z],null,null),(t()(),r._20(-1,null,[\"\\n    \"])),(t()(),r.Z(5,0,null,null,17,\"div\",[[\"class\",\"picker-wrapper\"]],null,null,null,null,null)),(t()(),r._20(-1,null,[\"\\n      \"])),(t()(),r.Z(7,0,null,null,4,\"div\",[[\"class\",\"picker-toolbar\"]],null,null,null,null,null)),(t()(),r._20(-1,null,[\"\\n        \"])),(t()(),r.U(16777216,null,null,1,null,function(t){return r._22(0,[(t()(),r.Z(0,0,null,null,7,\"div\",[[\"class\",\"picker-toolbar-button\"]],null,null,null,null,null)),r.Y(1,278528,null,0,o.g,[r.p,r.q,r.j,r.A],{klass:[0,\"klass\"],ngClass:[1,\"ngClass\"]},null),(t()(),r._20(-1,null,[\"\\n          \"])),(t()(),r.Z(3,0,null,null,3,\"button\",[[\"class\",\"picker-button\"],[\"clear\",\"\"],[\"ion-button\",\"\"]],null,[[null,\"click\"]],function(t,e,n){var i=!0;return\"click\"===e&&(i=!1!==t.component.btnClick(t.context.$implicit)&&i),i},s.b,s.a)),r.Y(4,278528,null,0,o.g,[r.p,r.q,r.j,r.A],{klass:[0,\"klass\"],ngClass:[1,\"ngClass\"]},null),r.Y(5,1097728,null,0,a.a,[[8,\"\"],l.a,r.j,r.z],{clear:[0,\"clear\"]},null),(t()(),r._20(6,0,[\"\\n            \",\"\\n          \"])),(t()(),r._20(-1,null,[\"\\n        \"]))],function(t,e){t(e,1,0,\"picker-toolbar-button\",e.context.$implicit.cssRole),t(e,4,0,\"picker-button\",e.context.$implicit.cssClass),t(e,5,0,\"\")},function(t,e){t(e,6,0,e.context.$implicit.text)})})),r.Y(10,802816,null,0,o.h,[r.I,r.F,r.p],{ngForOf:[0,\"ngForOf\"]},null),(t()(),r._20(-1,null,[\"\\n      \"])),(t()(),r._20(-1,null,[\"\\n      \"])),(t()(),r.Z(13,0,null,null,8,\"div\",[[\"class\",\"picker-columns\"]],null,null,null,null,null)),(t()(),r._20(-1,null,[\"\\n        \"])),(t()(),r.Z(15,0,null,null,0,\"div\",[[\"class\",\"picker-above-highlight\"]],null,null,null,null,null)),(t()(),r._20(-1,null,[\"\\n        \"])),(t()(),r.U(16777216,null,null,1,null,function(t){return r._22(0,[(t()(),r.Z(0,0,null,null,1,\"div\",[[\"class\",\"picker-col\"]],[[4,\"max-width\",null],[2,\"picker-opts-left\",null],[2,\"picker-opts-right\",null]],[[null,\"ionChange\"]],function(t,e,n){var i=!0;return\"ionChange\"===e&&(i=!1!==t.component._colChange(n)&&i),i},i,f)),r.Y(1,4374528,[[1,4]],0,u.a,[l.a,c.a,r.j,r.u,p.a,c.a,h.a],{col:[0,\"col\"]},{ionChange:\"ionChange\"})],function(t,e){t(e,1,0,e.context.$implicit)},function(t,e){t(e,0,0,r._13(e,1).col.columnWidth,\"left\"==r._13(e,1).col.align,\"right\"==r._13(e,1).col.align)})})),r.Y(18,802816,null,0,o.h,[r.I,r.F,r.p],{ngForOf:[0,\"ngForOf\"]},null),(t()(),r._20(-1,null,[\"\\n        \"])),(t()(),r.Z(20,0,null,null,0,\"div\",[[\"class\",\"picker-below-highlight\"]],null,null,null,null,null)),(t()(),r._20(-1,null,[\"\\n      \"])),(t()(),r._20(-1,null,[\"\\n    \"])),(t()(),r._20(-1,null,[\"\\n  \"]))],function(t,e){var n=e.component;t(e,10,0,n.d.buttons),t(e,18,0,n.d.columns)},null)},g)),r.Y(1,180224,null,0,_.a,[v.a,r.j,l.a,y.l,m.a,r.z],null,null)],null,null)},{},{},[])},function(t,e,n){\"use strict\";n.d(e,\"a\",function(){return h});var i=n(0),r=n(45),o=n(108),s=n(1),a=n(33),l=n(4),u=n(15),c=n(70),p=i.X({encapsulation:2,styles:[],data:{}}),h=i.V(\"ion-popover\",o.a,function(t){return i._22(0,[(t()(),i.Z(0,0,null,null,1,\"ion-popover\",[],null,[[\"body\",\"keyup\"]],function(t,e,n){var r=!0;return\"body:keyup\"===e&&(r=!1!==i._13(t,1)._keyUp(n)&&r),r},function(t){return i._22(0,[i._18(402653184,1,{_viewport:0}),(t()(),i.Z(1,0,null,null,1,\"ion-backdrop\",[[\"disable-activated\",\"\"],[\"role\",\"presentation\"],[\"tappable\",\"\"]],[[8,\"hidden\",0]],[[null,\"click\"]],function(t,e,n){var i=!0;return\"click\"===e&&(i=!1!==t.component._bdClick()&&i),i},null,null)),i.Y(2,16384,null,0,r.a,[i.j,i.z],null,null),(t()(),i.Z(3,0,null,null,4,\"div\",[[\"class\",\"popover-wrapper\"]],null,null,null,null,null)),(t()(),i.Z(4,0,null,null,0,\"div\",[[\"class\",\"popover-arrow\"]],null,null,null,null,null)),(t()(),i.Z(5,0,null,null,2,\"div\",[[\"class\",\"popover-content\"]],null,null,null,null,null)),(t()(),i.Z(6,0,null,null,1,\"div\",[[\"class\",\"popover-viewport\"]],null,null,null,null,null)),(t()(),i.Z(7,16777216,[[1,3],[\"viewport\",1]],null,0,\"div\",[[\"nav-viewport\",\"\"]],null,null,null,null,null))],null,function(t,e){t(e,1,0,!e.component.d.showBackdrop)})},p)),i.Y(1,180224,null,0,o.a,[i.i,i.j,i.z,s.a,a.a,l.a,u.l,c.b],null,null)],null,null)},{},{},[])},function(t,e,n){\"use strict\";n.d(e,\"a\",function(){return S});var i=n(0),r=n(26),o=n(20),s=n(19),a=n(1),l=n(23),u=n(25),c=n(34),p=n(151),h=n(71),f=n(64),d=n(24),_=n(27),v=n(2),y=n(15),m=n(6),g=n(28),b=n(114),w=n(33),C=n(4),O=i.X({encapsulation:2,styles:[],data:{}}),S=i.V(\"ng-component\",b.a,function(t){return i._22(0,[(t()(),i.Z(0,0,null,null,1,\"ng-component\",[],null,null,null,function(t){return i._22(0,[(t()(),i._20(-1,null,[\"\\n    \"])),(t()(),i.Z(1,0,null,null,11,\"ion-list\",[[\"radio-group\",\"\"],[\"role\",\"radiogroup\"]],[[2,\"ng-untouched\",null],[2,\"ng-touched\",null],[2,\"ng-pristine\",null],[2,\"ng-dirty\",null],[2,\"ng-valid\",null],[2,\"ng-invalid\",null],[2,\"ng-pending\",null]],[[null,\"ngModelChange\"]],function(t,e,n){var i=!0;return\"ngModelChange\"===e&&(i=!1!==(t.component.value=n)&&i),i},null,null)),i.Y(2,1064960,null,1,f.a,[i.z,i.j,i.g],null,null),i._18(335544320,1,{_header:0}),i._17(1024,null,d.j,function(t){return[t]},[f.a]),i.Y(5,671744,null,0,d.n,[[8,null],[8,null],[8,null],[2,d.j]],{model:[0,\"model\"]},{update:\"ngModelChange\"}),i._17(2048,null,d.k,null,[d.n]),i.Y(7,16384,null,0,d.l,[d.k],null,null),i.Y(8,16384,null,0,_.a,[a.a,i.j,i.z,v.a,y.l,m.a],null,null),(t()(),i._20(-1,null,[\"\\n      \"])),(t()(),i.U(16777216,null,null,1,null,function(t){return i._22(0,[(t()(),i.Z(0,0,null,null,13,\"ion-item\",[[\"class\",\"item item-block\"]],null,null,null,r.b,r.a)),i.Y(1,1097728,null,3,o.a,[s.a,a.a,i.j,i.z,[2,l.a]],null,null),i._18(335544320,2,{contentLabel:0}),i._18(603979776,3,{_buttons:1}),i._18(603979776,4,{_icons:1}),i.Y(5,16384,null,0,u.a,[],null,null),(t()(),i._20(-1,2,[\"\\n        \"])),(t()(),i.Z(7,0,null,1,2,\"ion-label\",[],null,null,null,null,null)),i.Y(8,16384,[[2,4]],0,c.a,[a.a,i.j,i.z,[8,null],[8,null],[8,null],[8,null]],null,null),(t()(),i._20(9,null,[\"\",\"\"])),(t()(),i._20(-1,2,[\"\\n        \"])),(t()(),i.Z(11,0,null,4,1,\"ion-radio\",[],[[2,\"radio-disabled\",null]],[[null,\"click\"]],function(t,e,n){var r=!0;return\"click\"===e&&(r=!1!==i._13(t,12)._click(n)&&r),r},p.b,p.a)),i.Y(12,245760,null,0,h.a,[s.a,a.a,i.j,i.z,[2,o.a],[2,f.a]],{value:[0,\"value\"],checked:[1,\"checked\"],disabled:[2,\"disabled\"]},null),(t()(),i._20(-1,2,[\"\\n      \"]))],function(t,e){t(e,12,0,e.context.$implicit.value,e.context.$implicit.checked,e.context.$implicit.disabled)},function(t,e){t(e,9,0,e.context.$implicit.text),t(e,11,0,i._13(e,12)._disabled)})})),i.Y(11,802816,null,0,g.h,[i.I,i.F,i.p],{ngForOf:[0,\"ngForOf\"]},null),(t()(),i._20(-1,null,[\"\\n    \"])),(t()(),i._20(-1,null,[\"\\n  \"]))],function(t,e){var n=e.component;t(e,5,0,n.value),t(e,11,0,n.options)},function(t,e){t(e,1,0,i._13(e,7).ngClassUntouched,i._13(e,7).ngClassTouched,i._13(e,7).ngClassPristine,i._13(e,7).ngClassDirty,i._13(e,7).ngClassValid,i._13(e,7).ngClassInvalid,i._13(e,7).ngClassPending)})},O)),i.Y(1,114688,null,0,b.a,[w.a,C.a],null,null)],function(t,e){t(e,1,0)},null)},{},{},[])},function(t,e,n){\"use strict\";n.d(e,\"a\",function(){return h});var i=n(0),r=n(22),o=n(21),s=n(1),a=n(28),l=n(120),u=n(4),c=n(33),p=i.X({encapsulation:2,styles:[],data:{}}),h=i.V(\"ion-toast\",l.a,function(t){return i._22(0,[(t()(),i.Z(0,0,null,null,1,\"ion-toast\",[[\"role\",\"dialog\"]],[[1,\"aria-labelledby\",0],[1,\"aria-describedby\",0]],null,null,function(t){return i._22(0,[(t()(),i.Z(0,0,null,null,10,\"div\",[[\"class\",\"toast-wrapper\"]],[[2,\"toast-bottom\",null],[2,\"toast-middle\",null],[2,\"toast-top\",null]],null,null,null,null)),(t()(),i._20(-1,null,[\" \"])),(t()(),i.Z(2,0,null,null,7,\"div\",[[\"class\",\"toast-container\"]],null,null,null,null,null)),(t()(),i._20(-1,null,[\" \"])),(t()(),i.U(16777216,null,null,1,null,function(t){return i._22(0,[(t()(),i.Z(0,0,null,null,1,\"div\",[[\"class\",\"toast-message\"]],[[8,\"id\",0]],null,null,null,null)),(t()(),i._20(1,null,[\"\",\"\"]))],null,function(t,e){var n=e.component;t(e,0,0,i._2(1,\"\",n.hdrId,\"\")),t(e,1,0,n.d.message)})})),i.Y(5,16384,null,0,a.i,[i.I,i.F],{ngIf:[0,\"ngIf\"]},null),(t()(),i._20(-1,null,[\" \"])),(t()(),i.U(16777216,null,null,1,null,function(t){return i._22(0,[(t()(),i.Z(0,0,null,null,2,\"button\",[[\"class\",\"toast-button\"],[\"clear\",\"\"],[\"ion-button\",\"\"]],null,[[null,\"click\"]],function(t,e,n){var i=!0;return\"click\"===e&&(i=!1!==t.component.cbClick()&&i),i},r.b,r.a)),i.Y(1,1097728,null,0,o.a,[[8,\"\"],s.a,i.j,i.z],{clear:[0,\"clear\"]},null),(t()(),i._20(2,0,[\" \",\" \"]))],function(t,e){t(e,1,0,\"\")},function(t,e){t(e,2,0,e.component.d.closeButtonText||\"Close\")})})),i.Y(8,16384,null,0,a.i,[i.I,i.F],{ngIf:[0,\"ngIf\"]},null),(t()(),i._20(-1,null,[\" \"])),(t()(),i._20(-1,null,[\" \"]))],function(t,e){var n=e.component;t(e,5,0,n.d.message),t(e,8,0,n.d.showCloseButton)},function(t,e){var n=e.component;t(e,0,0,\"bottom\"===n.d.position,\"middle\"===n.d.position,\"top\"===n.d.position)})},p)),i.Y(1,4243456,null,0,l.a,[u.a,s.a,i.j,c.a,i.z],null,null)],null,function(t,e){t(e,0,0,i._13(e,1).hdrId,i._13(e,1).descId)})},{},{},[])},function(t,e,n){\"use strict\";function i(t){return r._22(2,[r._18(402653184,1,{backdrop:0}),(t()(),r.Z(1,0,null,null,1,\"div\",[[\"class\",\"menu-inner\"]],null,null,null,null,null)),r._12(null,0),(t()(),r.Z(3,0,null,null,1,\"ion-backdrop\",[[\"disable-activated\",\"\"],[\"role\",\"presentation\"],[\"tappable\",\"\"]],null,null,null,null,null)),r.Y(4,16384,[[1,4]],0,o.a,[r.j,r.z],null,null)],null,null)}n.d(e,\"a\",function(){return s}),e.b=i;var r=n(0),o=n(45),s=(n(104),n(1),n(2),n(9),n(15),n(6),n(5),r.X({encapsulation:2,styles:[],data:{}}))},function(t,e,n){\"use strict\";function i(t){return r._22(0,[r._18(402653184,1,{_vp:0}),(t()(),r.Z(1,16777216,[[1,3],[\"viewport\",1]],null,0,\"div\",[[\"nav-viewport\",\"\"]],null,null,null,null,null)),(t()(),r.Z(2,0,null,null,0,\"div\",[[\"class\",\"nav-decor\"]],null,null,null,null,null))],null,null)}n.d(e,\"a\",function(){return o}),e.b=i;var r=n(0),o=(n(79),n(4),n(7),n(1),n(2),n(15),n(37),n(31),n(6),r.X({encapsulation:2,styles:[],data:{}}))},function(t,e,n){\"use strict\";function i(t){return r._22(0,[(t()(),r.Z(0,0,null,null,1,\"div\",[[\"class\",\"checkbox-icon\"]],[[2,\"checkbox-checked\",null]],null,null,null,null)),(t()(),r.Z(1,0,null,null,0,\"div\",[[\"class\",\"checkbox-inner\"]],null,null,null,null,null)),(t()(),r.Z(2,0,null,null,2,\"button\",[[\"class\",\"item-cover\"],[\"ion-button\",\"item-cover\"],[\"role\",\"checkbox\"],[\"type\",\"button\"]],[[8,\"id\",0],[1,\"aria-checked\",0],[1,\"aria-labelledby\",0],[1,\"aria-disabled\",0]],null,null,o.b,o.a)),r.Y(3,1097728,null,0,s.a,[[8,\"item-cover\"],a.a,r.j,r.z],null,null),(t()(),r._20(-1,0,[\" \"]))],null,function(t,e){var n=e.component;t(e,0,0,n._value);t(e,2,0,n.id,n._value,n._labelId,n._disabled)})}n.d(e,\"a\",function(){return l}),e.b=i;var r=n(0),o=n(22),s=n(21),a=n(1),l=(n(95),n(19),r.X({encapsulation:2,styles:[],data:{}}))},function(t,e,n){\"use strict\";function i(t){return r._22(0,[(t()(),r.U(16777216,null,null,1,null,function(t){return r._22(0,[(t()(),r.Z(0,0,null,null,1,\"div\",[[\"class\",\"datetime-text datetime-placeholder\"]],null,null,null,null,null)),(t()(),r._20(1,null,[\"\",\"\"]))],null,function(t,e){t(e,1,0,e.component.placeholder)})})),r.Y(1,16384,null,0,o.i,[r.I,r.F],{ngIf:[0,\"ngIf\"]},null),(t()(),r.U(16777216,null,null,1,null,function(t){return r._22(0,[(t()(),r.Z(0,0,null,null,1,\"div\",[[\"class\",\"datetime-text\"]],null,null,null,null,null)),(t()(),r._20(1,null,[\"\",\"\"]))],null,function(t,e){t(e,1,0,e.component._text)})})),r.Y(3,16384,null,0,o.i,[r.I,r.F],{ngIf:[0,\"ngIf\"]},null),(t()(),r.Z(4,0,null,null,1,\"button\",[[\"aria-haspopup\",\"true\"],[\"class\",\"item-cover\"],[\"ion-button\",\"item-cover\"],[\"type\",\"button\"]],[[8,\"id\",0],[1,\"aria-labelledby\",0],[1,\"aria-disabled\",0]],null,null,s.b,s.a)),r.Y(5,1097728,null,0,a.a,[[8,\"item-cover\"],l.a,r.j,r.z],null,null)],function(t,e){var n=e.component;t(e,1,0,!n._text);t(e,3,0,n._text)},function(t,e){var n=e.component;t(e,4,0,n.id,n._labelId,n._disabled)})}n.d(e,\"a\",function(){return u}),e.b=i;var r=n(0),o=n(28),s=n(22),a=n(21),l=n(1),u=(n(96),n(19),r.X({encapsulation:2,styles:[],data:{}}))},function(t,e,n){\"use strict\";function i(t){return r._22(2,[(t()(),r._20(-1,null,[\"\\n    \"])),r._12(null,0),(t()(),r._20(-1,null,[\"\\n    \"])),r._12(null,1),(t()(),r._20(-1,null,[\"\\n  \"]))],null,null)}n.d(e,\"a\",function(){return o}),e.b=i;var r=n(0),o=(n(100),n(2),r.X({encapsulation:2,styles:[],data:{}}))},function(t,e,n){\"use strict\";function i(t){return o._22(0,[(t()(),o.U(16777216,null,null,1,null,function(t){return o._22(0,[(t()(),o.Z(0,0,null,null,1,\"div\",[[\"class\",\"range-pin\"],[\"role\",\"presentation\"]],null,null,null,null,null)),(t()(),o._20(1,null,[\"\",\"\"]))],null,function(t,e){t(e,1,0,e.component.val)})})),o.Y(1,16384,null,0,s.i,[o.I,o.F],{ngIf:[0,\"ngIf\"]},null),(t()(),o.Z(2,0,null,null,0,\"div\",[[\"class\",\"range-knob\"],[\"role\",\"presentation\"]],null,null,null,null,null))],function(t,e){t(e,1,0,e.component.pin)},null)}function r(t){return o._22(0,[o._18(402653184,1,{_slider:0}),o._12(null,0),(t()(),o.Z(2,0,[[1,0],[\"slider\",1]],null,8,\"div\",[[\"class\",\"range-slider\"]],null,null,null,null,null)),(t()(),o.U(16777216,null,null,1,null,function(t){return o._22(0,[(t()(),o.Z(0,0,null,null,0,\"div\",[[\"class\",\"range-tick\"],[\"role\",\"presentation\"]],[[4,\"left\",null],[2,\"range-tick-active\",null]],null,null,null,null))],null,function(t,e){t(e,0,0,e.context.$implicit.left,e.context.$implicit.active)})})),o.Y(4,802816,null,0,s.h,[o.I,o.F,o.p],{ngForOf:[0,\"ngForOf\"]},null),(t()(),o.Z(5,0,null,null,0,\"div\",[[\"class\",\"range-bar\"],[\"role\",\"presentation\"]],null,null,null,null,null)),(t()(),o.Z(6,0,[[\"bar\",1]],null,0,\"div\",[[\"class\",\"range-bar range-bar-active\"],[\"role\",\"presentation\"]],[[4,\"left\",null],[4,\"right\",null]],null,null,null,null)),(t()(),o.Z(7,0,null,null,1,\"div\",[[\"class\",\"range-knob-handle\"],[\"role\",\"slider\"]],[[2,\"range-knob-pressed\",null],[2,\"range-knob-min\",null],[2,\"range-knob-max\",null],[4,\"left\",null],[1,\"aria-valuenow\",0],[1,\"aria-valuemin\",0],[1,\"aria-valuemax\",0],[1,\"aria-disabled\",0],[1,\"aria-labelledby\",0],[8,\"tabIndex\",0]],[[null,\"ionIncrease\"],[null,\"ionDecrease\"],[null,\"keydown\"]],function(t,e,n){var i=!0,r=t.component;if(\"keydown\"===e){i=!1!==o._13(t,8)._keyup(n)&&i}if(\"ionIncrease\"===e){i=!1!==r._keyChg(!0,!1)&&i}if(\"ionDecrease\"===e){i=!1!==r._keyChg(!1,!1)&&i}return i},i,l)),o.Y(8,49152,null,0,a.a,[],{ratio:[0,\"ratio\"],pressed:[1,\"pressed\"],pin:[2,\"pin\"],min:[3,\"min\"],max:[4,\"max\"],val:[5,\"val\"],disabled:[6,\"disabled\"],labelId:[7,\"labelId\"]},{ionIncrease:\"ionIncrease\",ionDecrease:\"ionDecrease\"}),(t()(),o.U(16777216,null,null,1,null,function(t){return o._22(0,[(t()(),o.Z(0,0,null,null,1,\"div\",[[\"class\",\"range-knob-handle\"],[\"role\",\"slider\"]],[[2,\"range-knob-pressed\",null],[2,\"range-knob-min\",null],[2,\"range-knob-max\",null],[4,\"left\",null],[1,\"aria-valuenow\",0],[1,\"aria-valuemin\",0],[1,\"aria-valuemax\",0],[1,\"aria-disabled\",0],[1,\"aria-labelledby\",0],[8,\"tabIndex\",0]],[[null,\"ionIncrease\"],[null,\"ionDecrease\"],[null,\"keydown\"]],function(t,e,n){var i=!0,r=t.component;return\"keydown\"===e&&(i=!1!==o._13(t,1)._keyup(n)&&i),\"ionIncrease\"===e&&(i=!1!==r._keyChg(!0,!0)&&i),\"ionDecrease\"===e&&(i=!1!==r._keyChg(!1,!0)&&i),i},i,l)),o.Y(1,49152,null,0,a.a,[],{ratio:[0,\"ratio\"],pressed:[1,\"pressed\"],pin:[2,\"pin\"],min:[3,\"min\"],max:[4,\"max\"],val:[5,\"val\"],disabled:[6,\"disabled\"],labelId:[7,\"labelId\"]},{ionIncrease:\"ionIncrease\",ionDecrease:\"ionDecrease\"})],function(t,e){var n=e.component;t(e,1,0,n._ratioB,n._pressedB,n._pin,n._min,n._max,n._valB,n._disabled,n._labelId)},function(t,e){t(e,0,0,o._13(e,1).pressed,o._13(e,1).val===o._13(e,1).min||void 0===o._13(e,1).val,o._13(e,1).val===o._13(e,1).max,o._13(e,1)._x,o._13(e,1).val,o._13(e,1).min,o._13(e,1).max,o._13(e,1).disabled,o._13(e,1).labelId,o._13(e,1).disabled?-1:0)})})),o.Y(10,16384,null,0,s.i,[o.I,o.F],{ngIf:[0,\"ngIf\"]},null),o._12(null,1)],function(t,e){var n=e.component;t(e,4,0,n._ticks);t(e,8,0,n._ratioA,n._pressedA,n._pin,n._min,n._max,n._valA,n._disabled,n._labelId);t(e,10,0,n._dual)},function(t,e){var n=e.component;t(e,6,0,n._barL,n._barR);t(e,7,0,o._13(e,8).pressed,o._13(e,8).val===o._13(e,8).min||void 0===o._13(e,8).val,o._13(e,8).val===o._13(e,8).max,o._13(e,8)._x,o._13(e,8).val,o._13(e,8).min,o._13(e,8).max,o._13(e,8).disabled,o._13(e,8).labelId,o._13(e,8).disabled?-1:0)})}var o=n(0),s=n(28),a=n(111),l=o.X({encapsulation:2,styles:[],data:{}});n(24),n(110),n(19),n(40),n(20),n(1),n(2),n(6);n.d(e,\"a\",function(){return u}),e.b=r;var u=o.X({encapsulation:2,styles:[],data:{}})},function(t,e,n){\"use strict\";function i(t){return r._22(0,[(t()(),r.U(16777216,null,null,1,null,function(t){return r._22(0,[(t()(),r.Z(0,0,null,null,1,\"div\",[[\"class\",\"select-placeholder select-text\"]],null,null,null,null,null)),(t()(),r._20(1,null,[\"\",\"\"]))],null,function(t,e){t(e,1,0,e.component.placeholder)})})),r.Y(1,16384,null,0,o.i,[r.I,r.F],{ngIf:[0,\"ngIf\"]},null),(t()(),r.U(16777216,null,null,1,null,function(t){return r._22(0,[(t()(),r.Z(0,0,null,null,1,\"div\",[[\"class\",\"select-text\"]],null,null,null,null,null)),(t()(),r._20(1,null,[\"\",\"\"]))],null,function(t,e){var n=e.component;t(e,1,0,n.selectedText||n._text)})})),r.Y(3,16384,null,0,o.i,[r.I,r.F],{ngIf:[0,\"ngIf\"]},null),(t()(),r.Z(4,0,null,null,1,\"div\",[[\"class\",\"select-icon\"]],null,null,null,null,null)),(t()(),r.Z(5,0,null,null,0,\"div\",[[\"class\",\"select-icon-inner\"]],null,null,null,null,null)),(t()(),r.Z(6,0,null,null,1,\"button\",[[\"aria-haspopup\",\"true\"],[\"class\",\"item-cover\"],[\"ion-button\",\"item-cover\"],[\"type\",\"button\"]],[[8,\"id\",0],[1,\"aria-labelledby\",0],[1,\"aria-disabled\",0]],null,null,s.b,s.a)),r.Y(7,1097728,null,0,a.a,[[8,\"item-cover\"],l.a,r.j,r.z],null,null)],function(t,e){var n=e.component;t(e,1,0,!n._text);t(e,3,0,n._text)},function(t,e){var n=e.component;t(e,6,0,n.id,n._labelId,n._disabled)})}n.d(e,\"a\",function(){return u}),e.b=i;var r=n(0),o=n(28),s=n(22),a=n(21),l=n(1),u=(n(113),n(19),n(31),r.X({encapsulation:2,styles:[],data:{}}))},function(t,e,n){\"use strict\";function i(t){return r._22(2,[(t()(),r.Z(0,0,null,null,1,\"div\",[[\"class\",\"slide-zoom\"]],null,null,null,null,null)),r._12(null,0)],null,null)}n.d(e,\"a\",function(){return o}),e.b=i;var r=n(0),o=(n(116),n(73),r.X({encapsulation:2,styles:[],data:{}}))},function(t,e,n){\"use strict\";function i(t){return r._22(2,[(t()(),r.Z(0,0,null,null,3,\"div\",[[\"class\",\"swiper-container\"]],[[1,\"dir\",0]],null,null,null,null)),(t()(),r.Z(1,0,null,null,1,\"div\",[[\"class\",\"swiper-wrapper\"]],null,null,null,null,null)),r._12(null,0),(t()(),r.Z(3,0,null,null,0,\"div\",[[\"class\",\"swiper-pagination\"]],[[2,\"hide\",null]],null,null,null,null))],null,function(t,e){var n=e.component;t(e,0,0,n._rtl?\"rtl\":null);t(e,3,0,!n.pager)})}n.d(e,\"a\",function(){return o}),e.b=i;var r=n(0),o=(n(73),n(1),n(2),n(4),r.X({encapsulation:2,styles:[],data:{}}))}]);"
  },
  {
    "path": "content/dist/preview-app/www/index.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\" dir=\"ltr\">\n<head>\n  <script data-ionic=\"inject\">\n    (function(w){var i=w.Ionic=w.Ionic||{};i.version='3.9.2';i.angular='5.0.0';i.staticDir='build/';})(window);\n  </script>\n  <meta charset=\"UTF-8\">\n  <title>Ionic App</title>\n  <meta name=\"viewport\" content=\"viewport-fit=cover, width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=no\">\n  <meta name=\"format-detection\" content=\"telephone=no\">\n  <meta name=\"msapplication-tap-highlight\" content=\"no\">\n\n  <link rel=\"icon\" type=\"image/x-icon\" href=\"assets/icon/favicon.ico\">\n  <link rel=\"manifest\" href=\"assets/manifest.json\">\n  <meta name=\"theme-color\" content=\"#4e8ef7\">\n\n  <!-- un-comment this code to enable service worker\n  <script>\n    if ('serviceWorker' in navigator) {\n      navigator.serviceWorker.register('assets/service-worker.js')\n        .then(() => console.log('service worker installed'))\n        .catch(err => console.log('Error', err));\n    }\n  </script>-->\n\n  <link href=\"build/main.css\" rel=\"stylesheet\">\n\n</head>\n<body>\n\n  <!-- Ionic's root component and where the app will load -->\n  <ion-app></ion-app>\n\n  <!-- cordova.js required for cordova apps -->\n  <script src=\"cordova.js\"></script>\n\n  <!-- The polyfills js is generated during the build process -->\n  <script src=\"build/polyfills.js\"></script>\n\n  <!-- The polyfills js is generated during the build process -->\n  <script src=\"build/vendor.js\"></script>\n\n  <!-- The bundle js is generated during the build process -->\n  <script src=\"build/main.js\"></script>\n\n</body>\n</html>\n"
  },
  {
    "path": "content/dist/preview-app/www/manifest.json",
    "content": "{\n  \"name\": \"Ionic\",\n  \"short_name\": \"Ionic\",\n  \"start_url\": \"index.html\",\n  \"display\": \"standalone\",\n  \"icons\": [{\n    \"src\": \"assets/imgs/logo.png\",\n    \"sizes\": \"512x512\",\n    \"type\": \"image/png\"\n  }],\n  \"background_color\": \"#4e8ef7\",\n  \"theme_color\": \"#4e8ef7\"\n}"
  },
  {
    "path": "content/dist/preview-app/www/service-worker.js",
    "content": "self.addEventListener('activate', function (event) {\n\n});\n\nself.addEventListener('fetch', function (event) {\n\n});\n\nself.addEventListener('push', function (event) {\n\n});"
  },
  {
    "path": "content/docs/data/index.json",
    "content": "{\"ref\":{},\"index\":{\"version\":\"0.5.12\",\"fields\":[{\"name\":\"path\",\"boost\":1},{\"name\":\"title\",\"boost\":10},{\"name\":\"body\",\"boost\":1}],\"ref\":\"id\",\"documentStore\":{\"store\":{},\"length\":0},\"tokenStore\":{\"root\":{\"docs\":{}},\"length\":0},\"corpusTokens\":[],\"pipeline\":[\"trimmer\",\"stopWordFilter\",\"stemmer\"]}}"
  },
  {
    "path": "content/fonts/inter/inter.css",
    "content": "@font-face {\n  font-family: 'Inter';\n  font-style:  normal;\n  font-weight: 100;\n  src: url(\"Inter-Thin.woff2\") format(\"woff2\"),\n       url(\"Inter-Thin.woff\") format(\"woff\");\n}\n@font-face {\n  font-family: 'Inter';\n  font-style:  italic;\n  font-weight: 100;\n  src: url(\"Inter-ThinItalic.woff2\") format(\"woff2\"),\n       url(\"Inter-ThinItalic.woff\") format(\"woff\");\n}\n\n@font-face {\n  font-family: 'Inter';\n  font-style:  normal;\n  font-weight: 200;\n  src: url(\"Inter-ExtraLight.woff2\") format(\"woff2\"),\n       url(\"Inter-ExtraLight.woff\") format(\"woff\");\n}\n@font-face {\n  font-family: 'Inter';\n  font-style:  italic;\n  font-weight: 200;\n  src: url(\"Inter-ExtraLightItalic.woff2\") format(\"woff2\"),\n       url(\"Inter-ExtraLightItalic.woff\") format(\"woff\");\n}\n\n@font-face {\n  font-family: 'Inter';\n  font-style:  normal;\n  font-weight: 300;\n  src: url(\"Inter-Light.woff2\") format(\"woff2\"),\n       url(\"Inter-Light.woff\") format(\"woff\");\n}\n@font-face {\n  font-family: 'Inter';\n  font-style:  italic;\n  font-weight: 300;\n  src: url(\"Inter-LightItalic.woff2\") format(\"woff2\"),\n       url(\"Inter-LightItalic.woff\") format(\"woff\");\n}\n\n@font-face {\n  font-family: 'Inter';\n  font-style:  normal;\n  font-weight: 400;\n  src: url(\"Inter-Regular.woff2\") format(\"woff2\"),\n       url(\"Inter-Regular.woff\") format(\"woff\");\n}\n@font-face {\n  font-family: 'Inter';\n  font-style:  italic;\n  font-weight: 400;\n  src: url(\"Inter-Italic.woff2\") format(\"woff2\"),\n       url(\"Inter-Italic.woff\") format(\"woff\");\n}\n\n@font-face {\n  font-family: 'Inter';\n  font-style:  normal;\n  font-weight: 500;\n  src: url(\"Inter-Medium.woff2\") format(\"woff2\"),\n       url(\"Inter-Medium.woff\") format(\"woff\");\n}\n@font-face {\n  font-family: 'Inter';\n  font-style:  italic;\n  font-weight: 500;\n  src: url(\"Inter-MediumItalic.woff2\") format(\"woff2\"),\n       url(\"Inter-MediumItalic.woff\") format(\"woff\");\n}\n\n@font-face {\n  font-family: 'Inter';\n  font-style:  normal;\n  font-weight: 600;\n  src: url(\"Inter-SemiBold.woff2\") format(\"woff2\"),\n       url(\"Inter-SemiBold.woff\") format(\"woff\");\n}\n@font-face {\n  font-family: 'Inter';\n  font-style:  italic;\n  font-weight: 600;\n  src: url(\"Inter-SemiBoldItalic.woff2\") format(\"woff2\"),\n       url(\"Inter-SemiBoldItalic.woff\") format(\"woff\");\n}\n\n@font-face {\n  font-family: 'Inter';\n  font-style:  normal;\n  font-weight: 700;\n  src: url(\"Inter-Bold.woff2\") format(\"woff2\"),\n       url(\"Inter-Bold.woff\") format(\"woff\");\n}\n@font-face {\n  font-family: 'Inter';\n  font-style:  italic;\n  font-weight: 700;\n  src: url(\"Inter-BoldItalic.woff2\") format(\"woff2\"),\n       url(\"Inter-BoldItalic.woff\") format(\"woff\");\n}\n\n@font-face {\n  font-family: 'Inter';\n  font-style:  normal;\n  font-weight: 800;\n  src: url(\"Inter-ExtraBold.woff2\") format(\"woff2\"),\n       url(\"Inter-ExtraBold.woff\") format(\"woff\");\n}\n@font-face {\n  font-family: 'Inter';\n  font-style:  italic;\n  font-weight: 800;\n  src: url(\"Inter-ExtraBoldItalic.woff2\") format(\"woff2\"),\n       url(\"Inter-ExtraBoldItalic.woff\") format(\"woff\");\n}\n\n@font-face {\n  font-family: 'Inter';\n  font-style:  normal;\n  font-weight: 900;\n  src: url(\"Inter-Black.woff2\") format(\"woff2\"),\n       url(\"Inter-Black.woff\") format(\"woff\");\n}\n@font-face {\n  font-family: 'Inter';\n  font-style:  italic;\n  font-weight: 900;\n  src: url(\"Inter-BlackItalic.woff2\") format(\"woff2\"),\n       url(\"Inter-BlackItalic.woff\") format(\"woff\");\n}\n\n/* -------------------------------------------------------\nVariable font.\nUsage:\n\n  html { font-family: 'Inter', sans-serif; }\n  @supports (font-variation-settings: normal) {\n    html { font-family: 'Inter var', sans-serif; }\n  }\n*/\n@font-face {\n  font-family: 'Inter var';\n  font-weight: 100 900;\n  font-style: normal;\n  font-named-instance: 'Regular';\n  src: url(\"Inter-upright.var.woff2\") format(\"woff2 supports variations(gvar)\"),\n       url(\"Inter-upright.var.woff2\") format(\"woff2-variations\"),\n       url(\"Inter-upright.var.woff2\") format(\"woff2\");\n}\n@font-face {\n  font-family: 'Inter var';\n  font-weight: 100 900;\n  font-style: italic;\n  font-named-instance: 'Italic';\n  src: url(\"Inter-italic.var.woff2\") format(\"woff2 supports variations(gvar)\"),\n       url(\"Inter-italic.var.woff2\") format(\"woff2-variations\"),\n       url(\"Inter-italic.var.woff2\") format(\"woff2\");\n}\n\n\n/* --------------------------------------------------------------------------\n[EXPERIMENTAL] Multi-axis, single variable font.\n\nSlant axis is not yet widely supported (as of February 2019) and thus this\nmulti-axis single variable font is opt-in rather than the default.\n\nWhen using this, you will probably need to set font-variation-settings\nexplicitly, e.g.\n\n  * { font-variation-settings: \"slnt\" 0deg }\n  .italic { font-variation-settings: \"slnt\" 10deg }\n\n*/\n@font-face {\n  font-family: 'Inter var experimental';\n  font-weight: 100 900;\n  font-style: oblique 0deg 10deg;\n  src: url(\"Inter.var.woff2\") format(\"woff2-variations\"),\n       url(\"Inter.var.woff2\") format(\"woff2\");\n}\n"
  },
  {
    "path": "content/fonts/roboto.scss",
    "content": "/**\n  Roboto Font\n  Google\n  Apache License, version 2.0\n  http://www.apache.org/licenses/LICENSE-2.0.html\n */\n\n$roboto-font-path: $font-path !default;\n\n@font-face {\n  font-family: 'Roboto';\n  font-style: normal;\n  font-weight: 300;\n  src: local('Roboto Light'), local('Roboto-Light'), url('#{$roboto-font-path}/roboto-light.ttf') format('truetype'), url('#{$roboto-font-path}/roboto-light.woff') format('woff');\n}\n\n@font-face {\n  font-family: 'Roboto';\n  font-style: normal;\n  font-weight: 400;\n  src: local('Roboto'), local('Roboto-Regular'), url('#{$roboto-font-path}/roboto-regular.ttf') format('truetype'), url('#{$roboto-font-path}/roboto-regular.woff') format('woff');\n}\n\n@font-face {\n  font-family: 'Roboto';\n  font-style: normal;\n  font-weight: 500;\n  src: local('Roboto Medium'), local('Roboto-Medium'), url('#{$roboto-font-path}/roboto-medium.ttf') format('truetype'), url('#{$roboto-font-path}/roboto-medium.woff') format('woff');\n}\n\n@font-face {\n  font-family: 'Roboto';\n  font-style: normal;\n  font-weight: 700;\n  src: local('Roboto Bold'), local('Roboto-Bold'), url('#{$roboto-font-path}/roboto-bold.ttf') format('truetype'), url('#{$roboto-font-path}/roboto-bold.woff') format('woff');\n}\n"
  },
  {
    "path": "content/js/css-docs-angular.js",
    "content": "\nangular.module('devicePreview', [])\n\n.directive('itemFloatingLabel', function() {\n  return {\n    restrict: 'C',\n    link: function(scope, element) {\n      var el = element[0];\n      var input = el.querySelector('input, textarea');\n      var inputLabel = el.querySelector('.input-label');\n\n      if ( !input || !inputLabel ) return;\n\n      var onInput = function() {\n        if ( input.value ) {\n          inputLabel.classList.add('has-input');\n        } else {\n          inputLabel.classList.remove('has-input');\n        }\n      };\n\n      input.addEventListener('input', onInput);\n\n      var ngModelCtrl = angular.element(input).controller('ngModel');\n      if ( ngModelCtrl ) {\n        ngModelCtrl.$render = function() {\n          input.value = ngModelCtrl.$viewValue || '';\n          onInput();\n        };\n      }\n\n      scope.$on('$destroy', function() {\n        input.removeEventListener('input', onInput);\n      });\n    }\n  };\n});\n"
  },
  {
    "path": "content/js/ionic-angular.js",
    "content": "/**\n * @license AngularJS v1.2.0\n * (c) 2010-2012 Google, Inc. http://angularjs.org\n * License: MIT\n */\n(function(window, document, undefined) {'use strict';\n\n/**\n * @description\n *\n * This object provides a utility for producing rich Error messages within\n * Angular. It can be called as follows:\n *\n * var exampleMinErr = minErr('example');\n * throw exampleMinErr('one', 'This {0} is {1}', foo, bar);\n *\n * The above creates an instance of minErr in the example namespace. The\n * resulting error will have a namespaced error code of example.one.  The\n * resulting error will replace {0} with the value of foo, and {1} with the\n * value of bar. The object is not restricted in the number of arguments it can\n * take.\n *\n * If fewer arguments are specified than necessary for interpolation, the extra\n * interpolation markers will be preserved in the final string.\n *\n * Since data will be parsed statically during a build step, some restrictions\n * are applied with respect to how minErr instances are created and called.\n * Instances should have names of the form namespaceMinErr for a minErr created\n * using minErr('namespace') . Error codes, namespaces and template strings\n * should all be static strings, not variables or general expressions.\n *\n * @param {string} module The namespace to use for the new minErr instance.\n * @returns {function(string, string, ...): Error} instance\n */\n\nfunction minErr(module) {\n  return function () {\n    var code = arguments[0],\n      prefix = '[' + (module ? module + ':' : '') + code + '] ',\n      template = arguments[1],\n      templateArgs = arguments,\n      stringify = function (obj) {\n        if (isFunction(obj)) {\n          return obj.toString().replace(/ \\{[\\s\\S]*$/, '');\n        } else if (isUndefined(obj)) {\n          return 'undefined';\n        } else if (!isString(obj)) {\n          return JSON.stringify(obj);\n        }\n        return obj;\n      },\n      message, i;\n\n    message = prefix + template.replace(/\\{\\d+\\}/g, function (match) {\n      var index = +match.slice(1, -1), arg;\n\n      if (index + 2 < templateArgs.length) {\n        arg = templateArgs[index + 2];\n        if (isFunction(arg)) {\n          return arg.toString().replace(/ ?\\{[\\s\\S]*$/, '');\n        } else if (isUndefined(arg)) {\n          return 'undefined';\n        } else if (!isString(arg)) {\n          return toJson(arg);\n        }\n        return arg;\n      }\n      return match;\n    });\n\n    message = message + '\\nhttp://errors.angularjs.org/' + version.full + '/' +\n      (module ? module + '/' : '') + code;\n    for (i = 2; i < arguments.length; i++) {\n      message = message + (i == 2 ? '?' : '&') + 'p' + (i-2) + '=' +\n        encodeURIComponent(stringify(arguments[i]));\n    }\n\n    return new Error(message);\n  };\n}\n\n/* We need to tell jshint what variables are being exported */\n/* global\n    -angular,\n    -msie,\n    -jqLite,\n    -jQuery,\n    -slice,\n    -push,\n    -toString,\n    -ngMinErr,\n    -_angular,\n    -angularModule,\n    -nodeName_,\n    -uid,\n\n    -lowercase,\n    -uppercase,\n    -manualLowercase,\n    -manualUppercase,\n    -nodeName_,\n    -isArrayLike,\n    -forEach,\n    -sortedKeys,\n    -forEachSorted,\n    -reverseParams,\n    -nextUid,\n    -setHashKey,\n    -extend,\n    -int,\n    -inherit,\n    -noop,\n    -identity,\n    -valueFn,\n    -isUndefined,\n    -isDefined,\n    -isObject,\n    -isString,\n    -isNumber,\n    -isDate,\n    -isArray,\n    -isFunction,\n    -isRegExp,\n    -isWindow,\n    -isScope,\n    -isFile,\n    -isBoolean,\n    -trim,\n    -isElement,\n    -makeMap,\n    -map,\n    -size,\n    -includes,\n    -indexOf,\n    -arrayRemove,\n    -isLeafNode,\n    -copy,\n    -shallowCopy,\n    -equals,\n    -csp,\n    -concat,\n    -sliceArgs,\n    -bind,\n    -toJsonReplacer,\n    -toJson,\n    -fromJson,\n    -toBoolean,\n    -startingTag,\n    -tryDecodeURIComponent,\n    -parseKeyValue,\n    -toKeyValue,\n    -encodeUriSegment,\n    -encodeUriQuery,\n    -angularInit,\n    -bootstrap,\n    -snake_case,\n    -bindJQuery,\n    -assertArg,\n    -assertArgFn,\n    -assertNotHasOwnProperty,\n    -getter,\n    -getBlockElements\n\n*/\n\n////////////////////////////////////\n\n/**\n * @ngdoc function\n * @name angular.lowercase\n * @function\n *\n * @description Converts the specified string to lowercase.\n * @param {string} string String to be converted to lowercase.\n * @returns {string} Lowercased string.\n */\nvar lowercase = function(string){return isString(string) ? string.toLowerCase() : string;};\n\n\n/**\n * @ngdoc function\n * @name angular.uppercase\n * @function\n *\n * @description Converts the specified string to uppercase.\n * @param {string} string String to be converted to uppercase.\n * @returns {string} Uppercased string.\n */\nvar uppercase = function(string){return isString(string) ? string.toUpperCase() : string;};\n\n\nvar manualLowercase = function(s) {\n  /* jshint bitwise: false */\n  return isString(s)\n      ? s.replace(/[A-Z]/g, function(ch) {return String.fromCharCode(ch.charCodeAt(0) | 32);})\n      : s;\n};\nvar manualUppercase = function(s) {\n  /* jshint bitwise: false */\n  return isString(s)\n      ? s.replace(/[a-z]/g, function(ch) {return String.fromCharCode(ch.charCodeAt(0) & ~32);})\n      : s;\n};\n\n\n// String#toLowerCase and String#toUpperCase don't produce correct results in browsers with Turkish\n// locale, for this reason we need to detect this case and redefine lowercase/uppercase methods\n// with correct but slower alternatives.\nif ('i' !== 'I'.toLowerCase()) {\n  lowercase = manualLowercase;\n  uppercase = manualUppercase;\n}\n\n\nvar /** holds major version number for IE or NaN for real browsers */\n    msie,\n    jqLite,           // delay binding since jQuery could be loaded after us.\n    jQuery,           // delay binding\n    slice             = [].slice,\n    push              = [].push,\n    toString          = Object.prototype.toString,\n    ngMinErr          = minErr('ng'),\n\n\n    _angular          = window.angular,\n    /** @name angular */\n    angular           = window.angular || (window.angular = {}),\n    angularModule,\n    nodeName_,\n    uid               = ['0', '0', '0'];\n\n/**\n * IE 11 changed the format of the UserAgent string.\n * See http://msdn.microsoft.com/en-us/library/ms537503.aspx\n */\nmsie = int((/msie (\\d+)/.exec(lowercase(navigator.userAgent)) || [])[1]);\nif (isNaN(msie)) {\n  msie = int((/trident\\/.*; rv:(\\d+)/.exec(lowercase(navigator.userAgent)) || [])[1]);\n}\n\n\n/**\n * @private\n * @param {*} obj\n * @return {boolean} Returns true if `obj` is an array or array-like object (NodeList, Arguments,\n *                   String ...)\n */\nfunction isArrayLike(obj) {\n  if (obj == null || isWindow(obj)) {\n    return false;\n  }\n\n  var length = obj.length;\n\n  if (obj.nodeType === 1 && length) {\n    return true;\n  }\n\n  return isString(obj) || isArray(obj) || length === 0 ||\n         typeof length === 'number' && length > 0 && (length - 1) in obj;\n}\n\n/**\n * @ngdoc function\n * @name angular.forEach\n * @function\n *\n * @description\n * Invokes the `iterator` function once for each item in `obj` collection, which can be either an\n * object or an array. The `iterator` function is invoked with `iterator(value, key)`, where `value`\n * is the value of an object property or an array element and `key` is the object property key or\n * array element index. Specifying a `context` for the function is optional.\n *\n * Note: this function was previously known as `angular.foreach`.\n *\n   <pre>\n     var values = {name: 'misko', gender: 'male'};\n     var log = [];\n     angular.forEach(values, function(value, key){\n       this.push(key + ': ' + value);\n     }, log);\n     expect(log).toEqual(['name: misko', 'gender:male']);\n   </pre>\n *\n * @param {Object|Array} obj Object to iterate over.\n * @param {Function} iterator Iterator function.\n * @param {Object=} context Object to become context (`this`) for the iterator function.\n * @returns {Object|Array} Reference to `obj`.\n */\nfunction forEach(obj, iterator, context) {\n  var key;\n  if (obj) {\n    if (isFunction(obj)){\n      for (key in obj) {\n        if (key != 'prototype' && key != 'length' && key != 'name' && obj.hasOwnProperty(key)) {\n          iterator.call(context, obj[key], key);\n        }\n      }\n    } else if (obj.forEach && obj.forEach !== forEach) {\n      obj.forEach(iterator, context);\n    } else if (isArrayLike(obj)) {\n      for (key = 0; key < obj.length; key++)\n        iterator.call(context, obj[key], key);\n    } else {\n      for (key in obj) {\n        if (obj.hasOwnProperty(key)) {\n          iterator.call(context, obj[key], key);\n        }\n      }\n    }\n  }\n  return obj;\n}\n\nfunction sortedKeys(obj) {\n  var keys = [];\n  for (var key in obj) {\n    if (obj.hasOwnProperty(key)) {\n      keys.push(key);\n    }\n  }\n  return keys.sort();\n}\n\nfunction forEachSorted(obj, iterator, context) {\n  var keys = sortedKeys(obj);\n  for ( var i = 0; i < keys.length; i++) {\n    iterator.call(context, obj[keys[i]], keys[i]);\n  }\n  return keys;\n}\n\n\n/**\n * when using forEach the params are value, key, but it is often useful to have key, value.\n * @param {function(string, *)} iteratorFn\n * @returns {function(*, string)}\n */\nfunction reverseParams(iteratorFn) {\n  return function(value, key) { iteratorFn(key, value); };\n}\n\n/**\n * A consistent way of creating unique IDs in angular. The ID is a sequence of alpha numeric\n * characters such as '012ABC'. The reason why we are not using simply a number counter is that\n * the number string gets longer over time, and it can also overflow, where as the nextId\n * will grow much slower, it is a string, and it will never overflow.\n *\n * @returns an unique alpha-numeric string\n */\nfunction nextUid() {\n  var index = uid.length;\n  var digit;\n\n  while(index) {\n    index--;\n    digit = uid[index].charCodeAt(0);\n    if (digit == 57 /*'9'*/) {\n      uid[index] = 'A';\n      return uid.join('');\n    }\n    if (digit == 90  /*'Z'*/) {\n      uid[index] = '0';\n    } else {\n      uid[index] = String.fromCharCode(digit + 1);\n      return uid.join('');\n    }\n  }\n  uid.unshift('0');\n  return uid.join('');\n}\n\n\n/**\n * Set or clear the hashkey for an object.\n * @param obj object\n * @param h the hashkey (!truthy to delete the hashkey)\n */\nfunction setHashKey(obj, h) {\n  if (h) {\n    obj.$$hashKey = h;\n  }\n  else {\n    delete obj.$$hashKey;\n  }\n}\n\n/**\n * @ngdoc function\n * @name angular.extend\n * @function\n *\n * @description\n * Extends the destination object `dst` by copying all of the properties from the `src` object(s)\n * to `dst`. You can specify multiple `src` objects.\n *\n * @param {Object} dst Destination object.\n * @param {...Object} src Source object(s).\n * @returns {Object} Reference to `dst`.\n */\nfunction extend(dst) {\n  var h = dst.$$hashKey;\n  forEach(arguments, function(obj){\n    if (obj !== dst) {\n      forEach(obj, function(value, key){\n        dst[key] = value;\n      });\n    }\n  });\n\n  setHashKey(dst,h);\n  return dst;\n}\n\nfunction int(str) {\n  return parseInt(str, 10);\n}\n\n\nfunction inherit(parent, extra) {\n  return extend(new (extend(function() {}, {prototype:parent}))(), extra);\n}\n\n/**\n * @ngdoc function\n * @name angular.noop\n * @function\n *\n * @description\n * A function that performs no operations. This function can be useful when writing code in the\n * functional style.\n   <pre>\n     function foo(callback) {\n       var result = calculateResult();\n       (callback || angular.noop)(result);\n     }\n   </pre>\n */\nfunction noop() {}\nnoop.$inject = [];\n\n\n/**\n * @ngdoc function\n * @name angular.identity\n * @function\n *\n * @description\n * A function that returns its first argument. This function is useful when writing code in the\n * functional style.\n *\n   <pre>\n     function transformer(transformationFn, value) {\n       return (transformationFn || angular.identity)(value);\n     };\n   </pre>\n */\nfunction identity($) {return $;}\nidentity.$inject = [];\n\n\nfunction valueFn(value) {return function() {return value;};}\n\n/**\n * @ngdoc function\n * @name angular.isUndefined\n * @function\n *\n * @description\n * Determines if a reference is undefined.\n *\n * @param {*} value Reference to check.\n * @returns {boolean} True if `value` is undefined.\n */\nfunction isUndefined(value){return typeof value == 'undefined';}\n\n\n/**\n * @ngdoc function\n * @name angular.isDefined\n * @function\n *\n * @description\n * Determines if a reference is defined.\n *\n * @param {*} value Reference to check.\n * @returns {boolean} True if `value` is defined.\n */\nfunction isDefined(value){return typeof value != 'undefined';}\n\n\n/**\n * @ngdoc function\n * @name angular.isObject\n * @function\n *\n * @description\n * Determines if a reference is an `Object`. Unlike `typeof` in JavaScript, `null`s are not\n * considered to be objects.\n *\n * @param {*} value Reference to check.\n * @returns {boolean} True if `value` is an `Object` but not `null`.\n */\nfunction isObject(value){return value != null && typeof value == 'object';}\n\n\n/**\n * @ngdoc function\n * @name angular.isString\n * @function\n *\n * @description\n * Determines if a reference is a `String`.\n *\n * @param {*} value Reference to check.\n * @returns {boolean} True if `value` is a `String`.\n */\nfunction isString(value){return typeof value == 'string';}\n\n\n/**\n * @ngdoc function\n * @name angular.isNumber\n * @function\n *\n * @description\n * Determines if a reference is a `Number`.\n *\n * @param {*} value Reference to check.\n * @returns {boolean} True if `value` is a `Number`.\n */\nfunction isNumber(value){return typeof value == 'number';}\n\n\n/**\n * @ngdoc function\n * @name angular.isDate\n * @function\n *\n * @description\n * Determines if a value is a date.\n *\n * @param {*} value Reference to check.\n * @returns {boolean} True if `value` is a `Date`.\n */\nfunction isDate(value){\n  return toString.apply(value) == '[object Date]';\n}\n\n\n/**\n * @ngdoc function\n * @name angular.isArray\n * @function\n *\n * @description\n * Determines if a reference is an `Array`.\n *\n * @param {*} value Reference to check.\n * @returns {boolean} True if `value` is an `Array`.\n */\nfunction isArray(value) {\n  return toString.apply(value) == '[object Array]';\n}\n\n\n/**\n * @ngdoc function\n * @name angular.isFunction\n * @function\n *\n * @description\n * Determines if a reference is a `Function`.\n *\n * @param {*} value Reference to check.\n * @returns {boolean} True if `value` is a `Function`.\n */\nfunction isFunction(value){return typeof value == 'function';}\n\n\n/**\n * Determines if a value is a regular expression object.\n *\n * @private\n * @param {*} value Reference to check.\n * @returns {boolean} True if `value` is a `RegExp`.\n */\nfunction isRegExp(value) {\n  return toString.apply(value) == '[object RegExp]';\n}\n\n\n/**\n * Checks if `obj` is a window object.\n *\n * @private\n * @param {*} obj Object to check\n * @returns {boolean} True if `obj` is a window obj.\n */\nfunction isWindow(obj) {\n  return obj && obj.document && obj.location && obj.alert && obj.setInterval;\n}\n\n\nfunction isScope(obj) {\n  return obj && obj.$evalAsync && obj.$watch;\n}\n\n\nfunction isFile(obj) {\n  return toString.apply(obj) === '[object File]';\n}\n\n\nfunction isBoolean(value) {\n  return typeof value == 'boolean';\n}\n\n\nvar trim = (function() {\n  // native trim is way faster: http://jsperf.com/angular-trim-test\n  // but IE doesn't have it... :-(\n  // TODO: we should move this into IE/ES5 polyfill\n  if (!String.prototype.trim) {\n    return function(value) {\n      return isString(value) ? value.replace(/^\\s*/, '').replace(/\\s*$/, '') : value;\n    };\n  }\n  return function(value) {\n    return isString(value) ? value.trim() : value;\n  };\n})();\n\n\n/**\n * @ngdoc function\n * @name angular.isElement\n * @function\n *\n * @description\n * Determines if a reference is a DOM element (or wrapped jQuery element).\n *\n * @param {*} value Reference to check.\n * @returns {boolean} True if `value` is a DOM element (or wrapped jQuery element).\n */\nfunction isElement(node) {\n  return node &&\n    (node.nodeName  // we are a direct element\n    || (node.on && node.find));  // we have an on and find method part of jQuery API\n}\n\n/**\n * @param str 'key1,key2,...'\n * @returns {object} in the form of {key1:true, key2:true, ...}\n */\nfunction makeMap(str){\n  var obj = {}, items = str.split(\",\"), i;\n  for ( i = 0; i < items.length; i++ )\n    obj[ items[i] ] = true;\n  return obj;\n}\n\n\nif (msie < 9) {\n  nodeName_ = function(element) {\n    element = element.nodeName ? element : element[0];\n    return (element.scopeName && element.scopeName != 'HTML')\n      ? uppercase(element.scopeName + ':' + element.nodeName) : element.nodeName;\n  };\n} else {\n  nodeName_ = function(element) {\n    return element.nodeName ? element.nodeName : element[0].nodeName;\n  };\n}\n\n\nfunction map(obj, iterator, context) {\n  var results = [];\n  forEach(obj, function(value, index, list) {\n    results.push(iterator.call(context, value, index, list));\n  });\n  return results;\n}\n\n\n/**\n * @description\n * Determines the number of elements in an array, the number of properties an object has, or\n * the length of a string.\n *\n * Note: This function is used to augment the Object type in Angular expressions. See\n * {@link angular.Object} for more information about Angular arrays.\n *\n * @param {Object|Array|string} obj Object, array, or string to inspect.\n * @param {boolean} [ownPropsOnly=false] Count only \"own\" properties in an object\n * @returns {number} The size of `obj` or `0` if `obj` is neither an object nor an array.\n */\nfunction size(obj, ownPropsOnly) {\n  var count = 0, key;\n\n  if (isArray(obj) || isString(obj)) {\n    return obj.length;\n  } else if (isObject(obj)){\n    for (key in obj)\n      if (!ownPropsOnly || obj.hasOwnProperty(key))\n        count++;\n  }\n\n  return count;\n}\n\n\nfunction includes(array, obj) {\n  return indexOf(array, obj) != -1;\n}\n\nfunction indexOf(array, obj) {\n  if (array.indexOf) return array.indexOf(obj);\n\n  for ( var i = 0; i < array.length; i++) {\n    if (obj === array[i]) return i;\n  }\n  return -1;\n}\n\nfunction arrayRemove(array, value) {\n  var index = indexOf(array, value);\n  if (index >=0)\n    array.splice(index, 1);\n  return value;\n}\n\nfunction isLeafNode (node) {\n  if (node) {\n    switch (node.nodeName) {\n    case \"OPTION\":\n    case \"PRE\":\n    case \"TITLE\":\n      return true;\n    }\n  }\n  return false;\n}\n\n/**\n * @ngdoc function\n * @name angular.copy\n * @function\n *\n * @description\n * Creates a deep copy of `source`, which should be an object or an array.\n *\n * * If no destination is supplied, a copy of the object or array is created.\n * * If a destination is provided, all of its elements (for array) or properties (for objects)\n *   are deleted and then all elements/properties from the source are copied to it.\n * * If `source` is not an object or array (inc. `null` and `undefined`), `source` is returned.\n * * If `source` is identical to 'destination' an exception will be thrown.\n *\n * @param {*} source The source that will be used to make a copy.\n *                   Can be any type, including primitives, `null`, and `undefined`.\n * @param {(Object|Array)=} destination Destination into which the source is copied. If\n *     provided, must be of the same type as `source`.\n * @returns {*} The copy or updated `destination`, if `destination` was specified.\n *\n * @example\n <doc:example>\n <doc:source>\n <div ng-controller=\"Controller\">\n <form novalidate class=\"simple-form\">\n Name: <input type=\"text\" ng-model=\"user.name\" /><br />\n E-mail: <input type=\"email\" ng-model=\"user.email\" /><br />\n Gender: <input type=\"radio\" ng-model=\"user.gender\" value=\"male\" />male\n <input type=\"radio\" ng-model=\"user.gender\" value=\"female\" />female<br />\n <button ng-click=\"reset()\">RESET</button>\n <button ng-click=\"update(user)\">SAVE</button>\n </form>\n <pre>form = {{user | json}}</pre>\n <pre>master = {{master | json}}</pre>\n </div>\n\n <script>\n function Controller($scope) {\n    $scope.master= {};\n\n    $scope.update = function(user) {\n      // Example with 1 argument\n      $scope.master= angular.copy(user);\n    };\n\n    $scope.reset = function() {\n      // Example with 2 arguments\n      angular.copy($scope.master, $scope.user);\n    };\n\n    $scope.reset();\n  }\n </script>\n </doc:source>\n </doc:example>\n */\nfunction copy(source, destination){\n  if (isWindow(source) || isScope(source)) {\n    throw ngMinErr('cpws',\n      \"Can't copy! Making copies of Window or Scope instances is not supported.\");\n  }\n\n  if (!destination) {\n    destination = source;\n    if (source) {\n      if (isArray(source)) {\n        destination = copy(source, []);\n      } else if (isDate(source)) {\n        destination = new Date(source.getTime());\n      } else if (isRegExp(source)) {\n        destination = new RegExp(source.source);\n      } else if (isObject(source)) {\n        destination = copy(source, {});\n      }\n    }\n  } else {\n    if (source === destination) throw ngMinErr('cpi',\n      \"Can't copy! Source and destination are identical.\");\n    if (isArray(source)) {\n      destination.length = 0;\n      for ( var i = 0; i < source.length; i++) {\n        destination.push(copy(source[i]));\n      }\n    } else {\n      var h = destination.$$hashKey;\n      forEach(destination, function(value, key){\n        delete destination[key];\n      });\n      for ( var key in source) {\n        destination[key] = copy(source[key]);\n      }\n      setHashKey(destination,h);\n    }\n  }\n  return destination;\n}\n\n/**\n * Create a shallow copy of an object\n */\nfunction shallowCopy(src, dst) {\n  dst = dst || {};\n\n  for(var key in src) {\n    // shallowCopy is only ever called by $compile nodeLinkFn, which has control over src\n    // so we don't need to worry hasOwnProperty here\n    if (src.hasOwnProperty(key) && key.substr(0, 2) !== '$$') {\n      dst[key] = src[key];\n    }\n  }\n\n  return dst;\n}\n\n\n/**\n * @ngdoc function\n * @name angular.equals\n * @function\n *\n * @description\n * Determines if two objects or two values are equivalent. Supports value types, regular\n * expressions, arrays and objects.\n *\n * Two objects or values are considered equivalent if at least one of the following is true:\n *\n * * Both objects or values pass `===` comparison.\n * * Both objects or values are of the same type and all of their properties are equal by\n *   comparing them with `angular.equals`.\n * * Both values are NaN. (In JavaScript, NaN == NaN => false. But we consider two NaN as equal)\n * * Both values represent the same regular expression (In JavasScript,\n *   /abc/ == /abc/ => false. But we consider two regular expressions as equal when their textual\n *   representation matches).\n *\n * During a property comparison, properties of `function` type and properties with names\n * that begin with `$` are ignored.\n *\n * Scope and DOMWindow objects are being compared only by identify (`===`).\n *\n * @param {*} o1 Object or value to compare.\n * @param {*} o2 Object or value to compare.\n * @returns {boolean} True if arguments are equal.\n */\nfunction equals(o1, o2) {\n  if (o1 === o2) return true;\n  if (o1 === null || o2 === null) return false;\n  if (o1 !== o1 && o2 !== o2) return true; // NaN === NaN\n  var t1 = typeof o1, t2 = typeof o2, length, key, keySet;\n  if (t1 == t2) {\n    if (t1 == 'object') {\n      if (isArray(o1)) {\n        if (!isArray(o2)) return false;\n        if ((length = o1.length) == o2.length) {\n          for(key=0; key<length; key++) {\n            if (!equals(o1[key], o2[key])) return false;\n          }\n          return true;\n        }\n      } else if (isDate(o1)) {\n        return isDate(o2) && o1.getTime() == o2.getTime();\n      } else if (isRegExp(o1) && isRegExp(o2)) {\n        return o1.toString() == o2.toString();\n      } else {\n        if (isScope(o1) || isScope(o2) || isWindow(o1) || isWindow(o2) || isArray(o2)) return false;\n        keySet = {};\n        for(key in o1) {\n          if (key.charAt(0) === '$' || isFunction(o1[key])) continue;\n          if (!equals(o1[key], o2[key])) return false;\n          keySet[key] = true;\n        }\n        for(key in o2) {\n          if (!keySet.hasOwnProperty(key) &&\n              key.charAt(0) !== '$' &&\n              o2[key] !== undefined &&\n              !isFunction(o2[key])) return false;\n        }\n        return true;\n      }\n    }\n  }\n  return false;\n}\n\n\nfunction csp() {\n  return (document.securityPolicy && document.securityPolicy.isActive) ||\n      (document.querySelector &&\n      !!(document.querySelector('[ng-csp]') || document.querySelector('[data-ng-csp]')));\n}\n\n\nfunction concat(array1, array2, index) {\n  return array1.concat(slice.call(array2, index));\n}\n\nfunction sliceArgs(args, startIndex) {\n  return slice.call(args, startIndex || 0);\n}\n\n\n/* jshint -W101 */\n/**\n * @ngdoc function\n * @name angular.bind\n * @function\n *\n * @description\n * Returns a function which calls function `fn` bound to `self` (`self` becomes the `this` for\n * `fn`). You can supply optional `args` that are prebound to the function. This feature is also\n * known as [partial application](http://en.wikipedia.org/wiki/Partial_application), as\n * distinguished from [function currying](http://en.wikipedia.org/wiki/Currying#Contrast_with_partial_function_application).\n *\n * @param {Object} self Context which `fn` should be evaluated in.\n * @param {function()} fn Function to be bound.\n * @param {...*} args Optional arguments to be prebound to the `fn` function call.\n * @returns {function()} Function that wraps the `fn` with all the specified bindings.\n */\n/* jshint +W101 */\nfunction bind(self, fn) {\n  var curryArgs = arguments.length > 2 ? sliceArgs(arguments, 2) : [];\n  if (isFunction(fn) && !(fn instanceof RegExp)) {\n    return curryArgs.length\n      ? function() {\n          return arguments.length\n            ? fn.apply(self, curryArgs.concat(slice.call(arguments, 0)))\n            : fn.apply(self, curryArgs);\n        }\n      : function() {\n          return arguments.length\n            ? fn.apply(self, arguments)\n            : fn.call(self);\n        };\n  } else {\n    // in IE, native methods are not functions so they cannot be bound (note: they don't need to be)\n    return fn;\n  }\n}\n\n\nfunction toJsonReplacer(key, value) {\n  var val = value;\n\n  if (typeof key === 'string' && key.charAt(0) === '$') {\n    val = undefined;\n  } else if (isWindow(value)) {\n    val = '$WINDOW';\n  } else if (value &&  document === value) {\n    val = '$DOCUMENT';\n  } else if (isScope(value)) {\n    val = '$SCOPE';\n  }\n\n  return val;\n}\n\n\n/**\n * @ngdoc function\n * @name angular.toJson\n * @function\n *\n * @description\n * Serializes input into a JSON-formatted string. Properties with leading $ characters will be\n * stripped since angular uses this notation internally.\n *\n * @param {Object|Array|Date|string|number} obj Input to be serialized into JSON.\n * @param {boolean=} pretty If set to true, the JSON output will contain newlines and whitespace.\n * @returns {string|undefined} JSON-ified string representing `obj`.\n */\nfunction toJson(obj, pretty) {\n  if (typeof obj === 'undefined') return undefined;\n  return JSON.stringify(obj, toJsonReplacer, pretty ? '  ' : null);\n}\n\n\n/**\n * @ngdoc function\n * @name angular.fromJson\n * @function\n *\n * @description\n * Deserializes a JSON string.\n *\n * @param {string} json JSON string to deserialize.\n * @returns {Object|Array|Date|string|number} Deserialized thingy.\n */\nfunction fromJson(json) {\n  return isString(json)\n      ? JSON.parse(json)\n      : json;\n}\n\n\nfunction toBoolean(value) {\n  if (value && value.length !== 0) {\n    var v = lowercase(\"\" + value);\n    value = !(v == 'f' || v == '0' || v == 'false' || v == 'no' || v == 'n' || v == '[]');\n  } else {\n    value = false;\n  }\n  return value;\n}\n\n/**\n * @returns {string} Returns the string representation of the element.\n */\nfunction startingTag(element) {\n  element = jqLite(element).clone();\n  try {\n    // turns out IE does not let you set .html() on elements which\n    // are not allowed to have children. So we just ignore it.\n    element.html('');\n  } catch(e) {}\n  // As Per DOM Standards\n  var TEXT_NODE = 3;\n  var elemHtml = jqLite('<div>').append(element).html();\n  try {\n    return element[0].nodeType === TEXT_NODE ? lowercase(elemHtml) :\n        elemHtml.\n          match(/^(<[^>]+>)/)[1].\n          replace(/^<([\\w\\-]+)/, function(match, nodeName) { return '<' + lowercase(nodeName); });\n  } catch(e) {\n    return lowercase(elemHtml);\n  }\n\n}\n\n\n/////////////////////////////////////////////////\n\n/**\n * Tries to decode the URI component without throwing an exception.\n *\n * @private\n * @param str value potential URI component to check.\n * @returns {boolean} True if `value` can be decoded\n * with the decodeURIComponent function.\n */\nfunction tryDecodeURIComponent(value) {\n  try {\n    return decodeURIComponent(value);\n  } catch(e) {\n    // Ignore any invalid uri component\n  }\n}\n\n\n/**\n * Parses an escaped url query string into key-value pairs.\n * @returns Object.<(string|boolean)>\n */\nfunction parseKeyValue(/**string*/keyValue) {\n  var obj = {}, key_value, key;\n  forEach((keyValue || \"\").split('&'), function(keyValue){\n    if ( keyValue ) {\n      key_value = keyValue.split('=');\n      key = tryDecodeURIComponent(key_value[0]);\n      if ( isDefined(key) ) {\n        var val = isDefined(key_value[1]) ? tryDecodeURIComponent(key_value[1]) : true;\n        if (!obj[key]) {\n          obj[key] = val;\n        } else if(isArray(obj[key])) {\n          obj[key].push(val);\n        } else {\n          obj[key] = [obj[key],val];\n        }\n      }\n    }\n  });\n  return obj;\n}\n\nfunction toKeyValue(obj) {\n  var parts = [];\n  forEach(obj, function(value, key) {\n    if (isArray(value)) {\n      forEach(value, function(arrayValue) {\n        parts.push(encodeUriQuery(key, true) +\n                   (arrayValue === true ? '' : '=' + encodeUriQuery(arrayValue, true)));\n      });\n    } else {\n    parts.push(encodeUriQuery(key, true) +\n               (value === true ? '' : '=' + encodeUriQuery(value, true)));\n    }\n  });\n  return parts.length ? parts.join('&') : '';\n}\n\n\n/**\n * We need our custom method because encodeURIComponent is too aggressive and doesn't follow\n * http://www.ietf.org/rfc/rfc3986.txt with regards to the character set (pchar) allowed in path\n * segments:\n *    segment       = *pchar\n *    pchar         = unreserved / pct-encoded / sub-delims / \":\" / \"@\"\n *    pct-encoded   = \"%\" HEXDIG HEXDIG\n *    unreserved    = ALPHA / DIGIT / \"-\" / \".\" / \"_\" / \"~\"\n *    sub-delims    = \"!\" / \"$\" / \"&\" / \"'\" / \"(\" / \")\"\n *                     / \"*\" / \"+\" / \",\" / \";\" / \"=\"\n */\nfunction encodeUriSegment(val) {\n  return encodeUriQuery(val, true).\n             replace(/%26/gi, '&').\n             replace(/%3D/gi, '=').\n             replace(/%2B/gi, '+');\n}\n\n\n/**\n * This method is intended for encoding *key* or *value* parts of query component. We need a custom\n * method because encodeURIComponent is too aggressive and encodes stuff that doesn't have to be\n * encoded per http://tools.ietf.org/html/rfc3986:\n *    query       = *( pchar / \"/\" / \"?\" )\n *    pchar         = unreserved / pct-encoded / sub-delims / \":\" / \"@\"\n *    unreserved    = ALPHA / DIGIT / \"-\" / \".\" / \"_\" / \"~\"\n *    pct-encoded   = \"%\" HEXDIG HEXDIG\n *    sub-delims    = \"!\" / \"$\" / \"&\" / \"'\" / \"(\" / \")\"\n *                     / \"*\" / \"+\" / \",\" / \";\" / \"=\"\n */\nfunction encodeUriQuery(val, pctEncodeSpaces) {\n  return encodeURIComponent(val).\n             replace(/%40/gi, '@').\n             replace(/%3A/gi, ':').\n             replace(/%24/g, '$').\n             replace(/%2C/gi, ',').\n             replace(/%20/g, (pctEncodeSpaces ? '%20' : '+'));\n}\n\n\n/**\n * @ngdoc directive\n * @name ng.directive:ngApp\n *\n * @element ANY\n * @param {angular.Module} ngApp an optional application\n *   {@link angular.module module} name to load.\n *\n * @description\n *\n * Use this directive to auto-bootstrap an application. Only\n * one ngApp directive can be used per HTML document. The directive\n * designates the root of the application and is typically placed\n * at the root of the page.\n *\n * The first ngApp found in the document will be auto-bootstrapped. To use multiple applications in\n * an HTML document you must manually bootstrap them using {@link angular.bootstrap}.\n * Applications cannot be nested.\n *\n * In the example below if the `ngApp` directive were not placed\n * on the `html` element then the document would not be compiled\n * and the `{{ 1+2 }}` would not be resolved to `3`.\n *\n * `ngApp` is the easiest way to bootstrap an application.\n *\n <doc:example>\n   <doc:source>\n    I can add: 1 + 2 =  {{ 1+2 }}\n   </doc:source>\n </doc:example>\n *\n */\nfunction angularInit(element, bootstrap) {\n  var elements = [element],\n      appElement,\n      module,\n      names = ['ng:app', 'ng-app', 'x-ng-app', 'data-ng-app'],\n      NG_APP_CLASS_REGEXP = /\\sng[:\\-]app(:\\s*([\\w\\d_]+);?)?\\s/;\n\n  function append(element) {\n    element && elements.push(element);\n  }\n\n  forEach(names, function(name) {\n    names[name] = true;\n    append(document.getElementById(name));\n    name = name.replace(':', '\\\\:');\n    if (element.querySelectorAll) {\n      forEach(element.querySelectorAll('.' + name), append);\n      forEach(element.querySelectorAll('.' + name + '\\\\:'), append);\n      forEach(element.querySelectorAll('[' + name + ']'), append);\n    }\n  });\n\n  forEach(elements, function(element) {\n    if (!appElement) {\n      var className = ' ' + element.className + ' ';\n      var match = NG_APP_CLASS_REGEXP.exec(className);\n      if (match) {\n        appElement = element;\n        module = (match[2] || '').replace(/\\s+/g, ',');\n      } else {\n        forEach(element.attributes, function(attr) {\n          if (!appElement && names[attr.name]) {\n            appElement = element;\n            module = attr.value;\n          }\n        });\n      }\n    }\n  });\n  if (appElement) {\n    bootstrap(appElement, module ? [module] : []);\n  }\n}\n\n/**\n * @ngdoc function\n * @name angular.bootstrap\n * @description\n * Use this function to manually start up angular application.\n *\n * See: {@link guide/bootstrap Bootstrap}\n *\n * Note that ngScenario-based end-to-end tests cannot use this function to bootstrap manually.\n * They must use {@link api/ng.directive:ngApp ngApp}.\n *\n * @param {Element} element DOM element which is the root of angular application.\n * @param {Array<String|Function|Array>=} modules an array of modules to load into the application.\n *     Each item in the array should be the name of a predefined module or a (DI annotated)\n *     function that will be invoked by the injector as a run block.\n *     See: {@link angular.module modules}\n * @returns {AUTO.$injector} Returns the newly created injector for this app.\n */\nfunction bootstrap(element, modules) {\n  var doBootstrap = function() {\n    element = jqLite(element);\n\n    if (element.injector()) {\n      var tag = (element[0] === document) ? 'document' : startingTag(element);\n      throw ngMinErr('btstrpd', \"App Already Bootstrapped with this Element '{0}'\", tag);\n    }\n\n    modules = modules || [];\n    modules.unshift(['$provide', function($provide) {\n      $provide.value('$rootElement', element);\n    }]);\n    modules.unshift('ng');\n    var injector = createInjector(modules);\n    injector.invoke(['$rootScope', '$rootElement', '$compile', '$injector', '$animate',\n       function(scope, element, compile, injector, animate) {\n        scope.$apply(function() {\n          element.data('$injector', injector);\n          compile(element)(scope);\n        });\n      }]\n    );\n    return injector;\n  };\n\n  var NG_DEFER_BOOTSTRAP = /^NG_DEFER_BOOTSTRAP!/;\n\n  if (window && !NG_DEFER_BOOTSTRAP.test(window.name)) {\n    return doBootstrap();\n  }\n\n  window.name = window.name.replace(NG_DEFER_BOOTSTRAP, '');\n  angular.resumeBootstrap = function(extraModules) {\n    forEach(extraModules, function(module) {\n      modules.push(module);\n    });\n    doBootstrap();\n  };\n}\n\nvar SNAKE_CASE_REGEXP = /[A-Z]/g;\nfunction snake_case(name, separator){\n  separator = separator || '_';\n  return name.replace(SNAKE_CASE_REGEXP, function(letter, pos) {\n    return (pos ? separator : '') + letter.toLowerCase();\n  });\n}\n\nfunction bindJQuery() {\n  // bind to jQuery if present;\n  jQuery = window.jQuery;\n  // reset to jQuery or default to us.\n  if (jQuery) {\n    jqLite = jQuery;\n    extend(jQuery.fn, {\n      scope: JQLitePrototype.scope,\n      isolateScope: JQLitePrototype.isolateScope,\n      controller: JQLitePrototype.controller,\n      injector: JQLitePrototype.injector,\n      inheritedData: JQLitePrototype.inheritedData\n    });\n    // Method signature:\n    //     jqLitePatchJQueryRemove(name, dispatchThis, filterElems, getterIfNoArguments)\n    jqLitePatchJQueryRemove('remove', true, true, false);\n    jqLitePatchJQueryRemove('empty', false, false, false);\n    jqLitePatchJQueryRemove('html', false, false, true);\n  } else {\n    jqLite = JQLite;\n  }\n  angular.element = jqLite;\n}\n\n/**\n * throw error if the argument is falsy.\n */\nfunction assertArg(arg, name, reason) {\n  if (!arg) {\n    throw ngMinErr('areq', \"Argument '{0}' is {1}\", (name || '?'), (reason || \"required\"));\n  }\n  return arg;\n}\n\nfunction assertArgFn(arg, name, acceptArrayAnnotation) {\n  if (acceptArrayAnnotation && isArray(arg)) {\n      arg = arg[arg.length - 1];\n  }\n\n  assertArg(isFunction(arg), name, 'not a function, got ' +\n      (arg && typeof arg == 'object' ? arg.constructor.name || 'Object' : typeof arg));\n  return arg;\n}\n\n/**\n * throw error if the name given is hasOwnProperty\n * @param  {String} name    the name to test\n * @param  {String} context the context in which the name is used, such as module or directive\n */\nfunction assertNotHasOwnProperty(name, context) {\n  if (name === 'hasOwnProperty') {\n    throw ngMinErr('badname', \"hasOwnProperty is not a valid {0} name\", context);\n  }\n}\n\n/**\n * Return the value accessible from the object by path. Any undefined traversals are ignored\n * @param {Object} obj starting object\n * @param {string} path path to traverse\n * @param {boolean=true} bindFnToScope\n * @returns value as accessible by path\n */\n//TODO(misko): this function needs to be removed\nfunction getter(obj, path, bindFnToScope) {\n  if (!path) return obj;\n  var keys = path.split('.');\n  var key;\n  var lastInstance = obj;\n  var len = keys.length;\n\n  for (var i = 0; i < len; i++) {\n    key = keys[i];\n    if (obj) {\n      obj = (lastInstance = obj)[key];\n    }\n  }\n  if (!bindFnToScope && isFunction(obj)) {\n    return bind(lastInstance, obj);\n  }\n  return obj;\n}\n\n/**\n * Return the siblings between `startNode` and `endNode`, inclusive\n * @param {Object} object with `startNode` and `endNode` properties\n * @returns jQlite object containing the elements\n */\nfunction getBlockElements(block) {\n  if (block.startNode === block.endNode) {\n    return jqLite(block.startNode);\n  }\n\n  var element = block.startNode;\n  var elements = [element];\n\n  do {\n    element = element.nextSibling;\n    if (!element) break;\n    elements.push(element);\n  } while (element !== block.endNode);\n\n  return jqLite(elements);\n}\n\n/**\n * @ngdoc interface\n * @name angular.Module\n * @description\n *\n * Interface for configuring angular {@link angular.module modules}.\n */\n\nfunction setupModuleLoader(window) {\n\n  var $injectorMinErr = minErr('$injector');\n\n  function ensure(obj, name, factory) {\n    return obj[name] || (obj[name] = factory());\n  }\n\n  return ensure(ensure(window, 'angular', Object), 'module', function() {\n    /** @type {Object.<string, angular.Module>} */\n    var modules = {};\n\n    /**\n     * @ngdoc function\n     * @name angular.module\n     * @description\n     *\n     * The `angular.module` is a global place for creating, registering and retrieving Angular\n     * modules.\n     * All modules (angular core or 3rd party) that should be available to an application must be\n     * registered using this mechanism.\n     *\n     * When passed two or more arguments, a new module is created.  If passed only one argument, an\n     * existing module (the name passed as the first argument to `module`) is retrieved.\n     *\n     *\n     * # Module\n     *\n     * A module is a collection of services, directives, filters, and configuration information.\n     * `angular.module` is used to configure the {@link AUTO.$injector $injector}.\n     *\n     * <pre>\n     * // Create a new module\n     * var myModule = angular.module('myModule', []);\n     *\n     * // register a new service\n     * myModule.value('appName', 'MyCoolApp');\n     *\n     * // configure existing services inside initialization blocks.\n     * myModule.config(function($locationProvider) {\n     *   // Configure existing providers\n     *   $locationProvider.hashPrefix('!');\n     * });\n     * </pre>\n     *\n     * Then you can create an injector and load your modules like this:\n     *\n     * <pre>\n     * var injector = angular.injector(['ng', 'MyModule'])\n     * </pre>\n     *\n     * However it's more likely that you'll just use\n     * {@link ng.directive:ngApp ngApp} or\n     * {@link angular.bootstrap} to simplify this process for you.\n     *\n     * @param {!string} name The name of the module to create or retrieve.\n     * @param {Array.<string>=} requires If specified then new module is being created. If\n     *        unspecified then the the module is being retrieved for further configuration.\n     * @param {Function} configFn Optional configuration function for the module. Same as\n     *        {@link angular.Module#methods_config Module#config()}.\n     * @returns {module} new module with the {@link angular.Module} api.\n     */\n    return function module(name, requires, configFn) {\n      assertNotHasOwnProperty(name, 'module');\n      if (requires && modules.hasOwnProperty(name)) {\n        modules[name] = null;\n      }\n      return ensure(modules, name, function() {\n        if (!requires) {\n          throw $injectorMinErr('nomod', \"Module '{0}' is not available! You either misspelled \" +\n             \"the module name or forgot to load it. If registering a module ensure that you \" +\n             \"specify the dependencies as the second argument.\", name);\n        }\n\n        /** @type {!Array.<Array.<*>>} */\n        var invokeQueue = [];\n\n        /** @type {!Array.<Function>} */\n        var runBlocks = [];\n\n        var config = invokeLater('$injector', 'invoke');\n\n        /** @type {angular.Module} */\n        var moduleInstance = {\n          // Private state\n          _invokeQueue: invokeQueue,\n          _runBlocks: runBlocks,\n\n          /**\n           * @ngdoc property\n           * @name angular.Module#requires\n           * @propertyOf angular.Module\n           * @returns {Array.<string>} List of module names which must be loaded before this module.\n           * @description\n           * Holds the list of modules which the injector will load before the current module is\n           * loaded.\n           */\n          requires: requires,\n\n          /**\n           * @ngdoc property\n           * @name angular.Module#name\n           * @propertyOf angular.Module\n           * @returns {string} Name of the module.\n           * @description\n           */\n          name: name,\n\n\n          /**\n           * @ngdoc method\n           * @name angular.Module#provider\n           * @methodOf angular.Module\n           * @param {string} name service name\n           * @param {Function} providerType Construction function for creating new instance of the\n           *                                service.\n           * @description\n           * See {@link AUTO.$provide#provider $provide.provider()}.\n           */\n          provider: invokeLater('$provide', 'provider'),\n\n          /**\n           * @ngdoc method\n           * @name angular.Module#factory\n           * @methodOf angular.Module\n           * @param {string} name service name\n           * @param {Function} providerFunction Function for creating new instance of the service.\n           * @description\n           * See {@link AUTO.$provide#factory $provide.factory()}.\n           */\n          factory: invokeLater('$provide', 'factory'),\n\n          /**\n           * @ngdoc method\n           * @name angular.Module#service\n           * @methodOf angular.Module\n           * @param {string} name service name\n           * @param {Function} constructor A constructor function that will be instantiated.\n           * @description\n           * See {@link AUTO.$provide#service $provide.service()}.\n           */\n          service: invokeLater('$provide', 'service'),\n\n          /**\n           * @ngdoc method\n           * @name angular.Module#value\n           * @methodOf angular.Module\n           * @param {string} name service name\n           * @param {*} object Service instance object.\n           * @description\n           * See {@link AUTO.$provide#value $provide.value()}.\n           */\n          value: invokeLater('$provide', 'value'),\n\n          /**\n           * @ngdoc method\n           * @name angular.Module#constant\n           * @methodOf angular.Module\n           * @param {string} name constant name\n           * @param {*} object Constant value.\n           * @description\n           * Because the constant are fixed, they get applied before other provide methods.\n           * See {@link AUTO.$provide#constant $provide.constant()}.\n           */\n          constant: invokeLater('$provide', 'constant', 'unshift'),\n\n          /**\n           * @ngdoc method\n           * @name angular.Module#animation\n           * @methodOf angular.Module\n           * @param {string} name animation name\n           * @param {Function} animationFactory Factory function for creating new instance of an\n           *                                    animation.\n           * @description\n           *\n           * **NOTE**: animations take effect only if the **ngAnimate** module is loaded.\n           *\n           *\n           * Defines an animation hook that can be later used with\n           * {@link ngAnimate.$animate $animate} service and directives that use this service.\n           *\n           * <pre>\n           * module.animation('.animation-name', function($inject1, $inject2) {\n           *   return {\n           *     eventName : function(element, done) {\n           *       //code to run the animation\n           *       //once complete, then run done()\n           *       return function cancellationFunction(element) {\n           *         //code to cancel the animation\n           *       }\n           *     }\n           *   }\n           * })\n           * </pre>\n           *\n           * See {@link ngAnimate.$animateProvider#register $animateProvider.register()} and\n           * {@link ngAnimate ngAnimate module} for more information.\n           */\n          animation: invokeLater('$animateProvider', 'register'),\n\n          /**\n           * @ngdoc method\n           * @name angular.Module#filter\n           * @methodOf angular.Module\n           * @param {string} name Filter name.\n           * @param {Function} filterFactory Factory function for creating new instance of filter.\n           * @description\n           * See {@link ng.$filterProvider#register $filterProvider.register()}.\n           */\n          filter: invokeLater('$filterProvider', 'register'),\n\n          /**\n           * @ngdoc method\n           * @name angular.Module#controller\n           * @methodOf angular.Module\n           * @param {string|Object} name Controller name, or an object map of controllers where the\n           *    keys are the names and the values are the constructors.\n           * @param {Function} constructor Controller constructor function.\n           * @description\n           * See {@link ng.$controllerProvider#register $controllerProvider.register()}.\n           */\n          controller: invokeLater('$controllerProvider', 'register'),\n\n          /**\n           * @ngdoc method\n           * @name angular.Module#directive\n           * @methodOf angular.Module\n           * @param {string|Object} name Directive name, or an object map of directives where the\n           *    keys are the names and the values are the factories.\n           * @param {Function} directiveFactory Factory function for creating new instance of\n           * directives.\n           * @description\n           * See {@link ng.$compileProvider#methods_directive $compileProvider.directive()}.\n           */\n          directive: invokeLater('$compileProvider', 'directive'),\n\n          /**\n           * @ngdoc method\n           * @name angular.Module#config\n           * @methodOf angular.Module\n           * @param {Function} configFn Execute this function on module load. Useful for service\n           *    configuration.\n           * @description\n           * Use this method to register work which needs to be performed on module loading.\n           */\n          config: config,\n\n          /**\n           * @ngdoc method\n           * @name angular.Module#run\n           * @methodOf angular.Module\n           * @param {Function} initializationFn Execute this function after injector creation.\n           *    Useful for application initialization.\n           * @description\n           * Use this method to register work which should be performed when the injector is done\n           * loading all modules.\n           */\n          run: function(block) {\n            runBlocks.push(block);\n            return this;\n          }\n        };\n\n        if (configFn) {\n          config(configFn);\n        }\n\n        return  moduleInstance;\n\n        /**\n         * @param {string} provider\n         * @param {string} method\n         * @param {String=} insertMethod\n         * @returns {angular.Module}\n         */\n        function invokeLater(provider, method, insertMethod) {\n          return function() {\n            invokeQueue[insertMethod || 'push']([provider, method, arguments]);\n            return moduleInstance;\n          };\n        }\n      });\n    };\n  });\n\n}\n\n/* global\n    angularModule: true,\n    version: true,\n    \n    $LocaleProvider,\n    $CompileProvider,\n    \n    htmlAnchorDirective,\n    inputDirective,\n    inputDirective,\n    formDirective,\n    scriptDirective,\n    selectDirective,\n    styleDirective,\n    optionDirective,\n    ngBindDirective,\n    ngBindHtmlDirective,\n    ngBindTemplateDirective,\n    ngClassDirective,\n    ngClassEvenDirective,\n    ngClassOddDirective,\n    ngCspDirective,\n    ngCloakDirective,\n    ngControllerDirective,\n    ngFormDirective,\n    ngHideDirective,\n    ngIfDirective,\n    ngIncludeDirective,\n    ngInitDirective,\n    ngNonBindableDirective,\n    ngPluralizeDirective,\n    ngRepeatDirective,\n    ngShowDirective,\n    ngStyleDirective,\n    ngSwitchDirective,\n    ngSwitchWhenDirective,\n    ngSwitchDefaultDirective,\n    ngOptionsDirective,\n    ngTranscludeDirective,\n    ngModelDirective,\n    ngListDirective,\n    ngChangeDirective,\n    requiredDirective,\n    requiredDirective,\n    ngValueDirective,\n    ngAttributeAliasDirectives,\n    ngEventDirectives,\n\n    $AnchorScrollProvider,\n    $AnimateProvider,\n    $BrowserProvider,\n    $CacheFactoryProvider,\n    $ControllerProvider,\n    $DocumentProvider,\n    $ExceptionHandlerProvider,\n    $FilterProvider,\n    $InterpolateProvider,\n    $IntervalProvider,\n    $HttpProvider,\n    $HttpBackendProvider,\n    $LocationProvider,\n    $LogProvider,\n    $ParseProvider,\n    $RootScopeProvider,\n    $QProvider,\n    $SceProvider,\n    $SceDelegateProvider,\n    $SnifferProvider,\n    $TemplateCacheProvider,\n    $TimeoutProvider,\n    $WindowProvider\n*/\n\n\n/**\n * @ngdoc property\n * @name angular.version\n * @description\n * An object that contains information about the current AngularJS version. This object has the\n * following properties:\n *\n * - `full` – `{string}` – Full version string, such as \"0.9.18\".\n * - `major` – `{number}` – Major version number, such as \"0\".\n * - `minor` – `{number}` – Minor version number, such as \"9\".\n * - `dot` – `{number}` – Dot version number, such as \"18\".\n * - `codeName` – `{string}` – Code name of the release, such as \"jiggling-armfat\".\n */\nvar version = {\n  full: '1.2.0',    // all of these placeholder strings will be replaced by grunt's\n  major: 1,    // package task\n  minor: \"NG_VERSION_MINOR\",\n  dot: 0,\n  codeName: 'timely-delivery'\n};\n\n\nfunction publishExternalAPI(angular){\n  extend(angular, {\n    'bootstrap': bootstrap,\n    'copy': copy,\n    'extend': extend,\n    'equals': equals,\n    'element': jqLite,\n    'forEach': forEach,\n    'injector': createInjector,\n    'noop':noop,\n    'bind':bind,\n    'toJson': toJson,\n    'fromJson': fromJson,\n    'identity':identity,\n    'isUndefined': isUndefined,\n    'isDefined': isDefined,\n    'isString': isString,\n    'isFunction': isFunction,\n    'isObject': isObject,\n    'isNumber': isNumber,\n    'isElement': isElement,\n    'isArray': isArray,\n    'version': version,\n    'isDate': isDate,\n    'lowercase': lowercase,\n    'uppercase': uppercase,\n    'callbacks': {counter: 0},\n    '$$minErr': minErr,\n    '$$csp': csp\n  });\n\n  angularModule = setupModuleLoader(window);\n  try {\n    angularModule('ngLocale');\n  } catch (e) {\n    angularModule('ngLocale', []).provider('$locale', $LocaleProvider);\n  }\n\n  angularModule('ng', ['ngLocale'], ['$provide',\n    function ngModule($provide) {\n      $provide.provider('$compile', $CompileProvider).\n        directive({\n            a: htmlAnchorDirective,\n            input: inputDirective,\n            textarea: inputDirective,\n            form: formDirective,\n            script: scriptDirective,\n            select: selectDirective,\n            style: styleDirective,\n            option: optionDirective,\n            ngBind: ngBindDirective,\n            ngBindHtml: ngBindHtmlDirective,\n            ngBindTemplate: ngBindTemplateDirective,\n            ngClass: ngClassDirective,\n            ngClassEven: ngClassEvenDirective,\n            ngClassOdd: ngClassOddDirective,\n            ngCloak: ngCloakDirective,\n            ngController: ngControllerDirective,\n            ngForm: ngFormDirective,\n            ngHide: ngHideDirective,\n            ngIf: ngIfDirective,\n            ngInclude: ngIncludeDirective,\n            ngInit: ngInitDirective,\n            ngNonBindable: ngNonBindableDirective,\n            ngPluralize: ngPluralizeDirective,\n            ngRepeat: ngRepeatDirective,\n            ngShow: ngShowDirective,\n            ngStyle: ngStyleDirective,\n            ngSwitch: ngSwitchDirective,\n            ngSwitchWhen: ngSwitchWhenDirective,\n            ngSwitchDefault: ngSwitchDefaultDirective,\n            ngOptions: ngOptionsDirective,\n            ngTransclude: ngTranscludeDirective,\n            ngModel: ngModelDirective,\n            ngList: ngListDirective,\n            ngChange: ngChangeDirective,\n            required: requiredDirective,\n            ngRequired: requiredDirective,\n            ngValue: ngValueDirective\n        }).\n        directive(ngAttributeAliasDirectives).\n        directive(ngEventDirectives);\n      $provide.provider({\n        $anchorScroll: $AnchorScrollProvider,\n        $animate: $AnimateProvider,\n        $browser: $BrowserProvider,\n        $cacheFactory: $CacheFactoryProvider,\n        $controller: $ControllerProvider,\n        $document: $DocumentProvider,\n        $exceptionHandler: $ExceptionHandlerProvider,\n        $filter: $FilterProvider,\n        $interpolate: $InterpolateProvider,\n        $interval: $IntervalProvider,\n        $http: $HttpProvider,\n        $httpBackend: $HttpBackendProvider,\n        $location: $LocationProvider,\n        $log: $LogProvider,\n        $parse: $ParseProvider,\n        $rootScope: $RootScopeProvider,\n        $q: $QProvider,\n        $sce: $SceProvider,\n        $sceDelegate: $SceDelegateProvider,\n        $sniffer: $SnifferProvider,\n        $templateCache: $TemplateCacheProvider,\n        $timeout: $TimeoutProvider,\n        $window: $WindowProvider\n      });\n    }\n  ]);\n}\n\n/* global\n\n  -JQLitePrototype,\n  -addEventListenerFn,\n  -removeEventListenerFn,\n  -BOOLEAN_ATTR\n*/\n\n//////////////////////////////////\n//JQLite\n//////////////////////////////////\n\n/**\n * @ngdoc function\n * @name angular.element\n * @function\n *\n * @description\n * Wraps a raw DOM element or HTML string as a [jQuery](http://jquery.com) element.\n *\n * If jQuery is available, `angular.element` is an alias for the\n * [jQuery](http://api.jquery.com/jQuery/) function. If jQuery is not available, `angular.element`\n * delegates to Angular's built-in subset of jQuery, called \"jQuery lite\" or \"jqLite.\"\n *\n * <div class=\"alert alert-success\">jqLite is a tiny, API-compatible subset of jQuery that allows\n * Angular to manipulate the DOM in a cross-browser compatible way. **jqLite** implements only the most\n * commonly needed functionality with the goal of having a very small footprint.</div>\n *\n * To use jQuery, simply load it before `DOMContentLoaded` event fired.\n *\n * <div class=\"alert\">**Note:** all element references in Angular are always wrapped with jQuery or\n * jqLite; they are never raw DOM references.</div>\n *\n * ## Angular's jqLite\n * jqLite provides only the following jQuery methods:\n *\n * - [`addClass()`](http://api.jquery.com/addClass/)\n * - [`after()`](http://api.jquery.com/after/)\n * - [`append()`](http://api.jquery.com/append/)\n * - [`attr()`](http://api.jquery.com/attr/)\n * - [`bind()`](http://api.jquery.com/on/) - Does not support namespaces, selectors or eventData\n * - [`children()`](http://api.jquery.com/children/) - Does not support selectors\n * - [`clone()`](http://api.jquery.com/clone/)\n * - [`contents()`](http://api.jquery.com/contents/)\n * - [`css()`](http://api.jquery.com/css/)\n * - [`data()`](http://api.jquery.com/data/)\n * - [`eq()`](http://api.jquery.com/eq/)\n * - [`find()`](http://api.jquery.com/find/) - Limited to lookups by tag name\n * - [`hasClass()`](http://api.jquery.com/hasClass/)\n * - [`html()`](http://api.jquery.com/html/)\n * - [`next()`](http://api.jquery.com/next/) - Does not support selectors\n * - [`on()`](http://api.jquery.com/on/) - Does not support namespaces, selectors or eventData\n * - [`off()`](http://api.jquery.com/off/) - Does not support namespaces or selectors\n * - [`parent()`](http://api.jquery.com/parent/) - Does not support selectors\n * - [`prepend()`](http://api.jquery.com/prepend/)\n * - [`prop()`](http://api.jquery.com/prop/)\n * - [`ready()`](http://api.jquery.com/ready/)\n * - [`remove()`](http://api.jquery.com/remove/)\n * - [`removeAttr()`](http://api.jquery.com/removeAttr/)\n * - [`removeClass()`](http://api.jquery.com/removeClass/)\n * - [`removeData()`](http://api.jquery.com/removeData/)\n * - [`replaceWith()`](http://api.jquery.com/replaceWith/)\n * - [`text()`](http://api.jquery.com/text/)\n * - [`toggleClass()`](http://api.jquery.com/toggleClass/)\n * - [`triggerHandler()`](http://api.jquery.com/triggerHandler/) - Passes a dummy event object to handlers.\n * - [`unbind()`](http://api.jquery.com/off/) - Does not support namespaces\n * - [`val()`](http://api.jquery.com/val/)\n * - [`wrap()`](http://api.jquery.com/wrap/)\n *\n * ## jQuery/jqLite Extras\n * Angular also provides the following additional methods and events to both jQuery and jqLite:\n *\n * ### Events\n * - `$destroy` - AngularJS intercepts all jqLite/jQuery's DOM destruction apis and fires this event\n *    on all DOM nodes being removed.  This can be used to clean up any 3rd party bindings to the DOM\n *    element before it is removed.\n *\n * ### Methods\n * - `controller(name)` - retrieves the controller of the current element or its parent. By default\n *   retrieves controller associated with the `ngController` directive. If `name` is provided as\n *   camelCase directive name, then the controller for this directive will be retrieved (e.g.\n *   `'ngModel'`).\n * - `injector()` - retrieves the injector of the current element or its parent.\n * - `scope()` - retrieves the {@link api/ng.$rootScope.Scope scope} of the current\n *   element or its parent.\n * - `isolateScope()` - retrieves an isolate {@link api/ng.$rootScope.Scope scope} if one is attached directly to the\n *   current element. This getter should be used only on elements that contain a directive which starts a new isolate\n *   scope. Calling `scope()` on this element always returns the original non-isolate scope.\n * - `inheritedData()` - same as `data()`, but walks up the DOM until a value is found or the top\n *   parent element is reached.\n *\n * @param {string|DOMElement} element HTML string or DOMElement to be wrapped into jQuery.\n * @returns {Object} jQuery object.\n */\n\nvar jqCache = JQLite.cache = {},\n    jqName = JQLite.expando = 'ng-' + new Date().getTime(),\n    jqId = 1,\n    addEventListenerFn = (window.document.addEventListener\n      ? function(element, type, fn) {element.addEventListener(type, fn, false);}\n      : function(element, type, fn) {element.attachEvent('on' + type, fn);}),\n    removeEventListenerFn = (window.document.removeEventListener\n      ? function(element, type, fn) {element.removeEventListener(type, fn, false); }\n      : function(element, type, fn) {element.detachEvent('on' + type, fn); });\n\nfunction jqNextId() { return ++jqId; }\n\n\nvar SPECIAL_CHARS_REGEXP = /([\\:\\-\\_]+(.))/g;\nvar MOZ_HACK_REGEXP = /^moz([A-Z])/;\nvar jqLiteMinErr = minErr('jqLite');\n\n/**\n * Converts snake_case to camelCase.\n * Also there is special case for Moz prefix starting with upper case letter.\n * @param name Name to normalize\n */\nfunction camelCase(name) {\n  return name.\n    replace(SPECIAL_CHARS_REGEXP, function(_, separator, letter, offset) {\n      return offset ? letter.toUpperCase() : letter;\n    }).\n    replace(MOZ_HACK_REGEXP, 'Moz$1');\n}\n\n/////////////////////////////////////////////\n// jQuery mutation patch\n//\n// In conjunction with bindJQuery intercepts all jQuery's DOM destruction apis and fires a\n// $destroy event on all DOM nodes being removed.\n//\n/////////////////////////////////////////////\n\nfunction jqLitePatchJQueryRemove(name, dispatchThis, filterElems, getterIfNoArguments) {\n  var originalJqFn = jQuery.fn[name];\n  originalJqFn = originalJqFn.$original || originalJqFn;\n  removePatch.$original = originalJqFn;\n  jQuery.fn[name] = removePatch;\n\n  function removePatch(param) {\n    // jshint -W040\n    var list = filterElems && param ? [this.filter(param)] : [this],\n        fireEvent = dispatchThis,\n        set, setIndex, setLength,\n        element, childIndex, childLength, children;\n\n    if (!getterIfNoArguments || param != null) {\n      while(list.length) {\n        set = list.shift();\n        for(setIndex = 0, setLength = set.length; setIndex < setLength; setIndex++) {\n          element = jqLite(set[setIndex]);\n          if (fireEvent) {\n            element.triggerHandler('$destroy');\n          } else {\n            fireEvent = !fireEvent;\n          }\n          for(childIndex = 0, childLength = (children = element.children()).length;\n              childIndex < childLength;\n              childIndex++) {\n            list.push(jQuery(children[childIndex]));\n          }\n        }\n      }\n    }\n    return originalJqFn.apply(this, arguments);\n  }\n}\n\n/////////////////////////////////////////////\nfunction JQLite(element) {\n  if (element instanceof JQLite) {\n    return element;\n  }\n  if (!(this instanceof JQLite)) {\n    if (isString(element) && element.charAt(0) != '<') {\n      throw jqLiteMinErr('nosel', 'Looking up elements via selectors is not supported by jqLite! See: http://docs.angularjs.org/api/angular.element');\n    }\n    return new JQLite(element);\n  }\n\n  if (isString(element)) {\n    var div = document.createElement('div');\n    // Read about the NoScope elements here:\n    // http://msdn.microsoft.com/en-us/library/ms533897(VS.85).aspx\n    div.innerHTML = '<div>&#160;</div>' + element; // IE insanity to make NoScope elements work!\n    div.removeChild(div.firstChild); // remove the superfluous div\n    jqLiteAddNodes(this, div.childNodes);\n    var fragment = jqLite(document.createDocumentFragment());\n    fragment.append(this); // detach the elements from the temporary DOM div.\n  } else {\n    jqLiteAddNodes(this, element);\n  }\n}\n\nfunction jqLiteClone(element) {\n  return element.cloneNode(true);\n}\n\nfunction jqLiteDealoc(element){\n  jqLiteRemoveData(element);\n  for ( var i = 0, children = element.childNodes || []; i < children.length; i++) {\n    jqLiteDealoc(children[i]);\n  }\n}\n\nfunction jqLiteOff(element, type, fn, unsupported) {\n  if (isDefined(unsupported)) throw jqLiteMinErr('offargs', 'jqLite#off() does not support the `selector` argument');\n\n  var events = jqLiteExpandoStore(element, 'events'),\n      handle = jqLiteExpandoStore(element, 'handle');\n\n  if (!handle) return; //no listeners registered\n\n  if (isUndefined(type)) {\n    forEach(events, function(eventHandler, type) {\n      removeEventListenerFn(element, type, eventHandler);\n      delete events[type];\n    });\n  } else {\n    forEach(type.split(' '), function(type) {\n      if (isUndefined(fn)) {\n        removeEventListenerFn(element, type, events[type]);\n        delete events[type];\n      } else {\n        arrayRemove(events[type] || [], fn);\n      }\n    });\n  }\n}\n\nfunction jqLiteRemoveData(element, name) {\n  var expandoId = element[jqName],\n      expandoStore = jqCache[expandoId];\n\n  if (expandoStore) {\n    if (name) {\n      delete jqCache[expandoId].data[name];\n      return;\n    }\n\n    if (expandoStore.handle) {\n      expandoStore.events.$destroy && expandoStore.handle({}, '$destroy');\n      jqLiteOff(element);\n    }\n    delete jqCache[expandoId];\n    element[jqName] = undefined; // ie does not allow deletion of attributes on elements.\n  }\n}\n\nfunction jqLiteExpandoStore(element, key, value) {\n  var expandoId = element[jqName],\n      expandoStore = jqCache[expandoId || -1];\n\n  if (isDefined(value)) {\n    if (!expandoStore) {\n      element[jqName] = expandoId = jqNextId();\n      expandoStore = jqCache[expandoId] = {};\n    }\n    expandoStore[key] = value;\n  } else {\n    return expandoStore && expandoStore[key];\n  }\n}\n\nfunction jqLiteData(element, key, value) {\n  var data = jqLiteExpandoStore(element, 'data'),\n      isSetter = isDefined(value),\n      keyDefined = !isSetter && isDefined(key),\n      isSimpleGetter = keyDefined && !isObject(key);\n\n  if (!data && !isSimpleGetter) {\n    jqLiteExpandoStore(element, 'data', data = {});\n  }\n\n  if (isSetter) {\n    data[key] = value;\n  } else {\n    if (keyDefined) {\n      if (isSimpleGetter) {\n        // don't create data in this case.\n        return data && data[key];\n      } else {\n        extend(data, key);\n      }\n    } else {\n      return data;\n    }\n  }\n}\n\nfunction jqLiteHasClass(element, selector) {\n  if (!element.getAttribute) return false;\n  return ((\" \" + (element.getAttribute('class') || '') + \" \").replace(/[\\n\\t]/g, \" \").\n      indexOf( \" \" + selector + \" \" ) > -1);\n}\n\nfunction jqLiteRemoveClass(element, cssClasses) {\n  if (cssClasses && element.setAttribute) {\n    forEach(cssClasses.split(' '), function(cssClass) {\n      element.setAttribute('class', trim(\n          (\" \" + (element.getAttribute('class') || '') + \" \")\n          .replace(/[\\n\\t]/g, \" \")\n          .replace(\" \" + trim(cssClass) + \" \", \" \"))\n      );\n    });\n  }\n}\n\nfunction jqLiteAddClass(element, cssClasses) {\n  if (cssClasses && element.setAttribute) {\n    var existingClasses = (' ' + (element.getAttribute('class') || '') + ' ')\n                            .replace(/[\\n\\t]/g, \" \");\n\n    forEach(cssClasses.split(' '), function(cssClass) {\n      cssClass = trim(cssClass);\n      if (existingClasses.indexOf(' ' + cssClass + ' ') === -1) {\n        existingClasses += cssClass + ' ';\n      }\n    });\n\n    element.setAttribute('class', trim(existingClasses));\n  }\n}\n\nfunction jqLiteAddNodes(root, elements) {\n  if (elements) {\n    elements = (!elements.nodeName && isDefined(elements.length) && !isWindow(elements))\n      ? elements\n      : [ elements ];\n    for(var i=0; i < elements.length; i++) {\n      root.push(elements[i]);\n    }\n  }\n}\n\nfunction jqLiteController(element, name) {\n  return jqLiteInheritedData(element, '$' + (name || 'ngController' ) + 'Controller');\n}\n\nfunction jqLiteInheritedData(element, name, value) {\n  element = jqLite(element);\n\n  // if element is the document object work with the html element instead\n  // this makes $(document).scope() possible\n  if(element[0].nodeType == 9) {\n    element = element.find('html');\n  }\n  var names = isArray(name) ? name : [name];\n\n  while (element.length) {\n\n    for (var i = 0, ii = names.length; i < ii; i++) {\n      if ((value = element.data(names[i])) !== undefined) return value;\n    }\n    element = element.parent();\n  }\n}\n\n//////////////////////////////////////////\n// Functions which are declared directly.\n//////////////////////////////////////////\nvar JQLitePrototype = JQLite.prototype = {\n  ready: function(fn) {\n    var fired = false;\n\n    function trigger() {\n      if (fired) return;\n      fired = true;\n      fn();\n    }\n\n    // check if document already is loaded\n    if (document.readyState === 'complete'){\n      setTimeout(trigger);\n    } else {\n      this.on('DOMContentLoaded', trigger); // works for modern browsers and IE9\n      // we can not use jqLite since we are not done loading and jQuery could be loaded later.\n      // jshint -W064\n      JQLite(window).on('load', trigger); // fallback to window.onload for others\n      // jshint +W064\n    }\n  },\n  toString: function() {\n    var value = [];\n    forEach(this, function(e){ value.push('' + e);});\n    return '[' + value.join(', ') + ']';\n  },\n\n  eq: function(index) {\n      return (index >= 0) ? jqLite(this[index]) : jqLite(this[this.length + index]);\n  },\n\n  length: 0,\n  push: push,\n  sort: [].sort,\n  splice: [].splice\n};\n\n//////////////////////////////////////////\n// Functions iterating getter/setters.\n// these functions return self on setter and\n// value on get.\n//////////////////////////////////////////\nvar BOOLEAN_ATTR = {};\nforEach('multiple,selected,checked,disabled,readOnly,required,open'.split(','), function(value) {\n  BOOLEAN_ATTR[lowercase(value)] = value;\n});\nvar BOOLEAN_ELEMENTS = {};\nforEach('input,select,option,textarea,button,form,details'.split(','), function(value) {\n  BOOLEAN_ELEMENTS[uppercase(value)] = true;\n});\n\nfunction getBooleanAttrName(element, name) {\n  // check dom last since we will most likely fail on name\n  var booleanAttr = BOOLEAN_ATTR[name.toLowerCase()];\n\n  // booleanAttr is here twice to minimize DOM access\n  return booleanAttr && BOOLEAN_ELEMENTS[element.nodeName] && booleanAttr;\n}\n\nforEach({\n  data: jqLiteData,\n  inheritedData: jqLiteInheritedData,\n\n  scope: function(element) {\n    // Can't use jqLiteData here directly so we stay compatible with jQuery!\n    return jqLite(element).data('$scope') || jqLiteInheritedData(element.parentNode || element, ['$isolateScope', '$scope']);\n  },\n\n  isolateScope: function(element) {\n    // Can't use jqLiteData here directly so we stay compatible with jQuery!\n    return jqLite(element).data('$isolateScope') || jqLite(element).data('$isolateScopeNoTemplate');\n  },\n\n  controller: jqLiteController ,\n\n  injector: function(element) {\n    return jqLiteInheritedData(element, '$injector');\n  },\n\n  removeAttr: function(element,name) {\n    element.removeAttribute(name);\n  },\n\n  hasClass: jqLiteHasClass,\n\n  css: function(element, name, value) {\n    name = camelCase(name);\n\n    if (isDefined(value)) {\n      element.style[name] = value;\n    } else {\n      var val;\n\n      if (msie <= 8) {\n        // this is some IE specific weirdness that jQuery 1.6.4 does not sure why\n        val = element.currentStyle && element.currentStyle[name];\n        if (val === '') val = 'auto';\n      }\n\n      val = val || element.style[name];\n\n      if (msie <= 8) {\n        // jquery weirdness :-/\n        val = (val === '') ? undefined : val;\n      }\n\n      return  val;\n    }\n  },\n\n  attr: function(element, name, value){\n    var lowercasedName = lowercase(name);\n    if (BOOLEAN_ATTR[lowercasedName]) {\n      if (isDefined(value)) {\n        if (!!value) {\n          element[name] = true;\n          element.setAttribute(name, lowercasedName);\n        } else {\n          element[name] = false;\n          element.removeAttribute(lowercasedName);\n        }\n      } else {\n        return (element[name] ||\n                 (element.attributes.getNamedItem(name)|| noop).specified)\n               ? lowercasedName\n               : undefined;\n      }\n    } else if (isDefined(value)) {\n      element.setAttribute(name, value);\n    } else if (element.getAttribute) {\n      // the extra argument \"2\" is to get the right thing for a.href in IE, see jQuery code\n      // some elements (e.g. Document) don't have get attribute, so return undefined\n      var ret = element.getAttribute(name, 2);\n      // normalize non-existing attributes to undefined (as jQuery)\n      return ret === null ? undefined : ret;\n    }\n  },\n\n  prop: function(element, name, value) {\n    if (isDefined(value)) {\n      element[name] = value;\n    } else {\n      return element[name];\n    }\n  },\n\n  text: (function() {\n    var NODE_TYPE_TEXT_PROPERTY = [];\n    if (msie < 9) {\n      NODE_TYPE_TEXT_PROPERTY[1] = 'innerText';    /** Element **/\n      NODE_TYPE_TEXT_PROPERTY[3] = 'nodeValue';    /** Text **/\n    } else {\n      NODE_TYPE_TEXT_PROPERTY[1] =                 /** Element **/\n      NODE_TYPE_TEXT_PROPERTY[3] = 'textContent';  /** Text **/\n    }\n    getText.$dv = '';\n    return getText;\n\n    function getText(element, value) {\n      var textProp = NODE_TYPE_TEXT_PROPERTY[element.nodeType];\n      if (isUndefined(value)) {\n        return textProp ? element[textProp] : '';\n      }\n      element[textProp] = value;\n    }\n  })(),\n\n  val: function(element, value) {\n    if (isUndefined(value)) {\n      if (nodeName_(element) === 'SELECT' && element.multiple) {\n        var result = [];\n        forEach(element.options, function (option) {\n          if (option.selected) {\n            result.push(option.value || option.text);\n          }\n        });\n        return result.length === 0 ? null : result;\n      }\n      return element.value;\n    }\n    element.value = value;\n  },\n\n  html: function(element, value) {\n    if (isUndefined(value)) {\n      return element.innerHTML;\n    }\n    for (var i = 0, childNodes = element.childNodes; i < childNodes.length; i++) {\n      jqLiteDealoc(childNodes[i]);\n    }\n    element.innerHTML = value;\n  }\n}, function(fn, name){\n  /**\n   * Properties: writes return selection, reads return first value\n   */\n  JQLite.prototype[name] = function(arg1, arg2) {\n    var i, key;\n\n    // jqLiteHasClass has only two arguments, but is a getter-only fn, so we need to special-case it\n    // in a way that survives minification.\n    if (((fn.length == 2 && (fn !== jqLiteHasClass && fn !== jqLiteController)) ? arg1 : arg2) === undefined) {\n      if (isObject(arg1)) {\n\n        // we are a write, but the object properties are the key/values\n        for(i=0; i < this.length; i++) {\n          if (fn === jqLiteData) {\n            // data() takes the whole object in jQuery\n            fn(this[i], arg1);\n          } else {\n            for (key in arg1) {\n              fn(this[i], key, arg1[key]);\n            }\n          }\n        }\n        // return self for chaining\n        return this;\n      } else {\n        // we are a read, so read the first child.\n        var value = fn.$dv;\n        // Only if we have $dv do we iterate over all, otherwise it is just the first element.\n        var jj = (value === undefined) ? Math.min(this.length, 1) : this.length;\n        for (var j = 0; j < jj; j++) {\n          var nodeValue = fn(this[j], arg1, arg2);\n          value = value ? value + nodeValue : nodeValue;\n        }\n        return value;\n      }\n    } else {\n      // we are a write, so apply to all children\n      for(i=0; i < this.length; i++) {\n        fn(this[i], arg1, arg2);\n      }\n      // return self for chaining\n      return this;\n    }\n  };\n});\n\nfunction createEventHandler(element, events) {\n  var eventHandler = function (event, type) {\n    if (!event.preventDefault) {\n      event.preventDefault = function() {\n        event.returnValue = false; //ie\n      };\n    }\n\n    if (!event.stopPropagation) {\n      event.stopPropagation = function() {\n        event.cancelBubble = true; //ie\n      };\n    }\n\n    if (!event.target) {\n      event.target = event.srcElement || document;\n    }\n\n    if (isUndefined(event.defaultPrevented)) {\n      var prevent = event.preventDefault;\n      event.preventDefault = function() {\n        event.defaultPrevented = true;\n        prevent.call(event);\n      };\n      event.defaultPrevented = false;\n    }\n\n    event.isDefaultPrevented = function() {\n      return event.defaultPrevented || event.returnValue === false;\n    };\n\n    forEach(events[type || event.type], function(fn) {\n      fn.call(element, event);\n    });\n\n    // Remove monkey-patched methods (IE),\n    // as they would cause memory leaks in IE8.\n    if (msie <= 8) {\n      // IE7/8 does not allow to delete property on native object\n      event.preventDefault = null;\n      event.stopPropagation = null;\n      event.isDefaultPrevented = null;\n    } else {\n      // It shouldn't affect normal browsers (native methods are defined on prototype).\n      delete event.preventDefault;\n      delete event.stopPropagation;\n      delete event.isDefaultPrevented;\n    }\n  };\n  eventHandler.elem = element;\n  return eventHandler;\n}\n\n//////////////////////////////////////////\n// Functions iterating traversal.\n// These functions chain results into a single\n// selector.\n//////////////////////////////////////////\nforEach({\n  removeData: jqLiteRemoveData,\n\n  dealoc: jqLiteDealoc,\n\n  on: function onFn(element, type, fn, unsupported){\n    if (isDefined(unsupported)) throw jqLiteMinErr('onargs', 'jqLite#on() does not support the `selector` or `eventData` parameters');\n\n    var events = jqLiteExpandoStore(element, 'events'),\n        handle = jqLiteExpandoStore(element, 'handle');\n\n    if (!events) jqLiteExpandoStore(element, 'events', events = {});\n    if (!handle) jqLiteExpandoStore(element, 'handle', handle = createEventHandler(element, events));\n\n    forEach(type.split(' '), function(type){\n      var eventFns = events[type];\n\n      if (!eventFns) {\n        if (type == 'mouseenter' || type == 'mouseleave') {\n          var contains = document.body.contains || document.body.compareDocumentPosition ?\n          function( a, b ) {\n            // jshint bitwise: false\n            var adown = a.nodeType === 9 ? a.documentElement : a,\n            bup = b && b.parentNode;\n            return a === bup || !!( bup && bup.nodeType === 1 && (\n              adown.contains ?\n              adown.contains( bup ) :\n              a.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16\n              ));\n            } :\n            function( a, b ) {\n              if ( b ) {\n                while ( (b = b.parentNode) ) {\n                  if ( b === a ) {\n                    return true;\n                  }\n                }\n              }\n              return false;\n            };\n\n          events[type] = [];\n\n          // Refer to jQuery's implementation of mouseenter & mouseleave\n          // Read about mouseenter and mouseleave:\n          // http://www.quirksmode.org/js/events_mouse.html#link8\n          var eventmap = { mouseleave : \"mouseout\", mouseenter : \"mouseover\"};\n\n          onFn(element, eventmap[type], function(event) {\n            var target = this, related = event.relatedTarget;\n            // For mousenter/leave call the handler if related is outside the target.\n            // NB: No relatedTarget if the mouse left/entered the browser window\n            if ( !related || (related !== target && !contains(target, related)) ){\n              handle(event, type);\n            }\n          });\n\n        } else {\n          addEventListenerFn(element, type, handle);\n          events[type] = [];\n        }\n        eventFns = events[type];\n      }\n      eventFns.push(fn);\n    });\n  },\n\n  off: jqLiteOff,\n\n  replaceWith: function(element, replaceNode) {\n    var index, parent = element.parentNode;\n    jqLiteDealoc(element);\n    forEach(new JQLite(replaceNode), function(node){\n      if (index) {\n        parent.insertBefore(node, index.nextSibling);\n      } else {\n        parent.replaceChild(node, element);\n      }\n      index = node;\n    });\n  },\n\n  children: function(element) {\n    var children = [];\n    forEach(element.childNodes, function(element){\n      if (element.nodeType === 1)\n        children.push(element);\n    });\n    return children;\n  },\n\n  contents: function(element) {\n    return element.childNodes || [];\n  },\n\n  append: function(element, node) {\n    forEach(new JQLite(node), function(child){\n      if (element.nodeType === 1 || element.nodeType === 11) {\n        element.appendChild(child);\n      }\n    });\n  },\n\n  prepend: function(element, node) {\n    if (element.nodeType === 1) {\n      var index = element.firstChild;\n      forEach(new JQLite(node), function(child){\n        element.insertBefore(child, index);\n      });\n    }\n  },\n\n  wrap: function(element, wrapNode) {\n    wrapNode = jqLite(wrapNode)[0];\n    var parent = element.parentNode;\n    if (parent) {\n      parent.replaceChild(wrapNode, element);\n    }\n    wrapNode.appendChild(element);\n  },\n\n  remove: function(element) {\n    jqLiteDealoc(element);\n    var parent = element.parentNode;\n    if (parent) parent.removeChild(element);\n  },\n\n  after: function(element, newElement) {\n    var index = element, parent = element.parentNode;\n    forEach(new JQLite(newElement), function(node){\n      parent.insertBefore(node, index.nextSibling);\n      index = node;\n    });\n  },\n\n  addClass: jqLiteAddClass,\n  removeClass: jqLiteRemoveClass,\n\n  toggleClass: function(element, selector, condition) {\n    if (isUndefined(condition)) {\n      condition = !jqLiteHasClass(element, selector);\n    }\n    (condition ? jqLiteAddClass : jqLiteRemoveClass)(element, selector);\n  },\n\n  parent: function(element) {\n    var parent = element.parentNode;\n    return parent && parent.nodeType !== 11 ? parent : null;\n  },\n\n  next: function(element) {\n    if (element.nextElementSibling) {\n      return element.nextElementSibling;\n    }\n\n    // IE8 doesn't have nextElementSibling\n    var elm = element.nextSibling;\n    while (elm != null && elm.nodeType !== 1) {\n      elm = elm.nextSibling;\n    }\n    return elm;\n  },\n\n  find: function(element, selector) {\n    return element.getElementsByTagName(selector);\n  },\n\n  clone: jqLiteClone,\n\n  triggerHandler: function(element, eventName, eventData) {\n    var eventFns = (jqLiteExpandoStore(element, 'events') || {})[eventName];\n\n    eventData = eventData || [];\n\n    var event = [{\n      preventDefault: noop,\n      stopPropagation: noop\n    }];\n\n    forEach(eventFns, function(fn) {\n      fn.apply(element, event.concat(eventData));\n    });\n  }\n}, function(fn, name){\n  /**\n   * chaining functions\n   */\n  JQLite.prototype[name] = function(arg1, arg2, arg3) {\n    var value;\n    for(var i=0; i < this.length; i++) {\n      if (isUndefined(value)) {\n        value = fn(this[i], arg1, arg2, arg3);\n        if (isDefined(value)) {\n          // any function which returns a value needs to be wrapped\n          value = jqLite(value);\n        }\n      } else {\n        jqLiteAddNodes(value, fn(this[i], arg1, arg2, arg3));\n      }\n    }\n    return isDefined(value) ? value : this;\n  };\n\n  // bind legacy bind/unbind to on/off\n  JQLite.prototype.bind = JQLite.prototype.on;\n  JQLite.prototype.unbind = JQLite.prototype.off;\n});\n\n/**\n * Computes a hash of an 'obj'.\n * Hash of a:\n *  string is string\n *  number is number as string\n *  object is either result of calling $$hashKey function on the object or uniquely generated id,\n *         that is also assigned to the $$hashKey property of the object.\n *\n * @param obj\n * @returns {string} hash string such that the same input will have the same hash string.\n *         The resulting string key is in 'type:hashKey' format.\n */\nfunction hashKey(obj) {\n  var objType = typeof obj,\n      key;\n\n  if (objType == 'object' && obj !== null) {\n    if (typeof (key = obj.$$hashKey) == 'function') {\n      // must invoke on object to keep the right this\n      key = obj.$$hashKey();\n    } else if (key === undefined) {\n      key = obj.$$hashKey = nextUid();\n    }\n  } else {\n    key = obj;\n  }\n\n  return objType + ':' + key;\n}\n\n/**\n * HashMap which can use objects as keys\n */\nfunction HashMap(array){\n  forEach(array, this.put, this);\n}\nHashMap.prototype = {\n  /**\n   * Store key value pair\n   * @param key key to store can be any type\n   * @param value value to store can be any type\n   */\n  put: function(key, value) {\n    this[hashKey(key)] = value;\n  },\n\n  /**\n   * @param key\n   * @returns the value for the key\n   */\n  get: function(key) {\n    return this[hashKey(key)];\n  },\n\n  /**\n   * Remove the key/value pair\n   * @param key\n   */\n  remove: function(key) {\n    var value = this[key = hashKey(key)];\n    delete this[key];\n    return value;\n  }\n};\n\n/**\n * @ngdoc function\n * @name angular.injector\n * @function\n *\n * @description\n * Creates an injector function that can be used for retrieving services as well as for\n * dependency injection (see {@link guide/di dependency injection}).\n *\n\n * @param {Array.<string|Function>} modules A list of module functions or their aliases. See\n *        {@link angular.module}. The `ng` module must be explicitly added.\n * @returns {function()} Injector function. See {@link AUTO.$injector $injector}.\n *\n * @example\n * Typical usage\n * <pre>\n *   // create an injector\n *   var $injector = angular.injector(['ng']);\n *\n *   // use the injector to kick off your application\n *   // use the type inference to auto inject arguments, or use implicit injection\n *   $injector.invoke(function($rootScope, $compile, $document){\n *     $compile($document)($rootScope);\n *     $rootScope.$digest();\n *   });\n * </pre>\n */\n\n\n/**\n * @ngdoc overview\n * @name AUTO\n * @description\n *\n * Implicit module which gets automatically added to each {@link AUTO.$injector $injector}.\n */\n\nvar FN_ARGS = /^function\\s*[^\\(]*\\(\\s*([^\\)]*)\\)/m;\nvar FN_ARG_SPLIT = /,/;\nvar FN_ARG = /^\\s*(_?)(\\S+?)\\1\\s*$/;\nvar STRIP_COMMENTS = /((\\/\\/.*$)|(\\/\\*[\\s\\S]*?\\*\\/))/mg;\nvar $injectorMinErr = minErr('$injector');\nfunction annotate(fn) {\n  var $inject,\n      fnText,\n      argDecl,\n      last;\n\n  if (typeof fn == 'function') {\n    if (!($inject = fn.$inject)) {\n      $inject = [];\n      if (fn.length) {\n        fnText = fn.toString().replace(STRIP_COMMENTS, '');\n        argDecl = fnText.match(FN_ARGS);\n        forEach(argDecl[1].split(FN_ARG_SPLIT), function(arg){\n          arg.replace(FN_ARG, function(all, underscore, name){\n            $inject.push(name);\n          });\n        });\n      }\n      fn.$inject = $inject;\n    }\n  } else if (isArray(fn)) {\n    last = fn.length - 1;\n    assertArgFn(fn[last], 'fn');\n    $inject = fn.slice(0, last);\n  } else {\n    assertArgFn(fn, 'fn', true);\n  }\n  return $inject;\n}\n\n///////////////////////////////////////\n\n/**\n * @ngdoc object\n * @name AUTO.$injector\n * @function\n *\n * @description\n *\n * `$injector` is used to retrieve object instances as defined by\n * {@link AUTO.$provide provider}, instantiate types, invoke methods,\n * and load modules.\n *\n * The following always holds true:\n *\n * <pre>\n *   var $injector = angular.injector();\n *   expect($injector.get('$injector')).toBe($injector);\n *   expect($injector.invoke(function($injector){\n *     return $injector;\n *   }).toBe($injector);\n * </pre>\n *\n * # Injection Function Annotation\n *\n * JavaScript does not have annotations, and annotations are needed for dependency injection. The\n * following are all valid ways of annotating function with injection arguments and are equivalent.\n *\n * <pre>\n *   // inferred (only works if code not minified/obfuscated)\n *   $injector.invoke(function(serviceA){});\n *\n *   // annotated\n *   function explicit(serviceA) {};\n *   explicit.$inject = ['serviceA'];\n *   $injector.invoke(explicit);\n *\n *   // inline\n *   $injector.invoke(['serviceA', function(serviceA){}]);\n * </pre>\n *\n * ## Inference\n *\n * In JavaScript calling `toString()` on a function returns the function definition. The definition\n * can then be parsed and the function arguments can be extracted. *NOTE:* This does not work with\n * minification, and obfuscation tools since these tools change the argument names.\n *\n * ## `$inject` Annotation\n * By adding a `$inject` property onto a function the injection parameters can be specified.\n *\n * ## Inline\n * As an array of injection names, where the last item in the array is the function to call.\n */\n\n/**\n * @ngdoc method\n * @name AUTO.$injector#get\n * @methodOf AUTO.$injector\n *\n * @description\n * Return an instance of the service.\n *\n * @param {string} name The name of the instance to retrieve.\n * @return {*} The instance.\n */\n\n/**\n * @ngdoc method\n * @name AUTO.$injector#invoke\n * @methodOf AUTO.$injector\n *\n * @description\n * Invoke the method and supply the method arguments from the `$injector`.\n *\n * @param {!function} fn The function to invoke. Function parameters are injected according to the\n *   {@link guide/di $inject Annotation} rules.\n * @param {Object=} self The `this` for the invoked method.\n * @param {Object=} locals Optional object. If preset then any argument names are read from this\n *                         object first, before the `$injector` is consulted.\n * @returns {*} the value returned by the invoked `fn` function.\n */\n\n/**\n * @ngdoc method\n * @name AUTO.$injector#has\n * @methodOf AUTO.$injector\n *\n * @description\n * Allows the user to query if the particular service exist.\n *\n * @param {string} Name of the service to query.\n * @returns {boolean} returns true if injector has given service.\n */\n\n/**\n * @ngdoc method\n * @name AUTO.$injector#instantiate\n * @methodOf AUTO.$injector\n * @description\n * Create a new instance of JS type. The method takes a constructor function invokes the new\n * operator and supplies all of the arguments to the constructor function as specified by the\n * constructor annotation.\n *\n * @param {function} Type Annotated constructor function.\n * @param {Object=} locals Optional object. If preset then any argument names are read from this\n * object first, before the `$injector` is consulted.\n * @returns {Object} new instance of `Type`.\n */\n\n/**\n * @ngdoc method\n * @name AUTO.$injector#annotate\n * @methodOf AUTO.$injector\n *\n * @description\n * Returns an array of service names which the function is requesting for injection. This API is\n * used by the injector to determine which services need to be injected into the function when the\n * function is invoked. There are three ways in which the function can be annotated with the needed\n * dependencies.\n *\n * # Argument names\n *\n * The simplest form is to extract the dependencies from the arguments of the function. This is done\n * by converting the function into a string using `toString()` method and extracting the argument\n * names.\n * <pre>\n *   // Given\n *   function MyController($scope, $route) {\n *     // ...\n *   }\n *\n *   // Then\n *   expect(injector.annotate(MyController)).toEqual(['$scope', '$route']);\n * </pre>\n *\n * This method does not work with code minification / obfuscation. For this reason the following\n * annotation strategies are supported.\n *\n * # The `$inject` property\n *\n * If a function has an `$inject` property and its value is an array of strings, then the strings\n * represent names of services to be injected into the function.\n * <pre>\n *   // Given\n *   var MyController = function(obfuscatedScope, obfuscatedRoute) {\n *     // ...\n *   }\n *   // Define function dependencies\n *   MyController.$inject = ['$scope', '$route'];\n *\n *   // Then\n *   expect(injector.annotate(MyController)).toEqual(['$scope', '$route']);\n * </pre>\n *\n * # The array notation\n *\n * It is often desirable to inline Injected functions and that's when setting the `$inject` property\n * is very inconvenient. In these situations using the array notation to specify the dependencies in\n * a way that survives minification is a better choice:\n *\n * <pre>\n *   // We wish to write this (not minification / obfuscation safe)\n *   injector.invoke(function($compile, $rootScope) {\n *     // ...\n *   });\n *\n *   // We are forced to write break inlining\n *   var tmpFn = function(obfuscatedCompile, obfuscatedRootScope) {\n *     // ...\n *   };\n *   tmpFn.$inject = ['$compile', '$rootScope'];\n *   injector.invoke(tmpFn);\n *\n *   // To better support inline function the inline annotation is supported\n *   injector.invoke(['$compile', '$rootScope', function(obfCompile, obfRootScope) {\n *     // ...\n *   }]);\n *\n *   // Therefore\n *   expect(injector.annotate(\n *      ['$compile', '$rootScope', function(obfus_$compile, obfus_$rootScope) {}])\n *    ).toEqual(['$compile', '$rootScope']);\n * </pre>\n *\n * @param {function|Array.<string|Function>} fn Function for which dependent service names need to\n * be retrieved as described above.\n *\n * @returns {Array.<string>} The names of the services which the function requires.\n */\n\n\n\n\n/**\n * @ngdoc object\n * @name AUTO.$provide\n *\n * @description\n *\n * The {@link AUTO.$provide $provide} service has a number of methods for registering components\n * with the {@link AUTO.$injector $injector}. Many of these functions are also exposed on\n * {@link angular.Module}.\n *\n * An Angular **service** is a singleton object created by a **service factory**.  These **service\n * factories** are functions which, in turn, are created by a **service provider**.\n * The **service providers** are constructor functions. When instantiated they must contain a\n * property called `$get`, which holds the **service factory** function.\n *\n * When you request a service, the {@link AUTO.$injector $injector} is responsible for finding the\n * correct **service provider**, instantiating it and then calling its `$get` **service factory**\n * function to get the instance of the **service**.\n *\n * Often services have no configuration options and there is no need to add methods to the service\n * provider.  The provider will be no more than a constructor function with a `$get` property. For\n * these cases the {@link AUTO.$provide $provide} service has additional helper methods to register\n * services without specifying a provider.\n *\n * * {@link AUTO.$provide#methods_provider provider(provider)} - registers a **service provider** with the\n *     {@link AUTO.$injector $injector}\n * * {@link AUTO.$provide#methods_constant constant(obj)} - registers a value/object that can be accessed by\n *     providers and services.\n * * {@link AUTO.$provide#methods_value value(obj)} - registers a value/object that can only be accessed by\n *     services, not providers.\n * * {@link AUTO.$provide#methods_factory factory(fn)} - registers a service **factory function**, `fn`,\n *     that will be wrapped in a **service provider** object, whose `$get` property will contain the\n *     given factory function.\n * * {@link AUTO.$provide#methods_service service(class)} - registers a **constructor function**, `class` that\n *     that will be wrapped in a **service provider** object, whose `$get` property will instantiate\n *      a new object using the given constructor function.\n *\n * See the individual methods for more information and examples.\n */\n\n/**\n * @ngdoc method\n * @name AUTO.$provide#provider\n * @methodOf AUTO.$provide\n * @description\n *\n * Register a **provider function** with the {@link AUTO.$injector $injector}. Provider functions\n * are constructor functions, whose instances are responsible for \"providing\" a factory for a\n * service.\n *\n * Service provider names start with the name of the service they provide followed by `Provider`.\n * For example, the {@link ng.$log $log} service has a provider called\n * {@link ng.$logProvider $logProvider}.\n *\n * Service provider objects can have additional methods which allow configuration of the provider\n * and its service. Importantly, you can configure what kind of service is created by the `$get`\n * method, or how that service will act. For example, the {@link ng.$logProvider $logProvider} has a\n * method {@link ng.$logProvider#debugEnabled debugEnabled}\n * which lets you specify whether the {@link ng.$log $log} service will log debug messages to the\n * console or not.\n *\n * @param {string} name The name of the instance. NOTE: the provider will be available under `name +\n                        'Provider'` key.\n * @param {(Object|function())} provider If the provider is:\n *\n *   - `Object`: then it should have a `$get` method. The `$get` method will be invoked using\n *               {@link AUTO.$injector#invoke $injector.invoke()} when an instance needs to be\n *               created.\n *   - `Constructor`: a new instance of the provider will be created using\n *               {@link AUTO.$injector#instantiate $injector.instantiate()}, then treated as\n *               `object`.\n *\n * @returns {Object} registered provider instance\n\n * @example\n *\n * The following example shows how to create a simple event tracking service and register it using\n * {@link AUTO.$provide#methods_provider $provide.provider()}.\n *\n * <pre>\n *  // Define the eventTracker provider\n *  function EventTrackerProvider() {\n *    var trackingUrl = '/track';\n *\n *    // A provider method for configuring where the tracked events should been saved\n *    this.setTrackingUrl = function(url) {\n *      trackingUrl = url;\n *    };\n *\n *    // The service factory function\n *    this.$get = ['$http', function($http) {\n *      var trackedEvents = {};\n *      return {\n *        // Call this to track an event\n *        event: function(event) {\n *          var count = trackedEvents[event] || 0;\n *          count += 1;\n *          trackedEvents[event] = count;\n *          return count;\n *        },\n *        // Call this to save the tracked events to the trackingUrl\n *        save: function() {\n *          $http.post(trackingUrl, trackedEvents);\n *        }\n *      };\n *    }];\n *  }\n *\n *  describe('eventTracker', function() {\n *    var postSpy;\n *\n *    beforeEach(module(function($provide) {\n *      // Register the eventTracker provider\n *      $provide.provider('eventTracker', EventTrackerProvider);\n *    }));\n *\n *    beforeEach(module(function(eventTrackerProvider) {\n *      // Configure eventTracker provider\n *      eventTrackerProvider.setTrackingUrl('/custom-track');\n *    }));\n *\n *    it('tracks events', inject(function(eventTracker) {\n *      expect(eventTracker.event('login')).toEqual(1);\n *      expect(eventTracker.event('login')).toEqual(2);\n *    }));\n *\n *    it('saves to the tracking url', inject(function(eventTracker, $http) {\n *      postSpy = spyOn($http, 'post');\n *      eventTracker.event('login');\n *      eventTracker.save();\n *      expect(postSpy).toHaveBeenCalled();\n *      expect(postSpy.mostRecentCall.args[0]).not.toEqual('/track');\n *      expect(postSpy.mostRecentCall.args[0]).toEqual('/custom-track');\n *      expect(postSpy.mostRecentCall.args[1]).toEqual({ 'login': 1 });\n *    }));\n *  });\n * </pre>\n */\n\n/**\n * @ngdoc method\n * @name AUTO.$provide#factory\n * @methodOf AUTO.$provide\n * @description\n *\n * Register a **service factory**, which will be called to return the service instance.\n * This is short for registering a service where its provider consists of only a `$get` property,\n * which is the given service factory function.\n * You should use {@link AUTO.$provide#factory $provide.factory(getFn)} if you do not need to\n * configure your service in a provider.\n *\n * @param {string} name The name of the instance.\n * @param {function()} $getFn The $getFn for the instance creation. Internally this is a short hand\n *                            for `$provide.provider(name, {$get: $getFn})`.\n * @returns {Object} registered provider instance\n *\n * @example\n * Here is an example of registering a service\n * <pre>\n *   $provide.factory('ping', ['$http', function($http) {\n *     return function ping() {\n *       return $http.send('/ping');\n *     };\n *   }]);\n * </pre>\n * You would then inject and use this service like this:\n * <pre>\n *   someModule.controller('Ctrl', ['ping', function(ping) {\n *     ping();\n *   }]);\n * </pre>\n */\n\n\n/**\n * @ngdoc method\n * @name AUTO.$provide#service\n * @methodOf AUTO.$provide\n * @description\n *\n * Register a **service constructor**, which will be invoked with `new` to create the service\n * instance.\n * This is short for registering a service where its provider's `$get` property is the service\n * constructor function that will be used to instantiate the service instance.\n *\n * You should use {@link AUTO.$provide#methods_service $provide.service(class)} if you define your service\n * as a type/class. This is common when using {@link http://coffeescript.org CoffeeScript}.\n *\n * @param {string} name The name of the instance.\n * @param {Function} constructor A class (constructor function) that will be instantiated.\n * @returns {Object} registered provider instance\n *\n * @example\n * Here is an example of registering a service using\n * {@link AUTO.$provide#methods_service $provide.service(class)} that is defined as a CoffeeScript class.\n * <pre>\n *   class Ping\n *     constructor: (@$http)->\n *     send: ()=>\n *       @$http.get('/ping')\n *\n *   $provide.service('ping', ['$http', Ping])\n * </pre>\n * You would then inject and use this service like this:\n * <pre>\n *   someModule.controller 'Ctrl', ['ping', (ping)->\n *     ping.send()\n *   ]\n * </pre>\n */\n\n\n/**\n * @ngdoc method\n * @name AUTO.$provide#value\n * @methodOf AUTO.$provide\n * @description\n *\n * Register a **value service** with the {@link AUTO.$injector $injector}, such as a string, a\n * number, an array, an object or a function.  This is short for registering a service where its\n * provider's `$get` property is a factory function that takes no arguments and returns the **value\n * service**.\n *\n * Value services are similar to constant services, except that they cannot be injected into a\n * module configuration function (see {@link angular.Module#config}) but they can be overridden by\n * an Angular\n * {@link AUTO.$provide#decorator decorator}.\n *\n * @param {string} name The name of the instance.\n * @param {*} value The value.\n * @returns {Object} registered provider instance\n *\n * @example\n * Here are some examples of creating value services.\n * <pre>\n *   $provide.constant('ADMIN_USER', 'admin');\n *\n *   $provide.constant('RoleLookup', { admin: 0, writer: 1, reader: 2 });\n *\n *   $provide.constant('halfOf', function(value) {\n *     return value / 2;\n *   });\n * </pre>\n */\n\n\n/**\n * @ngdoc method\n * @name AUTO.$provide#constant\n * @methodOf AUTO.$provide\n * @description\n *\n * Register a **constant service**, such as a string, a number, an array, an object or a function,\n * with the {@link AUTO.$injector $injector}. Unlike {@link AUTO.$provide#value value} it can be\n * injected into a module configuration function (see {@link angular.Module#config}) and it cannot\n * be overridden by an Angular {@link AUTO.$provide#decorator decorator}.\n *\n * @param {string} name The name of the constant.\n * @param {*} value The constant value.\n * @returns {Object} registered instance\n *\n * @example\n * Here a some examples of creating constants:\n * <pre>\n *   $provide.constant('SHARD_HEIGHT', 306);\n *\n *   $provide.constant('MY_COLOURS', ['red', 'blue', 'grey']);\n *\n *   $provide.constant('double', function(value) {\n *     return value * 2;\n *   });\n * </pre>\n */\n\n\n/**\n * @ngdoc method\n * @name AUTO.$provide#decorator\n * @methodOf AUTO.$provide\n * @description\n *\n * Register a **service decorator** with the {@link AUTO.$injector $injector}. A service decorator\n * intercepts the creation of a service, allowing it to override or modify the behaviour of the\n * service. The object returned by the decorator may be the original service, or a new service\n * object which replaces or wraps and delegates to the original service.\n *\n * @param {string} name The name of the service to decorate.\n * @param {function()} decorator This function will be invoked when the service needs to be\n *    instantiated and should return the decorated service instance. The function is called using\n *    the {@link AUTO.$injector#invoke injector.invoke} method and is therefore fully injectable.\n *    Local injection arguments:\n *\n *    * `$delegate` - The original service instance, which can be monkey patched, configured,\n *      decorated or delegated to.\n *\n * @example\n * Here we decorate the {@link ng.$log $log} service to convert warnings to errors by intercepting\n * calls to {@link ng.$log#error $log.warn()}.\n * <pre>\n *   $provider.decorator('$log', ['$delegate', function($delegate) {\n *     $delegate.warn = $delegate.error;\n *     return $delegate;\n *   }]);\n * </pre>\n */\n\n\nfunction createInjector(modulesToLoad) {\n  var INSTANTIATING = {},\n      providerSuffix = 'Provider',\n      path = [],\n      loadedModules = new HashMap(),\n      providerCache = {\n        $provide: {\n            provider: supportObject(provider),\n            factory: supportObject(factory),\n            service: supportObject(service),\n            value: supportObject(value),\n            constant: supportObject(constant),\n            decorator: decorator\n          }\n      },\n      providerInjector = (providerCache.$injector =\n          createInternalInjector(providerCache, function() {\n            throw $injectorMinErr('unpr', \"Unknown provider: {0}\", path.join(' <- '));\n          })),\n      instanceCache = {},\n      instanceInjector = (instanceCache.$injector =\n          createInternalInjector(instanceCache, function(servicename) {\n            var provider = providerInjector.get(servicename + providerSuffix);\n            return instanceInjector.invoke(provider.$get, provider);\n          }));\n\n\n  forEach(loadModules(modulesToLoad), function(fn) { instanceInjector.invoke(fn || noop); });\n\n  return instanceInjector;\n\n  ////////////////////////////////////\n  // $provider\n  ////////////////////////////////////\n\n  function supportObject(delegate) {\n    return function(key, value) {\n      if (isObject(key)) {\n        forEach(key, reverseParams(delegate));\n      } else {\n        return delegate(key, value);\n      }\n    };\n  }\n\n  function provider(name, provider_) {\n    assertNotHasOwnProperty(name, 'service');\n    if (isFunction(provider_) || isArray(provider_)) {\n      provider_ = providerInjector.instantiate(provider_);\n    }\n    if (!provider_.$get) {\n      throw $injectorMinErr('pget', \"Provider '{0}' must define $get factory method.\", name);\n    }\n    return providerCache[name + providerSuffix] = provider_;\n  }\n\n  function factory(name, factoryFn) { return provider(name, { $get: factoryFn }); }\n\n  function service(name, constructor) {\n    return factory(name, ['$injector', function($injector) {\n      return $injector.instantiate(constructor);\n    }]);\n  }\n\n  function value(name, val) { return factory(name, valueFn(val)); }\n\n  function constant(name, value) {\n    assertNotHasOwnProperty(name, 'constant');\n    providerCache[name] = value;\n    instanceCache[name] = value;\n  }\n\n  function decorator(serviceName, decorFn) {\n    var origProvider = providerInjector.get(serviceName + providerSuffix),\n        orig$get = origProvider.$get;\n\n    origProvider.$get = function() {\n      var origInstance = instanceInjector.invoke(orig$get, origProvider);\n      return instanceInjector.invoke(decorFn, null, {$delegate: origInstance});\n    };\n  }\n\n  ////////////////////////////////////\n  // Module Loading\n  ////////////////////////////////////\n  function loadModules(modulesToLoad){\n    var runBlocks = [], moduleFn, invokeQueue, i, ii;\n    forEach(modulesToLoad, function(module) {\n      if (loadedModules.get(module)) return;\n      loadedModules.put(module, true);\n\n      try {\n        if (isString(module)) {\n          moduleFn = angularModule(module);\n          runBlocks = runBlocks.concat(loadModules(moduleFn.requires)).concat(moduleFn._runBlocks);\n\n          for(invokeQueue = moduleFn._invokeQueue, i = 0, ii = invokeQueue.length; i < ii; i++) {\n            var invokeArgs = invokeQueue[i],\n                provider = providerInjector.get(invokeArgs[0]);\n\n            provider[invokeArgs[1]].apply(provider, invokeArgs[2]);\n          }\n        } else if (isFunction(module)) {\n            runBlocks.push(providerInjector.invoke(module));\n        } else if (isArray(module)) {\n            runBlocks.push(providerInjector.invoke(module));\n        } else {\n          assertArgFn(module, 'module');\n        }\n      } catch (e) {\n        if (isArray(module)) {\n          module = module[module.length - 1];\n        }\n        if (e.message && e.stack && e.stack.indexOf(e.message) == -1) {\n          // Safari & FF's stack traces don't contain error.message content\n          // unlike those of Chrome and IE\n          // So if stack doesn't contain message, we create a new string that contains both.\n          // Since error.stack is read-only in Safari, I'm overriding e and not e.stack here.\n          /* jshint -W022 */\n          e = e.message + '\\n' + e.stack;\n        }\n        throw $injectorMinErr('modulerr', \"Failed to instantiate module {0} due to:\\n{1}\",\n                  module, e.stack || e.message || e);\n      }\n    });\n    return runBlocks;\n  }\n\n  ////////////////////////////////////\n  // internal Injector\n  ////////////////////////////////////\n\n  function createInternalInjector(cache, factory) {\n\n    function getService(serviceName) {\n      if (cache.hasOwnProperty(serviceName)) {\n        if (cache[serviceName] === INSTANTIATING) {\n          throw $injectorMinErr('cdep', 'Circular dependency found: {0}', path.join(' <- '));\n        }\n        return cache[serviceName];\n      } else {\n        try {\n          path.unshift(serviceName);\n          cache[serviceName] = INSTANTIATING;\n          return cache[serviceName] = factory(serviceName);\n        } finally {\n          path.shift();\n        }\n      }\n    }\n\n    function invoke(fn, self, locals){\n      var args = [],\n          $inject = annotate(fn),\n          length, i,\n          key;\n\n      for(i = 0, length = $inject.length; i < length; i++) {\n        key = $inject[i];\n        if (typeof key !== 'string') {\n          throw $injectorMinErr('itkn',\n                  'Incorrect injection token! Expected service name as string, got {0}', key);\n        }\n        args.push(\n          locals && locals.hasOwnProperty(key)\n          ? locals[key]\n          : getService(key)\n        );\n      }\n      if (!fn.$inject) {\n        // this means that we must be an array.\n        fn = fn[length];\n      }\n\n\n      // Performance optimization: http://jsperf.com/apply-vs-call-vs-invoke\n      switch (self ? -1 : args.length) {\n        case  0: return fn();\n        case  1: return fn(args[0]);\n        case  2: return fn(args[0], args[1]);\n        case  3: return fn(args[0], args[1], args[2]);\n        case  4: return fn(args[0], args[1], args[2], args[3]);\n        case  5: return fn(args[0], args[1], args[2], args[3], args[4]);\n        case  6: return fn(args[0], args[1], args[2], args[3], args[4], args[5]);\n        case  7: return fn(args[0], args[1], args[2], args[3], args[4], args[5], args[6]);\n        case  8: return fn(args[0], args[1], args[2], args[3], args[4], args[5], args[6], args[7]);\n        case  9: return fn(args[0], args[1], args[2], args[3], args[4], args[5], args[6], args[7],\n          args[8]);\n        case 10: return fn(args[0], args[1], args[2], args[3], args[4], args[5], args[6], args[7],\n          args[8], args[9]);\n        default: return fn.apply(self, args);\n      }\n    }\n\n    function instantiate(Type, locals) {\n      var Constructor = function() {},\n          instance, returnedValue;\n\n      // Check if Type is annotated and use just the given function at n-1 as parameter\n      // e.g. someModule.factory('greeter', ['$window', function(renamed$window) {}]);\n      Constructor.prototype = (isArray(Type) ? Type[Type.length - 1] : Type).prototype;\n      instance = new Constructor();\n      returnedValue = invoke(Type, instance, locals);\n\n      return isObject(returnedValue) || isFunction(returnedValue) ? returnedValue : instance;\n    }\n\n    return {\n      invoke: invoke,\n      instantiate: instantiate,\n      get: getService,\n      annotate: annotate,\n      has: function(name) {\n        return providerCache.hasOwnProperty(name + providerSuffix) || cache.hasOwnProperty(name);\n      }\n    };\n  }\n}\n\n/**\n * @ngdoc function\n * @name ng.$anchorScroll\n * @requires $window\n * @requires $location\n * @requires $rootScope\n *\n * @description\n * When called, it checks current value of `$location.hash()` and scroll to related element,\n * according to rules specified in\n * {@link http://dev.w3.org/html5/spec/Overview.html#the-indicated-part-of-the-document Html5 spec}.\n *\n * It also watches the `$location.hash()` and scrolls whenever it changes to match any anchor.\n * This can be disabled by calling `$anchorScrollProvider.disableAutoScrolling()`.\n * \n * @example\n   <example>\n     <file name=\"index.html\">\n       <div id=\"scrollArea\" ng-controller=\"ScrollCtrl\">\n         <a ng-click=\"gotoBottom()\">Go to bottom</a>\n         <a id=\"bottom\"></a> You're at the bottom!\n       </div>\n     </file>\n     <file name=\"script.js\">\n       function ScrollCtrl($scope, $location, $anchorScroll) {\n         $scope.gotoBottom = function (){\n           // set the location.hash to the id of\n           // the element you wish to scroll to.\n           $location.hash('bottom');\n           \n           // call $anchorScroll()\n           $anchorScroll();\n         }\n       }\n     </file>\n     <file name=\"style.css\">\n       #scrollArea {\n         height: 350px;\n         overflow: auto;\n       }\n\n       #bottom {\n         display: block;\n         margin-top: 2000px;\n       }\n     </file>\n   </example>\n */\nfunction $AnchorScrollProvider() {\n\n  var autoScrollingEnabled = true;\n\n  this.disableAutoScrolling = function() {\n    autoScrollingEnabled = false;\n  };\n\n  this.$get = ['$window', '$location', '$rootScope', function($window, $location, $rootScope) {\n    var document = $window.document;\n\n    // helper function to get first anchor from a NodeList\n    // can't use filter.filter, as it accepts only instances of Array\n    // and IE can't convert NodeList to an array using [].slice\n    // TODO(vojta): use filter if we change it to accept lists as well\n    function getFirstAnchor(list) {\n      var result = null;\n      forEach(list, function(element) {\n        if (!result && lowercase(element.nodeName) === 'a') result = element;\n      });\n      return result;\n    }\n\n    function scroll() {\n      var hash = $location.hash(), elm;\n\n      // empty hash, scroll to the top of the page\n      if (!hash) $window.scrollTo(0, 0);\n\n      // element with given id\n      else if ((elm = document.getElementById(hash))) elm.scrollIntoView();\n\n      // first anchor with given name :-D\n      else if ((elm = getFirstAnchor(document.getElementsByName(hash)))) elm.scrollIntoView();\n\n      // no element and hash == 'top', scroll to the top of the page\n      else if (hash === 'top') $window.scrollTo(0, 0);\n    }\n\n    // does not scroll when user clicks on anchor link that is currently on\n    // (no url change, no $location.hash() change), browser native does scroll\n    if (autoScrollingEnabled) {\n      $rootScope.$watch(function autoScrollWatch() {return $location.hash();},\n        function autoScrollWatchAction() {\n          $rootScope.$evalAsync(scroll);\n        });\n    }\n\n    return scroll;\n  }];\n}\n\nvar $animateMinErr = minErr('$animate');\n\n/**\n * @ngdoc object\n * @name ng.$animateProvider\n *\n * @description\n * Default implementation of $animate that doesn't perform any animations, instead just\n * synchronously performs DOM\n * updates and calls done() callbacks.\n *\n * In order to enable animations the ngAnimate module has to be loaded.\n *\n * To see the functional implementation check out src/ngAnimate/animate.js\n */\nvar $AnimateProvider = ['$provide', function($provide) {\n\n  \n  this.$$selectors = {};\n\n\n  /**\n   * @ngdoc function\n   * @name ng.$animateProvider#register\n   * @methodOf ng.$animateProvider\n   *\n   * @description\n   * Registers a new injectable animation factory function. The factory function produces the\n   * animation object which contains callback functions for each event that is expected to be\n   * animated.\n   *\n   *   * `eventFn`: `function(Element, doneFunction)` The element to animate, the `doneFunction`\n   *   must be called once the element animation is complete. If a function is returned then the\n   *   animation service will use this function to cancel the animation whenever a cancel event is\n   *   triggered.\n   *\n   *\n   *<pre>\n   *   return {\n     *     eventFn : function(element, done) {\n     *       //code to run the animation\n     *       //once complete, then run done()\n     *       return function cancellationFunction() {\n     *         //code to cancel the animation\n     *       }\n     *     }\n     *   }\n   *</pre>\n   *\n   * @param {string} name The name of the animation.\n   * @param {function} factory The factory function that will be executed to return the animation\n   *                           object.\n   */\n  this.register = function(name, factory) {\n    var key = name + '-animation';\n    if (name && name.charAt(0) != '.') throw $animateMinErr('notcsel',\n        \"Expecting class selector starting with '.' got '{0}'.\", name);\n    this.$$selectors[name.substr(1)] = key;\n    $provide.factory(key, factory);\n  };\n\n  this.$get = ['$timeout', function($timeout) {\n\n    /**\n     *\n     * @ngdoc object\n     * @name ng.$animate\n     * @description The $animate service provides rudimentary DOM manipulation functions to\n     * insert, remove and move elements within the DOM, as well as adding and removing classes.\n     * This service is the core service used by the ngAnimate $animator service which provides\n     * high-level animation hooks for CSS and JavaScript.\n     *\n     * $animate is available in the AngularJS core, however, the ngAnimate module must be included\n     * to enable full out animation support. Otherwise, $animate will only perform simple DOM\n     * manipulation operations.\n     *\n     * To learn more about enabling animation support, click here to visit the {@link ngAnimate\n     * ngAnimate module page} as well as the {@link ngAnimate.$animate ngAnimate $animate service\n     * page}.\n     */\n    return {\n\n      /**\n       *\n       * @ngdoc function\n       * @name ng.$animate#enter\n       * @methodOf ng.$animate\n       * @function\n       * @description Inserts the element into the DOM either after the `after` element or within\n       *   the `parent` element. Once complete, the done() callback will be fired (if provided).\n       * @param {jQuery/jqLite element} element the element which will be inserted into the DOM\n       * @param {jQuery/jqLite element} parent the parent element which will append the element as\n       *   a child (if the after element is not present)\n       * @param {jQuery/jqLite element} after the sibling element which will append the element\n       *   after itself\n       * @param {function=} done callback function that will be called after the element has been\n       *   inserted into the DOM\n       */\n      enter : function(element, parent, after, done) {\n        var afterNode = after && after[after.length - 1];\n        var parentNode = parent && parent[0] || afterNode && afterNode.parentNode;\n        // IE does not like undefined so we have to pass null.\n        var afterNextSibling = (afterNode && afterNode.nextSibling) || null;\n        forEach(element, function(node) {\n          parentNode.insertBefore(node, afterNextSibling);\n        });\n        done && $timeout(done, 0, false);\n      },\n\n      /**\n       *\n       * @ngdoc function\n       * @name ng.$animate#leave\n       * @methodOf ng.$animate\n       * @function\n       * @description Removes the element from the DOM. Once complete, the done() callback will be\n       *   fired (if provided).\n       * @param {jQuery/jqLite element} element the element which will be removed from the DOM\n       * @param {function=} done callback function that will be called after the element has been\n       *   removed from the DOM\n       */\n      leave : function(element, done) {\n        element.remove();\n        done && $timeout(done, 0, false);\n      },\n\n      /**\n       *\n       * @ngdoc function\n       * @name ng.$animate#move\n       * @methodOf ng.$animate\n       * @function\n       * @description Moves the position of the provided element within the DOM to be placed\n       * either after the `after` element or inside of the `parent` element. Once complete, the\n       * done() callback will be fired (if provided).\n       * \n       * @param {jQuery/jqLite element} element the element which will be moved around within the\n       *   DOM\n       * @param {jQuery/jqLite element} parent the parent element where the element will be\n       *   inserted into (if the after element is not present)\n       * @param {jQuery/jqLite element} after the sibling element where the element will be\n       *   positioned next to\n       * @param {function=} done the callback function (if provided) that will be fired after the\n       *   element has been moved to its new position\n       */\n      move : function(element, parent, after, done) {\n        // Do not remove element before insert. Removing will cause data associated with the\n        // element to be dropped. Insert will implicitly do the remove.\n        this.enter(element, parent, after, done);\n      },\n\n      /**\n       *\n       * @ngdoc function\n       * @name ng.$animate#addClass\n       * @methodOf ng.$animate\n       * @function\n       * @description Adds the provided className CSS class value to the provided element. Once\n       * complete, the done() callback will be fired (if provided).\n       * @param {jQuery/jqLite element} element the element which will have the className value\n       *   added to it\n       * @param {string} className the CSS class which will be added to the element\n       * @param {function=} done the callback function (if provided) that will be fired after the\n       *   className value has been added to the element\n       */\n      addClass : function(element, className, done) {\n        className = isString(className) ?\n                      className :\n                      isArray(className) ? className.join(' ') : '';\n        forEach(element, function (element) {\n          jqLiteAddClass(element, className);\n        });\n        done && $timeout(done, 0, false);\n      },\n\n      /**\n       *\n       * @ngdoc function\n       * @name ng.$animate#removeClass\n       * @methodOf ng.$animate\n       * @function\n       * @description Removes the provided className CSS class value from the provided element.\n       * Once complete, the done() callback will be fired (if provided).\n       * @param {jQuery/jqLite element} element the element which will have the className value\n       *   removed from it\n       * @param {string} className the CSS class which will be removed from the element\n       * @param {function=} done the callback function (if provided) that will be fired after the\n       *   className value has been removed from the element\n       */\n      removeClass : function(element, className, done) {\n        className = isString(className) ?\n                      className :\n                      isArray(className) ? className.join(' ') : '';\n        forEach(element, function (element) {\n          jqLiteRemoveClass(element, className);\n        });\n        done && $timeout(done, 0, false);\n      },\n\n      enabled : noop\n    };\n  }];\n}];\n\n/**\n * ! This is a private undocumented service !\n *\n * @name ng.$browser\n * @requires $log\n * @description\n * This object has two goals:\n *\n * - hide all the global state in the browser caused by the window object\n * - abstract away all the browser specific features and inconsistencies\n *\n * For tests we provide {@link ngMock.$browser mock implementation} of the `$browser`\n * service, which can be used for convenient testing of the application without the interaction with\n * the real browser apis.\n */\n/**\n * @param {object} window The global window object.\n * @param {object} document jQuery wrapped document.\n * @param {function()} XHR XMLHttpRequest constructor.\n * @param {object} $log console.log or an object with the same interface.\n * @param {object} $sniffer $sniffer service\n */\nfunction Browser(window, document, $log, $sniffer) {\n  var self = this,\n      rawDocument = document[0],\n      location = window.location,\n      history = window.history,\n      setTimeout = window.setTimeout,\n      clearTimeout = window.clearTimeout,\n      pendingDeferIds = {};\n\n  self.isMock = false;\n\n  var outstandingRequestCount = 0;\n  var outstandingRequestCallbacks = [];\n\n  // TODO(vojta): remove this temporary api\n  self.$$completeOutstandingRequest = completeOutstandingRequest;\n  self.$$incOutstandingRequestCount = function() { outstandingRequestCount++; };\n\n  /**\n   * Executes the `fn` function(supports currying) and decrements the `outstandingRequestCallbacks`\n   * counter. If the counter reaches 0, all the `outstandingRequestCallbacks` are executed.\n   */\n  function completeOutstandingRequest(fn) {\n    try {\n      fn.apply(null, sliceArgs(arguments, 1));\n    } finally {\n      outstandingRequestCount--;\n      if (outstandingRequestCount === 0) {\n        while(outstandingRequestCallbacks.length) {\n          try {\n            outstandingRequestCallbacks.pop()();\n          } catch (e) {\n            $log.error(e);\n          }\n        }\n      }\n    }\n  }\n\n  /**\n   * @private\n   * Note: this method is used only by scenario runner\n   * TODO(vojta): prefix this method with $$ ?\n   * @param {function()} callback Function that will be called when no outstanding request\n   */\n  self.notifyWhenNoOutstandingRequests = function(callback) {\n    // force browser to execute all pollFns - this is needed so that cookies and other pollers fire\n    // at some deterministic time in respect to the test runner's actions. Leaving things up to the\n    // regular poller would result in flaky tests.\n    forEach(pollFns, function(pollFn){ pollFn(); });\n\n    if (outstandingRequestCount === 0) {\n      callback();\n    } else {\n      outstandingRequestCallbacks.push(callback);\n    }\n  };\n\n  //////////////////////////////////////////////////////////////\n  // Poll Watcher API\n  //////////////////////////////////////////////////////////////\n  var pollFns = [],\n      pollTimeout;\n\n  /**\n   * @name ng.$browser#addPollFn\n   * @methodOf ng.$browser\n   *\n   * @param {function()} fn Poll function to add\n   *\n   * @description\n   * Adds a function to the list of functions that poller periodically executes,\n   * and starts polling if not started yet.\n   *\n   * @returns {function()} the added function\n   */\n  self.addPollFn = function(fn) {\n    if (isUndefined(pollTimeout)) startPoller(100, setTimeout);\n    pollFns.push(fn);\n    return fn;\n  };\n\n  /**\n   * @param {number} interval How often should browser call poll functions (ms)\n   * @param {function()} setTimeout Reference to a real or fake `setTimeout` function.\n   *\n   * @description\n   * Configures the poller to run in the specified intervals, using the specified\n   * setTimeout fn and kicks it off.\n   */\n  function startPoller(interval, setTimeout) {\n    (function check() {\n      forEach(pollFns, function(pollFn){ pollFn(); });\n      pollTimeout = setTimeout(check, interval);\n    })();\n  }\n\n  //////////////////////////////////////////////////////////////\n  // URL API\n  //////////////////////////////////////////////////////////////\n\n  var lastBrowserUrl = location.href,\n      baseElement = document.find('base'),\n      newLocation = null;\n\n  /**\n   * @name ng.$browser#url\n   * @methodOf ng.$browser\n   *\n   * @description\n   * GETTER:\n   * Without any argument, this method just returns current value of location.href.\n   *\n   * SETTER:\n   * With at least one argument, this method sets url to new value.\n   * If html5 history api supported, pushState/replaceState is used, otherwise\n   * location.href/location.replace is used.\n   * Returns its own instance to allow chaining\n   *\n   * NOTE: this api is intended for use only by the $location service. Please use the\n   * {@link ng.$location $location service} to change url.\n   *\n   * @param {string} url New url (when used as setter)\n   * @param {boolean=} replace Should new url replace current history record ?\n   */\n  self.url = function(url, replace) {\n    // Android Browser BFCache causes location reference to become stale.\n    if (location !== window.location) location = window.location;\n\n    // setter\n    if (url) {\n      if (lastBrowserUrl == url) return;\n      lastBrowserUrl = url;\n      if ($sniffer.history) {\n        if (replace) history.replaceState(null, '', url);\n        else {\n          history.pushState(null, '', url);\n          // Crazy Opera Bug: http://my.opera.com/community/forums/topic.dml?id=1185462\n          baseElement.attr('href', baseElement.attr('href'));\n        }\n      } else {\n        newLocation = url;\n        if (replace) {\n          location.replace(url);\n        } else {\n          location.href = url;\n        }\n      }\n      return self;\n    // getter\n    } else {\n      // - newLocation is a workaround for an IE7-9 issue with location.replace and location.href\n      //   methods not updating location.href synchronously.\n      // - the replacement is a workaround for https://bugzilla.mozilla.org/show_bug.cgi?id=407172\n      return newLocation || location.href.replace(/%27/g,\"'\");\n    }\n  };\n\n  var urlChangeListeners = [],\n      urlChangeInit = false;\n\n  function fireUrlChange() {\n    newLocation = null;\n    if (lastBrowserUrl == self.url()) return;\n\n    lastBrowserUrl = self.url();\n    forEach(urlChangeListeners, function(listener) {\n      listener(self.url());\n    });\n  }\n\n  /**\n   * @name ng.$browser#onUrlChange\n   * @methodOf ng.$browser\n   * @TODO(vojta): refactor to use node's syntax for events\n   *\n   * @description\n   * Register callback function that will be called, when url changes.\n   *\n   * It's only called when the url is changed by outside of angular:\n   * - user types different url into address bar\n   * - user clicks on history (forward/back) button\n   * - user clicks on a link\n   *\n   * It's not called when url is changed by $browser.url() method\n   *\n   * The listener gets called with new url as parameter.\n   *\n   * NOTE: this api is intended for use only by the $location service. Please use the\n   * {@link ng.$location $location service} to monitor url changes in angular apps.\n   *\n   * @param {function(string)} listener Listener function to be called when url changes.\n   * @return {function(string)} Returns the registered listener fn - handy if the fn is anonymous.\n   */\n  self.onUrlChange = function(callback) {\n    if (!urlChangeInit) {\n      // We listen on both (hashchange/popstate) when available, as some browsers (e.g. Opera)\n      // don't fire popstate when user change the address bar and don't fire hashchange when url\n      // changed by push/replaceState\n\n      // html5 history api - popstate event\n      if ($sniffer.history) jqLite(window).on('popstate', fireUrlChange);\n      // hashchange event\n      if ($sniffer.hashchange) jqLite(window).on('hashchange', fireUrlChange);\n      // polling\n      else self.addPollFn(fireUrlChange);\n\n      urlChangeInit = true;\n    }\n\n    urlChangeListeners.push(callback);\n    return callback;\n  };\n\n  //////////////////////////////////////////////////////////////\n  // Misc API\n  //////////////////////////////////////////////////////////////\n\n  /**\n   * @name ng.$browser#baseHref\n   * @methodOf ng.$browser\n   * \n   * @description\n   * Returns current <base href>\n   * (always relative - without domain)\n   *\n   * @returns {string=} current <base href>\n   */\n  self.baseHref = function() {\n    var href = baseElement.attr('href');\n    return href ? href.replace(/^https?\\:\\/\\/[^\\/]*/, '') : '';\n  };\n\n  //////////////////////////////////////////////////////////////\n  // Cookies API\n  //////////////////////////////////////////////////////////////\n  var lastCookies = {};\n  var lastCookieString = '';\n  var cookiePath = self.baseHref();\n\n  /**\n   * @name ng.$browser#cookies\n   * @methodOf ng.$browser\n   *\n   * @param {string=} name Cookie name\n   * @param {string=} value Cookie value\n   *\n   * @description\n   * The cookies method provides a 'private' low level access to browser cookies.\n   * It is not meant to be used directly, use the $cookie service instead.\n   *\n   * The return values vary depending on the arguments that the method was called with as follows:\n   * \n   * - cookies() -> hash of all cookies, this is NOT a copy of the internal state, so do not modify\n   *   it\n   * - cookies(name, value) -> set name to value, if value is undefined delete the cookie\n   * - cookies(name) -> the same as (name, undefined) == DELETES (no one calls it right now that\n   *   way)\n   * \n   * @returns {Object} Hash of all cookies (if called without any parameter)\n   */\n  self.cookies = function(name, value) {\n    /* global escape: false, unescape: false */\n    var cookieLength, cookieArray, cookie, i, index;\n\n    if (name) {\n      if (value === undefined) {\n        rawDocument.cookie = escape(name) + \"=;path=\" + cookiePath +\n                                \";expires=Thu, 01 Jan 1970 00:00:00 GMT\";\n      } else {\n        if (isString(value)) {\n          cookieLength = (rawDocument.cookie = escape(name) + '=' + escape(value) +\n                                ';path=' + cookiePath).length + 1;\n\n          // per http://www.ietf.org/rfc/rfc2109.txt browser must allow at minimum:\n          // - 300 cookies\n          // - 20 cookies per unique domain\n          // - 4096 bytes per cookie\n          if (cookieLength > 4096) {\n            $log.warn(\"Cookie '\"+ name +\n              \"' possibly not set or overflowed because it was too large (\"+\n              cookieLength + \" > 4096 bytes)!\");\n          }\n        }\n      }\n    } else {\n      if (rawDocument.cookie !== lastCookieString) {\n        lastCookieString = rawDocument.cookie;\n        cookieArray = lastCookieString.split(\"; \");\n        lastCookies = {};\n\n        for (i = 0; i < cookieArray.length; i++) {\n          cookie = cookieArray[i];\n          index = cookie.indexOf('=');\n          if (index > 0) { //ignore nameless cookies\n            name = unescape(cookie.substring(0, index));\n            // the first value that is seen for a cookie is the most\n            // specific one.  values for the same cookie name that\n            // follow are for less specific paths.\n            if (lastCookies[name] === undefined) {\n              lastCookies[name] = unescape(cookie.substring(index + 1));\n            }\n          }\n        }\n      }\n      return lastCookies;\n    }\n  };\n\n\n  /**\n   * @name ng.$browser#defer\n   * @methodOf ng.$browser\n   * @param {function()} fn A function, who's execution should be deferred.\n   * @param {number=} [delay=0] of milliseconds to defer the function execution.\n   * @returns {*} DeferId that can be used to cancel the task via `$browser.defer.cancel()`.\n   *\n   * @description\n   * Executes a fn asynchronously via `setTimeout(fn, delay)`.\n   *\n   * Unlike when calling `setTimeout` directly, in test this function is mocked and instead of using\n   * `setTimeout` in tests, the fns are queued in an array, which can be programmatically flushed\n   * via `$browser.defer.flush()`.\n   *\n   */\n  self.defer = function(fn, delay) {\n    var timeoutId;\n    outstandingRequestCount++;\n    timeoutId = setTimeout(function() {\n      delete pendingDeferIds[timeoutId];\n      completeOutstandingRequest(fn);\n    }, delay || 0);\n    pendingDeferIds[timeoutId] = true;\n    return timeoutId;\n  };\n\n\n  /**\n   * @name ng.$browser#defer.cancel\n   * @methodOf ng.$browser.defer\n   *\n   * @description\n   * Cancels a deferred task identified with `deferId`.\n   *\n   * @param {*} deferId Token returned by the `$browser.defer` function.\n   * @returns {boolean} Returns `true` if the task hasn't executed yet and was successfully\n   *                    canceled.\n   */\n  self.defer.cancel = function(deferId) {\n    if (pendingDeferIds[deferId]) {\n      delete pendingDeferIds[deferId];\n      clearTimeout(deferId);\n      completeOutstandingRequest(noop);\n      return true;\n    }\n    return false;\n  };\n\n}\n\nfunction $BrowserProvider(){\n  this.$get = ['$window', '$log', '$sniffer', '$document',\n      function( $window,   $log,   $sniffer,   $document){\n        return new Browser($window, $document, $log, $sniffer);\n      }];\n}\n\n/**\n * @ngdoc object\n * @name ng.$cacheFactory\n *\n * @description\n * Factory that constructs cache objects and gives access to them.\n * \n * <pre>\n * \n *  var cache = $cacheFactory('cacheId');\n *  expect($cacheFactory.get('cacheId')).toBe(cache);\n *  expect($cacheFactory.get('noSuchCacheId')).not.toBeDefined();\n *\n *  cache.put(\"key\", \"value\");\n *  cache.put(\"another key\", \"another value\");\n *\n *  // We've specified no options on creation\n *  expect(cache.info()).toEqual({id: 'cacheId', size: 2}); \n * \n * </pre>\n *\n *\n * @param {string} cacheId Name or id of the newly created cache.\n * @param {object=} options Options object that specifies the cache behavior. Properties:\n *\n *   - `{number=}` `capacity` — turns the cache into LRU cache.\n *\n * @returns {object} Newly created cache object with the following set of methods:\n *\n * - `{object}` `info()` — Returns id, size, and options of cache.\n * - `{{*}}` `put({string} key, {*} value)` — Puts a new key-value pair into the cache and returns\n *   it.\n * - `{{*}}` `get({string} key)` — Returns cached value for `key` or undefined for cache miss.\n * - `{void}` `remove({string} key)` — Removes a key-value pair from the cache.\n * - `{void}` `removeAll()` — Removes all cached values.\n * - `{void}` `destroy()` — Removes references to this cache from $cacheFactory.\n *\n */\nfunction $CacheFactoryProvider() {\n\n  this.$get = function() {\n    var caches = {};\n\n    function cacheFactory(cacheId, options) {\n      if (cacheId in caches) {\n        throw minErr('$cacheFactory')('iid', \"CacheId '{0}' is already taken!\", cacheId);\n      }\n\n      var size = 0,\n          stats = extend({}, options, {id: cacheId}),\n          data = {},\n          capacity = (options && options.capacity) || Number.MAX_VALUE,\n          lruHash = {},\n          freshEnd = null,\n          staleEnd = null;\n\n      return caches[cacheId] = {\n\n        put: function(key, value) {\n          var lruEntry = lruHash[key] || (lruHash[key] = {key: key});\n\n          refresh(lruEntry);\n\n          if (isUndefined(value)) return;\n          if (!(key in data)) size++;\n          data[key] = value;\n\n          if (size > capacity) {\n            this.remove(staleEnd.key);\n          }\n\n          return value;\n        },\n\n\n        get: function(key) {\n          var lruEntry = lruHash[key];\n\n          if (!lruEntry) return;\n\n          refresh(lruEntry);\n\n          return data[key];\n        },\n\n\n        remove: function(key) {\n          var lruEntry = lruHash[key];\n\n          if (!lruEntry) return;\n\n          if (lruEntry == freshEnd) freshEnd = lruEntry.p;\n          if (lruEntry == staleEnd) staleEnd = lruEntry.n;\n          link(lruEntry.n,lruEntry.p);\n\n          delete lruHash[key];\n          delete data[key];\n          size--;\n        },\n\n\n        removeAll: function() {\n          data = {};\n          size = 0;\n          lruHash = {};\n          freshEnd = staleEnd = null;\n        },\n\n\n        destroy: function() {\n          data = null;\n          stats = null;\n          lruHash = null;\n          delete caches[cacheId];\n        },\n\n\n        info: function() {\n          return extend({}, stats, {size: size});\n        }\n      };\n\n\n      /**\n       * makes the `entry` the freshEnd of the LRU linked list\n       */\n      function refresh(entry) {\n        if (entry != freshEnd) {\n          if (!staleEnd) {\n            staleEnd = entry;\n          } else if (staleEnd == entry) {\n            staleEnd = entry.n;\n          }\n\n          link(entry.n, entry.p);\n          link(entry, freshEnd);\n          freshEnd = entry;\n          freshEnd.n = null;\n        }\n      }\n\n\n      /**\n       * bidirectionally links two entries of the LRU linked list\n       */\n      function link(nextEntry, prevEntry) {\n        if (nextEntry != prevEntry) {\n          if (nextEntry) nextEntry.p = prevEntry; //p stands for previous, 'prev' didn't minify\n          if (prevEntry) prevEntry.n = nextEntry; //n stands for next, 'next' didn't minify\n        }\n      }\n    }\n\n\n  /**\n   * @ngdoc method\n   * @name ng.$cacheFactory#info\n   * @methodOf ng.$cacheFactory\n   *\n   * @description\n   * Get information about all the of the caches that have been created\n   *\n   * @returns {Object} - key-value map of `cacheId` to the result of calling `cache#info`\n   */\n    cacheFactory.info = function() {\n      var info = {};\n      forEach(caches, function(cache, cacheId) {\n        info[cacheId] = cache.info();\n      });\n      return info;\n    };\n\n\n  /**\n   * @ngdoc method\n   * @name ng.$cacheFactory#get\n   * @methodOf ng.$cacheFactory\n   *\n   * @description\n   * Get access to a cache object by the `cacheId` used when it was created.\n   *\n   * @param {string} cacheId Name or id of a cache to access.\n   * @returns {object} Cache object identified by the cacheId or undefined if no such cache.\n   */\n    cacheFactory.get = function(cacheId) {\n      return caches[cacheId];\n    };\n\n\n    return cacheFactory;\n  };\n}\n\n/**\n * @ngdoc object\n * @name ng.$templateCache\n *\n * @description\n * The first time a template is used, it is loaded in the template cache for quick retrieval. You\n * can load templates directly into the cache in a `script` tag, or by consuming the\n * `$templateCache` service directly.\n * \n * Adding via the `script` tag:\n * <pre>\n * <html ng-app>\n * <head>\n * <script type=\"text/ng-template\" id=\"templateId.html\">\n *   This is the content of the template\n * </script>\n * </head>\n *   ...\n * </html>\n * </pre>\n * \n * **Note:** the `script` tag containing the template does not need to be included in the `head` of\n * the document, but it must be below the `ng-app` definition.\n * \n * Adding via the $templateCache service:\n * \n * <pre>\n * var myApp = angular.module('myApp', []);\n * myApp.run(function($templateCache) {\n *   $templateCache.put('templateId.html', 'This is the content of the template');\n * });\n * </pre>\n * \n * To retrieve the template later, simply use it in your HTML:\n * <pre>\n * <div ng-include=\" 'templateId.html' \"></div>\n * </pre>\n * \n * or get it via Javascript:\n * <pre>\n * $templateCache.get('templateId.html')\n * </pre>\n * \n * See {@link ng.$cacheFactory $cacheFactory}.\n *\n */\nfunction $TemplateCacheProvider() {\n  this.$get = ['$cacheFactory', function($cacheFactory) {\n    return $cacheFactory('templates');\n  }];\n}\n\n/* ! VARIABLE/FUNCTION NAMING CONVENTIONS THAT APPLY TO THIS FILE!\n *\n * DOM-related variables:\n *\n * - \"node\" - DOM Node\n * - \"element\" - DOM Element or Node\n * - \"$node\" or \"$element\" - jqLite-wrapped node or element\n *\n *\n * Compiler related stuff:\n *\n * - \"linkFn\" - linking fn of a single directive\n * - \"nodeLinkFn\" - function that aggregates all linking fns for a particular node\n * - \"childLinkFn\" -  function that aggregates all linking fns for child nodes of a particular node\n * - \"compositeLinkFn\" - function that aggregates all linking fns for a compilation root (nodeList)\n */\n\n\n/**\n * @ngdoc function\n * @name ng.$compile\n * @function\n *\n * @description\n * Compiles a piece of HTML string or DOM into a template and produces a template function, which\n * can then be used to link {@link ng.$rootScope.Scope `scope`} and the template together.\n *\n * The compilation is a process of walking the DOM tree and matching DOM elements to\n * {@link ng.$compileProvider#methods_directive directives}.\n *\n * <div class=\"alert alert-warning\">\n * **Note:** This document is an in-depth reference of all directive options.\n * For a gentle introduction to directives with examples of common use cases,\n * see the {@link guide/directive directive guide}.\n * </div>\n *\n * ## Comprehensive Directive API\n *\n * There are many different options for a directive.\n *\n * The difference resides in the return value of the factory function.\n * You can either return a \"Directive Definition Object\" (see below) that defines the directive properties,\n * or just the `postLink` function (all other properties will have the default values).\n *\n * <div class=\"alert alert-success\">\n * **Best Practice:** It's recommended to use the \"directive definition object\" form.\n * </div>\n *\n * Here's an example directive declared with a Directive Definition Object:\n *\n * <pre>\n *   var myModule = angular.module(...);\n *\n *   myModule.directive('directiveName', function factory(injectables) {\n *     var directiveDefinitionObject = {\n *       priority: 0,\n *       template: '<div></div>', // or // function(tElement, tAttrs) { ... },\n *       // or\n *       // templateUrl: 'directive.html', // or // function(tElement, tAttrs) { ... },\n *       replace: false,\n *       transclude: false,\n *       restrict: 'A',\n *       scope: false,\n *       controller: function($scope, $element, $attrs, $transclude, otherInjectables) { ... },\n *       require: 'siblingDirectiveName', // or // ['^parentDirectiveName', '?optionalDirectiveName', '?^optionalParent'],\n *       compile: function compile(tElement, tAttrs, transclude) {\n *         return {\n *           pre: function preLink(scope, iElement, iAttrs, controller) { ... },\n *           post: function postLink(scope, iElement, iAttrs, controller) { ... }\n *         }\n *         // or\n *         // return function postLink( ... ) { ... }\n *       },\n *       // or\n *       // link: {\n *       //  pre: function preLink(scope, iElement, iAttrs, controller) { ... },\n *       //  post: function postLink(scope, iElement, iAttrs, controller) { ... }\n *       // }\n *       // or\n *       // link: function postLink( ... ) { ... }\n *     };\n *     return directiveDefinitionObject;\n *   });\n * </pre>\n *\n * <div class=\"alert alert-warning\">\n * **Note:** Any unspecified options will use the default value. You can see the default values below.\n * </div>\n *\n * Therefore the above can be simplified as:\n *\n * <pre>\n *   var myModule = angular.module(...);\n *\n *   myModule.directive('directiveName', function factory(injectables) {\n *     var directiveDefinitionObject = {\n *       link: function postLink(scope, iElement, iAttrs) { ... }\n *     };\n *     return directiveDefinitionObject;\n *     // or\n *     // return function postLink(scope, iElement, iAttrs) { ... }\n *   });\n * </pre>\n *\n *\n *\n * ### Directive Definition Object\n *\n * The directive definition object provides instructions to the {@link api/ng.$compile\n * compiler}. The attributes are:\n *\n * #### `priority`\n * When there are multiple directives defined on a single DOM element, sometimes it\n * is necessary to specify the order in which the directives are applied. The `priority` is used\n * to sort the directives before their `compile` functions get called. Priority is defined as a\n * number. Directives with greater numerical `priority` are compiled first. The order of directives with\n * the same priority is undefined. The default priority is `0`.\n *\n * #### `terminal`\n * If set to true then the current `priority` will be the last set of directives\n * which will execute (any directives at the current priority will still execute\n * as the order of execution on same `priority` is undefined).\n *\n * #### `scope`\n * **If set to `true`,** then a new scope will be created for this directive. If multiple directives on the\n * same element request a new scope, only one new scope is created. The new scope rule does not\n * apply for the root of the template since the root of the template always gets a new scope.\n *\n * **If set to `{}` (object hash),** then a new \"isolate\" scope is created. The 'isolate' scope differs from\n * normal scope in that it does not prototypically inherit from the parent scope. This is useful\n * when creating reusable components, which should not accidentally read or modify data in the\n * parent scope.\n *\n * The 'isolate' scope takes an object hash which defines a set of local scope properties\n * derived from the parent scope. These local properties are useful for aliasing values for\n * templates. Locals definition is a hash of local scope property to its source:\n *\n * * `@` or `@attr` - bind a local scope property to the value of DOM attribute. The result is\n *   always a string since DOM attributes are strings. If no `attr` name is specified  then the\n *   attribute name is assumed to be the same as the local name.\n *   Given `<widget my-attr=\"hello {{name}}\">` and widget definition\n *   of `scope: { localName:'@myAttr' }`, then widget scope property `localName` will reflect\n *   the interpolated value of `hello {{name}}`. As the `name` attribute changes so will the\n *   `localName` property on the widget scope. The `name` is read from the parent scope (not\n *   component scope).\n *\n * * `=` or `=attr` - set up bi-directional binding between a local scope property and the\n *   parent scope property of name defined via the value of the `attr` attribute. If no `attr`\n *   name is specified then the attribute name is assumed to be the same as the local name.\n *   Given `<widget my-attr=\"parentModel\">` and widget definition of\n *   `scope: { localModel:'=myAttr' }`, then widget scope property `localModel` will reflect the\n *   value of `parentModel` on the parent scope. Any changes to `parentModel` will be reflected\n *   in `localModel` and any changes in `localModel` will reflect in `parentModel`. If the parent\n *   scope property doesn't exist, it will throw a NON_ASSIGNABLE_MODEL_EXPRESSION exception. You\n *   can avoid this behavior using `=?` or `=?attr` in order to flag the property as optional.\n *\n * * `&` or `&attr` - provides a way to execute an expression in the context of the parent scope.\n *   If no `attr` name is specified then the attribute name is assumed to be the same as the\n *   local name. Given `<widget my-attr=\"count = count + value\">` and widget definition of\n *   `scope: { localFn:'&myAttr' }`, then isolate scope property `localFn` will point to\n *   a function wrapper for the `count = count + value` expression. Often it's desirable to\n *   pass data from the isolated scope via an expression and to the parent scope, this can be\n *   done by passing a map of local variable names and values into the expression wrapper fn.\n *   For example, if the expression is `increment(amount)` then we can specify the amount value\n *   by calling the `localFn` as `localFn({amount: 22})`.\n *\n *\n *\n * #### `controller`\n * Controller constructor function. The controller is instantiated before the\n * pre-linking phase and it is shared with other directives (see\n * `require` attribute). This allows the directives to communicate with each other and augment\n * each other's behavior. The controller is injectable (and supports bracket notation) with the following locals:\n *\n * * `$scope` - Current scope associated with the element\n * * `$element` - Current element\n * * `$attrs` - Current attributes object for the element\n * * `$transclude` - A transclude linking function pre-bound to the correct transclusion scope:\n *   `function(cloneLinkingFn)`.\n *\n *\n * #### `require`\n * Require another directive and inject its controller as the fourth argument to the linking function. The\n * `require` takes a string name (or array of strings) of the directive(s) to pass in. If an array is used, the\n * injected argument will be an array in corresponding order. If no such directive can be\n * found, or if the directive does not have a controller, then an error is raised. The name can be prefixed with:\n *\n * * (no prefix) - Locate the required controller on the current element. Throw an error if not found.\n * * `?` - Attempt to locate the required controller or pass `null` to the `link` fn if not found.\n * * `^` - Locate the required controller by searching the element's parents. Throw an error if not found.\n * * `?^` - Attempt to locate the required controller by searching the element's parentsor pass `null` to the\n *   `link` fn if not found.\n *\n *\n * #### `controllerAs`\n * Controller alias at the directive scope. An alias for the controller so it\n * can be referenced at the directive template. The directive needs to define a scope for this\n * configuration to be used. Useful in the case when directive is used as component.\n *\n *\n * #### `restrict`\n * String of subset of `EACM` which restricts the directive to a specific directive\n * declaration style. If omitted, the default (attributes only) is used.\n *\n * * `E` - Element name: `<my-directive></my-directive>`\n * * `A` - Attribute (default): `<div my-directive=\"exp\"></div>`\n * * `C` - Class: `<div class=\"my-directive: exp;\"></div>`\n * * `M` - Comment: `<!-- directive: my-directive exp -->`\n *\n *\n * #### `template`\n * replace the current element with the contents of the HTML. The replacement process\n * migrates all of the attributes / classes from the old element to the new one. See the\n * {@link guide/directive#creating-custom-directives_creating-directives_template-expanding-directive\n * Directives Guide} for an example.\n *\n * You can specify `template` as a string representing the template or as a function which takes\n * two arguments `tElement` and `tAttrs` (described in the `compile` function api below) and\n * returns a string value representing the template.\n *\n *\n * #### `templateUrl`\n * Same as `template` but the template is loaded from the specified URL. Because\n * the template loading is asynchronous the compilation/linking is suspended until the template\n * is loaded.\n *\n * You can specify `templateUrl` as a string representing the URL or as a function which takes two\n * arguments `tElement` and `tAttrs` (described in the `compile` function api below) and returns\n * a string value representing the url.  In either case, the template URL is passed through {@link\n * api/ng.$sce#methods_getTrustedResourceUrl $sce.getTrustedResourceUrl}.\n *\n *\n * #### `replace`\n * specify where the template should be inserted. Defaults to `false`.\n *\n * * `true` - the template will replace the current element.\n * * `false` - the template will replace the contents of the current element.\n *\n *\n * #### `transclude`\n * compile the content of the element and make it available to the directive.\n * Typically used with {@link api/ng.directive:ngTransclude\n * ngTransclude}. The advantage of transclusion is that the linking function receives a\n * transclusion function which is pre-bound to the correct scope. In a typical setup the widget\n * creates an `isolate` scope, but the transclusion is not a child, but a sibling of the `isolate`\n * scope. This makes it possible for the widget to have private state, and the transclusion to\n * be bound to the parent (pre-`isolate`) scope.\n *\n * * `true` - transclude the content of the directive.\n * * `'element'` - transclude the whole element including any directives defined at lower priority.\n *\n *\n * #### `compile`\n *\n * <pre>\n *   function compile(tElement, tAttrs, transclude) { ... }\n * </pre>\n *\n * The compile function deals with transforming the template DOM. Since most directives do not do\n * template transformation, it is not used often. Examples that require compile functions are\n * directives that transform template DOM, such as {@link\n * api/ng.directive:ngRepeat ngRepeat}, or load the contents\n * asynchronously, such as {@link api/ngRoute.directive:ngView ngView}. The\n * compile function takes the following arguments.\n *\n *   * `tElement` - template element - The element where the directive has been declared. It is\n *     safe to do template transformation on the element and child elements only.\n *\n *   * `tAttrs` - template attributes - Normalized list of attributes declared on this element shared\n *     between all directive compile functions.\n *\n *   * `transclude` - A transclude linking function: `function(scope, cloneLinkingFn)`.\n *\n * <div class=\"alert alert-warning\">\n * **Note:** The template instance and the link instance may be different objects if the template has\n * been cloned. For this reason it is **not** safe to do anything other than DOM transformations that\n * apply to all cloned DOM nodes within the compile function. Specifically, DOM listener registration\n * should be done in a linking function rather than in a compile function.\n * </div>\n *\n * A compile function can have a return value which can be either a function or an object.\n *\n * * returning a (post-link) function - is equivalent to registering the linking function via the\n *   `link` property of the config object when the compile function is empty.\n *\n * * returning an object with function(s) registered via `pre` and `post` properties - allows you to\n *   control when a linking function should be called during the linking phase. See info about\n *   pre-linking and post-linking functions below.\n *\n *\n * #### `link`\n * This property is used only if the `compile` property is not defined.\n *\n * <pre>\n *   function link(scope, iElement, iAttrs, controller) { ... }\n * </pre>\n *\n * The link function is responsible for registering DOM listeners as well as updating the DOM. It is\n * executed after the template has been cloned. This is where most of the directive logic will be\n * put.\n *\n *   * `scope` - {@link api/ng.$rootScope.Scope Scope} - The scope to be used by the\n *     directive for registering {@link api/ng.$rootScope.Scope#methods_$watch watches}.\n *\n *   * `iElement` - instance element - The element where the directive is to be used. It is safe to\n *     manipulate the children of the element only in `postLink` function since the children have\n *     already been linked.\n *\n *   * `iAttrs` - instance attributes - Normalized list of attributes declared on this element shared\n *     between all directive linking functions.\n *\n *   * `controller` - a controller instance - A controller instance if at least one directive on the\n *     element defines a controller. The controller is shared among all the directives, which allows\n *     the directives to use the controllers as a communication channel.\n *\n *\n *\n * #### Pre-linking function\n *\n * Executed before the child elements are linked. Not safe to do DOM transformation since the\n * compiler linking function will fail to locate the correct elements for linking.\n *\n * #### Post-linking function\n *\n * Executed after the child elements are linked. It is safe to do DOM transformation in the post-linking function.\n *\n * <a name=\"Attributes\"></a>\n * ### Attributes\n *\n * The {@link api/ng.$compile.directive.Attributes Attributes} object - passed as a parameter in the\n * `link()` or `compile()` functions. It has a variety of uses.\n *\n * accessing *Normalized attribute names:*\n * Directives like 'ngBind' can be expressed in many ways: 'ng:bind', `data-ng-bind`, or 'x-ng-bind'.\n * the attributes object allows for normalized access to\n *   the attributes.\n *\n * * *Directive inter-communication:* All directives share the same instance of the attributes\n *   object which allows the directives to use the attributes object as inter directive\n *   communication.\n *\n * * *Supports interpolation:* Interpolation attributes are assigned to the attribute object\n *   allowing other directives to read the interpolated value.\n *\n * * *Observing interpolated attributes:* Use `$observe` to observe the value changes of attributes\n *   that contain interpolation (e.g. `src=\"{{bar}}\"`). Not only is this very efficient but it's also\n *   the only way to easily get the actual value because during the linking phase the interpolation\n *   hasn't been evaluated yet and so the value is at this time set to `undefined`.\n *\n * <pre>\n * function linkingFn(scope, elm, attrs, ctrl) {\n *   // get the attribute value\n *   console.log(attrs.ngModel);\n *\n *   // change the attribute\n *   attrs.$set('ngModel', 'new value');\n *\n *   // observe changes to interpolated attribute\n *   attrs.$observe('ngModel', function(value) {\n *     console.log('ngModel has changed value to ' + value);\n *   });\n * }\n * </pre>\n *\n * Below is an example using `$compileProvider`.\n *\n * <div class=\"alert alert-warning\">\n * **Note**: Typically directives are registered with `module.directive`. The example below is\n * to illustrate how `$compile` works.\n * </div>\n *\n <doc:example module=\"compile\">\n   <doc:source>\n    <script>\n      angular.module('compile', [], function($compileProvider) {\n        // configure new 'compile' directive by passing a directive\n        // factory function. The factory function injects the '$compile'\n        $compileProvider.directive('compile', function($compile) {\n          // directive factory creates a link function\n          return function(scope, element, attrs) {\n            scope.$watch(\n              function(scope) {\n                 // watch the 'compile' expression for changes\n                return scope.$eval(attrs.compile);\n              },\n              function(value) {\n                // when the 'compile' expression changes\n                // assign it into the current DOM\n                element.html(value);\n\n                // compile the new DOM and link it to the current\n                // scope.\n                // NOTE: we only compile .childNodes so that\n                // we don't get into infinite loop compiling ourselves\n                $compile(element.contents())(scope);\n              }\n            );\n          };\n        })\n      });\n\n      function Ctrl($scope) {\n        $scope.name = 'Angular';\n        $scope.html = 'Hello {{name}}';\n      }\n    </script>\n    <div ng-controller=\"Ctrl\">\n      <input ng-model=\"name\"> <br>\n      <textarea ng-model=\"html\"></textarea> <br>\n      <div compile=\"html\"></div>\n    </div>\n   </doc:source>\n   <doc:scenario>\n     it('should auto compile', function() {\n       expect(element('div[compile]').text()).toBe('Hello Angular');\n       input('html').enter('{{name}}!');\n       expect(element('div[compile]').text()).toBe('Angular!');\n     });\n   </doc:scenario>\n </doc:example>\n\n *\n *\n * @param {string|DOMElement} element Element or HTML string to compile into a template function.\n * @param {function(angular.Scope[, cloneAttachFn]} transclude function available to directives.\n * @param {number} maxPriority only apply directives lower then given priority (Only effects the\n *                 root element(s), not their children)\n * @returns {function(scope[, cloneAttachFn])} a link function which is used to bind template\n * (a DOM element/tree) to a scope. Where:\n *\n *  * `scope` - A {@link ng.$rootScope.Scope Scope} to bind to.\n *  * `cloneAttachFn` - If `cloneAttachFn` is provided, then the link function will clone the\n *  `template` and call the `cloneAttachFn` function allowing the caller to attach the\n *  cloned elements to the DOM document at the appropriate place. The `cloneAttachFn` is\n *  called as: <br> `cloneAttachFn(clonedElement, scope)` where:\n *\n *      * `clonedElement` - is a clone of the original `element` passed into the compiler.\n *      * `scope` - is the current scope with which the linking function is working with.\n *\n * Calling the linking function returns the element of the template. It is either the original\n * element passed in, or the clone of the element if the `cloneAttachFn` is provided.\n *\n * After linking the view is not updated until after a call to $digest which typically is done by\n * Angular automatically.\n *\n * If you need access to the bound view, there are two ways to do it:\n *\n * - If you are not asking the linking function to clone the template, create the DOM element(s)\n *   before you send them to the compiler and keep this reference around.\n *   <pre>\n *     var element = $compile('<p>{{total}}</p>')(scope);\n *   </pre>\n *\n * - if on the other hand, you need the element to be cloned, the view reference from the original\n *   example would not point to the clone, but rather to the original template that was cloned. In\n *   this case, you can access the clone via the cloneAttachFn:\n *   <pre>\n *     var templateHTML = angular.element('<p>{{total}}</p>'),\n *         scope = ....;\n *\n *     var clonedElement = $compile(templateHTML)(scope, function(clonedElement, scope) {\n *       //attach the clone to DOM document at the right place\n *     });\n *\n *     //now we have reference to the cloned DOM via `clone`\n *   </pre>\n *\n *\n * For information on how the compiler works, see the\n * {@link guide/compiler Angular HTML Compiler} section of the Developer Guide.\n */\n\nvar $compileMinErr = minErr('$compile');\n\n/**\n * @ngdoc service\n * @name ng.$compileProvider\n * @function\n *\n * @description\n */\n$CompileProvider.$inject = ['$provide'];\nfunction $CompileProvider($provide) {\n  var hasDirectives = {},\n      Suffix = 'Directive',\n      COMMENT_DIRECTIVE_REGEXP = /^\\s*directive\\:\\s*([\\d\\w\\-_]+)\\s+(.*)$/,\n      CLASS_DIRECTIVE_REGEXP = /(([\\d\\w\\-_]+)(?:\\:([^;]+))?;?)/,\n      aHrefSanitizationWhitelist = /^\\s*(https?|ftp|mailto|tel|file):/,\n      imgSrcSanitizationWhitelist = /^\\s*(https?|ftp|file):|data:image\\//;\n\n  // Ref: http://developers.whatwg.org/webappapis.html#event-handler-idl-attributes\n  // The assumption is that future DOM event attribute names will begin with\n  // 'on' and be composed of only English letters.\n  var EVENT_HANDLER_ATTR_REGEXP = /^(on[a-z]+|formaction)$/;\n\n  /**\n   * @ngdoc function\n   * @name ng.$compileProvider#directive\n   * @methodOf ng.$compileProvider\n   * @function\n   *\n   * @description\n   * Register a new directive with the compiler.\n   *\n   * @param {string|Object} name Name of the directive in camel-case (i.e. <code>ngBind</code> which\n   *    will match as <code>ng-bind</code>), or an object map of directives where the keys are the\n   *    names and the values are the factories.\n   * @param {function|Array} directiveFactory An injectable directive factory function. See\n   *    {@link guide/directive} for more info.\n   * @returns {ng.$compileProvider} Self for chaining.\n   */\n   this.directive = function registerDirective(name, directiveFactory) {\n    assertNotHasOwnProperty(name, 'directive');\n    if (isString(name)) {\n      assertArg(directiveFactory, 'directiveFactory');\n      if (!hasDirectives.hasOwnProperty(name)) {\n        hasDirectives[name] = [];\n        $provide.factory(name + Suffix, ['$injector', '$exceptionHandler',\n          function($injector, $exceptionHandler) {\n            var directives = [];\n            forEach(hasDirectives[name], function(directiveFactory, index) {\n              try {\n                var directive = $injector.invoke(directiveFactory);\n                if (isFunction(directive)) {\n                  directive = { compile: valueFn(directive) };\n                } else if (!directive.compile && directive.link) {\n                  directive.compile = valueFn(directive.link);\n                }\n                directive.priority = directive.priority || 0;\n                directive.index = index;\n                directive.name = directive.name || name;\n                directive.require = directive.require || (directive.controller && directive.name);\n                directive.restrict = directive.restrict || 'A';\n                directives.push(directive);\n              } catch (e) {\n                $exceptionHandler(e);\n              }\n            });\n            return directives;\n          }]);\n      }\n      hasDirectives[name].push(directiveFactory);\n    } else {\n      forEach(name, reverseParams(registerDirective));\n    }\n    return this;\n  };\n\n\n  /**\n   * @ngdoc function\n   * @name ng.$compileProvider#aHrefSanitizationWhitelist\n   * @methodOf ng.$compileProvider\n   * @function\n   *\n   * @description\n   * Retrieves or overrides the default regular expression that is used for whitelisting of safe\n   * urls during a[href] sanitization.\n   *\n   * The sanitization is a security measure aimed at prevent XSS attacks via html links.\n   *\n   * Any url about to be assigned to a[href] via data-binding is first normalized and turned into\n   * an absolute url. Afterwards, the url is matched against the `aHrefSanitizationWhitelist`\n   * regular expression. If a match is found, the original url is written into the dom. Otherwise,\n   * the absolute url is prefixed with `'unsafe:'` string and only then is it written into the DOM.\n   *\n   * @param {RegExp=} regexp New regexp to whitelist urls with.\n   * @returns {RegExp|ng.$compileProvider} Current RegExp if called without value or self for\n   *    chaining otherwise.\n   */\n  this.aHrefSanitizationWhitelist = function(regexp) {\n    if (isDefined(regexp)) {\n      aHrefSanitizationWhitelist = regexp;\n      return this;\n    }\n    return aHrefSanitizationWhitelist;\n  };\n\n\n  /**\n   * @ngdoc function\n   * @name ng.$compileProvider#imgSrcSanitizationWhitelist\n   * @methodOf ng.$compileProvider\n   * @function\n   *\n   * @description\n   * Retrieves or overrides the default regular expression that is used for whitelisting of safe\n   * urls during img[src] sanitization.\n   *\n   * The sanitization is a security measure aimed at prevent XSS attacks via html links.\n   *\n   * Any url about to be assigned to img[src] via data-binding is first normalized and turned into\n   * an absolute url. Afterwards, the url is matched against the `imgSrcSanitizationWhitelist`\n   * regular expression. If a match is found, the original url is written into the dom. Otherwise,\n   * the absolute url is prefixed with `'unsafe:'` string and only then is it written into the DOM.\n   *\n   * @param {RegExp=} regexp New regexp to whitelist urls with.\n   * @returns {RegExp|ng.$compileProvider} Current RegExp if called without value or self for\n   *    chaining otherwise.\n   */\n  this.imgSrcSanitizationWhitelist = function(regexp) {\n    if (isDefined(regexp)) {\n      imgSrcSanitizationWhitelist = regexp;\n      return this;\n    }\n    return imgSrcSanitizationWhitelist;\n  };\n\n\n  this.$get = [\n            '$injector', '$interpolate', '$exceptionHandler', '$http', '$templateCache', '$parse',\n            '$controller', '$rootScope', '$document', '$sce', '$animate',\n    function($injector,   $interpolate,   $exceptionHandler,   $http,   $templateCache,   $parse,\n             $controller,   $rootScope,   $document,   $sce,   $animate) {\n\n    var Attributes = function(element, attr) {\n      this.$$element = element;\n      this.$attr = attr || {};\n    };\n\n    Attributes.prototype = {\n      $normalize: directiveNormalize,\n\n\n      /**\n       * @ngdoc function\n       * @name ng.$compile.directive.Attributes#$addClass\n       * @methodOf ng.$compile.directive.Attributes\n       * @function\n       *\n       * @description\n       * Adds the CSS class value specified by the classVal parameter to the element. If animations\n       * are enabled then an animation will be triggered for the class addition.\n       *\n       * @param {string} classVal The className value that will be added to the element\n       */\n      $addClass : function(classVal) {\n        if(classVal && classVal.length > 0) {\n          $animate.addClass(this.$$element, classVal);\n        }\n      },\n\n      /**\n       * @ngdoc function\n       * @name ng.$compile.directive.Attributes#$removeClass\n       * @methodOf ng.$compile.directive.Attributes\n       * @function\n       *\n       * @description\n       * Removes the CSS class value specified by the classVal parameter from the element. If\n       * animations are enabled then an animation will be triggered for the class removal.\n       *\n       * @param {string} classVal The className value that will be removed from the element\n       */\n      $removeClass : function(classVal) {\n        if(classVal && classVal.length > 0) {\n          $animate.removeClass(this.$$element, classVal);\n        }\n      },\n\n      /**\n       * Set a normalized attribute on the element in a way such that all directives\n       * can share the attribute. This function properly handles boolean attributes.\n       * @param {string} key Normalized key. (ie ngAttribute)\n       * @param {string|boolean} value The value to set. If `null` attribute will be deleted.\n       * @param {boolean=} writeAttr If false, does not write the value to DOM element attribute.\n       *     Defaults to true.\n       * @param {string=} attrName Optional none normalized name. Defaults to key.\n       */\n      $set: function(key, value, writeAttr, attrName) {\n        //special case for class attribute addition + removal\n        //so that class changes can tap into the animation\n        //hooks provided by the $animate service\n        if(key == 'class') {\n          value = value || '';\n          var current = this.$$element.attr('class') || '';\n          this.$removeClass(tokenDifference(current, value).join(' '));\n          this.$addClass(tokenDifference(value, current).join(' '));\n        } else {\n          var booleanKey = getBooleanAttrName(this.$$element[0], key),\n              normalizedVal,\n              nodeName;\n\n          if (booleanKey) {\n            this.$$element.prop(key, value);\n            attrName = booleanKey;\n          }\n\n          this[key] = value;\n\n          // translate normalized key to actual key\n          if (attrName) {\n            this.$attr[key] = attrName;\n          } else {\n            attrName = this.$attr[key];\n            if (!attrName) {\n              this.$attr[key] = attrName = snake_case(key, '-');\n            }\n          }\n\n          nodeName = nodeName_(this.$$element);\n\n          // sanitize a[href] and img[src] values\n          if ((nodeName === 'A' && key === 'href') ||\n              (nodeName === 'IMG' && key === 'src')) {\n            // NOTE: urlResolve() doesn't support IE < 8 so we don't sanitize for that case.\n            if (!msie || msie >= 8 ) {\n              normalizedVal = urlResolve(value).href;\n              if (normalizedVal !== '') {\n                if ((key === 'href' && !normalizedVal.match(aHrefSanitizationWhitelist)) ||\n                    (key === 'src' && !normalizedVal.match(imgSrcSanitizationWhitelist))) {\n                  this[key] = value = 'unsafe:' + normalizedVal;\n                }\n              }\n            }\n          }\n\n          if (writeAttr !== false) {\n            if (value === null || value === undefined) {\n              this.$$element.removeAttr(attrName);\n            } else {\n              this.$$element.attr(attrName, value);\n            }\n          }\n        }\n\n        // fire observers\n        var $$observers = this.$$observers;\n        $$observers && forEach($$observers[key], function(fn) {\n          try {\n            fn(value);\n          } catch (e) {\n            $exceptionHandler(e);\n          }\n        });\n\n        function tokenDifference(str1, str2) {\n          var values = [],\n              tokens1 = str1.split(/\\s+/),\n              tokens2 = str2.split(/\\s+/);\n\n          outer:\n          for(var i=0;i<tokens1.length;i++) {\n            var token = tokens1[i];\n            for(var j=0;j<tokens2.length;j++) {\n              if(token == tokens2[j]) continue outer;\n            }\n            values.push(token);\n          }\n          return values;\n        }\n      },\n\n\n      /**\n       * @ngdoc function\n       * @name ng.$compile.directive.Attributes#$observe\n       * @methodOf ng.$compile.directive.Attributes\n       * @function\n       *\n       * @description\n       * Observes an interpolated attribute.\n       *\n       * The observer function will be invoked once during the next `$digest` following\n       * compilation. The observer is then invoked whenever the interpolated value\n       * changes.\n       *\n       * @param {string} key Normalized key. (ie ngAttribute) .\n       * @param {function(interpolatedValue)} fn Function that will be called whenever\n                the interpolated value of the attribute changes.\n       *        See the {@link guide/directive#Attributes Directives} guide for more info.\n       * @returns {function()} the `fn` parameter.\n       */\n      $observe: function(key, fn) {\n        var attrs = this,\n            $$observers = (attrs.$$observers || (attrs.$$observers = {})),\n            listeners = ($$observers[key] || ($$observers[key] = []));\n\n        listeners.push(fn);\n        $rootScope.$evalAsync(function() {\n          if (!listeners.$$inter) {\n            // no one registered attribute interpolation function, so lets call it manually\n            fn(attrs[key]);\n          }\n        });\n        return fn;\n      }\n    };\n\n    var startSymbol = $interpolate.startSymbol(),\n        endSymbol = $interpolate.endSymbol(),\n        denormalizeTemplate = (startSymbol == '{{' || endSymbol  == '}}')\n            ? identity\n            : function denormalizeTemplate(template) {\n              return template.replace(/\\{\\{/g, startSymbol).replace(/}}/g, endSymbol);\n        },\n        NG_ATTR_BINDING = /^ngAttr[A-Z]/;\n\n\n    return compile;\n\n    //================================\n\n    function compile($compileNodes, transcludeFn, maxPriority, ignoreDirective,\n                        previousCompileContext) {\n      if (!($compileNodes instanceof jqLite)) {\n        // jquery always rewraps, whereas we need to preserve the original selector so that we can\n        // modify it.\n        $compileNodes = jqLite($compileNodes);\n      }\n      // We can not compile top level text elements since text nodes can be merged and we will\n      // not be able to attach scope data to them, so we will wrap them in <span>\n      forEach($compileNodes, function(node, index){\n        if (node.nodeType == 3 /* text node */ && node.nodeValue.match(/\\S+/) /* non-empty */ ) {\n          $compileNodes[index] = node = jqLite(node).wrap('<span></span>').parent()[0];\n        }\n      });\n      var compositeLinkFn =\n              compileNodes($compileNodes, transcludeFn, $compileNodes,\n                           maxPriority, ignoreDirective, previousCompileContext);\n      return function publicLinkFn(scope, cloneConnectFn){\n        assertArg(scope, 'scope');\n        // important!!: we must call our jqLite.clone() since the jQuery one is trying to be smart\n        // and sometimes changes the structure of the DOM.\n        var $linkNode = cloneConnectFn\n          ? JQLitePrototype.clone.call($compileNodes) // IMPORTANT!!!\n          : $compileNodes;\n\n        // Attach scope only to non-text nodes.\n        for(var i = 0, ii = $linkNode.length; i<ii; i++) {\n          var node = $linkNode[i];\n          if (node.nodeType == 1 /* element */ || node.nodeType == 9 /* document */) {\n            $linkNode.eq(i).data('$scope', scope);\n          }\n        }\n        safeAddClass($linkNode, 'ng-scope');\n        if (cloneConnectFn) cloneConnectFn($linkNode, scope);\n        if (compositeLinkFn) compositeLinkFn(scope, $linkNode, $linkNode);\n        return $linkNode;\n      };\n    }\n\n    function safeAddClass($element, className) {\n      try {\n        $element.addClass(className);\n      } catch(e) {\n        // ignore, since it means that we are trying to set class on\n        // SVG element, where class name is read-only.\n      }\n    }\n\n    /**\n     * Compile function matches each node in nodeList against the directives. Once all directives\n     * for a particular node are collected their compile functions are executed. The compile\n     * functions return values - the linking functions - are combined into a composite linking\n     * function, which is the a linking function for the node.\n     *\n     * @param {NodeList} nodeList an array of nodes or NodeList to compile\n     * @param {function(angular.Scope[, cloneAttachFn]} transcludeFn A linking function, where the\n     *        scope argument is auto-generated to the new child of the transcluded parent scope.\n     * @param {DOMElement=} $rootElement If the nodeList is the root of the compilation tree then\n     *        the rootElement must be set the jqLite collection of the compile root. This is\n     *        needed so that the jqLite collection items can be replaced with widgets.\n     * @param {number=} max directive priority\n     * @returns {?function} A composite linking function of all of the matched directives or null.\n     */\n    function compileNodes(nodeList, transcludeFn, $rootElement, maxPriority, ignoreDirective,\n                            previousCompileContext) {\n      var linkFns = [],\n          nodeLinkFn, childLinkFn, directives, attrs, linkFnFound;\n\n      for(var i = 0; i < nodeList.length; i++) {\n        attrs = new Attributes();\n\n        // we must always refer to nodeList[i] since the nodes can be replaced underneath us.\n        directives = collectDirectives(nodeList[i], [], attrs, i === 0 ? maxPriority : undefined,\n                                        ignoreDirective);\n\n        nodeLinkFn = (directives.length)\n            ? applyDirectivesToNode(directives, nodeList[i], attrs, transcludeFn, $rootElement,\n                                      null, [], [], previousCompileContext)\n            : null;\n\n        childLinkFn = (nodeLinkFn && nodeLinkFn.terminal ||\n                      !nodeList[i].childNodes ||\n                      !nodeList[i].childNodes.length)\n            ? null\n            : compileNodes(nodeList[i].childNodes,\n                 nodeLinkFn ? nodeLinkFn.transclude : transcludeFn);\n\n        linkFns.push(nodeLinkFn);\n        linkFns.push(childLinkFn);\n        linkFnFound = (linkFnFound || nodeLinkFn || childLinkFn);\n        //use the previous context only for the first element in the virtual group\n        previousCompileContext = null;\n      }\n\n      // return a linking function if we have found anything, null otherwise\n      return linkFnFound ? compositeLinkFn : null;\n\n      function compositeLinkFn(scope, nodeList, $rootElement, boundTranscludeFn) {\n        var nodeLinkFn, childLinkFn, node, $node, childScope, childTranscludeFn, i, ii, n;\n\n        // copy nodeList so that linking doesn't break due to live list updates.\n        var stableNodeList = [];\n        for (i = 0, ii = nodeList.length; i < ii; i++) {\n          stableNodeList.push(nodeList[i]);\n        }\n\n        for(i = 0, n = 0, ii = linkFns.length; i < ii; n++) {\n          node = stableNodeList[n];\n          nodeLinkFn = linkFns[i++];\n          childLinkFn = linkFns[i++];\n          $node = jqLite(node);\n\n          if (nodeLinkFn) {\n            if (nodeLinkFn.scope) {\n              childScope = scope.$new();\n              $node.data('$scope', childScope);\n              safeAddClass($node, 'ng-scope');\n            } else {\n              childScope = scope;\n            }\n            childTranscludeFn = nodeLinkFn.transclude;\n            if (childTranscludeFn || (!boundTranscludeFn && transcludeFn)) {\n              nodeLinkFn(childLinkFn, childScope, node, $rootElement,\n                  (function(transcludeFn) {\n                    return function(cloneFn) {\n                      var transcludeScope = scope.$new();\n                      transcludeScope.$$transcluded = true;\n\n                      return transcludeFn(transcludeScope, cloneFn).\n                          on('$destroy', bind(transcludeScope, transcludeScope.$destroy));\n                    };\n                  })(childTranscludeFn || transcludeFn)\n              );\n            } else {\n              nodeLinkFn(childLinkFn, childScope, node, undefined, boundTranscludeFn);\n            }\n          } else if (childLinkFn) {\n            childLinkFn(scope, node.childNodes, undefined, boundTranscludeFn);\n          }\n        }\n      }\n    }\n\n\n    /**\n     * Looks for directives on the given node and adds them to the directive collection which is\n     * sorted.\n     *\n     * @param node Node to search.\n     * @param directives An array to which the directives are added to. This array is sorted before\n     *        the function returns.\n     * @param attrs The shared attrs object which is used to populate the normalized attributes.\n     * @param {number=} maxPriority Max directive priority.\n     */\n    function collectDirectives(node, directives, attrs, maxPriority, ignoreDirective) {\n      var nodeType = node.nodeType,\n          attrsMap = attrs.$attr,\n          match,\n          className;\n\n      switch(nodeType) {\n        case 1: /* Element */\n          // use the node name: <directive>\n          addDirective(directives,\n              directiveNormalize(nodeName_(node).toLowerCase()), 'E', maxPriority, ignoreDirective);\n\n          // iterate over the attributes\n          for (var attr, name, nName, ngAttrName, value, nAttrs = node.attributes,\n                   j = 0, jj = nAttrs && nAttrs.length; j < jj; j++) {\n            var attrStartName = false;\n            var attrEndName = false;\n\n            attr = nAttrs[j];\n            if (!msie || msie >= 8 || attr.specified) {\n              name = attr.name;\n              // support ngAttr attribute binding\n              ngAttrName = directiveNormalize(name);\n              if (NG_ATTR_BINDING.test(ngAttrName)) {\n                name = snake_case(ngAttrName.substr(6), '-');\n              }\n\n              var directiveNName = ngAttrName.replace(/(Start|End)$/, '');\n              if (ngAttrName === directiveNName + 'Start') {\n                attrStartName = name;\n                attrEndName = name.substr(0, name.length - 5) + 'end';\n                name = name.substr(0, name.length - 6);\n              }\n\n              nName = directiveNormalize(name.toLowerCase());\n              attrsMap[nName] = name;\n              attrs[nName] = value = trim((msie && name == 'href')\n                ? decodeURIComponent(node.getAttribute(name, 2))\n                : attr.value);\n              if (getBooleanAttrName(node, nName)) {\n                attrs[nName] = true; // presence means true\n              }\n              addAttrInterpolateDirective(node, directives, value, nName);\n              addDirective(directives, nName, 'A', maxPriority, ignoreDirective, attrStartName,\n                            attrEndName);\n            }\n          }\n\n          // use class as directive\n          className = node.className;\n          if (isString(className) && className !== '') {\n            while (match = CLASS_DIRECTIVE_REGEXP.exec(className)) {\n              nName = directiveNormalize(match[2]);\n              if (addDirective(directives, nName, 'C', maxPriority, ignoreDirective)) {\n                attrs[nName] = trim(match[3]);\n              }\n              className = className.substr(match.index + match[0].length);\n            }\n          }\n          break;\n        case 3: /* Text Node */\n          addTextInterpolateDirective(directives, node.nodeValue);\n          break;\n        case 8: /* Comment */\n          try {\n            match = COMMENT_DIRECTIVE_REGEXP.exec(node.nodeValue);\n            if (match) {\n              nName = directiveNormalize(match[1]);\n              if (addDirective(directives, nName, 'M', maxPriority, ignoreDirective)) {\n                attrs[nName] = trim(match[2]);\n              }\n            }\n          } catch (e) {\n            // turns out that under some circumstances IE9 throws errors when one attempts to read\n            // comment's node value.\n            // Just ignore it and continue. (Can't seem to reproduce in test case.)\n          }\n          break;\n      }\n\n      directives.sort(byPriority);\n      return directives;\n    }\n\n    /**\n     * Given a node with an directive-start it collects all of the siblings until it finds\n     * directive-end.\n     * @param node\n     * @param attrStart\n     * @param attrEnd\n     * @returns {*}\n     */\n    function groupScan(node, attrStart, attrEnd) {\n      var nodes = [];\n      var depth = 0;\n      if (attrStart && node.hasAttribute && node.hasAttribute(attrStart)) {\n        var startNode = node;\n        do {\n          if (!node) {\n            throw $compileMinErr('uterdir',\n                      \"Unterminated attribute, found '{0}' but no matching '{1}' found.\",\n                      attrStart, attrEnd);\n          }\n          if (node.nodeType == 1 /** Element **/) {\n            if (node.hasAttribute(attrStart)) depth++;\n            if (node.hasAttribute(attrEnd)) depth--;\n          }\n          nodes.push(node);\n          node = node.nextSibling;\n        } while (depth > 0);\n      } else {\n        nodes.push(node);\n      }\n\n      return jqLite(nodes);\n    }\n\n    /**\n     * Wrapper for linking function which converts normal linking function into a grouped\n     * linking function.\n     * @param linkFn\n     * @param attrStart\n     * @param attrEnd\n     * @returns {Function}\n     */\n    function groupElementsLinkFnWrapper(linkFn, attrStart, attrEnd) {\n      return function(scope, element, attrs, controllers) {\n        element = groupScan(element[0], attrStart, attrEnd);\n        return linkFn(scope, element, attrs, controllers);\n      };\n    }\n\n    /**\n     * Once the directives have been collected, their compile functions are executed. This method\n     * is responsible for inlining directive templates as well as terminating the application\n     * of the directives if the terminal directive has been reached.\n     *\n     * @param {Array} directives Array of collected directives to execute their compile function.\n     *        this needs to be pre-sorted by priority order.\n     * @param {Node} compileNode The raw DOM node to apply the compile functions to\n     * @param {Object} templateAttrs The shared attribute function\n     * @param {function(angular.Scope[, cloneAttachFn]} transcludeFn A linking function, where the\n     *                                                  scope argument is auto-generated to the new\n     *                                                  child of the transcluded parent scope.\n     * @param {JQLite} jqCollection If we are working on the root of the compile tree then this\n     *                              argument has the root jqLite array so that we can replace nodes\n     *                              on it.\n     * @param {Object=} originalReplaceDirective An optional directive that will be ignored when\n     *                                           compiling the transclusion.\n     * @param {Array.<Function>} preLinkFns\n     * @param {Array.<Function>} postLinkFns\n     * @param {Object} previousCompileContext Context used for previous compilation of the current\n     *                                        node\n     * @returns linkFn\n     */\n    function applyDirectivesToNode(directives, compileNode, templateAttrs, transcludeFn,\n                                   jqCollection, originalReplaceDirective, preLinkFns, postLinkFns,\n                                   previousCompileContext) {\n      previousCompileContext = previousCompileContext || {};\n\n      var terminalPriority = -Number.MAX_VALUE,\n          newScopeDirective,\n          controllerDirectives = previousCompileContext.controllerDirectives,\n          newIsolateScopeDirective = previousCompileContext.newIsolateScopeDirective,\n          templateDirective = previousCompileContext.templateDirective,\n          transcludeDirective = previousCompileContext.transcludeDirective,\n          $compileNode = templateAttrs.$$element = jqLite(compileNode),\n          directive,\n          directiveName,\n          $template,\n          replaceDirective = originalReplaceDirective,\n          childTranscludeFn = transcludeFn,\n          linkFn,\n          directiveValue;\n\n      // executes all directives on the current element\n      for(var i = 0, ii = directives.length; i < ii; i++) {\n        directive = directives[i];\n        var attrStart = directive.$$start;\n        var attrEnd = directive.$$end;\n\n        // collect multiblock sections\n        if (attrStart) {\n          $compileNode = groupScan(compileNode, attrStart, attrEnd);\n        }\n        $template = undefined;\n\n        if (terminalPriority > directive.priority) {\n          break; // prevent further processing of directives\n        }\n\n        if (directiveValue = directive.scope) {\n          newScopeDirective = newScopeDirective || directive;\n\n          // skip the check for directives with async templates, we'll check the derived sync\n          // directive when the template arrives\n          if (!directive.templateUrl) {\n            assertNoDuplicate('new/isolated scope', newIsolateScopeDirective, directive,\n                              $compileNode);\n            if (isObject(directiveValue)) {\n              newIsolateScopeDirective = directive;\n            }\n          }\n        }\n\n        directiveName = directive.name;\n\n        if (!directive.templateUrl && directive.controller) {\n          directiveValue = directive.controller;\n          controllerDirectives = controllerDirectives || {};\n          assertNoDuplicate(\"'\" + directiveName + \"' controller\",\n              controllerDirectives[directiveName], directive, $compileNode);\n          controllerDirectives[directiveName] = directive;\n        }\n\n        if (directiveValue = directive.transclude) {\n          // Special case ngIf and ngRepeat so that we don't complain about duplicate transclusion.\n          // This option should only be used by directives that know how to how to safely handle element transclusion,\n          // where the transcluded nodes are added or replaced after linking.\n          if (!directive.$$tlb) {\n            assertNoDuplicate('transclusion', transcludeDirective, directive, $compileNode);\n            transcludeDirective = directive;\n          }\n\n          if (directiveValue == 'element') {\n            terminalPriority = directive.priority;\n            $template = groupScan(compileNode, attrStart, attrEnd);\n            $compileNode = templateAttrs.$$element =\n                jqLite(document.createComment(' ' + directiveName + ': ' +\n                                              templateAttrs[directiveName] + ' '));\n            compileNode = $compileNode[0];\n            replaceWith(jqCollection, jqLite(sliceArgs($template)), compileNode);\n\n            childTranscludeFn = compile($template, transcludeFn, terminalPriority,\n                                        replaceDirective && replaceDirective.name, {\n                                          // Don't pass in:\n                                          // - controllerDirectives - otherwise we'll create duplicates controllers\n                                          // - newIsolateScopeDirective or templateDirective - combining templates with\n                                          //   element transclusion doesn't make sense.\n                                          //\n                                          // We need only transcludeDirective so that we prevent putting transclusion\n                                          // on the same element more than once.\n                                          transcludeDirective: transcludeDirective\n                                        });\n          } else {\n            $template = jqLite(jqLiteClone(compileNode)).contents();\n            $compileNode.html(''); // clear contents\n            childTranscludeFn = compile($template, transcludeFn);\n          }\n        }\n\n        if (directive.template) {\n          assertNoDuplicate('template', templateDirective, directive, $compileNode);\n          templateDirective = directive;\n\n          directiveValue = (isFunction(directive.template))\n              ? directive.template($compileNode, templateAttrs)\n              : directive.template;\n\n          directiveValue = denormalizeTemplate(directiveValue);\n\n          if (directive.replace) {\n            replaceDirective = directive;\n            $template = jqLite('<div>' +\n                                 trim(directiveValue) +\n                               '</div>').contents();\n            compileNode = $template[0];\n\n            if ($template.length != 1 || compileNode.nodeType !== 1) {\n              throw $compileMinErr('tplrt',\n                  \"Template for directive '{0}' must have exactly one root element. {1}\",\n                  directiveName, '');\n            }\n\n            replaceWith(jqCollection, $compileNode, compileNode);\n\n            var newTemplateAttrs = {$attr: {}};\n\n            // combine directives from the original node and from the template:\n            // - take the array of directives for this element\n            // - split it into two parts, those that already applied (processed) and those that weren't (unprocessed)\n            // - collect directives from the template and sort them by priority\n            // - combine directives as: processed + template + unprocessed\n            var templateDirectives = collectDirectives(compileNode, [], newTemplateAttrs);\n            var unprocessedDirectives = directives.splice(i + 1, directives.length - (i + 1));\n\n            if (newIsolateScopeDirective) {\n              markDirectivesAsIsolate(templateDirectives);\n            }\n            directives = directives.concat(templateDirectives).concat(unprocessedDirectives);\n            mergeTemplateAttributes(templateAttrs, newTemplateAttrs);\n\n            ii = directives.length;\n          } else {\n            $compileNode.html(directiveValue);\n          }\n        }\n\n        if (directive.templateUrl) {\n          assertNoDuplicate('template', templateDirective, directive, $compileNode);\n          templateDirective = directive;\n\n          if (directive.replace) {\n            replaceDirective = directive;\n          }\n\n          nodeLinkFn = compileTemplateUrl(directives.splice(i, directives.length - i), $compileNode,\n              templateAttrs, jqCollection, childTranscludeFn, preLinkFns, postLinkFns, {\n                controllerDirectives: controllerDirectives,\n                newIsolateScopeDirective: newIsolateScopeDirective,\n                templateDirective: templateDirective,\n                transcludeDirective: transcludeDirective\n              });\n          ii = directives.length;\n        } else if (directive.compile) {\n          try {\n            linkFn = directive.compile($compileNode, templateAttrs, childTranscludeFn);\n            if (isFunction(linkFn)) {\n              addLinkFns(null, linkFn, attrStart, attrEnd);\n            } else if (linkFn) {\n              addLinkFns(linkFn.pre, linkFn.post, attrStart, attrEnd);\n            }\n          } catch (e) {\n            $exceptionHandler(e, startingTag($compileNode));\n          }\n        }\n\n        if (directive.terminal) {\n          nodeLinkFn.terminal = true;\n          terminalPriority = Math.max(terminalPriority, directive.priority);\n        }\n\n      }\n\n      nodeLinkFn.scope = newScopeDirective && newScopeDirective.scope === true;\n      nodeLinkFn.transclude = transcludeDirective && childTranscludeFn;\n\n      // might be normal or delayed nodeLinkFn depending on if templateUrl is present\n      return nodeLinkFn;\n\n      ////////////////////\n\n      function addLinkFns(pre, post, attrStart, attrEnd) {\n        if (pre) {\n          if (attrStart) pre = groupElementsLinkFnWrapper(pre, attrStart, attrEnd);\n          pre.require = directive.require;\n          if (newIsolateScopeDirective === directive || directive.$$isolateScope) {\n            pre = cloneAndAnnotateFn(pre, {isolateScope: true});\n          }\n          preLinkFns.push(pre);\n        }\n        if (post) {\n          if (attrStart) post = groupElementsLinkFnWrapper(post, attrStart, attrEnd);\n          post.require = directive.require;\n          if (newIsolateScopeDirective === directive || directive.$$isolateScope) {\n            post = cloneAndAnnotateFn(post, {isolateScope: true});\n          }\n          postLinkFns.push(post);\n        }\n      }\n\n\n      function getControllers(require, $element) {\n        var value, retrievalMethod = 'data', optional = false;\n        if (isString(require)) {\n          while((value = require.charAt(0)) == '^' || value == '?') {\n            require = require.substr(1);\n            if (value == '^') {\n              retrievalMethod = 'inheritedData';\n            }\n            optional = optional || value == '?';\n          }\n\n          value = $element[retrievalMethod]('$' + require + 'Controller');\n\n          if ($element[0].nodeType == 8 && $element[0].$$controller) { // Transclusion comment node\n            value = value || $element[0].$$controller;\n            $element[0].$$controller = null;\n          }\n\n          if (!value && !optional) {\n            throw $compileMinErr('ctreq',\n                \"Controller '{0}', required by directive '{1}', can't be found!\",\n                require, directiveName);\n          }\n          return value;\n        } else if (isArray(require)) {\n          value = [];\n          forEach(require, function(require) {\n            value.push(getControllers(require, $element));\n          });\n        }\n        return value;\n      }\n\n\n      function nodeLinkFn(childLinkFn, scope, linkNode, $rootElement, boundTranscludeFn) {\n        var attrs, $element, i, ii, linkFn, controller, isolateScope;\n\n        if (compileNode === linkNode) {\n          attrs = templateAttrs;\n        } else {\n          attrs = shallowCopy(templateAttrs, new Attributes(jqLite(linkNode), templateAttrs.$attr));\n        }\n        $element = attrs.$$element;\n\n        if (newIsolateScopeDirective) {\n          var LOCAL_REGEXP = /^\\s*([@=&])(\\??)\\s*(\\w*)\\s*$/;\n          var $linkNode = jqLite(linkNode);\n\n          isolateScope = scope.$new(true);\n\n          if (templateDirective && (templateDirective === newIsolateScopeDirective.$$originalDirective)) {\n            $linkNode.data('$isolateScope', isolateScope) ;\n          } else {\n            $linkNode.data('$isolateScopeNoTemplate', isolateScope);\n          }\n\n\n\n          safeAddClass($linkNode, 'ng-isolate-scope');\n\n          forEach(newIsolateScopeDirective.scope, function(definition, scopeName) {\n            var match = definition.match(LOCAL_REGEXP) || [],\n                attrName = match[3] || scopeName,\n                optional = (match[2] == '?'),\n                mode = match[1], // @, =, or &\n                lastValue,\n                parentGet, parentSet;\n\n            isolateScope.$$isolateBindings[scopeName] = mode + attrName;\n\n            switch (mode) {\n\n              case '@':\n                attrs.$observe(attrName, function(value) {\n                  isolateScope[scopeName] = value;\n                });\n                attrs.$$observers[attrName].$$scope = scope;\n                if( attrs[attrName] ) {\n                  // If the attribute has been provided then we trigger an interpolation to ensure\n                  // the value is there for use in the link fn\n                  isolateScope[scopeName] = $interpolate(attrs[attrName])(scope);\n                }\n                break;\n\n              case '=':\n                if (optional && !attrs[attrName]) {\n                  return;\n                }\n                parentGet = $parse(attrs[attrName]);\n                parentSet = parentGet.assign || function() {\n                  // reset the change, or we will throw this exception on every $digest\n                  lastValue = isolateScope[scopeName] = parentGet(scope);\n                  throw $compileMinErr('nonassign',\n                      \"Expression '{0}' used with directive '{1}' is non-assignable!\",\n                      attrs[attrName], newIsolateScopeDirective.name);\n                };\n                lastValue = isolateScope[scopeName] = parentGet(scope);\n                isolateScope.$watch(function parentValueWatch() {\n                  var parentValue = parentGet(scope);\n\n                  if (parentValue !== isolateScope[scopeName]) {\n                    // we are out of sync and need to copy\n                    if (parentValue !== lastValue) {\n                      // parent changed and it has precedence\n                      lastValue = isolateScope[scopeName] = parentValue;\n                    } else {\n                      // if the parent can be assigned then do so\n                      parentSet(scope, parentValue = lastValue = isolateScope[scopeName]);\n                    }\n                  }\n                  return parentValue;\n                });\n                break;\n\n              case '&':\n                parentGet = $parse(attrs[attrName]);\n                isolateScope[scopeName] = function(locals) {\n                  return parentGet(scope, locals);\n                };\n                break;\n\n              default:\n                throw $compileMinErr('iscp',\n                    \"Invalid isolate scope definition for directive '{0}'.\" +\n                    \" Definition: {... {1}: '{2}' ...}\",\n                    newIsolateScopeDirective.name, scopeName, definition);\n            }\n          });\n        }\n\n        if (controllerDirectives) {\n          forEach(controllerDirectives, function(directive) {\n            var locals = {\n              $scope: directive === newIsolateScopeDirective || directive.$$isolateScope ? isolateScope : scope,\n              $element: $element,\n              $attrs: attrs,\n              $transclude: boundTranscludeFn\n            }, controllerInstance;\n\n            controller = directive.controller;\n            if (controller == '@') {\n              controller = attrs[directive.name];\n            }\n\n            controllerInstance = $controller(controller, locals);\n\n            // Directives with element transclusion and a controller need to attach controller\n            // to the comment node created by the compiler, but jQuery .data doesn't support\n            // attaching data to comment nodes so instead we set it directly on the element and\n            // remove it after we read it later.\n            if ($element[0].nodeType == 8) { // Transclusion comment node\n              $element[0].$$controller = controllerInstance;\n            } else {\n              $element.data('$' + directive.name + 'Controller', controllerInstance);\n            }\n            if (directive.controllerAs) {\n              locals.$scope[directive.controllerAs] = controllerInstance;\n            }\n          });\n        }\n\n        // PRELINKING\n        for(i = 0, ii = preLinkFns.length; i < ii; i++) {\n          try {\n            linkFn = preLinkFns[i];\n            linkFn(linkFn.isolateScope ? isolateScope : scope, $element, attrs,\n                linkFn.require && getControllers(linkFn.require, $element));\n          } catch (e) {\n            $exceptionHandler(e, startingTag($element));\n          }\n        }\n\n        // RECURSION\n        // We only pass the isolate scope, if the isolate directive has a template,\n        // otherwise the child elements do not belong to the isolate directive.\n        var scopeToChild = scope;\n        if (newIsolateScopeDirective && (newIsolateScopeDirective.template || newIsolateScopeDirective.templateUrl === null)) {\n          scopeToChild = isolateScope;\n        }\n        childLinkFn && childLinkFn(scopeToChild, linkNode.childNodes, undefined, boundTranscludeFn);\n\n        // POSTLINKING\n        for(i = postLinkFns.length - 1; i >= 0; i--) {\n          try {\n            linkFn = postLinkFns[i];\n            linkFn(linkFn.isolateScope ? isolateScope : scope, $element, attrs,\n                linkFn.require && getControllers(linkFn.require, $element));\n          } catch (e) {\n            $exceptionHandler(e, startingTag($element));\n          }\n        }\n      }\n    }\n\n    function markDirectivesAsIsolate(directives) {\n      // mark all directives as needing isolate scope.\n      for (var j = 0, jj = directives.length; j < jj; j++) {\n        directives[j] = inherit(directives[j], {$$isolateScope: true});\n      }\n    }\n\n    /**\n     * looks up the directive and decorates it with exception handling and proper parameters. We\n     * call this the boundDirective.\n     *\n     * @param {string} name name of the directive to look up.\n     * @param {string} location The directive must be found in specific format.\n     *   String containing any of theses characters:\n     *\n     *   * `E`: element name\n     *   * `A': attribute\n     *   * `C`: class\n     *   * `M`: comment\n     * @returns true if directive was added.\n     */\n    function addDirective(tDirectives, name, location, maxPriority, ignoreDirective, startAttrName,\n                          endAttrName) {\n      if (name === ignoreDirective) return null;\n      var match = null;\n      if (hasDirectives.hasOwnProperty(name)) {\n        for(var directive, directives = $injector.get(name + Suffix),\n            i = 0, ii = directives.length; i<ii; i++) {\n          try {\n            directive = directives[i];\n            if ( (maxPriority === undefined || maxPriority > directive.priority) &&\n                 directive.restrict.indexOf(location) != -1) {\n              if (startAttrName) {\n                directive = inherit(directive, {$$start: startAttrName, $$end: endAttrName});\n              }\n              tDirectives.push(directive);\n              match = directive;\n            }\n          } catch(e) { $exceptionHandler(e); }\n        }\n      }\n      return match;\n    }\n\n\n    /**\n     * When the element is replaced with HTML template then the new attributes\n     * on the template need to be merged with the existing attributes in the DOM.\n     * The desired effect is to have both of the attributes present.\n     *\n     * @param {object} dst destination attributes (original DOM)\n     * @param {object} src source attributes (from the directive template)\n     */\n    function mergeTemplateAttributes(dst, src) {\n      var srcAttr = src.$attr,\n          dstAttr = dst.$attr,\n          $element = dst.$$element;\n\n      // reapply the old attributes to the new element\n      forEach(dst, function(value, key) {\n        if (key.charAt(0) != '$') {\n          if (src[key]) {\n            value += (key === 'style' ? ';' : ' ') + src[key];\n          }\n          dst.$set(key, value, true, srcAttr[key]);\n        }\n      });\n\n      // copy the new attributes on the old attrs object\n      forEach(src, function(value, key) {\n        if (key == 'class') {\n          safeAddClass($element, value);\n          dst['class'] = (dst['class'] ? dst['class'] + ' ' : '') + value;\n        } else if (key == 'style') {\n          $element.attr('style', $element.attr('style') + ';' + value);\n          // `dst` will never contain hasOwnProperty as DOM parser won't let it.\n          // You will get an \"InvalidCharacterError: DOM Exception 5\" error if you\n          // have an attribute like \"has-own-property\" or \"data-has-own-property\", etc.\n        } else if (key.charAt(0) != '$' && !dst.hasOwnProperty(key)) {\n          dst[key] = value;\n          dstAttr[key] = srcAttr[key];\n        }\n      });\n    }\n\n\n    function compileTemplateUrl(directives, $compileNode, tAttrs,\n        $rootElement, childTranscludeFn, preLinkFns, postLinkFns, previousCompileContext) {\n      var linkQueue = [],\n          afterTemplateNodeLinkFn,\n          afterTemplateChildLinkFn,\n          beforeTemplateCompileNode = $compileNode[0],\n          origAsyncDirective = directives.shift(),\n          // The fact that we have to copy and patch the directive seems wrong!\n          derivedSyncDirective = extend({}, origAsyncDirective, {\n            templateUrl: null, transclude: null, replace: null, $$originalDirective: origAsyncDirective\n          }),\n          templateUrl = (isFunction(origAsyncDirective.templateUrl))\n              ? origAsyncDirective.templateUrl($compileNode, tAttrs)\n              : origAsyncDirective.templateUrl;\n\n      $compileNode.html('');\n\n      $http.get($sce.getTrustedResourceUrl(templateUrl), {cache: $templateCache}).\n        success(function(content) {\n          var compileNode, tempTemplateAttrs, $template;\n\n          content = denormalizeTemplate(content);\n\n          if (origAsyncDirective.replace) {\n            $template = jqLite('<div>' + trim(content) + '</div>').contents();\n            compileNode = $template[0];\n\n            if ($template.length != 1 || compileNode.nodeType !== 1) {\n              throw $compileMinErr('tplrt',\n                  \"Template for directive '{0}' must have exactly one root element. {1}\",\n                  origAsyncDirective.name, templateUrl);\n            }\n\n            tempTemplateAttrs = {$attr: {}};\n            replaceWith($rootElement, $compileNode, compileNode);\n            var templateDirectives = collectDirectives(compileNode, [], tempTemplateAttrs);\n\n            if (isObject(origAsyncDirective.scope)) {\n              markDirectivesAsIsolate(templateDirectives);\n            }\n            directives = templateDirectives.concat(directives);\n            mergeTemplateAttributes(tAttrs, tempTemplateAttrs);\n          } else {\n            compileNode = beforeTemplateCompileNode;\n            $compileNode.html(content);\n          }\n\n          directives.unshift(derivedSyncDirective);\n\n          afterTemplateNodeLinkFn = applyDirectivesToNode(directives, compileNode, tAttrs,\n              childTranscludeFn, $compileNode, origAsyncDirective, preLinkFns, postLinkFns,\n              previousCompileContext);\n          forEach($rootElement, function(node, i) {\n            if (node == compileNode) {\n              $rootElement[i] = $compileNode[0];\n            }\n          });\n          afterTemplateChildLinkFn = compileNodes($compileNode[0].childNodes, childTranscludeFn);\n\n\n          while(linkQueue.length) {\n            var scope = linkQueue.shift(),\n                beforeTemplateLinkNode = linkQueue.shift(),\n                linkRootElement = linkQueue.shift(),\n                controller = linkQueue.shift(),\n                linkNode = $compileNode[0];\n\n            if (beforeTemplateLinkNode !== beforeTemplateCompileNode) {\n              // it was cloned therefore we have to clone as well.\n              linkNode = jqLiteClone(compileNode);\n              replaceWith(linkRootElement, jqLite(beforeTemplateLinkNode), linkNode);\n            }\n\n            afterTemplateNodeLinkFn(afterTemplateChildLinkFn, scope, linkNode, $rootElement,\n                                    controller);\n          }\n          linkQueue = null;\n        }).\n        error(function(response, code, headers, config) {\n          throw $compileMinErr('tpload', 'Failed to load template: {0}', config.url);\n        });\n\n      return function delayedNodeLinkFn(ignoreChildLinkFn, scope, node, rootElement, controller) {\n        if (linkQueue) {\n          linkQueue.push(scope);\n          linkQueue.push(node);\n          linkQueue.push(rootElement);\n          linkQueue.push(controller);\n        } else {\n          afterTemplateNodeLinkFn(afterTemplateChildLinkFn, scope, node, rootElement, controller);\n        }\n      };\n    }\n\n\n    /**\n     * Sorting function for bound directives.\n     */\n    function byPriority(a, b) {\n      var diff = b.priority - a.priority;\n      if (diff !== 0) return diff;\n      if (a.name !== b.name) return (a.name < b.name) ? -1 : 1;\n      return a.index - b.index;\n    }\n\n\n    function assertNoDuplicate(what, previousDirective, directive, element) {\n      if (previousDirective) {\n        throw $compileMinErr('multidir', 'Multiple directives [{0}, {1}] asking for {2} on: {3}',\n            previousDirective.name, directive.name, what, startingTag(element));\n      }\n    }\n\n\n    function addTextInterpolateDirective(directives, text) {\n      var interpolateFn = $interpolate(text, true);\n      if (interpolateFn) {\n        directives.push({\n          priority: 0,\n          compile: valueFn(function textInterpolateLinkFn(scope, node) {\n            var parent = node.parent(),\n                bindings = parent.data('$binding') || [];\n            bindings.push(interpolateFn);\n            safeAddClass(parent.data('$binding', bindings), 'ng-binding');\n            scope.$watch(interpolateFn, function interpolateFnWatchAction(value) {\n              node[0].nodeValue = value;\n            });\n          })\n        });\n      }\n    }\n\n\n    function getTrustedContext(node, attrNormalizedName) {\n      // maction[xlink:href] can source SVG.  It's not limited to <maction>.\n      if (attrNormalizedName == \"xlinkHref\" ||\n          (nodeName_(node) != \"IMG\" && (attrNormalizedName == \"src\" ||\n                                        attrNormalizedName == \"ngSrc\"))) {\n        return $sce.RESOURCE_URL;\n      }\n    }\n\n\n    function addAttrInterpolateDirective(node, directives, value, name) {\n      var interpolateFn = $interpolate(value, true);\n\n      // no interpolation found -> ignore\n      if (!interpolateFn) return;\n\n\n      if (name === \"multiple\" && nodeName_(node) === \"SELECT\") {\n        throw $compileMinErr(\"selmulti\",\n            \"Binding to the 'multiple' attribute is not supported. Element: {0}\",\n            startingTag(node));\n      }\n\n      directives.push({\n        priority: 100,\n        compile: function() {\n            return {\n              pre: function attrInterpolatePreLinkFn(scope, element, attr) {\n                var $$observers = (attr.$$observers || (attr.$$observers = {}));\n\n                if (EVENT_HANDLER_ATTR_REGEXP.test(name)) {\n                  throw $compileMinErr('nodomevents',\n                      \"Interpolations for HTML DOM event attributes are disallowed.  Please use the \" +\n                          \"ng- versions (such as ng-click instead of onclick) instead.\");\n                }\n\n                // we need to interpolate again, in case the attribute value has been updated\n                // (e.g. by another directive's compile function)\n                interpolateFn = $interpolate(attr[name], true, getTrustedContext(node, name));\n\n                // if attribute was updated so that there is no interpolation going on we don't want to\n                // register any observers\n                if (!interpolateFn) return;\n\n                // TODO(i): this should likely be attr.$set(name, iterpolateFn(scope) so that we reset the\n                // actual attr value\n                attr[name] = interpolateFn(scope);\n                ($$observers[name] || ($$observers[name] = [])).$$inter = true;\n                (attr.$$observers && attr.$$observers[name].$$scope || scope).\n                    $watch(interpolateFn, function interpolateFnWatchAction(value) {\n                      attr.$set(name, value);\n                    });\n              }\n            };\n          }\n      });\n    }\n\n\n    /**\n     * This is a special jqLite.replaceWith, which can replace items which\n     * have no parents, provided that the containing jqLite collection is provided.\n     *\n     * @param {JqLite=} $rootElement The root of the compile tree. Used so that we can replace nodes\n     *                               in the root of the tree.\n     * @param {JqLite} elementsToRemove The jqLite element which we are going to replace. We keep\n     *                                  the shell, but replace its DOM node reference.\n     * @param {Node} newNode The new DOM node.\n     */\n    function replaceWith($rootElement, elementsToRemove, newNode) {\n      var firstElementToRemove = elementsToRemove[0],\n          removeCount = elementsToRemove.length,\n          parent = firstElementToRemove.parentNode,\n          i, ii;\n\n      if ($rootElement) {\n        for(i = 0, ii = $rootElement.length; i < ii; i++) {\n          if ($rootElement[i] == firstElementToRemove) {\n            $rootElement[i++] = newNode;\n            for (var j = i, j2 = j + removeCount - 1,\n                     jj = $rootElement.length;\n                 j < jj; j++, j2++) {\n              if (j2 < jj) {\n                $rootElement[j] = $rootElement[j2];\n              } else {\n                delete $rootElement[j];\n              }\n            }\n            $rootElement.length -= removeCount - 1;\n            break;\n          }\n        }\n      }\n\n      if (parent) {\n        parent.replaceChild(newNode, firstElementToRemove);\n      }\n      var fragment = document.createDocumentFragment();\n      fragment.appendChild(firstElementToRemove);\n      newNode[jqLite.expando] = firstElementToRemove[jqLite.expando];\n      for (var k = 1, kk = elementsToRemove.length; k < kk; k++) {\n        var element = elementsToRemove[k];\n        jqLite(element).remove(); // must do this way to clean up expando\n        fragment.appendChild(element);\n        delete elementsToRemove[k];\n      }\n\n      elementsToRemove[0] = newNode;\n      elementsToRemove.length = 1;\n    }\n\n\n    function cloneAndAnnotateFn(fn, annotation) {\n      return extend(function() { return fn.apply(null, arguments); }, fn, annotation);\n    }\n  }];\n}\n\nvar PREFIX_REGEXP = /^(x[\\:\\-_]|data[\\:\\-_])/i;\n/**\n * Converts all accepted directives format into proper directive name.\n * All of these will become 'myDirective':\n *   my:Directive\n *   my-directive\n *   x-my-directive\n *   data-my:directive\n *\n * Also there is special case for Moz prefix starting with upper case letter.\n * @param name Name to normalize\n */\nfunction directiveNormalize(name) {\n  return camelCase(name.replace(PREFIX_REGEXP, ''));\n}\n\n/**\n * @ngdoc object\n * @name ng.$compile.directive.Attributes\n *\n * @description\n * A shared object between directive compile / linking functions which contains normalized DOM\n * element attributes. The values reflect current binding state `{{ }}`. The normalization is\n * needed since all of these are treated as equivalent in Angular:\n *\n *    <span ng:bind=\"a\" ng-bind=\"a\" data-ng-bind=\"a\" x-ng-bind=\"a\">\n */\n\n/**\n * @ngdoc property\n * @name ng.$compile.directive.Attributes#$attr\n * @propertyOf ng.$compile.directive.Attributes\n * @returns {object} A map of DOM element attribute names to the normalized name. This is\n *                   needed to do reverse lookup from normalized name back to actual name.\n */\n\n\n/**\n * @ngdoc function\n * @name ng.$compile.directive.Attributes#$set\n * @methodOf ng.$compile.directive.Attributes\n * @function\n *\n * @description\n * Set DOM element attribute value.\n *\n *\n * @param {string} name Normalized element attribute name of the property to modify. The name is\n *          revers translated using the {@link ng.$compile.directive.Attributes#$attr $attr}\n *          property to the original name.\n * @param {string} value Value to set the attribute to. The value can be an interpolated string.\n */\n\n\n\n/**\n * Closure compiler type information\n */\n\nfunction nodesetLinkingFn(\n  /* angular.Scope */ scope,\n  /* NodeList */ nodeList,\n  /* Element */ rootElement,\n  /* function(Function) */ boundTranscludeFn\n){}\n\nfunction directiveLinkingFn(\n  /* nodesetLinkingFn */ nodesetLinkingFn,\n  /* angular.Scope */ scope,\n  /* Node */ node,\n  /* Element */ rootElement,\n  /* function(Function) */ boundTranscludeFn\n){}\n\n/**\n * @ngdoc object\n * @name ng.$controllerProvider\n * @description\n * The {@link ng.$controller $controller service} is used by Angular to create new\n * controllers.\n *\n * This provider allows controller registration via the\n * {@link ng.$controllerProvider#methods_register register} method.\n */\nfunction $ControllerProvider() {\n  var controllers = {},\n      CNTRL_REG = /^(\\S+)(\\s+as\\s+(\\w+))?$/;\n\n\n  /**\n   * @ngdoc function\n   * @name ng.$controllerProvider#register\n   * @methodOf ng.$controllerProvider\n   * @param {string|Object} name Controller name, or an object map of controllers where the keys are\n   *    the names and the values are the constructors.\n   * @param {Function|Array} constructor Controller constructor fn (optionally decorated with DI\n   *    annotations in the array notation).\n   */\n  this.register = function(name, constructor) {\n    assertNotHasOwnProperty(name, 'controller');\n    if (isObject(name)) {\n      extend(controllers, name);\n    } else {\n      controllers[name] = constructor;\n    }\n  };\n\n\n  this.$get = ['$injector', '$window', function($injector, $window) {\n\n    /**\n     * @ngdoc function\n     * @name ng.$controller\n     * @requires $injector\n     *\n     * @param {Function|string} constructor If called with a function then it's considered to be the\n     *    controller constructor function. Otherwise it's considered to be a string which is used\n     *    to retrieve the controller constructor using the following steps:\n     *\n     *    * check if a controller with given name is registered via `$controllerProvider`\n     *    * check if evaluating the string on the current scope returns a constructor\n     *    * check `window[constructor]` on the global `window` object\n     *\n     * @param {Object} locals Injection locals for Controller.\n     * @return {Object} Instance of given controller.\n     *\n     * @description\n     * `$controller` service is responsible for instantiating controllers.\n     *\n     * It's just a simple call to {@link AUTO.$injector $injector}, but extracted into\n     * a service, so that one can override this service with {@link https://gist.github.com/1649788\n     * BC version}.\n     */\n    return function(expression, locals) {\n      var instance, match, constructor, identifier;\n\n      if(isString(expression)) {\n        match = expression.match(CNTRL_REG),\n        constructor = match[1],\n        identifier = match[3];\n        expression = controllers.hasOwnProperty(constructor)\n            ? controllers[constructor]\n            : getter(locals.$scope, constructor, true) || getter($window, constructor, true);\n\n        assertArgFn(expression, constructor, true);\n      }\n\n      instance = $injector.instantiate(expression, locals);\n\n      if (identifier) {\n        if (!(locals && typeof locals.$scope == 'object')) {\n          throw minErr('$controller')('noscp',\n              \"Cannot export controller '{0}' as '{1}'! No $scope object provided via `locals`.\",\n              constructor || expression.name, identifier);\n        }\n\n        locals.$scope[identifier] = instance;\n      }\n\n      return instance;\n    };\n  }];\n}\n\n/**\n * @ngdoc object\n * @name ng.$document\n * @requires $window\n *\n * @description\n * A {@link angular.element jQuery (lite)}-wrapped reference to the browser's `window.document`\n * element.\n */\nfunction $DocumentProvider(){\n  this.$get = ['$window', function(window){\n    return jqLite(window.document);\n  }];\n}\n\n/**\n * @ngdoc function\n * @name ng.$exceptionHandler\n * @requires $log\n *\n * @description\n * Any uncaught exception in angular expressions is delegated to this service.\n * The default implementation simply delegates to `$log.error` which logs it into\n * the browser console.\n * \n * In unit tests, if `angular-mocks.js` is loaded, this service is overridden by\n * {@link ngMock.$exceptionHandler mock $exceptionHandler} which aids in testing.\n *\n * ## Example:\n * \n * <pre>\n *   angular.module('exceptionOverride', []).factory('$exceptionHandler', function () {\n *     return function (exception, cause) {\n *       exception.message += ' (caused by \"' + cause + '\")';\n *       throw exception;\n *     };\n *   });\n * </pre>\n * \n * This example will override the normal action of `$exceptionHandler`, to make angular\n * exceptions fail hard when they happen, instead of just logging to the console.\n *\n * @param {Error} exception Exception associated with the error.\n * @param {string=} cause optional information about the context in which\n *       the error was thrown.\n *\n */\nfunction $ExceptionHandlerProvider() {\n  this.$get = ['$log', function($log) {\n    return function(exception, cause) {\n      $log.error.apply($log, arguments);\n    };\n  }];\n}\n\n/**\n * Parse headers into key value object\n *\n * @param {string} headers Raw headers as a string\n * @returns {Object} Parsed headers as key value object\n */\nfunction parseHeaders(headers) {\n  var parsed = {}, key, val, i;\n\n  if (!headers) return parsed;\n\n  forEach(headers.split('\\n'), function(line) {\n    i = line.indexOf(':');\n    key = lowercase(trim(line.substr(0, i)));\n    val = trim(line.substr(i + 1));\n\n    if (key) {\n      if (parsed[key]) {\n        parsed[key] += ', ' + val;\n      } else {\n        parsed[key] = val;\n      }\n    }\n  });\n\n  return parsed;\n}\n\n\n/**\n * Returns a function that provides access to parsed headers.\n *\n * Headers are lazy parsed when first requested.\n * @see parseHeaders\n *\n * @param {(string|Object)} headers Headers to provide access to.\n * @returns {function(string=)} Returns a getter function which if called with:\n *\n *   - if called with single an argument returns a single header value or null\n *   - if called with no arguments returns an object containing all headers.\n */\nfunction headersGetter(headers) {\n  var headersObj = isObject(headers) ? headers : undefined;\n\n  return function(name) {\n    if (!headersObj) headersObj =  parseHeaders(headers);\n\n    if (name) {\n      return headersObj[lowercase(name)] || null;\n    }\n\n    return headersObj;\n  };\n}\n\n\n/**\n * Chain all given functions\n *\n * This function is used for both request and response transforming\n *\n * @param {*} data Data to transform.\n * @param {function(string=)} headers Http headers getter fn.\n * @param {(function|Array.<function>)} fns Function or an array of functions.\n * @returns {*} Transformed data.\n */\nfunction transformData(data, headers, fns) {\n  if (isFunction(fns))\n    return fns(data, headers);\n\n  forEach(fns, function(fn) {\n    data = fn(data, headers);\n  });\n\n  return data;\n}\n\n\nfunction isSuccess(status) {\n  return 200 <= status && status < 300;\n}\n\n\nfunction $HttpProvider() {\n  var JSON_START = /^\\s*(\\[|\\{[^\\{])/,\n      JSON_END = /[\\}\\]]\\s*$/,\n      PROTECTION_PREFIX = /^\\)\\]\\}',?\\n/,\n      CONTENT_TYPE_APPLICATION_JSON = {'Content-Type': 'application/json;charset=utf-8'};\n\n  var defaults = this.defaults = {\n    // transform incoming response data\n    transformResponse: [function(data) {\n      if (isString(data)) {\n        // strip json vulnerability protection prefix\n        data = data.replace(PROTECTION_PREFIX, '');\n        if (JSON_START.test(data) && JSON_END.test(data))\n          data = fromJson(data);\n      }\n      return data;\n    }],\n\n    // transform outgoing request data\n    transformRequest: [function(d) {\n      return isObject(d) && !isFile(d) ? toJson(d) : d;\n    }],\n\n    // default headers\n    headers: {\n      common: {\n        'Accept': 'application/json, text/plain, */*'\n      },\n      post:   CONTENT_TYPE_APPLICATION_JSON,\n      put:    CONTENT_TYPE_APPLICATION_JSON,\n      patch:  CONTENT_TYPE_APPLICATION_JSON\n    },\n\n    xsrfCookieName: 'XSRF-TOKEN',\n    xsrfHeaderName: 'X-XSRF-TOKEN'\n  };\n\n  /**\n   * Are ordered by request, i.e. they are applied in the same order as the\n   * array, on request, but reverse order, on response.\n   */\n  var interceptorFactories = this.interceptors = [];\n\n  /**\n   * For historical reasons, response interceptors are ordered by the order in which\n   * they are applied to the response. (This is the opposite of interceptorFactories)\n   */\n  var responseInterceptorFactories = this.responseInterceptors = [];\n\n  this.$get = ['$httpBackend', '$browser', '$cacheFactory', '$rootScope', '$q', '$injector',\n      function($httpBackend, $browser, $cacheFactory, $rootScope, $q, $injector) {\n\n    var defaultCache = $cacheFactory('$http');\n\n    /**\n     * Interceptors stored in reverse order. Inner interceptors before outer interceptors.\n     * The reversal is needed so that we can build up the interception chain around the\n     * server request.\n     */\n    var reversedInterceptors = [];\n\n    forEach(interceptorFactories, function(interceptorFactory) {\n      reversedInterceptors.unshift(isString(interceptorFactory)\n          ? $injector.get(interceptorFactory) : $injector.invoke(interceptorFactory));\n    });\n\n    forEach(responseInterceptorFactories, function(interceptorFactory, index) {\n      var responseFn = isString(interceptorFactory)\n          ? $injector.get(interceptorFactory)\n          : $injector.invoke(interceptorFactory);\n\n      /**\n       * Response interceptors go before \"around\" interceptors (no real reason, just\n       * had to pick one.) But they are already reversed, so we can't use unshift, hence\n       * the splice.\n       */\n      reversedInterceptors.splice(index, 0, {\n        response: function(response) {\n          return responseFn($q.when(response));\n        },\n        responseError: function(response) {\n          return responseFn($q.reject(response));\n        }\n      });\n    });\n\n\n    /**\n     * @ngdoc function\n     * @name ng.$http\n     * @requires $httpBackend\n     * @requires $browser\n     * @requires $cacheFactory\n     * @requires $rootScope\n     * @requires $q\n     * @requires $injector\n     *\n     * @description\n     * The `$http` service is a core Angular service that facilitates communication with the remote\n     * HTTP servers via the browser's {@link https://developer.mozilla.org/en/xmlhttprequest\n     * XMLHttpRequest} object or via {@link http://en.wikipedia.org/wiki/JSONP JSONP}.\n     *\n     * For unit testing applications that use `$http` service, see\n     * {@link ngMock.$httpBackend $httpBackend mock}.\n     *\n     * For a higher level of abstraction, please check out the {@link ngResource.$resource\n     * $resource} service.\n     *\n     * The $http API is based on the {@link ng.$q deferred/promise APIs} exposed by\n     * the $q service. While for simple usage patterns this doesn't matter much, for advanced usage\n     * it is important to familiarize yourself with these APIs and the guarantees they provide.\n     *\n     *\n     * # General usage\n     * The `$http` service is a function which takes a single argument — a configuration object —\n     * that is used to generate an HTTP request and returns  a {@link ng.$q promise}\n     * with two $http specific methods: `success` and `error`.\n     *\n     * <pre>\n     *   $http({method: 'GET', url: '/someUrl'}).\n     *     success(function(data, status, headers, config) {\n     *       // this callback will be called asynchronously\n     *       // when the response is available\n     *     }).\n     *     error(function(data, status, headers, config) {\n     *       // called asynchronously if an error occurs\n     *       // or server returns response with an error status.\n     *     });\n     * </pre>\n     *\n     * Since the returned value of calling the $http function is a `promise`, you can also use\n     * the `then` method to register callbacks, and these callbacks will receive a single argument –\n     * an object representing the response. See the API signature and type info below for more\n     * details.\n     *\n     * A response status code between 200 and 299 is considered a success status and\n     * will result in the success callback being called. Note that if the response is a redirect,\n     * XMLHttpRequest will transparently follow it, meaning that the error callback will not be\n     * called for such responses.\n     * \n     * # Calling $http from outside AngularJS\n     * The `$http` service will not actually send the request until the next `$digest()` is\n     * executed. Normally this is not an issue, since almost all the time your call to `$http` will\n     * be from within a `$apply()` block.\n     * If you are calling `$http` from outside Angular, then you should wrap it in a call to\n     * `$apply` to cause a $digest to occur and also to handle errors in the block correctly.\n     *\n     * ```\n     * $scope.$apply(function() {\n     *   $http(...);\n     * });\n     * ```\n     *\n     * # Writing Unit Tests that use $http\n     * When unit testing you are mostly responsible for scheduling the `$digest` cycle. If you do\n     * not trigger a `$digest` before calling `$httpBackend.flush()` then the request will not have\n     * been made and `$httpBackend.expect(...)` expectations will fail.  The solution is to run the\n     * code that calls the `$http()` method inside a $apply block as explained in the previous\n     * section.\n     *\n     * ```\n     * $httpBackend.expectGET(...);\n     * $scope.$apply(function() {\n     *   $http.get(...);\n     * });\n     * $httpBackend.flush();\n     * ```\n     *\n     * # Shortcut methods\n     *\n     * Since all invocations of the $http service require passing in an HTTP method and URL, and\n     * POST/PUT requests require request data to be provided as well, shortcut methods\n     * were created:\n     *\n     * <pre>\n     *   $http.get('/someUrl').success(successCallback);\n     *   $http.post('/someUrl', data).success(successCallback);\n     * </pre>\n     *\n     * Complete list of shortcut methods:\n     *\n     * - {@link ng.$http#methods_get $http.get}\n     * - {@link ng.$http#methods_head $http.head}\n     * - {@link ng.$http#methods_post $http.post}\n     * - {@link ng.$http#methods_put $http.put}\n     * - {@link ng.$http#methods_delete $http.delete}\n     * - {@link ng.$http#methods_jsonp $http.jsonp}\n     *\n     *\n     * # Setting HTTP Headers\n     *\n     * The $http service will automatically add certain HTTP headers to all requests. These defaults\n     * can be fully configured by accessing the `$httpProvider.defaults.headers` configuration\n     * object, which currently contains this default configuration:\n     *\n     * - `$httpProvider.defaults.headers.common` (headers that are common for all requests):\n     *   - `Accept: application/json, text/plain, * / *`\n     * - `$httpProvider.defaults.headers.post`: (header defaults for POST requests)\n     *   - `Content-Type: application/json`\n     * - `$httpProvider.defaults.headers.put` (header defaults for PUT requests)\n     *   - `Content-Type: application/json`\n     *\n     * To add or overwrite these defaults, simply add or remove a property from these configuration\n     * objects. To add headers for an HTTP method other than POST or PUT, simply add a new object\n     * with the lowercased HTTP method name as the key, e.g.\n     * `$httpProvider.defaults.headers.get = { 'My-Header' : 'value' }.\n     *\n     * The defaults can also be set at runtime via the `$http.defaults` object in the same\n     * fashion. In addition, you can supply a `headers` property in the config object passed when\n     * calling `$http(config)`, which overrides the defaults without changing them globally.\n     *\n     *\n     * # Transforming Requests and Responses\n     *\n     * Both requests and responses can be transformed using transform functions. By default, Angular\n     * applies these transformations:\n     *\n     * Request transformations:\n     *\n     * - If the `data` property of the request configuration object contains an object, serialize it\n     *   into JSON format.\n     *\n     * Response transformations:\n     *\n     *  - If XSRF prefix is detected, strip it (see Security Considerations section below).\n     *  - If JSON response is detected, deserialize it using a JSON parser.\n     *\n     * To globally augment or override the default transforms, modify the\n     * `$httpProvider.defaults.transformRequest` and `$httpProvider.defaults.transformResponse`\n     * properties. These properties are by default an array of transform functions, which allows you\n     * to `push` or `unshift` a new transformation function into the transformation chain. You can\n     * also decide to completely override any default transformations by assigning your\n     * transformation functions to these properties directly without the array wrapper.\n     *\n     * Similarly, to locally override the request/response transforms, augment the\n     * `transformRequest` and/or `transformResponse` properties of the configuration object passed\n     * into `$http`.\n     *\n     *\n     * # Caching\n     *\n     * To enable caching, set the configuration property `cache` to `true`. When the cache is\n     * enabled, `$http` stores the response from the server in local cache. Next time the\n     * response is served from the cache without sending a request to the server.\n     *\n     * Note that even if the response is served from cache, delivery of the data is asynchronous in\n     * the same way that real requests are.\n     *\n     * If there are multiple GET requests for the same URL that should be cached using the same\n     * cache, but the cache is not populated yet, only one request to the server will be made and\n     * the remaining requests will be fulfilled using the response from the first request.\n     *\n     * A custom default cache built with $cacheFactory can be provided in $http.defaults.cache.\n     * To skip it, set configuration property `cache` to `false`.\n     *\n     *\n     * # Interceptors\n     *\n     * Before you start creating interceptors, be sure to understand the\n     * {@link ng.$q $q and deferred/promise APIs}.\n     *\n     * For purposes of global error handling, authentication, or any kind of synchronous or\n     * asynchronous pre-processing of request or postprocessing of responses, it is desirable to be\n     * able to intercept requests before they are handed to the server and\n     * responses before they are handed over to the application code that\n     * initiated these requests. The interceptors leverage the {@link ng.$q\n     * promise APIs} to fulfill this need for both synchronous and asynchronous pre-processing.\n     *\n     * The interceptors are service factories that are registered with the `$httpProvider` by\n     * adding them to the `$httpProvider.interceptors` array. The factory is called and\n     * injected with dependencies (if specified) and returns the interceptor.\n     *\n     * There are two kinds of interceptors (and two kinds of rejection interceptors):\n     *\n     *   * `request`: interceptors get called with http `config` object. The function is free to\n     *     modify the `config` or create a new one. The function needs to return the `config`\n     *     directly or as a promise.\n     *   * `requestError`: interceptor gets called when a previous interceptor threw an error or\n     *     resolved with a rejection.\n     *   * `response`: interceptors get called with http `response` object. The function is free to\n     *     modify the `response` or create a new one. The function needs to return the `response`\n     *     directly or as a promise.\n     *   * `responseError`: interceptor gets called when a previous interceptor threw an error or\n     *     resolved with a rejection.\n     *\n     *\n     * <pre>\n     *   // register the interceptor as a service\n     *   $provide.factory('myHttpInterceptor', function($q, dependency1, dependency2) {\n     *     return {\n     *       // optional method\n     *       'request': function(config) {\n     *         // do something on success\n     *         return config || $q.when(config);\n     *       },\n     *\n     *       // optional method\n     *      'requestError': function(rejection) {\n     *         // do something on error\n     *         if (canRecover(rejection)) {\n     *           return responseOrNewPromise\n     *         }\n     *         return $q.reject(rejection);\n     *       },\n     *\n     *\n     *\n     *       // optional method\n     *       'response': function(response) {\n     *         // do something on success\n     *         return response || $q.when(response);\n     *       },\n     *\n     *       // optional method\n     *      'responseError': function(rejection) {\n     *         // do something on error\n     *         if (canRecover(rejection)) {\n     *           return responseOrNewPromise\n     *         }\n     *         return $q.reject(rejection);\n     *       };\n     *     }\n     *   });\n     *\n     *   $httpProvider.interceptors.push('myHttpInterceptor');\n     *\n     *\n     *   // register the interceptor via an anonymous factory\n     *   $httpProvider.interceptors.push(function($q, dependency1, dependency2) {\n     *     return {\n     *      'request': function(config) {\n     *          // same as above\n     *       },\n     *       'response': function(response) {\n     *          // same as above\n     *       }\n     *     };\n     *   });\n     * </pre>\n     *\n     * # Response interceptors (DEPRECATED)\n     *\n     * Before you start creating interceptors, be sure to understand the\n     * {@link ng.$q $q and deferred/promise APIs}.\n     *\n     * For purposes of global error handling, authentication or any kind of synchronous or\n     * asynchronous preprocessing of received responses, it is desirable to be able to intercept\n     * responses for http requests before they are handed over to the application code that\n     * initiated these requests. The response interceptors leverage the {@link ng.$q\n     * promise apis} to fulfil this need for both synchronous and asynchronous preprocessing.\n     *\n     * The interceptors are service factories that are registered with the $httpProvider by\n     * adding them to the `$httpProvider.responseInterceptors` array. The factory is called and\n     * injected with dependencies (if specified) and returns the interceptor  — a function that\n     * takes a {@link ng.$q promise} and returns the original or a new promise.\n     *\n     * <pre>\n     *   // register the interceptor as a service\n     *   $provide.factory('myHttpInterceptor', function($q, dependency1, dependency2) {\n     *     return function(promise) {\n     *       return promise.then(function(response) {\n     *         // do something on success\n     *         return response;\n     *       }, function(response) {\n     *         // do something on error\n     *         if (canRecover(response)) {\n     *           return responseOrNewPromise\n     *         }\n     *         return $q.reject(response);\n     *       });\n     *     }\n     *   });\n     *\n     *   $httpProvider.responseInterceptors.push('myHttpInterceptor');\n     *\n     *\n     *   // register the interceptor via an anonymous factory\n     *   $httpProvider.responseInterceptors.push(function($q, dependency1, dependency2) {\n     *     return function(promise) {\n     *       // same as above\n     *     }\n     *   });\n     * </pre>\n     *\n     *\n     * # Security Considerations\n     *\n     * When designing web applications, consider security threats from:\n     *\n     * - {@link http://haacked.com/archive/2008/11/20/anatomy-of-a-subtle-json-vulnerability.aspx\n     *   JSON vulnerability}\n     * - {@link http://en.wikipedia.org/wiki/Cross-site_request_forgery XSRF}\n     *\n     * Both server and the client must cooperate in order to eliminate these threats. Angular comes\n     * pre-configured with strategies that address these issues, but for this to work backend server\n     * cooperation is required.\n     *\n     * ## JSON Vulnerability Protection\n     *\n     * A {@link http://haacked.com/archive/2008/11/20/anatomy-of-a-subtle-json-vulnerability.aspx\n     * JSON vulnerability} allows third party website to turn your JSON resource URL into\n     * {@link http://en.wikipedia.org/wiki/JSONP JSONP} request under some conditions. To\n     * counter this your server can prefix all JSON requests with following string `\")]}',\\n\"`.\n     * Angular will automatically strip the prefix before processing it as JSON.\n     *\n     * For example if your server needs to return:\n     * <pre>\n     * ['one','two']\n     * </pre>\n     *\n     * which is vulnerable to attack, your server can return:\n     * <pre>\n     * )]}',\n     * ['one','two']\n     * </pre>\n     *\n     * Angular will strip the prefix, before processing the JSON.\n     *\n     *\n     * ## Cross Site Request Forgery (XSRF) Protection\n     *\n     * {@link http://en.wikipedia.org/wiki/Cross-site_request_forgery XSRF} is a technique by which\n     * an unauthorized site can gain your user's private data. Angular provides a mechanism\n     * to counter XSRF. When performing XHR requests, the $http service reads a token from a cookie\n     * (by default, `XSRF-TOKEN`) and sets it as an HTTP header (`X-XSRF-TOKEN`). Since only\n     * JavaScript that runs on your domain could read the cookie, your server can be assured that\n     * the XHR came from JavaScript running on your domain. The header will not be set for\n     * cross-domain requests.\n     *\n     * To take advantage of this, your server needs to set a token in a JavaScript readable session\n     * cookie called `XSRF-TOKEN` on the first HTTP GET request. On subsequent XHR requests the\n     * server can verify that the cookie matches `X-XSRF-TOKEN` HTTP header, and therefore be sure\n     * that only JavaScript running on your domain could have sent the request. The token must be\n     * unique for each user and must be verifiable by the server (to prevent the JavaScript from\n     * making up its own tokens). We recommend that the token is a digest of your site's\n     * authentication cookie with a {@link https://en.wikipedia.org/wiki/Salt_(cryptography) salt}\n     * for added security.\n     *\n     * The name of the headers can be specified using the xsrfHeaderName and xsrfCookieName\n     * properties of either $httpProvider.defaults, or the per-request config object.\n     *\n     *\n     * @param {object} config Object describing the request to be made and how it should be\n     *    processed. The object has following properties:\n     *\n     *    - **method** – `{string}` – HTTP method (e.g. 'GET', 'POST', etc)\n     *    - **url** – `{string}` – Absolute or relative URL of the resource that is being requested.\n     *    - **params** – `{Object.<string|Object>}` – Map of strings or objects which will be turned\n     *      to `?key1=value1&key2=value2` after the url. If the value is not a string, it will be\n     *      JSONified.\n     *    - **data** – `{string|Object}` – Data to be sent as the request message data.\n     *    - **headers** – `{Object}` – Map of strings or functions which return strings representing\n     *      HTTP headers to send to the server. If the return value of a function is null, the\n     *      header will not be sent.\n     *    - **xsrfHeaderName** – `{string}` – Name of HTTP header to populate with the XSRF token.\n     *    - **xsrfCookieName** – `{string}` – Name of cookie containing the XSRF token.\n     *    - **transformRequest** –\n     *      `{function(data, headersGetter)|Array.<function(data, headersGetter)>}` –\n     *      transform function or an array of such functions. The transform function takes the http\n     *      request body and headers and returns its transformed (typically serialized) version.\n     *    - **transformResponse** –\n     *      `{function(data, headersGetter)|Array.<function(data, headersGetter)>}` –\n     *      transform function or an array of such functions. The transform function takes the http\n     *      response body and headers and returns its transformed (typically deserialized) version.\n     *    - **cache** – `{boolean|Cache}` – If true, a default $http cache will be used to cache the\n     *      GET request, otherwise if a cache instance built with\n     *      {@link ng.$cacheFactory $cacheFactory}, this cache will be used for\n     *      caching.\n     *    - **timeout** – `{number|Promise}` – timeout in milliseconds, or {@link ng.$q promise}\n     *      that should abort the request when resolved.\n     *    - **withCredentials** - `{boolean}` - whether to to set the `withCredentials` flag on the\n     *      XHR object. See {@link https://developer.mozilla.org/en/http_access_control#section_5\n     *      requests with credentials} for more information.\n     *    - **responseType** - `{string}` - see {@link\n     *      https://developer.mozilla.org/en-US/docs/DOM/XMLHttpRequest#responseType requestType}.\n     *\n     * @returns {HttpPromise} Returns a {@link ng.$q promise} object with the\n     *   standard `then` method and two http specific methods: `success` and `error`. The `then`\n     *   method takes two arguments a success and an error callback which will be called with a\n     *   response object. The `success` and `error` methods take a single argument - a function that\n     *   will be called when the request succeeds or fails respectively. The arguments passed into\n     *   these functions are destructured representation of the response object passed into the\n     *   `then` method. The response object has these properties:\n     *\n     *   - **data** – `{string|Object}` – The response body transformed with the transform\n     *     functions.\n     *   - **status** – `{number}` – HTTP status code of the response.\n     *   - **headers** – `{function([headerName])}` – Header getter function.\n     *   - **config** – `{Object}` – The configuration object that was used to generate the request.\n     *\n     * @property {Array.<Object>} pendingRequests Array of config objects for currently pending\n     *   requests. This is primarily meant to be used for debugging purposes.\n     *\n     *\n     * @example\n<example>\n<file name=\"index.html\">\n  <div ng-controller=\"FetchCtrl\">\n    <select ng-model=\"method\">\n      <option>GET</option>\n      <option>JSONP</option>\n    </select>\n    <input type=\"text\" ng-model=\"url\" size=\"80\"/>\n    <button ng-click=\"fetch()\">fetch</button><br>\n    <button ng-click=\"updateModel('GET', 'http-hello.html')\">Sample GET</button>\n    <button\n      ng-click=\"updateModel('JSONP',\n                    'http://angularjs.org/greet.php?callback=JSON_CALLBACK&name=Super%20Hero')\">\n      Sample JSONP\n    </button>\n    <button\n      ng-click=\"updateModel('JSONP', 'http://angularjs.org/doesntexist&callback=JSON_CALLBACK')\">\n        Invalid JSONP\n      </button>\n    <pre>http status code: {{status}}</pre>\n    <pre>http response data: {{data}}</pre>\n  </div>\n</file>\n<file name=\"script.js\">\n  function FetchCtrl($scope, $http, $templateCache) {\n    $scope.method = 'GET';\n    $scope.url = 'http-hello.html';\n\n    $scope.fetch = function() {\n      $scope.code = null;\n      $scope.response = null;\n\n      $http({method: $scope.method, url: $scope.url, cache: $templateCache}).\n        success(function(data, status) {\n          $scope.status = status;\n          $scope.data = data;\n        }).\n        error(function(data, status) {\n          $scope.data = data || \"Request failed\";\n          $scope.status = status;\n      });\n    };\n\n    $scope.updateModel = function(method, url) {\n      $scope.method = method;\n      $scope.url = url;\n    };\n  }\n</file>\n<file name=\"http-hello.html\">\n  Hello, $http!\n</file>\n<file name=\"scenario.js\">\n  it('should make an xhr GET request', function() {\n    element(':button:contains(\"Sample GET\")').click();\n    element(':button:contains(\"fetch\")').click();\n    expect(binding('status')).toBe('200');\n    expect(binding('data')).toMatch(/Hello, \\$http!/);\n  });\n\n  it('should make a JSONP request to angularjs.org', function() {\n    element(':button:contains(\"Sample JSONP\")').click();\n    element(':button:contains(\"fetch\")').click();\n    expect(binding('status')).toBe('200');\n    expect(binding('data')).toMatch(/Super Hero!/);\n  });\n\n  it('should make JSONP request to invalid URL and invoke the error handler',\n      function() {\n    element(':button:contains(\"Invalid JSONP\")').click();\n    element(':button:contains(\"fetch\")').click();\n    expect(binding('status')).toBe('0');\n    expect(binding('data')).toBe('Request failed');\n  });\n</file>\n</example>\n     */\n    function $http(requestConfig) {\n      var config = {\n        transformRequest: defaults.transformRequest,\n        transformResponse: defaults.transformResponse\n      };\n      var headers = mergeHeaders(requestConfig);\n\n      extend(config, requestConfig);\n      config.headers = headers;\n      config.method = uppercase(config.method);\n\n      var xsrfValue = urlIsSameOrigin(config.url)\n          ? $browser.cookies()[config.xsrfCookieName || defaults.xsrfCookieName]\n          : undefined;\n      if (xsrfValue) {\n        headers[(config.xsrfHeaderName || defaults.xsrfHeaderName)] = xsrfValue;\n      }\n\n\n      var serverRequest = function(config) {\n        headers = config.headers;\n        var reqData = transformData(config.data, headersGetter(headers), config.transformRequest);\n\n        // strip content-type if data is undefined\n        if (isUndefined(config.data)) {\n          forEach(headers, function(value, header) {\n            if (lowercase(header) === 'content-type') {\n                delete headers[header];\n            }\n          });\n        }\n\n        if (isUndefined(config.withCredentials) && !isUndefined(defaults.withCredentials)) {\n          config.withCredentials = defaults.withCredentials;\n        }\n\n        // send request\n        return sendReq(config, reqData, headers).then(transformResponse, transformResponse);\n      };\n\n      var chain = [serverRequest, undefined];\n      var promise = $q.when(config);\n\n      // apply interceptors\n      forEach(reversedInterceptors, function(interceptor) {\n        if (interceptor.request || interceptor.requestError) {\n          chain.unshift(interceptor.request, interceptor.requestError);\n        }\n        if (interceptor.response || interceptor.responseError) {\n          chain.push(interceptor.response, interceptor.responseError);\n        }\n      });\n\n      while(chain.length) {\n        var thenFn = chain.shift();\n        var rejectFn = chain.shift();\n\n        promise = promise.then(thenFn, rejectFn);\n      }\n\n      promise.success = function(fn) {\n        promise.then(function(response) {\n          fn(response.data, response.status, response.headers, config);\n        });\n        return promise;\n      };\n\n      promise.error = function(fn) {\n        promise.then(null, function(response) {\n          fn(response.data, response.status, response.headers, config);\n        });\n        return promise;\n      };\n\n      return promise;\n\n      function transformResponse(response) {\n        // make a copy since the response must be cacheable\n        var resp = extend({}, response, {\n          data: transformData(response.data, response.headers, config.transformResponse)\n        });\n        return (isSuccess(response.status))\n          ? resp\n          : $q.reject(resp);\n      }\n\n      function mergeHeaders(config) {\n        var defHeaders = defaults.headers,\n            reqHeaders = extend({}, config.headers),\n            defHeaderName, lowercaseDefHeaderName, reqHeaderName;\n\n        defHeaders = extend({}, defHeaders.common, defHeaders[lowercase(config.method)]);\n\n        // execute if header value is function\n        execHeaders(defHeaders);\n        execHeaders(reqHeaders);\n\n        // using for-in instead of forEach to avoid unecessary iteration after header has been found\n        defaultHeadersIteration:\n        for (defHeaderName in defHeaders) {\n          lowercaseDefHeaderName = lowercase(defHeaderName);\n\n          for (reqHeaderName in reqHeaders) {\n            if (lowercase(reqHeaderName) === lowercaseDefHeaderName) {\n              continue defaultHeadersIteration;\n            }\n          }\n\n          reqHeaders[defHeaderName] = defHeaders[defHeaderName];\n        }\n\n        return reqHeaders;\n\n        function execHeaders(headers) {\n          var headerContent;\n\n          forEach(headers, function(headerFn, header) {\n            if (isFunction(headerFn)) {\n              headerContent = headerFn();\n              if (headerContent != null) {\n                headers[header] = headerContent;\n              } else {\n                delete headers[header];\n              }\n            }\n          });\n        }\n      }\n    }\n\n    $http.pendingRequests = [];\n\n    /**\n     * @ngdoc method\n     * @name ng.$http#get\n     * @methodOf ng.$http\n     *\n     * @description\n     * Shortcut method to perform `GET` request.\n     *\n     * @param {string} url Relative or absolute URL specifying the destination of the request\n     * @param {Object=} config Optional configuration object\n     * @returns {HttpPromise} Future object\n     */\n\n    /**\n     * @ngdoc method\n     * @name ng.$http#delete\n     * @methodOf ng.$http\n     *\n     * @description\n     * Shortcut method to perform `DELETE` request.\n     *\n     * @param {string} url Relative or absolute URL specifying the destination of the request\n     * @param {Object=} config Optional configuration object\n     * @returns {HttpPromise} Future object\n     */\n\n    /**\n     * @ngdoc method\n     * @name ng.$http#head\n     * @methodOf ng.$http\n     *\n     * @description\n     * Shortcut method to perform `HEAD` request.\n     *\n     * @param {string} url Relative or absolute URL specifying the destination of the request\n     * @param {Object=} config Optional configuration object\n     * @returns {HttpPromise} Future object\n     */\n\n    /**\n     * @ngdoc method\n     * @name ng.$http#jsonp\n     * @methodOf ng.$http\n     *\n     * @description\n     * Shortcut method to perform `JSONP` request.\n     *\n     * @param {string} url Relative or absolute URL specifying the destination of the request.\n     *                     Should contain `JSON_CALLBACK` string.\n     * @param {Object=} config Optional configuration object\n     * @returns {HttpPromise} Future object\n     */\n    createShortMethods('get', 'delete', 'head', 'jsonp');\n\n    /**\n     * @ngdoc method\n     * @name ng.$http#post\n     * @methodOf ng.$http\n     *\n     * @description\n     * Shortcut method to perform `POST` request.\n     *\n     * @param {string} url Relative or absolute URL specifying the destination of the request\n     * @param {*} data Request content\n     * @param {Object=} config Optional configuration object\n     * @returns {HttpPromise} Future object\n     */\n\n    /**\n     * @ngdoc method\n     * @name ng.$http#put\n     * @methodOf ng.$http\n     *\n     * @description\n     * Shortcut method to perform `PUT` request.\n     *\n     * @param {string} url Relative or absolute URL specifying the destination of the request\n     * @param {*} data Request content\n     * @param {Object=} config Optional configuration object\n     * @returns {HttpPromise} Future object\n     */\n    createShortMethodsWithData('post', 'put');\n\n        /**\n         * @ngdoc property\n         * @name ng.$http#defaults\n         * @propertyOf ng.$http\n         *\n         * @description\n         * Runtime equivalent of the `$httpProvider.defaults` property. Allows configuration of\n         * default headers, withCredentials as well as request and response transformations.\n         *\n         * See \"Setting HTTP Headers\" and \"Transforming Requests and Responses\" sections above.\n         */\n    $http.defaults = defaults;\n\n\n    return $http;\n\n\n    function createShortMethods(names) {\n      forEach(arguments, function(name) {\n        $http[name] = function(url, config) {\n          return $http(extend(config || {}, {\n            method: name,\n            url: url\n          }));\n        };\n      });\n    }\n\n\n    function createShortMethodsWithData(name) {\n      forEach(arguments, function(name) {\n        $http[name] = function(url, data, config) {\n          return $http(extend(config || {}, {\n            method: name,\n            url: url,\n            data: data\n          }));\n        };\n      });\n    }\n\n\n    /**\n     * Makes the request.\n     *\n     * !!! ACCESSES CLOSURE VARS:\n     * $httpBackend, defaults, $log, $rootScope, defaultCache, $http.pendingRequests\n     */\n    function sendReq(config, reqData, reqHeaders) {\n      var deferred = $q.defer(),\n          promise = deferred.promise,\n          cache,\n          cachedResp,\n          url = buildUrl(config.url, config.params);\n\n      $http.pendingRequests.push(config);\n      promise.then(removePendingReq, removePendingReq);\n\n\n      if ((config.cache || defaults.cache) && config.cache !== false && config.method == 'GET') {\n        cache = isObject(config.cache) ? config.cache\n              : isObject(defaults.cache) ? defaults.cache\n              : defaultCache;\n      }\n\n      if (cache) {\n        cachedResp = cache.get(url);\n        if (isDefined(cachedResp)) {\n          if (cachedResp.then) {\n            // cached request has already been sent, but there is no response yet\n            cachedResp.then(removePendingReq, removePendingReq);\n            return cachedResp;\n          } else {\n            // serving from cache\n            if (isArray(cachedResp)) {\n              resolvePromise(cachedResp[1], cachedResp[0], copy(cachedResp[2]));\n            } else {\n              resolvePromise(cachedResp, 200, {});\n            }\n          }\n        } else {\n          // put the promise for the non-transformed response into cache as a placeholder\n          cache.put(url, promise);\n        }\n      }\n\n      // if we won't have the response in cache, send the request to the backend\n      if (isUndefined(cachedResp)) {\n        $httpBackend(config.method, url, reqData, done, reqHeaders, config.timeout,\n            config.withCredentials, config.responseType);\n      }\n\n      return promise;\n\n\n      /**\n       * Callback registered to $httpBackend():\n       *  - caches the response if desired\n       *  - resolves the raw $http promise\n       *  - calls $apply\n       */\n      function done(status, response, headersString) {\n        if (cache) {\n          if (isSuccess(status)) {\n            cache.put(url, [status, response, parseHeaders(headersString)]);\n          } else {\n            // remove promise from the cache\n            cache.remove(url);\n          }\n        }\n\n        resolvePromise(response, status, headersString);\n        if (!$rootScope.$$phase) $rootScope.$apply();\n      }\n\n\n      /**\n       * Resolves the raw $http promise.\n       */\n      function resolvePromise(response, status, headers) {\n        // normalize internal statuses to 0\n        status = Math.max(status, 0);\n\n        (isSuccess(status) ? deferred.resolve : deferred.reject)({\n          data: response,\n          status: status,\n          headers: headersGetter(headers),\n          config: config\n        });\n      }\n\n\n      function removePendingReq() {\n        var idx = indexOf($http.pendingRequests, config);\n        if (idx !== -1) $http.pendingRequests.splice(idx, 1);\n      }\n    }\n\n\n    function buildUrl(url, params) {\n          if (!params) return url;\n          var parts = [];\n          forEachSorted(params, function(value, key) {\n            if (value === null || isUndefined(value)) return;\n            if (!isArray(value)) value = [value];\n\n            forEach(value, function(v) {\n              if (isObject(v)) {\n                v = toJson(v);\n              }\n              parts.push(encodeUriQuery(key) + '=' +\n                         encodeUriQuery(v));\n            });\n          });\n          return url + ((url.indexOf('?') == -1) ? '?' : '&') + parts.join('&');\n        }\n\n\n  }];\n}\n\nvar XHR = window.XMLHttpRequest || function() {\n  /* global ActiveXObject */\n  try { return new ActiveXObject(\"Msxml2.XMLHTTP.6.0\"); } catch (e1) {}\n  try { return new ActiveXObject(\"Msxml2.XMLHTTP.3.0\"); } catch (e2) {}\n  try { return new ActiveXObject(\"Msxml2.XMLHTTP\"); } catch (e3) {}\n  throw minErr('$httpBackend')('noxhr', \"This browser does not support XMLHttpRequest.\");\n};\n\n\n/**\n * @ngdoc object\n * @name ng.$httpBackend\n * @requires $browser\n * @requires $window\n * @requires $document\n *\n * @description\n * HTTP backend used by the {@link ng.$http service} that delegates to\n * XMLHttpRequest object or JSONP and deals with browser incompatibilities.\n *\n * You should never need to use this service directly, instead use the higher-level abstractions:\n * {@link ng.$http $http} or {@link ngResource.$resource $resource}.\n *\n * During testing this implementation is swapped with {@link ngMock.$httpBackend mock\n * $httpBackend} which can be trained with responses.\n */\nfunction $HttpBackendProvider() {\n  this.$get = ['$browser', '$window', '$document', function($browser, $window, $document) {\n    return createHttpBackend($browser, XHR, $browser.defer, $window.angular.callbacks,\n        $document[0], $window.location.protocol.replace(':', ''));\n  }];\n}\n\nfunction createHttpBackend($browser, XHR, $browserDefer, callbacks, rawDocument, locationProtocol) {\n  // TODO(vojta): fix the signature\n  return function(method, url, post, callback, headers, timeout, withCredentials, responseType) {\n    var status;\n    $browser.$$incOutstandingRequestCount();\n    url = url || $browser.url();\n\n    if (lowercase(method) == 'jsonp') {\n      var callbackId = '_' + (callbacks.counter++).toString(36);\n      callbacks[callbackId] = function(data) {\n        callbacks[callbackId].data = data;\n      };\n\n      var jsonpDone = jsonpReq(url.replace('JSON_CALLBACK', 'angular.callbacks.' + callbackId),\n          function() {\n        if (callbacks[callbackId].data) {\n          completeRequest(callback, 200, callbacks[callbackId].data);\n        } else {\n          completeRequest(callback, status || -2);\n        }\n        delete callbacks[callbackId];\n      });\n    } else {\n      var xhr = new XHR();\n      xhr.open(method, url, true);\n      forEach(headers, function(value, key) {\n        if (isDefined(value)) {\n            xhr.setRequestHeader(key, value);\n        }\n      });\n\n      // In IE6 and 7, this might be called synchronously when xhr.send below is called and the\n      // response is in the cache. the promise api will ensure that to the app code the api is\n      // always async\n      xhr.onreadystatechange = function() {\n        if (xhr.readyState == 4) {\n          var responseHeaders = xhr.getAllResponseHeaders();\n\n          // responseText is the old-school way of retrieving response (supported by IE8 & 9)\n          // response/responseType properties were introduced in XHR Level2 spec (supported by IE10)\n          completeRequest(callback,\n              status || xhr.status,\n              (xhr.responseType ? xhr.response : xhr.responseText),\n              responseHeaders);\n        }\n      };\n\n      if (withCredentials) {\n        xhr.withCredentials = true;\n      }\n\n      if (responseType) {\n        xhr.responseType = responseType;\n      }\n\n      xhr.send(post || null);\n    }\n\n    if (timeout > 0) {\n      var timeoutId = $browserDefer(timeoutRequest, timeout);\n    } else if (timeout && timeout.then) {\n      timeout.then(timeoutRequest);\n    }\n\n\n    function timeoutRequest() {\n      status = -1;\n      jsonpDone && jsonpDone();\n      xhr && xhr.abort();\n    }\n\n    function completeRequest(callback, status, response, headersString) {\n      var protocol = locationProtocol || urlResolve(url).protocol;\n\n      // cancel timeout and subsequent timeout promise resolution\n      timeoutId && $browserDefer.cancel(timeoutId);\n      jsonpDone = xhr = null;\n\n      // fix status code for file protocol (it's always 0)\n      status = (protocol == 'file') ? (response ? 200 : 404) : status;\n\n      // normalize IE bug (http://bugs.jquery.com/ticket/1450)\n      status = status == 1223 ? 204 : status;\n\n      callback(status, response, headersString);\n      $browser.$$completeOutstandingRequest(noop);\n    }\n  };\n\n  function jsonpReq(url, done) {\n    // we can't use jQuery/jqLite here because jQuery does crazy shit with script elements, e.g.:\n    // - fetches local scripts via XHR and evals them\n    // - adds and immediately removes script elements from the document\n    var script = rawDocument.createElement('script'),\n        doneWrapper = function() {\n          rawDocument.body.removeChild(script);\n          if (done) done();\n        };\n\n    script.type = 'text/javascript';\n    script.src = url;\n\n    if (msie) {\n      script.onreadystatechange = function() {\n        if (/loaded|complete/.test(script.readyState)) doneWrapper();\n      };\n    } else {\n      script.onload = script.onerror = doneWrapper;\n    }\n\n    rawDocument.body.appendChild(script);\n    return doneWrapper;\n  }\n}\n\nvar $interpolateMinErr = minErr('$interpolate');\n\n/**\n * @ngdoc object\n * @name ng.$interpolateProvider\n * @function\n *\n * @description\n *\n * Used for configuring the interpolation markup. Defaults to `{{` and `}}`.\n *\n * @example\n<doc:example module=\"customInterpolationApp\">\n<doc:source>\n<script>\n  var customInterpolationApp = angular.module('customInterpolationApp', []);\n\n  customInterpolationApp.config(function($interpolateProvider) {\n    $interpolateProvider.startSymbol('//');\n    $interpolateProvider.endSymbol('//');\n  });\n\n\n  customInterpolationApp.controller('DemoController', function DemoController() {\n      this.label = \"This binding is brought you by // interpolation symbols.\";\n  });\n</script>\n<div ng-app=\"App\" ng-controller=\"DemoController as demo\">\n    //demo.label//\n</div>\n</doc:source>\n<doc:scenario>\n it('should interpolate binding with custom symbols', function() {\n  expect(binding('demo.label')).toBe('This binding is brought you by // interpolation symbols.');\n });\n</doc:scenario>\n</doc:example>\n */\nfunction $InterpolateProvider() {\n  var startSymbol = '{{';\n  var endSymbol = '}}';\n\n  /**\n   * @ngdoc method\n   * @name ng.$interpolateProvider#startSymbol\n   * @methodOf ng.$interpolateProvider\n   * @description\n   * Symbol to denote start of expression in the interpolated string. Defaults to `{{`.\n   *\n   * @param {string=} value new value to set the starting symbol to.\n   * @returns {string|self} Returns the symbol when used as getter and self if used as setter.\n   */\n  this.startSymbol = function(value){\n    if (value) {\n      startSymbol = value;\n      return this;\n    } else {\n      return startSymbol;\n    }\n  };\n\n  /**\n   * @ngdoc method\n   * @name ng.$interpolateProvider#endSymbol\n   * @methodOf ng.$interpolateProvider\n   * @description\n   * Symbol to denote the end of expression in the interpolated string. Defaults to `}}`.\n   *\n   * @param {string=} value new value to set the ending symbol to.\n   * @returns {string|self} Returns the symbol when used as getter and self if used as setter.\n   */\n  this.endSymbol = function(value){\n    if (value) {\n      endSymbol = value;\n      return this;\n    } else {\n      return endSymbol;\n    }\n  };\n\n\n  this.$get = ['$parse', '$exceptionHandler', '$sce', function($parse, $exceptionHandler, $sce) {\n    var startSymbolLength = startSymbol.length,\n        endSymbolLength = endSymbol.length;\n\n    /**\n     * @ngdoc function\n     * @name ng.$interpolate\n     * @function\n     *\n     * @requires $parse\n     * @requires $sce\n     *\n     * @description\n     *\n     * Compiles a string with markup into an interpolation function. This service is used by the\n     * HTML {@link ng.$compile $compile} service for data binding. See\n     * {@link ng.$interpolateProvider $interpolateProvider} for configuring the\n     * interpolation markup.\n     *\n     *\n       <pre>\n         var $interpolate = ...; // injected\n         var exp = $interpolate('Hello {{name}}!');\n         expect(exp({name:'Angular'}).toEqual('Hello Angular!');\n       </pre>\n     *\n     *\n     * @param {string} text The text with markup to interpolate.\n     * @param {boolean=} mustHaveExpression if set to true then the interpolation string must have\n     *    embedded expression in order to return an interpolation function. Strings with no\n     *    embedded expression will return null for the interpolation function.\n     * @param {string=} trustedContext when provided, the returned function passes the interpolated\n     *    result through {@link ng.$sce#methods_getTrusted $sce.getTrusted(interpolatedResult,\n     *    trustedContext)} before returning it.  Refer to the {@link ng.$sce $sce} service that\n     *    provides Strict Contextual Escaping for details.\n     * @returns {function(context)} an interpolation function which is used to compute the\n     *    interpolated string. The function has these parameters:\n     *\n     *    * `context`: an object against which any expressions embedded in the strings are evaluated\n     *      against.\n     *\n     */\n    function $interpolate(text, mustHaveExpression, trustedContext) {\n      var startIndex,\n          endIndex,\n          index = 0,\n          parts = [],\n          length = text.length,\n          hasInterpolation = false,\n          fn,\n          exp,\n          concat = [];\n\n      while(index < length) {\n        if ( ((startIndex = text.indexOf(startSymbol, index)) != -1) &&\n             ((endIndex = text.indexOf(endSymbol, startIndex + startSymbolLength)) != -1) ) {\n          (index != startIndex) && parts.push(text.substring(index, startIndex));\n          parts.push(fn = $parse(exp = text.substring(startIndex + startSymbolLength, endIndex)));\n          fn.exp = exp;\n          index = endIndex + endSymbolLength;\n          hasInterpolation = true;\n        } else {\n          // we did not find anything, so we have to add the remainder to the parts array\n          (index != length) && parts.push(text.substring(index));\n          index = length;\n        }\n      }\n\n      if (!(length = parts.length)) {\n        // we added, nothing, must have been an empty string.\n        parts.push('');\n        length = 1;\n      }\n\n      // Concatenating expressions makes it hard to reason about whether some combination of\n      // concatenated values are unsafe to use and could easily lead to XSS.  By requiring that a\n      // single expression be used for iframe[src], object[src], etc., we ensure that the value\n      // that's used is assigned or constructed by some JS code somewhere that is more testable or\n      // make it obvious that you bound the value to some user controlled value.  This helps reduce\n      // the load when auditing for XSS issues.\n      if (trustedContext && parts.length > 1) {\n          throw $interpolateMinErr('noconcat',\n              \"Error while interpolating: {0}\\nStrict Contextual Escaping disallows \" +\n              \"interpolations that concatenate multiple expressions when a trusted value is \" +\n              \"required.  See http://docs.angularjs.org/api/ng.$sce\", text);\n      }\n\n      if (!mustHaveExpression  || hasInterpolation) {\n        concat.length = length;\n        fn = function(context) {\n          try {\n            for(var i = 0, ii = length, part; i<ii; i++) {\n              if (typeof (part = parts[i]) == 'function') {\n                part = part(context);\n                if (trustedContext) {\n                  part = $sce.getTrusted(trustedContext, part);\n                } else {\n                  part = $sce.valueOf(part);\n                }\n                if (part === null || isUndefined(part)) {\n                  part = '';\n                } else if (typeof part != 'string') {\n                  part = toJson(part);\n                }\n              }\n              concat[i] = part;\n            }\n            return concat.join('');\n          }\n          catch(err) {\n            var newErr = $interpolateMinErr('interr', \"Can't interpolate: {0}\\n{1}\", text,\n                err.toString());\n            $exceptionHandler(newErr);\n          }\n        };\n        fn.exp = text;\n        fn.parts = parts;\n        return fn;\n      }\n    }\n\n\n    /**\n     * @ngdoc method\n     * @name ng.$interpolate#startSymbol\n     * @methodOf ng.$interpolate\n     * @description\n     * Symbol to denote the start of expression in the interpolated string. Defaults to `{{`.\n     *\n     * Use {@link ng.$interpolateProvider#startSymbol $interpolateProvider#startSymbol} to change\n     * the symbol.\n     *\n     * @returns {string} start symbol.\n     */\n    $interpolate.startSymbol = function() {\n      return startSymbol;\n    };\n\n\n    /**\n     * @ngdoc method\n     * @name ng.$interpolate#endSymbol\n     * @methodOf ng.$interpolate\n     * @description\n     * Symbol to denote the end of expression in the interpolated string. Defaults to `}}`.\n     *\n     * Use {@link ng.$interpolateProvider#endSymbol $interpolateProvider#endSymbol} to change\n     * the symbol.\n     *\n     * @returns {string} start symbol.\n     */\n    $interpolate.endSymbol = function() {\n      return endSymbol;\n    };\n\n    return $interpolate;\n  }];\n}\n\nfunction $IntervalProvider() {\n  this.$get = ['$rootScope', '$window', '$q',\n       function($rootScope,   $window,   $q) {\n    var intervals = {};\n\n\n     /**\n      * @ngdoc function\n      * @name ng.$interval\n      *\n      * @description\n      * Angular's wrapper for `window.setInterval`. The `fn` function is executed every `delay`\n      * milliseconds.\n      *\n      * The return value of registering an interval function is a promise. This promise will be\n      * notified upon each tick of the interval, and will be resolved after `count` iterations, or\n      * run indefinitely if `count` is not defined. The value of the notification will be the\n      * number of iterations that have run.\n      * To cancel an interval, call `$interval.cancel(promise)`.\n      *\n      * In tests you can use {@link ngMock.$interval#methods_flush `$interval.flush(millis)`} to\n      * move forward by `millis` milliseconds and trigger any functions scheduled to run in that\n      * time.\n      *\n      * @param {function()} fn A function that should be called repeatedly.\n      * @param {number} delay Number of milliseconds between each function call.\n      * @param {number=} [count=0] Number of times to repeat. If not set, or 0, will repeat\n      *   indefinitely.\n      * @param {boolean=} [invokeApply=true] If set to `false` skips model dirty checking, otherwise\n      *   will invoke `fn` within the {@link ng.$rootScope.Scope#methods_$apply $apply} block.\n      * @returns {promise} A promise which will be notified on each iteration.\n      */\n    function interval(fn, delay, count, invokeApply) {\n      var setInterval = $window.setInterval,\n          clearInterval = $window.clearInterval,\n          deferred = $q.defer(),\n          promise = deferred.promise,\n          iteration = 0,\n          skipApply = (isDefined(invokeApply) && !invokeApply);\n      \n      count = isDefined(count) ? count : 0,\n\n      promise.then(null, null, fn);\n\n      promise.$$intervalId = setInterval(function tick() {\n        deferred.notify(iteration++);\n\n        if (count > 0 && iteration >= count) {\n          deferred.resolve(iteration);\n          clearInterval(promise.$$intervalId);\n          delete intervals[promise.$$intervalId];\n        }\n\n        if (!skipApply) $rootScope.$apply();\n\n      }, delay);\n\n      intervals[promise.$$intervalId] = deferred;\n\n      return promise;\n    }\n\n\n     /**\n      * @ngdoc function\n      * @name ng.$interval#cancel\n      * @methodOf ng.$interval\n      *\n      * @description\n      * Cancels a task associated with the `promise`.\n      *\n      * @param {number} promise Promise returned by the `$interval` function.\n      * @returns {boolean} Returns `true` if the task was successfully canceled.\n      */\n    interval.cancel = function(promise) {\n      if (promise && promise.$$intervalId in intervals) {\n        intervals[promise.$$intervalId].reject('canceled');\n        clearInterval(promise.$$intervalId);\n        delete intervals[promise.$$intervalId];\n        return true;\n      }\n      return false;\n    };\n\n    return interval;\n  }];\n}\n\n/**\n * @ngdoc object\n * @name ng.$locale\n *\n * @description\n * $locale service provides localization rules for various Angular components. As of right now the\n * only public api is:\n *\n * * `id` – `{string}` – locale id formatted as `languageId-countryId` (e.g. `en-us`)\n */\nfunction $LocaleProvider(){\n  this.$get = function() {\n    return {\n      id: 'en-us',\n\n      NUMBER_FORMATS: {\n        DECIMAL_SEP: '.',\n        GROUP_SEP: ',',\n        PATTERNS: [\n          { // Decimal Pattern\n            minInt: 1,\n            minFrac: 0,\n            maxFrac: 3,\n            posPre: '',\n            posSuf: '',\n            negPre: '-',\n            negSuf: '',\n            gSize: 3,\n            lgSize: 3\n          },{ //Currency Pattern\n            minInt: 1,\n            minFrac: 2,\n            maxFrac: 2,\n            posPre: '\\u00A4',\n            posSuf: '',\n            negPre: '(\\u00A4',\n            negSuf: ')',\n            gSize: 3,\n            lgSize: 3\n          }\n        ],\n        CURRENCY_SYM: '$'\n      },\n\n      DATETIME_FORMATS: {\n        MONTH:\n            'January,February,March,April,May,June,July,August,September,October,November,December'\n            .split(','),\n        SHORTMONTH:  'Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec'.split(','),\n        DAY: 'Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday'.split(','),\n        SHORTDAY: 'Sun,Mon,Tue,Wed,Thu,Fri,Sat'.split(','),\n        AMPMS: ['AM','PM'],\n        medium: 'MMM d, y h:mm:ss a',\n        short: 'M/d/yy h:mm a',\n        fullDate: 'EEEE, MMMM d, y',\n        longDate: 'MMMM d, y',\n        mediumDate: 'MMM d, y',\n        shortDate: 'M/d/yy',\n        mediumTime: 'h:mm:ss a',\n        shortTime: 'h:mm a'\n      },\n\n      pluralCat: function(num) {\n        if (num === 1) {\n          return 'one';\n        }\n        return 'other';\n      }\n    };\n  };\n}\n\nvar PATH_MATCH = /^([^\\?#]*)(\\?([^#]*))?(#(.*))?$/,\n    DEFAULT_PORTS = {'http': 80, 'https': 443, 'ftp': 21};\nvar $locationMinErr = minErr('$location');\n\n\n/**\n * Encode path using encodeUriSegment, ignoring forward slashes\n *\n * @param {string} path Path to encode\n * @returns {string}\n */\nfunction encodePath(path) {\n  var segments = path.split('/'),\n      i = segments.length;\n\n  while (i--) {\n    segments[i] = encodeUriSegment(segments[i]);\n  }\n\n  return segments.join('/');\n}\n\nfunction parseAbsoluteUrl(absoluteUrl, locationObj) {\n  var parsedUrl = urlResolve(absoluteUrl);\n\n  locationObj.$$protocol = parsedUrl.protocol;\n  locationObj.$$host = parsedUrl.hostname;\n  locationObj.$$port = int(parsedUrl.port) || DEFAULT_PORTS[parsedUrl.protocol] || null;\n}\n\n\nfunction parseAppUrl(relativeUrl, locationObj) {\n  var prefixed = (relativeUrl.charAt(0) !== '/');\n  if (prefixed) {\n    relativeUrl = '/' + relativeUrl;\n  }\n  var match = urlResolve(relativeUrl);\n  locationObj.$$path = decodeURIComponent(prefixed && match.pathname.charAt(0) === '/' ?\n      match.pathname.substring(1) : match.pathname);\n  locationObj.$$search = parseKeyValue(match.search);\n  locationObj.$$hash = decodeURIComponent(match.hash);\n\n  // make sure path starts with '/';\n  if (locationObj.$$path && locationObj.$$path.charAt(0) != '/') {\n    locationObj.$$path = '/' + locationObj.$$path;\n  }\n}\n\n\n/**\n *\n * @param {string} begin\n * @param {string} whole\n * @returns {string} returns text from whole after begin or undefined if it does not begin with\n *                   expected string.\n */\nfunction beginsWith(begin, whole) {\n  if (whole.indexOf(begin) === 0) {\n    return whole.substr(begin.length);\n  }\n}\n\n\nfunction stripHash(url) {\n  var index = url.indexOf('#');\n  return index == -1 ? url : url.substr(0, index);\n}\n\n\nfunction stripFile(url) {\n  return url.substr(0, stripHash(url).lastIndexOf('/') + 1);\n}\n\n/* return the server only (scheme://host:port) */\nfunction serverBase(url) {\n  return url.substring(0, url.indexOf('/', url.indexOf('//') + 2));\n}\n\n\n/**\n * LocationHtml5Url represents an url\n * This object is exposed as $location service when HTML5 mode is enabled and supported\n *\n * @constructor\n * @param {string} appBase application base URL\n * @param {string} basePrefix url path prefix\n */\nfunction LocationHtml5Url(appBase, basePrefix) {\n  this.$$html5 = true;\n  basePrefix = basePrefix || '';\n  var appBaseNoFile = stripFile(appBase);\n  parseAbsoluteUrl(appBase, this);\n\n\n  /**\n   * Parse given html5 (regular) url string into properties\n   * @param {string} newAbsoluteUrl HTML5 url\n   * @private\n   */\n  this.$$parse = function(url) {\n    var pathUrl = beginsWith(appBaseNoFile, url);\n    if (!isString(pathUrl)) {\n      throw $locationMinErr('ipthprfx', 'Invalid url \"{0}\", missing path prefix \"{1}\".', url,\n          appBaseNoFile);\n    }\n\n    parseAppUrl(pathUrl, this);\n\n    if (!this.$$path) {\n      this.$$path = '/';\n    }\n\n    this.$$compose();\n  };\n\n  /**\n   * Compose url and update `absUrl` property\n   * @private\n   */\n  this.$$compose = function() {\n    var search = toKeyValue(this.$$search),\n        hash = this.$$hash ? '#' + encodeUriSegment(this.$$hash) : '';\n\n    this.$$url = encodePath(this.$$path) + (search ? '?' + search : '') + hash;\n    this.$$absUrl = appBaseNoFile + this.$$url.substr(1); // first char is always '/'\n  };\n\n  this.$$rewrite = function(url) {\n    var appUrl, prevAppUrl;\n\n    if ( (appUrl = beginsWith(appBase, url)) !== undefined ) {\n      prevAppUrl = appUrl;\n      if ( (appUrl = beginsWith(basePrefix, appUrl)) !== undefined ) {\n        return appBaseNoFile + (beginsWith('/', appUrl) || appUrl);\n      } else {\n        return appBase + prevAppUrl;\n      }\n    } else if ( (appUrl = beginsWith(appBaseNoFile, url)) !== undefined ) {\n      return appBaseNoFile + appUrl;\n    } else if (appBaseNoFile == url + '/') {\n      return appBaseNoFile;\n    }\n  };\n}\n\n\n/**\n * LocationHashbangUrl represents url\n * This object is exposed as $location service when developer doesn't opt into html5 mode.\n * It also serves as the base class for html5 mode fallback on legacy browsers.\n *\n * @constructor\n * @param {string} appBase application base URL\n * @param {string} hashPrefix hashbang prefix\n */\nfunction LocationHashbangUrl(appBase, hashPrefix) {\n  var appBaseNoFile = stripFile(appBase);\n\n  parseAbsoluteUrl(appBase, this);\n\n\n  /**\n   * Parse given hashbang url into properties\n   * @param {string} url Hashbang url\n   * @private\n   */\n  this.$$parse = function(url) {\n    var withoutBaseUrl = beginsWith(appBase, url) || beginsWith(appBaseNoFile, url);\n    var withoutHashUrl = withoutBaseUrl.charAt(0) == '#'\n        ? beginsWith(hashPrefix, withoutBaseUrl)\n        : (this.$$html5)\n          ? withoutBaseUrl\n          : '';\n\n    if (!isString(withoutHashUrl)) {\n      throw $locationMinErr('ihshprfx', 'Invalid url \"{0}\", missing hash prefix \"{1}\".', url,\n          hashPrefix);\n    }\n    parseAppUrl(withoutHashUrl, this);\n    this.$$compose();\n  };\n\n  /**\n   * Compose hashbang url and update `absUrl` property\n   * @private\n   */\n  this.$$compose = function() {\n    var search = toKeyValue(this.$$search),\n        hash = this.$$hash ? '#' + encodeUriSegment(this.$$hash) : '';\n\n    this.$$url = encodePath(this.$$path) + (search ? '?' + search : '') + hash;\n    this.$$absUrl = appBase + (this.$$url ? hashPrefix + this.$$url : '');\n  };\n\n  this.$$rewrite = function(url) {\n    if(stripHash(appBase) == stripHash(url)) {\n      return url;\n    }\n  };\n}\n\n\n/**\n * LocationHashbangUrl represents url\n * This object is exposed as $location service when html5 history api is enabled but the browser\n * does not support it.\n *\n * @constructor\n * @param {string} appBase application base URL\n * @param {string} hashPrefix hashbang prefix\n */\nfunction LocationHashbangInHtml5Url(appBase, hashPrefix) {\n  this.$$html5 = true;\n  LocationHashbangUrl.apply(this, arguments);\n\n  var appBaseNoFile = stripFile(appBase);\n\n  this.$$rewrite = function(url) {\n    var appUrl;\n\n    if ( appBase == stripHash(url) ) {\n      return url;\n    } else if ( (appUrl = beginsWith(appBaseNoFile, url)) ) {\n      return appBase + hashPrefix + appUrl;\n    } else if ( appBaseNoFile === url + '/') {\n      return appBaseNoFile;\n    }\n  };\n}\n\n\nLocationHashbangInHtml5Url.prototype =\n  LocationHashbangUrl.prototype =\n  LocationHtml5Url.prototype = {\n\n  /**\n   * Are we in html5 mode?\n   * @private\n   */\n  $$html5: false,\n\n  /**\n   * Has any change been replacing ?\n   * @private\n   */\n  $$replace: false,\n\n  /**\n   * @ngdoc method\n   * @name ng.$location#absUrl\n   * @methodOf ng.$location\n   *\n   * @description\n   * This method is getter only.\n   *\n   * Return full url representation with all segments encoded according to rules specified in\n   * {@link http://www.ietf.org/rfc/rfc3986.txt RFC 3986}.\n   *\n   * @return {string} full url\n   */\n  absUrl: locationGetter('$$absUrl'),\n\n  /**\n   * @ngdoc method\n   * @name ng.$location#url\n   * @methodOf ng.$location\n   *\n   * @description\n   * This method is getter / setter.\n   *\n   * Return url (e.g. `/path?a=b#hash`) when called without any parameter.\n   *\n   * Change path, search and hash, when called with parameter and return `$location`.\n   *\n   * @param {string=} url New url without base prefix (e.g. `/path?a=b#hash`)\n   * @param {string=} replace The path that will be changed\n   * @return {string} url\n   */\n  url: function(url, replace) {\n    if (isUndefined(url))\n      return this.$$url;\n\n    var match = PATH_MATCH.exec(url);\n    if (match[1]) this.path(decodeURIComponent(match[1]));\n    if (match[2] || match[1]) this.search(match[3] || '');\n    this.hash(match[5] || '', replace);\n\n    return this;\n  },\n\n  /**\n   * @ngdoc method\n   * @name ng.$location#protocol\n   * @methodOf ng.$location\n   *\n   * @description\n   * This method is getter only.\n   *\n   * Return protocol of current url.\n   *\n   * @return {string} protocol of current url\n   */\n  protocol: locationGetter('$$protocol'),\n\n  /**\n   * @ngdoc method\n   * @name ng.$location#host\n   * @methodOf ng.$location\n   *\n   * @description\n   * This method is getter only.\n   *\n   * Return host of current url.\n   *\n   * @return {string} host of current url.\n   */\n  host: locationGetter('$$host'),\n\n  /**\n   * @ngdoc method\n   * @name ng.$location#port\n   * @methodOf ng.$location\n   *\n   * @description\n   * This method is getter only.\n   *\n   * Return port of current url.\n   *\n   * @return {Number} port\n   */\n  port: locationGetter('$$port'),\n\n  /**\n   * @ngdoc method\n   * @name ng.$location#path\n   * @methodOf ng.$location\n   *\n   * @description\n   * This method is getter / setter.\n   *\n   * Return path of current url when called without any parameter.\n   *\n   * Change path when called with parameter and return `$location`.\n   *\n   * Note: Path should always begin with forward slash (/), this method will add the forward slash\n   * if it is missing.\n   *\n   * @param {string=} path New path\n   * @return {string} path\n   */\n  path: locationGetterSetter('$$path', function(path) {\n    return path.charAt(0) == '/' ? path : '/' + path;\n  }),\n\n  /**\n   * @ngdoc method\n   * @name ng.$location#search\n   * @methodOf ng.$location\n   *\n   * @description\n   * This method is getter / setter.\n   *\n   * Return search part (as object) of current url when called without any parameter.\n   *\n   * Change search part when called with parameter and return `$location`.\n   *\n   * @param {string|Object.<string>|Object.<Array.<string>>} search New search params - string or\n   * hash object. Hash object may contain an array of values, which will be decoded as duplicates in\n   * the url.\n   *\n   * @param {(string|Array<string>)=} paramValue If `search` is a string, then `paramValue` will override only a\n   * single search parameter. If `paramValue` is an array, it will set the parameter as a\n   * comma-separated value. If `paramValue` is `null`, the parameter will be deleted.\n   *\n   * @return {string} search\n   */\n  search: function(search, paramValue) {\n    switch (arguments.length) {\n      case 0:\n        return this.$$search;\n      case 1:\n        if (isString(search)) {\n          this.$$search = parseKeyValue(search);\n        } else if (isObject(search)) {\n          this.$$search = search;\n        } else {\n          throw $locationMinErr('isrcharg',\n              'The first argument of the `$location#search()` call must be a string or an object.');\n        }\n        break;\n      default:\n        if (isUndefined(paramValue) || paramValue === null) {\n          delete this.$$search[search];\n        } else {\n          this.$$search[search] = paramValue;\n        }\n    }\n\n    this.$$compose();\n    return this;\n  },\n\n  /**\n   * @ngdoc method\n   * @name ng.$location#hash\n   * @methodOf ng.$location\n   *\n   * @description\n   * This method is getter / setter.\n   *\n   * Return hash fragment when called without any parameter.\n   *\n   * Change hash fragment when called with parameter and return `$location`.\n   *\n   * @param {string=} hash New hash fragment\n   * @return {string} hash\n   */\n  hash: locationGetterSetter('$$hash', identity),\n\n  /**\n   * @ngdoc method\n   * @name ng.$location#replace\n   * @methodOf ng.$location\n   *\n   * @description\n   * If called, all changes to $location during current `$digest` will be replacing current history\n   * record, instead of adding new one.\n   */\n  replace: function() {\n    this.$$replace = true;\n    return this;\n  }\n};\n\nfunction locationGetter(property) {\n  return function() {\n    return this[property];\n  };\n}\n\n\nfunction locationGetterSetter(property, preprocess) {\n  return function(value) {\n    if (isUndefined(value))\n      return this[property];\n\n    this[property] = preprocess(value);\n    this.$$compose();\n\n    return this;\n  };\n}\n\n\n/**\n * @ngdoc object\n * @name ng.$location\n *\n * @requires $browser\n * @requires $sniffer\n * @requires $rootElement\n *\n * @description\n * The $location service parses the URL in the browser address bar (based on the\n * {@link https://developer.mozilla.org/en/window.location window.location}) and makes the URL\n * available to your application. Changes to the URL in the address bar are reflected into\n * $location service and changes to $location are reflected into the browser address bar.\n *\n * **The $location service:**\n *\n * - Exposes the current URL in the browser address bar, so you can\n *   - Watch and observe the URL.\n *   - Change the URL.\n * - Synchronizes the URL with the browser when the user\n *   - Changes the address bar.\n *   - Clicks the back or forward button (or clicks a History link).\n *   - Clicks on a link.\n * - Represents the URL object as a set of methods (protocol, host, port, path, search, hash).\n *\n * For more information see {@link guide/dev_guide.services.$location Developer Guide: Angular\n * Services: Using $location}\n */\n\n/**\n * @ngdoc object\n * @name ng.$locationProvider\n * @description\n * Use the `$locationProvider` to configure how the application deep linking paths are stored.\n */\nfunction $LocationProvider(){\n  var hashPrefix = '',\n      html5Mode = false;\n\n  /**\n   * @ngdoc property\n   * @name ng.$locationProvider#hashPrefix\n   * @methodOf ng.$locationProvider\n   * @description\n   * @param {string=} prefix Prefix for hash part (containing path and search)\n   * @returns {*} current value if used as getter or itself (chaining) if used as setter\n   */\n  this.hashPrefix = function(prefix) {\n    if (isDefined(prefix)) {\n      hashPrefix = prefix;\n      return this;\n    } else {\n      return hashPrefix;\n    }\n  };\n\n  /**\n   * @ngdoc property\n   * @name ng.$locationProvider#html5Mode\n   * @methodOf ng.$locationProvider\n   * @description\n   * @param {boolean=} mode Use HTML5 strategy if available.\n   * @returns {*} current value if used as getter or itself (chaining) if used as setter\n   */\n  this.html5Mode = function(mode) {\n    if (isDefined(mode)) {\n      html5Mode = mode;\n      return this;\n    } else {\n      return html5Mode;\n    }\n  };\n\n  /**\n   * @ngdoc event\n   * @name ng.$location#$locationChangeStart\n   * @eventOf ng.$location\n   * @eventType broadcast on root scope\n   * @description\n   * Broadcasted before a URL will change. This change can be prevented by calling\n   * `preventDefault` method of the event. See {@link ng.$rootScope.Scope#$on} for more\n   * details about event object. Upon successful change\n   * {@link ng.$location#$locationChangeSuccess $locationChangeSuccess} is fired.\n   *\n   * @param {Object} angularEvent Synthetic event object.\n   * @param {string} newUrl New URL\n   * @param {string=} oldUrl URL that was before it was changed.\n   */\n\n  /**\n   * @ngdoc event\n   * @name ng.$location#$locationChangeSuccess\n   * @eventOf ng.$location\n   * @eventType broadcast on root scope\n   * @description\n   * Broadcasted after a URL was changed.\n   *\n   * @param {Object} angularEvent Synthetic event object.\n   * @param {string} newUrl New URL\n   * @param {string=} oldUrl URL that was before it was changed.\n   */\n\n  this.$get = ['$rootScope', '$browser', '$sniffer', '$rootElement',\n      function( $rootScope,   $browser,   $sniffer,   $rootElement) {\n    var $location,\n        LocationMode,\n        baseHref = $browser.baseHref(), // if base[href] is undefined, it defaults to ''\n        initialUrl = $browser.url(),\n        appBase;\n\n    if (html5Mode) {\n      appBase = serverBase(initialUrl) + (baseHref || '/');\n      LocationMode = $sniffer.history ? LocationHtml5Url : LocationHashbangInHtml5Url;\n    } else {\n      appBase = stripHash(initialUrl);\n      LocationMode = LocationHashbangUrl;\n    }\n    $location = new LocationMode(appBase, '#' + hashPrefix);\n    $location.$$parse($location.$$rewrite(initialUrl));\n\n    $rootElement.on('click', function(event) {\n      // TODO(vojta): rewrite link when opening in new tab/window (in legacy browser)\n      // currently we open nice url link and redirect then\n\n      if (event.ctrlKey || event.metaKey || event.which == 2) return;\n\n      var elm = jqLite(event.target);\n\n      // traverse the DOM up to find first A tag\n      while (lowercase(elm[0].nodeName) !== 'a') {\n        // ignore rewriting if no A tag (reached root element, or no parent - removed from document)\n        if (elm[0] === $rootElement[0] || !(elm = elm.parent())[0]) return;\n      }\n\n      var absHref = elm.prop('href');\n      var rewrittenUrl = $location.$$rewrite(absHref);\n\n      if (absHref && !elm.attr('target') && rewrittenUrl && !event.isDefaultPrevented()) {\n        event.preventDefault();\n        if (rewrittenUrl != $browser.url()) {\n          // update location manually\n          $location.$$parse(rewrittenUrl);\n          $rootScope.$apply();\n          // hack to work around FF6 bug 684208 when scenario runner clicks on links\n          window.angular['ff-684208-preventDefault'] = true;\n        }\n      }\n    });\n\n\n    // rewrite hashbang url <> html5 url\n    if ($location.absUrl() != initialUrl) {\n      $browser.url($location.absUrl(), true);\n    }\n\n    // update $location when $browser url changes\n    $browser.onUrlChange(function(newUrl) {\n      if ($location.absUrl() != newUrl) {\n        if ($rootScope.$broadcast('$locationChangeStart', newUrl,\n                                  $location.absUrl()).defaultPrevented) {\n          $browser.url($location.absUrl());\n          return;\n        }\n        $rootScope.$evalAsync(function() {\n          var oldUrl = $location.absUrl();\n\n          $location.$$parse(newUrl);\n          afterLocationChange(oldUrl);\n        });\n        if (!$rootScope.$$phase) $rootScope.$digest();\n      }\n    });\n\n    // update browser\n    var changeCounter = 0;\n    $rootScope.$watch(function $locationWatch() {\n      var oldUrl = $browser.url();\n      var currentReplace = $location.$$replace;\n\n      if (!changeCounter || oldUrl != $location.absUrl()) {\n        changeCounter++;\n        $rootScope.$evalAsync(function() {\n          if ($rootScope.$broadcast('$locationChangeStart', $location.absUrl(), oldUrl).\n              defaultPrevented) {\n            $location.$$parse(oldUrl);\n          } else {\n            $browser.url($location.absUrl(), currentReplace);\n            afterLocationChange(oldUrl);\n          }\n        });\n      }\n      $location.$$replace = false;\n\n      return changeCounter;\n    });\n\n    return $location;\n\n    function afterLocationChange(oldUrl) {\n      $rootScope.$broadcast('$locationChangeSuccess', $location.absUrl(), oldUrl);\n    }\n}];\n}\n\n/**\n * @ngdoc object\n * @name ng.$log\n * @requires $window\n *\n * @description\n * Simple service for logging. Default implementation safely writes the message\n * into the browser's console (if present).\n * \n * The main purpose of this service is to simplify debugging and troubleshooting.\n *\n * The default is not to log `debug` messages. You can use\n * {@link ng.$logProvider ng.$logProvider#debugEnabled} to change this.\n *\n * @example\n   <example>\n     <file name=\"script.js\">\n       function LogCtrl($scope, $log) {\n         $scope.$log = $log;\n         $scope.message = 'Hello World!';\n       }\n     </file>\n     <file name=\"index.html\">\n       <div ng-controller=\"LogCtrl\">\n         <p>Reload this page with open console, enter text and hit the log button...</p>\n         Message:\n         <input type=\"text\" ng-model=\"message\"/>\n         <button ng-click=\"$log.log(message)\">log</button>\n         <button ng-click=\"$log.warn(message)\">warn</button>\n         <button ng-click=\"$log.info(message)\">info</button>\n         <button ng-click=\"$log.error(message)\">error</button>\n       </div>\n     </file>\n   </example>\n */\n\n/**\n * @ngdoc object\n * @name ng.$logProvider\n * @description\n * Use the `$logProvider` to configure how the application logs messages\n */\nfunction $LogProvider(){\n  var debug = true,\n      self = this;\n  \n  /**\n   * @ngdoc property\n   * @name ng.$logProvider#debugEnabled\n   * @methodOf ng.$logProvider\n   * @description\n   * @param {string=} flag enable or disable debug level messages\n   * @returns {*} current value if used as getter or itself (chaining) if used as setter\n   */\n  this.debugEnabled = function(flag) {\n    if (isDefined(flag)) {\n      debug = flag;\n    return this;\n    } else {\n      return debug;\n    }\n  };\n  \n  this.$get = ['$window', function($window){\n    return {\n      /**\n       * @ngdoc method\n       * @name ng.$log#log\n       * @methodOf ng.$log\n       *\n       * @description\n       * Write a log message\n       */\n      log: consoleLog('log'),\n\n      /**\n       * @ngdoc method\n       * @name ng.$log#info\n       * @methodOf ng.$log\n       *\n       * @description\n       * Write an information message\n       */\n      info: consoleLog('info'),\n\n      /**\n       * @ngdoc method\n       * @name ng.$log#warn\n       * @methodOf ng.$log\n       *\n       * @description\n       * Write a warning message\n       */\n      warn: consoleLog('warn'),\n\n      /**\n       * @ngdoc method\n       * @name ng.$log#error\n       * @methodOf ng.$log\n       *\n       * @description\n       * Write an error message\n       */\n      error: consoleLog('error'),\n      \n      /**\n       * @ngdoc method\n       * @name ng.$log#debug\n       * @methodOf ng.$log\n       * \n       * @description\n       * Write a debug message\n       */\n      debug: (function () {\n        var fn = consoleLog('debug');\n\n        return function() {\n          if (debug) {\n            fn.apply(self, arguments);\n          }\n        };\n      }())\n    };\n\n    function formatError(arg) {\n      if (arg instanceof Error) {\n        if (arg.stack) {\n          arg = (arg.message && arg.stack.indexOf(arg.message) === -1)\n              ? 'Error: ' + arg.message + '\\n' + arg.stack\n              : arg.stack;\n        } else if (arg.sourceURL) {\n          arg = arg.message + '\\n' + arg.sourceURL + ':' + arg.line;\n        }\n      }\n      return arg;\n    }\n\n    function consoleLog(type) {\n      var console = $window.console || {},\n          logFn = console[type] || console.log || noop;\n\n      if (logFn.apply) {\n        return function() {\n          var args = [];\n          forEach(arguments, function(arg) {\n            args.push(formatError(arg));\n          });\n          return logFn.apply(console, args);\n        };\n      }\n\n      // we are IE which either doesn't have window.console => this is noop and we do nothing,\n      // or we are IE where console.log doesn't have apply so we log at least first 2 args\n      return function(arg1, arg2) {\n        logFn(arg1, arg2 == null ? '' : arg2);\n      };\n    }\n  }];\n}\n\nvar $parseMinErr = minErr('$parse');\nvar promiseWarningCache = {};\nvar promiseWarning;\n\n// Sandboxing Angular Expressions\n// ------------------------------\n// Angular expressions are generally considered safe because these expressions only have direct\n// access to $scope and locals. However, one can obtain the ability to execute arbitrary JS code by\n// obtaining a reference to native JS functions such as the Function constructor, the global Window\n// or Document object.  In addition, many powerful functions for use by JavaScript code are\n// published on scope that shouldn't be available from within an Angular expression.\n//\n// As an example, consider the following Angular expression:\n//\n//   {}.toString.constructor(alert(\"evil JS code\"))\n//\n// We want to prevent this type of access. For the sake of performance, during the lexing phase we\n// disallow any \"dotted\" access to any member named \"constructor\" or to any member whose name begins\n// or ends with an underscore.  The latter allows one to exclude the private / JavaScript only API\n// available on the scope and controllers from the context of an Angular expression.\n//\n// For reflective calls (a[b]), we check that the value of the lookup is not the Function\n// constructor, Window or DOM node while evaluating the expression, which is a stronger but more\n// expensive test. Since reflective calls are expensive anyway, this is not such a big deal compared\n// to static dereferencing.\n//\n// This sandboxing technique is not perfect and doesn't aim to be. The goal is to prevent exploits\n// against the expression language, but not to prevent exploits that were enabled by exposing\n// sensitive JavaScript or browser apis on Scope. Exposing such objects on a Scope is never a good\n// practice and therefore we are not even trying to protect against interaction with an object\n// explicitly exposed in this way.\n//\n// A developer could foil the name check by aliasing the Function constructor under a different\n// name on the scope.\n//\n// In general, it is not possible to access a Window object from an angular expression unless a\n// window or some DOM object that has a reference to window is published onto a Scope.\n\nfunction ensureSafeMemberName(name, fullExpression, allowConstructor) {\n  if (typeof name !== 'string' && toString.apply(name) !== \"[object String]\") {\n    return name;\n  }\n  if (name === \"constructor\" && !allowConstructor) {\n    throw $parseMinErr('isecfld',\n        'Referencing \"constructor\" field in Angular expressions is disallowed! Expression: {0}',\n        fullExpression);\n  }\n  if (name.charAt(0) === '_' || name.charAt(name.length-1) === '_') {\n    throw $parseMinErr('isecprv',\n        'Referencing private fields in Angular expressions is disallowed! Expression: {0}',\n        fullExpression);\n  }\n  return name;\n}\n\nfunction ensureSafeObject(obj, fullExpression) {\n  // nifty check if obj is Function that is fast and works across iframes and other contexts\n  if (obj && obj.constructor === obj) {\n    throw $parseMinErr('isecfn',\n        'Referencing Function in Angular expressions is disallowed! Expression: {0}',\n        fullExpression);\n  } else if (// isWindow(obj)\n      obj && obj.document && obj.location && obj.alert && obj.setInterval) {\n    throw $parseMinErr('isecwindow',\n        'Referencing the Window in Angular expressions is disallowed! Expression: {0}',\n        fullExpression);\n  } else if (// isElement(obj)\n      obj && (obj.nodeName || (obj.on && obj.find))) {\n    throw $parseMinErr('isecdom',\n        'Referencing DOM nodes in Angular expressions is disallowed! Expression: {0}',\n        fullExpression);\n  } else {\n    return obj;\n  }\n}\n\nvar OPERATORS = {\n    /* jshint bitwise : false */\n    'null':function(){return null;},\n    'true':function(){return true;},\n    'false':function(){return false;},\n    undefined:noop,\n    '+':function(self, locals, a,b){\n      a=a(self, locals); b=b(self, locals);\n      if (isDefined(a)) {\n        if (isDefined(b)) {\n          return a + b;\n        }\n        return a;\n      }\n      return isDefined(b)?b:undefined;},\n    '-':function(self, locals, a,b){\n          a=a(self, locals); b=b(self, locals);\n          return (isDefined(a)?a:0)-(isDefined(b)?b:0);\n        },\n    '*':function(self, locals, a,b){return a(self, locals)*b(self, locals);},\n    '/':function(self, locals, a,b){return a(self, locals)/b(self, locals);},\n    '%':function(self, locals, a,b){return a(self, locals)%b(self, locals);},\n    '^':function(self, locals, a,b){return a(self, locals)^b(self, locals);},\n    '=':noop,\n    '===':function(self, locals, a, b){return a(self, locals)===b(self, locals);},\n    '!==':function(self, locals, a, b){return a(self, locals)!==b(self, locals);},\n    '==':function(self, locals, a,b){return a(self, locals)==b(self, locals);},\n    '!=':function(self, locals, a,b){return a(self, locals)!=b(self, locals);},\n    '<':function(self, locals, a,b){return a(self, locals)<b(self, locals);},\n    '>':function(self, locals, a,b){return a(self, locals)>b(self, locals);},\n    '<=':function(self, locals, a,b){return a(self, locals)<=b(self, locals);},\n    '>=':function(self, locals, a,b){return a(self, locals)>=b(self, locals);},\n    '&&':function(self, locals, a,b){return a(self, locals)&&b(self, locals);},\n    '||':function(self, locals, a,b){return a(self, locals)||b(self, locals);},\n    '&':function(self, locals, a,b){return a(self, locals)&b(self, locals);},\n//    '|':function(self, locals, a,b){return a|b;},\n    '|':function(self, locals, a,b){return b(self, locals)(self, locals, a(self, locals));},\n    '!':function(self, locals, a){return !a(self, locals);}\n};\n/* jshint bitwise: true */\nvar ESCAPE = {\"n\":\"\\n\", \"f\":\"\\f\", \"r\":\"\\r\", \"t\":\"\\t\", \"v\":\"\\v\", \"'\":\"'\", '\"':'\"'};\n\n\n/////////////////////////////////////////\n\n\n/**\n * @constructor\n */\nvar Lexer = function (options) {\n  this.options = options;\n};\n\nLexer.prototype = {\n  constructor: Lexer,\n\n  lex: function (text) {\n    this.text = text;\n\n    this.index = 0;\n    this.ch = undefined;\n    this.lastCh = ':'; // can start regexp\n\n    this.tokens = [];\n\n    var token;\n    var json = [];\n\n    while (this.index < this.text.length) {\n      this.ch = this.text.charAt(this.index);\n      if (this.is('\"\\'')) {\n        this.readString(this.ch);\n      } else if (this.isNumber(this.ch) || this.is('.') && this.isNumber(this.peek())) {\n        this.readNumber();\n      } else if (this.isIdent(this.ch)) {\n        this.readIdent();\n        // identifiers can only be if the preceding char was a { or ,\n        if (this.was('{,') && json[0] === '{' &&\n            (token = this.tokens[this.tokens.length - 1])) {\n          token.json = token.text.indexOf('.') === -1;\n        }\n      } else if (this.is('(){}[].,;:?')) {\n        this.tokens.push({\n          index: this.index,\n          text: this.ch,\n          json: (this.was(':[,') && this.is('{[')) || this.is('}]:,')\n        });\n        if (this.is('{[')) json.unshift(this.ch);\n        if (this.is('}]')) json.shift();\n        this.index++;\n      } else if (this.isWhitespace(this.ch)) {\n        this.index++;\n        continue;\n      } else {\n        var ch2 = this.ch + this.peek();\n        var ch3 = ch2 + this.peek(2);\n        var fn = OPERATORS[this.ch];\n        var fn2 = OPERATORS[ch2];\n        var fn3 = OPERATORS[ch3];\n        if (fn3) {\n          this.tokens.push({index: this.index, text: ch3, fn: fn3});\n          this.index += 3;\n        } else if (fn2) {\n          this.tokens.push({index: this.index, text: ch2, fn: fn2});\n          this.index += 2;\n        } else if (fn) {\n          this.tokens.push({\n            index: this.index,\n            text: this.ch,\n            fn: fn,\n            json: (this.was('[,:') && this.is('+-'))\n          });\n          this.index += 1;\n        } else {\n          this.throwError('Unexpected next character ', this.index, this.index + 1);\n        }\n      }\n      this.lastCh = this.ch;\n    }\n    return this.tokens;\n  },\n\n  is: function(chars) {\n    return chars.indexOf(this.ch) !== -1;\n  },\n\n  was: function(chars) {\n    return chars.indexOf(this.lastCh) !== -1;\n  },\n\n  peek: function(i) {\n    var num = i || 1;\n    return (this.index + num < this.text.length) ? this.text.charAt(this.index + num) : false;\n  },\n\n  isNumber: function(ch) {\n    return ('0' <= ch && ch <= '9');\n  },\n\n  isWhitespace: function(ch) {\n    // IE treats non-breaking space as \\u00A0\n    return (ch === ' ' || ch === '\\r' || ch === '\\t' ||\n            ch === '\\n' || ch === '\\v' || ch === '\\u00A0');\n  },\n\n  isIdent: function(ch) {\n    return ('a' <= ch && ch <= 'z' ||\n            'A' <= ch && ch <= 'Z' ||\n            '_' === ch || ch === '$');\n  },\n\n  isExpOperator: function(ch) {\n    return (ch === '-' || ch === '+' || this.isNumber(ch));\n  },\n\n  throwError: function(error, start, end) {\n    end = end || this.index;\n    var colStr = (isDefined(start)\n            ? 's ' + start +  '-' + this.index + ' [' + this.text.substring(start, end) + ']'\n            : ' ' + end);\n    throw $parseMinErr('lexerr', 'Lexer Error: {0} at column{1} in expression [{2}].',\n        error, colStr, this.text);\n  },\n\n  readNumber: function() {\n    var number = '';\n    var start = this.index;\n    while (this.index < this.text.length) {\n      var ch = lowercase(this.text.charAt(this.index));\n      if (ch == '.' || this.isNumber(ch)) {\n        number += ch;\n      } else {\n        var peekCh = this.peek();\n        if (ch == 'e' && this.isExpOperator(peekCh)) {\n          number += ch;\n        } else if (this.isExpOperator(ch) &&\n            peekCh && this.isNumber(peekCh) &&\n            number.charAt(number.length - 1) == 'e') {\n          number += ch;\n        } else if (this.isExpOperator(ch) &&\n            (!peekCh || !this.isNumber(peekCh)) &&\n            number.charAt(number.length - 1) == 'e') {\n          this.throwError('Invalid exponent');\n        } else {\n          break;\n        }\n      }\n      this.index++;\n    }\n    number = 1 * number;\n    this.tokens.push({\n      index: start,\n      text: number,\n      json: true,\n      fn: function() { return number; }\n    });\n  },\n\n  readIdent: function() {\n    var parser = this;\n\n    var ident = '';\n    var start = this.index;\n\n    var lastDot, peekIndex, methodName, ch;\n\n    while (this.index < this.text.length) {\n      ch = this.text.charAt(this.index);\n      if (ch === '.' || this.isIdent(ch) || this.isNumber(ch)) {\n        if (ch === '.') lastDot = this.index;\n        ident += ch;\n      } else {\n        break;\n      }\n      this.index++;\n    }\n\n    //check if this is not a method invocation and if it is back out to last dot\n    if (lastDot) {\n      peekIndex = this.index;\n      while (peekIndex < this.text.length) {\n        ch = this.text.charAt(peekIndex);\n        if (ch === '(') {\n          methodName = ident.substr(lastDot - start + 1);\n          ident = ident.substr(0, lastDot - start);\n          this.index = peekIndex;\n          break;\n        }\n        if (this.isWhitespace(ch)) {\n          peekIndex++;\n        } else {\n          break;\n        }\n      }\n    }\n\n\n    var token = {\n      index: start,\n      text: ident\n    };\n\n    // OPERATORS is our own object so we don't need to use special hasOwnPropertyFn\n    if (OPERATORS.hasOwnProperty(ident)) {\n      token.fn = OPERATORS[ident];\n      token.json = OPERATORS[ident];\n    } else {\n      var getter = getterFn(ident, this.options, this.text);\n      token.fn = extend(function(self, locals) {\n        return (getter(self, locals));\n      }, {\n        assign: function(self, value) {\n          return setter(self, ident, value, parser.text, parser.options);\n        }\n      });\n    }\n\n    this.tokens.push(token);\n\n    if (methodName) {\n      this.tokens.push({\n        index:lastDot,\n        text: '.',\n        json: false\n      });\n      this.tokens.push({\n        index: lastDot + 1,\n        text: methodName,\n        json: false\n      });\n    }\n  },\n\n  readString: function(quote) {\n    var start = this.index;\n    this.index++;\n    var string = '';\n    var rawString = quote;\n    var escape = false;\n    while (this.index < this.text.length) {\n      var ch = this.text.charAt(this.index);\n      rawString += ch;\n      if (escape) {\n        if (ch === 'u') {\n          var hex = this.text.substring(this.index + 1, this.index + 5);\n          if (!hex.match(/[\\da-f]{4}/i))\n            this.throwError('Invalid unicode escape [\\\\u' + hex + ']');\n          this.index += 4;\n          string += String.fromCharCode(parseInt(hex, 16));\n        } else {\n          var rep = ESCAPE[ch];\n          if (rep) {\n            string += rep;\n          } else {\n            string += ch;\n          }\n        }\n        escape = false;\n      } else if (ch === '\\\\') {\n        escape = true;\n      } else if (ch === quote) {\n        this.index++;\n        this.tokens.push({\n          index: start,\n          text: rawString,\n          string: string,\n          json: true,\n          fn: function() { return string; }\n        });\n        return;\n      } else {\n        string += ch;\n      }\n      this.index++;\n    }\n    this.throwError('Unterminated quote', start);\n  }\n};\n\n\n/**\n * @constructor\n */\nvar Parser = function (lexer, $filter, options) {\n  this.lexer = lexer;\n  this.$filter = $filter;\n  this.options = options;\n};\n\nParser.ZERO = function () { return 0; };\n\nParser.prototype = {\n  constructor: Parser,\n\n  parse: function (text, json) {\n    this.text = text;\n\n    //TODO(i): strip all the obsolte json stuff from this file\n    this.json = json;\n\n    this.tokens = this.lexer.lex(text);\n\n    if (json) {\n      // The extra level of aliasing is here, just in case the lexer misses something, so that\n      // we prevent any accidental execution in JSON.\n      this.assignment = this.logicalOR;\n\n      this.functionCall =\n      this.fieldAccess =\n      this.objectIndex =\n      this.filterChain = function() {\n        this.throwError('is not valid json', {text: text, index: 0});\n      };\n    }\n\n    var value = json ? this.primary() : this.statements();\n\n    if (this.tokens.length !== 0) {\n      this.throwError('is an unexpected token', this.tokens[0]);\n    }\n\n    value.literal = !!value.literal;\n    value.constant = !!value.constant;\n\n    return value;\n  },\n\n  primary: function () {\n    var primary;\n    if (this.expect('(')) {\n      primary = this.filterChain();\n      this.consume(')');\n    } else if (this.expect('[')) {\n      primary = this.arrayDeclaration();\n    } else if (this.expect('{')) {\n      primary = this.object();\n    } else {\n      var token = this.expect();\n      primary = token.fn;\n      if (!primary) {\n        this.throwError('not a primary expression', token);\n      }\n      if (token.json) {\n        primary.constant = true;\n        primary.literal = true;\n      }\n    }\n\n    var next, context;\n    while ((next = this.expect('(', '[', '.'))) {\n      if (next.text === '(') {\n        primary = this.functionCall(primary, context);\n        context = null;\n      } else if (next.text === '[') {\n        context = primary;\n        primary = this.objectIndex(primary);\n      } else if (next.text === '.') {\n        context = primary;\n        primary = this.fieldAccess(primary);\n      } else {\n        this.throwError('IMPOSSIBLE');\n      }\n    }\n    return primary;\n  },\n\n  throwError: function(msg, token) {\n    throw $parseMinErr('syntax',\n        'Syntax Error: Token \\'{0}\\' {1} at column {2} of the expression [{3}] starting at [{4}].',\n          token.text, msg, (token.index + 1), this.text, this.text.substring(token.index));\n  },\n\n  peekToken: function() {\n    if (this.tokens.length === 0)\n      throw $parseMinErr('ueoe', 'Unexpected end of expression: {0}', this.text);\n    return this.tokens[0];\n  },\n\n  peek: function(e1, e2, e3, e4) {\n    if (this.tokens.length > 0) {\n      var token = this.tokens[0];\n      var t = token.text;\n      if (t === e1 || t === e2 || t === e3 || t === e4 ||\n          (!e1 && !e2 && !e3 && !e4)) {\n        return token;\n      }\n    }\n    return false;\n  },\n\n  expect: function(e1, e2, e3, e4){\n    var token = this.peek(e1, e2, e3, e4);\n    if (token) {\n      if (this.json && !token.json) {\n        this.throwError('is not valid json', token);\n      }\n      this.tokens.shift();\n      return token;\n    }\n    return false;\n  },\n\n  consume: function(e1){\n    if (!this.expect(e1)) {\n      this.throwError('is unexpected, expecting [' + e1 + ']', this.peek());\n    }\n  },\n\n  unaryFn: function(fn, right) {\n    return extend(function(self, locals) {\n      return fn(self, locals, right);\n    }, {\n      constant:right.constant\n    });\n  },\n\n  ternaryFn: function(left, middle, right){\n    return extend(function(self, locals){\n      return left(self, locals) ? middle(self, locals) : right(self, locals);\n    }, {\n      constant: left.constant && middle.constant && right.constant\n    });\n  },\n\n  binaryFn: function(left, fn, right) {\n    return extend(function(self, locals) {\n      return fn(self, locals, left, right);\n    }, {\n      constant:left.constant && right.constant\n    });\n  },\n\n  statements: function() {\n    var statements = [];\n    while (true) {\n      if (this.tokens.length > 0 && !this.peek('}', ')', ';', ']'))\n        statements.push(this.filterChain());\n      if (!this.expect(';')) {\n        // optimize for the common case where there is only one statement.\n        // TODO(size): maybe we should not support multiple statements?\n        return (statements.length === 1)\n            ? statements[0]\n            : function(self, locals) {\n                var value;\n                for (var i = 0; i < statements.length; i++) {\n                  var statement = statements[i];\n                  if (statement) {\n                    value = statement(self, locals);\n                  }\n                }\n                return value;\n              };\n      }\n    }\n  },\n\n  filterChain: function() {\n    var left = this.expression();\n    var token;\n    while (true) {\n      if ((token = this.expect('|'))) {\n        left = this.binaryFn(left, token.fn, this.filter());\n      } else {\n        return left;\n      }\n    }\n  },\n\n  filter: function() {\n    var token = this.expect();\n    var fn = this.$filter(token.text);\n    var argsFn = [];\n    while (true) {\n      if ((token = this.expect(':'))) {\n        argsFn.push(this.expression());\n      } else {\n        var fnInvoke = function(self, locals, input) {\n          var args = [input];\n          for (var i = 0; i < argsFn.length; i++) {\n            args.push(argsFn[i](self, locals));\n          }\n          return fn.apply(self, args);\n        };\n        return function() {\n          return fnInvoke;\n        };\n      }\n    }\n  },\n\n  expression: function() {\n    return this.assignment();\n  },\n\n  assignment: function() {\n    var left = this.ternary();\n    var right;\n    var token;\n    if ((token = this.expect('='))) {\n      if (!left.assign) {\n        this.throwError('implies assignment but [' +\n            this.text.substring(0, token.index) + '] can not be assigned to', token);\n      }\n      right = this.ternary();\n      return function(scope, locals) {\n        return left.assign(scope, right(scope, locals), locals);\n      };\n    }\n    return left;\n  },\n\n  ternary: function() {\n    var left = this.logicalOR();\n    var middle;\n    var token;\n    if ((token = this.expect('?'))) {\n      middle = this.ternary();\n      if ((token = this.expect(':'))) {\n        return this.ternaryFn(left, middle, this.ternary());\n      } else {\n        this.throwError('expected :', token);\n      }\n    } else {\n      return left;\n    }\n  },\n\n  logicalOR: function() {\n    var left = this.logicalAND();\n    var token;\n    while (true) {\n      if ((token = this.expect('||'))) {\n        left = this.binaryFn(left, token.fn, this.logicalAND());\n      } else {\n        return left;\n      }\n    }\n  },\n\n  logicalAND: function() {\n    var left = this.equality();\n    var token;\n    if ((token = this.expect('&&'))) {\n      left = this.binaryFn(left, token.fn, this.logicalAND());\n    }\n    return left;\n  },\n\n  equality: function() {\n    var left = this.relational();\n    var token;\n    if ((token = this.expect('==','!=','===','!=='))) {\n      left = this.binaryFn(left, token.fn, this.equality());\n    }\n    return left;\n  },\n\n  relational: function() {\n    var left = this.additive();\n    var token;\n    if ((token = this.expect('<', '>', '<=', '>='))) {\n      left = this.binaryFn(left, token.fn, this.relational());\n    }\n    return left;\n  },\n\n  additive: function() {\n    var left = this.multiplicative();\n    var token;\n    while ((token = this.expect('+','-'))) {\n      left = this.binaryFn(left, token.fn, this.multiplicative());\n    }\n    return left;\n  },\n\n  multiplicative: function() {\n    var left = this.unary();\n    var token;\n    while ((token = this.expect('*','/','%'))) {\n      left = this.binaryFn(left, token.fn, this.unary());\n    }\n    return left;\n  },\n\n  unary: function() {\n    var token;\n    if (this.expect('+')) {\n      return this.primary();\n    } else if ((token = this.expect('-'))) {\n      return this.binaryFn(Parser.ZERO, token.fn, this.unary());\n    } else if ((token = this.expect('!'))) {\n      return this.unaryFn(token.fn, this.unary());\n    } else {\n      return this.primary();\n    }\n  },\n\n  fieldAccess: function(object) {\n    var parser = this;\n    var field = this.expect().text;\n    var getter = getterFn(field, this.options, this.text);\n\n    return extend(function(scope, locals, self) {\n      return getter(self || object(scope, locals), locals);\n    }, {\n      assign: function(scope, value, locals) {\n        return setter(object(scope, locals), field, value, parser.text, parser.options);\n      }\n    });\n  },\n\n  objectIndex: function(obj) {\n    var parser = this;\n\n    var indexFn = this.expression();\n    this.consume(']');\n\n    return extend(function(self, locals) {\n      var o = obj(self, locals),\n          // In the getter, we will not block looking up \"constructor\" by name in order to support user defined\n          // constructors.  However, if value looked up is the Function constructor, we will still block it in the\n          // ensureSafeObject call right after we look up o[i] (a few lines below.)\n          i = ensureSafeMemberName(indexFn(self, locals), parser.text, true /* allowConstructor */),\n          v, p;\n\n      if (!o) return undefined;\n      v = ensureSafeObject(o[i], parser.text);\n      if (v && v.then && parser.options.unwrapPromises) {\n        p = v;\n        if (!('$$v' in v)) {\n          p.$$v = undefined;\n          p.then(function(val) { p.$$v = val; });\n        }\n        v = v.$$v;\n      }\n      return v;\n    }, {\n      assign: function(self, value, locals) {\n        var key = ensureSafeMemberName(indexFn(self, locals), parser.text);\n        // prevent overwriting of Function.constructor which would break ensureSafeObject check\n        var safe = ensureSafeObject(obj(self, locals), parser.text);\n        return safe[key] = value;\n      }\n    });\n  },\n\n  functionCall: function(fn, contextGetter) {\n    var argsFn = [];\n    if (this.peekToken().text !== ')') {\n      do {\n        argsFn.push(this.expression());\n      } while (this.expect(','));\n    }\n    this.consume(')');\n\n    var parser = this;\n\n    return function(scope, locals) {\n      var args = [];\n      var context = contextGetter ? contextGetter(scope, locals) : scope;\n\n      for (var i = 0; i < argsFn.length; i++) {\n        args.push(argsFn[i](scope, locals));\n      }\n      var fnPtr = fn(scope, locals, context) || noop;\n\n      ensureSafeObject(context, parser.text);\n      ensureSafeObject(fnPtr, parser.text);\n\n      // IE stupidity! (IE doesn't have apply for some native functions)\n      var v = fnPtr.apply\n            ? fnPtr.apply(context, args)\n            : fnPtr(args[0], args[1], args[2], args[3], args[4]);\n\n      return ensureSafeObject(v, parser.text);\n    };\n  },\n\n  // This is used with json array declaration\n  arrayDeclaration: function () {\n    var elementFns = [];\n    var allConstant = true;\n    if (this.peekToken().text !== ']') {\n      do {\n        var elementFn = this.expression();\n        elementFns.push(elementFn);\n        if (!elementFn.constant) {\n          allConstant = false;\n        }\n      } while (this.expect(','));\n    }\n    this.consume(']');\n\n    return extend(function(self, locals) {\n      var array = [];\n      for (var i = 0; i < elementFns.length; i++) {\n        array.push(elementFns[i](self, locals));\n      }\n      return array;\n    }, {\n      literal: true,\n      constant: allConstant\n    });\n  },\n\n  object: function () {\n    var keyValues = [];\n    var allConstant = true;\n    if (this.peekToken().text !== '}') {\n      do {\n        var token = this.expect(),\n        key = token.string || token.text;\n        this.consume(':');\n        var value = this.expression();\n        keyValues.push({key: key, value: value});\n        if (!value.constant) {\n          allConstant = false;\n        }\n      } while (this.expect(','));\n    }\n    this.consume('}');\n\n    return extend(function(self, locals) {\n      var object = {};\n      for (var i = 0; i < keyValues.length; i++) {\n        var keyValue = keyValues[i];\n        object[keyValue.key] = keyValue.value(self, locals);\n      }\n      return object;\n    }, {\n      literal: true,\n      constant: allConstant\n    });\n  }\n};\n\n\n//////////////////////////////////////////////////\n// Parser helper functions\n//////////////////////////////////////////////////\n\nfunction setter(obj, path, setValue, fullExp, options) {\n  //needed?\n  options = options || {};\n\n  var element = path.split('.'), key;\n  for (var i = 0; element.length > 1; i++) {\n    key = ensureSafeMemberName(element.shift(), fullExp);\n    var propertyObj = obj[key];\n    if (!propertyObj) {\n      propertyObj = {};\n      obj[key] = propertyObj;\n    }\n    obj = propertyObj;\n    if (obj.then && options.unwrapPromises) {\n      promiseWarning(fullExp);\n      if (!(\"$$v\" in obj)) {\n        (function(promise) {\n          promise.then(function(val) { promise.$$v = val; }); }\n        )(obj);\n      }\n      if (obj.$$v === undefined) {\n        obj.$$v = {};\n      }\n      obj = obj.$$v;\n    }\n  }\n  key = ensureSafeMemberName(element.shift(), fullExp);\n  obj[key] = setValue;\n  return setValue;\n}\n\nvar getterFnCache = {};\n\n/**\n * Implementation of the \"Black Hole\" variant from:\n * - http://jsperf.com/angularjs-parse-getter/4\n * - http://jsperf.com/path-evaluation-simplified/7\n */\nfunction cspSafeGetterFn(key0, key1, key2, key3, key4, fullExp, options) {\n  ensureSafeMemberName(key0, fullExp);\n  ensureSafeMemberName(key1, fullExp);\n  ensureSafeMemberName(key2, fullExp);\n  ensureSafeMemberName(key3, fullExp);\n  ensureSafeMemberName(key4, fullExp);\n\n  return !options.unwrapPromises\n      ? function cspSafeGetter(scope, locals) {\n          var pathVal = (locals && locals.hasOwnProperty(key0)) ? locals : scope;\n\n          if (pathVal === null || pathVal === undefined) return pathVal;\n          pathVal = pathVal[key0];\n\n          if (!key1 || pathVal === null || pathVal === undefined) return pathVal;\n          pathVal = pathVal[key1];\n\n          if (!key2 || pathVal === null || pathVal === undefined) return pathVal;\n          pathVal = pathVal[key2];\n\n          if (!key3 || pathVal === null || pathVal === undefined) return pathVal;\n          pathVal = pathVal[key3];\n\n          if (!key4 || pathVal === null || pathVal === undefined) return pathVal;\n          pathVal = pathVal[key4];\n\n          return pathVal;\n        }\n      : function cspSafePromiseEnabledGetter(scope, locals) {\n          var pathVal = (locals && locals.hasOwnProperty(key0)) ? locals : scope,\n              promise;\n\n          if (pathVal === null || pathVal === undefined) return pathVal;\n\n          pathVal = pathVal[key0];\n          if (pathVal && pathVal.then) {\n            promiseWarning(fullExp);\n            if (!(\"$$v\" in pathVal)) {\n              promise = pathVal;\n              promise.$$v = undefined;\n              promise.then(function(val) { promise.$$v = val; });\n            }\n            pathVal = pathVal.$$v;\n          }\n          if (!key1 || pathVal === null || pathVal === undefined) return pathVal;\n\n          pathVal = pathVal[key1];\n          if (pathVal && pathVal.then) {\n            promiseWarning(fullExp);\n            if (!(\"$$v\" in pathVal)) {\n              promise = pathVal;\n              promise.$$v = undefined;\n              promise.then(function(val) { promise.$$v = val; });\n            }\n            pathVal = pathVal.$$v;\n          }\n          if (!key2 || pathVal === null || pathVal === undefined) return pathVal;\n\n          pathVal = pathVal[key2];\n          if (pathVal && pathVal.then) {\n            promiseWarning(fullExp);\n            if (!(\"$$v\" in pathVal)) {\n              promise = pathVal;\n              promise.$$v = undefined;\n              promise.then(function(val) { promise.$$v = val; });\n            }\n            pathVal = pathVal.$$v;\n          }\n          if (!key3 || pathVal === null || pathVal === undefined) return pathVal;\n\n          pathVal = pathVal[key3];\n          if (pathVal && pathVal.then) {\n            promiseWarning(fullExp);\n            if (!(\"$$v\" in pathVal)) {\n              promise = pathVal;\n              promise.$$v = undefined;\n              promise.then(function(val) { promise.$$v = val; });\n            }\n            pathVal = pathVal.$$v;\n          }\n          if (!key4 || pathVal === null || pathVal === undefined) return pathVal;\n\n          pathVal = pathVal[key4];\n          if (pathVal && pathVal.then) {\n            promiseWarning(fullExp);\n            if (!(\"$$v\" in pathVal)) {\n              promise = pathVal;\n              promise.$$v = undefined;\n              promise.then(function(val) { promise.$$v = val; });\n            }\n            pathVal = pathVal.$$v;\n          }\n          return pathVal;\n        };\n}\n\nfunction getterFn(path, options, fullExp) {\n  // Check whether the cache has this getter already.\n  // We can use hasOwnProperty directly on the cache because we ensure,\n  // see below, that the cache never stores a path called 'hasOwnProperty'\n  if (getterFnCache.hasOwnProperty(path)) {\n    return getterFnCache[path];\n  }\n\n  var pathKeys = path.split('.'),\n      pathKeysLength = pathKeys.length,\n      fn;\n\n  if (options.csp) {\n    if (pathKeysLength < 6) {\n      fn = cspSafeGetterFn(pathKeys[0], pathKeys[1], pathKeys[2], pathKeys[3], pathKeys[4], fullExp,\n                          options);\n    } else {\n      fn = function(scope, locals) {\n        var i = 0, val;\n        do {\n          val = cspSafeGetterFn(pathKeys[i++], pathKeys[i++], pathKeys[i++], pathKeys[i++],\n                                pathKeys[i++], fullExp, options)(scope, locals);\n\n          locals = undefined; // clear after first iteration\n          scope = val;\n        } while (i < pathKeysLength);\n        return val;\n      };\n    }\n  } else {\n    var code = 'var l, fn, p;\\n';\n    forEach(pathKeys, function(key, index) {\n      ensureSafeMemberName(key, fullExp);\n      code += 'if(s === null || s === undefined) return s;\\n' +\n              'l=s;\\n' +\n              's='+ (index\n                      // we simply dereference 's' on any .dot notation\n                      ? 's'\n                      // but if we are first then we check locals first, and if so read it first\n                      : '((k&&k.hasOwnProperty(\"' + key + '\"))?k:s)') + '[\"' + key + '\"]' + ';\\n' +\n              (options.unwrapPromises\n                ? 'if (s && s.then) {\\n' +\n                  ' pw(\"' + fullExp.replace(/\\\"/g, '\\\\\"') + '\");\\n' +\n                  ' if (!(\"$$v\" in s)) {\\n' +\n                    ' p=s;\\n' +\n                    ' p.$$v = undefined;\\n' +\n                    ' p.then(function(v) {p.$$v=v;});\\n' +\n                    '}\\n' +\n                  ' s=s.$$v\\n' +\n                '}\\n'\n                : '');\n    });\n    code += 'return s;';\n\n    /* jshint -W054 */\n    var evaledFnGetter = new Function('s', 'k', 'pw', code); // s=scope, k=locals, pw=promiseWarning\n    /* jshint +W054 */\n    evaledFnGetter.toString = function() { return code; };\n    fn = function(scope, locals) {\n      return evaledFnGetter(scope, locals, promiseWarning);\n    };\n  }\n\n  // Only cache the value if it's not going to mess up the cache object\n  // This is more performant that using Object.prototype.hasOwnProperty.call\n  if (path !== 'hasOwnProperty') {\n    getterFnCache[path] = fn;\n  }\n  return fn;\n}\n\n///////////////////////////////////\n\n/**\n * @ngdoc function\n * @name ng.$parse\n * @function\n *\n * @description\n *\n * Converts Angular {@link guide/expression expression} into a function.\n *\n * <pre>\n *   var getter = $parse('user.name');\n *   var setter = getter.assign;\n *   var context = {user:{name:'angular'}};\n *   var locals = {user:{name:'local'}};\n *\n *   expect(getter(context)).toEqual('angular');\n *   setter(context, 'newValue');\n *   expect(context.user.name).toEqual('newValue');\n *   expect(getter(context, locals)).toEqual('local');\n * </pre>\n *\n *\n * @param {string} expression String expression to compile.\n * @returns {function(context, locals)} a function which represents the compiled expression:\n *\n *    * `context` – `{object}` – an object against which any expressions embedded in the strings\n *      are evaluated against (typically a scope object).\n *    * `locals` – `{object=}` – local variables context object, useful for overriding values in\n *      `context`.\n *\n *    The returned function also has the following properties:\n *      * `literal` – `{boolean}` – whether the expression's top-level node is a JavaScript\n *        literal.\n *      * `constant` – `{boolean}` – whether the expression is made entirely of JavaScript\n *        constant literals.\n *      * `assign` – `{?function(context, value)}` – if the expression is assignable, this will be\n *        set to a function to change its value on the given context.\n *\n */\n\n\n/**\n * @ngdoc object\n * @name ng.$parseProvider\n * @function\n *\n * @description\n * `$parseProvider` can be used for configuring the default behavior of the {@link ng.$parse $parse}\n *  service.\n */\nfunction $ParseProvider() {\n  var cache = {};\n\n  var $parseOptions = {\n    csp: false,\n    unwrapPromises: false,\n    logPromiseWarnings: true\n  };\n\n\n  /**\n   * @deprecated Promise unwrapping via $parse is deprecated and will be removed in the future.\n   *\n   * @ngdoc method\n   * @name ng.$parseProvider#unwrapPromises\n   * @methodOf ng.$parseProvider\n   * @description\n   *\n   * **This feature is deprecated, see deprecation notes below for more info**\n   *\n   * If set to true (default is false), $parse will unwrap promises automatically when a promise is\n   * found at any part of the expression. In other words, if set to true, the expression will always\n   * result in a non-promise value.\n   *\n   * While the promise is unresolved, it's treated as undefined, but once resolved and fulfilled,\n   * the fulfillment value is used in place of the promise while evaluating the expression.\n   *\n   * **Deprecation notice**\n   *\n   * This is a feature that didn't prove to be wildly useful or popular, primarily because of the\n   * dichotomy between data access in templates (accessed as raw values) and controller code\n   * (accessed as promises).\n   *\n   * In most code we ended up resolving promises manually in controllers anyway and thus unifying\n   * the model access there.\n   *\n   * Other downsides of automatic promise unwrapping:\n   *\n   * - when building components it's often desirable to receive the raw promises\n   * - adds complexity and slows down expression evaluation\n   * - makes expression code pre-generation unattractive due to the amount of code that needs to be\n   *   generated\n   * - makes IDE auto-completion and tool support hard\n   *\n   * **Warning Logs**\n   *\n   * If the unwrapping is enabled, Angular will log a warning about each expression that unwraps a\n   * promise (to reduce the noise, each expression is logged only once). To disable this logging use\n   * `$parseProvider.logPromiseWarnings(false)` api.\n   *\n   *\n   * @param {boolean=} value New value.\n   * @returns {boolean|self} Returns the current setting when used as getter and self if used as\n   *                         setter.\n   */\n  this.unwrapPromises = function(value) {\n    if (isDefined(value)) {\n      $parseOptions.unwrapPromises = !!value;\n      return this;\n    } else {\n      return $parseOptions.unwrapPromises;\n    }\n  };\n\n\n  /**\n   * @deprecated Promise unwrapping via $parse is deprecated and will be removed in the future.\n   *\n   * @ngdoc method\n   * @name ng.$parseProvider#logPromiseWarnings\n   * @methodOf ng.$parseProvider\n   * @description\n   *\n   * Controls whether Angular should log a warning on any encounter of a promise in an expression.\n   *\n   * The default is set to `true`.\n   *\n   * This setting applies only if `$parseProvider.unwrapPromises` setting is set to true as well.\n   *\n   * @param {boolean=} value New value.\n   * @returns {boolean|self} Returns the current setting when used as getter and self if used as\n   *                         setter.\n   */\n this.logPromiseWarnings = function(value) {\n    if (isDefined(value)) {\n      $parseOptions.logPromiseWarnings = value;\n      return this;\n    } else {\n      return $parseOptions.logPromiseWarnings;\n    }\n  };\n\n\n  this.$get = ['$filter', '$sniffer', '$log', function($filter, $sniffer, $log) {\n    $parseOptions.csp = $sniffer.csp;\n\n    promiseWarning = function promiseWarningFn(fullExp) {\n      if (!$parseOptions.logPromiseWarnings || promiseWarningCache.hasOwnProperty(fullExp)) return;\n      promiseWarningCache[fullExp] = true;\n      $log.warn('[$parse] Promise found in the expression `' + fullExp + '`. ' +\n          'Automatic unwrapping of promises in Angular expressions is deprecated.');\n    };\n\n    return function(exp) {\n      var parsedExpression;\n\n      switch (typeof exp) {\n        case 'string':\n\n          if (cache.hasOwnProperty(exp)) {\n            return cache[exp];\n          }\n\n          var lexer = new Lexer($parseOptions);\n          var parser = new Parser(lexer, $filter, $parseOptions);\n          parsedExpression = parser.parse(exp, false);\n\n          if (exp !== 'hasOwnProperty') {\n            // Only cache the value if it's not going to mess up the cache object\n            // This is more performant that using Object.prototype.hasOwnProperty.call\n            cache[exp] = parsedExpression;\n          }\n\n          return parsedExpression;\n\n        case 'function':\n          return exp;\n\n        default:\n          return noop;\n      }\n    };\n  }];\n}\n\n/**\n * @ngdoc service\n * @name ng.$q\n * @requires $rootScope\n *\n * @description\n * A promise/deferred implementation inspired by [Kris Kowal's Q](https://github.com/kriskowal/q).\n *\n * [The CommonJS Promise proposal](http://wiki.commonjs.org/wiki/Promises) describes a promise as an\n * interface for interacting with an object that represents the result of an action that is\n * performed asynchronously, and may or may not be finished at any given point in time.\n *\n * From the perspective of dealing with error handling, deferred and promise APIs are to\n * asynchronous programming what `try`, `catch` and `throw` keywords are to synchronous programming.\n *\n * <pre>\n *   // for the purpose of this example let's assume that variables `$q` and `scope` are\n *   // available in the current lexical scope (they could have been injected or passed in).\n *\n *   function asyncGreet(name) {\n *     var deferred = $q.defer();\n *\n *     setTimeout(function() {\n *       // since this fn executes async in a future turn of the event loop, we need to wrap\n *       // our code into an $apply call so that the model changes are properly observed.\n *       scope.$apply(function() {\n *         deferred.notify('About to greet ' + name + '.');\n *\n *         if (okToGreet(name)) {\n *           deferred.resolve('Hello, ' + name + '!');\n *         } else {\n *           deferred.reject('Greeting ' + name + ' is not allowed.');\n *         }\n *       });\n *     }, 1000);\n *\n *     return deferred.promise;\n *   }\n *\n *   var promise = asyncGreet('Robin Hood');\n *   promise.then(function(greeting) {\n *     alert('Success: ' + greeting);\n *   }, function(reason) {\n *     alert('Failed: ' + reason);\n *   }, function(update) {\n *     alert('Got notification: ' + update);\n *   });\n * </pre>\n *\n * At first it might not be obvious why this extra complexity is worth the trouble. The payoff\n * comes in the way of guarantees that promise and deferred APIs make, see\n * https://github.com/kriskowal/uncommonjs/blob/master/promises/specification.md.\n *\n * Additionally the promise api allows for composition that is very hard to do with the\n * traditional callback ([CPS](http://en.wikipedia.org/wiki/Continuation-passing_style)) approach.\n * For more on this please see the [Q documentation](https://github.com/kriskowal/q) especially the\n * section on serial or parallel joining of promises.\n *\n *\n * # The Deferred API\n *\n * A new instance of deferred is constructed by calling `$q.defer()`.\n *\n * The purpose of the deferred object is to expose the associated Promise instance as well as APIs\n * that can be used for signaling the successful or unsuccessful completion, as well as the status\n * of the task.\n *\n * **Methods**\n *\n * - `resolve(value)` – resolves the derived promise with the `value`. If the value is a rejection\n *   constructed via `$q.reject`, the promise will be rejected instead.\n * - `reject(reason)` – rejects the derived promise with the `reason`. This is equivalent to\n *   resolving it with a rejection constructed via `$q.reject`.\n * - `notify(value)` - provides updates on the status of the promises execution. This may be called\n *   multiple times before the promise is either resolved or rejected.\n *\n * **Properties**\n *\n * - promise – `{Promise}` – promise object associated with this deferred.\n *\n *\n * # The Promise API\n *\n * A new promise instance is created when a deferred instance is created and can be retrieved by\n * calling `deferred.promise`.\n *\n * The purpose of the promise object is to allow for interested parties to get access to the result\n * of the deferred task when it completes.\n *\n * **Methods**\n *\n * - `then(successCallback, errorCallback, notifyCallback)` – regardless of when the promise was or\n *   will be resolved or rejected, `then` calls one of the success or error callbacks asynchronously\n *   as soon as the result is available. The callbacks are called with a single argument: the result\n *   or rejection reason. Additionally, the notify callback may be called zero or more times to\n *   provide a progress indication, before the promise is resolved or rejected.\n *\n *   This method *returns a new promise* which is resolved or rejected via the return value of the\n *   `successCallback`, `errorCallback`. It also notifies via the return value of the\n *   `notifyCallback` method. The promise can not be resolved or rejected from the notifyCallback\n *   method.\n *\n * - `catch(errorCallback)` – shorthand for `promise.then(null, errorCallback)`\n *\n * - `finally(callback)` – allows you to observe either the fulfillment or rejection of a promise,\n *   but to do so without modifying the final value. This is useful to release resources or do some\n *   clean-up that needs to be done whether the promise was rejected or resolved. See the [full\n *   specification](https://github.com/kriskowal/q/wiki/API-Reference#promisefinallycallback) for\n *   more information.\n *\n *   Because `finally` is a reserved word in JavaScript and reserved keywords are not supported as\n *   property names by ES3, you'll need to invoke the method like `promise['finally'](callback)` to\n *   make your code IE8 compatible.\n *\n * # Chaining promises\n *\n * Because calling the `then` method of a promise returns a new derived promise, it is easily\n * possible to create a chain of promises:\n *\n * <pre>\n *   promiseB = promiseA.then(function(result) {\n *     return result + 1;\n *   });\n *\n *   // promiseB will be resolved immediately after promiseA is resolved and its value\n *   // will be the result of promiseA incremented by 1\n * </pre>\n *\n * It is possible to create chains of any length and since a promise can be resolved with another\n * promise (which will defer its resolution further), it is possible to pause/defer resolution of\n * the promises at any point in the chain. This makes it possible to implement powerful APIs like\n * $http's response interceptors.\n *\n *\n * # Differences between Kris Kowal's Q and $q\n *\n *  There are three main differences:\n *\n * - $q is integrated with the {@link ng.$rootScope.Scope} Scope model observation\n *   mechanism in angular, which means faster propagation of resolution or rejection into your\n *   models and avoiding unnecessary browser repaints, which would result in flickering UI.\n * - Q has many more features than $q, but that comes at a cost of bytes. $q is tiny, but contains\n *   all the important functionality needed for common async tasks.\n *\n *  # Testing\n *\n *  <pre>\n *    it('should simulate promise', inject(function($q, $rootScope) {\n *      var deferred = $q.defer();\n *      var promise = deferred.promise;\n *      var resolvedValue;\n *\n *      promise.then(function(value) { resolvedValue = value; });\n *      expect(resolvedValue).toBeUndefined();\n *\n *      // Simulate resolving of promise\n *      deferred.resolve(123);\n *      // Note that the 'then' function does not get called synchronously.\n *      // This is because we want the promise API to always be async, whether or not\n *      // it got called synchronously or asynchronously.\n *      expect(resolvedValue).toBeUndefined();\n *\n *      // Propagate promise resolution to 'then' functions using $apply().\n *      $rootScope.$apply();\n *      expect(resolvedValue).toEqual(123);\n *    });\n *  </pre>\n */\nfunction $QProvider() {\n\n  this.$get = ['$rootScope', '$exceptionHandler', function($rootScope, $exceptionHandler) {\n    return qFactory(function(callback) {\n      $rootScope.$evalAsync(callback);\n    }, $exceptionHandler);\n  }];\n}\n\n\n/**\n * Constructs a promise manager.\n *\n * @param {function(function)} nextTick Function for executing functions in the next turn.\n * @param {function(...*)} exceptionHandler Function into which unexpected exceptions are passed for\n *     debugging purposes.\n * @returns {object} Promise manager.\n */\nfunction qFactory(nextTick, exceptionHandler) {\n\n  /**\n   * @ngdoc\n   * @name ng.$q#defer\n   * @methodOf ng.$q\n   * @description\n   * Creates a `Deferred` object which represents a task which will finish in the future.\n   *\n   * @returns {Deferred} Returns a new instance of deferred.\n   */\n  var defer = function() {\n    var pending = [],\n        value, deferred;\n\n    deferred = {\n\n      resolve: function(val) {\n        if (pending) {\n          var callbacks = pending;\n          pending = undefined;\n          value = ref(val);\n\n          if (callbacks.length) {\n            nextTick(function() {\n              var callback;\n              for (var i = 0, ii = callbacks.length; i < ii; i++) {\n                callback = callbacks[i];\n                value.then(callback[0], callback[1], callback[2]);\n              }\n            });\n          }\n        }\n      },\n\n\n      reject: function(reason) {\n        deferred.resolve(reject(reason));\n      },\n\n\n      notify: function(progress) {\n        if (pending) {\n          var callbacks = pending;\n\n          if (pending.length) {\n            nextTick(function() {\n              var callback;\n              for (var i = 0, ii = callbacks.length; i < ii; i++) {\n                callback = callbacks[i];\n                callback[2](progress);\n              }\n            });\n          }\n        }\n      },\n\n\n      promise: {\n        then: function(callback, errback, progressback) {\n          var result = defer();\n\n          var wrappedCallback = function(value) {\n            try {\n              result.resolve((isFunction(callback) ? callback : defaultCallback)(value));\n            } catch(e) {\n              result.reject(e);\n              exceptionHandler(e);\n            }\n          };\n\n          var wrappedErrback = function(reason) {\n            try {\n              result.resolve((isFunction(errback) ? errback : defaultErrback)(reason));\n            } catch(e) {\n              result.reject(e);\n              exceptionHandler(e);\n            }\n          };\n\n          var wrappedProgressback = function(progress) {\n            try {\n              result.notify((isFunction(progressback) ? progressback : defaultCallback)(progress));\n            } catch(e) {\n              exceptionHandler(e);\n            }\n          };\n\n          if (pending) {\n            pending.push([wrappedCallback, wrappedErrback, wrappedProgressback]);\n          } else {\n            value.then(wrappedCallback, wrappedErrback, wrappedProgressback);\n          }\n\n          return result.promise;\n        },\n\n        \"catch\": function(callback) {\n          return this.then(null, callback);\n        },\n\n        \"finally\": function(callback) {\n\n          function makePromise(value, resolved) {\n            var result = defer();\n            if (resolved) {\n              result.resolve(value);\n            } else {\n              result.reject(value);\n            }\n            return result.promise;\n          }\n\n          function handleCallback(value, isResolved) {\n            var callbackOutput = null;\n            try {\n              callbackOutput = (callback ||defaultCallback)();\n            } catch(e) {\n              return makePromise(e, false);\n            }\n            if (callbackOutput && isFunction(callbackOutput.then)) {\n              return callbackOutput.then(function() {\n                return makePromise(value, isResolved);\n              }, function(error) {\n                return makePromise(error, false);\n              });\n            } else {\n              return makePromise(value, isResolved);\n            }\n          }\n\n          return this.then(function(value) {\n            return handleCallback(value, true);\n          }, function(error) {\n            return handleCallback(error, false);\n          });\n        }\n      }\n    };\n\n    return deferred;\n  };\n\n\n  var ref = function(value) {\n    if (value && isFunction(value.then)) return value;\n    return {\n      then: function(callback) {\n        var result = defer();\n        nextTick(function() {\n          result.resolve(callback(value));\n        });\n        return result.promise;\n      }\n    };\n  };\n\n\n  /**\n   * @ngdoc\n   * @name ng.$q#reject\n   * @methodOf ng.$q\n   * @description\n   * Creates a promise that is resolved as rejected with the specified `reason`. This api should be\n   * used to forward rejection in a chain of promises. If you are dealing with the last promise in\n   * a promise chain, you don't need to worry about it.\n   *\n   * When comparing deferreds/promises to the familiar behavior of try/catch/throw, think of\n   * `reject` as the `throw` keyword in JavaScript. This also means that if you \"catch\" an error via\n   * a promise error callback and you want to forward the error to the promise derived from the\n   * current promise, you have to \"rethrow\" the error by returning a rejection constructed via\n   * `reject`.\n   *\n   * <pre>\n   *   promiseB = promiseA.then(function(result) {\n   *     // success: do something and resolve promiseB\n   *     //          with the old or a new result\n   *     return result;\n   *   }, function(reason) {\n   *     // error: handle the error if possible and\n   *     //        resolve promiseB with newPromiseOrValue,\n   *     //        otherwise forward the rejection to promiseB\n   *     if (canHandle(reason)) {\n   *      // handle the error and recover\n   *      return newPromiseOrValue;\n   *     }\n   *     return $q.reject(reason);\n   *   });\n   * </pre>\n   *\n   * @param {*} reason Constant, message, exception or an object representing the rejection reason.\n   * @returns {Promise} Returns a promise that was already resolved as rejected with the `reason`.\n   */\n  var reject = function(reason) {\n    return {\n      then: function(callback, errback) {\n        var result = defer();\n        nextTick(function() {\n          try {\n            result.resolve((isFunction(errback) ? errback : defaultErrback)(reason));\n          } catch(e) {\n            result.reject(e);\n            exceptionHandler(e);\n          }\n        });\n        return result.promise;\n      }\n    };\n  };\n\n\n  /**\n   * @ngdoc\n   * @name ng.$q#when\n   * @methodOf ng.$q\n   * @description\n   * Wraps an object that might be a value or a (3rd party) then-able promise into a $q promise.\n   * This is useful when you are dealing with an object that might or might not be a promise, or if\n   * the promise comes from a source that can't be trusted.\n   *\n   * @param {*} value Value or a promise\n   * @returns {Promise} Returns a promise of the passed value or promise\n   */\n  var when = function(value, callback, errback, progressback) {\n    var result = defer(),\n        done;\n\n    var wrappedCallback = function(value) {\n      try {\n        return (isFunction(callback) ? callback : defaultCallback)(value);\n      } catch (e) {\n        exceptionHandler(e);\n        return reject(e);\n      }\n    };\n\n    var wrappedErrback = function(reason) {\n      try {\n        return (isFunction(errback) ? errback : defaultErrback)(reason);\n      } catch (e) {\n        exceptionHandler(e);\n        return reject(e);\n      }\n    };\n\n    var wrappedProgressback = function(progress) {\n      try {\n        return (isFunction(progressback) ? progressback : defaultCallback)(progress);\n      } catch (e) {\n        exceptionHandler(e);\n      }\n    };\n\n    nextTick(function() {\n      ref(value).then(function(value) {\n        if (done) return;\n        done = true;\n        result.resolve(ref(value).then(wrappedCallback, wrappedErrback, wrappedProgressback));\n      }, function(reason) {\n        if (done) return;\n        done = true;\n        result.resolve(wrappedErrback(reason));\n      }, function(progress) {\n        if (done) return;\n        result.notify(wrappedProgressback(progress));\n      });\n    });\n\n    return result.promise;\n  };\n\n\n  function defaultCallback(value) {\n    return value;\n  }\n\n\n  function defaultErrback(reason) {\n    return reject(reason);\n  }\n\n\n  /**\n   * @ngdoc\n   * @name ng.$q#all\n   * @methodOf ng.$q\n   * @description\n   * Combines multiple promises into a single promise that is resolved when all of the input\n   * promises are resolved.\n   *\n   * @param {Array.<Promise>|Object.<Promise>} promises An array or hash of promises.\n   * @returns {Promise} Returns a single promise that will be resolved with an array/hash of values,\n   *   each value corresponding to the promise at the same index/key in the `promises` array/hash.\n   *   If any of the promises is resolved with a rejection, this resulting promise will be rejected\n   *   with the same rejection value.\n   */\n  function all(promises) {\n    var deferred = defer(),\n        counter = 0,\n        results = isArray(promises) ? [] : {};\n\n    forEach(promises, function(promise, key) {\n      counter++;\n      ref(promise).then(function(value) {\n        if (results.hasOwnProperty(key)) return;\n        results[key] = value;\n        if (!(--counter)) deferred.resolve(results);\n      }, function(reason) {\n        if (results.hasOwnProperty(key)) return;\n        deferred.reject(reason);\n      });\n    });\n\n    if (counter === 0) {\n      deferred.resolve(results);\n    }\n\n    return deferred.promise;\n  }\n\n  return {\n    defer: defer,\n    reject: reject,\n    when: when,\n    all: all\n  };\n}\n\n/**\n * DESIGN NOTES\n *\n * The design decisions behind the scope are heavily favored for speed and memory consumption.\n *\n * The typical use of scope is to watch the expressions, which most of the time return the same\n * value as last time so we optimize the operation.\n *\n * Closures construction is expensive in terms of speed as well as memory:\n *   - No closures, instead use prototypical inheritance for API\n *   - Internal state needs to be stored on scope directly, which means that private state is\n *     exposed as $$____ properties\n *\n * Loop operations are optimized by using while(count--) { ... }\n *   - this means that in order to keep the same order of execution as addition we have to add\n *     items to the array at the beginning (shift) instead of at the end (push)\n *\n * Child scopes are created and removed often\n *   - Using an array would be slow since inserts in middle are expensive so we use linked list\n *\n * There are few watches then a lot of observers. This is why you don't want the observer to be\n * implemented in the same way as watch. Watch requires return of initialization function which\n * are expensive to construct.\n */\n\n\n/**\n * @ngdoc object\n * @name ng.$rootScopeProvider\n * @description\n *\n * Provider for the $rootScope service.\n */\n\n/**\n * @ngdoc function\n * @name ng.$rootScopeProvider#digestTtl\n * @methodOf ng.$rootScopeProvider\n * @description\n *\n * Sets the number of `$digest` iterations the scope should attempt to execute before giving up and\n * assuming that the model is unstable.\n *\n * The current default is 10 iterations.\n *\n * In complex applications it's possible that the dependencies between `$watch`s will result in\n * several digest iterations. However if an application needs more than the default 10 digest\n * iterations for its model to stabilize then you should investigate what is causing the model to\n * continuously change during the digest.\n *\n * Increasing the TTL could have performance implications, so you should not change it without\n * proper justification.\n *\n * @param {number} limit The number of digest iterations.\n */\n\n\n/**\n * @ngdoc object\n * @name ng.$rootScope\n * @description\n *\n * Every application has a single root {@link ng.$rootScope.Scope scope}.\n * All other scopes are descendant scopes of the root scope. Scopes provide separation\n * between the model and the view, via a mechanism for watching the model for changes.\n * They also provide an event emission/broadcast and subscription facility. See the\n * {@link guide/scope developer guide on scopes}.\n */\nfunction $RootScopeProvider(){\n  var TTL = 10;\n  var $rootScopeMinErr = minErr('$rootScope');\n\n  this.digestTtl = function(value) {\n    if (arguments.length) {\n      TTL = value;\n    }\n    return TTL;\n  };\n\n  this.$get = ['$injector', '$exceptionHandler', '$parse', '$browser',\n      function( $injector,   $exceptionHandler,   $parse,   $browser) {\n\n    /**\n     * @ngdoc function\n     * @name ng.$rootScope.Scope\n     *\n     * @description\n     * A root scope can be retrieved using the {@link ng.$rootScope $rootScope} key from the\n     * {@link AUTO.$injector $injector}. Child scopes are created using the\n     * {@link ng.$rootScope.Scope#methods_$new $new()} method. (Most scopes are created automatically when\n     * compiled HTML template is executed.)\n     *\n     * Here is a simple scope snippet to show how you can interact with the scope.\n     * <pre>\n     * <file src=\"./test/ng/rootScopeSpec.js\" tag=\"docs1\" />\n     * </pre>\n     *\n     * # Inheritance\n     * A scope can inherit from a parent scope, as in this example:\n     * <pre>\n         var parent = $rootScope;\n         var child = parent.$new();\n\n         parent.salutation = \"Hello\";\n         child.name = \"World\";\n         expect(child.salutation).toEqual('Hello');\n\n         child.salutation = \"Welcome\";\n         expect(child.salutation).toEqual('Welcome');\n         expect(parent.salutation).toEqual('Hello');\n     * </pre>\n     *\n     *\n     * @param {Object.<string, function()>=} providers Map of service factory which need to be\n     *                                       provided for the current scope. Defaults to {@link ng}.\n     * @param {Object.<string, *>=} instanceCache Provides pre-instantiated services which should\n     *                              append/override services provided by `providers`. This is handy\n     *                              when unit-testing and having the need to override a default\n     *                              service.\n     * @returns {Object} Newly created scope.\n     *\n     */\n    function Scope() {\n      this.$id = nextUid();\n      this.$$phase = this.$parent = this.$$watchers =\n                     this.$$nextSibling = this.$$prevSibling =\n                     this.$$childHead = this.$$childTail = null;\n      this['this'] = this.$root =  this;\n      this.$$destroyed = false;\n      this.$$asyncQueue = [];\n      this.$$postDigestQueue = [];\n      this.$$listeners = {};\n      this.$$isolateBindings = {};\n    }\n\n    /**\n     * @ngdoc property\n     * @name ng.$rootScope.Scope#$id\n     * @propertyOf ng.$rootScope.Scope\n     * @returns {number} Unique scope ID (monotonically increasing alphanumeric sequence) useful for\n     *   debugging.\n     */\n\n\n    Scope.prototype = {\n      constructor: Scope,\n      /**\n       * @ngdoc function\n       * @name ng.$rootScope.Scope#$new\n       * @methodOf ng.$rootScope.Scope\n       * @function\n       *\n       * @description\n       * Creates a new child {@link ng.$rootScope.Scope scope}.\n       *\n       * The parent scope will propagate the {@link ng.$rootScope.Scope#$digest $digest()} and\n       * {@link ng.$rootScope.Scope#$digest $digest()} events. The scope can be removed from the\n       * scope hierarchy using {@link ng.$rootScope.Scope#$destroy $destroy()}.\n       *\n       * {@link ng.$rootScope.Scope#$destroy $destroy()} must be called on a scope when it is\n       * desired for the scope and its child scopes to be permanently detached from the parent and\n       * thus stop participating in model change detection and listener notification by invoking.\n       *\n       * @param {boolean} isolate If true, then the scope does not prototypically inherit from the\n       *         parent scope. The scope is isolated, as it can not see parent scope properties.\n       *         When creating widgets, it is useful for the widget to not accidentally read parent\n       *         state.\n       *\n       * @returns {Object} The newly created child scope.\n       *\n       */\n      $new: function(isolate) {\n        var Child,\n            child;\n\n        if (isolate) {\n          child = new Scope();\n          child.$root = this.$root;\n          // ensure that there is just one async queue per $rootScope and its children\n          child.$$asyncQueue = this.$$asyncQueue;\n          child.$$postDigestQueue = this.$$postDigestQueue;\n        } else {\n          Child = function() {}; // should be anonymous; This is so that when the minifier munges\n            // the name it does not become random set of chars. This will then show up as class\n            // name in the debugger.\n          Child.prototype = this;\n          child = new Child();\n          child.$id = nextUid();\n        }\n        child['this'] = child;\n        child.$$listeners = {};\n        child.$parent = this;\n        child.$$watchers = child.$$nextSibling = child.$$childHead = child.$$childTail = null;\n        child.$$prevSibling = this.$$childTail;\n        if (this.$$childHead) {\n          this.$$childTail.$$nextSibling = child;\n          this.$$childTail = child;\n        } else {\n          this.$$childHead = this.$$childTail = child;\n        }\n        return child;\n      },\n\n      /**\n       * @ngdoc function\n       * @name ng.$rootScope.Scope#$watch\n       * @methodOf ng.$rootScope.Scope\n       * @function\n       *\n       * @description\n       * Registers a `listener` callback to be executed whenever the `watchExpression` changes.\n       *\n       * - The `watchExpression` is called on every call to {@link ng.$rootScope.Scope#$digest\n       *   $digest()} and should return the value that will be watched. (Since\n       *   {@link ng.$rootScope.Scope#$digest $digest()} reruns when it detects changes the\n       *   `watchExpression` can execute multiple times per\n       *   {@link ng.$rootScope.Scope#$digest $digest()} and should be idempotent.)\n       * - The `listener` is called only when the value from the current `watchExpression` and the\n       *   previous call to `watchExpression` are not equal (with the exception of the initial run,\n       *   see below). The inequality is determined according to\n       *   {@link angular.equals} function. To save the value of the object for later comparison,\n       *   the {@link angular.copy} function is used. It also means that watching complex options\n       *   will have adverse memory and performance implications.\n       * - The watch `listener` may change the model, which may trigger other `listener`s to fire.\n       *   This is achieved by rerunning the watchers until no changes are detected. The rerun\n       *   iteration limit is 10 to prevent an infinite loop deadlock.\n       *\n       *\n       * If you want to be notified whenever {@link ng.$rootScope.Scope#$digest $digest} is called,\n       * you can register a `watchExpression` function with no `listener`. (Since `watchExpression`\n       * can execute multiple times per {@link ng.$rootScope.Scope#$digest $digest} cycle when a\n       * change is detected, be prepared for multiple calls to your listener.)\n       *\n       * After a watcher is registered with the scope, the `listener` fn is called asynchronously\n       * (via {@link ng.$rootScope.Scope#$evalAsync $evalAsync}) to initialize the\n       * watcher. In rare cases, this is undesirable because the listener is called when the result\n       * of `watchExpression` didn't change. To detect this scenario within the `listener` fn, you\n       * can compare the `newVal` and `oldVal`. If these two values are identical (`===`) then the\n       * listener was called due to initialization.\n       *\n       * The example below contains an illustration of using a function as your $watch listener\n       *\n       *\n       * # Example\n       * <pre>\n           // let's assume that scope was dependency injected as the $rootScope\n           var scope = $rootScope;\n           scope.name = 'misko';\n           scope.counter = 0;\n\n           expect(scope.counter).toEqual(0);\n           scope.$watch('name', function(newValue, oldValue) {\n             scope.counter = scope.counter + 1;\n           });\n           expect(scope.counter).toEqual(0);\n\n           scope.$digest();\n           // no variable change\n           expect(scope.counter).toEqual(0);\n\n           scope.name = 'adam';\n           scope.$digest();\n           expect(scope.counter).toEqual(1);\n\n\n\n           // Using a listener function \n           var food;\n           scope.foodCounter = 0;\n           expect(scope.foodCounter).toEqual(0);\n           scope.$watch(\n             // This is the listener function\n             function() { return food; },\n             // This is the change handler\n             function(newValue, oldValue) {\n               if ( newValue !== oldValue ) {\n                 // Only increment the counter if the value changed\n                 scope.foodCounter = scope.foodCounter + 1;\n               }\n             }\n           );\n           // No digest has been run so the counter will be zero\n           expect(scope.foodCounter).toEqual(0);\n\n           // Run the digest but since food has not changed cout will still be zero\n           scope.$digest();\n           expect(scope.foodCounter).toEqual(0);\n\n           // Update food and run digest.  Now the counter will increment\n           food = 'cheeseburger';\n           scope.$digest();\n           expect(scope.foodCounter).toEqual(1);  \n\n       * </pre>\n       *\n       *\n       *\n       * @param {(function()|string)} watchExpression Expression that is evaluated on each\n       *    {@link ng.$rootScope.Scope#$digest $digest} cycle. A change in the return value triggers\n       *    a call to the `listener`.\n       *\n       *    - `string`: Evaluated as {@link guide/expression expression}\n       *    - `function(scope)`: called with current `scope` as a parameter.\n       * @param {(function()|string)=} listener Callback called whenever the return value of\n       *   the `watchExpression` changes.\n       *\n       *    - `string`: Evaluated as {@link guide/expression expression}\n       *    - `function(newValue, oldValue, scope)`: called with current and previous values as\n       *      parameters.\n       *\n       * @param {boolean=} objectEquality Compare object for equality rather than for reference.\n       * @returns {function()} Returns a deregistration function for this listener.\n       */\n      $watch: function(watchExp, listener, objectEquality) {\n        var scope = this,\n            get = compileToFn(watchExp, 'watch'),\n            array = scope.$$watchers,\n            watcher = {\n              fn: listener,\n              last: initWatchVal,\n              get: get,\n              exp: watchExp,\n              eq: !!objectEquality\n            };\n\n        // in the case user pass string, we need to compile it, do we really need this ?\n        if (!isFunction(listener)) {\n          var listenFn = compileToFn(listener || noop, 'listener');\n          watcher.fn = function(newVal, oldVal, scope) {listenFn(scope);};\n        }\n\n        if (typeof watchExp == 'string' && get.constant) {\n          var originalFn = watcher.fn;\n          watcher.fn = function(newVal, oldVal, scope) {\n            originalFn.call(this, newVal, oldVal, scope);\n            arrayRemove(array, watcher);\n          };\n        }\n\n        if (!array) {\n          array = scope.$$watchers = [];\n        }\n        // we use unshift since we use a while loop in $digest for speed.\n        // the while loop reads in reverse order.\n        array.unshift(watcher);\n\n        return function() {\n          arrayRemove(array, watcher);\n        };\n      },\n\n\n      /**\n       * @ngdoc function\n       * @name ng.$rootScope.Scope#$watchCollection\n       * @methodOf ng.$rootScope.Scope\n       * @function\n       *\n       * @description\n       * Shallow watches the properties of an object and fires whenever any of the properties change\n       * (for arrays, this implies watching the array items; for object maps, this implies watching\n       * the properties). If a change is detected, the `listener` callback is fired.\n       *\n       * - The `obj` collection is observed via standard $watch operation and is examined on every\n       *   call to $digest() to see if any items have been added, removed, or moved.\n       * - The `listener` is called whenever anything within the `obj` has changed. Examples include\n       *   adding, removing, and moving items belonging to an object or array.\n       *\n       *\n       * # Example\n       * <pre>\n          $scope.names = ['igor', 'matias', 'misko', 'james'];\n          $scope.dataCount = 4;\n\n          $scope.$watchCollection('names', function(newNames, oldNames) {\n            $scope.dataCount = newNames.length;\n          });\n\n          expect($scope.dataCount).toEqual(4);\n          $scope.$digest();\n\n          //still at 4 ... no changes\n          expect($scope.dataCount).toEqual(4);\n\n          $scope.names.pop();\n          $scope.$digest();\n\n          //now there's been a change\n          expect($scope.dataCount).toEqual(3);\n       * </pre>\n       *\n       *\n       * @param {string|Function(scope)} obj Evaluated as {@link guide/expression expression}. The\n       *    expression value should evaluate to an object or an array which is observed on each\n       *    {@link ng.$rootScope.Scope#$digest $digest} cycle. Any shallow change within the\n       *    collection will trigger a call to the `listener`.\n       *\n       * @param {function(newCollection, oldCollection, scope)} listener a callback function that is\n       *    fired with both the `newCollection` and `oldCollection` as parameters.\n       *    The `newCollection` object is the newly modified data obtained from the `obj` expression\n       *    and the `oldCollection` object is a copy of the former collection data.\n       *    The `scope` refers to the current scope.\n       *\n       * @returns {function()} Returns a de-registration function for this listener. When the\n       *    de-registration function is executed, the internal watch operation is terminated.\n       */\n      $watchCollection: function(obj, listener) {\n        var self = this;\n        var oldValue;\n        var newValue;\n        var changeDetected = 0;\n        var objGetter = $parse(obj);\n        var internalArray = [];\n        var internalObject = {};\n        var oldLength = 0;\n\n        function $watchCollectionWatch() {\n          newValue = objGetter(self);\n          var newLength, key;\n\n          if (!isObject(newValue)) {\n            if (oldValue !== newValue) {\n              oldValue = newValue;\n              changeDetected++;\n            }\n          } else if (isArrayLike(newValue)) {\n            if (oldValue !== internalArray) {\n              // we are transitioning from something which was not an array into array.\n              oldValue = internalArray;\n              oldLength = oldValue.length = 0;\n              changeDetected++;\n            }\n\n            newLength = newValue.length;\n\n            if (oldLength !== newLength) {\n              // if lengths do not match we need to trigger change notification\n              changeDetected++;\n              oldValue.length = oldLength = newLength;\n            }\n            // copy the items to oldValue and look for changes.\n            for (var i = 0; i < newLength; i++) {\n              if (oldValue[i] !== newValue[i]) {\n                changeDetected++;\n                oldValue[i] = newValue[i];\n              }\n            }\n          } else {\n            if (oldValue !== internalObject) {\n              // we are transitioning from something which was not an object into object.\n              oldValue = internalObject = {};\n              oldLength = 0;\n              changeDetected++;\n            }\n            // copy the items to oldValue and look for changes.\n            newLength = 0;\n            for (key in newValue) {\n              if (newValue.hasOwnProperty(key)) {\n                newLength++;\n                if (oldValue.hasOwnProperty(key)) {\n                  if (oldValue[key] !== newValue[key]) {\n                    changeDetected++;\n                    oldValue[key] = newValue[key];\n                  }\n                } else {\n                  oldLength++;\n                  oldValue[key] = newValue[key];\n                  changeDetected++;\n                }\n              }\n            }\n            if (oldLength > newLength) {\n              // we used to have more keys, need to find them and destroy them.\n              changeDetected++;\n              for(key in oldValue) {\n                if (oldValue.hasOwnProperty(key) && !newValue.hasOwnProperty(key)) {\n                  oldLength--;\n                  delete oldValue[key];\n                }\n              }\n            }\n          }\n          return changeDetected;\n        }\n\n        function $watchCollectionAction() {\n          listener(newValue, oldValue, self);\n        }\n\n        return this.$watch($watchCollectionWatch, $watchCollectionAction);\n      },\n\n      /**\n       * @ngdoc function\n       * @name ng.$rootScope.Scope#$digest\n       * @methodOf ng.$rootScope.Scope\n       * @function\n       *\n       * @description\n       * Processes all of the {@link ng.$rootScope.Scope#$watch watchers} of the current scope and\n       * its children. Because a {@link ng.$rootScope.Scope#$watch watcher}'s listener can change\n       * the model, the `$digest()` keeps calling the {@link ng.$rootScope.Scope#$watch watchers}\n       * until no more listeners are firing. This means that it is possible to get into an infinite\n       * loop. This function will throw `'Maximum iteration limit exceeded.'` if the number of\n       * iterations exceeds 10.\n       *\n       * Usually, you don't call `$digest()` directly in\n       * {@link ng.directive:ngController controllers} or in\n       * {@link ng.$compileProvider#methods_directive directives}.\n       * Instead, you should call {@link ng.$rootScope.Scope#$apply $apply()} (typically from within\n       * a {@link ng.$compileProvider#methods_directive directives}), which will force a `$digest()`.\n       *\n       * If you want to be notified whenever `$digest()` is called,\n       * you can register a `watchExpression` function with\n       * {@link ng.$rootScope.Scope#$watch $watch()} with no `listener`.\n       *\n       * In unit tests, you may need to call `$digest()` to simulate the scope life cycle.\n       *\n       * # Example\n       * <pre>\n           var scope = ...;\n           scope.name = 'misko';\n           scope.counter = 0;\n\n           expect(scope.counter).toEqual(0);\n           scope.$watch('name', function(newValue, oldValue) {\n             scope.counter = scope.counter + 1;\n           });\n           expect(scope.counter).toEqual(0);\n\n           scope.$digest();\n           // no variable change\n           expect(scope.counter).toEqual(0);\n\n           scope.name = 'adam';\n           scope.$digest();\n           expect(scope.counter).toEqual(1);\n       * </pre>\n       *\n       */\n      $digest: function() {\n        var watch, value, last,\n            watchers,\n            asyncQueue = this.$$asyncQueue,\n            postDigestQueue = this.$$postDigestQueue,\n            length,\n            dirty, ttl = TTL,\n            next, current, target = this,\n            watchLog = [],\n            logIdx, logMsg, asyncTask;\n\n        beginPhase('$digest');\n\n        do { // \"while dirty\" loop\n          dirty = false;\n          current = target;\n\n          while(asyncQueue.length) {\n            try {\n              asyncTask = asyncQueue.shift();\n              asyncTask.scope.$eval(asyncTask.expression);\n            } catch (e) {\n              $exceptionHandler(e);\n            }\n          }\n\n          do { // \"traverse the scopes\" loop\n            if ((watchers = current.$$watchers)) {\n              // process our watches\n              length = watchers.length;\n              while (length--) {\n                try {\n                  watch = watchers[length];\n                  // Most common watches are on primitives, in which case we can short\n                  // circuit it with === operator, only when === fails do we use .equals\n                  if (watch && (value = watch.get(current)) !== (last = watch.last) &&\n                      !(watch.eq\n                          ? equals(value, last)\n                          : (typeof value == 'number' && typeof last == 'number'\n                             && isNaN(value) && isNaN(last)))) {\n                    dirty = true;\n                    watch.last = watch.eq ? copy(value) : value;\n                    watch.fn(value, ((last === initWatchVal) ? value : last), current);\n                    if (ttl < 5) {\n                      logIdx = 4 - ttl;\n                      if (!watchLog[logIdx]) watchLog[logIdx] = [];\n                      logMsg = (isFunction(watch.exp))\n                          ? 'fn: ' + (watch.exp.name || watch.exp.toString())\n                          : watch.exp;\n                      logMsg += '; newVal: ' + toJson(value) + '; oldVal: ' + toJson(last);\n                      watchLog[logIdx].push(logMsg);\n                    }\n                  }\n                } catch (e) {\n                  $exceptionHandler(e);\n                }\n              }\n            }\n\n            // Insanity Warning: scope depth-first traversal\n            // yes, this code is a bit crazy, but it works and we have tests to prove it!\n            // this piece should be kept in sync with the traversal in $broadcast\n            if (!(next = (current.$$childHead || (current !== target && current.$$nextSibling)))) {\n              while(current !== target && !(next = current.$$nextSibling)) {\n                current = current.$parent;\n              }\n            }\n          } while ((current = next));\n\n          if(dirty && !(ttl--)) {\n            clearPhase();\n            throw $rootScopeMinErr('infdig',\n                '{0} $digest() iterations reached. Aborting!\\n' +\n                'Watchers fired in the last 5 iterations: {1}',\n                TTL, toJson(watchLog));\n          }\n        } while (dirty || asyncQueue.length);\n\n        clearPhase();\n\n        while(postDigestQueue.length) {\n          try {\n            postDigestQueue.shift()();\n          } catch (e) {\n            $exceptionHandler(e);\n          }\n        }\n      },\n\n\n      /**\n       * @ngdoc event\n       * @name ng.$rootScope.Scope#$destroy\n       * @eventOf ng.$rootScope.Scope\n       * @eventType broadcast on scope being destroyed\n       *\n       * @description\n       * Broadcasted when a scope and its children are being destroyed.\n       *\n       * Note that, in AngularJS, there is also a `$destroy` jQuery event, which can be used to\n       * clean up DOM bindings before an element is removed from the DOM.\n       */\n\n      /**\n       * @ngdoc function\n       * @name ng.$rootScope.Scope#$destroy\n       * @methodOf ng.$rootScope.Scope\n       * @function\n       *\n       * @description\n       * Removes the current scope (and all of its children) from the parent scope. Removal implies\n       * that calls to {@link ng.$rootScope.Scope#$digest $digest()} will no longer\n       * propagate to the current scope and its children. Removal also implies that the current\n       * scope is eligible for garbage collection.\n       *\n       * The `$destroy()` is usually used by directives such as\n       * {@link ng.directive:ngRepeat ngRepeat} for managing the\n       * unrolling of the loop.\n       *\n       * Just before a scope is destroyed, a `$destroy` event is broadcasted on this scope.\n       * Application code can register a `$destroy` event handler that will give it a chance to\n       * perform any necessary cleanup.\n       *\n       * Note that, in AngularJS, there is also a `$destroy` jQuery event, which can be used to\n       * clean up DOM bindings before an element is removed from the DOM.\n       */\n      $destroy: function() {\n        // we can't destroy the root scope or a scope that has been already destroyed\n        if ($rootScope == this || this.$$destroyed) return;\n        var parent = this.$parent;\n\n        this.$broadcast('$destroy');\n        this.$$destroyed = true;\n\n        if (parent.$$childHead == this) parent.$$childHead = this.$$nextSibling;\n        if (parent.$$childTail == this) parent.$$childTail = this.$$prevSibling;\n        if (this.$$prevSibling) this.$$prevSibling.$$nextSibling = this.$$nextSibling;\n        if (this.$$nextSibling) this.$$nextSibling.$$prevSibling = this.$$prevSibling;\n\n        // This is bogus code that works around Chrome's GC leak\n        // see: https://github.com/angular/angular.js/issues/1313#issuecomment-10378451\n        this.$parent = this.$$nextSibling = this.$$prevSibling = this.$$childHead =\n            this.$$childTail = null;\n      },\n\n      /**\n       * @ngdoc function\n       * @name ng.$rootScope.Scope#$eval\n       * @methodOf ng.$rootScope.Scope\n       * @function\n       *\n       * @description\n       * Executes the `expression` on the current scope and returns the result. Any exceptions in\n       * the expression are propagated (uncaught). This is useful when evaluating Angular\n       * expressions.\n       *\n       * # Example\n       * <pre>\n           var scope = ng.$rootScope.Scope();\n           scope.a = 1;\n           scope.b = 2;\n\n           expect(scope.$eval('a+b')).toEqual(3);\n           expect(scope.$eval(function(scope){ return scope.a + scope.b; })).toEqual(3);\n       * </pre>\n       *\n       * @param {(string|function())=} expression An angular expression to be executed.\n       *\n       *    - `string`: execute using the rules as defined in  {@link guide/expression expression}.\n       *    - `function(scope)`: execute the function with the current `scope` parameter.\n       * \n       * @param {(object)=} locals Local variables object, useful for overriding values in scope.\n       * @returns {*} The result of evaluating the expression.\n       */\n      $eval: function(expr, locals) {\n        return $parse(expr)(this, locals);\n      },\n\n      /**\n       * @ngdoc function\n       * @name ng.$rootScope.Scope#$evalAsync\n       * @methodOf ng.$rootScope.Scope\n       * @function\n       *\n       * @description\n       * Executes the expression on the current scope at a later point in time.\n       *\n       * The `$evalAsync` makes no guarantees as to when the `expression` will be executed, only\n       * that:\n       *\n       *   - it will execute after the function that scheduled the evaluation (preferably before DOM\n       *     rendering).\n       *   - at least one {@link ng.$rootScope.Scope#$digest $digest cycle} will be performed after\n       *     `expression` execution.\n       *\n       * Any exceptions from the execution of the expression are forwarded to the\n       * {@link ng.$exceptionHandler $exceptionHandler} service.\n       *\n       * __Note:__ if this function is called outside of a `$digest` cycle, a new `$digest` cycle\n       * will be scheduled. However, it is encouraged to always call code that changes the model\n       * from within an `$apply` call. That includes code evaluated via `$evalAsync`.\n       *\n       * @param {(string|function())=} expression An angular expression to be executed.\n       *\n       *    - `string`: execute using the rules as defined in {@link guide/expression expression}.\n       *    - `function(scope)`: execute the function with the current `scope` parameter.\n       *\n       */\n      $evalAsync: function(expr) {\n        // if we are outside of an $digest loop and this is the first time we are scheduling async\n        // task also schedule async auto-flush\n        if (!$rootScope.$$phase && !$rootScope.$$asyncQueue.length) {\n          $browser.defer(function() {\n            if ($rootScope.$$asyncQueue.length) {\n              $rootScope.$digest();\n            }\n          });\n        }\n\n        this.$$asyncQueue.push({scope: this, expression: expr});\n      },\n\n      $$postDigest : function(fn) {\n        this.$$postDigestQueue.push(fn);\n      },\n\n      /**\n       * @ngdoc function\n       * @name ng.$rootScope.Scope#$apply\n       * @methodOf ng.$rootScope.Scope\n       * @function\n       *\n       * @description\n       * `$apply()` is used to execute an expression in angular from outside of the angular\n       * framework. (For example from browser DOM events, setTimeout, XHR or third party libraries).\n       * Because we are calling into the angular framework we need to perform proper scope life\n       * cycle of {@link ng.$exceptionHandler exception handling},\n       * {@link ng.$rootScope.Scope#$digest executing watches}.\n       *\n       * ## Life cycle\n       *\n       * # Pseudo-Code of `$apply()`\n       * <pre>\n           function $apply(expr) {\n             try {\n               return $eval(expr);\n             } catch (e) {\n               $exceptionHandler(e);\n             } finally {\n               $root.$digest();\n             }\n           }\n       * </pre>\n       *\n       *\n       * Scope's `$apply()` method transitions through the following stages:\n       *\n       * 1. The {@link guide/expression expression} is executed using the\n       *    {@link ng.$rootScope.Scope#$eval $eval()} method.\n       * 2. Any exceptions from the execution of the expression are forwarded to the\n       *    {@link ng.$exceptionHandler $exceptionHandler} service.\n       * 3. The {@link ng.$rootScope.Scope#$watch watch} listeners are fired immediately after the\n       *    expression was executed using the {@link ng.$rootScope.Scope#$digest $digest()} method.\n       *\n       *\n       * @param {(string|function())=} exp An angular expression to be executed.\n       *\n       *    - `string`: execute using the rules as defined in {@link guide/expression expression}.\n       *    - `function(scope)`: execute the function with current `scope` parameter.\n       *\n       * @returns {*} The result of evaluating the expression.\n       */\n      $apply: function(expr) {\n        try {\n          beginPhase('$apply');\n          return this.$eval(expr);\n        } catch (e) {\n          $exceptionHandler(e);\n        } finally {\n          clearPhase();\n          try {\n            $rootScope.$digest();\n          } catch (e) {\n            $exceptionHandler(e);\n            throw e;\n          }\n        }\n      },\n\n      /**\n       * @ngdoc function\n       * @name ng.$rootScope.Scope#$on\n       * @methodOf ng.$rootScope.Scope\n       * @function\n       *\n       * @description\n       * Listens on events of a given type. See {@link ng.$rootScope.Scope#$emit $emit} for\n       * discussion of event life cycle.\n       *\n       * The event listener function format is: `function(event, args...)`. The `event` object\n       * passed into the listener has the following attributes:\n       *\n       *   - `targetScope` - `{Scope}`: the scope on which the event was `$emit`-ed or\n       *     `$broadcast`-ed.\n       *   - `currentScope` - `{Scope}`: the current scope which is handling the event.\n       *   - `name` - `{string}`: name of the event.\n       *   - `stopPropagation` - `{function=}`: calling `stopPropagation` function will cancel\n       *     further event propagation (available only for events that were `$emit`-ed).\n       *   - `preventDefault` - `{function}`: calling `preventDefault` sets `defaultPrevented` flag\n       *     to true.\n       *   - `defaultPrevented` - `{boolean}`: true if `preventDefault` was called.\n       *\n       * @param {string} name Event name to listen on.\n       * @param {function(event, args...)} listener Function to call when the event is emitted.\n       * @returns {function()} Returns a deregistration function for this listener.\n       */\n      $on: function(name, listener) {\n        var namedListeners = this.$$listeners[name];\n        if (!namedListeners) {\n          this.$$listeners[name] = namedListeners = [];\n        }\n        namedListeners.push(listener);\n\n        return function() {\n          namedListeners[indexOf(namedListeners, listener)] = null;\n        };\n      },\n\n\n      /**\n       * @ngdoc function\n       * @name ng.$rootScope.Scope#$emit\n       * @methodOf ng.$rootScope.Scope\n       * @function\n       *\n       * @description\n       * Dispatches an event `name` upwards through the scope hierarchy notifying the\n       * registered {@link ng.$rootScope.Scope#$on} listeners.\n       *\n       * The event life cycle starts at the scope on which `$emit` was called. All\n       * {@link ng.$rootScope.Scope#$on listeners} listening for `name` event on this scope get\n       * notified. Afterwards, the event traverses upwards toward the root scope and calls all\n       * registered listeners along the way. The event will stop propagating if one of the listeners\n       * cancels it.\n       *\n       * Any exception emitted from the {@link ng.$rootScope.Scope#$on listeners} will be passed\n       * onto the {@link ng.$exceptionHandler $exceptionHandler} service.\n       *\n       * @param {string} name Event name to emit.\n       * @param {...*} args Optional set of arguments which will be passed onto the event listeners.\n       * @return {Object} Event object (see {@link ng.$rootScope.Scope#$on}).\n       */\n      $emit: function(name, args) {\n        var empty = [],\n            namedListeners,\n            scope = this,\n            stopPropagation = false,\n            event = {\n              name: name,\n              targetScope: scope,\n              stopPropagation: function() {stopPropagation = true;},\n              preventDefault: function() {\n                event.defaultPrevented = true;\n              },\n              defaultPrevented: false\n            },\n            listenerArgs = concat([event], arguments, 1),\n            i, length;\n\n        do {\n          namedListeners = scope.$$listeners[name] || empty;\n          event.currentScope = scope;\n          for (i=0, length=namedListeners.length; i<length; i++) {\n\n            // if listeners were deregistered, defragment the array\n            if (!namedListeners[i]) {\n              namedListeners.splice(i, 1);\n              i--;\n              length--;\n              continue;\n            }\n            try {\n              //allow all listeners attached to the current scope to run\n              namedListeners[i].apply(null, listenerArgs);\n            } catch (e) {\n              $exceptionHandler(e);\n            }\n          }\n          //if any listener on the current scope stops propagation, prevent bubbling\n          if (stopPropagation) return event;\n          //traverse upwards\n          scope = scope.$parent;\n        } while (scope);\n\n        return event;\n      },\n\n\n      /**\n       * @ngdoc function\n       * @name ng.$rootScope.Scope#$broadcast\n       * @methodOf ng.$rootScope.Scope\n       * @function\n       *\n       * @description\n       * Dispatches an event `name` downwards to all child scopes (and their children) notifying the\n       * registered {@link ng.$rootScope.Scope#$on} listeners.\n       *\n       * The event life cycle starts at the scope on which `$broadcast` was called. All\n       * {@link ng.$rootScope.Scope#$on listeners} listening for `name` event on this scope get\n       * notified. Afterwards, the event propagates to all direct and indirect scopes of the current\n       * scope and calls all registered listeners along the way. The event cannot be canceled.\n       *\n       * Any exception emitted from the {@link ng.$rootScope.Scope#$on listeners} will be passed\n       * onto the {@link ng.$exceptionHandler $exceptionHandler} service.\n       *\n       * @param {string} name Event name to broadcast.\n       * @param {...*} args Optional set of arguments which will be passed onto the event listeners.\n       * @return {Object} Event object, see {@link ng.$rootScope.Scope#$on}\n       */\n      $broadcast: function(name, args) {\n        var target = this,\n            current = target,\n            next = target,\n            event = {\n              name: name,\n              targetScope: target,\n              preventDefault: function() {\n                event.defaultPrevented = true;\n              },\n              defaultPrevented: false\n            },\n            listenerArgs = concat([event], arguments, 1),\n            listeners, i, length;\n\n        //down while you can, then up and next sibling or up and next sibling until back at root\n        do {\n          current = next;\n          event.currentScope = current;\n          listeners = current.$$listeners[name] || [];\n          for (i=0, length = listeners.length; i<length; i++) {\n            // if listeners were deregistered, defragment the array\n            if (!listeners[i]) {\n              listeners.splice(i, 1);\n              i--;\n              length--;\n              continue;\n            }\n\n            try {\n              listeners[i].apply(null, listenerArgs);\n            } catch(e) {\n              $exceptionHandler(e);\n            }\n          }\n\n          // Insanity Warning: scope depth-first traversal\n          // yes, this code is a bit crazy, but it works and we have tests to prove it!\n          // this piece should be kept in sync with the traversal in $digest\n          if (!(next = (current.$$childHead || (current !== target && current.$$nextSibling)))) {\n            while(current !== target && !(next = current.$$nextSibling)) {\n              current = current.$parent;\n            }\n          }\n        } while ((current = next));\n\n        return event;\n      }\n    };\n\n    var $rootScope = new Scope();\n\n    return $rootScope;\n\n\n    function beginPhase(phase) {\n      if ($rootScope.$$phase) {\n        throw $rootScopeMinErr('inprog', '{0} already in progress', $rootScope.$$phase);\n      }\n\n      $rootScope.$$phase = phase;\n    }\n\n    function clearPhase() {\n      $rootScope.$$phase = null;\n    }\n\n    function compileToFn(exp, name) {\n      var fn = $parse(exp);\n      assertArgFn(fn, name);\n      return fn;\n    }\n\n    /**\n     * function used as an initial value for watchers.\n     * because it's unique we can easily tell it apart from other values\n     */\n    function initWatchVal() {}\n  }];\n}\n\nvar $sceMinErr = minErr('$sce');\n\nvar SCE_CONTEXTS = {\n  HTML: 'html',\n  CSS: 'css',\n  URL: 'url',\n  // RESOURCE_URL is a subtype of URL used in contexts where a privileged resource is sourced from a\n  // url.  (e.g. ng-include, script src, templateUrl)\n  RESOURCE_URL: 'resourceUrl',\n  JS: 'js'\n};\n\n// Helper functions follow.\n\n// Copied from:\n// http://docs.closure-library.googlecode.com/git/closure_goog_string_string.js.source.html#line962\n// Prereq: s is a string.\nfunction escapeForRegexp(s) {\n  return s.replace(/([-()\\[\\]{}+?*.$\\^|,:#<!\\\\])/g, '\\\\$1').\n           replace(/\\x08/g, '\\\\x08');\n}\n\n\nfunction adjustMatcher(matcher) {\n  if (matcher === 'self') {\n    return matcher;\n  } else if (isString(matcher)) {\n    // Strings match exactly except for 2 wildcards - '*' and '**'.\n    // '*' matches any character except those from the set ':/.?&'.\n    // '**' matches any character (like .* in a RegExp).\n    // More than 2 *'s raises an error as it's ill defined.\n    if (matcher.indexOf('***') > -1) {\n      throw $sceMinErr('iwcard',\n          'Illegal sequence *** in string matcher.  String: {0}', matcher);\n    }\n    matcher = escapeForRegexp(matcher).\n                  replace('\\\\*\\\\*', '.*').\n                  replace('\\\\*', '[^:/.?&;]*');\n    return new RegExp('^' + matcher + '$');\n  } else if (isRegExp(matcher)) {\n    // The only other type of matcher allowed is a Regexp.\n    // Match entire URL / disallow partial matches.\n    // Flags are reset (i.e. no global, ignoreCase or multiline)\n    return new RegExp('^' + matcher.source + '$');\n  } else {\n    throw $sceMinErr('imatcher',\n        'Matchers may only be \"self\", string patterns or RegExp objects');\n  }\n}\n\n\nfunction adjustMatchers(matchers) {\n  var adjustedMatchers = [];\n  if (isDefined(matchers)) {\n    forEach(matchers, function(matcher) {\n      adjustedMatchers.push(adjustMatcher(matcher));\n    });\n  }\n  return adjustedMatchers;\n}\n\n\n/**\n * @ngdoc service\n * @name ng.$sceDelegate\n * @function\n *\n * @description\n *\n * `$sceDelegate` is a service that is used by the `$sce` service to provide {@link ng.$sce Strict\n * Contextual Escaping (SCE)} services to AngularJS.\n *\n * Typically, you would configure or override the {@link ng.$sceDelegate $sceDelegate} instead of\n * the `$sce` service to customize the way Strict Contextual Escaping works in AngularJS.  This is\n * because, while the `$sce` provides numerous shorthand methods, etc., you really only need to\n * override 3 core functions (`trustAs`, `getTrusted` and `valueOf`) to replace the way things\n * work because `$sce` delegates to `$sceDelegate` for these operations.\n *\n * Refer {@link ng.$sceDelegateProvider $sceDelegateProvider} to configure this service.\n *\n * The default instance of `$sceDelegate` should work out of the box with little pain.  While you\n * can override it completely to change the behavior of `$sce`, the common case would\n * involve configuring the {@link ng.$sceDelegateProvider $sceDelegateProvider} instead by setting\n * your own whitelists and blacklists for trusting URLs used for loading AngularJS resources such as\n * templates.  Refer {@link ng.$sceDelegateProvider#methods_resourceUrlWhitelist\n * $sceDelegateProvider.resourceUrlWhitelist} and {@link\n * ng.$sceDelegateProvider#methods_resourceUrlBlacklist $sceDelegateProvider.resourceUrlBlacklist}\n */\n\n/**\n * @ngdoc object\n * @name ng.$sceDelegateProvider\n * @description\n *\n * The `$sceDelegateProvider` provider allows developers to configure the {@link ng.$sceDelegate\n * $sceDelegate} service.  This allows one to get/set the whitelists and blacklists used to ensure\n * that the URLs used for sourcing Angular templates are safe.  Refer {@link\n * ng.$sceDelegateProvider#methods_resourceUrlWhitelist $sceDelegateProvider.resourceUrlWhitelist} and\n * {@link ng.$sceDelegateProvider#methods_resourceUrlBlacklist $sceDelegateProvider.resourceUrlBlacklist}\n *\n * For the general details about this service in Angular, read the main page for {@link ng.$sce\n * Strict Contextual Escaping (SCE)}.\n *\n * **Example**:  Consider the following case. <a name=\"example\"></a>\n *\n * - your app is hosted at url `http://myapp.example.com/`\n * - but some of your templates are hosted on other domains you control such as\n *   `http://srv01.assets.example.com/`,  `http://srv02.assets.example.com/`, etc.\n * - and you have an open redirect at `http://myapp.example.com/clickThru?...`.\n *\n * Here is what a secure configuration for this scenario might look like:\n *\n * <pre class=\"prettyprint\">\n *    angular.module('myApp', []).config(function($sceDelegateProvider) {\n *      $sceDelegateProvider.resourceUrlWhitelist([\n *        // Allow same origin resource loads.\n *        'self',\n *        // Allow loading from our assets domain.  Notice the difference between * and **.\n *        'http://srv*.assets.example.com/**']);\n *\n *      // The blacklist overrides the whitelist so the open redirect here is blocked.\n *      $sceDelegateProvider.resourceUrlBlacklist([\n *        'http://myapp.example.com/clickThru**']);\n *      });\n * </pre>\n */\n\nfunction $SceDelegateProvider() {\n  this.SCE_CONTEXTS = SCE_CONTEXTS;\n\n  // Resource URLs can also be trusted by policy.\n  var resourceUrlWhitelist = ['self'],\n      resourceUrlBlacklist = [];\n\n  /**\n   * @ngdoc function\n   * @name ng.sceDelegateProvider#resourceUrlWhitelist\n   * @methodOf ng.$sceDelegateProvider\n   * @function\n   *\n   * @param {Array=} whitelist When provided, replaces the resourceUrlWhitelist with the value\n   *     provided.  This must be an array or null.  A snapshot of this array is used so further\n   *     changes to the array are ignored.\n   *\n   *     Follow {@link ng.$sce#resourceUrlPatternItem this link} for a description of the items\n   *     allowed in this array.\n   *\n   *     Note: **an empty whitelist array will block all URLs**!\n   *\n   * @return {Array} the currently set whitelist array.\n   *\n   * The **default value** when no whitelist has been explicitly set is `['self']` allowing only\n   * same origin resource requests.\n   *\n   * @description\n   * Sets/Gets the whitelist of trusted resource URLs.\n   */\n  this.resourceUrlWhitelist = function (value) {\n    if (arguments.length) {\n      resourceUrlWhitelist = adjustMatchers(value);\n    }\n    return resourceUrlWhitelist;\n  };\n\n  /**\n   * @ngdoc function\n   * @name ng.sceDelegateProvider#resourceUrlBlacklist\n   * @methodOf ng.$sceDelegateProvider\n   * @function\n   *\n   * @param {Array=} blacklist When provided, replaces the resourceUrlBlacklist with the value\n   *     provided.  This must be an array or null.  A snapshot of this array is used so further\n   *     changes to the array are ignored.\n   *\n   *     Follow {@link ng.$sce#resourceUrlPatternItem this link} for a description of the items\n   *     allowed in this array.\n   *\n   *     The typical usage for the blacklist is to **block\n   *     [open redirects](http://cwe.mitre.org/data/definitions/601.html)** served by your domain as\n   *     these would otherwise be trusted but actually return content from the redirected domain.\n   *\n   *     Finally, **the blacklist overrides the whitelist** and has the final say.\n   *\n   * @return {Array} the currently set blacklist array.\n   *\n   * The **default value** when no whitelist has been explicitly set is the empty array (i.e. there\n   * is no blacklist.)\n   *\n   * @description\n   * Sets/Gets the blacklist of trusted resource URLs.\n   */\n\n  this.resourceUrlBlacklist = function (value) {\n    if (arguments.length) {\n      resourceUrlBlacklist = adjustMatchers(value);\n    }\n    return resourceUrlBlacklist;\n  };\n\n  this.$get = ['$log', '$document', '$injector', function(\n                $log,   $document,   $injector) {\n\n    var htmlSanitizer = function htmlSanitizer(html) {\n      throw $sceMinErr('unsafe', 'Attempting to use an unsafe value in a safe context.');\n    };\n\n    if ($injector.has('$sanitize')) {\n      htmlSanitizer = $injector.get('$sanitize');\n    }\n\n\n    function matchUrl(matcher, parsedUrl) {\n      if (matcher === 'self') {\n        return urlIsSameOrigin(parsedUrl);\n      } else {\n        // definitely a regex.  See adjustMatchers()\n        return !!matcher.exec(parsedUrl.href);\n      }\n    }\n\n    function isResourceUrlAllowedByPolicy(url) {\n      var parsedUrl = urlResolve(url.toString());\n      var i, n, allowed = false;\n      // Ensure that at least one item from the whitelist allows this url.\n      for (i = 0, n = resourceUrlWhitelist.length; i < n; i++) {\n        if (matchUrl(resourceUrlWhitelist[i], parsedUrl)) {\n          allowed = true;\n          break;\n        }\n      }\n      if (allowed) {\n        // Ensure that no item from the blacklist blocked this url.\n        for (i = 0, n = resourceUrlBlacklist.length; i < n; i++) {\n          if (matchUrl(resourceUrlBlacklist[i], parsedUrl)) {\n            allowed = false;\n            break;\n          }\n        }\n      }\n      return allowed;\n    }\n\n    function generateHolderType(Base) {\n      var holderType = function TrustedValueHolderType(trustedValue) {\n        this.$$unwrapTrustedValue = function() {\n          return trustedValue;\n        };\n      };\n      if (Base) {\n        holderType.prototype = new Base();\n      }\n      holderType.prototype.valueOf = function sceValueOf() {\n        return this.$$unwrapTrustedValue();\n      };\n      holderType.prototype.toString = function sceToString() {\n        return this.$$unwrapTrustedValue().toString();\n      };\n      return holderType;\n    }\n\n    var trustedValueHolderBase = generateHolderType(),\n        byType = {};\n\n    byType[SCE_CONTEXTS.HTML] = generateHolderType(trustedValueHolderBase);\n    byType[SCE_CONTEXTS.CSS] = generateHolderType(trustedValueHolderBase);\n    byType[SCE_CONTEXTS.URL] = generateHolderType(trustedValueHolderBase);\n    byType[SCE_CONTEXTS.JS] = generateHolderType(trustedValueHolderBase);\n    byType[SCE_CONTEXTS.RESOURCE_URL] = generateHolderType(byType[SCE_CONTEXTS.URL]);\n\n    /**\n     * @ngdoc method\n     * @name ng.$sceDelegate#trustAs\n     * @methodOf ng.$sceDelegate\n     *\n     * @description\n     * Returns an object that is trusted by angular for use in specified strict\n     * contextual escaping contexts (such as ng-html-bind-unsafe, ng-include, any src\n     * attribute interpolation, any dom event binding attribute interpolation\n     * such as for onclick,  etc.) that uses the provided value.\n     * See {@link ng.$sce $sce} for enabling strict contextual escaping.\n     *\n     * @param {string} type The kind of context in which this value is safe for use.  e.g. url,\n     *   resourceUrl, html, js and css.\n     * @param {*} value The value that that should be considered trusted/safe.\n     * @returns {*} A value that can be used to stand in for the provided `value` in places\n     * where Angular expects a $sce.trustAs() return value.\n     */\n    function trustAs(type, trustedValue) {\n      var Constructor = (byType.hasOwnProperty(type) ? byType[type] : null);\n      if (!Constructor) {\n        throw $sceMinErr('icontext',\n            'Attempted to trust a value in invalid context. Context: {0}; Value: {1}',\n            type, trustedValue);\n      }\n      if (trustedValue === null || trustedValue === undefined || trustedValue === '') {\n        return trustedValue;\n      }\n      // All the current contexts in SCE_CONTEXTS happen to be strings.  In order to avoid trusting\n      // mutable objects, we ensure here that the value passed in is actually a string.\n      if (typeof trustedValue !== 'string') {\n        throw $sceMinErr('itype',\n            'Attempted to trust a non-string value in a content requiring a string: Context: {0}',\n            type);\n      }\n      return new Constructor(trustedValue);\n    }\n\n    /**\n     * @ngdoc method\n     * @name ng.$sceDelegate#valueOf\n     * @methodOf ng.$sceDelegate\n     *\n     * @description\n     * If the passed parameter had been returned by a prior call to {@link ng.$sceDelegate#methods_trustAs\n     * `$sceDelegate.trustAs`}, returns the value that had been passed to {@link\n     * ng.$sceDelegate#methods_trustAs `$sceDelegate.trustAs`}.\n     *\n     * If the passed parameter is not a value that had been returned by {@link\n     * ng.$sceDelegate#methods_trustAs `$sceDelegate.trustAs`}, returns it as-is.\n     *\n     * @param {*} value The result of a prior {@link ng.$sceDelegate#methods_trustAs `$sceDelegate.trustAs`}\n     *      call or anything else.\n     * @returns {*} The value the was originally provided to {@link ng.$sceDelegate#methods_trustAs\n     *     `$sceDelegate.trustAs`} if `value` is the result of such a call.  Otherwise, returns\n     *     `value` unchanged.\n     */\n    function valueOf(maybeTrusted) {\n      if (maybeTrusted instanceof trustedValueHolderBase) {\n        return maybeTrusted.$$unwrapTrustedValue();\n      } else {\n        return maybeTrusted;\n      }\n    }\n\n    /**\n     * @ngdoc method\n     * @name ng.$sceDelegate#getTrusted\n     * @methodOf ng.$sceDelegate\n     *\n     * @description\n     * Takes the result of a {@link ng.$sceDelegate#methods_trustAs `$sceDelegate.trustAs`} call and\n     * returns the originally supplied value if the queried context type is a supertype of the\n     * created type.  If this condition isn't satisfied, throws an exception.\n     *\n     * @param {string} type The kind of context in which this value is to be used.\n     * @param {*} maybeTrusted The result of a prior {@link ng.$sceDelegate#methods_trustAs\n     *     `$sceDelegate.trustAs`} call.\n     * @returns {*} The value the was originally provided to {@link ng.$sceDelegate#methods_trustAs\n     *     `$sceDelegate.trustAs`} if valid in this context.  Otherwise, throws an exception.\n     */\n    function getTrusted(type, maybeTrusted) {\n      if (maybeTrusted === null || maybeTrusted === undefined || maybeTrusted === '') {\n        return maybeTrusted;\n      }\n      var constructor = (byType.hasOwnProperty(type) ? byType[type] : null);\n      if (constructor && maybeTrusted instanceof constructor) {\n        return maybeTrusted.$$unwrapTrustedValue();\n      }\n      // If we get here, then we may only take one of two actions.\n      // 1. sanitize the value for the requested type, or\n      // 2. throw an exception.\n      if (type === SCE_CONTEXTS.RESOURCE_URL) {\n        if (isResourceUrlAllowedByPolicy(maybeTrusted)) {\n          return maybeTrusted;\n        } else {\n          throw $sceMinErr('insecurl',\n              'Blocked loading resource from url not allowed by $sceDelegate policy.  URL: {0}',\n              maybeTrusted.toString());\n        }\n      } else if (type === SCE_CONTEXTS.HTML) {\n        return htmlSanitizer(maybeTrusted);\n      }\n      throw $sceMinErr('unsafe', 'Attempting to use an unsafe value in a safe context.');\n    }\n\n    return { trustAs: trustAs,\n             getTrusted: getTrusted,\n             valueOf: valueOf };\n  }];\n}\n\n\n/**\n * @ngdoc object\n * @name ng.$sceProvider\n * @description\n *\n * The $sceProvider provider allows developers to configure the {@link ng.$sce $sce} service.\n * -   enable/disable Strict Contextual Escaping (SCE) in a module\n * -   override the default implementation with a custom delegate\n *\n * Read more about {@link ng.$sce Strict Contextual Escaping (SCE)}.\n */\n\n/* jshint maxlen: false*/\n\n/**\n * @ngdoc service\n * @name ng.$sce\n * @function\n *\n * @description\n *\n * `$sce` is a service that provides Strict Contextual Escaping services to AngularJS.\n *\n * # Strict Contextual Escaping\n *\n * Strict Contextual Escaping (SCE) is a mode in which AngularJS requires bindings in certain\n * contexts to result in a value that is marked as safe to use for that context.  One example of\n * such a context is binding arbitrary html controlled by the user via `ng-bind-html`.  We refer\n * to these contexts as privileged or SCE contexts.\n *\n * As of version 1.2, Angular ships with SCE enabled by default.\n *\n * Note:  When enabled (the default), IE8 in quirks mode is not supported.  In this mode, IE8 allows\n * one to execute arbitrary javascript by the use of the expression() syntax.  Refer\n * <http://blogs.msdn.com/b/ie/archive/2008/10/16/ending-expressions.aspx> to learn more about them.\n * You can ensure your document is in standards mode and not quirks mode by adding `<!doctype html>`\n * to the top of your HTML document.\n *\n * SCE assists in writing code in way that (a) is secure by default and (b) makes auditing for\n * security vulnerabilities such as XSS, clickjacking, etc. a lot easier.\n *\n * Here's an example of a binding in a privileged context:\n *\n * <pre class=\"prettyprint\">\n *     <input ng-model=\"userHtml\">\n *     <div ng-bind-html=\"{{userHtml}}\">\n * </pre>\n *\n * Notice that `ng-bind-html` is bound to `{{userHtml}}` controlled by the user.  With SCE\n * disabled, this application allows the user to render arbitrary HTML into the DIV.\n * In a more realistic example, one may be rendering user comments, blog articles, etc. via\n * bindings.  (HTML is just one example of a context where rendering user controlled input creates\n * security vulnerabilities.)\n *\n * For the case of HTML, you might use a library, either on the client side, or on the server side,\n * to sanitize unsafe HTML before binding to the value and rendering it in the document.\n *\n * How would you ensure that every place that used these types of bindings was bound to a value that\n * was sanitized by your library (or returned as safe for rendering by your server?)  How can you\n * ensure that you didn't accidentally delete the line that sanitized the value, or renamed some\n * properties/fields and forgot to update the binding to the sanitized value?\n *\n * To be secure by default, you want to ensure that any such bindings are disallowed unless you can\n * determine that something explicitly says it's safe to use a value for binding in that\n * context.  You can then audit your code (a simple grep would do) to ensure that this is only done\n * for those values that you can easily tell are safe - because they were received from your server,\n * sanitized by your library, etc.  You can organize your codebase to help with this - perhaps\n * allowing only the files in a specific directory to do this.  Ensuring that the internal API\n * exposed by that code doesn't markup arbitrary values as safe then becomes a more manageable task.\n *\n * In the case of AngularJS' SCE service, one uses {@link ng.$sce#methods_trustAs $sce.trustAs} \n * (and shorthand methods such as {@link ng.$sce#methods_trustAsHtml $sce.trustAsHtml}, etc.) to\n * obtain values that will be accepted by SCE / privileged contexts.\n *\n *\n * ## How does it work?\n *\n * In privileged contexts, directives and code will bind to the result of {@link ng.$sce#methods_getTrusted\n * $sce.getTrusted(context, value)} rather than to the value directly.  Directives use {@link\n * ng.$sce#methods_parse $sce.parseAs} rather than `$parse` to watch attribute bindings, which performs the\n * {@link ng.$sce#methods_getTrusted $sce.getTrusted} behind the scenes on non-constant literals.\n *\n * As an example, {@link ng.directive:ngBindHtml ngBindHtml} uses {@link\n * ng.$sce#methods_parseAsHtml $sce.parseAsHtml(binding expression)}.  Here's the actual code (slightly\n * simplified):\n *\n * <pre class=\"prettyprint\">\n *   var ngBindHtmlDirective = ['$sce', function($sce) {\n *     return function(scope, element, attr) {\n *       scope.$watch($sce.parseAsHtml(attr.ngBindHtml), function(value) {\n *         element.html(value || '');\n *       });\n *     };\n *   }];\n * </pre>\n *\n * ## Impact on loading templates\n *\n * This applies both to the {@link ng.directive:ngInclude `ng-include`} directive as well as\n * `templateUrl`'s specified by {@link guide/directive directives}.\n *\n * By default, Angular only loads templates from the same domain and protocol as the application\n * document.  This is done by calling {@link ng.$sce#methods_getTrustedResourceUrl\n * $sce.getTrustedResourceUrl} on the template URL.  To load templates from other domains and/or\n * protocols, you may either either {@link ng.$sceDelegateProvider#methods_resourceUrlWhitelist whitelist\n * them} or {@link ng.$sce#methods_trustAsResourceUrl wrap it} into a trusted value.\n *\n * *Please note*:\n * The browser's\n * {@link https://code.google.com/p/browsersec/wiki/Part2#Same-origin_policy_for_XMLHttpRequest\n * Same Origin Policy} and {@link http://www.w3.org/TR/cors/ Cross-Origin Resource Sharing (CORS)}\n * policy apply in addition to this and may further restrict whether the template is successfully\n * loaded.  This means that without the right CORS policy, loading templates from a different domain\n * won't work on all browsers.  Also, loading templates from `file://` URL does not work on some\n * browsers.\n *\n * ## This feels like too much overhead for the developer?\n *\n * It's important to remember that SCE only applies to interpolation expressions.\n *\n * If your expressions are constant literals, they're automatically trusted and you don't need to\n * call `$sce.trustAs` on them.  (e.g.\n * `<div ng-html-bind-unsafe=\"'<b>implicitly trusted</b>'\"></div>`) just works.\n *\n * Additionally, `a[href]` and `img[src]` automatically sanitize their URLs and do not pass them\n * through {@link ng.$sce#methods_getTrusted $sce.getTrusted}.  SCE doesn't play a role here.\n *\n * The included {@link ng.$sceDelegate $sceDelegate} comes with sane defaults to allow you to load\n * templates in `ng-include` from your application's domain without having to even know about SCE.\n * It blocks loading templates from other domains or loading templates over http from an https\n * served document.  You can change these by setting your own custom {@link\n * ng.$sceDelegateProvider#methods_resourceUrlWhitelist whitelists} and {@link\n * ng.$sceDelegateProvider#methods_resourceUrlBlacklist blacklists} for matching such URLs.\n *\n * This significantly reduces the overhead.  It is far easier to pay the small overhead and have an\n * application that's secure and can be audited to verify that with much more ease than bolting\n * security onto an application later.\n *\n * <a name=\"contexts\"></a>\n * ## What trusted context types are supported?\n *\n * | Context             | Notes          |\n * |---------------------|----------------|\n * | `$sce.HTML`         | For HTML that's safe to source into the application.  The {@link ng.directive:ngBindHtml ngBindHtml} directive uses this context for bindings. |\n * | `$sce.CSS`          | For CSS that's safe to source into the application.  Currently unused.  Feel free to use it in your own directives. |\n * | `$sce.URL`          | For URLs that are safe to follow as links.  Currently unused (`<a href=` and `<img src=` sanitize their urls and don't consititute an SCE context. |\n * | `$sce.RESOURCE_URL` | For URLs that are not only safe to follow as links, but whose contens are also safe to include in your application.  Examples include `ng-include`, `src` / `ngSrc` bindings for tags other than `IMG` (e.g. `IFRAME`, `OBJECT`, etc.)  <br><br>Note that `$sce.RESOURCE_URL` makes a stronger statement about the URL than `$sce.URL` does and therefore contexts requiring values trusted for `$sce.RESOURCE_URL` can be used anywhere that values trusted for `$sce.URL` are required. |\n * | `$sce.JS`           | For JavaScript that is safe to execute in your application's context.  Currently unused.  Feel free to use it in your own directives. |\n *\n * ## Format of items in {@link ng.$sceDelegateProvider#methods_resourceUrlWhitelist resourceUrlWhitelist}/{@link ng.$sceDelegateProvider#methods_resourceUrlBlacklist Blacklist} <a name=\"resourceUrlPatternItem\"></a>\n *\n *  Each element in these arrays must be one of the following:\n *\n *  - **'self'**\n *    - The special **string**, `'self'`, can be used to match against all URLs of the **same\n *      domain** as the application document using the **same protocol**.\n *  - **String** (except the special value `'self'`)\n *    - The string is matched against the full *normalized / absolute URL* of the resource\n *      being tested (substring matches are not good enough.)\n *    - There are exactly **two wildcard sequences** - `*` and `**`.  All other characters\n *      match themselves.\n *    - `*`: matches zero or more occurances of any character other than one of the following 6\n *      characters: '`:`', '`/`', '`.`', '`?`', '`&`' and ';'.  It's a useful wildcard for use\n *      in a whitelist.\n *    - `**`: matches zero or more occurances of *any* character.  As such, it's not\n *      not appropriate to use in for a scheme, domain, etc. as it would match too much.  (e.g.\n *      http://**.example.com/ would match http://evil.com/?ignore=.example.com/ and that might\n *      not have been the intention.)  It's usage at the very end of the path is ok.  (e.g.\n *      http://foo.example.com/templates/**).\n *  - **RegExp** (*see caveat below*)\n *    - *Caveat*:  While regular expressions are powerful and offer great flexibility,  their syntax\n *      (and all the inevitable escaping) makes them *harder to maintain*.  It's easy to\n *      accidentally introduce a bug when one updates a complex expression (imho, all regexes should\n *      have good test coverage.).  For instance, the use of `.` in the regex is correct only in a\n *      small number of cases.  A `.` character in the regex used when matching the scheme or a\n *      subdomain could be matched against a `:` or literal `.` that was likely not intended.   It\n *      is highly recommended to use the string patterns and only fall back to regular expressions\n *      if they as a last resort.\n *    - The regular expression must be an instance of RegExp (i.e. not a string.)  It is\n *      matched against the **entire** *normalized / absolute URL* of the resource being tested\n *      (even when the RegExp did not have the `^` and `$` codes.)  In addition, any flags\n *      present on the RegExp (such as multiline, global, ignoreCase) are ignored.\n *    - If you are generating your Javascript from some other templating engine (not\n *      recommended, e.g. in issue [#4006](https://github.com/angular/angular.js/issues/4006)),\n *      remember to escape your regular expression (and be aware that you might need more than\n *      one level of escaping depending on your templating engine and the way you interpolated\n *      the value.)  Do make use of your platform's escaping mechanism as it might be good\n *      enough before coding your own.  e.g. Ruby has\n *      [Regexp.escape(str)](http://www.ruby-doc.org/core-2.0.0/Regexp.html#method-c-escape)\n *      and Python has [re.escape](http://docs.python.org/library/re.html#re.escape).\n *      Javascript lacks a similar built in function for escaping.  Take a look at Google\n *      Closure library's [goog.string.regExpEscape(s)](\n *      http://docs.closure-library.googlecode.com/git/closure_goog_string_string.js.source.html#line962).\n *\n * Refer {@link ng.$sceDelegateProvider $sceDelegateProvider} for an example.\n *\n * ## Show me an example using SCE.\n *\n * @example\n<example module=\"mySceApp\">\n<file name=\"index.html\">\n  <div ng-controller=\"myAppController as myCtrl\">\n    <i ng-bind-html=\"myCtrl.explicitlyTrustedHtml\" id=\"explicitlyTrustedHtml\"></i><br><br>\n    <b>User comments</b><br>\n    By default, HTML that isn't explicitly trusted (e.g. Alice's comment) is sanitized when\n    $sanitize is available.  If $sanitize isn't available, this results in an error instead of an\n    exploit.\n    <div class=\"well\">\n      <div ng-repeat=\"userComment in myCtrl.userComments\">\n        <b>{{userComment.name}}</b>:\n        <span ng-bind-html=\"userComment.htmlComment\" class=\"htmlComment\"></span>\n        <br>\n      </div>\n    </div>\n  </div>\n</file>\n\n<file name=\"script.js\">\n  var mySceApp = angular.module('mySceApp', ['ngSanitize']);\n\n  mySceApp.controller(\"myAppController\", function myAppController($http, $templateCache, $sce) {\n    var self = this;\n    $http.get(\"test_data.json\", {cache: $templateCache}).success(function(userComments) {\n      self.userComments = userComments;\n    });\n    self.explicitlyTrustedHtml = $sce.trustAsHtml(\n        '<span onmouseover=\"this.textContent=&quot;Explicitly trusted HTML bypasses ' +\n        'sanitization.&quot;\">Hover over this text.</span>');\n  });\n</file>\n\n<file name=\"test_data.json\">\n[\n  { \"name\": \"Alice\",\n    \"htmlComment\":\n        \"<span onmouseover='this.textContent=\\\"PWN3D!\\\"'>Is <i>anyone</i> reading this?</span>\"\n  },\n  { \"name\": \"Bob\",\n    \"htmlComment\": \"<i>Yes!</i>  Am I the only other one?\"\n  }\n]\n</file>\n\n<file name=\"scenario.js\">\n  describe('SCE doc demo', function() {\n    it('should sanitize untrusted values', function() {\n      expect(element('.htmlComment').html()).toBe('<span>Is <i>anyone</i> reading this?</span>');\n    });\n    it('should NOT sanitize explicitly trusted values', function() {\n      expect(element('#explicitlyTrustedHtml').html()).toBe(\n          '<span onmouseover=\"this.textContent=&quot;Explicitly trusted HTML bypasses ' +\n          'sanitization.&quot;\">Hover over this text.</span>');\n    });\n  });\n</file>\n</example>\n *\n *\n *\n * ## Can I disable SCE completely?\n *\n * Yes, you can.  However, this is strongly discouraged.  SCE gives you a lot of security benefits\n * for little coding overhead.  It will be much harder to take an SCE disabled application and\n * either secure it on your own or enable SCE at a later stage.  It might make sense to disable SCE\n * for cases where you have a lot of existing code that was written before SCE was introduced and\n * you're migrating them a module at a time.\n *\n * That said, here's how you can completely disable SCE:\n *\n * <pre class=\"prettyprint\">\n *   angular.module('myAppWithSceDisabledmyApp', []).config(function($sceProvider) {\n *     // Completely disable SCE.  For demonstration purposes only!\n *     // Do not use in new projects.\n *     $sceProvider.enabled(false);\n *   });\n * </pre>\n *\n */\n/* jshint maxlen: 100 */\n\nfunction $SceProvider() {\n  var enabled = true;\n\n  /**\n   * @ngdoc function\n   * @name ng.sceProvider#enabled\n   * @methodOf ng.$sceProvider\n   * @function\n   *\n   * @param {boolean=} value If provided, then enables/disables SCE.\n   * @return {boolean} true if SCE is enabled, false otherwise.\n   *\n   * @description\n   * Enables/disables SCE and returns the current value.\n   */\n  this.enabled = function (value) {\n    if (arguments.length) {\n      enabled = !!value;\n    }\n    return enabled;\n  };\n\n\n  /* Design notes on the default implementation for SCE.\n   *\n   * The API contract for the SCE delegate\n   * -------------------------------------\n   * The SCE delegate object must provide the following 3 methods:\n   *\n   * - trustAs(contextEnum, value)\n   *     This method is used to tell the SCE service that the provided value is OK to use in the\n   *     contexts specified by contextEnum.  It must return an object that will be accepted by\n   *     getTrusted() for a compatible contextEnum and return this value.\n   *\n   * - valueOf(value)\n   *     For values that were not produced by trustAs(), return them as is.  For values that were\n   *     produced by trustAs(), return the corresponding input value to trustAs.  Basically, if\n   *     trustAs is wrapping the given values into some type, this operation unwraps it when given\n   *     such a value.\n   *\n   * - getTrusted(contextEnum, value)\n   *     This function should return the a value that is safe to use in the context specified by\n   *     contextEnum or throw and exception otherwise.\n   *\n   * NOTE: This contract deliberately does NOT state that values returned by trustAs() must be\n   * opaque or wrapped in some holder object.  That happens to be an implementation detail.  For\n   * instance, an implementation could maintain a registry of all trusted objects by context.  In\n   * such a case, trustAs() would return the same object that was passed in.  getTrusted() would\n   * return the same object passed in if it was found in the registry under a compatible context or\n   * throw an exception otherwise.  An implementation might only wrap values some of the time based\n   * on some criteria.  getTrusted() might return a value and not throw an exception for special\n   * constants or objects even if not wrapped.  All such implementations fulfill this contract.\n   *\n   *\n   * A note on the inheritance model for SCE contexts\n   * ------------------------------------------------\n   * I've used inheritance and made RESOURCE_URL wrapped types a subtype of URL wrapped types.  This\n   * is purely an implementation details.\n   *\n   * The contract is simply this:\n   *\n   *     getTrusted($sce.RESOURCE_URL, value) succeeding implies that getTrusted($sce.URL, value)\n   *     will also succeed.\n   *\n   * Inheritance happens to capture this in a natural way.  In some future, we\n   * may not use inheritance anymore.  That is OK because no code outside of\n   * sce.js and sceSpecs.js would need to be aware of this detail.\n   */\n\n  this.$get = ['$parse', '$document', '$sceDelegate', function(\n                $parse,   $document,   $sceDelegate) {\n    // Prereq: Ensure that we're not running in IE8 quirks mode.  In that mode, IE allows\n    // the \"expression(javascript expression)\" syntax which is insecure.\n    if (enabled && msie) {\n      var documentMode = $document[0].documentMode;\n      if (documentMode !== undefined && documentMode < 8) {\n        throw $sceMinErr('iequirks',\n          'Strict Contextual Escaping does not support Internet Explorer version < 9 in quirks ' +\n          'mode.  You can fix this by adding the text <!doctype html> to the top of your HTML ' +\n          'document.  See http://docs.angularjs.org/api/ng.$sce for more information.');\n      }\n    }\n\n    var sce = copy(SCE_CONTEXTS);\n\n    /**\n     * @ngdoc function\n     * @name ng.sce#isEnabled\n     * @methodOf ng.$sce\n     * @function\n     *\n     * @return {Boolean} true if SCE is enabled, false otherwise.  If you want to set the value, you\n     * have to do it at module config time on {@link ng.$sceProvider $sceProvider}.\n     *\n     * @description\n     * Returns a boolean indicating if SCE is enabled.\n     */\n    sce.isEnabled = function () {\n      return enabled;\n    };\n    sce.trustAs = $sceDelegate.trustAs;\n    sce.getTrusted = $sceDelegate.getTrusted;\n    sce.valueOf = $sceDelegate.valueOf;\n\n    if (!enabled) {\n      sce.trustAs = sce.getTrusted = function(type, value) { return value; };\n      sce.valueOf = identity;\n    }\n\n    /**\n     * @ngdoc method\n     * @name ng.$sce#parse\n     * @methodOf ng.$sce\n     *\n     * @description\n     * Converts Angular {@link guide/expression expression} into a function.  This is like {@link\n     * ng.$parse $parse} and is identical when the expression is a literal constant.  Otherwise, it\n     * wraps the expression in a call to {@link ng.$sce#methods_getTrusted $sce.getTrusted(*type*,\n     * *result*)}\n     *\n     * @param {string} type The kind of SCE context in which this result will be used.\n     * @param {string} expression String expression to compile.\n     * @returns {function(context, locals)} a function which represents the compiled expression:\n     *\n     *    * `context` – `{object}` – an object against which any expressions embedded in the strings\n     *      are evaluated against (typically a scope object).\n     *    * `locals` – `{object=}` – local variables context object, useful for overriding values in\n     *      `context`.\n     */\n    sce.parseAs = function sceParseAs(type, expr) {\n      var parsed = $parse(expr);\n      if (parsed.literal && parsed.constant) {\n        return parsed;\n      } else {\n        return function sceParseAsTrusted(self, locals) {\n          return sce.getTrusted(type, parsed(self, locals));\n        };\n      }\n    };\n\n    /**\n     * @ngdoc method\n     * @name ng.$sce#trustAs\n     * @methodOf ng.$sce\n     *\n     * @description\n     * Delegates to {@link ng.$sceDelegate#methods_trustAs `$sceDelegate.trustAs`}.  As such,\n     * returns an objectthat is trusted by angular for use in specified strict contextual\n     * escaping contexts (such as ng-html-bind-unsafe, ng-include, any src attribute\n     * interpolation, any dom event binding attribute interpolation such as for onclick,  etc.)\n     * that uses the provided value.  See * {@link ng.$sce $sce} for enabling strict contextual\n     * escaping.\n     *\n     * @param {string} type The kind of context in which this value is safe for use.  e.g. url,\n     *   resource_url, html, js and css.\n     * @param {*} value The value that that should be considered trusted/safe.\n     * @returns {*} A value that can be used to stand in for the provided `value` in places\n     * where Angular expects a $sce.trustAs() return value.\n     */\n\n    /**\n     * @ngdoc method\n     * @name ng.$sce#trustAsHtml\n     * @methodOf ng.$sce\n     *\n     * @description\n     * Shorthand method.  `$sce.trustAsHtml(value)` →\n     *     {@link ng.$sceDelegate#methods_trustAs `$sceDelegate.trustAs($sce.HTML, value)`}\n     *\n     * @param {*} value The value to trustAs.\n     * @returns {*} An object that can be passed to {@link ng.$sce#methods_getTrustedHtml\n     *     $sce.getTrustedHtml(value)} to obtain the original value.  (privileged directives\n     *     only accept expressions that are either literal constants or are the\n     *     return value of {@link ng.$sce#methods_trustAs $sce.trustAs}.)\n     */\n\n    /**\n     * @ngdoc method\n     * @name ng.$sce#trustAsUrl\n     * @methodOf ng.$sce\n     *\n     * @description\n     * Shorthand method.  `$sce.trustAsUrl(value)` →\n     *     {@link ng.$sceDelegate#methods_trustAs `$sceDelegate.trustAs($sce.URL, value)`}\n     *\n     * @param {*} value The value to trustAs.\n     * @returns {*} An object that can be passed to {@link ng.$sce#methods_getTrustedUrl\n     *     $sce.getTrustedUrl(value)} to obtain the original value.  (privileged directives\n     *     only accept expressions that are either literal constants or are the\n     *     return value of {@link ng.$sce#methods_trustAs $sce.trustAs}.)\n     */\n\n    /**\n     * @ngdoc method\n     * @name ng.$sce#trustAsResourceUrl\n     * @methodOf ng.$sce\n     *\n     * @description\n     * Shorthand method.  `$sce.trustAsResourceUrl(value)` →\n     *     {@link ng.$sceDelegate#methods_trustAs `$sceDelegate.trustAs($sce.RESOURCE_URL, value)`}\n     *\n     * @param {*} value The value to trustAs.\n     * @returns {*} An object that can be passed to {@link ng.$sce#methods_getTrustedResourceUrl\n     *     $sce.getTrustedResourceUrl(value)} to obtain the original value.  (privileged directives\n     *     only accept expressions that are either literal constants or are the return\n     *     value of {@link ng.$sce#methods_trustAs $sce.trustAs}.)\n     */\n\n    /**\n     * @ngdoc method\n     * @name ng.$sce#trustAsJs\n     * @methodOf ng.$sce\n     *\n     * @description\n     * Shorthand method.  `$sce.trustAsJs(value)` →\n     *     {@link ng.$sceDelegate#methods_trustAs `$sceDelegate.trustAs($sce.JS, value)`}\n     *\n     * @param {*} value The value to trustAs.\n     * @returns {*} An object that can be passed to {@link ng.$sce#methods_getTrustedJs\n     *     $sce.getTrustedJs(value)} to obtain the original value.  (privileged directives\n     *     only accept expressions that are either literal constants or are the\n     *     return value of {@link ng.$sce#methods_trustAs $sce.trustAs}.)\n     */\n\n    /**\n     * @ngdoc method\n     * @name ng.$sce#getTrusted\n     * @methodOf ng.$sce\n     *\n     * @description\n     * Delegates to {@link ng.$sceDelegate#methods_getTrusted `$sceDelegate.getTrusted`}.  As such,\n     * takes the result of a {@link ng.$sce#methods_trustAs `$sce.trustAs`}() call and returns the\n     * originally supplied value if the queried context type is a supertype of the created type.\n     * If this condition isn't satisfied, throws an exception.\n     *\n     * @param {string} type The kind of context in which this value is to be used.\n     * @param {*} maybeTrusted The result of a prior {@link ng.$sce#methods_trustAs `$sce.trustAs`}\n     *                         call.\n     * @returns {*} The value the was originally provided to\n     *              {@link ng.$sce#methods_trustAs `$sce.trustAs`} if valid in this context.\n     *              Otherwise, throws an exception.\n     */\n\n    /**\n     * @ngdoc method\n     * @name ng.$sce#getTrustedHtml\n     * @methodOf ng.$sce\n     *\n     * @description\n     * Shorthand method.  `$sce.getTrustedHtml(value)` →\n     *     {@link ng.$sceDelegate#methods_getTrusted `$sceDelegate.getTrusted($sce.HTML, value)`}\n     *\n     * @param {*} value The value to pass to `$sce.getTrusted`.\n     * @returns {*} The return value of `$sce.getTrusted($sce.HTML, value)`\n     */\n\n    /**\n     * @ngdoc method\n     * @name ng.$sce#getTrustedCss\n     * @methodOf ng.$sce\n     *\n     * @description\n     * Shorthand method.  `$sce.getTrustedCss(value)` →\n     *     {@link ng.$sceDelegate#methods_getTrusted `$sceDelegate.getTrusted($sce.CSS, value)`}\n     *\n     * @param {*} value The value to pass to `$sce.getTrusted`.\n     * @returns {*} The return value of `$sce.getTrusted($sce.CSS, value)`\n     */\n\n    /**\n     * @ngdoc method\n     * @name ng.$sce#getTrustedUrl\n     * @methodOf ng.$sce\n     *\n     * @description\n     * Shorthand method.  `$sce.getTrustedUrl(value)` →\n     *     {@link ng.$sceDelegate#methods_getTrusted `$sceDelegate.getTrusted($sce.URL, value)`}\n     *\n     * @param {*} value The value to pass to `$sce.getTrusted`.\n     * @returns {*} The return value of `$sce.getTrusted($sce.URL, value)`\n     */\n\n    /**\n     * @ngdoc method\n     * @name ng.$sce#getTrustedResourceUrl\n     * @methodOf ng.$sce\n     *\n     * @description\n     * Shorthand method.  `$sce.getTrustedResourceUrl(value)` →\n     *     {@link ng.$sceDelegate#methods_getTrusted `$sceDelegate.getTrusted($sce.RESOURCE_URL, value)`}\n     *\n     * @param {*} value The value to pass to `$sceDelegate.getTrusted`.\n     * @returns {*} The return value of `$sce.getTrusted($sce.RESOURCE_URL, value)`\n     */\n\n    /**\n     * @ngdoc method\n     * @name ng.$sce#getTrustedJs\n     * @methodOf ng.$sce\n     *\n     * @description\n     * Shorthand method.  `$sce.getTrustedJs(value)` →\n     *     {@link ng.$sceDelegate#methods_getTrusted `$sceDelegate.getTrusted($sce.JS, value)`}\n     *\n     * @param {*} value The value to pass to `$sce.getTrusted`.\n     * @returns {*} The return value of `$sce.getTrusted($sce.JS, value)`\n     */\n\n    /**\n     * @ngdoc method\n     * @name ng.$sce#parseAsHtml\n     * @methodOf ng.$sce\n     *\n     * @description\n     * Shorthand method.  `$sce.parseAsHtml(expression string)` →\n     *     {@link ng.$sce#methods_parse `$sce.parseAs($sce.HTML, value)`}\n     *\n     * @param {string} expression String expression to compile.\n     * @returns {function(context, locals)} a function which represents the compiled expression:\n     *\n     *    * `context` – `{object}` – an object against which any expressions embedded in the strings\n     *      are evaluated against (typically a scope object).\n     *    * `locals` – `{object=}` – local variables context object, useful for overriding values in\n     *      `context`.\n     */\n\n    /**\n     * @ngdoc method\n     * @name ng.$sce#parseAsCss\n     * @methodOf ng.$sce\n     *\n     * @description\n     * Shorthand method.  `$sce.parseAsCss(value)` →\n     *     {@link ng.$sce#methods_parse `$sce.parseAs($sce.CSS, value)`}\n     *\n     * @param {string} expression String expression to compile.\n     * @returns {function(context, locals)} a function which represents the compiled expression:\n     *\n     *    * `context` – `{object}` – an object against which any expressions embedded in the strings\n     *      are evaluated against (typically a scope object).\n     *    * `locals` – `{object=}` – local variables context object, useful for overriding values in\n     *      `context`.\n     */\n\n    /**\n     * @ngdoc method\n     * @name ng.$sce#parseAsUrl\n     * @methodOf ng.$sce\n     *\n     * @description\n     * Shorthand method.  `$sce.parseAsUrl(value)` →\n     *     {@link ng.$sce#methods_parse `$sce.parseAs($sce.URL, value)`}\n     *\n     * @param {string} expression String expression to compile.\n     * @returns {function(context, locals)} a function which represents the compiled expression:\n     *\n     *    * `context` – `{object}` – an object against which any expressions embedded in the strings\n     *      are evaluated against (typically a scope object).\n     *    * `locals` – `{object=}` – local variables context object, useful for overriding values in\n     *      `context`.\n     */\n\n    /**\n     * @ngdoc method\n     * @name ng.$sce#parseAsResourceUrl\n     * @methodOf ng.$sce\n     *\n     * @description\n     * Shorthand method.  `$sce.parseAsResourceUrl(value)` →\n     *     {@link ng.$sce#methods_parse `$sce.parseAs($sce.RESOURCE_URL, value)`}\n     *\n     * @param {string} expression String expression to compile.\n     * @returns {function(context, locals)} a function which represents the compiled expression:\n     *\n     *    * `context` – `{object}` – an object against which any expressions embedded in the strings\n     *      are evaluated against (typically a scope object).\n     *    * `locals` – `{object=}` – local variables context object, useful for overriding values in\n     *      `context`.\n     */\n\n    /**\n     * @ngdoc method\n     * @name ng.$sce#parseAsJs\n     * @methodOf ng.$sce\n     *\n     * @description\n     * Shorthand method.  `$sce.parseAsJs(value)` →\n     *     {@link ng.$sce#methods_parse `$sce.parseAs($sce.JS, value)`}\n     *\n     * @param {string} expression String expression to compile.\n     * @returns {function(context, locals)} a function which represents the compiled expression:\n     *\n     *    * `context` – `{object}` – an object against which any expressions embedded in the strings\n     *      are evaluated against (typically a scope object).\n     *    * `locals` – `{object=}` – local variables context object, useful for overriding values in\n     *      `context`.\n     */\n\n    // Shorthand delegations.\n    var parse = sce.parseAs,\n        getTrusted = sce.getTrusted,\n        trustAs = sce.trustAs;\n\n    forEach(SCE_CONTEXTS, function (enumValue, name) {\n      var lName = lowercase(name);\n      sce[camelCase(\"parse_as_\" + lName)] = function (expr) {\n        return parse(enumValue, expr);\n      };\n      sce[camelCase(\"get_trusted_\" + lName)] = function (value) {\n        return getTrusted(enumValue, value);\n      };\n      sce[camelCase(\"trust_as_\" + lName)] = function (value) {\n        return trustAs(enumValue, value);\n      };\n    });\n\n    return sce;\n  }];\n}\n\n/**\n * !!! This is an undocumented \"private\" service !!!\n *\n * @name ng.$sniffer\n * @requires $window\n * @requires $document\n *\n * @property {boolean} history Does the browser support html5 history api ?\n * @property {boolean} hashchange Does the browser support hashchange event ?\n * @property {boolean} transitions Does the browser support CSS transition events ?\n * @property {boolean} animations Does the browser support CSS animation events ?\n *\n * @description\n * This is very simple implementation of testing browser's features.\n */\nfunction $SnifferProvider() {\n  this.$get = ['$window', '$document', function($window, $document) {\n    var eventSupport = {},\n        android =\n          int((/android (\\d+)/.exec(lowercase(($window.navigator || {}).userAgent)) || [])[1]),\n        boxee = /Boxee/i.test(($window.navigator || {}).userAgent),\n        document = $document[0] || {},\n        vendorPrefix,\n        vendorRegex = /^(Moz|webkit|O|ms)(?=[A-Z])/,\n        bodyStyle = document.body && document.body.style,\n        transitions = false,\n        animations = false,\n        match;\n\n    if (bodyStyle) {\n      for(var prop in bodyStyle) {\n        if(match = vendorRegex.exec(prop)) {\n          vendorPrefix = match[0];\n          vendorPrefix = vendorPrefix.substr(0, 1).toUpperCase() + vendorPrefix.substr(1);\n          break;\n        }\n      }\n\n      if(!vendorPrefix) {\n        vendorPrefix = ('WebkitOpacity' in bodyStyle) && 'webkit';\n      }\n\n      transitions = !!(('transition' in bodyStyle) || (vendorPrefix + 'Transition' in bodyStyle));\n      animations  = !!(('animation' in bodyStyle) || (vendorPrefix + 'Animation' in bodyStyle));\n\n      if (android && (!transitions||!animations)) {\n        transitions = isString(document.body.style.webkitTransition);\n        animations = isString(document.body.style.webkitAnimation);\n      }\n    }\n\n\n    return {\n      // Android has history.pushState, but it does not update location correctly\n      // so let's not use the history API at all.\n      // http://code.google.com/p/android/issues/detail?id=17471\n      // https://github.com/angular/angular.js/issues/904\n\n      // older webit browser (533.9) on Boxee box has exactly the same problem as Android has\n      // so let's not use the history API also\n      // We are purposefully using `!(android < 4)` to cover the case when `android` is undefined\n      // jshint -W018\n      history: !!($window.history && $window.history.pushState && !(android < 4) && !boxee),\n      // jshint +W018\n      hashchange: 'onhashchange' in $window &&\n                  // IE8 compatible mode lies\n                  (!document.documentMode || document.documentMode > 7),\n      hasEvent: function(event) {\n        // IE9 implements 'input' event it's so fubared that we rather pretend that it doesn't have\n        // it. In particular the event is not fired when backspace or delete key are pressed or\n        // when cut operation is performed.\n        if (event == 'input' && msie == 9) return false;\n\n        if (isUndefined(eventSupport[event])) {\n          var divElm = document.createElement('div');\n          eventSupport[event] = 'on' + event in divElm;\n        }\n\n        return eventSupport[event];\n      },\n      csp: csp(),\n      vendorPrefix: vendorPrefix,\n      transitions : transitions,\n      animations : animations,\n      msie : msie\n    };\n  }];\n}\n\nfunction $TimeoutProvider() {\n  this.$get = ['$rootScope', '$browser', '$q', '$exceptionHandler',\n       function($rootScope,   $browser,   $q,   $exceptionHandler) {\n    var deferreds = {};\n\n\n     /**\n      * @ngdoc function\n      * @name ng.$timeout\n      * @requires $browser\n      *\n      * @description\n      * Angular's wrapper for `window.setTimeout`. The `fn` function is wrapped into a try/catch\n      * block and delegates any exceptions to\n      * {@link ng.$exceptionHandler $exceptionHandler} service.\n      *\n      * The return value of registering a timeout function is a promise, which will be resolved when\n      * the timeout is reached and the timeout function is executed.\n      *\n      * To cancel a timeout request, call `$timeout.cancel(promise)`.\n      *\n      * In tests you can use {@link ngMock.$timeout `$timeout.flush()`} to\n      * synchronously flush the queue of deferred functions.\n      *\n      * @param {function()} fn A function, whose execution should be delayed.\n      * @param {number=} [delay=0] Delay in milliseconds.\n      * @param {boolean=} [invokeApply=true] If set to `false` skips model dirty checking, otherwise\n      *   will invoke `fn` within the {@link ng.$rootScope.Scope#methods_$apply $apply} block.\n      * @returns {Promise} Promise that will be resolved when the timeout is reached. The value this\n      *   promise will be resolved with is the return value of the `fn` function.\n      * \n      * @example\n      <doc:example module=\"time\">\n        <doc:source>\n          <script>\n            function Ctrl2($scope,$timeout) {\n              $scope.format = 'M/d/yy h:mm:ss a';\n              $scope.blood_1 = 100;\n              $scope.blood_2 = 120;\n\n              var stop;\n              $scope.fight = function() {\n                stop = $timeout(function() {\n                  if ($scope.blood_1 > 0 && $scope.blood_2 > 0) {\n                      $scope.blood_1 = $scope.blood_1 - 3;\n                      $scope.blood_2 = $scope.blood_2 - 4;\n                      $scope.fight();\n                  } else {\n                      $timeout.cancel(stop);\n                  }\n                }, 100);\n              };\n\n              $scope.stopFight = function() {\n                $timeout.cancel(stop);\n              };\n\n              $scope.resetFight = function() {\n                $scope.blood_1 = 100;\n                $scope.blood_2 = 120;\n              }\n            }\n\n            angular.module('time', [])\n              // Register the 'myCurrentTime' directive factory method.\n              // We inject $timeout and dateFilter service since the factory method is DI.\n              .directive('myCurrentTime', function($timeout, dateFilter) {\n                // return the directive link function. (compile function not needed)\n                return function(scope, element, attrs) {\n                  var format,  // date format\n                  timeoutId; // timeoutId, so that we can cancel the time updates\n\n                  // used to update the UI\n                  function updateTime() {\n                    element.text(dateFilter(new Date(), format));\n                  }\n\n                  // watch the expression, and update the UI on change.\n                  scope.$watch(attrs.myCurrentTime, function(value) {\n                    format = value;\n                    updateTime();\n                  });\n\n                  // schedule update in one second\n                  function updateLater() {\n                    // save the timeoutId for canceling\n                    timeoutId = $timeout(function() {\n                      updateTime(); // update DOM\n                      updateLater(); // schedule another update\n                    }, 1000);\n                  }\n\n                  // listen on DOM destroy (removal) event, and cancel the next UI update\n                  // to prevent updating time ofter the DOM element was removed.\n                  element.bind('$destroy', function() {\n                    $timeout.cancel(timeoutId);\n                  });\n\n                  updateLater(); // kick off the UI update process.\n                }\n              });\n          </script>\n\n          <div>\n            <div ng-controller=\"Ctrl2\">\n              Date format: <input ng-model=\"format\"> <hr/>\n              Current time is: <span my-current-time=\"format\"></span>\n              <hr/>\n              Blood 1 : <font color='red'>{{blood_1}}</font>\n              Blood 2 : <font color='red'>{{blood_2}}</font>\n              <button type=\"button\" data-ng-click=\"fight()\">Fight</button>\n              <button type=\"button\" data-ng-click=\"stopFight()\">StopFight</button>\n              <button type=\"button\" data-ng-click=\"resetFight()\">resetFight</button>\n            </div>\n          </div>\n\n        </doc:source>\n      </doc:example>\n      */\n    function timeout(fn, delay, invokeApply) {\n      var deferred = $q.defer(),\n          promise = deferred.promise,\n          skipApply = (isDefined(invokeApply) && !invokeApply),\n          timeoutId;\n\n      timeoutId = $browser.defer(function() {\n        try {\n          deferred.resolve(fn());\n        } catch(e) {\n          deferred.reject(e);\n          $exceptionHandler(e);\n        }\n        finally {\n          delete deferreds[promise.$$timeoutId];\n        }\n\n        if (!skipApply) $rootScope.$apply();\n      }, delay);\n\n      promise.$$timeoutId = timeoutId;\n      deferreds[timeoutId] = deferred;\n\n      return promise;\n    }\n\n\n     /**\n      * @ngdoc function\n      * @name ng.$timeout#cancel\n      * @methodOf ng.$timeout\n      *\n      * @description\n      * Cancels a task associated with the `promise`. As a result of this, the promise will be\n      * resolved with a rejection.\n      *\n      * @param {Promise=} promise Promise returned by the `$timeout` function.\n      * @returns {boolean} Returns `true` if the task hasn't executed yet and was successfully\n      *   canceled.\n      */\n    timeout.cancel = function(promise) {\n      if (promise && promise.$$timeoutId in deferreds) {\n        deferreds[promise.$$timeoutId].reject('canceled');\n        delete deferreds[promise.$$timeoutId];\n        return $browser.defer.cancel(promise.$$timeoutId);\n      }\n      return false;\n    };\n\n    return timeout;\n  }];\n}\n\n// NOTE:  The usage of window and document instead of $window and $document here is\n// deliberate.  This service depends on the specific behavior of anchor nodes created by the\n// browser (resolving and parsing URLs) that is unlikely to be provided by mock objects and\n// cause us to break tests.  In addition, when the browser resolves a URL for XHR, it\n// doesn't know about mocked locations and resolves URLs to the real document - which is\n// exactly the behavior needed here.  There is little value is mocking these out for this\n// service.\nvar urlParsingNode = document.createElement(\"a\");\nvar originUrl = urlResolve(window.location.href, true);\n\n/**\n *\n * Implementation Notes for non-IE browsers\n * ----------------------------------------\n * Assigning a URL to the href property of an anchor DOM node, even one attached to the DOM,\n * results both in the normalizing and parsing of the URL.  Normalizing means that a relative\n * URL will be resolved into an absolute URL in the context of the application document.\n * Parsing means that the anchor node's host, hostname, protocol, port, pathname and related\n * properties are all populated to reflect the normalized URL.  This approach has wide\n * compatibility - Safari 1+, Mozilla 1+, Opera 7+,e etc.  See\n * http://www.aptana.com/reference/html/api/HTMLAnchorElement.html\n *\n * Implementation Notes for IE\n * ---------------------------\n * IE >= 8 and <= 10 normalizes the URL when assigned to the anchor node similar to the other\n * browsers.  However, the parsed components will not be set if the URL assigned did not specify\n * them.  (e.g. if you assign a.href = \"foo\", then a.protocol, a.host, etc. will be empty.)  We\n * work around that by performing the parsing in a 2nd step by taking a previously normalized\n * URL (e.g. by assining to a.href) and assigning it a.href again.  This correctly populates the\n * properties such as protocol, hostname, port, etc.\n *\n * IE7 does not normalize the URL when assigned to an anchor node.  (Apparently, it does, if one\n * uses the inner HTML approach to assign the URL as part of an HTML snippet -\n * http://stackoverflow.com/a/472729)  However, setting img[src] does normalize the URL.\n * Unfortunately, setting img[src] to something like \"javascript:foo\" on IE throws an exception.\n * Since the primary usage for normalizing URLs is to sanitize such URLs, we can't use that\n * method and IE < 8 is unsupported.\n *\n * References:\n *   http://developer.mozilla.org/en-US/docs/Web/API/HTMLAnchorElement\n *   http://www.aptana.com/reference/html/api/HTMLAnchorElement.html\n *   http://url.spec.whatwg.org/#urlutils\n *   https://github.com/angular/angular.js/pull/2902\n *   http://james.padolsey.com/javascript/parsing-urls-with-the-dom/\n *\n * @function\n * @param {string} url The URL to be parsed.\n * @description Normalizes and parses a URL.\n * @returns {object} Returns the normalized URL as a dictionary.\n *\n *   | member name   | Description    |\n *   |---------------|----------------|\n *   | href          | A normalized version of the provided URL if it was not an absolute URL |\n *   | protocol      | The protocol including the trailing colon                              |\n *   | host          | The host and port (if the port is non-default) of the normalizedUrl    |\n *   | search        | The search params, minus the question mark                             |\n *   | hash          | The hash string, minus the hash symbol\n *   | hostname      | The hostname\n *   | port          | The port, without \":\"\n *   | pathname      | The pathname, beginning with \"/\"\n *\n */\nfunction urlResolve(url) {\n  var href = url;\n  if (msie) {\n    // Normalize before parse.  Refer Implementation Notes on why this is\n    // done in two steps on IE.\n    urlParsingNode.setAttribute(\"href\", href);\n    href = urlParsingNode.href;\n  }\n\n  urlParsingNode.setAttribute('href', href);\n\n  // $$urlParsingNode provides the UrlUtils interface - http://url.spec.whatwg.org/#urlutils\n  return {\n    href: urlParsingNode.href,\n    protocol: urlParsingNode.protocol ? urlParsingNode.protocol.replace(/:$/, '') : '',\n    host: urlParsingNode.host,\n    search: urlParsingNode.search ? urlParsingNode.search.replace(/^\\?/, '') : '',\n    hash: urlParsingNode.hash ? urlParsingNode.hash.replace(/^#/, '') : '',\n    hostname: urlParsingNode.hostname,\n    port: urlParsingNode.port,\n    pathname: urlParsingNode.pathname && urlParsingNode.pathname.charAt(0) === '/' ?\n        urlParsingNode.pathname : '/' + urlParsingNode.pathname\n  };\n}\n\n\n/**\n * Parse a request URL and determine whether this is a same-origin request as the application document.\n *\n * @param {string|object} requestUrl The url of the request as a string that will be resolved\n * or a parsed URL object.\n * @returns {boolean} Whether the request is for the same origin as the application document.\n */\nfunction urlIsSameOrigin(requestUrl) {\n  var parsed = (isString(requestUrl)) ? urlResolve(requestUrl) : requestUrl;\n  return (parsed.protocol === originUrl.protocol &&\n          parsed.host === originUrl.host);\n}\n\n/**\n * @ngdoc object\n * @name ng.$window\n *\n * @description\n * A reference to the browser's `window` object. While `window`\n * is globally available in JavaScript, it causes testability problems, because\n * it is a global variable. In angular we always refer to it through the\n * `$window` service, so it may be overridden, removed or mocked for testing.\n *\n * Expressions, like the one defined for the `ngClick` directive in the example\n * below, are evaluated with respect to the current scope.  Therefore, there is\n * no risk of inadvertently coding in a dependency on a global value in such an\n * expression.\n *\n * @example\n   <doc:example>\n     <doc:source>\n       <script>\n         function Ctrl($scope, $window) {\n           $scope.$window = $window;\n           $scope.greeting = 'Hello, World!';\n         }\n       </script>\n       <div ng-controller=\"Ctrl\">\n         <input type=\"text\" ng-model=\"greeting\" />\n         <button ng-click=\"$window.alert(greeting)\">ALERT</button>\n       </div>\n     </doc:source>\n     <doc:scenario>\n      it('should display the greeting in the input box', function() {\n       input('greeting').enter('Hello, E2E Tests');\n       // If we click the button it will block the test runner\n       // element(':button').click();\n      });\n     </doc:scenario>\n   </doc:example>\n */\nfunction $WindowProvider(){\n  this.$get = valueFn(window);\n}\n\n/**\n * @ngdoc object\n * @name ng.$filterProvider\n * @description\n *\n * Filters are just functions which transform input to an output. However filters need to be\n * Dependency Injected. To achieve this a filter definition consists of a factory function which is\n * annotated with dependencies and is responsible for creating a filter function.\n *\n * <pre>\n *   // Filter registration\n *   function MyModule($provide, $filterProvider) {\n *     // create a service to demonstrate injection (not always needed)\n *     $provide.value('greet', function(name){\n *       return 'Hello ' + name + '!';\n *     });\n *\n *     // register a filter factory which uses the\n *     // greet service to demonstrate DI.\n *     $filterProvider.register('greet', function(greet){\n *       // return the filter function which uses the greet service\n *       // to generate salutation\n *       return function(text) {\n *         // filters need to be forgiving so check input validity\n *         return text && greet(text) || text;\n *       };\n *     });\n *   }\n * </pre>\n *\n * The filter function is registered with the `$injector` under the filter name suffix with\n * `Filter`.\n * \n * <pre>\n *   it('should be the same instance', inject(\n *     function($filterProvider) {\n *       $filterProvider.register('reverse', function(){\n *         return ...;\n *       });\n *     },\n *     function($filter, reverseFilter) {\n *       expect($filter('reverse')).toBe(reverseFilter);\n *     });\n * </pre>\n *\n *\n * For more information about how angular filters work, and how to create your own filters, see\n * {@link guide/filter Filters} in the Angular Developer Guide.\n */\n/**\n * @ngdoc method\n * @name ng.$filterProvider#register\n * @methodOf ng.$filterProvider\n * @description\n * Register filter factory function.\n *\n * @param {String} name Name of the filter.\n * @param {function} fn The filter factory function which is injectable.\n */\n\n\n/**\n * @ngdoc function\n * @name ng.$filter\n * @function\n * @description\n * Filters are used for formatting data displayed to the user.\n *\n * The general syntax in templates is as follows:\n *\n *         {{ expression [| filter_name[:parameter_value] ... ] }}\n *\n * @param {String} name Name of the filter function to retrieve\n * @return {Function} the filter function\n */\n$FilterProvider.$inject = ['$provide'];\nfunction $FilterProvider($provide) {\n  var suffix = 'Filter';\n\n  /**\n   * @ngdoc function\n   * @name ng.$controllerProvider#register\n   * @methodOf ng.$controllerProvider\n   * @param {string|Object} name Name of the filter function, or an object map of filters where\n   *    the keys are the filter names and the values are the filter factories.\n   * @returns {Object} Registered filter instance, or if a map of filters was provided then a map\n   *    of the registered filter instances.\n   */\n  function register(name, factory) {\n    if(isObject(name)) {\n      var filters = {};\n      forEach(name, function(filter, key) {\n        filters[key] = register(key, filter);\n      });\n      return filters;\n    } else {\n      return $provide.factory(name + suffix, factory);\n    }\n  }\n  this.register = register;\n\n  this.$get = ['$injector', function($injector) {\n    return function(name) {\n      return $injector.get(name + suffix);\n    };\n  }];\n\n  ////////////////////////////////////////\n  \n  /* global\n    currencyFilter: false,\n    dateFilter: false,\n    filterFilter: false,\n    jsonFilter: false,\n    limitToFilter: false,\n    lowercaseFilter: false,\n    numberFilter: false,\n    orderByFilter: false,\n    uppercaseFilter: false,\n  */\n\n  register('currency', currencyFilter);\n  register('date', dateFilter);\n  register('filter', filterFilter);\n  register('json', jsonFilter);\n  register('limitTo', limitToFilter);\n  register('lowercase', lowercaseFilter);\n  register('number', numberFilter);\n  register('orderBy', orderByFilter);\n  register('uppercase', uppercaseFilter);\n}\n\n/**\n * @ngdoc filter\n * @name ng.filter:filter\n * @function\n *\n * @description\n * Selects a subset of items from `array` and returns it as a new array.\n *\n * @param {Array} array The source array.\n * @param {string|Object|function()} expression The predicate to be used for selecting items from\n *   `array`.\n *\n *   Can be one of:\n *\n *   - `string`: Predicate that results in a substring match using the value of `expression`\n *     string. All strings or objects with string properties in `array` that contain this string\n *     will be returned. The predicate can be negated by prefixing the string with `!`.\n *\n *   - `Object`: A pattern object can be used to filter specific properties on objects contained\n *     by `array`. For example `{name:\"M\", phone:\"1\"}` predicate will return an array of items\n *     which have property `name` containing \"M\" and property `phone` containing \"1\". A special\n *     property name `$` can be used (as in `{$:\"text\"}`) to accept a match against any\n *     property of the object. That's equivalent to the simple substring match with a `string`\n *     as described above.\n *\n *   - `function`: A predicate function can be used to write arbitrary filters. The function is\n *     called for each element of `array`. The final result is an array of those elements that\n *     the predicate returned true for.\n *\n * @param {function(expected, actual)|true|undefined} comparator Comparator which is used in\n *     determining if the expected value (from the filter expression) and actual value (from\n *     the object in the array) should be considered a match.\n *\n *   Can be one of:\n *\n *     - `function(expected, actual)`:\n *       The function will be given the object value and the predicate value to compare and\n *       should return true if the item should be included in filtered result.\n *\n *     - `true`: A shorthand for `function(expected, actual) { return angular.equals(expected, actual)}`.\n *       this is essentially strict comparison of expected and actual.\n *\n *     - `false|undefined`: A short hand for a function which will look for a substring match in case\n *       insensitive way.\n *\n * @example\n   <doc:example>\n     <doc:source>\n       <div ng-init=\"friends = [{name:'John', phone:'555-1276'},\n                                {name:'Mary', phone:'800-BIG-MARY'},\n                                {name:'Mike', phone:'555-4321'},\n                                {name:'Adam', phone:'555-5678'},\n                                {name:'Julie', phone:'555-8765'},\n                                {name:'Juliette', phone:'555-5678'}]\"></div>\n\n       Search: <input ng-model=\"searchText\">\n       <table id=\"searchTextResults\">\n         <tr><th>Name</th><th>Phone</th></tr>\n         <tr ng-repeat=\"friend in friends | filter:searchText\">\n           <td>{{friend.name}}</td>\n           <td>{{friend.phone}}</td>\n         </tr>\n       </table>\n       <hr>\n       Any: <input ng-model=\"search.$\"> <br>\n       Name only <input ng-model=\"search.name\"><br>\n       Phone only <input ng-model=\"search.phone\"><br>\n       Equality <input type=\"checkbox\" ng-model=\"strict\"><br>\n       <table id=\"searchObjResults\">\n         <tr><th>Name</th><th>Phone</th></tr>\n         <tr ng-repeat=\"friend in friends | filter:search:strict\">\n           <td>{{friend.name}}</td>\n           <td>{{friend.phone}}</td>\n         </tr>\n       </table>\n     </doc:source>\n     <doc:scenario>\n       it('should search across all fields when filtering with a string', function() {\n         input('searchText').enter('m');\n         expect(repeater('#searchTextResults tr', 'friend in friends').column('friend.name')).\n           toEqual(['Mary', 'Mike', 'Adam']);\n\n         input('searchText').enter('76');\n         expect(repeater('#searchTextResults tr', 'friend in friends').column('friend.name')).\n           toEqual(['John', 'Julie']);\n       });\n\n       it('should search in specific fields when filtering with a predicate object', function() {\n         input('search.$').enter('i');\n         expect(repeater('#searchObjResults tr', 'friend in friends').column('friend.name')).\n           toEqual(['Mary', 'Mike', 'Julie', 'Juliette']);\n       });\n       it('should use a equal comparison when comparator is true', function() {\n         input('search.name').enter('Julie');\n         input('strict').check();\n         expect(repeater('#searchObjResults tr', 'friend in friends').column('friend.name')).\n           toEqual(['Julie']);\n       });\n     </doc:scenario>\n   </doc:example>\n */\nfunction filterFilter() {\n  return function(array, expression, comparator) {\n    if (!isArray(array)) return array;\n\n    var comparatorType = typeof(comparator),\n        predicates = [];\n\n    predicates.check = function(value) {\n      for (var j = 0; j < predicates.length; j++) {\n        if(!predicates[j](value)) {\n          return false;\n        }\n      }\n      return true;\n    };\n\n    if (comparatorType !== 'function') {\n      if (comparatorType === 'boolean' && comparator) {\n        comparator = function(obj, text) {\n          return angular.equals(obj, text);\n        };\n      } else {\n        comparator = function(obj, text) {\n          text = (''+text).toLowerCase();\n          return (''+obj).toLowerCase().indexOf(text) > -1;\n        };\n      }\n    }\n\n    var search = function(obj, text){\n      if (typeof text == 'string' && text.charAt(0) === '!') {\n        return !search(obj, text.substr(1));\n      }\n      switch (typeof obj) {\n        case \"boolean\":\n        case \"number\":\n        case \"string\":\n          return comparator(obj, text);\n        case \"object\":\n          switch (typeof text) {\n            case \"object\":\n              return comparator(obj, text);\n            default:\n              for ( var objKey in obj) {\n                if (objKey.charAt(0) !== '$' && search(obj[objKey], text)) {\n                  return true;\n                }\n              }\n              break;\n          }\n          return false;\n        case \"array\":\n          for ( var i = 0; i < obj.length; i++) {\n            if (search(obj[i], text)) {\n              return true;\n            }\n          }\n          return false;\n        default:\n          return false;\n      }\n    };\n    switch (typeof expression) {\n      case \"boolean\":\n      case \"number\":\n      case \"string\":\n        // Set up expression object and fall through\n        expression = {$:expression};\n        // jshint -W086\n      case \"object\":\n        // jshint +W086\n        for (var key in expression) {\n          if (key == '$') {\n            (function() {\n              if (!expression[key]) return;\n              var path = key;\n              predicates.push(function(value) {\n                return search(value, expression[path]);\n              });\n            })();\n          } else {\n            (function() {\n              if (typeof(expression[key]) == 'undefined') { return; }\n              var path = key;\n              predicates.push(function(value) {\n                return search(getter(value,path), expression[path]);\n              });\n            })();\n          }\n        }\n        break;\n      case 'function':\n        predicates.push(expression);\n        break;\n      default:\n        return array;\n    }\n    var filtered = [];\n    for ( var j = 0; j < array.length; j++) {\n      var value = array[j];\n      if (predicates.check(value)) {\n        filtered.push(value);\n      }\n    }\n    return filtered;\n  };\n}\n\n/**\n * @ngdoc filter\n * @name ng.filter:currency\n * @function\n *\n * @description\n * Formats a number as a currency (ie $1,234.56). When no currency symbol is provided, default\n * symbol for current locale is used.\n *\n * @param {number} amount Input to filter.\n * @param {string=} symbol Currency symbol or identifier to be displayed.\n * @returns {string} Formatted number.\n *\n *\n * @example\n   <doc:example>\n     <doc:source>\n       <script>\n         function Ctrl($scope) {\n           $scope.amount = 1234.56;\n         }\n       </script>\n       <div ng-controller=\"Ctrl\">\n         <input type=\"number\" ng-model=\"amount\"> <br>\n         default currency symbol ($): {{amount | currency}}<br>\n         custom currency identifier (USD$): {{amount | currency:\"USD$\"}}\n       </div>\n     </doc:source>\n     <doc:scenario>\n       it('should init with 1234.56', function() {\n         expect(binding('amount | currency')).toBe('$1,234.56');\n         expect(binding('amount | currency:\"USD$\"')).toBe('USD$1,234.56');\n       });\n       it('should update', function() {\n         input('amount').enter('-1234');\n         expect(binding('amount | currency')).toBe('($1,234.00)');\n         expect(binding('amount | currency:\"USD$\"')).toBe('(USD$1,234.00)');\n       });\n     </doc:scenario>\n   </doc:example>\n */\ncurrencyFilter.$inject = ['$locale'];\nfunction currencyFilter($locale) {\n  var formats = $locale.NUMBER_FORMATS;\n  return function(amount, currencySymbol){\n    if (isUndefined(currencySymbol)) currencySymbol = formats.CURRENCY_SYM;\n    return formatNumber(amount, formats.PATTERNS[1], formats.GROUP_SEP, formats.DECIMAL_SEP, 2).\n                replace(/\\u00A4/g, currencySymbol);\n  };\n}\n\n/**\n * @ngdoc filter\n * @name ng.filter:number\n * @function\n *\n * @description\n * Formats a number as text.\n *\n * If the input is not a number an empty string is returned.\n *\n * @param {number|string} number Number to format.\n * @param {(number|string)=} fractionSize Number of decimal places to round the number to.\n * If this is not provided then the fraction size is computed from the current locale's number\n * formatting pattern. In the case of the default locale, it will be 3.\n * @returns {string} Number rounded to decimalPlaces and places a “,” after each third digit.\n *\n * @example\n   <doc:example>\n     <doc:source>\n       <script>\n         function Ctrl($scope) {\n           $scope.val = 1234.56789;\n         }\n       </script>\n       <div ng-controller=\"Ctrl\">\n         Enter number: <input ng-model='val'><br>\n         Default formatting: {{val | number}}<br>\n         No fractions: {{val | number:0}}<br>\n         Negative number: {{-val | number:4}}\n       </div>\n     </doc:source>\n     <doc:scenario>\n       it('should format numbers', function() {\n         expect(binding('val | number')).toBe('1,234.568');\n         expect(binding('val | number:0')).toBe('1,235');\n         expect(binding('-val | number:4')).toBe('-1,234.5679');\n       });\n\n       it('should update', function() {\n         input('val').enter('3374.333');\n         expect(binding('val | number')).toBe('3,374.333');\n         expect(binding('val | number:0')).toBe('3,374');\n         expect(binding('-val | number:4')).toBe('-3,374.3330');\n       });\n     </doc:scenario>\n   </doc:example>\n */\n\n\nnumberFilter.$inject = ['$locale'];\nfunction numberFilter($locale) {\n  var formats = $locale.NUMBER_FORMATS;\n  return function(number, fractionSize) {\n    return formatNumber(number, formats.PATTERNS[0], formats.GROUP_SEP, formats.DECIMAL_SEP,\n      fractionSize);\n  };\n}\n\nvar DECIMAL_SEP = '.';\nfunction formatNumber(number, pattern, groupSep, decimalSep, fractionSize) {\n  if (isNaN(number) || !isFinite(number)) return '';\n\n  var isNegative = number < 0;\n  number = Math.abs(number);\n  var numStr = number + '',\n      formatedText = '',\n      parts = [];\n\n  var hasExponent = false;\n  if (numStr.indexOf('e') !== -1) {\n    var match = numStr.match(/([\\d\\.]+)e(-?)(\\d+)/);\n    if (match && match[2] == '-' && match[3] > fractionSize + 1) {\n      numStr = '0';\n    } else {\n      formatedText = numStr;\n      hasExponent = true;\n    }\n  }\n\n  if (!hasExponent) {\n    var fractionLen = (numStr.split(DECIMAL_SEP)[1] || '').length;\n\n    // determine fractionSize if it is not specified\n    if (isUndefined(fractionSize)) {\n      fractionSize = Math.min(Math.max(pattern.minFrac, fractionLen), pattern.maxFrac);\n    }\n\n    var pow = Math.pow(10, fractionSize);\n    number = Math.round(number * pow) / pow;\n    var fraction = ('' + number).split(DECIMAL_SEP);\n    var whole = fraction[0];\n    fraction = fraction[1] || '';\n\n    var i, pos = 0,\n        lgroup = pattern.lgSize,\n        group = pattern.gSize;\n\n    if (whole.length >= (lgroup + group)) {\n      pos = whole.length - lgroup;\n      for (i = 0; i < pos; i++) {\n        if ((pos - i)%group === 0 && i !== 0) {\n          formatedText += groupSep;\n        }\n        formatedText += whole.charAt(i);\n      }\n    }\n\n    for (i = pos; i < whole.length; i++) {\n      if ((whole.length - i)%lgroup === 0 && i !== 0) {\n        formatedText += groupSep;\n      }\n      formatedText += whole.charAt(i);\n    }\n\n    // format fraction part.\n    while(fraction.length < fractionSize) {\n      fraction += '0';\n    }\n\n    if (fractionSize && fractionSize !== \"0\") formatedText += decimalSep + fraction.substr(0, fractionSize);\n  } else {\n\n    if (fractionSize > 0 && number > -1 && number < 1) {\n      formatedText = number.toFixed(fractionSize);\n    }\n  }\n\n  parts.push(isNegative ? pattern.negPre : pattern.posPre);\n  parts.push(formatedText);\n  parts.push(isNegative ? pattern.negSuf : pattern.posSuf);\n  return parts.join('');\n}\n\nfunction padNumber(num, digits, trim) {\n  var neg = '';\n  if (num < 0) {\n    neg =  '-';\n    num = -num;\n  }\n  num = '' + num;\n  while(num.length < digits) num = '0' + num;\n  if (trim)\n    num = num.substr(num.length - digits);\n  return neg + num;\n}\n\n\nfunction dateGetter(name, size, offset, trim) {\n  offset = offset || 0;\n  return function(date) {\n    var value = date['get' + name]();\n    if (offset > 0 || value > -offset)\n      value += offset;\n    if (value === 0 && offset == -12 ) value = 12;\n    return padNumber(value, size, trim);\n  };\n}\n\nfunction dateStrGetter(name, shortForm) {\n  return function(date, formats) {\n    var value = date['get' + name]();\n    var get = uppercase(shortForm ? ('SHORT' + name) : name);\n\n    return formats[get][value];\n  };\n}\n\nfunction timeZoneGetter(date) {\n  var zone = -1 * date.getTimezoneOffset();\n  var paddedZone = (zone >= 0) ? \"+\" : \"\";\n\n  paddedZone += padNumber(Math[zone > 0 ? 'floor' : 'ceil'](zone / 60), 2) +\n                padNumber(Math.abs(zone % 60), 2);\n\n  return paddedZone;\n}\n\nfunction ampmGetter(date, formats) {\n  return date.getHours() < 12 ? formats.AMPMS[0] : formats.AMPMS[1];\n}\n\nvar DATE_FORMATS = {\n  yyyy: dateGetter('FullYear', 4),\n    yy: dateGetter('FullYear', 2, 0, true),\n     y: dateGetter('FullYear', 1),\n  MMMM: dateStrGetter('Month'),\n   MMM: dateStrGetter('Month', true),\n    MM: dateGetter('Month', 2, 1),\n     M: dateGetter('Month', 1, 1),\n    dd: dateGetter('Date', 2),\n     d: dateGetter('Date', 1),\n    HH: dateGetter('Hours', 2),\n     H: dateGetter('Hours', 1),\n    hh: dateGetter('Hours', 2, -12),\n     h: dateGetter('Hours', 1, -12),\n    mm: dateGetter('Minutes', 2),\n     m: dateGetter('Minutes', 1),\n    ss: dateGetter('Seconds', 2),\n     s: dateGetter('Seconds', 1),\n     // while ISO 8601 requires fractions to be prefixed with `.` or `,`\n     // we can be just safely rely on using `sss` since we currently don't support single or two digit fractions\n   sss: dateGetter('Milliseconds', 3),\n  EEEE: dateStrGetter('Day'),\n   EEE: dateStrGetter('Day', true),\n     a: ampmGetter,\n     Z: timeZoneGetter\n};\n\nvar DATE_FORMATS_SPLIT = /((?:[^yMdHhmsaZE']+)|(?:'(?:[^']|'')*')|(?:E+|y+|M+|d+|H+|h+|m+|s+|a|Z))(.*)/,\n    NUMBER_STRING = /^\\-?\\d+$/;\n\n/**\n * @ngdoc filter\n * @name ng.filter:date\n * @function\n *\n * @description\n *   Formats `date` to a string based on the requested `format`.\n *\n *   `format` string can be composed of the following elements:\n *\n *   * `'yyyy'`: 4 digit representation of year (e.g. AD 1 => 0001, AD 2010 => 2010)\n *   * `'yy'`: 2 digit representation of year, padded (00-99). (e.g. AD 2001 => 01, AD 2010 => 10)\n *   * `'y'`: 1 digit representation of year, e.g. (AD 1 => 1, AD 199 => 199)\n *   * `'MMMM'`: Month in year (January-December)\n *   * `'MMM'`: Month in year (Jan-Dec)\n *   * `'MM'`: Month in year, padded (01-12)\n *   * `'M'`: Month in year (1-12)\n *   * `'dd'`: Day in month, padded (01-31)\n *   * `'d'`: Day in month (1-31)\n *   * `'EEEE'`: Day in Week,(Sunday-Saturday)\n *   * `'EEE'`: Day in Week, (Sun-Sat)\n *   * `'HH'`: Hour in day, padded (00-23)\n *   * `'H'`: Hour in day (0-23)\n *   * `'hh'`: Hour in am/pm, padded (01-12)\n *   * `'h'`: Hour in am/pm, (1-12)\n *   * `'mm'`: Minute in hour, padded (00-59)\n *   * `'m'`: Minute in hour (0-59)\n *   * `'ss'`: Second in minute, padded (00-59)\n *   * `'s'`: Second in minute (0-59)\n *   * `'.sss' or ',sss'`: Millisecond in second, padded (000-999)\n *   * `'a'`: am/pm marker\n *   * `'Z'`: 4 digit (+sign) representation of the timezone offset (-1200-+1200)\n *\n *   `format` string can also be one of the following predefined\n *   {@link guide/i18n localizable formats}:\n *\n *   * `'medium'`: equivalent to `'MMM d, y h:mm:ss a'` for en_US locale\n *     (e.g. Sep 3, 2010 12:05:08 pm)\n *   * `'short'`: equivalent to `'M/d/yy h:mm a'` for en_US  locale (e.g. 9/3/10 12:05 pm)\n *   * `'fullDate'`: equivalent to `'EEEE, MMMM d,y'` for en_US  locale\n *     (e.g. Friday, September 3, 2010)\n *   * `'longDate'`: equivalent to `'MMMM d, y'` for en_US  locale (e.g. September 3, 2010)\n *   * `'mediumDate'`: equivalent to `'MMM d, y'` for en_US  locale (e.g. Sep 3, 2010)\n *   * `'shortDate'`: equivalent to `'M/d/yy'` for en_US locale (e.g. 9/3/10)\n *   * `'mediumTime'`: equivalent to `'h:mm:ss a'` for en_US locale (e.g. 12:05:08 pm)\n *   * `'shortTime'`: equivalent to `'h:mm a'` for en_US locale (e.g. 12:05 pm)\n *\n *   `format` string can contain literal values. These need to be quoted with single quotes (e.g.\n *   `\"h 'in the morning'\"`). In order to output single quote, use two single quotes in a sequence\n *   (e.g. `\"h 'o''clock'\"`).\n *\n * @param {(Date|number|string)} date Date to format either as Date object, milliseconds (string or\n *    number) or various ISO 8601 datetime string formats (e.g. yyyy-MM-ddTHH:mm:ss.SSSZ and its\n *    shorter versions like yyyy-MM-ddTHH:mmZ, yyyy-MM-dd or yyyyMMddTHHmmssZ). If no timezone is\n *    specified in the string input, the time is considered to be in the local timezone.\n * @param {string=} format Formatting rules (see Description). If not specified,\n *    `mediumDate` is used.\n * @returns {string} Formatted string or the input if input is not recognized as date/millis.\n *\n * @example\n   <doc:example>\n     <doc:source>\n       <span ng-non-bindable>{{1288323623006 | date:'medium'}}</span>:\n           {{1288323623006 | date:'medium'}}<br>\n       <span ng-non-bindable>{{1288323623006 | date:'yyyy-MM-dd HH:mm:ss Z'}}</span>:\n          {{1288323623006 | date:'yyyy-MM-dd HH:mm:ss Z'}}<br>\n       <span ng-non-bindable>{{1288323623006 | date:'MM/dd/yyyy @ h:mma'}}</span>:\n          {{'1288323623006' | date:'MM/dd/yyyy @ h:mma'}}<br>\n     </doc:source>\n     <doc:scenario>\n       it('should format date', function() {\n         expect(binding(\"1288323623006 | date:'medium'\")).\n            toMatch(/Oct 2\\d, 2010 \\d{1,2}:\\d{2}:\\d{2} (AM|PM)/);\n         expect(binding(\"1288323623006 | date:'yyyy-MM-dd HH:mm:ss Z'\")).\n            toMatch(/2010\\-10\\-2\\d \\d{2}:\\d{2}:\\d{2} (\\-|\\+)?\\d{4}/);\n         expect(binding(\"'1288323623006' | date:'MM/dd/yyyy @ h:mma'\")).\n            toMatch(/10\\/2\\d\\/2010 @ \\d{1,2}:\\d{2}(AM|PM)/);\n       });\n     </doc:scenario>\n   </doc:example>\n */\ndateFilter.$inject = ['$locale'];\nfunction dateFilter($locale) {\n\n\n  var R_ISO8601_STR = /^(\\d{4})-?(\\d\\d)-?(\\d\\d)(?:T(\\d\\d)(?::?(\\d\\d)(?::?(\\d\\d)(?:\\.(\\d+))?)?)?(Z|([+-])(\\d\\d):?(\\d\\d))?)?$/;\n                     // 1        2       3         4          5          6          7          8  9     10      11\n  function jsonStringToDate(string) {\n    var match;\n    if (match = string.match(R_ISO8601_STR)) {\n      var date = new Date(0),\n          tzHour = 0,\n          tzMin  = 0,\n          dateSetter = match[8] ? date.setUTCFullYear : date.setFullYear,\n          timeSetter = match[8] ? date.setUTCHours : date.setHours;\n\n      if (match[9]) {\n        tzHour = int(match[9] + match[10]);\n        tzMin = int(match[9] + match[11]);\n      }\n      dateSetter.call(date, int(match[1]), int(match[2]) - 1, int(match[3]));\n      var h = int(match[4]||0) - tzHour;\n      var m = int(match[5]||0) - tzMin;\n      var s = int(match[6]||0);\n      var ms = Math.round(parseFloat('0.' + (match[7]||0)) * 1000);\n      timeSetter.call(date, h, m, s, ms);\n      return date;\n    }\n    return string;\n  }\n\n\n  return function(date, format) {\n    var text = '',\n        parts = [],\n        fn, match;\n\n    format = format || 'mediumDate';\n    format = $locale.DATETIME_FORMATS[format] || format;\n    if (isString(date)) {\n      if (NUMBER_STRING.test(date)) {\n        date = int(date);\n      } else {\n        date = jsonStringToDate(date);\n      }\n    }\n\n    if (isNumber(date)) {\n      date = new Date(date);\n    }\n\n    if (!isDate(date)) {\n      return date;\n    }\n\n    while(format) {\n      match = DATE_FORMATS_SPLIT.exec(format);\n      if (match) {\n        parts = concat(parts, match, 1);\n        format = parts.pop();\n      } else {\n        parts.push(format);\n        format = null;\n      }\n    }\n\n    forEach(parts, function(value){\n      fn = DATE_FORMATS[value];\n      text += fn ? fn(date, $locale.DATETIME_FORMATS)\n                 : value.replace(/(^'|'$)/g, '').replace(/''/g, \"'\");\n    });\n\n    return text;\n  };\n}\n\n\n/**\n * @ngdoc filter\n * @name ng.filter:json\n * @function\n *\n * @description\n *   Allows you to convert a JavaScript object into JSON string.\n *\n *   This filter is mostly useful for debugging. When using the double curly {{value}} notation\n *   the binding is automatically converted to JSON.\n *\n * @param {*} object Any JavaScript object (including arrays and primitive types) to filter.\n * @returns {string} JSON string.\n *\n *\n * @example:\n   <doc:example>\n     <doc:source>\n       <pre>{{ {'name':'value'} | json }}</pre>\n     </doc:source>\n     <doc:scenario>\n       it('should jsonify filtered objects', function() {\n         expect(binding(\"{'name':'value'}\")).toMatch(/\\{\\n  \"name\": ?\"value\"\\n}/);\n       });\n     </doc:scenario>\n   </doc:example>\n *\n */\nfunction jsonFilter() {\n  return function(object) {\n    return toJson(object, true);\n  };\n}\n\n\n/**\n * @ngdoc filter\n * @name ng.filter:lowercase\n * @function\n * @description\n * Converts string to lowercase.\n * @see angular.lowercase\n */\nvar lowercaseFilter = valueFn(lowercase);\n\n\n/**\n * @ngdoc filter\n * @name ng.filter:uppercase\n * @function\n * @description\n * Converts string to uppercase.\n * @see angular.uppercase\n */\nvar uppercaseFilter = valueFn(uppercase);\n\n/**\n * @ngdoc function\n * @name ng.filter:limitTo\n * @function\n *\n * @description\n * Creates a new array or string containing only a specified number of elements. The elements\n * are taken from either the beginning or the end of the source array or string, as specified by\n * the value and sign (positive or negative) of `limit`.\n *\n * @param {Array|string} input Source array or string to be limited.\n * @param {string|number} limit The length of the returned array or string. If the `limit` number \n *     is positive, `limit` number of items from the beginning of the source array/string are copied.\n *     If the number is negative, `limit` number  of items from the end of the source array/string \n *     are copied. The `limit` will be trimmed if it exceeds `array.length`\n * @returns {Array|string} A new sub-array or substring of length `limit` or less if input array\n *     had less than `limit` elements.\n *\n * @example\n   <doc:example>\n     <doc:source>\n       <script>\n         function Ctrl($scope) {\n           $scope.numbers = [1,2,3,4,5,6,7,8,9];\n           $scope.letters = \"abcdefghi\";\n           $scope.numLimit = 3;\n           $scope.letterLimit = 3;\n         }\n       </script>\n       <div ng-controller=\"Ctrl\">\n         Limit {{numbers}} to: <input type=\"integer\" ng-model=\"numLimit\">\n         <p>Output numbers: {{ numbers | limitTo:numLimit }}</p>\n         Limit {{letters}} to: <input type=\"integer\" ng-model=\"letterLimit\">\n         <p>Output letters: {{ letters | limitTo:letterLimit }}</p>\n       </div>\n     </doc:source>\n     <doc:scenario>\n       it('should limit the number array to first three items', function() {\n         expect(element('.doc-example-live input[ng-model=numLimit]').val()).toBe('3');\n         expect(element('.doc-example-live input[ng-model=letterLimit]').val()).toBe('3');\n         expect(binding('numbers | limitTo:numLimit')).toEqual('[1,2,3]');\n         expect(binding('letters | limitTo:letterLimit')).toEqual('abc');\n       });\n\n       it('should update the output when -3 is entered', function() {\n         input('numLimit').enter(-3);\n         input('letterLimit').enter(-3);\n         expect(binding('numbers | limitTo:numLimit')).toEqual('[7,8,9]');\n         expect(binding('letters | limitTo:letterLimit')).toEqual('ghi');\n       });\n\n       it('should not exceed the maximum size of input array', function() {\n         input('numLimit').enter(100);\n         input('letterLimit').enter(100);\n         expect(binding('numbers | limitTo:numLimit')).toEqual('[1,2,3,4,5,6,7,8,9]');\n         expect(binding('letters | limitTo:letterLimit')).toEqual('abcdefghi');\n       });\n     </doc:scenario>\n   </doc:example>\n */\nfunction limitToFilter(){\n  return function(input, limit) {\n    if (!isArray(input) && !isString(input)) return input;\n    \n    limit = int(limit);\n\n    if (isString(input)) {\n      //NaN check on limit\n      if (limit) {\n        return limit >= 0 ? input.slice(0, limit) : input.slice(limit, input.length);\n      } else {\n        return \"\";\n      }\n    }\n\n    var out = [],\n      i, n;\n\n    // if abs(limit) exceeds maximum length, trim it\n    if (limit > input.length)\n      limit = input.length;\n    else if (limit < -input.length)\n      limit = -input.length;\n\n    if (limit > 0) {\n      i = 0;\n      n = limit;\n    } else {\n      i = input.length + limit;\n      n = input.length;\n    }\n\n    for (; i<n; i++) {\n      out.push(input[i]);\n    }\n\n    return out;\n  };\n}\n\n/**\n * @ngdoc function\n * @name ng.filter:orderBy\n * @function\n *\n * @description\n * Orders a specified `array` by the `expression` predicate.\n *\n * @param {Array} array The array to sort.\n * @param {function(*)|string|Array.<(function(*)|string)>} expression A predicate to be\n *    used by the comparator to determine the order of elements.\n *\n *    Can be one of:\n *\n *    - `function`: Getter function. The result of this function will be sorted using the\n *      `<`, `=`, `>` operator.\n *    - `string`: An Angular expression which evaluates to an object to order by, such as 'name'\n *      to sort by a property called 'name'. Optionally prefixed with `+` or `-` to control\n *      ascending or descending sort order (for example, +name or -name).\n *    - `Array`: An array of function or string predicates. The first predicate in the array\n *      is used for sorting, but when two items are equivalent, the next predicate is used.\n *\n * @param {boolean=} reverse Reverse the order the array.\n * @returns {Array} Sorted copy of the source array.\n *\n * @example\n   <doc:example>\n     <doc:source>\n       <script>\n         function Ctrl($scope) {\n           $scope.friends =\n               [{name:'John', phone:'555-1212', age:10},\n                {name:'Mary', phone:'555-9876', age:19},\n                {name:'Mike', phone:'555-4321', age:21},\n                {name:'Adam', phone:'555-5678', age:35},\n                {name:'Julie', phone:'555-8765', age:29}]\n           $scope.predicate = '-age';\n         }\n       </script>\n       <div ng-controller=\"Ctrl\">\n         <pre>Sorting predicate = {{predicate}}; reverse = {{reverse}}</pre>\n         <hr/>\n         [ <a href=\"\" ng-click=\"predicate=''\">unsorted</a> ]\n         <table class=\"friend\">\n           <tr>\n             <th><a href=\"\" ng-click=\"predicate = 'name'; reverse=false\">Name</a>\n                 (<a href=\"\" ng-click=\"predicate = '-name'; reverse=false\">^</a>)</th>\n             <th><a href=\"\" ng-click=\"predicate = 'phone'; reverse=!reverse\">Phone Number</a></th>\n             <th><a href=\"\" ng-click=\"predicate = 'age'; reverse=!reverse\">Age</a></th>\n           </tr>\n           <tr ng-repeat=\"friend in friends | orderBy:predicate:reverse\">\n             <td>{{friend.name}}</td>\n             <td>{{friend.phone}}</td>\n             <td>{{friend.age}}</td>\n           </tr>\n         </table>\n       </div>\n     </doc:source>\n     <doc:scenario>\n       it('should be reverse ordered by aged', function() {\n         expect(binding('predicate')).toBe('-age');\n         expect(repeater('table.friend', 'friend in friends').column('friend.age')).\n           toEqual(['35', '29', '21', '19', '10']);\n         expect(repeater('table.friend', 'friend in friends').column('friend.name')).\n           toEqual(['Adam', 'Julie', 'Mike', 'Mary', 'John']);\n       });\n\n       it('should reorder the table when user selects different predicate', function() {\n         element('.doc-example-live a:contains(\"Name\")').click();\n         expect(repeater('table.friend', 'friend in friends').column('friend.name')).\n           toEqual(['Adam', 'John', 'Julie', 'Mary', 'Mike']);\n         expect(repeater('table.friend', 'friend in friends').column('friend.age')).\n           toEqual(['35', '10', '29', '19', '21']);\n\n         element('.doc-example-live a:contains(\"Phone\")').click();\n         expect(repeater('table.friend', 'friend in friends').column('friend.phone')).\n           toEqual(['555-9876', '555-8765', '555-5678', '555-4321', '555-1212']);\n         expect(repeater('table.friend', 'friend in friends').column('friend.name')).\n           toEqual(['Mary', 'Julie', 'Adam', 'Mike', 'John']);\n       });\n     </doc:scenario>\n   </doc:example>\n */\norderByFilter.$inject = ['$parse'];\nfunction orderByFilter($parse){\n  return function(array, sortPredicate, reverseOrder) {\n    if (!isArray(array)) return array;\n    if (!sortPredicate) return array;\n    sortPredicate = isArray(sortPredicate) ? sortPredicate: [sortPredicate];\n    sortPredicate = map(sortPredicate, function(predicate){\n      var descending = false, get = predicate || identity;\n      if (isString(predicate)) {\n        if ((predicate.charAt(0) == '+' || predicate.charAt(0) == '-')) {\n          descending = predicate.charAt(0) == '-';\n          predicate = predicate.substring(1);\n        }\n        get = $parse(predicate);\n      }\n      return reverseComparator(function(a,b){\n        return compare(get(a),get(b));\n      }, descending);\n    });\n    var arrayCopy = [];\n    for ( var i = 0; i < array.length; i++) { arrayCopy.push(array[i]); }\n    return arrayCopy.sort(reverseComparator(comparator, reverseOrder));\n\n    function comparator(o1, o2){\n      for ( var i = 0; i < sortPredicate.length; i++) {\n        var comp = sortPredicate[i](o1, o2);\n        if (comp !== 0) return comp;\n      }\n      return 0;\n    }\n    function reverseComparator(comp, descending) {\n      return toBoolean(descending)\n          ? function(a,b){return comp(b,a);}\n          : comp;\n    }\n    function compare(v1, v2){\n      var t1 = typeof v1;\n      var t2 = typeof v2;\n      if (t1 == t2) {\n        if (t1 == \"string\") {\n           v1 = v1.toLowerCase();\n           v2 = v2.toLowerCase();\n        }\n        if (v1 === v2) return 0;\n        return v1 < v2 ? -1 : 1;\n      } else {\n        return t1 < t2 ? -1 : 1;\n      }\n    }\n  };\n}\n\nfunction ngDirective(directive) {\n  if (isFunction(directive)) {\n    directive = {\n      link: directive\n    };\n  }\n  directive.restrict = directive.restrict || 'AC';\n  return valueFn(directive);\n}\n\n/**\n * @ngdoc directive\n * @name ng.directive:a\n * @restrict E\n *\n * @description\n * Modifies the default behavior of the html A tag so that the default action is prevented when\n * the href attribute is empty.\n *\n * This change permits the easy creation of action links with the `ngClick` directive\n * without changing the location or causing page reloads, e.g.:\n * `<a href=\"\" ng-click=\"list.addItem()\">Add Item</a>`\n */\nvar htmlAnchorDirective = valueFn({\n  restrict: 'E',\n  compile: function(element, attr) {\n\n    if (msie <= 8) {\n\n      // turn <a href ng-click=\"..\">link</a> into a stylable link in IE\n      // but only if it doesn't have name attribute, in which case it's an anchor\n      if (!attr.href && !attr.name) {\n        attr.$set('href', '');\n      }\n\n      // add a comment node to anchors to workaround IE bug that causes element content to be reset\n      // to new attribute content if attribute is updated with value containing @ and element also\n      // contains value with @\n      // see issue #1949\n      element.append(document.createComment('IE fix'));\n    }\n\n    return function(scope, element) {\n      element.on('click', function(event){\n        // if we have no href url, then don't navigate anywhere.\n        if (!element.attr('href')) {\n          event.preventDefault();\n        }\n      });\n    };\n  }\n});\n\n/**\n * @ngdoc directive\n * @name ng.directive:ngHref\n * @restrict A\n *\n * @description\n * Using Angular markup like `{{hash}}` in an href attribute will\n * make the link go to the wrong URL if the user clicks it before\n * Angular has a chance to replace the `{{hash}}` markup with its\n * value. Until Angular replaces the markup the link will be broken\n * and will most likely return a 404 error.\n *\n * The `ngHref` directive solves this problem.\n *\n * The wrong way to write it:\n * <pre>\n * <a href=\"http://www.gravatar.com/avatar/{{hash}}\"/>\n * </pre>\n *\n * The correct way to write it:\n * <pre>\n * <a ng-href=\"http://www.gravatar.com/avatar/{{hash}}\"/>\n * </pre>\n *\n * @element A\n * @param {template} ngHref any string which can contain `{{}}` markup.\n *\n * @example\n * This example shows various combinations of `href`, `ng-href` and `ng-click` attributes\n * in links and their different behaviors:\n    <doc:example>\n      <doc:source>\n        <input ng-model=\"value\" /><br />\n        <a id=\"link-1\" href ng-click=\"value = 1\">link 1</a> (link, don't reload)<br />\n        <a id=\"link-2\" href=\"\" ng-click=\"value = 2\">link 2</a> (link, don't reload)<br />\n        <a id=\"link-3\" ng-href=\"/{{'123'}}\">link 3</a> (link, reload!)<br />\n        <a id=\"link-4\" href=\"\" name=\"xx\" ng-click=\"value = 4\">anchor</a> (link, don't reload)<br />\n        <a id=\"link-5\" name=\"xxx\" ng-click=\"value = 5\">anchor</a> (no link)<br />\n        <a id=\"link-6\" ng-href=\"{{value}}\">link</a> (link, change location)\n      </doc:source>\n      <doc:scenario>\n        it('should execute ng-click but not reload when href without value', function() {\n          element('#link-1').click();\n          expect(input('value').val()).toEqual('1');\n          expect(element('#link-1').attr('href')).toBe(\"\");\n        });\n\n        it('should execute ng-click but not reload when href empty string', function() {\n          element('#link-2').click();\n          expect(input('value').val()).toEqual('2');\n          expect(element('#link-2').attr('href')).toBe(\"\");\n        });\n\n        it('should execute ng-click and change url when ng-href specified', function() {\n          expect(element('#link-3').attr('href')).toBe(\"/123\");\n\n          element('#link-3').click();\n          expect(browser().window().path()).toEqual('/123');\n        });\n\n        it('should execute ng-click but not reload when href empty string and name specified', function() {\n          element('#link-4').click();\n          expect(input('value').val()).toEqual('4');\n          expect(element('#link-4').attr('href')).toBe('');\n        });\n\n        it('should execute ng-click but not reload when no href but name specified', function() {\n          element('#link-5').click();\n          expect(input('value').val()).toEqual('5');\n          expect(element('#link-5').attr('href')).toBe(undefined);\n        });\n\n        it('should only change url when only ng-href', function() {\n          input('value').enter('6');\n          expect(element('#link-6').attr('href')).toBe('6');\n\n          element('#link-6').click();\n          expect(browser().location().url()).toEqual('/6');\n        });\n      </doc:scenario>\n    </doc:example>\n */\n\n/**\n * @ngdoc directive\n * @name ng.directive:ngSrc\n * @restrict A\n *\n * @description\n * Using Angular markup like `{{hash}}` in a `src` attribute doesn't\n * work right: The browser will fetch from the URL with the literal\n * text `{{hash}}` until Angular replaces the expression inside\n * `{{hash}}`. The `ngSrc` directive solves this problem.\n *\n * The buggy way to write it:\n * <pre>\n * <img src=\"http://www.gravatar.com/avatar/{{hash}}\"/>\n * </pre>\n *\n * The correct way to write it:\n * <pre>\n * <img ng-src=\"http://www.gravatar.com/avatar/{{hash}}\"/>\n * </pre>\n *\n * @element IMG\n * @param {template} ngSrc any string which can contain `{{}}` markup.\n */\n\n/**\n * @ngdoc directive\n * @name ng.directive:ngSrcset\n * @restrict A\n *\n * @description\n * Using Angular markup like `{{hash}}` in a `srcset` attribute doesn't\n * work right: The browser will fetch from the URL with the literal\n * text `{{hash}}` until Angular replaces the expression inside\n * `{{hash}}`. The `ngSrcset` directive solves this problem.\n *\n * The buggy way to write it:\n * <pre>\n * <img srcset=\"http://www.gravatar.com/avatar/{{hash}} 2x\"/>\n * </pre>\n *\n * The correct way to write it:\n * <pre>\n * <img ng-srcset=\"http://www.gravatar.com/avatar/{{hash}} 2x\"/>\n * </pre>\n *\n * @element IMG\n * @param {template} ngSrcset any string which can contain `{{}}` markup.\n */\n\n/**\n * @ngdoc directive\n * @name ng.directive:ngDisabled\n * @restrict A\n *\n * @description\n *\n * The following markup will make the button enabled on Chrome/Firefox but not on IE8 and older IEs:\n * <pre>\n * <div ng-init=\"scope = { isDisabled: false }\">\n *  <button disabled=\"{{scope.isDisabled}}\">Disabled</button>\n * </div>\n * </pre>\n *\n * The HTML specification does not require browsers to preserve the values of boolean attributes\n * such as disabled. (Their presence means true and their absence means false.)\n * This prevents the Angular compiler from retrieving the binding expression.\n * The `ngDisabled` directive solves this problem for the `disabled` attribute.\n *\n * @example\n    <doc:example>\n      <doc:source>\n        Click me to toggle: <input type=\"checkbox\" ng-model=\"checked\"><br/>\n        <button ng-model=\"button\" ng-disabled=\"checked\">Button</button>\n      </doc:source>\n      <doc:scenario>\n        it('should toggle button', function() {\n          expect(element('.doc-example-live :button').prop('disabled')).toBeFalsy();\n          input('checked').check();\n          expect(element('.doc-example-live :button').prop('disabled')).toBeTruthy();\n        });\n      </doc:scenario>\n    </doc:example>\n *\n * @element INPUT\n * @param {expression} ngDisabled If the {@link guide/expression expression} is truthy, \n *     then special attribute \"disabled\" will be set on the element\n */\n\n\n/**\n * @ngdoc directive\n * @name ng.directive:ngChecked\n * @restrict A\n *\n * @description\n * The HTML specification does not require browsers to preserve the values of boolean attributes\n * such as checked. (Their presence means true and their absence means false.)\n * This prevents the Angular compiler from retrieving the binding expression.\n * The `ngChecked` directive solves this problem for the `checked` attribute.\n * @example\n    <doc:example>\n      <doc:source>\n        Check me to check both: <input type=\"checkbox\" ng-model=\"master\"><br/>\n        <input id=\"checkSlave\" type=\"checkbox\" ng-checked=\"master\">\n      </doc:source>\n      <doc:scenario>\n        it('should check both checkBoxes', function() {\n          expect(element('.doc-example-live #checkSlave').prop('checked')).toBeFalsy();\n          input('master').check();\n          expect(element('.doc-example-live #checkSlave').prop('checked')).toBeTruthy();\n        });\n      </doc:scenario>\n    </doc:example>\n *\n * @element INPUT\n * @param {expression} ngChecked If the {@link guide/expression expression} is truthy, \n *     then special attribute \"checked\" will be set on the element\n */\n\n\n/**\n * @ngdoc directive\n * @name ng.directive:ngReadonly\n * @restrict A\n *\n * @description\n * The HTML specification does not require browsers to preserve the values of boolean attributes\n * such as readonly. (Their presence means true and their absence means false.)\n * This prevents the Angular compiler from retrieving the binding expression.\n * The `ngReadonly` directive solves this problem for the `readonly` attribute.\n * @example\n    <doc:example>\n      <doc:source>\n        Check me to make text readonly: <input type=\"checkbox\" ng-model=\"checked\"><br/>\n        <input type=\"text\" ng-readonly=\"checked\" value=\"I'm Angular\"/>\n      </doc:source>\n      <doc:scenario>\n        it('should toggle readonly attr', function() {\n          expect(element('.doc-example-live :text').prop('readonly')).toBeFalsy();\n          input('checked').check();\n          expect(element('.doc-example-live :text').prop('readonly')).toBeTruthy();\n        });\n      </doc:scenario>\n    </doc:example>\n *\n * @element INPUT\n * @param {expression} ngReadonly If the {@link guide/expression expression} is truthy, \n *     then special attribute \"readonly\" will be set on the element\n */\n\n\n/**\n * @ngdoc directive\n * @name ng.directive:ngSelected\n * @restrict A\n *\n * @description\n * The HTML specification does not require browsers to preserve the values of boolean attributes\n * such as selected. (Their presence means true and their absence means false.)\n * This prevents the Angular compiler from retrieving the binding expression.\n * The `ngSelected` directive solves this problem for the `selected` atttribute.\n * @example\n    <doc:example>\n      <doc:source>\n        Check me to select: <input type=\"checkbox\" ng-model=\"selected\"><br/>\n        <select>\n          <option>Hello!</option>\n          <option id=\"greet\" ng-selected=\"selected\">Greetings!</option>\n        </select>\n      </doc:source>\n      <doc:scenario>\n        it('should select Greetings!', function() {\n          expect(element('.doc-example-live #greet').prop('selected')).toBeFalsy();\n          input('selected').check();\n          expect(element('.doc-example-live #greet').prop('selected')).toBeTruthy();\n        });\n      </doc:scenario>\n    </doc:example>\n *\n * @element OPTION\n * @param {expression} ngSelected If the {@link guide/expression expression} is truthy, \n *     then special attribute \"selected\" will be set on the element\n */\n\n/**\n * @ngdoc directive\n * @name ng.directive:ngOpen\n * @restrict A\n *\n * @description\n * The HTML specification does not require browsers to preserve the values of boolean attributes\n * such as open. (Their presence means true and their absence means false.)\n * This prevents the Angular compiler from retrieving the binding expression.\n * The `ngOpen` directive solves this problem for the `open` attribute.\n *\n * @example\n     <doc:example>\n       <doc:source>\n         Check me check multiple: <input type=\"checkbox\" ng-model=\"open\"><br/>\n         <details id=\"details\" ng-open=\"open\">\n            <summary>Show/Hide me</summary>\n         </details>\n       </doc:source>\n       <doc:scenario>\n         it('should toggle open', function() {\n           expect(element('#details').prop('open')).toBeFalsy();\n           input('open').check();\n           expect(element('#details').prop('open')).toBeTruthy();\n         });\n       </doc:scenario>\n     </doc:example>\n *\n * @element DETAILS\n * @param {expression} ngOpen If the {@link guide/expression expression} is truthy, \n *     then special attribute \"open\" will be set on the element\n */\n\nvar ngAttributeAliasDirectives = {};\n\n\n// boolean attrs are evaluated\nforEach(BOOLEAN_ATTR, function(propName, attrName) {\n  // binding to multiple is not supported\n  if (propName == \"multiple\") return;\n\n  var normalized = directiveNormalize('ng-' + attrName);\n  ngAttributeAliasDirectives[normalized] = function() {\n    return {\n      priority: 100,\n      compile: function() {\n        return function(scope, element, attr) {\n          scope.$watch(attr[normalized], function ngBooleanAttrWatchAction(value) {\n            attr.$set(attrName, !!value);\n          });\n        };\n      }\n    };\n  };\n});\n\n\n// ng-src, ng-srcset, ng-href are interpolated\nforEach(['src', 'srcset', 'href'], function(attrName) {\n  var normalized = directiveNormalize('ng-' + attrName);\n  ngAttributeAliasDirectives[normalized] = function() {\n    return {\n      priority: 99, // it needs to run after the attributes are interpolated\n      link: function(scope, element, attr) {\n        attr.$observe(normalized, function(value) {\n          if (!value)\n             return;\n\n          attr.$set(attrName, value);\n\n          // on IE, if \"ng:src\" directive declaration is used and \"src\" attribute doesn't exist\n          // then calling element.setAttribute('src', 'foo') doesn't do anything, so we need\n          // to set the property as well to achieve the desired effect.\n          // we use attr[attrName] value since $set can sanitize the url.\n          if (msie) element.prop(attrName, attr[attrName]);\n        });\n      }\n    };\n  };\n});\n\n/* global -nullFormCtrl */\nvar nullFormCtrl = {\n  $addControl: noop,\n  $removeControl: noop,\n  $setValidity: noop,\n  $setDirty: noop,\n  $setPristine: noop\n};\n\n/**\n * @ngdoc object\n * @name ng.directive:form.FormController\n *\n * @property {boolean} $pristine True if user has not interacted with the form yet.\n * @property {boolean} $dirty True if user has already interacted with the form.\n * @property {boolean} $valid True if all of the containing forms and controls are valid.\n * @property {boolean} $invalid True if at least one containing control or form is invalid.\n *\n * @property {Object} $error Is an object hash, containing references to all invalid controls or\n *  forms, where:\n *\n *  - keys are validation tokens (error names) — such as `required`, `url` or `email`),\n *  - values are arrays of controls or forms that are invalid with given error.\n *\n * @description\n * `FormController` keeps track of all its controls and nested forms as well as state of them,\n * such as being valid/invalid or dirty/pristine.\n *\n * Each {@link ng.directive:form form} directive creates an instance\n * of `FormController`.\n *\n */\n//asks for $scope to fool the BC controller module\nFormController.$inject = ['$element', '$attrs', '$scope'];\nfunction FormController(element, attrs) {\n  var form = this,\n      parentForm = element.parent().controller('form') || nullFormCtrl,\n      invalidCount = 0, // used to easily determine if we are valid\n      errors = form.$error = {},\n      controls = [];\n\n  // init state\n  form.$name = attrs.name || attrs.ngForm;\n  form.$dirty = false;\n  form.$pristine = true;\n  form.$valid = true;\n  form.$invalid = false;\n\n  parentForm.$addControl(form);\n\n  // Setup initial state of the control\n  element.addClass(PRISTINE_CLASS);\n  toggleValidCss(true);\n\n  // convenience method for easy toggling of classes\n  function toggleValidCss(isValid, validationErrorKey) {\n    validationErrorKey = validationErrorKey ? '-' + snake_case(validationErrorKey, '-') : '';\n    element.\n      removeClass((isValid ? INVALID_CLASS : VALID_CLASS) + validationErrorKey).\n      addClass((isValid ? VALID_CLASS : INVALID_CLASS) + validationErrorKey);\n  }\n\n  /**\n   * @ngdoc function\n   * @name ng.directive:form.FormController#$addControl\n   * @methodOf ng.directive:form.FormController\n   *\n   * @description\n   * Register a control with the form.\n   *\n   * Input elements using ngModelController do this automatically when they are linked.\n   */\n  form.$addControl = function(control) {\n    // Breaking change - before, inputs whose name was \"hasOwnProperty\" were quietly ignored\n    // and not added to the scope.  Now we throw an error.\n    assertNotHasOwnProperty(control.$name, 'input');\n    controls.push(control);\n\n    if (control.$name) {\n      form[control.$name] = control;\n    }\n  };\n\n  /**\n   * @ngdoc function\n   * @name ng.directive:form.FormController#$removeControl\n   * @methodOf ng.directive:form.FormController\n   *\n   * @description\n   * Deregister a control from the form.\n   *\n   * Input elements using ngModelController do this automatically when they are destroyed.\n   */\n  form.$removeControl = function(control) {\n    if (control.$name && form[control.$name] === control) {\n      delete form[control.$name];\n    }\n    forEach(errors, function(queue, validationToken) {\n      form.$setValidity(validationToken, true, control);\n    });\n\n    arrayRemove(controls, control);\n  };\n\n  /**\n   * @ngdoc function\n   * @name ng.directive:form.FormController#$setValidity\n   * @methodOf ng.directive:form.FormController\n   *\n   * @description\n   * Sets the validity of a form control.\n   *\n   * This method will also propagate to parent forms.\n   */\n  form.$setValidity = function(validationToken, isValid, control) {\n    var queue = errors[validationToken];\n\n    if (isValid) {\n      if (queue) {\n        arrayRemove(queue, control);\n        if (!queue.length) {\n          invalidCount--;\n          if (!invalidCount) {\n            toggleValidCss(isValid);\n            form.$valid = true;\n            form.$invalid = false;\n          }\n          errors[validationToken] = false;\n          toggleValidCss(true, validationToken);\n          parentForm.$setValidity(validationToken, true, form);\n        }\n      }\n\n    } else {\n      if (!invalidCount) {\n        toggleValidCss(isValid);\n      }\n      if (queue) {\n        if (includes(queue, control)) return;\n      } else {\n        errors[validationToken] = queue = [];\n        invalidCount++;\n        toggleValidCss(false, validationToken);\n        parentForm.$setValidity(validationToken, false, form);\n      }\n      queue.push(control);\n\n      form.$valid = false;\n      form.$invalid = true;\n    }\n  };\n\n  /**\n   * @ngdoc function\n   * @name ng.directive:form.FormController#$setDirty\n   * @methodOf ng.directive:form.FormController\n   *\n   * @description\n   * Sets the form to a dirty state.\n   *\n   * This method can be called to add the 'ng-dirty' class and set the form to a dirty\n   * state (ng-dirty class). This method will also propagate to parent forms.\n   */\n  form.$setDirty = function() {\n    element.removeClass(PRISTINE_CLASS).addClass(DIRTY_CLASS);\n    form.$dirty = true;\n    form.$pristine = false;\n    parentForm.$setDirty();\n  };\n\n  /**\n   * @ngdoc function\n   * @name ng.directive:form.FormController#$setPristine\n   * @methodOf ng.directive:form.FormController\n   *\n   * @description\n   * Sets the form to its pristine state.\n   *\n   * This method can be called to remove the 'ng-dirty' class and set the form to its pristine\n   * state (ng-pristine class). This method will also propagate to all the controls contained\n   * in this form.\n   *\n   * Setting a form back to a pristine state is often useful when we want to 'reuse' a form after\n   * saving or resetting it.\n   */\n  form.$setPristine = function () {\n    element.removeClass(DIRTY_CLASS).addClass(PRISTINE_CLASS);\n    form.$dirty = false;\n    form.$pristine = true;\n    forEach(controls, function(control) {\n      control.$setPristine();\n    });\n  };\n}\n\n\n/**\n * @ngdoc directive\n * @name ng.directive:ngForm\n * @restrict EAC\n *\n * @description\n * Nestable alias of {@link ng.directive:form `form`} directive. HTML\n * does not allow nesting of form elements. It is useful to nest forms, for example if the validity of a\n * sub-group of controls needs to be determined.\n *\n * @param {string=} ngForm|name Name of the form. If specified, the form controller will be published into\n *                       related scope, under this name.\n *\n */\n\n /**\n * @ngdoc directive\n * @name ng.directive:form\n * @restrict E\n *\n * @description\n * Directive that instantiates\n * {@link ng.directive:form.FormController FormController}.\n *\n * If the `name` attribute is specified, the form controller is published onto the current scope under\n * this name.\n *\n * # Alias: {@link ng.directive:ngForm `ngForm`}\n *\n * In Angular forms can be nested. This means that the outer form is valid when all of the child\n * forms are valid as well. However, browsers do not allow nesting of `<form>` elements, so\n * Angular provides the {@link ng.directive:ngForm `ngForm`} directive which behaves identically to\n * `<form>` but can be nested.  This allows you to have nested forms, which is very useful when\n * using Angular validation directives in forms that are dynamically generated using the\n * {@link ng.directive:ngRepeat `ngRepeat`} directive. Since you cannot dynamically generate the `name`\n * attribute of input elements using interpolation, you have to wrap each set of repeated inputs in an\n * `ngForm` directive and nest these in an outer `form` element.\n *\n *\n * # CSS classes\n *  - `ng-valid` Is set if the form is valid.\n *  - `ng-invalid` Is set if the form is invalid.\n *  - `ng-pristine` Is set if the form is pristine.\n *  - `ng-dirty` Is set if the form is dirty.\n *\n *\n * # Submitting a form and preventing the default action\n *\n * Since the role of forms in client-side Angular applications is different than in classical\n * roundtrip apps, it is desirable for the browser not to translate the form submission into a full\n * page reload that sends the data to the server. Instead some javascript logic should be triggered\n * to handle the form submission in an application-specific way.\n *\n * For this reason, Angular prevents the default action (form submission to the server) unless the\n * `<form>` element has an `action` attribute specified.\n *\n * You can use one of the following two ways to specify what javascript method should be called when\n * a form is submitted:\n *\n * - {@link ng.directive:ngSubmit ngSubmit} directive on the form element\n * - {@link ng.directive:ngClick ngClick} directive on the first\n  *  button or input field of type submit (input[type=submit])\n *\n * To prevent double execution of the handler, use only one of the {@link ng.directive:ngSubmit ngSubmit}\n * or {@link ng.directive:ngClick ngClick} directives.\n * This is because of the following form submission rules in the HTML specification:\n *\n * - If a form has only one input field then hitting enter in this field triggers form submit\n * (`ngSubmit`)\n * - if a form has 2+ input fields and no buttons or input[type=submit] then hitting enter\n * doesn't trigger submit\n * - if a form has one or more input fields and one or more buttons or input[type=submit] then\n * hitting enter in any of the input fields will trigger the click handler on the *first* button or\n * input[type=submit] (`ngClick`) *and* a submit handler on the enclosing form (`ngSubmit`)\n *\n * @param {string=} name Name of the form. If specified, the form controller will be published into\n *                       related scope, under this name.\n *\n * @example\n    <doc:example>\n      <doc:source>\n       <script>\n         function Ctrl($scope) {\n           $scope.userType = 'guest';\n         }\n       </script>\n       <form name=\"myForm\" ng-controller=\"Ctrl\">\n         userType: <input name=\"input\" ng-model=\"userType\" required>\n         <span class=\"error\" ng-show=\"myForm.input.$error.required\">Required!</span><br>\n         <tt>userType = {{userType}}</tt><br>\n         <tt>myForm.input.$valid = {{myForm.input.$valid}}</tt><br>\n         <tt>myForm.input.$error = {{myForm.input.$error}}</tt><br>\n         <tt>myForm.$valid = {{myForm.$valid}}</tt><br>\n         <tt>myForm.$error.required = {{!!myForm.$error.required}}</tt><br>\n        </form>\n      </doc:source>\n      <doc:scenario>\n        it('should initialize to model', function() {\n         expect(binding('userType')).toEqual('guest');\n         expect(binding('myForm.input.$valid')).toEqual('true');\n        });\n\n        it('should be invalid if empty', function() {\n         input('userType').enter('');\n         expect(binding('userType')).toEqual('');\n         expect(binding('myForm.input.$valid')).toEqual('false');\n        });\n      </doc:scenario>\n    </doc:example>\n */\nvar formDirectiveFactory = function(isNgForm) {\n  return ['$timeout', function($timeout) {\n    var formDirective = {\n      name: 'form',\n      restrict: isNgForm ? 'EAC' : 'E',\n      controller: FormController,\n      compile: function() {\n        return {\n          pre: function(scope, formElement, attr, controller) {\n            if (!attr.action) {\n              // we can't use jq events because if a form is destroyed during submission the default\n              // action is not prevented. see #1238\n              //\n              // IE 9 is not affected because it doesn't fire a submit event and try to do a full\n              // page reload if the form was destroyed by submission of the form via a click handler\n              // on a button in the form. Looks like an IE9 specific bug.\n              var preventDefaultListener = function(event) {\n                event.preventDefault\n                  ? event.preventDefault()\n                  : event.returnValue = false; // IE\n              };\n\n              addEventListenerFn(formElement[0], 'submit', preventDefaultListener);\n\n              // unregister the preventDefault listener so that we don't not leak memory but in a\n              // way that will achieve the prevention of the default action.\n              formElement.on('$destroy', function() {\n                $timeout(function() {\n                  removeEventListenerFn(formElement[0], 'submit', preventDefaultListener);\n                }, 0, false);\n              });\n            }\n\n            var parentFormCtrl = formElement.parent().controller('form'),\n                alias = attr.name || attr.ngForm;\n\n            if (alias) {\n              setter(scope, alias, controller, alias);\n            }\n            if (parentFormCtrl) {\n              formElement.on('$destroy', function() {\n                parentFormCtrl.$removeControl(controller);\n                if (alias) {\n                  setter(scope, alias, undefined, alias);\n                }\n                extend(controller, nullFormCtrl); //stop propagating child destruction handlers upwards\n              });\n            }\n          }\n        };\n      }\n    };\n\n    return formDirective;\n  }];\n};\n\nvar formDirective = formDirectiveFactory();\nvar ngFormDirective = formDirectiveFactory(true);\n\n/* global\n\n    -VALID_CLASS,\n    -INVALID_CLASS,\n    -PRISTINE_CLASS,\n    -DIRTY_CLASS\n*/\n\nvar URL_REGEXP = /^(ftp|http|https):\\/\\/(\\w+:{0,1}\\w*@)?(\\S+)(:[0-9]+)?(\\/|\\/([\\w#!:.?+=&%@!\\-\\/]))?$/;\nvar EMAIL_REGEXP = /^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,6}$/;\nvar NUMBER_REGEXP = /^\\s*(\\-|\\+)?(\\d+|(\\d*(\\.\\d*)))\\s*$/;\n\nvar inputType = {\n\n  /**\n   * @ngdoc inputType\n   * @name ng.directive:input.text\n   *\n   * @description\n   * Standard HTML text input with angular data binding.\n   *\n   * @param {string} ngModel Assignable angular expression to data-bind to.\n   * @param {string=} name Property name of the form under which the control is published.\n   * @param {string=} required Adds `required` validation error key if the value is not entered.\n   * @param {string=} ngRequired Adds `required` attribute and `required` validation constraint to\n   *    the element when the ngRequired expression evaluates to true. Use `ngRequired` instead of\n   *    `required` when you want to data-bind to the `required` attribute.\n   * @param {number=} ngMinlength Sets `minlength` validation error key if the value is shorter than\n   *    minlength.\n   * @param {number=} ngMaxlength Sets `maxlength` validation error key if the value is longer than\n   *    maxlength.\n   * @param {string=} ngPattern Sets `pattern` validation error key if the value does not match the\n   *    RegExp pattern expression. Expected value is `/regexp/` for inline patterns or `regexp` for\n   *    patterns defined as scope expressions.\n   * @param {string=} ngChange Angular expression to be executed when input changes due to user\n   *    interaction with the input element.\n   * @param {boolean=} [ngTrim=true] If set to false Angular will not automatically trim the input.\n   *\n   * @example\n      <doc:example>\n        <doc:source>\n         <script>\n           function Ctrl($scope) {\n             $scope.text = 'guest';\n             $scope.word = /^\\s*\\w*\\s*$/;\n           }\n         </script>\n         <form name=\"myForm\" ng-controller=\"Ctrl\">\n           Single word: <input type=\"text\" name=\"input\" ng-model=\"text\"\n                               ng-pattern=\"word\" required ng-trim=\"false\">\n           <span class=\"error\" ng-show=\"myForm.input.$error.required\">\n             Required!</span>\n           <span class=\"error\" ng-show=\"myForm.input.$error.pattern\">\n             Single word only!</span>\n\n           <tt>text = {{text}}</tt><br/>\n           <tt>myForm.input.$valid = {{myForm.input.$valid}}</tt><br/>\n           <tt>myForm.input.$error = {{myForm.input.$error}}</tt><br/>\n           <tt>myForm.$valid = {{myForm.$valid}}</tt><br/>\n           <tt>myForm.$error.required = {{!!myForm.$error.required}}</tt><br/>\n          </form>\n        </doc:source>\n        <doc:scenario>\n          it('should initialize to model', function() {\n            expect(binding('text')).toEqual('guest');\n            expect(binding('myForm.input.$valid')).toEqual('true');\n          });\n\n          it('should be invalid if empty', function() {\n            input('text').enter('');\n            expect(binding('text')).toEqual('');\n            expect(binding('myForm.input.$valid')).toEqual('false');\n          });\n\n          it('should be invalid if multi word', function() {\n            input('text').enter('hello world');\n            expect(binding('myForm.input.$valid')).toEqual('false');\n          });\n\n          it('should not be trimmed', function() {\n            input('text').enter('untrimmed ');\n            expect(binding('text')).toEqual('untrimmed ');\n            expect(binding('myForm.input.$valid')).toEqual('true');\n          });\n        </doc:scenario>\n      </doc:example>\n   */\n  'text': textInputType,\n\n\n  /**\n   * @ngdoc inputType\n   * @name ng.directive:input.number\n   *\n   * @description\n   * Text input with number validation and transformation. Sets the `number` validation\n   * error if not a valid number.\n   *\n   * @param {string} ngModel Assignable angular expression to data-bind to.\n   * @param {string=} name Property name of the form under which the control is published.\n   * @param {string=} min Sets the `min` validation error key if the value entered is less than `min`.\n   * @param {string=} max Sets the `max` validation error key if the value entered is greater than `max`.\n   * @param {string=} required Sets `required` validation error key if the value is not entered.\n   * @param {string=} ngRequired Adds `required` attribute and `required` validation constraint to\n   *    the element when the ngRequired expression evaluates to true. Use `ngRequired` instead of\n   *    `required` when you want to data-bind to the `required` attribute.\n   * @param {number=} ngMinlength Sets `minlength` validation error key if the value is shorter than\n   *    minlength.\n   * @param {number=} ngMaxlength Sets `maxlength` validation error key if the value is longer than\n   *    maxlength.\n   * @param {string=} ngPattern Sets `pattern` validation error key if the value does not match the\n   *    RegExp pattern expression. Expected value is `/regexp/` for inline patterns or `regexp` for\n   *    patterns defined as scope expressions.\n   * @param {string=} ngChange Angular expression to be executed when input changes due to user\n   *    interaction with the input element.\n   *\n   * @example\n      <doc:example>\n        <doc:source>\n         <script>\n           function Ctrl($scope) {\n             $scope.value = 12;\n           }\n         </script>\n         <form name=\"myForm\" ng-controller=\"Ctrl\">\n           Number: <input type=\"number\" name=\"input\" ng-model=\"value\"\n                          min=\"0\" max=\"99\" required>\n           <span class=\"error\" ng-show=\"myForm.input.$error.required\">\n             Required!</span>\n           <span class=\"error\" ng-show=\"myForm.input.$error.number\">\n             Not valid number!</span>\n           <tt>value = {{value}}</tt><br/>\n           <tt>myForm.input.$valid = {{myForm.input.$valid}}</tt><br/>\n           <tt>myForm.input.$error = {{myForm.input.$error}}</tt><br/>\n           <tt>myForm.$valid = {{myForm.$valid}}</tt><br/>\n           <tt>myForm.$error.required = {{!!myForm.$error.required}}</tt><br/>\n          </form>\n        </doc:source>\n        <doc:scenario>\n          it('should initialize to model', function() {\n           expect(binding('value')).toEqual('12');\n           expect(binding('myForm.input.$valid')).toEqual('true');\n          });\n\n          it('should be invalid if empty', function() {\n           input('value').enter('');\n           expect(binding('value')).toEqual('');\n           expect(binding('myForm.input.$valid')).toEqual('false');\n          });\n\n          it('should be invalid if over max', function() {\n           input('value').enter('123');\n           expect(binding('value')).toEqual('');\n           expect(binding('myForm.input.$valid')).toEqual('false');\n          });\n        </doc:scenario>\n      </doc:example>\n   */\n  'number': numberInputType,\n\n\n  /**\n   * @ngdoc inputType\n   * @name ng.directive:input.url\n   *\n   * @description\n   * Text input with URL validation. Sets the `url` validation error key if the content is not a\n   * valid URL.\n   *\n   * @param {string} ngModel Assignable angular expression to data-bind to.\n   * @param {string=} name Property name of the form under which the control is published.\n   * @param {string=} required Sets `required` validation error key if the value is not entered.\n   * @param {string=} ngRequired Adds `required` attribute and `required` validation constraint to\n   *    the element when the ngRequired expression evaluates to true. Use `ngRequired` instead of\n   *    `required` when you want to data-bind to the `required` attribute.\n   * @param {number=} ngMinlength Sets `minlength` validation error key if the value is shorter than\n   *    minlength.\n   * @param {number=} ngMaxlength Sets `maxlength` validation error key if the value is longer than\n   *    maxlength.\n   * @param {string=} ngPattern Sets `pattern` validation error key if the value does not match the\n   *    RegExp pattern expression. Expected value is `/regexp/` for inline patterns or `regexp` for\n   *    patterns defined as scope expressions.\n   * @param {string=} ngChange Angular expression to be executed when input changes due to user\n   *    interaction with the input element.\n   *\n   * @example\n      <doc:example>\n        <doc:source>\n         <script>\n           function Ctrl($scope) {\n             $scope.text = 'http://google.com';\n           }\n         </script>\n         <form name=\"myForm\" ng-controller=\"Ctrl\">\n           URL: <input type=\"url\" name=\"input\" ng-model=\"text\" required>\n           <span class=\"error\" ng-show=\"myForm.input.$error.required\">\n             Required!</span>\n           <span class=\"error\" ng-show=\"myForm.input.$error.url\">\n             Not valid url!</span>\n           <tt>text = {{text}}</tt><br/>\n           <tt>myForm.input.$valid = {{myForm.input.$valid}}</tt><br/>\n           <tt>myForm.input.$error = {{myForm.input.$error}}</tt><br/>\n           <tt>myForm.$valid = {{myForm.$valid}}</tt><br/>\n           <tt>myForm.$error.required = {{!!myForm.$error.required}}</tt><br/>\n           <tt>myForm.$error.url = {{!!myForm.$error.url}}</tt><br/>\n          </form>\n        </doc:source>\n        <doc:scenario>\n          it('should initialize to model', function() {\n            expect(binding('text')).toEqual('http://google.com');\n            expect(binding('myForm.input.$valid')).toEqual('true');\n          });\n\n          it('should be invalid if empty', function() {\n            input('text').enter('');\n            expect(binding('text')).toEqual('');\n            expect(binding('myForm.input.$valid')).toEqual('false');\n          });\n\n          it('should be invalid if not url', function() {\n            input('text').enter('xxx');\n            expect(binding('myForm.input.$valid')).toEqual('false');\n          });\n        </doc:scenario>\n      </doc:example>\n   */\n  'url': urlInputType,\n\n\n  /**\n   * @ngdoc inputType\n   * @name ng.directive:input.email\n   *\n   * @description\n   * Text input with email validation. Sets the `email` validation error key if not a valid email\n   * address.\n   *\n   * @param {string} ngModel Assignable angular expression to data-bind to.\n   * @param {string=} name Property name of the form under which the control is published.\n   * @param {string=} required Sets `required` validation error key if the value is not entered.\n   * @param {string=} ngRequired Adds `required` attribute and `required` validation constraint to\n   *    the element when the ngRequired expression evaluates to true. Use `ngRequired` instead of\n   *    `required` when you want to data-bind to the `required` attribute.\n   * @param {number=} ngMinlength Sets `minlength` validation error key if the value is shorter than\n   *    minlength.\n   * @param {number=} ngMaxlength Sets `maxlength` validation error key if the value is longer than\n   *    maxlength.\n   * @param {string=} ngPattern Sets `pattern` validation error key if the value does not match the\n   *    RegExp pattern expression. Expected value is `/regexp/` for inline patterns or `regexp` for\n   *    patterns defined as scope expressions.\n   * @param {string=} ngChange Angular expression to be executed when input changes due to user\n   *    interaction with the input element.\n   *\n   * @example\n      <doc:example>\n        <doc:source>\n         <script>\n           function Ctrl($scope) {\n             $scope.text = 'me@example.com';\n           }\n         </script>\n           <form name=\"myForm\" ng-controller=\"Ctrl\">\n             Email: <input type=\"email\" name=\"input\" ng-model=\"text\" required>\n             <span class=\"error\" ng-show=\"myForm.input.$error.required\">\n               Required!</span>\n             <span class=\"error\" ng-show=\"myForm.input.$error.email\">\n               Not valid email!</span>\n             <tt>text = {{text}}</tt><br/>\n             <tt>myForm.input.$valid = {{myForm.input.$valid}}</tt><br/>\n             <tt>myForm.input.$error = {{myForm.input.$error}}</tt><br/>\n             <tt>myForm.$valid = {{myForm.$valid}}</tt><br/>\n             <tt>myForm.$error.required = {{!!myForm.$error.required}}</tt><br/>\n             <tt>myForm.$error.email = {{!!myForm.$error.email}}</tt><br/>\n           </form>\n        </doc:source>\n        <doc:scenario>\n          it('should initialize to model', function() {\n            expect(binding('text')).toEqual('me@example.com');\n            expect(binding('myForm.input.$valid')).toEqual('true');\n          });\n\n          it('should be invalid if empty', function() {\n            input('text').enter('');\n            expect(binding('text')).toEqual('');\n            expect(binding('myForm.input.$valid')).toEqual('false');\n          });\n\n          it('should be invalid if not email', function() {\n            input('text').enter('xxx');\n            expect(binding('myForm.input.$valid')).toEqual('false');\n          });\n        </doc:scenario>\n      </doc:example>\n   */\n  'email': emailInputType,\n\n\n  /**\n   * @ngdoc inputType\n   * @name ng.directive:input.radio\n   *\n   * @description\n   * HTML radio button.\n   *\n   * @param {string} ngModel Assignable angular expression to data-bind to.\n   * @param {string} value The value to which the expression should be set when selected.\n   * @param {string=} name Property name of the form under which the control is published.\n   * @param {string=} ngChange Angular expression to be executed when input changes due to user\n   *    interaction with the input element.\n   *\n   * @example\n      <doc:example>\n        <doc:source>\n         <script>\n           function Ctrl($scope) {\n             $scope.color = 'blue';\n           }\n         </script>\n         <form name=\"myForm\" ng-controller=\"Ctrl\">\n           <input type=\"radio\" ng-model=\"color\" value=\"red\">  Red <br/>\n           <input type=\"radio\" ng-model=\"color\" value=\"green\"> Green <br/>\n           <input type=\"radio\" ng-model=\"color\" value=\"blue\"> Blue <br/>\n           <tt>color = {{color}}</tt><br/>\n          </form>\n        </doc:source>\n        <doc:scenario>\n          it('should change state', function() {\n            expect(binding('color')).toEqual('blue');\n\n            input('color').select('red');\n            expect(binding('color')).toEqual('red');\n          });\n        </doc:scenario>\n      </doc:example>\n   */\n  'radio': radioInputType,\n\n\n  /**\n   * @ngdoc inputType\n   * @name ng.directive:input.checkbox\n   *\n   * @description\n   * HTML checkbox.\n   *\n   * @param {string} ngModel Assignable angular expression to data-bind to.\n   * @param {string=} name Property name of the form under which the control is published.\n   * @param {string=} ngTrueValue The value to which the expression should be set when selected.\n   * @param {string=} ngFalseValue The value to which the expression should be set when not selected.\n   * @param {string=} ngChange Angular expression to be executed when input changes due to user\n   *    interaction with the input element.\n   *\n   * @example\n      <doc:example>\n        <doc:source>\n         <script>\n           function Ctrl($scope) {\n             $scope.value1 = true;\n             $scope.value2 = 'YES'\n           }\n         </script>\n         <form name=\"myForm\" ng-controller=\"Ctrl\">\n           Value1: <input type=\"checkbox\" ng-model=\"value1\"> <br/>\n           Value2: <input type=\"checkbox\" ng-model=\"value2\"\n                          ng-true-value=\"YES\" ng-false-value=\"NO\"> <br/>\n           <tt>value1 = {{value1}}</tt><br/>\n           <tt>value2 = {{value2}}</tt><br/>\n          </form>\n        </doc:source>\n        <doc:scenario>\n          it('should change state', function() {\n            expect(binding('value1')).toEqual('true');\n            expect(binding('value2')).toEqual('YES');\n\n            input('value1').check();\n            input('value2').check();\n            expect(binding('value1')).toEqual('false');\n            expect(binding('value2')).toEqual('NO');\n          });\n        </doc:scenario>\n      </doc:example>\n   */\n  'checkbox': checkboxInputType,\n\n  'hidden': noop,\n  'button': noop,\n  'submit': noop,\n  'reset': noop\n};\n\n\nfunction textInputType(scope, element, attr, ctrl, $sniffer, $browser) {\n\n  var listener = function() {\n    var value = element.val();\n\n    // By default we will trim the value\n    // If the attribute ng-trim exists we will avoid trimming\n    // e.g. <input ng-model=\"foo\" ng-trim=\"false\">\n    if (toBoolean(attr.ngTrim || 'T')) {\n      value = trim(value);\n    }\n\n    if (ctrl.$viewValue !== value) {\n      scope.$apply(function() {\n        ctrl.$setViewValue(value);\n      });\n    }\n  };\n\n  // if the browser does support \"input\" event, we are fine - except on IE9 which doesn't fire the\n  // input event on backspace, delete or cut\n  if ($sniffer.hasEvent('input')) {\n    element.on('input', listener);\n  } else {\n    var timeout;\n\n    var deferListener = function() {\n      if (!timeout) {\n        timeout = $browser.defer(function() {\n          listener();\n          timeout = null;\n        });\n      }\n    };\n\n    element.on('keydown', function(event) {\n      var key = event.keyCode;\n\n      // ignore\n      //    command            modifiers                   arrows\n      if (key === 91 || (15 < key && key < 19) || (37 <= key && key <= 40)) return;\n\n      deferListener();\n    });\n\n    // if user paste into input using mouse, we need \"change\" event to catch it\n    element.on('change', listener);\n\n    // if user modifies input value using context menu in IE, we need \"paste\" and \"cut\" events to catch it\n    if ($sniffer.hasEvent('paste')) {\n      element.on('paste cut', deferListener);\n    }\n  }\n\n\n  ctrl.$render = function() {\n    element.val(ctrl.$isEmpty(ctrl.$viewValue) ? '' : ctrl.$viewValue);\n  };\n\n  // pattern validator\n  var pattern = attr.ngPattern,\n      patternValidator,\n      match;\n\n  var validate = function(regexp, value) {\n    if (ctrl.$isEmpty(value) || regexp.test(value)) {\n      ctrl.$setValidity('pattern', true);\n      return value;\n    } else {\n      ctrl.$setValidity('pattern', false);\n      return undefined;\n    }\n  };\n\n  if (pattern) {\n    match = pattern.match(/^\\/(.*)\\/([gim]*)$/);\n    if (match) {\n      pattern = new RegExp(match[1], match[2]);\n      patternValidator = function(value) {\n        return validate(pattern, value);\n      };\n    } else {\n      patternValidator = function(value) {\n        var patternObj = scope.$eval(pattern);\n\n        if (!patternObj || !patternObj.test) {\n          throw minErr('ngPattern')('noregexp',\n            'Expected {0} to be a RegExp but was {1}. Element: {2}', pattern,\n            patternObj, startingTag(element));\n        }\n        return validate(patternObj, value);\n      };\n    }\n\n    ctrl.$formatters.push(patternValidator);\n    ctrl.$parsers.push(patternValidator);\n  }\n\n  // min length validator\n  if (attr.ngMinlength) {\n    var minlength = int(attr.ngMinlength);\n    var minLengthValidator = function(value) {\n      if (!ctrl.$isEmpty(value) && value.length < minlength) {\n        ctrl.$setValidity('minlength', false);\n        return undefined;\n      } else {\n        ctrl.$setValidity('minlength', true);\n        return value;\n      }\n    };\n\n    ctrl.$parsers.push(minLengthValidator);\n    ctrl.$formatters.push(minLengthValidator);\n  }\n\n  // max length validator\n  if (attr.ngMaxlength) {\n    var maxlength = int(attr.ngMaxlength);\n    var maxLengthValidator = function(value) {\n      if (!ctrl.$isEmpty(value) && value.length > maxlength) {\n        ctrl.$setValidity('maxlength', false);\n        return undefined;\n      } else {\n        ctrl.$setValidity('maxlength', true);\n        return value;\n      }\n    };\n\n    ctrl.$parsers.push(maxLengthValidator);\n    ctrl.$formatters.push(maxLengthValidator);\n  }\n}\n\nfunction numberInputType(scope, element, attr, ctrl, $sniffer, $browser) {\n  textInputType(scope, element, attr, ctrl, $sniffer, $browser);\n\n  ctrl.$parsers.push(function(value) {\n    var empty = ctrl.$isEmpty(value);\n    if (empty || NUMBER_REGEXP.test(value)) {\n      ctrl.$setValidity('number', true);\n      return value === '' ? null : (empty ? value : parseFloat(value));\n    } else {\n      ctrl.$setValidity('number', false);\n      return undefined;\n    }\n  });\n\n  ctrl.$formatters.push(function(value) {\n    return ctrl.$isEmpty(value) ? '' : '' + value;\n  });\n\n  if (attr.min) {\n    var minValidator = function(value) {\n      var min = parseFloat(attr.min);\n      if (!ctrl.$isEmpty(value) && value < min) {\n        ctrl.$setValidity('min', false);\n        return undefined;\n      } else {\n        ctrl.$setValidity('min', true);\n        return value;\n      }\n    };\n\n    ctrl.$parsers.push(minValidator);\n    ctrl.$formatters.push(minValidator);\n  }\n\n  if (attr.max) {\n    var maxValidator = function(value) {\n      var max = parseFloat(attr.max);\n      if (!ctrl.$isEmpty(value) && value > max) {\n        ctrl.$setValidity('max', false);\n        return undefined;\n      } else {\n        ctrl.$setValidity('max', true);\n        return value;\n      }\n    };\n\n    ctrl.$parsers.push(maxValidator);\n    ctrl.$formatters.push(maxValidator);\n  }\n\n  ctrl.$formatters.push(function(value) {\n\n    if (ctrl.$isEmpty(value) || isNumber(value)) {\n      ctrl.$setValidity('number', true);\n      return value;\n    } else {\n      ctrl.$setValidity('number', false);\n      return undefined;\n    }\n  });\n}\n\nfunction urlInputType(scope, element, attr, ctrl, $sniffer, $browser) {\n  textInputType(scope, element, attr, ctrl, $sniffer, $browser);\n\n  var urlValidator = function(value) {\n    if (ctrl.$isEmpty(value) || URL_REGEXP.test(value)) {\n      ctrl.$setValidity('url', true);\n      return value;\n    } else {\n      ctrl.$setValidity('url', false);\n      return undefined;\n    }\n  };\n\n  ctrl.$formatters.push(urlValidator);\n  ctrl.$parsers.push(urlValidator);\n}\n\nfunction emailInputType(scope, element, attr, ctrl, $sniffer, $browser) {\n  textInputType(scope, element, attr, ctrl, $sniffer, $browser);\n\n  var emailValidator = function(value) {\n    if (ctrl.$isEmpty(value) || EMAIL_REGEXP.test(value)) {\n      ctrl.$setValidity('email', true);\n      return value;\n    } else {\n      ctrl.$setValidity('email', false);\n      return undefined;\n    }\n  };\n\n  ctrl.$formatters.push(emailValidator);\n  ctrl.$parsers.push(emailValidator);\n}\n\nfunction radioInputType(scope, element, attr, ctrl) {\n  // make the name unique, if not defined\n  if (isUndefined(attr.name)) {\n    element.attr('name', nextUid());\n  }\n\n  element.on('click', function() {\n    if (element[0].checked) {\n      scope.$apply(function() {\n        ctrl.$setViewValue(attr.value);\n      });\n    }\n  });\n\n  ctrl.$render = function() {\n    var value = attr.value;\n    element[0].checked = (value == ctrl.$viewValue);\n  };\n\n  attr.$observe('value', ctrl.$render);\n}\n\nfunction checkboxInputType(scope, element, attr, ctrl) {\n  var trueValue = attr.ngTrueValue,\n      falseValue = attr.ngFalseValue;\n\n  if (!isString(trueValue)) trueValue = true;\n  if (!isString(falseValue)) falseValue = false;\n\n  element.on('click', function() {\n    scope.$apply(function() {\n      ctrl.$setViewValue(element[0].checked);\n    });\n  });\n\n  ctrl.$render = function() {\n    element[0].checked = ctrl.$viewValue;\n  };\n\n  // Override the standard `$isEmpty` because a value of `false` means empty in a checkbox.\n  ctrl.$isEmpty = function(value) {\n    return value !== trueValue;\n  };\n\n  ctrl.$formatters.push(function(value) {\n    return value === trueValue;\n  });\n\n  ctrl.$parsers.push(function(value) {\n    return value ? trueValue : falseValue;\n  });\n}\n\n\n/**\n * @ngdoc directive\n * @name ng.directive:textarea\n * @restrict E\n *\n * @description\n * HTML textarea element control with angular data-binding. The data-binding and validation\n * properties of this element are exactly the same as those of the\n * {@link ng.directive:input input element}.\n *\n * @param {string} ngModel Assignable angular expression to data-bind to.\n * @param {string=} name Property name of the form under which the control is published.\n * @param {string=} required Sets `required` validation error key if the value is not entered.\n * @param {string=} ngRequired Adds `required` attribute and `required` validation constraint to\n *    the element when the ngRequired expression evaluates to true. Use `ngRequired` instead of\n *    `required` when you want to data-bind to the `required` attribute.\n * @param {number=} ngMinlength Sets `minlength` validation error key if the value is shorter than\n *    minlength.\n * @param {number=} ngMaxlength Sets `maxlength` validation error key if the value is longer than\n *    maxlength.\n * @param {string=} ngPattern Sets `pattern` validation error key if the value does not match the\n *    RegExp pattern expression. Expected value is `/regexp/` for inline patterns or `regexp` for\n *    patterns defined as scope expressions.\n * @param {string=} ngChange Angular expression to be executed when input changes due to user\n *    interaction with the input element.\n */\n\n\n/**\n * @ngdoc directive\n * @name ng.directive:input\n * @restrict E\n *\n * @description\n * HTML input element control with angular data-binding. Input control follows HTML5 input types\n * and polyfills the HTML5 validation behavior for older browsers.\n *\n * @param {string} ngModel Assignable angular expression to data-bind to.\n * @param {string=} name Property name of the form under which the control is published.\n * @param {string=} required Sets `required` validation error key if the value is not entered.\n * @param {boolean=} ngRequired Sets `required` attribute if set to true\n * @param {number=} ngMinlength Sets `minlength` validation error key if the value is shorter than\n *    minlength.\n * @param {number=} ngMaxlength Sets `maxlength` validation error key if the value is longer than\n *    maxlength.\n * @param {string=} ngPattern Sets `pattern` validation error key if the value does not match the\n *    RegExp pattern expression. Expected value is `/regexp/` for inline patterns or `regexp` for\n *    patterns defined as scope expressions.\n * @param {string=} ngChange Angular expression to be executed when input changes due to user\n *    interaction with the input element.\n *\n * @example\n    <doc:example>\n      <doc:source>\n       <script>\n         function Ctrl($scope) {\n           $scope.user = {name: 'guest', last: 'visitor'};\n         }\n       </script>\n       <div ng-controller=\"Ctrl\">\n         <form name=\"myForm\">\n           User name: <input type=\"text\" name=\"userName\" ng-model=\"user.name\" required>\n           <span class=\"error\" ng-show=\"myForm.userName.$error.required\">\n             Required!</span><br>\n           Last name: <input type=\"text\" name=\"lastName\" ng-model=\"user.last\"\n             ng-minlength=\"3\" ng-maxlength=\"10\">\n           <span class=\"error\" ng-show=\"myForm.lastName.$error.minlength\">\n             Too short!</span>\n           <span class=\"error\" ng-show=\"myForm.lastName.$error.maxlength\">\n             Too long!</span><br>\n         </form>\n         <hr>\n         <tt>user = {{user}}</tt><br/>\n         <tt>myForm.userName.$valid = {{myForm.userName.$valid}}</tt><br>\n         <tt>myForm.userName.$error = {{myForm.userName.$error}}</tt><br>\n         <tt>myForm.lastName.$valid = {{myForm.lastName.$valid}}</tt><br>\n         <tt>myForm.lastName.$error = {{myForm.lastName.$error}}</tt><br>\n         <tt>myForm.$valid = {{myForm.$valid}}</tt><br>\n         <tt>myForm.$error.required = {{!!myForm.$error.required}}</tt><br>\n         <tt>myForm.$error.minlength = {{!!myForm.$error.minlength}}</tt><br>\n         <tt>myForm.$error.maxlength = {{!!myForm.$error.maxlength}}</tt><br>\n       </div>\n      </doc:source>\n      <doc:scenario>\n        it('should initialize to model', function() {\n          expect(binding('user')).toEqual('{\"name\":\"guest\",\"last\":\"visitor\"}');\n          expect(binding('myForm.userName.$valid')).toEqual('true');\n          expect(binding('myForm.$valid')).toEqual('true');\n        });\n\n        it('should be invalid if empty when required', function() {\n          input('user.name').enter('');\n          expect(binding('user')).toEqual('{\"last\":\"visitor\"}');\n          expect(binding('myForm.userName.$valid')).toEqual('false');\n          expect(binding('myForm.$valid')).toEqual('false');\n        });\n\n        it('should be valid if empty when min length is set', function() {\n          input('user.last').enter('');\n          expect(binding('user')).toEqual('{\"name\":\"guest\",\"last\":\"\"}');\n          expect(binding('myForm.lastName.$valid')).toEqual('true');\n          expect(binding('myForm.$valid')).toEqual('true');\n        });\n\n        it('should be invalid if less than required min length', function() {\n          input('user.last').enter('xx');\n          expect(binding('user')).toEqual('{\"name\":\"guest\"}');\n          expect(binding('myForm.lastName.$valid')).toEqual('false');\n          expect(binding('myForm.lastName.$error')).toMatch(/minlength/);\n          expect(binding('myForm.$valid')).toEqual('false');\n        });\n\n        it('should be invalid if longer than max length', function() {\n          input('user.last').enter('some ridiculously long name');\n          expect(binding('user'))\n            .toEqual('{\"name\":\"guest\"}');\n          expect(binding('myForm.lastName.$valid')).toEqual('false');\n          expect(binding('myForm.lastName.$error')).toMatch(/maxlength/);\n          expect(binding('myForm.$valid')).toEqual('false');\n        });\n      </doc:scenario>\n    </doc:example>\n */\nvar inputDirective = ['$browser', '$sniffer', function($browser, $sniffer) {\n  return {\n    restrict: 'E',\n    require: '?ngModel',\n    link: function(scope, element, attr, ctrl) {\n      if (ctrl) {\n        (inputType[lowercase(attr.type)] || inputType.text)(scope, element, attr, ctrl, $sniffer,\n                                                            $browser);\n      }\n    }\n  };\n}];\n\nvar VALID_CLASS = 'ng-valid',\n    INVALID_CLASS = 'ng-invalid',\n    PRISTINE_CLASS = 'ng-pristine',\n    DIRTY_CLASS = 'ng-dirty';\n\n/**\n * @ngdoc object\n * @name ng.directive:ngModel.NgModelController\n *\n * @property {string} $viewValue Actual string value in the view.\n * @property {*} $modelValue The value in the model, that the control is bound to.\n * @property {Array.<Function>} $parsers Array of functions to execute, as a pipeline, whenever\n       the control reads value from the DOM.  Each function is called, in turn, passing the value\n       through to the next. Used to sanitize / convert the value as well as validation.\n       For validation, the parsers should update the validity state using\n       {@link ng.directive:ngModel.NgModelController#methods_$setValidity $setValidity()},\n       and return `undefined` for invalid values.\n\n *\n * @property {Array.<Function>} $formatters Array of functions to execute, as a pipeline, whenever\n       the model value changes. Each function is called, in turn, passing the value through to the\n       next. Used to format / convert values for display in the control and validation.\n *      <pre>\n *      function formatter(value) {\n *        if (value) {\n *          return value.toUpperCase();\n *        }\n *      }\n *      ngModel.$formatters.push(formatter);\n *      </pre>\n * @property {Object} $error An object hash with all errors as keys.\n *\n * @property {boolean} $pristine True if user has not interacted with the control yet.\n * @property {boolean} $dirty True if user has already interacted with the control.\n * @property {boolean} $valid True if there is no error.\n * @property {boolean} $invalid True if at least one error on the control.\n *\n * @description\n *\n * `NgModelController` provides API for the `ng-model` directive. The controller contains\n * services for data-binding, validation, CSS updates, and value formatting and parsing. It\n * purposefully does not contain any logic which deals with DOM rendering or listening to\n * DOM events. Such DOM related logic should be provided by other directives which make use of\n * `NgModelController` for data-binding.\n *\n * ## Custom Control Example\n * This example shows how to use `NgModelController` with a custom control to achieve\n * data-binding. Notice how different directives (`contenteditable`, `ng-model`, and `required`)\n * collaborate together to achieve the desired result.\n *\n * Note that `contenteditable` is an HTML5 attribute, which tells the browser to let the element\n * contents be edited in place by the user.  This will not work on older browsers.\n *\n * <example module=\"customControl\">\n    <file name=\"style.css\">\n      [contenteditable] {\n        border: 1px solid black;\n        background-color: white;\n        min-height: 20px;\n      }\n\n      .ng-invalid {\n        border: 1px solid red;\n      }\n\n    </file>\n    <file name=\"script.js\">\n      angular.module('customControl', []).\n        directive('contenteditable', function() {\n          return {\n            restrict: 'A', // only activate on element attribute\n            require: '?ngModel', // get a hold of NgModelController\n            link: function(scope, element, attrs, ngModel) {\n              if(!ngModel) return; // do nothing if no ng-model\n\n              // Specify how UI should be updated\n              ngModel.$render = function() {\n                element.html(ngModel.$viewValue || '');\n              };\n\n              // Listen for change events to enable binding\n              element.on('blur keyup change', function() {\n                scope.$apply(read);\n              });\n              read(); // initialize\n\n              // Write data to the model\n              function read() {\n                var html = element.html();\n                // When we clear the content editable the browser leaves a <br> behind\n                // If strip-br attribute is provided then we strip this out\n                if( attrs.stripBr && html == '<br>' ) {\n                  html = '';\n                }\n                ngModel.$setViewValue(html);\n              }\n            }\n          };\n        });\n    </file>\n    <file name=\"index.html\">\n      <form name=\"myForm\">\n       <div contenteditable\n            name=\"myWidget\" ng-model=\"userContent\"\n            strip-br=\"true\"\n            required>Change me!</div>\n        <span ng-show=\"myForm.myWidget.$error.required\">Required!</span>\n       <hr>\n       <textarea ng-model=\"userContent\"></textarea>\n      </form>\n    </file>\n    <file name=\"scenario.js\">\n      it('should data-bind and become invalid', function() {\n        var contentEditable = element('[contenteditable]');\n\n        expect(contentEditable.text()).toEqual('Change me!');\n        input('userContent').enter('');\n        expect(contentEditable.text()).toEqual('');\n        expect(contentEditable.prop('className')).toMatch(/ng-invalid-required/);\n      });\n    </file>\n * </example>\n *\n * ## Isolated Scope Pitfall\n *\n * Note that if you have a directive with an isolated scope, you cannot require `ngModel`\n * since the model value will be looked up on the isolated scope rather than the outer scope.\n * When the directive updates the model value, calling `ngModel.$setViewValue()` the property\n * on the outer scope will not be updated. However you can get around this by using $parent.\n *\n * Here is an example of this situation.  You'll notice that the first div is not updating the input.\n * However the second div can update the input properly.\n *\n * <example module=\"badIsolatedDirective\">\n    <file name=\"script.js\">\n\t\tangular.module('badIsolatedDirective', []).directive('isolate', function() {\n      return {\n        require: 'ngModel',\n        scope: { },\n        template: '<input ng-model=\"innerModel\">',\n        link: function(scope, element, attrs, ngModel) {\n          scope.$watch('innerModel', function(value) {\n            console.log(value);\n            ngModel.$setViewValue(value);\n          });\n        }\n      };\n\t\t});\n    </file>\n    <file name=\"index.html\">\n        <input ng-model=\"someModel\"/>\n        <div isolate ng-model=\"someModel\"></div>\n        <div isolate ng-model=\"$parent.someModel\"></div>\n    </file>\n * </example>\n *\n *\n */\nvar NgModelController = ['$scope', '$exceptionHandler', '$attrs', '$element', '$parse',\n    function($scope, $exceptionHandler, $attr, $element, $parse) {\n  this.$viewValue = Number.NaN;\n  this.$modelValue = Number.NaN;\n  this.$parsers = [];\n  this.$formatters = [];\n  this.$viewChangeListeners = [];\n  this.$pristine = true;\n  this.$dirty = false;\n  this.$valid = true;\n  this.$invalid = false;\n  this.$name = $attr.name;\n\n  var ngModelGet = $parse($attr.ngModel),\n      ngModelSet = ngModelGet.assign;\n\n  if (!ngModelSet) {\n    throw minErr('ngModel')('nonassign', \"Expression '{0}' is non-assignable. Element: {1}\",\n        $attr.ngModel, startingTag($element));\n  }\n\n  /**\n   * @ngdoc function\n   * @name ng.directive:ngModel.NgModelController#$render\n   * @methodOf ng.directive:ngModel.NgModelController\n   *\n   * @description\n   * Called when the view needs to be updated. It is expected that the user of the ng-model\n   * directive will implement this method.\n   */\n  this.$render = noop;\n\n  /**\n   * @ngdoc function\n   * @name { ng.directive:ngModel.NgModelController#$isEmpty\n   * @methodOf ng.directive:ngModel.NgModelController\n   *\n   * @description\n   * This is called when we need to determine if the value of the input is empty.\n   *\n   * For instance, the required directive does this to work out if the input has data or not.\n   * The default `$isEmpty` function checks whether the value is `undefined`, `''`, `null` or `NaN`.\n   *\n   * You can override this for input directives whose concept of being empty is different to the\n   * default. The `checkboxInputType` directive does this because in its case a value of `false`\n   * implies empty.\n   */\n  this.$isEmpty = function(value) {\n    return isUndefined(value) || value === '' || value === null || value !== value;\n  };\n\n  var parentForm = $element.inheritedData('$formController') || nullFormCtrl,\n      invalidCount = 0, // used to easily determine if we are valid\n      $error = this.$error = {}; // keep invalid keys here\n\n\n  // Setup initial state of the control\n  $element.addClass(PRISTINE_CLASS);\n  toggleValidCss(true);\n\n  // convenience method for easy toggling of classes\n  function toggleValidCss(isValid, validationErrorKey) {\n    validationErrorKey = validationErrorKey ? '-' + snake_case(validationErrorKey, '-') : '';\n    $element.\n      removeClass((isValid ? INVALID_CLASS : VALID_CLASS) + validationErrorKey).\n      addClass((isValid ? VALID_CLASS : INVALID_CLASS) + validationErrorKey);\n  }\n\n  /**\n   * @ngdoc function\n   * @name ng.directive:ngModel.NgModelController#$setValidity\n   * @methodOf ng.directive:ngModel.NgModelController\n   *\n   * @description\n   * Change the validity state, and notifies the form when the control changes validity. (i.e. it\n   * does not notify form if given validator is already marked as invalid).\n   *\n   * This method should be called by validators - i.e. the parser or formatter functions.\n   *\n   * @param {string} validationErrorKey Name of the validator. the `validationErrorKey` will assign\n   *        to `$error[validationErrorKey]=isValid` so that it is available for data-binding.\n   *        The `validationErrorKey` should be in camelCase and will get converted into dash-case\n   *        for class name. Example: `myError` will result in `ng-valid-my-error` and `ng-invalid-my-error`\n   *        class and can be bound to as  `{{someForm.someControl.$error.myError}}` .\n   * @param {boolean} isValid Whether the current state is valid (true) or invalid (false).\n   */\n  this.$setValidity = function(validationErrorKey, isValid) {\n    // Purposeful use of ! here to cast isValid to boolean in case it is undefined\n    // jshint -W018\n    if ($error[validationErrorKey] === !isValid) return;\n    // jshint +W018\n\n    if (isValid) {\n      if ($error[validationErrorKey]) invalidCount--;\n      if (!invalidCount) {\n        toggleValidCss(true);\n        this.$valid = true;\n        this.$invalid = false;\n      }\n    } else {\n      toggleValidCss(false);\n      this.$invalid = true;\n      this.$valid = false;\n      invalidCount++;\n    }\n\n    $error[validationErrorKey] = !isValid;\n    toggleValidCss(isValid, validationErrorKey);\n\n    parentForm.$setValidity(validationErrorKey, isValid, this);\n  };\n\n  /**\n   * @ngdoc function\n   * @name ng.directive:ngModel.NgModelController#$setPristine\n   * @methodOf ng.directive:ngModel.NgModelController\n   *\n   * @description\n   * Sets the control to its pristine state.\n   *\n   * This method can be called to remove the 'ng-dirty' class and set the control to its pristine\n   * state (ng-pristine class).\n   */\n  this.$setPristine = function () {\n    this.$dirty = false;\n    this.$pristine = true;\n    $element.removeClass(DIRTY_CLASS).addClass(PRISTINE_CLASS);\n  };\n\n  /**\n   * @ngdoc function\n   * @name ng.directive:ngModel.NgModelController#$setViewValue\n   * @methodOf ng.directive:ngModel.NgModelController\n   *\n   * @description\n   * Read a value from view.\n   *\n   * This method should be called from within a DOM event handler.\n   * For example {@link ng.directive:input input} or\n   * {@link ng.directive:select select} directives call it.\n   *\n   * It internally calls all `$parsers` (including validators) and updates the `$modelValue` and the actual model path.\n   * Lastly it calls all registered change listeners.\n   *\n   * @param {string} value Value from the view.\n   */\n  this.$setViewValue = function(value) {\n    this.$viewValue = value;\n\n    // change to dirty\n    if (this.$pristine) {\n      this.$dirty = true;\n      this.$pristine = false;\n      $element.removeClass(PRISTINE_CLASS).addClass(DIRTY_CLASS);\n      parentForm.$setDirty();\n    }\n\n    forEach(this.$parsers, function(fn) {\n      value = fn(value);\n    });\n\n    if (this.$modelValue !== value) {\n      this.$modelValue = value;\n      ngModelSet($scope, value);\n      forEach(this.$viewChangeListeners, function(listener) {\n        try {\n          listener();\n        } catch(e) {\n          $exceptionHandler(e);\n        }\n      });\n    }\n  };\n\n  // model -> value\n  var ctrl = this;\n\n  $scope.$watch(function ngModelWatch() {\n    var value = ngModelGet($scope);\n\n    // if scope model value and ngModel value are out of sync\n    if (ctrl.$modelValue !== value) {\n\n      var formatters = ctrl.$formatters,\n          idx = formatters.length;\n\n      ctrl.$modelValue = value;\n      while(idx--) {\n        value = formatters[idx](value);\n      }\n\n      if (ctrl.$viewValue !== value) {\n        ctrl.$viewValue = value;\n        ctrl.$render();\n      }\n    }\n  });\n}];\n\n\n/**\n * @ngdoc directive\n * @name ng.directive:ngModel\n *\n * @element input\n *\n * @description\n * The `ngModel` directive binds an `input`,`select`, `textarea` (or custom form control) to a\n * property on the scope using {@link ng.directive:ngModel.NgModelController NgModelController},\n * which is created and exposed by this directive.\n *\n * `ngModel` is responsible for:\n *\n * - Binding the view into the model, which other directives such as `input`, `textarea` or `select`\n *   require.\n * - Providing validation behavior (i.e. required, number, email, url).\n * - Keeping the state of the control (valid/invalid, dirty/pristine, validation errors).\n * - Setting related css classes on the element (`ng-valid`, `ng-invalid`, `ng-dirty`, `ng-pristine`).\n * - Registering the control with its parent {@link ng.directive:form form}.\n *\n * Note: `ngModel` will try to bind to the property given by evaluating the expression on the\n * current scope. If the property doesn't already exist on this scope, it will be created\n * implicitly and added to the scope.\n *\n * For best practices on using `ngModel`, see:\n *\n *  - {@link https://github.com/angular/angular.js/wiki/Understanding-Scopes}\n *\n * For basic examples, how to use `ngModel`, see:\n *\n *  - {@link ng.directive:input input}\n *    - {@link ng.directive:input.text text}\n *    - {@link ng.directive:input.checkbox checkbox}\n *    - {@link ng.directive:input.radio radio}\n *    - {@link ng.directive:input.number number}\n *    - {@link ng.directive:input.email email}\n *    - {@link ng.directive:input.url url}\n *  - {@link ng.directive:select select}\n *  - {@link ng.directive:textarea textarea}\n *\n */\nvar ngModelDirective = function() {\n  return {\n    require: ['ngModel', '^?form'],\n    controller: NgModelController,\n    link: function(scope, element, attr, ctrls) {\n      // notify others, especially parent forms\n\n      var modelCtrl = ctrls[0],\n          formCtrl = ctrls[1] || nullFormCtrl;\n\n      formCtrl.$addControl(modelCtrl);\n\n      scope.$on('$destroy', function() {\n        formCtrl.$removeControl(modelCtrl);\n      });\n    }\n  };\n};\n\n\n/**\n * @ngdoc directive\n * @name ng.directive:ngChange\n *\n * @description\n * Evaluate given expression when user changes the input.\n * The expression is not evaluated when the value change is coming from the model.\n *\n * Note, this directive requires `ngModel` to be present.\n *\n * @element input\n * @param {expression} ngChange {@link guide/expression Expression} to evaluate upon change\n * in input value.\n *\n * @example\n * <doc:example>\n *   <doc:source>\n *     <script>\n *       function Controller($scope) {\n *         $scope.counter = 0;\n *         $scope.change = function() {\n *           $scope.counter++;\n *         };\n *       }\n *     </script>\n *     <div ng-controller=\"Controller\">\n *       <input type=\"checkbox\" ng-model=\"confirmed\" ng-change=\"change()\" id=\"ng-change-example1\" />\n *       <input type=\"checkbox\" ng-model=\"confirmed\" id=\"ng-change-example2\" />\n *       <label for=\"ng-change-example2\">Confirmed</label><br />\n *       debug = {{confirmed}}<br />\n *       counter = {{counter}}\n *     </div>\n *   </doc:source>\n *   <doc:scenario>\n *     it('should evaluate the expression if changing from view', function() {\n *       expect(binding('counter')).toEqual('0');\n *       element('#ng-change-example1').click();\n *       expect(binding('counter')).toEqual('1');\n *       expect(binding('confirmed')).toEqual('true');\n *     });\n *\n *     it('should not evaluate the expression if changing from model', function() {\n *       element('#ng-change-example2').click();\n *       expect(binding('counter')).toEqual('0');\n *       expect(binding('confirmed')).toEqual('true');\n *     });\n *   </doc:scenario>\n * </doc:example>\n */\nvar ngChangeDirective = valueFn({\n  require: 'ngModel',\n  link: function(scope, element, attr, ctrl) {\n    ctrl.$viewChangeListeners.push(function() {\n      scope.$eval(attr.ngChange);\n    });\n  }\n});\n\n\nvar requiredDirective = function() {\n  return {\n    require: '?ngModel',\n    link: function(scope, elm, attr, ctrl) {\n      if (!ctrl) return;\n      attr.required = true; // force truthy in case we are on non input element\n\n      var validator = function(value) {\n        if (attr.required && ctrl.$isEmpty(value)) {\n          ctrl.$setValidity('required', false);\n          return;\n        } else {\n          ctrl.$setValidity('required', true);\n          return value;\n        }\n      };\n\n      ctrl.$formatters.push(validator);\n      ctrl.$parsers.unshift(validator);\n\n      attr.$observe('required', function() {\n        validator(ctrl.$viewValue);\n      });\n    }\n  };\n};\n\n\n/**\n * @ngdoc directive\n * @name ng.directive:ngList\n *\n * @description\n * Text input that converts between a delimited string and an array of strings. The delimiter\n * can be a fixed string (by default a comma) or a regular expression.\n *\n * @element input\n * @param {string=} ngList optional delimiter that should be used to split the value. If\n *   specified in form `/something/` then the value will be converted into a regular expression.\n *\n * @example\n    <doc:example>\n      <doc:source>\n       <script>\n         function Ctrl($scope) {\n           $scope.names = ['igor', 'misko', 'vojta'];\n         }\n       </script>\n       <form name=\"myForm\" ng-controller=\"Ctrl\">\n         List: <input name=\"namesInput\" ng-model=\"names\" ng-list required>\n         <span class=\"error\" ng-show=\"myForm.namesInput.$error.required\">\n           Required!</span>\n         <br>\n         <tt>names = {{names}}</tt><br/>\n         <tt>myForm.namesInput.$valid = {{myForm.namesInput.$valid}}</tt><br/>\n         <tt>myForm.namesInput.$error = {{myForm.namesInput.$error}}</tt><br/>\n         <tt>myForm.$valid = {{myForm.$valid}}</tt><br/>\n         <tt>myForm.$error.required = {{!!myForm.$error.required}}</tt><br/>\n        </form>\n      </doc:source>\n      <doc:scenario>\n        it('should initialize to model', function() {\n          expect(binding('names')).toEqual('[\"igor\",\"misko\",\"vojta\"]');\n          expect(binding('myForm.namesInput.$valid')).toEqual('true');\n          expect(element('span.error').css('display')).toBe('none');\n        });\n\n        it('should be invalid if empty', function() {\n          input('names').enter('');\n          expect(binding('names')).toEqual('');\n          expect(binding('myForm.namesInput.$valid')).toEqual('false');\n          expect(element('span.error').css('display')).not().toBe('none');\n        });\n      </doc:scenario>\n    </doc:example>\n */\nvar ngListDirective = function() {\n  return {\n    require: 'ngModel',\n    link: function(scope, element, attr, ctrl) {\n      var match = /\\/(.*)\\//.exec(attr.ngList),\n          separator = match && new RegExp(match[1]) || attr.ngList || ',';\n\n      var parse = function(viewValue) {\n        // If the viewValue is invalid (say required but empty) it will be `undefined`\n        if (isUndefined(viewValue)) return;\n\n        var list = [];\n\n        if (viewValue) {\n          forEach(viewValue.split(separator), function(value) {\n            if (value) list.push(trim(value));\n          });\n        }\n\n        return list;\n      };\n\n      ctrl.$parsers.push(parse);\n      ctrl.$formatters.push(function(value) {\n        if (isArray(value)) {\n          return value.join(', ');\n        }\n\n        return undefined;\n      });\n\n      // Override the standard $isEmpty because an empty array means the input is empty.\n      ctrl.$isEmpty = function(value) {\n        return !value || !value.length;\n      };\n    }\n  };\n};\n\n\nvar CONSTANT_VALUE_REGEXP = /^(true|false|\\d+)$/;\n/**\n * @ngdoc directive\n * @name ng.directive:ngValue\n *\n * @description\n * Binds the given expression to the value of `input[select]` or `input[radio]`, so\n * that when the element is selected, the `ngModel` of that element is set to the\n * bound value.\n *\n * `ngValue` is useful when dynamically generating lists of radio buttons using `ng-repeat`, as\n * shown below.\n *\n * @element input\n * @param {string=} ngValue angular expression, whose value will be bound to the `value` attribute\n *   of the `input` element\n *\n * @example\n    <doc:example>\n      <doc:source>\n       <script>\n          function Ctrl($scope) {\n            $scope.names = ['pizza', 'unicorns', 'robots'];\n            $scope.my = { favorite: 'unicorns' };\n          }\n       </script>\n        <form ng-controller=\"Ctrl\">\n          <h2>Which is your favorite?</h2>\n            <label ng-repeat=\"name in names\" for=\"{{name}}\">\n              {{name}}\n              <input type=\"radio\"\n                     ng-model=\"my.favorite\"\n                     ng-value=\"name\"\n                     id=\"{{name}}\"\n                     name=\"favorite\">\n            </label>\n          </span>\n          <div>You chose {{my.favorite}}</div>\n        </form>\n      </doc:source>\n      <doc:scenario>\n        it('should initialize to model', function() {\n          expect(binding('my.favorite')).toEqual('unicorns');\n        });\n        it('should bind the values to the inputs', function() {\n          input('my.favorite').select('pizza');\n          expect(binding('my.favorite')).toEqual('pizza');\n        });\n      </doc:scenario>\n    </doc:example>\n */\nvar ngValueDirective = function() {\n  return {\n    priority: 100,\n    compile: function(tpl, tplAttr) {\n      if (CONSTANT_VALUE_REGEXP.test(tplAttr.ngValue)) {\n        return function ngValueConstantLink(scope, elm, attr) {\n          attr.$set('value', scope.$eval(attr.ngValue));\n        };\n      } else {\n        return function ngValueLink(scope, elm, attr) {\n          scope.$watch(attr.ngValue, function valueWatchAction(value) {\n            attr.$set('value', value);\n          });\n        };\n      }\n    }\n  };\n};\n\n/**\n * @ngdoc directive\n * @name ng.directive:ngBind\n * @restrict AC\n *\n * @description\n * The `ngBind` attribute tells Angular to replace the text content of the specified HTML element\n * with the value of a given expression, and to update the text content when the value of that\n * expression changes.\n *\n * Typically, you don't use `ngBind` directly, but instead you use the double curly markup like\n * `{{ expression }}` which is similar but less verbose.\n *\n * It is preferrable to use `ngBind` instead of `{{ expression }}` when a template is momentarily\n * displayed by the browser in its raw state before Angular compiles it. Since `ngBind` is an\n * element attribute, it makes the bindings invisible to the user while the page is loading.\n *\n * An alternative solution to this problem would be using the\n * {@link ng.directive:ngCloak ngCloak} directive.\n *\n *\n * @element ANY\n * @param {expression} ngBind {@link guide/expression Expression} to evaluate.\n *\n * @example\n * Enter a name in the Live Preview text box; the greeting below the text box changes instantly.\n   <doc:example>\n     <doc:source>\n       <script>\n         function Ctrl($scope) {\n           $scope.name = 'Whirled';\n         }\n       </script>\n       <div ng-controller=\"Ctrl\">\n         Enter name: <input type=\"text\" ng-model=\"name\"><br>\n         Hello <span ng-bind=\"name\"></span>!\n       </div>\n     </doc:source>\n     <doc:scenario>\n       it('should check ng-bind', function() {\n         expect(using('.doc-example-live').binding('name')).toBe('Whirled');\n         using('.doc-example-live').input('name').enter('world');\n         expect(using('.doc-example-live').binding('name')).toBe('world');\n       });\n     </doc:scenario>\n   </doc:example>\n */\nvar ngBindDirective = ngDirective(function(scope, element, attr) {\n  element.addClass('ng-binding').data('$binding', attr.ngBind);\n  scope.$watch(attr.ngBind, function ngBindWatchAction(value) {\n    // We are purposefully using == here rather than === because we want to\n    // catch when value is \"null or undefined\"\n    // jshint -W041\n    element.text(value == undefined ? '' : value);\n  });\n});\n\n\n/**\n * @ngdoc directive\n * @name ng.directive:ngBindTemplate\n *\n * @description\n * The `ngBindTemplate` directive specifies that the element\n * text content should be replaced with the interpolation of the template\n * in the `ngBindTemplate` attribute.\n * Unlike `ngBind`, the `ngBindTemplate` can contain multiple `{{` `}}`\n * expressions. This directive is needed since some HTML elements\n * (such as TITLE and OPTION) cannot contain SPAN elements.\n *\n * @element ANY\n * @param {string} ngBindTemplate template of form\n *   <tt>{{</tt> <tt>expression</tt> <tt>}}</tt> to eval.\n *\n * @example\n * Try it here: enter text in text box and watch the greeting change.\n   <doc:example>\n     <doc:source>\n       <script>\n         function Ctrl($scope) {\n           $scope.salutation = 'Hello';\n           $scope.name = 'World';\n         }\n       </script>\n       <div ng-controller=\"Ctrl\">\n        Salutation: <input type=\"text\" ng-model=\"salutation\"><br>\n        Name: <input type=\"text\" ng-model=\"name\"><br>\n        <pre ng-bind-template=\"{{salutation}} {{name}}!\"></pre>\n       </div>\n     </doc:source>\n     <doc:scenario>\n       it('should check ng-bind', function() {\n         expect(using('.doc-example-live').binding('salutation')).\n           toBe('Hello');\n         expect(using('.doc-example-live').binding('name')).\n           toBe('World');\n         using('.doc-example-live').input('salutation').enter('Greetings');\n         using('.doc-example-live').input('name').enter('user');\n         expect(using('.doc-example-live').binding('salutation')).\n           toBe('Greetings');\n         expect(using('.doc-example-live').binding('name')).\n           toBe('user');\n       });\n     </doc:scenario>\n   </doc:example>\n */\nvar ngBindTemplateDirective = ['$interpolate', function($interpolate) {\n  return function(scope, element, attr) {\n    // TODO: move this to scenario runner\n    var interpolateFn = $interpolate(element.attr(attr.$attr.ngBindTemplate));\n    element.addClass('ng-binding').data('$binding', interpolateFn);\n    attr.$observe('ngBindTemplate', function(value) {\n      element.text(value);\n    });\n  };\n}];\n\n\n/**\n * @ngdoc directive\n * @name ng.directive:ngBindHtml\n *\n * @description\n * Creates a binding that will innerHTML the result of evaluating the `expression` into the current\n * element in a secure way.  By default, the innerHTML-ed content will be sanitized using the {@link\n * ngSanitize.$sanitize $sanitize} service.  To utilize this functionality, ensure that `$sanitize`\n * is available, for example, by including {@link ngSanitize} in your module's dependencies (not in\n * core Angular.)  You may also bypass sanitization for values you know are safe. To do so, bind to\n * an explicitly trusted value via {@link ng.$sce#methods_trustAsHtml $sce.trustAsHtml}.  See the example\n * under {@link ng.$sce#Example Strict Contextual Escaping (SCE)}.\n *\n * Note: If a `$sanitize` service is unavailable and the bound value isn't explicitly trusted, you\n * will have an exception (instead of an exploit.)\n *\n * @element ANY\n * @param {expression} ngBindHtml {@link guide/expression Expression} to evaluate.\n *\n * @example\n * Try it here: enter text in text box and watch the greeting change.\n   <doc:example module=\"ngBindHtmlExample\" deps=\"angular-sanitize.js\" >\n     <doc:source>\n       <script>\n         angular.module('ngBindHtmlExample', ['ngSanitize'])\n\n         .controller('ngBindHtmlCtrl', ['$scope', function ngBindHtmlCtrl($scope) {\n           $scope.myHTML = 'I am an <code>HTML</code>string with <a href=\"#\">links!</a> and other <em>stuff</em>';\n         }]);\n       </script>\n       <div ng-controller=\"ngBindHtmlCtrl\">\n        <p ng-bind-html=\"myHTML\"></p>\n       </div>\n     </doc:source>\n     <doc:scenario>\n       it('should check ng-bind-html', function() {\n         expect(using('.doc-example-live').binding('myHTML')).\n           toBe('I am an <code>HTML</code>string with <a href=\"#\">links!</a> and other <em>stuff</em>');\n       });\n     </doc:scenario>\n   </doc:example>\n */\nvar ngBindHtmlDirective = ['$sce', '$parse', function($sce, $parse) {\n  return function(scope, element, attr) {\n    element.addClass('ng-binding').data('$binding', attr.ngBindHtml);\n\n    var parsed = $parse(attr.ngBindHtml);\n    function getStringValue() { return (parsed(scope) || '').toString(); }\n\n    scope.$watch(getStringValue, function ngBindHtmlWatchAction(value) {\n      element.html($sce.getTrustedHtml(parsed(scope)) || '');\n    });\n  };\n}];\n\nfunction classDirective(name, selector) {\n  name = 'ngClass' + name;\n  return function() {\n    return {\n      restrict: 'AC',\n      link: function(scope, element, attr) {\n        var oldVal;\n\n        scope.$watch(attr[name], ngClassWatchAction, true);\n\n        attr.$observe('class', function(value) {\n          ngClassWatchAction(scope.$eval(attr[name]));\n        });\n\n\n        if (name !== 'ngClass') {\n          scope.$watch('$index', function($index, old$index) {\n            // jshint bitwise: false\n            var mod = $index & 1;\n            if (mod !== old$index & 1) {\n              if (mod === selector) {\n                addClass(scope.$eval(attr[name]));\n              } else {\n                removeClass(scope.$eval(attr[name]));\n              }\n            }\n          });\n        }\n\n\n        function ngClassWatchAction(newVal) {\n          if (selector === true || scope.$index % 2 === selector) {\n            if (oldVal && !equals(newVal,oldVal)) {\n              removeClass(oldVal);\n            }\n            addClass(newVal);\n          }\n          oldVal = copy(newVal);\n        }\n\n\n        function removeClass(classVal) {\n          attr.$removeClass(flattenClasses(classVal));\n        }\n\n\n        function addClass(classVal) {\n          attr.$addClass(flattenClasses(classVal));\n        }\n\n        function flattenClasses(classVal) {\n          if(isArray(classVal)) {\n            return classVal.join(' ');\n          } else if (isObject(classVal)) {\n            var classes = [], i = 0;\n            forEach(classVal, function(v, k) {\n              if (v) {\n                classes.push(k);\n              }\n            });\n            return classes.join(' ');\n          }\n\n          return classVal;\n        }\n      }\n    };\n  };\n}\n\n/**\n * @ngdoc directive\n * @name ng.directive:ngClass\n * @restrict AC\n *\n * @description\n * The `ngClass` directive allows you to dynamically set CSS classes on an HTML element by databinding\n * an expression that represents all classes to be added.\n *\n * The directive won't add duplicate classes if a particular class was already set.\n *\n * When the expression changes, the previously added classes are removed and only then the\n * new classes are added.\n *\n * @animations\n * add - happens just before the class is applied to the element\n * remove - happens just before the class is removed from the element\n *\n * @element ANY\n * @param {expression} ngClass {@link guide/expression Expression} to eval. The result\n *   of the evaluation can be a string representing space delimited class\n *   names, an array, or a map of class names to boolean values. In the case of a map, the\n *   names of the properties whose values are truthy will be added as css classes to the\n *   element.\n *\n * @example Example that demonstrates basic bindings via ngClass directive.\n   <example>\n     <file name=\"index.html\">\n       <p ng-class=\"{strike: strike, bold: bold, red: red}\">Map Syntax Example</p>\n       <input type=\"checkbox\" ng-model=\"bold\"> bold\n       <input type=\"checkbox\" ng-model=\"strike\"> strike\n       <input type=\"checkbox\" ng-model=\"red\"> red\n       <hr>\n       <p ng-class=\"style\">Using String Syntax</p>\n       <input type=\"text\" ng-model=\"style\" placeholder=\"Type: bold strike red\">\n       <hr>\n       <p ng-class=\"[style1, style2, style3]\">Using Array Syntax</p>\n       <input ng-model=\"style1\" placeholder=\"Type: bold\"><br>\n       <input ng-model=\"style2\" placeholder=\"Type: strike\"><br>\n       <input ng-model=\"style3\" placeholder=\"Type: red\"><br>\n     </file>\n     <file name=\"style.css\">\n       .strike {\n         text-decoration: line-through;\n       }\n       .bold {\n           font-weight: bold;\n       }\n       .red {\n           color: red;\n       }\n     </file>\n     <file name=\"scenario.js\">\n       it('should let you toggle the class', function() {\n\n         expect(element('.doc-example-live p:first').prop('className')).not().toMatch(/bold/);\n         expect(element('.doc-example-live p:first').prop('className')).not().toMatch(/red/);\n\n         input('bold').check();\n         expect(element('.doc-example-live p:first').prop('className')).toMatch(/bold/);\n\n         input('red').check();\n         expect(element('.doc-example-live p:first').prop('className')).toMatch(/red/);\n       });\n\n       it('should let you toggle string example', function() {\n         expect(element('.doc-example-live p:nth-of-type(2)').prop('className')).toBe('');\n         input('style').enter('red');\n         expect(element('.doc-example-live p:nth-of-type(2)').prop('className')).toBe('red');\n       });\n\n       it('array example should have 3 classes', function() {\n         expect(element('.doc-example-live p:last').prop('className')).toBe('');\n         input('style1').enter('bold');\n         input('style2').enter('strike');\n         input('style3').enter('red');\n         expect(element('.doc-example-live p:last').prop('className')).toBe('bold strike red');\n       });\n     </file>\n   </example>\n\n   ## Animations\n\n   The example below demonstrates how to perform animations using ngClass.\n\n   <example animations=\"true\">\n     <file name=\"index.html\">\n      <input type=\"button\" value=\"set\" ng-click=\"myVar='my-class'\">\n      <input type=\"button\" value=\"clear\" ng-click=\"myVar=''\">\n      <br>\n      <span class=\"base-class\" ng-class=\"myVar\">Sample Text</span>\n     </file>\n     <file name=\"style.css\">\n       .base-class {\n         -webkit-transition:all cubic-bezier(0.250, 0.460, 0.450, 0.940) 0.5s;\n         transition:all cubic-bezier(0.250, 0.460, 0.450, 0.940) 0.5s;\n       }\n\n       .base-class.my-class {\n         color: red;\n         font-size:3em;\n       }\n     </file>\n     <file name=\"scenario.js\">\n       it('should check ng-class', function() {\n         expect(element('.doc-example-live span').prop('className')).not().\n           toMatch(/my-class/);\n\n         using('.doc-example-live').element(':button:first').click();\n\n         expect(element('.doc-example-live span').prop('className')).\n           toMatch(/my-class/);\n\n         using('.doc-example-live').element(':button:last').click();\n\n         expect(element('.doc-example-live span').prop('className')).not().\n           toMatch(/my-class/);\n       });\n     </file>\n   </example>\n\n\n   ## ngClass and pre-existing CSS3 Transitions/Animations\n   The ngClass directive still supports CSS3 Transitions/Animations even if they do not follow the ngAnimate CSS naming structure.\n   Upon animation ngAnimate will apply supplementary CSS classes to track the start and end of an animation, but this will not hinder\n   any pre-existing CSS transitions already on the element. To get an idea of what happens during a class-based animation, be sure\n   to view the step by step details of {@link ngAnimate.$animate#methods_addclass $animate.addClass} and\n   {@link ngAnimate.$animate#methods_removeclass $animate.removeClass}.\n */\nvar ngClassDirective = classDirective('', true);\n\n/**\n * @ngdoc directive\n * @name ng.directive:ngClassOdd\n * @restrict AC\n *\n * @description\n * The `ngClassOdd` and `ngClassEven` directives work exactly as\n * {@link ng.directive:ngClass ngClass}, except they work in\n * conjunction with `ngRepeat` and take effect only on odd (even) rows.\n *\n * This directive can be applied only within the scope of an\n * {@link ng.directive:ngRepeat ngRepeat}.\n *\n * @element ANY\n * @param {expression} ngClassOdd {@link guide/expression Expression} to eval. The result\n *   of the evaluation can be a string representing space delimited class names or an array.\n *\n * @example\n   <example>\n     <file name=\"index.html\">\n        <ol ng-init=\"names=['John', 'Mary', 'Cate', 'Suz']\">\n          <li ng-repeat=\"name in names\">\n           <span ng-class-odd=\"'odd'\" ng-class-even=\"'even'\">\n             {{name}}\n           </span>\n          </li>\n        </ol>\n     </file>\n     <file name=\"style.css\">\n       .odd {\n         color: red;\n       }\n       .even {\n         color: blue;\n       }\n     </file>\n     <file name=\"scenario.js\">\n       it('should check ng-class-odd and ng-class-even', function() {\n         expect(element('.doc-example-live li:first span').prop('className')).\n           toMatch(/odd/);\n         expect(element('.doc-example-live li:last span').prop('className')).\n           toMatch(/even/);\n       });\n     </file>\n   </example>\n */\nvar ngClassOddDirective = classDirective('Odd', 0);\n\n/**\n * @ngdoc directive\n * @name ng.directive:ngClassEven\n * @restrict AC\n *\n * @description\n * The `ngClassOdd` and `ngClassEven` directives work exactly as\n * {@link ng.directive:ngClass ngClass}, except they work in\n * conjunction with `ngRepeat` and take effect only on odd (even) rows.\n *\n * This directive can be applied only within the scope of an\n * {@link ng.directive:ngRepeat ngRepeat}.\n *\n * @element ANY\n * @param {expression} ngClassEven {@link guide/expression Expression} to eval. The\n *   result of the evaluation can be a string representing space delimited class names or an array.\n *\n * @example\n   <example>\n     <file name=\"index.html\">\n        <ol ng-init=\"names=['John', 'Mary', 'Cate', 'Suz']\">\n          <li ng-repeat=\"name in names\">\n           <span ng-class-odd=\"'odd'\" ng-class-even=\"'even'\">\n             {{name}} &nbsp; &nbsp; &nbsp;\n           </span>\n          </li>\n        </ol>\n     </file>\n     <file name=\"style.css\">\n       .odd {\n         color: red;\n       }\n       .even {\n         color: blue;\n       }\n     </file>\n     <file name=\"scenario.js\">\n       it('should check ng-class-odd and ng-class-even', function() {\n         expect(element('.doc-example-live li:first span').prop('className')).\n           toMatch(/odd/);\n         expect(element('.doc-example-live li:last span').prop('className')).\n           toMatch(/even/);\n       });\n     </file>\n   </example>\n */\nvar ngClassEvenDirective = classDirective('Even', 1);\n\n/**\n * @ngdoc directive\n * @name ng.directive:ngCloak\n * @restrict AC\n *\n * @description\n * The `ngCloak` directive is used to prevent the Angular html template from being briefly\n * displayed by the browser in its raw (uncompiled) form while your application is loading. Use this\n * directive to avoid the undesirable flicker effect caused by the html template display.\n *\n * The directive can be applied to the `<body>` element, but the preferred usage is to apply\n * multiple `ngCloak` directives to small portions of the page to permit progressive rendering\n * of the browser view.\n *\n * `ngCloak` works in cooperation with the following css rule embedded within `angular.js` and\n * `angular.min.js`.\n * For CSP mode please add `angular-csp.css` to your html file (see {@link ng.directive:ngCsp ngCsp}).\n *\n * <pre>\n * [ng\\:cloak], [ng-cloak], [data-ng-cloak], [x-ng-cloak], .ng-cloak, .x-ng-cloak {\n *   display: none !important;\n * }\n * </pre>\n *\n * When this css rule is loaded by the browser, all html elements (including their children) that\n * are tagged with the `ngCloak` directive are hidden. When Angular encounters this directive\n * during the compilation of the template it deletes the `ngCloak` element attribute, making\n * the compiled element visible.\n *\n * For the best result, the `angular.js` script must be loaded in the head section of the html\n * document; alternatively, the css rule above must be included in the external stylesheet of the\n * application.\n *\n * Legacy browsers, like IE7, do not provide attribute selector support (added in CSS 2.1) so they\n * cannot match the `[ng\\:cloak]` selector. To work around this limitation, you must add the css\n * class `ngCloak` in addition to the `ngCloak` directive as shown in the example below.\n *\n * @element ANY\n *\n * @example\n   <doc:example>\n     <doc:source>\n        <div id=\"template1\" ng-cloak>{{ 'hello' }}</div>\n        <div id=\"template2\" ng-cloak class=\"ng-cloak\">{{ 'hello IE7' }}</div>\n     </doc:source>\n     <doc:scenario>\n       it('should remove the template directive and css class', function() {\n         expect(element('.doc-example-live #template1').attr('ng-cloak')).\n           not().toBeDefined();\n         expect(element('.doc-example-live #template2').attr('ng-cloak')).\n           not().toBeDefined();\n       });\n     </doc:scenario>\n   </doc:example>\n *\n */\nvar ngCloakDirective = ngDirective({\n  compile: function(element, attr) {\n    attr.$set('ngCloak', undefined);\n    element.removeClass('ng-cloak');\n  }\n});\n\n/**\n * @ngdoc directive\n * @name ng.directive:ngController\n *\n * @description\n * The `ngController` directive attaches a controller class to the view. This is a key aspect of how angular\n * supports the principles behind the Model-View-Controller design pattern.\n *\n * MVC components in angular:\n *\n * * Model — The Model is scope properties; scopes are attached to the DOM where scope properties\n *   are accessed through bindings.\n * * View — The template (HTML with data bindings) that is rendered into the View.\n * * Controller — The `ngController` directive specifies a Controller class; the class contains business\n *   logic behind the application to decorate the scope with functions and values\n *\n * Note that you can also attach controllers to the DOM by declaring it in a route definition\n * via the {@link ngRoute.$route $route} service. A common mistake is to declare the controller\n * again using `ng-controller` in the template itself.  This will cause the controller to be attached\n * and executed twice.\n *\n * @element ANY\n * @scope\n * @param {expression} ngController Name of a globally accessible constructor function or an\n *     {@link guide/expression expression} that on the current scope evaluates to a\n *     constructor function. The controller instance can be published into a scope property\n *     by specifying `as propertyName`.\n *\n * @example\n * Here is a simple form for editing user contact information. Adding, removing, clearing, and\n * greeting are methods declared on the controller (see source tab). These methods can\n * easily be called from the angular markup. Notice that the scope becomes the `this` for the\n * controller's instance. This allows for easy access to the view data from the controller. Also\n * notice that any changes to the data are automatically reflected in the View without the need\n * for a manual update. The example is shown in two different declaration styles you may use\n * according to preference.\n   <doc:example>\n     <doc:source>\n      <script>\n        function SettingsController1() {\n          this.name = \"John Smith\";\n          this.contacts = [\n            {type: 'phone', value: '408 555 1212'},\n            {type: 'email', value: 'john.smith@example.org'} ];\n          };\n\n        SettingsController1.prototype.greet = function() {\n          alert(this.name);\n        };\n\n        SettingsController1.prototype.addContact = function() {\n          this.contacts.push({type: 'email', value: 'yourname@example.org'});\n        };\n\n        SettingsController1.prototype.removeContact = function(contactToRemove) {\n         var index = this.contacts.indexOf(contactToRemove);\n          this.contacts.splice(index, 1);\n        };\n\n        SettingsController1.prototype.clearContact = function(contact) {\n          contact.type = 'phone';\n          contact.value = '';\n        };\n      </script>\n      <div id=\"ctrl-as-exmpl\" ng-controller=\"SettingsController1 as settings\">\n        Name: <input type=\"text\" ng-model=\"settings.name\"/>\n        [ <a href=\"\" ng-click=\"settings.greet()\">greet</a> ]<br/>\n        Contact:\n        <ul>\n          <li ng-repeat=\"contact in settings.contacts\">\n            <select ng-model=\"contact.type\">\n               <option>phone</option>\n               <option>email</option>\n            </select>\n            <input type=\"text\" ng-model=\"contact.value\"/>\n            [ <a href=\"\" ng-click=\"settings.clearContact(contact)\">clear</a>\n            | <a href=\"\" ng-click=\"settings.removeContact(contact)\">X</a> ]\n          </li>\n          <li>[ <a href=\"\" ng-click=\"settings.addContact()\">add</a> ]</li>\n       </ul>\n      </div>\n     </doc:source>\n     <doc:scenario>\n       it('should check controller as', function() {\n         expect(element('#ctrl-as-exmpl>:input').val()).toBe('John Smith');\n         expect(element('#ctrl-as-exmpl li:nth-child(1) input').val())\n           .toBe('408 555 1212');\n         expect(element('#ctrl-as-exmpl li:nth-child(2) input').val())\n           .toBe('john.smith@example.org');\n\n         element('#ctrl-as-exmpl li:first a:contains(\"clear\")').click();\n         expect(element('#ctrl-as-exmpl li:first input').val()).toBe('');\n\n         element('#ctrl-as-exmpl li:last a:contains(\"add\")').click();\n         expect(element('#ctrl-as-exmpl li:nth-child(3) input').val())\n           .toBe('yourname@example.org');\n       });\n     </doc:scenario>\n   </doc:example>\n    <doc:example>\n     <doc:source>\n      <script>\n        function SettingsController2($scope) {\n          $scope.name = \"John Smith\";\n          $scope.contacts = [\n            {type:'phone', value:'408 555 1212'},\n            {type:'email', value:'john.smith@example.org'} ];\n\n          $scope.greet = function() {\n           alert(this.name);\n          };\n\n          $scope.addContact = function() {\n           this.contacts.push({type:'email', value:'yourname@example.org'});\n          };\n\n          $scope.removeContact = function(contactToRemove) {\n           var index = this.contacts.indexOf(contactToRemove);\n           this.contacts.splice(index, 1);\n          };\n\n          $scope.clearContact = function(contact) {\n           contact.type = 'phone';\n           contact.value = '';\n          };\n        }\n      </script>\n      <div id=\"ctrl-exmpl\" ng-controller=\"SettingsController2\">\n        Name: <input type=\"text\" ng-model=\"name\"/>\n        [ <a href=\"\" ng-click=\"greet()\">greet</a> ]<br/>\n        Contact:\n        <ul>\n          <li ng-repeat=\"contact in contacts\">\n            <select ng-model=\"contact.type\">\n               <option>phone</option>\n               <option>email</option>\n            </select>\n            <input type=\"text\" ng-model=\"contact.value\"/>\n            [ <a href=\"\" ng-click=\"clearContact(contact)\">clear</a>\n            | <a href=\"\" ng-click=\"removeContact(contact)\">X</a> ]\n          </li>\n          <li>[ <a href=\"\" ng-click=\"addContact()\">add</a> ]</li>\n       </ul>\n      </div>\n     </doc:source>\n     <doc:scenario>\n       it('should check controller', function() {\n         expect(element('#ctrl-exmpl>:input').val()).toBe('John Smith');\n         expect(element('#ctrl-exmpl li:nth-child(1) input').val())\n           .toBe('408 555 1212');\n         expect(element('#ctrl-exmpl li:nth-child(2) input').val())\n           .toBe('john.smith@example.org');\n\n         element('#ctrl-exmpl li:first a:contains(\"clear\")').click();\n         expect(element('#ctrl-exmpl li:first input').val()).toBe('');\n\n         element('#ctrl-exmpl li:last a:contains(\"add\")').click();\n         expect(element('#ctrl-exmpl li:nth-child(3) input').val())\n           .toBe('yourname@example.org');\n       });\n     </doc:scenario>\n   </doc:example>\n\n */\nvar ngControllerDirective = [function() {\n  return {\n    scope: true,\n    controller: '@'\n  };\n}];\n\n/**\n * @ngdoc directive\n * @name ng.directive:ngCsp\n *\n * @element html\n * @description\n * Enables [CSP (Content Security Policy)](https://developer.mozilla.org/en/Security/CSP) support.\n *\n * This is necessary when developing things like Google Chrome Extensions.\n *\n * CSP forbids apps to use `eval` or `Function(string)` generated functions (among other things).\n * For us to be compatible, we just need to implement the \"getterFn\" in $parse without violating\n * any of these restrictions.\n *\n * AngularJS uses `Function(string)` generated functions as a speed optimization. Applying the `ngCsp`\n * directive will cause Angular to use CSP compatibility mode. When this mode is on AngularJS will\n * evaluate all expressions up to 30% slower than in non-CSP mode, but no security violations will\n * be raised.\n *\n * CSP forbids JavaScript to inline stylesheet rules. In non CSP mode Angular automatically\n * includes some CSS rules (e.g. {@link ng.directive:ngCloak ngCloak}).\n * To make those directives work in CSP mode, include the `angular-csp.css` manually.\n *\n * In order to use this feature put the `ngCsp` directive on the root element of the application.\n *\n * *Note: This directive is only available in the `ng-csp` and `data-ng-csp` attribute form.*\n *\n * @example\n * This example shows how to apply the `ngCsp` directive to the `html` tag.\n   <pre>\n     <!doctype html>\n     <html ng-app ng-csp>\n     ...\n     ...\n     </html>\n   </pre>\n */\n\n// ngCsp is not implemented as a proper directive any more, because we need it be processed while we bootstrap\n// the system (before $parse is instantiated), for this reason we just have a csp() fn that looks for ng-csp attribute\n// anywhere in the current doc\n\n/**\n * @ngdoc directive\n * @name ng.directive:ngClick\n *\n * @description\n * The ngClick directive allows you to specify custom behavior when\n * an element is clicked.\n *\n * @element ANY\n * @param {expression} ngClick {@link guide/expression Expression} to evaluate upon\n * click. (Event object is available as `$event`)\n *\n * @example\n   <doc:example>\n     <doc:source>\n      <button ng-click=\"count = count + 1\" ng-init=\"count=0\">\n        Increment\n      </button>\n      count: {{count}}\n     </doc:source>\n     <doc:scenario>\n       it('should check ng-click', function() {\n         expect(binding('count')).toBe('0');\n         element('.doc-example-live :button').click();\n         expect(binding('count')).toBe('1');\n       });\n     </doc:scenario>\n   </doc:example>\n */\n/*\n * A directive that allows creation of custom onclick handlers that are defined as angular\n * expressions and are compiled and executed within the current scope.\n *\n * Events that are handled via these handler are always configured not to propagate further.\n */\nvar ngEventDirectives = {};\nforEach(\n  'click dblclick mousedown mouseup mouseover mouseout mousemove mouseenter mouseleave keydown keyup keypress submit focus blur copy cut paste'.split(' '),\n  function(name) {\n    var directiveName = directiveNormalize('ng-' + name);\n    ngEventDirectives[directiveName] = ['$parse', function($parse) {\n      return {\n        compile: function($element, attr) {\n          var fn = $parse(attr[directiveName]);\n          return function(scope, element, attr) {\n            element.on(lowercase(name), function(event) {\n              scope.$apply(function() {\n                fn(scope, {$event:event});\n              });\n            });\n          };\n        }\n      };\n    }];\n  }\n);\n\n/**\n * @ngdoc directive\n * @name ng.directive:ngDblclick\n *\n * @description\n * The `ngDblclick` directive allows you to specify custom behavior on a dblclick event.\n *\n * @element ANY\n * @param {expression} ngDblclick {@link guide/expression Expression} to evaluate upon\n * a dblclick. (The Event object is available as `$event`)\n *\n * @example\n * See {@link ng.directive:ngClick ngClick}\n */\n\n\n/**\n * @ngdoc directive\n * @name ng.directive:ngMousedown\n *\n * @description\n * The ngMousedown directive allows you to specify custom behavior on mousedown event.\n *\n * @element ANY\n * @param {expression} ngMousedown {@link guide/expression Expression} to evaluate upon\n * mousedown. (Event object is available as `$event`)\n *\n * @example\n * See {@link ng.directive:ngClick ngClick}\n */\n\n\n/**\n * @ngdoc directive\n * @name ng.directive:ngMouseup\n *\n * @description\n * Specify custom behavior on mouseup event.\n *\n * @element ANY\n * @param {expression} ngMouseup {@link guide/expression Expression} to evaluate upon\n * mouseup. (Event object is available as `$event`)\n *\n * @example\n * See {@link ng.directive:ngClick ngClick}\n */\n\n/**\n * @ngdoc directive\n * @name ng.directive:ngMouseover\n *\n * @description\n * Specify custom behavior on mouseover event.\n *\n * @element ANY\n * @param {expression} ngMouseover {@link guide/expression Expression} to evaluate upon\n * mouseover. (Event object is available as `$event`)\n *\n * @example\n * See {@link ng.directive:ngClick ngClick}\n */\n\n\n/**\n * @ngdoc directive\n * @name ng.directive:ngMouseenter\n *\n * @description\n * Specify custom behavior on mouseenter event.\n *\n * @element ANY\n * @param {expression} ngMouseenter {@link guide/expression Expression} to evaluate upon\n * mouseenter. (Event object is available as `$event`)\n *\n * @example\n * See {@link ng.directive:ngClick ngClick}\n */\n\n\n/**\n * @ngdoc directive\n * @name ng.directive:ngMouseleave\n *\n * @description\n * Specify custom behavior on mouseleave event.\n *\n * @element ANY\n * @param {expression} ngMouseleave {@link guide/expression Expression} to evaluate upon\n * mouseleave. (Event object is available as `$event`)\n *\n * @example\n * See {@link ng.directive:ngClick ngClick}\n */\n\n\n/**\n * @ngdoc directive\n * @name ng.directive:ngMousemove\n *\n * @description\n * Specify custom behavior on mousemove event.\n *\n * @element ANY\n * @param {expression} ngMousemove {@link guide/expression Expression} to evaluate upon\n * mousemove. (Event object is available as `$event`)\n *\n * @example\n * See {@link ng.directive:ngClick ngClick}\n */\n\n\n/**\n * @ngdoc directive\n * @name ng.directive:ngKeydown\n *\n * @description\n * Specify custom behavior on keydown event.\n *\n * @element ANY\n * @param {expression} ngKeydown {@link guide/expression Expression} to evaluate upon\n * keydown. (Event object is available as `$event` and can be interrogated for keyCode, altKey, etc.)\n *\n * @example\n * See {@link ng.directive:ngClick ngClick}\n */\n\n\n/**\n * @ngdoc directive\n * @name ng.directive:ngKeyup\n *\n * @description\n * Specify custom behavior on keyup event.\n *\n * @element ANY\n * @param {expression} ngKeyup {@link guide/expression Expression} to evaluate upon\n * keyup. (Event object is available as `$event` and can be interrogated for keyCode, altKey, etc.)\n *\n * @example\n * See {@link ng.directive:ngClick ngClick}\n */\n\n\n/**\n * @ngdoc directive\n * @name ng.directive:ngKeypress\n *\n * @description\n * Specify custom behavior on keypress event.\n *\n * @element ANY\n * @param {expression} ngKeypress {@link guide/expression Expression} to evaluate upon\n * keypress. (Event object is available as `$event` and can be interrogated for keyCode, altKey, etc.)\n *\n * @example\n * See {@link ng.directive:ngClick ngClick}\n */\n\n\n/**\n * @ngdoc directive\n * @name ng.directive:ngSubmit\n *\n * @description\n * Enables binding angular expressions to onsubmit events.\n *\n * Additionally it prevents the default action (which for form means sending the request to the\n * server and reloading the current page) **but only if the form does not contain an `action`\n * attribute**.\n *\n * @element form\n * @param {expression} ngSubmit {@link guide/expression Expression} to eval. (Event object is available as `$event`)\n *\n * @example\n   <doc:example>\n     <doc:source>\n      <script>\n        function Ctrl($scope) {\n          $scope.list = [];\n          $scope.text = 'hello';\n          $scope.submit = function() {\n            if (this.text) {\n              this.list.push(this.text);\n              this.text = '';\n            }\n          };\n        }\n      </script>\n      <form ng-submit=\"submit()\" ng-controller=\"Ctrl\">\n        Enter text and hit enter:\n        <input type=\"text\" ng-model=\"text\" name=\"text\" />\n        <input type=\"submit\" id=\"submit\" value=\"Submit\" />\n        <pre>list={{list}}</pre>\n      </form>\n     </doc:source>\n     <doc:scenario>\n       it('should check ng-submit', function() {\n         expect(binding('list')).toBe('[]');\n         element('.doc-example-live #submit').click();\n         expect(binding('list')).toBe('[\"hello\"]');\n         expect(input('text').val()).toBe('');\n       });\n       it('should ignore empty strings', function() {\n         expect(binding('list')).toBe('[]');\n         element('.doc-example-live #submit').click();\n         element('.doc-example-live #submit').click();\n         expect(binding('list')).toBe('[\"hello\"]');\n       });\n     </doc:scenario>\n   </doc:example>\n */\n\n/**\n * @ngdoc directive\n * @name ng.directive:ngFocus\n *\n * @description\n * Specify custom behavior on focus event.\n *\n * @element window, input, select, textarea, a\n * @param {expression} ngFocus {@link guide/expression Expression} to evaluate upon\n * focus. (Event object is available as `$event`)\n *\n * @example\n * See {@link ng.directive:ngClick ngClick}\n */\n\n/**\n * @ngdoc directive\n * @name ng.directive:ngBlur\n *\n * @description\n * Specify custom behavior on blur event.\n *\n * @element window, input, select, textarea, a\n * @param {expression} ngBlur {@link guide/expression Expression} to evaluate upon\n * blur. (Event object is available as `$event`)\n *\n * @example\n * See {@link ng.directive:ngClick ngClick}\n */\n\n/**\n * @ngdoc directive\n * @name ng.directive:ngCopy\n *\n * @description\n * Specify custom behavior on copy event.\n *\n * @element window, input, select, textarea, a\n * @param {expression} ngCopy {@link guide/expression Expression} to evaluate upon\n * copy. (Event object is available as `$event`)\n *\n * @example\n * See {@link ng.directive:ngClick ngClick}\n */\n\n/**\n * @ngdoc directive\n * @name ng.directive:ngCut\n *\n * @description\n * Specify custom behavior on cut event.\n *\n * @element window, input, select, textarea, a\n * @param {expression} ngCut {@link guide/expression Expression} to evaluate upon\n * cut. (Event object is available as `$event`)\n *\n * @example\n * See {@link ng.directive:ngClick ngClick}\n */\n\n/**\n * @ngdoc directive\n * @name ng.directive:ngPaste\n *\n * @description\n * Specify custom behavior on paste event.\n *\n * @element window, input, select, textarea, a\n * @param {expression} ngPaste {@link guide/expression Expression} to evaluate upon\n * paste. (Event object is available as `$event`)\n *\n * @example\n * See {@link ng.directive:ngClick ngClick}\n */\n\n/**\n * @ngdoc directive\n * @name ng.directive:ngIf\n * @restrict A\n *\n * @description\n * The `ngIf` directive removes or recreates a portion of the DOM tree based on an\n * {expression}. If the expression assigned to `ngIf` evaluates to a false\n * value then the element is removed from the DOM, otherwise a clone of the\n * element is reinserted into the DOM.\n *\n * `ngIf` differs from `ngShow` and `ngHide` in that `ngIf` completely removes and recreates the\n * element in the DOM rather than changing its visibility via the `display` css property.  A common\n * case when this difference is significant is when using css selectors that rely on an element's\n * position within the DOM, such as the `:first-child` or `:last-child` pseudo-classes.\n *\n * Note that when an element is removed using `ngIf` its scope is destroyed and a new scope\n * is created when the element is restored.  The scope created within `ngIf` inherits from\n * its parent scope using\n * {@link https://github.com/angular/angular.js/wiki/The-Nuances-of-Scope-Prototypal-Inheritance prototypal inheritance}.\n * An important implication of this is if `ngModel` is used within `ngIf` to bind to\n * a javascript primitive defined in the parent scope. In this case any modifications made to the\n * variable within the child scope will override (hide) the value in the parent scope.\n *\n * Also, `ngIf` recreates elements using their compiled state. An example of this behavior\n * is if an element's class attribute is directly modified after it's compiled, using something like\n * jQuery's `.addClass()` method, and the element is later removed. When `ngIf` recreates the element\n * the added class will be lost because the original compiled state is used to regenerate the element.\n *\n * Additionally, you can provide animations via the `ngAnimate` module to animate the `enter`\n * and `leave` effects.\n *\n * @animations\n * enter - happens just after the ngIf contents change and a new DOM element is created and injected into the ngIf container\n * leave - happens just before the ngIf contents are removed from the DOM\n *\n * @element ANY\n * @scope\n * @priority 600\n * @param {expression} ngIf If the {@link guide/expression expression} is falsy then\n *     the element is removed from the DOM tree. If it is truthy a copy of the compiled\n *     element is added to the DOM tree.\n *\n * @example\n  <example animations=\"true\">\n    <file name=\"index.html\">\n      Click me: <input type=\"checkbox\" ng-model=\"checked\" ng-init=\"checked=true\" /><br/>\n      Show when checked:\n      <span ng-if=\"checked\" class=\"animate-if\">\n        I'm removed when the checkbox is unchecked.\n      </span>\n    </file>\n    <file name=\"animations.css\">\n      .animate-if {\n        background:white;\n        border:1px solid black;\n        padding:10px;\n      }\n\n      /&#42;\n        The transition styles can also be placed on the CSS base class above \n      &#42;/\n      .animate-if.ng-enter, .animate-if.ng-leave {\n        -webkit-transition:all cubic-bezier(0.250, 0.460, 0.450, 0.940) 0.5s;\n        transition:all cubic-bezier(0.250, 0.460, 0.450, 0.940) 0.5s;\n      }\n\n      .animate-if.ng-enter,\n      .animate-if.ng-leave.ng-leave-active {\n        opacity:0;\n      }\n\n      .animate-if.ng-leave,\n      .animate-if.ng-enter.ng-enter-active {\n        opacity:1;\n      }\n    </file>\n  </example>\n */\nvar ngIfDirective = ['$animate', function($animate) {\n  return {\n    transclude: 'element',\n    priority: 600,\n    terminal: true,\n    restrict: 'A',\n    $$tlb: true,\n    compile: function (element, attr, transclude) {\n      return function ($scope, $element, $attr) {\n        var block, childScope;\n        $scope.$watch($attr.ngIf, function ngIfWatchAction(value) {\n\n          if (toBoolean(value)) {\n\n            childScope = $scope.$new();\n            transclude(childScope, function (clone) {\n              block = {\n                startNode: clone[0],\n                endNode: clone[clone.length++] = document.createComment(' end ngIf: ' + $attr.ngIf + ' ')\n              };\n              $animate.enter(clone, $element.parent(), $element);\n            });\n\n          } else {\n\n            if (childScope) {\n              childScope.$destroy();\n              childScope = null;\n            }\n\n            if (block) {\n              $animate.leave(getBlockElements(block));\n              block = null;\n            }\n          }\n        });\n      };\n    }\n  };\n}];\n\n/**\n * @ngdoc directive\n * @name ng.directive:ngInclude\n * @restrict ECA\n *\n * @description\n * Fetches, compiles and includes an external HTML fragment.\n *\n * By default, the template URL is restricted to the same domain and protocol as the\n * application document. This is done by calling {@link ng.$sce#methods_getTrustedResourceUrl\n * $sce.getTrustedResourceUrl} on it. To load templates from other domains or protocols\n * you may either {@link ng.$sceDelegateProvider#methods_resourceUrlWhitelist whitelist them} or\n * {@link ng.$sce#methods_trustAsResourceUrl wrap them} as trusted values. Refer to Angular's {@link\n * ng.$sce Strict Contextual Escaping}.\n *\n * In addition, the browser's\n * {@link https://code.google.com/p/browsersec/wiki/Part2#Same-origin_policy_for_XMLHttpRequest\n * Same Origin Policy} and {@link http://www.w3.org/TR/cors/ Cross-Origin Resource Sharing\n * (CORS)} policy may further restrict whether the template is successfully loaded.\n * For example, `ngInclude` won't work for cross-domain requests on all browsers and for `file://`\n * access on some browsers.\n *\n * @animations\n * enter - animation is used to bring new content into the browser.\n * leave - animation is used to animate existing content away.\n *\n * The enter and leave animation occur concurrently.\n *\n * @scope\n * @priority 400\n *\n * @param {string} ngInclude|src angular expression evaluating to URL. If the source is a string constant,\n *                 make sure you wrap it in quotes, e.g. `src=\"'myPartialTemplate.html'\"`.\n * @param {string=} onload Expression to evaluate when a new partial is loaded.\n *\n * @param {string=} autoscroll Whether `ngInclude` should call {@link ng.$anchorScroll\n *                  $anchorScroll} to scroll the viewport after the content is loaded.\n *\n *                  - If the attribute is not set, disable scrolling.\n *                  - If the attribute is set without value, enable scrolling.\n *                  - Otherwise enable scrolling only if the expression evaluates to truthy value.\n *\n * @example\n  <example animations=\"true\">\n    <file name=\"index.html\">\n     <div ng-controller=\"Ctrl\">\n       <select ng-model=\"template\" ng-options=\"t.name for t in templates\">\n        <option value=\"\">(blank)</option>\n       </select>\n       url of the template: <tt>{{template.url}}</tt>\n       <hr/>\n       <div class=\"slide-animate-container\">\n         <div class=\"slide-animate\" ng-include=\"template.url\"></div>\n       </div>\n     </div>\n    </file>\n    <file name=\"script.js\">\n      function Ctrl($scope) {\n        $scope.templates =\n          [ { name: 'template1.html', url: 'template1.html'}\n          , { name: 'template2.html', url: 'template2.html'} ];\n        $scope.template = $scope.templates[0];\n      }\n     </file>\n    <file name=\"template1.html\">\n      Content of template1.html\n    </file>\n    <file name=\"template2.html\">\n      Content of template2.html\n    </file>\n    <file name=\"animations.css\">\n      .slide-animate-container {\n        position:relative;\n        background:white;\n        border:1px solid black;\n        height:40px;\n        overflow:hidden;\n      }\n\n      .slide-animate {\n        padding:10px;\n      }\n\n      .slide-animate.ng-enter, .slide-animate.ng-leave {\n        -webkit-transition:all cubic-bezier(0.250, 0.460, 0.450, 0.940) 0.5s;\n        transition:all cubic-bezier(0.250, 0.460, 0.450, 0.940) 0.5s;\n\n        position:absolute;\n        top:0;\n        left:0;\n        right:0;\n        bottom:0;\n        display:block;\n        padding:10px;\n      }\n\n      .slide-animate.ng-enter {\n        top:-50px;\n      }\n      .slide-animate.ng-enter.ng-enter-active {\n        top:0;\n      }\n\n      .slide-animate.ng-leave {\n        top:0;\n      }\n      .slide-animate.ng-leave.ng-leave-active {\n        top:50px;\n      }\n    </file>\n    <file name=\"scenario.js\">\n      it('should load template1.html', function() {\n       expect(element('.doc-example-live [ng-include]').text()).\n         toMatch(/Content of template1.html/);\n      });\n      it('should load template2.html', function() {\n       select('template').option('1');\n       expect(element('.doc-example-live [ng-include]').text()).\n         toMatch(/Content of template2.html/);\n      });\n      it('should change to blank', function() {\n       select('template').option('');\n       expect(element('.doc-example-live [ng-include]')).toBe(undefined);\n      });\n    </file>\n  </example>\n */\n\n\n/**\n * @ngdoc event\n * @name ng.directive:ngInclude#$includeContentRequested\n * @eventOf ng.directive:ngInclude\n * @eventType emit on the scope ngInclude was declared in\n * @description\n * Emitted every time the ngInclude content is requested.\n */\n\n\n/**\n * @ngdoc event\n * @name ng.directive:ngInclude#$includeContentLoaded\n * @eventOf ng.directive:ngInclude\n * @eventType emit on the current ngInclude scope\n * @description\n * Emitted every time the ngInclude content is reloaded.\n */\nvar ngIncludeDirective = ['$http', '$templateCache', '$anchorScroll', '$compile', '$animate', '$sce',\n                  function($http,   $templateCache,   $anchorScroll,   $compile,   $animate,   $sce) {\n  return {\n    restrict: 'ECA',\n    priority: 400,\n    terminal: true,\n    transclude: 'element',\n    compile: function(element, attr, transclusion) {\n      var srcExp = attr.ngInclude || attr.src,\n          onloadExp = attr.onload || '',\n          autoScrollExp = attr.autoscroll;\n\n      return function(scope, $element) {\n        var changeCounter = 0,\n            currentScope,\n            currentElement;\n\n        var cleanupLastIncludeContent = function() {\n          if (currentScope) {\n            currentScope.$destroy();\n            currentScope = null;\n          }\n          if(currentElement) {\n            $animate.leave(currentElement);\n            currentElement = null;\n          }\n        };\n\n        scope.$watch($sce.parseAsResourceUrl(srcExp), function ngIncludeWatchAction(src) {\n          var afterAnimation = function() {\n            if (isDefined(autoScrollExp) && (!autoScrollExp || scope.$eval(autoScrollExp))) {\n              $anchorScroll();\n            }\n          };\n          var thisChangeId = ++changeCounter;\n\n          if (src) {\n            $http.get(src, {cache: $templateCache}).success(function(response) {\n              if (thisChangeId !== changeCounter) return;\n              var newScope = scope.$new();\n\n              transclusion(newScope, function(clone) {\n                cleanupLastIncludeContent();\n\n                currentScope = newScope;\n                currentElement = clone;\n\n                currentElement.html(response);\n                $animate.enter(currentElement, null, $element, afterAnimation);\n                $compile(currentElement.contents())(currentScope);\n                currentScope.$emit('$includeContentLoaded');\n                scope.$eval(onloadExp);\n              });\n            }).error(function() {\n              if (thisChangeId === changeCounter) cleanupLastIncludeContent();\n            });\n            scope.$emit('$includeContentRequested');\n          } else {\n            cleanupLastIncludeContent();\n          }\n        });\n      };\n    }\n  };\n}];\n\n/**\n * @ngdoc directive\n * @name ng.directive:ngInit\n * @restrict AC\n *\n * @description\n * The `ngInit` directive allows you to evaluate an expression in the\n * current scope.\n *\n * <div class=\"alert alert-error\">\n * The only appropriate use of `ngInit` for aliasing special properties of\n * {@link api/ng.directive:ngRepeat `ngRepeat`}, as seen in the demo below. Besides this case, you\n * should use {@link guide/controller controllers} rather than `ngInit`\n * to initialize values on a scope.\n * </div>\n *\n * @element ANY\n * @param {expression} ngInit {@link guide/expression Expression} to eval.\n *\n * @example\n   <doc:example>\n     <doc:source>\n   <script>\n     function Ctrl($scope) {\n       $scope.list = [['a', 'b'], ['c', 'd']];\n     }\n   </script>\n   <div ng-controller=\"Ctrl\">\n     <div ng-repeat=\"innerList in list\" ng-init=\"outerIndex = $index\">\n       <div ng-repeat=\"value in innerList\" ng-init=\"innerIndex = $index\">\n          <span class=\"example-init\">list[ {{outerIndex}} ][ {{innerIndex}} ] = {{value}};</span>\n       </div>\n     </div>\n   </div>\n     </doc:source>\n     <doc:scenario>\n       it('should alias index positions', function() {\n         expect(element('.example-init').text())\n           .toBe('list[ 0 ][ 0 ] = a;' +\n                 'list[ 0 ][ 1 ] = b;' +\n                 'list[ 1 ][ 0 ] = c;' +\n                 'list[ 1 ][ 1 ] = d;');\n       });\n     </doc:scenario>\n   </doc:example>\n */\nvar ngInitDirective = ngDirective({\n  compile: function() {\n    return {\n      pre: function(scope, element, attrs) {\n        scope.$eval(attrs.ngInit);\n      }\n    };\n  }\n});\n\n/**\n * @ngdoc directive\n * @name ng.directive:ngNonBindable\n * @restrict AC\n * @priority 1000\n *\n * @description\n * The `ngNonBindable` directive tells Angular not to compile or bind the contents of the current\n * DOM element. This is useful if the element contains what appears to be Angular directives and\n * bindings but which should be ignored by Angular. This could be the case if you have a site that\n * displays snippets of code, for instance.\n *\n * @element ANY\n *\n * @example\n * In this example there are two locations where a simple interpolation binding (`{{}}`) is present,\n * but the one wrapped in `ngNonBindable` is left alone.\n *\n * @example\n    <doc:example>\n      <doc:source>\n        <div>Normal: {{1 + 2}}</div>\n        <div ng-non-bindable>Ignored: {{1 + 2}}</div>\n      </doc:source>\n      <doc:scenario>\n       it('should check ng-non-bindable', function() {\n         expect(using('.doc-example-live').binding('1 + 2')).toBe('3');\n         expect(using('.doc-example-live').element('div:last').text()).\n           toMatch(/1 \\+ 2/);\n       });\n      </doc:scenario>\n    </doc:example>\n */\nvar ngNonBindableDirective = ngDirective({ terminal: true, priority: 1000 });\n\n/**\n * @ngdoc directive\n * @name ng.directive:ngPluralize\n * @restrict EA\n *\n * @description\n * # Overview\n * `ngPluralize` is a directive that displays messages according to en-US localization rules.\n * These rules are bundled with angular.js, but can be overridden\n * (see {@link guide/i18n Angular i18n} dev guide). You configure ngPluralize directive\n * by specifying the mappings between\n * {@link http://unicode.org/repos/cldr-tmp/trunk/diff/supplemental/language_plural_rules.html\n * plural categories} and the strings to be displayed.\n *\n * # Plural categories and explicit number rules\n * There are two\n * {@link http://unicode.org/repos/cldr-tmp/trunk/diff/supplemental/language_plural_rules.html\n * plural categories} in Angular's default en-US locale: \"one\" and \"other\".\n *\n * While a plural category may match many numbers (for example, in en-US locale, \"other\" can match\n * any number that is not 1), an explicit number rule can only match one number. For example, the\n * explicit number rule for \"3\" matches the number 3. There are examples of plural categories\n * and explicit number rules throughout the rest of this documentation.\n *\n * # Configuring ngPluralize\n * You configure ngPluralize by providing 2 attributes: `count` and `when`.\n * You can also provide an optional attribute, `offset`.\n *\n * The value of the `count` attribute can be either a string or an {@link guide/expression\n * Angular expression}; these are evaluated on the current scope for its bound value.\n *\n * The `when` attribute specifies the mappings between plural categories and the actual\n * string to be displayed. The value of the attribute should be a JSON object.\n *\n * The following example shows how to configure ngPluralize:\n *\n * <pre>\n * <ng-pluralize count=\"personCount\"\n                 when=\"{'0': 'Nobody is viewing.',\n *                      'one': '1 person is viewing.',\n *                      'other': '{} people are viewing.'}\">\n * </ng-pluralize>\n *</pre>\n *\n * In the example, `\"0: Nobody is viewing.\"` is an explicit number rule. If you did not\n * specify this rule, 0 would be matched to the \"other\" category and \"0 people are viewing\"\n * would be shown instead of \"Nobody is viewing\". You can specify an explicit number rule for\n * other numbers, for example 12, so that instead of showing \"12 people are viewing\", you can\n * show \"a dozen people are viewing\".\n *\n * You can use a set of closed braces(`{}`) as a placeholder for the number that you want substituted\n * into pluralized strings. In the previous example, Angular will replace `{}` with\n * <span ng-non-bindable>`{{personCount}}`</span>. The closed braces `{}` is a placeholder\n * for <span ng-non-bindable>{{numberExpression}}</span>.\n *\n * # Configuring ngPluralize with offset\n * The `offset` attribute allows further customization of pluralized text, which can result in\n * a better user experience. For example, instead of the message \"4 people are viewing this document\",\n * you might display \"John, Kate and 2 others are viewing this document\".\n * The offset attribute allows you to offset a number by any desired value.\n * Let's take a look at an example:\n *\n * <pre>\n * <ng-pluralize count=\"personCount\" offset=2\n *               when=\"{'0': 'Nobody is viewing.',\n *                      '1': '{{person1}} is viewing.',\n *                      '2': '{{person1}} and {{person2}} are viewing.',\n *                      'one': '{{person1}}, {{person2}} and one other person are viewing.',\n *                      'other': '{{person1}}, {{person2}} and {} other people are viewing.'}\">\n * </ng-pluralize>\n * </pre>\n *\n * Notice that we are still using two plural categories(one, other), but we added\n * three explicit number rules 0, 1 and 2.\n * When one person, perhaps John, views the document, \"John is viewing\" will be shown.\n * When three people view the document, no explicit number rule is found, so\n * an offset of 2 is taken off 3, and Angular uses 1 to decide the plural category.\n * In this case, plural category 'one' is matched and \"John, Marry and one other person are viewing\"\n * is shown.\n *\n * Note that when you specify offsets, you must provide explicit number rules for\n * numbers from 0 up to and including the offset. If you use an offset of 3, for example,\n * you must provide explicit number rules for 0, 1, 2 and 3. You must also provide plural strings for\n * plural categories \"one\" and \"other\".\n *\n * @param {string|expression} count The variable to be bounded to.\n * @param {string} when The mapping between plural category to its corresponding strings.\n * @param {number=} offset Offset to deduct from the total number.\n *\n * @example\n    <doc:example>\n      <doc:source>\n        <script>\n          function Ctrl($scope) {\n            $scope.person1 = 'Igor';\n            $scope.person2 = 'Misko';\n            $scope.personCount = 1;\n          }\n        </script>\n        <div ng-controller=\"Ctrl\">\n          Person 1:<input type=\"text\" ng-model=\"person1\" value=\"Igor\" /><br/>\n          Person 2:<input type=\"text\" ng-model=\"person2\" value=\"Misko\" /><br/>\n          Number of People:<input type=\"text\" ng-model=\"personCount\" value=\"1\" /><br/>\n\n          <!--- Example with simple pluralization rules for en locale --->\n          Without Offset:\n          <ng-pluralize count=\"personCount\"\n                        when=\"{'0': 'Nobody is viewing.',\n                               'one': '1 person is viewing.',\n                               'other': '{} people are viewing.'}\">\n          </ng-pluralize><br>\n\n          <!--- Example with offset --->\n          With Offset(2):\n          <ng-pluralize count=\"personCount\" offset=2\n                        when=\"{'0': 'Nobody is viewing.',\n                               '1': '{{person1}} is viewing.',\n                               '2': '{{person1}} and {{person2}} are viewing.',\n                               'one': '{{person1}}, {{person2}} and one other person are viewing.',\n                               'other': '{{person1}}, {{person2}} and {} other people are viewing.'}\">\n          </ng-pluralize>\n        </div>\n      </doc:source>\n      <doc:scenario>\n        it('should show correct pluralized string', function() {\n          expect(element('.doc-example-live ng-pluralize:first').text()).\n                                             toBe('1 person is viewing.');\n          expect(element('.doc-example-live ng-pluralize:last').text()).\n                                                toBe('Igor is viewing.');\n\n          using('.doc-example-live').input('personCount').enter('0');\n          expect(element('.doc-example-live ng-pluralize:first').text()).\n                                               toBe('Nobody is viewing.');\n          expect(element('.doc-example-live ng-pluralize:last').text()).\n                                              toBe('Nobody is viewing.');\n\n          using('.doc-example-live').input('personCount').enter('2');\n          expect(element('.doc-example-live ng-pluralize:first').text()).\n                                            toBe('2 people are viewing.');\n          expect(element('.doc-example-live ng-pluralize:last').text()).\n                              toBe('Igor and Misko are viewing.');\n\n          using('.doc-example-live').input('personCount').enter('3');\n          expect(element('.doc-example-live ng-pluralize:first').text()).\n                                            toBe('3 people are viewing.');\n          expect(element('.doc-example-live ng-pluralize:last').text()).\n                              toBe('Igor, Misko and one other person are viewing.');\n\n          using('.doc-example-live').input('personCount').enter('4');\n          expect(element('.doc-example-live ng-pluralize:first').text()).\n                                            toBe('4 people are viewing.');\n          expect(element('.doc-example-live ng-pluralize:last').text()).\n                              toBe('Igor, Misko and 2 other people are viewing.');\n        });\n\n        it('should show data-binded names', function() {\n          using('.doc-example-live').input('personCount').enter('4');\n          expect(element('.doc-example-live ng-pluralize:last').text()).\n              toBe('Igor, Misko and 2 other people are viewing.');\n\n          using('.doc-example-live').input('person1').enter('Di');\n          using('.doc-example-live').input('person2').enter('Vojta');\n          expect(element('.doc-example-live ng-pluralize:last').text()).\n              toBe('Di, Vojta and 2 other people are viewing.');\n        });\n      </doc:scenario>\n    </doc:example>\n */\nvar ngPluralizeDirective = ['$locale', '$interpolate', function($locale, $interpolate) {\n  var BRACE = /{}/g;\n  return {\n    restrict: 'EA',\n    link: function(scope, element, attr) {\n      var numberExp = attr.count,\n          whenExp = attr.$attr.when && element.attr(attr.$attr.when), // we have {{}} in attrs\n          offset = attr.offset || 0,\n          whens = scope.$eval(whenExp) || {},\n          whensExpFns = {},\n          startSymbol = $interpolate.startSymbol(),\n          endSymbol = $interpolate.endSymbol(),\n          isWhen = /^when(Minus)?(.+)$/;\n\n      forEach(attr, function(expression, attributeName) {\n        if (isWhen.test(attributeName)) {\n          whens[lowercase(attributeName.replace('when', '').replace('Minus', '-'))] =\n            element.attr(attr.$attr[attributeName]);\n        }\n      });\n      forEach(whens, function(expression, key) {\n        whensExpFns[key] =\n          $interpolate(expression.replace(BRACE, startSymbol + numberExp + '-' +\n            offset + endSymbol));\n      });\n\n      scope.$watch(function ngPluralizeWatch() {\n        var value = parseFloat(scope.$eval(numberExp));\n\n        if (!isNaN(value)) {\n          //if explicit number rule such as 1, 2, 3... is defined, just use it. Otherwise,\n          //check it against pluralization rules in $locale service\n          if (!(value in whens)) value = $locale.pluralCat(value - offset);\n           return whensExpFns[value](scope, element, true);\n        } else {\n          return '';\n        }\n      }, function ngPluralizeWatchAction(newVal) {\n        element.text(newVal);\n      });\n    }\n  };\n}];\n\n/**\n * @ngdoc directive\n * @name ng.directive:ngRepeat\n *\n * @description\n * The `ngRepeat` directive instantiates a template once per item from a collection. Each template\n * instance gets its own scope, where the given loop variable is set to the current collection item,\n * and `$index` is set to the item index or key.\n *\n * Special properties are exposed on the local scope of each template instance, including:\n *\n * | Variable  | Type            | Details                                                                     |\n * |-----------|-----------------|-----------------------------------------------------------------------------|\n * | `$index`  | {@type number}  | iterator offset of the repeated element (0..length-1)                       |\n * | `$first`  | {@type boolean} | true if the repeated element is first in the iterator.                      |\n * | `$middle` | {@type boolean} | true if the repeated element is between the first and last in the iterator. |\n * | `$last`   | {@type boolean} | true if the repeated element is last in the iterator.                       |\n * | `$even`   | {@type boolean} | true if the iterator position `$index` is even (otherwise false).           |\n * | `$odd`    | {@type boolean} | true if the iterator position `$index` is odd (otherwise false).            |\n *\n *\n * # Special repeat start and end points\n * To repeat a series of elements instead of just one parent element, ngRepeat (as well as other ng directives) supports extending\n * the range of the repeater by defining explicit start and end points by using **ng-repeat-start** and **ng-repeat-end** respectively.\n * The **ng-repeat-start** directive works the same as **ng-repeat**, but will repeat all the HTML code (including the tag it's defined on)\n * up to and including the ending HTML tag where **ng-repeat-end** is placed.\n *\n * The example below makes use of this feature:\n * <pre>\n *   <header ng-repeat-start=\"item in items\">\n *     Header {{ item }}\n *   </header>\n *   <div class=\"body\">\n *     Body {{ item }}\n *   </div>\n *   <footer ng-repeat-end>\n *     Footer {{ item }}\n *   </footer>\n * </pre>\n *\n * And with an input of {@type ['A','B']} for the items variable in the example above, the output will evaluate to:\n * <pre>\n *   <header>\n *     Header A\n *   </header>\n *   <div class=\"body\">\n *     Body A\n *   </div>\n *   <footer>\n *     Footer A\n *   </footer>\n *   <header>\n *     Header B\n *   </header>\n *   <div class=\"body\">\n *     Body B\n *   </div>\n *   <footer>\n *     Footer B\n *   </footer>\n * </pre>\n *\n * The custom start and end points for ngRepeat also support all other HTML directive syntax flavors provided in AngularJS (such\n * as **data-ng-repeat-start**, **x-ng-repeat-start** and **ng:repeat-start**).\n *\n * @animations\n * enter - when a new item is added to the list or when an item is revealed after a filter\n * leave - when an item is removed from the list or when an item is filtered out\n * move - when an adjacent item is filtered out causing a reorder or when the item contents are reordered\n *\n * @element ANY\n * @scope\n * @priority 1000\n * @param {repeat_expression} ngRepeat The expression indicating how to enumerate a collection. These\n *   formats are currently supported:\n *\n *   * `variable in expression` – where variable is the user defined loop variable and `expression`\n *     is a scope expression giving the collection to enumerate.\n *\n *     For example: `album in artist.albums`.\n *\n *   * `(key, value) in expression` – where `key` and `value` can be any user defined identifiers,\n *     and `expression` is the scope expression giving the collection to enumerate.\n *\n *     For example: `(name, age) in {'adam':10, 'amalie':12}`.\n *\n *   * `variable in expression track by tracking_expression` – You can also provide an optional tracking function\n *     which can be used to associate the objects in the collection with the DOM elements. If no tracking function\n *     is specified the ng-repeat associates elements by identity in the collection. It is an error to have\n *     more than one tracking function to resolve to the same key. (This would mean that two distinct objects are\n *     mapped to the same DOM element, which is not possible.)  Filters should be applied to the expression,\n *     before specifying a tracking expression.\n *\n *     For example: `item in items` is equivalent to `item in items track by $id(item)'. This implies that the DOM elements\n *     will be associated by item identity in the array.\n *\n *     For example: `item in items track by $id(item)`. A built in `$id()` function can be used to assign a unique\n *     `$$hashKey` property to each item in the array. This property is then used as a key to associated DOM elements\n *     with the corresponding item in the array by identity. Moving the same object in array would move the DOM\n *     element in the same way ian the DOM.\n *\n *     For example: `item in items track by item.id` is a typical pattern when the items come from the database. In this\n *     case the object identity does not matter. Two objects are considered equivalent as long as their `id`\n *     property is same.\n *\n *     For example: `item in items | filter:searchText track by item.id` is a pattern that might be used to apply a filter\n *     to items in conjunction with a tracking expression.\n *\n * @example\n * This example initializes the scope to a list of names and\n * then uses `ngRepeat` to display every person:\n  <example animations=\"true\">\n    <file name=\"index.html\">\n      <div ng-init=\"friends = [\n        {name:'John', age:25, gender:'boy'},\n        {name:'Jessie', age:30, gender:'girl'},\n        {name:'Johanna', age:28, gender:'girl'},\n        {name:'Joy', age:15, gender:'girl'},\n        {name:'Mary', age:28, gender:'girl'},\n        {name:'Peter', age:95, gender:'boy'},\n        {name:'Sebastian', age:50, gender:'boy'},\n        {name:'Erika', age:27, gender:'girl'},\n        {name:'Patrick', age:40, gender:'boy'},\n        {name:'Samantha', age:60, gender:'girl'}\n      ]\">\n        I have {{friends.length}} friends. They are:\n        <input type=\"search\" ng-model=\"q\" placeholder=\"filter friends...\" />\n        <ul class=\"example-animate-container\">\n          <li class=\"animate-repeat\" ng-repeat=\"friend in friends | filter:q\">\n            [{{$index + 1}}] {{friend.name}} who is {{friend.age}} years old.\n          </li>\n        </ul>\n      </div>\n    </file>\n    <file name=\"animations.css\">\n      .example-animate-container {\n        background:white;\n        border:1px solid black;\n        list-style:none;\n        margin:0;\n        padding:0 10px;\n      }\n\n      .animate-repeat {\n        line-height:40px;\n        list-style:none;\n        box-sizing:border-box;\n      }\n\n      .animate-repeat.ng-move,\n      .animate-repeat.ng-enter,\n      .animate-repeat.ng-leave {\n        -webkit-transition:all linear 0.5s;\n        transition:all linear 0.5s;\n      }\n\n      .animate-repeat.ng-leave.ng-leave-active,\n      .animate-repeat.ng-move,\n      .animate-repeat.ng-enter {\n        opacity:0;\n        max-height:0;\n      }\n\n      .animate-repeat.ng-leave,\n      .animate-repeat.ng-move.ng-move-active,\n      .animate-repeat.ng-enter.ng-enter-active {\n        opacity:1;\n        max-height:40px;\n      }\n    </file>\n    <file name=\"scenario.js\">\n       it('should render initial data set', function() {\n         var r = using('.doc-example-live').repeater('ul li');\n         expect(r.count()).toBe(10);\n         expect(r.row(0)).toEqual([\"1\",\"John\",\"25\"]);\n         expect(r.row(1)).toEqual([\"2\",\"Jessie\",\"30\"]);\n         expect(r.row(9)).toEqual([\"10\",\"Samantha\",\"60\"]);\n         expect(binding('friends.length')).toBe(\"10\");\n       });\n\n       it('should update repeater when filter predicate changes', function() {\n         var r = using('.doc-example-live').repeater('ul li');\n         expect(r.count()).toBe(10);\n\n         input('q').enter('ma');\n\n         expect(r.count()).toBe(2);\n         expect(r.row(0)).toEqual([\"1\",\"Mary\",\"28\"]);\n         expect(r.row(1)).toEqual([\"2\",\"Samantha\",\"60\"]);\n       });\n      </file>\n    </example>\n */\nvar ngRepeatDirective = ['$parse', '$animate', function($parse, $animate) {\n  var NG_REMOVED = '$$NG_REMOVED';\n  var ngRepeatMinErr = minErr('ngRepeat');\n  return {\n    transclude: 'element',\n    priority: 1000,\n    terminal: true,\n    $$tlb: true,\n    compile: function(element, attr, linker) {\n      return function($scope, $element, $attr){\n        var expression = $attr.ngRepeat;\n        var match = expression.match(/^\\s*(.+)\\s+in\\s+(.*?)\\s*(\\s+track\\s+by\\s+(.+)\\s*)?$/),\n          trackByExp, trackByExpGetter, trackByIdExpFn, trackByIdArrayFn, trackByIdObjFn,\n          lhs, rhs, valueIdentifier, keyIdentifier,\n          hashFnLocals = {$id: hashKey};\n\n        if (!match) {\n          throw ngRepeatMinErr('iexp', \"Expected expression in form of '_item_ in _collection_[ track by _id_]' but got '{0}'.\",\n            expression);\n        }\n\n        lhs = match[1];\n        rhs = match[2];\n        trackByExp = match[4];\n\n        if (trackByExp) {\n          trackByExpGetter = $parse(trackByExp);\n          trackByIdExpFn = function(key, value, index) {\n            // assign key, value, and $index to the locals so that they can be used in hash functions\n            if (keyIdentifier) hashFnLocals[keyIdentifier] = key;\n            hashFnLocals[valueIdentifier] = value;\n            hashFnLocals.$index = index;\n            return trackByExpGetter($scope, hashFnLocals);\n          };\n        } else {\n          trackByIdArrayFn = function(key, value) {\n            return hashKey(value);\n          };\n          trackByIdObjFn = function(key) {\n            return key;\n          };\n        }\n\n        match = lhs.match(/^(?:([\\$\\w]+)|\\(([\\$\\w]+)\\s*,\\s*([\\$\\w]+)\\))$/);\n        if (!match) {\n          throw ngRepeatMinErr('iidexp', \"'_item_' in '_item_ in _collection_' should be an identifier or '(_key_, _value_)' expression, but got '{0}'.\",\n                                                                    lhs);\n        }\n        valueIdentifier = match[3] || match[1];\n        keyIdentifier = match[2];\n\n        // Store a list of elements from previous run. This is a hash where key is the item from the\n        // iterator, and the value is objects with following properties.\n        //   - scope: bound scope\n        //   - element: previous element.\n        //   - index: position\n        var lastBlockMap = {};\n\n        //watch props\n        $scope.$watchCollection(rhs, function ngRepeatAction(collection){\n          var index, length,\n              previousNode = $element[0],     // current position of the node\n              nextNode,\n              // Same as lastBlockMap but it has the current state. It will become the\n              // lastBlockMap on the next iteration.\n              nextBlockMap = {},\n              arrayLength,\n              childScope,\n              key, value, // key/value of iteration\n              trackById,\n              trackByIdFn,\n              collectionKeys,\n              block,       // last object information {scope, element, id}\n              nextBlockOrder = [],\n              elementsToRemove;\n\n\n          if (isArrayLike(collection)) {\n            collectionKeys = collection;\n            trackByIdFn = trackByIdExpFn || trackByIdArrayFn;\n          } else {\n            trackByIdFn = trackByIdExpFn || trackByIdObjFn;\n            // if object, extract keys, sort them and use to determine order of iteration over obj props\n            collectionKeys = [];\n            for (key in collection) {\n              if (collection.hasOwnProperty(key) && key.charAt(0) != '$') {\n                collectionKeys.push(key);\n              }\n            }\n            collectionKeys.sort();\n          }\n\n          arrayLength = collectionKeys.length;\n\n          // locate existing items\n          length = nextBlockOrder.length = collectionKeys.length;\n          for(index = 0; index < length; index++) {\n           key = (collection === collectionKeys) ? index : collectionKeys[index];\n           value = collection[key];\n           trackById = trackByIdFn(key, value, index);\n           assertNotHasOwnProperty(trackById, '`track by` id');\n           if(lastBlockMap.hasOwnProperty(trackById)) {\n             block = lastBlockMap[trackById];\n             delete lastBlockMap[trackById];\n             nextBlockMap[trackById] = block;\n             nextBlockOrder[index] = block;\n           } else if (nextBlockMap.hasOwnProperty(trackById)) {\n             // restore lastBlockMap\n             forEach(nextBlockOrder, function(block) {\n               if (block && block.startNode) lastBlockMap[block.id] = block;\n             });\n             // This is a duplicate and we need to throw an error\n             throw ngRepeatMinErr('dupes', \"Duplicates in a repeater are not allowed. Use 'track by' expression to specify unique keys. Repeater: {0}, Duplicate key: {1}\",\n                                                                                                                                                    expression,       trackById);\n           } else {\n             // new never before seen block\n             nextBlockOrder[index] = { id: trackById };\n             nextBlockMap[trackById] = false;\n           }\n         }\n\n          // remove existing items\n          for (key in lastBlockMap) {\n            // lastBlockMap is our own object so we don't need to use special hasOwnPropertyFn\n            if (lastBlockMap.hasOwnProperty(key)) {\n              block = lastBlockMap[key];\n              elementsToRemove = getBlockElements(block);\n              $animate.leave(elementsToRemove);\n              forEach(elementsToRemove, function(element) { element[NG_REMOVED] = true; });\n              block.scope.$destroy();\n            }\n          }\n\n          // we are not using forEach for perf reasons (trying to avoid #call)\n          for (index = 0, length = collectionKeys.length; index < length; index++) {\n            key = (collection === collectionKeys) ? index : collectionKeys[index];\n            value = collection[key];\n            block = nextBlockOrder[index];\n            if (nextBlockOrder[index - 1]) previousNode = nextBlockOrder[index - 1].endNode;\n\n            if (block.startNode) {\n              // if we have already seen this object, then we need to reuse the\n              // associated scope/element\n              childScope = block.scope;\n\n              nextNode = previousNode;\n              do {\n                nextNode = nextNode.nextSibling;\n              } while(nextNode && nextNode[NG_REMOVED]);\n\n              if (block.startNode != nextNode) {\n                // existing item which got moved\n                $animate.move(getBlockElements(block), null, jqLite(previousNode));\n              }\n              previousNode = block.endNode;\n            } else {\n              // new item which we don't know about\n              childScope = $scope.$new();\n            }\n\n            childScope[valueIdentifier] = value;\n            if (keyIdentifier) childScope[keyIdentifier] = key;\n            childScope.$index = index;\n            childScope.$first = (index === 0);\n            childScope.$last = (index === (arrayLength - 1));\n            childScope.$middle = !(childScope.$first || childScope.$last);\n            // jshint bitwise: false\n            childScope.$odd = !(childScope.$even = (index&1) === 0);\n            // jshint bitwise: true\n\n            if (!block.startNode) {\n              linker(childScope, function(clone) {\n                clone[clone.length++] = document.createComment(' end ngRepeat: ' + expression + ' ');\n                $animate.enter(clone, null, jqLite(previousNode));\n                previousNode = clone;\n                block.scope = childScope;\n                block.startNode = previousNode && previousNode.endNode ? previousNode.endNode : clone[0];\n                block.endNode = clone[clone.length - 1];\n                nextBlockMap[block.id] = block;\n              });\n            }\n          }\n          lastBlockMap = nextBlockMap;\n        });\n      };\n    }\n  };\n}];\n\n/**\n * @ngdoc directive\n * @name ng.directive:ngShow\n *\n * @description\n * The `ngShow` directive shows or hides the given HTML element based on the expression\n * provided to the ngShow attribute. The element is shown or hidden by removing or adding\n * the `ng-hide` CSS class onto the element. The `.ng-hide` CSS class is predefined\n * in AngularJS and sets the display style to none (using an !important flag).\n * For CSP mode please add `angular-csp.css` to your html file (see {@link ng.directive:ngCsp ngCsp}).\n *\n * <pre>\n * <!-- when $scope.myValue is truthy (element is visible) -->\n * <div ng-show=\"myValue\"></div>\n *\n * <!-- when $scope.myValue is falsy (element is hidden) -->\n * <div ng-show=\"myValue\" class=\"ng-hide\"></div>\n * </pre>\n *\n * When the ngShow expression evaluates to false then the ng-hide CSS class is added to the class attribute\n * on the element causing it to become hidden. When true, the ng-hide CSS class is removed\n * from the element causing the element not to appear hidden.\n *\n * ## Why is !important used?\n *\n * You may be wondering why !important is used for the .ng-hide CSS class. This is because the `.ng-hide` selector\n * can be easily overridden by heavier selectors. For example, something as simple\n * as changing the display style on a HTML list item would make hidden elements appear visible.\n * This also becomes a bigger issue when dealing with CSS frameworks.\n *\n * By using !important, the show and hide behavior will work as expected despite any clash between CSS selector\n * specificity (when !important isn't used with any conflicting styles). If a developer chooses to override the\n * styling to change how to hide an element then it is just a matter of using !important in their own CSS code.\n *\n * ### Overriding .ng-hide\n *\n * If you wish to change the hide behavior with ngShow/ngHide then this can be achieved by\n * restating the styles for the .ng-hide class in CSS:\n * <pre>\n * .ng-hide {\n *   //!annotate CSS Specificity|Not to worry, this will override the AngularJS default...\n *   display:block!important;\n *\n *   //this is just another form of hiding an element\n *   position:absolute;\n *   top:-9999px;\n *   left:-9999px;\n * }\n * </pre>\n *\n * Just remember to include the important flag so the CSS override will function.\n *\n * ## A note about animations with ngShow\n *\n * Animations in ngShow/ngHide work with the show and hide events that are triggered when the directive expression\n * is true and false. This system works like the animation system present with ngClass except that\n * you must also include the !important flag to override the display property\n * so that you can perform an animation when the element is hidden during the time of the animation.\n *\n * <pre>\n * //\n * //a working example can be found at the bottom of this page\n * //\n * .my-element.ng-hide-add, .my-element.ng-hide-remove {\n *   transition:0.5s linear all;\n *   display:block!important;\n * }\n *\n * .my-element.ng-hide-add { ... }\n * .my-element.ng-hide-add.ng-hide-add-active { ... }\n * .my-element.ng-hide-remove { ... }\n * .my-element.ng-hide-remove.ng-hide-remove-active { ... }\n * </pre>\n *\n * @animations\n * addClass: .ng-hide - happens after the ngShow expression evaluates to a truthy value and the just before contents are set to visible\n * removeClass: .ng-hide - happens after the ngShow expression evaluates to a non truthy value and just before the contents are set to hidden\n *\n * @element ANY\n * @param {expression} ngShow If the {@link guide/expression expression} is truthy\n *     then the element is shown or hidden respectively.\n *\n * @example\n  <example animations=\"true\">\n    <file name=\"index.html\">\n      Click me: <input type=\"checkbox\" ng-model=\"checked\"><br/>\n      <div>\n        Show:\n        <div class=\"check-element animate-show\" ng-show=\"checked\">\n          <span class=\"icon-thumbs-up\"></span> I show up when your checkbox is checked.\n        </div>\n      </div>\n      <div>\n        Hide:\n        <div class=\"check-element animate-show\" ng-hide=\"checked\">\n          <span class=\"icon-thumbs-down\"></span> I hide when your checkbox is checked.\n        </div>\n      </div>\n    </file>\n    <file name=\"animations.css\">\n      .animate-show {\n        -webkit-transition:all linear 0.5s;\n        transition:all linear 0.5s;\n        line-height:20px;\n        opacity:1;\n        padding:10px;\n        border:1px solid black;\n        background:white;\n      }\n\n      .animate-show.ng-hide-add,\n      .animate-show.ng-hide-remove {\n        display:block!important;\n      }\n\n      .animate-show.ng-hide {\n        line-height:0;\n        opacity:0;\n        padding:0 10px;\n      }\n\n      .check-element {\n        padding:10px;\n        border:1px solid black;\n        background:white;\n      }\n    </file>\n    <file name=\"scenario.js\">\n       it('should check ng-show / ng-hide', function() {\n         expect(element('.doc-example-live span:first:hidden').count()).toEqual(1);\n         expect(element('.doc-example-live span:last:visible').count()).toEqual(1);\n\n         input('checked').check();\n\n         expect(element('.doc-example-live span:first:visible').count()).toEqual(1);\n         expect(element('.doc-example-live span:last:hidden').count()).toEqual(1);\n       });\n    </file>\n  </example>\n */\nvar ngShowDirective = ['$animate', function($animate) {\n  return function(scope, element, attr) {\n    scope.$watch(attr.ngShow, function ngShowWatchAction(value){\n      $animate[toBoolean(value) ? 'removeClass' : 'addClass'](element, 'ng-hide');\n    });\n  };\n}];\n\n\n/**\n * @ngdoc directive\n * @name ng.directive:ngHide\n *\n * @description\n * The `ngHide` directive shows or hides the given HTML element based on the expression\n * provided to the ngHide attribute. The element is shown or hidden by removing or adding\n * the `ng-hide` CSS class onto the element. The `.ng-hide` CSS class is predefined\n * in AngularJS and sets the display style to none (using an !important flag).\n * For CSP mode please add `angular-csp.css` to your html file (see {@link ng.directive:ngCsp ngCsp}).\n *\n * <pre>\n * <!-- when $scope.myValue is truthy (element is hidden) -->\n * <div ng-hide=\"myValue\"></div>\n *\n * <!-- when $scope.myValue is falsy (element is visible) -->\n * <div ng-hide=\"myValue\" class=\"ng-hide\"></div>\n * </pre>\n *\n * When the ngHide expression evaluates to true then the .ng-hide CSS class is added to the class attribute\n * on the element causing it to become hidden. When false, the ng-hide CSS class is removed\n * from the element causing the element not to appear hidden.\n *\n * ## Why is !important used?\n *\n * You may be wondering why !important is used for the .ng-hide CSS class. This is because the `.ng-hide` selector\n * can be easily overridden by heavier selectors. For example, something as simple\n * as changing the display style on a HTML list item would make hidden elements appear visible.\n * This also becomes a bigger issue when dealing with CSS frameworks.\n *\n * By using !important, the show and hide behavior will work as expected despite any clash between CSS selector\n * specificity (when !important isn't used with any conflicting styles). If a developer chooses to override the\n * styling to change how to hide an element then it is just a matter of using !important in their own CSS code.\n *\n * ### Overriding .ng-hide\n *\n * If you wish to change the hide behavior with ngShow/ngHide then this can be achieved by\n * restating the styles for the .ng-hide class in CSS:\n * <pre>\n * .ng-hide {\n *   //!annotate CSS Specificity|Not to worry, this will override the AngularJS default...\n *   display:block!important;\n *\n *   //this is just another form of hiding an element\n *   position:absolute;\n *   top:-9999px;\n *   left:-9999px;\n * }\n * </pre>\n *\n * Just remember to include the important flag so the CSS override will function.\n *\n * ## A note about animations with ngHide\n *\n * Animations in ngShow/ngHide work with the show and hide events that are triggered when the directive expression\n * is true and false. This system works like the animation system present with ngClass, except that\n * you must also include the !important flag to override the display property so\n * that you can perform an animation when the element is hidden during the time of the animation.\n *\n * <pre>\n * //\n * //a working example can be found at the bottom of this page\n * //\n * .my-element.ng-hide-add, .my-element.ng-hide-remove {\n *   transition:0.5s linear all;\n *   display:block!important;\n * }\n *\n * .my-element.ng-hide-add { ... }\n * .my-element.ng-hide-add.ng-hide-add-active { ... }\n * .my-element.ng-hide-remove { ... }\n * .my-element.ng-hide-remove.ng-hide-remove-active { ... }\n * </pre>\n *\n * @animations\n * removeClass: .ng-hide - happens after the ngHide expression evaluates to a truthy value and just before the contents are set to hidden\n * addClass: .ng-hide - happens after the ngHide expression evaluates to a non truthy value and just before the contents are set to visible\n *\n * @element ANY\n * @param {expression} ngHide If the {@link guide/expression expression} is truthy then\n *     the element is shown or hidden respectively.\n *\n * @example\n  <example animations=\"true\">\n    <file name=\"index.html\">\n      Click me: <input type=\"checkbox\" ng-model=\"checked\"><br/>\n      <div>\n        Show:\n        <div class=\"check-element animate-hide\" ng-show=\"checked\">\n          <span class=\"icon-thumbs-up\"></span> I show up when your checkbox is checked.\n        </div>\n      </div>\n      <div>\n        Hide:\n        <div class=\"check-element animate-hide\" ng-hide=\"checked\">\n          <span class=\"icon-thumbs-down\"></span> I hide when your checkbox is checked.\n        </div>\n      </div>\n    </file>\n    <file name=\"animations.css\">\n      .animate-hide {\n        -webkit-transition:all linear 0.5s;\n        transition:all linear 0.5s;\n        line-height:20px;\n        opacity:1;\n        padding:10px;\n        border:1px solid black;\n        background:white;\n      }\n\n      .animate-hide.ng-hide-add,\n      .animate-hide.ng-hide-remove {\n        display:block!important;\n      }\n\n      .animate-hide.ng-hide {\n        line-height:0;\n        opacity:0;\n        padding:0 10px;\n      }\n\n      .check-element {\n        padding:10px;\n        border:1px solid black;\n        background:white;\n      }\n    </file>\n    <file name=\"scenario.js\">\n       it('should check ng-show / ng-hide', function() {\n         expect(element('.doc-example-live .check-element:first:hidden').count()).toEqual(1);\n         expect(element('.doc-example-live .check-element:last:visible').count()).toEqual(1);\n\n         input('checked').check();\n\n         expect(element('.doc-example-live .check-element:first:visible').count()).toEqual(1);\n         expect(element('.doc-example-live .check-element:last:hidden').count()).toEqual(1);\n       });\n    </file>\n  </example>\n */\nvar ngHideDirective = ['$animate', function($animate) {\n  return function(scope, element, attr) {\n    scope.$watch(attr.ngHide, function ngHideWatchAction(value){\n      $animate[toBoolean(value) ? 'addClass' : 'removeClass'](element, 'ng-hide');\n    });\n  };\n}];\n\n/**\n * @ngdoc directive\n * @name ng.directive:ngStyle\n * @restrict AC\n *\n * @description\n * The `ngStyle` directive allows you to set CSS style on an HTML element conditionally.\n *\n * @element ANY\n * @param {expression} ngStyle {@link guide/expression Expression} which evals to an\n *      object whose keys are CSS style names and values are corresponding values for those CSS\n *      keys.\n *\n * @example\n   <example>\n     <file name=\"index.html\">\n        <input type=\"button\" value=\"set\" ng-click=\"myStyle={color:'red'}\">\n        <input type=\"button\" value=\"clear\" ng-click=\"myStyle={}\">\n        <br/>\n        <span ng-style=\"myStyle\">Sample Text</span>\n        <pre>myStyle={{myStyle}}</pre>\n     </file>\n     <file name=\"style.css\">\n       span {\n         color: black;\n       }\n     </file>\n     <file name=\"scenario.js\">\n       it('should check ng-style', function() {\n         expect(element('.doc-example-live span').css('color')).toBe('rgb(0, 0, 0)');\n         element('.doc-example-live :button[value=set]').click();\n         expect(element('.doc-example-live span').css('color')).toBe('rgb(255, 0, 0)');\n         element('.doc-example-live :button[value=clear]').click();\n         expect(element('.doc-example-live span').css('color')).toBe('rgb(0, 0, 0)');\n       });\n     </file>\n   </example>\n */\nvar ngStyleDirective = ngDirective(function(scope, element, attr) {\n  scope.$watch(attr.ngStyle, function ngStyleWatchAction(newStyles, oldStyles) {\n    if (oldStyles && (newStyles !== oldStyles)) {\n      forEach(oldStyles, function(val, style) { element.css(style, '');});\n    }\n    if (newStyles) element.css(newStyles);\n  }, true);\n});\n\n/**\n * @ngdoc directive\n * @name ng.directive:ngSwitch\n * @restrict EA\n *\n * @description\n * The ngSwitch directive is used to conditionally swap DOM structure on your template based on a scope expression.\n * Elements within ngSwitch but without ngSwitchWhen or ngSwitchDefault directives will be preserved at the location\n * as specified in the template.\n *\n * The directive itself works similar to ngInclude, however, instead of downloading template code (or loading it\n * from the template cache), ngSwitch simply choses one of the nested elements and makes it visible based on which element\n * matches the value obtained from the evaluated expression. In other words, you define a container element\n * (where you place the directive), place an expression on the **on=\"...\" attribute**\n * (or the **ng-switch=\"...\" attribute**), define any inner elements inside of the directive and place\n * a when attribute per element. The when attribute is used to inform ngSwitch which element to display when the on\n * expression is evaluated. If a matching expression is not found via a when attribute then an element with the default\n * attribute is displayed.\n *\n * @animations\n * enter - happens after the ngSwitch contents change and the matched child element is placed inside the container\n * leave - happens just after the ngSwitch contents change and just before the former contents are removed from the DOM\n *\n * @usage\n * <ANY ng-switch=\"expression\">\n *   <ANY ng-switch-when=\"matchValue1\">...</ANY>\n *   <ANY ng-switch-when=\"matchValue2\">...</ANY>\n *   <ANY ng-switch-default>...</ANY>\n * </ANY>\n *\n * @scope\n * @priority 800\n * @param {*} ngSwitch|on expression to match against <tt>ng-switch-when</tt>.\n * @paramDescription\n * On child elements add:\n *\n * * `ngSwitchWhen`: the case statement to match against. If match then this\n *   case will be displayed. If the same match appears multiple times, all the\n *   elements will be displayed.\n * * `ngSwitchDefault`: the default case when no other case match. If there\n *   are multiple default cases, all of them will be displayed when no other\n *   case match.\n *\n *\n * @example\n  <example animations=\"true\">\n    <file name=\"index.html\">\n      <div ng-controller=\"Ctrl\">\n        <select ng-model=\"selection\" ng-options=\"item for item in items\">\n        </select>\n        <tt>selection={{selection}}</tt>\n        <hr/>\n        <div class=\"animate-switch-container\"\n          ng-switch on=\"selection\">\n            <div class=\"animate-switch\" ng-switch-when=\"settings\">Settings Div</div>\n            <div class=\"animate-switch\" ng-switch-when=\"home\">Home Span</div>\n            <div class=\"animate-switch\" ng-switch-default>default</div>\n        </div>\n      </div>\n    </file>\n    <file name=\"script.js\">\n      function Ctrl($scope) {\n        $scope.items = ['settings', 'home', 'other'];\n        $scope.selection = $scope.items[0];\n      }\n    </file>\n    <file name=\"animations.css\">\n      .animate-switch-container {\n        position:relative;\n        background:white;\n        border:1px solid black;\n        height:40px;\n        overflow:hidden;\n      }\n\n      .animate-switch {\n        padding:10px;\n      }\n\n      .animate-switch.ng-animate {\n        -webkit-transition:all cubic-bezier(0.250, 0.460, 0.450, 0.940) 0.5s;\n        transition:all cubic-bezier(0.250, 0.460, 0.450, 0.940) 0.5s;\n\n        position:absolute;\n        top:0;\n        left:0;\n        right:0;\n        bottom:0;\n      }\n\n      .animate-switch.ng-leave.ng-leave-active,\n      .animate-switch.ng-enter {\n        top:-50px;\n      }\n      .animate-switch.ng-leave,\n      .animate-switch.ng-enter.ng-enter-active {\n        top:0;\n      }\n    </file>\n    <file name=\"scenario.js\">\n      it('should start in settings', function() {\n        expect(element('.doc-example-live [ng-switch]').text()).toMatch(/Settings Div/);\n      });\n      it('should change to home', function() {\n        select('selection').option('home');\n        expect(element('.doc-example-live [ng-switch]').text()).toMatch(/Home Span/);\n      });\n      it('should select default', function() {\n        select('selection').option('other');\n        expect(element('.doc-example-live [ng-switch]').text()).toMatch(/default/);\n      });\n    </file>\n  </example>\n */\nvar ngSwitchDirective = ['$animate', function($animate) {\n  return {\n    restrict: 'EA',\n    require: 'ngSwitch',\n\n    // asks for $scope to fool the BC controller module\n    controller: ['$scope', function ngSwitchController() {\n     this.cases = {};\n    }],\n    link: function(scope, element, attr, ngSwitchController) {\n      var watchExpr = attr.ngSwitch || attr.on,\n          selectedTranscludes,\n          selectedElements,\n          selectedScopes = [];\n\n      scope.$watch(watchExpr, function ngSwitchWatchAction(value) {\n        for (var i= 0, ii=selectedScopes.length; i<ii; i++) {\n          selectedScopes[i].$destroy();\n          $animate.leave(selectedElements[i]);\n        }\n\n        selectedElements = [];\n        selectedScopes = [];\n\n        if ((selectedTranscludes = ngSwitchController.cases['!' + value] || ngSwitchController.cases['?'])) {\n          scope.$eval(attr.change);\n          forEach(selectedTranscludes, function(selectedTransclude) {\n            var selectedScope = scope.$new();\n            selectedScopes.push(selectedScope);\n            selectedTransclude.transclude(selectedScope, function(caseElement) {\n              var anchor = selectedTransclude.element;\n\n              selectedElements.push(caseElement);\n              $animate.enter(caseElement, anchor.parent(), anchor);\n            });\n          });\n        }\n      });\n    }\n  };\n}];\n\nvar ngSwitchWhenDirective = ngDirective({\n  transclude: 'element',\n  priority: 800,\n  require: '^ngSwitch',\n  compile: function(element, attrs, transclude) {\n    return function(scope, element, attr, ctrl) {\n      ctrl.cases['!' + attrs.ngSwitchWhen] = (ctrl.cases['!' + attrs.ngSwitchWhen] || []);\n      ctrl.cases['!' + attrs.ngSwitchWhen].push({ transclude: transclude, element: element });\n    };\n  }\n});\n\nvar ngSwitchDefaultDirective = ngDirective({\n  transclude: 'element',\n  priority: 800,\n  require: '^ngSwitch',\n  compile: function(element, attrs, transclude) {\n    return function(scope, element, attr, ctrl) {\n      ctrl.cases['?'] = (ctrl.cases['?'] || []);\n      ctrl.cases['?'].push({ transclude: transclude, element: element });\n    };\n  }\n});\n\n/**\n * @ngdoc directive\n * @name ng.directive:ngTransclude\n * @restrict AC\n *\n * @description\n * Directive that marks the insertion point for the transcluded DOM of the nearest parent directive that uses transclusion.\n *\n * Any existing content of the element that this directive is placed on will be removed before the transcluded content is inserted.\n *\n * @element ANY\n *\n * @example\n   <doc:example module=\"transclude\">\n     <doc:source>\n       <script>\n         function Ctrl($scope) {\n           $scope.title = 'Lorem Ipsum';\n           $scope.text = 'Neque porro quisquam est qui dolorem ipsum quia dolor...';\n         }\n\n         angular.module('transclude', [])\n          .directive('pane', function(){\n             return {\n               restrict: 'E',\n               transclude: true,\n               scope: { title:'@' },\n               template: '<div style=\"border: 1px solid black;\">' +\n                           '<div style=\"background-color: gray\">{{title}}</div>' +\n                           '<div ng-transclude></div>' +\n                         '</div>'\n             };\n         });\n       </script>\n       <div ng-controller=\"Ctrl\">\n         <input ng-model=\"title\"><br>\n         <textarea ng-model=\"text\"></textarea> <br/>\n         <pane title=\"{{title}}\">{{text}}</pane>\n       </div>\n     </doc:source>\n     <doc:scenario>\n        it('should have transcluded', function() {\n          input('title').enter('TITLE');\n          input('text').enter('TEXT');\n          expect(binding('title')).toEqual('TITLE');\n          expect(binding('text')).toEqual('TEXT');\n        });\n     </doc:scenario>\n   </doc:example>\n *\n */\nvar ngTranscludeDirective = ngDirective({\n  controller: ['$element', '$transclude', function($element, $transclude) {\n    if (!$transclude) {\n      throw minErr('ngTransclude')('orphan',\n          'Illegal use of ngTransclude directive in the template! ' +\n          'No parent directive that requires a transclusion found. ' +\n          'Element: {0}',\n          startingTag($element));\n    }\n\n    // remember the transclusion fn but call it during linking so that we don't process transclusion before directives on\n    // the parent element even when the transclusion replaces the current element. (we can't use priority here because\n    // that applies only to compile fns and not controllers\n    this.$transclude = $transclude;\n  }],\n\n  link: function($scope, $element, $attrs, controller) {\n    controller.$transclude(function(clone) {\n      $element.html('');\n      $element.append(clone);\n    });\n  }\n});\n\n/**\n * @ngdoc directive\n * @name ng.directive:script\n * @restrict E\n *\n * @description\n * Load content of a script tag, with type `text/ng-template`, into `$templateCache`, so that the\n * template can be used by `ngInclude`, `ngView` or directive templates.\n *\n * @param {'text/ng-template'} type must be set to `'text/ng-template'`\n *\n * @example\n  <doc:example>\n    <doc:source>\n      <script type=\"text/ng-template\" id=\"/tpl.html\">\n        Content of the template.\n      </script>\n\n      <a ng-click=\"currentTpl='/tpl.html'\" id=\"tpl-link\">Load inlined template</a>\n      <div id=\"tpl-content\" ng-include src=\"currentTpl\"></div>\n    </doc:source>\n    <doc:scenario>\n      it('should load template defined inside script tag', function() {\n        element('#tpl-link').click();\n        expect(element('#tpl-content').text()).toMatch(/Content of the template/);\n      });\n    </doc:scenario>\n  </doc:example>\n */\nvar scriptDirective = ['$templateCache', function($templateCache) {\n  return {\n    restrict: 'E',\n    terminal: true,\n    compile: function(element, attr) {\n      if (attr.type == 'text/ng-template') {\n        var templateUrl = attr.id,\n            // IE is not consistent, in scripts we have to read .text but in other nodes we have to read .textContent\n            text = element[0].text;\n\n        $templateCache.put(templateUrl, text);\n      }\n    }\n  };\n}];\n\nvar ngOptionsMinErr = minErr('ngOptions');\n/**\n * @ngdoc directive\n * @name ng.directive:select\n * @restrict E\n *\n * @description\n * HTML `SELECT` element with angular data-binding.\n *\n * # `ngOptions`\n *\n * The `ngOptions` attribute can be used to dynamically generate a list of `<option>`\n * elements for the `<select>` element using the array or object obtained by evaluating the\n * `ngOptions` comprehension_expression.\n *\n * When an item in the `<select>` menu is selected, the array element or object property\n * represented by the selected option will be bound to the model identified by the `ngModel`\n * directive.\n *\n * Optionally, a single hard-coded `<option>` element, with the value set to an empty string, can\n * be nested into the `<select>` element. This element will then represent the `null` or \"not selected\"\n * option. See example below for demonstration.\n *\n * Note: `ngOptions` provides iterator facility for `<option>` element which should be used instead\n * of {@link ng.directive:ngRepeat ngRepeat} when you want the\n * `select` model to be bound to a non-string value. This is because an option element can only\n * be bound to string values at present.\n *\n * @param {string} ngModel Assignable angular expression to data-bind to.\n * @param {string=} name Property name of the form under which the control is published.\n * @param {string=} required The control is considered valid only if value is entered.\n * @param {string=} ngRequired Adds `required` attribute and `required` validation constraint to\n *    the element when the ngRequired expression evaluates to true. Use `ngRequired` instead of\n *    `required` when you want to data-bind to the `required` attribute.\n * @param {comprehension_expression=} ngOptions in one of the following forms:\n *\n *   * for array data sources:\n *     * `label` **`for`** `value` **`in`** `array`\n *     * `select` **`as`** `label` **`for`** `value` **`in`** `array`\n *     * `label`  **`group by`** `group` **`for`** `value` **`in`** `array`\n *     * `select` **`as`** `label` **`group by`** `group` **`for`** `value` **`in`** `array` **`track by`** `trackexpr`\n *   * for object data sources:\n *     * `label` **`for (`**`key` **`,`** `value`**`) in`** `object`\n *     * `select` **`as`** `label` **`for (`**`key` **`,`** `value`**`) in`** `object`\n *     * `label` **`group by`** `group` **`for (`**`key`**`,`** `value`**`) in`** `object`\n *     * `select` **`as`** `label` **`group by`** `group`\n *         **`for` `(`**`key`**`,`** `value`**`) in`** `object`\n *\n * Where:\n *\n *   * `array` / `object`: an expression which evaluates to an array / object to iterate over.\n *   * `value`: local variable which will refer to each item in the `array` or each property value\n *      of `object` during iteration.\n *   * `key`: local variable which will refer to a property name in `object` during iteration.\n *   * `label`: The result of this expression will be the label for `<option>` element. The\n *     `expression` will most likely refer to the `value` variable (e.g. `value.propertyName`).\n *   * `select`: The result of this expression will be bound to the model of the parent `<select>`\n *      element. If not specified, `select` expression will default to `value`.\n *   * `group`: The result of this expression will be used to group options using the `<optgroup>`\n *      DOM element.\n *   * `trackexpr`: Used when working with an array of objects. The result of this expression will be\n *      used to identify the objects in the array. The `trackexpr` will most likely refer to the\n *     `value` variable (e.g. `value.propertyName`).\n *\n * @example\n    <doc:example>\n      <doc:source>\n        <script>\n        function MyCntrl($scope) {\n          $scope.colors = [\n            {name:'black', shade:'dark'},\n            {name:'white', shade:'light'},\n            {name:'red', shade:'dark'},\n            {name:'blue', shade:'dark'},\n            {name:'yellow', shade:'light'}\n          ];\n          $scope.color = $scope.colors[2]; // red\n        }\n        </script>\n        <div ng-controller=\"MyCntrl\">\n          <ul>\n            <li ng-repeat=\"color in colors\">\n              Name: <input ng-model=\"color.name\">\n              [<a href ng-click=\"colors.splice($index, 1)\">X</a>]\n            </li>\n            <li>\n              [<a href ng-click=\"colors.push({})\">add</a>]\n            </li>\n          </ul>\n          <hr/>\n          Color (null not allowed):\n          <select ng-model=\"color\" ng-options=\"c.name for c in colors\"></select><br>\n\n          Color (null allowed):\n          <span  class=\"nullable\">\n            <select ng-model=\"color\" ng-options=\"c.name for c in colors\">\n              <option value=\"\">-- choose color --</option>\n            </select>\n          </span><br/>\n\n          Color grouped by shade:\n          <select ng-model=\"color\" ng-options=\"c.name group by c.shade for c in colors\">\n          </select><br/>\n\n\n          Select <a href ng-click=\"color={name:'not in list'}\">bogus</a>.<br>\n          <hr/>\n          Currently selected: {{ {selected_color:color}  }}\n          <div style=\"border:solid 1px black; height:20px\"\n               ng-style=\"{'background-color':color.name}\">\n          </div>\n        </div>\n      </doc:source>\n      <doc:scenario>\n         it('should check ng-options', function() {\n           expect(binding('{selected_color:color}')).toMatch('red');\n           select('color').option('0');\n           expect(binding('{selected_color:color}')).toMatch('black');\n           using('.nullable').select('color').option('');\n           expect(binding('{selected_color:color}')).toMatch('null');\n         });\n      </doc:scenario>\n    </doc:example>\n */\n\nvar ngOptionsDirective = valueFn({ terminal: true });\n// jshint maxlen: false\nvar selectDirective = ['$compile', '$parse', function($compile,   $parse) {\n                         //0000111110000000000022220000000000000000000000333300000000000000444444444444444000000000555555555555555000000066666666666666600000000000000007777000000000000000000088888\n  var NG_OPTIONS_REGEXP = /^\\s*(.*?)(?:\\s+as\\s+(.*?))?(?:\\s+group\\s+by\\s+(.*))?\\s+for\\s+(?:([\\$\\w][\\$\\w]*)|(?:\\(\\s*([\\$\\w][\\$\\w]*)\\s*,\\s*([\\$\\w][\\$\\w]*)\\s*\\)))\\s+in\\s+(.*?)(?:\\s+track\\s+by\\s+(.*?))?$/,\n      nullModelCtrl = {$setViewValue: noop};\n// jshint maxlen: 100\n\n  return {\n    restrict: 'E',\n    require: ['select', '?ngModel'],\n    controller: ['$element', '$scope', '$attrs', function($element, $scope, $attrs) {\n      var self = this,\n          optionsMap = {},\n          ngModelCtrl = nullModelCtrl,\n          nullOption,\n          unknownOption;\n\n\n      self.databound = $attrs.ngModel;\n\n\n      self.init = function(ngModelCtrl_, nullOption_, unknownOption_) {\n        ngModelCtrl = ngModelCtrl_;\n        nullOption = nullOption_;\n        unknownOption = unknownOption_;\n      };\n\n\n      self.addOption = function(value) {\n        assertNotHasOwnProperty(value, '\"option value\"');\n        optionsMap[value] = true;\n\n        if (ngModelCtrl.$viewValue == value) {\n          $element.val(value);\n          if (unknownOption.parent()) unknownOption.remove();\n        }\n      };\n\n\n      self.removeOption = function(value) {\n        if (this.hasOption(value)) {\n          delete optionsMap[value];\n          if (ngModelCtrl.$viewValue == value) {\n            this.renderUnknownOption(value);\n          }\n        }\n      };\n\n\n      self.renderUnknownOption = function(val) {\n        var unknownVal = '? ' + hashKey(val) + ' ?';\n        unknownOption.val(unknownVal);\n        $element.prepend(unknownOption);\n        $element.val(unknownVal);\n        unknownOption.prop('selected', true); // needed for IE\n      };\n\n\n      self.hasOption = function(value) {\n        return optionsMap.hasOwnProperty(value);\n      };\n\n      $scope.$on('$destroy', function() {\n        // disable unknown option so that we don't do work when the whole select is being destroyed\n        self.renderUnknownOption = noop;\n      });\n    }],\n\n    link: function(scope, element, attr, ctrls) {\n      // if ngModel is not defined, we don't need to do anything\n      if (!ctrls[1]) return;\n\n      var selectCtrl = ctrls[0],\n          ngModelCtrl = ctrls[1],\n          multiple = attr.multiple,\n          optionsExp = attr.ngOptions,\n          nullOption = false, // if false, user will not be able to select it (used by ngOptions)\n          emptyOption,\n          // we can't just jqLite('<option>') since jqLite is not smart enough\n          // to create it in <select> and IE barfs otherwise.\n          optionTemplate = jqLite(document.createElement('option')),\n          optGroupTemplate =jqLite(document.createElement('optgroup')),\n          unknownOption = optionTemplate.clone();\n\n      // find \"null\" option\n      for(var i = 0, children = element.children(), ii = children.length; i < ii; i++) {\n        if (children[i].value === '') {\n          emptyOption = nullOption = children.eq(i);\n          break;\n        }\n      }\n\n      selectCtrl.init(ngModelCtrl, nullOption, unknownOption);\n\n      // required validator\n      if (multiple && (attr.required || attr.ngRequired)) {\n        var requiredValidator = function(value) {\n          ngModelCtrl.$setValidity('required', !attr.required || (value && value.length));\n          return value;\n        };\n\n        ngModelCtrl.$parsers.push(requiredValidator);\n        ngModelCtrl.$formatters.unshift(requiredValidator);\n\n        attr.$observe('required', function() {\n          requiredValidator(ngModelCtrl.$viewValue);\n        });\n      }\n\n      if (optionsExp) setupAsOptions(scope, element, ngModelCtrl);\n      else if (multiple) setupAsMultiple(scope, element, ngModelCtrl);\n      else setupAsSingle(scope, element, ngModelCtrl, selectCtrl);\n\n\n      ////////////////////////////\n\n\n\n      function setupAsSingle(scope, selectElement, ngModelCtrl, selectCtrl) {\n        ngModelCtrl.$render = function() {\n          var viewValue = ngModelCtrl.$viewValue;\n\n          if (selectCtrl.hasOption(viewValue)) {\n            if (unknownOption.parent()) unknownOption.remove();\n            selectElement.val(viewValue);\n            if (viewValue === '') emptyOption.prop('selected', true); // to make IE9 happy\n          } else {\n            if (isUndefined(viewValue) && emptyOption) {\n              selectElement.val('');\n            } else {\n              selectCtrl.renderUnknownOption(viewValue);\n            }\n          }\n        };\n\n        selectElement.on('change', function() {\n          scope.$apply(function() {\n            if (unknownOption.parent()) unknownOption.remove();\n            ngModelCtrl.$setViewValue(selectElement.val());\n          });\n        });\n      }\n\n      function setupAsMultiple(scope, selectElement, ctrl) {\n        var lastView;\n        ctrl.$render = function() {\n          var items = new HashMap(ctrl.$viewValue);\n          forEach(selectElement.find('option'), function(option) {\n            option.selected = isDefined(items.get(option.value));\n          });\n        };\n\n        // we have to do it on each watch since ngModel watches reference, but\n        // we need to work of an array, so we need to see if anything was inserted/removed\n        scope.$watch(function selectMultipleWatch() {\n          if (!equals(lastView, ctrl.$viewValue)) {\n            lastView = copy(ctrl.$viewValue);\n            ctrl.$render();\n          }\n        });\n\n        selectElement.on('change', function() {\n          scope.$apply(function() {\n            var array = [];\n            forEach(selectElement.find('option'), function(option) {\n              if (option.selected) {\n                array.push(option.value);\n              }\n            });\n            ctrl.$setViewValue(array);\n          });\n        });\n      }\n\n      function setupAsOptions(scope, selectElement, ctrl) {\n        var match;\n\n        if (! (match = optionsExp.match(NG_OPTIONS_REGEXP))) {\n          throw ngOptionsMinErr('iexp',\n            \"Expected expression in form of \" +\n            \"'_select_ (as _label_)? for (_key_,)?_value_ in _collection_'\" +\n            \" but got '{0}'. Element: {1}\",\n            optionsExp, startingTag(selectElement));\n        }\n\n        var displayFn = $parse(match[2] || match[1]),\n            valueName = match[4] || match[6],\n            keyName = match[5],\n            groupByFn = $parse(match[3] || ''),\n            valueFn = $parse(match[2] ? match[1] : valueName),\n            valuesFn = $parse(match[7]),\n            track = match[8],\n            trackFn = track ? $parse(match[8]) : null,\n            // This is an array of array of existing option groups in DOM.\n            // We try to reuse these if possible\n            // - optionGroupsCache[0] is the options with no option group\n            // - optionGroupsCache[?][0] is the parent: either the SELECT or OPTGROUP element\n            optionGroupsCache = [[{element: selectElement, label:''}]];\n\n        if (nullOption) {\n          // compile the element since there might be bindings in it\n          $compile(nullOption)(scope);\n\n          // remove the class, which is added automatically because we recompile the element and it\n          // becomes the compilation root\n          nullOption.removeClass('ng-scope');\n\n          // we need to remove it before calling selectElement.html('') because otherwise IE will\n          // remove the label from the element. wtf?\n          nullOption.remove();\n        }\n\n        // clear contents, we'll add what's needed based on the model\n        selectElement.html('');\n\n        selectElement.on('change', function() {\n          scope.$apply(function() {\n            var optionGroup,\n                collection = valuesFn(scope) || [],\n                locals = {},\n                key, value, optionElement, index, groupIndex, length, groupLength, trackIndex;\n\n            if (multiple) {\n              value = [];\n              for (groupIndex = 0, groupLength = optionGroupsCache.length;\n                   groupIndex < groupLength;\n                   groupIndex++) {\n                // list of options for that group. (first item has the parent)\n                optionGroup = optionGroupsCache[groupIndex];\n\n                for(index = 1, length = optionGroup.length; index < length; index++) {\n                  if ((optionElement = optionGroup[index].element)[0].selected) {\n                    key = optionElement.val();\n                    if (keyName) locals[keyName] = key;\n                    if (trackFn) {\n                      for (trackIndex = 0; trackIndex < collection.length; trackIndex++) {\n                        locals[valueName] = collection[trackIndex];\n                        if (trackFn(scope, locals) == key) break;\n                      }\n                    } else {\n                      locals[valueName] = collection[key];\n                    }\n                    value.push(valueFn(scope, locals));\n                  }\n                }\n              }\n            } else {\n              key = selectElement.val();\n              if (key == '?') {\n                value = undefined;\n              } else if (key === ''){\n                value = null;\n              } else {\n                if (trackFn) {\n                  for (trackIndex = 0; trackIndex < collection.length; trackIndex++) {\n                    locals[valueName] = collection[trackIndex];\n                    if (trackFn(scope, locals) == key) {\n                      value = valueFn(scope, locals);\n                      break;\n                    }\n                  }\n                } else {\n                  locals[valueName] = collection[key];\n                  if (keyName) locals[keyName] = key;\n                  value = valueFn(scope, locals);\n                }\n              }\n            }\n            ctrl.$setViewValue(value);\n          });\n        });\n\n        ctrl.$render = render;\n\n        // TODO(vojta): can't we optimize this ?\n        scope.$watch(render);\n\n        function render() {\n              // Temporary location for the option groups before we render them\n          var optionGroups = {'':[]},\n              optionGroupNames = [''],\n              optionGroupName,\n              optionGroup,\n              option,\n              existingParent, existingOptions, existingOption,\n              modelValue = ctrl.$modelValue,\n              values = valuesFn(scope) || [],\n              keys = keyName ? sortedKeys(values) : values,\n              key,\n              groupLength, length,\n              groupIndex, index,\n              locals = {},\n              selected,\n              selectedSet = false, // nothing is selected yet\n              lastElement,\n              element,\n              label;\n\n          if (multiple) {\n            if (trackFn && isArray(modelValue)) {\n              selectedSet = new HashMap([]);\n              for (var trackIndex = 0; trackIndex < modelValue.length; trackIndex++) {\n                locals[valueName] = modelValue[trackIndex];\n                selectedSet.put(trackFn(scope, locals), modelValue[trackIndex]);\n              }\n            } else {\n              selectedSet = new HashMap(modelValue);\n            }\n          }\n\n          // We now build up the list of options we need (we merge later)\n          for (index = 0; length = keys.length, index < length; index++) {\n            \n            key = index;\n            if (keyName) {\n              key = keys[index];\n              if ( key.charAt(0) === '$' ) continue;\n              locals[keyName] = key;\n            }\n\n            locals[valueName] = values[key];\n\n            optionGroupName = groupByFn(scope, locals) || '';\n            if (!(optionGroup = optionGroups[optionGroupName])) {\n              optionGroup = optionGroups[optionGroupName] = [];\n              optionGroupNames.push(optionGroupName);\n            }\n            if (multiple) {\n              selected = isDefined(\n                selectedSet.remove(trackFn ? trackFn(scope, locals) : valueFn(scope, locals))\n              );\n            } else {\n              if (trackFn) {\n                var modelCast = {};\n                modelCast[valueName] = modelValue;\n                selected = trackFn(scope, modelCast) === trackFn(scope, locals);\n              } else {\n                selected = modelValue === valueFn(scope, locals);\n              }\n              selectedSet = selectedSet || selected; // see if at least one item is selected\n            }\n            label = displayFn(scope, locals); // what will be seen by the user\n\n            // doing displayFn(scope, locals) || '' overwrites zero values\n            label = isDefined(label) ? label : '';\n            optionGroup.push({\n              // either the index into array or key from object\n              id: trackFn ? trackFn(scope, locals) : (keyName ? keys[index] : index),\n              label: label,\n              selected: selected                   // determine if we should be selected\n            });\n          }\n          if (!multiple) {\n            if (nullOption || modelValue === null) {\n              // insert null option if we have a placeholder, or the model is null\n              optionGroups[''].unshift({id:'', label:'', selected:!selectedSet});\n            } else if (!selectedSet) {\n              // option could not be found, we have to insert the undefined item\n              optionGroups[''].unshift({id:'?', label:'', selected:true});\n            }\n          }\n\n          // Now we need to update the list of DOM nodes to match the optionGroups we computed above\n          for (groupIndex = 0, groupLength = optionGroupNames.length;\n               groupIndex < groupLength;\n               groupIndex++) {\n            // current option group name or '' if no group\n            optionGroupName = optionGroupNames[groupIndex];\n\n            // list of options for that group. (first item has the parent)\n            optionGroup = optionGroups[optionGroupName];\n\n            if (optionGroupsCache.length <= groupIndex) {\n              // we need to grow the optionGroups\n              existingParent = {\n                element: optGroupTemplate.clone().attr('label', optionGroupName),\n                label: optionGroup.label\n              };\n              existingOptions = [existingParent];\n              optionGroupsCache.push(existingOptions);\n              selectElement.append(existingParent.element);\n            } else {\n              existingOptions = optionGroupsCache[groupIndex];\n              existingParent = existingOptions[0];  // either SELECT (no group) or OPTGROUP element\n\n              // update the OPTGROUP label if not the same.\n              if (existingParent.label != optionGroupName) {\n                existingParent.element.attr('label', existingParent.label = optionGroupName);\n              }\n            }\n\n            lastElement = null;  // start at the beginning\n            for(index = 0, length = optionGroup.length; index < length; index++) {\n              option = optionGroup[index];\n              if ((existingOption = existingOptions[index+1])) {\n                // reuse elements\n                lastElement = existingOption.element;\n                if (existingOption.label !== option.label) {\n                  lastElement.text(existingOption.label = option.label);\n                }\n                if (existingOption.id !== option.id) {\n                  lastElement.val(existingOption.id = option.id);\n                }\n                // lastElement.prop('selected') provided by jQuery has side-effects\n                if (lastElement[0].selected !== option.selected) {\n                  lastElement.prop('selected', (existingOption.selected = option.selected));\n                }\n              } else {\n                // grow elements\n\n                // if it's a null option\n                if (option.id === '' && nullOption) {\n                  // put back the pre-compiled element\n                  element = nullOption;\n                } else {\n                  // jQuery(v1.4.2) Bug: We should be able to chain the method calls, but\n                  // in this version of jQuery on some browser the .text() returns a string\n                  // rather then the element.\n                  (element = optionTemplate.clone())\n                      .val(option.id)\n                      .attr('selected', option.selected)\n                      .text(option.label);\n                }\n\n                existingOptions.push(existingOption = {\n                    element: element,\n                    label: option.label,\n                    id: option.id,\n                    selected: option.selected\n                });\n                if (lastElement) {\n                  lastElement.after(element);\n                } else {\n                  existingParent.element.append(element);\n                }\n                lastElement = element;\n              }\n            }\n            // remove any excessive OPTIONs in a group\n            index++; // increment since the existingOptions[0] is parent element not OPTION\n            while(existingOptions.length > index) {\n              existingOptions.pop().element.remove();\n            }\n          }\n          // remove any excessive OPTGROUPs from select\n          while(optionGroupsCache.length > groupIndex) {\n            optionGroupsCache.pop()[0].element.remove();\n          }\n        }\n      }\n    }\n  };\n}];\n\nvar optionDirective = ['$interpolate', function($interpolate) {\n  var nullSelectCtrl = {\n    addOption: noop,\n    removeOption: noop\n  };\n\n  return {\n    restrict: 'E',\n    priority: 100,\n    compile: function(element, attr) {\n      if (isUndefined(attr.value)) {\n        var interpolateFn = $interpolate(element.text(), true);\n        if (!interpolateFn) {\n          attr.$set('value', element.text());\n        }\n      }\n\n      return function (scope, element, attr) {\n        var selectCtrlName = '$selectController',\n            parent = element.parent(),\n            selectCtrl = parent.data(selectCtrlName) ||\n              parent.parent().data(selectCtrlName); // in case we are in optgroup\n\n        if (selectCtrl && selectCtrl.databound) {\n          // For some reason Opera defaults to true and if not overridden this messes up the repeater.\n          // We don't want the view to drive the initialization of the model anyway.\n          element.prop('selected', false);\n        } else {\n          selectCtrl = nullSelectCtrl;\n        }\n\n        if (interpolateFn) {\n          scope.$watch(interpolateFn, function interpolateWatchAction(newVal, oldVal) {\n            attr.$set('value', newVal);\n            if (newVal !== oldVal) selectCtrl.removeOption(oldVal);\n            selectCtrl.addOption(newVal);\n          });\n        } else {\n          selectCtrl.addOption(attr.value);\n        }\n\n        element.on('$destroy', function() {\n          selectCtrl.removeOption(attr.value);\n        });\n      };\n    }\n  };\n}];\n\nvar styleDirective = valueFn({\n  restrict: 'E',\n  terminal: true\n});\n\n  //try to bind to jquery now so that one can write angular.element().read()\n  //but we will rebind on bootstrap again.\n  bindJQuery();\n\n  publishExternalAPI(angular);\n\n  jqLite(document).ready(function() {\n    angularInit(document, bootstrap);\n  });\n\n})(window, document);\n\n!angular.$$csp() && angular.element(document).find('head').prepend('<style type=\"text/css\">@charset \"UTF-8\";[ng\\\\:cloak],[ng-cloak],[data-ng-cloak],[x-ng-cloak],.ng-cloak,.x-ng-cloak,.ng-hide{display:none !important;}ng\\\\:form{display:block;}.ng-animate-start{clip:rect(0,auto,auto,0);-ms-zoom:1.0001;}.ng-animate-active{clip:rect(-1px,auto,auto,0);-ms-zoom:1;}</style>');;\n/**\n * @license AngularJS v1.2.0\n * (c) 2010-2012 Google, Inc. http://angularjs.org\n * License: MIT\n */\n(function(window, angular, undefined) {'use strict';\n\n/* jshint maxlen: false */\n\n/**\n * @ngdoc overview\n * @name ngAnimate\n * @description\n *\n * # ngAnimate\n *\n * The `ngAnimate` module provides support for JavaScript, CSS3 transition and CSS3 keyframe animation hooks within existing core and custom directives.\n *\n * {@installModule animate}\n *\n * <div doc-module-components=\"ngAnimate\"></div>\n *\n * # Usage\n *\n * To see animations in action, all that is required is to define the appropriate CSS classes\n * or to register a JavaScript animation via the myModule.animation() function. The directives that support animation automatically are:\n * `ngRepeat`, `ngInclude`, `ngIf`, `ngSwitch`, `ngShow`, `ngHide`, `ngView` and `ngClass`. Custom directives can take advantage of animation\n * by using the `$animate` service.\n *\n * Below is a more detailed breakdown of the supported animation events provided by pre-existing ng directives:\n *\n * | Directive                                                 | Supported Animations                               |\n * |---------------------------------------------------------- |----------------------------------------------------|\n * | {@link ng.directive:ngRepeat#usage_animations ngRepeat}         | enter, leave and move                              |\n * | {@link ngRoute.directive:ngView#usage_animations ngView}        | enter and leave                                    |\n * | {@link ng.directive:ngInclude#usage_animations ngInclude}       | enter and leave                                    |\n * | {@link ng.directive:ngSwitch#usage_animations ngSwitch}         | enter and leave                                    |\n * | {@link ng.directive:ngIf#usage_animations ngIf}                 | enter and leave                                    |\n * | {@link ng.directive:ngClass#usage_animations ngClass}           | add and remove                                     |\n * | {@link ng.directive:ngShow#usage_animations ngShow & ngHide}    | add and remove (the ng-hide class value)           |\n *\n * You can find out more information about animations upon visiting each directive page.\n *\n * Below is an example of how to apply animations to a directive that supports animation hooks:\n *\n * <pre>\n * <style type=\"text/css\">\n * .slide.ng-enter, .slide.ng-leave {\n *   -webkit-transition:0.5s linear all;\n *   transition:0.5s linear all;\n * }\n *\n * .slide.ng-enter { }        /&#42; starting animations for enter &#42;/\n * .slide.ng-enter-active { } /&#42; terminal animations for enter &#42;/\n * .slide.ng-leave { }        /&#42; starting animations for leave &#42;/\n * .slide.ng-leave-active { } /&#42; terminal animations for leave &#42;/\n * </style>\n *\n * <!--\n * the animate service will automatically add .ng-enter and .ng-leave to the element\n * to trigger the CSS transition/animations\n * -->\n * <ANY class=\"slide\" ng-include=\"...\"></ANY>\n * </pre>\n *\n * Keep in mind that if an animation is running, any child elements cannot be animated until the parent element's\n * animation has completed.\n *\n * <h2>CSS-defined Animations</h2>\n * The animate service will automatically apply two CSS classes to the animated element and these two CSS classes\n * are designed to contain the start and end CSS styling. Both CSS transitions and keyframe animations are supported\n * and can be used to play along with this naming structure.\n *\n * The following code below demonstrates how to perform animations using **CSS transitions** with Angular:\n *\n * <pre>\n * <style type=\"text/css\">\n * /&#42;\n *  The animate class is apart of the element and the ng-enter class\n *  is attached to the element once the enter animation event is triggered\n * &#42;/\n * .reveal-animation.ng-enter {\n *  -webkit-transition: 1s linear all; /&#42; Safari/Chrome &#42;/\n *  transition: 1s linear all; /&#42; All other modern browsers and IE10+ &#42;/\n *\n *  /&#42; The animation preparation code &#42;/\n *  opacity: 0;\n * }\n *\n * /&#42;\n *  Keep in mind that you want to combine both CSS\n *  classes together to avoid any CSS-specificity\n *  conflicts\n * &#42;/\n * .reveal-animation.ng-enter.ng-enter-active {\n *  /&#42; The animation code itself &#42;/\n *  opacity: 1;\n * }\n * </style>\n *\n * <div class=\"view-container\">\n *   <div ng-view class=\"reveal-animation\"></div>\n * </div>\n * </pre>\n *\n * The following code below demonstrates how to perform animations using **CSS animations** with Angular:\n *\n * <pre>\n * <style type=\"text/css\">\n * .reveal-animation.ng-enter {\n *   -webkit-animation: enter_sequence 1s linear; /&#42; Safari/Chrome &#42;/\n *   animation: enter_sequence 1s linear; /&#42; IE10+ and Future Browsers &#42;/\n * }\n * &#64-webkit-keyframes enter_sequence {\n *   from { opacity:0; }\n *   to { opacity:1; }\n * }\n * &#64keyframes enter_sequence {\n *   from { opacity:0; }\n *   to { opacity:1; }\n * }\n * </style>\n *\n * <div class=\"view-container\">\n *   <div ng-view class=\"reveal-animation\"></div>\n * </div>\n * </pre>\n *\n * Both CSS3 animations and transitions can be used together and the animate service will figure out the correct duration and delay timing.\n *\n * Upon DOM mutation, the event class is added first (something like `ng-enter`), then the browser prepares itself to add\n * the active class (in this case `ng-enter-active`) which then triggers the animation. The animation module will automatically\n * detect the CSS code to determine when the animation ends. Once the animation is over then both CSS classes will be\n * removed from the DOM. If a browser does not support CSS transitions or CSS animations then the animation will start and end\n * immediately resulting in a DOM element that is at its final state. This final state is when the DOM element\n * has no CSS transition/animation classes applied to it.\n *\n * <h3>CSS Staggering Animations</h3>\n * A Staggering animation is a collection of animations that are issued with a slight delay in between each successive operation resulting in a\n * curtain-like effect. The ngAnimate module, as of 1.2.0, supports staggering animations and the stagger effect can be\n * performed by creating a **ng-EVENT-stagger** CSS class and attaching that class to the base CSS class used for\n * the animation. The style property expected within the stagger class can either be a **transition-delay** or an\n * **animation-delay** property (or both if your animation contains both transitions and keyframe animations).\n *\n * <pre>\n * .my-animation.ng-enter {\n *   /&#42; standard transition code &#42;/\n *   -webkit-transition: 1s linear all;\n *   transition: 1s linear all;\n *   opacity:0;\n * }\n * .my-animation.ng-enter-stagger {\n *   /&#42; this will have a 100ms delay between each successive leave animation &#42;/\n *   -webkit-transition-delay: 0.1s;\n *   transition-delay: 0.1s;\n *\n *   /&#42; in case the stagger doesn't work then these two values\n *    must be set to 0 to avoid an accidental CSS inheritance &#42;/\n *   -webkit-transition-duration: 0s;\n *   transition-duration: 0s;\n * }\n * .my-animation.ng-enter.ng-enter-active {\n *   /&#42; standard transition styles &#42;/\n *   opacity:1;\n * }\n * </pre>\n *\n * Staggering animations work by default in ngRepeat (so long as the CSS class is defiend). Outside of ngRepeat, to use staggering animations\n * on your own, they can be triggered by firing multiple calls to the same event on $animate. However, the restrictions surrounding this\n * are that each of the elements must have the same CSS className value as well as the same parent element. A stagger operation\n * will also be reset if more than 10ms has passed after the last animation has been fired.\n *\n * The following code will issue the **ng-leave-stagger** event on the element provided:\n *\n * <pre>\n * var kids = parent.children();\n *\n * $animate.leave(kids[0]); //stagger index=0\n * $animate.leave(kids[1]); //stagger index=1\n * $animate.leave(kids[2]); //stagger index=2\n * $animate.leave(kids[3]); //stagger index=3\n * $animate.leave(kids[4]); //stagger index=4\n *\n * $timeout(function() {\n *   //stagger has reset itself\n *   $animate.leave(kids[5]); //stagger index=0\n *   $animate.leave(kids[6]); //stagger index=1\n * }, 100, false);\n * </pre>\n *\n * Stagger animations are currently only supported within CSS-defined animations.\n *\n * <h2>JavaScript-defined Animations</h2>\n * In the event that you do not want to use CSS3 transitions or CSS3 animations or if you wish to offer animations on browsers that do not\n * yet support CSS transitions/animations, then you can make use of JavaScript animations defined inside of your AngularJS module.\n *\n * <pre>\n * //!annotate=\"YourApp\" Your AngularJS Module|Replace this or ngModule with the module that you used to define your application.\n * var ngModule = angular.module('YourApp', []);\n * ngModule.animation('.my-crazy-animation', function() {\n *   return {\n *     enter: function(element, done) {\n *       //run the animation here and call done when the animation is complete\n *       return function(cancelled) {\n *         //this (optional) function will be called when the animation\n *         //completes or when the animation is cancelled (the cancelled\n *         //flag will be set to true if cancelled).\n *       }\n *     }\n *     leave: function(element, done) { },\n *     move: function(element, done) { },\n *\n *     //animation that can be triggered before the class is added\n *     beforeAddClass: function(element, className, done) { },\n *\n *     //animation that can be triggered after the class is added\n *     addClass: function(element, className, done) { },\n *\n *     //animation that can be triggered before the class is removed\n *     beforeRemoveClass: function(element, className, done) { },\n *\n *     //animation that can be triggered after the class is removed\n *     removeClass: function(element, className, done) { }\n *   }\n * });\n * </pre>\n *\n * JavaScript-defined animations are created with a CSS-like class selector and a collection of events which are set to run\n * a javascript callback function. When an animation is triggered, $animate will look for a matching animation which fits\n * the element's CSS class attribute value and then run the matching animation event function (if found).\n * In other words, if the CSS classes present on the animated element match any of the JavaScript animations then the callback function\n * be executed. It should be also noted that only simple, single class selectors are allowed (compound class selectors are not supported).\n *\n * Within a JavaScript animation, an object containing various event callback animation functions is expected to be returned.\n * As explained above, these callbacks are triggered based on the animation event. Therefore if an enter animation is run,\n * and the JavaScript animation is found, then the enter callback will handle that animation (in addition to the CSS keyframe animation\n * or transition code that is defined via a stylesheet).\n *\n */\n\nangular.module('ngAnimate', ['ng'])\n\n  /**\n   * @ngdoc object\n   * @name ngAnimate.$animateProvider\n   * @description\n   *\n   * The `$animateProvider` allows developers to register JavaScript animation event handlers directly inside of a module.\n   * When an animation is triggered, the $animate service will query the $animate service to find any animations that match\n   * the provided name value.\n   *\n   * Requires the {@link ngAnimate `ngAnimate`} module to be installed.\n   *\n   * Please visit the {@link ngAnimate `ngAnimate`} module overview page learn more about how to use animations in your application.\n   *\n   */\n  .config(['$provide', '$animateProvider', function($provide, $animateProvider) {\n    var noop = angular.noop;\n    var forEach = angular.forEach;\n    var selectors = $animateProvider.$$selectors;\n\n    var ELEMENT_NODE = 1;\n    var NG_ANIMATE_STATE = '$$ngAnimateState';\n    var NG_ANIMATE_CLASS_NAME = 'ng-animate';\n    var rootAnimateState = {running: true};\n\n    $provide.decorator('$animate', ['$delegate', '$injector', '$sniffer', '$rootElement', '$timeout', '$rootScope', '$document',\n                            function($delegate,   $injector,   $sniffer,   $rootElement,   $timeout,   $rootScope,   $document) {\n\n      $rootElement.data(NG_ANIMATE_STATE, rootAnimateState);\n\n      // disable animations during bootstrap, but once we bootstrapped, enable animations\n      $rootScope.$$postDigest(function() {\n        rootAnimateState.running = false;\n      });\n\n      function lookup(name) {\n        if (name) {\n          var matches = [],\n              flagMap = {},\n              classes = name.substr(1).split('.');\n\n          //the empty string value is the default animation\n          //operation which performs CSS transition and keyframe\n          //animations sniffing. This is always included for each\n          //element animation procedure if the browser supports\n          //transitions and/or keyframe animations\n          if ($sniffer.transitions || $sniffer.animations) {\n            classes.push('');\n          }\n\n          for(var i=0; i < classes.length; i++) {\n            var klass = classes[i],\n                selectorFactoryName = selectors[klass];\n            if(selectorFactoryName && !flagMap[klass]) {\n              matches.push($injector.get(selectorFactoryName));\n              flagMap[klass] = true;\n            }\n          }\n          return matches;\n        }\n      }\n\n      /**\n       * @ngdoc object\n       * @name ngAnimate.$animate\n       * @function\n       *\n       * @description\n       * The `$animate` service provides animation detection support while performing DOM operations (enter, leave and move) as well as during addClass and removeClass operations.\n       * When any of these operations are run, the $animate service\n       * will examine any JavaScript-defined animations (which are defined by using the $animateProvider provider object)\n       * as well as any CSS-defined animations against the CSS classes present on the element once the DOM operation is run.\n       *\n       * The `$animate` service is used behind the scenes with pre-existing directives and animation with these directives\n       * will work out of the box without any extra configuration.\n       *\n       * Requires the {@link ngAnimate `ngAnimate`} module to be installed.\n       *\n       * Please visit the {@link ngAnimate `ngAnimate`} module overview page learn more about how to use animations in your application.\n       *\n       */\n      return {\n        /**\n         * @ngdoc function\n         * @name ngAnimate.$animate#enter\n         * @methodOf ngAnimate.$animate\n         * @function\n         *\n         * @description\n         * Appends the element to the parentElement element that resides in the document and then runs the enter animation. Once\n         * the animation is started, the following CSS classes will be present on the element for the duration of the animation:\n         *\n         * Below is a breakdown of each step that occurs during enter animation:\n         *\n         * | Animation Step                                                                               | What the element class attribute looks like |\n         * |----------------------------------------------------------------------------------------------|---------------------------------------------|\n         * | 1. $animate.enter(...) is called                                                             | class=\"my-animation\"                        |\n         * | 2. element is inserted into the parentElement element or beside the afterElement element     | class=\"my-animation\"                        |\n         * | 3. $animate runs any JavaScript-defined animations on the element                            | class=\"my-animation ng-animate\"             |\n         * | 4. the .ng-enter class is added to the element                                               | class=\"my-animation ng-animate ng-enter\"    |\n         * | 5. $animate scans the element styles to get the CSS transition/animation duration and delay  | class=\"my-animation ng-animate ng-enter\"    |\n         * | 6. $animate waits for 10ms (this performs a reflow)                                          | class=\"my-animation ng-animate ng-enter\"    |\n         * | 7. the .ng-enter-active and .ng-animate-active classes are added (this triggers the CSS transition/animation) | class=\"my-animation ng-animate ng-animate-active ng-enter ng-enter-active\" |\n         * | 8. $animate waits for X milliseconds for the animation to complete                           | class=\"my-animation ng-animate ng-animate-active ng-enter ng-enter-active\" |\n         * | 9. The animation ends and all generated CSS classes are removed from the element             | class=\"my-animation\"                        |\n         * | 10. The doneCallback() callback is fired (if provided)                                       | class=\"my-animation\"                        |\n         *\n         * @param {jQuery/jqLite element} element the element that will be the focus of the enter animation\n         * @param {jQuery/jqLite element} parentElement the parent element of the element that will be the focus of the enter animation\n         * @param {jQuery/jqLite element} afterElement the sibling element (which is the previous element) of the element that will be the focus of the enter animation\n         * @param {function()=} doneCallback the callback function that will be called once the animation is complete\n        */\n        enter : function(element, parentElement, afterElement, doneCallback) {\n          this.enabled(false, element);\n          $delegate.enter(element, parentElement, afterElement);\n          $rootScope.$$postDigest(function() {\n            performAnimation('enter', 'ng-enter', element, parentElement, afterElement, noop, doneCallback);\n          });\n        },\n\n        /**\n         * @ngdoc function\n         * @name ngAnimate.$animate#leave\n         * @methodOf ngAnimate.$animate\n         * @function\n         *\n         * @description\n         * Runs the leave animation operation and, upon completion, removes the element from the DOM. Once\n         * the animation is started, the following CSS classes will be added for the duration of the animation:\n         *\n         * Below is a breakdown of each step that occurs during enter animation:\n         *\n         * | Animation Step                                                                               | What the element class attribute looks like |\n         * |----------------------------------------------------------------------------------------------|---------------------------------------------|\n         * | 1. $animate.leave(...) is called                                                             | class=\"my-animation\"                        |\n         * | 2. $animate runs any JavaScript-defined animations on the element                            | class=\"my-animation ng-animate\"             |\n         * | 3. the .ng-leave class is added to the element                                               | class=\"my-animation ng-animate ng-leave\"    |\n         * | 4. $animate scans the element styles to get the CSS transition/animation duration and delay  | class=\"my-animation ng-animate ng-leave\"    |\n         * | 5. $animate waits for 10ms (this performs a reflow)                                          | class=\"my-animation ng-animate ng-leave\"    |\n         * | 6. the .ng-leave-active and .ng-animate-active classes is added (this triggers the CSS transition/animation) | class=\"my-animation ng-animate ng-animate-active ng-leave ng-leave-active\" |\n         * | 7. $animate waits for X milliseconds for the animation to complete                           | class=\"my-animation ng-animate ng-animate-active ng-leave ng-leave-active\" |\n         * | 8. The animation ends and all generated CSS classes are removed from the element             | class=\"my-animation\"                        |\n         * | 9. The element is removed from the DOM                                                       | ...                                         |\n         * | 10. The doneCallback() callback is fired (if provided)                                       | ...                                         |\n         *\n         * @param {jQuery/jqLite element} element the element that will be the focus of the leave animation\n         * @param {function()=} doneCallback the callback function that will be called once the animation is complete\n        */\n        leave : function(element, doneCallback) {\n          cancelChildAnimations(element);\n          this.enabled(false, element);\n          $rootScope.$$postDigest(function() {\n            performAnimation('leave', 'ng-leave', element, null, null, function() {\n              $delegate.leave(element);\n            }, doneCallback);\n          });\n        },\n\n        /**\n         * @ngdoc function\n         * @name ngAnimate.$animate#move\n         * @methodOf ngAnimate.$animate\n         * @function\n         *\n         * @description\n         * Fires the move DOM operation. Just before the animation starts, the animate service will either append it into the parentElement container or\n         * add the element directly after the afterElement element if present. Then the move animation will be run. Once\n         * the animation is started, the following CSS classes will be added for the duration of the animation:\n         *\n         * Below is a breakdown of each step that occurs during move animation:\n         *\n         * | Animation Step                                                                               | What the element class attribute looks like |\n         * |----------------------------------------------------------------------------------------------|---------------------------------------------|\n         * | 1. $animate.move(...) is called                                                              | class=\"my-animation\"                        |\n         * | 2. element is moved into the parentElement element or beside the afterElement element        | class=\"my-animation\"                        |\n         * | 3. $animate runs any JavaScript-defined animations on the element                            | class=\"my-animation ng-animate\"             |\n         * | 4. the .ng-move class is added to the element                                                | class=\"my-animation ng-animate ng-move\"     |\n         * | 5. $animate scans the element styles to get the CSS transition/animation duration and delay  | class=\"my-animation ng-animate ng-move\"     |\n         * | 6. $animate waits for 10ms (this performs a reflow)                                          | class=\"my-animation ng-animate ng-move\"     |\n         * | 7. the .ng-move-active and .ng-animate-active classes is added (this triggers the CSS transition/animation) | class=\"my-animation ng-animate ng-animate-active ng-move ng-move-active\" |\n         * | 8. $animate waits for X milliseconds for the animation to complete                           | class=\"my-animation ng-animate ng-animate-active ng-move ng-move-active\" |\n         * | 9. The animation ends and all generated CSS classes are removed from the element             | class=\"my-animation\"                        |\n         * | 10. The doneCallback() callback is fired (if provided)                                       | class=\"my-animation\"                        |\n         *\n         * @param {jQuery/jqLite element} element the element that will be the focus of the move animation\n         * @param {jQuery/jqLite element} parentElement the parentElement element of the element that will be the focus of the move animation\n         * @param {jQuery/jqLite element} afterElement the sibling element (which is the previous element) of the element that will be the focus of the move animation\n         * @param {function()=} doneCallback the callback function that will be called once the animation is complete\n        */\n        move : function(element, parentElement, afterElement, doneCallback) {\n          cancelChildAnimations(element);\n          this.enabled(false, element);\n          $delegate.move(element, parentElement, afterElement);\n          $rootScope.$$postDigest(function() {\n            performAnimation('move', 'ng-move', element, parentElement, afterElement, noop, doneCallback);\n          });\n        },\n\n        /**\n         * @ngdoc function\n         * @name ngAnimate.$animate#addClass\n         * @methodOf ngAnimate.$animate\n         *\n         * @description\n         * Triggers a custom animation event based off the className variable and then attaches the className value to the element as a CSS class.\n         * Unlike the other animation methods, the animate service will suffix the className value with {@type -add} in order to provide\n         * the animate service the setup and active CSS classes in order to trigger the animation (this will be skipped if no CSS transitions\n         * or keyframes are defined on the -add or base CSS class).\n         *\n         * Below is a breakdown of each step that occurs during addClass animation:\n         *\n         * | Animation Step                                                                                 | What the element class attribute looks like |\n         * |------------------------------------------------------------------------------------------------|---------------------------------------------|\n         * | 1. $animate.addClass(element, 'super') is called                                               | class=\"my-animation\"                        |\n         * | 2. $animate runs any JavaScript-defined animations on the element                              | class=\"my-animation ng-animate\"             |\n         * | 3. the .super-add class are added to the element                                               | class=\"my-animation ng-animate super-add\"   |\n         * | 4. $animate scans the element styles to get the CSS transition/animation duration and delay    | class=\"my-animation ng-animate super-add\"   |\n         * | 5. $animate waits for 10ms (this performs a reflow)                                            | class=\"my-animation ng-animate super-add\"   |\n         * | 6. the .super, .super-add-active and .ng-animate-active classes are added (this triggers the CSS transition/animation) | class=\"my-animation ng-animate ng-animate-active super super-add super-add-active\"          |\n         * | 7. $animate waits for X milliseconds for the animation to complete                             | class=\"my-animation super-add super-add-active\"  |\n         * | 8. The animation ends and all generated CSS classes are removed from the element               | class=\"my-animation super\"                  |\n         * | 9. The super class is kept on the element                                                      | class=\"my-animation super\"                  |\n         * | 10. The doneCallback() callback is fired (if provided)                                         | class=\"my-animation super\"                  |\n         *\n         * @param {jQuery/jqLite element} element the element that will be animated\n         * @param {string} className the CSS class that will be added to the element and then animated\n         * @param {function()=} doneCallback the callback function that will be called once the animation is complete\n        */\n        addClass : function(element, className, doneCallback) {\n          performAnimation('addClass', className, element, null, null, function() {\n            $delegate.addClass(element, className);\n          }, doneCallback);\n        },\n\n        /**\n         * @ngdoc function\n         * @name ngAnimate.$animate#removeClass\n         * @methodOf ngAnimate.$animate\n         *\n         * @description\n         * Triggers a custom animation event based off the className variable and then removes the CSS class provided by the className value\n         * from the element. Unlike the other animation methods, the animate service will suffix the className value with {@type -remove} in\n         * order to provide the animate service the setup and active CSS classes in order to trigger the animation (this will be skipped if\n         * no CSS transitions or keyframes are defined on the -remove or base CSS classes).\n         *\n         * Below is a breakdown of each step that occurs during removeClass animation:\n         *\n         * | Animation Step                                                                                | What the element class attribute looks like     |\n         * |-----------------------------------------------------------------------------------------------|---------------------------------------------|\n         * | 1. $animate.removeClass(element, 'super') is called                                           | class=\"my-animation super\"                  |\n         * | 2. $animate runs any JavaScript-defined animations on the element                             | class=\"my-animation super ng-animate\"       |\n         * | 3. the .super-remove class are added to the element                                           | class=\"my-animation super ng-animate super-remove\"|\n         * | 4. $animate scans the element styles to get the CSS transition/animation duration and delay   | class=\"my-animation super ng-animate super-remove\"   |\n         * | 5. $animate waits for 10ms (this performs a reflow)                                           | class=\"my-animation super ng-animate super-remove\"   |\n         * | 6. the .super-remove-active and .ng-animate-active classes are added and .super is removed (this triggers the CSS transition/animation) | class=\"my-animation ng-animate ng-animate-active super-remove super-remove-active\"          |\n         * | 7. $animate waits for X milliseconds for the animation to complete                            | class=\"my-animation ng-animate ng-animate-active super-remove super-remove-active\"   |\n         * | 8. The animation ends and all generated CSS classes are removed from the element              | class=\"my-animation\"                        |\n         * | 9. The doneCallback() callback is fired (if provided)                                         | class=\"my-animation\"                        |\n         *\n         *\n         * @param {jQuery/jqLite element} element the element that will be animated\n         * @param {string} className the CSS class that will be animated and then removed from the element\n         * @param {function()=} doneCallback the callback function that will be called once the animation is complete\n        */\n        removeClass : function(element, className, doneCallback) {\n          performAnimation('removeClass', className, element, null, null, function() {\n            $delegate.removeClass(element, className);\n          }, doneCallback);\n        },\n\n        /**\n         * @ngdoc function\n         * @name ngAnimate.$animate#enabled\n         * @methodOf ngAnimate.$animate\n         * @function\n         *\n         * @param {boolean=} value If provided then set the animation on or off.\n         * @return {boolean} Current animation state.\n         *\n         * @description\n         * Globally enables/disables animations.\n         *\n        */\n        enabled : function(value, element) {\n          switch(arguments.length) {\n            case 2:\n              if(value) {\n                cleanup(element);\n              } else {\n                var data = element.data(NG_ANIMATE_STATE) || {};\n                data.disabled = true;\n                element.data(NG_ANIMATE_STATE, data);\n              }\n            break;\n\n            case 1:\n              rootAnimateState.disabled = !value;\n            break;\n\n            default:\n              value = !rootAnimateState.disabled;\n            break;\n          }\n          return !!value;\n         }\n      };\n\n      /*\n        all animations call this shared animation triggering function internally.\n        The animationEvent variable refers to the JavaScript animation event that will be triggered\n        and the className value is the name of the animation that will be applied within the\n        CSS code. Element, parentElement and afterElement are provided DOM elements for the animation\n        and the onComplete callback will be fired once the animation is fully complete.\n      */\n      function performAnimation(animationEvent, className, element, parentElement, afterElement, domOperation, doneCallback) {\n        var classes = (element.attr('class') || '') + ' ' + className;\n        var animationLookup = (' ' + classes).replace(/\\s+/g,'.');\n        if (!parentElement) {\n          parentElement = afterElement ? afterElement.parent() : element.parent();\n        }\n\n        var matches = lookup(animationLookup);\n        var isClassBased = animationEvent == 'addClass' || animationEvent == 'removeClass';\n        var ngAnimateState = element.data(NG_ANIMATE_STATE) || {};\n\n        //skip the animation if animations are disabled, a parent is already being animated,\n        //the element is not currently attached to the document body or then completely close\n        //the animation if any matching animations are not found at all.\n        //NOTE: IE8 + IE9 should close properly (run closeAnimation()) in case a NO animation is not found.\n        if (animationsDisabled(element, parentElement) || matches.length === 0) {\n          domOperation();\n          closeAnimation();\n          return;\n        }\n\n        var animations = [];\n        //only add animations if the currently running animation is not structural\n        //or if there is no animation running at all\n        if(!ngAnimateState.running || !(isClassBased && ngAnimateState.structural)) {\n          forEach(matches, function(animation) {\n            //add the animation to the queue to if it is allowed to be cancelled\n            if(!animation.allowCancel || animation.allowCancel(element, animationEvent, className)) {\n              var beforeFn, afterFn = animation[animationEvent];\n\n              //Special case for a leave animation since there is no point in performing an\n              //animation on a element node that has already been removed from the DOM\n              if(animationEvent == 'leave') {\n                beforeFn = afterFn;\n                afterFn = null; //this must be falsy so that the animation is skipped for leave\n              } else {\n                beforeFn = animation['before' + animationEvent.charAt(0).toUpperCase() + animationEvent.substr(1)];\n              }\n              animations.push({\n                before : beforeFn,\n                after : afterFn\n              });\n            }\n          });\n        }\n\n        //this would mean that an animation was not allowed so let the existing\n        //animation do it's thing and close this one early\n        if(animations.length === 0) {\n          domOperation();\n          fireDoneCallbackAsync();\n          return;\n        }\n\n        if(ngAnimateState.running) {\n          //if an animation is currently running on the element then lets take the steps\n          //to cancel that animation and fire any required callbacks\n          $timeout.cancel(ngAnimateState.closeAnimationTimeout);\n          cleanup(element);\n          cancelAnimations(ngAnimateState.animations);\n          (ngAnimateState.done || noop)(true);\n        }\n\n        //There is no point in perform a class-based animation if the element already contains\n        //(on addClass) or doesn't contain (on removeClass) the className being animated.\n        //The reason why this is being called after the previous animations are cancelled\n        //is so that the CSS classes present on the element can be properly examined.\n        if((animationEvent == 'addClass'    && element.hasClass(className)) ||\n           (animationEvent == 'removeClass' && !element.hasClass(className))) {\n          domOperation();\n          fireDoneCallbackAsync();\n          return;\n        }\n\n        //the ng-animate class does nothing, but it's here to allow for\n        //parent animations to find and cancel child animations when needed\n        element.addClass(NG_ANIMATE_CLASS_NAME);\n\n        element.data(NG_ANIMATE_STATE, {\n          running:true,\n          structural:!isClassBased,\n          animations:animations,\n          done:onBeforeAnimationsComplete\n        });\n\n        //first we run the before animations and when all of those are complete\n        //then we perform the DOM operation and run the next set of animations\n        invokeRegisteredAnimationFns(animations, 'before', onBeforeAnimationsComplete);\n\n        function onBeforeAnimationsComplete(cancelled) {\n          domOperation();\n          if(cancelled === true) {\n            closeAnimation();\n            return;\n          }\n\n          //set the done function to the final done function\n          //so that the DOM event won't be executed twice by accident\n          //if the after animation is cancelled as well\n          var data = element.data(NG_ANIMATE_STATE);\n          if(data) {\n            data.done = closeAnimation;\n            element.data(NG_ANIMATE_STATE, data);\n          }\n          invokeRegisteredAnimationFns(animations, 'after', closeAnimation);\n        }\n\n        function invokeRegisteredAnimationFns(animations, phase, allAnimationFnsComplete) {\n          var endFnName = phase + 'End';\n          forEach(animations, function(animation, index) {\n            var animationPhaseCompleted = function() {\n              progress(index, phase);\n            };\n\n            //there are no before functions for enter + move since the DOM\n            //operations happen before the performAnimation method fires\n            if(phase == 'before' && (animationEvent == 'enter' || animationEvent == 'move')) {\n              animationPhaseCompleted();\n              return;\n            }\n\n            if(animation[phase]) {\n              animation[endFnName] = isClassBased ?\n                animation[phase](element, className, animationPhaseCompleted) :\n                animation[phase](element, animationPhaseCompleted);\n            } else {\n              animationPhaseCompleted();\n            }\n          });\n\n          function progress(index, phase) {\n            var phaseCompletionFlag = phase + 'Complete';\n            var currentAnimation = animations[index];\n            currentAnimation[phaseCompletionFlag] = true;\n            (currentAnimation[endFnName] || noop)();\n\n            for(var i=0;i<animations.length;i++) {\n              if(!animations[i][phaseCompletionFlag]) return;\n            }\n\n            allAnimationFnsComplete();\n          }\n        }\n\n        function fireDoneCallbackAsync() {\n          doneCallback && $timeout(doneCallback, 0, false);\n        }\n\n        function closeAnimation() {\n          if(!closeAnimation.hasBeenRun) {\n            closeAnimation.hasBeenRun = true;\n            var data = element.data(NG_ANIMATE_STATE);\n            if(data) {\n              /* only structural animations wait for reflow before removing an\n                 animation, but class-based animations don't. An example of this\n                 failing would be when a parent HTML tag has a ng-class attribute\n                 causing ALL directives below to skip animations during the digest */\n              if(isClassBased) {\n                cleanup(element);\n              } else {\n                data.closeAnimationTimeout = $timeout(function() {\n                  cleanup(element);\n                }, 0, false);\n                element.data(NG_ANIMATE_STATE, data);\n              }\n            }\n            fireDoneCallbackAsync();\n          }\n        }\n      }\n\n      function cancelChildAnimations(element) {\n        var node = element[0];\n        if(node.nodeType != ELEMENT_NODE) {\n          return;\n        }\n\n        forEach(node.querySelectorAll('.' + NG_ANIMATE_CLASS_NAME), function(element) {\n          element = angular.element(element);\n          var data = element.data(NG_ANIMATE_STATE);\n          if(data) {\n            cancelAnimations(data.animations);\n            cleanup(element);\n          }\n        });\n      }\n\n      function cancelAnimations(animations) {\n        var isCancelledFlag = true;\n        forEach(animations, function(animation) {\n          if(!animations['beforeComplete']) {\n            (animation.beforeEnd || noop)(isCancelledFlag);\n          }\n          if(!animations['afterComplete']) {\n            (animation.afterEnd || noop)(isCancelledFlag);\n          }\n        });\n      }\n\n      function cleanup(element) {\n        if(element[0] == $rootElement[0]) {\n          if(!rootAnimateState.disabled) {\n            rootAnimateState.running = false;\n            rootAnimateState.structural = false;\n          }\n        } else {\n          element.removeClass(NG_ANIMATE_CLASS_NAME);\n          element.removeData(NG_ANIMATE_STATE);\n        }\n      }\n\n      function animationsDisabled(element, parentElement) {\n        if (rootAnimateState.disabled) return true;\n\n        if(element[0] == $rootElement[0]) {\n          return rootAnimateState.disabled || rootAnimateState.running;\n        }\n\n        do {\n          //the element did not reach the root element which means that it\n          //is not apart of the DOM. Therefore there is no reason to do\n          //any animations on it\n          if(parentElement.length === 0) break;\n\n          var isRoot = parentElement[0] == $rootElement[0];\n          var state = isRoot ? rootAnimateState : parentElement.data(NG_ANIMATE_STATE);\n          var result = state && (!!state.disabled || !!state.running);\n          if(isRoot || result) {\n            return result;\n          }\n\n          if(isRoot) return true;\n        }\n        while(parentElement = parentElement.parent());\n\n        return true;\n      }\n    }]);\n\n    $animateProvider.register('', ['$window', '$sniffer', '$timeout', function($window, $sniffer, $timeout) {\n      // Detect proper transitionend/animationend event names.\n      var CSS_PREFIX = '', TRANSITION_PROP, TRANSITIONEND_EVENT, ANIMATION_PROP, ANIMATIONEND_EVENT;\n\n      // If unprefixed events are not supported but webkit-prefixed are, use the latter.\n      // Otherwise, just use W3C names, browsers not supporting them at all will just ignore them.\n      // Note: Chrome implements `window.onwebkitanimationend` and doesn't implement `window.onanimationend`\n      // but at the same time dispatches the `animationend` event and not `webkitAnimationEnd`.\n      // Register both events in case `window.onanimationend` is not supported because of that,\n      // do the same for `transitionend` as Safari is likely to exhibit similar behavior.\n      // Also, the only modern browser that uses vendor prefixes for transitions/keyframes is webkit\n      // therefore there is no reason to test anymore for other vendor prefixes: http://caniuse.com/#search=transition\n      if (window.ontransitionend === undefined && window.onwebkittransitionend !== undefined) {\n        CSS_PREFIX = '-webkit-';\n        TRANSITION_PROP = 'WebkitTransition';\n        TRANSITIONEND_EVENT = 'webkitTransitionEnd transitionend';\n      } else {\n        TRANSITION_PROP = 'transition';\n        TRANSITIONEND_EVENT = 'transitionend';\n      }\n\n      if (window.onanimationend === undefined && window.onwebkitanimationend !== undefined) {\n        CSS_PREFIX = '-webkit-';\n        ANIMATION_PROP = 'WebkitAnimation';\n        ANIMATIONEND_EVENT = 'webkitAnimationEnd animationend';\n      } else {\n        ANIMATION_PROP = 'animation';\n        ANIMATIONEND_EVENT = 'animationend';\n      }\n\n      var DURATION_KEY = 'Duration';\n      var PROPERTY_KEY = 'Property';\n      var DELAY_KEY = 'Delay';\n      var ANIMATION_ITERATION_COUNT_KEY = 'IterationCount';\n      var NG_ANIMATE_PARENT_KEY = '$$ngAnimateKey';\n      var NG_ANIMATE_CSS_DATA_KEY = '$$ngAnimateCSS3Data';\n      var NG_ANIMATE_FALLBACK_CLASS_NAME = 'ng-animate-start';\n      var NG_ANIMATE_FALLBACK_ACTIVE_CLASS_NAME = 'ng-animate-active';\n\n      var lookupCache = {};\n      var parentCounter = 0;\n\n      var animationReflowQueue = [], animationTimer, timeOut = false;\n      function afterReflow(callback) {\n        animationReflowQueue.push(callback);\n        $timeout.cancel(animationTimer);\n        animationTimer = $timeout(function() {\n          forEach(animationReflowQueue, function(fn) {\n            fn();\n          });\n          animationReflowQueue = [];\n          animationTimer = null;\n          lookupCache = {};\n        }, 10, false);\n      }\n\n      function applyStyle(node, style) {\n        var oldStyle = node.getAttribute('style') || '';\n        var newStyle = (oldStyle.length > 0 ? '; ' : '') + style;\n        node.setAttribute('style', newStyle);\n        return oldStyle;\n      }\n\n      function getElementAnimationDetails(element, cacheKey) {\n        var data = cacheKey ? lookupCache[cacheKey] : null;\n        if(!data) {\n          var transitionDuration = 0;\n          var transitionDelay = 0;\n          var animationDuration = 0;\n          var animationDelay = 0;\n          var transitionDelayStyle;\n          var animationDelayStyle;\n          var transitionDurationStyle;\n          var transitionPropertyStyle;\n\n          //we want all the styles defined before and after\n          forEach(element, function(element) {\n            if (element.nodeType == ELEMENT_NODE) {\n              var elementStyles = $window.getComputedStyle(element) || {};\n\n              transitionDurationStyle = elementStyles[TRANSITION_PROP + DURATION_KEY];\n\n              transitionDuration = Math.max(parseMaxTime(transitionDurationStyle), transitionDuration);\n\n              transitionPropertyStyle = elementStyles[TRANSITION_PROP + PROPERTY_KEY];\n\n              transitionDelayStyle = elementStyles[TRANSITION_PROP + DELAY_KEY];\n\n              transitionDelay  = Math.max(parseMaxTime(transitionDelayStyle), transitionDelay);\n\n              animationDelayStyle = elementStyles[ANIMATION_PROP + DELAY_KEY];\n\n              animationDelay   = Math.max(parseMaxTime(animationDelayStyle), animationDelay);\n\n              var aDuration  = parseMaxTime(elementStyles[ANIMATION_PROP + DURATION_KEY]);\n\n              if(aDuration > 0) {\n                aDuration *= parseInt(elementStyles[ANIMATION_PROP + ANIMATION_ITERATION_COUNT_KEY], 10) || 1;\n              }\n\n              animationDuration = Math.max(aDuration, animationDuration);\n            }\n          });\n          data = {\n            total : 0,\n            transitionPropertyStyle: transitionPropertyStyle,\n            transitionDurationStyle: transitionDurationStyle,\n            transitionDelayStyle: transitionDelayStyle,\n            transitionDelay: transitionDelay,\n            transitionDuration: transitionDuration,\n            animationDelayStyle: animationDelayStyle,\n            animationDelay: animationDelay,\n            animationDuration: animationDuration\n          };\n          if(cacheKey) {\n            lookupCache[cacheKey] = data;\n          }\n        }\n        return data;\n      }\n\n      function parseMaxTime(str) {\n        var maxValue = 0;\n        var values = angular.isString(str) ?\n          str.split(/\\s*,\\s*/) :\n          [];\n        forEach(values, function(value) {\n          maxValue = Math.max(parseFloat(value) || 0, maxValue);\n        });\n        return maxValue;\n      }\n\n      function getCacheKey(element) {\n        var parentElement = element.parent();\n        var parentID = parentElement.data(NG_ANIMATE_PARENT_KEY);\n        if(!parentID) {\n          parentElement.data(NG_ANIMATE_PARENT_KEY, ++parentCounter);\n          parentID = parentCounter;\n        }\n        return parentID + '-' + element[0].className;\n      }\n\n      function animateSetup(element, className) {\n        var cacheKey = getCacheKey(element);\n        var eventCacheKey = cacheKey + ' ' + className;\n        var stagger = {};\n        var ii = lookupCache[eventCacheKey] ? ++lookupCache[eventCacheKey].total : 0;\n\n        if(ii > 0) {\n          var staggerClassName = className + '-stagger';\n          var staggerCacheKey = cacheKey + ' ' + staggerClassName;\n          var applyClasses = !lookupCache[staggerCacheKey];\n\n          applyClasses && element.addClass(staggerClassName);\n\n          stagger = getElementAnimationDetails(element, staggerCacheKey);\n\n          applyClasses && element.removeClass(staggerClassName);\n        }\n\n        element.addClass(className);\n\n        var timings = getElementAnimationDetails(element, eventCacheKey);\n\n        /* there is no point in performing a reflow if the animation\n           timeout is empty (this would cause a flicker bug normally\n           in the page. There is also no point in performing an animation\n           that only has a delay and no duration */\n        var maxDuration = Math.max(timings.transitionDuration, timings.animationDuration);\n        if(maxDuration === 0) {\n          element.removeClass(className);\n          return false;\n        }\n\n        var node = element[0];\n        //temporarily disable the transition so that the enter styles\n        //don't animate twice (this is here to avoid a bug in Chrome/FF).\n        var activeClassName = '';\n        if(timings.transitionDuration > 0) {\n          element.addClass(NG_ANIMATE_FALLBACK_CLASS_NAME);\n          activeClassName += NG_ANIMATE_FALLBACK_ACTIVE_CLASS_NAME + ' ';\n          node.style[TRANSITION_PROP + PROPERTY_KEY] = 'none';\n        }\n\n        forEach(className.split(' '), function(klass, i) {\n          activeClassName += (i > 0 ? ' ' : '') + klass + '-active';\n        });\n\n        element.data(NG_ANIMATE_CSS_DATA_KEY, {\n          className : className,\n          activeClassName : activeClassName,\n          maxDuration : maxDuration,\n          classes : className + ' ' + activeClassName,\n          timings : timings,\n          stagger : stagger,\n          ii : ii\n        });\n\n        return true;\n      }\n\n      function animateRun(element, className, activeAnimationComplete) {\n        var data = element.data(NG_ANIMATE_CSS_DATA_KEY);\n        if(!element.hasClass(className) || !data) {\n          activeAnimationComplete();\n          return;\n        }\n\n        var node = element[0];\n        var timings = data.timings;\n        var stagger = data.stagger;\n        var maxDuration = data.maxDuration;\n        var activeClassName = data.activeClassName;\n        var maxDelayTime = Math.max(timings.transitionDelay, timings.animationDelay) * 1000;\n        var startTime = Date.now();\n        var css3AnimationEvents = ANIMATIONEND_EVENT + ' ' + TRANSITIONEND_EVENT;\n        var formerStyle;\n        var ii = data.ii;\n\n        var applyFallbackStyle, style = '';\n        if(timings.transitionDuration > 0) {\n          node.style[TRANSITION_PROP + PROPERTY_KEY] = '';\n\n          var propertyStyle = timings.transitionPropertyStyle;\n          if(propertyStyle.indexOf('all') == -1) {\n            applyFallbackStyle = true;\n            var fallbackProperty = $sniffer.msie ? '-ms-zoom' : 'clip';\n            style += CSS_PREFIX + 'transition-property: ' + propertyStyle + ', ' + fallbackProperty + '; ';\n            style += CSS_PREFIX + 'transition-duration: ' + timings.transitionDurationStyle + ', ' + timings.transitionDuration + 's; ';\n          }\n        }\n\n        if(ii > 0) {\n          if(stagger.transitionDelay > 0 && stagger.transitionDuration === 0) {\n            var delayStyle = timings.transitionDelayStyle;\n            if(applyFallbackStyle) {\n              delayStyle += ', ' + timings.transitionDelay + 's';\n            }\n\n            style += CSS_PREFIX + 'transition-delay: ' +\n                     prepareStaggerDelay(delayStyle, stagger.transitionDelay, ii) + '; ';\n          }\n\n          if(stagger.animationDelay > 0 && stagger.animationDuration === 0) {\n            style += CSS_PREFIX + 'animation-delay: ' +\n                     prepareStaggerDelay(timings.animationDelayStyle, stagger.animationDelay, ii) + '; ';\n          }\n        }\n\n        if(style.length > 0) {\n          formerStyle = applyStyle(node, style);\n        }\n\n        element.on(css3AnimationEvents, onAnimationProgress);\n        element.addClass(activeClassName);\n\n        // This will automatically be called by $animate so\n        // there is no need to attach this internally to the\n        // timeout done method.\n        return function onEnd(cancelled) {\n          element.off(css3AnimationEvents, onAnimationProgress);\n          element.removeClass(activeClassName);\n          animateClose(element, className);\n          if(formerStyle != null) {\n            formerStyle.length > 0 ?\n              node.setAttribute('style', formerStyle) :\n              node.removeAttribute('style');\n          }\n        };\n\n        function onAnimationProgress(event) {\n          event.stopPropagation();\n          var ev = event.originalEvent || event;\n          var timeStamp = ev.$manualTimeStamp || ev.timeStamp || Date.now();\n          /* $manualTimeStamp is a mocked timeStamp value which is set\n           * within browserTrigger(). This is only here so that tests can\n           * mock animations properly. Real events fallback to event.timeStamp,\n           * or, if they don't, then a timeStamp is automatically created for them.\n           * We're checking to see if the timeStamp surpasses the expected delay,\n           * but we're using elapsedTime instead of the timeStamp on the 2nd\n           * pre-condition since animations sometimes close off early */\n          if(Math.max(timeStamp - startTime, 0) >= maxDelayTime && ev.elapsedTime >= maxDuration) {\n            activeAnimationComplete();\n          }\n        }\n      }\n\n      function prepareStaggerDelay(delayStyle, staggerDelay, index) {\n        var style = '';\n        forEach(delayStyle.split(','), function(val, i) {\n          style += (i > 0 ? ',' : '') +\n                   (index * staggerDelay + parseInt(val, 10)) + 's';\n        });\n        return style;\n      }\n\n      function animateBefore(element, className) {\n        if(animateSetup(element, className)) {\n          return function(cancelled) {\n            cancelled && animateClose(element, className);\n          };\n        }\n      }\n\n      function animateAfter(element, className, afterAnimationComplete) {\n        if(element.data(NG_ANIMATE_CSS_DATA_KEY)) {\n          return animateRun(element, className, afterAnimationComplete);\n        } else {\n          animateClose(element, className);\n          afterAnimationComplete();\n        }\n      }\n\n      function animate(element, className, animationComplete) {\n        //If the animateSetup function doesn't bother returning a\n        //cancellation function then it means that there is no animation\n        //to perform at all\n        var preReflowCancellation = animateBefore(element, className);\n        if(!preReflowCancellation) {\n          animationComplete();\n          return;\n        }\n\n        //There are two cancellation functions: one is before the first\n        //reflow animation and the second is during the active state\n        //animation. The first function will take care of removing the\n        //data from the element which will not make the 2nd animation\n        //happen in the first place\n        var cancel = preReflowCancellation;\n        afterReflow(function() {\n          //once the reflow is complete then we point cancel to\n          //the new cancellation function which will remove all of the\n          //animation properties from the active animation\n          cancel = animateAfter(element, className, animationComplete);\n        });\n\n        return function(cancelled) {\n          (cancel || noop)(cancelled);\n        };\n      }\n\n      function animateClose(element, className) {\n        element.removeClass(className);\n        element.removeClass(NG_ANIMATE_FALLBACK_CLASS_NAME);\n        element.removeData(NG_ANIMATE_CSS_DATA_KEY);\n      }\n\n      return {\n        allowCancel : function(element, animationEvent, className) {\n          //always cancel the current animation if it is a\n          //structural animation\n          var oldClasses = (element.data(NG_ANIMATE_CSS_DATA_KEY) || {}).classes;\n          if(!oldClasses || ['enter','leave','move'].indexOf(animationEvent) >= 0) {\n            return true;\n          }\n\n          var parentElement = element.parent();\n          var clone = angular.element(element[0].cloneNode());\n\n          //make the element super hidden and override any CSS style values\n          clone.attr('style','position:absolute; top:-9999px; left:-9999px');\n          clone.removeAttr('id');\n          clone.html('');\n\n          forEach(oldClasses.split(' '), function(klass) {\n            clone.removeClass(klass);\n          });\n\n          var suffix = animationEvent == 'addClass' ? '-add' : '-remove';\n          clone.addClass(suffixClasses(className, suffix));\n          parentElement.append(clone);\n\n          var timings = getElementAnimationDetails(clone);\n          clone.remove();\n\n          return Math.max(timings.transitionDuration, timings.animationDuration) > 0;\n        },\n\n        enter : function(element, animationCompleted) {\n          return animate(element, 'ng-enter', animationCompleted);\n        },\n\n        leave : function(element, animationCompleted) {\n          return animate(element, 'ng-leave', animationCompleted);\n        },\n\n        move : function(element, animationCompleted) {\n          return animate(element, 'ng-move', animationCompleted);\n        },\n\n        beforeAddClass : function(element, className, animationCompleted) {\n          var cancellationMethod = animateBefore(element, suffixClasses(className, '-add'));\n          if(cancellationMethod) {\n            afterReflow(animationCompleted);\n            return cancellationMethod;\n          }\n          animationCompleted();\n        },\n\n        addClass : function(element, className, animationCompleted) {\n          return animateAfter(element, suffixClasses(className, '-add'), animationCompleted);\n        },\n\n        beforeRemoveClass : function(element, className, animationCompleted) {\n          var cancellationMethod = animateBefore(element, suffixClasses(className, '-remove'));\n          if(cancellationMethod) {\n            afterReflow(animationCompleted);\n            return cancellationMethod;\n          }\n          animationCompleted();\n        },\n\n        removeClass : function(element, className, animationCompleted) {\n          return animateAfter(element, suffixClasses(className, '-remove'), animationCompleted);\n        }\n      };\n\n      function suffixClasses(classes, suffix) {\n        var className = '';\n        classes = angular.isArray(classes) ? classes : classes.split(/\\s+/);\n        forEach(classes, function(klass, i) {\n          if(klass && klass.length > 0) {\n            className += (i > 0 ? ' ' : '') + klass + suffix;\n          }\n        });\n        return className;\n      }\n    }]);\n  }]);\n\n\n})(window, window.angular);\n;\n/**\n * @license AngularJS v1.2.0\n * (c) 2010-2012 Google, Inc. http://angularjs.org\n * License: MIT\n */\n(function(window, angular, undefined) {'use strict';\n\nvar $resourceMinErr = angular.$$minErr('$resource');\n\n/**\n * @ngdoc overview\n * @name ngResource\n * @description\n *\n * # ngResource\n *\n * The `ngResource` module provides interaction support with RESTful services\n * via the $resource service.\n *\n * {@installModule resource}\n *\n * <div doc-module-components=\"ngResource\"></div>\n *\n * See {@link ngResource.$resource `$resource`} for usage.\n */\n\n/**\n * @ngdoc object\n * @name ngResource.$resource\n * @requires $http\n *\n * @description\n * A factory which creates a resource object that lets you interact with\n * [RESTful](http://en.wikipedia.org/wiki/Representational_State_Transfer) server-side data sources.\n *\n * The returned resource object has action methods which provide high-level behaviors without\n * the need to interact with the low level {@link ng.$http $http} service.\n *\n * Requires the {@link ngResource `ngResource`} module to be installed.\n *\n * @param {string} url A parametrized URL template with parameters prefixed by `:` as in\n *   `/user/:username`. If you are using a URL with a port number (e.g.\n *   `http://example.com:8080/api`), it will be respected.\n *\n *   If you are using a url with a suffix, just add the suffix, like this:\n *   `$resource('http://example.com/resource.json')` or `$resource('http://example.com/:id.json')`\n *   or even `$resource('http://example.com/resource/:resource_id.:format')`\n *   If the parameter before the suffix is empty, :resource_id in this case, then the `/.` will be\n *   collapsed down to a single `.`.  If you need this sequence to appear and not collapse then you\n *   can escape it with `/\\.`.\n *\n * @param {Object=} paramDefaults Default values for `url` parameters. These can be overridden in\n *   `actions` methods. If any of the parameter value is a function, it will be executed every time\n *   when a param value needs to be obtained for a request (unless the param was overridden).\n *\n *   Each key value in the parameter object is first bound to url template if present and then any\n *   excess keys are appended to the url search query after the `?`.\n *\n *   Given a template `/path/:verb` and parameter `{verb:'greet', salutation:'Hello'}` results in\n *   URL `/path/greet?salutation=Hello`.\n *\n *   If the parameter value is prefixed with `@` then the value of that parameter is extracted from\n *   the data object (useful for non-GET operations).\n *\n * @param {Object.<Object>=} actions Hash with declaration of custom action that should extend the\n *   default set of resource actions. The declaration should be created in the format of {@link\n *   ng.$http#usage_parameters $http.config}:\n *\n *       {action1: {method:?, params:?, isArray:?, headers:?, ...},\n *        action2: {method:?, params:?, isArray:?, headers:?, ...},\n *        ...}\n *\n *   Where:\n *\n *   - **`action`** – {string} – The name of action. This name becomes the name of the method on\n *     your resource object.\n *   - **`method`** – {string} – HTTP request method. Valid methods are: `GET`, `POST`, `PUT`,\n *     `DELETE`, and `JSONP`.\n *   - **`params`** – {Object=} – Optional set of pre-bound parameters for this action. If any of\n *     the parameter value is a function, it will be executed every time when a param value needs to\n *     be obtained for a request (unless the param was overridden).\n *   - **`url`** – {string} – action specific `url` override. The url templating is supported just\n *     like for the resource-level urls.\n *   - **`isArray`** – {boolean=} – If true then the returned object for this action is an array,\n *     see `returns` section.\n *   - **`transformRequest`** –\n *     `{function(data, headersGetter)|Array.<function(data, headersGetter)>}` –\n *     transform function or an array of such functions. The transform function takes the http\n *     request body and headers and returns its transformed (typically serialized) version.\n *   - **`transformResponse`** –\n *     `{function(data, headersGetter)|Array.<function(data, headersGetter)>}` –\n *     transform function or an array of such functions. The transform function takes the http\n *     response body and headers and returns its transformed (typically deserialized) version.\n *   - **`cache`** – `{boolean|Cache}` – If true, a default $http cache will be used to cache the\n *     GET request, otherwise if a cache instance built with\n *     {@link ng.$cacheFactory $cacheFactory}, this cache will be used for\n *     caching.\n *   - **`timeout`** – `{number|Promise}` – timeout in milliseconds, or {@link ng.$q promise} that\n *     should abort the request when resolved.\n *   - **`withCredentials`** - `{boolean}` - whether to set the `withCredentials` flag on the\n *     XHR object. See {@link https://developer.mozilla.org/en/http_access_control#section_5\n *     requests with credentials} for more information.\n *   - **`responseType`** - `{string}` - see {@link\n *     https://developer.mozilla.org/en-US/docs/DOM/XMLHttpRequest#responseType requestType}.\n *   - **`interceptor`** - `{Object=}` - The interceptor object has two optional methods -\n *     `response` and `responseError`. Both `response` and `responseError` interceptors get called\n *     with `http response` object. See {@link ng.$http $http interceptors}.\n *\n * @returns {Object} A resource \"class\" object with methods for the default set of resource actions\n *   optionally extended with custom `actions`. The default set contains these actions:\n *\n *       { 'get':    {method:'GET'},\n *         'save':   {method:'POST'},\n *         'query':  {method:'GET', isArray:true},\n *         'remove': {method:'DELETE'},\n *         'delete': {method:'DELETE'} };\n *\n *   Calling these methods invoke an {@link ng.$http} with the specified http method,\n *   destination and parameters. When the data is returned from the server then the object is an\n *   instance of the resource class. The actions `save`, `remove` and `delete` are available on it\n *   as  methods with the `$` prefix. This allows you to easily perform CRUD operations (create,\n *   read, update, delete) on server-side data like this:\n *   <pre>\n        var User = $resource('/user/:userId', {userId:'@id'});\n        var user = User.get({userId:123}, function() {\n          user.abc = true;\n          user.$save();\n        });\n     </pre>\n *\n *   It is important to realize that invoking a $resource object method immediately returns an\n *   empty reference (object or array depending on `isArray`). Once the data is returned from the\n *   server the existing reference is populated with the actual data. This is a useful trick since\n *   usually the resource is assigned to a model which is then rendered by the view. Having an empty\n *   object results in no rendering, once the data arrives from the server then the object is\n *   populated with the data and the view automatically re-renders itself showing the new data. This\n *   means that in most case one never has to write a callback function for the action methods.\n *\n *   The action methods on the class object or instance object can be invoked with the following\n *   parameters:\n *\n *   - HTTP GET \"class\" actions: `Resource.action([parameters], [success], [error])`\n *   - non-GET \"class\" actions: `Resource.action([parameters], postData, [success], [error])`\n *   - non-GET instance actions:  `instance.$action([parameters], [success], [error])`\n *\n *   Success callback is called with (value, responseHeaders) arguments. Error callback is called\n *   with (httpResponse) argument.\n *\n *   Class actions return empty instance (with additional properties below).\n *   Instance actions return promise of the action.\n *\n *   The Resource instances and collection have these additional properties:\n *\n *   - `$promise`: the {@link ng.$q promise} of the original server interaction that created this\n *     instance or collection.\n *\n *     On success, the promise is resolved with the same resource instance or collection object,\n *     updated with data from server. This makes it easy to use in\n *     {@link ngRoute.$routeProvider resolve section of $routeProvider.when()} to defer view\n *     rendering until the resource(s) are loaded.\n *\n *     On failure, the promise is resolved with the {@link ng.$http http response} object, without\n *     the `resource` property.\n *\n *   - `$resolved`: `true` after first server interaction is completed (either with success or\n *      rejection), `false` before that. Knowing if the Resource has been resolved is useful in\n *      data-binding.\n *\n * @example\n *\n * # Credit card resource\n *\n * <pre>\n     // Define CreditCard class\n     var CreditCard = $resource('/user/:userId/card/:cardId',\n      {userId:123, cardId:'@id'}, {\n       charge: {method:'POST', params:{charge:true}}\n      });\n\n     // We can retrieve a collection from the server\n     var cards = CreditCard.query(function() {\n       // GET: /user/123/card\n       // server returns: [ {id:456, number:'1234', name:'Smith'} ];\n\n       var card = cards[0];\n       // each item is an instance of CreditCard\n       expect(card instanceof CreditCard).toEqual(true);\n       card.name = \"J. Smith\";\n       // non GET methods are mapped onto the instances\n       card.$save();\n       // POST: /user/123/card/456 {id:456, number:'1234', name:'J. Smith'}\n       // server returns: {id:456, number:'1234', name: 'J. Smith'};\n\n       // our custom method is mapped as well.\n       card.$charge({amount:9.99});\n       // POST: /user/123/card/456?amount=9.99&charge=true {id:456, number:'1234', name:'J. Smith'}\n     });\n\n     // we can create an instance as well\n     var newCard = new CreditCard({number:'0123'});\n     newCard.name = \"Mike Smith\";\n     newCard.$save();\n     // POST: /user/123/card {number:'0123', name:'Mike Smith'}\n     // server returns: {id:789, number:'01234', name: 'Mike Smith'};\n     expect(newCard.id).toEqual(789);\n * </pre>\n *\n * The object returned from this function execution is a resource \"class\" which has \"static\" method\n * for each action in the definition.\n *\n * Calling these methods invoke `$http` on the `url` template with the given `method`, `params` and\n * `headers`.\n * When the data is returned from the server then the object is an instance of the resource type and\n * all of the non-GET methods are available with `$` prefix. This allows you to easily support CRUD\n * operations (create, read, update, delete) on server-side data.\n\n   <pre>\n     var User = $resource('/user/:userId', {userId:'@id'});\n     var user = User.get({userId:123}, function() {\n       user.abc = true;\n       user.$save();\n     });\n   </pre>\n *\n * It's worth noting that the success callback for `get`, `query` and other methods gets passed\n * in the response that came from the server as well as $http header getter function, so one\n * could rewrite the above example and get access to http headers as:\n *\n   <pre>\n     var User = $resource('/user/:userId', {userId:'@id'});\n     User.get({userId:123}, function(u, getResponseHeaders){\n       u.abc = true;\n       u.$save(function(u, putResponseHeaders) {\n         //u => saved user object\n         //putResponseHeaders => $http header getter\n       });\n     });\n   </pre>\n\n * # Buzz client\n\n   Let's look at what a buzz client created with the `$resource` service looks like:\n    <doc:example>\n    <doc:source jsfiddle=\"false\">\n    <script>\n     function BuzzController($resource) {\n       this.userId = 'googlebuzz';\n       this.Activity = $resource(\n         'https://www.googleapis.com/buzz/v1/activities/:userId/:visibility/:activityId/:comments',\n         {alt:'json', callback:'JSON_CALLBACK'},\n         {\n           get:{method:'JSONP', params:{visibility:'@self'}},\n           replies: {method:'JSONP', params:{visibility:'@self', comments:'@comments'}}\n         }\n       );\n     }\n\n     BuzzController.prototype = {\n       fetch: function() {\n         this.activities = this.Activity.get({userId:this.userId});\n       },\n       expandReplies: function(activity) {\n         activity.replies = this.Activity.replies({userId:this.userId, activityId:activity.id});\n       }\n     };\n     BuzzController.$inject = ['$resource'];\n    </script>\n\n    <div ng-controller=\"BuzzController\">\n     <input ng-model=\"userId\"/>\n     <button ng-click=\"fetch()\">fetch</button>\n     <hr/>\n     <div ng-repeat=\"item in activities.data.items\">\n       <h1 style=\"font-size: 15px;\">\n         <img src=\"{{item.actor.thumbnailUrl}}\" style=\"max-height:30px;max-width:30px;\"/>\n         <a href=\"{{item.actor.profileUrl}}\">{{item.actor.name}}</a>\n         <a href ng-click=\"expandReplies(item)\" style=\"float: right;\">Expand replies:\n           {{item.links.replies[0].count}}</a>\n       </h1>\n       {{item.object.content | html}}\n       <div ng-repeat=\"reply in item.replies.data.items\" style=\"margin-left: 20px;\">\n         <img src=\"{{reply.actor.thumbnailUrl}}\" style=\"max-height:30px;max-width:30px;\"/>\n         <a href=\"{{reply.actor.profileUrl}}\">{{reply.actor.name}}</a>: {{reply.content | html}}\n       </div>\n     </div>\n    </div>\n    </doc:source>\n    <doc:scenario>\n    </doc:scenario>\n    </doc:example>\n */\nangular.module('ngResource', ['ng']).\n  factory('$resource', ['$http', '$parse', '$q', function($http, $parse, $q) {\n    var DEFAULT_ACTIONS = {\n      'get':    {method:'GET'},\n      'save':   {method:'POST'},\n      'query':  {method:'GET', isArray:true},\n      'remove': {method:'DELETE'},\n      'delete': {method:'DELETE'}\n    };\n    var noop = angular.noop,\n        forEach = angular.forEach,\n        extend = angular.extend,\n        copy = angular.copy,\n        isFunction = angular.isFunction,\n        getter = function(obj, path) {\n          return $parse(path)(obj);\n        };\n\n    /**\n     * We need our custom method because encodeURIComponent is too aggressive and doesn't follow\n     * http://www.ietf.org/rfc/rfc3986.txt with regards to the character set (pchar) allowed in path\n     * segments:\n     *    segment       = *pchar\n     *    pchar         = unreserved / pct-encoded / sub-delims / \":\" / \"@\"\n     *    pct-encoded   = \"%\" HEXDIG HEXDIG\n     *    unreserved    = ALPHA / DIGIT / \"-\" / \".\" / \"_\" / \"~\"\n     *    sub-delims    = \"!\" / \"$\" / \"&\" / \"'\" / \"(\" / \")\"\n     *                     / \"*\" / \"+\" / \",\" / \";\" / \"=\"\n     */\n    function encodeUriSegment(val) {\n      return encodeUriQuery(val, true).\n        replace(/%26/gi, '&').\n        replace(/%3D/gi, '=').\n        replace(/%2B/gi, '+');\n    }\n\n\n    /**\n     * This method is intended for encoding *key* or *value* parts of query component. We need a\n     * custom method because encodeURIComponent is too aggressive and encodes stuff that doesn't\n     * have to be encoded per http://tools.ietf.org/html/rfc3986:\n     *    query       = *( pchar / \"/\" / \"?\" )\n     *    pchar         = unreserved / pct-encoded / sub-delims / \":\" / \"@\"\n     *    unreserved    = ALPHA / DIGIT / \"-\" / \".\" / \"_\" / \"~\"\n     *    pct-encoded   = \"%\" HEXDIG HEXDIG\n     *    sub-delims    = \"!\" / \"$\" / \"&\" / \"'\" / \"(\" / \")\"\n     *                     / \"*\" / \"+\" / \",\" / \";\" / \"=\"\n     */\n    function encodeUriQuery(val, pctEncodeSpaces) {\n      return encodeURIComponent(val).\n        replace(/%40/gi, '@').\n        replace(/%3A/gi, ':').\n        replace(/%24/g, '$').\n        replace(/%2C/gi, ',').\n        replace(/%20/g, (pctEncodeSpaces ? '%20' : '+'));\n    }\n\n    function Route(template, defaults) {\n      this.template = template;\n      this.defaults = defaults || {};\n      this.urlParams = {};\n    }\n\n    Route.prototype = {\n      setUrlParams: function(config, params, actionUrl) {\n        var self = this,\n            url = actionUrl || self.template,\n            val,\n            encodedVal;\n\n        var urlParams = self.urlParams = {};\n        forEach(url.split(/\\W/), function(param){\n          if (param === 'hasOwnProperty') {\n            throw $resourceMinErr('badname', \"hasOwnProperty is not a valid parameter name.\");\n          }\n          if (!(new RegExp(\"^\\\\d+$\").test(param)) && param &&\n               (new RegExp(\"(^|[^\\\\\\\\]):\" + param + \"(\\\\W|$)\").test(url))) {\n            urlParams[param] = true;\n          }\n        });\n        url = url.replace(/\\\\:/g, ':');\n\n        params = params || {};\n        forEach(self.urlParams, function(_, urlParam){\n          val = params.hasOwnProperty(urlParam) ? params[urlParam] : self.defaults[urlParam];\n          if (angular.isDefined(val) && val !== null) {\n            encodedVal = encodeUriSegment(val);\n            url = url.replace(new RegExp(\":\" + urlParam + \"(\\\\W|$)\", \"g\"), encodedVal + \"$1\");\n          } else {\n            url = url.replace(new RegExp(\"(\\/?):\" + urlParam + \"(\\\\W|$)\", \"g\"), function(match,\n                leadingSlashes, tail) {\n              if (tail.charAt(0) == '/') {\n                return tail;\n              } else {\n                return leadingSlashes + tail;\n              }\n            });\n          }\n        });\n\n        // strip trailing slashes and set the url\n        url = url.replace(/\\/+$/, '');\n        // then replace collapse `/.` if found in the last URL path segment before the query\n        // E.g. `http://url.com/id./format?q=x` becomes `http://url.com/id.format?q=x`\n        url = url.replace(/\\/\\.(?=\\w+($|\\?))/, '.');\n        // replace escaped `/\\.` with `/.`\n        config.url = url.replace(/\\/\\\\\\./, '/.');\n\n\n        // set params - delegate param encoding to $http\n        forEach(params, function(value, key){\n          if (!self.urlParams[key]) {\n            config.params = config.params || {};\n            config.params[key] = value;\n          }\n        });\n      }\n    };\n\n\n    function resourceFactory(url, paramDefaults, actions) {\n      var route = new Route(url);\n\n      actions = extend({}, DEFAULT_ACTIONS, actions);\n\n      function extractParams(data, actionParams){\n        var ids = {};\n        actionParams = extend({}, paramDefaults, actionParams);\n        forEach(actionParams, function(value, key){\n          if (isFunction(value)) { value = value(); }\n          ids[key] = value && value.charAt && value.charAt(0) == '@' ?\n            getter(data, value.substr(1)) : value;\n        });\n        return ids;\n      }\n\n      function defaultResponseInterceptor(response) {\n        return response.resource;\n      }\n\n      function Resource(value){\n        copy(value || {}, this);\n      }\n\n      forEach(actions, function(action, name) {\n        var hasBody = /^(POST|PUT|PATCH)$/i.test(action.method);\n\n        Resource[name] = function(a1, a2, a3, a4) {\n          var params = {}, data, success, error;\n\n          /* jshint -W086 */ /* (purposefully fall through case statements) */\n          switch(arguments.length) {\n          case 4:\n            error = a4;\n            success = a3;\n            //fallthrough\n          case 3:\n          case 2:\n            if (isFunction(a2)) {\n              if (isFunction(a1)) {\n                success = a1;\n                error = a2;\n                break;\n              }\n\n              success = a2;\n              error = a3;\n              //fallthrough\n            } else {\n              params = a1;\n              data = a2;\n              success = a3;\n              break;\n            }\n          case 1:\n            if (isFunction(a1)) success = a1;\n            else if (hasBody) data = a1;\n            else params = a1;\n            break;\n          case 0: break;\n          default:\n            throw $resourceMinErr('badargs',\n              \"Expected up to 4 arguments [params, data, success, error], got {0} arguments\",\n              arguments.length);\n          }\n          /* jshint +W086 */ /* (purposefully fall through case statements) */\n\n          var isInstanceCall = data instanceof Resource;\n          var value = isInstanceCall ? data : (action.isArray ? [] : new Resource(data));\n          var httpConfig = {};\n          var responseInterceptor = action.interceptor && action.interceptor.response ||\n                                    defaultResponseInterceptor;\n          var responseErrorInterceptor = action.interceptor && action.interceptor.responseError ||\n                                    undefined;\n\n          forEach(action, function(value, key) {\n            if (key != 'params' && key != 'isArray' && key != 'interceptor') {\n              httpConfig[key] = copy(value);\n            }\n          });\n\n          if (hasBody) httpConfig.data = data;\n          route.setUrlParams(httpConfig,\n                             extend({}, extractParams(data, action.params || {}), params),\n                             action.url);\n\n          var promise = $http(httpConfig).then(function(response) {\n            var data = response.data,\n                promise = value.$promise;\n\n            if (data) {\n              // Need to convert action.isArray to boolean in case it is undefined\n              // jshint -W018\n              if ( angular.isArray(data) !== (!!action.isArray) ) {\n                throw $resourceMinErr('badcfg', 'Error in resource configuration. Expected ' +\n                  'response to contain an {0} but got an {1}',\n                  action.isArray?'array':'object', angular.isArray(data)?'array':'object');\n              }\n              // jshint +W018\n              if (action.isArray) {\n                value.length = 0;\n                forEach(data, function(item) {\n                  value.push(new Resource(item));\n                });\n              } else {\n                copy(data, value);\n                value.$promise = promise;\n              }\n            }\n\n            value.$resolved = true;\n\n            response.resource = value;\n\n            return response;\n          }, function(response) {\n            value.$resolved = true;\n\n            (error||noop)(response);\n\n            return $q.reject(response);\n          });\n\n          promise = promise.then(\n              function(response) {\n                var value = responseInterceptor(response);\n                (success||noop)(value, response.headers);\n                return value;\n              },\n              responseErrorInterceptor);\n\n          if (!isInstanceCall) {\n            // we are creating instance / collection\n            // - set the initial promise\n            // - return the instance / collection\n            value.$promise = promise;\n            value.$resolved = false;\n\n            return value;\n          }\n\n          // instance call\n          return promise;\n        };\n\n\n        Resource.prototype['$' + name] = function(params, success, error) {\n          if (isFunction(params)) {\n            error = success; success = params; params = {};\n          }\n          var result = Resource[name](params, this, success, error);\n          return result.$promise || result;\n        };\n      });\n\n      Resource.bind = function(additionalParamDefaults){\n        return resourceFactory(url, extend({}, paramDefaults, additionalParamDefaults), actions);\n      };\n\n      return Resource;\n    }\n\n    return resourceFactory;\n  }]);\n\n\n})(window, window.angular);\n;\n/**\n * @license AngularJS v1.2.0\n * (c) 2010-2012 Google, Inc. http://angularjs.org\n * License: MIT\n */\n(function(window, angular, undefined) {'use strict';\n\nvar $sanitizeMinErr = angular.$$minErr('$sanitize');\n\n/**\n * @ngdoc overview\n * @name ngSanitize\n * @description\n *\n * # ngSanitize\n *\n * The `ngSanitize` module provides functionality to sanitize HTML.\n *\n * {@installModule sanitize}\n *\n * <div doc-module-components=\"ngSanitize\"></div>\n *\n * See {@link ngSanitize.$sanitize `$sanitize`} for usage.\n */\n\n/*\n * HTML Parser By Misko Hevery (misko@hevery.com)\n * based on:  HTML Parser By John Resig (ejohn.org)\n * Original code by Erik Arvidsson, Mozilla Public License\n * http://erik.eae.net/simplehtmlparser/simplehtmlparser.js\n *\n * // Use like so:\n * htmlParser(htmlString, {\n *     start: function(tag, attrs, unary) {},\n *     end: function(tag) {},\n *     chars: function(text) {},\n *     comment: function(text) {}\n * });\n *\n */\n\n\n/**\n * @ngdoc service\n * @name ngSanitize.$sanitize\n * @function\n *\n * @description\n *   The input is sanitized by parsing the html into tokens. All safe tokens (from a whitelist) are\n *   then serialized back to properly escaped html string. This means that no unsafe input can make\n *   it into the returned string, however, since our parser is more strict than a typical browser\n *   parser, it's possible that some obscure input, which would be recognized as valid HTML by a\n *   browser, won't make it through the sanitizer.\n *\n * @param {string} html Html input.\n * @returns {string} Sanitized html.\n *\n * @example\n   <doc:example module=\"ngSanitize\">\n   <doc:source>\n     <script>\n       function Ctrl($scope, $sce) {\n         $scope.snippet =\n           '<p style=\"color:blue\">an html\\n' +\n           '<em onmouseover=\"this.textContent=\\'PWN3D!\\'\">click here</em>\\n' +\n           'snippet</p>';\n         $scope.deliberatelyTrustDangerousSnippet = function() {\n           return $sce.trustAsHtml($scope.snippet);\n         };\n       }\n     </script>\n     <div ng-controller=\"Ctrl\">\n        Snippet: <textarea ng-model=\"snippet\" cols=\"60\" rows=\"3\"></textarea>\n       <table>\n         <tr>\n           <td>Directive</td>\n           <td>How</td>\n           <td>Source</td>\n           <td>Rendered</td>\n         </tr>\n         <tr id=\"bind-html-with-sanitize\">\n           <td>ng-bind-html</td>\n           <td>Automatically uses $sanitize</td>\n           <td><pre>&lt;div ng-bind-html=\"snippet\"&gt;<br/>&lt;/div&gt;</pre></td>\n           <td><div ng-bind-html=\"snippet\"></div></td>\n         </tr>\n         <tr id=\"bind-html-with-trust\">\n           <td>ng-bind-html</td>\n           <td>Bypass $sanitize by explicitly trusting the dangerous value</td>\n           <td>\n           <pre>&lt;div ng-bind-html=\"deliberatelyTrustDangerousSnippet()\"&gt;\n&lt;/div&gt;</pre>\n           </td>\n           <td><div ng-bind-html=\"deliberatelyTrustDangerousSnippet()\"></div></td>\n         </tr>\n         <tr id=\"bind-default\">\n           <td>ng-bind</td>\n           <td>Automatically escapes</td>\n           <td><pre>&lt;div ng-bind=\"snippet\"&gt;<br/>&lt;/div&gt;</pre></td>\n           <td><div ng-bind=\"snippet\"></div></td>\n         </tr>\n       </table>\n       </div>\n   </doc:source>\n   <doc:scenario>\n     it('should sanitize the html snippet by default', function() {\n       expect(using('#bind-html-with-sanitize').element('div').html()).\n         toBe('<p>an html\\n<em>click here</em>\\nsnippet</p>');\n     });\n\n     it('should inline raw snippet if bound to a trusted value', function() {\n       expect(using('#bind-html-with-trust').element(\"div\").html()).\n         toBe(\"<p style=\\\"color:blue\\\">an html\\n\" +\n              \"<em onmouseover=\\\"this.textContent='PWN3D!'\\\">click here</em>\\n\" +\n              \"snippet</p>\");\n     });\n\n     it('should escape snippet without any filter', function() {\n       expect(using('#bind-default').element('div').html()).\n         toBe(\"&lt;p style=\\\"color:blue\\\"&gt;an html\\n\" +\n              \"&lt;em onmouseover=\\\"this.textContent='PWN3D!'\\\"&gt;click here&lt;/em&gt;\\n\" +\n              \"snippet&lt;/p&gt;\");\n     });\n\n     it('should update', function() {\n       input('snippet').enter('new <b onclick=\"alert(1)\">text</b>');\n       expect(using('#bind-html-with-sanitize').element('div').html()).toBe('new <b>text</b>');\n       expect(using('#bind-html-with-trust').element('div').html()).toBe(\n         'new <b onclick=\"alert(1)\">text</b>');\n       expect(using('#bind-default').element('div').html()).toBe(\n         \"new &lt;b onclick=\\\"alert(1)\\\"&gt;text&lt;/b&gt;\");\n     });\n   </doc:scenario>\n   </doc:example>\n */\nvar $sanitize = function(html) {\n  var buf = [];\n    htmlParser(html, htmlSanitizeWriter(buf));\n    return buf.join('');\n};\n\n\n// Regular Expressions for parsing tags and attributes\nvar START_TAG_REGEXP =\n       /^<\\s*([\\w:-]+)((?:\\s+[\\w:-]+(?:\\s*=\\s*(?:(?:\"[^\"]*\")|(?:'[^']*')|[^>\\s]+))?)*)\\s*(\\/?)\\s*>/,\n  END_TAG_REGEXP = /^<\\s*\\/\\s*([\\w:-]+)[^>]*>/,\n  ATTR_REGEXP = /([\\w:-]+)(?:\\s*=\\s*(?:(?:\"((?:[^\"])*)\")|(?:'((?:[^'])*)')|([^>\\s]+)))?/g,\n  BEGIN_TAG_REGEXP = /^</,\n  BEGING_END_TAGE_REGEXP = /^<\\s*\\//,\n  COMMENT_REGEXP = /<!--(.*?)-->/g,\n  DOCTYPE_REGEXP = /<!DOCTYPE([^>]*?)>/i,\n  CDATA_REGEXP = /<!\\[CDATA\\[(.*?)]]>/g,\n  URI_REGEXP = /^((ftp|https?):\\/\\/|mailto:|tel:|#)/i,\n  // Match everything outside of normal chars and \" (quote character)\n  NON_ALPHANUMERIC_REGEXP = /([^\\#-~| |!])/g;\n\n\n// Good source of info about elements and attributes\n// http://dev.w3.org/html5/spec/Overview.html#semantics\n// http://simon.html5.org/html-elements\n\n// Safe Void Elements - HTML5\n// http://dev.w3.org/html5/spec/Overview.html#void-elements\nvar voidElements = makeMap(\"area,br,col,hr,img,wbr\");\n\n// Elements that you can, intentionally, leave open (and which close themselves)\n// http://dev.w3.org/html5/spec/Overview.html#optional-tags\nvar optionalEndTagBlockElements = makeMap(\"colgroup,dd,dt,li,p,tbody,td,tfoot,th,thead,tr\"),\n    optionalEndTagInlineElements = makeMap(\"rp,rt\"),\n    optionalEndTagElements = angular.extend({},\n                                            optionalEndTagInlineElements,\n                                            optionalEndTagBlockElements);\n\n// Safe Block Elements - HTML5\nvar blockElements = angular.extend({}, optionalEndTagBlockElements, makeMap(\"address,article,\" +\n        \"aside,blockquote,caption,center,del,dir,div,dl,figure,figcaption,footer,h1,h2,h3,h4,h5,\" +\n        \"h6,header,hgroup,hr,ins,map,menu,nav,ol,pre,script,section,table,ul\"));\n\n// Inline Elements - HTML5\nvar inlineElements = angular.extend({}, optionalEndTagInlineElements, makeMap(\"a,abbr,acronym,b,\" +\n        \"bdi,bdo,big,br,cite,code,del,dfn,em,font,i,img,ins,kbd,label,map,mark,q,ruby,rp,rt,s,\" +\n        \"samp,small,span,strike,strong,sub,sup,time,tt,u,var\"));\n\n\n// Special Elements (can contain anything)\nvar specialElements = makeMap(\"script,style\");\n\nvar validElements = angular.extend({},\n                                   voidElements,\n                                   blockElements,\n                                   inlineElements,\n                                   optionalEndTagElements);\n\n//Attributes that have href and hence need to be sanitized\nvar uriAttrs = makeMap(\"background,cite,href,longdesc,src,usemap\");\nvar validAttrs = angular.extend({}, uriAttrs, makeMap(\n    'abbr,align,alt,axis,bgcolor,border,cellpadding,cellspacing,class,clear,'+\n    'color,cols,colspan,compact,coords,dir,face,headers,height,hreflang,hspace,'+\n    'ismap,lang,language,nohref,nowrap,rel,rev,rows,rowspan,rules,'+\n    'scope,scrolling,shape,span,start,summary,target,title,type,'+\n    'valign,value,vspace,width'));\n\nfunction makeMap(str) {\n  var obj = {}, items = str.split(','), i;\n  for (i = 0; i < items.length; i++) obj[items[i]] = true;\n  return obj;\n}\n\n\n/**\n * @example\n * htmlParser(htmlString, {\n *     start: function(tag, attrs, unary) {},\n *     end: function(tag) {},\n *     chars: function(text) {},\n *     comment: function(text) {}\n * });\n *\n * @param {string} html string\n * @param {object} handler\n */\nfunction htmlParser( html, handler ) {\n  var index, chars, match, stack = [], last = html;\n  stack.last = function() { return stack[ stack.length - 1 ]; };\n\n  while ( html ) {\n    chars = true;\n\n    // Make sure we're not in a script or style element\n    if ( !stack.last() || !specialElements[ stack.last() ] ) {\n\n      // Comment\n      if ( html.indexOf(\"<!--\") === 0 ) {\n        // comments containing -- are not allowed unless they terminate the comment\n        index = html.indexOf(\"--\", 4);\n\n        if ( index >= 0 && html.lastIndexOf(\"-->\", index) === index) {\n          if (handler.comment) handler.comment( html.substring( 4, index ) );\n          html = html.substring( index + 3 );\n          chars = false;\n        }\n      // DOCTYPE\n      } else if ( DOCTYPE_REGEXP.test(html) ) {\n        match = html.match( DOCTYPE_REGEXP );\n\n        if ( match ) {\n          html = html.replace( match[0] , '');\n          chars = false;\n        }\n      // end tag\n      } else if ( BEGING_END_TAGE_REGEXP.test(html) ) {\n        match = html.match( END_TAG_REGEXP );\n\n        if ( match ) {\n          html = html.substring( match[0].length );\n          match[0].replace( END_TAG_REGEXP, parseEndTag );\n          chars = false;\n        }\n\n      // start tag\n      } else if ( BEGIN_TAG_REGEXP.test(html) ) {\n        match = html.match( START_TAG_REGEXP );\n\n        if ( match ) {\n          html = html.substring( match[0].length );\n          match[0].replace( START_TAG_REGEXP, parseStartTag );\n          chars = false;\n        }\n      }\n\n      if ( chars ) {\n        index = html.indexOf(\"<\");\n\n        var text = index < 0 ? html : html.substring( 0, index );\n        html = index < 0 ? \"\" : html.substring( index );\n\n        if (handler.chars) handler.chars( decodeEntities(text) );\n      }\n\n    } else {\n      html = html.replace(new RegExp(\"(.*)<\\\\s*\\\\/\\\\s*\" + stack.last() + \"[^>]*>\", 'i'),\n        function(all, text){\n          text = text.replace(COMMENT_REGEXP, \"$1\").replace(CDATA_REGEXP, \"$1\");\n\n          if (handler.chars) handler.chars( decodeEntities(text) );\n\n          return \"\";\n      });\n\n      parseEndTag( \"\", stack.last() );\n    }\n\n    if ( html == last ) {\n      throw $sanitizeMinErr('badparse', \"The sanitizer was unable to parse the following block \" +\n                                        \"of html: {0}\", html);\n    }\n    last = html;\n  }\n\n  // Clean up any remaining tags\n  parseEndTag();\n\n  function parseStartTag( tag, tagName, rest, unary ) {\n    tagName = angular.lowercase(tagName);\n    if ( blockElements[ tagName ] ) {\n      while ( stack.last() && inlineElements[ stack.last() ] ) {\n        parseEndTag( \"\", stack.last() );\n      }\n    }\n\n    if ( optionalEndTagElements[ tagName ] && stack.last() == tagName ) {\n      parseEndTag( \"\", tagName );\n    }\n\n    unary = voidElements[ tagName ] || !!unary;\n\n    if ( !unary )\n      stack.push( tagName );\n\n    var attrs = {};\n\n    rest.replace(ATTR_REGEXP,\n      function(match, name, doubleQuotedValue, singleQuotedValue, unquotedValue) {\n        var value = doubleQuotedValue\n          || singleQuotedValue\n          || unquotedValue\n          || '';\n\n        attrs[name] = decodeEntities(value);\n    });\n    if (handler.start) handler.start( tagName, attrs, unary );\n  }\n\n  function parseEndTag( tag, tagName ) {\n    var pos = 0, i;\n    tagName = angular.lowercase(tagName);\n    if ( tagName )\n      // Find the closest opened tag of the same type\n      for ( pos = stack.length - 1; pos >= 0; pos-- )\n        if ( stack[ pos ] == tagName )\n          break;\n\n    if ( pos >= 0 ) {\n      // Close all the open elements, up the stack\n      for ( i = stack.length - 1; i >= pos; i-- )\n        if (handler.end) handler.end( stack[ i ] );\n\n      // Remove the open elements from the stack\n      stack.length = pos;\n    }\n  }\n}\n\n/**\n * decodes all entities into regular string\n * @param value\n * @returns {string} A string with decoded entities.\n */\nvar hiddenPre=document.createElement(\"pre\");\nfunction decodeEntities(value) {\n  hiddenPre.innerHTML=value.replace(/</g,\"&lt;\");\n  return hiddenPre.innerText || hiddenPre.textContent || '';\n}\n\n/**\n * Escapes all potentially dangerous characters, so that the\n * resulting string can be safely inserted into attribute or\n * element text.\n * @param value\n * @returns escaped text\n */\nfunction encodeEntities(value) {\n  return value.\n    replace(/&/g, '&amp;').\n    replace(NON_ALPHANUMERIC_REGEXP, function(value){\n      return '&#' + value.charCodeAt(0) + ';';\n    }).\n    replace(/</g, '&lt;').\n    replace(/>/g, '&gt;');\n}\n\n/**\n * create an HTML/XML writer which writes to buffer\n * @param {Array} buf use buf.jain('') to get out sanitized html string\n * @returns {object} in the form of {\n *     start: function(tag, attrs, unary) {},\n *     end: function(tag) {},\n *     chars: function(text) {},\n *     comment: function(text) {}\n * }\n */\nfunction htmlSanitizeWriter(buf){\n  var ignore = false;\n  var out = angular.bind(buf, buf.push);\n  return {\n    start: function(tag, attrs, unary){\n      tag = angular.lowercase(tag);\n      if (!ignore && specialElements[tag]) {\n        ignore = tag;\n      }\n      if (!ignore && validElements[tag] === true) {\n        out('<');\n        out(tag);\n        angular.forEach(attrs, function(value, key){\n          var lkey=angular.lowercase(key);\n          if (validAttrs[lkey]===true && (uriAttrs[lkey]!==true || value.match(URI_REGEXP))) {\n            out(' ');\n            out(key);\n            out('=\"');\n            out(encodeEntities(value));\n            out('\"');\n          }\n        });\n        out(unary ? '/>' : '>');\n      }\n    },\n    end: function(tag){\n        tag = angular.lowercase(tag);\n        if (!ignore && validElements[tag] === true) {\n          out('</');\n          out(tag);\n          out('>');\n        }\n        if (tag == ignore) {\n          ignore = false;\n        }\n      },\n    chars: function(chars){\n        if (!ignore) {\n          out(encodeEntities(chars));\n        }\n      }\n  };\n}\n\n\n// define ngSanitize module and register $sanitize service\nangular.module('ngSanitize', []).value('$sanitize', $sanitize);\n\n/* global htmlSanitizeWriter: false */\n\n/**\n * @ngdoc filter\n * @name ngSanitize.filter:linky\n * @function\n *\n * @description\n * Finds links in text input and turns them into html links. Supports http/https/ftp/mailto and\n * plain email address links.\n *\n * Requires the {@link ngSanitize `ngSanitize`} module to be installed.\n *\n * @param {string} text Input text.\n * @param {string} target Window (_blank|_self|_parent|_top) or named frame to open links in.\n * @returns {string} Html-linkified text.\n *\n * @usage\n   <span ng-bind-html=\"linky_expression | linky\"></span>\n *\n * @example\n   <doc:example module=\"ngSanitize\">\n     <doc:source>\n       <script>\n         function Ctrl($scope) {\n           $scope.snippet =\n             'Pretty text with some links:\\n'+\n             'http://angularjs.org/,\\n'+\n             'mailto:us@somewhere.org,\\n'+\n             'another@somewhere.org,\\n'+\n             'and one more: ftp://127.0.0.1/.';\n           $scope.snippetWithTarget = 'http://angularjs.org/';\n         }\n       </script>\n       <div ng-controller=\"Ctrl\">\n       Snippet: <textarea ng-model=\"snippet\" cols=\"60\" rows=\"3\"></textarea>\n       <table>\n         <tr>\n           <td>Filter</td>\n           <td>Source</td>\n           <td>Rendered</td>\n         </tr>\n         <tr id=\"linky-filter\">\n           <td>linky filter</td>\n           <td>\n             <pre>&lt;div ng-bind-html=\"snippet | linky\"&gt;<br>&lt;/div&gt;</pre>\n           </td>\n           <td>\n             <div ng-bind-html=\"snippet | linky\"></div>\n           </td>\n         </tr>\n         <tr id=\"linky-target\">\n          <td>linky target</td>\n          <td>\n            <pre>&lt;div ng-bind-html=\"snippetWithTarget | linky:'_blank'\"&gt;<br>&lt;/div&gt;</pre>\n          </td>\n          <td>\n            <div ng-bind-html=\"snippetWithTarget | linky:'_blank'\"></div>\n          </td>\n         </tr>\n         <tr id=\"escaped-html\">\n           <td>no filter</td>\n           <td><pre>&lt;div ng-bind=\"snippet\"&gt;<br>&lt;/div&gt;</pre></td>\n           <td><div ng-bind=\"snippet\"></div></td>\n         </tr>\n       </table>\n     </doc:source>\n     <doc:scenario>\n       it('should linkify the snippet with urls', function() {\n         expect(using('#linky-filter').binding('snippet | linky')).\n           toBe('Pretty text with some links:&#10;' +\n                '<a href=\"http://angularjs.org/\">http://angularjs.org/</a>,&#10;' +\n                '<a href=\"mailto:us@somewhere.org\">us@somewhere.org</a>,&#10;' +\n                '<a href=\"mailto:another@somewhere.org\">another@somewhere.org</a>,&#10;' +\n                'and one more: <a href=\"ftp://127.0.0.1/\">ftp://127.0.0.1/</a>.');\n       });\n\n       it ('should not linkify snippet without the linky filter', function() {\n         expect(using('#escaped-html').binding('snippet')).\n           toBe(\"Pretty text with some links:\\n\" +\n                \"http://angularjs.org/,\\n\" +\n                \"mailto:us@somewhere.org,\\n\" +\n                \"another@somewhere.org,\\n\" +\n                \"and one more: ftp://127.0.0.1/.\");\n       });\n\n       it('should update', function() {\n         input('snippet').enter('new http://link.');\n         expect(using('#linky-filter').binding('snippet | linky')).\n           toBe('new <a href=\"http://link\">http://link</a>.');\n         expect(using('#escaped-html').binding('snippet')).toBe('new http://link.');\n       });\n\n       it('should work with the target property', function() {\n        expect(using('#linky-target').binding(\"snippetWithTarget | linky:'_blank'\")).\n          toBe('<a target=\"_blank\" href=\"http://angularjs.org/\">http://angularjs.org/</a>');\n       });\n     </doc:scenario>\n   </doc:example>\n */\nangular.module('ngSanitize').filter('linky', function() {\n  var LINKY_URL_REGEXP =\n        /((ftp|https?):\\/\\/|(mailto:)?[A-Za-z0-9._%+-]+@)\\S*[^\\s.;,(){}<>]/,\n      MAILTO_REGEXP = /^mailto:/;\n\n  return function(text, target) {\n    if (!text) return text;\n    var match;\n    var raw = text;\n    var html = [];\n    // TODO(vojta): use $sanitize instead\n    var writer = htmlSanitizeWriter(html);\n    var url;\n    var i;\n    var properties = {};\n    if (angular.isDefined(target)) {\n      properties.target = target;\n    }\n    while ((match = raw.match(LINKY_URL_REGEXP))) {\n      // We can not end in these as they are sometimes found at the end of the sentence\n      url = match[0];\n      // if we did not match ftp/http/mailto then assume mailto\n      if (match[2] == match[3]) url = 'mailto:' + url;\n      i = match.index;\n      writer.chars(raw.substr(0, i));\n      properties.href = url;\n      writer.start('a', properties);\n      writer.chars(match[0].replace(MAILTO_REGEXP, ''));\n      writer.end('a');\n      raw = raw.substring(i + match[0].length);\n    }\n    writer.chars(raw);\n    return html.join('');\n  };\n});\n\n\n})(window, window.angular);\n;\n/**\n * @license AngularJS v1.2.0\n * (c) 2010-2012 Google, Inc. http://angularjs.org\n * License: MIT\n */\n(function(window, angular, undefined) {'use strict';\n\n/**\n * @ngdoc overview\n * @name ngTouch\n * @description\n *\n * # ngTouch\n *\n * The `ngTouch` module provides touch events and other helpers for touch-enabled devices.\n * The implementation is based on jQuery Mobile touch event handling \n * ([jquerymobile.com](http://jquerymobile.com/)).\n *\n * {@installModule touch}\n *\n * See {@link ngTouch.$swipe `$swipe`} for usage.\n *\n * <div doc-module-components=\"ngTouch\"></div>\n *\n */\n\n// define ngTouch module\n/* global -ngTouch */\nvar ngTouch = angular.module('ngTouch', []);\n\n/* global ngTouch: false */\n\n    /**\n     * @ngdoc object\n     * @name ngTouch.$swipe\n     *\n     * @description\n     * The `$swipe` service is a service that abstracts the messier details of hold-and-drag swipe\n     * behavior, to make implementing swipe-related directives more convenient.\n     *\n     * Requires the {@link ngTouch `ngTouch`} module to be installed.\n     *\n     * `$swipe` is used by the `ngSwipeLeft` and `ngSwipeRight` directives in `ngTouch`, and by\n     * `ngCarousel` in a separate component.\n     *\n     * # Usage\n     * The `$swipe` service is an object with a single method: `bind`. `bind` takes an element\n     * which is to be watched for swipes, and an object with four handler functions. See the\n     * documentation for `bind` below.\n     */\n\nngTouch.factory('$swipe', [function() {\n  // The total distance in any direction before we make the call on swipe vs. scroll.\n  var MOVE_BUFFER_RADIUS = 10;\n\n  function getCoordinates(event) {\n    var touches = event.touches && event.touches.length ? event.touches : [event];\n    var e = (event.changedTouches && event.changedTouches[0]) ||\n        (event.originalEvent && event.originalEvent.changedTouches &&\n            event.originalEvent.changedTouches[0]) ||\n        touches[0].originalEvent || touches[0];\n\n    return {\n      x: e.clientX,\n      y: e.clientY\n    };\n  }\n\n  return {\n    /**\n     * @ngdoc method\n     * @name ngTouch.$swipe#bind\n     * @methodOf ngTouch.$swipe\n     *\n     * @description\n     * The main method of `$swipe`. It takes an element to be watched for swipe motions, and an\n     * object containing event handlers.\n     *\n     * The four events are `start`, `move`, `end`, and `cancel`. `start`, `move`, and `end`\n     * receive as a parameter a coordinates object of the form `{ x: 150, y: 310 }`.\n     *\n     * `start` is called on either `mousedown` or `touchstart`. After this event, `$swipe` is\n     * watching for `touchmove` or `mousemove` events. These events are ignored until the total\n     * distance moved in either dimension exceeds a small threshold.\n     *\n     * Once this threshold is exceeded, either the horizontal or vertical delta is greater.\n     * - If the horizontal distance is greater, this is a swipe and `move` and `end` events follow.\n     * - If the vertical distance is greater, this is a scroll, and we let the browser take over.\n     *   A `cancel` event is sent.\n     *\n     * `move` is called on `mousemove` and `touchmove` after the above logic has determined that\n     * a swipe is in progress.\n     *\n     * `end` is called when a swipe is successfully completed with a `touchend` or `mouseup`.\n     *\n     * `cancel` is called either on a `touchcancel` from the browser, or when we begin scrolling\n     * as described above.\n     *\n     */\n    bind: function(element, eventHandlers) {\n      // Absolute total movement, used to control swipe vs. scroll.\n      var totalX, totalY;\n      // Coordinates of the start position.\n      var startCoords;\n      // Last event's position.\n      var lastPos;\n      // Whether a swipe is active.\n      var active = false;\n\n      element.on('touchstart mousedown', function(event) {\n        startCoords = getCoordinates(event);\n        active = true;\n        totalX = 0;\n        totalY = 0;\n        lastPos = startCoords;\n        eventHandlers['start'] && eventHandlers['start'](startCoords, event);\n      });\n\n      element.on('touchcancel', function(event) {\n        active = false;\n        eventHandlers['cancel'] && eventHandlers['cancel'](event);\n      });\n\n      element.on('touchmove mousemove', function(event) {\n        if (!active) return;\n\n        // Android will send a touchcancel if it thinks we're starting to scroll.\n        // So when the total distance (+ or - or both) exceeds 10px in either direction,\n        // we either:\n        // - On totalX > totalY, we send preventDefault() and treat this as a swipe.\n        // - On totalY > totalX, we let the browser handle it as a scroll.\n\n        if (!startCoords) return;\n        var coords = getCoordinates(event);\n\n        totalX += Math.abs(coords.x - lastPos.x);\n        totalY += Math.abs(coords.y - lastPos.y);\n\n        lastPos = coords;\n\n        if (totalX < MOVE_BUFFER_RADIUS && totalY < MOVE_BUFFER_RADIUS) {\n          return;\n        }\n\n        // One of totalX or totalY has exceeded the buffer, so decide on swipe vs. scroll.\n        if (totalY > totalX) {\n          // Allow native scrolling to take over.\n          active = false;\n          eventHandlers['cancel'] && eventHandlers['cancel'](event);\n          return;\n        } else {\n          // Prevent the browser from scrolling.\n          event.preventDefault();\n          eventHandlers['move'] && eventHandlers['move'](coords, event);\n        }\n      });\n\n      element.on('touchend mouseup', function(event) {\n        if (!active) return;\n        active = false;\n        eventHandlers['end'] && eventHandlers['end'](getCoordinates(event), event);\n      });\n    }\n  };\n}]);\n\n/* global ngTouch: false */\n\n/**\n * @ngdoc directive\n * @name ngTouch.directive:ngClick\n *\n * @description\n * A more powerful replacement for the default ngClick designed to be used on touchscreen\n * devices. Most mobile browsers wait about 300ms after a tap-and-release before sending\n * the click event. This version handles them immediately, and then prevents the\n * following click event from propagating.\n *\n * Requires the {@link ngTouch `ngTouch`} module to be installed.\n *\n * This directive can fall back to using an ordinary click event, and so works on desktop\n * browsers as well as mobile.\n *\n * This directive also sets the CSS class `ng-click-active` while the element is being held\n * down (by a mouse click or touch) so you can restyle the depressed element if you wish.\n *\n * @element ANY\n * @param {expression} ngClick {@link guide/expression Expression} to evaluate\n * upon tap. (Event object is available as `$event`)\n *\n * @example\n    <doc:example>\n      <doc:source>\n        <button ng-click=\"count = count + 1\" ng-init=\"count=0\">\n          Increment\n        </button>\n        count: {{ count }}\n      </doc:source>\n    </doc:example>\n */\n\nngTouch.config(['$provide', function($provide) {\n  $provide.decorator('ngClickDirective', ['$delegate', function($delegate) {\n    // drop the default ngClick directive\n    $delegate.shift();\n    return $delegate;\n  }]);\n}]);\n\nngTouch.directive('ngClick', ['$parse', '$timeout', '$rootElement',\n    function($parse, $timeout, $rootElement) {\n  var TAP_DURATION = 750; // Shorter than 750ms is a tap, longer is a taphold or drag.\n  var MOVE_TOLERANCE = 12; // 12px seems to work in most mobile browsers.\n  var PREVENT_DURATION = 2500; // 2.5 seconds maximum from preventGhostClick call to click\n  var CLICKBUSTER_THRESHOLD = 25; // 25 pixels in any dimension is the limit for busting clicks.\n\n  var ACTIVE_CLASS_NAME = 'ng-click-active';\n  var lastPreventedTime;\n  var touchCoordinates;\n\n\n  // TAP EVENTS AND GHOST CLICKS\n  //\n  // Why tap events?\n  // Mobile browsers detect a tap, then wait a moment (usually ~300ms) to see if you're\n  // double-tapping, and then fire a click event.\n  //\n  // This delay sucks and makes mobile apps feel unresponsive.\n  // So we detect touchstart, touchmove, touchcancel and touchend ourselves and determine when\n  // the user has tapped on something.\n  //\n  // What happens when the browser then generates a click event?\n  // The browser, of course, also detects the tap and fires a click after a delay. This results in\n  // tapping/clicking twice. So we do \"clickbusting\" to prevent it.\n  //\n  // How does it work?\n  // We attach global touchstart and click handlers, that run during the capture (early) phase.\n  // So the sequence for a tap is:\n  // - global touchstart: Sets an \"allowable region\" at the point touched.\n  // - element's touchstart: Starts a touch\n  // (- touchmove or touchcancel ends the touch, no click follows)\n  // - element's touchend: Determines if the tap is valid (didn't move too far away, didn't hold\n  //   too long) and fires the user's tap handler. The touchend also calls preventGhostClick().\n  // - preventGhostClick() removes the allowable region the global touchstart created.\n  // - The browser generates a click event.\n  // - The global click handler catches the click, and checks whether it was in an allowable region.\n  //     - If preventGhostClick was called, the region will have been removed, the click is busted.\n  //     - If the region is still there, the click proceeds normally. Therefore clicks on links and\n  //       other elements without ngTap on them work normally.\n  //\n  // This is an ugly, terrible hack!\n  // Yeah, tell me about it. The alternatives are using the slow click events, or making our users\n  // deal with the ghost clicks, so I consider this the least of evils. Fortunately Angular\n  // encapsulates this ugly logic away from the user.\n  //\n  // Why not just put click handlers on the element?\n  // We do that too, just to be sure. The problem is that the tap event might have caused the DOM\n  // to change, so that the click fires in the same position but something else is there now. So\n  // the handlers are global and care only about coordinates and not elements.\n\n  // Checks if the coordinates are close enough to be within the region.\n  function hit(x1, y1, x2, y2) {\n    return Math.abs(x1 - x2) < CLICKBUSTER_THRESHOLD && Math.abs(y1 - y2) < CLICKBUSTER_THRESHOLD;\n  }\n\n  // Checks a list of allowable regions against a click location.\n  // Returns true if the click should be allowed.\n  // Splices out the allowable region from the list after it has been used.\n  function checkAllowableRegions(touchCoordinates, x, y) {\n    for (var i = 0; i < touchCoordinates.length; i += 2) {\n      if (hit(touchCoordinates[i], touchCoordinates[i+1], x, y)) {\n        touchCoordinates.splice(i, i + 2);\n        return true; // allowable region\n      }\n    }\n    return false; // No allowable region; bust it.\n  }\n\n  // Global click handler that prevents the click if it's in a bustable zone and preventGhostClick\n  // was called recently.\n  function onClick(event) {\n    if (Date.now() - lastPreventedTime > PREVENT_DURATION) {\n      return; // Too old.\n    }\n\n    var touches = event.touches && event.touches.length ? event.touches : [event];\n    var x = touches[0].clientX;\n    var y = touches[0].clientY;\n    // Work around desktop Webkit quirk where clicking a label will fire two clicks (on the label\n    // and on the input element). Depending on the exact browser, this second click we don't want\n    // to bust has either (0,0) or negative coordinates.\n    if (x < 1 && y < 1) {\n      return; // offscreen\n    }\n\n    // Look for an allowable region containing this click.\n    // If we find one, that means it was created by touchstart and not removed by\n    // preventGhostClick, so we don't bust it.\n    if (checkAllowableRegions(touchCoordinates, x, y)) {\n      return;\n    }\n\n    // If we didn't find an allowable region, bust the click.\n    event.stopPropagation();\n    event.preventDefault();\n\n    // Blur focused form elements\n    event.target && event.target.blur();\n  }\n\n\n  // Global touchstart handler that creates an allowable region for a click event.\n  // This allowable region can be removed by preventGhostClick if we want to bust it.\n  function onTouchStart(event) {\n    var touches = event.touches && event.touches.length ? event.touches : [event];\n    var x = touches[0].clientX;\n    var y = touches[0].clientY;\n    touchCoordinates.push(x, y);\n\n    $timeout(function() {\n      // Remove the allowable region.\n      for (var i = 0; i < touchCoordinates.length; i += 2) {\n        if (touchCoordinates[i] == x && touchCoordinates[i+1] == y) {\n          touchCoordinates.splice(i, i + 2);\n          return;\n        }\n      }\n    }, PREVENT_DURATION, false);\n  }\n\n  // On the first call, attaches some event handlers. Then whenever it gets called, it creates a\n  // zone around the touchstart where clicks will get busted.\n  function preventGhostClick(x, y) {\n    if (!touchCoordinates) {\n      $rootElement[0].addEventListener('click', onClick, true);\n      $rootElement[0].addEventListener('touchstart', onTouchStart, true);\n      touchCoordinates = [];\n    }\n\n    lastPreventedTime = Date.now();\n\n    checkAllowableRegions(touchCoordinates, x, y);\n  }\n\n  // Actual linking function.\n  return function(scope, element, attr) {\n    var clickHandler = $parse(attr.ngClick),\n        tapping = false,\n        tapElement,  // Used to blur the element after a tap.\n        startTime,   // Used to check if the tap was held too long.\n        touchStartX,\n        touchStartY;\n\n    function resetState() {\n      tapping = false;\n      element.removeClass(ACTIVE_CLASS_NAME);\n    }\n\n    element.on('touchstart', function(event) {\n      tapping = true;\n      tapElement = event.target ? event.target : event.srcElement; // IE uses srcElement.\n      // Hack for Safari, which can target text nodes instead of containers.\n      if(tapElement.nodeType == 3) {\n        tapElement = tapElement.parentNode;\n      }\n\n      element.addClass(ACTIVE_CLASS_NAME);\n\n      startTime = Date.now();\n\n      var touches = event.touches && event.touches.length ? event.touches : [event];\n      var e = touches[0].originalEvent || touches[0];\n      touchStartX = e.clientX;\n      touchStartY = e.clientY;\n    });\n\n    element.on('touchmove', function(event) {\n      resetState();\n    });\n\n    element.on('touchcancel', function(event) {\n      resetState();\n    });\n\n    element.on('touchend', function(event) {\n      var diff = Date.now() - startTime;\n\n      var touches = (event.changedTouches && event.changedTouches.length) ? event.changedTouches :\n          ((event.touches && event.touches.length) ? event.touches : [event]);\n      var e = touches[0].originalEvent || touches[0];\n      var x = e.clientX;\n      var y = e.clientY;\n      var dist = Math.sqrt( Math.pow(x - touchStartX, 2) + Math.pow(y - touchStartY, 2) );\n\n      if (tapping && diff < TAP_DURATION && dist < MOVE_TOLERANCE) {\n        // Call preventGhostClick so the clickbuster will catch the corresponding click.\n        preventGhostClick(x, y);\n\n        // Blur the focused element (the button, probably) before firing the callback.\n        // This doesn't work perfectly on Android Chrome, but seems to work elsewhere.\n        // I couldn't get anything to work reliably on Android Chrome.\n        if (tapElement) {\n          tapElement.blur();\n        }\n\n        if (!angular.isDefined(attr.disabled) || attr.disabled === false) {\n          element.triggerHandler('click', [event]);\n        }\n      }\n\n      resetState();\n    });\n\n    // Hack for iOS Safari's benefit. It goes searching for onclick handlers and is liable to click\n    // something else nearby.\n    element.onclick = function(event) { };\n\n    // Actual click handler.\n    // There are three different kinds of clicks, only two of which reach this point.\n    // - On desktop browsers without touch events, their clicks will always come here.\n    // - On mobile browsers, the simulated \"fast\" click will call this.\n    // - But the browser's follow-up slow click will be \"busted\" before it reaches this handler.\n    // Therefore it's safe to use this directive on both mobile and desktop.\n    element.on('click', function(event, touchend) {\n      scope.$apply(function() {\n        clickHandler(scope, {$event: (touchend || event)});\n      });\n    });\n\n    element.on('mousedown', function(event) {\n      element.addClass(ACTIVE_CLASS_NAME);\n    });\n\n    element.on('mousemove mouseup', function(event) {\n      element.removeClass(ACTIVE_CLASS_NAME);\n    });\n\n  };\n}]);\n\n/* global ngTouch: false */\n\n/**\n * @ngdoc directive\n * @name ngTouch.directive:ngSwipeLeft\n *\n * @description\n * Specify custom behavior when an element is swiped to the left on a touchscreen device.\n * A leftward swipe is a quick, right-to-left slide of the finger.\n * Though ngSwipeLeft is designed for touch-based devices, it will work with a mouse click and drag\n * too.\n *\n * Requires the {@link ngTouch `ngTouch`} module to be installed.\n *\n * @element ANY\n * @param {expression} ngSwipeLeft {@link guide/expression Expression} to evaluate\n * upon left swipe. (Event object is available as `$event`)\n *\n * @example\n    <doc:example>\n      <doc:source>\n        <div ng-show=\"!showActions\" ng-swipe-left=\"showActions = true\">\n          Some list content, like an email in the inbox\n        </div>\n        <div ng-show=\"showActions\" ng-swipe-right=\"showActions = false\">\n          <button ng-click=\"reply()\">Reply</button>\n          <button ng-click=\"delete()\">Delete</button>\n        </div>\n      </doc:source>\n    </doc:example>\n */\n\n/**\n * @ngdoc directive\n * @name ngTouch.directive:ngSwipeRight\n *\n * @description\n * Specify custom behavior when an element is swiped to the right on a touchscreen device.\n * A rightward swipe is a quick, left-to-right slide of the finger.\n * Though ngSwipeRight is designed for touch-based devices, it will work with a mouse click and drag\n * too.\n *\n * Requires the {@link ngTouch `ngTouch`} module to be installed.\n *\n * @element ANY\n * @param {expression} ngSwipeRight {@link guide/expression Expression} to evaluate\n * upon right swipe. (Event object is available as `$event`)\n *\n * @example\n    <doc:example>\n      <doc:source>\n        <div ng-show=\"!showActions\" ng-swipe-left=\"showActions = true\">\n          Some list content, like an email in the inbox\n        </div>\n        <div ng-show=\"showActions\" ng-swipe-right=\"showActions = false\">\n          <button ng-click=\"reply()\">Reply</button>\n          <button ng-click=\"delete()\">Delete</button>\n        </div>\n      </doc:source>\n    </doc:example>\n */\n\nfunction makeSwipeDirective(directiveName, direction, eventName) {\n  ngTouch.directive(directiveName, ['$parse', '$swipe', function($parse, $swipe) {\n    // The maximum vertical delta for a swipe should be less than 75px.\n    var MAX_VERTICAL_DISTANCE = 75;\n    // Vertical distance should not be more than a fraction of the horizontal distance.\n    var MAX_VERTICAL_RATIO = 0.3;\n    // At least a 30px lateral motion is necessary for a swipe.\n    var MIN_HORIZONTAL_DISTANCE = 30;\n\n    return function(scope, element, attr) {\n      var swipeHandler = $parse(attr[directiveName]);\n\n      var startCoords, valid;\n\n      function validSwipe(coords) {\n        // Check that it's within the coordinates.\n        // Absolute vertical distance must be within tolerances.\n        // Horizontal distance, we take the current X - the starting X.\n        // This is negative for leftward swipes and positive for rightward swipes.\n        // After multiplying by the direction (-1 for left, +1 for right), legal swipes\n        // (ie. same direction as the directive wants) will have a positive delta and\n        // illegal ones a negative delta.\n        // Therefore this delta must be positive, and larger than the minimum.\n        if (!startCoords) return false;\n        var deltaY = Math.abs(coords.y - startCoords.y);\n        var deltaX = (coords.x - startCoords.x) * direction;\n        return valid && // Short circuit for already-invalidated swipes.\n            deltaY < MAX_VERTICAL_DISTANCE &&\n            deltaX > 0 &&\n            deltaX > MIN_HORIZONTAL_DISTANCE &&\n            deltaY / deltaX < MAX_VERTICAL_RATIO;\n      }\n\n      $swipe.bind(element, {\n        'start': function(coords, event) {\n          startCoords = coords;\n          valid = true;\n        },\n        'cancel': function(event) {\n          valid = false;\n        },\n        'end': function(coords, event) {\n          if (validSwipe(coords)) {\n            scope.$apply(function() {\n              element.triggerHandler(eventName);\n              swipeHandler(scope, {$event: event});\n            });\n          }\n        }\n      });\n    };\n  }]);\n}\n\n// Left is negative X-coordinate, right is positive.\nmakeSwipeDirective('ngSwipeLeft', -1, 'swipeleft');\nmakeSwipeDirective('ngSwipeRight', 1, 'swiperight');\n\n\n\n})(window, window.angular);\n;\n/**\n * Create a wrapping module to ease having to include too many\n * modules.\n */\nangular.module('ionic.service', [\n  'ionic.service.platform',\n  'ionic.service.actionSheet',\n  'ionic.service.gesture',\n  'ionic.service.loading',\n  'ionic.service.modal',\n  'ionic.service.popup',\n  'ionic.service.templateLoad'\n]);\n\nangular.module('ionic.ui', [\n                            'ionic.ui.content',\n                            'ionic.ui.tabs',\n                            'ionic.ui.nav',\n                            'ionic.ui.header',\n                            'ionic.ui.sideMenu',\n                            'ionic.ui.list',\n                            'ionic.ui.checkbox',\n                            'ionic.ui.toggle',\n                            'ionic.ui.radio'\n                           ]);\n\nangular.module('ionic', [\n    'ionic.service',\n    'ionic.ui',\n    \n    // Angular deps\n    'ngAnimate',\n    'ngTouch',\n    'ngSanitize'\n]);\n;\nangular.module('ionic.service.actionSheet', ['ionic.service.templateLoad', 'ionic.ui.actionSheet', 'ngAnimate'])\n\n.factory('ActionSheet', ['$rootScope', '$document', '$compile', '$animate', '$timeout', 'TemplateLoader',\n    function($rootScope, $document, $compile, $animate, $timeout, TemplateLoader) {\n\n  return {\n    /**\n     * Load an action sheet with the given template string.\n     *\n     * A new isolated scope will be created for the \n     * action sheet and the new element will be appended into the body.\n     *\n     * @param {object} opts the options for this ActionSheet (see docs)\n     */\n    show: function(opts) {\n      var scope = $rootScope.$new(true);\n\n      angular.extend(scope, opts);\n\n\n      // Compile the template\n      var element = $compile('<action-sheet buttons=\"buttons\"></action-sheet>')(scope);\n\n      // Grab the sheet element for animation\n      var sheetEl = angular.element(element[0].querySelector('.action-sheet'));\n\n      var hideSheet = function(didCancel) {\n        $animate.leave(sheetEl, function() {\n          if(didCancel) {\n            opts.cancel();\n          }\n        });\n        \n        $timeout(function() {\n          $animate.removeClass(element, 'active', function() {\n            scope.$destroy();\n          });\n        });\n      };\n\n      scope.cancel = function() {\n        hideSheet(true);\n      };\n\n      scope.buttonClicked = function(index) {\n        // Check if the button click event returned true, which means\n        // we can close the action sheet\n        if((opts.buttonClicked && opts.buttonClicked(index)) === true) {\n          hideSheet(false);\n        }\n      };\n\n      scope.destructiveButtonClicked = function() {\n        // Check if the destructive button click event returned true, which means\n        // we can close the action sheet\n        if((opts.destructiveButtonClicked && opts.destructiveButtonClicked()) === true) {\n          hideSheet(false);\n        }\n      };\n\n      $document[0].body.appendChild(element[0]);\n\n      var sheet = new ionic.views.ActionSheet({el: element[0] });\n      scope.sheet = sheet;\n\n      $animate.addClass(element, 'active');\n      $animate.enter(sheetEl, element, function() {\n      });\n\n      return sheet;\n    }\n  };\n\n}]);\n;\nangular.module('ionic.service.gesture', [])\n\n.factory('Gesture', [function() {\n  return {\n    on: function(eventType, cb, $element) {\n      return window.ionic.onGesture(eventType, cb, $element[0]);\n    }\n  };\n}]);\n;\nangular.module('ionic.service.loading', ['ionic.ui.loading'])\n\n.factory('Loading', ['$rootScope', '$document', '$compile', function($rootScope, $document, $compile) {\n  return {\n    /**\n     * Load an action sheet with the given template string.\n     *\n     * A new isolated scope will be created for the \n     * action sheet and the new element will be appended into the body.\n     *\n     * @param {object} opts the options for this ActionSheet (see docs)\n     */\n    show: function(opts) {\n      var defaults = {\n        content: '',\n        animation: 'fade-in',\n        showBackdrop: true,\n        maxWidth: 200,\n        showDelay: 2000\n      };\n\n      opts = angular.extend(defaults, opts);\n\n      var scope = $rootScope.$new(true);\n      angular.extend(scope, opts);\n\n      // Make sure there is only one loading element on the page at one point in time\n      var existing = angular.element($document[0].querySelector('.loading-backdrop'));\n      if(existing.length) {\n        var scope = existing.scope();\n        if(scope.loading) {\n          scope.loading.show();\n          return scope.loading;\n        }\n      }\n\n      // Compile the template\n      var element = $compile('<loading>' + opts.content + '</loading>')(scope);\n\n      $document[0].body.appendChild(element[0]);\n\n      var loading = new ionic.views.Loading({\n        el: element[0],\n        maxWidth: opts.maxWidth,\n        showDelay: opts.showDelay\n      });\n\n      loading.show();\n\n      scope.loading = loading;\n\n      return loading;\n    }\n  };\n}]);\n;\nangular.module('ionic.service.modal', ['ionic.service.templateLoad', 'ngAnimate'])\n\n\n.factory('Modal', ['$rootScope', '$document', '$compile', '$animate', 'TemplateLoader', function($rootScope, $document, $compile, $animate, TemplateLoader) {\n  var ModalView = ionic.views.Modal.inherit({\n    initialize: function(opts) {\n      ionic.views.Modal.prototype.initialize.call(this, opts);\n      this.animation = opts.animation || 'slide-in-up';\n    },\n    // Show the modal\n    show: function() {\n      var _this = this;\n      var element = angular.element(this.el);\n      if(!element.parent().length) {\n        $animate.enter(element, angular.element($document[0].body), null, function() {\n          ionic.views.Modal.prototype.show.call(_this);\n        });\n      } \n      $animate.addClass(element, this.animation, function() {\n      });\n    },\n    // Hide the modal\n    hide: function() {\n      var element = angular.element(this.el);\n      $animate.removeClass(element, this.animation);\n\n      ionic.views.Modal.prototype.hide.call(this);\n    },\n\n    // Remove and destroy the modal scope\n    remove: function() {\n      var element = angular.element(this.el);\n      $animate.leave(angular.element(this.el), function() {\n        scope.$destroy();\n      });\n    }\n  });\n\n  var createModal = function(templateString, options) {\n    // Create a new scope for the modal\n    var scope = options.scope && options.scope.$new() || $rootScope.$new(true);\n\n    // Compile the template\n    var element = $compile(templateString)(scope);\n\n    options.el = element[0];\n    var modal = new ModalView(options);\n\n    // If this wasn't a defined scope, we can assign 'modal' to the isolated scope\n    // we created\n    if(!options.scope) {\n      scope.modal = modal;\n    }\n\n    return modal;\n  };\n\n  return {\n    /**\n     * Load a modal with the given template string.\n     *\n     * A new isolated scope will be created for the \n     * modal and the new element will be appended into the body.\n     */\n    fromTemplate: function(templateString, options) {\n      var modal = createModal(templateString, options || {});\n      return modal;\n    },\n    fromTemplateUrl: function(url, cb, options) {\n      TemplateLoader.load(url).then(function(templateString) {\n        var modal = createModal(templateString, options || {});\n        cb(modal);\n      });\n    },\n  };\n}]);\n;\n(function() {\n'use strict';\n\nangular.module('ionic.service.platform', [])\n\n/**\n * The platformProvider makes it easy to set and detect which platform\n * the app is currently running on. It has some auto detection built in\n * for PhoneGap and Cordova. This provider also takes care of\n * initializing some defaults that depend on the platform, such as the\n * height of header bars on iOS 7.\n */\n.provider('Platform', function() {\n  var platform = 'web';\n  var isPlatformReady = false;\n\n  if(window.cordova || window.PhoneGap || window.phonegap) {\n    platform = 'cordova';\n  }\n\n  var isReady = function() {\n    if(platform == 'cordova') {\n      return window.device;\n    }\n    return true;\n  };\n\n  // We need to do some stuff as soon as we know the platform,\n  // like adjust header margins for iOS 7, etc.\n  setTimeout(function afterReadyWait() {\n    if(isReady()) {\n      ionic.Platform.detect();\n    } else {\n      setTimeout(afterReadyWait, 50);\n    }\n  }, 10);\n\n  return {\n    setPlatform: function(p) {\n      platform = p;\n    },\n    $get: ['$q', '$timeout', function($q, $timeout) {\n      return {\n        /**\n         * Some platforms have hardware back buttons, so this is one way to bind to it.\n         *\n         * @param {function} cb the callback to trigger when this event occurs\n         */\n        onHardwareBackButton: function(cb) {\n          this.ready(function() {\n            document.addEventListener('backbutton', cb, false);\n          });\n        },\n\n        /**\n         * Remove an event listener for the backbutton.\n         *\n         * @param {function} fn the listener function that was originally bound.\n         */\n        offHardwareBackButton: function(fn) {\n          this.ready(function() {\n            document.removeEventListener('backbutton', fn);\n          });\n        },\n\n        /**\n         * Trigger a callback once the device is ready, or immediately if the device is already\n         * ready.\n         */\n        ready: function(cb) {\n          var self = this;\n          var q = $q.defer();\n\n          $timeout(function readyWait() {\n            if(isReady()) {\n              isPlatformReady = true;\n              q.resolve();\n              cb();\n            } else {\n              $timeout(readyWait, 50);\n            }\n          }, 50);\n\n          return q.promise;\n        }\n      };\n    }]\n  };\n});\n\n})(ionic);\n;\nangular.module('ionic.service.popup', ['ionic.service.templateLoad'])\n\n\n.factory('Popup', ['$rootScope', '$document', '$compile', 'TemplateLoader', function($rootScope, $document, $compile, TemplateLoader) {\n\n  var getPopup = function() {\n    // Make sure there is only one loading element on the page at one point in time\n    var existing = angular.element($document[0].querySelector('.popup'));\n    if(existing.length) {\n      var scope = existing.scope();\n      if(scope.popup) {\n        return scope;\n      }\n    }\n  };\n\n  return {\n    alert: function(message, $scope) {\n\n      // If there is an existing popup, just show that one\n      var existing = getPopup();\n      if(existing) {\n        return existing.popup.alert(message);\n      }\n\n      var defaults = {\n        title: message,\n        animation: 'fade-in',\n      };\n\n      opts = angular.extend(defaults, opts);\n\n      var scope = $scope && $scope.$new() || $rootScope.$new(true);\n      angular.extend(scope, opts);\n\n      // Compile the template\n      var element = $compile('<popup>' + opts.content + '</popup>')(scope);\n      $document[0].body.appendChild(element[0]);\n\n      var popup = new ionic.views.Popup({el: element[0] });\n      popup.alert(message);\n\n      scope.popup = popup;\n\n      return popup;\n    },\n    confirm: function(cb) {\n    },\n    prompt: function(cb) {\n    },\n    show: function(data) {\n      // data.title\n      // data.template\n      // data.buttons\n    }\n  };\n}]);\n;\nangular.module('ionic.service.templateLoad', [])\n\n.factory('TemplateLoader', ['$q', '$http', '$templateCache', function($q, $http, $templateCache) {\n  return {\n    load: function(url) {\n      var deferred = $q.defer();\n\n      $http.get(url, { cache: $templateCache }).success(function(html) {\n        deferred.resolve(html && html.trim());\n      });\n\n      return deferred.promise;\n    }\n  };\n}]);\n;\n(function() {\n'use strict';\n\nangular.module('ionic.ui.actionSheet', [])\n\n.directive('actionSheet', function($document) {\n  return {\n    restrict: 'E',\n    scope: true,\n    replace: true,\n    link: function($scope, $element){\n      var keyUp = function(e) {\n        if(e.which == 27) {\n          $scope.cancel();\n          $scope.$apply();\n        }\n      };\n\n      var backdropClick = function(e) {\n        if(e.target == $element[0]) {\n          $scope.cancel();\n          $scope.$apply();\n        }\n      };\n      $scope.$on('$destroy', function() {\n        $element.remove();\n        $document.unbind('keyup', keyUp);\n        $element.unbind('click', backdropClick);\n      });\n\n      $document.bind('keyup', keyUp);\n      $element.bind('click', backdropClick);\n    },\n    template: '<div class=\"action-sheet-backdrop\">' +\n                '<div class=\"action-sheet action-sheet-up\">' +\n                  '<div class=\"action-sheet-group\">' +\n                    '<div class=\"action-sheet-title\" ng-if=\"titleText\">{{titleText}}</div>' +\n                    '<button class=\"button\" ng-click=\"buttonClicked($index)\" ng-repeat=\"button in buttons\">{{button.text}}</button>' +\n                  '</div>' +\n                  '<div class=\"action-sheet-group\" ng-if=\"destructiveText\">' +\n                    '<button class=\"button destructive\" ng-click=\"destructiveButtonClicked()\">{{destructiveText}}</button>' +\n                  '</div>' +\n                  '<div class=\"action-sheet-group\" ng-if=\"cancelText\">' +\n                    '<button class=\"button\" ng-click=\"cancel()\">{{cancelText}}</button>' +\n                  '</div>' +\n                '</div>' +\n              '</div>'\n  };\n});\n\n})();\n;\n(function(ionic) {\n'use strict';\n\nangular.module('ionic.ui.header', ['ngAnimate'])\n\n\n.directive('headerBar', function() {\n  return {\n    restrict: 'E',\n    replace: true,\n    transclude: true,\n    template: '<header class=\"bar bar-header\">\\\n                <div class=\"buttons\">\\\n                  <button ng-repeat=\"button in leftButtons\" class=\"button\" ng-class=\"button.type\" ng-click=\"button.click($event, $index)\" ng-bind-html=\"button.content\">\\\n                  </button>\\\n                </div>\\\n                <h1 class=\"title\" ng-bind-html=\"title\"></h1>\\\n                <div class=\"buttons\">\\\n                  <button ng-repeat=\"button in rightButtons\" class=\"button\" ng-class=\"button.type\" ng-click=\"button.click($event, $index)\" ng-bind-html=\"button.content\">\\\n                  </button>\\\n                </div>\\\n              </header>',\n\n    scope: {\n      leftButtons: '=',\n      rightButtons: '=',\n      title: '=',\n      type: '@',\n      alignTitle: '@'\n    },\n\n    link: function($scope, $element, $attr) {\n      var hb = new ionic.views.HeaderBar({\n        el: $element[0],\n        alignTitle: $scope.alignTitle || 'center'\n      });\n\n      $element.addClass($scope.type);\n\n      $scope.headerBarView = hb;\n\n      $scope.$watch('leftButtons', function(val) {\n        // Resize the title since the buttons have changed\n        hb.align();\n      });\n\n      $scope.$watch('rightButtons', function(val) {\n        // Resize the title since the buttons have changed\n        hb.align();\n      });\n\n      $scope.$watch('title', function(val) {\n        // Resize the title since the title has changed\n        console.log('Title changed');\n        hb.align();\n      });\n\n      $scope.$on('$destroy', function() {\n        //\n      });\n    }\n  };\n})\n\n.directive('footerBar', function() {\n  return {\n    restrict: 'E',\n    replace: true,\n    transclude: true,\n    template: '<footer class=\"bar bar-footer\" ng-transclude>\\\n              </footer>',\n\n    scope: {\n      type: '@',\n    },\n\n    link: function($scope, $element, $attr) {\n      $element.addClass($scope.type);\n    }\n  };\n});\n\n})(ionic);\n;\n(function() {\n'use strict';\n\nangular.module('ionic.ui.checkbox', [])\n\n\n.directive('checkbox', function() {\n  return {\n    restrict: 'E',\n    replace: true,\n    require: '?ngModel',\n    scope: {},\n    transclude: true,\n    template: '<label ng-click=\"tapHandler($event)\" class=\"checkbox\"><input type=\"checkbox\"><div ng-transclude></div></label>',\n  \n\n    link: function($scope, $element, $attr, ngModel) {\n      var checkbox;\n\n      if(!ngModel) { return; }\n\n      checkbox = $element.children().eq(0);\n\n      if(!checkbox.length) { return; }\n\n      $scope.tapHandler = function(e) {\n        if(e.type != 'click') {\n          checkbox[0].checked = !checkbox[0].checked;\n        }\n        ngModel.$setViewValue(checkbox[0].checked);\n        e.alreadyHandled = true;\n      };\n\n      var clickHandler = function(e) {\n        checkbox[0].checked = !checkbox[0].checked;\n        $scope.$apply(function() {\n          ngModel.$setViewValue(checkbox[0].checked);\n        });\n      };\n\n      if(ngModel) {\n        ngModel.$render = function() {\n          checkbox[0].checked = ngModel.$viewValue;\n        };\n      }\n    }\n  };\n});\n\n})();\n;\n(function() {\n'use strict';\n\nangular.module('ionic.ui.content', [])\n\n/**\n * Panel is a simple 100% width and height, fixed panel. It's meant for content to be\n * added to it, or animated around.\n */\n.directive('pane', function() {\n  return {\n    restrict: 'E',\n    compile: function(element, attr) {\n      element.addClass('pane');\n    }\n  }\n})\n\n// The content directive is a core scrollable content area\n// that is part of many View hierarchies\n.directive('content', ['$parse', function($parse) {\n  return {\n    restrict: 'E',\n    replace: true,\n    template: '<div class=\"scroll-content\"><div class=\"scroll\"></div></div>',\n    transclude: true,\n    scope: {\n      onRefresh: '&',\n      onRefreshOpening: '&',\n      refreshComplete: '=',\n      scroll: '@'\n    },\n    compile: function(element, attr, transclude) {\n      return function($scope, $element, $attr) {\n        var c = $element.eq(0);\n\n        if(attr.padded) {\n          c.addClass('padding');\n        }\n\n        if(attr.hasHeader) {\n          c.addClass('has-header');\n        }\n        if(attr.hasSubheader) {\n          c.addClass('has-subheader');\n        }\n        if(attr.hasFooter) {\n          c.addClass('has-footer');\n        }\n        if(attr.hasTabs) {\n          c.addClass('has-tabs');\n        }\n\n        if(attr.refreshComplete) {\n          $scope.refreshComplete = function() {\n            if($scope.scrollView) {\n              $scope.scrollView.doneRefreshing();\n              $scope.$parent.$broadcast('scroll.onRefreshComplete');\n            }\n          };\n        }\n\n        // If they want plain overflow scrolling, add that as a class\n        if($scope.scroll === \"false\") {\n        } else if(attr.overflowScroll === \"true\") {\n          c.addClass('overflow-scroll');\n        } else {\n          // Otherwise, supercharge this baby!\n          var sv = new ionic.views.Scroll({\n            el: $element[0].firstElementChild,\n            hasPullToRefresh: (typeof $scope.onRefresh !== 'undefined'),\n            onRefresh: function() {\n              $scope.onRefresh();\n              $scope.$parent.$broadcast('scroll.onRefresh');\n            },\n            onRefreshOpening: function(amt) {\n              $scope.onRefreshOpening({amount: amt});\n              $scope.$parent.$broadcast('scroll.onRefreshOpening', amt);\n            }\n          });\n          // Let child scopes access this \n          $scope.scrollView = sv;\n        }\n\n        // Pass the parent scope down to the child\n        var clone = transclude($scope.$parent);\n        angular.element($element[0].firstElementChild).append(clone);\n      };\n    }\n  };\n}])\n\n.directive('refresher', function() {\n  return {\n    restrict: 'E',\n    replace: true,\n    require: ['^?content', '^?list'],\n    template: '<div class=\"scroll-refresher\"><div class=\"ionic-refresher-content\"><div class=\"ionic-refresher\"></div></div></div>',\n    scope: true,\n    link: function($scope, $element, $attr, scrollCtrl) {\n      var icon = $element[0].querySelector('.ionic-refresher');\n\n      // Scale up the refreshing icon\n      var onRefreshOpening = ionic.throttle(function(e, amt) {\n        icon.style[ionic.CSS.TRANSFORM] = 'scale(' + Math.min((1 + amt), 2) + ')';\n      }, 100);\n\n      $scope.$on('scroll.onRefresh', function(e) {\n        icon.style[ionic.CSS.TRANSFORM] = 'scale(2)';\n      });\n\n      $scope.$on('scroll.onRefreshOpening', onRefreshOpening);\n    }\n  }\n})\n\n.directive('scroll-refresher', function() {\n  return {\n    restrict: 'E',\n    replace: true,\n    transclude: true,\n    template: '<div class=\"scroll-refresher\"><div class=\"scroll-refresher-content\"></div></div>'\n  }\n});\n\n\n})();\n;\n(function() {\n'use strict';\n\nangular.module('ionic.ui.list', ['ngAnimate'])\n\n.directive('item', ['$timeout', function($timeout) {\n  return {\n    restrict: 'E',\n    require: ['?^list'],\n    replace: true,\n    transclude: true,\n    scope: {\n      item: '=',\n      onSelect: '&',\n      onDelete: '&',\n      canDelete: '@',\n      canReorder: '@',\n      canSwipe: '@',\n      buttons: '=',\n      type: '@'\n    },\n    template: '<li class=\"item\">\\\n            <div class=\"item-edit\" ng-if=\"canDelete && isEditing\">\\\n              <button class=\"button button-icon\" ng-click=\"onDelete()\"><i ng-class=\"deleteIcon\"></i></button>\\\n            </div>\\\n            <div class=\"item-content slide-left\" ng-transclude>\\\n            </div>\\\n             <div class=\"item-drag\" ng-if=\"canReorder && isEditing\">\\\n               <button data-ionic-action=\"reorder\" class=\"button button-icon\"><i ng-class=\"reorderIcon\"></i></button>\\\n             </div>\\\n            <div class=\"item-options\" ng-if=\"canSwipe && !isEditing && showOptions\">\\\n             <button ng-click=\"buttonClicked(button)\" class=\"button\" ng-class=\"button.type\" ng-repeat=\"button in buttons\">{{button.text}}</button>\\\n           </div>\\\n          </li>',\n\n    link: function($scope, $element, $attr, list) {\n      // Grab the parent list controller\n      if(list[0]) {\n        list = list[0];\n      } else if(list[1]) {\n        list = list[1];\n      }\n\n      // Add the list item type class\n      $element.addClass($attr.type || 'item-complex');\n\n      if($attr.type !== 'item-complex') {\n        $scope.canSwipe = false;\n      }\n\n      $scope.isEditing = false;\n      $scope.deleteIcon = list.scope.deleteIcon;\n      $scope.reorderIcon = list.scope.reorderIcon;\n      $scope.showOptions = true;\n\n      $scope.buttonClicked = function(button) {\n        button.onButtonClicked && button.onButtonClicked($scope.item, button);\n      };\n\n      list.scope.$watch('isEditing', function(v) {\n        $scope.isEditing = v;\n\n        // Add a delay before we allow the options layer to show, to avoid any odd\n        // animation issues\n        if(!v) {\n          $timeout(function() {\n            $scope.showOptions = true;\n          }, 200);\n        } else {\n          $scope.showOptions = false;\n        }\n      });\n    }\n  };\n}])\n\n.directive('list', function() {\n  return {\n    restrict: 'E',\n    replace: true,\n    transclude: true,\n\n    scope: {\n      isEditing: '=',\n      deleteIcon: '@',\n      reorderIcon: '@',\n      hasPullToRefresh: '@',\n      onRefresh: '&',\n      onRefreshOpening: '&',\n      refreshComplete: '='\n    },\n\n    controller: function($scope) {\n      var _this = this;\n\n      this.scope = $scope;\n\n      $scope.$watch('isEditing', function(v) {\n        _this.isEditing = true;\n      });\n    },\n\n    template: '<ul class=\"list\" ng-class=\"{\\'list-editing\\': isEditing}\" ng-transclude>\\\n              </ul>',\n\n    link: function($scope, $element, $attr) {\n      var lv = new ionic.views.ListView({\n        el: $element[0],\n        listEl: $element[0].children[0],\n        hasPullToRefresh: ($scope.hasPullToRefresh !== 'false'),\n        onRefresh: function() {\n          $scope.onRefresh();\n          $scope.$parent.$broadcast('scroll.onRefresh');\n        },\n        onRefreshOpening: function(amt) {\n          $scope.onRefreshOpening({amount: amt});\n          $scope.$parent.$broadcast('scroll.onRefreshOpening', amt);\n        }\n      });\n\n      if($attr.refreshComplete) {\n        $scope.refreshComplete = function() {\n          lv.doneRefreshing();\n          $scope.$parent.$broadcast('scroll.onRefreshComplete');\n        };\n      }\n\n      if($attr.animation) {\n        $element.addClass($attr.animation);\n      }\n    }\n  };\n});\n\n})();\n;\n(function() {\n'use strict';\n\nangular.module('ionic.ui.loading', [])\n\n.directive('loading', function() {\n  return {\n    restrict: 'E',\n    replace: true,\n    transclude: true,\n    link: function($scope, $element){\n      $scope.$on('$destroy', function() {\n        $element.remove();\n      });\n      $element.addClass($scope.animation || '');\n    },\n    template: '<div class=\"loading-backdrop\" ng-class=\"{enabled: showBackdrop}\">' + \n                '<div class=\"loading\" ng-transclude>' +\n                '</div>' +\n              '</div>'\n  };\n});\n\n})();\n;\n(function() {\n'use strict';\n\nangular.module('ionic.ui.nav', ['ionic.service.templateLoad', 'ionic.service.gesture', 'ionic.service.platform', 'ngAnimate'])\n\n.controller('NavCtrl', ['$scope', '$element', '$animate', '$compile', 'TemplateLoader', 'Platform', function($scope, $element, $animate, $compile, TemplateLoader, Platform) {\n  var _this = this;\n\n  angular.extend(this, ionic.controllers.NavController.prototype);\n\n  /**\n   * Push a template onto the navigation stack.\n   * @param {string} templateUrl the URL of the template to load.\n   */\n  this.pushFromTemplate = ionic.throttle(function(templateUrl) {\n    var childScope = $scope.$new();\n    childScope.isVisible = true;\n\n    // Load the given template\n    TemplateLoader.load(templateUrl).then(function(templateString) {\n\n      // Compile the template with the new scrope, and append it to the navigation's content area\n      var el = $compile(templateString)(childScope, function(cloned, scope) {\n        var content = angular.element($element[0].querySelector('.content, .scroll'));\n        $animate.enter(cloned, angular.element(content));\n      });\n    });\n  }, 300, {\n    trailing: false\n  });\n\n  // Pop function, throttled\n  this.popController = ionic.throttle(function() {\n    _this.pop();\n    $scope.$broadcast('navs.pop');\n  }, 300, {\n    trailing: false\n  });\n\n\n  ionic.controllers.NavController.call(this, {\n    content: {\n    },\n    navBar: {\n      shouldGoBack: function() {\n      },\n      show: function() {\n        this.isVisible = true;\n      },\n      hide: function() {\n        this.isVisible = false;\n      },\n      setTitle: function(title) {\n        $scope.navController.title = title;\n      },\n      showBackButton: function(show) {\n      },\n    }\n  });\n\n  // Support Android hardware back button (native only, not mobile web)\n  var onHardwareBackButton = function(e) {\n    $scope.$apply(function() {\n      _this.popController();\n    });\n  }\n  Platform.onHardwareBackButton(onHardwareBackButton);\n\n\n  this.handleDrag = function(e) {\n    // TODO: Support dragging between pages\n  };\n\n  this.endDrag = function(e) {\n  };\n\n  /**\n   * Push a controller to the stack. This is called by the child\n   * nav-content directive when it is linked to a scope on the page.\n   */\n  $scope.pushController = function(scope, element) {\n    _this.push(scope);\n    $scope.$broadcast('navs.push', scope);\n  };\n\n  $scope.navController = this;\n\n  $scope.$on('$destroy', function() {\n    // Remove back button listener\n    Platform.offHardwareBackButton(onHardwareBackButton);\n  });\n}])\n\n.directive('navs', function() {\n  return {\n    restrict: 'E',\n    replace: true,\n    transclude: true,\n    controller: 'NavCtrl',\n    //templateUrl: 'ext/angular/tmpl/ionicTabBar.tmpl.html',\n    template: '<div class=\"view\" ng-transclude></div>',\n  };\n})\n\n.directive('navBar', function() {\n  return {\n    restrict: 'E',\n    require: '^navs',\n    replace: true,\n    scope: {\n      type: '@',\n      backButtonType: '@',\n      alignTitle: '@'\n    },\n    template: '<header class=\"bar bar-header nav-bar\" ng-class=\"{hidden: !navController.navBar.isVisible}\">' + \n        '<button ng-click=\"goBack()\" class=\"button\" ng-if=\"navController.controllers.length > 1\" ng-class=\"backButtonType\">Back</button>' +\n        '<h1 class=\"title\">{{navController.getTopController().title}}</h1>' + \n      '</header>',\n    link: function($scope, $element, $attr, navCtrl) {\n      var backButton;\n\n      $scope.navController = navCtrl;\n\n      $scope.goBack = function() {\n        navCtrl.popController();\n      };\n\n\n      var hb = new ionic.views.HeaderBar({\n        el: $element[0],\n        alignTitle: $scope.alignTitle || 'center'\n      });\n\n      $element.addClass($scope.type);\n\n      $scope.headerBarView = hb;\n\n      $scope.$parent.$on('navs.push', function() {\n        backButton = angular.element($element[0].querySelector('.button'));\n        backButton.addClass($scope.backButtonType);\n        hb.align();\n      });\n      $scope.$parent.$on('navs.pop', function() {\n        hb.align();\n      });\n\n      $scope.$on('$destroy', function() {\n        //\n      });\n    }\n  };\n})\n\n.directive('navContent', ['Gesture', '$animate', '$compile', function(Gesture, $animate, $compile) {\n\n  // We need to animate the new controller into view.\n  var animatePushedController = function(childScope, clone, $element, isForward) {\n    var parent = angular.element($element.parent().parent().parent());\n    \n    var title = angular.element(parent[0].querySelector('.title'));\n\n    // Clone the old title and insert it so we can animate it back into place for the new controller\n    var newTitle = angular.element(title.clone());\n    $compile(newTitle)(childScope);\n    title.after(newTitle);\n    // Grab the button so we can slide it in\n    var button = angular.element(parent[0].querySelector('.button'));\n\n    if(isForward) {\n\n      // Slide the button in\n      $animate.addClass(button, childScope.slideButtonInAnimation, function() {\n        $animate.removeClass(button, childScope.slideButtonInAnimation, function() {});\n      })\n\n      // Slide the new title in\n      $animate.addClass(newTitle, childScope.slideTitleInAnimation, function() {\n        $animate.removeClass(newTitle, childScope.slideTitleInAnimation, function() {\n          newTitle.scope().$destroy();\n          newTitle.remove();\n        });\n      });\n\n      // Grab the old title and slide it out\n      var title = $element.parent().parent().parent()[0].querySelector('.title');\n      $animate.addClass(angular.element(title), childScope.slideTitleOutAnimation, function() {\n        $animate.removeClass(angular.element(title), childScope.slideTitleOutAnimation, function() {\n        });\n      });\n    } else {\n      clone.addClass(childScope.slideBackInAnimation);\n    }\n  };\n\n  return {\n    restrict: 'ECA',\n    require: '^navs',\n    transclude: 'element',\n    compile: function(element, attr, transclude) {\n      return function($scope, $element, $attr, navCtrl) {\n        var lastParent, lastIndex, childScope, childElement;\n\n        // Store that we should go forwards on the animation. This toggles\n        // based on the visibility sequence (to support reverse transitions)\n        var lastDirection = null;\n\n        $scope.title = $attr.title;\n        $scope.pushAnimation = $attr.pushAnimation || 'slide-in-left';\n        $scope.popAnimation = $attr.popAnimation || 'slide-in-right';\n        $scope.slideTitleInAnimation = $attr.slideTitleInAnimation || 'bar-title-in';\n        $scope.slideTitleOutAnimation = $attr.slideTitleOutAnimation || 'bar-title-out';\n        $scope.slideButtonInAnimation = $attr.slideButtonInAnimation || 'bar-button-in';\n        $scope.slideButtonOutAnimation = $attr.slideButtonOutAnimation || 'bar-button-out';\n\n        if($attr.navBar === \"false\") {\n          navCtrl.hideNavBar();\n        } else {\n          navCtrl.showNavBar();\n        }\n\n        $scope.visibilityChanged = function(direction) {\n          lastDirection = direction;\n\n          if($scope.isVisible) {\n            $scope.$broadcast('navContent.shown');\n          } else {\n            $scope.$broadcast('navContent.hidden');\n          }\n\n          if(!childElement) {\n            return;\n          }\n\n          var clone = childElement;\n\n          if(direction == 'push') {\n            clone.addClass(childScope.pushAnimation);\n            clone.removeClass(childScope.popAnimation);\n          } else if(direction == 'pop') {\n            clone.addClass(childScope.popAnimation);\n            clone.removeClass(childScope.pushAnimation);\n          }\n        };\n\n        // Push this controller onto the stack\n        $scope.pushController($scope, $element);\n\n        $scope.$watch('isVisible', function(value) {\n\n          if(value) {\n            childScope = $scope.$new();\n\n            transclude(childScope, function(clone) {\n              childElement = clone;\n\n              if(lastDirection == 'push') {\n                clone.addClass(childScope.pushAnimation);\n              } else if(lastDirection == 'pop') {\n                clone.addClass(childScope.popAnimation);\n              }\n\n              $animate.enter(clone, $element.parent(), $element, function() {\n                clone.removeClass(childScope.pushAnimation);\n                clone.removeClass(childScope.popAnimation);\n              });\n            });\n          } else {\n            // Taken from ngIf\n            if(childElement) {\n              // Check if this is visible, and if so, create it and show it\n              $animate.leave(childElement, function() {\n                if(childScope) {\n                  childElement.removeClass(childScope.pushAnimation);\n                  childElement.removeClass(childScope.popAnimation);\n                }\n              });\n              childElement = undefined;\n            }\n            if(childScope) {\n              childScope.$destroy();\n              childScope = undefined;\n            }\n          }\n        });\n      }\n    }\n  };\n}]);\n\n})();\n;\n(function(ionic) {\n'use strict';\n\nangular.module('ionic.ui.radio', [])\n\n// The radio button is a radio powered element with only\n// one possible selection in a set of options.\n.directive('radio', function() {\n  return {\n    restrict: 'E',\n    replace: true,\n    require: '?ngModel',\n    scope: {\n      value: '@'\n    },\n    transclude: true,\n    template: '<label ng-click=\"tapHandler($event)\" class=\"item item-radio\">\\\n                <input type=\"radio\" name=\"group\">\\\n                <div class=\"item-content\" ng-transclude>\\\n                </div>\\\n                <i class=\"radio-icon icon ion-checkmark\"></i>\\\n              </label>',\n\n    link: function($scope, $element, $attr, ngModel) {\n      var radio;\n\n      if(!ngModel) { return; }\n\n      radio = $element.children().eq(0);\n\n      if(!radio.length) { return; }\n\n      $scope.tapHandler = function(e) {\n        radio[0].checked = true;\n        ngModel.$setViewValue($scope.$eval($attr.ngValue));\n        e.alreadyHandled = true;\n      };\n\n      var clickHandler = function(e) {\n        ngModel.$setViewValue($scope.$eval($attr.ngValue));\n      };\n\n      $scope.$on('$destroy', function() {\n        $element.unbind('tap', tapHandler);\n        $element.unbind('click', clickHandler);\n      });\n\n      if(ngModel) {\n        //$element.bind('tap', tapHandler);\n        $element.bind('click', clickHandler);\n\n        ngModel.$render = function() {\n          var val = $scope.$eval($attr.ngValue);\n          if(val === ngModel.$viewValue) {\n            radio.attr('checked', 'checked');\n          } else {\n            radio.removeAttr('checked');\n          }\n        };\n      }\n    }\n  };\n});\n\n})(window.ionic);\n;\n(function() {\n'use strict';\n\n/**\n * @description\n * The sideMenuCtrl lets you quickly have a draggable side\n * left and/or right menu, which a center content area.\n */\n\nangular.module('ionic.ui.sideMenu', ['ionic.service.gesture'])\n\n/**\n * The internal controller for the side menu controller. This\n * extends our core Ionic side menu controller and exposes\n * some side menu stuff on the current scope.\n */\n.controller('SideMenuCtrl', function($scope) {\n  var _this = this;\n\n  angular.extend(this, ionic.controllers.SideMenuController.prototype);\n\n  ionic.controllers.SideMenuController.call(this, {\n    // Our quick implementation of the left side menu\n    left: {\n      width: 270,\n    },\n\n    // Our quick implementation of the right side menu\n    right: {\n      width: 270,\n    }\n  });\n\n  $scope.sideMenuContentTranslateX = 0;\n\n  $scope.sideMenuController = this;\n})\n\n.directive('sideMenu', function() {\n  return {\n    restrict: 'ECA',\n    controller: 'SideMenuCtrl',\n    replace: true,\n    transclude: true,\n    template: '<div class=\"pane\" ng-transclude></div>'\n  };\n})\n\n.directive('sideMenuContent', ['Gesture', function(Gesture) {\n  return {\n    restrict: 'AC',\n    require: '^sideMenu',\n    scope: true,\n    compile: function(element, attr, transclude) {\n      return function($scope, $element, $attr, sideMenuCtrl) {\n\n        $element.addClass('menu-content');\n\n        var defaultPrevented = false;\n\n        ionic.on('mousedown', function(e) {\n          // If the child element prevented the drag, don't drag\n          defaultPrevented = e.defaultPrevented;\n        });\n\n        var dragFn = function(e) {\n          if(defaultPrevented) {\n            return;\n          }\n          sideMenuCtrl._handleDrag(e);\n        };\n\n        Gesture.on('drag', dragFn, $element);\n\n        var dragReleaseFn = function(e) {\n          if(!defaultPrevented) {\n            sideMenuCtrl._endDrag(e);\n          }\n          defaultPrevented = false;\n        };\n\n        Gesture.on('release', dragReleaseFn, $element);\n\n        sideMenuCtrl.setContent({\n          onDrag: function(e) {},\n          endDrag: function(e) {},\n          getTranslateX: function() {\n            return $scope.sideMenuContentTranslateX || 0;\n          },\n          setTranslateX: function(amount) {\n            $scope.sideMenuContentTranslateX = amount;\n            $element[0].style.webkitTransform = 'translate3d(' + amount + 'px, 0, 0)';\n          },\n          enableAnimation: function() {\n            //this.el.classList.add(this.animateClass);\n            $scope.animationEnabled = true;\n            $element[0].classList.add('menu-animated');\n          },\n          disableAnimation: function() {\n            //this.el.classList.remove(this.animateClass);\n            $scope.animationEnabled = false;\n            $element[0].classList.remove('menu-animated');\n          }\n        });\n\n        // Cleanup\n        $scope.$on('$destroy', function() {\n          Gesture.off('drag', dragFn);\n          Gesture.off('release', dragReleaseFn);\n        });\n      };\n    }\n  };\n}])\n\n\n.directive('menu', function() {\n  return {\n    restrict: 'E',\n    require: '^sideMenu',\n    replace: true,\n    transclude: true,\n    scope: true,\n    template: '<div class=\"menu menu-{{side}}\"></div>',\n    compile: function(element, attr, transclude) {\n      return function($scope, $element, $attr, sideMenuCtrl) {\n        $scope.side = $attr.side;\n\n        if($scope.side == 'left') {\n          sideMenuCtrl.left.isEnabled = true;\n          sideMenuCtrl.left.pushDown = function() {\n            $element[0].style.zIndex = -1;\n          };\n          sideMenuCtrl.left.bringUp = function() {\n            $element[0].style.zIndex = 0;\n          };\n        } else if($scope.side == 'right') {\n          sideMenuCtrl.right.isEnabled = true;\n          sideMenuCtrl.right.pushDown = function() {\n            $element[0].style.zIndex = -1;\n          };\n          sideMenuCtrl.right.bringUp = function() {\n            $element[0].style.zIndex = 0;\n          };\n        }\n\n        $element.append(transclude($scope));\n      };\n    }\n  };\n});\n})();\n;\n(function() {\n'use strict';\n\n/**\n * @description\n * The sideMenuCtrl lets you quickly have a draggable side\n * left and/or right menu, which a center content area.\n */\n\nangular.module('ionic.ui.slideBox', [])\n\n/**\n * The internal controller for the side menu controller. This\n * extends our core Ionic side menu controller and exposes\n * some side menu stuff on the current scope.\n */\n.controller('SlideBoxCtrl', ['$scope', '$element', function($scope, $element) {\n  $scope.slides = [];\n  this.slideAdded = function() {\n    $scope.slides.push({});\n  };\n}])\n\n.directive('slideBox', ['$compile', function($compile) {\n  return {\n    restrict: 'E',\n    replace: true,\n    transclude: true,\n    controller: 'SlideBoxCtrl',\n    scope: {},\n    template: '<div class=\"slide-box\">\\\n            <div class=\"slide-box-slides\" ng-transclude>\\\n            </div>\\\n          </div>',\n\n    link: function($scope, $element, $attr, slideBoxCtrl) {\n      // If the pager should show, append it to the slide box\n      if($attr.showPager !== \"false\") {\n        var childScope = $scope.$new();\n        var pager = $compile('<pager></pager>')(childScope);\n        $element.append(pager);\n\n        $scope.slideBox = new ionic.views.SlideBox({\n          el: $element[0]\n        });\n      }\n    }\n  }\n}])\n\n.directive('slide', function() {\n  return {\n    restrict: 'E',\n    replace: true,\n    require: '^slideBox',\n    transclude: true,\n    template: '<div class=\"slide-box-slide\" ng-transclude></div>',\n    compile: function(element, attr, transclude) {\n      return function($scope, $element, $attr, slideBoxCtrl) {\n        slideBoxCtrl.slideAdded();\n      }\n    }\n  }\n})\n\n.directive('pager', function() {\n  return {\n    restrict: 'E',\n    replace: true,\n    require: '^slideBox',\n    template: '<div class=\"slide-box-pager\"><span ng-repeat=\"slide in slides\"><i class=\"icon-record\"></i></span></div>'\n  }\n\n});\n\n})();\n;\nangular.module('ionic.ui.tabs', ['ngAnimate'])\n\n.controller('TabsCtrl', ['$scope', '$element', '$animate', function($scope, $element, $animate) {\n  var _this = this;\n\n  angular.extend(this, ionic.controllers.TabBarController.prototype);\n\n  ionic.controllers.TabBarController.call(this, {\n    controllerChanged: function(oldC, oldI, newC, newI) {\n      $scope.controllerChanged && $scope.controllerChanged({\n        oldController: oldC,\n        oldIndex: oldI,\n        newController: newC,\n        newIndex: newI\n      });\n    },\n    tabBar: {\n      tryTabSelect: function() {},\n      setSelectedItem: function(index) {},\n      addItem: function(item) {}\n    }\n  });\n\n  this.add = function(controller) {\n    this.addController(controller);\n    this.select(0);\n  };\n\n  this.select = function(controllerIndex) {\n    //var oldIndex = _this.getSelectedIndex();\n\n    $scope.activeAnimation = $scope.animation;\n    /*\n    if(controllerIndex > oldIndex) {\n    } else if(controllerIndex < oldIndex) {\n      $scope.activeAnimation = $scope.animation + '-reverse';\n    }\n    */\n    _this.selectController(controllerIndex);\n  };\n\n  $scope.controllers = this.controllers;\n}])\n\n.directive('tabs', function() {\n  return {\n    restrict: 'E',\n    replace: true,\n    scope: {\n      animation: '@',\n      controllerChanged: '&',\n      tabsType: '@',\n      tabsStyle: '@',\n    },\n    transclude: true,\n    controller: 'TabsCtrl',\n    //templateUrl: 'ext/angular/tmpl/ionicTabBar.tmpl.html',\n    template: '<div class=\"content\"><tab-controller-bar></tab-controller-bar></div>',\n    compile: function(element, attr, transclude, tabsCtrl) {\n      return function($scope, $element, $attr) {\n        $scope.$watch('activeAnimation', function(value) {\n          //$element.removeClass($scope.animation + ' ' + $scope.animation + '-reverse');\n          $element.addClass($scope.activeAnimation);\n        });\n        transclude($scope, function(cloned) {\n          $element.prepend(cloned);\n        });\n      };\n    }\n  };\n})\n\n// Generic controller directive\n.directive('tab', ['$animate', function($animate) {\n  return {\n    restrict: 'E',\n    replace: true,\n    require: '^tabs',\n    scope: true,\n    transclude: 'element',\n    compile: function(element, attr, transclude) {\n      return function($scope, $element, $attr, tabsCtrl) {\n        var childScope, childElement;\n\n        $scope.title = $attr.title;\n        $scope.icon = $attr.icon;\n        $scope.iconOn = $attr.iconOn;\n        $scope.iconOff = $attr.iconOff;\n        tabsCtrl.add($scope);\n        \n        $scope.$watch('isVisible', function(value) {\n          if(childElement) {\n            $animate.leave(childElement);\n            childElement = undefined;\n          }\n          if(childScope) {\n            childScope.$destroy();\n            childScope = undefined;\n          }\n          if(value) {\n            childScope = $scope.$new();\n            transclude(childScope, function(clone) {\n              childElement = clone;\n              childElement.addClass('view-full');\n              $animate.enter(clone, $element.parent(), $element);\n            });\n          }\n        });\n      }\n    }\n  };\n}])\n\n\n.directive('tabControllerBar', function() {\n  return {\n    restrict: 'E',\n    require: '^tabs',\n    transclude: true,\n    replace: true,\n    scope: true,\n    template: '<div class=\"tabs\">' + \n      '<tab-controller-item title=\"{{controller.title}}\" icon=\"{{controller.icon}}\" icon-on=\"{{controller.iconOn}}\" icon-off=\"{{controller.iconOff}}\" active=\"controller.isVisible\" index=\"$index\" ng-repeat=\"controller in controllers\"></tab-controller-item>' + \n    '</div>',\n    link: function($scope, $element, $attr) {\n      $element.addClass($scope.tabsType);\n      $element.addClass($scope.tabsStyle);\n    }\n  };\n})\n\n.directive('tabControllerItem', function() {\n  return {\n    restrict: 'E',\n    replace: true,\n    require: '^tabs',\n    scope: {\n      title: '@',\n      icon: '@',\n      iconOn: '@',\n      iconOff: '@',\n      active: '=',\n      tabSelected: '@',\n      index: '='\n    },\n    link: function(scope, element, attrs, tabsCtrl) {\n      if(attrs.icon) {\n        scope.iconOn = scope.iconOff = attrs.icon;\n      }\n      scope.selectTab = function(index) {\n        tabsCtrl.select(scope.index);\n      };\n    },\n    template: \n      '<a ng-class=\"{active:active}\" ng-click=\"selectTab()\" class=\"tab-item\">' +\n        '<i ng-class=\"{{icon}}\" ng-if=\"icon\"></i>' +\n        '<i class=\"{{iconOn}}\" ng-if=\"active\"></i>' +\n        '<i class=\"{{iconOff}}\" ng-if=\"!active\"></i> {{title}}' +\n      '</a>'\n  };\n})\n\n.directive('tabBar', function() {\n  return {\n    restrict: 'E',\n    replace: true,\n    transclude: true,\n    template: '<div class=\"tabs tabs-primary\" ng-transclude>' + \n    '</div>'\n  }\n});\n\n;\n(function(ionic) {\n'use strict';\n\nangular.module('ionic.ui.toggle', [])\n\n// The Toggle directive is a toggle switch that can be tapped to change\n// its value\n.directive('toggle', function() {\n  return {\n    restrict: 'E',\n    replace: true,\n    require: '?ngModel',\n    scope: true,\n    template: '<div class=\"toggle\"><input type=\"checkbox\"><div class=\"track\"><div class=\"handle\"></div></div></div>',\n\n    link: function($scope, $element, $attr, ngModel) {\n      var checkbox, handle;\n\n      if(!ngModel) { return; }\n\n      checkbox = $element.children().eq(0);\n      handle = $element.children().eq(1);\n\n      if(!checkbox.length || !handle.length) { return; }\n\n      $scope.toggle = new ionic.views.Toggle({ \n        el: $element[0],\n        checkbox: checkbox[0],\n        handle: handle[0]\n      });\n\n      $element.bind('click', function(e) {\n        $scope.toggle.tap(e);\n        $scope.$apply(function() {\n          ngModel.$setViewValue(checkbox[0].checked);\n        });\n      });\n\n      ngModel.$render = function() {\n        $scope.toggle.val(ngModel.$viewValue);\n      };\n    }\n  };\n});\n\n})(window.ionic);\n;\n(function() {\n'use strict';\n\nangular.module('ionic.ui.virtRepeat', [])\n\n.directive('virtRepeat', function() {\n  return {\n    require: ['?ngModel', '^virtualList'],\n    transclude: 'element',\n    priority: 1000,\n    terminal: true,\n    compile: function(element, attr, transclude) {\n      return function($scope, $element, $attr, ctrls) {\n        var virtualList = ctrls[1];\n        var _this = this;\n\n        virtualList.listView.renderViewport = function(high, low, start, end) {\n        }\n      }\n    }\n  }\n});\n})(ionic);\n;\n\n(function() {\n'use strict';\n\n// Turn the expression supplied to the directive:\n//\n//     a in b\n//\n// into `{ value: \"a\", collection: \"b\" }`\nfunction parseRepeatExpression(expression){\n  var match = expression.match(/^\\s*([\\$\\w]+)\\s+in\\s+(\\S*)\\s*$/);\n  if (! match) {\n    throw new Error(\"Expected sfVirtualRepeat in form of '_item_ in _collection_' but got '\" +\n                    expression + \"'.\");\n  }\n  return {\n    value: match[1],\n    collection: match[2]\n  };\n}\n\n// Utility to filter out elements by tag name\nfunction isTagNameInList(element, list){\n  var t, tag = element.tagName.toUpperCase();\n  for( t = 0; t < list.length; t++ ){\n    if( list[t] === tag ){\n      return true;\n    }\n  }\n  return false;\n}\n\n\n// Utility to find the viewport/content elements given the start element:\nfunction findViewportAndContent(startElement){\n  /*jshint eqeqeq:false, curly:false */\n  var root = $rootElement[0];\n  var e, n;\n  // Somewhere between the grandparent and the root node\n  for( e = startElement.parent().parent()[0]; e !== root; e = e.parentNode ){\n    // is an element\n    if( e.nodeType != 1 ) break;\n    // that isn't in the blacklist (tables etc.),\n    if( isTagNameInList(e, DONT_WORK_AS_VIEWPORTS) ) continue;\n    // has a single child element (the content),\n    if( e.childElementCount != 1 ) continue;\n    // which is not in the blacklist\n    if( isTagNameInList(e.firstElementChild, DONT_WORK_AS_CONTENT) ) continue;\n    // and no text.\n    for( n = e.firstChild; n; n = n.nextSibling ){\n      if( n.nodeType == 3 && /\\S/g.test(n.textContent) ){\n        break;\n      }\n    }\n    if( n == null ){\n      // That element should work as a viewport.\n      return {\n        viewport: angular.element(e),\n        content: angular.element(e.firstElementChild)\n      };\n    }\n  }\n  throw new Error(\"No suitable viewport element\");\n}\n\n// Apply explicit height and overflow styles to the viewport element.\n//\n// If the viewport has a max-height (inherited or otherwise), set max-height.\n// Otherwise, set height from the current computed value or use\n// window.innerHeight as a fallback\n//\nfunction setViewportCss(viewport){\n  var viewportCss = {'overflow': 'auto'},\n      style = window.getComputedStyle ?\n        window.getComputedStyle(viewport[0]) :\n        viewport[0].currentStyle,\n      maxHeight = style && style.getPropertyValue('max-height'),\n      height = style && style.getPropertyValue('height');\n\n  if( maxHeight && maxHeight !== '0px' ){\n    viewportCss.maxHeight = maxHeight;\n  }else if( height && height !== '0px' ){\n    viewportCss.height = height;\n  }else{\n    viewportCss.height = window.innerHeight;\n  }\n  viewport.css(viewportCss);\n}\n\n// Apply explicit styles to the content element to prevent pesky padding\n// or borders messing with our calculations:\nfunction setContentCss(content){\n  var contentCss = {\n    margin: 0,\n    padding: 0,\n    border: 0,\n    'box-sizing': 'border-box'\n  };\n  content.css(contentCss);\n}\n\n// TODO: compute outerHeight (padding + border unless box-sizing is border)\nfunction computeRowHeight(element){\n  var style = window.getComputedStyle ? window.getComputedStyle(element)\n                                      : element.currentStyle,\n      maxHeight = style && style.getPropertyValue('max-height'),\n      height = style && style.getPropertyValue('height');\n\n  if( height && height !== '0px' && height !== 'auto' ){\n    $log.info('Row height is \"%s\" from css height', height);\n  }else if( maxHeight && maxHeight !== '0px' && maxHeight !== 'none' ){\n    height = maxHeight;\n    $log.info('Row height is \"%s\" from css max-height', height);\n  }else if( element.clientHeight ){\n    height = element.clientHeight+'px';\n    $log.info('Row height is \"%s\" from client height', height);\n  }else{\n    throw new Error(\"Unable to compute height of row\");\n  }\n  angular.element(element).css('height', height);\n  return parseInt(height, 10);\n}\n\nangular.module('ionic.ui.virtualRepeat', [])\n\n/**\n * A replacement for ng-repeat that supports virtual lists.\n * This is not a 1 to 1 replacement for ng-repeat. However, in situations\n * where you have huge lists, this repeater will work with our virtual\n * scrolling to only render items that are showing or will be showing\n * if a scroll is made.\n */\n.directive('virtualRepeat', ['$log', function($log) {\n    return {\n      require: ['?ngModel, ^virtualList'],\n      transclude: 'element',\n      priority: 1000,\n      terminal: true,\n      compile: function(element, attr, transclude) {\n        var ident = parseRepeatExpression(attr.sfVirtualRepeat);\n\n        return function(scope, iterStartElement, attrs, ctrls, b) {\n          var virtualList = ctrls[1];\n\n          var rendered = [];\n          var rowHeight = 0;\n          var sticky = false;\n\n          var dom = virtualList.element;\n          //var dom = findViewportAndContent(iterStartElement);\n\n          // The list structure is controlled by a few simple (visible) variables:\n          var state = 'ngModel' in attrs ? scope.$eval(attrs.ngModel) : {};\n\n          function makeNewScope (idx, collection, containerScope) {\n            var childScope = containerScope.$new();\n            childScope[ident.value] = collection[idx];\n            childScope.$index = idx;\n            childScope.$first = (idx === 0);\n            childScope.$last = (idx === (collection.length - 1));\n            childScope.$middle = !(childScope.$first || childScope.$last);\n            childScope.$watch(function updateChildScopeItem(){\n              childScope[ident.value] = collection[idx];\n            });\n            return childScope;\n          }\n\n          // Given the collection and a start and end point, add the current\n          function addElements (start, end, collection, containerScope, insPoint) {\n            var frag = document.createDocumentFragment();\n            var newElements = [], element, idx, childScope;\n            for( idx = start; idx !== end; idx ++ ){\n              childScope = makeNewScope(idx, collection, containerScope);\n              element = linker(childScope, angular.noop);\n              //setElementCss(element);\n              newElements.push(element);\n              frag.appendChild(element[0]);\n            }\n            insPoint.after(frag);\n            return newElements;\n          }\n\n          function recomputeActive() {\n            // We want to set the start to the low water mark unless the current\n            // start is already between the low and high water marks.\n            var start = clip(state.firstActive, state.firstVisible - state.lowWater, state.firstVisible - state.highWater);\n            // Similarly for the end\n            var end = clip(state.firstActive + state.active,\n                           state.firstVisible + state.visible + state.lowWater,\n                           state.firstVisible + state.visible + state.highWater );\n            state.firstActive = Math.max(0, start);\n            state.active = Math.min(end, state.total) - state.firstActive;\n          }\n\n          function sfVirtualRepeatOnScroll(evt){\n            if( !rowHeight ){\n              return;\n            }\n            // Enter the angular world for the state change to take effect.\n            scope.$apply(function(){\n              state.firstVisible = Math.floor(evt.target.scrollTop / rowHeight);\n              state.visible = Math.ceil(dom.viewport[0].clientHeight / rowHeight);\n              $log.log('scroll to row %o', state.firstVisible);\n              sticky = evt.target.scrollTop + evt.target.clientHeight >= evt.target.scrollHeight;\n              recomputeActive();\n              $log.log(' state is now %o', state);\n              $log.log(' sticky = %o', sticky);\n            });\n          }\n\n          function sfVirtualRepeatWatchExpression(scope){\n            var coll = scope.$eval(ident.collection);\n            if( coll.length !== state.total ){\n              state.total = coll.length;\n              recomputeActive();\n            }\n            return {\n              start: state.firstActive,\n              active: state.active,\n              len: coll.length\n            };\n          }\n\n          function destroyActiveElements (action, count) {\n            var dead, ii, remover = Array.prototype[action];\n            for( ii = 0; ii < count; ii++ ){\n              dead = remover.call(rendered);\n              dead.scope().$destroy();\n              dead.remove();\n            }\n          }\n\n          // When the watch expression for the repeat changes, we may need to add\n          // and remove scopes and elements\n          function sfVirtualRepeatListener(newValue, oldValue, scope){\n            var oldEnd = oldValue.start + oldValue.active,\n                collection = scope.$eval(ident.collection),\n                newElements;\n            if(newValue === oldValue) {\n              $log.info('initial listen');\n              newElements = addElements(newValue.start, oldEnd, collection, scope, iterStartElement);\n              rendered = newElements;\n              if(rendered.length) {\n                rowHeight = computeRowHeight(newElements[0][0]);\n              }\n            } else {\n              var newEnd = newValue.start + newValue.active;\n              var forward = newValue.start >= oldValue.start;\n              var delta = forward ? newValue.start - oldValue.start\n                                  : oldValue.start - newValue.start;\n              var endDelta = newEnd >= oldEnd ? newEnd - oldEnd : oldEnd - newEnd;\n              var contiguous = delta < (forward ? oldValue.active : newValue.active);\n              $log.info('change by %o,%o rows %s', delta, endDelta, forward ? 'forward' : 'backward');\n              if(!contiguous) {\n                $log.info('non-contiguous change');\n                destroyActiveElements('pop', rendered.length);\n                rendered = addElements(newValue.start, newEnd, collection, scope, iterStartElement);\n              } else {\n                if(forward) {\n                  $log.info('need to remove from the top');\n                  destroyActiveElements('shift', delta);\n                } else if(delta) {\n                  $log.info('need to add at the top');\n                  newElements = addElements(\n                    newValue.start,\n                    oldValue.start,\n                    collection, scope, iterStartElement);\n                  rendered = newElements.concat(rendered);\n                }\n\n                if(newEnd < oldEnd) {\n                  $log.info('need to remove from the bottom');\n                  destroyActiveElements('pop', oldEnd - newEnd);\n                } else if(endDelta) {\n                  var lastElement = rendered[rendered.length-1];\n                  $log.info('need to add to the bottom');\n                  newElements = addElements(\n                    oldEnd,\n                    newEnd,\n                    collection, scope, lastElement);\n                  rendered = rendered.concat(newElements);\n                }\n              }\n              if(!rowHeight && rendered.length) {\n                rowHeight = computeRowHeight(rendered[0][0]);\n              }\n              dom.content.css({'padding-top': newValue.start * rowHeight + 'px'});\n            }\n            dom.content.css({'height': newValue.len * rowHeight + 'px'});\n            if(sticky) {\n              dom.viewport[0].scrollTop = dom.viewport[0].clientHeight + dom.viewport[0].scrollHeight;\n            }\n          }\n\n          //  - The index of the first active element\n          state.firstActive = 0;\n          //  - The index of the first visible element\n          state.firstVisible = 0;\n          //  - The number of elements visible in the viewport.\n          state.visible = 0;\n          // - The number of active elements\n          state.active = 0;\n          // - The total number of elements\n          state.total = 0;\n          // - The point at which we add new elements\n          state.lowWater = state.lowWater || 100;\n          // - The point at which we remove old elements\n          state.highWater = state.highWater || 300;\n          // TODO: now watch the water marks\n\n          setContentCss(dom.content);\n          setViewportCss(dom.viewport);\n          // When the user scrolls, we move the `state.firstActive`\n          dom.bind('momentumScrolled', sfVirtualRepeatOnScroll);\n\n          // The watch on the collection is just a watch on the length of the\n          // collection. We don't care if the content changes.\n          scope.$watch(sfVirtualRepeatWatchExpression, sfVirtualRepeatListener, true);\n        }\n      }\n    };\n  }]);\n\n})(ionic);\n"
  },
  {
    "path": "content/js/ionic-docs.js",
    "content": "/*!\n * Ionic IO\n * Copyright 116 Drifty Co. http://drifty.com/\n */\n(function() {\n(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){\n(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),\nm=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)\n})(window,document,'script','//www.google-analytics.com/analytics.js','ga');\n\nga('create', 'UA-44023830-1', 'ionicframework.com');\n\nga('create', 'UA-77242104-1', 'auto');\n\n// Universal ID\nga('create', 'UA-44023830-23', 'auto', {'allowLinker': true}, 'universalID');\nga('require', 'linker');\nga('linker:autoLink', ['ionic.io','blog.ionicframework.com','apps.ionic.io',\n   'creator.ionic.io','ideas.ionic.io','showcase.ionicframework.com','market.ionicframework.com']);\nga('send', 'pageview');\n\nvar IonicSiteModule = angular.module('IonicSite', ['ngAnimate'])\n.controller('DocsNavCtrl', ['$scope', '$timeout', function($scope, $timeout) {\n  var navItemPos = $('#side-nav > ul > .active').length ?\n                    $('#side-nav > ul > .active').offset().top : null;\n  $sideNav = $('#side-nav');\n  if ($sideNav[0].offsetHeight < navItemPos + 100) {\n    $sideNav[0].scrollTop =  navItemPos - 300;\n  }\n}])\n.controller('SassToggleCtrl', ['$scope', function ($scope) {\n  $scope.setSassPlatform = function (platform) {\n    $scope.active = platform;\n  }\n}])\n.controller('ComponentsCtrl', ['$scope', '$timeout',\n                       function($scope, $timeout) {\n  var $androidIframe = $('iframe#demo-android');\n  var $iosIframe = $('iframe#demo-ios');\n  var $windowsIframe = $('iframe#demo-windows');\n\n  var sectionsWithChildrenSimple = ['buttons', 'cards', 'alerts', 'forms',\n                                    'lists', 'tabs', 'toolbar'];\n  var sectionsWithChildren = {};\n  for (i in sectionsWithChildrenSimple) {\n    var section = sectionsWithChildrenSimple[i];\n    sectionsWithChildren[section] = $('#components-' + section);\n  }\n\n  var updateIframe =  debounce(function() {\n    $iosIframe[0].contentWindow.postMessage(JSON.stringify({\n      hash: $hash\n    }), '*');\n    $androidIframe[0].contentWindow.postMessage(JSON.stringify({\n      hash: $hash\n    }), '*');\n    $windowsIframe[0].contentWindow.postMessage(JSON.stringify({\n      hash: $hash\n    }), '*');\n  }, 500);\n\n  $scope.setPlatform = function(platform) {\n    $scope.previewPlatform = platform;\n    if (platform == 'ios') {\n      $scope.androidActive = false;\n      $scope.windowsActive = false;\n      $timeout(function() {\n        $scope.iosActive = true;\n      },30);\n      badChromeFix($('iframe#demo-ios'));\n    } else if (platform == 'windows') {\n      $scope.iosActive = false;\n      $scope.androidActive = false;\n      $timeout(function() {\n        $scope.windowsActive = true;\n      },30);\n      badChromeFix($('iframe#demo-windows'));\n    } else {\n      $scope.iosActive = false;\n      $scope.windowsActive = false;\n      $timeout(function() {\n        $scope.androidActive = true;\n      },30);\n      badChromeFix($('iframe#demo-android'));\n    }\n\n    function badChromeFix(iframe) {\n      var raw = navigator.userAgent.match(/Chrom(e|ium)\\/([0-9]+)\\./);\n      var version =  raw ? parseInt(raw[2], 10) : false;\n      if (version === 49) {\n        $('ion-content', iframe.contents()).hide();\n        $timeout(function() {\n          $('ion-content', iframe.contents()).show();\n        }, 200);\n      }\n    }\n  };\n\n  $scope.setPlatform('ios');\n\n  var $scrollspy = $('body').scrollspy({\n    target: '#components-index'\n  });\n\n  $scrollspy.on('activate.bs.scrollspy', onScrollSpyChange);\n\n  (function setSubSections() {\n    var sections = {};\n    for (s in sectionsWithChildren) {\n      // skip loop if the property is from prototype\n      if (!sectionsWithChildren.hasOwnProperty(s)) {\n        continue;\n      }\n      var subSections = sectionsWithChildren[s][0].nextElementSibling.children;\n      for (var i = subSections.length - 1; i >= 0; i--) {\n        var subSectionName = subSections[i].children[0].href.split('#')[1];\n        sections[subSectionName] = s;\n      };\n    };\n    $scope.subSections = sections;\n  }());\n\n  var $hash;\n  var $node;\n\n  function onScrollSpyChange(e) {\n    if (e.target.id === 'components-index') {\n      return;\n    }\n    $hash = $('a[href^=\"#\"]', e.target).attr('href').replace(/^#/, '');\n    $node = $('#' + $hash);\n\n    setActive($hash);\n\n    if ($node.length) {\n      $node.attr('id', '');\n    }\n    document.location.hash = $hash;\n    updateIframe();\n    if ($node.length) {\n      return $node.attr('id', $hash);\n    }\n  }\n\n  function debounce(func, wait, immediate) {\n    var timeout;\n    return function() {\n      var context = this;\n      var args = arguments;\n      var later = function() {\n        timeout = null;\n        if (!immediate) {\n          func.apply(context, args);\n        }\n      };\n      var callNow = immediate && !timeout;\n      clearTimeout(timeout);\n      timeout = setTimeout(later, wait);\n      if (callNow) {\n        func.apply(context, args);\n      }\n    };\n  };\n\n  function setActive(hash) {\n    // given a url hash, set the correct section to 'active'\n    if (hash in $scope.subSections &&\n        $scope.subSections[hash] in sectionsWithChildren) {\n      $timeout(function() {\n        sectionsWithChildren[$scope.subSections[hash]].addClass('active');\n      });\n    }\n  }\n\n  (function setUpListeners() {\n    var evMethod = window.addEventListener ? 'addEventListener' : 'attachEvent';\n    var eventer = window[evMethod];\n    var messageEvent = evMethod == 'attachEvent' ? 'onmessage' : 'message';\n    // Listen to message from child window\n    eventer(messageEvent, function(e) {\n      sendCurrentHash(e.data);\n    }, false);\n    // Listen for scroll events on iframe - don't allow them to bubble to parent\n    $('iframe').on('mousewheel DOMMouseScroll', function(ev) {\n      ev.preventDefault();\n    });\n  })();\n\n  function sendCurrentHash(platform) {\n    // send the initial hash if possible\n    if (platform === 'ios') {\n      $iosIframe[0].contentWindow.postMessage(JSON.stringify({\n        hash: window.location.hash\n      }), '*');\n      return;\n    } else if (platform === 'windows') {\n      $windowsIframe[0].contentWindow.postMessage(JSON.stringify({\n        hash: window.location.hash\n      }), '*');\n      return;\n    }\n    $androidIframe[0].contentWindow.postMessage(JSON.stringify({\n      hash: window.location.hash\n    }), '*');\n  };\n\n  // positioning the platform preview appropriately on scroll\n  var $platformPreview = $('#platform-preview');\n  var $window = $(window);\n  $window.scroll(fixyCheck);\n  function fixyCheck(a, b, c) {\n    if ($window.scrollTop() > 78) {\n      $platformPreview.addClass('fixey');\n    } else {\n      $platformPreview.removeClass('fixey');\n    }\n  }\n}])\n.controller('APIDemoCtrl', ['$scope', '$timeout', function($scope, $timeout) {\n  var $platformPreview = $('#platform-preview');\n  $scope.setPlatform = function(platform) {\n    $scope.previewPlatform = platform;\n    if (platform == 'ios') {\n      $scope.androidActive = false;\n      $scope.windowsActive = false;\n      $timeout(function() { $scope.iosActive = true; }, 30);\n      return;\n    } else if (platform == 'windows') {\n      $scope.iosActive = false;\n      $scope.androidActive = false;\n      $timeout(function() { $scope.windowsActive = true; }, 30);\n      return;\n    }\n    $scope.iosActive = false;\n    $scope.windowsActive = false;\n    $timeout(function() { $scope.androidActive = true; }, 30);\n  };\n  $scope.setPlatform('ios');\n  // Listen for scroll events on iframe - don't allow them to bubble to parent\n  $('iframe').on('mousewheel DOMMouseScroll', function(ev) {\n    ev.preventDefault();\n  });\n  var $window = $(window);\n  $window.scroll(fixyCheck);\n  function fixyCheck(a, b, c) {\n    if ($window.scrollTop() > 78) {\n      $platformPreview.addClass('fixey');\n    } else {\n      $platformPreview.removeClass('fixey');\n    }\n  }\n}])\n.controller('IoniconDocsCtrl', ['$scope', '$http', function($scope, $http) {\n  $scope.icons = {};\n  var $modal;\n\n  $http.get('site_data.json').then(function(response) {\n    $scope.icons = response.data;\n  });\n\n  $scope.$watch('icons', filterIcons);\n  $scope.$watch('searchTerm', filterIcons);\n\n  function filterIcons() {\n    var filteredIcons = {};\n    if (typeof $scope.searchTerm === 'undefined' || $scope.searchTerm == '') {\n      $scope.filteredIcons = $scope.icons;\n      return;\n    }\n    var filteredIcons = {};\n    angular.forEach($scope.icons, function(value, key) {\n      for (var i = 0; i < value.tags.length; i++) {\n        if (value.tags[i].indexOf($scope.searchTerm) != -1) {\n          this[key] = value;\n          break;\n        }\n      }\n    }, filteredIcons);\n    $scope.filteredIcons = filteredIcons;\n  }\n\n  $scope.open = function(key) {\n    $scope.selected = $scope.filteredIcons[key];\n    $scope.selected.key = key;\n    if ($modal === undefined) {\n      $modal = $('#ionicons-modal').modal();\n    } else {\n      $modal.modal('show');\n    }\n  };\n\n  $scope.getIcon = function(iconObj, platform) {\n    //console.log(iconObj);\n    if (iconObj === undefined) {\n      //console.log('undefined');\n      return;\n    }\n    if (iconObj.icons.length === 1 || platform === 'ios') {\n      return iconObj.icons[0].name;\n    }\n    if (iconObj.icons.length === 2) {\n      return iconObj.icons[1].name;\n    }\n    return iconObj.icons[2].name;\n  };\n\n}]);\n\nIonicSiteModule\n// .directive('delayedPre', [function() {\n//   return {\n//     restrict: 'EA',\n//     compile: function(element, attributes) {\n//\n//       return {\n//         post: function(scope, element, attributes, controller, transcludeFn) {\n//           var parent = element[0].parentNode;\n//           var wrapper = document.createElement('pre');\n//           parent.replaceChild(wrapper, element[0]);\n//           wrapper.appendChild(element[0]);\n//         }\n//       };\n//     },\n//   };\n// }])\n.directive('pre', [function() {\n  return {\n    restrict: 'E',\n    terminal: window.isIoniconsPage ? false : true,\n    priority: 1000\n  };\n}]);\n\n(function(factory) {\n\n  // Setup highlight.js for different environments. First is Node.js or\n  // CommonJS.\n  if(typeof exports !== 'undefined') {\n    factory(exports);\n  } else {\n    // Export hljs globally even when using AMD for cases when this script\n    // is loaded with others that may still expect a global hljs.\n    window.hljs = factory({});\n\n    // Finally register the global hljs with AMD.\n    if(typeof define === 'function' && define.amd) {\n      define('hljs', [], function() {\n        return window.hljs;\n      });\n    }\n  }\n\n}(function(hljs) {\n\n  /* Utility functions */\n\n  function escape(value) {\n    return value.replace(/&/gm, '&amp;').replace(/</gm, '&lt;').replace(/>/gm, '&gt;');\n  }\n\n  function tag(node) {\n    return node.nodeName.toLowerCase();\n  }\n\n  function testRe(re, lexeme) {\n    var match = re && re.exec(lexeme);\n    return match && match.index == 0;\n  }\n\n  function isNotHighlighted(language) {\n    return (/^(no-?highlight|plain|text)$/i).test(language);\n  }\n\n  function blockLanguage(block) {\n    var i, match, length,\n        classes = block.className + ' ';\n\n    classes += block.parentNode ? block.parentNode.className : '';\n\n    // language-* takes precedence over non-prefixed class names\n    match = (/\\blang(?:uage)?-([\\w-]+)\\b/i).exec(classes);\n    if (match) {\n      return getLanguage(match[1]) ? match[1] : 'no-highlight';\n    }\n\n    classes = classes.split(/\\s+/);\n    for (i = 0, length = classes.length; i < length; i++) {\n      if (getLanguage(classes[i]) || isNotHighlighted(classes[i])) {\n        return classes[i];\n      }\n    }\n  }\n\n  function inherit(parent, obj) {\n    var result = {}, key;\n    for (key in parent)\n      result[key] = parent[key];\n    if (obj)\n      for (key in obj)\n        result[key] = obj[key];\n    return result;\n  }\n\n  /* Stream merging */\n\n  function nodeStream(node) {\n    var result = [];\n    (function _nodeStream(node, offset) {\n      for (var child = node.firstChild; child; child = child.nextSibling) {\n        if (child.nodeType == 3)\n          offset += child.nodeValue.length;\n        else if (child.nodeType == 1) {\n          result.push({\n            event: 'start',\n            offset: offset,\n            node: child\n          });\n          offset = _nodeStream(child, offset);\n          // Prevent void elements from having an end tag that would actually\n          // double them in the output. There are more void elements in HTML\n          // but we list only those realistically expected in code display.\n          if (!tag(child).match(/br|hr|img|input/)) {\n            result.push({\n              event: 'stop',\n              offset: offset,\n              node: child\n            });\n          }\n        }\n      }\n      return offset;\n    })(node, 0);\n    return result;\n  }\n\n  function mergeStreams(original, highlighted, value) {\n    var processed = 0;\n    var result = '';\n    var nodeStack = [];\n\n    function selectStream() {\n      if (!original.length || !highlighted.length) {\n        return original.length ? original : highlighted;\n      }\n      if (original[0].offset != highlighted[0].offset) {\n        return (original[0].offset < highlighted[0].offset) ? original : highlighted;\n      }\n\n      /*\n      To avoid starting the stream just before it should stop the order is\n      ensured that original always starts first and closes last:\n\n      if (event1 == 'start' && event2 == 'start')\n        return original;\n      if (event1 == 'start' && event2 == 'stop')\n        return highlighted;\n      if (event1 == 'stop' && event2 == 'start')\n        return original;\n      if (event1 == 'stop' && event2 == 'stop')\n        return highlighted;\n\n      ... which is collapsed to:\n      */\n      return highlighted[0].event == 'start' ? original : highlighted;\n    }\n\n    function open(node) {\n      function attr_str(a) {return ' ' + a.nodeName + '=\"' + escape(a.value) + '\"';}\n      result += '<' + tag(node) + Array.prototype.map.call(node.attributes, attr_str).join('') + '>';\n    }\n\n    function close(node) {\n      result += '</' + tag(node) + '>';\n    }\n\n    function render(event) {\n      (event.event == 'start' ? open : close)(event.node);\n    }\n\n    while (original.length || highlighted.length) {\n      var stream = selectStream();\n      result += escape(value.substr(processed, stream[0].offset - processed));\n      processed = stream[0].offset;\n      if (stream == original) {\n        /*\n        On any opening or closing tag of the original markup we first close\n        the entire highlighted node stack, then render the original tag along\n        with all the following original tags at the same offset and then\n        reopen all the tags on the highlighted stack.\n        */\n        nodeStack.reverse().forEach(close);\n        do {\n          render(stream.splice(0, 1)[0]);\n          stream = selectStream();\n        } while (stream == original && stream.length && stream[0].offset == processed);\n        nodeStack.reverse().forEach(open);\n      } else {\n        if (stream[0].event == 'start') {\n          nodeStack.push(stream[0].node);\n        } else {\n          nodeStack.pop();\n        }\n        render(stream.splice(0, 1)[0]);\n      }\n    }\n    return result + escape(value.substr(processed));\n  }\n\n  /* Initialization */\n\n  function compileLanguage(language) {\n\n    function reStr(re) {\n        return (re && re.source) || re;\n    }\n\n    function langRe(value, global) {\n      return new RegExp(\n        reStr(value),\n        'm' + (language.case_insensitive ? 'i' : '') + (global ? 'g' : '')\n      );\n    }\n\n    function compileMode(mode, parent) {\n      if (mode.compiled)\n        return;\n      mode.compiled = true;\n\n      mode.keywords = mode.keywords || mode.beginKeywords;\n      if (mode.keywords) {\n        var compiled_keywords = {};\n\n        var flatten = function(className, str) {\n          if (language.case_insensitive) {\n            str = str.toLowerCase();\n          }\n          str.split(' ').forEach(function(kw) {\n            var pair = kw.split('|');\n            compiled_keywords[pair[0]] = [className, pair[1] ? Number(pair[1]) : 1];\n          });\n        };\n\n        if (typeof mode.keywords == 'string') { // string\n          flatten('keyword', mode.keywords);\n        } else {\n          Object.keys(mode.keywords).forEach(function (className) {\n            flatten(className, mode.keywords[className]);\n          });\n        }\n        mode.keywords = compiled_keywords;\n      }\n      mode.lexemesRe = langRe(mode.lexemes || /\\b\\w+\\b/, true);\n\n      if (parent) {\n        if (mode.beginKeywords) {\n          mode.begin = '\\\\b(' + mode.beginKeywords.split(' ').join('|') + ')\\\\b';\n        }\n        if (!mode.begin)\n          mode.begin = /\\B|\\b/;\n        mode.beginRe = langRe(mode.begin);\n        if (!mode.end && !mode.endsWithParent)\n          mode.end = /\\B|\\b/;\n        if (mode.end)\n          mode.endRe = langRe(mode.end);\n        mode.terminator_end = reStr(mode.end) || '';\n        if (mode.endsWithParent && parent.terminator_end)\n          mode.terminator_end += (mode.end ? '|' : '') + parent.terminator_end;\n      }\n      if (mode.illegal)\n        mode.illegalRe = langRe(mode.illegal);\n      if (mode.relevance === undefined)\n        mode.relevance = 1;\n      if (!mode.contains) {\n        mode.contains = [];\n      }\n      var expanded_contains = [];\n      mode.contains.forEach(function(c) {\n        if (c.variants) {\n          c.variants.forEach(function(v) {expanded_contains.push(inherit(c, v));});\n        } else {\n          expanded_contains.push(c == 'self' ? mode : c);\n        }\n      });\n      mode.contains = expanded_contains;\n      mode.contains.forEach(function(c) {compileMode(c, mode);});\n\n      if (mode.starts) {\n        compileMode(mode.starts, parent);\n      }\n\n      var terminators =\n        mode.contains.map(function(c) {\n          return c.beginKeywords ? '\\\\.?(' + c.begin + ')\\\\.?' : c.begin;\n        })\n        .concat([mode.terminator_end, mode.illegal])\n        .map(reStr)\n        .filter(Boolean);\n      mode.terminators = terminators.length ? langRe(terminators.join('|'), true) : {exec: function(/*s*/) {return null;}};\n    }\n\n    compileMode(language);\n  }\n\n  /*\n  Core highlighting function. Accepts a language name, or an alias, and a\n  string with the code to highlight. Returns an object with the following\n  properties:\n\n  - relevance (int)\n  - value (an HTML string with highlighting markup)\n\n  */\n  function highlight(name, value, ignore_illegals, continuation) {\n\n    function subMode(lexeme, mode) {\n      for (var i = 0; i < mode.contains.length; i++) {\n        if (testRe(mode.contains[i].beginRe, lexeme)) {\n          return mode.contains[i];\n        }\n      }\n    }\n\n    function endOfMode(mode, lexeme) {\n      if (testRe(mode.endRe, lexeme)) {\n        while (mode.endsParent && mode.parent) {\n          mode = mode.parent;\n        }\n        return mode;\n      }\n      if (mode.endsWithParent) {\n        return endOfMode(mode.parent, lexeme);\n      }\n    }\n\n    function isIllegal(lexeme, mode) {\n      return !ignore_illegals && testRe(mode.illegalRe, lexeme);\n    }\n\n    function keywordMatch(mode, match) {\n      var match_str = language.case_insensitive ? match[0].toLowerCase() : match[0];\n      return mode.keywords.hasOwnProperty(match_str) && mode.keywords[match_str];\n    }\n\n    function buildSpan(classname, insideSpan, leaveOpen, noPrefix) {\n      var classPrefix = noPrefix ? '' : options.classPrefix,\n          openSpan    = '<span class=\"' + classPrefix,\n          closeSpan   = leaveOpen ? '' : '</span>';\n\n      openSpan += classname + '\">';\n\n      return openSpan + insideSpan + closeSpan;\n    }\n\n    function processKeywords() {\n      if (!top.keywords)\n        return escape(mode_buffer);\n      var result = '';\n      var last_index = 0;\n      top.lexemesRe.lastIndex = 0;\n      var match = top.lexemesRe.exec(mode_buffer);\n      while (match) {\n        result += escape(mode_buffer.substr(last_index, match.index - last_index));\n        var keyword_match = keywordMatch(top, match);\n        if (keyword_match) {\n          relevance += keyword_match[1];\n          result += buildSpan(keyword_match[0], escape(match[0]));\n        } else {\n          result += escape(match[0]);\n        }\n        last_index = top.lexemesRe.lastIndex;\n        match = top.lexemesRe.exec(mode_buffer);\n      }\n      return result + escape(mode_buffer.substr(last_index));\n    }\n\n    function processSubLanguage() {\n      var explicit = typeof top.subLanguage == 'string';\n      if (explicit && !languages[top.subLanguage]) {\n        return escape(mode_buffer);\n      }\n\n      var result = explicit ?\n                   highlight(top.subLanguage, mode_buffer, true, continuations[top.subLanguage]) :\n                   highlightAuto(mode_buffer, top.subLanguage.length ? top.subLanguage : undefined);\n\n      // Counting embedded language score towards the host language may be disabled\n      // with zeroing the containing mode relevance. Usecase in point is Markdown that\n      // allows XML everywhere and makes every XML snippet to have a much larger Markdown\n      // score.\n      if (top.relevance > 0) {\n        relevance += result.relevance;\n      }\n      if (explicit) {\n        continuations[top.subLanguage] = result.top;\n      }\n      return buildSpan(result.language, result.value, false, true);\n    }\n\n    function processBuffer() {\n      return top.subLanguage !== undefined ? processSubLanguage() : processKeywords();\n    }\n\n    function startNewMode(mode, lexeme) {\n      var markup = mode.className? buildSpan(mode.className, '', true): '';\n      if (mode.returnBegin) {\n        result += markup;\n        mode_buffer = '';\n      } else if (mode.excludeBegin) {\n        result += escape(lexeme) + markup;\n        mode_buffer = '';\n      } else {\n        result += markup;\n        mode_buffer = lexeme;\n      }\n      top = Object.create(mode, {parent: {value: top}});\n    }\n\n    function processLexeme(buffer, lexeme) {\n\n      mode_buffer += buffer;\n      if (lexeme === undefined) {\n        result += processBuffer();\n        return 0;\n      }\n\n      var new_mode = subMode(lexeme, top);\n      if (new_mode) {\n        result += processBuffer();\n        startNewMode(new_mode, lexeme);\n        return new_mode.returnBegin ? 0 : lexeme.length;\n      }\n\n      var end_mode = endOfMode(top, lexeme);\n      if (end_mode) {\n        var origin = top;\n        if (!(origin.returnEnd || origin.excludeEnd)) {\n          mode_buffer += lexeme;\n        }\n        result += processBuffer();\n        do {\n          if (top.className) {\n            result += '</span>';\n          }\n          relevance += top.relevance;\n          top = top.parent;\n        } while (top != end_mode.parent);\n        if (origin.excludeEnd) {\n          result += escape(lexeme);\n        }\n        mode_buffer = '';\n        if (end_mode.starts) {\n          startNewMode(end_mode.starts, '');\n        }\n        return origin.returnEnd ? 0 : lexeme.length;\n      }\n\n      if (isIllegal(lexeme, top))\n        throw new Error('Illegal lexeme \"' + lexeme + '\" for mode \"' + (top.className || '<unnamed>') + '\"');\n\n      /*\n      Parser should not reach this point as all types of lexemes should be caught\n      earlier, but if it does due to some bug make sure it advances at least one\n      character forward to prevent infinite looping.\n      */\n      mode_buffer += lexeme;\n      return lexeme.length || 1;\n    }\n\n    var language = getLanguage(name);\n    if (!language) {\n      throw new Error('Unknown language: \"' + name + '\"');\n    }\n\n    compileLanguage(language);\n    var top = continuation || language;\n    var continuations = {}; // keep continuations for sub-languages\n    var result = '', current;\n    for(current = top; current != language; current = current.parent) {\n      if (current.className) {\n        result = buildSpan(current.className, '', true) + result;\n      }\n    }\n    var mode_buffer = '';\n    var relevance = 0;\n    try {\n      var match, count, index = 0;\n      while (true) {\n        top.terminators.lastIndex = index;\n        match = top.terminators.exec(value);\n        if (!match)\n          break;\n        count = processLexeme(value.substr(index, match.index - index), match[0]);\n        index = match.index + count;\n      }\n      processLexeme(value.substr(index));\n      for(current = top; current.parent; current = current.parent) { // close dangling modes\n        if (current.className) {\n          result += '</span>';\n        }\n      }\n      return {\n        relevance: relevance,\n        value: result,\n        language: name,\n        top: top\n      };\n    } catch (e) {\n      if (e.message.indexOf('Illegal') != -1) {\n        return {\n          relevance: 0,\n          value: escape(value)\n        };\n      } else {\n        throw e;\n      }\n    }\n  }\n\n  /*\n  Highlighting with language detection. Accepts a string with the code to\n  highlight. Returns an object with the following properties:\n\n  - language (detected language)\n  - relevance (int)\n  - value (an HTML string with highlighting markup)\n  - second_best (object with the same structure for second-best heuristically\n    detected language, may be absent)\n\n  */\n  function highlightAuto(text, languageSubset) {\n    languageSubset = languageSubset || options.languages || Object.keys(languages);\n    var result = {\n      relevance: 0,\n      value: escape(text)\n    };\n    var second_best = result;\n    languageSubset.forEach(function(name) {\n      if (!getLanguage(name)) {\n        return;\n      }\n      var current = highlight(name, text, false);\n      current.language = name;\n      if (current.relevance > second_best.relevance) {\n        second_best = current;\n      }\n      if (current.relevance > result.relevance) {\n        second_best = result;\n        result = current;\n      }\n    });\n    if (second_best.language) {\n      result.second_best = second_best;\n    }\n    return result;\n  }\n\n  /*\n  Post-processing of the highlighted markup:\n\n  - replace TABs with something more useful\n  - replace real line-breaks with '<br>' for non-pre containers\n\n  */\n  function fixMarkup(value) {\n    if (options.tabReplace) {\n      value = value.replace(/^((<[^>]+>|\\t)+)/gm, function(match, p1 /*..., offset, s*/) {\n        return p1.replace(/\\t/g, options.tabReplace);\n      });\n    }\n    if (options.useBR) {\n      value = value.replace(/\\n/g, '<br>');\n    }\n    return value;\n  }\n\n  function buildClassName(prevClassName, currentLang, resultLang) {\n    var language = currentLang ? aliases[currentLang] : resultLang,\n        result   = [prevClassName.trim()];\n\n    if (!prevClassName.match(/\\bhljs\\b/)) {\n      result.push('hljs');\n    }\n\n    if (prevClassName.indexOf(language) === -1) {\n      result.push(language);\n    }\n\n    return result.join(' ').trim();\n  }\n\n  /*\n  Applies highlighting to a DOM node containing code. Accepts a DOM node and\n  two optional parameters for fixMarkup.\n  */\n  function highlightBlock(block) {\n    var language = blockLanguage(block);\n    if (isNotHighlighted(language))\n        return;\n\n    var node;\n    if (options.useBR) {\n      node = document.createElementNS('http://www.w3.org/1999/xhtml', 'div');\n      node.innerHTML = block.innerHTML.replace(/\\n/g, '').replace(/<br[ \\/]*>/g, '\\n');\n    } else {\n      node = block;\n    }\n    var text = node.textContent;\n    var result = language ? highlight(language, text, true) : highlightAuto(text);\n\n    var originalStream = nodeStream(node);\n    if (originalStream.length) {\n      var resultNode = document.createElementNS('http://www.w3.org/1999/xhtml', 'div');\n      resultNode.innerHTML = result.value;\n      result.value = mergeStreams(originalStream, nodeStream(resultNode), text);\n    }\n    result.value = fixMarkup(result.value);\n\n    block.innerHTML = result.value;\n    block.className = buildClassName(block.className, language, result.language);\n    block.result = {\n      language: result.language,\n      re: result.relevance\n    };\n    if (result.second_best) {\n      block.second_best = {\n        language: result.second_best.language,\n        re: result.second_best.relevance\n      };\n    }\n  }\n\n  var options = {\n    classPrefix: 'hljs-',\n    tabReplace: null,\n    useBR: false,\n    languages: undefined\n  };\n\n  /*\n  Updates highlight.js global options with values passed in the form of an object\n  */\n  function configure(user_options) {\n    options = inherit(options, user_options);\n  }\n\n  /*\n  Applies highlighting to all <pre><code>..</code></pre> blocks on a page.\n  */\n  function initHighlighting() {\n    if (initHighlighting.called)\n      return;\n    initHighlighting.called = true;\n\n    var blocks = document.querySelectorAll('pre code');\n    Array.prototype.forEach.call(blocks, highlightBlock);\n  }\n\n  /*\n  Attaches highlighting to the page load event.\n  */\n  function initHighlightingOnLoad() {\n    addEventListener('DOMContentLoaded', initHighlighting, false);\n    addEventListener('load', initHighlighting, false);\n  }\n\n  var languages = {};\n  var aliases = {};\n\n  function registerLanguage(name, language) {\n    var lang = languages[name] = language(hljs);\n    if (lang.aliases) {\n      lang.aliases.forEach(function(alias) {aliases[alias] = name;});\n    }\n  }\n\n  function listLanguages() {\n    return Object.keys(languages);\n  }\n\n  function getLanguage(name) {\n    name = (name || '').toLowerCase();\n    return languages[name] || languages[aliases[name]];\n  }\n\n  /* Interface definition */\n\n  hljs.highlight = highlight;\n  hljs.highlightAuto = highlightAuto;\n  hljs.fixMarkup = fixMarkup;\n  hljs.highlightBlock = highlightBlock;\n  hljs.configure = configure;\n  hljs.initHighlighting = initHighlighting;\n  hljs.initHighlightingOnLoad = initHighlightingOnLoad;\n  hljs.registerLanguage = registerLanguage;\n  hljs.listLanguages = listLanguages;\n  hljs.getLanguage = getLanguage;\n  hljs.inherit = inherit;\n\n  // Common regexps\n  hljs.IDENT_RE = '[a-zA-Z]\\\\w*';\n  hljs.UNDERSCORE_IDENT_RE = '[a-zA-Z_]\\\\w*';\n  hljs.NUMBER_RE = '\\\\b\\\\d+(\\\\.\\\\d+)?';\n  hljs.C_NUMBER_RE = '(\\\\b0[xX][a-fA-F0-9]+|(\\\\b\\\\d+(\\\\.\\\\d*)?|\\\\.\\\\d+)([eE][-+]?\\\\d+)?)'; // 0x..., 0..., decimal, float\n  hljs.BINARY_NUMBER_RE = '\\\\b(0b[01]+)'; // 0b...\n  hljs.RE_STARTERS_RE = '!|!=|!==|%|%=|&|&&|&=|\\\\*|\\\\*=|\\\\+|\\\\+=|,|-|-=|/=|/|:|;|<<|<<=|<=|<|===|==|=|>>>=|>>=|>=|>>>|>>|>|\\\\?|\\\\[|\\\\{|\\\\(|\\\\^|\\\\^=|\\\\||\\\\|=|\\\\|\\\\||~';\n\n  // Common modes\n  hljs.BACKSLASH_ESCAPE = {\n    begin: '\\\\\\\\[\\\\s\\\\S]', relevance: 0\n  };\n  hljs.APOS_STRING_MODE = {\n    className: 'string',\n    begin: '\\'', end: '\\'',\n    illegal: '\\\\n',\n    contains: [hljs.BACKSLASH_ESCAPE]\n  };\n  hljs.QUOTE_STRING_MODE = {\n    className: 'string',\n    begin: '\"', end: '\"',\n    illegal: '\\\\n',\n    contains: [hljs.BACKSLASH_ESCAPE]\n  };\n  hljs.PHRASAL_WORDS_MODE = {\n    begin: /\\b(a|an|the|are|I|I'm|isn't|don't|doesn't|won't|but|just|should|pretty|simply|enough|gonna|going|wtf|so|such|will|you|your|like)\\b/\n  };\n  hljs.COMMENT = function (begin, end, inherits) {\n    var mode = hljs.inherit(\n      {\n        className: 'comment',\n        begin: begin, end: end,\n        contains: []\n      },\n      inherits || {}\n    );\n    mode.contains.push(hljs.PHRASAL_WORDS_MODE);\n    mode.contains.push({\n      className: 'doctag',\n      begin: \"(?:TODO|FIXME|NOTE|BUG|XXX):\",\n      relevance: 0\n    });\n    return mode;\n  };\n  hljs.C_LINE_COMMENT_MODE = hljs.COMMENT('//', '$');\n  hljs.C_BLOCK_COMMENT_MODE = hljs.COMMENT('/\\\\*', '\\\\*/');\n  hljs.HASH_COMMENT_MODE = hljs.COMMENT('#', '$');\n  hljs.NUMBER_MODE = {\n    className: 'number',\n    begin: hljs.NUMBER_RE,\n    relevance: 0\n  };\n  hljs.C_NUMBER_MODE = {\n    className: 'number',\n    begin: hljs.C_NUMBER_RE,\n    relevance: 0\n  };\n  hljs.BINARY_NUMBER_MODE = {\n    className: 'number',\n    begin: hljs.BINARY_NUMBER_RE,\n    relevance: 0\n  };\n  hljs.CSS_NUMBER_MODE = {\n    className: 'number',\n    begin: hljs.NUMBER_RE + '(' +\n      '%|em|ex|ch|rem'  +\n      '|vw|vh|vmin|vmax' +\n      '|cm|mm|in|pt|pc|px' +\n      '|deg|grad|rad|turn' +\n      '|s|ms' +\n      '|Hz|kHz' +\n      '|dpi|dpcm|dppx' +\n      ')?',\n    relevance: 0\n  };\n  hljs.REGEXP_MODE = {\n    className: 'regexp',\n    begin: /\\//, end: /\\/[gimuy]*/,\n    illegal: /\\n/,\n    contains: [\n      hljs.BACKSLASH_ESCAPE,\n      {\n        begin: /\\[/, end: /\\]/,\n        relevance: 0,\n        contains: [hljs.BACKSLASH_ESCAPE]\n      }\n    ]\n  };\n  hljs.TITLE_MODE = {\n    className: 'title',\n    begin: hljs.IDENT_RE,\n    relevance: 0\n  };\n  hljs.UNDERSCORE_TITLE_MODE = {\n    className: 'title',\n    begin: hljs.UNDERSCORE_IDENT_RE,\n    relevance: 0\n  };\n\nhljs.registerLanguage('bash', function(hljs) {\n  var VAR = {\n    className: 'variable',\n    variants: [\n      {begin: /\\$[\\w\\d#@][\\w\\d_]*/},\n      {begin: /\\$\\{(.*?)}/}\n    ]\n  };\n  var QUOTE_STRING = {\n    className: 'string',\n    begin: /\"/, end: /\"/,\n    contains: [\n      hljs.BACKSLASH_ESCAPE,\n      VAR,\n      {\n        className: 'variable',\n        begin: /\\$\\(/, end: /\\)/,\n        contains: [hljs.BACKSLASH_ESCAPE]\n      }\n    ]\n  };\n  var APOS_STRING = {\n    className: 'string',\n    begin: /'/, end: /'/\n  };\n\n  return {\n    aliases: ['sh', 'zsh'],\n    lexemes: /-?[a-z\\.]+/,\n    keywords: {\n      keyword:\n        'if then else elif fi for while in do done case esac function',\n      literal:\n        'true false',\n      built_in:\n        // Shell built-ins\n        // http://www.gnu.org/software/bash/manual/html_node/Shell-Builtin-Commands.html\n        'break cd continue eval exec exit export getopts hash pwd readonly return shift test times ' +\n        'trap umask unset ' +\n        // Bash built-ins\n        'alias bind builtin caller command declare echo enable help let local logout mapfile printf ' +\n        'read readarray source type typeset ulimit unalias ' +\n        // Shell modifiers\n        'set shopt ' +\n        // Zsh built-ins\n        'autoload bg bindkey bye cap chdir clone comparguments compcall compctl compdescribe compfiles ' +\n        'compgroups compquote comptags comptry compvalues dirs disable disown echotc echoti emulate ' +\n        'fc fg float functions getcap getln history integer jobs kill limit log noglob popd print ' +\n        'pushd pushln rehash sched setcap setopt stat suspend ttyctl unfunction unhash unlimit ' +\n        'unsetopt vared wait whence where which zcompile zformat zftp zle zmodload zparseopts zprof ' +\n        'zpty zregexparse zsocket zstyle ztcp',\n      operator:\n        '-ne -eq -lt -gt -f -d -e -s -l -a' // relevance booster\n    },\n    contains: [\n      {\n        className: 'shebang',\n        begin: /^#![^\\n]+sh\\s*$/,\n        relevance: 10\n      },\n      {\n        className: 'function',\n        begin: /\\w[\\w\\d_]*\\s*\\(\\s*\\)\\s*\\{/,\n        returnBegin: true,\n        contains: [hljs.inherit(hljs.TITLE_MODE, {begin: /\\w[\\w\\d_]*/})],\n        relevance: 0\n      },\n      hljs.HASH_COMMENT_MODE,\n      hljs.NUMBER_MODE,\n      QUOTE_STRING,\n      APOS_STRING,\n      VAR\n    ]\n  };\n});\n\nhljs.registerLanguage('css', function(hljs) {\n  var IDENT_RE = '[a-zA-Z-][a-zA-Z0-9_-]*';\n  var FUNCTION = {\n    className: 'function',\n    begin: IDENT_RE + '\\\\(',\n    returnBegin: true,\n    excludeEnd: true,\n    end: '\\\\('\n  };\n  var RULE = {\n    className: 'rule',\n    begin: /[A-Z\\_\\.\\-]+\\s*:/, returnBegin: true, end: ';', endsWithParent: true,\n    contains: [\n      {\n        className: 'attribute',\n        begin: /\\S/, end: ':', excludeEnd: true,\n        starts: {\n          className: 'value',\n          endsWithParent: true, excludeEnd: true,\n          contains: [\n            FUNCTION,\n            hljs.CSS_NUMBER_MODE,\n            hljs.QUOTE_STRING_MODE,\n            hljs.APOS_STRING_MODE,\n            hljs.C_BLOCK_COMMENT_MODE,\n            {\n              className: 'hexcolor', begin: '#[0-9A-Fa-f]+'\n            },\n            {\n              className: 'important', begin: '!important'\n            }\n          ]\n        }\n      }\n    ]\n  };\n\n  return {\n    case_insensitive: true,\n    illegal: /[=\\/|'\\$]/,\n    contains: [\n      hljs.C_BLOCK_COMMENT_MODE,\n      {\n        className: 'id', begin: /\\#[A-Za-z0-9_-]+/\n      },\n      {\n        className: 'class', begin: /\\.[A-Za-z0-9_-]+/\n      },\n      {\n        className: 'attr_selector',\n        begin: /\\[/, end: /\\]/,\n        illegal: '$'\n      },\n      {\n        className: 'pseudo',\n        begin: /:(:)?[a-zA-Z0-9\\_\\-\\+\\(\\)\"']+/\n      },\n      {\n        className: 'at_rule',\n        begin: '@(font-face|page)',\n        lexemes: '[a-z-]+',\n        keywords: 'font-face page'\n      },\n      {\n        className: 'at_rule',\n        begin: '@', end: '[{;]', // at_rule eating first \"{\" is a good thing\n                                 // because it doesn’t let it to be parsed as\n                                 // a rule set but instead drops parser into\n                                 // the default mode which is how it should be.\n        contains: [\n          {\n            className: 'keyword',\n            begin: /\\S+/\n          },\n          {\n            begin: /\\s/, endsWithParent: true, excludeEnd: true,\n            relevance: 0,\n            contains: [\n              FUNCTION,\n              hljs.APOS_STRING_MODE, hljs.QUOTE_STRING_MODE,\n              hljs.CSS_NUMBER_MODE\n            ]\n          }\n        ]\n      },\n      {\n        className: 'tag', begin: IDENT_RE,\n        relevance: 0\n      },\n      {\n        className: 'rules',\n        begin: '{', end: '}',\n        illegal: /\\S/,\n        contains: [\n          hljs.C_BLOCK_COMMENT_MODE,\n          RULE,\n        ]\n      }\n    ]\n  };\n});\n\nhljs.registerLanguage('javascript', function(hljs) {\n  return {\n    aliases: ['js'],\n    keywords: {\n      keyword:\n        'in of if for while finally var new function do return void else break catch ' +\n        'instanceof with throw case default try this switch continue typeof delete ' +\n        'let yield const export super debugger as async await',\n      literal:\n        'true false null undefined NaN Infinity',\n      built_in:\n        'eval isFinite isNaN parseFloat parseInt decodeURI decodeURIComponent ' +\n        'encodeURI encodeURIComponent escape unescape Object Function Boolean Error ' +\n        'EvalError InternalError RangeError ReferenceError StopIteration SyntaxError ' +\n        'TypeError URIError Number Math Date String RegExp Array Float32Array ' +\n        'Float64Array Int16Array Int32Array Int8Array Uint16Array Uint32Array ' +\n        'Uint8Array Uint8ClampedArray ArrayBuffer DataView JSON Intl arguments require ' +\n        'module console window document Symbol Set Map WeakSet WeakMap Proxy Reflect ' +\n        'Promise'\n    },\n    contains: [\n      {\n        className: 'pi',\n        relevance: 10,\n        begin: /^\\s*['\"]use (strict|asm)['\"]/\n      },\n      hljs.APOS_STRING_MODE,\n      hljs.QUOTE_STRING_MODE,\n      { // template string\n        className: 'string',\n        begin: '`', end: '`',\n        contains: [\n          hljs.BACKSLASH_ESCAPE,\n          {\n            className: 'subst',\n            begin: '\\\\$\\\\{', end: '\\\\}'\n          }\n        ]\n      },\n      hljs.C_LINE_COMMENT_MODE,\n      hljs.C_BLOCK_COMMENT_MODE,\n      {\n        className: 'number',\n        variants: [\n          { begin: '\\\\b(0[bB][01]+)' },\n          { begin: '\\\\b(0[oO][0-7]+)' },\n          { begin: hljs.C_NUMBER_RE }\n        ],\n        relevance: 0\n      },\n      { // \"value\" container\n        begin: '(' + hljs.RE_STARTERS_RE + '|\\\\b(case|return|throw)\\\\b)\\\\s*',\n        keywords: 'return throw case',\n        contains: [\n          hljs.C_LINE_COMMENT_MODE,\n          hljs.C_BLOCK_COMMENT_MODE,\n          hljs.REGEXP_MODE,\n          { // E4X / JSX\n            begin: /</, end: />\\s*[);\\]]/,\n            relevance: 0,\n            subLanguage: 'xml'\n          }\n        ],\n        relevance: 0\n      },\n      {\n        className: 'function',\n        beginKeywords: 'function', end: /\\{/, excludeEnd: true,\n        contains: [\n          hljs.inherit(hljs.TITLE_MODE, {begin: /[A-Za-z$_][0-9A-Za-z$_]*/}),\n          {\n            className: 'params',\n            begin: /\\(/, end: /\\)/,\n            excludeBegin: true,\n            excludeEnd: true,\n            contains: [\n              hljs.C_LINE_COMMENT_MODE,\n              hljs.C_BLOCK_COMMENT_MODE\n            ]\n          }\n        ],\n        illegal: /\\[|%/\n      },\n      {\n        begin: /\\$[(.]/ // relevance booster for a pattern common to JS libs: `$(something)` and `$.something`\n      },\n      {\n        begin: '\\\\.' + hljs.IDENT_RE, relevance: 0 // hack: prevents detection of keywords after dots\n      },\n      // ECMAScript 6 modules import\n      {\n        beginKeywords: 'import', end: '[;$]',\n        keywords: 'import from as',\n        contains: [\n          hljs.APOS_STRING_MODE,\n          hljs.QUOTE_STRING_MODE\n        ]\n      },\n      { // ES6 class\n        className: 'class',\n        beginKeywords: 'class', end: /[{;=]/, excludeEnd: true,\n        illegal: /[:\"\\[\\]]/,\n        contains: [\n          {beginKeywords: 'extends'},\n          hljs.UNDERSCORE_TITLE_MODE\n        ]\n      }\n    ],\n    illegal: /#/\n  };\n});\n\nhljs.registerLanguage('scss', function(hljs) {\n  var IDENT_RE = '[a-zA-Z-][a-zA-Z0-9_-]*';\n  var VARIABLE = {\n    className: 'variable',\n    begin: '(\\\\$' + IDENT_RE + ')\\\\b'\n  };\n  var FUNCTION = {\n    className: 'function',\n    begin: IDENT_RE + '\\\\(',\n    returnBegin: true,\n    excludeEnd: true,\n    end: '\\\\('\n  };\n  var HEXCOLOR = {\n    className: 'hexcolor', begin: '#[0-9A-Fa-f]+'\n  };\n  var DEF_INTERNALS = {\n    className: 'attribute',\n    begin: '[A-Z\\\\_\\\\.\\\\-]+', end: ':',\n    excludeEnd: true,\n    illegal: '[^\\\\s]',\n    starts: {\n      className: 'value',\n      endsWithParent: true, excludeEnd: true,\n      contains: [\n        FUNCTION,\n        HEXCOLOR,\n        hljs.CSS_NUMBER_MODE,\n        hljs.QUOTE_STRING_MODE,\n        hljs.APOS_STRING_MODE,\n        hljs.C_BLOCK_COMMENT_MODE,\n        {\n          className: 'important', begin: '!important'\n        }\n      ]\n    }\n  };\n  return {\n    case_insensitive: true,\n    illegal: '[=/|\\']',\n    contains: [\n      hljs.C_LINE_COMMENT_MODE,\n      hljs.C_BLOCK_COMMENT_MODE,\n      FUNCTION,\n      {\n        className: 'id', begin: '\\\\#[A-Za-z0-9_-]+',\n        relevance: 0\n      },\n      {\n        className: 'class', begin: '\\\\.[A-Za-z0-9_-]+',\n        relevance: 0\n      },\n      {\n        className: 'attr_selector',\n        begin: '\\\\[', end: '\\\\]',\n        illegal: '$'\n      },\n      {\n        className: 'tag', // begin: IDENT_RE, end: '[,|\\\\s]'\n        begin: '\\\\b(a|abbr|acronym|address|area|article|aside|audio|b|base|big|blockquote|body|br|button|canvas|caption|cite|code|col|colgroup|command|datalist|dd|del|details|dfn|div|dl|dt|em|embed|fieldset|figcaption|figure|footer|form|frame|frameset|(h[1-6])|head|header|hgroup|hr|html|i|iframe|img|input|ins|kbd|keygen|label|legend|li|link|map|mark|meta|meter|nav|noframes|noscript|object|ol|optgroup|option|output|p|param|pre|progress|q|rp|rt|ruby|samp|script|section|select|small|span|strike|strong|style|sub|sup|table|tbody|td|textarea|tfoot|th|thead|time|title|tr|tt|ul|var|video)\\\\b',\n        relevance: 0\n      },\n      {\n        className: 'pseudo',\n        begin: ':(visited|valid|root|right|required|read-write|read-only|out-range|optional|only-of-type|only-child|nth-of-type|nth-last-of-type|nth-last-child|nth-child|not|link|left|last-of-type|last-child|lang|invalid|indeterminate|in-range|hover|focus|first-of-type|first-line|first-letter|first-child|first|enabled|empty|disabled|default|checked|before|after|active)'\n      },\n      {\n        className: 'pseudo',\n        begin: '::(after|before|choices|first-letter|first-line|repeat-index|repeat-item|selection|value)'\n      },\n      VARIABLE,\n      {\n        className: 'attribute',\n        begin: '\\\\b(z-index|word-wrap|word-spacing|word-break|width|widows|white-space|visibility|vertical-align|unicode-bidi|transition-timing-function|transition-property|transition-duration|transition-delay|transition|transform-style|transform-origin|transform|top|text-underline-position|text-transform|text-shadow|text-rendering|text-overflow|text-indent|text-decoration-style|text-decoration-line|text-decoration-color|text-decoration|text-align-last|text-align|tab-size|table-layout|right|resize|quotes|position|pointer-events|perspective-origin|perspective|page-break-inside|page-break-before|page-break-after|padding-top|padding-right|padding-left|padding-bottom|padding|overflow-y|overflow-x|overflow-wrap|overflow|outline-width|outline-style|outline-offset|outline-color|outline|orphans|order|opacity|object-position|object-fit|normal|none|nav-up|nav-right|nav-left|nav-index|nav-down|min-width|min-height|max-width|max-height|mask|marks|margin-top|margin-right|margin-left|margin-bottom|margin|list-style-type|list-style-position|list-style-image|list-style|line-height|letter-spacing|left|justify-content|initial|inherit|ime-mode|image-orientation|image-resolution|image-rendering|icon|hyphens|height|font-weight|font-variant-ligatures|font-variant|font-style|font-stretch|font-size-adjust|font-size|font-language-override|font-kerning|font-feature-settings|font-family|font|float|flex-wrap|flex-shrink|flex-grow|flex-flow|flex-direction|flex-basis|flex|filter|empty-cells|display|direction|cursor|counter-reset|counter-increment|content|column-width|column-span|column-rule-width|column-rule-style|column-rule-color|column-rule|column-gap|column-fill|column-count|columns|color|clip-path|clip|clear|caption-side|break-inside|break-before|break-after|box-sizing|box-shadow|box-decoration-break|bottom|border-width|border-top-width|border-top-style|border-top-right-radius|border-top-left-radius|border-top-color|border-top|border-style|border-spacing|border-right-width|border-right-style|border-right-color|border-right|border-radius|border-left-width|border-left-style|border-left-color|border-left|border-image-width|border-image-source|border-image-slice|border-image-repeat|border-image-outset|border-image|border-color|border-collapse|border-bottom-width|border-bottom-style|border-bottom-right-radius|border-bottom-left-radius|border-bottom-color|border-bottom|border|background-size|background-repeat|background-position|background-origin|background-image|background-color|background-clip|background-attachment|background-blend-mode|background|backface-visibility|auto|animation-timing-function|animation-play-state|animation-name|animation-iteration-count|animation-fill-mode|animation-duration|animation-direction|animation-delay|animation|align-self|align-items|align-content)\\\\b',\n        illegal: '[^\\\\s]'\n      },\n      {\n        className: 'value',\n        begin: '\\\\b(whitespace|wait|w-resize|visible|vertical-text|vertical-ideographic|uppercase|upper-roman|upper-alpha|underline|transparent|top|thin|thick|text|text-top|text-bottom|tb-rl|table-header-group|table-footer-group|sw-resize|super|strict|static|square|solid|small-caps|separate|se-resize|scroll|s-resize|rtl|row-resize|ridge|right|repeat|repeat-y|repeat-x|relative|progress|pointer|overline|outside|outset|oblique|nowrap|not-allowed|normal|none|nw-resize|no-repeat|no-drop|newspaper|ne-resize|n-resize|move|middle|medium|ltr|lr-tb|lowercase|lower-roman|lower-alpha|loose|list-item|line|line-through|line-edge|lighter|left|keep-all|justify|italic|inter-word|inter-ideograph|inside|inset|inline|inline-block|inherit|inactive|ideograph-space|ideograph-parenthesis|ideograph-numeric|ideograph-alpha|horizontal|hidden|help|hand|groove|fixed|ellipsis|e-resize|double|dotted|distribute|distribute-space|distribute-letter|distribute-all-lines|disc|disabled|default|decimal|dashed|crosshair|collapse|col-resize|circle|char|center|capitalize|break-word|break-all|bottom|both|bolder|bold|block|bidi-override|below|baseline|auto|always|all-scroll|absolute|table|table-cell)\\\\b'\n      },\n      {\n        className: 'value',\n        begin: ':', end: ';',\n        contains: [\n          FUNCTION,\n          VARIABLE,\n          HEXCOLOR,\n          hljs.CSS_NUMBER_MODE,\n          hljs.QUOTE_STRING_MODE,\n          hljs.APOS_STRING_MODE,\n          {\n            className: 'important', begin: '!important'\n          }\n        ]\n      },\n      {\n        className: 'at_rule',\n        begin: '@', end: '[{;]',\n        keywords: 'mixin include extend for if else each while charset import debug media page content font-face namespace warn',\n        contains: [\n          FUNCTION,\n          VARIABLE,\n          hljs.QUOTE_STRING_MODE,\n          hljs.APOS_STRING_MODE,\n          HEXCOLOR,\n          hljs.CSS_NUMBER_MODE,\n          {\n            className: 'preprocessor',\n            begin: '\\\\s[A-Za-z0-9_.-]+',\n            relevance: 0\n          }\n        ]\n      }\n    ]\n  };\n});\n\nhljs.registerLanguage('typescript', function(hljs) {\n  var KEYWORDS = {\n    keyword:\n      'in if for while finally var new function|0 do return void else break catch ' +\n      'instanceof with throw case default try this switch continue typeof delete ' +\n      'let yield const class public private get set super ' +\n      'static implements enum export import declare type protected @',\n    literal:\n      'true false null undefined NaN Infinity',\n    built_in:\n      'eval isFinite isNaN parseFloat parseInt decodeURI decodeURIComponent ' +\n      'encodeURI encodeURIComponent escape unescape Object Function Boolean Error ' +\n      'EvalError InternalError RangeError ReferenceError StopIteration SyntaxError ' +\n      'TypeError URIError Number Math Date String RegExp Array Float32Array ' +\n      'Float64Array Int16Array Int32Array Int8Array Uint16Array Uint32Array ' +\n      'Uint8Array Uint8ClampedArray ArrayBuffer DataView JSON Intl arguments require ' +\n      'module console window document any number boolean string void'\n  };\n\n  return {\n    aliases: ['ts'],\n    keywords: KEYWORDS,\n    contains: [\n      {\n        className: 'pi',\n        begin: /^\\s*['\"]use strict['\"]/,\n        relevance: 0\n      },\n      hljs.APOS_STRING_MODE,\n      hljs.QUOTE_STRING_MODE,\n      hljs.C_LINE_COMMENT_MODE,\n      hljs.C_BLOCK_COMMENT_MODE,\n      {\n        className: 'number',\n        variants: [\n          { begin: '\\\\b(0[bB][01]+)' },\n          { begin: '\\\\b(0[oO][0-7]+)' },\n          { begin: hljs.C_NUMBER_RE }\n        ],\n        relevance: 0\n      },\n      { // \"value\" container\n        begin: '(' + hljs.RE_STARTERS_RE + '|\\\\b(case|return|throw)\\\\b)\\\\s*',\n        keywords: 'return throw case',\n        contains: [\n          hljs.C_LINE_COMMENT_MODE,\n          hljs.C_BLOCK_COMMENT_MODE,\n          hljs.REGEXP_MODE\n        ],\n        relevance: 0\n      },\n      {\n        className: 'function',\n        begin: 'function', end: /[\\{;]/, excludeEnd: true,\n        keywords: KEYWORDS,\n        contains: [\n          'self',\n          hljs.inherit(hljs.TITLE_MODE, {begin: /[A-Za-z$_][0-9A-Za-z$_]*/}),\n          {\n            className: 'params',\n            begin: /\\(/, end: /\\)/,\n            excludeBegin: true,\n            excludeEnd: true,\n            keywords: KEYWORDS,\n            contains: [\n              hljs.C_LINE_COMMENT_MODE,\n              hljs.C_BLOCK_COMMENT_MODE\n            ],\n            illegal: /[\"'\\(]/\n          }\n        ],\n        illegal: /\\[|%/,\n        relevance: 0 // () => {} is more typical in TypeScript\n      },\n      {\n        className: 'constructor',\n        beginKeywords: 'constructor', end: /\\{/, excludeEnd: true,\n        relevance: 10\n      },\n      {\n        className: 'module',\n        beginKeywords: 'module', end: /\\{/, excludeEnd: true\n      },\n      {\n        className: 'interface',\n        beginKeywords: 'interface', end: /\\{/, excludeEnd: true,\n        keywords: 'interface extends'\n        },\n        // MH ADDED: ES7 Decorators/Annotations\n      {\n        className: 'keyword',\n        begin: '@', end: /\\(/, excludeEnd: true\n      },\n      {\n        className: 'string',\n        begin: '`', end: /\\`/, excludeEnd: false\n      },\n      {\n        begin: /\\$[(.]/ // relevance booster for a pattern common to JS libs: `$(something)` and `$.something`\n      },\n      {\n        begin: '\\\\.' + hljs.IDENT_RE, relevance: 0 // hack: prevents detection of keywords after dots\n      }\n    ]\n  };\n});\n\nhljs.registerLanguage('xml', function(hljs) {\n  var XML_IDENT_RE = '[A-Za-z0-9\\\\._:-]+';\n  var PHP = {\n    begin: /<\\?(php)?(?!\\w)/, end: /\\?>/,\n    subLanguage: 'php'\n  };\n  var TAG_INTERNALS = {\n    endsWithParent: true,\n    illegal: /</,\n    relevance: 0,\n    contains: [\n      PHP,\n      {\n        className: 'attribute',\n        begin: XML_IDENT_RE,\n        relevance: 0\n      },\n      {\n        begin: '=',\n        relevance: 0,\n        contains: [\n          {\n            className: 'value',\n            contains: [PHP],\n            variants: [\n              {begin: /\"/, end: /\"/},\n              {begin: /'/, end: /'/},\n              {begin: /[^\\s\\/>]+/}\n            ]\n          }\n        ]\n      }\n    ]\n  };\n  return {\n    aliases: ['html', 'xhtml', 'rss', 'atom', 'xsl', 'plist'],\n    case_insensitive: true,\n    contains: [\n      {\n        className: 'doctype',\n        begin: '<!DOCTYPE', end: '>',\n        relevance: 10,\n        contains: [{begin: '\\\\[', end: '\\\\]'}]\n      },\n      hljs.COMMENT(\n        '<!--',\n        '-->',\n        {\n          relevance: 10\n        }\n      ),\n      {\n        className: 'cdata',\n        begin: '<\\\\!\\\\[CDATA\\\\[', end: '\\\\]\\\\]>',\n        relevance: 10\n      },\n      {\n        className: 'tag',\n        /*\n        The lookahead pattern (?=...) ensures that 'begin' only matches\n        '<style' as a single word, followed by a whitespace or an\n        ending braket. The '$' is needed for the lexeme to be recognized\n        by hljs.subMode() that tests lexemes outside the stream.\n        */\n        begin: '<style(?=\\\\s|>|$)', end: '>',\n        keywords: {title: 'style'},\n        contains: [TAG_INTERNALS],\n        starts: {\n          end: '</style>', returnEnd: true,\n          subLanguage: 'css'\n        }\n      },\n      {\n        className: 'tag',\n        // See the comment in the <style tag about the lookahead pattern\n        begin: '<script(?=\\\\s|>|$)', end: '>',\n        keywords: {title: 'script'},\n        contains: [TAG_INTERNALS],\n        starts: {\n          end: '\\<\\/script\\>', returnEnd: true,\n          subLanguage: ['actionscript', 'javascript', 'handlebars']\n        }\n      },\n      PHP,\n      {\n        className: 'pi',\n        begin: /<\\?\\w+/, end: /\\?>/,\n        relevance: 10\n      },\n      {\n        className: 'tag',\n        begin: '</?', end: '/?>',\n        contains: [\n          {\n            className: 'title', begin: /[^ \\/><\\n\\t]+/, relevance: 0\n          },\n          TAG_INTERNALS\n        ]\n      }\n    ]\n  };\n});\n\n  return hljs;\n}));\n\n/**\n * lunr - http://lunrjs.com - A bit like Solr, but much smaller and not as bright - 0.5.12\n * Copyright (C) 2015 Oliver Nightingale\n * MIT Licensed\n * @license\n */\n!function(){var t=function(e){var n=new t.Index;return n.pipeline.add(t.trimmer,t.stopWordFilter,t.stemmer),e&&e.call(n,n),n};t.version=\"0.5.12\",t.utils={},t.utils.warn=function(t){return function(e){t.console&&console.warn&&console.warn(e)}}(this),t.EventEmitter=function(){this.events={}},t.EventEmitter.prototype.addListener=function(){var t=Array.prototype.slice.call(arguments),e=t.pop(),n=t;if(\"function\"!=typeof e)throw new TypeError(\"last argument must be a function\");n.forEach(function(t){this.hasHandler(t)||(this.events[t]=[]),this.events[t].push(e)},this)},t.EventEmitter.prototype.removeListener=function(t,e){if(this.hasHandler(t)){var n=this.events[t].indexOf(e);this.events[t].splice(n,1),this.events[t].length||delete this.events[t]}},t.EventEmitter.prototype.emit=function(t){if(this.hasHandler(t)){var e=Array.prototype.slice.call(arguments,1);this.events[t].forEach(function(t){t.apply(void 0,e)})}},t.EventEmitter.prototype.hasHandler=function(t){return t in this.events},t.tokenizer=function(t){return arguments.length&&null!=t&&void 0!=t?Array.isArray(t)?t.map(function(t){return t.toLowerCase()}):t.toString().trim().toLowerCase().split(/[\\s\\-]+/):[]},t.Pipeline=function(){this._stack=[]},t.Pipeline.registeredFunctions={},t.Pipeline.registerFunction=function(e,n){n in this.registeredFunctions&&t.utils.warn(\"Overwriting existing registered function: \"+n),e.label=n,t.Pipeline.registeredFunctions[e.label]=e},t.Pipeline.warnIfFunctionNotRegistered=function(e){var n=e.label&&e.label in this.registeredFunctions;n||t.utils.warn(\"Function is not registered with pipeline. This may cause problems when serialising the index.\\n\",e)},t.Pipeline.load=function(e){var n=new t.Pipeline;return e.forEach(function(e){var i=t.Pipeline.registeredFunctions[e];if(!i)throw new Error(\"Cannot load un-registered function: \"+e);n.add(i)}),n},t.Pipeline.prototype.add=function(){var e=Array.prototype.slice.call(arguments);e.forEach(function(e){t.Pipeline.warnIfFunctionNotRegistered(e),this._stack.push(e)},this)},t.Pipeline.prototype.after=function(e,n){t.Pipeline.warnIfFunctionNotRegistered(n);var i=this._stack.indexOf(e);if(-1==i)throw new Error(\"Cannot find existingFn\");i+=1,this._stack.splice(i,0,n)},t.Pipeline.prototype.before=function(e,n){t.Pipeline.warnIfFunctionNotRegistered(n);var i=this._stack.indexOf(e);if(-1==i)throw new Error(\"Cannot find existingFn\");this._stack.splice(i,0,n)},t.Pipeline.prototype.remove=function(t){var e=this._stack.indexOf(t);-1!=e&&this._stack.splice(e,1)},t.Pipeline.prototype.run=function(t){for(var e=[],n=t.length,i=this._stack.length,o=0;n>o;o++){for(var r=t[o],s=0;i>s&&(r=this._stack[s](r,o,t),void 0!==r);s++);void 0!==r&&e.push(r)}return e},t.Pipeline.prototype.reset=function(){this._stack=[]},t.Pipeline.prototype.toJSON=function(){return this._stack.map(function(e){return t.Pipeline.warnIfFunctionNotRegistered(e),e.label})},t.Vector=function(){this._magnitude=null,this.list=void 0,this.length=0},t.Vector.Node=function(t,e,n){this.idx=t,this.val=e,this.next=n},t.Vector.prototype.insert=function(e,n){this._magnitude=void 0;var i=this.list;if(!i)return this.list=new t.Vector.Node(e,n,i),this.length++;if(e<i.idx)return this.list=new t.Vector.Node(e,n,i),this.length++;for(var o=i,r=i.next;void 0!=r;){if(e<r.idx)return o.next=new t.Vector.Node(e,n,r),this.length++;o=r,r=r.next}return o.next=new t.Vector.Node(e,n,r),this.length++},t.Vector.prototype.magnitude=function(){if(this._magnitude)return this._magnitude;for(var t,e=this.list,n=0;e;)t=e.val,n+=t*t,e=e.next;return this._magnitude=Math.sqrt(n)},t.Vector.prototype.dot=function(t){for(var e=this.list,n=t.list,i=0;e&&n;)e.idx<n.idx?e=e.next:e.idx>n.idx?n=n.next:(i+=e.val*n.val,e=e.next,n=n.next);return i},t.Vector.prototype.similarity=function(t){return this.dot(t)/(this.magnitude()*t.magnitude())},t.SortedSet=function(){this.length=0,this.elements=[]},t.SortedSet.load=function(t){var e=new this;return e.elements=t,e.length=t.length,e},t.SortedSet.prototype.add=function(){var t,e;for(t=0;t<arguments.length;t++)e=arguments[t],~this.indexOf(e)||this.elements.splice(this.locationFor(e),0,e);this.length=this.elements.length},t.SortedSet.prototype.toArray=function(){return this.elements.slice()},t.SortedSet.prototype.map=function(t,e){return this.elements.map(t,e)},t.SortedSet.prototype.forEach=function(t,e){return this.elements.forEach(t,e)},t.SortedSet.prototype.indexOf=function(t){for(var e=0,n=this.elements.length,i=n-e,o=e+Math.floor(i/2),r=this.elements[o];i>1;){if(r===t)return o;t>r&&(e=o),r>t&&(n=o),i=n-e,o=e+Math.floor(i/2),r=this.elements[o]}return r===t?o:-1},t.SortedSet.prototype.locationFor=function(t){for(var e=0,n=this.elements.length,i=n-e,o=e+Math.floor(i/2),r=this.elements[o];i>1;)t>r&&(e=o),r>t&&(n=o),i=n-e,o=e+Math.floor(i/2),r=this.elements[o];return r>t?o:t>r?o+1:void 0},t.SortedSet.prototype.intersect=function(e){for(var n=new t.SortedSet,i=0,o=0,r=this.length,s=e.length,a=this.elements,h=e.elements;;){if(i>r-1||o>s-1)break;a[i]!==h[o]?a[i]<h[o]?i++:a[i]>h[o]&&o++:(n.add(a[i]),i++,o++)}return n},t.SortedSet.prototype.clone=function(){var e=new t.SortedSet;return e.elements=this.toArray(),e.length=e.elements.length,e},t.SortedSet.prototype.union=function(t){var e,n,i;return this.length>=t.length?(e=this,n=t):(e=t,n=this),i=e.clone(),i.add.apply(i,n.toArray()),i},t.SortedSet.prototype.toJSON=function(){return this.toArray()},t.Index=function(){this._fields=[],this._ref=\"id\",this.pipeline=new t.Pipeline,this.documentStore=new t.Store,this.tokenStore=new t.TokenStore,this.corpusTokens=new t.SortedSet,this.eventEmitter=new t.EventEmitter,this._idfCache={},this.on(\"add\",\"remove\",\"update\",function(){this._idfCache={}}.bind(this))},t.Index.prototype.on=function(){var t=Array.prototype.slice.call(arguments);return this.eventEmitter.addListener.apply(this.eventEmitter,t)},t.Index.prototype.off=function(t,e){return this.eventEmitter.removeListener(t,e)},t.Index.load=function(e){e.version!==t.version&&t.utils.warn(\"version mismatch: current \"+t.version+\" importing \"+e.version);var n=new this;return n._fields=e.fields,n._ref=e.ref,n.documentStore=t.Store.load(e.documentStore),n.tokenStore=t.TokenStore.load(e.tokenStore),n.corpusTokens=t.SortedSet.load(e.corpusTokens),n.pipeline=t.Pipeline.load(e.pipeline),n},t.Index.prototype.field=function(t,e){var e=e||{},n={name:t,boost:e.boost||1};return this._fields.push(n),this},t.Index.prototype.ref=function(t){return this._ref=t,this},t.Index.prototype.add=function(e,n){var i={},o=new t.SortedSet,r=e[this._ref],n=void 0===n?!0:n;this._fields.forEach(function(n){var r=this.pipeline.run(t.tokenizer(e[n.name]));i[n.name]=r,t.SortedSet.prototype.add.apply(o,r)},this),this.documentStore.set(r,o),t.SortedSet.prototype.add.apply(this.corpusTokens,o.toArray());for(var s=0;s<o.length;s++){var a=o.elements[s],h=this._fields.reduce(function(t,e){var n=i[e.name].length;if(!n)return t;var o=i[e.name].filter(function(t){return t===a}).length;return t+o/n*e.boost},0);this.tokenStore.add(a,{ref:r,tf:h})}n&&this.eventEmitter.emit(\"add\",e,this)},t.Index.prototype.remove=function(t,e){var n=t[this._ref],e=void 0===e?!0:e;if(this.documentStore.has(n)){var i=this.documentStore.get(n);this.documentStore.remove(n),i.forEach(function(t){this.tokenStore.remove(t,n)},this),e&&this.eventEmitter.emit(\"remove\",t,this)}},t.Index.prototype.update=function(t,e){var e=void 0===e?!0:e;this.remove(t,!1),this.add(t,!1),e&&this.eventEmitter.emit(\"update\",t,this)},t.Index.prototype.idf=function(t){var e=\"@\"+t;if(Object.prototype.hasOwnProperty.call(this._idfCache,e))return this._idfCache[e];var n=this.tokenStore.count(t),i=1;return n>0&&(i=1+Math.log(this.documentStore.length/n)),this._idfCache[e]=i},t.Index.prototype.search=function(e){var n=this.pipeline.run(t.tokenizer(e)),i=new t.Vector,o=[],r=this._fields.reduce(function(t,e){return t+e.boost},0),s=n.some(function(t){return this.tokenStore.has(t)},this);if(!s)return[];n.forEach(function(e,n,s){var a=1/s.length*this._fields.length*r,h=this,l=this.tokenStore.expand(e).reduce(function(n,o){var r=h.corpusTokens.indexOf(o),s=h.idf(o),l=1,u=new t.SortedSet;if(o!==e){var c=Math.max(3,o.length-e.length);l=1/Math.log(c)}return r>-1&&i.insert(r,a*s*l),Object.keys(h.tokenStore.get(o)).forEach(function(t){u.add(t)}),n.union(u)},new t.SortedSet);o.push(l)},this);var a=o.reduce(function(t,e){return t.intersect(e)});return a.map(function(t){return{ref:t,score:i.similarity(this.documentVector(t))}},this).sort(function(t,e){return e.score-t.score})},t.Index.prototype.documentVector=function(e){for(var n=this.documentStore.get(e),i=n.length,o=new t.Vector,r=0;i>r;r++){var s=n.elements[r],a=this.tokenStore.get(s)[e].tf,h=this.idf(s);o.insert(this.corpusTokens.indexOf(s),a*h)}return o},t.Index.prototype.toJSON=function(){return{version:t.version,fields:this._fields,ref:this._ref,documentStore:this.documentStore.toJSON(),tokenStore:this.tokenStore.toJSON(),corpusTokens:this.corpusTokens.toJSON(),pipeline:this.pipeline.toJSON()}},t.Index.prototype.use=function(t){var e=Array.prototype.slice.call(arguments,1);e.unshift(this),t.apply(this,e)},t.Store=function(){this.store={},this.length=0},t.Store.load=function(e){var n=new this;return n.length=e.length,n.store=Object.keys(e.store).reduce(function(n,i){return n[i]=t.SortedSet.load(e.store[i]),n},{}),n},t.Store.prototype.set=function(t,e){this.has(t)||this.length++,this.store[t]=e},t.Store.prototype.get=function(t){return this.store[t]},t.Store.prototype.has=function(t){return t in this.store},t.Store.prototype.remove=function(t){this.has(t)&&(delete this.store[t],this.length--)},t.Store.prototype.toJSON=function(){return{store:this.store,length:this.length}},t.stemmer=function(){var t={ational:\"ate\",tional:\"tion\",enci:\"ence\",anci:\"ance\",izer:\"ize\",bli:\"ble\",alli:\"al\",entli:\"ent\",eli:\"e\",ousli:\"ous\",ization:\"ize\",ation:\"ate\",ator:\"ate\",alism:\"al\",iveness:\"ive\",fulness:\"ful\",ousness:\"ous\",aliti:\"al\",iviti:\"ive\",biliti:\"ble\",logi:\"log\"},e={icate:\"ic\",ative:\"\",alize:\"al\",iciti:\"ic\",ical:\"ic\",ful:\"\",ness:\"\"},n=\"[^aeiou]\",i=\"[aeiouy]\",o=n+\"[^aeiouy]*\",r=i+\"[aeiou]*\",s=\"^(\"+o+\")?\"+r+o,a=\"^(\"+o+\")?\"+r+o+\"(\"+r+\")?$\",h=\"^(\"+o+\")?\"+r+o+r+o,l=\"^(\"+o+\")?\"+i,u=new RegExp(s),c=new RegExp(h),f=new RegExp(a),d=new RegExp(l),p=/^(.+?)(ss|i)es$/,m=/^(.+?)([^s])s$/,v=/^(.+?)eed$/,y=/^(.+?)(ed|ing)$/,g=/.$/,S=/(at|bl|iz)$/,w=new RegExp(\"([^aeiouylsz])\\\\1$\"),x=new RegExp(\"^\"+o+i+\"[^aeiouwxy]$\"),k=/^(.+?[^aeiou])y$/,b=/^(.+?)(ational|tional|enci|anci|izer|bli|alli|entli|eli|ousli|ization|ation|ator|alism|iveness|fulness|ousness|aliti|iviti|biliti|logi)$/,E=/^(.+?)(icate|ative|alize|iciti|ical|ful|ness)$/,_=/^(.+?)(al|ance|ence|er|ic|able|ible|ant|ement|ment|ent|ou|ism|ate|iti|ous|ive|ize)$/,F=/^(.+?)(s|t)(ion)$/,O=/^(.+?)e$/,P=/ll$/,N=new RegExp(\"^\"+o+i+\"[^aeiouwxy]$\"),T=function(n){var i,o,r,s,a,h,l;if(n.length<3)return n;if(r=n.substr(0,1),\"y\"==r&&(n=r.toUpperCase()+n.substr(1)),s=p,a=m,s.test(n)?n=n.replace(s,\"$1$2\"):a.test(n)&&(n=n.replace(a,\"$1$2\")),s=v,a=y,s.test(n)){var T=s.exec(n);s=u,s.test(T[1])&&(s=g,n=n.replace(s,\"\"))}else if(a.test(n)){var T=a.exec(n);i=T[1],a=d,a.test(i)&&(n=i,a=S,h=w,l=x,a.test(n)?n+=\"e\":h.test(n)?(s=g,n=n.replace(s,\"\")):l.test(n)&&(n+=\"e\"))}if(s=k,s.test(n)){var T=s.exec(n);i=T[1],n=i+\"i\"}if(s=b,s.test(n)){var T=s.exec(n);i=T[1],o=T[2],s=u,s.test(i)&&(n=i+t[o])}if(s=E,s.test(n)){var T=s.exec(n);i=T[1],o=T[2],s=u,s.test(i)&&(n=i+e[o])}if(s=_,a=F,s.test(n)){var T=s.exec(n);i=T[1],s=c,s.test(i)&&(n=i)}else if(a.test(n)){var T=a.exec(n);i=T[1]+T[2],a=c,a.test(i)&&(n=i)}if(s=O,s.test(n)){var T=s.exec(n);i=T[1],s=c,a=f,h=N,(s.test(i)||a.test(i)&&!h.test(i))&&(n=i)}return s=P,a=c,s.test(n)&&a.test(n)&&(s=g,n=n.replace(s,\"\")),\"y\"==r&&(n=r.toLowerCase()+n.substr(1)),n};return T}(),t.Pipeline.registerFunction(t.stemmer,\"stemmer\"),t.stopWordFilter=function(e){return e&&t.stopWordFilter.stopWords[e]!==e?e:void 0},t.stopWordFilter.stopWords={a:\"a\",able:\"able\",about:\"about\",across:\"across\",after:\"after\",all:\"all\",almost:\"almost\",also:\"also\",am:\"am\",among:\"among\",an:\"an\",and:\"and\",any:\"any\",are:\"are\",as:\"as\",at:\"at\",be:\"be\",because:\"because\",been:\"been\",but:\"but\",by:\"by\",can:\"can\",cannot:\"cannot\",could:\"could\",dear:\"dear\",did:\"did\",\"do\":\"do\",does:\"does\",either:\"either\",\"else\":\"else\",ever:\"ever\",every:\"every\",\"for\":\"for\",from:\"from\",get:\"get\",got:\"got\",had:\"had\",has:\"has\",have:\"have\",he:\"he\",her:\"her\",hers:\"hers\",him:\"him\",his:\"his\",how:\"how\",however:\"however\",i:\"i\",\"if\":\"if\",\"in\":\"in\",into:\"into\",is:\"is\",it:\"it\",its:\"its\",just:\"just\",least:\"least\",let:\"let\",like:\"like\",likely:\"likely\",may:\"may\",me:\"me\",might:\"might\",most:\"most\",must:\"must\",my:\"my\",neither:\"neither\",no:\"no\",nor:\"nor\",not:\"not\",of:\"of\",off:\"off\",often:\"often\",on:\"on\",only:\"only\",or:\"or\",other:\"other\",our:\"our\",own:\"own\",rather:\"rather\",said:\"said\",say:\"say\",says:\"says\",she:\"she\",should:\"should\",since:\"since\",so:\"so\",some:\"some\",than:\"than\",that:\"that\",the:\"the\",their:\"their\",them:\"them\",then:\"then\",there:\"there\",these:\"these\",they:\"they\",\"this\":\"this\",tis:\"tis\",to:\"to\",too:\"too\",twas:\"twas\",us:\"us\",wants:\"wants\",was:\"was\",we:\"we\",were:\"were\",what:\"what\",when:\"when\",where:\"where\",which:\"which\",\"while\":\"while\",who:\"who\",whom:\"whom\",why:\"why\",will:\"will\",\"with\":\"with\",would:\"would\",yet:\"yet\",you:\"you\",your:\"your\"},t.Pipeline.registerFunction(t.stopWordFilter,\"stopWordFilter\"),t.trimmer=function(t){var e=t.replace(/^\\W+/,\"\").replace(/\\W+$/,\"\");return\"\"===e?void 0:e},t.Pipeline.registerFunction(t.trimmer,\"trimmer\"),t.TokenStore=function(){this.root={docs:{}},this.length=0},t.TokenStore.load=function(t){var e=new this;return e.root=t.root,e.length=t.length,e},t.TokenStore.prototype.add=function(t,e,n){var n=n||this.root,i=t[0],o=t.slice(1);return i in n||(n[i]={docs:{}}),0===o.length?(n[i].docs[e.ref]=e,void(this.length+=1)):this.add(o,e,n[i])},t.TokenStore.prototype.has=function(t){if(!t)return!1;for(var e=this.root,n=0;n<t.length;n++){if(!e[t[n]])return!1;e=e[t[n]]}return!0},t.TokenStore.prototype.getNode=function(t){if(!t)return{};for(var e=this.root,n=0;n<t.length;n++){if(!e[t[n]])return{};e=e[t[n]]}return e},t.TokenStore.prototype.get=function(t,e){return this.getNode(t,e).docs||{}},t.TokenStore.prototype.count=function(t,e){return Object.keys(this.get(t,e)).length},t.TokenStore.prototype.remove=function(t,e){if(t){for(var n=this.root,i=0;i<t.length;i++){if(!(t[i]in n))return;n=n[t[i]]}delete n.docs[e]}},t.TokenStore.prototype.expand=function(t,e){var n=this.getNode(t),i=n.docs||{},e=e||[];return Object.keys(i).length&&e.push(t),Object.keys(n).forEach(function(n){\"docs\"!==n&&e.concat(this.expand(t+n,e))},this),e},t.TokenStore.prototype.toJSON=function(){return{root:this.root,length:this.length}},function(t,e){\"function\"==typeof define&&define.amd?define(e):\"object\"==typeof exports?module.exports=e():t.lunr=e()}(this,function(){return t})}();\n\n// sidebar toggle for mobile views\nvar sidebarToggleEl = document.getElementById('sidebar-toggle');\nif (sidebarToggleEl) {\n  sidebarToggleEl.onclick = function() {\n    document.getElementById('side-nav').classList.toggle('shown');\n    this.classList.toggle('active');\n  };\n}\n\n$(document).ready(function() {\n  $('.dropdown-toggle').dropdown();\n  $('#collapse-toggle').unbind().click(function() {\n    $('#navbar-collapse').collapse('toggle');\n    var ariaVal = $('#collapse-toggle').attr('aria-expanded');\n    ariaVal = ariaVal === 'false' ? 'true' : 'false';\n    $('#collapse-toggle').attr('aria-expanded', ariaVal);\n  });\n});\n\n// highlight.js syntax highlighting\nhljs.initHighlightingOnLoad();\n\n// http://paulirish.com/2011/requestanimationframe-for-smart-animating/\n// http://my.opera.com/emoller/blog/2011/12/20/requestanimationframe-for-smart-er-animating\n// requestAnimationFrame polyfill by Erik Möller. fixes from Paul Irish and Tino Zijdel\n// MIT license\n\n(function() {\n  var lastTime = 0;\n  var vendors = ['ms', 'moz', 'webkit', 'o'];\n  for (var x = 0; x < vendors.length && !window.requestAnimationFrame; ++x) {\n    window.requestAnimationFrame = window[vendors[x] + 'RequestAnimationFrame'];\n    window.cancelAnimationFrame = window[vendors[x] + 'CancelAnimationFrame'] ||\n                                  window[vendors[x] + 'CancelRequestAnimationFrame'];\n  }\n\n  if (!window.requestAnimationFrame) {\n    window.requestAnimationFrame = function(callback, element) {\n      var currTime = new Date().getTime();\n      var timeToCall = Math.max(0, 16 - (currTime - lastTime));\n      var id = window.setTimeout(function() {\n        callback(currTime + timeToCall);\n      }, timeToCall);\n      lastTime = currTime + timeToCall;\n      return id;\n    };\n  }\n  if (!window.cancelAnimationFrame) {\n    window.cancelAnimationFrame = function(id) {\n      clearTimeout(id);\n    };\n  }\n}());\n\n$(document).ready(function() {\n  var $searchInput = $('.search-input');\n  var $searchResultsDiv = $('#search-results');\n  var activeSearchInputPos;\n\n  setTimeout(function() {\n    // check if there if there is recent search data in local storage\n    // try {\n    //   var localData = JSON.parse(localStorage.getItem('v2-search-index'));\n    //   if (localData && (localData.ts + 86400000) > Date.now()) {\n    //     searchReady(localData);\n    //     return;\n    //   }\n    // } catch (e) {}\n\n    $.getJSON('/docs/data/index.json', function(requestData) {\n      searchReady(requestData);\n      setTimeout(function() {\n        try {\n          requestData.ts = Date.now();\n          localStorage.setItem('v2-search-index', JSON.stringify(requestData));\n        } catch (e) {}\n      }, 100);\n    });\n\n  }, 5);\n\n  var debounce = function(fn) {\n    var timeout;\n    return function() {\n      var args = Array.prototype.slice.call(arguments);\n      var ctx = this;\n\n      clearTimeout(timeout);\n      timeout = setTimeout(function() {\n        fn.apply(ctx, args);\n      }, 50);\n    };\n  };\n\n  function searchReady(data) {\n    if (!$searchInput.length) {\n      return;\n    }\n    var idx = lunr.Index.load(data.index);\n\n    $searchInput.closest('.search-bar').css({visibility: 'visible'});\n    $searchInput.on('keyup', debounce(function(e) {\n      // identify which input this is so we can position the input accordingly\n      if (activeSearchInputPos) {\n        $searchResultsDiv.removeClass(activeSearchInputPos);\n      }\n      if (e.target.dataset && e.target.dataset.searchpos) {\n        activeSearchInputPos = e.target.dataset.searchpos;\n        $searchResultsDiv.addClass(activeSearchInputPos);\n      }\n\n      var query = $(this).val();\n\n      if (!query || query.length < 2 || query == 'Search') {\n        hideResults();\n        return;\n      }\n\n      var\n      results = {\n        api: {},\n        native: {},\n        other: {}\n      },\n      queryResult,\n      queryResultId,\n      queryData,\n      queryResults = idx.search(query);\n\n      // categorize results based on URL\n      for (queryResultId in queryResults) {\n        queryResult = queryResults[queryResultId];\n        queryData = data.ref[ queryResult.ref ];\n\n        // if this is the resources search, skip non-resources results\n        if (activeSearchInputPos === 'resources') {\n          if (queryData.p.indexOf('/resources/') != 0) {\n            continue;\n          } else {\n            queryData.t = queryData.t.replace('Ionic 2 Resources | ', '');\n          }\n        }\n\n        if (queryData.p.indexOf('/api/') === 0) {\n          results.api[ queryResult.ref ] = queryData;\n        } else if (queryData.p.indexOf('/native/') === 0) {\n          results.native[ queryResult.ref ] = queryData;\n        } else {\n          results.other[ queryResult.ref ] = queryData;\n        }\n      }\n      showResults(results);\n    }));\n  }\n\n  function showResults(resultsData) {\n    addResults('#results-api', resultsData.api, 42);\n    addResults('#results-native', resultsData.native, 14);\n    addResults('#results-other', resultsData.other, 14);\n\n    clearTimeout(removeOverlay);\n    $searchResultsDiv.addClass('ready');\n\n    if (!$('#search-overlay').length) {\n      $(document.body).append('<div id=\"search-overlay\"></div>');\n    }\n  }\n\n  function addResults(sectionId, data, limit) {\n    var links = '';\n    var section = $searchResultsDiv.find(sectionId + ' ul');\n    var total = 0;\n\n    for (var i in data) {\n      links += '<li><a href=\"/docs/' + data[i].p + '\">';\n      links += data[i].t + '</a></li>';\n      total++;\n      if (total >= limit) {\n        break;\n      }\n    }\n\n    section.html(links);\n    window.requestAnimationFrame(function() {\n      $searchResultsDiv.addClass('active');\n    });\n  }\n\n  var removeOverlay;\n  function hideResults() {\n    $searchResultsDiv.removeClass('active');\n    removeOverlay = setTimeout(function() {\n      $('#search-overlay').remove();\n      $searchResultsDiv.removeClass('ready');\n    }, 200);\n  }\n\n  $(document).keyup(function(e) {\n    if (e.keyCode == 27) {\n      $searchInput.val('');\n      hideResults();\n    }\n  });\n\n  $searchInput.focus(function() {\n    // do nothing\n  });\n\n  $searchInput.blur(function() {\n    setTimeout(function() {\n      hideResults();\n    }, 300);\n  });\n});\n\n/*! jQuery UI - v1.12.1 - 2016-11-14\n* http://jqueryui.com\n* Includes: widget.js, data.js, scroll-parent.js, widgets/draggable.js, widgets/mouse.js\n* Copyright jQuery Foundation and other contributors; Licensed MIT */\n\n(function( factory ) {\n\tif ( typeof define === \"function\" && define.amd ) {\n\n\t\t// AMD. Register as an anonymous module.\n\t\tdefine([ \"jquery\" ], factory );\n\t} else {\n\n\t\t// Browser globals\n\t\tfactory( jQuery );\n\t}\n}(function( $ ) {\n\n$.ui = $.ui || {};\n\nvar version = $.ui.version = \"1.12.1\";\n\n\n/*!\n * jQuery UI Widget 1.12.1\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n */\n\n//>>label: Widget\n//>>group: Core\n//>>description: Provides a factory for creating stateful widgets with a common API.\n//>>docs: http://api.jqueryui.com/jQuery.widget/\n//>>demos: http://jqueryui.com/widget/\n\n\n\nvar widgetUuid = 0;\nvar widgetSlice = Array.prototype.slice;\n\n$.cleanData = ( function( orig ) {\n\treturn function( elems ) {\n\t\tvar events, elem, i;\n\t\tfor ( i = 0; ( elem = elems[ i ] ) != null; i++ ) {\n\t\t\ttry {\n\n\t\t\t\t// Only trigger remove when necessary to save time\n\t\t\t\tevents = $._data( elem, \"events\" );\n\t\t\t\tif ( events && events.remove ) {\n\t\t\t\t\t$( elem ).triggerHandler( \"remove\" );\n\t\t\t\t}\n\n\t\t\t// Http://bugs.jquery.com/ticket/8235\n\t\t\t} catch ( e ) {}\n\t\t}\n\t\torig( elems );\n\t};\n} )( $.cleanData );\n\n$.widget = function( name, base, prototype ) {\n\tvar existingConstructor, constructor, basePrototype;\n\n\t// ProxiedPrototype allows the provided prototype to remain unmodified\n\t// so that it can be used as a mixin for multiple widgets (#8876)\n\tvar proxiedPrototype = {};\n\n\tvar namespace = name.split( \".\" )[ 0 ];\n\tname = name.split( \".\" )[ 1 ];\n\tvar fullName = namespace + \"-\" + name;\n\n\tif ( !prototype ) {\n\t\tprototype = base;\n\t\tbase = $.Widget;\n\t}\n\n\tif ( $.isArray( prototype ) ) {\n\t\tprototype = $.extend.apply( null, [ {} ].concat( prototype ) );\n\t}\n\n\t// Create selector for plugin\n\t$.expr[ \":\" ][ fullName.toLowerCase() ] = function( elem ) {\n\t\treturn !!$.data( elem, fullName );\n\t};\n\n\t$[ namespace ] = $[ namespace ] || {};\n\texistingConstructor = $[ namespace ][ name ];\n\tconstructor = $[ namespace ][ name ] = function( options, element ) {\n\n\t\t// Allow instantiation without \"new\" keyword\n\t\tif ( !this._createWidget ) {\n\t\t\treturn new constructor( options, element );\n\t\t}\n\n\t\t// Allow instantiation without initializing for simple inheritance\n\t\t// must use \"new\" keyword (the code above always passes args)\n\t\tif ( arguments.length ) {\n\t\t\tthis._createWidget( options, element );\n\t\t}\n\t};\n\n\t// Extend with the existing constructor to carry over any static properties\n\t$.extend( constructor, existingConstructor, {\n\t\tversion: prototype.version,\n\n\t\t// Copy the object used to create the prototype in case we need to\n\t\t// redefine the widget later\n\t\t_proto: $.extend( {}, prototype ),\n\n\t\t// Track widgets that inherit from this widget in case this widget is\n\t\t// redefined after a widget inherits from it\n\t\t_childConstructors: []\n\t} );\n\n\tbasePrototype = new base();\n\n\t// We need to make the options hash a property directly on the new instance\n\t// otherwise we'll modify the options hash on the prototype that we're\n\t// inheriting from\n\tbasePrototype.options = $.widget.extend( {}, basePrototype.options );\n\t$.each( prototype, function( prop, value ) {\n\t\tif ( !$.isFunction( value ) ) {\n\t\t\tproxiedPrototype[ prop ] = value;\n\t\t\treturn;\n\t\t}\n\t\tproxiedPrototype[ prop ] = ( function() {\n\t\t\tfunction _super() {\n\t\t\t\treturn base.prototype[ prop ].apply( this, arguments );\n\t\t\t}\n\n\t\t\tfunction _superApply( args ) {\n\t\t\t\treturn base.prototype[ prop ].apply( this, args );\n\t\t\t}\n\n\t\t\treturn function() {\n\t\t\t\tvar __super = this._super;\n\t\t\t\tvar __superApply = this._superApply;\n\t\t\t\tvar returnValue;\n\n\t\t\t\tthis._super = _super;\n\t\t\t\tthis._superApply = _superApply;\n\n\t\t\t\treturnValue = value.apply( this, arguments );\n\n\t\t\t\tthis._super = __super;\n\t\t\t\tthis._superApply = __superApply;\n\n\t\t\t\treturn returnValue;\n\t\t\t};\n\t\t} )();\n\t} );\n\tconstructor.prototype = $.widget.extend( basePrototype, {\n\n\t\t// TODO: remove support for widgetEventPrefix\n\t\t// always use the name + a colon as the prefix, e.g., draggable:start\n\t\t// don't prefix for widgets that aren't DOM-based\n\t\twidgetEventPrefix: existingConstructor ? ( basePrototype.widgetEventPrefix || name ) : name\n\t}, proxiedPrototype, {\n\t\tconstructor: constructor,\n\t\tnamespace: namespace,\n\t\twidgetName: name,\n\t\twidgetFullName: fullName\n\t} );\n\n\t// If this widget is being redefined then we need to find all widgets that\n\t// are inheriting from it and redefine all of them so that they inherit from\n\t// the new version of this widget. We're essentially trying to replace one\n\t// level in the prototype chain.\n\tif ( existingConstructor ) {\n\t\t$.each( existingConstructor._childConstructors, function( i, child ) {\n\t\t\tvar childPrototype = child.prototype;\n\n\t\t\t// Redefine the child widget using the same prototype that was\n\t\t\t// originally used, but inherit from the new version of the base\n\t\t\t$.widget( childPrototype.namespace + \".\" + childPrototype.widgetName, constructor,\n\t\t\t\tchild._proto );\n\t\t} );\n\n\t\t// Remove the list of existing child constructors from the old constructor\n\t\t// so the old child constructors can be garbage collected\n\t\tdelete existingConstructor._childConstructors;\n\t} else {\n\t\tbase._childConstructors.push( constructor );\n\t}\n\n\t$.widget.bridge( name, constructor );\n\n\treturn constructor;\n};\n\n$.widget.extend = function( target ) {\n\tvar input = widgetSlice.call( arguments, 1 );\n\tvar inputIndex = 0;\n\tvar inputLength = input.length;\n\tvar key;\n\tvar value;\n\n\tfor ( ; inputIndex < inputLength; inputIndex++ ) {\n\t\tfor ( key in input[ inputIndex ] ) {\n\t\t\tvalue = input[ inputIndex ][ key ];\n\t\t\tif ( input[ inputIndex ].hasOwnProperty( key ) && value !== undefined ) {\n\n\t\t\t\t// Clone objects\n\t\t\t\tif ( $.isPlainObject( value ) ) {\n\t\t\t\t\ttarget[ key ] = $.isPlainObject( target[ key ] ) ?\n\t\t\t\t\t\t$.widget.extend( {}, target[ key ], value ) :\n\n\t\t\t\t\t\t// Don't extend strings, arrays, etc. with objects\n\t\t\t\t\t\t$.widget.extend( {}, value );\n\n\t\t\t\t// Copy everything else by reference\n\t\t\t\t} else {\n\t\t\t\t\ttarget[ key ] = value;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\treturn target;\n};\n\n$.widget.bridge = function( name, object ) {\n\tvar fullName = object.prototype.widgetFullName || name;\n\t$.fn[ name ] = function( options ) {\n\t\tvar isMethodCall = typeof options === \"string\";\n\t\tvar args = widgetSlice.call( arguments, 1 );\n\t\tvar returnValue = this;\n\n\t\tif ( isMethodCall ) {\n\n\t\t\t// If this is an empty collection, we need to have the instance method\n\t\t\t// return undefined instead of the jQuery instance\n\t\t\tif ( !this.length && options === \"instance\" ) {\n\t\t\t\treturnValue = undefined;\n\t\t\t} else {\n\t\t\t\tthis.each( function() {\n\t\t\t\t\tvar methodValue;\n\t\t\t\t\tvar instance = $.data( this, fullName );\n\n\t\t\t\t\tif ( options === \"instance\" ) {\n\t\t\t\t\t\treturnValue = instance;\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( !instance ) {\n\t\t\t\t\t\treturn $.error( \"cannot call methods on \" + name +\n\t\t\t\t\t\t\t\" prior to initialization; \" +\n\t\t\t\t\t\t\t\"attempted to call method '\" + options + \"'\" );\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( !$.isFunction( instance[ options ] ) || options.charAt( 0 ) === \"_\" ) {\n\t\t\t\t\t\treturn $.error( \"no such method '\" + options + \"' for \" + name +\n\t\t\t\t\t\t\t\" widget instance\" );\n\t\t\t\t\t}\n\n\t\t\t\t\tmethodValue = instance[ options ].apply( instance, args );\n\n\t\t\t\t\tif ( methodValue !== instance && methodValue !== undefined ) {\n\t\t\t\t\t\treturnValue = methodValue && methodValue.jquery ?\n\t\t\t\t\t\t\treturnValue.pushStack( methodValue.get() ) :\n\t\t\t\t\t\t\tmethodValue;\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t}\n\t\t} else {\n\n\t\t\t// Allow multiple hashes to be passed on init\n\t\t\tif ( args.length ) {\n\t\t\t\toptions = $.widget.extend.apply( null, [ options ].concat( args ) );\n\t\t\t}\n\n\t\t\tthis.each( function() {\n\t\t\t\tvar instance = $.data( this, fullName );\n\t\t\t\tif ( instance ) {\n\t\t\t\t\tinstance.option( options || {} );\n\t\t\t\t\tif ( instance._init ) {\n\t\t\t\t\t\tinstance._init();\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\t$.data( this, fullName, new object( options, this ) );\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\n\t\treturn returnValue;\n\t};\n};\n\n$.Widget = function( /* options, element */ ) {};\n$.Widget._childConstructors = [];\n\n$.Widget.prototype = {\n\twidgetName: \"widget\",\n\twidgetEventPrefix: \"\",\n\tdefaultElement: \"<div>\",\n\n\toptions: {\n\t\tclasses: {},\n\t\tdisabled: false,\n\n\t\t// Callbacks\n\t\tcreate: null\n\t},\n\n\t_createWidget: function( options, element ) {\n\t\telement = $( element || this.defaultElement || this )[ 0 ];\n\t\tthis.element = $( element );\n\t\tthis.uuid = widgetUuid++;\n\t\tthis.eventNamespace = \".\" + this.widgetName + this.uuid;\n\n\t\tthis.bindings = $();\n\t\tthis.hoverable = $();\n\t\tthis.focusable = $();\n\t\tthis.classesElementLookup = {};\n\n\t\tif ( element !== this ) {\n\t\t\t$.data( element, this.widgetFullName, this );\n\t\t\tthis._on( true, this.element, {\n\t\t\t\tremove: function( event ) {\n\t\t\t\t\tif ( event.target === element ) {\n\t\t\t\t\t\tthis.destroy();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} );\n\t\t\tthis.document = $( element.style ?\n\n\t\t\t\t// Element within the document\n\t\t\t\telement.ownerDocument :\n\n\t\t\t\t// Element is window or document\n\t\t\t\telement.document || element );\n\t\t\tthis.window = $( this.document[ 0 ].defaultView || this.document[ 0 ].parentWindow );\n\t\t}\n\n\t\tthis.options = $.widget.extend( {},\n\t\t\tthis.options,\n\t\t\tthis._getCreateOptions(),\n\t\t\toptions );\n\n\t\tthis._create();\n\n\t\tif ( this.options.disabled ) {\n\t\t\tthis._setOptionDisabled( this.options.disabled );\n\t\t}\n\n\t\tthis._trigger( \"create\", null, this._getCreateEventData() );\n\t\tthis._init();\n\t},\n\n\t_getCreateOptions: function() {\n\t\treturn {};\n\t},\n\n\t_getCreateEventData: $.noop,\n\n\t_create: $.noop,\n\n\t_init: $.noop,\n\n\tdestroy: function() {\n\t\tvar that = this;\n\n\t\tthis._destroy();\n\t\t$.each( this.classesElementLookup, function( key, value ) {\n\t\t\tthat._removeClass( value, key );\n\t\t} );\n\n\t\t// We can probably remove the unbind calls in 2.0\n\t\t// all event bindings should go through this._on()\n\t\tthis.element\n\t\t\t.off( this.eventNamespace )\n\t\t\t.removeData( this.widgetFullName );\n\t\tthis.widget()\n\t\t\t.off( this.eventNamespace )\n\t\t\t.removeAttr( \"aria-disabled\" );\n\n\t\t// Clean up events and states\n\t\tthis.bindings.off( this.eventNamespace );\n\t},\n\n\t_destroy: $.noop,\n\n\twidget: function() {\n\t\treturn this.element;\n\t},\n\n\toption: function( key, value ) {\n\t\tvar options = key;\n\t\tvar parts;\n\t\tvar curOption;\n\t\tvar i;\n\n\t\tif ( arguments.length === 0 ) {\n\n\t\t\t// Don't return a reference to the internal hash\n\t\t\treturn $.widget.extend( {}, this.options );\n\t\t}\n\n\t\tif ( typeof key === \"string\" ) {\n\n\t\t\t// Handle nested keys, e.g., \"foo.bar\" => { foo: { bar: ___ } }\n\t\t\toptions = {};\n\t\t\tparts = key.split( \".\" );\n\t\t\tkey = parts.shift();\n\t\t\tif ( parts.length ) {\n\t\t\t\tcurOption = options[ key ] = $.widget.extend( {}, this.options[ key ] );\n\t\t\t\tfor ( i = 0; i < parts.length - 1; i++ ) {\n\t\t\t\t\tcurOption[ parts[ i ] ] = curOption[ parts[ i ] ] || {};\n\t\t\t\t\tcurOption = curOption[ parts[ i ] ];\n\t\t\t\t}\n\t\t\t\tkey = parts.pop();\n\t\t\t\tif ( arguments.length === 1 ) {\n\t\t\t\t\treturn curOption[ key ] === undefined ? null : curOption[ key ];\n\t\t\t\t}\n\t\t\t\tcurOption[ key ] = value;\n\t\t\t} else {\n\t\t\t\tif ( arguments.length === 1 ) {\n\t\t\t\t\treturn this.options[ key ] === undefined ? null : this.options[ key ];\n\t\t\t\t}\n\t\t\t\toptions[ key ] = value;\n\t\t\t}\n\t\t}\n\n\t\tthis._setOptions( options );\n\n\t\treturn this;\n\t},\n\n\t_setOptions: function( options ) {\n\t\tvar key;\n\n\t\tfor ( key in options ) {\n\t\t\tthis._setOption( key, options[ key ] );\n\t\t}\n\n\t\treturn this;\n\t},\n\n\t_setOption: function( key, value ) {\n\t\tif ( key === \"classes\" ) {\n\t\t\tthis._setOptionClasses( value );\n\t\t}\n\n\t\tthis.options[ key ] = value;\n\n\t\tif ( key === \"disabled\" ) {\n\t\t\tthis._setOptionDisabled( value );\n\t\t}\n\n\t\treturn this;\n\t},\n\n\t_setOptionClasses: function( value ) {\n\t\tvar classKey, elements, currentElements;\n\n\t\tfor ( classKey in value ) {\n\t\t\tcurrentElements = this.classesElementLookup[ classKey ];\n\t\t\tif ( value[ classKey ] === this.options.classes[ classKey ] ||\n\t\t\t\t\t!currentElements ||\n\t\t\t\t\t!currentElements.length ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// We are doing this to create a new jQuery object because the _removeClass() call\n\t\t\t// on the next line is going to destroy the reference to the current elements being\n\t\t\t// tracked. We need to save a copy of this collection so that we can add the new classes\n\t\t\t// below.\n\t\t\telements = $( currentElements.get() );\n\t\t\tthis._removeClass( currentElements, classKey );\n\n\t\t\t// We don't use _addClass() here, because that uses this.options.classes\n\t\t\t// for generating the string of classes. We want to use the value passed in from\n\t\t\t// _setOption(), this is the new value of the classes option which was passed to\n\t\t\t// _setOption(). We pass this value directly to _classes().\n\t\t\telements.addClass( this._classes( {\n\t\t\t\telement: elements,\n\t\t\t\tkeys: classKey,\n\t\t\t\tclasses: value,\n\t\t\t\tadd: true\n\t\t\t} ) );\n\t\t}\n\t},\n\n\t_setOptionDisabled: function( value ) {\n\t\tthis._toggleClass( this.widget(), this.widgetFullName + \"-disabled\", null, !!value );\n\n\t\t// If the widget is becoming disabled, then nothing is interactive\n\t\tif ( value ) {\n\t\t\tthis._removeClass( this.hoverable, null, \"ui-state-hover\" );\n\t\t\tthis._removeClass( this.focusable, null, \"ui-state-focus\" );\n\t\t}\n\t},\n\n\tenable: function() {\n\t\treturn this._setOptions( { disabled: false } );\n\t},\n\n\tdisable: function() {\n\t\treturn this._setOptions( { disabled: true } );\n\t},\n\n\t_classes: function( options ) {\n\t\tvar full = [];\n\t\tvar that = this;\n\n\t\toptions = $.extend( {\n\t\t\telement: this.element,\n\t\t\tclasses: this.options.classes || {}\n\t\t}, options );\n\n\t\tfunction processClassString( classes, checkOption ) {\n\t\t\tvar current, i;\n\t\t\tfor ( i = 0; i < classes.length; i++ ) {\n\t\t\t\tcurrent = that.classesElementLookup[ classes[ i ] ] || $();\n\t\t\t\tif ( options.add ) {\n\t\t\t\t\tcurrent = $( $.unique( current.get().concat( options.element.get() ) ) );\n\t\t\t\t} else {\n\t\t\t\t\tcurrent = $( current.not( options.element ).get() );\n\t\t\t\t}\n\t\t\t\tthat.classesElementLookup[ classes[ i ] ] = current;\n\t\t\t\tfull.push( classes[ i ] );\n\t\t\t\tif ( checkOption && options.classes[ classes[ i ] ] ) {\n\t\t\t\t\tfull.push( options.classes[ classes[ i ] ] );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tthis._on( options.element, {\n\t\t\t\"remove\": \"_untrackClassesElement\"\n\t\t} );\n\n\t\tif ( options.keys ) {\n\t\t\tprocessClassString( options.keys.match( /\\S+/g ) || [], true );\n\t\t}\n\t\tif ( options.extra ) {\n\t\t\tprocessClassString( options.extra.match( /\\S+/g ) || [] );\n\t\t}\n\n\t\treturn full.join( \" \" );\n\t},\n\n\t_untrackClassesElement: function( event ) {\n\t\tvar that = this;\n\t\t$.each( that.classesElementLookup, function( key, value ) {\n\t\t\tif ( $.inArray( event.target, value ) !== -1 ) {\n\t\t\t\tthat.classesElementLookup[ key ] = $( value.not( event.target ).get() );\n\t\t\t}\n\t\t} );\n\t},\n\n\t_removeClass: function( element, keys, extra ) {\n\t\treturn this._toggleClass( element, keys, extra, false );\n\t},\n\n\t_addClass: function( element, keys, extra ) {\n\t\treturn this._toggleClass( element, keys, extra, true );\n\t},\n\n\t_toggleClass: function( element, keys, extra, add ) {\n\t\tadd = ( typeof add === \"boolean\" ) ? add : extra;\n\t\tvar shift = ( typeof element === \"string\" || element === null ),\n\t\t\toptions = {\n\t\t\t\textra: shift ? keys : extra,\n\t\t\t\tkeys: shift ? element : keys,\n\t\t\t\telement: shift ? this.element : element,\n\t\t\t\tadd: add\n\t\t\t};\n\t\toptions.element.toggleClass( this._classes( options ), add );\n\t\treturn this;\n\t},\n\n\t_on: function( suppressDisabledCheck, element, handlers ) {\n\t\tvar delegateElement;\n\t\tvar instance = this;\n\n\t\t// No suppressDisabledCheck flag, shuffle arguments\n\t\tif ( typeof suppressDisabledCheck !== \"boolean\" ) {\n\t\t\thandlers = element;\n\t\t\telement = suppressDisabledCheck;\n\t\t\tsuppressDisabledCheck = false;\n\t\t}\n\n\t\t// No element argument, shuffle and use this.element\n\t\tif ( !handlers ) {\n\t\t\thandlers = element;\n\t\t\telement = this.element;\n\t\t\tdelegateElement = this.widget();\n\t\t} else {\n\t\t\telement = delegateElement = $( element );\n\t\t\tthis.bindings = this.bindings.add( element );\n\t\t}\n\n\t\t$.each( handlers, function( event, handler ) {\n\t\t\tfunction handlerProxy() {\n\n\t\t\t\t// Allow widgets to customize the disabled handling\n\t\t\t\t// - disabled as an array instead of boolean\n\t\t\t\t// - disabled class as method for disabling individual parts\n\t\t\t\tif ( !suppressDisabledCheck &&\n\t\t\t\t\t\t( instance.options.disabled === true ||\n\t\t\t\t\t\t$( this ).hasClass( \"ui-state-disabled\" ) ) ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\treturn ( typeof handler === \"string\" ? instance[ handler ] : handler )\n\t\t\t\t\t.apply( instance, arguments );\n\t\t\t}\n\n\t\t\t// Copy the guid so direct unbinding works\n\t\t\tif ( typeof handler !== \"string\" ) {\n\t\t\t\thandlerProxy.guid = handler.guid =\n\t\t\t\t\thandler.guid || handlerProxy.guid || $.guid++;\n\t\t\t}\n\n\t\t\tvar match = event.match( /^([\\w:-]*)\\s*(.*)$/ );\n\t\t\tvar eventName = match[ 1 ] + instance.eventNamespace;\n\t\t\tvar selector = match[ 2 ];\n\n\t\t\tif ( selector ) {\n\t\t\t\tdelegateElement.on( eventName, selector, handlerProxy );\n\t\t\t} else {\n\t\t\t\telement.on( eventName, handlerProxy );\n\t\t\t}\n\t\t} );\n\t},\n\n\t_off: function( element, eventName ) {\n\t\teventName = ( eventName || \"\" ).split( \" \" ).join( this.eventNamespace + \" \" ) +\n\t\t\tthis.eventNamespace;\n\t\telement.off( eventName ).off( eventName );\n\n\t\t// Clear the stack to avoid memory leaks (#10056)\n\t\tthis.bindings = $( this.bindings.not( element ).get() );\n\t\tthis.focusable = $( this.focusable.not( element ).get() );\n\t\tthis.hoverable = $( this.hoverable.not( element ).get() );\n\t},\n\n\t_delay: function( handler, delay ) {\n\t\tfunction handlerProxy() {\n\t\t\treturn ( typeof handler === \"string\" ? instance[ handler ] : handler )\n\t\t\t\t.apply( instance, arguments );\n\t\t}\n\t\tvar instance = this;\n\t\treturn setTimeout( handlerProxy, delay || 0 );\n\t},\n\n\t_hoverable: function( element ) {\n\t\tthis.hoverable = this.hoverable.add( element );\n\t\tthis._on( element, {\n\t\t\tmouseenter: function( event ) {\n\t\t\t\tthis._addClass( $( event.currentTarget ), null, \"ui-state-hover\" );\n\t\t\t},\n\t\t\tmouseleave: function( event ) {\n\t\t\t\tthis._removeClass( $( event.currentTarget ), null, \"ui-state-hover\" );\n\t\t\t}\n\t\t} );\n\t},\n\n\t_focusable: function( element ) {\n\t\tthis.focusable = this.focusable.add( element );\n\t\tthis._on( element, {\n\t\t\tfocusin: function( event ) {\n\t\t\t\tthis._addClass( $( event.currentTarget ), null, \"ui-state-focus\" );\n\t\t\t},\n\t\t\tfocusout: function( event ) {\n\t\t\t\tthis._removeClass( $( event.currentTarget ), null, \"ui-state-focus\" );\n\t\t\t}\n\t\t} );\n\t},\n\n\t_trigger: function( type, event, data ) {\n\t\tvar prop, orig;\n\t\tvar callback = this.options[ type ];\n\n\t\tdata = data || {};\n\t\tevent = $.Event( event );\n\t\tevent.type = ( type === this.widgetEventPrefix ?\n\t\t\ttype :\n\t\t\tthis.widgetEventPrefix + type ).toLowerCase();\n\n\t\t// The original event may come from any element\n\t\t// so we need to reset the target on the new event\n\t\tevent.target = this.element[ 0 ];\n\n\t\t// Copy original event properties over to the new event\n\t\torig = event.originalEvent;\n\t\tif ( orig ) {\n\t\t\tfor ( prop in orig ) {\n\t\t\t\tif ( !( prop in event ) ) {\n\t\t\t\t\tevent[ prop ] = orig[ prop ];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tthis.element.trigger( event, data );\n\t\treturn !( $.isFunction( callback ) &&\n\t\t\tcallback.apply( this.element[ 0 ], [ event ].concat( data ) ) === false ||\n\t\t\tevent.isDefaultPrevented() );\n\t}\n};\n\n$.each( { show: \"fadeIn\", hide: \"fadeOut\" }, function( method, defaultEffect ) {\n\t$.Widget.prototype[ \"_\" + method ] = function( element, options, callback ) {\n\t\tif ( typeof options === \"string\" ) {\n\t\t\toptions = { effect: options };\n\t\t}\n\n\t\tvar hasOptions;\n\t\tvar effectName = !options ?\n\t\t\tmethod :\n\t\t\toptions === true || typeof options === \"number\" ?\n\t\t\t\tdefaultEffect :\n\t\t\t\toptions.effect || defaultEffect;\n\n\t\toptions = options || {};\n\t\tif ( typeof options === \"number\" ) {\n\t\t\toptions = { duration: options };\n\t\t}\n\n\t\thasOptions = !$.isEmptyObject( options );\n\t\toptions.complete = callback;\n\n\t\tif ( options.delay ) {\n\t\t\telement.delay( options.delay );\n\t\t}\n\n\t\tif ( hasOptions && $.effects && $.effects.effect[ effectName ] ) {\n\t\t\telement[ method ]( options );\n\t\t} else if ( effectName !== method && element[ effectName ] ) {\n\t\t\telement[ effectName ]( options.duration, options.easing, callback );\n\t\t} else {\n\t\t\telement.queue( function( next ) {\n\t\t\t\t$( this )[ method ]();\n\t\t\t\tif ( callback ) {\n\t\t\t\t\tcallback.call( element[ 0 ] );\n\t\t\t\t}\n\t\t\t\tnext();\n\t\t\t} );\n\t\t}\n\t};\n} );\n\nvar widget = $.widget;\n\n\n/*!\n * jQuery UI :data 1.12.1\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n */\n\n//>>label: :data Selector\n//>>group: Core\n//>>description: Selects elements which have data stored under the specified key.\n//>>docs: http://api.jqueryui.com/data-selector/\n\n\nvar data = $.extend( $.expr[ \":\" ], {\n\tdata: $.expr.createPseudo ?\n\t\t$.expr.createPseudo( function( dataName ) {\n\t\t\treturn function( elem ) {\n\t\t\t\treturn !!$.data( elem, dataName );\n\t\t\t};\n\t\t} ) :\n\n\t\t// Support: jQuery <1.8\n\t\tfunction( elem, i, match ) {\n\t\t\treturn !!$.data( elem, match[ 3 ] );\n\t\t}\n} );\n\n/*!\n * jQuery UI Scroll Parent 1.12.1\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n */\n\n//>>label: scrollParent\n//>>group: Core\n//>>description: Get the closest ancestor element that is scrollable.\n//>>docs: http://api.jqueryui.com/scrollParent/\n\n\n\nvar scrollParent = $.fn.scrollParent = function( includeHidden ) {\n\tvar position = this.css( \"position\" ),\n\t\texcludeStaticParent = position === \"absolute\",\n\t\toverflowRegex = includeHidden ? /(auto|scroll|hidden)/ : /(auto|scroll)/,\n\t\tscrollParent = this.parents().filter( function() {\n\t\t\tvar parent = $( this );\n\t\t\tif ( excludeStaticParent && parent.css( \"position\" ) === \"static\" ) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\treturn overflowRegex.test( parent.css( \"overflow\" ) + parent.css( \"overflow-y\" ) +\n\t\t\t\tparent.css( \"overflow-x\" ) );\n\t\t} ).eq( 0 );\n\n\treturn position === \"fixed\" || !scrollParent.length ?\n\t\t$( this[ 0 ].ownerDocument || document ) :\n\t\tscrollParent;\n};\n\n\n\n\n// This file is deprecated\nvar ie = $.ui.ie = !!/msie [\\w.]+/.exec( navigator.userAgent.toLowerCase() );\n\n/*!\n * jQuery UI Mouse 1.12.1\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n */\n\n//>>label: Mouse\n//>>group: Widgets\n//>>description: Abstracts mouse-based interactions to assist in creating certain widgets.\n//>>docs: http://api.jqueryui.com/mouse/\n\n\n\nvar mouseHandled = false;\n$( document ).on( \"mouseup\", function() {\n\tmouseHandled = false;\n} );\n\nvar widgetsMouse = $.widget( \"ui.mouse\", {\n\tversion: \"1.12.1\",\n\toptions: {\n\t\tcancel: \"input, textarea, button, select, option\",\n\t\tdistance: 1,\n\t\tdelay: 0\n\t},\n\t_mouseInit: function() {\n\t\tvar that = this;\n\n\t\tthis.element\n\t\t\t.on( \"mousedown.\" + this.widgetName, function( event ) {\n\t\t\t\treturn that._mouseDown( event );\n\t\t\t} )\n\t\t\t.on( \"click.\" + this.widgetName, function( event ) {\n\t\t\t\tif ( true === $.data( event.target, that.widgetName + \".preventClickEvent\" ) ) {\n\t\t\t\t\t$.removeData( event.target, that.widgetName + \".preventClickEvent\" );\n\t\t\t\t\tevent.stopImmediatePropagation();\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t} );\n\n\t\tthis.started = false;\n\t},\n\n\t// TODO: make sure destroying one instance of mouse doesn't mess with\n\t// other instances of mouse\n\t_mouseDestroy: function() {\n\t\tthis.element.off( \".\" + this.widgetName );\n\t\tif ( this._mouseMoveDelegate ) {\n\t\t\tthis.document\n\t\t\t\t.off( \"mousemove.\" + this.widgetName, this._mouseMoveDelegate )\n\t\t\t\t.off( \"mouseup.\" + this.widgetName, this._mouseUpDelegate );\n\t\t}\n\t},\n\n\t_mouseDown: function( event ) {\n\n\t\t// don't let more than one widget handle mouseStart\n\t\tif ( mouseHandled ) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis._mouseMoved = false;\n\n\t\t// We may have missed mouseup (out of window)\n\t\t( this._mouseStarted && this._mouseUp( event ) );\n\n\t\tthis._mouseDownEvent = event;\n\n\t\tvar that = this,\n\t\t\tbtnIsLeft = ( event.which === 1 ),\n\n\t\t\t// event.target.nodeName works around a bug in IE 8 with\n\t\t\t// disabled inputs (#7620)\n\t\t\telIsCancel = ( typeof this.options.cancel === \"string\" && event.target.nodeName ?\n\t\t\t\t$( event.target ).closest( this.options.cancel ).length : false );\n\t\tif ( !btnIsLeft || elIsCancel || !this._mouseCapture( event ) ) {\n\t\t\treturn true;\n\t\t}\n\n\t\tthis.mouseDelayMet = !this.options.delay;\n\t\tif ( !this.mouseDelayMet ) {\n\t\t\tthis._mouseDelayTimer = setTimeout( function() {\n\t\t\t\tthat.mouseDelayMet = true;\n\t\t\t}, this.options.delay );\n\t\t}\n\n\t\tif ( this._mouseDistanceMet( event ) && this._mouseDelayMet( event ) ) {\n\t\t\tthis._mouseStarted = ( this._mouseStart( event ) !== false );\n\t\t\tif ( !this._mouseStarted ) {\n\t\t\t\tevent.preventDefault();\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\t// Click event may never have fired (Gecko & Opera)\n\t\tif ( true === $.data( event.target, this.widgetName + \".preventClickEvent\" ) ) {\n\t\t\t$.removeData( event.target, this.widgetName + \".preventClickEvent\" );\n\t\t}\n\n\t\t// These delegates are required to keep context\n\t\tthis._mouseMoveDelegate = function( event ) {\n\t\t\treturn that._mouseMove( event );\n\t\t};\n\t\tthis._mouseUpDelegate = function( event ) {\n\t\t\treturn that._mouseUp( event );\n\t\t};\n\n\t\tthis.document\n\t\t\t.on( \"mousemove.\" + this.widgetName, this._mouseMoveDelegate )\n\t\t\t.on( \"mouseup.\" + this.widgetName, this._mouseUpDelegate );\n\n\t\tevent.preventDefault();\n\n\t\tmouseHandled = true;\n\t\treturn true;\n\t},\n\n\t_mouseMove: function( event ) {\n\n\t\t// Only check for mouseups outside the document if you've moved inside the document\n\t\t// at least once. This prevents the firing of mouseup in the case of IE<9, which will\n\t\t// fire a mousemove event if content is placed under the cursor. See #7778\n\t\t// Support: IE <9\n\t\tif ( this._mouseMoved ) {\n\n\t\t\t// IE mouseup check - mouseup happened when mouse was out of window\n\t\t\tif ( $.ui.ie && ( !document.documentMode || document.documentMode < 9 ) &&\n\t\t\t\t\t!event.button ) {\n\t\t\t\treturn this._mouseUp( event );\n\n\t\t\t// Iframe mouseup check - mouseup occurred in another document\n\t\t\t} else if ( !event.which ) {\n\n\t\t\t\t// Support: Safari <=8 - 9\n\t\t\t\t// Safari sets which to 0 if you press any of the following keys\n\t\t\t\t// during a drag (#14461)\n\t\t\t\tif ( event.originalEvent.altKey || event.originalEvent.ctrlKey ||\n\t\t\t\t\t\tevent.originalEvent.metaKey || event.originalEvent.shiftKey ) {\n\t\t\t\t\tthis.ignoreMissingWhich = true;\n\t\t\t\t} else if ( !this.ignoreMissingWhich ) {\n\t\t\t\t\treturn this._mouseUp( event );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif ( event.which || event.button ) {\n\t\t\tthis._mouseMoved = true;\n\t\t}\n\n\t\tif ( this._mouseStarted ) {\n\t\t\tthis._mouseDrag( event );\n\t\t\treturn event.preventDefault();\n\t\t}\n\n\t\tif ( this._mouseDistanceMet( event ) && this._mouseDelayMet( event ) ) {\n\t\t\tthis._mouseStarted =\n\t\t\t\t( this._mouseStart( this._mouseDownEvent, event ) !== false );\n\t\t\t( this._mouseStarted ? this._mouseDrag( event ) : this._mouseUp( event ) );\n\t\t}\n\n\t\treturn !this._mouseStarted;\n\t},\n\n\t_mouseUp: function( event ) {\n\t\tthis.document\n\t\t\t.off( \"mousemove.\" + this.widgetName, this._mouseMoveDelegate )\n\t\t\t.off( \"mouseup.\" + this.widgetName, this._mouseUpDelegate );\n\n\t\tif ( this._mouseStarted ) {\n\t\t\tthis._mouseStarted = false;\n\n\t\t\tif ( event.target === this._mouseDownEvent.target ) {\n\t\t\t\t$.data( event.target, this.widgetName + \".preventClickEvent\", true );\n\t\t\t}\n\n\t\t\tthis._mouseStop( event );\n\t\t}\n\n\t\tif ( this._mouseDelayTimer ) {\n\t\t\tclearTimeout( this._mouseDelayTimer );\n\t\t\tdelete this._mouseDelayTimer;\n\t\t}\n\n\t\tthis.ignoreMissingWhich = false;\n\t\tmouseHandled = false;\n\t\tevent.preventDefault();\n\t},\n\n\t_mouseDistanceMet: function( event ) {\n\t\treturn ( Math.max(\n\t\t\t\tMath.abs( this._mouseDownEvent.pageX - event.pageX ),\n\t\t\t\tMath.abs( this._mouseDownEvent.pageY - event.pageY )\n\t\t\t) >= this.options.distance\n\t\t);\n\t},\n\n\t_mouseDelayMet: function( /* event */ ) {\n\t\treturn this.mouseDelayMet;\n\t},\n\n\t// These are placeholder methods, to be overriden by extending plugin\n\t_mouseStart: function( /* event */ ) {},\n\t_mouseDrag: function( /* event */ ) {},\n\t_mouseStop: function( /* event */ ) {},\n\t_mouseCapture: function( /* event */ ) { return true; }\n} );\n\n\n\n\n// $.ui.plugin is deprecated. Use $.widget() extensions instead.\nvar plugin = $.ui.plugin = {\n\tadd: function( module, option, set ) {\n\t\tvar i,\n\t\t\tproto = $.ui[ module ].prototype;\n\t\tfor ( i in set ) {\n\t\t\tproto.plugins[ i ] = proto.plugins[ i ] || [];\n\t\t\tproto.plugins[ i ].push( [ option, set[ i ] ] );\n\t\t}\n\t},\n\tcall: function( instance, name, args, allowDisconnected ) {\n\t\tvar i,\n\t\t\tset = instance.plugins[ name ];\n\n\t\tif ( !set ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( !allowDisconnected && ( !instance.element[ 0 ].parentNode ||\n\t\t\t\tinstance.element[ 0 ].parentNode.nodeType === 11 ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tfor ( i = 0; i < set.length; i++ ) {\n\t\t\tif ( instance.options[ set[ i ][ 0 ] ] ) {\n\t\t\t\tset[ i ][ 1 ].apply( instance.element, args );\n\t\t\t}\n\t\t}\n\t}\n};\n\n\n\nvar safeActiveElement = $.ui.safeActiveElement = function( document ) {\n\tvar activeElement;\n\n\t// Support: IE 9 only\n\t// IE9 throws an \"Unspecified error\" accessing document.activeElement from an <iframe>\n\ttry {\n\t\tactiveElement = document.activeElement;\n\t} catch ( error ) {\n\t\tactiveElement = document.body;\n\t}\n\n\t// Support: IE 9 - 11 only\n\t// IE may return null instead of an element\n\t// Interestingly, this only seems to occur when NOT in an iframe\n\tif ( !activeElement ) {\n\t\tactiveElement = document.body;\n\t}\n\n\t// Support: IE 11 only\n\t// IE11 returns a seemingly empty object in some cases when accessing\n\t// document.activeElement from an <iframe>\n\tif ( !activeElement.nodeName ) {\n\t\tactiveElement = document.body;\n\t}\n\n\treturn activeElement;\n};\n\n\n\nvar safeBlur = $.ui.safeBlur = function( element ) {\n\n\t// Support: IE9 - 10 only\n\t// If the <body> is blurred, IE will switch windows, see #9420\n\tif ( element && element.nodeName.toLowerCase() !== \"body\" ) {\n\t\t$( element ).trigger( \"blur\" );\n\t}\n};\n\n\n/*!\n * jQuery UI Draggable 1.12.1\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n */\n\n//>>label: Draggable\n//>>group: Interactions\n//>>description: Enables dragging functionality for any element.\n//>>docs: http://api.jqueryui.com/draggable/\n//>>demos: http://jqueryui.com/draggable/\n//>>css.structure: ../../themes/base/draggable.css\n\n\n\n$.widget( \"ui.draggable\", $.ui.mouse, {\n\tversion: \"1.12.1\",\n\twidgetEventPrefix: \"drag\",\n\toptions: {\n\t\taddClasses: true,\n\t\tappendTo: \"parent\",\n\t\taxis: false,\n\t\tconnectToSortable: false,\n\t\tcontainment: false,\n\t\tcursor: \"auto\",\n\t\tcursorAt: false,\n\t\tgrid: false,\n\t\thandle: false,\n\t\thelper: \"original\",\n\t\tiframeFix: false,\n\t\topacity: false,\n\t\trefreshPositions: false,\n\t\trevert: false,\n\t\trevertDuration: 500,\n\t\tscope: \"default\",\n\t\tscroll: true,\n\t\tscrollSensitivity: 20,\n\t\tscrollSpeed: 20,\n\t\tsnap: false,\n\t\tsnapMode: \"both\",\n\t\tsnapTolerance: 20,\n\t\tstack: false,\n\t\tzIndex: false,\n\n\t\t// Callbacks\n\t\tdrag: null,\n\t\tstart: null,\n\t\tstop: null\n\t},\n\t_create: function() {\n\n\t\tif ( this.options.helper === \"original\" ) {\n\t\t\tthis._setPositionRelative();\n\t\t}\n\t\tif ( this.options.addClasses ) {\n\t\t\tthis._addClass( \"ui-draggable\" );\n\t\t}\n\t\tthis._setHandleClassName();\n\n\t\tthis._mouseInit();\n\t},\n\n\t_setOption: function( key, value ) {\n\t\tthis._super( key, value );\n\t\tif ( key === \"handle\" ) {\n\t\t\tthis._removeHandleClassName();\n\t\t\tthis._setHandleClassName();\n\t\t}\n\t},\n\n\t_destroy: function() {\n\t\tif ( ( this.helper || this.element ).is( \".ui-draggable-dragging\" ) ) {\n\t\t\tthis.destroyOnClear = true;\n\t\t\treturn;\n\t\t}\n\t\tthis._removeHandleClassName();\n\t\tthis._mouseDestroy();\n\t},\n\n\t_mouseCapture: function( event ) {\n\t\tvar o = this.options;\n\n\t\t// Among others, prevent a drag on a resizable-handle\n\t\tif ( this.helper || o.disabled ||\n\t\t\t\t$( event.target ).closest( \".ui-resizable-handle\" ).length > 0 ) {\n\t\t\treturn false;\n\t\t}\n\n\t\t//Quit if we're not on a valid handle\n\t\tthis.handle = this._getHandle( event );\n\t\tif ( !this.handle ) {\n\t\t\treturn false;\n\t\t}\n\n\t\tthis._blurActiveElement( event );\n\n\t\tthis._blockFrames( o.iframeFix === true ? \"iframe\" : o.iframeFix );\n\n\t\treturn true;\n\n\t},\n\n\t_blockFrames: function( selector ) {\n\t\tthis.iframeBlocks = this.document.find( selector ).map( function() {\n\t\t\tvar iframe = $( this );\n\n\t\t\treturn $( \"<div>\" )\n\t\t\t\t.css( \"position\", \"absolute\" )\n\t\t\t\t.appendTo( iframe.parent() )\n\t\t\t\t.outerWidth( iframe.outerWidth() )\n\t\t\t\t.outerHeight( iframe.outerHeight() )\n\t\t\t\t.offset( iframe.offset() )[ 0 ];\n\t\t} );\n\t},\n\n\t_unblockFrames: function() {\n\t\tif ( this.iframeBlocks ) {\n\t\t\tthis.iframeBlocks.remove();\n\t\t\tdelete this.iframeBlocks;\n\t\t}\n\t},\n\n\t_blurActiveElement: function( event ) {\n\t\tvar activeElement = $.ui.safeActiveElement( this.document[ 0 ] ),\n\t\t\ttarget = $( event.target );\n\n\t\t// Don't blur if the event occurred on an element that is within\n\t\t// the currently focused element\n\t\t// See #10527, #12472\n\t\tif ( target.closest( activeElement ).length ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Blur any element that currently has focus, see #4261\n\t\t$.ui.safeBlur( activeElement );\n\t},\n\n\t_mouseStart: function( event ) {\n\n\t\tvar o = this.options;\n\n\t\t//Create and append the visible helper\n\t\tthis.helper = this._createHelper( event );\n\n\t\tthis._addClass( this.helper, \"ui-draggable-dragging\" );\n\n\t\t//Cache the helper size\n\t\tthis._cacheHelperProportions();\n\n\t\t//If ddmanager is used for droppables, set the global draggable\n\t\tif ( $.ui.ddmanager ) {\n\t\t\t$.ui.ddmanager.current = this;\n\t\t}\n\n\t\t/*\n\t\t * - Position generation -\n\t\t * This block generates everything position related - it's the core of draggables.\n\t\t */\n\n\t\t//Cache the margins of the original element\n\t\tthis._cacheMargins();\n\n\t\t//Store the helper's css position\n\t\tthis.cssPosition = this.helper.css( \"position\" );\n\t\tthis.scrollParent = this.helper.scrollParent( true );\n\t\tthis.offsetParent = this.helper.offsetParent();\n\t\tthis.hasFixedAncestor = this.helper.parents().filter( function() {\n\t\t\t\treturn $( this ).css( \"position\" ) === \"fixed\";\n\t\t\t} ).length > 0;\n\n\t\t//The element's absolute position on the page minus margins\n\t\tthis.positionAbs = this.element.offset();\n\t\tthis._refreshOffsets( event );\n\n\t\t//Generate the original position\n\t\tthis.originalPosition = this.position = this._generatePosition( event, false );\n\t\tthis.originalPageX = event.pageX;\n\t\tthis.originalPageY = event.pageY;\n\n\t\t//Adjust the mouse offset relative to the helper if \"cursorAt\" is supplied\n\t\t( o.cursorAt && this._adjustOffsetFromHelper( o.cursorAt ) );\n\n\t\t//Set a containment if given in the options\n\t\tthis._setContainment();\n\n\t\t//Trigger event + callbacks\n\t\tif ( this._trigger( \"start\", event ) === false ) {\n\t\t\tthis._clear();\n\t\t\treturn false;\n\t\t}\n\n\t\t//Recache the helper size\n\t\tthis._cacheHelperProportions();\n\n\t\t//Prepare the droppable offsets\n\t\tif ( $.ui.ddmanager && !o.dropBehaviour ) {\n\t\t\t$.ui.ddmanager.prepareOffsets( this, event );\n\t\t}\n\n\t\t// Execute the drag once - this causes the helper not to be visible before getting its\n\t\t// correct position\n\t\tthis._mouseDrag( event, true );\n\n\t\t// If the ddmanager is used for droppables, inform the manager that dragging has started\n\t\t// (see #5003)\n\t\tif ( $.ui.ddmanager ) {\n\t\t\t$.ui.ddmanager.dragStart( this, event );\n\t\t}\n\n\t\treturn true;\n\t},\n\n\t_refreshOffsets: function( event ) {\n\t\tthis.offset = {\n\t\t\ttop: this.positionAbs.top - this.margins.top,\n\t\t\tleft: this.positionAbs.left - this.margins.left,\n\t\t\tscroll: false,\n\t\t\tparent: this._getParentOffset(),\n\t\t\trelative: this._getRelativeOffset()\n\t\t};\n\n\t\tthis.offset.click = {\n\t\t\tleft: event.pageX - this.offset.left,\n\t\t\ttop: event.pageY - this.offset.top\n\t\t};\n\t},\n\n\t_mouseDrag: function( event, noPropagation ) {\n\n\t\t// reset any necessary cached properties (see #5009)\n\t\tif ( this.hasFixedAncestor ) {\n\t\t\tthis.offset.parent = this._getParentOffset();\n\t\t}\n\n\t\t//Compute the helpers position\n\t\tthis.position = this._generatePosition( event, true );\n\t\tthis.positionAbs = this._convertPositionTo( \"absolute\" );\n\n\t\t//Call plugins and callbacks and use the resulting position if something is returned\n\t\tif ( !noPropagation ) {\n\t\t\tvar ui = this._uiHash();\n\t\t\tif ( this._trigger( \"drag\", event, ui ) === false ) {\n\t\t\t\tthis._mouseUp( new $.Event( \"mouseup\", event ) );\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tthis.position = ui.position;\n\t\t}\n\n\t\tthis.helper[ 0 ].style.left = this.position.left + \"px\";\n\t\tthis.helper[ 0 ].style.top = this.position.top + \"px\";\n\n\t\tif ( $.ui.ddmanager ) {\n\t\t\t$.ui.ddmanager.drag( this, event );\n\t\t}\n\n\t\treturn false;\n\t},\n\n\t_mouseStop: function( event ) {\n\n\t\t//If we are using droppables, inform the manager about the drop\n\t\tvar that = this,\n\t\t\tdropped = false;\n\t\tif ( $.ui.ddmanager && !this.options.dropBehaviour ) {\n\t\t\tdropped = $.ui.ddmanager.drop( this, event );\n\t\t}\n\n\t\t//if a drop comes from outside (a sortable)\n\t\tif ( this.dropped ) {\n\t\t\tdropped = this.dropped;\n\t\t\tthis.dropped = false;\n\t\t}\n\n\t\tif ( ( this.options.revert === \"invalid\" && !dropped ) ||\n\t\t\t\t( this.options.revert === \"valid\" && dropped ) ||\n\t\t\t\tthis.options.revert === true || ( $.isFunction( this.options.revert ) &&\n\t\t\t\tthis.options.revert.call( this.element, dropped ) )\n\t\t) {\n\t\t\t$( this.helper ).animate(\n\t\t\t\tthis.originalPosition,\n\t\t\t\tparseInt( this.options.revertDuration, 10 ),\n\t\t\t\tfunction() {\n\t\t\t\t\tif ( that._trigger( \"stop\", event ) !== false ) {\n\t\t\t\t\t\tthat._clear();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t);\n\t\t} else {\n\t\t\tif ( this._trigger( \"stop\", event ) !== false ) {\n\t\t\t\tthis._clear();\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t},\n\n\t_mouseUp: function( event ) {\n\t\tthis._unblockFrames();\n\n\t\t// If the ddmanager is used for droppables, inform the manager that dragging has stopped\n\t\t// (see #5003)\n\t\tif ( $.ui.ddmanager ) {\n\t\t\t$.ui.ddmanager.dragStop( this, event );\n\t\t}\n\n\t\t// Only need to focus if the event occurred on the draggable itself, see #10527\n\t\tif ( this.handleElement.is( event.target ) ) {\n\n\t\t\t// The interaction is over; whether or not the click resulted in a drag,\n\t\t\t// focus the element\n\t\t\tthis.element.trigger( \"focus\" );\n\t\t}\n\n\t\treturn $.ui.mouse.prototype._mouseUp.call( this, event );\n\t},\n\n\tcancel: function() {\n\n\t\tif ( this.helper.is( \".ui-draggable-dragging\" ) ) {\n\t\t\tthis._mouseUp( new $.Event( \"mouseup\", { target: this.element[ 0 ] } ) );\n\t\t} else {\n\t\t\tthis._clear();\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\t_getHandle: function( event ) {\n\t\treturn this.options.handle ?\n\t\t\t!!$( event.target ).closest( this.element.find( this.options.handle ) ).length :\n\t\t\ttrue;\n\t},\n\n\t_setHandleClassName: function() {\n\t\tthis.handleElement = this.options.handle ?\n\t\t\tthis.element.find( this.options.handle ) : this.element;\n\t\tthis._addClass( this.handleElement, \"ui-draggable-handle\" );\n\t},\n\n\t_removeHandleClassName: function() {\n\t\tthis._removeClass( this.handleElement, \"ui-draggable-handle\" );\n\t},\n\n\t_createHelper: function( event ) {\n\n\t\tvar o = this.options,\n\t\t\thelperIsFunction = $.isFunction( o.helper ),\n\t\t\thelper = helperIsFunction ?\n\t\t\t\t$( o.helper.apply( this.element[ 0 ], [ event ] ) ) :\n\t\t\t\t( o.helper === \"clone\" ?\n\t\t\t\t\tthis.element.clone().removeAttr( \"id\" ) :\n\t\t\t\t\tthis.element );\n\n\t\tif ( !helper.parents( \"body\" ).length ) {\n\t\t\thelper.appendTo( ( o.appendTo === \"parent\" ?\n\t\t\t\tthis.element[ 0 ].parentNode :\n\t\t\t\to.appendTo ) );\n\t\t}\n\n\t\t// Http://bugs.jqueryui.com/ticket/9446\n\t\t// a helper function can return the original element\n\t\t// which wouldn't have been set to relative in _create\n\t\tif ( helperIsFunction && helper[ 0 ] === this.element[ 0 ] ) {\n\t\t\tthis._setPositionRelative();\n\t\t}\n\n\t\tif ( helper[ 0 ] !== this.element[ 0 ] &&\n\t\t\t\t!( /(fixed|absolute)/ ).test( helper.css( \"position\" ) ) ) {\n\t\t\thelper.css( \"position\", \"absolute\" );\n\t\t}\n\n\t\treturn helper;\n\n\t},\n\n\t_setPositionRelative: function() {\n\t\tif ( !( /^(?:r|a|f)/ ).test( this.element.css( \"position\" ) ) ) {\n\t\t\tthis.element[ 0 ].style.position = \"relative\";\n\t\t}\n\t},\n\n\t_adjustOffsetFromHelper: function( obj ) {\n\t\tif ( typeof obj === \"string\" ) {\n\t\t\tobj = obj.split( \" \" );\n\t\t}\n\t\tif ( $.isArray( obj ) ) {\n\t\t\tobj = { left: +obj[ 0 ], top: +obj[ 1 ] || 0 };\n\t\t}\n\t\tif ( \"left\" in obj ) {\n\t\t\tthis.offset.click.left = obj.left + this.margins.left;\n\t\t}\n\t\tif ( \"right\" in obj ) {\n\t\t\tthis.offset.click.left = this.helperProportions.width - obj.right + this.margins.left;\n\t\t}\n\t\tif ( \"top\" in obj ) {\n\t\t\tthis.offset.click.top = obj.top + this.margins.top;\n\t\t}\n\t\tif ( \"bottom\" in obj ) {\n\t\t\tthis.offset.click.top = this.helperProportions.height - obj.bottom + this.margins.top;\n\t\t}\n\t},\n\n\t_isRootNode: function( element ) {\n\t\treturn ( /(html|body)/i ).test( element.tagName ) || element === this.document[ 0 ];\n\t},\n\n\t_getParentOffset: function() {\n\n\t\t//Get the offsetParent and cache its position\n\t\tvar po = this.offsetParent.offset(),\n\t\t\tdocument = this.document[ 0 ];\n\n\t\t// This is a special case where we need to modify a offset calculated on start, since the\n\t\t// following happened:\n\t\t// 1. The position of the helper is absolute, so it's position is calculated based on the\n\t\t// next positioned parent\n\t\t// 2. The actual offset parent is a child of the scroll parent, and the scroll parent isn't\n\t\t// the document, which means that the scroll is included in the initial calculation of the\n\t\t// offset of the parent, and never recalculated upon drag\n\t\tif ( this.cssPosition === \"absolute\" && this.scrollParent[ 0 ] !== document &&\n\t\t\t\t$.contains( this.scrollParent[ 0 ], this.offsetParent[ 0 ] ) ) {\n\t\t\tpo.left += this.scrollParent.scrollLeft();\n\t\t\tpo.top += this.scrollParent.scrollTop();\n\t\t}\n\n\t\tif ( this._isRootNode( this.offsetParent[ 0 ] ) ) {\n\t\t\tpo = { top: 0, left: 0 };\n\t\t}\n\n\t\treturn {\n\t\t\ttop: po.top + ( parseInt( this.offsetParent.css( \"borderTopWidth\" ), 10 ) || 0 ),\n\t\t\tleft: po.left + ( parseInt( this.offsetParent.css( \"borderLeftWidth\" ), 10 ) || 0 )\n\t\t};\n\n\t},\n\n\t_getRelativeOffset: function() {\n\t\tif ( this.cssPosition !== \"relative\" ) {\n\t\t\treturn { top: 0, left: 0 };\n\t\t}\n\n\t\tvar p = this.element.position(),\n\t\t\tscrollIsRootNode = this._isRootNode( this.scrollParent[ 0 ] );\n\n\t\treturn {\n\t\t\ttop: p.top - ( parseInt( this.helper.css( \"top\" ), 10 ) || 0 ) +\n\t\t\t\t( !scrollIsRootNode ? this.scrollParent.scrollTop() : 0 ),\n\t\t\tleft: p.left - ( parseInt( this.helper.css( \"left\" ), 10 ) || 0 ) +\n\t\t\t\t( !scrollIsRootNode ? this.scrollParent.scrollLeft() : 0 )\n\t\t};\n\n\t},\n\n\t_cacheMargins: function() {\n\t\tthis.margins = {\n\t\t\tleft: ( parseInt( this.element.css( \"marginLeft\" ), 10 ) || 0 ),\n\t\t\ttop: ( parseInt( this.element.css( \"marginTop\" ), 10 ) || 0 ),\n\t\t\tright: ( parseInt( this.element.css( \"marginRight\" ), 10 ) || 0 ),\n\t\t\tbottom: ( parseInt( this.element.css( \"marginBottom\" ), 10 ) || 0 )\n\t\t};\n\t},\n\n\t_cacheHelperProportions: function() {\n\t\tthis.helperProportions = {\n\t\t\twidth: this.helper.outerWidth(),\n\t\t\theight: this.helper.outerHeight()\n\t\t};\n\t},\n\n\t_setContainment: function() {\n\n\t\tvar isUserScrollable, c, ce,\n\t\t\to = this.options,\n\t\t\tdocument = this.document[ 0 ];\n\n\t\tthis.relativeContainer = null;\n\n\t\tif ( !o.containment ) {\n\t\t\tthis.containment = null;\n\t\t\treturn;\n\t\t}\n\n\t\tif ( o.containment === \"window\" ) {\n\t\t\tthis.containment = [\n\t\t\t\t$( window ).scrollLeft() - this.offset.relative.left - this.offset.parent.left,\n\t\t\t\t$( window ).scrollTop() - this.offset.relative.top - this.offset.parent.top,\n\t\t\t\t$( window ).scrollLeft() + $( window ).width() -\n\t\t\t\t\tthis.helperProportions.width - this.margins.left,\n\t\t\t\t$( window ).scrollTop() +\n\t\t\t\t\t( $( window ).height() || document.body.parentNode.scrollHeight ) -\n\t\t\t\t\tthis.helperProportions.height - this.margins.top\n\t\t\t];\n\t\t\treturn;\n\t\t}\n\n\t\tif ( o.containment === \"document\" ) {\n\t\t\tthis.containment = [\n\t\t\t\t0,\n\t\t\t\t0,\n\t\t\t\t$( document ).width() - this.helperProportions.width - this.margins.left,\n\t\t\t\t( $( document ).height() || document.body.parentNode.scrollHeight ) -\n\t\t\t\t\tthis.helperProportions.height - this.margins.top\n\t\t\t];\n\t\t\treturn;\n\t\t}\n\n\t\tif ( o.containment.constructor === Array ) {\n\t\t\tthis.containment = o.containment;\n\t\t\treturn;\n\t\t}\n\n\t\tif ( o.containment === \"parent\" ) {\n\t\t\to.containment = this.helper[ 0 ].parentNode;\n\t\t}\n\n\t\tc = $( o.containment );\n\t\tce = c[ 0 ];\n\n\t\tif ( !ce ) {\n\t\t\treturn;\n\t\t}\n\n\t\tisUserScrollable = /(scroll|auto)/.test( c.css( \"overflow\" ) );\n\n\t\tthis.containment = [\n\t\t\t( parseInt( c.css( \"borderLeftWidth\" ), 10 ) || 0 ) +\n\t\t\t\t( parseInt( c.css( \"paddingLeft\" ), 10 ) || 0 ),\n\t\t\t( parseInt( c.css( \"borderTopWidth\" ), 10 ) || 0 ) +\n\t\t\t\t( parseInt( c.css( \"paddingTop\" ), 10 ) || 0 ),\n\t\t\t( isUserScrollable ? Math.max( ce.scrollWidth, ce.offsetWidth ) : ce.offsetWidth ) -\n\t\t\t\t( parseInt( c.css( \"borderRightWidth\" ), 10 ) || 0 ) -\n\t\t\t\t( parseInt( c.css( \"paddingRight\" ), 10 ) || 0 ) -\n\t\t\t\tthis.helperProportions.width -\n\t\t\t\tthis.margins.left -\n\t\t\t\tthis.margins.right,\n\t\t\t( isUserScrollable ? Math.max( ce.scrollHeight, ce.offsetHeight ) : ce.offsetHeight ) -\n\t\t\t\t( parseInt( c.css( \"borderBottomWidth\" ), 10 ) || 0 ) -\n\t\t\t\t( parseInt( c.css( \"paddingBottom\" ), 10 ) || 0 ) -\n\t\t\t\tthis.helperProportions.height -\n\t\t\t\tthis.margins.top -\n\t\t\t\tthis.margins.bottom\n\t\t];\n\t\tthis.relativeContainer = c;\n\t},\n\n\t_convertPositionTo: function( d, pos ) {\n\n\t\tif ( !pos ) {\n\t\t\tpos = this.position;\n\t\t}\n\n\t\tvar mod = d === \"absolute\" ? 1 : -1,\n\t\t\tscrollIsRootNode = this._isRootNode( this.scrollParent[ 0 ] );\n\n\t\treturn {\n\t\t\ttop: (\n\n\t\t\t\t// The absolute mouse position\n\t\t\t\tpos.top\t+\n\n\t\t\t\t// Only for relative positioned nodes: Relative offset from element to offset parent\n\t\t\t\tthis.offset.relative.top * mod +\n\n\t\t\t\t// The offsetParent's offset without borders (offset + border)\n\t\t\t\tthis.offset.parent.top * mod -\n\t\t\t\t( ( this.cssPosition === \"fixed\" ?\n\t\t\t\t\t-this.offset.scroll.top :\n\t\t\t\t\t( scrollIsRootNode ? 0 : this.offset.scroll.top ) ) * mod )\n\t\t\t),\n\t\t\tleft: (\n\n\t\t\t\t// The absolute mouse position\n\t\t\t\tpos.left +\n\n\t\t\t\t// Only for relative positioned nodes: Relative offset from element to offset parent\n\t\t\t\tthis.offset.relative.left * mod +\n\n\t\t\t\t// The offsetParent's offset without borders (offset + border)\n\t\t\t\tthis.offset.parent.left * mod\t-\n\t\t\t\t( ( this.cssPosition === \"fixed\" ?\n\t\t\t\t\t-this.offset.scroll.left :\n\t\t\t\t\t( scrollIsRootNode ? 0 : this.offset.scroll.left ) ) * mod )\n\t\t\t)\n\t\t};\n\n\t},\n\n\t_generatePosition: function( event, constrainPosition ) {\n\n\t\tvar containment, co, top, left,\n\t\t\to = this.options,\n\t\t\tscrollIsRootNode = this._isRootNode( this.scrollParent[ 0 ] ),\n\t\t\tpageX = event.pageX,\n\t\t\tpageY = event.pageY;\n\n\t\t// Cache the scroll\n\t\tif ( !scrollIsRootNode || !this.offset.scroll ) {\n\t\t\tthis.offset.scroll = {\n\t\t\t\ttop: this.scrollParent.scrollTop(),\n\t\t\t\tleft: this.scrollParent.scrollLeft()\n\t\t\t};\n\t\t}\n\n\t\t/*\n\t\t * - Position constraining -\n\t\t * Constrain the position to a mix of grid, containment.\n\t\t */\n\n\t\t// If we are not dragging yet, we won't check for options\n\t\tif ( constrainPosition ) {\n\t\t\tif ( this.containment ) {\n\t\t\t\tif ( this.relativeContainer ) {\n\t\t\t\t\tco = this.relativeContainer.offset();\n\t\t\t\t\tcontainment = [\n\t\t\t\t\t\tthis.containment[ 0 ] + co.left,\n\t\t\t\t\t\tthis.containment[ 1 ] + co.top,\n\t\t\t\t\t\tthis.containment[ 2 ] + co.left,\n\t\t\t\t\t\tthis.containment[ 3 ] + co.top\n\t\t\t\t\t];\n\t\t\t\t} else {\n\t\t\t\t\tcontainment = this.containment;\n\t\t\t\t}\n\n\t\t\t\tif ( event.pageX - this.offset.click.left < containment[ 0 ] ) {\n\t\t\t\t\tpageX = containment[ 0 ] + this.offset.click.left;\n\t\t\t\t}\n\t\t\t\tif ( event.pageY - this.offset.click.top < containment[ 1 ] ) {\n\t\t\t\t\tpageY = containment[ 1 ] + this.offset.click.top;\n\t\t\t\t}\n\t\t\t\tif ( event.pageX - this.offset.click.left > containment[ 2 ] ) {\n\t\t\t\t\tpageX = containment[ 2 ] + this.offset.click.left;\n\t\t\t\t}\n\t\t\t\tif ( event.pageY - this.offset.click.top > containment[ 3 ] ) {\n\t\t\t\t\tpageY = containment[ 3 ] + this.offset.click.top;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ( o.grid ) {\n\n\t\t\t\t//Check for grid elements set to 0 to prevent divide by 0 error causing invalid\n\t\t\t\t// argument errors in IE (see ticket #6950)\n\t\t\t\ttop = o.grid[ 1 ] ? this.originalPageY + Math.round( ( pageY -\n\t\t\t\t\tthis.originalPageY ) / o.grid[ 1 ] ) * o.grid[ 1 ] : this.originalPageY;\n\t\t\t\tpageY = containment ? ( ( top - this.offset.click.top >= containment[ 1 ] ||\n\t\t\t\t\ttop - this.offset.click.top > containment[ 3 ] ) ?\n\t\t\t\t\t\ttop :\n\t\t\t\t\t\t( ( top - this.offset.click.top >= containment[ 1 ] ) ?\n\t\t\t\t\t\t\ttop - o.grid[ 1 ] : top + o.grid[ 1 ] ) ) : top;\n\n\t\t\t\tleft = o.grid[ 0 ] ? this.originalPageX +\n\t\t\t\t\tMath.round( ( pageX - this.originalPageX ) / o.grid[ 0 ] ) * o.grid[ 0 ] :\n\t\t\t\t\tthis.originalPageX;\n\t\t\t\tpageX = containment ? ( ( left - this.offset.click.left >= containment[ 0 ] ||\n\t\t\t\t\tleft - this.offset.click.left > containment[ 2 ] ) ?\n\t\t\t\t\t\tleft :\n\t\t\t\t\t\t( ( left - this.offset.click.left >= containment[ 0 ] ) ?\n\t\t\t\t\t\t\tleft - o.grid[ 0 ] : left + o.grid[ 0 ] ) ) : left;\n\t\t\t}\n\n\t\t\tif ( o.axis === \"y\" ) {\n\t\t\t\tpageX = this.originalPageX;\n\t\t\t}\n\n\t\t\tif ( o.axis === \"x\" ) {\n\t\t\t\tpageY = this.originalPageY;\n\t\t\t}\n\t\t}\n\n\t\treturn {\n\t\t\ttop: (\n\n\t\t\t\t// The absolute mouse position\n\t\t\t\tpageY -\n\n\t\t\t\t// Click offset (relative to the element)\n\t\t\t\tthis.offset.click.top -\n\n\t\t\t\t// Only for relative positioned nodes: Relative offset from element to offset parent\n\t\t\t\tthis.offset.relative.top -\n\n\t\t\t\t// The offsetParent's offset without borders (offset + border)\n\t\t\t\tthis.offset.parent.top +\n\t\t\t\t( this.cssPosition === \"fixed\" ?\n\t\t\t\t\t-this.offset.scroll.top :\n\t\t\t\t\t( scrollIsRootNode ? 0 : this.offset.scroll.top ) )\n\t\t\t),\n\t\t\tleft: (\n\n\t\t\t\t// The absolute mouse position\n\t\t\t\tpageX -\n\n\t\t\t\t// Click offset (relative to the element)\n\t\t\t\tthis.offset.click.left -\n\n\t\t\t\t// Only for relative positioned nodes: Relative offset from element to offset parent\n\t\t\t\tthis.offset.relative.left -\n\n\t\t\t\t// The offsetParent's offset without borders (offset + border)\n\t\t\t\tthis.offset.parent.left +\n\t\t\t\t( this.cssPosition === \"fixed\" ?\n\t\t\t\t\t-this.offset.scroll.left :\n\t\t\t\t\t( scrollIsRootNode ? 0 : this.offset.scroll.left ) )\n\t\t\t)\n\t\t};\n\n\t},\n\n\t_clear: function() {\n\t\tthis._removeClass( this.helper, \"ui-draggable-dragging\" );\n\t\tif ( this.helper[ 0 ] !== this.element[ 0 ] && !this.cancelHelperRemoval ) {\n\t\t\tthis.helper.remove();\n\t\t}\n\t\tthis.helper = null;\n\t\tthis.cancelHelperRemoval = false;\n\t\tif ( this.destroyOnClear ) {\n\t\t\tthis.destroy();\n\t\t}\n\t},\n\n\t// From now on bulk stuff - mainly helpers\n\n\t_trigger: function( type, event, ui ) {\n\t\tui = ui || this._uiHash();\n\t\t$.ui.plugin.call( this, type, [ event, ui, this ], true );\n\n\t\t// Absolute position and offset (see #6884 ) have to be recalculated after plugins\n\t\tif ( /^(drag|start|stop)/.test( type ) ) {\n\t\t\tthis.positionAbs = this._convertPositionTo( \"absolute\" );\n\t\t\tui.offset = this.positionAbs;\n\t\t}\n\t\treturn $.Widget.prototype._trigger.call( this, type, event, ui );\n\t},\n\n\tplugins: {},\n\n\t_uiHash: function() {\n\t\treturn {\n\t\t\thelper: this.helper,\n\t\t\tposition: this.position,\n\t\t\toriginalPosition: this.originalPosition,\n\t\t\toffset: this.positionAbs\n\t\t};\n\t}\n\n} );\n\n$.ui.plugin.add( \"draggable\", \"connectToSortable\", {\n\tstart: function( event, ui, draggable ) {\n\t\tvar uiSortable = $.extend( {}, ui, {\n\t\t\titem: draggable.element\n\t\t} );\n\n\t\tdraggable.sortables = [];\n\t\t$( draggable.options.connectToSortable ).each( function() {\n\t\t\tvar sortable = $( this ).sortable( \"instance\" );\n\n\t\t\tif ( sortable && !sortable.options.disabled ) {\n\t\t\t\tdraggable.sortables.push( sortable );\n\n\t\t\t\t// RefreshPositions is called at drag start to refresh the containerCache\n\t\t\t\t// which is used in drag. This ensures it's initialized and synchronized\n\t\t\t\t// with any changes that might have happened on the page since initialization.\n\t\t\t\tsortable.refreshPositions();\n\t\t\t\tsortable._trigger( \"activate\", event, uiSortable );\n\t\t\t}\n\t\t} );\n\t},\n\tstop: function( event, ui, draggable ) {\n\t\tvar uiSortable = $.extend( {}, ui, {\n\t\t\titem: draggable.element\n\t\t} );\n\n\t\tdraggable.cancelHelperRemoval = false;\n\n\t\t$.each( draggable.sortables, function() {\n\t\t\tvar sortable = this;\n\n\t\t\tif ( sortable.isOver ) {\n\t\t\t\tsortable.isOver = 0;\n\n\t\t\t\t// Allow this sortable to handle removing the helper\n\t\t\t\tdraggable.cancelHelperRemoval = true;\n\t\t\t\tsortable.cancelHelperRemoval = false;\n\n\t\t\t\t// Use _storedCSS To restore properties in the sortable,\n\t\t\t\t// as this also handles revert (#9675) since the draggable\n\t\t\t\t// may have modified them in unexpected ways (#8809)\n\t\t\t\tsortable._storedCSS = {\n\t\t\t\t\tposition: sortable.placeholder.css( \"position\" ),\n\t\t\t\t\ttop: sortable.placeholder.css( \"top\" ),\n\t\t\t\t\tleft: sortable.placeholder.css( \"left\" )\n\t\t\t\t};\n\n\t\t\t\tsortable._mouseStop( event );\n\n\t\t\t\t// Once drag has ended, the sortable should return to using\n\t\t\t\t// its original helper, not the shared helper from draggable\n\t\t\t\tsortable.options.helper = sortable.options._helper;\n\t\t\t} else {\n\n\t\t\t\t// Prevent this Sortable from removing the helper.\n\t\t\t\t// However, don't set the draggable to remove the helper\n\t\t\t\t// either as another connected Sortable may yet handle the removal.\n\t\t\t\tsortable.cancelHelperRemoval = true;\n\n\t\t\t\tsortable._trigger( \"deactivate\", event, uiSortable );\n\t\t\t}\n\t\t} );\n\t},\n\tdrag: function( event, ui, draggable ) {\n\t\t$.each( draggable.sortables, function() {\n\t\t\tvar innermostIntersecting = false,\n\t\t\t\tsortable = this;\n\n\t\t\t// Copy over variables that sortable's _intersectsWith uses\n\t\t\tsortable.positionAbs = draggable.positionAbs;\n\t\t\tsortable.helperProportions = draggable.helperProportions;\n\t\t\tsortable.offset.click = draggable.offset.click;\n\n\t\t\tif ( sortable._intersectsWith( sortable.containerCache ) ) {\n\t\t\t\tinnermostIntersecting = true;\n\n\t\t\t\t$.each( draggable.sortables, function() {\n\n\t\t\t\t\t// Copy over variables that sortable's _intersectsWith uses\n\t\t\t\t\tthis.positionAbs = draggable.positionAbs;\n\t\t\t\t\tthis.helperProportions = draggable.helperProportions;\n\t\t\t\t\tthis.offset.click = draggable.offset.click;\n\n\t\t\t\t\tif ( this !== sortable &&\n\t\t\t\t\t\t\tthis._intersectsWith( this.containerCache ) &&\n\t\t\t\t\t\t\t$.contains( sortable.element[ 0 ], this.element[ 0 ] ) ) {\n\t\t\t\t\t\tinnermostIntersecting = false;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn innermostIntersecting;\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\tif ( innermostIntersecting ) {\n\n\t\t\t\t// If it intersects, we use a little isOver variable and set it once,\n\t\t\t\t// so that the move-in stuff gets fired only once.\n\t\t\t\tif ( !sortable.isOver ) {\n\t\t\t\t\tsortable.isOver = 1;\n\n\t\t\t\t\t// Store draggable's parent in case we need to reappend to it later.\n\t\t\t\t\tdraggable._parent = ui.helper.parent();\n\n\t\t\t\t\tsortable.currentItem = ui.helper\n\t\t\t\t\t\t.appendTo( sortable.element )\n\t\t\t\t\t\t.data( \"ui-sortable-item\", true );\n\n\t\t\t\t\t// Store helper option to later restore it\n\t\t\t\t\tsortable.options._helper = sortable.options.helper;\n\n\t\t\t\t\tsortable.options.helper = function() {\n\t\t\t\t\t\treturn ui.helper[ 0 ];\n\t\t\t\t\t};\n\n\t\t\t\t\t// Fire the start events of the sortable with our passed browser event,\n\t\t\t\t\t// and our own helper (so it doesn't create a new one)\n\t\t\t\t\tevent.target = sortable.currentItem[ 0 ];\n\t\t\t\t\tsortable._mouseCapture( event, true );\n\t\t\t\t\tsortable._mouseStart( event, true, true );\n\n\t\t\t\t\t// Because the browser event is way off the new appended portlet,\n\t\t\t\t\t// modify necessary variables to reflect the changes\n\t\t\t\t\tsortable.offset.click.top = draggable.offset.click.top;\n\t\t\t\t\tsortable.offset.click.left = draggable.offset.click.left;\n\t\t\t\t\tsortable.offset.parent.left -= draggable.offset.parent.left -\n\t\t\t\t\t\tsortable.offset.parent.left;\n\t\t\t\t\tsortable.offset.parent.top -= draggable.offset.parent.top -\n\t\t\t\t\t\tsortable.offset.parent.top;\n\n\t\t\t\t\tdraggable._trigger( \"toSortable\", event );\n\n\t\t\t\t\t// Inform draggable that the helper is in a valid drop zone,\n\t\t\t\t\t// used solely in the revert option to handle \"valid/invalid\".\n\t\t\t\t\tdraggable.dropped = sortable.element;\n\n\t\t\t\t\t// Need to refreshPositions of all sortables in the case that\n\t\t\t\t\t// adding to one sortable changes the location of the other sortables (#9675)\n\t\t\t\t\t$.each( draggable.sortables, function() {\n\t\t\t\t\t\tthis.refreshPositions();\n\t\t\t\t\t} );\n\n\t\t\t\t\t// Hack so receive/update callbacks work (mostly)\n\t\t\t\t\tdraggable.currentItem = draggable.element;\n\t\t\t\t\tsortable.fromOutside = draggable;\n\t\t\t\t}\n\n\t\t\t\tif ( sortable.currentItem ) {\n\t\t\t\t\tsortable._mouseDrag( event );\n\n\t\t\t\t\t// Copy the sortable's position because the draggable's can potentially reflect\n\t\t\t\t\t// a relative position, while sortable is always absolute, which the dragged\n\t\t\t\t\t// element has now become. (#8809)\n\t\t\t\t\tui.position = sortable.position;\n\t\t\t\t}\n\t\t\t} else {\n\n\t\t\t\t// If it doesn't intersect with the sortable, and it intersected before,\n\t\t\t\t// we fake the drag stop of the sortable, but make sure it doesn't remove\n\t\t\t\t// the helper by using cancelHelperRemoval.\n\t\t\t\tif ( sortable.isOver ) {\n\n\t\t\t\t\tsortable.isOver = 0;\n\t\t\t\t\tsortable.cancelHelperRemoval = true;\n\n\t\t\t\t\t// Calling sortable's mouseStop would trigger a revert,\n\t\t\t\t\t// so revert must be temporarily false until after mouseStop is called.\n\t\t\t\t\tsortable.options._revert = sortable.options.revert;\n\t\t\t\t\tsortable.options.revert = false;\n\n\t\t\t\t\tsortable._trigger( \"out\", event, sortable._uiHash( sortable ) );\n\t\t\t\t\tsortable._mouseStop( event, true );\n\n\t\t\t\t\t// Restore sortable behaviors that were modfied\n\t\t\t\t\t// when the draggable entered the sortable area (#9481)\n\t\t\t\t\tsortable.options.revert = sortable.options._revert;\n\t\t\t\t\tsortable.options.helper = sortable.options._helper;\n\n\t\t\t\t\tif ( sortable.placeholder ) {\n\t\t\t\t\t\tsortable.placeholder.remove();\n\t\t\t\t\t}\n\n\t\t\t\t\t// Restore and recalculate the draggable's offset considering the sortable\n\t\t\t\t\t// may have modified them in unexpected ways. (#8809, #10669)\n\t\t\t\t\tui.helper.appendTo( draggable._parent );\n\t\t\t\t\tdraggable._refreshOffsets( event );\n\t\t\t\t\tui.position = draggable._generatePosition( event, true );\n\n\t\t\t\t\tdraggable._trigger( \"fromSortable\", event );\n\n\t\t\t\t\t// Inform draggable that the helper is no longer in a valid drop zone\n\t\t\t\t\tdraggable.dropped = false;\n\n\t\t\t\t\t// Need to refreshPositions of all sortables just in case removing\n\t\t\t\t\t// from one sortable changes the location of other sortables (#9675)\n\t\t\t\t\t$.each( draggable.sortables, function() {\n\t\t\t\t\t\tthis.refreshPositions();\n\t\t\t\t\t} );\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\t}\n} );\n\n$.ui.plugin.add( \"draggable\", \"cursor\", {\n\tstart: function( event, ui, instance ) {\n\t\tvar t = $( \"body\" ),\n\t\t\to = instance.options;\n\n\t\tif ( t.css( \"cursor\" ) ) {\n\t\t\to._cursor = t.css( \"cursor\" );\n\t\t}\n\t\tt.css( \"cursor\", o.cursor );\n\t},\n\tstop: function( event, ui, instance ) {\n\t\tvar o = instance.options;\n\t\tif ( o._cursor ) {\n\t\t\t$( \"body\" ).css( \"cursor\", o._cursor );\n\t\t}\n\t}\n} );\n\n$.ui.plugin.add( \"draggable\", \"opacity\", {\n\tstart: function( event, ui, instance ) {\n\t\tvar t = $( ui.helper ),\n\t\t\to = instance.options;\n\t\tif ( t.css( \"opacity\" ) ) {\n\t\t\to._opacity = t.css( \"opacity\" );\n\t\t}\n\t\tt.css( \"opacity\", o.opacity );\n\t},\n\tstop: function( event, ui, instance ) {\n\t\tvar o = instance.options;\n\t\tif ( o._opacity ) {\n\t\t\t$( ui.helper ).css( \"opacity\", o._opacity );\n\t\t}\n\t}\n} );\n\n$.ui.plugin.add( \"draggable\", \"scroll\", {\n\tstart: function( event, ui, i ) {\n\t\tif ( !i.scrollParentNotHidden ) {\n\t\t\ti.scrollParentNotHidden = i.helper.scrollParent( false );\n\t\t}\n\n\t\tif ( i.scrollParentNotHidden[ 0 ] !== i.document[ 0 ] &&\n\t\t\t\ti.scrollParentNotHidden[ 0 ].tagName !== \"HTML\" ) {\n\t\t\ti.overflowOffset = i.scrollParentNotHidden.offset();\n\t\t}\n\t},\n\tdrag: function( event, ui, i  ) {\n\n\t\tvar o = i.options,\n\t\t\tscrolled = false,\n\t\t\tscrollParent = i.scrollParentNotHidden[ 0 ],\n\t\t\tdocument = i.document[ 0 ];\n\n\t\tif ( scrollParent !== document && scrollParent.tagName !== \"HTML\" ) {\n\t\t\tif ( !o.axis || o.axis !== \"x\" ) {\n\t\t\t\tif ( ( i.overflowOffset.top + scrollParent.offsetHeight ) - event.pageY <\n\t\t\t\t\t\to.scrollSensitivity ) {\n\t\t\t\t\tscrollParent.scrollTop = scrolled = scrollParent.scrollTop + o.scrollSpeed;\n\t\t\t\t} else if ( event.pageY - i.overflowOffset.top < o.scrollSensitivity ) {\n\t\t\t\t\tscrollParent.scrollTop = scrolled = scrollParent.scrollTop - o.scrollSpeed;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ( !o.axis || o.axis !== \"y\" ) {\n\t\t\t\tif ( ( i.overflowOffset.left + scrollParent.offsetWidth ) - event.pageX <\n\t\t\t\t\t\to.scrollSensitivity ) {\n\t\t\t\t\tscrollParent.scrollLeft = scrolled = scrollParent.scrollLeft + o.scrollSpeed;\n\t\t\t\t} else if ( event.pageX - i.overflowOffset.left < o.scrollSensitivity ) {\n\t\t\t\t\tscrollParent.scrollLeft = scrolled = scrollParent.scrollLeft - o.scrollSpeed;\n\t\t\t\t}\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tif ( !o.axis || o.axis !== \"x\" ) {\n\t\t\t\tif ( event.pageY - $( document ).scrollTop() < o.scrollSensitivity ) {\n\t\t\t\t\tscrolled = $( document ).scrollTop( $( document ).scrollTop() - o.scrollSpeed );\n\t\t\t\t} else if ( $( window ).height() - ( event.pageY - $( document ).scrollTop() ) <\n\t\t\t\t\t\to.scrollSensitivity ) {\n\t\t\t\t\tscrolled = $( document ).scrollTop( $( document ).scrollTop() + o.scrollSpeed );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ( !o.axis || o.axis !== \"y\" ) {\n\t\t\t\tif ( event.pageX - $( document ).scrollLeft() < o.scrollSensitivity ) {\n\t\t\t\t\tscrolled = $( document ).scrollLeft(\n\t\t\t\t\t\t$( document ).scrollLeft() - o.scrollSpeed\n\t\t\t\t\t);\n\t\t\t\t} else if ( $( window ).width() - ( event.pageX - $( document ).scrollLeft() ) <\n\t\t\t\t\t\to.scrollSensitivity ) {\n\t\t\t\t\tscrolled = $( document ).scrollLeft(\n\t\t\t\t\t\t$( document ).scrollLeft() + o.scrollSpeed\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\n\t\t}\n\n\t\tif ( scrolled !== false && $.ui.ddmanager && !o.dropBehaviour ) {\n\t\t\t$.ui.ddmanager.prepareOffsets( i, event );\n\t\t}\n\n\t}\n} );\n\n$.ui.plugin.add( \"draggable\", \"snap\", {\n\tstart: function( event, ui, i ) {\n\n\t\tvar o = i.options;\n\n\t\ti.snapElements = [];\n\n\t\t$( o.snap.constructor !== String ? ( o.snap.items || \":data(ui-draggable)\" ) : o.snap )\n\t\t\t.each( function() {\n\t\t\t\tvar $t = $( this ),\n\t\t\t\t\t$o = $t.offset();\n\t\t\t\tif ( this !== i.element[ 0 ] ) {\n\t\t\t\t\ti.snapElements.push( {\n\t\t\t\t\t\titem: this,\n\t\t\t\t\t\twidth: $t.outerWidth(), height: $t.outerHeight(),\n\t\t\t\t\t\ttop: $o.top, left: $o.left\n\t\t\t\t\t} );\n\t\t\t\t}\n\t\t\t} );\n\n\t},\n\tdrag: function( event, ui, inst ) {\n\n\t\tvar ts, bs, ls, rs, l, r, t, b, i, first,\n\t\t\to = inst.options,\n\t\t\td = o.snapTolerance,\n\t\t\tx1 = ui.offset.left, x2 = x1 + inst.helperProportions.width,\n\t\t\ty1 = ui.offset.top, y2 = y1 + inst.helperProportions.height;\n\n\t\tfor ( i = inst.snapElements.length - 1; i >= 0; i-- ) {\n\n\t\t\tl = inst.snapElements[ i ].left - inst.margins.left;\n\t\t\tr = l + inst.snapElements[ i ].width;\n\t\t\tt = inst.snapElements[ i ].top - inst.margins.top;\n\t\t\tb = t + inst.snapElements[ i ].height;\n\n\t\t\tif ( x2 < l - d || x1 > r + d || y2 < t - d || y1 > b + d ||\n\t\t\t\t\t!$.contains( inst.snapElements[ i ].item.ownerDocument,\n\t\t\t\t\tinst.snapElements[ i ].item ) ) {\n\t\t\t\tif ( inst.snapElements[ i ].snapping ) {\n\t\t\t\t\t( inst.options.snap.release &&\n\t\t\t\t\t\tinst.options.snap.release.call(\n\t\t\t\t\t\t\tinst.element,\n\t\t\t\t\t\t\tevent,\n\t\t\t\t\t\t\t$.extend( inst._uiHash(), { snapItem: inst.snapElements[ i ].item } )\n\t\t\t\t\t\t) );\n\t\t\t\t}\n\t\t\t\tinst.snapElements[ i ].snapping = false;\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif ( o.snapMode !== \"inner\" ) {\n\t\t\t\tts = Math.abs( t - y2 ) <= d;\n\t\t\t\tbs = Math.abs( b - y1 ) <= d;\n\t\t\t\tls = Math.abs( l - x2 ) <= d;\n\t\t\t\trs = Math.abs( r - x1 ) <= d;\n\t\t\t\tif ( ts ) {\n\t\t\t\t\tui.position.top = inst._convertPositionTo( \"relative\", {\n\t\t\t\t\t\ttop: t - inst.helperProportions.height,\n\t\t\t\t\t\tleft: 0\n\t\t\t\t\t} ).top;\n\t\t\t\t}\n\t\t\t\tif ( bs ) {\n\t\t\t\t\tui.position.top = inst._convertPositionTo( \"relative\", {\n\t\t\t\t\t\ttop: b,\n\t\t\t\t\t\tleft: 0\n\t\t\t\t\t} ).top;\n\t\t\t\t}\n\t\t\t\tif ( ls ) {\n\t\t\t\t\tui.position.left = inst._convertPositionTo( \"relative\", {\n\t\t\t\t\t\ttop: 0,\n\t\t\t\t\t\tleft: l - inst.helperProportions.width\n\t\t\t\t\t} ).left;\n\t\t\t\t}\n\t\t\t\tif ( rs ) {\n\t\t\t\t\tui.position.left = inst._convertPositionTo( \"relative\", {\n\t\t\t\t\t\ttop: 0,\n\t\t\t\t\t\tleft: r\n\t\t\t\t\t} ).left;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfirst = ( ts || bs || ls || rs );\n\n\t\t\tif ( o.snapMode !== \"outer\" ) {\n\t\t\t\tts = Math.abs( t - y1 ) <= d;\n\t\t\t\tbs = Math.abs( b - y2 ) <= d;\n\t\t\t\tls = Math.abs( l - x1 ) <= d;\n\t\t\t\trs = Math.abs( r - x2 ) <= d;\n\t\t\t\tif ( ts ) {\n\t\t\t\t\tui.position.top = inst._convertPositionTo( \"relative\", {\n\t\t\t\t\t\ttop: t,\n\t\t\t\t\t\tleft: 0\n\t\t\t\t\t} ).top;\n\t\t\t\t}\n\t\t\t\tif ( bs ) {\n\t\t\t\t\tui.position.top = inst._convertPositionTo( \"relative\", {\n\t\t\t\t\t\ttop: b - inst.helperProportions.height,\n\t\t\t\t\t\tleft: 0\n\t\t\t\t\t} ).top;\n\t\t\t\t}\n\t\t\t\tif ( ls ) {\n\t\t\t\t\tui.position.left = inst._convertPositionTo( \"relative\", {\n\t\t\t\t\t\ttop: 0,\n\t\t\t\t\t\tleft: l\n\t\t\t\t\t} ).left;\n\t\t\t\t}\n\t\t\t\tif ( rs ) {\n\t\t\t\t\tui.position.left = inst._convertPositionTo( \"relative\", {\n\t\t\t\t\t\ttop: 0,\n\t\t\t\t\t\tleft: r - inst.helperProportions.width\n\t\t\t\t\t} ).left;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ( !inst.snapElements[ i ].snapping && ( ts || bs || ls || rs || first ) ) {\n\t\t\t\t( inst.options.snap.snap &&\n\t\t\t\t\tinst.options.snap.snap.call(\n\t\t\t\t\t\tinst.element,\n\t\t\t\t\t\tevent,\n\t\t\t\t\t\t$.extend( inst._uiHash(), {\n\t\t\t\t\t\t\tsnapItem: inst.snapElements[ i ].item\n\t\t\t\t\t\t} ) ) );\n\t\t\t}\n\t\t\tinst.snapElements[ i ].snapping = ( ts || bs || ls || rs || first );\n\n\t\t}\n\n\t}\n} );\n\n$.ui.plugin.add( \"draggable\", \"stack\", {\n\tstart: function( event, ui, instance ) {\n\t\tvar min,\n\t\t\to = instance.options,\n\t\t\tgroup = $.makeArray( $( o.stack ) ).sort( function( a, b ) {\n\t\t\t\treturn ( parseInt( $( a ).css( \"zIndex\" ), 10 ) || 0 ) -\n\t\t\t\t\t( parseInt( $( b ).css( \"zIndex\" ), 10 ) || 0 );\n\t\t\t} );\n\n\t\tif ( !group.length ) { return; }\n\n\t\tmin = parseInt( $( group[ 0 ] ).css( \"zIndex\" ), 10 ) || 0;\n\t\t$( group ).each( function( i ) {\n\t\t\t$( this ).css( \"zIndex\", min + i );\n\t\t} );\n\t\tthis.css( \"zIndex\", ( min + group.length ) );\n\t}\n} );\n\n$.ui.plugin.add( \"draggable\", \"zIndex\", {\n\tstart: function( event, ui, instance ) {\n\t\tvar t = $( ui.helper ),\n\t\t\to = instance.options;\n\n\t\tif ( t.css( \"zIndex\" ) ) {\n\t\t\to._zIndex = t.css( \"zIndex\" );\n\t\t}\n\t\tt.css( \"zIndex\", o.zIndex );\n\t},\n\tstop: function( event, ui, instance ) {\n\t\tvar o = instance.options;\n\n\t\tif ( o._zIndex ) {\n\t\t\t$( ui.helper ).css( \"zIndex\", o._zIndex );\n\t\t}\n\t}\n} );\n\nvar widgetsDraggable = $.ui.draggable;\n\n\n\n\n}));\n})();\n"
  },
  {
    "path": "content/js/ionic-highlight.js",
    "content": "(function(factory) {\n\n  // Setup highlight.js for different environments. First is Node.js or\n  // CommonJS.\n  if(typeof exports !== 'undefined') {\n    factory(exports);\n  } else {\n    // Export hljs globally even when using AMD for cases when this script\n    // is loaded with others that may still expect a global hljs.\n    window.hljs = factory({});\n\n    // Finally register the global hljs with AMD.\n    if(typeof define === 'function' && define.amd) {\n      define('hljs', [], function() {\n        return window.hljs;\n      });\n    }\n  }\n\n}(function(hljs) {\n\n  /* Utility functions */\n\n  function escape(value) {\n    return value.replace(/&/gm, '&amp;').replace(/</gm, '&lt;').replace(/>/gm, '&gt;');\n  }\n\n  function tag(node) {\n    return node.nodeName.toLowerCase();\n  }\n\n  function testRe(re, lexeme) {\n    var match = re && re.exec(lexeme);\n    return match && match.index == 0;\n  }\n\n  function isNotHighlighted(language) {\n    return (/^(no-?highlight|plain|text)$/i).test(language);\n  }\n\n  function blockLanguage(block) {\n    var i, match, length,\n        classes = block.className + ' ';\n\n    classes += block.parentNode ? block.parentNode.className : '';\n\n    // language-* takes precedence over non-prefixed class names\n    match = (/\\blang(?:uage)?-([\\w-]+)\\b/i).exec(classes);\n    if (match) {\n      return getLanguage(match[1]) ? match[1] : 'no-highlight';\n    }\n\n    classes = classes.split(/\\s+/);\n    for (i = 0, length = classes.length; i < length; i++) {\n      if (getLanguage(classes[i]) || isNotHighlighted(classes[i])) {\n        return classes[i];\n      }\n    }\n  }\n\n  function inherit(parent, obj) {\n    var result = {}, key;\n    for (key in parent)\n      result[key] = parent[key];\n    if (obj)\n      for (key in obj)\n        result[key] = obj[key];\n    return result;\n  }\n\n  /* Stream merging */\n\n  function nodeStream(node) {\n    var result = [];\n    (function _nodeStream(node, offset) {\n      for (var child = node.firstChild; child; child = child.nextSibling) {\n        if (child.nodeType == 3)\n          offset += child.nodeValue.length;\n        else if (child.nodeType == 1) {\n          result.push({\n            event: 'start',\n            offset: offset,\n            node: child\n          });\n          offset = _nodeStream(child, offset);\n          // Prevent void elements from having an end tag that would actually\n          // double them in the output. There are more void elements in HTML\n          // but we list only those realistically expected in code display.\n          if (!tag(child).match(/br|hr|img|input/)) {\n            result.push({\n              event: 'stop',\n              offset: offset,\n              node: child\n            });\n          }\n        }\n      }\n      return offset;\n    })(node, 0);\n    return result;\n  }\n\n  function mergeStreams(original, highlighted, value) {\n    var processed = 0;\n    var result = '';\n    var nodeStack = [];\n\n    function selectStream() {\n      if (!original.length || !highlighted.length) {\n        return original.length ? original : highlighted;\n      }\n      if (original[0].offset != highlighted[0].offset) {\n        return (original[0].offset < highlighted[0].offset) ? original : highlighted;\n      }\n\n      /*\n      To avoid starting the stream just before it should stop the order is\n      ensured that original always starts first and closes last:\n\n      if (event1 == 'start' && event2 == 'start')\n        return original;\n      if (event1 == 'start' && event2 == 'stop')\n        return highlighted;\n      if (event1 == 'stop' && event2 == 'start')\n        return original;\n      if (event1 == 'stop' && event2 == 'stop')\n        return highlighted;\n\n      ... which is collapsed to:\n      */\n      return highlighted[0].event == 'start' ? original : highlighted;\n    }\n\n    function open(node) {\n      function attr_str(a) {return ' ' + a.nodeName + '=\"' + escape(a.value) + '\"';}\n      result += '<' + tag(node) + Array.prototype.map.call(node.attributes, attr_str).join('') + '>';\n    }\n\n    function close(node) {\n      result += '</' + tag(node) + '>';\n    }\n\n    function render(event) {\n      (event.event == 'start' ? open : close)(event.node);\n    }\n\n    while (original.length || highlighted.length) {\n      var stream = selectStream();\n      result += escape(value.substr(processed, stream[0].offset - processed));\n      processed = stream[0].offset;\n      if (stream == original) {\n        /*\n        On any opening or closing tag of the original markup we first close\n        the entire highlighted node stack, then render the original tag along\n        with all the following original tags at the same offset and then\n        reopen all the tags on the highlighted stack.\n        */\n        nodeStack.reverse().forEach(close);\n        do {\n          render(stream.splice(0, 1)[0]);\n          stream = selectStream();\n        } while (stream == original && stream.length && stream[0].offset == processed);\n        nodeStack.reverse().forEach(open);\n      } else {\n        if (stream[0].event == 'start') {\n          nodeStack.push(stream[0].node);\n        } else {\n          nodeStack.pop();\n        }\n        render(stream.splice(0, 1)[0]);\n      }\n    }\n    return result + escape(value.substr(processed));\n  }\n\n  /* Initialization */\n\n  function compileLanguage(language) {\n\n    function reStr(re) {\n        return (re && re.source) || re;\n    }\n\n    function langRe(value, global) {\n      return new RegExp(\n        reStr(value),\n        'm' + (language.case_insensitive ? 'i' : '') + (global ? 'g' : '')\n      );\n    }\n\n    function compileMode(mode, parent) {\n      if (mode.compiled)\n        return;\n      mode.compiled = true;\n\n      mode.keywords = mode.keywords || mode.beginKeywords;\n      if (mode.keywords) {\n        var compiled_keywords = {};\n\n        var flatten = function(className, str) {\n          if (language.case_insensitive) {\n            str = str.toLowerCase();\n          }\n          str.split(' ').forEach(function(kw) {\n            var pair = kw.split('|');\n            compiled_keywords[pair[0]] = [className, pair[1] ? Number(pair[1]) : 1];\n          });\n        };\n\n        if (typeof mode.keywords == 'string') { // string\n          flatten('keyword', mode.keywords);\n        } else {\n          Object.keys(mode.keywords).forEach(function (className) {\n            flatten(className, mode.keywords[className]);\n          });\n        }\n        mode.keywords = compiled_keywords;\n      }\n      mode.lexemesRe = langRe(mode.lexemes || /\\b\\w+\\b/, true);\n\n      if (parent) {\n        if (mode.beginKeywords) {\n          mode.begin = '\\\\b(' + mode.beginKeywords.split(' ').join('|') + ')\\\\b';\n        }\n        if (!mode.begin)\n          mode.begin = /\\B|\\b/;\n        mode.beginRe = langRe(mode.begin);\n        if (!mode.end && !mode.endsWithParent)\n          mode.end = /\\B|\\b/;\n        if (mode.end)\n          mode.endRe = langRe(mode.end);\n        mode.terminator_end = reStr(mode.end) || '';\n        if (mode.endsWithParent && parent.terminator_end)\n          mode.terminator_end += (mode.end ? '|' : '') + parent.terminator_end;\n      }\n      if (mode.illegal)\n        mode.illegalRe = langRe(mode.illegal);\n      if (mode.relevance === undefined)\n        mode.relevance = 1;\n      if (!mode.contains) {\n        mode.contains = [];\n      }\n      var expanded_contains = [];\n      mode.contains.forEach(function(c) {\n        if (c.variants) {\n          c.variants.forEach(function(v) {expanded_contains.push(inherit(c, v));});\n        } else {\n          expanded_contains.push(c == 'self' ? mode : c);\n        }\n      });\n      mode.contains = expanded_contains;\n      mode.contains.forEach(function(c) {compileMode(c, mode);});\n\n      if (mode.starts) {\n        compileMode(mode.starts, parent);\n      }\n\n      var terminators =\n        mode.contains.map(function(c) {\n          return c.beginKeywords ? '\\\\.?(' + c.begin + ')\\\\.?' : c.begin;\n        })\n        .concat([mode.terminator_end, mode.illegal])\n        .map(reStr)\n        .filter(Boolean);\n      mode.terminators = terminators.length ? langRe(terminators.join('|'), true) : {exec: function(/*s*/) {return null;}};\n    }\n\n    compileMode(language);\n  }\n\n  /*\n  Core highlighting function. Accepts a language name, or an alias, and a\n  string with the code to highlight. Returns an object with the following\n  properties:\n\n  - relevance (int)\n  - value (an HTML string with highlighting markup)\n\n  */\n  function highlight(name, value, ignore_illegals, continuation) {\n\n    function subMode(lexeme, mode) {\n      for (var i = 0; i < mode.contains.length; i++) {\n        if (testRe(mode.contains[i].beginRe, lexeme)) {\n          return mode.contains[i];\n        }\n      }\n    }\n\n    function endOfMode(mode, lexeme) {\n      if (testRe(mode.endRe, lexeme)) {\n        while (mode.endsParent && mode.parent) {\n          mode = mode.parent;\n        }\n        return mode;\n      }\n      if (mode.endsWithParent) {\n        return endOfMode(mode.parent, lexeme);\n      }\n    }\n\n    function isIllegal(lexeme, mode) {\n      return !ignore_illegals && testRe(mode.illegalRe, lexeme);\n    }\n\n    function keywordMatch(mode, match) {\n      var match_str = language.case_insensitive ? match[0].toLowerCase() : match[0];\n      return mode.keywords.hasOwnProperty(match_str) && mode.keywords[match_str];\n    }\n\n    function buildSpan(classname, insideSpan, leaveOpen, noPrefix) {\n      var classPrefix = noPrefix ? '' : options.classPrefix,\n          openSpan    = '<span class=\"' + classPrefix,\n          closeSpan   = leaveOpen ? '' : '</span>';\n\n      openSpan += classname + '\">';\n\n      return openSpan + insideSpan + closeSpan;\n    }\n\n    function processKeywords() {\n      if (!top.keywords)\n        return escape(mode_buffer);\n      var result = '';\n      var last_index = 0;\n      top.lexemesRe.lastIndex = 0;\n      var match = top.lexemesRe.exec(mode_buffer);\n      while (match) {\n        result += escape(mode_buffer.substr(last_index, match.index - last_index));\n        var keyword_match = keywordMatch(top, match);\n        if (keyword_match) {\n          relevance += keyword_match[1];\n          result += buildSpan(keyword_match[0], escape(match[0]));\n        } else {\n          result += escape(match[0]);\n        }\n        last_index = top.lexemesRe.lastIndex;\n        match = top.lexemesRe.exec(mode_buffer);\n      }\n      return result + escape(mode_buffer.substr(last_index));\n    }\n\n    function processSubLanguage() {\n      var explicit = typeof top.subLanguage == 'string';\n      if (explicit && !languages[top.subLanguage]) {\n        return escape(mode_buffer);\n      }\n\n      var result = explicit ?\n                   highlight(top.subLanguage, mode_buffer, true, continuations[top.subLanguage]) :\n                   highlightAuto(mode_buffer, top.subLanguage.length ? top.subLanguage : undefined);\n\n      // Counting embedded language score towards the host language may be disabled\n      // with zeroing the containing mode relevance. Usecase in point is Markdown that\n      // allows XML everywhere and makes every XML snippet to have a much larger Markdown\n      // score.\n      if (top.relevance > 0) {\n        relevance += result.relevance;\n      }\n      if (explicit) {\n        continuations[top.subLanguage] = result.top;\n      }\n      return buildSpan(result.language, result.value, false, true);\n    }\n\n    function processBuffer() {\n      return top.subLanguage !== undefined ? processSubLanguage() : processKeywords();\n    }\n\n    function startNewMode(mode, lexeme) {\n      var markup = mode.className? buildSpan(mode.className, '', true): '';\n      if (mode.returnBegin) {\n        result += markup;\n        mode_buffer = '';\n      } else if (mode.excludeBegin) {\n        result += escape(lexeme) + markup;\n        mode_buffer = '';\n      } else {\n        result += markup;\n        mode_buffer = lexeme;\n      }\n      top = Object.create(mode, {parent: {value: top}});\n    }\n\n    function processLexeme(buffer, lexeme) {\n\n      mode_buffer += buffer;\n      if (lexeme === undefined) {\n        result += processBuffer();\n        return 0;\n      }\n\n      var new_mode = subMode(lexeme, top);\n      if (new_mode) {\n        result += processBuffer();\n        startNewMode(new_mode, lexeme);\n        return new_mode.returnBegin ? 0 : lexeme.length;\n      }\n\n      var end_mode = endOfMode(top, lexeme);\n      if (end_mode) {\n        var origin = top;\n        if (!(origin.returnEnd || origin.excludeEnd)) {\n          mode_buffer += lexeme;\n        }\n        result += processBuffer();\n        do {\n          if (top.className) {\n            result += '</span>';\n          }\n          relevance += top.relevance;\n          top = top.parent;\n        } while (top != end_mode.parent);\n        if (origin.excludeEnd) {\n          result += escape(lexeme);\n        }\n        mode_buffer = '';\n        if (end_mode.starts) {\n          startNewMode(end_mode.starts, '');\n        }\n        return origin.returnEnd ? 0 : lexeme.length;\n      }\n\n      if (isIllegal(lexeme, top))\n        throw new Error('Illegal lexeme \"' + lexeme + '\" for mode \"' + (top.className || '<unnamed>') + '\"');\n\n      /*\n      Parser should not reach this point as all types of lexemes should be caught\n      earlier, but if it does due to some bug make sure it advances at least one\n      character forward to prevent infinite looping.\n      */\n      mode_buffer += lexeme;\n      return lexeme.length || 1;\n    }\n\n    var language = getLanguage(name);\n    if (!language) {\n      throw new Error('Unknown language: \"' + name + '\"');\n    }\n\n    compileLanguage(language);\n    var top = continuation || language;\n    var continuations = {}; // keep continuations for sub-languages\n    var result = '', current;\n    for(current = top; current != language; current = current.parent) {\n      if (current.className) {\n        result = buildSpan(current.className, '', true) + result;\n      }\n    }\n    var mode_buffer = '';\n    var relevance = 0;\n    try {\n      var match, count, index = 0;\n      while (true) {\n        top.terminators.lastIndex = index;\n        match = top.terminators.exec(value);\n        if (!match)\n          break;\n        count = processLexeme(value.substr(index, match.index - index), match[0]);\n        index = match.index + count;\n      }\n      processLexeme(value.substr(index));\n      for(current = top; current.parent; current = current.parent) { // close dangling modes\n        if (current.className) {\n          result += '</span>';\n        }\n      }\n      return {\n        relevance: relevance,\n        value: result,\n        language: name,\n        top: top\n      };\n    } catch (e) {\n      if (e.message.indexOf('Illegal') != -1) {\n        return {\n          relevance: 0,\n          value: escape(value)\n        };\n      } else {\n        throw e;\n      }\n    }\n  }\n\n  /*\n  Highlighting with language detection. Accepts a string with the code to\n  highlight. Returns an object with the following properties:\n\n  - language (detected language)\n  - relevance (int)\n  - value (an HTML string with highlighting markup)\n  - second_best (object with the same structure for second-best heuristically\n    detected language, may be absent)\n\n  */\n  function highlightAuto(text, languageSubset) {\n    languageSubset = languageSubset || options.languages || Object.keys(languages);\n    var result = {\n      relevance: 0,\n      value: escape(text)\n    };\n    var second_best = result;\n    languageSubset.forEach(function(name) {\n      if (!getLanguage(name)) {\n        return;\n      }\n      var current = highlight(name, text, false);\n      current.language = name;\n      if (current.relevance > second_best.relevance) {\n        second_best = current;\n      }\n      if (current.relevance > result.relevance) {\n        second_best = result;\n        result = current;\n      }\n    });\n    if (second_best.language) {\n      result.second_best = second_best;\n    }\n    return result;\n  }\n\n  /*\n  Post-processing of the highlighted markup:\n\n  - replace TABs with something more useful\n  - replace real line-breaks with '<br>' for non-pre containers\n\n  */\n  function fixMarkup(value) {\n    if (options.tabReplace) {\n      value = value.replace(/^((<[^>]+>|\\t)+)/gm, function(match, p1 /*..., offset, s*/) {\n        return p1.replace(/\\t/g, options.tabReplace);\n      });\n    }\n    if (options.useBR) {\n      value = value.replace(/\\n/g, '<br>');\n    }\n    return value;\n  }\n\n  function buildClassName(prevClassName, currentLang, resultLang) {\n    var language = currentLang ? aliases[currentLang] : resultLang,\n        result   = [prevClassName.trim()];\n\n    if (!prevClassName.match(/\\bhljs\\b/)) {\n      result.push('hljs');\n    }\n\n    if (prevClassName.indexOf(language) === -1) {\n      result.push(language);\n    }\n\n    return result.join(' ').trim();\n  }\n\n  /*\n  Applies highlighting to a DOM node containing code. Accepts a DOM node and\n  two optional parameters for fixMarkup.\n  */\n  function highlightBlock(block) {\n    var language = blockLanguage(block);\n    if (isNotHighlighted(language))\n        return;\n\n    var node;\n    if (options.useBR) {\n      node = document.createElementNS('http://www.w3.org/1999/xhtml', 'div');\n      node.innerHTML = block.innerHTML.replace(/\\n/g, '').replace(/<br[ \\/]*>/g, '\\n');\n    } else {\n      node = block;\n    }\n    var text = node.textContent;\n    var result = language ? highlight(language, text, true) : highlightAuto(text);\n\n    var originalStream = nodeStream(node);\n    if (originalStream.length) {\n      var resultNode = document.createElementNS('http://www.w3.org/1999/xhtml', 'div');\n      resultNode.innerHTML = result.value;\n      result.value = mergeStreams(originalStream, nodeStream(resultNode), text);\n    }\n    result.value = fixMarkup(result.value);\n\n    block.innerHTML = result.value;\n    block.className = buildClassName(block.className, language, result.language);\n    block.result = {\n      language: result.language,\n      re: result.relevance\n    };\n    if (result.second_best) {\n      block.second_best = {\n        language: result.second_best.language,\n        re: result.second_best.relevance\n      };\n    }\n  }\n\n  var options = {\n    classPrefix: 'hljs-',\n    tabReplace: null,\n    useBR: false,\n    languages: undefined\n  };\n\n  /*\n  Updates highlight.js global options with values passed in the form of an object\n  */\n  function configure(user_options) {\n    options = inherit(options, user_options);\n  }\n\n  /*\n  Applies highlighting to all <pre><code>..</code></pre> blocks on a page.\n  */\n  function initHighlighting() {\n    if (initHighlighting.called)\n      return;\n    initHighlighting.called = true;\n\n    var blocks = document.querySelectorAll('pre code');\n    Array.prototype.forEach.call(blocks, highlightBlock);\n  }\n\n  /*\n  Attaches highlighting to the page load event.\n  */\n  function initHighlightingOnLoad() {\n    addEventListener('DOMContentLoaded', initHighlighting, false);\n    addEventListener('load', initHighlighting, false);\n  }\n\n  var languages = {};\n  var aliases = {};\n\n  function registerLanguage(name, language) {\n    var lang = languages[name] = language(hljs);\n    if (lang.aliases) {\n      lang.aliases.forEach(function(alias) {aliases[alias] = name;});\n    }\n  }\n\n  function listLanguages() {\n    return Object.keys(languages);\n  }\n\n  function getLanguage(name) {\n    name = (name || '').toLowerCase();\n    return languages[name] || languages[aliases[name]];\n  }\n\n  /* Interface definition */\n\n  hljs.highlight = highlight;\n  hljs.highlightAuto = highlightAuto;\n  hljs.fixMarkup = fixMarkup;\n  hljs.highlightBlock = highlightBlock;\n  hljs.configure = configure;\n  hljs.initHighlighting = initHighlighting;\n  hljs.initHighlightingOnLoad = initHighlightingOnLoad;\n  hljs.registerLanguage = registerLanguage;\n  hljs.listLanguages = listLanguages;\n  hljs.getLanguage = getLanguage;\n  hljs.inherit = inherit;\n\n  // Common regexps\n  hljs.IDENT_RE = '[a-zA-Z]\\\\w*';\n  hljs.UNDERSCORE_IDENT_RE = '[a-zA-Z_]\\\\w*';\n  hljs.NUMBER_RE = '\\\\b\\\\d+(\\\\.\\\\d+)?';\n  hljs.C_NUMBER_RE = '(\\\\b0[xX][a-fA-F0-9]+|(\\\\b\\\\d+(\\\\.\\\\d*)?|\\\\.\\\\d+)([eE][-+]?\\\\d+)?)'; // 0x..., 0..., decimal, float\n  hljs.BINARY_NUMBER_RE = '\\\\b(0b[01]+)'; // 0b...\n  hljs.RE_STARTERS_RE = '!|!=|!==|%|%=|&|&&|&=|\\\\*|\\\\*=|\\\\+|\\\\+=|,|-|-=|/=|/|:|;|<<|<<=|<=|<|===|==|=|>>>=|>>=|>=|>>>|>>|>|\\\\?|\\\\[|\\\\{|\\\\(|\\\\^|\\\\^=|\\\\||\\\\|=|\\\\|\\\\||~';\n\n  // Common modes\n  hljs.BACKSLASH_ESCAPE = {\n    begin: '\\\\\\\\[\\\\s\\\\S]', relevance: 0\n  };\n  hljs.APOS_STRING_MODE = {\n    className: 'string',\n    begin: '\\'', end: '\\'',\n    illegal: '\\\\n',\n    contains: [hljs.BACKSLASH_ESCAPE]\n  };\n  hljs.QUOTE_STRING_MODE = {\n    className: 'string',\n    begin: '\"', end: '\"',\n    illegal: '\\\\n',\n    contains: [hljs.BACKSLASH_ESCAPE]\n  };\n  hljs.PHRASAL_WORDS_MODE = {\n    begin: /\\b(a|an|the|are|I|I'm|isn't|don't|doesn't|won't|but|just|should|pretty|simply|enough|gonna|going|wtf|so|such|will|you|your|like)\\b/\n  };\n  hljs.COMMENT = function (begin, end, inherits) {\n    var mode = hljs.inherit(\n      {\n        className: 'comment',\n        begin: begin, end: end,\n        contains: []\n      },\n      inherits || {}\n    );\n    mode.contains.push(hljs.PHRASAL_WORDS_MODE);\n    mode.contains.push({\n      className: 'doctag',\n      begin: \"(?:TODO|FIXME|NOTE|BUG|XXX):\",\n      relevance: 0\n    });\n    return mode;\n  };\n  hljs.C_LINE_COMMENT_MODE = hljs.COMMENT('//', '$');\n  hljs.C_BLOCK_COMMENT_MODE = hljs.COMMENT('/\\\\*', '\\\\*/');\n  hljs.HASH_COMMENT_MODE = hljs.COMMENT('#', '$');\n  hljs.NUMBER_MODE = {\n    className: 'number',\n    begin: hljs.NUMBER_RE,\n    relevance: 0\n  };\n  hljs.C_NUMBER_MODE = {\n    className: 'number',\n    begin: hljs.C_NUMBER_RE,\n    relevance: 0\n  };\n  hljs.BINARY_NUMBER_MODE = {\n    className: 'number',\n    begin: hljs.BINARY_NUMBER_RE,\n    relevance: 0\n  };\n  hljs.CSS_NUMBER_MODE = {\n    className: 'number',\n    begin: hljs.NUMBER_RE + '(' +\n      '%|em|ex|ch|rem'  +\n      '|vw|vh|vmin|vmax' +\n      '|cm|mm|in|pt|pc|px' +\n      '|deg|grad|rad|turn' +\n      '|s|ms' +\n      '|Hz|kHz' +\n      '|dpi|dpcm|dppx' +\n      ')?',\n    relevance: 0\n  };\n  hljs.REGEXP_MODE = {\n    className: 'regexp',\n    begin: /\\//, end: /\\/[gimuy]*/,\n    illegal: /\\n/,\n    contains: [\n      hljs.BACKSLASH_ESCAPE,\n      {\n        begin: /\\[/, end: /\\]/,\n        relevance: 0,\n        contains: [hljs.BACKSLASH_ESCAPE]\n      }\n    ]\n  };\n  hljs.TITLE_MODE = {\n    className: 'title',\n    begin: hljs.IDENT_RE,\n    relevance: 0\n  };\n  hljs.UNDERSCORE_TITLE_MODE = {\n    className: 'title',\n    begin: hljs.UNDERSCORE_IDENT_RE,\n    relevance: 0\n  };\n\nhljs.registerLanguage('bash', function(hljs) {\n  var VAR = {\n    className: 'variable',\n    variants: [\n      {begin: /\\$[\\w\\d#@][\\w\\d_]*/},\n      {begin: /\\$\\{(.*?)}/}\n    ]\n  };\n  var QUOTE_STRING = {\n    className: 'string',\n    begin: /\"/, end: /\"/,\n    contains: [\n      hljs.BACKSLASH_ESCAPE,\n      VAR,\n      {\n        className: 'variable',\n        begin: /\\$\\(/, end: /\\)/,\n        contains: [hljs.BACKSLASH_ESCAPE]\n      }\n    ]\n  };\n  var APOS_STRING = {\n    className: 'string',\n    begin: /'/, end: /'/\n  };\n\n  return {\n    aliases: ['sh', 'zsh'],\n    lexemes: /-?[a-z\\.]+/,\n    keywords: {\n      keyword:\n        'if then else elif fi for while in do done case esac function',\n      literal:\n        'true false',\n      built_in:\n        // Shell built-ins\n        // http://www.gnu.org/software/bash/manual/html_node/Shell-Builtin-Commands.html\n        'break cd continue eval exec exit export getopts hash pwd readonly return shift test times ' +\n        'trap umask unset ' +\n        // Bash built-ins\n        'alias bind builtin caller command declare echo enable help let local logout mapfile printf ' +\n        'read readarray source type typeset ulimit unalias ' +\n        // Shell modifiers\n        'set shopt ' +\n        // Zsh built-ins\n        'autoload bg bindkey bye cap chdir clone comparguments compcall compctl compdescribe compfiles ' +\n        'compgroups compquote comptags comptry compvalues dirs disable disown echotc echoti emulate ' +\n        'fc fg float functions getcap getln history integer jobs kill limit log noglob popd print ' +\n        'pushd pushln rehash sched setcap setopt stat suspend ttyctl unfunction unhash unlimit ' +\n        'unsetopt vared wait whence where which zcompile zformat zftp zle zmodload zparseopts zprof ' +\n        'zpty zregexparse zsocket zstyle ztcp',\n      operator:\n        '-ne -eq -lt -gt -f -d -e -s -l -a' // relevance booster\n    },\n    contains: [\n      {\n        className: 'shebang',\n        begin: /^#![^\\n]+sh\\s*$/,\n        relevance: 10\n      },\n      {\n        className: 'function',\n        begin: /\\w[\\w\\d_]*\\s*\\(\\s*\\)\\s*\\{/,\n        returnBegin: true,\n        contains: [hljs.inherit(hljs.TITLE_MODE, {begin: /\\w[\\w\\d_]*/})],\n        relevance: 0\n      },\n      hljs.HASH_COMMENT_MODE,\n      hljs.NUMBER_MODE,\n      QUOTE_STRING,\n      APOS_STRING,\n      VAR\n    ]\n  };\n});\n\nhljs.registerLanguage('css', function(hljs) {\n  var IDENT_RE = '[a-zA-Z-][a-zA-Z0-9_-]*';\n  var FUNCTION = {\n    className: 'function',\n    begin: IDENT_RE + '\\\\(',\n    returnBegin: true,\n    excludeEnd: true,\n    end: '\\\\('\n  };\n  var RULE = {\n    className: 'rule',\n    begin: /[A-Z\\_\\.\\-]+\\s*:/, returnBegin: true, end: ';', endsWithParent: true,\n    contains: [\n      {\n        className: 'attribute',\n        begin: /\\S/, end: ':', excludeEnd: true,\n        starts: {\n          className: 'value',\n          endsWithParent: true, excludeEnd: true,\n          contains: [\n            FUNCTION,\n            hljs.CSS_NUMBER_MODE,\n            hljs.QUOTE_STRING_MODE,\n            hljs.APOS_STRING_MODE,\n            hljs.C_BLOCK_COMMENT_MODE,\n            {\n              className: 'hexcolor', begin: '#[0-9A-Fa-f]+'\n            },\n            {\n              className: 'important', begin: '!important'\n            }\n          ]\n        }\n      }\n    ]\n  };\n\n  return {\n    case_insensitive: true,\n    illegal: /[=\\/|'\\$]/,\n    contains: [\n      hljs.C_BLOCK_COMMENT_MODE,\n      {\n        className: 'id', begin: /\\#[A-Za-z0-9_-]+/\n      },\n      {\n        className: 'class', begin: /\\.[A-Za-z0-9_-]+/\n      },\n      {\n        className: 'attr_selector',\n        begin: /\\[/, end: /\\]/,\n        illegal: '$'\n      },\n      {\n        className: 'pseudo',\n        begin: /:(:)?[a-zA-Z0-9\\_\\-\\+\\(\\)\"']+/\n      },\n      {\n        className: 'at_rule',\n        begin: '@(font-face|page)',\n        lexemes: '[a-z-]+',\n        keywords: 'font-face page'\n      },\n      {\n        className: 'at_rule',\n        begin: '@', end: '[{;]', // at_rule eating first \"{\" is a good thing\n                                 // because it doesn’t let it to be parsed as\n                                 // a rule set but instead drops parser into\n                                 // the default mode which is how it should be.\n        contains: [\n          {\n            className: 'keyword',\n            begin: /\\S+/\n          },\n          {\n            begin: /\\s/, endsWithParent: true, excludeEnd: true,\n            relevance: 0,\n            contains: [\n              FUNCTION,\n              hljs.APOS_STRING_MODE, hljs.QUOTE_STRING_MODE,\n              hljs.CSS_NUMBER_MODE\n            ]\n          }\n        ]\n      },\n      {\n        className: 'tag', begin: IDENT_RE,\n        relevance: 0\n      },\n      {\n        className: 'rules',\n        begin: '{', end: '}',\n        illegal: /\\S/,\n        contains: [\n          hljs.C_BLOCK_COMMENT_MODE,\n          RULE,\n        ]\n      }\n    ]\n  };\n});\n\nhljs.registerLanguage('javascript', function(hljs) {\n  return {\n    aliases: ['js'],\n    keywords: {\n      keyword:\n        'in of if for while finally var new function do return void else break catch ' +\n        'instanceof with throw case default try this switch continue typeof delete ' +\n        'let yield const export super debugger as async await',\n      literal:\n        'true false null undefined NaN Infinity',\n      built_in:\n        'eval isFinite isNaN parseFloat parseInt decodeURI decodeURIComponent ' +\n        'encodeURI encodeURIComponent escape unescape Object Function Boolean Error ' +\n        'EvalError InternalError RangeError ReferenceError StopIteration SyntaxError ' +\n        'TypeError URIError Number Math Date String RegExp Array Float32Array ' +\n        'Float64Array Int16Array Int32Array Int8Array Uint16Array Uint32Array ' +\n        'Uint8Array Uint8ClampedArray ArrayBuffer DataView JSON Intl arguments require ' +\n        'module console window document Symbol Set Map WeakSet WeakMap Proxy Reflect ' +\n        'Promise'\n    },\n    contains: [\n      {\n        className: 'pi',\n        relevance: 10,\n        begin: /^\\s*['\"]use (strict|asm)['\"]/\n      },\n      hljs.APOS_STRING_MODE,\n      hljs.QUOTE_STRING_MODE,\n      { // template string\n        className: 'string',\n        begin: '`', end: '`',\n        contains: [\n          hljs.BACKSLASH_ESCAPE,\n          {\n            className: 'subst',\n            begin: '\\\\$\\\\{', end: '\\\\}'\n          }\n        ]\n      },\n      hljs.C_LINE_COMMENT_MODE,\n      hljs.C_BLOCK_COMMENT_MODE,\n      {\n        className: 'number',\n        variants: [\n          { begin: '\\\\b(0[bB][01]+)' },\n          { begin: '\\\\b(0[oO][0-7]+)' },\n          { begin: hljs.C_NUMBER_RE }\n        ],\n        relevance: 0\n      },\n      { // \"value\" container\n        begin: '(' + hljs.RE_STARTERS_RE + '|\\\\b(case|return|throw)\\\\b)\\\\s*',\n        keywords: 'return throw case',\n        contains: [\n          hljs.C_LINE_COMMENT_MODE,\n          hljs.C_BLOCK_COMMENT_MODE,\n          hljs.REGEXP_MODE,\n          { // E4X / JSX\n            begin: /</, end: />\\s*[);\\]]/,\n            relevance: 0,\n            subLanguage: 'xml'\n          }\n        ],\n        relevance: 0\n      },\n      {\n        className: 'function',\n        beginKeywords: 'function', end: /\\{/, excludeEnd: true,\n        contains: [\n          hljs.inherit(hljs.TITLE_MODE, {begin: /[A-Za-z$_][0-9A-Za-z$_]*/}),\n          {\n            className: 'params',\n            begin: /\\(/, end: /\\)/,\n            excludeBegin: true,\n            excludeEnd: true,\n            contains: [\n              hljs.C_LINE_COMMENT_MODE,\n              hljs.C_BLOCK_COMMENT_MODE\n            ]\n          }\n        ],\n        illegal: /\\[|%/\n      },\n      {\n        begin: /\\$[(.]/ // relevance booster for a pattern common to JS libs: `$(something)` and `$.something`\n      },\n      {\n        begin: '\\\\.' + hljs.IDENT_RE, relevance: 0 // hack: prevents detection of keywords after dots\n      },\n      // ECMAScript 6 modules import\n      {\n        beginKeywords: 'import', end: '[;$]',\n        keywords: 'import from as',\n        contains: [\n          hljs.APOS_STRING_MODE,\n          hljs.QUOTE_STRING_MODE\n        ]\n      },\n      { // ES6 class\n        className: 'class',\n        beginKeywords: 'class', end: /[{;=]/, excludeEnd: true,\n        illegal: /[:\"\\[\\]]/,\n        contains: [\n          {beginKeywords: 'extends'},\n          hljs.UNDERSCORE_TITLE_MODE\n        ]\n      }\n    ],\n    illegal: /#/\n  };\n});\n\nhljs.registerLanguage('scss', function(hljs) {\n  var IDENT_RE = '[a-zA-Z-][a-zA-Z0-9_-]*';\n  var VARIABLE = {\n    className: 'variable',\n    begin: '(\\\\$' + IDENT_RE + ')\\\\b'\n  };\n  var FUNCTION = {\n    className: 'function',\n    begin: IDENT_RE + '\\\\(',\n    returnBegin: true,\n    excludeEnd: true,\n    end: '\\\\('\n  };\n  var HEXCOLOR = {\n    className: 'hexcolor', begin: '#[0-9A-Fa-f]+'\n  };\n  var DEF_INTERNALS = {\n    className: 'attribute',\n    begin: '[A-Z\\\\_\\\\.\\\\-]+', end: ':',\n    excludeEnd: true,\n    illegal: '[^\\\\s]',\n    starts: {\n      className: 'value',\n      endsWithParent: true, excludeEnd: true,\n      contains: [\n        FUNCTION,\n        HEXCOLOR,\n        hljs.CSS_NUMBER_MODE,\n        hljs.QUOTE_STRING_MODE,\n        hljs.APOS_STRING_MODE,\n        hljs.C_BLOCK_COMMENT_MODE,\n        {\n          className: 'important', begin: '!important'\n        }\n      ]\n    }\n  };\n  return {\n    case_insensitive: true,\n    illegal: '[=/|\\']',\n    contains: [\n      hljs.C_LINE_COMMENT_MODE,\n      hljs.C_BLOCK_COMMENT_MODE,\n      FUNCTION,\n      {\n        className: 'id', begin: '\\\\#[A-Za-z0-9_-]+',\n        relevance: 0\n      },\n      {\n        className: 'class', begin: '\\\\.[A-Za-z0-9_-]+',\n        relevance: 0\n      },\n      {\n        className: 'attr_selector',\n        begin: '\\\\[', end: '\\\\]',\n        illegal: '$'\n      },\n      {\n        className: 'tag', // begin: IDENT_RE, end: '[,|\\\\s]'\n        begin: '\\\\b(a|abbr|acronym|address|area|article|aside|audio|b|base|big|blockquote|body|br|button|canvas|caption|cite|code|col|colgroup|command|datalist|dd|del|details|dfn|div|dl|dt|em|embed|fieldset|figcaption|figure|footer|form|frame|frameset|(h[1-6])|head|header|hgroup|hr|html|i|iframe|img|input|ins|kbd|keygen|label|legend|li|link|map|mark|meta|meter|nav|noframes|noscript|object|ol|optgroup|option|output|p|param|pre|progress|q|rp|rt|ruby|samp|script|section|select|small|span|strike|strong|style|sub|sup|table|tbody|td|textarea|tfoot|th|thead|time|title|tr|tt|ul|var|video)\\\\b',\n        relevance: 0\n      },\n      {\n        className: 'pseudo',\n        begin: ':(visited|valid|root|right|required|read-write|read-only|out-range|optional|only-of-type|only-child|nth-of-type|nth-last-of-type|nth-last-child|nth-child|not|link|left|last-of-type|last-child|lang|invalid|indeterminate|in-range|hover|focus|first-of-type|first-line|first-letter|first-child|first|enabled|empty|disabled|default|checked|before|after|active)'\n      },\n      {\n        className: 'pseudo',\n        begin: '::(after|before|choices|first-letter|first-line|repeat-index|repeat-item|selection|value)'\n      },\n      VARIABLE,\n      {\n        className: 'attribute',\n        begin: '\\\\b(z-index|word-wrap|word-spacing|word-break|width|widows|white-space|visibility|vertical-align|unicode-bidi|transition-timing-function|transition-property|transition-duration|transition-delay|transition|transform-style|transform-origin|transform|top|text-underline-position|text-transform|text-shadow|text-rendering|text-overflow|text-indent|text-decoration-style|text-decoration-line|text-decoration-color|text-decoration|text-align-last|text-align|tab-size|table-layout|right|resize|quotes|position|pointer-events|perspective-origin|perspective|page-break-inside|page-break-before|page-break-after|padding-top|padding-right|padding-left|padding-bottom|padding|overflow-y|overflow-x|overflow-wrap|overflow|outline-width|outline-style|outline-offset|outline-color|outline|orphans|order|opacity|object-position|object-fit|normal|none|nav-up|nav-right|nav-left|nav-index|nav-down|min-width|min-height|max-width|max-height|mask|marks|margin-top|margin-right|margin-left|margin-bottom|margin|list-style-type|list-style-position|list-style-image|list-style|line-height|letter-spacing|left|justify-content|initial|inherit|ime-mode|image-orientation|image-resolution|image-rendering|icon|hyphens|height|font-weight|font-variant-ligatures|font-variant|font-style|font-stretch|font-size-adjust|font-size|font-language-override|font-kerning|font-feature-settings|font-family|font|float|flex-wrap|flex-shrink|flex-grow|flex-flow|flex-direction|flex-basis|flex|filter|empty-cells|display|direction|cursor|counter-reset|counter-increment|content|column-width|column-span|column-rule-width|column-rule-style|column-rule-color|column-rule|column-gap|column-fill|column-count|columns|color|clip-path|clip|clear|caption-side|break-inside|break-before|break-after|box-sizing|box-shadow|box-decoration-break|bottom|border-width|border-top-width|border-top-style|border-top-right-radius|border-top-left-radius|border-top-color|border-top|border-style|border-spacing|border-right-width|border-right-style|border-right-color|border-right|border-radius|border-left-width|border-left-style|border-left-color|border-left|border-image-width|border-image-source|border-image-slice|border-image-repeat|border-image-outset|border-image|border-color|border-collapse|border-bottom-width|border-bottom-style|border-bottom-right-radius|border-bottom-left-radius|border-bottom-color|border-bottom|border|background-size|background-repeat|background-position|background-origin|background-image|background-color|background-clip|background-attachment|background-blend-mode|background|backface-visibility|auto|animation-timing-function|animation-play-state|animation-name|animation-iteration-count|animation-fill-mode|animation-duration|animation-direction|animation-delay|animation|align-self|align-items|align-content)\\\\b',\n        illegal: '[^\\\\s]'\n      },\n      {\n        className: 'value',\n        begin: '\\\\b(whitespace|wait|w-resize|visible|vertical-text|vertical-ideographic|uppercase|upper-roman|upper-alpha|underline|transparent|top|thin|thick|text|text-top|text-bottom|tb-rl|table-header-group|table-footer-group|sw-resize|super|strict|static|square|solid|small-caps|separate|se-resize|scroll|s-resize|rtl|row-resize|ridge|right|repeat|repeat-y|repeat-x|relative|progress|pointer|overline|outside|outset|oblique|nowrap|not-allowed|normal|none|nw-resize|no-repeat|no-drop|newspaper|ne-resize|n-resize|move|middle|medium|ltr|lr-tb|lowercase|lower-roman|lower-alpha|loose|list-item|line|line-through|line-edge|lighter|left|keep-all|justify|italic|inter-word|inter-ideograph|inside|inset|inline|inline-block|inherit|inactive|ideograph-space|ideograph-parenthesis|ideograph-numeric|ideograph-alpha|horizontal|hidden|help|hand|groove|fixed|ellipsis|e-resize|double|dotted|distribute|distribute-space|distribute-letter|distribute-all-lines|disc|disabled|default|decimal|dashed|crosshair|collapse|col-resize|circle|char|center|capitalize|break-word|break-all|bottom|both|bolder|bold|block|bidi-override|below|baseline|auto|always|all-scroll|absolute|table|table-cell)\\\\b'\n      },\n      {\n        className: 'value',\n        begin: ':', end: ';',\n        contains: [\n          FUNCTION,\n          VARIABLE,\n          HEXCOLOR,\n          hljs.CSS_NUMBER_MODE,\n          hljs.QUOTE_STRING_MODE,\n          hljs.APOS_STRING_MODE,\n          {\n            className: 'important', begin: '!important'\n          }\n        ]\n      },\n      {\n        className: 'at_rule',\n        begin: '@', end: '[{;]',\n        keywords: 'mixin include extend for if else each while charset import debug media page content font-face namespace warn',\n        contains: [\n          FUNCTION,\n          VARIABLE,\n          hljs.QUOTE_STRING_MODE,\n          hljs.APOS_STRING_MODE,\n          HEXCOLOR,\n          hljs.CSS_NUMBER_MODE,\n          {\n            className: 'preprocessor',\n            begin: '\\\\s[A-Za-z0-9_.-]+',\n            relevance: 0\n          }\n        ]\n      }\n    ]\n  };\n});\n\nhljs.registerLanguage('typescript', function(hljs) {\n  var KEYWORDS = {\n    keyword:\n      'in if for while finally var new function|0 do return void else break catch ' +\n      'instanceof with throw case default try this switch continue typeof delete ' +\n      'let yield const class public private get set super ' +\n      'static implements enum export import declare type protected @',\n    literal:\n      'true false null undefined NaN Infinity',\n    built_in:\n      'eval isFinite isNaN parseFloat parseInt decodeURI decodeURIComponent ' +\n      'encodeURI encodeURIComponent escape unescape Object Function Boolean Error ' +\n      'EvalError InternalError RangeError ReferenceError StopIteration SyntaxError ' +\n      'TypeError URIError Number Math Date String RegExp Array Float32Array ' +\n      'Float64Array Int16Array Int32Array Int8Array Uint16Array Uint32Array ' +\n      'Uint8Array Uint8ClampedArray ArrayBuffer DataView JSON Intl arguments require ' +\n      'module console window document any number boolean string void'\n  };\n\n  return {\n    aliases: ['ts'],\n    keywords: KEYWORDS,\n    contains: [\n      {\n        className: 'pi',\n        begin: /^\\s*['\"]use strict['\"]/,\n        relevance: 0\n      },\n      hljs.APOS_STRING_MODE,\n      hljs.QUOTE_STRING_MODE,\n      hljs.C_LINE_COMMENT_MODE,\n      hljs.C_BLOCK_COMMENT_MODE,\n      {\n        className: 'number',\n        variants: [\n          { begin: '\\\\b(0[bB][01]+)' },\n          { begin: '\\\\b(0[oO][0-7]+)' },\n          { begin: hljs.C_NUMBER_RE }\n        ],\n        relevance: 0\n      },\n      { // \"value\" container\n        begin: '(' + hljs.RE_STARTERS_RE + '|\\\\b(case|return|throw)\\\\b)\\\\s*',\n        keywords: 'return throw case',\n        contains: [\n          hljs.C_LINE_COMMENT_MODE,\n          hljs.C_BLOCK_COMMENT_MODE,\n          hljs.REGEXP_MODE\n        ],\n        relevance: 0\n      },\n      {\n        className: 'function',\n        begin: 'function', end: /[\\{;]/, excludeEnd: true,\n        keywords: KEYWORDS,\n        contains: [\n          'self',\n          hljs.inherit(hljs.TITLE_MODE, {begin: /[A-Za-z$_][0-9A-Za-z$_]*/}),\n          {\n            className: 'params',\n            begin: /\\(/, end: /\\)/,\n            excludeBegin: true,\n            excludeEnd: true,\n            keywords: KEYWORDS,\n            contains: [\n              hljs.C_LINE_COMMENT_MODE,\n              hljs.C_BLOCK_COMMENT_MODE\n            ],\n            illegal: /[\"'\\(]/\n          }\n        ],\n        illegal: /\\[|%/,\n        relevance: 0 // () => {} is more typical in TypeScript\n      },\n      {\n        className: 'constructor',\n        beginKeywords: 'constructor', end: /\\{/, excludeEnd: true,\n        relevance: 10\n      },\n      {\n        className: 'module',\n        beginKeywords: 'module', end: /\\{/, excludeEnd: true\n      },\n      {\n        className: 'interface',\n        beginKeywords: 'interface', end: /\\{/, excludeEnd: true,\n        keywords: 'interface extends'\n        },\n        // MH ADDED: ES7 Decorators/Annotations\n      {\n        className: 'keyword',\n        begin: '@', end: /\\(/, excludeEnd: true\n      },\n      {\n        className: 'string',\n        begin: '`', end: /\\`/, excludeEnd: false\n      },\n      {\n        begin: /\\$[(.]/ // relevance booster for a pattern common to JS libs: `$(something)` and `$.something`\n      },\n      {\n        begin: '\\\\.' + hljs.IDENT_RE, relevance: 0 // hack: prevents detection of keywords after dots\n      }\n    ]\n  };\n});\n\nhljs.registerLanguage('xml', function(hljs) {\n  var XML_IDENT_RE = '[A-Za-z0-9\\\\._:-]+';\n  var PHP = {\n    begin: /<\\?(php)?(?!\\w)/, end: /\\?>/,\n    subLanguage: 'php'\n  };\n  var TAG_INTERNALS = {\n    endsWithParent: true,\n    illegal: /</,\n    relevance: 0,\n    contains: [\n      PHP,\n      {\n        className: 'attribute',\n        begin: XML_IDENT_RE,\n        relevance: 0\n      },\n      {\n        begin: '=',\n        relevance: 0,\n        contains: [\n          {\n            className: 'value',\n            contains: [PHP],\n            variants: [\n              {begin: /\"/, end: /\"/},\n              {begin: /'/, end: /'/},\n              {begin: /[^\\s\\/>]+/}\n            ]\n          }\n        ]\n      }\n    ]\n  };\n  return {\n    aliases: ['html', 'xhtml', 'rss', 'atom', 'xsl', 'plist'],\n    case_insensitive: true,\n    contains: [\n      {\n        className: 'doctype',\n        begin: '<!DOCTYPE', end: '>',\n        relevance: 10,\n        contains: [{begin: '\\\\[', end: '\\\\]'}]\n      },\n      hljs.COMMENT(\n        '<!--',\n        '-->',\n        {\n          relevance: 10\n        }\n      ),\n      {\n        className: 'cdata',\n        begin: '<\\\\!\\\\[CDATA\\\\[', end: '\\\\]\\\\]>',\n        relevance: 10\n      },\n      {\n        className: 'tag',\n        /*\n        The lookahead pattern (?=...) ensures that 'begin' only matches\n        '<style' as a single word, followed by a whitespace or an\n        ending braket. The '$' is needed for the lexeme to be recognized\n        by hljs.subMode() that tests lexemes outside the stream.\n        */\n        begin: '<style(?=\\\\s|>|$)', end: '>',\n        keywords: {title: 'style'},\n        contains: [TAG_INTERNALS],\n        starts: {\n          end: '</style>', returnEnd: true,\n          subLanguage: 'css'\n        }\n      },\n      {\n        className: 'tag',\n        // See the comment in the <style tag about the lookahead pattern\n        begin: '<script(?=\\\\s|>|$)', end: '>',\n        keywords: {title: 'script'},\n        contains: [TAG_INTERNALS],\n        starts: {\n          end: '\\<\\/script\\>', returnEnd: true,\n          subLanguage: ['actionscript', 'javascript', 'handlebars']\n        }\n      },\n      PHP,\n      {\n        className: 'pi',\n        begin: /<\\?\\w+/, end: /\\?>/,\n        relevance: 10\n      },\n      {\n        className: 'tag',\n        begin: '</?', end: '/?>',\n        contains: [\n          {\n            className: 'title', begin: /[^ \\/><\\n\\t]+/, relevance: 0\n          },\n          TAG_INTERNALS\n        ]\n      }\n    ]\n  };\n});\n\n  return hljs;\n}));\n"
  },
  {
    "path": "content/js/ionic-site.js",
    "content": "/*!\n * Ionic \n * Copyright 2015-present Drifty Co.\n */\n(function() {\n/*! jQuery v3.1.1 -ajax,-ajax/jsonp,-ajax/load,-ajax/parseXML,-ajax/script,-ajax/var/location,-ajax/var/nonce,-ajax/var/rquery,-ajax/xhr,-manipulation/_evalUrl,-event/ajax,-effects,-effects/animatedSelector,-effects/Tween,-deprecated | (c) jQuery Foundation | jquery.org/license */\n!function(a,b){\"use strict\";\"object\"==typeof module&&\"object\"==typeof module.exports?module.exports=a.document?b(a,!0):function(a){if(!a.document)throw new Error(\"jQuery requires a window with a document\");return b(a)}:b(a)}(\"undefined\"!=typeof window?window:this,function(a,b){\"use strict\";var c=[],d=a.document,e=Object.getPrototypeOf,f=c.slice,g=c.concat,h=c.push,i=c.indexOf,j={},k=j.toString,l=j.hasOwnProperty,m=l.toString,n=m.call(Object),o={};function p(a,b){b=b||d;var c=b.createElement(\"script\");c.text=a,b.head.appendChild(c).parentNode.removeChild(c)}var q=\"3.1.1 -ajax,-ajax/jsonp,-ajax/load,-ajax/parseXML,-ajax/script,-ajax/var/location,-ajax/var/nonce,-ajax/var/rquery,-ajax/xhr,-manipulation/_evalUrl,-event/ajax,-effects,-effects/animatedSelector,-effects/Tween,-deprecated\",r=function(a,b){return new r.fn.init(a,b)},s=/^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g,t=/^-ms-/,u=/-([a-z])/g,v=function(a,b){return b.toUpperCase()};r.fn=r.prototype={jquery:q,constructor:r,length:0,toArray:function(){return f.call(this)},get:function(a){return null==a?f.call(this):a<0?this[a+this.length]:this[a]},pushStack:function(a){var b=r.merge(this.constructor(),a);return b.prevObject=this,b},each:function(a){return r.each(this,a)},map:function(a){return this.pushStack(r.map(this,function(b,c){return a.call(b,c,b)}))},slice:function(){return this.pushStack(f.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(a){var b=this.length,c=+a+(a<0?b:0);return this.pushStack(c>=0&&c<b?[this[c]]:[])},end:function(){return this.prevObject||this.constructor()},push:h,sort:c.sort,splice:c.splice},r.extend=r.fn.extend=function(){var a,b,c,d,e,f,g=arguments[0]||{},h=1,i=arguments.length,j=!1;for(\"boolean\"==typeof g&&(j=g,g=arguments[h]||{},h++),\"object\"==typeof g||r.isFunction(g)||(g={}),h===i&&(g=this,h--);h<i;h++)if(null!=(a=arguments[h]))for(b in a)c=g[b],d=a[b],g!==d&&(j&&d&&(r.isPlainObject(d)||(e=r.isArray(d)))?(e?(e=!1,f=c&&r.isArray(c)?c:[]):f=c&&r.isPlainObject(c)?c:{},g[b]=r.extend(j,f,d)):void 0!==d&&(g[b]=d));return g},r.extend({expando:\"jQuery\"+(q+Math.random()).replace(/\\D/g,\"\"),isReady:!0,error:function(a){throw new Error(a)},noop:function(){},isFunction:function(a){return\"function\"===r.type(a)},isArray:Array.isArray,isWindow:function(a){return null!=a&&a===a.window},isNumeric:function(a){var b=r.type(a);return(\"number\"===b||\"string\"===b)&&!isNaN(a-parseFloat(a))},isPlainObject:function(a){var b,c;return!(!a||\"[object Object]\"!==k.call(a))&&(!(b=e(a))||(c=l.call(b,\"constructor\")&&b.constructor,\"function\"==typeof c&&m.call(c)===n))},isEmptyObject:function(a){var b;for(b in a)return!1;return!0},type:function(a){return null==a?a+\"\":\"object\"==typeof a||\"function\"==typeof a?j[k.call(a)]||\"object\":typeof a},globalEval:function(a){p(a)},camelCase:function(a){return a.replace(t,\"ms-\").replace(u,v)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toLowerCase()===b.toLowerCase()},each:function(a,b){var c,d=0;if(w(a)){for(c=a.length;d<c;d++)if(b.call(a[d],d,a[d])===!1)break}else for(d in a)if(b.call(a[d],d,a[d])===!1)break;return a},trim:function(a){return null==a?\"\":(a+\"\").replace(s,\"\")},makeArray:function(a,b){var c=b||[];return null!=a&&(w(Object(a))?r.merge(c,\"string\"==typeof a?[a]:a):h.call(c,a)),c},inArray:function(a,b,c){return null==b?-1:i.call(b,a,c)},merge:function(a,b){for(var c=+b.length,d=0,e=a.length;d<c;d++)a[e++]=b[d];return a.length=e,a},grep:function(a,b,c){for(var d,e=[],f=0,g=a.length,h=!c;f<g;f++)d=!b(a[f],f),d!==h&&e.push(a[f]);return e},map:function(a,b,c){var d,e,f=0,h=[];if(w(a))for(d=a.length;f<d;f++)e=b(a[f],f,c),null!=e&&h.push(e);else for(f in a)e=b(a[f],f,c),null!=e&&h.push(e);return g.apply([],h)},guid:1,proxy:function(a,b){var c,d,e;if(\"string\"==typeof b&&(c=a[b],b=a,a=c),r.isFunction(a))return d=f.call(arguments,2),e=function(){return a.apply(b||this,d.concat(f.call(arguments)))},e.guid=a.guid=a.guid||r.guid++,e},now:Date.now,support:o}),\"function\"==typeof Symbol&&(r.fn[Symbol.iterator]=c[Symbol.iterator]),r.each(\"Boolean Number String Function Array Date RegExp Object Error Symbol\".split(\" \"),function(a,b){j[\"[object \"+b+\"]\"]=b.toLowerCase()});function w(a){var b=!!a&&\"length\"in a&&a.length,c=r.type(a);return\"function\"!==c&&!r.isWindow(a)&&(\"array\"===c||0===b||\"number\"==typeof b&&b>0&&b-1 in a)}var x=function(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u=\"sizzle\"+1*new Date,v=a.document,w=0,x=0,y=ha(),z=ha(),A=ha(),B=function(a,b){return a===b&&(l=!0),0},C={}.hasOwnProperty,D=[],E=D.pop,F=D.push,G=D.push,H=D.slice,I=function(a,b){for(var c=0,d=a.length;c<d;c++)if(a[c]===b)return c;return-1},J=\"checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped\",K=\"[\\\\x20\\\\t\\\\r\\\\n\\\\f]\",L=\"(?:\\\\\\\\.|[\\\\w-]|[^\\0-\\\\xa0])+\",M=\"\\\\[\"+K+\"*(\"+L+\")(?:\"+K+\"*([*^$|!~]?=)\"+K+\"*(?:'((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\"|(\"+L+\"))|)\"+K+\"*\\\\]\",N=\":(\"+L+\")(?:\\\\((('((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\")|((?:\\\\\\\\.|[^\\\\\\\\()[\\\\]]|\"+M+\")*)|.*)\\\\)|)\",O=new RegExp(K+\"+\",\"g\"),P=new RegExp(\"^\"+K+\"+|((?:^|[^\\\\\\\\])(?:\\\\\\\\.)*)\"+K+\"+$\",\"g\"),Q=new RegExp(\"^\"+K+\"*,\"+K+\"*\"),R=new RegExp(\"^\"+K+\"*([>+~]|\"+K+\")\"+K+\"*\"),S=new RegExp(\"=\"+K+\"*([^\\\\]'\\\"]*?)\"+K+\"*\\\\]\",\"g\"),T=new RegExp(N),U=new RegExp(\"^\"+L+\"$\"),V={ID:new RegExp(\"^#(\"+L+\")\"),CLASS:new RegExp(\"^\\\\.(\"+L+\")\"),TAG:new RegExp(\"^(\"+L+\"|[*])\"),ATTR:new RegExp(\"^\"+M),PSEUDO:new RegExp(\"^\"+N),CHILD:new RegExp(\"^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\\\(\"+K+\"*(even|odd|(([+-]|)(\\\\d*)n|)\"+K+\"*(?:([+-]|)\"+K+\"*(\\\\d+)|))\"+K+\"*\\\\)|)\",\"i\"),bool:new RegExp(\"^(?:\"+J+\")$\",\"i\"),needsContext:new RegExp(\"^\"+K+\"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\\\(\"+K+\"*((?:-\\\\d)?\\\\d*)\"+K+\"*\\\\)|)(?=[^-]|$)\",\"i\")},W=/^(?:input|select|textarea|button)$/i,X=/^h\\d$/i,Y=/^[^{]+\\{\\s*\\[native \\w/,Z=/^(?:#([\\w-]+)|(\\w+)|\\.([\\w-]+))$/,$=/[+~]/,_=new RegExp(\"\\\\\\\\([\\\\da-f]{1,6}\"+K+\"?|(\"+K+\")|.)\",\"ig\"),aa=function(a,b,c){var d=\"0x\"+b-65536;return d!==d||c?b:d<0?String.fromCharCode(d+65536):String.fromCharCode(d>>10|55296,1023&d|56320)},ba=/([\\0-\\x1f\\x7f]|^-?\\d)|^-$|[^\\0-\\x1f\\x7f-\\uFFFF\\w-]/g,ca=function(a,b){return b?\"\\0\"===a?\"\\ufffd\":a.slice(0,-1)+\"\\\\\"+a.charCodeAt(a.length-1).toString(16)+\" \":\"\\\\\"+a},da=function(){m()},ea=ta(function(a){return a.disabled===!0&&(\"form\"in a||\"label\"in a)},{dir:\"parentNode\",next:\"legend\"});try{G.apply(D=H.call(v.childNodes),v.childNodes),D[v.childNodes.length].nodeType}catch(fa){G={apply:D.length?function(a,b){F.apply(a,H.call(b))}:function(a,b){var c=a.length,d=0;while(a[c++]=b[d++]);a.length=c-1}}}function ga(a,b,d,e){var f,h,j,k,l,o,r,s=b&&b.ownerDocument,w=b?b.nodeType:9;if(d=d||[],\"string\"!=typeof a||!a||1!==w&&9!==w&&11!==w)return d;if(!e&&((b?b.ownerDocument||b:v)!==n&&m(b),b=b||n,p)){if(11!==w&&(l=Z.exec(a)))if(f=l[1]){if(9===w){if(!(j=b.getElementById(f)))return d;if(j.id===f)return d.push(j),d}else if(s&&(j=s.getElementById(f))&&t(b,j)&&j.id===f)return d.push(j),d}else{if(l[2])return G.apply(d,b.getElementsByTagName(a)),d;if((f=l[3])&&c.getElementsByClassName&&b.getElementsByClassName)return G.apply(d,b.getElementsByClassName(f)),d}if(c.qsa&&!A[a+\" \"]&&(!q||!q.test(a))){if(1!==w)s=b,r=a;else if(\"object\"!==b.nodeName.toLowerCase()){(k=b.getAttribute(\"id\"))?k=k.replace(ba,ca):b.setAttribute(\"id\",k=u),o=g(a),h=o.length;while(h--)o[h]=\"#\"+k+\" \"+sa(o[h]);r=o.join(\",\"),s=$.test(a)&&qa(b.parentNode)||b}if(r)try{return G.apply(d,s.querySelectorAll(r)),d}catch(x){}finally{k===u&&b.removeAttribute(\"id\")}}}return i(a.replace(P,\"$1\"),b,d,e)}function ha(){var a=[];function b(c,e){return a.push(c+\" \")>d.cacheLength&&delete b[a.shift()],b[c+\" \"]=e}return b}function ia(a){return a[u]=!0,a}function ja(a){var b=n.createElement(\"fieldset\");try{return!!a(b)}catch(c){return!1}finally{b.parentNode&&b.parentNode.removeChild(b),b=null}}function ka(a,b){var c=a.split(\"|\"),e=c.length;while(e--)d.attrHandle[c[e]]=b}function la(a,b){var c=b&&a,d=c&&1===a.nodeType&&1===b.nodeType&&a.sourceIndex-b.sourceIndex;if(d)return d;if(c)while(c=c.nextSibling)if(c===b)return-1;return a?1:-1}function ma(a){return function(b){var c=b.nodeName.toLowerCase();return\"input\"===c&&b.type===a}}function na(a){return function(b){var c=b.nodeName.toLowerCase();return(\"input\"===c||\"button\"===c)&&b.type===a}}function oa(a){return function(b){return\"form\"in b?b.parentNode&&b.disabled===!1?\"label\"in b?\"label\"in b.parentNode?b.parentNode.disabled===a:b.disabled===a:b.isDisabled===a||b.isDisabled!==!a&&ea(b)===a:b.disabled===a:\"label\"in b&&b.disabled===a}}function pa(a){return ia(function(b){return b=+b,ia(function(c,d){var e,f=a([],c.length,b),g=f.length;while(g--)c[e=f[g]]&&(c[e]=!(d[e]=c[e]))})})}function qa(a){return a&&\"undefined\"!=typeof a.getElementsByTagName&&a}c=ga.support={},f=ga.isXML=function(a){var b=a&&(a.ownerDocument||a).documentElement;return!!b&&\"HTML\"!==b.nodeName},m=ga.setDocument=function(a){var b,e,g=a?a.ownerDocument||a:v;return g!==n&&9===g.nodeType&&g.documentElement?(n=g,o=n.documentElement,p=!f(n),v!==n&&(e=n.defaultView)&&e.top!==e&&(e.addEventListener?e.addEventListener(\"unload\",da,!1):e.attachEvent&&e.attachEvent(\"onunload\",da)),c.attributes=ja(function(a){return a.className=\"i\",!a.getAttribute(\"className\")}),c.getElementsByTagName=ja(function(a){return a.appendChild(n.createComment(\"\")),!a.getElementsByTagName(\"*\").length}),c.getElementsByClassName=Y.test(n.getElementsByClassName),c.getById=ja(function(a){return o.appendChild(a).id=u,!n.getElementsByName||!n.getElementsByName(u).length}),c.getById?(d.filter.ID=function(a){var b=a.replace(_,aa);return function(a){return a.getAttribute(\"id\")===b}},d.find.ID=function(a,b){if(\"undefined\"!=typeof b.getElementById&&p){var c=b.getElementById(a);return c?[c]:[]}}):(d.filter.ID=function(a){var b=a.replace(_,aa);return function(a){var c=\"undefined\"!=typeof a.getAttributeNode&&a.getAttributeNode(\"id\");return c&&c.value===b}},d.find.ID=function(a,b){if(\"undefined\"!=typeof b.getElementById&&p){var c,d,e,f=b.getElementById(a);if(f){if(c=f.getAttributeNode(\"id\"),c&&c.value===a)return[f];e=b.getElementsByName(a),d=0;while(f=e[d++])if(c=f.getAttributeNode(\"id\"),c&&c.value===a)return[f]}return[]}}),d.find.TAG=c.getElementsByTagName?function(a,b){return\"undefined\"!=typeof b.getElementsByTagName?b.getElementsByTagName(a):c.qsa?b.querySelectorAll(a):void 0}:function(a,b){var c,d=[],e=0,f=b.getElementsByTagName(a);if(\"*\"===a){while(c=f[e++])1===c.nodeType&&d.push(c);return d}return f},d.find.CLASS=c.getElementsByClassName&&function(a,b){if(\"undefined\"!=typeof b.getElementsByClassName&&p)return b.getElementsByClassName(a)},r=[],q=[],(c.qsa=Y.test(n.querySelectorAll))&&(ja(function(a){o.appendChild(a).innerHTML=\"<a id='\"+u+\"'></a><select id='\"+u+\"-\\r\\\\' msallowcapture=''><option selected=''></option></select>\",a.querySelectorAll(\"[msallowcapture^='']\").length&&q.push(\"[*^$]=\"+K+\"*(?:''|\\\"\\\")\"),a.querySelectorAll(\"[selected]\").length||q.push(\"\\\\[\"+K+\"*(?:value|\"+J+\")\"),a.querySelectorAll(\"[id~=\"+u+\"-]\").length||q.push(\"~=\"),a.querySelectorAll(\":checked\").length||q.push(\":checked\"),a.querySelectorAll(\"a#\"+u+\"+*\").length||q.push(\".#.+[+~]\")}),ja(function(a){a.innerHTML=\"<a href='' disabled='disabled'></a><select disabled='disabled'><option/></select>\";var b=n.createElement(\"input\");b.setAttribute(\"type\",\"hidden\"),a.appendChild(b).setAttribute(\"name\",\"D\"),a.querySelectorAll(\"[name=d]\").length&&q.push(\"name\"+K+\"*[*^$|!~]?=\"),2!==a.querySelectorAll(\":enabled\").length&&q.push(\":enabled\",\":disabled\"),o.appendChild(a).disabled=!0,2!==a.querySelectorAll(\":disabled\").length&&q.push(\":enabled\",\":disabled\"),a.querySelectorAll(\"*,:x\"),q.push(\",.*:\")})),(c.matchesSelector=Y.test(s=o.matches||o.webkitMatchesSelector||o.mozMatchesSelector||o.oMatchesSelector||o.msMatchesSelector))&&ja(function(a){c.disconnectedMatch=s.call(a,\"*\"),s.call(a,\"[s!='']:x\"),r.push(\"!=\",N)}),q=q.length&&new RegExp(q.join(\"|\")),r=r.length&&new RegExp(r.join(\"|\")),b=Y.test(o.compareDocumentPosition),t=b||Y.test(o.contains)?function(a,b){var c=9===a.nodeType?a.documentElement:a,d=b&&b.parentNode;return a===d||!(!d||1!==d.nodeType||!(c.contains?c.contains(d):a.compareDocumentPosition&&16&a.compareDocumentPosition(d)))}:function(a,b){if(b)while(b=b.parentNode)if(b===a)return!0;return!1},B=b?function(a,b){if(a===b)return l=!0,0;var d=!a.compareDocumentPosition-!b.compareDocumentPosition;return d?d:(d=(a.ownerDocument||a)===(b.ownerDocument||b)?a.compareDocumentPosition(b):1,1&d||!c.sortDetached&&b.compareDocumentPosition(a)===d?a===n||a.ownerDocument===v&&t(v,a)?-1:b===n||b.ownerDocument===v&&t(v,b)?1:k?I(k,a)-I(k,b):0:4&d?-1:1)}:function(a,b){if(a===b)return l=!0,0;var c,d=0,e=a.parentNode,f=b.parentNode,g=[a],h=[b];if(!e||!f)return a===n?-1:b===n?1:e?-1:f?1:k?I(k,a)-I(k,b):0;if(e===f)return la(a,b);c=a;while(c=c.parentNode)g.unshift(c);c=b;while(c=c.parentNode)h.unshift(c);while(g[d]===h[d])d++;return d?la(g[d],h[d]):g[d]===v?-1:h[d]===v?1:0},n):n},ga.matches=function(a,b){return ga(a,null,null,b)},ga.matchesSelector=function(a,b){if((a.ownerDocument||a)!==n&&m(a),b=b.replace(S,\"='$1']\"),c.matchesSelector&&p&&!A[b+\" \"]&&(!r||!r.test(b))&&(!q||!q.test(b)))try{var d=s.call(a,b);if(d||c.disconnectedMatch||a.document&&11!==a.document.nodeType)return d}catch(e){}return ga(b,n,null,[a]).length>0},ga.contains=function(a,b){return(a.ownerDocument||a)!==n&&m(a),t(a,b)},ga.attr=function(a,b){(a.ownerDocument||a)!==n&&m(a);var e=d.attrHandle[b.toLowerCase()],f=e&&C.call(d.attrHandle,b.toLowerCase())?e(a,b,!p):void 0;return void 0!==f?f:c.attributes||!p?a.getAttribute(b):(f=a.getAttributeNode(b))&&f.specified?f.value:null},ga.escape=function(a){return(a+\"\").replace(ba,ca)},ga.error=function(a){throw new Error(\"Syntax error, unrecognized expression: \"+a)},ga.uniqueSort=function(a){var b,d=[],e=0,f=0;if(l=!c.detectDuplicates,k=!c.sortStable&&a.slice(0),a.sort(B),l){while(b=a[f++])b===a[f]&&(e=d.push(f));while(e--)a.splice(d[e],1)}return k=null,a},e=ga.getText=function(a){var b,c=\"\",d=0,f=a.nodeType;if(f){if(1===f||9===f||11===f){if(\"string\"==typeof a.textContent)return a.textContent;for(a=a.firstChild;a;a=a.nextSibling)c+=e(a)}else if(3===f||4===f)return a.nodeValue}else while(b=a[d++])c+=e(b);return c},d=ga.selectors={cacheLength:50,createPseudo:ia,match:V,attrHandle:{},find:{},relative:{\">\":{dir:\"parentNode\",first:!0},\" \":{dir:\"parentNode\"},\"+\":{dir:\"previousSibling\",first:!0},\"~\":{dir:\"previousSibling\"}},preFilter:{ATTR:function(a){return a[1]=a[1].replace(_,aa),a[3]=(a[3]||a[4]||a[5]||\"\").replace(_,aa),\"~=\"===a[2]&&(a[3]=\" \"+a[3]+\" \"),a.slice(0,4)},CHILD:function(a){return a[1]=a[1].toLowerCase(),\"nth\"===a[1].slice(0,3)?(a[3]||ga.error(a[0]),a[4]=+(a[4]?a[5]+(a[6]||1):2*(\"even\"===a[3]||\"odd\"===a[3])),a[5]=+(a[7]+a[8]||\"odd\"===a[3])):a[3]&&ga.error(a[0]),a},PSEUDO:function(a){var b,c=!a[6]&&a[2];return V.CHILD.test(a[0])?null:(a[3]?a[2]=a[4]||a[5]||\"\":c&&T.test(c)&&(b=g(c,!0))&&(b=c.indexOf(\")\",c.length-b)-c.length)&&(a[0]=a[0].slice(0,b),a[2]=c.slice(0,b)),a.slice(0,3))}},filter:{TAG:function(a){var b=a.replace(_,aa).toLowerCase();return\"*\"===a?function(){return!0}:function(a){return a.nodeName&&a.nodeName.toLowerCase()===b}},CLASS:function(a){var b=y[a+\" \"];return b||(b=new RegExp(\"(^|\"+K+\")\"+a+\"(\"+K+\"|$)\"))&&y(a,function(a){return b.test(\"string\"==typeof a.className&&a.className||\"undefined\"!=typeof a.getAttribute&&a.getAttribute(\"class\")||\"\")})},ATTR:function(a,b,c){return function(d){var e=ga.attr(d,a);return null==e?\"!=\"===b:!b||(e+=\"\",\"=\"===b?e===c:\"!=\"===b?e!==c:\"^=\"===b?c&&0===e.indexOf(c):\"*=\"===b?c&&e.indexOf(c)>-1:\"$=\"===b?c&&e.slice(-c.length)===c:\"~=\"===b?(\" \"+e.replace(O,\" \")+\" \").indexOf(c)>-1:\"|=\"===b&&(e===c||e.slice(0,c.length+1)===c+\"-\"))}},CHILD:function(a,b,c,d,e){var f=\"nth\"!==a.slice(0,3),g=\"last\"!==a.slice(-4),h=\"of-type\"===b;return 1===d&&0===e?function(a){return!!a.parentNode}:function(b,c,i){var j,k,l,m,n,o,p=f!==g?\"nextSibling\":\"previousSibling\",q=b.parentNode,r=h&&b.nodeName.toLowerCase(),s=!i&&!h,t=!1;if(q){if(f){while(p){m=b;while(m=m[p])if(h?m.nodeName.toLowerCase()===r:1===m.nodeType)return!1;o=p=\"only\"===a&&!o&&\"nextSibling\"}return!0}if(o=[g?q.firstChild:q.lastChild],g&&s){m=q,l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),j=k[a]||[],n=j[0]===w&&j[1],t=n&&j[2],m=n&&q.childNodes[n];while(m=++n&&m&&m[p]||(t=n=0)||o.pop())if(1===m.nodeType&&++t&&m===b){k[a]=[w,n,t];break}}else if(s&&(m=b,l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),j=k[a]||[],n=j[0]===w&&j[1],t=n),t===!1)while(m=++n&&m&&m[p]||(t=n=0)||o.pop())if((h?m.nodeName.toLowerCase()===r:1===m.nodeType)&&++t&&(s&&(l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),k[a]=[w,t]),m===b))break;return t-=e,t===d||t%d===0&&t/d>=0}}},PSEUDO:function(a,b){var c,e=d.pseudos[a]||d.setFilters[a.toLowerCase()]||ga.error(\"unsupported pseudo: \"+a);return e[u]?e(b):e.length>1?(c=[a,a,\"\",b],d.setFilters.hasOwnProperty(a.toLowerCase())?ia(function(a,c){var d,f=e(a,b),g=f.length;while(g--)d=I(a,f[g]),a[d]=!(c[d]=f[g])}):function(a){return e(a,0,c)}):e}},pseudos:{not:ia(function(a){var b=[],c=[],d=h(a.replace(P,\"$1\"));return d[u]?ia(function(a,b,c,e){var f,g=d(a,null,e,[]),h=a.length;while(h--)(f=g[h])&&(a[h]=!(b[h]=f))}):function(a,e,f){return b[0]=a,d(b,null,f,c),b[0]=null,!c.pop()}}),has:ia(function(a){return function(b){return ga(a,b).length>0}}),contains:ia(function(a){return a=a.replace(_,aa),function(b){return(b.textContent||b.innerText||e(b)).indexOf(a)>-1}}),lang:ia(function(a){return U.test(a||\"\")||ga.error(\"unsupported lang: \"+a),a=a.replace(_,aa).toLowerCase(),function(b){var c;do if(c=p?b.lang:b.getAttribute(\"xml:lang\")||b.getAttribute(\"lang\"))return c=c.toLowerCase(),c===a||0===c.indexOf(a+\"-\");while((b=b.parentNode)&&1===b.nodeType);return!1}}),target:function(b){var c=a.location&&a.location.hash;return c&&c.slice(1)===b.id},root:function(a){return a===o},focus:function(a){return a===n.activeElement&&(!n.hasFocus||n.hasFocus())&&!!(a.type||a.href||~a.tabIndex)},enabled:oa(!1),disabled:oa(!0),checked:function(a){var b=a.nodeName.toLowerCase();return\"input\"===b&&!!a.checked||\"option\"===b&&!!a.selected},selected:function(a){return a.parentNode&&a.parentNode.selectedIndex,a.selected===!0},empty:function(a){for(a=a.firstChild;a;a=a.nextSibling)if(a.nodeType<6)return!1;return!0},parent:function(a){return!d.pseudos.empty(a)},header:function(a){return X.test(a.nodeName)},input:function(a){return W.test(a.nodeName)},button:function(a){var b=a.nodeName.toLowerCase();return\"input\"===b&&\"button\"===a.type||\"button\"===b},text:function(a){var b;return\"input\"===a.nodeName.toLowerCase()&&\"text\"===a.type&&(null==(b=a.getAttribute(\"type\"))||\"text\"===b.toLowerCase())},first:pa(function(){return[0]}),last:pa(function(a,b){return[b-1]}),eq:pa(function(a,b,c){return[c<0?c+b:c]}),even:pa(function(a,b){for(var c=0;c<b;c+=2)a.push(c);return a}),odd:pa(function(a,b){for(var c=1;c<b;c+=2)a.push(c);return a}),lt:pa(function(a,b,c){for(var d=c<0?c+b:c;--d>=0;)a.push(d);return a}),gt:pa(function(a,b,c){for(var d=c<0?c+b:c;++d<b;)a.push(d);return a})}},d.pseudos.nth=d.pseudos.eq;for(b in{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})d.pseudos[b]=ma(b);for(b in{submit:!0,reset:!0})d.pseudos[b]=na(b);function ra(){}ra.prototype=d.filters=d.pseudos,d.setFilters=new ra,g=ga.tokenize=function(a,b){var c,e,f,g,h,i,j,k=z[a+\" \"];if(k)return b?0:k.slice(0);h=a,i=[],j=d.preFilter;while(h){c&&!(e=Q.exec(h))||(e&&(h=h.slice(e[0].length)||h),i.push(f=[])),c=!1,(e=R.exec(h))&&(c=e.shift(),f.push({value:c,type:e[0].replace(P,\" \")}),h=h.slice(c.length));for(g in d.filter)!(e=V[g].exec(h))||j[g]&&!(e=j[g](e))||(c=e.shift(),f.push({value:c,type:g,matches:e}),h=h.slice(c.length));if(!c)break}return b?h.length:h?ga.error(a):z(a,i).slice(0)};function sa(a){for(var b=0,c=a.length,d=\"\";b<c;b++)d+=a[b].value;return d}function ta(a,b,c){var d=b.dir,e=b.next,f=e||d,g=c&&\"parentNode\"===f,h=x++;return b.first?function(b,c,e){while(b=b[d])if(1===b.nodeType||g)return a(b,c,e);return!1}:function(b,c,i){var j,k,l,m=[w,h];if(i){while(b=b[d])if((1===b.nodeType||g)&&a(b,c,i))return!0}else while(b=b[d])if(1===b.nodeType||g)if(l=b[u]||(b[u]={}),k=l[b.uniqueID]||(l[b.uniqueID]={}),e&&e===b.nodeName.toLowerCase())b=b[d]||b;else{if((j=k[f])&&j[0]===w&&j[1]===h)return m[2]=j[2];if(k[f]=m,m[2]=a(b,c,i))return!0}return!1}}function ua(a){return a.length>1?function(b,c,d){var e=a.length;while(e--)if(!a[e](b,c,d))return!1;return!0}:a[0]}function va(a,b,c){for(var d=0,e=b.length;d<e;d++)ga(a,b[d],c);return c}function wa(a,b,c,d,e){for(var f,g=[],h=0,i=a.length,j=null!=b;h<i;h++)(f=a[h])&&(c&&!c(f,d,e)||(g.push(f),j&&b.push(h)));return g}function xa(a,b,c,d,e,f){return d&&!d[u]&&(d=xa(d)),e&&!e[u]&&(e=xa(e,f)),ia(function(f,g,h,i){var j,k,l,m=[],n=[],o=g.length,p=f||va(b||\"*\",h.nodeType?[h]:h,[]),q=!a||!f&&b?p:wa(p,m,a,h,i),r=c?e||(f?a:o||d)?[]:g:q;if(c&&c(q,r,h,i),d){j=wa(r,n),d(j,[],h,i),k=j.length;while(k--)(l=j[k])&&(r[n[k]]=!(q[n[k]]=l))}if(f){if(e||a){if(e){j=[],k=r.length;while(k--)(l=r[k])&&j.push(q[k]=l);e(null,r=[],j,i)}k=r.length;while(k--)(l=r[k])&&(j=e?I(f,l):m[k])>-1&&(f[j]=!(g[j]=l))}}else r=wa(r===g?r.splice(o,r.length):r),e?e(null,g,r,i):G.apply(g,r)})}function ya(a){for(var b,c,e,f=a.length,g=d.relative[a[0].type],h=g||d.relative[\" \"],i=g?1:0,k=ta(function(a){return a===b},h,!0),l=ta(function(a){return I(b,a)>-1},h,!0),m=[function(a,c,d){var e=!g&&(d||c!==j)||((b=c).nodeType?k(a,c,d):l(a,c,d));return b=null,e}];i<f;i++)if(c=d.relative[a[i].type])m=[ta(ua(m),c)];else{if(c=d.filter[a[i].type].apply(null,a[i].matches),c[u]){for(e=++i;e<f;e++)if(d.relative[a[e].type])break;return xa(i>1&&ua(m),i>1&&sa(a.slice(0,i-1).concat({value:\" \"===a[i-2].type?\"*\":\"\"})).replace(P,\"$1\"),c,i<e&&ya(a.slice(i,e)),e<f&&ya(a=a.slice(e)),e<f&&sa(a))}m.push(c)}return ua(m)}function za(a,b){var c=b.length>0,e=a.length>0,f=function(f,g,h,i,k){var l,o,q,r=0,s=\"0\",t=f&&[],u=[],v=j,x=f||e&&d.find.TAG(\"*\",k),y=w+=null==v?1:Math.random()||.1,z=x.length;for(k&&(j=g===n||g||k);s!==z&&null!=(l=x[s]);s++){if(e&&l){o=0,g||l.ownerDocument===n||(m(l),h=!p);while(q=a[o++])if(q(l,g||n,h)){i.push(l);break}k&&(w=y)}c&&((l=!q&&l)&&r--,f&&t.push(l))}if(r+=s,c&&s!==r){o=0;while(q=b[o++])q(t,u,g,h);if(f){if(r>0)while(s--)t[s]||u[s]||(u[s]=E.call(i));u=wa(u)}G.apply(i,u),k&&!f&&u.length>0&&r+b.length>1&&ga.uniqueSort(i)}return k&&(w=y,j=v),t};return c?ia(f):f}return h=ga.compile=function(a,b){var c,d=[],e=[],f=A[a+\" \"];if(!f){b||(b=g(a)),c=b.length;while(c--)f=ya(b[c]),f[u]?d.push(f):e.push(f);f=A(a,za(e,d)),f.selector=a}return f},i=ga.select=function(a,b,c,e){var f,i,j,k,l,m=\"function\"==typeof a&&a,n=!e&&g(a=m.selector||a);if(c=c||[],1===n.length){if(i=n[0]=n[0].slice(0),i.length>2&&\"ID\"===(j=i[0]).type&&9===b.nodeType&&p&&d.relative[i[1].type]){if(b=(d.find.ID(j.matches[0].replace(_,aa),b)||[])[0],!b)return c;m&&(b=b.parentNode),a=a.slice(i.shift().value.length)}f=V.needsContext.test(a)?0:i.length;while(f--){if(j=i[f],d.relative[k=j.type])break;if((l=d.find[k])&&(e=l(j.matches[0].replace(_,aa),$.test(i[0].type)&&qa(b.parentNode)||b))){if(i.splice(f,1),a=e.length&&sa(i),!a)return G.apply(c,e),c;break}}}return(m||h(a,n))(e,b,!p,c,!b||$.test(a)&&qa(b.parentNode)||b),c},c.sortStable=u.split(\"\").sort(B).join(\"\")===u,c.detectDuplicates=!!l,m(),c.sortDetached=ja(function(a){return 1&a.compareDocumentPosition(n.createElement(\"fieldset\"))}),ja(function(a){return a.innerHTML=\"<a href='#'></a>\",\"#\"===a.firstChild.getAttribute(\"href\")})||ka(\"type|href|height|width\",function(a,b,c){if(!c)return a.getAttribute(b,\"type\"===b.toLowerCase()?1:2)}),c.attributes&&ja(function(a){return a.innerHTML=\"<input/>\",a.firstChild.setAttribute(\"value\",\"\"),\"\"===a.firstChild.getAttribute(\"value\")})||ka(\"value\",function(a,b,c){if(!c&&\"input\"===a.nodeName.toLowerCase())return a.defaultValue}),ja(function(a){return null==a.getAttribute(\"disabled\")})||ka(J,function(a,b,c){var d;if(!c)return a[b]===!0?b.toLowerCase():(d=a.getAttributeNode(b))&&d.specified?d.value:null}),ga}(a);r.find=x,r.expr=x.selectors,r.expr[\":\"]=r.expr.pseudos,r.uniqueSort=r.unique=x.uniqueSort,r.text=x.getText,r.isXMLDoc=x.isXML,r.contains=x.contains,r.escapeSelector=x.escape;var y=function(a,b,c){var d=[],e=void 0!==c;while((a=a[b])&&9!==a.nodeType)if(1===a.nodeType){if(e&&r(a).is(c))break;d.push(a)}return d},z=function(a,b){for(var c=[];a;a=a.nextSibling)1===a.nodeType&&a!==b&&c.push(a);return c},A=r.expr.match.needsContext,B=/^<([a-z][^\\/\\0>:\\x20\\t\\r\\n\\f]*)[\\x20\\t\\r\\n\\f]*\\/?>(?:<\\/\\1>|)$/i,C=/^.[^:#\\[\\.,]*$/;function D(a,b,c){return r.isFunction(b)?r.grep(a,function(a,d){return!!b.call(a,d,a)!==c}):b.nodeType?r.grep(a,function(a){return a===b!==c}):\"string\"!=typeof b?r.grep(a,function(a){return i.call(b,a)>-1!==c}):C.test(b)?r.filter(b,a,c):(b=r.filter(b,a),r.grep(a,function(a){return i.call(b,a)>-1!==c&&1===a.nodeType}))}r.filter=function(a,b,c){var d=b[0];return c&&(a=\":not(\"+a+\")\"),1===b.length&&1===d.nodeType?r.find.matchesSelector(d,a)?[d]:[]:r.find.matches(a,r.grep(b,function(a){return 1===a.nodeType}))},r.fn.extend({find:function(a){var b,c,d=this.length,e=this;if(\"string\"!=typeof a)return this.pushStack(r(a).filter(function(){for(b=0;b<d;b++)if(r.contains(e[b],this))return!0}));for(c=this.pushStack([]),b=0;b<d;b++)r.find(a,e[b],c);return d>1?r.uniqueSort(c):c},filter:function(a){return this.pushStack(D(this,a||[],!1))},not:function(a){return this.pushStack(D(this,a||[],!0))},is:function(a){return!!D(this,\"string\"==typeof a&&A.test(a)?r(a):a||[],!1).length}});var E,F=/^(?:\\s*(<[\\w\\W]+>)[^>]*|#([\\w-]+))$/,G=r.fn.init=function(a,b,c){var e,f;if(!a)return this;if(c=c||E,\"string\"==typeof a){if(e=\"<\"===a[0]&&\">\"===a[a.length-1]&&a.length>=3?[null,a,null]:F.exec(a),!e||!e[1]&&b)return!b||b.jquery?(b||c).find(a):this.constructor(b).find(a);if(e[1]){if(b=b instanceof r?b[0]:b,r.merge(this,r.parseHTML(e[1],b&&b.nodeType?b.ownerDocument||b:d,!0)),B.test(e[1])&&r.isPlainObject(b))for(e in b)r.isFunction(this[e])?this[e](b[e]):this.attr(e,b[e]);return this}return f=d.getElementById(e[2]),f&&(this[0]=f,this.length=1),this}return a.nodeType?(this[0]=a,this.length=1,this):r.isFunction(a)?void 0!==c.ready?c.ready(a):a(r):r.makeArray(a,this)};G.prototype=r.fn,E=r(d);var H=/^(?:parents|prev(?:Until|All))/,I={children:!0,contents:!0,next:!0,prev:!0};r.fn.extend({has:function(a){var b=r(a,this),c=b.length;return this.filter(function(){for(var a=0;a<c;a++)if(r.contains(this,b[a]))return!0})},closest:function(a,b){var c,d=0,e=this.length,f=[],g=\"string\"!=typeof a&&r(a);if(!A.test(a))for(;d<e;d++)for(c=this[d];c&&c!==b;c=c.parentNode)if(c.nodeType<11&&(g?g.index(c)>-1:1===c.nodeType&&r.find.matchesSelector(c,a))){f.push(c);break}return this.pushStack(f.length>1?r.uniqueSort(f):f)},index:function(a){return a?\"string\"==typeof a?i.call(r(a),this[0]):i.call(this,a.jquery?a[0]:a):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(a,b){return this.pushStack(r.uniqueSort(r.merge(this.get(),r(a,b))))},addBack:function(a){return this.add(null==a?this.prevObject:this.prevObject.filter(a))}});function J(a,b){while((a=a[b])&&1!==a.nodeType);return a}r.each({parent:function(a){var b=a.parentNode;return b&&11!==b.nodeType?b:null},parents:function(a){return y(a,\"parentNode\")},parentsUntil:function(a,b,c){return y(a,\"parentNode\",c)},next:function(a){return J(a,\"nextSibling\")},prev:function(a){return J(a,\"previousSibling\")},nextAll:function(a){return y(a,\"nextSibling\")},prevAll:function(a){return y(a,\"previousSibling\")},nextUntil:function(a,b,c){return y(a,\"nextSibling\",c)},prevUntil:function(a,b,c){return y(a,\"previousSibling\",c)},siblings:function(a){return z((a.parentNode||{}).firstChild,a)},children:function(a){return z(a.firstChild)},contents:function(a){return a.contentDocument||r.merge([],a.childNodes)}},function(a,b){r.fn[a]=function(c,d){var e=r.map(this,b,c);return\"Until\"!==a.slice(-5)&&(d=c),d&&\"string\"==typeof d&&(e=r.filter(d,e)),this.length>1&&(I[a]||r.uniqueSort(e),H.test(a)&&e.reverse()),this.pushStack(e)}});var K=/[^\\x20\\t\\r\\n\\f]+/g;function L(a){var b={};return r.each(a.match(K)||[],function(a,c){b[c]=!0}),b}r.Callbacks=function(a){a=\"string\"==typeof a?L(a):r.extend({},a);var b,c,d,e,f=[],g=[],h=-1,i=function(){for(e=a.once,d=b=!0;g.length;h=-1){c=g.shift();while(++h<f.length)f[h].apply(c[0],c[1])===!1&&a.stopOnFalse&&(h=f.length,c=!1)}a.memory||(c=!1),b=!1,e&&(f=c?[]:\"\")},j={add:function(){return f&&(c&&!b&&(h=f.length-1,g.push(c)),function d(b){r.each(b,function(b,c){r.isFunction(c)?a.unique&&j.has(c)||f.push(c):c&&c.length&&\"string\"!==r.type(c)&&d(c)})}(arguments),c&&!b&&i()),this},remove:function(){return r.each(arguments,function(a,b){var c;while((c=r.inArray(b,f,c))>-1)f.splice(c,1),c<=h&&h--}),this},has:function(a){return a?r.inArray(a,f)>-1:f.length>0},empty:function(){return f&&(f=[]),this},disable:function(){return e=g=[],f=c=\"\",this},disabled:function(){return!f},lock:function(){return e=g=[],c||b||(f=c=\"\"),this},locked:function(){return!!e},fireWith:function(a,c){return e||(c=c||[],c=[a,c.slice?c.slice():c],g.push(c),b||i()),this},fire:function(){return j.fireWith(this,arguments),this},fired:function(){return!!d}};return j};function M(a){return a}function N(a){throw a}function O(a,b,c){var d;try{a&&r.isFunction(d=a.promise)?d.call(a).done(b).fail(c):a&&r.isFunction(d=a.then)?d.call(a,b,c):b.call(void 0,a)}catch(a){c.call(void 0,a)}}r.extend({Deferred:function(b){var c=[[\"notify\",\"progress\",r.Callbacks(\"memory\"),r.Callbacks(\"memory\"),2],[\"resolve\",\"done\",r.Callbacks(\"once memory\"),r.Callbacks(\"once memory\"),0,\"resolved\"],[\"reject\",\"fail\",r.Callbacks(\"once memory\"),r.Callbacks(\"once memory\"),1,\"rejected\"]],d=\"pending\",e={state:function(){return d},always:function(){return f.done(arguments).fail(arguments),this},\"catch\":function(a){return e.then(null,a)},pipe:function(){var a=arguments;return r.Deferred(function(b){r.each(c,function(c,d){var e=r.isFunction(a[d[4]])&&a[d[4]];f[d[1]](function(){var a=e&&e.apply(this,arguments);a&&r.isFunction(a.promise)?a.promise().progress(b.notify).done(b.resolve).fail(b.reject):b[d[0]+\"With\"](this,e?[a]:arguments)})}),a=null}).promise()},then:function(b,d,e){var f=0;function g(b,c,d,e){return function(){var h=this,i=arguments,j=function(){var a,j;if(!(b<f)){if(a=d.apply(h,i),a===c.promise())throw new TypeError(\"Thenable self-resolution\");j=a&&(\"object\"==typeof a||\"function\"==typeof a)&&a.then,r.isFunction(j)?e?j.call(a,g(f,c,M,e),g(f,c,N,e)):(f++,j.call(a,g(f,c,M,e),g(f,c,N,e),g(f,c,M,c.notifyWith))):(d!==M&&(h=void 0,i=[a]),(e||c.resolveWith)(h,i))}},k=e?j:function(){try{j()}catch(a){r.Deferred.exceptionHook&&r.Deferred.exceptionHook(a,k.stackTrace),b+1>=f&&(d!==N&&(h=void 0,i=[a]),c.rejectWith(h,i))}};b?k():(r.Deferred.getStackHook&&(k.stackTrace=r.Deferred.getStackHook()),a.setTimeout(k))}}return r.Deferred(function(a){c[0][3].add(g(0,a,r.isFunction(e)?e:M,a.notifyWith)),c[1][3].add(g(0,a,r.isFunction(b)?b:M)),c[2][3].add(g(0,a,r.isFunction(d)?d:N))}).promise()},promise:function(a){return null!=a?r.extend(a,e):e}},f={};return r.each(c,function(a,b){var g=b[2],h=b[5];e[b[1]]=g.add,h&&g.add(function(){d=h},c[3-a][2].disable,c[0][2].lock),g.add(b[3].fire),f[b[0]]=function(){return f[b[0]+\"With\"](this===f?void 0:this,arguments),this},f[b[0]+\"With\"]=g.fireWith}),e.promise(f),b&&b.call(f,f),f},when:function(a){var b=arguments.length,c=b,d=Array(c),e=f.call(arguments),g=r.Deferred(),h=function(a){return function(c){d[a]=this,e[a]=arguments.length>1?f.call(arguments):c,--b||g.resolveWith(d,e)}};if(b<=1&&(O(a,g.done(h(c)).resolve,g.reject),\"pending\"===g.state()||r.isFunction(e[c]&&e[c].then)))return g.then();while(c--)O(e[c],h(c),g.reject);return g.promise()}});var P=/^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;r.Deferred.exceptionHook=function(b,c){a.console&&a.console.warn&&b&&P.test(b.name)&&a.console.warn(\"jQuery.Deferred exception: \"+b.message,b.stack,c)},r.readyException=function(b){a.setTimeout(function(){throw b})};var Q=r.Deferred();r.fn.ready=function(a){return Q.then(a)[\"catch\"](function(a){r.readyException(a)}),this},r.extend({isReady:!1,readyWait:1,\nholdReady:function(a){a?r.readyWait++:r.ready(!0)},ready:function(a){(a===!0?--r.readyWait:r.isReady)||(r.isReady=!0,a!==!0&&--r.readyWait>0||Q.resolveWith(d,[r]))}}),r.ready.then=Q.then;function R(){d.removeEventListener(\"DOMContentLoaded\",R),a.removeEventListener(\"load\",R),r.ready()}\"complete\"===d.readyState||\"loading\"!==d.readyState&&!d.documentElement.doScroll?a.setTimeout(r.ready):(d.addEventListener(\"DOMContentLoaded\",R),a.addEventListener(\"load\",R));var S=function(a,b,c,d,e,f,g){var h=0,i=a.length,j=null==c;if(\"object\"===r.type(c)){e=!0;for(h in c)S(a,b,h,c[h],!0,f,g)}else if(void 0!==d&&(e=!0,r.isFunction(d)||(g=!0),j&&(g?(b.call(a,d),b=null):(j=b,b=function(a,b,c){return j.call(r(a),c)})),b))for(;h<i;h++)b(a[h],c,g?d:d.call(a[h],h,b(a[h],c)));return e?a:j?b.call(a):i?b(a[0],c):f},T=function(a){return 1===a.nodeType||9===a.nodeType||!+a.nodeType};function U(){this.expando=r.expando+U.uid++}U.uid=1,U.prototype={cache:function(a){var b=a[this.expando];return b||(b={},T(a)&&(a.nodeType?a[this.expando]=b:Object.defineProperty(a,this.expando,{value:b,configurable:!0}))),b},set:function(a,b,c){var d,e=this.cache(a);if(\"string\"==typeof b)e[r.camelCase(b)]=c;else for(d in b)e[r.camelCase(d)]=b[d];return e},get:function(a,b){return void 0===b?this.cache(a):a[this.expando]&&a[this.expando][r.camelCase(b)]},access:function(a,b,c){return void 0===b||b&&\"string\"==typeof b&&void 0===c?this.get(a,b):(this.set(a,b,c),void 0!==c?c:b)},remove:function(a,b){var c,d=a[this.expando];if(void 0!==d){if(void 0!==b){r.isArray(b)?b=b.map(r.camelCase):(b=r.camelCase(b),b=b in d?[b]:b.match(K)||[]),c=b.length;while(c--)delete d[b[c]]}(void 0===b||r.isEmptyObject(d))&&(a.nodeType?a[this.expando]=void 0:delete a[this.expando])}},hasData:function(a){var b=a[this.expando];return void 0!==b&&!r.isEmptyObject(b)}};var V=new U,W=new U,X=/^(?:\\{[\\w\\W]*\\}|\\[[\\w\\W]*\\])$/,Y=/[A-Z]/g;function Z(a){return\"true\"===a||\"false\"!==a&&(\"null\"===a?null:a===+a+\"\"?+a:X.test(a)?JSON.parse(a):a)}function $(a,b,c){var d;if(void 0===c&&1===a.nodeType)if(d=\"data-\"+b.replace(Y,\"-$&\").toLowerCase(),c=a.getAttribute(d),\"string\"==typeof c){try{c=Z(c)}catch(e){}W.set(a,b,c)}else c=void 0;return c}r.extend({hasData:function(a){return W.hasData(a)||V.hasData(a)},data:function(a,b,c){return W.access(a,b,c)},removeData:function(a,b){W.remove(a,b)},_data:function(a,b,c){return V.access(a,b,c)},_removeData:function(a,b){V.remove(a,b)}}),r.fn.extend({data:function(a,b){var c,d,e,f=this[0],g=f&&f.attributes;if(void 0===a){if(this.length&&(e=W.get(f),1===f.nodeType&&!V.get(f,\"hasDataAttrs\"))){c=g.length;while(c--)g[c]&&(d=g[c].name,0===d.indexOf(\"data-\")&&(d=r.camelCase(d.slice(5)),$(f,d,e[d])));V.set(f,\"hasDataAttrs\",!0)}return e}return\"object\"==typeof a?this.each(function(){W.set(this,a)}):S(this,function(b){var c;if(f&&void 0===b){if(c=W.get(f,a),void 0!==c)return c;if(c=$(f,a),void 0!==c)return c}else this.each(function(){W.set(this,a,b)})},null,b,arguments.length>1,null,!0)},removeData:function(a){return this.each(function(){W.remove(this,a)})}}),r.extend({queue:function(a,b,c){var d;if(a)return b=(b||\"fx\")+\"queue\",d=V.get(a,b),c&&(!d||r.isArray(c)?d=V.access(a,b,r.makeArray(c)):d.push(c)),d||[]},dequeue:function(a,b){b=b||\"fx\";var c=r.queue(a,b),d=c.length,e=c.shift(),f=r._queueHooks(a,b),g=function(){r.dequeue(a,b)};\"inprogress\"===e&&(e=c.shift(),d--),e&&(\"fx\"===b&&c.unshift(\"inprogress\"),delete f.stop,e.call(a,g,f)),!d&&f&&f.empty.fire()},_queueHooks:function(a,b){var c=b+\"queueHooks\";return V.get(a,c)||V.access(a,c,{empty:r.Callbacks(\"once memory\").add(function(){V.remove(a,[b+\"queue\",c])})})}}),r.fn.extend({queue:function(a,b){var c=2;return\"string\"!=typeof a&&(b=a,a=\"fx\",c--),arguments.length<c?r.queue(this[0],a):void 0===b?this:this.each(function(){var c=r.queue(this,a,b);r._queueHooks(this,a),\"fx\"===a&&\"inprogress\"!==c[0]&&r.dequeue(this,a)})},dequeue:function(a){return this.each(function(){r.dequeue(this,a)})},clearQueue:function(a){return this.queue(a||\"fx\",[])},promise:function(a,b){var c,d=1,e=r.Deferred(),f=this,g=this.length,h=function(){--d||e.resolveWith(f,[f])};\"string\"!=typeof a&&(b=a,a=void 0),a=a||\"fx\";while(g--)c=V.get(f[g],a+\"queueHooks\"),c&&c.empty&&(d++,c.empty.add(h));return h(),e.promise(b)}});var _=/[+-]?(?:\\d*\\.|)\\d+(?:[eE][+-]?\\d+|)/.source,aa=new RegExp(\"^(?:([+-])=|)(\"+_+\")([a-z%]*)$\",\"i\"),ba=[\"Top\",\"Right\",\"Bottom\",\"Left\"],ca=function(a,b){return a=b||a,\"none\"===a.style.display||\"\"===a.style.display&&r.contains(a.ownerDocument,a)&&\"none\"===r.css(a,\"display\")},da=function(a,b,c,d){var e,f,g={};for(f in b)g[f]=a.style[f],a.style[f]=b[f];e=c.apply(a,d||[]);for(f in b)a.style[f]=g[f];return e};function ea(a,b,c,d){var e,f=1,g=20,h=d?function(){return d.cur()}:function(){return r.css(a,b,\"\")},i=h(),j=c&&c[3]||(r.cssNumber[b]?\"\":\"px\"),k=(r.cssNumber[b]||\"px\"!==j&&+i)&&aa.exec(r.css(a,b));if(k&&k[3]!==j){j=j||k[3],c=c||[],k=+i||1;do f=f||\".5\",k/=f,r.style(a,b,k+j);while(f!==(f=h()/i)&&1!==f&&--g)}return c&&(k=+k||+i||0,e=c[1]?k+(c[1]+1)*c[2]:+c[2],d&&(d.unit=j,d.start=k,d.end=e)),e}var fa={};function ga(a){var b,c=a.ownerDocument,d=a.nodeName,e=fa[d];return e?e:(b=c.body.appendChild(c.createElement(d)),e=r.css(b,\"display\"),b.parentNode.removeChild(b),\"none\"===e&&(e=\"block\"),fa[d]=e,e)}function ha(a,b){for(var c,d,e=[],f=0,g=a.length;f<g;f++)d=a[f],d.style&&(c=d.style.display,b?(\"none\"===c&&(e[f]=V.get(d,\"display\")||null,e[f]||(d.style.display=\"\")),\"\"===d.style.display&&ca(d)&&(e[f]=ga(d))):\"none\"!==c&&(e[f]=\"none\",V.set(d,\"display\",c)));for(f=0;f<g;f++)null!=e[f]&&(a[f].style.display=e[f]);return a}r.fn.extend({show:function(){return ha(this,!0)},hide:function(){return ha(this)},toggle:function(a){return\"boolean\"==typeof a?a?this.show():this.hide():this.each(function(){ca(this)?r(this).show():r(this).hide()})}});var ia=/^(?:checkbox|radio)$/i,ja=/<([a-z][^\\/\\0>\\x20\\t\\r\\n\\f]+)/i,ka=/^$|\\/(?:java|ecma)script/i,la={option:[1,\"<select multiple='multiple'>\",\"</select>\"],thead:[1,\"<table>\",\"</table>\"],col:[2,\"<table><colgroup>\",\"</colgroup></table>\"],tr:[2,\"<table><tbody>\",\"</tbody></table>\"],td:[3,\"<table><tbody><tr>\",\"</tr></tbody></table>\"],_default:[0,\"\",\"\"]};la.optgroup=la.option,la.tbody=la.tfoot=la.colgroup=la.caption=la.thead,la.th=la.td;function ma(a,b){var c;return c=\"undefined\"!=typeof a.getElementsByTagName?a.getElementsByTagName(b||\"*\"):\"undefined\"!=typeof a.querySelectorAll?a.querySelectorAll(b||\"*\"):[],void 0===b||b&&r.nodeName(a,b)?r.merge([a],c):c}function na(a,b){for(var c=0,d=a.length;c<d;c++)V.set(a[c],\"globalEval\",!b||V.get(b[c],\"globalEval\"))}var oa=/<|&#?\\w+;/;function pa(a,b,c,d,e){for(var f,g,h,i,j,k,l=b.createDocumentFragment(),m=[],n=0,o=a.length;n<o;n++)if(f=a[n],f||0===f)if(\"object\"===r.type(f))r.merge(m,f.nodeType?[f]:f);else if(oa.test(f)){g=g||l.appendChild(b.createElement(\"div\")),h=(ja.exec(f)||[\"\",\"\"])[1].toLowerCase(),i=la[h]||la._default,g.innerHTML=i[1]+r.htmlPrefilter(f)+i[2],k=i[0];while(k--)g=g.lastChild;r.merge(m,g.childNodes),g=l.firstChild,g.textContent=\"\"}else m.push(b.createTextNode(f));l.textContent=\"\",n=0;while(f=m[n++])if(d&&r.inArray(f,d)>-1)e&&e.push(f);else if(j=r.contains(f.ownerDocument,f),g=ma(l.appendChild(f),\"script\"),j&&na(g),c){k=0;while(f=g[k++])ka.test(f.type||\"\")&&c.push(f)}return l}!function(){var a=d.createDocumentFragment(),b=a.appendChild(d.createElement(\"div\")),c=d.createElement(\"input\");c.setAttribute(\"type\",\"radio\"),c.setAttribute(\"checked\",\"checked\"),c.setAttribute(\"name\",\"t\"),b.appendChild(c),o.checkClone=b.cloneNode(!0).cloneNode(!0).lastChild.checked,b.innerHTML=\"<textarea>x</textarea>\",o.noCloneChecked=!!b.cloneNode(!0).lastChild.defaultValue}();var qa=d.documentElement,ra=/^key/,sa=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,ta=/^([^.]*)(?:\\.(.+)|)/;function ua(){return!0}function va(){return!1}function wa(){try{return d.activeElement}catch(a){}}function xa(a,b,c,d,e,f){var g,h;if(\"object\"==typeof b){\"string\"!=typeof c&&(d=d||c,c=void 0);for(h in b)xa(a,h,c,d,b[h],f);return a}if(null==d&&null==e?(e=c,d=c=void 0):null==e&&(\"string\"==typeof c?(e=d,d=void 0):(e=d,d=c,c=void 0)),e===!1)e=va;else if(!e)return a;return 1===f&&(g=e,e=function(a){return r().off(a),g.apply(this,arguments)},e.guid=g.guid||(g.guid=r.guid++)),a.each(function(){r.event.add(this,b,e,d,c)})}r.event={global:{},add:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,n,o,p,q=V.get(a);if(q){c.handler&&(f=c,c=f.handler,e=f.selector),e&&r.find.matchesSelector(qa,e),c.guid||(c.guid=r.guid++),(i=q.events)||(i=q.events={}),(g=q.handle)||(g=q.handle=function(b){return\"undefined\"!=typeof r&&r.event.triggered!==b.type?r.event.dispatch.apply(a,arguments):void 0}),b=(b||\"\").match(K)||[\"\"],j=b.length;while(j--)h=ta.exec(b[j])||[],n=p=h[1],o=(h[2]||\"\").split(\".\").sort(),n&&(l=r.event.special[n]||{},n=(e?l.delegateType:l.bindType)||n,l=r.event.special[n]||{},k=r.extend({type:n,origType:p,data:d,handler:c,guid:c.guid,selector:e,needsContext:e&&r.expr.match.needsContext.test(e),namespace:o.join(\".\")},f),(m=i[n])||(m=i[n]=[],m.delegateCount=0,l.setup&&l.setup.call(a,d,o,g)!==!1||a.addEventListener&&a.addEventListener(n,g)),l.add&&(l.add.call(a,k),k.handler.guid||(k.handler.guid=c.guid)),e?m.splice(m.delegateCount++,0,k):m.push(k),r.event.global[n]=!0)}},remove:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,n,o,p,q=V.hasData(a)&&V.get(a);if(q&&(i=q.events)){b=(b||\"\").match(K)||[\"\"],j=b.length;while(j--)if(h=ta.exec(b[j])||[],n=p=h[1],o=(h[2]||\"\").split(\".\").sort(),n){l=r.event.special[n]||{},n=(d?l.delegateType:l.bindType)||n,m=i[n]||[],h=h[2]&&new RegExp(\"(^|\\\\.)\"+o.join(\"\\\\.(?:.*\\\\.|)\")+\"(\\\\.|$)\"),g=f=m.length;while(f--)k=m[f],!e&&p!==k.origType||c&&c.guid!==k.guid||h&&!h.test(k.namespace)||d&&d!==k.selector&&(\"**\"!==d||!k.selector)||(m.splice(f,1),k.selector&&m.delegateCount--,l.remove&&l.remove.call(a,k));g&&!m.length&&(l.teardown&&l.teardown.call(a,o,q.handle)!==!1||r.removeEvent(a,n,q.handle),delete i[n])}else for(n in i)r.event.remove(a,n+b[j],c,d,!0);r.isEmptyObject(i)&&V.remove(a,\"handle events\")}},dispatch:function(a){var b=r.event.fix(a),c,d,e,f,g,h,i=new Array(arguments.length),j=(V.get(this,\"events\")||{})[b.type]||[],k=r.event.special[b.type]||{};for(i[0]=b,c=1;c<arguments.length;c++)i[c]=arguments[c];if(b.delegateTarget=this,!k.preDispatch||k.preDispatch.call(this,b)!==!1){h=r.event.handlers.call(this,b,j),c=0;while((f=h[c++])&&!b.isPropagationStopped()){b.currentTarget=f.elem,d=0;while((g=f.handlers[d++])&&!b.isImmediatePropagationStopped())b.rnamespace&&!b.rnamespace.test(g.namespace)||(b.handleObj=g,b.data=g.data,e=((r.event.special[g.origType]||{}).handle||g.handler).apply(f.elem,i),void 0!==e&&(b.result=e)===!1&&(b.preventDefault(),b.stopPropagation()))}return k.postDispatch&&k.postDispatch.call(this,b),b.result}},handlers:function(a,b){var c,d,e,f,g,h=[],i=b.delegateCount,j=a.target;if(i&&j.nodeType&&!(\"click\"===a.type&&a.button>=1))for(;j!==this;j=j.parentNode||this)if(1===j.nodeType&&(\"click\"!==a.type||j.disabled!==!0)){for(f=[],g={},c=0;c<i;c++)d=b[c],e=d.selector+\" \",void 0===g[e]&&(g[e]=d.needsContext?r(e,this).index(j)>-1:r.find(e,this,null,[j]).length),g[e]&&f.push(d);f.length&&h.push({elem:j,handlers:f})}return j=this,i<b.length&&h.push({elem:j,handlers:b.slice(i)}),h},addProp:function(a,b){Object.defineProperty(r.Event.prototype,a,{enumerable:!0,configurable:!0,get:r.isFunction(b)?function(){if(this.originalEvent)return b(this.originalEvent)}:function(){if(this.originalEvent)return this.originalEvent[a]},set:function(b){Object.defineProperty(this,a,{enumerable:!0,configurable:!0,writable:!0,value:b})}})},fix:function(a){return a[r.expando]?a:new r.Event(a)},special:{load:{noBubble:!0},focus:{trigger:function(){if(this!==wa()&&this.focus)return this.focus(),!1},delegateType:\"focusin\"},blur:{trigger:function(){if(this===wa()&&this.blur)return this.blur(),!1},delegateType:\"focusout\"},click:{trigger:function(){if(\"checkbox\"===this.type&&this.click&&r.nodeName(this,\"input\"))return this.click(),!1},_default:function(a){return r.nodeName(a.target,\"a\")}},beforeunload:{postDispatch:function(a){void 0!==a.result&&a.originalEvent&&(a.originalEvent.returnValue=a.result)}}}},r.removeEvent=function(a,b,c){a.removeEventListener&&a.removeEventListener(b,c)},r.Event=function(a,b){return this instanceof r.Event?(a&&a.type?(this.originalEvent=a,this.type=a.type,this.isDefaultPrevented=a.defaultPrevented||void 0===a.defaultPrevented&&a.returnValue===!1?ua:va,this.target=a.target&&3===a.target.nodeType?a.target.parentNode:a.target,this.currentTarget=a.currentTarget,this.relatedTarget=a.relatedTarget):this.type=a,b&&r.extend(this,b),this.timeStamp=a&&a.timeStamp||r.now(),void(this[r.expando]=!0)):new r.Event(a,b)},r.Event.prototype={constructor:r.Event,isDefaultPrevented:va,isPropagationStopped:va,isImmediatePropagationStopped:va,isSimulated:!1,preventDefault:function(){var a=this.originalEvent;this.isDefaultPrevented=ua,a&&!this.isSimulated&&a.preventDefault()},stopPropagation:function(){var a=this.originalEvent;this.isPropagationStopped=ua,a&&!this.isSimulated&&a.stopPropagation()},stopImmediatePropagation:function(){var a=this.originalEvent;this.isImmediatePropagationStopped=ua,a&&!this.isSimulated&&a.stopImmediatePropagation(),this.stopPropagation()}},r.each({altKey:!0,bubbles:!0,cancelable:!0,changedTouches:!0,ctrlKey:!0,detail:!0,eventPhase:!0,metaKey:!0,pageX:!0,pageY:!0,shiftKey:!0,view:!0,\"char\":!0,charCode:!0,key:!0,keyCode:!0,button:!0,buttons:!0,clientX:!0,clientY:!0,offsetX:!0,offsetY:!0,pointerId:!0,pointerType:!0,screenX:!0,screenY:!0,targetTouches:!0,toElement:!0,touches:!0,which:function(a){var b=a.button;return null==a.which&&ra.test(a.type)?null!=a.charCode?a.charCode:a.keyCode:!a.which&&void 0!==b&&sa.test(a.type)?1&b?1:2&b?3:4&b?2:0:a.which}},r.event.addProp),r.each({mouseenter:\"mouseover\",mouseleave:\"mouseout\",pointerenter:\"pointerover\",pointerleave:\"pointerout\"},function(a,b){r.event.special[a]={delegateType:b,bindType:b,handle:function(a){var c,d=this,e=a.relatedTarget,f=a.handleObj;return e&&(e===d||r.contains(d,e))||(a.type=f.origType,c=f.handler.apply(this,arguments),a.type=b),c}}}),r.fn.extend({on:function(a,b,c,d){return xa(this,a,b,c,d)},one:function(a,b,c,d){return xa(this,a,b,c,d,1)},off:function(a,b,c){var d,e;if(a&&a.preventDefault&&a.handleObj)return d=a.handleObj,r(a.delegateTarget).off(d.namespace?d.origType+\".\"+d.namespace:d.origType,d.selector,d.handler),this;if(\"object\"==typeof a){for(e in a)this.off(e,b,a[e]);return this}return b!==!1&&\"function\"!=typeof b||(c=b,b=void 0),c===!1&&(c=va),this.each(function(){r.event.remove(this,a,c,b)})}});var ya=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([a-z][^\\/\\0>\\x20\\t\\r\\n\\f]*)[^>]*)\\/>/gi,za=/<script|<style|<link/i,Aa=/checked\\s*(?:[^=]|=\\s*.checked.)/i,Ba=/^true\\/(.*)/,Ca=/^\\s*<!(?:\\[CDATA\\[|--)|(?:\\]\\]|--)>\\s*$/g;function Da(a,b){return r.nodeName(a,\"table\")&&r.nodeName(11!==b.nodeType?b:b.firstChild,\"tr\")?a.getElementsByTagName(\"tbody\")[0]||a:a}function Ea(a){return a.type=(null!==a.getAttribute(\"type\"))+\"/\"+a.type,a}function Fa(a){var b=Ba.exec(a.type);return b?a.type=b[1]:a.removeAttribute(\"type\"),a}function Ga(a,b){var c,d,e,f,g,h,i,j;if(1===b.nodeType){if(V.hasData(a)&&(f=V.access(a),g=V.set(b,f),j=f.events)){delete g.handle,g.events={};for(e in j)for(c=0,d=j[e].length;c<d;c++)r.event.add(b,e,j[e][c])}W.hasData(a)&&(h=W.access(a),i=r.extend({},h),W.set(b,i))}}function Ha(a,b){var c=b.nodeName.toLowerCase();\"input\"===c&&ia.test(a.type)?b.checked=a.checked:\"input\"!==c&&\"textarea\"!==c||(b.defaultValue=a.defaultValue)}function Ia(a,b,c,d){b=g.apply([],b);var e,f,h,i,j,k,l=0,m=a.length,n=m-1,q=b[0],s=r.isFunction(q);if(s||m>1&&\"string\"==typeof q&&!o.checkClone&&Aa.test(q))return a.each(function(e){var f=a.eq(e);s&&(b[0]=q.call(this,e,f.html())),Ia(f,b,c,d)});if(m&&(e=pa(b,a[0].ownerDocument,!1,a,d),f=e.firstChild,1===e.childNodes.length&&(e=f),f||d)){for(h=r.map(ma(e,\"script\"),Ea),i=h.length;l<m;l++)j=e,l!==n&&(j=r.clone(j,!0,!0),i&&r.merge(h,ma(j,\"script\"))),c.call(a[l],j,l);if(i)for(k=h[h.length-1].ownerDocument,r.map(h,Fa),l=0;l<i;l++)j=h[l],ka.test(j.type||\"\")&&!V.access(j,\"globalEval\")&&r.contains(k,j)&&(j.src?r._evalUrl&&r._evalUrl(j.src):p(j.textContent.replace(Ca,\"\"),k))}return a}function Ja(a,b,c){for(var d,e=b?r.filter(b,a):a,f=0;null!=(d=e[f]);f++)c||1!==d.nodeType||r.cleanData(ma(d)),d.parentNode&&(c&&r.contains(d.ownerDocument,d)&&na(ma(d,\"script\")),d.parentNode.removeChild(d));return a}r.extend({htmlPrefilter:function(a){return a.replace(ya,\"<$1></$2>\")},clone:function(a,b,c){var d,e,f,g,h=a.cloneNode(!0),i=r.contains(a.ownerDocument,a);if(!(o.noCloneChecked||1!==a.nodeType&&11!==a.nodeType||r.isXMLDoc(a)))for(g=ma(h),f=ma(a),d=0,e=f.length;d<e;d++)Ha(f[d],g[d]);if(b)if(c)for(f=f||ma(a),g=g||ma(h),d=0,e=f.length;d<e;d++)Ga(f[d],g[d]);else Ga(a,h);return g=ma(h,\"script\"),g.length>0&&na(g,!i&&ma(a,\"script\")),h},cleanData:function(a){for(var b,c,d,e=r.event.special,f=0;void 0!==(c=a[f]);f++)if(T(c)){if(b=c[V.expando]){if(b.events)for(d in b.events)e[d]?r.event.remove(c,d):r.removeEvent(c,d,b.handle);c[V.expando]=void 0}c[W.expando]&&(c[W.expando]=void 0)}}}),r.fn.extend({detach:function(a){return Ja(this,a,!0)},remove:function(a){return Ja(this,a)},text:function(a){return S(this,function(a){return void 0===a?r.text(this):this.empty().each(function(){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||(this.textContent=a)})},null,a,arguments.length)},append:function(){return Ia(this,arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=Da(this,a);b.appendChild(a)}})},prepend:function(){return Ia(this,arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=Da(this,a);b.insertBefore(a,b.firstChild)}})},before:function(){return Ia(this,arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this)})},after:function(){return Ia(this,arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this.nextSibling)})},empty:function(){for(var a,b=0;null!=(a=this[b]);b++)1===a.nodeType&&(r.cleanData(ma(a,!1)),a.textContent=\"\");return this},clone:function(a,b){return a=null!=a&&a,b=null==b?a:b,this.map(function(){return r.clone(this,a,b)})},html:function(a){return S(this,function(a){var b=this[0]||{},c=0,d=this.length;if(void 0===a&&1===b.nodeType)return b.innerHTML;if(\"string\"==typeof a&&!za.test(a)&&!la[(ja.exec(a)||[\"\",\"\"])[1].toLowerCase()]){a=r.htmlPrefilter(a);try{for(;c<d;c++)b=this[c]||{},1===b.nodeType&&(r.cleanData(ma(b,!1)),b.innerHTML=a);b=0}catch(e){}}b&&this.empty().append(a)},null,a,arguments.length)},replaceWith:function(){var a=[];return Ia(this,arguments,function(b){var c=this.parentNode;r.inArray(this,a)<0&&(r.cleanData(ma(this)),c&&c.replaceChild(b,this))},a)}}),r.each({appendTo:\"append\",prependTo:\"prepend\",insertBefore:\"before\",insertAfter:\"after\",replaceAll:\"replaceWith\"},function(a,b){r.fn[a]=function(a){for(var c,d=[],e=r(a),f=e.length-1,g=0;g<=f;g++)c=g===f?this:this.clone(!0),r(e[g])[b](c),h.apply(d,c.get());return this.pushStack(d)}});var Ka=/^margin/,La=new RegExp(\"^(\"+_+\")(?!px)[a-z%]+$\",\"i\"),Ma=function(b){var c=b.ownerDocument.defaultView;return c&&c.opener||(c=a),c.getComputedStyle(b)};!function(){function b(){if(i){i.style.cssText=\"box-sizing:border-box;position:relative;display:block;margin:auto;border:1px;padding:1px;top:1%;width:50%\",i.innerHTML=\"\",qa.appendChild(h);var b=a.getComputedStyle(i);c=\"1%\"!==b.top,g=\"2px\"===b.marginLeft,e=\"4px\"===b.width,i.style.marginRight=\"50%\",f=\"4px\"===b.marginRight,qa.removeChild(h),i=null}}var c,e,f,g,h=d.createElement(\"div\"),i=d.createElement(\"div\");i.style&&(i.style.backgroundClip=\"content-box\",i.cloneNode(!0).style.backgroundClip=\"\",o.clearCloneStyle=\"content-box\"===i.style.backgroundClip,h.style.cssText=\"border:0;width:8px;height:0;top:0;left:-9999px;padding:0;margin-top:1px;position:absolute\",h.appendChild(i),r.extend(o,{pixelPosition:function(){return b(),c},boxSizingReliable:function(){return b(),e},pixelMarginRight:function(){return b(),f},reliableMarginLeft:function(){return b(),g}}))}();function Na(a,b,c){var d,e,f,g,h=a.style;return c=c||Ma(a),c&&(g=c.getPropertyValue(b)||c[b],\"\"!==g||r.contains(a.ownerDocument,a)||(g=r.style(a,b)),!o.pixelMarginRight()&&La.test(g)&&Ka.test(b)&&(d=h.width,e=h.minWidth,f=h.maxWidth,h.minWidth=h.maxWidth=h.width=g,g=c.width,h.width=d,h.minWidth=e,h.maxWidth=f)),void 0!==g?g+\"\":g}function Oa(a,b){return{get:function(){return a()?void delete this.get:(this.get=b).apply(this,arguments)}}}var Pa=/^(none|table(?!-c[ea]).+)/,Qa={position:\"absolute\",visibility:\"hidden\",display:\"block\"},Ra={letterSpacing:\"0\",fontWeight:\"400\"},Sa=[\"Webkit\",\"Moz\",\"ms\"],Ta=d.createElement(\"div\").style;function Ua(a){if(a in Ta)return a;var b=a[0].toUpperCase()+a.slice(1),c=Sa.length;while(c--)if(a=Sa[c]+b,a in Ta)return a}function Va(a,b,c){var d=aa.exec(b);return d?Math.max(0,d[2]-(c||0))+(d[3]||\"px\"):b}function Wa(a,b,c,d,e){var f,g=0;for(f=c===(d?\"border\":\"content\")?4:\"width\"===b?1:0;f<4;f+=2)\"margin\"===c&&(g+=r.css(a,c+ba[f],!0,e)),d?(\"content\"===c&&(g-=r.css(a,\"padding\"+ba[f],!0,e)),\"margin\"!==c&&(g-=r.css(a,\"border\"+ba[f]+\"Width\",!0,e))):(g+=r.css(a,\"padding\"+ba[f],!0,e),\"padding\"!==c&&(g+=r.css(a,\"border\"+ba[f]+\"Width\",!0,e)));return g}function Xa(a,b,c){var d,e=!0,f=Ma(a),g=\"border-box\"===r.css(a,\"boxSizing\",!1,f);if(a.getClientRects().length&&(d=a.getBoundingClientRect()[b]),d<=0||null==d){if(d=Na(a,b,f),(d<0||null==d)&&(d=a.style[b]),La.test(d))return d;e=g&&(o.boxSizingReliable()||d===a.style[b]),d=parseFloat(d)||0}return d+Wa(a,b,c||(g?\"border\":\"content\"),e,f)+\"px\"}r.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=Na(a,\"opacity\");return\"\"===c?\"1\":c}}}},cssNumber:{animationIterationCount:!0,columnCount:!0,fillOpacity:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{\"float\":\"cssFloat\"},style:function(a,b,c,d){if(a&&3!==a.nodeType&&8!==a.nodeType&&a.style){var e,f,g,h=r.camelCase(b),i=a.style;return b=r.cssProps[h]||(r.cssProps[h]=Ua(h)||h),g=r.cssHooks[b]||r.cssHooks[h],void 0===c?g&&\"get\"in g&&void 0!==(e=g.get(a,!1,d))?e:i[b]:(f=typeof c,\"string\"===f&&(e=aa.exec(c))&&e[1]&&(c=ea(a,b,e),f=\"number\"),null!=c&&c===c&&(\"number\"===f&&(c+=e&&e[3]||(r.cssNumber[h]?\"\":\"px\")),o.clearCloneStyle||\"\"!==c||0!==b.indexOf(\"background\")||(i[b]=\"inherit\"),g&&\"set\"in g&&void 0===(c=g.set(a,c,d))||(i[b]=c)),void 0)}},css:function(a,b,c,d){var e,f,g,h=r.camelCase(b);return b=r.cssProps[h]||(r.cssProps[h]=Ua(h)||h),g=r.cssHooks[b]||r.cssHooks[h],g&&\"get\"in g&&(e=g.get(a,!0,c)),void 0===e&&(e=Na(a,b,d)),\"normal\"===e&&b in Ra&&(e=Ra[b]),\"\"===c||c?(f=parseFloat(e),c===!0||isFinite(f)?f||0:e):e}}),r.each([\"height\",\"width\"],function(a,b){r.cssHooks[b]={get:function(a,c,d){if(c)return!Pa.test(r.css(a,\"display\"))||a.getClientRects().length&&a.getBoundingClientRect().width?Xa(a,b,d):da(a,Qa,function(){return Xa(a,b,d)})},set:function(a,c,d){var e,f=d&&Ma(a),g=d&&Wa(a,b,d,\"border-box\"===r.css(a,\"boxSizing\",!1,f),f);return g&&(e=aa.exec(c))&&\"px\"!==(e[3]||\"px\")&&(a.style[b]=c,c=r.css(a,b)),Va(a,c,g)}}}),r.cssHooks.marginLeft=Oa(o.reliableMarginLeft,function(a,b){if(b)return(parseFloat(Na(a,\"marginLeft\"))||a.getBoundingClientRect().left-da(a,{marginLeft:0},function(){return a.getBoundingClientRect().left}))+\"px\"}),r.each({margin:\"\",padding:\"\",border:\"Width\"},function(a,b){r.cssHooks[a+b]={expand:function(c){for(var d=0,e={},f=\"string\"==typeof c?c.split(\" \"):[c];d<4;d++)e[a+ba[d]+b]=f[d]||f[d-2]||f[0];return e}},Ka.test(a)||(r.cssHooks[a+b].set=Va)}),r.fn.extend({css:function(a,b){return S(this,function(a,b,c){var d,e,f={},g=0;if(r.isArray(b)){for(d=Ma(a),e=b.length;g<e;g++)f[b[g]]=r.css(a,b[g],!1,d);return f}return void 0!==c?r.style(a,b,c):r.css(a,b)},a,b,arguments.length>1)}}),r.fn.delay=function(b,c){return b=r.fx?r.fx.speeds[b]||b:b,c=c||\"fx\",this.queue(c,function(c,d){var e=a.setTimeout(c,b);d.stop=function(){a.clearTimeout(e)}})},function(){var a=d.createElement(\"input\"),b=d.createElement(\"select\"),c=b.appendChild(d.createElement(\"option\"));a.type=\"checkbox\",o.checkOn=\"\"!==a.value,o.optSelected=c.selected,a=d.createElement(\"input\"),a.value=\"t\",a.type=\"radio\",o.radioValue=\"t\"===a.value}();var Ya,Za=r.expr.attrHandle;r.fn.extend({attr:function(a,b){return S(this,r.attr,a,b,arguments.length>1)},removeAttr:function(a){return this.each(function(){r.removeAttr(this,a)})}}),r.extend({attr:function(a,b,c){var d,e,f=a.nodeType;if(3!==f&&8!==f&&2!==f)return\"undefined\"==typeof a.getAttribute?r.prop(a,b,c):(1===f&&r.isXMLDoc(a)||(e=r.attrHooks[b.toLowerCase()]||(r.expr.match.bool.test(b)?Ya:void 0)),void 0!==c?null===c?void r.removeAttr(a,b):e&&\"set\"in e&&void 0!==(d=e.set(a,c,b))?d:(a.setAttribute(b,c+\"\"),c):e&&\"get\"in e&&null!==(d=e.get(a,b))?d:(d=r.find.attr(a,b),null==d?void 0:d))},attrHooks:{type:{set:function(a,b){if(!o.radioValue&&\"radio\"===b&&r.nodeName(a,\"input\")){var c=a.value;return a.setAttribute(\"type\",b),c&&(a.value=c),b}}}},removeAttr:function(a,b){var c,d=0,e=b&&b.match(K);if(e&&1===a.nodeType)while(c=e[d++])a.removeAttribute(c)}}),Ya={set:function(a,b,c){return b===!1?r.removeAttr(a,c):a.setAttribute(c,c),c}},r.each(r.expr.match.bool.source.match(/\\w+/g),function(a,b){var c=Za[b]||r.find.attr;Za[b]=function(a,b,d){var e,f,g=b.toLowerCase();return d||(f=Za[g],Za[g]=e,e=null!=c(a,b,d)?g:null,Za[g]=f),e}});var $a=/^(?:input|select|textarea|button)$/i,_a=/^(?:a|area)$/i;r.fn.extend({prop:function(a,b){return S(this,r.prop,a,b,arguments.length>1)},removeProp:function(a){return this.each(function(){delete this[r.propFix[a]||a]})}}),r.extend({prop:function(a,b,c){var d,e,f=a.nodeType;if(3!==f&&8!==f&&2!==f)return 1===f&&r.isXMLDoc(a)||(b=r.propFix[b]||b,e=r.propHooks[b]),void 0!==c?e&&\"set\"in e&&void 0!==(d=e.set(a,c,b))?d:a[b]=c:e&&\"get\"in e&&null!==(d=e.get(a,b))?d:a[b]},propHooks:{tabIndex:{get:function(a){var b=r.find.attr(a,\"tabindex\");return b?parseInt(b,10):$a.test(a.nodeName)||_a.test(a.nodeName)&&a.href?0:-1}}},propFix:{\"for\":\"htmlFor\",\"class\":\"className\"}}),o.optSelected||(r.propHooks.selected={get:function(a){var b=a.parentNode;return b&&b.parentNode&&b.parentNode.selectedIndex,null},set:function(a){var b=a.parentNode;b&&(b.selectedIndex,b.parentNode&&b.parentNode.selectedIndex)}}),r.each([\"tabIndex\",\"readOnly\",\"maxLength\",\"cellSpacing\",\"cellPadding\",\"rowSpan\",\"colSpan\",\"useMap\",\"frameBorder\",\"contentEditable\"],function(){r.propFix[this.toLowerCase()]=this});function ab(a){var b=a.match(K)||[];return b.join(\" \")}function bb(a){return a.getAttribute&&a.getAttribute(\"class\")||\"\"}r.fn.extend({addClass:function(a){var b,c,d,e,f,g,h,i=0;if(r.isFunction(a))return this.each(function(b){r(this).addClass(a.call(this,b,bb(this)))});if(\"string\"==typeof a&&a){b=a.match(K)||[];while(c=this[i++])if(e=bb(c),d=1===c.nodeType&&\" \"+ab(e)+\" \"){g=0;while(f=b[g++])d.indexOf(\" \"+f+\" \")<0&&(d+=f+\" \");h=ab(d),e!==h&&c.setAttribute(\"class\",h)}}return this},removeClass:function(a){var b,c,d,e,f,g,h,i=0;if(r.isFunction(a))return this.each(function(b){r(this).removeClass(a.call(this,b,bb(this)))});if(!arguments.length)return this.attr(\"class\",\"\");if(\"string\"==typeof a&&a){b=a.match(K)||[];while(c=this[i++])if(e=bb(c),d=1===c.nodeType&&\" \"+ab(e)+\" \"){g=0;while(f=b[g++])while(d.indexOf(\" \"+f+\" \")>-1)d=d.replace(\" \"+f+\" \",\" \");h=ab(d),e!==h&&c.setAttribute(\"class\",h)}}return this},toggleClass:function(a,b){var c=typeof a;return\"boolean\"==typeof b&&\"string\"===c?b?this.addClass(a):this.removeClass(a):r.isFunction(a)?this.each(function(c){r(this).toggleClass(a.call(this,c,bb(this),b),b)}):this.each(function(){var b,d,e,f;if(\"string\"===c){d=0,e=r(this),f=a.match(K)||[];while(b=f[d++])e.hasClass(b)?e.removeClass(b):e.addClass(b)}else void 0!==a&&\"boolean\"!==c||(b=bb(this),b&&V.set(this,\"__className__\",b),this.setAttribute&&this.setAttribute(\"class\",b||a===!1?\"\":V.get(this,\"__className__\")||\"\"))})},hasClass:function(a){var b,c,d=0;b=\" \"+a+\" \";while(c=this[d++])if(1===c.nodeType&&(\" \"+ab(bb(c))+\" \").indexOf(b)>-1)return!0;return!1}});var cb=/\\r/g;r.fn.extend({val:function(a){var b,c,d,e=this[0];{if(arguments.length)return d=r.isFunction(a),this.each(function(c){var e;1===this.nodeType&&(e=d?a.call(this,c,r(this).val()):a,null==e?e=\"\":\"number\"==typeof e?e+=\"\":r.isArray(e)&&(e=r.map(e,function(a){return null==a?\"\":a+\"\"})),b=r.valHooks[this.type]||r.valHooks[this.nodeName.toLowerCase()],b&&\"set\"in b&&void 0!==b.set(this,e,\"value\")||(this.value=e))});if(e)return b=r.valHooks[e.type]||r.valHooks[e.nodeName.toLowerCase()],b&&\"get\"in b&&void 0!==(c=b.get(e,\"value\"))?c:(c=e.value,\"string\"==typeof c?c.replace(cb,\"\"):null==c?\"\":c)}}}),r.extend({valHooks:{option:{get:function(a){var b=r.find.attr(a,\"value\");return null!=b?b:ab(r.text(a))}},select:{get:function(a){var b,c,d,e=a.options,f=a.selectedIndex,g=\"select-one\"===a.type,h=g?null:[],i=g?f+1:e.length;for(d=f<0?i:g?f:0;d<i;d++)if(c=e[d],(c.selected||d===f)&&!c.disabled&&(!c.parentNode.disabled||!r.nodeName(c.parentNode,\"optgroup\"))){if(b=r(c).val(),g)return b;h.push(b)}return h},set:function(a,b){var c,d,e=a.options,f=r.makeArray(b),g=e.length;while(g--)d=e[g],(d.selected=r.inArray(r.valHooks.option.get(d),f)>-1)&&(c=!0);return c||(a.selectedIndex=-1),f}}}}),r.each([\"radio\",\"checkbox\"],function(){r.valHooks[this]={set:function(a,b){if(r.isArray(b))return a.checked=r.inArray(r(a).val(),b)>-1}},o.checkOn||(r.valHooks[this].get=function(a){return null===a.getAttribute(\"value\")?\"on\":a.value})});var db=/^(?:focusinfocus|focusoutblur)$/;r.extend(r.event,{trigger:function(b,c,e,f){var g,h,i,j,k,m,n,o=[e||d],p=l.call(b,\"type\")?b.type:b,q=l.call(b,\"namespace\")?b.namespace.split(\".\"):[];if(h=i=e=e||d,3!==e.nodeType&&8!==e.nodeType&&!db.test(p+r.event.triggered)&&(p.indexOf(\".\")>-1&&(q=p.split(\".\"),p=q.shift(),q.sort()),k=p.indexOf(\":\")<0&&\"on\"+p,b=b[r.expando]?b:new r.Event(p,\"object\"==typeof b&&b),b.isTrigger=f?2:3,b.namespace=q.join(\".\"),b.rnamespace=b.namespace?new RegExp(\"(^|\\\\.)\"+q.join(\"\\\\.(?:.*\\\\.|)\")+\"(\\\\.|$)\"):null,b.result=void 0,b.target||(b.target=e),c=null==c?[b]:r.makeArray(c,[b]),n=r.event.special[p]||{},f||!n.trigger||n.trigger.apply(e,c)!==!1)){if(!f&&!n.noBubble&&!r.isWindow(e)){for(j=n.delegateType||p,db.test(j+p)||(h=h.parentNode);h;h=h.parentNode)o.push(h),i=h;i===(e.ownerDocument||d)&&o.push(i.defaultView||i.parentWindow||a)}g=0;while((h=o[g++])&&!b.isPropagationStopped())b.type=g>1?j:n.bindType||p,m=(V.get(h,\"events\")||{})[b.type]&&V.get(h,\"handle\"),m&&m.apply(h,c),m=k&&h[k],m&&m.apply&&T(h)&&(b.result=m.apply(h,c),b.result===!1&&b.preventDefault());return b.type=p,f||b.isDefaultPrevented()||n._default&&n._default.apply(o.pop(),c)!==!1||!T(e)||k&&r.isFunction(e[p])&&!r.isWindow(e)&&(i=e[k],i&&(e[k]=null),r.event.triggered=p,e[p](),r.event.triggered=void 0,i&&(e[k]=i)),b.result}},simulate:function(a,b,c){var d=r.extend(new r.Event,c,{type:a,isSimulated:!0});r.event.trigger(d,null,b)}}),r.fn.extend({trigger:function(a,b){return this.each(function(){r.event.trigger(a,b,this)})},triggerHandler:function(a,b){var c=this[0];if(c)return r.event.trigger(a,b,c,!0)}}),r.each(\"blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu\".split(\" \"),function(a,b){r.fn[b]=function(a,c){return arguments.length>0?this.on(b,null,a,c):this.trigger(b)}}),r.fn.extend({hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)}}),o.focusin=\"onfocusin\"in a,o.focusin||r.each({focus:\"focusin\",blur:\"focusout\"},function(a,b){var c=function(a){r.event.simulate(b,a.target,r.event.fix(a))};r.event.special[b]={setup:function(){var d=this.ownerDocument||this,e=V.access(d,b);e||d.addEventListener(a,c,!0),V.access(d,b,(e||0)+1)},teardown:function(){var d=this.ownerDocument||this,e=V.access(d,b)-1;e?V.access(d,b,e):(d.removeEventListener(a,c,!0),V.remove(d,b))}}});var eb=/\\[\\]$/,fb=/\\r?\\n/g,gb=/^(?:submit|button|image|reset|file)$/i,hb=/^(?:input|select|textarea|keygen)/i;function ib(a,b,c,d){var e;if(r.isArray(b))r.each(b,function(b,e){c||eb.test(a)?d(a,e):ib(a+\"[\"+(\"object\"==typeof e&&null!=e?b:\"\")+\"]\",e,c,d);\n});else if(c||\"object\"!==r.type(b))d(a,b);else for(e in b)ib(a+\"[\"+e+\"]\",b[e],c,d)}r.param=function(a,b){var c,d=[],e=function(a,b){var c=r.isFunction(b)?b():b;d[d.length]=encodeURIComponent(a)+\"=\"+encodeURIComponent(null==c?\"\":c)};if(r.isArray(a)||a.jquery&&!r.isPlainObject(a))r.each(a,function(){e(this.name,this.value)});else for(c in a)ib(c,a[c],b,e);return d.join(\"&\")},r.fn.extend({serialize:function(){return r.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var a=r.prop(this,\"elements\");return a?r.makeArray(a):this}).filter(function(){var a=this.type;return this.name&&!r(this).is(\":disabled\")&&hb.test(this.nodeName)&&!gb.test(a)&&(this.checked||!ia.test(a))}).map(function(a,b){var c=r(this).val();return null==c?null:r.isArray(c)?r.map(c,function(a){return{name:b.name,value:a.replace(fb,\"\\r\\n\")}}):{name:b.name,value:c.replace(fb,\"\\r\\n\")}}).get()}}),r.fn.extend({wrapAll:function(a){var b;return this[0]&&(r.isFunction(a)&&(a=a.call(this[0])),b=r(a,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstElementChild)a=a.firstElementChild;return a}).append(this)),this},wrapInner:function(a){return r.isFunction(a)?this.each(function(b){r(this).wrapInner(a.call(this,b))}):this.each(function(){var b=r(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){var b=r.isFunction(a);return this.each(function(c){r(this).wrapAll(b?a.call(this,c):a)})},unwrap:function(a){return this.parent(a).not(\"body\").each(function(){r(this).replaceWith(this.childNodes)}),this}}),r.expr.pseudos.hidden=function(a){return!r.expr.pseudos.visible(a)},r.expr.pseudos.visible=function(a){return!!(a.offsetWidth||a.offsetHeight||a.getClientRects().length)},o.createHTMLDocument=function(){var a=d.implementation.createHTMLDocument(\"\").body;return a.innerHTML=\"<form></form><form></form>\",2===a.childNodes.length}(),r.parseHTML=function(a,b,c){if(\"string\"!=typeof a)return[];\"boolean\"==typeof b&&(c=b,b=!1);var e,f,g;return b||(o.createHTMLDocument?(b=d.implementation.createHTMLDocument(\"\"),e=b.createElement(\"base\"),e.href=d.location.href,b.head.appendChild(e)):b=d),f=B.exec(a),g=!c&&[],f?[b.createElement(f[1])]:(f=pa([a],b,g),g&&g.length&&r(g).remove(),r.merge([],f.childNodes))};function jb(a){return r.isWindow(a)?a:9===a.nodeType&&a.defaultView}r.offset={setOffset:function(a,b,c){var d,e,f,g,h,i,j,k=r.css(a,\"position\"),l=r(a),m={};\"static\"===k&&(a.style.position=\"relative\"),h=l.offset(),f=r.css(a,\"top\"),i=r.css(a,\"left\"),j=(\"absolute\"===k||\"fixed\"===k)&&(f+i).indexOf(\"auto\")>-1,j?(d=l.position(),g=d.top,e=d.left):(g=parseFloat(f)||0,e=parseFloat(i)||0),r.isFunction(b)&&(b=b.call(a,c,r.extend({},h))),null!=b.top&&(m.top=b.top-h.top+g),null!=b.left&&(m.left=b.left-h.left+e),\"using\"in b?b.using.call(a,m):l.css(m)}},r.fn.extend({offset:function(a){if(arguments.length)return void 0===a?this:this.each(function(b){r.offset.setOffset(this,a,b)});var b,c,d,e,f=this[0];if(f)return f.getClientRects().length?(d=f.getBoundingClientRect(),d.width||d.height?(e=f.ownerDocument,c=jb(e),b=e.documentElement,{top:d.top+c.pageYOffset-b.clientTop,left:d.left+c.pageXOffset-b.clientLeft}):d):{top:0,left:0}},position:function(){if(this[0]){var a,b,c=this[0],d={top:0,left:0};return\"fixed\"===r.css(c,\"position\")?b=c.getBoundingClientRect():(a=this.offsetParent(),b=this.offset(),r.nodeName(a[0],\"html\")||(d=a.offset()),d={top:d.top+r.css(a[0],\"borderTopWidth\",!0),left:d.left+r.css(a[0],\"borderLeftWidth\",!0)}),{top:b.top-d.top-r.css(c,\"marginTop\",!0),left:b.left-d.left-r.css(c,\"marginLeft\",!0)}}},offsetParent:function(){return this.map(function(){var a=this.offsetParent;while(a&&\"static\"===r.css(a,\"position\"))a=a.offsetParent;return a||qa})}}),r.each({scrollLeft:\"pageXOffset\",scrollTop:\"pageYOffset\"},function(a,b){var c=\"pageYOffset\"===b;r.fn[a]=function(d){return S(this,function(a,d,e){var f=jb(a);return void 0===e?f?f[b]:a[d]:void(f?f.scrollTo(c?f.pageXOffset:e,c?e:f.pageYOffset):a[d]=e)},a,d,arguments.length)}}),r.each([\"top\",\"left\"],function(a,b){r.cssHooks[b]=Oa(o.pixelPosition,function(a,c){if(c)return c=Na(a,b),La.test(c)?r(a).position()[b]+\"px\":c})}),r.each({Height:\"height\",Width:\"width\"},function(a,b){r.each({padding:\"inner\"+a,content:b,\"\":\"outer\"+a},function(c,d){r.fn[d]=function(e,f){var g=arguments.length&&(c||\"boolean\"!=typeof e),h=c||(e===!0||f===!0?\"margin\":\"border\");return S(this,function(b,c,e){var f;return r.isWindow(b)?0===d.indexOf(\"outer\")?b[\"inner\"+a]:b.document.documentElement[\"client\"+a]:9===b.nodeType?(f=b.documentElement,Math.max(b.body[\"scroll\"+a],f[\"scroll\"+a],b.body[\"offset\"+a],f[\"offset\"+a],f[\"client\"+a])):void 0===e?r.css(b,c,h):r.style(b,c,e,h)},b,g?e:void 0,g)}})}),\"function\"==typeof define&&define.amd&&define(\"jquery\",[],function(){return r});var kb=a.jQuery,lb=a.$;return r.noConflict=function(b){return a.$===r&&(a.$=lb),b&&a.jQuery===r&&(a.jQuery=kb),r},b||(a.jQuery=a.$=r),r});\n;/*!\n * Bootstrap v3.3.5 (http://getbootstrap.com)\n * Copyright 2011-2015 Twitter, Inc.\n * Licensed under the MIT license\n */\nif(\"undefined\"==typeof jQuery)throw new Error(\"Bootstrap's JavaScript requires jQuery\");+function(a){\"use strict\";var b=a.fn.jquery.split(\" \")[0].split(\".\");if(b[0]<2&&b[1]<9||1==b[0]&&9==b[1]&&b[2]<1)throw new Error(\"Bootstrap's JavaScript requires jQuery version 1.9.1 or higher\")}(jQuery),+function(a){\"use strict\";function b(){var a=document.createElement(\"bootstrap\"),b={WebkitTransition:\"webkitTransitionEnd\",MozTransition:\"transitionend\",OTransition:\"oTransitionEnd otransitionend\",transition:\"transitionend\"};for(var c in b)if(void 0!==a.style[c])return{end:b[c]};return!1}a.fn.emulateTransitionEnd=function(b){var c=!1,d=this;a(this).one(\"bsTransitionEnd\",function(){c=!0});var e=function(){c||a(d).trigger(a.support.transition.end)};return setTimeout(e,b),this},a(function(){a.support.transition=b(),a.support.transition&&(a.event.special.bsTransitionEnd={bindType:a.support.transition.end,delegateType:a.support.transition.end,handle:function(b){return a(b.target).is(this)?b.handleObj.handler.apply(this,arguments):void 0}})})}(jQuery),+function(a){\"use strict\";function b(b){return this.each(function(){var c=a(this),e=c.data(\"bs.alert\");e||c.data(\"bs.alert\",e=new d(this)),\"string\"==typeof b&&e[b].call(c)})}var c='[data-dismiss=\"alert\"]',d=function(b){a(b).on(\"click\",c,this.close)};d.VERSION=\"3.3.5\",d.TRANSITION_DURATION=150,d.prototype.close=function(b){function c(){g.detach().trigger(\"closed.bs.alert\").remove()}var e=a(this),f=e.attr(\"data-target\");f||(f=e.attr(\"href\"),f=f&&f.replace(/.*(?=#[^\\s]*$)/,\"\"));var g=a(f);b&&b.preventDefault(),g.length||(g=e.closest(\".alert\")),g.trigger(b=a.Event(\"close.bs.alert\")),b.isDefaultPrevented()||(g.removeClass(\"in\"),a.support.transition&&g.hasClass(\"fade\")?g.one(\"bsTransitionEnd\",c).emulateTransitionEnd(d.TRANSITION_DURATION):c())};var e=a.fn.alert;a.fn.alert=b,a.fn.alert.Constructor=d,a.fn.alert.noConflict=function(){return a.fn.alert=e,this},a(document).on(\"click.bs.alert.data-api\",c,d.prototype.close)}(jQuery),+function(a){\"use strict\";function b(b){return this.each(function(){var d=a(this),e=d.data(\"bs.button\"),f=\"object\"==typeof b&&b;e||d.data(\"bs.button\",e=new c(this,f)),\"toggle\"==b?e.toggle():b&&e.setState(b)})}var c=function(b,d){this.$element=a(b),this.options=a.extend({},c.DEFAULTS,d),this.isLoading=!1};c.VERSION=\"3.3.5\",c.DEFAULTS={loadingText:\"loading...\"},c.prototype.setState=function(b){var c=\"disabled\",d=this.$element,e=d.is(\"input\")?\"val\":\"html\",f=d.data();b+=\"Text\",null==f.resetText&&d.data(\"resetText\",d[e]()),setTimeout(a.proxy(function(){d[e](null==f[b]?this.options[b]:f[b]),\"loadingText\"==b?(this.isLoading=!0,d.addClass(c).attr(c,c)):this.isLoading&&(this.isLoading=!1,d.removeClass(c).removeAttr(c))},this),0)},c.prototype.toggle=function(){var a=!0,b=this.$element.closest('[data-toggle=\"buttons\"]');if(b.length){var c=this.$element.find(\"input\");\"radio\"==c.prop(\"type\")?(c.prop(\"checked\")&&(a=!1),b.find(\".active\").removeClass(\"active\"),this.$element.addClass(\"active\")):\"checkbox\"==c.prop(\"type\")&&(c.prop(\"checked\")!==this.$element.hasClass(\"active\")&&(a=!1),this.$element.toggleClass(\"active\")),c.prop(\"checked\",this.$element.hasClass(\"active\")),a&&c.trigger(\"change\")}else this.$element.attr(\"aria-pressed\",!this.$element.hasClass(\"active\")),this.$element.toggleClass(\"active\")};var d=a.fn.button;a.fn.button=b,a.fn.button.Constructor=c,a.fn.button.noConflict=function(){return a.fn.button=d,this},a(document).on(\"click.bs.button.data-api\",'[data-toggle^=\"button\"]',function(c){var d=a(c.target);d.hasClass(\"btn\")||(d=d.closest(\".btn\")),b.call(d,\"toggle\"),a(c.target).is('input[type=\"radio\"]')||a(c.target).is('input[type=\"checkbox\"]')||c.preventDefault()}).on(\"focus.bs.button.data-api blur.bs.button.data-api\",'[data-toggle^=\"button\"]',function(b){a(b.target).closest(\".btn\").toggleClass(\"focus\",/^focus(in)?$/.test(b.type))})}(jQuery),+function(a){\"use strict\";function b(b){return this.each(function(){var d=a(this),e=d.data(\"bs.carousel\"),f=a.extend({},c.DEFAULTS,d.data(),\"object\"==typeof b&&b),g=\"string\"==typeof b?b:f.slide;e||d.data(\"bs.carousel\",e=new c(this,f)),\"number\"==typeof b?e.to(b):g?e[g]():f.interval&&e.pause().cycle()})}var c=function(b,c){this.$element=a(b),this.$indicators=this.$element.find(\".carousel-indicators\"),this.options=c,this.paused=null,this.sliding=null,this.interval=null,this.$active=null,this.$items=null,this.options.keyboard&&this.$element.on(\"keydown.bs.carousel\",a.proxy(this.keydown,this)),\"hover\"==this.options.pause&&!(\"ontouchstart\"in document.documentElement)&&this.$element.on(\"mouseenter.bs.carousel\",a.proxy(this.pause,this)).on(\"mouseleave.bs.carousel\",a.proxy(this.cycle,this))};c.VERSION=\"3.3.5\",c.TRANSITION_DURATION=600,c.DEFAULTS={interval:5e3,pause:\"hover\",wrap:!0,keyboard:!0},c.prototype.keydown=function(a){if(!/input|textarea/i.test(a.target.tagName)){switch(a.which){case 37:this.prev();break;case 39:this.next();break;default:return}a.preventDefault()}},c.prototype.cycle=function(b){return b||(this.paused=!1),this.interval&&clearInterval(this.interval),this.options.interval&&!this.paused&&(this.interval=setInterval(a.proxy(this.next,this),this.options.interval)),this},c.prototype.getItemIndex=function(a){return this.$items=a.parent().children(\".item\"),this.$items.index(a||this.$active)},c.prototype.getItemForDirection=function(a,b){var c=this.getItemIndex(b),d=\"prev\"==a&&0===c||\"next\"==a&&c==this.$items.length-1;if(d&&!this.options.wrap)return b;var e=\"prev\"==a?-1:1,f=(c+e)%this.$items.length;return this.$items.eq(f)},c.prototype.to=function(a){var b=this,c=this.getItemIndex(this.$active=this.$element.find(\".item.active\"));return a>this.$items.length-1||0>a?void 0:this.sliding?this.$element.one(\"slid.bs.carousel\",function(){b.to(a)}):c==a?this.pause().cycle():this.slide(a>c?\"next\":\"prev\",this.$items.eq(a))},c.prototype.pause=function(b){return b||(this.paused=!0),this.$element.find(\".next, .prev\").length&&a.support.transition&&(this.$element.trigger(a.support.transition.end),this.cycle(!0)),this.interval=clearInterval(this.interval),this},c.prototype.next=function(){return this.sliding?void 0:this.slide(\"next\")},c.prototype.prev=function(){return this.sliding?void 0:this.slide(\"prev\")},c.prototype.slide=function(b,d){var e=this.$element.find(\".item.active\"),f=d||this.getItemForDirection(b,e),g=this.interval,h=\"next\"==b?\"left\":\"right\",i=this;if(f.hasClass(\"active\"))return this.sliding=!1;var j=f[0],k=a.Event(\"slide.bs.carousel\",{relatedTarget:j,direction:h});if(this.$element.trigger(k),!k.isDefaultPrevented()){if(this.sliding=!0,g&&this.pause(),this.$indicators.length){this.$indicators.find(\".active\").removeClass(\"active\");var l=a(this.$indicators.children()[this.getItemIndex(f)]);l&&l.addClass(\"active\")}var m=a.Event(\"slid.bs.carousel\",{relatedTarget:j,direction:h});return a.support.transition&&this.$element.hasClass(\"slide\")?(f.addClass(b),f[0].offsetWidth,e.addClass(h),f.addClass(h),e.one(\"bsTransitionEnd\",function(){f.removeClass([b,h].join(\" \")).addClass(\"active\"),e.removeClass([\"active\",h].join(\" \")),i.sliding=!1,setTimeout(function(){i.$element.trigger(m)},0)}).emulateTransitionEnd(c.TRANSITION_DURATION)):(e.removeClass(\"active\"),f.addClass(\"active\"),this.sliding=!1,this.$element.trigger(m)),g&&this.cycle(),this}};var d=a.fn.carousel;a.fn.carousel=b,a.fn.carousel.Constructor=c,a.fn.carousel.noConflict=function(){return a.fn.carousel=d,this};var e=function(c){var d,e=a(this),f=a(e.attr(\"data-target\")||(d=e.attr(\"href\"))&&d.replace(/.*(?=#[^\\s]+$)/,\"\"));if(f.hasClass(\"carousel\")){var g=a.extend({},f.data(),e.data()),h=e.attr(\"data-slide-to\");h&&(g.interval=!1),b.call(f,g),h&&f.data(\"bs.carousel\").to(h),c.preventDefault()}};a(document).on(\"click.bs.carousel.data-api\",\"[data-slide]\",e).on(\"click.bs.carousel.data-api\",\"[data-slide-to]\",e),a(window).on(\"load\",function(){a('[data-ride=\"carousel\"]').each(function(){var c=a(this);b.call(c,c.data())})})}(jQuery),+function(a){\"use strict\";function b(b){var c,d=b.attr(\"data-target\")||(c=b.attr(\"href\"))&&c.replace(/.*(?=#[^\\s]+$)/,\"\");return a(d)}function c(b){return this.each(function(){var c=a(this),e=c.data(\"bs.collapse\"),f=a.extend({},d.DEFAULTS,c.data(),\"object\"==typeof b&&b);!e&&f.toggle&&/show|hide/.test(b)&&(f.toggle=!1),e||c.data(\"bs.collapse\",e=new d(this,f)),\"string\"==typeof b&&e[b]()})}var d=function(b,c){this.$element=a(b),this.options=a.extend({},d.DEFAULTS,c),this.$trigger=a('[data-toggle=\"collapse\"][href=\"#'+b.id+'\"],[data-toggle=\"collapse\"][data-target=\"#'+b.id+'\"]'),this.transitioning=null,this.options.parent?this.$parent=this.getParent():this.addAriaAndCollapsedClass(this.$element,this.$trigger),this.options.toggle&&this.toggle()};d.VERSION=\"3.3.5\",d.TRANSITION_DURATION=350,d.DEFAULTS={toggle:!0},d.prototype.dimension=function(){var a=this.$element.hasClass(\"width\");return a?\"width\":\"height\"},d.prototype.show=function(){if(!this.transitioning&&!this.$element.hasClass(\"in\")){var b,e=this.$parent&&this.$parent.children(\".panel\").children(\".in, .collapsing\");if(!(e&&e.length&&(b=e.data(\"bs.collapse\"),b&&b.transitioning))){var f=a.Event(\"show.bs.collapse\");if(this.$element.trigger(f),!f.isDefaultPrevented()){e&&e.length&&(c.call(e,\"hide\"),b||e.data(\"bs.collapse\",null));var g=this.dimension();this.$element.removeClass(\"collapse\").addClass(\"collapsing\")[g](0).attr(\"aria-expanded\",!0),this.$trigger.removeClass(\"collapsed\").attr(\"aria-expanded\",!0),this.transitioning=1;var h=function(){this.$element.removeClass(\"collapsing\").addClass(\"collapse in\")[g](\"\"),this.transitioning=0,this.$element.trigger(\"shown.bs.collapse\")};if(!a.support.transition)return h.call(this);var i=a.camelCase([\"scroll\",g].join(\"-\"));this.$element.one(\"bsTransitionEnd\",a.proxy(h,this)).emulateTransitionEnd(d.TRANSITION_DURATION)[g](this.$element[0][i])}}}},d.prototype.hide=function(){if(!this.transitioning&&this.$element.hasClass(\"in\")){var b=a.Event(\"hide.bs.collapse\");if(this.$element.trigger(b),!b.isDefaultPrevented()){var c=this.dimension();this.$element[c](this.$element[c]())[0].offsetHeight,this.$element.addClass(\"collapsing\").removeClass(\"collapse in\").attr(\"aria-expanded\",!1),this.$trigger.addClass(\"collapsed\").attr(\"aria-expanded\",!1),this.transitioning=1;var e=function(){this.transitioning=0,this.$element.removeClass(\"collapsing\").addClass(\"collapse\").trigger(\"hidden.bs.collapse\")};return a.support.transition?void this.$element[c](0).one(\"bsTransitionEnd\",a.proxy(e,this)).emulateTransitionEnd(d.TRANSITION_DURATION):e.call(this)}}},d.prototype.toggle=function(){this[this.$element.hasClass(\"in\")?\"hide\":\"show\"]()},d.prototype.getParent=function(){return a(this.options.parent).find('[data-toggle=\"collapse\"][data-parent=\"'+this.options.parent+'\"]').each(a.proxy(function(c,d){var e=a(d);this.addAriaAndCollapsedClass(b(e),e)},this)).end()},d.prototype.addAriaAndCollapsedClass=function(a,b){var c=a.hasClass(\"in\");a.attr(\"aria-expanded\",c),b.toggleClass(\"collapsed\",!c).attr(\"aria-expanded\",c)};var e=a.fn.collapse;a.fn.collapse=c,a.fn.collapse.Constructor=d,a.fn.collapse.noConflict=function(){return a.fn.collapse=e,this},a(document).on(\"click.bs.collapse.data-api\",'[data-toggle=\"collapse\"]',function(d){var e=a(this);e.attr(\"data-target\")||d.preventDefault();var f=b(e),g=f.data(\"bs.collapse\"),h=g?\"toggle\":e.data();c.call(f,h)})}(jQuery),+function(a){\"use strict\";function b(b){var c=b.attr(\"data-target\");c||(c=b.attr(\"href\"),c=c&&/#[A-Za-z]/.test(c)&&c.replace(/.*(?=#[^\\s]*$)/,\"\"));var d=c&&a(c);return d&&d.length?d:b.parent()}function c(c){c&&3===c.which||(a(e).remove(),a(f).each(function(){var d=a(this),e=b(d),f={relatedTarget:this};e.hasClass(\"open\")&&(c&&\"click\"==c.type&&/input|textarea/i.test(c.target.tagName)&&a.contains(e[0],c.target)||(e.trigger(c=a.Event(\"hide.bs.dropdown\",f)),c.isDefaultPrevented()||(d.attr(\"aria-expanded\",\"false\"),e.removeClass(\"open\").trigger(\"hidden.bs.dropdown\",f))))}))}function d(b){return this.each(function(){var c=a(this),d=c.data(\"bs.dropdown\");d||c.data(\"bs.dropdown\",d=new g(this)),\"string\"==typeof b&&d[b].call(c)})}var e=\".dropdown-backdrop\",f='[data-toggle=\"dropdown\"]',g=function(b){a(b).on(\"click.bs.dropdown\",this.toggle)};g.VERSION=\"3.3.5\",g.prototype.toggle=function(d){var e=a(this);if(!e.is(\".disabled, :disabled\")){var f=b(e),g=f.hasClass(\"open\");if(c(),!g){\"ontouchstart\"in document.documentElement&&!f.closest(\".navbar-nav\").length&&a(document.createElement(\"div\")).addClass(\"dropdown-backdrop\").insertAfter(a(this)).on(\"click\",c);var h={relatedTarget:this};if(f.trigger(d=a.Event(\"show.bs.dropdown\",h)),d.isDefaultPrevented())return;e.trigger(\"focus\").attr(\"aria-expanded\",\"true\"),f.toggleClass(\"open\").trigger(\"shown.bs.dropdown\",h)}return!1}},g.prototype.keydown=function(c){if(/(38|40|27|32)/.test(c.which)&&!/input|textarea/i.test(c.target.tagName)){var d=a(this);if(c.preventDefault(),c.stopPropagation(),!d.is(\".disabled, :disabled\")){var e=b(d),g=e.hasClass(\"open\");if(!g&&27!=c.which||g&&27==c.which)return 27==c.which&&e.find(f).trigger(\"focus\"),d.trigger(\"click\");var h=\" li:not(.disabled):visible a\",i=e.find(\".dropdown-menu\"+h);if(i.length){var j=i.index(c.target);38==c.which&&j>0&&j--,40==c.which&&j<i.length-1&&j++,~j||(j=0),i.eq(j).trigger(\"focus\")}}}};var h=a.fn.dropdown;a.fn.dropdown=d,a.fn.dropdown.Constructor=g,a.fn.dropdown.noConflict=function(){return a.fn.dropdown=h,this},a(document).on(\"click.bs.dropdown.data-api\",c).on(\"click.bs.dropdown.data-api\",\".dropdown form\",function(a){a.stopPropagation()}).on(\"click.bs.dropdown.data-api\",f,g.prototype.toggle).on(\"keydown.bs.dropdown.data-api\",f,g.prototype.keydown).on(\"keydown.bs.dropdown.data-api\",\".dropdown-menu\",g.prototype.keydown)}(jQuery),+function(a){\"use strict\";function b(b,d){return this.each(function(){var e=a(this),f=e.data(\"bs.modal\"),g=a.extend({},c.DEFAULTS,e.data(),\"object\"==typeof b&&b);f||e.data(\"bs.modal\",f=new c(this,g)),\"string\"==typeof b?f[b](d):g.show&&f.show(d)})}var c=function(b,c){this.options=c,this.$body=a(document.body),this.$element=a(b),this.$dialog=this.$element.find(\".modal-dialog\"),this.$backdrop=null,this.isShown=null,this.originalBodyPad=null,this.scrollbarWidth=0,this.ignoreBackdropClick=!1,this.options.remote&&this.$element.find(\".modal-content\").load(this.options.remote,a.proxy(function(){this.$element.trigger(\"loaded.bs.modal\")},this))};c.VERSION=\"3.3.5\",c.TRANSITION_DURATION=300,c.BACKDROP_TRANSITION_DURATION=150,c.DEFAULTS={backdrop:!0,keyboard:!0,show:!0},c.prototype.toggle=function(a){return this.isShown?this.hide():this.show(a)},c.prototype.show=function(b){var d=this,e=a.Event(\"show.bs.modal\",{relatedTarget:b});this.$element.trigger(e),this.isShown||e.isDefaultPrevented()||(this.isShown=!0,this.checkScrollbar(),this.setScrollbar(),this.$body.addClass(\"modal-open\"),this.escape(),this.resize(),this.$element.on(\"click.dismiss.bs.modal\",'[data-dismiss=\"modal\"]',a.proxy(this.hide,this)),this.$dialog.on(\"mousedown.dismiss.bs.modal\",function(){d.$element.one(\"mouseup.dismiss.bs.modal\",function(b){a(b.target).is(d.$element)&&(d.ignoreBackdropClick=!0)})}),this.backdrop(function(){var e=a.support.transition&&d.$element.hasClass(\"fade\");d.$element.parent().length||d.$element.appendTo(d.$body),d.$element.show().scrollTop(0),d.adjustDialog(),e&&d.$element[0].offsetWidth,d.$element.addClass(\"in\"),d.enforceFocus();var f=a.Event(\"shown.bs.modal\",{relatedTarget:b});e?d.$dialog.one(\"bsTransitionEnd\",function(){d.$element.trigger(\"focus\").trigger(f)}).emulateTransitionEnd(c.TRANSITION_DURATION):d.$element.trigger(\"focus\").trigger(f)}))},c.prototype.hide=function(b){b&&b.preventDefault(),b=a.Event(\"hide.bs.modal\"),this.$element.trigger(b),this.isShown&&!b.isDefaultPrevented()&&(this.isShown=!1,this.escape(),this.resize(),a(document).off(\"focusin.bs.modal\"),this.$element.removeClass(\"in\").off(\"click.dismiss.bs.modal\").off(\"mouseup.dismiss.bs.modal\"),this.$dialog.off(\"mousedown.dismiss.bs.modal\"),a.support.transition&&this.$element.hasClass(\"fade\")?this.$element.one(\"bsTransitionEnd\",a.proxy(this.hideModal,this)).emulateTransitionEnd(c.TRANSITION_DURATION):this.hideModal())},c.prototype.enforceFocus=function(){a(document).off(\"focusin.bs.modal\").on(\"focusin.bs.modal\",a.proxy(function(a){this.$element[0]===a.target||this.$element.has(a.target).length||this.$element.trigger(\"focus\")},this))},c.prototype.escape=function(){this.isShown&&this.options.keyboard?this.$element.on(\"keydown.dismiss.bs.modal\",a.proxy(function(a){27==a.which&&this.hide()},this)):this.isShown||this.$element.off(\"keydown.dismiss.bs.modal\")},c.prototype.resize=function(){this.isShown?a(window).on(\"resize.bs.modal\",a.proxy(this.handleUpdate,this)):a(window).off(\"resize.bs.modal\")},c.prototype.hideModal=function(){var a=this;this.$element.hide(),this.backdrop(function(){a.$body.removeClass(\"modal-open\"),a.resetAdjustments(),a.resetScrollbar(),a.$element.trigger(\"hidden.bs.modal\")})},c.prototype.removeBackdrop=function(){this.$backdrop&&this.$backdrop.remove(),this.$backdrop=null},c.prototype.backdrop=function(b){var d=this,e=this.$element.hasClass(\"fade\")?\"fade\":\"\";if(this.isShown&&this.options.backdrop){var f=a.support.transition&&e;if(this.$backdrop=a(document.createElement(\"div\")).addClass(\"modal-backdrop \"+e).appendTo(this.$body),this.$element.on(\"click.dismiss.bs.modal\",a.proxy(function(a){return this.ignoreBackdropClick?void(this.ignoreBackdropClick=!1):void(a.target===a.currentTarget&&(\"static\"==this.options.backdrop?this.$element[0].focus():this.hide()))},this)),f&&this.$backdrop[0].offsetWidth,this.$backdrop.addClass(\"in\"),!b)return;f?this.$backdrop.one(\"bsTransitionEnd\",b).emulateTransitionEnd(c.BACKDROP_TRANSITION_DURATION):b()}else if(!this.isShown&&this.$backdrop){this.$backdrop.removeClass(\"in\");var g=function(){d.removeBackdrop(),b&&b()};a.support.transition&&this.$element.hasClass(\"fade\")?this.$backdrop.one(\"bsTransitionEnd\",g).emulateTransitionEnd(c.BACKDROP_TRANSITION_DURATION):g()}else b&&b()},c.prototype.handleUpdate=function(){this.adjustDialog()},c.prototype.adjustDialog=function(){var a=this.$element[0].scrollHeight>document.documentElement.clientHeight;this.$element.css({paddingLeft:!this.bodyIsOverflowing&&a?this.scrollbarWidth:\"\",paddingRight:this.bodyIsOverflowing&&!a?this.scrollbarWidth:\"\"})},c.prototype.resetAdjustments=function(){this.$element.css({paddingLeft:\"\",paddingRight:\"\"})},c.prototype.checkScrollbar=function(){var a=window.innerWidth;if(!a){var b=document.documentElement.getBoundingClientRect();a=b.right-Math.abs(b.left)}this.bodyIsOverflowing=document.body.clientWidth<a,this.scrollbarWidth=this.measureScrollbar()},c.prototype.setScrollbar=function(){var a=parseInt(this.$body.css(\"padding-right\")||0,10);this.originalBodyPad=document.body.style.paddingRight||\"\",this.bodyIsOverflowing&&this.$body.css(\"padding-right\",a+this.scrollbarWidth)},c.prototype.resetScrollbar=function(){this.$body.css(\"padding-right\",this.originalBodyPad)},c.prototype.measureScrollbar=function(){var a=document.createElement(\"div\");a.className=\"modal-scrollbar-measure\",this.$body.append(a);var b=a.offsetWidth-a.clientWidth;return this.$body[0].removeChild(a),b};var d=a.fn.modal;a.fn.modal=b,a.fn.modal.Constructor=c,a.fn.modal.noConflict=function(){return a.fn.modal=d,this},a(document).on(\"click.bs.modal.data-api\",'[data-toggle=\"modal\"]',function(c){var d=a(this),e=d.attr(\"href\"),f=a(d.attr(\"data-target\")||e&&e.replace(/.*(?=#[^\\s]+$)/,\"\")),g=f.data(\"bs.modal\")?\"toggle\":a.extend({remote:!/#/.test(e)&&e},f.data(),d.data());d.is(\"a\")&&c.preventDefault(),f.one(\"show.bs.modal\",function(a){a.isDefaultPrevented()||f.one(\"hidden.bs.modal\",function(){d.is(\":visible\")&&d.trigger(\"focus\")})}),b.call(f,g,this)})}(jQuery),+function(a){\"use strict\";function b(b){return this.each(function(){var d=a(this),e=d.data(\"bs.tooltip\"),f=\"object\"==typeof b&&b;(e||!/destroy|hide/.test(b))&&(e||d.data(\"bs.tooltip\",e=new c(this,f)),\"string\"==typeof b&&e[b]())})}var c=function(a,b){this.type=null,this.options=null,this.enabled=null,this.timeout=null,this.hoverState=null,this.$element=null,this.inState=null,this.init(\"tooltip\",a,b)};c.VERSION=\"3.3.5\",c.TRANSITION_DURATION=150,c.DEFAULTS={animation:!0,placement:\"top\",selector:!1,template:'<div class=\"tooltip\" role=\"tooltip\"><div class=\"tooltip-arrow\"></div><div class=\"tooltip-inner\"></div></div>',trigger:\"hover focus\",title:\"\",delay:0,html:!1,container:!1,viewport:{selector:\"body\",padding:0}},c.prototype.init=function(b,c,d){if(this.enabled=!0,this.type=b,this.$element=a(c),this.options=this.getOptions(d),this.$viewport=this.options.viewport&&a(a.isFunction(this.options.viewport)?this.options.viewport.call(this,this.$element):this.options.viewport.selector||this.options.viewport),this.inState={click:!1,hover:!1,focus:!1},this.$element[0]instanceof document.constructor&&!this.options.selector)throw new Error(\"`selector` option must be specified when initializing \"+this.type+\" on the window.document object!\");for(var e=this.options.trigger.split(\" \"),f=e.length;f--;){var g=e[f];if(\"click\"==g)this.$element.on(\"click.\"+this.type,this.options.selector,a.proxy(this.toggle,this));else if(\"manual\"!=g){var h=\"hover\"==g?\"mouseenter\":\"focusin\",i=\"hover\"==g?\"mouseleave\":\"focusout\";this.$element.on(h+\".\"+this.type,this.options.selector,a.proxy(this.enter,this)),this.$element.on(i+\".\"+this.type,this.options.selector,a.proxy(this.leave,this))}}this.options.selector?this._options=a.extend({},this.options,{trigger:\"manual\",selector:\"\"}):this.fixTitle()},c.prototype.getDefaults=function(){return c.DEFAULTS},c.prototype.getOptions=function(b){return b=a.extend({},this.getDefaults(),this.$element.data(),b),b.delay&&\"number\"==typeof b.delay&&(b.delay={show:b.delay,hide:b.delay}),b},c.prototype.getDelegateOptions=function(){var b={},c=this.getDefaults();return this._options&&a.each(this._options,function(a,d){c[a]!=d&&(b[a]=d)}),b},c.prototype.enter=function(b){var c=b instanceof this.constructor?b:a(b.currentTarget).data(\"bs.\"+this.type);return c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data(\"bs.\"+this.type,c)),b instanceof a.Event&&(c.inState[\"focusin\"==b.type?\"focus\":\"hover\"]=!0),c.tip().hasClass(\"in\")||\"in\"==c.hoverState?void(c.hoverState=\"in\"):(clearTimeout(c.timeout),c.hoverState=\"in\",c.options.delay&&c.options.delay.show?void(c.timeout=setTimeout(function(){\"in\"==c.hoverState&&c.show()},c.options.delay.show)):c.show())},c.prototype.isInStateTrue=function(){for(var a in this.inState)if(this.inState[a])return!0;return!1},c.prototype.leave=function(b){var c=b instanceof this.constructor?b:a(b.currentTarget).data(\"bs.\"+this.type);return c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data(\"bs.\"+this.type,c)),b instanceof a.Event&&(c.inState[\"focusout\"==b.type?\"focus\":\"hover\"]=!1),c.isInStateTrue()?void 0:(clearTimeout(c.timeout),c.hoverState=\"out\",c.options.delay&&c.options.delay.hide?void(c.timeout=setTimeout(function(){\"out\"==c.hoverState&&c.hide()},c.options.delay.hide)):c.hide())},c.prototype.show=function(){var b=a.Event(\"show.bs.\"+this.type);if(this.hasContent()&&this.enabled){this.$element.trigger(b);var d=a.contains(this.$element[0].ownerDocument.documentElement,this.$element[0]);if(b.isDefaultPrevented()||!d)return;var e=this,f=this.tip(),g=this.getUID(this.type);this.setContent(),f.attr(\"id\",g),this.$element.attr(\"aria-describedby\",g),this.options.animation&&f.addClass(\"fade\");var h=\"function\"==typeof this.options.placement?this.options.placement.call(this,f[0],this.$element[0]):this.options.placement,i=/\\s?auto?\\s?/i,j=i.test(h);j&&(h=h.replace(i,\"\")||\"top\"),f.detach().css({top:0,left:0,display:\"block\"}).addClass(h).data(\"bs.\"+this.type,this),this.options.container?f.appendTo(this.options.container):f.insertAfter(this.$element),this.$element.trigger(\"inserted.bs.\"+this.type);var k=this.getPosition(),l=f[0].offsetWidth,m=f[0].offsetHeight;if(j){var n=h,o=this.getPosition(this.$viewport);h=\"bottom\"==h&&k.bottom+m>o.bottom?\"top\":\"top\"==h&&k.top-m<o.top?\"bottom\":\"right\"==h&&k.right+l>o.width?\"left\":\"left\"==h&&k.left-l<o.left?\"right\":h,f.removeClass(n).addClass(h)}var p=this.getCalculatedOffset(h,k,l,m);this.applyPlacement(p,h);var q=function(){var a=e.hoverState;e.$element.trigger(\"shown.bs.\"+e.type),e.hoverState=null,\"out\"==a&&e.leave(e)};a.support.transition&&this.$tip.hasClass(\"fade\")?f.one(\"bsTransitionEnd\",q).emulateTransitionEnd(c.TRANSITION_DURATION):q()}},c.prototype.applyPlacement=function(b,c){var d=this.tip(),e=d[0].offsetWidth,f=d[0].offsetHeight,g=parseInt(d.css(\"margin-top\"),10),h=parseInt(d.css(\"margin-left\"),10);isNaN(g)&&(g=0),isNaN(h)&&(h=0),b.top+=g,b.left+=h,a.offset.setOffset(d[0],a.extend({using:function(a){d.css({top:Math.round(a.top),left:Math.round(a.left)})}},b),0),d.addClass(\"in\");var i=d[0].offsetWidth,j=d[0].offsetHeight;\"top\"==c&&j!=f&&(b.top=b.top+f-j);var k=this.getViewportAdjustedDelta(c,b,i,j);k.left?b.left+=k.left:b.top+=k.top;var l=/top|bottom/.test(c),m=l?2*k.left-e+i:2*k.top-f+j,n=l?\"offsetWidth\":\"offsetHeight\";d.offset(b),this.replaceArrow(m,d[0][n],l)},c.prototype.replaceArrow=function(a,b,c){this.arrow().css(c?\"left\":\"top\",50*(1-a/b)+\"%\").css(c?\"top\":\"left\",\"\")},c.prototype.setContent=function(){var a=this.tip(),b=this.getTitle();a.find(\".tooltip-inner\")[this.options.html?\"html\":\"text\"](b),a.removeClass(\"fade in top bottom left right\")},c.prototype.hide=function(b){function d(){\"in\"!=e.hoverState&&f.detach(),e.$element.removeAttr(\"aria-describedby\").trigger(\"hidden.bs.\"+e.type),b&&b()}var e=this,f=a(this.$tip),g=a.Event(\"hide.bs.\"+this.type);return this.$element.trigger(g),g.isDefaultPrevented()?void 0:(f.removeClass(\"in\"),a.support.transition&&f.hasClass(\"fade\")?f.one(\"bsTransitionEnd\",d).emulateTransitionEnd(c.TRANSITION_DURATION):d(),this.hoverState=null,this)},c.prototype.fixTitle=function(){var a=this.$element;(a.attr(\"title\")||\"string\"!=typeof a.attr(\"data-original-title\"))&&a.attr(\"data-original-title\",a.attr(\"title\")||\"\").attr(\"title\",\"\")},c.prototype.hasContent=function(){return this.getTitle()},c.prototype.getPosition=function(b){b=b||this.$element;var c=b[0],d=\"BODY\"==c.tagName,e=c.getBoundingClientRect();null==e.width&&(e=a.extend({},e,{width:e.right-e.left,height:e.bottom-e.top}));var f=d?{top:0,left:0}:b.offset(),g={scroll:d?document.documentElement.scrollTop||document.body.scrollTop:b.scrollTop()},h=d?{width:a(window).width(),height:a(window).height()}:null;return a.extend({},e,g,h,f)},c.prototype.getCalculatedOffset=function(a,b,c,d){return\"bottom\"==a?{top:b.top+b.height,left:b.left+b.width/2-c/2}:\"top\"==a?{top:b.top-d,left:b.left+b.width/2-c/2}:\"left\"==a?{top:b.top+b.height/2-d/2,left:b.left-c}:{top:b.top+b.height/2-d/2,left:b.left+b.width}},c.prototype.getViewportAdjustedDelta=function(a,b,c,d){var e={top:0,left:0};if(!this.$viewport)return e;var f=this.options.viewport&&this.options.viewport.padding||0,g=this.getPosition(this.$viewport);if(/right|left/.test(a)){var h=b.top-f-g.scroll,i=b.top+f-g.scroll+d;h<g.top?e.top=g.top-h:i>g.top+g.height&&(e.top=g.top+g.height-i)}else{var j=b.left-f,k=b.left+f+c;j<g.left?e.left=g.left-j:k>g.right&&(e.left=g.left+g.width-k)}return e},c.prototype.getTitle=function(){var a,b=this.$element,c=this.options;return a=b.attr(\"data-original-title\")||(\"function\"==typeof c.title?c.title.call(b[0]):c.title)},c.prototype.getUID=function(a){do a+=~~(1e6*Math.random());while(document.getElementById(a));return a},c.prototype.tip=function(){if(!this.$tip&&(this.$tip=a(this.options.template),1!=this.$tip.length))throw new Error(this.type+\" `template` option must consist of exactly 1 top-level element!\");return this.$tip},c.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(\".tooltip-arrow\")},c.prototype.enable=function(){this.enabled=!0},c.prototype.disable=function(){this.enabled=!1},c.prototype.toggleEnabled=function(){this.enabled=!this.enabled},c.prototype.toggle=function(b){var c=this;b&&(c=a(b.currentTarget).data(\"bs.\"+this.type),c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data(\"bs.\"+this.type,c))),b?(c.inState.click=!c.inState.click,c.isInStateTrue()?c.enter(c):c.leave(c)):c.tip().hasClass(\"in\")?c.leave(c):c.enter(c)},c.prototype.destroy=function(){var a=this;clearTimeout(this.timeout),this.hide(function(){a.$element.off(\".\"+a.type).removeData(\"bs.\"+a.type),a.$tip&&a.$tip.detach(),a.$tip=null,a.$arrow=null,a.$viewport=null})};var d=a.fn.tooltip;a.fn.tooltip=b,a.fn.tooltip.Constructor=c,a.fn.tooltip.noConflict=function(){return a.fn.tooltip=d,this}}(jQuery),+function(a){\"use strict\";function b(b){return this.each(function(){var d=a(this),e=d.data(\"bs.popover\"),f=\"object\"==typeof b&&b;(e||!/destroy|hide/.test(b))&&(e||d.data(\"bs.popover\",e=new c(this,f)),\"string\"==typeof b&&e[b]())})}var c=function(a,b){this.init(\"popover\",a,b)};if(!a.fn.tooltip)throw new Error(\"Popover requires tooltip.js\");c.VERSION=\"3.3.5\",c.DEFAULTS=a.extend({},a.fn.tooltip.Constructor.DEFAULTS,{placement:\"right\",trigger:\"click\",content:\"\",template:'<div class=\"popover\" role=\"tooltip\"><div class=\"arrow\"></div><h3 class=\"popover-title\"></h3><div class=\"popover-content\"></div></div>'}),c.prototype=a.extend({},a.fn.tooltip.Constructor.prototype),c.prototype.constructor=c,c.prototype.getDefaults=function(){return c.DEFAULTS},c.prototype.setContent=function(){var a=this.tip(),b=this.getTitle(),c=this.getContent();a.find(\".popover-title\")[this.options.html?\"html\":\"text\"](b),a.find(\".popover-content\").children().detach().end()[this.options.html?\"string\"==typeof c?\"html\":\"append\":\"text\"](c),a.removeClass(\"fade top bottom left right in\"),a.find(\".popover-title\").html()||a.find(\".popover-title\").hide()},c.prototype.hasContent=function(){return this.getTitle()||this.getContent()},c.prototype.getContent=function(){var a=this.$element,b=this.options;return a.attr(\"data-content\")||(\"function\"==typeof b.content?b.content.call(a[0]):b.content)},c.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(\".arrow\")};var d=a.fn.popover;a.fn.popover=b,a.fn.popover.Constructor=c,a.fn.popover.noConflict=function(){return a.fn.popover=d,this}}(jQuery),+function(a){\"use strict\";function b(c,d){this.$body=a(document.body),this.$scrollElement=a(a(c).is(document.body)?window:c),this.options=a.extend({},b.DEFAULTS,d),this.selector=(this.options.target||\"\")+\" .nav li > a\",this.offsets=[],this.targets=[],this.activeTarget=null,this.scrollHeight=0,this.$scrollElement.on(\"scroll.bs.scrollspy\",a.proxy(this.process,this)),this.refresh(),this.process()}function c(c){return this.each(function(){var d=a(this),e=d.data(\"bs.scrollspy\"),f=\"object\"==typeof c&&c;e||d.data(\"bs.scrollspy\",e=new b(this,f)),\"string\"==typeof c&&e[c]()})}b.VERSION=\"3.3.5\",b.DEFAULTS={offset:10},b.prototype.getScrollHeight=function(){return this.$scrollElement[0].scrollHeight||Math.max(this.$body[0].scrollHeight,document.documentElement.scrollHeight)},b.prototype.refresh=function(){var b=this,c=\"offset\",d=0;this.offsets=[],this.targets=[],this.scrollHeight=this.getScrollHeight(),a.isWindow(this.$scrollElement[0])||(c=\"position\",d=this.$scrollElement.scrollTop()),this.$body.find(this.selector).map(function(){var b=a(this),e=b.data(\"target\")||b.attr(\"href\"),f=/^#./.test(e)&&a(e);return f&&f.length&&f.is(\":visible\")&&[[f[c]().top+d,e]]||null}).sort(function(a,b){return a[0]-b[0]}).each(function(){b.offsets.push(this[0]),b.targets.push(this[1])})},b.prototype.process=function(){var a,b=this.$scrollElement.scrollTop()+this.options.offset,c=this.getScrollHeight(),d=this.options.offset+c-this.$scrollElement.height(),e=this.offsets,f=this.targets,g=this.activeTarget;if(this.scrollHeight!=c&&this.refresh(),b>=d)return g!=(a=f[f.length-1])&&this.activate(a);if(g&&b<e[0])return this.activeTarget=null,this.clear();for(a=e.length;a--;)g!=f[a]&&b>=e[a]&&(void 0===e[a+1]||b<e[a+1])&&this.activate(f[a])},b.prototype.activate=function(b){this.activeTarget=b,this.clear();var c=this.selector+'[data-target=\"'+b+'\"],'+this.selector+'[href=\"'+b+'\"]',d=a(c).parents(\"li\").addClass(\"active\");d.parent(\".dropdown-menu\").length&&(d=d.closest(\"li.dropdown\").addClass(\"active\")),\nd.trigger(\"activate.bs.scrollspy\")},b.prototype.clear=function(){a(this.selector).parentsUntil(this.options.target,\".active\").removeClass(\"active\")};var d=a.fn.scrollspy;a.fn.scrollspy=c,a.fn.scrollspy.Constructor=b,a.fn.scrollspy.noConflict=function(){return a.fn.scrollspy=d,this},a(window).on(\"load.bs.scrollspy.data-api\",function(){a('[data-spy=\"scroll\"]').each(function(){var b=a(this);c.call(b,b.data())})})}(jQuery),+function(a){\"use strict\";function b(b){return this.each(function(){var d=a(this),e=d.data(\"bs.tab\");e||d.data(\"bs.tab\",e=new c(this)),\"string\"==typeof b&&e[b]()})}var c=function(b){this.element=a(b)};c.VERSION=\"3.3.5\",c.TRANSITION_DURATION=150,c.prototype.show=function(){var b=this.element,c=b.closest(\"ul:not(.dropdown-menu)\"),d=b.data(\"target\");if(d||(d=b.attr(\"href\"),d=d&&d.replace(/.*(?=#[^\\s]*$)/,\"\")),!b.parent(\"li\").hasClass(\"active\")){var e=c.find(\".active:last a\"),f=a.Event(\"hide.bs.tab\",{relatedTarget:b[0]}),g=a.Event(\"show.bs.tab\",{relatedTarget:e[0]});if(e.trigger(f),b.trigger(g),!g.isDefaultPrevented()&&!f.isDefaultPrevented()){var h=a(d);this.activate(b.closest(\"li\"),c),this.activate(h,h.parent(),function(){e.trigger({type:\"hidden.bs.tab\",relatedTarget:b[0]}),b.trigger({type:\"shown.bs.tab\",relatedTarget:e[0]})})}}},c.prototype.activate=function(b,d,e){function f(){g.removeClass(\"active\").find(\"> .dropdown-menu > .active\").removeClass(\"active\").end().find('[data-toggle=\"tab\"]').attr(\"aria-expanded\",!1),b.addClass(\"active\").find('[data-toggle=\"tab\"]').attr(\"aria-expanded\",!0),h?(b[0].offsetWidth,b.addClass(\"in\")):b.removeClass(\"fade\"),b.parent(\".dropdown-menu\").length&&b.closest(\"li.dropdown\").addClass(\"active\").end().find('[data-toggle=\"tab\"]').attr(\"aria-expanded\",!0),e&&e()}var g=d.find(\"> .active\"),h=e&&a.support.transition&&(g.length&&g.hasClass(\"fade\")||!!d.find(\"> .fade\").length);g.length&&h?g.one(\"bsTransitionEnd\",f).emulateTransitionEnd(c.TRANSITION_DURATION):f(),g.removeClass(\"in\")};var d=a.fn.tab;a.fn.tab=b,a.fn.tab.Constructor=c,a.fn.tab.noConflict=function(){return a.fn.tab=d,this};var e=function(c){c.preventDefault(),b.call(a(this),\"show\")};a(document).on(\"click.bs.tab.data-api\",'[data-toggle=\"tab\"]',e).on(\"click.bs.tab.data-api\",'[data-toggle=\"pill\"]',e)}(jQuery),+function(a){\"use strict\";function b(b){return this.each(function(){var d=a(this),e=d.data(\"bs.affix\"),f=\"object\"==typeof b&&b;e||d.data(\"bs.affix\",e=new c(this,f)),\"string\"==typeof b&&e[b]()})}var c=function(b,d){this.options=a.extend({},c.DEFAULTS,d),this.$target=a(this.options.target).on(\"scroll.bs.affix.data-api\",a.proxy(this.checkPosition,this)).on(\"click.bs.affix.data-api\",a.proxy(this.checkPositionWithEventLoop,this)),this.$element=a(b),this.affixed=null,this.unpin=null,this.pinnedOffset=null,this.checkPosition()};c.VERSION=\"3.3.5\",c.RESET=\"affix affix-top affix-bottom\",c.DEFAULTS={offset:0,target:window},c.prototype.getState=function(a,b,c,d){var e=this.$target.scrollTop(),f=this.$element.offset(),g=this.$target.height();if(null!=c&&\"top\"==this.affixed)return c>e?\"top\":!1;if(\"bottom\"==this.affixed)return null!=c?e+this.unpin<=f.top?!1:\"bottom\":a-d>=e+g?!1:\"bottom\";var h=null==this.affixed,i=h?e:f.top,j=h?g:b;return null!=c&&c>=e?\"top\":null!=d&&i+j>=a-d?\"bottom\":!1},c.prototype.getPinnedOffset=function(){if(this.pinnedOffset)return this.pinnedOffset;this.$element.removeClass(c.RESET).addClass(\"affix\");var a=this.$target.scrollTop(),b=this.$element.offset();return this.pinnedOffset=b.top-a},c.prototype.checkPositionWithEventLoop=function(){setTimeout(a.proxy(this.checkPosition,this),1)},c.prototype.checkPosition=function(){if(this.$element.is(\":visible\")){var b=this.$element.height(),d=this.options.offset,e=d.top,f=d.bottom,g=Math.max(a(document).height(),a(document.body).height());\"object\"!=typeof d&&(f=e=d),\"function\"==typeof e&&(e=d.top(this.$element)),\"function\"==typeof f&&(f=d.bottom(this.$element));var h=this.getState(g,b,e,f);if(this.affixed!=h){null!=this.unpin&&this.$element.css(\"top\",\"\");var i=\"affix\"+(h?\"-\"+h:\"\"),j=a.Event(i+\".bs.affix\");if(this.$element.trigger(j),j.isDefaultPrevented())return;this.affixed=h,this.unpin=\"bottom\"==h?this.getPinnedOffset():null,this.$element.removeClass(c.RESET).addClass(i).trigger(i.replace(\"affix\",\"affixed\")+\".bs.affix\")}\"bottom\"==h&&this.$element.offset({top:g-b-f})}};var d=a.fn.affix;a.fn.affix=b,a.fn.affix.Constructor=c,a.fn.affix.noConflict=function(){return a.fn.affix=d,this},a(window).on(\"load\",function(){a('[data-spy=\"affix\"]').each(function(){var c=a(this),d=c.data();d.offset=d.offset||{},null!=d.offsetBottom&&(d.offset.bottom=d.offsetBottom),null!=d.offsetTop&&(d.offset.top=d.offsetTop),b.call(c,d)})})}(jQuery);;/*!\n * \n *   typed.js - A JavaScript Typing Animation Library\n *   Author: Matt Boldt <me@mattboldt.com>\n *   Version: v2.0.9\n *   Url: https://github.com/mattboldt/typed.js\n *   License(s): MIT\n * \n */\n(function(t,e){\"object\"==typeof exports&&\"object\"==typeof module?module.exports=e():\"function\"==typeof define&&define.amd?define([],e):\"object\"==typeof exports?exports.Typed=e():t.Typed=e()})(this,function(){return function(t){function e(n){if(s[n])return s[n].exports;var i=s[n]={exports:{},id:n,loaded:!1};return t[n].call(i.exports,i,i.exports,e),i.loaded=!0,i.exports}var s={};return e.m=t,e.c=s,e.p=\"\",e(0)}([function(t,e,s){\"use strict\";function n(t,e){if(!(t instanceof e))throw new TypeError(\"Cannot call a class as a function\")}Object.defineProperty(e,\"__esModule\",{value:!0});var i=function(){function t(t,e){for(var s=0;s<e.length;s++){var n=e[s];n.enumerable=n.enumerable||!1,n.configurable=!0,\"value\"in n&&(n.writable=!0),Object.defineProperty(t,n.key,n)}}return function(e,s,n){return s&&t(e.prototype,s),n&&t(e,n),e}}(),r=s(1),o=s(3),a=function(){function t(e,s){n(this,t),r.initializer.load(this,s,e),this.begin()}return i(t,[{key:\"toggle\",value:function(){this.pause.status?this.start():this.stop()}},{key:\"stop\",value:function(){this.typingComplete||this.pause.status||(this.toggleBlinking(!0),this.pause.status=!0,this.options.onStop(this.arrayPos,this))}},{key:\"start\",value:function(){this.typingComplete||this.pause.status&&(this.pause.status=!1,this.pause.typewrite?this.typewrite(this.pause.curString,this.pause.curStrPos):this.backspace(this.pause.curString,this.pause.curStrPos),this.options.onStart(this.arrayPos,this))}},{key:\"destroy\",value:function(){this.reset(!1),this.options.onDestroy(this)}},{key:\"reset\",value:function(){var t=arguments.length<=0||void 0===arguments[0]||arguments[0];clearInterval(this.timeout),this.replaceText(\"\"),this.cursor&&this.cursor.parentNode&&(this.cursor.parentNode.removeChild(this.cursor),this.cursor=null),this.strPos=0,this.arrayPos=0,this.curLoop=0,t&&(this.insertCursor(),this.options.onReset(this),this.begin())}},{key:\"begin\",value:function(){var t=this;this.typingComplete=!1,this.shuffleStringsIfNeeded(this),this.insertCursor(),this.bindInputFocusEvents&&this.bindFocusEvents(),this.timeout=setTimeout(function(){t.currentElContent&&0!==t.currentElContent.length?t.backspace(t.currentElContent,t.currentElContent.length):t.typewrite(t.strings[t.sequence[t.arrayPos]],t.strPos)},this.startDelay)}},{key:\"typewrite\",value:function(t,e){var s=this;this.fadeOut&&this.el.classList.contains(this.fadeOutClass)&&(this.el.classList.remove(this.fadeOutClass),this.cursor&&this.cursor.classList.remove(this.fadeOutClass));var n=this.humanizer(this.typeSpeed),i=1;return this.pause.status===!0?void this.setPauseStatus(t,e,!0):void(this.timeout=setTimeout(function(){e=o.htmlParser.typeHtmlChars(t,e,s);var n=0,r=t.substr(e);if(\"^\"===r.charAt(0)&&/^\\^\\d+/.test(r)){var a=1;r=/\\d+/.exec(r)[0],a+=r.length,n=parseInt(r),s.temporaryPause=!0,s.options.onTypingPaused(s.arrayPos,s),t=t.substring(0,e)+t.substring(e+a),s.toggleBlinking(!0)}if(\"`\"===r.charAt(0)){for(;\"`\"!==t.substr(e+i).charAt(0)&&(i++,!(e+i>t.length)););var u=t.substring(0,e),l=t.substring(u.length+1,e+i),c=t.substring(e+i+1);t=u+l+c,i--}s.timeout=setTimeout(function(){s.toggleBlinking(!1),e>=t.length?s.doneTyping(t,e):s.keepTyping(t,e,i),s.temporaryPause&&(s.temporaryPause=!1,s.options.onTypingResumed(s.arrayPos,s))},n)},n))}},{key:\"keepTyping\",value:function(t,e,s){0===e&&(this.toggleBlinking(!1),this.options.preStringTyped(this.arrayPos,this)),e+=s;var n=t.substr(0,e);this.replaceText(n),this.typewrite(t,e)}},{key:\"doneTyping\",value:function(t,e){var s=this;this.options.onStringTyped(this.arrayPos,this),this.toggleBlinking(!0),this.arrayPos===this.strings.length-1&&(this.complete(),this.loop===!1||this.curLoop===this.loopCount)||(this.timeout=setTimeout(function(){s.backspace(t,e)},this.backDelay))}},{key:\"backspace\",value:function(t,e){var s=this;if(this.pause.status===!0)return void this.setPauseStatus(t,e,!0);if(this.fadeOut)return this.initFadeOut();this.toggleBlinking(!1);var n=this.humanizer(this.backSpeed);this.timeout=setTimeout(function(){e=o.htmlParser.backSpaceHtmlChars(t,e,s);var n=t.substr(0,e);if(s.replaceText(n),s.smartBackspace){var i=s.strings[s.arrayPos+1];i&&n===i.substr(0,e)?s.stopNum=e:s.stopNum=0}e>s.stopNum?(e--,s.backspace(t,e)):e<=s.stopNum&&(s.arrayPos++,s.arrayPos===s.strings.length?(s.arrayPos=0,s.options.onLastStringBackspaced(),s.shuffleStringsIfNeeded(),s.begin()):s.typewrite(s.strings[s.sequence[s.arrayPos]],e))},n)}},{key:\"complete\",value:function(){this.options.onComplete(this),this.loop?this.curLoop++:this.typingComplete=!0}},{key:\"setPauseStatus\",value:function(t,e,s){this.pause.typewrite=s,this.pause.curString=t,this.pause.curStrPos=e}},{key:\"toggleBlinking\",value:function(t){this.cursor&&(this.pause.status||this.cursorBlinking!==t&&(this.cursorBlinking=t,t?this.cursor.classList.add(\"typed-cursor--blink\"):this.cursor.classList.remove(\"typed-cursor--blink\")))}},{key:\"humanizer\",value:function(t){return Math.round(Math.random()*t/2)+t}},{key:\"shuffleStringsIfNeeded\",value:function(){this.shuffle&&(this.sequence=this.sequence.sort(function(){return Math.random()-.5}))}},{key:\"initFadeOut\",value:function(){var t=this;return this.el.className+=\" \"+this.fadeOutClass,this.cursor&&(this.cursor.className+=\" \"+this.fadeOutClass),setTimeout(function(){t.arrayPos++,t.replaceText(\"\"),t.strings.length>t.arrayPos?t.typewrite(t.strings[t.sequence[t.arrayPos]],0):(t.typewrite(t.strings[0],0),t.arrayPos=0)},this.fadeOutDelay)}},{key:\"replaceText\",value:function(t){this.attr?this.el.setAttribute(this.attr,t):this.isInput?this.el.value=t:\"html\"===this.contentType?this.el.innerHTML=t:this.el.textContent=t}},{key:\"bindFocusEvents\",value:function(){var t=this;this.isInput&&(this.el.addEventListener(\"focus\",function(e){t.stop()}),this.el.addEventListener(\"blur\",function(e){t.el.value&&0!==t.el.value.length||t.start()}))}},{key:\"insertCursor\",value:function(){this.showCursor&&(this.cursor||(this.cursor=document.createElement(\"span\"),this.cursor.className=\"typed-cursor\",this.cursor.innerHTML=this.cursorChar,this.el.parentNode&&this.el.parentNode.insertBefore(this.cursor,this.el.nextSibling)))}}]),t}();e[\"default\"]=a,t.exports=e[\"default\"]},function(t,e,s){\"use strict\";function n(t){return t&&t.__esModule?t:{\"default\":t}}function i(t,e){if(!(t instanceof e))throw new TypeError(\"Cannot call a class as a function\")}Object.defineProperty(e,\"__esModule\",{value:!0});var r=Object.assign||function(t){for(var e=1;e<arguments.length;e++){var s=arguments[e];for(var n in s)Object.prototype.hasOwnProperty.call(s,n)&&(t[n]=s[n])}return t},o=function(){function t(t,e){for(var s=0;s<e.length;s++){var n=e[s];n.enumerable=n.enumerable||!1,n.configurable=!0,\"value\"in n&&(n.writable=!0),Object.defineProperty(t,n.key,n)}}return function(e,s,n){return s&&t(e.prototype,s),n&&t(e,n),e}}(),a=s(2),u=n(a),l=function(){function t(){i(this,t)}return o(t,[{key:\"load\",value:function(t,e,s){if(\"string\"==typeof s?t.el=document.querySelector(s):t.el=s,t.options=r({},u[\"default\"],e),t.isInput=\"input\"===t.el.tagName.toLowerCase(),t.attr=t.options.attr,t.bindInputFocusEvents=t.options.bindInputFocusEvents,t.showCursor=!t.isInput&&t.options.showCursor,t.cursorChar=t.options.cursorChar,t.cursorBlinking=!0,t.elContent=t.attr?t.el.getAttribute(t.attr):t.el.textContent,t.contentType=t.options.contentType,t.typeSpeed=t.options.typeSpeed,t.startDelay=t.options.startDelay,t.backSpeed=t.options.backSpeed,t.smartBackspace=t.options.smartBackspace,t.backDelay=t.options.backDelay,t.fadeOut=t.options.fadeOut,t.fadeOutClass=t.options.fadeOutClass,t.fadeOutDelay=t.options.fadeOutDelay,t.isPaused=!1,t.strings=t.options.strings.map(function(t){return t.trim()}),\"string\"==typeof t.options.stringsElement?t.stringsElement=document.querySelector(t.options.stringsElement):t.stringsElement=t.options.stringsElement,t.stringsElement){t.strings=[],t.stringsElement.style.display=\"none\";var n=Array.prototype.slice.apply(t.stringsElement.children),i=n.length;if(i)for(var o=0;o<i;o+=1){var a=n[o];t.strings.push(a.innerHTML.trim())}}t.strPos=0,t.arrayPos=0,t.stopNum=0,t.loop=t.options.loop,t.loopCount=t.options.loopCount,t.curLoop=0,t.shuffle=t.options.shuffle,t.sequence=[],t.pause={status:!1,typewrite:!0,curString:\"\",curStrPos:0},t.typingComplete=!1;for(var o in t.strings)t.sequence[o]=o;t.currentElContent=this.getCurrentElContent(t),t.autoInsertCss=t.options.autoInsertCss,this.appendAnimationCss(t)}},{key:\"getCurrentElContent\",value:function(t){var e=\"\";return e=t.attr?t.el.getAttribute(t.attr):t.isInput?t.el.value:\"html\"===t.contentType?t.el.innerHTML:t.el.textContent}},{key:\"appendAnimationCss\",value:function(t){var e=\"data-typed-js-css\";if(t.autoInsertCss&&(t.showCursor||t.fadeOut)&&!document.querySelector(\"[\"+e+\"]\")){var s=document.createElement(\"style\");s.type=\"text/css\",s.setAttribute(e,!0);var n=\"\";t.showCursor&&(n+=\"\\n        .typed-cursor{\\n          opacity: 1;\\n        }\\n        .typed-cursor.typed-cursor--blink{\\n          animation: typedjsBlink 0.7s infinite;\\n          -webkit-animation: typedjsBlink 0.7s infinite;\\n                  animation: typedjsBlink 0.7s infinite;\\n        }\\n        @keyframes typedjsBlink{\\n          50% { opacity: 0.0; }\\n        }\\n        @-webkit-keyframes typedjsBlink{\\n          0% { opacity: 1; }\\n          50% { opacity: 0.0; }\\n          100% { opacity: 1; }\\n        }\\n      \"),t.fadeOut&&(n+=\"\\n        .typed-fade-out{\\n          opacity: 0;\\n          transition: opacity .25s;\\n        }\\n        .typed-cursor.typed-cursor--blink.typed-fade-out{\\n          -webkit-animation: 0;\\n          animation: 0;\\n        }\\n      \"),0!==s.length&&(s.innerHTML=n,document.body.appendChild(s))}}}]),t}();e[\"default\"]=l;var c=new l;e.initializer=c},function(t,e){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0});var s={strings:[\"These are the default values...\",\"You know what you should do?\",\"Use your own!\",\"Have a great day!\"],stringsElement:null,typeSpeed:0,startDelay:0,backSpeed:0,smartBackspace:!0,shuffle:!1,backDelay:700,fadeOut:!1,fadeOutClass:\"typed-fade-out\",fadeOutDelay:500,loop:!1,loopCount:1/0,showCursor:!0,cursorChar:\"|\",autoInsertCss:!0,attr:null,bindInputFocusEvents:!1,contentType:\"html\",onComplete:function(t){},preStringTyped:function(t,e){},onStringTyped:function(t,e){},onLastStringBackspaced:function(t){},onTypingPaused:function(t,e){},onTypingResumed:function(t,e){},onReset:function(t){},onStop:function(t,e){},onStart:function(t,e){},onDestroy:function(t){}};e[\"default\"]=s,t.exports=e[\"default\"]},function(t,e){\"use strict\";function s(t,e){if(!(t instanceof e))throw new TypeError(\"Cannot call a class as a function\")}Object.defineProperty(e,\"__esModule\",{value:!0});var n=function(){function t(t,e){for(var s=0;s<e.length;s++){var n=e[s];n.enumerable=n.enumerable||!1,n.configurable=!0,\"value\"in n&&(n.writable=!0),Object.defineProperty(t,n.key,n)}}return function(e,s,n){return s&&t(e.prototype,s),n&&t(e,n),e}}(),i=function(){function t(){s(this,t)}return n(t,[{key:\"typeHtmlChars\",value:function(t,e,s){if(\"html\"!==s.contentType)return e;var n=t.substr(e).charAt(0);if(\"<\"===n||\"&\"===n){var i=\"\";for(i=\"<\"===n?\">\":\";\";t.substr(e+1).charAt(0)!==i&&(e++,!(e+1>t.length)););e++}return e}},{key:\"backSpaceHtmlChars\",value:function(t,e,s){if(\"html\"!==s.contentType)return e;var n=t.substr(e).charAt(0);if(\">\"===n||\";\"===n){var i=\"\";for(i=\">\"===n?\"<\":\"&\";t.substr(e-1).charAt(0)!==i&&(e--,!(e<0)););e--}return e}}]),t}();e[\"default\"]=i;var r=new i;e.htmlParser=r}])});\n//# sourceMappingURL=typed.min.js.map\n;// Google Tag Manager\n(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':\nnew Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],\nj=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=\n'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);\n})(window,document,'script','dataLayer','GTM-TKMGCBC');\n\n\n$(function() {\n  var hsqCount = 0;\n\n  function linker() {\n    // Append Hubspot IDs to dashboard links\n    var hsutk = window.getCookie('hubspotutk');\n    if(hsqCount > 10) {\n      // Hubspot is disabled or down\n      console.log('failing', hsutk)\n      return;\n    } else if (!window._hsq && !hsutk) {\n      hsqCount++;\n      // console.log('no hubspot ID yet')\n      setTimeout(linker, 300);\n      return;\n    }\n\n    var els = Array.prototype.slice.call(document.querySelectorAll('a[href*=\"dashboard.ionicframework.com\"]'));\n    if(!els) {\n      //console.log('no dash links')\n      return;\n    }\n\n    // console.log(els)\n    els.forEach(function(el) {\n      var href = el.getAttribute('href');\n\n      // https://stackoverflow.com/questions/44412241/is-it-possible-to-read-experimentid-and-variationid-in-javascript-with-google-op\n      // var propertyId = \"UA-44023830-1\";\n      // var experimentId = Object.keys(gaData[propertyId].experiments)[0];\n      // var variationId = gaData[propertyId].experiments[experimentId];\n      // console.log(experimentId, variationId)\n\n      if (href.indexOf('?') !== -1) {\n\n        // If a source attribute has been added to URI and an A/B test is running, append test group ID to value of source attribute\n        // var sourceVal = getQuerystringParameter('source', '?' + href.split('?')[1]);\n        // if (sourceVal.length && experimentId.length) {\n        //   href = updateQuerystringParameter(href, 'source', sourceVal + '-' + experimentId + '-' + variationId);\n        // }\n        // console.log(href)\n\n        href += '&'\n      } else {\n        href += '?'\n      }\n\n      // Add Hubspot UTK ID as HSID if present\n      if (hsutk) {\n        href += 'hsid=' + encodeURIComponent(hsutk);\n      }\n      el.setAttribute('href', href );\n    })\n  }\n  linker();\n});\n\nfunction getQuerystringParameter(name, querystring) {\n  name = name.replace(/[\\[]/, '\\\\[').replace(/[\\]]/, '\\\\]');\n  var regex = new RegExp('[\\\\?&]' + name + '=([^&#]*)');\n  var results = regex.exec(querystring);\n  return results === null ? '' : decodeURIComponent(results[1].replace(/\\+/g, ' '));\n};\n\nfunction updateQuerystringParameter(uri, key, value) {\n  var re = new RegExp(\"([?&])\" + key + \"=.*?(&|$)\", \"i\");\n  var separator = uri.indexOf('?') !== -1 ? \"&\" : \"?\";\n  if (uri.match(re)) {\n    return uri.replace(re, '$1' + key + \"=\" + value + '$2');\n  }\n  else {\n    return uri + separator + key + \"=\" + value;\n  }\n}\n\n// shorthand global analytics click event helper\nwindow.c = function(cat, lbl, el, val) {\n  if (typeof val === 'undefined') {\n    var val = null;\n  }\n  if (window.ga && ga.loaded) {\n    ga('send', {\n      hitType: 'event',\n      eventCategory: cat,\n      eventAction: 'Click',\n      eventLabel: lbl,\n      eventValue: val,\n      hitCallback: function() {\n        if (!!el) {\n          document.location = el.href;\n        };\n      }\n    });\n  } else {\n    if (!!el) {\n      document.location = el.href;\n    }\n  }\n  // don't follow links until analytics is recieved\n  if (!!el) {\n    return false;\n  }\n};\n;(function(factory) {\n\n  // Setup highlight.js for different environments. First is Node.js or\n  // CommonJS.\n  if(typeof exports !== 'undefined') {\n    factory(exports);\n  } else {\n    // Export hljs globally even when using AMD for cases when this script\n    // is loaded with others that may still expect a global hljs.\n    window.hljs = factory({});\n\n    // Finally register the global hljs with AMD.\n    if(typeof define === 'function' && define.amd) {\n      define('hljs', [], function() {\n        return window.hljs;\n      });\n    }\n  }\n\n}(function(hljs) {\n\n  /* Utility functions */\n\n  function escape(value) {\n    return value.replace(/&/gm, '&amp;').replace(/</gm, '&lt;').replace(/>/gm, '&gt;');\n  }\n\n  function tag(node) {\n    return node.nodeName.toLowerCase();\n  }\n\n  function testRe(re, lexeme) {\n    var match = re && re.exec(lexeme);\n    return match && match.index == 0;\n  }\n\n  function isNotHighlighted(language) {\n    return (/^(no-?highlight|plain|text)$/i).test(language);\n  }\n\n  function blockLanguage(block) {\n    var i, match, length,\n        classes = block.className + ' ';\n\n    classes += block.parentNode ? block.parentNode.className : '';\n\n    // language-* takes precedence over non-prefixed class names\n    match = (/\\blang(?:uage)?-([\\w-]+)\\b/i).exec(classes);\n    if (match) {\n      return getLanguage(match[1]) ? match[1] : 'no-highlight';\n    }\n\n    classes = classes.split(/\\s+/);\n    for (i = 0, length = classes.length; i < length; i++) {\n      if (getLanguage(classes[i]) || isNotHighlighted(classes[i])) {\n        return classes[i];\n      }\n    }\n  }\n\n  function inherit(parent, obj) {\n    var result = {}, key;\n    for (key in parent)\n      result[key] = parent[key];\n    if (obj)\n      for (key in obj)\n        result[key] = obj[key];\n    return result;\n  }\n\n  /* Stream merging */\n\n  function nodeStream(node) {\n    var result = [];\n    (function _nodeStream(node, offset) {\n      for (var child = node.firstChild; child; child = child.nextSibling) {\n        if (child.nodeType == 3)\n          offset += child.nodeValue.length;\n        else if (child.nodeType == 1) {\n          result.push({\n            event: 'start',\n            offset: offset,\n            node: child\n          });\n          offset = _nodeStream(child, offset);\n          // Prevent void elements from having an end tag that would actually\n          // double them in the output. There are more void elements in HTML\n          // but we list only those realistically expected in code display.\n          if (!tag(child).match(/br|hr|img|input/)) {\n            result.push({\n              event: 'stop',\n              offset: offset,\n              node: child\n            });\n          }\n        }\n      }\n      return offset;\n    })(node, 0);\n    return result;\n  }\n\n  function mergeStreams(original, highlighted, value) {\n    var processed = 0;\n    var result = '';\n    var nodeStack = [];\n\n    function selectStream() {\n      if (!original.length || !highlighted.length) {\n        return original.length ? original : highlighted;\n      }\n      if (original[0].offset != highlighted[0].offset) {\n        return (original[0].offset < highlighted[0].offset) ? original : highlighted;\n      }\n\n      /*\n      To avoid starting the stream just before it should stop the order is\n      ensured that original always starts first and closes last:\n\n      if (event1 == 'start' && event2 == 'start')\n        return original;\n      if (event1 == 'start' && event2 == 'stop')\n        return highlighted;\n      if (event1 == 'stop' && event2 == 'start')\n        return original;\n      if (event1 == 'stop' && event2 == 'stop')\n        return highlighted;\n\n      ... which is collapsed to:\n      */\n      return highlighted[0].event == 'start' ? original : highlighted;\n    }\n\n    function open(node) {\n      function attr_str(a) {return ' ' + a.nodeName + '=\"' + escape(a.value) + '\"';}\n      result += '<' + tag(node) + Array.prototype.map.call(node.attributes, attr_str).join('') + '>';\n    }\n\n    function close(node) {\n      result += '</' + tag(node) + '>';\n    }\n\n    function render(event) {\n      (event.event == 'start' ? open : close)(event.node);\n    }\n\n    while (original.length || highlighted.length) {\n      var stream = selectStream();\n      result += escape(value.substr(processed, stream[0].offset - processed));\n      processed = stream[0].offset;\n      if (stream == original) {\n        /*\n        On any opening or closing tag of the original markup we first close\n        the entire highlighted node stack, then render the original tag along\n        with all the following original tags at the same offset and then\n        reopen all the tags on the highlighted stack.\n        */\n        nodeStack.reverse().forEach(close);\n        do {\n          render(stream.splice(0, 1)[0]);\n          stream = selectStream();\n        } while (stream == original && stream.length && stream[0].offset == processed);\n        nodeStack.reverse().forEach(open);\n      } else {\n        if (stream[0].event == 'start') {\n          nodeStack.push(stream[0].node);\n        } else {\n          nodeStack.pop();\n        }\n        render(stream.splice(0, 1)[0]);\n      }\n    }\n    return result + escape(value.substr(processed));\n  }\n\n  /* Initialization */\n\n  function compileLanguage(language) {\n\n    function reStr(re) {\n        return (re && re.source) || re;\n    }\n\n    function langRe(value, global) {\n      return new RegExp(\n        reStr(value),\n        'm' + (language.case_insensitive ? 'i' : '') + (global ? 'g' : '')\n      );\n    }\n\n    function compileMode(mode, parent) {\n      if (mode.compiled)\n        return;\n      mode.compiled = true;\n\n      mode.keywords = mode.keywords || mode.beginKeywords;\n      if (mode.keywords) {\n        var compiled_keywords = {};\n\n        var flatten = function(className, str) {\n          if (language.case_insensitive) {\n            str = str.toLowerCase();\n          }\n          str.split(' ').forEach(function(kw) {\n            var pair = kw.split('|');\n            compiled_keywords[pair[0]] = [className, pair[1] ? Number(pair[1]) : 1];\n          });\n        };\n\n        if (typeof mode.keywords == 'string') { // string\n          flatten('keyword', mode.keywords);\n        } else {\n          Object.keys(mode.keywords).forEach(function (className) {\n            flatten(className, mode.keywords[className]);\n          });\n        }\n        mode.keywords = compiled_keywords;\n      }\n      mode.lexemesRe = langRe(mode.lexemes || /\\b\\w+\\b/, true);\n\n      if (parent) {\n        if (mode.beginKeywords) {\n          mode.begin = '\\\\b(' + mode.beginKeywords.split(' ').join('|') + ')\\\\b';\n        }\n        if (!mode.begin)\n          mode.begin = /\\B|\\b/;\n        mode.beginRe = langRe(mode.begin);\n        if (!mode.end && !mode.endsWithParent)\n          mode.end = /\\B|\\b/;\n        if (mode.end)\n          mode.endRe = langRe(mode.end);\n        mode.terminator_end = reStr(mode.end) || '';\n        if (mode.endsWithParent && parent.terminator_end)\n          mode.terminator_end += (mode.end ? '|' : '') + parent.terminator_end;\n      }\n      if (mode.illegal)\n        mode.illegalRe = langRe(mode.illegal);\n      if (mode.relevance === undefined)\n        mode.relevance = 1;\n      if (!mode.contains) {\n        mode.contains = [];\n      }\n      var expanded_contains = [];\n      mode.contains.forEach(function(c) {\n        if (c.variants) {\n          c.variants.forEach(function(v) {expanded_contains.push(inherit(c, v));});\n        } else {\n          expanded_contains.push(c == 'self' ? mode : c);\n        }\n      });\n      mode.contains = expanded_contains;\n      mode.contains.forEach(function(c) {compileMode(c, mode);});\n\n      if (mode.starts) {\n        compileMode(mode.starts, parent);\n      }\n\n      var terminators =\n        mode.contains.map(function(c) {\n          return c.beginKeywords ? '\\\\.?(' + c.begin + ')\\\\.?' : c.begin;\n        })\n        .concat([mode.terminator_end, mode.illegal])\n        .map(reStr)\n        .filter(Boolean);\n      mode.terminators = terminators.length ? langRe(terminators.join('|'), true) : {exec: function(/*s*/) {return null;}};\n    }\n\n    compileMode(language);\n  }\n\n  /*\n  Core highlighting function. Accepts a language name, or an alias, and a\n  string with the code to highlight. Returns an object with the following\n  properties:\n\n  - relevance (int)\n  - value (an HTML string with highlighting markup)\n\n  */\n  function highlight(name, value, ignore_illegals, continuation) {\n\n    function subMode(lexeme, mode) {\n      for (var i = 0; i < mode.contains.length; i++) {\n        if (testRe(mode.contains[i].beginRe, lexeme)) {\n          return mode.contains[i];\n        }\n      }\n    }\n\n    function endOfMode(mode, lexeme) {\n      if (testRe(mode.endRe, lexeme)) {\n        while (mode.endsParent && mode.parent) {\n          mode = mode.parent;\n        }\n        return mode;\n      }\n      if (mode.endsWithParent) {\n        return endOfMode(mode.parent, lexeme);\n      }\n    }\n\n    function isIllegal(lexeme, mode) {\n      return !ignore_illegals && testRe(mode.illegalRe, lexeme);\n    }\n\n    function keywordMatch(mode, match) {\n      var match_str = language.case_insensitive ? match[0].toLowerCase() : match[0];\n      return mode.keywords.hasOwnProperty(match_str) && mode.keywords[match_str];\n    }\n\n    function buildSpan(classname, insideSpan, leaveOpen, noPrefix) {\n      var classPrefix = noPrefix ? '' : options.classPrefix,\n          openSpan    = '<span class=\"' + classPrefix,\n          closeSpan   = leaveOpen ? '' : '</span>';\n\n      openSpan += classname + '\">';\n\n      return openSpan + insideSpan + closeSpan;\n    }\n\n    function processKeywords() {\n      if (!top.keywords)\n        return escape(mode_buffer);\n      var result = '';\n      var last_index = 0;\n      top.lexemesRe.lastIndex = 0;\n      var match = top.lexemesRe.exec(mode_buffer);\n      while (match) {\n        result += escape(mode_buffer.substr(last_index, match.index - last_index));\n        var keyword_match = keywordMatch(top, match);\n        if (keyword_match) {\n          relevance += keyword_match[1];\n          result += buildSpan(keyword_match[0], escape(match[0]));\n        } else {\n          result += escape(match[0]);\n        }\n        last_index = top.lexemesRe.lastIndex;\n        match = top.lexemesRe.exec(mode_buffer);\n      }\n      return result + escape(mode_buffer.substr(last_index));\n    }\n\n    function processSubLanguage() {\n      var explicit = typeof top.subLanguage == 'string';\n      if (explicit && !languages[top.subLanguage]) {\n        return escape(mode_buffer);\n      }\n\n      var result = explicit ?\n                   highlight(top.subLanguage, mode_buffer, true, continuations[top.subLanguage]) :\n                   highlightAuto(mode_buffer, top.subLanguage.length ? top.subLanguage : undefined);\n\n      // Counting embedded language score towards the host language may be disabled\n      // with zeroing the containing mode relevance. Usecase in point is Markdown that\n      // allows XML everywhere and makes every XML snippet to have a much larger Markdown\n      // score.\n      if (top.relevance > 0) {\n        relevance += result.relevance;\n      }\n      if (explicit) {\n        continuations[top.subLanguage] = result.top;\n      }\n      return buildSpan(result.language, result.value, false, true);\n    }\n\n    function processBuffer() {\n      return top.subLanguage !== undefined ? processSubLanguage() : processKeywords();\n    }\n\n    function startNewMode(mode, lexeme) {\n      var markup = mode.className? buildSpan(mode.className, '', true): '';\n      if (mode.returnBegin) {\n        result += markup;\n        mode_buffer = '';\n      } else if (mode.excludeBegin) {\n        result += escape(lexeme) + markup;\n        mode_buffer = '';\n      } else {\n        result += markup;\n        mode_buffer = lexeme;\n      }\n      top = Object.create(mode, {parent: {value: top}});\n    }\n\n    function processLexeme(buffer, lexeme) {\n\n      mode_buffer += buffer;\n      if (lexeme === undefined) {\n        result += processBuffer();\n        return 0;\n      }\n\n      var new_mode = subMode(lexeme, top);\n      if (new_mode) {\n        result += processBuffer();\n        startNewMode(new_mode, lexeme);\n        return new_mode.returnBegin ? 0 : lexeme.length;\n      }\n\n      var end_mode = endOfMode(top, lexeme);\n      if (end_mode) {\n        var origin = top;\n        if (!(origin.returnEnd || origin.excludeEnd)) {\n          mode_buffer += lexeme;\n        }\n        result += processBuffer();\n        do {\n          if (top.className) {\n            result += '</span>';\n          }\n          relevance += top.relevance;\n          top = top.parent;\n        } while (top != end_mode.parent);\n        if (origin.excludeEnd) {\n          result += escape(lexeme);\n        }\n        mode_buffer = '';\n        if (end_mode.starts) {\n          startNewMode(end_mode.starts, '');\n        }\n        return origin.returnEnd ? 0 : lexeme.length;\n      }\n\n      if (isIllegal(lexeme, top))\n        throw new Error('Illegal lexeme \"' + lexeme + '\" for mode \"' + (top.className || '<unnamed>') + '\"');\n\n      /*\n      Parser should not reach this point as all types of lexemes should be caught\n      earlier, but if it does due to some bug make sure it advances at least one\n      character forward to prevent infinite looping.\n      */\n      mode_buffer += lexeme;\n      return lexeme.length || 1;\n    }\n\n    var language = getLanguage(name);\n    if (!language) {\n      throw new Error('Unknown language: \"' + name + '\"');\n    }\n\n    compileLanguage(language);\n    var top = continuation || language;\n    var continuations = {}; // keep continuations for sub-languages\n    var result = '', current;\n    for(current = top; current != language; current = current.parent) {\n      if (current.className) {\n        result = buildSpan(current.className, '', true) + result;\n      }\n    }\n    var mode_buffer = '';\n    var relevance = 0;\n    try {\n      var match, count, index = 0;\n      while (true) {\n        top.terminators.lastIndex = index;\n        match = top.terminators.exec(value);\n        if (!match)\n          break;\n        count = processLexeme(value.substr(index, match.index - index), match[0]);\n        index = match.index + count;\n      }\n      processLexeme(value.substr(index));\n      for(current = top; current.parent; current = current.parent) { // close dangling modes\n        if (current.className) {\n          result += '</span>';\n        }\n      }\n      return {\n        relevance: relevance,\n        value: result,\n        language: name,\n        top: top\n      };\n    } catch (e) {\n      if (e.message.indexOf('Illegal') != -1) {\n        return {\n          relevance: 0,\n          value: escape(value)\n        };\n      } else {\n        throw e;\n      }\n    }\n  }\n\n  /*\n  Highlighting with language detection. Accepts a string with the code to\n  highlight. Returns an object with the following properties:\n\n  - language (detected language)\n  - relevance (int)\n  - value (an HTML string with highlighting markup)\n  - second_best (object with the same structure for second-best heuristically\n    detected language, may be absent)\n\n  */\n  function highlightAuto(text, languageSubset) {\n    languageSubset = languageSubset || options.languages || Object.keys(languages);\n    var result = {\n      relevance: 0,\n      value: escape(text)\n    };\n    var second_best = result;\n    languageSubset.forEach(function(name) {\n      if (!getLanguage(name)) {\n        return;\n      }\n      var current = highlight(name, text, false);\n      current.language = name;\n      if (current.relevance > second_best.relevance) {\n        second_best = current;\n      }\n      if (current.relevance > result.relevance) {\n        second_best = result;\n        result = current;\n      }\n    });\n    if (second_best.language) {\n      result.second_best = second_best;\n    }\n    return result;\n  }\n\n  /*\n  Post-processing of the highlighted markup:\n\n  - replace TABs with something more useful\n  - replace real line-breaks with '<br>' for non-pre containers\n\n  */\n  function fixMarkup(value) {\n    if (options.tabReplace) {\n      value = value.replace(/^((<[^>]+>|\\t)+)/gm, function(match, p1 /*..., offset, s*/) {\n        return p1.replace(/\\t/g, options.tabReplace);\n      });\n    }\n    if (options.useBR) {\n      value = value.replace(/\\n/g, '<br>');\n    }\n    return value;\n  }\n\n  function buildClassName(prevClassName, currentLang, resultLang) {\n    var language = currentLang ? aliases[currentLang] : resultLang,\n        result   = [prevClassName.trim()];\n\n    if (!prevClassName.match(/\\bhljs\\b/)) {\n      result.push('hljs');\n    }\n\n    if (prevClassName.indexOf(language) === -1) {\n      result.push(language);\n    }\n\n    return result.join(' ').trim();\n  }\n\n  /*\n  Applies highlighting to a DOM node containing code. Accepts a DOM node and\n  two optional parameters for fixMarkup.\n  */\n  function highlightBlock(block) {\n    var language = blockLanguage(block);\n    if (isNotHighlighted(language))\n        return;\n\n    var node;\n    if (options.useBR) {\n      node = document.createElementNS('http://www.w3.org/1999/xhtml', 'div');\n      node.innerHTML = block.innerHTML.replace(/\\n/g, '').replace(/<br[ \\/]*>/g, '\\n');\n    } else {\n      node = block;\n    }\n    var text = node.textContent;\n    var result = language ? highlight(language, text, true) : highlightAuto(text);\n\n    var originalStream = nodeStream(node);\n    if (originalStream.length) {\n      var resultNode = document.createElementNS('http://www.w3.org/1999/xhtml', 'div');\n      resultNode.innerHTML = result.value;\n      result.value = mergeStreams(originalStream, nodeStream(resultNode), text);\n    }\n    result.value = fixMarkup(result.value);\n\n    block.innerHTML = result.value;\n    block.className = buildClassName(block.className, language, result.language);\n    block.result = {\n      language: result.language,\n      re: result.relevance\n    };\n    if (result.second_best) {\n      block.second_best = {\n        language: result.second_best.language,\n        re: result.second_best.relevance\n      };\n    }\n  }\n\n  var options = {\n    classPrefix: 'hljs-',\n    tabReplace: null,\n    useBR: false,\n    languages: undefined\n  };\n\n  /*\n  Updates highlight.js global options with values passed in the form of an object\n  */\n  function configure(user_options) {\n    options = inherit(options, user_options);\n  }\n\n  /*\n  Applies highlighting to all <pre><code>..</code></pre> blocks on a page.\n  */\n  function initHighlighting() {\n    if (initHighlighting.called)\n      return;\n    initHighlighting.called = true;\n\n    var blocks = document.querySelectorAll('pre code');\n    Array.prototype.forEach.call(blocks, highlightBlock);\n  }\n\n  /*\n  Attaches highlighting to the page load event.\n  */\n  function initHighlightingOnLoad() {\n    addEventListener('DOMContentLoaded', initHighlighting, false);\n    addEventListener('load', initHighlighting, false);\n  }\n\n  var languages = {};\n  var aliases = {};\n\n  function registerLanguage(name, language) {\n    var lang = languages[name] = language(hljs);\n    if (lang.aliases) {\n      lang.aliases.forEach(function(alias) {aliases[alias] = name;});\n    }\n  }\n\n  function listLanguages() {\n    return Object.keys(languages);\n  }\n\n  function getLanguage(name) {\n    name = (name || '').toLowerCase();\n    return languages[name] || languages[aliases[name]];\n  }\n\n  /* Interface definition */\n\n  hljs.highlight = highlight;\n  hljs.highlightAuto = highlightAuto;\n  hljs.fixMarkup = fixMarkup;\n  hljs.highlightBlock = highlightBlock;\n  hljs.configure = configure;\n  hljs.initHighlighting = initHighlighting;\n  hljs.initHighlightingOnLoad = initHighlightingOnLoad;\n  hljs.registerLanguage = registerLanguage;\n  hljs.listLanguages = listLanguages;\n  hljs.getLanguage = getLanguage;\n  hljs.inherit = inherit;\n\n  // Common regexps\n  hljs.IDENT_RE = '[a-zA-Z]\\\\w*';\n  hljs.UNDERSCORE_IDENT_RE = '[a-zA-Z_]\\\\w*';\n  hljs.NUMBER_RE = '\\\\b\\\\d+(\\\\.\\\\d+)?';\n  hljs.C_NUMBER_RE = '(\\\\b0[xX][a-fA-F0-9]+|(\\\\b\\\\d+(\\\\.\\\\d*)?|\\\\.\\\\d+)([eE][-+]?\\\\d+)?)'; // 0x..., 0..., decimal, float\n  hljs.BINARY_NUMBER_RE = '\\\\b(0b[01]+)'; // 0b...\n  hljs.RE_STARTERS_RE = '!|!=|!==|%|%=|&|&&|&=|\\\\*|\\\\*=|\\\\+|\\\\+=|,|-|-=|/=|/|:|;|<<|<<=|<=|<|===|==|=|>>>=|>>=|>=|>>>|>>|>|\\\\?|\\\\[|\\\\{|\\\\(|\\\\^|\\\\^=|\\\\||\\\\|=|\\\\|\\\\||~';\n\n  // Common modes\n  hljs.BACKSLASH_ESCAPE = {\n    begin: '\\\\\\\\[\\\\s\\\\S]', relevance: 0\n  };\n  hljs.APOS_STRING_MODE = {\n    className: 'string',\n    begin: '\\'', end: '\\'',\n    illegal: '\\\\n',\n    contains: [hljs.BACKSLASH_ESCAPE]\n  };\n  hljs.QUOTE_STRING_MODE = {\n    className: 'string',\n    begin: '\"', end: '\"',\n    illegal: '\\\\n',\n    contains: [hljs.BACKSLASH_ESCAPE]\n  };\n  hljs.PHRASAL_WORDS_MODE = {\n    begin: /\\b(a|an|the|are|I|I'm|isn't|don't|doesn't|won't|but|just|should|pretty|simply|enough|gonna|going|wtf|so|such|will|you|your|like)\\b/\n  };\n  hljs.COMMENT = function (begin, end, inherits) {\n    var mode = hljs.inherit(\n      {\n        className: 'comment',\n        begin: begin, end: end,\n        contains: []\n      },\n      inherits || {}\n    );\n    mode.contains.push(hljs.PHRASAL_WORDS_MODE);\n    mode.contains.push({\n      className: 'doctag',\n      begin: \"(?:TODO|FIXME|NOTE|BUG|XXX):\",\n      relevance: 0\n    });\n    return mode;\n  };\n  hljs.C_LINE_COMMENT_MODE = hljs.COMMENT('//', '$');\n  hljs.C_BLOCK_COMMENT_MODE = hljs.COMMENT('/\\\\*', '\\\\*/');\n  hljs.HASH_COMMENT_MODE = hljs.COMMENT('#', '$');\n  hljs.NUMBER_MODE = {\n    className: 'number',\n    begin: hljs.NUMBER_RE,\n    relevance: 0\n  };\n  hljs.C_NUMBER_MODE = {\n    className: 'number',\n    begin: hljs.C_NUMBER_RE,\n    relevance: 0\n  };\n  hljs.BINARY_NUMBER_MODE = {\n    className: 'number',\n    begin: hljs.BINARY_NUMBER_RE,\n    relevance: 0\n  };\n  hljs.CSS_NUMBER_MODE = {\n    className: 'number',\n    begin: hljs.NUMBER_RE + '(' +\n      '%|em|ex|ch|rem'  +\n      '|vw|vh|vmin|vmax' +\n      '|cm|mm|in|pt|pc|px' +\n      '|deg|grad|rad|turn' +\n      '|s|ms' +\n      '|Hz|kHz' +\n      '|dpi|dpcm|dppx' +\n      ')?',\n    relevance: 0\n  };\n  hljs.REGEXP_MODE = {\n    className: 'regexp',\n    begin: /\\//, end: /\\/[gimuy]*/,\n    illegal: /\\n/,\n    contains: [\n      hljs.BACKSLASH_ESCAPE,\n      {\n        begin: /\\[/, end: /\\]/,\n        relevance: 0,\n        contains: [hljs.BACKSLASH_ESCAPE]\n      }\n    ]\n  };\n  hljs.TITLE_MODE = {\n    className: 'title',\n    begin: hljs.IDENT_RE,\n    relevance: 0\n  };\n  hljs.UNDERSCORE_TITLE_MODE = {\n    className: 'title',\n    begin: hljs.UNDERSCORE_IDENT_RE,\n    relevance: 0\n  };\n\nhljs.registerLanguage('bash', function(hljs) {\n  var VAR = {\n    className: 'variable',\n    variants: [\n      {begin: /\\$[\\w\\d#@][\\w\\d_]*/},\n      {begin: /\\$\\{(.*?)}/}\n    ]\n  };\n  var QUOTE_STRING = {\n    className: 'string',\n    begin: /\"/, end: /\"/,\n    contains: [\n      hljs.BACKSLASH_ESCAPE,\n      VAR,\n      {\n        className: 'variable',\n        begin: /\\$\\(/, end: /\\)/,\n        contains: [hljs.BACKSLASH_ESCAPE]\n      }\n    ]\n  };\n  var APOS_STRING = {\n    className: 'string',\n    begin: /'/, end: /'/\n  };\n\n  return {\n    aliases: ['sh', 'zsh'],\n    lexemes: /-?[a-z\\.]+/,\n    keywords: {\n      keyword:\n        'if then else elif fi for while in do done case esac function',\n      literal:\n        'true false',\n      built_in:\n        // Shell built-ins\n        // http://www.gnu.org/software/bash/manual/html_node/Shell-Builtin-Commands.html\n        'break cd continue eval exec exit export getopts hash pwd readonly return shift test times ' +\n        'trap umask unset ' +\n        // Bash built-ins\n        'alias bind builtin caller command declare echo enable help let local logout mapfile printf ' +\n        'read readarray source type typeset ulimit unalias ' +\n        // Shell modifiers\n        'set shopt ' +\n        // Zsh built-ins\n        'autoload bg bindkey bye cap chdir clone comparguments compcall compctl compdescribe compfiles ' +\n        'compgroups compquote comptags comptry compvalues dirs disable disown echotc echoti emulate ' +\n        'fc fg float functions getcap getln history integer jobs kill limit log noglob popd print ' +\n        'pushd pushln rehash sched setcap setopt stat suspend ttyctl unfunction unhash unlimit ' +\n        'unsetopt vared wait whence where which zcompile zformat zftp zle zmodload zparseopts zprof ' +\n        'zpty zregexparse zsocket zstyle ztcp',\n      operator:\n        '-ne -eq -lt -gt -f -d -e -s -l -a' // relevance booster\n    },\n    contains: [\n      {\n        className: 'shebang',\n        begin: /^#![^\\n]+sh\\s*$/,\n        relevance: 10\n      },\n      {\n        className: 'function',\n        begin: /\\w[\\w\\d_]*\\s*\\(\\s*\\)\\s*\\{/,\n        returnBegin: true,\n        contains: [hljs.inherit(hljs.TITLE_MODE, {begin: /\\w[\\w\\d_]*/})],\n        relevance: 0\n      },\n      hljs.HASH_COMMENT_MODE,\n      hljs.NUMBER_MODE,\n      QUOTE_STRING,\n      APOS_STRING,\n      VAR\n    ]\n  };\n});\n\nhljs.registerLanguage('css', function(hljs) {\n  var IDENT_RE = '[a-zA-Z-][a-zA-Z0-9_-]*';\n  var FUNCTION = {\n    className: 'function',\n    begin: IDENT_RE + '\\\\(',\n    returnBegin: true,\n    excludeEnd: true,\n    end: '\\\\('\n  };\n  var RULE = {\n    className: 'rule',\n    begin: /[A-Z\\_\\.\\-]+\\s*:/, returnBegin: true, end: ';', endsWithParent: true,\n    contains: [\n      {\n        className: 'attribute',\n        begin: /\\S/, end: ':', excludeEnd: true,\n        starts: {\n          className: 'value',\n          endsWithParent: true, excludeEnd: true,\n          contains: [\n            FUNCTION,\n            hljs.CSS_NUMBER_MODE,\n            hljs.QUOTE_STRING_MODE,\n            hljs.APOS_STRING_MODE,\n            hljs.C_BLOCK_COMMENT_MODE,\n            {\n              className: 'hexcolor', begin: '#[0-9A-Fa-f]+'\n            },\n            {\n              className: 'important', begin: '!important'\n            }\n          ]\n        }\n      }\n    ]\n  };\n\n  return {\n    case_insensitive: true,\n    illegal: /[=\\/|'\\$]/,\n    contains: [\n      hljs.C_BLOCK_COMMENT_MODE,\n      {\n        className: 'id', begin: /\\#[A-Za-z0-9_-]+/\n      },\n      {\n        className: 'class', begin: /\\.[A-Za-z0-9_-]+/\n      },\n      {\n        className: 'attr_selector',\n        begin: /\\[/, end: /\\]/,\n        illegal: '$'\n      },\n      {\n        className: 'pseudo',\n        begin: /:(:)?[a-zA-Z0-9\\_\\-\\+\\(\\)\"']+/\n      },\n      {\n        className: 'at_rule',\n        begin: '@(font-face|page)',\n        lexemes: '[a-z-]+',\n        keywords: 'font-face page'\n      },\n      {\n        className: 'at_rule',\n        begin: '@', end: '[{;]', // at_rule eating first \"{\" is a good thing\n                                 // because it doesn’t let it to be parsed as\n                                 // a rule set but instead drops parser into\n                                 // the default mode which is how it should be.\n        contains: [\n          {\n            className: 'keyword',\n            begin: /\\S+/\n          },\n          {\n            begin: /\\s/, endsWithParent: true, excludeEnd: true,\n            relevance: 0,\n            contains: [\n              FUNCTION,\n              hljs.APOS_STRING_MODE, hljs.QUOTE_STRING_MODE,\n              hljs.CSS_NUMBER_MODE\n            ]\n          }\n        ]\n      },\n      {\n        className: 'tag', begin: IDENT_RE,\n        relevance: 0\n      },\n      {\n        className: 'rules',\n        begin: '{', end: '}',\n        illegal: /\\S/,\n        contains: [\n          hljs.C_BLOCK_COMMENT_MODE,\n          RULE,\n        ]\n      }\n    ]\n  };\n});\n\nhljs.registerLanguage('javascript', function(hljs) {\n  return {\n    aliases: ['js'],\n    keywords: {\n      keyword:\n        'in of if for while finally var new function do return void else break catch ' +\n        'instanceof with throw case default try this switch continue typeof delete ' +\n        'let yield const export super debugger as async await',\n      literal:\n        'true false null undefined NaN Infinity',\n      built_in:\n        'eval isFinite isNaN parseFloat parseInt decodeURI decodeURIComponent ' +\n        'encodeURI encodeURIComponent escape unescape Object Function Boolean Error ' +\n        'EvalError InternalError RangeError ReferenceError StopIteration SyntaxError ' +\n        'TypeError URIError Number Math Date String RegExp Array Float32Array ' +\n        'Float64Array Int16Array Int32Array Int8Array Uint16Array Uint32Array ' +\n        'Uint8Array Uint8ClampedArray ArrayBuffer DataView JSON Intl arguments require ' +\n        'module console window document Symbol Set Map WeakSet WeakMap Proxy Reflect ' +\n        'Promise'\n    },\n    contains: [\n      {\n        className: 'pi',\n        relevance: 10,\n        begin: /^\\s*['\"]use (strict|asm)['\"]/\n      },\n      hljs.APOS_STRING_MODE,\n      hljs.QUOTE_STRING_MODE,\n      { // template string\n        className: 'string',\n        begin: '`', end: '`',\n        contains: [\n          hljs.BACKSLASH_ESCAPE,\n          {\n            className: 'subst',\n            begin: '\\\\$\\\\{', end: '\\\\}'\n          }\n        ]\n      },\n      hljs.C_LINE_COMMENT_MODE,\n      hljs.C_BLOCK_COMMENT_MODE,\n      {\n        className: 'number',\n        variants: [\n          { begin: '\\\\b(0[bB][01]+)' },\n          { begin: '\\\\b(0[oO][0-7]+)' },\n          { begin: hljs.C_NUMBER_RE }\n        ],\n        relevance: 0\n      },\n      { // \"value\" container\n        begin: '(' + hljs.RE_STARTERS_RE + '|\\\\b(case|return|throw)\\\\b)\\\\s*',\n        keywords: 'return throw case',\n        contains: [\n          hljs.C_LINE_COMMENT_MODE,\n          hljs.C_BLOCK_COMMENT_MODE,\n          hljs.REGEXP_MODE,\n          { // E4X / JSX\n            begin: /</, end: />\\s*[);\\]]/,\n            relevance: 0,\n            subLanguage: 'xml'\n          }\n        ],\n        relevance: 0\n      },\n      {\n        className: 'function',\n        beginKeywords: 'function', end: /\\{/, excludeEnd: true,\n        contains: [\n          hljs.inherit(hljs.TITLE_MODE, {begin: /[A-Za-z$_][0-9A-Za-z$_]*/}),\n          {\n            className: 'params',\n            begin: /\\(/, end: /\\)/,\n            excludeBegin: true,\n            excludeEnd: true,\n            contains: [\n              hljs.C_LINE_COMMENT_MODE,\n              hljs.C_BLOCK_COMMENT_MODE\n            ]\n          }\n        ],\n        illegal: /\\[|%/\n      },\n      {\n        begin: /\\$[(.]/ // relevance booster for a pattern common to JS libs: `$(something)` and `$.something`\n      },\n      {\n        begin: '\\\\.' + hljs.IDENT_RE, relevance: 0 // hack: prevents detection of keywords after dots\n      },\n      // ECMAScript 6 modules import\n      {\n        beginKeywords: 'import', end: '[;$]',\n        keywords: 'import from as',\n        contains: [\n          hljs.APOS_STRING_MODE,\n          hljs.QUOTE_STRING_MODE\n        ]\n      },\n      { // ES6 class\n        className: 'class',\n        beginKeywords: 'class', end: /[{;=]/, excludeEnd: true,\n        illegal: /[:\"\\[\\]]/,\n        contains: [\n          {beginKeywords: 'extends'},\n          hljs.UNDERSCORE_TITLE_MODE\n        ]\n      }\n    ],\n    illegal: /#/\n  };\n});\n\nhljs.registerLanguage('scss', function(hljs) {\n  var IDENT_RE = '[a-zA-Z-][a-zA-Z0-9_-]*';\n  var VARIABLE = {\n    className: 'variable',\n    begin: '(\\\\$' + IDENT_RE + ')\\\\b'\n  };\n  var FUNCTION = {\n    className: 'function',\n    begin: IDENT_RE + '\\\\(',\n    returnBegin: true,\n    excludeEnd: true,\n    end: '\\\\('\n  };\n  var HEXCOLOR = {\n    className: 'hexcolor', begin: '#[0-9A-Fa-f]+'\n  };\n  var DEF_INTERNALS = {\n    className: 'attribute',\n    begin: '[A-Z\\\\_\\\\.\\\\-]+', end: ':',\n    excludeEnd: true,\n    illegal: '[^\\\\s]',\n    starts: {\n      className: 'value',\n      endsWithParent: true, excludeEnd: true,\n      contains: [\n        FUNCTION,\n        HEXCOLOR,\n        hljs.CSS_NUMBER_MODE,\n        hljs.QUOTE_STRING_MODE,\n        hljs.APOS_STRING_MODE,\n        hljs.C_BLOCK_COMMENT_MODE,\n        {\n          className: 'important', begin: '!important'\n        }\n      ]\n    }\n  };\n  return {\n    case_insensitive: true,\n    illegal: '[=/|\\']',\n    contains: [\n      hljs.C_LINE_COMMENT_MODE,\n      hljs.C_BLOCK_COMMENT_MODE,\n      FUNCTION,\n      {\n        className: 'id', begin: '\\\\#[A-Za-z0-9_-]+',\n        relevance: 0\n      },\n      {\n        className: 'class', begin: '\\\\.[A-Za-z0-9_-]+',\n        relevance: 0\n      },\n      {\n        className: 'attr_selector',\n        begin: '\\\\[', end: '\\\\]',\n        illegal: '$'\n      },\n      {\n        className: 'tag', // begin: IDENT_RE, end: '[,|\\\\s]'\n        begin: '\\\\b(a|abbr|acronym|address|area|article|aside|audio|b|base|big|blockquote|body|br|button|canvas|caption|cite|code|col|colgroup|command|datalist|dd|del|details|dfn|div|dl|dt|em|embed|fieldset|figcaption|figure|footer|form|frame|frameset|(h[1-6])|head|header|hgroup|hr|html|i|iframe|img|input|ins|kbd|keygen|label|legend|li|link|map|mark|meta|meter|nav|noframes|noscript|object|ol|optgroup|option|output|p|param|pre|progress|q|rp|rt|ruby|samp|script|section|select|small|span|strike|strong|style|sub|sup|table|tbody|td|textarea|tfoot|th|thead|time|title|tr|tt|ul|var|video)\\\\b',\n        relevance: 0\n      },\n      {\n        className: 'pseudo',\n        begin: ':(visited|valid|root|right|required|read-write|read-only|out-range|optional|only-of-type|only-child|nth-of-type|nth-last-of-type|nth-last-child|nth-child|not|link|left|last-of-type|last-child|lang|invalid|indeterminate|in-range|hover|focus|first-of-type|first-line|first-letter|first-child|first|enabled|empty|disabled|default|checked|before|after|active)'\n      },\n      {\n        className: 'pseudo',\n        begin: '::(after|before|choices|first-letter|first-line|repeat-index|repeat-item|selection|value)'\n      },\n      VARIABLE,\n      {\n        className: 'attribute',\n        begin: '\\\\b(z-index|word-wrap|word-spacing|word-break|width|widows|white-space|visibility|vertical-align|unicode-bidi|transition-timing-function|transition-property|transition-duration|transition-delay|transition|transform-style|transform-origin|transform|top|text-underline-position|text-transform|text-shadow|text-rendering|text-overflow|text-indent|text-decoration-style|text-decoration-line|text-decoration-color|text-decoration|text-align-last|text-align|tab-size|table-layout|right|resize|quotes|position|pointer-events|perspective-origin|perspective|page-break-inside|page-break-before|page-break-after|padding-top|padding-right|padding-left|padding-bottom|padding|overflow-y|overflow-x|overflow-wrap|overflow|outline-width|outline-style|outline-offset|outline-color|outline|orphans|order|opacity|object-position|object-fit|normal|none|nav-up|nav-right|nav-left|nav-index|nav-down|min-width|min-height|max-width|max-height|mask|marks|margin-top|margin-right|margin-left|margin-bottom|margin|list-style-type|list-style-position|list-style-image|list-style|line-height|letter-spacing|left|justify-content|initial|inherit|ime-mode|image-orientation|image-resolution|image-rendering|icon|hyphens|height|font-weight|font-variant-ligatures|font-variant|font-style|font-stretch|font-size-adjust|font-size|font-language-override|font-kerning|font-feature-settings|font-family|font|float|flex-wrap|flex-shrink|flex-grow|flex-flow|flex-direction|flex-basis|flex|filter|empty-cells|display|direction|cursor|counter-reset|counter-increment|content|column-width|column-span|column-rule-width|column-rule-style|column-rule-color|column-rule|column-gap|column-fill|column-count|columns|color|clip-path|clip|clear|caption-side|break-inside|break-before|break-after|box-sizing|box-shadow|box-decoration-break|bottom|border-width|border-top-width|border-top-style|border-top-right-radius|border-top-left-radius|border-top-color|border-top|border-style|border-spacing|border-right-width|border-right-style|border-right-color|border-right|border-radius|border-left-width|border-left-style|border-left-color|border-left|border-image-width|border-image-source|border-image-slice|border-image-repeat|border-image-outset|border-image|border-color|border-collapse|border-bottom-width|border-bottom-style|border-bottom-right-radius|border-bottom-left-radius|border-bottom-color|border-bottom|border|background-size|background-repeat|background-position|background-origin|background-image|background-color|background-clip|background-attachment|background-blend-mode|background|backface-visibility|auto|animation-timing-function|animation-play-state|animation-name|animation-iteration-count|animation-fill-mode|animation-duration|animation-direction|animation-delay|animation|align-self|align-items|align-content)\\\\b',\n        illegal: '[^\\\\s]'\n      },\n      {\n        className: 'value',\n        begin: '\\\\b(whitespace|wait|w-resize|visible|vertical-text|vertical-ideographic|uppercase|upper-roman|upper-alpha|underline|transparent|top|thin|thick|text|text-top|text-bottom|tb-rl|table-header-group|table-footer-group|sw-resize|super|strict|static|square|solid|small-caps|separate|se-resize|scroll|s-resize|rtl|row-resize|ridge|right|repeat|repeat-y|repeat-x|relative|progress|pointer|overline|outside|outset|oblique|nowrap|not-allowed|normal|none|nw-resize|no-repeat|no-drop|newspaper|ne-resize|n-resize|move|middle|medium|ltr|lr-tb|lowercase|lower-roman|lower-alpha|loose|list-item|line|line-through|line-edge|lighter|left|keep-all|justify|italic|inter-word|inter-ideograph|inside|inset|inline|inline-block|inherit|inactive|ideograph-space|ideograph-parenthesis|ideograph-numeric|ideograph-alpha|horizontal|hidden|help|hand|groove|fixed|ellipsis|e-resize|double|dotted|distribute|distribute-space|distribute-letter|distribute-all-lines|disc|disabled|default|decimal|dashed|crosshair|collapse|col-resize|circle|char|center|capitalize|break-word|break-all|bottom|both|bolder|bold|block|bidi-override|below|baseline|auto|always|all-scroll|absolute|table|table-cell)\\\\b'\n      },\n      {\n        className: 'value',\n        begin: ':', end: ';',\n        contains: [\n          FUNCTION,\n          VARIABLE,\n          HEXCOLOR,\n          hljs.CSS_NUMBER_MODE,\n          hljs.QUOTE_STRING_MODE,\n          hljs.APOS_STRING_MODE,\n          {\n            className: 'important', begin: '!important'\n          }\n        ]\n      },\n      {\n        className: 'at_rule',\n        begin: '@', end: '[{;]',\n        keywords: 'mixin include extend for if else each while charset import debug media page content font-face namespace warn',\n        contains: [\n          FUNCTION,\n          VARIABLE,\n          hljs.QUOTE_STRING_MODE,\n          hljs.APOS_STRING_MODE,\n          HEXCOLOR,\n          hljs.CSS_NUMBER_MODE,\n          {\n            className: 'preprocessor',\n            begin: '\\\\s[A-Za-z0-9_.-]+',\n            relevance: 0\n          }\n        ]\n      }\n    ]\n  };\n});\n\nhljs.registerLanguage('typescript', function(hljs) {\n  var KEYWORDS = {\n    keyword:\n      'in if for while finally var new function|0 do return void else break catch ' +\n      'instanceof with throw case default try this switch continue typeof delete ' +\n      'let yield const class public private get set super ' +\n      'static implements enum export import declare type protected @',\n    literal:\n      'true false null undefined NaN Infinity',\n    built_in:\n      'eval isFinite isNaN parseFloat parseInt decodeURI decodeURIComponent ' +\n      'encodeURI encodeURIComponent escape unescape Object Function Boolean Error ' +\n      'EvalError InternalError RangeError ReferenceError StopIteration SyntaxError ' +\n      'TypeError URIError Number Math Date String RegExp Array Float32Array ' +\n      'Float64Array Int16Array Int32Array Int8Array Uint16Array Uint32Array ' +\n      'Uint8Array Uint8ClampedArray ArrayBuffer DataView JSON Intl arguments require ' +\n      'module console window document any number boolean string void'\n  };\n\n  return {\n    aliases: ['ts'],\n    keywords: KEYWORDS,\n    contains: [\n      {\n        className: 'pi',\n        begin: /^\\s*['\"]use strict['\"]/,\n        relevance: 0\n      },\n      hljs.APOS_STRING_MODE,\n      hljs.QUOTE_STRING_MODE,\n      hljs.C_LINE_COMMENT_MODE,\n      hljs.C_BLOCK_COMMENT_MODE,\n      {\n        className: 'number',\n        variants: [\n          { begin: '\\\\b(0[bB][01]+)' },\n          { begin: '\\\\b(0[oO][0-7]+)' },\n          { begin: hljs.C_NUMBER_RE }\n        ],\n        relevance: 0\n      },\n      { // \"value\" container\n        begin: '(' + hljs.RE_STARTERS_RE + '|\\\\b(case|return|throw)\\\\b)\\\\s*',\n        keywords: 'return throw case',\n        contains: [\n          hljs.C_LINE_COMMENT_MODE,\n          hljs.C_BLOCK_COMMENT_MODE,\n          hljs.REGEXP_MODE\n        ],\n        relevance: 0\n      },\n      {\n        className: 'function',\n        begin: 'function', end: /[\\{;]/, excludeEnd: true,\n        keywords: KEYWORDS,\n        contains: [\n          'self',\n          hljs.inherit(hljs.TITLE_MODE, {begin: /[A-Za-z$_][0-9A-Za-z$_]*/}),\n          {\n            className: 'params',\n            begin: /\\(/, end: /\\)/,\n            excludeBegin: true,\n            excludeEnd: true,\n            keywords: KEYWORDS,\n            contains: [\n              hljs.C_LINE_COMMENT_MODE,\n              hljs.C_BLOCK_COMMENT_MODE\n            ],\n            illegal: /[\"'\\(]/\n          }\n        ],\n        illegal: /\\[|%/,\n        relevance: 0 // () => {} is more typical in TypeScript\n      },\n      {\n        className: 'constructor',\n        beginKeywords: 'constructor', end: /\\{/, excludeEnd: true,\n        relevance: 10\n      },\n      {\n        className: 'module',\n        beginKeywords: 'module', end: /\\{/, excludeEnd: true\n      },\n      {\n        className: 'interface',\n        beginKeywords: 'interface', end: /\\{/, excludeEnd: true,\n        keywords: 'interface extends'\n        },\n        // MH ADDED: ES7 Decorators/Annotations\n      {\n        className: 'keyword',\n        begin: '@', end: /\\(/, excludeEnd: true\n      },\n      {\n        className: 'string',\n        begin: '`', end: /\\`/, excludeEnd: false\n      },\n      {\n        begin: /\\$[(.]/ // relevance booster for a pattern common to JS libs: `$(something)` and `$.something`\n      },\n      {\n        begin: '\\\\.' + hljs.IDENT_RE, relevance: 0 // hack: prevents detection of keywords after dots\n      }\n    ]\n  };\n});\n\nhljs.registerLanguage('xml', function(hljs) {\n  var XML_IDENT_RE = '[A-Za-z0-9\\\\._:-]+';\n  var PHP = {\n    begin: /<\\?(php)?(?!\\w)/, end: /\\?>/,\n    subLanguage: 'php'\n  };\n  var TAG_INTERNALS = {\n    endsWithParent: true,\n    illegal: /</,\n    relevance: 0,\n    contains: [\n      PHP,\n      {\n        className: 'attribute',\n        begin: XML_IDENT_RE,\n        relevance: 0\n      },\n      {\n        begin: '=',\n        relevance: 0,\n        contains: [\n          {\n            className: 'value',\n            contains: [PHP],\n            variants: [\n              {begin: /\"/, end: /\"/},\n              {begin: /'/, end: /'/},\n              {begin: /[^\\s\\/>]+/}\n            ]\n          }\n        ]\n      }\n    ]\n  };\n  return {\n    aliases: ['html', 'xhtml', 'rss', 'atom', 'xsl', 'plist'],\n    case_insensitive: true,\n    contains: [\n      {\n        className: 'doctype',\n        begin: '<!DOCTYPE', end: '>',\n        relevance: 10,\n        contains: [{begin: '\\\\[', end: '\\\\]'}]\n      },\n      hljs.COMMENT(\n        '<!--',\n        '-->',\n        {\n          relevance: 10\n        }\n      ),\n      {\n        className: 'cdata',\n        begin: '<\\\\!\\\\[CDATA\\\\[', end: '\\\\]\\\\]>',\n        relevance: 10\n      },\n      {\n        className: 'tag',\n        /*\n        The lookahead pattern (?=...) ensures that 'begin' only matches\n        '<style' as a single word, followed by a whitespace or an\n        ending braket. The '$' is needed for the lexeme to be recognized\n        by hljs.subMode() that tests lexemes outside the stream.\n        */\n        begin: '<style(?=\\\\s|>|$)', end: '>',\n        keywords: {title: 'style'},\n        contains: [TAG_INTERNALS],\n        starts: {\n          end: '</style>', returnEnd: true,\n          subLanguage: 'css'\n        }\n      },\n      {\n        className: 'tag',\n        // See the comment in the <style tag about the lookahead pattern\n        begin: '<script(?=\\\\s|>|$)', end: '>',\n        keywords: {title: 'script'},\n        contains: [TAG_INTERNALS],\n        starts: {\n          end: '\\<\\/script\\>', returnEnd: true,\n          subLanguage: ['actionscript', 'javascript', 'handlebars']\n        }\n      },\n      PHP,\n      {\n        className: 'pi',\n        begin: /<\\?\\w+/, end: /\\?>/,\n        relevance: 10\n      },\n      {\n        className: 'tag',\n        begin: '</?', end: '/?>',\n        contains: [\n          {\n            className: 'title', begin: /[^ \\/><\\n\\t]+/, relevance: 0\n          },\n          TAG_INTERNALS\n        ]\n      }\n    ]\n  };\n});\n\n  return hljs;\n}));\n;// shim foreach for ie11\nif ( !Array.prototype.forEach ) {\n  Array.prototype.forEach = function(fn, scope) {\n    for (var i = 0, len = this.length; i < len; ++i) {\n      fn.call(scope || this, this[i], i, this);\n    }\n  }\n}\n\n// sidebar toggle for mobile views\nvar sidebarToggleEl = document.getElementById('sidebar-toggle');\nif (sidebarToggleEl) {\n  sidebarToggleEl.onclick = function() {\n    document.getElementById('side-nav').classList.toggle('shown');\n    this.classList.toggle('active');\n  };\n}\n\n// $(document).ready(function() {\n//   // activate dropdowns\n//   $('.dropdown-toggle').dropdown();\n//\n//   $(\".navbar.transparent .dropdown, .pre-header .dropdown\").hover(\n//     function(){ $(this).addClass('open') },\n//     function(){ $(this).removeClass('open') }\n//   );\n// \t$(\".navbar.transparent .dropdown, .pre-header .dropdown\").click()\n//\n//   // Generic helper class for on-load animations\n//   $('.active-on-load').addClass('active');\n// });\n\n(function () {\n  // pre-header announcement animation\n  var announcement = document.querySelector('.pre-header__announcement');\n  if (announcement) {\n    var lastClear = localStorage.getItem('last-clear');\n    var timeNow  = (new Date()).getTime();\n\n    if ((timeNow - lastClear) > 1000 * 60 * 60 ) {\n      localStorage.clear();\n      localStorage.setItem('last-clear', timeNow);\n\n      setTimeout(function(){\n        announcement.classList.add('animate-in');\n      }, 2500)\n    } else {\n      announcement.classList.add('in');\n    }\n  }\n\n\n  // mobile nav\n  var mobileNav = document.querySelector('.mobile-nav');\n\n  if (mobileNav) {\n    document.querySelector('#collapse-toggle').addEventListener('click', function(){\n      document.body.classList.add('no-scroll');\n      mobileNav.classList.add('open');\n      mobileNav.classList.remove('closed');\n      mobileNav.style.display = 'block';\n    });\n\n    document.querySelector('.mobile-nav__close').addEventListener('click', function(){\n      document.body.classList.remove('no-scroll');\n      mobileNav.classList.remove('open');\n      mobileNav.classList.add('closed');\n      setTimeout(function() {\n        mobileNav.style.display = 'none';\n      }, 300);\n    });\n  }\n})();\n\nwindow.mobileAndTabletCheck = function() {\n  var check = false;\n  (function(a){if(/(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(a)||/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(a.substr(0,4)))check=true})(navigator.userAgent||navigator.vendor||window.opera);\n  return check;\n};\n\nwindow.getCookie = function(name) {\n  var v = document.cookie.match('(^|;) ?' + name + '=([^;]*)(;|$)');\n  return v ? v[2] : null;\n}\n\nwindow.tocToggle = function(btnEl) {\n  btnEl.parentElement.classList.toggle('collapsed');\n};\n\n$('[data-toggle=\"tooltip\"]').tooltip({container: 'body'});\n\n// since we don't use mixpanel on every page\nif (!window.mixpanel) {\n  window.mixpanel = {\n    track: function() { console.log('Mixpanel not enabled on this page'); }\n  }\n}\n// optional shorthand\nwindow.t = mixpanel.track;\n\nwindow.guid = function() {\n  function s4() {\n    return Math.floor((1 + Math.random()) * 0x10000)\n      .toString(16)\n      .substring(1);\n  }\n  return s4() + s4() + '-' + s4() + '-' + s4() + '-' +\n    s4() + '-' + s4() + s4() + s4();\n}\n\n// add an .active class to elements w/ .activateOnScroll class on when they\n// scroll in to view\nvar activateOnScroll = function() {\n  var elems;\n  var windowHeight;\n  function init() {\n    elems = document.querySelectorAll( window.activateOnScrollSelector ?\n      activateOnScrollSelector : '.activateOnScroll');\n    windowHeight = window.innerHeight ||\n                   document.documentElement.clientHeight ||\n                   document.body.clientHeight;;\n    addEventHandlers();\n    checkPosition();\n  }\n  function addEventHandlers() {\n    window.addEventListener('scroll', checkPosition);\n    window.addEventListener('resize', init);\n  }\n  function checkPosition() {\n    for (var i = 0; i < elems.length; i++) {\n      var elPos = elems[i].getBoundingClientRect();\n      var offset = parseInt(elems[i].dataset.offset || 0, 10);\n      if (\n        (\n          elPos.y - offset < 0 &&  // already past the item\n          elPos.y + (elPos.height / 2) - offset > 0\n        ) || (\n          elPos.y + offset > 0 && // item is yet below\n          elPos.y + (elPos.height / 2) + offset < windowHeight\n        )\n        ) {\n        elems[i].classList.add('active');\n      }\n    }\n  }\n  return {\n    init: init\n  };\n};\nactivateOnScroll().init();\n\n// highlight.js syntax highlighting\nhljs.initHighlightingOnLoad();\n\n// http://paulirish.com/2011/requestanimationframe-for-smart-animating/\n// http://my.opera.com/emoller/blog/2011/12/20/requestanimationframe-for-smart-er-animating\n// requestAnimationFrame polyfill by Erik Möller. fixes from Paul Irish and Tino Zijdel\n// MIT license\n\n(function() {\n  var lastTime = 0;\n  var vendors = ['ms', 'moz', 'webkit', 'o'];\n  for (var x = 0; x < vendors.length && !window.requestAnimationFrame; ++x) {\n    window.requestAnimationFrame = window[vendors[x] + 'RequestAnimationFrame'];\n    window.cancelAnimationFrame = window[vendors[x] + 'CancelAnimationFrame'] ||\n                                  window[vendors[x] + 'CancelRequestAnimationFrame'];\n  }\n\n  if (!window.requestAnimationFrame) {\n    window.requestAnimationFrame = function(callback, element) {\n      var currTime = new Date().getTime();\n      var timeToCall = Math.max(0, 16 - (currTime - lastTime));\n      var id = window.setTimeout(function() {\n        callback(currTime + timeToCall);\n      }, timeToCall);\n      lastTime = currTime + timeToCall;\n      return id;\n    };\n  }\n  if (!window.cancelAnimationFrame) {\n    window.cancelAnimationFrame = function(id) {\n      clearTimeout(id);\n    };\n  }\n}());\n\n// Smooth Scroll To anchor links with the .anchor class\n$('a.anchor[href*=\"#\"]').click(function(event) {\n  // On-page links\n  if (\n    location.pathname.replace(/^\\//, '') == this.pathname.replace(/^\\//, '')\n    &&\n    location.hostname == this.hostname\n  ) {\n    // Figure out element to scroll to\n    var target = $(this.hash);\n    if (!target.length) {\n      target = $('[name=\"' + this.hash.substring(1) + '\"]');\n    }\n    // Does a scroll target exist?\n    if (target.length) {\n      var offset = event.target.dataset && event.target.dataset.offset\n        ? event.target.dataset.offset : 100\n      scrollToY(target.offset().top - offset, 600);\n    } else {\n      // otherwise scroll to the top of the page\n      scrollToY(0, 600);\n    }\n    history.pushState && history.pushState(null, null, this.hash)\n    return false;\n  }\n});\n\n\nwindow.scrollToEl = function(selector, speed) {\n  // if passed a string, query for the element\n  // otherwise assume it's already and element\n  if(typeof selector === 'string') {\n    selector = document.querySelector(selector);\n  }\n  scrollToY(selector.offsetTop, speed)\n}\n\nwindow.scrollToY = function(scrollTargetY, speed, easing) {\n    // scrollTargetY: the target scrollY property of the window\n    // speed: time in pixels per second\n    // easing: easing equation to use\n\n    var scrollY = window.scrollY,\n        scrollTargetY = scrollTargetY || 0,\n        speed = speed || 2000,\n        easing = easing || 'easeOutSine',\n        currentTime = 0;\n\n    // min time .1, max time .8 seconds\n    var time = Math.max(.1, Math.min(Math.abs(scrollY - scrollTargetY) / speed, .8));\n\n    // easing equations from https://github.com/danro/easing-js/blob/master/easing.js\n    var PI_D2 = Math.PI / 2,\n        easingEquations = {\n            easeOutSine: function (pos) {\n                return Math.sin(pos * (Math.PI / 2));\n            },\n            easeInOutSine: function (pos) {\n                return (-0.5 * (Math.cos(Math.PI * pos) - 1));\n            },\n            easeInOutQuint: function (pos) {\n                if ((pos /= 0.5) < 1) {\n                    return 0.5 * Math.pow(pos, 5);\n                }\n                return 0.5 * (Math.pow((pos - 2), 5) + 2);\n            },\n            easeOutExpo: function(pos) {\n              return (pos===1) ? 1 : -Math.pow(2, -10 * pos) + 1;\n            }\n        };\n\n    // add animation loop\n    function tick() {\n        currentTime += 1 / 60;\n\n        var p = currentTime / time;\n        var t = easingEquations[easing](p);\n\n        if (p < 1) {\n            requestAnimationFrame(tick);\n            window.scrollTo(0, scrollY + ((scrollTargetY - scrollY) * t));\n        } else {\n            window.scrollTo(0, scrollTargetY);\n        }\n    }\n\n    // call it once to get started\n    tick();\n}\n\n\nwindow.stickyNav = {\n  init: function () {\n    this.isShown = false;\n    this.once = false;\n    this.navBar = document.querySelector('.navbar');\n    this.stickyNavBar = document.createElement(\"div\");\n    this.stickyNavBar.classList.add('navbar','navbar-default', 'light', 'navbar-sticky', 'navbar-sticky--hide');\n    if (this.navBar.className.indexOf('enterprise') > -1) {\n      this.stickyNavBar.classList.add('enterprise');\n    }\n    this.stickyNavBar.appendChild(this.navBar.querySelector('.container').cloneNode(true));\n    this.stickyNavBar.style.visibility = 'hidden';\n    document.body.appendChild(this.stickyNavBar);\n    document.body.classList.add('body-sticky-nav');\n    document.addEventListener('scroll', this.handleScroll.bind(this))\n  },\n\n  handleScroll: function () {\n    var self = this;\n    requestAnimationFrame(function(){\n      if (window.scrollY > 120) {\n        self.show();\n      } else {\n        self.hide();\n      }\n    });\n  },\n\n  show: function () {\n    if (this.isShown) return;\n    this.isShown = true;\n\n    if (!this.once) {\n      this.stickyNavBar.style.visibility = 'visible';\n      this.once = true;\n    }\n\n    this.stickyNavBar.classList.add('navbar-sticky--show');\n    this.stickyNavBar.classList.remove('navbar-sticky--hide');\n  },\n\n  hide: function () {\n    if (!this.isShown) return;\n    this.isShown = false;\n    this.stickyNavBar.classList.add('navbar-sticky--hide');\n    this.stickyNavBar.classList.remove('navbar-sticky--show');\n  }\n}\n\nwindow.rafContext = function(drawFn) {\n  var requestId;\n  function render() {\n    drawFn();\n    requestId = requestAnimationFrame(render);\n  }\n\n  return {\n    play: function() {\n      if (!requestId) {\n        render();\n      }\n    },\n    stop: function() {\n      if (requestId) {\n        cancelAnimationFrame(requestId);\n        requestId = null;\n      }\n    }\n  }\n}\n\nwindow.initAnimation = function(el, ctx, _options) {\n  var options = _options || {};\n  var breakpoint = (options.breakpoint) ?  options.breakpoint : 767;\n  var once = options.once || false;\n  var hasPlayed = options.playWhenInView ? false : true;\n  var isPlaying = false;\n\n  function firstPlay () {\n    play();\n    hasPlayed = true;\n  }\n\n  function play () {\n    if (isPlaying || window.innerWidth < breakpoint) return;\n    if (typeof ctx === 'function') {\n      ctx();\n    } else {\n      ctx.play();\n    }\n\n    isPlaying = true;\n  }\n\n  function pause () {\n    if (!isPlaying || typeof ctx === 'function') return;\n    ctx.stop();\n    isPlaying = false;\n  }\n\n  function checkScroll() {\n    if (once && hasPlayed) return;\n    var winHeight = window.innerHeight;\n    var bbox = el.getBoundingClientRect();\n    var offset = 0.5;\n\n    if (!hasPlayed && bbox.top < winHeight * offset && bbox.bottom > winHeight * offset ) firstPlay();\n    if (!hasPlayed) return;\n    if (!isPlaying && bbox.top < winHeight && bbox.bottom > 0) play();\n    if (isPlaying && bbox.top > winHeight) pause();\n    if (isPlaying && bbox.bottom < 0) pause();\n    if (!isPlaying && bbox.bottom > 0 && bbox.top < winHeight) play();\n  }\n\n  function checkViewport() {\n    if (window.innerWidth < breakpoint && isPlaying) pause();\n  }\n\n  checkScroll();\n  window.addEventListener('scroll', function() { requestAnimationFrame(checkScroll) });\n  window.addEventListener('resize', function() { requestAnimationFrame(checkViewport) });\n}\n\nwindow.pjx = {\n  isAnimating: false,\n  navLinks: null,\n\n  init: function(urlRoot, delegatorID, hooks) {\n    var self = this;\n    this.urlRoot = urlRoot;\n    this.navLinks = document.querySelectorAll('.pjxNavLink');\n    this.hooks = hooks || {};\n\n    document.querySelector(delegatorID).addEventListener('click', function(ev){\n      var el = ev.target;\n      while (el && !el.matches('a.pjxLink')) {\n        el = el.parentNode;\n        if (el.matches(delegatorID)) return;\n      }\n      ev.preventDefault();\n      self.handleClick(el);\n    });\n\n    window.onpopstate = this.handlePopState.bind(this);\n  },\n\n  each: function(fn) {\n    for (i = 0; i < this.navLinks.length; i++) {\n      fn(this.navLinks[i], i);\n    }\n  },\n\n  handleClick: function(el) {\n    if (this.isAnimating) return;\n    this.handleTransition(el.href, true)\n  },\n\n  handlePopState: function(ev) {\n    if (this.isAnimating) {\n      ev.preventDefault();\n      return;\n    }\n    var direction = ev.state ? ev.state.direction : 1;\n    this.handleTransition(document.location.href, false);\n  },\n\n  handleTransition: function (url, doPushState) {\n    var self = this;\n    var urlSplit = url.split('/');\n    var slug ='/' + this.urlRoot + (urlSplit[urlSplit.indexOf(this.urlRoot) + 1] ?  '/' + urlSplit.slice(urlSplit.indexOf(this.urlRoot) + 1).join('/') : '');\n\n    this.each(function(el) {\n      el.parentElement.classList.remove('active');\n      if (el.href === url) {\n        el.parentElement.classList.add('active');\n      }\n    });\n    if (self.hooks.willTransition) {\n      self.hooks.willTransition(slug);\n    }\n    this.fetchContent(url , function(content){\n      if (doPushState) self.updateHistory(slug);\n      self.transition(content, slug);\n    });\n  },\n\n  transition: function(content, slug) {\n    this.isAnimating = true;\n\n    var self = this;\n    var parser = new DOMParser();\n    var nextDoc = parser.parseFromString(content, \"text/html\");\n\n    var nextBody = nextDoc.querySelector('.pjxTransitionBody');\n    var currBody = document.querySelector('.pjxTransitionBody' );\n    var currBodyWrapper = currBody.parentElement;\n\n    TweenLite.to(currBody, 0.3, {\n      y: 10,\n      opacity: 0,\n      onComplete: function () {\n        currBodyWrapper.removeChild(currBody);\n        currBodyWrapper.appendChild(nextBody);\n        if (self.hooks.inTransition) {\n          self.hooks.inTransition(slug);\n        }\n        TweenLite.set(nextBody, {\n          opacity: 0,\n          y: -10\n        });\n        TweenLite.to(nextBody, 0.6, {\n          opacity: 1,\n          y: 0,\n          ease: Expo.easeOut,\n          // delay: 0.125,\n          onComplete: function () {\n            self.isAnimating = false;\n            if (self.hooks.didTransition) {\n              self.hooks.didTransition(slug);\n            }\n          }\n        });\n      }\n    });\n  },\n\n  updateHistory: function(slug) {\n    history.pushState({}, '', slug);\n  },\n\n  fetchContent: function(url, callback) {\n    var xmlhttp = new XMLHttpRequest();\n\n    xmlhttp.onreadystatechange = function() {\n      if (xmlhttp.readyState == XMLHttpRequest.DONE) {   // XMLHttpRequest.DONE == 4\n        if (xmlhttp.status == 200) {\n          callback(xmlhttp.responseText);\n        }\n        else if (xmlhttp.status == 400) {\n          alert('There was an error 400');\n        }\n      }\n    };\n\n    xmlhttp.open(\"GET\", url, true);\n    xmlhttp.send();\n  }\n}\n\n})();\n\n//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5zbGltLm1pbi5qcyIsImJvb3RzdHJhcC5taW4uanMiLCJ0eXBlZC5taW4uanMiLCJhbmFseXRpY3MuanMiLCJoaWdobGlnaHQuanMiLCJ1dGlscy5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0NKQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpakpDTkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENDWEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0MvR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0N2MkNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImlvbmljLXNpdGUuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiEgalF1ZXJ5IHYzLjEuMSAtYWpheCwtYWpheC9qc29ucCwtYWpheC9sb2FkLC1hamF4L3BhcnNlWE1MLC1hamF4L3NjcmlwdCwtYWpheC92YXIvbG9jYXRpb24sLWFqYXgvdmFyL25vbmNlLC1hamF4L3Zhci9ycXVlcnksLWFqYXgveGhyLC1tYW5pcHVsYXRpb24vX2V2YWxVcmwsLWV2ZW50L2FqYXgsLWVmZmVjdHMsLWVmZmVjdHMvYW5pbWF0ZWRTZWxlY3RvciwtZWZmZWN0cy9Ud2VlbiwtZGVwcmVjYXRlZCB8IChjKSBqUXVlcnkgRm91bmRhdGlvbiB8IGpxdWVyeS5vcmcvbGljZW5zZSAqL1xuIWZ1bmN0aW9uKGEsYil7XCJ1c2Ugc3RyaWN0XCI7XCJvYmplY3RcIj09dHlwZW9mIG1vZHVsZSYmXCJvYmplY3RcIj09dHlwZW9mIG1vZHVsZS5leHBvcnRzP21vZHVsZS5leHBvcnRzPWEuZG9jdW1lbnQ/YihhLCEwKTpmdW5jdGlvbihhKXtpZighYS5kb2N1bWVudCl0aHJvdyBuZXcgRXJyb3IoXCJqUXVlcnkgcmVxdWlyZXMgYSB3aW5kb3cgd2l0aCBhIGRvY3VtZW50XCIpO3JldHVybiBiKGEpfTpiKGEpfShcInVuZGVmaW5lZFwiIT10eXBlb2Ygd2luZG93P3dpbmRvdzp0aGlzLGZ1bmN0aW9uKGEsYil7XCJ1c2Ugc3RyaWN0XCI7dmFyIGM9W10sZD1hLmRvY3VtZW50LGU9T2JqZWN0LmdldFByb3RvdHlwZU9mLGY9Yy5zbGljZSxnPWMuY29uY2F0LGg9Yy5wdXNoLGk9Yy5pbmRleE9mLGo9e30saz1qLnRvU3RyaW5nLGw9ai5oYXNPd25Qcm9wZXJ0eSxtPWwudG9TdHJpbmcsbj1tLmNhbGwoT2JqZWN0KSxvPXt9O2Z1bmN0aW9uIHAoYSxiKXtiPWJ8fGQ7dmFyIGM9Yi5jcmVhdGVFbGVtZW50KFwic2NyaXB0XCIpO2MudGV4dD1hLGIuaGVhZC5hcHBlbmRDaGlsZChjKS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGMpfXZhciBxPVwiMy4xLjEgLWFqYXgsLWFqYXgvanNvbnAsLWFqYXgvbG9hZCwtYWpheC9wYXJzZVhNTCwtYWpheC9zY3JpcHQsLWFqYXgvdmFyL2xvY2F0aW9uLC1hamF4L3Zhci9ub25jZSwtYWpheC92YXIvcnF1ZXJ5LC1hamF4L3hociwtbWFuaXB1bGF0aW9uL19ldmFsVXJsLC1ldmVudC9hamF4LC1lZmZlY3RzLC1lZmZlY3RzL2FuaW1hdGVkU2VsZWN0b3IsLWVmZmVjdHMvVHdlZW4sLWRlcHJlY2F0ZWRcIixyPWZ1bmN0aW9uKGEsYil7cmV0dXJuIG5ldyByLmZuLmluaXQoYSxiKX0scz0vXltcXHNcXHVGRUZGXFx4QTBdK3xbXFxzXFx1RkVGRlxceEEwXSskL2csdD0vXi1tcy0vLHU9Ly0oW2Etel0pL2csdj1mdW5jdGlvbihhLGIpe3JldHVybiBiLnRvVXBwZXJDYXNlKCl9O3IuZm49ci5wcm90b3R5cGU9e2pxdWVyeTpxLGNvbnN0cnVjdG9yOnIsbGVuZ3RoOjAsdG9BcnJheTpmdW5jdGlvbigpe3JldHVybiBmLmNhbGwodGhpcyl9LGdldDpmdW5jdGlvbihhKXtyZXR1cm4gbnVsbD09YT9mLmNhbGwodGhpcyk6YTwwP3RoaXNbYSt0aGlzLmxlbmd0aF06dGhpc1thXX0scHVzaFN0YWNrOmZ1bmN0aW9uKGEpe3ZhciBiPXIubWVyZ2UodGhpcy5jb25zdHJ1Y3RvcigpLGEpO3JldHVybiBiLnByZXZPYmplY3Q9dGhpcyxifSxlYWNoOmZ1bmN0aW9uKGEpe3JldHVybiByLmVhY2godGhpcyxhKX0sbWFwOmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLnB1c2hTdGFjayhyLm1hcCh0aGlzLGZ1bmN0aW9uKGIsYyl7cmV0dXJuIGEuY2FsbChiLGMsYil9KSl9LHNsaWNlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucHVzaFN0YWNrKGYuYXBwbHkodGhpcyxhcmd1bWVudHMpKX0sZmlyc3Q6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lcSgwKX0sbGFzdDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmVxKC0xKX0sZXE6ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5sZW5ndGgsYz0rYSsoYTwwP2I6MCk7cmV0dXJuIHRoaXMucHVzaFN0YWNrKGM+PTAmJmM8Yj9bdGhpc1tjXV06W10pfSxlbmQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wcmV2T2JqZWN0fHx0aGlzLmNvbnN0cnVjdG9yKCl9LHB1c2g6aCxzb3J0OmMuc29ydCxzcGxpY2U6Yy5zcGxpY2V9LHIuZXh0ZW5kPXIuZm4uZXh0ZW5kPWZ1bmN0aW9uKCl7dmFyIGEsYixjLGQsZSxmLGc9YXJndW1lbnRzWzBdfHx7fSxoPTEsaT1hcmd1bWVudHMubGVuZ3RoLGo9ITE7Zm9yKFwiYm9vbGVhblwiPT10eXBlb2YgZyYmKGo9ZyxnPWFyZ3VtZW50c1toXXx8e30saCsrKSxcIm9iamVjdFwiPT10eXBlb2YgZ3x8ci5pc0Z1bmN0aW9uKGcpfHwoZz17fSksaD09PWkmJihnPXRoaXMsaC0tKTtoPGk7aCsrKWlmKG51bGwhPShhPWFyZ3VtZW50c1toXSkpZm9yKGIgaW4gYSljPWdbYl0sZD1hW2JdLGchPT1kJiYoaiYmZCYmKHIuaXNQbGFpbk9iamVjdChkKXx8KGU9ci5pc0FycmF5KGQpKSk/KGU/KGU9ITEsZj1jJiZyLmlzQXJyYXkoYyk/YzpbXSk6Zj1jJiZyLmlzUGxhaW5PYmplY3QoYyk/Yzp7fSxnW2JdPXIuZXh0ZW5kKGosZixkKSk6dm9pZCAwIT09ZCYmKGdbYl09ZCkpO3JldHVybiBnfSxyLmV4dGVuZCh7ZXhwYW5kbzpcImpRdWVyeVwiKyhxK01hdGgucmFuZG9tKCkpLnJlcGxhY2UoL1xcRC9nLFwiXCIpLGlzUmVhZHk6ITAsZXJyb3I6ZnVuY3Rpb24oYSl7dGhyb3cgbmV3IEVycm9yKGEpfSxub29wOmZ1bmN0aW9uKCl7fSxpc0Z1bmN0aW9uOmZ1bmN0aW9uKGEpe3JldHVyblwiZnVuY3Rpb25cIj09PXIudHlwZShhKX0saXNBcnJheTpBcnJheS5pc0FycmF5LGlzV2luZG93OmZ1bmN0aW9uKGEpe3JldHVybiBudWxsIT1hJiZhPT09YS53aW5kb3d9LGlzTnVtZXJpYzpmdW5jdGlvbihhKXt2YXIgYj1yLnR5cGUoYSk7cmV0dXJuKFwibnVtYmVyXCI9PT1ifHxcInN0cmluZ1wiPT09YikmJiFpc05hTihhLXBhcnNlRmxvYXQoYSkpfSxpc1BsYWluT2JqZWN0OmZ1bmN0aW9uKGEpe3ZhciBiLGM7cmV0dXJuISghYXx8XCJbb2JqZWN0IE9iamVjdF1cIiE9PWsuY2FsbChhKSkmJighKGI9ZShhKSl8fChjPWwuY2FsbChiLFwiY29uc3RydWN0b3JcIikmJmIuY29uc3RydWN0b3IsXCJmdW5jdGlvblwiPT10eXBlb2YgYyYmbS5jYWxsKGMpPT09bikpfSxpc0VtcHR5T2JqZWN0OmZ1bmN0aW9uKGEpe3ZhciBiO2ZvcihiIGluIGEpcmV0dXJuITE7cmV0dXJuITB9LHR5cGU6ZnVuY3Rpb24oYSl7cmV0dXJuIG51bGw9PWE/YStcIlwiOlwib2JqZWN0XCI9PXR5cGVvZiBhfHxcImZ1bmN0aW9uXCI9PXR5cGVvZiBhP2pbay5jYWxsKGEpXXx8XCJvYmplY3RcIjp0eXBlb2YgYX0sZ2xvYmFsRXZhbDpmdW5jdGlvbihhKXtwKGEpfSxjYW1lbENhc2U6ZnVuY3Rpb24oYSl7cmV0dXJuIGEucmVwbGFjZSh0LFwibXMtXCIpLnJlcGxhY2UodSx2KX0sbm9kZU5hbWU6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gYS5ub2RlTmFtZSYmYS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpPT09Yi50b0xvd2VyQ2FzZSgpfSxlYWNoOmZ1bmN0aW9uKGEsYil7dmFyIGMsZD0wO2lmKHcoYSkpe2ZvcihjPWEubGVuZ3RoO2Q8YztkKyspaWYoYi5jYWxsKGFbZF0sZCxhW2RdKT09PSExKWJyZWFrfWVsc2UgZm9yKGQgaW4gYSlpZihiLmNhbGwoYVtkXSxkLGFbZF0pPT09ITEpYnJlYWs7cmV0dXJuIGF9LHRyaW06ZnVuY3Rpb24oYSl7cmV0dXJuIG51bGw9PWE/XCJcIjooYStcIlwiKS5yZXBsYWNlKHMsXCJcIil9LG1ha2VBcnJheTpmdW5jdGlvbihhLGIpe3ZhciBjPWJ8fFtdO3JldHVybiBudWxsIT1hJiYodyhPYmplY3QoYSkpP3IubWVyZ2UoYyxcInN0cmluZ1wiPT10eXBlb2YgYT9bYV06YSk6aC5jYWxsKGMsYSkpLGN9LGluQXJyYXk6ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBudWxsPT1iPy0xOmkuY2FsbChiLGEsYyl9LG1lcmdlOmZ1bmN0aW9uKGEsYil7Zm9yKHZhciBjPStiLmxlbmd0aCxkPTAsZT1hLmxlbmd0aDtkPGM7ZCsrKWFbZSsrXT1iW2RdO3JldHVybiBhLmxlbmd0aD1lLGF9LGdyZXA6ZnVuY3Rpb24oYSxiLGMpe2Zvcih2YXIgZCxlPVtdLGY9MCxnPWEubGVuZ3RoLGg9IWM7ZjxnO2YrKylkPSFiKGFbZl0sZiksZCE9PWgmJmUucHVzaChhW2ZdKTtyZXR1cm4gZX0sbWFwOmZ1bmN0aW9uKGEsYixjKXt2YXIgZCxlLGY9MCxoPVtdO2lmKHcoYSkpZm9yKGQ9YS5sZW5ndGg7ZjxkO2YrKyllPWIoYVtmXSxmLGMpLG51bGwhPWUmJmgucHVzaChlKTtlbHNlIGZvcihmIGluIGEpZT1iKGFbZl0sZixjKSxudWxsIT1lJiZoLnB1c2goZSk7cmV0dXJuIGcuYXBwbHkoW10saCl9LGd1aWQ6MSxwcm94eTpmdW5jdGlvbihhLGIpe3ZhciBjLGQsZTtpZihcInN0cmluZ1wiPT10eXBlb2YgYiYmKGM9YVtiXSxiPWEsYT1jKSxyLmlzRnVuY3Rpb24oYSkpcmV0dXJuIGQ9Zi5jYWxsKGFyZ3VtZW50cywyKSxlPWZ1bmN0aW9uKCl7cmV0dXJuIGEuYXBwbHkoYnx8dGhpcyxkLmNvbmNhdChmLmNhbGwoYXJndW1lbnRzKSkpfSxlLmd1aWQ9YS5ndWlkPWEuZ3VpZHx8ci5ndWlkKyssZX0sbm93OkRhdGUubm93LHN1cHBvcnQ6b30pLFwiZnVuY3Rpb25cIj09dHlwZW9mIFN5bWJvbCYmKHIuZm5bU3ltYm9sLml0ZXJhdG9yXT1jW1N5bWJvbC5pdGVyYXRvcl0pLHIuZWFjaChcIkJvb2xlYW4gTnVtYmVyIFN0cmluZyBGdW5jdGlvbiBBcnJheSBEYXRlIFJlZ0V4cCBPYmplY3QgRXJyb3IgU3ltYm9sXCIuc3BsaXQoXCIgXCIpLGZ1bmN0aW9uKGEsYil7altcIltvYmplY3QgXCIrYitcIl1cIl09Yi50b0xvd2VyQ2FzZSgpfSk7ZnVuY3Rpb24gdyhhKXt2YXIgYj0hIWEmJlwibGVuZ3RoXCJpbiBhJiZhLmxlbmd0aCxjPXIudHlwZShhKTtyZXR1cm5cImZ1bmN0aW9uXCIhPT1jJiYhci5pc1dpbmRvdyhhKSYmKFwiYXJyYXlcIj09PWN8fDA9PT1ifHxcIm51bWJlclwiPT10eXBlb2YgYiYmYj4wJiZiLTEgaW4gYSl9dmFyIHg9ZnVuY3Rpb24oYSl7dmFyIGIsYyxkLGUsZixnLGgsaSxqLGssbCxtLG4sbyxwLHEscixzLHQsdT1cInNpenpsZVwiKzEqbmV3IERhdGUsdj1hLmRvY3VtZW50LHc9MCx4PTAseT1oYSgpLHo9aGEoKSxBPWhhKCksQj1mdW5jdGlvbihhLGIpe3JldHVybiBhPT09YiYmKGw9ITApLDB9LEM9e30uaGFzT3duUHJvcGVydHksRD1bXSxFPUQucG9wLEY9RC5wdXNoLEc9RC5wdXNoLEg9RC5zbGljZSxJPWZ1bmN0aW9uKGEsYil7Zm9yKHZhciBjPTAsZD1hLmxlbmd0aDtjPGQ7YysrKWlmKGFbY109PT1iKXJldHVybiBjO3JldHVybi0xfSxKPVwiY2hlY2tlZHxzZWxlY3RlZHxhc3luY3xhdXRvZm9jdXN8YXV0b3BsYXl8Y29udHJvbHN8ZGVmZXJ8ZGlzYWJsZWR8aGlkZGVufGlzbWFwfGxvb3B8bXVsdGlwbGV8b3BlbnxyZWFkb25seXxyZXF1aXJlZHxzY29wZWRcIixLPVwiW1xcXFx4MjBcXFxcdFxcXFxyXFxcXG5cXFxcZl1cIixMPVwiKD86XFxcXFxcXFwufFtcXFxcdy1dfFteXFwwLVxcXFx4YTBdKStcIixNPVwiXFxcXFtcIitLK1wiKihcIitMK1wiKSg/OlwiK0srXCIqKFsqXiR8IX5dPz0pXCIrSytcIiooPzonKCg/OlxcXFxcXFxcLnxbXlxcXFxcXFxcJ10pKiknfFxcXCIoKD86XFxcXFxcXFwufFteXFxcXFxcXFxcXFwiXSkqKVxcXCJ8KFwiK0wrXCIpKXwpXCIrSytcIipcXFxcXVwiLE49XCI6KFwiK0wrXCIpKD86XFxcXCgoKCcoKD86XFxcXFxcXFwufFteXFxcXFxcXFwnXSkqKSd8XFxcIigoPzpcXFxcXFxcXC58W15cXFxcXFxcXFxcXCJdKSopXFxcIil8KCg/OlxcXFxcXFxcLnxbXlxcXFxcXFxcKClbXFxcXF1dfFwiK00rXCIpKil8LiopXFxcXCl8KVwiLE89bmV3IFJlZ0V4cChLK1wiK1wiLFwiZ1wiKSxQPW5ldyBSZWdFeHAoXCJeXCIrSytcIit8KCg/Ol58W15cXFxcXFxcXF0pKD86XFxcXFxcXFwuKSopXCIrSytcIiskXCIsXCJnXCIpLFE9bmV3IFJlZ0V4cChcIl5cIitLK1wiKixcIitLK1wiKlwiKSxSPW5ldyBSZWdFeHAoXCJeXCIrSytcIiooWz4rfl18XCIrSytcIilcIitLK1wiKlwiKSxTPW5ldyBSZWdFeHAoXCI9XCIrSytcIiooW15cXFxcXSdcXFwiXSo/KVwiK0srXCIqXFxcXF1cIixcImdcIiksVD1uZXcgUmVnRXhwKE4pLFU9bmV3IFJlZ0V4cChcIl5cIitMK1wiJFwiKSxWPXtJRDpuZXcgUmVnRXhwKFwiXiMoXCIrTCtcIilcIiksQ0xBU1M6bmV3IFJlZ0V4cChcIl5cXFxcLihcIitMK1wiKVwiKSxUQUc6bmV3IFJlZ0V4cChcIl4oXCIrTCtcInxbKl0pXCIpLEFUVFI6bmV3IFJlZ0V4cChcIl5cIitNKSxQU0VVRE86bmV3IFJlZ0V4cChcIl5cIitOKSxDSElMRDpuZXcgUmVnRXhwKFwiXjoob25seXxmaXJzdHxsYXN0fG50aHxudGgtbGFzdCktKGNoaWxkfG9mLXR5cGUpKD86XFxcXChcIitLK1wiKihldmVufG9kZHwoKFsrLV18KShcXFxcZCopbnwpXCIrSytcIiooPzooWystXXwpXCIrSytcIiooXFxcXGQrKXwpKVwiK0srXCIqXFxcXCl8KVwiLFwiaVwiKSxib29sOm5ldyBSZWdFeHAoXCJeKD86XCIrSitcIikkXCIsXCJpXCIpLG5lZWRzQ29udGV4dDpuZXcgUmVnRXhwKFwiXlwiK0srXCIqWz4rfl18OihldmVufG9kZHxlcXxndHxsdHxudGh8Zmlyc3R8bGFzdCkoPzpcXFxcKFwiK0srXCIqKCg/Oi1cXFxcZCk/XFxcXGQqKVwiK0srXCIqXFxcXCl8KSg/PVteLV18JClcIixcImlcIil9LFc9L14oPzppbnB1dHxzZWxlY3R8dGV4dGFyZWF8YnV0dG9uKSQvaSxYPS9eaFxcZCQvaSxZPS9eW157XStcXHtcXHMqXFxbbmF0aXZlIFxcdy8sWj0vXig/OiMoW1xcdy1dKyl8KFxcdyspfFxcLihbXFx3LV0rKSkkLywkPS9bK35dLyxfPW5ldyBSZWdFeHAoXCJcXFxcXFxcXChbXFxcXGRhLWZdezEsNn1cIitLK1wiP3woXCIrSytcIil8LilcIixcImlnXCIpLGFhPWZ1bmN0aW9uKGEsYixjKXt2YXIgZD1cIjB4XCIrYi02NTUzNjtyZXR1cm4gZCE9PWR8fGM/YjpkPDA/U3RyaW5nLmZyb21DaGFyQ29kZShkKzY1NTM2KTpTdHJpbmcuZnJvbUNoYXJDb2RlKGQ+PjEwfDU1Mjk2LDEwMjMmZHw1NjMyMCl9LGJhPS8oW1xcMC1cXHgxZlxceDdmXXxeLT9cXGQpfF4tJHxbXlxcMC1cXHgxZlxceDdmLVxcdUZGRkZcXHctXS9nLGNhPWZ1bmN0aW9uKGEsYil7cmV0dXJuIGI/XCJcXDBcIj09PWE/XCJcXHVmZmZkXCI6YS5zbGljZSgwLC0xKStcIlxcXFxcIithLmNoYXJDb2RlQXQoYS5sZW5ndGgtMSkudG9TdHJpbmcoMTYpK1wiIFwiOlwiXFxcXFwiK2F9LGRhPWZ1bmN0aW9uKCl7bSgpfSxlYT10YShmdW5jdGlvbihhKXtyZXR1cm4gYS5kaXNhYmxlZD09PSEwJiYoXCJmb3JtXCJpbiBhfHxcImxhYmVsXCJpbiBhKX0se2RpcjpcInBhcmVudE5vZGVcIixuZXh0OlwibGVnZW5kXCJ9KTt0cnl7Ry5hcHBseShEPUguY2FsbCh2LmNoaWxkTm9kZXMpLHYuY2hpbGROb2RlcyksRFt2LmNoaWxkTm9kZXMubGVuZ3RoXS5ub2RlVHlwZX1jYXRjaChmYSl7Rz17YXBwbHk6RC5sZW5ndGg/ZnVuY3Rpb24oYSxiKXtGLmFwcGx5KGEsSC5jYWxsKGIpKX06ZnVuY3Rpb24oYSxiKXt2YXIgYz1hLmxlbmd0aCxkPTA7d2hpbGUoYVtjKytdPWJbZCsrXSk7YS5sZW5ndGg9Yy0xfX19ZnVuY3Rpb24gZ2EoYSxiLGQsZSl7dmFyIGYsaCxqLGssbCxvLHIscz1iJiZiLm93bmVyRG9jdW1lbnQsdz1iP2Iubm9kZVR5cGU6OTtpZihkPWR8fFtdLFwic3RyaW5nXCIhPXR5cGVvZiBhfHwhYXx8MSE9PXcmJjkhPT13JiYxMSE9PXcpcmV0dXJuIGQ7aWYoIWUmJigoYj9iLm93bmVyRG9jdW1lbnR8fGI6dikhPT1uJiZtKGIpLGI9Ynx8bixwKSl7aWYoMTEhPT13JiYobD1aLmV4ZWMoYSkpKWlmKGY9bFsxXSl7aWYoOT09PXcpe2lmKCEoaj1iLmdldEVsZW1lbnRCeUlkKGYpKSlyZXR1cm4gZDtpZihqLmlkPT09ZilyZXR1cm4gZC5wdXNoKGopLGR9ZWxzZSBpZihzJiYoaj1zLmdldEVsZW1lbnRCeUlkKGYpKSYmdChiLGopJiZqLmlkPT09ZilyZXR1cm4gZC5wdXNoKGopLGR9ZWxzZXtpZihsWzJdKXJldHVybiBHLmFwcGx5KGQsYi5nZXRFbGVtZW50c0J5VGFnTmFtZShhKSksZDtpZigoZj1sWzNdKSYmYy5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lJiZiLmdldEVsZW1lbnRzQnlDbGFzc05hbWUpcmV0dXJuIEcuYXBwbHkoZCxiLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoZikpLGR9aWYoYy5xc2EmJiFBW2ErXCIgXCJdJiYoIXF8fCFxLnRlc3QoYSkpKXtpZigxIT09dylzPWIscj1hO2Vsc2UgaWYoXCJvYmplY3RcIiE9PWIubm9kZU5hbWUudG9Mb3dlckNhc2UoKSl7KGs9Yi5nZXRBdHRyaWJ1dGUoXCJpZFwiKSk/az1rLnJlcGxhY2UoYmEsY2EpOmIuc2V0QXR0cmlidXRlKFwiaWRcIixrPXUpLG89ZyhhKSxoPW8ubGVuZ3RoO3doaWxlKGgtLSlvW2hdPVwiI1wiK2srXCIgXCIrc2Eob1toXSk7cj1vLmpvaW4oXCIsXCIpLHM9JC50ZXN0KGEpJiZxYShiLnBhcmVudE5vZGUpfHxifWlmKHIpdHJ5e3JldHVybiBHLmFwcGx5KGQscy5xdWVyeVNlbGVjdG9yQWxsKHIpKSxkfWNhdGNoKHgpe31maW5hbGx5e2s9PT11JiZiLnJlbW92ZUF0dHJpYnV0ZShcImlkXCIpfX19cmV0dXJuIGkoYS5yZXBsYWNlKFAsXCIkMVwiKSxiLGQsZSl9ZnVuY3Rpb24gaGEoKXt2YXIgYT1bXTtmdW5jdGlvbiBiKGMsZSl7cmV0dXJuIGEucHVzaChjK1wiIFwiKT5kLmNhY2hlTGVuZ3RoJiZkZWxldGUgYlthLnNoaWZ0KCldLGJbYytcIiBcIl09ZX1yZXR1cm4gYn1mdW5jdGlvbiBpYShhKXtyZXR1cm4gYVt1XT0hMCxhfWZ1bmN0aW9uIGphKGEpe3ZhciBiPW4uY3JlYXRlRWxlbWVudChcImZpZWxkc2V0XCIpO3RyeXtyZXR1cm4hIWEoYil9Y2F0Y2goYyl7cmV0dXJuITF9ZmluYWxseXtiLnBhcmVudE5vZGUmJmIucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChiKSxiPW51bGx9fWZ1bmN0aW9uIGthKGEsYil7dmFyIGM9YS5zcGxpdChcInxcIiksZT1jLmxlbmd0aDt3aGlsZShlLS0pZC5hdHRySGFuZGxlW2NbZV1dPWJ9ZnVuY3Rpb24gbGEoYSxiKXt2YXIgYz1iJiZhLGQ9YyYmMT09PWEubm9kZVR5cGUmJjE9PT1iLm5vZGVUeXBlJiZhLnNvdXJjZUluZGV4LWIuc291cmNlSW5kZXg7aWYoZClyZXR1cm4gZDtpZihjKXdoaWxlKGM9Yy5uZXh0U2libGluZylpZihjPT09YilyZXR1cm4tMTtyZXR1cm4gYT8xOi0xfWZ1bmN0aW9uIG1hKGEpe3JldHVybiBmdW5jdGlvbihiKXt2YXIgYz1iLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7cmV0dXJuXCJpbnB1dFwiPT09YyYmYi50eXBlPT09YX19ZnVuY3Rpb24gbmEoYSl7cmV0dXJuIGZ1bmN0aW9uKGIpe3ZhciBjPWIubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtyZXR1cm4oXCJpbnB1dFwiPT09Y3x8XCJidXR0b25cIj09PWMpJiZiLnR5cGU9PT1hfX1mdW5jdGlvbiBvYShhKXtyZXR1cm4gZnVuY3Rpb24oYil7cmV0dXJuXCJmb3JtXCJpbiBiP2IucGFyZW50Tm9kZSYmYi5kaXNhYmxlZD09PSExP1wibGFiZWxcImluIGI/XCJsYWJlbFwiaW4gYi5wYXJlbnROb2RlP2IucGFyZW50Tm9kZS5kaXNhYmxlZD09PWE6Yi5kaXNhYmxlZD09PWE6Yi5pc0Rpc2FibGVkPT09YXx8Yi5pc0Rpc2FibGVkIT09IWEmJmVhKGIpPT09YTpiLmRpc2FibGVkPT09YTpcImxhYmVsXCJpbiBiJiZiLmRpc2FibGVkPT09YX19ZnVuY3Rpb24gcGEoYSl7cmV0dXJuIGlhKGZ1bmN0aW9uKGIpe3JldHVybiBiPStiLGlhKGZ1bmN0aW9uKGMsZCl7dmFyIGUsZj1hKFtdLGMubGVuZ3RoLGIpLGc9Zi5sZW5ndGg7d2hpbGUoZy0tKWNbZT1mW2ddXSYmKGNbZV09IShkW2VdPWNbZV0pKX0pfSl9ZnVuY3Rpb24gcWEoYSl7cmV0dXJuIGEmJlwidW5kZWZpbmVkXCIhPXR5cGVvZiBhLmdldEVsZW1lbnRzQnlUYWdOYW1lJiZhfWM9Z2Euc3VwcG9ydD17fSxmPWdhLmlzWE1MPWZ1bmN0aW9uKGEpe3ZhciBiPWEmJihhLm93bmVyRG9jdW1lbnR8fGEpLmRvY3VtZW50RWxlbWVudDtyZXR1cm4hIWImJlwiSFRNTFwiIT09Yi5ub2RlTmFtZX0sbT1nYS5zZXREb2N1bWVudD1mdW5jdGlvbihhKXt2YXIgYixlLGc9YT9hLm93bmVyRG9jdW1lbnR8fGE6djtyZXR1cm4gZyE9PW4mJjk9PT1nLm5vZGVUeXBlJiZnLmRvY3VtZW50RWxlbWVudD8obj1nLG89bi5kb2N1bWVudEVsZW1lbnQscD0hZihuKSx2IT09biYmKGU9bi5kZWZhdWx0VmlldykmJmUudG9wIT09ZSYmKGUuYWRkRXZlbnRMaXN0ZW5lcj9lLmFkZEV2ZW50TGlzdGVuZXIoXCJ1bmxvYWRcIixkYSwhMSk6ZS5hdHRhY2hFdmVudCYmZS5hdHRhY2hFdmVudChcIm9udW5sb2FkXCIsZGEpKSxjLmF0dHJpYnV0ZXM9amEoZnVuY3Rpb24oYSl7cmV0dXJuIGEuY2xhc3NOYW1lPVwiaVwiLCFhLmdldEF0dHJpYnV0ZShcImNsYXNzTmFtZVwiKX0pLGMuZ2V0RWxlbWVudHNCeVRhZ05hbWU9amEoZnVuY3Rpb24oYSl7cmV0dXJuIGEuYXBwZW5kQ2hpbGQobi5jcmVhdGVDb21tZW50KFwiXCIpKSwhYS5nZXRFbGVtZW50c0J5VGFnTmFtZShcIipcIikubGVuZ3RofSksYy5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lPVkudGVzdChuLmdldEVsZW1lbnRzQnlDbGFzc05hbWUpLGMuZ2V0QnlJZD1qYShmdW5jdGlvbihhKXtyZXR1cm4gby5hcHBlbmRDaGlsZChhKS5pZD11LCFuLmdldEVsZW1lbnRzQnlOYW1lfHwhbi5nZXRFbGVtZW50c0J5TmFtZSh1KS5sZW5ndGh9KSxjLmdldEJ5SWQ/KGQuZmlsdGVyLklEPWZ1bmN0aW9uKGEpe3ZhciBiPWEucmVwbGFjZShfLGFhKTtyZXR1cm4gZnVuY3Rpb24oYSl7cmV0dXJuIGEuZ2V0QXR0cmlidXRlKFwiaWRcIik9PT1ifX0sZC5maW5kLklEPWZ1bmN0aW9uKGEsYil7aWYoXCJ1bmRlZmluZWRcIiE9dHlwZW9mIGIuZ2V0RWxlbWVudEJ5SWQmJnApe3ZhciBjPWIuZ2V0RWxlbWVudEJ5SWQoYSk7cmV0dXJuIGM/W2NdOltdfX0pOihkLmZpbHRlci5JRD1mdW5jdGlvbihhKXt2YXIgYj1hLnJlcGxhY2UoXyxhYSk7cmV0dXJuIGZ1bmN0aW9uKGEpe3ZhciBjPVwidW5kZWZpbmVkXCIhPXR5cGVvZiBhLmdldEF0dHJpYnV0ZU5vZGUmJmEuZ2V0QXR0cmlidXRlTm9kZShcImlkXCIpO3JldHVybiBjJiZjLnZhbHVlPT09Yn19LGQuZmluZC5JRD1mdW5jdGlvbihhLGIpe2lmKFwidW5kZWZpbmVkXCIhPXR5cGVvZiBiLmdldEVsZW1lbnRCeUlkJiZwKXt2YXIgYyxkLGUsZj1iLmdldEVsZW1lbnRCeUlkKGEpO2lmKGYpe2lmKGM9Zi5nZXRBdHRyaWJ1dGVOb2RlKFwiaWRcIiksYyYmYy52YWx1ZT09PWEpcmV0dXJuW2ZdO2U9Yi5nZXRFbGVtZW50c0J5TmFtZShhKSxkPTA7d2hpbGUoZj1lW2QrK10paWYoYz1mLmdldEF0dHJpYnV0ZU5vZGUoXCJpZFwiKSxjJiZjLnZhbHVlPT09YSlyZXR1cm5bZl19cmV0dXJuW119fSksZC5maW5kLlRBRz1jLmdldEVsZW1lbnRzQnlUYWdOYW1lP2Z1bmN0aW9uKGEsYil7cmV0dXJuXCJ1bmRlZmluZWRcIiE9dHlwZW9mIGIuZ2V0RWxlbWVudHNCeVRhZ05hbWU/Yi5nZXRFbGVtZW50c0J5VGFnTmFtZShhKTpjLnFzYT9iLnF1ZXJ5U2VsZWN0b3JBbGwoYSk6dm9pZCAwfTpmdW5jdGlvbihhLGIpe3ZhciBjLGQ9W10sZT0wLGY9Yi5nZXRFbGVtZW50c0J5VGFnTmFtZShhKTtpZihcIipcIj09PWEpe3doaWxlKGM9ZltlKytdKTE9PT1jLm5vZGVUeXBlJiZkLnB1c2goYyk7cmV0dXJuIGR9cmV0dXJuIGZ9LGQuZmluZC5DTEFTUz1jLmdldEVsZW1lbnRzQnlDbGFzc05hbWUmJmZ1bmN0aW9uKGEsYil7aWYoXCJ1bmRlZmluZWRcIiE9dHlwZW9mIGIuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSYmcClyZXR1cm4gYi5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKGEpfSxyPVtdLHE9W10sKGMucXNhPVkudGVzdChuLnF1ZXJ5U2VsZWN0b3JBbGwpKSYmKGphKGZ1bmN0aW9uKGEpe28uYXBwZW5kQ2hpbGQoYSkuaW5uZXJIVE1MPVwiPGEgaWQ9J1wiK3UrXCInPjwvYT48c2VsZWN0IGlkPSdcIit1K1wiLVxcclxcXFwnIG1zYWxsb3djYXB0dXJlPScnPjxvcHRpb24gc2VsZWN0ZWQ9Jyc+PC9vcHRpb24+PC9zZWxlY3Q+XCIsYS5xdWVyeVNlbGVjdG9yQWxsKFwiW21zYWxsb3djYXB0dXJlXj0nJ11cIikubGVuZ3RoJiZxLnB1c2goXCJbKl4kXT1cIitLK1wiKig/OicnfFxcXCJcXFwiKVwiKSxhLnF1ZXJ5U2VsZWN0b3JBbGwoXCJbc2VsZWN0ZWRdXCIpLmxlbmd0aHx8cS5wdXNoKFwiXFxcXFtcIitLK1wiKig/OnZhbHVlfFwiK0orXCIpXCIpLGEucXVlcnlTZWxlY3RvckFsbChcIltpZH49XCIrdStcIi1dXCIpLmxlbmd0aHx8cS5wdXNoKFwifj1cIiksYS5xdWVyeVNlbGVjdG9yQWxsKFwiOmNoZWNrZWRcIikubGVuZ3RofHxxLnB1c2goXCI6Y2hlY2tlZFwiKSxhLnF1ZXJ5U2VsZWN0b3JBbGwoXCJhI1wiK3UrXCIrKlwiKS5sZW5ndGh8fHEucHVzaChcIi4jLitbK35dXCIpfSksamEoZnVuY3Rpb24oYSl7YS5pbm5lckhUTUw9XCI8YSBocmVmPScnIGRpc2FibGVkPSdkaXNhYmxlZCc+PC9hPjxzZWxlY3QgZGlzYWJsZWQ9J2Rpc2FibGVkJz48b3B0aW9uLz48L3NlbGVjdD5cIjt2YXIgYj1uLmNyZWF0ZUVsZW1lbnQoXCJpbnB1dFwiKTtiLnNldEF0dHJpYnV0ZShcInR5cGVcIixcImhpZGRlblwiKSxhLmFwcGVuZENoaWxkKGIpLnNldEF0dHJpYnV0ZShcIm5hbWVcIixcIkRcIiksYS5xdWVyeVNlbGVjdG9yQWxsKFwiW25hbWU9ZF1cIikubGVuZ3RoJiZxLnB1c2goXCJuYW1lXCIrSytcIipbKl4kfCF+XT89XCIpLDIhPT1hLnF1ZXJ5U2VsZWN0b3JBbGwoXCI6ZW5hYmxlZFwiKS5sZW5ndGgmJnEucHVzaChcIjplbmFibGVkXCIsXCI6ZGlzYWJsZWRcIiksby5hcHBlbmRDaGlsZChhKS5kaXNhYmxlZD0hMCwyIT09YS5xdWVyeVNlbGVjdG9yQWxsKFwiOmRpc2FibGVkXCIpLmxlbmd0aCYmcS5wdXNoKFwiOmVuYWJsZWRcIixcIjpkaXNhYmxlZFwiKSxhLnF1ZXJ5U2VsZWN0b3JBbGwoXCIqLDp4XCIpLHEucHVzaChcIiwuKjpcIil9KSksKGMubWF0Y2hlc1NlbGVjdG9yPVkudGVzdChzPW8ubWF0Y2hlc3x8by53ZWJraXRNYXRjaGVzU2VsZWN0b3J8fG8ubW96TWF0Y2hlc1NlbGVjdG9yfHxvLm9NYXRjaGVzU2VsZWN0b3J8fG8ubXNNYXRjaGVzU2VsZWN0b3IpKSYmamEoZnVuY3Rpb24oYSl7Yy5kaXNjb25uZWN0ZWRNYXRjaD1zLmNhbGwoYSxcIipcIikscy5jYWxsKGEsXCJbcyE9JyddOnhcIiksci5wdXNoKFwiIT1cIixOKX0pLHE9cS5sZW5ndGgmJm5ldyBSZWdFeHAocS5qb2luKFwifFwiKSkscj1yLmxlbmd0aCYmbmV3IFJlZ0V4cChyLmpvaW4oXCJ8XCIpKSxiPVkudGVzdChvLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKSx0PWJ8fFkudGVzdChvLmNvbnRhaW5zKT9mdW5jdGlvbihhLGIpe3ZhciBjPTk9PT1hLm5vZGVUeXBlP2EuZG9jdW1lbnRFbGVtZW50OmEsZD1iJiZiLnBhcmVudE5vZGU7cmV0dXJuIGE9PT1kfHwhKCFkfHwxIT09ZC5ub2RlVHlwZXx8IShjLmNvbnRhaW5zP2MuY29udGFpbnMoZCk6YS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbiYmMTYmYS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbihkKSkpfTpmdW5jdGlvbihhLGIpe2lmKGIpd2hpbGUoYj1iLnBhcmVudE5vZGUpaWYoYj09PWEpcmV0dXJuITA7cmV0dXJuITF9LEI9Yj9mdW5jdGlvbihhLGIpe2lmKGE9PT1iKXJldHVybiBsPSEwLDA7dmFyIGQ9IWEuY29tcGFyZURvY3VtZW50UG9zaXRpb24tIWIuY29tcGFyZURvY3VtZW50UG9zaXRpb247cmV0dXJuIGQ/ZDooZD0oYS5vd25lckRvY3VtZW50fHxhKT09PShiLm93bmVyRG9jdW1lbnR8fGIpP2EuY29tcGFyZURvY3VtZW50UG9zaXRpb24oYik6MSwxJmR8fCFjLnNvcnREZXRhY2hlZCYmYi5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbihhKT09PWQ/YT09PW58fGEub3duZXJEb2N1bWVudD09PXYmJnQodixhKT8tMTpiPT09bnx8Yi5vd25lckRvY3VtZW50PT09diYmdCh2LGIpPzE6az9JKGssYSktSShrLGIpOjA6NCZkPy0xOjEpfTpmdW5jdGlvbihhLGIpe2lmKGE9PT1iKXJldHVybiBsPSEwLDA7dmFyIGMsZD0wLGU9YS5wYXJlbnROb2RlLGY9Yi5wYXJlbnROb2RlLGc9W2FdLGg9W2JdO2lmKCFlfHwhZilyZXR1cm4gYT09PW4/LTE6Yj09PW4/MTplPy0xOmY/MTprP0koayxhKS1JKGssYik6MDtpZihlPT09ZilyZXR1cm4gbGEoYSxiKTtjPWE7d2hpbGUoYz1jLnBhcmVudE5vZGUpZy51bnNoaWZ0KGMpO2M9Yjt3aGlsZShjPWMucGFyZW50Tm9kZSloLnVuc2hpZnQoYyk7d2hpbGUoZ1tkXT09PWhbZF0pZCsrO3JldHVybiBkP2xhKGdbZF0saFtkXSk6Z1tkXT09PXY/LTE6aFtkXT09PXY/MTowfSxuKTpufSxnYS5tYXRjaGVzPWZ1bmN0aW9uKGEsYil7cmV0dXJuIGdhKGEsbnVsbCxudWxsLGIpfSxnYS5tYXRjaGVzU2VsZWN0b3I9ZnVuY3Rpb24oYSxiKXtpZigoYS5vd25lckRvY3VtZW50fHxhKSE9PW4mJm0oYSksYj1iLnJlcGxhY2UoUyxcIj0nJDEnXVwiKSxjLm1hdGNoZXNTZWxlY3RvciYmcCYmIUFbYitcIiBcIl0mJighcnx8IXIudGVzdChiKSkmJighcXx8IXEudGVzdChiKSkpdHJ5e3ZhciBkPXMuY2FsbChhLGIpO2lmKGR8fGMuZGlzY29ubmVjdGVkTWF0Y2h8fGEuZG9jdW1lbnQmJjExIT09YS5kb2N1bWVudC5ub2RlVHlwZSlyZXR1cm4gZH1jYXRjaChlKXt9cmV0dXJuIGdhKGIsbixudWxsLFthXSkubGVuZ3RoPjB9LGdhLmNvbnRhaW5zPWZ1bmN0aW9uKGEsYil7cmV0dXJuKGEub3duZXJEb2N1bWVudHx8YSkhPT1uJiZtKGEpLHQoYSxiKX0sZ2EuYXR0cj1mdW5jdGlvbihhLGIpeyhhLm93bmVyRG9jdW1lbnR8fGEpIT09biYmbShhKTt2YXIgZT1kLmF0dHJIYW5kbGVbYi50b0xvd2VyQ2FzZSgpXSxmPWUmJkMuY2FsbChkLmF0dHJIYW5kbGUsYi50b0xvd2VyQ2FzZSgpKT9lKGEsYiwhcCk6dm9pZCAwO3JldHVybiB2b2lkIDAhPT1mP2Y6Yy5hdHRyaWJ1dGVzfHwhcD9hLmdldEF0dHJpYnV0ZShiKTooZj1hLmdldEF0dHJpYnV0ZU5vZGUoYikpJiZmLnNwZWNpZmllZD9mLnZhbHVlOm51bGx9LGdhLmVzY2FwZT1mdW5jdGlvbihhKXtyZXR1cm4oYStcIlwiKS5yZXBsYWNlKGJhLGNhKX0sZ2EuZXJyb3I9ZnVuY3Rpb24oYSl7dGhyb3cgbmV3IEVycm9yKFwiU3ludGF4IGVycm9yLCB1bnJlY29nbml6ZWQgZXhwcmVzc2lvbjogXCIrYSl9LGdhLnVuaXF1ZVNvcnQ9ZnVuY3Rpb24oYSl7dmFyIGIsZD1bXSxlPTAsZj0wO2lmKGw9IWMuZGV0ZWN0RHVwbGljYXRlcyxrPSFjLnNvcnRTdGFibGUmJmEuc2xpY2UoMCksYS5zb3J0KEIpLGwpe3doaWxlKGI9YVtmKytdKWI9PT1hW2ZdJiYoZT1kLnB1c2goZikpO3doaWxlKGUtLSlhLnNwbGljZShkW2VdLDEpfXJldHVybiBrPW51bGwsYX0sZT1nYS5nZXRUZXh0PWZ1bmN0aW9uKGEpe3ZhciBiLGM9XCJcIixkPTAsZj1hLm5vZGVUeXBlO2lmKGYpe2lmKDE9PT1mfHw5PT09Znx8MTE9PT1mKXtpZihcInN0cmluZ1wiPT10eXBlb2YgYS50ZXh0Q29udGVudClyZXR1cm4gYS50ZXh0Q29udGVudDtmb3IoYT1hLmZpcnN0Q2hpbGQ7YTthPWEubmV4dFNpYmxpbmcpYys9ZShhKX1lbHNlIGlmKDM9PT1mfHw0PT09ZilyZXR1cm4gYS5ub2RlVmFsdWV9ZWxzZSB3aGlsZShiPWFbZCsrXSljKz1lKGIpO3JldHVybiBjfSxkPWdhLnNlbGVjdG9ycz17Y2FjaGVMZW5ndGg6NTAsY3JlYXRlUHNldWRvOmlhLG1hdGNoOlYsYXR0ckhhbmRsZTp7fSxmaW5kOnt9LHJlbGF0aXZlOntcIj5cIjp7ZGlyOlwicGFyZW50Tm9kZVwiLGZpcnN0OiEwfSxcIiBcIjp7ZGlyOlwicGFyZW50Tm9kZVwifSxcIitcIjp7ZGlyOlwicHJldmlvdXNTaWJsaW5nXCIsZmlyc3Q6ITB9LFwiflwiOntkaXI6XCJwcmV2aW91c1NpYmxpbmdcIn19LHByZUZpbHRlcjp7QVRUUjpmdW5jdGlvbihhKXtyZXR1cm4gYVsxXT1hWzFdLnJlcGxhY2UoXyxhYSksYVszXT0oYVszXXx8YVs0XXx8YVs1XXx8XCJcIikucmVwbGFjZShfLGFhKSxcIn49XCI9PT1hWzJdJiYoYVszXT1cIiBcIithWzNdK1wiIFwiKSxhLnNsaWNlKDAsNCl9LENISUxEOmZ1bmN0aW9uKGEpe3JldHVybiBhWzFdPWFbMV0udG9Mb3dlckNhc2UoKSxcIm50aFwiPT09YVsxXS5zbGljZSgwLDMpPyhhWzNdfHxnYS5lcnJvcihhWzBdKSxhWzRdPSsoYVs0XT9hWzVdKyhhWzZdfHwxKToyKihcImV2ZW5cIj09PWFbM118fFwib2RkXCI9PT1hWzNdKSksYVs1XT0rKGFbN10rYVs4XXx8XCJvZGRcIj09PWFbM10pKTphWzNdJiZnYS5lcnJvcihhWzBdKSxhfSxQU0VVRE86ZnVuY3Rpb24oYSl7dmFyIGIsYz0hYVs2XSYmYVsyXTtyZXR1cm4gVi5DSElMRC50ZXN0KGFbMF0pP251bGw6KGFbM10/YVsyXT1hWzRdfHxhWzVdfHxcIlwiOmMmJlQudGVzdChjKSYmKGI9ZyhjLCEwKSkmJihiPWMuaW5kZXhPZihcIilcIixjLmxlbmd0aC1iKS1jLmxlbmd0aCkmJihhWzBdPWFbMF0uc2xpY2UoMCxiKSxhWzJdPWMuc2xpY2UoMCxiKSksYS5zbGljZSgwLDMpKX19LGZpbHRlcjp7VEFHOmZ1bmN0aW9uKGEpe3ZhciBiPWEucmVwbGFjZShfLGFhKS50b0xvd2VyQ2FzZSgpO3JldHVyblwiKlwiPT09YT9mdW5jdGlvbigpe3JldHVybiEwfTpmdW5jdGlvbihhKXtyZXR1cm4gYS5ub2RlTmFtZSYmYS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpPT09Yn19LENMQVNTOmZ1bmN0aW9uKGEpe3ZhciBiPXlbYStcIiBcIl07cmV0dXJuIGJ8fChiPW5ldyBSZWdFeHAoXCIoXnxcIitLK1wiKVwiK2ErXCIoXCIrSytcInwkKVwiKSkmJnkoYSxmdW5jdGlvbihhKXtyZXR1cm4gYi50ZXN0KFwic3RyaW5nXCI9PXR5cGVvZiBhLmNsYXNzTmFtZSYmYS5jbGFzc05hbWV8fFwidW5kZWZpbmVkXCIhPXR5cGVvZiBhLmdldEF0dHJpYnV0ZSYmYS5nZXRBdHRyaWJ1dGUoXCJjbGFzc1wiKXx8XCJcIil9KX0sQVRUUjpmdW5jdGlvbihhLGIsYyl7cmV0dXJuIGZ1bmN0aW9uKGQpe3ZhciBlPWdhLmF0dHIoZCxhKTtyZXR1cm4gbnVsbD09ZT9cIiE9XCI9PT1iOiFifHwoZSs9XCJcIixcIj1cIj09PWI/ZT09PWM6XCIhPVwiPT09Yj9lIT09YzpcIl49XCI9PT1iP2MmJjA9PT1lLmluZGV4T2YoYyk6XCIqPVwiPT09Yj9jJiZlLmluZGV4T2YoYyk+LTE6XCIkPVwiPT09Yj9jJiZlLnNsaWNlKC1jLmxlbmd0aCk9PT1jOlwifj1cIj09PWI/KFwiIFwiK2UucmVwbGFjZShPLFwiIFwiKStcIiBcIikuaW5kZXhPZihjKT4tMTpcInw9XCI9PT1iJiYoZT09PWN8fGUuc2xpY2UoMCxjLmxlbmd0aCsxKT09PWMrXCItXCIpKX19LENISUxEOmZ1bmN0aW9uKGEsYixjLGQsZSl7dmFyIGY9XCJudGhcIiE9PWEuc2xpY2UoMCwzKSxnPVwibGFzdFwiIT09YS5zbGljZSgtNCksaD1cIm9mLXR5cGVcIj09PWI7cmV0dXJuIDE9PT1kJiYwPT09ZT9mdW5jdGlvbihhKXtyZXR1cm4hIWEucGFyZW50Tm9kZX06ZnVuY3Rpb24oYixjLGkpe3ZhciBqLGssbCxtLG4sbyxwPWYhPT1nP1wibmV4dFNpYmxpbmdcIjpcInByZXZpb3VzU2libGluZ1wiLHE9Yi5wYXJlbnROb2RlLHI9aCYmYi5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpLHM9IWkmJiFoLHQ9ITE7aWYocSl7aWYoZil7d2hpbGUocCl7bT1iO3doaWxlKG09bVtwXSlpZihoP20ubm9kZU5hbWUudG9Mb3dlckNhc2UoKT09PXI6MT09PW0ubm9kZVR5cGUpcmV0dXJuITE7bz1wPVwib25seVwiPT09YSYmIW8mJlwibmV4dFNpYmxpbmdcIn1yZXR1cm4hMH1pZihvPVtnP3EuZmlyc3RDaGlsZDpxLmxhc3RDaGlsZF0sZyYmcyl7bT1xLGw9bVt1XXx8KG1bdV09e30pLGs9bFttLnVuaXF1ZUlEXXx8KGxbbS51bmlxdWVJRF09e30pLGo9a1thXXx8W10sbj1qWzBdPT09dyYmalsxXSx0PW4mJmpbMl0sbT1uJiZxLmNoaWxkTm9kZXNbbl07d2hpbGUobT0rK24mJm0mJm1bcF18fCh0PW49MCl8fG8ucG9wKCkpaWYoMT09PW0ubm9kZVR5cGUmJisrdCYmbT09PWIpe2tbYV09W3csbix0XTticmVha319ZWxzZSBpZihzJiYobT1iLGw9bVt1XXx8KG1bdV09e30pLGs9bFttLnVuaXF1ZUlEXXx8KGxbbS51bmlxdWVJRF09e30pLGo9a1thXXx8W10sbj1qWzBdPT09dyYmalsxXSx0PW4pLHQ9PT0hMSl3aGlsZShtPSsrbiYmbSYmbVtwXXx8KHQ9bj0wKXx8by5wb3AoKSlpZigoaD9tLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk9PT1yOjE9PT1tLm5vZGVUeXBlKSYmKyt0JiYocyYmKGw9bVt1XXx8KG1bdV09e30pLGs9bFttLnVuaXF1ZUlEXXx8KGxbbS51bmlxdWVJRF09e30pLGtbYV09W3csdF0pLG09PT1iKSlicmVhaztyZXR1cm4gdC09ZSx0PT09ZHx8dCVkPT09MCYmdC9kPj0wfX19LFBTRVVETzpmdW5jdGlvbihhLGIpe3ZhciBjLGU9ZC5wc2V1ZG9zW2FdfHxkLnNldEZpbHRlcnNbYS50b0xvd2VyQ2FzZSgpXXx8Z2EuZXJyb3IoXCJ1bnN1cHBvcnRlZCBwc2V1ZG86IFwiK2EpO3JldHVybiBlW3VdP2UoYik6ZS5sZW5ndGg+MT8oYz1bYSxhLFwiXCIsYl0sZC5zZXRGaWx0ZXJzLmhhc093blByb3BlcnR5KGEudG9Mb3dlckNhc2UoKSk/aWEoZnVuY3Rpb24oYSxjKXt2YXIgZCxmPWUoYSxiKSxnPWYubGVuZ3RoO3doaWxlKGctLSlkPUkoYSxmW2ddKSxhW2RdPSEoY1tkXT1mW2ddKX0pOmZ1bmN0aW9uKGEpe3JldHVybiBlKGEsMCxjKX0pOmV9fSxwc2V1ZG9zOntub3Q6aWEoZnVuY3Rpb24oYSl7dmFyIGI9W10sYz1bXSxkPWgoYS5yZXBsYWNlKFAsXCIkMVwiKSk7cmV0dXJuIGRbdV0/aWEoZnVuY3Rpb24oYSxiLGMsZSl7dmFyIGYsZz1kKGEsbnVsbCxlLFtdKSxoPWEubGVuZ3RoO3doaWxlKGgtLSkoZj1nW2hdKSYmKGFbaF09IShiW2hdPWYpKX0pOmZ1bmN0aW9uKGEsZSxmKXtyZXR1cm4gYlswXT1hLGQoYixudWxsLGYsYyksYlswXT1udWxsLCFjLnBvcCgpfX0pLGhhczppYShmdW5jdGlvbihhKXtyZXR1cm4gZnVuY3Rpb24oYil7cmV0dXJuIGdhKGEsYikubGVuZ3RoPjB9fSksY29udGFpbnM6aWEoZnVuY3Rpb24oYSl7cmV0dXJuIGE9YS5yZXBsYWNlKF8sYWEpLGZ1bmN0aW9uKGIpe3JldHVybihiLnRleHRDb250ZW50fHxiLmlubmVyVGV4dHx8ZShiKSkuaW5kZXhPZihhKT4tMX19KSxsYW5nOmlhKGZ1bmN0aW9uKGEpe3JldHVybiBVLnRlc3QoYXx8XCJcIil8fGdhLmVycm9yKFwidW5zdXBwb3J0ZWQgbGFuZzogXCIrYSksYT1hLnJlcGxhY2UoXyxhYSkudG9Mb3dlckNhc2UoKSxmdW5jdGlvbihiKXt2YXIgYztkbyBpZihjPXA/Yi5sYW5nOmIuZ2V0QXR0cmlidXRlKFwieG1sOmxhbmdcIil8fGIuZ2V0QXR0cmlidXRlKFwibGFuZ1wiKSlyZXR1cm4gYz1jLnRvTG93ZXJDYXNlKCksYz09PWF8fDA9PT1jLmluZGV4T2YoYStcIi1cIik7d2hpbGUoKGI9Yi5wYXJlbnROb2RlKSYmMT09PWIubm9kZVR5cGUpO3JldHVybiExfX0pLHRhcmdldDpmdW5jdGlvbihiKXt2YXIgYz1hLmxvY2F0aW9uJiZhLmxvY2F0aW9uLmhhc2g7cmV0dXJuIGMmJmMuc2xpY2UoMSk9PT1iLmlkfSxyb290OmZ1bmN0aW9uKGEpe3JldHVybiBhPT09b30sZm9jdXM6ZnVuY3Rpb24oYSl7cmV0dXJuIGE9PT1uLmFjdGl2ZUVsZW1lbnQmJighbi5oYXNGb2N1c3x8bi5oYXNGb2N1cygpKSYmISEoYS50eXBlfHxhLmhyZWZ8fH5hLnRhYkluZGV4KX0sZW5hYmxlZDpvYSghMSksZGlzYWJsZWQ6b2EoITApLGNoZWNrZWQ6ZnVuY3Rpb24oYSl7dmFyIGI9YS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO3JldHVyblwiaW5wdXRcIj09PWImJiEhYS5jaGVja2VkfHxcIm9wdGlvblwiPT09YiYmISFhLnNlbGVjdGVkfSxzZWxlY3RlZDpmdW5jdGlvbihhKXtyZXR1cm4gYS5wYXJlbnROb2RlJiZhLnBhcmVudE5vZGUuc2VsZWN0ZWRJbmRleCxhLnNlbGVjdGVkPT09ITB9LGVtcHR5OmZ1bmN0aW9uKGEpe2ZvcihhPWEuZmlyc3RDaGlsZDthO2E9YS5uZXh0U2libGluZylpZihhLm5vZGVUeXBlPDYpcmV0dXJuITE7cmV0dXJuITB9LHBhcmVudDpmdW5jdGlvbihhKXtyZXR1cm4hZC5wc2V1ZG9zLmVtcHR5KGEpfSxoZWFkZXI6ZnVuY3Rpb24oYSl7cmV0dXJuIFgudGVzdChhLm5vZGVOYW1lKX0saW5wdXQ6ZnVuY3Rpb24oYSl7cmV0dXJuIFcudGVzdChhLm5vZGVOYW1lKX0sYnV0dG9uOmZ1bmN0aW9uKGEpe3ZhciBiPWEubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtyZXR1cm5cImlucHV0XCI9PT1iJiZcImJ1dHRvblwiPT09YS50eXBlfHxcImJ1dHRvblwiPT09Yn0sdGV4dDpmdW5jdGlvbihhKXt2YXIgYjtyZXR1cm5cImlucHV0XCI9PT1hLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkmJlwidGV4dFwiPT09YS50eXBlJiYobnVsbD09KGI9YS5nZXRBdHRyaWJ1dGUoXCJ0eXBlXCIpKXx8XCJ0ZXh0XCI9PT1iLnRvTG93ZXJDYXNlKCkpfSxmaXJzdDpwYShmdW5jdGlvbigpe3JldHVyblswXX0pLGxhc3Q6cGEoZnVuY3Rpb24oYSxiKXtyZXR1cm5bYi0xXX0pLGVxOnBhKGZ1bmN0aW9uKGEsYixjKXtyZXR1cm5bYzwwP2MrYjpjXX0pLGV2ZW46cGEoZnVuY3Rpb24oYSxiKXtmb3IodmFyIGM9MDtjPGI7Yys9MilhLnB1c2goYyk7cmV0dXJuIGF9KSxvZGQ6cGEoZnVuY3Rpb24oYSxiKXtmb3IodmFyIGM9MTtjPGI7Yys9MilhLnB1c2goYyk7cmV0dXJuIGF9KSxsdDpwYShmdW5jdGlvbihhLGIsYyl7Zm9yKHZhciBkPWM8MD9jK2I6YzstLWQ+PTA7KWEucHVzaChkKTtyZXR1cm4gYX0pLGd0OnBhKGZ1bmN0aW9uKGEsYixjKXtmb3IodmFyIGQ9YzwwP2MrYjpjOysrZDxiOylhLnB1c2goZCk7cmV0dXJuIGF9KX19LGQucHNldWRvcy5udGg9ZC5wc2V1ZG9zLmVxO2ZvcihiIGlue3JhZGlvOiEwLGNoZWNrYm94OiEwLGZpbGU6ITAscGFzc3dvcmQ6ITAsaW1hZ2U6ITB9KWQucHNldWRvc1tiXT1tYShiKTtmb3IoYiBpbntzdWJtaXQ6ITAscmVzZXQ6ITB9KWQucHNldWRvc1tiXT1uYShiKTtmdW5jdGlvbiByYSgpe31yYS5wcm90b3R5cGU9ZC5maWx0ZXJzPWQucHNldWRvcyxkLnNldEZpbHRlcnM9bmV3IHJhLGc9Z2EudG9rZW5pemU9ZnVuY3Rpb24oYSxiKXt2YXIgYyxlLGYsZyxoLGksaixrPXpbYStcIiBcIl07aWYoaylyZXR1cm4gYj8wOmsuc2xpY2UoMCk7aD1hLGk9W10saj1kLnByZUZpbHRlcjt3aGlsZShoKXtjJiYhKGU9US5leGVjKGgpKXx8KGUmJihoPWguc2xpY2UoZVswXS5sZW5ndGgpfHxoKSxpLnB1c2goZj1bXSkpLGM9ITEsKGU9Ui5leGVjKGgpKSYmKGM9ZS5zaGlmdCgpLGYucHVzaCh7dmFsdWU6Yyx0eXBlOmVbMF0ucmVwbGFjZShQLFwiIFwiKX0pLGg9aC5zbGljZShjLmxlbmd0aCkpO2ZvcihnIGluIGQuZmlsdGVyKSEoZT1WW2ddLmV4ZWMoaCkpfHxqW2ddJiYhKGU9altnXShlKSl8fChjPWUuc2hpZnQoKSxmLnB1c2goe3ZhbHVlOmMsdHlwZTpnLG1hdGNoZXM6ZX0pLGg9aC5zbGljZShjLmxlbmd0aCkpO2lmKCFjKWJyZWFrfXJldHVybiBiP2gubGVuZ3RoOmg/Z2EuZXJyb3IoYSk6eihhLGkpLnNsaWNlKDApfTtmdW5jdGlvbiBzYShhKXtmb3IodmFyIGI9MCxjPWEubGVuZ3RoLGQ9XCJcIjtiPGM7YisrKWQrPWFbYl0udmFsdWU7cmV0dXJuIGR9ZnVuY3Rpb24gdGEoYSxiLGMpe3ZhciBkPWIuZGlyLGU9Yi5uZXh0LGY9ZXx8ZCxnPWMmJlwicGFyZW50Tm9kZVwiPT09ZixoPXgrKztyZXR1cm4gYi5maXJzdD9mdW5jdGlvbihiLGMsZSl7d2hpbGUoYj1iW2RdKWlmKDE9PT1iLm5vZGVUeXBlfHxnKXJldHVybiBhKGIsYyxlKTtyZXR1cm4hMX06ZnVuY3Rpb24oYixjLGkpe3ZhciBqLGssbCxtPVt3LGhdO2lmKGkpe3doaWxlKGI9YltkXSlpZigoMT09PWIubm9kZVR5cGV8fGcpJiZhKGIsYyxpKSlyZXR1cm4hMH1lbHNlIHdoaWxlKGI9YltkXSlpZigxPT09Yi5ub2RlVHlwZXx8ZylpZihsPWJbdV18fChiW3VdPXt9KSxrPWxbYi51bmlxdWVJRF18fChsW2IudW5pcXVlSURdPXt9KSxlJiZlPT09Yi5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpKWI9YltkXXx8YjtlbHNle2lmKChqPWtbZl0pJiZqWzBdPT09dyYmalsxXT09PWgpcmV0dXJuIG1bMl09alsyXTtpZihrW2ZdPW0sbVsyXT1hKGIsYyxpKSlyZXR1cm4hMH1yZXR1cm4hMX19ZnVuY3Rpb24gdWEoYSl7cmV0dXJuIGEubGVuZ3RoPjE/ZnVuY3Rpb24oYixjLGQpe3ZhciBlPWEubGVuZ3RoO3doaWxlKGUtLSlpZighYVtlXShiLGMsZCkpcmV0dXJuITE7cmV0dXJuITB9OmFbMF19ZnVuY3Rpb24gdmEoYSxiLGMpe2Zvcih2YXIgZD0wLGU9Yi5sZW5ndGg7ZDxlO2QrKylnYShhLGJbZF0sYyk7cmV0dXJuIGN9ZnVuY3Rpb24gd2EoYSxiLGMsZCxlKXtmb3IodmFyIGYsZz1bXSxoPTAsaT1hLmxlbmd0aCxqPW51bGwhPWI7aDxpO2grKykoZj1hW2hdKSYmKGMmJiFjKGYsZCxlKXx8KGcucHVzaChmKSxqJiZiLnB1c2goaCkpKTtyZXR1cm4gZ31mdW5jdGlvbiB4YShhLGIsYyxkLGUsZil7cmV0dXJuIGQmJiFkW3VdJiYoZD14YShkKSksZSYmIWVbdV0mJihlPXhhKGUsZikpLGlhKGZ1bmN0aW9uKGYsZyxoLGkpe3ZhciBqLGssbCxtPVtdLG49W10sbz1nLmxlbmd0aCxwPWZ8fHZhKGJ8fFwiKlwiLGgubm9kZVR5cGU/W2hdOmgsW10pLHE9IWF8fCFmJiZiP3A6d2EocCxtLGEsaCxpKSxyPWM/ZXx8KGY/YTpvfHxkKT9bXTpnOnE7aWYoYyYmYyhxLHIsaCxpKSxkKXtqPXdhKHIsbiksZChqLFtdLGgsaSksaz1qLmxlbmd0aDt3aGlsZShrLS0pKGw9altrXSkmJihyW25ba11dPSEocVtuW2tdXT1sKSl9aWYoZil7aWYoZXx8YSl7aWYoZSl7aj1bXSxrPXIubGVuZ3RoO3doaWxlKGstLSkobD1yW2tdKSYmai5wdXNoKHFba109bCk7ZShudWxsLHI9W10saixpKX1rPXIubGVuZ3RoO3doaWxlKGstLSkobD1yW2tdKSYmKGo9ZT9JKGYsbCk6bVtrXSk+LTEmJihmW2pdPSEoZ1tqXT1sKSl9fWVsc2Ugcj13YShyPT09Zz9yLnNwbGljZShvLHIubGVuZ3RoKTpyKSxlP2UobnVsbCxnLHIsaSk6Ry5hcHBseShnLHIpfSl9ZnVuY3Rpb24geWEoYSl7Zm9yKHZhciBiLGMsZSxmPWEubGVuZ3RoLGc9ZC5yZWxhdGl2ZVthWzBdLnR5cGVdLGg9Z3x8ZC5yZWxhdGl2ZVtcIiBcIl0saT1nPzE6MCxrPXRhKGZ1bmN0aW9uKGEpe3JldHVybiBhPT09Yn0saCwhMCksbD10YShmdW5jdGlvbihhKXtyZXR1cm4gSShiLGEpPi0xfSxoLCEwKSxtPVtmdW5jdGlvbihhLGMsZCl7dmFyIGU9IWcmJihkfHxjIT09ail8fCgoYj1jKS5ub2RlVHlwZT9rKGEsYyxkKTpsKGEsYyxkKSk7cmV0dXJuIGI9bnVsbCxlfV07aTxmO2krKylpZihjPWQucmVsYXRpdmVbYVtpXS50eXBlXSltPVt0YSh1YShtKSxjKV07ZWxzZXtpZihjPWQuZmlsdGVyW2FbaV0udHlwZV0uYXBwbHkobnVsbCxhW2ldLm1hdGNoZXMpLGNbdV0pe2ZvcihlPSsraTtlPGY7ZSsrKWlmKGQucmVsYXRpdmVbYVtlXS50eXBlXSlicmVhaztyZXR1cm4geGEoaT4xJiZ1YShtKSxpPjEmJnNhKGEuc2xpY2UoMCxpLTEpLmNvbmNhdCh7dmFsdWU6XCIgXCI9PT1hW2ktMl0udHlwZT9cIipcIjpcIlwifSkpLnJlcGxhY2UoUCxcIiQxXCIpLGMsaTxlJiZ5YShhLnNsaWNlKGksZSkpLGU8ZiYmeWEoYT1hLnNsaWNlKGUpKSxlPGYmJnNhKGEpKX1tLnB1c2goYyl9cmV0dXJuIHVhKG0pfWZ1bmN0aW9uIHphKGEsYil7dmFyIGM9Yi5sZW5ndGg+MCxlPWEubGVuZ3RoPjAsZj1mdW5jdGlvbihmLGcsaCxpLGspe3ZhciBsLG8scSxyPTAscz1cIjBcIix0PWYmJltdLHU9W10sdj1qLHg9Znx8ZSYmZC5maW5kLlRBRyhcIipcIixrKSx5PXcrPW51bGw9PXY/MTpNYXRoLnJhbmRvbSgpfHwuMSx6PXgubGVuZ3RoO2ZvcihrJiYoaj1nPT09bnx8Z3x8ayk7cyE9PXomJm51bGwhPShsPXhbc10pO3MrKyl7aWYoZSYmbCl7bz0wLGd8fGwub3duZXJEb2N1bWVudD09PW58fChtKGwpLGg9IXApO3doaWxlKHE9YVtvKytdKWlmKHEobCxnfHxuLGgpKXtpLnB1c2gobCk7YnJlYWt9ayYmKHc9eSl9YyYmKChsPSFxJiZsKSYmci0tLGYmJnQucHVzaChsKSl9aWYocis9cyxjJiZzIT09cil7bz0wO3doaWxlKHE9YltvKytdKXEodCx1LGcsaCk7aWYoZil7aWYocj4wKXdoaWxlKHMtLSl0W3NdfHx1W3NdfHwodVtzXT1FLmNhbGwoaSkpO3U9d2EodSl9Ry5hcHBseShpLHUpLGsmJiFmJiZ1Lmxlbmd0aD4wJiZyK2IubGVuZ3RoPjEmJmdhLnVuaXF1ZVNvcnQoaSl9cmV0dXJuIGsmJih3PXksaj12KSx0fTtyZXR1cm4gYz9pYShmKTpmfXJldHVybiBoPWdhLmNvbXBpbGU9ZnVuY3Rpb24oYSxiKXt2YXIgYyxkPVtdLGU9W10sZj1BW2ErXCIgXCJdO2lmKCFmKXtifHwoYj1nKGEpKSxjPWIubGVuZ3RoO3doaWxlKGMtLSlmPXlhKGJbY10pLGZbdV0/ZC5wdXNoKGYpOmUucHVzaChmKTtmPUEoYSx6YShlLGQpKSxmLnNlbGVjdG9yPWF9cmV0dXJuIGZ9LGk9Z2Euc2VsZWN0PWZ1bmN0aW9uKGEsYixjLGUpe3ZhciBmLGksaixrLGwsbT1cImZ1bmN0aW9uXCI9PXR5cGVvZiBhJiZhLG49IWUmJmcoYT1tLnNlbGVjdG9yfHxhKTtpZihjPWN8fFtdLDE9PT1uLmxlbmd0aCl7aWYoaT1uWzBdPW5bMF0uc2xpY2UoMCksaS5sZW5ndGg+MiYmXCJJRFwiPT09KGo9aVswXSkudHlwZSYmOT09PWIubm9kZVR5cGUmJnAmJmQucmVsYXRpdmVbaVsxXS50eXBlXSl7aWYoYj0oZC5maW5kLklEKGoubWF0Y2hlc1swXS5yZXBsYWNlKF8sYWEpLGIpfHxbXSlbMF0sIWIpcmV0dXJuIGM7bSYmKGI9Yi5wYXJlbnROb2RlKSxhPWEuc2xpY2UoaS5zaGlmdCgpLnZhbHVlLmxlbmd0aCl9Zj1WLm5lZWRzQ29udGV4dC50ZXN0KGEpPzA6aS5sZW5ndGg7d2hpbGUoZi0tKXtpZihqPWlbZl0sZC5yZWxhdGl2ZVtrPWoudHlwZV0pYnJlYWs7aWYoKGw9ZC5maW5kW2tdKSYmKGU9bChqLm1hdGNoZXNbMF0ucmVwbGFjZShfLGFhKSwkLnRlc3QoaVswXS50eXBlKSYmcWEoYi5wYXJlbnROb2RlKXx8YikpKXtpZihpLnNwbGljZShmLDEpLGE9ZS5sZW5ndGgmJnNhKGkpLCFhKXJldHVybiBHLmFwcGx5KGMsZSksYzticmVha319fXJldHVybihtfHxoKGEsbikpKGUsYiwhcCxjLCFifHwkLnRlc3QoYSkmJnFhKGIucGFyZW50Tm9kZSl8fGIpLGN9LGMuc29ydFN0YWJsZT11LnNwbGl0KFwiXCIpLnNvcnQoQikuam9pbihcIlwiKT09PXUsYy5kZXRlY3REdXBsaWNhdGVzPSEhbCxtKCksYy5zb3J0RGV0YWNoZWQ9amEoZnVuY3Rpb24oYSl7cmV0dXJuIDEmYS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbihuLmNyZWF0ZUVsZW1lbnQoXCJmaWVsZHNldFwiKSl9KSxqYShmdW5jdGlvbihhKXtyZXR1cm4gYS5pbm5lckhUTUw9XCI8YSBocmVmPScjJz48L2E+XCIsXCIjXCI9PT1hLmZpcnN0Q2hpbGQuZ2V0QXR0cmlidXRlKFwiaHJlZlwiKX0pfHxrYShcInR5cGV8aHJlZnxoZWlnaHR8d2lkdGhcIixmdW5jdGlvbihhLGIsYyl7aWYoIWMpcmV0dXJuIGEuZ2V0QXR0cmlidXRlKGIsXCJ0eXBlXCI9PT1iLnRvTG93ZXJDYXNlKCk/MToyKX0pLGMuYXR0cmlidXRlcyYmamEoZnVuY3Rpb24oYSl7cmV0dXJuIGEuaW5uZXJIVE1MPVwiPGlucHV0Lz5cIixhLmZpcnN0Q2hpbGQuc2V0QXR0cmlidXRlKFwidmFsdWVcIixcIlwiKSxcIlwiPT09YS5maXJzdENoaWxkLmdldEF0dHJpYnV0ZShcInZhbHVlXCIpfSl8fGthKFwidmFsdWVcIixmdW5jdGlvbihhLGIsYyl7aWYoIWMmJlwiaW5wdXRcIj09PWEubm9kZU5hbWUudG9Mb3dlckNhc2UoKSlyZXR1cm4gYS5kZWZhdWx0VmFsdWV9KSxqYShmdW5jdGlvbihhKXtyZXR1cm4gbnVsbD09YS5nZXRBdHRyaWJ1dGUoXCJkaXNhYmxlZFwiKX0pfHxrYShKLGZ1bmN0aW9uKGEsYixjKXt2YXIgZDtpZighYylyZXR1cm4gYVtiXT09PSEwP2IudG9Mb3dlckNhc2UoKTooZD1hLmdldEF0dHJpYnV0ZU5vZGUoYikpJiZkLnNwZWNpZmllZD9kLnZhbHVlOm51bGx9KSxnYX0oYSk7ci5maW5kPXgsci5leHByPXguc2VsZWN0b3JzLHIuZXhwcltcIjpcIl09ci5leHByLnBzZXVkb3Msci51bmlxdWVTb3J0PXIudW5pcXVlPXgudW5pcXVlU29ydCxyLnRleHQ9eC5nZXRUZXh0LHIuaXNYTUxEb2M9eC5pc1hNTCxyLmNvbnRhaW5zPXguY29udGFpbnMsci5lc2NhcGVTZWxlY3Rvcj14LmVzY2FwZTt2YXIgeT1mdW5jdGlvbihhLGIsYyl7dmFyIGQ9W10sZT12b2lkIDAhPT1jO3doaWxlKChhPWFbYl0pJiY5IT09YS5ub2RlVHlwZSlpZigxPT09YS5ub2RlVHlwZSl7aWYoZSYmcihhKS5pcyhjKSlicmVhaztkLnB1c2goYSl9cmV0dXJuIGR9LHo9ZnVuY3Rpb24oYSxiKXtmb3IodmFyIGM9W107YTthPWEubmV4dFNpYmxpbmcpMT09PWEubm9kZVR5cGUmJmEhPT1iJiZjLnB1c2goYSk7cmV0dXJuIGN9LEE9ci5leHByLm1hdGNoLm5lZWRzQ29udGV4dCxCPS9ePChbYS16XVteXFwvXFwwPjpcXHgyMFxcdFxcclxcblxcZl0qKVtcXHgyMFxcdFxcclxcblxcZl0qXFwvPz4oPzo8XFwvXFwxPnwpJC9pLEM9L14uW146I1xcW1xcLixdKiQvO2Z1bmN0aW9uIEQoYSxiLGMpe3JldHVybiByLmlzRnVuY3Rpb24oYik/ci5ncmVwKGEsZnVuY3Rpb24oYSxkKXtyZXR1cm4hIWIuY2FsbChhLGQsYSkhPT1jfSk6Yi5ub2RlVHlwZT9yLmdyZXAoYSxmdW5jdGlvbihhKXtyZXR1cm4gYT09PWIhPT1jfSk6XCJzdHJpbmdcIiE9dHlwZW9mIGI/ci5ncmVwKGEsZnVuY3Rpb24oYSl7cmV0dXJuIGkuY2FsbChiLGEpPi0xIT09Y30pOkMudGVzdChiKT9yLmZpbHRlcihiLGEsYyk6KGI9ci5maWx0ZXIoYixhKSxyLmdyZXAoYSxmdW5jdGlvbihhKXtyZXR1cm4gaS5jYWxsKGIsYSk+LTEhPT1jJiYxPT09YS5ub2RlVHlwZX0pKX1yLmZpbHRlcj1mdW5jdGlvbihhLGIsYyl7dmFyIGQ9YlswXTtyZXR1cm4gYyYmKGE9XCI6bm90KFwiK2ErXCIpXCIpLDE9PT1iLmxlbmd0aCYmMT09PWQubm9kZVR5cGU/ci5maW5kLm1hdGNoZXNTZWxlY3RvcihkLGEpP1tkXTpbXTpyLmZpbmQubWF0Y2hlcyhhLHIuZ3JlcChiLGZ1bmN0aW9uKGEpe3JldHVybiAxPT09YS5ub2RlVHlwZX0pKX0sci5mbi5leHRlbmQoe2ZpbmQ6ZnVuY3Rpb24oYSl7dmFyIGIsYyxkPXRoaXMubGVuZ3RoLGU9dGhpcztpZihcInN0cmluZ1wiIT10eXBlb2YgYSlyZXR1cm4gdGhpcy5wdXNoU3RhY2socihhKS5maWx0ZXIoZnVuY3Rpb24oKXtmb3IoYj0wO2I8ZDtiKyspaWYoci5jb250YWlucyhlW2JdLHRoaXMpKXJldHVybiEwfSkpO2ZvcihjPXRoaXMucHVzaFN0YWNrKFtdKSxiPTA7YjxkO2IrKylyLmZpbmQoYSxlW2JdLGMpO3JldHVybiBkPjE/ci51bmlxdWVTb3J0KGMpOmN9LGZpbHRlcjpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5wdXNoU3RhY2soRCh0aGlzLGF8fFtdLCExKSl9LG5vdDpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5wdXNoU3RhY2soRCh0aGlzLGF8fFtdLCEwKSl9LGlzOmZ1bmN0aW9uKGEpe3JldHVybiEhRCh0aGlzLFwic3RyaW5nXCI9PXR5cGVvZiBhJiZBLnRlc3QoYSk/cihhKTphfHxbXSwhMSkubGVuZ3RofX0pO3ZhciBFLEY9L14oPzpcXHMqKDxbXFx3XFxXXSs+KVtePl0qfCMoW1xcdy1dKykpJC8sRz1yLmZuLmluaXQ9ZnVuY3Rpb24oYSxiLGMpe3ZhciBlLGY7aWYoIWEpcmV0dXJuIHRoaXM7aWYoYz1jfHxFLFwic3RyaW5nXCI9PXR5cGVvZiBhKXtpZihlPVwiPFwiPT09YVswXSYmXCI+XCI9PT1hW2EubGVuZ3RoLTFdJiZhLmxlbmd0aD49Mz9bbnVsbCxhLG51bGxdOkYuZXhlYyhhKSwhZXx8IWVbMV0mJmIpcmV0dXJuIWJ8fGIuanF1ZXJ5PyhifHxjKS5maW5kKGEpOnRoaXMuY29uc3RydWN0b3IoYikuZmluZChhKTtpZihlWzFdKXtpZihiPWIgaW5zdGFuY2VvZiByP2JbMF06YixyLm1lcmdlKHRoaXMsci5wYXJzZUhUTUwoZVsxXSxiJiZiLm5vZGVUeXBlP2Iub3duZXJEb2N1bWVudHx8YjpkLCEwKSksQi50ZXN0KGVbMV0pJiZyLmlzUGxhaW5PYmplY3QoYikpZm9yKGUgaW4gYilyLmlzRnVuY3Rpb24odGhpc1tlXSk/dGhpc1tlXShiW2VdKTp0aGlzLmF0dHIoZSxiW2VdKTtyZXR1cm4gdGhpc31yZXR1cm4gZj1kLmdldEVsZW1lbnRCeUlkKGVbMl0pLGYmJih0aGlzWzBdPWYsdGhpcy5sZW5ndGg9MSksdGhpc31yZXR1cm4gYS5ub2RlVHlwZT8odGhpc1swXT1hLHRoaXMubGVuZ3RoPTEsdGhpcyk6ci5pc0Z1bmN0aW9uKGEpP3ZvaWQgMCE9PWMucmVhZHk/Yy5yZWFkeShhKTphKHIpOnIubWFrZUFycmF5KGEsdGhpcyl9O0cucHJvdG90eXBlPXIuZm4sRT1yKGQpO3ZhciBIPS9eKD86cGFyZW50c3xwcmV2KD86VW50aWx8QWxsKSkvLEk9e2NoaWxkcmVuOiEwLGNvbnRlbnRzOiEwLG5leHQ6ITAscHJldjohMH07ci5mbi5leHRlbmQoe2hhczpmdW5jdGlvbihhKXt2YXIgYj1yKGEsdGhpcyksYz1iLmxlbmd0aDtyZXR1cm4gdGhpcy5maWx0ZXIoZnVuY3Rpb24oKXtmb3IodmFyIGE9MDthPGM7YSsrKWlmKHIuY29udGFpbnModGhpcyxiW2FdKSlyZXR1cm4hMH0pfSxjbG9zZXN0OmZ1bmN0aW9uKGEsYil7dmFyIGMsZD0wLGU9dGhpcy5sZW5ndGgsZj1bXSxnPVwic3RyaW5nXCIhPXR5cGVvZiBhJiZyKGEpO2lmKCFBLnRlc3QoYSkpZm9yKDtkPGU7ZCsrKWZvcihjPXRoaXNbZF07YyYmYyE9PWI7Yz1jLnBhcmVudE5vZGUpaWYoYy5ub2RlVHlwZTwxMSYmKGc/Zy5pbmRleChjKT4tMToxPT09Yy5ub2RlVHlwZSYmci5maW5kLm1hdGNoZXNTZWxlY3RvcihjLGEpKSl7Zi5wdXNoKGMpO2JyZWFrfXJldHVybiB0aGlzLnB1c2hTdGFjayhmLmxlbmd0aD4xP3IudW5pcXVlU29ydChmKTpmKX0saW5kZXg6ZnVuY3Rpb24oYSl7cmV0dXJuIGE/XCJzdHJpbmdcIj09dHlwZW9mIGE/aS5jYWxsKHIoYSksdGhpc1swXSk6aS5jYWxsKHRoaXMsYS5qcXVlcnk/YVswXTphKTp0aGlzWzBdJiZ0aGlzWzBdLnBhcmVudE5vZGU/dGhpcy5maXJzdCgpLnByZXZBbGwoKS5sZW5ndGg6LTF9LGFkZDpmdW5jdGlvbihhLGIpe3JldHVybiB0aGlzLnB1c2hTdGFjayhyLnVuaXF1ZVNvcnQoci5tZXJnZSh0aGlzLmdldCgpLHIoYSxiKSkpKX0sYWRkQmFjazpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5hZGQobnVsbD09YT90aGlzLnByZXZPYmplY3Q6dGhpcy5wcmV2T2JqZWN0LmZpbHRlcihhKSl9fSk7ZnVuY3Rpb24gSihhLGIpe3doaWxlKChhPWFbYl0pJiYxIT09YS5ub2RlVHlwZSk7cmV0dXJuIGF9ci5lYWNoKHtwYXJlbnQ6ZnVuY3Rpb24oYSl7dmFyIGI9YS5wYXJlbnROb2RlO3JldHVybiBiJiYxMSE9PWIubm9kZVR5cGU/YjpudWxsfSxwYXJlbnRzOmZ1bmN0aW9uKGEpe3JldHVybiB5KGEsXCJwYXJlbnROb2RlXCIpfSxwYXJlbnRzVW50aWw6ZnVuY3Rpb24oYSxiLGMpe3JldHVybiB5KGEsXCJwYXJlbnROb2RlXCIsYyl9LG5leHQ6ZnVuY3Rpb24oYSl7cmV0dXJuIEooYSxcIm5leHRTaWJsaW5nXCIpfSxwcmV2OmZ1bmN0aW9uKGEpe3JldHVybiBKKGEsXCJwcmV2aW91c1NpYmxpbmdcIil9LG5leHRBbGw6ZnVuY3Rpb24oYSl7cmV0dXJuIHkoYSxcIm5leHRTaWJsaW5nXCIpfSxwcmV2QWxsOmZ1bmN0aW9uKGEpe3JldHVybiB5KGEsXCJwcmV2aW91c1NpYmxpbmdcIil9LG5leHRVbnRpbDpmdW5jdGlvbihhLGIsYyl7cmV0dXJuIHkoYSxcIm5leHRTaWJsaW5nXCIsYyl9LHByZXZVbnRpbDpmdW5jdGlvbihhLGIsYyl7cmV0dXJuIHkoYSxcInByZXZpb3VzU2libGluZ1wiLGMpfSxzaWJsaW5nczpmdW5jdGlvbihhKXtyZXR1cm4geigoYS5wYXJlbnROb2RlfHx7fSkuZmlyc3RDaGlsZCxhKX0sY2hpbGRyZW46ZnVuY3Rpb24oYSl7cmV0dXJuIHooYS5maXJzdENoaWxkKX0sY29udGVudHM6ZnVuY3Rpb24oYSl7cmV0dXJuIGEuY29udGVudERvY3VtZW50fHxyLm1lcmdlKFtdLGEuY2hpbGROb2Rlcyl9fSxmdW5jdGlvbihhLGIpe3IuZm5bYV09ZnVuY3Rpb24oYyxkKXt2YXIgZT1yLm1hcCh0aGlzLGIsYyk7cmV0dXJuXCJVbnRpbFwiIT09YS5zbGljZSgtNSkmJihkPWMpLGQmJlwic3RyaW5nXCI9PXR5cGVvZiBkJiYoZT1yLmZpbHRlcihkLGUpKSx0aGlzLmxlbmd0aD4xJiYoSVthXXx8ci51bmlxdWVTb3J0KGUpLEgudGVzdChhKSYmZS5yZXZlcnNlKCkpLHRoaXMucHVzaFN0YWNrKGUpfX0pO3ZhciBLPS9bXlxceDIwXFx0XFxyXFxuXFxmXSsvZztmdW5jdGlvbiBMKGEpe3ZhciBiPXt9O3JldHVybiByLmVhY2goYS5tYXRjaChLKXx8W10sZnVuY3Rpb24oYSxjKXtiW2NdPSEwfSksYn1yLkNhbGxiYWNrcz1mdW5jdGlvbihhKXthPVwic3RyaW5nXCI9PXR5cGVvZiBhP0woYSk6ci5leHRlbmQoe30sYSk7dmFyIGIsYyxkLGUsZj1bXSxnPVtdLGg9LTEsaT1mdW5jdGlvbigpe2ZvcihlPWEub25jZSxkPWI9ITA7Zy5sZW5ndGg7aD0tMSl7Yz1nLnNoaWZ0KCk7d2hpbGUoKytoPGYubGVuZ3RoKWZbaF0uYXBwbHkoY1swXSxjWzFdKT09PSExJiZhLnN0b3BPbkZhbHNlJiYoaD1mLmxlbmd0aCxjPSExKX1hLm1lbW9yeXx8KGM9ITEpLGI9ITEsZSYmKGY9Yz9bXTpcIlwiKX0saj17YWRkOmZ1bmN0aW9uKCl7cmV0dXJuIGYmJihjJiYhYiYmKGg9Zi5sZW5ndGgtMSxnLnB1c2goYykpLGZ1bmN0aW9uIGQoYil7ci5lYWNoKGIsZnVuY3Rpb24oYixjKXtyLmlzRnVuY3Rpb24oYyk/YS51bmlxdWUmJmouaGFzKGMpfHxmLnB1c2goYyk6YyYmYy5sZW5ndGgmJlwic3RyaW5nXCIhPT1yLnR5cGUoYykmJmQoYyl9KX0oYXJndW1lbnRzKSxjJiYhYiYmaSgpKSx0aGlzfSxyZW1vdmU6ZnVuY3Rpb24oKXtyZXR1cm4gci5lYWNoKGFyZ3VtZW50cyxmdW5jdGlvbihhLGIpe3ZhciBjO3doaWxlKChjPXIuaW5BcnJheShiLGYsYykpPi0xKWYuc3BsaWNlKGMsMSksYzw9aCYmaC0tfSksdGhpc30saGFzOmZ1bmN0aW9uKGEpe3JldHVybiBhP3IuaW5BcnJheShhLGYpPi0xOmYubGVuZ3RoPjB9LGVtcHR5OmZ1bmN0aW9uKCl7cmV0dXJuIGYmJihmPVtdKSx0aGlzfSxkaXNhYmxlOmZ1bmN0aW9uKCl7cmV0dXJuIGU9Zz1bXSxmPWM9XCJcIix0aGlzfSxkaXNhYmxlZDpmdW5jdGlvbigpe3JldHVybiFmfSxsb2NrOmZ1bmN0aW9uKCl7cmV0dXJuIGU9Zz1bXSxjfHxifHwoZj1jPVwiXCIpLHRoaXN9LGxvY2tlZDpmdW5jdGlvbigpe3JldHVybiEhZX0sZmlyZVdpdGg6ZnVuY3Rpb24oYSxjKXtyZXR1cm4gZXx8KGM9Y3x8W10sYz1bYSxjLnNsaWNlP2Muc2xpY2UoKTpjXSxnLnB1c2goYyksYnx8aSgpKSx0aGlzfSxmaXJlOmZ1bmN0aW9uKCl7cmV0dXJuIGouZmlyZVdpdGgodGhpcyxhcmd1bWVudHMpLHRoaXN9LGZpcmVkOmZ1bmN0aW9uKCl7cmV0dXJuISFkfX07cmV0dXJuIGp9O2Z1bmN0aW9uIE0oYSl7cmV0dXJuIGF9ZnVuY3Rpb24gTihhKXt0aHJvdyBhfWZ1bmN0aW9uIE8oYSxiLGMpe3ZhciBkO3RyeXthJiZyLmlzRnVuY3Rpb24oZD1hLnByb21pc2UpP2QuY2FsbChhKS5kb25lKGIpLmZhaWwoYyk6YSYmci5pc0Z1bmN0aW9uKGQ9YS50aGVuKT9kLmNhbGwoYSxiLGMpOmIuY2FsbCh2b2lkIDAsYSl9Y2F0Y2goYSl7Yy5jYWxsKHZvaWQgMCxhKX19ci5leHRlbmQoe0RlZmVycmVkOmZ1bmN0aW9uKGIpe3ZhciBjPVtbXCJub3RpZnlcIixcInByb2dyZXNzXCIsci5DYWxsYmFja3MoXCJtZW1vcnlcIiksci5DYWxsYmFja3MoXCJtZW1vcnlcIiksMl0sW1wicmVzb2x2ZVwiLFwiZG9uZVwiLHIuQ2FsbGJhY2tzKFwib25jZSBtZW1vcnlcIiksci5DYWxsYmFja3MoXCJvbmNlIG1lbW9yeVwiKSwwLFwicmVzb2x2ZWRcIl0sW1wicmVqZWN0XCIsXCJmYWlsXCIsci5DYWxsYmFja3MoXCJvbmNlIG1lbW9yeVwiKSxyLkNhbGxiYWNrcyhcIm9uY2UgbWVtb3J5XCIpLDEsXCJyZWplY3RlZFwiXV0sZD1cInBlbmRpbmdcIixlPXtzdGF0ZTpmdW5jdGlvbigpe3JldHVybiBkfSxhbHdheXM6ZnVuY3Rpb24oKXtyZXR1cm4gZi5kb25lKGFyZ3VtZW50cykuZmFpbChhcmd1bWVudHMpLHRoaXN9LFwiY2F0Y2hcIjpmdW5jdGlvbihhKXtyZXR1cm4gZS50aGVuKG51bGwsYSl9LHBpcGU6ZnVuY3Rpb24oKXt2YXIgYT1hcmd1bWVudHM7cmV0dXJuIHIuRGVmZXJyZWQoZnVuY3Rpb24oYil7ci5lYWNoKGMsZnVuY3Rpb24oYyxkKXt2YXIgZT1yLmlzRnVuY3Rpb24oYVtkWzRdXSkmJmFbZFs0XV07ZltkWzFdXShmdW5jdGlvbigpe3ZhciBhPWUmJmUuYXBwbHkodGhpcyxhcmd1bWVudHMpO2EmJnIuaXNGdW5jdGlvbihhLnByb21pc2UpP2EucHJvbWlzZSgpLnByb2dyZXNzKGIubm90aWZ5KS5kb25lKGIucmVzb2x2ZSkuZmFpbChiLnJlamVjdCk6YltkWzBdK1wiV2l0aFwiXSh0aGlzLGU/W2FdOmFyZ3VtZW50cyl9KX0pLGE9bnVsbH0pLnByb21pc2UoKX0sdGhlbjpmdW5jdGlvbihiLGQsZSl7dmFyIGY9MDtmdW5jdGlvbiBnKGIsYyxkLGUpe3JldHVybiBmdW5jdGlvbigpe3ZhciBoPXRoaXMsaT1hcmd1bWVudHMsaj1mdW5jdGlvbigpe3ZhciBhLGo7aWYoIShiPGYpKXtpZihhPWQuYXBwbHkoaCxpKSxhPT09Yy5wcm9taXNlKCkpdGhyb3cgbmV3IFR5cGVFcnJvcihcIlRoZW5hYmxlIHNlbGYtcmVzb2x1dGlvblwiKTtqPWEmJihcIm9iamVjdFwiPT10eXBlb2YgYXx8XCJmdW5jdGlvblwiPT10eXBlb2YgYSkmJmEudGhlbixyLmlzRnVuY3Rpb24oaik/ZT9qLmNhbGwoYSxnKGYsYyxNLGUpLGcoZixjLE4sZSkpOihmKyssai5jYWxsKGEsZyhmLGMsTSxlKSxnKGYsYyxOLGUpLGcoZixjLE0sYy5ub3RpZnlXaXRoKSkpOihkIT09TSYmKGg9dm9pZCAwLGk9W2FdKSwoZXx8Yy5yZXNvbHZlV2l0aCkoaCxpKSl9fSxrPWU/ajpmdW5jdGlvbigpe3RyeXtqKCl9Y2F0Y2goYSl7ci5EZWZlcnJlZC5leGNlcHRpb25Ib29rJiZyLkRlZmVycmVkLmV4Y2VwdGlvbkhvb2soYSxrLnN0YWNrVHJhY2UpLGIrMT49ZiYmKGQhPT1OJiYoaD12b2lkIDAsaT1bYV0pLGMucmVqZWN0V2l0aChoLGkpKX19O2I/aygpOihyLkRlZmVycmVkLmdldFN0YWNrSG9vayYmKGsuc3RhY2tUcmFjZT1yLkRlZmVycmVkLmdldFN0YWNrSG9vaygpKSxhLnNldFRpbWVvdXQoaykpfX1yZXR1cm4gci5EZWZlcnJlZChmdW5jdGlvbihhKXtjWzBdWzNdLmFkZChnKDAsYSxyLmlzRnVuY3Rpb24oZSk/ZTpNLGEubm90aWZ5V2l0aCkpLGNbMV1bM10uYWRkKGcoMCxhLHIuaXNGdW5jdGlvbihiKT9iOk0pKSxjWzJdWzNdLmFkZChnKDAsYSxyLmlzRnVuY3Rpb24oZCk/ZDpOKSl9KS5wcm9taXNlKCl9LHByb21pc2U6ZnVuY3Rpb24oYSl7cmV0dXJuIG51bGwhPWE/ci5leHRlbmQoYSxlKTplfX0sZj17fTtyZXR1cm4gci5lYWNoKGMsZnVuY3Rpb24oYSxiKXt2YXIgZz1iWzJdLGg9Yls1XTtlW2JbMV1dPWcuYWRkLGgmJmcuYWRkKGZ1bmN0aW9uKCl7ZD1ofSxjWzMtYV1bMl0uZGlzYWJsZSxjWzBdWzJdLmxvY2spLGcuYWRkKGJbM10uZmlyZSksZltiWzBdXT1mdW5jdGlvbigpe3JldHVybiBmW2JbMF0rXCJXaXRoXCJdKHRoaXM9PT1mP3ZvaWQgMDp0aGlzLGFyZ3VtZW50cyksdGhpc30sZltiWzBdK1wiV2l0aFwiXT1nLmZpcmVXaXRofSksZS5wcm9taXNlKGYpLGImJmIuY2FsbChmLGYpLGZ9LHdoZW46ZnVuY3Rpb24oYSl7dmFyIGI9YXJndW1lbnRzLmxlbmd0aCxjPWIsZD1BcnJheShjKSxlPWYuY2FsbChhcmd1bWVudHMpLGc9ci5EZWZlcnJlZCgpLGg9ZnVuY3Rpb24oYSl7cmV0dXJuIGZ1bmN0aW9uKGMpe2RbYV09dGhpcyxlW2FdPWFyZ3VtZW50cy5sZW5ndGg+MT9mLmNhbGwoYXJndW1lbnRzKTpjLC0tYnx8Zy5yZXNvbHZlV2l0aChkLGUpfX07aWYoYjw9MSYmKE8oYSxnLmRvbmUoaChjKSkucmVzb2x2ZSxnLnJlamVjdCksXCJwZW5kaW5nXCI9PT1nLnN0YXRlKCl8fHIuaXNGdW5jdGlvbihlW2NdJiZlW2NdLnRoZW4pKSlyZXR1cm4gZy50aGVuKCk7d2hpbGUoYy0tKU8oZVtjXSxoKGMpLGcucmVqZWN0KTtyZXR1cm4gZy5wcm9taXNlKCl9fSk7dmFyIFA9L14oRXZhbHxJbnRlcm5hbHxSYW5nZXxSZWZlcmVuY2V8U3ludGF4fFR5cGV8VVJJKUVycm9yJC87ci5EZWZlcnJlZC5leGNlcHRpb25Ib29rPWZ1bmN0aW9uKGIsYyl7YS5jb25zb2xlJiZhLmNvbnNvbGUud2FybiYmYiYmUC50ZXN0KGIubmFtZSkmJmEuY29uc29sZS53YXJuKFwialF1ZXJ5LkRlZmVycmVkIGV4Y2VwdGlvbjogXCIrYi5tZXNzYWdlLGIuc3RhY2ssYyl9LHIucmVhZHlFeGNlcHRpb249ZnVuY3Rpb24oYil7YS5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dGhyb3cgYn0pfTt2YXIgUT1yLkRlZmVycmVkKCk7ci5mbi5yZWFkeT1mdW5jdGlvbihhKXtyZXR1cm4gUS50aGVuKGEpW1wiY2F0Y2hcIl0oZnVuY3Rpb24oYSl7ci5yZWFkeUV4Y2VwdGlvbihhKX0pLHRoaXN9LHIuZXh0ZW5kKHtpc1JlYWR5OiExLHJlYWR5V2FpdDoxLFxuaG9sZFJlYWR5OmZ1bmN0aW9uKGEpe2E/ci5yZWFkeVdhaXQrKzpyLnJlYWR5KCEwKX0scmVhZHk6ZnVuY3Rpb24oYSl7KGE9PT0hMD8tLXIucmVhZHlXYWl0OnIuaXNSZWFkeSl8fChyLmlzUmVhZHk9ITAsYSE9PSEwJiYtLXIucmVhZHlXYWl0PjB8fFEucmVzb2x2ZVdpdGgoZCxbcl0pKX19KSxyLnJlYWR5LnRoZW49US50aGVuO2Z1bmN0aW9uIFIoKXtkLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJET01Db250ZW50TG9hZGVkXCIsUiksYS5yZW1vdmVFdmVudExpc3RlbmVyKFwibG9hZFwiLFIpLHIucmVhZHkoKX1cImNvbXBsZXRlXCI9PT1kLnJlYWR5U3RhdGV8fFwibG9hZGluZ1wiIT09ZC5yZWFkeVN0YXRlJiYhZC5kb2N1bWVudEVsZW1lbnQuZG9TY3JvbGw/YS5zZXRUaW1lb3V0KHIucmVhZHkpOihkLmFkZEV2ZW50TGlzdGVuZXIoXCJET01Db250ZW50TG9hZGVkXCIsUiksYS5hZGRFdmVudExpc3RlbmVyKFwibG9hZFwiLFIpKTt2YXIgUz1mdW5jdGlvbihhLGIsYyxkLGUsZixnKXt2YXIgaD0wLGk9YS5sZW5ndGgsaj1udWxsPT1jO2lmKFwib2JqZWN0XCI9PT1yLnR5cGUoYykpe2U9ITA7Zm9yKGggaW4gYylTKGEsYixoLGNbaF0sITAsZixnKX1lbHNlIGlmKHZvaWQgMCE9PWQmJihlPSEwLHIuaXNGdW5jdGlvbihkKXx8KGc9ITApLGomJihnPyhiLmNhbGwoYSxkKSxiPW51bGwpOihqPWIsYj1mdW5jdGlvbihhLGIsYyl7cmV0dXJuIGouY2FsbChyKGEpLGMpfSkpLGIpKWZvcig7aDxpO2grKyliKGFbaF0sYyxnP2Q6ZC5jYWxsKGFbaF0saCxiKGFbaF0sYykpKTtyZXR1cm4gZT9hOmo/Yi5jYWxsKGEpOmk/YihhWzBdLGMpOmZ9LFQ9ZnVuY3Rpb24oYSl7cmV0dXJuIDE9PT1hLm5vZGVUeXBlfHw5PT09YS5ub2RlVHlwZXx8ISthLm5vZGVUeXBlfTtmdW5jdGlvbiBVKCl7dGhpcy5leHBhbmRvPXIuZXhwYW5kbytVLnVpZCsrfVUudWlkPTEsVS5wcm90b3R5cGU9e2NhY2hlOmZ1bmN0aW9uKGEpe3ZhciBiPWFbdGhpcy5leHBhbmRvXTtyZXR1cm4gYnx8KGI9e30sVChhKSYmKGEubm9kZVR5cGU/YVt0aGlzLmV4cGFuZG9dPWI6T2JqZWN0LmRlZmluZVByb3BlcnR5KGEsdGhpcy5leHBhbmRvLHt2YWx1ZTpiLGNvbmZpZ3VyYWJsZTohMH0pKSksYn0sc2V0OmZ1bmN0aW9uKGEsYixjKXt2YXIgZCxlPXRoaXMuY2FjaGUoYSk7aWYoXCJzdHJpbmdcIj09dHlwZW9mIGIpZVtyLmNhbWVsQ2FzZShiKV09YztlbHNlIGZvcihkIGluIGIpZVtyLmNhbWVsQ2FzZShkKV09YltkXTtyZXR1cm4gZX0sZ2V0OmZ1bmN0aW9uKGEsYil7cmV0dXJuIHZvaWQgMD09PWI/dGhpcy5jYWNoZShhKTphW3RoaXMuZXhwYW5kb10mJmFbdGhpcy5leHBhbmRvXVtyLmNhbWVsQ2FzZShiKV19LGFjY2VzczpmdW5jdGlvbihhLGIsYyl7cmV0dXJuIHZvaWQgMD09PWJ8fGImJlwic3RyaW5nXCI9PXR5cGVvZiBiJiZ2b2lkIDA9PT1jP3RoaXMuZ2V0KGEsYik6KHRoaXMuc2V0KGEsYixjKSx2b2lkIDAhPT1jP2M6Yil9LHJlbW92ZTpmdW5jdGlvbihhLGIpe3ZhciBjLGQ9YVt0aGlzLmV4cGFuZG9dO2lmKHZvaWQgMCE9PWQpe2lmKHZvaWQgMCE9PWIpe3IuaXNBcnJheShiKT9iPWIubWFwKHIuY2FtZWxDYXNlKTooYj1yLmNhbWVsQ2FzZShiKSxiPWIgaW4gZD9bYl06Yi5tYXRjaChLKXx8W10pLGM9Yi5sZW5ndGg7d2hpbGUoYy0tKWRlbGV0ZSBkW2JbY11dfSh2b2lkIDA9PT1ifHxyLmlzRW1wdHlPYmplY3QoZCkpJiYoYS5ub2RlVHlwZT9hW3RoaXMuZXhwYW5kb109dm9pZCAwOmRlbGV0ZSBhW3RoaXMuZXhwYW5kb10pfX0saGFzRGF0YTpmdW5jdGlvbihhKXt2YXIgYj1hW3RoaXMuZXhwYW5kb107cmV0dXJuIHZvaWQgMCE9PWImJiFyLmlzRW1wdHlPYmplY3QoYil9fTt2YXIgVj1uZXcgVSxXPW5ldyBVLFg9L14oPzpcXHtbXFx3XFxXXSpcXH18XFxbW1xcd1xcV10qXFxdKSQvLFk9L1tBLVpdL2c7ZnVuY3Rpb24gWihhKXtyZXR1cm5cInRydWVcIj09PWF8fFwiZmFsc2VcIiE9PWEmJihcIm51bGxcIj09PWE/bnVsbDphPT09K2ErXCJcIj8rYTpYLnRlc3QoYSk/SlNPTi5wYXJzZShhKTphKX1mdW5jdGlvbiAkKGEsYixjKXt2YXIgZDtpZih2b2lkIDA9PT1jJiYxPT09YS5ub2RlVHlwZSlpZihkPVwiZGF0YS1cIitiLnJlcGxhY2UoWSxcIi0kJlwiKS50b0xvd2VyQ2FzZSgpLGM9YS5nZXRBdHRyaWJ1dGUoZCksXCJzdHJpbmdcIj09dHlwZW9mIGMpe3RyeXtjPVooYyl9Y2F0Y2goZSl7fVcuc2V0KGEsYixjKX1lbHNlIGM9dm9pZCAwO3JldHVybiBjfXIuZXh0ZW5kKHtoYXNEYXRhOmZ1bmN0aW9uKGEpe3JldHVybiBXLmhhc0RhdGEoYSl8fFYuaGFzRGF0YShhKX0sZGF0YTpmdW5jdGlvbihhLGIsYyl7cmV0dXJuIFcuYWNjZXNzKGEsYixjKX0scmVtb3ZlRGF0YTpmdW5jdGlvbihhLGIpe1cucmVtb3ZlKGEsYil9LF9kYXRhOmZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gVi5hY2Nlc3MoYSxiLGMpfSxfcmVtb3ZlRGF0YTpmdW5jdGlvbihhLGIpe1YucmVtb3ZlKGEsYil9fSksci5mbi5leHRlbmQoe2RhdGE6ZnVuY3Rpb24oYSxiKXt2YXIgYyxkLGUsZj10aGlzWzBdLGc9ZiYmZi5hdHRyaWJ1dGVzO2lmKHZvaWQgMD09PWEpe2lmKHRoaXMubGVuZ3RoJiYoZT1XLmdldChmKSwxPT09Zi5ub2RlVHlwZSYmIVYuZ2V0KGYsXCJoYXNEYXRhQXR0cnNcIikpKXtjPWcubGVuZ3RoO3doaWxlKGMtLSlnW2NdJiYoZD1nW2NdLm5hbWUsMD09PWQuaW5kZXhPZihcImRhdGEtXCIpJiYoZD1yLmNhbWVsQ2FzZShkLnNsaWNlKDUpKSwkKGYsZCxlW2RdKSkpO1Yuc2V0KGYsXCJoYXNEYXRhQXR0cnNcIiwhMCl9cmV0dXJuIGV9cmV0dXJuXCJvYmplY3RcIj09dHlwZW9mIGE/dGhpcy5lYWNoKGZ1bmN0aW9uKCl7Vy5zZXQodGhpcyxhKX0pOlModGhpcyxmdW5jdGlvbihiKXt2YXIgYztpZihmJiZ2b2lkIDA9PT1iKXtpZihjPVcuZ2V0KGYsYSksdm9pZCAwIT09YylyZXR1cm4gYztpZihjPSQoZixhKSx2b2lkIDAhPT1jKXJldHVybiBjfWVsc2UgdGhpcy5lYWNoKGZ1bmN0aW9uKCl7Vy5zZXQodGhpcyxhLGIpfSl9LG51bGwsYixhcmd1bWVudHMubGVuZ3RoPjEsbnVsbCwhMCl9LHJlbW92ZURhdGE6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe1cucmVtb3ZlKHRoaXMsYSl9KX19KSxyLmV4dGVuZCh7cXVldWU6ZnVuY3Rpb24oYSxiLGMpe3ZhciBkO2lmKGEpcmV0dXJuIGI9KGJ8fFwiZnhcIikrXCJxdWV1ZVwiLGQ9Vi5nZXQoYSxiKSxjJiYoIWR8fHIuaXNBcnJheShjKT9kPVYuYWNjZXNzKGEsYixyLm1ha2VBcnJheShjKSk6ZC5wdXNoKGMpKSxkfHxbXX0sZGVxdWV1ZTpmdW5jdGlvbihhLGIpe2I9Ynx8XCJmeFwiO3ZhciBjPXIucXVldWUoYSxiKSxkPWMubGVuZ3RoLGU9Yy5zaGlmdCgpLGY9ci5fcXVldWVIb29rcyhhLGIpLGc9ZnVuY3Rpb24oKXtyLmRlcXVldWUoYSxiKX07XCJpbnByb2dyZXNzXCI9PT1lJiYoZT1jLnNoaWZ0KCksZC0tKSxlJiYoXCJmeFwiPT09YiYmYy51bnNoaWZ0KFwiaW5wcm9ncmVzc1wiKSxkZWxldGUgZi5zdG9wLGUuY2FsbChhLGcsZikpLCFkJiZmJiZmLmVtcHR5LmZpcmUoKX0sX3F1ZXVlSG9va3M6ZnVuY3Rpb24oYSxiKXt2YXIgYz1iK1wicXVldWVIb29rc1wiO3JldHVybiBWLmdldChhLGMpfHxWLmFjY2VzcyhhLGMse2VtcHR5OnIuQ2FsbGJhY2tzKFwib25jZSBtZW1vcnlcIikuYWRkKGZ1bmN0aW9uKCl7Vi5yZW1vdmUoYSxbYitcInF1ZXVlXCIsY10pfSl9KX19KSxyLmZuLmV4dGVuZCh7cXVldWU6ZnVuY3Rpb24oYSxiKXt2YXIgYz0yO3JldHVyblwic3RyaW5nXCIhPXR5cGVvZiBhJiYoYj1hLGE9XCJmeFwiLGMtLSksYXJndW1lbnRzLmxlbmd0aDxjP3IucXVldWUodGhpc1swXSxhKTp2b2lkIDA9PT1iP3RoaXM6dGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIGM9ci5xdWV1ZSh0aGlzLGEsYik7ci5fcXVldWVIb29rcyh0aGlzLGEpLFwiZnhcIj09PWEmJlwiaW5wcm9ncmVzc1wiIT09Y1swXSYmci5kZXF1ZXVlKHRoaXMsYSl9KX0sZGVxdWV1ZTpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7ci5kZXF1ZXVlKHRoaXMsYSl9KX0sY2xlYXJRdWV1ZTpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5xdWV1ZShhfHxcImZ4XCIsW10pfSxwcm9taXNlOmZ1bmN0aW9uKGEsYil7dmFyIGMsZD0xLGU9ci5EZWZlcnJlZCgpLGY9dGhpcyxnPXRoaXMubGVuZ3RoLGg9ZnVuY3Rpb24oKXstLWR8fGUucmVzb2x2ZVdpdGgoZixbZl0pfTtcInN0cmluZ1wiIT10eXBlb2YgYSYmKGI9YSxhPXZvaWQgMCksYT1hfHxcImZ4XCI7d2hpbGUoZy0tKWM9Vi5nZXQoZltnXSxhK1wicXVldWVIb29rc1wiKSxjJiZjLmVtcHR5JiYoZCsrLGMuZW1wdHkuYWRkKGgpKTtyZXR1cm4gaCgpLGUucHJvbWlzZShiKX19KTt2YXIgXz0vWystXT8oPzpcXGQqXFwufClcXGQrKD86W2VFXVsrLV0/XFxkK3wpLy5zb3VyY2UsYWE9bmV3IFJlZ0V4cChcIl4oPzooWystXSk9fCkoXCIrXytcIikoW2EteiVdKikkXCIsXCJpXCIpLGJhPVtcIlRvcFwiLFwiUmlnaHRcIixcIkJvdHRvbVwiLFwiTGVmdFwiXSxjYT1mdW5jdGlvbihhLGIpe3JldHVybiBhPWJ8fGEsXCJub25lXCI9PT1hLnN0eWxlLmRpc3BsYXl8fFwiXCI9PT1hLnN0eWxlLmRpc3BsYXkmJnIuY29udGFpbnMoYS5vd25lckRvY3VtZW50LGEpJiZcIm5vbmVcIj09PXIuY3NzKGEsXCJkaXNwbGF5XCIpfSxkYT1mdW5jdGlvbihhLGIsYyxkKXt2YXIgZSxmLGc9e307Zm9yKGYgaW4gYilnW2ZdPWEuc3R5bGVbZl0sYS5zdHlsZVtmXT1iW2ZdO2U9Yy5hcHBseShhLGR8fFtdKTtmb3IoZiBpbiBiKWEuc3R5bGVbZl09Z1tmXTtyZXR1cm4gZX07ZnVuY3Rpb24gZWEoYSxiLGMsZCl7dmFyIGUsZj0xLGc9MjAsaD1kP2Z1bmN0aW9uKCl7cmV0dXJuIGQuY3VyKCl9OmZ1bmN0aW9uKCl7cmV0dXJuIHIuY3NzKGEsYixcIlwiKX0saT1oKCksaj1jJiZjWzNdfHwoci5jc3NOdW1iZXJbYl0/XCJcIjpcInB4XCIpLGs9KHIuY3NzTnVtYmVyW2JdfHxcInB4XCIhPT1qJiYraSkmJmFhLmV4ZWMoci5jc3MoYSxiKSk7aWYoayYma1szXSE9PWope2o9anx8a1szXSxjPWN8fFtdLGs9K2l8fDE7ZG8gZj1mfHxcIi41XCIsay89ZixyLnN0eWxlKGEsYixrK2opO3doaWxlKGYhPT0oZj1oKCkvaSkmJjEhPT1mJiYtLWcpfXJldHVybiBjJiYoaz0ra3x8K2l8fDAsZT1jWzFdP2srKGNbMV0rMSkqY1syXTorY1syXSxkJiYoZC51bml0PWosZC5zdGFydD1rLGQuZW5kPWUpKSxlfXZhciBmYT17fTtmdW5jdGlvbiBnYShhKXt2YXIgYixjPWEub3duZXJEb2N1bWVudCxkPWEubm9kZU5hbWUsZT1mYVtkXTtyZXR1cm4gZT9lOihiPWMuYm9keS5hcHBlbmRDaGlsZChjLmNyZWF0ZUVsZW1lbnQoZCkpLGU9ci5jc3MoYixcImRpc3BsYXlcIiksYi5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGIpLFwibm9uZVwiPT09ZSYmKGU9XCJibG9ja1wiKSxmYVtkXT1lLGUpfWZ1bmN0aW9uIGhhKGEsYil7Zm9yKHZhciBjLGQsZT1bXSxmPTAsZz1hLmxlbmd0aDtmPGc7ZisrKWQ9YVtmXSxkLnN0eWxlJiYoYz1kLnN0eWxlLmRpc3BsYXksYj8oXCJub25lXCI9PT1jJiYoZVtmXT1WLmdldChkLFwiZGlzcGxheVwiKXx8bnVsbCxlW2ZdfHwoZC5zdHlsZS5kaXNwbGF5PVwiXCIpKSxcIlwiPT09ZC5zdHlsZS5kaXNwbGF5JiZjYShkKSYmKGVbZl09Z2EoZCkpKTpcIm5vbmVcIiE9PWMmJihlW2ZdPVwibm9uZVwiLFYuc2V0KGQsXCJkaXNwbGF5XCIsYykpKTtmb3IoZj0wO2Y8ZztmKyspbnVsbCE9ZVtmXSYmKGFbZl0uc3R5bGUuZGlzcGxheT1lW2ZdKTtyZXR1cm4gYX1yLmZuLmV4dGVuZCh7c2hvdzpmdW5jdGlvbigpe3JldHVybiBoYSh0aGlzLCEwKX0saGlkZTpmdW5jdGlvbigpe3JldHVybiBoYSh0aGlzKX0sdG9nZ2xlOmZ1bmN0aW9uKGEpe3JldHVyblwiYm9vbGVhblwiPT10eXBlb2YgYT9hP3RoaXMuc2hvdygpOnRoaXMuaGlkZSgpOnRoaXMuZWFjaChmdW5jdGlvbigpe2NhKHRoaXMpP3IodGhpcykuc2hvdygpOnIodGhpcykuaGlkZSgpfSl9fSk7dmFyIGlhPS9eKD86Y2hlY2tib3h8cmFkaW8pJC9pLGphPS88KFthLXpdW15cXC9cXDA+XFx4MjBcXHRcXHJcXG5cXGZdKykvaSxrYT0vXiR8XFwvKD86amF2YXxlY21hKXNjcmlwdC9pLGxhPXtvcHRpb246WzEsXCI8c2VsZWN0IG11bHRpcGxlPSdtdWx0aXBsZSc+XCIsXCI8L3NlbGVjdD5cIl0sdGhlYWQ6WzEsXCI8dGFibGU+XCIsXCI8L3RhYmxlPlwiXSxjb2w6WzIsXCI8dGFibGU+PGNvbGdyb3VwPlwiLFwiPC9jb2xncm91cD48L3RhYmxlPlwiXSx0cjpbMixcIjx0YWJsZT48dGJvZHk+XCIsXCI8L3Rib2R5PjwvdGFibGU+XCJdLHRkOlszLFwiPHRhYmxlPjx0Ym9keT48dHI+XCIsXCI8L3RyPjwvdGJvZHk+PC90YWJsZT5cIl0sX2RlZmF1bHQ6WzAsXCJcIixcIlwiXX07bGEub3B0Z3JvdXA9bGEub3B0aW9uLGxhLnRib2R5PWxhLnRmb290PWxhLmNvbGdyb3VwPWxhLmNhcHRpb249bGEudGhlYWQsbGEudGg9bGEudGQ7ZnVuY3Rpb24gbWEoYSxiKXt2YXIgYztyZXR1cm4gYz1cInVuZGVmaW5lZFwiIT10eXBlb2YgYS5nZXRFbGVtZW50c0J5VGFnTmFtZT9hLmdldEVsZW1lbnRzQnlUYWdOYW1lKGJ8fFwiKlwiKTpcInVuZGVmaW5lZFwiIT10eXBlb2YgYS5xdWVyeVNlbGVjdG9yQWxsP2EucXVlcnlTZWxlY3RvckFsbChifHxcIipcIik6W10sdm9pZCAwPT09Ynx8YiYmci5ub2RlTmFtZShhLGIpP3IubWVyZ2UoW2FdLGMpOmN9ZnVuY3Rpb24gbmEoYSxiKXtmb3IodmFyIGM9MCxkPWEubGVuZ3RoO2M8ZDtjKyspVi5zZXQoYVtjXSxcImdsb2JhbEV2YWxcIiwhYnx8Vi5nZXQoYltjXSxcImdsb2JhbEV2YWxcIikpfXZhciBvYT0vPHwmIz9cXHcrOy87ZnVuY3Rpb24gcGEoYSxiLGMsZCxlKXtmb3IodmFyIGYsZyxoLGksaixrLGw9Yi5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCksbT1bXSxuPTAsbz1hLmxlbmd0aDtuPG87bisrKWlmKGY9YVtuXSxmfHwwPT09ZilpZihcIm9iamVjdFwiPT09ci50eXBlKGYpKXIubWVyZ2UobSxmLm5vZGVUeXBlP1tmXTpmKTtlbHNlIGlmKG9hLnRlc3QoZikpe2c9Z3x8bC5hcHBlbmRDaGlsZChiLmNyZWF0ZUVsZW1lbnQoXCJkaXZcIikpLGg9KGphLmV4ZWMoZil8fFtcIlwiLFwiXCJdKVsxXS50b0xvd2VyQ2FzZSgpLGk9bGFbaF18fGxhLl9kZWZhdWx0LGcuaW5uZXJIVE1MPWlbMV0rci5odG1sUHJlZmlsdGVyKGYpK2lbMl0saz1pWzBdO3doaWxlKGstLSlnPWcubGFzdENoaWxkO3IubWVyZ2UobSxnLmNoaWxkTm9kZXMpLGc9bC5maXJzdENoaWxkLGcudGV4dENvbnRlbnQ9XCJcIn1lbHNlIG0ucHVzaChiLmNyZWF0ZVRleHROb2RlKGYpKTtsLnRleHRDb250ZW50PVwiXCIsbj0wO3doaWxlKGY9bVtuKytdKWlmKGQmJnIuaW5BcnJheShmLGQpPi0xKWUmJmUucHVzaChmKTtlbHNlIGlmKGo9ci5jb250YWlucyhmLm93bmVyRG9jdW1lbnQsZiksZz1tYShsLmFwcGVuZENoaWxkKGYpLFwic2NyaXB0XCIpLGomJm5hKGcpLGMpe2s9MDt3aGlsZShmPWdbaysrXSlrYS50ZXN0KGYudHlwZXx8XCJcIikmJmMucHVzaChmKX1yZXR1cm4gbH0hZnVuY3Rpb24oKXt2YXIgYT1kLmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKSxiPWEuYXBwZW5kQ2hpbGQoZC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpKSxjPWQuY3JlYXRlRWxlbWVudChcImlucHV0XCIpO2Muc2V0QXR0cmlidXRlKFwidHlwZVwiLFwicmFkaW9cIiksYy5zZXRBdHRyaWJ1dGUoXCJjaGVja2VkXCIsXCJjaGVja2VkXCIpLGMuc2V0QXR0cmlidXRlKFwibmFtZVwiLFwidFwiKSxiLmFwcGVuZENoaWxkKGMpLG8uY2hlY2tDbG9uZT1iLmNsb25lTm9kZSghMCkuY2xvbmVOb2RlKCEwKS5sYXN0Q2hpbGQuY2hlY2tlZCxiLmlubmVySFRNTD1cIjx0ZXh0YXJlYT54PC90ZXh0YXJlYT5cIixvLm5vQ2xvbmVDaGVja2VkPSEhYi5jbG9uZU5vZGUoITApLmxhc3RDaGlsZC5kZWZhdWx0VmFsdWV9KCk7dmFyIHFhPWQuZG9jdW1lbnRFbGVtZW50LHJhPS9ea2V5LyxzYT0vXig/Om1vdXNlfHBvaW50ZXJ8Y29udGV4dG1lbnV8ZHJhZ3xkcm9wKXxjbGljay8sdGE9L14oW14uXSopKD86XFwuKC4rKXwpLztmdW5jdGlvbiB1YSgpe3JldHVybiEwfWZ1bmN0aW9uIHZhKCl7cmV0dXJuITF9ZnVuY3Rpb24gd2EoKXt0cnl7cmV0dXJuIGQuYWN0aXZlRWxlbWVudH1jYXRjaChhKXt9fWZ1bmN0aW9uIHhhKGEsYixjLGQsZSxmKXt2YXIgZyxoO2lmKFwib2JqZWN0XCI9PXR5cGVvZiBiKXtcInN0cmluZ1wiIT10eXBlb2YgYyYmKGQ9ZHx8YyxjPXZvaWQgMCk7Zm9yKGggaW4gYil4YShhLGgsYyxkLGJbaF0sZik7cmV0dXJuIGF9aWYobnVsbD09ZCYmbnVsbD09ZT8oZT1jLGQ9Yz12b2lkIDApOm51bGw9PWUmJihcInN0cmluZ1wiPT10eXBlb2YgYz8oZT1kLGQ9dm9pZCAwKTooZT1kLGQ9YyxjPXZvaWQgMCkpLGU9PT0hMSllPXZhO2Vsc2UgaWYoIWUpcmV0dXJuIGE7cmV0dXJuIDE9PT1mJiYoZz1lLGU9ZnVuY3Rpb24oYSl7cmV0dXJuIHIoKS5vZmYoYSksZy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9LGUuZ3VpZD1nLmd1aWR8fChnLmd1aWQ9ci5ndWlkKyspKSxhLmVhY2goZnVuY3Rpb24oKXtyLmV2ZW50LmFkZCh0aGlzLGIsZSxkLGMpfSl9ci5ldmVudD17Z2xvYmFsOnt9LGFkZDpmdW5jdGlvbihhLGIsYyxkLGUpe3ZhciBmLGcsaCxpLGosayxsLG0sbixvLHAscT1WLmdldChhKTtpZihxKXtjLmhhbmRsZXImJihmPWMsYz1mLmhhbmRsZXIsZT1mLnNlbGVjdG9yKSxlJiZyLmZpbmQubWF0Y2hlc1NlbGVjdG9yKHFhLGUpLGMuZ3VpZHx8KGMuZ3VpZD1yLmd1aWQrKyksKGk9cS5ldmVudHMpfHwoaT1xLmV2ZW50cz17fSksKGc9cS5oYW5kbGUpfHwoZz1xLmhhbmRsZT1mdW5jdGlvbihiKXtyZXR1cm5cInVuZGVmaW5lZFwiIT10eXBlb2YgciYmci5ldmVudC50cmlnZ2VyZWQhPT1iLnR5cGU/ci5ldmVudC5kaXNwYXRjaC5hcHBseShhLGFyZ3VtZW50cyk6dm9pZCAwfSksYj0oYnx8XCJcIikubWF0Y2goSyl8fFtcIlwiXSxqPWIubGVuZ3RoO3doaWxlKGotLSloPXRhLmV4ZWMoYltqXSl8fFtdLG49cD1oWzFdLG89KGhbMl18fFwiXCIpLnNwbGl0KFwiLlwiKS5zb3J0KCksbiYmKGw9ci5ldmVudC5zcGVjaWFsW25dfHx7fSxuPShlP2wuZGVsZWdhdGVUeXBlOmwuYmluZFR5cGUpfHxuLGw9ci5ldmVudC5zcGVjaWFsW25dfHx7fSxrPXIuZXh0ZW5kKHt0eXBlOm4sb3JpZ1R5cGU6cCxkYXRhOmQsaGFuZGxlcjpjLGd1aWQ6Yy5ndWlkLHNlbGVjdG9yOmUsbmVlZHNDb250ZXh0OmUmJnIuZXhwci5tYXRjaC5uZWVkc0NvbnRleHQudGVzdChlKSxuYW1lc3BhY2U6by5qb2luKFwiLlwiKX0sZiksKG09aVtuXSl8fChtPWlbbl09W10sbS5kZWxlZ2F0ZUNvdW50PTAsbC5zZXR1cCYmbC5zZXR1cC5jYWxsKGEsZCxvLGcpIT09ITF8fGEuYWRkRXZlbnRMaXN0ZW5lciYmYS5hZGRFdmVudExpc3RlbmVyKG4sZykpLGwuYWRkJiYobC5hZGQuY2FsbChhLGspLGsuaGFuZGxlci5ndWlkfHwoay5oYW5kbGVyLmd1aWQ9Yy5ndWlkKSksZT9tLnNwbGljZShtLmRlbGVnYXRlQ291bnQrKywwLGspOm0ucHVzaChrKSxyLmV2ZW50Lmdsb2JhbFtuXT0hMCl9fSxyZW1vdmU6ZnVuY3Rpb24oYSxiLGMsZCxlKXt2YXIgZixnLGgsaSxqLGssbCxtLG4sbyxwLHE9Vi5oYXNEYXRhKGEpJiZWLmdldChhKTtpZihxJiYoaT1xLmV2ZW50cykpe2I9KGJ8fFwiXCIpLm1hdGNoKEspfHxbXCJcIl0saj1iLmxlbmd0aDt3aGlsZShqLS0paWYoaD10YS5leGVjKGJbal0pfHxbXSxuPXA9aFsxXSxvPShoWzJdfHxcIlwiKS5zcGxpdChcIi5cIikuc29ydCgpLG4pe2w9ci5ldmVudC5zcGVjaWFsW25dfHx7fSxuPShkP2wuZGVsZWdhdGVUeXBlOmwuYmluZFR5cGUpfHxuLG09aVtuXXx8W10saD1oWzJdJiZuZXcgUmVnRXhwKFwiKF58XFxcXC4pXCIrby5qb2luKFwiXFxcXC4oPzouKlxcXFwufClcIikrXCIoXFxcXC58JClcIiksZz1mPW0ubGVuZ3RoO3doaWxlKGYtLSlrPW1bZl0sIWUmJnAhPT1rLm9yaWdUeXBlfHxjJiZjLmd1aWQhPT1rLmd1aWR8fGgmJiFoLnRlc3Qoay5uYW1lc3BhY2UpfHxkJiZkIT09ay5zZWxlY3RvciYmKFwiKipcIiE9PWR8fCFrLnNlbGVjdG9yKXx8KG0uc3BsaWNlKGYsMSksay5zZWxlY3RvciYmbS5kZWxlZ2F0ZUNvdW50LS0sbC5yZW1vdmUmJmwucmVtb3ZlLmNhbGwoYSxrKSk7ZyYmIW0ubGVuZ3RoJiYobC50ZWFyZG93biYmbC50ZWFyZG93bi5jYWxsKGEsbyxxLmhhbmRsZSkhPT0hMXx8ci5yZW1vdmVFdmVudChhLG4scS5oYW5kbGUpLGRlbGV0ZSBpW25dKX1lbHNlIGZvcihuIGluIGkpci5ldmVudC5yZW1vdmUoYSxuK2Jbal0sYyxkLCEwKTtyLmlzRW1wdHlPYmplY3QoaSkmJlYucmVtb3ZlKGEsXCJoYW5kbGUgZXZlbnRzXCIpfX0sZGlzcGF0Y2g6ZnVuY3Rpb24oYSl7dmFyIGI9ci5ldmVudC5maXgoYSksYyxkLGUsZixnLGgsaT1uZXcgQXJyYXkoYXJndW1lbnRzLmxlbmd0aCksaj0oVi5nZXQodGhpcyxcImV2ZW50c1wiKXx8e30pW2IudHlwZV18fFtdLGs9ci5ldmVudC5zcGVjaWFsW2IudHlwZV18fHt9O2ZvcihpWzBdPWIsYz0xO2M8YXJndW1lbnRzLmxlbmd0aDtjKyspaVtjXT1hcmd1bWVudHNbY107aWYoYi5kZWxlZ2F0ZVRhcmdldD10aGlzLCFrLnByZURpc3BhdGNofHxrLnByZURpc3BhdGNoLmNhbGwodGhpcyxiKSE9PSExKXtoPXIuZXZlbnQuaGFuZGxlcnMuY2FsbCh0aGlzLGIsaiksYz0wO3doaWxlKChmPWhbYysrXSkmJiFiLmlzUHJvcGFnYXRpb25TdG9wcGVkKCkpe2IuY3VycmVudFRhcmdldD1mLmVsZW0sZD0wO3doaWxlKChnPWYuaGFuZGxlcnNbZCsrXSkmJiFiLmlzSW1tZWRpYXRlUHJvcGFnYXRpb25TdG9wcGVkKCkpYi5ybmFtZXNwYWNlJiYhYi5ybmFtZXNwYWNlLnRlc3QoZy5uYW1lc3BhY2UpfHwoYi5oYW5kbGVPYmo9ZyxiLmRhdGE9Zy5kYXRhLGU9KChyLmV2ZW50LnNwZWNpYWxbZy5vcmlnVHlwZV18fHt9KS5oYW5kbGV8fGcuaGFuZGxlcikuYXBwbHkoZi5lbGVtLGkpLHZvaWQgMCE9PWUmJihiLnJlc3VsdD1lKT09PSExJiYoYi5wcmV2ZW50RGVmYXVsdCgpLGIuc3RvcFByb3BhZ2F0aW9uKCkpKX1yZXR1cm4gay5wb3N0RGlzcGF0Y2gmJmsucG9zdERpc3BhdGNoLmNhbGwodGhpcyxiKSxiLnJlc3VsdH19LGhhbmRsZXJzOmZ1bmN0aW9uKGEsYil7dmFyIGMsZCxlLGYsZyxoPVtdLGk9Yi5kZWxlZ2F0ZUNvdW50LGo9YS50YXJnZXQ7aWYoaSYmai5ub2RlVHlwZSYmIShcImNsaWNrXCI9PT1hLnR5cGUmJmEuYnV0dG9uPj0xKSlmb3IoO2ohPT10aGlzO2o9ai5wYXJlbnROb2RlfHx0aGlzKWlmKDE9PT1qLm5vZGVUeXBlJiYoXCJjbGlja1wiIT09YS50eXBlfHxqLmRpc2FibGVkIT09ITApKXtmb3IoZj1bXSxnPXt9LGM9MDtjPGk7YysrKWQ9YltjXSxlPWQuc2VsZWN0b3IrXCIgXCIsdm9pZCAwPT09Z1tlXSYmKGdbZV09ZC5uZWVkc0NvbnRleHQ/cihlLHRoaXMpLmluZGV4KGopPi0xOnIuZmluZChlLHRoaXMsbnVsbCxbal0pLmxlbmd0aCksZ1tlXSYmZi5wdXNoKGQpO2YubGVuZ3RoJiZoLnB1c2goe2VsZW06aixoYW5kbGVyczpmfSl9cmV0dXJuIGo9dGhpcyxpPGIubGVuZ3RoJiZoLnB1c2goe2VsZW06aixoYW5kbGVyczpiLnNsaWNlKGkpfSksaH0sYWRkUHJvcDpmdW5jdGlvbihhLGIpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShyLkV2ZW50LnByb3RvdHlwZSxhLHtlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCxnZXQ6ci5pc0Z1bmN0aW9uKGIpP2Z1bmN0aW9uKCl7aWYodGhpcy5vcmlnaW5hbEV2ZW50KXJldHVybiBiKHRoaXMub3JpZ2luYWxFdmVudCl9OmZ1bmN0aW9uKCl7aWYodGhpcy5vcmlnaW5hbEV2ZW50KXJldHVybiB0aGlzLm9yaWdpbmFsRXZlbnRbYV19LHNldDpmdW5jdGlvbihiKXtPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcyxhLHtlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZTpifSl9fSl9LGZpeDpmdW5jdGlvbihhKXtyZXR1cm4gYVtyLmV4cGFuZG9dP2E6bmV3IHIuRXZlbnQoYSl9LHNwZWNpYWw6e2xvYWQ6e25vQnViYmxlOiEwfSxmb2N1czp7dHJpZ2dlcjpmdW5jdGlvbigpe2lmKHRoaXMhPT13YSgpJiZ0aGlzLmZvY3VzKXJldHVybiB0aGlzLmZvY3VzKCksITF9LGRlbGVnYXRlVHlwZTpcImZvY3VzaW5cIn0sYmx1cjp7dHJpZ2dlcjpmdW5jdGlvbigpe2lmKHRoaXM9PT13YSgpJiZ0aGlzLmJsdXIpcmV0dXJuIHRoaXMuYmx1cigpLCExfSxkZWxlZ2F0ZVR5cGU6XCJmb2N1c291dFwifSxjbGljazp7dHJpZ2dlcjpmdW5jdGlvbigpe2lmKFwiY2hlY2tib3hcIj09PXRoaXMudHlwZSYmdGhpcy5jbGljayYmci5ub2RlTmFtZSh0aGlzLFwiaW5wdXRcIikpcmV0dXJuIHRoaXMuY2xpY2soKSwhMX0sX2RlZmF1bHQ6ZnVuY3Rpb24oYSl7cmV0dXJuIHIubm9kZU5hbWUoYS50YXJnZXQsXCJhXCIpfX0sYmVmb3JldW5sb2FkOntwb3N0RGlzcGF0Y2g6ZnVuY3Rpb24oYSl7dm9pZCAwIT09YS5yZXN1bHQmJmEub3JpZ2luYWxFdmVudCYmKGEub3JpZ2luYWxFdmVudC5yZXR1cm5WYWx1ZT1hLnJlc3VsdCl9fX19LHIucmVtb3ZlRXZlbnQ9ZnVuY3Rpb24oYSxiLGMpe2EucmVtb3ZlRXZlbnRMaXN0ZW5lciYmYS5yZW1vdmVFdmVudExpc3RlbmVyKGIsYyl9LHIuRXZlbnQ9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gdGhpcyBpbnN0YW5jZW9mIHIuRXZlbnQ/KGEmJmEudHlwZT8odGhpcy5vcmlnaW5hbEV2ZW50PWEsdGhpcy50eXBlPWEudHlwZSx0aGlzLmlzRGVmYXVsdFByZXZlbnRlZD1hLmRlZmF1bHRQcmV2ZW50ZWR8fHZvaWQgMD09PWEuZGVmYXVsdFByZXZlbnRlZCYmYS5yZXR1cm5WYWx1ZT09PSExP3VhOnZhLHRoaXMudGFyZ2V0PWEudGFyZ2V0JiYzPT09YS50YXJnZXQubm9kZVR5cGU/YS50YXJnZXQucGFyZW50Tm9kZTphLnRhcmdldCx0aGlzLmN1cnJlbnRUYXJnZXQ9YS5jdXJyZW50VGFyZ2V0LHRoaXMucmVsYXRlZFRhcmdldD1hLnJlbGF0ZWRUYXJnZXQpOnRoaXMudHlwZT1hLGImJnIuZXh0ZW5kKHRoaXMsYiksdGhpcy50aW1lU3RhbXA9YSYmYS50aW1lU3RhbXB8fHIubm93KCksdm9pZCh0aGlzW3IuZXhwYW5kb109ITApKTpuZXcgci5FdmVudChhLGIpfSxyLkV2ZW50LnByb3RvdHlwZT17Y29uc3RydWN0b3I6ci5FdmVudCxpc0RlZmF1bHRQcmV2ZW50ZWQ6dmEsaXNQcm9wYWdhdGlvblN0b3BwZWQ6dmEsaXNJbW1lZGlhdGVQcm9wYWdhdGlvblN0b3BwZWQ6dmEsaXNTaW11bGF0ZWQ6ITEscHJldmVudERlZmF1bHQ6ZnVuY3Rpb24oKXt2YXIgYT10aGlzLm9yaWdpbmFsRXZlbnQ7dGhpcy5pc0RlZmF1bHRQcmV2ZW50ZWQ9dWEsYSYmIXRoaXMuaXNTaW11bGF0ZWQmJmEucHJldmVudERlZmF1bHQoKX0sc3RvcFByb3BhZ2F0aW9uOmZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5vcmlnaW5hbEV2ZW50O3RoaXMuaXNQcm9wYWdhdGlvblN0b3BwZWQ9dWEsYSYmIXRoaXMuaXNTaW11bGF0ZWQmJmEuc3RvcFByb3BhZ2F0aW9uKCl9LHN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbjpmdW5jdGlvbigpe3ZhciBhPXRoaXMub3JpZ2luYWxFdmVudDt0aGlzLmlzSW1tZWRpYXRlUHJvcGFnYXRpb25TdG9wcGVkPXVhLGEmJiF0aGlzLmlzU2ltdWxhdGVkJiZhLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpLHRoaXMuc3RvcFByb3BhZ2F0aW9uKCl9fSxyLmVhY2goe2FsdEtleTohMCxidWJibGVzOiEwLGNhbmNlbGFibGU6ITAsY2hhbmdlZFRvdWNoZXM6ITAsY3RybEtleTohMCxkZXRhaWw6ITAsZXZlbnRQaGFzZTohMCxtZXRhS2V5OiEwLHBhZ2VYOiEwLHBhZ2VZOiEwLHNoaWZ0S2V5OiEwLHZpZXc6ITAsXCJjaGFyXCI6ITAsY2hhckNvZGU6ITAsa2V5OiEwLGtleUNvZGU6ITAsYnV0dG9uOiEwLGJ1dHRvbnM6ITAsY2xpZW50WDohMCxjbGllbnRZOiEwLG9mZnNldFg6ITAsb2Zmc2V0WTohMCxwb2ludGVySWQ6ITAscG9pbnRlclR5cGU6ITAsc2NyZWVuWDohMCxzY3JlZW5ZOiEwLHRhcmdldFRvdWNoZXM6ITAsdG9FbGVtZW50OiEwLHRvdWNoZXM6ITAsd2hpY2g6ZnVuY3Rpb24oYSl7dmFyIGI9YS5idXR0b247cmV0dXJuIG51bGw9PWEud2hpY2gmJnJhLnRlc3QoYS50eXBlKT9udWxsIT1hLmNoYXJDb2RlP2EuY2hhckNvZGU6YS5rZXlDb2RlOiFhLndoaWNoJiZ2b2lkIDAhPT1iJiZzYS50ZXN0KGEudHlwZSk/MSZiPzE6MiZiPzM6NCZiPzI6MDphLndoaWNofX0sci5ldmVudC5hZGRQcm9wKSxyLmVhY2goe21vdXNlZW50ZXI6XCJtb3VzZW92ZXJcIixtb3VzZWxlYXZlOlwibW91c2VvdXRcIixwb2ludGVyZW50ZXI6XCJwb2ludGVyb3ZlclwiLHBvaW50ZXJsZWF2ZTpcInBvaW50ZXJvdXRcIn0sZnVuY3Rpb24oYSxiKXtyLmV2ZW50LnNwZWNpYWxbYV09e2RlbGVnYXRlVHlwZTpiLGJpbmRUeXBlOmIsaGFuZGxlOmZ1bmN0aW9uKGEpe3ZhciBjLGQ9dGhpcyxlPWEucmVsYXRlZFRhcmdldCxmPWEuaGFuZGxlT2JqO3JldHVybiBlJiYoZT09PWR8fHIuY29udGFpbnMoZCxlKSl8fChhLnR5cGU9Zi5vcmlnVHlwZSxjPWYuaGFuZGxlci5hcHBseSh0aGlzLGFyZ3VtZW50cyksYS50eXBlPWIpLGN9fX0pLHIuZm4uZXh0ZW5kKHtvbjpmdW5jdGlvbihhLGIsYyxkKXtyZXR1cm4geGEodGhpcyxhLGIsYyxkKX0sb25lOmZ1bmN0aW9uKGEsYixjLGQpe3JldHVybiB4YSh0aGlzLGEsYixjLGQsMSl9LG9mZjpmdW5jdGlvbihhLGIsYyl7dmFyIGQsZTtpZihhJiZhLnByZXZlbnREZWZhdWx0JiZhLmhhbmRsZU9iailyZXR1cm4gZD1hLmhhbmRsZU9iaixyKGEuZGVsZWdhdGVUYXJnZXQpLm9mZihkLm5hbWVzcGFjZT9kLm9yaWdUeXBlK1wiLlwiK2QubmFtZXNwYWNlOmQub3JpZ1R5cGUsZC5zZWxlY3RvcixkLmhhbmRsZXIpLHRoaXM7aWYoXCJvYmplY3RcIj09dHlwZW9mIGEpe2ZvcihlIGluIGEpdGhpcy5vZmYoZSxiLGFbZV0pO3JldHVybiB0aGlzfXJldHVybiBiIT09ITEmJlwiZnVuY3Rpb25cIiE9dHlwZW9mIGJ8fChjPWIsYj12b2lkIDApLGM9PT0hMSYmKGM9dmEpLHRoaXMuZWFjaChmdW5jdGlvbigpe3IuZXZlbnQucmVtb3ZlKHRoaXMsYSxjLGIpfSl9fSk7dmFyIHlhPS88KD8hYXJlYXxicnxjb2x8ZW1iZWR8aHJ8aW1nfGlucHV0fGxpbmt8bWV0YXxwYXJhbSkoKFthLXpdW15cXC9cXDA+XFx4MjBcXHRcXHJcXG5cXGZdKilbXj5dKilcXC8+L2dpLHphPS88c2NyaXB0fDxzdHlsZXw8bGluay9pLEFhPS9jaGVja2VkXFxzKig/OltePV18PVxccyouY2hlY2tlZC4pL2ksQmE9L150cnVlXFwvKC4qKS8sQ2E9L15cXHMqPCEoPzpcXFtDREFUQVxcW3wtLSl8KD86XFxdXFxdfC0tKT5cXHMqJC9nO2Z1bmN0aW9uIERhKGEsYil7cmV0dXJuIHIubm9kZU5hbWUoYSxcInRhYmxlXCIpJiZyLm5vZGVOYW1lKDExIT09Yi5ub2RlVHlwZT9iOmIuZmlyc3RDaGlsZCxcInRyXCIpP2EuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCJ0Ym9keVwiKVswXXx8YTphfWZ1bmN0aW9uIEVhKGEpe3JldHVybiBhLnR5cGU9KG51bGwhPT1hLmdldEF0dHJpYnV0ZShcInR5cGVcIikpK1wiL1wiK2EudHlwZSxhfWZ1bmN0aW9uIEZhKGEpe3ZhciBiPUJhLmV4ZWMoYS50eXBlKTtyZXR1cm4gYj9hLnR5cGU9YlsxXTphLnJlbW92ZUF0dHJpYnV0ZShcInR5cGVcIiksYX1mdW5jdGlvbiBHYShhLGIpe3ZhciBjLGQsZSxmLGcsaCxpLGo7aWYoMT09PWIubm9kZVR5cGUpe2lmKFYuaGFzRGF0YShhKSYmKGY9Vi5hY2Nlc3MoYSksZz1WLnNldChiLGYpLGo9Zi5ldmVudHMpKXtkZWxldGUgZy5oYW5kbGUsZy5ldmVudHM9e307Zm9yKGUgaW4gailmb3IoYz0wLGQ9altlXS5sZW5ndGg7YzxkO2MrKylyLmV2ZW50LmFkZChiLGUsaltlXVtjXSl9Vy5oYXNEYXRhKGEpJiYoaD1XLmFjY2VzcyhhKSxpPXIuZXh0ZW5kKHt9LGgpLFcuc2V0KGIsaSkpfX1mdW5jdGlvbiBIYShhLGIpe3ZhciBjPWIubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtcImlucHV0XCI9PT1jJiZpYS50ZXN0KGEudHlwZSk/Yi5jaGVja2VkPWEuY2hlY2tlZDpcImlucHV0XCIhPT1jJiZcInRleHRhcmVhXCIhPT1jfHwoYi5kZWZhdWx0VmFsdWU9YS5kZWZhdWx0VmFsdWUpfWZ1bmN0aW9uIElhKGEsYixjLGQpe2I9Zy5hcHBseShbXSxiKTt2YXIgZSxmLGgsaSxqLGssbD0wLG09YS5sZW5ndGgsbj1tLTEscT1iWzBdLHM9ci5pc0Z1bmN0aW9uKHEpO2lmKHN8fG0+MSYmXCJzdHJpbmdcIj09dHlwZW9mIHEmJiFvLmNoZWNrQ2xvbmUmJkFhLnRlc3QocSkpcmV0dXJuIGEuZWFjaChmdW5jdGlvbihlKXt2YXIgZj1hLmVxKGUpO3MmJihiWzBdPXEuY2FsbCh0aGlzLGUsZi5odG1sKCkpKSxJYShmLGIsYyxkKX0pO2lmKG0mJihlPXBhKGIsYVswXS5vd25lckRvY3VtZW50LCExLGEsZCksZj1lLmZpcnN0Q2hpbGQsMT09PWUuY2hpbGROb2Rlcy5sZW5ndGgmJihlPWYpLGZ8fGQpKXtmb3IoaD1yLm1hcChtYShlLFwic2NyaXB0XCIpLEVhKSxpPWgubGVuZ3RoO2w8bTtsKyspaj1lLGwhPT1uJiYoaj1yLmNsb25lKGosITAsITApLGkmJnIubWVyZ2UoaCxtYShqLFwic2NyaXB0XCIpKSksYy5jYWxsKGFbbF0saixsKTtpZihpKWZvcihrPWhbaC5sZW5ndGgtMV0ub3duZXJEb2N1bWVudCxyLm1hcChoLEZhKSxsPTA7bDxpO2wrKylqPWhbbF0sa2EudGVzdChqLnR5cGV8fFwiXCIpJiYhVi5hY2Nlc3MoaixcImdsb2JhbEV2YWxcIikmJnIuY29udGFpbnMoayxqKSYmKGouc3JjP3IuX2V2YWxVcmwmJnIuX2V2YWxVcmwoai5zcmMpOnAoai50ZXh0Q29udGVudC5yZXBsYWNlKENhLFwiXCIpLGspKX1yZXR1cm4gYX1mdW5jdGlvbiBKYShhLGIsYyl7Zm9yKHZhciBkLGU9Yj9yLmZpbHRlcihiLGEpOmEsZj0wO251bGwhPShkPWVbZl0pO2YrKyljfHwxIT09ZC5ub2RlVHlwZXx8ci5jbGVhbkRhdGEobWEoZCkpLGQucGFyZW50Tm9kZSYmKGMmJnIuY29udGFpbnMoZC5vd25lckRvY3VtZW50LGQpJiZuYShtYShkLFwic2NyaXB0XCIpKSxkLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoZCkpO3JldHVybiBhfXIuZXh0ZW5kKHtodG1sUHJlZmlsdGVyOmZ1bmN0aW9uKGEpe3JldHVybiBhLnJlcGxhY2UoeWEsXCI8JDE+PC8kMj5cIil9LGNsb25lOmZ1bmN0aW9uKGEsYixjKXt2YXIgZCxlLGYsZyxoPWEuY2xvbmVOb2RlKCEwKSxpPXIuY29udGFpbnMoYS5vd25lckRvY3VtZW50LGEpO2lmKCEoby5ub0Nsb25lQ2hlY2tlZHx8MSE9PWEubm9kZVR5cGUmJjExIT09YS5ub2RlVHlwZXx8ci5pc1hNTERvYyhhKSkpZm9yKGc9bWEoaCksZj1tYShhKSxkPTAsZT1mLmxlbmd0aDtkPGU7ZCsrKUhhKGZbZF0sZ1tkXSk7aWYoYilpZihjKWZvcihmPWZ8fG1hKGEpLGc9Z3x8bWEoaCksZD0wLGU9Zi5sZW5ndGg7ZDxlO2QrKylHYShmW2RdLGdbZF0pO2Vsc2UgR2EoYSxoKTtyZXR1cm4gZz1tYShoLFwic2NyaXB0XCIpLGcubGVuZ3RoPjAmJm5hKGcsIWkmJm1hKGEsXCJzY3JpcHRcIikpLGh9LGNsZWFuRGF0YTpmdW5jdGlvbihhKXtmb3IodmFyIGIsYyxkLGU9ci5ldmVudC5zcGVjaWFsLGY9MDt2b2lkIDAhPT0oYz1hW2ZdKTtmKyspaWYoVChjKSl7aWYoYj1jW1YuZXhwYW5kb10pe2lmKGIuZXZlbnRzKWZvcihkIGluIGIuZXZlbnRzKWVbZF0/ci5ldmVudC5yZW1vdmUoYyxkKTpyLnJlbW92ZUV2ZW50KGMsZCxiLmhhbmRsZSk7Y1tWLmV4cGFuZG9dPXZvaWQgMH1jW1cuZXhwYW5kb10mJihjW1cuZXhwYW5kb109dm9pZCAwKX19fSksci5mbi5leHRlbmQoe2RldGFjaDpmdW5jdGlvbihhKXtyZXR1cm4gSmEodGhpcyxhLCEwKX0scmVtb3ZlOmZ1bmN0aW9uKGEpe3JldHVybiBKYSh0aGlzLGEpfSx0ZXh0OmZ1bmN0aW9uKGEpe3JldHVybiBTKHRoaXMsZnVuY3Rpb24oYSl7cmV0dXJuIHZvaWQgMD09PWE/ci50ZXh0KHRoaXMpOnRoaXMuZW1wdHkoKS5lYWNoKGZ1bmN0aW9uKCl7MSE9PXRoaXMubm9kZVR5cGUmJjExIT09dGhpcy5ub2RlVHlwZSYmOSE9PXRoaXMubm9kZVR5cGV8fCh0aGlzLnRleHRDb250ZW50PWEpfSl9LG51bGwsYSxhcmd1bWVudHMubGVuZ3RoKX0sYXBwZW5kOmZ1bmN0aW9uKCl7cmV0dXJuIElhKHRoaXMsYXJndW1lbnRzLGZ1bmN0aW9uKGEpe2lmKDE9PT10aGlzLm5vZGVUeXBlfHwxMT09PXRoaXMubm9kZVR5cGV8fDk9PT10aGlzLm5vZGVUeXBlKXt2YXIgYj1EYSh0aGlzLGEpO2IuYXBwZW5kQ2hpbGQoYSl9fSl9LHByZXBlbmQ6ZnVuY3Rpb24oKXtyZXR1cm4gSWEodGhpcyxhcmd1bWVudHMsZnVuY3Rpb24oYSl7aWYoMT09PXRoaXMubm9kZVR5cGV8fDExPT09dGhpcy5ub2RlVHlwZXx8OT09PXRoaXMubm9kZVR5cGUpe3ZhciBiPURhKHRoaXMsYSk7Yi5pbnNlcnRCZWZvcmUoYSxiLmZpcnN0Q2hpbGQpfX0pfSxiZWZvcmU6ZnVuY3Rpb24oKXtyZXR1cm4gSWEodGhpcyxhcmd1bWVudHMsZnVuY3Rpb24oYSl7dGhpcy5wYXJlbnROb2RlJiZ0aGlzLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGEsdGhpcyl9KX0sYWZ0ZXI6ZnVuY3Rpb24oKXtyZXR1cm4gSWEodGhpcyxhcmd1bWVudHMsZnVuY3Rpb24oYSl7dGhpcy5wYXJlbnROb2RlJiZ0aGlzLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGEsdGhpcy5uZXh0U2libGluZyl9KX0sZW1wdHk6ZnVuY3Rpb24oKXtmb3IodmFyIGEsYj0wO251bGwhPShhPXRoaXNbYl0pO2IrKykxPT09YS5ub2RlVHlwZSYmKHIuY2xlYW5EYXRhKG1hKGEsITEpKSxhLnRleHRDb250ZW50PVwiXCIpO3JldHVybiB0aGlzfSxjbG9uZTpmdW5jdGlvbihhLGIpe3JldHVybiBhPW51bGwhPWEmJmEsYj1udWxsPT1iP2E6Yix0aGlzLm1hcChmdW5jdGlvbigpe3JldHVybiByLmNsb25lKHRoaXMsYSxiKX0pfSxodG1sOmZ1bmN0aW9uKGEpe3JldHVybiBTKHRoaXMsZnVuY3Rpb24oYSl7dmFyIGI9dGhpc1swXXx8e30sYz0wLGQ9dGhpcy5sZW5ndGg7aWYodm9pZCAwPT09YSYmMT09PWIubm9kZVR5cGUpcmV0dXJuIGIuaW5uZXJIVE1MO2lmKFwic3RyaW5nXCI9PXR5cGVvZiBhJiYhemEudGVzdChhKSYmIWxhWyhqYS5leGVjKGEpfHxbXCJcIixcIlwiXSlbMV0udG9Mb3dlckNhc2UoKV0pe2E9ci5odG1sUHJlZmlsdGVyKGEpO3RyeXtmb3IoO2M8ZDtjKyspYj10aGlzW2NdfHx7fSwxPT09Yi5ub2RlVHlwZSYmKHIuY2xlYW5EYXRhKG1hKGIsITEpKSxiLmlubmVySFRNTD1hKTtiPTB9Y2F0Y2goZSl7fX1iJiZ0aGlzLmVtcHR5KCkuYXBwZW5kKGEpfSxudWxsLGEsYXJndW1lbnRzLmxlbmd0aCl9LHJlcGxhY2VXaXRoOmZ1bmN0aW9uKCl7dmFyIGE9W107cmV0dXJuIElhKHRoaXMsYXJndW1lbnRzLGZ1bmN0aW9uKGIpe3ZhciBjPXRoaXMucGFyZW50Tm9kZTtyLmluQXJyYXkodGhpcyxhKTwwJiYoci5jbGVhbkRhdGEobWEodGhpcykpLGMmJmMucmVwbGFjZUNoaWxkKGIsdGhpcykpfSxhKX19KSxyLmVhY2goe2FwcGVuZFRvOlwiYXBwZW5kXCIscHJlcGVuZFRvOlwicHJlcGVuZFwiLGluc2VydEJlZm9yZTpcImJlZm9yZVwiLGluc2VydEFmdGVyOlwiYWZ0ZXJcIixyZXBsYWNlQWxsOlwicmVwbGFjZVdpdGhcIn0sZnVuY3Rpb24oYSxiKXtyLmZuW2FdPWZ1bmN0aW9uKGEpe2Zvcih2YXIgYyxkPVtdLGU9cihhKSxmPWUubGVuZ3RoLTEsZz0wO2c8PWY7ZysrKWM9Zz09PWY/dGhpczp0aGlzLmNsb25lKCEwKSxyKGVbZ10pW2JdKGMpLGguYXBwbHkoZCxjLmdldCgpKTtyZXR1cm4gdGhpcy5wdXNoU3RhY2soZCl9fSk7dmFyIEthPS9ebWFyZ2luLyxMYT1uZXcgUmVnRXhwKFwiXihcIitfK1wiKSg/IXB4KVthLXolXSskXCIsXCJpXCIpLE1hPWZ1bmN0aW9uKGIpe3ZhciBjPWIub3duZXJEb2N1bWVudC5kZWZhdWx0VmlldztyZXR1cm4gYyYmYy5vcGVuZXJ8fChjPWEpLGMuZ2V0Q29tcHV0ZWRTdHlsZShiKX07IWZ1bmN0aW9uKCl7ZnVuY3Rpb24gYigpe2lmKGkpe2kuc3R5bGUuY3NzVGV4dD1cImJveC1zaXppbmc6Ym9yZGVyLWJveDtwb3NpdGlvbjpyZWxhdGl2ZTtkaXNwbGF5OmJsb2NrO21hcmdpbjphdXRvO2JvcmRlcjoxcHg7cGFkZGluZzoxcHg7dG9wOjElO3dpZHRoOjUwJVwiLGkuaW5uZXJIVE1MPVwiXCIscWEuYXBwZW5kQ2hpbGQoaCk7dmFyIGI9YS5nZXRDb21wdXRlZFN0eWxlKGkpO2M9XCIxJVwiIT09Yi50b3AsZz1cIjJweFwiPT09Yi5tYXJnaW5MZWZ0LGU9XCI0cHhcIj09PWIud2lkdGgsaS5zdHlsZS5tYXJnaW5SaWdodD1cIjUwJVwiLGY9XCI0cHhcIj09PWIubWFyZ2luUmlnaHQscWEucmVtb3ZlQ2hpbGQoaCksaT1udWxsfX12YXIgYyxlLGYsZyxoPWQuY3JlYXRlRWxlbWVudChcImRpdlwiKSxpPWQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtpLnN0eWxlJiYoaS5zdHlsZS5iYWNrZ3JvdW5kQ2xpcD1cImNvbnRlbnQtYm94XCIsaS5jbG9uZU5vZGUoITApLnN0eWxlLmJhY2tncm91bmRDbGlwPVwiXCIsby5jbGVhckNsb25lU3R5bGU9XCJjb250ZW50LWJveFwiPT09aS5zdHlsZS5iYWNrZ3JvdW5kQ2xpcCxoLnN0eWxlLmNzc1RleHQ9XCJib3JkZXI6MDt3aWR0aDo4cHg7aGVpZ2h0OjA7dG9wOjA7bGVmdDotOTk5OXB4O3BhZGRpbmc6MDttYXJnaW4tdG9wOjFweDtwb3NpdGlvbjphYnNvbHV0ZVwiLGguYXBwZW5kQ2hpbGQoaSksci5leHRlbmQobyx7cGl4ZWxQb3NpdGlvbjpmdW5jdGlvbigpe3JldHVybiBiKCksY30sYm94U2l6aW5nUmVsaWFibGU6ZnVuY3Rpb24oKXtyZXR1cm4gYigpLGV9LHBpeGVsTWFyZ2luUmlnaHQ6ZnVuY3Rpb24oKXtyZXR1cm4gYigpLGZ9LHJlbGlhYmxlTWFyZ2luTGVmdDpmdW5jdGlvbigpe3JldHVybiBiKCksZ319KSl9KCk7ZnVuY3Rpb24gTmEoYSxiLGMpe3ZhciBkLGUsZixnLGg9YS5zdHlsZTtyZXR1cm4gYz1jfHxNYShhKSxjJiYoZz1jLmdldFByb3BlcnR5VmFsdWUoYil8fGNbYl0sXCJcIiE9PWd8fHIuY29udGFpbnMoYS5vd25lckRvY3VtZW50LGEpfHwoZz1yLnN0eWxlKGEsYikpLCFvLnBpeGVsTWFyZ2luUmlnaHQoKSYmTGEudGVzdChnKSYmS2EudGVzdChiKSYmKGQ9aC53aWR0aCxlPWgubWluV2lkdGgsZj1oLm1heFdpZHRoLGgubWluV2lkdGg9aC5tYXhXaWR0aD1oLndpZHRoPWcsZz1jLndpZHRoLGgud2lkdGg9ZCxoLm1pbldpZHRoPWUsaC5tYXhXaWR0aD1mKSksdm9pZCAwIT09Zz9nK1wiXCI6Z31mdW5jdGlvbiBPYShhLGIpe3JldHVybntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gYSgpP3ZvaWQgZGVsZXRlIHRoaXMuZ2V0Oih0aGlzLmdldD1iKS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fX12YXIgUGE9L14obm9uZXx0YWJsZSg/IS1jW2VhXSkuKykvLFFhPXtwb3NpdGlvbjpcImFic29sdXRlXCIsdmlzaWJpbGl0eTpcImhpZGRlblwiLGRpc3BsYXk6XCJibG9ja1wifSxSYT17bGV0dGVyU3BhY2luZzpcIjBcIixmb250V2VpZ2h0OlwiNDAwXCJ9LFNhPVtcIldlYmtpdFwiLFwiTW96XCIsXCJtc1wiXSxUYT1kLmNyZWF0ZUVsZW1lbnQoXCJkaXZcIikuc3R5bGU7ZnVuY3Rpb24gVWEoYSl7aWYoYSBpbiBUYSlyZXR1cm4gYTt2YXIgYj1hWzBdLnRvVXBwZXJDYXNlKCkrYS5zbGljZSgxKSxjPVNhLmxlbmd0aDt3aGlsZShjLS0paWYoYT1TYVtjXStiLGEgaW4gVGEpcmV0dXJuIGF9ZnVuY3Rpb24gVmEoYSxiLGMpe3ZhciBkPWFhLmV4ZWMoYik7cmV0dXJuIGQ/TWF0aC5tYXgoMCxkWzJdLShjfHwwKSkrKGRbM118fFwicHhcIik6Yn1mdW5jdGlvbiBXYShhLGIsYyxkLGUpe3ZhciBmLGc9MDtmb3IoZj1jPT09KGQ/XCJib3JkZXJcIjpcImNvbnRlbnRcIik/NDpcIndpZHRoXCI9PT1iPzE6MDtmPDQ7Zis9MilcIm1hcmdpblwiPT09YyYmKGcrPXIuY3NzKGEsYytiYVtmXSwhMCxlKSksZD8oXCJjb250ZW50XCI9PT1jJiYoZy09ci5jc3MoYSxcInBhZGRpbmdcIitiYVtmXSwhMCxlKSksXCJtYXJnaW5cIiE9PWMmJihnLT1yLmNzcyhhLFwiYm9yZGVyXCIrYmFbZl0rXCJXaWR0aFwiLCEwLGUpKSk6KGcrPXIuY3NzKGEsXCJwYWRkaW5nXCIrYmFbZl0sITAsZSksXCJwYWRkaW5nXCIhPT1jJiYoZys9ci5jc3MoYSxcImJvcmRlclwiK2JhW2ZdK1wiV2lkdGhcIiwhMCxlKSkpO3JldHVybiBnfWZ1bmN0aW9uIFhhKGEsYixjKXt2YXIgZCxlPSEwLGY9TWEoYSksZz1cImJvcmRlci1ib3hcIj09PXIuY3NzKGEsXCJib3hTaXppbmdcIiwhMSxmKTtpZihhLmdldENsaWVudFJlY3RzKCkubGVuZ3RoJiYoZD1hLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpW2JdKSxkPD0wfHxudWxsPT1kKXtpZihkPU5hKGEsYixmKSwoZDwwfHxudWxsPT1kKSYmKGQ9YS5zdHlsZVtiXSksTGEudGVzdChkKSlyZXR1cm4gZDtlPWcmJihvLmJveFNpemluZ1JlbGlhYmxlKCl8fGQ9PT1hLnN0eWxlW2JdKSxkPXBhcnNlRmxvYXQoZCl8fDB9cmV0dXJuIGQrV2EoYSxiLGN8fChnP1wiYm9yZGVyXCI6XCJjb250ZW50XCIpLGUsZikrXCJweFwifXIuZXh0ZW5kKHtjc3NIb29rczp7b3BhY2l0eTp7Z2V0OmZ1bmN0aW9uKGEsYil7aWYoYil7dmFyIGM9TmEoYSxcIm9wYWNpdHlcIik7cmV0dXJuXCJcIj09PWM/XCIxXCI6Y319fX0sY3NzTnVtYmVyOnthbmltYXRpb25JdGVyYXRpb25Db3VudDohMCxjb2x1bW5Db3VudDohMCxmaWxsT3BhY2l0eTohMCxmbGV4R3JvdzohMCxmbGV4U2hyaW5rOiEwLGZvbnRXZWlnaHQ6ITAsbGluZUhlaWdodDohMCxvcGFjaXR5OiEwLG9yZGVyOiEwLG9ycGhhbnM6ITAsd2lkb3dzOiEwLHpJbmRleDohMCx6b29tOiEwfSxjc3NQcm9wczp7XCJmbG9hdFwiOlwiY3NzRmxvYXRcIn0sc3R5bGU6ZnVuY3Rpb24oYSxiLGMsZCl7aWYoYSYmMyE9PWEubm9kZVR5cGUmJjghPT1hLm5vZGVUeXBlJiZhLnN0eWxlKXt2YXIgZSxmLGcsaD1yLmNhbWVsQ2FzZShiKSxpPWEuc3R5bGU7cmV0dXJuIGI9ci5jc3NQcm9wc1toXXx8KHIuY3NzUHJvcHNbaF09VWEoaCl8fGgpLGc9ci5jc3NIb29rc1tiXXx8ci5jc3NIb29rc1toXSx2b2lkIDA9PT1jP2cmJlwiZ2V0XCJpbiBnJiZ2b2lkIDAhPT0oZT1nLmdldChhLCExLGQpKT9lOmlbYl06KGY9dHlwZW9mIGMsXCJzdHJpbmdcIj09PWYmJihlPWFhLmV4ZWMoYykpJiZlWzFdJiYoYz1lYShhLGIsZSksZj1cIm51bWJlclwiKSxudWxsIT1jJiZjPT09YyYmKFwibnVtYmVyXCI9PT1mJiYoYys9ZSYmZVszXXx8KHIuY3NzTnVtYmVyW2hdP1wiXCI6XCJweFwiKSksby5jbGVhckNsb25lU3R5bGV8fFwiXCIhPT1jfHwwIT09Yi5pbmRleE9mKFwiYmFja2dyb3VuZFwiKXx8KGlbYl09XCJpbmhlcml0XCIpLGcmJlwic2V0XCJpbiBnJiZ2b2lkIDA9PT0oYz1nLnNldChhLGMsZCkpfHwoaVtiXT1jKSksdm9pZCAwKX19LGNzczpmdW5jdGlvbihhLGIsYyxkKXt2YXIgZSxmLGcsaD1yLmNhbWVsQ2FzZShiKTtyZXR1cm4gYj1yLmNzc1Byb3BzW2hdfHwoci5jc3NQcm9wc1toXT1VYShoKXx8aCksZz1yLmNzc0hvb2tzW2JdfHxyLmNzc0hvb2tzW2hdLGcmJlwiZ2V0XCJpbiBnJiYoZT1nLmdldChhLCEwLGMpKSx2b2lkIDA9PT1lJiYoZT1OYShhLGIsZCkpLFwibm9ybWFsXCI9PT1lJiZiIGluIFJhJiYoZT1SYVtiXSksXCJcIj09PWN8fGM/KGY9cGFyc2VGbG9hdChlKSxjPT09ITB8fGlzRmluaXRlKGYpP2Z8fDA6ZSk6ZX19KSxyLmVhY2goW1wiaGVpZ2h0XCIsXCJ3aWR0aFwiXSxmdW5jdGlvbihhLGIpe3IuY3NzSG9va3NbYl09e2dldDpmdW5jdGlvbihhLGMsZCl7aWYoYylyZXR1cm4hUGEudGVzdChyLmNzcyhhLFwiZGlzcGxheVwiKSl8fGEuZ2V0Q2xpZW50UmVjdHMoKS5sZW5ndGgmJmEuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGg/WGEoYSxiLGQpOmRhKGEsUWEsZnVuY3Rpb24oKXtyZXR1cm4gWGEoYSxiLGQpfSl9LHNldDpmdW5jdGlvbihhLGMsZCl7dmFyIGUsZj1kJiZNYShhKSxnPWQmJldhKGEsYixkLFwiYm9yZGVyLWJveFwiPT09ci5jc3MoYSxcImJveFNpemluZ1wiLCExLGYpLGYpO3JldHVybiBnJiYoZT1hYS5leGVjKGMpKSYmXCJweFwiIT09KGVbM118fFwicHhcIikmJihhLnN0eWxlW2JdPWMsYz1yLmNzcyhhLGIpKSxWYShhLGMsZyl9fX0pLHIuY3NzSG9va3MubWFyZ2luTGVmdD1PYShvLnJlbGlhYmxlTWFyZ2luTGVmdCxmdW5jdGlvbihhLGIpe2lmKGIpcmV0dXJuKHBhcnNlRmxvYXQoTmEoYSxcIm1hcmdpbkxlZnRcIikpfHxhLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmxlZnQtZGEoYSx7bWFyZ2luTGVmdDowfSxmdW5jdGlvbigpe3JldHVybiBhLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmxlZnR9KSkrXCJweFwifSksci5lYWNoKHttYXJnaW46XCJcIixwYWRkaW5nOlwiXCIsYm9yZGVyOlwiV2lkdGhcIn0sZnVuY3Rpb24oYSxiKXtyLmNzc0hvb2tzW2ErYl09e2V4cGFuZDpmdW5jdGlvbihjKXtmb3IodmFyIGQ9MCxlPXt9LGY9XCJzdHJpbmdcIj09dHlwZW9mIGM/Yy5zcGxpdChcIiBcIik6W2NdO2Q8NDtkKyspZVthK2JhW2RdK2JdPWZbZF18fGZbZC0yXXx8ZlswXTtyZXR1cm4gZX19LEthLnRlc3QoYSl8fChyLmNzc0hvb2tzW2ErYl0uc2V0PVZhKX0pLHIuZm4uZXh0ZW5kKHtjc3M6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gUyh0aGlzLGZ1bmN0aW9uKGEsYixjKXt2YXIgZCxlLGY9e30sZz0wO2lmKHIuaXNBcnJheShiKSl7Zm9yKGQ9TWEoYSksZT1iLmxlbmd0aDtnPGU7ZysrKWZbYltnXV09ci5jc3MoYSxiW2ddLCExLGQpO3JldHVybiBmfXJldHVybiB2b2lkIDAhPT1jP3Iuc3R5bGUoYSxiLGMpOnIuY3NzKGEsYil9LGEsYixhcmd1bWVudHMubGVuZ3RoPjEpfX0pLHIuZm4uZGVsYXk9ZnVuY3Rpb24oYixjKXtyZXR1cm4gYj1yLmZ4P3IuZnguc3BlZWRzW2JdfHxiOmIsYz1jfHxcImZ4XCIsdGhpcy5xdWV1ZShjLGZ1bmN0aW9uKGMsZCl7dmFyIGU9YS5zZXRUaW1lb3V0KGMsYik7ZC5zdG9wPWZ1bmN0aW9uKCl7YS5jbGVhclRpbWVvdXQoZSl9fSl9LGZ1bmN0aW9uKCl7dmFyIGE9ZC5jcmVhdGVFbGVtZW50KFwiaW5wdXRcIiksYj1kLmNyZWF0ZUVsZW1lbnQoXCJzZWxlY3RcIiksYz1iLmFwcGVuZENoaWxkKGQuY3JlYXRlRWxlbWVudChcIm9wdGlvblwiKSk7YS50eXBlPVwiY2hlY2tib3hcIixvLmNoZWNrT249XCJcIiE9PWEudmFsdWUsby5vcHRTZWxlY3RlZD1jLnNlbGVjdGVkLGE9ZC5jcmVhdGVFbGVtZW50KFwiaW5wdXRcIiksYS52YWx1ZT1cInRcIixhLnR5cGU9XCJyYWRpb1wiLG8ucmFkaW9WYWx1ZT1cInRcIj09PWEudmFsdWV9KCk7dmFyIFlhLFphPXIuZXhwci5hdHRySGFuZGxlO3IuZm4uZXh0ZW5kKHthdHRyOmZ1bmN0aW9uKGEsYil7cmV0dXJuIFModGhpcyxyLmF0dHIsYSxiLGFyZ3VtZW50cy5sZW5ndGg+MSl9LHJlbW92ZUF0dHI6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe3IucmVtb3ZlQXR0cih0aGlzLGEpfSl9fSksci5leHRlbmQoe2F0dHI6ZnVuY3Rpb24oYSxiLGMpe3ZhciBkLGUsZj1hLm5vZGVUeXBlO2lmKDMhPT1mJiY4IT09ZiYmMiE9PWYpcmV0dXJuXCJ1bmRlZmluZWRcIj09dHlwZW9mIGEuZ2V0QXR0cmlidXRlP3IucHJvcChhLGIsYyk6KDE9PT1mJiZyLmlzWE1MRG9jKGEpfHwoZT1yLmF0dHJIb29rc1tiLnRvTG93ZXJDYXNlKCldfHwoci5leHByLm1hdGNoLmJvb2wudGVzdChiKT9ZYTp2b2lkIDApKSx2b2lkIDAhPT1jP251bGw9PT1jP3ZvaWQgci5yZW1vdmVBdHRyKGEsYik6ZSYmXCJzZXRcImluIGUmJnZvaWQgMCE9PShkPWUuc2V0KGEsYyxiKSk/ZDooYS5zZXRBdHRyaWJ1dGUoYixjK1wiXCIpLGMpOmUmJlwiZ2V0XCJpbiBlJiZudWxsIT09KGQ9ZS5nZXQoYSxiKSk/ZDooZD1yLmZpbmQuYXR0cihhLGIpLG51bGw9PWQ/dm9pZCAwOmQpKX0sYXR0ckhvb2tzOnt0eXBlOntzZXQ6ZnVuY3Rpb24oYSxiKXtpZighby5yYWRpb1ZhbHVlJiZcInJhZGlvXCI9PT1iJiZyLm5vZGVOYW1lKGEsXCJpbnB1dFwiKSl7dmFyIGM9YS52YWx1ZTtyZXR1cm4gYS5zZXRBdHRyaWJ1dGUoXCJ0eXBlXCIsYiksYyYmKGEudmFsdWU9YyksYn19fX0scmVtb3ZlQXR0cjpmdW5jdGlvbihhLGIpe3ZhciBjLGQ9MCxlPWImJmIubWF0Y2goSyk7aWYoZSYmMT09PWEubm9kZVR5cGUpd2hpbGUoYz1lW2QrK10pYS5yZW1vdmVBdHRyaWJ1dGUoYyl9fSksWWE9e3NldDpmdW5jdGlvbihhLGIsYyl7cmV0dXJuIGI9PT0hMT9yLnJlbW92ZUF0dHIoYSxjKTphLnNldEF0dHJpYnV0ZShjLGMpLGN9fSxyLmVhY2goci5leHByLm1hdGNoLmJvb2wuc291cmNlLm1hdGNoKC9cXHcrL2cpLGZ1bmN0aW9uKGEsYil7dmFyIGM9WmFbYl18fHIuZmluZC5hdHRyO1phW2JdPWZ1bmN0aW9uKGEsYixkKXt2YXIgZSxmLGc9Yi50b0xvd2VyQ2FzZSgpO3JldHVybiBkfHwoZj1aYVtnXSxaYVtnXT1lLGU9bnVsbCE9YyhhLGIsZCk/ZzpudWxsLFphW2ddPWYpLGV9fSk7dmFyICRhPS9eKD86aW5wdXR8c2VsZWN0fHRleHRhcmVhfGJ1dHRvbikkL2ksX2E9L14oPzphfGFyZWEpJC9pO3IuZm4uZXh0ZW5kKHtwcm9wOmZ1bmN0aW9uKGEsYil7cmV0dXJuIFModGhpcyxyLnByb3AsYSxiLGFyZ3VtZW50cy5sZW5ndGg+MSl9LHJlbW92ZVByb3A6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe2RlbGV0ZSB0aGlzW3IucHJvcEZpeFthXXx8YV19KX19KSxyLmV4dGVuZCh7cHJvcDpmdW5jdGlvbihhLGIsYyl7dmFyIGQsZSxmPWEubm9kZVR5cGU7aWYoMyE9PWYmJjghPT1mJiYyIT09ZilyZXR1cm4gMT09PWYmJnIuaXNYTUxEb2MoYSl8fChiPXIucHJvcEZpeFtiXXx8YixlPXIucHJvcEhvb2tzW2JdKSx2b2lkIDAhPT1jP2UmJlwic2V0XCJpbiBlJiZ2b2lkIDAhPT0oZD1lLnNldChhLGMsYikpP2Q6YVtiXT1jOmUmJlwiZ2V0XCJpbiBlJiZudWxsIT09KGQ9ZS5nZXQoYSxiKSk/ZDphW2JdfSxwcm9wSG9va3M6e3RhYkluZGV4OntnZXQ6ZnVuY3Rpb24oYSl7dmFyIGI9ci5maW5kLmF0dHIoYSxcInRhYmluZGV4XCIpO3JldHVybiBiP3BhcnNlSW50KGIsMTApOiRhLnRlc3QoYS5ub2RlTmFtZSl8fF9hLnRlc3QoYS5ub2RlTmFtZSkmJmEuaHJlZj8wOi0xfX19LHByb3BGaXg6e1wiZm9yXCI6XCJodG1sRm9yXCIsXCJjbGFzc1wiOlwiY2xhc3NOYW1lXCJ9fSksby5vcHRTZWxlY3RlZHx8KHIucHJvcEhvb2tzLnNlbGVjdGVkPXtnZXQ6ZnVuY3Rpb24oYSl7dmFyIGI9YS5wYXJlbnROb2RlO3JldHVybiBiJiZiLnBhcmVudE5vZGUmJmIucGFyZW50Tm9kZS5zZWxlY3RlZEluZGV4LG51bGx9LHNldDpmdW5jdGlvbihhKXt2YXIgYj1hLnBhcmVudE5vZGU7YiYmKGIuc2VsZWN0ZWRJbmRleCxiLnBhcmVudE5vZGUmJmIucGFyZW50Tm9kZS5zZWxlY3RlZEluZGV4KX19KSxyLmVhY2goW1widGFiSW5kZXhcIixcInJlYWRPbmx5XCIsXCJtYXhMZW5ndGhcIixcImNlbGxTcGFjaW5nXCIsXCJjZWxsUGFkZGluZ1wiLFwicm93U3BhblwiLFwiY29sU3BhblwiLFwidXNlTWFwXCIsXCJmcmFtZUJvcmRlclwiLFwiY29udGVudEVkaXRhYmxlXCJdLGZ1bmN0aW9uKCl7ci5wcm9wRml4W3RoaXMudG9Mb3dlckNhc2UoKV09dGhpc30pO2Z1bmN0aW9uIGFiKGEpe3ZhciBiPWEubWF0Y2goSyl8fFtdO3JldHVybiBiLmpvaW4oXCIgXCIpfWZ1bmN0aW9uIGJiKGEpe3JldHVybiBhLmdldEF0dHJpYnV0ZSYmYS5nZXRBdHRyaWJ1dGUoXCJjbGFzc1wiKXx8XCJcIn1yLmZuLmV4dGVuZCh7YWRkQ2xhc3M6ZnVuY3Rpb24oYSl7dmFyIGIsYyxkLGUsZixnLGgsaT0wO2lmKHIuaXNGdW5jdGlvbihhKSlyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKGIpe3IodGhpcykuYWRkQ2xhc3MoYS5jYWxsKHRoaXMsYixiYih0aGlzKSkpfSk7aWYoXCJzdHJpbmdcIj09dHlwZW9mIGEmJmEpe2I9YS5tYXRjaChLKXx8W107d2hpbGUoYz10aGlzW2krK10paWYoZT1iYihjKSxkPTE9PT1jLm5vZGVUeXBlJiZcIiBcIithYihlKStcIiBcIil7Zz0wO3doaWxlKGY9YltnKytdKWQuaW5kZXhPZihcIiBcIitmK1wiIFwiKTwwJiYoZCs9ZitcIiBcIik7aD1hYihkKSxlIT09aCYmYy5zZXRBdHRyaWJ1dGUoXCJjbGFzc1wiLGgpfX1yZXR1cm4gdGhpc30scmVtb3ZlQ2xhc3M6ZnVuY3Rpb24oYSl7dmFyIGIsYyxkLGUsZixnLGgsaT0wO2lmKHIuaXNGdW5jdGlvbihhKSlyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKGIpe3IodGhpcykucmVtb3ZlQ2xhc3MoYS5jYWxsKHRoaXMsYixiYih0aGlzKSkpfSk7aWYoIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIHRoaXMuYXR0cihcImNsYXNzXCIsXCJcIik7aWYoXCJzdHJpbmdcIj09dHlwZW9mIGEmJmEpe2I9YS5tYXRjaChLKXx8W107d2hpbGUoYz10aGlzW2krK10paWYoZT1iYihjKSxkPTE9PT1jLm5vZGVUeXBlJiZcIiBcIithYihlKStcIiBcIil7Zz0wO3doaWxlKGY9YltnKytdKXdoaWxlKGQuaW5kZXhPZihcIiBcIitmK1wiIFwiKT4tMSlkPWQucmVwbGFjZShcIiBcIitmK1wiIFwiLFwiIFwiKTtoPWFiKGQpLGUhPT1oJiZjLnNldEF0dHJpYnV0ZShcImNsYXNzXCIsaCl9fXJldHVybiB0aGlzfSx0b2dnbGVDbGFzczpmdW5jdGlvbihhLGIpe3ZhciBjPXR5cGVvZiBhO3JldHVyblwiYm9vbGVhblwiPT10eXBlb2YgYiYmXCJzdHJpbmdcIj09PWM/Yj90aGlzLmFkZENsYXNzKGEpOnRoaXMucmVtb3ZlQ2xhc3MoYSk6ci5pc0Z1bmN0aW9uKGEpP3RoaXMuZWFjaChmdW5jdGlvbihjKXtyKHRoaXMpLnRvZ2dsZUNsYXNzKGEuY2FsbCh0aGlzLGMsYmIodGhpcyksYiksYil9KTp0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgYixkLGUsZjtpZihcInN0cmluZ1wiPT09Yyl7ZD0wLGU9cih0aGlzKSxmPWEubWF0Y2goSyl8fFtdO3doaWxlKGI9ZltkKytdKWUuaGFzQ2xhc3MoYik/ZS5yZW1vdmVDbGFzcyhiKTplLmFkZENsYXNzKGIpfWVsc2Ugdm9pZCAwIT09YSYmXCJib29sZWFuXCIhPT1jfHwoYj1iYih0aGlzKSxiJiZWLnNldCh0aGlzLFwiX19jbGFzc05hbWVfX1wiLGIpLHRoaXMuc2V0QXR0cmlidXRlJiZ0aGlzLnNldEF0dHJpYnV0ZShcImNsYXNzXCIsYnx8YT09PSExP1wiXCI6Vi5nZXQodGhpcyxcIl9fY2xhc3NOYW1lX19cIil8fFwiXCIpKX0pfSxoYXNDbGFzczpmdW5jdGlvbihhKXt2YXIgYixjLGQ9MDtiPVwiIFwiK2ErXCIgXCI7d2hpbGUoYz10aGlzW2QrK10paWYoMT09PWMubm9kZVR5cGUmJihcIiBcIithYihiYihjKSkrXCIgXCIpLmluZGV4T2YoYik+LTEpcmV0dXJuITA7cmV0dXJuITF9fSk7dmFyIGNiPS9cXHIvZztyLmZuLmV4dGVuZCh7dmFsOmZ1bmN0aW9uKGEpe3ZhciBiLGMsZCxlPXRoaXNbMF07e2lmKGFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIGQ9ci5pc0Z1bmN0aW9uKGEpLHRoaXMuZWFjaChmdW5jdGlvbihjKXt2YXIgZTsxPT09dGhpcy5ub2RlVHlwZSYmKGU9ZD9hLmNhbGwodGhpcyxjLHIodGhpcykudmFsKCkpOmEsbnVsbD09ZT9lPVwiXCI6XCJudW1iZXJcIj09dHlwZW9mIGU/ZSs9XCJcIjpyLmlzQXJyYXkoZSkmJihlPXIubWFwKGUsZnVuY3Rpb24oYSl7cmV0dXJuIG51bGw9PWE/XCJcIjphK1wiXCJ9KSksYj1yLnZhbEhvb2tzW3RoaXMudHlwZV18fHIudmFsSG9va3NbdGhpcy5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpXSxiJiZcInNldFwiaW4gYiYmdm9pZCAwIT09Yi5zZXQodGhpcyxlLFwidmFsdWVcIil8fCh0aGlzLnZhbHVlPWUpKX0pO2lmKGUpcmV0dXJuIGI9ci52YWxIb29rc1tlLnR5cGVdfHxyLnZhbEhvb2tzW2Uubm9kZU5hbWUudG9Mb3dlckNhc2UoKV0sYiYmXCJnZXRcImluIGImJnZvaWQgMCE9PShjPWIuZ2V0KGUsXCJ2YWx1ZVwiKSk/YzooYz1lLnZhbHVlLFwic3RyaW5nXCI9PXR5cGVvZiBjP2MucmVwbGFjZShjYixcIlwiKTpudWxsPT1jP1wiXCI6Yyl9fX0pLHIuZXh0ZW5kKHt2YWxIb29rczp7b3B0aW9uOntnZXQ6ZnVuY3Rpb24oYSl7dmFyIGI9ci5maW5kLmF0dHIoYSxcInZhbHVlXCIpO3JldHVybiBudWxsIT1iP2I6YWIoci50ZXh0KGEpKX19LHNlbGVjdDp7Z2V0OmZ1bmN0aW9uKGEpe3ZhciBiLGMsZCxlPWEub3B0aW9ucyxmPWEuc2VsZWN0ZWRJbmRleCxnPVwic2VsZWN0LW9uZVwiPT09YS50eXBlLGg9Zz9udWxsOltdLGk9Zz9mKzE6ZS5sZW5ndGg7Zm9yKGQ9ZjwwP2k6Zz9mOjA7ZDxpO2QrKylpZihjPWVbZF0sKGMuc2VsZWN0ZWR8fGQ9PT1mKSYmIWMuZGlzYWJsZWQmJighYy5wYXJlbnROb2RlLmRpc2FibGVkfHwhci5ub2RlTmFtZShjLnBhcmVudE5vZGUsXCJvcHRncm91cFwiKSkpe2lmKGI9cihjKS52YWwoKSxnKXJldHVybiBiO2gucHVzaChiKX1yZXR1cm4gaH0sc2V0OmZ1bmN0aW9uKGEsYil7dmFyIGMsZCxlPWEub3B0aW9ucyxmPXIubWFrZUFycmF5KGIpLGc9ZS5sZW5ndGg7d2hpbGUoZy0tKWQ9ZVtnXSwoZC5zZWxlY3RlZD1yLmluQXJyYXkoci52YWxIb29rcy5vcHRpb24uZ2V0KGQpLGYpPi0xKSYmKGM9ITApO3JldHVybiBjfHwoYS5zZWxlY3RlZEluZGV4PS0xKSxmfX19fSksci5lYWNoKFtcInJhZGlvXCIsXCJjaGVja2JveFwiXSxmdW5jdGlvbigpe3IudmFsSG9va3NbdGhpc109e3NldDpmdW5jdGlvbihhLGIpe2lmKHIuaXNBcnJheShiKSlyZXR1cm4gYS5jaGVja2VkPXIuaW5BcnJheShyKGEpLnZhbCgpLGIpPi0xfX0sby5jaGVja09ufHwoci52YWxIb29rc1t0aGlzXS5nZXQ9ZnVuY3Rpb24oYSl7cmV0dXJuIG51bGw9PT1hLmdldEF0dHJpYnV0ZShcInZhbHVlXCIpP1wib25cIjphLnZhbHVlfSl9KTt2YXIgZGI9L14oPzpmb2N1c2luZm9jdXN8Zm9jdXNvdXRibHVyKSQvO3IuZXh0ZW5kKHIuZXZlbnQse3RyaWdnZXI6ZnVuY3Rpb24oYixjLGUsZil7dmFyIGcsaCxpLGosayxtLG4sbz1bZXx8ZF0scD1sLmNhbGwoYixcInR5cGVcIik/Yi50eXBlOmIscT1sLmNhbGwoYixcIm5hbWVzcGFjZVwiKT9iLm5hbWVzcGFjZS5zcGxpdChcIi5cIik6W107aWYoaD1pPWU9ZXx8ZCwzIT09ZS5ub2RlVHlwZSYmOCE9PWUubm9kZVR5cGUmJiFkYi50ZXN0KHArci5ldmVudC50cmlnZ2VyZWQpJiYocC5pbmRleE9mKFwiLlwiKT4tMSYmKHE9cC5zcGxpdChcIi5cIikscD1xLnNoaWZ0KCkscS5zb3J0KCkpLGs9cC5pbmRleE9mKFwiOlwiKTwwJiZcIm9uXCIrcCxiPWJbci5leHBhbmRvXT9iOm5ldyByLkV2ZW50KHAsXCJvYmplY3RcIj09dHlwZW9mIGImJmIpLGIuaXNUcmlnZ2VyPWY/MjozLGIubmFtZXNwYWNlPXEuam9pbihcIi5cIiksYi5ybmFtZXNwYWNlPWIubmFtZXNwYWNlP25ldyBSZWdFeHAoXCIoXnxcXFxcLilcIitxLmpvaW4oXCJcXFxcLig/Oi4qXFxcXC58KVwiKStcIihcXFxcLnwkKVwiKTpudWxsLGIucmVzdWx0PXZvaWQgMCxiLnRhcmdldHx8KGIudGFyZ2V0PWUpLGM9bnVsbD09Yz9bYl06ci5tYWtlQXJyYXkoYyxbYl0pLG49ci5ldmVudC5zcGVjaWFsW3BdfHx7fSxmfHwhbi50cmlnZ2VyfHxuLnRyaWdnZXIuYXBwbHkoZSxjKSE9PSExKSl7aWYoIWYmJiFuLm5vQnViYmxlJiYhci5pc1dpbmRvdyhlKSl7Zm9yKGo9bi5kZWxlZ2F0ZVR5cGV8fHAsZGIudGVzdChqK3ApfHwoaD1oLnBhcmVudE5vZGUpO2g7aD1oLnBhcmVudE5vZGUpby5wdXNoKGgpLGk9aDtpPT09KGUub3duZXJEb2N1bWVudHx8ZCkmJm8ucHVzaChpLmRlZmF1bHRWaWV3fHxpLnBhcmVudFdpbmRvd3x8YSl9Zz0wO3doaWxlKChoPW9bZysrXSkmJiFiLmlzUHJvcGFnYXRpb25TdG9wcGVkKCkpYi50eXBlPWc+MT9qOm4uYmluZFR5cGV8fHAsbT0oVi5nZXQoaCxcImV2ZW50c1wiKXx8e30pW2IudHlwZV0mJlYuZ2V0KGgsXCJoYW5kbGVcIiksbSYmbS5hcHBseShoLGMpLG09ayYmaFtrXSxtJiZtLmFwcGx5JiZUKGgpJiYoYi5yZXN1bHQ9bS5hcHBseShoLGMpLGIucmVzdWx0PT09ITEmJmIucHJldmVudERlZmF1bHQoKSk7cmV0dXJuIGIudHlwZT1wLGZ8fGIuaXNEZWZhdWx0UHJldmVudGVkKCl8fG4uX2RlZmF1bHQmJm4uX2RlZmF1bHQuYXBwbHkoby5wb3AoKSxjKSE9PSExfHwhVChlKXx8ayYmci5pc0Z1bmN0aW9uKGVbcF0pJiYhci5pc1dpbmRvdyhlKSYmKGk9ZVtrXSxpJiYoZVtrXT1udWxsKSxyLmV2ZW50LnRyaWdnZXJlZD1wLGVbcF0oKSxyLmV2ZW50LnRyaWdnZXJlZD12b2lkIDAsaSYmKGVba109aSkpLGIucmVzdWx0fX0sc2ltdWxhdGU6ZnVuY3Rpb24oYSxiLGMpe3ZhciBkPXIuZXh0ZW5kKG5ldyByLkV2ZW50LGMse3R5cGU6YSxpc1NpbXVsYXRlZDohMH0pO3IuZXZlbnQudHJpZ2dlcihkLG51bGwsYil9fSksci5mbi5leHRlbmQoe3RyaWdnZXI6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7ci5ldmVudC50cmlnZ2VyKGEsYix0aGlzKX0pfSx0cmlnZ2VySGFuZGxlcjpmdW5jdGlvbihhLGIpe3ZhciBjPXRoaXNbMF07aWYoYylyZXR1cm4gci5ldmVudC50cmlnZ2VyKGEsYixjLCEwKX19KSxyLmVhY2goXCJibHVyIGZvY3VzIGZvY3VzaW4gZm9jdXNvdXQgcmVzaXplIHNjcm9sbCBjbGljayBkYmxjbGljayBtb3VzZWRvd24gbW91c2V1cCBtb3VzZW1vdmUgbW91c2VvdmVyIG1vdXNlb3V0IG1vdXNlZW50ZXIgbW91c2VsZWF2ZSBjaGFuZ2Ugc2VsZWN0IHN1Ym1pdCBrZXlkb3duIGtleXByZXNzIGtleXVwIGNvbnRleHRtZW51XCIuc3BsaXQoXCIgXCIpLGZ1bmN0aW9uKGEsYil7ci5mbltiXT1mdW5jdGlvbihhLGMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPjA/dGhpcy5vbihiLG51bGwsYSxjKTp0aGlzLnRyaWdnZXIoYil9fSksci5mbi5leHRlbmQoe2hvdmVyOmZ1bmN0aW9uKGEsYil7cmV0dXJuIHRoaXMubW91c2VlbnRlcihhKS5tb3VzZWxlYXZlKGJ8fGEpfX0pLG8uZm9jdXNpbj1cIm9uZm9jdXNpblwiaW4gYSxvLmZvY3VzaW58fHIuZWFjaCh7Zm9jdXM6XCJmb2N1c2luXCIsYmx1cjpcImZvY3Vzb3V0XCJ9LGZ1bmN0aW9uKGEsYil7dmFyIGM9ZnVuY3Rpb24oYSl7ci5ldmVudC5zaW11bGF0ZShiLGEudGFyZ2V0LHIuZXZlbnQuZml4KGEpKX07ci5ldmVudC5zcGVjaWFsW2JdPXtzZXR1cDpmdW5jdGlvbigpe3ZhciBkPXRoaXMub3duZXJEb2N1bWVudHx8dGhpcyxlPVYuYWNjZXNzKGQsYik7ZXx8ZC5hZGRFdmVudExpc3RlbmVyKGEsYywhMCksVi5hY2Nlc3MoZCxiLChlfHwwKSsxKX0sdGVhcmRvd246ZnVuY3Rpb24oKXt2YXIgZD10aGlzLm93bmVyRG9jdW1lbnR8fHRoaXMsZT1WLmFjY2VzcyhkLGIpLTE7ZT9WLmFjY2VzcyhkLGIsZSk6KGQucmVtb3ZlRXZlbnRMaXN0ZW5lcihhLGMsITApLFYucmVtb3ZlKGQsYikpfX19KTt2YXIgZWI9L1xcW1xcXSQvLGZiPS9cXHI/XFxuL2csZ2I9L14oPzpzdWJtaXR8YnV0dG9ufGltYWdlfHJlc2V0fGZpbGUpJC9pLGhiPS9eKD86aW5wdXR8c2VsZWN0fHRleHRhcmVhfGtleWdlbikvaTtmdW5jdGlvbiBpYihhLGIsYyxkKXt2YXIgZTtpZihyLmlzQXJyYXkoYikpci5lYWNoKGIsZnVuY3Rpb24oYixlKXtjfHxlYi50ZXN0KGEpP2QoYSxlKTppYihhK1wiW1wiKyhcIm9iamVjdFwiPT10eXBlb2YgZSYmbnVsbCE9ZT9iOlwiXCIpK1wiXVwiLGUsYyxkKTtcbn0pO2Vsc2UgaWYoY3x8XCJvYmplY3RcIiE9PXIudHlwZShiKSlkKGEsYik7ZWxzZSBmb3IoZSBpbiBiKWliKGErXCJbXCIrZStcIl1cIixiW2VdLGMsZCl9ci5wYXJhbT1mdW5jdGlvbihhLGIpe3ZhciBjLGQ9W10sZT1mdW5jdGlvbihhLGIpe3ZhciBjPXIuaXNGdW5jdGlvbihiKT9iKCk6YjtkW2QubGVuZ3RoXT1lbmNvZGVVUklDb21wb25lbnQoYSkrXCI9XCIrZW5jb2RlVVJJQ29tcG9uZW50KG51bGw9PWM/XCJcIjpjKX07aWYoci5pc0FycmF5KGEpfHxhLmpxdWVyeSYmIXIuaXNQbGFpbk9iamVjdChhKSlyLmVhY2goYSxmdW5jdGlvbigpe2UodGhpcy5uYW1lLHRoaXMudmFsdWUpfSk7ZWxzZSBmb3IoYyBpbiBhKWliKGMsYVtjXSxiLGUpO3JldHVybiBkLmpvaW4oXCImXCIpfSxyLmZuLmV4dGVuZCh7c2VyaWFsaXplOmZ1bmN0aW9uKCl7cmV0dXJuIHIucGFyYW0odGhpcy5zZXJpYWxpemVBcnJheSgpKX0sc2VyaWFsaXplQXJyYXk6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tYXAoZnVuY3Rpb24oKXt2YXIgYT1yLnByb3AodGhpcyxcImVsZW1lbnRzXCIpO3JldHVybiBhP3IubWFrZUFycmF5KGEpOnRoaXN9KS5maWx0ZXIoZnVuY3Rpb24oKXt2YXIgYT10aGlzLnR5cGU7cmV0dXJuIHRoaXMubmFtZSYmIXIodGhpcykuaXMoXCI6ZGlzYWJsZWRcIikmJmhiLnRlc3QodGhpcy5ub2RlTmFtZSkmJiFnYi50ZXN0KGEpJiYodGhpcy5jaGVja2VkfHwhaWEudGVzdChhKSl9KS5tYXAoZnVuY3Rpb24oYSxiKXt2YXIgYz1yKHRoaXMpLnZhbCgpO3JldHVybiBudWxsPT1jP251bGw6ci5pc0FycmF5KGMpP3IubWFwKGMsZnVuY3Rpb24oYSl7cmV0dXJue25hbWU6Yi5uYW1lLHZhbHVlOmEucmVwbGFjZShmYixcIlxcclxcblwiKX19KTp7bmFtZTpiLm5hbWUsdmFsdWU6Yy5yZXBsYWNlKGZiLFwiXFxyXFxuXCIpfX0pLmdldCgpfX0pLHIuZm4uZXh0ZW5kKHt3cmFwQWxsOmZ1bmN0aW9uKGEpe3ZhciBiO3JldHVybiB0aGlzWzBdJiYoci5pc0Z1bmN0aW9uKGEpJiYoYT1hLmNhbGwodGhpc1swXSkpLGI9cihhLHRoaXNbMF0ub3duZXJEb2N1bWVudCkuZXEoMCkuY2xvbmUoITApLHRoaXNbMF0ucGFyZW50Tm9kZSYmYi5pbnNlcnRCZWZvcmUodGhpc1swXSksYi5tYXAoZnVuY3Rpb24oKXt2YXIgYT10aGlzO3doaWxlKGEuZmlyc3RFbGVtZW50Q2hpbGQpYT1hLmZpcnN0RWxlbWVudENoaWxkO3JldHVybiBhfSkuYXBwZW5kKHRoaXMpKSx0aGlzfSx3cmFwSW5uZXI6ZnVuY3Rpb24oYSl7cmV0dXJuIHIuaXNGdW5jdGlvbihhKT90aGlzLmVhY2goZnVuY3Rpb24oYil7cih0aGlzKS53cmFwSW5uZXIoYS5jYWxsKHRoaXMsYikpfSk6dGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIGI9cih0aGlzKSxjPWIuY29udGVudHMoKTtjLmxlbmd0aD9jLndyYXBBbGwoYSk6Yi5hcHBlbmQoYSl9KX0sd3JhcDpmdW5jdGlvbihhKXt2YXIgYj1yLmlzRnVuY3Rpb24oYSk7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbihjKXtyKHRoaXMpLndyYXBBbGwoYj9hLmNhbGwodGhpcyxjKTphKX0pfSx1bndyYXA6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMucGFyZW50KGEpLm5vdChcImJvZHlcIikuZWFjaChmdW5jdGlvbigpe3IodGhpcykucmVwbGFjZVdpdGgodGhpcy5jaGlsZE5vZGVzKX0pLHRoaXN9fSksci5leHByLnBzZXVkb3MuaGlkZGVuPWZ1bmN0aW9uKGEpe3JldHVybiFyLmV4cHIucHNldWRvcy52aXNpYmxlKGEpfSxyLmV4cHIucHNldWRvcy52aXNpYmxlPWZ1bmN0aW9uKGEpe3JldHVybiEhKGEub2Zmc2V0V2lkdGh8fGEub2Zmc2V0SGVpZ2h0fHxhLmdldENsaWVudFJlY3RzKCkubGVuZ3RoKX0sby5jcmVhdGVIVE1MRG9jdW1lbnQ9ZnVuY3Rpb24oKXt2YXIgYT1kLmltcGxlbWVudGF0aW9uLmNyZWF0ZUhUTUxEb2N1bWVudChcIlwiKS5ib2R5O3JldHVybiBhLmlubmVySFRNTD1cIjxmb3JtPjwvZm9ybT48Zm9ybT48L2Zvcm0+XCIsMj09PWEuY2hpbGROb2Rlcy5sZW5ndGh9KCksci5wYXJzZUhUTUw9ZnVuY3Rpb24oYSxiLGMpe2lmKFwic3RyaW5nXCIhPXR5cGVvZiBhKXJldHVybltdO1wiYm9vbGVhblwiPT10eXBlb2YgYiYmKGM9YixiPSExKTt2YXIgZSxmLGc7cmV0dXJuIGJ8fChvLmNyZWF0ZUhUTUxEb2N1bWVudD8oYj1kLmltcGxlbWVudGF0aW9uLmNyZWF0ZUhUTUxEb2N1bWVudChcIlwiKSxlPWIuY3JlYXRlRWxlbWVudChcImJhc2VcIiksZS5ocmVmPWQubG9jYXRpb24uaHJlZixiLmhlYWQuYXBwZW5kQ2hpbGQoZSkpOmI9ZCksZj1CLmV4ZWMoYSksZz0hYyYmW10sZj9bYi5jcmVhdGVFbGVtZW50KGZbMV0pXTooZj1wYShbYV0sYixnKSxnJiZnLmxlbmd0aCYmcihnKS5yZW1vdmUoKSxyLm1lcmdlKFtdLGYuY2hpbGROb2RlcykpfTtmdW5jdGlvbiBqYihhKXtyZXR1cm4gci5pc1dpbmRvdyhhKT9hOjk9PT1hLm5vZGVUeXBlJiZhLmRlZmF1bHRWaWV3fXIub2Zmc2V0PXtzZXRPZmZzZXQ6ZnVuY3Rpb24oYSxiLGMpe3ZhciBkLGUsZixnLGgsaSxqLGs9ci5jc3MoYSxcInBvc2l0aW9uXCIpLGw9cihhKSxtPXt9O1wic3RhdGljXCI9PT1rJiYoYS5zdHlsZS5wb3NpdGlvbj1cInJlbGF0aXZlXCIpLGg9bC5vZmZzZXQoKSxmPXIuY3NzKGEsXCJ0b3BcIiksaT1yLmNzcyhhLFwibGVmdFwiKSxqPShcImFic29sdXRlXCI9PT1rfHxcImZpeGVkXCI9PT1rKSYmKGYraSkuaW5kZXhPZihcImF1dG9cIik+LTEsaj8oZD1sLnBvc2l0aW9uKCksZz1kLnRvcCxlPWQubGVmdCk6KGc9cGFyc2VGbG9hdChmKXx8MCxlPXBhcnNlRmxvYXQoaSl8fDApLHIuaXNGdW5jdGlvbihiKSYmKGI9Yi5jYWxsKGEsYyxyLmV4dGVuZCh7fSxoKSkpLG51bGwhPWIudG9wJiYobS50b3A9Yi50b3AtaC50b3ArZyksbnVsbCE9Yi5sZWZ0JiYobS5sZWZ0PWIubGVmdC1oLmxlZnQrZSksXCJ1c2luZ1wiaW4gYj9iLnVzaW5nLmNhbGwoYSxtKTpsLmNzcyhtKX19LHIuZm4uZXh0ZW5kKHtvZmZzZXQ6ZnVuY3Rpb24oYSl7aWYoYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gdm9pZCAwPT09YT90aGlzOnRoaXMuZWFjaChmdW5jdGlvbihiKXtyLm9mZnNldC5zZXRPZmZzZXQodGhpcyxhLGIpfSk7dmFyIGIsYyxkLGUsZj10aGlzWzBdO2lmKGYpcmV0dXJuIGYuZ2V0Q2xpZW50UmVjdHMoKS5sZW5ndGg/KGQ9Zi5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxkLndpZHRofHxkLmhlaWdodD8oZT1mLm93bmVyRG9jdW1lbnQsYz1qYihlKSxiPWUuZG9jdW1lbnRFbGVtZW50LHt0b3A6ZC50b3ArYy5wYWdlWU9mZnNldC1iLmNsaWVudFRvcCxsZWZ0OmQubGVmdCtjLnBhZ2VYT2Zmc2V0LWIuY2xpZW50TGVmdH0pOmQpOnt0b3A6MCxsZWZ0OjB9fSxwb3NpdGlvbjpmdW5jdGlvbigpe2lmKHRoaXNbMF0pe3ZhciBhLGIsYz10aGlzWzBdLGQ9e3RvcDowLGxlZnQ6MH07cmV0dXJuXCJmaXhlZFwiPT09ci5jc3MoYyxcInBvc2l0aW9uXCIpP2I9Yy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTooYT10aGlzLm9mZnNldFBhcmVudCgpLGI9dGhpcy5vZmZzZXQoKSxyLm5vZGVOYW1lKGFbMF0sXCJodG1sXCIpfHwoZD1hLm9mZnNldCgpKSxkPXt0b3A6ZC50b3Arci5jc3MoYVswXSxcImJvcmRlclRvcFdpZHRoXCIsITApLGxlZnQ6ZC5sZWZ0K3IuY3NzKGFbMF0sXCJib3JkZXJMZWZ0V2lkdGhcIiwhMCl9KSx7dG9wOmIudG9wLWQudG9wLXIuY3NzKGMsXCJtYXJnaW5Ub3BcIiwhMCksbGVmdDpiLmxlZnQtZC5sZWZ0LXIuY3NzKGMsXCJtYXJnaW5MZWZ0XCIsITApfX19LG9mZnNldFBhcmVudDpmdW5jdGlvbigpe3JldHVybiB0aGlzLm1hcChmdW5jdGlvbigpe3ZhciBhPXRoaXMub2Zmc2V0UGFyZW50O3doaWxlKGEmJlwic3RhdGljXCI9PT1yLmNzcyhhLFwicG9zaXRpb25cIikpYT1hLm9mZnNldFBhcmVudDtyZXR1cm4gYXx8cWF9KX19KSxyLmVhY2goe3Njcm9sbExlZnQ6XCJwYWdlWE9mZnNldFwiLHNjcm9sbFRvcDpcInBhZ2VZT2Zmc2V0XCJ9LGZ1bmN0aW9uKGEsYil7dmFyIGM9XCJwYWdlWU9mZnNldFwiPT09YjtyLmZuW2FdPWZ1bmN0aW9uKGQpe3JldHVybiBTKHRoaXMsZnVuY3Rpb24oYSxkLGUpe3ZhciBmPWpiKGEpO3JldHVybiB2b2lkIDA9PT1lP2Y/ZltiXTphW2RdOnZvaWQoZj9mLnNjcm9sbFRvKGM/Zi5wYWdlWE9mZnNldDplLGM/ZTpmLnBhZ2VZT2Zmc2V0KTphW2RdPWUpfSxhLGQsYXJndW1lbnRzLmxlbmd0aCl9fSksci5lYWNoKFtcInRvcFwiLFwibGVmdFwiXSxmdW5jdGlvbihhLGIpe3IuY3NzSG9va3NbYl09T2Eoby5waXhlbFBvc2l0aW9uLGZ1bmN0aW9uKGEsYyl7aWYoYylyZXR1cm4gYz1OYShhLGIpLExhLnRlc3QoYyk/cihhKS5wb3NpdGlvbigpW2JdK1wicHhcIjpjfSl9KSxyLmVhY2goe0hlaWdodDpcImhlaWdodFwiLFdpZHRoOlwid2lkdGhcIn0sZnVuY3Rpb24oYSxiKXtyLmVhY2goe3BhZGRpbmc6XCJpbm5lclwiK2EsY29udGVudDpiLFwiXCI6XCJvdXRlclwiK2F9LGZ1bmN0aW9uKGMsZCl7ci5mbltkXT1mdW5jdGlvbihlLGYpe3ZhciBnPWFyZ3VtZW50cy5sZW5ndGgmJihjfHxcImJvb2xlYW5cIiE9dHlwZW9mIGUpLGg9Y3x8KGU9PT0hMHx8Zj09PSEwP1wibWFyZ2luXCI6XCJib3JkZXJcIik7cmV0dXJuIFModGhpcyxmdW5jdGlvbihiLGMsZSl7dmFyIGY7cmV0dXJuIHIuaXNXaW5kb3coYik/MD09PWQuaW5kZXhPZihcIm91dGVyXCIpP2JbXCJpbm5lclwiK2FdOmIuZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50W1wiY2xpZW50XCIrYV06OT09PWIubm9kZVR5cGU/KGY9Yi5kb2N1bWVudEVsZW1lbnQsTWF0aC5tYXgoYi5ib2R5W1wic2Nyb2xsXCIrYV0sZltcInNjcm9sbFwiK2FdLGIuYm9keVtcIm9mZnNldFwiK2FdLGZbXCJvZmZzZXRcIithXSxmW1wiY2xpZW50XCIrYV0pKTp2b2lkIDA9PT1lP3IuY3NzKGIsYyxoKTpyLnN0eWxlKGIsYyxlLGgpfSxiLGc/ZTp2b2lkIDAsZyl9fSl9KSxcImZ1bmN0aW9uXCI9PXR5cGVvZiBkZWZpbmUmJmRlZmluZS5hbWQmJmRlZmluZShcImpxdWVyeVwiLFtdLGZ1bmN0aW9uKCl7cmV0dXJuIHJ9KTt2YXIga2I9YS5qUXVlcnksbGI9YS4kO3JldHVybiByLm5vQ29uZmxpY3Q9ZnVuY3Rpb24oYil7cmV0dXJuIGEuJD09PXImJihhLiQ9bGIpLGImJmEualF1ZXJ5PT09ciYmKGEualF1ZXJ5PWtiKSxyfSxifHwoYS5qUXVlcnk9YS4kPXIpLHJ9KTtcbiIsIi8qIVxuICogQm9vdHN0cmFwIHYzLjMuNSAoaHR0cDovL2dldGJvb3RzdHJhcC5jb20pXG4gKiBDb3B5cmlnaHQgMjAxMS0yMDE1IFR3aXR0ZXIsIEluYy5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZVxuICovXG5pZihcInVuZGVmaW5lZFwiPT10eXBlb2YgalF1ZXJ5KXRocm93IG5ldyBFcnJvcihcIkJvb3RzdHJhcCdzIEphdmFTY3JpcHQgcmVxdWlyZXMgalF1ZXJ5XCIpOytmdW5jdGlvbihhKXtcInVzZSBzdHJpY3RcIjt2YXIgYj1hLmZuLmpxdWVyeS5zcGxpdChcIiBcIilbMF0uc3BsaXQoXCIuXCIpO2lmKGJbMF08MiYmYlsxXTw5fHwxPT1iWzBdJiY5PT1iWzFdJiZiWzJdPDEpdGhyb3cgbmV3IEVycm9yKFwiQm9vdHN0cmFwJ3MgSmF2YVNjcmlwdCByZXF1aXJlcyBqUXVlcnkgdmVyc2lvbiAxLjkuMSBvciBoaWdoZXJcIil9KGpRdWVyeSksK2Z1bmN0aW9uKGEpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIGIoKXt2YXIgYT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiYm9vdHN0cmFwXCIpLGI9e1dlYmtpdFRyYW5zaXRpb246XCJ3ZWJraXRUcmFuc2l0aW9uRW5kXCIsTW96VHJhbnNpdGlvbjpcInRyYW5zaXRpb25lbmRcIixPVHJhbnNpdGlvbjpcIm9UcmFuc2l0aW9uRW5kIG90cmFuc2l0aW9uZW5kXCIsdHJhbnNpdGlvbjpcInRyYW5zaXRpb25lbmRcIn07Zm9yKHZhciBjIGluIGIpaWYodm9pZCAwIT09YS5zdHlsZVtjXSlyZXR1cm57ZW5kOmJbY119O3JldHVybiExfWEuZm4uZW11bGF0ZVRyYW5zaXRpb25FbmQ9ZnVuY3Rpb24oYil7dmFyIGM9ITEsZD10aGlzO2EodGhpcykub25lKFwiYnNUcmFuc2l0aW9uRW5kXCIsZnVuY3Rpb24oKXtjPSEwfSk7dmFyIGU9ZnVuY3Rpb24oKXtjfHxhKGQpLnRyaWdnZXIoYS5zdXBwb3J0LnRyYW5zaXRpb24uZW5kKX07cmV0dXJuIHNldFRpbWVvdXQoZSxiKSx0aGlzfSxhKGZ1bmN0aW9uKCl7YS5zdXBwb3J0LnRyYW5zaXRpb249YigpLGEuc3VwcG9ydC50cmFuc2l0aW9uJiYoYS5ldmVudC5zcGVjaWFsLmJzVHJhbnNpdGlvbkVuZD17YmluZFR5cGU6YS5zdXBwb3J0LnRyYW5zaXRpb24uZW5kLGRlbGVnYXRlVHlwZTphLnN1cHBvcnQudHJhbnNpdGlvbi5lbmQsaGFuZGxlOmZ1bmN0aW9uKGIpe3JldHVybiBhKGIudGFyZ2V0KS5pcyh0aGlzKT9iLmhhbmRsZU9iai5oYW5kbGVyLmFwcGx5KHRoaXMsYXJndW1lbnRzKTp2b2lkIDB9fSl9KX0oalF1ZXJ5KSwrZnVuY3Rpb24oYSl7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gYihiKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIGM9YSh0aGlzKSxlPWMuZGF0YShcImJzLmFsZXJ0XCIpO2V8fGMuZGF0YShcImJzLmFsZXJ0XCIsZT1uZXcgZCh0aGlzKSksXCJzdHJpbmdcIj09dHlwZW9mIGImJmVbYl0uY2FsbChjKX0pfXZhciBjPSdbZGF0YS1kaXNtaXNzPVwiYWxlcnRcIl0nLGQ9ZnVuY3Rpb24oYil7YShiKS5vbihcImNsaWNrXCIsYyx0aGlzLmNsb3NlKX07ZC5WRVJTSU9OPVwiMy4zLjVcIixkLlRSQU5TSVRJT05fRFVSQVRJT049MTUwLGQucHJvdG90eXBlLmNsb3NlPWZ1bmN0aW9uKGIpe2Z1bmN0aW9uIGMoKXtnLmRldGFjaCgpLnRyaWdnZXIoXCJjbG9zZWQuYnMuYWxlcnRcIikucmVtb3ZlKCl9dmFyIGU9YSh0aGlzKSxmPWUuYXR0cihcImRhdGEtdGFyZ2V0XCIpO2Z8fChmPWUuYXR0cihcImhyZWZcIiksZj1mJiZmLnJlcGxhY2UoLy4qKD89I1teXFxzXSokKS8sXCJcIikpO3ZhciBnPWEoZik7YiYmYi5wcmV2ZW50RGVmYXVsdCgpLGcubGVuZ3RofHwoZz1lLmNsb3Nlc3QoXCIuYWxlcnRcIikpLGcudHJpZ2dlcihiPWEuRXZlbnQoXCJjbG9zZS5icy5hbGVydFwiKSksYi5pc0RlZmF1bHRQcmV2ZW50ZWQoKXx8KGcucmVtb3ZlQ2xhc3MoXCJpblwiKSxhLnN1cHBvcnQudHJhbnNpdGlvbiYmZy5oYXNDbGFzcyhcImZhZGVcIik/Zy5vbmUoXCJic1RyYW5zaXRpb25FbmRcIixjKS5lbXVsYXRlVHJhbnNpdGlvbkVuZChkLlRSQU5TSVRJT05fRFVSQVRJT04pOmMoKSl9O3ZhciBlPWEuZm4uYWxlcnQ7YS5mbi5hbGVydD1iLGEuZm4uYWxlcnQuQ29uc3RydWN0b3I9ZCxhLmZuLmFsZXJ0Lm5vQ29uZmxpY3Q9ZnVuY3Rpb24oKXtyZXR1cm4gYS5mbi5hbGVydD1lLHRoaXN9LGEoZG9jdW1lbnQpLm9uKFwiY2xpY2suYnMuYWxlcnQuZGF0YS1hcGlcIixjLGQucHJvdG90eXBlLmNsb3NlKX0oalF1ZXJ5KSwrZnVuY3Rpb24oYSl7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gYihiKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIGQ9YSh0aGlzKSxlPWQuZGF0YShcImJzLmJ1dHRvblwiKSxmPVwib2JqZWN0XCI9PXR5cGVvZiBiJiZiO2V8fGQuZGF0YShcImJzLmJ1dHRvblwiLGU9bmV3IGModGhpcyxmKSksXCJ0b2dnbGVcIj09Yj9lLnRvZ2dsZSgpOmImJmUuc2V0U3RhdGUoYil9KX12YXIgYz1mdW5jdGlvbihiLGQpe3RoaXMuJGVsZW1lbnQ9YShiKSx0aGlzLm9wdGlvbnM9YS5leHRlbmQoe30sYy5ERUZBVUxUUyxkKSx0aGlzLmlzTG9hZGluZz0hMX07Yy5WRVJTSU9OPVwiMy4zLjVcIixjLkRFRkFVTFRTPXtsb2FkaW5nVGV4dDpcImxvYWRpbmcuLi5cIn0sYy5wcm90b3R5cGUuc2V0U3RhdGU9ZnVuY3Rpb24oYil7dmFyIGM9XCJkaXNhYmxlZFwiLGQ9dGhpcy4kZWxlbWVudCxlPWQuaXMoXCJpbnB1dFwiKT9cInZhbFwiOlwiaHRtbFwiLGY9ZC5kYXRhKCk7Yis9XCJUZXh0XCIsbnVsbD09Zi5yZXNldFRleHQmJmQuZGF0YShcInJlc2V0VGV4dFwiLGRbZV0oKSksc2V0VGltZW91dChhLnByb3h5KGZ1bmN0aW9uKCl7ZFtlXShudWxsPT1mW2JdP3RoaXMub3B0aW9uc1tiXTpmW2JdKSxcImxvYWRpbmdUZXh0XCI9PWI/KHRoaXMuaXNMb2FkaW5nPSEwLGQuYWRkQ2xhc3MoYykuYXR0cihjLGMpKTp0aGlzLmlzTG9hZGluZyYmKHRoaXMuaXNMb2FkaW5nPSExLGQucmVtb3ZlQ2xhc3MoYykucmVtb3ZlQXR0cihjKSl9LHRoaXMpLDApfSxjLnByb3RvdHlwZS50b2dnbGU9ZnVuY3Rpb24oKXt2YXIgYT0hMCxiPXRoaXMuJGVsZW1lbnQuY2xvc2VzdCgnW2RhdGEtdG9nZ2xlPVwiYnV0dG9uc1wiXScpO2lmKGIubGVuZ3RoKXt2YXIgYz10aGlzLiRlbGVtZW50LmZpbmQoXCJpbnB1dFwiKTtcInJhZGlvXCI9PWMucHJvcChcInR5cGVcIik/KGMucHJvcChcImNoZWNrZWRcIikmJihhPSExKSxiLmZpbmQoXCIuYWN0aXZlXCIpLnJlbW92ZUNsYXNzKFwiYWN0aXZlXCIpLHRoaXMuJGVsZW1lbnQuYWRkQ2xhc3MoXCJhY3RpdmVcIikpOlwiY2hlY2tib3hcIj09Yy5wcm9wKFwidHlwZVwiKSYmKGMucHJvcChcImNoZWNrZWRcIikhPT10aGlzLiRlbGVtZW50Lmhhc0NsYXNzKFwiYWN0aXZlXCIpJiYoYT0hMSksdGhpcy4kZWxlbWVudC50b2dnbGVDbGFzcyhcImFjdGl2ZVwiKSksYy5wcm9wKFwiY2hlY2tlZFwiLHRoaXMuJGVsZW1lbnQuaGFzQ2xhc3MoXCJhY3RpdmVcIikpLGEmJmMudHJpZ2dlcihcImNoYW5nZVwiKX1lbHNlIHRoaXMuJGVsZW1lbnQuYXR0cihcImFyaWEtcHJlc3NlZFwiLCF0aGlzLiRlbGVtZW50Lmhhc0NsYXNzKFwiYWN0aXZlXCIpKSx0aGlzLiRlbGVtZW50LnRvZ2dsZUNsYXNzKFwiYWN0aXZlXCIpfTt2YXIgZD1hLmZuLmJ1dHRvbjthLmZuLmJ1dHRvbj1iLGEuZm4uYnV0dG9uLkNvbnN0cnVjdG9yPWMsYS5mbi5idXR0b24ubm9Db25mbGljdD1mdW5jdGlvbigpe3JldHVybiBhLmZuLmJ1dHRvbj1kLHRoaXN9LGEoZG9jdW1lbnQpLm9uKFwiY2xpY2suYnMuYnV0dG9uLmRhdGEtYXBpXCIsJ1tkYXRhLXRvZ2dsZV49XCJidXR0b25cIl0nLGZ1bmN0aW9uKGMpe3ZhciBkPWEoYy50YXJnZXQpO2QuaGFzQ2xhc3MoXCJidG5cIil8fChkPWQuY2xvc2VzdChcIi5idG5cIikpLGIuY2FsbChkLFwidG9nZ2xlXCIpLGEoYy50YXJnZXQpLmlzKCdpbnB1dFt0eXBlPVwicmFkaW9cIl0nKXx8YShjLnRhcmdldCkuaXMoJ2lucHV0W3R5cGU9XCJjaGVja2JveFwiXScpfHxjLnByZXZlbnREZWZhdWx0KCl9KS5vbihcImZvY3VzLmJzLmJ1dHRvbi5kYXRhLWFwaSBibHVyLmJzLmJ1dHRvbi5kYXRhLWFwaVwiLCdbZGF0YS10b2dnbGVePVwiYnV0dG9uXCJdJyxmdW5jdGlvbihiKXthKGIudGFyZ2V0KS5jbG9zZXN0KFwiLmJ0blwiKS50b2dnbGVDbGFzcyhcImZvY3VzXCIsL15mb2N1cyhpbik/JC8udGVzdChiLnR5cGUpKX0pfShqUXVlcnkpLCtmdW5jdGlvbihhKXtcInVzZSBzdHJpY3RcIjtmdW5jdGlvbiBiKGIpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgZD1hKHRoaXMpLGU9ZC5kYXRhKFwiYnMuY2Fyb3VzZWxcIiksZj1hLmV4dGVuZCh7fSxjLkRFRkFVTFRTLGQuZGF0YSgpLFwib2JqZWN0XCI9PXR5cGVvZiBiJiZiKSxnPVwic3RyaW5nXCI9PXR5cGVvZiBiP2I6Zi5zbGlkZTtlfHxkLmRhdGEoXCJicy5jYXJvdXNlbFwiLGU9bmV3IGModGhpcyxmKSksXCJudW1iZXJcIj09dHlwZW9mIGI/ZS50byhiKTpnP2VbZ10oKTpmLmludGVydmFsJiZlLnBhdXNlKCkuY3ljbGUoKX0pfXZhciBjPWZ1bmN0aW9uKGIsYyl7dGhpcy4kZWxlbWVudD1hKGIpLHRoaXMuJGluZGljYXRvcnM9dGhpcy4kZWxlbWVudC5maW5kKFwiLmNhcm91c2VsLWluZGljYXRvcnNcIiksdGhpcy5vcHRpb25zPWMsdGhpcy5wYXVzZWQ9bnVsbCx0aGlzLnNsaWRpbmc9bnVsbCx0aGlzLmludGVydmFsPW51bGwsdGhpcy4kYWN0aXZlPW51bGwsdGhpcy4kaXRlbXM9bnVsbCx0aGlzLm9wdGlvbnMua2V5Ym9hcmQmJnRoaXMuJGVsZW1lbnQub24oXCJrZXlkb3duLmJzLmNhcm91c2VsXCIsYS5wcm94eSh0aGlzLmtleWRvd24sdGhpcykpLFwiaG92ZXJcIj09dGhpcy5vcHRpb25zLnBhdXNlJiYhKFwib250b3VjaHN0YXJ0XCJpbiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpJiZ0aGlzLiRlbGVtZW50Lm9uKFwibW91c2VlbnRlci5icy5jYXJvdXNlbFwiLGEucHJveHkodGhpcy5wYXVzZSx0aGlzKSkub24oXCJtb3VzZWxlYXZlLmJzLmNhcm91c2VsXCIsYS5wcm94eSh0aGlzLmN5Y2xlLHRoaXMpKX07Yy5WRVJTSU9OPVwiMy4zLjVcIixjLlRSQU5TSVRJT05fRFVSQVRJT049NjAwLGMuREVGQVVMVFM9e2ludGVydmFsOjVlMyxwYXVzZTpcImhvdmVyXCIsd3JhcDohMCxrZXlib2FyZDohMH0sYy5wcm90b3R5cGUua2V5ZG93bj1mdW5jdGlvbihhKXtpZighL2lucHV0fHRleHRhcmVhL2kudGVzdChhLnRhcmdldC50YWdOYW1lKSl7c3dpdGNoKGEud2hpY2gpe2Nhc2UgMzc6dGhpcy5wcmV2KCk7YnJlYWs7Y2FzZSAzOTp0aGlzLm5leHQoKTticmVhaztkZWZhdWx0OnJldHVybn1hLnByZXZlbnREZWZhdWx0KCl9fSxjLnByb3RvdHlwZS5jeWNsZT1mdW5jdGlvbihiKXtyZXR1cm4gYnx8KHRoaXMucGF1c2VkPSExKSx0aGlzLmludGVydmFsJiZjbGVhckludGVydmFsKHRoaXMuaW50ZXJ2YWwpLHRoaXMub3B0aW9ucy5pbnRlcnZhbCYmIXRoaXMucGF1c2VkJiYodGhpcy5pbnRlcnZhbD1zZXRJbnRlcnZhbChhLnByb3h5KHRoaXMubmV4dCx0aGlzKSx0aGlzLm9wdGlvbnMuaW50ZXJ2YWwpKSx0aGlzfSxjLnByb3RvdHlwZS5nZXRJdGVtSW5kZXg9ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuJGl0ZW1zPWEucGFyZW50KCkuY2hpbGRyZW4oXCIuaXRlbVwiKSx0aGlzLiRpdGVtcy5pbmRleChhfHx0aGlzLiRhY3RpdmUpfSxjLnByb3RvdHlwZS5nZXRJdGVtRm9yRGlyZWN0aW9uPWZ1bmN0aW9uKGEsYil7dmFyIGM9dGhpcy5nZXRJdGVtSW5kZXgoYiksZD1cInByZXZcIj09YSYmMD09PWN8fFwibmV4dFwiPT1hJiZjPT10aGlzLiRpdGVtcy5sZW5ndGgtMTtpZihkJiYhdGhpcy5vcHRpb25zLndyYXApcmV0dXJuIGI7dmFyIGU9XCJwcmV2XCI9PWE/LTE6MSxmPShjK2UpJXRoaXMuJGl0ZW1zLmxlbmd0aDtyZXR1cm4gdGhpcy4kaXRlbXMuZXEoZil9LGMucHJvdG90eXBlLnRvPWZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMsYz10aGlzLmdldEl0ZW1JbmRleCh0aGlzLiRhY3RpdmU9dGhpcy4kZWxlbWVudC5maW5kKFwiLml0ZW0uYWN0aXZlXCIpKTtyZXR1cm4gYT50aGlzLiRpdGVtcy5sZW5ndGgtMXx8MD5hP3ZvaWQgMDp0aGlzLnNsaWRpbmc/dGhpcy4kZWxlbWVudC5vbmUoXCJzbGlkLmJzLmNhcm91c2VsXCIsZnVuY3Rpb24oKXtiLnRvKGEpfSk6Yz09YT90aGlzLnBhdXNlKCkuY3ljbGUoKTp0aGlzLnNsaWRlKGE+Yz9cIm5leHRcIjpcInByZXZcIix0aGlzLiRpdGVtcy5lcShhKSl9LGMucHJvdG90eXBlLnBhdXNlPWZ1bmN0aW9uKGIpe3JldHVybiBifHwodGhpcy5wYXVzZWQ9ITApLHRoaXMuJGVsZW1lbnQuZmluZChcIi5uZXh0LCAucHJldlwiKS5sZW5ndGgmJmEuc3VwcG9ydC50cmFuc2l0aW9uJiYodGhpcy4kZWxlbWVudC50cmlnZ2VyKGEuc3VwcG9ydC50cmFuc2l0aW9uLmVuZCksdGhpcy5jeWNsZSghMCkpLHRoaXMuaW50ZXJ2YWw9Y2xlYXJJbnRlcnZhbCh0aGlzLmludGVydmFsKSx0aGlzfSxjLnByb3RvdHlwZS5uZXh0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2xpZGluZz92b2lkIDA6dGhpcy5zbGlkZShcIm5leHRcIil9LGMucHJvdG90eXBlLnByZXY9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zbGlkaW5nP3ZvaWQgMDp0aGlzLnNsaWRlKFwicHJldlwiKX0sYy5wcm90b3R5cGUuc2xpZGU9ZnVuY3Rpb24oYixkKXt2YXIgZT10aGlzLiRlbGVtZW50LmZpbmQoXCIuaXRlbS5hY3RpdmVcIiksZj1kfHx0aGlzLmdldEl0ZW1Gb3JEaXJlY3Rpb24oYixlKSxnPXRoaXMuaW50ZXJ2YWwsaD1cIm5leHRcIj09Yj9cImxlZnRcIjpcInJpZ2h0XCIsaT10aGlzO2lmKGYuaGFzQ2xhc3MoXCJhY3RpdmVcIikpcmV0dXJuIHRoaXMuc2xpZGluZz0hMTt2YXIgaj1mWzBdLGs9YS5FdmVudChcInNsaWRlLmJzLmNhcm91c2VsXCIse3JlbGF0ZWRUYXJnZXQ6aixkaXJlY3Rpb246aH0pO2lmKHRoaXMuJGVsZW1lbnQudHJpZ2dlcihrKSwhay5pc0RlZmF1bHRQcmV2ZW50ZWQoKSl7aWYodGhpcy5zbGlkaW5nPSEwLGcmJnRoaXMucGF1c2UoKSx0aGlzLiRpbmRpY2F0b3JzLmxlbmd0aCl7dGhpcy4kaW5kaWNhdG9ycy5maW5kKFwiLmFjdGl2ZVwiKS5yZW1vdmVDbGFzcyhcImFjdGl2ZVwiKTt2YXIgbD1hKHRoaXMuJGluZGljYXRvcnMuY2hpbGRyZW4oKVt0aGlzLmdldEl0ZW1JbmRleChmKV0pO2wmJmwuYWRkQ2xhc3MoXCJhY3RpdmVcIil9dmFyIG09YS5FdmVudChcInNsaWQuYnMuY2Fyb3VzZWxcIix7cmVsYXRlZFRhcmdldDpqLGRpcmVjdGlvbjpofSk7cmV0dXJuIGEuc3VwcG9ydC50cmFuc2l0aW9uJiZ0aGlzLiRlbGVtZW50Lmhhc0NsYXNzKFwic2xpZGVcIik/KGYuYWRkQ2xhc3MoYiksZlswXS5vZmZzZXRXaWR0aCxlLmFkZENsYXNzKGgpLGYuYWRkQ2xhc3MoaCksZS5vbmUoXCJic1RyYW5zaXRpb25FbmRcIixmdW5jdGlvbigpe2YucmVtb3ZlQ2xhc3MoW2IsaF0uam9pbihcIiBcIikpLmFkZENsYXNzKFwiYWN0aXZlXCIpLGUucmVtb3ZlQ2xhc3MoW1wiYWN0aXZlXCIsaF0uam9pbihcIiBcIikpLGkuc2xpZGluZz0hMSxzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7aS4kZWxlbWVudC50cmlnZ2VyKG0pfSwwKX0pLmVtdWxhdGVUcmFuc2l0aW9uRW5kKGMuVFJBTlNJVElPTl9EVVJBVElPTikpOihlLnJlbW92ZUNsYXNzKFwiYWN0aXZlXCIpLGYuYWRkQ2xhc3MoXCJhY3RpdmVcIiksdGhpcy5zbGlkaW5nPSExLHRoaXMuJGVsZW1lbnQudHJpZ2dlcihtKSksZyYmdGhpcy5jeWNsZSgpLHRoaXN9fTt2YXIgZD1hLmZuLmNhcm91c2VsO2EuZm4uY2Fyb3VzZWw9YixhLmZuLmNhcm91c2VsLkNvbnN0cnVjdG9yPWMsYS5mbi5jYXJvdXNlbC5ub0NvbmZsaWN0PWZ1bmN0aW9uKCl7cmV0dXJuIGEuZm4uY2Fyb3VzZWw9ZCx0aGlzfTt2YXIgZT1mdW5jdGlvbihjKXt2YXIgZCxlPWEodGhpcyksZj1hKGUuYXR0cihcImRhdGEtdGFyZ2V0XCIpfHwoZD1lLmF0dHIoXCJocmVmXCIpKSYmZC5yZXBsYWNlKC8uKig/PSNbXlxcc10rJCkvLFwiXCIpKTtpZihmLmhhc0NsYXNzKFwiY2Fyb3VzZWxcIikpe3ZhciBnPWEuZXh0ZW5kKHt9LGYuZGF0YSgpLGUuZGF0YSgpKSxoPWUuYXR0cihcImRhdGEtc2xpZGUtdG9cIik7aCYmKGcuaW50ZXJ2YWw9ITEpLGIuY2FsbChmLGcpLGgmJmYuZGF0YShcImJzLmNhcm91c2VsXCIpLnRvKGgpLGMucHJldmVudERlZmF1bHQoKX19O2EoZG9jdW1lbnQpLm9uKFwiY2xpY2suYnMuY2Fyb3VzZWwuZGF0YS1hcGlcIixcIltkYXRhLXNsaWRlXVwiLGUpLm9uKFwiY2xpY2suYnMuY2Fyb3VzZWwuZGF0YS1hcGlcIixcIltkYXRhLXNsaWRlLXRvXVwiLGUpLGEod2luZG93KS5vbihcImxvYWRcIixmdW5jdGlvbigpe2EoJ1tkYXRhLXJpZGU9XCJjYXJvdXNlbFwiXScpLmVhY2goZnVuY3Rpb24oKXt2YXIgYz1hKHRoaXMpO2IuY2FsbChjLGMuZGF0YSgpKX0pfSl9KGpRdWVyeSksK2Z1bmN0aW9uKGEpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIGIoYil7dmFyIGMsZD1iLmF0dHIoXCJkYXRhLXRhcmdldFwiKXx8KGM9Yi5hdHRyKFwiaHJlZlwiKSkmJmMucmVwbGFjZSgvLiooPz0jW15cXHNdKyQpLyxcIlwiKTtyZXR1cm4gYShkKX1mdW5jdGlvbiBjKGIpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgYz1hKHRoaXMpLGU9Yy5kYXRhKFwiYnMuY29sbGFwc2VcIiksZj1hLmV4dGVuZCh7fSxkLkRFRkFVTFRTLGMuZGF0YSgpLFwib2JqZWN0XCI9PXR5cGVvZiBiJiZiKTshZSYmZi50b2dnbGUmJi9zaG93fGhpZGUvLnRlc3QoYikmJihmLnRvZ2dsZT0hMSksZXx8Yy5kYXRhKFwiYnMuY29sbGFwc2VcIixlPW5ldyBkKHRoaXMsZikpLFwic3RyaW5nXCI9PXR5cGVvZiBiJiZlW2JdKCl9KX12YXIgZD1mdW5jdGlvbihiLGMpe3RoaXMuJGVsZW1lbnQ9YShiKSx0aGlzLm9wdGlvbnM9YS5leHRlbmQoe30sZC5ERUZBVUxUUyxjKSx0aGlzLiR0cmlnZ2VyPWEoJ1tkYXRhLXRvZ2dsZT1cImNvbGxhcHNlXCJdW2hyZWY9XCIjJytiLmlkKydcIl0sW2RhdGEtdG9nZ2xlPVwiY29sbGFwc2VcIl1bZGF0YS10YXJnZXQ9XCIjJytiLmlkKydcIl0nKSx0aGlzLnRyYW5zaXRpb25pbmc9bnVsbCx0aGlzLm9wdGlvbnMucGFyZW50P3RoaXMuJHBhcmVudD10aGlzLmdldFBhcmVudCgpOnRoaXMuYWRkQXJpYUFuZENvbGxhcHNlZENsYXNzKHRoaXMuJGVsZW1lbnQsdGhpcy4kdHJpZ2dlciksdGhpcy5vcHRpb25zLnRvZ2dsZSYmdGhpcy50b2dnbGUoKX07ZC5WRVJTSU9OPVwiMy4zLjVcIixkLlRSQU5TSVRJT05fRFVSQVRJT049MzUwLGQuREVGQVVMVFM9e3RvZ2dsZTohMH0sZC5wcm90b3R5cGUuZGltZW5zaW9uPWZ1bmN0aW9uKCl7dmFyIGE9dGhpcy4kZWxlbWVudC5oYXNDbGFzcyhcIndpZHRoXCIpO3JldHVybiBhP1wid2lkdGhcIjpcImhlaWdodFwifSxkLnByb3RvdHlwZS5zaG93PWZ1bmN0aW9uKCl7aWYoIXRoaXMudHJhbnNpdGlvbmluZyYmIXRoaXMuJGVsZW1lbnQuaGFzQ2xhc3MoXCJpblwiKSl7dmFyIGIsZT10aGlzLiRwYXJlbnQmJnRoaXMuJHBhcmVudC5jaGlsZHJlbihcIi5wYW5lbFwiKS5jaGlsZHJlbihcIi5pbiwgLmNvbGxhcHNpbmdcIik7aWYoIShlJiZlLmxlbmd0aCYmKGI9ZS5kYXRhKFwiYnMuY29sbGFwc2VcIiksYiYmYi50cmFuc2l0aW9uaW5nKSkpe3ZhciBmPWEuRXZlbnQoXCJzaG93LmJzLmNvbGxhcHNlXCIpO2lmKHRoaXMuJGVsZW1lbnQudHJpZ2dlcihmKSwhZi5pc0RlZmF1bHRQcmV2ZW50ZWQoKSl7ZSYmZS5sZW5ndGgmJihjLmNhbGwoZSxcImhpZGVcIiksYnx8ZS5kYXRhKFwiYnMuY29sbGFwc2VcIixudWxsKSk7dmFyIGc9dGhpcy5kaW1lbnNpb24oKTt0aGlzLiRlbGVtZW50LnJlbW92ZUNsYXNzKFwiY29sbGFwc2VcIikuYWRkQ2xhc3MoXCJjb2xsYXBzaW5nXCIpW2ddKDApLmF0dHIoXCJhcmlhLWV4cGFuZGVkXCIsITApLHRoaXMuJHRyaWdnZXIucmVtb3ZlQ2xhc3MoXCJjb2xsYXBzZWRcIikuYXR0cihcImFyaWEtZXhwYW5kZWRcIiwhMCksdGhpcy50cmFuc2l0aW9uaW5nPTE7dmFyIGg9ZnVuY3Rpb24oKXt0aGlzLiRlbGVtZW50LnJlbW92ZUNsYXNzKFwiY29sbGFwc2luZ1wiKS5hZGRDbGFzcyhcImNvbGxhcHNlIGluXCIpW2ddKFwiXCIpLHRoaXMudHJhbnNpdGlvbmluZz0wLHRoaXMuJGVsZW1lbnQudHJpZ2dlcihcInNob3duLmJzLmNvbGxhcHNlXCIpfTtpZighYS5zdXBwb3J0LnRyYW5zaXRpb24pcmV0dXJuIGguY2FsbCh0aGlzKTt2YXIgaT1hLmNhbWVsQ2FzZShbXCJzY3JvbGxcIixnXS5qb2luKFwiLVwiKSk7dGhpcy4kZWxlbWVudC5vbmUoXCJic1RyYW5zaXRpb25FbmRcIixhLnByb3h5KGgsdGhpcykpLmVtdWxhdGVUcmFuc2l0aW9uRW5kKGQuVFJBTlNJVElPTl9EVVJBVElPTilbZ10odGhpcy4kZWxlbWVudFswXVtpXSl9fX19LGQucHJvdG90eXBlLmhpZGU9ZnVuY3Rpb24oKXtpZighdGhpcy50cmFuc2l0aW9uaW5nJiZ0aGlzLiRlbGVtZW50Lmhhc0NsYXNzKFwiaW5cIikpe3ZhciBiPWEuRXZlbnQoXCJoaWRlLmJzLmNvbGxhcHNlXCIpO2lmKHRoaXMuJGVsZW1lbnQudHJpZ2dlcihiKSwhYi5pc0RlZmF1bHRQcmV2ZW50ZWQoKSl7dmFyIGM9dGhpcy5kaW1lbnNpb24oKTt0aGlzLiRlbGVtZW50W2NdKHRoaXMuJGVsZW1lbnRbY10oKSlbMF0ub2Zmc2V0SGVpZ2h0LHRoaXMuJGVsZW1lbnQuYWRkQ2xhc3MoXCJjb2xsYXBzaW5nXCIpLnJlbW92ZUNsYXNzKFwiY29sbGFwc2UgaW5cIikuYXR0cihcImFyaWEtZXhwYW5kZWRcIiwhMSksdGhpcy4kdHJpZ2dlci5hZGRDbGFzcyhcImNvbGxhcHNlZFwiKS5hdHRyKFwiYXJpYS1leHBhbmRlZFwiLCExKSx0aGlzLnRyYW5zaXRpb25pbmc9MTt2YXIgZT1mdW5jdGlvbigpe3RoaXMudHJhbnNpdGlvbmluZz0wLHRoaXMuJGVsZW1lbnQucmVtb3ZlQ2xhc3MoXCJjb2xsYXBzaW5nXCIpLmFkZENsYXNzKFwiY29sbGFwc2VcIikudHJpZ2dlcihcImhpZGRlbi5icy5jb2xsYXBzZVwiKX07cmV0dXJuIGEuc3VwcG9ydC50cmFuc2l0aW9uP3ZvaWQgdGhpcy4kZWxlbWVudFtjXSgwKS5vbmUoXCJic1RyYW5zaXRpb25FbmRcIixhLnByb3h5KGUsdGhpcykpLmVtdWxhdGVUcmFuc2l0aW9uRW5kKGQuVFJBTlNJVElPTl9EVVJBVElPTik6ZS5jYWxsKHRoaXMpfX19LGQucHJvdG90eXBlLnRvZ2dsZT1mdW5jdGlvbigpe3RoaXNbdGhpcy4kZWxlbWVudC5oYXNDbGFzcyhcImluXCIpP1wiaGlkZVwiOlwic2hvd1wiXSgpfSxkLnByb3RvdHlwZS5nZXRQYXJlbnQ9ZnVuY3Rpb24oKXtyZXR1cm4gYSh0aGlzLm9wdGlvbnMucGFyZW50KS5maW5kKCdbZGF0YS10b2dnbGU9XCJjb2xsYXBzZVwiXVtkYXRhLXBhcmVudD1cIicrdGhpcy5vcHRpb25zLnBhcmVudCsnXCJdJykuZWFjaChhLnByb3h5KGZ1bmN0aW9uKGMsZCl7dmFyIGU9YShkKTt0aGlzLmFkZEFyaWFBbmRDb2xsYXBzZWRDbGFzcyhiKGUpLGUpfSx0aGlzKSkuZW5kKCl9LGQucHJvdG90eXBlLmFkZEFyaWFBbmRDb2xsYXBzZWRDbGFzcz1mdW5jdGlvbihhLGIpe3ZhciBjPWEuaGFzQ2xhc3MoXCJpblwiKTthLmF0dHIoXCJhcmlhLWV4cGFuZGVkXCIsYyksYi50b2dnbGVDbGFzcyhcImNvbGxhcHNlZFwiLCFjKS5hdHRyKFwiYXJpYS1leHBhbmRlZFwiLGMpfTt2YXIgZT1hLmZuLmNvbGxhcHNlO2EuZm4uY29sbGFwc2U9YyxhLmZuLmNvbGxhcHNlLkNvbnN0cnVjdG9yPWQsYS5mbi5jb2xsYXBzZS5ub0NvbmZsaWN0PWZ1bmN0aW9uKCl7cmV0dXJuIGEuZm4uY29sbGFwc2U9ZSx0aGlzfSxhKGRvY3VtZW50KS5vbihcImNsaWNrLmJzLmNvbGxhcHNlLmRhdGEtYXBpXCIsJ1tkYXRhLXRvZ2dsZT1cImNvbGxhcHNlXCJdJyxmdW5jdGlvbihkKXt2YXIgZT1hKHRoaXMpO2UuYXR0cihcImRhdGEtdGFyZ2V0XCIpfHxkLnByZXZlbnREZWZhdWx0KCk7dmFyIGY9YihlKSxnPWYuZGF0YShcImJzLmNvbGxhcHNlXCIpLGg9Zz9cInRvZ2dsZVwiOmUuZGF0YSgpO2MuY2FsbChmLGgpfSl9KGpRdWVyeSksK2Z1bmN0aW9uKGEpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIGIoYil7dmFyIGM9Yi5hdHRyKFwiZGF0YS10YXJnZXRcIik7Y3x8KGM9Yi5hdHRyKFwiaHJlZlwiKSxjPWMmJi8jW0EtWmEtel0vLnRlc3QoYykmJmMucmVwbGFjZSgvLiooPz0jW15cXHNdKiQpLyxcIlwiKSk7dmFyIGQ9YyYmYShjKTtyZXR1cm4gZCYmZC5sZW5ndGg/ZDpiLnBhcmVudCgpfWZ1bmN0aW9uIGMoYyl7YyYmMz09PWMud2hpY2h8fChhKGUpLnJlbW92ZSgpLGEoZikuZWFjaChmdW5jdGlvbigpe3ZhciBkPWEodGhpcyksZT1iKGQpLGY9e3JlbGF0ZWRUYXJnZXQ6dGhpc307ZS5oYXNDbGFzcyhcIm9wZW5cIikmJihjJiZcImNsaWNrXCI9PWMudHlwZSYmL2lucHV0fHRleHRhcmVhL2kudGVzdChjLnRhcmdldC50YWdOYW1lKSYmYS5jb250YWlucyhlWzBdLGMudGFyZ2V0KXx8KGUudHJpZ2dlcihjPWEuRXZlbnQoXCJoaWRlLmJzLmRyb3Bkb3duXCIsZikpLGMuaXNEZWZhdWx0UHJldmVudGVkKCl8fChkLmF0dHIoXCJhcmlhLWV4cGFuZGVkXCIsXCJmYWxzZVwiKSxlLnJlbW92ZUNsYXNzKFwib3BlblwiKS50cmlnZ2VyKFwiaGlkZGVuLmJzLmRyb3Bkb3duXCIsZikpKSl9KSl9ZnVuY3Rpb24gZChiKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIGM9YSh0aGlzKSxkPWMuZGF0YShcImJzLmRyb3Bkb3duXCIpO2R8fGMuZGF0YShcImJzLmRyb3Bkb3duXCIsZD1uZXcgZyh0aGlzKSksXCJzdHJpbmdcIj09dHlwZW9mIGImJmRbYl0uY2FsbChjKX0pfXZhciBlPVwiLmRyb3Bkb3duLWJhY2tkcm9wXCIsZj0nW2RhdGEtdG9nZ2xlPVwiZHJvcGRvd25cIl0nLGc9ZnVuY3Rpb24oYil7YShiKS5vbihcImNsaWNrLmJzLmRyb3Bkb3duXCIsdGhpcy50b2dnbGUpfTtnLlZFUlNJT049XCIzLjMuNVwiLGcucHJvdG90eXBlLnRvZ2dsZT1mdW5jdGlvbihkKXt2YXIgZT1hKHRoaXMpO2lmKCFlLmlzKFwiLmRpc2FibGVkLCA6ZGlzYWJsZWRcIikpe3ZhciBmPWIoZSksZz1mLmhhc0NsYXNzKFwib3BlblwiKTtpZihjKCksIWcpe1wib250b3VjaHN0YXJ0XCJpbiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQmJiFmLmNsb3Nlc3QoXCIubmF2YmFyLW5hdlwiKS5sZW5ndGgmJmEoZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKSkuYWRkQ2xhc3MoXCJkcm9wZG93bi1iYWNrZHJvcFwiKS5pbnNlcnRBZnRlcihhKHRoaXMpKS5vbihcImNsaWNrXCIsYyk7dmFyIGg9e3JlbGF0ZWRUYXJnZXQ6dGhpc307aWYoZi50cmlnZ2VyKGQ9YS5FdmVudChcInNob3cuYnMuZHJvcGRvd25cIixoKSksZC5pc0RlZmF1bHRQcmV2ZW50ZWQoKSlyZXR1cm47ZS50cmlnZ2VyKFwiZm9jdXNcIikuYXR0cihcImFyaWEtZXhwYW5kZWRcIixcInRydWVcIiksZi50b2dnbGVDbGFzcyhcIm9wZW5cIikudHJpZ2dlcihcInNob3duLmJzLmRyb3Bkb3duXCIsaCl9cmV0dXJuITF9fSxnLnByb3RvdHlwZS5rZXlkb3duPWZ1bmN0aW9uKGMpe2lmKC8oMzh8NDB8Mjd8MzIpLy50ZXN0KGMud2hpY2gpJiYhL2lucHV0fHRleHRhcmVhL2kudGVzdChjLnRhcmdldC50YWdOYW1lKSl7dmFyIGQ9YSh0aGlzKTtpZihjLnByZXZlbnREZWZhdWx0KCksYy5zdG9wUHJvcGFnYXRpb24oKSwhZC5pcyhcIi5kaXNhYmxlZCwgOmRpc2FibGVkXCIpKXt2YXIgZT1iKGQpLGc9ZS5oYXNDbGFzcyhcIm9wZW5cIik7aWYoIWcmJjI3IT1jLndoaWNofHxnJiYyNz09Yy53aGljaClyZXR1cm4gMjc9PWMud2hpY2gmJmUuZmluZChmKS50cmlnZ2VyKFwiZm9jdXNcIiksZC50cmlnZ2VyKFwiY2xpY2tcIik7dmFyIGg9XCIgbGk6bm90KC5kaXNhYmxlZCk6dmlzaWJsZSBhXCIsaT1lLmZpbmQoXCIuZHJvcGRvd24tbWVudVwiK2gpO2lmKGkubGVuZ3RoKXt2YXIgaj1pLmluZGV4KGMudGFyZ2V0KTszOD09Yy53aGljaCYmaj4wJiZqLS0sNDA9PWMud2hpY2gmJmo8aS5sZW5ndGgtMSYmaisrLH5qfHwoaj0wKSxpLmVxKGopLnRyaWdnZXIoXCJmb2N1c1wiKX19fX07dmFyIGg9YS5mbi5kcm9wZG93bjthLmZuLmRyb3Bkb3duPWQsYS5mbi5kcm9wZG93bi5Db25zdHJ1Y3Rvcj1nLGEuZm4uZHJvcGRvd24ubm9Db25mbGljdD1mdW5jdGlvbigpe3JldHVybiBhLmZuLmRyb3Bkb3duPWgsdGhpc30sYShkb2N1bWVudCkub24oXCJjbGljay5icy5kcm9wZG93bi5kYXRhLWFwaVwiLGMpLm9uKFwiY2xpY2suYnMuZHJvcGRvd24uZGF0YS1hcGlcIixcIi5kcm9wZG93biBmb3JtXCIsZnVuY3Rpb24oYSl7YS5zdG9wUHJvcGFnYXRpb24oKX0pLm9uKFwiY2xpY2suYnMuZHJvcGRvd24uZGF0YS1hcGlcIixmLGcucHJvdG90eXBlLnRvZ2dsZSkub24oXCJrZXlkb3duLmJzLmRyb3Bkb3duLmRhdGEtYXBpXCIsZixnLnByb3RvdHlwZS5rZXlkb3duKS5vbihcImtleWRvd24uYnMuZHJvcGRvd24uZGF0YS1hcGlcIixcIi5kcm9wZG93bi1tZW51XCIsZy5wcm90b3R5cGUua2V5ZG93bil9KGpRdWVyeSksK2Z1bmN0aW9uKGEpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIGIoYixkKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIGU9YSh0aGlzKSxmPWUuZGF0YShcImJzLm1vZGFsXCIpLGc9YS5leHRlbmQoe30sYy5ERUZBVUxUUyxlLmRhdGEoKSxcIm9iamVjdFwiPT10eXBlb2YgYiYmYik7Znx8ZS5kYXRhKFwiYnMubW9kYWxcIixmPW5ldyBjKHRoaXMsZykpLFwic3RyaW5nXCI9PXR5cGVvZiBiP2ZbYl0oZCk6Zy5zaG93JiZmLnNob3coZCl9KX12YXIgYz1mdW5jdGlvbihiLGMpe3RoaXMub3B0aW9ucz1jLHRoaXMuJGJvZHk9YShkb2N1bWVudC5ib2R5KSx0aGlzLiRlbGVtZW50PWEoYiksdGhpcy4kZGlhbG9nPXRoaXMuJGVsZW1lbnQuZmluZChcIi5tb2RhbC1kaWFsb2dcIiksdGhpcy4kYmFja2Ryb3A9bnVsbCx0aGlzLmlzU2hvd249bnVsbCx0aGlzLm9yaWdpbmFsQm9keVBhZD1udWxsLHRoaXMuc2Nyb2xsYmFyV2lkdGg9MCx0aGlzLmlnbm9yZUJhY2tkcm9wQ2xpY2s9ITEsdGhpcy5vcHRpb25zLnJlbW90ZSYmdGhpcy4kZWxlbWVudC5maW5kKFwiLm1vZGFsLWNvbnRlbnRcIikubG9hZCh0aGlzLm9wdGlvbnMucmVtb3RlLGEucHJveHkoZnVuY3Rpb24oKXt0aGlzLiRlbGVtZW50LnRyaWdnZXIoXCJsb2FkZWQuYnMubW9kYWxcIil9LHRoaXMpKX07Yy5WRVJTSU9OPVwiMy4zLjVcIixjLlRSQU5TSVRJT05fRFVSQVRJT049MzAwLGMuQkFDS0RST1BfVFJBTlNJVElPTl9EVVJBVElPTj0xNTAsYy5ERUZBVUxUUz17YmFja2Ryb3A6ITAsa2V5Ym9hcmQ6ITAsc2hvdzohMH0sYy5wcm90b3R5cGUudG9nZ2xlPWZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLmlzU2hvd24/dGhpcy5oaWRlKCk6dGhpcy5zaG93KGEpfSxjLnByb3RvdHlwZS5zaG93PWZ1bmN0aW9uKGIpe3ZhciBkPXRoaXMsZT1hLkV2ZW50KFwic2hvdy5icy5tb2RhbFwiLHtyZWxhdGVkVGFyZ2V0OmJ9KTt0aGlzLiRlbGVtZW50LnRyaWdnZXIoZSksdGhpcy5pc1Nob3dufHxlLmlzRGVmYXVsdFByZXZlbnRlZCgpfHwodGhpcy5pc1Nob3duPSEwLHRoaXMuY2hlY2tTY3JvbGxiYXIoKSx0aGlzLnNldFNjcm9sbGJhcigpLHRoaXMuJGJvZHkuYWRkQ2xhc3MoXCJtb2RhbC1vcGVuXCIpLHRoaXMuZXNjYXBlKCksdGhpcy5yZXNpemUoKSx0aGlzLiRlbGVtZW50Lm9uKFwiY2xpY2suZGlzbWlzcy5icy5tb2RhbFwiLCdbZGF0YS1kaXNtaXNzPVwibW9kYWxcIl0nLGEucHJveHkodGhpcy5oaWRlLHRoaXMpKSx0aGlzLiRkaWFsb2cub24oXCJtb3VzZWRvd24uZGlzbWlzcy5icy5tb2RhbFwiLGZ1bmN0aW9uKCl7ZC4kZWxlbWVudC5vbmUoXCJtb3VzZXVwLmRpc21pc3MuYnMubW9kYWxcIixmdW5jdGlvbihiKXthKGIudGFyZ2V0KS5pcyhkLiRlbGVtZW50KSYmKGQuaWdub3JlQmFja2Ryb3BDbGljaz0hMCl9KX0pLHRoaXMuYmFja2Ryb3AoZnVuY3Rpb24oKXt2YXIgZT1hLnN1cHBvcnQudHJhbnNpdGlvbiYmZC4kZWxlbWVudC5oYXNDbGFzcyhcImZhZGVcIik7ZC4kZWxlbWVudC5wYXJlbnQoKS5sZW5ndGh8fGQuJGVsZW1lbnQuYXBwZW5kVG8oZC4kYm9keSksZC4kZWxlbWVudC5zaG93KCkuc2Nyb2xsVG9wKDApLGQuYWRqdXN0RGlhbG9nKCksZSYmZC4kZWxlbWVudFswXS5vZmZzZXRXaWR0aCxkLiRlbGVtZW50LmFkZENsYXNzKFwiaW5cIiksZC5lbmZvcmNlRm9jdXMoKTt2YXIgZj1hLkV2ZW50KFwic2hvd24uYnMubW9kYWxcIix7cmVsYXRlZFRhcmdldDpifSk7ZT9kLiRkaWFsb2cub25lKFwiYnNUcmFuc2l0aW9uRW5kXCIsZnVuY3Rpb24oKXtkLiRlbGVtZW50LnRyaWdnZXIoXCJmb2N1c1wiKS50cmlnZ2VyKGYpfSkuZW11bGF0ZVRyYW5zaXRpb25FbmQoYy5UUkFOU0lUSU9OX0RVUkFUSU9OKTpkLiRlbGVtZW50LnRyaWdnZXIoXCJmb2N1c1wiKS50cmlnZ2VyKGYpfSkpfSxjLnByb3RvdHlwZS5oaWRlPWZ1bmN0aW9uKGIpe2ImJmIucHJldmVudERlZmF1bHQoKSxiPWEuRXZlbnQoXCJoaWRlLmJzLm1vZGFsXCIpLHRoaXMuJGVsZW1lbnQudHJpZ2dlcihiKSx0aGlzLmlzU2hvd24mJiFiLmlzRGVmYXVsdFByZXZlbnRlZCgpJiYodGhpcy5pc1Nob3duPSExLHRoaXMuZXNjYXBlKCksdGhpcy5yZXNpemUoKSxhKGRvY3VtZW50KS5vZmYoXCJmb2N1c2luLmJzLm1vZGFsXCIpLHRoaXMuJGVsZW1lbnQucmVtb3ZlQ2xhc3MoXCJpblwiKS5vZmYoXCJjbGljay5kaXNtaXNzLmJzLm1vZGFsXCIpLm9mZihcIm1vdXNldXAuZGlzbWlzcy5icy5tb2RhbFwiKSx0aGlzLiRkaWFsb2cub2ZmKFwibW91c2Vkb3duLmRpc21pc3MuYnMubW9kYWxcIiksYS5zdXBwb3J0LnRyYW5zaXRpb24mJnRoaXMuJGVsZW1lbnQuaGFzQ2xhc3MoXCJmYWRlXCIpP3RoaXMuJGVsZW1lbnQub25lKFwiYnNUcmFuc2l0aW9uRW5kXCIsYS5wcm94eSh0aGlzLmhpZGVNb2RhbCx0aGlzKSkuZW11bGF0ZVRyYW5zaXRpb25FbmQoYy5UUkFOU0lUSU9OX0RVUkFUSU9OKTp0aGlzLmhpZGVNb2RhbCgpKX0sYy5wcm90b3R5cGUuZW5mb3JjZUZvY3VzPWZ1bmN0aW9uKCl7YShkb2N1bWVudCkub2ZmKFwiZm9jdXNpbi5icy5tb2RhbFwiKS5vbihcImZvY3VzaW4uYnMubW9kYWxcIixhLnByb3h5KGZ1bmN0aW9uKGEpe3RoaXMuJGVsZW1lbnRbMF09PT1hLnRhcmdldHx8dGhpcy4kZWxlbWVudC5oYXMoYS50YXJnZXQpLmxlbmd0aHx8dGhpcy4kZWxlbWVudC50cmlnZ2VyKFwiZm9jdXNcIil9LHRoaXMpKX0sYy5wcm90b3R5cGUuZXNjYXBlPWZ1bmN0aW9uKCl7dGhpcy5pc1Nob3duJiZ0aGlzLm9wdGlvbnMua2V5Ym9hcmQ/dGhpcy4kZWxlbWVudC5vbihcImtleWRvd24uZGlzbWlzcy5icy5tb2RhbFwiLGEucHJveHkoZnVuY3Rpb24oYSl7Mjc9PWEud2hpY2gmJnRoaXMuaGlkZSgpfSx0aGlzKSk6dGhpcy5pc1Nob3dufHx0aGlzLiRlbGVtZW50Lm9mZihcImtleWRvd24uZGlzbWlzcy5icy5tb2RhbFwiKX0sYy5wcm90b3R5cGUucmVzaXplPWZ1bmN0aW9uKCl7dGhpcy5pc1Nob3duP2Eod2luZG93KS5vbihcInJlc2l6ZS5icy5tb2RhbFwiLGEucHJveHkodGhpcy5oYW5kbGVVcGRhdGUsdGhpcykpOmEod2luZG93KS5vZmYoXCJyZXNpemUuYnMubW9kYWxcIil9LGMucHJvdG90eXBlLmhpZGVNb2RhbD1mdW5jdGlvbigpe3ZhciBhPXRoaXM7dGhpcy4kZWxlbWVudC5oaWRlKCksdGhpcy5iYWNrZHJvcChmdW5jdGlvbigpe2EuJGJvZHkucmVtb3ZlQ2xhc3MoXCJtb2RhbC1vcGVuXCIpLGEucmVzZXRBZGp1c3RtZW50cygpLGEucmVzZXRTY3JvbGxiYXIoKSxhLiRlbGVtZW50LnRyaWdnZXIoXCJoaWRkZW4uYnMubW9kYWxcIil9KX0sYy5wcm90b3R5cGUucmVtb3ZlQmFja2Ryb3A9ZnVuY3Rpb24oKXt0aGlzLiRiYWNrZHJvcCYmdGhpcy4kYmFja2Ryb3AucmVtb3ZlKCksdGhpcy4kYmFja2Ryb3A9bnVsbH0sYy5wcm90b3R5cGUuYmFja2Ryb3A9ZnVuY3Rpb24oYil7dmFyIGQ9dGhpcyxlPXRoaXMuJGVsZW1lbnQuaGFzQ2xhc3MoXCJmYWRlXCIpP1wiZmFkZVwiOlwiXCI7aWYodGhpcy5pc1Nob3duJiZ0aGlzLm9wdGlvbnMuYmFja2Ryb3Ape3ZhciBmPWEuc3VwcG9ydC50cmFuc2l0aW9uJiZlO2lmKHRoaXMuJGJhY2tkcm9wPWEoZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKSkuYWRkQ2xhc3MoXCJtb2RhbC1iYWNrZHJvcCBcIitlKS5hcHBlbmRUbyh0aGlzLiRib2R5KSx0aGlzLiRlbGVtZW50Lm9uKFwiY2xpY2suZGlzbWlzcy5icy5tb2RhbFwiLGEucHJveHkoZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuaWdub3JlQmFja2Ryb3BDbGljaz92b2lkKHRoaXMuaWdub3JlQmFja2Ryb3BDbGljaz0hMSk6dm9pZChhLnRhcmdldD09PWEuY3VycmVudFRhcmdldCYmKFwic3RhdGljXCI9PXRoaXMub3B0aW9ucy5iYWNrZHJvcD90aGlzLiRlbGVtZW50WzBdLmZvY3VzKCk6dGhpcy5oaWRlKCkpKX0sdGhpcykpLGYmJnRoaXMuJGJhY2tkcm9wWzBdLm9mZnNldFdpZHRoLHRoaXMuJGJhY2tkcm9wLmFkZENsYXNzKFwiaW5cIiksIWIpcmV0dXJuO2Y/dGhpcy4kYmFja2Ryb3Aub25lKFwiYnNUcmFuc2l0aW9uRW5kXCIsYikuZW11bGF0ZVRyYW5zaXRpb25FbmQoYy5CQUNLRFJPUF9UUkFOU0lUSU9OX0RVUkFUSU9OKTpiKCl9ZWxzZSBpZighdGhpcy5pc1Nob3duJiZ0aGlzLiRiYWNrZHJvcCl7dGhpcy4kYmFja2Ryb3AucmVtb3ZlQ2xhc3MoXCJpblwiKTt2YXIgZz1mdW5jdGlvbigpe2QucmVtb3ZlQmFja2Ryb3AoKSxiJiZiKCl9O2Euc3VwcG9ydC50cmFuc2l0aW9uJiZ0aGlzLiRlbGVtZW50Lmhhc0NsYXNzKFwiZmFkZVwiKT90aGlzLiRiYWNrZHJvcC5vbmUoXCJic1RyYW5zaXRpb25FbmRcIixnKS5lbXVsYXRlVHJhbnNpdGlvbkVuZChjLkJBQ0tEUk9QX1RSQU5TSVRJT05fRFVSQVRJT04pOmcoKX1lbHNlIGImJmIoKX0sYy5wcm90b3R5cGUuaGFuZGxlVXBkYXRlPWZ1bmN0aW9uKCl7dGhpcy5hZGp1c3REaWFsb2coKX0sYy5wcm90b3R5cGUuYWRqdXN0RGlhbG9nPWZ1bmN0aW9uKCl7dmFyIGE9dGhpcy4kZWxlbWVudFswXS5zY3JvbGxIZWlnaHQ+ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudEhlaWdodDt0aGlzLiRlbGVtZW50LmNzcyh7cGFkZGluZ0xlZnQ6IXRoaXMuYm9keUlzT3ZlcmZsb3dpbmcmJmE/dGhpcy5zY3JvbGxiYXJXaWR0aDpcIlwiLHBhZGRpbmdSaWdodDp0aGlzLmJvZHlJc092ZXJmbG93aW5nJiYhYT90aGlzLnNjcm9sbGJhcldpZHRoOlwiXCJ9KX0sYy5wcm90b3R5cGUucmVzZXRBZGp1c3RtZW50cz1mdW5jdGlvbigpe3RoaXMuJGVsZW1lbnQuY3NzKHtwYWRkaW5nTGVmdDpcIlwiLHBhZGRpbmdSaWdodDpcIlwifSl9LGMucHJvdG90eXBlLmNoZWNrU2Nyb2xsYmFyPWZ1bmN0aW9uKCl7dmFyIGE9d2luZG93LmlubmVyV2lkdGg7aWYoIWEpe3ZhciBiPWRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTthPWIucmlnaHQtTWF0aC5hYnMoYi5sZWZ0KX10aGlzLmJvZHlJc092ZXJmbG93aW5nPWRvY3VtZW50LmJvZHkuY2xpZW50V2lkdGg8YSx0aGlzLnNjcm9sbGJhcldpZHRoPXRoaXMubWVhc3VyZVNjcm9sbGJhcigpfSxjLnByb3RvdHlwZS5zZXRTY3JvbGxiYXI9ZnVuY3Rpb24oKXt2YXIgYT1wYXJzZUludCh0aGlzLiRib2R5LmNzcyhcInBhZGRpbmctcmlnaHRcIil8fDAsMTApO3RoaXMub3JpZ2luYWxCb2R5UGFkPWRvY3VtZW50LmJvZHkuc3R5bGUucGFkZGluZ1JpZ2h0fHxcIlwiLHRoaXMuYm9keUlzT3ZlcmZsb3dpbmcmJnRoaXMuJGJvZHkuY3NzKFwicGFkZGluZy1yaWdodFwiLGErdGhpcy5zY3JvbGxiYXJXaWR0aCl9LGMucHJvdG90eXBlLnJlc2V0U2Nyb2xsYmFyPWZ1bmN0aW9uKCl7dGhpcy4kYm9keS5jc3MoXCJwYWRkaW5nLXJpZ2h0XCIsdGhpcy5vcmlnaW5hbEJvZHlQYWQpfSxjLnByb3RvdHlwZS5tZWFzdXJlU2Nyb2xsYmFyPWZ1bmN0aW9uKCl7dmFyIGE9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTthLmNsYXNzTmFtZT1cIm1vZGFsLXNjcm9sbGJhci1tZWFzdXJlXCIsdGhpcy4kYm9keS5hcHBlbmQoYSk7dmFyIGI9YS5vZmZzZXRXaWR0aC1hLmNsaWVudFdpZHRoO3JldHVybiB0aGlzLiRib2R5WzBdLnJlbW92ZUNoaWxkKGEpLGJ9O3ZhciBkPWEuZm4ubW9kYWw7YS5mbi5tb2RhbD1iLGEuZm4ubW9kYWwuQ29uc3RydWN0b3I9YyxhLmZuLm1vZGFsLm5vQ29uZmxpY3Q9ZnVuY3Rpb24oKXtyZXR1cm4gYS5mbi5tb2RhbD1kLHRoaXN9LGEoZG9jdW1lbnQpLm9uKFwiY2xpY2suYnMubW9kYWwuZGF0YS1hcGlcIiwnW2RhdGEtdG9nZ2xlPVwibW9kYWxcIl0nLGZ1bmN0aW9uKGMpe3ZhciBkPWEodGhpcyksZT1kLmF0dHIoXCJocmVmXCIpLGY9YShkLmF0dHIoXCJkYXRhLXRhcmdldFwiKXx8ZSYmZS5yZXBsYWNlKC8uKig/PSNbXlxcc10rJCkvLFwiXCIpKSxnPWYuZGF0YShcImJzLm1vZGFsXCIpP1widG9nZ2xlXCI6YS5leHRlbmQoe3JlbW90ZTohLyMvLnRlc3QoZSkmJmV9LGYuZGF0YSgpLGQuZGF0YSgpKTtkLmlzKFwiYVwiKSYmYy5wcmV2ZW50RGVmYXVsdCgpLGYub25lKFwic2hvdy5icy5tb2RhbFwiLGZ1bmN0aW9uKGEpe2EuaXNEZWZhdWx0UHJldmVudGVkKCl8fGYub25lKFwiaGlkZGVuLmJzLm1vZGFsXCIsZnVuY3Rpb24oKXtkLmlzKFwiOnZpc2libGVcIikmJmQudHJpZ2dlcihcImZvY3VzXCIpfSl9KSxiLmNhbGwoZixnLHRoaXMpfSl9KGpRdWVyeSksK2Z1bmN0aW9uKGEpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIGIoYil7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe3ZhciBkPWEodGhpcyksZT1kLmRhdGEoXCJicy50b29sdGlwXCIpLGY9XCJvYmplY3RcIj09dHlwZW9mIGImJmI7KGV8fCEvZGVzdHJveXxoaWRlLy50ZXN0KGIpKSYmKGV8fGQuZGF0YShcImJzLnRvb2x0aXBcIixlPW5ldyBjKHRoaXMsZikpLFwic3RyaW5nXCI9PXR5cGVvZiBiJiZlW2JdKCkpfSl9dmFyIGM9ZnVuY3Rpb24oYSxiKXt0aGlzLnR5cGU9bnVsbCx0aGlzLm9wdGlvbnM9bnVsbCx0aGlzLmVuYWJsZWQ9bnVsbCx0aGlzLnRpbWVvdXQ9bnVsbCx0aGlzLmhvdmVyU3RhdGU9bnVsbCx0aGlzLiRlbGVtZW50PW51bGwsdGhpcy5pblN0YXRlPW51bGwsdGhpcy5pbml0KFwidG9vbHRpcFwiLGEsYil9O2MuVkVSU0lPTj1cIjMuMy41XCIsYy5UUkFOU0lUSU9OX0RVUkFUSU9OPTE1MCxjLkRFRkFVTFRTPXthbmltYXRpb246ITAscGxhY2VtZW50OlwidG9wXCIsc2VsZWN0b3I6ITEsdGVtcGxhdGU6JzxkaXYgY2xhc3M9XCJ0b29sdGlwXCIgcm9sZT1cInRvb2x0aXBcIj48ZGl2IGNsYXNzPVwidG9vbHRpcC1hcnJvd1wiPjwvZGl2PjxkaXYgY2xhc3M9XCJ0b29sdGlwLWlubmVyXCI+PC9kaXY+PC9kaXY+Jyx0cmlnZ2VyOlwiaG92ZXIgZm9jdXNcIix0aXRsZTpcIlwiLGRlbGF5OjAsaHRtbDohMSxjb250YWluZXI6ITEsdmlld3BvcnQ6e3NlbGVjdG9yOlwiYm9keVwiLHBhZGRpbmc6MH19LGMucHJvdG90eXBlLmluaXQ9ZnVuY3Rpb24oYixjLGQpe2lmKHRoaXMuZW5hYmxlZD0hMCx0aGlzLnR5cGU9Yix0aGlzLiRlbGVtZW50PWEoYyksdGhpcy5vcHRpb25zPXRoaXMuZ2V0T3B0aW9ucyhkKSx0aGlzLiR2aWV3cG9ydD10aGlzLm9wdGlvbnMudmlld3BvcnQmJmEoYS5pc0Z1bmN0aW9uKHRoaXMub3B0aW9ucy52aWV3cG9ydCk/dGhpcy5vcHRpb25zLnZpZXdwb3J0LmNhbGwodGhpcyx0aGlzLiRlbGVtZW50KTp0aGlzLm9wdGlvbnMudmlld3BvcnQuc2VsZWN0b3J8fHRoaXMub3B0aW9ucy52aWV3cG9ydCksdGhpcy5pblN0YXRlPXtjbGljazohMSxob3ZlcjohMSxmb2N1czohMX0sdGhpcy4kZWxlbWVudFswXWluc3RhbmNlb2YgZG9jdW1lbnQuY29uc3RydWN0b3ImJiF0aGlzLm9wdGlvbnMuc2VsZWN0b3IpdGhyb3cgbmV3IEVycm9yKFwiYHNlbGVjdG9yYCBvcHRpb24gbXVzdCBiZSBzcGVjaWZpZWQgd2hlbiBpbml0aWFsaXppbmcgXCIrdGhpcy50eXBlK1wiIG9uIHRoZSB3aW5kb3cuZG9jdW1lbnQgb2JqZWN0IVwiKTtmb3IodmFyIGU9dGhpcy5vcHRpb25zLnRyaWdnZXIuc3BsaXQoXCIgXCIpLGY9ZS5sZW5ndGg7Zi0tOyl7dmFyIGc9ZVtmXTtpZihcImNsaWNrXCI9PWcpdGhpcy4kZWxlbWVudC5vbihcImNsaWNrLlwiK3RoaXMudHlwZSx0aGlzLm9wdGlvbnMuc2VsZWN0b3IsYS5wcm94eSh0aGlzLnRvZ2dsZSx0aGlzKSk7ZWxzZSBpZihcIm1hbnVhbFwiIT1nKXt2YXIgaD1cImhvdmVyXCI9PWc/XCJtb3VzZWVudGVyXCI6XCJmb2N1c2luXCIsaT1cImhvdmVyXCI9PWc/XCJtb3VzZWxlYXZlXCI6XCJmb2N1c291dFwiO3RoaXMuJGVsZW1lbnQub24oaCtcIi5cIit0aGlzLnR5cGUsdGhpcy5vcHRpb25zLnNlbGVjdG9yLGEucHJveHkodGhpcy5lbnRlcix0aGlzKSksdGhpcy4kZWxlbWVudC5vbihpK1wiLlwiK3RoaXMudHlwZSx0aGlzLm9wdGlvbnMuc2VsZWN0b3IsYS5wcm94eSh0aGlzLmxlYXZlLHRoaXMpKX19dGhpcy5vcHRpb25zLnNlbGVjdG9yP3RoaXMuX29wdGlvbnM9YS5leHRlbmQoe30sdGhpcy5vcHRpb25zLHt0cmlnZ2VyOlwibWFudWFsXCIsc2VsZWN0b3I6XCJcIn0pOnRoaXMuZml4VGl0bGUoKX0sYy5wcm90b3R5cGUuZ2V0RGVmYXVsdHM9ZnVuY3Rpb24oKXtyZXR1cm4gYy5ERUZBVUxUU30sYy5wcm90b3R5cGUuZ2V0T3B0aW9ucz1mdW5jdGlvbihiKXtyZXR1cm4gYj1hLmV4dGVuZCh7fSx0aGlzLmdldERlZmF1bHRzKCksdGhpcy4kZWxlbWVudC5kYXRhKCksYiksYi5kZWxheSYmXCJudW1iZXJcIj09dHlwZW9mIGIuZGVsYXkmJihiLmRlbGF5PXtzaG93OmIuZGVsYXksaGlkZTpiLmRlbGF5fSksYn0sYy5wcm90b3R5cGUuZ2V0RGVsZWdhdGVPcHRpb25zPWZ1bmN0aW9uKCl7dmFyIGI9e30sYz10aGlzLmdldERlZmF1bHRzKCk7cmV0dXJuIHRoaXMuX29wdGlvbnMmJmEuZWFjaCh0aGlzLl9vcHRpb25zLGZ1bmN0aW9uKGEsZCl7Y1thXSE9ZCYmKGJbYV09ZCl9KSxifSxjLnByb3RvdHlwZS5lbnRlcj1mdW5jdGlvbihiKXt2YXIgYz1iIGluc3RhbmNlb2YgdGhpcy5jb25zdHJ1Y3Rvcj9iOmEoYi5jdXJyZW50VGFyZ2V0KS5kYXRhKFwiYnMuXCIrdGhpcy50eXBlKTtyZXR1cm4gY3x8KGM9bmV3IHRoaXMuY29uc3RydWN0b3IoYi5jdXJyZW50VGFyZ2V0LHRoaXMuZ2V0RGVsZWdhdGVPcHRpb25zKCkpLGEoYi5jdXJyZW50VGFyZ2V0KS5kYXRhKFwiYnMuXCIrdGhpcy50eXBlLGMpKSxiIGluc3RhbmNlb2YgYS5FdmVudCYmKGMuaW5TdGF0ZVtcImZvY3VzaW5cIj09Yi50eXBlP1wiZm9jdXNcIjpcImhvdmVyXCJdPSEwKSxjLnRpcCgpLmhhc0NsYXNzKFwiaW5cIil8fFwiaW5cIj09Yy5ob3ZlclN0YXRlP3ZvaWQoYy5ob3ZlclN0YXRlPVwiaW5cIik6KGNsZWFyVGltZW91dChjLnRpbWVvdXQpLGMuaG92ZXJTdGF0ZT1cImluXCIsYy5vcHRpb25zLmRlbGF5JiZjLm9wdGlvbnMuZGVsYXkuc2hvdz92b2lkKGMudGltZW91dD1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7XCJpblwiPT1jLmhvdmVyU3RhdGUmJmMuc2hvdygpfSxjLm9wdGlvbnMuZGVsYXkuc2hvdykpOmMuc2hvdygpKX0sYy5wcm90b3R5cGUuaXNJblN0YXRlVHJ1ZT1mdW5jdGlvbigpe2Zvcih2YXIgYSBpbiB0aGlzLmluU3RhdGUpaWYodGhpcy5pblN0YXRlW2FdKXJldHVybiEwO3JldHVybiExfSxjLnByb3RvdHlwZS5sZWF2ZT1mdW5jdGlvbihiKXt2YXIgYz1iIGluc3RhbmNlb2YgdGhpcy5jb25zdHJ1Y3Rvcj9iOmEoYi5jdXJyZW50VGFyZ2V0KS5kYXRhKFwiYnMuXCIrdGhpcy50eXBlKTtyZXR1cm4gY3x8KGM9bmV3IHRoaXMuY29uc3RydWN0b3IoYi5jdXJyZW50VGFyZ2V0LHRoaXMuZ2V0RGVsZWdhdGVPcHRpb25zKCkpLGEoYi5jdXJyZW50VGFyZ2V0KS5kYXRhKFwiYnMuXCIrdGhpcy50eXBlLGMpKSxiIGluc3RhbmNlb2YgYS5FdmVudCYmKGMuaW5TdGF0ZVtcImZvY3Vzb3V0XCI9PWIudHlwZT9cImZvY3VzXCI6XCJob3ZlclwiXT0hMSksYy5pc0luU3RhdGVUcnVlKCk/dm9pZCAwOihjbGVhclRpbWVvdXQoYy50aW1lb3V0KSxjLmhvdmVyU3RhdGU9XCJvdXRcIixjLm9wdGlvbnMuZGVsYXkmJmMub3B0aW9ucy5kZWxheS5oaWRlP3ZvaWQoYy50aW1lb3V0PXNldFRpbWVvdXQoZnVuY3Rpb24oKXtcIm91dFwiPT1jLmhvdmVyU3RhdGUmJmMuaGlkZSgpfSxjLm9wdGlvbnMuZGVsYXkuaGlkZSkpOmMuaGlkZSgpKX0sYy5wcm90b3R5cGUuc2hvdz1mdW5jdGlvbigpe3ZhciBiPWEuRXZlbnQoXCJzaG93LmJzLlwiK3RoaXMudHlwZSk7aWYodGhpcy5oYXNDb250ZW50KCkmJnRoaXMuZW5hYmxlZCl7dGhpcy4kZWxlbWVudC50cmlnZ2VyKGIpO3ZhciBkPWEuY29udGFpbnModGhpcy4kZWxlbWVudFswXS5vd25lckRvY3VtZW50LmRvY3VtZW50RWxlbWVudCx0aGlzLiRlbGVtZW50WzBdKTtpZihiLmlzRGVmYXVsdFByZXZlbnRlZCgpfHwhZClyZXR1cm47dmFyIGU9dGhpcyxmPXRoaXMudGlwKCksZz10aGlzLmdldFVJRCh0aGlzLnR5cGUpO3RoaXMuc2V0Q29udGVudCgpLGYuYXR0cihcImlkXCIsZyksdGhpcy4kZWxlbWVudC5hdHRyKFwiYXJpYS1kZXNjcmliZWRieVwiLGcpLHRoaXMub3B0aW9ucy5hbmltYXRpb24mJmYuYWRkQ2xhc3MoXCJmYWRlXCIpO3ZhciBoPVwiZnVuY3Rpb25cIj09dHlwZW9mIHRoaXMub3B0aW9ucy5wbGFjZW1lbnQ/dGhpcy5vcHRpb25zLnBsYWNlbWVudC5jYWxsKHRoaXMsZlswXSx0aGlzLiRlbGVtZW50WzBdKTp0aGlzLm9wdGlvbnMucGxhY2VtZW50LGk9L1xccz9hdXRvP1xccz8vaSxqPWkudGVzdChoKTtqJiYoaD1oLnJlcGxhY2UoaSxcIlwiKXx8XCJ0b3BcIiksZi5kZXRhY2goKS5jc3Moe3RvcDowLGxlZnQ6MCxkaXNwbGF5OlwiYmxvY2tcIn0pLmFkZENsYXNzKGgpLmRhdGEoXCJicy5cIit0aGlzLnR5cGUsdGhpcyksdGhpcy5vcHRpb25zLmNvbnRhaW5lcj9mLmFwcGVuZFRvKHRoaXMub3B0aW9ucy5jb250YWluZXIpOmYuaW5zZXJ0QWZ0ZXIodGhpcy4kZWxlbWVudCksdGhpcy4kZWxlbWVudC50cmlnZ2VyKFwiaW5zZXJ0ZWQuYnMuXCIrdGhpcy50eXBlKTt2YXIgaz10aGlzLmdldFBvc2l0aW9uKCksbD1mWzBdLm9mZnNldFdpZHRoLG09ZlswXS5vZmZzZXRIZWlnaHQ7aWYoail7dmFyIG49aCxvPXRoaXMuZ2V0UG9zaXRpb24odGhpcy4kdmlld3BvcnQpO2g9XCJib3R0b21cIj09aCYmay5ib3R0b20rbT5vLmJvdHRvbT9cInRvcFwiOlwidG9wXCI9PWgmJmsudG9wLW08by50b3A/XCJib3R0b21cIjpcInJpZ2h0XCI9PWgmJmsucmlnaHQrbD5vLndpZHRoP1wibGVmdFwiOlwibGVmdFwiPT1oJiZrLmxlZnQtbDxvLmxlZnQ/XCJyaWdodFwiOmgsZi5yZW1vdmVDbGFzcyhuKS5hZGRDbGFzcyhoKX12YXIgcD10aGlzLmdldENhbGN1bGF0ZWRPZmZzZXQoaCxrLGwsbSk7dGhpcy5hcHBseVBsYWNlbWVudChwLGgpO3ZhciBxPWZ1bmN0aW9uKCl7dmFyIGE9ZS5ob3ZlclN0YXRlO2UuJGVsZW1lbnQudHJpZ2dlcihcInNob3duLmJzLlwiK2UudHlwZSksZS5ob3ZlclN0YXRlPW51bGwsXCJvdXRcIj09YSYmZS5sZWF2ZShlKX07YS5zdXBwb3J0LnRyYW5zaXRpb24mJnRoaXMuJHRpcC5oYXNDbGFzcyhcImZhZGVcIik/Zi5vbmUoXCJic1RyYW5zaXRpb25FbmRcIixxKS5lbXVsYXRlVHJhbnNpdGlvbkVuZChjLlRSQU5TSVRJT05fRFVSQVRJT04pOnEoKX19LGMucHJvdG90eXBlLmFwcGx5UGxhY2VtZW50PWZ1bmN0aW9uKGIsYyl7dmFyIGQ9dGhpcy50aXAoKSxlPWRbMF0ub2Zmc2V0V2lkdGgsZj1kWzBdLm9mZnNldEhlaWdodCxnPXBhcnNlSW50KGQuY3NzKFwibWFyZ2luLXRvcFwiKSwxMCksaD1wYXJzZUludChkLmNzcyhcIm1hcmdpbi1sZWZ0XCIpLDEwKTtpc05hTihnKSYmKGc9MCksaXNOYU4oaCkmJihoPTApLGIudG9wKz1nLGIubGVmdCs9aCxhLm9mZnNldC5zZXRPZmZzZXQoZFswXSxhLmV4dGVuZCh7dXNpbmc6ZnVuY3Rpb24oYSl7ZC5jc3Moe3RvcDpNYXRoLnJvdW5kKGEudG9wKSxsZWZ0Ok1hdGgucm91bmQoYS5sZWZ0KX0pfX0sYiksMCksZC5hZGRDbGFzcyhcImluXCIpO3ZhciBpPWRbMF0ub2Zmc2V0V2lkdGgsaj1kWzBdLm9mZnNldEhlaWdodDtcInRvcFwiPT1jJiZqIT1mJiYoYi50b3A9Yi50b3ArZi1qKTt2YXIgaz10aGlzLmdldFZpZXdwb3J0QWRqdXN0ZWREZWx0YShjLGIsaSxqKTtrLmxlZnQ/Yi5sZWZ0Kz1rLmxlZnQ6Yi50b3ArPWsudG9wO3ZhciBsPS90b3B8Ym90dG9tLy50ZXN0KGMpLG09bD8yKmsubGVmdC1lK2k6MiprLnRvcC1mK2osbj1sP1wib2Zmc2V0V2lkdGhcIjpcIm9mZnNldEhlaWdodFwiO2Qub2Zmc2V0KGIpLHRoaXMucmVwbGFjZUFycm93KG0sZFswXVtuXSxsKX0sYy5wcm90b3R5cGUucmVwbGFjZUFycm93PWZ1bmN0aW9uKGEsYixjKXt0aGlzLmFycm93KCkuY3NzKGM/XCJsZWZ0XCI6XCJ0b3BcIiw1MCooMS1hL2IpK1wiJVwiKS5jc3MoYz9cInRvcFwiOlwibGVmdFwiLFwiXCIpfSxjLnByb3RvdHlwZS5zZXRDb250ZW50PWZ1bmN0aW9uKCl7dmFyIGE9dGhpcy50aXAoKSxiPXRoaXMuZ2V0VGl0bGUoKTthLmZpbmQoXCIudG9vbHRpcC1pbm5lclwiKVt0aGlzLm9wdGlvbnMuaHRtbD9cImh0bWxcIjpcInRleHRcIl0oYiksYS5yZW1vdmVDbGFzcyhcImZhZGUgaW4gdG9wIGJvdHRvbSBsZWZ0IHJpZ2h0XCIpfSxjLnByb3RvdHlwZS5oaWRlPWZ1bmN0aW9uKGIpe2Z1bmN0aW9uIGQoKXtcImluXCIhPWUuaG92ZXJTdGF0ZSYmZi5kZXRhY2goKSxlLiRlbGVtZW50LnJlbW92ZUF0dHIoXCJhcmlhLWRlc2NyaWJlZGJ5XCIpLnRyaWdnZXIoXCJoaWRkZW4uYnMuXCIrZS50eXBlKSxiJiZiKCl9dmFyIGU9dGhpcyxmPWEodGhpcy4kdGlwKSxnPWEuRXZlbnQoXCJoaWRlLmJzLlwiK3RoaXMudHlwZSk7cmV0dXJuIHRoaXMuJGVsZW1lbnQudHJpZ2dlcihnKSxnLmlzRGVmYXVsdFByZXZlbnRlZCgpP3ZvaWQgMDooZi5yZW1vdmVDbGFzcyhcImluXCIpLGEuc3VwcG9ydC50cmFuc2l0aW9uJiZmLmhhc0NsYXNzKFwiZmFkZVwiKT9mLm9uZShcImJzVHJhbnNpdGlvbkVuZFwiLGQpLmVtdWxhdGVUcmFuc2l0aW9uRW5kKGMuVFJBTlNJVElPTl9EVVJBVElPTik6ZCgpLHRoaXMuaG92ZXJTdGF0ZT1udWxsLHRoaXMpfSxjLnByb3RvdHlwZS5maXhUaXRsZT1mdW5jdGlvbigpe3ZhciBhPXRoaXMuJGVsZW1lbnQ7KGEuYXR0cihcInRpdGxlXCIpfHxcInN0cmluZ1wiIT10eXBlb2YgYS5hdHRyKFwiZGF0YS1vcmlnaW5hbC10aXRsZVwiKSkmJmEuYXR0cihcImRhdGEtb3JpZ2luYWwtdGl0bGVcIixhLmF0dHIoXCJ0aXRsZVwiKXx8XCJcIikuYXR0cihcInRpdGxlXCIsXCJcIil9LGMucHJvdG90eXBlLmhhc0NvbnRlbnQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXRUaXRsZSgpfSxjLnByb3RvdHlwZS5nZXRQb3NpdGlvbj1mdW5jdGlvbihiKXtiPWJ8fHRoaXMuJGVsZW1lbnQ7dmFyIGM9YlswXSxkPVwiQk9EWVwiPT1jLnRhZ05hbWUsZT1jLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO251bGw9PWUud2lkdGgmJihlPWEuZXh0ZW5kKHt9LGUse3dpZHRoOmUucmlnaHQtZS5sZWZ0LGhlaWdodDplLmJvdHRvbS1lLnRvcH0pKTt2YXIgZj1kP3t0b3A6MCxsZWZ0OjB9OmIub2Zmc2V0KCksZz17c2Nyb2xsOmQ/ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbFRvcHx8ZG9jdW1lbnQuYm9keS5zY3JvbGxUb3A6Yi5zY3JvbGxUb3AoKX0saD1kP3t3aWR0aDphKHdpbmRvdykud2lkdGgoKSxoZWlnaHQ6YSh3aW5kb3cpLmhlaWdodCgpfTpudWxsO3JldHVybiBhLmV4dGVuZCh7fSxlLGcsaCxmKX0sYy5wcm90b3R5cGUuZ2V0Q2FsY3VsYXRlZE9mZnNldD1mdW5jdGlvbihhLGIsYyxkKXtyZXR1cm5cImJvdHRvbVwiPT1hP3t0b3A6Yi50b3ArYi5oZWlnaHQsbGVmdDpiLmxlZnQrYi53aWR0aC8yLWMvMn06XCJ0b3BcIj09YT97dG9wOmIudG9wLWQsbGVmdDpiLmxlZnQrYi53aWR0aC8yLWMvMn06XCJsZWZ0XCI9PWE/e3RvcDpiLnRvcCtiLmhlaWdodC8yLWQvMixsZWZ0OmIubGVmdC1jfTp7dG9wOmIudG9wK2IuaGVpZ2h0LzItZC8yLGxlZnQ6Yi5sZWZ0K2Iud2lkdGh9fSxjLnByb3RvdHlwZS5nZXRWaWV3cG9ydEFkanVzdGVkRGVsdGE9ZnVuY3Rpb24oYSxiLGMsZCl7dmFyIGU9e3RvcDowLGxlZnQ6MH07aWYoIXRoaXMuJHZpZXdwb3J0KXJldHVybiBlO3ZhciBmPXRoaXMub3B0aW9ucy52aWV3cG9ydCYmdGhpcy5vcHRpb25zLnZpZXdwb3J0LnBhZGRpbmd8fDAsZz10aGlzLmdldFBvc2l0aW9uKHRoaXMuJHZpZXdwb3J0KTtpZigvcmlnaHR8bGVmdC8udGVzdChhKSl7dmFyIGg9Yi50b3AtZi1nLnNjcm9sbCxpPWIudG9wK2YtZy5zY3JvbGwrZDtoPGcudG9wP2UudG9wPWcudG9wLWg6aT5nLnRvcCtnLmhlaWdodCYmKGUudG9wPWcudG9wK2cuaGVpZ2h0LWkpfWVsc2V7dmFyIGo9Yi5sZWZ0LWYsaz1iLmxlZnQrZitjO2o8Zy5sZWZ0P2UubGVmdD1nLmxlZnQtajprPmcucmlnaHQmJihlLmxlZnQ9Zy5sZWZ0K2cud2lkdGgtayl9cmV0dXJuIGV9LGMucHJvdG90eXBlLmdldFRpdGxlPWZ1bmN0aW9uKCl7dmFyIGEsYj10aGlzLiRlbGVtZW50LGM9dGhpcy5vcHRpb25zO3JldHVybiBhPWIuYXR0cihcImRhdGEtb3JpZ2luYWwtdGl0bGVcIil8fChcImZ1bmN0aW9uXCI9PXR5cGVvZiBjLnRpdGxlP2MudGl0bGUuY2FsbChiWzBdKTpjLnRpdGxlKX0sYy5wcm90b3R5cGUuZ2V0VUlEPWZ1bmN0aW9uKGEpe2RvIGErPX5+KDFlNipNYXRoLnJhbmRvbSgpKTt3aGlsZShkb2N1bWVudC5nZXRFbGVtZW50QnlJZChhKSk7cmV0dXJuIGF9LGMucHJvdG90eXBlLnRpcD1mdW5jdGlvbigpe2lmKCF0aGlzLiR0aXAmJih0aGlzLiR0aXA9YSh0aGlzLm9wdGlvbnMudGVtcGxhdGUpLDEhPXRoaXMuJHRpcC5sZW5ndGgpKXRocm93IG5ldyBFcnJvcih0aGlzLnR5cGUrXCIgYHRlbXBsYXRlYCBvcHRpb24gbXVzdCBjb25zaXN0IG9mIGV4YWN0bHkgMSB0b3AtbGV2ZWwgZWxlbWVudCFcIik7cmV0dXJuIHRoaXMuJHRpcH0sYy5wcm90b3R5cGUuYXJyb3c9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy4kYXJyb3c9dGhpcy4kYXJyb3d8fHRoaXMudGlwKCkuZmluZChcIi50b29sdGlwLWFycm93XCIpfSxjLnByb3RvdHlwZS5lbmFibGU9ZnVuY3Rpb24oKXt0aGlzLmVuYWJsZWQ9ITB9LGMucHJvdG90eXBlLmRpc2FibGU9ZnVuY3Rpb24oKXt0aGlzLmVuYWJsZWQ9ITF9LGMucHJvdG90eXBlLnRvZ2dsZUVuYWJsZWQ9ZnVuY3Rpb24oKXt0aGlzLmVuYWJsZWQ9IXRoaXMuZW5hYmxlZH0sYy5wcm90b3R5cGUudG9nZ2xlPWZ1bmN0aW9uKGIpe3ZhciBjPXRoaXM7YiYmKGM9YShiLmN1cnJlbnRUYXJnZXQpLmRhdGEoXCJicy5cIit0aGlzLnR5cGUpLGN8fChjPW5ldyB0aGlzLmNvbnN0cnVjdG9yKGIuY3VycmVudFRhcmdldCx0aGlzLmdldERlbGVnYXRlT3B0aW9ucygpKSxhKGIuY3VycmVudFRhcmdldCkuZGF0YShcImJzLlwiK3RoaXMudHlwZSxjKSkpLGI/KGMuaW5TdGF0ZS5jbGljaz0hYy5pblN0YXRlLmNsaWNrLGMuaXNJblN0YXRlVHJ1ZSgpP2MuZW50ZXIoYyk6Yy5sZWF2ZShjKSk6Yy50aXAoKS5oYXNDbGFzcyhcImluXCIpP2MubGVhdmUoYyk6Yy5lbnRlcihjKX0sYy5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe3ZhciBhPXRoaXM7Y2xlYXJUaW1lb3V0KHRoaXMudGltZW91dCksdGhpcy5oaWRlKGZ1bmN0aW9uKCl7YS4kZWxlbWVudC5vZmYoXCIuXCIrYS50eXBlKS5yZW1vdmVEYXRhKFwiYnMuXCIrYS50eXBlKSxhLiR0aXAmJmEuJHRpcC5kZXRhY2goKSxhLiR0aXA9bnVsbCxhLiRhcnJvdz1udWxsLGEuJHZpZXdwb3J0PW51bGx9KX07dmFyIGQ9YS5mbi50b29sdGlwO2EuZm4udG9vbHRpcD1iLGEuZm4udG9vbHRpcC5Db25zdHJ1Y3Rvcj1jLGEuZm4udG9vbHRpcC5ub0NvbmZsaWN0PWZ1bmN0aW9uKCl7cmV0dXJuIGEuZm4udG9vbHRpcD1kLHRoaXN9fShqUXVlcnkpLCtmdW5jdGlvbihhKXtcInVzZSBzdHJpY3RcIjtmdW5jdGlvbiBiKGIpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgZD1hKHRoaXMpLGU9ZC5kYXRhKFwiYnMucG9wb3ZlclwiKSxmPVwib2JqZWN0XCI9PXR5cGVvZiBiJiZiOyhlfHwhL2Rlc3Ryb3l8aGlkZS8udGVzdChiKSkmJihlfHxkLmRhdGEoXCJicy5wb3BvdmVyXCIsZT1uZXcgYyh0aGlzLGYpKSxcInN0cmluZ1wiPT10eXBlb2YgYiYmZVtiXSgpKX0pfXZhciBjPWZ1bmN0aW9uKGEsYil7dGhpcy5pbml0KFwicG9wb3ZlclwiLGEsYil9O2lmKCFhLmZuLnRvb2x0aXApdGhyb3cgbmV3IEVycm9yKFwiUG9wb3ZlciByZXF1aXJlcyB0b29sdGlwLmpzXCIpO2MuVkVSU0lPTj1cIjMuMy41XCIsYy5ERUZBVUxUUz1hLmV4dGVuZCh7fSxhLmZuLnRvb2x0aXAuQ29uc3RydWN0b3IuREVGQVVMVFMse3BsYWNlbWVudDpcInJpZ2h0XCIsdHJpZ2dlcjpcImNsaWNrXCIsY29udGVudDpcIlwiLHRlbXBsYXRlOic8ZGl2IGNsYXNzPVwicG9wb3ZlclwiIHJvbGU9XCJ0b29sdGlwXCI+PGRpdiBjbGFzcz1cImFycm93XCI+PC9kaXY+PGgzIGNsYXNzPVwicG9wb3Zlci10aXRsZVwiPjwvaDM+PGRpdiBjbGFzcz1cInBvcG92ZXItY29udGVudFwiPjwvZGl2PjwvZGl2Pid9KSxjLnByb3RvdHlwZT1hLmV4dGVuZCh7fSxhLmZuLnRvb2x0aXAuQ29uc3RydWN0b3IucHJvdG90eXBlKSxjLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1jLGMucHJvdG90eXBlLmdldERlZmF1bHRzPWZ1bmN0aW9uKCl7cmV0dXJuIGMuREVGQVVMVFN9LGMucHJvdG90eXBlLnNldENvbnRlbnQ9ZnVuY3Rpb24oKXt2YXIgYT10aGlzLnRpcCgpLGI9dGhpcy5nZXRUaXRsZSgpLGM9dGhpcy5nZXRDb250ZW50KCk7YS5maW5kKFwiLnBvcG92ZXItdGl0bGVcIilbdGhpcy5vcHRpb25zLmh0bWw/XCJodG1sXCI6XCJ0ZXh0XCJdKGIpLGEuZmluZChcIi5wb3BvdmVyLWNvbnRlbnRcIikuY2hpbGRyZW4oKS5kZXRhY2goKS5lbmQoKVt0aGlzLm9wdGlvbnMuaHRtbD9cInN0cmluZ1wiPT10eXBlb2YgYz9cImh0bWxcIjpcImFwcGVuZFwiOlwidGV4dFwiXShjKSxhLnJlbW92ZUNsYXNzKFwiZmFkZSB0b3AgYm90dG9tIGxlZnQgcmlnaHQgaW5cIiksYS5maW5kKFwiLnBvcG92ZXItdGl0bGVcIikuaHRtbCgpfHxhLmZpbmQoXCIucG9wb3Zlci10aXRsZVwiKS5oaWRlKCl9LGMucHJvdG90eXBlLmhhc0NvbnRlbnQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXRUaXRsZSgpfHx0aGlzLmdldENvbnRlbnQoKX0sYy5wcm90b3R5cGUuZ2V0Q29udGVudD1mdW5jdGlvbigpe3ZhciBhPXRoaXMuJGVsZW1lbnQsYj10aGlzLm9wdGlvbnM7cmV0dXJuIGEuYXR0cihcImRhdGEtY29udGVudFwiKXx8KFwiZnVuY3Rpb25cIj09dHlwZW9mIGIuY29udGVudD9iLmNvbnRlbnQuY2FsbChhWzBdKTpiLmNvbnRlbnQpfSxjLnByb3RvdHlwZS5hcnJvdz1mdW5jdGlvbigpe3JldHVybiB0aGlzLiRhcnJvdz10aGlzLiRhcnJvd3x8dGhpcy50aXAoKS5maW5kKFwiLmFycm93XCIpfTt2YXIgZD1hLmZuLnBvcG92ZXI7YS5mbi5wb3BvdmVyPWIsYS5mbi5wb3BvdmVyLkNvbnN0cnVjdG9yPWMsYS5mbi5wb3BvdmVyLm5vQ29uZmxpY3Q9ZnVuY3Rpb24oKXtyZXR1cm4gYS5mbi5wb3BvdmVyPWQsdGhpc319KGpRdWVyeSksK2Z1bmN0aW9uKGEpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIGIoYyxkKXt0aGlzLiRib2R5PWEoZG9jdW1lbnQuYm9keSksdGhpcy4kc2Nyb2xsRWxlbWVudD1hKGEoYykuaXMoZG9jdW1lbnQuYm9keSk/d2luZG93OmMpLHRoaXMub3B0aW9ucz1hLmV4dGVuZCh7fSxiLkRFRkFVTFRTLGQpLHRoaXMuc2VsZWN0b3I9KHRoaXMub3B0aW9ucy50YXJnZXR8fFwiXCIpK1wiIC5uYXYgbGkgPiBhXCIsdGhpcy5vZmZzZXRzPVtdLHRoaXMudGFyZ2V0cz1bXSx0aGlzLmFjdGl2ZVRhcmdldD1udWxsLHRoaXMuc2Nyb2xsSGVpZ2h0PTAsdGhpcy4kc2Nyb2xsRWxlbWVudC5vbihcInNjcm9sbC5icy5zY3JvbGxzcHlcIixhLnByb3h5KHRoaXMucHJvY2Vzcyx0aGlzKSksdGhpcy5yZWZyZXNoKCksdGhpcy5wcm9jZXNzKCl9ZnVuY3Rpb24gYyhjKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIGQ9YSh0aGlzKSxlPWQuZGF0YShcImJzLnNjcm9sbHNweVwiKSxmPVwib2JqZWN0XCI9PXR5cGVvZiBjJiZjO2V8fGQuZGF0YShcImJzLnNjcm9sbHNweVwiLGU9bmV3IGIodGhpcyxmKSksXCJzdHJpbmdcIj09dHlwZW9mIGMmJmVbY10oKX0pfWIuVkVSU0lPTj1cIjMuMy41XCIsYi5ERUZBVUxUUz17b2Zmc2V0OjEwfSxiLnByb3RvdHlwZS5nZXRTY3JvbGxIZWlnaHQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy4kc2Nyb2xsRWxlbWVudFswXS5zY3JvbGxIZWlnaHR8fE1hdGgubWF4KHRoaXMuJGJvZHlbMF0uc2Nyb2xsSGVpZ2h0LGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxIZWlnaHQpfSxiLnByb3RvdHlwZS5yZWZyZXNoPWZ1bmN0aW9uKCl7dmFyIGI9dGhpcyxjPVwib2Zmc2V0XCIsZD0wO3RoaXMub2Zmc2V0cz1bXSx0aGlzLnRhcmdldHM9W10sdGhpcy5zY3JvbGxIZWlnaHQ9dGhpcy5nZXRTY3JvbGxIZWlnaHQoKSxhLmlzV2luZG93KHRoaXMuJHNjcm9sbEVsZW1lbnRbMF0pfHwoYz1cInBvc2l0aW9uXCIsZD10aGlzLiRzY3JvbGxFbGVtZW50LnNjcm9sbFRvcCgpKSx0aGlzLiRib2R5LmZpbmQodGhpcy5zZWxlY3RvcikubWFwKGZ1bmN0aW9uKCl7dmFyIGI9YSh0aGlzKSxlPWIuZGF0YShcInRhcmdldFwiKXx8Yi5hdHRyKFwiaHJlZlwiKSxmPS9eIy4vLnRlc3QoZSkmJmEoZSk7cmV0dXJuIGYmJmYubGVuZ3RoJiZmLmlzKFwiOnZpc2libGVcIikmJltbZltjXSgpLnRvcCtkLGVdXXx8bnVsbH0pLnNvcnQoZnVuY3Rpb24oYSxiKXtyZXR1cm4gYVswXS1iWzBdfSkuZWFjaChmdW5jdGlvbigpe2Iub2Zmc2V0cy5wdXNoKHRoaXNbMF0pLGIudGFyZ2V0cy5wdXNoKHRoaXNbMV0pfSl9LGIucHJvdG90eXBlLnByb2Nlc3M9ZnVuY3Rpb24oKXt2YXIgYSxiPXRoaXMuJHNjcm9sbEVsZW1lbnQuc2Nyb2xsVG9wKCkrdGhpcy5vcHRpb25zLm9mZnNldCxjPXRoaXMuZ2V0U2Nyb2xsSGVpZ2h0KCksZD10aGlzLm9wdGlvbnMub2Zmc2V0K2MtdGhpcy4kc2Nyb2xsRWxlbWVudC5oZWlnaHQoKSxlPXRoaXMub2Zmc2V0cyxmPXRoaXMudGFyZ2V0cyxnPXRoaXMuYWN0aXZlVGFyZ2V0O2lmKHRoaXMuc2Nyb2xsSGVpZ2h0IT1jJiZ0aGlzLnJlZnJlc2goKSxiPj1kKXJldHVybiBnIT0oYT1mW2YubGVuZ3RoLTFdKSYmdGhpcy5hY3RpdmF0ZShhKTtpZihnJiZiPGVbMF0pcmV0dXJuIHRoaXMuYWN0aXZlVGFyZ2V0PW51bGwsdGhpcy5jbGVhcigpO2ZvcihhPWUubGVuZ3RoO2EtLTspZyE9ZlthXSYmYj49ZVthXSYmKHZvaWQgMD09PWVbYSsxXXx8YjxlW2ErMV0pJiZ0aGlzLmFjdGl2YXRlKGZbYV0pfSxiLnByb3RvdHlwZS5hY3RpdmF0ZT1mdW5jdGlvbihiKXt0aGlzLmFjdGl2ZVRhcmdldD1iLHRoaXMuY2xlYXIoKTt2YXIgYz10aGlzLnNlbGVjdG9yKydbZGF0YS10YXJnZXQ9XCInK2IrJ1wiXSwnK3RoaXMuc2VsZWN0b3IrJ1tocmVmPVwiJytiKydcIl0nLGQ9YShjKS5wYXJlbnRzKFwibGlcIikuYWRkQ2xhc3MoXCJhY3RpdmVcIik7ZC5wYXJlbnQoXCIuZHJvcGRvd24tbWVudVwiKS5sZW5ndGgmJihkPWQuY2xvc2VzdChcImxpLmRyb3Bkb3duXCIpLmFkZENsYXNzKFwiYWN0aXZlXCIpKSxcbmQudHJpZ2dlcihcImFjdGl2YXRlLmJzLnNjcm9sbHNweVwiKX0sYi5wcm90b3R5cGUuY2xlYXI9ZnVuY3Rpb24oKXthKHRoaXMuc2VsZWN0b3IpLnBhcmVudHNVbnRpbCh0aGlzLm9wdGlvbnMudGFyZ2V0LFwiLmFjdGl2ZVwiKS5yZW1vdmVDbGFzcyhcImFjdGl2ZVwiKX07dmFyIGQ9YS5mbi5zY3JvbGxzcHk7YS5mbi5zY3JvbGxzcHk9YyxhLmZuLnNjcm9sbHNweS5Db25zdHJ1Y3Rvcj1iLGEuZm4uc2Nyb2xsc3B5Lm5vQ29uZmxpY3Q9ZnVuY3Rpb24oKXtyZXR1cm4gYS5mbi5zY3JvbGxzcHk9ZCx0aGlzfSxhKHdpbmRvdykub24oXCJsb2FkLmJzLnNjcm9sbHNweS5kYXRhLWFwaVwiLGZ1bmN0aW9uKCl7YSgnW2RhdGEtc3B5PVwic2Nyb2xsXCJdJykuZWFjaChmdW5jdGlvbigpe3ZhciBiPWEodGhpcyk7Yy5jYWxsKGIsYi5kYXRhKCkpfSl9KX0oalF1ZXJ5KSwrZnVuY3Rpb24oYSl7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gYihiKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIGQ9YSh0aGlzKSxlPWQuZGF0YShcImJzLnRhYlwiKTtlfHxkLmRhdGEoXCJicy50YWJcIixlPW5ldyBjKHRoaXMpKSxcInN0cmluZ1wiPT10eXBlb2YgYiYmZVtiXSgpfSl9dmFyIGM9ZnVuY3Rpb24oYil7dGhpcy5lbGVtZW50PWEoYil9O2MuVkVSU0lPTj1cIjMuMy41XCIsYy5UUkFOU0lUSU9OX0RVUkFUSU9OPTE1MCxjLnByb3RvdHlwZS5zaG93PWZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5lbGVtZW50LGM9Yi5jbG9zZXN0KFwidWw6bm90KC5kcm9wZG93bi1tZW51KVwiKSxkPWIuZGF0YShcInRhcmdldFwiKTtpZihkfHwoZD1iLmF0dHIoXCJocmVmXCIpLGQ9ZCYmZC5yZXBsYWNlKC8uKig/PSNbXlxcc10qJCkvLFwiXCIpKSwhYi5wYXJlbnQoXCJsaVwiKS5oYXNDbGFzcyhcImFjdGl2ZVwiKSl7dmFyIGU9Yy5maW5kKFwiLmFjdGl2ZTpsYXN0IGFcIiksZj1hLkV2ZW50KFwiaGlkZS5icy50YWJcIix7cmVsYXRlZFRhcmdldDpiWzBdfSksZz1hLkV2ZW50KFwic2hvdy5icy50YWJcIix7cmVsYXRlZFRhcmdldDplWzBdfSk7aWYoZS50cmlnZ2VyKGYpLGIudHJpZ2dlcihnKSwhZy5pc0RlZmF1bHRQcmV2ZW50ZWQoKSYmIWYuaXNEZWZhdWx0UHJldmVudGVkKCkpe3ZhciBoPWEoZCk7dGhpcy5hY3RpdmF0ZShiLmNsb3Nlc3QoXCJsaVwiKSxjKSx0aGlzLmFjdGl2YXRlKGgsaC5wYXJlbnQoKSxmdW5jdGlvbigpe2UudHJpZ2dlcih7dHlwZTpcImhpZGRlbi5icy50YWJcIixyZWxhdGVkVGFyZ2V0OmJbMF19KSxiLnRyaWdnZXIoe3R5cGU6XCJzaG93bi5icy50YWJcIixyZWxhdGVkVGFyZ2V0OmVbMF19KX0pfX19LGMucHJvdG90eXBlLmFjdGl2YXRlPWZ1bmN0aW9uKGIsZCxlKXtmdW5jdGlvbiBmKCl7Zy5yZW1vdmVDbGFzcyhcImFjdGl2ZVwiKS5maW5kKFwiPiAuZHJvcGRvd24tbWVudSA+IC5hY3RpdmVcIikucmVtb3ZlQ2xhc3MoXCJhY3RpdmVcIikuZW5kKCkuZmluZCgnW2RhdGEtdG9nZ2xlPVwidGFiXCJdJykuYXR0cihcImFyaWEtZXhwYW5kZWRcIiwhMSksYi5hZGRDbGFzcyhcImFjdGl2ZVwiKS5maW5kKCdbZGF0YS10b2dnbGU9XCJ0YWJcIl0nKS5hdHRyKFwiYXJpYS1leHBhbmRlZFwiLCEwKSxoPyhiWzBdLm9mZnNldFdpZHRoLGIuYWRkQ2xhc3MoXCJpblwiKSk6Yi5yZW1vdmVDbGFzcyhcImZhZGVcIiksYi5wYXJlbnQoXCIuZHJvcGRvd24tbWVudVwiKS5sZW5ndGgmJmIuY2xvc2VzdChcImxpLmRyb3Bkb3duXCIpLmFkZENsYXNzKFwiYWN0aXZlXCIpLmVuZCgpLmZpbmQoJ1tkYXRhLXRvZ2dsZT1cInRhYlwiXScpLmF0dHIoXCJhcmlhLWV4cGFuZGVkXCIsITApLGUmJmUoKX12YXIgZz1kLmZpbmQoXCI+IC5hY3RpdmVcIiksaD1lJiZhLnN1cHBvcnQudHJhbnNpdGlvbiYmKGcubGVuZ3RoJiZnLmhhc0NsYXNzKFwiZmFkZVwiKXx8ISFkLmZpbmQoXCI+IC5mYWRlXCIpLmxlbmd0aCk7Zy5sZW5ndGgmJmg/Zy5vbmUoXCJic1RyYW5zaXRpb25FbmRcIixmKS5lbXVsYXRlVHJhbnNpdGlvbkVuZChjLlRSQU5TSVRJT05fRFVSQVRJT04pOmYoKSxnLnJlbW92ZUNsYXNzKFwiaW5cIil9O3ZhciBkPWEuZm4udGFiO2EuZm4udGFiPWIsYS5mbi50YWIuQ29uc3RydWN0b3I9YyxhLmZuLnRhYi5ub0NvbmZsaWN0PWZ1bmN0aW9uKCl7cmV0dXJuIGEuZm4udGFiPWQsdGhpc307dmFyIGU9ZnVuY3Rpb24oYyl7Yy5wcmV2ZW50RGVmYXVsdCgpLGIuY2FsbChhKHRoaXMpLFwic2hvd1wiKX07YShkb2N1bWVudCkub24oXCJjbGljay5icy50YWIuZGF0YS1hcGlcIiwnW2RhdGEtdG9nZ2xlPVwidGFiXCJdJyxlKS5vbihcImNsaWNrLmJzLnRhYi5kYXRhLWFwaVwiLCdbZGF0YS10b2dnbGU9XCJwaWxsXCJdJyxlKX0oalF1ZXJ5KSwrZnVuY3Rpb24oYSl7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gYihiKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIGQ9YSh0aGlzKSxlPWQuZGF0YShcImJzLmFmZml4XCIpLGY9XCJvYmplY3RcIj09dHlwZW9mIGImJmI7ZXx8ZC5kYXRhKFwiYnMuYWZmaXhcIixlPW5ldyBjKHRoaXMsZikpLFwic3RyaW5nXCI9PXR5cGVvZiBiJiZlW2JdKCl9KX12YXIgYz1mdW5jdGlvbihiLGQpe3RoaXMub3B0aW9ucz1hLmV4dGVuZCh7fSxjLkRFRkFVTFRTLGQpLHRoaXMuJHRhcmdldD1hKHRoaXMub3B0aW9ucy50YXJnZXQpLm9uKFwic2Nyb2xsLmJzLmFmZml4LmRhdGEtYXBpXCIsYS5wcm94eSh0aGlzLmNoZWNrUG9zaXRpb24sdGhpcykpLm9uKFwiY2xpY2suYnMuYWZmaXguZGF0YS1hcGlcIixhLnByb3h5KHRoaXMuY2hlY2tQb3NpdGlvbldpdGhFdmVudExvb3AsdGhpcykpLHRoaXMuJGVsZW1lbnQ9YShiKSx0aGlzLmFmZml4ZWQ9bnVsbCx0aGlzLnVucGluPW51bGwsdGhpcy5waW5uZWRPZmZzZXQ9bnVsbCx0aGlzLmNoZWNrUG9zaXRpb24oKX07Yy5WRVJTSU9OPVwiMy4zLjVcIixjLlJFU0VUPVwiYWZmaXggYWZmaXgtdG9wIGFmZml4LWJvdHRvbVwiLGMuREVGQVVMVFM9e29mZnNldDowLHRhcmdldDp3aW5kb3d9LGMucHJvdG90eXBlLmdldFN0YXRlPWZ1bmN0aW9uKGEsYixjLGQpe3ZhciBlPXRoaXMuJHRhcmdldC5zY3JvbGxUb3AoKSxmPXRoaXMuJGVsZW1lbnQub2Zmc2V0KCksZz10aGlzLiR0YXJnZXQuaGVpZ2h0KCk7aWYobnVsbCE9YyYmXCJ0b3BcIj09dGhpcy5hZmZpeGVkKXJldHVybiBjPmU/XCJ0b3BcIjohMTtpZihcImJvdHRvbVwiPT10aGlzLmFmZml4ZWQpcmV0dXJuIG51bGwhPWM/ZSt0aGlzLnVucGluPD1mLnRvcD8hMTpcImJvdHRvbVwiOmEtZD49ZStnPyExOlwiYm90dG9tXCI7dmFyIGg9bnVsbD09dGhpcy5hZmZpeGVkLGk9aD9lOmYudG9wLGo9aD9nOmI7cmV0dXJuIG51bGwhPWMmJmM+PWU/XCJ0b3BcIjpudWxsIT1kJiZpK2o+PWEtZD9cImJvdHRvbVwiOiExfSxjLnByb3RvdHlwZS5nZXRQaW5uZWRPZmZzZXQ9ZnVuY3Rpb24oKXtpZih0aGlzLnBpbm5lZE9mZnNldClyZXR1cm4gdGhpcy5waW5uZWRPZmZzZXQ7dGhpcy4kZWxlbWVudC5yZW1vdmVDbGFzcyhjLlJFU0VUKS5hZGRDbGFzcyhcImFmZml4XCIpO3ZhciBhPXRoaXMuJHRhcmdldC5zY3JvbGxUb3AoKSxiPXRoaXMuJGVsZW1lbnQub2Zmc2V0KCk7cmV0dXJuIHRoaXMucGlubmVkT2Zmc2V0PWIudG9wLWF9LGMucHJvdG90eXBlLmNoZWNrUG9zaXRpb25XaXRoRXZlbnRMb29wPWZ1bmN0aW9uKCl7c2V0VGltZW91dChhLnByb3h5KHRoaXMuY2hlY2tQb3NpdGlvbix0aGlzKSwxKX0sYy5wcm90b3R5cGUuY2hlY2tQb3NpdGlvbj1mdW5jdGlvbigpe2lmKHRoaXMuJGVsZW1lbnQuaXMoXCI6dmlzaWJsZVwiKSl7dmFyIGI9dGhpcy4kZWxlbWVudC5oZWlnaHQoKSxkPXRoaXMub3B0aW9ucy5vZmZzZXQsZT1kLnRvcCxmPWQuYm90dG9tLGc9TWF0aC5tYXgoYShkb2N1bWVudCkuaGVpZ2h0KCksYShkb2N1bWVudC5ib2R5KS5oZWlnaHQoKSk7XCJvYmplY3RcIiE9dHlwZW9mIGQmJihmPWU9ZCksXCJmdW5jdGlvblwiPT10eXBlb2YgZSYmKGU9ZC50b3AodGhpcy4kZWxlbWVudCkpLFwiZnVuY3Rpb25cIj09dHlwZW9mIGYmJihmPWQuYm90dG9tKHRoaXMuJGVsZW1lbnQpKTt2YXIgaD10aGlzLmdldFN0YXRlKGcsYixlLGYpO2lmKHRoaXMuYWZmaXhlZCE9aCl7bnVsbCE9dGhpcy51bnBpbiYmdGhpcy4kZWxlbWVudC5jc3MoXCJ0b3BcIixcIlwiKTt2YXIgaT1cImFmZml4XCIrKGg/XCItXCIraDpcIlwiKSxqPWEuRXZlbnQoaStcIi5icy5hZmZpeFwiKTtpZih0aGlzLiRlbGVtZW50LnRyaWdnZXIoaiksai5pc0RlZmF1bHRQcmV2ZW50ZWQoKSlyZXR1cm47dGhpcy5hZmZpeGVkPWgsdGhpcy51bnBpbj1cImJvdHRvbVwiPT1oP3RoaXMuZ2V0UGlubmVkT2Zmc2V0KCk6bnVsbCx0aGlzLiRlbGVtZW50LnJlbW92ZUNsYXNzKGMuUkVTRVQpLmFkZENsYXNzKGkpLnRyaWdnZXIoaS5yZXBsYWNlKFwiYWZmaXhcIixcImFmZml4ZWRcIikrXCIuYnMuYWZmaXhcIil9XCJib3R0b21cIj09aCYmdGhpcy4kZWxlbWVudC5vZmZzZXQoe3RvcDpnLWItZn0pfX07dmFyIGQ9YS5mbi5hZmZpeDthLmZuLmFmZml4PWIsYS5mbi5hZmZpeC5Db25zdHJ1Y3Rvcj1jLGEuZm4uYWZmaXgubm9Db25mbGljdD1mdW5jdGlvbigpe3JldHVybiBhLmZuLmFmZml4PWQsdGhpc30sYSh3aW5kb3cpLm9uKFwibG9hZFwiLGZ1bmN0aW9uKCl7YSgnW2RhdGEtc3B5PVwiYWZmaXhcIl0nKS5lYWNoKGZ1bmN0aW9uKCl7dmFyIGM9YSh0aGlzKSxkPWMuZGF0YSgpO2Qub2Zmc2V0PWQub2Zmc2V0fHx7fSxudWxsIT1kLm9mZnNldEJvdHRvbSYmKGQub2Zmc2V0LmJvdHRvbT1kLm9mZnNldEJvdHRvbSksbnVsbCE9ZC5vZmZzZXRUb3AmJihkLm9mZnNldC50b3A9ZC5vZmZzZXRUb3ApLGIuY2FsbChjLGQpfSl9KX0oalF1ZXJ5KTsiLCIvKiFcbiAqIFxuICogICB0eXBlZC5qcyAtIEEgSmF2YVNjcmlwdCBUeXBpbmcgQW5pbWF0aW9uIExpYnJhcnlcbiAqICAgQXV0aG9yOiBNYXR0IEJvbGR0IDxtZUBtYXR0Ym9sZHQuY29tPlxuICogICBWZXJzaW9uOiB2Mi4wLjlcbiAqICAgVXJsOiBodHRwczovL2dpdGh1Yi5jb20vbWF0dGJvbGR0L3R5cGVkLmpzXG4gKiAgIExpY2Vuc2Uocyk6IE1JVFxuICogXG4gKi9cbihmdW5jdGlvbih0LGUpe1wib2JqZWN0XCI9PXR5cGVvZiBleHBvcnRzJiZcIm9iamVjdFwiPT10eXBlb2YgbW9kdWxlP21vZHVsZS5leHBvcnRzPWUoKTpcImZ1bmN0aW9uXCI9PXR5cGVvZiBkZWZpbmUmJmRlZmluZS5hbWQ/ZGVmaW5lKFtdLGUpOlwib2JqZWN0XCI9PXR5cGVvZiBleHBvcnRzP2V4cG9ydHMuVHlwZWQ9ZSgpOnQuVHlwZWQ9ZSgpfSkodGhpcyxmdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbih0KXtmdW5jdGlvbiBlKG4pe2lmKHNbbl0pcmV0dXJuIHNbbl0uZXhwb3J0czt2YXIgaT1zW25dPXtleHBvcnRzOnt9LGlkOm4sbG9hZGVkOiExfTtyZXR1cm4gdFtuXS5jYWxsKGkuZXhwb3J0cyxpLGkuZXhwb3J0cyxlKSxpLmxvYWRlZD0hMCxpLmV4cG9ydHN9dmFyIHM9e307cmV0dXJuIGUubT10LGUuYz1zLGUucD1cIlwiLGUoMCl9KFtmdW5jdGlvbih0LGUscyl7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gbih0LGUpe2lmKCEodCBpbnN0YW5jZW9mIGUpKXRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIil9T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSk7dmFyIGk9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSl7Zm9yKHZhciBzPTA7czxlLmxlbmd0aDtzKyspe3ZhciBuPWVbc107bi5lbnVtZXJhYmxlPW4uZW51bWVyYWJsZXx8ITEsbi5jb25maWd1cmFibGU9ITAsXCJ2YWx1ZVwiaW4gbiYmKG4ud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LG4ua2V5LG4pfX1yZXR1cm4gZnVuY3Rpb24oZSxzLG4pe3JldHVybiBzJiZ0KGUucHJvdG90eXBlLHMpLG4mJnQoZSxuKSxlfX0oKSxyPXMoMSksbz1zKDMpLGE9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KGUscyl7bih0aGlzLHQpLHIuaW5pdGlhbGl6ZXIubG9hZCh0aGlzLHMsZSksdGhpcy5iZWdpbigpfXJldHVybiBpKHQsW3trZXk6XCJ0b2dnbGVcIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMucGF1c2Uuc3RhdHVzP3RoaXMuc3RhcnQoKTp0aGlzLnN0b3AoKX19LHtrZXk6XCJzdG9wXCIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLnR5cGluZ0NvbXBsZXRlfHx0aGlzLnBhdXNlLnN0YXR1c3x8KHRoaXMudG9nZ2xlQmxpbmtpbmcoITApLHRoaXMucGF1c2Uuc3RhdHVzPSEwLHRoaXMub3B0aW9ucy5vblN0b3AodGhpcy5hcnJheVBvcyx0aGlzKSl9fSx7a2V5Olwic3RhcnRcIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMudHlwaW5nQ29tcGxldGV8fHRoaXMucGF1c2Uuc3RhdHVzJiYodGhpcy5wYXVzZS5zdGF0dXM9ITEsdGhpcy5wYXVzZS50eXBld3JpdGU/dGhpcy50eXBld3JpdGUodGhpcy5wYXVzZS5jdXJTdHJpbmcsdGhpcy5wYXVzZS5jdXJTdHJQb3MpOnRoaXMuYmFja3NwYWNlKHRoaXMucGF1c2UuY3VyU3RyaW5nLHRoaXMucGF1c2UuY3VyU3RyUG9zKSx0aGlzLm9wdGlvbnMub25TdGFydCh0aGlzLmFycmF5UG9zLHRoaXMpKX19LHtrZXk6XCJkZXN0cm95XCIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLnJlc2V0KCExKSx0aGlzLm9wdGlvbnMub25EZXN0cm95KHRoaXMpfX0se2tleTpcInJlc2V0XCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgdD1hcmd1bWVudHMubGVuZ3RoPD0wfHx2b2lkIDA9PT1hcmd1bWVudHNbMF18fGFyZ3VtZW50c1swXTtjbGVhckludGVydmFsKHRoaXMudGltZW91dCksdGhpcy5yZXBsYWNlVGV4dChcIlwiKSx0aGlzLmN1cnNvciYmdGhpcy5jdXJzb3IucGFyZW50Tm9kZSYmKHRoaXMuY3Vyc29yLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGhpcy5jdXJzb3IpLHRoaXMuY3Vyc29yPW51bGwpLHRoaXMuc3RyUG9zPTAsdGhpcy5hcnJheVBvcz0wLHRoaXMuY3VyTG9vcD0wLHQmJih0aGlzLmluc2VydEN1cnNvcigpLHRoaXMub3B0aW9ucy5vblJlc2V0KHRoaXMpLHRoaXMuYmVnaW4oKSl9fSx7a2V5OlwiYmVnaW5cIix2YWx1ZTpmdW5jdGlvbigpe3ZhciB0PXRoaXM7dGhpcy50eXBpbmdDb21wbGV0ZT0hMSx0aGlzLnNodWZmbGVTdHJpbmdzSWZOZWVkZWQodGhpcyksdGhpcy5pbnNlcnRDdXJzb3IoKSx0aGlzLmJpbmRJbnB1dEZvY3VzRXZlbnRzJiZ0aGlzLmJpbmRGb2N1c0V2ZW50cygpLHRoaXMudGltZW91dD1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dC5jdXJyZW50RWxDb250ZW50JiYwIT09dC5jdXJyZW50RWxDb250ZW50Lmxlbmd0aD90LmJhY2tzcGFjZSh0LmN1cnJlbnRFbENvbnRlbnQsdC5jdXJyZW50RWxDb250ZW50Lmxlbmd0aCk6dC50eXBld3JpdGUodC5zdHJpbmdzW3Quc2VxdWVuY2VbdC5hcnJheVBvc11dLHQuc3RyUG9zKX0sdGhpcy5zdGFydERlbGF5KX19LHtrZXk6XCJ0eXBld3JpdGVcIix2YWx1ZTpmdW5jdGlvbih0LGUpe3ZhciBzPXRoaXM7dGhpcy5mYWRlT3V0JiZ0aGlzLmVsLmNsYXNzTGlzdC5jb250YWlucyh0aGlzLmZhZGVPdXRDbGFzcykmJih0aGlzLmVsLmNsYXNzTGlzdC5yZW1vdmUodGhpcy5mYWRlT3V0Q2xhc3MpLHRoaXMuY3Vyc29yJiZ0aGlzLmN1cnNvci5jbGFzc0xpc3QucmVtb3ZlKHRoaXMuZmFkZU91dENsYXNzKSk7dmFyIG49dGhpcy5odW1hbml6ZXIodGhpcy50eXBlU3BlZWQpLGk9MTtyZXR1cm4gdGhpcy5wYXVzZS5zdGF0dXM9PT0hMD92b2lkIHRoaXMuc2V0UGF1c2VTdGF0dXModCxlLCEwKTp2b2lkKHRoaXMudGltZW91dD1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7ZT1vLmh0bWxQYXJzZXIudHlwZUh0bWxDaGFycyh0LGUscyk7dmFyIG49MCxyPXQuc3Vic3RyKGUpO2lmKFwiXlwiPT09ci5jaGFyQXQoMCkmJi9eXFxeXFxkKy8udGVzdChyKSl7dmFyIGE9MTtyPS9cXGQrLy5leGVjKHIpWzBdLGErPXIubGVuZ3RoLG49cGFyc2VJbnQocikscy50ZW1wb3JhcnlQYXVzZT0hMCxzLm9wdGlvbnMub25UeXBpbmdQYXVzZWQocy5hcnJheVBvcyxzKSx0PXQuc3Vic3RyaW5nKDAsZSkrdC5zdWJzdHJpbmcoZSthKSxzLnRvZ2dsZUJsaW5raW5nKCEwKX1pZihcImBcIj09PXIuY2hhckF0KDApKXtmb3IoO1wiYFwiIT09dC5zdWJzdHIoZStpKS5jaGFyQXQoMCkmJihpKyssIShlK2k+dC5sZW5ndGgpKTspO3ZhciB1PXQuc3Vic3RyaW5nKDAsZSksbD10LnN1YnN0cmluZyh1Lmxlbmd0aCsxLGUraSksYz10LnN1YnN0cmluZyhlK2krMSk7dD11K2wrYyxpLS19cy50aW1lb3V0PXNldFRpbWVvdXQoZnVuY3Rpb24oKXtzLnRvZ2dsZUJsaW5raW5nKCExKSxlPj10Lmxlbmd0aD9zLmRvbmVUeXBpbmcodCxlKTpzLmtlZXBUeXBpbmcodCxlLGkpLHMudGVtcG9yYXJ5UGF1c2UmJihzLnRlbXBvcmFyeVBhdXNlPSExLHMub3B0aW9ucy5vblR5cGluZ1Jlc3VtZWQocy5hcnJheVBvcyxzKSl9LG4pfSxuKSl9fSx7a2V5Olwia2VlcFR5cGluZ1wiLHZhbHVlOmZ1bmN0aW9uKHQsZSxzKXswPT09ZSYmKHRoaXMudG9nZ2xlQmxpbmtpbmcoITEpLHRoaXMub3B0aW9ucy5wcmVTdHJpbmdUeXBlZCh0aGlzLmFycmF5UG9zLHRoaXMpKSxlKz1zO3ZhciBuPXQuc3Vic3RyKDAsZSk7dGhpcy5yZXBsYWNlVGV4dChuKSx0aGlzLnR5cGV3cml0ZSh0LGUpfX0se2tleTpcImRvbmVUeXBpbmdcIix2YWx1ZTpmdW5jdGlvbih0LGUpe3ZhciBzPXRoaXM7dGhpcy5vcHRpb25zLm9uU3RyaW5nVHlwZWQodGhpcy5hcnJheVBvcyx0aGlzKSx0aGlzLnRvZ2dsZUJsaW5raW5nKCEwKSx0aGlzLmFycmF5UG9zPT09dGhpcy5zdHJpbmdzLmxlbmd0aC0xJiYodGhpcy5jb21wbGV0ZSgpLHRoaXMubG9vcD09PSExfHx0aGlzLmN1ckxvb3A9PT10aGlzLmxvb3BDb3VudCl8fCh0aGlzLnRpbWVvdXQ9c2V0VGltZW91dChmdW5jdGlvbigpe3MuYmFja3NwYWNlKHQsZSl9LHRoaXMuYmFja0RlbGF5KSl9fSx7a2V5OlwiYmFja3NwYWNlXCIsdmFsdWU6ZnVuY3Rpb24odCxlKXt2YXIgcz10aGlzO2lmKHRoaXMucGF1c2Uuc3RhdHVzPT09ITApcmV0dXJuIHZvaWQgdGhpcy5zZXRQYXVzZVN0YXR1cyh0LGUsITApO2lmKHRoaXMuZmFkZU91dClyZXR1cm4gdGhpcy5pbml0RmFkZU91dCgpO3RoaXMudG9nZ2xlQmxpbmtpbmcoITEpO3ZhciBuPXRoaXMuaHVtYW5pemVyKHRoaXMuYmFja1NwZWVkKTt0aGlzLnRpbWVvdXQ9c2V0VGltZW91dChmdW5jdGlvbigpe2U9by5odG1sUGFyc2VyLmJhY2tTcGFjZUh0bWxDaGFycyh0LGUscyk7dmFyIG49dC5zdWJzdHIoMCxlKTtpZihzLnJlcGxhY2VUZXh0KG4pLHMuc21hcnRCYWNrc3BhY2Upe3ZhciBpPXMuc3RyaW5nc1tzLmFycmF5UG9zKzFdO2kmJm49PT1pLnN1YnN0cigwLGUpP3Muc3RvcE51bT1lOnMuc3RvcE51bT0wfWU+cy5zdG9wTnVtPyhlLS0scy5iYWNrc3BhY2UodCxlKSk6ZTw9cy5zdG9wTnVtJiYocy5hcnJheVBvcysrLHMuYXJyYXlQb3M9PT1zLnN0cmluZ3MubGVuZ3RoPyhzLmFycmF5UG9zPTAscy5vcHRpb25zLm9uTGFzdFN0cmluZ0JhY2tzcGFjZWQoKSxzLnNodWZmbGVTdHJpbmdzSWZOZWVkZWQoKSxzLmJlZ2luKCkpOnMudHlwZXdyaXRlKHMuc3RyaW5nc1tzLnNlcXVlbmNlW3MuYXJyYXlQb3NdXSxlKSl9LG4pfX0se2tleTpcImNvbXBsZXRlXCIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLm9wdGlvbnMub25Db21wbGV0ZSh0aGlzKSx0aGlzLmxvb3A/dGhpcy5jdXJMb29wKys6dGhpcy50eXBpbmdDb21wbGV0ZT0hMH19LHtrZXk6XCJzZXRQYXVzZVN0YXR1c1wiLHZhbHVlOmZ1bmN0aW9uKHQsZSxzKXt0aGlzLnBhdXNlLnR5cGV3cml0ZT1zLHRoaXMucGF1c2UuY3VyU3RyaW5nPXQsdGhpcy5wYXVzZS5jdXJTdHJQb3M9ZX19LHtrZXk6XCJ0b2dnbGVCbGlua2luZ1wiLHZhbHVlOmZ1bmN0aW9uKHQpe3RoaXMuY3Vyc29yJiYodGhpcy5wYXVzZS5zdGF0dXN8fHRoaXMuY3Vyc29yQmxpbmtpbmchPT10JiYodGhpcy5jdXJzb3JCbGlua2luZz10LHQ/dGhpcy5jdXJzb3IuY2xhc3NMaXN0LmFkZChcInR5cGVkLWN1cnNvci0tYmxpbmtcIik6dGhpcy5jdXJzb3IuY2xhc3NMaXN0LnJlbW92ZShcInR5cGVkLWN1cnNvci0tYmxpbmtcIikpKX19LHtrZXk6XCJodW1hbml6ZXJcIix2YWx1ZTpmdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5yb3VuZChNYXRoLnJhbmRvbSgpKnQvMikrdH19LHtrZXk6XCJzaHVmZmxlU3RyaW5nc0lmTmVlZGVkXCIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLnNodWZmbGUmJih0aGlzLnNlcXVlbmNlPXRoaXMuc2VxdWVuY2Uuc29ydChmdW5jdGlvbigpe3JldHVybiBNYXRoLnJhbmRvbSgpLS41fSkpfX0se2tleTpcImluaXRGYWRlT3V0XCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgdD10aGlzO3JldHVybiB0aGlzLmVsLmNsYXNzTmFtZSs9XCIgXCIrdGhpcy5mYWRlT3V0Q2xhc3MsdGhpcy5jdXJzb3ImJih0aGlzLmN1cnNvci5jbGFzc05hbWUrPVwiIFwiK3RoaXMuZmFkZU91dENsYXNzKSxzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dC5hcnJheVBvcysrLHQucmVwbGFjZVRleHQoXCJcIiksdC5zdHJpbmdzLmxlbmd0aD50LmFycmF5UG9zP3QudHlwZXdyaXRlKHQuc3RyaW5nc1t0LnNlcXVlbmNlW3QuYXJyYXlQb3NdXSwwKToodC50eXBld3JpdGUodC5zdHJpbmdzWzBdLDApLHQuYXJyYXlQb3M9MCl9LHRoaXMuZmFkZU91dERlbGF5KX19LHtrZXk6XCJyZXBsYWNlVGV4dFwiLHZhbHVlOmZ1bmN0aW9uKHQpe3RoaXMuYXR0cj90aGlzLmVsLnNldEF0dHJpYnV0ZSh0aGlzLmF0dHIsdCk6dGhpcy5pc0lucHV0P3RoaXMuZWwudmFsdWU9dDpcImh0bWxcIj09PXRoaXMuY29udGVudFR5cGU/dGhpcy5lbC5pbm5lckhUTUw9dDp0aGlzLmVsLnRleHRDb250ZW50PXR9fSx7a2V5OlwiYmluZEZvY3VzRXZlbnRzXCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgdD10aGlzO3RoaXMuaXNJbnB1dCYmKHRoaXMuZWwuYWRkRXZlbnRMaXN0ZW5lcihcImZvY3VzXCIsZnVuY3Rpb24oZSl7dC5zdG9wKCl9KSx0aGlzLmVsLmFkZEV2ZW50TGlzdGVuZXIoXCJibHVyXCIsZnVuY3Rpb24oZSl7dC5lbC52YWx1ZSYmMCE9PXQuZWwudmFsdWUubGVuZ3RofHx0LnN0YXJ0KCl9KSl9fSx7a2V5OlwiaW5zZXJ0Q3Vyc29yXCIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLnNob3dDdXJzb3ImJih0aGlzLmN1cnNvcnx8KHRoaXMuY3Vyc29yPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIpLHRoaXMuY3Vyc29yLmNsYXNzTmFtZT1cInR5cGVkLWN1cnNvclwiLHRoaXMuY3Vyc29yLmlubmVySFRNTD10aGlzLmN1cnNvckNoYXIsdGhpcy5lbC5wYXJlbnROb2RlJiZ0aGlzLmVsLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKHRoaXMuY3Vyc29yLHRoaXMuZWwubmV4dFNpYmxpbmcpKSl9fV0pLHR9KCk7ZVtcImRlZmF1bHRcIl09YSx0LmV4cG9ydHM9ZVtcImRlZmF1bHRcIl19LGZ1bmN0aW9uKHQsZSxzKXtcInVzZSBzdHJpY3RcIjtmdW5jdGlvbiBuKHQpe3JldHVybiB0JiZ0Ll9fZXNNb2R1bGU/dDp7XCJkZWZhdWx0XCI6dH19ZnVuY3Rpb24gaSh0LGUpe2lmKCEodCBpbnN0YW5jZW9mIGUpKXRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIil9T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSk7dmFyIHI9T2JqZWN0LmFzc2lnbnx8ZnVuY3Rpb24odCl7Zm9yKHZhciBlPTE7ZTxhcmd1bWVudHMubGVuZ3RoO2UrKyl7dmFyIHM9YXJndW1lbnRzW2VdO2Zvcih2YXIgbiBpbiBzKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzLG4pJiYodFtuXT1zW25dKX1yZXR1cm4gdH0sbz1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlKXtmb3IodmFyIHM9MDtzPGUubGVuZ3RoO3MrKyl7dmFyIG49ZVtzXTtuLmVudW1lcmFibGU9bi5lbnVtZXJhYmxlfHwhMSxuLmNvbmZpZ3VyYWJsZT0hMCxcInZhbHVlXCJpbiBuJiYobi53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsbi5rZXksbil9fXJldHVybiBmdW5jdGlvbihlLHMsbil7cmV0dXJuIHMmJnQoZS5wcm90b3R5cGUscyksbiYmdChlLG4pLGV9fSgpLGE9cygyKSx1PW4oYSksbD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXtpKHRoaXMsdCl9cmV0dXJuIG8odCxbe2tleTpcImxvYWRcIix2YWx1ZTpmdW5jdGlvbih0LGUscyl7aWYoXCJzdHJpbmdcIj09dHlwZW9mIHM/dC5lbD1kb2N1bWVudC5xdWVyeVNlbGVjdG9yKHMpOnQuZWw9cyx0Lm9wdGlvbnM9cih7fSx1W1wiZGVmYXVsdFwiXSxlKSx0LmlzSW5wdXQ9XCJpbnB1dFwiPT09dC5lbC50YWdOYW1lLnRvTG93ZXJDYXNlKCksdC5hdHRyPXQub3B0aW9ucy5hdHRyLHQuYmluZElucHV0Rm9jdXNFdmVudHM9dC5vcHRpb25zLmJpbmRJbnB1dEZvY3VzRXZlbnRzLHQuc2hvd0N1cnNvcj0hdC5pc0lucHV0JiZ0Lm9wdGlvbnMuc2hvd0N1cnNvcix0LmN1cnNvckNoYXI9dC5vcHRpb25zLmN1cnNvckNoYXIsdC5jdXJzb3JCbGlua2luZz0hMCx0LmVsQ29udGVudD10LmF0dHI/dC5lbC5nZXRBdHRyaWJ1dGUodC5hdHRyKTp0LmVsLnRleHRDb250ZW50LHQuY29udGVudFR5cGU9dC5vcHRpb25zLmNvbnRlbnRUeXBlLHQudHlwZVNwZWVkPXQub3B0aW9ucy50eXBlU3BlZWQsdC5zdGFydERlbGF5PXQub3B0aW9ucy5zdGFydERlbGF5LHQuYmFja1NwZWVkPXQub3B0aW9ucy5iYWNrU3BlZWQsdC5zbWFydEJhY2tzcGFjZT10Lm9wdGlvbnMuc21hcnRCYWNrc3BhY2UsdC5iYWNrRGVsYXk9dC5vcHRpb25zLmJhY2tEZWxheSx0LmZhZGVPdXQ9dC5vcHRpb25zLmZhZGVPdXQsdC5mYWRlT3V0Q2xhc3M9dC5vcHRpb25zLmZhZGVPdXRDbGFzcyx0LmZhZGVPdXREZWxheT10Lm9wdGlvbnMuZmFkZU91dERlbGF5LHQuaXNQYXVzZWQ9ITEsdC5zdHJpbmdzPXQub3B0aW9ucy5zdHJpbmdzLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdC50cmltKCl9KSxcInN0cmluZ1wiPT10eXBlb2YgdC5vcHRpb25zLnN0cmluZ3NFbGVtZW50P3Quc3RyaW5nc0VsZW1lbnQ9ZG9jdW1lbnQucXVlcnlTZWxlY3Rvcih0Lm9wdGlvbnMuc3RyaW5nc0VsZW1lbnQpOnQuc3RyaW5nc0VsZW1lbnQ9dC5vcHRpb25zLnN0cmluZ3NFbGVtZW50LHQuc3RyaW5nc0VsZW1lbnQpe3Quc3RyaW5ncz1bXSx0LnN0cmluZ3NFbGVtZW50LnN0eWxlLmRpc3BsYXk9XCJub25lXCI7dmFyIG49QXJyYXkucHJvdG90eXBlLnNsaWNlLmFwcGx5KHQuc3RyaW5nc0VsZW1lbnQuY2hpbGRyZW4pLGk9bi5sZW5ndGg7aWYoaSlmb3IodmFyIG89MDtvPGk7bys9MSl7dmFyIGE9bltvXTt0LnN0cmluZ3MucHVzaChhLmlubmVySFRNTC50cmltKCkpfX10LnN0clBvcz0wLHQuYXJyYXlQb3M9MCx0LnN0b3BOdW09MCx0Lmxvb3A9dC5vcHRpb25zLmxvb3AsdC5sb29wQ291bnQ9dC5vcHRpb25zLmxvb3BDb3VudCx0LmN1ckxvb3A9MCx0LnNodWZmbGU9dC5vcHRpb25zLnNodWZmbGUsdC5zZXF1ZW5jZT1bXSx0LnBhdXNlPXtzdGF0dXM6ITEsdHlwZXdyaXRlOiEwLGN1clN0cmluZzpcIlwiLGN1clN0clBvczowfSx0LnR5cGluZ0NvbXBsZXRlPSExO2Zvcih2YXIgbyBpbiB0LnN0cmluZ3MpdC5zZXF1ZW5jZVtvXT1vO3QuY3VycmVudEVsQ29udGVudD10aGlzLmdldEN1cnJlbnRFbENvbnRlbnQodCksdC5hdXRvSW5zZXJ0Q3NzPXQub3B0aW9ucy5hdXRvSW5zZXJ0Q3NzLHRoaXMuYXBwZW5kQW5pbWF0aW9uQ3NzKHQpfX0se2tleTpcImdldEN1cnJlbnRFbENvbnRlbnRcIix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgZT1cIlwiO3JldHVybiBlPXQuYXR0cj90LmVsLmdldEF0dHJpYnV0ZSh0LmF0dHIpOnQuaXNJbnB1dD90LmVsLnZhbHVlOlwiaHRtbFwiPT09dC5jb250ZW50VHlwZT90LmVsLmlubmVySFRNTDp0LmVsLnRleHRDb250ZW50fX0se2tleTpcImFwcGVuZEFuaW1hdGlvbkNzc1wiLHZhbHVlOmZ1bmN0aW9uKHQpe3ZhciBlPVwiZGF0YS10eXBlZC1qcy1jc3NcIjtpZih0LmF1dG9JbnNlcnRDc3MmJih0LnNob3dDdXJzb3J8fHQuZmFkZU91dCkmJiFkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiW1wiK2UrXCJdXCIpKXt2YXIgcz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwic3R5bGVcIik7cy50eXBlPVwidGV4dC9jc3NcIixzLnNldEF0dHJpYnV0ZShlLCEwKTt2YXIgbj1cIlwiO3Quc2hvd0N1cnNvciYmKG4rPVwiXFxuICAgICAgICAudHlwZWQtY3Vyc29ye1xcbiAgICAgICAgICBvcGFjaXR5OiAxO1xcbiAgICAgICAgfVxcbiAgICAgICAgLnR5cGVkLWN1cnNvci50eXBlZC1jdXJzb3ItLWJsaW5re1xcbiAgICAgICAgICBhbmltYXRpb246IHR5cGVkanNCbGluayAwLjdzIGluZmluaXRlO1xcbiAgICAgICAgICAtd2Via2l0LWFuaW1hdGlvbjogdHlwZWRqc0JsaW5rIDAuN3MgaW5maW5pdGU7XFxuICAgICAgICAgICAgICAgICAgYW5pbWF0aW9uOiB0eXBlZGpzQmxpbmsgMC43cyBpbmZpbml0ZTtcXG4gICAgICAgIH1cXG4gICAgICAgIEBrZXlmcmFtZXMgdHlwZWRqc0JsaW5re1xcbiAgICAgICAgICA1MCUgeyBvcGFjaXR5OiAwLjA7IH1cXG4gICAgICAgIH1cXG4gICAgICAgIEAtd2Via2l0LWtleWZyYW1lcyB0eXBlZGpzQmxpbmt7XFxuICAgICAgICAgIDAlIHsgb3BhY2l0eTogMTsgfVxcbiAgICAgICAgICA1MCUgeyBvcGFjaXR5OiAwLjA7IH1cXG4gICAgICAgICAgMTAwJSB7IG9wYWNpdHk6IDE7IH1cXG4gICAgICAgIH1cXG4gICAgICBcIiksdC5mYWRlT3V0JiYobis9XCJcXG4gICAgICAgIC50eXBlZC1mYWRlLW91dHtcXG4gICAgICAgICAgb3BhY2l0eTogMDtcXG4gICAgICAgICAgdHJhbnNpdGlvbjogb3BhY2l0eSAuMjVzO1xcbiAgICAgICAgfVxcbiAgICAgICAgLnR5cGVkLWN1cnNvci50eXBlZC1jdXJzb3ItLWJsaW5rLnR5cGVkLWZhZGUtb3V0e1xcbiAgICAgICAgICAtd2Via2l0LWFuaW1hdGlvbjogMDtcXG4gICAgICAgICAgYW5pbWF0aW9uOiAwO1xcbiAgICAgICAgfVxcbiAgICAgIFwiKSwwIT09cy5sZW5ndGgmJihzLmlubmVySFRNTD1uLGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQocykpfX19XSksdH0oKTtlW1wiZGVmYXVsdFwiXT1sO3ZhciBjPW5ldyBsO2UuaW5pdGlhbGl6ZXI9Y30sZnVuY3Rpb24odCxlKXtcInVzZSBzdHJpY3RcIjtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KTt2YXIgcz17c3RyaW5nczpbXCJUaGVzZSBhcmUgdGhlIGRlZmF1bHQgdmFsdWVzLi4uXCIsXCJZb3Uga25vdyB3aGF0IHlvdSBzaG91bGQgZG8/XCIsXCJVc2UgeW91ciBvd24hXCIsXCJIYXZlIGEgZ3JlYXQgZGF5IVwiXSxzdHJpbmdzRWxlbWVudDpudWxsLHR5cGVTcGVlZDowLHN0YXJ0RGVsYXk6MCxiYWNrU3BlZWQ6MCxzbWFydEJhY2tzcGFjZTohMCxzaHVmZmxlOiExLGJhY2tEZWxheTo3MDAsZmFkZU91dDohMSxmYWRlT3V0Q2xhc3M6XCJ0eXBlZC1mYWRlLW91dFwiLGZhZGVPdXREZWxheTo1MDAsbG9vcDohMSxsb29wQ291bnQ6MS8wLHNob3dDdXJzb3I6ITAsY3Vyc29yQ2hhcjpcInxcIixhdXRvSW5zZXJ0Q3NzOiEwLGF0dHI6bnVsbCxiaW5kSW5wdXRGb2N1c0V2ZW50czohMSxjb250ZW50VHlwZTpcImh0bWxcIixvbkNvbXBsZXRlOmZ1bmN0aW9uKHQpe30scHJlU3RyaW5nVHlwZWQ6ZnVuY3Rpb24odCxlKXt9LG9uU3RyaW5nVHlwZWQ6ZnVuY3Rpb24odCxlKXt9LG9uTGFzdFN0cmluZ0JhY2tzcGFjZWQ6ZnVuY3Rpb24odCl7fSxvblR5cGluZ1BhdXNlZDpmdW5jdGlvbih0LGUpe30sb25UeXBpbmdSZXN1bWVkOmZ1bmN0aW9uKHQsZSl7fSxvblJlc2V0OmZ1bmN0aW9uKHQpe30sb25TdG9wOmZ1bmN0aW9uKHQsZSl7fSxvblN0YXJ0OmZ1bmN0aW9uKHQsZSl7fSxvbkRlc3Ryb3k6ZnVuY3Rpb24odCl7fX07ZVtcImRlZmF1bHRcIl09cyx0LmV4cG9ydHM9ZVtcImRlZmF1bHRcIl19LGZ1bmN0aW9uKHQsZSl7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gcyh0LGUpe2lmKCEodCBpbnN0YW5jZW9mIGUpKXRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIil9T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSk7dmFyIG49ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSl7Zm9yKHZhciBzPTA7czxlLmxlbmd0aDtzKyspe3ZhciBuPWVbc107bi5lbnVtZXJhYmxlPW4uZW51bWVyYWJsZXx8ITEsbi5jb25maWd1cmFibGU9ITAsXCJ2YWx1ZVwiaW4gbiYmKG4ud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LG4ua2V5LG4pfX1yZXR1cm4gZnVuY3Rpb24oZSxzLG4pe3JldHVybiBzJiZ0KGUucHJvdG90eXBlLHMpLG4mJnQoZSxuKSxlfX0oKSxpPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe3ModGhpcyx0KX1yZXR1cm4gbih0LFt7a2V5OlwidHlwZUh0bWxDaGFyc1wiLHZhbHVlOmZ1bmN0aW9uKHQsZSxzKXtpZihcImh0bWxcIiE9PXMuY29udGVudFR5cGUpcmV0dXJuIGU7dmFyIG49dC5zdWJzdHIoZSkuY2hhckF0KDApO2lmKFwiPFwiPT09bnx8XCImXCI9PT1uKXt2YXIgaT1cIlwiO2ZvcihpPVwiPFwiPT09bj9cIj5cIjpcIjtcIjt0LnN1YnN0cihlKzEpLmNoYXJBdCgwKSE9PWkmJihlKyssIShlKzE+dC5sZW5ndGgpKTspO2UrK31yZXR1cm4gZX19LHtrZXk6XCJiYWNrU3BhY2VIdG1sQ2hhcnNcIix2YWx1ZTpmdW5jdGlvbih0LGUscyl7aWYoXCJodG1sXCIhPT1zLmNvbnRlbnRUeXBlKXJldHVybiBlO3ZhciBuPXQuc3Vic3RyKGUpLmNoYXJBdCgwKTtpZihcIj5cIj09PW58fFwiO1wiPT09bil7dmFyIGk9XCJcIjtmb3IoaT1cIj5cIj09PW4/XCI8XCI6XCImXCI7dC5zdWJzdHIoZS0xKS5jaGFyQXQoMCkhPT1pJiYoZS0tLCEoZTwwKSk7KTtlLS19cmV0dXJuIGV9fV0pLHR9KCk7ZVtcImRlZmF1bHRcIl09aTt2YXIgcj1uZXcgaTtlLmh0bWxQYXJzZXI9cn1dKX0pO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dHlwZWQubWluLmpzLm1hcFxuIiwiLy8gR29vZ2xlIFRhZyBNYW5hZ2VyXG4oZnVuY3Rpb24odyxkLHMsbCxpKXt3W2xdPXdbbF18fFtdO3dbbF0ucHVzaCh7J2d0bS5zdGFydCc6XG5uZXcgRGF0ZSgpLmdldFRpbWUoKSxldmVudDonZ3RtLmpzJ30pO3ZhciBmPWQuZ2V0RWxlbWVudHNCeVRhZ05hbWUocylbMF0sXG5qPWQuY3JlYXRlRWxlbWVudChzKSxkbD1sIT0nZGF0YUxheWVyJz8nJmw9JytsOicnO2ouYXN5bmM9dHJ1ZTtqLnNyYz1cbidodHRwczovL3d3dy5nb29nbGV0YWdtYW5hZ2VyLmNvbS9ndG0uanM/aWQ9JytpK2RsO2YucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoaixmKTtcbn0pKHdpbmRvdyxkb2N1bWVudCwnc2NyaXB0JywnZGF0YUxheWVyJywnR1RNLVRLTUdDQkMnKTtcblxuXG4kKGZ1bmN0aW9uKCkge1xuICB2YXIgaHNxQ291bnQgPSAwO1xuXG4gIGZ1bmN0aW9uIGxpbmtlcigpIHtcbiAgICAvLyBBcHBlbmQgSHVic3BvdCBJRHMgdG8gZGFzaGJvYXJkIGxpbmtzXG4gICAgdmFyIGhzdXRrID0gd2luZG93LmdldENvb2tpZSgnaHVic3BvdHV0aycpO1xuICAgIGlmKGhzcUNvdW50ID4gMTApIHtcbiAgICAgIC8vIEh1YnNwb3QgaXMgZGlzYWJsZWQgb3IgZG93blxuICAgICAgY29uc29sZS5sb2coJ2ZhaWxpbmcnLCBoc3V0aylcbiAgICAgIHJldHVybjtcbiAgICB9IGVsc2UgaWYgKCF3aW5kb3cuX2hzcSAmJiAhaHN1dGspIHtcbiAgICAgIGhzcUNvdW50Kys7XG4gICAgICAvLyBjb25zb2xlLmxvZygnbm8gaHVic3BvdCBJRCB5ZXQnKVxuICAgICAgc2V0VGltZW91dChsaW5rZXIsIDMwMCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIGVscyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2FbaHJlZio9XCJkYXNoYm9hcmQuaW9uaWNmcmFtZXdvcmsuY29tXCJdJykpO1xuICAgIGlmKCFlbHMpIHtcbiAgICAgIC8vY29uc29sZS5sb2coJ25vIGRhc2ggbGlua3MnKVxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIGNvbnNvbGUubG9nKGVscylcbiAgICBlbHMuZm9yRWFjaChmdW5jdGlvbihlbCkge1xuICAgICAgdmFyIGhyZWYgPSBlbC5nZXRBdHRyaWJ1dGUoJ2hyZWYnKTtcblxuICAgICAgLy8gaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvNDQ0MTIyNDEvaXMtaXQtcG9zc2libGUtdG8tcmVhZC1leHBlcmltZW50aWQtYW5kLXZhcmlhdGlvbmlkLWluLWphdmFzY3JpcHQtd2l0aC1nb29nbGUtb3BcbiAgICAgIC8vIHZhciBwcm9wZXJ0eUlkID0gXCJVQS00NDAyMzgzMC0xXCI7XG4gICAgICAvLyB2YXIgZXhwZXJpbWVudElkID0gT2JqZWN0LmtleXMoZ2FEYXRhW3Byb3BlcnR5SWRdLmV4cGVyaW1lbnRzKVswXTtcbiAgICAgIC8vIHZhciB2YXJpYXRpb25JZCA9IGdhRGF0YVtwcm9wZXJ0eUlkXS5leHBlcmltZW50c1tleHBlcmltZW50SWRdO1xuICAgICAgLy8gY29uc29sZS5sb2coZXhwZXJpbWVudElkLCB2YXJpYXRpb25JZClcblxuICAgICAgaWYgKGhyZWYuaW5kZXhPZignPycpICE9PSAtMSkge1xuXG4gICAgICAgIC8vIElmIGEgc291cmNlIGF0dHJpYnV0ZSBoYXMgYmVlbiBhZGRlZCB0byBVUkkgYW5kIGFuIEEvQiB0ZXN0IGlzIHJ1bm5pbmcsIGFwcGVuZCB0ZXN0IGdyb3VwIElEIHRvIHZhbHVlIG9mIHNvdXJjZSBhdHRyaWJ1dGVcbiAgICAgICAgLy8gdmFyIHNvdXJjZVZhbCA9IGdldFF1ZXJ5c3RyaW5nUGFyYW1ldGVyKCdzb3VyY2UnLCAnPycgKyBocmVmLnNwbGl0KCc/JylbMV0pO1xuICAgICAgICAvLyBpZiAoc291cmNlVmFsLmxlbmd0aCAmJiBleHBlcmltZW50SWQubGVuZ3RoKSB7XG4gICAgICAgIC8vICAgaHJlZiA9IHVwZGF0ZVF1ZXJ5c3RyaW5nUGFyYW1ldGVyKGhyZWYsICdzb3VyY2UnLCBzb3VyY2VWYWwgKyAnLScgKyBleHBlcmltZW50SWQgKyAnLScgKyB2YXJpYXRpb25JZCk7XG4gICAgICAgIC8vIH1cbiAgICAgICAgLy8gY29uc29sZS5sb2coaHJlZilcblxuICAgICAgICBocmVmICs9ICcmJ1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaHJlZiArPSAnPydcbiAgICAgIH1cblxuICAgICAgLy8gQWRkIEh1YnNwb3QgVVRLIElEIGFzIEhTSUQgaWYgcHJlc2VudFxuICAgICAgaWYgKGhzdXRrKSB7XG4gICAgICAgIGhyZWYgKz0gJ2hzaWQ9JyArIGVuY29kZVVSSUNvbXBvbmVudChoc3V0ayk7XG4gICAgICB9XG4gICAgICBlbC5zZXRBdHRyaWJ1dGUoJ2hyZWYnLCBocmVmICk7XG4gICAgfSlcbiAgfVxuICBsaW5rZXIoKTtcbn0pO1xuXG5mdW5jdGlvbiBnZXRRdWVyeXN0cmluZ1BhcmFtZXRlcihuYW1lLCBxdWVyeXN0cmluZykge1xuICBuYW1lID0gbmFtZS5yZXBsYWNlKC9bXFxbXS8sICdcXFxcWycpLnJlcGxhY2UoL1tcXF1dLywgJ1xcXFxdJyk7XG4gIHZhciByZWdleCA9IG5ldyBSZWdFeHAoJ1tcXFxcPyZdJyArIG5hbWUgKyAnPShbXiYjXSopJyk7XG4gIHZhciByZXN1bHRzID0gcmVnZXguZXhlYyhxdWVyeXN0cmluZyk7XG4gIHJldHVybiByZXN1bHRzID09PSBudWxsID8gJycgOiBkZWNvZGVVUklDb21wb25lbnQocmVzdWx0c1sxXS5yZXBsYWNlKC9cXCsvZywgJyAnKSk7XG59O1xuXG5mdW5jdGlvbiB1cGRhdGVRdWVyeXN0cmluZ1BhcmFtZXRlcih1cmksIGtleSwgdmFsdWUpIHtcbiAgdmFyIHJlID0gbmV3IFJlZ0V4cChcIihbPyZdKVwiICsga2V5ICsgXCI9Lio/KCZ8JClcIiwgXCJpXCIpO1xuICB2YXIgc2VwYXJhdG9yID0gdXJpLmluZGV4T2YoJz8nKSAhPT0gLTEgPyBcIiZcIiA6IFwiP1wiO1xuICBpZiAodXJpLm1hdGNoKHJlKSkge1xuICAgIHJldHVybiB1cmkucmVwbGFjZShyZSwgJyQxJyArIGtleSArIFwiPVwiICsgdmFsdWUgKyAnJDInKTtcbiAgfVxuICBlbHNlIHtcbiAgICByZXR1cm4gdXJpICsgc2VwYXJhdG9yICsga2V5ICsgXCI9XCIgKyB2YWx1ZTtcbiAgfVxufVxuXG4vLyBzaG9ydGhhbmQgZ2xvYmFsIGFuYWx5dGljcyBjbGljayBldmVudCBoZWxwZXJcbndpbmRvdy5jID0gZnVuY3Rpb24oY2F0LCBsYmwsIGVsLCB2YWwpIHtcbiAgaWYgKHR5cGVvZiB2YWwgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgdmFyIHZhbCA9IG51bGw7XG4gIH1cbiAgaWYgKHdpbmRvdy5nYSAmJiBnYS5sb2FkZWQpIHtcbiAgICBnYSgnc2VuZCcsIHtcbiAgICAgIGhpdFR5cGU6ICdldmVudCcsXG4gICAgICBldmVudENhdGVnb3J5OiBjYXQsXG4gICAgICBldmVudEFjdGlvbjogJ0NsaWNrJyxcbiAgICAgIGV2ZW50TGFiZWw6IGxibCxcbiAgICAgIGV2ZW50VmFsdWU6IHZhbCxcbiAgICAgIGhpdENhbGxiYWNrOiBmdW5jdGlvbigpIHtcbiAgICAgICAgaWYgKCEhZWwpIHtcbiAgICAgICAgICBkb2N1bWVudC5sb2NhdGlvbiA9IGVsLmhyZWY7XG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgaWYgKCEhZWwpIHtcbiAgICAgIGRvY3VtZW50LmxvY2F0aW9uID0gZWwuaHJlZjtcbiAgICB9XG4gIH1cbiAgLy8gZG9uJ3QgZm9sbG93IGxpbmtzIHVudGlsIGFuYWx5dGljcyBpcyByZWNpZXZlZFxuICBpZiAoISFlbCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufTtcbiIsIihmdW5jdGlvbihmYWN0b3J5KSB7XG5cbiAgLy8gU2V0dXAgaGlnaGxpZ2h0LmpzIGZvciBkaWZmZXJlbnQgZW52aXJvbm1lbnRzLiBGaXJzdCBpcyBOb2RlLmpzIG9yXG4gIC8vIENvbW1vbkpTLlxuICBpZih0eXBlb2YgZXhwb3J0cyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICBmYWN0b3J5KGV4cG9ydHMpO1xuICB9IGVsc2Uge1xuICAgIC8vIEV4cG9ydCBobGpzIGdsb2JhbGx5IGV2ZW4gd2hlbiB1c2luZyBBTUQgZm9yIGNhc2VzIHdoZW4gdGhpcyBzY3JpcHRcbiAgICAvLyBpcyBsb2FkZWQgd2l0aCBvdGhlcnMgdGhhdCBtYXkgc3RpbGwgZXhwZWN0IGEgZ2xvYmFsIGhsanMuXG4gICAgd2luZG93LmhsanMgPSBmYWN0b3J5KHt9KTtcblxuICAgIC8vIEZpbmFsbHkgcmVnaXN0ZXIgdGhlIGdsb2JhbCBobGpzIHdpdGggQU1ELlxuICAgIGlmKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCkge1xuICAgICAgZGVmaW5lKCdobGpzJywgW10sIGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gd2luZG93LmhsanM7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxufShmdW5jdGlvbihobGpzKSB7XG5cbiAgLyogVXRpbGl0eSBmdW5jdGlvbnMgKi9cblxuICBmdW5jdGlvbiBlc2NhcGUodmFsdWUpIHtcbiAgICByZXR1cm4gdmFsdWUucmVwbGFjZSgvJi9nbSwgJyZhbXA7JykucmVwbGFjZSgvPC9nbSwgJyZsdDsnKS5yZXBsYWNlKC8+L2dtLCAnJmd0OycpO1xuICB9XG5cbiAgZnVuY3Rpb24gdGFnKG5vZGUpIHtcbiAgICByZXR1cm4gbm9kZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO1xuICB9XG5cbiAgZnVuY3Rpb24gdGVzdFJlKHJlLCBsZXhlbWUpIHtcbiAgICB2YXIgbWF0Y2ggPSByZSAmJiByZS5leGVjKGxleGVtZSk7XG4gICAgcmV0dXJuIG1hdGNoICYmIG1hdGNoLmluZGV4ID09IDA7XG4gIH1cblxuICBmdW5jdGlvbiBpc05vdEhpZ2hsaWdodGVkKGxhbmd1YWdlKSB7XG4gICAgcmV0dXJuICgvXihuby0/aGlnaGxpZ2h0fHBsYWlufHRleHQpJC9pKS50ZXN0KGxhbmd1YWdlKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGJsb2NrTGFuZ3VhZ2UoYmxvY2spIHtcbiAgICB2YXIgaSwgbWF0Y2gsIGxlbmd0aCxcbiAgICAgICAgY2xhc3NlcyA9IGJsb2NrLmNsYXNzTmFtZSArICcgJztcblxuICAgIGNsYXNzZXMgKz0gYmxvY2sucGFyZW50Tm9kZSA/IGJsb2NrLnBhcmVudE5vZGUuY2xhc3NOYW1lIDogJyc7XG5cbiAgICAvLyBsYW5ndWFnZS0qIHRha2VzIHByZWNlZGVuY2Ugb3ZlciBub24tcHJlZml4ZWQgY2xhc3MgbmFtZXNcbiAgICBtYXRjaCA9ICgvXFxibGFuZyg/OnVhZ2UpPy0oW1xcdy1dKylcXGIvaSkuZXhlYyhjbGFzc2VzKTtcbiAgICBpZiAobWF0Y2gpIHtcbiAgICAgIHJldHVybiBnZXRMYW5ndWFnZShtYXRjaFsxXSkgPyBtYXRjaFsxXSA6ICduby1oaWdobGlnaHQnO1xuICAgIH1cblxuICAgIGNsYXNzZXMgPSBjbGFzc2VzLnNwbGl0KC9cXHMrLyk7XG4gICAgZm9yIChpID0gMCwgbGVuZ3RoID0gY2xhc3Nlcy5sZW5ndGg7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgaWYgKGdldExhbmd1YWdlKGNsYXNzZXNbaV0pIHx8IGlzTm90SGlnaGxpZ2h0ZWQoY2xhc3Nlc1tpXSkpIHtcbiAgICAgICAgcmV0dXJuIGNsYXNzZXNbaV07XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gaW5oZXJpdChwYXJlbnQsIG9iaikge1xuICAgIHZhciByZXN1bHQgPSB7fSwga2V5O1xuICAgIGZvciAoa2V5IGluIHBhcmVudClcbiAgICAgIHJlc3VsdFtrZXldID0gcGFyZW50W2tleV07XG4gICAgaWYgKG9iailcbiAgICAgIGZvciAoa2V5IGluIG9iailcbiAgICAgICAgcmVzdWx0W2tleV0gPSBvYmpba2V5XTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgLyogU3RyZWFtIG1lcmdpbmcgKi9cblxuICBmdW5jdGlvbiBub2RlU3RyZWFtKG5vZGUpIHtcbiAgICB2YXIgcmVzdWx0ID0gW107XG4gICAgKGZ1bmN0aW9uIF9ub2RlU3RyZWFtKG5vZGUsIG9mZnNldCkge1xuICAgICAgZm9yICh2YXIgY2hpbGQgPSBub2RlLmZpcnN0Q2hpbGQ7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLm5leHRTaWJsaW5nKSB7XG4gICAgICAgIGlmIChjaGlsZC5ub2RlVHlwZSA9PSAzKVxuICAgICAgICAgIG9mZnNldCArPSBjaGlsZC5ub2RlVmFsdWUubGVuZ3RoO1xuICAgICAgICBlbHNlIGlmIChjaGlsZC5ub2RlVHlwZSA9PSAxKSB7XG4gICAgICAgICAgcmVzdWx0LnB1c2goe1xuICAgICAgICAgICAgZXZlbnQ6ICdzdGFydCcsXG4gICAgICAgICAgICBvZmZzZXQ6IG9mZnNldCxcbiAgICAgICAgICAgIG5vZGU6IGNoaWxkXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgb2Zmc2V0ID0gX25vZGVTdHJlYW0oY2hpbGQsIG9mZnNldCk7XG4gICAgICAgICAgLy8gUHJldmVudCB2b2lkIGVsZW1lbnRzIGZyb20gaGF2aW5nIGFuIGVuZCB0YWcgdGhhdCB3b3VsZCBhY3R1YWxseVxuICAgICAgICAgIC8vIGRvdWJsZSB0aGVtIGluIHRoZSBvdXRwdXQuIFRoZXJlIGFyZSBtb3JlIHZvaWQgZWxlbWVudHMgaW4gSFRNTFxuICAgICAgICAgIC8vIGJ1dCB3ZSBsaXN0IG9ubHkgdGhvc2UgcmVhbGlzdGljYWxseSBleHBlY3RlZCBpbiBjb2RlIGRpc3BsYXkuXG4gICAgICAgICAgaWYgKCF0YWcoY2hpbGQpLm1hdGNoKC9icnxocnxpbWd8aW5wdXQvKSkge1xuICAgICAgICAgICAgcmVzdWx0LnB1c2goe1xuICAgICAgICAgICAgICBldmVudDogJ3N0b3AnLFxuICAgICAgICAgICAgICBvZmZzZXQ6IG9mZnNldCxcbiAgICAgICAgICAgICAgbm9kZTogY2hpbGRcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIG9mZnNldDtcbiAgICB9KShub2RlLCAwKTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgZnVuY3Rpb24gbWVyZ2VTdHJlYW1zKG9yaWdpbmFsLCBoaWdobGlnaHRlZCwgdmFsdWUpIHtcbiAgICB2YXIgcHJvY2Vzc2VkID0gMDtcbiAgICB2YXIgcmVzdWx0ID0gJyc7XG4gICAgdmFyIG5vZGVTdGFjayA9IFtdO1xuXG4gICAgZnVuY3Rpb24gc2VsZWN0U3RyZWFtKCkge1xuICAgICAgaWYgKCFvcmlnaW5hbC5sZW5ndGggfHwgIWhpZ2hsaWdodGVkLmxlbmd0aCkge1xuICAgICAgICByZXR1cm4gb3JpZ2luYWwubGVuZ3RoID8gb3JpZ2luYWwgOiBoaWdobGlnaHRlZDtcbiAgICAgIH1cbiAgICAgIGlmIChvcmlnaW5hbFswXS5vZmZzZXQgIT0gaGlnaGxpZ2h0ZWRbMF0ub2Zmc2V0KSB7XG4gICAgICAgIHJldHVybiAob3JpZ2luYWxbMF0ub2Zmc2V0IDwgaGlnaGxpZ2h0ZWRbMF0ub2Zmc2V0KSA/IG9yaWdpbmFsIDogaGlnaGxpZ2h0ZWQ7XG4gICAgICB9XG5cbiAgICAgIC8qXG4gICAgICBUbyBhdm9pZCBzdGFydGluZyB0aGUgc3RyZWFtIGp1c3QgYmVmb3JlIGl0IHNob3VsZCBzdG9wIHRoZSBvcmRlciBpc1xuICAgICAgZW5zdXJlZCB0aGF0IG9yaWdpbmFsIGFsd2F5cyBzdGFydHMgZmlyc3QgYW5kIGNsb3NlcyBsYXN0OlxuXG4gICAgICBpZiAoZXZlbnQxID09ICdzdGFydCcgJiYgZXZlbnQyID09ICdzdGFydCcpXG4gICAgICAgIHJldHVybiBvcmlnaW5hbDtcbiAgICAgIGlmIChldmVudDEgPT0gJ3N0YXJ0JyAmJiBldmVudDIgPT0gJ3N0b3AnKVxuICAgICAgICByZXR1cm4gaGlnaGxpZ2h0ZWQ7XG4gICAgICBpZiAoZXZlbnQxID09ICdzdG9wJyAmJiBldmVudDIgPT0gJ3N0YXJ0JylcbiAgICAgICAgcmV0dXJuIG9yaWdpbmFsO1xuICAgICAgaWYgKGV2ZW50MSA9PSAnc3RvcCcgJiYgZXZlbnQyID09ICdzdG9wJylcbiAgICAgICAgcmV0dXJuIGhpZ2hsaWdodGVkO1xuXG4gICAgICAuLi4gd2hpY2ggaXMgY29sbGFwc2VkIHRvOlxuICAgICAgKi9cbiAgICAgIHJldHVybiBoaWdobGlnaHRlZFswXS5ldmVudCA9PSAnc3RhcnQnID8gb3JpZ2luYWwgOiBoaWdobGlnaHRlZDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBvcGVuKG5vZGUpIHtcbiAgICAgIGZ1bmN0aW9uIGF0dHJfc3RyKGEpIHtyZXR1cm4gJyAnICsgYS5ub2RlTmFtZSArICc9XCInICsgZXNjYXBlKGEudmFsdWUpICsgJ1wiJzt9XG4gICAgICByZXN1bHQgKz0gJzwnICsgdGFnKG5vZGUpICsgQXJyYXkucHJvdG90eXBlLm1hcC5jYWxsKG5vZGUuYXR0cmlidXRlcywgYXR0cl9zdHIpLmpvaW4oJycpICsgJz4nO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNsb3NlKG5vZGUpIHtcbiAgICAgIHJlc3VsdCArPSAnPC8nICsgdGFnKG5vZGUpICsgJz4nO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHJlbmRlcihldmVudCkge1xuICAgICAgKGV2ZW50LmV2ZW50ID09ICdzdGFydCcgPyBvcGVuIDogY2xvc2UpKGV2ZW50Lm5vZGUpO1xuICAgIH1cblxuICAgIHdoaWxlIChvcmlnaW5hbC5sZW5ndGggfHwgaGlnaGxpZ2h0ZWQubGVuZ3RoKSB7XG4gICAgICB2YXIgc3RyZWFtID0gc2VsZWN0U3RyZWFtKCk7XG4gICAgICByZXN1bHQgKz0gZXNjYXBlKHZhbHVlLnN1YnN0cihwcm9jZXNzZWQsIHN0cmVhbVswXS5vZmZzZXQgLSBwcm9jZXNzZWQpKTtcbiAgICAgIHByb2Nlc3NlZCA9IHN0cmVhbVswXS5vZmZzZXQ7XG4gICAgICBpZiAoc3RyZWFtID09IG9yaWdpbmFsKSB7XG4gICAgICAgIC8qXG4gICAgICAgIE9uIGFueSBvcGVuaW5nIG9yIGNsb3NpbmcgdGFnIG9mIHRoZSBvcmlnaW5hbCBtYXJrdXAgd2UgZmlyc3QgY2xvc2VcbiAgICAgICAgdGhlIGVudGlyZSBoaWdobGlnaHRlZCBub2RlIHN0YWNrLCB0aGVuIHJlbmRlciB0aGUgb3JpZ2luYWwgdGFnIGFsb25nXG4gICAgICAgIHdpdGggYWxsIHRoZSBmb2xsb3dpbmcgb3JpZ2luYWwgdGFncyBhdCB0aGUgc2FtZSBvZmZzZXQgYW5kIHRoZW5cbiAgICAgICAgcmVvcGVuIGFsbCB0aGUgdGFncyBvbiB0aGUgaGlnaGxpZ2h0ZWQgc3RhY2suXG4gICAgICAgICovXG4gICAgICAgIG5vZGVTdGFjay5yZXZlcnNlKCkuZm9yRWFjaChjbG9zZSk7XG4gICAgICAgIGRvIHtcbiAgICAgICAgICByZW5kZXIoc3RyZWFtLnNwbGljZSgwLCAxKVswXSk7XG4gICAgICAgICAgc3RyZWFtID0gc2VsZWN0U3RyZWFtKCk7XG4gICAgICAgIH0gd2hpbGUgKHN0cmVhbSA9PSBvcmlnaW5hbCAmJiBzdHJlYW0ubGVuZ3RoICYmIHN0cmVhbVswXS5vZmZzZXQgPT0gcHJvY2Vzc2VkKTtcbiAgICAgICAgbm9kZVN0YWNrLnJldmVyc2UoKS5mb3JFYWNoKG9wZW4pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKHN0cmVhbVswXS5ldmVudCA9PSAnc3RhcnQnKSB7XG4gICAgICAgICAgbm9kZVN0YWNrLnB1c2goc3RyZWFtWzBdLm5vZGUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG5vZGVTdGFjay5wb3AoKTtcbiAgICAgICAgfVxuICAgICAgICByZW5kZXIoc3RyZWFtLnNwbGljZSgwLCAxKVswXSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQgKyBlc2NhcGUodmFsdWUuc3Vic3RyKHByb2Nlc3NlZCkpO1xuICB9XG5cbiAgLyogSW5pdGlhbGl6YXRpb24gKi9cblxuICBmdW5jdGlvbiBjb21waWxlTGFuZ3VhZ2UobGFuZ3VhZ2UpIHtcblxuICAgIGZ1bmN0aW9uIHJlU3RyKHJlKSB7XG4gICAgICAgIHJldHVybiAocmUgJiYgcmUuc291cmNlKSB8fCByZTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBsYW5nUmUodmFsdWUsIGdsb2JhbCkge1xuICAgICAgcmV0dXJuIG5ldyBSZWdFeHAoXG4gICAgICAgIHJlU3RyKHZhbHVlKSxcbiAgICAgICAgJ20nICsgKGxhbmd1YWdlLmNhc2VfaW5zZW5zaXRpdmUgPyAnaScgOiAnJykgKyAoZ2xvYmFsID8gJ2cnIDogJycpXG4gICAgICApO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNvbXBpbGVNb2RlKG1vZGUsIHBhcmVudCkge1xuICAgICAgaWYgKG1vZGUuY29tcGlsZWQpXG4gICAgICAgIHJldHVybjtcbiAgICAgIG1vZGUuY29tcGlsZWQgPSB0cnVlO1xuXG4gICAgICBtb2RlLmtleXdvcmRzID0gbW9kZS5rZXl3b3JkcyB8fCBtb2RlLmJlZ2luS2V5d29yZHM7XG4gICAgICBpZiAobW9kZS5rZXl3b3Jkcykge1xuICAgICAgICB2YXIgY29tcGlsZWRfa2V5d29yZHMgPSB7fTtcblxuICAgICAgICB2YXIgZmxhdHRlbiA9IGZ1bmN0aW9uKGNsYXNzTmFtZSwgc3RyKSB7XG4gICAgICAgICAgaWYgKGxhbmd1YWdlLmNhc2VfaW5zZW5zaXRpdmUpIHtcbiAgICAgICAgICAgIHN0ciA9IHN0ci50b0xvd2VyQ2FzZSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBzdHIuc3BsaXQoJyAnKS5mb3JFYWNoKGZ1bmN0aW9uKGt3KSB7XG4gICAgICAgICAgICB2YXIgcGFpciA9IGt3LnNwbGl0KCd8Jyk7XG4gICAgICAgICAgICBjb21waWxlZF9rZXl3b3Jkc1twYWlyWzBdXSA9IFtjbGFzc05hbWUsIHBhaXJbMV0gPyBOdW1iZXIocGFpclsxXSkgOiAxXTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfTtcblxuICAgICAgICBpZiAodHlwZW9mIG1vZGUua2V5d29yZHMgPT0gJ3N0cmluZycpIHsgLy8gc3RyaW5nXG4gICAgICAgICAgZmxhdHRlbigna2V5d29yZCcsIG1vZGUua2V5d29yZHMpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIE9iamVjdC5rZXlzKG1vZGUua2V5d29yZHMpLmZvckVhY2goZnVuY3Rpb24gKGNsYXNzTmFtZSkge1xuICAgICAgICAgICAgZmxhdHRlbihjbGFzc05hbWUsIG1vZGUua2V5d29yZHNbY2xhc3NOYW1lXSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgbW9kZS5rZXl3b3JkcyA9IGNvbXBpbGVkX2tleXdvcmRzO1xuICAgICAgfVxuICAgICAgbW9kZS5sZXhlbWVzUmUgPSBsYW5nUmUobW9kZS5sZXhlbWVzIHx8IC9cXGJcXHcrXFxiLywgdHJ1ZSk7XG5cbiAgICAgIGlmIChwYXJlbnQpIHtcbiAgICAgICAgaWYgKG1vZGUuYmVnaW5LZXl3b3Jkcykge1xuICAgICAgICAgIG1vZGUuYmVnaW4gPSAnXFxcXGIoJyArIG1vZGUuYmVnaW5LZXl3b3Jkcy5zcGxpdCgnICcpLmpvaW4oJ3wnKSArICcpXFxcXGInO1xuICAgICAgICB9XG4gICAgICAgIGlmICghbW9kZS5iZWdpbilcbiAgICAgICAgICBtb2RlLmJlZ2luID0gL1xcQnxcXGIvO1xuICAgICAgICBtb2RlLmJlZ2luUmUgPSBsYW5nUmUobW9kZS5iZWdpbik7XG4gICAgICAgIGlmICghbW9kZS5lbmQgJiYgIW1vZGUuZW5kc1dpdGhQYXJlbnQpXG4gICAgICAgICAgbW9kZS5lbmQgPSAvXFxCfFxcYi87XG4gICAgICAgIGlmIChtb2RlLmVuZClcbiAgICAgICAgICBtb2RlLmVuZFJlID0gbGFuZ1JlKG1vZGUuZW5kKTtcbiAgICAgICAgbW9kZS50ZXJtaW5hdG9yX2VuZCA9IHJlU3RyKG1vZGUuZW5kKSB8fCAnJztcbiAgICAgICAgaWYgKG1vZGUuZW5kc1dpdGhQYXJlbnQgJiYgcGFyZW50LnRlcm1pbmF0b3JfZW5kKVxuICAgICAgICAgIG1vZGUudGVybWluYXRvcl9lbmQgKz0gKG1vZGUuZW5kID8gJ3wnIDogJycpICsgcGFyZW50LnRlcm1pbmF0b3JfZW5kO1xuICAgICAgfVxuICAgICAgaWYgKG1vZGUuaWxsZWdhbClcbiAgICAgICAgbW9kZS5pbGxlZ2FsUmUgPSBsYW5nUmUobW9kZS5pbGxlZ2FsKTtcbiAgICAgIGlmIChtb2RlLnJlbGV2YW5jZSA9PT0gdW5kZWZpbmVkKVxuICAgICAgICBtb2RlLnJlbGV2YW5jZSA9IDE7XG4gICAgICBpZiAoIW1vZGUuY29udGFpbnMpIHtcbiAgICAgICAgbW9kZS5jb250YWlucyA9IFtdO1xuICAgICAgfVxuICAgICAgdmFyIGV4cGFuZGVkX2NvbnRhaW5zID0gW107XG4gICAgICBtb2RlLmNvbnRhaW5zLmZvckVhY2goZnVuY3Rpb24oYykge1xuICAgICAgICBpZiAoYy52YXJpYW50cykge1xuICAgICAgICAgIGMudmFyaWFudHMuZm9yRWFjaChmdW5jdGlvbih2KSB7ZXhwYW5kZWRfY29udGFpbnMucHVzaChpbmhlcml0KGMsIHYpKTt9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBleHBhbmRlZF9jb250YWlucy5wdXNoKGMgPT0gJ3NlbGYnID8gbW9kZSA6IGMpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIG1vZGUuY29udGFpbnMgPSBleHBhbmRlZF9jb250YWlucztcbiAgICAgIG1vZGUuY29udGFpbnMuZm9yRWFjaChmdW5jdGlvbihjKSB7Y29tcGlsZU1vZGUoYywgbW9kZSk7fSk7XG5cbiAgICAgIGlmIChtb2RlLnN0YXJ0cykge1xuICAgICAgICBjb21waWxlTW9kZShtb2RlLnN0YXJ0cywgcGFyZW50KTtcbiAgICAgIH1cblxuICAgICAgdmFyIHRlcm1pbmF0b3JzID1cbiAgICAgICAgbW9kZS5jb250YWlucy5tYXAoZnVuY3Rpb24oYykge1xuICAgICAgICAgIHJldHVybiBjLmJlZ2luS2V5d29yZHMgPyAnXFxcXC4/KCcgKyBjLmJlZ2luICsgJylcXFxcLj8nIDogYy5iZWdpbjtcbiAgICAgICAgfSlcbiAgICAgICAgLmNvbmNhdChbbW9kZS50ZXJtaW5hdG9yX2VuZCwgbW9kZS5pbGxlZ2FsXSlcbiAgICAgICAgLm1hcChyZVN0cilcbiAgICAgICAgLmZpbHRlcihCb29sZWFuKTtcbiAgICAgIG1vZGUudGVybWluYXRvcnMgPSB0ZXJtaW5hdG9ycy5sZW5ndGggPyBsYW5nUmUodGVybWluYXRvcnMuam9pbignfCcpLCB0cnVlKSA6IHtleGVjOiBmdW5jdGlvbigvKnMqLykge3JldHVybiBudWxsO319O1xuICAgIH1cblxuICAgIGNvbXBpbGVNb2RlKGxhbmd1YWdlKTtcbiAgfVxuXG4gIC8qXG4gIENvcmUgaGlnaGxpZ2h0aW5nIGZ1bmN0aW9uLiBBY2NlcHRzIGEgbGFuZ3VhZ2UgbmFtZSwgb3IgYW4gYWxpYXMsIGFuZCBhXG4gIHN0cmluZyB3aXRoIHRoZSBjb2RlIHRvIGhpZ2hsaWdodC4gUmV0dXJucyBhbiBvYmplY3Qgd2l0aCB0aGUgZm9sbG93aW5nXG4gIHByb3BlcnRpZXM6XG5cbiAgLSByZWxldmFuY2UgKGludClcbiAgLSB2YWx1ZSAoYW4gSFRNTCBzdHJpbmcgd2l0aCBoaWdobGlnaHRpbmcgbWFya3VwKVxuXG4gICovXG4gIGZ1bmN0aW9uIGhpZ2hsaWdodChuYW1lLCB2YWx1ZSwgaWdub3JlX2lsbGVnYWxzLCBjb250aW51YXRpb24pIHtcblxuICAgIGZ1bmN0aW9uIHN1Yk1vZGUobGV4ZW1lLCBtb2RlKSB7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG1vZGUuY29udGFpbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKHRlc3RSZShtb2RlLmNvbnRhaW5zW2ldLmJlZ2luUmUsIGxleGVtZSkpIHtcbiAgICAgICAgICByZXR1cm4gbW9kZS5jb250YWluc1tpXTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGVuZE9mTW9kZShtb2RlLCBsZXhlbWUpIHtcbiAgICAgIGlmICh0ZXN0UmUobW9kZS5lbmRSZSwgbGV4ZW1lKSkge1xuICAgICAgICB3aGlsZSAobW9kZS5lbmRzUGFyZW50ICYmIG1vZGUucGFyZW50KSB7XG4gICAgICAgICAgbW9kZSA9IG1vZGUucGFyZW50O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBtb2RlO1xuICAgICAgfVxuICAgICAgaWYgKG1vZGUuZW5kc1dpdGhQYXJlbnQpIHtcbiAgICAgICAgcmV0dXJuIGVuZE9mTW9kZShtb2RlLnBhcmVudCwgbGV4ZW1lKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc0lsbGVnYWwobGV4ZW1lLCBtb2RlKSB7XG4gICAgICByZXR1cm4gIWlnbm9yZV9pbGxlZ2FscyAmJiB0ZXN0UmUobW9kZS5pbGxlZ2FsUmUsIGxleGVtZSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24ga2V5d29yZE1hdGNoKG1vZGUsIG1hdGNoKSB7XG4gICAgICB2YXIgbWF0Y2hfc3RyID0gbGFuZ3VhZ2UuY2FzZV9pbnNlbnNpdGl2ZSA/IG1hdGNoWzBdLnRvTG93ZXJDYXNlKCkgOiBtYXRjaFswXTtcbiAgICAgIHJldHVybiBtb2RlLmtleXdvcmRzLmhhc093blByb3BlcnR5KG1hdGNoX3N0cikgJiYgbW9kZS5rZXl3b3Jkc1ttYXRjaF9zdHJdO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGJ1aWxkU3BhbihjbGFzc25hbWUsIGluc2lkZVNwYW4sIGxlYXZlT3Blbiwgbm9QcmVmaXgpIHtcbiAgICAgIHZhciBjbGFzc1ByZWZpeCA9IG5vUHJlZml4ID8gJycgOiBvcHRpb25zLmNsYXNzUHJlZml4LFxuICAgICAgICAgIG9wZW5TcGFuICAgID0gJzxzcGFuIGNsYXNzPVwiJyArIGNsYXNzUHJlZml4LFxuICAgICAgICAgIGNsb3NlU3BhbiAgID0gbGVhdmVPcGVuID8gJycgOiAnPC9zcGFuPic7XG5cbiAgICAgIG9wZW5TcGFuICs9IGNsYXNzbmFtZSArICdcIj4nO1xuXG4gICAgICByZXR1cm4gb3BlblNwYW4gKyBpbnNpZGVTcGFuICsgY2xvc2VTcGFuO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHByb2Nlc3NLZXl3b3JkcygpIHtcbiAgICAgIGlmICghdG9wLmtleXdvcmRzKVxuICAgICAgICByZXR1cm4gZXNjYXBlKG1vZGVfYnVmZmVyKTtcbiAgICAgIHZhciByZXN1bHQgPSAnJztcbiAgICAgIHZhciBsYXN0X2luZGV4ID0gMDtcbiAgICAgIHRvcC5sZXhlbWVzUmUubGFzdEluZGV4ID0gMDtcbiAgICAgIHZhciBtYXRjaCA9IHRvcC5sZXhlbWVzUmUuZXhlYyhtb2RlX2J1ZmZlcik7XG4gICAgICB3aGlsZSAobWF0Y2gpIHtcbiAgICAgICAgcmVzdWx0ICs9IGVzY2FwZShtb2RlX2J1ZmZlci5zdWJzdHIobGFzdF9pbmRleCwgbWF0Y2guaW5kZXggLSBsYXN0X2luZGV4KSk7XG4gICAgICAgIHZhciBrZXl3b3JkX21hdGNoID0ga2V5d29yZE1hdGNoKHRvcCwgbWF0Y2gpO1xuICAgICAgICBpZiAoa2V5d29yZF9tYXRjaCkge1xuICAgICAgICAgIHJlbGV2YW5jZSArPSBrZXl3b3JkX21hdGNoWzFdO1xuICAgICAgICAgIHJlc3VsdCArPSBidWlsZFNwYW4oa2V5d29yZF9tYXRjaFswXSwgZXNjYXBlKG1hdGNoWzBdKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmVzdWx0ICs9IGVzY2FwZShtYXRjaFswXSk7XG4gICAgICAgIH1cbiAgICAgICAgbGFzdF9pbmRleCA9IHRvcC5sZXhlbWVzUmUubGFzdEluZGV4O1xuICAgICAgICBtYXRjaCA9IHRvcC5sZXhlbWVzUmUuZXhlYyhtb2RlX2J1ZmZlcik7XG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzdWx0ICsgZXNjYXBlKG1vZGVfYnVmZmVyLnN1YnN0cihsYXN0X2luZGV4KSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcHJvY2Vzc1N1Ykxhbmd1YWdlKCkge1xuICAgICAgdmFyIGV4cGxpY2l0ID0gdHlwZW9mIHRvcC5zdWJMYW5ndWFnZSA9PSAnc3RyaW5nJztcbiAgICAgIGlmIChleHBsaWNpdCAmJiAhbGFuZ3VhZ2VzW3RvcC5zdWJMYW5ndWFnZV0pIHtcbiAgICAgICAgcmV0dXJuIGVzY2FwZShtb2RlX2J1ZmZlcik7XG4gICAgICB9XG5cbiAgICAgIHZhciByZXN1bHQgPSBleHBsaWNpdCA/XG4gICAgICAgICAgICAgICAgICAgaGlnaGxpZ2h0KHRvcC5zdWJMYW5ndWFnZSwgbW9kZV9idWZmZXIsIHRydWUsIGNvbnRpbnVhdGlvbnNbdG9wLnN1Ykxhbmd1YWdlXSkgOlxuICAgICAgICAgICAgICAgICAgIGhpZ2hsaWdodEF1dG8obW9kZV9idWZmZXIsIHRvcC5zdWJMYW5ndWFnZS5sZW5ndGggPyB0b3Auc3ViTGFuZ3VhZ2UgOiB1bmRlZmluZWQpO1xuXG4gICAgICAvLyBDb3VudGluZyBlbWJlZGRlZCBsYW5ndWFnZSBzY29yZSB0b3dhcmRzIHRoZSBob3N0IGxhbmd1YWdlIG1heSBiZSBkaXNhYmxlZFxuICAgICAgLy8gd2l0aCB6ZXJvaW5nIHRoZSBjb250YWluaW5nIG1vZGUgcmVsZXZhbmNlLiBVc2VjYXNlIGluIHBvaW50IGlzIE1hcmtkb3duIHRoYXRcbiAgICAgIC8vIGFsbG93cyBYTUwgZXZlcnl3aGVyZSBhbmQgbWFrZXMgZXZlcnkgWE1MIHNuaXBwZXQgdG8gaGF2ZSBhIG11Y2ggbGFyZ2VyIE1hcmtkb3duXG4gICAgICAvLyBzY29yZS5cbiAgICAgIGlmICh0b3AucmVsZXZhbmNlID4gMCkge1xuICAgICAgICByZWxldmFuY2UgKz0gcmVzdWx0LnJlbGV2YW5jZTtcbiAgICAgIH1cbiAgICAgIGlmIChleHBsaWNpdCkge1xuICAgICAgICBjb250aW51YXRpb25zW3RvcC5zdWJMYW5ndWFnZV0gPSByZXN1bHQudG9wO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGJ1aWxkU3BhbihyZXN1bHQubGFuZ3VhZ2UsIHJlc3VsdC52YWx1ZSwgZmFsc2UsIHRydWUpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHByb2Nlc3NCdWZmZXIoKSB7XG4gICAgICByZXR1cm4gdG9wLnN1Ykxhbmd1YWdlICE9PSB1bmRlZmluZWQgPyBwcm9jZXNzU3ViTGFuZ3VhZ2UoKSA6IHByb2Nlc3NLZXl3b3JkcygpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHN0YXJ0TmV3TW9kZShtb2RlLCBsZXhlbWUpIHtcbiAgICAgIHZhciBtYXJrdXAgPSBtb2RlLmNsYXNzTmFtZT8gYnVpbGRTcGFuKG1vZGUuY2xhc3NOYW1lLCAnJywgdHJ1ZSk6ICcnO1xuICAgICAgaWYgKG1vZGUucmV0dXJuQmVnaW4pIHtcbiAgICAgICAgcmVzdWx0ICs9IG1hcmt1cDtcbiAgICAgICAgbW9kZV9idWZmZXIgPSAnJztcbiAgICAgIH0gZWxzZSBpZiAobW9kZS5leGNsdWRlQmVnaW4pIHtcbiAgICAgICAgcmVzdWx0ICs9IGVzY2FwZShsZXhlbWUpICsgbWFya3VwO1xuICAgICAgICBtb2RlX2J1ZmZlciA9ICcnO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVzdWx0ICs9IG1hcmt1cDtcbiAgICAgICAgbW9kZV9idWZmZXIgPSBsZXhlbWU7XG4gICAgICB9XG4gICAgICB0b3AgPSBPYmplY3QuY3JlYXRlKG1vZGUsIHtwYXJlbnQ6IHt2YWx1ZTogdG9wfX0pO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHByb2Nlc3NMZXhlbWUoYnVmZmVyLCBsZXhlbWUpIHtcblxuICAgICAgbW9kZV9idWZmZXIgKz0gYnVmZmVyO1xuICAgICAgaWYgKGxleGVtZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJlc3VsdCArPSBwcm9jZXNzQnVmZmVyKCk7XG4gICAgICAgIHJldHVybiAwO1xuICAgICAgfVxuXG4gICAgICB2YXIgbmV3X21vZGUgPSBzdWJNb2RlKGxleGVtZSwgdG9wKTtcbiAgICAgIGlmIChuZXdfbW9kZSkge1xuICAgICAgICByZXN1bHQgKz0gcHJvY2Vzc0J1ZmZlcigpO1xuICAgICAgICBzdGFydE5ld01vZGUobmV3X21vZGUsIGxleGVtZSk7XG4gICAgICAgIHJldHVybiBuZXdfbW9kZS5yZXR1cm5CZWdpbiA/IDAgOiBsZXhlbWUubGVuZ3RoO1xuICAgICAgfVxuXG4gICAgICB2YXIgZW5kX21vZGUgPSBlbmRPZk1vZGUodG9wLCBsZXhlbWUpO1xuICAgICAgaWYgKGVuZF9tb2RlKSB7XG4gICAgICAgIHZhciBvcmlnaW4gPSB0b3A7XG4gICAgICAgIGlmICghKG9yaWdpbi5yZXR1cm5FbmQgfHwgb3JpZ2luLmV4Y2x1ZGVFbmQpKSB7XG4gICAgICAgICAgbW9kZV9idWZmZXIgKz0gbGV4ZW1lO1xuICAgICAgICB9XG4gICAgICAgIHJlc3VsdCArPSBwcm9jZXNzQnVmZmVyKCk7XG4gICAgICAgIGRvIHtcbiAgICAgICAgICBpZiAodG9wLmNsYXNzTmFtZSkge1xuICAgICAgICAgICAgcmVzdWx0ICs9ICc8L3NwYW4+JztcbiAgICAgICAgICB9XG4gICAgICAgICAgcmVsZXZhbmNlICs9IHRvcC5yZWxldmFuY2U7XG4gICAgICAgICAgdG9wID0gdG9wLnBhcmVudDtcbiAgICAgICAgfSB3aGlsZSAodG9wICE9IGVuZF9tb2RlLnBhcmVudCk7XG4gICAgICAgIGlmIChvcmlnaW4uZXhjbHVkZUVuZCkge1xuICAgICAgICAgIHJlc3VsdCArPSBlc2NhcGUobGV4ZW1lKTtcbiAgICAgICAgfVxuICAgICAgICBtb2RlX2J1ZmZlciA9ICcnO1xuICAgICAgICBpZiAoZW5kX21vZGUuc3RhcnRzKSB7XG4gICAgICAgICAgc3RhcnROZXdNb2RlKGVuZF9tb2RlLnN0YXJ0cywgJycpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBvcmlnaW4ucmV0dXJuRW5kID8gMCA6IGxleGVtZS5sZW5ndGg7XG4gICAgICB9XG5cbiAgICAgIGlmIChpc0lsbGVnYWwobGV4ZW1lLCB0b3ApKVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0lsbGVnYWwgbGV4ZW1lIFwiJyArIGxleGVtZSArICdcIiBmb3IgbW9kZSBcIicgKyAodG9wLmNsYXNzTmFtZSB8fCAnPHVubmFtZWQ+JykgKyAnXCInKTtcblxuICAgICAgLypcbiAgICAgIFBhcnNlciBzaG91bGQgbm90IHJlYWNoIHRoaXMgcG9pbnQgYXMgYWxsIHR5cGVzIG9mIGxleGVtZXMgc2hvdWxkIGJlIGNhdWdodFxuICAgICAgZWFybGllciwgYnV0IGlmIGl0IGRvZXMgZHVlIHRvIHNvbWUgYnVnIG1ha2Ugc3VyZSBpdCBhZHZhbmNlcyBhdCBsZWFzdCBvbmVcbiAgICAgIGNoYXJhY3RlciBmb3J3YXJkIHRvIHByZXZlbnQgaW5maW5pdGUgbG9vcGluZy5cbiAgICAgICovXG4gICAgICBtb2RlX2J1ZmZlciArPSBsZXhlbWU7XG4gICAgICByZXR1cm4gbGV4ZW1lLmxlbmd0aCB8fCAxO1xuICAgIH1cblxuICAgIHZhciBsYW5ndWFnZSA9IGdldExhbmd1YWdlKG5hbWUpO1xuICAgIGlmICghbGFuZ3VhZ2UpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignVW5rbm93biBsYW5ndWFnZTogXCInICsgbmFtZSArICdcIicpO1xuICAgIH1cblxuICAgIGNvbXBpbGVMYW5ndWFnZShsYW5ndWFnZSk7XG4gICAgdmFyIHRvcCA9IGNvbnRpbnVhdGlvbiB8fCBsYW5ndWFnZTtcbiAgICB2YXIgY29udGludWF0aW9ucyA9IHt9OyAvLyBrZWVwIGNvbnRpbnVhdGlvbnMgZm9yIHN1Yi1sYW5ndWFnZXNcbiAgICB2YXIgcmVzdWx0ID0gJycsIGN1cnJlbnQ7XG4gICAgZm9yKGN1cnJlbnQgPSB0b3A7IGN1cnJlbnQgIT0gbGFuZ3VhZ2U7IGN1cnJlbnQgPSBjdXJyZW50LnBhcmVudCkge1xuICAgICAgaWYgKGN1cnJlbnQuY2xhc3NOYW1lKSB7XG4gICAgICAgIHJlc3VsdCA9IGJ1aWxkU3BhbihjdXJyZW50LmNsYXNzTmFtZSwgJycsIHRydWUpICsgcmVzdWx0O1xuICAgICAgfVxuICAgIH1cbiAgICB2YXIgbW9kZV9idWZmZXIgPSAnJztcbiAgICB2YXIgcmVsZXZhbmNlID0gMDtcbiAgICB0cnkge1xuICAgICAgdmFyIG1hdGNoLCBjb3VudCwgaW5kZXggPSAwO1xuICAgICAgd2hpbGUgKHRydWUpIHtcbiAgICAgICAgdG9wLnRlcm1pbmF0b3JzLmxhc3RJbmRleCA9IGluZGV4O1xuICAgICAgICBtYXRjaCA9IHRvcC50ZXJtaW5hdG9ycy5leGVjKHZhbHVlKTtcbiAgICAgICAgaWYgKCFtYXRjaClcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY291bnQgPSBwcm9jZXNzTGV4ZW1lKHZhbHVlLnN1YnN0cihpbmRleCwgbWF0Y2guaW5kZXggLSBpbmRleCksIG1hdGNoWzBdKTtcbiAgICAgICAgaW5kZXggPSBtYXRjaC5pbmRleCArIGNvdW50O1xuICAgICAgfVxuICAgICAgcHJvY2Vzc0xleGVtZSh2YWx1ZS5zdWJzdHIoaW5kZXgpKTtcbiAgICAgIGZvcihjdXJyZW50ID0gdG9wOyBjdXJyZW50LnBhcmVudDsgY3VycmVudCA9IGN1cnJlbnQucGFyZW50KSB7IC8vIGNsb3NlIGRhbmdsaW5nIG1vZGVzXG4gICAgICAgIGlmIChjdXJyZW50LmNsYXNzTmFtZSkge1xuICAgICAgICAgIHJlc3VsdCArPSAnPC9zcGFuPic7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiB7XG4gICAgICAgIHJlbGV2YW5jZTogcmVsZXZhbmNlLFxuICAgICAgICB2YWx1ZTogcmVzdWx0LFxuICAgICAgICBsYW5ndWFnZTogbmFtZSxcbiAgICAgICAgdG9wOiB0b3BcbiAgICAgIH07XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgaWYgKGUubWVzc2FnZS5pbmRleE9mKCdJbGxlZ2FsJykgIT0gLTEpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICByZWxldmFuY2U6IDAsXG4gICAgICAgICAgdmFsdWU6IGVzY2FwZSh2YWx1ZSlcbiAgICAgICAgfTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IGU7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLypcbiAgSGlnaGxpZ2h0aW5nIHdpdGggbGFuZ3VhZ2UgZGV0ZWN0aW9uLiBBY2NlcHRzIGEgc3RyaW5nIHdpdGggdGhlIGNvZGUgdG9cbiAgaGlnaGxpZ2h0LiBSZXR1cm5zIGFuIG9iamVjdCB3aXRoIHRoZSBmb2xsb3dpbmcgcHJvcGVydGllczpcblxuICAtIGxhbmd1YWdlIChkZXRlY3RlZCBsYW5ndWFnZSlcbiAgLSByZWxldmFuY2UgKGludClcbiAgLSB2YWx1ZSAoYW4gSFRNTCBzdHJpbmcgd2l0aCBoaWdobGlnaHRpbmcgbWFya3VwKVxuICAtIHNlY29uZF9iZXN0IChvYmplY3Qgd2l0aCB0aGUgc2FtZSBzdHJ1Y3R1cmUgZm9yIHNlY29uZC1iZXN0IGhldXJpc3RpY2FsbHlcbiAgICBkZXRlY3RlZCBsYW5ndWFnZSwgbWF5IGJlIGFic2VudClcblxuICAqL1xuICBmdW5jdGlvbiBoaWdobGlnaHRBdXRvKHRleHQsIGxhbmd1YWdlU3Vic2V0KSB7XG4gICAgbGFuZ3VhZ2VTdWJzZXQgPSBsYW5ndWFnZVN1YnNldCB8fCBvcHRpb25zLmxhbmd1YWdlcyB8fCBPYmplY3Qua2V5cyhsYW5ndWFnZXMpO1xuICAgIHZhciByZXN1bHQgPSB7XG4gICAgICByZWxldmFuY2U6IDAsXG4gICAgICB2YWx1ZTogZXNjYXBlKHRleHQpXG4gICAgfTtcbiAgICB2YXIgc2Vjb25kX2Jlc3QgPSByZXN1bHQ7XG4gICAgbGFuZ3VhZ2VTdWJzZXQuZm9yRWFjaChmdW5jdGlvbihuYW1lKSB7XG4gICAgICBpZiAoIWdldExhbmd1YWdlKG5hbWUpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHZhciBjdXJyZW50ID0gaGlnaGxpZ2h0KG5hbWUsIHRleHQsIGZhbHNlKTtcbiAgICAgIGN1cnJlbnQubGFuZ3VhZ2UgPSBuYW1lO1xuICAgICAgaWYgKGN1cnJlbnQucmVsZXZhbmNlID4gc2Vjb25kX2Jlc3QucmVsZXZhbmNlKSB7XG4gICAgICAgIHNlY29uZF9iZXN0ID0gY3VycmVudDtcbiAgICAgIH1cbiAgICAgIGlmIChjdXJyZW50LnJlbGV2YW5jZSA+IHJlc3VsdC5yZWxldmFuY2UpIHtcbiAgICAgICAgc2Vjb25kX2Jlc3QgPSByZXN1bHQ7XG4gICAgICAgIHJlc3VsdCA9IGN1cnJlbnQ7XG4gICAgICB9XG4gICAgfSk7XG4gICAgaWYgKHNlY29uZF9iZXN0Lmxhbmd1YWdlKSB7XG4gICAgICByZXN1bHQuc2Vjb25kX2Jlc3QgPSBzZWNvbmRfYmVzdDtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIC8qXG4gIFBvc3QtcHJvY2Vzc2luZyBvZiB0aGUgaGlnaGxpZ2h0ZWQgbWFya3VwOlxuXG4gIC0gcmVwbGFjZSBUQUJzIHdpdGggc29tZXRoaW5nIG1vcmUgdXNlZnVsXG4gIC0gcmVwbGFjZSByZWFsIGxpbmUtYnJlYWtzIHdpdGggJzxicj4nIGZvciBub24tcHJlIGNvbnRhaW5lcnNcblxuICAqL1xuICBmdW5jdGlvbiBmaXhNYXJrdXAodmFsdWUpIHtcbiAgICBpZiAob3B0aW9ucy50YWJSZXBsYWNlKSB7XG4gICAgICB2YWx1ZSA9IHZhbHVlLnJlcGxhY2UoL14oKDxbXj5dKz58XFx0KSspL2dtLCBmdW5jdGlvbihtYXRjaCwgcDEgLyouLi4sIG9mZnNldCwgcyovKSB7XG4gICAgICAgIHJldHVybiBwMS5yZXBsYWNlKC9cXHQvZywgb3B0aW9ucy50YWJSZXBsYWNlKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgICBpZiAob3B0aW9ucy51c2VCUikge1xuICAgICAgdmFsdWUgPSB2YWx1ZS5yZXBsYWNlKC9cXG4vZywgJzxicj4nKTtcbiAgICB9XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG5cbiAgZnVuY3Rpb24gYnVpbGRDbGFzc05hbWUocHJldkNsYXNzTmFtZSwgY3VycmVudExhbmcsIHJlc3VsdExhbmcpIHtcbiAgICB2YXIgbGFuZ3VhZ2UgPSBjdXJyZW50TGFuZyA/IGFsaWFzZXNbY3VycmVudExhbmddIDogcmVzdWx0TGFuZyxcbiAgICAgICAgcmVzdWx0ICAgPSBbcHJldkNsYXNzTmFtZS50cmltKCldO1xuXG4gICAgaWYgKCFwcmV2Q2xhc3NOYW1lLm1hdGNoKC9cXGJobGpzXFxiLykpIHtcbiAgICAgIHJlc3VsdC5wdXNoKCdobGpzJyk7XG4gICAgfVxuXG4gICAgaWYgKHByZXZDbGFzc05hbWUuaW5kZXhPZihsYW5ndWFnZSkgPT09IC0xKSB7XG4gICAgICByZXN1bHQucHVzaChsYW5ndWFnZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdC5qb2luKCcgJykudHJpbSgpO1xuICB9XG5cbiAgLypcbiAgQXBwbGllcyBoaWdobGlnaHRpbmcgdG8gYSBET00gbm9kZSBjb250YWluaW5nIGNvZGUuIEFjY2VwdHMgYSBET00gbm9kZSBhbmRcbiAgdHdvIG9wdGlvbmFsIHBhcmFtZXRlcnMgZm9yIGZpeE1hcmt1cC5cbiAgKi9cbiAgZnVuY3Rpb24gaGlnaGxpZ2h0QmxvY2soYmxvY2spIHtcbiAgICB2YXIgbGFuZ3VhZ2UgPSBibG9ja0xhbmd1YWdlKGJsb2NrKTtcbiAgICBpZiAoaXNOb3RIaWdobGlnaHRlZChsYW5ndWFnZSkpXG4gICAgICAgIHJldHVybjtcblxuICAgIHZhciBub2RlO1xuICAgIGlmIChvcHRpb25zLnVzZUJSKSB7XG4gICAgICBub2RlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCdodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sJywgJ2RpdicpO1xuICAgICAgbm9kZS5pbm5lckhUTUwgPSBibG9jay5pbm5lckhUTUwucmVwbGFjZSgvXFxuL2csICcnKS5yZXBsYWNlKC88YnJbIFxcL10qPi9nLCAnXFxuJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG5vZGUgPSBibG9jaztcbiAgICB9XG4gICAgdmFyIHRleHQgPSBub2RlLnRleHRDb250ZW50O1xuICAgIHZhciByZXN1bHQgPSBsYW5ndWFnZSA/IGhpZ2hsaWdodChsYW5ndWFnZSwgdGV4dCwgdHJ1ZSkgOiBoaWdobGlnaHRBdXRvKHRleHQpO1xuXG4gICAgdmFyIG9yaWdpbmFsU3RyZWFtID0gbm9kZVN0cmVhbShub2RlKTtcbiAgICBpZiAob3JpZ2luYWxTdHJlYW0ubGVuZ3RoKSB7XG4gICAgICB2YXIgcmVzdWx0Tm9kZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygnaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCcsICdkaXYnKTtcbiAgICAgIHJlc3VsdE5vZGUuaW5uZXJIVE1MID0gcmVzdWx0LnZhbHVlO1xuICAgICAgcmVzdWx0LnZhbHVlID0gbWVyZ2VTdHJlYW1zKG9yaWdpbmFsU3RyZWFtLCBub2RlU3RyZWFtKHJlc3VsdE5vZGUpLCB0ZXh0KTtcbiAgICB9XG4gICAgcmVzdWx0LnZhbHVlID0gZml4TWFya3VwKHJlc3VsdC52YWx1ZSk7XG5cbiAgICBibG9jay5pbm5lckhUTUwgPSByZXN1bHQudmFsdWU7XG4gICAgYmxvY2suY2xhc3NOYW1lID0gYnVpbGRDbGFzc05hbWUoYmxvY2suY2xhc3NOYW1lLCBsYW5ndWFnZSwgcmVzdWx0Lmxhbmd1YWdlKTtcbiAgICBibG9jay5yZXN1bHQgPSB7XG4gICAgICBsYW5ndWFnZTogcmVzdWx0Lmxhbmd1YWdlLFxuICAgICAgcmU6IHJlc3VsdC5yZWxldmFuY2VcbiAgICB9O1xuICAgIGlmIChyZXN1bHQuc2Vjb25kX2Jlc3QpIHtcbiAgICAgIGJsb2NrLnNlY29uZF9iZXN0ID0ge1xuICAgICAgICBsYW5ndWFnZTogcmVzdWx0LnNlY29uZF9iZXN0Lmxhbmd1YWdlLFxuICAgICAgICByZTogcmVzdWx0LnNlY29uZF9iZXN0LnJlbGV2YW5jZVxuICAgICAgfTtcbiAgICB9XG4gIH1cblxuICB2YXIgb3B0aW9ucyA9IHtcbiAgICBjbGFzc1ByZWZpeDogJ2hsanMtJyxcbiAgICB0YWJSZXBsYWNlOiBudWxsLFxuICAgIHVzZUJSOiBmYWxzZSxcbiAgICBsYW5ndWFnZXM6IHVuZGVmaW5lZFxuICB9O1xuXG4gIC8qXG4gIFVwZGF0ZXMgaGlnaGxpZ2h0LmpzIGdsb2JhbCBvcHRpb25zIHdpdGggdmFsdWVzIHBhc3NlZCBpbiB0aGUgZm9ybSBvZiBhbiBvYmplY3RcbiAgKi9cbiAgZnVuY3Rpb24gY29uZmlndXJlKHVzZXJfb3B0aW9ucykge1xuICAgIG9wdGlvbnMgPSBpbmhlcml0KG9wdGlvbnMsIHVzZXJfb3B0aW9ucyk7XG4gIH1cblxuICAvKlxuICBBcHBsaWVzIGhpZ2hsaWdodGluZyB0byBhbGwgPHByZT48Y29kZT4uLjwvY29kZT48L3ByZT4gYmxvY2tzIG9uIGEgcGFnZS5cbiAgKi9cbiAgZnVuY3Rpb24gaW5pdEhpZ2hsaWdodGluZygpIHtcbiAgICBpZiAoaW5pdEhpZ2hsaWdodGluZy5jYWxsZWQpXG4gICAgICByZXR1cm47XG4gICAgaW5pdEhpZ2hsaWdodGluZy5jYWxsZWQgPSB0cnVlO1xuXG4gICAgdmFyIGJsb2NrcyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ3ByZSBjb2RlJyk7XG4gICAgQXJyYXkucHJvdG90eXBlLmZvckVhY2guY2FsbChibG9ja3MsIGhpZ2hsaWdodEJsb2NrKTtcbiAgfVxuXG4gIC8qXG4gIEF0dGFjaGVzIGhpZ2hsaWdodGluZyB0byB0aGUgcGFnZSBsb2FkIGV2ZW50LlxuICAqL1xuICBmdW5jdGlvbiBpbml0SGlnaGxpZ2h0aW5nT25Mb2FkKCkge1xuICAgIGFkZEV2ZW50TGlzdGVuZXIoJ0RPTUNvbnRlbnRMb2FkZWQnLCBpbml0SGlnaGxpZ2h0aW5nLCBmYWxzZSk7XG4gICAgYWRkRXZlbnRMaXN0ZW5lcignbG9hZCcsIGluaXRIaWdobGlnaHRpbmcsIGZhbHNlKTtcbiAgfVxuXG4gIHZhciBsYW5ndWFnZXMgPSB7fTtcbiAgdmFyIGFsaWFzZXMgPSB7fTtcblxuICBmdW5jdGlvbiByZWdpc3Rlckxhbmd1YWdlKG5hbWUsIGxhbmd1YWdlKSB7XG4gICAgdmFyIGxhbmcgPSBsYW5ndWFnZXNbbmFtZV0gPSBsYW5ndWFnZShobGpzKTtcbiAgICBpZiAobGFuZy5hbGlhc2VzKSB7XG4gICAgICBsYW5nLmFsaWFzZXMuZm9yRWFjaChmdW5jdGlvbihhbGlhcykge2FsaWFzZXNbYWxpYXNdID0gbmFtZTt9KTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBsaXN0TGFuZ3VhZ2VzKCkge1xuICAgIHJldHVybiBPYmplY3Qua2V5cyhsYW5ndWFnZXMpO1xuICB9XG5cbiAgZnVuY3Rpb24gZ2V0TGFuZ3VhZ2UobmFtZSkge1xuICAgIG5hbWUgPSAobmFtZSB8fCAnJykudG9Mb3dlckNhc2UoKTtcbiAgICByZXR1cm4gbGFuZ3VhZ2VzW25hbWVdIHx8IGxhbmd1YWdlc1thbGlhc2VzW25hbWVdXTtcbiAgfVxuXG4gIC8qIEludGVyZmFjZSBkZWZpbml0aW9uICovXG5cbiAgaGxqcy5oaWdobGlnaHQgPSBoaWdobGlnaHQ7XG4gIGhsanMuaGlnaGxpZ2h0QXV0byA9IGhpZ2hsaWdodEF1dG87XG4gIGhsanMuZml4TWFya3VwID0gZml4TWFya3VwO1xuICBobGpzLmhpZ2hsaWdodEJsb2NrID0gaGlnaGxpZ2h0QmxvY2s7XG4gIGhsanMuY29uZmlndXJlID0gY29uZmlndXJlO1xuICBobGpzLmluaXRIaWdobGlnaHRpbmcgPSBpbml0SGlnaGxpZ2h0aW5nO1xuICBobGpzLmluaXRIaWdobGlnaHRpbmdPbkxvYWQgPSBpbml0SGlnaGxpZ2h0aW5nT25Mb2FkO1xuICBobGpzLnJlZ2lzdGVyTGFuZ3VhZ2UgPSByZWdpc3Rlckxhbmd1YWdlO1xuICBobGpzLmxpc3RMYW5ndWFnZXMgPSBsaXN0TGFuZ3VhZ2VzO1xuICBobGpzLmdldExhbmd1YWdlID0gZ2V0TGFuZ3VhZ2U7XG4gIGhsanMuaW5oZXJpdCA9IGluaGVyaXQ7XG5cbiAgLy8gQ29tbW9uIHJlZ2V4cHNcbiAgaGxqcy5JREVOVF9SRSA9ICdbYS16QS1aXVxcXFx3Kic7XG4gIGhsanMuVU5ERVJTQ09SRV9JREVOVF9SRSA9ICdbYS16QS1aX11cXFxcdyonO1xuICBobGpzLk5VTUJFUl9SRSA9ICdcXFxcYlxcXFxkKyhcXFxcLlxcXFxkKyk/JztcbiAgaGxqcy5DX05VTUJFUl9SRSA9ICcoXFxcXGIwW3hYXVthLWZBLUYwLTldK3woXFxcXGJcXFxcZCsoXFxcXC5cXFxcZCopP3xcXFxcLlxcXFxkKykoW2VFXVstK10/XFxcXGQrKT8pJzsgLy8gMHguLi4sIDAuLi4sIGRlY2ltYWwsIGZsb2F0XG4gIGhsanMuQklOQVJZX05VTUJFUl9SRSA9ICdcXFxcYigwYlswMV0rKSc7IC8vIDBiLi4uXG4gIGhsanMuUkVfU1RBUlRFUlNfUkUgPSAnIXwhPXwhPT18JXwlPXwmfCYmfCY9fFxcXFwqfFxcXFwqPXxcXFxcK3xcXFxcKz18LHwtfC09fC89fC98Onw7fDw8fDw8PXw8PXw8fD09PXw9PXw9fD4+Pj18Pj49fD49fD4+Pnw+Pnw+fFxcXFw/fFxcXFxbfFxcXFx7fFxcXFwofFxcXFxefFxcXFxePXxcXFxcfHxcXFxcfD18XFxcXHxcXFxcfHx+JztcblxuICAvLyBDb21tb24gbW9kZXNcbiAgaGxqcy5CQUNLU0xBU0hfRVNDQVBFID0ge1xuICAgIGJlZ2luOiAnXFxcXFxcXFxbXFxcXHNcXFxcU10nLCByZWxldmFuY2U6IDBcbiAgfTtcbiAgaGxqcy5BUE9TX1NUUklOR19NT0RFID0ge1xuICAgIGNsYXNzTmFtZTogJ3N0cmluZycsXG4gICAgYmVnaW46ICdcXCcnLCBlbmQ6ICdcXCcnLFxuICAgIGlsbGVnYWw6ICdcXFxcbicsXG4gICAgY29udGFpbnM6IFtobGpzLkJBQ0tTTEFTSF9FU0NBUEVdXG4gIH07XG4gIGhsanMuUVVPVEVfU1RSSU5HX01PREUgPSB7XG4gICAgY2xhc3NOYW1lOiAnc3RyaW5nJyxcbiAgICBiZWdpbjogJ1wiJywgZW5kOiAnXCInLFxuICAgIGlsbGVnYWw6ICdcXFxcbicsXG4gICAgY29udGFpbnM6IFtobGpzLkJBQ0tTTEFTSF9FU0NBUEVdXG4gIH07XG4gIGhsanMuUEhSQVNBTF9XT1JEU19NT0RFID0ge1xuICAgIGJlZ2luOiAvXFxiKGF8YW58dGhlfGFyZXxJfEknbXxpc24ndHxkb24ndHxkb2Vzbid0fHdvbid0fGJ1dHxqdXN0fHNob3VsZHxwcmV0dHl8c2ltcGx5fGVub3VnaHxnb25uYXxnb2luZ3x3dGZ8c298c3VjaHx3aWxsfHlvdXx5b3VyfGxpa2UpXFxiL1xuICB9O1xuICBobGpzLkNPTU1FTlQgPSBmdW5jdGlvbiAoYmVnaW4sIGVuZCwgaW5oZXJpdHMpIHtcbiAgICB2YXIgbW9kZSA9IGhsanMuaW5oZXJpdChcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnY29tbWVudCcsXG4gICAgICAgIGJlZ2luOiBiZWdpbiwgZW5kOiBlbmQsXG4gICAgICAgIGNvbnRhaW5zOiBbXVxuICAgICAgfSxcbiAgICAgIGluaGVyaXRzIHx8IHt9XG4gICAgKTtcbiAgICBtb2RlLmNvbnRhaW5zLnB1c2goaGxqcy5QSFJBU0FMX1dPUkRTX01PREUpO1xuICAgIG1vZGUuY29udGFpbnMucHVzaCh7XG4gICAgICBjbGFzc05hbWU6ICdkb2N0YWcnLFxuICAgICAgYmVnaW46IFwiKD86VE9ET3xGSVhNRXxOT1RFfEJVR3xYWFgpOlwiLFxuICAgICAgcmVsZXZhbmNlOiAwXG4gICAgfSk7XG4gICAgcmV0dXJuIG1vZGU7XG4gIH07XG4gIGhsanMuQ19MSU5FX0NPTU1FTlRfTU9ERSA9IGhsanMuQ09NTUVOVCgnLy8nLCAnJCcpO1xuICBobGpzLkNfQkxPQ0tfQ09NTUVOVF9NT0RFID0gaGxqcy5DT01NRU5UKCcvXFxcXConLCAnXFxcXCovJyk7XG4gIGhsanMuSEFTSF9DT01NRU5UX01PREUgPSBobGpzLkNPTU1FTlQoJyMnLCAnJCcpO1xuICBobGpzLk5VTUJFUl9NT0RFID0ge1xuICAgIGNsYXNzTmFtZTogJ251bWJlcicsXG4gICAgYmVnaW46IGhsanMuTlVNQkVSX1JFLFxuICAgIHJlbGV2YW5jZTogMFxuICB9O1xuICBobGpzLkNfTlVNQkVSX01PREUgPSB7XG4gICAgY2xhc3NOYW1lOiAnbnVtYmVyJyxcbiAgICBiZWdpbjogaGxqcy5DX05VTUJFUl9SRSxcbiAgICByZWxldmFuY2U6IDBcbiAgfTtcbiAgaGxqcy5CSU5BUllfTlVNQkVSX01PREUgPSB7XG4gICAgY2xhc3NOYW1lOiAnbnVtYmVyJyxcbiAgICBiZWdpbjogaGxqcy5CSU5BUllfTlVNQkVSX1JFLFxuICAgIHJlbGV2YW5jZTogMFxuICB9O1xuICBobGpzLkNTU19OVU1CRVJfTU9ERSA9IHtcbiAgICBjbGFzc05hbWU6ICdudW1iZXInLFxuICAgIGJlZ2luOiBobGpzLk5VTUJFUl9SRSArICcoJyArXG4gICAgICAnJXxlbXxleHxjaHxyZW0nICArXG4gICAgICAnfHZ3fHZofHZtaW58dm1heCcgK1xuICAgICAgJ3xjbXxtbXxpbnxwdHxwY3xweCcgK1xuICAgICAgJ3xkZWd8Z3JhZHxyYWR8dHVybicgK1xuICAgICAgJ3xzfG1zJyArXG4gICAgICAnfEh6fGtIeicgK1xuICAgICAgJ3xkcGl8ZHBjbXxkcHB4JyArXG4gICAgICAnKT8nLFxuICAgIHJlbGV2YW5jZTogMFxuICB9O1xuICBobGpzLlJFR0VYUF9NT0RFID0ge1xuICAgIGNsYXNzTmFtZTogJ3JlZ2V4cCcsXG4gICAgYmVnaW46IC9cXC8vLCBlbmQ6IC9cXC9bZ2ltdXldKi8sXG4gICAgaWxsZWdhbDogL1xcbi8sXG4gICAgY29udGFpbnM6IFtcbiAgICAgIGhsanMuQkFDS1NMQVNIX0VTQ0FQRSxcbiAgICAgIHtcbiAgICAgICAgYmVnaW46IC9cXFsvLCBlbmQ6IC9cXF0vLFxuICAgICAgICByZWxldmFuY2U6IDAsXG4gICAgICAgIGNvbnRhaW5zOiBbaGxqcy5CQUNLU0xBU0hfRVNDQVBFXVxuICAgICAgfVxuICAgIF1cbiAgfTtcbiAgaGxqcy5USVRMRV9NT0RFID0ge1xuICAgIGNsYXNzTmFtZTogJ3RpdGxlJyxcbiAgICBiZWdpbjogaGxqcy5JREVOVF9SRSxcbiAgICByZWxldmFuY2U6IDBcbiAgfTtcbiAgaGxqcy5VTkRFUlNDT1JFX1RJVExFX01PREUgPSB7XG4gICAgY2xhc3NOYW1lOiAndGl0bGUnLFxuICAgIGJlZ2luOiBobGpzLlVOREVSU0NPUkVfSURFTlRfUkUsXG4gICAgcmVsZXZhbmNlOiAwXG4gIH07XG5cbmhsanMucmVnaXN0ZXJMYW5ndWFnZSgnYmFzaCcsIGZ1bmN0aW9uKGhsanMpIHtcbiAgdmFyIFZBUiA9IHtcbiAgICBjbGFzc05hbWU6ICd2YXJpYWJsZScsXG4gICAgdmFyaWFudHM6IFtcbiAgICAgIHtiZWdpbjogL1xcJFtcXHdcXGQjQF1bXFx3XFxkX10qL30sXG4gICAgICB7YmVnaW46IC9cXCRcXHsoLio/KX0vfVxuICAgIF1cbiAgfTtcbiAgdmFyIFFVT1RFX1NUUklORyA9IHtcbiAgICBjbGFzc05hbWU6ICdzdHJpbmcnLFxuICAgIGJlZ2luOiAvXCIvLCBlbmQ6IC9cIi8sXG4gICAgY29udGFpbnM6IFtcbiAgICAgIGhsanMuQkFDS1NMQVNIX0VTQ0FQRSxcbiAgICAgIFZBUixcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAndmFyaWFibGUnLFxuICAgICAgICBiZWdpbjogL1xcJFxcKC8sIGVuZDogL1xcKS8sXG4gICAgICAgIGNvbnRhaW5zOiBbaGxqcy5CQUNLU0xBU0hfRVNDQVBFXVxuICAgICAgfVxuICAgIF1cbiAgfTtcbiAgdmFyIEFQT1NfU1RSSU5HID0ge1xuICAgIGNsYXNzTmFtZTogJ3N0cmluZycsXG4gICAgYmVnaW46IC8nLywgZW5kOiAvJy9cbiAgfTtcblxuICByZXR1cm4ge1xuICAgIGFsaWFzZXM6IFsnc2gnLCAnenNoJ10sXG4gICAgbGV4ZW1lczogLy0/W2EtelxcLl0rLyxcbiAgICBrZXl3b3Jkczoge1xuICAgICAga2V5d29yZDpcbiAgICAgICAgJ2lmIHRoZW4gZWxzZSBlbGlmIGZpIGZvciB3aGlsZSBpbiBkbyBkb25lIGNhc2UgZXNhYyBmdW5jdGlvbicsXG4gICAgICBsaXRlcmFsOlxuICAgICAgICAndHJ1ZSBmYWxzZScsXG4gICAgICBidWlsdF9pbjpcbiAgICAgICAgLy8gU2hlbGwgYnVpbHQtaW5zXG4gICAgICAgIC8vIGh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS9iYXNoL21hbnVhbC9odG1sX25vZGUvU2hlbGwtQnVpbHRpbi1Db21tYW5kcy5odG1sXG4gICAgICAgICdicmVhayBjZCBjb250aW51ZSBldmFsIGV4ZWMgZXhpdCBleHBvcnQgZ2V0b3B0cyBoYXNoIHB3ZCByZWFkb25seSByZXR1cm4gc2hpZnQgdGVzdCB0aW1lcyAnICtcbiAgICAgICAgJ3RyYXAgdW1hc2sgdW5zZXQgJyArXG4gICAgICAgIC8vIEJhc2ggYnVpbHQtaW5zXG4gICAgICAgICdhbGlhcyBiaW5kIGJ1aWx0aW4gY2FsbGVyIGNvbW1hbmQgZGVjbGFyZSBlY2hvIGVuYWJsZSBoZWxwIGxldCBsb2NhbCBsb2dvdXQgbWFwZmlsZSBwcmludGYgJyArXG4gICAgICAgICdyZWFkIHJlYWRhcnJheSBzb3VyY2UgdHlwZSB0eXBlc2V0IHVsaW1pdCB1bmFsaWFzICcgK1xuICAgICAgICAvLyBTaGVsbCBtb2RpZmllcnNcbiAgICAgICAgJ3NldCBzaG9wdCAnICtcbiAgICAgICAgLy8gWnNoIGJ1aWx0LWluc1xuICAgICAgICAnYXV0b2xvYWQgYmcgYmluZGtleSBieWUgY2FwIGNoZGlyIGNsb25lIGNvbXBhcmd1bWVudHMgY29tcGNhbGwgY29tcGN0bCBjb21wZGVzY3JpYmUgY29tcGZpbGVzICcgK1xuICAgICAgICAnY29tcGdyb3VwcyBjb21wcXVvdGUgY29tcHRhZ3MgY29tcHRyeSBjb21wdmFsdWVzIGRpcnMgZGlzYWJsZSBkaXNvd24gZWNob3RjIGVjaG90aSBlbXVsYXRlICcgK1xuICAgICAgICAnZmMgZmcgZmxvYXQgZnVuY3Rpb25zIGdldGNhcCBnZXRsbiBoaXN0b3J5IGludGVnZXIgam9icyBraWxsIGxpbWl0IGxvZyBub2dsb2IgcG9wZCBwcmludCAnICtcbiAgICAgICAgJ3B1c2hkIHB1c2hsbiByZWhhc2ggc2NoZWQgc2V0Y2FwIHNldG9wdCBzdGF0IHN1c3BlbmQgdHR5Y3RsIHVuZnVuY3Rpb24gdW5oYXNoIHVubGltaXQgJyArXG4gICAgICAgICd1bnNldG9wdCB2YXJlZCB3YWl0IHdoZW5jZSB3aGVyZSB3aGljaCB6Y29tcGlsZSB6Zm9ybWF0IHpmdHAgemxlIHptb2Rsb2FkIHpwYXJzZW9wdHMgenByb2YgJyArXG4gICAgICAgICd6cHR5IHpyZWdleHBhcnNlIHpzb2NrZXQgenN0eWxlIHp0Y3AnLFxuICAgICAgb3BlcmF0b3I6XG4gICAgICAgICctbmUgLWVxIC1sdCAtZ3QgLWYgLWQgLWUgLXMgLWwgLWEnIC8vIHJlbGV2YW5jZSBib29zdGVyXG4gICAgfSxcbiAgICBjb250YWluczogW1xuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdzaGViYW5nJyxcbiAgICAgICAgYmVnaW46IC9eIyFbXlxcbl0rc2hcXHMqJC8sXG4gICAgICAgIHJlbGV2YW5jZTogMTBcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ2Z1bmN0aW9uJyxcbiAgICAgICAgYmVnaW46IC9cXHdbXFx3XFxkX10qXFxzKlxcKFxccypcXClcXHMqXFx7LyxcbiAgICAgICAgcmV0dXJuQmVnaW46IHRydWUsXG4gICAgICAgIGNvbnRhaW5zOiBbaGxqcy5pbmhlcml0KGhsanMuVElUTEVfTU9ERSwge2JlZ2luOiAvXFx3W1xcd1xcZF9dKi99KV0sXG4gICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgfSxcbiAgICAgIGhsanMuSEFTSF9DT01NRU5UX01PREUsXG4gICAgICBobGpzLk5VTUJFUl9NT0RFLFxuICAgICAgUVVPVEVfU1RSSU5HLFxuICAgICAgQVBPU19TVFJJTkcsXG4gICAgICBWQVJcbiAgICBdXG4gIH07XG59KTtcblxuaGxqcy5yZWdpc3Rlckxhbmd1YWdlKCdjc3MnLCBmdW5jdGlvbihobGpzKSB7XG4gIHZhciBJREVOVF9SRSA9ICdbYS16QS1aLV1bYS16QS1aMC05Xy1dKic7XG4gIHZhciBGVU5DVElPTiA9IHtcbiAgICBjbGFzc05hbWU6ICdmdW5jdGlvbicsXG4gICAgYmVnaW46IElERU5UX1JFICsgJ1xcXFwoJyxcbiAgICByZXR1cm5CZWdpbjogdHJ1ZSxcbiAgICBleGNsdWRlRW5kOiB0cnVlLFxuICAgIGVuZDogJ1xcXFwoJ1xuICB9O1xuICB2YXIgUlVMRSA9IHtcbiAgICBjbGFzc05hbWU6ICdydWxlJyxcbiAgICBiZWdpbjogL1tBLVpcXF9cXC5cXC1dK1xccyo6LywgcmV0dXJuQmVnaW46IHRydWUsIGVuZDogJzsnLCBlbmRzV2l0aFBhcmVudDogdHJ1ZSxcbiAgICBjb250YWluczogW1xuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdhdHRyaWJ1dGUnLFxuICAgICAgICBiZWdpbjogL1xcUy8sIGVuZDogJzonLCBleGNsdWRlRW5kOiB0cnVlLFxuICAgICAgICBzdGFydHM6IHtcbiAgICAgICAgICBjbGFzc05hbWU6ICd2YWx1ZScsXG4gICAgICAgICAgZW5kc1dpdGhQYXJlbnQ6IHRydWUsIGV4Y2x1ZGVFbmQ6IHRydWUsXG4gICAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICAgIEZVTkNUSU9OLFxuICAgICAgICAgICAgaGxqcy5DU1NfTlVNQkVSX01PREUsXG4gICAgICAgICAgICBobGpzLlFVT1RFX1NUUklOR19NT0RFLFxuICAgICAgICAgICAgaGxqcy5BUE9TX1NUUklOR19NT0RFLFxuICAgICAgICAgICAgaGxqcy5DX0JMT0NLX0NPTU1FTlRfTU9ERSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgY2xhc3NOYW1lOiAnaGV4Y29sb3InLCBiZWdpbjogJyNbMC05QS1GYS1mXSsnXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBjbGFzc05hbWU6ICdpbXBvcnRhbnQnLCBiZWdpbjogJyFpbXBvcnRhbnQnXG4gICAgICAgICAgICB9XG4gICAgICAgICAgXVxuICAgICAgICB9XG4gICAgICB9XG4gICAgXVxuICB9O1xuXG4gIHJldHVybiB7XG4gICAgY2FzZV9pbnNlbnNpdGl2ZTogdHJ1ZSxcbiAgICBpbGxlZ2FsOiAvWz1cXC98J1xcJF0vLFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICBobGpzLkNfQkxPQ0tfQ09NTUVOVF9NT0RFLFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdpZCcsIGJlZ2luOiAvXFwjW0EtWmEtejAtOV8tXSsvXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdjbGFzcycsIGJlZ2luOiAvXFwuW0EtWmEtejAtOV8tXSsvXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdhdHRyX3NlbGVjdG9yJyxcbiAgICAgICAgYmVnaW46IC9cXFsvLCBlbmQ6IC9cXF0vLFxuICAgICAgICBpbGxlZ2FsOiAnJCdcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ3BzZXVkbycsXG4gICAgICAgIGJlZ2luOiAvOig6KT9bYS16QS1aMC05XFxfXFwtXFwrXFwoXFwpXCInXSsvXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdhdF9ydWxlJyxcbiAgICAgICAgYmVnaW46ICdAKGZvbnQtZmFjZXxwYWdlKScsXG4gICAgICAgIGxleGVtZXM6ICdbYS16LV0rJyxcbiAgICAgICAga2V5d29yZHM6ICdmb250LWZhY2UgcGFnZSdcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ2F0X3J1bGUnLFxuICAgICAgICBiZWdpbjogJ0AnLCBlbmQ6ICdbeztdJywgLy8gYXRfcnVsZSBlYXRpbmcgZmlyc3QgXCJ7XCIgaXMgYSBnb29kIHRoaW5nXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBiZWNhdXNlIGl0IGRvZXNu4oCZdCBsZXQgaXQgdG8gYmUgcGFyc2VkIGFzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBhIHJ1bGUgc2V0IGJ1dCBpbnN0ZWFkIGRyb3BzIHBhcnNlciBpbnRvXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB0aGUgZGVmYXVsdCBtb2RlIHdoaWNoIGlzIGhvdyBpdCBzaG91bGQgYmUuXG4gICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgY2xhc3NOYW1lOiAna2V5d29yZCcsXG4gICAgICAgICAgICBiZWdpbjogL1xcUysvXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBiZWdpbjogL1xccy8sIGVuZHNXaXRoUGFyZW50OiB0cnVlLCBleGNsdWRlRW5kOiB0cnVlLFxuICAgICAgICAgICAgcmVsZXZhbmNlOiAwLFxuICAgICAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICAgICAgRlVOQ1RJT04sXG4gICAgICAgICAgICAgIGhsanMuQVBPU19TVFJJTkdfTU9ERSwgaGxqcy5RVU9URV9TVFJJTkdfTU9ERSxcbiAgICAgICAgICAgICAgaGxqcy5DU1NfTlVNQkVSX01PREVcbiAgICAgICAgICAgIF1cbiAgICAgICAgICB9XG4gICAgICAgIF1cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ3RhZycsIGJlZ2luOiBJREVOVF9SRSxcbiAgICAgICAgcmVsZXZhbmNlOiAwXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdydWxlcycsXG4gICAgICAgIGJlZ2luOiAneycsIGVuZDogJ30nLFxuICAgICAgICBpbGxlZ2FsOiAvXFxTLyxcbiAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICBobGpzLkNfQkxPQ0tfQ09NTUVOVF9NT0RFLFxuICAgICAgICAgIFJVTEUsXG4gICAgICAgIF1cbiAgICAgIH1cbiAgICBdXG4gIH07XG59KTtcblxuaGxqcy5yZWdpc3Rlckxhbmd1YWdlKCdqYXZhc2NyaXB0JywgZnVuY3Rpb24oaGxqcykge1xuICByZXR1cm4ge1xuICAgIGFsaWFzZXM6IFsnanMnXSxcbiAgICBrZXl3b3Jkczoge1xuICAgICAga2V5d29yZDpcbiAgICAgICAgJ2luIG9mIGlmIGZvciB3aGlsZSBmaW5hbGx5IHZhciBuZXcgZnVuY3Rpb24gZG8gcmV0dXJuIHZvaWQgZWxzZSBicmVhayBjYXRjaCAnICtcbiAgICAgICAgJ2luc3RhbmNlb2Ygd2l0aCB0aHJvdyBjYXNlIGRlZmF1bHQgdHJ5IHRoaXMgc3dpdGNoIGNvbnRpbnVlIHR5cGVvZiBkZWxldGUgJyArXG4gICAgICAgICdsZXQgeWllbGQgY29uc3QgZXhwb3J0IHN1cGVyIGRlYnVnZ2VyIGFzIGFzeW5jIGF3YWl0JyxcbiAgICAgIGxpdGVyYWw6XG4gICAgICAgICd0cnVlIGZhbHNlIG51bGwgdW5kZWZpbmVkIE5hTiBJbmZpbml0eScsXG4gICAgICBidWlsdF9pbjpcbiAgICAgICAgJ2V2YWwgaXNGaW5pdGUgaXNOYU4gcGFyc2VGbG9hdCBwYXJzZUludCBkZWNvZGVVUkkgZGVjb2RlVVJJQ29tcG9uZW50ICcgK1xuICAgICAgICAnZW5jb2RlVVJJIGVuY29kZVVSSUNvbXBvbmVudCBlc2NhcGUgdW5lc2NhcGUgT2JqZWN0IEZ1bmN0aW9uIEJvb2xlYW4gRXJyb3IgJyArXG4gICAgICAgICdFdmFsRXJyb3IgSW50ZXJuYWxFcnJvciBSYW5nZUVycm9yIFJlZmVyZW5jZUVycm9yIFN0b3BJdGVyYXRpb24gU3ludGF4RXJyb3IgJyArXG4gICAgICAgICdUeXBlRXJyb3IgVVJJRXJyb3IgTnVtYmVyIE1hdGggRGF0ZSBTdHJpbmcgUmVnRXhwIEFycmF5IEZsb2F0MzJBcnJheSAnICtcbiAgICAgICAgJ0Zsb2F0NjRBcnJheSBJbnQxNkFycmF5IEludDMyQXJyYXkgSW50OEFycmF5IFVpbnQxNkFycmF5IFVpbnQzMkFycmF5ICcgK1xuICAgICAgICAnVWludDhBcnJheSBVaW50OENsYW1wZWRBcnJheSBBcnJheUJ1ZmZlciBEYXRhVmlldyBKU09OIEludGwgYXJndW1lbnRzIHJlcXVpcmUgJyArXG4gICAgICAgICdtb2R1bGUgY29uc29sZSB3aW5kb3cgZG9jdW1lbnQgU3ltYm9sIFNldCBNYXAgV2Vha1NldCBXZWFrTWFwIFByb3h5IFJlZmxlY3QgJyArXG4gICAgICAgICdQcm9taXNlJ1xuICAgIH0sXG4gICAgY29udGFpbnM6IFtcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAncGknLFxuICAgICAgICByZWxldmFuY2U6IDEwLFxuICAgICAgICBiZWdpbjogL15cXHMqWydcIl11c2UgKHN0cmljdHxhc20pWydcIl0vXG4gICAgICB9LFxuICAgICAgaGxqcy5BUE9TX1NUUklOR19NT0RFLFxuICAgICAgaGxqcy5RVU9URV9TVFJJTkdfTU9ERSxcbiAgICAgIHsgLy8gdGVtcGxhdGUgc3RyaW5nXG4gICAgICAgIGNsYXNzTmFtZTogJ3N0cmluZycsXG4gICAgICAgIGJlZ2luOiAnYCcsIGVuZDogJ2AnLFxuICAgICAgICBjb250YWluczogW1xuICAgICAgICAgIGhsanMuQkFDS1NMQVNIX0VTQ0FQRSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjbGFzc05hbWU6ICdzdWJzdCcsXG4gICAgICAgICAgICBiZWdpbjogJ1xcXFwkXFxcXHsnLCBlbmQ6ICdcXFxcfSdcbiAgICAgICAgICB9XG4gICAgICAgIF1cbiAgICAgIH0sXG4gICAgICBobGpzLkNfTElORV9DT01NRU5UX01PREUsXG4gICAgICBobGpzLkNfQkxPQ0tfQ09NTUVOVF9NT0RFLFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdudW1iZXInLFxuICAgICAgICB2YXJpYW50czogW1xuICAgICAgICAgIHsgYmVnaW46ICdcXFxcYigwW2JCXVswMV0rKScgfSxcbiAgICAgICAgICB7IGJlZ2luOiAnXFxcXGIoMFtvT11bMC03XSspJyB9LFxuICAgICAgICAgIHsgYmVnaW46IGhsanMuQ19OVU1CRVJfUkUgfVxuICAgICAgICBdLFxuICAgICAgICByZWxldmFuY2U6IDBcbiAgICAgIH0sXG4gICAgICB7IC8vIFwidmFsdWVcIiBjb250YWluZXJcbiAgICAgICAgYmVnaW46ICcoJyArIGhsanMuUkVfU1RBUlRFUlNfUkUgKyAnfFxcXFxiKGNhc2V8cmV0dXJufHRocm93KVxcXFxiKVxcXFxzKicsXG4gICAgICAgIGtleXdvcmRzOiAncmV0dXJuIHRocm93IGNhc2UnLFxuICAgICAgICBjb250YWluczogW1xuICAgICAgICAgIGhsanMuQ19MSU5FX0NPTU1FTlRfTU9ERSxcbiAgICAgICAgICBobGpzLkNfQkxPQ0tfQ09NTUVOVF9NT0RFLFxuICAgICAgICAgIGhsanMuUkVHRVhQX01PREUsXG4gICAgICAgICAgeyAvLyBFNFggLyBKU1hcbiAgICAgICAgICAgIGJlZ2luOiAvPC8sIGVuZDogLz5cXHMqWyk7XFxdXS8sXG4gICAgICAgICAgICByZWxldmFuY2U6IDAsXG4gICAgICAgICAgICBzdWJMYW5ndWFnZTogJ3htbCdcbiAgICAgICAgICB9XG4gICAgICAgIF0sXG4gICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnZnVuY3Rpb24nLFxuICAgICAgICBiZWdpbktleXdvcmRzOiAnZnVuY3Rpb24nLCBlbmQ6IC9cXHsvLCBleGNsdWRlRW5kOiB0cnVlLFxuICAgICAgICBjb250YWluczogW1xuICAgICAgICAgIGhsanMuaW5oZXJpdChobGpzLlRJVExFX01PREUsIHtiZWdpbjogL1tBLVphLXokX11bMC05QS1aYS16JF9dKi99KSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjbGFzc05hbWU6ICdwYXJhbXMnLFxuICAgICAgICAgICAgYmVnaW46IC9cXCgvLCBlbmQ6IC9cXCkvLFxuICAgICAgICAgICAgZXhjbHVkZUJlZ2luOiB0cnVlLFxuICAgICAgICAgICAgZXhjbHVkZUVuZDogdHJ1ZSxcbiAgICAgICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAgICAgIGhsanMuQ19MSU5FX0NPTU1FTlRfTU9ERSxcbiAgICAgICAgICAgICAgaGxqcy5DX0JMT0NLX0NPTU1FTlRfTU9ERVxuICAgICAgICAgICAgXVxuICAgICAgICAgIH1cbiAgICAgICAgXSxcbiAgICAgICAgaWxsZWdhbDogL1xcW3wlL1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgYmVnaW46IC9cXCRbKC5dLyAvLyByZWxldmFuY2UgYm9vc3RlciBmb3IgYSBwYXR0ZXJuIGNvbW1vbiB0byBKUyBsaWJzOiBgJChzb21ldGhpbmcpYCBhbmQgYCQuc29tZXRoaW5nYFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgYmVnaW46ICdcXFxcLicgKyBobGpzLklERU5UX1JFLCByZWxldmFuY2U6IDAgLy8gaGFjazogcHJldmVudHMgZGV0ZWN0aW9uIG9mIGtleXdvcmRzIGFmdGVyIGRvdHNcbiAgICAgIH0sXG4gICAgICAvLyBFQ01BU2NyaXB0IDYgbW9kdWxlcyBpbXBvcnRcbiAgICAgIHtcbiAgICAgICAgYmVnaW5LZXl3b3JkczogJ2ltcG9ydCcsIGVuZDogJ1s7JF0nLFxuICAgICAgICBrZXl3b3JkczogJ2ltcG9ydCBmcm9tIGFzJyxcbiAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICBobGpzLkFQT1NfU1RSSU5HX01PREUsXG4gICAgICAgICAgaGxqcy5RVU9URV9TVFJJTkdfTU9ERVxuICAgICAgICBdXG4gICAgICB9LFxuICAgICAgeyAvLyBFUzYgY2xhc3NcbiAgICAgICAgY2xhc3NOYW1lOiAnY2xhc3MnLFxuICAgICAgICBiZWdpbktleXdvcmRzOiAnY2xhc3MnLCBlbmQ6IC9bezs9XS8sIGV4Y2x1ZGVFbmQ6IHRydWUsXG4gICAgICAgIGlsbGVnYWw6IC9bOlwiXFxbXFxdXS8sXG4gICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAge2JlZ2luS2V5d29yZHM6ICdleHRlbmRzJ30sXG4gICAgICAgICAgaGxqcy5VTkRFUlNDT1JFX1RJVExFX01PREVcbiAgICAgICAgXVxuICAgICAgfVxuICAgIF0sXG4gICAgaWxsZWdhbDogLyMvXG4gIH07XG59KTtcblxuaGxqcy5yZWdpc3Rlckxhbmd1YWdlKCdzY3NzJywgZnVuY3Rpb24oaGxqcykge1xuICB2YXIgSURFTlRfUkUgPSAnW2EtekEtWi1dW2EtekEtWjAtOV8tXSonO1xuICB2YXIgVkFSSUFCTEUgPSB7XG4gICAgY2xhc3NOYW1lOiAndmFyaWFibGUnLFxuICAgIGJlZ2luOiAnKFxcXFwkJyArIElERU5UX1JFICsgJylcXFxcYidcbiAgfTtcbiAgdmFyIEZVTkNUSU9OID0ge1xuICAgIGNsYXNzTmFtZTogJ2Z1bmN0aW9uJyxcbiAgICBiZWdpbjogSURFTlRfUkUgKyAnXFxcXCgnLFxuICAgIHJldHVybkJlZ2luOiB0cnVlLFxuICAgIGV4Y2x1ZGVFbmQ6IHRydWUsXG4gICAgZW5kOiAnXFxcXCgnXG4gIH07XG4gIHZhciBIRVhDT0xPUiA9IHtcbiAgICBjbGFzc05hbWU6ICdoZXhjb2xvcicsIGJlZ2luOiAnI1swLTlBLUZhLWZdKydcbiAgfTtcbiAgdmFyIERFRl9JTlRFUk5BTFMgPSB7XG4gICAgY2xhc3NOYW1lOiAnYXR0cmlidXRlJyxcbiAgICBiZWdpbjogJ1tBLVpcXFxcX1xcXFwuXFxcXC1dKycsIGVuZDogJzonLFxuICAgIGV4Y2x1ZGVFbmQ6IHRydWUsXG4gICAgaWxsZWdhbDogJ1teXFxcXHNdJyxcbiAgICBzdGFydHM6IHtcbiAgICAgIGNsYXNzTmFtZTogJ3ZhbHVlJyxcbiAgICAgIGVuZHNXaXRoUGFyZW50OiB0cnVlLCBleGNsdWRlRW5kOiB0cnVlLFxuICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgRlVOQ1RJT04sXG4gICAgICAgIEhFWENPTE9SLFxuICAgICAgICBobGpzLkNTU19OVU1CRVJfTU9ERSxcbiAgICAgICAgaGxqcy5RVU9URV9TVFJJTkdfTU9ERSxcbiAgICAgICAgaGxqcy5BUE9TX1NUUklOR19NT0RFLFxuICAgICAgICBobGpzLkNfQkxPQ0tfQ09NTUVOVF9NT0RFLFxuICAgICAgICB7XG4gICAgICAgICAgY2xhc3NOYW1lOiAnaW1wb3J0YW50JywgYmVnaW46ICchaW1wb3J0YW50J1xuICAgICAgICB9XG4gICAgICBdXG4gICAgfVxuICB9O1xuICByZXR1cm4ge1xuICAgIGNhc2VfaW5zZW5zaXRpdmU6IHRydWUsXG4gICAgaWxsZWdhbDogJ1s9L3xcXCddJyxcbiAgICBjb250YWluczogW1xuICAgICAgaGxqcy5DX0xJTkVfQ09NTUVOVF9NT0RFLFxuICAgICAgaGxqcy5DX0JMT0NLX0NPTU1FTlRfTU9ERSxcbiAgICAgIEZVTkNUSU9OLFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdpZCcsIGJlZ2luOiAnXFxcXCNbQS1aYS16MC05Xy1dKycsXG4gICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnY2xhc3MnLCBiZWdpbjogJ1xcXFwuW0EtWmEtejAtOV8tXSsnLFxuICAgICAgICByZWxldmFuY2U6IDBcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ2F0dHJfc2VsZWN0b3InLFxuICAgICAgICBiZWdpbjogJ1xcXFxbJywgZW5kOiAnXFxcXF0nLFxuICAgICAgICBpbGxlZ2FsOiAnJCdcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ3RhZycsIC8vIGJlZ2luOiBJREVOVF9SRSwgZW5kOiAnWyx8XFxcXHNdJ1xuICAgICAgICBiZWdpbjogJ1xcXFxiKGF8YWJicnxhY3JvbnltfGFkZHJlc3N8YXJlYXxhcnRpY2xlfGFzaWRlfGF1ZGlvfGJ8YmFzZXxiaWd8YmxvY2txdW90ZXxib2R5fGJyfGJ1dHRvbnxjYW52YXN8Y2FwdGlvbnxjaXRlfGNvZGV8Y29sfGNvbGdyb3VwfGNvbW1hbmR8ZGF0YWxpc3R8ZGR8ZGVsfGRldGFpbHN8ZGZufGRpdnxkbHxkdHxlbXxlbWJlZHxmaWVsZHNldHxmaWdjYXB0aW9ufGZpZ3VyZXxmb290ZXJ8Zm9ybXxmcmFtZXxmcmFtZXNldHwoaFsxLTZdKXxoZWFkfGhlYWRlcnxoZ3JvdXB8aHJ8aHRtbHxpfGlmcmFtZXxpbWd8aW5wdXR8aW5zfGtiZHxrZXlnZW58bGFiZWx8bGVnZW5kfGxpfGxpbmt8bWFwfG1hcmt8bWV0YXxtZXRlcnxuYXZ8bm9mcmFtZXN8bm9zY3JpcHR8b2JqZWN0fG9sfG9wdGdyb3VwfG9wdGlvbnxvdXRwdXR8cHxwYXJhbXxwcmV8cHJvZ3Jlc3N8cXxycHxydHxydWJ5fHNhbXB8c2NyaXB0fHNlY3Rpb258c2VsZWN0fHNtYWxsfHNwYW58c3RyaWtlfHN0cm9uZ3xzdHlsZXxzdWJ8c3VwfHRhYmxlfHRib2R5fHRkfHRleHRhcmVhfHRmb290fHRofHRoZWFkfHRpbWV8dGl0bGV8dHJ8dHR8dWx8dmFyfHZpZGVvKVxcXFxiJyxcbiAgICAgICAgcmVsZXZhbmNlOiAwXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdwc2V1ZG8nLFxuICAgICAgICBiZWdpbjogJzoodmlzaXRlZHx2YWxpZHxyb290fHJpZ2h0fHJlcXVpcmVkfHJlYWQtd3JpdGV8cmVhZC1vbmx5fG91dC1yYW5nZXxvcHRpb25hbHxvbmx5LW9mLXR5cGV8b25seS1jaGlsZHxudGgtb2YtdHlwZXxudGgtbGFzdC1vZi10eXBlfG50aC1sYXN0LWNoaWxkfG50aC1jaGlsZHxub3R8bGlua3xsZWZ0fGxhc3Qtb2YtdHlwZXxsYXN0LWNoaWxkfGxhbmd8aW52YWxpZHxpbmRldGVybWluYXRlfGluLXJhbmdlfGhvdmVyfGZvY3VzfGZpcnN0LW9mLXR5cGV8Zmlyc3QtbGluZXxmaXJzdC1sZXR0ZXJ8Zmlyc3QtY2hpbGR8Zmlyc3R8ZW5hYmxlZHxlbXB0eXxkaXNhYmxlZHxkZWZhdWx0fGNoZWNrZWR8YmVmb3JlfGFmdGVyfGFjdGl2ZSknXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdwc2V1ZG8nLFxuICAgICAgICBiZWdpbjogJzo6KGFmdGVyfGJlZm9yZXxjaG9pY2VzfGZpcnN0LWxldHRlcnxmaXJzdC1saW5lfHJlcGVhdC1pbmRleHxyZXBlYXQtaXRlbXxzZWxlY3Rpb258dmFsdWUpJ1xuICAgICAgfSxcbiAgICAgIFZBUklBQkxFLFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdhdHRyaWJ1dGUnLFxuICAgICAgICBiZWdpbjogJ1xcXFxiKHotaW5kZXh8d29yZC13cmFwfHdvcmQtc3BhY2luZ3x3b3JkLWJyZWFrfHdpZHRofHdpZG93c3x3aGl0ZS1zcGFjZXx2aXNpYmlsaXR5fHZlcnRpY2FsLWFsaWdufHVuaWNvZGUtYmlkaXx0cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbnx0cmFuc2l0aW9uLXByb3BlcnR5fHRyYW5zaXRpb24tZHVyYXRpb258dHJhbnNpdGlvbi1kZWxheXx0cmFuc2l0aW9ufHRyYW5zZm9ybS1zdHlsZXx0cmFuc2Zvcm0tb3JpZ2lufHRyYW5zZm9ybXx0b3B8dGV4dC11bmRlcmxpbmUtcG9zaXRpb258dGV4dC10cmFuc2Zvcm18dGV4dC1zaGFkb3d8dGV4dC1yZW5kZXJpbmd8dGV4dC1vdmVyZmxvd3x0ZXh0LWluZGVudHx0ZXh0LWRlY29yYXRpb24tc3R5bGV8dGV4dC1kZWNvcmF0aW9uLWxpbmV8dGV4dC1kZWNvcmF0aW9uLWNvbG9yfHRleHQtZGVjb3JhdGlvbnx0ZXh0LWFsaWduLWxhc3R8dGV4dC1hbGlnbnx0YWItc2l6ZXx0YWJsZS1sYXlvdXR8cmlnaHR8cmVzaXplfHF1b3Rlc3xwb3NpdGlvbnxwb2ludGVyLWV2ZW50c3xwZXJzcGVjdGl2ZS1vcmlnaW58cGVyc3BlY3RpdmV8cGFnZS1icmVhay1pbnNpZGV8cGFnZS1icmVhay1iZWZvcmV8cGFnZS1icmVhay1hZnRlcnxwYWRkaW5nLXRvcHxwYWRkaW5nLXJpZ2h0fHBhZGRpbmctbGVmdHxwYWRkaW5nLWJvdHRvbXxwYWRkaW5nfG92ZXJmbG93LXl8b3ZlcmZsb3cteHxvdmVyZmxvdy13cmFwfG92ZXJmbG93fG91dGxpbmUtd2lkdGh8b3V0bGluZS1zdHlsZXxvdXRsaW5lLW9mZnNldHxvdXRsaW5lLWNvbG9yfG91dGxpbmV8b3JwaGFuc3xvcmRlcnxvcGFjaXR5fG9iamVjdC1wb3NpdGlvbnxvYmplY3QtZml0fG5vcm1hbHxub25lfG5hdi11cHxuYXYtcmlnaHR8bmF2LWxlZnR8bmF2LWluZGV4fG5hdi1kb3dufG1pbi13aWR0aHxtaW4taGVpZ2h0fG1heC13aWR0aHxtYXgtaGVpZ2h0fG1hc2t8bWFya3N8bWFyZ2luLXRvcHxtYXJnaW4tcmlnaHR8bWFyZ2luLWxlZnR8bWFyZ2luLWJvdHRvbXxtYXJnaW58bGlzdC1zdHlsZS10eXBlfGxpc3Qtc3R5bGUtcG9zaXRpb258bGlzdC1zdHlsZS1pbWFnZXxsaXN0LXN0eWxlfGxpbmUtaGVpZ2h0fGxldHRlci1zcGFjaW5nfGxlZnR8anVzdGlmeS1jb250ZW50fGluaXRpYWx8aW5oZXJpdHxpbWUtbW9kZXxpbWFnZS1vcmllbnRhdGlvbnxpbWFnZS1yZXNvbHV0aW9ufGltYWdlLXJlbmRlcmluZ3xpY29ufGh5cGhlbnN8aGVpZ2h0fGZvbnQtd2VpZ2h0fGZvbnQtdmFyaWFudC1saWdhdHVyZXN8Zm9udC12YXJpYW50fGZvbnQtc3R5bGV8Zm9udC1zdHJldGNofGZvbnQtc2l6ZS1hZGp1c3R8Zm9udC1zaXplfGZvbnQtbGFuZ3VhZ2Utb3ZlcnJpZGV8Zm9udC1rZXJuaW5nfGZvbnQtZmVhdHVyZS1zZXR0aW5nc3xmb250LWZhbWlseXxmb250fGZsb2F0fGZsZXgtd3JhcHxmbGV4LXNocmlua3xmbGV4LWdyb3d8ZmxleC1mbG93fGZsZXgtZGlyZWN0aW9ufGZsZXgtYmFzaXN8ZmxleHxmaWx0ZXJ8ZW1wdHktY2VsbHN8ZGlzcGxheXxkaXJlY3Rpb258Y3Vyc29yfGNvdW50ZXItcmVzZXR8Y291bnRlci1pbmNyZW1lbnR8Y29udGVudHxjb2x1bW4td2lkdGh8Y29sdW1uLXNwYW58Y29sdW1uLXJ1bGUtd2lkdGh8Y29sdW1uLXJ1bGUtc3R5bGV8Y29sdW1uLXJ1bGUtY29sb3J8Y29sdW1uLXJ1bGV8Y29sdW1uLWdhcHxjb2x1bW4tZmlsbHxjb2x1bW4tY291bnR8Y29sdW1uc3xjb2xvcnxjbGlwLXBhdGh8Y2xpcHxjbGVhcnxjYXB0aW9uLXNpZGV8YnJlYWstaW5zaWRlfGJyZWFrLWJlZm9yZXxicmVhay1hZnRlcnxib3gtc2l6aW5nfGJveC1zaGFkb3d8Ym94LWRlY29yYXRpb24tYnJlYWt8Ym90dG9tfGJvcmRlci13aWR0aHxib3JkZXItdG9wLXdpZHRofGJvcmRlci10b3Atc3R5bGV8Ym9yZGVyLXRvcC1yaWdodC1yYWRpdXN8Ym9yZGVyLXRvcC1sZWZ0LXJhZGl1c3xib3JkZXItdG9wLWNvbG9yfGJvcmRlci10b3B8Ym9yZGVyLXN0eWxlfGJvcmRlci1zcGFjaW5nfGJvcmRlci1yaWdodC13aWR0aHxib3JkZXItcmlnaHQtc3R5bGV8Ym9yZGVyLXJpZ2h0LWNvbG9yfGJvcmRlci1yaWdodHxib3JkZXItcmFkaXVzfGJvcmRlci1sZWZ0LXdpZHRofGJvcmRlci1sZWZ0LXN0eWxlfGJvcmRlci1sZWZ0LWNvbG9yfGJvcmRlci1sZWZ0fGJvcmRlci1pbWFnZS13aWR0aHxib3JkZXItaW1hZ2Utc291cmNlfGJvcmRlci1pbWFnZS1zbGljZXxib3JkZXItaW1hZ2UtcmVwZWF0fGJvcmRlci1pbWFnZS1vdXRzZXR8Ym9yZGVyLWltYWdlfGJvcmRlci1jb2xvcnxib3JkZXItY29sbGFwc2V8Ym9yZGVyLWJvdHRvbS13aWR0aHxib3JkZXItYm90dG9tLXN0eWxlfGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzfGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXN8Ym9yZGVyLWJvdHRvbS1jb2xvcnxib3JkZXItYm90dG9tfGJvcmRlcnxiYWNrZ3JvdW5kLXNpemV8YmFja2dyb3VuZC1yZXBlYXR8YmFja2dyb3VuZC1wb3NpdGlvbnxiYWNrZ3JvdW5kLW9yaWdpbnxiYWNrZ3JvdW5kLWltYWdlfGJhY2tncm91bmQtY29sb3J8YmFja2dyb3VuZC1jbGlwfGJhY2tncm91bmQtYXR0YWNobWVudHxiYWNrZ3JvdW5kLWJsZW5kLW1vZGV8YmFja2dyb3VuZHxiYWNrZmFjZS12aXNpYmlsaXR5fGF1dG98YW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbnxhbmltYXRpb24tcGxheS1zdGF0ZXxhbmltYXRpb24tbmFtZXxhbmltYXRpb24taXRlcmF0aW9uLWNvdW50fGFuaW1hdGlvbi1maWxsLW1vZGV8YW5pbWF0aW9uLWR1cmF0aW9ufGFuaW1hdGlvbi1kaXJlY3Rpb258YW5pbWF0aW9uLWRlbGF5fGFuaW1hdGlvbnxhbGlnbi1zZWxmfGFsaWduLWl0ZW1zfGFsaWduLWNvbnRlbnQpXFxcXGInLFxuICAgICAgICBpbGxlZ2FsOiAnW15cXFxcc10nXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICd2YWx1ZScsXG4gICAgICAgIGJlZ2luOiAnXFxcXGIod2hpdGVzcGFjZXx3YWl0fHctcmVzaXplfHZpc2libGV8dmVydGljYWwtdGV4dHx2ZXJ0aWNhbC1pZGVvZ3JhcGhpY3x1cHBlcmNhc2V8dXBwZXItcm9tYW58dXBwZXItYWxwaGF8dW5kZXJsaW5lfHRyYW5zcGFyZW50fHRvcHx0aGlufHRoaWNrfHRleHR8dGV4dC10b3B8dGV4dC1ib3R0b218dGItcmx8dGFibGUtaGVhZGVyLWdyb3VwfHRhYmxlLWZvb3Rlci1ncm91cHxzdy1yZXNpemV8c3VwZXJ8c3RyaWN0fHN0YXRpY3xzcXVhcmV8c29saWR8c21hbGwtY2Fwc3xzZXBhcmF0ZXxzZS1yZXNpemV8c2Nyb2xsfHMtcmVzaXplfHJ0bHxyb3ctcmVzaXplfHJpZGdlfHJpZ2h0fHJlcGVhdHxyZXBlYXQteXxyZXBlYXQteHxyZWxhdGl2ZXxwcm9ncmVzc3xwb2ludGVyfG92ZXJsaW5lfG91dHNpZGV8b3V0c2V0fG9ibGlxdWV8bm93cmFwfG5vdC1hbGxvd2VkfG5vcm1hbHxub25lfG53LXJlc2l6ZXxuby1yZXBlYXR8bm8tZHJvcHxuZXdzcGFwZXJ8bmUtcmVzaXplfG4tcmVzaXplfG1vdmV8bWlkZGxlfG1lZGl1bXxsdHJ8bHItdGJ8bG93ZXJjYXNlfGxvd2VyLXJvbWFufGxvd2VyLWFscGhhfGxvb3NlfGxpc3QtaXRlbXxsaW5lfGxpbmUtdGhyb3VnaHxsaW5lLWVkZ2V8bGlnaHRlcnxsZWZ0fGtlZXAtYWxsfGp1c3RpZnl8aXRhbGljfGludGVyLXdvcmR8aW50ZXItaWRlb2dyYXBofGluc2lkZXxpbnNldHxpbmxpbmV8aW5saW5lLWJsb2NrfGluaGVyaXR8aW5hY3RpdmV8aWRlb2dyYXBoLXNwYWNlfGlkZW9ncmFwaC1wYXJlbnRoZXNpc3xpZGVvZ3JhcGgtbnVtZXJpY3xpZGVvZ3JhcGgtYWxwaGF8aG9yaXpvbnRhbHxoaWRkZW58aGVscHxoYW5kfGdyb292ZXxmaXhlZHxlbGxpcHNpc3xlLXJlc2l6ZXxkb3VibGV8ZG90dGVkfGRpc3RyaWJ1dGV8ZGlzdHJpYnV0ZS1zcGFjZXxkaXN0cmlidXRlLWxldHRlcnxkaXN0cmlidXRlLWFsbC1saW5lc3xkaXNjfGRpc2FibGVkfGRlZmF1bHR8ZGVjaW1hbHxkYXNoZWR8Y3Jvc3NoYWlyfGNvbGxhcHNlfGNvbC1yZXNpemV8Y2lyY2xlfGNoYXJ8Y2VudGVyfGNhcGl0YWxpemV8YnJlYWstd29yZHxicmVhay1hbGx8Ym90dG9tfGJvdGh8Ym9sZGVyfGJvbGR8YmxvY2t8YmlkaS1vdmVycmlkZXxiZWxvd3xiYXNlbGluZXxhdXRvfGFsd2F5c3xhbGwtc2Nyb2xsfGFic29sdXRlfHRhYmxlfHRhYmxlLWNlbGwpXFxcXGInXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICd2YWx1ZScsXG4gICAgICAgIGJlZ2luOiAnOicsIGVuZDogJzsnLFxuICAgICAgICBjb250YWluczogW1xuICAgICAgICAgIEZVTkNUSU9OLFxuICAgICAgICAgIFZBUklBQkxFLFxuICAgICAgICAgIEhFWENPTE9SLFxuICAgICAgICAgIGhsanMuQ1NTX05VTUJFUl9NT0RFLFxuICAgICAgICAgIGhsanMuUVVPVEVfU1RSSU5HX01PREUsXG4gICAgICAgICAgaGxqcy5BUE9TX1NUUklOR19NT0RFLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNsYXNzTmFtZTogJ2ltcG9ydGFudCcsIGJlZ2luOiAnIWltcG9ydGFudCdcbiAgICAgICAgICB9XG4gICAgICAgIF1cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ2F0X3J1bGUnLFxuICAgICAgICBiZWdpbjogJ0AnLCBlbmQ6ICdbeztdJyxcbiAgICAgICAga2V5d29yZHM6ICdtaXhpbiBpbmNsdWRlIGV4dGVuZCBmb3IgaWYgZWxzZSBlYWNoIHdoaWxlIGNoYXJzZXQgaW1wb3J0IGRlYnVnIG1lZGlhIHBhZ2UgY29udGVudCBmb250LWZhY2UgbmFtZXNwYWNlIHdhcm4nLFxuICAgICAgICBjb250YWluczogW1xuICAgICAgICAgIEZVTkNUSU9OLFxuICAgICAgICAgIFZBUklBQkxFLFxuICAgICAgICAgIGhsanMuUVVPVEVfU1RSSU5HX01PREUsXG4gICAgICAgICAgaGxqcy5BUE9TX1NUUklOR19NT0RFLFxuICAgICAgICAgIEhFWENPTE9SLFxuICAgICAgICAgIGhsanMuQ1NTX05VTUJFUl9NT0RFLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNsYXNzTmFtZTogJ3ByZXByb2Nlc3NvcicsXG4gICAgICAgICAgICBiZWdpbjogJ1xcXFxzW0EtWmEtejAtOV8uLV0rJyxcbiAgICAgICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgICAgIH1cbiAgICAgICAgXVxuICAgICAgfVxuICAgIF1cbiAgfTtcbn0pO1xuXG5obGpzLnJlZ2lzdGVyTGFuZ3VhZ2UoJ3R5cGVzY3JpcHQnLCBmdW5jdGlvbihobGpzKSB7XG4gIHZhciBLRVlXT1JEUyA9IHtcbiAgICBrZXl3b3JkOlxuICAgICAgJ2luIGlmIGZvciB3aGlsZSBmaW5hbGx5IHZhciBuZXcgZnVuY3Rpb258MCBkbyByZXR1cm4gdm9pZCBlbHNlIGJyZWFrIGNhdGNoICcgK1xuICAgICAgJ2luc3RhbmNlb2Ygd2l0aCB0aHJvdyBjYXNlIGRlZmF1bHQgdHJ5IHRoaXMgc3dpdGNoIGNvbnRpbnVlIHR5cGVvZiBkZWxldGUgJyArXG4gICAgICAnbGV0IHlpZWxkIGNvbnN0IGNsYXNzIHB1YmxpYyBwcml2YXRlIGdldCBzZXQgc3VwZXIgJyArXG4gICAgICAnc3RhdGljIGltcGxlbWVudHMgZW51bSBleHBvcnQgaW1wb3J0IGRlY2xhcmUgdHlwZSBwcm90ZWN0ZWQgQCcsXG4gICAgbGl0ZXJhbDpcbiAgICAgICd0cnVlIGZhbHNlIG51bGwgdW5kZWZpbmVkIE5hTiBJbmZpbml0eScsXG4gICAgYnVpbHRfaW46XG4gICAgICAnZXZhbCBpc0Zpbml0ZSBpc05hTiBwYXJzZUZsb2F0IHBhcnNlSW50IGRlY29kZVVSSSBkZWNvZGVVUklDb21wb25lbnQgJyArXG4gICAgICAnZW5jb2RlVVJJIGVuY29kZVVSSUNvbXBvbmVudCBlc2NhcGUgdW5lc2NhcGUgT2JqZWN0IEZ1bmN0aW9uIEJvb2xlYW4gRXJyb3IgJyArXG4gICAgICAnRXZhbEVycm9yIEludGVybmFsRXJyb3IgUmFuZ2VFcnJvciBSZWZlcmVuY2VFcnJvciBTdG9wSXRlcmF0aW9uIFN5bnRheEVycm9yICcgK1xuICAgICAgJ1R5cGVFcnJvciBVUklFcnJvciBOdW1iZXIgTWF0aCBEYXRlIFN0cmluZyBSZWdFeHAgQXJyYXkgRmxvYXQzMkFycmF5ICcgK1xuICAgICAgJ0Zsb2F0NjRBcnJheSBJbnQxNkFycmF5IEludDMyQXJyYXkgSW50OEFycmF5IFVpbnQxNkFycmF5IFVpbnQzMkFycmF5ICcgK1xuICAgICAgJ1VpbnQ4QXJyYXkgVWludDhDbGFtcGVkQXJyYXkgQXJyYXlCdWZmZXIgRGF0YVZpZXcgSlNPTiBJbnRsIGFyZ3VtZW50cyByZXF1aXJlICcgK1xuICAgICAgJ21vZHVsZSBjb25zb2xlIHdpbmRvdyBkb2N1bWVudCBhbnkgbnVtYmVyIGJvb2xlYW4gc3RyaW5nIHZvaWQnXG4gIH07XG5cbiAgcmV0dXJuIHtcbiAgICBhbGlhc2VzOiBbJ3RzJ10sXG4gICAga2V5d29yZHM6IEtFWVdPUkRTLFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ3BpJyxcbiAgICAgICAgYmVnaW46IC9eXFxzKlsnXCJddXNlIHN0cmljdFsnXCJdLyxcbiAgICAgICAgcmVsZXZhbmNlOiAwXG4gICAgICB9LFxuICAgICAgaGxqcy5BUE9TX1NUUklOR19NT0RFLFxuICAgICAgaGxqcy5RVU9URV9TVFJJTkdfTU9ERSxcbiAgICAgIGhsanMuQ19MSU5FX0NPTU1FTlRfTU9ERSxcbiAgICAgIGhsanMuQ19CTE9DS19DT01NRU5UX01PREUsXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ251bWJlcicsXG4gICAgICAgIHZhcmlhbnRzOiBbXG4gICAgICAgICAgeyBiZWdpbjogJ1xcXFxiKDBbYkJdWzAxXSspJyB9LFxuICAgICAgICAgIHsgYmVnaW46ICdcXFxcYigwW29PXVswLTddKyknIH0sXG4gICAgICAgICAgeyBiZWdpbjogaGxqcy5DX05VTUJFUl9SRSB9XG4gICAgICAgIF0sXG4gICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgfSxcbiAgICAgIHsgLy8gXCJ2YWx1ZVwiIGNvbnRhaW5lclxuICAgICAgICBiZWdpbjogJygnICsgaGxqcy5SRV9TVEFSVEVSU19SRSArICd8XFxcXGIoY2FzZXxyZXR1cm58dGhyb3cpXFxcXGIpXFxcXHMqJyxcbiAgICAgICAga2V5d29yZHM6ICdyZXR1cm4gdGhyb3cgY2FzZScsXG4gICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAgaGxqcy5DX0xJTkVfQ09NTUVOVF9NT0RFLFxuICAgICAgICAgIGhsanMuQ19CTE9DS19DT01NRU5UX01PREUsXG4gICAgICAgICAgaGxqcy5SRUdFWFBfTU9ERVxuICAgICAgICBdLFxuICAgICAgICByZWxldmFuY2U6IDBcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ2Z1bmN0aW9uJyxcbiAgICAgICAgYmVnaW46ICdmdW5jdGlvbicsIGVuZDogL1tcXHs7XS8sIGV4Y2x1ZGVFbmQ6IHRydWUsXG4gICAgICAgIGtleXdvcmRzOiBLRVlXT1JEUyxcbiAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICAnc2VsZicsXG4gICAgICAgICAgaGxqcy5pbmhlcml0KGhsanMuVElUTEVfTU9ERSwge2JlZ2luOiAvW0EtWmEteiRfXVswLTlBLVphLXokX10qL30pLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNsYXNzTmFtZTogJ3BhcmFtcycsXG4gICAgICAgICAgICBiZWdpbjogL1xcKC8sIGVuZDogL1xcKS8sXG4gICAgICAgICAgICBleGNsdWRlQmVnaW46IHRydWUsXG4gICAgICAgICAgICBleGNsdWRlRW5kOiB0cnVlLFxuICAgICAgICAgICAga2V5d29yZHM6IEtFWVdPUkRTLFxuICAgICAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICAgICAgaGxqcy5DX0xJTkVfQ09NTUVOVF9NT0RFLFxuICAgICAgICAgICAgICBobGpzLkNfQkxPQ0tfQ09NTUVOVF9NT0RFXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgaWxsZWdhbDogL1tcIidcXChdL1xuICAgICAgICAgIH1cbiAgICAgICAgXSxcbiAgICAgICAgaWxsZWdhbDogL1xcW3wlLyxcbiAgICAgICAgcmVsZXZhbmNlOiAwIC8vICgpID0+IHt9IGlzIG1vcmUgdHlwaWNhbCBpbiBUeXBlU2NyaXB0XG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdjb25zdHJ1Y3RvcicsXG4gICAgICAgIGJlZ2luS2V5d29yZHM6ICdjb25zdHJ1Y3RvcicsIGVuZDogL1xcey8sIGV4Y2x1ZGVFbmQ6IHRydWUsXG4gICAgICAgIHJlbGV2YW5jZTogMTBcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ21vZHVsZScsXG4gICAgICAgIGJlZ2luS2V5d29yZHM6ICdtb2R1bGUnLCBlbmQ6IC9cXHsvLCBleGNsdWRlRW5kOiB0cnVlXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdpbnRlcmZhY2UnLFxuICAgICAgICBiZWdpbktleXdvcmRzOiAnaW50ZXJmYWNlJywgZW5kOiAvXFx7LywgZXhjbHVkZUVuZDogdHJ1ZSxcbiAgICAgICAga2V5d29yZHM6ICdpbnRlcmZhY2UgZXh0ZW5kcydcbiAgICAgICAgfSxcbiAgICAgICAgLy8gTUggQURERUQ6IEVTNyBEZWNvcmF0b3JzL0Fubm90YXRpb25zXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ2tleXdvcmQnLFxuICAgICAgICBiZWdpbjogJ0AnLCBlbmQ6IC9cXCgvLCBleGNsdWRlRW5kOiB0cnVlXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdzdHJpbmcnLFxuICAgICAgICBiZWdpbjogJ2AnLCBlbmQ6IC9cXGAvLCBleGNsdWRlRW5kOiBmYWxzZVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgYmVnaW46IC9cXCRbKC5dLyAvLyByZWxldmFuY2UgYm9vc3RlciBmb3IgYSBwYXR0ZXJuIGNvbW1vbiB0byBKUyBsaWJzOiBgJChzb21ldGhpbmcpYCBhbmQgYCQuc29tZXRoaW5nYFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgYmVnaW46ICdcXFxcLicgKyBobGpzLklERU5UX1JFLCByZWxldmFuY2U6IDAgLy8gaGFjazogcHJldmVudHMgZGV0ZWN0aW9uIG9mIGtleXdvcmRzIGFmdGVyIGRvdHNcbiAgICAgIH1cbiAgICBdXG4gIH07XG59KTtcblxuaGxqcy5yZWdpc3Rlckxhbmd1YWdlKCd4bWwnLCBmdW5jdGlvbihobGpzKSB7XG4gIHZhciBYTUxfSURFTlRfUkUgPSAnW0EtWmEtejAtOVxcXFwuXzotXSsnO1xuICB2YXIgUEhQID0ge1xuICAgIGJlZ2luOiAvPFxcPyhwaHApPyg/IVxcdykvLCBlbmQ6IC9cXD8+LyxcbiAgICBzdWJMYW5ndWFnZTogJ3BocCdcbiAgfTtcbiAgdmFyIFRBR19JTlRFUk5BTFMgPSB7XG4gICAgZW5kc1dpdGhQYXJlbnQ6IHRydWUsXG4gICAgaWxsZWdhbDogLzwvLFxuICAgIHJlbGV2YW5jZTogMCxcbiAgICBjb250YWluczogW1xuICAgICAgUEhQLFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdhdHRyaWJ1dGUnLFxuICAgICAgICBiZWdpbjogWE1MX0lERU5UX1JFLFxuICAgICAgICByZWxldmFuY2U6IDBcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAnPScsXG4gICAgICAgIHJlbGV2YW5jZTogMCxcbiAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjbGFzc05hbWU6ICd2YWx1ZScsXG4gICAgICAgICAgICBjb250YWluczogW1BIUF0sXG4gICAgICAgICAgICB2YXJpYW50czogW1xuICAgICAgICAgICAgICB7YmVnaW46IC9cIi8sIGVuZDogL1wiL30sXG4gICAgICAgICAgICAgIHtiZWdpbjogLycvLCBlbmQ6IC8nL30sXG4gICAgICAgICAgICAgIHtiZWdpbjogL1teXFxzXFwvPl0rL31cbiAgICAgICAgICAgIF1cbiAgICAgICAgICB9XG4gICAgICAgIF1cbiAgICAgIH1cbiAgICBdXG4gIH07XG4gIHJldHVybiB7XG4gICAgYWxpYXNlczogWydodG1sJywgJ3hodG1sJywgJ3JzcycsICdhdG9tJywgJ3hzbCcsICdwbGlzdCddLFxuICAgIGNhc2VfaW5zZW5zaXRpdmU6IHRydWUsXG4gICAgY29udGFpbnM6IFtcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnZG9jdHlwZScsXG4gICAgICAgIGJlZ2luOiAnPCFET0NUWVBFJywgZW5kOiAnPicsXG4gICAgICAgIHJlbGV2YW5jZTogMTAsXG4gICAgICAgIGNvbnRhaW5zOiBbe2JlZ2luOiAnXFxcXFsnLCBlbmQ6ICdcXFxcXSd9XVxuICAgICAgfSxcbiAgICAgIGhsanMuQ09NTUVOVChcbiAgICAgICAgJzwhLS0nLFxuICAgICAgICAnLS0+JyxcbiAgICAgICAge1xuICAgICAgICAgIHJlbGV2YW5jZTogMTBcbiAgICAgICAgfVxuICAgICAgKSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnY2RhdGEnLFxuICAgICAgICBiZWdpbjogJzxcXFxcIVxcXFxbQ0RBVEFcXFxcWycsIGVuZDogJ1xcXFxdXFxcXF0+JyxcbiAgICAgICAgcmVsZXZhbmNlOiAxMFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAndGFnJyxcbiAgICAgICAgLypcbiAgICAgICAgVGhlIGxvb2thaGVhZCBwYXR0ZXJuICg/PS4uLikgZW5zdXJlcyB0aGF0ICdiZWdpbicgb25seSBtYXRjaGVzXG4gICAgICAgICc8c3R5bGUnIGFzIGEgc2luZ2xlIHdvcmQsIGZvbGxvd2VkIGJ5IGEgd2hpdGVzcGFjZSBvciBhblxuICAgICAgICBlbmRpbmcgYnJha2V0LiBUaGUgJyQnIGlzIG5lZWRlZCBmb3IgdGhlIGxleGVtZSB0byBiZSByZWNvZ25pemVkXG4gICAgICAgIGJ5IGhsanMuc3ViTW9kZSgpIHRoYXQgdGVzdHMgbGV4ZW1lcyBvdXRzaWRlIHRoZSBzdHJlYW0uXG4gICAgICAgICovXG4gICAgICAgIGJlZ2luOiAnPHN0eWxlKD89XFxcXHN8PnwkKScsIGVuZDogJz4nLFxuICAgICAgICBrZXl3b3Jkczoge3RpdGxlOiAnc3R5bGUnfSxcbiAgICAgICAgY29udGFpbnM6IFtUQUdfSU5URVJOQUxTXSxcbiAgICAgICAgc3RhcnRzOiB7XG4gICAgICAgICAgZW5kOiAnPC9zdHlsZT4nLCByZXR1cm5FbmQ6IHRydWUsXG4gICAgICAgICAgc3ViTGFuZ3VhZ2U6ICdjc3MnXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ3RhZycsXG4gICAgICAgIC8vIFNlZSB0aGUgY29tbWVudCBpbiB0aGUgPHN0eWxlIHRhZyBhYm91dCB0aGUgbG9va2FoZWFkIHBhdHRlcm5cbiAgICAgICAgYmVnaW46ICc8c2NyaXB0KD89XFxcXHN8PnwkKScsIGVuZDogJz4nLFxuICAgICAgICBrZXl3b3Jkczoge3RpdGxlOiAnc2NyaXB0J30sXG4gICAgICAgIGNvbnRhaW5zOiBbVEFHX0lOVEVSTkFMU10sXG4gICAgICAgIHN0YXJ0czoge1xuICAgICAgICAgIGVuZDogJ1xcPFxcL3NjcmlwdFxcPicsIHJldHVybkVuZDogdHJ1ZSxcbiAgICAgICAgICBzdWJMYW5ndWFnZTogWydhY3Rpb25zY3JpcHQnLCAnamF2YXNjcmlwdCcsICdoYW5kbGViYXJzJ11cbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIFBIUCxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAncGknLFxuICAgICAgICBiZWdpbjogLzxcXD9cXHcrLywgZW5kOiAvXFw/Pi8sXG4gICAgICAgIHJlbGV2YW5jZTogMTBcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ3RhZycsXG4gICAgICAgIGJlZ2luOiAnPC8/JywgZW5kOiAnLz8+JyxcbiAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjbGFzc05hbWU6ICd0aXRsZScsIGJlZ2luOiAvW14gXFwvPjxcXG5cXHRdKy8sIHJlbGV2YW5jZTogMFxuICAgICAgICAgIH0sXG4gICAgICAgICAgVEFHX0lOVEVSTkFMU1xuICAgICAgICBdXG4gICAgICB9XG4gICAgXVxuICB9O1xufSk7XG5cbiAgcmV0dXJuIGhsanM7XG59KSk7XG4iLCIvLyBzaGltIGZvcmVhY2ggZm9yIGllMTFcbmlmICggIUFycmF5LnByb3RvdHlwZS5mb3JFYWNoICkge1xuICBBcnJheS5wcm90b3R5cGUuZm9yRWFjaCA9IGZ1bmN0aW9uKGZuLCBzY29wZSkge1xuICAgIGZvciAodmFyIGkgPSAwLCBsZW4gPSB0aGlzLmxlbmd0aDsgaSA8IGxlbjsgKytpKSB7XG4gICAgICBmbi5jYWxsKHNjb3BlIHx8IHRoaXMsIHRoaXNbaV0sIGksIHRoaXMpO1xuICAgIH1cbiAgfVxufVxuXG4vLyBzaWRlYmFyIHRvZ2dsZSBmb3IgbW9iaWxlIHZpZXdzXG52YXIgc2lkZWJhclRvZ2dsZUVsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3NpZGViYXItdG9nZ2xlJyk7XG5pZiAoc2lkZWJhclRvZ2dsZUVsKSB7XG4gIHNpZGViYXJUb2dnbGVFbC5vbmNsaWNrID0gZnVuY3Rpb24oKSB7XG4gICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3NpZGUtbmF2JykuY2xhc3NMaXN0LnRvZ2dsZSgnc2hvd24nKTtcbiAgICB0aGlzLmNsYXNzTGlzdC50b2dnbGUoJ2FjdGl2ZScpO1xuICB9O1xufVxuXG4vLyAkKGRvY3VtZW50KS5yZWFkeShmdW5jdGlvbigpIHtcbi8vICAgLy8gYWN0aXZhdGUgZHJvcGRvd25zXG4vLyAgICQoJy5kcm9wZG93bi10b2dnbGUnKS5kcm9wZG93bigpO1xuLy9cbi8vICAgJChcIi5uYXZiYXIudHJhbnNwYXJlbnQgLmRyb3Bkb3duLCAucHJlLWhlYWRlciAuZHJvcGRvd25cIikuaG92ZXIoXG4vLyAgICAgZnVuY3Rpb24oKXsgJCh0aGlzKS5hZGRDbGFzcygnb3BlbicpIH0sXG4vLyAgICAgZnVuY3Rpb24oKXsgJCh0aGlzKS5yZW1vdmVDbGFzcygnb3BlbicpIH1cbi8vICAgKTtcbi8vIFx0JChcIi5uYXZiYXIudHJhbnNwYXJlbnQgLmRyb3Bkb3duLCAucHJlLWhlYWRlciAuZHJvcGRvd25cIikuY2xpY2soKVxuLy9cbi8vICAgLy8gR2VuZXJpYyBoZWxwZXIgY2xhc3MgZm9yIG9uLWxvYWQgYW5pbWF0aW9uc1xuLy8gICAkKCcuYWN0aXZlLW9uLWxvYWQnKS5hZGRDbGFzcygnYWN0aXZlJyk7XG4vLyB9KTtcblxuKGZ1bmN0aW9uICgpIHtcbiAgLy8gcHJlLWhlYWRlciBhbm5vdW5jZW1lbnQgYW5pbWF0aW9uXG4gIHZhciBhbm5vdW5jZW1lbnQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcucHJlLWhlYWRlcl9fYW5ub3VuY2VtZW50Jyk7XG4gIGlmIChhbm5vdW5jZW1lbnQpIHtcbiAgICB2YXIgbGFzdENsZWFyID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ2xhc3QtY2xlYXInKTtcbiAgICB2YXIgdGltZU5vdyAgPSAobmV3IERhdGUoKSkuZ2V0VGltZSgpO1xuXG4gICAgaWYgKCh0aW1lTm93IC0gbGFzdENsZWFyKSA+IDEwMDAgKiA2MCAqIDYwICkge1xuICAgICAgbG9jYWxTdG9yYWdlLmNsZWFyKCk7XG4gICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgnbGFzdC1jbGVhcicsIHRpbWVOb3cpO1xuXG4gICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7XG4gICAgICAgIGFubm91bmNlbWVudC5jbGFzc0xpc3QuYWRkKCdhbmltYXRlLWluJyk7XG4gICAgICB9LCAyNTAwKVxuICAgIH0gZWxzZSB7XG4gICAgICBhbm5vdW5jZW1lbnQuY2xhc3NMaXN0LmFkZCgnaW4nKTtcbiAgICB9XG4gIH1cblxuXG4gIC8vIG1vYmlsZSBuYXZcbiAgdmFyIG1vYmlsZU5hdiA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5tb2JpbGUtbmF2Jyk7XG5cbiAgaWYgKG1vYmlsZU5hdikge1xuICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJyNjb2xsYXBzZS10b2dnbGUnKS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGZ1bmN0aW9uKCl7XG4gICAgICBkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC5hZGQoJ25vLXNjcm9sbCcpO1xuICAgICAgbW9iaWxlTmF2LmNsYXNzTGlzdC5hZGQoJ29wZW4nKTtcbiAgICAgIG1vYmlsZU5hdi5jbGFzc0xpc3QucmVtb3ZlKCdjbG9zZWQnKTtcbiAgICAgIG1vYmlsZU5hdi5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJztcbiAgICB9KTtcblxuICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5tb2JpbGUtbmF2X19jbG9zZScpLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZnVuY3Rpb24oKXtcbiAgICAgIGRvY3VtZW50LmJvZHkuY2xhc3NMaXN0LnJlbW92ZSgnbm8tc2Nyb2xsJyk7XG4gICAgICBtb2JpbGVOYXYuY2xhc3NMaXN0LnJlbW92ZSgnb3BlbicpO1xuICAgICAgbW9iaWxlTmF2LmNsYXNzTGlzdC5hZGQoJ2Nsb3NlZCcpO1xuICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHtcbiAgICAgICAgbW9iaWxlTmF2LnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG4gICAgICB9LCAzMDApO1xuICAgIH0pO1xuICB9XG59KSgpO1xuXG53aW5kb3cubW9iaWxlQW5kVGFibGV0Q2hlY2sgPSBmdW5jdGlvbigpIHtcbiAgdmFyIGNoZWNrID0gZmFsc2U7XG4gIChmdW5jdGlvbihhKXtpZigvKGFuZHJvaWR8YmJcXGQrfG1lZWdvKS4rbW9iaWxlfGF2YW50Z298YmFkYVxcL3xibGFja2JlcnJ5fGJsYXplcnxjb21wYWx8ZWxhaW5lfGZlbm5lY3xoaXB0b3B8aWVtb2JpbGV8aXAoaG9uZXxvZCl8aXJpc3xraW5kbGV8bGdlIHxtYWVtb3xtaWRwfG1tcHxtb2JpbGUuK2ZpcmVmb3h8bmV0ZnJvbnR8b3BlcmEgbShvYnxpbilpfHBhbG0oIG9zKT98cGhvbmV8cChpeGl8cmUpXFwvfHBsdWNrZXJ8cG9ja2V0fHBzcHxzZXJpZXMoNHw2KTB8c3ltYmlhbnx0cmVvfHVwXFwuKGJyb3dzZXJ8bGluayl8dm9kYWZvbmV8d2FwfHdpbmRvd3MgY2V8eGRhfHhpaW5vL2kudGVzdChhKXx8LzEyMDd8NjMxMHw2NTkwfDNnc298NHRocHw1MFsxLTZdaXw3NzBzfDgwMnN8YSB3YXxhYmFjfGFjKGVyfG9vfHNcXC0pfGFpKGtvfHJuKXxhbChhdnxjYXxjbyl8YW1vaXxhbihleHxueXx5dyl8YXB0dXxhcihjaHxnbyl8YXModGV8dXMpfGF0dHd8YXUoZGl8XFwtbXxyIHxzICl8YXZhbnxiZShja3xsbHxucSl8YmkobGJ8cmQpfGJsKGFjfGF6KXxicihlfHYpd3xidW1ifGJ3XFwtKG58dSl8YzU1XFwvfGNhcGl8Y2N3YXxjZG1cXC18Y2VsbHxjaHRtfGNsZGN8Y21kXFwtfGNvKG1wfG5kKXxjcmF3fGRhKGl0fGxsfG5nKXxkYnRlfGRjXFwtc3xkZXZpfGRpY2F8ZG1vYnxkbyhjfHApb3xkcygxMnxcXC1kKXxlbCg0OXxhaSl8ZW0obDJ8dWwpfGVyKGljfGswKXxlc2w4fGV6KFs0LTddMHxvc3x3YXx6ZSl8ZmV0Y3xmbHkoXFwtfF8pfGcxIHV8ZzU2MHxnZW5lfGdmXFwtNXxnXFwtbW98Z28oXFwud3xvZCl8Z3IoYWR8dW4pfGhhaWV8aGNpdHxoZFxcLShtfHB8dCl8aGVpXFwtfGhpKHB0fHRhKXxocCggaXxpcCl8aHNcXC1jfGh0KGMoXFwtfCB8X3xhfGd8cHxzfHQpfHRwKXxodShhd3x0Yyl8aVxcLSgyMHxnb3xtYSl8aTIzMHxpYWMoIHxcXC18XFwvKXxpYnJvfGlkZWF8aWcwMXxpa29tfGltMWt8aW5ub3xpcGFxfGlyaXN8amEodHx2KWF8amJyb3xqZW11fGppZ3N8a2RkaXxrZWppfGtndCggfFxcLyl8a2xvbnxrcHQgfGt3Y1xcLXxreW8oY3xrKXxsZShub3x4aSl8bGcoIGd8XFwvKGt8bHx1KXw1MHw1NHxcXC1bYS13XSl8bGlid3xseW54fG0xXFwtd3xtM2dhfG01MFxcL3xtYSh0ZXx1aXx4byl8bWMoMDF8MjF8Y2EpfG1cXC1jcnxtZShyY3xyaSl8bWkobzh8b2F8dHMpfG1tZWZ8bW8oMDF8MDJ8Yml8ZGV8ZG98dChcXC18IHxvfHYpfHp6KXxtdCg1MHxwMXx2ICl8bXdicHxteXdhfG4xMFswLTJdfG4yMFsyLTNdfG4zMCgwfDIpfG41MCgwfDJ8NSl8bjcoMCgwfDEpfDEwKXxuZSgoY3xtKVxcLXxvbnx0Znx3Znx3Z3x3dCl8bm9rKDZ8aSl8bnpwaHxvMmltfG9wKHRpfHd2KXxvcmFufG93ZzF8cDgwMHxwYW4oYXxkfHQpfHBkeGd8cGcoMTN8XFwtKFsxLThdfGMpKXxwaGlsfHBpcmV8cGwoYXl8dWMpfHBuXFwtMnxwbyhja3xydHxzZSl8cHJveHxwc2lvfHB0XFwtZ3xxYVxcLWF8cWMoMDd8MTJ8MjF8MzJ8NjB8XFwtWzItN118aVxcLSl8cXRla3xyMzgwfHI2MDB8cmFrc3xyaW05fHJvKHZlfHpvKXxzNTVcXC98c2EoZ2V8bWF8bW18bXN8bnl8dmEpfHNjKDAxfGhcXC18b298cFxcLSl8c2RrXFwvfHNlKGMoXFwtfDB8MSl8NDd8bWN8bmR8cmkpfHNnaFxcLXxzaGFyfHNpZShcXC18bSl8c2tcXC0wfHNsKDQ1fGlkKXxzbShhbHxhcnxiM3xpdHx0NSl8c28oZnR8bnkpfHNwKDAxfGhcXC18dlxcLXx2ICl8c3koMDF8bWIpfHQyKDE4fDUwKXx0NigwMHwxMHwxOCl8dGEoZ3R8bGspfHRjbFxcLXx0ZGdcXC18dGVsKGl8bSl8dGltXFwtfHRcXC1tb3x0byhwbHxzaCl8dHMoNzB8bVxcLXxtM3xtNSl8dHhcXC05fHVwKFxcLmJ8ZzF8c2kpfHV0c3R8djQwMHx2NzUwfHZlcml8dmkocmd8dGUpfHZrKDQwfDVbMC0zXXxcXC12KXx2bTQwfHZvZGF8dnVsY3x2eCg1Mnw1M3w2MHw2MXw3MHw4MHw4MXw4M3w4NXw5OCl8dzNjKFxcLXwgKXx3ZWJjfHdoaXR8d2koZyB8bmN8bncpfHdtbGJ8d29udXx4NzAwfHlhc1xcLXx5b3VyfHpldG98enRlXFwtL2kudGVzdChhLnN1YnN0cigwLDQpKSljaGVjaz10cnVlfSkobmF2aWdhdG9yLnVzZXJBZ2VudHx8bmF2aWdhdG9yLnZlbmRvcnx8d2luZG93Lm9wZXJhKTtcbiAgcmV0dXJuIGNoZWNrO1xufTtcblxud2luZG93LmdldENvb2tpZSA9IGZ1bmN0aW9uKG5hbWUpIHtcbiAgdmFyIHYgPSBkb2N1bWVudC5jb29raWUubWF0Y2goJyhefDspID8nICsgbmFtZSArICc9KFteO10qKSg7fCQpJyk7XG4gIHJldHVybiB2ID8gdlsyXSA6IG51bGw7XG59XG5cbndpbmRvdy50b2NUb2dnbGUgPSBmdW5jdGlvbihidG5FbCkge1xuICBidG5FbC5wYXJlbnRFbGVtZW50LmNsYXNzTGlzdC50b2dnbGUoJ2NvbGxhcHNlZCcpO1xufTtcblxuJCgnW2RhdGEtdG9nZ2xlPVwidG9vbHRpcFwiXScpLnRvb2x0aXAoe2NvbnRhaW5lcjogJ2JvZHknfSk7XG5cbi8vIHNpbmNlIHdlIGRvbid0IHVzZSBtaXhwYW5lbCBvbiBldmVyeSBwYWdlXG5pZiAoIXdpbmRvdy5taXhwYW5lbCkge1xuICB3aW5kb3cubWl4cGFuZWwgPSB7XG4gICAgdHJhY2s6IGZ1bmN0aW9uKCkgeyBjb25zb2xlLmxvZygnTWl4cGFuZWwgbm90IGVuYWJsZWQgb24gdGhpcyBwYWdlJyk7IH1cbiAgfVxufVxuLy8gb3B0aW9uYWwgc2hvcnRoYW5kXG53aW5kb3cudCA9IG1peHBhbmVsLnRyYWNrO1xuXG53aW5kb3cuZ3VpZCA9IGZ1bmN0aW9uKCkge1xuICBmdW5jdGlvbiBzNCgpIHtcbiAgICByZXR1cm4gTWF0aC5mbG9vcigoMSArIE1hdGgucmFuZG9tKCkpICogMHgxMDAwMClcbiAgICAgIC50b1N0cmluZygxNilcbiAgICAgIC5zdWJzdHJpbmcoMSk7XG4gIH1cbiAgcmV0dXJuIHM0KCkgKyBzNCgpICsgJy0nICsgczQoKSArICctJyArIHM0KCkgKyAnLScgK1xuICAgIHM0KCkgKyAnLScgKyBzNCgpICsgczQoKSArIHM0KCk7XG59XG5cbi8vIGFkZCBhbiAuYWN0aXZlIGNsYXNzIHRvIGVsZW1lbnRzIHcvIC5hY3RpdmF0ZU9uU2Nyb2xsIGNsYXNzIG9uIHdoZW4gdGhleVxuLy8gc2Nyb2xsIGluIHRvIHZpZXdcbnZhciBhY3RpdmF0ZU9uU2Nyb2xsID0gZnVuY3Rpb24oKSB7XG4gIHZhciBlbGVtcztcbiAgdmFyIHdpbmRvd0hlaWdodDtcbiAgZnVuY3Rpb24gaW5pdCgpIHtcbiAgICBlbGVtcyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoIHdpbmRvdy5hY3RpdmF0ZU9uU2Nyb2xsU2VsZWN0b3IgP1xuICAgICAgYWN0aXZhdGVPblNjcm9sbFNlbGVjdG9yIDogJy5hY3RpdmF0ZU9uU2Nyb2xsJyk7XG4gICAgd2luZG93SGVpZ2h0ID0gd2luZG93LmlubmVySGVpZ2h0IHx8XG4gICAgICAgICAgICAgICAgICAgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudEhlaWdodCB8fFxuICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LmJvZHkuY2xpZW50SGVpZ2h0OztcbiAgICBhZGRFdmVudEhhbmRsZXJzKCk7XG4gICAgY2hlY2tQb3NpdGlvbigpO1xuICB9XG4gIGZ1bmN0aW9uIGFkZEV2ZW50SGFuZGxlcnMoKSB7XG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIGNoZWNrUG9zaXRpb24pO1xuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdyZXNpemUnLCBpbml0KTtcbiAgfVxuICBmdW5jdGlvbiBjaGVja1Bvc2l0aW9uKCkge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZWxlbXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBlbFBvcyA9IGVsZW1zW2ldLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgdmFyIG9mZnNldCA9IHBhcnNlSW50KGVsZW1zW2ldLmRhdGFzZXQub2Zmc2V0IHx8IDAsIDEwKTtcbiAgICAgIGlmIChcbiAgICAgICAgKFxuICAgICAgICAgIGVsUG9zLnkgLSBvZmZzZXQgPCAwICYmICAvLyBhbHJlYWR5IHBhc3QgdGhlIGl0ZW1cbiAgICAgICAgICBlbFBvcy55ICsgKGVsUG9zLmhlaWdodCAvIDIpIC0gb2Zmc2V0ID4gMFxuICAgICAgICApIHx8IChcbiAgICAgICAgICBlbFBvcy55ICsgb2Zmc2V0ID4gMCAmJiAvLyBpdGVtIGlzIHlldCBiZWxvd1xuICAgICAgICAgIGVsUG9zLnkgKyAoZWxQb3MuaGVpZ2h0IC8gMikgKyBvZmZzZXQgPCB3aW5kb3dIZWlnaHRcbiAgICAgICAgKVxuICAgICAgICApIHtcbiAgICAgICAgZWxlbXNbaV0uY2xhc3NMaXN0LmFkZCgnYWN0aXZlJyk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiB7XG4gICAgaW5pdDogaW5pdFxuICB9O1xufTtcbmFjdGl2YXRlT25TY3JvbGwoKS5pbml0KCk7XG5cbi8vIGhpZ2hsaWdodC5qcyBzeW50YXggaGlnaGxpZ2h0aW5nXG5obGpzLmluaXRIaWdobGlnaHRpbmdPbkxvYWQoKTtcblxuLy8gaHR0cDovL3BhdWxpcmlzaC5jb20vMjAxMS9yZXF1ZXN0YW5pbWF0aW9uZnJhbWUtZm9yLXNtYXJ0LWFuaW1hdGluZy9cbi8vIGh0dHA6Ly9teS5vcGVyYS5jb20vZW1vbGxlci9ibG9nLzIwMTEvMTIvMjAvcmVxdWVzdGFuaW1hdGlvbmZyYW1lLWZvci1zbWFydC1lci1hbmltYXRpbmdcbi8vIHJlcXVlc3RBbmltYXRpb25GcmFtZSBwb2x5ZmlsbCBieSBFcmlrIE3DtmxsZXIuIGZpeGVzIGZyb20gUGF1bCBJcmlzaCBhbmQgVGlubyBaaWpkZWxcbi8vIE1JVCBsaWNlbnNlXG5cbihmdW5jdGlvbigpIHtcbiAgdmFyIGxhc3RUaW1lID0gMDtcbiAgdmFyIHZlbmRvcnMgPSBbJ21zJywgJ21veicsICd3ZWJraXQnLCAnbyddO1xuICBmb3IgKHZhciB4ID0gMDsgeCA8IHZlbmRvcnMubGVuZ3RoICYmICF3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lOyArK3gpIHtcbiAgICB3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lID0gd2luZG93W3ZlbmRvcnNbeF0gKyAnUmVxdWVzdEFuaW1hdGlvbkZyYW1lJ107XG4gICAgd2luZG93LmNhbmNlbEFuaW1hdGlvbkZyYW1lID0gd2luZG93W3ZlbmRvcnNbeF0gKyAnQ2FuY2VsQW5pbWF0aW9uRnJhbWUnXSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpbmRvd1t2ZW5kb3JzW3hdICsgJ0NhbmNlbFJlcXVlc3RBbmltYXRpb25GcmFtZSddO1xuICB9XG5cbiAgaWYgKCF3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKSB7XG4gICAgd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSA9IGZ1bmN0aW9uKGNhbGxiYWNrLCBlbGVtZW50KSB7XG4gICAgICB2YXIgY3VyclRpbWUgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcbiAgICAgIHZhciB0aW1lVG9DYWxsID0gTWF0aC5tYXgoMCwgMTYgLSAoY3VyclRpbWUgLSBsYXN0VGltZSkpO1xuICAgICAgdmFyIGlkID0gd2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gICAgICAgIGNhbGxiYWNrKGN1cnJUaW1lICsgdGltZVRvQ2FsbCk7XG4gICAgICB9LCB0aW1lVG9DYWxsKTtcbiAgICAgIGxhc3RUaW1lID0gY3VyclRpbWUgKyB0aW1lVG9DYWxsO1xuICAgICAgcmV0dXJuIGlkO1xuICAgIH07XG4gIH1cbiAgaWYgKCF3aW5kb3cuY2FuY2VsQW5pbWF0aW9uRnJhbWUpIHtcbiAgICB3aW5kb3cuY2FuY2VsQW5pbWF0aW9uRnJhbWUgPSBmdW5jdGlvbihpZCkge1xuICAgICAgY2xlYXJUaW1lb3V0KGlkKTtcbiAgICB9O1xuICB9XG59KCkpO1xuXG4vLyBTbW9vdGggU2Nyb2xsIFRvIGFuY2hvciBsaW5rcyB3aXRoIHRoZSAuYW5jaG9yIGNsYXNzXG4kKCdhLmFuY2hvcltocmVmKj1cIiNcIl0nKS5jbGljayhmdW5jdGlvbihldmVudCkge1xuICAvLyBPbi1wYWdlIGxpbmtzXG4gIGlmIChcbiAgICBsb2NhdGlvbi5wYXRobmFtZS5yZXBsYWNlKC9eXFwvLywgJycpID09IHRoaXMucGF0aG5hbWUucmVwbGFjZSgvXlxcLy8sICcnKVxuICAgICYmXG4gICAgbG9jYXRpb24uaG9zdG5hbWUgPT0gdGhpcy5ob3N0bmFtZVxuICApIHtcbiAgICAvLyBGaWd1cmUgb3V0IGVsZW1lbnQgdG8gc2Nyb2xsIHRvXG4gICAgdmFyIHRhcmdldCA9ICQodGhpcy5oYXNoKTtcbiAgICBpZiAoIXRhcmdldC5sZW5ndGgpIHtcbiAgICAgIHRhcmdldCA9ICQoJ1tuYW1lPVwiJyArIHRoaXMuaGFzaC5zdWJzdHJpbmcoMSkgKyAnXCJdJyk7XG4gICAgfVxuICAgIC8vIERvZXMgYSBzY3JvbGwgdGFyZ2V0IGV4aXN0P1xuICAgIGlmICh0YXJnZXQubGVuZ3RoKSB7XG4gICAgICB2YXIgb2Zmc2V0ID0gZXZlbnQudGFyZ2V0LmRhdGFzZXQgJiYgZXZlbnQudGFyZ2V0LmRhdGFzZXQub2Zmc2V0XG4gICAgICAgID8gZXZlbnQudGFyZ2V0LmRhdGFzZXQub2Zmc2V0IDogMTAwXG4gICAgICBzY3JvbGxUb1kodGFyZ2V0Lm9mZnNldCgpLnRvcCAtIG9mZnNldCwgNjAwKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gb3RoZXJ3aXNlIHNjcm9sbCB0byB0aGUgdG9wIG9mIHRoZSBwYWdlXG4gICAgICBzY3JvbGxUb1koMCwgNjAwKTtcbiAgICB9XG4gICAgaGlzdG9yeS5wdXNoU3RhdGUgJiYgaGlzdG9yeS5wdXNoU3RhdGUobnVsbCwgbnVsbCwgdGhpcy5oYXNoKVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufSk7XG5cblxud2luZG93LnNjcm9sbFRvRWwgPSBmdW5jdGlvbihzZWxlY3Rvciwgc3BlZWQpIHtcbiAgLy8gaWYgcGFzc2VkIGEgc3RyaW5nLCBxdWVyeSBmb3IgdGhlIGVsZW1lbnRcbiAgLy8gb3RoZXJ3aXNlIGFzc3VtZSBpdCdzIGFscmVhZHkgYW5kIGVsZW1lbnRcbiAgaWYodHlwZW9mIHNlbGVjdG9yID09PSAnc3RyaW5nJykge1xuICAgIHNlbGVjdG9yID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihzZWxlY3Rvcik7XG4gIH1cbiAgc2Nyb2xsVG9ZKHNlbGVjdG9yLm9mZnNldFRvcCwgc3BlZWQpXG59XG5cbndpbmRvdy5zY3JvbGxUb1kgPSBmdW5jdGlvbihzY3JvbGxUYXJnZXRZLCBzcGVlZCwgZWFzaW5nKSB7XG4gICAgLy8gc2Nyb2xsVGFyZ2V0WTogdGhlIHRhcmdldCBzY3JvbGxZIHByb3BlcnR5IG9mIHRoZSB3aW5kb3dcbiAgICAvLyBzcGVlZDogdGltZSBpbiBwaXhlbHMgcGVyIHNlY29uZFxuICAgIC8vIGVhc2luZzogZWFzaW5nIGVxdWF0aW9uIHRvIHVzZVxuXG4gICAgdmFyIHNjcm9sbFkgPSB3aW5kb3cuc2Nyb2xsWSxcbiAgICAgICAgc2Nyb2xsVGFyZ2V0WSA9IHNjcm9sbFRhcmdldFkgfHwgMCxcbiAgICAgICAgc3BlZWQgPSBzcGVlZCB8fCAyMDAwLFxuICAgICAgICBlYXNpbmcgPSBlYXNpbmcgfHwgJ2Vhc2VPdXRTaW5lJyxcbiAgICAgICAgY3VycmVudFRpbWUgPSAwO1xuXG4gICAgLy8gbWluIHRpbWUgLjEsIG1heCB0aW1lIC44IHNlY29uZHNcbiAgICB2YXIgdGltZSA9IE1hdGgubWF4KC4xLCBNYXRoLm1pbihNYXRoLmFicyhzY3JvbGxZIC0gc2Nyb2xsVGFyZ2V0WSkgLyBzcGVlZCwgLjgpKTtcblxuICAgIC8vIGVhc2luZyBlcXVhdGlvbnMgZnJvbSBodHRwczovL2dpdGh1Yi5jb20vZGFucm8vZWFzaW5nLWpzL2Jsb2IvbWFzdGVyL2Vhc2luZy5qc1xuICAgIHZhciBQSV9EMiA9IE1hdGguUEkgLyAyLFxuICAgICAgICBlYXNpbmdFcXVhdGlvbnMgPSB7XG4gICAgICAgICAgICBlYXNlT3V0U2luZTogZnVuY3Rpb24gKHBvcykge1xuICAgICAgICAgICAgICAgIHJldHVybiBNYXRoLnNpbihwb3MgKiAoTWF0aC5QSSAvIDIpKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBlYXNlSW5PdXRTaW5lOiBmdW5jdGlvbiAocG9zKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICgtMC41ICogKE1hdGguY29zKE1hdGguUEkgKiBwb3MpIC0gMSkpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGVhc2VJbk91dFF1aW50OiBmdW5jdGlvbiAocG9zKSB7XG4gICAgICAgICAgICAgICAgaWYgKChwb3MgLz0gMC41KSA8IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDAuNSAqIE1hdGgucG93KHBvcywgNSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiAwLjUgKiAoTWF0aC5wb3coKHBvcyAtIDIpLCA1KSArIDIpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGVhc2VPdXRFeHBvOiBmdW5jdGlvbihwb3MpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIChwb3M9PT0xKSA/IDEgOiAtTWF0aC5wb3coMiwgLTEwICogcG9zKSArIDE7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG5cbiAgICAvLyBhZGQgYW5pbWF0aW9uIGxvb3BcbiAgICBmdW5jdGlvbiB0aWNrKCkge1xuICAgICAgICBjdXJyZW50VGltZSArPSAxIC8gNjA7XG5cbiAgICAgICAgdmFyIHAgPSBjdXJyZW50VGltZSAvIHRpbWU7XG4gICAgICAgIHZhciB0ID0gZWFzaW5nRXF1YXRpb25zW2Vhc2luZ10ocCk7XG5cbiAgICAgICAgaWYgKHAgPCAxKSB7XG4gICAgICAgICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUodGljayk7XG4gICAgICAgICAgICB3aW5kb3cuc2Nyb2xsVG8oMCwgc2Nyb2xsWSArICgoc2Nyb2xsVGFyZ2V0WSAtIHNjcm9sbFkpICogdCkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgd2luZG93LnNjcm9sbFRvKDAsIHNjcm9sbFRhcmdldFkpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gY2FsbCBpdCBvbmNlIHRvIGdldCBzdGFydGVkXG4gICAgdGljaygpO1xufVxuXG5cbndpbmRvdy5zdGlja3lOYXYgPSB7XG4gIGluaXQ6IGZ1bmN0aW9uICgpIHtcbiAgICB0aGlzLmlzU2hvd24gPSBmYWxzZTtcbiAgICB0aGlzLm9uY2UgPSBmYWxzZTtcbiAgICB0aGlzLm5hdkJhciA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5uYXZiYXInKTtcbiAgICB0aGlzLnN0aWNreU5hdkJhciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgdGhpcy5zdGlja3lOYXZCYXIuY2xhc3NMaXN0LmFkZCgnbmF2YmFyJywnbmF2YmFyLWRlZmF1bHQnLCAnbGlnaHQnLCAnbmF2YmFyLXN0aWNreScsICduYXZiYXItc3RpY2t5LS1oaWRlJyk7XG4gICAgaWYgKHRoaXMubmF2QmFyLmNsYXNzTmFtZS5pbmRleE9mKCdlbnRlcnByaXNlJykgPiAtMSkge1xuICAgICAgdGhpcy5zdGlja3lOYXZCYXIuY2xhc3NMaXN0LmFkZCgnZW50ZXJwcmlzZScpO1xuICAgIH1cbiAgICB0aGlzLnN0aWNreU5hdkJhci5hcHBlbmRDaGlsZCh0aGlzLm5hdkJhci5xdWVyeVNlbGVjdG9yKCcuY29udGFpbmVyJykuY2xvbmVOb2RlKHRydWUpKTtcbiAgICB0aGlzLnN0aWNreU5hdkJhci5zdHlsZS52aXNpYmlsaXR5ID0gJ2hpZGRlbic7XG4gICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZCh0aGlzLnN0aWNreU5hdkJhcik7XG4gICAgZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QuYWRkKCdib2R5LXN0aWNreS1uYXYnKTtcbiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdzY3JvbGwnLCB0aGlzLmhhbmRsZVNjcm9sbC5iaW5kKHRoaXMpKVxuICB9LFxuXG4gIGhhbmRsZVNjcm9sbDogZnVuY3Rpb24gKCkge1xuICAgIHZhciBzZWxmID0gdGhpcztcbiAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoZnVuY3Rpb24oKXtcbiAgICAgIGlmICh3aW5kb3cuc2Nyb2xsWSA+IDEyMCkge1xuICAgICAgICBzZWxmLnNob3coKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNlbGYuaGlkZSgpO1xuICAgICAgfVxuICAgIH0pO1xuICB9LFxuXG4gIHNob3c6IGZ1bmN0aW9uICgpIHtcbiAgICBpZiAodGhpcy5pc1Nob3duKSByZXR1cm47XG4gICAgdGhpcy5pc1Nob3duID0gdHJ1ZTtcblxuICAgIGlmICghdGhpcy5vbmNlKSB7XG4gICAgICB0aGlzLnN0aWNreU5hdkJhci5zdHlsZS52aXNpYmlsaXR5ID0gJ3Zpc2libGUnO1xuICAgICAgdGhpcy5vbmNlID0gdHJ1ZTtcbiAgICB9XG5cbiAgICB0aGlzLnN0aWNreU5hdkJhci5jbGFzc0xpc3QuYWRkKCduYXZiYXItc3RpY2t5LS1zaG93Jyk7XG4gICAgdGhpcy5zdGlja3lOYXZCYXIuY2xhc3NMaXN0LnJlbW92ZSgnbmF2YmFyLXN0aWNreS0taGlkZScpO1xuICB9LFxuXG4gIGhpZGU6IGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoIXRoaXMuaXNTaG93bikgcmV0dXJuO1xuICAgIHRoaXMuaXNTaG93biA9IGZhbHNlO1xuICAgIHRoaXMuc3RpY2t5TmF2QmFyLmNsYXNzTGlzdC5hZGQoJ25hdmJhci1zdGlja3ktLWhpZGUnKTtcbiAgICB0aGlzLnN0aWNreU5hdkJhci5jbGFzc0xpc3QucmVtb3ZlKCduYXZiYXItc3RpY2t5LS1zaG93Jyk7XG4gIH1cbn1cblxud2luZG93LnJhZkNvbnRleHQgPSBmdW5jdGlvbihkcmF3Rm4pIHtcbiAgdmFyIHJlcXVlc3RJZDtcbiAgZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgIGRyYXdGbigpO1xuICAgIHJlcXVlc3RJZCA9IHJlcXVlc3RBbmltYXRpb25GcmFtZShyZW5kZXIpO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBwbGF5OiBmdW5jdGlvbigpIHtcbiAgICAgIGlmICghcmVxdWVzdElkKSB7XG4gICAgICAgIHJlbmRlcigpO1xuICAgICAgfVxuICAgIH0sXG4gICAgc3RvcDogZnVuY3Rpb24oKSB7XG4gICAgICBpZiAocmVxdWVzdElkKSB7XG4gICAgICAgIGNhbmNlbEFuaW1hdGlvbkZyYW1lKHJlcXVlc3RJZCk7XG4gICAgICAgIHJlcXVlc3RJZCA9IG51bGw7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbndpbmRvdy5pbml0QW5pbWF0aW9uID0gZnVuY3Rpb24oZWwsIGN0eCwgX29wdGlvbnMpIHtcbiAgdmFyIG9wdGlvbnMgPSBfb3B0aW9ucyB8fCB7fTtcbiAgdmFyIGJyZWFrcG9pbnQgPSAob3B0aW9ucy5icmVha3BvaW50KSA/ICBvcHRpb25zLmJyZWFrcG9pbnQgOiA3Njc7XG4gIHZhciBvbmNlID0gb3B0aW9ucy5vbmNlIHx8IGZhbHNlO1xuICB2YXIgaGFzUGxheWVkID0gb3B0aW9ucy5wbGF5V2hlbkluVmlldyA/IGZhbHNlIDogdHJ1ZTtcbiAgdmFyIGlzUGxheWluZyA9IGZhbHNlO1xuXG4gIGZ1bmN0aW9uIGZpcnN0UGxheSAoKSB7XG4gICAgcGxheSgpO1xuICAgIGhhc1BsYXllZCA9IHRydWU7XG4gIH1cblxuICBmdW5jdGlvbiBwbGF5ICgpIHtcbiAgICBpZiAoaXNQbGF5aW5nIHx8IHdpbmRvdy5pbm5lcldpZHRoIDwgYnJlYWtwb2ludCkgcmV0dXJuO1xuICAgIGlmICh0eXBlb2YgY3R4ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBjdHgoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY3R4LnBsYXkoKTtcbiAgICB9XG5cbiAgICBpc1BsYXlpbmcgPSB0cnVlO1xuICB9XG5cbiAgZnVuY3Rpb24gcGF1c2UgKCkge1xuICAgIGlmICghaXNQbGF5aW5nIHx8IHR5cGVvZiBjdHggPT09ICdmdW5jdGlvbicpIHJldHVybjtcbiAgICBjdHguc3RvcCgpO1xuICAgIGlzUGxheWluZyA9IGZhbHNlO1xuICB9XG5cbiAgZnVuY3Rpb24gY2hlY2tTY3JvbGwoKSB7XG4gICAgaWYgKG9uY2UgJiYgaGFzUGxheWVkKSByZXR1cm47XG4gICAgdmFyIHdpbkhlaWdodCA9IHdpbmRvdy5pbm5lckhlaWdodDtcbiAgICB2YXIgYmJveCA9IGVsLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgIHZhciBvZmZzZXQgPSAwLjU7XG5cbiAgICBpZiAoIWhhc1BsYXllZCAmJiBiYm94LnRvcCA8IHdpbkhlaWdodCAqIG9mZnNldCAmJiBiYm94LmJvdHRvbSA+IHdpbkhlaWdodCAqIG9mZnNldCApIGZpcnN0UGxheSgpO1xuICAgIGlmICghaGFzUGxheWVkKSByZXR1cm47XG4gICAgaWYgKCFpc1BsYXlpbmcgJiYgYmJveC50b3AgPCB3aW5IZWlnaHQgJiYgYmJveC5ib3R0b20gPiAwKSBwbGF5KCk7XG4gICAgaWYgKGlzUGxheWluZyAmJiBiYm94LnRvcCA+IHdpbkhlaWdodCkgcGF1c2UoKTtcbiAgICBpZiAoaXNQbGF5aW5nICYmIGJib3guYm90dG9tIDwgMCkgcGF1c2UoKTtcbiAgICBpZiAoIWlzUGxheWluZyAmJiBiYm94LmJvdHRvbSA+IDAgJiYgYmJveC50b3AgPCB3aW5IZWlnaHQpIHBsYXkoKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNoZWNrVmlld3BvcnQoKSB7XG4gICAgaWYgKHdpbmRvdy5pbm5lcldpZHRoIDwgYnJlYWtwb2ludCAmJiBpc1BsYXlpbmcpIHBhdXNlKCk7XG4gIH1cblxuICBjaGVja1Njcm9sbCgpO1xuICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgZnVuY3Rpb24oKSB7IHJlcXVlc3RBbmltYXRpb25GcmFtZShjaGVja1Njcm9sbCkgfSk7XG4gIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdyZXNpemUnLCBmdW5jdGlvbigpIHsgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKGNoZWNrVmlld3BvcnQpIH0pO1xufVxuXG53aW5kb3cucGp4ID0ge1xuICBpc0FuaW1hdGluZzogZmFsc2UsXG4gIG5hdkxpbmtzOiBudWxsLFxuXG4gIGluaXQ6IGZ1bmN0aW9uKHVybFJvb3QsIGRlbGVnYXRvcklELCBob29rcykge1xuICAgIHZhciBzZWxmID0gdGhpcztcbiAgICB0aGlzLnVybFJvb3QgPSB1cmxSb290O1xuICAgIHRoaXMubmF2TGlua3MgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcucGp4TmF2TGluaycpO1xuICAgIHRoaXMuaG9va3MgPSBob29rcyB8fCB7fTtcblxuICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoZGVsZWdhdG9ySUQpLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZnVuY3Rpb24oZXYpe1xuICAgICAgdmFyIGVsID0gZXYudGFyZ2V0O1xuICAgICAgd2hpbGUgKGVsICYmICFlbC5tYXRjaGVzKCdhLnBqeExpbmsnKSkge1xuICAgICAgICBlbCA9IGVsLnBhcmVudE5vZGU7XG4gICAgICAgIGlmIChlbC5tYXRjaGVzKGRlbGVnYXRvcklEKSkgcmV0dXJuO1xuICAgICAgfVxuICAgICAgZXYucHJldmVudERlZmF1bHQoKTtcbiAgICAgIHNlbGYuaGFuZGxlQ2xpY2soZWwpO1xuICAgIH0pO1xuXG4gICAgd2luZG93Lm9ucG9wc3RhdGUgPSB0aGlzLmhhbmRsZVBvcFN0YXRlLmJpbmQodGhpcyk7XG4gIH0sXG5cbiAgZWFjaDogZnVuY3Rpb24oZm4pIHtcbiAgICBmb3IgKGkgPSAwOyBpIDwgdGhpcy5uYXZMaW5rcy5sZW5ndGg7IGkrKykge1xuICAgICAgZm4odGhpcy5uYXZMaW5rc1tpXSwgaSk7XG4gICAgfVxuICB9LFxuXG4gIGhhbmRsZUNsaWNrOiBmdW5jdGlvbihlbCkge1xuICAgIGlmICh0aGlzLmlzQW5pbWF0aW5nKSByZXR1cm47XG4gICAgdGhpcy5oYW5kbGVUcmFuc2l0aW9uKGVsLmhyZWYsIHRydWUpXG4gIH0sXG5cbiAgaGFuZGxlUG9wU3RhdGU6IGZ1bmN0aW9uKGV2KSB7XG4gICAgaWYgKHRoaXMuaXNBbmltYXRpbmcpIHtcbiAgICAgIGV2LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHZhciBkaXJlY3Rpb24gPSBldi5zdGF0ZSA/IGV2LnN0YXRlLmRpcmVjdGlvbiA6IDE7XG4gICAgdGhpcy5oYW5kbGVUcmFuc2l0aW9uKGRvY3VtZW50LmxvY2F0aW9uLmhyZWYsIGZhbHNlKTtcbiAgfSxcblxuICBoYW5kbGVUcmFuc2l0aW9uOiBmdW5jdGlvbiAodXJsLCBkb1B1c2hTdGF0ZSkge1xuICAgIHZhciBzZWxmID0gdGhpcztcbiAgICB2YXIgdXJsU3BsaXQgPSB1cmwuc3BsaXQoJy8nKTtcbiAgICB2YXIgc2x1ZyA9Jy8nICsgdGhpcy51cmxSb290ICsgKHVybFNwbGl0W3VybFNwbGl0LmluZGV4T2YodGhpcy51cmxSb290KSArIDFdID8gICcvJyArIHVybFNwbGl0LnNsaWNlKHVybFNwbGl0LmluZGV4T2YodGhpcy51cmxSb290KSArIDEpLmpvaW4oJy8nKSA6ICcnKTtcblxuICAgIHRoaXMuZWFjaChmdW5jdGlvbihlbCkge1xuICAgICAgZWwucGFyZW50RWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKCdhY3RpdmUnKTtcbiAgICAgIGlmIChlbC5ocmVmID09PSB1cmwpIHtcbiAgICAgICAgZWwucGFyZW50RWxlbWVudC5jbGFzc0xpc3QuYWRkKCdhY3RpdmUnKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBpZiAoc2VsZi5ob29rcy53aWxsVHJhbnNpdGlvbikge1xuICAgICAgc2VsZi5ob29rcy53aWxsVHJhbnNpdGlvbihzbHVnKTtcbiAgICB9XG4gICAgdGhpcy5mZXRjaENvbnRlbnQodXJsICwgZnVuY3Rpb24oY29udGVudCl7XG4gICAgICBpZiAoZG9QdXNoU3RhdGUpIHNlbGYudXBkYXRlSGlzdG9yeShzbHVnKTtcbiAgICAgIHNlbGYudHJhbnNpdGlvbihjb250ZW50LCBzbHVnKTtcbiAgICB9KTtcbiAgfSxcblxuICB0cmFuc2l0aW9uOiBmdW5jdGlvbihjb250ZW50LCBzbHVnKSB7XG4gICAgdGhpcy5pc0FuaW1hdGluZyA9IHRydWU7XG5cbiAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgdmFyIHBhcnNlciA9IG5ldyBET01QYXJzZXIoKTtcbiAgICB2YXIgbmV4dERvYyA9IHBhcnNlci5wYXJzZUZyb21TdHJpbmcoY29udGVudCwgXCJ0ZXh0L2h0bWxcIik7XG5cbiAgICB2YXIgbmV4dEJvZHkgPSBuZXh0RG9jLnF1ZXJ5U2VsZWN0b3IoJy5wanhUcmFuc2l0aW9uQm9keScpO1xuICAgIHZhciBjdXJyQm9keSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5wanhUcmFuc2l0aW9uQm9keScgKTtcbiAgICB2YXIgY3VyckJvZHlXcmFwcGVyID0gY3VyckJvZHkucGFyZW50RWxlbWVudDtcblxuICAgIFR3ZWVuTGl0ZS50byhjdXJyQm9keSwgMC4zLCB7XG4gICAgICB5OiAxMCxcbiAgICAgIG9wYWNpdHk6IDAsXG4gICAgICBvbkNvbXBsZXRlOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGN1cnJCb2R5V3JhcHBlci5yZW1vdmVDaGlsZChjdXJyQm9keSk7XG4gICAgICAgIGN1cnJCb2R5V3JhcHBlci5hcHBlbmRDaGlsZChuZXh0Qm9keSk7XG4gICAgICAgIGlmIChzZWxmLmhvb2tzLmluVHJhbnNpdGlvbikge1xuICAgICAgICAgIHNlbGYuaG9va3MuaW5UcmFuc2l0aW9uKHNsdWcpO1xuICAgICAgICB9XG4gICAgICAgIFR3ZWVuTGl0ZS5zZXQobmV4dEJvZHksIHtcbiAgICAgICAgICBvcGFjaXR5OiAwLFxuICAgICAgICAgIHk6IC0xMFxuICAgICAgICB9KTtcbiAgICAgICAgVHdlZW5MaXRlLnRvKG5leHRCb2R5LCAwLjYsIHtcbiAgICAgICAgICBvcGFjaXR5OiAxLFxuICAgICAgICAgIHk6IDAsXG4gICAgICAgICAgZWFzZTogRXhwby5lYXNlT3V0LFxuICAgICAgICAgIC8vIGRlbGF5OiAwLjEyNSxcbiAgICAgICAgICBvbkNvbXBsZXRlOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBzZWxmLmlzQW5pbWF0aW5nID0gZmFsc2U7XG4gICAgICAgICAgICBpZiAoc2VsZi5ob29rcy5kaWRUcmFuc2l0aW9uKSB7XG4gICAgICAgICAgICAgIHNlbGYuaG9va3MuZGlkVHJhbnNpdGlvbihzbHVnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuICB9LFxuXG4gIHVwZGF0ZUhpc3Rvcnk6IGZ1bmN0aW9uKHNsdWcpIHtcbiAgICBoaXN0b3J5LnB1c2hTdGF0ZSh7fSwgJycsIHNsdWcpO1xuICB9LFxuXG4gIGZldGNoQ29udGVudDogZnVuY3Rpb24odXJsLCBjYWxsYmFjaykge1xuICAgIHZhciB4bWxodHRwID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XG5cbiAgICB4bWxodHRwLm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGZ1bmN0aW9uKCkge1xuICAgICAgaWYgKHhtbGh0dHAucmVhZHlTdGF0ZSA9PSBYTUxIdHRwUmVxdWVzdC5ET05FKSB7ICAgLy8gWE1MSHR0cFJlcXVlc3QuRE9ORSA9PSA0XG4gICAgICAgIGlmICh4bWxodHRwLnN0YXR1cyA9PSAyMDApIHtcbiAgICAgICAgICBjYWxsYmFjayh4bWxodHRwLnJlc3BvbnNlVGV4dCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoeG1saHR0cC5zdGF0dXMgPT0gNDAwKSB7XG4gICAgICAgICAgYWxlcnQoJ1RoZXJlIHdhcyBhbiBlcnJvciA0MDAnKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG5cbiAgICB4bWxodHRwLm9wZW4oXCJHRVRcIiwgdXJsLCB0cnVlKTtcbiAgICB4bWxodHRwLnNlbmQoKTtcbiAgfVxufVxuIl19\n"
  },
  {
    "path": "content/js/ionic.bundle.js",
    "content": "/*\n *  es6-module-loader v0.17.8\n *  https://github.com/ModuleLoader/es6-module-loader\n *  Copyright (c) 2015 Guy Bedford, Luke Hoban, Addy Osmani; Licensed MIT\n */\n\n!function(a){function b(a,c){if(\"string\"!=typeof a)throw new TypeError(\"URL must be a string\");var d=String(a).replace(/^\\s+|\\s+$/g,\"\").match(/^([^:\\/?#]+:)?(?:\\/\\/(?:([^:@\\/?#]*)(?::([^:@\\/?#]*))?@)?(([^:\\/?#]*)(?::(\\d*))?))?([^?#]*)(\\?[^#]*)?(#[\\s\\S]*)?/);if(!d)throw new RangeError;var e=d[1]||\"\",f=d[2]||\"\",g=d[3]||\"\",h=d[4]||\"\",i=d[5]||\"\",j=d[6]||\"\",k=d[7]||\"\",l=d[8]||\"\",m=d[9]||\"\";if(void 0!==c){var n=c instanceof b?c:new b(c),o=\"\"===e&&\"\"===h&&\"\"===f;o&&\"\"===k&&\"\"===l&&(l=n.search),o&&\"/\"!==k.charAt(0)&&(k=\"\"!==k?(\"\"===n.host&&\"\"===n.username||\"\"!==n.pathname?\"\":\"/\")+n.pathname.slice(0,n.pathname.lastIndexOf(\"/\")+1)+k:n.pathname);var p=[];k.replace(/^(\\.\\.?(\\/|$))+/,\"\").replace(/\\/(\\.(\\/|$))+/g,\"/\").replace(/\\/\\.\\.$/,\"/../\").replace(/\\/?[^\\/]*/g,function(a){\"/..\"===a?p.pop():p.push(a)}),k=p.join(\"\").replace(/^\\//,\"/\"===k.charAt(0)?\"/\":\"\"),o&&(j=n.port,i=n.hostname,h=n.host,g=n.password,f=n.username),\"\"===e&&(e=n.protocol)}\"file:\"==e&&(k=k.replace(/\\\\/g,\"/\")),this.origin=e+(\"\"!==e||\"\"!==h?\"//\":\"\")+h,this.href=e+(\"\"!==e||\"\"!==h?\"//\":\"\")+(\"\"!==f?f+(\"\"!==g?\":\"+g:\"\")+\"@\":\"\")+h+k+l+m,this.protocol=e,this.username=f,this.password=g,this.host=h,this.hostname=i,this.port=j,this.pathname=k,this.search=l,this.hash=m}a.URLPolyfill=b}(\"undefined\"!=typeof self?self:global),function(a){function b(a,b){var c;if(a instanceof Error){var c=new Error(a.message,a.fileName,a.lineNumber);i?(c.message=a.message+\"\\n\t\"+b,c.stack=a.stack):(c.message=a.message,c.stack=a.stack+\"\\n\t\"+b)}else c=a+\"\\n\t\"+b;return c}function c(a,c,d){try{new Function(a).call(d)}catch(e){throw b(e,\"Evaluating \"+c)}}function d(){}function e(){this._loader={loaderObj:this,loads:[],modules:{},importPromises:{},moduleRecords:{}},k(this,\"global\",{get:function(){return a}})}function f(){e.call(this),this.paths={}}function g(a,b){var c,d=\"\",e=0;for(var f in a){var g=f.split(\"*\");if(g.length>2)throw new TypeError(\"Only one wildcard in a path is permitted\");if(1==g.length){if(b==f){d=f;break}}else{var h=f.split(\"/\").length;h>=e&&b.substr(0,g[0].length)==g[0]&&b.substr(b.length-g[1].length)==g[1]&&(e=h,d=f,c=b.substr(g[0].length,b.length-g[1].length-g[0].length))}}var i=a[d]||b;return\"string\"==typeof c&&(i=i.replace(\"*\",c)),i}function h(){}var i=(\"undefined\"==typeof window&&\"undefined\"!=typeof self&&\"undefined\"!=typeof importScripts,\"undefined\"!=typeof window&&\"undefined\"!=typeof document),j=\"undefined\"!=typeof process&&!!process.platform.match(/^win/);a.console||(a.console={assert:function(){}});var k,l=Array.prototype.indexOf||function(a){for(var b=0,c=this.length;c>b;b++)if(this[b]===a)return b;return-1};!function(){try{Object.defineProperty({},\"a\",{})&&(k=Object.defineProperty)}catch(a){k=function(a,b,c){try{a[b]=c.value||c.get.call(a)}catch(d){}}}}();var m;if(\"undefined\"!=typeof document&&document.getElementsByTagName){if(m=document.baseURI,!m){var n=document.getElementsByTagName(\"base\");m=n[0]&&n[0].href||window.location.href}m=m.split(\"#\")[0].split(\"?\")[0],m=m.substr(0,m.lastIndexOf(\"/\")+1)}else if(\"undefined\"!=typeof process&&process.cwd)m=\"file://\"+(j?\"/\":\"\")+process.cwd()+\"/\",j&&(m=m.replace(/\\\\/g,\"/\"));else{if(\"undefined\"==typeof location)throw new TypeError(\"No environment baseURI\");m=a.location.href}var o=a.URLPolyfill||a.URL;k(d.prototype,\"toString\",{value:function(){return\"Module\"}}),function(){function f(a){return{status:\"loading\",name:a,linkSets:[],dependencies:[],metadata:{}}}function g(a,b,c){return new Promise(n({step:c.address?\"fetch\":\"locate\",loader:a,moduleName:b,moduleMetadata:c&&c.metadata||{},moduleSource:c.source,moduleAddress:c.address}))}function h(a,b,c,d){return new Promise(function(e){e(a.loaderObj.normalize(b,c,d))}).then(function(b){var c;if(a.modules[b])return c=f(b),c.status=\"linked\",c.module=a.modules[b],c;for(var d=0,e=a.loads.length;e>d;d++)if(c=a.loads[d],c.name==b)return c;return c=f(b),a.loads.push(c),i(a,c),c})}function i(a,b){j(a,b,Promise.resolve().then(function(){return a.loaderObj.locate({name:b.name,metadata:b.metadata})}))}function j(a,b,c){m(a,b,c.then(function(c){return\"loading\"==b.status?(b.address=c,a.loaderObj.fetch({name:b.name,metadata:b.metadata,address:c})):void 0}))}function m(b,d,e){e.then(function(e){return\"loading\"==d.status?Promise.resolve(b.loaderObj.translate({name:d.name,metadata:d.metadata,address:d.address,source:e})).then(function(a){return d.source=a,b.loaderObj.instantiate({name:d.name,metadata:d.metadata,address:d.address,source:a})}).then(function(e){if(void 0===e)return d.address=d.address||\"<Anonymous Module \"+ ++A+\">\",d.isDeclarative=!0,z.call(b.loaderObj,d).then(function(b){var e=a.System,f=e.register;e.register=function(a,b,c){\"string\"!=typeof a&&(c=b,b=a),d.declare=c,d.depsList=b},c(b,d.address,{}),e.register=f});if(\"object\"!=typeof e)throw TypeError(\"Invalid instantiate return value\");d.depsList=e.deps||[],d.execute=e.execute,d.isDeclarative=!1}).then(function(){d.dependencies=[];for(var a=d.depsList,c=[],e=0,f=a.length;f>e;e++)(function(a,e){c.push(h(b,a,d.name,d.address).then(function(b){if(d.dependencies[e]={key:a,value:b.name},\"linked\"!=b.status)for(var c=d.linkSets.concat([]),f=0,g=c.length;g>f;f++)p(c[f],b)}))})(a[e],e);return Promise.all(c)}).then(function(){d.status=\"loaded\";for(var a=d.linkSets.concat([]),b=0,c=a.length;c>b;b++)r(a[b],d)}):void 0})[\"catch\"](function(a){d.status=\"failed\",d.exception=a;for(var b=d.linkSets.concat([]),c=0,e=b.length;e>c;c++)s(b[c],d,a)})}function n(a){return function(b){var c=a.loader,d=a.moduleName,e=a.step;if(c.modules[d])throw new TypeError('\"'+d+'\" already exists in the module table');for(var g,h=0,k=c.loads.length;k>h;h++)if(c.loads[h].name==d&&(g=c.loads[h],\"translate\"!=e||g.source||(g.address=a.moduleAddress,m(c,g,Promise.resolve(a.moduleSource))),g.linkSets.length))return g.linkSets[0].done.then(function(){b(g)});var l=g||f(d);l.metadata=a.moduleMetadata;var n=o(c,l);c.loads.push(l),b(n.done),\"locate\"==e?i(c,l):\"fetch\"==e?j(c,l,Promise.resolve(a.moduleAddress)):(l.address=a.moduleAddress,m(c,l,Promise.resolve(a.moduleSource)))}}function o(a,b){var c={loader:a,loads:[],startingLoad:b,loadingCount:0};return c.done=new Promise(function(a,b){c.resolve=a,c.reject=b}),p(c,b),c}function p(a,b){if(\"failed\"!=b.status){for(var c=0,d=a.loads.length;d>c;c++)if(a.loads[c]==b)return;a.loads.push(b),b.linkSets.push(a),\"loaded\"!=b.status&&a.loadingCount++;for(var e=a.loader,c=0,d=b.dependencies.length;d>c;c++)if(b.dependencies[c]){var f=b.dependencies[c].value;if(!e.modules[f])for(var g=0,h=e.loads.length;h>g;g++)if(e.loads[g].name==f){p(a,e.loads[g]);break}}}}function q(a){var b=!1;try{w(a,function(c,d){s(a,c,d),b=!0})}catch(c){s(a,null,c),b=!0}return b}function r(a,b){if(a.loadingCount--,!(a.loadingCount>0)){var c=a.startingLoad;if(a.loader.loaderObj.execute===!1){for(var d=[].concat(a.loads),e=0,f=d.length;f>e;e++){var b=d[e];b.module=b.isDeclarative?{name:b.name,module:B({}),evaluated:!0}:{module:B({})},b.status=\"linked\",t(a.loader,b)}return a.resolve(c)}var g=q(a);g||a.resolve(c)}}function s(a,c,d){var e=a.loader;a:if(c)if(a.loads[0].name==c.name)d=b(d,\"Error loading \"+c.name);else{for(var f=0;f<a.loads.length;f++)for(var g=a.loads[f],h=0;h<g.dependencies.length;h++){var i=g.dependencies[h];if(i.value==c.name){d=b(d,\"Error loading \"+c.name+' as \"'+i.key+'\" from '+g.name);break a}}d=b(d,\"Error loading \"+c.name+\" from \"+a.loads[0].name)}else d=b(d,\"Error linking \"+a.loads[0].name);for(var j=a.loads.concat([]),f=0,k=j.length;k>f;f++){var c=j[f];e.loaderObj.failed=e.loaderObj.failed||[],-1==l.call(e.loaderObj.failed,c)&&e.loaderObj.failed.push(c);var m=l.call(c.linkSets,a);if(c.linkSets.splice(m,1),0==c.linkSets.length){var n=l.call(a.loader.loads,c);-1!=n&&a.loader.loads.splice(n,1)}}a.reject(d)}function t(a,b){if(a.loaderObj.trace){a.loaderObj.loads||(a.loaderObj.loads={});var c={};b.dependencies.forEach(function(a){c[a.key]=a.value}),a.loaderObj.loads[b.name]={name:b.name,deps:b.dependencies.map(function(a){return a.key}),depMap:c,address:b.address,metadata:b.metadata,source:b.source,kind:b.isDeclarative?\"declarative\":\"dynamic\"}}b.name&&(a.modules[b.name]=b.module);var d=l.call(a.loads,b);-1!=d&&a.loads.splice(d,1);for(var e=0,f=b.linkSets.length;f>e;e++)d=l.call(b.linkSets[e].loads,b),-1!=d&&b.linkSets[e].loads.splice(d,1);b.linkSets.splice(0,b.linkSets.length)}function u(a,b,c){try{var e=b.execute()}catch(f){return void c(b,f)}return e&&e instanceof d?e:void c(b,new TypeError(\"Execution must define a Module instance\"))}function v(a,b,c){var d=a._loader.importPromises;return d[b]=c.then(function(a){return d[b]=void 0,a},function(a){throw d[b]=void 0,a})}function w(a,b){var c=a.loader;if(a.loads.length)for(var d=a.loads.concat([]),e=0;e<d.length;e++){var f=d[e],g=u(a,f,b);if(!g)return;f.module={name:f.name,module:g},f.status=\"linked\",t(c,f)}}function x(a,b){return b.module.module}function y(){}function z(){throw new TypeError(\"ES6 transpilation is only provided in the dev module loader build.\")}var A=0;e.prototype={constructor:e,define:function(a,b,c){if(this._loader.importPromises[a])throw new TypeError(\"Module is already loading.\");return v(this,a,new Promise(n({step:\"translate\",loader:this._loader,moduleName:a,moduleMetadata:c&&c.metadata||{},moduleSource:b,moduleAddress:c&&c.address})))},\"delete\":function(a){var b=this._loader;return delete b.importPromises[a],delete b.moduleRecords[a],b.modules[a]?delete b.modules[a]:!1},get:function(a){return this._loader.modules[a]?(y(this._loader.modules[a],[],this),this._loader.modules[a].module):void 0},has:function(a){return!!this._loader.modules[a]},\"import\":function(a,b){\"object\"==typeof b&&(b=b.name);var c=this;return Promise.resolve(c.normalize(a,b)).then(function(a){var b=c._loader;return b.modules[a]?(y(b.modules[a],[],b._loader),b.modules[a].module):b.importPromises[a]||v(c,a,g(b,a,{}).then(function(c){return delete b.importPromises[a],x(b,c)}))})},load:function(a){var b=this._loader;return b.modules[a]?(y(b.modules[a],[],b),Promise.resolve(b.modules[a].module)):b.importPromises[a]||v(this,a,g(b,a,{}).then(function(c){return delete b.importPromises[a],x(b,c)}))},module:function(a,b){var c=f();c.address=b&&b.address;var d=o(this._loader,c),e=Promise.resolve(a),g=this._loader,h=d.done.then(function(){return x(g,c)});return m(g,c,e),h},newModule:function(a){if(\"object\"!=typeof a)throw new TypeError(\"Expected object\");var b,c=new d;if(Object.getOwnPropertyNames&&null!=a)b=Object.getOwnPropertyNames(a);else{b=[];for(var e in a)b.push(e)}for(var f=0;f<b.length;f++)(function(b){k(c,b,{configurable:!1,enumerable:!0,get:function(){return a[b]}})})(b[f]);return Object.preventExtensions&&Object.preventExtensions(c),c},set:function(a,b){if(!(b instanceof d))throw new TypeError(\"Loader.set(\"+a+\", module) must be a module\");this._loader.modules[a]={module:b}},normalize:function(a){return a},locate:function(a){return a.name},fetch:function(){},translate:function(a){return a.source},instantiate:function(){}};var B=e.prototype.newModule}();var p;h.prototype=e.prototype,f.prototype=new h;var q=/^([^\\/]+:\\/\\/|\\/)/;f.prototype.normalize=function(a,b){return a=a.match(q)||\".\"==a[0]?new o(a,b||m).href:new o(g(this.paths,a),m).href},f.prototype.locate=function(a){return a.name},f.prototype.instantiate=function(b){var d=this;return Promise.resolve(d.normalize(d.transpiler)).then(function(e){return b.address===e?{deps:[],execute:function(){var e=a.System,f=a.Reflect.Loader;return c(\"(function(require,exports,module){\"+b.source+\"})();\",b.address,a),a.System=e,a.Reflect.Loader=f,d.newModule({\"default\":a[d.transpiler],__useDefault:!0})}}:void 0})};var r;if(\"undefined\"!=typeof XMLHttpRequest)r=function(a,b,c,d){function e(){c(g.responseText)}function f(){d(new Error(\"XHR error\"+(g.status?\" (\"+g.status+(g.statusText?\" \"+g.statusText:\"\")+\")\":\"\")+\" loading \"+a))}var g=new XMLHttpRequest,h=!0,i=!1;if(!(\"withCredentials\"in g)){var j=/^(\\w+:)?\\/\\/([^\\/]+)/.exec(a);j&&(h=j[2]===window.location.host,j[1]&&(h&=j[1]===window.location.protocol))}h||\"undefined\"==typeof XDomainRequest||(g=new XDomainRequest,g.onload=e,g.onerror=f,g.ontimeout=f,g.onprogress=function(){},g.timeout=0,i=!0),g.onreadystatechange=function(){4===g.readyState&&(200===g.status||0==g.status&&g.responseText?e():f())},g.open(\"GET\",a,!0),g.setRequestHeader&&(g.setRequestHeader(\"Accept\",\"application/x-es-module, */*\"),b&&(\"string\"==typeof b&&g.setRequestHeader(\"Authorization\",b),g.withCredentials=!0)),i?setTimeout(function(){g.send()},0):g.send(null)};else{if(\"undefined\"==typeof require)throw new TypeError(\"No environment fetch API available.\");var s;r=function(a,b,c,d){if(\"file:///\"!=a.substr(0,8))throw new Error('Unable to fetch \"'+a+'\". Only file URLs of the form file:/// allowed running in Node.');return s=s||require(\"fs\"),a=j?a.replace(/\\//g,\"\\\\\").substr(8):a.substr(7),s.readFile(a,function(a,b){if(a)return d(a);var e=b+\"\";\"\\ufeff\"===e[0]&&(e=e.substr(1)),c(e)})}}f.prototype.fetch=function(a){return new Promise(function(b,c){r(a.address,void 0,b,c)})},\"object\"==typeof exports&&(module.exports=e),a.Reflect=a.Reflect||{},a.Reflect.Loader=a.Reflect.Loader||e,a.Reflect.global=a.Reflect.global||a,a.LoaderPolyfill=e,p||(p=new f,p.constructor=f),\"object\"==typeof exports&&(module.exports=p),a.System=p}(\"undefined\"!=typeof self?self:global);\n//# sourceMappingURL=es6-module-loader.js.map\n/*\n * SystemJS v0.18.10\n */\n!function(){function e(){!function(e){function t(e,t){var n;if(e instanceof Error){var n=new Error(e.message,e.fileName,e.lineNumber);b?(n.message=e.message+\"\\n\t\"+t,n.stack=e.stack):(n.message=e.message,n.stack=e.stack+\"\\n\t\"+t)}else n=e+\"\\n\t\"+t;return n}function n(e,n,a){try{new Function(e).call(a)}catch(r){throw t(r,\"Evaluating \"+n)}}function a(){}function r(t){this._loader={loaderObj:this,loads:[],modules:{},importPromises:{},moduleRecords:{}},x(this,\"global\",{get:function(){return e}})}function o(){r.call(this),this.paths={}}function s(e,t){var n,a=\"\",r=0;for(var o in e){var s=o.split(\"*\");if(s.length>2)throw new TypeError(\"Only one wildcard in a path is permitted\");if(1==s.length){if(t==o){a=o;break}}else{var i=o.split(\"/\").length;i>=r&&t.substr(0,s[0].length)==s[0]&&t.substr(t.length-s[1].length)==s[1]&&(r=i,a=o,n=t.substr(s[0].length,t.length-s[1].length-s[0].length))}}var l=e[a]||t;return n&&(l=l.replace(\"*\",n)),l}function i(){}function l(){o.call(this),O.call(this)}function u(){}function d(e,t){l.prototype[e]=t(l.prototype[e])}function c(e){O=e(O||function(){})}function f(e){for(var t=[],n=[],a=0,r=e.length;r>a;a++){var o=w.call(t,e[a]);-1===o?(t.push(e[a]),n.push([a])):n[o].push(a)}return{names:t,indices:n}}function m(e,t,n){for(var a in t)n&&a in e||(e[a]=t[a]);return e}function p(e,t,n){for(var a in t){var r=t[a];a in e?r instanceof Array&&e[a]instanceof Array?e[a]=[].concat(n?r:e[a]).concat(n?e[a]:r):\"object\"==typeof r&&\"object\"==typeof e[a]?e[a]=m(m({},e[a]),r,n):n||(e[a]=r):e[a]=r}}function h(e,t){for(var n=e.split(\".\");n.length;)t=t[n.shift()];return t}function v(){if(T[this.baseURL])return T[this.baseURL];\"/\"!=this.baseURL[this.baseURL.length-1]&&(this.baseURL+=\"/\");var e=new _(this.baseURL,S);return this.baseURL=e.href,T[this.baseURL]=e}var g=\"undefined\"==typeof window&&\"undefined\"!=typeof self&&\"undefined\"!=typeof importScripts,b=\"undefined\"!=typeof window&&\"undefined\"!=typeof document,y=\"undefined\"!=typeof process&&!!process.platform.match(/^win/);e.console||(e.console={assert:function(){}});var x,w=Array.prototype.indexOf||function(e){for(var t=0,n=this.length;n>t;t++)if(this[t]===e)return t;return-1};!function(){try{Object.defineProperty({},\"a\",{})&&(x=Object.defineProperty)}catch(e){x=function(e,t,n){try{e[t]=n.value||n.get.call(e)}catch(a){}}}}();var S;if(\"undefined\"!=typeof document&&document.getElementsByTagName){if(S=document.baseURI,!S){var E=document.getElementsByTagName(\"base\");S=E[0]&&E[0].href||window.location.href}S=S.split(\"#\")[0].split(\"?\")[0],S=S.substr(0,S.lastIndexOf(\"/\")+1)}else if(\"undefined\"!=typeof process&&process.cwd)S=\"file://\"+(y?\"/\":\"\")+process.cwd()+\"/\",y&&(S=S.replace(/\\\\/g,\"/\"));else{if(\"undefined\"==typeof location)throw new TypeError(\"No environment baseURI\");S=e.location.href}var _=e.URLPolyfill||e.URL;x(a.prototype,\"toString\",{value:function(){return\"Module\"}}),function(){function o(e){return{status:\"loading\",name:e,linkSets:[],dependencies:[],metadata:{}}}function s(e,t,n){return new Promise(c({step:n.address?\"fetch\":\"locate\",loader:e,moduleName:t,moduleMetadata:n&&n.metadata||{},moduleSource:n.source,moduleAddress:n.address}))}function i(e,t,n,a){return new Promise(function(r,o){r(e.loaderObj.normalize(t,n,a))}).then(function(t){var n;if(e.modules[t])return n=o(t),n.status=\"linked\",n.module=e.modules[t],n;for(var a=0,r=e.loads.length;r>a;a++)if(n=e.loads[a],n.name==t)return n;return n=o(t),e.loads.push(n),l(e,n),n})}function l(e,t){u(e,t,Promise.resolve().then(function(){return e.loaderObj.locate({name:t.name,metadata:t.metadata})}))}function u(e,t,n){d(e,t,n.then(function(n){return\"loading\"==t.status?(t.address=n,e.loaderObj.fetch({name:t.name,metadata:t.metadata,address:n})):void 0}))}function d(t,a,r){r.then(function(r){return\"loading\"==a.status?Promise.resolve(t.loaderObj.translate({name:a.name,metadata:a.metadata,address:a.address,source:r})).then(function(e){return a.source=e,t.loaderObj.instantiate({name:a.name,metadata:a.metadata,address:a.address,source:e})}).then(function(r){if(void 0===r)return a.address=a.address||\"<Anonymous Module \"+ ++M+\">\",a.isDeclarative=!0,j.call(t.loaderObj,a).then(function(t){var r=e.System,o=r.register;r.register=function(e,t,n){\"string\"!=typeof e&&(n=t,t=e),a.declare=n,a.depsList=t},n(t,a.address,{}),r.register=o});if(\"object\"!=typeof r)throw TypeError(\"Invalid instantiate return value\");a.depsList=r.deps||[],a.execute=r.execute,a.isDeclarative=!1}).then(function(){a.dependencies=[];for(var e=a.depsList,n=[],r=0,o=e.length;o>r;r++)(function(e,r){n.push(i(t,e,a.name,a.address).then(function(t){if(a.dependencies[r]={key:e,value:t.name},\"linked\"!=t.status)for(var n=a.linkSets.concat([]),o=0,s=n.length;s>o;o++)m(n[o],t)}))})(e[r],r);return Promise.all(n)}).then(function(){a.status=\"loaded\";for(var e=a.linkSets.concat([]),t=0,n=e.length;n>t;t++)h(e[t],a)}):void 0})[\"catch\"](function(e){a.status=\"failed\",a.exception=e;for(var t=a.linkSets.concat([]),n=0,r=t.length;r>n;n++)v(t[n],a,e)})}function c(e){return function(t,n){var a=e.loader,r=e.moduleName,s=e.step;if(a.modules[r])throw new TypeError('\"'+r+'\" already exists in the module table');for(var i,c=0,m=a.loads.length;m>c;c++)if(a.loads[c].name==r&&(i=a.loads[c],\"translate\"!=s||i.source||(i.address=e.moduleAddress,d(a,i,Promise.resolve(e.moduleSource))),i.linkSets.length))return i.linkSets[0].done.then(function(){t(i)});var p=i||o(r);p.metadata=e.moduleMetadata;var h=f(a,p);a.loads.push(p),t(h.done),\"locate\"==s?l(a,p):\"fetch\"==s?u(a,p,Promise.resolve(e.moduleAddress)):(p.address=e.moduleAddress,d(a,p,Promise.resolve(e.moduleSource)))}}function f(e,t){var n={loader:e,loads:[],startingLoad:t,loadingCount:0};return n.done=new Promise(function(e,t){n.resolve=e,n.reject=t}),m(n,t),n}function m(e,t){if(\"failed\"!=t.status){for(var n=0,a=e.loads.length;a>n;n++)if(e.loads[n]==t)return;e.loads.push(t),t.linkSets.push(e),\"loaded\"!=t.status&&e.loadingCount++;for(var r=e.loader,n=0,a=t.dependencies.length;a>n;n++)if(t.dependencies[n]){var o=t.dependencies[n].value;if(!r.modules[o])for(var s=0,i=r.loads.length;i>s;s++)if(r.loads[s].name==o){m(e,r.loads[s]);break}}}}function p(e){var t=!1;try{S(e,function(n,a){v(e,n,a),t=!0})}catch(n){v(e,null,n),t=!0}return t}function h(e,t){if(e.loadingCount--,!(e.loadingCount>0)){var n=e.startingLoad;if(e.loader.loaderObj.execute===!1){for(var a=[].concat(e.loads),r=0,o=a.length;o>r;r++){var t=a[r];t.module=t.isDeclarative?{name:t.name,module:D({}),evaluated:!0}:{module:D({})},t.status=\"linked\",g(e.loader,t)}return e.resolve(n)}var s=p(e);s||e.resolve(n)}}function v(e,n,a){var r=e.loader;e:if(n)if(e.loads[0].name==n.name)a=t(a,\"Error loading \"+n.name);else{for(var o=0;o<e.loads.length;o++)for(var s=e.loads[o],i=0;i<s.dependencies.length;i++){var l=s.dependencies[i];if(l.value==n.name){a=t(a,\"Error loading \"+n.name+' as \"'+l.key+'\" from '+s.name);break e}}a=t(a,\"Error loading \"+n.name+\" from \"+e.loads[0].name)}else a=t(a,\"Error linking \"+e.loads[0].name);for(var u=e.loads.concat([]),o=0,d=u.length;d>o;o++){var n=u[o];r.loaderObj.failed=r.loaderObj.failed||[],-1==w.call(r.loaderObj.failed,n)&&r.loaderObj.failed.push(n);var c=w.call(n.linkSets,e);if(n.linkSets.splice(c,1),0==n.linkSets.length){var f=w.call(e.loader.loads,n);-1!=f&&e.loader.loads.splice(f,1)}}e.reject(a)}function g(e,t){if(e.loaderObj.trace){e.loaderObj.loads||(e.loaderObj.loads={});var n={};t.dependencies.forEach(function(e){n[e.key]=e.value}),e.loaderObj.loads[t.name]={name:t.name,deps:t.dependencies.map(function(e){return e.key}),depMap:n,address:t.address,metadata:t.metadata,source:t.source,kind:t.isDeclarative?\"declarative\":\"dynamic\"}}t.name&&(e.modules[t.name]=t.module);var a=w.call(e.loads,t);-1!=a&&e.loads.splice(a,1);for(var r=0,o=t.linkSets.length;o>r;r++)a=w.call(t.linkSets[r].loads,t),-1!=a&&t.linkSets[r].loads.splice(a,1);t.linkSets.splice(0,t.linkSets.length)}function b(e,t,n){try{var r=t.execute()}catch(o){return void n(t,o)}return r&&r instanceof a?r:void n(t,new TypeError(\"Execution must define a Module instance\"))}function y(e,t,n){var a=e._loader.importPromises;return a[t]=n.then(function(e){return a[t]=void 0,e},function(e){throw a[t]=void 0,e})}function S(e,t){var n=e.loader;if(e.loads.length)for(var a=e.loads.concat([]),r=0;r<a.length;r++){var o=a[r],s=b(e,o,t);if(!s)return;o.module={name:o.name,module:s},o.status=\"linked\",g(n,o)}}function E(e,t){return t.module.module}function _(){}function j(){throw new TypeError(\"ES6 transpilation is only provided in the dev module loader build.\")}var M=0;r.prototype={constructor:r,define:function(e,t,n){if(this._loader.importPromises[e])throw new TypeError(\"Module is already loading.\");return y(this,e,new Promise(c({step:\"translate\",loader:this._loader,moduleName:e,moduleMetadata:n&&n.metadata||{},moduleSource:t,moduleAddress:n&&n.address})))},\"delete\":function(e){var t=this._loader;return delete t.importPromises[e],delete t.moduleRecords[e],t.modules[e]?delete t.modules[e]:!1},get:function(e){return this._loader.modules[e]?(_(this._loader.modules[e],[],this),this._loader.modules[e].module):void 0},has:function(e){return!!this._loader.modules[e]},\"import\":function(e,t,n){\"object\"==typeof t&&(t=t.name);var a=this;return Promise.resolve(a.normalize(e,t)).then(function(e){var t=a._loader;return t.modules[e]?(_(t.modules[e],[],t._loader),t.modules[e].module):t.importPromises[e]||y(a,e,s(t,e,{}).then(function(n){return delete t.importPromises[e],E(t,n)}))})},load:function(e,t){var n=this._loader;return n.modules[e]?(_(n.modules[e],[],n),Promise.resolve(n.modules[e].module)):n.importPromises[e]||y(this,e,s(n,e,{}).then(function(t){return delete n.importPromises[e],E(n,t)}))},module:function(e,t){var n=o();n.address=t&&t.address;var a=f(this._loader,n),r=Promise.resolve(e),s=this._loader,i=a.done.then(function(){return E(s,n)});return d(s,n,r),i},newModule:function(e){if(\"object\"!=typeof e)throw new TypeError(\"Expected object\");var t,n=new a;if(Object.getOwnPropertyNames&&null!=e)t=Object.getOwnPropertyNames(e);else{t=[];for(var r in e)t.push(r)}for(var o=0;o<t.length;o++)(function(t){x(n,t,{configurable:!1,enumerable:!0,get:function(){return e[t]}})})(t[o]);return Object.preventExtensions&&Object.preventExtensions(n),n},set:function(e,t){if(!(t instanceof a))throw new TypeError(\"Loader.set(\"+e+\", module) must be a module\");this._loader.modules[e]={module:t}},normalize:function(e,t,n){return e},locate:function(e){return e.name},fetch:function(e){},translate:function(e){return e.source},instantiate:function(e){}};var D=r.prototype.newModule}();var j;i.prototype=r.prototype,o.prototype=new i;var M;if(\"undefined\"!=typeof XMLHttpRequest)M=function(e,t,n){function a(){t(o.responseText)}function r(){n(new Error(\"XHR error\"+(o.status?\" (\"+o.status+(o.statusText?\" \"+o.statusText:\"\")+\")\":\"\")+\" loading \"+e))}var o=new XMLHttpRequest,s=!0,i=!1;if(!(\"withCredentials\"in o)){var l=/^(\\w+:)?\\/\\/([^\\/]+)/.exec(e);l&&(s=l[2]===window.location.host,l[1]&&(s&=l[1]===window.location.protocol))}s||\"undefined\"==typeof XDomainRequest||(o=new XDomainRequest,o.onload=a,o.onerror=r,o.ontimeout=r,o.onprogress=function(){},o.timeout=0,i=!0),o.onreadystatechange=function(){4===o.readyState&&(200===o.status||0==o.status&&o.responseText?a():r())},o.open(\"GET\",e,!0),o.setRequestHeader&&o.setRequestHeader(\"Accept\",\"application/x-es-module */*\"),i&&setTimeout(function(){o.send()},0),o.send(null)};else{if(\"undefined\"==typeof require)throw new TypeError(\"No environment fetch API available.\");var D;M=function(e,t,n){if(\"file:///\"!=e.substr(0,8))throw new Error('Unable to fetch \"'+e+'\". Only file URLs of the form file:/// allowed running in Node.');return D=D||require(\"fs\"),e=y?e.replace(/\\//g,\"\\\\\").substr(8):e.substr(7),D.readFile(e,function(e,a){if(e)return n(e);var r=a+\"\";\"\\ufeff\"===r[0]&&(r=r.substr(1)),t(r)})}}o.prototype.fetch=function(e){return new Promise(function(t,n){M(e.address,t,n)})};var R,k=function(){function t(t){var a=this;return Promise.resolve(e[\"typescript\"==a.transpiler?\"ts\":a.transpiler]||(a.pluginLoader||a)[\"import\"](a.transpiler)).then(function(e){e.__useDefault&&(e=e[\"default\"]);var r;return r=e.Compiler?n:e.createLanguageService?s:o,\"(function(__moduleName){\"+r.call(a,t,e)+'\\n})(\"'+t.name+'\");\\n//# sourceURL='+t.address+\"!transpiled\"})}function n(e,t){var n=this.traceurOptions||{};n.modules=\"instantiate\",n.script=!1,void 0===n.sourceMaps&&(n.sourceMaps=\"inline\"),n.filename=e.address,n.inputSourceMap=e.metadata.sourceMap,n.moduleName=!1;var r=new t.Compiler(n);return a(e.source,r,n.filename)}function a(e,t,n){try{return t.compile(e,n)}catch(a){throw a[0]}}function o(e,t){var n=this.babelOptions||{};return n.modules=\"system\",void 0===n.sourceMap&&(n.sourceMap=\"inline\"),n.inputSourceMap=e.metadata.sourceMap,n.filename=e.address,n.code=!0,n.ast=!1,t.transform(e.source,n).code}function s(e,t){var n=this.typescriptOptions||{};return n.target=n.target||t.ScriptTarget.ES5,void 0===n.sourceMap&&(n.sourceMap=!0),n.sourceMap&&(n.inlineSourceMap=!0),n.module=t.ModuleKind.System,t.transpile(e.source,n,e.address)}return r.prototype.transpiler=\"traceur\",t}();!function(){function n(t){o=e.System,e.System=t}function a(){e.System=o}function r(e){var t=e.source.lastIndexOf(\"\\n\");return e.source+(\"\\n//# sourceURL=\"!=e.source.substr(t,15)?\"\\n//# sourceURL=\"+e.address+(e.metadata.sourceMap?\"!transpiled\":\"\"):\"\")+(e.metadata.sourceMap&&s&&\"\\n//# sourceMappingURL=data:application/json;base64,\"+btoa(unescape(encodeURIComponent(e.metadata.sourceMap)))||\"\")}var o,s=\"undefined\"!=typeof btoa;if(g||b&&window.chrome&&window.chrome.extension)R=function(o){try{n(this),new Function(r(o)).call(e),a()}catch(s){throw t(s,\"Evaluating \"+o.address)}};else if(\"undefined\"!=typeof document){var i,l=document.getElementsByTagName(\"script\");$__curScript=l[l.length-1],R=function(e){i||(i=document.head||document.body||document.documentElement);var o=document.createElement(\"script\");o.text=r(e);var s,l=window.onerror;if(window.onerror=function(n){s=t(n,\"Evaluating \"+e.address)},n(this),i.appendChild(o),i.removeChild(o),a(),window.onerror=l,s)throw s}}else{var u=\"vm\",d=require(u);R=function(e){try{n(this),d.runInThisContext(r(e)),a()}catch(o){throw t(o.toString(),\"Evaluating \"+e.address)}}}}(),u.prototype=o.prototype,l.prototype=new u;var O,L=/^[^\\/]+:\\/\\//,T={},F=new _(S);!function(){c(function(e){return function(){e.call(this),this.baseURL=S.substr(0,S.lastIndexOf(\"/\")+1),this.set(\"@empty\",this.newModule({}))}}),d(\"normalize\",function(){return function(e,t){return\".\"==e[0]||\"/\"==e[0]?new _(e,t||F).href:e}}),d(\"import\",function(e){return function(t,n,a){return e.call(this,t,n,a).then(function(e){return e.__useDefault?e[\"default\"]:e})}});var e=[\"main\",\"format\",\"defaultExtension\",\"meta\",\"map\"];l.prototype.config=function(t){function n(e){for(var t in e)return!0}if(t.baseURL){if(n(this.packages)||n(this.meta)||n(this.depCache)||n(this.bundles))throw new TypeError(\"baseURL should only be configured once and must be configured first.\");this.baseURL=t.baseURL,v.call(this)}if(t.defaultJSExtensions&&(this.defaultJSExtensions=t.defaultJSExtensions),t.pluginFirst&&(this.pluginFirst=t.pluginFirst),t.paths)for(var a in t.paths)this.paths[a]=t.paths[a];if(t.map)for(var a in t.map){var r=t.map[a];if(\"string\"!=typeof r){var o=this.normalizeSync(a);this.defaultJSExtensions&&\".js\"!=a.substr(a.length-3,3)&&(o=o.substr(0,o.length-3));var s=\"\";for(var i in this.packages)o.substr(0,i.length)==i&&(!o[i.length]||\"/\"==o[i.length])&&s.split(\"/\").length<i.split(\"/\").length&&(s=i);s&&this.packages[s].main&&(o=o.substr(0,o.length-this.packages[s].main.length-1));var i=this.packages[o]=this.packages[o]||{};i.map=r}else this.map[a]=r}if(t.packages)for(var a in t.packages){var l=this.normalizeSync(a);this.defaultJSExtensions&&\".js\"!=a.substr(a.length-3,3)&&(l=l.substr(0,l.length-3)),this.packages[l]=this.packages[l]||{};for(var u in t.packages[a])-1==w.call(e,u)&&\"undefined\"!=typeof console&&console.warn,this.packages[l][u]=t.packages[a][u]}if(t.bundles)for(var a in t.bundles){for(var d=[],c=0;c<t.bundles[a].length;c++)d.push(this.normalizeSync(t.bundles[a][c]));this.bundles[a]=d}for(var f in t){var r=t[f],m=!1;if(\"baseURL\"!=f&&\"map\"!=f&&\"packages\"!=f&&\"bundles\"!=f&&\"paths\"!=f)if(\"object\"!=typeof r||r instanceof Array)this[f]=r;else{this[f]=this[f]||{},(\"meta\"==f||\"depCache\"==f)&&(m=!0);for(var a in r)\"meta\"==f&&\"*\"==a[0]?this[f][a]=r[a]:m?this[f][this.normalizeSync(a)]=r[a]:this[f][a]=r[a]}}}}(),function(){function t(e,t){return new Promise(function(n,a){try{importScripts(t.address)}catch(r){a(r)}e.onScriptLoad(t),t.metadata.registered||a(t.address+\" did not call System.register or AMD define\"),n(\"\")})}if(\"undefined\"!=typeof document)var n=document.getElementsByTagName(\"head\")[0];var a;l.prototype.onScriptLoad=function(){e.System=a},d(\"fetch\",function(r){return function(o){var s=this;return o.metadata.scriptLoad&&(b||g)?g?t(s,o):new Promise(function(t,r){function i(e){d.readyState&&\"loaded\"!=d.readyState&&\"complete\"!=d.readyState||(u(),s.onScriptLoad(o),o.metadata.registered||r(o.address+\" did not call System.register or AMD define\"),t(\"\"))}function l(e){u(),r(new Error(\"Unable to load script \"+o.address))}function u(){d.detachEvent?d.detachEvent(\"onreadystatechange\",i):(d.removeEventListener(\"load\",i,!1),d.removeEventListener(\"error\",l,!1)),n.removeChild(d)}var d=document.createElement(\"script\");d.async=!0,d.attachEvent?d.attachEvent(\"onreadystatechange\",i):(d.addEventListener(\"load\",i,!1),d.addEventListener(\"error\",l,!1)),a=e.System,e.System=s,d.src=o.address,n.appendChild(d)}):r.call(this,o)}})}(),function(){function t(e,t,n){if(g=!0,t)t=(e.normalizeSync||e.normalize).call(e,t),n.name=t,t in e.defined||(e.defined[t]=n);else{if(v)throw new TypeError(\"Invalid anonymous System.register module load. If loading a single module, ensure anonymous System.register is loaded via System.import. If loading a bundle, ensure all the System.register calls are named.\");v=n}}function n(e,t,a){if(a[e.groupIndex]=a[e.groupIndex]||[],-1==w.call(a[e.groupIndex],e)){a[e.groupIndex].push(e);for(var r=0,o=e.normalizedDeps.length;o>r;r++){var s=e.normalizedDeps[r],i=t.defined[s];if(i&&!i.evaluated){var l=e.groupIndex+(i.declarative!=e.declarative);if(void 0===i.groupIndex||i.groupIndex<l){if(void 0!==i.groupIndex&&(a[i.groupIndex].splice(w.call(a[i.groupIndex],i),1),0==a[i.groupIndex].length))throw new TypeError(\"Mixed dependency cycle detected\");i.groupIndex=l}n(i,t,a)}}}}function a(e,t){var a=t.defined[e];if(!a.module){a.groupIndex=0;var r=[];n(a,t,r);for(var o=!!a.declarative==r.length%2,i=r.length-1;i>=0;i--){for(var l=r[i],d=0;d<l.length;d++){var c=l[d];o?s(c,t):u(c,t)}o=!o}}}function r(){}function o(e,t){return t[e]||(t[e]={name:e,dependencies:[],exports:new r,importers:[]})}function s(t,n){if(!t.module){var a=n._loader.moduleRecords,r=t.module=o(t.name,a),i=t.module.exports,l=t.declare.call(e,function(e,t){if(r.locked=!0,\"object\"==typeof e)for(var n in e)i[n]=e[n];else i[e]=t;for(var a=0,o=r.importers.length;o>a;a++){var s=r.importers[a];if(!s.locked){var l=w.call(s.dependencies,r);s.setters[l](i)}}return r.locked=!1,t});if(r.setters=l.setters,r.execute=l.execute,!r.setters||!r.execute)throw new TypeError(\"Invalid System.register form for \"+t.name);for(var u=0,d=t.normalizedDeps.length;d>u;u++){var c,f=t.normalizedDeps[u],m=n.defined[f],p=a[f];p?c=p.exports:m&&!m.declarative?c=m.esModule:m?(s(m,n),p=m.module,c=p.exports):c=n.get(f),p&&p.importers?(p.importers.push(r),r.dependencies.push(p)):r.dependencies.push(null);for(var h=t.originalIndices[u],v=0,g=h.length;g>v;++v){var b=h[v];r.setters[b]&&r.setters[b](c)}}}}function i(e,t){var n,a=t.defined[e];if(a)a.declarative?m(e,[],t):a.evaluated||u(a,t),n=a.module.exports;else if(n=t.get(e),!n)throw new Error(\"Unable to load dependency \"+e+\".\");return(!a||a.declarative)&&n&&n.__useDefault?n[\"default\"]:n}function u(t,n){if(!t.module){var a={},r=t.module={exports:a,id:t.name};if(!t.executingRequire)for(var o=0,s=t.normalizedDeps.length;s>o;o++){var l=t.normalizedDeps[o],d=n.defined[l];d&&u(d,n)}t.evaluated=!0;var c=t.execute.call(e,function(e){for(var a=0,r=t.deps.length;r>a;a++)if(t.deps[a]==e)return i(t.normalizedDeps[a],n);throw new TypeError(\"Module \"+e+\" not declared as a dependency.\")},a,r);if(c&&(r.exports=c),a=r.exports,a&&a.__esModule)t.esModule=a;else{if(t.esModule={},\"object\"==typeof a||\"function\"==typeof a)if(p){var f;for(var m in a)(f=Object.getOwnPropertyDescriptor(a,m))&&x(t.esModule,m,f)}else{var h=a&&a.hasOwnProperty;for(var m in a)(!h||a.hasOwnProperty(m))&&(t.esModule[m]=a[m])}t.esModule[\"default\"]=a,x(t.esModule,\"__useDefault\",{value:!0})}}}function m(t,n,a){var r=a.defined[t];if(r&&!r.evaluated&&r.declarative){n.push(t);for(var o=0,s=r.normalizedDeps.length;s>o;o++){var i=r.normalizedDeps[o];-1==w.call(n,i)&&(a.defined[i]?m(i,n,a):a.get(i))}r.evaluated||(r.evaluated=!0,r.module.execute.call(e))}}var p=!0;try{Object.getOwnPropertyDescriptor({a:0},\"a\")}catch(h){p=!1}var v,g=!1;l.prototype.register=function(e,n,a){return\"string\"!=typeof e&&(a=n,n=e,e=null),\"boolean\"==typeof a?this.registerDynamic.apply(this,arguments):void t(this,e,{declarative:!0,deps:n,declare:a})},l.prototype.registerDynamic=function(e,n,a,r){\"string\"!=typeof e&&(r=a,a=n,n=e,e=null),t(this,e,{declarative:!1,deps:n,execute:r,executingRequire:a})},c(function(e){return function(){e.call(this),this.defined={},this._loader.moduleRecords={}}}),d(\"onScriptLoad\",function(e){return function(t){e.call(this,t),g&&(v&&(t.metadata.entry=v),t.metadata.format=t.metadata.format||\"defined\",t.metadata.registered=!0,g=!1,v=null)}}),x(r,\"toString\",{value:function(){return\"Module\"}}),d(\"delete\",function(e){return function(t){return delete this._loader.moduleRecords[t],delete this.defined[t],e.call(this,t)}});var b=/^\\s*(\\/\\*[^\\*]*(\\*(?!\\/)[^\\*]*)*\\*\\/|\\s*\\/\\/[^\\n]*|\\s*\"[^\"]+\"\\s*;?|\\s*'[^']+'\\s*;?)*\\s*System\\.register(Dynamic)?\\s*\\(/;d(\"fetch\",function(e){return function(t){return this.defined[t.name]?(t.metadata.format=\"defined\",\"\"):(v=null,g=!1,\"register\"==t.metadata.format&&(t.metadata.scriptLoad=!0),t.metadata.deps=t.metadata.deps||[],e.call(this,t))}}),d(\"translate\",function(e){return function(t){return Promise.resolve(e.call(this,t)).then(function(e){return\"string\"==typeof t.metadata.deps&&(t.metadata.deps=t.metadata.deps.split(\",\")),t.metadata.deps=t.metadata.deps||[],(\"register\"==t.metadata.format||!t.metadata.format&&t.source.match(b))&&(t.metadata.format=\"register\"),e})}}),d(\"instantiate\",function(e){return function(e){var t,n=this;if(n.defined[e.name])t=n.defined[e.name],t.deps=t.deps.concat(e.metadata.deps);else if(e.metadata.entry)t=e.metadata.entry;else if(e.metadata.execute)t={declarative:!1,deps:e.metadata.deps||[],execute:e.metadata.execute,executingRequire:e.metadata.executingRequire};else if(\"register\"==e.metadata.format||\"esm\"==e.metadata.format||\"es6\"==e.metadata.format){if(v=null,g=!1,R.call(n,e),!g&&!e.metadata.registered)throw new TypeError(e.name+\" detected as System.register but didn't execute.\");v?t=v:e.metadata.bundle=!0,!t&&n.defined[e.name]&&(t=n.defined[e.name]),v=null,g=!1}t||(t={declarative:!1,deps:e.metadata.deps,execute:function(){return n.newModule({})}}),n.defined[e.name]=t;var r=f(t.deps);t.deps=r.names,t.originalIndices=r.indices,t.name=e.name;for(var o=[],s=0,i=t.deps.length;i>s;s++)o.push(Promise.resolve(n.normalize(t.deps[s],e.name)));return Promise.all(o).then(function(r){return t.normalizedDeps=r,{deps:t.deps,execute:function(){return a(e.name,n),m(e.name,[],n),n.defined[e.name]=void 0,n.newModule(t.declarative?t.module.exports:t.esModule)}}})}})}(),function(){var t=/(^\\s*|[}\\);\\n]\\s*)(import\\s+(['\"]|(\\*\\s+as\\s+)?[^\"'\\(\\)\\n;]+\\s+from\\s+['\"]|\\{)|export\\s+\\*\\s+from\\s+[\"']|export\\s+(\\{|default|function|class|var|const|let|async\\s+function))/,n=/\\$traceurRuntime\\s*\\./,a=/babelHelpers\\s*\\./;d(\"translate\",function(r){return function(o){var s=this;return r.call(s,o).then(function(r){if(\"esm\"==o.metadata.format||\"es6\"==o.metadata.format||!o.metadata.format&&r.match(t))return o.metadata.format=\"esm\",s._loadedTranspiler=s._loadedTranspiler||!1,s.pluginLoader&&(s.pluginLoader._loadedTranspiler=s._loadedTranspiler||!1),s.builder&&(o.metadata.originalSource=o.source),k.call(s,o).then(function(e){return o.metadata.sourceMap=void 0,e});if(s._loadedTranspiler===!1&&o.name==s.normalizeSync(s.transpiler)&&(r.length>100&&(o.metadata.format=o.metadata.format||\"global\",\"traceur\"===s.transpiler&&(o.metadata.exports=\"traceur\"),\"typescript\"===s.transpiler&&(o.metadata.exports=\"ts\")),s._loadedTranspiler=!0),s._loadedTranspilerRuntime===!1&&(o.name==s.normalizeSync(\"traceur-runtime\")||o.name==s.normalizeSync(\"babel/external-helpers*\"))&&(r.length>100&&(o.metadata.format=o.metadata.format||\"global\"),s._loadedTranspilerRuntime=!0),\"register\"==o.metadata.format&&s._loadedTranspilerRuntime!==!0){if(!e.$traceurRuntime&&o.source.match(n))return s._loadedTranspilerRuntime=s._loadedTranspilerRuntime||!1,s[\"import\"](\"traceur-runtime\").then(function(){return r});if(!e.babelHelpers&&o.source.match(a))return s._loadedTranspilerRuntime=s._loadedTranspilerRuntime||!1,s[\"import\"](\"babel/external-helpers\").then(function(){return r})}return r})}})}();var P=\"undefined\"!=typeof self?\"self\":\"global\";d(\"onScriptLoad\",function(t){return function(n){if(\"global\"==n.metadata.format){n.metadata.registered=!0;var a=h(n.metadata.exports,e);n.metadata.execute=function(){return a}}return t.call(this,n)}}),d(\"fetch\",function(e){return function(t){return t.metadata.exports&&(t.metadata.format=\"global\"),\"global\"!=t.metadata.format||!t.metadata.exports||t.metadata.globals||t.metadata.deps&&0!=t.metadata.deps.length||(t.metadata.scriptLoad=!0),e.call(this,t)}}),d(\"instantiate\",function(e){return function(t){var n=this;if(t.metadata.format||(t.metadata.format=\"global\"),t.metadata.globals&&t.metadata.globals instanceof Array){for(var a={},r=0;r<t.metadata.globals.length;r++)a[t.metadata.globals[r]]=t.metadata.globals[r];t.metadata.globals=a}if(\"global\"==t.metadata.format&&!t.metadata.registered){for(var o in t.metadata.globals)t.metadata.deps.push(t.metadata.globals[o]);t.metadata.execute=function(e,a,r){var o;if(t.metadata.globals){o={};for(var s in t.metadata.globals)o[s]=e(t.metadata.globals[s])}var i=t.metadata.exports;i&&(t.source+=\"\\n\"+P+'[\"'+i+'\"] = '+i+\";\");var l=n.get(\"@@global-helpers\").prepareGlobal(r.id,i,o);return R.call(n,t),l()}}return e.call(this,t)}}),c(function(t){return function(){function n(t){if(Object.keys)Object.keys(e).forEach(t);else for(var n in e)s.call(e,n)&&t(n)}function a(t){n(function(n){if(-1==w.call(i,n)){try{var a=e[n]}catch(r){i.push(n)}t(n,a)}})}var r=this;t.call(r);var o,s=Object.prototype.hasOwnProperty,i=[\"_g\",\"sessionStorage\",\"localStorage\",\"clipboardData\",\"frames\",\"external\",\"mozAnimationStartTime\",\"webkitStorageInfo\",\"webkitIndexedDB\"];r.set(\"@@global-helpers\",r.newModule({prepareGlobal:function(t,n,r){var s=e.define;e.define=void 0,e.exports=void 0,e.module&&e.module.exports&&(e.module=void 0);var i;if(r){i={};for(var l in r)i[l]=r[l],e[l]=r[l]}return n||(o={},a(function(e,t){o[e]=t})),function(){var t;if(n)t=h(n,e);else{var r,l,u={};a(function(e,t){o[e]!==t&&\"undefined\"!=typeof t&&(u[e]=t,\"undefined\"!=typeof r?l||r===t||(l=!0):r=t)}),t=l?u:r}if(i)for(var d in i)e[d]=i[d];return e.define=s,t}}}))}}),function(){function t(e){a.lastIndex=0;var t=[];e.length/e.split(\"\\n\").length<200&&(e=e.replace(r,\"\"));for(var n;n=a.exec(e);)t.push(n[1].substr(1,n[1].length-2));return t}var n=/(?:^\\uFEFF?|[^$_a-zA-Z\\xA0-\\uFFFF.]|module\\.)exports\\s*(\\[['\"]|\\.)|(?:^\\uFEFF?|[^$_a-zA-Z\\xA0-\\uFFFF.])module\\.exports\\s*[=,]/,a=/(?:^\\uFEFF?|[^$_a-zA-Z\\xA0-\\uFFFF.\"'])require\\s*\\(\\s*(\"[^\"\\\\]*(?:\\\\.[^\"\\\\]*)*\"|'[^'\\\\]*(?:\\\\.[^'\\\\]*)*')\\s*\\)/g,r=/(\\/\\*([\\s\\S]*?)\\*\\/|([^:]|^)\\/\\/(.*)$)/gm;if(\"undefined\"!=typeof window&&\"undefined\"!=typeof document&&window.location)var o=location.protocol+\"//\"+location.hostname+(location.port?\":\"+location.port:\"\");c(function(e){return function(){e.call(this),\"undefined\"!=typeof require&&require.resolve&&\"undefined\"!=typeof process&&(this._nodeRequire=require)}}),d(\"instantiate\",function(r){return function(s){var i=this;if(s.metadata.format||(n.lastIndex=0,a.lastIndex=0,(a.exec(s.source)||n.exec(s.source))&&(s.metadata.format=\"cjs\")),\"cjs\"==s.metadata.format){var l=s.metadata.deps||[];s.metadata.deps=l.concat(t(s.source));for(var u in s.metadata.globals)s.metadata.deps.push(s.metadata.globals[u]);s.metadata.executingRequire=!0,s.metadata.execute=function(t,n,a){for(var r=0;r<l.length;r++)t(l[r]);var u=s.address||\"\",d=u.split(\"/\");d.pop(),d=d.join(\"/\"),o&&u.substr(0,o.length)===o?(u=u.substr(o.length),d=d.substr(o.length)):\"file:///\"==u.substr(0,8)&&(u=u.substr(7),d=d.substr(7),y&&(u=u.substr(1),d=d.substr(1)));var c=e.define;e.define=void 0,e.__cjsWrapper={exports:n,args:[t,n,a,u,d,e]};var f=\"\";if(s.metadata.globals)for(var m in s.metadata.globals)f+=\"var \"+m+' = require(\"'+s.metadata.globals[m]+'\");';s.source=\"(function(require, exports, module, __filename, __dirname, global) {\"+f+s.source+\"\\n}).apply(__cjsWrapper.exports, __cjsWrapper.args);\",R.call(i,s),e.__cjsWrapper=void 0,e.define=c}}return r.call(i,s)}})}(),c(function(t){return function(){function n(e,t){e=e.replace(i,\"\");var n=e.match(d),a=(n[1].split(\",\")[t]||\"require\").replace(c,\"\"),r=f[a]||(f[a]=new RegExp(l+a+u,\"g\"));r.lastIndex=0;for(var o,s=[];o=r.exec(e);)s.push(o[2]||o[3]);return s}function a(e,t,n,r){if(\"object\"==typeof e&&!(e instanceof Array))return a.apply(null,Array.prototype.splice.call(arguments,1,arguments.length-1));if(\"string\"==typeof e&&\"function\"==typeof t&&(e=[e]),!(e instanceof Array)){if(\"string\"==typeof e){var o=s.get(s.normalizeSync(e,r));if(!o)throw new Error('Module not already loaded loading \"'+e+'\" from \"'+r+'\".');return o.__useDefault?o[\"default\"]:o}throw new TypeError(\"Invalid require\")}for(var i=[],l=0;l<e.length;l++)i.push(s[\"import\"](e[l],r));Promise.all(i).then(function(e){t&&t.apply(null,e)},n)}function r(t,r,o){\"string\"!=typeof t&&(o=r,r=t,t=null),r instanceof Array||(o=r,r=[\"require\",\"exports\",\"module\"].splice(0,o.length)),\"function\"!=typeof o&&(o=function(e){return function(){return e}}(o)),void 0===r[r.length-1]&&r.pop();var i,l,u;-1!=(i=w.call(r,\"require\"))&&(r.splice(i,1),t||(r=r.concat(n(o.toString(),i)))),-1!=(l=w.call(r,\"exports\"))&&r.splice(l,1),-1!=(u=w.call(r,\"module\"))&&r.splice(u,1);var d={name:t,deps:r,execute:function(t,n,d){function c(e,n,r){return\"string\"==typeof e&&\"function\"!=typeof n?t(e):a.call(s,e,n,r,d.id)}for(var f=[],m=0;m<r.length;m++)f.push(t(r[m]));d.uri=d.id,d.config=function(){},-1!=u&&f.splice(u,0,d),-1!=l&&f.splice(l,0,n),-1!=i&&(c.toUrl=function(e){var t=s.defaultJSExtensions&&\".js\"!=e.substr(e.length-3,3),n=s.normalizeSync(e,d.id);return t&&\".js\"==n.substr(n.length-3,3)&&(n=n.substr(0,n.length-3)),n},f.splice(i,0,c));var p=e.require;e.require=a;var h=o.apply(-1==l?e:n,f);return e.require=p,\"undefined\"==typeof h&&d&&(h=d.exports),\"undefined\"!=typeof h?h:void 0}};if(t)m.anonDefine||m.isBundle?(m.anonDefine&&m.anonDefine.name&&s.registerDynamic(m.anonDefine.name,m.anonDefine.deps,!1,m.anonDefine.execute),m.anonDefine=null):m.anonDefine=d,m.isBundle=!0,s.registerDynamic(t,d.deps,!1,d.execute);else{if(m.anonDefine)throw new TypeError(\"Multiple defines for anonymous module\");m.anonDefine=d}}function o(t){m.anonDefine=null,m.isBundle=!1;var n=e.module,a=e.exports,o=e.define;return e.module=void 0,e.exports=void 0,e.define=r,function(){e.define=o,e.module=n,e.exports=a}}var s=this;t.call(this);var i=/(\\/\\*([\\s\\S]*?)\\*\\/|([^:]|^)\\/\\/(.*)$)/gm,l=\"(?:^|[^$_a-zA-Z\\\\xA0-\\\\uFFFF.])\",u=\"\\\\s*\\\\(\\\\s*(\\\"([^\\\"]+)\\\"|'([^']+)')\\\\s*\\\\)\",d=/\\(([^\\)]*)\\)/,c=/^\\s+|\\s+$/g,f={};r.amd={};var m={isBundle:!1,anonDefine:null};s.set(\"@@amd-helpers\",s.newModule({createDefine:o,require:a,define:r,lastModule:m})),s.amdDefine=r,s.amdRequire=a}}),function(){var e=/(?:^\\uFEFF?|[^$_a-zA-Z\\xA0-\\uFFFF.])define\\s*\\(\\s*(\"[^\"]+\"\\s*,\\s*|'[^']+'\\s*,\\s*)?\\s*(\\[(\\s*((\"[^\"]+\"|'[^']+')\\s*,|\\/\\/.*\\r?\\n|\\/\\*(.|\\s)*?\\*\\/))*(\\s*(\"[^\"]+\"|'[^']+')\\s*,?)?(\\s*(\\/\\/.*\\r?\\n|\\/\\*(.|\\s)*?\\*\\/))*\\s*\\]|function\\s*|{|[_$a-zA-Z\\xA0-\\uFFFF][_$a-zA-Z0-9\\xA0-\\uFFFF]*\\))/;\nd(\"onScriptLoad\",function(e){return function(t){e.call(this,t);var n=this.get(\"@@amd-helpers\").lastModule;(n.anonDefine||n.isBundle)&&(t.metadata.format=\"defined\",t.metadata.registered=!0,n.isBundle=!1),n.anonDefine&&(t.metadata.deps=t.metadata.deps?t.metadata.deps.concat(n.anonDefine.deps):n.anonDefine.deps,t.metadata.execute=n.anonDefine.execute,n.anonDefine=null)}}),d(\"fetch\",function(e){return function(t){return\"amd\"===t.metadata.format&&(t.metadata.scriptLoad=!0),t.metadata.scriptLoad&&this.get(\"@@amd-helpers\").createDefine(this),e.call(this,t)}}),d(\"instantiate\",function(t){return function(n){var a=this;if(\"amd\"==n.metadata.format||!n.metadata.format&&n.source.match(e)){if(n.metadata.format=\"amd\",a.builder||a.execute===!1)n.metadata.execute=function(){return n.metadata.builderExecute()};else{var r=this.get(\"@@amd-helpers\").createDefine(a);R.call(a,n),r(a);var o=this.get(\"@@amd-helpers\").lastModule;if(!o.anonDefine&&!o.isBundle)throw new TypeError(\"AMD module \"+n.name+\" did not define\");o.anonDefine&&(n.metadata.deps=n.metadata.deps?n.metadata.deps.concat(o.anonDefine.deps):o.anonDefine.deps,n.metadata.execute=o.anonDefine.execute),o.isBundle=!1,o.anonDefine=null}return t.call(a,n)}return t.call(a,n)}})}(),c(function(e){return function(){e.call(this),this.map={}}}),d(\"normalize\",function(e){return function(t,n,a){if(\".\"!=t.substr(0,1)&&\"/\"!=t.substr(0,1)&&!t.match(L)){var r,o=0;for(var s in this.map)if(t.substr(0,s.length)==s&&(t.length==s.length||\"/\"==t[s.length])){var i=s.split(\"/\").length;if(o>=i)continue;r=s,o=i}r&&(t=this.map[r]+t.substr(r.length))}return e.call(this,t,n,a)}}),d(\"normalize\",function(e){return function(t,n){var a=e.call(this,t,n);return this.has(a)?a:(b&&(a=a.replace(/#/g,\"%23\")),a.match(L)?(this.defaultJSExtensions&&\".js\"!=a.substr(a.length-3,3)&&(a+=\".js\"),a):(a=s(this.paths,a)||a,this.defaultJSExtensions&&\".js\"!=a.substr(a.length-3,3)&&(a+=\".js\"),\".\"==a[0]||\"/\"==a[0]?new _(a,F).href:new _(a,v.call(this)).href))}}),function(){function e(e){for(var t in this.packages)if(e.substr(0,t.length)===t&&(e.length===t.length||\"/\"===e[t.length]))return t}function t(e,t){var n,a=0;for(var r in e)if(t.substr(0,r.length)==r&&(t.length==r.length||\"/\"==t[r.length])){var o=r.split(\"/\").length;if(a>=o)continue;n=r,a=o}return n}function n(e,n,a,r){var o=t(a,r),s=a[o];return s?\"object\"==typeof s?e[\"import\"](a[\"@env\"]||\"@system-env\",n).then(function(e){for(var t in s){var n=\"~\"==t[0],a=h(n?t.substr(1):t,e);if(!n&&a||n&&!a)return s[t]+r.substr(o.length)}}):s+r.substr(o.length):void 0}function a(a,r){return function(o,s){if(s)var i=e.call(this,s)||this.defaultJSExtensions&&\".js\"==s.substr(s.length-3,3)&&e.call(this,s.substr(0,s.length-3));if(i&&\".\"!==o[0]){var l=this.packages[i].map;if(l){var u=t(l,o);u&&(o=l[u]+o.substr(u.length),\".\"===o[0]&&(s=i+\"/\"))}}var d=this.defaultJSExtensions&&\".js\"!=o.substr(o.length-3,3),c=a.call(this,o,s);\".js\"!=c.substr(c.length-3,3)&&(d=!1),d&&(c=c.substr(0,c.length-3));var f=e.call(this,c),m=this;if(f){var p=m.packages[f];if(f===c&&p.main&&(c+=\"/\"+(\"./\"==p.main.substr(0,2)?p.main.substr(2):p.main)),\"/\"==c.substr(f.length))return c;var h=\"\";if(p.meta&&(p.meta[c.substr(f.length+1)]||p.meta[\"./\"+c.substr(f.length+1)])||(\"defaultExtension\"in p?p.defaultExtension!==!1&&-1==c.split(\"/\").pop().lastIndexOf(\".\")&&(h=\".\"+p.defaultExtension):d&&(h=\".js\")),r||!p.map)return c+h;var v=\".\"+c.substr(f.length);return Promise.resolve(n(m,f,p.map,v)).then(function(e){return e?e:h?n(m,f,p.map,v+h):void 0}).then(function(e){return e?c=\"./\"==e.substr(0,2)?f+e.substr(1):a.call(m,e):c+=h,c})}return d&&(c+=\".js\"),c}}c(function(e){return function(){e.call(this),this.packages={}}}),l.prototype.normalizeSync=l.prototype.normalize,d(\"normalizeSync\",function(e){return a(e,!0)}),d(\"normalize\",function(e){return a(e,!1)}),d(\"locate\",function(t){return function(n){var a=this;return Promise.resolve(t.call(this,n)).then(function(t){var r=e.call(a,n.name);if(r){var o=a.packages[r];if(o.format&&(n.metadata.format=n.metadata.format||o.format),o.loader&&(n.metadata.loader=n.metadata.loader||o.loader),o.meta){var s,i={},l=0;for(var u in o.meta){var d=\"./\"==u.substr(0,2)?\"./\":\"\";if(d&&(u=u.substr(2)),s=u.indexOf(\"*\"),-1!==s&&u.substr(0,s)===n.name.substr(0,s)&&u.substr(s+1)===n.name.substr(n.name.length-u.length+s+1)){var c=u.split(\"/\").length;c>l&&(bestDetph=c),p(i,o.meta[d+u],l!=c)}}var f=n.name.substr(r.length+1),m=o.meta[f]||o.meta[\"./\"+f];m&&p(i,m),i.alias&&\"./\"==i.alias.substr(0,2)&&(i.alias=r+i.alias.substr(1)),i.loader&&\"./\"==i.loader.substr(0,2)&&(i.loader=r+i.loader.substr(1)),p(n.metadata,i)}}return t})}})}(),function(){function e(e,t,n,a){function r(e,t){return d&&\".js\"==e.substr(e.length-3,3)&&(e=e.substr(0,e.length-3)),o.pluginFirst?t+\"!\"+e:e+\"!\"+t}var o=this;if(n){var s;o.pluginFirst?-1!=(s=n.lastIndexOf(\"!\"))&&(n=n.substr(s+1)):-1!=(s=n.indexOf(\"!\"))&&(n=n.substr(0,s))}var i=t.lastIndexOf(\"!\");if(-1!=i){var l,u;o.pluginFirst?(l=t.substr(i+1),u=t.substr(0,i)):(l=t.substr(0,i),u=t.substr(i+1)||l.substr(l.lastIndexOf(\".\")+1));var d=o.defaultJSExtensions&&\".js\"!=l.substr(l.length-3,3);return a?(l=o.normalizeSync(l,n),u=o.normalizeSync(u,n),r(l,u)):Promise.all([o.normalize(l,n),o.normalize(u,n)]).then(function(e){return r(e[0],e[1])})}return e.call(o,t,n)}d(\"normalize\",function(t){return function(n,a){return e.call(this,t,n,a,!1)}}),d(\"normalizeSync\",function(t){return function(n,a){return e.call(this,t,n,a,!0)}}),d(\"locate\",function(e){return function(t){var n,a=this,r=t.name;return a.pluginFirst?-1!=(n=r.indexOf(\"!\"))&&(t.metadata.loader=r.substr(0,n),t.name=r.substr(n+1)):-1!=(n=r.lastIndexOf(\"!\"))&&(t.metadata.loader=r.substr(n+1),t.name=r.substr(0,n)),e.call(a,t).then(function(e){var n=t.metadata.loader;if(!n)return e;if(a.defined&&a.defined[r])return e;var o=a.pluginLoader||a;return o[\"import\"](n).then(function(n){return t.metadata.loaderModule=n,t.metadata.loaderArgument=r,t.address=e,n.locate?n.locate.call(a,t):e})})}}),d(\"fetch\",function(e){return function(t){var n=this;return t.metadata.loaderModule&&t.metadata.loaderModule.fetch?(t.metadata.scriptLoad=!1,t.metadata.loaderModule.fetch.call(n,t,function(t){return e.call(n,t)})):e.call(n,t)}}),d(\"translate\",function(e){return function(t){var n=this;return t.metadata.loaderModule&&t.metadata.loaderModule.translate?Promise.resolve(t.metadata.loaderModule.translate.call(n,t)).then(function(a){return\"string\"==typeof a&&(t.source=a),e.call(n,t)}):e.call(n,t)}}),d(\"instantiate\",function(e){return function(t){var n=this,a=t.metadata.sourceMap;if(a&&\"object\"==typeof a){var r=t.name.split(\"!\")[0];a.file=r+\"!transpiled\",a.sources&&1!=a.sources.length||(a.sources=[r]),t.metadata.sourceMap=JSON.stringify(a)}return t.metadata.loaderModule&&t.metadata.loaderModule.instantiate?Promise.resolve(t.metadata.loaderModule.instantiate.call(n,t)).then(function(a){return t.metadata.format=\"defined\",t.metadata.execute=function(){return a},e.call(n,t)}):e.call(n,t)}})}(),function(){d(\"fetch\",function(e){return function(t){var n=t.metadata.alias,a=t.metadata.deps||[];return n?(t.metadata.format=\"defined\",this.defined[t.name]={declarative:!0,deps:a.concat([n]),declare:function(e){return{setters:[function(t){for(var n in t)e(n,t[n])}],execute:function(){}}}},\"\"):e.call(this,t)}})}(),function(){function e(e,t,n){for(var a,r=t.split(\".\");r.length>1;)a=r.shift(),e=e[a]=e[a]||{};a=r.shift(),a in e||(e[a]=n)}c(function(e){return function(){this.meta={},e.call(this)}}),d(\"locate\",function(e){return function(t){var n,a=this.meta,r=t.name,o=0;for(var s in a)if(n=s.indexOf(\"*\"),-1!==n&&s.substr(0,n)===r.substr(0,n)&&s.substr(n+1)===r.substr(r.length-s.length+n+1)){var i=s.split(\"/\").length;i>o&&(bestDetph=i),p(t.metadata,a[s],o!=i)}return a[r]&&p(t.metadata,a[r]),e.call(this,t)}});var t=/^(\\s*\\/\\*[^\\*]*(\\*(?!\\/)[^\\*]*)*\\*\\/|\\s*\\/\\/[^\\n]*|\\s*\"[^\"]+\"\\s*;?|\\s*'[^']+'\\s*;?)+/,n=/\\/\\*[^\\*]*(\\*(?!\\/)[^\\*]*)*\\*\\/|\\/\\/[^\\n]*|\"[^\"]+\"\\s*;?|'[^']+'\\s*;?/g;d(\"translate\",function(a){return function(r){var o=r.source.match(t);if(o)for(var s=o[0].match(n),i=0;i<s.length;i++){var l=s[i],u=l.length,d=l.substr(0,1);if(\";\"==l.substr(u-1,1)&&u--,'\"'==d||\"'\"==d){var c=l.substr(1,l.length-3),f=c.substr(0,c.indexOf(\" \"));if(f){var m=c.substr(f.length+1,c.length-f.length-1);\"[]\"==f.substr(f.length-2,2)&&(f=f.substr(0,f.length-2),r.metadata[f]=r.metadata[f]||[]),r.metadata[f]instanceof Array?r.metadata[f].push(m):e(r.metadata,f,m)}else r.metadata[c]=!0}}return a.call(this,r)}})}(),function(){function e(e,t){return Promise.resolve(e.normalize(t)).then(function(n){return e.loadedBundles_[n]=!0,e.bundles[n]=e.bundles[n]||e.bundles[t],e.load(n)}).then(function(){return\"\"})}c(function(e){return function(){e.call(this),this.bundles={},this.loadedBundles_={}}}),d(\"locate\",function(e){return function(t){return(t.name in this.loadedBundles_||t.name in this.bundles)&&(t.metadata.bundle=!0),e.call(this,t)}}),d(\"fetch\",function(t){return function(n){var a=this;if(a.trace)return t.call(a,n);if(n.name in a.defined)return\"\";for(var r in a.loadedBundles_)if(-1!=w.call(a.bundles[r],n.name))return e(a,r);for(var r in a.bundles)if(-1!=w.call(a.bundles[r],n.name))return e(a,r);return t.call(a,n)}})}(),function(){c(function(e){return function(){e.call(this),this.depCache={}}}),d(\"locate\",function(e){return function(t){var n=this,a=n.depCache[t.name];if(a)for(var r=0;r<a.length;r++)n[\"import\"](a[r]);return e.call(n,t)}})}(),function(){var e=/#\\{[^\\}]+\\}|#\\?.+$/;c(function(e){return function(){e.call(this),this.set(\"@system-env\",this.newModule({browser:b}))}}),d(\"normalize\",function(t){return function(n,a,r){var o=this,s=n.match(e);if(s){var i=\"?\"!=s[0][1],l=i?s[0].substr(2,s[0].length-3):s[0].substr(2);if(\".\"==l[0]||-1!=l.indexOf(\"/\"))throw new TypeError(\"Invalid condition \"+s[0]+\"\\n\tCondition modules cannot contain . or / in the name.\");var u,d=l.indexOf(\".\");-1!=d&&(u=l.substr(d+1),l=l.substr(0,d));var c=!i&&\"~\"==l[0];c&&(l=l.substr(1));var f=o.pluginLoader||o;return f[\"import\"](l,a,r).then(function(e){return void 0===u?\"string\"==typeof e?e:e[\"default\"]:h(u,e)}).then(function(s){if(i){if(\"string\"!=typeof s)throw new TypeError(\"The condition value for \"+l+\" doesn't resolve to a string.\");n=n.replace(e,s)}else{if(\"boolean\"!=typeof s)throw new TypeError(\"The condition value for \"+l+\" isn't resolving to a boolean.\");c&&(s=!s),n=s?n.replace(e,\"\"):\"@empty\"}return t.call(o,n,a,r)})}return Promise.resolve(t.call(o,n,a,r))}})}(),j=new l,j.constructor=l,\"object\"==typeof exports&&(module.exports=r),e.Reflect=e.Reflect||{},e.Reflect.Loader=e.Reflect.Loader||r,e.Reflect.global=e.Reflect.global||e,e.LoaderPolyfill=r,j||(j=new o,j.constructor=o),\"object\"==typeof exports&&(module.exports=j),e.System=j}(\"undefined\"!=typeof self?self:global)}try{var t=\"undefined\"!=typeof URLPolyfill||\"test:\"==new URL(\"test:///\").protocol}catch(n){}if(\"undefined\"!=typeof Promise&&t)e();else if(\"undefined\"!=typeof document){var a=document.getElementsByTagName(\"script\");$__curScript=a[a.length-1];var r=$__curScript.src,o=r.substr(0,r.lastIndexOf(\"/\")+1);window.systemJSBootstrap=e,document.write('<script type=\"text/javascript\" src=\"'+o+'system-polyfills.js\"></script>')}else if(\"undefined\"!=typeof importScripts){var o=\"\";try{throw new Error(\"_\")}catch(n){n.stack.replace(/(?:at|@).*(http.+):[\\d]+:[\\d]+/,function(e,t){o=t.replace(/\\/[^\\/]*$/,\"/\")})}importScripts(o+\"system-polyfills.js\"),e()}else e()}();\n//# sourceMappingURL=system.js.map\n\nSystem.config({ 'paths': { '@reactivex/*': '@reactivex/*.js' }});\nSystem.config({ 'paths': { '@reactivex/*': '@reactivex/*.js' }});\nSystem.config({ 'paths': { '@reactivex/*': '@reactivex/*.js' }});\nSystem.config({ 'paths': { '@reactivex/*': '@reactivex/*.js' }});\n/**\n @license\nCopyright 2014-2015 Google, Inc. http://angularjs.org\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n   http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n\n */\n\n(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error(\"Cannot find module '\"+o+\"'\");throw f.code=\"MODULE_NOT_FOUND\",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require==\"function\"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(require,module,exports){\n(function (global){\n'use strict';\n\nvar core = require('../core');\nvar microtask = require('../microtask');\nvar browserPatch = require('../patch/browser');\nvar es6Promise = require('es6-promise');\n\nif (global.Zone) {\n  console.warn('Zone already exported on window the object!');\n}\n\nglobal.Zone = microtask.addMicrotaskSupport(core.Zone);\nglobal.zone = new global.Zone();\n\n// Monkey path ẗhe Promise implementation to add support for microtasks\nglobal.Promise = es6Promise.Promise;\n\nbrowserPatch.apply();\n\n}).call(this,typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n},{\"../core\":2,\"../microtask\":4,\"../patch/browser\":5,\"es6-promise\":17}],2:[function(require,module,exports){\n(function (global){\n'use strict';\n\nvar keys = require('./keys');\n\nfunction Zone(parentZone, data) {\n  var zone = (arguments.length) ? Object.create(parentZone) : this;\n\n  zone.parent = parentZone || null;\n\n  Object.keys(data || {}).forEach(function(property) {\n\n    var _property = property.substr(1);\n\n    // augment the new zone with a hook decorates the parent's hook\n    if (property[0] === '$') {\n      zone[_property] = data[property](parentZone[_property] || function () {});\n\n    // augment the new zone with a hook that runs after the parent's hook\n    } else if (property[0] === '+') {\n      if (parentZone[_property]) {\n        zone[_property] = function () {\n          var result = parentZone[_property].apply(this, arguments);\n          data[property].apply(this, arguments);\n          return result;\n        };\n      } else {\n        zone[_property] = data[property];\n      }\n\n    // augment the new zone with a hook that runs before the parent's hook\n    } else if (property[0] === '-') {\n      if (parentZone[_property]) {\n        zone[_property] = function () {\n          data[property].apply(this, arguments);\n          return parentZone[_property].apply(this, arguments);\n        };\n      } else {\n        zone[_property] = data[property];\n      }\n\n    // set the new zone's hook (replacing the parent zone's)\n    } else {\n      zone[property] = (typeof data[property] === 'object') ?\n                        JSON.parse(JSON.stringify(data[property])) :\n                        data[property];\n    }\n  });\n\n  zone.$id = Zone.nextId++;\n\n  return zone;\n}\n\nZone.prototype = {\n  constructor: Zone,\n\n  fork: function (locals) {\n    this.onZoneCreated();\n    return new Zone(this, locals);\n  },\n\n  bind: function (fn, skipEnqueue) {\n    if (typeof fn !== 'function') {\n      throw new Error('Expecting function got: ' + fn);\n    }\n    skipEnqueue || this.enqueueTask(fn);\n    var zone = this.isRootZone() ? this : this.fork();\n    return function zoneBoundFn() {\n      return zone.run(fn, this, arguments);\n    };\n  },\n\n  bindOnce: function (fn) {\n    var boundZone = this;\n    return this.bind(function () {\n      var result = fn.apply(this, arguments);\n      boundZone.dequeueTask(fn);\n      return result;\n    });\n  },\n\n  isRootZone: function() {\n    return this.parent === null;\n  },\n\n  run: function run (fn, applyTo, applyWith) {\n    applyWith = applyWith || [];\n\n    var oldZone = global.zone;\n\n    // MAKE THIS ZONE THE CURRENT ZONE\n    global.zone = this;\n\n    try {\n      this.beforeTask();\n      return fn.apply(applyTo, applyWith);\n    } catch (e) {\n      if (this.onError) {\n        this.onError(e);\n      } else {\n        throw e;\n      }\n    } finally {\n      this.afterTask();\n      // REVERT THE CURRENT ZONE BACK TO THE ORIGINAL ZONE\n      global.zone = oldZone;\n    }\n  },\n\n  // onError is used to override error handling.\n  // When a custom error handler is provided, it should most probably rethrow the exception\n  // not to break the expected control flow:\n  //\n  // `promise.then(fnThatThrows).catch(fn);`\n  //\n  // When this code is executed in a zone with a custom onError handler that doesn't rethrow, the\n  // `.catch()` branch will not be taken as the `fnThatThrows` exception will be swallowed by the\n  // handler.\n  onError: null,\n  beforeTask: function () {},\n  onZoneCreated: function () {},\n  afterTask: function () {},\n  enqueueTask: function () {},\n  dequeueTask: function () {},\n  addEventListener: function () {\n    return this[keys.common.addEventListener].apply(this, arguments);\n  },\n  removeEventListener: function () {\n    return this[keys.common.removeEventListener].apply(this, arguments);\n  }\n};\n\n// Root zone ID === 1\nZone.nextId = 1;\n\nZone.bindPromiseFn = require('./patch/promise').bindPromiseFn;\n\nmodule.exports = {\n  Zone: Zone\n};\n\n}).call(this,typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n},{\"./keys\":3,\"./patch/promise\":12}],3:[function(require,module,exports){\n/**\n * Creates keys for `private` properties on exposed objects to minimize interactions with other codebases.\n * The key will be a Symbol if the host supports it; otherwise a prefixed string.\n */\nif (typeof Symbol !== 'undefined') {\n  function create(name) {\n    return Symbol(name);\n  }\n} else {\n  function create(name) {\n    return '_zone$' + name;\n  }\n}\n\nvar commonKeys = {\n  addEventListener: create('addEventListener'),\n  removeEventListener: create('removeEventListener')\n};\n\nmodule.exports = {\n  create: create,\n  common: commonKeys\n};\n},{}],4:[function(require,module,exports){\n(function (global){\n'use strict';\n\nvar es6Promise = require('es6-promise').Promise;\n\n// es6-promise asap should schedule microtasks via zone.scheduleMicrotask so that any\n// user defined hooks are triggered\nes6Promise._setAsap(function(fn, arg) {\n  global.zone.scheduleMicrotask(function() {\n    fn(arg);\n  });\n});\n\n// The default implementation of scheduleMicrotask use the original es6-promise implementation\n// to schedule a microtask\nfunction scheduleMicrotask(fn) {\n  es6Promise._asap(this.bind(fn));\n}\n\nfunction addMicrotaskSupport(zoneClass) {\n  zoneClass.prototype.scheduleMicrotask = scheduleMicrotask;\n  return zoneClass;\n}\n\nmodule.exports = {\n  addMicrotaskSupport: addMicrotaskSupport\n};\n\n// TODO(vicb): Create a benchmark for the different methods & the usage of the queue\n// see https://github.com/angular/zone.js/issues/97\n\nvar hasNativePromise = typeof Promise !== \"undefined\" &&\n                       Promise.toString().indexOf(\"[native code]\") !== -1;\n\nvar isFirefox = global.navigator &&\n                global.navigator.userAgent.toLowerCase().indexOf('firefox') > -1;\n\n// TODO(vicb): remove '!isFirefox' when the bug gets fixed:\n// https://bugzilla.mozilla.org/show_bug.cgi?id=1162013\nif (hasNativePromise && !isFirefox) {\n  // When available use a native Promise to schedule microtasks.\n  // When not available, es6-promise fallback will be used\n  var resolvedPromise = Promise.resolve();\n  es6Promise._setScheduler(function(fn) {\n    resolvedPromise.then(fn);\n  });\n}\n\n\n}).call(this,typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n},{\"es6-promise\":17}],5:[function(require,module,exports){\n(function (global){\n'use strict';\n\nvar fnPatch = require('./functions');\nvar promisePatch = require('./promise');\nvar mutationObserverPatch = require('./mutation-observer');\nvar definePropertyPatch = require('./define-property');\nvar registerElementPatch = require('./register-element');\nvar webSocketPatch = require('./websocket');\nvar eventTargetPatch = require('./event-target');\nvar propertyDescriptorPatch = require('./property-descriptor');\nvar geolocationPatch = require('./geolocation');\nvar fileReaderPatch = require('./file-reader');\n\nfunction apply() {\n  fnPatch.patchSetClearFunction(global, [\n    'timeout',\n    'interval',\n    'immediate'\n  ]);\n\n  fnPatch.patchRequestAnimationFrame(global, [\n    'requestAnimationFrame',\n    'mozRequestAnimationFrame',\n    'webkitRequestAnimationFrame'\n  ]);\n\n  fnPatch.patchFunction(global, [\n    'alert',\n    'prompt'\n  ]);\n\n  eventTargetPatch.apply();\n\n  propertyDescriptorPatch.apply();\n\n  promisePatch.apply();\n\n  mutationObserverPatch.patchClass('MutationObserver');\n  mutationObserverPatch.patchClass('WebKitMutationObserver');\n\n  definePropertyPatch.apply();\n\n  registerElementPatch.apply();\n\n  geolocationPatch.apply();\n\n  fileReaderPatch.apply();\n}\n\nmodule.exports = {\n  apply: apply\n};\n\n}).call(this,typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n},{\"./define-property\":6,\"./event-target\":7,\"./file-reader\":8,\"./functions\":9,\"./geolocation\":10,\"./mutation-observer\":11,\"./promise\":12,\"./property-descriptor\":13,\"./register-element\":14,\"./websocket\":15}],6:[function(require,module,exports){\n'use strict';\n\nvar keys = require('../keys');\n\n// might need similar for object.freeze\n// i regret nothing\n\nvar _defineProperty = Object.defineProperty;\nvar _getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\nvar _create = Object.create;\nvar unconfigurablesKey = keys.create('unconfigurables');\n\nfunction apply() {\n  Object.defineProperty = function (obj, prop, desc) {\n    if (isUnconfigurable(obj, prop)) {\n      throw new TypeError('Cannot assign to read only property \\'' + prop + '\\' of ' + obj);\n    }\n    if (prop !== 'prototype') {\n      desc = rewriteDescriptor(obj, prop, desc);\n    }\n    return _defineProperty(obj, prop, desc);\n  };\n\n  Object.defineProperties = function (obj, props) {\n    Object.keys(props).forEach(function (prop) {\n      Object.defineProperty(obj, prop, props[prop]);\n    });\n    return obj;\n  };\n\n  Object.create = function (obj, proto) {\n    if (typeof proto === 'object') {\n      Object.keys(proto).forEach(function (prop) {\n        proto[prop] = rewriteDescriptor(obj, prop, proto[prop]);\n      });\n    }\n    return _create(obj, proto);\n  };\n\n  Object.getOwnPropertyDescriptor = function (obj, prop) {\n    var desc = _getOwnPropertyDescriptor(obj, prop);\n    if (isUnconfigurable(obj, prop)) {\n      desc.configurable = false;\n    }\n    return desc;\n  };\n};\n\nfunction _redefineProperty(obj, prop, desc) {\n  desc = rewriteDescriptor(obj, prop, desc);\n  return _defineProperty(obj, prop, desc);\n};\n\nfunction isUnconfigurable (obj, prop) {\n  return obj && obj[unconfigurablesKey] && obj[unconfigurablesKey][prop];\n}\n\nfunction rewriteDescriptor (obj, prop, desc) {\n  desc.configurable = true;\n  if (!desc.configurable) {\n    if (!obj[unconfigurablesKey]) {\n      _defineProperty(obj, unconfigurablesKey, { writable: true, value: {} });\n    }\n    obj[unconfigurablesKey][prop] = true;\n  }\n  return desc;\n}\n\nmodule.exports = {\n  apply: apply,\n  _redefineProperty: _redefineProperty\n};\n\n\n\n},{\"../keys\":3}],7:[function(require,module,exports){\n(function (global){\n'use strict';\n\nvar utils = require('../utils');\n\nfunction apply() {\n  // patched properties depend on addEventListener, so this needs to come first\n  if (global.EventTarget) {\n    utils.patchEventTargetMethods(global.EventTarget.prototype);\n\n  // Note: EventTarget is not available in all browsers,\n  // if it's not available, we instead patch the APIs in the IDL that inherit from EventTarget\n  } else {\n    var apis = [\n      'ApplicationCache',\n      'EventSource',\n      'FileReader',\n      'InputMethodContext',\n      'MediaController',\n      'MessagePort',\n      'Node',\n      'Performance',\n      'SVGElementInstance',\n      'SharedWorker',\n      'TextTrack',\n      'TextTrackCue',\n      'TextTrackList',\n      'WebKitNamedFlow',\n      'Worker',\n      'WorkerGlobalScope',\n      'XMLHttpRequest',\n      'XMLHttpRequestEventTarget',\n      'XMLHttpRequestUpload'\n    ];\n\n    apis.forEach(function(api) {\n      var proto = global[api] && global[api].prototype;\n\n      // Some browsers e.g. Android 4.3's don't actually implement\n      // the EventTarget methods for all of these e.g. FileReader.\n      // In this case, there is nothing to patch.\n      if (proto && proto.addEventListener) {\n        utils.patchEventTargetMethods(proto);\n      }\n    });\n\n    // Patch the methods on `window` instead of `Window.prototype`\n    // `Window` is not accessible on Android 4.3\n    if (typeof(window) !== 'undefined') {\n      utils.patchEventTargetMethods(window);\n    }\n  }\n}\n\nmodule.exports = {\n  apply: apply\n};\n\n}).call(this,typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n},{\"../utils\":16}],8:[function(require,module,exports){\n'use strict';\n\nvar utils = require('../utils');\n\nfunction apply() {\n  utils.patchClass('FileReader');\n}\n\nmodule.exports = {\n  apply: apply\n};\n},{\"../utils\":16}],9:[function(require,module,exports){\n(function (global){\n'use strict';\n\nvar utils = require('../utils');\n\nfunction patchSetClearFunction(obj, fnNames) {\n  fnNames.map(function (name) {\n    return name[0].toUpperCase() + name.substr(1);\n  }).forEach(function (name) {\n    var setName = 'set' + name;\n    var delegate = obj[setName];\n\n    if (delegate) {\n      var clearName = 'clear' + name;\n      var ids = {};\n\n      var bindArgs = setName === 'setInterval' ? utils.bindArguments : utils.bindArgumentsOnce;\n\n      global.zone[setName] = function (fn) {\n        var id, fnRef = fn;\n        arguments[0] = function () {\n          delete ids[id];\n          return fnRef.apply(this, arguments);\n        };\n        var args = bindArgs(arguments);\n        id = delegate.apply(obj, args);\n        ids[id] = true;\n        return id;\n      };\n\n      obj[setName] = function () {\n        return global.zone[setName].apply(this, arguments);\n      };\n\n      var clearDelegate = obj[clearName];\n\n      global.zone[clearName] = function (id) {\n        if (ids[id]) {\n          delete ids[id];\n          global.zone.dequeueTask();\n        }\n        return clearDelegate.apply(this, arguments);\n      };\n\n      obj[clearName] = function () {\n        return global.zone[clearName].apply(this, arguments);\n      };\n    }\n  });\n};\n\n\n/**\n * requestAnimationFrame is typically recursively called from within the callback function\n * that it executes.  To handle this case, only fork a zone if this is executed\n * within the root zone.\n */\nfunction patchRequestAnimationFrame(obj, fnNames) {\n  fnNames.forEach(function (name) {\n    var delegate = obj[name];\n    if (delegate) {\n      global.zone[name] = function (fn) {\n        var callZone = global.zone.isRootZone() ? global.zone.fork() : global.zone;\n        if (fn) {\n          arguments[0] = function () {\n            return callZone.run(fn, this, arguments);\n          };\n        }\n        return delegate.apply(obj, arguments);\n      };\n\n      obj[name] = function () {\n        return global.zone[name].apply(this, arguments);\n      };\n    }\n  });\n};\n\nfunction patchSetFunction(obj, fnNames) {\n  fnNames.forEach(function (name) {\n    var delegate = obj[name];\n\n    if (delegate) {\n      global.zone[name] = function (fn) {\n        arguments[0] = function () {\n          return fn.apply(this, arguments);\n        };\n        var args = utils.bindArgumentsOnce(arguments);\n        return delegate.apply(obj, args);\n      };\n\n      obj[name] = function () {\n        return zone[name].apply(this, arguments);\n      };\n    }\n  });\n};\n\nfunction patchFunction(obj, fnNames) {\n  fnNames.forEach(function (name) {\n    var delegate = obj[name];\n    global.zone[name] = function () {\n      return delegate.apply(obj, arguments);\n    };\n\n    obj[name] = function () {\n      return global.zone[name].apply(this, arguments);\n    };\n  });\n};\n\n\nmodule.exports = {\n  patchSetClearFunction: patchSetClearFunction,\n  patchSetFunction: patchSetFunction,\n  patchRequestAnimationFrame: patchRequestAnimationFrame,\n  patchFunction: patchFunction\n};\n\n}).call(this,typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n},{\"../utils\":16}],10:[function(require,module,exports){\n(function (global){\n'use strict';\n\nvar utils = require('../utils');\n\nfunction apply() {\n  if (global.navigator && global.navigator.geolocation) {\n    utils.patchPrototype(global.navigator.geolocation, [\n      'getCurrentPosition',\n      'watchPosition'\n    ]);\n  }\n}\n\nmodule.exports = {\n  apply: apply\n}\n\n}).call(this,typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n},{\"../utils\":16}],11:[function(require,module,exports){\n(function (global){\n'use strict';\n\nvar keys = require('../keys');\n\nvar originalInstanceKey = keys.create('originalInstance');\nvar creationZoneKey = keys.create('creationZone');\nvar isActiveKey = keys.create('isActive');\n\n// wrap some native API on `window`\nfunction patchClass(className) {\n  var OriginalClass = global[className];\n  if (!OriginalClass) return;\n\n  global[className] = function (fn) {\n    this[originalInstanceKey] = new OriginalClass(global.zone.bind(fn, true));\n    // Remember where the class was instantiate to execute the enqueueTask and dequeueTask hooks\n    this[creationZoneKey] = global.zone;\n  };\n\n  var instance = new OriginalClass(function () {});\n\n  global[className].prototype.disconnect = function () {\n    var result = this[originalInstanceKey].disconnect.apply(this[originalInstanceKey], arguments);\n    if (this[isActiveKey]) {\n      this[creationZoneKey].dequeueTask();\n      this[isActiveKey] = false;\n    }\n    return result;\n  };\n\n  global[className].prototype.observe = function () {\n    if (!this[isActiveKey]) {\n      this[creationZoneKey].enqueueTask();\n      this[isActiveKey] = true;\n    }\n    return this[originalInstanceKey].observe.apply(this[originalInstanceKey], arguments);\n  };\n\n  var prop;\n  for (prop in instance) {\n    (function (prop) {\n      if (typeof global[className].prototype !== undefined) {\n        return;\n      }\n      if (typeof instance[prop] === 'function') {\n        global[className].prototype[prop] = function () {\n          return this[originalInstanceKey][prop].apply(this[originalInstanceKey], arguments);\n        };\n      } else {\n        Object.defineProperty(global[className].prototype, prop, {\n          set: function (fn) {\n            if (typeof fn === 'function') {\n              this[originalInstanceKey][prop] = global.zone.bind(fn);\n            } else {\n              this[originalInstanceKey][prop] = fn;\n            }\n          },\n          get: function () {\n            return this[originalInstanceKey][prop];\n          }\n        });\n      }\n    }(prop));\n  }\n};\n\nmodule.exports = {\n  patchClass: patchClass\n};\n\n}).call(this,typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n},{\"../keys\":3}],12:[function(require,module,exports){\n(function (global){\n'use strict';\n\nvar utils = require('../utils');\n\n/*\n * Patches a function that returns a Promise-like instance.\n *\n * This function must be used when either:\n * - Native Promises are not available,\n * - The function returns a Promise-like object.\n *\n * This is required because zones rely on a Promise monkey patch that could not be applied when\n * Promise is not natively available or when the returned object is not an instance of Promise.\n *\n * Note that calling `bindPromiseFn` on a function that returns a native Promise will also work\n * with minimal overhead.\n *\n * ```\n * var boundFunction = bindPromiseFn(FunctionReturningAPromise);\n *\n * boundFunction.then(successHandler, errorHandler);\n * ```\n */\nvar bindPromiseFn;\n\nif (global.Promise) {\n  bindPromiseFn = function (delegate) {\n    return function() {\n      var delegatePromise = delegate.apply(this, arguments);\n\n      // if the delegate returned an instance of Promise, forward it.\n      if (delegatePromise instanceof Promise) {\n        return delegatePromise;\n      }\n\n      // Otherwise wrap the Promise-like in a global Promise\n      return new Promise(function(resolve, reject) {\n        delegatePromise.then(resolve, reject);\n      });\n    };\n  };\n} else {\n  bindPromiseFn = function (delegate) {\n    return function () {\n      return _patchThenable(delegate.apply(this, arguments));\n    };\n  };\n}\n\n\nfunction _patchPromiseFnsOnObject(objectPath, fnNames) {\n  var obj = global;\n\n  var exists = objectPath.every(function (segment) {\n    obj = obj[segment];\n    return obj;\n  });\n\n  if (!exists) {\n    return;\n  }\n\n  fnNames.forEach(function (name) {\n    var fn = obj[name];\n    if (fn) {\n      obj[name] = bindPromiseFn(fn);\n    }\n  });\n}\n\nfunction _patchThenable(thenable) {\n  var then = thenable.then;\n  thenable.then = function () {\n    var args = utils.bindArguments(arguments);\n    var nextThenable = then.apply(thenable, args);\n    return _patchThenable(nextThenable);\n  };\n\n  var ocatch = thenable.catch;\n  thenable.catch = function () {\n    var args = utils.bindArguments(arguments);\n    var nextThenable = ocatch.apply(thenable, args);\n    return _patchThenable(nextThenable);\n  };\n\n  return thenable;\n}\n\n\nfunction apply() {\n  // Patch .then() and .catch() on native Promises to execute callbacks in the zone where\n  // those functions are called.\n  if (global.Promise) {\n    utils.patchPrototype(Promise.prototype, [\n      'then',\n      'catch'\n    ]);\n\n    // Patch browser APIs that return a Promise\n    var patchFns = [\n      // fetch\n      [[], ['fetch']],\n      [['Response', 'prototype'], ['arrayBuffer', 'blob', 'json', 'text']]\n    ];\n\n    patchFns.forEach(function(objPathAndFns) {\n      _patchPromiseFnsOnObject(objPathAndFns[0], objPathAndFns[1]);\n    });\n  }\n}\n\nmodule.exports = {\n  apply: apply,\n  bindPromiseFn: bindPromiseFn\n};\n\n}).call(this,typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n},{\"../utils\":16}],13:[function(require,module,exports){\n(function (global){\n'use strict';\n\nvar webSocketPatch = require('./websocket');\nvar utils = require('../utils');\nvar keys = require('../keys');\n\nvar eventNames = 'copy cut paste abort blur focus canplay canplaythrough change click contextmenu dblclick drag dragend dragenter dragleave dragover dragstart drop durationchange emptied ended input invalid keydown keypress keyup load loadeddata loadedmetadata loadstart message mousedown mouseenter mouseleave mousemove mouseout mouseover mouseup pause play playing progress ratechange reset scroll seeked seeking select show stalled submit suspend timeupdate volumechange waiting mozfullscreenchange mozfullscreenerror mozpointerlockchange mozpointerlockerror error webglcontextrestored webglcontextlost webglcontextcreationerror'.split(' ');\n\nfunction apply() {\n  if (utils.isWebWorker()){\n    // on WebWorker so don't apply patch\n    return;\n  }\n\n  var supportsWebSocket = typeof WebSocket !== 'undefined';\n  if (canPatchViaPropertyDescriptor()) {\n    // for browsers that we can patch the descriptor:  Chrome & Firefox\n    var onEventNames = eventNames.map(function (property) {\n      return 'on' + property;\n    });\n    utils.patchProperties(HTMLElement.prototype, onEventNames);\n    utils.patchProperties(XMLHttpRequest.prototype);\n    if (supportsWebSocket) {\n      utils.patchProperties(WebSocket.prototype);\n    }\n  } else {\n    // Safari, Android browsers (Jelly Bean)\n    patchViaCapturingAllTheEvents();\n    utils.patchClass('XMLHttpRequest');\n    if (supportsWebSocket) {\n      webSocketPatch.apply();\n    }\n  }\n}\n\nfunction canPatchViaPropertyDescriptor() {\n  if (!Object.getOwnPropertyDescriptor(HTMLElement.prototype, 'onclick') && typeof Element !== 'undefined') {\n    // WebKit https://bugs.webkit.org/show_bug.cgi?id=134364\n    // IDL interface attributes are not configurable\n    var desc = Object.getOwnPropertyDescriptor(Element.prototype, 'onclick');\n    if (desc && !desc.configurable) return false;\n  }\n\n  Object.defineProperty(HTMLElement.prototype, 'onclick', {\n    get: function () {\n      return true;\n    }\n  });\n  var elt = document.createElement('div');\n  var result = !!elt.onclick;\n  Object.defineProperty(HTMLElement.prototype, 'onclick', {});\n  return result;\n};\n\nvar unboundKey = keys.create('unbound');\n\n// Whenever any event fires, we check the event target and all parents\n// for `onwhatever` properties and replace them with zone-bound functions\n// - Chrome (for now)\nfunction patchViaCapturingAllTheEvents() {\n  eventNames.forEach(function (property) {\n    var onproperty = 'on' + property;\n    document.addEventListener(property, function (event) {\n      var elt = event.target, bound;\n      while (elt) {\n        if (elt[onproperty] && !elt[onproperty][unboundKey]) {\n          bound = global.zone.bind(elt[onproperty]);\n          bound[unboundKey] = elt[onproperty];\n          elt[onproperty] = bound;\n        }\n        elt = elt.parentElement;\n      }\n    }, true);\n  });\n};\n\nmodule.exports = {\n  apply: apply\n};\n\n}).call(this,typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n},{\"../keys\":3,\"../utils\":16,\"./websocket\":15}],14:[function(require,module,exports){\n(function (global){\n'use strict';\n\nvar _redefineProperty = require('./define-property')._redefineProperty;\nvar utils = require(\"../utils\");\n\nfunction apply() {\n  if (utils.isWebWorker() || !('registerElement' in global.document)) {\n    return;\n  }\n\n  var _registerElement = document.registerElement;\n  var callbacks = [\n    'createdCallback',\n    'attachedCallback',\n    'detachedCallback',\n    'attributeChangedCallback'\n  ];\n\n  document.registerElement = function (name, opts) {\n    if (opts && opts.prototype) {\n      callbacks.forEach(function (callback) {\n        if (opts.prototype.hasOwnProperty(callback)) {\n          var descriptor = Object.getOwnPropertyDescriptor(opts.prototype, callback);\n          if (descriptor && descriptor.value) {\n            descriptor.value = global.zone.bind(descriptor.value);\n            _redefineProperty(opts.prototype, callback, descriptor);\n          } else {\n            opts.prototype[callback] = global.zone.bind(opts.prototype[callback]);\n          }\n        } else if (opts.prototype[callback]) {\n          opts.prototype[callback] = global.zone.bind(opts.prototype[callback]);\n        }\n      });\n    }\n\n    return _registerElement.apply(document, [name, opts]);\n  };\n}\n\nmodule.exports = {\n  apply: apply\n};\n\n}).call(this,typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n},{\"../utils\":16,\"./define-property\":6}],15:[function(require,module,exports){\n(function (global){\n'use strict';\n\nvar utils = require('../utils');\n\n// we have to patch the instance since the proto is non-configurable\nfunction apply() {\n  var WS = global.WebSocket;\n  utils.patchEventTargetMethods(WS.prototype);\n  global.WebSocket = function(a, b) {\n    var socket = arguments.length > 1 ? new WS(a, b) : new WS(a);\n    var proxySocket;\n\n    // Safari 7.0 has non-configurable own 'onmessage' and friends properties on the socket instance\n    var onmessageDesc = Object.getOwnPropertyDescriptor(socket, 'onmessage');\n    if (onmessageDesc && onmessageDesc.configurable === false) {\n      proxySocket = Object.create(socket);\n      ['addEventListener', 'removeEventListener', 'send', 'close'].forEach(function(propName) {\n        proxySocket[propName] = function() {\n          return socket[propName].apply(socket, arguments);\n        };\n      });\n    } else {\n      // we can patch the real socket\n      proxySocket = socket;\n    }\n\n    utils.patchProperties(proxySocket, ['onclose', 'onerror', 'onmessage', 'onopen']);\n\n    return proxySocket;\n  };\n}\n\nmodule.exports = {\n  apply: apply\n};\n\n}).call(this,typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n},{\"../utils\":16}],16:[function(require,module,exports){\n(function (global){\n'use strict';\n\nvar keys = require('./keys');\n\nfunction bindArguments(args) {\n  for (var i = args.length - 1; i >= 0; i--) {\n    if (typeof args[i] === 'function') {\n      args[i] = global.zone.bind(args[i]);\n    }\n  }\n  return args;\n};\n\nfunction bindArgumentsOnce(args) {\n  for (var i = args.length - 1; i >= 0; i--) {\n    if (typeof args[i] === 'function') {\n      args[i] = global.zone.bindOnce(args[i]);\n    }\n  }\n  return args;\n};\n\nfunction patchPrototype(obj, fnNames) {\n  fnNames.forEach(function (name) {\n    var delegate = obj[name];\n    if (delegate) {\n      obj[name] = function () {\n        return delegate.apply(this, bindArguments(arguments));\n      };\n    }\n  });\n};\n\nfunction isWebWorker() {\n  return (typeof document === \"undefined\");\n}\n\nfunction patchProperty(obj, prop) {\n  var desc = Object.getOwnPropertyDescriptor(obj, prop) || {\n    enumerable: true,\n    configurable: true\n  };\n\n  // A property descriptor cannot have getter/setter and be writable\n  // deleting the writable and value properties avoids this error:\n  //\n  // TypeError: property descriptors must not specify a value or be writable when a\n  // getter or setter has been specified\n  delete desc.writable;\n  delete desc.value;\n\n  // substr(2) cuz 'onclick' -> 'click', etc\n  var eventName = prop.substr(2);\n  var _prop = '_' + prop;\n\n  desc.set = function (fn) {\n    if (this[_prop]) {\n      this.removeEventListener(eventName, this[_prop]);\n    }\n\n    if (typeof fn === 'function') {\n      this[_prop] = fn;\n      this.addEventListener(eventName, fn, false);\n    } else {\n      this[_prop] = null;\n    }\n  };\n\n  desc.get = function () {\n    return this[_prop];\n  };\n\n  Object.defineProperty(obj, prop, desc);\n};\n\nfunction patchProperties(obj, properties) {\n  (properties || (function () {\n      var props = [];\n      for (var prop in obj) {\n        props.push(prop);\n      }\n      return props;\n    }()).\n    filter(function (propertyName) {\n      return propertyName.substr(0,2) === 'on';\n    })).\n    forEach(function (eventName) {\n      patchProperty(obj, eventName);\n    });\n};\n\nvar originalFnKey = keys.create('originalFn');\nvar boundFnsKey = keys.create('boundFns');\n\nfunction patchEventTargetMethods(obj) {\n  // This is required for the addEventListener hook on the root zone.\n  obj[keys.common.addEventListener] = obj.addEventListener;\n  obj.addEventListener = function (eventName, handler, useCapturing) {\n    var eventType = eventName + (useCapturing ? '$capturing' : '$bubbling');\n    var fn;\n    //Ignore special listeners of IE11 & Edge dev tools, see https://github.com/angular/zone.js/issues/150\n    if (handler.toString() !== \"[object FunctionWrapper]\") {\n      if (handler.handleEvent) {\n        // Have to pass in 'handler' reference as an argument here, otherwise it gets clobbered in\n        // IE9 by the arguments[1] assignment at end of this function.\n        fn = (function(handler) {\n          return function() {\n            handler.handleEvent.apply(handler, arguments);\n          };\n        })(handler);\n      } else {\n        fn = handler;\n      }\n\n      handler[originalFnKey] = fn;\n      handler[boundFnsKey] = handler[boundFnsKey] || {};\n      handler[boundFnsKey][eventType] = handler[boundFnsKey][eventType] || zone.bind(fn);\n      arguments[1] = handler[boundFnsKey][eventType];\n    }\n\n    // - Inside a Web Worker, `this` is undefined, the context is `global` (= `self`)\n    // - When `addEventListener` is called on the global context in strict mode, `this` is undefined\n    // see https://github.com/angular/zone.js/issues/190\n    var target = this || global;\n\n    return global.zone.addEventListener.apply(target, arguments);\n  };\n\n  // This is required for the removeEventListener hook on the root zone.\n  obj[keys.common.removeEventListener] = obj.removeEventListener;\n  obj.removeEventListener = function (eventName, handler, useCapturing) {\n    var eventType = eventName + (useCapturing ? '$capturing' : '$bubbling');\n    if (handler[boundFnsKey] && handler[boundFnsKey][eventType]) {\n      var _bound = handler[boundFnsKey];\n      arguments[1] = _bound[eventType];\n      delete _bound[eventType];\n    }\n\n    // - Inside a Web Worker, `this` is undefined, the context is `global`\n    // - When `addEventListener` is called on the global context in strict mode, `this` is undefined\n    // see https://github.com/angular/zone.js/issues/190\n    var target = this || global;\n\n    var result = global.zone.removeEventListener.apply(target, arguments);\n    global.zone.dequeueTask(handler[originalFnKey]);\n    return result;\n  };\n};\n\nvar originalInstanceKey = keys.create('originalInstance');\n\n// wrap some native API on `window`\nfunction patchClass(className) {\n  var OriginalClass = global[className];\n  if (!OriginalClass) return;\n\n  global[className] = function () {\n    var a = bindArguments(arguments);\n    switch (a.length) {\n      case 0: this[originalInstanceKey] = new OriginalClass(); break;\n      case 1: this[originalInstanceKey] = new OriginalClass(a[0]); break;\n      case 2: this[originalInstanceKey] = new OriginalClass(a[0], a[1]); break;\n      case 3: this[originalInstanceKey] = new OriginalClass(a[0], a[1], a[2]); break;\n      case 4: this[originalInstanceKey] = new OriginalClass(a[0], a[1], a[2], a[3]); break;\n      default: throw new Error('what are you even doing?');\n    }\n  };\n\n  var instance = new OriginalClass();\n\n  var prop;\n  for (prop in instance) {\n    (function (prop) {\n      if (typeof instance[prop] === 'function') {\n        global[className].prototype[prop] = function () {\n          return this[originalInstanceKey][prop].apply(this[originalInstanceKey], arguments);\n        };\n      } else {\n        Object.defineProperty(global[className].prototype, prop, {\n          set: function (fn) {\n            if (typeof fn === 'function') {\n              this[originalInstanceKey][prop] = global.zone.bind(fn);\n            } else {\n              this[originalInstanceKey][prop] = fn;\n            }\n          },\n          get: function () {\n            return this[originalInstanceKey][prop];\n          }\n        });\n      }\n    }(prop));\n  }\n\n  for (prop in OriginalClass) {\n    if (prop !== 'prototype' && OriginalClass.hasOwnProperty(prop)) {\n      global[className][prop] = OriginalClass[prop];\n    }\n  }\n};\n\nmodule.exports = {\n  bindArguments: bindArguments,\n  bindArgumentsOnce: bindArgumentsOnce,\n  patchPrototype: patchPrototype,\n  patchProperty: patchProperty,\n  patchProperties: patchProperties,\n  patchEventTargetMethods: patchEventTargetMethods,\n  patchClass: patchClass,\n  isWebWorker: isWebWorker\n};\n\n}).call(this,typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n},{\"./keys\":3}],17:[function(require,module,exports){\n(function (process,global){\n/*!\n * @overview es6-promise - a tiny implementation of Promises/A+.\n * @copyright Copyright (c) 2014 Yehuda Katz, Tom Dale, Stefan Penner and contributors (Conversion to ES6 API by Jake Archibald)\n * @license   Licensed under MIT license\n *            See https://raw.githubusercontent.com/jakearchibald/es6-promise/master/LICENSE\n * @version   3.0.2\n */\n\n(function() {\n    \"use strict\";\n    function lib$es6$promise$utils$$objectOrFunction(x) {\n      return typeof x === 'function' || (typeof x === 'object' && x !== null);\n    }\n\n    function lib$es6$promise$utils$$isFunction(x) {\n      return typeof x === 'function';\n    }\n\n    function lib$es6$promise$utils$$isMaybeThenable(x) {\n      return typeof x === 'object' && x !== null;\n    }\n\n    var lib$es6$promise$utils$$_isArray;\n    if (!Array.isArray) {\n      lib$es6$promise$utils$$_isArray = function (x) {\n        return Object.prototype.toString.call(x) === '[object Array]';\n      };\n    } else {\n      lib$es6$promise$utils$$_isArray = Array.isArray;\n    }\n\n    var lib$es6$promise$utils$$isArray = lib$es6$promise$utils$$_isArray;\n    var lib$es6$promise$asap$$len = 0;\n    var lib$es6$promise$asap$$toString = {}.toString;\n    var lib$es6$promise$asap$$vertxNext;\n    var lib$es6$promise$asap$$customSchedulerFn;\n\n    var lib$es6$promise$asap$$asap = function asap(callback, arg) {\n      lib$es6$promise$asap$$queue[lib$es6$promise$asap$$len] = callback;\n      lib$es6$promise$asap$$queue[lib$es6$promise$asap$$len + 1] = arg;\n      lib$es6$promise$asap$$len += 2;\n      if (lib$es6$promise$asap$$len === 2) {\n        // If len is 2, that means that we need to schedule an async flush.\n        // If additional callbacks are queued before the queue is flushed, they\n        // will be processed by this flush that we are scheduling.\n        if (lib$es6$promise$asap$$customSchedulerFn) {\n          lib$es6$promise$asap$$customSchedulerFn(lib$es6$promise$asap$$flush);\n        } else {\n          lib$es6$promise$asap$$scheduleFlush();\n        }\n      }\n    }\n\n    function lib$es6$promise$asap$$setScheduler(scheduleFn) {\n      lib$es6$promise$asap$$customSchedulerFn = scheduleFn;\n    }\n\n    function lib$es6$promise$asap$$setAsap(asapFn) {\n      lib$es6$promise$asap$$asap = asapFn;\n    }\n\n    var lib$es6$promise$asap$$browserWindow = (typeof window !== 'undefined') ? window : undefined;\n    var lib$es6$promise$asap$$browserGlobal = lib$es6$promise$asap$$browserWindow || {};\n    var lib$es6$promise$asap$$BrowserMutationObserver = lib$es6$promise$asap$$browserGlobal.MutationObserver || lib$es6$promise$asap$$browserGlobal.WebKitMutationObserver;\n    var lib$es6$promise$asap$$isNode = typeof process !== 'undefined' && {}.toString.call(process) === '[object process]';\n\n    // test for web worker but not in IE10\n    var lib$es6$promise$asap$$isWorker = typeof Uint8ClampedArray !== 'undefined' &&\n      typeof importScripts !== 'undefined' &&\n      typeof MessageChannel !== 'undefined';\n\n    // node\n    function lib$es6$promise$asap$$useNextTick() {\n      // node version 0.10.x displays a deprecation warning when nextTick is used recursively\n      // see https://github.com/cujojs/when/issues/410 for details\n      return function() {\n        process.nextTick(lib$es6$promise$asap$$flush);\n      };\n    }\n\n    // vertx\n    function lib$es6$promise$asap$$useVertxTimer() {\n      return function() {\n        lib$es6$promise$asap$$vertxNext(lib$es6$promise$asap$$flush);\n      };\n    }\n\n    function lib$es6$promise$asap$$useMutationObserver() {\n      var iterations = 0;\n      var observer = new lib$es6$promise$asap$$BrowserMutationObserver(lib$es6$promise$asap$$flush);\n      var node = document.createTextNode('');\n      observer.observe(node, { characterData: true });\n\n      return function() {\n        node.data = (iterations = ++iterations % 2);\n      };\n    }\n\n    // web worker\n    function lib$es6$promise$asap$$useMessageChannel() {\n      var channel = new MessageChannel();\n      channel.port1.onmessage = lib$es6$promise$asap$$flush;\n      return function () {\n        channel.port2.postMessage(0);\n      };\n    }\n\n    function lib$es6$promise$asap$$useSetTimeout() {\n      return function() {\n        setTimeout(lib$es6$promise$asap$$flush, 1);\n      };\n    }\n\n    var lib$es6$promise$asap$$queue = new Array(1000);\n    function lib$es6$promise$asap$$flush() {\n      for (var i = 0; i < lib$es6$promise$asap$$len; i+=2) {\n        var callback = lib$es6$promise$asap$$queue[i];\n        var arg = lib$es6$promise$asap$$queue[i+1];\n\n        callback(arg);\n\n        lib$es6$promise$asap$$queue[i] = undefined;\n        lib$es6$promise$asap$$queue[i+1] = undefined;\n      }\n\n      lib$es6$promise$asap$$len = 0;\n    }\n\n    function lib$es6$promise$asap$$attemptVertx() {\n      try {\n        var r = require;\n        var vertx = r('vertx');\n        lib$es6$promise$asap$$vertxNext = vertx.runOnLoop || vertx.runOnContext;\n        return lib$es6$promise$asap$$useVertxTimer();\n      } catch(e) {\n        return lib$es6$promise$asap$$useSetTimeout();\n      }\n    }\n\n    var lib$es6$promise$asap$$scheduleFlush;\n    // Decide what async method to use to triggering processing of queued callbacks:\n    if (lib$es6$promise$asap$$isNode) {\n      lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useNextTick();\n    } else if (lib$es6$promise$asap$$BrowserMutationObserver) {\n      lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useMutationObserver();\n    } else if (lib$es6$promise$asap$$isWorker) {\n      lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useMessageChannel();\n    } else if (lib$es6$promise$asap$$browserWindow === undefined && typeof require === 'function') {\n      lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$attemptVertx();\n    } else {\n      lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useSetTimeout();\n    }\n\n    function lib$es6$promise$$internal$$noop() {}\n\n    var lib$es6$promise$$internal$$PENDING   = void 0;\n    var lib$es6$promise$$internal$$FULFILLED = 1;\n    var lib$es6$promise$$internal$$REJECTED  = 2;\n\n    var lib$es6$promise$$internal$$GET_THEN_ERROR = new lib$es6$promise$$internal$$ErrorObject();\n\n    function lib$es6$promise$$internal$$selfFulfillment() {\n      return new TypeError(\"You cannot resolve a promise with itself\");\n    }\n\n    function lib$es6$promise$$internal$$cannotReturnOwn() {\n      return new TypeError('A promises callback cannot return that same promise.');\n    }\n\n    function lib$es6$promise$$internal$$getThen(promise) {\n      try {\n        return promise.then;\n      } catch(error) {\n        lib$es6$promise$$internal$$GET_THEN_ERROR.error = error;\n        return lib$es6$promise$$internal$$GET_THEN_ERROR;\n      }\n    }\n\n    function lib$es6$promise$$internal$$tryThen(then, value, fulfillmentHandler, rejectionHandler) {\n      try {\n        then.call(value, fulfillmentHandler, rejectionHandler);\n      } catch(e) {\n        return e;\n      }\n    }\n\n    function lib$es6$promise$$internal$$handleForeignThenable(promise, thenable, then) {\n       lib$es6$promise$asap$$asap(function(promise) {\n        var sealed = false;\n        var error = lib$es6$promise$$internal$$tryThen(then, thenable, function(value) {\n          if (sealed) { return; }\n          sealed = true;\n          if (thenable !== value) {\n            lib$es6$promise$$internal$$resolve(promise, value);\n          } else {\n            lib$es6$promise$$internal$$fulfill(promise, value);\n          }\n        }, function(reason) {\n          if (sealed) { return; }\n          sealed = true;\n\n          lib$es6$promise$$internal$$reject(promise, reason);\n        }, 'Settle: ' + (promise._label || ' unknown promise'));\n\n        if (!sealed && error) {\n          sealed = true;\n          lib$es6$promise$$internal$$reject(promise, error);\n        }\n      }, promise);\n    }\n\n    function lib$es6$promise$$internal$$handleOwnThenable(promise, thenable) {\n      if (thenable._state === lib$es6$promise$$internal$$FULFILLED) {\n        lib$es6$promise$$internal$$fulfill(promise, thenable._result);\n      } else if (thenable._state === lib$es6$promise$$internal$$REJECTED) {\n        lib$es6$promise$$internal$$reject(promise, thenable._result);\n      } else {\n        lib$es6$promise$$internal$$subscribe(thenable, undefined, function(value) {\n          lib$es6$promise$$internal$$resolve(promise, value);\n        }, function(reason) {\n          lib$es6$promise$$internal$$reject(promise, reason);\n        });\n      }\n    }\n\n    function lib$es6$promise$$internal$$handleMaybeThenable(promise, maybeThenable) {\n      if (maybeThenable.constructor === promise.constructor) {\n        lib$es6$promise$$internal$$handleOwnThenable(promise, maybeThenable);\n      } else {\n        var then = lib$es6$promise$$internal$$getThen(maybeThenable);\n\n        if (then === lib$es6$promise$$internal$$GET_THEN_ERROR) {\n          lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$GET_THEN_ERROR.error);\n        } else if (then === undefined) {\n          lib$es6$promise$$internal$$fulfill(promise, maybeThenable);\n        } else if (lib$es6$promise$utils$$isFunction(then)) {\n          lib$es6$promise$$internal$$handleForeignThenable(promise, maybeThenable, then);\n        } else {\n          lib$es6$promise$$internal$$fulfill(promise, maybeThenable);\n        }\n      }\n    }\n\n    function lib$es6$promise$$internal$$resolve(promise, value) {\n      if (promise === value) {\n        lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$selfFulfillment());\n      } else if (lib$es6$promise$utils$$objectOrFunction(value)) {\n        lib$es6$promise$$internal$$handleMaybeThenable(promise, value);\n      } else {\n        lib$es6$promise$$internal$$fulfill(promise, value);\n      }\n    }\n\n    function lib$es6$promise$$internal$$publishRejection(promise) {\n      if (promise._onerror) {\n        promise._onerror(promise._result);\n      }\n\n      lib$es6$promise$$internal$$publish(promise);\n    }\n\n    function lib$es6$promise$$internal$$fulfill(promise, value) {\n      if (promise._state !== lib$es6$promise$$internal$$PENDING) { return; }\n\n      promise._result = value;\n      promise._state = lib$es6$promise$$internal$$FULFILLED;\n\n      if (promise._subscribers.length !== 0) {\n        lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publish, promise);\n      }\n    }\n\n    function lib$es6$promise$$internal$$reject(promise, reason) {\n      if (promise._state !== lib$es6$promise$$internal$$PENDING) { return; }\n      promise._state = lib$es6$promise$$internal$$REJECTED;\n      promise._result = reason;\n\n      lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publishRejection, promise);\n    }\n\n    function lib$es6$promise$$internal$$subscribe(parent, child, onFulfillment, onRejection) {\n      var subscribers = parent._subscribers;\n      var length = subscribers.length;\n\n      parent._onerror = null;\n\n      subscribers[length] = child;\n      subscribers[length + lib$es6$promise$$internal$$FULFILLED] = onFulfillment;\n      subscribers[length + lib$es6$promise$$internal$$REJECTED]  = onRejection;\n\n      if (length === 0 && parent._state) {\n        lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publish, parent);\n      }\n    }\n\n    function lib$es6$promise$$internal$$publish(promise) {\n      var subscribers = promise._subscribers;\n      var settled = promise._state;\n\n      if (subscribers.length === 0) { return; }\n\n      var child, callback, detail = promise._result;\n\n      for (var i = 0; i < subscribers.length; i += 3) {\n        child = subscribers[i];\n        callback = subscribers[i + settled];\n\n        if (child) {\n          lib$es6$promise$$internal$$invokeCallback(settled, child, callback, detail);\n        } else {\n          callback(detail);\n        }\n      }\n\n      promise._subscribers.length = 0;\n    }\n\n    function lib$es6$promise$$internal$$ErrorObject() {\n      this.error = null;\n    }\n\n    var lib$es6$promise$$internal$$TRY_CATCH_ERROR = new lib$es6$promise$$internal$$ErrorObject();\n\n    function lib$es6$promise$$internal$$tryCatch(callback, detail) {\n      try {\n        return callback(detail);\n      } catch(e) {\n        lib$es6$promise$$internal$$TRY_CATCH_ERROR.error = e;\n        return lib$es6$promise$$internal$$TRY_CATCH_ERROR;\n      }\n    }\n\n    function lib$es6$promise$$internal$$invokeCallback(settled, promise, callback, detail) {\n      var hasCallback = lib$es6$promise$utils$$isFunction(callback),\n          value, error, succeeded, failed;\n\n      if (hasCallback) {\n        value = lib$es6$promise$$internal$$tryCatch(callback, detail);\n\n        if (value === lib$es6$promise$$internal$$TRY_CATCH_ERROR) {\n          failed = true;\n          error = value.error;\n          value = null;\n        } else {\n          succeeded = true;\n        }\n\n        if (promise === value) {\n          lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$cannotReturnOwn());\n          return;\n        }\n\n      } else {\n        value = detail;\n        succeeded = true;\n      }\n\n      if (promise._state !== lib$es6$promise$$internal$$PENDING) {\n        // noop\n      } else if (hasCallback && succeeded) {\n        lib$es6$promise$$internal$$resolve(promise, value);\n      } else if (failed) {\n        lib$es6$promise$$internal$$reject(promise, error);\n      } else if (settled === lib$es6$promise$$internal$$FULFILLED) {\n        lib$es6$promise$$internal$$fulfill(promise, value);\n      } else if (settled === lib$es6$promise$$internal$$REJECTED) {\n        lib$es6$promise$$internal$$reject(promise, value);\n      }\n    }\n\n    function lib$es6$promise$$internal$$initializePromise(promise, resolver) {\n      try {\n        resolver(function resolvePromise(value){\n          lib$es6$promise$$internal$$resolve(promise, value);\n        }, function rejectPromise(reason) {\n          lib$es6$promise$$internal$$reject(promise, reason);\n        });\n      } catch(e) {\n        lib$es6$promise$$internal$$reject(promise, e);\n      }\n    }\n\n    function lib$es6$promise$enumerator$$Enumerator(Constructor, input) {\n      var enumerator = this;\n\n      enumerator._instanceConstructor = Constructor;\n      enumerator.promise = new Constructor(lib$es6$promise$$internal$$noop);\n\n      if (enumerator._validateInput(input)) {\n        enumerator._input     = input;\n        enumerator.length     = input.length;\n        enumerator._remaining = input.length;\n\n        enumerator._init();\n\n        if (enumerator.length === 0) {\n          lib$es6$promise$$internal$$fulfill(enumerator.promise, enumerator._result);\n        } else {\n          enumerator.length = enumerator.length || 0;\n          enumerator._enumerate();\n          if (enumerator._remaining === 0) {\n            lib$es6$promise$$internal$$fulfill(enumerator.promise, enumerator._result);\n          }\n        }\n      } else {\n        lib$es6$promise$$internal$$reject(enumerator.promise, enumerator._validationError());\n      }\n    }\n\n    lib$es6$promise$enumerator$$Enumerator.prototype._validateInput = function(input) {\n      return lib$es6$promise$utils$$isArray(input);\n    };\n\n    lib$es6$promise$enumerator$$Enumerator.prototype._validationError = function() {\n      return new Error('Array Methods must be provided an Array');\n    };\n\n    lib$es6$promise$enumerator$$Enumerator.prototype._init = function() {\n      this._result = new Array(this.length);\n    };\n\n    var lib$es6$promise$enumerator$$default = lib$es6$promise$enumerator$$Enumerator;\n\n    lib$es6$promise$enumerator$$Enumerator.prototype._enumerate = function() {\n      var enumerator = this;\n\n      var length  = enumerator.length;\n      var promise = enumerator.promise;\n      var input   = enumerator._input;\n\n      for (var i = 0; promise._state === lib$es6$promise$$internal$$PENDING && i < length; i++) {\n        enumerator._eachEntry(input[i], i);\n      }\n    };\n\n    lib$es6$promise$enumerator$$Enumerator.prototype._eachEntry = function(entry, i) {\n      var enumerator = this;\n      var c = enumerator._instanceConstructor;\n\n      if (lib$es6$promise$utils$$isMaybeThenable(entry)) {\n        if (entry.constructor === c && entry._state !== lib$es6$promise$$internal$$PENDING) {\n          entry._onerror = null;\n          enumerator._settledAt(entry._state, i, entry._result);\n        } else {\n          enumerator._willSettleAt(c.resolve(entry), i);\n        }\n      } else {\n        enumerator._remaining--;\n        enumerator._result[i] = entry;\n      }\n    };\n\n    lib$es6$promise$enumerator$$Enumerator.prototype._settledAt = function(state, i, value) {\n      var enumerator = this;\n      var promise = enumerator.promise;\n\n      if (promise._state === lib$es6$promise$$internal$$PENDING) {\n        enumerator._remaining--;\n\n        if (state === lib$es6$promise$$internal$$REJECTED) {\n          lib$es6$promise$$internal$$reject(promise, value);\n        } else {\n          enumerator._result[i] = value;\n        }\n      }\n\n      if (enumerator._remaining === 0) {\n        lib$es6$promise$$internal$$fulfill(promise, enumerator._result);\n      }\n    };\n\n    lib$es6$promise$enumerator$$Enumerator.prototype._willSettleAt = function(promise, i) {\n      var enumerator = this;\n\n      lib$es6$promise$$internal$$subscribe(promise, undefined, function(value) {\n        enumerator._settledAt(lib$es6$promise$$internal$$FULFILLED, i, value);\n      }, function(reason) {\n        enumerator._settledAt(lib$es6$promise$$internal$$REJECTED, i, reason);\n      });\n    };\n    function lib$es6$promise$promise$all$$all(entries) {\n      return new lib$es6$promise$enumerator$$default(this, entries).promise;\n    }\n    var lib$es6$promise$promise$all$$default = lib$es6$promise$promise$all$$all;\n    function lib$es6$promise$promise$race$$race(entries) {\n      /*jshint validthis:true */\n      var Constructor = this;\n\n      var promise = new Constructor(lib$es6$promise$$internal$$noop);\n\n      if (!lib$es6$promise$utils$$isArray(entries)) {\n        lib$es6$promise$$internal$$reject(promise, new TypeError('You must pass an array to race.'));\n        return promise;\n      }\n\n      var length = entries.length;\n\n      function onFulfillment(value) {\n        lib$es6$promise$$internal$$resolve(promise, value);\n      }\n\n      function onRejection(reason) {\n        lib$es6$promise$$internal$$reject(promise, reason);\n      }\n\n      for (var i = 0; promise._state === lib$es6$promise$$internal$$PENDING && i < length; i++) {\n        lib$es6$promise$$internal$$subscribe(Constructor.resolve(entries[i]), undefined, onFulfillment, onRejection);\n      }\n\n      return promise;\n    }\n    var lib$es6$promise$promise$race$$default = lib$es6$promise$promise$race$$race;\n    function lib$es6$promise$promise$resolve$$resolve(object) {\n      /*jshint validthis:true */\n      var Constructor = this;\n\n      if (object && typeof object === 'object' && object.constructor === Constructor) {\n        return object;\n      }\n\n      var promise = new Constructor(lib$es6$promise$$internal$$noop);\n      lib$es6$promise$$internal$$resolve(promise, object);\n      return promise;\n    }\n    var lib$es6$promise$promise$resolve$$default = lib$es6$promise$promise$resolve$$resolve;\n    function lib$es6$promise$promise$reject$$reject(reason) {\n      /*jshint validthis:true */\n      var Constructor = this;\n      var promise = new Constructor(lib$es6$promise$$internal$$noop);\n      lib$es6$promise$$internal$$reject(promise, reason);\n      return promise;\n    }\n    var lib$es6$promise$promise$reject$$default = lib$es6$promise$promise$reject$$reject;\n\n    var lib$es6$promise$promise$$counter = 0;\n\n    function lib$es6$promise$promise$$needsResolver() {\n      throw new TypeError('You must pass a resolver function as the first argument to the promise constructor');\n    }\n\n    function lib$es6$promise$promise$$needsNew() {\n      throw new TypeError(\"Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.\");\n    }\n\n    var lib$es6$promise$promise$$default = lib$es6$promise$promise$$Promise;\n    /**\n      Promise objects represent the eventual result of an asynchronous operation. The\n      primary way of interacting with a promise is through its `then` method, which\n      registers callbacks to receive either a promise's eventual value or the reason\n      why the promise cannot be fulfilled.\n\n      Terminology\n      -----------\n\n      - `promise` is an object or function with a `then` method whose behavior conforms to this specification.\n      - `thenable` is an object or function that defines a `then` method.\n      - `value` is any legal JavaScript value (including undefined, a thenable, or a promise).\n      - `exception` is a value that is thrown using the throw statement.\n      - `reason` is a value that indicates why a promise was rejected.\n      - `settled` the final resting state of a promise, fulfilled or rejected.\n\n      A promise can be in one of three states: pending, fulfilled, or rejected.\n\n      Promises that are fulfilled have a fulfillment value and are in the fulfilled\n      state.  Promises that are rejected have a rejection reason and are in the\n      rejected state.  A fulfillment value is never a thenable.\n\n      Promises can also be said to *resolve* a value.  If this value is also a\n      promise, then the original promise's settled state will match the value's\n      settled state.  So a promise that *resolves* a promise that rejects will\n      itself reject, and a promise that *resolves* a promise that fulfills will\n      itself fulfill.\n\n\n      Basic Usage:\n      ------------\n\n      ```js\n      var promise = new Promise(function(resolve, reject) {\n        // on success\n        resolve(value);\n\n        // on failure\n        reject(reason);\n      });\n\n      promise.then(function(value) {\n        // on fulfillment\n      }, function(reason) {\n        // on rejection\n      });\n      ```\n\n      Advanced Usage:\n      ---------------\n\n      Promises shine when abstracting away asynchronous interactions such as\n      `XMLHttpRequest`s.\n\n      ```js\n      function getJSON(url) {\n        return new Promise(function(resolve, reject){\n          var xhr = new XMLHttpRequest();\n\n          xhr.open('GET', url);\n          xhr.onreadystatechange = handler;\n          xhr.responseType = 'json';\n          xhr.setRequestHeader('Accept', 'application/json');\n          xhr.send();\n\n          function handler() {\n            if (this.readyState === this.DONE) {\n              if (this.status === 200) {\n                resolve(this.response);\n              } else {\n                reject(new Error('getJSON: `' + url + '` failed with status: [' + this.status + ']'));\n              }\n            }\n          };\n        });\n      }\n\n      getJSON('/posts.json').then(function(json) {\n        // on fulfillment\n      }, function(reason) {\n        // on rejection\n      });\n      ```\n\n      Unlike callbacks, promises are great composable primitives.\n\n      ```js\n      Promise.all([\n        getJSON('/posts'),\n        getJSON('/comments')\n      ]).then(function(values){\n        values[0] // => postsJSON\n        values[1] // => commentsJSON\n\n        return values;\n      });\n      ```\n\n      @class Promise\n      @param {function} resolver\n      Useful for tooling.\n      @constructor\n    */\n    function lib$es6$promise$promise$$Promise(resolver) {\n      this._id = lib$es6$promise$promise$$counter++;\n      this._state = undefined;\n      this._result = undefined;\n      this._subscribers = [];\n\n      if (lib$es6$promise$$internal$$noop !== resolver) {\n        if (!lib$es6$promise$utils$$isFunction(resolver)) {\n          lib$es6$promise$promise$$needsResolver();\n        }\n\n        if (!(this instanceof lib$es6$promise$promise$$Promise)) {\n          lib$es6$promise$promise$$needsNew();\n        }\n\n        lib$es6$promise$$internal$$initializePromise(this, resolver);\n      }\n    }\n\n    lib$es6$promise$promise$$Promise.all = lib$es6$promise$promise$all$$default;\n    lib$es6$promise$promise$$Promise.race = lib$es6$promise$promise$race$$default;\n    lib$es6$promise$promise$$Promise.resolve = lib$es6$promise$promise$resolve$$default;\n    lib$es6$promise$promise$$Promise.reject = lib$es6$promise$promise$reject$$default;\n    lib$es6$promise$promise$$Promise._setScheduler = lib$es6$promise$asap$$setScheduler;\n    lib$es6$promise$promise$$Promise._setAsap = lib$es6$promise$asap$$setAsap;\n    lib$es6$promise$promise$$Promise._asap = lib$es6$promise$asap$$asap;\n\n    lib$es6$promise$promise$$Promise.prototype = {\n      constructor: lib$es6$promise$promise$$Promise,\n\n    /**\n      The primary way of interacting with a promise is through its `then` method,\n      which registers callbacks to receive either a promise's eventual value or the\n      reason why the promise cannot be fulfilled.\n\n      ```js\n      findUser().then(function(user){\n        // user is available\n      }, function(reason){\n        // user is unavailable, and you are given the reason why\n      });\n      ```\n\n      Chaining\n      --------\n\n      The return value of `then` is itself a promise.  This second, 'downstream'\n      promise is resolved with the return value of the first promise's fulfillment\n      or rejection handler, or rejected if the handler throws an exception.\n\n      ```js\n      findUser().then(function (user) {\n        return user.name;\n      }, function (reason) {\n        return 'default name';\n      }).then(function (userName) {\n        // If `findUser` fulfilled, `userName` will be the user's name, otherwise it\n        // will be `'default name'`\n      });\n\n      findUser().then(function (user) {\n        throw new Error('Found user, but still unhappy');\n      }, function (reason) {\n        throw new Error('`findUser` rejected and we're unhappy');\n      }).then(function (value) {\n        // never reached\n      }, function (reason) {\n        // if `findUser` fulfilled, `reason` will be 'Found user, but still unhappy'.\n        // If `findUser` rejected, `reason` will be '`findUser` rejected and we're unhappy'.\n      });\n      ```\n      If the downstream promise does not specify a rejection handler, rejection reasons will be propagated further downstream.\n\n      ```js\n      findUser().then(function (user) {\n        throw new PedagogicalException('Upstream error');\n      }).then(function (value) {\n        // never reached\n      }).then(function (value) {\n        // never reached\n      }, function (reason) {\n        // The `PedgagocialException` is propagated all the way down to here\n      });\n      ```\n\n      Assimilation\n      ------------\n\n      Sometimes the value you want to propagate to a downstream promise can only be\n      retrieved asynchronously. This can be achieved by returning a promise in the\n      fulfillment or rejection handler. The downstream promise will then be pending\n      until the returned promise is settled. This is called *assimilation*.\n\n      ```js\n      findUser().then(function (user) {\n        return findCommentsByAuthor(user);\n      }).then(function (comments) {\n        // The user's comments are now available\n      });\n      ```\n\n      If the assimliated promise rejects, then the downstream promise will also reject.\n\n      ```js\n      findUser().then(function (user) {\n        return findCommentsByAuthor(user);\n      }).then(function (comments) {\n        // If `findCommentsByAuthor` fulfills, we'll have the value here\n      }, function (reason) {\n        // If `findCommentsByAuthor` rejects, we'll have the reason here\n      });\n      ```\n\n      Simple Example\n      --------------\n\n      Synchronous Example\n\n      ```javascript\n      var result;\n\n      try {\n        result = findResult();\n        // success\n      } catch(reason) {\n        // failure\n      }\n      ```\n\n      Errback Example\n\n      ```js\n      findResult(function(result, err){\n        if (err) {\n          // failure\n        } else {\n          // success\n        }\n      });\n      ```\n\n      Promise Example;\n\n      ```javascript\n      findResult().then(function(result){\n        // success\n      }, function(reason){\n        // failure\n      });\n      ```\n\n      Advanced Example\n      --------------\n\n      Synchronous Example\n\n      ```javascript\n      var author, books;\n\n      try {\n        author = findAuthor();\n        books  = findBooksByAuthor(author);\n        // success\n      } catch(reason) {\n        // failure\n      }\n      ```\n\n      Errback Example\n\n      ```js\n\n      function foundBooks(books) {\n\n      }\n\n      function failure(reason) {\n\n      }\n\n      findAuthor(function(author, err){\n        if (err) {\n          failure(err);\n          // failure\n        } else {\n          try {\n            findBoooksByAuthor(author, function(books, err) {\n              if (err) {\n                failure(err);\n              } else {\n                try {\n                  foundBooks(books);\n                } catch(reason) {\n                  failure(reason);\n                }\n              }\n            });\n          } catch(error) {\n            failure(err);\n          }\n          // success\n        }\n      });\n      ```\n\n      Promise Example;\n\n      ```javascript\n      findAuthor().\n        then(findBooksByAuthor).\n        then(function(books){\n          // found books\n      }).catch(function(reason){\n        // something went wrong\n      });\n      ```\n\n      @method then\n      @param {Function} onFulfilled\n      @param {Function} onRejected\n      Useful for tooling.\n      @return {Promise}\n    */\n      then: function(onFulfillment, onRejection) {\n        var parent = this;\n        var state = parent._state;\n\n        if (state === lib$es6$promise$$internal$$FULFILLED && !onFulfillment || state === lib$es6$promise$$internal$$REJECTED && !onRejection) {\n          return this;\n        }\n\n        var child = new this.constructor(lib$es6$promise$$internal$$noop);\n        var result = parent._result;\n\n        if (state) {\n          var callback = arguments[state - 1];\n          lib$es6$promise$asap$$asap(function(){\n            lib$es6$promise$$internal$$invokeCallback(state, child, callback, result);\n          });\n        } else {\n          lib$es6$promise$$internal$$subscribe(parent, child, onFulfillment, onRejection);\n        }\n\n        return child;\n      },\n\n    /**\n      `catch` is simply sugar for `then(undefined, onRejection)` which makes it the same\n      as the catch block of a try/catch statement.\n\n      ```js\n      function findAuthor(){\n        throw new Error('couldn't find that author');\n      }\n\n      // synchronous\n      try {\n        findAuthor();\n      } catch(reason) {\n        // something went wrong\n      }\n\n      // async with promises\n      findAuthor().catch(function(reason){\n        // something went wrong\n      });\n      ```\n\n      @method catch\n      @param {Function} onRejection\n      Useful for tooling.\n      @return {Promise}\n    */\n      'catch': function(onRejection) {\n        return this.then(null, onRejection);\n      }\n    };\n    function lib$es6$promise$polyfill$$polyfill() {\n      var local;\n\n      if (typeof global !== 'undefined') {\n          local = global;\n      } else if (typeof self !== 'undefined') {\n          local = self;\n      } else {\n          try {\n              local = Function('return this')();\n          } catch (e) {\n              throw new Error('polyfill failed because global object is unavailable in this environment');\n          }\n      }\n\n      var P = local.Promise;\n\n      if (P && Object.prototype.toString.call(P.resolve()) === '[object Promise]' && !P.cast) {\n        return;\n      }\n\n      local.Promise = lib$es6$promise$promise$$default;\n    }\n    var lib$es6$promise$polyfill$$default = lib$es6$promise$polyfill$$polyfill;\n\n    var lib$es6$promise$umd$$ES6Promise = {\n      'Promise': lib$es6$promise$promise$$default,\n      'polyfill': lib$es6$promise$polyfill$$default\n    };\n\n    /* global define:true module:true window: true */\n    if (typeof define === 'function' && define['amd']) {\n      define(function() { return lib$es6$promise$umd$$ES6Promise; });\n    } else if (typeof module !== 'undefined' && module['exports']) {\n      module['exports'] = lib$es6$promise$umd$$ES6Promise;\n    } else if (typeof this !== 'undefined') {\n      this['ES6Promise'] = lib$es6$promise$umd$$ES6Promise;\n    }\n\n    lib$es6$promise$polyfill$$default();\n}).call(this);\n\n\n}).call(this,{},typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n},{}]},{},[1]);\n\n(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error(\"Cannot find module '\"+o+\"'\");throw f.code=\"MODULE_NOT_FOUND\",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require==\"function\"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(require,module,exports){\n(function (global){\n'use strict';\n\nif (!global.Zone) {\n  throw new Error('zone.js should be installed before loading the long stack trace zone');\n}\n\nglobal.Zone.longStackTraceZone = require('../zones/long-stack-trace.js');\n\n}).call(this,typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n},{\"../zones/long-stack-trace.js\":2}],2:[function(require,module,exports){\n(function (global){\n/*\n * Wrapped stacktrace\n *\n * We need this because in some implementations, constructing a trace is slow\n * and so we want to defer accessing the trace for as long as possible\n */\n\n'use strict';\n\nfunction _Stacktrace(e) {\n  this._e = e;\n};\n\n_Stacktrace.prototype.get = function () {\n  if (global.zone.stackFramesFilter && this._e.stack) {\n    return this._e.stack\n      .split('\\n')\n      .filter(global.zone.stackFramesFilter)\n      .join('\\n');\n  }\n\n  return this._e.stack;\n}\n\nfunction _getStacktraceWithUncaughtError () {\n  return new _Stacktrace(new Error());\n}\n\nfunction _getStacktraceWithCaughtError () {\n  try {\n    throw new Error();\n  } catch (e) {\n    return new _Stacktrace(e);\n  }\n}\n\n// Some implementations of exception handling don't create a stack trace if the exception\n// isn't thrown, however it's faster not to actually throw the exception.\nvar stack = _getStacktraceWithUncaughtError();\n\nvar _getStacktrace = stack && stack._e.stack\n  ? _getStacktraceWithUncaughtError\n  : _getStacktraceWithCaughtError;\n\nmodule.exports = {\n  getLongStacktrace: function (exception) {\n    var traces = [];\n    var currentZone = this;\n    if (exception) {\n      if (currentZone.stackFramesFilter && exception.stack) {\n        traces.push(exception.stack.split('\\n')\n              .filter(currentZone.stackFramesFilter)\n              .join('\\n'));\n      } else {\n        traces.push(exception.stack);\n      }\n    }\n    var now = Date.now();\n\n    while (currentZone && currentZone.constructedAtException) {\n      traces.push(\n          '--- ' + (Date(currentZone.constructedAtTime)).toString() +\n          ' - ' + (now - currentZone.constructedAtTime) + 'ms ago',\n          currentZone.constructedAtException.get());\n      currentZone = currentZone.parent;\n    }\n\n    return traces.join('\\n');\n  },\n\n  stackFramesFilter: function (line) {\n    return !/zone(-microtask)?(\\.min)?\\.js/.test(line);\n  },\n\n  onError: function (exception) {\n    var reporter = this.reporter || console.log.bind(console);\n    reporter(exception.toString());\n    reporter(this.getLongStacktrace(exception));\n  },\n\n  '$fork': function (parentFork) {\n    return function() {\n      var newZone = parentFork.apply(this, arguments);\n      newZone.constructedAtException = _getStacktrace();\n      newZone.constructedAtTime = Date.now();\n      return newZone;\n    }\n  }\n};\n\n\n}).call(this,typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n},{}]},{},[1]);\n\n/**\n @license\nApache License\n\nVersion 2.0, January 2004\n\nhttp://www.apache.org/licenses/\n\nTERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION\n\n1. Definitions.\n\n\"License\" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document.\n\n\"Licensor\" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License.\n\n\"Legal Entity\" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, \"control\" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity.\n\n\"You\" (or \"Your\") shall mean an individual or Legal Entity exercising permissions granted by this License.\n\n\"Source\" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files.\n\n\"Object\" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types.\n\n\"Work\" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below).\n\n\"Derivative Works\" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof.\n\n\"Contribution\" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, \"submitted\" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as \"Not a Contribution.\"\n\n\"Contributor\" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work.\n\n2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form.\n\n3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed.\n\n4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions:\n\nYou must give any other recipients of the Work or Derivative Works a copy of this License; and\n\nYou must cause any modified files to carry prominent notices stating that You changed the files; and\n\nYou must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and\n\nIf the Work includes a \"NOTICE\" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License.\n\n5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions.\n\n6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file.\n\n7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License.\n\n8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages.\n\n9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability.\n\nEND OF TERMS AND CONDITIONS\n */\n\n/*! *****************************************************************************\nCopyright (C) Microsoft. All rights reserved.\nLicensed under the Apache License, Version 2.0 (the \"License\"); you may not use\nthis file except in compliance with the License. You may obtain a copy of the\nLicense at http://www.apache.org/licenses/LICENSE-2.0\n\nTHIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\nKIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED\nWARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,\nMERCHANTABLITY OR NON-INFRINGEMENT.\n\nSee the Apache Version 2.0 License for specific language governing permissions\nand limitations under the License.\n***************************************************************************** */\n\"use strict\";\nvar Reflect;\n(function (Reflect) {\n    // Load global or shim versions of Map, Set, and WeakMap\n    var functionPrototype = Object.getPrototypeOf(Function);\n    var _Map = typeof Map === \"function\" ? Map : CreateMapPolyfill();\n    var _Set = typeof Set === \"function\" ? Set : CreateSetPolyfill();\n    var _WeakMap = typeof WeakMap === \"function\" ? WeakMap : CreateWeakMapPolyfill();\n    // [[Metadata]] internal slot\n    var __Metadata__ = new _WeakMap();\n    /**\n      * Applies a set of decorators to a property of a target object.\n      * @param decorators An array of decorators.\n      * @param target The target object.\n      * @param targetKey (Optional) The property key to decorate.\n      * @param targetDescriptor (Optional) The property descriptor for the target key\n      * @remarks Decorators are applied in reverse order.\n      * @example\n      *\n      *     class C {\n      *         // property declarations are not part of ES6, though they are valid in TypeScript:\n      *         // static staticProperty;\n      *         // property;\n      *\n      *         constructor(p) { }\n      *         static staticMethod(p) { }\n      *         method(p) { }\n      *     }\n      *\n      *     // constructor\n      *     C = Reflect.decorate(decoratorsArray, C);\n      *\n      *     // property (on constructor)\n      *     Reflect.decorate(decoratorsArray, C, \"staticProperty\");\n      *\n      *     // property (on prototype)\n      *     Reflect.decorate(decoratorsArray, C.prototype, \"property\");\n      *\n      *     // method (on constructor)\n      *     Object.defineProperty(C, \"staticMethod\",\n      *         Reflect.decorate(decoratorsArray, C, \"staticMethod\",\n      *             Object.getOwnPropertyDescriptor(C, \"staticMethod\")));\n      *\n      *     // method (on prototype)\n      *     Object.defineProperty(C.prototype, \"method\",\n      *         Reflect.decorate(decoratorsArray, C.prototype, \"method\",\n      *             Object.getOwnPropertyDescriptor(C.prototype, \"method\")));\n      *\n      */\n    function decorate(decorators, target, targetKey, targetDescriptor) {\n        if (!IsUndefined(targetDescriptor)) {\n            if (!IsArray(decorators)) {\n                throw new TypeError();\n            }\n            else if (!IsObject(target)) {\n                throw new TypeError();\n            }\n            else if (IsUndefined(targetKey)) {\n                throw new TypeError();\n            }\n            else if (!IsObject(targetDescriptor)) {\n                throw new TypeError();\n            }\n            targetKey = ToPropertyKey(targetKey);\n            return DecoratePropertyWithDescriptor(decorators, target, targetKey, targetDescriptor);\n        }\n        else if (!IsUndefined(targetKey)) {\n            if (!IsArray(decorators)) {\n                throw new TypeError();\n            }\n            else if (!IsObject(target)) {\n                throw new TypeError();\n            }\n            targetKey = ToPropertyKey(targetKey);\n            return DecoratePropertyWithoutDescriptor(decorators, target, targetKey);\n        }\n        else {\n            if (!IsArray(decorators)) {\n                throw new TypeError();\n            }\n            else if (!IsConstructor(target)) {\n                throw new TypeError();\n            }\n            return DecorateConstructor(decorators, target);\n        }\n    }\n    Reflect.decorate = decorate;\n    /**\n      * A default metadata decorator factory that can be used on a class, class member, or parameter.\n      * @param metadataKey The key for the metadata entry.\n      * @param metadataValue The value for the metadata entry.\n      * @returns A decorator function.\n      * @remarks\n      * If `metadataKey` is already defined for the target and target key, the\n      * metadataValue for that key will be overwritten.\n      * @example\n      *\n      *     // constructor\n      *     @Reflect.metadata(key, value)\n      *     class C {\n      *     }\n      *\n      *     // property (on constructor, TypeScript only)\n      *     class C {\n      *         @Reflect.metadata(key, value)\n      *         static staticProperty;\n      *     }\n      *\n      *     // property (on prototype, TypeScript only)\n      *     class C {\n      *         @Reflect.metadata(key, value)\n      *         property;\n      *     }\n      *\n      *     // method (on constructor)\n      *     class C {\n      *         @Reflect.metadata(key, value)\n      *         static staticMethod() { }\n      *     }\n      *\n      *     // method (on prototype)\n      *     class C {\n      *         @Reflect.metadata(key, value)\n      *         method() { }\n      *     }\n      *\n      */\n    function metadata(metadataKey, metadataValue) {\n        function decorator(target, targetKey) {\n            if (!IsUndefined(targetKey)) {\n                if (!IsObject(target)) {\n                    throw new TypeError();\n                }\n                targetKey = ToPropertyKey(targetKey);\n                OrdinaryDefineOwnMetadata(metadataKey, metadataValue, target, targetKey);\n            }\n            else {\n                if (!IsConstructor(target)) {\n                    throw new TypeError();\n                }\n                OrdinaryDefineOwnMetadata(metadataKey, metadataValue, target, undefined);\n            }\n        }\n        return decorator;\n    }\n    Reflect.metadata = metadata;\n    /**\n      * Define a unique metadata entry on the target.\n      * @param metadataKey A key used to store and retrieve metadata.\n      * @param metadataValue A value that contains attached metadata.\n      * @param target The target object on which to define metadata.\n      * @param targetKey (Optional) The property key for the target.\n      * @example\n      *\n      *     class C {\n      *         // property declarations are not part of ES6, though they are valid in TypeScript:\n      *         // static staticProperty;\n      *         // property;\n      *\n      *         constructor(p) { }\n      *         static staticMethod(p) { }\n      *         method(p) { }\n      *     }\n      *\n      *     // constructor\n      *     Reflect.defineMetadata(\"custom:annotation\", options, C);\n      *\n      *     // property (on constructor)\n      *     Reflect.defineMetadata(\"custom:annotation\", options, C, \"staticProperty\");\n      *\n      *     // property (on prototype)\n      *     Reflect.defineMetadata(\"custom:annotation\", options, C.prototype, \"property\");\n      *\n      *     // method (on constructor)\n      *     Reflect.defineMetadata(\"custom:annotation\", options, C, \"staticMethod\");\n      *\n      *     // method (on prototype)\n      *     Reflect.defineMetadata(\"custom:annotation\", options, C.prototype, \"method\");\n      *\n      *     // decorator factory as metadata-producing annotation.\n      *     function MyAnnotation(options): Decorator {\n      *         return (target, key?) => Reflect.defineMetadata(\"custom:annotation\", options, target, key);\n      *     }\n      *\n      */\n    function defineMetadata(metadataKey, metadataValue, target, targetKey) {\n        if (!IsObject(target)) {\n            throw new TypeError();\n        }\n        else if (!IsUndefined(targetKey)) {\n            targetKey = ToPropertyKey(targetKey);\n        }\n        return OrdinaryDefineOwnMetadata(metadataKey, metadataValue, target, targetKey);\n    }\n    Reflect.defineMetadata = defineMetadata;\n    /**\n      * Gets a value indicating whether the target object or its prototype chain has the provided metadata key defined.\n      * @param metadataKey A key used to store and retrieve metadata.\n      * @param target The target object on which the metadata is defined.\n      * @param targetKey (Optional) The property key for the target.\n      * @returns `true` if the metadata key was defined on the target object or its prototype chain; otherwise, `false`.\n      * @example\n      *\n      *     class C {\n      *         // property declarations are not part of ES6, though they are valid in TypeScript:\n      *         // static staticProperty;\n      *         // property;\n      *\n      *         constructor(p) { }\n      *         static staticMethod(p) { }\n      *         method(p) { }\n      *     }\n      *\n      *     // constructor\n      *     result = Reflect.hasMetadata(\"custom:annotation\", C);\n      *\n      *     // property (on constructor)\n      *     result = Reflect.hasMetadata(\"custom:annotation\", C, \"staticProperty\");\n      *\n      *     // property (on prototype)\n      *     result = Reflect.hasMetadata(\"custom:annotation\", C.prototype, \"property\");\n      *\n      *     // method (on constructor)\n      *     result = Reflect.hasMetadata(\"custom:annotation\", C, \"staticMethod\");\n      *\n      *     // method (on prototype)\n      *     result = Reflect.hasMetadata(\"custom:annotation\", C.prototype, \"method\");\n      *\n      */\n    function hasMetadata(metadataKey, target, targetKey) {\n        if (!IsObject(target)) {\n            throw new TypeError();\n        }\n        else if (!IsUndefined(targetKey)) {\n            targetKey = ToPropertyKey(targetKey);\n        }\n        return OrdinaryHasMetadata(metadataKey, target, targetKey);\n    }\n    Reflect.hasMetadata = hasMetadata;\n    /**\n      * Gets a value indicating whether the target object has the provided metadata key defined.\n      * @param metadataKey A key used to store and retrieve metadata.\n      * @param target The target object on which the metadata is defined.\n      * @param targetKey (Optional) The property key for the target.\n      * @returns `true` if the metadata key was defined on the target object; otherwise, `false`.\n      * @example\n      *\n      *     class C {\n      *         // property declarations are not part of ES6, though they are valid in TypeScript:\n      *         // static staticProperty;\n      *         // property;\n      *\n      *         constructor(p) { }\n      *         static staticMethod(p) { }\n      *         method(p) { }\n      *     }\n      *\n      *     // constructor\n      *     result = Reflect.hasOwnMetadata(\"custom:annotation\", C);\n      *\n      *     // property (on constructor)\n      *     result = Reflect.hasOwnMetadata(\"custom:annotation\", C, \"staticProperty\");\n      *\n      *     // property (on prototype)\n      *     result = Reflect.hasOwnMetadata(\"custom:annotation\", C.prototype, \"property\");\n      *\n      *     // method (on constructor)\n      *     result = Reflect.hasOwnMetadata(\"custom:annotation\", C, \"staticMethod\");\n      *\n      *     // method (on prototype)\n      *     result = Reflect.hasOwnMetadata(\"custom:annotation\", C.prototype, \"method\");\n      *\n      */\n    function hasOwnMetadata(metadataKey, target, targetKey) {\n        if (!IsObject(target)) {\n            throw new TypeError();\n        }\n        else if (!IsUndefined(targetKey)) {\n            targetKey = ToPropertyKey(targetKey);\n        }\n        return OrdinaryHasOwnMetadata(metadataKey, target, targetKey);\n    }\n    Reflect.hasOwnMetadata = hasOwnMetadata;\n    /**\n      * Gets the metadata value for the provided metadata key on the target object or its prototype chain.\n      * @param metadataKey A key used to store and retrieve metadata.\n      * @param target The target object on which the metadata is defined.\n      * @param targetKey (Optional) The property key for the target.\n      * @returns The metadata value for the metadata key if found; otherwise, `undefined`.\n      * @example\n      *\n      *     class C {\n      *         // property declarations are not part of ES6, though they are valid in TypeScript:\n      *         // static staticProperty;\n      *         // property;\n      *\n      *         constructor(p) { }\n      *         static staticMethod(p) { }\n      *         method(p) { }\n      *     }\n      *\n      *     // constructor\n      *     result = Reflect.getMetadata(\"custom:annotation\", C);\n      *\n      *     // property (on constructor)\n      *     result = Reflect.getMetadata(\"custom:annotation\", C, \"staticProperty\");\n      *\n      *     // property (on prototype)\n      *     result = Reflect.getMetadata(\"custom:annotation\", C.prototype, \"property\");\n      *\n      *     // method (on constructor)\n      *     result = Reflect.getMetadata(\"custom:annotation\", C, \"staticMethod\");\n      *\n      *     // method (on prototype)\n      *     result = Reflect.getMetadata(\"custom:annotation\", C.prototype, \"method\");\n      *\n      */\n    function getMetadata(metadataKey, target, targetKey) {\n        if (!IsObject(target)) {\n            throw new TypeError();\n        }\n        else if (!IsUndefined(targetKey)) {\n            targetKey = ToPropertyKey(targetKey);\n        }\n        return OrdinaryGetMetadata(metadataKey, target, targetKey);\n    }\n    Reflect.getMetadata = getMetadata;\n    /**\n      * Gets the metadata value for the provided metadata key on the target object.\n      * @param metadataKey A key used to store and retrieve metadata.\n      * @param target The target object on which the metadata is defined.\n      * @param targetKey (Optional) The property key for the target.\n      * @returns The metadata value for the metadata key if found; otherwise, `undefined`.\n      * @example\n      *\n      *     class C {\n      *         // property declarations are not part of ES6, though they are valid in TypeScript:\n      *         // static staticProperty;\n      *         // property;\n      *\n      *         constructor(p) { }\n      *         static staticMethod(p) { }\n      *         method(p) { }\n      *     }\n      *\n      *     // constructor\n      *     result = Reflect.getOwnMetadata(\"custom:annotation\", C);\n      *\n      *     // property (on constructor)\n      *     result = Reflect.getOwnMetadata(\"custom:annotation\", C, \"staticProperty\");\n      *\n      *     // property (on prototype)\n      *     result = Reflect.getOwnMetadata(\"custom:annotation\", C.prototype, \"property\");\n      *\n      *     // method (on constructor)\n      *     result = Reflect.getOwnMetadata(\"custom:annotation\", C, \"staticMethod\");\n      *\n      *     // method (on prototype)\n      *     result = Reflect.getOwnMetadata(\"custom:annotation\", C.prototype, \"method\");\n      *\n      */\n    function getOwnMetadata(metadataKey, target, targetKey) {\n        if (!IsObject(target)) {\n            throw new TypeError();\n        }\n        else if (!IsUndefined(targetKey)) {\n            targetKey = ToPropertyKey(targetKey);\n        }\n        return OrdinaryGetOwnMetadata(metadataKey, target, targetKey);\n    }\n    Reflect.getOwnMetadata = getOwnMetadata;\n    /**\n      * Gets the metadata keys defined on the target object or its prototype chain.\n      * @param target The target object on which the metadata is defined.\n      * @param targetKey (Optional) The property key for the target.\n      * @returns An array of unique metadata keys.\n      * @example\n      *\n      *     class C {\n      *         // property declarations are not part of ES6, though they are valid in TypeScript:\n      *         // static staticProperty;\n      *         // property;\n      *\n      *         constructor(p) { }\n      *         static staticMethod(p) { }\n      *         method(p) { }\n      *     }\n      *\n      *     // constructor\n      *     result = Reflect.getMetadataKeys(C);\n      *\n      *     // property (on constructor)\n      *     result = Reflect.getMetadataKeys(C, \"staticProperty\");\n      *\n      *     // property (on prototype)\n      *     result = Reflect.getMetadataKeys(C.prototype, \"property\");\n      *\n      *     // method (on constructor)\n      *     result = Reflect.getMetadataKeys(C, \"staticMethod\");\n      *\n      *     // method (on prototype)\n      *     result = Reflect.getMetadataKeys(C.prototype, \"method\");\n      *\n      */\n    function getMetadataKeys(target, targetKey) {\n        if (!IsObject(target)) {\n            throw new TypeError();\n        }\n        else if (!IsUndefined(targetKey)) {\n            targetKey = ToPropertyKey(targetKey);\n        }\n        return OrdinaryMetadataKeys(target, targetKey);\n    }\n    Reflect.getMetadataKeys = getMetadataKeys;\n    /**\n      * Gets the unique metadata keys defined on the target object.\n      * @param target The target object on which the metadata is defined.\n      * @param targetKey (Optional) The property key for the target.\n      * @returns An array of unique metadata keys.\n      * @example\n      *\n      *     class C {\n      *         // property declarations are not part of ES6, though they are valid in TypeScript:\n      *         // static staticProperty;\n      *         // property;\n      *\n      *         constructor(p) { }\n      *         static staticMethod(p) { }\n      *         method(p) { }\n      *     }\n      *\n      *     // constructor\n      *     result = Reflect.getOwnMetadataKeys(C);\n      *\n      *     // property (on constructor)\n      *     result = Reflect.getOwnMetadataKeys(C, \"staticProperty\");\n      *\n      *     // property (on prototype)\n      *     result = Reflect.getOwnMetadataKeys(C.prototype, \"property\");\n      *\n      *     // method (on constructor)\n      *     result = Reflect.getOwnMetadataKeys(C, \"staticMethod\");\n      *\n      *     // method (on prototype)\n      *     result = Reflect.getOwnMetadataKeys(C.prototype, \"method\");\n      *\n      */\n    function getOwnMetadataKeys(target, targetKey) {\n        if (!IsObject(target)) {\n            throw new TypeError();\n        }\n        else if (!IsUndefined(targetKey)) {\n            targetKey = ToPropertyKey(targetKey);\n        }\n        return OrdinaryOwnMetadataKeys(target, targetKey);\n    }\n    Reflect.getOwnMetadataKeys = getOwnMetadataKeys;\n    /**\n      * Deletes the metadata entry from the target object with the provided key.\n      * @param metadataKey A key used to store and retrieve metadata.\n      * @param target The target object on which the metadata is defined.\n      * @param targetKey (Optional) The property key for the target.\n      * @returns `true` if the metadata entry was found and deleted; otherwise, false.\n      * @example\n      *\n      *     class C {\n      *         // property declarations are not part of ES6, though they are valid in TypeScript:\n      *         // static staticProperty;\n      *         // property;\n      *\n      *         constructor(p) { }\n      *         static staticMethod(p) { }\n      *         method(p) { }\n      *     }\n      *\n      *     // constructor\n      *     result = Reflect.deleteMetadata(\"custom:annotation\", C);\n      *\n      *     // property (on constructor)\n      *     result = Reflect.deleteMetadata(\"custom:annotation\", C, \"staticProperty\");\n      *\n      *     // property (on prototype)\n      *     result = Reflect.deleteMetadata(\"custom:annotation\", C.prototype, \"property\");\n      *\n      *     // method (on constructor)\n      *     result = Reflect.deleteMetadata(\"custom:annotation\", C, \"staticMethod\");\n      *\n      *     // method (on prototype)\n      *     result = Reflect.deleteMetadata(\"custom:annotation\", C.prototype, \"method\");\n      *\n      */\n    function deleteMetadata(metadataKey, target, targetKey) {\n        if (!IsObject(target)) {\n            throw new TypeError();\n        }\n        else if (!IsUndefined(targetKey)) {\n            targetKey = ToPropertyKey(targetKey);\n        }\n        // https://github.com/jonathandturner/decorators/blob/master/specs/metadata.md#deletemetadata-metadatakey-p-\n        var metadataMap = GetOrCreateMetadataMap(target, targetKey, false);\n        if (IsUndefined(metadataMap)) {\n            return false;\n        }\n        if (!metadataMap.delete(metadataKey)) {\n            return false;\n        }\n        if (metadataMap.size > 0) {\n            return true;\n        }\n        var targetMetadata = __Metadata__.get(target);\n        targetMetadata.delete(targetKey);\n        if (targetMetadata.size > 0) {\n            return true;\n        }\n        __Metadata__.delete(target);\n        return true;\n    }\n    Reflect.deleteMetadata = deleteMetadata;\n    function DecorateConstructor(decorators, target) {\n        for (var i = decorators.length - 1; i >= 0; --i) {\n            var decorator = decorators[i];\n            var decorated = decorator(target);\n            if (!IsUndefined(decorated)) {\n                if (!IsConstructor(decorated)) {\n                    throw new TypeError();\n                }\n                target = decorated;\n            }\n        }\n        return target;\n    }\n    function DecoratePropertyWithDescriptor(decorators, target, propertyKey, descriptor) {\n        for (var i = decorators.length - 1; i >= 0; --i) {\n            var decorator = decorators[i];\n            var decorated = decorator(target, propertyKey, descriptor);\n            if (!IsUndefined(decorated)) {\n                if (!IsObject(decorated)) {\n                    throw new TypeError();\n                }\n                descriptor = decorated;\n            }\n        }\n        return descriptor;\n    }\n    function DecoratePropertyWithoutDescriptor(decorators, target, propertyKey) {\n        for (var i = decorators.length - 1; i >= 0; --i) {\n            var decorator = decorators[i];\n            decorator(target, propertyKey);\n        }\n    }\n    // https://github.com/jonathandturner/decorators/blob/master/specs/metadata.md#getorcreatemetadatamap--o-p-create-\n    function GetOrCreateMetadataMap(target, targetKey, create) {\n        var targetMetadata = __Metadata__.get(target);\n        if (!targetMetadata) {\n            if (!create) {\n                return undefined;\n            }\n            targetMetadata = new _Map();\n            __Metadata__.set(target, targetMetadata);\n        }\n        var keyMetadata = targetMetadata.get(targetKey);\n        if (!keyMetadata) {\n            if (!create) {\n                return undefined;\n            }\n            keyMetadata = new _Map();\n            targetMetadata.set(targetKey, keyMetadata);\n        }\n        return keyMetadata;\n    }\n    // https://github.com/jonathandturner/decorators/blob/master/specs/metadata.md#ordinaryhasmetadata--metadatakey-o-p-\n    function OrdinaryHasMetadata(MetadataKey, O, P) {\n        var hasOwn = OrdinaryHasOwnMetadata(MetadataKey, O, P);\n        if (hasOwn) {\n            return true;\n        }\n        var parent = GetPrototypeOf(O);\n        if (parent !== null) {\n            return OrdinaryHasMetadata(MetadataKey, parent, P);\n        }\n        return false;\n    }\n    // https://github.com/jonathandturner/decorators/blob/master/specs/metadata.md#ordinaryhasownmetadata--metadatakey-o-p-\n    function OrdinaryHasOwnMetadata(MetadataKey, O, P) {\n        var metadataMap = GetOrCreateMetadataMap(O, P, false);\n        if (metadataMap === undefined) {\n            return false;\n        }\n        return Boolean(metadataMap.has(MetadataKey));\n    }\n    // https://github.com/jonathandturner/decorators/blob/master/specs/metadata.md#ordinarygetmetadata--metadatakey-o-p-\n    function OrdinaryGetMetadata(MetadataKey, O, P) {\n        var hasOwn = OrdinaryHasOwnMetadata(MetadataKey, O, P);\n        if (hasOwn) {\n            return OrdinaryGetOwnMetadata(MetadataKey, O, P);\n        }\n        var parent = GetPrototypeOf(O);\n        if (parent !== null) {\n            return OrdinaryGetMetadata(MetadataKey, parent, P);\n        }\n        return undefined;\n    }\n    // https://github.com/jonathandturner/decorators/blob/master/specs/metadata.md#ordinarygetownmetadata--metadatakey-o-p-\n    function OrdinaryGetOwnMetadata(MetadataKey, O, P) {\n        var metadataMap = GetOrCreateMetadataMap(O, P, false);\n        if (metadataMap === undefined) {\n            return undefined;\n        }\n        return metadataMap.get(MetadataKey);\n    }\n    // https://github.com/jonathandturner/decorators/blob/master/specs/metadata.md#ordinarydefineownmetadata--metadatakey-metadatavalue-o-p-\n    function OrdinaryDefineOwnMetadata(MetadataKey, MetadataValue, O, P) {\n        var metadataMap = GetOrCreateMetadataMap(O, P, true);\n        metadataMap.set(MetadataKey, MetadataValue);\n    }\n    // https://github.com/jonathandturner/decorators/blob/master/specs/metadata.md#ordinarymetadatakeys--o-p-\n    function OrdinaryMetadataKeys(O, P) {\n        var ownKeys = OrdinaryOwnMetadataKeys(O, P);\n        var parent = GetPrototypeOf(O);\n        if (parent === null) {\n            return ownKeys;\n        }\n        var parentKeys = OrdinaryMetadataKeys(parent, P);\n        if (parentKeys.length <= 0) {\n            return ownKeys;\n        }\n        if (ownKeys.length <= 0) {\n            return parentKeys;\n        }\n        var set = new _Set();\n        var keys = [];\n        for (var _i = 0; _i < ownKeys.length; _i++) {\n            var key = ownKeys[_i];\n            var hasKey = set.has(key);\n            if (!hasKey) {\n                set.add(key);\n                keys.push(key);\n            }\n        }\n        for (var _a = 0; _a < parentKeys.length; _a++) {\n            var key = parentKeys[_a];\n            var hasKey = set.has(key);\n            if (!hasKey) {\n                set.add(key);\n                keys.push(key);\n            }\n        }\n        return keys;\n    }\n    // https://github.com/jonathandturner/decorators/blob/master/specs/metadata.md#ordinaryownmetadatakeys--o-p-\n    function OrdinaryOwnMetadataKeys(target, targetKey) {\n        var metadataMap = GetOrCreateMetadataMap(target, targetKey, false);\n        var keys = [];\n        if (metadataMap) {\n            metadataMap.forEach(function (_, key) { return keys.push(key); });\n        }\n        return keys;\n    }\n    // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-ecmascript-language-types-undefined-type\n    function IsUndefined(x) {\n        return x === undefined;\n    }\n    // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-isarray\n    function IsArray(x) {\n        return Array.isArray(x);\n    }\n    // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-object-type\n    function IsObject(x) {\n        return typeof x === \"object\" ? x !== null : typeof x === \"function\";\n    }\n    // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-isconstructor\n    function IsConstructor(x) {\n        return typeof x === \"function\";\n    }\n    // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-ecmascript-language-types-symbol-type\n    function IsSymbol(x) {\n        return typeof x === \"symbol\";\n    }\n    // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-topropertykey\n    function ToPropertyKey(value) {\n        if (IsSymbol(value)) {\n            return value;\n        }\n        return String(value);\n    }\n    function GetPrototypeOf(O) {\n        var proto = Object.getPrototypeOf(O);\n        if (typeof O !== \"function\" || O === functionPrototype) {\n            return proto;\n        }\n        // TypeScript doesn't set __proto__ in ES5, as it's non-standard.\n        // Try to determine the superclass constructor. Compatible implementations\n        // must either set __proto__ on a subclass constructor to the superclass constructor,\n        // or ensure each class has a valid `constructor` property on its prototype that\n        // points back to the constructor.\n        // If this is not the same as Function.[[Prototype]], then this is definately inherited.\n        // This is the case when in ES6 or when using __proto__ in a compatible browser.\n        if (proto !== functionPrototype) {\n            return proto;\n        }\n        // If the super prototype is Object.prototype, null, or undefined, then we cannot determine the heritage.\n        var prototype = O.prototype;\n        var prototypeProto = Object.getPrototypeOf(prototype);\n        if (prototypeProto == null || prototypeProto === Object.prototype) {\n            return proto;\n        }\n        // if the constructor was not a function, then we cannot determine the heritage.\n        var constructor = prototypeProto.constructor;\n        if (typeof constructor !== \"function\") {\n            return proto;\n        }\n        // if we have some kind of self-reference, then we cannot determine the heritage.\n        if (constructor === O) {\n            return proto;\n        }\n        // we have a pretty good guess at the heritage.\n        return constructor;\n    }\n    // naive Map shim\n    function CreateMapPolyfill() {\n        var cacheSentinel = {};\n        function Map() {\n            this._keys = [];\n            this._values = [];\n            this._cache = cacheSentinel;\n        }\n        Map.prototype = {\n            get size() {\n                return this._keys.length;\n            },\n            has: function (key) {\n                if (key === this._cache) {\n                    return true;\n                }\n                if (this._find(key) >= 0) {\n                    this._cache = key;\n                    return true;\n                }\n                return false;\n            },\n            get: function (key) {\n                var index = this._find(key);\n                if (index >= 0) {\n                    this._cache = key;\n                    return this._values[index];\n                }\n                return undefined;\n            },\n            set: function (key, value) {\n                this.delete(key);\n                this._keys.push(key);\n                this._values.push(value);\n                this._cache = key;\n                return this;\n            },\n            delete: function (key) {\n                var index = this._find(key);\n                if (index >= 0) {\n                    this._keys.splice(index, 1);\n                    this._values.splice(index, 1);\n                    this._cache = cacheSentinel;\n                    return true;\n                }\n                return false;\n            },\n            clear: function () {\n                this._keys.length = 0;\n                this._values.length = 0;\n                this._cache = cacheSentinel;\n            },\n            forEach: function (callback, thisArg) {\n                var size = this.size;\n                for (var i = 0; i < size; ++i) {\n                    var key = this._keys[i];\n                    var value = this._values[i];\n                    this._cache = key;\n                    callback.call(this, value, key, this);\n                }\n            },\n            _find: function (key) {\n                var keys = this._keys;\n                var size = keys.length;\n                for (var i = 0; i < size; ++i) {\n                    if (keys[i] === key) {\n                        return i;\n                    }\n                }\n                return -1;\n            }\n        };\n        return Map;\n    }\n    // naive Set shim\n    function CreateSetPolyfill() {\n        var cacheSentinel = {};\n        function Set() {\n            this._map = new _Map();\n        }\n        Set.prototype = {\n            get size() {\n                return this._map.length;\n            },\n            has: function (value) {\n                return this._map.has(value);\n            },\n            add: function (value) {\n                this._map.set(value, value);\n                return this;\n            },\n            delete: function (value) {\n                return this._map.delete(value);\n            },\n            clear: function () {\n                this._map.clear();\n            },\n            forEach: function (callback, thisArg) {\n                this._map.forEach(callback, thisArg);\n            }\n        };\n        return Set;\n    }\n    // naive WeakMap shim\n    function CreateWeakMapPolyfill() {\n        var UUID_SIZE = 16;\n        var isNode = typeof global !== \"undefined\" && Object.prototype.toString.call(global.process) === '[object process]';\n        var nodeCrypto = isNode && require(\"crypto\");\n        var hasOwn = Object.prototype.hasOwnProperty;\n        var keys = {};\n        var rootKey = CreateUniqueKey();\n        function WeakMap() {\n            this._key = CreateUniqueKey();\n        }\n        WeakMap.prototype = {\n            has: function (target) {\n                var table = GetOrCreateWeakMapTable(target, false);\n                if (table) {\n                    return this._key in table;\n                }\n                return false;\n            },\n            get: function (target) {\n                var table = GetOrCreateWeakMapTable(target, false);\n                if (table) {\n                    return table[this._key];\n                }\n                return undefined;\n            },\n            set: function (target, value) {\n                var table = GetOrCreateWeakMapTable(target, true);\n                table[this._key] = value;\n                return this;\n            },\n            delete: function (target) {\n                var table = GetOrCreateWeakMapTable(target, false);\n                if (table && this._key in table) {\n                    return delete table[this._key];\n                }\n                return false;\n            },\n            clear: function () {\n                // NOTE: not a real clear, just makes the previous data unreachable\n                this._key = CreateUniqueKey();\n            }\n        };\n        function FillRandomBytes(buffer, size) {\n            for (var i = 0; i < size; ++i) {\n                buffer[i] = Math.random() * 255 | 0;\n            }\n        }\n        function GenRandomBytes(size) {\n            if (nodeCrypto) {\n                var data = nodeCrypto.randomBytes(size);\n                return data;\n            }\n            else if (typeof Uint8Array === \"function\") {\n                var data = new Uint8Array(size);\n                if (typeof crypto !== \"undefined\") {\n                    crypto.getRandomValues(data);\n                }\n                else if (typeof msCrypto !== \"undefined\") {\n                    msCrypto.getRandomValues(data);\n                }\n                else {\n                    FillRandomBytes(data, size);\n                }\n                return data;\n            }\n            else {\n                var data = new Array(size);\n                FillRandomBytes(data, size);\n                return data;\n            }\n        }\n        function CreateUUID() {\n            var data = GenRandomBytes(UUID_SIZE);\n            // mark as random - RFC 4122 § 4.4\n            data[6] = data[6] & 0x4f | 0x40;\n            data[8] = data[8] & 0xbf | 0x80;\n            var result = \"\";\n            for (var offset = 0; offset < UUID_SIZE; ++offset) {\n                var byte = data[offset];\n                if (offset === 4 || offset === 6 || offset === 8) {\n                    result += \"-\";\n                }\n                if (byte < 16) {\n                    result += \"0\";\n                }\n                result += byte.toString(16).toLowerCase();\n            }\n            return result;\n        }\n        function CreateUniqueKey() {\n            var key;\n            do {\n                key = \"@@WeakMap@@\" + CreateUUID();\n            } while (hasOwn.call(keys, key));\n            keys[key] = true;\n            return key;\n        }\n        function GetOrCreateWeakMapTable(target, create) {\n            if (!hasOwn.call(target, rootKey)) {\n                if (!create) {\n                    return undefined;\n                }\n                Object.defineProperty(target, rootKey, { value: Object.create(null) });\n            }\n            return target[rootKey];\n        }\n        return WeakMap;\n    }\n    // hook global Reflect\n    (function (__global) {\n        if (typeof __global.Reflect !== \"undefined\") {\n            if (__global.Reflect !== Reflect) {\n                for (var p in Reflect) {\n                    __global.Reflect[p] = Reflect[p];\n                }\n            }\n        }\n        else {\n            __global.Reflect = Reflect;\n        }\n    })(typeof window !== \"undefined\" ? window :\n        typeof WorkerGlobalScope !== \"undefined\" ? self :\n            typeof global !== \"undefined\" ? global :\n                Function(\"return this;\")());\n})(Reflect || (Reflect = {}));\n//# sourceMappingURLDisabled=Reflect.js.map\n\"format register\";\nSystem.register(\"angular2/src/facade/lang\", [], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  var __extends = (this && this.__extends) || function(d, b) {\n    for (var p in b)\n      if (b.hasOwnProperty(p))\n        d[p] = b[p];\n    function __() {\n      this.constructor = d;\n    }\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n  };\n  var globalScope;\n  if (typeof window === 'undefined') {\n    if (typeof WorkerGlobalScope !== 'undefined' && self instanceof WorkerGlobalScope) {\n      globalScope = self;\n    } else {\n      globalScope = global;\n    }\n  } else {\n    globalScope = window;\n  }\n  ;\n  exports.IS_DART = false;\n  var _global = globalScope;\n  exports.global = _global;\n  exports.Type = Function;\n  function getTypeNameForDebugging(type) {\n    return type['name'];\n  }\n  exports.getTypeNameForDebugging = getTypeNameForDebugging;\n  exports.Math = _global.Math;\n  exports.Date = _global.Date;\n  var _devMode = !!_global.angularDevMode;\n  var _devModeLocked = false;\n  function lockDevMode() {\n    _devModeLocked = true;\n  }\n  exports.lockDevMode = lockDevMode;\n  function enableDevMode() {\n    if (_devModeLocked) {\n      throw 'Cannot enable dev mode after platform setup.';\n    }\n    _devMode = true;\n  }\n  exports.enableDevMode = enableDevMode;\n  function assertionsEnabled() {\n    return _devMode;\n  }\n  exports.assertionsEnabled = assertionsEnabled;\n  _global.assert = function assert(condition) {};\n  function CONST_EXPR(expr) {\n    return expr;\n  }\n  exports.CONST_EXPR = CONST_EXPR;\n  function CONST() {\n    return function(target) {\n      return target;\n    };\n  }\n  exports.CONST = CONST;\n  function isPresent(obj) {\n    return obj !== undefined && obj !== null;\n  }\n  exports.isPresent = isPresent;\n  function isBlank(obj) {\n    return obj === undefined || obj === null;\n  }\n  exports.isBlank = isBlank;\n  function isString(obj) {\n    return typeof obj === \"string\";\n  }\n  exports.isString = isString;\n  function isFunction(obj) {\n    return typeof obj === \"function\";\n  }\n  exports.isFunction = isFunction;\n  function isType(obj) {\n    return isFunction(obj);\n  }\n  exports.isType = isType;\n  function isStringMap(obj) {\n    return typeof obj === 'object' && obj !== null;\n  }\n  exports.isStringMap = isStringMap;\n  function isPromise(obj) {\n    return obj instanceof _global.Promise;\n  }\n  exports.isPromise = isPromise;\n  function isArray(obj) {\n    return Array.isArray(obj);\n  }\n  exports.isArray = isArray;\n  function isNumber(obj) {\n    return typeof obj === 'number';\n  }\n  exports.isNumber = isNumber;\n  function isDate(obj) {\n    return obj instanceof exports.Date && !isNaN(obj.valueOf());\n  }\n  exports.isDate = isDate;\n  function stringify(token) {\n    if (typeof token === 'string') {\n      return token;\n    }\n    if (token === undefined || token === null) {\n      return '' + token;\n    }\n    if (token.name) {\n      return token.name;\n    }\n    var res = token.toString();\n    var newLineIndex = res.indexOf(\"\\n\");\n    return (newLineIndex === -1) ? res : res.substring(0, newLineIndex);\n  }\n  exports.stringify = stringify;\n  function serializeEnum(val) {\n    return val;\n  }\n  exports.serializeEnum = serializeEnum;\n  function deserializeEnum(val, values) {\n    return val;\n  }\n  exports.deserializeEnum = deserializeEnum;\n  var StringWrapper = (function() {\n    function StringWrapper() {}\n    StringWrapper.fromCharCode = function(code) {\n      return String.fromCharCode(code);\n    };\n    StringWrapper.charCodeAt = function(s, index) {\n      return s.charCodeAt(index);\n    };\n    StringWrapper.split = function(s, regExp) {\n      return s.split(regExp);\n    };\n    StringWrapper.equals = function(s, s2) {\n      return s === s2;\n    };\n    StringWrapper.replace = function(s, from, replace) {\n      return s.replace(from, replace);\n    };\n    StringWrapper.replaceAll = function(s, from, replace) {\n      return s.replace(from, replace);\n    };\n    StringWrapper.slice = function(s, from, to) {\n      if (from === void 0) {\n        from = 0;\n      }\n      if (to === void 0) {\n        to = null;\n      }\n      return s.slice(from, to === null ? undefined : to);\n    };\n    StringWrapper.replaceAllMapped = function(s, from, cb) {\n      return s.replace(from, function() {\n        var matches = [];\n        for (var _i = 0; _i < arguments.length; _i++) {\n          matches[_i - 0] = arguments[_i];\n        }\n        matches.splice(-2, 2);\n        return cb(matches);\n      });\n    };\n    StringWrapper.contains = function(s, substr) {\n      return s.indexOf(substr) != -1;\n    };\n    StringWrapper.compare = function(a, b) {\n      if (a < b) {\n        return -1;\n      } else if (a > b) {\n        return 1;\n      } else {\n        return 0;\n      }\n    };\n    return StringWrapper;\n  })();\n  exports.StringWrapper = StringWrapper;\n  var StringJoiner = (function() {\n    function StringJoiner(parts) {\n      if (parts === void 0) {\n        parts = [];\n      }\n      this.parts = parts;\n    }\n    StringJoiner.prototype.add = function(part) {\n      this.parts.push(part);\n    };\n    StringJoiner.prototype.toString = function() {\n      return this.parts.join(\"\");\n    };\n    return StringJoiner;\n  })();\n  exports.StringJoiner = StringJoiner;\n  var NumberParseError = (function(_super) {\n    __extends(NumberParseError, _super);\n    function NumberParseError(message) {\n      _super.call(this);\n      this.message = message;\n    }\n    NumberParseError.prototype.toString = function() {\n      return this.message;\n    };\n    return NumberParseError;\n  })(Error);\n  exports.NumberParseError = NumberParseError;\n  var NumberWrapper = (function() {\n    function NumberWrapper() {}\n    NumberWrapper.toFixed = function(n, fractionDigits) {\n      return n.toFixed(fractionDigits);\n    };\n    NumberWrapper.equal = function(a, b) {\n      return a === b;\n    };\n    NumberWrapper.parseIntAutoRadix = function(text) {\n      var result = parseInt(text);\n      if (isNaN(result)) {\n        throw new NumberParseError(\"Invalid integer literal when parsing \" + text);\n      }\n      return result;\n    };\n    NumberWrapper.parseInt = function(text, radix) {\n      if (radix == 10) {\n        if (/^(\\-|\\+)?[0-9]+$/.test(text)) {\n          return parseInt(text, radix);\n        }\n      } else if (radix == 16) {\n        if (/^(\\-|\\+)?[0-9ABCDEFabcdef]+$/.test(text)) {\n          return parseInt(text, radix);\n        }\n      } else {\n        var result = parseInt(text, radix);\n        if (!isNaN(result)) {\n          return result;\n        }\n      }\n      throw new NumberParseError(\"Invalid integer literal when parsing \" + text + \" in base \" + radix);\n    };\n    NumberWrapper.parseFloat = function(text) {\n      return parseFloat(text);\n    };\n    Object.defineProperty(NumberWrapper, \"NaN\", {\n      get: function() {\n        return NaN;\n      },\n      enumerable: true,\n      configurable: true\n    });\n    NumberWrapper.isNaN = function(value) {\n      return isNaN(value);\n    };\n    NumberWrapper.isInteger = function(value) {\n      return Number.isInteger(value);\n    };\n    return NumberWrapper;\n  })();\n  exports.NumberWrapper = NumberWrapper;\n  exports.RegExp = _global.RegExp;\n  var RegExpWrapper = (function() {\n    function RegExpWrapper() {}\n    RegExpWrapper.create = function(regExpStr, flags) {\n      if (flags === void 0) {\n        flags = '';\n      }\n      flags = flags.replace(/g/g, '');\n      return new _global.RegExp(regExpStr, flags + 'g');\n    };\n    RegExpWrapper.firstMatch = function(regExp, input) {\n      regExp.lastIndex = 0;\n      return regExp.exec(input);\n    };\n    RegExpWrapper.test = function(regExp, input) {\n      regExp.lastIndex = 0;\n      return regExp.test(input);\n    };\n    RegExpWrapper.matcher = function(regExp, input) {\n      regExp.lastIndex = 0;\n      return {\n        re: regExp,\n        input: input\n      };\n    };\n    return RegExpWrapper;\n  })();\n  exports.RegExpWrapper = RegExpWrapper;\n  var RegExpMatcherWrapper = (function() {\n    function RegExpMatcherWrapper() {}\n    RegExpMatcherWrapper.next = function(matcher) {\n      return matcher.re.exec(matcher.input);\n    };\n    return RegExpMatcherWrapper;\n  })();\n  exports.RegExpMatcherWrapper = RegExpMatcherWrapper;\n  var FunctionWrapper = (function() {\n    function FunctionWrapper() {}\n    FunctionWrapper.apply = function(fn, posArgs) {\n      return fn.apply(null, posArgs);\n    };\n    return FunctionWrapper;\n  })();\n  exports.FunctionWrapper = FunctionWrapper;\n  function looseIdentical(a, b) {\n    return a === b || typeof a === \"number\" && typeof b === \"number\" && isNaN(a) && isNaN(b);\n  }\n  exports.looseIdentical = looseIdentical;\n  function getMapKey(value) {\n    return value;\n  }\n  exports.getMapKey = getMapKey;\n  function normalizeBlank(obj) {\n    return isBlank(obj) ? null : obj;\n  }\n  exports.normalizeBlank = normalizeBlank;\n  function normalizeBool(obj) {\n    return isBlank(obj) ? false : obj;\n  }\n  exports.normalizeBool = normalizeBool;\n  function isJsObject(o) {\n    return o !== null && (typeof o === \"function\" || typeof o === \"object\");\n  }\n  exports.isJsObject = isJsObject;\n  function print(obj) {\n    console.log(obj);\n  }\n  exports.print = print;\n  var Json = (function() {\n    function Json() {}\n    Json.parse = function(s) {\n      return _global.JSON.parse(s);\n    };\n    Json.stringify = function(data) {\n      return _global.JSON.stringify(data, null, 2);\n    };\n    return Json;\n  })();\n  exports.Json = Json;\n  var DateWrapper = (function() {\n    function DateWrapper() {}\n    DateWrapper.create = function(year, month, day, hour, minutes, seconds, milliseconds) {\n      if (month === void 0) {\n        month = 1;\n      }\n      if (day === void 0) {\n        day = 1;\n      }\n      if (hour === void 0) {\n        hour = 0;\n      }\n      if (minutes === void 0) {\n        minutes = 0;\n      }\n      if (seconds === void 0) {\n        seconds = 0;\n      }\n      if (milliseconds === void 0) {\n        milliseconds = 0;\n      }\n      return new exports.Date(year, month - 1, day, hour, minutes, seconds, milliseconds);\n    };\n    DateWrapper.fromISOString = function(str) {\n      return new exports.Date(str);\n    };\n    DateWrapper.fromMillis = function(ms) {\n      return new exports.Date(ms);\n    };\n    DateWrapper.toMillis = function(date) {\n      return date.getTime();\n    };\n    DateWrapper.now = function() {\n      return new exports.Date();\n    };\n    DateWrapper.toJson = function(date) {\n      return date.toJSON();\n    };\n    return DateWrapper;\n  })();\n  exports.DateWrapper = DateWrapper;\n  function setValueOnPath(global, path, value) {\n    var parts = path.split('.');\n    var obj = global;\n    while (parts.length > 1) {\n      var name = parts.shift();\n      if (obj.hasOwnProperty(name)) {\n        obj = obj[name];\n      } else {\n        obj = obj[name] = {};\n      }\n    }\n    if (obj === undefined || obj === null) {\n      obj = {};\n    }\n    obj[parts.shift()] = value;\n  }\n  exports.setValueOnPath = setValueOnPath;\n  var _symbolIterator = null;\n  function getSymbolIterator() {\n    if (isBlank(_symbolIterator)) {\n      if (isPresent(Symbol) && isPresent(Symbol.iterator)) {\n        _symbolIterator = Symbol.iterator;\n      } else {\n        var keys = Object.getOwnPropertyNames(Map.prototype);\n        for (var i = 0; i < keys.length; ++i) {\n          var key = keys[i];\n          if (key !== 'entries' && key !== 'size' && Map.prototype[key] === Map.prototype['entries']) {\n            _symbolIterator = key;\n          }\n        }\n      }\n    }\n    return _symbolIterator;\n  }\n  exports.getSymbolIterator = getSymbolIterator;\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"angular2/src/facade/promise\", [], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  var PromiseWrapper = (function() {\n    function PromiseWrapper() {}\n    PromiseWrapper.resolve = function(obj) {\n      return Promise.resolve(obj);\n    };\n    PromiseWrapper.reject = function(obj, _) {\n      return Promise.reject(obj);\n    };\n    PromiseWrapper.catchError = function(promise, onError) {\n      return promise.catch(onError);\n    };\n    PromiseWrapper.all = function(promises) {\n      if (promises.length == 0)\n        return Promise.resolve([]);\n      return Promise.all(promises);\n    };\n    PromiseWrapper.then = function(promise, success, rejection) {\n      return promise.then(success, rejection);\n    };\n    PromiseWrapper.wrap = function(computation) {\n      return new Promise(function(res, rej) {\n        try {\n          res(computation());\n        } catch (e) {\n          rej(e);\n        }\n      });\n    };\n    PromiseWrapper.scheduleMicrotask = function(computation) {\n      PromiseWrapper.then(PromiseWrapper.resolve(null), computation, function(_) {});\n    };\n    PromiseWrapper.isPromise = function(obj) {\n      return obj instanceof Promise;\n    };\n    PromiseWrapper.completer = function() {\n      var resolve;\n      var reject;\n      var p = new Promise(function(res, rej) {\n        resolve = res;\n        reject = rej;\n      });\n      return {\n        promise: p,\n        resolve: resolve,\n        reject: reject\n      };\n    };\n    return PromiseWrapper;\n  })();\n  exports.PromiseWrapper = PromiseWrapper;\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"@reactivex/rxjs/dist/cjs/util/noop\", [], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  \"use strict\";\n  exports.__esModule = true;\n  exports[\"default\"] = noop;\n  function noop() {}\n  module.exports = exports[\"default\"];\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"@reactivex/rxjs/dist/cjs/util/throwError\", [], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  \"use strict\";\n  exports.__esModule = true;\n  exports[\"default\"] = throwError;\n  function throwError(e) {\n    throw e;\n  }\n  module.exports = exports[\"default\"];\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"@reactivex/rxjs/dist/cjs/util/tryOrOnError\", [], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  \"use strict\";\n  exports.__esModule = true;\n  exports[\"default\"] = tryOrOnError;\n  function tryOrOnError(target) {\n    function tryCatcher() {\n      try {\n        tryCatcher.target.apply(this, arguments);\n      } catch (e) {\n        this.error(e);\n      }\n    }\n    tryCatcher.target = target;\n    return tryCatcher;\n  }\n  module.exports = exports[\"default\"];\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"@reactivex/rxjs/dist/cjs/Subscription\", [], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  \"use strict\";\n  exports.__esModule = true;\n  function _classCallCheck(instance, Constructor) {\n    if (!(instance instanceof Constructor)) {\n      throw new TypeError(\"Cannot call a class as a function\");\n    }\n  }\n  var Subscription = (function() {\n    function Subscription(_unsubscribe) {\n      _classCallCheck(this, Subscription);\n      this.isUnsubscribed = false;\n      if (_unsubscribe) {\n        this._unsubscribe = _unsubscribe;\n      }\n    }\n    Subscription.prototype._unsubscribe = function _unsubscribe() {};\n    Subscription.prototype.unsubscribe = function unsubscribe() {\n      if (this.isUnsubscribed) {\n        return ;\n      }\n      this.isUnsubscribed = true;\n      var unsubscribe = this._unsubscribe;\n      var subscriptions = this._subscriptions;\n      this._subscriptions = void 0;\n      if (unsubscribe) {\n        unsubscribe.call(this);\n      }\n      if (subscriptions != null) {\n        var index = -1;\n        var len = subscriptions.length;\n        while (++index < len) {\n          subscriptions[index].unsubscribe();\n        }\n      }\n    };\n    Subscription.prototype.add = function add(subscription) {\n      if (!subscription || subscription === this || subscription === Subscription.EMPTY) {\n        return ;\n      }\n      var sub = subscription;\n      switch (typeof subscription) {\n        case \"function\":\n          sub = new Subscription(subscription);\n        case \"object\":\n          if (sub.isUnsubscribed || typeof sub.unsubscribe !== \"function\") {\n            break;\n          } else if (this.isUnsubscribed) {\n            sub.unsubscribe();\n          } else {\n            var subscriptions = this._subscriptions || (this._subscriptions = []);\n            subscriptions.push(sub);\n          }\n          break;\n        default:\n          throw new Error('Unrecognized subscription ' + subscription + ' added to Subscription.');\n      }\n    };\n    Subscription.prototype.remove = function remove(subscription) {\n      if (subscription == null || subscription === this || subscription === Subscription.EMPTY) {\n        return ;\n      }\n      var subscriptions = this._subscriptions;\n      if (subscriptions) {\n        var subscriptionIndex = subscriptions.indexOf(subscription);\n        if (subscriptionIndex !== -1) {\n          subscriptions.splice(subscriptionIndex, 1);\n        }\n      }\n    };\n    return Subscription;\n  })();\n  exports[\"default\"] = Subscription;\n  Subscription.EMPTY = (function(empty) {\n    empty.isUnsubscribed = true;\n    return empty;\n  })(new Subscription());\n  module.exports = exports[\"default\"];\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"@reactivex/rxjs/dist/cjs/util/root\", [], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  'use strict';\n  exports.__esModule = true;\n  var objectTypes = {\n    'boolean': false,\n    'function': true,\n    'object': true,\n    'number': false,\n    'string': false,\n    'undefined': false\n  };\n  var root = objectTypes[typeof self] && self || objectTypes[typeof window] && window;\n  exports.root = root;\n  var freeExports = objectTypes[typeof exports] && exports && !exports.nodeType && exports;\n  var freeModule = objectTypes[typeof module] && module && !module.nodeType && module;\n  var freeGlobal = objectTypes[typeof global] && global;\n  if (freeGlobal && (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal)) {\n    exports.root = root = freeGlobal;\n  }\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"@reactivex/rxjs/dist/cjs/util/Symbol_observable\", [\"@reactivex/rxjs/dist/cjs/util/root\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  'use strict';\n  exports.__esModule = true;\n  var _root = require(\"@reactivex/rxjs/dist/cjs/util/root\");\n  if (!_root.root.Symbol) {\n    _root.root.Symbol = {};\n  }\n  if (!_root.root.Symbol.observable) {\n    if (typeof _root.root.Symbol['for'] === 'function') {\n      _root.root.Symbol.observable = _root.root.Symbol['for']('observable');\n    } else {\n      _root.root.Symbol.observable = '@@observable';\n    }\n  }\n  exports['default'] = _root.root.Symbol.observable;\n  module.exports = exports['default'];\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"@reactivex/rxjs/dist/cjs/util/errorObject\", [], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  \"use strict\";\n  exports.__esModule = true;\n  var errorObject = {e: {}};\n  exports.errorObject = errorObject;\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"@reactivex/rxjs/dist/cjs/observables/ErrorObservable\", [\"@reactivex/rxjs/dist/cjs/Observable\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  'use strict';\n  exports.__esModule = true;\n  function _interopRequireDefault(obj) {\n    return obj && obj.__esModule ? obj : {'default': obj};\n  }\n  function _classCallCheck(instance, Constructor) {\n    if (!(instance instanceof Constructor)) {\n      throw new TypeError('Cannot call a class as a function');\n    }\n  }\n  function _inherits(subClass, superClass) {\n    if (typeof superClass !== 'function' && superClass !== null) {\n      throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass);\n    }\n    subClass.prototype = Object.create(superClass && superClass.prototype, {constructor: {\n        value: subClass,\n        enumerable: false,\n        writable: true,\n        configurable: true\n      }});\n    if (superClass)\n      Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass;\n  }\n  var _Observable2 = require(\"@reactivex/rxjs/dist/cjs/Observable\");\n  var _Observable3 = _interopRequireDefault(_Observable2);\n  var ErrorObservable = (function(_Observable) {\n    _inherits(ErrorObservable, _Observable);\n    function ErrorObservable(error, scheduler) {\n      _classCallCheck(this, ErrorObservable);\n      _Observable.call(this);\n      this.error = error;\n      this.scheduler = scheduler;\n    }\n    ErrorObservable.create = function create(error, scheduler) {\n      return new ErrorObservable(error, scheduler);\n    };\n    ErrorObservable.dispatch = function dispatch(_ref) {\n      var error = _ref.error;\n      var subscriber = _ref.subscriber;\n      subscriber.error(error);\n    };\n    ErrorObservable.prototype._subscribe = function _subscribe(subscriber) {\n      var error = this.error;\n      var scheduler = this.scheduler;\n      if (scheduler) {\n        subscriber.add(scheduler.schedule(ErrorObservable.dispatch, 0, {\n          error: error,\n          subscriber: subscriber\n        }));\n      } else {\n        subscriber.error(error);\n      }\n    };\n    return ErrorObservable;\n  })(_Observable3['default']);\n  exports['default'] = ErrorObservable;\n  module.exports = exports['default'];\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"@reactivex/rxjs/dist/cjs/observables/EmptyObservable\", [\"@reactivex/rxjs/dist/cjs/Observable\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  'use strict';\n  exports.__esModule = true;\n  function _interopRequireDefault(obj) {\n    return obj && obj.__esModule ? obj : {'default': obj};\n  }\n  function _classCallCheck(instance, Constructor) {\n    if (!(instance instanceof Constructor)) {\n      throw new TypeError('Cannot call a class as a function');\n    }\n  }\n  function _inherits(subClass, superClass) {\n    if (typeof superClass !== 'function' && superClass !== null) {\n      throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass);\n    }\n    subClass.prototype = Object.create(superClass && superClass.prototype, {constructor: {\n        value: subClass,\n        enumerable: false,\n        writable: true,\n        configurable: true\n      }});\n    if (superClass)\n      Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass;\n  }\n  var _Observable2 = require(\"@reactivex/rxjs/dist/cjs/Observable\");\n  var _Observable3 = _interopRequireDefault(_Observable2);\n  var EmptyObservable = (function(_Observable) {\n    _inherits(EmptyObservable, _Observable);\n    function EmptyObservable(scheduler) {\n      _classCallCheck(this, EmptyObservable);\n      _Observable.call(this);\n      this.scheduler = scheduler;\n    }\n    EmptyObservable.create = function create(scheduler) {\n      return new EmptyObservable(scheduler);\n    };\n    EmptyObservable.dispatch = function dispatch(_ref) {\n      var subscriber = _ref.subscriber;\n      subscriber.complete();\n    };\n    EmptyObservable.prototype._subscribe = function _subscribe(subscriber) {\n      var scheduler = this.scheduler;\n      if (scheduler) {\n        subscriber.add(scheduler.schedule(EmptyObservable.dispatch, 0, {subscriber: subscriber}));\n      } else {\n        subscriber.complete();\n      }\n    };\n    return EmptyObservable;\n  })(_Observable3['default']);\n  exports['default'] = EmptyObservable;\n  module.exports = exports['default'];\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"@reactivex/rxjs/dist/cjs/OuterSubscriber\", [\"@reactivex/rxjs/dist/cjs/Subscriber\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  'use strict';\n  exports.__esModule = true;\n  function _interopRequireDefault(obj) {\n    return obj && obj.__esModule ? obj : {'default': obj};\n  }\n  function _classCallCheck(instance, Constructor) {\n    if (!(instance instanceof Constructor)) {\n      throw new TypeError('Cannot call a class as a function');\n    }\n  }\n  function _inherits(subClass, superClass) {\n    if (typeof superClass !== 'function' && superClass !== null) {\n      throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass);\n    }\n    subClass.prototype = Object.create(superClass && superClass.prototype, {constructor: {\n        value: subClass,\n        enumerable: false,\n        writable: true,\n        configurable: true\n      }});\n    if (superClass)\n      Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass;\n  }\n  var _Subscriber2 = require(\"@reactivex/rxjs/dist/cjs/Subscriber\");\n  var _Subscriber3 = _interopRequireDefault(_Subscriber2);\n  var OuterSubscriber = (function(_Subscriber) {\n    _inherits(OuterSubscriber, _Subscriber);\n    function OuterSubscriber() {\n      _classCallCheck(this, OuterSubscriber);\n      _Subscriber.apply(this, arguments);\n    }\n    OuterSubscriber.prototype.notifyComplete = function notifyComplete(inner) {\n      this.destination.complete();\n    };\n    OuterSubscriber.prototype.notifyNext = function notifyNext(outerValue, innerValue, outerIndex, innerIndex) {\n      this.destination.next(innerValue);\n    };\n    OuterSubscriber.prototype.notifyError = function notifyError(error, inner) {\n      this.destination.error(error);\n    };\n    return OuterSubscriber;\n  })(_Subscriber3['default']);\n  exports['default'] = OuterSubscriber;\n  module.exports = exports['default'];\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"@reactivex/rxjs/dist/cjs/util/Symbol_iterator\", [\"@reactivex/rxjs/dist/cjs/util/root\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  'use strict';\n  exports.__esModule = true;\n  var _root = require(\"@reactivex/rxjs/dist/cjs/util/root\");\n  if (!_root.root.Symbol) {\n    _root.root.Symbol = {};\n  }\n  if (!_root.root.Symbol.iterator) {\n    if (typeof _root.root.Symbol['for'] === 'function') {\n      _root.root.Symbol.iterator = _root.root.Symbol['for']('iterator');\n    } else if (_root.root.Set && typeof new _root.root.Set()['@@iterator'] === 'function') {\n      _root.root.Symbol.iterator = '@@iterator';\n    } else {\n      _root.root.Symbol.iterator = '_es6shim_iterator_';\n    }\n  }\n  exports['default'] = _root.root.Symbol.iterator;\n  module.exports = exports['default'];\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"@reactivex/rxjs/dist/cjs/InnerSubscriber\", [\"@reactivex/rxjs/dist/cjs/Subscriber\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  'use strict';\n  exports.__esModule = true;\n  function _interopRequireDefault(obj) {\n    return obj && obj.__esModule ? obj : {'default': obj};\n  }\n  function _classCallCheck(instance, Constructor) {\n    if (!(instance instanceof Constructor)) {\n      throw new TypeError('Cannot call a class as a function');\n    }\n  }\n  function _inherits(subClass, superClass) {\n    if (typeof superClass !== 'function' && superClass !== null) {\n      throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass);\n    }\n    subClass.prototype = Object.create(superClass && superClass.prototype, {constructor: {\n        value: subClass,\n        enumerable: false,\n        writable: true,\n        configurable: true\n      }});\n    if (superClass)\n      Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass;\n  }\n  var _Subscriber2 = require(\"@reactivex/rxjs/dist/cjs/Subscriber\");\n  var _Subscriber3 = _interopRequireDefault(_Subscriber2);\n  var InnerSubscriber = (function(_Subscriber) {\n    _inherits(InnerSubscriber, _Subscriber);\n    function InnerSubscriber(parent, outerValue, outerIndex) {\n      _classCallCheck(this, InnerSubscriber);\n      _Subscriber.call(this);\n      this.parent = parent;\n      this.outerValue = outerValue;\n      this.outerIndex = outerIndex;\n      this.index = 0;\n    }\n    InnerSubscriber.prototype._next = function _next(value) {\n      var index = this.index++;\n      this.parent.notifyNext(this.outerValue, value, this.outerIndex, index);\n    };\n    InnerSubscriber.prototype._error = function _error(error) {\n      this.parent.notifyError(error, this);\n    };\n    InnerSubscriber.prototype._complete = function _complete() {\n      this.parent.notifyComplete(this);\n    };\n    return InnerSubscriber;\n  })(_Subscriber3['default']);\n  exports['default'] = InnerSubscriber;\n  module.exports = exports['default'];\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"@reactivex/rxjs/dist/cjs/schedulers/ImmediateAction\", [\"@reactivex/rxjs/dist/cjs/Subscription\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  'use strict';\n  exports.__esModule = true;\n  function _interopRequireDefault(obj) {\n    return obj && obj.__esModule ? obj : {'default': obj};\n  }\n  function _classCallCheck(instance, Constructor) {\n    if (!(instance instanceof Constructor)) {\n      throw new TypeError('Cannot call a class as a function');\n    }\n  }\n  function _inherits(subClass, superClass) {\n    if (typeof superClass !== 'function' && superClass !== null) {\n      throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass);\n    }\n    subClass.prototype = Object.create(superClass && superClass.prototype, {constructor: {\n        value: subClass,\n        enumerable: false,\n        writable: true,\n        configurable: true\n      }});\n    if (superClass)\n      Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass;\n  }\n  var _Subscription2 = require(\"@reactivex/rxjs/dist/cjs/Subscription\");\n  var _Subscription3 = _interopRequireDefault(_Subscription2);\n  var ImmediateAction = (function(_Subscription) {\n    _inherits(ImmediateAction, _Subscription);\n    function ImmediateAction(scheduler, work) {\n      _classCallCheck(this, ImmediateAction);\n      _Subscription.call(this);\n      this.scheduler = scheduler;\n      this.work = work;\n    }\n    ImmediateAction.prototype.schedule = function schedule(state) {\n      if (this.isUnsubscribed) {\n        return this;\n      }\n      this.state = state;\n      var scheduler = this.scheduler;\n      scheduler.actions.push(this);\n      scheduler.flush();\n      return this;\n    };\n    ImmediateAction.prototype.execute = function execute() {\n      if (this.isUnsubscribed) {\n        throw new Error('How did did we execute a canceled Action?');\n      }\n      this.work(this.state);\n    };\n    ImmediateAction.prototype.unsubscribe = function unsubscribe() {\n      var scheduler = this.scheduler;\n      var actions = scheduler.actions;\n      var index = actions.indexOf(this);\n      this.work = void 0;\n      this.state = void 0;\n      this.scheduler = void 0;\n      if (index !== -1) {\n        actions.splice(index, 1);\n      }\n      _Subscription.prototype.unsubscribe.call(this);\n    };\n    return ImmediateAction;\n  })(_Subscription3['default']);\n  exports['default'] = ImmediateAction;\n  module.exports = exports['default'];\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"@reactivex/rxjs/dist/cjs/schedulers/FutureAction\", [\"@reactivex/rxjs/dist/cjs/schedulers/ImmediateAction\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  'use strict';\n  exports.__esModule = true;\n  function _interopRequireDefault(obj) {\n    return obj && obj.__esModule ? obj : {'default': obj};\n  }\n  function _classCallCheck(instance, Constructor) {\n    if (!(instance instanceof Constructor)) {\n      throw new TypeError('Cannot call a class as a function');\n    }\n  }\n  function _inherits(subClass, superClass) {\n    if (typeof superClass !== 'function' && superClass !== null) {\n      throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass);\n    }\n    subClass.prototype = Object.create(superClass && superClass.prototype, {constructor: {\n        value: subClass,\n        enumerable: false,\n        writable: true,\n        configurable: true\n      }});\n    if (superClass)\n      Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass;\n  }\n  var _ImmediateAction2 = require(\"@reactivex/rxjs/dist/cjs/schedulers/ImmediateAction\");\n  var _ImmediateAction3 = _interopRequireDefault(_ImmediateAction2);\n  var FutureAction = (function(_ImmediateAction) {\n    _inherits(FutureAction, _ImmediateAction);\n    function FutureAction(scheduler, work) {\n      _classCallCheck(this, FutureAction);\n      _ImmediateAction.call(this, scheduler, work);\n      this.scheduler = scheduler;\n      this.work = work;\n    }\n    FutureAction.prototype.schedule = function schedule(state) {\n      var _this = this;\n      var delay = arguments.length <= 1 || arguments[1] === undefined ? 0 : arguments[1];\n      if (this.isUnsubscribed) {\n        return this;\n      }\n      this.delay = delay;\n      this.state = state;\n      var id = this.id;\n      if (id != null) {\n        this.id = undefined;\n        clearTimeout(id);\n      }\n      var scheduler = this.scheduler;\n      this.id = setTimeout(function() {\n        _this.id = void 0;\n        scheduler.actions.push(_this);\n        scheduler.flush();\n      }, this.delay);\n      return this;\n    };\n    FutureAction.prototype.unsubscribe = function unsubscribe() {\n      var id = this.id;\n      if (id != null) {\n        this.id = void 0;\n        clearTimeout(id);\n      }\n      _ImmediateAction.prototype.unsubscribe.call(this);\n    };\n    return FutureAction;\n  })(_ImmediateAction3['default']);\n  exports['default'] = FutureAction;\n  module.exports = exports['default'];\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"@reactivex/rxjs/dist/cjs/observables/DeferObservable\", [\"@reactivex/rxjs/dist/cjs/Observable\", \"@reactivex/rxjs/dist/cjs/util/tryCatch\", \"@reactivex/rxjs/dist/cjs/util/errorObject\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  'use strict';\n  exports.__esModule = true;\n  function _interopRequireDefault(obj) {\n    return obj && obj.__esModule ? obj : {'default': obj};\n  }\n  function _classCallCheck(instance, Constructor) {\n    if (!(instance instanceof Constructor)) {\n      throw new TypeError('Cannot call a class as a function');\n    }\n  }\n  function _inherits(subClass, superClass) {\n    if (typeof superClass !== 'function' && superClass !== null) {\n      throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass);\n    }\n    subClass.prototype = Object.create(superClass && superClass.prototype, {constructor: {\n        value: subClass,\n        enumerable: false,\n        writable: true,\n        configurable: true\n      }});\n    if (superClass)\n      Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass;\n  }\n  var _Observable2 = require(\"@reactivex/rxjs/dist/cjs/Observable\");\n  var _Observable3 = _interopRequireDefault(_Observable2);\n  var _utilTryCatch = require(\"@reactivex/rxjs/dist/cjs/util/tryCatch\");\n  var _utilTryCatch2 = _interopRequireDefault(_utilTryCatch);\n  var _utilErrorObject = require(\"@reactivex/rxjs/dist/cjs/util/errorObject\");\n  var DeferObservable = (function(_Observable) {\n    _inherits(DeferObservable, _Observable);\n    function DeferObservable(observableFactory) {\n      _classCallCheck(this, DeferObservable);\n      _Observable.call(this);\n      this.observableFactory = observableFactory;\n    }\n    DeferObservable.create = function create(observableFactory) {\n      return new DeferObservable(observableFactory);\n    };\n    DeferObservable.prototype._subscribe = function _subscribe(subscriber) {\n      var result = _utilTryCatch2['default'](this.observableFactory)();\n      if (result === _utilErrorObject.errorObject) {\n        subscriber.error(_utilErrorObject.errorObject.e);\n      } else {\n        result.subscribe(subscriber);\n      }\n    };\n    return DeferObservable;\n  })(_Observable3['default']);\n  exports['default'] = DeferObservable;\n  module.exports = exports['default'];\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"@reactivex/rxjs/dist/cjs/observables/ForkJoinObservable\", [\"@reactivex/rxjs/dist/cjs/Observable\", \"@reactivex/rxjs/dist/cjs/Subscriber\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  'use strict';\n  exports.__esModule = true;\n  function _interopRequireDefault(obj) {\n    return obj && obj.__esModule ? obj : {'default': obj};\n  }\n  function _classCallCheck(instance, Constructor) {\n    if (!(instance instanceof Constructor)) {\n      throw new TypeError('Cannot call a class as a function');\n    }\n  }\n  function _inherits(subClass, superClass) {\n    if (typeof superClass !== 'function' && superClass !== null) {\n      throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass);\n    }\n    subClass.prototype = Object.create(superClass && superClass.prototype, {constructor: {\n        value: subClass,\n        enumerable: false,\n        writable: true,\n        configurable: true\n      }});\n    if (superClass)\n      Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass;\n  }\n  var _Observable2 = require(\"@reactivex/rxjs/dist/cjs/Observable\");\n  var _Observable3 = _interopRequireDefault(_Observable2);\n  var _Subscriber2 = require(\"@reactivex/rxjs/dist/cjs/Subscriber\");\n  var _Subscriber3 = _interopRequireDefault(_Subscriber2);\n  var ForkJoinObservable = (function(_Observable) {\n    _inherits(ForkJoinObservable, _Observable);\n    function ForkJoinObservable(observables) {\n      _classCallCheck(this, ForkJoinObservable);\n      _Observable.call(this);\n      this.observables = observables;\n    }\n    ForkJoinObservable.create = function create() {\n      for (var _len = arguments.length,\n          observables = Array(_len),\n          _key = 0; _key < _len; _key++) {\n        observables[_key] = arguments[_key];\n      }\n      return new ForkJoinObservable(observables);\n    };\n    ForkJoinObservable.prototype._subscribe = function _subscribe(subscriber) {\n      var observables = this.observables;\n      var len = observables.length;\n      var context = {\n        complete: 0,\n        total: len,\n        values: emptyArray(len)\n      };\n      for (var i = 0; i < len; i++) {\n        observables[i].subscribe(new AllSubscriber(subscriber, this, i, context));\n      }\n    };\n    return ForkJoinObservable;\n  })(_Observable3['default']);\n  exports['default'] = ForkJoinObservable;\n  var AllSubscriber = (function(_Subscriber) {\n    _inherits(AllSubscriber, _Subscriber);\n    function AllSubscriber(destination, parent, index, context) {\n      _classCallCheck(this, AllSubscriber);\n      _Subscriber.call(this, destination);\n      this.parent = parent;\n      this.index = index;\n      this.context = context;\n    }\n    AllSubscriber.prototype._next = function _next(value) {\n      this._value = value;\n    };\n    AllSubscriber.prototype._complete = function _complete() {\n      var context = this.context;\n      context.values[this.index] = this._value;\n      if (context.values.every(hasValue)) {\n        this.destination.next(context.values);\n        this.destination.complete();\n      }\n    };\n    return AllSubscriber;\n  })(_Subscriber3['default']);\n  function hasValue(x) {\n    return x !== null;\n  }\n  function emptyArray(len) {\n    var arr = [];\n    for (var i = 0; i < len; i++) {\n      arr.push(null);\n    }\n    return arr;\n  }\n  module.exports = exports['default'];\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"@reactivex/rxjs/dist/cjs/observables/PromiseObservable\", [\"@reactivex/rxjs/dist/cjs/Observable\", \"@reactivex/rxjs/dist/cjs/Subscription\", \"@reactivex/rxjs/dist/cjs/schedulers/immediate\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  'use strict';\n  exports.__esModule = true;\n  function _interopRequireDefault(obj) {\n    return obj && obj.__esModule ? obj : {'default': obj};\n  }\n  function _classCallCheck(instance, Constructor) {\n    if (!(instance instanceof Constructor)) {\n      throw new TypeError('Cannot call a class as a function');\n    }\n  }\n  function _inherits(subClass, superClass) {\n    if (typeof superClass !== 'function' && superClass !== null) {\n      throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass);\n    }\n    subClass.prototype = Object.create(superClass && superClass.prototype, {constructor: {\n        value: subClass,\n        enumerable: false,\n        writable: true,\n        configurable: true\n      }});\n    if (superClass)\n      Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass;\n  }\n  var _Observable2 = require(\"@reactivex/rxjs/dist/cjs/Observable\");\n  var _Observable3 = _interopRequireDefault(_Observable2);\n  var _Subscription = require(\"@reactivex/rxjs/dist/cjs/Subscription\");\n  var _Subscription2 = _interopRequireDefault(_Subscription);\n  var _schedulersImmediate = require(\"@reactivex/rxjs/dist/cjs/schedulers/immediate\");\n  var _schedulersImmediate2 = _interopRequireDefault(_schedulersImmediate);\n  var PromiseObservable = (function(_Observable) {\n    _inherits(PromiseObservable, _Observable);\n    function PromiseObservable(promise, scheduler) {\n      _classCallCheck(this, PromiseObservable);\n      _Observable.call(this);\n      this.promise = promise;\n      this.scheduler = scheduler;\n      this._isScalar = false;\n    }\n    PromiseObservable.create = function create(promise) {\n      var scheduler = arguments.length <= 1 || arguments[1] === undefined ? _schedulersImmediate2['default'] : arguments[1];\n      return new PromiseObservable(promise, scheduler);\n    };\n    PromiseObservable.prototype._subscribe = function _subscribe(subscriber) {\n      var _this = this;\n      var scheduler = this.scheduler;\n      var promise = this.promise;\n      if (scheduler === _schedulersImmediate2['default']) {\n        if (this._isScalar) {\n          subscriber.next(this.value);\n          subscriber.complete();\n        } else {\n          promise.then(function(value) {\n            _this._isScalar = true;\n            _this.value = value;\n            subscriber.next(value);\n            subscriber.complete();\n          }, function(err) {\n            return subscriber.error(err);\n          }).then(null, function(err) {\n            setTimeout(function() {\n              throw err;\n            });\n          });\n        }\n      } else {\n        var _ret = (function() {\n          var subscription = new _Subscription2['default']();\n          if (_this._isScalar) {\n            var value = _this.value;\n            subscription.add(scheduler.schedule(dispatchNext, 0, {\n              value: value,\n              subscriber: subscriber\n            }));\n          } else {\n            promise.then(function(value) {\n              _this._isScalar = true;\n              _this.value = value;\n              subscription.add(scheduler.schedule(dispatchNext, 0, {\n                value: value,\n                subscriber: subscriber\n              }));\n            }, function(err) {\n              return subscription.add(scheduler.schedule(dispatchError, 0, {\n                err: err,\n                subscriber: subscriber\n              }));\n            }).then(null, function(err) {\n              scheduler.schedule(function() {\n                throw err;\n              });\n            });\n          }\n          return {v: subscription};\n        })();\n        if (typeof _ret === 'object')\n          return _ret.v;\n      }\n    };\n    return PromiseObservable;\n  })(_Observable3['default']);\n  exports['default'] = PromiseObservable;\n  function dispatchNext(_ref) {\n    var value = _ref.value;\n    var subscriber = _ref.subscriber;\n    subscriber.next(value);\n    subscriber.complete();\n  }\n  function dispatchError(_ref2) {\n    var err = _ref2.err;\n    var subscriber = _ref2.subscriber;\n    subscriber.error(err);\n  }\n  module.exports = exports['default'];\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"@reactivex/rxjs/dist/cjs/observables/IteratorObservable\", [\"@reactivex/rxjs/dist/cjs/Observable\", \"@reactivex/rxjs/dist/cjs/util/root\", \"@reactivex/rxjs/dist/cjs/util/Symbol_iterator\", \"@reactivex/rxjs/dist/cjs/util/tryCatch\", \"@reactivex/rxjs/dist/cjs/util/errorObject\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  'use strict';\n  exports.__esModule = true;\n  function _interopRequireDefault(obj) {\n    return obj && obj.__esModule ? obj : {'default': obj};\n  }\n  function _classCallCheck(instance, Constructor) {\n    if (!(instance instanceof Constructor)) {\n      throw new TypeError('Cannot call a class as a function');\n    }\n  }\n  function _inherits(subClass, superClass) {\n    if (typeof superClass !== 'function' && superClass !== null) {\n      throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass);\n    }\n    subClass.prototype = Object.create(superClass && superClass.prototype, {constructor: {\n        value: subClass,\n        enumerable: false,\n        writable: true,\n        configurable: true\n      }});\n    if (superClass)\n      Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass;\n  }\n  var _Observable2 = require(\"@reactivex/rxjs/dist/cjs/Observable\");\n  var _Observable3 = _interopRequireDefault(_Observable2);\n  var _utilRoot = require(\"@reactivex/rxjs/dist/cjs/util/root\");\n  var _utilSymbol_iterator = require(\"@reactivex/rxjs/dist/cjs/util/Symbol_iterator\");\n  var _utilSymbol_iterator2 = _interopRequireDefault(_utilSymbol_iterator);\n  var _utilTryCatch = require(\"@reactivex/rxjs/dist/cjs/util/tryCatch\");\n  var _utilTryCatch2 = _interopRequireDefault(_utilTryCatch);\n  var _utilErrorObject = require(\"@reactivex/rxjs/dist/cjs/util/errorObject\");\n  var IteratorObservable = (function(_Observable) {\n    _inherits(IteratorObservable, _Observable);\n    function IteratorObservable(iterator, project, thisArg, scheduler) {\n      _classCallCheck(this, IteratorObservable);\n      _Observable.call(this);\n      this.iterator = iterator;\n      this.project = project;\n      this.thisArg = thisArg;\n      this.scheduler = scheduler;\n    }\n    IteratorObservable.create = function create(iterator, project, thisArg, scheduler) {\n      if (iterator == null) {\n        throw new Error('iterator cannot be null.');\n      }\n      if (project && typeof project !== 'function') {\n        throw new Error('When provided, `project` must be a function.');\n      }\n      return new IteratorObservable(iterator, project, thisArg, scheduler);\n    };\n    IteratorObservable.dispatch = function dispatch(state) {\n      var index = state.index;\n      var hasError = state.hasError;\n      var thisArg = state.thisArg;\n      var project = state.project;\n      var iterator = state.iterator;\n      var subscriber = state.subscriber;\n      if (hasError) {\n        subscriber.error(state.error);\n        return ;\n      }\n      var result = iterator.next();\n      if (result.done) {\n        subscriber.complete();\n        return ;\n      }\n      if (project) {\n        result = _utilTryCatch2['default'](project).call(thisArg, result.value, index);\n        if (result === _utilErrorObject.errorObject) {\n          state.error = _utilErrorObject.errorObject.e;\n          state.hasError = true;\n        } else {\n          subscriber.next(result);\n          state.index = index + 1;\n        }\n      } else {\n        subscriber.next(result.value);\n        state.index = index + 1;\n      }\n      if (subscriber.isUnsubscribed) {\n        return ;\n      }\n      this.schedule(state);\n    };\n    IteratorObservable.prototype._subscribe = function _subscribe(subscriber) {\n      var index = 0;\n      var project = this.project;\n      var thisArg = this.thisArg;\n      var iterator = getIterator(Object(this.iterator));\n      var scheduler = this.scheduler;\n      if (scheduler) {\n        subscriber.add(scheduler.schedule(IteratorObservable.dispatch, 0, {\n          index: index,\n          thisArg: thisArg,\n          project: project,\n          iterator: iterator,\n          subscriber: subscriber\n        }));\n      } else {\n        do {\n          var result = iterator.next();\n          if (result.done) {\n            subscriber.complete();\n            break;\n          } else if (project) {\n            result = _utilTryCatch2['default'](project).call(thisArg, result.value, index++);\n            if (result === _utilErrorObject.errorObject) {\n              subscriber.error(_utilErrorObject.errorObject.e);\n              break;\n            }\n            subscriber.next(result);\n          } else {\n            subscriber.next(result.value);\n          }\n          if (subscriber.isUnsubscribed) {\n            break;\n          }\n        } while (true);\n      }\n    };\n    return IteratorObservable;\n  })(_Observable3['default']);\n  exports['default'] = IteratorObservable;\n  var maxSafeInteger = Math.pow(2, 53) - 1;\n  var StringIterator = (function() {\n    function StringIterator(str) {\n      var idx = arguments.length <= 1 || arguments[1] === undefined ? 0 : arguments[1];\n      var len = arguments.length <= 2 || arguments[2] === undefined ? str.length : arguments[2];\n      return (function() {\n        _classCallCheck(this, StringIterator);\n        this.str = str;\n        this.idx = idx;\n        this.len = len;\n      }).apply(this, arguments);\n    }\n    StringIterator.prototype[_utilSymbol_iterator2['default']] = function() {\n      return this;\n    };\n    StringIterator.prototype.next = function next() {\n      return this.idx < this.len ? {\n        done: false,\n        value: this.str.charAt(this.idx++)\n      } : {\n        done: true,\n        value: undefined\n      };\n    };\n    return StringIterator;\n  })();\n  var ArrayIterator = (function() {\n    function ArrayIterator(arr) {\n      var idx = arguments.length <= 1 || arguments[1] === undefined ? 0 : arguments[1];\n      var len = arguments.length <= 2 || arguments[2] === undefined ? toLength(arr) : arguments[2];\n      return (function() {\n        _classCallCheck(this, ArrayIterator);\n        this.arr = arr;\n        this.idx = idx;\n        this.len = len;\n      }).apply(this, arguments);\n    }\n    ArrayIterator.prototype[_utilSymbol_iterator2['default']] = function() {\n      return this;\n    };\n    ArrayIterator.prototype.next = function next() {\n      return this.idx < this.len ? {\n        done: false,\n        value: this.arr[this.idx++]\n      } : {\n        done: true,\n        value: undefined\n      };\n    };\n    return ArrayIterator;\n  })();\n  function getIterator(o) {\n    var i = o[_utilSymbol_iterator2['default']];\n    if (!i && typeof o === 'string') {\n      return new StringIterator(o);\n    }\n    if (!i && o.length !== undefined) {\n      return new ArrayIterator(o);\n    }\n    if (!i) {\n      throw new TypeError('Object is not iterable');\n    }\n    return o[_utilSymbol_iterator2['default']]();\n  }\n  function toLength(o) {\n    var len = +o.length;\n    if (isNaN(len)) {\n      return 0;\n    }\n    if (len === 0 || !numberIsFinite(len)) {\n      return len;\n    }\n    len = sign(len) * Math.floor(Math.abs(len));\n    if (len <= 0) {\n      return 0;\n    }\n    if (len > maxSafeInteger) {\n      return maxSafeInteger;\n    }\n    return len;\n  }\n  function numberIsFinite(value) {\n    return typeof value === 'number' && _utilRoot.root.isFinite(value);\n  }\n  function sign(value) {\n    var valueAsNumber = +value;\n    if (valueAsNumber === 0) {\n      return valueAsNumber;\n    }\n    if (isNaN(valueAsNumber)) {\n      return valueAsNumber;\n    }\n    return valueAsNumber < 0 ? -1 : 1;\n  }\n  module.exports = exports['default'];\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"@reactivex/rxjs/dist/cjs/Notification\", [\"@reactivex/rxjs/dist/cjs/Observable\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  'use strict';\n  exports.__esModule = true;\n  function _interopRequireDefault(obj) {\n    return obj && obj.__esModule ? obj : {'default': obj};\n  }\n  function _classCallCheck(instance, Constructor) {\n    if (!(instance instanceof Constructor)) {\n      throw new TypeError('Cannot call a class as a function');\n    }\n  }\n  var _Observable = require(\"@reactivex/rxjs/dist/cjs/Observable\");\n  var _Observable2 = _interopRequireDefault(_Observable);\n  var Notification = (function() {\n    function Notification(kind, value, exception) {\n      _classCallCheck(this, Notification);\n      this.kind = kind;\n      this.value = value;\n      this.exception = exception;\n      this.hasValue = kind === 'N';\n    }\n    Notification.prototype.observe = function observe(observer) {\n      switch (this.kind) {\n        case 'N':\n          return observer.next(this.value);\n        case 'E':\n          return observer.error(this.exception);\n        case 'C':\n          return observer.complete();\n      }\n    };\n    Notification.prototype['do'] = function _do(next, error, complete) {\n      var kind = this.kind;\n      switch (kind) {\n        case 'N':\n          return next(this.value);\n        case 'E':\n          return error(this.exception);\n        case 'C':\n          return complete();\n      }\n    };\n    Notification.prototype.accept = function accept(nextOrObserver, error, complete) {\n      if (nextOrObserver && typeof nextOrObserver.next === 'function') {\n        return this.observe(nextOrObserver);\n      } else {\n        return this['do'](nextOrObserver, error, complete);\n      }\n    };\n    Notification.prototype.toObservable = function toObservable() {\n      var kind = this.kind;\n      var value = this.value;\n      switch (kind) {\n        case 'N':\n          return _Observable2['default'].of(value);\n        case 'E':\n          return _Observable2['default']['throw'](value);\n        case 'C':\n          return _Observable2['default'].empty();\n      }\n    };\n    Notification.createNext = function createNext(value) {\n      if (typeof value !== 'undefined') {\n        return new Notification('N', value);\n      }\n      return this.undefinedValueNotification;\n    };\n    Notification.createError = function createError(err) {\n      return new Notification('E', undefined, err);\n    };\n    Notification.createComplete = function createComplete() {\n      return this.completeNotification;\n    };\n    return Notification;\n  })();\n  exports['default'] = Notification;\n  Notification.completeNotification = new Notification('C');\n  Notification.undefinedValueNotification = new Notification('N', undefined);\n  module.exports = exports['default'];\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"@reactivex/rxjs/dist/cjs/observables/FromEventObservable\", [\"@reactivex/rxjs/dist/cjs/Observable\", \"@reactivex/rxjs/dist/cjs/util/tryCatch\", \"@reactivex/rxjs/dist/cjs/util/errorObject\", \"@reactivex/rxjs/dist/cjs/Subscription\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  'use strict';\n  exports.__esModule = true;\n  function _interopRequireDefault(obj) {\n    return obj && obj.__esModule ? obj : {'default': obj};\n  }\n  function _classCallCheck(instance, Constructor) {\n    if (!(instance instanceof Constructor)) {\n      throw new TypeError('Cannot call a class as a function');\n    }\n  }\n  function _inherits(subClass, superClass) {\n    if (typeof superClass !== 'function' && superClass !== null) {\n      throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass);\n    }\n    subClass.prototype = Object.create(superClass && superClass.prototype, {constructor: {\n        value: subClass,\n        enumerable: false,\n        writable: true,\n        configurable: true\n      }});\n    if (superClass)\n      Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass;\n  }\n  var _Observable2 = require(\"@reactivex/rxjs/dist/cjs/Observable\");\n  var _Observable3 = _interopRequireDefault(_Observable2);\n  var _utilTryCatch = require(\"@reactivex/rxjs/dist/cjs/util/tryCatch\");\n  var _utilTryCatch2 = _interopRequireDefault(_utilTryCatch);\n  var _utilErrorObject = require(\"@reactivex/rxjs/dist/cjs/util/errorObject\");\n  var _Subscription = require(\"@reactivex/rxjs/dist/cjs/Subscription\");\n  var _Subscription2 = _interopRequireDefault(_Subscription);\n  var FromEventObservable = (function(_Observable) {\n    _inherits(FromEventObservable, _Observable);\n    function FromEventObservable(sourceObj, eventName, selector) {\n      _classCallCheck(this, FromEventObservable);\n      _Observable.call(this);\n      this.sourceObj = sourceObj;\n      this.eventName = eventName;\n      this.selector = selector;\n    }\n    FromEventObservable.create = function create(sourceObj, eventName, selector) {\n      return new FromEventObservable(sourceObj, eventName, selector);\n    };\n    FromEventObservable.setupSubscription = function setupSubscription(sourceObj, eventName, handler, subscriber) {\n      var unsubscribe = undefined;\n      var tag = sourceObj.toString();\n      if (tag === '[object NodeList]' || tag === '[object HTMLCollection]') {\n        for (var i = 0,\n            len = sourceObj.length; i < len; i++) {\n          FromEventObservable.setupSubscription(sourceObj[i], eventName, handler, subscriber);\n        }\n      } else if (typeof sourceObj.addEventListener === 'function' && typeof sourceObj.removeEventListener === 'function') {\n        sourceObj.addEventListener(eventName, handler);\n        unsubscribe = function() {\n          return sourceObj.removeEventListener(eventName, handler);\n        };\n      } else if (typeof sourceObj.on === 'function' && typeof sourceObj.off === 'function') {\n        sourceObj.on(eventName, handler);\n        unsubscribe = function() {\n          return sourceObj.off(eventName, handler);\n        };\n      } else if (typeof sourceObj.addListener === 'function' && typeof sourceObj.removeListener === 'function') {\n        sourceObj.addListener(eventName, handler);\n        unsubscribe = function() {\n          return sourceObj.removeListener(eventName, handler);\n        };\n      }\n      subscriber.add(new _Subscription2['default'](unsubscribe));\n    };\n    FromEventObservable.prototype._subscribe = function _subscribe(subscriber) {\n      var sourceObj = this.sourceObj;\n      var eventName = this.eventName;\n      var selector = this.selector;\n      var handler = selector ? function(e) {\n        var result = _utilTryCatch2['default'](selector)(e);\n        if (result === _utilErrorObject.errorObject) {\n          subscriber.error(result.e);\n        } else {\n          subscriber.next(result);\n        }\n      } : function(e) {\n        return subscriber.next(e);\n      };\n      FromEventObservable.setupSubscription(sourceObj, eventName, handler, subscriber);\n    };\n    return FromEventObservable;\n  })(_Observable3['default']);\n  exports['default'] = FromEventObservable;\n  module.exports = exports['default'];\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"@reactivex/rxjs/dist/cjs/observables/FromEventPatternObservable\", [\"@reactivex/rxjs/dist/cjs/Observable\", \"@reactivex/rxjs/dist/cjs/Subscription\", \"@reactivex/rxjs/dist/cjs/util/tryCatch\", \"@reactivex/rxjs/dist/cjs/util/errorObject\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  'use strict';\n  exports.__esModule = true;\n  function _interopRequireDefault(obj) {\n    return obj && obj.__esModule ? obj : {'default': obj};\n  }\n  function _classCallCheck(instance, Constructor) {\n    if (!(instance instanceof Constructor)) {\n      throw new TypeError('Cannot call a class as a function');\n    }\n  }\n  function _inherits(subClass, superClass) {\n    if (typeof superClass !== 'function' && superClass !== null) {\n      throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass);\n    }\n    subClass.prototype = Object.create(superClass && superClass.prototype, {constructor: {\n        value: subClass,\n        enumerable: false,\n        writable: true,\n        configurable: true\n      }});\n    if (superClass)\n      Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass;\n  }\n  var _Observable2 = require(\"@reactivex/rxjs/dist/cjs/Observable\");\n  var _Observable3 = _interopRequireDefault(_Observable2);\n  var _Subscription = require(\"@reactivex/rxjs/dist/cjs/Subscription\");\n  var _Subscription2 = _interopRequireDefault(_Subscription);\n  var _utilTryCatch = require(\"@reactivex/rxjs/dist/cjs/util/tryCatch\");\n  var _utilTryCatch2 = _interopRequireDefault(_utilTryCatch);\n  var _utilErrorObject = require(\"@reactivex/rxjs/dist/cjs/util/errorObject\");\n  var FromEventPatternObservable = (function(_Observable) {\n    _inherits(FromEventPatternObservable, _Observable);\n    function FromEventPatternObservable(addHandler, removeHandler, selector) {\n      _classCallCheck(this, FromEventPatternObservable);\n      _Observable.call(this);\n      this.addHandler = addHandler;\n      this.removeHandler = removeHandler;\n      this.selector = selector;\n    }\n    FromEventPatternObservable.create = function create(addHandler, removeHandler, selector) {\n      return new FromEventPatternObservable(addHandler, removeHandler, selector);\n    };\n    FromEventPatternObservable.prototype._subscribe = function _subscribe(subscriber) {\n      var addHandler = this.addHandler;\n      var removeHandler = this.removeHandler;\n      var selector = this.selector;\n      var handler = selector ? function(e) {\n        var result = _utilTryCatch2['default'](selector).apply(null, arguments);\n        if (result === _utilErrorObject.errorObject) {\n          subscriber.error(result.e);\n        } else {\n          subscriber.next(result);\n        }\n      } : function(e) {\n        subscriber.next(e);\n      };\n      var result = _utilTryCatch2['default'](addHandler)(handler);\n      if (result === _utilErrorObject.errorObject) {\n        subscriber.error(result.e);\n      }\n      subscriber.add(new _Subscription2['default'](function() {\n        removeHandler(handler);\n      }));\n    };\n    return FromEventPatternObservable;\n  })(_Observable3['default']);\n  exports['default'] = FromEventPatternObservable;\n  module.exports = exports['default'];\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"@reactivex/rxjs/dist/cjs/util/isNumeric\", [], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  \"use strict\";\n  exports.__esModule = true;\n  exports[\"default\"] = isNumeric;\n  var is_array = Array.isArray;\n  function isNumeric(val) {\n    return !is_array(val) && val - parseFloat(val) + 1 >= 0;\n  }\n  ;\n  module.exports = exports[\"default\"];\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"@reactivex/rxjs/dist/cjs/util/Immediate\", [\"@reactivex/rxjs/dist/cjs/util/root\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  'use strict';\n  exports.__esModule = true;\n  var _root = require(\"@reactivex/rxjs/dist/cjs/util/root\");\n  var Immediate = {\n    setImmediate: function setImmediate(x) {\n      return 0;\n    },\n    clearImmediate: function clearImmediate(id) {}\n  };\n  exports.Immediate = Immediate;\n  if (_root.root && _root.root.setImmediate) {\n    Immediate.setImmediate = _root.root.setImmediate;\n    Immediate.clearImmediate = _root.root.clearImmediate;\n  } else {\n    exports.Immediate = Immediate = (function(global, Immediate) {\n      var nextHandle = 1,\n          tasksByHandle = {},\n          currentlyRunningATask = false,\n          doc = global.document,\n          setImmediate = undefined;\n      if (({}).toString.call(global.process) === '[object process]') {\n        setImmediate = installNextTickImplementation();\n      } else if (canUsePostMessage()) {\n        setImmediate = installPostMessageImplementation();\n      } else if (global.MessageChannel) {\n        setImmediate = installMessageChannelImplementation();\n      } else if (doc && 'onreadystatechange' in doc.createElement('script')) {\n        setImmediate = installReadyStateChangeImplementation();\n      } else {\n        setImmediate = installSetTimeoutImplementation();\n      }\n      Immediate.setImmediate = setImmediate;\n      Immediate.clearImmediate = clearImmediate;\n      return Immediate;\n      function clearImmediate(handle) {\n        delete tasksByHandle[handle];\n      }\n      function addFromSetImmediateArguments(args) {\n        tasksByHandle[nextHandle] = partiallyApplied.apply(undefined, args);\n        return nextHandle++;\n      }\n      function partiallyApplied(handler) {\n        for (var _len = arguments.length,\n            args = Array(_len > 1 ? _len - 1 : 0),\n            _key = 1; _key < _len; _key++) {\n          args[_key - 1] = arguments[_key];\n        }\n        return function() {\n          if (typeof handler === 'function') {\n            handler.apply(undefined, args);\n          } else {\n            new Function('' + handler)();\n          }\n        };\n      }\n      function runIfPresent(handle) {\n        if (currentlyRunningATask) {\n          setTimeout(partiallyApplied(runIfPresent, handle), 0);\n        } else {\n          var task = tasksByHandle[handle];\n          if (task) {\n            currentlyRunningATask = true;\n            try {\n              task();\n            } finally {\n              clearImmediate(handle);\n              currentlyRunningATask = false;\n            }\n          }\n        }\n      }\n      function installNextTickImplementation() {\n        return function setImmediate() {\n          var handle = addFromSetImmediateArguments(arguments);\n          global.process.nextTick(partiallyApplied(runIfPresent, handle));\n          return handle;\n        };\n      }\n      function canUsePostMessage() {\n        if (global.postMessage && !global.importScripts) {\n          var postMessageIsAsynchronous = true;\n          var oldOnMessage = global.onmessage;\n          global.onmessage = function() {\n            postMessageIsAsynchronous = false;\n          };\n          global.postMessage('', '*');\n          global.onmessage = oldOnMessage;\n          return postMessageIsAsynchronous;\n        }\n      }\n      function installPostMessageImplementation() {\n        var messagePrefix = 'setImmediate$' + Math.random() + '$';\n        var onGlobalMessage = function onGlobalMessage(event) {\n          if (event.source === global && typeof event.data === 'string' && event.data.indexOf(messagePrefix) === 0) {\n            runIfPresent(+event.data.slice(messagePrefix.length));\n          }\n        };\n        if (global.addEventListener) {\n          global.addEventListener('message', onGlobalMessage, false);\n        } else {\n          global.attachEvent('onmessage', onGlobalMessage);\n        }\n        return function setImmediate() {\n          var handle = addFromSetImmediateArguments(arguments);\n          global.postMessage(messagePrefix + handle, '*');\n          return handle;\n        };\n      }\n      function installMessageChannelImplementation() {\n        var channel = new MessageChannel();\n        channel.port1.onmessage = function(event) {\n          var handle = event.data;\n          runIfPresent(handle);\n        };\n        return function setImmediate() {\n          var handle = addFromSetImmediateArguments(arguments);\n          channel.port2.postMessage(handle);\n          return handle;\n        };\n      }\n      function installReadyStateChangeImplementation() {\n        var html = doc.documentElement;\n        return function setImmediate() {\n          var handle = addFromSetImmediateArguments(arguments);\n          var script = doc.createElement('script');\n          script.onreadystatechange = function() {\n            runIfPresent(handle);\n            script.onreadystatechange = null;\n            html.removeChild(script);\n            script = null;\n          };\n          html.appendChild(script);\n          return handle;\n        };\n      }\n      function installSetTimeoutImplementation() {\n        return function setImmediate() {\n          var handle = addFromSetImmediateArguments(arguments);\n          setTimeout(partiallyApplied(runIfPresent, handle), 0);\n          return handle;\n        };\n      }\n    })(_root.root, Immediate);\n  }\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"@reactivex/rxjs/dist/cjs/operators/mergeAll-support\", [\"@reactivex/rxjs/dist/cjs/OuterSubscriber\", \"@reactivex/rxjs/dist/cjs/util/subscribeToResult\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  'use strict';\n  exports.__esModule = true;\n  function _interopRequireDefault(obj) {\n    return obj && obj.__esModule ? obj : {'default': obj};\n  }\n  function _inherits(subClass, superClass) {\n    if (typeof superClass !== 'function' && superClass !== null) {\n      throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass);\n    }\n    subClass.prototype = Object.create(superClass && superClass.prototype, {constructor: {\n        value: subClass,\n        enumerable: false,\n        writable: true,\n        configurable: true\n      }});\n    if (superClass)\n      Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass;\n  }\n  function _classCallCheck(instance, Constructor) {\n    if (!(instance instanceof Constructor)) {\n      throw new TypeError('Cannot call a class as a function');\n    }\n  }\n  var _OuterSubscriber2 = require(\"@reactivex/rxjs/dist/cjs/OuterSubscriber\");\n  var _OuterSubscriber3 = _interopRequireDefault(_OuterSubscriber2);\n  var _utilSubscribeToResult = require(\"@reactivex/rxjs/dist/cjs/util/subscribeToResult\");\n  var _utilSubscribeToResult2 = _interopRequireDefault(_utilSubscribeToResult);\n  var MergeAllOperator = (function() {\n    function MergeAllOperator(concurrent) {\n      _classCallCheck(this, MergeAllOperator);\n      this.concurrent = concurrent;\n    }\n    MergeAllOperator.prototype.call = function call(observer) {\n      return new MergeAllSubscriber(observer, this.concurrent);\n    };\n    return MergeAllOperator;\n  })();\n  exports.MergeAllOperator = MergeAllOperator;\n  var MergeAllSubscriber = (function(_OuterSubscriber) {\n    _inherits(MergeAllSubscriber, _OuterSubscriber);\n    function MergeAllSubscriber(destination, concurrent) {\n      _classCallCheck(this, MergeAllSubscriber);\n      _OuterSubscriber.call(this, destination);\n      this.concurrent = concurrent;\n      this.hasCompleted = false;\n      this.buffer = [];\n      this.active = 0;\n    }\n    MergeAllSubscriber.prototype._next = function _next(observable) {\n      if (this.active < this.concurrent) {\n        if (observable._isScalar) {\n          this.destination.next(observable.value);\n        } else {\n          this.active++;\n          this.add(_utilSubscribeToResult2['default'](this, observable));\n        }\n      } else {\n        this.buffer.push(observable);\n      }\n    };\n    MergeAllSubscriber.prototype._complete = function _complete() {\n      this.hasCompleted = true;\n      if (this.active === 0 && this.buffer.length === 0) {\n        this.destination.complete();\n      }\n    };\n    MergeAllSubscriber.prototype.notifyComplete = function notifyComplete(innerSub) {\n      var buffer = this.buffer;\n      this.remove(innerSub);\n      this.active--;\n      if (buffer.length > 0) {\n        this._next(buffer.shift());\n      } else if (this.active === 0 && this.hasCompleted) {\n        this.destination.complete();\n      }\n    };\n    return MergeAllSubscriber;\n  })(_OuterSubscriber3['default']);\n  exports.MergeAllSubscriber = MergeAllSubscriber;\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"@reactivex/rxjs/dist/cjs/observables/InfiniteObservable\", [\"@reactivex/rxjs/dist/cjs/Observable\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  'use strict';\n  exports.__esModule = true;\n  function _interopRequireDefault(obj) {\n    return obj && obj.__esModule ? obj : {'default': obj};\n  }\n  function _classCallCheck(instance, Constructor) {\n    if (!(instance instanceof Constructor)) {\n      throw new TypeError('Cannot call a class as a function');\n    }\n  }\n  function _inherits(subClass, superClass) {\n    if (typeof superClass !== 'function' && superClass !== null) {\n      throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass);\n    }\n    subClass.prototype = Object.create(superClass && superClass.prototype, {constructor: {\n        value: subClass,\n        enumerable: false,\n        writable: true,\n        configurable: true\n      }});\n    if (superClass)\n      Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass;\n  }\n  var _Observable2 = require(\"@reactivex/rxjs/dist/cjs/Observable\");\n  var _Observable3 = _interopRequireDefault(_Observable2);\n  var InfiniteObservable = (function(_Observable) {\n    _inherits(InfiniteObservable, _Observable);\n    function InfiniteObservable() {\n      _classCallCheck(this, InfiniteObservable);\n      _Observable.call(this);\n    }\n    InfiniteObservable.create = function create() {\n      return new InfiniteObservable();\n    };\n    InfiniteObservable.prototype._subscribe = function _subscribe(subscriber) {};\n    return InfiniteObservable;\n  })(_Observable3['default']);\n  exports['default'] = InfiniteObservable;\n  module.exports = exports['default'];\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"@reactivex/rxjs/dist/cjs/observables/RangeObservable\", [\"@reactivex/rxjs/dist/cjs/Observable\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  'use strict';\n  exports.__esModule = true;\n  function _interopRequireDefault(obj) {\n    return obj && obj.__esModule ? obj : {'default': obj};\n  }\n  function _classCallCheck(instance, Constructor) {\n    if (!(instance instanceof Constructor)) {\n      throw new TypeError('Cannot call a class as a function');\n    }\n  }\n  function _inherits(subClass, superClass) {\n    if (typeof superClass !== 'function' && superClass !== null) {\n      throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass);\n    }\n    subClass.prototype = Object.create(superClass && superClass.prototype, {constructor: {\n        value: subClass,\n        enumerable: false,\n        writable: true,\n        configurable: true\n      }});\n    if (superClass)\n      Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass;\n  }\n  var _Observable2 = require(\"@reactivex/rxjs/dist/cjs/Observable\");\n  var _Observable3 = _interopRequireDefault(_Observable2);\n  var RangeObservable = (function(_Observable) {\n    _inherits(RangeObservable, _Observable);\n    function RangeObservable(start, end, scheduler) {\n      _classCallCheck(this, RangeObservable);\n      _Observable.call(this);\n      this.start = start;\n      this.end = end;\n      this.scheduler = scheduler;\n    }\n    RangeObservable.create = function create(start, end, scheduler) {\n      if (start === undefined)\n        start = 0;\n      if (end === undefined)\n        end = 0;\n      return new RangeObservable(start, end, scheduler);\n    };\n    RangeObservable.dispatch = function dispatch(state) {\n      var start = state.start;\n      var index = state.index;\n      var end = state.end;\n      var subscriber = state.subscriber;\n      if (index >= end) {\n        subscriber.complete();\n        return ;\n      }\n      subscriber.next(start);\n      if (subscriber.isUnsubscribed) {\n        return ;\n      }\n      state.index = index + 1;\n      state.start = start + 1;\n      this.schedule(state);\n    };\n    RangeObservable.prototype._subscribe = function _subscribe(subscriber) {\n      var index = 0;\n      var start = this.start;\n      var end = this.end;\n      var scheduler = this.scheduler;\n      if (scheduler) {\n        subscriber.add(scheduler.schedule(RangeObservable.dispatch, 0, {\n          index: index,\n          end: end,\n          start: start,\n          subscriber: subscriber\n        }));\n      } else {\n        do {\n          if (index++ >= end) {\n            subscriber.complete();\n            break;\n          }\n          subscriber.next(start++);\n          if (subscriber.isUnsubscribed) {\n            break;\n          }\n        } while (true);\n      }\n    };\n    return RangeObservable;\n  })(_Observable3['default']);\n  exports['default'] = RangeObservable;\n  module.exports = exports['default'];\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"@reactivex/rxjs/dist/cjs/observables/TimerObservable\", [\"@reactivex/rxjs/dist/cjs/util/isNumeric\", \"@reactivex/rxjs/dist/cjs/Observable\", \"@reactivex/rxjs/dist/cjs/schedulers/nextTick\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  'use strict';\n  exports.__esModule = true;\n  function _interopRequireDefault(obj) {\n    return obj && obj.__esModule ? obj : {'default': obj};\n  }\n  function _classCallCheck(instance, Constructor) {\n    if (!(instance instanceof Constructor)) {\n      throw new TypeError('Cannot call a class as a function');\n    }\n  }\n  function _inherits(subClass, superClass) {\n    if (typeof superClass !== 'function' && superClass !== null) {\n      throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass);\n    }\n    subClass.prototype = Object.create(superClass && superClass.prototype, {constructor: {\n        value: subClass,\n        enumerable: false,\n        writable: true,\n        configurable: true\n      }});\n    if (superClass)\n      Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass;\n  }\n  var _utilIsNumeric = require(\"@reactivex/rxjs/dist/cjs/util/isNumeric\");\n  var _utilIsNumeric2 = _interopRequireDefault(_utilIsNumeric);\n  var _Observable2 = require(\"@reactivex/rxjs/dist/cjs/Observable\");\n  var _Observable3 = _interopRequireDefault(_Observable2);\n  var _schedulersNextTick = require(\"@reactivex/rxjs/dist/cjs/schedulers/nextTick\");\n  var _schedulersNextTick2 = _interopRequireDefault(_schedulersNextTick);\n  var TimerObservable = (function(_Observable) {\n    _inherits(TimerObservable, _Observable);\n    function TimerObservable(dueTime, period, scheduler) {\n      if (dueTime === undefined)\n        dueTime = 0;\n      _classCallCheck(this, TimerObservable);\n      _Observable.call(this);\n      this.dueTime = dueTime;\n      this.period = period;\n      this.scheduler = scheduler;\n      if (_utilIsNumeric2['default'](period)) {\n        this._period = Number(period) < 1 && 1 || Number(period);\n      } else if (period && typeof period.schedule === 'function') {\n        scheduler = period;\n      }\n      if (!scheduler || typeof scheduler.schedule !== 'function') {\n        scheduler = _schedulersNextTick2['default'];\n      }\n      this.scheduler = scheduler;\n    }\n    TimerObservable.create = function create(dueTime, period, scheduler) {\n      if (dueTime === undefined)\n        dueTime = 0;\n      return new TimerObservable(dueTime, period, scheduler);\n    };\n    TimerObservable.dispatch = function dispatch(state) {\n      var index = state.index;\n      var period = state.period;\n      var subscriber = state.subscriber;\n      var action = this;\n      subscriber.next(index);\n      if (typeof period === 'undefined') {\n        subscriber.complete();\n        return ;\n      } else if (subscriber.isUnsubscribed) {\n        return ;\n      }\n      if (typeof action.delay === 'undefined') {\n        action.add(action.scheduler.schedule(TimerObservable.dispatch, period, {\n          index: index + 1,\n          period: period,\n          subscriber: subscriber\n        }));\n      } else {\n        state.index = index + 1;\n        action.schedule(state, period);\n      }\n    };\n    TimerObservable.prototype._subscribe = function _subscribe(subscriber) {\n      var index = 0;\n      var period = this._period;\n      var dueTime = this.dueTime;\n      var scheduler = this.scheduler;\n      subscriber.add(scheduler.schedule(TimerObservable.dispatch, dueTime, {\n        index: index,\n        period: period,\n        subscriber: subscriber\n      }));\n    };\n    return TimerObservable;\n  })(_Observable3['default']);\n  exports['default'] = TimerObservable;\n  module.exports = exports['default'];\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"@reactivex/rxjs/dist/cjs/operators/zip-support\", [\"@reactivex/rxjs/dist/cjs/Subscriber\", \"@reactivex/rxjs/dist/cjs/util/tryCatch\", \"@reactivex/rxjs/dist/cjs/util/errorObject\", \"@reactivex/rxjs/dist/cjs/OuterSubscriber\", \"@reactivex/rxjs/dist/cjs/util/subscribeToResult\", \"@reactivex/rxjs/dist/cjs/util/Symbol_iterator\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  'use strict';\n  exports.__esModule = true;\n  function _interopRequireDefault(obj) {\n    return obj && obj.__esModule ? obj : {'default': obj};\n  }\n  function _inherits(subClass, superClass) {\n    if (typeof superClass !== 'function' && superClass !== null) {\n      throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass);\n    }\n    subClass.prototype = Object.create(superClass && superClass.prototype, {constructor: {\n        value: subClass,\n        enumerable: false,\n        writable: true,\n        configurable: true\n      }});\n    if (superClass)\n      Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass;\n  }\n  function _classCallCheck(instance, Constructor) {\n    if (!(instance instanceof Constructor)) {\n      throw new TypeError('Cannot call a class as a function');\n    }\n  }\n  var _Subscriber2 = require(\"@reactivex/rxjs/dist/cjs/Subscriber\");\n  var _Subscriber3 = _interopRequireDefault(_Subscriber2);\n  var _utilTryCatch = require(\"@reactivex/rxjs/dist/cjs/util/tryCatch\");\n  var _utilTryCatch2 = _interopRequireDefault(_utilTryCatch);\n  var _utilErrorObject = require(\"@reactivex/rxjs/dist/cjs/util/errorObject\");\n  var _OuterSubscriber2 = require(\"@reactivex/rxjs/dist/cjs/OuterSubscriber\");\n  var _OuterSubscriber3 = _interopRequireDefault(_OuterSubscriber2);\n  var _utilSubscribeToResult = require(\"@reactivex/rxjs/dist/cjs/util/subscribeToResult\");\n  var _utilSubscribeToResult2 = _interopRequireDefault(_utilSubscribeToResult);\n  var _utilSymbol_iterator = require(\"@reactivex/rxjs/dist/cjs/util/Symbol_iterator\");\n  var _utilSymbol_iterator2 = _interopRequireDefault(_utilSymbol_iterator);\n  var isArray = Array.isArray;\n  var ZipOperator = (function() {\n    function ZipOperator(project) {\n      _classCallCheck(this, ZipOperator);\n      this.project = project;\n    }\n    ZipOperator.prototype.call = function call(subscriber) {\n      return new ZipSubscriber(subscriber, this.project);\n    };\n    return ZipOperator;\n  })();\n  exports.ZipOperator = ZipOperator;\n  var ZipSubscriber = (function(_Subscriber) {\n    _inherits(ZipSubscriber, _Subscriber);\n    function ZipSubscriber(destination, project) {\n      var values = arguments.length <= 2 || arguments[2] === undefined ? Object.create(null) : arguments[2];\n      _classCallCheck(this, ZipSubscriber);\n      _Subscriber.call(this, destination);\n      this.index = 0;\n      this.iterators = [];\n      this.active = 0;\n      this.project = typeof project === 'function' ? project : null;\n      this.values = values;\n    }\n    ZipSubscriber.prototype._next = function _next(value) {\n      var iterators = this.iterators;\n      var index = this.index++;\n      if (isArray(value)) {\n        iterators.push(new StaticArrayIterator(value));\n      } else if (typeof value[_utilSymbol_iterator2['default']] === 'function') {\n        iterators.push(new StaticIterator(value[_utilSymbol_iterator2['default']]()));\n      } else {\n        iterators.push(new ZipBufferIterator(this.destination, this, value, index));\n      }\n    };\n    ZipSubscriber.prototype._complete = function _complete() {\n      var iterators = this.iterators;\n      var len = iterators.length;\n      this.active = len;\n      for (var i = 0; i < len; i++) {\n        var iterator = iterators[i];\n        if (iterator.stillUnsubscribed) {\n          iterator.subscribe(iterator, i);\n        } else {\n          this.active--;\n        }\n      }\n    };\n    ZipSubscriber.prototype.notifyInactive = function notifyInactive() {\n      this.active--;\n      if (this.active === 0) {\n        this.destination.complete();\n      }\n    };\n    ZipSubscriber.prototype.checkIterators = function checkIterators() {\n      var iterators = this.iterators;\n      var len = iterators.length;\n      var destination = this.destination;\n      for (var i = 0; i < len; i++) {\n        var iterator = iterators[i];\n        if (typeof iterator.hasValue === 'function' && !iterator.hasValue()) {\n          return ;\n        }\n      }\n      var shouldComplete = false;\n      var args = [];\n      for (var i = 0; i < len; i++) {\n        var iterator = iterators[i];\n        var result = iterator.next();\n        if (iterator.hasCompleted()) {\n          shouldComplete = true;\n        }\n        if (result.done) {\n          destination.complete();\n          return ;\n        }\n        args.push(result.value);\n      }\n      var project = this.project;\n      if (project) {\n        var result = _utilTryCatch2['default'](project).apply(this, args);\n        if (result === _utilErrorObject.errorObject) {\n          destination.error(_utilErrorObject.errorObject.e);\n        } else {\n          destination.next(result);\n        }\n      } else {\n        destination.next(args);\n      }\n      if (shouldComplete) {\n        destination.complete();\n      }\n    };\n    return ZipSubscriber;\n  })(_Subscriber3['default']);\n  exports.ZipSubscriber = ZipSubscriber;\n  var StaticIterator = (function() {\n    function StaticIterator(iterator) {\n      _classCallCheck(this, StaticIterator);\n      this.iterator = iterator;\n      this.nextResult = iterator.next();\n    }\n    StaticIterator.prototype.hasValue = function hasValue() {\n      return true;\n    };\n    StaticIterator.prototype.next = function next() {\n      var result = this.nextResult;\n      this.nextResult = this.iterator.next();\n      return result;\n    };\n    StaticIterator.prototype.hasCompleted = function hasCompleted() {\n      var nextResult = this.nextResult;\n      return nextResult && nextResult.done;\n    };\n    return StaticIterator;\n  })();\n  var StaticArrayIterator = (function() {\n    function StaticArrayIterator(array) {\n      _classCallCheck(this, StaticArrayIterator);\n      this.array = array;\n      this.index = 0;\n      this.length = 0;\n      this.length = array.length;\n    }\n    StaticArrayIterator.prototype[_utilSymbol_iterator2['default']] = function() {\n      return this;\n    };\n    StaticArrayIterator.prototype.next = function next(value) {\n      var i = this.index++;\n      var array = this.array;\n      return i < this.length ? {\n        value: array[i],\n        done: false\n      } : {done: true};\n    };\n    StaticArrayIterator.prototype.hasValue = function hasValue() {\n      return this.array.length > this.index;\n    };\n    StaticArrayIterator.prototype.hasCompleted = function hasCompleted() {\n      return this.array.length === this.index;\n    };\n    return StaticArrayIterator;\n  })();\n  var ZipBufferIterator = (function(_OuterSubscriber) {\n    _inherits(ZipBufferIterator, _OuterSubscriber);\n    function ZipBufferIterator(destination, parent, observable, index) {\n      _classCallCheck(this, ZipBufferIterator);\n      _OuterSubscriber.call(this, destination);\n      this.parent = parent;\n      this.observable = observable;\n      this.index = index;\n      this.stillUnsubscribed = true;\n      this.buffer = [];\n      this.isComplete = false;\n    }\n    ZipBufferIterator.prototype[_utilSymbol_iterator2['default']] = function() {\n      return this;\n    };\n    ZipBufferIterator.prototype.next = function next() {\n      var buffer = this.buffer;\n      if (buffer.length === 0 && this.isComplete) {\n        return {done: true};\n      } else {\n        return {\n          value: buffer.shift(),\n          done: false\n        };\n      }\n    };\n    ZipBufferIterator.prototype.hasValue = function hasValue() {\n      return this.buffer.length > 0;\n    };\n    ZipBufferIterator.prototype.hasCompleted = function hasCompleted() {\n      return this.buffer.length === 0 && this.isComplete;\n    };\n    ZipBufferIterator.prototype.notifyComplete = function notifyComplete() {\n      if (this.buffer.length > 0) {\n        this.isComplete = true;\n        this.parent.notifyInactive();\n      } else {\n        this.destination.complete();\n      }\n    };\n    ZipBufferIterator.prototype.notifyNext = function notifyNext(outerValue, innerValue, outerIndex, innerIndex) {\n      this.buffer.push(innerValue);\n      this.parent.checkIterators();\n    };\n    ZipBufferIterator.prototype.subscribe = function subscribe(value, index) {\n      this.add(_utilSubscribeToResult2['default'](this, this.observable, this, index));\n    };\n    return ZipBufferIterator;\n  })(_OuterSubscriber3['default']);\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"@reactivex/rxjs/dist/cjs/operators/buffer\", [\"@reactivex/rxjs/dist/cjs/Subscriber\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  'use strict';\n  exports.__esModule = true;\n  exports['default'] = buffer;\n  function _interopRequireDefault(obj) {\n    return obj && obj.__esModule ? obj : {'default': obj};\n  }\n  function _inherits(subClass, superClass) {\n    if (typeof superClass !== 'function' && superClass !== null) {\n      throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass);\n    }\n    subClass.prototype = Object.create(superClass && superClass.prototype, {constructor: {\n        value: subClass,\n        enumerable: false,\n        writable: true,\n        configurable: true\n      }});\n    if (superClass)\n      Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass;\n  }\n  function _classCallCheck(instance, Constructor) {\n    if (!(instance instanceof Constructor)) {\n      throw new TypeError('Cannot call a class as a function');\n    }\n  }\n  var _Subscriber3 = require(\"@reactivex/rxjs/dist/cjs/Subscriber\");\n  var _Subscriber4 = _interopRequireDefault(_Subscriber3);\n  function buffer(closingNotifier) {\n    return this.lift(new BufferOperator(closingNotifier));\n  }\n  var BufferOperator = (function() {\n    function BufferOperator(closingNotifier) {\n      _classCallCheck(this, BufferOperator);\n      this.closingNotifier = closingNotifier;\n    }\n    BufferOperator.prototype.call = function call(subscriber) {\n      return new BufferSubscriber(subscriber, this.closingNotifier);\n    };\n    return BufferOperator;\n  })();\n  var BufferSubscriber = (function(_Subscriber) {\n    _inherits(BufferSubscriber, _Subscriber);\n    function BufferSubscriber(destination, closingNotifier) {\n      _classCallCheck(this, BufferSubscriber);\n      _Subscriber.call(this, destination);\n      this.buffer = [];\n      this.notifierSubscriber = null;\n      this.notifierSubscriber = new BufferClosingNotifierSubscriber(this);\n      this.add(closingNotifier._subscribe(this.notifierSubscriber));\n    }\n    BufferSubscriber.prototype._next = function _next(value) {\n      this.buffer.push(value);\n    };\n    BufferSubscriber.prototype._error = function _error(err) {\n      this.destination.error(err);\n    };\n    BufferSubscriber.prototype._complete = function _complete() {\n      this.destination.complete();\n    };\n    BufferSubscriber.prototype.flushBuffer = function flushBuffer() {\n      var buffer = this.buffer;\n      this.buffer = [];\n      this.destination.next(buffer);\n      if (this.isUnsubscribed) {\n        this.notifierSubscriber.unsubscribe();\n      }\n    };\n    return BufferSubscriber;\n  })(_Subscriber4['default']);\n  var BufferClosingNotifierSubscriber = (function(_Subscriber2) {\n    _inherits(BufferClosingNotifierSubscriber, _Subscriber2);\n    function BufferClosingNotifierSubscriber(parent) {\n      _classCallCheck(this, BufferClosingNotifierSubscriber);\n      _Subscriber2.call(this, null);\n      this.parent = parent;\n    }\n    BufferClosingNotifierSubscriber.prototype._next = function _next(value) {\n      this.parent.flushBuffer();\n    };\n    BufferClosingNotifierSubscriber.prototype._error = function _error(err) {\n      this.parent.error(err);\n    };\n    BufferClosingNotifierSubscriber.prototype._complete = function _complete() {\n      this.parent.complete();\n    };\n    return BufferClosingNotifierSubscriber;\n  })(_Subscriber4['default']);\n  module.exports = exports['default'];\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"@reactivex/rxjs/dist/cjs/operators/bufferCount\", [\"@reactivex/rxjs/dist/cjs/Subscriber\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  'use strict';\n  exports.__esModule = true;\n  exports['default'] = bufferCount;\n  function _interopRequireDefault(obj) {\n    return obj && obj.__esModule ? obj : {'default': obj};\n  }\n  function _inherits(subClass, superClass) {\n    if (typeof superClass !== 'function' && superClass !== null) {\n      throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass);\n    }\n    subClass.prototype = Object.create(superClass && superClass.prototype, {constructor: {\n        value: subClass,\n        enumerable: false,\n        writable: true,\n        configurable: true\n      }});\n    if (superClass)\n      Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass;\n  }\n  function _classCallCheck(instance, Constructor) {\n    if (!(instance instanceof Constructor)) {\n      throw new TypeError('Cannot call a class as a function');\n    }\n  }\n  var _Subscriber2 = require(\"@reactivex/rxjs/dist/cjs/Subscriber\");\n  var _Subscriber3 = _interopRequireDefault(_Subscriber2);\n  function bufferCount(bufferSize) {\n    var startBufferEvery = arguments.length <= 1 || arguments[1] === undefined ? null : arguments[1];\n    return this.lift(new BufferCountOperator(bufferSize, startBufferEvery));\n  }\n  var BufferCountOperator = (function() {\n    function BufferCountOperator(bufferSize, startBufferEvery) {\n      _classCallCheck(this, BufferCountOperator);\n      this.bufferSize = bufferSize;\n      this.startBufferEvery = startBufferEvery;\n    }\n    BufferCountOperator.prototype.call = function call(subscriber) {\n      return new BufferCountSubscriber(subscriber, this.bufferSize, this.startBufferEvery);\n    };\n    return BufferCountOperator;\n  })();\n  var BufferCountSubscriber = (function(_Subscriber) {\n    _inherits(BufferCountSubscriber, _Subscriber);\n    function BufferCountSubscriber(destination, bufferSize, startBufferEvery) {\n      _classCallCheck(this, BufferCountSubscriber);\n      _Subscriber.call(this, destination);\n      this.bufferSize = bufferSize;\n      this.startBufferEvery = startBufferEvery;\n      this.buffers = [[]];\n      this.count = 0;\n    }\n    BufferCountSubscriber.prototype._next = function _next(value) {\n      var count = this.count += 1;\n      var destination = this.destination;\n      var bufferSize = this.bufferSize;\n      var startBufferEvery = this.startBufferEvery == null ? bufferSize : this.startBufferEvery;\n      var buffers = this.buffers;\n      var len = buffers.length;\n      var remove = -1;\n      if (count % startBufferEvery === 0) {\n        buffers.push([]);\n      }\n      for (var i = 0; i < len; i++) {\n        var buffer = buffers[i];\n        buffer.push(value);\n        if (buffer.length === bufferSize) {\n          remove = i;\n          destination.next(buffer);\n        }\n      }\n      if (remove !== -1) {\n        buffers.splice(remove, 1);\n      }\n    };\n    BufferCountSubscriber.prototype._error = function _error(err) {\n      this.destination.error(err);\n    };\n    BufferCountSubscriber.prototype._complete = function _complete() {\n      var destination = this.destination;\n      var buffers = this.buffers;\n      while (buffers.length > 0) {\n        var buffer = buffers.shift();\n        if (buffer.length > 0) {\n          destination.next(buffer);\n        }\n      }\n      destination.complete();\n    };\n    return BufferCountSubscriber;\n  })(_Subscriber3['default']);\n  module.exports = exports['default'];\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"@reactivex/rxjs/dist/cjs/operators/bufferTime\", [\"@reactivex/rxjs/dist/cjs/Subscriber\", \"@reactivex/rxjs/dist/cjs/schedulers/nextTick\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  'use strict';\n  exports.__esModule = true;\n  exports['default'] = bufferTime;\n  function _interopRequireDefault(obj) {\n    return obj && obj.__esModule ? obj : {'default': obj};\n  }\n  function _inherits(subClass, superClass) {\n    if (typeof superClass !== 'function' && superClass !== null) {\n      throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass);\n    }\n    subClass.prototype = Object.create(superClass && superClass.prototype, {constructor: {\n        value: subClass,\n        enumerable: false,\n        writable: true,\n        configurable: true\n      }});\n    if (superClass)\n      Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass;\n  }\n  function _classCallCheck(instance, Constructor) {\n    if (!(instance instanceof Constructor)) {\n      throw new TypeError('Cannot call a class as a function');\n    }\n  }\n  var _Subscriber2 = require(\"@reactivex/rxjs/dist/cjs/Subscriber\");\n  var _Subscriber3 = _interopRequireDefault(_Subscriber2);\n  var _schedulersNextTick = require(\"@reactivex/rxjs/dist/cjs/schedulers/nextTick\");\n  var _schedulersNextTick2 = _interopRequireDefault(_schedulersNextTick);\n  function bufferTime(bufferTimeSpan) {\n    var bufferCreationInterval = arguments.length <= 1 || arguments[1] === undefined ? null : arguments[1];\n    var scheduler = arguments.length <= 2 || arguments[2] === undefined ? _schedulersNextTick2['default'] : arguments[2];\n    return this.lift(new BufferTimeOperator(bufferTimeSpan, bufferCreationInterval, scheduler));\n  }\n  var BufferTimeOperator = (function() {\n    function BufferTimeOperator(bufferTimeSpan, bufferCreationInterval, scheduler) {\n      _classCallCheck(this, BufferTimeOperator);\n      this.bufferTimeSpan = bufferTimeSpan;\n      this.bufferCreationInterval = bufferCreationInterval;\n      this.scheduler = scheduler;\n    }\n    BufferTimeOperator.prototype.call = function call(subscriber) {\n      return new BufferTimeSubscriber(subscriber, this.bufferTimeSpan, this.bufferCreationInterval, this.scheduler);\n    };\n    return BufferTimeOperator;\n  })();\n  var BufferTimeSubscriber = (function(_Subscriber) {\n    _inherits(BufferTimeSubscriber, _Subscriber);\n    function BufferTimeSubscriber(destination, bufferTimeSpan, bufferCreationInterval, scheduler) {\n      _classCallCheck(this, BufferTimeSubscriber);\n      _Subscriber.call(this, destination);\n      this.bufferTimeSpan = bufferTimeSpan;\n      this.bufferCreationInterval = bufferCreationInterval;\n      this.scheduler = scheduler;\n      this.buffers = [];\n      var buffer = this.openBuffer();\n      if (bufferCreationInterval !== null && bufferCreationInterval >= 0) {\n        var closeState = {\n          subscriber: this,\n          buffer: buffer\n        };\n        var creationState = {\n          bufferTimeSpan: bufferTimeSpan,\n          bufferCreationInterval: bufferCreationInterval,\n          subscriber: this,\n          scheduler: scheduler\n        };\n        this.add(scheduler.schedule(dispatchBufferClose, bufferTimeSpan, closeState));\n        this.add(scheduler.schedule(dispatchBufferCreation, bufferCreationInterval, creationState));\n      } else {\n        var timeSpanOnlyState = {\n          subscriber: this,\n          buffer: buffer,\n          bufferTimeSpan: bufferTimeSpan\n        };\n        this.add(scheduler.schedule(dispatchBufferTimeSpanOnly, bufferTimeSpan, timeSpanOnlyState));\n      }\n    }\n    BufferTimeSubscriber.prototype._next = function _next(value) {\n      var buffers = this.buffers;\n      var len = buffers.length;\n      for (var i = 0; i < len; i++) {\n        buffers[i].push(value);\n      }\n    };\n    BufferTimeSubscriber.prototype._error = function _error(err) {\n      this.buffers.length = 0;\n      this.destination.error(err);\n    };\n    BufferTimeSubscriber.prototype._complete = function _complete() {\n      var buffers = this.buffers;\n      while (buffers.length > 0) {\n        this.destination.next(buffers.shift());\n      }\n      this.destination.complete();\n    };\n    BufferTimeSubscriber.prototype.openBuffer = function openBuffer() {\n      var buffer = [];\n      this.buffers.push(buffer);\n      return buffer;\n    };\n    BufferTimeSubscriber.prototype.closeBuffer = function closeBuffer(buffer) {\n      this.destination.next(buffer);\n      var buffers = this.buffers;\n      buffers.splice(buffers.indexOf(buffer), 1);\n    };\n    return BufferTimeSubscriber;\n  })(_Subscriber3['default']);\n  function dispatchBufferTimeSpanOnly(state) {\n    var subscriber = state.subscriber;\n    var prevBuffer = state.buffer;\n    if (prevBuffer) {\n      subscriber.closeBuffer(prevBuffer);\n    }\n    state.buffer = subscriber.openBuffer();\n    if (!subscriber.isUnsubscribed) {\n      this.schedule(state, state.bufferTimeSpan);\n    }\n  }\n  function dispatchBufferCreation(state) {\n    var bufferCreationInterval = state.bufferCreationInterval;\n    var bufferTimeSpan = state.bufferTimeSpan;\n    var subscriber = state.subscriber;\n    var scheduler = state.scheduler;\n    var buffer = subscriber.openBuffer();\n    var action = this;\n    if (!subscriber.isUnsubscribed) {\n      action.add(scheduler.schedule(dispatchBufferClose, bufferTimeSpan, {\n        subscriber: subscriber,\n        buffer: buffer\n      }));\n      action.schedule(state, bufferCreationInterval);\n    }\n  }\n  function dispatchBufferClose(_ref) {\n    var subscriber = _ref.subscriber;\n    var buffer = _ref.buffer;\n    subscriber.closeBuffer(buffer);\n  }\n  module.exports = exports['default'];\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"@reactivex/rxjs/dist/cjs/operators/bufferToggle\", [\"@reactivex/rxjs/dist/cjs/Subscriber\", \"@reactivex/rxjs/dist/cjs/Subscription\", \"@reactivex/rxjs/dist/cjs/util/tryCatch\", \"@reactivex/rxjs/dist/cjs/util/errorObject\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  'use strict';\n  exports.__esModule = true;\n  exports['default'] = bufferToggle;\n  function _interopRequireDefault(obj) {\n    return obj && obj.__esModule ? obj : {'default': obj};\n  }\n  function _inherits(subClass, superClass) {\n    if (typeof superClass !== 'function' && superClass !== null) {\n      throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass);\n    }\n    subClass.prototype = Object.create(superClass && superClass.prototype, {constructor: {\n        value: subClass,\n        enumerable: false,\n        writable: true,\n        configurable: true\n      }});\n    if (superClass)\n      Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass;\n  }\n  function _classCallCheck(instance, Constructor) {\n    if (!(instance instanceof Constructor)) {\n      throw new TypeError('Cannot call a class as a function');\n    }\n  }\n  var _Subscriber4 = require(\"@reactivex/rxjs/dist/cjs/Subscriber\");\n  var _Subscriber5 = _interopRequireDefault(_Subscriber4);\n  var _Subscription = require(\"@reactivex/rxjs/dist/cjs/Subscription\");\n  var _Subscription2 = _interopRequireDefault(_Subscription);\n  var _utilTryCatch = require(\"@reactivex/rxjs/dist/cjs/util/tryCatch\");\n  var _utilTryCatch2 = _interopRequireDefault(_utilTryCatch);\n  var _utilErrorObject = require(\"@reactivex/rxjs/dist/cjs/util/errorObject\");\n  function bufferToggle(openings, closingSelector) {\n    return this.lift(new BufferToggleOperator(openings, closingSelector));\n  }\n  var BufferToggleOperator = (function() {\n    function BufferToggleOperator(openings, closingSelector) {\n      _classCallCheck(this, BufferToggleOperator);\n      this.openings = openings;\n      this.closingSelector = closingSelector;\n    }\n    BufferToggleOperator.prototype.call = function call(subscriber) {\n      return new BufferToggleSubscriber(subscriber, this.openings, this.closingSelector);\n    };\n    return BufferToggleOperator;\n  })();\n  var BufferToggleSubscriber = (function(_Subscriber) {\n    _inherits(BufferToggleSubscriber, _Subscriber);\n    function BufferToggleSubscriber(destination, openings, closingSelector) {\n      _classCallCheck(this, BufferToggleSubscriber);\n      _Subscriber.call(this, destination);\n      this.openings = openings;\n      this.closingSelector = closingSelector;\n      this.contexts = [];\n      this.add(this.openings._subscribe(new BufferToggleOpeningsSubscriber(this)));\n    }\n    BufferToggleSubscriber.prototype._next = function _next(value) {\n      var contexts = this.contexts;\n      var len = contexts.length;\n      for (var i = 0; i < len; i++) {\n        contexts[i].buffer.push(value);\n      }\n    };\n    BufferToggleSubscriber.prototype._error = function _error(err) {\n      this.contexts = null;\n      this.destination.error(err);\n    };\n    BufferToggleSubscriber.prototype._complete = function _complete() {\n      var contexts = this.contexts;\n      while (contexts.length > 0) {\n        var context = contexts.shift();\n        this.destination.next(context.buffer);\n        context.subscription.unsubscribe();\n        context.buffer = null;\n      }\n      this.destination.complete();\n    };\n    BufferToggleSubscriber.prototype.openBuffer = function openBuffer(value) {\n      var closingSelector = this.closingSelector;\n      var contexts = this.contexts;\n      var closingNotifier = _utilTryCatch2['default'](closingSelector)(value);\n      if (closingNotifier === _utilErrorObject.errorObject) {\n        var err = closingNotifier.e;\n        this.contexts = null;\n        this.destination.error(err);\n      } else {\n        var context = {\n          buffer: [],\n          subscription: new _Subscription2['default']()\n        };\n        contexts.push(context);\n        var subscriber = new BufferClosingNotifierSubscriber(this, context);\n        var subscription = closingNotifier._subscribe(subscriber);\n        this.add(context.subscription.add(subscription));\n      }\n    };\n    BufferToggleSubscriber.prototype.closeBuffer = function closeBuffer(context) {\n      var contexts = this.contexts;\n      if (contexts === null) {\n        return ;\n      }\n      var buffer = context.buffer;\n      var subscription = context.subscription;\n      this.destination.next(buffer);\n      contexts.splice(contexts.indexOf(context), 1);\n      this.remove(subscription);\n      subscription.unsubscribe();\n    };\n    return BufferToggleSubscriber;\n  })(_Subscriber5['default']);\n  var BufferClosingNotifierSubscriber = (function(_Subscriber2) {\n    _inherits(BufferClosingNotifierSubscriber, _Subscriber2);\n    function BufferClosingNotifierSubscriber(parent, context) {\n      _classCallCheck(this, BufferClosingNotifierSubscriber);\n      _Subscriber2.call(this, null);\n      this.parent = parent;\n      this.context = context;\n    }\n    BufferClosingNotifierSubscriber.prototype._next = function _next() {\n      this.parent.closeBuffer(this.context);\n    };\n    BufferClosingNotifierSubscriber.prototype._error = function _error(err) {\n      this.parent.error(err);\n    };\n    BufferClosingNotifierSubscriber.prototype._complete = function _complete() {\n      this.parent.closeBuffer(this.context);\n    };\n    return BufferClosingNotifierSubscriber;\n  })(_Subscriber5['default']);\n  var BufferToggleOpeningsSubscriber = (function(_Subscriber3) {\n    _inherits(BufferToggleOpeningsSubscriber, _Subscriber3);\n    function BufferToggleOpeningsSubscriber(parent) {\n      _classCallCheck(this, BufferToggleOpeningsSubscriber);\n      _Subscriber3.call(this, null);\n      this.parent = parent;\n    }\n    BufferToggleOpeningsSubscriber.prototype._next = function _next(value) {\n      this.parent.openBuffer(value);\n    };\n    BufferToggleOpeningsSubscriber.prototype._error = function _error(err) {\n      this.parent.error(err);\n    };\n    BufferToggleOpeningsSubscriber.prototype._complete = function _complete() {};\n    return BufferToggleOpeningsSubscriber;\n  })(_Subscriber5['default']);\n  module.exports = exports['default'];\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"@reactivex/rxjs/dist/cjs/operators/bufferWhen\", [\"@reactivex/rxjs/dist/cjs/Subscriber\", \"@reactivex/rxjs/dist/cjs/util/tryCatch\", \"@reactivex/rxjs/dist/cjs/util/errorObject\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  'use strict';\n  exports.__esModule = true;\n  exports['default'] = bufferWhen;\n  function _interopRequireDefault(obj) {\n    return obj && obj.__esModule ? obj : {'default': obj};\n  }\n  function _inherits(subClass, superClass) {\n    if (typeof superClass !== 'function' && superClass !== null) {\n      throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass);\n    }\n    subClass.prototype = Object.create(superClass && superClass.prototype, {constructor: {\n        value: subClass,\n        enumerable: false,\n        writable: true,\n        configurable: true\n      }});\n    if (superClass)\n      Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass;\n  }\n  function _classCallCheck(instance, Constructor) {\n    if (!(instance instanceof Constructor)) {\n      throw new TypeError('Cannot call a class as a function');\n    }\n  }\n  var _Subscriber3 = require(\"@reactivex/rxjs/dist/cjs/Subscriber\");\n  var _Subscriber4 = _interopRequireDefault(_Subscriber3);\n  var _utilTryCatch = require(\"@reactivex/rxjs/dist/cjs/util/tryCatch\");\n  var _utilTryCatch2 = _interopRequireDefault(_utilTryCatch);\n  var _utilErrorObject = require(\"@reactivex/rxjs/dist/cjs/util/errorObject\");\n  function bufferWhen(closingSelector) {\n    return this.lift(new BufferWhenOperator(closingSelector));\n  }\n  var BufferWhenOperator = (function() {\n    function BufferWhenOperator(closingSelector) {\n      _classCallCheck(this, BufferWhenOperator);\n      this.closingSelector = closingSelector;\n    }\n    BufferWhenOperator.prototype.call = function call(subscriber) {\n      return new BufferWhenSubscriber(subscriber, this.closingSelector);\n    };\n    return BufferWhenOperator;\n  })();\n  var BufferWhenSubscriber = (function(_Subscriber) {\n    _inherits(BufferWhenSubscriber, _Subscriber);\n    function BufferWhenSubscriber(destination, closingSelector) {\n      _classCallCheck(this, BufferWhenSubscriber);\n      _Subscriber.call(this, destination);\n      this.closingSelector = closingSelector;\n      this.openBuffer();\n    }\n    BufferWhenSubscriber.prototype._next = function _next(value) {\n      this.buffer.push(value);\n    };\n    BufferWhenSubscriber.prototype._error = function _error(err) {\n      this.buffer = null;\n      this.destination.error(err);\n    };\n    BufferWhenSubscriber.prototype._complete = function _complete() {\n      var buffer = this.buffer;\n      this.destination.next(buffer);\n      this.buffer = null;\n      this.destination.complete();\n    };\n    BufferWhenSubscriber.prototype.openBuffer = function openBuffer() {\n      var prevClosingNotification = this.closingNotification;\n      if (prevClosingNotification) {\n        this.remove(prevClosingNotification);\n        prevClosingNotification.unsubscribe();\n      }\n      var buffer = this.buffer;\n      if (buffer) {\n        this.destination.next(buffer);\n      }\n      this.buffer = [];\n      var closingNotifier = _utilTryCatch2['default'](this.closingSelector)();\n      if (closingNotifier === _utilErrorObject.errorObject) {\n        var err = closingNotifier.e;\n        this.buffer = null;\n        this.destination.error(err);\n      } else {\n        this.add(this.closingNotification = closingNotifier._subscribe(new BufferClosingNotifierSubscriber(this)));\n      }\n    };\n    return BufferWhenSubscriber;\n  })(_Subscriber4['default']);\n  var BufferClosingNotifierSubscriber = (function(_Subscriber2) {\n    _inherits(BufferClosingNotifierSubscriber, _Subscriber2);\n    function BufferClosingNotifierSubscriber(parent) {\n      _classCallCheck(this, BufferClosingNotifierSubscriber);\n      _Subscriber2.call(this, null);\n      this.parent = parent;\n    }\n    BufferClosingNotifierSubscriber.prototype._next = function _next() {\n      this.parent.openBuffer();\n    };\n    BufferClosingNotifierSubscriber.prototype._error = function _error(err) {\n      this.parent.error(err);\n    };\n    BufferClosingNotifierSubscriber.prototype._complete = function _complete() {\n      this.parent.openBuffer();\n    };\n    return BufferClosingNotifierSubscriber;\n  })(_Subscriber4['default']);\n  module.exports = exports['default'];\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"@reactivex/rxjs/dist/cjs/operators/catch\", [\"@reactivex/rxjs/dist/cjs/Subscriber\", \"@reactivex/rxjs/dist/cjs/util/tryCatch\", \"@reactivex/rxjs/dist/cjs/util/errorObject\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  'use strict';\n  exports.__esModule = true;\n  exports['default'] = _catch;\n  function _interopRequireDefault(obj) {\n    return obj && obj.__esModule ? obj : {'default': obj};\n  }\n  function _inherits(subClass, superClass) {\n    if (typeof superClass !== 'function' && superClass !== null) {\n      throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass);\n    }\n    subClass.prototype = Object.create(superClass && superClass.prototype, {constructor: {\n        value: subClass,\n        enumerable: false,\n        writable: true,\n        configurable: true\n      }});\n    if (superClass)\n      Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass;\n  }\n  function _classCallCheck(instance, Constructor) {\n    if (!(instance instanceof Constructor)) {\n      throw new TypeError('Cannot call a class as a function');\n    }\n  }\n  var _Subscriber2 = require(\"@reactivex/rxjs/dist/cjs/Subscriber\");\n  var _Subscriber3 = _interopRequireDefault(_Subscriber2);\n  var _utilTryCatch = require(\"@reactivex/rxjs/dist/cjs/util/tryCatch\");\n  var _utilTryCatch2 = _interopRequireDefault(_utilTryCatch);\n  var _utilErrorObject = require(\"@reactivex/rxjs/dist/cjs/util/errorObject\");\n  function _catch(selector) {\n    var catchOperator = new CatchOperator(selector);\n    var caught = this.lift(catchOperator);\n    catchOperator.caught = caught;\n    return caught;\n  }\n  var CatchOperator = (function() {\n    function CatchOperator(selector) {\n      _classCallCheck(this, CatchOperator);\n      this.selector = selector;\n    }\n    CatchOperator.prototype.call = function call(subscriber) {\n      return new CatchSubscriber(subscriber, this.selector, this.caught);\n    };\n    return CatchOperator;\n  })();\n  var CatchSubscriber = (function(_Subscriber) {\n    _inherits(CatchSubscriber, _Subscriber);\n    function CatchSubscriber(destination, selector, caught) {\n      _classCallCheck(this, CatchSubscriber);\n      _Subscriber.call(this, destination);\n      this.selector = selector;\n      this.caught = caught;\n    }\n    CatchSubscriber.prototype._error = function _error(err) {\n      var result = _utilTryCatch2['default'](this.selector)(err, this.caught);\n      if (result === _utilErrorObject.errorObject) {\n        this.destination.error(_utilErrorObject.errorObject.e);\n      } else {\n        this.add(result.subscribe(this.destination));\n      }\n    };\n    return CatchSubscriber;\n  })(_Subscriber3['default']);\n  module.exports = exports['default'];\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"@reactivex/rxjs/dist/cjs/operators/combineAll\", [\"@reactivex/rxjs/dist/cjs/operators/combineLatest-support\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  'use strict';\n  exports.__esModule = true;\n  exports['default'] = combineAll;\n  var _combineLatestSupport = require(\"@reactivex/rxjs/dist/cjs/operators/combineLatest-support\");\n  function combineAll(project) {\n    return this.lift(new _combineLatestSupport.CombineLatestOperator(project));\n  }\n  module.exports = exports['default'];\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"@reactivex/rxjs/dist/cjs/operators/combineLatest\", [\"@reactivex/rxjs/dist/cjs/observables/ArrayObservable\", \"@reactivex/rxjs/dist/cjs/operators/combineLatest-support\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  'use strict';\n  exports.__esModule = true;\n  exports['default'] = combineLatest;\n  function _interopRequireDefault(obj) {\n    return obj && obj.__esModule ? obj : {'default': obj};\n  }\n  var _observablesArrayObservable = require(\"@reactivex/rxjs/dist/cjs/observables/ArrayObservable\");\n  var _observablesArrayObservable2 = _interopRequireDefault(_observablesArrayObservable);\n  var _combineLatestSupport = require(\"@reactivex/rxjs/dist/cjs/operators/combineLatest-support\");\n  function combineLatest() {\n    for (var _len = arguments.length,\n        observables = Array(_len),\n        _key = 0; _key < _len; _key++) {\n      observables[_key] = arguments[_key];\n    }\n    observables.unshift(this);\n    var project = undefined;\n    if (typeof observables[observables.length - 1] === 'function') {\n      project = observables.pop();\n    }\n    return new _observablesArrayObservable2['default'](observables).lift(new _combineLatestSupport.CombineLatestOperator(project));\n  }\n  module.exports = exports['default'];\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"@reactivex/rxjs/dist/cjs/operators/concat\", [\"@reactivex/rxjs/dist/cjs/Observable\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  'use strict';\n  exports.__esModule = true;\n  exports['default'] = concat;\n  function _interopRequireDefault(obj) {\n    return obj && obj.__esModule ? obj : {'default': obj};\n  }\n  var _Observable = require(\"@reactivex/rxjs/dist/cjs/Observable\");\n  var _Observable2 = _interopRequireDefault(_Observable);\n  function concat() {\n    for (var _len = arguments.length,\n        observables = Array(_len),\n        _key = 0; _key < _len; _key++) {\n      observables[_key] = arguments[_key];\n    }\n    var args = observables;\n    args.unshift(this);\n    if (args.length > 1 && typeof args[args.length - 1].schedule === 'function') {\n      args.splice(args.length - 2, 0, 1);\n    }\n    return _Observable2['default'].fromArray(args).mergeAll(1);\n  }\n  module.exports = exports['default'];\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"@reactivex/rxjs/dist/cjs/operators/concatAll\", [\"@reactivex/rxjs/dist/cjs/operators/mergeAll-support\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  'use strict';\n  exports.__esModule = true;\n  exports['default'] = concatAll;\n  var _mergeAllSupport = require(\"@reactivex/rxjs/dist/cjs/operators/mergeAll-support\");\n  function concatAll() {\n    return this.lift(new _mergeAllSupport.MergeAllOperator(1));\n  }\n  module.exports = exports['default'];\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"@reactivex/rxjs/dist/cjs/operators/mergeMap-support\", [\"@reactivex/rxjs/dist/cjs/util/tryCatch\", \"@reactivex/rxjs/dist/cjs/util/errorObject\", \"@reactivex/rxjs/dist/cjs/util/subscribeToResult\", \"@reactivex/rxjs/dist/cjs/OuterSubscriber\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  'use strict';\n  exports.__esModule = true;\n  function _interopRequireDefault(obj) {\n    return obj && obj.__esModule ? obj : {'default': obj};\n  }\n  function _inherits(subClass, superClass) {\n    if (typeof superClass !== 'function' && superClass !== null) {\n      throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass);\n    }\n    subClass.prototype = Object.create(superClass && superClass.prototype, {constructor: {\n        value: subClass,\n        enumerable: false,\n        writable: true,\n        configurable: true\n      }});\n    if (superClass)\n      Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass;\n  }\n  function _classCallCheck(instance, Constructor) {\n    if (!(instance instanceof Constructor)) {\n      throw new TypeError('Cannot call a class as a function');\n    }\n  }\n  var _utilTryCatch = require(\"@reactivex/rxjs/dist/cjs/util/tryCatch\");\n  var _utilTryCatch2 = _interopRequireDefault(_utilTryCatch);\n  var _utilErrorObject = require(\"@reactivex/rxjs/dist/cjs/util/errorObject\");\n  var _utilSubscribeToResult = require(\"@reactivex/rxjs/dist/cjs/util/subscribeToResult\");\n  var _utilSubscribeToResult2 = _interopRequireDefault(_utilSubscribeToResult);\n  var _OuterSubscriber2 = require(\"@reactivex/rxjs/dist/cjs/OuterSubscriber\");\n  var _OuterSubscriber3 = _interopRequireDefault(_OuterSubscriber2);\n  var MergeMapOperator = (function() {\n    function MergeMapOperator(project, resultSelector) {\n      var concurrent = arguments.length <= 2 || arguments[2] === undefined ? Number.POSITIVE_INFINITY : arguments[2];\n      _classCallCheck(this, MergeMapOperator);\n      this.project = project;\n      this.resultSelector = resultSelector;\n      this.concurrent = concurrent;\n    }\n    MergeMapOperator.prototype.call = function call(observer) {\n      return new MergeMapSubscriber(observer, this.project, this.resultSelector, this.concurrent);\n    };\n    return MergeMapOperator;\n  })();\n  exports.MergeMapOperator = MergeMapOperator;\n  var MergeMapSubscriber = (function(_OuterSubscriber) {\n    _inherits(MergeMapSubscriber, _OuterSubscriber);\n    function MergeMapSubscriber(destination, project, resultSelector) {\n      var concurrent = arguments.length <= 3 || arguments[3] === undefined ? Number.POSITIVE_INFINITY : arguments[3];\n      _classCallCheck(this, MergeMapSubscriber);\n      _OuterSubscriber.call(this, destination);\n      this.project = project;\n      this.resultSelector = resultSelector;\n      this.concurrent = concurrent;\n      this.hasCompleted = false;\n      this.buffer = [];\n      this.active = 0;\n      this.index = 0;\n    }\n    MergeMapSubscriber.prototype._next = function _next(value) {\n      if (this.active < this.concurrent) {\n        var index = this.index++;\n        var ish = _utilTryCatch2['default'](this.project)(value, index);\n        var destination = this.destination;\n        if (ish === _utilErrorObject.errorObject) {\n          destination.error(ish.e);\n        } else {\n          this.active++;\n          this._innerSub(ish, value, index);\n        }\n      } else {\n        this.buffer.push(value);\n      }\n    };\n    MergeMapSubscriber.prototype._innerSub = function _innerSub(ish, value, index) {\n      this.add(_utilSubscribeToResult2['default'](this, ish, value, index));\n    };\n    MergeMapSubscriber.prototype._complete = function _complete() {\n      this.hasCompleted = true;\n      if (this.active === 0 && this.buffer.length === 0) {\n        this.destination.complete();\n      }\n    };\n    MergeMapSubscriber.prototype.notifyNext = function notifyNext(outerValue, innerValue, outerIndex, innerIndex) {\n      var destination = this.destination;\n      var resultSelector = this.resultSelector;\n      if (resultSelector) {\n        var result = _utilTryCatch2['default'](resultSelector)(outerValue, innerValue, outerIndex, innerIndex);\n        if (result === _utilErrorObject.errorObject) {\n          destination.error(_utilErrorObject.errorObject.e);\n        } else {\n          destination.next(result);\n        }\n      } else {\n        destination.next(innerValue);\n      }\n    };\n    MergeMapSubscriber.prototype.notifyComplete = function notifyComplete(innerSub) {\n      var buffer = this.buffer;\n      this.remove(innerSub);\n      this.active--;\n      if (buffer.length > 0) {\n        this._next(buffer.shift());\n      } else if (this.active === 0 && this.hasCompleted) {\n        this.destination.complete();\n      }\n    };\n    return MergeMapSubscriber;\n  })(_OuterSubscriber3['default']);\n  exports.MergeMapSubscriber = MergeMapSubscriber;\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"@reactivex/rxjs/dist/cjs/operators/mergeMapTo-support\", [\"@reactivex/rxjs/dist/cjs/util/tryCatch\", \"@reactivex/rxjs/dist/cjs/util/errorObject\", \"@reactivex/rxjs/dist/cjs/OuterSubscriber\", \"@reactivex/rxjs/dist/cjs/util/subscribeToResult\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  'use strict';\n  exports.__esModule = true;\n  function _interopRequireDefault(obj) {\n    return obj && obj.__esModule ? obj : {'default': obj};\n  }\n  function _inherits(subClass, superClass) {\n    if (typeof superClass !== 'function' && superClass !== null) {\n      throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass);\n    }\n    subClass.prototype = Object.create(superClass && superClass.prototype, {constructor: {\n        value: subClass,\n        enumerable: false,\n        writable: true,\n        configurable: true\n      }});\n    if (superClass)\n      Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass;\n  }\n  function _classCallCheck(instance, Constructor) {\n    if (!(instance instanceof Constructor)) {\n      throw new TypeError('Cannot call a class as a function');\n    }\n  }\n  var _utilTryCatch = require(\"@reactivex/rxjs/dist/cjs/util/tryCatch\");\n  var _utilTryCatch2 = _interopRequireDefault(_utilTryCatch);\n  var _utilErrorObject = require(\"@reactivex/rxjs/dist/cjs/util/errorObject\");\n  var _OuterSubscriber2 = require(\"@reactivex/rxjs/dist/cjs/OuterSubscriber\");\n  var _OuterSubscriber3 = _interopRequireDefault(_OuterSubscriber2);\n  var _utilSubscribeToResult = require(\"@reactivex/rxjs/dist/cjs/util/subscribeToResult\");\n  var _utilSubscribeToResult2 = _interopRequireDefault(_utilSubscribeToResult);\n  var MergeMapToOperator = (function() {\n    function MergeMapToOperator(ish, resultSelector) {\n      var concurrent = arguments.length <= 2 || arguments[2] === undefined ? Number.POSITIVE_INFINITY : arguments[2];\n      _classCallCheck(this, MergeMapToOperator);\n      this.ish = ish;\n      this.resultSelector = resultSelector;\n      this.concurrent = concurrent;\n    }\n    MergeMapToOperator.prototype.call = function call(observer) {\n      return new MergeMapToSubscriber(observer, this.ish, this.resultSelector, this.concurrent);\n    };\n    return MergeMapToOperator;\n  })();\n  exports.MergeMapToOperator = MergeMapToOperator;\n  var MergeMapToSubscriber = (function(_OuterSubscriber) {\n    _inherits(MergeMapToSubscriber, _OuterSubscriber);\n    function MergeMapToSubscriber(destination, ish, resultSelector) {\n      var concurrent = arguments.length <= 3 || arguments[3] === undefined ? Number.POSITIVE_INFINITY : arguments[3];\n      _classCallCheck(this, MergeMapToSubscriber);\n      _OuterSubscriber.call(this, destination);\n      this.ish = ish;\n      this.resultSelector = resultSelector;\n      this.concurrent = concurrent;\n      this.hasCompleted = false;\n      this.buffer = [];\n      this.active = 0;\n      this.index = 0;\n    }\n    MergeMapToSubscriber.prototype._next = function _next(value) {\n      if (this.active < this.concurrent) {\n        var resultSelector = this.resultSelector;\n        var index = this.index++;\n        var ish = this.ish;\n        var destination = this.destination;\n        if (ish === _utilErrorObject.errorObject) {\n          destination.error(ish.e);\n        } else {\n          this.active++;\n          this._innerSub(ish, destination, resultSelector, value, index);\n        }\n      } else {\n        this.buffer.push(value);\n      }\n    };\n    MergeMapToSubscriber.prototype._innerSub = function _innerSub(ish, destination, resultSelector, value, index) {\n      this.add(_utilSubscribeToResult2['default'](this, ish, value, index));\n    };\n    MergeMapToSubscriber.prototype._complete = function _complete() {\n      this.hasCompleted = true;\n      if (this.active === 0 && this.buffer.length === 0) {\n        this.destination.complete();\n      }\n    };\n    MergeMapToSubscriber.prototype.notifyNext = function notifyNext(outerValue, innerValue, outerIndex, innerIndex) {\n      var resultSelector = this.resultSelector;\n      var destination = this.destination;\n      if (resultSelector) {\n        var result = _utilTryCatch2['default'](resultSelector)(outerValue, innerValue, outerIndex, innerIndex);\n        if (result === _utilErrorObject.errorObject) {\n          destination.error(_utilErrorObject.errorObject.e);\n        } else {\n          destination.next(result);\n        }\n      } else {\n        destination.next(innerValue);\n      }\n    };\n    MergeMapToSubscriber.prototype.notifyError = function notifyError(err) {\n      this.destination.error(err);\n    };\n    MergeMapToSubscriber.prototype.notifyComplete = function notifyComplete(innerSub) {\n      var buffer = this.buffer;\n      this.remove(innerSub);\n      this.active--;\n      if (buffer.length > 0) {\n        this._next(buffer.shift());\n      } else if (this.active === 0 && this.hasCompleted) {\n        this.destination.complete();\n      }\n    };\n    return MergeMapToSubscriber;\n  })(_OuterSubscriber3['default']);\n  exports.MergeMapToSubscriber = MergeMapToSubscriber;\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"@reactivex/rxjs/dist/cjs/util/bindCallback\", [], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  'use strict';\n  exports.__esModule = true;\n  exports['default'] = bindCallback;\n  function bindCallback(func, thisArg, argCount) {\n    if (typeof thisArg === 'undefined') {\n      return func;\n    }\n    switch (argCount) {\n      case 0:\n        return function() {\n          return func.call(thisArg);\n        };\n      case 1:\n        return function(arg) {\n          return func.call(thisArg, arg);\n        };\n      case 2:\n        return function(value, index) {\n          return func.call(thisArg, value, index);\n        };\n      case 3:\n        return function(value, index, collection) {\n          return func.call(thisArg, value, index, collection);\n        };\n    }\n    return function() {\n      return func.apply(thisArg, arguments);\n    };\n  }\n  ;\n  module.exports = exports['default'];\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"@reactivex/rxjs/dist/cjs/operators/dematerialize\", [\"@reactivex/rxjs/dist/cjs/Subscriber\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  'use strict';\n  exports.__esModule = true;\n  exports['default'] = dematerialize;\n  function _interopRequireDefault(obj) {\n    return obj && obj.__esModule ? obj : {'default': obj};\n  }\n  function _inherits(subClass, superClass) {\n    if (typeof superClass !== 'function' && superClass !== null) {\n      throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass);\n    }\n    subClass.prototype = Object.create(superClass && superClass.prototype, {constructor: {\n        value: subClass,\n        enumerable: false,\n        writable: true,\n        configurable: true\n      }});\n    if (superClass)\n      Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass;\n  }\n  function _classCallCheck(instance, Constructor) {\n    if (!(instance instanceof Constructor)) {\n      throw new TypeError('Cannot call a class as a function');\n    }\n  }\n  var _Subscriber2 = require(\"@reactivex/rxjs/dist/cjs/Subscriber\");\n  var _Subscriber3 = _interopRequireDefault(_Subscriber2);\n  function dematerialize() {\n    return this.lift(new DeMaterializeOperator());\n  }\n  var DeMaterializeOperator = (function() {\n    function DeMaterializeOperator() {\n      _classCallCheck(this, DeMaterializeOperator);\n    }\n    DeMaterializeOperator.prototype.call = function call(subscriber) {\n      return new DeMaterializeSubscriber(subscriber);\n    };\n    return DeMaterializeOperator;\n  })();\n  var DeMaterializeSubscriber = (function(_Subscriber) {\n    _inherits(DeMaterializeSubscriber, _Subscriber);\n    function DeMaterializeSubscriber(destination) {\n      _classCallCheck(this, DeMaterializeSubscriber);\n      _Subscriber.call(this, destination);\n    }\n    DeMaterializeSubscriber.prototype._next = function _next(value) {\n      value.observe(this.destination);\n    };\n    return DeMaterializeSubscriber;\n  })(_Subscriber3['default']);\n  module.exports = exports['default'];\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"@reactivex/rxjs/dist/cjs/operators/debounce\", [\"@reactivex/rxjs/dist/cjs/observables/PromiseObservable\", \"@reactivex/rxjs/dist/cjs/Subscriber\", \"@reactivex/rxjs/dist/cjs/util/tryCatch\", \"@reactivex/rxjs/dist/cjs/util/errorObject\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  'use strict';\n  exports.__esModule = true;\n  var _createClass = (function() {\n    function defineProperties(target, props) {\n      for (var i = 0; i < props.length; i++) {\n        var descriptor = props[i];\n        descriptor.enumerable = descriptor.enumerable || false;\n        descriptor.configurable = true;\n        if ('value' in descriptor)\n          descriptor.writable = true;\n        Object.defineProperty(target, descriptor.key, descriptor);\n      }\n    }\n    return function(Constructor, protoProps, staticProps) {\n      if (protoProps)\n        defineProperties(Constructor.prototype, protoProps);\n      if (staticProps)\n        defineProperties(Constructor, staticProps);\n      return Constructor;\n    };\n  })();\n  exports['default'] = debounce;\n  function _interopRequireDefault(obj) {\n    return obj && obj.__esModule ? obj : {'default': obj};\n  }\n  function _inherits(subClass, superClass) {\n    if (typeof superClass !== 'function' && superClass !== null) {\n      throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass);\n    }\n    subClass.prototype = Object.create(superClass && superClass.prototype, {constructor: {\n        value: subClass,\n        enumerable: false,\n        writable: true,\n        configurable: true\n      }});\n    if (superClass)\n      Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass;\n  }\n  function _classCallCheck(instance, Constructor) {\n    if (!(instance instanceof Constructor)) {\n      throw new TypeError('Cannot call a class as a function');\n    }\n  }\n  var _observablesPromiseObservable = require(\"@reactivex/rxjs/dist/cjs/observables/PromiseObservable\");\n  var _observablesPromiseObservable2 = _interopRequireDefault(_observablesPromiseObservable);\n  var _Subscriber3 = require(\"@reactivex/rxjs/dist/cjs/Subscriber\");\n  var _Subscriber4 = _interopRequireDefault(_Subscriber3);\n  var _utilTryCatch = require(\"@reactivex/rxjs/dist/cjs/util/tryCatch\");\n  var _utilTryCatch2 = _interopRequireDefault(_utilTryCatch);\n  var _utilErrorObject = require(\"@reactivex/rxjs/dist/cjs/util/errorObject\");\n  function debounce(durationSelector) {\n    return this.lift(new DebounceOperator(durationSelector));\n  }\n  var DebounceOperator = (function() {\n    function DebounceOperator(durationSelector) {\n      _classCallCheck(this, DebounceOperator);\n      this.durationSelector = durationSelector;\n    }\n    DebounceOperator.prototype.call = function call(observer) {\n      return new DebounceSubscriber(observer, this.durationSelector);\n    };\n    return DebounceOperator;\n  })();\n  var DebounceSubscriber = (function(_Subscriber) {\n    _inherits(DebounceSubscriber, _Subscriber);\n    function DebounceSubscriber(destination, durationSelector) {\n      _classCallCheck(this, DebounceSubscriber);\n      _Subscriber.call(this, destination);\n      this.durationSelector = durationSelector;\n      this.debouncedSubscription = null;\n      this.lastValue = null;\n      this._index = 0;\n    }\n    DebounceSubscriber.prototype._next = function _next(value) {\n      var destination = this.destination;\n      var currentIndex = ++this._index;\n      var debounce = _utilTryCatch2['default'](this.durationSelector)(value);\n      if (debounce === _utilErrorObject.errorObject) {\n        destination.error(_utilErrorObject.errorObject.e);\n      } else {\n        if (typeof debounce.subscribe !== 'function' && typeof debounce.then === 'function') {\n          debounce = _observablesPromiseObservable2['default'].create(debounce);\n        }\n        this.lastValue = value;\n        this.add(this.debouncedSubscription = debounce._subscribe(new DurationSelectorSubscriber(this, currentIndex)));\n      }\n    };\n    DebounceSubscriber.prototype._complete = function _complete() {\n      this.debouncedNext();\n      this.destination.complete();\n    };\n    DebounceSubscriber.prototype.debouncedNext = function debouncedNext() {\n      this.clearDebounce();\n      if (this.lastValue != null) {\n        this.destination.next(this.lastValue);\n        this.lastValue = null;\n      }\n    };\n    DebounceSubscriber.prototype.clearDebounce = function clearDebounce() {\n      var debouncedSubscription = this.debouncedSubscription;\n      if (debouncedSubscription !== null) {\n        this.remove(debouncedSubscription);\n        this.debouncedSubscription = null;\n      }\n    };\n    _createClass(DebounceSubscriber, [{\n      key: 'index',\n      get: function get() {\n        return this._index;\n      }\n    }]);\n    return DebounceSubscriber;\n  })(_Subscriber4['default']);\n  var DurationSelectorSubscriber = (function(_Subscriber2) {\n    _inherits(DurationSelectorSubscriber, _Subscriber2);\n    function DurationSelectorSubscriber(parent, currentIndex) {\n      _classCallCheck(this, DurationSelectorSubscriber);\n      _Subscriber2.call(this, null);\n      this.parent = parent;\n      this.currentIndex = currentIndex;\n    }\n    DurationSelectorSubscriber.prototype.debounceNext = function debounceNext() {\n      var parent = this.parent;\n      if (this.currentIndex === parent.index) {\n        parent.debouncedNext();\n        if (!this.isUnsubscribed) {\n          this.unsubscribe();\n        }\n      }\n    };\n    DurationSelectorSubscriber.prototype._next = function _next(unused) {\n      this.debounceNext();\n    };\n    DurationSelectorSubscriber.prototype._error = function _error(err) {\n      this.parent.error(err);\n    };\n    DurationSelectorSubscriber.prototype._complete = function _complete() {\n      this.debounceNext();\n    };\n    return DurationSelectorSubscriber;\n  })(_Subscriber4['default']);\n  module.exports = exports['default'];\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"@reactivex/rxjs/dist/cjs/operators/debounceTime\", [\"@reactivex/rxjs/dist/cjs/Subscriber\", \"@reactivex/rxjs/dist/cjs/schedulers/nextTick\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  'use strict';\n  exports.__esModule = true;\n  exports['default'] = debounceTime;\n  function _interopRequireDefault(obj) {\n    return obj && obj.__esModule ? obj : {'default': obj};\n  }\n  function _inherits(subClass, superClass) {\n    if (typeof superClass !== 'function' && superClass !== null) {\n      throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass);\n    }\n    subClass.prototype = Object.create(superClass && superClass.prototype, {constructor: {\n        value: subClass,\n        enumerable: false,\n        writable: true,\n        configurable: true\n      }});\n    if (superClass)\n      Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass;\n  }\n  function _classCallCheck(instance, Constructor) {\n    if (!(instance instanceof Constructor)) {\n      throw new TypeError('Cannot call a class as a function');\n    }\n  }\n  var _Subscriber2 = require(\"@reactivex/rxjs/dist/cjs/Subscriber\");\n  var _Subscriber3 = _interopRequireDefault(_Subscriber2);\n  var _schedulersNextTick = require(\"@reactivex/rxjs/dist/cjs/schedulers/nextTick\");\n  var _schedulersNextTick2 = _interopRequireDefault(_schedulersNextTick);\n  function debounceTime(dueTime) {\n    var scheduler = arguments.length <= 1 || arguments[1] === undefined ? _schedulersNextTick2['default'] : arguments[1];\n    return this.lift(new DebounceTimeOperator(dueTime, scheduler));\n  }\n  var DebounceTimeOperator = (function() {\n    function DebounceTimeOperator(dueTime, scheduler) {\n      _classCallCheck(this, DebounceTimeOperator);\n      this.dueTime = dueTime;\n      this.scheduler = scheduler;\n    }\n    DebounceTimeOperator.prototype.call = function call(subscriber) {\n      return new DebounceTimeSubscriber(subscriber, this.dueTime, this.scheduler);\n    };\n    return DebounceTimeOperator;\n  })();\n  var DebounceTimeSubscriber = (function(_Subscriber) {\n    _inherits(DebounceTimeSubscriber, _Subscriber);\n    function DebounceTimeSubscriber(destination, dueTime, scheduler) {\n      _classCallCheck(this, DebounceTimeSubscriber);\n      _Subscriber.call(this, destination);\n      this.dueTime = dueTime;\n      this.scheduler = scheduler;\n      this.debouncedSubscription = null;\n      this.lastValue = null;\n    }\n    DebounceTimeSubscriber.prototype._next = function _next(value) {\n      this.clearDebounce();\n      this.lastValue = value;\n      this.add(this.debouncedSubscription = this.scheduler.schedule(dispatchNext, this.dueTime, this));\n    };\n    DebounceTimeSubscriber.prototype._complete = function _complete() {\n      this.debouncedNext();\n      this.destination.complete();\n    };\n    DebounceTimeSubscriber.prototype.debouncedNext = function debouncedNext() {\n      this.clearDebounce();\n      if (this.lastValue != null) {\n        this.destination.next(this.lastValue);\n        this.lastValue = null;\n      }\n    };\n    DebounceTimeSubscriber.prototype.clearDebounce = function clearDebounce() {\n      var debouncedSubscription = this.debouncedSubscription;\n      if (debouncedSubscription !== null) {\n        this.remove(debouncedSubscription);\n        debouncedSubscription.unsubscribe();\n        this.debouncedSubscription = null;\n      }\n    };\n    return DebounceTimeSubscriber;\n  })(_Subscriber3['default']);\n  function dispatchNext(subscriber) {\n    subscriber.debouncedNext();\n  }\n  module.exports = exports['default'];\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"@reactivex/rxjs/dist/cjs/operators/defaultIfEmpty\", [\"@reactivex/rxjs/dist/cjs/Subscriber\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  'use strict';\n  exports.__esModule = true;\n  exports['default'] = defaultIfEmpty;\n  function _interopRequireDefault(obj) {\n    return obj && obj.__esModule ? obj : {'default': obj};\n  }\n  function _inherits(subClass, superClass) {\n    if (typeof superClass !== 'function' && superClass !== null) {\n      throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass);\n    }\n    subClass.prototype = Object.create(superClass && superClass.prototype, {constructor: {\n        value: subClass,\n        enumerable: false,\n        writable: true,\n        configurable: true\n      }});\n    if (superClass)\n      Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass;\n  }\n  function _classCallCheck(instance, Constructor) {\n    if (!(instance instanceof Constructor)) {\n      throw new TypeError('Cannot call a class as a function');\n    }\n  }\n  var _Subscriber2 = require(\"@reactivex/rxjs/dist/cjs/Subscriber\");\n  var _Subscriber3 = _interopRequireDefault(_Subscriber2);\n  function defaultIfEmpty() {\n    var defaultValue = arguments.length <= 0 || arguments[0] === undefined ? null : arguments[0];\n    return this.lift(new DefaultIfEmptyOperator(defaultValue));\n  }\n  var DefaultIfEmptyOperator = (function() {\n    function DefaultIfEmptyOperator(defaultValue) {\n      _classCallCheck(this, DefaultIfEmptyOperator);\n      this.defaultValue = defaultValue;\n    }\n    DefaultIfEmptyOperator.prototype.call = function call(subscriber) {\n      return new DefaultIfEmptySubscriber(subscriber, this.defaultValue);\n    };\n    return DefaultIfEmptyOperator;\n  })();\n  var DefaultIfEmptySubscriber = (function(_Subscriber) {\n    _inherits(DefaultIfEmptySubscriber, _Subscriber);\n    function DefaultIfEmptySubscriber(destination, defaultValue) {\n      _classCallCheck(this, DefaultIfEmptySubscriber);\n      _Subscriber.call(this, destination);\n      this.defaultValue = defaultValue;\n      this.isEmpty = true;\n    }\n    DefaultIfEmptySubscriber.prototype._next = function _next(x) {\n      this.isEmpty = false;\n      this.destination.next(x);\n    };\n    DefaultIfEmptySubscriber.prototype._complete = function _complete() {\n      if (this.isEmpty) {\n        this.destination.next(this.defaultValue);\n      }\n      this.destination.complete();\n    };\n    return DefaultIfEmptySubscriber;\n  })(_Subscriber3['default']);\n  module.exports = exports['default'];\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"@reactivex/rxjs/dist/cjs/util/isDate\", [], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  \"use strict\";\n  exports.__esModule = true;\n  exports[\"default\"] = isDate;\n  function isDate(value) {\n    return value instanceof Date && !isNaN(+value);\n  }\n  module.exports = exports[\"default\"];\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"@reactivex/rxjs/dist/cjs/operators/distinctUntilChanged\", [\"@reactivex/rxjs/dist/cjs/Subscriber\", \"@reactivex/rxjs/dist/cjs/util/tryCatch\", \"@reactivex/rxjs/dist/cjs/util/errorObject\", \"@reactivex/rxjs/dist/cjs/util/bindCallback\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  'use strict';\n  exports.__esModule = true;\n  exports['default'] = distinctUntilChanged;\n  function _interopRequireDefault(obj) {\n    return obj && obj.__esModule ? obj : {'default': obj};\n  }\n  function _inherits(subClass, superClass) {\n    if (typeof superClass !== 'function' && superClass !== null) {\n      throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass);\n    }\n    subClass.prototype = Object.create(superClass && superClass.prototype, {constructor: {\n        value: subClass,\n        enumerable: false,\n        writable: true,\n        configurable: true\n      }});\n    if (superClass)\n      Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass;\n  }\n  function _classCallCheck(instance, Constructor) {\n    if (!(instance instanceof Constructor)) {\n      throw new TypeError('Cannot call a class as a function');\n    }\n  }\n  var _Subscriber2 = require(\"@reactivex/rxjs/dist/cjs/Subscriber\");\n  var _Subscriber3 = _interopRequireDefault(_Subscriber2);\n  var _utilTryCatch = require(\"@reactivex/rxjs/dist/cjs/util/tryCatch\");\n  var _utilTryCatch2 = _interopRequireDefault(_utilTryCatch);\n  var _utilErrorObject = require(\"@reactivex/rxjs/dist/cjs/util/errorObject\");\n  var _utilBindCallback = require(\"@reactivex/rxjs/dist/cjs/util/bindCallback\");\n  var _utilBindCallback2 = _interopRequireDefault(_utilBindCallback);\n  function distinctUntilChanged(compare, thisArg) {\n    return this.lift(new DistinctUntilChangedOperator(thisArg ? _utilBindCallback2['default'](compare, thisArg, 2) : compare));\n  }\n  var DistinctUntilChangedOperator = (function() {\n    function DistinctUntilChangedOperator(compare) {\n      _classCallCheck(this, DistinctUntilChangedOperator);\n      this.compare = compare;\n    }\n    DistinctUntilChangedOperator.prototype.call = function call(subscriber) {\n      return new DistinctUntilChangedSubscriber(subscriber, this.compare);\n    };\n    return DistinctUntilChangedOperator;\n  })();\n  var DistinctUntilChangedSubscriber = (function(_Subscriber) {\n    _inherits(DistinctUntilChangedSubscriber, _Subscriber);\n    function DistinctUntilChangedSubscriber(destination, compare) {\n      _classCallCheck(this, DistinctUntilChangedSubscriber);\n      _Subscriber.call(this, destination);\n      this.hasValue = false;\n      if (typeof compare === 'function') {\n        this.compare = compare;\n      }\n    }\n    DistinctUntilChangedSubscriber.prototype.compare = function compare(x, y) {\n      return x === y;\n    };\n    DistinctUntilChangedSubscriber.prototype._next = function _next(x) {\n      var result = false;\n      if (this.hasValue) {\n        result = _utilTryCatch2['default'](this.compare)(this.value, x);\n        if (result === _utilErrorObject.errorObject) {\n          this.destination.error(_utilErrorObject.errorObject.e);\n          return ;\n        }\n      } else {\n        this.hasValue = true;\n      }\n      if (Boolean(result) === false) {\n        this.value = x;\n        this.destination.next(x);\n      }\n    };\n    return DistinctUntilChangedSubscriber;\n  })(_Subscriber3['default']);\n  module.exports = exports['default'];\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"@reactivex/rxjs/dist/cjs/operators/do\", [\"@reactivex/rxjs/dist/cjs/Subscriber\", \"@reactivex/rxjs/dist/cjs/util/noop\", \"@reactivex/rxjs/dist/cjs/util/tryCatch\", \"@reactivex/rxjs/dist/cjs/util/errorObject\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  'use strict';\n  exports.__esModule = true;\n  exports['default'] = _do;\n  function _interopRequireDefault(obj) {\n    return obj && obj.__esModule ? obj : {'default': obj};\n  }\n  function _inherits(subClass, superClass) {\n    if (typeof superClass !== 'function' && superClass !== null) {\n      throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass);\n    }\n    subClass.prototype = Object.create(superClass && superClass.prototype, {constructor: {\n        value: subClass,\n        enumerable: false,\n        writable: true,\n        configurable: true\n      }});\n    if (superClass)\n      Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass;\n  }\n  function _classCallCheck(instance, Constructor) {\n    if (!(instance instanceof Constructor)) {\n      throw new TypeError('Cannot call a class as a function');\n    }\n  }\n  var _Subscriber2 = require(\"@reactivex/rxjs/dist/cjs/Subscriber\");\n  var _Subscriber3 = _interopRequireDefault(_Subscriber2);\n  var _utilNoop = require(\"@reactivex/rxjs/dist/cjs/util/noop\");\n  var _utilNoop2 = _interopRequireDefault(_utilNoop);\n  var _utilTryCatch = require(\"@reactivex/rxjs/dist/cjs/util/tryCatch\");\n  var _utilTryCatch2 = _interopRequireDefault(_utilTryCatch);\n  var _utilErrorObject = require(\"@reactivex/rxjs/dist/cjs/util/errorObject\");\n  function _do(nextOrObserver, error, complete) {\n    var next = undefined;\n    if (nextOrObserver && typeof nextOrObserver === 'object') {\n      next = nextOrObserver.next;\n      error = nextOrObserver.error;\n      complete = nextOrObserver.complete;\n    } else {\n      next = nextOrObserver;\n    }\n    return this.lift(new DoOperator(next || _utilNoop2['default'], error || _utilNoop2['default'], complete || _utilNoop2['default']));\n  }\n  var DoOperator = (function() {\n    function DoOperator(next, error, complete) {\n      _classCallCheck(this, DoOperator);\n      this.next = next;\n      this.error = error;\n      this.complete = complete;\n    }\n    DoOperator.prototype.call = function call(subscriber) {\n      return new DoSubscriber(subscriber, this.next, this.error, this.complete);\n    };\n    return DoOperator;\n  })();\n  var DoSubscriber = (function(_Subscriber) {\n    _inherits(DoSubscriber, _Subscriber);\n    function DoSubscriber(destination, next, error, complete) {\n      _classCallCheck(this, DoSubscriber);\n      _Subscriber.call(this, destination);\n      this.__next = next;\n      this.__error = error;\n      this.__complete = complete;\n    }\n    DoSubscriber.prototype._next = function _next(x) {\n      var result = _utilTryCatch2['default'](this.__next)(x);\n      if (result === _utilErrorObject.errorObject) {\n        this.destination.error(_utilErrorObject.errorObject.e);\n      } else {\n        this.destination.next(x);\n      }\n    };\n    DoSubscriber.prototype._error = function _error(e) {\n      var result = _utilTryCatch2['default'](this.__error)(e);\n      if (result === _utilErrorObject.errorObject) {\n        this.destination.error(_utilErrorObject.errorObject.e);\n      } else {\n        this.destination.error(e);\n      }\n    };\n    DoSubscriber.prototype._complete = function _complete() {\n      var result = _utilTryCatch2['default'](this.__complete)();\n      if (result === _utilErrorObject.errorObject) {\n        this.destination.error(_utilErrorObject.errorObject.e);\n      } else {\n        this.destination.complete();\n      }\n    };\n    return DoSubscriber;\n  })(_Subscriber3['default']);\n  module.exports = exports['default'];\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"@reactivex/rxjs/dist/cjs/operators/expand-support\", [\"@reactivex/rxjs/dist/cjs/util/tryCatch\", \"@reactivex/rxjs/dist/cjs/util/errorObject\", \"@reactivex/rxjs/dist/cjs/OuterSubscriber\", \"@reactivex/rxjs/dist/cjs/util/subscribeToResult\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  'use strict';\n  exports.__esModule = true;\n  function _interopRequireDefault(obj) {\n    return obj && obj.__esModule ? obj : {'default': obj};\n  }\n  function _inherits(subClass, superClass) {\n    if (typeof superClass !== 'function' && superClass !== null) {\n      throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass);\n    }\n    subClass.prototype = Object.create(superClass && superClass.prototype, {constructor: {\n        value: subClass,\n        enumerable: false,\n        writable: true,\n        configurable: true\n      }});\n    if (superClass)\n      Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass;\n  }\n  function _classCallCheck(instance, Constructor) {\n    if (!(instance instanceof Constructor)) {\n      throw new TypeError('Cannot call a class as a function');\n    }\n  }\n  var _utilTryCatch = require(\"@reactivex/rxjs/dist/cjs/util/tryCatch\");\n  var _utilTryCatch2 = _interopRequireDefault(_utilTryCatch);\n  var _utilErrorObject = require(\"@reactivex/rxjs/dist/cjs/util/errorObject\");\n  var _OuterSubscriber2 = require(\"@reactivex/rxjs/dist/cjs/OuterSubscriber\");\n  var _OuterSubscriber3 = _interopRequireDefault(_OuterSubscriber2);\n  var _utilSubscribeToResult = require(\"@reactivex/rxjs/dist/cjs/util/subscribeToResult\");\n  var _utilSubscribeToResult2 = _interopRequireDefault(_utilSubscribeToResult);\n  var ExpandOperator = (function() {\n    function ExpandOperator(project) {\n      var concurrent = arguments.length <= 1 || arguments[1] === undefined ? Number.POSITIVE_INFINITY : arguments[1];\n      _classCallCheck(this, ExpandOperator);\n      this.project = project;\n      this.concurrent = concurrent;\n    }\n    ExpandOperator.prototype.call = function call(subscriber) {\n      return new ExpandSubscriber(subscriber, this.project, this.concurrent);\n    };\n    return ExpandOperator;\n  })();\n  exports.ExpandOperator = ExpandOperator;\n  var ExpandSubscriber = (function(_OuterSubscriber) {\n    _inherits(ExpandSubscriber, _OuterSubscriber);\n    function ExpandSubscriber(destination, project) {\n      var concurrent = arguments.length <= 2 || arguments[2] === undefined ? Number.POSITIVE_INFINITY : arguments[2];\n      _classCallCheck(this, ExpandSubscriber);\n      _OuterSubscriber.call(this, destination);\n      this.project = project;\n      this.concurrent = concurrent;\n      this.index = 0;\n      this.active = 0;\n      this.hasCompleted = false;\n      if (concurrent < Number.POSITIVE_INFINITY) {\n        this.buffer = [];\n      }\n    }\n    ExpandSubscriber.prototype._next = function _next(value) {\n      var index = this.index++;\n      this.destination.next(value);\n      if (this.active < this.concurrent) {\n        var result = _utilTryCatch2['default'](this.project)(value, index);\n        if (result === _utilErrorObject.errorObject) {\n          this.destination.error(result.e);\n        } else {\n          if (result._isScalar) {\n            this._next(result.value);\n          } else {\n            this.active++;\n            this.add(_utilSubscribeToResult2['default'](this, result, value, index));\n          }\n        }\n      } else {\n        this.buffer.push(value);\n      }\n    };\n    ExpandSubscriber.prototype._complete = function _complete() {\n      this.hasCompleted = true;\n      if (this.hasCompleted && this.active === 0) {\n        this.destination.complete();\n      }\n    };\n    ExpandSubscriber.prototype.notifyComplete = function notifyComplete(innerSub) {\n      var buffer = this.buffer;\n      this.remove(innerSub);\n      this.active--;\n      if (buffer && buffer.length > 0) {\n        this._next(buffer.shift());\n      }\n      if (this.hasCompleted && this.active === 0) {\n        this.destination.complete();\n      }\n    };\n    ExpandSubscriber.prototype.notifyNext = function notifyNext(outerValue, innerValue, outerIndex, innerIndex) {\n      this._next(innerValue);\n    };\n    return ExpandSubscriber;\n  })(_OuterSubscriber3['default']);\n  exports.ExpandSubscriber = ExpandSubscriber;\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"@reactivex/rxjs/dist/cjs/operators/filter\", [\"@reactivex/rxjs/dist/cjs/Subscriber\", \"@reactivex/rxjs/dist/cjs/util/tryCatch\", \"@reactivex/rxjs/dist/cjs/util/errorObject\", \"@reactivex/rxjs/dist/cjs/util/bindCallback\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  'use strict';\n  exports.__esModule = true;\n  exports['default'] = filter;\n  function _interopRequireDefault(obj) {\n    return obj && obj.__esModule ? obj : {'default': obj};\n  }\n  function _inherits(subClass, superClass) {\n    if (typeof superClass !== 'function' && superClass !== null) {\n      throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass);\n    }\n    subClass.prototype = Object.create(superClass && superClass.prototype, {constructor: {\n        value: subClass,\n        enumerable: false,\n        writable: true,\n        configurable: true\n      }});\n    if (superClass)\n      Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass;\n  }\n  function _classCallCheck(instance, Constructor) {\n    if (!(instance instanceof Constructor)) {\n      throw new TypeError('Cannot call a class as a function');\n    }\n  }\n  var _Subscriber2 = require(\"@reactivex/rxjs/dist/cjs/Subscriber\");\n  var _Subscriber3 = _interopRequireDefault(_Subscriber2);\n  var _utilTryCatch = require(\"@reactivex/rxjs/dist/cjs/util/tryCatch\");\n  var _utilTryCatch2 = _interopRequireDefault(_utilTryCatch);\n  var _utilErrorObject = require(\"@reactivex/rxjs/dist/cjs/util/errorObject\");\n  var _utilBindCallback = require(\"@reactivex/rxjs/dist/cjs/util/bindCallback\");\n  var _utilBindCallback2 = _interopRequireDefault(_utilBindCallback);\n  function filter(select, thisArg) {\n    return this.lift(new FilterOperator(select, thisArg));\n  }\n  var FilterOperator = (function() {\n    function FilterOperator(select, thisArg) {\n      _classCallCheck(this, FilterOperator);\n      this.select = _utilBindCallback2['default'](select, thisArg, 2);\n    }\n    FilterOperator.prototype.call = function call(subscriber) {\n      return new FilterSubscriber(subscriber, this.select);\n    };\n    return FilterOperator;\n  })();\n  var FilterSubscriber = (function(_Subscriber) {\n    _inherits(FilterSubscriber, _Subscriber);\n    function FilterSubscriber(destination, select) {\n      _classCallCheck(this, FilterSubscriber);\n      _Subscriber.call(this, destination);\n      this.count = 0;\n      this.select = select;\n    }\n    FilterSubscriber.prototype._next = function _next(x) {\n      var result = _utilTryCatch2['default'](this.select)(x, this.count++);\n      if (result === _utilErrorObject.errorObject) {\n        this.destination.error(_utilErrorObject.errorObject.e);\n      } else if (Boolean(result)) {\n        this.destination.next(x);\n      }\n    };\n    return FilterSubscriber;\n  })(_Subscriber3['default']);\n  module.exports = exports['default'];\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"@reactivex/rxjs/dist/cjs/operators/finally\", [\"@reactivex/rxjs/dist/cjs/Subscriber\", \"@reactivex/rxjs/dist/cjs/Subscription\", \"@reactivex/rxjs/dist/cjs/util/bindCallback\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  'use strict';\n  exports.__esModule = true;\n  exports['default'] = _finally;\n  function _interopRequireDefault(obj) {\n    return obj && obj.__esModule ? obj : {'default': obj};\n  }\n  function _inherits(subClass, superClass) {\n    if (typeof superClass !== 'function' && superClass !== null) {\n      throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass);\n    }\n    subClass.prototype = Object.create(superClass && superClass.prototype, {constructor: {\n        value: subClass,\n        enumerable: false,\n        writable: true,\n        configurable: true\n      }});\n    if (superClass)\n      Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass;\n  }\n  function _classCallCheck(instance, Constructor) {\n    if (!(instance instanceof Constructor)) {\n      throw new TypeError('Cannot call a class as a function');\n    }\n  }\n  var _Subscriber2 = require(\"@reactivex/rxjs/dist/cjs/Subscriber\");\n  var _Subscriber3 = _interopRequireDefault(_Subscriber2);\n  var _Subscription = require(\"@reactivex/rxjs/dist/cjs/Subscription\");\n  var _Subscription2 = _interopRequireDefault(_Subscription);\n  var _utilBindCallback = require(\"@reactivex/rxjs/dist/cjs/util/bindCallback\");\n  var _utilBindCallback2 = _interopRequireDefault(_utilBindCallback);\n  function _finally(finallySelector, thisArg) {\n    return this.lift(new FinallyOperator(thisArg ? _utilBindCallback2['default'](finallySelector, thisArg, 2) : finallySelector));\n  }\n  var FinallyOperator = (function() {\n    function FinallyOperator(finallySelector) {\n      _classCallCheck(this, FinallyOperator);\n      this.finallySelector = finallySelector;\n    }\n    FinallyOperator.prototype.call = function call(subscriber) {\n      return new FinallySubscriber(subscriber, this.finallySelector);\n    };\n    return FinallyOperator;\n  })();\n  var FinallySubscriber = (function(_Subscriber) {\n    _inherits(FinallySubscriber, _Subscriber);\n    function FinallySubscriber(destination, finallySelector) {\n      _classCallCheck(this, FinallySubscriber);\n      _Subscriber.call(this, destination);\n      this.add(new _Subscription2['default'](finallySelector));\n    }\n    return FinallySubscriber;\n  })(_Subscriber3['default']);\n  module.exports = exports['default'];\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"@reactivex/rxjs/dist/cjs/util/EmptyError\", [], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  'use strict';\n  exports.__esModule = true;\n  function _classCallCheck(instance, Constructor) {\n    if (!(instance instanceof Constructor)) {\n      throw new TypeError('Cannot call a class as a function');\n    }\n  }\n  var EmptyError = function EmptyError() {\n    _classCallCheck(this, EmptyError);\n    this.name = 'EmptyError';\n    this.message = 'no elements in sequence';\n  };\n  ;\n  exports['default'] = EmptyError;\n  module.exports = exports['default'];\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"@reactivex/rxjs/dist/cjs/subjects/SubjectSubscription\", [\"@reactivex/rxjs/dist/cjs/Subscription\", \"@reactivex/rxjs/dist/cjs/Subscriber\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  'use strict';\n  exports.__esModule = true;\n  function _interopRequireDefault(obj) {\n    return obj && obj.__esModule ? obj : {'default': obj};\n  }\n  function _classCallCheck(instance, Constructor) {\n    if (!(instance instanceof Constructor)) {\n      throw new TypeError('Cannot call a class as a function');\n    }\n  }\n  function _inherits(subClass, superClass) {\n    if (typeof superClass !== 'function' && superClass !== null) {\n      throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass);\n    }\n    subClass.prototype = Object.create(superClass && superClass.prototype, {constructor: {\n        value: subClass,\n        enumerable: false,\n        writable: true,\n        configurable: true\n      }});\n    if (superClass)\n      Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass;\n  }\n  var _Subscription2 = require(\"@reactivex/rxjs/dist/cjs/Subscription\");\n  var _Subscription3 = _interopRequireDefault(_Subscription2);\n  var _Subscriber = require(\"@reactivex/rxjs/dist/cjs/Subscriber\");\n  var _Subscriber2 = _interopRequireDefault(_Subscriber);\n  var SubjectSubscription = (function(_Subscription) {\n    _inherits(SubjectSubscription, _Subscription);\n    function SubjectSubscription(subject, observer) {\n      _classCallCheck(this, SubjectSubscription);\n      _Subscription.call(this);\n      this.subject = subject;\n      this.observer = observer;\n      this.isUnsubscribed = false;\n    }\n    SubjectSubscription.prototype.unsubscribe = function unsubscribe() {\n      if (this.isUnsubscribed) {\n        return ;\n      }\n      this.isUnsubscribed = true;\n      var subject = this.subject;\n      var observers = subject.observers;\n      this.subject = void 0;\n      if (!observers || observers.length === 0 || subject.isUnsubscribed) {\n        return ;\n      }\n      if (this.observer instanceof _Subscriber2['default']) {\n        this.observer.unsubscribe();\n      }\n      var subscriberIndex = observers.indexOf(this.observer);\n      if (subscriberIndex !== -1) {\n        observers.splice(subscriberIndex, 1);\n      }\n    };\n    return SubjectSubscription;\n  })(_Subscription3['default']);\n  exports['default'] = SubjectSubscription;\n  module.exports = exports['default'];\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"@reactivex/rxjs/dist/cjs/util/Map\", [\"@reactivex/rxjs/dist/cjs/util/root\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  'use strict';\n  exports.__esModule = true;\n  var _root = require(\"@reactivex/rxjs/dist/cjs/util/root\");\n  exports['default'] = _root.root.Map || (function() {\n    function Map() {\n      this.size = 0;\n      this._values = [];\n      this._keys = [];\n    }\n    Map.prototype['delete'] = function(key) {\n      var i = this._keys.indexOf(key);\n      if (i === -1) {\n        return false;\n      }\n      this._values.splice(i, 1);\n      this._keys.splice(i, 1);\n      this.size--;\n      return true;\n    };\n    Map.prototype.get = function(key) {\n      var i = this._keys.indexOf(key);\n      return i === -1 ? undefined : this._values[i];\n    };\n    Map.prototype.set = function(key, value) {\n      var i = this._keys.indexOf(key);\n      if (i === -1) {\n        this._keys.push(key);\n        this._values.push(value);\n        this.size++;\n      } else {\n        this._values[i] = value;\n      }\n      return this;\n    };\n    Map.prototype.forEach = function(cb, thisArg) {\n      for (var i = 0; i < this.size; i++) {\n        cb.call(thisArg, this._values[i], this._keys[i]);\n      }\n    };\n    return Map;\n  })();\n  module.exports = exports['default'];\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"@reactivex/rxjs/dist/cjs/util/FastMap\", [], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  \"use strict\";\n  exports.__esModule = true;\n  function _classCallCheck(instance, Constructor) {\n    if (!(instance instanceof Constructor)) {\n      throw new TypeError(\"Cannot call a class as a function\");\n    }\n  }\n  var FastMap = (function() {\n    function FastMap() {\n      _classCallCheck(this, FastMap);\n      this.size = 0;\n      this._values = {};\n    }\n    FastMap.prototype[\"delete\"] = function _delete(key) {\n      this._values[key] = null;\n      return true;\n    };\n    FastMap.prototype.set = function set(key, value) {\n      this._values[key] = value;\n      return this;\n    };\n    FastMap.prototype.get = function get(key) {\n      return this._values[key];\n    };\n    FastMap.prototype.forEach = function forEach(cb, thisArg) {\n      var values = this._values;\n      for (var key in values) {\n        if (values.hasOwnProperty(key) && values[key] !== null) {\n          cb.call(thisArg, values[key], key);\n        }\n      }\n    };\n    FastMap.prototype.clear = function clear() {\n      this._values = {};\n    };\n    return FastMap;\n  })();\n  exports[\"default\"] = FastMap;\n  module.exports = exports[\"default\"];\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"@reactivex/rxjs/dist/cjs/operators/groupBy-support\", [\"@reactivex/rxjs/dist/cjs/Subscription\", \"@reactivex/rxjs/dist/cjs/Observable\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  'use strict';\n  exports.__esModule = true;\n  function _interopRequireDefault(obj) {\n    return obj && obj.__esModule ? obj : {'default': obj};\n  }\n  function _classCallCheck(instance, Constructor) {\n    if (!(instance instanceof Constructor)) {\n      throw new TypeError('Cannot call a class as a function');\n    }\n  }\n  function _inherits(subClass, superClass) {\n    if (typeof superClass !== 'function' && superClass !== null) {\n      throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass);\n    }\n    subClass.prototype = Object.create(superClass && superClass.prototype, {constructor: {\n        value: subClass,\n        enumerable: false,\n        writable: true,\n        configurable: true\n      }});\n    if (superClass)\n      Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass;\n  }\n  var _Subscription3 = require(\"@reactivex/rxjs/dist/cjs/Subscription\");\n  var _Subscription4 = _interopRequireDefault(_Subscription3);\n  var _Observable2 = require(\"@reactivex/rxjs/dist/cjs/Observable\");\n  var _Observable3 = _interopRequireDefault(_Observable2);\n  var RefCountSubscription = (function(_Subscription) {\n    _inherits(RefCountSubscription, _Subscription);\n    function RefCountSubscription() {\n      _classCallCheck(this, RefCountSubscription);\n      _Subscription.call(this);\n      this.attemptedToUnsubscribePrimary = false;\n      this.count = 0;\n    }\n    RefCountSubscription.prototype.setPrimary = function setPrimary(subscription) {\n      this.primary = subscription;\n    };\n    RefCountSubscription.prototype.unsubscribe = function unsubscribe() {\n      if (!this.isUnsubscribed && !this.attemptedToUnsubscribePrimary) {\n        this.attemptedToUnsubscribePrimary = true;\n        if (this.count === 0) {\n          _Subscription.prototype.unsubscribe.call(this);\n          this.primary.unsubscribe();\n        }\n      }\n    };\n    return RefCountSubscription;\n  })(_Subscription4['default']);\n  exports.RefCountSubscription = RefCountSubscription;\n  var GroupedObservable = (function(_Observable) {\n    _inherits(GroupedObservable, _Observable);\n    function GroupedObservable(key, groupSubject, refCountSubscription) {\n      _classCallCheck(this, GroupedObservable);\n      _Observable.call(this);\n      this.key = key;\n      this.groupSubject = groupSubject;\n      this.refCountSubscription = refCountSubscription;\n    }\n    GroupedObservable.prototype._subscribe = function _subscribe(subscriber) {\n      var subscription = new _Subscription4['default']();\n      if (this.refCountSubscription && !this.refCountSubscription.isUnsubscribed) {\n        subscription.add(new InnerRefCountSubscription(this.refCountSubscription));\n      }\n      subscription.add(this.groupSubject.subscribe(subscriber));\n      return subscription;\n    };\n    return GroupedObservable;\n  })(_Observable3['default']);\n  exports.GroupedObservable = GroupedObservable;\n  var InnerRefCountSubscription = (function(_Subscription2) {\n    _inherits(InnerRefCountSubscription, _Subscription2);\n    function InnerRefCountSubscription(parent) {\n      _classCallCheck(this, InnerRefCountSubscription);\n      _Subscription2.call(this);\n      this.parent = parent;\n      parent.count++;\n    }\n    InnerRefCountSubscription.prototype.unsubscribe = function unsubscribe() {\n      if (!this.parent.isUnsubscribed && !this.isUnsubscribed) {\n        _Subscription2.prototype.unsubscribe.call(this);\n        this.parent.count--;\n        if (this.parent.count === 0 && this.parent.attemptedToUnsubscribePrimary) {\n          this.parent.unsubscribe();\n          this.parent.primary.unsubscribe();\n        }\n      }\n    };\n    return InnerRefCountSubscription;\n  })(_Subscription4['default']);\n  exports.InnerRefCountSubscription = InnerRefCountSubscription;\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"@reactivex/rxjs/dist/cjs/operators/ignoreElements\", [\"@reactivex/rxjs/dist/cjs/Subscriber\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  'use strict';\n  exports.__esModule = true;\n  exports['default'] = ignoreElements;\n  function _interopRequireDefault(obj) {\n    return obj && obj.__esModule ? obj : {'default': obj};\n  }\n  function _inherits(subClass, superClass) {\n    if (typeof superClass !== 'function' && superClass !== null) {\n      throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass);\n    }\n    subClass.prototype = Object.create(superClass && superClass.prototype, {constructor: {\n        value: subClass,\n        enumerable: false,\n        writable: true,\n        configurable: true\n      }});\n    if (superClass)\n      Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass;\n  }\n  function _classCallCheck(instance, Constructor) {\n    if (!(instance instanceof Constructor)) {\n      throw new TypeError('Cannot call a class as a function');\n    }\n  }\n  var _Subscriber2 = require(\"@reactivex/rxjs/dist/cjs/Subscriber\");\n  var _Subscriber3 = _interopRequireDefault(_Subscriber2);\n  function ignoreElements() {\n    return this.lift(new IgnoreElementsOperator());\n  }\n  ;\n  var IgnoreElementsOperator = (function() {\n    function IgnoreElementsOperator() {\n      _classCallCheck(this, IgnoreElementsOperator);\n    }\n    IgnoreElementsOperator.prototype.call = function call(subscriber) {\n      return new IgnoreElementsSubscriber(subscriber);\n    };\n    return IgnoreElementsOperator;\n  })();\n  var IgnoreElementsSubscriber = (function(_Subscriber) {\n    _inherits(IgnoreElementsSubscriber, _Subscriber);\n    function IgnoreElementsSubscriber() {\n      _classCallCheck(this, IgnoreElementsSubscriber);\n      _Subscriber.apply(this, arguments);\n    }\n    IgnoreElementsSubscriber.prototype._next = function _next() {};\n    return IgnoreElementsSubscriber;\n  })(_Subscriber3['default']);\n  module.exports = exports['default'];\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"@reactivex/rxjs/dist/cjs/operators/every\", [\"@reactivex/rxjs/dist/cjs/observables/ScalarObservable\", \"@reactivex/rxjs/dist/cjs/observables/ArrayObservable\", \"@reactivex/rxjs/dist/cjs/observables/ErrorObservable\", \"@reactivex/rxjs/dist/cjs/Subscriber\", \"@reactivex/rxjs/dist/cjs/util/tryCatch\", \"@reactivex/rxjs/dist/cjs/util/errorObject\", \"@reactivex/rxjs/dist/cjs/util/bindCallback\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  'use strict';\n  exports.__esModule = true;\n  exports['default'] = every;\n  function _interopRequireDefault(obj) {\n    return obj && obj.__esModule ? obj : {'default': obj};\n  }\n  function _inherits(subClass, superClass) {\n    if (typeof superClass !== 'function' && superClass !== null) {\n      throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass);\n    }\n    subClass.prototype = Object.create(superClass && superClass.prototype, {constructor: {\n        value: subClass,\n        enumerable: false,\n        writable: true,\n        configurable: true\n      }});\n    if (superClass)\n      Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass;\n  }\n  function _classCallCheck(instance, Constructor) {\n    if (!(instance instanceof Constructor)) {\n      throw new TypeError('Cannot call a class as a function');\n    }\n  }\n  var _observablesScalarObservable = require(\"@reactivex/rxjs/dist/cjs/observables/ScalarObservable\");\n  var _observablesScalarObservable2 = _interopRequireDefault(_observablesScalarObservable);\n  var _observablesArrayObservable = require(\"@reactivex/rxjs/dist/cjs/observables/ArrayObservable\");\n  var _observablesArrayObservable2 = _interopRequireDefault(_observablesArrayObservable);\n  var _observablesErrorObservable = require(\"@reactivex/rxjs/dist/cjs/observables/ErrorObservable\");\n  var _observablesErrorObservable2 = _interopRequireDefault(_observablesErrorObservable);\n  var _Subscriber2 = require(\"@reactivex/rxjs/dist/cjs/Subscriber\");\n  var _Subscriber3 = _interopRequireDefault(_Subscriber2);\n  var _utilTryCatch = require(\"@reactivex/rxjs/dist/cjs/util/tryCatch\");\n  var _utilTryCatch2 = _interopRequireDefault(_utilTryCatch);\n  var _utilErrorObject = require(\"@reactivex/rxjs/dist/cjs/util/errorObject\");\n  var _utilBindCallback = require(\"@reactivex/rxjs/dist/cjs/util/bindCallback\");\n  var _utilBindCallback2 = _interopRequireDefault(_utilBindCallback);\n  function every(predicate, thisArg) {\n    var source = this;\n    var result = undefined;\n    if (source._isScalar) {\n      result = _utilTryCatch2['default'](predicate)(source.value, 0, source);\n      if (result === _utilErrorObject.errorObject) {\n        return new _observablesErrorObservable2['default'](_utilErrorObject.errorObject.e, source.scheduler);\n      } else {\n        return new _observablesScalarObservable2['default'](result, source.scheduler);\n      }\n    }\n    if (source instanceof _observablesArrayObservable2['default']) {\n      var array = source.array;\n      var _result = _utilTryCatch2['default'](function(array, predicate) {\n        return array.every(predicate);\n      })(array, predicate);\n      if (_result === _utilErrorObject.errorObject) {\n        return new _observablesErrorObservable2['default'](_utilErrorObject.errorObject.e, source.scheduler);\n      } else {\n        return new _observablesScalarObservable2['default'](_result, source.scheduler);\n      }\n    }\n    return source.lift(new EveryOperator(predicate, thisArg, source));\n  }\n  var EveryOperator = (function() {\n    function EveryOperator(predicate, thisArg, source) {\n      _classCallCheck(this, EveryOperator);\n      this.predicate = predicate;\n      this.thisArg = thisArg;\n      this.source = source;\n    }\n    EveryOperator.prototype.call = function call(observer) {\n      return new EverySubscriber(observer, this.predicate, this.thisArg, this.source);\n    };\n    return EveryOperator;\n  })();\n  var EverySubscriber = (function(_Subscriber) {\n    _inherits(EverySubscriber, _Subscriber);\n    function EverySubscriber(destination, predicate, thisArg, source) {\n      _classCallCheck(this, EverySubscriber);\n      _Subscriber.call(this, destination);\n      this.thisArg = thisArg;\n      this.source = source;\n      this.predicate = undefined;\n      this.index = 0;\n      if (typeof predicate === 'function') {\n        this.predicate = _utilBindCallback2['default'](predicate, thisArg, 3);\n      }\n    }\n    EverySubscriber.prototype.notifyComplete = function notifyComplete(everyValueMatch) {\n      this.destination.next(everyValueMatch);\n      this.destination.complete();\n    };\n    EverySubscriber.prototype._next = function _next(value) {\n      var predicate = this.predicate;\n      if (predicate === undefined) {\n        this.destination.error(new TypeError('predicate must be a function'));\n      }\n      var result = _utilTryCatch2['default'](predicate)(value, this.index++, this.source);\n      if (result === _utilErrorObject.errorObject) {\n        this.destination.error(result.e);\n      } else if (!result) {\n        this.notifyComplete(false);\n      }\n    };\n    EverySubscriber.prototype._complete = function _complete() {\n      this.notifyComplete(true);\n    };\n    return EverySubscriber;\n  })(_Subscriber3['default']);\n  module.exports = exports['default'];\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"@reactivex/rxjs/dist/cjs/operators/last\", [\"@reactivex/rxjs/dist/cjs/Subscriber\", \"@reactivex/rxjs/dist/cjs/util/tryCatch\", \"@reactivex/rxjs/dist/cjs/util/errorObject\", \"@reactivex/rxjs/dist/cjs/util/EmptyError\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  'use strict';\n  exports.__esModule = true;\n  exports['default'] = last;\n  function _interopRequireDefault(obj) {\n    return obj && obj.__esModule ? obj : {'default': obj};\n  }\n  function _inherits(subClass, superClass) {\n    if (typeof superClass !== 'function' && superClass !== null) {\n      throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass);\n    }\n    subClass.prototype = Object.create(superClass && superClass.prototype, {constructor: {\n        value: subClass,\n        enumerable: false,\n        writable: true,\n        configurable: true\n      }});\n    if (superClass)\n      Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass;\n  }\n  function _classCallCheck(instance, Constructor) {\n    if (!(instance instanceof Constructor)) {\n      throw new TypeError('Cannot call a class as a function');\n    }\n  }\n  var _Subscriber2 = require(\"@reactivex/rxjs/dist/cjs/Subscriber\");\n  var _Subscriber3 = _interopRequireDefault(_Subscriber2);\n  var _utilTryCatch = require(\"@reactivex/rxjs/dist/cjs/util/tryCatch\");\n  var _utilTryCatch2 = _interopRequireDefault(_utilTryCatch);\n  var _utilErrorObject = require(\"@reactivex/rxjs/dist/cjs/util/errorObject\");\n  var _utilEmptyError = require(\"@reactivex/rxjs/dist/cjs/util/EmptyError\");\n  var _utilEmptyError2 = _interopRequireDefault(_utilEmptyError);\n  function last(predicate, resultSelector, defaultValue) {\n    return this.lift(new LastOperator(predicate, resultSelector, defaultValue, this));\n  }\n  var LastOperator = (function() {\n    function LastOperator(predicate, resultSelector, defaultValue, source) {\n      _classCallCheck(this, LastOperator);\n      this.predicate = predicate;\n      this.resultSelector = resultSelector;\n      this.defaultValue = defaultValue;\n      this.source = source;\n    }\n    LastOperator.prototype.call = function call(observer) {\n      return new LastSubscriber(observer, this.predicate, this.resultSelector, this.defaultValue, this.source);\n    };\n    return LastOperator;\n  })();\n  var LastSubscriber = (function(_Subscriber) {\n    _inherits(LastSubscriber, _Subscriber);\n    function LastSubscriber(destination, predicate, resultSelector, defaultValue, source) {\n      _classCallCheck(this, LastSubscriber);\n      _Subscriber.call(this, destination);\n      this.predicate = predicate;\n      this.resultSelector = resultSelector;\n      this.defaultValue = defaultValue;\n      this.source = source;\n      this.hasValue = false;\n      this.index = 0;\n      if (typeof defaultValue !== 'undefined') {\n        this.lastValue = defaultValue;\n        this.hasValue = true;\n      }\n    }\n    LastSubscriber.prototype._next = function _next(value) {\n      var predicate = this.predicate;\n      var resultSelector = this.resultSelector;\n      var destination = this.destination;\n      var index = this.index++;\n      if (predicate) {\n        var found = _utilTryCatch2['default'](predicate)(value, index, this.source);\n        if (found === _utilErrorObject.errorObject) {\n          destination.error(_utilErrorObject.errorObject.e);\n          return ;\n        }\n        if (found) {\n          if (resultSelector) {\n            var result = _utilTryCatch2['default'](resultSelector)(value, index);\n            if (result === _utilErrorObject.errorObject) {\n              destination.error(_utilErrorObject.errorObject.e);\n              return ;\n            }\n            this.lastValue = result;\n          } else {\n            this.lastValue = value;\n          }\n          this.hasValue = true;\n        }\n      } else {\n        this.lastValue = value;\n        this.hasValue = true;\n      }\n    };\n    LastSubscriber.prototype._complete = function _complete() {\n      var destination = this.destination;\n      if (this.hasValue) {\n        destination.next(this.lastValue);\n        destination.complete();\n      } else {\n        destination.error(new _utilEmptyError2['default']());\n      }\n    };\n    return LastSubscriber;\n  })(_Subscriber3['default']);\n  module.exports = exports['default'];\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"@reactivex/rxjs/dist/cjs/operators/map\", [\"@reactivex/rxjs/dist/cjs/Subscriber\", \"@reactivex/rxjs/dist/cjs/util/tryCatch\", \"@reactivex/rxjs/dist/cjs/util/errorObject\", \"@reactivex/rxjs/dist/cjs/util/bindCallback\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  'use strict';\n  exports.__esModule = true;\n  exports['default'] = map;\n  function _interopRequireDefault(obj) {\n    return obj && obj.__esModule ? obj : {'default': obj};\n  }\n  function _inherits(subClass, superClass) {\n    if (typeof superClass !== 'function' && superClass !== null) {\n      throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass);\n    }\n    subClass.prototype = Object.create(superClass && superClass.prototype, {constructor: {\n        value: subClass,\n        enumerable: false,\n        writable: true,\n        configurable: true\n      }});\n    if (superClass)\n      Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass;\n  }\n  function _classCallCheck(instance, Constructor) {\n    if (!(instance instanceof Constructor)) {\n      throw new TypeError('Cannot call a class as a function');\n    }\n  }\n  var _Subscriber2 = require(\"@reactivex/rxjs/dist/cjs/Subscriber\");\n  var _Subscriber3 = _interopRequireDefault(_Subscriber2);\n  var _utilTryCatch = require(\"@reactivex/rxjs/dist/cjs/util/tryCatch\");\n  var _utilTryCatch2 = _interopRequireDefault(_utilTryCatch);\n  var _utilErrorObject = require(\"@reactivex/rxjs/dist/cjs/util/errorObject\");\n  var _utilBindCallback = require(\"@reactivex/rxjs/dist/cjs/util/bindCallback\");\n  var _utilBindCallback2 = _interopRequireDefault(_utilBindCallback);\n  function map(project, thisArg) {\n    return this.lift(new MapOperator(project, thisArg));\n  }\n  var MapOperator = (function() {\n    function MapOperator(project, thisArg) {\n      _classCallCheck(this, MapOperator);\n      this.project = _utilBindCallback2['default'](project, thisArg, 2);\n    }\n    MapOperator.prototype.call = function call(subscriber) {\n      return new MapSubscriber(subscriber, this.project);\n    };\n    return MapOperator;\n  })();\n  var MapSubscriber = (function(_Subscriber) {\n    _inherits(MapSubscriber, _Subscriber);\n    function MapSubscriber(destination, project) {\n      _classCallCheck(this, MapSubscriber);\n      _Subscriber.call(this, destination);\n      this.count = 0;\n      this.project = project;\n    }\n    MapSubscriber.prototype._next = function _next(x) {\n      var result = _utilTryCatch2['default'](this.project)(x, this.count++);\n      if (result === _utilErrorObject.errorObject) {\n        this.error(_utilErrorObject.errorObject.e);\n      } else {\n        this.destination.next(result);\n      }\n    };\n    return MapSubscriber;\n  })(_Subscriber3['default']);\n  module.exports = exports['default'];\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"@reactivex/rxjs/dist/cjs/operators/mapTo\", [\"@reactivex/rxjs/dist/cjs/Subscriber\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  'use strict';\n  exports.__esModule = true;\n  exports['default'] = mapTo;\n  function _interopRequireDefault(obj) {\n    return obj && obj.__esModule ? obj : {'default': obj};\n  }\n  function _inherits(subClass, superClass) {\n    if (typeof superClass !== 'function' && superClass !== null) {\n      throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass);\n    }\n    subClass.prototype = Object.create(superClass && superClass.prototype, {constructor: {\n        value: subClass,\n        enumerable: false,\n        writable: true,\n        configurable: true\n      }});\n    if (superClass)\n      Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass;\n  }\n  function _classCallCheck(instance, Constructor) {\n    if (!(instance instanceof Constructor)) {\n      throw new TypeError('Cannot call a class as a function');\n    }\n  }\n  var _Subscriber2 = require(\"@reactivex/rxjs/dist/cjs/Subscriber\");\n  var _Subscriber3 = _interopRequireDefault(_Subscriber2);\n  function mapTo(value) {\n    return this.lift(new MapToOperator(value));\n  }\n  var MapToOperator = (function() {\n    function MapToOperator(value) {\n      _classCallCheck(this, MapToOperator);\n      this.value = value;\n    }\n    MapToOperator.prototype.call = function call(subscriber) {\n      return new MapToSubscriber(subscriber, this.value);\n    };\n    return MapToOperator;\n  })();\n  var MapToSubscriber = (function(_Subscriber) {\n    _inherits(MapToSubscriber, _Subscriber);\n    function MapToSubscriber(destination, value) {\n      _classCallCheck(this, MapToSubscriber);\n      _Subscriber.call(this, destination);\n      this.value = value;\n    }\n    MapToSubscriber.prototype._next = function _next(x) {\n      this.destination.next(this.value);\n    };\n    return MapToSubscriber;\n  })(_Subscriber3['default']);\n  module.exports = exports['default'];\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"@reactivex/rxjs/dist/cjs/operators/materialize\", [\"@reactivex/rxjs/dist/cjs/Subscriber\", \"@reactivex/rxjs/dist/cjs/Notification\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  'use strict';\n  exports.__esModule = true;\n  exports['default'] = materialize;\n  function _interopRequireDefault(obj) {\n    return obj && obj.__esModule ? obj : {'default': obj};\n  }\n  function _inherits(subClass, superClass) {\n    if (typeof superClass !== 'function' && superClass !== null) {\n      throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass);\n    }\n    subClass.prototype = Object.create(superClass && superClass.prototype, {constructor: {\n        value: subClass,\n        enumerable: false,\n        writable: true,\n        configurable: true\n      }});\n    if (superClass)\n      Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass;\n  }\n  function _classCallCheck(instance, Constructor) {\n    if (!(instance instanceof Constructor)) {\n      throw new TypeError('Cannot call a class as a function');\n    }\n  }\n  var _Subscriber2 = require(\"@reactivex/rxjs/dist/cjs/Subscriber\");\n  var _Subscriber3 = _interopRequireDefault(_Subscriber2);\n  var _Notification = require(\"@reactivex/rxjs/dist/cjs/Notification\");\n  var _Notification2 = _interopRequireDefault(_Notification);\n  function materialize() {\n    return this.lift(new MaterializeOperator());\n  }\n  var MaterializeOperator = (function() {\n    function MaterializeOperator() {\n      _classCallCheck(this, MaterializeOperator);\n    }\n    MaterializeOperator.prototype.call = function call(subscriber) {\n      return new MaterializeSubscriber(subscriber);\n    };\n    return MaterializeOperator;\n  })();\n  var MaterializeSubscriber = (function(_Subscriber) {\n    _inherits(MaterializeSubscriber, _Subscriber);\n    function MaterializeSubscriber(destination) {\n      _classCallCheck(this, MaterializeSubscriber);\n      _Subscriber.call(this, destination);\n    }\n    MaterializeSubscriber.prototype._next = function _next(value) {\n      this.destination.next(_Notification2['default'].createNext(value));\n    };\n    MaterializeSubscriber.prototype._error = function _error(err) {\n      var destination = this.destination;\n      destination.next(_Notification2['default'].createError(err));\n      destination.complete();\n    };\n    MaterializeSubscriber.prototype._complete = function _complete() {\n      var destination = this.destination;\n      destination.next(_Notification2['default'].createComplete());\n      destination.complete();\n    };\n    return MaterializeSubscriber;\n  })(_Subscriber3['default']);\n  module.exports = exports['default'];\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"@reactivex/rxjs/dist/cjs/operators/merge\", [\"@reactivex/rxjs/dist/cjs/operators/merge-static\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  'use strict';\n  exports.__esModule = true;\n  exports['default'] = merge;\n  function _interopRequireDefault(obj) {\n    return obj && obj.__esModule ? obj : {'default': obj};\n  }\n  var _mergeStatic = require(\"@reactivex/rxjs/dist/cjs/operators/merge-static\");\n  var _mergeStatic2 = _interopRequireDefault(_mergeStatic);\n  function merge() {\n    for (var _len = arguments.length,\n        observables = Array(_len),\n        _key = 0; _key < _len; _key++) {\n      observables[_key] = arguments[_key];\n    }\n    observables.unshift(this);\n    return _mergeStatic2['default'].apply(this, observables);\n  }\n  module.exports = exports['default'];\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"@reactivex/rxjs/dist/cjs/operators/mergeAll\", [\"@reactivex/rxjs/dist/cjs/operators/mergeAll-support\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  'use strict';\n  exports.__esModule = true;\n  exports['default'] = mergeAll;\n  var _mergeAllSupport = require(\"@reactivex/rxjs/dist/cjs/operators/mergeAll-support\");\n  function mergeAll() {\n    var concurrent = arguments.length <= 0 || arguments[0] === undefined ? Number.POSITIVE_INFINITY : arguments[0];\n    return this.lift(new _mergeAllSupport.MergeAllOperator(concurrent));\n  }\n  module.exports = exports['default'];\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"@reactivex/rxjs/dist/cjs/operators/mergeMap\", [\"@reactivex/rxjs/dist/cjs/operators/mergeMap-support\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  'use strict';\n  exports.__esModule = true;\n  exports['default'] = mergeMap;\n  var _mergeMapSupport = require(\"@reactivex/rxjs/dist/cjs/operators/mergeMap-support\");\n  function mergeMap(project, resultSelector) {\n    var concurrent = arguments.length <= 2 || arguments[2] === undefined ? Number.POSITIVE_INFINITY : arguments[2];\n    return this.lift(new _mergeMapSupport.MergeMapOperator(project, resultSelector, concurrent));\n  }\n  module.exports = exports['default'];\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"@reactivex/rxjs/dist/cjs/operators/mergeMapTo\", [\"@reactivex/rxjs/dist/cjs/operators/mergeMapTo-support\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  'use strict';\n  exports.__esModule = true;\n  exports['default'] = mergeMapTo;\n  var _mergeMapToSupport = require(\"@reactivex/rxjs/dist/cjs/operators/mergeMapTo-support\");\n  function mergeMapTo(observable, resultSelector) {\n    var concurrent = arguments.length <= 2 || arguments[2] === undefined ? Number.POSITIVE_INFINITY : arguments[2];\n    return this.lift(new _mergeMapToSupport.MergeMapToOperator(observable, resultSelector, concurrent));\n  }\n  module.exports = exports['default'];\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"@reactivex/rxjs/dist/cjs/observables/ConnectableObservable\", [\"@reactivex/rxjs/dist/cjs/Observable\", \"@reactivex/rxjs/dist/cjs/Subscription\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  'use strict';\n  exports.__esModule = true;\n  function _interopRequireDefault(obj) {\n    return obj && obj.__esModule ? obj : {'default': obj};\n  }\n  function _classCallCheck(instance, Constructor) {\n    if (!(instance instanceof Constructor)) {\n      throw new TypeError('Cannot call a class as a function');\n    }\n  }\n  function _inherits(subClass, superClass) {\n    if (typeof superClass !== 'function' && superClass !== null) {\n      throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass);\n    }\n    subClass.prototype = Object.create(superClass && superClass.prototype, {constructor: {\n        value: subClass,\n        enumerable: false,\n        writable: true,\n        configurable: true\n      }});\n    if (superClass)\n      Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass;\n  }\n  var _Observable3 = require(\"@reactivex/rxjs/dist/cjs/Observable\");\n  var _Observable4 = _interopRequireDefault(_Observable3);\n  var _Subscription3 = require(\"@reactivex/rxjs/dist/cjs/Subscription\");\n  var _Subscription4 = _interopRequireDefault(_Subscription3);\n  var ConnectableObservable = (function(_Observable) {\n    _inherits(ConnectableObservable, _Observable);\n    function ConnectableObservable(source, subjectFactory) {\n      _classCallCheck(this, ConnectableObservable);\n      _Observable.call(this);\n      this.source = source;\n      this.subjectFactory = subjectFactory;\n    }\n    ConnectableObservable.prototype._subscribe = function _subscribe(subscriber) {\n      return this._getSubject().subscribe(subscriber);\n    };\n    ConnectableObservable.prototype._getSubject = function _getSubject() {\n      var subject = this.subject;\n      if (subject && !subject.isUnsubscribed) {\n        return subject;\n      }\n      return this.subject = this.subjectFactory();\n    };\n    ConnectableObservable.prototype.connect = function connect() {\n      var source = this.source;\n      var subscription = this.subscription;\n      if (subscription && !subscription.isUnsubscribed) {\n        return subscription;\n      }\n      subscription = source.subscribe(this._getSubject());\n      subscription.add(new ConnectableSubscription(this));\n      return this.subscription = subscription;\n    };\n    ConnectableObservable.prototype.refCount = function refCount() {\n      return new RefCountObservable(this);\n    };\n    return ConnectableObservable;\n  })(_Observable4['default']);\n  exports['default'] = ConnectableObservable;\n  var ConnectableSubscription = (function(_Subscription) {\n    _inherits(ConnectableSubscription, _Subscription);\n    function ConnectableSubscription(connectable) {\n      _classCallCheck(this, ConnectableSubscription);\n      _Subscription.call(this);\n      this.connectable = connectable;\n    }\n    ConnectableSubscription.prototype._unsubscribe = function _unsubscribe() {\n      var connectable = this.connectable;\n      connectable.subject = void 0;\n      connectable.subscription = void 0;\n      this.connectable = void 0;\n    };\n    return ConnectableSubscription;\n  })(_Subscription4['default']);\n  var RefCountObservable = (function(_Observable2) {\n    _inherits(RefCountObservable, _Observable2);\n    function RefCountObservable(connectable) {\n      var refCount = arguments.length <= 1 || arguments[1] === undefined ? 0 : arguments[1];\n      _classCallCheck(this, RefCountObservable);\n      _Observable2.call(this);\n      this.connectable = connectable;\n      this.refCount = refCount;\n    }\n    RefCountObservable.prototype._subscribe = function _subscribe(subscriber) {\n      var connectable = this.connectable;\n      var subscription = connectable.subscribe(subscriber);\n      if (++this.refCount === 1) {\n        this.connection = connectable.connect();\n      }\n      subscription.add(new RefCountSubscription(this));\n      return subscription;\n    };\n    return RefCountObservable;\n  })(_Observable4['default']);\n  var RefCountSubscription = (function(_Subscription2) {\n    _inherits(RefCountSubscription, _Subscription2);\n    function RefCountSubscription(refCountObservable) {\n      _classCallCheck(this, RefCountSubscription);\n      _Subscription2.call(this);\n      this.refCountObservable = refCountObservable;\n    }\n    RefCountSubscription.prototype._unsubscribe = function _unsubscribe() {\n      var observable = this.refCountObservable;\n      if (--observable.refCount === 0) {\n        observable.connection.unsubscribe();\n        observable.connection = void 0;\n      }\n    };\n    return RefCountSubscription;\n  })(_Subscription4['default']);\n  module.exports = exports['default'];\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"@reactivex/rxjs/dist/cjs/operators/observeOn\", [\"@reactivex/rxjs/dist/cjs/operators/observeOn-support\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  'use strict';\n  exports.__esModule = true;\n  exports['default'] = observeOn;\n  var _observeOnSupport = require(\"@reactivex/rxjs/dist/cjs/operators/observeOn-support\");\n  function observeOn(scheduler) {\n    var delay = arguments.length <= 1 || arguments[1] === undefined ? 0 : arguments[1];\n    return this.lift(new _observeOnSupport.ObserveOnOperator(scheduler, delay));\n  }\n  module.exports = exports['default'];\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"@reactivex/rxjs/dist/cjs/util/not\", [], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  \"use strict\";\n  exports.__esModule = true;\n  exports[\"default\"] = not;\n  function not(pred, thisArg) {\n    function notPred() {\n      return !notPred.pred.apply(notPred.thisArg, arguments);\n    }\n    notPred.pred = pred;\n    notPred.thisArg = thisArg;\n    return notPred;\n  }\n  module.exports = exports[\"default\"];\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"@reactivex/rxjs/dist/cjs/operators/publish\", [\"@reactivex/rxjs/dist/cjs/Subject\", \"@reactivex/rxjs/dist/cjs/operators/multicast\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  'use strict';\n  exports.__esModule = true;\n  exports['default'] = publish;\n  function _interopRequireDefault(obj) {\n    return obj && obj.__esModule ? obj : {'default': obj};\n  }\n  var _Subject = require(\"@reactivex/rxjs/dist/cjs/Subject\");\n  var _Subject2 = _interopRequireDefault(_Subject);\n  var _multicast = require(\"@reactivex/rxjs/dist/cjs/operators/multicast\");\n  var _multicast2 = _interopRequireDefault(_multicast);\n  function subjectFactory() {\n    return new _Subject2['default']();\n  }\n  function publish() {\n    return _multicast2['default'].call(this, subjectFactory);\n  }\n  module.exports = exports['default'];\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"@reactivex/rxjs/dist/cjs/subjects/BehaviorSubject\", [\"@reactivex/rxjs/dist/cjs/Subject\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  'use strict';\n  exports.__esModule = true;\n  function _interopRequireDefault(obj) {\n    return obj && obj.__esModule ? obj : {'default': obj};\n  }\n  function _classCallCheck(instance, Constructor) {\n    if (!(instance instanceof Constructor)) {\n      throw new TypeError('Cannot call a class as a function');\n    }\n  }\n  function _inherits(subClass, superClass) {\n    if (typeof superClass !== 'function' && superClass !== null) {\n      throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass);\n    }\n    subClass.prototype = Object.create(superClass && superClass.prototype, {constructor: {\n        value: subClass,\n        enumerable: false,\n        writable: true,\n        configurable: true\n      }});\n    if (superClass)\n      Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass;\n  }\n  var _Subject2 = require(\"@reactivex/rxjs/dist/cjs/Subject\");\n  var _Subject3 = _interopRequireDefault(_Subject2);\n  var BehaviorSubject = (function(_Subject) {\n    _inherits(BehaviorSubject, _Subject);\n    function BehaviorSubject(value) {\n      _classCallCheck(this, BehaviorSubject);\n      _Subject.call(this);\n      this.value = value;\n    }\n    BehaviorSubject.prototype._subscribe = function _subscribe(subscriber) {\n      var subscription = _Subject.prototype._subscribe.call(this, subscriber);\n      if (!subscription) {\n        return ;\n      } else if (!subscription.isUnsubscribed) {\n        subscriber.next(this.value);\n      }\n      return subscription;\n    };\n    BehaviorSubject.prototype._next = function _next(value) {\n      _Subject.prototype._next.call(this, this.value = value);\n    };\n    return BehaviorSubject;\n  })(_Subject3['default']);\n  exports['default'] = BehaviorSubject;\n  module.exports = exports['default'];\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"@reactivex/rxjs/dist/cjs/subjects/ReplaySubject\", [\"@reactivex/rxjs/dist/cjs/Subject\", \"@reactivex/rxjs/dist/cjs/schedulers/immediate\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  'use strict';\n  exports.__esModule = true;\n  function _interopRequireDefault(obj) {\n    return obj && obj.__esModule ? obj : {'default': obj};\n  }\n  function _classCallCheck(instance, Constructor) {\n    if (!(instance instanceof Constructor)) {\n      throw new TypeError('Cannot call a class as a function');\n    }\n  }\n  function _inherits(subClass, superClass) {\n    if (typeof superClass !== 'function' && superClass !== null) {\n      throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass);\n    }\n    subClass.prototype = Object.create(superClass && superClass.prototype, {constructor: {\n        value: subClass,\n        enumerable: false,\n        writable: true,\n        configurable: true\n      }});\n    if (superClass)\n      Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass;\n  }\n  var _Subject2 = require(\"@reactivex/rxjs/dist/cjs/Subject\");\n  var _Subject3 = _interopRequireDefault(_Subject2);\n  var _schedulersImmediate = require(\"@reactivex/rxjs/dist/cjs/schedulers/immediate\");\n  var _schedulersImmediate2 = _interopRequireDefault(_schedulersImmediate);\n  var ReplaySubject = (function(_Subject) {\n    _inherits(ReplaySubject, _Subject);\n    function ReplaySubject(bufferSize, _windowTime, scheduler) {\n      if (bufferSize === undefined)\n        bufferSize = Number.POSITIVE_INFINITY;\n      if (_windowTime === undefined)\n        _windowTime = Number.POSITIVE_INFINITY;\n      _classCallCheck(this, ReplaySubject);\n      _Subject.call(this);\n      this.events = [];\n      this.bufferSize = bufferSize < 1 ? 1 : bufferSize;\n      this._windowTime = _windowTime < 1 ? 1 : _windowTime;\n      this.scheduler = scheduler;\n    }\n    ReplaySubject.prototype._next = function _next(value) {\n      var now = this._getNow();\n      this.events.push(new ReplayEvent(now, value));\n      _Subject.prototype._next.call(this, value);\n    };\n    ReplaySubject.prototype._subscribe = function _subscribe(subscriber) {\n      var events = this._getEvents(this._getNow());\n      var index = -1;\n      var len = events.length;\n      while (!subscriber.isUnsubscribed && ++index < len) {\n        subscriber.next(events[index].value);\n      }\n      return _Subject.prototype._subscribe.call(this, subscriber);\n    };\n    ReplaySubject.prototype._getNow = function _getNow() {\n      return (this.scheduler || _schedulersImmediate2['default']).now();\n    };\n    ReplaySubject.prototype._getEvents = function _getEvents(now) {\n      var bufferSize = this.bufferSize;\n      var _windowTime = this._windowTime;\n      var events = this.events;\n      var eventsCount = events.length;\n      var spliceCount = 0;\n      while (spliceCount < eventsCount) {\n        if (now - events[spliceCount].time < _windowTime) {\n          break;\n        }\n        spliceCount += 1;\n      }\n      if (eventsCount > bufferSize) {\n        spliceCount = Math.max(spliceCount, eventsCount - bufferSize);\n      }\n      if (spliceCount > 0) {\n        events.splice(0, spliceCount);\n      }\n      return events;\n    };\n    return ReplaySubject;\n  })(_Subject3['default']);\n  exports['default'] = ReplaySubject;\n  var ReplayEvent = function ReplayEvent(time, value) {\n    _classCallCheck(this, ReplayEvent);\n    this.time = time;\n    this.value = value;\n  };\n  ;\n  module.exports = exports['default'];\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"@reactivex/rxjs/dist/cjs/operators/reduce-support\", [\"@reactivex/rxjs/dist/cjs/Subscriber\", \"@reactivex/rxjs/dist/cjs/util/tryCatch\", \"@reactivex/rxjs/dist/cjs/util/errorObject\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  'use strict';\n  exports.__esModule = true;\n  function _interopRequireDefault(obj) {\n    return obj && obj.__esModule ? obj : {'default': obj};\n  }\n  function _inherits(subClass, superClass) {\n    if (typeof superClass !== 'function' && superClass !== null) {\n      throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass);\n    }\n    subClass.prototype = Object.create(superClass && superClass.prototype, {constructor: {\n        value: subClass,\n        enumerable: false,\n        writable: true,\n        configurable: true\n      }});\n    if (superClass)\n      Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass;\n  }\n  function _classCallCheck(instance, Constructor) {\n    if (!(instance instanceof Constructor)) {\n      throw new TypeError('Cannot call a class as a function');\n    }\n  }\n  var _Subscriber2 = require(\"@reactivex/rxjs/dist/cjs/Subscriber\");\n  var _Subscriber3 = _interopRequireDefault(_Subscriber2);\n  var _utilTryCatch = require(\"@reactivex/rxjs/dist/cjs/util/tryCatch\");\n  var _utilTryCatch2 = _interopRequireDefault(_utilTryCatch);\n  var _utilErrorObject = require(\"@reactivex/rxjs/dist/cjs/util/errorObject\");\n  var ReduceOperator = (function() {\n    function ReduceOperator(project, acc) {\n      _classCallCheck(this, ReduceOperator);\n      this.acc = acc;\n      this.project = project;\n    }\n    ReduceOperator.prototype.call = function call(subscriber) {\n      return new ReduceSubscriber(subscriber, this.project, this.acc);\n    };\n    return ReduceOperator;\n  })();\n  exports.ReduceOperator = ReduceOperator;\n  var ReduceSubscriber = (function(_Subscriber) {\n    _inherits(ReduceSubscriber, _Subscriber);\n    function ReduceSubscriber(destination, project, acc) {\n      _classCallCheck(this, ReduceSubscriber);\n      _Subscriber.call(this, destination);\n      this.hasValue = false;\n      this.acc = acc;\n      this.project = project;\n      this.hasSeed = typeof acc !== 'undefined';\n    }\n    ReduceSubscriber.prototype._next = function _next(x) {\n      if (this.hasValue || (this.hasValue = this.hasSeed)) {\n        var result = _utilTryCatch2['default'](this.project).call(this, this.acc, x);\n        if (result === _utilErrorObject.errorObject) {\n          this.destination.error(_utilErrorObject.errorObject.e);\n        } else {\n          this.acc = result;\n        }\n      } else {\n        this.acc = x;\n        this.hasValue = true;\n      }\n    };\n    ReduceSubscriber.prototype._complete = function _complete() {\n      if (this.hasValue || this.hasSeed) {\n        this.destination.next(this.acc);\n      }\n      this.destination.complete();\n    };\n    return ReduceSubscriber;\n  })(_Subscriber3['default']);\n  exports.ReduceSubscriber = ReduceSubscriber;\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"@reactivex/rxjs/dist/cjs/operators/repeat\", [\"@reactivex/rxjs/dist/cjs/Subscriber\", \"@reactivex/rxjs/dist/cjs/observables/EmptyObservable\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  'use strict';\n  exports.__esModule = true;\n  exports['default'] = repeat;\n  function _interopRequireDefault(obj) {\n    return obj && obj.__esModule ? obj : {'default': obj};\n  }\n  function _inherits(subClass, superClass) {\n    if (typeof superClass !== 'function' && superClass !== null) {\n      throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass);\n    }\n    subClass.prototype = Object.create(superClass && superClass.prototype, {constructor: {\n        value: subClass,\n        enumerable: false,\n        writable: true,\n        configurable: true\n      }});\n    if (superClass)\n      Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass;\n  }\n  function _classCallCheck(instance, Constructor) {\n    if (!(instance instanceof Constructor)) {\n      throw new TypeError('Cannot call a class as a function');\n    }\n  }\n  var _Subscriber3 = require(\"@reactivex/rxjs/dist/cjs/Subscriber\");\n  var _Subscriber4 = _interopRequireDefault(_Subscriber3);\n  var _observablesEmptyObservable = require(\"@reactivex/rxjs/dist/cjs/observables/EmptyObservable\");\n  var _observablesEmptyObservable2 = _interopRequireDefault(_observablesEmptyObservable);\n  function repeat() {\n    var count = arguments.length <= 0 || arguments[0] === undefined ? -1 : arguments[0];\n    if (count === 0) {\n      return _observablesEmptyObservable2['default'].create();\n    } else {\n      return this.lift(new RepeatOperator(count, this));\n    }\n  }\n  var RepeatOperator = (function() {\n    function RepeatOperator(count, source) {\n      _classCallCheck(this, RepeatOperator);\n      this.count = count;\n      this.source = source;\n    }\n    RepeatOperator.prototype.call = function call(subscriber) {\n      return new FirstRepeatSubscriber(subscriber, this.count, this.source);\n    };\n    return RepeatOperator;\n  })();\n  var FirstRepeatSubscriber = (function(_Subscriber) {\n    _inherits(FirstRepeatSubscriber, _Subscriber);\n    function FirstRepeatSubscriber(destination, count, source) {\n      _classCallCheck(this, FirstRepeatSubscriber);\n      _Subscriber.call(this, null);\n      this.destination = destination;\n      this.count = count;\n      this.source = source;\n      if (count === 0) {\n        this.destination.complete();\n        _Subscriber.prototype.unsubscribe.call(this);\n      }\n      this.lastSubscription = this;\n    }\n    FirstRepeatSubscriber.prototype._next = function _next(value) {\n      this.destination.next(value);\n    };\n    FirstRepeatSubscriber.prototype._error = function _error(err) {\n      this.destination.error(err);\n    };\n    FirstRepeatSubscriber.prototype.complete = function complete() {\n      if (!this.isUnsubscribed) {\n        this.resubscribe(this.count);\n      }\n    };\n    FirstRepeatSubscriber.prototype.unsubscribe = function unsubscribe() {\n      var lastSubscription = this.lastSubscription;\n      if (lastSubscription === this) {\n        _Subscriber.prototype.unsubscribe.call(this);\n      } else {\n        lastSubscription.unsubscribe();\n      }\n    };\n    FirstRepeatSubscriber.prototype.resubscribe = function resubscribe(count) {\n      this.lastSubscription.unsubscribe();\n      if (count - 1 === 0) {\n        this.destination.complete();\n      } else {\n        var nextSubscriber = new MoreRepeatSubscriber(this, count - 1);\n        this.lastSubscription = this.source.subscribe(nextSubscriber);\n      }\n    };\n    return FirstRepeatSubscriber;\n  })(_Subscriber4['default']);\n  var MoreRepeatSubscriber = (function(_Subscriber2) {\n    _inherits(MoreRepeatSubscriber, _Subscriber2);\n    function MoreRepeatSubscriber(parent, count) {\n      _classCallCheck(this, MoreRepeatSubscriber);\n      _Subscriber2.call(this, null);\n      this.parent = parent;\n      this.count = count;\n    }\n    MoreRepeatSubscriber.prototype._next = function _next(value) {\n      this.parent.destination.next(value);\n    };\n    MoreRepeatSubscriber.prototype._error = function _error(err) {\n      this.parent.destination.error(err);\n    };\n    MoreRepeatSubscriber.prototype._complete = function _complete() {\n      var count = this.count;\n      this.parent.resubscribe(count < 0 ? -1 : count);\n    };\n    return MoreRepeatSubscriber;\n  })(_Subscriber4['default']);\n  module.exports = exports['default'];\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"@reactivex/rxjs/dist/cjs/operators/retry\", [\"@reactivex/rxjs/dist/cjs/Subscriber\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  'use strict';\n  exports.__esModule = true;\n  exports['default'] = retry;\n  function _interopRequireDefault(obj) {\n    return obj && obj.__esModule ? obj : {'default': obj};\n  }\n  function _inherits(subClass, superClass) {\n    if (typeof superClass !== 'function' && superClass !== null) {\n      throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass);\n    }\n    subClass.prototype = Object.create(superClass && superClass.prototype, {constructor: {\n        value: subClass,\n        enumerable: false,\n        writable: true,\n        configurable: true\n      }});\n    if (superClass)\n      Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass;\n  }\n  function _classCallCheck(instance, Constructor) {\n    if (!(instance instanceof Constructor)) {\n      throw new TypeError('Cannot call a class as a function');\n    }\n  }\n  var _Subscriber3 = require(\"@reactivex/rxjs/dist/cjs/Subscriber\");\n  var _Subscriber4 = _interopRequireDefault(_Subscriber3);\n  function retry() {\n    var count = arguments.length <= 0 || arguments[0] === undefined ? 0 : arguments[0];\n    return this.lift(new RetryOperator(count, this));\n  }\n  var RetryOperator = (function() {\n    function RetryOperator(count, source) {\n      _classCallCheck(this, RetryOperator);\n      this.count = count;\n      this.source = source;\n    }\n    RetryOperator.prototype.call = function call(subscriber) {\n      return new FirstRetrySubscriber(subscriber, this.count, this.source);\n    };\n    return RetryOperator;\n  })();\n  var FirstRetrySubscriber = (function(_Subscriber) {\n    _inherits(FirstRetrySubscriber, _Subscriber);\n    function FirstRetrySubscriber(destination, count, source) {\n      _classCallCheck(this, FirstRetrySubscriber);\n      _Subscriber.call(this, null);\n      this.destination = destination;\n      this.count = count;\n      this.source = source;\n      this.lastSubscription = this;\n    }\n    FirstRetrySubscriber.prototype._next = function _next(value) {\n      this.destination.next(value);\n    };\n    FirstRetrySubscriber.prototype.error = function error(_error) {\n      if (!this.isUnsubscribed) {\n        _Subscriber.prototype.unsubscribe.call(this);\n        this.resubscribe();\n      }\n    };\n    FirstRetrySubscriber.prototype._complete = function _complete() {\n      _Subscriber.prototype.unsubscribe.call(this);\n      this.destination.complete();\n    };\n    FirstRetrySubscriber.prototype.unsubscribe = function unsubscribe() {\n      var lastSubscription = this.lastSubscription;\n      if (lastSubscription === this) {\n        _Subscriber.prototype.unsubscribe.call(this);\n      } else {\n        lastSubscription.unsubscribe();\n      }\n    };\n    FirstRetrySubscriber.prototype.resubscribe = function resubscribe() {\n      var retried = arguments.length <= 0 || arguments[0] === undefined ? 0 : arguments[0];\n      this.lastSubscription.unsubscribe();\n      var nextSubscriber = new RetryMoreSubscriber(this, this.count, retried + 1);\n      this.lastSubscription = this.source.subscribe(nextSubscriber);\n    };\n    return FirstRetrySubscriber;\n  })(_Subscriber4['default']);\n  var RetryMoreSubscriber = (function(_Subscriber2) {\n    _inherits(RetryMoreSubscriber, _Subscriber2);\n    function RetryMoreSubscriber(parent, count) {\n      var retried = arguments.length <= 2 || arguments[2] === undefined ? 0 : arguments[2];\n      _classCallCheck(this, RetryMoreSubscriber);\n      _Subscriber2.call(this, null);\n      this.parent = parent;\n      this.count = count;\n      this.retried = retried;\n    }\n    RetryMoreSubscriber.prototype._next = function _next(value) {\n      this.parent.destination.next(value);\n    };\n    RetryMoreSubscriber.prototype._error = function _error(err) {\n      var parent = this.parent;\n      var retried = this.retried;\n      var count = this.count;\n      if (count && retried === count) {\n        parent.destination.error(err);\n      } else {\n        parent.resubscribe(retried);\n      }\n    };\n    RetryMoreSubscriber.prototype._complete = function _complete() {\n      this.parent.destination.complete();\n    };\n    return RetryMoreSubscriber;\n  })(_Subscriber4['default']);\n  module.exports = exports['default'];\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"@reactivex/rxjs/dist/cjs/operators/retryWhen\", [\"@reactivex/rxjs/dist/cjs/Subscriber\", \"@reactivex/rxjs/dist/cjs/Subject\", \"@reactivex/rxjs/dist/cjs/util/tryCatch\", \"@reactivex/rxjs/dist/cjs/util/errorObject\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  'use strict';\n  exports.__esModule = true;\n  exports['default'] = retryWhen;\n  function _interopRequireDefault(obj) {\n    return obj && obj.__esModule ? obj : {'default': obj};\n  }\n  function _inherits(subClass, superClass) {\n    if (typeof superClass !== 'function' && superClass !== null) {\n      throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass);\n    }\n    subClass.prototype = Object.create(superClass && superClass.prototype, {constructor: {\n        value: subClass,\n        enumerable: false,\n        writable: true,\n        configurable: true\n      }});\n    if (superClass)\n      Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass;\n  }\n  function _classCallCheck(instance, Constructor) {\n    if (!(instance instanceof Constructor)) {\n      throw new TypeError('Cannot call a class as a function');\n    }\n  }\n  var _Subscriber4 = require(\"@reactivex/rxjs/dist/cjs/Subscriber\");\n  var _Subscriber5 = _interopRequireDefault(_Subscriber4);\n  var _Subject = require(\"@reactivex/rxjs/dist/cjs/Subject\");\n  var _Subject2 = _interopRequireDefault(_Subject);\n  var _utilTryCatch = require(\"@reactivex/rxjs/dist/cjs/util/tryCatch\");\n  var _utilTryCatch2 = _interopRequireDefault(_utilTryCatch);\n  var _utilErrorObject = require(\"@reactivex/rxjs/dist/cjs/util/errorObject\");\n  function retryWhen(notifier) {\n    return this.lift(new RetryWhenOperator(notifier, this));\n  }\n  var RetryWhenOperator = (function() {\n    function RetryWhenOperator(notifier, source) {\n      _classCallCheck(this, RetryWhenOperator);\n      this.notifier = notifier;\n      this.source = source;\n    }\n    RetryWhenOperator.prototype.call = function call(subscriber) {\n      return new FirstRetryWhenSubscriber(subscriber, this.notifier, this.source);\n    };\n    return RetryWhenOperator;\n  })();\n  var FirstRetryWhenSubscriber = (function(_Subscriber) {\n    _inherits(FirstRetryWhenSubscriber, _Subscriber);\n    function FirstRetryWhenSubscriber(destination, notifier, source) {\n      _classCallCheck(this, FirstRetryWhenSubscriber);\n      _Subscriber.call(this, null);\n      this.destination = destination;\n      this.notifier = notifier;\n      this.source = source;\n      this.lastSubscription = this;\n    }\n    FirstRetryWhenSubscriber.prototype._next = function _next(value) {\n      this.destination.next(value);\n    };\n    FirstRetryWhenSubscriber.prototype.error = function error(err) {\n      if (!this.isUnsubscribed) {\n        _Subscriber.prototype.unsubscribe.call(this);\n        if (!this.retryNotifications) {\n          this.errors = new _Subject2['default']();\n          var notifications = _utilTryCatch2['default'](this.notifier).call(this, this.errors);\n          if (notifications === _utilErrorObject.errorObject) {\n            this.destination.error(_utilErrorObject.errorObject.e);\n          } else {\n            this.retryNotifications = notifications;\n            var notificationSubscriber = new RetryNotificationSubscriber(this);\n            this.notificationSubscription = notifications.subscribe(notificationSubscriber);\n          }\n        }\n        this.errors.next(err);\n      }\n    };\n    FirstRetryWhenSubscriber.prototype.destinationError = function destinationError(err) {\n      this.tearDown();\n      this.destination.error(err);\n    };\n    FirstRetryWhenSubscriber.prototype._complete = function _complete() {\n      this.destinationComplete();\n    };\n    FirstRetryWhenSubscriber.prototype.destinationComplete = function destinationComplete() {\n      this.tearDown();\n      this.destination.complete();\n    };\n    FirstRetryWhenSubscriber.prototype.unsubscribe = function unsubscribe() {\n      var lastSubscription = this.lastSubscription;\n      if (lastSubscription === this) {\n        _Subscriber.prototype.unsubscribe.call(this);\n      } else {\n        this.tearDown();\n      }\n    };\n    FirstRetryWhenSubscriber.prototype.tearDown = function tearDown() {\n      _Subscriber.prototype.unsubscribe.call(this);\n      this.lastSubscription.unsubscribe();\n      var notificationSubscription = this.notificationSubscription;\n      if (notificationSubscription) {\n        notificationSubscription.unsubscribe();\n      }\n    };\n    FirstRetryWhenSubscriber.prototype.resubscribe = function resubscribe() {\n      this.lastSubscription.unsubscribe();\n      var nextSubscriber = new MoreRetryWhenSubscriber(this);\n      this.lastSubscription = this.source.subscribe(nextSubscriber);\n    };\n    return FirstRetryWhenSubscriber;\n  })(_Subscriber5['default']);\n  var MoreRetryWhenSubscriber = (function(_Subscriber2) {\n    _inherits(MoreRetryWhenSubscriber, _Subscriber2);\n    function MoreRetryWhenSubscriber(parent) {\n      _classCallCheck(this, MoreRetryWhenSubscriber);\n      _Subscriber2.call(this, null);\n      this.parent = parent;\n    }\n    MoreRetryWhenSubscriber.prototype._next = function _next(value) {\n      this.parent.destination.next(value);\n    };\n    MoreRetryWhenSubscriber.prototype._error = function _error(err) {\n      this.parent.errors.next(err);\n    };\n    MoreRetryWhenSubscriber.prototype._complete = function _complete() {\n      this.parent.destinationComplete();\n    };\n    return MoreRetryWhenSubscriber;\n  })(_Subscriber5['default']);\n  var RetryNotificationSubscriber = (function(_Subscriber3) {\n    _inherits(RetryNotificationSubscriber, _Subscriber3);\n    function RetryNotificationSubscriber(parent) {\n      _classCallCheck(this, RetryNotificationSubscriber);\n      _Subscriber3.call(this, null);\n      this.parent = parent;\n    }\n    RetryNotificationSubscriber.prototype._next = function _next(value) {\n      this.parent.resubscribe();\n    };\n    RetryNotificationSubscriber.prototype._error = function _error(err) {\n      this.parent.destinationError(err);\n    };\n    RetryNotificationSubscriber.prototype._complete = function _complete() {\n      this.parent.destinationComplete();\n    };\n    return RetryNotificationSubscriber;\n  })(_Subscriber5['default']);\n  module.exports = exports['default'];\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"@reactivex/rxjs/dist/cjs/operators/sample\", [\"@reactivex/rxjs/dist/cjs/Subscriber\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  'use strict';\n  exports.__esModule = true;\n  exports['default'] = sample;\n  function _interopRequireDefault(obj) {\n    return obj && obj.__esModule ? obj : {'default': obj};\n  }\n  function _inherits(subClass, superClass) {\n    if (typeof superClass !== 'function' && superClass !== null) {\n      throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass);\n    }\n    subClass.prototype = Object.create(superClass && superClass.prototype, {constructor: {\n        value: subClass,\n        enumerable: false,\n        writable: true,\n        configurable: true\n      }});\n    if (superClass)\n      Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass;\n  }\n  function _classCallCheck(instance, Constructor) {\n    if (!(instance instanceof Constructor)) {\n      throw new TypeError('Cannot call a class as a function');\n    }\n  }\n  var _Subscriber3 = require(\"@reactivex/rxjs/dist/cjs/Subscriber\");\n  var _Subscriber4 = _interopRequireDefault(_Subscriber3);\n  function sample(notifier) {\n    return this.lift(new SampleOperator(notifier));\n  }\n  var SampleOperator = (function() {\n    function SampleOperator(notifier) {\n      _classCallCheck(this, SampleOperator);\n      this.notifier = notifier;\n    }\n    SampleOperator.prototype.call = function call(subscriber) {\n      return new SampleSubscriber(subscriber, this.notifier);\n    };\n    return SampleOperator;\n  })();\n  var SampleSubscriber = (function(_Subscriber) {\n    _inherits(SampleSubscriber, _Subscriber);\n    function SampleSubscriber(destination, notifier) {\n      _classCallCheck(this, SampleSubscriber);\n      _Subscriber.call(this, destination);\n      this.notifier = notifier;\n      this.hasValue = false;\n      this.add(notifier._subscribe(new SampleNoficationSubscriber(this)));\n    }\n    SampleSubscriber.prototype._next = function _next(value) {\n      this.lastValue = value;\n      this.hasValue = true;\n    };\n    SampleSubscriber.prototype.notifyNext = function notifyNext() {\n      if (this.hasValue) {\n        this.destination.next(this.lastValue);\n      }\n    };\n    return SampleSubscriber;\n  })(_Subscriber4['default']);\n  var SampleNoficationSubscriber = (function(_Subscriber2) {\n    _inherits(SampleNoficationSubscriber, _Subscriber2);\n    function SampleNoficationSubscriber(parent) {\n      _classCallCheck(this, SampleNoficationSubscriber);\n      _Subscriber2.call(this, null);\n      this.parent = parent;\n    }\n    SampleNoficationSubscriber.prototype._next = function _next() {\n      this.parent.notifyNext();\n    };\n    SampleNoficationSubscriber.prototype._error = function _error(err) {\n      this.parent.error(err);\n    };\n    SampleNoficationSubscriber.prototype._complete = function _complete() {};\n    return SampleNoficationSubscriber;\n  })(_Subscriber4['default']);\n  module.exports = exports['default'];\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"@reactivex/rxjs/dist/cjs/operators/sampleTime\", [\"@reactivex/rxjs/dist/cjs/Subscriber\", \"@reactivex/rxjs/dist/cjs/schedulers/nextTick\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  'use strict';\n  exports.__esModule = true;\n  exports['default'] = sampleTime;\n  function _interopRequireDefault(obj) {\n    return obj && obj.__esModule ? obj : {'default': obj};\n  }\n  function _inherits(subClass, superClass) {\n    if (typeof superClass !== 'function' && superClass !== null) {\n      throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass);\n    }\n    subClass.prototype = Object.create(superClass && superClass.prototype, {constructor: {\n        value: subClass,\n        enumerable: false,\n        writable: true,\n        configurable: true\n      }});\n    if (superClass)\n      Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass;\n  }\n  function _classCallCheck(instance, Constructor) {\n    if (!(instance instanceof Constructor)) {\n      throw new TypeError('Cannot call a class as a function');\n    }\n  }\n  var _Subscriber2 = require(\"@reactivex/rxjs/dist/cjs/Subscriber\");\n  var _Subscriber3 = _interopRequireDefault(_Subscriber2);\n  var _schedulersNextTick = require(\"@reactivex/rxjs/dist/cjs/schedulers/nextTick\");\n  var _schedulersNextTick2 = _interopRequireDefault(_schedulersNextTick);\n  function sampleTime(delay) {\n    var scheduler = arguments.length <= 1 || arguments[1] === undefined ? _schedulersNextTick2['default'] : arguments[1];\n    return this.lift(new SampleTimeOperator(delay, scheduler));\n  }\n  var SampleTimeOperator = (function() {\n    function SampleTimeOperator(delay, scheduler) {\n      _classCallCheck(this, SampleTimeOperator);\n      this.delay = delay;\n      this.scheduler = scheduler;\n    }\n    SampleTimeOperator.prototype.call = function call(subscriber) {\n      return new SampleTimeSubscriber(subscriber, this.delay, this.scheduler);\n    };\n    return SampleTimeOperator;\n  })();\n  var SampleTimeSubscriber = (function(_Subscriber) {\n    _inherits(SampleTimeSubscriber, _Subscriber);\n    function SampleTimeSubscriber(destination, delay, scheduler) {\n      _classCallCheck(this, SampleTimeSubscriber);\n      _Subscriber.call(this, destination);\n      this.delay = delay;\n      this.scheduler = scheduler;\n      this.hasValue = false;\n      this.add(scheduler.schedule(dispatchNotification, delay, {\n        subscriber: this,\n        delay: delay\n      }));\n    }\n    SampleTimeSubscriber.prototype._next = function _next(value) {\n      this.lastValue = value;\n      this.hasValue = true;\n    };\n    SampleTimeSubscriber.prototype.notifyNext = function notifyNext() {\n      if (this.hasValue) {\n        this.destination.next(this.lastValue);\n      }\n    };\n    return SampleTimeSubscriber;\n  })(_Subscriber3['default']);\n  function dispatchNotification(state) {\n    var subscriber = state.subscriber;\n    var delay = state.delay;\n    subscriber.notifyNext();\n    this.schedule(state, delay);\n  }\n  module.exports = exports['default'];\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"@reactivex/rxjs/dist/cjs/operators/scan\", [\"@reactivex/rxjs/dist/cjs/Subscriber\", \"@reactivex/rxjs/dist/cjs/util/tryCatch\", \"@reactivex/rxjs/dist/cjs/util/errorObject\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  'use strict';\n  exports.__esModule = true;\n  var _createClass = (function() {\n    function defineProperties(target, props) {\n      for (var i = 0; i < props.length; i++) {\n        var descriptor = props[i];\n        descriptor.enumerable = descriptor.enumerable || false;\n        descriptor.configurable = true;\n        if ('value' in descriptor)\n          descriptor.writable = true;\n        Object.defineProperty(target, descriptor.key, descriptor);\n      }\n    }\n    return function(Constructor, protoProps, staticProps) {\n      if (protoProps)\n        defineProperties(Constructor.prototype, protoProps);\n      if (staticProps)\n        defineProperties(Constructor, staticProps);\n      return Constructor;\n    };\n  })();\n  exports['default'] = scan;\n  function _interopRequireDefault(obj) {\n    return obj && obj.__esModule ? obj : {'default': obj};\n  }\n  function _inherits(subClass, superClass) {\n    if (typeof superClass !== 'function' && superClass !== null) {\n      throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass);\n    }\n    subClass.prototype = Object.create(superClass && superClass.prototype, {constructor: {\n        value: subClass,\n        enumerable: false,\n        writable: true,\n        configurable: true\n      }});\n    if (superClass)\n      Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass;\n  }\n  function _classCallCheck(instance, Constructor) {\n    if (!(instance instanceof Constructor)) {\n      throw new TypeError('Cannot call a class as a function');\n    }\n  }\n  var _Subscriber2 = require(\"@reactivex/rxjs/dist/cjs/Subscriber\");\n  var _Subscriber3 = _interopRequireDefault(_Subscriber2);\n  var _utilTryCatch = require(\"@reactivex/rxjs/dist/cjs/util/tryCatch\");\n  var _utilTryCatch2 = _interopRequireDefault(_utilTryCatch);\n  var _utilErrorObject = require(\"@reactivex/rxjs/dist/cjs/util/errorObject\");\n  function scan(project, acc) {\n    return this.lift(new ScanOperator(project, acc));\n  }\n  var ScanOperator = (function() {\n    function ScanOperator(project, acc) {\n      _classCallCheck(this, ScanOperator);\n      this.acc = acc;\n      this.project = project;\n    }\n    ScanOperator.prototype.call = function call(subscriber) {\n      return new ScanSubscriber(subscriber, this.project, this.acc);\n    };\n    return ScanOperator;\n  })();\n  var ScanSubscriber = (function(_Subscriber) {\n    _inherits(ScanSubscriber, _Subscriber);\n    function ScanSubscriber(destination, project, acc) {\n      _classCallCheck(this, ScanSubscriber);\n      _Subscriber.call(this, destination);\n      this.accumulatorSet = false;\n      this.acc = acc;\n      this.project = project;\n      this.accumulatorSet = typeof acc !== 'undefined';\n    }\n    ScanSubscriber.prototype._next = function _next(x) {\n      if (!this.accumulatorSet) {\n        this.acc = x;\n        this.destination.next(x);\n      } else {\n        var result = _utilTryCatch2['default'](this.project).call(this, this.acc, x);\n        if (result === _utilErrorObject.errorObject) {\n          this.destination.error(_utilErrorObject.errorObject.e);\n        } else {\n          this.acc = result;\n          this.destination.next(this.acc);\n        }\n      }\n    };\n    _createClass(ScanSubscriber, [{\n      key: 'acc',\n      get: function get() {\n        return this._acc;\n      },\n      set: function set(value) {\n        this.accumulatorSet = true;\n        this._acc = value;\n      }\n    }]);\n    return ScanSubscriber;\n  })(_Subscriber3['default']);\n  module.exports = exports['default'];\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"@reactivex/rxjs/dist/cjs/operators/share\", [\"@reactivex/rxjs/dist/cjs/operators/publish\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  'use strict';\n  exports.__esModule = true;\n  exports['default'] = share;\n  function _interopRequireDefault(obj) {\n    return obj && obj.__esModule ? obj : {'default': obj};\n  }\n  var _publish = require(\"@reactivex/rxjs/dist/cjs/operators/publish\");\n  var _publish2 = _interopRequireDefault(_publish);\n  function share() {\n    return _publish2['default'].call(this).refCount();\n  }\n  ;\n  module.exports = exports['default'];\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"@reactivex/rxjs/dist/cjs/operators/shareBehavior\", [\"@reactivex/rxjs/dist/cjs/operators/publishBehavior\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  'use strict';\n  exports.__esModule = true;\n  exports['default'] = shareBehavior;\n  function _interopRequireDefault(obj) {\n    return obj && obj.__esModule ? obj : {'default': obj};\n  }\n  var _publishBehavior = require(\"@reactivex/rxjs/dist/cjs/operators/publishBehavior\");\n  var _publishBehavior2 = _interopRequireDefault(_publishBehavior);\n  function shareBehavior(value) {\n    return _publishBehavior2['default'].call(this, value).refCount();\n  }\n  module.exports = exports['default'];\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"@reactivex/rxjs/dist/cjs/operators/shareReplay\", [\"@reactivex/rxjs/dist/cjs/operators/publishReplay\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  'use strict';\n  exports.__esModule = true;\n  exports['default'] = shareReplay;\n  function _interopRequireDefault(obj) {\n    return obj && obj.__esModule ? obj : {'default': obj};\n  }\n  var _publishReplay = require(\"@reactivex/rxjs/dist/cjs/operators/publishReplay\");\n  var _publishReplay2 = _interopRequireDefault(_publishReplay);\n  function shareReplay(bufferSize, windowTime, scheduler) {\n    if (bufferSize === undefined)\n      bufferSize = Number.POSITIVE_INFINITY;\n    if (windowTime === undefined)\n      windowTime = Number.POSITIVE_INFINITY;\n    return _publishReplay2['default'].call(this, bufferSize, windowTime, scheduler).refCount();\n  }\n  module.exports = exports['default'];\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"@reactivex/rxjs/dist/cjs/operators/single\", [\"@reactivex/rxjs/dist/cjs/Subscriber\", \"@reactivex/rxjs/dist/cjs/util/tryCatch\", \"@reactivex/rxjs/dist/cjs/util/errorObject\", \"@reactivex/rxjs/dist/cjs/util/bindCallback\", \"@reactivex/rxjs/dist/cjs/util/EmptyError\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  'use strict';\n  exports.__esModule = true;\n  exports['default'] = single;\n  function _interopRequireDefault(obj) {\n    return obj && obj.__esModule ? obj : {'default': obj};\n  }\n  function _inherits(subClass, superClass) {\n    if (typeof superClass !== 'function' && superClass !== null) {\n      throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass);\n    }\n    subClass.prototype = Object.create(superClass && superClass.prototype, {constructor: {\n        value: subClass,\n        enumerable: false,\n        writable: true,\n        configurable: true\n      }});\n    if (superClass)\n      Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass;\n  }\n  function _classCallCheck(instance, Constructor) {\n    if (!(instance instanceof Constructor)) {\n      throw new TypeError('Cannot call a class as a function');\n    }\n  }\n  var _Subscriber2 = require(\"@reactivex/rxjs/dist/cjs/Subscriber\");\n  var _Subscriber3 = _interopRequireDefault(_Subscriber2);\n  var _utilTryCatch = require(\"@reactivex/rxjs/dist/cjs/util/tryCatch\");\n  var _utilTryCatch2 = _interopRequireDefault(_utilTryCatch);\n  var _utilErrorObject = require(\"@reactivex/rxjs/dist/cjs/util/errorObject\");\n  var _utilBindCallback = require(\"@reactivex/rxjs/dist/cjs/util/bindCallback\");\n  var _utilBindCallback2 = _interopRequireDefault(_utilBindCallback);\n  var _utilEmptyError = require(\"@reactivex/rxjs/dist/cjs/util/EmptyError\");\n  var _utilEmptyError2 = _interopRequireDefault(_utilEmptyError);\n  function single(predicate, thisArg) {\n    return this.lift(new SingleOperator(predicate, thisArg, this));\n  }\n  var SingleOperator = (function() {\n    function SingleOperator(predicate, thisArg, source) {\n      _classCallCheck(this, SingleOperator);\n      this.predicate = predicate;\n      this.thisArg = thisArg;\n      this.source = source;\n    }\n    SingleOperator.prototype.call = function call(subscriber) {\n      return new SingleSubscriber(subscriber, this.predicate, this.thisArg, this.source);\n    };\n    return SingleOperator;\n  })();\n  var SingleSubscriber = (function(_Subscriber) {\n    _inherits(SingleSubscriber, _Subscriber);\n    function SingleSubscriber(destination, predicate, thisArg, source) {\n      _classCallCheck(this, SingleSubscriber);\n      _Subscriber.call(this, destination);\n      this.thisArg = thisArg;\n      this.source = source;\n      this.seenValue = false;\n      this.index = 0;\n      if (typeof predicate === 'function') {\n        this.predicate = _utilBindCallback2['default'](predicate, thisArg, 3);\n      }\n    }\n    SingleSubscriber.prototype.applySingleValue = function applySingleValue(value) {\n      if (this.seenValue) {\n        this.destination.error('Sequence contains more than one element');\n      } else {\n        this.seenValue = true;\n        this.singleValue = value;\n      }\n    };\n    SingleSubscriber.prototype._next = function _next(value) {\n      var predicate = this.predicate;\n      var currentIndex = this.index++;\n      if (predicate) {\n        var result = _utilTryCatch2['default'](predicate)(value, currentIndex, this.source);\n        if (result === _utilErrorObject.errorObject) {\n          this.destination.error(result.e);\n        } else if (result) {\n          this.applySingleValue(value);\n        }\n      } else {\n        this.applySingleValue(value);\n      }\n    };\n    SingleSubscriber.prototype._complete = function _complete() {\n      var destination = this.destination;\n      if (this.index > 0) {\n        destination.next(this.seenValue ? this.singleValue : undefined);\n        destination.complete();\n      } else {\n        destination.error(new _utilEmptyError2['default']());\n      }\n    };\n    return SingleSubscriber;\n  })(_Subscriber3['default']);\n  module.exports = exports['default'];\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"@reactivex/rxjs/dist/cjs/operators/skip\", [\"@reactivex/rxjs/dist/cjs/Subscriber\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  'use strict';\n  exports.__esModule = true;\n  exports['default'] = skip;\n  function _interopRequireDefault(obj) {\n    return obj && obj.__esModule ? obj : {'default': obj};\n  }\n  function _inherits(subClass, superClass) {\n    if (typeof superClass !== 'function' && superClass !== null) {\n      throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass);\n    }\n    subClass.prototype = Object.create(superClass && superClass.prototype, {constructor: {\n        value: subClass,\n        enumerable: false,\n        writable: true,\n        configurable: true\n      }});\n    if (superClass)\n      Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass;\n  }\n  function _classCallCheck(instance, Constructor) {\n    if (!(instance instanceof Constructor)) {\n      throw new TypeError('Cannot call a class as a function');\n    }\n  }\n  var _Subscriber2 = require(\"@reactivex/rxjs/dist/cjs/Subscriber\");\n  var _Subscriber3 = _interopRequireDefault(_Subscriber2);\n  function skip(total) {\n    return this.lift(new SkipOperator(total));\n  }\n  var SkipOperator = (function() {\n    function SkipOperator(total) {\n      _classCallCheck(this, SkipOperator);\n      this.total = total;\n    }\n    SkipOperator.prototype.call = function call(subscriber) {\n      return new SkipSubscriber(subscriber, this.total);\n    };\n    return SkipOperator;\n  })();\n  var SkipSubscriber = (function(_Subscriber) {\n    _inherits(SkipSubscriber, _Subscriber);\n    function SkipSubscriber(destination, total) {\n      _classCallCheck(this, SkipSubscriber);\n      _Subscriber.call(this, destination);\n      this.total = total;\n      this.count = 0;\n    }\n    SkipSubscriber.prototype._next = function _next(x) {\n      if (++this.count > this.total) {\n        this.destination.next(x);\n      }\n    };\n    return SkipSubscriber;\n  })(_Subscriber3['default']);\n  module.exports = exports['default'];\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"@reactivex/rxjs/dist/cjs/operators/skipUntil\", [\"@reactivex/rxjs/dist/cjs/Subscriber\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  'use strict';\n  exports.__esModule = true;\n  exports['default'] = skipUntil;\n  function _interopRequireDefault(obj) {\n    return obj && obj.__esModule ? obj : {'default': obj};\n  }\n  function _inherits(subClass, superClass) {\n    if (typeof superClass !== 'function' && superClass !== null) {\n      throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass);\n    }\n    subClass.prototype = Object.create(superClass && superClass.prototype, {constructor: {\n        value: subClass,\n        enumerable: false,\n        writable: true,\n        configurable: true\n      }});\n    if (superClass)\n      Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass;\n  }\n  function _classCallCheck(instance, Constructor) {\n    if (!(instance instanceof Constructor)) {\n      throw new TypeError('Cannot call a class as a function');\n    }\n  }\n  var _Subscriber3 = require(\"@reactivex/rxjs/dist/cjs/Subscriber\");\n  var _Subscriber4 = _interopRequireDefault(_Subscriber3);\n  function skipUntil(total) {\n    return this.lift(new SkipUntilOperator(total));\n  }\n  var SkipUntilOperator = (function() {\n    function SkipUntilOperator(notifier) {\n      _classCallCheck(this, SkipUntilOperator);\n      this.notifier = notifier;\n    }\n    SkipUntilOperator.prototype.call = function call(subscriber) {\n      return new SkipUntilSubscriber(subscriber, this.notifier);\n    };\n    return SkipUntilOperator;\n  })();\n  var SkipUntilSubscriber = (function(_Subscriber) {\n    _inherits(SkipUntilSubscriber, _Subscriber);\n    function SkipUntilSubscriber(destination, notifier) {\n      _classCallCheck(this, SkipUntilSubscriber);\n      _Subscriber.call(this, destination);\n      this.notifier = notifier;\n      this.notificationSubscriber = null;\n      this.notificationSubscriber = new NotificationSubscriber(this);\n      this.add(this.notifier.subscribe(this.notificationSubscriber));\n    }\n    SkipUntilSubscriber.prototype._next = function _next(value) {\n      if (this.notificationSubscriber.hasValue) {\n        this.destination.next(value);\n      }\n    };\n    SkipUntilSubscriber.prototype._complete = function _complete() {\n      if (this.notificationSubscriber.hasCompleted) {\n        this.destination.complete();\n      }\n      this.notificationSubscriber.unsubscribe();\n    };\n    return SkipUntilSubscriber;\n  })(_Subscriber4['default']);\n  var NotificationSubscriber = (function(_Subscriber2) {\n    _inherits(NotificationSubscriber, _Subscriber2);\n    function NotificationSubscriber(parent) {\n      _classCallCheck(this, NotificationSubscriber);\n      _Subscriber2.call(this, null);\n      this.parent = parent;\n      this.hasValue = false;\n      this.hasCompleted = false;\n    }\n    NotificationSubscriber.prototype._next = function _next(unused) {\n      this.hasValue = true;\n    };\n    NotificationSubscriber.prototype._error = function _error(err) {\n      this.parent.error(err);\n      this.hasValue = true;\n    };\n    NotificationSubscriber.prototype._complete = function _complete() {\n      this.hasCompleted = true;\n    };\n    return NotificationSubscriber;\n  })(_Subscriber4['default']);\n  module.exports = exports['default'];\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"@reactivex/rxjs/dist/cjs/operators/startWith\", [\"@reactivex/rxjs/dist/cjs/observables/ArrayObservable\", \"@reactivex/rxjs/dist/cjs/observables/ScalarObservable\", \"@reactivex/rxjs/dist/cjs/observables/EmptyObservable\", \"@reactivex/rxjs/dist/cjs/operators/concat-static\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  'use strict';\n  exports.__esModule = true;\n  exports['default'] = startWith;\n  function _interopRequireDefault(obj) {\n    return obj && obj.__esModule ? obj : {'default': obj};\n  }\n  var _observablesArrayObservable = require(\"@reactivex/rxjs/dist/cjs/observables/ArrayObservable\");\n  var _observablesArrayObservable2 = _interopRequireDefault(_observablesArrayObservable);\n  var _observablesScalarObservable = require(\"@reactivex/rxjs/dist/cjs/observables/ScalarObservable\");\n  var _observablesScalarObservable2 = _interopRequireDefault(_observablesScalarObservable);\n  var _observablesEmptyObservable = require(\"@reactivex/rxjs/dist/cjs/observables/EmptyObservable\");\n  var _observablesEmptyObservable2 = _interopRequireDefault(_observablesEmptyObservable);\n  var _concatStatic = require(\"@reactivex/rxjs/dist/cjs/operators/concat-static\");\n  var _concatStatic2 = _interopRequireDefault(_concatStatic);\n  function startWith() {\n    for (var _len = arguments.length,\n        array = Array(_len),\n        _key = 0; _key < _len; _key++) {\n      array[_key] = arguments[_key];\n    }\n    var scheduler = array[array.length - 1];\n    if (scheduler && typeof scheduler.schedule === 'function') {\n      array.pop();\n    } else {\n      scheduler = void 0;\n    }\n    var len = array.length;\n    if (len === 1) {\n      return _concatStatic2['default'](new _observablesScalarObservable2['default'](array[0], scheduler), this);\n    } else if (len > 1) {\n      return _concatStatic2['default'](new _observablesArrayObservable2['default'](array, scheduler), this);\n    } else {\n      return _concatStatic2['default'](new _observablesEmptyObservable2['default'](scheduler), this);\n    }\n  }\n  module.exports = exports['default'];\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"@reactivex/rxjs/dist/cjs/observables/SubscribeOnObservable\", [\"@reactivex/rxjs/dist/cjs/Observable\", \"@reactivex/rxjs/dist/cjs/schedulers/nextTick\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  'use strict';\n  exports.__esModule = true;\n  function _interopRequireDefault(obj) {\n    return obj && obj.__esModule ? obj : {'default': obj};\n  }\n  function _classCallCheck(instance, Constructor) {\n    if (!(instance instanceof Constructor)) {\n      throw new TypeError('Cannot call a class as a function');\n    }\n  }\n  function _inherits(subClass, superClass) {\n    if (typeof superClass !== 'function' && superClass !== null) {\n      throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass);\n    }\n    subClass.prototype = Object.create(superClass && superClass.prototype, {constructor: {\n        value: subClass,\n        enumerable: false,\n        writable: true,\n        configurable: true\n      }});\n    if (superClass)\n      Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass;\n  }\n  var _Observable2 = require(\"@reactivex/rxjs/dist/cjs/Observable\");\n  var _Observable3 = _interopRequireDefault(_Observable2);\n  var _schedulersNextTick = require(\"@reactivex/rxjs/dist/cjs/schedulers/nextTick\");\n  var _schedulersNextTick2 = _interopRequireDefault(_schedulersNextTick);\n  var SubscribeOnObservable = (function(_Observable) {\n    _inherits(SubscribeOnObservable, _Observable);\n    function SubscribeOnObservable(source) {\n      var delay = arguments.length <= 1 || arguments[1] === undefined ? 0 : arguments[1];\n      var scheduler = arguments.length <= 2 || arguments[2] === undefined ? _schedulersNextTick2['default'] : arguments[2];\n      _classCallCheck(this, SubscribeOnObservable);\n      _Observable.call(this);\n      this.source = source;\n      this.delayTime = delay;\n      this.scheduler = scheduler;\n    }\n    SubscribeOnObservable.create = function create(source) {\n      var delay = arguments.length <= 1 || arguments[1] === undefined ? 0 : arguments[1];\n      var scheduler = arguments.length <= 2 || arguments[2] === undefined ? _schedulersNextTick2['default'] : arguments[2];\n      return new SubscribeOnObservable(source, delay, scheduler);\n    };\n    SubscribeOnObservable.dispatch = function dispatch(_ref) {\n      var source = _ref.source;\n      var subscriber = _ref.subscriber;\n      return source.subscribe(subscriber);\n    };\n    SubscribeOnObservable.prototype._subscribe = function _subscribe(subscriber) {\n      var delay = this.delayTime;\n      var source = this.source;\n      var scheduler = this.scheduler;\n      subscriber.add(scheduler.schedule(SubscribeOnObservable.dispatch, delay, {\n        source: source,\n        subscriber: subscriber\n      }));\n    };\n    return SubscribeOnObservable;\n  })(_Observable3['default']);\n  exports['default'] = SubscribeOnObservable;\n  module.exports = exports['default'];\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"@reactivex/rxjs/dist/cjs/operators/switch\", [\"@reactivex/rxjs/dist/cjs/OuterSubscriber\", \"@reactivex/rxjs/dist/cjs/util/subscribeToResult\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  'use strict';\n  exports.__esModule = true;\n  exports['default'] = _switch;\n  function _interopRequireDefault(obj) {\n    return obj && obj.__esModule ? obj : {'default': obj};\n  }\n  function _inherits(subClass, superClass) {\n    if (typeof superClass !== 'function' && superClass !== null) {\n      throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass);\n    }\n    subClass.prototype = Object.create(superClass && superClass.prototype, {constructor: {\n        value: subClass,\n        enumerable: false,\n        writable: true,\n        configurable: true\n      }});\n    if (superClass)\n      Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass;\n  }\n  function _classCallCheck(instance, Constructor) {\n    if (!(instance instanceof Constructor)) {\n      throw new TypeError('Cannot call a class as a function');\n    }\n  }\n  var _OuterSubscriber2 = require(\"@reactivex/rxjs/dist/cjs/OuterSubscriber\");\n  var _OuterSubscriber3 = _interopRequireDefault(_OuterSubscriber2);\n  var _utilSubscribeToResult = require(\"@reactivex/rxjs/dist/cjs/util/subscribeToResult\");\n  var _utilSubscribeToResult2 = _interopRequireDefault(_utilSubscribeToResult);\n  function _switch() {\n    return this.lift(new SwitchOperator());\n  }\n  var SwitchOperator = (function() {\n    function SwitchOperator() {\n      _classCallCheck(this, SwitchOperator);\n    }\n    SwitchOperator.prototype.call = function call(subscriber) {\n      return new SwitchSubscriber(subscriber);\n    };\n    return SwitchOperator;\n  })();\n  var SwitchSubscriber = (function(_OuterSubscriber) {\n    _inherits(SwitchSubscriber, _OuterSubscriber);\n    function SwitchSubscriber(destination) {\n      _classCallCheck(this, SwitchSubscriber);\n      _OuterSubscriber.call(this, destination);\n      this.active = 0;\n      this.hasCompleted = false;\n    }\n    SwitchSubscriber.prototype._next = function _next(value) {\n      this.unsubscribeInner();\n      this.active++;\n      this.add(this.innerSubscription = _utilSubscribeToResult2['default'](this, value));\n    };\n    SwitchSubscriber.prototype._complete = function _complete() {\n      this.hasCompleted = true;\n      if (this.active === 0) {\n        this.destination.complete();\n      }\n    };\n    SwitchSubscriber.prototype.unsubscribeInner = function unsubscribeInner() {\n      this.active = this.active > 0 ? this.active - 1 : 0;\n      var innerSubscription = this.innerSubscription;\n      if (innerSubscription) {\n        innerSubscription.unsubscribe();\n        this.remove(innerSubscription);\n      }\n    };\n    SwitchSubscriber.prototype.notifyNext = function notifyNext(outerValue, innerValue) {\n      this.destination.next(innerValue);\n    };\n    SwitchSubscriber.prototype.notifyError = function notifyError(err) {\n      this.destination.error(err);\n    };\n    SwitchSubscriber.prototype.notifyComplete = function notifyComplete() {\n      this.unsubscribeInner();\n      if (this.hasCompleted && this.active === 0) {\n        this.destination.complete();\n      }\n    };\n    return SwitchSubscriber;\n  })(_OuterSubscriber3['default']);\n  module.exports = exports['default'];\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"@reactivex/rxjs/dist/cjs/operators/switchMap\", [\"@reactivex/rxjs/dist/cjs/util/tryCatch\", \"@reactivex/rxjs/dist/cjs/util/errorObject\", \"@reactivex/rxjs/dist/cjs/OuterSubscriber\", \"@reactivex/rxjs/dist/cjs/util/subscribeToResult\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  'use strict';\n  exports.__esModule = true;\n  exports['default'] = switchMap;\n  function _interopRequireDefault(obj) {\n    return obj && obj.__esModule ? obj : {'default': obj};\n  }\n  function _inherits(subClass, superClass) {\n    if (typeof superClass !== 'function' && superClass !== null) {\n      throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass);\n    }\n    subClass.prototype = Object.create(superClass && superClass.prototype, {constructor: {\n        value: subClass,\n        enumerable: false,\n        writable: true,\n        configurable: true\n      }});\n    if (superClass)\n      Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass;\n  }\n  function _classCallCheck(instance, Constructor) {\n    if (!(instance instanceof Constructor)) {\n      throw new TypeError('Cannot call a class as a function');\n    }\n  }\n  var _utilTryCatch = require(\"@reactivex/rxjs/dist/cjs/util/tryCatch\");\n  var _utilTryCatch2 = _interopRequireDefault(_utilTryCatch);\n  var _utilErrorObject = require(\"@reactivex/rxjs/dist/cjs/util/errorObject\");\n  var _OuterSubscriber2 = require(\"@reactivex/rxjs/dist/cjs/OuterSubscriber\");\n  var _OuterSubscriber3 = _interopRequireDefault(_OuterSubscriber2);\n  var _utilSubscribeToResult = require(\"@reactivex/rxjs/dist/cjs/util/subscribeToResult\");\n  var _utilSubscribeToResult2 = _interopRequireDefault(_utilSubscribeToResult);\n  function switchMap(project, resultSelector) {\n    return this.lift(new SwitchMapOperator(project, resultSelector));\n  }\n  var SwitchMapOperator = (function() {\n    function SwitchMapOperator(project, resultSelector) {\n      _classCallCheck(this, SwitchMapOperator);\n      this.project = project;\n      this.resultSelector = resultSelector;\n    }\n    SwitchMapOperator.prototype.call = function call(subscriber) {\n      return new SwitchMapSubscriber(subscriber, this.project, this.resultSelector);\n    };\n    return SwitchMapOperator;\n  })();\n  var SwitchMapSubscriber = (function(_OuterSubscriber) {\n    _inherits(SwitchMapSubscriber, _OuterSubscriber);\n    function SwitchMapSubscriber(destination, project, resultSelector) {\n      _classCallCheck(this, SwitchMapSubscriber);\n      _OuterSubscriber.call(this, destination);\n      this.project = project;\n      this.resultSelector = resultSelector;\n      this.hasCompleted = false;\n      this.index = 0;\n    }\n    SwitchMapSubscriber.prototype._next = function _next(value) {\n      var index = this.index++;\n      var destination = this.destination;\n      var result = _utilTryCatch2['default'](this.project)(value, index);\n      if (result === _utilErrorObject.errorObject) {\n        destination.error(result.e);\n      } else {\n        var innerSubscription = this.innerSubscription;\n        if (innerSubscription) {\n          innerSubscription.unsubscribe();\n        }\n        this.add(this.innerSubscription = _utilSubscribeToResult2['default'](this, result, value, index));\n      }\n    };\n    SwitchMapSubscriber.prototype._complete = function _complete() {\n      var innerSubscription = this.innerSubscription;\n      this.hasCompleted = true;\n      if (!innerSubscription || innerSubscription.isUnsubscribed) {\n        this.destination.complete();\n      }\n    };\n    SwitchMapSubscriber.prototype.notifyComplete = function notifyComplete(innerSub) {\n      this.remove(innerSub);\n      var prevSubscription = this.innerSubscription;\n      if (prevSubscription) {\n        prevSubscription.unsubscribe();\n      }\n      this.innerSubscription = null;\n      if (this.hasCompleted) {\n        this.destination.complete();\n      }\n    };\n    SwitchMapSubscriber.prototype.notifyError = function notifyError(err) {\n      this.destination.error(err);\n    };\n    SwitchMapSubscriber.prototype.notifyNext = function notifyNext(outerValue, innerValue, outerIndex, innerIndex) {\n      var resultSelector = this.resultSelector;\n      var destination = this.destination;\n      if (resultSelector) {\n        var result = _utilTryCatch2['default'](resultSelector)(outerValue, innerValue, outerIndex, innerIndex);\n        if (result === _utilErrorObject.errorObject) {\n          destination.error(_utilErrorObject.errorObject.e);\n        } else {\n          destination.next(result);\n        }\n      } else {\n        destination.next(innerValue);\n      }\n    };\n    return SwitchMapSubscriber;\n  })(_OuterSubscriber3['default']);\n  module.exports = exports['default'];\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"@reactivex/rxjs/dist/cjs/operators/switchMapTo\", [\"@reactivex/rxjs/dist/cjs/util/tryCatch\", \"@reactivex/rxjs/dist/cjs/util/errorObject\", \"@reactivex/rxjs/dist/cjs/OuterSubscriber\", \"@reactivex/rxjs/dist/cjs/util/subscribeToResult\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  'use strict';\n  exports.__esModule = true;\n  exports['default'] = switchMapTo;\n  function _interopRequireDefault(obj) {\n    return obj && obj.__esModule ? obj : {'default': obj};\n  }\n  function _inherits(subClass, superClass) {\n    if (typeof superClass !== 'function' && superClass !== null) {\n      throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass);\n    }\n    subClass.prototype = Object.create(superClass && superClass.prototype, {constructor: {\n        value: subClass,\n        enumerable: false,\n        writable: true,\n        configurable: true\n      }});\n    if (superClass)\n      Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass;\n  }\n  function _classCallCheck(instance, Constructor) {\n    if (!(instance instanceof Constructor)) {\n      throw new TypeError('Cannot call a class as a function');\n    }\n  }\n  var _utilTryCatch = require(\"@reactivex/rxjs/dist/cjs/util/tryCatch\");\n  var _utilTryCatch2 = _interopRequireDefault(_utilTryCatch);\n  var _utilErrorObject = require(\"@reactivex/rxjs/dist/cjs/util/errorObject\");\n  var _OuterSubscriber2 = require(\"@reactivex/rxjs/dist/cjs/OuterSubscriber\");\n  var _OuterSubscriber3 = _interopRequireDefault(_OuterSubscriber2);\n  var _utilSubscribeToResult = require(\"@reactivex/rxjs/dist/cjs/util/subscribeToResult\");\n  var _utilSubscribeToResult2 = _interopRequireDefault(_utilSubscribeToResult);\n  function switchMapTo(observable, projectResult) {\n    return this.lift(new SwitchMapToOperator(observable, projectResult));\n  }\n  var SwitchMapToOperator = (function() {\n    function SwitchMapToOperator(observable, resultSelector) {\n      _classCallCheck(this, SwitchMapToOperator);\n      this.observable = observable;\n      this.resultSelector = resultSelector;\n    }\n    SwitchMapToOperator.prototype.call = function call(subscriber) {\n      return new SwitchMapToSubscriber(subscriber, this.observable, this.resultSelector);\n    };\n    return SwitchMapToOperator;\n  })();\n  var SwitchMapToSubscriber = (function(_OuterSubscriber) {\n    _inherits(SwitchMapToSubscriber, _OuterSubscriber);\n    function SwitchMapToSubscriber(destination, inner, resultSelector) {\n      _classCallCheck(this, SwitchMapToSubscriber);\n      _OuterSubscriber.call(this, destination);\n      this.inner = inner;\n      this.resultSelector = resultSelector;\n      this.hasCompleted = false;\n      this.index = 0;\n    }\n    SwitchMapToSubscriber.prototype._next = function _next(value) {\n      var index = this.index++;\n      var innerSubscription = this.innerSubscription;\n      if (innerSubscription) {\n        innerSubscription.unsubscribe();\n      }\n      this.add(this.innerSubscription = _utilSubscribeToResult2['default'](this, this.inner, value, index));\n    };\n    SwitchMapToSubscriber.prototype._complete = function _complete() {\n      var innerSubscription = this.innerSubscription;\n      this.hasCompleted = true;\n      if (!innerSubscription || innerSubscription.isUnsubscribed) {\n        this.destination.complete();\n      }\n    };\n    SwitchMapToSubscriber.prototype.notifyComplete = function notifyComplete(innerSub) {\n      this.remove(innerSub);\n      var prevSubscription = this.innerSubscription;\n      if (prevSubscription) {\n        prevSubscription.unsubscribe();\n      }\n      this.innerSubscription = null;\n      if (this.hasCompleted) {\n        this.destination.complete();\n      }\n    };\n    SwitchMapToSubscriber.prototype.notifyError = function notifyError(err) {\n      this.destination.error(err);\n    };\n    SwitchMapToSubscriber.prototype.notifyNext = function notifyNext(outerValue, innerValue, outerIndex, innerIndex) {\n      var resultSelector = this.resultSelector;\n      var destination = this.destination;\n      if (resultSelector) {\n        var result = _utilTryCatch2['default'](resultSelector)(outerValue, innerValue, outerIndex, innerIndex);\n        if (result === _utilErrorObject.errorObject) {\n          destination.error(_utilErrorObject.errorObject.e);\n        } else {\n          destination.next(result);\n        }\n      } else {\n        destination.next(innerValue);\n      }\n    };\n    return SwitchMapToSubscriber;\n  })(_OuterSubscriber3['default']);\n  module.exports = exports['default'];\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"@reactivex/rxjs/dist/cjs/operators/take\", [\"@reactivex/rxjs/dist/cjs/Subscriber\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  'use strict';\n  exports.__esModule = true;\n  exports['default'] = take;\n  function _interopRequireDefault(obj) {\n    return obj && obj.__esModule ? obj : {'default': obj};\n  }\n  function _inherits(subClass, superClass) {\n    if (typeof superClass !== 'function' && superClass !== null) {\n      throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass);\n    }\n    subClass.prototype = Object.create(superClass && superClass.prototype, {constructor: {\n        value: subClass,\n        enumerable: false,\n        writable: true,\n        configurable: true\n      }});\n    if (superClass)\n      Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass;\n  }\n  function _classCallCheck(instance, Constructor) {\n    if (!(instance instanceof Constructor)) {\n      throw new TypeError('Cannot call a class as a function');\n    }\n  }\n  var _Subscriber2 = require(\"@reactivex/rxjs/dist/cjs/Subscriber\");\n  var _Subscriber3 = _interopRequireDefault(_Subscriber2);\n  function take(total) {\n    return this.lift(new TakeOperator(total));\n  }\n  var TakeOperator = (function() {\n    function TakeOperator(total) {\n      _classCallCheck(this, TakeOperator);\n      this.total = total;\n    }\n    TakeOperator.prototype.call = function call(subscriber) {\n      return new TakeSubscriber(subscriber, this.total);\n    };\n    return TakeOperator;\n  })();\n  var TakeSubscriber = (function(_Subscriber) {\n    _inherits(TakeSubscriber, _Subscriber);\n    function TakeSubscriber(destination, total) {\n      _classCallCheck(this, TakeSubscriber);\n      _Subscriber.call(this, destination);\n      this.total = total;\n      this.count = 0;\n    }\n    TakeSubscriber.prototype._next = function _next(value) {\n      var total = this.total;\n      if (++this.count <= total) {\n        this.destination.next(value);\n        if (this.count === total) {\n          this.destination.complete();\n        }\n      }\n    };\n    return TakeSubscriber;\n  })(_Subscriber3['default']);\n  module.exports = exports['default'];\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"@reactivex/rxjs/dist/cjs/operators/takeUntil\", [\"@reactivex/rxjs/dist/cjs/Subscriber\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  'use strict';\n  exports.__esModule = true;\n  exports['default'] = takeUntil;\n  function _interopRequireDefault(obj) {\n    return obj && obj.__esModule ? obj : {'default': obj};\n  }\n  function _inherits(subClass, superClass) {\n    if (typeof superClass !== 'function' && superClass !== null) {\n      throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass);\n    }\n    subClass.prototype = Object.create(superClass && superClass.prototype, {constructor: {\n        value: subClass,\n        enumerable: false,\n        writable: true,\n        configurable: true\n      }});\n    if (superClass)\n      Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass;\n  }\n  function _classCallCheck(instance, Constructor) {\n    if (!(instance instanceof Constructor)) {\n      throw new TypeError('Cannot call a class as a function');\n    }\n  }\n  var _Subscriber3 = require(\"@reactivex/rxjs/dist/cjs/Subscriber\");\n  var _Subscriber4 = _interopRequireDefault(_Subscriber3);\n  function takeUntil(notifier) {\n    return this.lift(new TakeUntilOperator(notifier));\n  }\n  var TakeUntilOperator = (function() {\n    function TakeUntilOperator(notifier) {\n      _classCallCheck(this, TakeUntilOperator);\n      this.notifier = notifier;\n    }\n    TakeUntilOperator.prototype.call = function call(subscriber) {\n      return new TakeUntilSubscriber(subscriber, this.notifier);\n    };\n    return TakeUntilOperator;\n  })();\n  var TakeUntilSubscriber = (function(_Subscriber) {\n    _inherits(TakeUntilSubscriber, _Subscriber);\n    function TakeUntilSubscriber(destination, notifier) {\n      _classCallCheck(this, TakeUntilSubscriber);\n      _Subscriber.call(this, destination);\n      this.notifier = notifier;\n      this.notificationSubscriber = null;\n      this.notificationSubscriber = new TakeUntilInnerSubscriber(destination);\n      this.add(notifier.subscribe(this.notificationSubscriber));\n    }\n    TakeUntilSubscriber.prototype._complete = function _complete() {\n      this.destination.complete();\n      this.notificationSubscriber.unsubscribe();\n    };\n    return TakeUntilSubscriber;\n  })(_Subscriber4['default']);\n  var TakeUntilInnerSubscriber = (function(_Subscriber2) {\n    _inherits(TakeUntilInnerSubscriber, _Subscriber2);\n    function TakeUntilInnerSubscriber(destination) {\n      _classCallCheck(this, TakeUntilInnerSubscriber);\n      _Subscriber2.call(this, null);\n      this.destination = destination;\n    }\n    TakeUntilInnerSubscriber.prototype._next = function _next() {\n      this.destination.complete();\n    };\n    TakeUntilInnerSubscriber.prototype._error = function _error(e) {\n      this.destination.error(e);\n    };\n    TakeUntilInnerSubscriber.prototype._complete = function _complete() {};\n    return TakeUntilInnerSubscriber;\n  })(_Subscriber4['default']);\n  module.exports = exports['default'];\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"@reactivex/rxjs/dist/cjs/operators/throttle\", [\"@reactivex/rxjs/dist/cjs/Subscriber\", \"@reactivex/rxjs/dist/cjs/schedulers/nextTick\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  'use strict';\n  exports.__esModule = true;\n  exports['default'] = throttle;\n  function _interopRequireDefault(obj) {\n    return obj && obj.__esModule ? obj : {'default': obj};\n  }\n  function _inherits(subClass, superClass) {\n    if (typeof superClass !== 'function' && superClass !== null) {\n      throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass);\n    }\n    subClass.prototype = Object.create(superClass && superClass.prototype, {constructor: {\n        value: subClass,\n        enumerable: false,\n        writable: true,\n        configurable: true\n      }});\n    if (superClass)\n      Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass;\n  }\n  function _classCallCheck(instance, Constructor) {\n    if (!(instance instanceof Constructor)) {\n      throw new TypeError('Cannot call a class as a function');\n    }\n  }\n  var _Subscriber2 = require(\"@reactivex/rxjs/dist/cjs/Subscriber\");\n  var _Subscriber3 = _interopRequireDefault(_Subscriber2);\n  var _schedulersNextTick = require(\"@reactivex/rxjs/dist/cjs/schedulers/nextTick\");\n  var _schedulersNextTick2 = _interopRequireDefault(_schedulersNextTick);\n  function throttle(delay) {\n    var scheduler = arguments.length <= 1 || arguments[1] === undefined ? _schedulersNextTick2['default'] : arguments[1];\n    return this.lift(new ThrottleOperator(delay, scheduler));\n  }\n  var ThrottleOperator = (function() {\n    function ThrottleOperator(delay, scheduler) {\n      _classCallCheck(this, ThrottleOperator);\n      this.delay = delay;\n      this.scheduler = scheduler;\n    }\n    ThrottleOperator.prototype.call = function call(subscriber) {\n      return new ThrottleSubscriber(subscriber, this.delay, this.scheduler);\n    };\n    return ThrottleOperator;\n  })();\n  var ThrottleSubscriber = (function(_Subscriber) {\n    _inherits(ThrottleSubscriber, _Subscriber);\n    function ThrottleSubscriber(destination, delay, scheduler) {\n      _classCallCheck(this, ThrottleSubscriber);\n      _Subscriber.call(this, destination);\n      this.delay = delay;\n      this.scheduler = scheduler;\n    }\n    ThrottleSubscriber.prototype._next = function _next(value) {\n      if (!this.throttled) {\n        this.add(this.throttled = this.scheduler.schedule(dispatchNext, this.delay, {\n          value: value,\n          subscriber: this\n        }));\n      }\n    };\n    ThrottleSubscriber.prototype.throttledNext = function throttledNext(value) {\n      this.clearThrottle();\n      this.destination.next(value);\n    };\n    ThrottleSubscriber.prototype.clearThrottle = function clearThrottle() {\n      var throttled = this.throttled;\n      if (throttled) {\n        throttled.unsubscribe();\n        this.remove(throttled);\n      }\n    };\n    return ThrottleSubscriber;\n  })(_Subscriber3['default']);\n  function dispatchNext(_ref) {\n    var value = _ref.value;\n    var subscriber = _ref.subscriber;\n    subscriber.throttledNext(value);\n  }\n  module.exports = exports['default'];\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"@reactivex/rxjs/dist/cjs/operators/timeout\", [\"@reactivex/rxjs/dist/cjs/Subscriber\", \"@reactivex/rxjs/dist/cjs/schedulers/immediate\", \"@reactivex/rxjs/dist/cjs/util/isDate\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  'use strict';\n  exports.__esModule = true;\n  var _createClass = (function() {\n    function defineProperties(target, props) {\n      for (var i = 0; i < props.length; i++) {\n        var descriptor = props[i];\n        descriptor.enumerable = descriptor.enumerable || false;\n        descriptor.configurable = true;\n        if ('value' in descriptor)\n          descriptor.writable = true;\n        Object.defineProperty(target, descriptor.key, descriptor);\n      }\n    }\n    return function(Constructor, protoProps, staticProps) {\n      if (protoProps)\n        defineProperties(Constructor.prototype, protoProps);\n      if (staticProps)\n        defineProperties(Constructor, staticProps);\n      return Constructor;\n    };\n  })();\n  exports['default'] = timeout;\n  function _interopRequireDefault(obj) {\n    return obj && obj.__esModule ? obj : {'default': obj};\n  }\n  function _inherits(subClass, superClass) {\n    if (typeof superClass !== 'function' && superClass !== null) {\n      throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass);\n    }\n    subClass.prototype = Object.create(superClass && superClass.prototype, {constructor: {\n        value: subClass,\n        enumerable: false,\n        writable: true,\n        configurable: true\n      }});\n    if (superClass)\n      Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass;\n  }\n  function _classCallCheck(instance, Constructor) {\n    if (!(instance instanceof Constructor)) {\n      throw new TypeError('Cannot call a class as a function');\n    }\n  }\n  var _Subscriber2 = require(\"@reactivex/rxjs/dist/cjs/Subscriber\");\n  var _Subscriber3 = _interopRequireDefault(_Subscriber2);\n  var _schedulersImmediate = require(\"@reactivex/rxjs/dist/cjs/schedulers/immediate\");\n  var _schedulersImmediate2 = _interopRequireDefault(_schedulersImmediate);\n  var _utilIsDate = require(\"@reactivex/rxjs/dist/cjs/util/isDate\");\n  var _utilIsDate2 = _interopRequireDefault(_utilIsDate);\n  function timeout(due) {\n    var errorToSend = arguments.length <= 1 || arguments[1] === undefined ? null : arguments[1];\n    var scheduler = arguments.length <= 2 || arguments[2] === undefined ? _schedulersImmediate2['default'] : arguments[2];\n    var absoluteTimeout = _utilIsDate2['default'](due);\n    var waitFor = absoluteTimeout ? +due - scheduler.now() : due;\n    return this.lift(new TimeoutOperator(waitFor, absoluteTimeout, errorToSend, scheduler));\n  }\n  var TimeoutOperator = (function() {\n    function TimeoutOperator(waitFor, absoluteTimeout, errorToSend, scheduler) {\n      _classCallCheck(this, TimeoutOperator);\n      this.waitFor = waitFor;\n      this.absoluteTimeout = absoluteTimeout;\n      this.errorToSend = errorToSend;\n      this.scheduler = scheduler;\n    }\n    TimeoutOperator.prototype.call = function call(subscriber) {\n      return new TimeoutSubscriber(subscriber, this.absoluteTimeout, this.waitFor, this.errorToSend, this.scheduler);\n    };\n    return TimeoutOperator;\n  })();\n  var TimeoutSubscriber = (function(_Subscriber) {\n    _inherits(TimeoutSubscriber, _Subscriber);\n    function TimeoutSubscriber(destination, absoluteTimeout, waitFor, errorToSend, scheduler) {\n      _classCallCheck(this, TimeoutSubscriber);\n      _Subscriber.call(this, destination);\n      this.absoluteTimeout = absoluteTimeout;\n      this.waitFor = waitFor;\n      this.errorToSend = errorToSend;\n      this.scheduler = scheduler;\n      this.index = 0;\n      this._previousIndex = 0;\n      this._hasCompleted = false;\n      this.scheduleTimeout();\n    }\n    TimeoutSubscriber.dispatchTimeout = function dispatchTimeout(state) {\n      var source = state.subscriber;\n      var currentIndex = state.index;\n      if (!source.hasCompleted && source.previousIndex === currentIndex) {\n        source.notifyTimeout();\n      }\n    };\n    TimeoutSubscriber.prototype.scheduleTimeout = function scheduleTimeout() {\n      var currentIndex = this.index;\n      this.scheduler.schedule(TimeoutSubscriber.dispatchTimeout, this.waitFor, {\n        subscriber: this,\n        index: currentIndex\n      });\n      this.index++;\n      this._previousIndex = currentIndex;\n    };\n    TimeoutSubscriber.prototype._next = function _next(value) {\n      this.destination.next(value);\n      if (!this.absoluteTimeout) {\n        this.scheduleTimeout();\n      }\n    };\n    TimeoutSubscriber.prototype._error = function _error(err) {\n      this.destination.error(err);\n      this._hasCompleted = true;\n    };\n    TimeoutSubscriber.prototype._complete = function _complete() {\n      this.destination.complete();\n      this._hasCompleted = true;\n    };\n    TimeoutSubscriber.prototype.notifyTimeout = function notifyTimeout() {\n      this.error(this.errorToSend || new Error('timeout'));\n    };\n    _createClass(TimeoutSubscriber, [{\n      key: 'previousIndex',\n      get: function get() {\n        return this._previousIndex;\n      }\n    }, {\n      key: 'hasCompleted',\n      get: function get() {\n        return this._hasCompleted;\n      }\n    }]);\n    return TimeoutSubscriber;\n  })(_Subscriber3['default']);\n  module.exports = exports['default'];\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"@reactivex/rxjs/dist/cjs/operators/timeoutWith\", [\"@reactivex/rxjs/dist/cjs/schedulers/immediate\", \"@reactivex/rxjs/dist/cjs/util/isDate\", \"@reactivex/rxjs/dist/cjs/OuterSubscriber\", \"@reactivex/rxjs/dist/cjs/util/subscribeToResult\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  'use strict';\n  exports.__esModule = true;\n  var _createClass = (function() {\n    function defineProperties(target, props) {\n      for (var i = 0; i < props.length; i++) {\n        var descriptor = props[i];\n        descriptor.enumerable = descriptor.enumerable || false;\n        descriptor.configurable = true;\n        if ('value' in descriptor)\n          descriptor.writable = true;\n        Object.defineProperty(target, descriptor.key, descriptor);\n      }\n    }\n    return function(Constructor, protoProps, staticProps) {\n      if (protoProps)\n        defineProperties(Constructor.prototype, protoProps);\n      if (staticProps)\n        defineProperties(Constructor, staticProps);\n      return Constructor;\n    };\n  })();\n  exports['default'] = timeoutWith;\n  function _interopRequireDefault(obj) {\n    return obj && obj.__esModule ? obj : {'default': obj};\n  }\n  function _inherits(subClass, superClass) {\n    if (typeof superClass !== 'function' && superClass !== null) {\n      throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass);\n    }\n    subClass.prototype = Object.create(superClass && superClass.prototype, {constructor: {\n        value: subClass,\n        enumerable: false,\n        writable: true,\n        configurable: true\n      }});\n    if (superClass)\n      Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass;\n  }\n  function _classCallCheck(instance, Constructor) {\n    if (!(instance instanceof Constructor)) {\n      throw new TypeError('Cannot call a class as a function');\n    }\n  }\n  var _schedulersImmediate = require(\"@reactivex/rxjs/dist/cjs/schedulers/immediate\");\n  var _schedulersImmediate2 = _interopRequireDefault(_schedulersImmediate);\n  var _utilIsDate = require(\"@reactivex/rxjs/dist/cjs/util/isDate\");\n  var _utilIsDate2 = _interopRequireDefault(_utilIsDate);\n  var _OuterSubscriber2 = require(\"@reactivex/rxjs/dist/cjs/OuterSubscriber\");\n  var _OuterSubscriber3 = _interopRequireDefault(_OuterSubscriber2);\n  var _utilSubscribeToResult = require(\"@reactivex/rxjs/dist/cjs/util/subscribeToResult\");\n  var _utilSubscribeToResult2 = _interopRequireDefault(_utilSubscribeToResult);\n  function timeoutWith(due, withObservable) {\n    var scheduler = arguments.length <= 2 || arguments[2] === undefined ? _schedulersImmediate2['default'] : arguments[2];\n    var absoluteTimeout = _utilIsDate2['default'](due);\n    var waitFor = absoluteTimeout ? +due - scheduler.now() : due;\n    return this.lift(new TimeoutWithOperator(waitFor, absoluteTimeout, withObservable, scheduler));\n  }\n  var TimeoutWithOperator = (function() {\n    function TimeoutWithOperator(waitFor, absoluteTimeout, withObservable, scheduler) {\n      _classCallCheck(this, TimeoutWithOperator);\n      this.waitFor = waitFor;\n      this.absoluteTimeout = absoluteTimeout;\n      this.withObservable = withObservable;\n      this.scheduler = scheduler;\n    }\n    TimeoutWithOperator.prototype.call = function call(subscriber) {\n      return new TimeoutWithSubscriber(subscriber, this.absoluteTimeout, this.waitFor, this.withObservable, this.scheduler);\n    };\n    return TimeoutWithOperator;\n  })();\n  var TimeoutWithSubscriber = (function(_OuterSubscriber) {\n    _inherits(TimeoutWithSubscriber, _OuterSubscriber);\n    function TimeoutWithSubscriber(destination, absoluteTimeout, waitFor, withObservable, scheduler) {\n      _classCallCheck(this, TimeoutWithSubscriber);\n      _OuterSubscriber.call(this, destination);\n      this.absoluteTimeout = absoluteTimeout;\n      this.waitFor = waitFor;\n      this.withObservable = withObservable;\n      this.scheduler = scheduler;\n      this.timeoutSubscription = undefined;\n      this.timedOut = false;\n      this.index = 0;\n      this._previousIndex = 0;\n      this._hasCompleted = false;\n      this.scheduleTimeout();\n    }\n    TimeoutWithSubscriber.dispatchTimeout = function dispatchTimeout(state) {\n      var source = state.subscriber;\n      var currentIndex = state.index;\n      if (!source.hasCompleted && source.previousIndex === currentIndex) {\n        source.handleTimeout();\n      }\n    };\n    TimeoutWithSubscriber.prototype.scheduleTimeout = function scheduleTimeout() {\n      var currentIndex = this.index;\n      var timeoutState = {\n        subscriber: this,\n        index: currentIndex\n      };\n      this.scheduler.schedule(TimeoutWithSubscriber.dispatchTimeout, this.waitFor, timeoutState);\n      this.index++;\n      this._previousIndex = currentIndex;\n    };\n    TimeoutWithSubscriber.prototype._next = function _next(value) {\n      if (!this.timedOut) {\n        this.destination.next(value);\n        if (!this.absoluteTimeout) {\n          this.scheduleTimeout();\n        }\n      }\n    };\n    TimeoutWithSubscriber.prototype._error = function _error(err) {\n      if (!this.timedOut) {\n        this.destination.error(err);\n        this._hasCompleted = true;\n      }\n    };\n    TimeoutWithSubscriber.prototype._complete = function _complete() {\n      if (!this.timedOut) {\n        this.destination.complete();\n        this._hasCompleted = true;\n      }\n    };\n    TimeoutWithSubscriber.prototype.handleTimeout = function handleTimeout() {\n      var withObservable = this.withObservable;\n      this.timedOut = true;\n      this.add(this.timeoutSubscription = _utilSubscribeToResult2['default'](this, withObservable));\n    };\n    _createClass(TimeoutWithSubscriber, [{\n      key: 'previousIndex',\n      get: function get() {\n        return this._previousIndex;\n      }\n    }, {\n      key: 'hasCompleted',\n      get: function get() {\n        return this._hasCompleted;\n      }\n    }]);\n    return TimeoutWithSubscriber;\n  })(_OuterSubscriber3['default']);\n  module.exports = exports['default'];\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"@reactivex/rxjs/dist/cjs/operators/toArray\", [\"@reactivex/rxjs/dist/cjs/Subscriber\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  'use strict';\n  exports.__esModule = true;\n  exports['default'] = toArray;\n  function _interopRequireDefault(obj) {\n    return obj && obj.__esModule ? obj : {'default': obj};\n  }\n  function _inherits(subClass, superClass) {\n    if (typeof superClass !== 'function' && superClass !== null) {\n      throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass);\n    }\n    subClass.prototype = Object.create(superClass && superClass.prototype, {constructor: {\n        value: subClass,\n        enumerable: false,\n        writable: true,\n        configurable: true\n      }});\n    if (superClass)\n      Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass;\n  }\n  function _classCallCheck(instance, Constructor) {\n    if (!(instance instanceof Constructor)) {\n      throw new TypeError('Cannot call a class as a function');\n    }\n  }\n  var _Subscriber2 = require(\"@reactivex/rxjs/dist/cjs/Subscriber\");\n  var _Subscriber3 = _interopRequireDefault(_Subscriber2);\n  function toArray() {\n    return this.lift(new ToArrayOperator());\n  }\n  var ToArrayOperator = (function() {\n    function ToArrayOperator() {\n      _classCallCheck(this, ToArrayOperator);\n    }\n    ToArrayOperator.prototype.call = function call(subscriber) {\n      return new ToArraySubscriber(subscriber);\n    };\n    return ToArrayOperator;\n  })();\n  var ToArraySubscriber = (function(_Subscriber) {\n    _inherits(ToArraySubscriber, _Subscriber);\n    function ToArraySubscriber(destination) {\n      _classCallCheck(this, ToArraySubscriber);\n      _Subscriber.call(this, destination);\n      this.array = [];\n    }\n    ToArraySubscriber.prototype._next = function _next(x) {\n      this.array.push(x);\n    };\n    ToArraySubscriber.prototype._complete = function _complete() {\n      this.destination.next(this.array);\n      this.destination.complete();\n    };\n    return ToArraySubscriber;\n  })(_Subscriber3['default']);\n  module.exports = exports['default'];\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"@reactivex/rxjs/dist/cjs/operators/toPromise\", [\"@reactivex/rxjs/dist/cjs/util/root\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  'use strict';\n  exports.__esModule = true;\n  exports['default'] = toPromise;\n  var _utilRoot = require(\"@reactivex/rxjs/dist/cjs/util/root\");\n  function toPromise(PromiseCtor) {\n    var _this = this;\n    if (!PromiseCtor) {\n      if (_utilRoot.root.Rx && _utilRoot.root.Rx.config && _utilRoot.root.Rx.config.Promise) {\n        PromiseCtor = _utilRoot.root.Rx.config.Promise;\n      } else if (_utilRoot.root.Promise) {\n        PromiseCtor = _utilRoot.root.Promise;\n      }\n    }\n    if (!PromiseCtor) {\n      throw new Error('no Promise impl found');\n    }\n    return new PromiseCtor(function(resolve, reject) {\n      var value = undefined;\n      _this.subscribe(function(x) {\n        return value = x;\n      }, function(err) {\n        return reject(err);\n      }, function() {\n        return resolve(value);\n      });\n    });\n  }\n  module.exports = exports['default'];\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"@reactivex/rxjs/dist/cjs/operators/window\", [\"@reactivex/rxjs/dist/cjs/Subscriber\", \"@reactivex/rxjs/dist/cjs/Subject\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  'use strict';\n  exports.__esModule = true;\n  exports['default'] = window;\n  function _interopRequireDefault(obj) {\n    return obj && obj.__esModule ? obj : {'default': obj};\n  }\n  function _inherits(subClass, superClass) {\n    if (typeof superClass !== 'function' && superClass !== null) {\n      throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass);\n    }\n    subClass.prototype = Object.create(superClass && superClass.prototype, {constructor: {\n        value: subClass,\n        enumerable: false,\n        writable: true,\n        configurable: true\n      }});\n    if (superClass)\n      Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass;\n  }\n  function _classCallCheck(instance, Constructor) {\n    if (!(instance instanceof Constructor)) {\n      throw new TypeError('Cannot call a class as a function');\n    }\n  }\n  var _Subscriber3 = require(\"@reactivex/rxjs/dist/cjs/Subscriber\");\n  var _Subscriber4 = _interopRequireDefault(_Subscriber3);\n  var _Subject = require(\"@reactivex/rxjs/dist/cjs/Subject\");\n  var _Subject2 = _interopRequireDefault(_Subject);\n  function window(closingNotifier) {\n    return this.lift(new WindowOperator(closingNotifier));\n  }\n  var WindowOperator = (function() {\n    function WindowOperator(closingNotifier) {\n      _classCallCheck(this, WindowOperator);\n      this.closingNotifier = closingNotifier;\n    }\n    WindowOperator.prototype.call = function call(subscriber) {\n      return new WindowSubscriber(subscriber, this.closingNotifier);\n    };\n    return WindowOperator;\n  })();\n  var WindowSubscriber = (function(_Subscriber) {\n    _inherits(WindowSubscriber, _Subscriber);\n    function WindowSubscriber(destination, closingNotifier) {\n      _classCallCheck(this, WindowSubscriber);\n      _Subscriber.call(this, destination);\n      this.closingNotifier = closingNotifier;\n      this.window = new _Subject2['default']();\n      this.add(closingNotifier._subscribe(new WindowClosingNotifierSubscriber(this)));\n      this.openWindow();\n    }\n    WindowSubscriber.prototype._next = function _next(value) {\n      this.window.next(value);\n    };\n    WindowSubscriber.prototype._error = function _error(err) {\n      this.window.error(err);\n      this.destination.error(err);\n    };\n    WindowSubscriber.prototype._complete = function _complete() {\n      this.window.complete();\n      this.destination.complete();\n    };\n    WindowSubscriber.prototype.openWindow = function openWindow() {\n      var prevWindow = this.window;\n      if (prevWindow) {\n        prevWindow.complete();\n      }\n      this.destination.next(this.window = new _Subject2['default']());\n    };\n    return WindowSubscriber;\n  })(_Subscriber4['default']);\n  var WindowClosingNotifierSubscriber = (function(_Subscriber2) {\n    _inherits(WindowClosingNotifierSubscriber, _Subscriber2);\n    function WindowClosingNotifierSubscriber(parent) {\n      _classCallCheck(this, WindowClosingNotifierSubscriber);\n      _Subscriber2.call(this, null);\n      this.parent = parent;\n    }\n    WindowClosingNotifierSubscriber.prototype._next = function _next() {\n      this.parent.openWindow();\n    };\n    WindowClosingNotifierSubscriber.prototype._error = function _error(err) {\n      this.parent._error(err);\n    };\n    WindowClosingNotifierSubscriber.prototype._complete = function _complete() {\n      this.parent._complete();\n    };\n    return WindowClosingNotifierSubscriber;\n  })(_Subscriber4['default']);\n  module.exports = exports['default'];\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"@reactivex/rxjs/dist/cjs/operators/windowCount\", [\"@reactivex/rxjs/dist/cjs/Subscriber\", \"@reactivex/rxjs/dist/cjs/Subject\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  'use strict';\n  exports.__esModule = true;\n  exports['default'] = windowCount;\n  function _interopRequireDefault(obj) {\n    return obj && obj.__esModule ? obj : {'default': obj};\n  }\n  function _inherits(subClass, superClass) {\n    if (typeof superClass !== 'function' && superClass !== null) {\n      throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass);\n    }\n    subClass.prototype = Object.create(superClass && superClass.prototype, {constructor: {\n        value: subClass,\n        enumerable: false,\n        writable: true,\n        configurable: true\n      }});\n    if (superClass)\n      Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass;\n  }\n  function _classCallCheck(instance, Constructor) {\n    if (!(instance instanceof Constructor)) {\n      throw new TypeError('Cannot call a class as a function');\n    }\n  }\n  var _Subscriber2 = require(\"@reactivex/rxjs/dist/cjs/Subscriber\");\n  var _Subscriber3 = _interopRequireDefault(_Subscriber2);\n  var _Subject = require(\"@reactivex/rxjs/dist/cjs/Subject\");\n  var _Subject2 = _interopRequireDefault(_Subject);\n  function windowCount(windowSize) {\n    var startWindowEvery = arguments.length <= 1 || arguments[1] === undefined ? 0 : arguments[1];\n    return this.lift(new WindowCountOperator(windowSize, startWindowEvery));\n  }\n  var WindowCountOperator = (function() {\n    function WindowCountOperator(windowSize, startWindowEvery) {\n      _classCallCheck(this, WindowCountOperator);\n      this.windowSize = windowSize;\n      this.startWindowEvery = startWindowEvery;\n    }\n    WindowCountOperator.prototype.call = function call(subscriber) {\n      return new WindowCountSubscriber(subscriber, this.windowSize, this.startWindowEvery);\n    };\n    return WindowCountOperator;\n  })();\n  var WindowCountSubscriber = (function(_Subscriber) {\n    _inherits(WindowCountSubscriber, _Subscriber);\n    function WindowCountSubscriber(destination, windowSize, startWindowEvery) {\n      _classCallCheck(this, WindowCountSubscriber);\n      _Subscriber.call(this, destination);\n      this.windowSize = windowSize;\n      this.startWindowEvery = startWindowEvery;\n      this.windows = [new _Subject2['default']()];\n      this.count = 0;\n      destination.next(this.windows[0]);\n    }\n    WindowCountSubscriber.prototype._next = function _next(value) {\n      var startWindowEvery = this.startWindowEvery > 0 ? this.startWindowEvery : this.windowSize;\n      var windowSize = this.windowSize;\n      var windows = this.windows;\n      var len = windows.length;\n      for (var i = 0; i < len; i++) {\n        windows[i].next(value);\n      }\n      var c = this.count - windowSize + 1;\n      if (c >= 0 && c % startWindowEvery === 0) {\n        windows.shift().complete();\n      }\n      if (++this.count % startWindowEvery === 0) {\n        var _window = new _Subject2['default']();\n        windows.push(_window);\n        this.destination.next(_window);\n      }\n    };\n    WindowCountSubscriber.prototype._error = function _error(err) {\n      var windows = this.windows;\n      while (windows.length > 0) {\n        windows.shift().error(err);\n      }\n      this.destination.error(err);\n    };\n    WindowCountSubscriber.prototype._complete = function _complete() {\n      var windows = this.windows;\n      while (windows.length > 0) {\n        windows.shift().complete();\n      }\n      this.destination.complete();\n    };\n    return WindowCountSubscriber;\n  })(_Subscriber3['default']);\n  module.exports = exports['default'];\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"@reactivex/rxjs/dist/cjs/operators/windowTime\", [\"@reactivex/rxjs/dist/cjs/Subscriber\", \"@reactivex/rxjs/dist/cjs/Subject\", \"@reactivex/rxjs/dist/cjs/schedulers/nextTick\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  'use strict';\n  exports.__esModule = true;\n  exports['default'] = windowTime;\n  function _interopRequireDefault(obj) {\n    return obj && obj.__esModule ? obj : {'default': obj};\n  }\n  function _inherits(subClass, superClass) {\n    if (typeof superClass !== 'function' && superClass !== null) {\n      throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass);\n    }\n    subClass.prototype = Object.create(superClass && superClass.prototype, {constructor: {\n        value: subClass,\n        enumerable: false,\n        writable: true,\n        configurable: true\n      }});\n    if (superClass)\n      Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass;\n  }\n  function _classCallCheck(instance, Constructor) {\n    if (!(instance instanceof Constructor)) {\n      throw new TypeError('Cannot call a class as a function');\n    }\n  }\n  var _Subscriber2 = require(\"@reactivex/rxjs/dist/cjs/Subscriber\");\n  var _Subscriber3 = _interopRequireDefault(_Subscriber2);\n  var _Subject = require(\"@reactivex/rxjs/dist/cjs/Subject\");\n  var _Subject2 = _interopRequireDefault(_Subject);\n  var _schedulersNextTick = require(\"@reactivex/rxjs/dist/cjs/schedulers/nextTick\");\n  var _schedulersNextTick2 = _interopRequireDefault(_schedulersNextTick);\n  function windowTime(windowTimeSpan) {\n    var windowCreationInterval = arguments.length <= 1 || arguments[1] === undefined ? null : arguments[1];\n    var scheduler = arguments.length <= 2 || arguments[2] === undefined ? _schedulersNextTick2['default'] : arguments[2];\n    return this.lift(new WindowTimeOperator(windowTimeSpan, windowCreationInterval, scheduler));\n  }\n  var WindowTimeOperator = (function() {\n    function WindowTimeOperator(windowTimeSpan, windowCreationInterval, scheduler) {\n      _classCallCheck(this, WindowTimeOperator);\n      this.windowTimeSpan = windowTimeSpan;\n      this.windowCreationInterval = windowCreationInterval;\n      this.scheduler = scheduler;\n    }\n    WindowTimeOperator.prototype.call = function call(subscriber) {\n      return new WindowTimeSubscriber(subscriber, this.windowTimeSpan, this.windowCreationInterval, this.scheduler);\n    };\n    return WindowTimeOperator;\n  })();\n  var WindowTimeSubscriber = (function(_Subscriber) {\n    _inherits(WindowTimeSubscriber, _Subscriber);\n    function WindowTimeSubscriber(destination, windowTimeSpan, windowCreationInterval, scheduler) {\n      _classCallCheck(this, WindowTimeSubscriber);\n      _Subscriber.call(this, destination);\n      this.windowTimeSpan = windowTimeSpan;\n      this.windowCreationInterval = windowCreationInterval;\n      this.scheduler = scheduler;\n      this.windows = [];\n      if (windowCreationInterval !== null && windowCreationInterval >= 0) {\n        var _window = this.openWindow();\n        var closeState = {\n          subscriber: this,\n          window: _window,\n          context: null\n        };\n        var creationState = {\n          windowTimeSpan: windowTimeSpan,\n          windowCreationInterval: windowCreationInterval,\n          subscriber: this,\n          scheduler: scheduler\n        };\n        this.add(scheduler.schedule(dispatchWindowClose, windowTimeSpan, closeState));\n        this.add(scheduler.schedule(dispatchWindowCreation, windowCreationInterval, creationState));\n      } else {\n        var _window2 = this.openWindow();\n        var timeSpanOnlyState = {\n          subscriber: this,\n          window: _window2,\n          windowTimeSpan: windowTimeSpan\n        };\n        this.add(scheduler.schedule(dispatchWindowTimeSpanOnly, windowTimeSpan, timeSpanOnlyState));\n      }\n    }\n    WindowTimeSubscriber.prototype._next = function _next(value) {\n      var windows = this.windows;\n      var len = windows.length;\n      for (var i = 0; i < len; i++) {\n        windows[i].next(value);\n      }\n    };\n    WindowTimeSubscriber.prototype._error = function _error(err) {\n      var windows = this.windows;\n      while (windows.length > 0) {\n        windows.shift().error(err);\n      }\n      this.destination.error(err);\n    };\n    WindowTimeSubscriber.prototype._complete = function _complete() {\n      var windows = this.windows;\n      while (windows.length > 0) {\n        windows.shift().complete();\n      }\n      this.destination.complete();\n    };\n    WindowTimeSubscriber.prototype.openWindow = function openWindow() {\n      var window = new _Subject2['default']();\n      this.windows.push(window);\n      this.destination.next(window);\n      return window;\n    };\n    WindowTimeSubscriber.prototype.closeWindow = function closeWindow(window) {\n      window.complete();\n      var windows = this.windows;\n      windows.splice(windows.indexOf(window), 1);\n    };\n    return WindowTimeSubscriber;\n  })(_Subscriber3['default']);\n  function dispatchWindowTimeSpanOnly(state) {\n    var subscriber = state.subscriber;\n    var windowTimeSpan = state.windowTimeSpan;\n    var window = state.window;\n    if (window) {\n      window.complete();\n    }\n    state.window = subscriber.openWindow();\n    this.schedule(state, windowTimeSpan);\n  }\n  function dispatchWindowCreation(state) {\n    var windowTimeSpan = state.windowTimeSpan;\n    var subscriber = state.subscriber;\n    var scheduler = state.scheduler;\n    var windowCreationInterval = state.windowCreationInterval;\n    var window = subscriber.openWindow();\n    var action = this;\n    var context = {\n      action: action,\n      subscription: null\n    };\n    var timeSpanState = {\n      subscriber: subscriber,\n      window: window,\n      context: context\n    };\n    context.subscription = scheduler.schedule(dispatchWindowClose, windowTimeSpan, timeSpanState);\n    action.add(context.subscription);\n    action.schedule(state, windowCreationInterval);\n  }\n  function dispatchWindowClose(_ref) {\n    var subscriber = _ref.subscriber;\n    var window = _ref.window;\n    var context = _ref.context;\n    if (context && context.action && context.subscription) {\n      context.action.remove(context.subscription);\n    }\n    subscriber.closeWindow(window);\n  }\n  module.exports = exports['default'];\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"@reactivex/rxjs/dist/cjs/operators/windowToggle\", [\"@reactivex/rxjs/dist/cjs/Subscriber\", \"@reactivex/rxjs/dist/cjs/Subject\", \"@reactivex/rxjs/dist/cjs/Subscription\", \"@reactivex/rxjs/dist/cjs/util/tryCatch\", \"@reactivex/rxjs/dist/cjs/util/errorObject\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  'use strict';\n  exports.__esModule = true;\n  exports['default'] = windowToggle;\n  function _interopRequireDefault(obj) {\n    return obj && obj.__esModule ? obj : {'default': obj};\n  }\n  function _inherits(subClass, superClass) {\n    if (typeof superClass !== 'function' && superClass !== null) {\n      throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass);\n    }\n    subClass.prototype = Object.create(superClass && superClass.prototype, {constructor: {\n        value: subClass,\n        enumerable: false,\n        writable: true,\n        configurable: true\n      }});\n    if (superClass)\n      Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass;\n  }\n  function _classCallCheck(instance, Constructor) {\n    if (!(instance instanceof Constructor)) {\n      throw new TypeError('Cannot call a class as a function');\n    }\n  }\n  var _Subscriber4 = require(\"@reactivex/rxjs/dist/cjs/Subscriber\");\n  var _Subscriber5 = _interopRequireDefault(_Subscriber4);\n  var _Subject = require(\"@reactivex/rxjs/dist/cjs/Subject\");\n  var _Subject2 = _interopRequireDefault(_Subject);\n  var _Subscription = require(\"@reactivex/rxjs/dist/cjs/Subscription\");\n  var _Subscription2 = _interopRequireDefault(_Subscription);\n  var _utilTryCatch = require(\"@reactivex/rxjs/dist/cjs/util/tryCatch\");\n  var _utilTryCatch2 = _interopRequireDefault(_utilTryCatch);\n  var _utilErrorObject = require(\"@reactivex/rxjs/dist/cjs/util/errorObject\");\n  function windowToggle(openings, closingSelector) {\n    return this.lift(new WindowToggleOperator(openings, closingSelector));\n  }\n  var WindowToggleOperator = (function() {\n    function WindowToggleOperator(openings, closingSelector) {\n      _classCallCheck(this, WindowToggleOperator);\n      this.openings = openings;\n      this.closingSelector = closingSelector;\n    }\n    WindowToggleOperator.prototype.call = function call(subscriber) {\n      return new WindowToggleSubscriber(subscriber, this.openings, this.closingSelector);\n    };\n    return WindowToggleOperator;\n  })();\n  var WindowToggleSubscriber = (function(_Subscriber) {\n    _inherits(WindowToggleSubscriber, _Subscriber);\n    function WindowToggleSubscriber(destination, openings, closingSelector) {\n      _classCallCheck(this, WindowToggleSubscriber);\n      _Subscriber.call(this, destination);\n      this.openings = openings;\n      this.closingSelector = closingSelector;\n      this.contexts = [];\n      this.add(this.openings._subscribe(new WindowToggleOpeningsSubscriber(this)));\n    }\n    WindowToggleSubscriber.prototype._next = function _next(value) {\n      var contexts = this.contexts;\n      var len = contexts.length;\n      for (var i = 0; i < len; i++) {\n        contexts[i].window.next(value);\n      }\n    };\n    WindowToggleSubscriber.prototype._error = function _error(err) {\n      var contexts = this.contexts;\n      while (contexts.length > 0) {\n        contexts.shift().window.error(err);\n      }\n      this.destination.error(err);\n    };\n    WindowToggleSubscriber.prototype._complete = function _complete() {\n      var contexts = this.contexts;\n      while (contexts.length > 0) {\n        var context = contexts.shift();\n        context.window.complete();\n        context.subscription.unsubscribe();\n      }\n      this.destination.complete();\n    };\n    WindowToggleSubscriber.prototype.openWindow = function openWindow(value) {\n      var closingSelector = this.closingSelector;\n      var closingNotifier = _utilTryCatch2['default'](closingSelector)(value);\n      if (closingNotifier === _utilErrorObject.errorObject) {\n        this.error(closingNotifier.e);\n      } else {\n        var context = {\n          window: new _Subject2['default'](),\n          subscription: new _Subscription2['default']()\n        };\n        this.contexts.push(context);\n        this.destination.next(context.window);\n        var subscriber = new WindowClosingNotifierSubscriber(this, context);\n        var subscription = closingNotifier._subscribe(subscriber);\n        this.add(context.subscription.add(subscription));\n      }\n    };\n    WindowToggleSubscriber.prototype.closeWindow = function closeWindow(context) {\n      var window = context.window;\n      var subscription = context.subscription;\n      var contexts = this.contexts;\n      contexts.splice(contexts.indexOf(context), 1);\n      window.complete();\n      this.remove(subscription);\n      subscription.unsubscribe();\n    };\n    return WindowToggleSubscriber;\n  })(_Subscriber5['default']);\n  var WindowClosingNotifierSubscriber = (function(_Subscriber2) {\n    _inherits(WindowClosingNotifierSubscriber, _Subscriber2);\n    function WindowClosingNotifierSubscriber(parent, windowContext) {\n      _classCallCheck(this, WindowClosingNotifierSubscriber);\n      _Subscriber2.call(this, null);\n      this.parent = parent;\n      this.windowContext = windowContext;\n    }\n    WindowClosingNotifierSubscriber.prototype._next = function _next() {\n      this.parent.closeWindow(this.windowContext);\n    };\n    WindowClosingNotifierSubscriber.prototype._error = function _error(err) {\n      this.parent.error(err);\n    };\n    WindowClosingNotifierSubscriber.prototype._complete = function _complete() {\n      this.parent.closeWindow(this.windowContext);\n    };\n    return WindowClosingNotifierSubscriber;\n  })(_Subscriber5['default']);\n  var WindowToggleOpeningsSubscriber = (function(_Subscriber3) {\n    _inherits(WindowToggleOpeningsSubscriber, _Subscriber3);\n    function WindowToggleOpeningsSubscriber(parent) {\n      _classCallCheck(this, WindowToggleOpeningsSubscriber);\n      _Subscriber3.call(this);\n      this.parent = parent;\n    }\n    WindowToggleOpeningsSubscriber.prototype._next = function _next(value) {\n      this.parent.openWindow(value);\n    };\n    WindowToggleOpeningsSubscriber.prototype._error = function _error(err) {\n      this.parent.error(err);\n    };\n    WindowToggleOpeningsSubscriber.prototype._complete = function _complete() {};\n    return WindowToggleOpeningsSubscriber;\n  })(_Subscriber5['default']);\n  module.exports = exports['default'];\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"@reactivex/rxjs/dist/cjs/operators/windowWhen\", [\"@reactivex/rxjs/dist/cjs/Subscriber\", \"@reactivex/rxjs/dist/cjs/Subject\", \"@reactivex/rxjs/dist/cjs/Subscription\", \"@reactivex/rxjs/dist/cjs/util/tryCatch\", \"@reactivex/rxjs/dist/cjs/util/errorObject\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  'use strict';\n  exports.__esModule = true;\n  exports['default'] = window;\n  function _interopRequireDefault(obj) {\n    return obj && obj.__esModule ? obj : {'default': obj};\n  }\n  function _inherits(subClass, superClass) {\n    if (typeof superClass !== 'function' && superClass !== null) {\n      throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass);\n    }\n    subClass.prototype = Object.create(superClass && superClass.prototype, {constructor: {\n        value: subClass,\n        enumerable: false,\n        writable: true,\n        configurable: true\n      }});\n    if (superClass)\n      Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass;\n  }\n  function _classCallCheck(instance, Constructor) {\n    if (!(instance instanceof Constructor)) {\n      throw new TypeError('Cannot call a class as a function');\n    }\n  }\n  var _Subscriber3 = require(\"@reactivex/rxjs/dist/cjs/Subscriber\");\n  var _Subscriber4 = _interopRequireDefault(_Subscriber3);\n  var _Subject = require(\"@reactivex/rxjs/dist/cjs/Subject\");\n  var _Subject2 = _interopRequireDefault(_Subject);\n  var _Subscription = require(\"@reactivex/rxjs/dist/cjs/Subscription\");\n  var _Subscription2 = _interopRequireDefault(_Subscription);\n  var _utilTryCatch = require(\"@reactivex/rxjs/dist/cjs/util/tryCatch\");\n  var _utilTryCatch2 = _interopRequireDefault(_utilTryCatch);\n  var _utilErrorObject = require(\"@reactivex/rxjs/dist/cjs/util/errorObject\");\n  function window(closingSelector) {\n    return this.lift(new WindowOperator(closingSelector));\n  }\n  var WindowOperator = (function() {\n    function WindowOperator(closingSelector) {\n      _classCallCheck(this, WindowOperator);\n      this.closingSelector = closingSelector;\n    }\n    WindowOperator.prototype.call = function call(subscriber) {\n      return new WindowSubscriber(subscriber, this.closingSelector);\n    };\n    return WindowOperator;\n  })();\n  var WindowSubscriber = (function(_Subscriber) {\n    _inherits(WindowSubscriber, _Subscriber);\n    function WindowSubscriber(destination, closingSelector) {\n      _classCallCheck(this, WindowSubscriber);\n      _Subscriber.call(this, destination);\n      this.closingSelector = closingSelector;\n      this.window = new _Subject2['default']();\n      this.openWindow();\n    }\n    WindowSubscriber.prototype._next = function _next(value) {\n      this.window.next(value);\n    };\n    WindowSubscriber.prototype._error = function _error(err) {\n      this.window.error(err);\n      this.destination.error(err);\n    };\n    WindowSubscriber.prototype._complete = function _complete() {\n      this.window.complete();\n      this.destination.complete();\n    };\n    WindowSubscriber.prototype.openWindow = function openWindow() {\n      var prevClosingNotification = this.closingNotification;\n      if (prevClosingNotification) {\n        this.remove(prevClosingNotification);\n        prevClosingNotification.unsubscribe();\n      }\n      var prevWindow = this.window;\n      if (prevWindow) {\n        prevWindow.complete();\n      }\n      this.destination.next(this.window = new _Subject2['default']());\n      var closingNotifier = _utilTryCatch2['default'](this.closingSelector)();\n      if (closingNotifier === _utilErrorObject.errorObject) {\n        var err = closingNotifier.e;\n        this.destination.error(err);\n        this.window.error(err);\n      } else {\n        var closingNotification = this.closingNotification = new _Subscription2['default']();\n        this.add(closingNotification.add(closingNotifier._subscribe(new WindowClosingNotifierSubscriber(this))));\n      }\n    };\n    return WindowSubscriber;\n  })(_Subscriber4['default']);\n  var WindowClosingNotifierSubscriber = (function(_Subscriber2) {\n    _inherits(WindowClosingNotifierSubscriber, _Subscriber2);\n    function WindowClosingNotifierSubscriber(parent) {\n      _classCallCheck(this, WindowClosingNotifierSubscriber);\n      _Subscriber2.call(this, null);\n      this.parent = parent;\n    }\n    WindowClosingNotifierSubscriber.prototype._next = function _next() {\n      this.parent.openWindow();\n    };\n    WindowClosingNotifierSubscriber.prototype._error = function _error(err) {\n      this.parent.error(err);\n    };\n    WindowClosingNotifierSubscriber.prototype._complete = function _complete() {};\n    return WindowClosingNotifierSubscriber;\n  })(_Subscriber4['default']);\n  module.exports = exports['default'];\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"@reactivex/rxjs/dist/cjs/operators/withLatestFrom\", [\"@reactivex/rxjs/dist/cjs/util/tryCatch\", \"@reactivex/rxjs/dist/cjs/util/errorObject\", \"@reactivex/rxjs/dist/cjs/OuterSubscriber\", \"@reactivex/rxjs/dist/cjs/util/subscribeToResult\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  'use strict';\n  exports.__esModule = true;\n  exports['default'] = withLatestFrom;\n  function _interopRequireDefault(obj) {\n    return obj && obj.__esModule ? obj : {'default': obj};\n  }\n  function _inherits(subClass, superClass) {\n    if (typeof superClass !== 'function' && superClass !== null) {\n      throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass);\n    }\n    subClass.prototype = Object.create(superClass && superClass.prototype, {constructor: {\n        value: subClass,\n        enumerable: false,\n        writable: true,\n        configurable: true\n      }});\n    if (superClass)\n      Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass;\n  }\n  function _classCallCheck(instance, Constructor) {\n    if (!(instance instanceof Constructor)) {\n      throw new TypeError('Cannot call a class as a function');\n    }\n  }\n  var _utilTryCatch = require(\"@reactivex/rxjs/dist/cjs/util/tryCatch\");\n  var _utilTryCatch2 = _interopRequireDefault(_utilTryCatch);\n  var _utilErrorObject = require(\"@reactivex/rxjs/dist/cjs/util/errorObject\");\n  var _OuterSubscriber2 = require(\"@reactivex/rxjs/dist/cjs/OuterSubscriber\");\n  var _OuterSubscriber3 = _interopRequireDefault(_OuterSubscriber2);\n  var _utilSubscribeToResult = require(\"@reactivex/rxjs/dist/cjs/util/subscribeToResult\");\n  var _utilSubscribeToResult2 = _interopRequireDefault(_utilSubscribeToResult);\n  function withLatestFrom() {\n    var project = undefined;\n    for (var _len = arguments.length,\n        args = Array(_len),\n        _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n    if (typeof args[args.length - 1] === 'function') {\n      project = args.pop();\n    }\n    var observables = args;\n    return this.lift(new WithLatestFromOperator(observables, project));\n  }\n  var WithLatestFromOperator = (function() {\n    function WithLatestFromOperator(observables, project) {\n      _classCallCheck(this, WithLatestFromOperator);\n      this.observables = observables;\n      this.project = project;\n    }\n    WithLatestFromOperator.prototype.call = function call(subscriber) {\n      return new WithLatestFromSubscriber(subscriber, this.observables, this.project);\n    };\n    return WithLatestFromOperator;\n  })();\n  var WithLatestFromSubscriber = (function(_OuterSubscriber) {\n    _inherits(WithLatestFromSubscriber, _OuterSubscriber);\n    function WithLatestFromSubscriber(destination, observables, project) {\n      _classCallCheck(this, WithLatestFromSubscriber);\n      _OuterSubscriber.call(this, destination);\n      this.observables = observables;\n      this.project = project;\n      this.toRespond = [];\n      var len = observables.length;\n      this.values = new Array(len);\n      for (var i = 0; i < len; i++) {\n        this.toRespond.push(i);\n      }\n      for (var i = 0; i < len; i++) {\n        var observable = observables[i];\n        this.add(_utilSubscribeToResult2['default'](this, observable, observable, i));\n      }\n    }\n    WithLatestFromSubscriber.prototype.notifyNext = function notifyNext(observable, value, observableIndex, index) {\n      this.values[observableIndex] = value;\n      var toRespond = this.toRespond;\n      if (toRespond.length > 0) {\n        var found = toRespond.indexOf(observableIndex);\n        if (found !== -1) {\n          toRespond.splice(found, 1);\n        }\n      }\n    };\n    WithLatestFromSubscriber.prototype.notifyComplete = function notifyComplete() {};\n    WithLatestFromSubscriber.prototype._next = function _next(value) {\n      if (this.toRespond.length === 0) {\n        var values = this.values;\n        var destination = this.destination;\n        var project = this.project;\n        var args = [value].concat(values);\n        if (project) {\n          var result = _utilTryCatch2['default'](this.project).apply(this, args);\n          if (result === _utilErrorObject.errorObject) {\n            destination.error(result.e);\n          } else {\n            destination.next(result);\n          }\n        } else {\n          destination.next(args);\n        }\n      }\n    };\n    return WithLatestFromSubscriber;\n  })(_OuterSubscriber3['default']);\n  module.exports = exports['default'];\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"@reactivex/rxjs/dist/cjs/operators/zip\", [\"@reactivex/rxjs/dist/cjs/operators/zip-static\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  'use strict';\n  exports.__esModule = true;\n  exports['default'] = zipProto;\n  function _interopRequireDefault(obj) {\n    return obj && obj.__esModule ? obj : {'default': obj};\n  }\n  var _zipStatic = require(\"@reactivex/rxjs/dist/cjs/operators/zip-static\");\n  var _zipStatic2 = _interopRequireDefault(_zipStatic);\n  function zipProto() {\n    for (var _len = arguments.length,\n        observables = Array(_len),\n        _key = 0; _key < _len; _key++) {\n      observables[_key] = arguments[_key];\n    }\n    observables.unshift(this);\n    return _zipStatic2['default'].apply(this, observables);\n  }\n  module.exports = exports['default'];\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"@reactivex/rxjs/dist/cjs/operators/zipAll\", [\"@reactivex/rxjs/dist/cjs/operators/zip-support\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  'use strict';\n  exports.__esModule = true;\n  exports['default'] = zipAll;\n  var _zipSupport = require(\"@reactivex/rxjs/dist/cjs/operators/zip-support\");\n  function zipAll(project) {\n    return this.lift(new _zipSupport.ZipOperator(project));\n  }\n  module.exports = exports['default'];\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"@reactivex/rxjs/dist/cjs/util/ArgumentOutOfRangeError\", [], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  'use strict';\n  exports.__esModule = true;\n  function _classCallCheck(instance, Constructor) {\n    if (!(instance instanceof Constructor)) {\n      throw new TypeError('Cannot call a class as a function');\n    }\n  }\n  var ArgumentOutOfRangeError = function ArgumentOutOfRangeError() {\n    _classCallCheck(this, ArgumentOutOfRangeError);\n    this.name = 'ArgumentOutOfRangeError';\n    this.message = 'argument out of range';\n  };\n  ;\n  exports['default'] = ArgumentOutOfRangeError;\n  module.exports = exports['default'];\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"angular2/src/core/di/metadata\", [\"angular2/src/facade/lang\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  var __decorate = (this && this.__decorate) || function(decorators, target, key, desc) {\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\")\n      return Reflect.decorate(decorators, target, key, desc);\n    switch (arguments.length) {\n      case 2:\n        return decorators.reduceRight(function(o, d) {\n          return (d && d(o)) || o;\n        }, target);\n      case 3:\n        return decorators.reduceRight(function(o, d) {\n          return (d && d(target, key)), void 0;\n        }, void 0);\n      case 4:\n        return decorators.reduceRight(function(o, d) {\n          return (d && d(target, key, o)) || o;\n        }, desc);\n    }\n  };\n  var __metadata = (this && this.__metadata) || function(k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\")\n      return Reflect.metadata(k, v);\n  };\n  var lang_1 = require(\"angular2/src/facade/lang\");\n  var InjectMetadata = (function() {\n    function InjectMetadata(token) {\n      this.token = token;\n    }\n    InjectMetadata.prototype.toString = function() {\n      return \"@Inject(\" + lang_1.stringify(this.token) + \")\";\n    };\n    InjectMetadata = __decorate([lang_1.CONST(), __metadata('design:paramtypes', [Object])], InjectMetadata);\n    return InjectMetadata;\n  })();\n  exports.InjectMetadata = InjectMetadata;\n  var OptionalMetadata = (function() {\n    function OptionalMetadata() {}\n    OptionalMetadata.prototype.toString = function() {\n      return \"@Optional()\";\n    };\n    OptionalMetadata = __decorate([lang_1.CONST(), __metadata('design:paramtypes', [])], OptionalMetadata);\n    return OptionalMetadata;\n  })();\n  exports.OptionalMetadata = OptionalMetadata;\n  var DependencyMetadata = (function() {\n    function DependencyMetadata() {}\n    Object.defineProperty(DependencyMetadata.prototype, \"token\", {\n      get: function() {\n        return null;\n      },\n      enumerable: true,\n      configurable: true\n    });\n    DependencyMetadata = __decorate([lang_1.CONST(), __metadata('design:paramtypes', [])], DependencyMetadata);\n    return DependencyMetadata;\n  })();\n  exports.DependencyMetadata = DependencyMetadata;\n  var InjectableMetadata = (function() {\n    function InjectableMetadata() {}\n    InjectableMetadata = __decorate([lang_1.CONST(), __metadata('design:paramtypes', [])], InjectableMetadata);\n    return InjectableMetadata;\n  })();\n  exports.InjectableMetadata = InjectableMetadata;\n  var SelfMetadata = (function() {\n    function SelfMetadata() {}\n    SelfMetadata.prototype.toString = function() {\n      return \"@Self()\";\n    };\n    SelfMetadata = __decorate([lang_1.CONST(), __metadata('design:paramtypes', [])], SelfMetadata);\n    return SelfMetadata;\n  })();\n  exports.SelfMetadata = SelfMetadata;\n  var SkipSelfMetadata = (function() {\n    function SkipSelfMetadata() {}\n    SkipSelfMetadata.prototype.toString = function() {\n      return \"@SkipSelf()\";\n    };\n    SkipSelfMetadata = __decorate([lang_1.CONST(), __metadata('design:paramtypes', [])], SkipSelfMetadata);\n    return SkipSelfMetadata;\n  })();\n  exports.SkipSelfMetadata = SkipSelfMetadata;\n  var HostMetadata = (function() {\n    function HostMetadata() {}\n    HostMetadata.prototype.toString = function() {\n      return \"@Host()\";\n    };\n    HostMetadata = __decorate([lang_1.CONST(), __metadata('design:paramtypes', [])], HostMetadata);\n    return HostMetadata;\n  })();\n  exports.HostMetadata = HostMetadata;\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"angular2/src/core/util/decorators\", [\"angular2/src/facade/lang\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  var lang_1 = require(\"angular2/src/facade/lang\");\n  function extractAnnotation(annotation) {\n    if (lang_1.isFunction(annotation) && annotation.hasOwnProperty('annotation')) {\n      annotation = annotation.annotation;\n    }\n    return annotation;\n  }\n  function applyParams(fnOrArray, key) {\n    if (fnOrArray === Object || fnOrArray === String || fnOrArray === Function || fnOrArray === Number || fnOrArray === Array) {\n      throw new Error(\"Can not use native \" + lang_1.stringify(fnOrArray) + \" as constructor\");\n    }\n    if (lang_1.isFunction(fnOrArray)) {\n      return fnOrArray;\n    } else if (fnOrArray instanceof Array) {\n      var annotations = fnOrArray;\n      var fn = fnOrArray[fnOrArray.length - 1];\n      if (!lang_1.isFunction(fn)) {\n        throw new Error(\"Last position of Class method array must be Function in key \" + key + \" was '\" + lang_1.stringify(fn) + \"'\");\n      }\n      var annoLength = annotations.length - 1;\n      if (annoLength != fn.length) {\n        throw new Error(\"Number of annotations (\" + annoLength + \") does not match number of arguments (\" + fn.length + \") in the function: \" + lang_1.stringify(fn));\n      }\n      var paramsAnnotations = [];\n      for (var i = 0,\n          ii = annotations.length - 1; i < ii; i++) {\n        var paramAnnotations = [];\n        paramsAnnotations.push(paramAnnotations);\n        var annotation = annotations[i];\n        if (annotation instanceof Array) {\n          for (var j = 0; j < annotation.length; j++) {\n            paramAnnotations.push(extractAnnotation(annotation[j]));\n          }\n        } else if (lang_1.isFunction(annotation)) {\n          paramAnnotations.push(extractAnnotation(annotation));\n        } else {\n          paramAnnotations.push(annotation);\n        }\n      }\n      Reflect.defineMetadata('parameters', paramsAnnotations, fn);\n      return fn;\n    } else {\n      throw new Error(\"Only Function or Array is supported in Class definition for key '\" + key + \"' is '\" + lang_1.stringify(fnOrArray) + \"'\");\n    }\n  }\n  function Class(clsDef) {\n    var constructor = applyParams(clsDef.hasOwnProperty('constructor') ? clsDef.constructor : undefined, 'constructor');\n    var proto = constructor.prototype;\n    if (clsDef.hasOwnProperty('extends')) {\n      if (lang_1.isFunction(clsDef.extends)) {\n        constructor.prototype = proto = Object.create(clsDef.extends.prototype);\n      } else {\n        throw new Error(\"Class definition 'extends' property must be a constructor function was: \" + lang_1.stringify(clsDef.extends));\n      }\n    }\n    for (var key in clsDef) {\n      if (key != 'extends' && key != 'prototype' && clsDef.hasOwnProperty(key)) {\n        proto[key] = applyParams(clsDef[key], key);\n      }\n    }\n    if (this && this.annotations instanceof Array) {\n      Reflect.defineMetadata('annotations', this.annotations, constructor);\n    }\n    return constructor;\n  }\n  exports.Class = Class;\n  var Reflect = lang_1.global.Reflect;\n  if (!(Reflect && Reflect.getMetadata)) {\n    throw 'reflect-metadata shim is required when using class decorators';\n  }\n  function makeDecorator(annotationCls, chainFn) {\n    if (chainFn === void 0) {\n      chainFn = null;\n    }\n    function DecoratorFactory(objOrType) {\n      var annotationInstance = new annotationCls(objOrType);\n      if (this instanceof annotationCls) {\n        return annotationInstance;\n      } else {\n        var chainAnnotation = lang_1.isFunction(this) && this.annotations instanceof Array ? this.annotations : [];\n        chainAnnotation.push(annotationInstance);\n        var TypeDecorator = function TypeDecorator(cls) {\n          var annotations = Reflect.getOwnMetadata('annotations', cls);\n          annotations = annotations || [];\n          annotations.push(annotationInstance);\n          Reflect.defineMetadata('annotations', annotations, cls);\n          return cls;\n        };\n        TypeDecorator.annotations = chainAnnotation;\n        TypeDecorator.Class = Class;\n        if (chainFn)\n          chainFn(TypeDecorator);\n        return TypeDecorator;\n      }\n    }\n    DecoratorFactory.prototype = Object.create(annotationCls.prototype);\n    return DecoratorFactory;\n  }\n  exports.makeDecorator = makeDecorator;\n  function makeParamDecorator(annotationCls) {\n    function ParamDecoratorFactory() {\n      var args = [];\n      for (var _i = 0; _i < arguments.length; _i++) {\n        args[_i - 0] = arguments[_i];\n      }\n      var annotationInstance = Object.create(annotationCls.prototype);\n      annotationCls.apply(annotationInstance, args);\n      if (this instanceof annotationCls) {\n        return annotationInstance;\n      } else {\n        ParamDecorator.annotation = annotationInstance;\n        return ParamDecorator;\n      }\n      function ParamDecorator(cls, unusedKey, index) {\n        var parameters = Reflect.getMetadata('parameters', cls);\n        parameters = parameters || [];\n        while (parameters.length <= index) {\n          parameters.push(null);\n        }\n        parameters[index] = parameters[index] || [];\n        var annotationsForParam = parameters[index];\n        annotationsForParam.push(annotationInstance);\n        Reflect.defineMetadata('parameters', parameters, cls);\n        return cls;\n      }\n    }\n    ParamDecoratorFactory.prototype = Object.create(annotationCls.prototype);\n    return ParamDecoratorFactory;\n  }\n  exports.makeParamDecorator = makeParamDecorator;\n  function makePropDecorator(decoratorCls) {\n    function PropDecoratorFactory() {\n      var args = [];\n      for (var _i = 0; _i < arguments.length; _i++) {\n        args[_i - 0] = arguments[_i];\n      }\n      var decoratorInstance = Object.create(decoratorCls.prototype);\n      decoratorCls.apply(decoratorInstance, args);\n      if (this instanceof decoratorCls) {\n        return decoratorInstance;\n      } else {\n        return function PropDecorator(target, name) {\n          var meta = Reflect.getOwnMetadata('propMetadata', target.constructor);\n          meta = meta || {};\n          meta[name] = meta[name] || [];\n          meta[name].unshift(decoratorInstance);\n          Reflect.defineMetadata('propMetadata', meta, target.constructor);\n        };\n      }\n    }\n    PropDecoratorFactory.prototype = Object.create(decoratorCls.prototype);\n    return PropDecoratorFactory;\n  }\n  exports.makePropDecorator = makePropDecorator;\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"angular2/src/core/di/forward_ref\", [\"angular2/src/facade/lang\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  var lang_1 = require(\"angular2/src/facade/lang\");\n  function forwardRef(forwardRefFn) {\n    forwardRefFn.__forward_ref__ = forwardRef;\n    forwardRefFn.toString = function() {\n      return lang_1.stringify(this());\n    };\n    return forwardRefFn;\n  }\n  exports.forwardRef = forwardRef;\n  function resolveForwardRef(type) {\n    if (lang_1.isFunction(type) && type.hasOwnProperty('__forward_ref__') && type.__forward_ref__ === forwardRef) {\n      return type();\n    } else {\n      return type;\n    }\n  }\n  exports.resolveForwardRef = resolveForwardRef;\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"angular2/src/facade/collection\", [\"angular2/src/facade/lang\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  var lang_1 = require(\"angular2/src/facade/lang\");\n  exports.Map = lang_1.global.Map;\n  exports.Set = lang_1.global.Set;\n  var createMapFromPairs = (function() {\n    try {\n      if (new exports.Map([[1, 2]]).size === 1) {\n        return function createMapFromPairs(pairs) {\n          return new exports.Map(pairs);\n        };\n      }\n    } catch (e) {}\n    return function createMapAndPopulateFromPairs(pairs) {\n      var map = new exports.Map();\n      for (var i = 0; i < pairs.length; i++) {\n        var pair = pairs[i];\n        map.set(pair[0], pair[1]);\n      }\n      return map;\n    };\n  })();\n  var createMapFromMap = (function() {\n    try {\n      if (new exports.Map(new exports.Map())) {\n        return function createMapFromMap(m) {\n          return new exports.Map(m);\n        };\n      }\n    } catch (e) {}\n    return function createMapAndPopulateFromMap(m) {\n      var map = new exports.Map();\n      m.forEach(function(v, k) {\n        map.set(k, v);\n      });\n      return map;\n    };\n  })();\n  var _clearValues = (function() {\n    if ((new exports.Map()).keys().next) {\n      return function _clearValues(m) {\n        var keyIterator = m.keys();\n        var k;\n        while (!((k = keyIterator.next()).done)) {\n          m.set(k.value, null);\n        }\n      };\n    } else {\n      return function _clearValuesWithForeEach(m) {\n        m.forEach(function(v, k) {\n          m.set(k, null);\n        });\n      };\n    }\n  })();\n  var _arrayFromMap = (function() {\n    try {\n      if ((new exports.Map()).values().next) {\n        return function createArrayFromMap(m, getValues) {\n          return getValues ? Array.from(m.values()) : Array.from(m.keys());\n        };\n      }\n    } catch (e) {}\n    return function createArrayFromMapWithForeach(m, getValues) {\n      var res = ListWrapper.createFixedSize(m.size),\n          i = 0;\n      m.forEach(function(v, k) {\n        res[i] = getValues ? v : k;\n        i++;\n      });\n      return res;\n    };\n  })();\n  var MapWrapper = (function() {\n    function MapWrapper() {}\n    MapWrapper.clone = function(m) {\n      return createMapFromMap(m);\n    };\n    MapWrapper.createFromStringMap = function(stringMap) {\n      var result = new exports.Map();\n      for (var prop in stringMap) {\n        result.set(prop, stringMap[prop]);\n      }\n      return result;\n    };\n    MapWrapper.toStringMap = function(m) {\n      var r = {};\n      m.forEach(function(v, k) {\n        return r[k] = v;\n      });\n      return r;\n    };\n    MapWrapper.createFromPairs = function(pairs) {\n      return createMapFromPairs(pairs);\n    };\n    MapWrapper.clearValues = function(m) {\n      _clearValues(m);\n    };\n    MapWrapper.iterable = function(m) {\n      return m;\n    };\n    MapWrapper.keys = function(m) {\n      return _arrayFromMap(m, false);\n    };\n    MapWrapper.values = function(m) {\n      return _arrayFromMap(m, true);\n    };\n    return MapWrapper;\n  })();\n  exports.MapWrapper = MapWrapper;\n  var StringMapWrapper = (function() {\n    function StringMapWrapper() {}\n    StringMapWrapper.create = function() {\n      return {};\n    };\n    StringMapWrapper.contains = function(map, key) {\n      return map.hasOwnProperty(key);\n    };\n    StringMapWrapper.get = function(map, key) {\n      return map.hasOwnProperty(key) ? map[key] : undefined;\n    };\n    StringMapWrapper.set = function(map, key, value) {\n      map[key] = value;\n    };\n    StringMapWrapper.keys = function(map) {\n      return Object.keys(map);\n    };\n    StringMapWrapper.isEmpty = function(map) {\n      for (var prop in map) {\n        return false;\n      }\n      return true;\n    };\n    StringMapWrapper.delete = function(map, key) {\n      delete map[key];\n    };\n    StringMapWrapper.forEach = function(map, callback) {\n      for (var prop in map) {\n        if (map.hasOwnProperty(prop)) {\n          callback(map[prop], prop);\n        }\n      }\n    };\n    StringMapWrapper.merge = function(m1, m2) {\n      var m = {};\n      for (var attr in m1) {\n        if (m1.hasOwnProperty(attr)) {\n          m[attr] = m1[attr];\n        }\n      }\n      for (var attr in m2) {\n        if (m2.hasOwnProperty(attr)) {\n          m[attr] = m2[attr];\n        }\n      }\n      return m;\n    };\n    StringMapWrapper.equals = function(m1, m2) {\n      var k1 = Object.keys(m1);\n      var k2 = Object.keys(m2);\n      if (k1.length != k2.length) {\n        return false;\n      }\n      var key;\n      for (var i = 0; i < k1.length; i++) {\n        key = k1[i];\n        if (m1[key] !== m2[key]) {\n          return false;\n        }\n      }\n      return true;\n    };\n    return StringMapWrapper;\n  })();\n  exports.StringMapWrapper = StringMapWrapper;\n  var ListWrapper = (function() {\n    function ListWrapper() {}\n    ListWrapper.createFixedSize = function(size) {\n      return new Array(size);\n    };\n    ListWrapper.createGrowableSize = function(size) {\n      return new Array(size);\n    };\n    ListWrapper.clone = function(array) {\n      return array.slice(0);\n    };\n    ListWrapper.forEachWithIndex = function(array, fn) {\n      for (var i = 0; i < array.length; i++) {\n        fn(array[i], i);\n      }\n    };\n    ListWrapper.first = function(array) {\n      if (!array)\n        return null;\n      return array[0];\n    };\n    ListWrapper.last = function(array) {\n      if (!array || array.length == 0)\n        return null;\n      return array[array.length - 1];\n    };\n    ListWrapper.indexOf = function(array, value, startIndex) {\n      if (startIndex === void 0) {\n        startIndex = 0;\n      }\n      return array.indexOf(value, startIndex);\n    };\n    ListWrapper.contains = function(list, el) {\n      return list.indexOf(el) !== -1;\n    };\n    ListWrapper.reversed = function(array) {\n      var a = ListWrapper.clone(array);\n      return a.reverse();\n    };\n    ListWrapper.concat = function(a, b) {\n      return a.concat(b);\n    };\n    ListWrapper.insert = function(list, index, value) {\n      list.splice(index, 0, value);\n    };\n    ListWrapper.removeAt = function(list, index) {\n      var res = list[index];\n      list.splice(index, 1);\n      return res;\n    };\n    ListWrapper.removeAll = function(list, items) {\n      for (var i = 0; i < items.length; ++i) {\n        var index = list.indexOf(items[i]);\n        list.splice(index, 1);\n      }\n    };\n    ListWrapper.remove = function(list, el) {\n      var index = list.indexOf(el);\n      if (index > -1) {\n        list.splice(index, 1);\n        return true;\n      }\n      return false;\n    };\n    ListWrapper.clear = function(list) {\n      list.length = 0;\n    };\n    ListWrapper.isEmpty = function(list) {\n      return list.length == 0;\n    };\n    ListWrapper.fill = function(list, value, start, end) {\n      if (start === void 0) {\n        start = 0;\n      }\n      if (end === void 0) {\n        end = null;\n      }\n      list.fill(value, start, end === null ? list.length : end);\n    };\n    ListWrapper.equals = function(a, b) {\n      if (a.length != b.length)\n        return false;\n      for (var i = 0; i < a.length; ++i) {\n        if (a[i] !== b[i])\n          return false;\n      }\n      return true;\n    };\n    ListWrapper.slice = function(l, from, to) {\n      if (from === void 0) {\n        from = 0;\n      }\n      if (to === void 0) {\n        to = null;\n      }\n      return l.slice(from, to === null ? undefined : to);\n    };\n    ListWrapper.splice = function(l, from, length) {\n      return l.splice(from, length);\n    };\n    ListWrapper.sort = function(l, compareFn) {\n      if (lang_1.isPresent(compareFn)) {\n        l.sort(compareFn);\n      } else {\n        l.sort();\n      }\n    };\n    ListWrapper.toString = function(l) {\n      return l.toString();\n    };\n    ListWrapper.toJSON = function(l) {\n      return JSON.stringify(l);\n    };\n    ListWrapper.maximum = function(list, predicate) {\n      if (list.length == 0) {\n        return null;\n      }\n      var solution = null;\n      var maxValue = -Infinity;\n      for (var index = 0; index < list.length; index++) {\n        var candidate = list[index];\n        if (lang_1.isBlank(candidate)) {\n          continue;\n        }\n        var candidateValue = predicate(candidate);\n        if (candidateValue > maxValue) {\n          solution = candidate;\n          maxValue = candidateValue;\n        }\n      }\n      return solution;\n    };\n    return ListWrapper;\n  })();\n  exports.ListWrapper = ListWrapper;\n  function isListLikeIterable(obj) {\n    if (!lang_1.isJsObject(obj))\n      return false;\n    return lang_1.isArray(obj) || (!(obj instanceof exports.Map) && lang_1.getSymbolIterator() in obj);\n  }\n  exports.isListLikeIterable = isListLikeIterable;\n  function iterateListLike(obj, fn) {\n    if (lang_1.isArray(obj)) {\n      for (var i = 0; i < obj.length; i++) {\n        fn(obj[i]);\n      }\n    } else {\n      var iterator = obj[lang_1.getSymbolIterator()]();\n      var item;\n      while (!((item = iterator.next()).done)) {\n        fn(item.value);\n      }\n    }\n  }\n  exports.iterateListLike = iterateListLike;\n  var createSetFromList = (function() {\n    var test = new exports.Set([1, 2, 3]);\n    if (test.size === 3) {\n      return function createSetFromList(lst) {\n        return new exports.Set(lst);\n      };\n    } else {\n      return function createSetAndPopulateFromList(lst) {\n        var res = new exports.Set(lst);\n        if (res.size !== lst.length) {\n          for (var i = 0; i < lst.length; i++) {\n            res.add(lst[i]);\n          }\n        }\n        return res;\n      };\n    }\n  })();\n  var SetWrapper = (function() {\n    function SetWrapper() {}\n    SetWrapper.createFromList = function(lst) {\n      return createSetFromList(lst);\n    };\n    SetWrapper.has = function(s, key) {\n      return s.has(key);\n    };\n    SetWrapper.delete = function(m, k) {\n      m.delete(k);\n    };\n    return SetWrapper;\n  })();\n  exports.SetWrapper = SetWrapper;\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"angular2/src/facade/exception_handler\", [\"angular2/src/facade/lang\", \"angular2/src/facade/exceptions\", \"angular2/src/facade/collection\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  var lang_1 = require(\"angular2/src/facade/lang\");\n  var exceptions_1 = require(\"angular2/src/facade/exceptions\");\n  var collection_1 = require(\"angular2/src/facade/collection\");\n  var _ArrayLogger = (function() {\n    function _ArrayLogger() {\n      this.res = [];\n    }\n    _ArrayLogger.prototype.log = function(s) {\n      this.res.push(s);\n    };\n    _ArrayLogger.prototype.logError = function(s) {\n      this.res.push(s);\n    };\n    _ArrayLogger.prototype.logGroup = function(s) {\n      this.res.push(s);\n    };\n    _ArrayLogger.prototype.logGroupEnd = function() {};\n    ;\n    return _ArrayLogger;\n  })();\n  var ExceptionHandler = (function() {\n    function ExceptionHandler(_logger, _rethrowException) {\n      if (_rethrowException === void 0) {\n        _rethrowException = true;\n      }\n      this._logger = _logger;\n      this._rethrowException = _rethrowException;\n    }\n    ExceptionHandler.exceptionToString = function(exception, stackTrace, reason) {\n      if (stackTrace === void 0) {\n        stackTrace = null;\n      }\n      if (reason === void 0) {\n        reason = null;\n      }\n      var l = new _ArrayLogger();\n      var e = new ExceptionHandler(l, false);\n      e.call(exception, stackTrace, reason);\n      return l.res.join(\"\\n\");\n    };\n    ExceptionHandler.prototype.call = function(exception, stackTrace, reason) {\n      if (stackTrace === void 0) {\n        stackTrace = null;\n      }\n      if (reason === void 0) {\n        reason = null;\n      }\n      var originalException = this._findOriginalException(exception);\n      var originalStack = this._findOriginalStack(exception);\n      var context = this._findContext(exception);\n      this._logger.logGroup(\"EXCEPTION: \" + this._extractMessage(exception));\n      if (lang_1.isPresent(stackTrace) && lang_1.isBlank(originalStack)) {\n        this._logger.logError(\"STACKTRACE:\");\n        this._logger.logError(this._longStackTrace(stackTrace));\n      }\n      if (lang_1.isPresent(reason)) {\n        this._logger.logError(\"REASON: \" + reason);\n      }\n      if (lang_1.isPresent(originalException)) {\n        this._logger.logError(\"ORIGINAL EXCEPTION: \" + this._extractMessage(originalException));\n      }\n      if (lang_1.isPresent(originalStack)) {\n        this._logger.logError(\"ORIGINAL STACKTRACE:\");\n        this._logger.logError(this._longStackTrace(originalStack));\n      }\n      if (lang_1.isPresent(context)) {\n        this._logger.logError(\"ERROR CONTEXT:\");\n        this._logger.logError(context);\n      }\n      this._logger.logGroupEnd();\n      if (this._rethrowException)\n        throw exception;\n    };\n    ExceptionHandler.prototype._extractMessage = function(exception) {\n      return exception instanceof exceptions_1.WrappedException ? exception.wrapperMessage : exception.toString();\n    };\n    ExceptionHandler.prototype._longStackTrace = function(stackTrace) {\n      return collection_1.isListLikeIterable(stackTrace) ? stackTrace.join(\"\\n\\n-----async gap-----\\n\") : stackTrace.toString();\n    };\n    ExceptionHandler.prototype._findContext = function(exception) {\n      try {\n        if (!(exception instanceof exceptions_1.WrappedException))\n          return null;\n        return lang_1.isPresent(exception.context) ? exception.context : this._findContext(exception.originalException);\n      } catch (e) {\n        return null;\n      }\n    };\n    ExceptionHandler.prototype._findOriginalException = function(exception) {\n      if (!(exception instanceof exceptions_1.WrappedException))\n        return null;\n      var e = exception.originalException;\n      while (e instanceof exceptions_1.WrappedException && lang_1.isPresent(e.originalException)) {\n        e = e.originalException;\n      }\n      return e;\n    };\n    ExceptionHandler.prototype._findOriginalStack = function(exception) {\n      if (!(exception instanceof exceptions_1.WrappedException))\n        return null;\n      var e = exception;\n      var stack = exception.originalStack;\n      while (e instanceof exceptions_1.WrappedException && lang_1.isPresent(e.originalException)) {\n        e = e.originalException;\n        if (e instanceof exceptions_1.WrappedException && lang_1.isPresent(e.originalException)) {\n          stack = e.originalStack;\n        }\n      }\n      return stack;\n    };\n    return ExceptionHandler;\n  })();\n  exports.ExceptionHandler = ExceptionHandler;\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"angular2/src/core/reflection/reflector\", [\"angular2/src/facade/lang\", \"angular2/src/facade/exceptions\", \"angular2/src/facade/collection\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  var lang_1 = require(\"angular2/src/facade/lang\");\n  var exceptions_1 = require(\"angular2/src/facade/exceptions\");\n  var collection_1 = require(\"angular2/src/facade/collection\");\n  var ReflectionInfo = (function() {\n    function ReflectionInfo(annotations, parameters, factory, interfaces, propMetadata) {\n      this.annotations = annotations;\n      this.parameters = parameters;\n      this.factory = factory;\n      this.interfaces = interfaces;\n      this.propMetadata = propMetadata;\n    }\n    return ReflectionInfo;\n  })();\n  exports.ReflectionInfo = ReflectionInfo;\n  var Reflector = (function() {\n    function Reflector(reflectionCapabilities) {\n      this._injectableInfo = new collection_1.Map();\n      this._getters = new collection_1.Map();\n      this._setters = new collection_1.Map();\n      this._methods = new collection_1.Map();\n      this._usedKeys = null;\n      this.reflectionCapabilities = reflectionCapabilities;\n    }\n    Reflector.prototype.isReflectionEnabled = function() {\n      return this.reflectionCapabilities.isReflectionEnabled();\n    };\n    Reflector.prototype.trackUsage = function() {\n      this._usedKeys = new collection_1.Set();\n    };\n    Reflector.prototype.listUnusedKeys = function() {\n      var _this = this;\n      if (this._usedKeys == null) {\n        throw new exceptions_1.BaseException('Usage tracking is disabled');\n      }\n      var allTypes = collection_1.MapWrapper.keys(this._injectableInfo);\n      return allTypes.filter(function(key) {\n        return !collection_1.SetWrapper.has(_this._usedKeys, key);\n      });\n    };\n    Reflector.prototype.registerFunction = function(func, funcInfo) {\n      this._injectableInfo.set(func, funcInfo);\n    };\n    Reflector.prototype.registerType = function(type, typeInfo) {\n      this._injectableInfo.set(type, typeInfo);\n    };\n    Reflector.prototype.registerGetters = function(getters) {\n      _mergeMaps(this._getters, getters);\n    };\n    Reflector.prototype.registerSetters = function(setters) {\n      _mergeMaps(this._setters, setters);\n    };\n    Reflector.prototype.registerMethods = function(methods) {\n      _mergeMaps(this._methods, methods);\n    };\n    Reflector.prototype.factory = function(type) {\n      if (this._containsReflectionInfo(type)) {\n        var res = this._getReflectionInfo(type).factory;\n        return lang_1.isPresent(res) ? res : null;\n      } else {\n        return this.reflectionCapabilities.factory(type);\n      }\n    };\n    Reflector.prototype.parameters = function(typeOrFunc) {\n      if (this._injectableInfo.has(typeOrFunc)) {\n        var res = this._getReflectionInfo(typeOrFunc).parameters;\n        return lang_1.isPresent(res) ? res : [];\n      } else {\n        return this.reflectionCapabilities.parameters(typeOrFunc);\n      }\n    };\n    Reflector.prototype.annotations = function(typeOrFunc) {\n      if (this._injectableInfo.has(typeOrFunc)) {\n        var res = this._getReflectionInfo(typeOrFunc).annotations;\n        return lang_1.isPresent(res) ? res : [];\n      } else {\n        return this.reflectionCapabilities.annotations(typeOrFunc);\n      }\n    };\n    Reflector.prototype.propMetadata = function(typeOrFunc) {\n      if (this._injectableInfo.has(typeOrFunc)) {\n        var res = this._getReflectionInfo(typeOrFunc).propMetadata;\n        return lang_1.isPresent(res) ? res : {};\n      } else {\n        return this.reflectionCapabilities.propMetadata(typeOrFunc);\n      }\n    };\n    Reflector.prototype.interfaces = function(type) {\n      if (this._injectableInfo.has(type)) {\n        var res = this._getReflectionInfo(type).interfaces;\n        return lang_1.isPresent(res) ? res : [];\n      } else {\n        return this.reflectionCapabilities.interfaces(type);\n      }\n    };\n    Reflector.prototype.getter = function(name) {\n      if (this._getters.has(name)) {\n        return this._getters.get(name);\n      } else {\n        return this.reflectionCapabilities.getter(name);\n      }\n    };\n    Reflector.prototype.setter = function(name) {\n      if (this._setters.has(name)) {\n        return this._setters.get(name);\n      } else {\n        return this.reflectionCapabilities.setter(name);\n      }\n    };\n    Reflector.prototype.method = function(name) {\n      if (this._methods.has(name)) {\n        return this._methods.get(name);\n      } else {\n        return this.reflectionCapabilities.method(name);\n      }\n    };\n    Reflector.prototype._getReflectionInfo = function(typeOrFunc) {\n      if (lang_1.isPresent(this._usedKeys)) {\n        this._usedKeys.add(typeOrFunc);\n      }\n      return this._injectableInfo.get(typeOrFunc);\n    };\n    Reflector.prototype._containsReflectionInfo = function(typeOrFunc) {\n      return this._injectableInfo.has(typeOrFunc);\n    };\n    Reflector.prototype.importUri = function(type) {\n      return this.reflectionCapabilities.importUri(type);\n    };\n    return Reflector;\n  })();\n  exports.Reflector = Reflector;\n  function _mergeMaps(target, config) {\n    collection_1.StringMapWrapper.forEach(config, function(v, k) {\n      return target.set(k, v);\n    });\n  }\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"angular2/src/core/reflection/reflection_capabilities\", [\"angular2/src/facade/lang\", \"angular2/src/facade/exceptions\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  var lang_1 = require(\"angular2/src/facade/lang\");\n  var exceptions_1 = require(\"angular2/src/facade/exceptions\");\n  var ReflectionCapabilities = (function() {\n    function ReflectionCapabilities(reflect) {\n      this._reflect = lang_1.isPresent(reflect) ? reflect : lang_1.global.Reflect;\n    }\n    ReflectionCapabilities.prototype.isReflectionEnabled = function() {\n      return true;\n    };\n    ReflectionCapabilities.prototype.factory = function(t) {\n      switch (t.length) {\n        case 0:\n          return function() {\n            return new t();\n          };\n        case 1:\n          return function(a1) {\n            return new t(a1);\n          };\n        case 2:\n          return function(a1, a2) {\n            return new t(a1, a2);\n          };\n        case 3:\n          return function(a1, a2, a3) {\n            return new t(a1, a2, a3);\n          };\n        case 4:\n          return function(a1, a2, a3, a4) {\n            return new t(a1, a2, a3, a4);\n          };\n        case 5:\n          return function(a1, a2, a3, a4, a5) {\n            return new t(a1, a2, a3, a4, a5);\n          };\n        case 6:\n          return function(a1, a2, a3, a4, a5, a6) {\n            return new t(a1, a2, a3, a4, a5, a6);\n          };\n        case 7:\n          return function(a1, a2, a3, a4, a5, a6, a7) {\n            return new t(a1, a2, a3, a4, a5, a6, a7);\n          };\n        case 8:\n          return function(a1, a2, a3, a4, a5, a6, a7, a8) {\n            return new t(a1, a2, a3, a4, a5, a6, a7, a8);\n          };\n        case 9:\n          return function(a1, a2, a3, a4, a5, a6, a7, a8, a9) {\n            return new t(a1, a2, a3, a4, a5, a6, a7, a8, a9);\n          };\n        case 10:\n          return function(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10) {\n            return new t(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10);\n          };\n        case 11:\n          return function(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11) {\n            return new t(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11);\n          };\n        case 12:\n          return function(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12) {\n            return new t(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12);\n          };\n        case 13:\n          return function(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13) {\n            return new t(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13);\n          };\n        case 14:\n          return function(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14) {\n            return new t(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14);\n          };\n        case 15:\n          return function(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15) {\n            return new t(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15);\n          };\n        case 16:\n          return function(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16) {\n            return new t(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16);\n          };\n        case 17:\n          return function(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17) {\n            return new t(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17);\n          };\n        case 18:\n          return function(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18) {\n            return new t(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18);\n          };\n        case 19:\n          return function(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19) {\n            return new t(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19);\n          };\n        case 20:\n          return function(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20) {\n            return new t(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20);\n          };\n      }\n      ;\n      throw new Error(\"Cannot create a factory for '\" + lang_1.stringify(t) + \"' because its constructor has more than 20 arguments\");\n    };\n    ReflectionCapabilities.prototype._zipTypesAndAnnotaions = function(paramTypes, paramAnnotations) {\n      var result;\n      if (typeof paramTypes === 'undefined') {\n        result = new Array(paramAnnotations.length);\n      } else {\n        result = new Array(paramTypes.length);\n      }\n      for (var i = 0; i < result.length; i++) {\n        if (typeof paramTypes === 'undefined') {\n          result[i] = [];\n        } else if (paramTypes[i] != Object) {\n          result[i] = [paramTypes[i]];\n        } else {\n          result[i] = [];\n        }\n        if (lang_1.isPresent(paramAnnotations) && lang_1.isPresent(paramAnnotations[i])) {\n          result[i] = result[i].concat(paramAnnotations[i]);\n        }\n      }\n      return result;\n    };\n    ReflectionCapabilities.prototype.parameters = function(typeOrFunc) {\n      if (lang_1.isPresent(typeOrFunc.parameters)) {\n        return typeOrFunc.parameters;\n      }\n      if (lang_1.isPresent(this._reflect) && lang_1.isPresent(this._reflect.getMetadata)) {\n        var paramAnnotations = this._reflect.getMetadata('parameters', typeOrFunc);\n        var paramTypes = this._reflect.getMetadata('design:paramtypes', typeOrFunc);\n        if (lang_1.isPresent(paramTypes) || lang_1.isPresent(paramAnnotations)) {\n          return this._zipTypesAndAnnotaions(paramTypes, paramAnnotations);\n        }\n      }\n      var parameters = new Array(typeOrFunc.length);\n      parameters.fill(undefined);\n      return parameters;\n    };\n    ReflectionCapabilities.prototype.annotations = function(typeOrFunc) {\n      if (lang_1.isPresent(typeOrFunc.annotations)) {\n        var annotations = typeOrFunc.annotations;\n        if (lang_1.isFunction(annotations) && annotations.annotations) {\n          annotations = annotations.annotations;\n        }\n        return annotations;\n      }\n      if (lang_1.isPresent(this._reflect) && lang_1.isPresent(this._reflect.getMetadata)) {\n        var annotations = this._reflect.getMetadata('annotations', typeOrFunc);\n        if (lang_1.isPresent(annotations))\n          return annotations;\n      }\n      return [];\n    };\n    ReflectionCapabilities.prototype.propMetadata = function(typeOrFunc) {\n      if (lang_1.isPresent(typeOrFunc.propMetadata)) {\n        var propMetadata = typeOrFunc.propMetadata;\n        if (lang_1.isFunction(propMetadata) && propMetadata.propMetadata) {\n          propMetadata = propMetadata.propMetadata;\n        }\n        return propMetadata;\n      }\n      if (lang_1.isPresent(this._reflect) && lang_1.isPresent(this._reflect.getMetadata)) {\n        var propMetadata = this._reflect.getMetadata('propMetadata', typeOrFunc);\n        if (lang_1.isPresent(propMetadata))\n          return propMetadata;\n      }\n      return {};\n    };\n    ReflectionCapabilities.prototype.interfaces = function(type) {\n      throw new exceptions_1.BaseException(\"JavaScript does not support interfaces\");\n    };\n    ReflectionCapabilities.prototype.getter = function(name) {\n      return new Function('o', 'return o.' + name + ';');\n    };\n    ReflectionCapabilities.prototype.setter = function(name) {\n      return new Function('o', 'v', 'return o.' + name + ' = v;');\n    };\n    ReflectionCapabilities.prototype.method = function(name) {\n      var functionBody = \"if (!o.\" + name + \") throw new Error('\\\"\" + name + \"\\\" is undefined');\\n        return o.\" + name + \".apply(o, args);\";\n      return new Function('o', 'args', functionBody);\n    };\n    ReflectionCapabilities.prototype.importUri = function(type) {\n      return './';\n    };\n    return ReflectionCapabilities;\n  })();\n  exports.ReflectionCapabilities = ReflectionCapabilities;\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"angular2/src/core/di/type_literal\", [], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  var TypeLiteral = (function() {\n    function TypeLiteral() {}\n    Object.defineProperty(TypeLiteral.prototype, \"type\", {\n      get: function() {\n        throw new Error(\"Type literals are only supported in Dart\");\n      },\n      enumerable: true,\n      configurable: true\n    });\n    return TypeLiteral;\n  })();\n  exports.TypeLiteral = TypeLiteral;\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"angular2/src/core/di/exceptions\", [\"angular2/src/facade/collection\", \"angular2/src/facade/lang\", \"angular2/src/facade/exceptions\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  var __extends = (this && this.__extends) || function(d, b) {\n    for (var p in b)\n      if (b.hasOwnProperty(p))\n        d[p] = b[p];\n    function __() {\n      this.constructor = d;\n    }\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n  };\n  var collection_1 = require(\"angular2/src/facade/collection\");\n  var lang_1 = require(\"angular2/src/facade/lang\");\n  var exceptions_1 = require(\"angular2/src/facade/exceptions\");\n  function findFirstClosedCycle(keys) {\n    var res = [];\n    for (var i = 0; i < keys.length; ++i) {\n      if (collection_1.ListWrapper.contains(res, keys[i])) {\n        res.push(keys[i]);\n        return res;\n      } else {\n        res.push(keys[i]);\n      }\n    }\n    return res;\n  }\n  function constructResolvingPath(keys) {\n    if (keys.length > 1) {\n      var reversed = findFirstClosedCycle(collection_1.ListWrapper.reversed(keys));\n      var tokenStrs = reversed.map(function(k) {\n        return lang_1.stringify(k.token);\n      });\n      return \" (\" + tokenStrs.join(' -> ') + \")\";\n    } else {\n      return \"\";\n    }\n  }\n  var AbstractProviderError = (function(_super) {\n    __extends(AbstractProviderError, _super);\n    function AbstractProviderError(injector, key, constructResolvingMessage) {\n      _super.call(this, \"DI Exception\");\n      this.keys = [key];\n      this.injectors = [injector];\n      this.constructResolvingMessage = constructResolvingMessage;\n      this.message = this.constructResolvingMessage(this.keys);\n    }\n    AbstractProviderError.prototype.addKey = function(injector, key) {\n      this.injectors.push(injector);\n      this.keys.push(key);\n      this.message = this.constructResolvingMessage(this.keys);\n    };\n    Object.defineProperty(AbstractProviderError.prototype, \"context\", {\n      get: function() {\n        return this.injectors[this.injectors.length - 1].debugContext();\n      },\n      enumerable: true,\n      configurable: true\n    });\n    return AbstractProviderError;\n  })(exceptions_1.BaseException);\n  exports.AbstractProviderError = AbstractProviderError;\n  var NoProviderError = (function(_super) {\n    __extends(NoProviderError, _super);\n    function NoProviderError(injector, key) {\n      _super.call(this, injector, key, function(keys) {\n        var first = lang_1.stringify(collection_1.ListWrapper.first(keys).token);\n        return \"No provider for \" + first + \"!\" + constructResolvingPath(keys);\n      });\n    }\n    return NoProviderError;\n  })(AbstractProviderError);\n  exports.NoProviderError = NoProviderError;\n  var CyclicDependencyError = (function(_super) {\n    __extends(CyclicDependencyError, _super);\n    function CyclicDependencyError(injector, key) {\n      _super.call(this, injector, key, function(keys) {\n        return \"Cannot instantiate cyclic dependency!\" + constructResolvingPath(keys);\n      });\n    }\n    return CyclicDependencyError;\n  })(AbstractProviderError);\n  exports.CyclicDependencyError = CyclicDependencyError;\n  var InstantiationError = (function(_super) {\n    __extends(InstantiationError, _super);\n    function InstantiationError(injector, originalException, originalStack, key) {\n      _super.call(this, \"DI Exception\", originalException, originalStack, null);\n      this.keys = [key];\n      this.injectors = [injector];\n    }\n    InstantiationError.prototype.addKey = function(injector, key) {\n      this.injectors.push(injector);\n      this.keys.push(key);\n    };\n    Object.defineProperty(InstantiationError.prototype, \"wrapperMessage\", {\n      get: function() {\n        var first = lang_1.stringify(collection_1.ListWrapper.first(this.keys).token);\n        return \"Error during instantiation of \" + first + \"!\" + constructResolvingPath(this.keys) + \".\";\n      },\n      enumerable: true,\n      configurable: true\n    });\n    Object.defineProperty(InstantiationError.prototype, \"causeKey\", {\n      get: function() {\n        return this.keys[0];\n      },\n      enumerable: true,\n      configurable: true\n    });\n    Object.defineProperty(InstantiationError.prototype, \"context\", {\n      get: function() {\n        return this.injectors[this.injectors.length - 1].debugContext();\n      },\n      enumerable: true,\n      configurable: true\n    });\n    return InstantiationError;\n  })(exceptions_1.WrappedException);\n  exports.InstantiationError = InstantiationError;\n  var InvalidProviderError = (function(_super) {\n    __extends(InvalidProviderError, _super);\n    function InvalidProviderError(provider) {\n      _super.call(this, \"Invalid provider - only instances of Provider and Type are allowed, got: \" + provider.toString());\n    }\n    return InvalidProviderError;\n  })(exceptions_1.BaseException);\n  exports.InvalidProviderError = InvalidProviderError;\n  var NoAnnotationError = (function(_super) {\n    __extends(NoAnnotationError, _super);\n    function NoAnnotationError(typeOrFunc, params) {\n      _super.call(this, NoAnnotationError._genMessage(typeOrFunc, params));\n    }\n    NoAnnotationError._genMessage = function(typeOrFunc, params) {\n      var signature = [];\n      for (var i = 0,\n          ii = params.length; i < ii; i++) {\n        var parameter = params[i];\n        if (lang_1.isBlank(parameter) || parameter.length == 0) {\n          signature.push('?');\n        } else {\n          signature.push(parameter.map(lang_1.stringify).join(' '));\n        }\n      }\n      return \"Cannot resolve all parameters for \" + lang_1.stringify(typeOrFunc) + \"(\" + signature.join(', ') + \"). \" + 'Make sure they all have valid type or annotations.';\n    };\n    return NoAnnotationError;\n  })(exceptions_1.BaseException);\n  exports.NoAnnotationError = NoAnnotationError;\n  var OutOfBoundsError = (function(_super) {\n    __extends(OutOfBoundsError, _super);\n    function OutOfBoundsError(index) {\n      _super.call(this, \"Index \" + index + \" is out-of-bounds.\");\n    }\n    return OutOfBoundsError;\n  })(exceptions_1.BaseException);\n  exports.OutOfBoundsError = OutOfBoundsError;\n  var MixingMultiProvidersWithRegularProvidersError = (function(_super) {\n    __extends(MixingMultiProvidersWithRegularProvidersError, _super);\n    function MixingMultiProvidersWithRegularProvidersError(provider1, provider2) {\n      _super.call(this, \"Cannot mix multi providers and regular providers, got: \" + provider1.toString() + \" \" + provider2.toString());\n    }\n    return MixingMultiProvidersWithRegularProvidersError;\n  })(exceptions_1.BaseException);\n  exports.MixingMultiProvidersWithRegularProvidersError = MixingMultiProvidersWithRegularProvidersError;\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"angular2/src/core/di/opaque_token\", [\"angular2/src/facade/lang\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  var __decorate = (this && this.__decorate) || function(decorators, target, key, desc) {\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\")\n      return Reflect.decorate(decorators, target, key, desc);\n    switch (arguments.length) {\n      case 2:\n        return decorators.reduceRight(function(o, d) {\n          return (d && d(o)) || o;\n        }, target);\n      case 3:\n        return decorators.reduceRight(function(o, d) {\n          return (d && d(target, key)), void 0;\n        }, void 0);\n      case 4:\n        return decorators.reduceRight(function(o, d) {\n          return (d && d(target, key, o)) || o;\n        }, desc);\n    }\n  };\n  var __metadata = (this && this.__metadata) || function(k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\")\n      return Reflect.metadata(k, v);\n  };\n  var lang_1 = require(\"angular2/src/facade/lang\");\n  var OpaqueToken = (function() {\n    function OpaqueToken(_desc) {\n      this._desc = _desc;\n    }\n    OpaqueToken.prototype.toString = function() {\n      return \"Token \" + this._desc;\n    };\n    OpaqueToken = __decorate([lang_1.CONST(), __metadata('design:paramtypes', [String])], OpaqueToken);\n    return OpaqueToken;\n  })();\n  exports.OpaqueToken = OpaqueToken;\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"angular2/src/core/change_detection/differs/iterable_differs\", [\"angular2/src/facade/lang\", \"angular2/src/facade/exceptions\", \"angular2/src/facade/collection\", \"angular2/src/core/di\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  var __decorate = (this && this.__decorate) || function(decorators, target, key, desc) {\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\")\n      return Reflect.decorate(decorators, target, key, desc);\n    switch (arguments.length) {\n      case 2:\n        return decorators.reduceRight(function(o, d) {\n          return (d && d(o)) || o;\n        }, target);\n      case 3:\n        return decorators.reduceRight(function(o, d) {\n          return (d && d(target, key)), void 0;\n        }, void 0);\n      case 4:\n        return decorators.reduceRight(function(o, d) {\n          return (d && d(target, key, o)) || o;\n        }, desc);\n    }\n  };\n  var __metadata = (this && this.__metadata) || function(k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\")\n      return Reflect.metadata(k, v);\n  };\n  var lang_1 = require(\"angular2/src/facade/lang\");\n  var exceptions_1 = require(\"angular2/src/facade/exceptions\");\n  var collection_1 = require(\"angular2/src/facade/collection\");\n  var di_1 = require(\"angular2/src/core/di\");\n  var IterableDiffers = (function() {\n    function IterableDiffers(factories) {\n      this.factories = factories;\n    }\n    IterableDiffers.create = function(factories, parent) {\n      if (lang_1.isPresent(parent)) {\n        var copied = collection_1.ListWrapper.clone(parent.factories);\n        factories = factories.concat(copied);\n        return new IterableDiffers(factories);\n      } else {\n        return new IterableDiffers(factories);\n      }\n    };\n    IterableDiffers.extend = function(factories) {\n      return new di_1.Provider(IterableDiffers, {\n        useFactory: function(parent) {\n          if (lang_1.isBlank(parent)) {\n            throw new exceptions_1.BaseException('Cannot extend IterableDiffers without a parent injector');\n          }\n          return IterableDiffers.create(factories, parent);\n        },\n        deps: [[IterableDiffers, new di_1.SkipSelfMetadata(), new di_1.OptionalMetadata()]]\n      });\n    };\n    IterableDiffers.prototype.find = function(iterable) {\n      var factory = this.factories.find(function(f) {\n        return f.supports(iterable);\n      });\n      if (lang_1.isPresent(factory)) {\n        return factory;\n      } else {\n        throw new exceptions_1.BaseException(\"Cannot find a differ supporting object '\" + iterable + \"'\");\n      }\n    };\n    IterableDiffers = __decorate([di_1.Injectable(), lang_1.CONST(), __metadata('design:paramtypes', [Array])], IterableDiffers);\n    return IterableDiffers;\n  })();\n  exports.IterableDiffers = IterableDiffers;\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"angular2/src/core/change_detection/differs/default_iterable_differ\", [\"angular2/src/facade/lang\", \"angular2/src/facade/exceptions\", \"angular2/src/facade/collection\", \"angular2/src/facade/lang\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  var __decorate = (this && this.__decorate) || function(decorators, target, key, desc) {\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\")\n      return Reflect.decorate(decorators, target, key, desc);\n    switch (arguments.length) {\n      case 2:\n        return decorators.reduceRight(function(o, d) {\n          return (d && d(o)) || o;\n        }, target);\n      case 3:\n        return decorators.reduceRight(function(o, d) {\n          return (d && d(target, key)), void 0;\n        }, void 0);\n      case 4:\n        return decorators.reduceRight(function(o, d) {\n          return (d && d(target, key, o)) || o;\n        }, desc);\n    }\n  };\n  var __metadata = (this && this.__metadata) || function(k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\")\n      return Reflect.metadata(k, v);\n  };\n  var lang_1 = require(\"angular2/src/facade/lang\");\n  var exceptions_1 = require(\"angular2/src/facade/exceptions\");\n  var collection_1 = require(\"angular2/src/facade/collection\");\n  var lang_2 = require(\"angular2/src/facade/lang\");\n  var DefaultIterableDifferFactory = (function() {\n    function DefaultIterableDifferFactory() {}\n    DefaultIterableDifferFactory.prototype.supports = function(obj) {\n      return collection_1.isListLikeIterable(obj);\n    };\n    DefaultIterableDifferFactory.prototype.create = function(cdRef) {\n      return new DefaultIterableDiffer();\n    };\n    DefaultIterableDifferFactory = __decorate([lang_1.CONST(), __metadata('design:paramtypes', [])], DefaultIterableDifferFactory);\n    return DefaultIterableDifferFactory;\n  })();\n  exports.DefaultIterableDifferFactory = DefaultIterableDifferFactory;\n  var DefaultIterableDiffer = (function() {\n    function DefaultIterableDiffer() {\n      this._collection = null;\n      this._length = null;\n      this._linkedRecords = null;\n      this._unlinkedRecords = null;\n      this._previousItHead = null;\n      this._itHead = null;\n      this._itTail = null;\n      this._additionsHead = null;\n      this._additionsTail = null;\n      this._movesHead = null;\n      this._movesTail = null;\n      this._removalsHead = null;\n      this._removalsTail = null;\n    }\n    Object.defineProperty(DefaultIterableDiffer.prototype, \"collection\", {\n      get: function() {\n        return this._collection;\n      },\n      enumerable: true,\n      configurable: true\n    });\n    Object.defineProperty(DefaultIterableDiffer.prototype, \"length\", {\n      get: function() {\n        return this._length;\n      },\n      enumerable: true,\n      configurable: true\n    });\n    DefaultIterableDiffer.prototype.forEachItem = function(fn) {\n      var record;\n      for (record = this._itHead; record !== null; record = record._next) {\n        fn(record);\n      }\n    };\n    DefaultIterableDiffer.prototype.forEachPreviousItem = function(fn) {\n      var record;\n      for (record = this._previousItHead; record !== null; record = record._nextPrevious) {\n        fn(record);\n      }\n    };\n    DefaultIterableDiffer.prototype.forEachAddedItem = function(fn) {\n      var record;\n      for (record = this._additionsHead; record !== null; record = record._nextAdded) {\n        fn(record);\n      }\n    };\n    DefaultIterableDiffer.prototype.forEachMovedItem = function(fn) {\n      var record;\n      for (record = this._movesHead; record !== null; record = record._nextMoved) {\n        fn(record);\n      }\n    };\n    DefaultIterableDiffer.prototype.forEachRemovedItem = function(fn) {\n      var record;\n      for (record = this._removalsHead; record !== null; record = record._nextRemoved) {\n        fn(record);\n      }\n    };\n    DefaultIterableDiffer.prototype.diff = function(collection) {\n      if (lang_2.isBlank(collection))\n        collection = [];\n      if (!collection_1.isListLikeIterable(collection)) {\n        throw new exceptions_1.BaseException(\"Error trying to diff '\" + collection + \"'\");\n      }\n      if (this.check(collection)) {\n        return this;\n      } else {\n        return null;\n      }\n    };\n    DefaultIterableDiffer.prototype.onDestroy = function() {};\n    DefaultIterableDiffer.prototype.check = function(collection) {\n      var _this = this;\n      this._reset();\n      var record = this._itHead;\n      var mayBeDirty = false;\n      var index;\n      var item;\n      if (lang_2.isArray(collection)) {\n        var list = collection;\n        this._length = collection.length;\n        for (index = 0; index < this._length; index++) {\n          item = list[index];\n          if (record === null || !lang_2.looseIdentical(record.item, item)) {\n            record = this._mismatch(record, item, index);\n            mayBeDirty = true;\n          } else if (mayBeDirty) {\n            record = this._verifyReinsertion(record, item, index);\n          }\n          record = record._next;\n        }\n      } else {\n        index = 0;\n        collection_1.iterateListLike(collection, function(item) {\n          if (record === null || !lang_2.looseIdentical(record.item, item)) {\n            record = _this._mismatch(record, item, index);\n            mayBeDirty = true;\n          } else if (mayBeDirty) {\n            record = _this._verifyReinsertion(record, item, index);\n          }\n          record = record._next;\n          index++;\n        });\n        this._length = index;\n      }\n      this._truncate(record);\n      this._collection = collection;\n      return this.isDirty;\n    };\n    Object.defineProperty(DefaultIterableDiffer.prototype, \"isDirty\", {\n      get: function() {\n        return this._additionsHead !== null || this._movesHead !== null || this._removalsHead !== null;\n      },\n      enumerable: true,\n      configurable: true\n    });\n    DefaultIterableDiffer.prototype._reset = function() {\n      if (this.isDirty) {\n        var record;\n        var nextRecord;\n        for (record = this._previousItHead = this._itHead; record !== null; record = record._next) {\n          record._nextPrevious = record._next;\n        }\n        for (record = this._additionsHead; record !== null; record = record._nextAdded) {\n          record.previousIndex = record.currentIndex;\n        }\n        this._additionsHead = this._additionsTail = null;\n        for (record = this._movesHead; record !== null; record = nextRecord) {\n          record.previousIndex = record.currentIndex;\n          nextRecord = record._nextMoved;\n        }\n        this._movesHead = this._movesTail = null;\n        this._removalsHead = this._removalsTail = null;\n      }\n    };\n    DefaultIterableDiffer.prototype._mismatch = function(record, item, index) {\n      var previousRecord;\n      if (record === null) {\n        previousRecord = this._itTail;\n      } else {\n        previousRecord = record._prev;\n        this._remove(record);\n      }\n      record = this._linkedRecords === null ? null : this._linkedRecords.get(item, index);\n      if (record !== null) {\n        this._moveAfter(record, previousRecord, index);\n      } else {\n        record = this._unlinkedRecords === null ? null : this._unlinkedRecords.get(item);\n        if (record !== null) {\n          this._reinsertAfter(record, previousRecord, index);\n        } else {\n          record = this._addAfter(new CollectionChangeRecord(item), previousRecord, index);\n        }\n      }\n      return record;\n    };\n    DefaultIterableDiffer.prototype._verifyReinsertion = function(record, item, index) {\n      var reinsertRecord = this._unlinkedRecords === null ? null : this._unlinkedRecords.get(item);\n      if (reinsertRecord !== null) {\n        record = this._reinsertAfter(reinsertRecord, record._prev, index);\n      } else if (record.currentIndex != index) {\n        record.currentIndex = index;\n        this._addToMoves(record, index);\n      }\n      return record;\n    };\n    DefaultIterableDiffer.prototype._truncate = function(record) {\n      while (record !== null) {\n        var nextRecord = record._next;\n        this._addToRemovals(this._unlink(record));\n        record = nextRecord;\n      }\n      if (this._unlinkedRecords !== null) {\n        this._unlinkedRecords.clear();\n      }\n      if (this._additionsTail !== null) {\n        this._additionsTail._nextAdded = null;\n      }\n      if (this._movesTail !== null) {\n        this._movesTail._nextMoved = null;\n      }\n      if (this._itTail !== null) {\n        this._itTail._next = null;\n      }\n      if (this._removalsTail !== null) {\n        this._removalsTail._nextRemoved = null;\n      }\n    };\n    DefaultIterableDiffer.prototype._reinsertAfter = function(record, prevRecord, index) {\n      if (this._unlinkedRecords !== null) {\n        this._unlinkedRecords.remove(record);\n      }\n      var prev = record._prevRemoved;\n      var next = record._nextRemoved;\n      if (prev === null) {\n        this._removalsHead = next;\n      } else {\n        prev._nextRemoved = next;\n      }\n      if (next === null) {\n        this._removalsTail = prev;\n      } else {\n        next._prevRemoved = prev;\n      }\n      this._insertAfter(record, prevRecord, index);\n      this._addToMoves(record, index);\n      return record;\n    };\n    DefaultIterableDiffer.prototype._moveAfter = function(record, prevRecord, index) {\n      this._unlink(record);\n      this._insertAfter(record, prevRecord, index);\n      this._addToMoves(record, index);\n      return record;\n    };\n    DefaultIterableDiffer.prototype._addAfter = function(record, prevRecord, index) {\n      this._insertAfter(record, prevRecord, index);\n      if (this._additionsTail === null) {\n        this._additionsTail = this._additionsHead = record;\n      } else {\n        this._additionsTail = this._additionsTail._nextAdded = record;\n      }\n      return record;\n    };\n    DefaultIterableDiffer.prototype._insertAfter = function(record, prevRecord, index) {\n      var next = prevRecord === null ? this._itHead : prevRecord._next;\n      record._next = next;\n      record._prev = prevRecord;\n      if (next === null) {\n        this._itTail = record;\n      } else {\n        next._prev = record;\n      }\n      if (prevRecord === null) {\n        this._itHead = record;\n      } else {\n        prevRecord._next = record;\n      }\n      if (this._linkedRecords === null) {\n        this._linkedRecords = new _DuplicateMap();\n      }\n      this._linkedRecords.put(record);\n      record.currentIndex = index;\n      return record;\n    };\n    DefaultIterableDiffer.prototype._remove = function(record) {\n      return this._addToRemovals(this._unlink(record));\n    };\n    DefaultIterableDiffer.prototype._unlink = function(record) {\n      if (this._linkedRecords !== null) {\n        this._linkedRecords.remove(record);\n      }\n      var prev = record._prev;\n      var next = record._next;\n      if (prev === null) {\n        this._itHead = next;\n      } else {\n        prev._next = next;\n      }\n      if (next === null) {\n        this._itTail = prev;\n      } else {\n        next._prev = prev;\n      }\n      return record;\n    };\n    DefaultIterableDiffer.prototype._addToMoves = function(record, toIndex) {\n      if (record.previousIndex === toIndex) {\n        return record;\n      }\n      if (this._movesTail === null) {\n        this._movesTail = this._movesHead = record;\n      } else {\n        this._movesTail = this._movesTail._nextMoved = record;\n      }\n      return record;\n    };\n    DefaultIterableDiffer.prototype._addToRemovals = function(record) {\n      if (this._unlinkedRecords === null) {\n        this._unlinkedRecords = new _DuplicateMap();\n      }\n      this._unlinkedRecords.put(record);\n      record.currentIndex = null;\n      record._nextRemoved = null;\n      if (this._removalsTail === null) {\n        this._removalsTail = this._removalsHead = record;\n        record._prevRemoved = null;\n      } else {\n        record._prevRemoved = this._removalsTail;\n        this._removalsTail = this._removalsTail._nextRemoved = record;\n      }\n      return record;\n    };\n    DefaultIterableDiffer.prototype.toString = function() {\n      var record;\n      var list = [];\n      for (record = this._itHead; record !== null; record = record._next) {\n        list.push(record);\n      }\n      var previous = [];\n      for (record = this._previousItHead; record !== null; record = record._nextPrevious) {\n        previous.push(record);\n      }\n      var additions = [];\n      for (record = this._additionsHead; record !== null; record = record._nextAdded) {\n        additions.push(record);\n      }\n      var moves = [];\n      for (record = this._movesHead; record !== null; record = record._nextMoved) {\n        moves.push(record);\n      }\n      var removals = [];\n      for (record = this._removalsHead; record !== null; record = record._nextRemoved) {\n        removals.push(record);\n      }\n      return \"collection: \" + list.join(', ') + \"\\n\" + \"previous: \" + previous.join(', ') + \"\\n\" + \"additions: \" + additions.join(', ') + \"\\n\" + \"moves: \" + moves.join(', ') + \"\\n\" + \"removals: \" + removals.join(', ') + \"\\n\";\n    };\n    return DefaultIterableDiffer;\n  })();\n  exports.DefaultIterableDiffer = DefaultIterableDiffer;\n  var CollectionChangeRecord = (function() {\n    function CollectionChangeRecord(item) {\n      this.item = item;\n      this.currentIndex = null;\n      this.previousIndex = null;\n      this._nextPrevious = null;\n      this._prev = null;\n      this._next = null;\n      this._prevDup = null;\n      this._nextDup = null;\n      this._prevRemoved = null;\n      this._nextRemoved = null;\n      this._nextAdded = null;\n      this._nextMoved = null;\n    }\n    CollectionChangeRecord.prototype.toString = function() {\n      return this.previousIndex === this.currentIndex ? lang_2.stringify(this.item) : lang_2.stringify(this.item) + '[' + lang_2.stringify(this.previousIndex) + '->' + lang_2.stringify(this.currentIndex) + ']';\n    };\n    return CollectionChangeRecord;\n  })();\n  exports.CollectionChangeRecord = CollectionChangeRecord;\n  var _DuplicateItemRecordList = (function() {\n    function _DuplicateItemRecordList() {\n      this._head = null;\n      this._tail = null;\n    }\n    _DuplicateItemRecordList.prototype.add = function(record) {\n      if (this._head === null) {\n        this._head = this._tail = record;\n        record._nextDup = null;\n        record._prevDup = null;\n      } else {\n        this._tail._nextDup = record;\n        record._prevDup = this._tail;\n        record._nextDup = null;\n        this._tail = record;\n      }\n    };\n    _DuplicateItemRecordList.prototype.get = function(item, afterIndex) {\n      var record;\n      for (record = this._head; record !== null; record = record._nextDup) {\n        if ((afterIndex === null || afterIndex < record.currentIndex) && lang_2.looseIdentical(record.item, item)) {\n          return record;\n        }\n      }\n      return null;\n    };\n    _DuplicateItemRecordList.prototype.remove = function(record) {\n      var prev = record._prevDup;\n      var next = record._nextDup;\n      if (prev === null) {\n        this._head = next;\n      } else {\n        prev._nextDup = next;\n      }\n      if (next === null) {\n        this._tail = prev;\n      } else {\n        next._prevDup = prev;\n      }\n      return this._head === null;\n    };\n    return _DuplicateItemRecordList;\n  })();\n  var _DuplicateMap = (function() {\n    function _DuplicateMap() {\n      this.map = new Map();\n    }\n    _DuplicateMap.prototype.put = function(record) {\n      var key = lang_2.getMapKey(record.item);\n      var duplicates = this.map.get(key);\n      if (!lang_2.isPresent(duplicates)) {\n        duplicates = new _DuplicateItemRecordList();\n        this.map.set(key, duplicates);\n      }\n      duplicates.add(record);\n    };\n    _DuplicateMap.prototype.get = function(value, afterIndex) {\n      if (afterIndex === void 0) {\n        afterIndex = null;\n      }\n      var key = lang_2.getMapKey(value);\n      var recordList = this.map.get(key);\n      return lang_2.isBlank(recordList) ? null : recordList.get(value, afterIndex);\n    };\n    _DuplicateMap.prototype.remove = function(record) {\n      var key = lang_2.getMapKey(record.item);\n      var recordList = this.map.get(key);\n      if (recordList.remove(record)) {\n        this.map.delete(key);\n      }\n      return record;\n    };\n    Object.defineProperty(_DuplicateMap.prototype, \"isEmpty\", {\n      get: function() {\n        return this.map.size === 0;\n      },\n      enumerable: true,\n      configurable: true\n    });\n    _DuplicateMap.prototype.clear = function() {\n      this.map.clear();\n    };\n    _DuplicateMap.prototype.toString = function() {\n      return '_DuplicateMap(' + lang_2.stringify(this.map) + ')';\n    };\n    return _DuplicateMap;\n  })();\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"angular2/src/core/change_detection/differs/keyvalue_differs\", [\"angular2/src/facade/lang\", \"angular2/src/facade/exceptions\", \"angular2/src/facade/collection\", \"angular2/src/core/di\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  var __decorate = (this && this.__decorate) || function(decorators, target, key, desc) {\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\")\n      return Reflect.decorate(decorators, target, key, desc);\n    switch (arguments.length) {\n      case 2:\n        return decorators.reduceRight(function(o, d) {\n          return (d && d(o)) || o;\n        }, target);\n      case 3:\n        return decorators.reduceRight(function(o, d) {\n          return (d && d(target, key)), void 0;\n        }, void 0);\n      case 4:\n        return decorators.reduceRight(function(o, d) {\n          return (d && d(target, key, o)) || o;\n        }, desc);\n    }\n  };\n  var __metadata = (this && this.__metadata) || function(k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\")\n      return Reflect.metadata(k, v);\n  };\n  var lang_1 = require(\"angular2/src/facade/lang\");\n  var exceptions_1 = require(\"angular2/src/facade/exceptions\");\n  var collection_1 = require(\"angular2/src/facade/collection\");\n  var di_1 = require(\"angular2/src/core/di\");\n  var KeyValueDiffers = (function() {\n    function KeyValueDiffers(factories) {\n      this.factories = factories;\n    }\n    KeyValueDiffers.create = function(factories, parent) {\n      if (lang_1.isPresent(parent)) {\n        var copied = collection_1.ListWrapper.clone(parent.factories);\n        factories = factories.concat(copied);\n        return new KeyValueDiffers(factories);\n      } else {\n        return new KeyValueDiffers(factories);\n      }\n    };\n    KeyValueDiffers.extend = function(factories) {\n      return new di_1.Provider(KeyValueDiffers, {\n        useFactory: function(parent) {\n          if (lang_1.isBlank(parent)) {\n            throw new exceptions_1.BaseException('Cannot extend KeyValueDiffers without a parent injector');\n          }\n          return KeyValueDiffers.create(factories, parent);\n        },\n        deps: [[KeyValueDiffers, new di_1.SkipSelfMetadata(), new di_1.OptionalMetadata()]]\n      });\n    };\n    KeyValueDiffers.prototype.find = function(kv) {\n      var factory = this.factories.find(function(f) {\n        return f.supports(kv);\n      });\n      if (lang_1.isPresent(factory)) {\n        return factory;\n      } else {\n        throw new exceptions_1.BaseException(\"Cannot find a differ supporting object '\" + kv + \"'\");\n      }\n    };\n    KeyValueDiffers = __decorate([di_1.Injectable(), lang_1.CONST(), __metadata('design:paramtypes', [Array])], KeyValueDiffers);\n    return KeyValueDiffers;\n  })();\n  exports.KeyValueDiffers = KeyValueDiffers;\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"angular2/src/core/change_detection/differs/default_keyvalue_differ\", [\"angular2/src/facade/collection\", \"angular2/src/facade/lang\", \"angular2/src/facade/exceptions\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  var __decorate = (this && this.__decorate) || function(decorators, target, key, desc) {\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\")\n      return Reflect.decorate(decorators, target, key, desc);\n    switch (arguments.length) {\n      case 2:\n        return decorators.reduceRight(function(o, d) {\n          return (d && d(o)) || o;\n        }, target);\n      case 3:\n        return decorators.reduceRight(function(o, d) {\n          return (d && d(target, key)), void 0;\n        }, void 0);\n      case 4:\n        return decorators.reduceRight(function(o, d) {\n          return (d && d(target, key, o)) || o;\n        }, desc);\n    }\n  };\n  var __metadata = (this && this.__metadata) || function(k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\")\n      return Reflect.metadata(k, v);\n  };\n  var collection_1 = require(\"angular2/src/facade/collection\");\n  var lang_1 = require(\"angular2/src/facade/lang\");\n  var exceptions_1 = require(\"angular2/src/facade/exceptions\");\n  var DefaultKeyValueDifferFactory = (function() {\n    function DefaultKeyValueDifferFactory() {}\n    DefaultKeyValueDifferFactory.prototype.supports = function(obj) {\n      return obj instanceof Map || lang_1.isJsObject(obj);\n    };\n    DefaultKeyValueDifferFactory.prototype.create = function(cdRef) {\n      return new DefaultKeyValueDiffer();\n    };\n    DefaultKeyValueDifferFactory = __decorate([lang_1.CONST(), __metadata('design:paramtypes', [])], DefaultKeyValueDifferFactory);\n    return DefaultKeyValueDifferFactory;\n  })();\n  exports.DefaultKeyValueDifferFactory = DefaultKeyValueDifferFactory;\n  var DefaultKeyValueDiffer = (function() {\n    function DefaultKeyValueDiffer() {\n      this._records = new Map();\n      this._mapHead = null;\n      this._previousMapHead = null;\n      this._changesHead = null;\n      this._changesTail = null;\n      this._additionsHead = null;\n      this._additionsTail = null;\n      this._removalsHead = null;\n      this._removalsTail = null;\n    }\n    Object.defineProperty(DefaultKeyValueDiffer.prototype, \"isDirty\", {\n      get: function() {\n        return this._additionsHead !== null || this._changesHead !== null || this._removalsHead !== null;\n      },\n      enumerable: true,\n      configurable: true\n    });\n    DefaultKeyValueDiffer.prototype.forEachItem = function(fn) {\n      var record;\n      for (record = this._mapHead; record !== null; record = record._next) {\n        fn(record);\n      }\n    };\n    DefaultKeyValueDiffer.prototype.forEachPreviousItem = function(fn) {\n      var record;\n      for (record = this._previousMapHead; record !== null; record = record._nextPrevious) {\n        fn(record);\n      }\n    };\n    DefaultKeyValueDiffer.prototype.forEachChangedItem = function(fn) {\n      var record;\n      for (record = this._changesHead; record !== null; record = record._nextChanged) {\n        fn(record);\n      }\n    };\n    DefaultKeyValueDiffer.prototype.forEachAddedItem = function(fn) {\n      var record;\n      for (record = this._additionsHead; record !== null; record = record._nextAdded) {\n        fn(record);\n      }\n    };\n    DefaultKeyValueDiffer.prototype.forEachRemovedItem = function(fn) {\n      var record;\n      for (record = this._removalsHead; record !== null; record = record._nextRemoved) {\n        fn(record);\n      }\n    };\n    DefaultKeyValueDiffer.prototype.diff = function(map) {\n      if (lang_1.isBlank(map))\n        map = collection_1.MapWrapper.createFromPairs([]);\n      if (!(map instanceof Map || lang_1.isJsObject(map))) {\n        throw new exceptions_1.BaseException(\"Error trying to diff '\" + map + \"'\");\n      }\n      if (this.check(map)) {\n        return this;\n      } else {\n        return null;\n      }\n    };\n    DefaultKeyValueDiffer.prototype.onDestroy = function() {};\n    DefaultKeyValueDiffer.prototype.check = function(map) {\n      var _this = this;\n      this._reset();\n      var records = this._records;\n      var oldSeqRecord = this._mapHead;\n      var lastOldSeqRecord = null;\n      var lastNewSeqRecord = null;\n      var seqChanged = false;\n      this._forEach(map, function(value, key) {\n        var newSeqRecord;\n        if (oldSeqRecord !== null && key === oldSeqRecord.key) {\n          newSeqRecord = oldSeqRecord;\n          if (!lang_1.looseIdentical(value, oldSeqRecord.currentValue)) {\n            oldSeqRecord.previousValue = oldSeqRecord.currentValue;\n            oldSeqRecord.currentValue = value;\n            _this._addToChanges(oldSeqRecord);\n          }\n        } else {\n          seqChanged = true;\n          if (oldSeqRecord !== null) {\n            oldSeqRecord._next = null;\n            _this._removeFromSeq(lastOldSeqRecord, oldSeqRecord);\n            _this._addToRemovals(oldSeqRecord);\n          }\n          if (records.has(key)) {\n            newSeqRecord = records.get(key);\n          } else {\n            newSeqRecord = new KVChangeRecord(key);\n            records.set(key, newSeqRecord);\n            newSeqRecord.currentValue = value;\n            _this._addToAdditions(newSeqRecord);\n          }\n        }\n        if (seqChanged) {\n          if (_this._isInRemovals(newSeqRecord)) {\n            _this._removeFromRemovals(newSeqRecord);\n          }\n          if (lastNewSeqRecord == null) {\n            _this._mapHead = newSeqRecord;\n          } else {\n            lastNewSeqRecord._next = newSeqRecord;\n          }\n        }\n        lastOldSeqRecord = oldSeqRecord;\n        lastNewSeqRecord = newSeqRecord;\n        oldSeqRecord = oldSeqRecord === null ? null : oldSeqRecord._next;\n      });\n      this._truncate(lastOldSeqRecord, oldSeqRecord);\n      return this.isDirty;\n    };\n    DefaultKeyValueDiffer.prototype._reset = function() {\n      if (this.isDirty) {\n        var record;\n        for (record = this._previousMapHead = this._mapHead; record !== null; record = record._next) {\n          record._nextPrevious = record._next;\n        }\n        for (record = this._changesHead; record !== null; record = record._nextChanged) {\n          record.previousValue = record.currentValue;\n        }\n        for (record = this._additionsHead; record != null; record = record._nextAdded) {\n          record.previousValue = record.currentValue;\n        }\n        this._changesHead = this._changesTail = null;\n        this._additionsHead = this._additionsTail = null;\n        this._removalsHead = this._removalsTail = null;\n      }\n    };\n    DefaultKeyValueDiffer.prototype._truncate = function(lastRecord, record) {\n      while (record !== null) {\n        if (lastRecord === null) {\n          this._mapHead = null;\n        } else {\n          lastRecord._next = null;\n        }\n        var nextRecord = record._next;\n        this._addToRemovals(record);\n        lastRecord = record;\n        record = nextRecord;\n      }\n      for (var rec = this._removalsHead; rec !== null; rec = rec._nextRemoved) {\n        rec.previousValue = rec.currentValue;\n        rec.currentValue = null;\n        this._records.delete(rec.key);\n      }\n    };\n    DefaultKeyValueDiffer.prototype._isInRemovals = function(record) {\n      return record === this._removalsHead || record._nextRemoved !== null || record._prevRemoved !== null;\n    };\n    DefaultKeyValueDiffer.prototype._addToRemovals = function(record) {\n      if (this._removalsHead === null) {\n        this._removalsHead = this._removalsTail = record;\n      } else {\n        this._removalsTail._nextRemoved = record;\n        record._prevRemoved = this._removalsTail;\n        this._removalsTail = record;\n      }\n    };\n    DefaultKeyValueDiffer.prototype._removeFromSeq = function(prev, record) {\n      var next = record._next;\n      if (prev === null) {\n        this._mapHead = next;\n      } else {\n        prev._next = next;\n      }\n    };\n    DefaultKeyValueDiffer.prototype._removeFromRemovals = function(record) {\n      var prev = record._prevRemoved;\n      var next = record._nextRemoved;\n      if (prev === null) {\n        this._removalsHead = next;\n      } else {\n        prev._nextRemoved = next;\n      }\n      if (next === null) {\n        this._removalsTail = prev;\n      } else {\n        next._prevRemoved = prev;\n      }\n      record._prevRemoved = record._nextRemoved = null;\n    };\n    DefaultKeyValueDiffer.prototype._addToAdditions = function(record) {\n      if (this._additionsHead === null) {\n        this._additionsHead = this._additionsTail = record;\n      } else {\n        this._additionsTail._nextAdded = record;\n        this._additionsTail = record;\n      }\n    };\n    DefaultKeyValueDiffer.prototype._addToChanges = function(record) {\n      if (this._changesHead === null) {\n        this._changesHead = this._changesTail = record;\n      } else {\n        this._changesTail._nextChanged = record;\n        this._changesTail = record;\n      }\n    };\n    DefaultKeyValueDiffer.prototype.toString = function() {\n      var items = [];\n      var previous = [];\n      var changes = [];\n      var additions = [];\n      var removals = [];\n      var record;\n      for (record = this._mapHead; record !== null; record = record._next) {\n        items.push(lang_1.stringify(record));\n      }\n      for (record = this._previousMapHead; record !== null; record = record._nextPrevious) {\n        previous.push(lang_1.stringify(record));\n      }\n      for (record = this._changesHead; record !== null; record = record._nextChanged) {\n        changes.push(lang_1.stringify(record));\n      }\n      for (record = this._additionsHead; record !== null; record = record._nextAdded) {\n        additions.push(lang_1.stringify(record));\n      }\n      for (record = this._removalsHead; record !== null; record = record._nextRemoved) {\n        removals.push(lang_1.stringify(record));\n      }\n      return \"map: \" + items.join(', ') + \"\\n\" + \"previous: \" + previous.join(', ') + \"\\n\" + \"additions: \" + additions.join(', ') + \"\\n\" + \"changes: \" + changes.join(', ') + \"\\n\" + \"removals: \" + removals.join(', ') + \"\\n\";\n    };\n    DefaultKeyValueDiffer.prototype._forEach = function(obj, fn) {\n      if (obj instanceof Map) {\n        obj.forEach(fn);\n      } else {\n        collection_1.StringMapWrapper.forEach(obj, fn);\n      }\n    };\n    return DefaultKeyValueDiffer;\n  })();\n  exports.DefaultKeyValueDiffer = DefaultKeyValueDiffer;\n  var KVChangeRecord = (function() {\n    function KVChangeRecord(key) {\n      this.key = key;\n      this.previousValue = null;\n      this.currentValue = null;\n      this._nextPrevious = null;\n      this._next = null;\n      this._nextAdded = null;\n      this._nextRemoved = null;\n      this._prevRemoved = null;\n      this._nextChanged = null;\n    }\n    KVChangeRecord.prototype.toString = function() {\n      return lang_1.looseIdentical(this.previousValue, this.currentValue) ? lang_1.stringify(this.key) : (lang_1.stringify(this.key) + '[' + lang_1.stringify(this.previousValue) + '->' + lang_1.stringify(this.currentValue) + ']');\n    };\n    return KVChangeRecord;\n  })();\n  exports.KVChangeRecord = KVChangeRecord;\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"angular2/src/core/change_detection/parser/ast\", [\"angular2/src/facade/collection\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  var __extends = (this && this.__extends) || function(d, b) {\n    for (var p in b)\n      if (b.hasOwnProperty(p))\n        d[p] = b[p];\n    function __() {\n      this.constructor = d;\n    }\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n  };\n  var collection_1 = require(\"angular2/src/facade/collection\");\n  var AST = (function() {\n    function AST() {}\n    AST.prototype.visit = function(visitor) {\n      return null;\n    };\n    AST.prototype.toString = function() {\n      return \"AST\";\n    };\n    return AST;\n  })();\n  exports.AST = AST;\n  var EmptyExpr = (function(_super) {\n    __extends(EmptyExpr, _super);\n    function EmptyExpr() {\n      _super.apply(this, arguments);\n    }\n    EmptyExpr.prototype.visit = function(visitor) {};\n    return EmptyExpr;\n  })(AST);\n  exports.EmptyExpr = EmptyExpr;\n  var ImplicitReceiver = (function(_super) {\n    __extends(ImplicitReceiver, _super);\n    function ImplicitReceiver() {\n      _super.apply(this, arguments);\n    }\n    ImplicitReceiver.prototype.visit = function(visitor) {\n      return visitor.visitImplicitReceiver(this);\n    };\n    return ImplicitReceiver;\n  })(AST);\n  exports.ImplicitReceiver = ImplicitReceiver;\n  var Chain = (function(_super) {\n    __extends(Chain, _super);\n    function Chain(expressions) {\n      _super.call(this);\n      this.expressions = expressions;\n    }\n    Chain.prototype.visit = function(visitor) {\n      return visitor.visitChain(this);\n    };\n    return Chain;\n  })(AST);\n  exports.Chain = Chain;\n  var Conditional = (function(_super) {\n    __extends(Conditional, _super);\n    function Conditional(condition, trueExp, falseExp) {\n      _super.call(this);\n      this.condition = condition;\n      this.trueExp = trueExp;\n      this.falseExp = falseExp;\n    }\n    Conditional.prototype.visit = function(visitor) {\n      return visitor.visitConditional(this);\n    };\n    return Conditional;\n  })(AST);\n  exports.Conditional = Conditional;\n  var PropertyRead = (function(_super) {\n    __extends(PropertyRead, _super);\n    function PropertyRead(receiver, name, getter) {\n      _super.call(this);\n      this.receiver = receiver;\n      this.name = name;\n      this.getter = getter;\n    }\n    PropertyRead.prototype.visit = function(visitor) {\n      return visitor.visitPropertyRead(this);\n    };\n    return PropertyRead;\n  })(AST);\n  exports.PropertyRead = PropertyRead;\n  var PropertyWrite = (function(_super) {\n    __extends(PropertyWrite, _super);\n    function PropertyWrite(receiver, name, setter, value) {\n      _super.call(this);\n      this.receiver = receiver;\n      this.name = name;\n      this.setter = setter;\n      this.value = value;\n    }\n    PropertyWrite.prototype.visit = function(visitor) {\n      return visitor.visitPropertyWrite(this);\n    };\n    return PropertyWrite;\n  })(AST);\n  exports.PropertyWrite = PropertyWrite;\n  var SafePropertyRead = (function(_super) {\n    __extends(SafePropertyRead, _super);\n    function SafePropertyRead(receiver, name, getter) {\n      _super.call(this);\n      this.receiver = receiver;\n      this.name = name;\n      this.getter = getter;\n    }\n    SafePropertyRead.prototype.visit = function(visitor) {\n      return visitor.visitSafePropertyRead(this);\n    };\n    return SafePropertyRead;\n  })(AST);\n  exports.SafePropertyRead = SafePropertyRead;\n  var KeyedRead = (function(_super) {\n    __extends(KeyedRead, _super);\n    function KeyedRead(obj, key) {\n      _super.call(this);\n      this.obj = obj;\n      this.key = key;\n    }\n    KeyedRead.prototype.visit = function(visitor) {\n      return visitor.visitKeyedRead(this);\n    };\n    return KeyedRead;\n  })(AST);\n  exports.KeyedRead = KeyedRead;\n  var KeyedWrite = (function(_super) {\n    __extends(KeyedWrite, _super);\n    function KeyedWrite(obj, key, value) {\n      _super.call(this);\n      this.obj = obj;\n      this.key = key;\n      this.value = value;\n    }\n    KeyedWrite.prototype.visit = function(visitor) {\n      return visitor.visitKeyedWrite(this);\n    };\n    return KeyedWrite;\n  })(AST);\n  exports.KeyedWrite = KeyedWrite;\n  var BindingPipe = (function(_super) {\n    __extends(BindingPipe, _super);\n    function BindingPipe(exp, name, args) {\n      _super.call(this);\n      this.exp = exp;\n      this.name = name;\n      this.args = args;\n    }\n    BindingPipe.prototype.visit = function(visitor) {\n      return visitor.visitPipe(this);\n    };\n    return BindingPipe;\n  })(AST);\n  exports.BindingPipe = BindingPipe;\n  var LiteralPrimitive = (function(_super) {\n    __extends(LiteralPrimitive, _super);\n    function LiteralPrimitive(value) {\n      _super.call(this);\n      this.value = value;\n    }\n    LiteralPrimitive.prototype.visit = function(visitor) {\n      return visitor.visitLiteralPrimitive(this);\n    };\n    return LiteralPrimitive;\n  })(AST);\n  exports.LiteralPrimitive = LiteralPrimitive;\n  var LiteralArray = (function(_super) {\n    __extends(LiteralArray, _super);\n    function LiteralArray(expressions) {\n      _super.call(this);\n      this.expressions = expressions;\n    }\n    LiteralArray.prototype.visit = function(visitor) {\n      return visitor.visitLiteralArray(this);\n    };\n    return LiteralArray;\n  })(AST);\n  exports.LiteralArray = LiteralArray;\n  var LiteralMap = (function(_super) {\n    __extends(LiteralMap, _super);\n    function LiteralMap(keys, values) {\n      _super.call(this);\n      this.keys = keys;\n      this.values = values;\n    }\n    LiteralMap.prototype.visit = function(visitor) {\n      return visitor.visitLiteralMap(this);\n    };\n    return LiteralMap;\n  })(AST);\n  exports.LiteralMap = LiteralMap;\n  var Interpolation = (function(_super) {\n    __extends(Interpolation, _super);\n    function Interpolation(strings, expressions) {\n      _super.call(this);\n      this.strings = strings;\n      this.expressions = expressions;\n    }\n    Interpolation.prototype.visit = function(visitor) {\n      visitor.visitInterpolation(this);\n    };\n    return Interpolation;\n  })(AST);\n  exports.Interpolation = Interpolation;\n  var Binary = (function(_super) {\n    __extends(Binary, _super);\n    function Binary(operation, left, right) {\n      _super.call(this);\n      this.operation = operation;\n      this.left = left;\n      this.right = right;\n    }\n    Binary.prototype.visit = function(visitor) {\n      return visitor.visitBinary(this);\n    };\n    return Binary;\n  })(AST);\n  exports.Binary = Binary;\n  var PrefixNot = (function(_super) {\n    __extends(PrefixNot, _super);\n    function PrefixNot(expression) {\n      _super.call(this);\n      this.expression = expression;\n    }\n    PrefixNot.prototype.visit = function(visitor) {\n      return visitor.visitPrefixNot(this);\n    };\n    return PrefixNot;\n  })(AST);\n  exports.PrefixNot = PrefixNot;\n  var MethodCall = (function(_super) {\n    __extends(MethodCall, _super);\n    function MethodCall(receiver, name, fn, args) {\n      _super.call(this);\n      this.receiver = receiver;\n      this.name = name;\n      this.fn = fn;\n      this.args = args;\n    }\n    MethodCall.prototype.visit = function(visitor) {\n      return visitor.visitMethodCall(this);\n    };\n    return MethodCall;\n  })(AST);\n  exports.MethodCall = MethodCall;\n  var SafeMethodCall = (function(_super) {\n    __extends(SafeMethodCall, _super);\n    function SafeMethodCall(receiver, name, fn, args) {\n      _super.call(this);\n      this.receiver = receiver;\n      this.name = name;\n      this.fn = fn;\n      this.args = args;\n    }\n    SafeMethodCall.prototype.visit = function(visitor) {\n      return visitor.visitSafeMethodCall(this);\n    };\n    return SafeMethodCall;\n  })(AST);\n  exports.SafeMethodCall = SafeMethodCall;\n  var FunctionCall = (function(_super) {\n    __extends(FunctionCall, _super);\n    function FunctionCall(target, args) {\n      _super.call(this);\n      this.target = target;\n      this.args = args;\n    }\n    FunctionCall.prototype.visit = function(visitor) {\n      return visitor.visitFunctionCall(this);\n    };\n    return FunctionCall;\n  })(AST);\n  exports.FunctionCall = FunctionCall;\n  var ASTWithSource = (function(_super) {\n    __extends(ASTWithSource, _super);\n    function ASTWithSource(ast, source, location) {\n      _super.call(this);\n      this.ast = ast;\n      this.source = source;\n      this.location = location;\n    }\n    ASTWithSource.prototype.visit = function(visitor) {\n      return this.ast.visit(visitor);\n    };\n    ASTWithSource.prototype.toString = function() {\n      return this.source + \" in \" + this.location;\n    };\n    return ASTWithSource;\n  })(AST);\n  exports.ASTWithSource = ASTWithSource;\n  var TemplateBinding = (function() {\n    function TemplateBinding(key, keyIsVar, name, expression) {\n      this.key = key;\n      this.keyIsVar = keyIsVar;\n      this.name = name;\n      this.expression = expression;\n    }\n    return TemplateBinding;\n  })();\n  exports.TemplateBinding = TemplateBinding;\n  var RecursiveAstVisitor = (function() {\n    function RecursiveAstVisitor() {}\n    RecursiveAstVisitor.prototype.visitBinary = function(ast) {\n      ast.left.visit(this);\n      ast.right.visit(this);\n      return null;\n    };\n    RecursiveAstVisitor.prototype.visitChain = function(ast) {\n      return this.visitAll(ast.expressions);\n    };\n    RecursiveAstVisitor.prototype.visitConditional = function(ast) {\n      ast.condition.visit(this);\n      ast.trueExp.visit(this);\n      ast.falseExp.visit(this);\n      return null;\n    };\n    RecursiveAstVisitor.prototype.visitPipe = function(ast) {\n      ast.exp.visit(this);\n      this.visitAll(ast.args);\n      return null;\n    };\n    RecursiveAstVisitor.prototype.visitFunctionCall = function(ast) {\n      ast.target.visit(this);\n      this.visitAll(ast.args);\n      return null;\n    };\n    RecursiveAstVisitor.prototype.visitImplicitReceiver = function(ast) {\n      return null;\n    };\n    RecursiveAstVisitor.prototype.visitInterpolation = function(ast) {\n      return this.visitAll(ast.expressions);\n    };\n    RecursiveAstVisitor.prototype.visitKeyedRead = function(ast) {\n      ast.obj.visit(this);\n      ast.key.visit(this);\n      return null;\n    };\n    RecursiveAstVisitor.prototype.visitKeyedWrite = function(ast) {\n      ast.obj.visit(this);\n      ast.key.visit(this);\n      ast.value.visit(this);\n      return null;\n    };\n    RecursiveAstVisitor.prototype.visitLiteralArray = function(ast) {\n      return this.visitAll(ast.expressions);\n    };\n    RecursiveAstVisitor.prototype.visitLiteralMap = function(ast) {\n      return this.visitAll(ast.values);\n    };\n    RecursiveAstVisitor.prototype.visitLiteralPrimitive = function(ast) {\n      return null;\n    };\n    RecursiveAstVisitor.prototype.visitMethodCall = function(ast) {\n      ast.receiver.visit(this);\n      return this.visitAll(ast.args);\n    };\n    RecursiveAstVisitor.prototype.visitPrefixNot = function(ast) {\n      ast.expression.visit(this);\n      return null;\n    };\n    RecursiveAstVisitor.prototype.visitPropertyRead = function(ast) {\n      ast.receiver.visit(this);\n      return null;\n    };\n    RecursiveAstVisitor.prototype.visitPropertyWrite = function(ast) {\n      ast.receiver.visit(this);\n      ast.value.visit(this);\n      return null;\n    };\n    RecursiveAstVisitor.prototype.visitSafePropertyRead = function(ast) {\n      ast.receiver.visit(this);\n      return null;\n    };\n    RecursiveAstVisitor.prototype.visitSafeMethodCall = function(ast) {\n      ast.receiver.visit(this);\n      return this.visitAll(ast.args);\n    };\n    RecursiveAstVisitor.prototype.visitAll = function(asts) {\n      var _this = this;\n      asts.forEach(function(ast) {\n        return ast.visit(_this);\n      });\n      return null;\n    };\n    return RecursiveAstVisitor;\n  })();\n  exports.RecursiveAstVisitor = RecursiveAstVisitor;\n  var AstTransformer = (function() {\n    function AstTransformer() {}\n    AstTransformer.prototype.visitImplicitReceiver = function(ast) {\n      return ast;\n    };\n    AstTransformer.prototype.visitInterpolation = function(ast) {\n      return new Interpolation(ast.strings, this.visitAll(ast.expressions));\n    };\n    AstTransformer.prototype.visitLiteralPrimitive = function(ast) {\n      return new LiteralPrimitive(ast.value);\n    };\n    AstTransformer.prototype.visitPropertyRead = function(ast) {\n      return new PropertyRead(ast.receiver.visit(this), ast.name, ast.getter);\n    };\n    AstTransformer.prototype.visitPropertyWrite = function(ast) {\n      return new PropertyWrite(ast.receiver.visit(this), ast.name, ast.setter, ast.value);\n    };\n    AstTransformer.prototype.visitSafePropertyRead = function(ast) {\n      return new SafePropertyRead(ast.receiver.visit(this), ast.name, ast.getter);\n    };\n    AstTransformer.prototype.visitMethodCall = function(ast) {\n      return new MethodCall(ast.receiver.visit(this), ast.name, ast.fn, this.visitAll(ast.args));\n    };\n    AstTransformer.prototype.visitSafeMethodCall = function(ast) {\n      return new SafeMethodCall(ast.receiver.visit(this), ast.name, ast.fn, this.visitAll(ast.args));\n    };\n    AstTransformer.prototype.visitFunctionCall = function(ast) {\n      return new FunctionCall(ast.target.visit(this), this.visitAll(ast.args));\n    };\n    AstTransformer.prototype.visitLiteralArray = function(ast) {\n      return new LiteralArray(this.visitAll(ast.expressions));\n    };\n    AstTransformer.prototype.visitLiteralMap = function(ast) {\n      return new LiteralMap(ast.keys, this.visitAll(ast.values));\n    };\n    AstTransformer.prototype.visitBinary = function(ast) {\n      return new Binary(ast.operation, ast.left.visit(this), ast.right.visit(this));\n    };\n    AstTransformer.prototype.visitPrefixNot = function(ast) {\n      return new PrefixNot(ast.expression.visit(this));\n    };\n    AstTransformer.prototype.visitConditional = function(ast) {\n      return new Conditional(ast.condition.visit(this), ast.trueExp.visit(this), ast.falseExp.visit(this));\n    };\n    AstTransformer.prototype.visitPipe = function(ast) {\n      return new BindingPipe(ast.exp.visit(this), ast.name, this.visitAll(ast.args));\n    };\n    AstTransformer.prototype.visitKeyedRead = function(ast) {\n      return new KeyedRead(ast.obj.visit(this), ast.key.visit(this));\n    };\n    AstTransformer.prototype.visitKeyedWrite = function(ast) {\n      return new KeyedWrite(ast.obj.visit(this), ast.key.visit(this), ast.value.visit(this));\n    };\n    AstTransformer.prototype.visitAll = function(asts) {\n      var res = collection_1.ListWrapper.createFixedSize(asts.length);\n      for (var i = 0; i < asts.length; ++i) {\n        res[i] = asts[i].visit(this);\n      }\n      return res;\n    };\n    AstTransformer.prototype.visitChain = function(ast) {\n      return new Chain(this.visitAll(ast.expressions));\n    };\n    return AstTransformer;\n  })();\n  exports.AstTransformer = AstTransformer;\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"angular2/src/core/change_detection/parser/lexer\", [\"angular2/src/core/di/decorators\", \"angular2/src/facade/collection\", \"angular2/src/facade/lang\", \"angular2/src/facade/exceptions\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  var __extends = (this && this.__extends) || function(d, b) {\n    for (var p in b)\n      if (b.hasOwnProperty(p))\n        d[p] = b[p];\n    function __() {\n      this.constructor = d;\n    }\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n  };\n  var __decorate = (this && this.__decorate) || function(decorators, target, key, desc) {\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\")\n      return Reflect.decorate(decorators, target, key, desc);\n    switch (arguments.length) {\n      case 2:\n        return decorators.reduceRight(function(o, d) {\n          return (d && d(o)) || o;\n        }, target);\n      case 3:\n        return decorators.reduceRight(function(o, d) {\n          return (d && d(target, key)), void 0;\n        }, void 0);\n      case 4:\n        return decorators.reduceRight(function(o, d) {\n          return (d && d(target, key, o)) || o;\n        }, desc);\n    }\n  };\n  var __metadata = (this && this.__metadata) || function(k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\")\n      return Reflect.metadata(k, v);\n  };\n  var decorators_1 = require(\"angular2/src/core/di/decorators\");\n  var collection_1 = require(\"angular2/src/facade/collection\");\n  var lang_1 = require(\"angular2/src/facade/lang\");\n  var exceptions_1 = require(\"angular2/src/facade/exceptions\");\n  (function(TokenType) {\n    TokenType[TokenType[\"Character\"] = 0] = \"Character\";\n    TokenType[TokenType[\"Identifier\"] = 1] = \"Identifier\";\n    TokenType[TokenType[\"Keyword\"] = 2] = \"Keyword\";\n    TokenType[TokenType[\"String\"] = 3] = \"String\";\n    TokenType[TokenType[\"Operator\"] = 4] = \"Operator\";\n    TokenType[TokenType[\"Number\"] = 5] = \"Number\";\n  })(exports.TokenType || (exports.TokenType = {}));\n  var TokenType = exports.TokenType;\n  var Lexer = (function() {\n    function Lexer() {}\n    Lexer.prototype.tokenize = function(text) {\n      var scanner = new _Scanner(text);\n      var tokens = [];\n      var token = scanner.scanToken();\n      while (token != null) {\n        tokens.push(token);\n        token = scanner.scanToken();\n      }\n      return tokens;\n    };\n    Lexer = __decorate([decorators_1.Injectable(), __metadata('design:paramtypes', [])], Lexer);\n    return Lexer;\n  })();\n  exports.Lexer = Lexer;\n  var Token = (function() {\n    function Token(index, type, numValue, strValue) {\n      this.index = index;\n      this.type = type;\n      this.numValue = numValue;\n      this.strValue = strValue;\n    }\n    Token.prototype.isCharacter = function(code) {\n      return (this.type == TokenType.Character && this.numValue == code);\n    };\n    Token.prototype.isNumber = function() {\n      return (this.type == TokenType.Number);\n    };\n    Token.prototype.isString = function() {\n      return (this.type == TokenType.String);\n    };\n    Token.prototype.isOperator = function(operater) {\n      return (this.type == TokenType.Operator && this.strValue == operater);\n    };\n    Token.prototype.isIdentifier = function() {\n      return (this.type == TokenType.Identifier);\n    };\n    Token.prototype.isKeyword = function() {\n      return (this.type == TokenType.Keyword);\n    };\n    Token.prototype.isKeywordVar = function() {\n      return (this.type == TokenType.Keyword && this.strValue == \"var\");\n    };\n    Token.prototype.isKeywordNull = function() {\n      return (this.type == TokenType.Keyword && this.strValue == \"null\");\n    };\n    Token.prototype.isKeywordUndefined = function() {\n      return (this.type == TokenType.Keyword && this.strValue == \"undefined\");\n    };\n    Token.prototype.isKeywordTrue = function() {\n      return (this.type == TokenType.Keyword && this.strValue == \"true\");\n    };\n    Token.prototype.isKeywordFalse = function() {\n      return (this.type == TokenType.Keyword && this.strValue == \"false\");\n    };\n    Token.prototype.toNumber = function() {\n      return (this.type == TokenType.Number) ? this.numValue : -1;\n    };\n    Token.prototype.toString = function() {\n      switch (this.type) {\n        case TokenType.Character:\n        case TokenType.Identifier:\n        case TokenType.Keyword:\n        case TokenType.Operator:\n        case TokenType.String:\n          return this.strValue;\n        case TokenType.Number:\n          return this.numValue.toString();\n        default:\n          return null;\n      }\n    };\n    return Token;\n  })();\n  exports.Token = Token;\n  function newCharacterToken(index, code) {\n    return new Token(index, TokenType.Character, code, lang_1.StringWrapper.fromCharCode(code));\n  }\n  function newIdentifierToken(index, text) {\n    return new Token(index, TokenType.Identifier, 0, text);\n  }\n  function newKeywordToken(index, text) {\n    return new Token(index, TokenType.Keyword, 0, text);\n  }\n  function newOperatorToken(index, text) {\n    return new Token(index, TokenType.Operator, 0, text);\n  }\n  function newStringToken(index, text) {\n    return new Token(index, TokenType.String, 0, text);\n  }\n  function newNumberToken(index, n) {\n    return new Token(index, TokenType.Number, n, \"\");\n  }\n  exports.EOF = new Token(-1, TokenType.Character, 0, \"\");\n  exports.$EOF = 0;\n  exports.$TAB = 9;\n  exports.$LF = 10;\n  exports.$VTAB = 11;\n  exports.$FF = 12;\n  exports.$CR = 13;\n  exports.$SPACE = 32;\n  exports.$BANG = 33;\n  exports.$DQ = 34;\n  exports.$HASH = 35;\n  exports.$$ = 36;\n  exports.$PERCENT = 37;\n  exports.$AMPERSAND = 38;\n  exports.$SQ = 39;\n  exports.$LPAREN = 40;\n  exports.$RPAREN = 41;\n  exports.$STAR = 42;\n  exports.$PLUS = 43;\n  exports.$COMMA = 44;\n  exports.$MINUS = 45;\n  exports.$PERIOD = 46;\n  exports.$SLASH = 47;\n  exports.$COLON = 58;\n  exports.$SEMICOLON = 59;\n  exports.$LT = 60;\n  exports.$EQ = 61;\n  exports.$GT = 62;\n  exports.$QUESTION = 63;\n  var $0 = 48;\n  var $9 = 57;\n  var $A = 65,\n      $E = 69,\n      $Z = 90;\n  exports.$LBRACKET = 91;\n  exports.$BACKSLASH = 92;\n  exports.$RBRACKET = 93;\n  var $CARET = 94;\n  var $_ = 95;\n  var $a = 97,\n      $e = 101,\n      $f = 102,\n      $n = 110,\n      $r = 114,\n      $t = 116,\n      $u = 117,\n      $v = 118,\n      $z = 122;\n  exports.$LBRACE = 123;\n  exports.$BAR = 124;\n  exports.$RBRACE = 125;\n  var $NBSP = 160;\n  var ScannerError = (function(_super) {\n    __extends(ScannerError, _super);\n    function ScannerError(message) {\n      _super.call(this);\n      this.message = message;\n    }\n    ScannerError.prototype.toString = function() {\n      return this.message;\n    };\n    return ScannerError;\n  })(exceptions_1.BaseException);\n  exports.ScannerError = ScannerError;\n  var _Scanner = (function() {\n    function _Scanner(input) {\n      this.input = input;\n      this.peek = 0;\n      this.index = -1;\n      this.length = input.length;\n      this.advance();\n    }\n    _Scanner.prototype.advance = function() {\n      this.peek = ++this.index >= this.length ? exports.$EOF : lang_1.StringWrapper.charCodeAt(this.input, this.index);\n    };\n    _Scanner.prototype.scanToken = function() {\n      var input = this.input,\n          length = this.length,\n          peek = this.peek,\n          index = this.index;\n      while (peek <= exports.$SPACE) {\n        if (++index >= length) {\n          peek = exports.$EOF;\n          break;\n        } else {\n          peek = lang_1.StringWrapper.charCodeAt(input, index);\n        }\n      }\n      this.peek = peek;\n      this.index = index;\n      if (index >= length) {\n        return null;\n      }\n      if (isIdentifierStart(peek))\n        return this.scanIdentifier();\n      if (isDigit(peek))\n        return this.scanNumber(index);\n      var start = index;\n      switch (peek) {\n        case exports.$PERIOD:\n          this.advance();\n          return isDigit(this.peek) ? this.scanNumber(start) : newCharacterToken(start, exports.$PERIOD);\n        case exports.$LPAREN:\n        case exports.$RPAREN:\n        case exports.$LBRACE:\n        case exports.$RBRACE:\n        case exports.$LBRACKET:\n        case exports.$RBRACKET:\n        case exports.$COMMA:\n        case exports.$COLON:\n        case exports.$SEMICOLON:\n          return this.scanCharacter(start, peek);\n        case exports.$SQ:\n        case exports.$DQ:\n          return this.scanString();\n        case exports.$HASH:\n        case exports.$PLUS:\n        case exports.$MINUS:\n        case exports.$STAR:\n        case exports.$SLASH:\n        case exports.$PERCENT:\n        case $CARET:\n          return this.scanOperator(start, lang_1.StringWrapper.fromCharCode(peek));\n        case exports.$QUESTION:\n          return this.scanComplexOperator(start, '?', exports.$PERIOD, '.');\n        case exports.$LT:\n        case exports.$GT:\n          return this.scanComplexOperator(start, lang_1.StringWrapper.fromCharCode(peek), exports.$EQ, '=');\n        case exports.$BANG:\n        case exports.$EQ:\n          return this.scanComplexOperator(start, lang_1.StringWrapper.fromCharCode(peek), exports.$EQ, '=', exports.$EQ, '=');\n        case exports.$AMPERSAND:\n          return this.scanComplexOperator(start, '&', exports.$AMPERSAND, '&');\n        case exports.$BAR:\n          return this.scanComplexOperator(start, '|', exports.$BAR, '|');\n        case $NBSP:\n          while (isWhitespace(this.peek))\n            this.advance();\n          return this.scanToken();\n      }\n      this.error(\"Unexpected character [\" + lang_1.StringWrapper.fromCharCode(peek) + \"]\", 0);\n      return null;\n    };\n    _Scanner.prototype.scanCharacter = function(start, code) {\n      assert(this.peek == code);\n      this.advance();\n      return newCharacterToken(start, code);\n    };\n    _Scanner.prototype.scanOperator = function(start, str) {\n      assert(this.peek == lang_1.StringWrapper.charCodeAt(str, 0));\n      assert(collection_1.SetWrapper.has(OPERATORS, str));\n      this.advance();\n      return newOperatorToken(start, str);\n    };\n    _Scanner.prototype.scanComplexOperator = function(start, one, twoCode, two, threeCode, three) {\n      assert(this.peek == lang_1.StringWrapper.charCodeAt(one, 0));\n      this.advance();\n      var str = one;\n      if (this.peek == twoCode) {\n        this.advance();\n        str += two;\n      }\n      if (lang_1.isPresent(threeCode) && this.peek == threeCode) {\n        this.advance();\n        str += three;\n      }\n      assert(collection_1.SetWrapper.has(OPERATORS, str));\n      return newOperatorToken(start, str);\n    };\n    _Scanner.prototype.scanIdentifier = function() {\n      assert(isIdentifierStart(this.peek));\n      var start = this.index;\n      this.advance();\n      while (isIdentifierPart(this.peek))\n        this.advance();\n      var str = this.input.substring(start, this.index);\n      if (collection_1.SetWrapper.has(KEYWORDS, str)) {\n        return newKeywordToken(start, str);\n      } else {\n        return newIdentifierToken(start, str);\n      }\n    };\n    _Scanner.prototype.scanNumber = function(start) {\n      assert(isDigit(this.peek));\n      var simple = (this.index === start);\n      this.advance();\n      while (true) {\n        if (isDigit(this.peek)) {} else if (this.peek == exports.$PERIOD) {\n          simple = false;\n        } else if (isExponentStart(this.peek)) {\n          this.advance();\n          if (isExponentSign(this.peek))\n            this.advance();\n          if (!isDigit(this.peek))\n            this.error('Invalid exponent', -1);\n          simple = false;\n        } else {\n          break;\n        }\n        this.advance();\n      }\n      var str = this.input.substring(start, this.index);\n      var value = simple ? lang_1.NumberWrapper.parseIntAutoRadix(str) : lang_1.NumberWrapper.parseFloat(str);\n      return newNumberToken(start, value);\n    };\n    _Scanner.prototype.scanString = function() {\n      assert(this.peek == exports.$SQ || this.peek == exports.$DQ);\n      var start = this.index;\n      var quote = this.peek;\n      this.advance();\n      var buffer;\n      var marker = this.index;\n      var input = this.input;\n      while (this.peek != quote) {\n        if (this.peek == exports.$BACKSLASH) {\n          if (buffer == null)\n            buffer = new lang_1.StringJoiner();\n          buffer.add(input.substring(marker, this.index));\n          this.advance();\n          var unescapedCode;\n          if (this.peek == $u) {\n            var hex = input.substring(this.index + 1, this.index + 5);\n            try {\n              unescapedCode = lang_1.NumberWrapper.parseInt(hex, 16);\n            } catch (e) {\n              this.error(\"Invalid unicode escape [\\\\u\" + hex + \"]\", 0);\n            }\n            for (var i = 0; i < 5; i++) {\n              this.advance();\n            }\n          } else {\n            unescapedCode = unescape(this.peek);\n            this.advance();\n          }\n          buffer.add(lang_1.StringWrapper.fromCharCode(unescapedCode));\n          marker = this.index;\n        } else if (this.peek == exports.$EOF) {\n          this.error('Unterminated quote', 0);\n        } else {\n          this.advance();\n        }\n      }\n      var last = input.substring(marker, this.index);\n      this.advance();\n      var unescaped = last;\n      if (buffer != null) {\n        buffer.add(last);\n        unescaped = buffer.toString();\n      }\n      return newStringToken(start, unescaped);\n    };\n    _Scanner.prototype.error = function(message, offset) {\n      var position = this.index + offset;\n      throw new ScannerError(\"Lexer Error: \" + message + \" at column \" + position + \" in expression [\" + this.input + \"]\");\n    };\n    return _Scanner;\n  })();\n  function isWhitespace(code) {\n    return (code >= exports.$TAB && code <= exports.$SPACE) || (code == $NBSP);\n  }\n  function isIdentifierStart(code) {\n    return ($a <= code && code <= $z) || ($A <= code && code <= $Z) || (code == $_) || (code == exports.$$);\n  }\n  function isIdentifierPart(code) {\n    return ($a <= code && code <= $z) || ($A <= code && code <= $Z) || ($0 <= code && code <= $9) || (code == $_) || (code == exports.$$);\n  }\n  function isDigit(code) {\n    return $0 <= code && code <= $9;\n  }\n  function isExponentStart(code) {\n    return code == $e || code == $E;\n  }\n  function isExponentSign(code) {\n    return code == exports.$MINUS || code == exports.$PLUS;\n  }\n  function unescape(code) {\n    switch (code) {\n      case $n:\n        return exports.$LF;\n      case $f:\n        return exports.$FF;\n      case $r:\n        return exports.$CR;\n      case $t:\n        return exports.$TAB;\n      case $v:\n        return exports.$VTAB;\n      default:\n        return code;\n    }\n  }\n  var OPERATORS = collection_1.SetWrapper.createFromList(['+', '-', '*', '/', '%', '^', '=', '==', '!=', '===', '!==', '<', '>', '<=', '>=', '&&', '||', '&', '|', '!', '?', '#', '?.']);\n  var KEYWORDS = collection_1.SetWrapper.createFromList(['var', 'null', 'undefined', 'true', 'false', 'if', 'else']);\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"angular2/src/core/change_detection/parser/parser\", [\"angular2/src/core/di/decorators\", \"angular2/src/facade/lang\", \"angular2/src/facade/exceptions\", \"angular2/src/facade/collection\", \"angular2/src/core/change_detection/parser/lexer\", \"angular2/src/core/reflection/reflection\", \"angular2/src/core/change_detection/parser/ast\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  var __extends = (this && this.__extends) || function(d, b) {\n    for (var p in b)\n      if (b.hasOwnProperty(p))\n        d[p] = b[p];\n    function __() {\n      this.constructor = d;\n    }\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n  };\n  var __decorate = (this && this.__decorate) || function(decorators, target, key, desc) {\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\")\n      return Reflect.decorate(decorators, target, key, desc);\n    switch (arguments.length) {\n      case 2:\n        return decorators.reduceRight(function(o, d) {\n          return (d && d(o)) || o;\n        }, target);\n      case 3:\n        return decorators.reduceRight(function(o, d) {\n          return (d && d(target, key)), void 0;\n        }, void 0);\n      case 4:\n        return decorators.reduceRight(function(o, d) {\n          return (d && d(target, key, o)) || o;\n        }, desc);\n    }\n  };\n  var __metadata = (this && this.__metadata) || function(k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\")\n      return Reflect.metadata(k, v);\n  };\n  var decorators_1 = require(\"angular2/src/core/di/decorators\");\n  var lang_1 = require(\"angular2/src/facade/lang\");\n  var exceptions_1 = require(\"angular2/src/facade/exceptions\");\n  var collection_1 = require(\"angular2/src/facade/collection\");\n  var lexer_1 = require(\"angular2/src/core/change_detection/parser/lexer\");\n  var reflection_1 = require(\"angular2/src/core/reflection/reflection\");\n  var ast_1 = require(\"angular2/src/core/change_detection/parser/ast\");\n  var _implicitReceiver = new ast_1.ImplicitReceiver();\n  var INTERPOLATION_REGEXP = /\\{\\{(.*?)\\}\\}/g;\n  var ParseException = (function(_super) {\n    __extends(ParseException, _super);\n    function ParseException(message, input, errLocation, ctxLocation) {\n      _super.call(this, \"Parser Error: \" + message + \" \" + errLocation + \" [\" + input + \"] in \" + ctxLocation);\n    }\n    return ParseException;\n  })(exceptions_1.BaseException);\n  var Parser = (function() {\n    function Parser(_lexer, providedReflector) {\n      if (providedReflector === void 0) {\n        providedReflector = null;\n      }\n      this._lexer = _lexer;\n      this._reflector = lang_1.isPresent(providedReflector) ? providedReflector : reflection_1.reflector;\n    }\n    Parser.prototype.parseAction = function(input, location) {\n      this._checkNoInterpolation(input, location);\n      var tokens = this._lexer.tokenize(input);\n      var ast = new _ParseAST(input, location, tokens, this._reflector, true).parseChain();\n      return new ast_1.ASTWithSource(ast, input, location);\n    };\n    Parser.prototype.parseBinding = function(input, location) {\n      this._checkNoInterpolation(input, location);\n      var tokens = this._lexer.tokenize(input);\n      var ast = new _ParseAST(input, location, tokens, this._reflector, false).parseChain();\n      return new ast_1.ASTWithSource(ast, input, location);\n    };\n    Parser.prototype.parseSimpleBinding = function(input, location) {\n      this._checkNoInterpolation(input, location);\n      var tokens = this._lexer.tokenize(input);\n      var ast = new _ParseAST(input, location, tokens, this._reflector, false).parseSimpleBinding();\n      return new ast_1.ASTWithSource(ast, input, location);\n    };\n    Parser.prototype.parseTemplateBindings = function(input, location) {\n      var tokens = this._lexer.tokenize(input);\n      return new _ParseAST(input, location, tokens, this._reflector, false).parseTemplateBindings();\n    };\n    Parser.prototype.parseInterpolation = function(input, location) {\n      var parts = lang_1.StringWrapper.split(input, INTERPOLATION_REGEXP);\n      if (parts.length <= 1) {\n        return null;\n      }\n      var strings = [];\n      var expressions = [];\n      for (var i = 0; i < parts.length; i++) {\n        var part = parts[i];\n        if (i % 2 === 0) {\n          strings.push(part);\n        } else if (part.trim().length > 0) {\n          var tokens = this._lexer.tokenize(part);\n          var ast = new _ParseAST(input, location, tokens, this._reflector, false).parseChain();\n          expressions.push(ast);\n        } else {\n          throw new ParseException('Blank expressions are not allowed in interpolated strings', input, \"at column \" + this._findInterpolationErrorColumn(parts, i) + \" in\", location);\n        }\n      }\n      return new ast_1.ASTWithSource(new ast_1.Interpolation(strings, expressions), input, location);\n    };\n    Parser.prototype.wrapLiteralPrimitive = function(input, location) {\n      return new ast_1.ASTWithSource(new ast_1.LiteralPrimitive(input), input, location);\n    };\n    Parser.prototype._checkNoInterpolation = function(input, location) {\n      var parts = lang_1.StringWrapper.split(input, INTERPOLATION_REGEXP);\n      if (parts.length > 1) {\n        throw new ParseException('Got interpolation ({{}}) where expression was expected', input, \"at column \" + this._findInterpolationErrorColumn(parts, 1) + \" in\", location);\n      }\n    };\n    Parser.prototype._findInterpolationErrorColumn = function(parts, partInErrIdx) {\n      var errLocation = '';\n      for (var j = 0; j < partInErrIdx; j++) {\n        errLocation += j % 2 === 0 ? parts[j] : \"{{\" + parts[j] + \"}}\";\n      }\n      return errLocation.length;\n    };\n    Parser = __decorate([decorators_1.Injectable(), __metadata('design:paramtypes', [lexer_1.Lexer, reflection_1.Reflector])], Parser);\n    return Parser;\n  })();\n  exports.Parser = Parser;\n  var _ParseAST = (function() {\n    function _ParseAST(input, location, tokens, reflector, parseAction) {\n      this.input = input;\n      this.location = location;\n      this.tokens = tokens;\n      this.reflector = reflector;\n      this.parseAction = parseAction;\n      this.index = 0;\n    }\n    _ParseAST.prototype.peek = function(offset) {\n      var i = this.index + offset;\n      return i < this.tokens.length ? this.tokens[i] : lexer_1.EOF;\n    };\n    Object.defineProperty(_ParseAST.prototype, \"next\", {\n      get: function() {\n        return this.peek(0);\n      },\n      enumerable: true,\n      configurable: true\n    });\n    Object.defineProperty(_ParseAST.prototype, \"inputIndex\", {\n      get: function() {\n        return (this.index < this.tokens.length) ? this.next.index : this.input.length;\n      },\n      enumerable: true,\n      configurable: true\n    });\n    _ParseAST.prototype.advance = function() {\n      this.index++;\n    };\n    _ParseAST.prototype.optionalCharacter = function(code) {\n      if (this.next.isCharacter(code)) {\n        this.advance();\n        return true;\n      } else {\n        return false;\n      }\n    };\n    _ParseAST.prototype.optionalKeywordVar = function() {\n      if (this.peekKeywordVar()) {\n        this.advance();\n        return true;\n      } else {\n        return false;\n      }\n    };\n    _ParseAST.prototype.peekKeywordVar = function() {\n      return this.next.isKeywordVar() || this.next.isOperator('#');\n    };\n    _ParseAST.prototype.expectCharacter = function(code) {\n      if (this.optionalCharacter(code))\n        return ;\n      this.error(\"Missing expected \" + lang_1.StringWrapper.fromCharCode(code));\n    };\n    _ParseAST.prototype.optionalOperator = function(op) {\n      if (this.next.isOperator(op)) {\n        this.advance();\n        return true;\n      } else {\n        return false;\n      }\n    };\n    _ParseAST.prototype.expectOperator = function(operator) {\n      if (this.optionalOperator(operator))\n        return ;\n      this.error(\"Missing expected operator \" + operator);\n    };\n    _ParseAST.prototype.expectIdentifierOrKeyword = function() {\n      var n = this.next;\n      if (!n.isIdentifier() && !n.isKeyword()) {\n        this.error(\"Unexpected token \" + n + \", expected identifier or keyword\");\n      }\n      this.advance();\n      return n.toString();\n    };\n    _ParseAST.prototype.expectIdentifierOrKeywordOrString = function() {\n      var n = this.next;\n      if (!n.isIdentifier() && !n.isKeyword() && !n.isString()) {\n        this.error(\"Unexpected token \" + n + \", expected identifier, keyword, or string\");\n      }\n      this.advance();\n      return n.toString();\n    };\n    _ParseAST.prototype.parseSimpleBinding = function() {\n      var ast = this.parseChain();\n      if (!SimpleExpressionChecker.check(ast)) {\n        this.error(\"Simple binding expression can only contain field access and constants'\");\n      }\n      return ast;\n    };\n    _ParseAST.prototype.parseChain = function() {\n      var exprs = [];\n      while (this.index < this.tokens.length) {\n        var expr = this.parsePipe();\n        exprs.push(expr);\n        if (this.optionalCharacter(lexer_1.$SEMICOLON)) {\n          if (!this.parseAction) {\n            this.error(\"Binding expression cannot contain chained expression\");\n          }\n          while (this.optionalCharacter(lexer_1.$SEMICOLON)) {}\n        } else if (this.index < this.tokens.length) {\n          this.error(\"Unexpected token '\" + this.next + \"'\");\n        }\n      }\n      if (exprs.length == 0)\n        return new ast_1.EmptyExpr();\n      if (exprs.length == 1)\n        return exprs[0];\n      return new ast_1.Chain(exprs);\n    };\n    _ParseAST.prototype.parsePipe = function() {\n      var result = this.parseExpression();\n      if (this.optionalOperator(\"|\")) {\n        if (this.parseAction) {\n          this.error(\"Cannot have a pipe in an action expression\");\n        }\n        do {\n          var name = this.expectIdentifierOrKeyword();\n          var args = [];\n          while (this.optionalCharacter(lexer_1.$COLON)) {\n            args.push(this.parseExpression());\n          }\n          result = new ast_1.BindingPipe(result, name, args);\n        } while (this.optionalOperator(\"|\"));\n      }\n      return result;\n    };\n    _ParseAST.prototype.parseExpression = function() {\n      return this.parseConditional();\n    };\n    _ParseAST.prototype.parseConditional = function() {\n      var start = this.inputIndex;\n      var result = this.parseLogicalOr();\n      if (this.optionalOperator('?')) {\n        var yes = this.parsePipe();\n        if (!this.optionalCharacter(lexer_1.$COLON)) {\n          var end = this.inputIndex;\n          var expression = this.input.substring(start, end);\n          this.error(\"Conditional expression \" + expression + \" requires all 3 expressions\");\n        }\n        var no = this.parsePipe();\n        return new ast_1.Conditional(result, yes, no);\n      } else {\n        return result;\n      }\n    };\n    _ParseAST.prototype.parseLogicalOr = function() {\n      var result = this.parseLogicalAnd();\n      while (this.optionalOperator('||')) {\n        result = new ast_1.Binary('||', result, this.parseLogicalAnd());\n      }\n      return result;\n    };\n    _ParseAST.prototype.parseLogicalAnd = function() {\n      var result = this.parseEquality();\n      while (this.optionalOperator('&&')) {\n        result = new ast_1.Binary('&&', result, this.parseEquality());\n      }\n      return result;\n    };\n    _ParseAST.prototype.parseEquality = function() {\n      var result = this.parseRelational();\n      while (true) {\n        if (this.optionalOperator('==')) {\n          result = new ast_1.Binary('==', result, this.parseRelational());\n        } else if (this.optionalOperator('===')) {\n          result = new ast_1.Binary('===', result, this.parseRelational());\n        } else if (this.optionalOperator('!=')) {\n          result = new ast_1.Binary('!=', result, this.parseRelational());\n        } else if (this.optionalOperator('!==')) {\n          result = new ast_1.Binary('!==', result, this.parseRelational());\n        } else {\n          return result;\n        }\n      }\n    };\n    _ParseAST.prototype.parseRelational = function() {\n      var result = this.parseAdditive();\n      while (true) {\n        if (this.optionalOperator('<')) {\n          result = new ast_1.Binary('<', result, this.parseAdditive());\n        } else if (this.optionalOperator('>')) {\n          result = new ast_1.Binary('>', result, this.parseAdditive());\n        } else if (this.optionalOperator('<=')) {\n          result = new ast_1.Binary('<=', result, this.parseAdditive());\n        } else if (this.optionalOperator('>=')) {\n          result = new ast_1.Binary('>=', result, this.parseAdditive());\n        } else {\n          return result;\n        }\n      }\n    };\n    _ParseAST.prototype.parseAdditive = function() {\n      var result = this.parseMultiplicative();\n      while (true) {\n        if (this.optionalOperator('+')) {\n          result = new ast_1.Binary('+', result, this.parseMultiplicative());\n        } else if (this.optionalOperator('-')) {\n          result = new ast_1.Binary('-', result, this.parseMultiplicative());\n        } else {\n          return result;\n        }\n      }\n    };\n    _ParseAST.prototype.parseMultiplicative = function() {\n      var result = this.parsePrefix();\n      while (true) {\n        if (this.optionalOperator('*')) {\n          result = new ast_1.Binary('*', result, this.parsePrefix());\n        } else if (this.optionalOperator('%')) {\n          result = new ast_1.Binary('%', result, this.parsePrefix());\n        } else if (this.optionalOperator('/')) {\n          result = new ast_1.Binary('/', result, this.parsePrefix());\n        } else {\n          return result;\n        }\n      }\n    };\n    _ParseAST.prototype.parsePrefix = function() {\n      if (this.optionalOperator('+')) {\n        return this.parsePrefix();\n      } else if (this.optionalOperator('-')) {\n        return new ast_1.Binary('-', new ast_1.LiteralPrimitive(0), this.parsePrefix());\n      } else if (this.optionalOperator('!')) {\n        return new ast_1.PrefixNot(this.parsePrefix());\n      } else {\n        return this.parseCallChain();\n      }\n    };\n    _ParseAST.prototype.parseCallChain = function() {\n      var result = this.parsePrimary();\n      while (true) {\n        if (this.optionalCharacter(lexer_1.$PERIOD)) {\n          result = this.parseAccessMemberOrMethodCall(result, false);\n        } else if (this.optionalOperator('?.')) {\n          result = this.parseAccessMemberOrMethodCall(result, true);\n        } else if (this.optionalCharacter(lexer_1.$LBRACKET)) {\n          var key = this.parsePipe();\n          this.expectCharacter(lexer_1.$RBRACKET);\n          if (this.optionalOperator(\"=\")) {\n            var value = this.parseConditional();\n            result = new ast_1.KeyedWrite(result, key, value);\n          } else {\n            result = new ast_1.KeyedRead(result, key);\n          }\n        } else if (this.optionalCharacter(lexer_1.$LPAREN)) {\n          var args = this.parseCallArguments();\n          this.expectCharacter(lexer_1.$RPAREN);\n          result = new ast_1.FunctionCall(result, args);\n        } else {\n          return result;\n        }\n      }\n    };\n    _ParseAST.prototype.parsePrimary = function() {\n      if (this.optionalCharacter(lexer_1.$LPAREN)) {\n        var result = this.parsePipe();\n        this.expectCharacter(lexer_1.$RPAREN);\n        return result;\n      } else if (this.next.isKeywordNull() || this.next.isKeywordUndefined()) {\n        this.advance();\n        return new ast_1.LiteralPrimitive(null);\n      } else if (this.next.isKeywordTrue()) {\n        this.advance();\n        return new ast_1.LiteralPrimitive(true);\n      } else if (this.next.isKeywordFalse()) {\n        this.advance();\n        return new ast_1.LiteralPrimitive(false);\n      } else if (this.optionalCharacter(lexer_1.$LBRACKET)) {\n        var elements = this.parseExpressionList(lexer_1.$RBRACKET);\n        this.expectCharacter(lexer_1.$RBRACKET);\n        return new ast_1.LiteralArray(elements);\n      } else if (this.next.isCharacter(lexer_1.$LBRACE)) {\n        return this.parseLiteralMap();\n      } else if (this.next.isIdentifier()) {\n        return this.parseAccessMemberOrMethodCall(_implicitReceiver, false);\n      } else if (this.next.isNumber()) {\n        var value = this.next.toNumber();\n        this.advance();\n        return new ast_1.LiteralPrimitive(value);\n      } else if (this.next.isString()) {\n        var literalValue = this.next.toString();\n        this.advance();\n        return new ast_1.LiteralPrimitive(literalValue);\n      } else if (this.index >= this.tokens.length) {\n        this.error(\"Unexpected end of expression: \" + this.input);\n      } else {\n        this.error(\"Unexpected token \" + this.next);\n      }\n      throw new exceptions_1.BaseException(\"Fell through all cases in parsePrimary\");\n    };\n    _ParseAST.prototype.parseExpressionList = function(terminator) {\n      var result = [];\n      if (!this.next.isCharacter(terminator)) {\n        do {\n          result.push(this.parsePipe());\n        } while (this.optionalCharacter(lexer_1.$COMMA));\n      }\n      return result;\n    };\n    _ParseAST.prototype.parseLiteralMap = function() {\n      var keys = [];\n      var values = [];\n      this.expectCharacter(lexer_1.$LBRACE);\n      if (!this.optionalCharacter(lexer_1.$RBRACE)) {\n        do {\n          var key = this.expectIdentifierOrKeywordOrString();\n          keys.push(key);\n          this.expectCharacter(lexer_1.$COLON);\n          values.push(this.parsePipe());\n        } while (this.optionalCharacter(lexer_1.$COMMA));\n        this.expectCharacter(lexer_1.$RBRACE);\n      }\n      return new ast_1.LiteralMap(keys, values);\n    };\n    _ParseAST.prototype.parseAccessMemberOrMethodCall = function(receiver, isSafe) {\n      if (isSafe === void 0) {\n        isSafe = false;\n      }\n      var id = this.expectIdentifierOrKeyword();\n      if (this.optionalCharacter(lexer_1.$LPAREN)) {\n        var args = this.parseCallArguments();\n        this.expectCharacter(lexer_1.$RPAREN);\n        var fn = this.reflector.method(id);\n        return isSafe ? new ast_1.SafeMethodCall(receiver, id, fn, args) : new ast_1.MethodCall(receiver, id, fn, args);\n      } else {\n        if (isSafe) {\n          if (this.optionalOperator(\"=\")) {\n            this.error(\"The '?.' operator cannot be used in the assignment\");\n          } else {\n            return new ast_1.SafePropertyRead(receiver, id, this.reflector.getter(id));\n          }\n        } else {\n          if (this.optionalOperator(\"=\")) {\n            if (!this.parseAction) {\n              this.error(\"Bindings cannot contain assignments\");\n            }\n            var value = this.parseConditional();\n            return new ast_1.PropertyWrite(receiver, id, this.reflector.setter(id), value);\n          } else {\n            return new ast_1.PropertyRead(receiver, id, this.reflector.getter(id));\n          }\n        }\n      }\n      return null;\n    };\n    _ParseAST.prototype.parseCallArguments = function() {\n      if (this.next.isCharacter(lexer_1.$RPAREN))\n        return [];\n      var positionals = [];\n      do {\n        positionals.push(this.parsePipe());\n      } while (this.optionalCharacter(lexer_1.$COMMA));\n      return positionals;\n    };\n    _ParseAST.prototype.parseBlockContent = function() {\n      if (!this.parseAction) {\n        this.error(\"Binding expression cannot contain chained expression\");\n      }\n      var exprs = [];\n      while (this.index < this.tokens.length && !this.next.isCharacter(lexer_1.$RBRACE)) {\n        var expr = this.parseExpression();\n        exprs.push(expr);\n        if (this.optionalCharacter(lexer_1.$SEMICOLON)) {\n          while (this.optionalCharacter(lexer_1.$SEMICOLON)) {}\n        }\n      }\n      if (exprs.length == 0)\n        return new ast_1.EmptyExpr();\n      if (exprs.length == 1)\n        return exprs[0];\n      return new ast_1.Chain(exprs);\n    };\n    _ParseAST.prototype.expectTemplateBindingKey = function() {\n      var result = '';\n      var operatorFound = false;\n      do {\n        result += this.expectIdentifierOrKeywordOrString();\n        operatorFound = this.optionalOperator('-');\n        if (operatorFound) {\n          result += '-';\n        }\n      } while (operatorFound);\n      return result.toString();\n    };\n    _ParseAST.prototype.parseTemplateBindings = function() {\n      var bindings = [];\n      var prefix = null;\n      while (this.index < this.tokens.length) {\n        var keyIsVar = this.optionalKeywordVar();\n        var key = this.expectTemplateBindingKey();\n        if (!keyIsVar) {\n          if (prefix == null) {\n            prefix = key;\n          } else {\n            key = prefix + '-' + key;\n          }\n        }\n        this.optionalCharacter(lexer_1.$COLON);\n        var name = null;\n        var expression = null;\n        if (keyIsVar) {\n          if (this.optionalOperator(\"=\")) {\n            name = this.expectTemplateBindingKey();\n          } else {\n            name = '\\$implicit';\n          }\n        } else if (this.next !== lexer_1.EOF && !this.peekKeywordVar()) {\n          var start = this.inputIndex;\n          var ast = this.parsePipe();\n          var source = this.input.substring(start, this.inputIndex);\n          expression = new ast_1.ASTWithSource(ast, source, this.location);\n        }\n        bindings.push(new ast_1.TemplateBinding(key, keyIsVar, name, expression));\n        if (!this.optionalCharacter(lexer_1.$SEMICOLON)) {\n          this.optionalCharacter(lexer_1.$COMMA);\n        }\n      }\n      return bindings;\n    };\n    _ParseAST.prototype.error = function(message, index) {\n      if (index === void 0) {\n        index = null;\n      }\n      if (lang_1.isBlank(index))\n        index = this.index;\n      var location = (index < this.tokens.length) ? \"at column \" + (this.tokens[index].index + 1) + \" in\" : \"at the end of the expression\";\n      throw new ParseException(message, this.input, location, this.location);\n    };\n    return _ParseAST;\n  })();\n  exports._ParseAST = _ParseAST;\n  var SimpleExpressionChecker = (function() {\n    function SimpleExpressionChecker() {\n      this.simple = true;\n    }\n    SimpleExpressionChecker.check = function(ast) {\n      var s = new SimpleExpressionChecker();\n      ast.visit(s);\n      return s.simple;\n    };\n    SimpleExpressionChecker.prototype.visitImplicitReceiver = function(ast) {};\n    SimpleExpressionChecker.prototype.visitInterpolation = function(ast) {\n      this.simple = false;\n    };\n    SimpleExpressionChecker.prototype.visitLiteralPrimitive = function(ast) {};\n    SimpleExpressionChecker.prototype.visitPropertyRead = function(ast) {};\n    SimpleExpressionChecker.prototype.visitPropertyWrite = function(ast) {\n      this.simple = false;\n    };\n    SimpleExpressionChecker.prototype.visitSafePropertyRead = function(ast) {\n      this.simple = false;\n    };\n    SimpleExpressionChecker.prototype.visitMethodCall = function(ast) {\n      this.simple = false;\n    };\n    SimpleExpressionChecker.prototype.visitSafeMethodCall = function(ast) {\n      this.simple = false;\n    };\n    SimpleExpressionChecker.prototype.visitFunctionCall = function(ast) {\n      this.simple = false;\n    };\n    SimpleExpressionChecker.prototype.visitLiteralArray = function(ast) {\n      this.visitAll(ast.expressions);\n    };\n    SimpleExpressionChecker.prototype.visitLiteralMap = function(ast) {\n      this.visitAll(ast.values);\n    };\n    SimpleExpressionChecker.prototype.visitBinary = function(ast) {\n      this.simple = false;\n    };\n    SimpleExpressionChecker.prototype.visitPrefixNot = function(ast) {\n      this.simple = false;\n    };\n    SimpleExpressionChecker.prototype.visitConditional = function(ast) {\n      this.simple = false;\n    };\n    SimpleExpressionChecker.prototype.visitPipe = function(ast) {\n      this.simple = false;\n    };\n    SimpleExpressionChecker.prototype.visitKeyedRead = function(ast) {\n      this.simple = false;\n    };\n    SimpleExpressionChecker.prototype.visitKeyedWrite = function(ast) {\n      this.simple = false;\n    };\n    SimpleExpressionChecker.prototype.visitAll = function(asts) {\n      var res = collection_1.ListWrapper.createFixedSize(asts.length);\n      for (var i = 0; i < asts.length; ++i) {\n        res[i] = asts[i].visit(this);\n      }\n      return res;\n    };\n    SimpleExpressionChecker.prototype.visitChain = function(ast) {\n      this.simple = false;\n    };\n    return SimpleExpressionChecker;\n  })();\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"angular2/src/core/change_detection/parser/locals\", [\"angular2/src/facade/lang\", \"angular2/src/facade/exceptions\", \"angular2/src/facade/collection\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  var lang_1 = require(\"angular2/src/facade/lang\");\n  var exceptions_1 = require(\"angular2/src/facade/exceptions\");\n  var collection_1 = require(\"angular2/src/facade/collection\");\n  var Locals = (function() {\n    function Locals(parent, current) {\n      this.parent = parent;\n      this.current = current;\n    }\n    Locals.prototype.contains = function(name) {\n      if (this.current.has(name)) {\n        return true;\n      }\n      if (lang_1.isPresent(this.parent)) {\n        return this.parent.contains(name);\n      }\n      return false;\n    };\n    Locals.prototype.get = function(name) {\n      if (this.current.has(name)) {\n        return this.current.get(name);\n      }\n      if (lang_1.isPresent(this.parent)) {\n        return this.parent.get(name);\n      }\n      throw new exceptions_1.BaseException(\"Cannot find '\" + name + \"'\");\n    };\n    Locals.prototype.set = function(name, value) {\n      if (this.current.has(name)) {\n        this.current.set(name, value);\n      } else {\n        throw new exceptions_1.BaseException(\"Setting of new keys post-construction is not supported. Key: \" + name + \".\");\n      }\n    };\n    Locals.prototype.clearValues = function() {\n      collection_1.MapWrapper.clearValues(this.current);\n    };\n    return Locals;\n  })();\n  exports.Locals = Locals;\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"angular2/src/core/change_detection/exceptions\", [\"angular2/src/facade/exceptions\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  var __extends = (this && this.__extends) || function(d, b) {\n    for (var p in b)\n      if (b.hasOwnProperty(p))\n        d[p] = b[p];\n    function __() {\n      this.constructor = d;\n    }\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n  };\n  var exceptions_1 = require(\"angular2/src/facade/exceptions\");\n  var ExpressionChangedAfterItHasBeenCheckedException = (function(_super) {\n    __extends(ExpressionChangedAfterItHasBeenCheckedException, _super);\n    function ExpressionChangedAfterItHasBeenCheckedException(exp, oldValue, currValue, context) {\n      _super.call(this, (\"Expression '\" + exp + \"' has changed after it was checked. \") + (\"Previous value: '\" + oldValue + \"'. Current value: '\" + currValue + \"'\"));\n    }\n    return ExpressionChangedAfterItHasBeenCheckedException;\n  })(exceptions_1.BaseException);\n  exports.ExpressionChangedAfterItHasBeenCheckedException = ExpressionChangedAfterItHasBeenCheckedException;\n  var ChangeDetectionError = (function(_super) {\n    __extends(ChangeDetectionError, _super);\n    function ChangeDetectionError(exp, originalException, originalStack, context) {\n      _super.call(this, originalException + \" in [\" + exp + \"]\", originalException, originalStack, context);\n      this.location = exp;\n    }\n    return ChangeDetectionError;\n  })(exceptions_1.WrappedException);\n  exports.ChangeDetectionError = ChangeDetectionError;\n  var DehydratedException = (function(_super) {\n    __extends(DehydratedException, _super);\n    function DehydratedException() {\n      _super.call(this, 'Attempt to detect changes on a dehydrated detector.');\n    }\n    return DehydratedException;\n  })(exceptions_1.BaseException);\n  exports.DehydratedException = DehydratedException;\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"angular2/src/core/change_detection/interfaces\", [], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  var DebugContext = (function() {\n    function DebugContext(element, componentElement, directive, context, locals, injector) {\n      this.element = element;\n      this.componentElement = componentElement;\n      this.directive = directive;\n      this.context = context;\n      this.locals = locals;\n      this.injector = injector;\n    }\n    return DebugContext;\n  })();\n  exports.DebugContext = DebugContext;\n  var ChangeDetectorGenConfig = (function() {\n    function ChangeDetectorGenConfig(genDebugInfo, logBindingUpdate, useJit) {\n      this.genDebugInfo = genDebugInfo;\n      this.logBindingUpdate = logBindingUpdate;\n      this.useJit = useJit;\n    }\n    return ChangeDetectorGenConfig;\n  })();\n  exports.ChangeDetectorGenConfig = ChangeDetectorGenConfig;\n  var ChangeDetectorDefinition = (function() {\n    function ChangeDetectorDefinition(id, strategy, variableNames, bindingRecords, eventRecords, directiveRecords, genConfig) {\n      this.id = id;\n      this.strategy = strategy;\n      this.variableNames = variableNames;\n      this.bindingRecords = bindingRecords;\n      this.eventRecords = eventRecords;\n      this.directiveRecords = directiveRecords;\n      this.genConfig = genConfig;\n    }\n    return ChangeDetectorDefinition;\n  })();\n  exports.ChangeDetectorDefinition = ChangeDetectorDefinition;\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"angular2/src/core/change_detection/constants\", [\"angular2/src/facade/lang\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  var lang_1 = require(\"angular2/src/facade/lang\");\n  (function(ChangeDetectorState) {\n    ChangeDetectorState[ChangeDetectorState[\"NeverChecked\"] = 0] = \"NeverChecked\";\n    ChangeDetectorState[ChangeDetectorState[\"CheckedBefore\"] = 1] = \"CheckedBefore\";\n    ChangeDetectorState[ChangeDetectorState[\"Errored\"] = 2] = \"Errored\";\n  })(exports.ChangeDetectorState || (exports.ChangeDetectorState = {}));\n  var ChangeDetectorState = exports.ChangeDetectorState;\n  (function(ChangeDetectionStrategy) {\n    ChangeDetectionStrategy[ChangeDetectionStrategy[\"CheckOnce\"] = 0] = \"CheckOnce\";\n    ChangeDetectionStrategy[ChangeDetectionStrategy[\"Checked\"] = 1] = \"Checked\";\n    ChangeDetectionStrategy[ChangeDetectionStrategy[\"CheckAlways\"] = 2] = \"CheckAlways\";\n    ChangeDetectionStrategy[ChangeDetectionStrategy[\"Detached\"] = 3] = \"Detached\";\n    ChangeDetectionStrategy[ChangeDetectionStrategy[\"OnPush\"] = 4] = \"OnPush\";\n    ChangeDetectionStrategy[ChangeDetectionStrategy[\"Default\"] = 5] = \"Default\";\n    ChangeDetectionStrategy[ChangeDetectionStrategy[\"OnPushObserve\"] = 6] = \"OnPushObserve\";\n  })(exports.ChangeDetectionStrategy || (exports.ChangeDetectionStrategy = {}));\n  var ChangeDetectionStrategy = exports.ChangeDetectionStrategy;\n  exports.CHANGE_DETECTION_STRATEGY_VALUES = [ChangeDetectionStrategy.CheckOnce, ChangeDetectionStrategy.Checked, ChangeDetectionStrategy.CheckAlways, ChangeDetectionStrategy.Detached, ChangeDetectionStrategy.OnPush, ChangeDetectionStrategy.Default, ChangeDetectionStrategy.OnPushObserve];\n  exports.CHANGE_DETECTOR_STATE_VALUES = [ChangeDetectorState.NeverChecked, ChangeDetectorState.CheckedBefore, ChangeDetectorState.Errored];\n  function isDefaultChangeDetectionStrategy(changeDetectionStrategy) {\n    return lang_1.isBlank(changeDetectionStrategy) || changeDetectionStrategy === ChangeDetectionStrategy.Default;\n  }\n  exports.isDefaultChangeDetectionStrategy = isDefaultChangeDetectionStrategy;\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"angular2/src/core/change_detection/pipe_lifecycle_reflector\", [], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  function implementsOnDestroy(pipe) {\n    return pipe.constructor.prototype.onDestroy;\n  }\n  exports.implementsOnDestroy = implementsOnDestroy;\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"angular2/src/core/change_detection/binding_record\", [\"angular2/src/facade/lang\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  var lang_1 = require(\"angular2/src/facade/lang\");\n  var DIRECTIVE_LIFECYCLE = \"directiveLifecycle\";\n  var BINDING = \"native\";\n  var DIRECTIVE = \"directive\";\n  var ELEMENT_PROPERTY = \"elementProperty\";\n  var ELEMENT_ATTRIBUTE = \"elementAttribute\";\n  var ELEMENT_CLASS = \"elementClass\";\n  var ELEMENT_STYLE = \"elementStyle\";\n  var TEXT_NODE = \"textNode\";\n  var EVENT = \"event\";\n  var HOST_EVENT = \"hostEvent\";\n  var BindingTarget = (function() {\n    function BindingTarget(mode, elementIndex, name, unit, debug) {\n      this.mode = mode;\n      this.elementIndex = elementIndex;\n      this.name = name;\n      this.unit = unit;\n      this.debug = debug;\n    }\n    BindingTarget.prototype.isDirective = function() {\n      return this.mode === DIRECTIVE;\n    };\n    BindingTarget.prototype.isElementProperty = function() {\n      return this.mode === ELEMENT_PROPERTY;\n    };\n    BindingTarget.prototype.isElementAttribute = function() {\n      return this.mode === ELEMENT_ATTRIBUTE;\n    };\n    BindingTarget.prototype.isElementClass = function() {\n      return this.mode === ELEMENT_CLASS;\n    };\n    BindingTarget.prototype.isElementStyle = function() {\n      return this.mode === ELEMENT_STYLE;\n    };\n    BindingTarget.prototype.isTextNode = function() {\n      return this.mode === TEXT_NODE;\n    };\n    return BindingTarget;\n  })();\n  exports.BindingTarget = BindingTarget;\n  var BindingRecord = (function() {\n    function BindingRecord(mode, target, implicitReceiver, ast, setter, lifecycleEvent, directiveRecord) {\n      this.mode = mode;\n      this.target = target;\n      this.implicitReceiver = implicitReceiver;\n      this.ast = ast;\n      this.setter = setter;\n      this.lifecycleEvent = lifecycleEvent;\n      this.directiveRecord = directiveRecord;\n    }\n    BindingRecord.prototype.isDirectiveLifecycle = function() {\n      return this.mode === DIRECTIVE_LIFECYCLE;\n    };\n    BindingRecord.prototype.callOnChanges = function() {\n      return lang_1.isPresent(this.directiveRecord) && this.directiveRecord.callOnChanges;\n    };\n    BindingRecord.prototype.isDefaultChangeDetection = function() {\n      return lang_1.isBlank(this.directiveRecord) || this.directiveRecord.isDefaultChangeDetection();\n    };\n    BindingRecord.createDirectiveDoCheck = function(directiveRecord) {\n      return new BindingRecord(DIRECTIVE_LIFECYCLE, null, 0, null, null, \"DoCheck\", directiveRecord);\n    };\n    BindingRecord.createDirectiveOnInit = function(directiveRecord) {\n      return new BindingRecord(DIRECTIVE_LIFECYCLE, null, 0, null, null, \"OnInit\", directiveRecord);\n    };\n    BindingRecord.createDirectiveOnChanges = function(directiveRecord) {\n      return new BindingRecord(DIRECTIVE_LIFECYCLE, null, 0, null, null, \"OnChanges\", directiveRecord);\n    };\n    BindingRecord.createForDirective = function(ast, propertyName, setter, directiveRecord) {\n      var elementIndex = directiveRecord.directiveIndex.elementIndex;\n      var t = new BindingTarget(DIRECTIVE, elementIndex, propertyName, null, ast.toString());\n      return new BindingRecord(DIRECTIVE, t, 0, ast, setter, null, directiveRecord);\n    };\n    BindingRecord.createForElementProperty = function(ast, elementIndex, propertyName) {\n      var t = new BindingTarget(ELEMENT_PROPERTY, elementIndex, propertyName, null, ast.toString());\n      return new BindingRecord(BINDING, t, 0, ast, null, null, null);\n    };\n    BindingRecord.createForElementAttribute = function(ast, elementIndex, attributeName) {\n      var t = new BindingTarget(ELEMENT_ATTRIBUTE, elementIndex, attributeName, null, ast.toString());\n      return new BindingRecord(BINDING, t, 0, ast, null, null, null);\n    };\n    BindingRecord.createForElementClass = function(ast, elementIndex, className) {\n      var t = new BindingTarget(ELEMENT_CLASS, elementIndex, className, null, ast.toString());\n      return new BindingRecord(BINDING, t, 0, ast, null, null, null);\n    };\n    BindingRecord.createForElementStyle = function(ast, elementIndex, styleName, unit) {\n      var t = new BindingTarget(ELEMENT_STYLE, elementIndex, styleName, unit, ast.toString());\n      return new BindingRecord(BINDING, t, 0, ast, null, null, null);\n    };\n    BindingRecord.createForHostProperty = function(directiveIndex, ast, propertyName) {\n      var t = new BindingTarget(ELEMENT_PROPERTY, directiveIndex.elementIndex, propertyName, null, ast.toString());\n      return new BindingRecord(BINDING, t, directiveIndex, ast, null, null, null);\n    };\n    BindingRecord.createForHostAttribute = function(directiveIndex, ast, attributeName) {\n      var t = new BindingTarget(ELEMENT_ATTRIBUTE, directiveIndex.elementIndex, attributeName, null, ast.toString());\n      return new BindingRecord(BINDING, t, directiveIndex, ast, null, null, null);\n    };\n    BindingRecord.createForHostClass = function(directiveIndex, ast, className) {\n      var t = new BindingTarget(ELEMENT_CLASS, directiveIndex.elementIndex, className, null, ast.toString());\n      return new BindingRecord(BINDING, t, directiveIndex, ast, null, null, null);\n    };\n    BindingRecord.createForHostStyle = function(directiveIndex, ast, styleName, unit) {\n      var t = new BindingTarget(ELEMENT_STYLE, directiveIndex.elementIndex, styleName, unit, ast.toString());\n      return new BindingRecord(BINDING, t, directiveIndex, ast, null, null, null);\n    };\n    BindingRecord.createForTextNode = function(ast, elementIndex) {\n      var t = new BindingTarget(TEXT_NODE, elementIndex, null, null, ast.toString());\n      return new BindingRecord(BINDING, t, 0, ast, null, null, null);\n    };\n    BindingRecord.createForEvent = function(ast, eventName, elementIndex) {\n      var t = new BindingTarget(EVENT, elementIndex, eventName, null, ast.toString());\n      return new BindingRecord(EVENT, t, 0, ast, null, null, null);\n    };\n    BindingRecord.createForHostEvent = function(ast, eventName, directiveRecord) {\n      var directiveIndex = directiveRecord.directiveIndex;\n      var t = new BindingTarget(HOST_EVENT, directiveIndex.elementIndex, eventName, null, ast.toString());\n      return new BindingRecord(HOST_EVENT, t, directiveIndex, ast, null, null, directiveRecord);\n    };\n    return BindingRecord;\n  })();\n  exports.BindingRecord = BindingRecord;\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"angular2/src/core/change_detection/directive_record\", [\"angular2/src/facade/lang\", \"angular2/src/core/change_detection/constants\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  var lang_1 = require(\"angular2/src/facade/lang\");\n  var constants_1 = require(\"angular2/src/core/change_detection/constants\");\n  var DirectiveIndex = (function() {\n    function DirectiveIndex(elementIndex, directiveIndex) {\n      this.elementIndex = elementIndex;\n      this.directiveIndex = directiveIndex;\n    }\n    Object.defineProperty(DirectiveIndex.prototype, \"name\", {\n      get: function() {\n        return this.elementIndex + \"_\" + this.directiveIndex;\n      },\n      enumerable: true,\n      configurable: true\n    });\n    return DirectiveIndex;\n  })();\n  exports.DirectiveIndex = DirectiveIndex;\n  var DirectiveRecord = (function() {\n    function DirectiveRecord(_a) {\n      var _b = _a === void 0 ? {} : _a,\n          directiveIndex = _b.directiveIndex,\n          callAfterContentInit = _b.callAfterContentInit,\n          callAfterContentChecked = _b.callAfterContentChecked,\n          callAfterViewInit = _b.callAfterViewInit,\n          callAfterViewChecked = _b.callAfterViewChecked,\n          callOnChanges = _b.callOnChanges,\n          callDoCheck = _b.callDoCheck,\n          callOnInit = _b.callOnInit,\n          changeDetection = _b.changeDetection;\n      this.directiveIndex = directiveIndex;\n      this.callAfterContentInit = lang_1.normalizeBool(callAfterContentInit);\n      this.callAfterContentChecked = lang_1.normalizeBool(callAfterContentChecked);\n      this.callOnChanges = lang_1.normalizeBool(callOnChanges);\n      this.callAfterViewInit = lang_1.normalizeBool(callAfterViewInit);\n      this.callAfterViewChecked = lang_1.normalizeBool(callAfterViewChecked);\n      this.callDoCheck = lang_1.normalizeBool(callDoCheck);\n      this.callOnInit = lang_1.normalizeBool(callOnInit);\n      this.changeDetection = changeDetection;\n    }\n    DirectiveRecord.prototype.isDefaultChangeDetection = function() {\n      return constants_1.isDefaultChangeDetectionStrategy(this.changeDetection);\n    };\n    return DirectiveRecord;\n  })();\n  exports.DirectiveRecord = DirectiveRecord;\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"angular2/src/core/change_detection/change_detector_ref\", [\"angular2/src/core/change_detection/constants\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  var __extends = (this && this.__extends) || function(d, b) {\n    for (var p in b)\n      if (b.hasOwnProperty(p))\n        d[p] = b[p];\n    function __() {\n      this.constructor = d;\n    }\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n  };\n  var constants_1 = require(\"angular2/src/core/change_detection/constants\");\n  var ChangeDetectorRef = (function() {\n    function ChangeDetectorRef() {}\n    return ChangeDetectorRef;\n  })();\n  exports.ChangeDetectorRef = ChangeDetectorRef;\n  var ChangeDetectorRef_ = (function(_super) {\n    __extends(ChangeDetectorRef_, _super);\n    function ChangeDetectorRef_(_cd) {\n      _super.call(this);\n      this._cd = _cd;\n    }\n    ChangeDetectorRef_.prototype.markForCheck = function() {\n      this._cd.markPathToRootAsCheckOnce();\n    };\n    ChangeDetectorRef_.prototype.detach = function() {\n      this._cd.mode = constants_1.ChangeDetectionStrategy.Detached;\n    };\n    ChangeDetectorRef_.prototype.detectChanges = function() {\n      this._cd.detectChanges();\n    };\n    ChangeDetectorRef_.prototype.checkNoChanges = function() {\n      this._cd.checkNoChanges();\n    };\n    ChangeDetectorRef_.prototype.reattach = function() {\n      this._cd.mode = constants_1.ChangeDetectionStrategy.CheckAlways;\n      this.markForCheck();\n    };\n    return ChangeDetectorRef_;\n  })(ChangeDetectorRef);\n  exports.ChangeDetectorRef_ = ChangeDetectorRef_;\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"angular2/src/core/profile/wtf_impl\", [\"angular2/src/facade/lang\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  var lang_1 = require(\"angular2/src/facade/lang\");\n  var trace;\n  var events;\n  function detectWTF() {\n    var wtf = lang_1.global['wtf'];\n    if (wtf) {\n      trace = wtf['trace'];\n      if (trace) {\n        events = trace['events'];\n        return true;\n      }\n    }\n    return false;\n  }\n  exports.detectWTF = detectWTF;\n  function createScope(signature, flags) {\n    if (flags === void 0) {\n      flags = null;\n    }\n    return events.createScope(signature, flags);\n  }\n  exports.createScope = createScope;\n  function leave(scope, returnValue) {\n    trace.leaveScope(scope, returnValue);\n    return returnValue;\n  }\n  exports.leave = leave;\n  function startTimeRange(rangeType, action) {\n    return trace.beginTimeRange(rangeType, action);\n  }\n  exports.startTimeRange = startTimeRange;\n  function endTimeRange(range) {\n    trace.endTimeRange(range);\n  }\n  exports.endTimeRange = endTimeRange;\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"angular2/src/core/change_detection/observable_facade\", [], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  function isObservable(value) {\n    return false;\n  }\n  exports.isObservable = isObservable;\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"angular2/src/core/change_detection/proto_record\", [], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  (function(RecordType) {\n    RecordType[RecordType[\"Self\"] = 0] = \"Self\";\n    RecordType[RecordType[\"Const\"] = 1] = \"Const\";\n    RecordType[RecordType[\"PrimitiveOp\"] = 2] = \"PrimitiveOp\";\n    RecordType[RecordType[\"PropertyRead\"] = 3] = \"PropertyRead\";\n    RecordType[RecordType[\"PropertyWrite\"] = 4] = \"PropertyWrite\";\n    RecordType[RecordType[\"Local\"] = 5] = \"Local\";\n    RecordType[RecordType[\"InvokeMethod\"] = 6] = \"InvokeMethod\";\n    RecordType[RecordType[\"InvokeClosure\"] = 7] = \"InvokeClosure\";\n    RecordType[RecordType[\"KeyedRead\"] = 8] = \"KeyedRead\";\n    RecordType[RecordType[\"KeyedWrite\"] = 9] = \"KeyedWrite\";\n    RecordType[RecordType[\"Pipe\"] = 10] = \"Pipe\";\n    RecordType[RecordType[\"Interpolate\"] = 11] = \"Interpolate\";\n    RecordType[RecordType[\"SafeProperty\"] = 12] = \"SafeProperty\";\n    RecordType[RecordType[\"CollectionLiteral\"] = 13] = \"CollectionLiteral\";\n    RecordType[RecordType[\"SafeMethodInvoke\"] = 14] = \"SafeMethodInvoke\";\n    RecordType[RecordType[\"DirectiveLifecycle\"] = 15] = \"DirectiveLifecycle\";\n    RecordType[RecordType[\"Chain\"] = 16] = \"Chain\";\n    RecordType[RecordType[\"SkipRecordsIf\"] = 17] = \"SkipRecordsIf\";\n    RecordType[RecordType[\"SkipRecordsIfNot\"] = 18] = \"SkipRecordsIfNot\";\n    RecordType[RecordType[\"SkipRecords\"] = 19] = \"SkipRecords\";\n  })(exports.RecordType || (exports.RecordType = {}));\n  var RecordType = exports.RecordType;\n  var ProtoRecord = (function() {\n    function ProtoRecord(mode, name, funcOrValue, args, fixedArgs, contextIndex, directiveIndex, selfIndex, bindingRecord, lastInBinding, lastInDirective, argumentToPureFunction, referencedBySelf, propertyBindingIndex) {\n      this.mode = mode;\n      this.name = name;\n      this.funcOrValue = funcOrValue;\n      this.args = args;\n      this.fixedArgs = fixedArgs;\n      this.contextIndex = contextIndex;\n      this.directiveIndex = directiveIndex;\n      this.selfIndex = selfIndex;\n      this.bindingRecord = bindingRecord;\n      this.lastInBinding = lastInBinding;\n      this.lastInDirective = lastInDirective;\n      this.argumentToPureFunction = argumentToPureFunction;\n      this.referencedBySelf = referencedBySelf;\n      this.propertyBindingIndex = propertyBindingIndex;\n    }\n    ProtoRecord.prototype.isPureFunction = function() {\n      return this.mode === RecordType.Interpolate || this.mode === RecordType.CollectionLiteral;\n    };\n    ProtoRecord.prototype.isUsedByOtherRecord = function() {\n      return !this.lastInBinding || this.referencedBySelf;\n    };\n    ProtoRecord.prototype.shouldBeChecked = function() {\n      return this.argumentToPureFunction || this.lastInBinding || this.isPureFunction() || this.isPipeRecord();\n    };\n    ProtoRecord.prototype.isPipeRecord = function() {\n      return this.mode === RecordType.Pipe;\n    };\n    ProtoRecord.prototype.isConditionalSkipRecord = function() {\n      return this.mode === RecordType.SkipRecordsIfNot || this.mode === RecordType.SkipRecordsIf;\n    };\n    ProtoRecord.prototype.isUnconditionalSkipRecord = function() {\n      return this.mode === RecordType.SkipRecords;\n    };\n    ProtoRecord.prototype.isSkipRecord = function() {\n      return this.isConditionalSkipRecord() || this.isUnconditionalSkipRecord();\n    };\n    ProtoRecord.prototype.isLifeCycleRecord = function() {\n      return this.mode === RecordType.DirectiveLifecycle;\n    };\n    return ProtoRecord;\n  })();\n  exports.ProtoRecord = ProtoRecord;\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"angular2/src/core/change_detection/event_binding\", [], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  var EventBinding = (function() {\n    function EventBinding(eventName, elIndex, dirIndex, records) {\n      this.eventName = eventName;\n      this.elIndex = elIndex;\n      this.dirIndex = dirIndex;\n      this.records = records;\n    }\n    return EventBinding;\n  })();\n  exports.EventBinding = EventBinding;\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"angular2/src/core/change_detection/coalesce\", [\"angular2/src/facade/lang\", \"angular2/src/facade/collection\", \"angular2/src/core/change_detection/proto_record\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  var lang_1 = require(\"angular2/src/facade/lang\");\n  var collection_1 = require(\"angular2/src/facade/collection\");\n  var proto_record_1 = require(\"angular2/src/core/change_detection/proto_record\");\n  function coalesce(srcRecords) {\n    var dstRecords = [];\n    var excludedIdxs = [];\n    var indexMap = new collection_1.Map();\n    var skipDepth = 0;\n    var skipSources = collection_1.ListWrapper.createFixedSize(srcRecords.length);\n    for (var protoIndex = 0; protoIndex < srcRecords.length; protoIndex++) {\n      var skipRecord = skipSources[protoIndex];\n      if (lang_1.isPresent(skipRecord)) {\n        skipDepth--;\n        skipRecord.fixedArgs[0] = dstRecords.length;\n      }\n      var src = srcRecords[protoIndex];\n      var dst = _cloneAndUpdateIndexes(src, dstRecords, indexMap);\n      if (dst.isSkipRecord()) {\n        dstRecords.push(dst);\n        skipDepth++;\n        skipSources[dst.fixedArgs[0]] = dst;\n      } else {\n        var record = _mayBeAddRecord(dst, dstRecords, excludedIdxs, skipDepth > 0);\n        indexMap.set(src.selfIndex, record.selfIndex);\n      }\n    }\n    return _optimizeSkips(dstRecords);\n  }\n  exports.coalesce = coalesce;\n  function _optimizeSkips(srcRecords) {\n    var dstRecords = [];\n    var skipSources = collection_1.ListWrapper.createFixedSize(srcRecords.length);\n    var indexMap = new collection_1.Map();\n    for (var protoIndex = 0; protoIndex < srcRecords.length; protoIndex++) {\n      var skipRecord = skipSources[protoIndex];\n      if (lang_1.isPresent(skipRecord)) {\n        skipRecord.fixedArgs[0] = dstRecords.length;\n      }\n      var src = srcRecords[protoIndex];\n      if (src.isSkipRecord()) {\n        if (src.isConditionalSkipRecord() && src.fixedArgs[0] === protoIndex + 2 && protoIndex < srcRecords.length - 1 && srcRecords[protoIndex + 1].mode === proto_record_1.RecordType.SkipRecords) {\n          src.mode = src.mode === proto_record_1.RecordType.SkipRecordsIf ? proto_record_1.RecordType.SkipRecordsIfNot : proto_record_1.RecordType.SkipRecordsIf;\n          src.fixedArgs[0] = srcRecords[protoIndex + 1].fixedArgs[0];\n          protoIndex++;\n        }\n        if (src.fixedArgs[0] > protoIndex + 1) {\n          var dst = _cloneAndUpdateIndexes(src, dstRecords, indexMap);\n          dstRecords.push(dst);\n          skipSources[dst.fixedArgs[0]] = dst;\n        }\n      } else {\n        var dst = _cloneAndUpdateIndexes(src, dstRecords, indexMap);\n        dstRecords.push(dst);\n        indexMap.set(src.selfIndex, dst.selfIndex);\n      }\n    }\n    return dstRecords;\n  }\n  function _mayBeAddRecord(record, dstRecords, excludedIdxs, excluded) {\n    var match = _findFirstMatch(record, dstRecords, excludedIdxs);\n    if (lang_1.isPresent(match)) {\n      if (record.lastInBinding) {\n        dstRecords.push(_createSelfRecord(record, match.selfIndex, dstRecords.length + 1));\n        match.referencedBySelf = true;\n      } else {\n        if (record.argumentToPureFunction) {\n          match.argumentToPureFunction = true;\n        }\n      }\n      return match;\n    }\n    if (excluded) {\n      excludedIdxs.push(record.selfIndex);\n    }\n    dstRecords.push(record);\n    return record;\n  }\n  function _findFirstMatch(record, dstRecords, excludedIdxs) {\n    return dstRecords.find(function(rr) {\n      return excludedIdxs.indexOf(rr.selfIndex) == -1 && rr.mode !== proto_record_1.RecordType.DirectiveLifecycle && _haveSameDirIndex(rr, record) && rr.mode === record.mode && lang_1.looseIdentical(rr.funcOrValue, record.funcOrValue) && rr.contextIndex === record.contextIndex && lang_1.looseIdentical(rr.name, record.name) && collection_1.ListWrapper.equals(rr.args, record.args);\n    });\n  }\n  function _cloneAndUpdateIndexes(record, dstRecords, indexMap) {\n    var args = record.args.map(function(src) {\n      return _srcToDstSelfIndex(indexMap, src);\n    });\n    var contextIndex = _srcToDstSelfIndex(indexMap, record.contextIndex);\n    var selfIndex = dstRecords.length + 1;\n    return new proto_record_1.ProtoRecord(record.mode, record.name, record.funcOrValue, args, record.fixedArgs, contextIndex, record.directiveIndex, selfIndex, record.bindingRecord, record.lastInBinding, record.lastInDirective, record.argumentToPureFunction, record.referencedBySelf, record.propertyBindingIndex);\n  }\n  function _srcToDstSelfIndex(indexMap, srcIdx) {\n    var dstIdx = indexMap.get(srcIdx);\n    return lang_1.isPresent(dstIdx) ? dstIdx : srcIdx;\n  }\n  function _createSelfRecord(r, contextIndex, selfIndex) {\n    return new proto_record_1.ProtoRecord(proto_record_1.RecordType.Self, \"self\", null, [], r.fixedArgs, contextIndex, r.directiveIndex, selfIndex, r.bindingRecord, r.lastInBinding, r.lastInDirective, false, false, r.propertyBindingIndex);\n  }\n  function _haveSameDirIndex(a, b) {\n    var di1 = lang_1.isBlank(a.directiveIndex) ? null : a.directiveIndex.directiveIndex;\n    var ei1 = lang_1.isBlank(a.directiveIndex) ? null : a.directiveIndex.elementIndex;\n    var di2 = lang_1.isBlank(b.directiveIndex) ? null : b.directiveIndex.directiveIndex;\n    var ei2 = lang_1.isBlank(b.directiveIndex) ? null : b.directiveIndex.elementIndex;\n    return di1 === di2 && ei1 === ei2;\n  }\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"angular2/src/core/change_detection/codegen_name_util\", [\"angular2/src/facade/lang\", \"angular2/src/facade/collection\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  var lang_1 = require(\"angular2/src/facade/lang\");\n  var collection_1 = require(\"angular2/src/facade/collection\");\n  var _STATE_ACCESSOR = \"state\";\n  var _CONTEXT_ACCESSOR = \"context\";\n  var _PROP_BINDING_INDEX = \"propertyBindingIndex\";\n  var _DIRECTIVES_ACCESSOR = \"directiveIndices\";\n  var _DISPATCHER_ACCESSOR = \"dispatcher\";\n  var _LOCALS_ACCESSOR = \"locals\";\n  var _MODE_ACCESSOR = \"mode\";\n  var _PIPES_ACCESSOR = \"pipes\";\n  var _PROTOS_ACCESSOR = \"protos\";\n  exports.CONTEXT_ACCESSOR = \"context\";\n  exports.CONTEXT_INDEX = 0;\n  var _FIELD_PREFIX = 'this.';\n  var _whiteSpaceRegExp = /\\W/g;\n  function sanitizeName(s) {\n    return lang_1.StringWrapper.replaceAll(s, _whiteSpaceRegExp, '');\n  }\n  exports.sanitizeName = sanitizeName;\n  var CodegenNameUtil = (function() {\n    function CodegenNameUtil(_records, _eventBindings, _directiveRecords, _utilName) {\n      this._records = _records;\n      this._eventBindings = _eventBindings;\n      this._directiveRecords = _directiveRecords;\n      this._utilName = _utilName;\n      this._sanitizedEventNames = new collection_1.Map();\n      this._sanitizedNames = collection_1.ListWrapper.createFixedSize(this._records.length + 1);\n      this._sanitizedNames[exports.CONTEXT_INDEX] = exports.CONTEXT_ACCESSOR;\n      for (var i = 0,\n          iLen = this._records.length; i < iLen; ++i) {\n        this._sanitizedNames[i + 1] = sanitizeName(\"\" + this._records[i].name + i);\n      }\n      for (var ebIndex = 0; ebIndex < _eventBindings.length; ++ebIndex) {\n        var eb = _eventBindings[ebIndex];\n        var names = [exports.CONTEXT_ACCESSOR];\n        for (var i = 0,\n            iLen = eb.records.length; i < iLen; ++i) {\n          names.push(sanitizeName(\"\" + eb.records[i].name + i + \"_\" + ebIndex));\n        }\n        this._sanitizedEventNames.set(eb, names);\n      }\n    }\n    CodegenNameUtil.prototype._addFieldPrefix = function(name) {\n      return \"\" + _FIELD_PREFIX + name;\n    };\n    CodegenNameUtil.prototype.getDispatcherName = function() {\n      return this._addFieldPrefix(_DISPATCHER_ACCESSOR);\n    };\n    CodegenNameUtil.prototype.getPipesAccessorName = function() {\n      return this._addFieldPrefix(_PIPES_ACCESSOR);\n    };\n    CodegenNameUtil.prototype.getProtosName = function() {\n      return this._addFieldPrefix(_PROTOS_ACCESSOR);\n    };\n    CodegenNameUtil.prototype.getDirectivesAccessorName = function() {\n      return this._addFieldPrefix(_DIRECTIVES_ACCESSOR);\n    };\n    CodegenNameUtil.prototype.getLocalsAccessorName = function() {\n      return this._addFieldPrefix(_LOCALS_ACCESSOR);\n    };\n    CodegenNameUtil.prototype.getStateName = function() {\n      return this._addFieldPrefix(_STATE_ACCESSOR);\n    };\n    CodegenNameUtil.prototype.getModeName = function() {\n      return this._addFieldPrefix(_MODE_ACCESSOR);\n    };\n    CodegenNameUtil.prototype.getPropertyBindingIndex = function() {\n      return this._addFieldPrefix(_PROP_BINDING_INDEX);\n    };\n    CodegenNameUtil.prototype.getLocalName = function(idx) {\n      return \"l_\" + this._sanitizedNames[idx];\n    };\n    CodegenNameUtil.prototype.getEventLocalName = function(eb, idx) {\n      return \"l_\" + this._sanitizedEventNames.get(eb)[idx];\n    };\n    CodegenNameUtil.prototype.getChangeName = function(idx) {\n      return \"c_\" + this._sanitizedNames[idx];\n    };\n    CodegenNameUtil.prototype.genInitLocals = function() {\n      var declarations = [];\n      var assignments = [];\n      for (var i = 0,\n          iLen = this.getFieldCount(); i < iLen; ++i) {\n        if (i == exports.CONTEXT_INDEX) {\n          declarations.push(this.getLocalName(i) + \" = \" + this.getFieldName(i));\n        } else {\n          var rec = this._records[i - 1];\n          if (rec.argumentToPureFunction) {\n            var changeName = this.getChangeName(i);\n            declarations.push(this.getLocalName(i) + \",\" + changeName);\n            assignments.push(changeName);\n          } else {\n            declarations.push(\"\" + this.getLocalName(i));\n          }\n        }\n      }\n      var assignmentsCode = collection_1.ListWrapper.isEmpty(assignments) ? '' : assignments.join('=') + \" = false;\";\n      return \"var \" + declarations.join(',') + \";\" + assignmentsCode;\n    };\n    CodegenNameUtil.prototype.genInitEventLocals = function() {\n      var _this = this;\n      var res = [(this.getLocalName(exports.CONTEXT_INDEX) + \" = \" + this.getFieldName(exports.CONTEXT_INDEX))];\n      this._sanitizedEventNames.forEach(function(names, eb) {\n        for (var i = 0; i < names.length; ++i) {\n          if (i !== exports.CONTEXT_INDEX) {\n            res.push(\"\" + _this.getEventLocalName(eb, i));\n          }\n        }\n      });\n      return res.length > 1 ? \"var \" + res.join(',') + \";\" : '';\n    };\n    CodegenNameUtil.prototype.getPreventDefaultAccesor = function() {\n      return \"preventDefault\";\n    };\n    CodegenNameUtil.prototype.getFieldCount = function() {\n      return this._sanitizedNames.length;\n    };\n    CodegenNameUtil.prototype.getFieldName = function(idx) {\n      return this._addFieldPrefix(this._sanitizedNames[idx]);\n    };\n    CodegenNameUtil.prototype.getAllFieldNames = function() {\n      var fieldList = [];\n      for (var k = 0,\n          kLen = this.getFieldCount(); k < kLen; ++k) {\n        if (k === 0 || this._records[k - 1].shouldBeChecked()) {\n          fieldList.push(this.getFieldName(k));\n        }\n      }\n      for (var i = 0,\n          iLen = this._records.length; i < iLen; ++i) {\n        var rec = this._records[i];\n        if (rec.isPipeRecord()) {\n          fieldList.push(this.getPipeName(rec.selfIndex));\n        }\n      }\n      for (var j = 0,\n          jLen = this._directiveRecords.length; j < jLen; ++j) {\n        var dRec = this._directiveRecords[j];\n        fieldList.push(this.getDirectiveName(dRec.directiveIndex));\n        if (!dRec.isDefaultChangeDetection()) {\n          fieldList.push(this.getDetectorName(dRec.directiveIndex));\n        }\n      }\n      return fieldList;\n    };\n    CodegenNameUtil.prototype.genDehydrateFields = function() {\n      var fields = this.getAllFieldNames();\n      collection_1.ListWrapper.removeAt(fields, exports.CONTEXT_INDEX);\n      if (collection_1.ListWrapper.isEmpty(fields))\n        return '';\n      fields.push(this._utilName + \".uninitialized;\");\n      return fields.join(' = ');\n    };\n    CodegenNameUtil.prototype.genPipeOnDestroy = function() {\n      var _this = this;\n      return this._records.filter(function(r) {\n        return r.isPipeRecord();\n      }).map(function(r) {\n        return (_this._utilName + \".callPipeOnDestroy(\" + _this.getPipeName(r.selfIndex) + \");\");\n      }).join('\\n');\n    };\n    CodegenNameUtil.prototype.getPipeName = function(idx) {\n      return this._addFieldPrefix(this._sanitizedNames[idx] + \"_pipe\");\n    };\n    CodegenNameUtil.prototype.getDirectiveName = function(d) {\n      return this._addFieldPrefix(\"directive_\" + d.name);\n    };\n    CodegenNameUtil.prototype.getDetectorName = function(d) {\n      return this._addFieldPrefix(\"detector_\" + d.name);\n    };\n    return CodegenNameUtil;\n  })();\n  exports.CodegenNameUtil = CodegenNameUtil;\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"angular2/src/core/change_detection/codegen_facade\", [], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  function codify(obj) {\n    return JSON.stringify(obj);\n  }\n  exports.codify = codify;\n  function rawString(str) {\n    return \"'\" + str + \"'\";\n  }\n  exports.rawString = rawString;\n  function combineGeneratedStrings(vals) {\n    return vals.join(' + ');\n  }\n  exports.combineGeneratedStrings = combineGeneratedStrings;\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"angular2/src/core/metadata/view\", [\"angular2/src/facade/lang\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  var __decorate = (this && this.__decorate) || function(decorators, target, key, desc) {\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\")\n      return Reflect.decorate(decorators, target, key, desc);\n    switch (arguments.length) {\n      case 2:\n        return decorators.reduceRight(function(o, d) {\n          return (d && d(o)) || o;\n        }, target);\n      case 3:\n        return decorators.reduceRight(function(o, d) {\n          return (d && d(target, key)), void 0;\n        }, void 0);\n      case 4:\n        return decorators.reduceRight(function(o, d) {\n          return (d && d(target, key, o)) || o;\n        }, desc);\n    }\n  };\n  var __metadata = (this && this.__metadata) || function(k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\")\n      return Reflect.metadata(k, v);\n  };\n  var lang_1 = require(\"angular2/src/facade/lang\");\n  (function(ViewEncapsulation) {\n    ViewEncapsulation[ViewEncapsulation[\"Emulated\"] = 0] = \"Emulated\";\n    ViewEncapsulation[ViewEncapsulation[\"Native\"] = 1] = \"Native\";\n    ViewEncapsulation[ViewEncapsulation[\"None\"] = 2] = \"None\";\n  })(exports.ViewEncapsulation || (exports.ViewEncapsulation = {}));\n  var ViewEncapsulation = exports.ViewEncapsulation;\n  exports.VIEW_ENCAPSULATION_VALUES = [ViewEncapsulation.Emulated, ViewEncapsulation.Native, ViewEncapsulation.None];\n  var ViewMetadata = (function() {\n    function ViewMetadata(_a) {\n      var _b = _a === void 0 ? {} : _a,\n          templateUrl = _b.templateUrl,\n          template = _b.template,\n          directives = _b.directives,\n          pipes = _b.pipes,\n          encapsulation = _b.encapsulation,\n          styles = _b.styles,\n          styleUrls = _b.styleUrls;\n      this.templateUrl = templateUrl;\n      this.template = template;\n      this.styleUrls = styleUrls;\n      this.styles = styles;\n      this.directives = directives;\n      this.pipes = pipes;\n      this.encapsulation = encapsulation;\n    }\n    ViewMetadata = __decorate([lang_1.CONST(), __metadata('design:paramtypes', [Object])], ViewMetadata);\n    return ViewMetadata;\n  })();\n  exports.ViewMetadata = ViewMetadata;\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"angular2/src/common/pipes/invalid_pipe_argument_exception\", [\"angular2/src/facade/exceptions\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  var __extends = (this && this.__extends) || function(d, b) {\n    for (var p in b)\n      if (b.hasOwnProperty(p))\n        d[p] = b[p];\n    function __() {\n      this.constructor = d;\n    }\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n  };\n  var exceptions_1 = require(\"angular2/src/facade/exceptions\");\n  var InvalidPipeArgumentException = (function(_super) {\n    __extends(InvalidPipeArgumentException, _super);\n    function InvalidPipeArgumentException(type, value) {\n      _super.call(this, \"Invalid argument '\" + value + \"' for pipe '\" + type + \"'\");\n    }\n    return InvalidPipeArgumentException;\n  })(exceptions_1.BaseException);\n  exports.InvalidPipeArgumentException = InvalidPipeArgumentException;\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"angular2/src/common/pipes/uppercase_pipe\", [\"angular2/src/facade/lang\", \"angular2/src/core/metadata\", \"angular2/src/core/di\", \"angular2/src/common/pipes/invalid_pipe_argument_exception\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  var __decorate = (this && this.__decorate) || function(decorators, target, key, desc) {\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\")\n      return Reflect.decorate(decorators, target, key, desc);\n    switch (arguments.length) {\n      case 2:\n        return decorators.reduceRight(function(o, d) {\n          return (d && d(o)) || o;\n        }, target);\n      case 3:\n        return decorators.reduceRight(function(o, d) {\n          return (d && d(target, key)), void 0;\n        }, void 0);\n      case 4:\n        return decorators.reduceRight(function(o, d) {\n          return (d && d(target, key, o)) || o;\n        }, desc);\n    }\n  };\n  var __metadata = (this && this.__metadata) || function(k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\")\n      return Reflect.metadata(k, v);\n  };\n  var lang_1 = require(\"angular2/src/facade/lang\");\n  var metadata_1 = require(\"angular2/src/core/metadata\");\n  var di_1 = require(\"angular2/src/core/di\");\n  var invalid_pipe_argument_exception_1 = require(\"angular2/src/common/pipes/invalid_pipe_argument_exception\");\n  var UpperCasePipe = (function() {\n    function UpperCasePipe() {}\n    UpperCasePipe.prototype.transform = function(value, args) {\n      if (args === void 0) {\n        args = null;\n      }\n      if (lang_1.isBlank(value))\n        return value;\n      if (!lang_1.isString(value)) {\n        throw new invalid_pipe_argument_exception_1.InvalidPipeArgumentException(UpperCasePipe, value);\n      }\n      return value.toUpperCase();\n    };\n    UpperCasePipe = __decorate([lang_1.CONST(), metadata_1.Pipe({name: 'uppercase'}), di_1.Injectable(), __metadata('design:paramtypes', [])], UpperCasePipe);\n    return UpperCasePipe;\n  })();\n  exports.UpperCasePipe = UpperCasePipe;\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"angular2/src/common/pipes/lowercase_pipe\", [\"angular2/src/facade/lang\", \"angular2/src/core/di\", \"angular2/src/core/metadata\", \"angular2/src/common/pipes/invalid_pipe_argument_exception\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  var __decorate = (this && this.__decorate) || function(decorators, target, key, desc) {\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\")\n      return Reflect.decorate(decorators, target, key, desc);\n    switch (arguments.length) {\n      case 2:\n        return decorators.reduceRight(function(o, d) {\n          return (d && d(o)) || o;\n        }, target);\n      case 3:\n        return decorators.reduceRight(function(o, d) {\n          return (d && d(target, key)), void 0;\n        }, void 0);\n      case 4:\n        return decorators.reduceRight(function(o, d) {\n          return (d && d(target, key, o)) || o;\n        }, desc);\n    }\n  };\n  var __metadata = (this && this.__metadata) || function(k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\")\n      return Reflect.metadata(k, v);\n  };\n  var lang_1 = require(\"angular2/src/facade/lang\");\n  var di_1 = require(\"angular2/src/core/di\");\n  var metadata_1 = require(\"angular2/src/core/metadata\");\n  var invalid_pipe_argument_exception_1 = require(\"angular2/src/common/pipes/invalid_pipe_argument_exception\");\n  var LowerCasePipe = (function() {\n    function LowerCasePipe() {}\n    LowerCasePipe.prototype.transform = function(value, args) {\n      if (args === void 0) {\n        args = null;\n      }\n      if (lang_1.isBlank(value))\n        return value;\n      if (!lang_1.isString(value)) {\n        throw new invalid_pipe_argument_exception_1.InvalidPipeArgumentException(LowerCasePipe, value);\n      }\n      return value.toLowerCase();\n    };\n    LowerCasePipe = __decorate([lang_1.CONST(), metadata_1.Pipe({name: 'lowercase'}), di_1.Injectable(), __metadata('design:paramtypes', [])], LowerCasePipe);\n    return LowerCasePipe;\n  })();\n  exports.LowerCasePipe = LowerCasePipe;\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"angular2/src/common/pipes/json_pipe\", [\"angular2/src/facade/lang\", \"angular2/src/core/di\", \"angular2/src/core/metadata\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  var __decorate = (this && this.__decorate) || function(decorators, target, key, desc) {\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\")\n      return Reflect.decorate(decorators, target, key, desc);\n    switch (arguments.length) {\n      case 2:\n        return decorators.reduceRight(function(o, d) {\n          return (d && d(o)) || o;\n        }, target);\n      case 3:\n        return decorators.reduceRight(function(o, d) {\n          return (d && d(target, key)), void 0;\n        }, void 0);\n      case 4:\n        return decorators.reduceRight(function(o, d) {\n          return (d && d(target, key, o)) || o;\n        }, desc);\n    }\n  };\n  var __metadata = (this && this.__metadata) || function(k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\")\n      return Reflect.metadata(k, v);\n  };\n  var lang_1 = require(\"angular2/src/facade/lang\");\n  var di_1 = require(\"angular2/src/core/di\");\n  var metadata_1 = require(\"angular2/src/core/metadata\");\n  var JsonPipe = (function() {\n    function JsonPipe() {}\n    JsonPipe.prototype.transform = function(value, args) {\n      if (args === void 0) {\n        args = null;\n      }\n      return lang_1.Json.stringify(value);\n    };\n    JsonPipe = __decorate([lang_1.CONST(), metadata_1.Pipe({\n      name: 'json',\n      pure: false\n    }), di_1.Injectable(), __metadata('design:paramtypes', [])], JsonPipe);\n    return JsonPipe;\n  })();\n  exports.JsonPipe = JsonPipe;\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"angular2/src/common/pipes/slice_pipe\", [\"angular2/src/facade/lang\", \"angular2/src/facade/exceptions\", \"angular2/src/facade/collection\", \"angular2/src/core/di\", \"angular2/src/common/pipes/invalid_pipe_argument_exception\", \"angular2/src/core/metadata\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  var __decorate = (this && this.__decorate) || function(decorators, target, key, desc) {\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\")\n      return Reflect.decorate(decorators, target, key, desc);\n    switch (arguments.length) {\n      case 2:\n        return decorators.reduceRight(function(o, d) {\n          return (d && d(o)) || o;\n        }, target);\n      case 3:\n        return decorators.reduceRight(function(o, d) {\n          return (d && d(target, key)), void 0;\n        }, void 0);\n      case 4:\n        return decorators.reduceRight(function(o, d) {\n          return (d && d(target, key, o)) || o;\n        }, desc);\n    }\n  };\n  var __metadata = (this && this.__metadata) || function(k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\")\n      return Reflect.metadata(k, v);\n  };\n  var lang_1 = require(\"angular2/src/facade/lang\");\n  var exceptions_1 = require(\"angular2/src/facade/exceptions\");\n  var collection_1 = require(\"angular2/src/facade/collection\");\n  var di_1 = require(\"angular2/src/core/di\");\n  var invalid_pipe_argument_exception_1 = require(\"angular2/src/common/pipes/invalid_pipe_argument_exception\");\n  var metadata_1 = require(\"angular2/src/core/metadata\");\n  var SlicePipe = (function() {\n    function SlicePipe() {}\n    SlicePipe.prototype.transform = function(value, args) {\n      if (args === void 0) {\n        args = null;\n      }\n      if (lang_1.isBlank(args) || args.length == 0) {\n        throw new exceptions_1.BaseException('Slice pipe requires one argument');\n      }\n      if (!this.supports(value)) {\n        throw new invalid_pipe_argument_exception_1.InvalidPipeArgumentException(SlicePipe, value);\n      }\n      if (lang_1.isBlank(value))\n        return value;\n      var start = args[0];\n      var end = args.length > 1 ? args[1] : null;\n      if (lang_1.isString(value)) {\n        return lang_1.StringWrapper.slice(value, start, end);\n      }\n      return collection_1.ListWrapper.slice(value, start, end);\n    };\n    SlicePipe.prototype.supports = function(obj) {\n      return lang_1.isString(obj) || lang_1.isArray(obj);\n    };\n    SlicePipe = __decorate([metadata_1.Pipe({\n      name: 'slice',\n      pure: false\n    }), di_1.Injectable(), __metadata('design:paramtypes', [])], SlicePipe);\n    return SlicePipe;\n  })();\n  exports.SlicePipe = SlicePipe;\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"angular2/src/facade/intl\", [], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  (function(NumberFormatStyle) {\n    NumberFormatStyle[NumberFormatStyle[\"Decimal\"] = 0] = \"Decimal\";\n    NumberFormatStyle[NumberFormatStyle[\"Percent\"] = 1] = \"Percent\";\n    NumberFormatStyle[NumberFormatStyle[\"Currency\"] = 2] = \"Currency\";\n  })(exports.NumberFormatStyle || (exports.NumberFormatStyle = {}));\n  var NumberFormatStyle = exports.NumberFormatStyle;\n  var NumberFormatter = (function() {\n    function NumberFormatter() {}\n    NumberFormatter.format = function(num, locale, style, _a) {\n      var _b = _a === void 0 ? {} : _a,\n          _c = _b.minimumIntegerDigits,\n          minimumIntegerDigits = _c === void 0 ? 1 : _c,\n          _d = _b.minimumFractionDigits,\n          minimumFractionDigits = _d === void 0 ? 0 : _d,\n          _e = _b.maximumFractionDigits,\n          maximumFractionDigits = _e === void 0 ? 3 : _e,\n          currency = _b.currency,\n          _f = _b.currencyAsSymbol,\n          currencyAsSymbol = _f === void 0 ? false : _f;\n      var intlOptions = {\n        minimumIntegerDigits: minimumIntegerDigits,\n        minimumFractionDigits: minimumFractionDigits,\n        maximumFractionDigits: maximumFractionDigits\n      };\n      intlOptions.style = NumberFormatStyle[style].toLowerCase();\n      if (style == NumberFormatStyle.Currency) {\n        intlOptions.currency = currency;\n        intlOptions.currencyDisplay = currencyAsSymbol ? 'symbol' : 'code';\n      }\n      return new Intl.NumberFormat(locale, intlOptions).format(num);\n    };\n    return NumberFormatter;\n  })();\n  exports.NumberFormatter = NumberFormatter;\n  function digitCondition(len) {\n    return len == 2 ? '2-digit' : 'numeric';\n  }\n  function nameCondition(len) {\n    return len < 4 ? 'short' : 'long';\n  }\n  function extractComponents(pattern) {\n    var ret = {};\n    var i = 0,\n        j;\n    while (i < pattern.length) {\n      j = i;\n      while (j < pattern.length && pattern[j] == pattern[i])\n        j++;\n      var len = j - i;\n      switch (pattern[i]) {\n        case 'G':\n          ret.era = nameCondition(len);\n          break;\n        case 'y':\n          ret.year = digitCondition(len);\n          break;\n        case 'M':\n          if (len >= 3)\n            ret.month = nameCondition(len);\n          else\n            ret.month = digitCondition(len);\n          break;\n        case 'd':\n          ret.day = digitCondition(len);\n          break;\n        case 'E':\n          ret.weekday = nameCondition(len);\n          break;\n        case 'j':\n          ret.hour = digitCondition(len);\n          break;\n        case 'h':\n          ret.hour = digitCondition(len);\n          ret.hour12 = true;\n          break;\n        case 'H':\n          ret.hour = digitCondition(len);\n          ret.hour12 = false;\n          break;\n        case 'm':\n          ret.minute = digitCondition(len);\n          break;\n        case 's':\n          ret.second = digitCondition(len);\n          break;\n        case 'z':\n          ret.timeZoneName = 'long';\n          break;\n        case 'Z':\n          ret.timeZoneName = 'short';\n          break;\n      }\n      i = j;\n    }\n    return ret;\n  }\n  var dateFormatterCache = new Map();\n  var DateFormatter = (function() {\n    function DateFormatter() {}\n    DateFormatter.format = function(date, locale, pattern) {\n      var key = locale + pattern;\n      if (dateFormatterCache.has(key)) {\n        return dateFormatterCache.get(key).format(date);\n      }\n      var formatter = new Intl.DateTimeFormat(locale, extractComponents(pattern));\n      dateFormatterCache.set(key, formatter);\n      return formatter.format(date);\n    };\n    return DateFormatter;\n  })();\n  exports.DateFormatter = DateFormatter;\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"angular2/src/common/pipes/number_pipe\", [\"angular2/src/facade/lang\", \"angular2/src/facade/exceptions\", \"angular2/src/facade/intl\", \"angular2/src/core/di\", \"angular2/src/core/metadata\", \"angular2/src/facade/collection\", \"angular2/src/common/pipes/invalid_pipe_argument_exception\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  var __extends = (this && this.__extends) || function(d, b) {\n    for (var p in b)\n      if (b.hasOwnProperty(p))\n        d[p] = b[p];\n    function __() {\n      this.constructor = d;\n    }\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n  };\n  var __decorate = (this && this.__decorate) || function(decorators, target, key, desc) {\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\")\n      return Reflect.decorate(decorators, target, key, desc);\n    switch (arguments.length) {\n      case 2:\n        return decorators.reduceRight(function(o, d) {\n          return (d && d(o)) || o;\n        }, target);\n      case 3:\n        return decorators.reduceRight(function(o, d) {\n          return (d && d(target, key)), void 0;\n        }, void 0);\n      case 4:\n        return decorators.reduceRight(function(o, d) {\n          return (d && d(target, key, o)) || o;\n        }, desc);\n    }\n  };\n  var __metadata = (this && this.__metadata) || function(k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\")\n      return Reflect.metadata(k, v);\n  };\n  var lang_1 = require(\"angular2/src/facade/lang\");\n  var exceptions_1 = require(\"angular2/src/facade/exceptions\");\n  var intl_1 = require(\"angular2/src/facade/intl\");\n  var di_1 = require(\"angular2/src/core/di\");\n  var metadata_1 = require(\"angular2/src/core/metadata\");\n  var collection_1 = require(\"angular2/src/facade/collection\");\n  var invalid_pipe_argument_exception_1 = require(\"angular2/src/common/pipes/invalid_pipe_argument_exception\");\n  var defaultLocale = 'en-US';\n  var _re = lang_1.RegExpWrapper.create('^(\\\\d+)?\\\\.((\\\\d+)(\\\\-(\\\\d+))?)?$');\n  var NumberPipe = (function() {\n    function NumberPipe() {}\n    NumberPipe._format = function(value, style, digits, currency, currencyAsSymbol) {\n      if (currency === void 0) {\n        currency = null;\n      }\n      if (currencyAsSymbol === void 0) {\n        currencyAsSymbol = false;\n      }\n      if (lang_1.isBlank(value))\n        return null;\n      if (!lang_1.isNumber(value)) {\n        throw new invalid_pipe_argument_exception_1.InvalidPipeArgumentException(NumberPipe, value);\n      }\n      var minInt = 1,\n          minFraction = 0,\n          maxFraction = 3;\n      if (lang_1.isPresent(digits)) {\n        var parts = lang_1.RegExpWrapper.firstMatch(_re, digits);\n        if (lang_1.isBlank(parts)) {\n          throw new exceptions_1.BaseException(digits + \" is not a valid digit info for number pipes\");\n        }\n        if (lang_1.isPresent(parts[1])) {\n          minInt = lang_1.NumberWrapper.parseIntAutoRadix(parts[1]);\n        }\n        if (lang_1.isPresent(parts[3])) {\n          minFraction = lang_1.NumberWrapper.parseIntAutoRadix(parts[3]);\n        }\n        if (lang_1.isPresent(parts[5])) {\n          maxFraction = lang_1.NumberWrapper.parseIntAutoRadix(parts[5]);\n        }\n      }\n      return intl_1.NumberFormatter.format(value, defaultLocale, style, {\n        minimumIntegerDigits: minInt,\n        minimumFractionDigits: minFraction,\n        maximumFractionDigits: maxFraction,\n        currency: currency,\n        currencyAsSymbol: currencyAsSymbol\n      });\n    };\n    NumberPipe = __decorate([lang_1.CONST(), di_1.Injectable(), __metadata('design:paramtypes', [])], NumberPipe);\n    return NumberPipe;\n  })();\n  exports.NumberPipe = NumberPipe;\n  var DecimalPipe = (function(_super) {\n    __extends(DecimalPipe, _super);\n    function DecimalPipe() {\n      _super.apply(this, arguments);\n    }\n    DecimalPipe.prototype.transform = function(value, args) {\n      var digits = collection_1.ListWrapper.first(args);\n      return NumberPipe._format(value, intl_1.NumberFormatStyle.Decimal, digits);\n    };\n    DecimalPipe = __decorate([lang_1.CONST(), metadata_1.Pipe({name: 'number'}), di_1.Injectable(), __metadata('design:paramtypes', [])], DecimalPipe);\n    return DecimalPipe;\n  })(NumberPipe);\n  exports.DecimalPipe = DecimalPipe;\n  var PercentPipe = (function(_super) {\n    __extends(PercentPipe, _super);\n    function PercentPipe() {\n      _super.apply(this, arguments);\n    }\n    PercentPipe.prototype.transform = function(value, args) {\n      var digits = collection_1.ListWrapper.first(args);\n      return NumberPipe._format(value, intl_1.NumberFormatStyle.Percent, digits);\n    };\n    PercentPipe = __decorate([lang_1.CONST(), metadata_1.Pipe({name: 'percent'}), di_1.Injectable(), __metadata('design:paramtypes', [])], PercentPipe);\n    return PercentPipe;\n  })(NumberPipe);\n  exports.PercentPipe = PercentPipe;\n  var CurrencyPipe = (function(_super) {\n    __extends(CurrencyPipe, _super);\n    function CurrencyPipe() {\n      _super.apply(this, arguments);\n    }\n    CurrencyPipe.prototype.transform = function(value, args) {\n      var currencyCode = lang_1.isPresent(args) && args.length > 0 ? args[0] : 'USD';\n      var symbolDisplay = lang_1.isPresent(args) && args.length > 1 ? args[1] : false;\n      var digits = lang_1.isPresent(args) && args.length > 2 ? args[2] : null;\n      return NumberPipe._format(value, intl_1.NumberFormatStyle.Currency, digits, currencyCode, symbolDisplay);\n    };\n    CurrencyPipe = __decorate([lang_1.CONST(), metadata_1.Pipe({name: 'currency'}), di_1.Injectable(), __metadata('design:paramtypes', [])], CurrencyPipe);\n    return CurrencyPipe;\n  })(NumberPipe);\n  exports.CurrencyPipe = CurrencyPipe;\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"angular2/src/core/linker/directive_resolver\", [\"angular2/src/core/di\", \"angular2/src/facade/lang\", \"angular2/src/facade/exceptions\", \"angular2/src/facade/collection\", \"angular2/src/core/metadata\", \"angular2/src/core/reflection/reflection\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  var __decorate = (this && this.__decorate) || function(decorators, target, key, desc) {\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\")\n      return Reflect.decorate(decorators, target, key, desc);\n    switch (arguments.length) {\n      case 2:\n        return decorators.reduceRight(function(o, d) {\n          return (d && d(o)) || o;\n        }, target);\n      case 3:\n        return decorators.reduceRight(function(o, d) {\n          return (d && d(target, key)), void 0;\n        }, void 0);\n      case 4:\n        return decorators.reduceRight(function(o, d) {\n          return (d && d(target, key, o)) || o;\n        }, desc);\n    }\n  };\n  var __metadata = (this && this.__metadata) || function(k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\")\n      return Reflect.metadata(k, v);\n  };\n  var di_1 = require(\"angular2/src/core/di\");\n  var lang_1 = require(\"angular2/src/facade/lang\");\n  var exceptions_1 = require(\"angular2/src/facade/exceptions\");\n  var collection_1 = require(\"angular2/src/facade/collection\");\n  var metadata_1 = require(\"angular2/src/core/metadata\");\n  var reflection_1 = require(\"angular2/src/core/reflection/reflection\");\n  function _isDirectiveMetadata(type) {\n    return type instanceof metadata_1.DirectiveMetadata;\n  }\n  var DirectiveResolver = (function() {\n    function DirectiveResolver() {}\n    DirectiveResolver.prototype.resolve = function(type) {\n      var typeMetadata = reflection_1.reflector.annotations(di_1.resolveForwardRef(type));\n      if (lang_1.isPresent(typeMetadata)) {\n        var metadata = typeMetadata.find(_isDirectiveMetadata);\n        if (lang_1.isPresent(metadata)) {\n          var propertyMetadata = reflection_1.reflector.propMetadata(type);\n          return this._mergeWithPropertyMetadata(metadata, propertyMetadata);\n        }\n      }\n      throw new exceptions_1.BaseException(\"No Directive annotation found on \" + lang_1.stringify(type));\n    };\n    DirectiveResolver.prototype._mergeWithPropertyMetadata = function(dm, propertyMetadata) {\n      var inputs = [];\n      var outputs = [];\n      var host = {};\n      var queries = {};\n      collection_1.StringMapWrapper.forEach(propertyMetadata, function(metadata, propName) {\n        metadata.forEach(function(a) {\n          if (a instanceof metadata_1.InputMetadata) {\n            if (lang_1.isPresent(a.bindingPropertyName)) {\n              inputs.push(propName + \": \" + a.bindingPropertyName);\n            } else {\n              inputs.push(propName);\n            }\n          }\n          if (a instanceof metadata_1.OutputMetadata) {\n            if (lang_1.isPresent(a.bindingPropertyName)) {\n              outputs.push(propName + \": \" + a.bindingPropertyName);\n            } else {\n              outputs.push(propName);\n            }\n          }\n          if (a instanceof metadata_1.HostBindingMetadata) {\n            if (lang_1.isPresent(a.hostPropertyName)) {\n              host[(\"[\" + a.hostPropertyName + \"]\")] = propName;\n            } else {\n              host[(\"[\" + propName + \"]\")] = propName;\n            }\n          }\n          if (a instanceof metadata_1.HostListenerMetadata) {\n            var args = lang_1.isPresent(a.args) ? a.args.join(', ') : '';\n            host[(\"(\" + a.eventName + \")\")] = propName + \"(\" + args + \")\";\n          }\n          if (a instanceof metadata_1.ContentChildrenMetadata) {\n            queries[propName] = a;\n          }\n          if (a instanceof metadata_1.ViewChildrenMetadata) {\n            queries[propName] = a;\n          }\n          if (a instanceof metadata_1.ContentChildMetadata) {\n            queries[propName] = a;\n          }\n          if (a instanceof metadata_1.ViewChildMetadata) {\n            queries[propName] = a;\n          }\n        });\n      });\n      return this._merge(dm, inputs, outputs, host, queries);\n    };\n    DirectiveResolver.prototype._merge = function(dm, inputs, outputs, host, queries) {\n      var mergedInputs = lang_1.isPresent(dm.inputs) ? collection_1.ListWrapper.concat(dm.inputs, inputs) : inputs;\n      var mergedOutputs = lang_1.isPresent(dm.outputs) ? collection_1.ListWrapper.concat(dm.outputs, outputs) : outputs;\n      var mergedHost = lang_1.isPresent(dm.host) ? collection_1.StringMapWrapper.merge(dm.host, host) : host;\n      var mergedQueries = lang_1.isPresent(dm.queries) ? collection_1.StringMapWrapper.merge(dm.queries, queries) : queries;\n      if (dm instanceof metadata_1.ComponentMetadata) {\n        return new metadata_1.ComponentMetadata({\n          selector: dm.selector,\n          inputs: mergedInputs,\n          outputs: mergedOutputs,\n          host: mergedHost,\n          exportAs: dm.exportAs,\n          moduleId: dm.moduleId,\n          queries: mergedQueries,\n          changeDetection: dm.changeDetection,\n          providers: dm.providers,\n          viewProviders: dm.viewProviders\n        });\n      } else {\n        return new metadata_1.DirectiveMetadata({\n          selector: dm.selector,\n          inputs: mergedInputs,\n          outputs: mergedOutputs,\n          host: mergedHost,\n          exportAs: dm.exportAs,\n          moduleId: dm.moduleId,\n          queries: mergedQueries,\n          providers: dm.providers\n        });\n      }\n    };\n    DirectiveResolver = __decorate([di_1.Injectable(), __metadata('design:paramtypes', [])], DirectiveResolver);\n    return DirectiveResolver;\n  })();\n  exports.DirectiveResolver = DirectiveResolver;\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"angular2/src/core/linker/view_resolver\", [\"angular2/src/core/di\", \"angular2/src/core/metadata/view\", \"angular2/src/core/metadata/directives\", \"angular2/src/facade/lang\", \"angular2/src/facade/exceptions\", \"angular2/src/facade/collection\", \"angular2/src/core/reflection/reflection\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  var __decorate = (this && this.__decorate) || function(decorators, target, key, desc) {\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\")\n      return Reflect.decorate(decorators, target, key, desc);\n    switch (arguments.length) {\n      case 2:\n        return decorators.reduceRight(function(o, d) {\n          return (d && d(o)) || o;\n        }, target);\n      case 3:\n        return decorators.reduceRight(function(o, d) {\n          return (d && d(target, key)), void 0;\n        }, void 0);\n      case 4:\n        return decorators.reduceRight(function(o, d) {\n          return (d && d(target, key, o)) || o;\n        }, desc);\n    }\n  };\n  var __metadata = (this && this.__metadata) || function(k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\")\n      return Reflect.metadata(k, v);\n  };\n  var di_1 = require(\"angular2/src/core/di\");\n  var view_1 = require(\"angular2/src/core/metadata/view\");\n  var directives_1 = require(\"angular2/src/core/metadata/directives\");\n  var lang_1 = require(\"angular2/src/facade/lang\");\n  var exceptions_1 = require(\"angular2/src/facade/exceptions\");\n  var collection_1 = require(\"angular2/src/facade/collection\");\n  var reflection_1 = require(\"angular2/src/core/reflection/reflection\");\n  var ViewResolver = (function() {\n    function ViewResolver() {\n      this._cache = new collection_1.Map();\n    }\n    ViewResolver.prototype.resolve = function(component) {\n      var view = this._cache.get(component);\n      if (lang_1.isBlank(view)) {\n        view = this._resolve(component);\n        this._cache.set(component, view);\n      }\n      return view;\n    };\n    ViewResolver.prototype._resolve = function(component) {\n      var compMeta;\n      var viewMeta;\n      reflection_1.reflector.annotations(component).forEach(function(m) {\n        if (m instanceof view_1.ViewMetadata) {\n          viewMeta = m;\n        }\n        if (m instanceof directives_1.ComponentMetadata) {\n          compMeta = m;\n        }\n      });\n      if (lang_1.isPresent(compMeta)) {\n        if (lang_1.isBlank(compMeta.template) && lang_1.isBlank(compMeta.templateUrl) && lang_1.isBlank(viewMeta)) {\n          throw new exceptions_1.BaseException(\"Component '\" + lang_1.stringify(component) + \"' must have either 'template', 'templateUrl', or '@View' set.\");\n        } else if (lang_1.isPresent(compMeta.template) && lang_1.isPresent(viewMeta)) {\n          this._throwMixingViewAndComponent(\"template\", component);\n        } else if (lang_1.isPresent(compMeta.templateUrl) && lang_1.isPresent(viewMeta)) {\n          this._throwMixingViewAndComponent(\"templateUrl\", component);\n        } else if (lang_1.isPresent(compMeta.directives) && lang_1.isPresent(viewMeta)) {\n          this._throwMixingViewAndComponent(\"directives\", component);\n        } else if (lang_1.isPresent(compMeta.pipes) && lang_1.isPresent(viewMeta)) {\n          this._throwMixingViewAndComponent(\"pipes\", component);\n        } else if (lang_1.isPresent(compMeta.encapsulation) && lang_1.isPresent(viewMeta)) {\n          this._throwMixingViewAndComponent(\"encapsulation\", component);\n        } else if (lang_1.isPresent(compMeta.styles) && lang_1.isPresent(viewMeta)) {\n          this._throwMixingViewAndComponent(\"styles\", component);\n        } else if (lang_1.isPresent(compMeta.styleUrls) && lang_1.isPresent(viewMeta)) {\n          this._throwMixingViewAndComponent(\"styleUrls\", component);\n        } else if (lang_1.isPresent(viewMeta)) {\n          return viewMeta;\n        } else {\n          return new view_1.ViewMetadata({\n            templateUrl: compMeta.templateUrl,\n            template: compMeta.template,\n            directives: compMeta.directives,\n            pipes: compMeta.pipes,\n            encapsulation: compMeta.encapsulation,\n            styles: compMeta.styles,\n            styleUrls: compMeta.styleUrls\n          });\n        }\n      } else {\n        if (lang_1.isBlank(viewMeta)) {\n          throw new exceptions_1.BaseException(\"No View decorator found on component '\" + lang_1.stringify(component) + \"'\");\n        } else {\n          return viewMeta;\n        }\n      }\n      return null;\n    };\n    ViewResolver.prototype._throwMixingViewAndComponent = function(propertyName, component) {\n      throw new exceptions_1.BaseException(\"Component '\" + lang_1.stringify(component) + \"' cannot have both '\" + propertyName + \"' and '@View' set at the same time\\\"\");\n    };\n    ViewResolver = __decorate([di_1.Injectable(), __metadata('design:paramtypes', [])], ViewResolver);\n    return ViewResolver;\n  })();\n  exports.ViewResolver = ViewResolver;\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"angular2/src/core/render/api\", [\"angular2/src/facade/exceptions\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  var __extends = (this && this.__extends) || function(d, b) {\n    for (var p in b)\n      if (b.hasOwnProperty(p))\n        d[p] = b[p];\n    function __() {\n      this.constructor = d;\n    }\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n  };\n  var exceptions_1 = require(\"angular2/src/facade/exceptions\");\n  var RenderProtoViewRef = (function() {\n    function RenderProtoViewRef() {}\n    return RenderProtoViewRef;\n  })();\n  exports.RenderProtoViewRef = RenderProtoViewRef;\n  var RenderFragmentRef = (function() {\n    function RenderFragmentRef() {}\n    return RenderFragmentRef;\n  })();\n  exports.RenderFragmentRef = RenderFragmentRef;\n  var RenderViewRef = (function() {\n    function RenderViewRef() {}\n    return RenderViewRef;\n  })();\n  exports.RenderViewRef = RenderViewRef;\n  var RenderTemplateCmd = (function() {\n    function RenderTemplateCmd() {}\n    return RenderTemplateCmd;\n  })();\n  exports.RenderTemplateCmd = RenderTemplateCmd;\n  var RenderBeginCmd = (function(_super) {\n    __extends(RenderBeginCmd, _super);\n    function RenderBeginCmd() {\n      _super.apply(this, arguments);\n    }\n    Object.defineProperty(RenderBeginCmd.prototype, \"ngContentIndex\", {\n      get: function() {\n        return exceptions_1.unimplemented();\n      },\n      enumerable: true,\n      configurable: true\n    });\n    ;\n    Object.defineProperty(RenderBeginCmd.prototype, \"isBound\", {\n      get: function() {\n        return exceptions_1.unimplemented();\n      },\n      enumerable: true,\n      configurable: true\n    });\n    ;\n    return RenderBeginCmd;\n  })(RenderTemplateCmd);\n  exports.RenderBeginCmd = RenderBeginCmd;\n  var RenderTextCmd = (function(_super) {\n    __extends(RenderTextCmd, _super);\n    function RenderTextCmd() {\n      _super.apply(this, arguments);\n    }\n    Object.defineProperty(RenderTextCmd.prototype, \"value\", {\n      get: function() {\n        return exceptions_1.unimplemented();\n      },\n      enumerable: true,\n      configurable: true\n    });\n    ;\n    return RenderTextCmd;\n  })(RenderBeginCmd);\n  exports.RenderTextCmd = RenderTextCmd;\n  var RenderNgContentCmd = (function(_super) {\n    __extends(RenderNgContentCmd, _super);\n    function RenderNgContentCmd() {\n      _super.apply(this, arguments);\n    }\n    Object.defineProperty(RenderNgContentCmd.prototype, \"index\", {\n      get: function() {\n        return exceptions_1.unimplemented();\n      },\n      enumerable: true,\n      configurable: true\n    });\n    ;\n    Object.defineProperty(RenderNgContentCmd.prototype, \"ngContentIndex\", {\n      get: function() {\n        return exceptions_1.unimplemented();\n      },\n      enumerable: true,\n      configurable: true\n    });\n    ;\n    return RenderNgContentCmd;\n  })(RenderTemplateCmd);\n  exports.RenderNgContentCmd = RenderNgContentCmd;\n  var RenderBeginElementCmd = (function(_super) {\n    __extends(RenderBeginElementCmd, _super);\n    function RenderBeginElementCmd() {\n      _super.apply(this, arguments);\n    }\n    Object.defineProperty(RenderBeginElementCmd.prototype, \"name\", {\n      get: function() {\n        return exceptions_1.unimplemented();\n      },\n      enumerable: true,\n      configurable: true\n    });\n    ;\n    Object.defineProperty(RenderBeginElementCmd.prototype, \"attrNameAndValues\", {\n      get: function() {\n        return exceptions_1.unimplemented();\n      },\n      enumerable: true,\n      configurable: true\n    });\n    ;\n    Object.defineProperty(RenderBeginElementCmd.prototype, \"eventTargetAndNames\", {\n      get: function() {\n        return exceptions_1.unimplemented();\n      },\n      enumerable: true,\n      configurable: true\n    });\n    ;\n    return RenderBeginElementCmd;\n  })(RenderBeginCmd);\n  exports.RenderBeginElementCmd = RenderBeginElementCmd;\n  var RenderBeginComponentCmd = (function(_super) {\n    __extends(RenderBeginComponentCmd, _super);\n    function RenderBeginComponentCmd() {\n      _super.apply(this, arguments);\n    }\n    Object.defineProperty(RenderBeginComponentCmd.prototype, \"templateId\", {\n      get: function() {\n        return exceptions_1.unimplemented();\n      },\n      enumerable: true,\n      configurable: true\n    });\n    ;\n    return RenderBeginComponentCmd;\n  })(RenderBeginElementCmd);\n  exports.RenderBeginComponentCmd = RenderBeginComponentCmd;\n  var RenderEmbeddedTemplateCmd = (function(_super) {\n    __extends(RenderEmbeddedTemplateCmd, _super);\n    function RenderEmbeddedTemplateCmd() {\n      _super.apply(this, arguments);\n    }\n    Object.defineProperty(RenderEmbeddedTemplateCmd.prototype, \"isMerged\", {\n      get: function() {\n        return exceptions_1.unimplemented();\n      },\n      enumerable: true,\n      configurable: true\n    });\n    ;\n    Object.defineProperty(RenderEmbeddedTemplateCmd.prototype, \"children\", {\n      get: function() {\n        return exceptions_1.unimplemented();\n      },\n      enumerable: true,\n      configurable: true\n    });\n    ;\n    return RenderEmbeddedTemplateCmd;\n  })(RenderBeginElementCmd);\n  exports.RenderEmbeddedTemplateCmd = RenderEmbeddedTemplateCmd;\n  var RenderViewWithFragments = (function() {\n    function RenderViewWithFragments(viewRef, fragmentRefs) {\n      this.viewRef = viewRef;\n      this.fragmentRefs = fragmentRefs;\n    }\n    return RenderViewWithFragments;\n  })();\n  exports.RenderViewWithFragments = RenderViewWithFragments;\n  var RenderComponentTemplate = (function() {\n    function RenderComponentTemplate(id, shortId, encapsulation, commands, styles) {\n      this.id = id;\n      this.shortId = shortId;\n      this.encapsulation = encapsulation;\n      this.commands = commands;\n      this.styles = styles;\n    }\n    return RenderComponentTemplate;\n  })();\n  exports.RenderComponentTemplate = RenderComponentTemplate;\n  var Renderer = (function() {\n    function Renderer() {}\n    return Renderer;\n  })();\n  exports.Renderer = Renderer;\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"angular2/src/core/pipes/pipe_provider\", [\"angular2/src/core/di/provider\", \"angular2/src/core/di\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  var __extends = (this && this.__extends) || function(d, b) {\n    for (var p in b)\n      if (b.hasOwnProperty(p))\n        d[p] = b[p];\n    function __() {\n      this.constructor = d;\n    }\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n  };\n  var provider_1 = require(\"angular2/src/core/di/provider\");\n  var di_1 = require(\"angular2/src/core/di\");\n  var PipeProvider = (function(_super) {\n    __extends(PipeProvider, _super);\n    function PipeProvider(name, pure, key, resolvedFactories, multiBinding) {\n      _super.call(this, key, resolvedFactories, multiBinding);\n      this.name = name;\n      this.pure = pure;\n    }\n    PipeProvider.createFromType = function(type, metadata) {\n      var provider = new di_1.Provider(type, {useClass: type});\n      var rb = provider_1.resolveProvider(provider);\n      return new PipeProvider(metadata.name, metadata.pure, rb.key, rb.resolvedFactories, rb.multiProvider);\n    };\n    return PipeProvider;\n  })(provider_1.ResolvedProvider_);\n  exports.PipeProvider = PipeProvider;\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"angular2/src/core/change_detection/pipes\", [], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  var SelectedPipe = (function() {\n    function SelectedPipe(pipe, pure) {\n      this.pipe = pipe;\n      this.pure = pure;\n    }\n    return SelectedPipe;\n  })();\n  exports.SelectedPipe = SelectedPipe;\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"angular2/src/core/linker/view_ref\", [\"angular2/src/facade/lang\", \"angular2/src/facade/exceptions\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  var __extends = (this && this.__extends) || function(d, b) {\n    for (var p in b)\n      if (b.hasOwnProperty(p))\n        d[p] = b[p];\n    function __() {\n      this.constructor = d;\n    }\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n  };\n  var lang_1 = require(\"angular2/src/facade/lang\");\n  var exceptions_1 = require(\"angular2/src/facade/exceptions\");\n  function internalView(viewRef) {\n    return viewRef._view;\n  }\n  exports.internalView = internalView;\n  function internalProtoView(protoViewRef) {\n    return lang_1.isPresent(protoViewRef) ? protoViewRef._protoView : null;\n  }\n  exports.internalProtoView = internalProtoView;\n  var ViewRef = (function() {\n    function ViewRef() {}\n    Object.defineProperty(ViewRef.prototype, \"changeDetectorRef\", {\n      get: function() {\n        return exceptions_1.unimplemented();\n      },\n      set: function(value) {\n        exceptions_1.unimplemented();\n      },\n      enumerable: true,\n      configurable: true\n    });\n    return ViewRef;\n  })();\n  exports.ViewRef = ViewRef;\n  var ViewRef_ = (function(_super) {\n    __extends(ViewRef_, _super);\n    function ViewRef_(_view) {\n      _super.call(this);\n      this._changeDetectorRef = null;\n      this._view = _view;\n    }\n    Object.defineProperty(ViewRef_.prototype, \"render\", {\n      get: function() {\n        return this._view.render;\n      },\n      enumerable: true,\n      configurable: true\n    });\n    Object.defineProperty(ViewRef_.prototype, \"renderFragment\", {\n      get: function() {\n        return this._view.renderFragment;\n      },\n      enumerable: true,\n      configurable: true\n    });\n    Object.defineProperty(ViewRef_.prototype, \"changeDetectorRef\", {\n      get: function() {\n        if (this._changeDetectorRef === null) {\n          this._changeDetectorRef = this._view.changeDetector.ref;\n        }\n        return this._changeDetectorRef;\n      },\n      enumerable: true,\n      configurable: true\n    });\n    ViewRef_.prototype.setLocal = function(variableName, value) {\n      this._view.setLocal(variableName, value);\n    };\n    return ViewRef_;\n  })(ViewRef);\n  exports.ViewRef_ = ViewRef_;\n  var ProtoViewRef = (function() {\n    function ProtoViewRef() {}\n    return ProtoViewRef;\n  })();\n  exports.ProtoViewRef = ProtoViewRef;\n  var ProtoViewRef_ = (function(_super) {\n    __extends(ProtoViewRef_, _super);\n    function ProtoViewRef_(_protoView) {\n      _super.call(this);\n      this._protoView = _protoView;\n    }\n    return ProtoViewRef_;\n  })(ProtoViewRef);\n  exports.ProtoViewRef_ = ProtoViewRef_;\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"angular2/src/core/render/dom/util\", [\"angular2/src/facade/lang\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  var lang_1 = require(\"angular2/src/facade/lang\");\n  var CAMEL_CASE_REGEXP = /([A-Z])/g;\n  var DASH_CASE_REGEXP = /-([a-z])/g;\n  function camelCaseToDashCase(input) {\n    return lang_1.StringWrapper.replaceAllMapped(input, CAMEL_CASE_REGEXP, function(m) {\n      return '-' + m[1].toLowerCase();\n    });\n  }\n  exports.camelCaseToDashCase = camelCaseToDashCase;\n  function dashCaseToCamelCase(input) {\n    return lang_1.StringWrapper.replaceAllMapped(input, DASH_CASE_REGEXP, function(m) {\n      return m[1].toUpperCase();\n    });\n  }\n  exports.dashCaseToCamelCase = dashCaseToCamelCase;\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"angular2/src/core/linker/element_binder\", [\"angular2/src/facade/lang\", \"angular2/src/facade/exceptions\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  var lang_1 = require(\"angular2/src/facade/lang\");\n  var exceptions_1 = require(\"angular2/src/facade/exceptions\");\n  var ElementBinder = (function() {\n    function ElementBinder(index, parent, distanceToParent, protoElementInjector, componentDirective, nestedProtoView) {\n      this.index = index;\n      this.parent = parent;\n      this.distanceToParent = distanceToParent;\n      this.protoElementInjector = protoElementInjector;\n      this.componentDirective = componentDirective;\n      this.nestedProtoView = nestedProtoView;\n      if (lang_1.isBlank(index)) {\n        throw new exceptions_1.BaseException('null index not allowed.');\n      }\n    }\n    return ElementBinder;\n  })();\n  exports.ElementBinder = ElementBinder;\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"angular2/src/core/linker/element_ref\", [\"angular2/src/facade/exceptions\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  var __extends = (this && this.__extends) || function(d, b) {\n    for (var p in b)\n      if (b.hasOwnProperty(p))\n        d[p] = b[p];\n    function __() {\n      this.constructor = d;\n    }\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n  };\n  var exceptions_1 = require(\"angular2/src/facade/exceptions\");\n  var ElementRef = (function() {\n    function ElementRef() {}\n    Object.defineProperty(ElementRef.prototype, \"nativeElement\", {\n      get: function() {\n        return exceptions_1.unimplemented();\n      },\n      enumerable: true,\n      configurable: true\n    });\n    ;\n    Object.defineProperty(ElementRef.prototype, \"renderView\", {\n      get: function() {\n        return exceptions_1.unimplemented();\n      },\n      enumerable: true,\n      configurable: true\n    });\n    return ElementRef;\n  })();\n  exports.ElementRef = ElementRef;\n  var ElementRef_ = (function(_super) {\n    __extends(ElementRef_, _super);\n    function ElementRef_(parentView, boundElementIndex, _renderer) {\n      _super.call(this);\n      this.parentView = parentView;\n      this.boundElementIndex = boundElementIndex;\n      this._renderer = _renderer;\n    }\n    Object.defineProperty(ElementRef_.prototype, \"renderView\", {\n      get: function() {\n        return this.parentView.render;\n      },\n      set: function(value) {\n        exceptions_1.unimplemented();\n      },\n      enumerable: true,\n      configurable: true\n    });\n    Object.defineProperty(ElementRef_.prototype, \"nativeElement\", {\n      get: function() {\n        return this._renderer.getNativeElementSync(this);\n      },\n      enumerable: true,\n      configurable: true\n    });\n    return ElementRef_;\n  })(ElementRef);\n  exports.ElementRef_ = ElementRef_;\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"angular2/src/core/linker/template_ref\", [\"angular2/src/core/linker/view_ref\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  var __extends = (this && this.__extends) || function(d, b) {\n    for (var p in b)\n      if (b.hasOwnProperty(p))\n        d[p] = b[p];\n    function __() {\n      this.constructor = d;\n    }\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n  };\n  var view_ref_1 = require(\"angular2/src/core/linker/view_ref\");\n  var TemplateRef = (function() {\n    function TemplateRef() {}\n    return TemplateRef;\n  })();\n  exports.TemplateRef = TemplateRef;\n  var TemplateRef_ = (function(_super) {\n    __extends(TemplateRef_, _super);\n    function TemplateRef_(elementRef) {\n      _super.call(this);\n      this.elementRef = elementRef;\n    }\n    TemplateRef_.prototype._getProtoView = function() {\n      var elementRef = this.elementRef;\n      var parentView = view_ref_1.internalView(elementRef.parentView);\n      return parentView.proto.elementBinders[elementRef.boundElementIndex - parentView.elementOffset].nestedProtoView;\n    };\n    Object.defineProperty(TemplateRef_.prototype, \"protoViewRef\", {\n      get: function() {\n        return this._getProtoView().ref;\n      },\n      enumerable: true,\n      configurable: true\n    });\n    TemplateRef_.prototype.hasLocal = function(name) {\n      return this._getProtoView().templateVariableBindings.has(name);\n    };\n    return TemplateRef_;\n  })(TemplateRef);\n  exports.TemplateRef_ = TemplateRef_;\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"angular2/src/core/linker/view_pool\", [\"angular2/src/core/di\", \"angular2/src/facade/lang\", \"angular2/src/facade/collection\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  var __decorate = (this && this.__decorate) || function(decorators, target, key, desc) {\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\")\n      return Reflect.decorate(decorators, target, key, desc);\n    switch (arguments.length) {\n      case 2:\n        return decorators.reduceRight(function(o, d) {\n          return (d && d(o)) || o;\n        }, target);\n      case 3:\n        return decorators.reduceRight(function(o, d) {\n          return (d && d(target, key)), void 0;\n        }, void 0);\n      case 4:\n        return decorators.reduceRight(function(o, d) {\n          return (d && d(target, key, o)) || o;\n        }, desc);\n    }\n  };\n  var __metadata = (this && this.__metadata) || function(k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\")\n      return Reflect.metadata(k, v);\n  };\n  var __param = (this && this.__param) || function(paramIndex, decorator) {\n    return function(target, key) {\n      decorator(target, key, paramIndex);\n    };\n  };\n  var di_1 = require(\"angular2/src/core/di\");\n  var lang_1 = require(\"angular2/src/facade/lang\");\n  var collection_1 = require(\"angular2/src/facade/collection\");\n  exports.APP_VIEW_POOL_CAPACITY = lang_1.CONST_EXPR(new di_1.OpaqueToken('AppViewPool.viewPoolCapacity'));\n  var AppViewPool = (function() {\n    function AppViewPool(poolCapacityPerProtoView) {\n      this._pooledViewsPerProtoView = new collection_1.Map();\n      this._poolCapacityPerProtoView = poolCapacityPerProtoView;\n    }\n    AppViewPool.prototype.getView = function(protoView) {\n      var pooledViews = this._pooledViewsPerProtoView.get(protoView);\n      if (lang_1.isPresent(pooledViews) && pooledViews.length > 0) {\n        return pooledViews.pop();\n      }\n      return null;\n    };\n    AppViewPool.prototype.returnView = function(view) {\n      var protoView = view.proto;\n      var pooledViews = this._pooledViewsPerProtoView.get(protoView);\n      if (lang_1.isBlank(pooledViews)) {\n        pooledViews = [];\n        this._pooledViewsPerProtoView.set(protoView, pooledViews);\n      }\n      var haveRemainingCapacity = pooledViews.length < this._poolCapacityPerProtoView;\n      if (haveRemainingCapacity) {\n        pooledViews.push(view);\n      }\n      return haveRemainingCapacity;\n    };\n    AppViewPool = __decorate([di_1.Injectable(), __param(0, di_1.Inject(exports.APP_VIEW_POOL_CAPACITY)), __metadata('design:paramtypes', [Object])], AppViewPool);\n    return AppViewPool;\n  })();\n  exports.AppViewPool = AppViewPool;\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"angular2/src/core/linker/view_listener\", [\"angular2/src/core/di\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  var __decorate = (this && this.__decorate) || function(decorators, target, key, desc) {\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\")\n      return Reflect.decorate(decorators, target, key, desc);\n    switch (arguments.length) {\n      case 2:\n        return decorators.reduceRight(function(o, d) {\n          return (d && d(o)) || o;\n        }, target);\n      case 3:\n        return decorators.reduceRight(function(o, d) {\n          return (d && d(target, key)), void 0;\n        }, void 0);\n      case 4:\n        return decorators.reduceRight(function(o, d) {\n          return (d && d(target, key, o)) || o;\n        }, desc);\n    }\n  };\n  var __metadata = (this && this.__metadata) || function(k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\")\n      return Reflect.metadata(k, v);\n  };\n  var di_1 = require(\"angular2/src/core/di\");\n  var AppViewListener = (function() {\n    function AppViewListener() {}\n    AppViewListener.prototype.onViewCreated = function(view) {};\n    AppViewListener.prototype.onViewDestroyed = function(view) {};\n    AppViewListener = __decorate([di_1.Injectable(), __metadata('design:paramtypes', [])], AppViewListener);\n    return AppViewListener;\n  })();\n  exports.AppViewListener = AppViewListener;\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"angular2/src/core/linker/view_container_ref\", [\"angular2/src/facade/collection\", \"angular2/src/facade/exceptions\", \"angular2/src/facade/lang\", \"angular2/src/core/linker/view_ref\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  var __extends = (this && this.__extends) || function(d, b) {\n    for (var p in b)\n      if (b.hasOwnProperty(p))\n        d[p] = b[p];\n    function __() {\n      this.constructor = d;\n    }\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n  };\n  var collection_1 = require(\"angular2/src/facade/collection\");\n  var exceptions_1 = require(\"angular2/src/facade/exceptions\");\n  var lang_1 = require(\"angular2/src/facade/lang\");\n  var view_ref_1 = require(\"angular2/src/core/linker/view_ref\");\n  var ViewContainerRef = (function() {\n    function ViewContainerRef() {}\n    ViewContainerRef.prototype.clear = function() {\n      for (var i = this.length - 1; i >= 0; i--) {\n        this.remove(i);\n      }\n    };\n    Object.defineProperty(ViewContainerRef.prototype, \"length\", {\n      get: function() {\n        return exceptions_1.unimplemented();\n      },\n      enumerable: true,\n      configurable: true\n    });\n    ;\n    return ViewContainerRef;\n  })();\n  exports.ViewContainerRef = ViewContainerRef;\n  var ViewContainerRef_ = (function(_super) {\n    __extends(ViewContainerRef_, _super);\n    function ViewContainerRef_(viewManager, element) {\n      _super.call(this);\n      this.viewManager = viewManager;\n      this.element = element;\n    }\n    ViewContainerRef_.prototype._getViews = function() {\n      var element = this.element;\n      var vc = view_ref_1.internalView(element.parentView).viewContainers[element.boundElementIndex];\n      return lang_1.isPresent(vc) ? vc.views : [];\n    };\n    ViewContainerRef_.prototype.get = function(index) {\n      return this._getViews()[index].ref;\n    };\n    Object.defineProperty(ViewContainerRef_.prototype, \"length\", {\n      get: function() {\n        return this._getViews().length;\n      },\n      enumerable: true,\n      configurable: true\n    });\n    ViewContainerRef_.prototype.createEmbeddedView = function(templateRef, index) {\n      if (index === void 0) {\n        index = -1;\n      }\n      if (index == -1)\n        index = this.length;\n      return this.viewManager.createEmbeddedViewInContainer(this.element, index, templateRef);\n    };\n    ViewContainerRef_.prototype.createHostView = function(protoViewRef, index, dynamicallyCreatedProviders) {\n      if (protoViewRef === void 0) {\n        protoViewRef = null;\n      }\n      if (index === void 0) {\n        index = -1;\n      }\n      if (dynamicallyCreatedProviders === void 0) {\n        dynamicallyCreatedProviders = null;\n      }\n      if (index == -1)\n        index = this.length;\n      return this.viewManager.createHostViewInContainer(this.element, index, protoViewRef, dynamicallyCreatedProviders);\n    };\n    ViewContainerRef_.prototype.insert = function(viewRef, index) {\n      if (index === void 0) {\n        index = -1;\n      }\n      if (index == -1)\n        index = this.length;\n      return this.viewManager.attachViewInContainer(this.element, index, viewRef);\n    };\n    ViewContainerRef_.prototype.indexOf = function(viewRef) {\n      return collection_1.ListWrapper.indexOf(this._getViews(), view_ref_1.internalView(viewRef));\n    };\n    ViewContainerRef_.prototype.remove = function(index) {\n      if (index === void 0) {\n        index = -1;\n      }\n      if (index == -1)\n        index = this.length - 1;\n      this.viewManager.destroyViewInContainer(this.element, index);\n    };\n    ViewContainerRef_.prototype.detach = function(index) {\n      if (index === void 0) {\n        index = -1;\n      }\n      if (index == -1)\n        index = this.length - 1;\n      return this.viewManager.detachViewInContainer(this.element, index);\n    };\n    return ViewContainerRef_;\n  })(ViewContainerRef);\n  exports.ViewContainerRef_ = ViewContainerRef_;\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"angular2/src/core/linker/interfaces\", [], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  (function(LifecycleHooks) {\n    LifecycleHooks[LifecycleHooks[\"OnInit\"] = 0] = \"OnInit\";\n    LifecycleHooks[LifecycleHooks[\"OnDestroy\"] = 1] = \"OnDestroy\";\n    LifecycleHooks[LifecycleHooks[\"DoCheck\"] = 2] = \"DoCheck\";\n    LifecycleHooks[LifecycleHooks[\"OnChanges\"] = 3] = \"OnChanges\";\n    LifecycleHooks[LifecycleHooks[\"AfterContentInit\"] = 4] = \"AfterContentInit\";\n    LifecycleHooks[LifecycleHooks[\"AfterContentChecked\"] = 5] = \"AfterContentChecked\";\n    LifecycleHooks[LifecycleHooks[\"AfterViewInit\"] = 6] = \"AfterViewInit\";\n    LifecycleHooks[LifecycleHooks[\"AfterViewChecked\"] = 7] = \"AfterViewChecked\";\n  })(exports.LifecycleHooks || (exports.LifecycleHooks = {}));\n  var LifecycleHooks = exports.LifecycleHooks;\n  exports.LIFECYCLE_HOOKS_VALUES = [LifecycleHooks.OnInit, LifecycleHooks.OnDestroy, LifecycleHooks.DoCheck, LifecycleHooks.OnChanges, LifecycleHooks.AfterContentInit, LifecycleHooks.AfterContentChecked, LifecycleHooks.AfterViewInit, LifecycleHooks.AfterViewChecked];\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"angular2/src/core/linker/query_list\", [\"angular2/src/facade/collection\", \"angular2/src/facade/lang\", \"angular2/src/facade/async\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  var collection_1 = require(\"angular2/src/facade/collection\");\n  var lang_1 = require(\"angular2/src/facade/lang\");\n  var async_1 = require(\"angular2/src/facade/async\");\n  var QueryList = (function() {\n    function QueryList() {\n      this._results = [];\n      this._emitter = new async_1.EventEmitter();\n    }\n    Object.defineProperty(QueryList.prototype, \"changes\", {\n      get: function() {\n        return this._emitter;\n      },\n      enumerable: true,\n      configurable: true\n    });\n    Object.defineProperty(QueryList.prototype, \"length\", {\n      get: function() {\n        return this._results.length;\n      },\n      enumerable: true,\n      configurable: true\n    });\n    Object.defineProperty(QueryList.prototype, \"first\", {\n      get: function() {\n        return collection_1.ListWrapper.first(this._results);\n      },\n      enumerable: true,\n      configurable: true\n    });\n    Object.defineProperty(QueryList.prototype, \"last\", {\n      get: function() {\n        return collection_1.ListWrapper.last(this._results);\n      },\n      enumerable: true,\n      configurable: true\n    });\n    QueryList.prototype.map = function(fn) {\n      return this._results.map(fn);\n    };\n    QueryList.prototype.filter = function(fn) {\n      return this._results.filter(fn);\n    };\n    QueryList.prototype.reduce = function(fn, init) {\n      return this._results.reduce(fn, init);\n    };\n    QueryList.prototype.toArray = function() {\n      return collection_1.ListWrapper.clone(this._results);\n    };\n    QueryList.prototype[lang_1.getSymbolIterator()] = function() {\n      return this._results[lang_1.getSymbolIterator()]();\n    };\n    QueryList.prototype.toString = function() {\n      return this._results.toString();\n    };\n    QueryList.prototype.reset = function(res) {\n      this._results = res;\n    };\n    QueryList.prototype.notifyOnChanges = function() {\n      this._emitter.next(this);\n    };\n    return QueryList;\n  })();\n  exports.QueryList = QueryList;\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"angular2/src/core/linker/event_config\", [], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  exports.EVENT_TARGET_SEPARATOR = ':';\n  var EventConfig = (function() {\n    function EventConfig(fieldName, eventName, isLongForm) {\n      this.fieldName = fieldName;\n      this.eventName = eventName;\n      this.isLongForm = isLongForm;\n    }\n    EventConfig.parse = function(eventConfig) {\n      var fieldName = eventConfig,\n          eventName = eventConfig,\n          isLongForm = false;\n      var separatorIdx = eventConfig.indexOf(exports.EVENT_TARGET_SEPARATOR);\n      if (separatorIdx > -1) {\n        fieldName = eventConfig.substring(0, separatorIdx).trim();\n        eventName = eventConfig.substring(separatorIdx + 1).trim();\n        isLongForm = true;\n      }\n      return new EventConfig(fieldName, eventName, isLongForm);\n    };\n    EventConfig.prototype.getFullName = function() {\n      return this.isLongForm ? \"\" + this.fieldName + exports.EVENT_TARGET_SEPARATOR + this.eventName : this.eventName;\n    };\n    return EventConfig;\n  })();\n  exports.EventConfig = EventConfig;\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"angular2/src/core/linker/pipe_resolver\", [\"angular2/src/core/di\", \"angular2/src/facade/lang\", \"angular2/src/facade/exceptions\", \"angular2/src/core/metadata\", \"angular2/src/core/reflection/reflection\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  var __decorate = (this && this.__decorate) || function(decorators, target, key, desc) {\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\")\n      return Reflect.decorate(decorators, target, key, desc);\n    switch (arguments.length) {\n      case 2:\n        return decorators.reduceRight(function(o, d) {\n          return (d && d(o)) || o;\n        }, target);\n      case 3:\n        return decorators.reduceRight(function(o, d) {\n          return (d && d(target, key)), void 0;\n        }, void 0);\n      case 4:\n        return decorators.reduceRight(function(o, d) {\n          return (d && d(target, key, o)) || o;\n        }, desc);\n    }\n  };\n  var __metadata = (this && this.__metadata) || function(k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\")\n      return Reflect.metadata(k, v);\n  };\n  var di_1 = require(\"angular2/src/core/di\");\n  var lang_1 = require(\"angular2/src/facade/lang\");\n  var exceptions_1 = require(\"angular2/src/facade/exceptions\");\n  var metadata_1 = require(\"angular2/src/core/metadata\");\n  var reflection_1 = require(\"angular2/src/core/reflection/reflection\");\n  function _isPipeMetadata(type) {\n    return type instanceof metadata_1.PipeMetadata;\n  }\n  var PipeResolver = (function() {\n    function PipeResolver() {}\n    PipeResolver.prototype.resolve = function(type) {\n      var metas = reflection_1.reflector.annotations(di_1.resolveForwardRef(type));\n      if (lang_1.isPresent(metas)) {\n        var annotation = metas.find(_isPipeMetadata);\n        if (lang_1.isPresent(annotation)) {\n          return annotation;\n        }\n      }\n      throw new exceptions_1.BaseException(\"No Pipe decorator found on \" + lang_1.stringify(type));\n    };\n    PipeResolver = __decorate([di_1.Injectable(), __metadata('design:paramtypes', [])], PipeResolver);\n    return PipeResolver;\n  })();\n  exports.PipeResolver = PipeResolver;\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"angular2/src/core/platform_directives_and_pipes\", [\"angular2/src/core/di\", \"angular2/src/facade/lang\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  var di_1 = require(\"angular2/src/core/di\");\n  var lang_1 = require(\"angular2/src/facade/lang\");\n  exports.PLATFORM_DIRECTIVES = lang_1.CONST_EXPR(new di_1.OpaqueToken(\"Platform Directives\"));\n  exports.PLATFORM_PIPES = lang_1.CONST_EXPR(new di_1.OpaqueToken(\"Platform Pipes\"));\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"angular2/src/core/dom/dom_adapter\", [\"angular2/src/facade/lang\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  var lang_1 = require(\"angular2/src/facade/lang\");\n  function setRootDomAdapter(adapter) {\n    if (lang_1.isBlank(exports.DOM)) {\n      exports.DOM = adapter;\n    }\n  }\n  exports.setRootDomAdapter = setRootDomAdapter;\n  var DomAdapter = (function() {\n    function DomAdapter() {}\n    return DomAdapter;\n  })();\n  exports.DomAdapter = DomAdapter;\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"angular2/src/core/render/dom/dom_tokens\", [\"angular2/src/core/di\", \"angular2/src/facade/lang\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  var di_1 = require(\"angular2/src/core/di\");\n  var lang_1 = require(\"angular2/src/facade/lang\");\n  exports.DOCUMENT = lang_1.CONST_EXPR(new di_1.OpaqueToken('DocumentToken'));\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"angular2/src/animate/css_animation_options\", [], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  var CssAnimationOptions = (function() {\n    function CssAnimationOptions() {\n      this.classesToAdd = [];\n      this.classesToRemove = [];\n      this.animationClasses = [];\n    }\n    return CssAnimationOptions;\n  })();\n  exports.CssAnimationOptions = CssAnimationOptions;\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"angular2/src/facade/math\", [\"angular2/src/facade/lang\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  var lang_1 = require(\"angular2/src/facade/lang\");\n  exports.Math = lang_1.global.Math;\n  exports.NaN = typeof exports.NaN;\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"angular2/src/animate/browser_details\", [\"angular2/src/core/di\", \"angular2/src/facade/math\", \"angular2/src/core/dom/dom_adapter\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  var __decorate = (this && this.__decorate) || function(decorators, target, key, desc) {\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\")\n      return Reflect.decorate(decorators, target, key, desc);\n    switch (arguments.length) {\n      case 2:\n        return decorators.reduceRight(function(o, d) {\n          return (d && d(o)) || o;\n        }, target);\n      case 3:\n        return decorators.reduceRight(function(o, d) {\n          return (d && d(target, key)), void 0;\n        }, void 0);\n      case 4:\n        return decorators.reduceRight(function(o, d) {\n          return (d && d(target, key, o)) || o;\n        }, desc);\n    }\n  };\n  var __metadata = (this && this.__metadata) || function(k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\")\n      return Reflect.metadata(k, v);\n  };\n  var di_1 = require(\"angular2/src/core/di\");\n  var math_1 = require(\"angular2/src/facade/math\");\n  var dom_adapter_1 = require(\"angular2/src/core/dom/dom_adapter\");\n  var BrowserDetails = (function() {\n    function BrowserDetails() {\n      this.elapsedTimeIncludesDelay = false;\n      this.doesElapsedTimeIncludesDelay();\n    }\n    BrowserDetails.prototype.doesElapsedTimeIncludesDelay = function() {\n      var _this = this;\n      var div = dom_adapter_1.DOM.createElement('div');\n      dom_adapter_1.DOM.setAttribute(div, 'style', \"position: absolute; top: -9999px; left: -9999px; width: 1px;\\n      height: 1px; transition: all 1ms linear 1ms;\");\n      this.raf(function(timestamp) {\n        dom_adapter_1.DOM.on(div, 'transitionend', function(event) {\n          var elapsed = math_1.Math.round(event.elapsedTime * 1000);\n          _this.elapsedTimeIncludesDelay = elapsed == 2;\n          dom_adapter_1.DOM.remove(div);\n        });\n        dom_adapter_1.DOM.setStyle(div, 'width', '2px');\n      }, 2);\n    };\n    BrowserDetails.prototype.raf = function(callback, frames) {\n      if (frames === void 0) {\n        frames = 1;\n      }\n      var queue = new RafQueue(callback, frames);\n      return function() {\n        return queue.cancel();\n      };\n    };\n    BrowserDetails = __decorate([di_1.Injectable(), __metadata('design:paramtypes', [])], BrowserDetails);\n    return BrowserDetails;\n  })();\n  exports.BrowserDetails = BrowserDetails;\n  var RafQueue = (function() {\n    function RafQueue(callback, frames) {\n      this.callback = callback;\n      this.frames = frames;\n      this._raf();\n    }\n    RafQueue.prototype._raf = function() {\n      var _this = this;\n      this.currentFrameId = dom_adapter_1.DOM.requestAnimationFrame(function(timestamp) {\n        return _this._nextFrame(timestamp);\n      });\n    };\n    RafQueue.prototype._nextFrame = function(timestamp) {\n      this.frames--;\n      if (this.frames > 0) {\n        this._raf();\n      } else {\n        this.callback(timestamp);\n      }\n    };\n    RafQueue.prototype.cancel = function() {\n      dom_adapter_1.DOM.cancelAnimationFrame(this.currentFrameId);\n      this.currentFrameId = null;\n    };\n    return RafQueue;\n  })();\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"angular2/src/core/zone/ng_zone\", [\"angular2/src/facade/collection\", \"angular2/src/facade/lang\", \"angular2/src/facade/async\", \"angular2/src/core/profile/profile\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  var collection_1 = require(\"angular2/src/facade/collection\");\n  var lang_1 = require(\"angular2/src/facade/lang\");\n  var async_1 = require(\"angular2/src/facade/async\");\n  var profile_1 = require(\"angular2/src/core/profile/profile\");\n  var NgZoneError = (function() {\n    function NgZoneError(error, stackTrace) {\n      this.error = error;\n      this.stackTrace = stackTrace;\n    }\n    return NgZoneError;\n  })();\n  exports.NgZoneError = NgZoneError;\n  var NgZone = (function() {\n    function NgZone(_a) {\n      var enableLongStackTrace = _a.enableLongStackTrace;\n      this._runScope = profile_1.wtfCreateScope(\"NgZone#run()\");\n      this._microtaskScope = profile_1.wtfCreateScope(\"NgZone#microtask()\");\n      this._pendingMicrotasks = 0;\n      this._hasExecutedCodeInInnerZone = false;\n      this._nestedRun = 0;\n      this._inVmTurnDone = false;\n      this._pendingTimeouts = [];\n      if (lang_1.global.zone) {\n        this._disabled = false;\n        this._mountZone = lang_1.global.zone;\n        this._innerZone = this._createInnerZone(this._mountZone, enableLongStackTrace);\n      } else {\n        this._disabled = true;\n        this._mountZone = null;\n      }\n      this._onTurnStartEvents = new async_1.EventEmitter(false);\n      this._onTurnDoneEvents = new async_1.EventEmitter(false);\n      this._onEventDoneEvents = new async_1.EventEmitter(false);\n      this._onErrorEvents = new async_1.EventEmitter(false);\n    }\n    NgZone.prototype.overrideOnTurnStart = function(onTurnStartHook) {\n      this._onTurnStart = lang_1.normalizeBlank(onTurnStartHook);\n    };\n    Object.defineProperty(NgZone.prototype, \"onTurnStart\", {\n      get: function() {\n        return this._onTurnStartEvents;\n      },\n      enumerable: true,\n      configurable: true\n    });\n    NgZone.prototype._notifyOnTurnStart = function(parentRun) {\n      var _this = this;\n      parentRun.call(this._innerZone, function() {\n        _this._onTurnStartEvents.next(null);\n      });\n    };\n    NgZone.prototype.overrideOnTurnDone = function(onTurnDoneHook) {\n      this._onTurnDone = lang_1.normalizeBlank(onTurnDoneHook);\n    };\n    Object.defineProperty(NgZone.prototype, \"onTurnDone\", {\n      get: function() {\n        return this._onTurnDoneEvents;\n      },\n      enumerable: true,\n      configurable: true\n    });\n    NgZone.prototype._notifyOnTurnDone = function(parentRun) {\n      var _this = this;\n      parentRun.call(this._innerZone, function() {\n        _this._onTurnDoneEvents.next(null);\n      });\n    };\n    NgZone.prototype.overrideOnEventDone = function(onEventDoneFn, opt_waitForAsync) {\n      var _this = this;\n      if (opt_waitForAsync === void 0) {\n        opt_waitForAsync = false;\n      }\n      var normalizedOnEventDone = lang_1.normalizeBlank(onEventDoneFn);\n      if (opt_waitForAsync) {\n        this._onEventDone = function() {\n          if (!_this._pendingTimeouts.length) {\n            normalizedOnEventDone();\n          }\n        };\n      } else {\n        this._onEventDone = normalizedOnEventDone;\n      }\n    };\n    Object.defineProperty(NgZone.prototype, \"onEventDone\", {\n      get: function() {\n        return this._onEventDoneEvents;\n      },\n      enumerable: true,\n      configurable: true\n    });\n    NgZone.prototype._notifyOnEventDone = function() {\n      var _this = this;\n      this.runOutsideAngular(function() {\n        _this._onEventDoneEvents.next(null);\n      });\n    };\n    Object.defineProperty(NgZone.prototype, \"hasPendingMicrotasks\", {\n      get: function() {\n        return this._pendingMicrotasks > 0;\n      },\n      enumerable: true,\n      configurable: true\n    });\n    Object.defineProperty(NgZone.prototype, \"hasPendingTimers\", {\n      get: function() {\n        return this._pendingTimeouts.length > 0;\n      },\n      enumerable: true,\n      configurable: true\n    });\n    Object.defineProperty(NgZone.prototype, \"hasPendingAsyncTasks\", {\n      get: function() {\n        return this.hasPendingMicrotasks || this.hasPendingTimers;\n      },\n      enumerable: true,\n      configurable: true\n    });\n    NgZone.prototype.overrideOnErrorHandler = function(errorHandler) {\n      this._onErrorHandler = lang_1.normalizeBlank(errorHandler);\n    };\n    Object.defineProperty(NgZone.prototype, \"onError\", {\n      get: function() {\n        return this._onErrorEvents;\n      },\n      enumerable: true,\n      configurable: true\n    });\n    NgZone.prototype.run = function(fn) {\n      if (this._disabled) {\n        return fn();\n      } else {\n        var s = this._runScope();\n        try {\n          return this._innerZone.run(fn);\n        } finally {\n          profile_1.wtfLeave(s);\n        }\n      }\n    };\n    NgZone.prototype.runOutsideAngular = function(fn) {\n      if (this._disabled) {\n        return fn();\n      } else {\n        return this._mountZone.run(fn);\n      }\n    };\n    NgZone.prototype._createInnerZone = function(zone, enableLongStackTrace) {\n      var microtaskScope = this._microtaskScope;\n      var ngZone = this;\n      var errorHandling;\n      if (enableLongStackTrace) {\n        errorHandling = collection_1.StringMapWrapper.merge(Zone.longStackTraceZone, {onError: function(e) {\n            ngZone._notifyOnError(this, e);\n          }});\n      } else {\n        errorHandling = {onError: function(e) {\n            ngZone._notifyOnError(this, e);\n          }};\n      }\n      return zone.fork(errorHandling).fork({\n        '$run': function(parentRun) {\n          return function() {\n            try {\n              ngZone._nestedRun++;\n              if (!ngZone._hasExecutedCodeInInnerZone) {\n                ngZone._hasExecutedCodeInInnerZone = true;\n                ngZone._notifyOnTurnStart(parentRun);\n                if (ngZone._onTurnStart) {\n                  parentRun.call(ngZone._innerZone, ngZone._onTurnStart);\n                }\n              }\n              return parentRun.apply(this, arguments);\n            } finally {\n              ngZone._nestedRun--;\n              if (ngZone._pendingMicrotasks == 0 && ngZone._nestedRun == 0 && !this._inVmTurnDone) {\n                if (ngZone._hasExecutedCodeInInnerZone) {\n                  try {\n                    this._inVmTurnDone = true;\n                    ngZone._notifyOnTurnDone(parentRun);\n                    if (ngZone._onTurnDone) {\n                      parentRun.call(ngZone._innerZone, ngZone._onTurnDone);\n                    }\n                  } finally {\n                    this._inVmTurnDone = false;\n                    ngZone._hasExecutedCodeInInnerZone = false;\n                  }\n                }\n                if (ngZone._pendingMicrotasks === 0) {\n                  ngZone._notifyOnEventDone();\n                  if (lang_1.isPresent(ngZone._onEventDone)) {\n                    ngZone.runOutsideAngular(ngZone._onEventDone);\n                  }\n                }\n              }\n            }\n          };\n        },\n        '$scheduleMicrotask': function(parentScheduleMicrotask) {\n          return function(fn) {\n            ngZone._pendingMicrotasks++;\n            var microtask = function() {\n              var s = microtaskScope();\n              try {\n                fn();\n              } finally {\n                ngZone._pendingMicrotasks--;\n                profile_1.wtfLeave(s);\n              }\n            };\n            parentScheduleMicrotask.call(this, microtask);\n          };\n        },\n        '$setTimeout': function(parentSetTimeout) {\n          return function(fn, delay) {\n            var args = [];\n            for (var _i = 2; _i < arguments.length; _i++) {\n              args[_i - 2] = arguments[_i];\n            }\n            var id;\n            var cb = function() {\n              fn();\n              collection_1.ListWrapper.remove(ngZone._pendingTimeouts, id);\n            };\n            id = parentSetTimeout(cb, delay, args);\n            ngZone._pendingTimeouts.push(id);\n            return id;\n          };\n        },\n        '$clearTimeout': function(parentClearTimeout) {\n          return function(id) {\n            parentClearTimeout(id);\n            collection_1.ListWrapper.remove(ngZone._pendingTimeouts, id);\n          };\n        },\n        _innerZone: true\n      });\n    };\n    NgZone.prototype._notifyOnError = function(zone, e) {\n      if (lang_1.isPresent(this._onErrorHandler) || async_1.ObservableWrapper.hasSubscribers(this._onErrorEvents)) {\n        var trace = [lang_1.normalizeBlank(e.stack)];\n        while (zone && zone.constructedAtException) {\n          trace.push(zone.constructedAtException.get());\n          zone = zone.parent;\n        }\n        if (async_1.ObservableWrapper.hasSubscribers(this._onErrorEvents)) {\n          async_1.ObservableWrapper.callNext(this._onErrorEvents, new NgZoneError(e, trace));\n        }\n        if (lang_1.isPresent(this._onErrorHandler)) {\n          this._onErrorHandler(e, trace);\n        }\n      } else {\n        console.log('## _notifyOnError ##');\n        console.log(e.stack);\n        throw e;\n      }\n    };\n    return NgZone;\n  })();\n  exports.NgZone = NgZone;\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"angular2/src/core/render/view\", [\"angular2/src/facade/exceptions\", \"angular2/src/facade/collection\", \"angular2/src/facade/lang\", \"angular2/src/core/render/api\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  var __extends = (this && this.__extends) || function(d, b) {\n    for (var p in b)\n      if (b.hasOwnProperty(p))\n        d[p] = b[p];\n    function __() {\n      this.constructor = d;\n    }\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n  };\n  var exceptions_1 = require(\"angular2/src/facade/exceptions\");\n  var collection_1 = require(\"angular2/src/facade/collection\");\n  var lang_1 = require(\"angular2/src/facade/lang\");\n  var api_1 = require(\"angular2/src/core/render/api\");\n  var DefaultProtoViewRef = (function(_super) {\n    __extends(DefaultProtoViewRef, _super);\n    function DefaultProtoViewRef(template, cmds) {\n      _super.call(this);\n      this.template = template;\n      this.cmds = cmds;\n    }\n    return DefaultProtoViewRef;\n  })(api_1.RenderProtoViewRef);\n  exports.DefaultProtoViewRef = DefaultProtoViewRef;\n  var DefaultRenderFragmentRef = (function(_super) {\n    __extends(DefaultRenderFragmentRef, _super);\n    function DefaultRenderFragmentRef(nodes) {\n      _super.call(this);\n      this.nodes = nodes;\n    }\n    return DefaultRenderFragmentRef;\n  })(api_1.RenderFragmentRef);\n  exports.DefaultRenderFragmentRef = DefaultRenderFragmentRef;\n  var DefaultRenderView = (function(_super) {\n    __extends(DefaultRenderView, _super);\n    function DefaultRenderView(fragments, boundTextNodes, boundElements, nativeShadowRoots, globalEventAdders, rootContentInsertionPoints) {\n      _super.call(this);\n      this.fragments = fragments;\n      this.boundTextNodes = boundTextNodes;\n      this.boundElements = boundElements;\n      this.nativeShadowRoots = nativeShadowRoots;\n      this.globalEventAdders = globalEventAdders;\n      this.rootContentInsertionPoints = rootContentInsertionPoints;\n      this.hydrated = false;\n      this.eventDispatcher = null;\n      this.globalEventRemovers = null;\n    }\n    DefaultRenderView.prototype.hydrate = function() {\n      if (this.hydrated)\n        throw new exceptions_1.BaseException('The view is already hydrated.');\n      this.hydrated = true;\n      this.globalEventRemovers = collection_1.ListWrapper.createFixedSize(this.globalEventAdders.length);\n      for (var i = 0; i < this.globalEventAdders.length; i++) {\n        this.globalEventRemovers[i] = this.globalEventAdders[i]();\n      }\n    };\n    DefaultRenderView.prototype.dehydrate = function() {\n      if (!this.hydrated)\n        throw new exceptions_1.BaseException('The view is already dehydrated.');\n      for (var i = 0; i < this.globalEventRemovers.length; i++) {\n        this.globalEventRemovers[i]();\n      }\n      this.globalEventRemovers = null;\n      this.hydrated = false;\n    };\n    DefaultRenderView.prototype.setEventDispatcher = function(dispatcher) {\n      this.eventDispatcher = dispatcher;\n    };\n    DefaultRenderView.prototype.dispatchRenderEvent = function(boundElementIndex, eventName, event) {\n      var allowDefaultBehavior = true;\n      if (lang_1.isPresent(this.eventDispatcher)) {\n        var locals = new collection_1.Map();\n        locals.set('$event', event);\n        allowDefaultBehavior = this.eventDispatcher.dispatchRenderEvent(boundElementIndex, eventName, locals);\n      }\n      return allowDefaultBehavior;\n    };\n    return DefaultRenderView;\n  })(api_1.RenderViewRef);\n  exports.DefaultRenderView = DefaultRenderView;\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"angular2/src/core/render\", [\"angular2/src/core/render/render\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  var render_1 = require(\"angular2/src/core/render/render\");\n  exports.Renderer = render_1.Renderer;\n  exports.RenderViewRef = render_1.RenderViewRef;\n  exports.RenderProtoViewRef = render_1.RenderProtoViewRef;\n  exports.RenderFragmentRef = render_1.RenderFragmentRef;\n  exports.RenderViewWithFragments = render_1.RenderViewWithFragments;\n  exports.DOCUMENT = render_1.DOCUMENT;\n  exports.RenderTemplateCmd = render_1.RenderTemplateCmd;\n  exports.RenderTextCmd = render_1.RenderTextCmd;\n  exports.RenderNgContentCmd = render_1.RenderNgContentCmd;\n  exports.RenderBeginElementCmd = render_1.RenderBeginElementCmd;\n  exports.RenderBeginComponentCmd = render_1.RenderBeginComponentCmd;\n  exports.RenderEmbeddedTemplateCmd = render_1.RenderEmbeddedTemplateCmd;\n  exports.RenderBeginCmd = render_1.RenderBeginCmd;\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"angular2/src/core/application_tokens\", [\"angular2/src/core/di\", \"angular2/src/facade/lang\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  var di_1 = require(\"angular2/src/core/di\");\n  var lang_1 = require(\"angular2/src/facade/lang\");\n  exports.APP_COMPONENT_REF_PROMISE = lang_1.CONST_EXPR(new di_1.OpaqueToken('Promise<ComponentRef>'));\n  exports.APP_COMPONENT = lang_1.CONST_EXPR(new di_1.OpaqueToken('AppComponent'));\n  exports.APP_ID = lang_1.CONST_EXPR(new di_1.OpaqueToken('AppId'));\n  function _appIdRandomProviderFactory() {\n    return \"\" + _randomChar() + _randomChar() + _randomChar();\n  }\n  exports.APP_ID_RANDOM_PROVIDER = lang_1.CONST_EXPR(new di_1.Provider(exports.APP_ID, {\n    useFactory: _appIdRandomProviderFactory,\n    deps: []\n  }));\n  function _randomChar() {\n    return lang_1.StringWrapper.fromCharCode(97 + lang_1.Math.floor(lang_1.Math.random() * 25));\n  }\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"angular2/src/core/linker/dynamic_component_loader\", [\"angular2/src/core/di\", \"angular2/src/core/linker/compiler\", \"angular2/src/facade/lang\", \"angular2/src/core/linker/view_manager\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  var __extends = (this && this.__extends) || function(d, b) {\n    for (var p in b)\n      if (b.hasOwnProperty(p))\n        d[p] = b[p];\n    function __() {\n      this.constructor = d;\n    }\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n  };\n  var __decorate = (this && this.__decorate) || function(decorators, target, key, desc) {\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\")\n      return Reflect.decorate(decorators, target, key, desc);\n    switch (arguments.length) {\n      case 2:\n        return decorators.reduceRight(function(o, d) {\n          return (d && d(o)) || o;\n        }, target);\n      case 3:\n        return decorators.reduceRight(function(o, d) {\n          return (d && d(target, key)), void 0;\n        }, void 0);\n      case 4:\n        return decorators.reduceRight(function(o, d) {\n          return (d && d(target, key, o)) || o;\n        }, desc);\n    }\n  };\n  var __metadata = (this && this.__metadata) || function(k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\")\n      return Reflect.metadata(k, v);\n  };\n  var di_1 = require(\"angular2/src/core/di\");\n  var compiler_1 = require(\"angular2/src/core/linker/compiler\");\n  var lang_1 = require(\"angular2/src/facade/lang\");\n  var view_manager_1 = require(\"angular2/src/core/linker/view_manager\");\n  var ComponentRef = (function() {\n    function ComponentRef() {}\n    Object.defineProperty(ComponentRef.prototype, \"hostView\", {\n      get: function() {\n        return this.location.parentView;\n      },\n      enumerable: true,\n      configurable: true\n    });\n    Object.defineProperty(ComponentRef.prototype, \"hostComponent\", {\n      get: function() {\n        return this.instance;\n      },\n      enumerable: true,\n      configurable: true\n    });\n    return ComponentRef;\n  })();\n  exports.ComponentRef = ComponentRef;\n  var ComponentRef_ = (function(_super) {\n    __extends(ComponentRef_, _super);\n    function ComponentRef_(location, instance, componentType, injector, _dispose) {\n      _super.call(this);\n      this._dispose = _dispose;\n      this.location = location;\n      this.instance = instance;\n      this.componentType = componentType;\n      this.injector = injector;\n    }\n    Object.defineProperty(ComponentRef_.prototype, \"hostComponentType\", {\n      get: function() {\n        return this.componentType;\n      },\n      enumerable: true,\n      configurable: true\n    });\n    ComponentRef_.prototype.dispose = function() {\n      this._dispose();\n    };\n    return ComponentRef_;\n  })(ComponentRef);\n  exports.ComponentRef_ = ComponentRef_;\n  var DynamicComponentLoader = (function() {\n    function DynamicComponentLoader() {}\n    return DynamicComponentLoader;\n  })();\n  exports.DynamicComponentLoader = DynamicComponentLoader;\n  var DynamicComponentLoader_ = (function(_super) {\n    __extends(DynamicComponentLoader_, _super);\n    function DynamicComponentLoader_(_compiler, _viewManager) {\n      _super.call(this);\n      this._compiler = _compiler;\n      this._viewManager = _viewManager;\n    }\n    DynamicComponentLoader_.prototype.loadAsRoot = function(type, overrideSelector, injector, onDispose) {\n      var _this = this;\n      return this._compiler.compileInHost(type).then(function(hostProtoViewRef) {\n        var hostViewRef = _this._viewManager.createRootHostView(hostProtoViewRef, overrideSelector, injector);\n        var newLocation = _this._viewManager.getHostElement(hostViewRef);\n        var component = _this._viewManager.getComponent(newLocation);\n        var dispose = function() {\n          _this._viewManager.destroyRootHostView(hostViewRef);\n          if (lang_1.isPresent(onDispose)) {\n            onDispose();\n          }\n        };\n        return new ComponentRef_(newLocation, component, type, injector, dispose);\n      });\n    };\n    DynamicComponentLoader_.prototype.loadIntoLocation = function(type, hostLocation, anchorName, providers) {\n      if (providers === void 0) {\n        providers = null;\n      }\n      return this.loadNextToLocation(type, this._viewManager.getNamedElementInComponentView(hostLocation, anchorName), providers);\n    };\n    DynamicComponentLoader_.prototype.loadNextToLocation = function(type, location, providers) {\n      var _this = this;\n      if (providers === void 0) {\n        providers = null;\n      }\n      return this._compiler.compileInHost(type).then(function(hostProtoViewRef) {\n        var viewContainer = _this._viewManager.getViewContainer(location);\n        var hostViewRef = viewContainer.createHostView(hostProtoViewRef, viewContainer.length, providers);\n        var newLocation = _this._viewManager.getHostElement(hostViewRef);\n        var component = _this._viewManager.getComponent(newLocation);\n        var dispose = function() {\n          var index = viewContainer.indexOf(hostViewRef);\n          if (index !== -1) {\n            viewContainer.remove(index);\n          }\n        };\n        return new ComponentRef_(newLocation, component, type, null, dispose);\n      });\n    };\n    DynamicComponentLoader_ = __decorate([di_1.Injectable(), __metadata('design:paramtypes', [compiler_1.Compiler, view_manager_1.AppViewManager])], DynamicComponentLoader_);\n    return DynamicComponentLoader_;\n  })(DynamicComponentLoader);\n  exports.DynamicComponentLoader_ = DynamicComponentLoader_;\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"angular2/src/common/directives/ng_for\", [\"angular2/src/core/metadata\", \"angular2/src/core/change_detection\", \"angular2/src/core/linker\", \"angular2/src/facade/lang\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  var __decorate = (this && this.__decorate) || function(decorators, target, key, desc) {\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\")\n      return Reflect.decorate(decorators, target, key, desc);\n    switch (arguments.length) {\n      case 2:\n        return decorators.reduceRight(function(o, d) {\n          return (d && d(o)) || o;\n        }, target);\n      case 3:\n        return decorators.reduceRight(function(o, d) {\n          return (d && d(target, key)), void 0;\n        }, void 0);\n      case 4:\n        return decorators.reduceRight(function(o, d) {\n          return (d && d(target, key, o)) || o;\n        }, desc);\n    }\n  };\n  var __metadata = (this && this.__metadata) || function(k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\")\n      return Reflect.metadata(k, v);\n  };\n  var metadata_1 = require(\"angular2/src/core/metadata\");\n  var change_detection_1 = require(\"angular2/src/core/change_detection\");\n  var linker_1 = require(\"angular2/src/core/linker\");\n  var lang_1 = require(\"angular2/src/facade/lang\");\n  var NgFor = (function() {\n    function NgFor(_viewContainer, _templateRef, _iterableDiffers, _cdr) {\n      this._viewContainer = _viewContainer;\n      this._templateRef = _templateRef;\n      this._iterableDiffers = _iterableDiffers;\n      this._cdr = _cdr;\n    }\n    Object.defineProperty(NgFor.prototype, \"ngForOf\", {\n      set: function(value) {\n        this._ngForOf = value;\n        if (lang_1.isBlank(this._differ) && lang_1.isPresent(value)) {\n          this._differ = this._iterableDiffers.find(value).create(this._cdr);\n        }\n      },\n      enumerable: true,\n      configurable: true\n    });\n    Object.defineProperty(NgFor.prototype, \"ngForTemplate\", {\n      set: function(value) {\n        if (lang_1.isPresent(value)) {\n          this._templateRef = value;\n        }\n      },\n      enumerable: true,\n      configurable: true\n    });\n    NgFor.prototype.doCheck = function() {\n      if (lang_1.isPresent(this._differ)) {\n        var changes = this._differ.diff(this._ngForOf);\n        if (lang_1.isPresent(changes))\n          this._applyChanges(changes);\n      }\n    };\n    NgFor.prototype._applyChanges = function(changes) {\n      var recordViewTuples = [];\n      changes.forEachRemovedItem(function(removedRecord) {\n        return recordViewTuples.push(new RecordViewTuple(removedRecord, null));\n      });\n      changes.forEachMovedItem(function(movedRecord) {\n        return recordViewTuples.push(new RecordViewTuple(movedRecord, null));\n      });\n      var insertTuples = this._bulkRemove(recordViewTuples);\n      changes.forEachAddedItem(function(addedRecord) {\n        return insertTuples.push(new RecordViewTuple(addedRecord, null));\n      });\n      this._bulkInsert(insertTuples);\n      for (var i = 0; i < insertTuples.length; i++) {\n        this._perViewChange(insertTuples[i].view, insertTuples[i].record);\n      }\n      for (var i = 0,\n          ilen = this._viewContainer.length; i < ilen; i++) {\n        this._viewContainer.get(i).setLocal('last', i === ilen - 1);\n      }\n    };\n    NgFor.prototype._perViewChange = function(view, record) {\n      view.setLocal('\\$implicit', record.item);\n      view.setLocal('index', record.currentIndex);\n      view.setLocal('even', (record.currentIndex % 2 == 0));\n      view.setLocal('odd', (record.currentIndex % 2 == 1));\n    };\n    NgFor.prototype._bulkRemove = function(tuples) {\n      tuples.sort(function(a, b) {\n        return a.record.previousIndex - b.record.previousIndex;\n      });\n      var movedTuples = [];\n      for (var i = tuples.length - 1; i >= 0; i--) {\n        var tuple = tuples[i];\n        if (lang_1.isPresent(tuple.record.currentIndex)) {\n          tuple.view = this._viewContainer.detach(tuple.record.previousIndex);\n          movedTuples.push(tuple);\n        } else {\n          this._viewContainer.remove(tuple.record.previousIndex);\n        }\n      }\n      return movedTuples;\n    };\n    NgFor.prototype._bulkInsert = function(tuples) {\n      tuples.sort(function(a, b) {\n        return a.record.currentIndex - b.record.currentIndex;\n      });\n      for (var i = 0; i < tuples.length; i++) {\n        var tuple = tuples[i];\n        if (lang_1.isPresent(tuple.view)) {\n          this._viewContainer.insert(tuple.view, tuple.record.currentIndex);\n        } else {\n          tuple.view = this._viewContainer.createEmbeddedView(this._templateRef, tuple.record.currentIndex);\n        }\n      }\n      return tuples;\n    };\n    NgFor = __decorate([metadata_1.Directive({\n      selector: '[ng-for][ng-for-of]',\n      inputs: ['ngForOf', 'ngForTemplate']\n    }), __metadata('design:paramtypes', [linker_1.ViewContainerRef, linker_1.TemplateRef, change_detection_1.IterableDiffers, change_detection_1.ChangeDetectorRef])], NgFor);\n    return NgFor;\n  })();\n  exports.NgFor = NgFor;\n  var RecordViewTuple = (function() {\n    function RecordViewTuple(record, view) {\n      this.record = record;\n      this.view = view;\n    }\n    return RecordViewTuple;\n  })();\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"angular2/src/common/directives/ng_if\", [\"angular2/src/core/metadata\", \"angular2/src/core/linker\", \"angular2/src/facade/lang\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  var __decorate = (this && this.__decorate) || function(decorators, target, key, desc) {\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\")\n      return Reflect.decorate(decorators, target, key, desc);\n    switch (arguments.length) {\n      case 2:\n        return decorators.reduceRight(function(o, d) {\n          return (d && d(o)) || o;\n        }, target);\n      case 3:\n        return decorators.reduceRight(function(o, d) {\n          return (d && d(target, key)), void 0;\n        }, void 0);\n      case 4:\n        return decorators.reduceRight(function(o, d) {\n          return (d && d(target, key, o)) || o;\n        }, desc);\n    }\n  };\n  var __metadata = (this && this.__metadata) || function(k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\")\n      return Reflect.metadata(k, v);\n  };\n  var metadata_1 = require(\"angular2/src/core/metadata\");\n  var linker_1 = require(\"angular2/src/core/linker\");\n  var lang_1 = require(\"angular2/src/facade/lang\");\n  var NgIf = (function() {\n    function NgIf(_viewContainer, _templateRef) {\n      this._viewContainer = _viewContainer;\n      this._templateRef = _templateRef;\n      this._prevCondition = null;\n    }\n    Object.defineProperty(NgIf.prototype, \"ngIf\", {\n      set: function(newCondition) {\n        if (newCondition && (lang_1.isBlank(this._prevCondition) || !this._prevCondition)) {\n          this._prevCondition = true;\n          this._viewContainer.createEmbeddedView(this._templateRef);\n        } else if (!newCondition && (lang_1.isBlank(this._prevCondition) || this._prevCondition)) {\n          this._prevCondition = false;\n          this._viewContainer.clear();\n        }\n      },\n      enumerable: true,\n      configurable: true\n    });\n    NgIf = __decorate([metadata_1.Directive({\n      selector: '[ng-if]',\n      inputs: ['ngIf']\n    }), __metadata('design:paramtypes', [linker_1.ViewContainerRef, linker_1.TemplateRef])], NgIf);\n    return NgIf;\n  })();\n  exports.NgIf = NgIf;\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"angular2/src/common/directives/ng_style\", [\"angular2/src/core/change_detection\", \"angular2/src/core/linker\", \"angular2/src/core/metadata\", \"angular2/src/core/render\", \"angular2/src/facade/lang\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  var __decorate = (this && this.__decorate) || function(decorators, target, key, desc) {\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\")\n      return Reflect.decorate(decorators, target, key, desc);\n    switch (arguments.length) {\n      case 2:\n        return decorators.reduceRight(function(o, d) {\n          return (d && d(o)) || o;\n        }, target);\n      case 3:\n        return decorators.reduceRight(function(o, d) {\n          return (d && d(target, key)), void 0;\n        }, void 0);\n      case 4:\n        return decorators.reduceRight(function(o, d) {\n          return (d && d(target, key, o)) || o;\n        }, desc);\n    }\n  };\n  var __metadata = (this && this.__metadata) || function(k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\")\n      return Reflect.metadata(k, v);\n  };\n  var change_detection_1 = require(\"angular2/src/core/change_detection\");\n  var linker_1 = require(\"angular2/src/core/linker\");\n  var metadata_1 = require(\"angular2/src/core/metadata\");\n  var render_1 = require(\"angular2/src/core/render\");\n  var lang_1 = require(\"angular2/src/facade/lang\");\n  var NgStyle = (function() {\n    function NgStyle(_differs, _ngEl, _renderer) {\n      this._differs = _differs;\n      this._ngEl = _ngEl;\n      this._renderer = _renderer;\n    }\n    Object.defineProperty(NgStyle.prototype, \"rawStyle\", {\n      set: function(v) {\n        this._rawStyle = v;\n        if (lang_1.isBlank(this._differ) && lang_1.isPresent(v)) {\n          this._differ = this._differs.find(this._rawStyle).create(null);\n        }\n      },\n      enumerable: true,\n      configurable: true\n    });\n    NgStyle.prototype.doCheck = function() {\n      if (lang_1.isPresent(this._differ)) {\n        var changes = this._differ.diff(this._rawStyle);\n        if (lang_1.isPresent(changes)) {\n          this._applyChanges(changes);\n        }\n      }\n    };\n    NgStyle.prototype._applyChanges = function(changes) {\n      var _this = this;\n      changes.forEachAddedItem(function(record) {\n        _this._setStyle(record.key, record.currentValue);\n      });\n      changes.forEachChangedItem(function(record) {\n        _this._setStyle(record.key, record.currentValue);\n      });\n      changes.forEachRemovedItem(function(record) {\n        _this._setStyle(record.key, null);\n      });\n    };\n    NgStyle.prototype._setStyle = function(name, val) {\n      this._renderer.setElementStyle(this._ngEl, name, val);\n    };\n    NgStyle = __decorate([metadata_1.Directive({\n      selector: '[ng-style]',\n      inputs: ['rawStyle: ng-style']\n    }), __metadata('design:paramtypes', [change_detection_1.KeyValueDiffers, linker_1.ElementRef, render_1.Renderer])], NgStyle);\n    return NgStyle;\n  })();\n  exports.NgStyle = NgStyle;\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"angular2/src/common/directives/ng_switch\", [\"angular2/src/core/metadata\", \"angular2/src/core/di\", \"angular2/src/core/linker\", \"angular2/src/facade/lang\", \"angular2/src/facade/collection\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  var __decorate = (this && this.__decorate) || function(decorators, target, key, desc) {\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\")\n      return Reflect.decorate(decorators, target, key, desc);\n    switch (arguments.length) {\n      case 2:\n        return decorators.reduceRight(function(o, d) {\n          return (d && d(o)) || o;\n        }, target);\n      case 3:\n        return decorators.reduceRight(function(o, d) {\n          return (d && d(target, key)), void 0;\n        }, void 0);\n      case 4:\n        return decorators.reduceRight(function(o, d) {\n          return (d && d(target, key, o)) || o;\n        }, desc);\n    }\n  };\n  var __metadata = (this && this.__metadata) || function(k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\")\n      return Reflect.metadata(k, v);\n  };\n  var __param = (this && this.__param) || function(paramIndex, decorator) {\n    return function(target, key) {\n      decorator(target, key, paramIndex);\n    };\n  };\n  var metadata_1 = require(\"angular2/src/core/metadata\");\n  var di_1 = require(\"angular2/src/core/di\");\n  var linker_1 = require(\"angular2/src/core/linker\");\n  var lang_1 = require(\"angular2/src/facade/lang\");\n  var collection_1 = require(\"angular2/src/facade/collection\");\n  var _WHEN_DEFAULT = lang_1.CONST_EXPR(new Object());\n  var SwitchView = (function() {\n    function SwitchView(_viewContainerRef, _templateRef) {\n      this._viewContainerRef = _viewContainerRef;\n      this._templateRef = _templateRef;\n    }\n    SwitchView.prototype.create = function() {\n      this._viewContainerRef.createEmbeddedView(this._templateRef);\n    };\n    SwitchView.prototype.destroy = function() {\n      this._viewContainerRef.clear();\n    };\n    return SwitchView;\n  })();\n  exports.SwitchView = SwitchView;\n  var NgSwitch = (function() {\n    function NgSwitch() {\n      this._useDefault = false;\n      this._valueViews = new collection_1.Map();\n      this._activeViews = [];\n    }\n    Object.defineProperty(NgSwitch.prototype, \"ngSwitch\", {\n      set: function(value) {\n        this._emptyAllActiveViews();\n        this._useDefault = false;\n        var views = this._valueViews.get(value);\n        if (lang_1.isBlank(views)) {\n          this._useDefault = true;\n          views = lang_1.normalizeBlank(this._valueViews.get(_WHEN_DEFAULT));\n        }\n        this._activateViews(views);\n        this._switchValue = value;\n      },\n      enumerable: true,\n      configurable: true\n    });\n    NgSwitch.prototype._onWhenValueChanged = function(oldWhen, newWhen, view) {\n      this._deregisterView(oldWhen, view);\n      this._registerView(newWhen, view);\n      if (oldWhen === this._switchValue) {\n        view.destroy();\n        collection_1.ListWrapper.remove(this._activeViews, view);\n      } else if (newWhen === this._switchValue) {\n        if (this._useDefault) {\n          this._useDefault = false;\n          this._emptyAllActiveViews();\n        }\n        view.create();\n        this._activeViews.push(view);\n      }\n      if (this._activeViews.length === 0 && !this._useDefault) {\n        this._useDefault = true;\n        this._activateViews(this._valueViews.get(_WHEN_DEFAULT));\n      }\n    };\n    NgSwitch.prototype._emptyAllActiveViews = function() {\n      var activeContainers = this._activeViews;\n      for (var i = 0; i < activeContainers.length; i++) {\n        activeContainers[i].destroy();\n      }\n      this._activeViews = [];\n    };\n    NgSwitch.prototype._activateViews = function(views) {\n      if (lang_1.isPresent(views)) {\n        for (var i = 0; i < views.length; i++) {\n          views[i].create();\n        }\n        this._activeViews = views;\n      }\n    };\n    NgSwitch.prototype._registerView = function(value, view) {\n      var views = this._valueViews.get(value);\n      if (lang_1.isBlank(views)) {\n        views = [];\n        this._valueViews.set(value, views);\n      }\n      views.push(view);\n    };\n    NgSwitch.prototype._deregisterView = function(value, view) {\n      if (value === _WHEN_DEFAULT)\n        return ;\n      var views = this._valueViews.get(value);\n      if (views.length == 1) {\n        this._valueViews.delete(value);\n      } else {\n        collection_1.ListWrapper.remove(views, view);\n      }\n    };\n    NgSwitch = __decorate([metadata_1.Directive({\n      selector: '[ng-switch]',\n      inputs: ['ngSwitch']\n    }), __metadata('design:paramtypes', [])], NgSwitch);\n    return NgSwitch;\n  })();\n  exports.NgSwitch = NgSwitch;\n  var NgSwitchWhen = (function() {\n    function NgSwitchWhen(viewContainer, templateRef, _switch) {\n      this._switch = _switch;\n      this._value = _WHEN_DEFAULT;\n      this._view = new SwitchView(viewContainer, templateRef);\n    }\n    Object.defineProperty(NgSwitchWhen.prototype, \"ngSwitchWhen\", {\n      set: function(value) {\n        this._switch._onWhenValueChanged(this._value, value, this._view);\n        this._value = value;\n      },\n      enumerable: true,\n      configurable: true\n    });\n    NgSwitchWhen = __decorate([metadata_1.Directive({\n      selector: '[ng-switch-when]',\n      inputs: ['ngSwitchWhen']\n    }), __param(2, di_1.Host()), __metadata('design:paramtypes', [linker_1.ViewContainerRef, linker_1.TemplateRef, NgSwitch])], NgSwitchWhen);\n    return NgSwitchWhen;\n  })();\n  exports.NgSwitchWhen = NgSwitchWhen;\n  var NgSwitchDefault = (function() {\n    function NgSwitchDefault(viewContainer, templateRef, sswitch) {\n      sswitch._registerView(_WHEN_DEFAULT, new SwitchView(viewContainer, templateRef));\n    }\n    NgSwitchDefault = __decorate([metadata_1.Directive({selector: '[ng-switch-default]'}), __param(2, di_1.Host()), __metadata('design:paramtypes', [linker_1.ViewContainerRef, linker_1.TemplateRef, NgSwitch])], NgSwitchDefault);\n    return NgSwitchDefault;\n  })();\n  exports.NgSwitchDefault = NgSwitchDefault;\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"angular2/src/common/directives/observable_list_diff\", [], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"angular2/src/common/directives/core_directives\", [\"angular2/src/facade/lang\", \"angular2/src/common/directives/ng_class\", \"angular2/src/common/directives/ng_for\", \"angular2/src/common/directives/ng_if\", \"angular2/src/common/directives/ng_style\", \"angular2/src/common/directives/ng_switch\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  var lang_1 = require(\"angular2/src/facade/lang\");\n  var ng_class_1 = require(\"angular2/src/common/directives/ng_class\");\n  var ng_for_1 = require(\"angular2/src/common/directives/ng_for\");\n  var ng_if_1 = require(\"angular2/src/common/directives/ng_if\");\n  var ng_style_1 = require(\"angular2/src/common/directives/ng_style\");\n  var ng_switch_1 = require(\"angular2/src/common/directives/ng_switch\");\n  exports.CORE_DIRECTIVES = lang_1.CONST_EXPR([ng_class_1.NgClass, ng_for_1.NgFor, ng_if_1.NgIf, ng_style_1.NgStyle, ng_switch_1.NgSwitch, ng_switch_1.NgSwitchWhen, ng_switch_1.NgSwitchDefault]);\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"angular2/src/common/forms/model\", [\"angular2/src/facade/lang\", \"angular2/src/facade/async\", \"angular2/src/facade/promise\", \"angular2/src/facade/collection\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  var __extends = (this && this.__extends) || function(d, b) {\n    for (var p in b)\n      if (b.hasOwnProperty(p))\n        d[p] = b[p];\n    function __() {\n      this.constructor = d;\n    }\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n  };\n  var lang_1 = require(\"angular2/src/facade/lang\");\n  var async_1 = require(\"angular2/src/facade/async\");\n  var promise_1 = require(\"angular2/src/facade/promise\");\n  var collection_1 = require(\"angular2/src/facade/collection\");\n  exports.VALID = \"VALID\";\n  exports.INVALID = \"INVALID\";\n  exports.PENDING = \"PENDING\";\n  function isControl(control) {\n    return control instanceof AbstractControl;\n  }\n  exports.isControl = isControl;\n  function _find(control, path) {\n    if (lang_1.isBlank(path))\n      return null;\n    if (!(path instanceof Array)) {\n      path = path.split(\"/\");\n    }\n    if (path instanceof Array && collection_1.ListWrapper.isEmpty(path))\n      return null;\n    return path.reduce(function(v, name) {\n      if (v instanceof ControlGroup) {\n        return lang_1.isPresent(v.controls[name]) ? v.controls[name] : null;\n      } else if (v instanceof ControlArray) {\n        var index = name;\n        return lang_1.isPresent(v.at(index)) ? v.at(index) : null;\n      } else {\n        return null;\n      }\n    }, control);\n  }\n  function toObservable(r) {\n    return promise_1.PromiseWrapper.isPromise(r) ? async_1.ObservableWrapper.fromPromise(r) : r;\n  }\n  var AbstractControl = (function() {\n    function AbstractControl(validator, asyncValidator) {\n      this.validator = validator;\n      this.asyncValidator = asyncValidator;\n      this._pristine = true;\n      this._touched = false;\n    }\n    Object.defineProperty(AbstractControl.prototype, \"value\", {\n      get: function() {\n        return this._value;\n      },\n      enumerable: true,\n      configurable: true\n    });\n    Object.defineProperty(AbstractControl.prototype, \"status\", {\n      get: function() {\n        return this._status;\n      },\n      enumerable: true,\n      configurable: true\n    });\n    Object.defineProperty(AbstractControl.prototype, \"valid\", {\n      get: function() {\n        return this._status === exports.VALID;\n      },\n      enumerable: true,\n      configurable: true\n    });\n    Object.defineProperty(AbstractControl.prototype, \"errors\", {\n      get: function() {\n        return this._errors;\n      },\n      enumerable: true,\n      configurable: true\n    });\n    Object.defineProperty(AbstractControl.prototype, \"pristine\", {\n      get: function() {\n        return this._pristine;\n      },\n      enumerable: true,\n      configurable: true\n    });\n    Object.defineProperty(AbstractControl.prototype, \"dirty\", {\n      get: function() {\n        return !this.pristine;\n      },\n      enumerable: true,\n      configurable: true\n    });\n    Object.defineProperty(AbstractControl.prototype, \"touched\", {\n      get: function() {\n        return this._touched;\n      },\n      enumerable: true,\n      configurable: true\n    });\n    Object.defineProperty(AbstractControl.prototype, \"untouched\", {\n      get: function() {\n        return !this._touched;\n      },\n      enumerable: true,\n      configurable: true\n    });\n    Object.defineProperty(AbstractControl.prototype, \"valueChanges\", {\n      get: function() {\n        return this._valueChanges;\n      },\n      enumerable: true,\n      configurable: true\n    });\n    Object.defineProperty(AbstractControl.prototype, \"statusChanges\", {\n      get: function() {\n        return this._statusChanges;\n      },\n      enumerable: true,\n      configurable: true\n    });\n    Object.defineProperty(AbstractControl.prototype, \"pending\", {\n      get: function() {\n        return this._status == exports.PENDING;\n      },\n      enumerable: true,\n      configurable: true\n    });\n    AbstractControl.prototype.markAsTouched = function() {\n      this._touched = true;\n    };\n    AbstractControl.prototype.markAsDirty = function(_a) {\n      var onlySelf = (_a === void 0 ? {} : _a).onlySelf;\n      onlySelf = lang_1.normalizeBool(onlySelf);\n      this._pristine = false;\n      if (lang_1.isPresent(this._parent) && !onlySelf) {\n        this._parent.markAsDirty({onlySelf: onlySelf});\n      }\n    };\n    AbstractControl.prototype.markAsPending = function(_a) {\n      var onlySelf = (_a === void 0 ? {} : _a).onlySelf;\n      onlySelf = lang_1.normalizeBool(onlySelf);\n      this._status = exports.PENDING;\n      if (lang_1.isPresent(this._parent) && !onlySelf) {\n        this._parent.markAsPending({onlySelf: onlySelf});\n      }\n    };\n    AbstractControl.prototype.setParent = function(parent) {\n      this._parent = parent;\n    };\n    AbstractControl.prototype.updateValueAndValidity = function(_a) {\n      var _b = _a === void 0 ? {} : _a,\n          onlySelf = _b.onlySelf,\n          emitEvent = _b.emitEvent;\n      onlySelf = lang_1.normalizeBool(onlySelf);\n      emitEvent = lang_1.isPresent(emitEvent) ? emitEvent : true;\n      this._updateValue();\n      this._errors = this._runValidator();\n      this._status = this._calculateStatus();\n      if (this._status == exports.VALID || this._status == exports.PENDING) {\n        this._runAsyncValidator(emitEvent);\n      }\n      if (emitEvent) {\n        async_1.ObservableWrapper.callNext(this._valueChanges, this._value);\n        async_1.ObservableWrapper.callNext(this._statusChanges, this._status);\n      }\n      if (lang_1.isPresent(this._parent) && !onlySelf) {\n        this._parent.updateValueAndValidity({\n          onlySelf: onlySelf,\n          emitEvent: emitEvent\n        });\n      }\n    };\n    AbstractControl.prototype._runValidator = function() {\n      return lang_1.isPresent(this.validator) ? this.validator(this) : null;\n    };\n    AbstractControl.prototype._runAsyncValidator = function(emitEvent) {\n      var _this = this;\n      if (lang_1.isPresent(this.asyncValidator)) {\n        this._status = exports.PENDING;\n        this._cancelExistingSubscription();\n        var obs = toObservable(this.asyncValidator(this));\n        this._asyncValidationSubscription = async_1.ObservableWrapper.subscribe(obs, function(res) {\n          return _this.setErrors(res, {emitEvent: emitEvent});\n        });\n      }\n    };\n    AbstractControl.prototype._cancelExistingSubscription = function() {\n      if (lang_1.isPresent(this._asyncValidationSubscription)) {\n        async_1.ObservableWrapper.dispose(this._asyncValidationSubscription);\n      }\n    };\n    AbstractControl.prototype.setErrors = function(errors, _a) {\n      var emitEvent = (_a === void 0 ? {} : _a).emitEvent;\n      emitEvent = lang_1.isPresent(emitEvent) ? emitEvent : true;\n      this._errors = errors;\n      this._status = this._calculateStatus();\n      if (emitEvent) {\n        async_1.ObservableWrapper.callNext(this._statusChanges, this._status);\n      }\n      if (lang_1.isPresent(this._parent)) {\n        this._parent._updateControlsErrors();\n      }\n    };\n    AbstractControl.prototype.find = function(path) {\n      return _find(this, path);\n    };\n    AbstractControl.prototype.getError = function(errorCode, path) {\n      if (path === void 0) {\n        path = null;\n      }\n      var control = lang_1.isPresent(path) && !collection_1.ListWrapper.isEmpty(path) ? this.find(path) : this;\n      if (lang_1.isPresent(control) && lang_1.isPresent(control._errors)) {\n        return collection_1.StringMapWrapper.get(control._errors, errorCode);\n      } else {\n        return null;\n      }\n    };\n    AbstractControl.prototype.hasError = function(errorCode, path) {\n      if (path === void 0) {\n        path = null;\n      }\n      return lang_1.isPresent(this.getError(errorCode, path));\n    };\n    AbstractControl.prototype._updateControlsErrors = function() {\n      this._status = this._calculateStatus();\n      if (lang_1.isPresent(this._parent)) {\n        this._parent._updateControlsErrors();\n      }\n    };\n    AbstractControl.prototype._initObservables = function() {\n      this._valueChanges = new async_1.EventEmitter();\n      this._statusChanges = new async_1.EventEmitter();\n    };\n    AbstractControl.prototype._calculateStatus = function() {\n      if (lang_1.isPresent(this._errors))\n        return exports.INVALID;\n      if (this._anyControlsHaveStatus(exports.PENDING))\n        return exports.PENDING;\n      if (this._anyControlsHaveStatus(exports.INVALID))\n        return exports.INVALID;\n      return exports.VALID;\n    };\n    return AbstractControl;\n  })();\n  exports.AbstractControl = AbstractControl;\n  var Control = (function(_super) {\n    __extends(Control, _super);\n    function Control(value, validator, asyncValidator) {\n      if (value === void 0) {\n        value = null;\n      }\n      if (validator === void 0) {\n        validator = null;\n      }\n      if (asyncValidator === void 0) {\n        asyncValidator = null;\n      }\n      _super.call(this, validator, asyncValidator);\n      this._value = value;\n      this.updateValueAndValidity({\n        onlySelf: true,\n        emitEvent: false\n      });\n      this._initObservables();\n    }\n    Control.prototype.updateValue = function(value, _a) {\n      var _b = _a === void 0 ? {} : _a,\n          onlySelf = _b.onlySelf,\n          emitEvent = _b.emitEvent,\n          emitModelToViewChange = _b.emitModelToViewChange;\n      emitModelToViewChange = lang_1.isPresent(emitModelToViewChange) ? emitModelToViewChange : true;\n      this._value = value;\n      if (lang_1.isPresent(this._onChange) && emitModelToViewChange)\n        this._onChange(this._value);\n      this.updateValueAndValidity({\n        onlySelf: onlySelf,\n        emitEvent: emitEvent\n      });\n    };\n    Control.prototype._updateValue = function() {};\n    Control.prototype._anyControlsHaveStatus = function(status) {\n      return false;\n    };\n    Control.prototype.registerOnChange = function(fn) {\n      this._onChange = fn;\n    };\n    return Control;\n  })(AbstractControl);\n  exports.Control = Control;\n  var ControlGroup = (function(_super) {\n    __extends(ControlGroup, _super);\n    function ControlGroup(controls, optionals, validator, asyncValidator) {\n      if (optionals === void 0) {\n        optionals = null;\n      }\n      if (validator === void 0) {\n        validator = null;\n      }\n      if (asyncValidator === void 0) {\n        asyncValidator = null;\n      }\n      _super.call(this, validator, asyncValidator);\n      this.controls = controls;\n      this._optionals = lang_1.isPresent(optionals) ? optionals : {};\n      this._initObservables();\n      this._setParentForControls();\n      this.updateValueAndValidity({\n        onlySelf: true,\n        emitEvent: false\n      });\n    }\n    ControlGroup.prototype.addControl = function(name, control) {\n      this.controls[name] = control;\n      control.setParent(this);\n    };\n    ControlGroup.prototype.removeControl = function(name) {\n      collection_1.StringMapWrapper.delete(this.controls, name);\n    };\n    ControlGroup.prototype.include = function(controlName) {\n      collection_1.StringMapWrapper.set(this._optionals, controlName, true);\n      this.updateValueAndValidity();\n    };\n    ControlGroup.prototype.exclude = function(controlName) {\n      collection_1.StringMapWrapper.set(this._optionals, controlName, false);\n      this.updateValueAndValidity();\n    };\n    ControlGroup.prototype.contains = function(controlName) {\n      var c = collection_1.StringMapWrapper.contains(this.controls, controlName);\n      return c && this._included(controlName);\n    };\n    ControlGroup.prototype._setParentForControls = function() {\n      var _this = this;\n      collection_1.StringMapWrapper.forEach(this.controls, function(control, name) {\n        control.setParent(_this);\n      });\n    };\n    ControlGroup.prototype._updateValue = function() {\n      this._value = this._reduceValue();\n    };\n    ControlGroup.prototype._anyControlsHaveStatus = function(status) {\n      var _this = this;\n      var res = false;\n      collection_1.StringMapWrapper.forEach(this.controls, function(control, name) {\n        res = res || (_this.contains(name) && control.status == status);\n      });\n      return res;\n    };\n    ControlGroup.prototype._reduceValue = function() {\n      return this._reduceChildren({}, function(acc, control, name) {\n        acc[name] = control.value;\n        return acc;\n      });\n    };\n    ControlGroup.prototype._reduceChildren = function(initValue, fn) {\n      var _this = this;\n      var res = initValue;\n      collection_1.StringMapWrapper.forEach(this.controls, function(control, name) {\n        if (_this._included(name)) {\n          res = fn(res, control, name);\n        }\n      });\n      return res;\n    };\n    ControlGroup.prototype._included = function(controlName) {\n      var isOptional = collection_1.StringMapWrapper.contains(this._optionals, controlName);\n      return !isOptional || collection_1.StringMapWrapper.get(this._optionals, controlName);\n    };\n    return ControlGroup;\n  })(AbstractControl);\n  exports.ControlGroup = ControlGroup;\n  var ControlArray = (function(_super) {\n    __extends(ControlArray, _super);\n    function ControlArray(controls, validator, asyncValidator) {\n      if (validator === void 0) {\n        validator = null;\n      }\n      if (asyncValidator === void 0) {\n        asyncValidator = null;\n      }\n      _super.call(this, validator, asyncValidator);\n      this.controls = controls;\n      this._initObservables();\n      this._setParentForControls();\n      this.updateValueAndValidity({\n        onlySelf: true,\n        emitEvent: false\n      });\n    }\n    ControlArray.prototype.at = function(index) {\n      return this.controls[index];\n    };\n    ControlArray.prototype.push = function(control) {\n      this.controls.push(control);\n      control.setParent(this);\n      this.updateValueAndValidity();\n    };\n    ControlArray.prototype.insert = function(index, control) {\n      collection_1.ListWrapper.insert(this.controls, index, control);\n      control.setParent(this);\n      this.updateValueAndValidity();\n    };\n    ControlArray.prototype.removeAt = function(index) {\n      collection_1.ListWrapper.removeAt(this.controls, index);\n      this.updateValueAndValidity();\n    };\n    Object.defineProperty(ControlArray.prototype, \"length\", {\n      get: function() {\n        return this.controls.length;\n      },\n      enumerable: true,\n      configurable: true\n    });\n    ControlArray.prototype._updateValue = function() {\n      this._value = this.controls.map(function(control) {\n        return control.value;\n      });\n    };\n    ControlArray.prototype._anyControlsHaveStatus = function(status) {\n      return this.controls.some(function(c) {\n        return c.status == status;\n      });\n    };\n    ControlArray.prototype._setParentForControls = function() {\n      var _this = this;\n      this.controls.forEach(function(control) {\n        control.setParent(_this);\n      });\n    };\n    return ControlArray;\n  })(AbstractControl);\n  exports.ControlArray = ControlArray;\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"angular2/src/common/forms/directives/abstract_control_directive\", [\"angular2/src/facade/lang\", \"angular2/src/facade/exceptions\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  var lang_1 = require(\"angular2/src/facade/lang\");\n  var exceptions_1 = require(\"angular2/src/facade/exceptions\");\n  var AbstractControlDirective = (function() {\n    function AbstractControlDirective() {}\n    Object.defineProperty(AbstractControlDirective.prototype, \"control\", {\n      get: function() {\n        return exceptions_1.unimplemented();\n      },\n      enumerable: true,\n      configurable: true\n    });\n    Object.defineProperty(AbstractControlDirective.prototype, \"value\", {\n      get: function() {\n        return lang_1.isPresent(this.control) ? this.control.value : null;\n      },\n      enumerable: true,\n      configurable: true\n    });\n    Object.defineProperty(AbstractControlDirective.prototype, \"valid\", {\n      get: function() {\n        return lang_1.isPresent(this.control) ? this.control.valid : null;\n      },\n      enumerable: true,\n      configurable: true\n    });\n    Object.defineProperty(AbstractControlDirective.prototype, \"errors\", {\n      get: function() {\n        return lang_1.isPresent(this.control) ? this.control.errors : null;\n      },\n      enumerable: true,\n      configurable: true\n    });\n    Object.defineProperty(AbstractControlDirective.prototype, \"pristine\", {\n      get: function() {\n        return lang_1.isPresent(this.control) ? this.control.pristine : null;\n      },\n      enumerable: true,\n      configurable: true\n    });\n    Object.defineProperty(AbstractControlDirective.prototype, \"dirty\", {\n      get: function() {\n        return lang_1.isPresent(this.control) ? this.control.dirty : null;\n      },\n      enumerable: true,\n      configurable: true\n    });\n    Object.defineProperty(AbstractControlDirective.prototype, \"touched\", {\n      get: function() {\n        return lang_1.isPresent(this.control) ? this.control.touched : null;\n      },\n      enumerable: true,\n      configurable: true\n    });\n    Object.defineProperty(AbstractControlDirective.prototype, \"untouched\", {\n      get: function() {\n        return lang_1.isPresent(this.control) ? this.control.untouched : null;\n      },\n      enumerable: true,\n      configurable: true\n    });\n    Object.defineProperty(AbstractControlDirective.prototype, \"path\", {\n      get: function() {\n        return null;\n      },\n      enumerable: true,\n      configurable: true\n    });\n    return AbstractControlDirective;\n  })();\n  exports.AbstractControlDirective = AbstractControlDirective;\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"angular2/src/common/forms/directives/control_container\", [\"angular2/src/common/forms/directives/abstract_control_directive\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  var __extends = (this && this.__extends) || function(d, b) {\n    for (var p in b)\n      if (b.hasOwnProperty(p))\n        d[p] = b[p];\n    function __() {\n      this.constructor = d;\n    }\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n  };\n  var abstract_control_directive_1 = require(\"angular2/src/common/forms/directives/abstract_control_directive\");\n  var ControlContainer = (function(_super) {\n    __extends(ControlContainer, _super);\n    function ControlContainer() {\n      _super.apply(this, arguments);\n    }\n    Object.defineProperty(ControlContainer.prototype, \"formDirective\", {\n      get: function() {\n        return null;\n      },\n      enumerable: true,\n      configurable: true\n    });\n    Object.defineProperty(ControlContainer.prototype, \"path\", {\n      get: function() {\n        return null;\n      },\n      enumerable: true,\n      configurable: true\n    });\n    return ControlContainer;\n  })(abstract_control_directive_1.AbstractControlDirective);\n  exports.ControlContainer = ControlContainer;\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"angular2/src/common/forms/directives/ng_control\", [\"angular2/src/common/forms/directives/abstract_control_directive\", \"angular2/src/facade/exceptions\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  var __extends = (this && this.__extends) || function(d, b) {\n    for (var p in b)\n      if (b.hasOwnProperty(p))\n        d[p] = b[p];\n    function __() {\n      this.constructor = d;\n    }\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n  };\n  var abstract_control_directive_1 = require(\"angular2/src/common/forms/directives/abstract_control_directive\");\n  var exceptions_1 = require(\"angular2/src/facade/exceptions\");\n  var NgControl = (function(_super) {\n    __extends(NgControl, _super);\n    function NgControl() {\n      _super.apply(this, arguments);\n      this.name = null;\n      this.valueAccessor = null;\n    }\n    Object.defineProperty(NgControl.prototype, \"validator\", {\n      get: function() {\n        return exceptions_1.unimplemented();\n      },\n      enumerable: true,\n      configurable: true\n    });\n    Object.defineProperty(NgControl.prototype, \"asyncValidator\", {\n      get: function() {\n        return exceptions_1.unimplemented();\n      },\n      enumerable: true,\n      configurable: true\n    });\n    return NgControl;\n  })(abstract_control_directive_1.AbstractControlDirective);\n  exports.NgControl = NgControl;\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"angular2/src/common/forms/directives/control_value_accessor\", [\"angular2/src/facade/lang\", \"angular2/src/core/di\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  var lang_1 = require(\"angular2/src/facade/lang\");\n  var di_1 = require(\"angular2/src/core/di\");\n  exports.NG_VALUE_ACCESSOR = lang_1.CONST_EXPR(new di_1.OpaqueToken(\"NgValueAccessor\"));\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"angular2/src/common/forms/validators\", [\"angular2/src/facade/lang\", \"angular2/src/facade/promise\", \"angular2/src/facade/async\", \"angular2/src/facade/collection\", \"angular2/src/core/di\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  var lang_1 = require(\"angular2/src/facade/lang\");\n  var promise_1 = require(\"angular2/src/facade/promise\");\n  var async_1 = require(\"angular2/src/facade/async\");\n  var collection_1 = require(\"angular2/src/facade/collection\");\n  var di_1 = require(\"angular2/src/core/di\");\n  exports.NG_VALIDATORS = lang_1.CONST_EXPR(new di_1.OpaqueToken(\"NgValidators\"));\n  exports.NG_ASYNC_VALIDATORS = lang_1.CONST_EXPR(new di_1.OpaqueToken(\"NgAsyncValidators\"));\n  var Validators = (function() {\n    function Validators() {}\n    Validators.required = function(control) {\n      return lang_1.isBlank(control.value) || control.value == \"\" ? {\"required\": true} : null;\n    };\n    Validators.minLength = function(minLength) {\n      return function(control) {\n        if (lang_1.isPresent(Validators.required(control)))\n          return null;\n        var v = control.value;\n        return v.length < minLength ? {\"minlength\": {\n            \"requiredLength\": minLength,\n            \"actualLength\": v.length\n          }} : null;\n      };\n    };\n    Validators.maxLength = function(maxLength) {\n      return function(control) {\n        if (lang_1.isPresent(Validators.required(control)))\n          return null;\n        var v = control.value;\n        return v.length > maxLength ? {\"maxlength\": {\n            \"requiredLength\": maxLength,\n            \"actualLength\": v.length\n          }} : null;\n      };\n    };\n    Validators.nullValidator = function(c) {\n      return null;\n    };\n    Validators.compose = function(validators) {\n      if (lang_1.isBlank(validators))\n        return null;\n      var presentValidators = validators.filter(lang_1.isPresent);\n      if (presentValidators.length == 0)\n        return null;\n      return function(control) {\n        return _mergeErrors(_executeValidators(control, presentValidators));\n      };\n    };\n    Validators.composeAsync = function(validators) {\n      if (lang_1.isBlank(validators))\n        return null;\n      var presentValidators = validators.filter(lang_1.isPresent);\n      if (presentValidators.length == 0)\n        return null;\n      return function(control) {\n        var promises = _executeValidators(control, presentValidators).map(_convertToPromise);\n        return promise_1.PromiseWrapper.all(promises).then(_mergeErrors);\n      };\n    };\n    return Validators;\n  })();\n  exports.Validators = Validators;\n  function _convertToPromise(obj) {\n    return promise_1.PromiseWrapper.isPromise(obj) ? obj : async_1.ObservableWrapper.toPromise(obj);\n  }\n  function _executeValidators(control, validators) {\n    return validators.map(function(v) {\n      return v(control);\n    });\n  }\n  function _mergeErrors(arrayOfErrors) {\n    var res = arrayOfErrors.reduce(function(res, errors) {\n      return lang_1.isPresent(errors) ? collection_1.StringMapWrapper.merge(res, errors) : res;\n    }, {});\n    return collection_1.StringMapWrapper.isEmpty(res) ? null : res;\n  }\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"angular2/src/common/forms/directives/default_value_accessor\", [\"angular2/src/core/metadata\", \"angular2/src/core/linker\", \"angular2/src/core/render\", \"angular2/src/core/di\", \"angular2/src/common/forms/directives/control_value_accessor\", \"angular2/src/facade/lang\", \"angular2/src/common/forms/directives/shared\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  var __decorate = (this && this.__decorate) || function(decorators, target, key, desc) {\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\")\n      return Reflect.decorate(decorators, target, key, desc);\n    switch (arguments.length) {\n      case 2:\n        return decorators.reduceRight(function(o, d) {\n          return (d && d(o)) || o;\n        }, target);\n      case 3:\n        return decorators.reduceRight(function(o, d) {\n          return (d && d(target, key)), void 0;\n        }, void 0);\n      case 4:\n        return decorators.reduceRight(function(o, d) {\n          return (d && d(target, key, o)) || o;\n        }, desc);\n    }\n  };\n  var __metadata = (this && this.__metadata) || function(k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\")\n      return Reflect.metadata(k, v);\n  };\n  var metadata_1 = require(\"angular2/src/core/metadata\");\n  var linker_1 = require(\"angular2/src/core/linker\");\n  var render_1 = require(\"angular2/src/core/render\");\n  var di_1 = require(\"angular2/src/core/di\");\n  var control_value_accessor_1 = require(\"angular2/src/common/forms/directives/control_value_accessor\");\n  var lang_1 = require(\"angular2/src/facade/lang\");\n  var shared_1 = require(\"angular2/src/common/forms/directives/shared\");\n  var DEFAULT_VALUE_ACCESSOR = lang_1.CONST_EXPR(new di_1.Provider(control_value_accessor_1.NG_VALUE_ACCESSOR, {\n    useExisting: di_1.forwardRef(function() {\n      return DefaultValueAccessor;\n    }),\n    multi: true\n  }));\n  var DefaultValueAccessor = (function() {\n    function DefaultValueAccessor(_renderer, _elementRef) {\n      this._renderer = _renderer;\n      this._elementRef = _elementRef;\n      this.onChange = function(_) {};\n      this.onTouched = function() {};\n    }\n    DefaultValueAccessor.prototype.writeValue = function(value) {\n      var normalizedValue = lang_1.isBlank(value) ? '' : value;\n      shared_1.setProperty(this._renderer, this._elementRef, 'value', normalizedValue);\n    };\n    DefaultValueAccessor.prototype.registerOnChange = function(fn) {\n      this.onChange = fn;\n    };\n    DefaultValueAccessor.prototype.registerOnTouched = function(fn) {\n      this.onTouched = fn;\n    };\n    DefaultValueAccessor = __decorate([metadata_1.Directive({\n      selector: 'input:not([type=checkbox])[ng-control],textarea[ng-control],input:not([type=checkbox])[ng-form-control],textarea[ng-form-control],input:not([type=checkbox])[ng-model],textarea[ng-model],[ng-default-control]',\n      host: {\n        '(change)': 'onChange($event.target.value)',\n        '(input)': 'onChange($event.target.value)',\n        '(blur)': 'onTouched()'\n      },\n      bindings: [DEFAULT_VALUE_ACCESSOR]\n    }), __metadata('design:paramtypes', [render_1.Renderer, linker_1.ElementRef])], DefaultValueAccessor);\n    return DefaultValueAccessor;\n  })();\n  exports.DefaultValueAccessor = DefaultValueAccessor;\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"angular2/src/common/forms/directives/number_value_accessor\", [\"angular2/src/core/metadata\", \"angular2/src/core/linker\", \"angular2/src/core/render\", \"angular2/src/core/di\", \"angular2/src/common/forms/directives/control_value_accessor\", \"angular2/src/facade/lang\", \"angular2/src/common/forms/directives/shared\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  var __decorate = (this && this.__decorate) || function(decorators, target, key, desc) {\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\")\n      return Reflect.decorate(decorators, target, key, desc);\n    switch (arguments.length) {\n      case 2:\n        return decorators.reduceRight(function(o, d) {\n          return (d && d(o)) || o;\n        }, target);\n      case 3:\n        return decorators.reduceRight(function(o, d) {\n          return (d && d(target, key)), void 0;\n        }, void 0);\n      case 4:\n        return decorators.reduceRight(function(o, d) {\n          return (d && d(target, key, o)) || o;\n        }, desc);\n    }\n  };\n  var __metadata = (this && this.__metadata) || function(k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\")\n      return Reflect.metadata(k, v);\n  };\n  var metadata_1 = require(\"angular2/src/core/metadata\");\n  var linker_1 = require(\"angular2/src/core/linker\");\n  var render_1 = require(\"angular2/src/core/render\");\n  var di_1 = require(\"angular2/src/core/di\");\n  var control_value_accessor_1 = require(\"angular2/src/common/forms/directives/control_value_accessor\");\n  var lang_1 = require(\"angular2/src/facade/lang\");\n  var shared_1 = require(\"angular2/src/common/forms/directives/shared\");\n  var NUMBER_VALUE_ACCESSOR = lang_1.CONST_EXPR(new di_1.Provider(control_value_accessor_1.NG_VALUE_ACCESSOR, {\n    useExisting: di_1.forwardRef(function() {\n      return NumberValueAccessor;\n    }),\n    multi: true\n  }));\n  var NumberValueAccessor = (function() {\n    function NumberValueAccessor(_renderer, _elementRef) {\n      this._renderer = _renderer;\n      this._elementRef = _elementRef;\n      this.onChange = function(_) {};\n      this.onTouched = function() {};\n    }\n    NumberValueAccessor.prototype.writeValue = function(value) {\n      shared_1.setProperty(this._renderer, this._elementRef, 'value', value);\n    };\n    NumberValueAccessor.prototype.registerOnChange = function(fn) {\n      this.onChange = function(value) {\n        fn(lang_1.NumberWrapper.parseFloat(value));\n      };\n    };\n    NumberValueAccessor.prototype.registerOnTouched = function(fn) {\n      this.onTouched = fn;\n    };\n    NumberValueAccessor = __decorate([metadata_1.Directive({\n      selector: 'input[type=number][ng-control],input[type=number][ng-form-control],input[type=number][ng-model]',\n      host: {\n        '(change)': 'onChange($event.target.value)',\n        '(input)': 'onChange($event.target.value)',\n        '(blur)': 'onTouched()'\n      },\n      bindings: [NUMBER_VALUE_ACCESSOR]\n    }), __metadata('design:paramtypes', [render_1.Renderer, linker_1.ElementRef])], NumberValueAccessor);\n    return NumberValueAccessor;\n  })();\n  exports.NumberValueAccessor = NumberValueAccessor;\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"angular2/src/common/forms/directives/checkbox_value_accessor\", [\"angular2/src/core/metadata\", \"angular2/src/core/render\", \"angular2/src/core/linker\", \"angular2/src/core/di\", \"angular2/src/common/forms/directives/control_value_accessor\", \"angular2/src/facade/lang\", \"angular2/src/common/forms/directives/shared\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  var __decorate = (this && this.__decorate) || function(decorators, target, key, desc) {\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\")\n      return Reflect.decorate(decorators, target, key, desc);\n    switch (arguments.length) {\n      case 2:\n        return decorators.reduceRight(function(o, d) {\n          return (d && d(o)) || o;\n        }, target);\n      case 3:\n        return decorators.reduceRight(function(o, d) {\n          return (d && d(target, key)), void 0;\n        }, void 0);\n      case 4:\n        return decorators.reduceRight(function(o, d) {\n          return (d && d(target, key, o)) || o;\n        }, desc);\n    }\n  };\n  var __metadata = (this && this.__metadata) || function(k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\")\n      return Reflect.metadata(k, v);\n  };\n  var metadata_1 = require(\"angular2/src/core/metadata\");\n  var render_1 = require(\"angular2/src/core/render\");\n  var linker_1 = require(\"angular2/src/core/linker\");\n  var di_1 = require(\"angular2/src/core/di\");\n  var control_value_accessor_1 = require(\"angular2/src/common/forms/directives/control_value_accessor\");\n  var lang_1 = require(\"angular2/src/facade/lang\");\n  var shared_1 = require(\"angular2/src/common/forms/directives/shared\");\n  var CHECKBOX_VALUE_ACCESSOR = lang_1.CONST_EXPR(new di_1.Provider(control_value_accessor_1.NG_VALUE_ACCESSOR, {\n    useExisting: di_1.forwardRef(function() {\n      return CheckboxControlValueAccessor;\n    }),\n    multi: true\n  }));\n  var CheckboxControlValueAccessor = (function() {\n    function CheckboxControlValueAccessor(_renderer, _elementRef) {\n      this._renderer = _renderer;\n      this._elementRef = _elementRef;\n      this.onChange = function(_) {};\n      this.onTouched = function() {};\n    }\n    CheckboxControlValueAccessor.prototype.writeValue = function(value) {\n      shared_1.setProperty(this._renderer, this._elementRef, \"checked\", value);\n    };\n    CheckboxControlValueAccessor.prototype.registerOnChange = function(fn) {\n      this.onChange = fn;\n    };\n    CheckboxControlValueAccessor.prototype.registerOnTouched = function(fn) {\n      this.onTouched = fn;\n    };\n    CheckboxControlValueAccessor = __decorate([metadata_1.Directive({\n      selector: 'input[type=checkbox][ng-control],input[type=checkbox][ng-form-control],input[type=checkbox][ng-model]',\n      host: {\n        '(change)': 'onChange($event.target.checked)',\n        '(blur)': 'onTouched()'\n      },\n      bindings: [CHECKBOX_VALUE_ACCESSOR]\n    }), __metadata('design:paramtypes', [render_1.Renderer, linker_1.ElementRef])], CheckboxControlValueAccessor);\n    return CheckboxControlValueAccessor;\n  })();\n  exports.CheckboxControlValueAccessor = CheckboxControlValueAccessor;\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"angular2/src/common/forms/directives/select_control_value_accessor\", [\"angular2/src/core/di\", \"angular2/src/core/render\", \"angular2/src/core/linker\", \"angular2/src/core/metadata\", \"angular2/src/facade/async\", \"angular2/src/common/forms/directives/control_value_accessor\", \"angular2/src/facade/lang\", \"angular2/src/common/forms/directives/shared\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  var __decorate = (this && this.__decorate) || function(decorators, target, key, desc) {\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\")\n      return Reflect.decorate(decorators, target, key, desc);\n    switch (arguments.length) {\n      case 2:\n        return decorators.reduceRight(function(o, d) {\n          return (d && d(o)) || o;\n        }, target);\n      case 3:\n        return decorators.reduceRight(function(o, d) {\n          return (d && d(target, key)), void 0;\n        }, void 0);\n      case 4:\n        return decorators.reduceRight(function(o, d) {\n          return (d && d(target, key, o)) || o;\n        }, desc);\n    }\n  };\n  var __metadata = (this && this.__metadata) || function(k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\")\n      return Reflect.metadata(k, v);\n  };\n  var __param = (this && this.__param) || function(paramIndex, decorator) {\n    return function(target, key) {\n      decorator(target, key, paramIndex);\n    };\n  };\n  var di_1 = require(\"angular2/src/core/di\");\n  var render_1 = require(\"angular2/src/core/render\");\n  var linker_1 = require(\"angular2/src/core/linker\");\n  var metadata_1 = require(\"angular2/src/core/metadata\");\n  var async_1 = require(\"angular2/src/facade/async\");\n  var control_value_accessor_1 = require(\"angular2/src/common/forms/directives/control_value_accessor\");\n  var lang_1 = require(\"angular2/src/facade/lang\");\n  var shared_1 = require(\"angular2/src/common/forms/directives/shared\");\n  var SELECT_VALUE_ACCESSOR = lang_1.CONST_EXPR(new di_1.Provider(control_value_accessor_1.NG_VALUE_ACCESSOR, {\n    useExisting: di_1.forwardRef(function() {\n      return SelectControlValueAccessor;\n    }),\n    multi: true\n  }));\n  var NgSelectOption = (function() {\n    function NgSelectOption() {}\n    NgSelectOption = __decorate([metadata_1.Directive({selector: 'option'}), __metadata('design:paramtypes', [])], NgSelectOption);\n    return NgSelectOption;\n  })();\n  exports.NgSelectOption = NgSelectOption;\n  var SelectControlValueAccessor = (function() {\n    function SelectControlValueAccessor(_renderer, _elementRef, query) {\n      this._renderer = _renderer;\n      this._elementRef = _elementRef;\n      this.onChange = function(_) {};\n      this.onTouched = function() {};\n      this._updateValueWhenListOfOptionsChanges(query);\n    }\n    SelectControlValueAccessor.prototype.writeValue = function(value) {\n      this.value = value;\n      shared_1.setProperty(this._renderer, this._elementRef, \"value\", value);\n    };\n    SelectControlValueAccessor.prototype.registerOnChange = function(fn) {\n      this.onChange = fn;\n    };\n    SelectControlValueAccessor.prototype.registerOnTouched = function(fn) {\n      this.onTouched = fn;\n    };\n    SelectControlValueAccessor.prototype._updateValueWhenListOfOptionsChanges = function(query) {\n      var _this = this;\n      async_1.ObservableWrapper.subscribe(query.changes, function(_) {\n        return _this.writeValue(_this.value);\n      });\n    };\n    SelectControlValueAccessor = __decorate([metadata_1.Directive({\n      selector: 'select[ng-control],select[ng-form-control],select[ng-model]',\n      host: {\n        '(change)': 'onChange($event.target.value)',\n        '(input)': 'onChange($event.target.value)',\n        '(blur)': 'onTouched()'\n      },\n      bindings: [SELECT_VALUE_ACCESSOR]\n    }), __param(2, metadata_1.Query(NgSelectOption, {descendants: true})), __metadata('design:paramtypes', [render_1.Renderer, linker_1.ElementRef, linker_1.QueryList])], SelectControlValueAccessor);\n    return SelectControlValueAccessor;\n  })();\n  exports.SelectControlValueAccessor = SelectControlValueAccessor;\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"angular2/src/common/forms/directives/normalize_validator\", [], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  function normalizeValidator(validator) {\n    if (validator.validate !== undefined) {\n      return function(c) {\n        return validator.validate(c);\n      };\n    } else {\n      return validator;\n    }\n  }\n  exports.normalizeValidator = normalizeValidator;\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"angular2/src/common/forms/directives/ng_form_control\", [\"angular2/src/facade/lang\", \"angular2/src/facade/collection\", \"angular2/src/facade/async\", \"angular2/src/core/metadata\", \"angular2/src/core/di\", \"angular2/src/common/forms/directives/ng_control\", \"angular2/src/common/forms/validators\", \"angular2/src/common/forms/directives/control_value_accessor\", \"angular2/src/common/forms/directives/shared\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  var __extends = (this && this.__extends) || function(d, b) {\n    for (var p in b)\n      if (b.hasOwnProperty(p))\n        d[p] = b[p];\n    function __() {\n      this.constructor = d;\n    }\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n  };\n  var __decorate = (this && this.__decorate) || function(decorators, target, key, desc) {\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\")\n      return Reflect.decorate(decorators, target, key, desc);\n    switch (arguments.length) {\n      case 2:\n        return decorators.reduceRight(function(o, d) {\n          return (d && d(o)) || o;\n        }, target);\n      case 3:\n        return decorators.reduceRight(function(o, d) {\n          return (d && d(target, key)), void 0;\n        }, void 0);\n      case 4:\n        return decorators.reduceRight(function(o, d) {\n          return (d && d(target, key, o)) || o;\n        }, desc);\n    }\n  };\n  var __metadata = (this && this.__metadata) || function(k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\")\n      return Reflect.metadata(k, v);\n  };\n  var __param = (this && this.__param) || function(paramIndex, decorator) {\n    return function(target, key) {\n      decorator(target, key, paramIndex);\n    };\n  };\n  var lang_1 = require(\"angular2/src/facade/lang\");\n  var collection_1 = require(\"angular2/src/facade/collection\");\n  var async_1 = require(\"angular2/src/facade/async\");\n  var metadata_1 = require(\"angular2/src/core/metadata\");\n  var di_1 = require(\"angular2/src/core/di\");\n  var ng_control_1 = require(\"angular2/src/common/forms/directives/ng_control\");\n  var validators_1 = require(\"angular2/src/common/forms/validators\");\n  var control_value_accessor_1 = require(\"angular2/src/common/forms/directives/control_value_accessor\");\n  var shared_1 = require(\"angular2/src/common/forms/directives/shared\");\n  var formControlBinding = lang_1.CONST_EXPR(new di_1.Provider(ng_control_1.NgControl, {useExisting: di_1.forwardRef(function() {\n      return NgFormControl;\n    })}));\n  var NgFormControl = (function(_super) {\n    __extends(NgFormControl, _super);\n    function NgFormControl(_validators, _asyncValidators, valueAccessors) {\n      _super.call(this);\n      this._validators = _validators;\n      this._asyncValidators = _asyncValidators;\n      this.update = new async_1.EventEmitter();\n      this.valueAccessor = shared_1.selectValueAccessor(this, valueAccessors);\n    }\n    NgFormControl.prototype.onChanges = function(changes) {\n      if (this._isControlChanged(changes)) {\n        shared_1.setUpControl(this.form, this);\n        this.form.updateValueAndValidity({emitEvent: false});\n      }\n      if (shared_1.isPropertyUpdated(changes, this.viewModel)) {\n        this.form.updateValue(this.model);\n        this.viewModel = this.model;\n      }\n    };\n    Object.defineProperty(NgFormControl.prototype, \"path\", {\n      get: function() {\n        return [];\n      },\n      enumerable: true,\n      configurable: true\n    });\n    Object.defineProperty(NgFormControl.prototype, \"validator\", {\n      get: function() {\n        return shared_1.composeValidators(this._validators);\n      },\n      enumerable: true,\n      configurable: true\n    });\n    Object.defineProperty(NgFormControl.prototype, \"asyncValidator\", {\n      get: function() {\n        return shared_1.composeAsyncValidators(this._asyncValidators);\n      },\n      enumerable: true,\n      configurable: true\n    });\n    Object.defineProperty(NgFormControl.prototype, \"control\", {\n      get: function() {\n        return this.form;\n      },\n      enumerable: true,\n      configurable: true\n    });\n    NgFormControl.prototype.viewToModelUpdate = function(newValue) {\n      this.viewModel = newValue;\n      async_1.ObservableWrapper.callNext(this.update, newValue);\n    };\n    NgFormControl.prototype._isControlChanged = function(changes) {\n      return collection_1.StringMapWrapper.contains(changes, \"form\");\n    };\n    NgFormControl = __decorate([metadata_1.Directive({\n      selector: '[ng-form-control]',\n      bindings: [formControlBinding],\n      inputs: ['form: ngFormControl', 'model: ngModel'],\n      outputs: ['update: ngModelChange'],\n      exportAs: 'form'\n    }), __param(0, di_1.Optional()), __param(0, di_1.Inject(validators_1.NG_VALIDATORS)), __param(1, di_1.Optional()), __param(1, di_1.Inject(validators_1.NG_ASYNC_VALIDATORS)), __param(2, di_1.Optional()), __param(2, di_1.Inject(control_value_accessor_1.NG_VALUE_ACCESSOR)), __metadata('design:paramtypes', [Array, Array, Array])], NgFormControl);\n    return NgFormControl;\n  })(ng_control_1.NgControl);\n  exports.NgFormControl = NgFormControl;\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"angular2/src/common/forms/directives/ng_model\", [\"angular2/src/facade/lang\", \"angular2/src/facade/async\", \"angular2/src/core/metadata\", \"angular2/src/core/di\", \"angular2/src/common/forms/directives/control_value_accessor\", \"angular2/src/common/forms/directives/ng_control\", \"angular2/src/common/forms/model\", \"angular2/src/common/forms/validators\", \"angular2/src/common/forms/directives/shared\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  var __extends = (this && this.__extends) || function(d, b) {\n    for (var p in b)\n      if (b.hasOwnProperty(p))\n        d[p] = b[p];\n    function __() {\n      this.constructor = d;\n    }\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n  };\n  var __decorate = (this && this.__decorate) || function(decorators, target, key, desc) {\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\")\n      return Reflect.decorate(decorators, target, key, desc);\n    switch (arguments.length) {\n      case 2:\n        return decorators.reduceRight(function(o, d) {\n          return (d && d(o)) || o;\n        }, target);\n      case 3:\n        return decorators.reduceRight(function(o, d) {\n          return (d && d(target, key)), void 0;\n        }, void 0);\n      case 4:\n        return decorators.reduceRight(function(o, d) {\n          return (d && d(target, key, o)) || o;\n        }, desc);\n    }\n  };\n  var __metadata = (this && this.__metadata) || function(k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\")\n      return Reflect.metadata(k, v);\n  };\n  var __param = (this && this.__param) || function(paramIndex, decorator) {\n    return function(target, key) {\n      decorator(target, key, paramIndex);\n    };\n  };\n  var lang_1 = require(\"angular2/src/facade/lang\");\n  var async_1 = require(\"angular2/src/facade/async\");\n  var metadata_1 = require(\"angular2/src/core/metadata\");\n  var di_1 = require(\"angular2/src/core/di\");\n  var control_value_accessor_1 = require(\"angular2/src/common/forms/directives/control_value_accessor\");\n  var ng_control_1 = require(\"angular2/src/common/forms/directives/ng_control\");\n  var model_1 = require(\"angular2/src/common/forms/model\");\n  var validators_1 = require(\"angular2/src/common/forms/validators\");\n  var shared_1 = require(\"angular2/src/common/forms/directives/shared\");\n  var formControlBinding = lang_1.CONST_EXPR(new di_1.Provider(ng_control_1.NgControl, {useExisting: di_1.forwardRef(function() {\n      return NgModel;\n    })}));\n  var NgModel = (function(_super) {\n    __extends(NgModel, _super);\n    function NgModel(_validators, _asyncValidators, valueAccessors) {\n      _super.call(this);\n      this._validators = _validators;\n      this._asyncValidators = _asyncValidators;\n      this._control = new model_1.Control();\n      this._added = false;\n      this.update = new async_1.EventEmitter();\n      this.valueAccessor = shared_1.selectValueAccessor(this, valueAccessors);\n    }\n    NgModel.prototype.onChanges = function(changes) {\n      if (!this._added) {\n        shared_1.setUpControl(this._control, this);\n        this._control.updateValueAndValidity({emitEvent: false});\n        this._added = true;\n      }\n      if (shared_1.isPropertyUpdated(changes, this.viewModel)) {\n        this._control.updateValue(this.model);\n        this.viewModel = this.model;\n      }\n    };\n    Object.defineProperty(NgModel.prototype, \"control\", {\n      get: function() {\n        return this._control;\n      },\n      enumerable: true,\n      configurable: true\n    });\n    Object.defineProperty(NgModel.prototype, \"path\", {\n      get: function() {\n        return [];\n      },\n      enumerable: true,\n      configurable: true\n    });\n    Object.defineProperty(NgModel.prototype, \"validator\", {\n      get: function() {\n        return shared_1.composeValidators(this._validators);\n      },\n      enumerable: true,\n      configurable: true\n    });\n    Object.defineProperty(NgModel.prototype, \"asyncValidator\", {\n      get: function() {\n        return shared_1.composeAsyncValidators(this._asyncValidators);\n      },\n      enumerable: true,\n      configurable: true\n    });\n    NgModel.prototype.viewToModelUpdate = function(newValue) {\n      this.viewModel = newValue;\n      async_1.ObservableWrapper.callNext(this.update, newValue);\n    };\n    NgModel = __decorate([metadata_1.Directive({\n      selector: '[ng-model]:not([ng-control]):not([ng-form-control])',\n      bindings: [formControlBinding],\n      inputs: ['model: ngModel'],\n      outputs: ['update: ngModelChange'],\n      exportAs: 'form'\n    }), __param(0, di_1.Optional()), __param(0, di_1.Inject(validators_1.NG_VALIDATORS)), __param(1, di_1.Optional()), __param(1, di_1.Inject(validators_1.NG_ASYNC_VALIDATORS)), __param(2, di_1.Optional()), __param(2, di_1.Inject(control_value_accessor_1.NG_VALUE_ACCESSOR)), __metadata('design:paramtypes', [Array, Array, Array])], NgModel);\n    return NgModel;\n  })(ng_control_1.NgControl);\n  exports.NgModel = NgModel;\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"angular2/src/common/forms/directives/ng_control_group\", [\"angular2/src/core/metadata\", \"angular2/src/core/di\", \"angular2/src/facade/lang\", \"angular2/src/common/forms/directives/control_container\", \"angular2/src/common/forms/directives/shared\", \"angular2/src/common/forms/validators\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  var __extends = (this && this.__extends) || function(d, b) {\n    for (var p in b)\n      if (b.hasOwnProperty(p))\n        d[p] = b[p];\n    function __() {\n      this.constructor = d;\n    }\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n  };\n  var __decorate = (this && this.__decorate) || function(decorators, target, key, desc) {\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\")\n      return Reflect.decorate(decorators, target, key, desc);\n    switch (arguments.length) {\n      case 2:\n        return decorators.reduceRight(function(o, d) {\n          return (d && d(o)) || o;\n        }, target);\n      case 3:\n        return decorators.reduceRight(function(o, d) {\n          return (d && d(target, key)), void 0;\n        }, void 0);\n      case 4:\n        return decorators.reduceRight(function(o, d) {\n          return (d && d(target, key, o)) || o;\n        }, desc);\n    }\n  };\n  var __metadata = (this && this.__metadata) || function(k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\")\n      return Reflect.metadata(k, v);\n  };\n  var __param = (this && this.__param) || function(paramIndex, decorator) {\n    return function(target, key) {\n      decorator(target, key, paramIndex);\n    };\n  };\n  var metadata_1 = require(\"angular2/src/core/metadata\");\n  var di_1 = require(\"angular2/src/core/di\");\n  var lang_1 = require(\"angular2/src/facade/lang\");\n  var control_container_1 = require(\"angular2/src/common/forms/directives/control_container\");\n  var shared_1 = require(\"angular2/src/common/forms/directives/shared\");\n  var validators_1 = require(\"angular2/src/common/forms/validators\");\n  var controlGroupProvider = lang_1.CONST_EXPR(new di_1.Provider(control_container_1.ControlContainer, {useExisting: di_1.forwardRef(function() {\n      return NgControlGroup;\n    })}));\n  var NgControlGroup = (function(_super) {\n    __extends(NgControlGroup, _super);\n    function NgControlGroup(parent, _validators, _asyncValidators) {\n      _super.call(this);\n      this._validators = _validators;\n      this._asyncValidators = _asyncValidators;\n      this._parent = parent;\n    }\n    NgControlGroup.prototype.onInit = function() {\n      this.formDirective.addControlGroup(this);\n    };\n    NgControlGroup.prototype.onDestroy = function() {\n      this.formDirective.removeControlGroup(this);\n    };\n    Object.defineProperty(NgControlGroup.prototype, \"control\", {\n      get: function() {\n        return this.formDirective.getControlGroup(this);\n      },\n      enumerable: true,\n      configurable: true\n    });\n    Object.defineProperty(NgControlGroup.prototype, \"path\", {\n      get: function() {\n        return shared_1.controlPath(this.name, this._parent);\n      },\n      enumerable: true,\n      configurable: true\n    });\n    Object.defineProperty(NgControlGroup.prototype, \"formDirective\", {\n      get: function() {\n        return this._parent.formDirective;\n      },\n      enumerable: true,\n      configurable: true\n    });\n    Object.defineProperty(NgControlGroup.prototype, \"validator\", {\n      get: function() {\n        return shared_1.composeValidators(this._validators);\n      },\n      enumerable: true,\n      configurable: true\n    });\n    Object.defineProperty(NgControlGroup.prototype, \"asyncValidator\", {\n      get: function() {\n        return shared_1.composeAsyncValidators(this._asyncValidators);\n      },\n      enumerable: true,\n      configurable: true\n    });\n    NgControlGroup = __decorate([metadata_1.Directive({\n      selector: '[ng-control-group]',\n      providers: [controlGroupProvider],\n      inputs: ['name: ng-control-group'],\n      exportAs: 'form'\n    }), __param(0, di_1.Host()), __param(0, di_1.SkipSelf()), __param(1, di_1.Optional()), __param(1, di_1.Inject(validators_1.NG_VALIDATORS)), __param(2, di_1.Optional()), __param(2, di_1.Inject(validators_1.NG_ASYNC_VALIDATORS)), __metadata('design:paramtypes', [control_container_1.ControlContainer, Array, Array])], NgControlGroup);\n    return NgControlGroup;\n  })(control_container_1.ControlContainer);\n  exports.NgControlGroup = NgControlGroup;\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"angular2/src/common/forms/directives/ng_form_model\", [\"angular2/src/facade/lang\", \"angular2/src/facade/collection\", \"angular2/src/facade/async\", \"angular2/src/core/metadata\", \"angular2/src/core/di\", \"angular2/src/common/forms/directives/control_container\", \"angular2/src/common/forms/directives/shared\", \"angular2/src/common/forms/validators\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  var __extends = (this && this.__extends) || function(d, b) {\n    for (var p in b)\n      if (b.hasOwnProperty(p))\n        d[p] = b[p];\n    function __() {\n      this.constructor = d;\n    }\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n  };\n  var __decorate = (this && this.__decorate) || function(decorators, target, key, desc) {\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\")\n      return Reflect.decorate(decorators, target, key, desc);\n    switch (arguments.length) {\n      case 2:\n        return decorators.reduceRight(function(o, d) {\n          return (d && d(o)) || o;\n        }, target);\n      case 3:\n        return decorators.reduceRight(function(o, d) {\n          return (d && d(target, key)), void 0;\n        }, void 0);\n      case 4:\n        return decorators.reduceRight(function(o, d) {\n          return (d && d(target, key, o)) || o;\n        }, desc);\n    }\n  };\n  var __metadata = (this && this.__metadata) || function(k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\")\n      return Reflect.metadata(k, v);\n  };\n  var __param = (this && this.__param) || function(paramIndex, decorator) {\n    return function(target, key) {\n      decorator(target, key, paramIndex);\n    };\n  };\n  var lang_1 = require(\"angular2/src/facade/lang\");\n  var collection_1 = require(\"angular2/src/facade/collection\");\n  var async_1 = require(\"angular2/src/facade/async\");\n  var metadata_1 = require(\"angular2/src/core/metadata\");\n  var di_1 = require(\"angular2/src/core/di\");\n  var control_container_1 = require(\"angular2/src/common/forms/directives/control_container\");\n  var shared_1 = require(\"angular2/src/common/forms/directives/shared\");\n  var validators_1 = require(\"angular2/src/common/forms/validators\");\n  var formDirectiveProvider = lang_1.CONST_EXPR(new di_1.Provider(control_container_1.ControlContainer, {useExisting: di_1.forwardRef(function() {\n      return NgFormModel;\n    })}));\n  var NgFormModel = (function(_super) {\n    __extends(NgFormModel, _super);\n    function NgFormModel(_validators, _asyncValidators) {\n      _super.call(this);\n      this._validators = _validators;\n      this._asyncValidators = _asyncValidators;\n      this.form = null;\n      this.directives = [];\n      this.ngSubmit = new async_1.EventEmitter();\n    }\n    NgFormModel.prototype.onChanges = function(changes) {\n      if (collection_1.StringMapWrapper.contains(changes, \"form\")) {\n        var sync = shared_1.composeValidators(this._validators);\n        this.form.validator = validators_1.Validators.compose([this.form.validator, sync]);\n        var async = shared_1.composeAsyncValidators(this._asyncValidators);\n        this.form.asyncValidator = validators_1.Validators.composeAsync([this.form.asyncValidator, async]);\n        this.form.updateValueAndValidity({\n          onlySelf: true,\n          emitEvent: false\n        });\n      }\n      this._updateDomValue();\n    };\n    Object.defineProperty(NgFormModel.prototype, \"formDirective\", {\n      get: function() {\n        return this;\n      },\n      enumerable: true,\n      configurable: true\n    });\n    Object.defineProperty(NgFormModel.prototype, \"control\", {\n      get: function() {\n        return this.form;\n      },\n      enumerable: true,\n      configurable: true\n    });\n    Object.defineProperty(NgFormModel.prototype, \"path\", {\n      get: function() {\n        return [];\n      },\n      enumerable: true,\n      configurable: true\n    });\n    NgFormModel.prototype.addControl = function(dir) {\n      var ctrl = this.form.find(dir.path);\n      shared_1.setUpControl(ctrl, dir);\n      ctrl.updateValueAndValidity({emitEvent: false});\n      this.directives.push(dir);\n    };\n    NgFormModel.prototype.getControl = function(dir) {\n      return this.form.find(dir.path);\n    };\n    NgFormModel.prototype.removeControl = function(dir) {\n      collection_1.ListWrapper.remove(this.directives, dir);\n    };\n    NgFormModel.prototype.addControlGroup = function(dir) {\n      var ctrl = this.form.find(dir.path);\n      shared_1.setUpControlGroup(ctrl, dir);\n      ctrl.updateValueAndValidity({emitEvent: false});\n    };\n    NgFormModel.prototype.removeControlGroup = function(dir) {};\n    NgFormModel.prototype.getControlGroup = function(dir) {\n      return this.form.find(dir.path);\n    };\n    NgFormModel.prototype.updateModel = function(dir, value) {\n      var ctrl = this.form.find(dir.path);\n      ctrl.updateValue(value);\n    };\n    NgFormModel.prototype.onSubmit = function() {\n      async_1.ObservableWrapper.callNext(this.ngSubmit, null);\n      return false;\n    };\n    NgFormModel.prototype._updateDomValue = function() {\n      var _this = this;\n      this.directives.forEach(function(dir) {\n        var ctrl = _this.form.find(dir.path);\n        dir.valueAccessor.writeValue(ctrl.value);\n      });\n    };\n    NgFormModel = __decorate([metadata_1.Directive({\n      selector: '[ng-form-model]',\n      bindings: [formDirectiveProvider],\n      inputs: ['form: ng-form-model'],\n      host: {'(submit)': 'onSubmit()'},\n      outputs: ['ngSubmit'],\n      exportAs: 'form'\n    }), __param(0, di_1.Optional()), __param(0, di_1.Inject(validators_1.NG_VALIDATORS)), __param(1, di_1.Optional()), __param(1, di_1.Inject(validators_1.NG_ASYNC_VALIDATORS)), __metadata('design:paramtypes', [Array, Array])], NgFormModel);\n    return NgFormModel;\n  })(control_container_1.ControlContainer);\n  exports.NgFormModel = NgFormModel;\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"angular2/src/common/forms/directives/ng_form\", [\"angular2/src/facade/async\", \"angular2/src/facade/collection\", \"angular2/src/facade/lang\", \"angular2/src/core/metadata\", \"angular2/src/core/di\", \"angular2/src/common/forms/directives/control_container\", \"angular2/src/common/forms/model\", \"angular2/src/common/forms/directives/shared\", \"angular2/src/common/forms/validators\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  var __extends = (this && this.__extends) || function(d, b) {\n    for (var p in b)\n      if (b.hasOwnProperty(p))\n        d[p] = b[p];\n    function __() {\n      this.constructor = d;\n    }\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n  };\n  var __decorate = (this && this.__decorate) || function(decorators, target, key, desc) {\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\")\n      return Reflect.decorate(decorators, target, key, desc);\n    switch (arguments.length) {\n      case 2:\n        return decorators.reduceRight(function(o, d) {\n          return (d && d(o)) || o;\n        }, target);\n      case 3:\n        return decorators.reduceRight(function(o, d) {\n          return (d && d(target, key)), void 0;\n        }, void 0);\n      case 4:\n        return decorators.reduceRight(function(o, d) {\n          return (d && d(target, key, o)) || o;\n        }, desc);\n    }\n  };\n  var __metadata = (this && this.__metadata) || function(k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\")\n      return Reflect.metadata(k, v);\n  };\n  var __param = (this && this.__param) || function(paramIndex, decorator) {\n    return function(target, key) {\n      decorator(target, key, paramIndex);\n    };\n  };\n  var async_1 = require(\"angular2/src/facade/async\");\n  var collection_1 = require(\"angular2/src/facade/collection\");\n  var lang_1 = require(\"angular2/src/facade/lang\");\n  var metadata_1 = require(\"angular2/src/core/metadata\");\n  var di_1 = require(\"angular2/src/core/di\");\n  var control_container_1 = require(\"angular2/src/common/forms/directives/control_container\");\n  var model_1 = require(\"angular2/src/common/forms/model\");\n  var shared_1 = require(\"angular2/src/common/forms/directives/shared\");\n  var validators_1 = require(\"angular2/src/common/forms/validators\");\n  var formDirectiveProvider = lang_1.CONST_EXPR(new di_1.Provider(control_container_1.ControlContainer, {useExisting: di_1.forwardRef(function() {\n      return NgForm;\n    })}));\n  var NgForm = (function(_super) {\n    __extends(NgForm, _super);\n    function NgForm(validators, asyncValidators) {\n      _super.call(this);\n      this.ngSubmit = new async_1.EventEmitter();\n      this.form = new model_1.ControlGroup({}, null, shared_1.composeValidators(validators), shared_1.composeAsyncValidators(asyncValidators));\n    }\n    Object.defineProperty(NgForm.prototype, \"formDirective\", {\n      get: function() {\n        return this;\n      },\n      enumerable: true,\n      configurable: true\n    });\n    Object.defineProperty(NgForm.prototype, \"control\", {\n      get: function() {\n        return this.form;\n      },\n      enumerable: true,\n      configurable: true\n    });\n    Object.defineProperty(NgForm.prototype, \"path\", {\n      get: function() {\n        return [];\n      },\n      enumerable: true,\n      configurable: true\n    });\n    Object.defineProperty(NgForm.prototype, \"controls\", {\n      get: function() {\n        return this.form.controls;\n      },\n      enumerable: true,\n      configurable: true\n    });\n    NgForm.prototype.addControl = function(dir) {\n      var _this = this;\n      async_1.PromiseWrapper.scheduleMicrotask(function() {\n        var container = _this._findContainer(dir.path);\n        var ctrl = new model_1.Control();\n        shared_1.setUpControl(ctrl, dir);\n        container.addControl(dir.name, ctrl);\n        ctrl.updateValueAndValidity({emitEvent: false});\n      });\n    };\n    NgForm.prototype.getControl = function(dir) {\n      return this.form.find(dir.path);\n    };\n    NgForm.prototype.removeControl = function(dir) {\n      var _this = this;\n      async_1.PromiseWrapper.scheduleMicrotask(function() {\n        var container = _this._findContainer(dir.path);\n        if (lang_1.isPresent(container)) {\n          container.removeControl(dir.name);\n          container.updateValueAndValidity({emitEvent: false});\n        }\n      });\n    };\n    NgForm.prototype.addControlGroup = function(dir) {\n      var _this = this;\n      async_1.PromiseWrapper.scheduleMicrotask(function() {\n        var container = _this._findContainer(dir.path);\n        var group = new model_1.ControlGroup({});\n        shared_1.setUpControlGroup(group, dir);\n        container.addControl(dir.name, group);\n        group.updateValueAndValidity({emitEvent: false});\n      });\n    };\n    NgForm.prototype.removeControlGroup = function(dir) {\n      var _this = this;\n      async_1.PromiseWrapper.scheduleMicrotask(function() {\n        var container = _this._findContainer(dir.path);\n        if (lang_1.isPresent(container)) {\n          container.removeControl(dir.name);\n          container.updateValueAndValidity({emitEvent: false});\n        }\n      });\n    };\n    NgForm.prototype.getControlGroup = function(dir) {\n      return this.form.find(dir.path);\n    };\n    NgForm.prototype.updateModel = function(dir, value) {\n      var _this = this;\n      async_1.PromiseWrapper.scheduleMicrotask(function() {\n        var ctrl = _this.form.find(dir.path);\n        ctrl.updateValue(value);\n      });\n    };\n    NgForm.prototype.onSubmit = function() {\n      async_1.ObservableWrapper.callNext(this.ngSubmit, null);\n      return false;\n    };\n    NgForm.prototype._findContainer = function(path) {\n      path.pop();\n      return collection_1.ListWrapper.isEmpty(path) ? this.form : this.form.find(path);\n    };\n    NgForm = __decorate([metadata_1.Directive({\n      selector: 'form:not([ng-no-form]):not([ng-form-model]),ng-form,[ng-form]',\n      bindings: [formDirectiveProvider],\n      host: {'(submit)': 'onSubmit()'},\n      outputs: ['ngSubmit'],\n      exportAs: 'form'\n    }), __param(0, di_1.Optional()), __param(0, di_1.Inject(validators_1.NG_VALIDATORS)), __param(1, di_1.Optional()), __param(1, di_1.Inject(validators_1.NG_ASYNC_VALIDATORS)), __metadata('design:paramtypes', [Array, Array])], NgForm);\n    return NgForm;\n  })(control_container_1.ControlContainer);\n  exports.NgForm = NgForm;\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"angular2/src/common/forms/directives/ng_control_status\", [\"angular2/src/core/metadata\", \"angular2/src/core/di\", \"angular2/src/common/forms/directives/ng_control\", \"angular2/src/facade/lang\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  var __decorate = (this && this.__decorate) || function(decorators, target, key, desc) {\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\")\n      return Reflect.decorate(decorators, target, key, desc);\n    switch (arguments.length) {\n      case 2:\n        return decorators.reduceRight(function(o, d) {\n          return (d && d(o)) || o;\n        }, target);\n      case 3:\n        return decorators.reduceRight(function(o, d) {\n          return (d && d(target, key)), void 0;\n        }, void 0);\n      case 4:\n        return decorators.reduceRight(function(o, d) {\n          return (d && d(target, key, o)) || o;\n        }, desc);\n    }\n  };\n  var __metadata = (this && this.__metadata) || function(k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\")\n      return Reflect.metadata(k, v);\n  };\n  var __param = (this && this.__param) || function(paramIndex, decorator) {\n    return function(target, key) {\n      decorator(target, key, paramIndex);\n    };\n  };\n  var metadata_1 = require(\"angular2/src/core/metadata\");\n  var di_1 = require(\"angular2/src/core/di\");\n  var ng_control_1 = require(\"angular2/src/common/forms/directives/ng_control\");\n  var lang_1 = require(\"angular2/src/facade/lang\");\n  var NgControlStatus = (function() {\n    function NgControlStatus(cd) {\n      this._cd = cd;\n    }\n    Object.defineProperty(NgControlStatus.prototype, \"ngClassUntouched\", {\n      get: function() {\n        return lang_1.isPresent(this._cd.control) ? this._cd.control.untouched : false;\n      },\n      enumerable: true,\n      configurable: true\n    });\n    Object.defineProperty(NgControlStatus.prototype, \"ngClassTouched\", {\n      get: function() {\n        return lang_1.isPresent(this._cd.control) ? this._cd.control.touched : false;\n      },\n      enumerable: true,\n      configurable: true\n    });\n    Object.defineProperty(NgControlStatus.prototype, \"ngClassPristine\", {\n      get: function() {\n        return lang_1.isPresent(this._cd.control) ? this._cd.control.pristine : false;\n      },\n      enumerable: true,\n      configurable: true\n    });\n    Object.defineProperty(NgControlStatus.prototype, \"ngClassDirty\", {\n      get: function() {\n        return lang_1.isPresent(this._cd.control) ? this._cd.control.dirty : false;\n      },\n      enumerable: true,\n      configurable: true\n    });\n    Object.defineProperty(NgControlStatus.prototype, \"ngClassValid\", {\n      get: function() {\n        return lang_1.isPresent(this._cd.control) ? this._cd.control.valid : false;\n      },\n      enumerable: true,\n      configurable: true\n    });\n    Object.defineProperty(NgControlStatus.prototype, \"ngClassInvalid\", {\n      get: function() {\n        return lang_1.isPresent(this._cd.control) ? !this._cd.control.valid : false;\n      },\n      enumerable: true,\n      configurable: true\n    });\n    NgControlStatus = __decorate([metadata_1.Directive({\n      selector: '[ng-control],[ng-model],[ng-form-control]',\n      host: {\n        '[class.ng-untouched]': 'ngClassUntouched',\n        '[class.ng-touched]': 'ngClassTouched',\n        '[class.ng-pristine]': 'ngClassPristine',\n        '[class.ng-dirty]': 'ngClassDirty',\n        '[class.ng-valid]': 'ngClassValid',\n        '[class.ng-invalid]': 'ngClassInvalid'\n      }\n    }), __param(0, di_1.Self()), __metadata('design:paramtypes', [ng_control_1.NgControl])], NgControlStatus);\n    return NgControlStatus;\n  })();\n  exports.NgControlStatus = NgControlStatus;\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"angular2/src/common/forms/directives/validators\", [\"angular2/src/core/di\", \"angular2/src/facade/lang\", \"angular2/src/core/metadata\", \"angular2/src/common/forms/validators\", \"angular2/src/facade/lang\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  var __decorate = (this && this.__decorate) || function(decorators, target, key, desc) {\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\")\n      return Reflect.decorate(decorators, target, key, desc);\n    switch (arguments.length) {\n      case 2:\n        return decorators.reduceRight(function(o, d) {\n          return (d && d(o)) || o;\n        }, target);\n      case 3:\n        return decorators.reduceRight(function(o, d) {\n          return (d && d(target, key)), void 0;\n        }, void 0);\n      case 4:\n        return decorators.reduceRight(function(o, d) {\n          return (d && d(target, key, o)) || o;\n        }, desc);\n    }\n  };\n  var __metadata = (this && this.__metadata) || function(k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\")\n      return Reflect.metadata(k, v);\n  };\n  var __param = (this && this.__param) || function(paramIndex, decorator) {\n    return function(target, key) {\n      decorator(target, key, paramIndex);\n    };\n  };\n  var di_1 = require(\"angular2/src/core/di\");\n  var lang_1 = require(\"angular2/src/facade/lang\");\n  var metadata_1 = require(\"angular2/src/core/metadata\");\n  var validators_1 = require(\"angular2/src/common/forms/validators\");\n  var lang_2 = require(\"angular2/src/facade/lang\");\n  var REQUIRED_VALIDATOR = lang_1.CONST_EXPR(new di_1.Provider(validators_1.NG_VALIDATORS, {\n    useValue: validators_1.Validators.required,\n    multi: true\n  }));\n  var RequiredValidator = (function() {\n    function RequiredValidator() {}\n    RequiredValidator = __decorate([metadata_1.Directive({\n      selector: '[required][ng-control],[required][ng-form-control],[required][ng-model]',\n      providers: [REQUIRED_VALIDATOR]\n    }), __metadata('design:paramtypes', [])], RequiredValidator);\n    return RequiredValidator;\n  })();\n  exports.RequiredValidator = RequiredValidator;\n  var MIN_LENGTH_VALIDATOR = lang_1.CONST_EXPR(new di_1.Provider(validators_1.NG_VALIDATORS, {\n    useExisting: di_1.forwardRef(function() {\n      return MinLengthValidator;\n    }),\n    multi: true\n  }));\n  var MinLengthValidator = (function() {\n    function MinLengthValidator(minLength) {\n      this._validator = validators_1.Validators.minLength(lang_2.NumberWrapper.parseInt(minLength, 10));\n    }\n    MinLengthValidator.prototype.validate = function(c) {\n      return this._validator(c);\n    };\n    MinLengthValidator = __decorate([metadata_1.Directive({\n      selector: '[minlength][ng-control],[minlength][ng-form-control],[minlength][ng-model]',\n      providers: [MIN_LENGTH_VALIDATOR]\n    }), __param(0, metadata_1.Attribute(\"minlength\")), __metadata('design:paramtypes', [String])], MinLengthValidator);\n    return MinLengthValidator;\n  })();\n  exports.MinLengthValidator = MinLengthValidator;\n  var MAX_LENGTH_VALIDATOR = lang_1.CONST_EXPR(new di_1.Provider(validators_1.NG_VALIDATORS, {\n    useExisting: di_1.forwardRef(function() {\n      return MaxLengthValidator;\n    }),\n    multi: true\n  }));\n  var MaxLengthValidator = (function() {\n    function MaxLengthValidator(minLength) {\n      this._validator = validators_1.Validators.maxLength(lang_2.NumberWrapper.parseInt(minLength, 10));\n    }\n    MaxLengthValidator.prototype.validate = function(c) {\n      return this._validator(c);\n    };\n    MaxLengthValidator = __decorate([metadata_1.Directive({\n      selector: '[maxlength][ng-control],[maxlength][ng-form-control],[maxlength][ng-model]',\n      providers: [MAX_LENGTH_VALIDATOR]\n    }), __param(0, metadata_1.Attribute(\"maxlength\")), __metadata('design:paramtypes', [String])], MaxLengthValidator);\n    return MaxLengthValidator;\n  })();\n  exports.MaxLengthValidator = MaxLengthValidator;\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"angular2/src/common/forms/form_builder\", [\"angular2/src/core/di\", \"angular2/src/facade/collection\", \"angular2/src/facade/lang\", \"angular2/src/common/forms/model\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  var __decorate = (this && this.__decorate) || function(decorators, target, key, desc) {\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\")\n      return Reflect.decorate(decorators, target, key, desc);\n    switch (arguments.length) {\n      case 2:\n        return decorators.reduceRight(function(o, d) {\n          return (d && d(o)) || o;\n        }, target);\n      case 3:\n        return decorators.reduceRight(function(o, d) {\n          return (d && d(target, key)), void 0;\n        }, void 0);\n      case 4:\n        return decorators.reduceRight(function(o, d) {\n          return (d && d(target, key, o)) || o;\n        }, desc);\n    }\n  };\n  var __metadata = (this && this.__metadata) || function(k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\")\n      return Reflect.metadata(k, v);\n  };\n  var di_1 = require(\"angular2/src/core/di\");\n  var collection_1 = require(\"angular2/src/facade/collection\");\n  var lang_1 = require(\"angular2/src/facade/lang\");\n  var modelModule = require(\"angular2/src/common/forms/model\");\n  var FormBuilder = (function() {\n    function FormBuilder() {}\n    FormBuilder.prototype.group = function(controlsConfig, extra) {\n      if (extra === void 0) {\n        extra = null;\n      }\n      var controls = this._reduceControls(controlsConfig);\n      var optionals = lang_1.isPresent(extra) ? collection_1.StringMapWrapper.get(extra, \"optionals\") : null;\n      var validator = lang_1.isPresent(extra) ? collection_1.StringMapWrapper.get(extra, \"validator\") : null;\n      var asyncValidator = lang_1.isPresent(extra) ? collection_1.StringMapWrapper.get(extra, \"asyncValidator\") : null;\n      return new modelModule.ControlGroup(controls, optionals, validator, asyncValidator);\n    };\n    FormBuilder.prototype.control = function(value, validator, asyncValidator) {\n      if (validator === void 0) {\n        validator = null;\n      }\n      if (asyncValidator === void 0) {\n        asyncValidator = null;\n      }\n      return new modelModule.Control(value, validator, asyncValidator);\n    };\n    FormBuilder.prototype.array = function(controlsConfig, validator, asyncValidator) {\n      var _this = this;\n      if (validator === void 0) {\n        validator = null;\n      }\n      if (asyncValidator === void 0) {\n        asyncValidator = null;\n      }\n      var controls = controlsConfig.map(function(c) {\n        return _this._createControl(c);\n      });\n      return new modelModule.ControlArray(controls, validator, asyncValidator);\n    };\n    FormBuilder.prototype._reduceControls = function(controlsConfig) {\n      var _this = this;\n      var controls = {};\n      collection_1.StringMapWrapper.forEach(controlsConfig, function(controlConfig, controlName) {\n        controls[controlName] = _this._createControl(controlConfig);\n      });\n      return controls;\n    };\n    FormBuilder.prototype._createControl = function(controlConfig) {\n      if (controlConfig instanceof modelModule.Control || controlConfig instanceof modelModule.ControlGroup || controlConfig instanceof modelModule.ControlArray) {\n        return controlConfig;\n      } else if (lang_1.isArray(controlConfig)) {\n        var value = controlConfig[0];\n        var validator = controlConfig.length > 1 ? controlConfig[1] : null;\n        var asyncValidator = controlConfig.length > 2 ? controlConfig[2] : null;\n        return this.control(value, validator, asyncValidator);\n      } else {\n        return this.control(controlConfig);\n      }\n    };\n    FormBuilder = __decorate([di_1.Injectable(), __metadata('design:paramtypes', [])], FormBuilder);\n    return FormBuilder;\n  })();\n  exports.FormBuilder = FormBuilder;\n  exports.FORM_PROVIDERS = lang_1.CONST_EXPR([FormBuilder]);\n  exports.FORM_BINDINGS = exports.FORM_PROVIDERS;\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"angular2/src/common/common_directives\", [\"angular2/src/facade/lang\", \"angular2/src/common/forms\", \"angular2/src/common/directives\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  var lang_1 = require(\"angular2/src/facade/lang\");\n  var forms_1 = require(\"angular2/src/common/forms\");\n  var directives_1 = require(\"angular2/src/common/directives\");\n  exports.COMMON_DIRECTIVES = lang_1.CONST_EXPR([directives_1.CORE_DIRECTIVES, forms_1.FORM_DIRECTIVES]);\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"angular2/src/core/util\", [\"angular2/src/core/util/decorators\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  var decorators_1 = require(\"angular2/src/core/util/decorators\");\n  exports.Class = decorators_1.Class;\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"angular2/src/facade/facade\", [\"angular2/src/facade/lang\", \"angular2/src/facade/async\", \"angular2/src/facade/exceptions\", \"angular2/src/facade/exception_handler\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  var lang_1 = require(\"angular2/src/facade/lang\");\n  exports.Type = lang_1.Type;\n  var async_1 = require(\"angular2/src/facade/async\");\n  exports.Observable = async_1.Observable;\n  exports.EventEmitter = async_1.EventEmitter;\n  var exceptions_1 = require(\"angular2/src/facade/exceptions\");\n  exports.WrappedException = exceptions_1.WrappedException;\n  var exception_handler_1 = require(\"angular2/src/facade/exception_handler\");\n  exports.ExceptionHandler = exception_handler_1.ExceptionHandler;\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"angular2/src/compiler/selector\", [\"angular2/src/facade/collection\", \"angular2/src/facade/lang\", \"angular2/src/facade/exceptions\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  var collection_1 = require(\"angular2/src/facade/collection\");\n  var lang_1 = require(\"angular2/src/facade/lang\");\n  var exceptions_1 = require(\"angular2/src/facade/exceptions\");\n  var _EMPTY_ATTR_VALUE = '';\n  var _SELECTOR_REGEXP = lang_1.RegExpWrapper.create('(\\\\:not\\\\()|' + '([-\\\\w]+)|' + '(?:\\\\.([-\\\\w]+))|' + '(?:\\\\[([-\\\\w*]+)(?:=([^\\\\]]*))?\\\\])|' + '(\\\\))|' + '(\\\\s*,\\\\s*)');\n  var CssSelector = (function() {\n    function CssSelector() {\n      this.element = null;\n      this.classNames = [];\n      this.attrs = [];\n      this.notSelectors = [];\n    }\n    CssSelector.parse = function(selector) {\n      var results = [];\n      var _addResult = function(res, cssSel) {\n        if (cssSel.notSelectors.length > 0 && lang_1.isBlank(cssSel.element) && collection_1.ListWrapper.isEmpty(cssSel.classNames) && collection_1.ListWrapper.isEmpty(cssSel.attrs)) {\n          cssSel.element = \"*\";\n        }\n        res.push(cssSel);\n      };\n      var cssSelector = new CssSelector();\n      var matcher = lang_1.RegExpWrapper.matcher(_SELECTOR_REGEXP, selector);\n      var match;\n      var current = cssSelector;\n      var inNot = false;\n      while (lang_1.isPresent(match = lang_1.RegExpMatcherWrapper.next(matcher))) {\n        if (lang_1.isPresent(match[1])) {\n          if (inNot) {\n            throw new exceptions_1.BaseException('Nesting :not is not allowed in a selector');\n          }\n          inNot = true;\n          current = new CssSelector();\n          cssSelector.notSelectors.push(current);\n        }\n        if (lang_1.isPresent(match[2])) {\n          current.setElement(match[2]);\n        }\n        if (lang_1.isPresent(match[3])) {\n          current.addClassName(match[3]);\n        }\n        if (lang_1.isPresent(match[4])) {\n          current.addAttribute(match[4], match[5]);\n        }\n        if (lang_1.isPresent(match[6])) {\n          inNot = false;\n          current = cssSelector;\n        }\n        if (lang_1.isPresent(match[7])) {\n          if (inNot) {\n            throw new exceptions_1.BaseException('Multiple selectors in :not are not supported');\n          }\n          _addResult(results, cssSelector);\n          cssSelector = current = new CssSelector();\n        }\n      }\n      _addResult(results, cssSelector);\n      return results;\n    };\n    CssSelector.prototype.isElementSelector = function() {\n      return lang_1.isPresent(this.element) && collection_1.ListWrapper.isEmpty(this.classNames) && collection_1.ListWrapper.isEmpty(this.attrs) && this.notSelectors.length === 0;\n    };\n    CssSelector.prototype.setElement = function(element) {\n      if (element === void 0) {\n        element = null;\n      }\n      if (lang_1.isPresent(element)) {\n        element = element.toLowerCase();\n      }\n      this.element = element;\n    };\n    CssSelector.prototype.getMatchingElementTemplate = function() {\n      var tagName = lang_1.isPresent(this.element) ? this.element : 'div';\n      var classAttr = this.classNames.length > 0 ? \" class=\\\"\" + this.classNames.join(' ') + \"\\\"\" : '';\n      var attrs = '';\n      for (var i = 0; i < this.attrs.length; i += 2) {\n        var attrName = this.attrs[i];\n        var attrValue = this.attrs[i + 1] !== '' ? \"=\\\"\" + this.attrs[i + 1] + \"\\\"\" : '';\n        attrs += \" \" + attrName + attrValue;\n      }\n      return \"<\" + tagName + classAttr + attrs + \"></\" + tagName + \">\";\n    };\n    CssSelector.prototype.addAttribute = function(name, value) {\n      if (value === void 0) {\n        value = _EMPTY_ATTR_VALUE;\n      }\n      this.attrs.push(name.toLowerCase());\n      if (lang_1.isPresent(value)) {\n        value = value.toLowerCase();\n      } else {\n        value = _EMPTY_ATTR_VALUE;\n      }\n      this.attrs.push(value);\n    };\n    CssSelector.prototype.addClassName = function(name) {\n      this.classNames.push(name.toLowerCase());\n    };\n    CssSelector.prototype.toString = function() {\n      var res = '';\n      if (lang_1.isPresent(this.element)) {\n        res += this.element;\n      }\n      if (lang_1.isPresent(this.classNames)) {\n        for (var i = 0; i < this.classNames.length; i++) {\n          res += '.' + this.classNames[i];\n        }\n      }\n      if (lang_1.isPresent(this.attrs)) {\n        for (var i = 0; i < this.attrs.length; ) {\n          var attrName = this.attrs[i++];\n          var attrValue = this.attrs[i++];\n          res += '[' + attrName;\n          if (attrValue.length > 0) {\n            res += '=' + attrValue;\n          }\n          res += ']';\n        }\n      }\n      this.notSelectors.forEach(function(notSelector) {\n        return res += \":not(\" + notSelector + \")\";\n      });\n      return res;\n    };\n    return CssSelector;\n  })();\n  exports.CssSelector = CssSelector;\n  var SelectorMatcher = (function() {\n    function SelectorMatcher() {\n      this._elementMap = new collection_1.Map();\n      this._elementPartialMap = new collection_1.Map();\n      this._classMap = new collection_1.Map();\n      this._classPartialMap = new collection_1.Map();\n      this._attrValueMap = new collection_1.Map();\n      this._attrValuePartialMap = new collection_1.Map();\n      this._listContexts = [];\n    }\n    SelectorMatcher.createNotMatcher = function(notSelectors) {\n      var notMatcher = new SelectorMatcher();\n      notMatcher.addSelectables(notSelectors, null);\n      return notMatcher;\n    };\n    SelectorMatcher.prototype.addSelectables = function(cssSelectors, callbackCtxt) {\n      var listContext = null;\n      if (cssSelectors.length > 1) {\n        listContext = new SelectorListContext(cssSelectors);\n        this._listContexts.push(listContext);\n      }\n      for (var i = 0; i < cssSelectors.length; i++) {\n        this._addSelectable(cssSelectors[i], callbackCtxt, listContext);\n      }\n    };\n    SelectorMatcher.prototype._addSelectable = function(cssSelector, callbackCtxt, listContext) {\n      var matcher = this;\n      var element = cssSelector.element;\n      var classNames = cssSelector.classNames;\n      var attrs = cssSelector.attrs;\n      var selectable = new SelectorContext(cssSelector, callbackCtxt, listContext);\n      if (lang_1.isPresent(element)) {\n        var isTerminal = attrs.length === 0 && classNames.length === 0;\n        if (isTerminal) {\n          this._addTerminal(matcher._elementMap, element, selectable);\n        } else {\n          matcher = this._addPartial(matcher._elementPartialMap, element);\n        }\n      }\n      if (lang_1.isPresent(classNames)) {\n        for (var index = 0; index < classNames.length; index++) {\n          var isTerminal = attrs.length === 0 && index === classNames.length - 1;\n          var className = classNames[index];\n          if (isTerminal) {\n            this._addTerminal(matcher._classMap, className, selectable);\n          } else {\n            matcher = this._addPartial(matcher._classPartialMap, className);\n          }\n        }\n      }\n      if (lang_1.isPresent(attrs)) {\n        for (var index = 0; index < attrs.length; ) {\n          var isTerminal = index === attrs.length - 2;\n          var attrName = attrs[index++];\n          var attrValue = attrs[index++];\n          if (isTerminal) {\n            var terminalMap = matcher._attrValueMap;\n            var terminalValuesMap = terminalMap.get(attrName);\n            if (lang_1.isBlank(terminalValuesMap)) {\n              terminalValuesMap = new collection_1.Map();\n              terminalMap.set(attrName, terminalValuesMap);\n            }\n            this._addTerminal(terminalValuesMap, attrValue, selectable);\n          } else {\n            var parttialMap = matcher._attrValuePartialMap;\n            var partialValuesMap = parttialMap.get(attrName);\n            if (lang_1.isBlank(partialValuesMap)) {\n              partialValuesMap = new collection_1.Map();\n              parttialMap.set(attrName, partialValuesMap);\n            }\n            matcher = this._addPartial(partialValuesMap, attrValue);\n          }\n        }\n      }\n    };\n    SelectorMatcher.prototype._addTerminal = function(map, name, selectable) {\n      var terminalList = map.get(name);\n      if (lang_1.isBlank(terminalList)) {\n        terminalList = [];\n        map.set(name, terminalList);\n      }\n      terminalList.push(selectable);\n    };\n    SelectorMatcher.prototype._addPartial = function(map, name) {\n      var matcher = map.get(name);\n      if (lang_1.isBlank(matcher)) {\n        matcher = new SelectorMatcher();\n        map.set(name, matcher);\n      }\n      return matcher;\n    };\n    SelectorMatcher.prototype.match = function(cssSelector, matchedCallback) {\n      var result = false;\n      var element = cssSelector.element;\n      var classNames = cssSelector.classNames;\n      var attrs = cssSelector.attrs;\n      for (var i = 0; i < this._listContexts.length; i++) {\n        this._listContexts[i].alreadyMatched = false;\n      }\n      result = this._matchTerminal(this._elementMap, element, cssSelector, matchedCallback) || result;\n      result = this._matchPartial(this._elementPartialMap, element, cssSelector, matchedCallback) || result;\n      if (lang_1.isPresent(classNames)) {\n        for (var index = 0; index < classNames.length; index++) {\n          var className = classNames[index];\n          result = this._matchTerminal(this._classMap, className, cssSelector, matchedCallback) || result;\n          result = this._matchPartial(this._classPartialMap, className, cssSelector, matchedCallback) || result;\n        }\n      }\n      if (lang_1.isPresent(attrs)) {\n        for (var index = 0; index < attrs.length; ) {\n          var attrName = attrs[index++];\n          var attrValue = attrs[index++];\n          var terminalValuesMap = this._attrValueMap.get(attrName);\n          if (!lang_1.StringWrapper.equals(attrValue, _EMPTY_ATTR_VALUE)) {\n            result = this._matchTerminal(terminalValuesMap, _EMPTY_ATTR_VALUE, cssSelector, matchedCallback) || result;\n          }\n          result = this._matchTerminal(terminalValuesMap, attrValue, cssSelector, matchedCallback) || result;\n          var partialValuesMap = this._attrValuePartialMap.get(attrName);\n          if (!lang_1.StringWrapper.equals(attrValue, _EMPTY_ATTR_VALUE)) {\n            result = this._matchPartial(partialValuesMap, _EMPTY_ATTR_VALUE, cssSelector, matchedCallback) || result;\n          }\n          result = this._matchPartial(partialValuesMap, attrValue, cssSelector, matchedCallback) || result;\n        }\n      }\n      return result;\n    };\n    SelectorMatcher.prototype._matchTerminal = function(map, name, cssSelector, matchedCallback) {\n      if (lang_1.isBlank(map) || lang_1.isBlank(name)) {\n        return false;\n      }\n      var selectables = map.get(name);\n      var starSelectables = map.get(\"*\");\n      if (lang_1.isPresent(starSelectables)) {\n        selectables = selectables.concat(starSelectables);\n      }\n      if (lang_1.isBlank(selectables)) {\n        return false;\n      }\n      var selectable;\n      var result = false;\n      for (var index = 0; index < selectables.length; index++) {\n        selectable = selectables[index];\n        result = selectable.finalize(cssSelector, matchedCallback) || result;\n      }\n      return result;\n    };\n    SelectorMatcher.prototype._matchPartial = function(map, name, cssSelector, matchedCallback) {\n      if (lang_1.isBlank(map) || lang_1.isBlank(name)) {\n        return false;\n      }\n      var nestedSelector = map.get(name);\n      if (lang_1.isBlank(nestedSelector)) {\n        return false;\n      }\n      return nestedSelector.match(cssSelector, matchedCallback);\n    };\n    return SelectorMatcher;\n  })();\n  exports.SelectorMatcher = SelectorMatcher;\n  var SelectorListContext = (function() {\n    function SelectorListContext(selectors) {\n      this.selectors = selectors;\n      this.alreadyMatched = false;\n    }\n    return SelectorListContext;\n  })();\n  exports.SelectorListContext = SelectorListContext;\n  var SelectorContext = (function() {\n    function SelectorContext(selector, cbContext, listContext) {\n      this.selector = selector;\n      this.cbContext = cbContext;\n      this.listContext = listContext;\n      this.notSelectors = selector.notSelectors;\n    }\n    SelectorContext.prototype.finalize = function(cssSelector, callback) {\n      var result = true;\n      if (this.notSelectors.length > 0 && (lang_1.isBlank(this.listContext) || !this.listContext.alreadyMatched)) {\n        var notMatcher = SelectorMatcher.createNotMatcher(this.notSelectors);\n        result = !notMatcher.match(cssSelector, null);\n      }\n      if (result && lang_1.isPresent(callback) && (lang_1.isBlank(this.listContext) || !this.listContext.alreadyMatched)) {\n        if (lang_1.isPresent(this.listContext)) {\n          this.listContext.alreadyMatched = true;\n        }\n        callback(this.selector, this.cbContext);\n      }\n      return result;\n    };\n    return SelectorContext;\n  })();\n  exports.SelectorContext = SelectorContext;\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"angular2/src/compiler/util\", [\"angular2/src/facade/lang\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  var lang_1 = require(\"angular2/src/facade/lang\");\n  var CAMEL_CASE_REGEXP = /([A-Z])/g;\n  var DASH_CASE_REGEXP = /-([a-z])/g;\n  var SINGLE_QUOTE_ESCAPE_STRING_RE = /'|\\\\|\\n|\\$/g;\n  var DOUBLE_QUOTE_ESCAPE_STRING_RE = /\"|\\\\|\\n|\\$/g;\n  exports.MODULE_SUFFIX = lang_1.IS_DART ? '.dart' : '.js';\n  function camelCaseToDashCase(input) {\n    return lang_1.StringWrapper.replaceAllMapped(input, CAMEL_CASE_REGEXP, function(m) {\n      return '-' + m[1].toLowerCase();\n    });\n  }\n  exports.camelCaseToDashCase = camelCaseToDashCase;\n  function dashCaseToCamelCase(input) {\n    return lang_1.StringWrapper.replaceAllMapped(input, DASH_CASE_REGEXP, function(m) {\n      return m[1].toUpperCase();\n    });\n  }\n  exports.dashCaseToCamelCase = dashCaseToCamelCase;\n  function escapeSingleQuoteString(input) {\n    if (lang_1.isBlank(input)) {\n      return null;\n    }\n    return \"'\" + escapeString(input, SINGLE_QUOTE_ESCAPE_STRING_RE) + \"'\";\n  }\n  exports.escapeSingleQuoteString = escapeSingleQuoteString;\n  function escapeDoubleQuoteString(input) {\n    if (lang_1.isBlank(input)) {\n      return null;\n    }\n    return \"\\\"\" + escapeString(input, DOUBLE_QUOTE_ESCAPE_STRING_RE) + \"\\\"\";\n  }\n  exports.escapeDoubleQuoteString = escapeDoubleQuoteString;\n  function escapeString(input, re) {\n    return lang_1.StringWrapper.replaceAllMapped(input, re, function(match) {\n      if (match[0] == '$') {\n        return lang_1.IS_DART ? '\\\\$' : '$';\n      } else if (match[0] == '\\n') {\n        return '\\\\n';\n      } else {\n        return \"\\\\\" + match[0];\n      }\n    });\n  }\n  function codeGenExportVariable(name) {\n    if (lang_1.IS_DART) {\n      return \"const \" + name + \" = \";\n    } else {\n      return \"var \" + name + \" = exports['\" + name + \"'] = \";\n    }\n  }\n  exports.codeGenExportVariable = codeGenExportVariable;\n  function codeGenConstConstructorCall(name) {\n    if (lang_1.IS_DART) {\n      return \"const \" + name;\n    } else {\n      return \"new \" + name;\n    }\n  }\n  exports.codeGenConstConstructorCall = codeGenConstConstructorCall;\n  function codeGenValueFn(params, value, fnName) {\n    if (fnName === void 0) {\n      fnName = '';\n    }\n    if (lang_1.IS_DART) {\n      return fnName + \"(\" + params.join(',') + \") => \" + value;\n    } else {\n      return \"function \" + fnName + \"(\" + params.join(',') + \") { return \" + value + \"; }\";\n    }\n  }\n  exports.codeGenValueFn = codeGenValueFn;\n  function codeGenToString(expr) {\n    if (lang_1.IS_DART) {\n      return \"'${\" + expr + \"}'\";\n    } else {\n      return expr;\n    }\n  }\n  exports.codeGenToString = codeGenToString;\n  function splitAtColon(input, defaultValues) {\n    var parts = lang_1.StringWrapper.split(input.trim(), /\\s*:\\s*/g);\n    if (parts.length > 1) {\n      return parts;\n    } else {\n      return defaultValues;\n    }\n  }\n  exports.splitAtColon = splitAtColon;\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"angular2/src/compiler/source_module\", [\"angular2/src/facade/lang\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  var lang_1 = require(\"angular2/src/facade/lang\");\n  var MODULE_REGEXP = /#MODULE\\[([^\\]]*)\\]/g;\n  function moduleRef(moduleUrl) {\n    return \"#MODULE[\" + moduleUrl + \"]\";\n  }\n  exports.moduleRef = moduleRef;\n  var SourceModule = (function() {\n    function SourceModule(moduleUrl, sourceWithModuleRefs) {\n      this.moduleUrl = moduleUrl;\n      this.sourceWithModuleRefs = sourceWithModuleRefs;\n    }\n    SourceModule.prototype.getSourceWithImports = function() {\n      var _this = this;\n      var moduleAliases = {};\n      var imports = [];\n      var newSource = lang_1.StringWrapper.replaceAllMapped(this.sourceWithModuleRefs, MODULE_REGEXP, function(match) {\n        var moduleUrl = match[1];\n        var alias = moduleAliases[moduleUrl];\n        if (lang_1.isBlank(alias)) {\n          if (moduleUrl == _this.moduleUrl) {\n            alias = '';\n          } else {\n            alias = \"import\" + imports.length;\n            imports.push([moduleUrl, alias]);\n          }\n          moduleAliases[moduleUrl] = alias;\n        }\n        return alias.length > 0 ? alias + \".\" : '';\n      });\n      return new SourceWithImports(newSource, imports);\n    };\n    return SourceModule;\n  })();\n  exports.SourceModule = SourceModule;\n  var SourceExpression = (function() {\n    function SourceExpression(declarations, expression) {\n      this.declarations = declarations;\n      this.expression = expression;\n    }\n    return SourceExpression;\n  })();\n  exports.SourceExpression = SourceExpression;\n  var SourceExpressions = (function() {\n    function SourceExpressions(declarations, expressions) {\n      this.declarations = declarations;\n      this.expressions = expressions;\n    }\n    return SourceExpressions;\n  })();\n  exports.SourceExpressions = SourceExpressions;\n  var SourceWithImports = (function() {\n    function SourceWithImports(source, imports) {\n      this.source = source;\n      this.imports = imports;\n    }\n    return SourceWithImports;\n  })();\n  exports.SourceWithImports = SourceWithImports;\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"angular2/src/compiler/template_ast\", [\"angular2/src/facade/lang\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  var lang_1 = require(\"angular2/src/facade/lang\");\n  var TextAst = (function() {\n    function TextAst(value, ngContentIndex, sourceInfo) {\n      this.value = value;\n      this.ngContentIndex = ngContentIndex;\n      this.sourceInfo = sourceInfo;\n    }\n    TextAst.prototype.visit = function(visitor, context) {\n      return visitor.visitText(this, context);\n    };\n    return TextAst;\n  })();\n  exports.TextAst = TextAst;\n  var BoundTextAst = (function() {\n    function BoundTextAst(value, ngContentIndex, sourceInfo) {\n      this.value = value;\n      this.ngContentIndex = ngContentIndex;\n      this.sourceInfo = sourceInfo;\n    }\n    BoundTextAst.prototype.visit = function(visitor, context) {\n      return visitor.visitBoundText(this, context);\n    };\n    return BoundTextAst;\n  })();\n  exports.BoundTextAst = BoundTextAst;\n  var AttrAst = (function() {\n    function AttrAst(name, value, sourceInfo) {\n      this.name = name;\n      this.value = value;\n      this.sourceInfo = sourceInfo;\n    }\n    AttrAst.prototype.visit = function(visitor, context) {\n      return visitor.visitAttr(this, context);\n    };\n    return AttrAst;\n  })();\n  exports.AttrAst = AttrAst;\n  var BoundElementPropertyAst = (function() {\n    function BoundElementPropertyAst(name, type, value, unit, sourceInfo) {\n      this.name = name;\n      this.type = type;\n      this.value = value;\n      this.unit = unit;\n      this.sourceInfo = sourceInfo;\n    }\n    BoundElementPropertyAst.prototype.visit = function(visitor, context) {\n      return visitor.visitElementProperty(this, context);\n    };\n    return BoundElementPropertyAst;\n  })();\n  exports.BoundElementPropertyAst = BoundElementPropertyAst;\n  var BoundEventAst = (function() {\n    function BoundEventAst(name, target, handler, sourceInfo) {\n      this.name = name;\n      this.target = target;\n      this.handler = handler;\n      this.sourceInfo = sourceInfo;\n    }\n    BoundEventAst.prototype.visit = function(visitor, context) {\n      return visitor.visitEvent(this, context);\n    };\n    Object.defineProperty(BoundEventAst.prototype, \"fullName\", {\n      get: function() {\n        if (lang_1.isPresent(this.target)) {\n          return this.target + \":\" + this.name;\n        } else {\n          return this.name;\n        }\n      },\n      enumerable: true,\n      configurable: true\n    });\n    return BoundEventAst;\n  })();\n  exports.BoundEventAst = BoundEventAst;\n  var VariableAst = (function() {\n    function VariableAst(name, value, sourceInfo) {\n      this.name = name;\n      this.value = value;\n      this.sourceInfo = sourceInfo;\n    }\n    VariableAst.prototype.visit = function(visitor, context) {\n      return visitor.visitVariable(this, context);\n    };\n    return VariableAst;\n  })();\n  exports.VariableAst = VariableAst;\n  var ElementAst = (function() {\n    function ElementAst(name, attrs, inputs, outputs, exportAsVars, directives, children, ngContentIndex, sourceInfo) {\n      this.name = name;\n      this.attrs = attrs;\n      this.inputs = inputs;\n      this.outputs = outputs;\n      this.exportAsVars = exportAsVars;\n      this.directives = directives;\n      this.children = children;\n      this.ngContentIndex = ngContentIndex;\n      this.sourceInfo = sourceInfo;\n    }\n    ElementAst.prototype.visit = function(visitor, context) {\n      return visitor.visitElement(this, context);\n    };\n    ElementAst.prototype.isBound = function() {\n      return (this.inputs.length > 0 || this.outputs.length > 0 || this.exportAsVars.length > 0 || this.directives.length > 0);\n    };\n    ElementAst.prototype.getComponent = function() {\n      return this.directives.length > 0 && this.directives[0].directive.isComponent ? this.directives[0].directive : null;\n    };\n    return ElementAst;\n  })();\n  exports.ElementAst = ElementAst;\n  var EmbeddedTemplateAst = (function() {\n    function EmbeddedTemplateAst(attrs, outputs, vars, directives, children, ngContentIndex, sourceInfo) {\n      this.attrs = attrs;\n      this.outputs = outputs;\n      this.vars = vars;\n      this.directives = directives;\n      this.children = children;\n      this.ngContentIndex = ngContentIndex;\n      this.sourceInfo = sourceInfo;\n    }\n    EmbeddedTemplateAst.prototype.visit = function(visitor, context) {\n      return visitor.visitEmbeddedTemplate(this, context);\n    };\n    return EmbeddedTemplateAst;\n  })();\n  exports.EmbeddedTemplateAst = EmbeddedTemplateAst;\n  var BoundDirectivePropertyAst = (function() {\n    function BoundDirectivePropertyAst(directiveName, templateName, value, sourceInfo) {\n      this.directiveName = directiveName;\n      this.templateName = templateName;\n      this.value = value;\n      this.sourceInfo = sourceInfo;\n    }\n    BoundDirectivePropertyAst.prototype.visit = function(visitor, context) {\n      return visitor.visitDirectiveProperty(this, context);\n    };\n    return BoundDirectivePropertyAst;\n  })();\n  exports.BoundDirectivePropertyAst = BoundDirectivePropertyAst;\n  var DirectiveAst = (function() {\n    function DirectiveAst(directive, inputs, hostProperties, hostEvents, exportAsVars, sourceInfo) {\n      this.directive = directive;\n      this.inputs = inputs;\n      this.hostProperties = hostProperties;\n      this.hostEvents = hostEvents;\n      this.exportAsVars = exportAsVars;\n      this.sourceInfo = sourceInfo;\n    }\n    DirectiveAst.prototype.visit = function(visitor, context) {\n      return visitor.visitDirective(this, context);\n    };\n    return DirectiveAst;\n  })();\n  exports.DirectiveAst = DirectiveAst;\n  var NgContentAst = (function() {\n    function NgContentAst(index, ngContentIndex, sourceInfo) {\n      this.index = index;\n      this.ngContentIndex = ngContentIndex;\n      this.sourceInfo = sourceInfo;\n    }\n    NgContentAst.prototype.visit = function(visitor, context) {\n      return visitor.visitNgContent(this, context);\n    };\n    return NgContentAst;\n  })();\n  exports.NgContentAst = NgContentAst;\n  (function(PropertyBindingType) {\n    PropertyBindingType[PropertyBindingType[\"Property\"] = 0] = \"Property\";\n    PropertyBindingType[PropertyBindingType[\"Attribute\"] = 1] = \"Attribute\";\n    PropertyBindingType[PropertyBindingType[\"Class\"] = 2] = \"Class\";\n    PropertyBindingType[PropertyBindingType[\"Style\"] = 3] = \"Style\";\n  })(exports.PropertyBindingType || (exports.PropertyBindingType = {}));\n  var PropertyBindingType = exports.PropertyBindingType;\n  function templateVisitAll(visitor, asts, context) {\n    if (context === void 0) {\n      context = null;\n    }\n    var result = [];\n    asts.forEach(function(ast) {\n      var astResult = ast.visit(visitor, context);\n      if (lang_1.isPresent(astResult)) {\n        result.push(astResult);\n      }\n    });\n    return result;\n  }\n  exports.templateVisitAll = templateVisitAll;\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"angular2/src/transform/template_compiler/change_detector_codegen\", [], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  var Codegen = (function() {\n    function Codegen(moduleAlias) {}\n    Codegen.prototype.generate = function(typeName, changeDetectorTypeName, def) {\n      throw \"Not implemented in JS\";\n    };\n    Codegen.prototype.toString = function() {\n      throw \"Not implemented in JS\";\n    };\n    return Codegen;\n  })();\n  exports.Codegen = Codegen;\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"angular2/src/compiler/xhr\", [], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  var XHR = (function() {\n    function XHR() {}\n    XHR.prototype.get = function(url) {\n      return null;\n    };\n    return XHR;\n  })();\n  exports.XHR = XHR;\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"angular2/src/compiler/shadow_css\", [\"angular2/src/facade/collection\", \"angular2/src/facade/lang\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  var collection_1 = require(\"angular2/src/facade/collection\");\n  var lang_1 = require(\"angular2/src/facade/lang\");\n  var ShadowCss = (function() {\n    function ShadowCss() {\n      this.strictStyling = true;\n    }\n    ShadowCss.prototype.shimCssText = function(cssText, selector, hostSelector) {\n      if (hostSelector === void 0) {\n        hostSelector = '';\n      }\n      cssText = stripComments(cssText);\n      cssText = this._insertDirectives(cssText);\n      return this._scopeCssText(cssText, selector, hostSelector);\n    };\n    ShadowCss.prototype._insertDirectives = function(cssText) {\n      cssText = this._insertPolyfillDirectivesInCssText(cssText);\n      return this._insertPolyfillRulesInCssText(cssText);\n    };\n    ShadowCss.prototype._insertPolyfillDirectivesInCssText = function(cssText) {\n      return lang_1.StringWrapper.replaceAllMapped(cssText, _cssContentNextSelectorRe, function(m) {\n        return m[1] + '{';\n      });\n    };\n    ShadowCss.prototype._insertPolyfillRulesInCssText = function(cssText) {\n      return lang_1.StringWrapper.replaceAllMapped(cssText, _cssContentRuleRe, function(m) {\n        var rule = m[0];\n        rule = lang_1.StringWrapper.replace(rule, m[1], '');\n        rule = lang_1.StringWrapper.replace(rule, m[2], '');\n        return m[3] + rule;\n      });\n    };\n    ShadowCss.prototype._scopeCssText = function(cssText, scopeSelector, hostSelector) {\n      var unscoped = this._extractUnscopedRulesFromCssText(cssText);\n      cssText = this._insertPolyfillHostInCssText(cssText);\n      cssText = this._convertColonHost(cssText);\n      cssText = this._convertColonHostContext(cssText);\n      cssText = this._convertShadowDOMSelectors(cssText);\n      if (lang_1.isPresent(scopeSelector)) {\n        cssText = this._scopeSelectors(cssText, scopeSelector, hostSelector);\n      }\n      cssText = cssText + '\\n' + unscoped;\n      return cssText.trim();\n    };\n    ShadowCss.prototype._extractUnscopedRulesFromCssText = function(cssText) {\n      var r = '',\n          m;\n      var matcher = lang_1.RegExpWrapper.matcher(_cssContentUnscopedRuleRe, cssText);\n      while (lang_1.isPresent(m = lang_1.RegExpMatcherWrapper.next(matcher))) {\n        var rule = m[0];\n        rule = lang_1.StringWrapper.replace(rule, m[2], '');\n        rule = lang_1.StringWrapper.replace(rule, m[1], m[3]);\n        r += rule + '\\n\\n';\n      }\n      return r;\n    };\n    ShadowCss.prototype._convertColonHost = function(cssText) {\n      return this._convertColonRule(cssText, _cssColonHostRe, this._colonHostPartReplacer);\n    };\n    ShadowCss.prototype._convertColonHostContext = function(cssText) {\n      return this._convertColonRule(cssText, _cssColonHostContextRe, this._colonHostContextPartReplacer);\n    };\n    ShadowCss.prototype._convertColonRule = function(cssText, regExp, partReplacer) {\n      return lang_1.StringWrapper.replaceAllMapped(cssText, regExp, function(m) {\n        if (lang_1.isPresent(m[2])) {\n          var parts = m[2].split(','),\n              r = [];\n          for (var i = 0; i < parts.length; i++) {\n            var p = parts[i];\n            if (lang_1.isBlank(p))\n              break;\n            p = p.trim();\n            r.push(partReplacer(_polyfillHostNoCombinator, p, m[3]));\n          }\n          return r.join(',');\n        } else {\n          return _polyfillHostNoCombinator + m[3];\n        }\n      });\n    };\n    ShadowCss.prototype._colonHostContextPartReplacer = function(host, part, suffix) {\n      if (lang_1.StringWrapper.contains(part, _polyfillHost)) {\n        return this._colonHostPartReplacer(host, part, suffix);\n      } else {\n        return host + part + suffix + ', ' + part + ' ' + host + suffix;\n      }\n    };\n    ShadowCss.prototype._colonHostPartReplacer = function(host, part, suffix) {\n      return host + lang_1.StringWrapper.replace(part, _polyfillHost, '') + suffix;\n    };\n    ShadowCss.prototype._convertShadowDOMSelectors = function(cssText) {\n      for (var i = 0; i < _shadowDOMSelectorsRe.length; i++) {\n        cssText = lang_1.StringWrapper.replaceAll(cssText, _shadowDOMSelectorsRe[i], ' ');\n      }\n      return cssText;\n    };\n    ShadowCss.prototype._scopeSelectors = function(cssText, scopeSelector, hostSelector) {\n      var _this = this;\n      return processRules(cssText, function(rule) {\n        var selector = rule.selector;\n        var content = rule.content;\n        if (rule.selector[0] != '@' || rule.selector.startsWith('@page')) {\n          selector = _this._scopeSelector(rule.selector, scopeSelector, hostSelector, _this.strictStyling);\n        } else if (rule.selector.startsWith('@media')) {\n          content = _this._scopeSelectors(rule.content, scopeSelector, hostSelector);\n        }\n        return new CssRule(selector, content);\n      });\n    };\n    ShadowCss.prototype._scopeSelector = function(selector, scopeSelector, hostSelector, strict) {\n      var r = [],\n          parts = selector.split(',');\n      for (var i = 0; i < parts.length; i++) {\n        var p = parts[i];\n        p = p.trim();\n        if (this._selectorNeedsScoping(p, scopeSelector)) {\n          p = strict && !lang_1.StringWrapper.contains(p, _polyfillHostNoCombinator) ? this._applyStrictSelectorScope(p, scopeSelector) : this._applySelectorScope(p, scopeSelector, hostSelector);\n        }\n        r.push(p);\n      }\n      return r.join(', ');\n    };\n    ShadowCss.prototype._selectorNeedsScoping = function(selector, scopeSelector) {\n      var re = this._makeScopeMatcher(scopeSelector);\n      return !lang_1.isPresent(lang_1.RegExpWrapper.firstMatch(re, selector));\n    };\n    ShadowCss.prototype._makeScopeMatcher = function(scopeSelector) {\n      var lre = /\\[/g;\n      var rre = /\\]/g;\n      scopeSelector = lang_1.StringWrapper.replaceAll(scopeSelector, lre, '\\\\[');\n      scopeSelector = lang_1.StringWrapper.replaceAll(scopeSelector, rre, '\\\\]');\n      return lang_1.RegExpWrapper.create('^(' + scopeSelector + ')' + _selectorReSuffix, 'm');\n    };\n    ShadowCss.prototype._applySelectorScope = function(selector, scopeSelector, hostSelector) {\n      return this._applySimpleSelectorScope(selector, scopeSelector, hostSelector);\n    };\n    ShadowCss.prototype._applySimpleSelectorScope = function(selector, scopeSelector, hostSelector) {\n      if (lang_1.isPresent(lang_1.RegExpWrapper.firstMatch(_polyfillHostRe, selector))) {\n        var replaceBy = this.strictStyling ? \"[\" + hostSelector + \"]\" : scopeSelector;\n        selector = lang_1.StringWrapper.replace(selector, _polyfillHostNoCombinator, replaceBy);\n        return lang_1.StringWrapper.replaceAll(selector, _polyfillHostRe, replaceBy + ' ');\n      } else {\n        return scopeSelector + ' ' + selector;\n      }\n    };\n    ShadowCss.prototype._applyStrictSelectorScope = function(selector, scopeSelector) {\n      var isRe = /\\[is=([^\\]]*)\\]/g;\n      scopeSelector = lang_1.StringWrapper.replaceAllMapped(scopeSelector, isRe, function(m) {\n        return m[1];\n      });\n      var splits = [' ', '>', '+', '~'],\n          scoped = selector,\n          attrName = '[' + scopeSelector + ']';\n      for (var i = 0; i < splits.length; i++) {\n        var sep = splits[i];\n        var parts = scoped.split(sep);\n        scoped = parts.map(function(p) {\n          var t = lang_1.StringWrapper.replaceAll(p.trim(), _polyfillHostRe, '');\n          if (t.length > 0 && !collection_1.ListWrapper.contains(splits, t) && !lang_1.StringWrapper.contains(t, attrName)) {\n            var re = /([^:]*)(:*)(.*)/g;\n            var m = lang_1.RegExpWrapper.firstMatch(re, t);\n            if (lang_1.isPresent(m)) {\n              p = m[1] + attrName + m[2] + m[3];\n            }\n          }\n          return p;\n        }).join(sep);\n      }\n      return scoped;\n    };\n    ShadowCss.prototype._insertPolyfillHostInCssText = function(selector) {\n      selector = lang_1.StringWrapper.replaceAll(selector, _colonHostContextRe, _polyfillHostContext);\n      selector = lang_1.StringWrapper.replaceAll(selector, _colonHostRe, _polyfillHost);\n      return selector;\n    };\n    return ShadowCss;\n  })();\n  exports.ShadowCss = ShadowCss;\n  var _cssContentNextSelectorRe = /polyfill-next-selector[^}]*content:[\\s]*?['\"](.*?)['\"][;\\s]*}([^{]*?){/gim;\n  var _cssContentRuleRe = /(polyfill-rule)[^}]*(content:[\\s]*['\"](.*?)['\"])[;\\s]*[^}]*}/gim;\n  var _cssContentUnscopedRuleRe = /(polyfill-unscoped-rule)[^}]*(content:[\\s]*['\"](.*?)['\"])[;\\s]*[^}]*}/gim;\n  var _polyfillHost = '-shadowcsshost';\n  var _polyfillHostContext = '-shadowcsscontext';\n  var _parenSuffix = ')(?:\\\\((' + '(?:\\\\([^)(]*\\\\)|[^)(]*)+?' + ')\\\\))?([^,{]*)';\n  var _cssColonHostRe = lang_1.RegExpWrapper.create('(' + _polyfillHost + _parenSuffix, 'im');\n  var _cssColonHostContextRe = lang_1.RegExpWrapper.create('(' + _polyfillHostContext + _parenSuffix, 'im');\n  var _polyfillHostNoCombinator = _polyfillHost + '-no-combinator';\n  var _shadowDOMSelectorsRe = [/>>>/g, /::shadow/g, /::content/g, /\\/deep\\//g, /\\/shadow-deep\\//g, /\\/shadow\\//g];\n  var _selectorReSuffix = '([>\\\\s~+\\[.,{:][\\\\s\\\\S]*)?$';\n  var _polyfillHostRe = lang_1.RegExpWrapper.create(_polyfillHost, 'im');\n  var _colonHostRe = /:host/gim;\n  var _colonHostContextRe = /:host-context/gim;\n  var _commentRe = /\\/\\*[\\s\\S]*?\\*\\//g;\n  function stripComments(input) {\n    return lang_1.StringWrapper.replaceAllMapped(input, _commentRe, function(_) {\n      return '';\n    });\n  }\n  var _ruleRe = /(\\s*)([^;\\{\\}]+?)(\\s*)((?:{%BLOCK%}?\\s*;?)|(?:\\s*;))/g;\n  var _curlyRe = /([{}])/g;\n  var OPEN_CURLY = '{';\n  var CLOSE_CURLY = '}';\n  var BLOCK_PLACEHOLDER = '%BLOCK%';\n  var CssRule = (function() {\n    function CssRule(selector, content) {\n      this.selector = selector;\n      this.content = content;\n    }\n    return CssRule;\n  })();\n  exports.CssRule = CssRule;\n  function processRules(input, ruleCallback) {\n    var inputWithEscapedBlocks = escapeBlocks(input);\n    var nextBlockIndex = 0;\n    return lang_1.StringWrapper.replaceAllMapped(inputWithEscapedBlocks.escapedString, _ruleRe, function(m) {\n      var selector = m[2];\n      var content = '';\n      var suffix = m[4];\n      var contentPrefix = '';\n      if (lang_1.isPresent(m[4]) && m[4].startsWith('{' + BLOCK_PLACEHOLDER)) {\n        content = inputWithEscapedBlocks.blocks[nextBlockIndex++];\n        suffix = m[4].substring(BLOCK_PLACEHOLDER.length + 1);\n        contentPrefix = '{';\n      }\n      var rule = ruleCallback(new CssRule(selector, content));\n      return \"\" + m[1] + rule.selector + m[3] + contentPrefix + rule.content + suffix;\n    });\n  }\n  exports.processRules = processRules;\n  var StringWithEscapedBlocks = (function() {\n    function StringWithEscapedBlocks(escapedString, blocks) {\n      this.escapedString = escapedString;\n      this.blocks = blocks;\n    }\n    return StringWithEscapedBlocks;\n  })();\n  function escapeBlocks(input) {\n    var inputParts = lang_1.StringWrapper.split(input, _curlyRe);\n    var resultParts = [];\n    var escapedBlocks = [];\n    var bracketCount = 0;\n    var currentBlockParts = [];\n    for (var partIndex = 0; partIndex < inputParts.length; partIndex++) {\n      var part = inputParts[partIndex];\n      if (part == CLOSE_CURLY) {\n        bracketCount--;\n      }\n      if (bracketCount > 0) {\n        currentBlockParts.push(part);\n      } else {\n        if (currentBlockParts.length > 0) {\n          escapedBlocks.push(currentBlockParts.join(''));\n          resultParts.push(BLOCK_PLACEHOLDER);\n          currentBlockParts = [];\n        }\n        resultParts.push(part);\n      }\n      if (part == OPEN_CURLY) {\n        bracketCount++;\n      }\n    }\n    if (currentBlockParts.length > 0) {\n      escapedBlocks.push(currentBlockParts.join(''));\n      resultParts.push(BLOCK_PLACEHOLDER);\n    }\n    return new StringWithEscapedBlocks(resultParts.join(''), escapedBlocks);\n  }\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"angular2/src/compiler/url_resolver\", [\"angular2/src/core/di\", \"angular2/src/facade/lang\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  var __decorate = (this && this.__decorate) || function(decorators, target, key, desc) {\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\")\n      return Reflect.decorate(decorators, target, key, desc);\n    switch (arguments.length) {\n      case 2:\n        return decorators.reduceRight(function(o, d) {\n          return (d && d(o)) || o;\n        }, target);\n      case 3:\n        return decorators.reduceRight(function(o, d) {\n          return (d && d(target, key)), void 0;\n        }, void 0);\n      case 4:\n        return decorators.reduceRight(function(o, d) {\n          return (d && d(target, key, o)) || o;\n        }, desc);\n    }\n  };\n  var __metadata = (this && this.__metadata) || function(k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\")\n      return Reflect.metadata(k, v);\n  };\n  var di_1 = require(\"angular2/src/core/di\");\n  var lang_1 = require(\"angular2/src/facade/lang\");\n  function createWithoutPackagePrefix() {\n    return new UrlResolver();\n  }\n  exports.createWithoutPackagePrefix = createWithoutPackagePrefix;\n  var UrlResolver = (function() {\n    function UrlResolver() {}\n    UrlResolver.prototype.resolve = function(baseUrl, url) {\n      return _resolveUrl(baseUrl, url);\n    };\n    UrlResolver = __decorate([di_1.Injectable(), __metadata('design:paramtypes', [])], UrlResolver);\n    return UrlResolver;\n  })();\n  exports.UrlResolver = UrlResolver;\n  function _buildFromEncodedParts(opt_scheme, opt_userInfo, opt_domain, opt_port, opt_path, opt_queryData, opt_fragment) {\n    var out = [];\n    if (lang_1.isPresent(opt_scheme)) {\n      out.push(opt_scheme + ':');\n    }\n    if (lang_1.isPresent(opt_domain)) {\n      out.push('//');\n      if (lang_1.isPresent(opt_userInfo)) {\n        out.push(opt_userInfo + '@');\n      }\n      out.push(opt_domain);\n      if (lang_1.isPresent(opt_port)) {\n        out.push(':' + opt_port);\n      }\n    }\n    if (lang_1.isPresent(opt_path)) {\n      out.push(opt_path);\n    }\n    if (lang_1.isPresent(opt_queryData)) {\n      out.push('?' + opt_queryData);\n    }\n    if (lang_1.isPresent(opt_fragment)) {\n      out.push('#' + opt_fragment);\n    }\n    return out.join('');\n  }\n  var _splitRe = lang_1.RegExpWrapper.create('^' + '(?:' + '([^:/?#.]+)' + ':)?' + '(?://' + '(?:([^/?#]*)@)?' + '([\\\\w\\\\d\\\\-\\\\u0100-\\\\uffff.%]*)' + '(?::([0-9]+))?' + ')?' + '([^?#]+)?' + '(?:\\\\?([^#]*))?' + '(?:#(.*))?' + '$');\n  var _ComponentIndex;\n  (function(_ComponentIndex) {\n    _ComponentIndex[_ComponentIndex[\"Scheme\"] = 1] = \"Scheme\";\n    _ComponentIndex[_ComponentIndex[\"UserInfo\"] = 2] = \"UserInfo\";\n    _ComponentIndex[_ComponentIndex[\"Domain\"] = 3] = \"Domain\";\n    _ComponentIndex[_ComponentIndex[\"Port\"] = 4] = \"Port\";\n    _ComponentIndex[_ComponentIndex[\"Path\"] = 5] = \"Path\";\n    _ComponentIndex[_ComponentIndex[\"QueryData\"] = 6] = \"QueryData\";\n    _ComponentIndex[_ComponentIndex[\"Fragment\"] = 7] = \"Fragment\";\n  })(_ComponentIndex || (_ComponentIndex = {}));\n  function _split(uri) {\n    return lang_1.RegExpWrapper.firstMatch(_splitRe, uri);\n  }\n  function _removeDotSegments(path) {\n    if (path == '/')\n      return '/';\n    var leadingSlash = path[0] == '/' ? '/' : '';\n    var trailingSlash = path[path.length - 1] === '/' ? '/' : '';\n    var segments = path.split('/');\n    var out = [];\n    var up = 0;\n    for (var pos = 0; pos < segments.length; pos++) {\n      var segment = segments[pos];\n      switch (segment) {\n        case '':\n        case '.':\n          break;\n        case '..':\n          if (out.length > 0) {\n            out.pop();\n          } else {\n            up++;\n          }\n          break;\n        default:\n          out.push(segment);\n      }\n    }\n    if (leadingSlash == '') {\n      while (up-- > 0) {\n        out.unshift('..');\n      }\n      if (out.length === 0)\n        out.push('.');\n    }\n    return leadingSlash + out.join('/') + trailingSlash;\n  }\n  function _joinAndCanonicalizePath(parts) {\n    var path = parts[_ComponentIndex.Path];\n    path = lang_1.isBlank(path) ? '' : _removeDotSegments(path);\n    parts[_ComponentIndex.Path] = path;\n    return _buildFromEncodedParts(parts[_ComponentIndex.Scheme], parts[_ComponentIndex.UserInfo], parts[_ComponentIndex.Domain], parts[_ComponentIndex.Port], path, parts[_ComponentIndex.QueryData], parts[_ComponentIndex.Fragment]);\n  }\n  function _resolveUrl(base, url) {\n    var parts = _split(encodeURI(url));\n    var baseParts = _split(base);\n    if (lang_1.isPresent(parts[_ComponentIndex.Scheme])) {\n      return _joinAndCanonicalizePath(parts);\n    } else {\n      parts[_ComponentIndex.Scheme] = baseParts[_ComponentIndex.Scheme];\n    }\n    for (var i = _ComponentIndex.Scheme; i <= _ComponentIndex.Port; i++) {\n      if (lang_1.isBlank(parts[i])) {\n        parts[i] = baseParts[i];\n      }\n    }\n    if (parts[_ComponentIndex.Path][0] == '/') {\n      return _joinAndCanonicalizePath(parts);\n    }\n    var path = baseParts[_ComponentIndex.Path];\n    if (lang_1.isBlank(path))\n      path = '/';\n    var index = path.lastIndexOf('/');\n    path = path.substring(0, index + 1) + parts[_ComponentIndex.Path];\n    parts[_ComponentIndex.Path] = path;\n    return _joinAndCanonicalizePath(parts);\n  }\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"angular2/src/compiler/style_url_resolver\", [\"angular2/src/facade/lang\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  var lang_1 = require(\"angular2/src/facade/lang\");\n  var StyleWithImports = (function() {\n    function StyleWithImports(style, styleUrls) {\n      this.style = style;\n      this.styleUrls = styleUrls;\n    }\n    return StyleWithImports;\n  })();\n  exports.StyleWithImports = StyleWithImports;\n  function isStyleUrlResolvable(url) {\n    if (lang_1.isBlank(url) || url.length === 0 || url[0] == '/')\n      return false;\n    var schemeMatch = lang_1.RegExpWrapper.firstMatch(_urlWithSchemaRe, url);\n    return lang_1.isBlank(schemeMatch) || schemeMatch[1] == 'package' || schemeMatch[1] == 'asset';\n  }\n  exports.isStyleUrlResolvable = isStyleUrlResolvable;\n  function extractStyleUrls(resolver, baseUrl, cssText) {\n    var foundUrls = [];\n    var modifiedCssText = lang_1.StringWrapper.replaceAllMapped(cssText, _cssImportRe, function(m) {\n      var url = lang_1.isPresent(m[1]) ? m[1] : m[2];\n      if (!isStyleUrlResolvable(url)) {\n        return m[0];\n      }\n      foundUrls.push(resolver.resolve(baseUrl, url));\n      return '';\n    });\n    return new StyleWithImports(modifiedCssText, foundUrls);\n  }\n  exports.extractStyleUrls = extractStyleUrls;\n  var _cssImportRe = /@import\\s+(?:url\\()?\\s*(?:(?:['\"]([^'\"]*))|([^;\\)\\s]*))[^;]*;?/g;\n  var _urlWithSchemaRe = /^([a-zA-Z\\-\\+\\.]+):/g;\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"angular2/src/compiler/command_compiler\", [\"angular2/src/facade/lang\", \"angular2/src/facade/collection\", \"angular2/src/core/linker/template_commands\", \"angular2/src/compiler/template_ast\", \"angular2/src/compiler/source_module\", \"angular2/src/compiler/util\", \"angular2/src/core/di\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  var __decorate = (this && this.__decorate) || function(decorators, target, key, desc) {\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\")\n      return Reflect.decorate(decorators, target, key, desc);\n    switch (arguments.length) {\n      case 2:\n        return decorators.reduceRight(function(o, d) {\n          return (d && d(o)) || o;\n        }, target);\n      case 3:\n        return decorators.reduceRight(function(o, d) {\n          return (d && d(target, key)), void 0;\n        }, void 0);\n      case 4:\n        return decorators.reduceRight(function(o, d) {\n          return (d && d(target, key, o)) || o;\n        }, desc);\n    }\n  };\n  var __metadata = (this && this.__metadata) || function(k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\")\n      return Reflect.metadata(k, v);\n  };\n  var lang_1 = require(\"angular2/src/facade/lang\");\n  var collection_1 = require(\"angular2/src/facade/collection\");\n  var template_commands_1 = require(\"angular2/src/core/linker/template_commands\");\n  var template_ast_1 = require(\"angular2/src/compiler/template_ast\");\n  var source_module_1 = require(\"angular2/src/compiler/source_module\");\n  var util_1 = require(\"angular2/src/compiler/util\");\n  var di_1 = require(\"angular2/src/core/di\");\n  exports.TEMPLATE_COMMANDS_MODULE_REF = source_module_1.moduleRef(\"package:angular2/src/core/linker/template_commands\" + util_1.MODULE_SUFFIX);\n  var IMPLICIT_TEMPLATE_VAR = '\\$implicit';\n  var CLASS_ATTR = 'class';\n  var STYLE_ATTR = 'style';\n  var CommandCompiler = (function() {\n    function CommandCompiler() {}\n    CommandCompiler.prototype.compileComponentRuntime = function(component, template, changeDetectorFactories, componentTemplateFactory) {\n      var visitor = new CommandBuilderVisitor(new RuntimeCommandFactory(component, componentTemplateFactory, changeDetectorFactories), 0);\n      template_ast_1.templateVisitAll(visitor, template);\n      return visitor.result;\n    };\n    CommandCompiler.prototype.compileComponentCodeGen = function(component, template, changeDetectorFactoryExpressions, componentTemplateFactory) {\n      var visitor = new CommandBuilderVisitor(new CodegenCommandFactory(component, componentTemplateFactory, changeDetectorFactoryExpressions), 0);\n      template_ast_1.templateVisitAll(visitor, template);\n      return new source_module_1.SourceExpression([], codeGenArray(visitor.result));\n    };\n    CommandCompiler = __decorate([di_1.Injectable(), __metadata('design:paramtypes', [])], CommandCompiler);\n    return CommandCompiler;\n  })();\n  exports.CommandCompiler = CommandCompiler;\n  var RuntimeCommandFactory = (function() {\n    function RuntimeCommandFactory(component, componentTemplateFactory, changeDetectorFactories) {\n      this.component = component;\n      this.componentTemplateFactory = componentTemplateFactory;\n      this.changeDetectorFactories = changeDetectorFactories;\n    }\n    RuntimeCommandFactory.prototype._mapDirectives = function(directives) {\n      return directives.map(function(directive) {\n        return directive.type.runtime;\n      });\n    };\n    RuntimeCommandFactory.prototype.createText = function(value, isBound, ngContentIndex) {\n      return new template_commands_1.TextCmd(value, isBound, ngContentIndex);\n    };\n    RuntimeCommandFactory.prototype.createNgContent = function(index, ngContentIndex) {\n      return new template_commands_1.NgContentCmd(index, ngContentIndex);\n    };\n    RuntimeCommandFactory.prototype.createBeginElement = function(name, attrNameAndValues, eventTargetAndNames, variableNameAndValues, directives, isBound, ngContentIndex) {\n      return new template_commands_1.BeginElementCmd(name, attrNameAndValues, eventTargetAndNames, variableNameAndValues, this._mapDirectives(directives), isBound, ngContentIndex);\n    };\n    RuntimeCommandFactory.prototype.createEndElement = function() {\n      return new template_commands_1.EndElementCmd();\n    };\n    RuntimeCommandFactory.prototype.createBeginComponent = function(name, attrNameAndValues, eventTargetAndNames, variableNameAndValues, directives, encapsulation, ngContentIndex) {\n      var nestedTemplateAccessor = this.componentTemplateFactory(directives[0]);\n      return new template_commands_1.BeginComponentCmd(name, attrNameAndValues, eventTargetAndNames, variableNameAndValues, this._mapDirectives(directives), encapsulation, ngContentIndex, nestedTemplateAccessor);\n    };\n    RuntimeCommandFactory.prototype.createEndComponent = function() {\n      return new template_commands_1.EndComponentCmd();\n    };\n    RuntimeCommandFactory.prototype.createEmbeddedTemplate = function(embeddedTemplateIndex, attrNameAndValues, variableNameAndValues, directives, isMerged, ngContentIndex, children) {\n      return new template_commands_1.EmbeddedTemplateCmd(attrNameAndValues, variableNameAndValues, this._mapDirectives(directives), isMerged, ngContentIndex, this.changeDetectorFactories[embeddedTemplateIndex], children);\n    };\n    return RuntimeCommandFactory;\n  })();\n  var CodegenCommandFactory = (function() {\n    function CodegenCommandFactory(component, componentTemplateFactory, changeDetectorFactoryExpressions) {\n      this.component = component;\n      this.componentTemplateFactory = componentTemplateFactory;\n      this.changeDetectorFactoryExpressions = changeDetectorFactoryExpressions;\n    }\n    CodegenCommandFactory.prototype.createText = function(value, isBound, ngContentIndex) {\n      return new Expression(util_1.codeGenConstConstructorCall(exports.TEMPLATE_COMMANDS_MODULE_REF + 'TextCmd') + \"(\" + util_1.escapeSingleQuoteString(value) + \", \" + isBound + \", \" + ngContentIndex + \")\");\n    };\n    CodegenCommandFactory.prototype.createNgContent = function(index, ngContentIndex) {\n      return new Expression(util_1.codeGenConstConstructorCall(exports.TEMPLATE_COMMANDS_MODULE_REF + 'NgContentCmd') + \"(\" + index + \", \" + ngContentIndex + \")\");\n    };\n    CodegenCommandFactory.prototype.createBeginElement = function(name, attrNameAndValues, eventTargetAndNames, variableNameAndValues, directives, isBound, ngContentIndex) {\n      var attrsExpression = codeGenArray(attrNameAndValues);\n      return new Expression((util_1.codeGenConstConstructorCall(exports.TEMPLATE_COMMANDS_MODULE_REF + 'BeginElementCmd') + \"(\" + util_1.escapeSingleQuoteString(name) + \", \" + attrsExpression + \", \") + (codeGenArray(eventTargetAndNames) + \", \" + codeGenArray(variableNameAndValues) + \", \" + codeGenDirectivesArray(directives) + \", \" + isBound + \", \" + ngContentIndex + \")\"));\n    };\n    CodegenCommandFactory.prototype.createEndElement = function() {\n      return new Expression(util_1.codeGenConstConstructorCall(exports.TEMPLATE_COMMANDS_MODULE_REF + 'EndElementCmd') + \"()\");\n    };\n    CodegenCommandFactory.prototype.createBeginComponent = function(name, attrNameAndValues, eventTargetAndNames, variableNameAndValues, directives, encapsulation, ngContentIndex) {\n      var attrsExpression = codeGenArray(attrNameAndValues);\n      return new Expression((util_1.codeGenConstConstructorCall(exports.TEMPLATE_COMMANDS_MODULE_REF + 'BeginComponentCmd') + \"(\" + util_1.escapeSingleQuoteString(name) + \", \" + attrsExpression + \", \") + (codeGenArray(eventTargetAndNames) + \", \" + codeGenArray(variableNameAndValues) + \", \" + codeGenDirectivesArray(directives) + \", \" + codeGenViewEncapsulation(encapsulation) + \", \" + ngContentIndex + \", \" + this.componentTemplateFactory(directives[0]) + \")\"));\n    };\n    CodegenCommandFactory.prototype.createEndComponent = function() {\n      return new Expression(util_1.codeGenConstConstructorCall(exports.TEMPLATE_COMMANDS_MODULE_REF + 'EndComponentCmd') + \"()\");\n    };\n    CodegenCommandFactory.prototype.createEmbeddedTemplate = function(embeddedTemplateIndex, attrNameAndValues, variableNameAndValues, directives, isMerged, ngContentIndex, children) {\n      return new Expression((util_1.codeGenConstConstructorCall(exports.TEMPLATE_COMMANDS_MODULE_REF + 'EmbeddedTemplateCmd') + \"(\" + codeGenArray(attrNameAndValues) + \", \" + codeGenArray(variableNameAndValues) + \", \") + (codeGenDirectivesArray(directives) + \", \" + isMerged + \", \" + ngContentIndex + \", \" + this.changeDetectorFactoryExpressions[embeddedTemplateIndex] + \", \" + codeGenArray(children) + \")\"));\n    };\n    return CodegenCommandFactory;\n  })();\n  function visitAndReturnContext(visitor, asts, context) {\n    template_ast_1.templateVisitAll(visitor, asts, context);\n    return context;\n  }\n  var CommandBuilderVisitor = (function() {\n    function CommandBuilderVisitor(commandFactory, embeddedTemplateIndex) {\n      this.commandFactory = commandFactory;\n      this.embeddedTemplateIndex = embeddedTemplateIndex;\n      this.result = [];\n      this.transitiveNgContentCount = 0;\n    }\n    CommandBuilderVisitor.prototype._readAttrNameAndValues = function(directives, attrAsts) {\n      var attrs = keyValueArrayToMap(visitAndReturnContext(this, attrAsts, []));\n      directives.forEach(function(directiveMeta) {\n        collection_1.StringMapWrapper.forEach(directiveMeta.hostAttributes, function(value, name) {\n          var prevValue = attrs[name];\n          attrs[name] = lang_1.isPresent(prevValue) ? mergeAttributeValue(name, prevValue, value) : value;\n        });\n      });\n      return mapToKeyValueArray(attrs);\n    };\n    CommandBuilderVisitor.prototype.visitNgContent = function(ast, context) {\n      this.transitiveNgContentCount++;\n      this.result.push(this.commandFactory.createNgContent(ast.index, ast.ngContentIndex));\n      return null;\n    };\n    CommandBuilderVisitor.prototype.visitEmbeddedTemplate = function(ast, context) {\n      var _this = this;\n      this.embeddedTemplateIndex++;\n      var childVisitor = new CommandBuilderVisitor(this.commandFactory, this.embeddedTemplateIndex);\n      template_ast_1.templateVisitAll(childVisitor, ast.children);\n      var isMerged = childVisitor.transitiveNgContentCount > 0;\n      var variableNameAndValues = [];\n      ast.vars.forEach(function(varAst) {\n        variableNameAndValues.push(varAst.name);\n        variableNameAndValues.push(varAst.value.length > 0 ? varAst.value : IMPLICIT_TEMPLATE_VAR);\n      });\n      var directives = [];\n      collection_1.ListWrapper.forEachWithIndex(ast.directives, function(directiveAst, index) {\n        directiveAst.visit(_this, new DirectiveContext(index, [], [], directives));\n      });\n      this.result.push(this.commandFactory.createEmbeddedTemplate(this.embeddedTemplateIndex, this._readAttrNameAndValues(directives, ast.attrs), variableNameAndValues, directives, isMerged, ast.ngContentIndex, childVisitor.result));\n      this.transitiveNgContentCount += childVisitor.transitiveNgContentCount;\n      this.embeddedTemplateIndex = childVisitor.embeddedTemplateIndex;\n      return null;\n    };\n    CommandBuilderVisitor.prototype.visitElement = function(ast, context) {\n      var _this = this;\n      var component = ast.getComponent();\n      var eventTargetAndNames = visitAndReturnContext(this, ast.outputs, []);\n      var variableNameAndValues = [];\n      if (lang_1.isBlank(component)) {\n        ast.exportAsVars.forEach(function(varAst) {\n          variableNameAndValues.push(varAst.name);\n          variableNameAndValues.push(null);\n        });\n      }\n      var directives = [];\n      collection_1.ListWrapper.forEachWithIndex(ast.directives, function(directiveAst, index) {\n        directiveAst.visit(_this, new DirectiveContext(index, eventTargetAndNames, variableNameAndValues, directives));\n      });\n      eventTargetAndNames = removeKeyValueArrayDuplicates(eventTargetAndNames);\n      var attrNameAndValues = this._readAttrNameAndValues(directives, ast.attrs);\n      if (lang_1.isPresent(component)) {\n        this.result.push(this.commandFactory.createBeginComponent(ast.name, attrNameAndValues, eventTargetAndNames, variableNameAndValues, directives, component.template.encapsulation, ast.ngContentIndex));\n        template_ast_1.templateVisitAll(this, ast.children);\n        this.result.push(this.commandFactory.createEndComponent());\n      } else {\n        this.result.push(this.commandFactory.createBeginElement(ast.name, attrNameAndValues, eventTargetAndNames, variableNameAndValues, directives, ast.isBound(), ast.ngContentIndex));\n        template_ast_1.templateVisitAll(this, ast.children);\n        this.result.push(this.commandFactory.createEndElement());\n      }\n      return null;\n    };\n    CommandBuilderVisitor.prototype.visitVariable = function(ast, ctx) {\n      return null;\n    };\n    CommandBuilderVisitor.prototype.visitAttr = function(ast, attrNameAndValues) {\n      attrNameAndValues.push(ast.name);\n      attrNameAndValues.push(ast.value);\n      return null;\n    };\n    CommandBuilderVisitor.prototype.visitBoundText = function(ast, context) {\n      this.result.push(this.commandFactory.createText(null, true, ast.ngContentIndex));\n      return null;\n    };\n    CommandBuilderVisitor.prototype.visitText = function(ast, context) {\n      this.result.push(this.commandFactory.createText(ast.value, false, ast.ngContentIndex));\n      return null;\n    };\n    CommandBuilderVisitor.prototype.visitDirective = function(ast, ctx) {\n      ctx.targetDirectives.push(ast.directive);\n      template_ast_1.templateVisitAll(this, ast.hostEvents, ctx.eventTargetAndNames);\n      ast.exportAsVars.forEach(function(varAst) {\n        ctx.targetVariableNameAndValues.push(varAst.name);\n        ctx.targetVariableNameAndValues.push(ctx.index);\n      });\n      return null;\n    };\n    CommandBuilderVisitor.prototype.visitEvent = function(ast, eventTargetAndNames) {\n      eventTargetAndNames.push(ast.target);\n      eventTargetAndNames.push(ast.name);\n      return null;\n    };\n    CommandBuilderVisitor.prototype.visitDirectiveProperty = function(ast, context) {\n      return null;\n    };\n    CommandBuilderVisitor.prototype.visitElementProperty = function(ast, context) {\n      return null;\n    };\n    return CommandBuilderVisitor;\n  })();\n  function removeKeyValueArrayDuplicates(keyValueArray) {\n    var knownPairs = new Set();\n    var resultKeyValueArray = [];\n    for (var i = 0; i < keyValueArray.length; i += 2) {\n      var key = keyValueArray[i];\n      var value = keyValueArray[i + 1];\n      var pairId = key + \":\" + value;\n      if (!collection_1.SetWrapper.has(knownPairs, pairId)) {\n        resultKeyValueArray.push(key);\n        resultKeyValueArray.push(value);\n        knownPairs.add(pairId);\n      }\n    }\n    return resultKeyValueArray;\n  }\n  function keyValueArrayToMap(keyValueArr) {\n    var data = {};\n    for (var i = 0; i < keyValueArr.length; i += 2) {\n      data[keyValueArr[i]] = keyValueArr[i + 1];\n    }\n    return data;\n  }\n  function mapToKeyValueArray(data) {\n    var entryArray = [];\n    collection_1.StringMapWrapper.forEach(data, function(value, name) {\n      entryArray.push([name, value]);\n    });\n    collection_1.ListWrapper.sort(entryArray, function(entry1, entry2) {\n      return lang_1.StringWrapper.compare(entry1[0], entry2[0]);\n    });\n    var keyValueArray = [];\n    entryArray.forEach(function(entry) {\n      keyValueArray.push(entry[0]);\n      keyValueArray.push(entry[1]);\n    });\n    return keyValueArray;\n  }\n  function mergeAttributeValue(attrName, attrValue1, attrValue2) {\n    if (attrName == CLASS_ATTR || attrName == STYLE_ATTR) {\n      return attrValue1 + \" \" + attrValue2;\n    } else {\n      return attrValue2;\n    }\n  }\n  var DirectiveContext = (function() {\n    function DirectiveContext(index, eventTargetAndNames, targetVariableNameAndValues, targetDirectives) {\n      this.index = index;\n      this.eventTargetAndNames = eventTargetAndNames;\n      this.targetVariableNameAndValues = targetVariableNameAndValues;\n      this.targetDirectives = targetDirectives;\n    }\n    return DirectiveContext;\n  })();\n  var Expression = (function() {\n    function Expression(value) {\n      this.value = value;\n    }\n    return Expression;\n  })();\n  function escapeValue(value) {\n    if (value instanceof Expression) {\n      return value.value;\n    } else if (lang_1.isString(value)) {\n      return util_1.escapeSingleQuoteString(value);\n    } else if (lang_1.isBlank(value)) {\n      return 'null';\n    } else {\n      return \"\" + value;\n    }\n  }\n  function codeGenArray(data) {\n    var base = \"[\" + data.map(escapeValue).join(',') + \"]\";\n    return lang_1.IS_DART ? \"const \" + base : base;\n  }\n  function codeGenDirectivesArray(directives) {\n    var expressions = directives.map(function(directiveType) {\n      return (\"\" + source_module_1.moduleRef(directiveType.type.moduleUrl) + directiveType.type.name);\n    });\n    var base = \"[\" + expressions.join(',') + \"]\";\n    return lang_1.IS_DART ? \"const \" + base : base;\n  }\n  function codeGenViewEncapsulation(value) {\n    if (lang_1.IS_DART) {\n      return \"\" + exports.TEMPLATE_COMMANDS_MODULE_REF + value;\n    } else {\n      return \"\" + value;\n    }\n  }\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"angular2/src/compiler/html_ast\", [\"angular2/src/facade/lang\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  var lang_1 = require(\"angular2/src/facade/lang\");\n  var HtmlTextAst = (function() {\n    function HtmlTextAst(value, sourceInfo) {\n      this.value = value;\n      this.sourceInfo = sourceInfo;\n    }\n    HtmlTextAst.prototype.visit = function(visitor, context) {\n      return visitor.visitText(this, context);\n    };\n    return HtmlTextAst;\n  })();\n  exports.HtmlTextAst = HtmlTextAst;\n  var HtmlAttrAst = (function() {\n    function HtmlAttrAst(name, value, sourceInfo) {\n      this.name = name;\n      this.value = value;\n      this.sourceInfo = sourceInfo;\n    }\n    HtmlAttrAst.prototype.visit = function(visitor, context) {\n      return visitor.visitAttr(this, context);\n    };\n    return HtmlAttrAst;\n  })();\n  exports.HtmlAttrAst = HtmlAttrAst;\n  var HtmlElementAst = (function() {\n    function HtmlElementAst(name, attrs, children, sourceInfo) {\n      this.name = name;\n      this.attrs = attrs;\n      this.children = children;\n      this.sourceInfo = sourceInfo;\n    }\n    HtmlElementAst.prototype.visit = function(visitor, context) {\n      return visitor.visitElement(this, context);\n    };\n    return HtmlElementAst;\n  })();\n  exports.HtmlElementAst = HtmlElementAst;\n  function htmlVisitAll(visitor, asts, context) {\n    if (context === void 0) {\n      context = null;\n    }\n    var result = [];\n    asts.forEach(function(ast) {\n      var astResult = ast.visit(visitor, context);\n      if (lang_1.isPresent(astResult)) {\n        result.push(astResult);\n      }\n    });\n    return result;\n  }\n  exports.htmlVisitAll = htmlVisitAll;\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"angular2/src/compiler/schema/element_schema_registry\", [], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  var ElementSchemaRegistry = (function() {\n    function ElementSchemaRegistry() {}\n    ElementSchemaRegistry.prototype.hasProperty = function(tagName, propName) {\n      return true;\n    };\n    ElementSchemaRegistry.prototype.getMappedPropName = function(propName) {\n      return propName;\n    };\n    return ElementSchemaRegistry;\n  })();\n  exports.ElementSchemaRegistry = ElementSchemaRegistry;\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"angular2/src/compiler/template_preparser\", [\"angular2/src/facade/lang\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  var lang_1 = require(\"angular2/src/facade/lang\");\n  var NG_CONTENT_SELECT_ATTR = 'select';\n  var NG_CONTENT_ELEMENT = 'ng-content';\n  var LINK_ELEMENT = 'link';\n  var LINK_STYLE_REL_ATTR = 'rel';\n  var LINK_STYLE_HREF_ATTR = 'href';\n  var LINK_STYLE_REL_VALUE = 'stylesheet';\n  var STYLE_ELEMENT = 'style';\n  var SCRIPT_ELEMENT = 'script';\n  var NG_NON_BINDABLE_ATTR = 'ng-non-bindable';\n  function preparseElement(ast) {\n    var selectAttr = null;\n    var hrefAttr = null;\n    var relAttr = null;\n    var nonBindable = false;\n    ast.attrs.forEach(function(attr) {\n      if (attr.name == NG_CONTENT_SELECT_ATTR) {\n        selectAttr = attr.value;\n      } else if (attr.name == LINK_STYLE_HREF_ATTR) {\n        hrefAttr = attr.value;\n      } else if (attr.name == LINK_STYLE_REL_ATTR) {\n        relAttr = attr.value;\n      } else if (attr.name == NG_NON_BINDABLE_ATTR) {\n        nonBindable = true;\n      }\n    });\n    selectAttr = normalizeNgContentSelect(selectAttr);\n    var nodeName = ast.name;\n    var type = PreparsedElementType.OTHER;\n    if (nodeName == NG_CONTENT_ELEMENT) {\n      type = PreparsedElementType.NG_CONTENT;\n    } else if (nodeName == STYLE_ELEMENT) {\n      type = PreparsedElementType.STYLE;\n    } else if (nodeName == SCRIPT_ELEMENT) {\n      type = PreparsedElementType.SCRIPT;\n    } else if (nodeName == LINK_ELEMENT && relAttr == LINK_STYLE_REL_VALUE) {\n      type = PreparsedElementType.STYLESHEET;\n    }\n    return new PreparsedElement(type, selectAttr, hrefAttr, nonBindable);\n  }\n  exports.preparseElement = preparseElement;\n  (function(PreparsedElementType) {\n    PreparsedElementType[PreparsedElementType[\"NG_CONTENT\"] = 0] = \"NG_CONTENT\";\n    PreparsedElementType[PreparsedElementType[\"STYLE\"] = 1] = \"STYLE\";\n    PreparsedElementType[PreparsedElementType[\"STYLESHEET\"] = 2] = \"STYLESHEET\";\n    PreparsedElementType[PreparsedElementType[\"SCRIPT\"] = 3] = \"SCRIPT\";\n    PreparsedElementType[PreparsedElementType[\"OTHER\"] = 4] = \"OTHER\";\n  })(exports.PreparsedElementType || (exports.PreparsedElementType = {}));\n  var PreparsedElementType = exports.PreparsedElementType;\n  var PreparsedElement = (function() {\n    function PreparsedElement(type, selectAttr, hrefAttr, nonBindable) {\n      this.type = type;\n      this.selectAttr = selectAttr;\n      this.hrefAttr = hrefAttr;\n      this.nonBindable = nonBindable;\n    }\n    return PreparsedElement;\n  })();\n  exports.PreparsedElement = PreparsedElement;\n  function normalizeNgContentSelect(selectAttr) {\n    if (lang_1.isBlank(selectAttr) || selectAttr.length === 0) {\n      return '*';\n    }\n    return selectAttr;\n  }\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"angular2/src/compiler/template_normalizer\", [\"angular2/src/compiler/directive_metadata\", \"angular2/src/facade/lang\", \"angular2/src/facade/exceptions\", \"angular2/src/facade/async\", \"angular2/src/compiler/xhr\", \"angular2/src/compiler/url_resolver\", \"angular2/src/compiler/style_url_resolver\", \"angular2/src/core/di\", \"angular2/src/core/metadata/view\", \"angular2/src/compiler/html_ast\", \"angular2/src/compiler/html_parser\", \"angular2/src/compiler/template_preparser\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  var __decorate = (this && this.__decorate) || function(decorators, target, key, desc) {\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\")\n      return Reflect.decorate(decorators, target, key, desc);\n    switch (arguments.length) {\n      case 2:\n        return decorators.reduceRight(function(o, d) {\n          return (d && d(o)) || o;\n        }, target);\n      case 3:\n        return decorators.reduceRight(function(o, d) {\n          return (d && d(target, key)), void 0;\n        }, void 0);\n      case 4:\n        return decorators.reduceRight(function(o, d) {\n          return (d && d(target, key, o)) || o;\n        }, desc);\n    }\n  };\n  var __metadata = (this && this.__metadata) || function(k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\")\n      return Reflect.metadata(k, v);\n  };\n  var directive_metadata_1 = require(\"angular2/src/compiler/directive_metadata\");\n  var lang_1 = require(\"angular2/src/facade/lang\");\n  var exceptions_1 = require(\"angular2/src/facade/exceptions\");\n  var async_1 = require(\"angular2/src/facade/async\");\n  var xhr_1 = require(\"angular2/src/compiler/xhr\");\n  var url_resolver_1 = require(\"angular2/src/compiler/url_resolver\");\n  var style_url_resolver_1 = require(\"angular2/src/compiler/style_url_resolver\");\n  var di_1 = require(\"angular2/src/core/di\");\n  var view_1 = require(\"angular2/src/core/metadata/view\");\n  var html_ast_1 = require(\"angular2/src/compiler/html_ast\");\n  var html_parser_1 = require(\"angular2/src/compiler/html_parser\");\n  var template_preparser_1 = require(\"angular2/src/compiler/template_preparser\");\n  var TemplateNormalizer = (function() {\n    function TemplateNormalizer(_xhr, _urlResolver, _domParser) {\n      this._xhr = _xhr;\n      this._urlResolver = _urlResolver;\n      this._domParser = _domParser;\n    }\n    TemplateNormalizer.prototype.normalizeTemplate = function(directiveType, template) {\n      var _this = this;\n      if (lang_1.isPresent(template.template)) {\n        return async_1.PromiseWrapper.resolve(this.normalizeLoadedTemplate(directiveType, template, template.template, directiveType.moduleUrl));\n      } else if (lang_1.isPresent(template.templateUrl)) {\n        var sourceAbsUrl = this._urlResolver.resolve(directiveType.moduleUrl, template.templateUrl);\n        return this._xhr.get(sourceAbsUrl).then(function(templateContent) {\n          return _this.normalizeLoadedTemplate(directiveType, template, templateContent, sourceAbsUrl);\n        });\n      } else {\n        throw new exceptions_1.BaseException(\"No template specified for component \" + directiveType.name);\n      }\n    };\n    TemplateNormalizer.prototype.normalizeLoadedTemplate = function(directiveType, templateMeta, template, templateAbsUrl) {\n      var _this = this;\n      var domNodes = this._domParser.parse(template, directiveType.name);\n      var visitor = new TemplatePreparseVisitor();\n      html_ast_1.htmlVisitAll(visitor, domNodes);\n      var allStyles = templateMeta.styles.concat(visitor.styles);\n      var allStyleAbsUrls = visitor.styleUrls.filter(style_url_resolver_1.isStyleUrlResolvable).map(function(url) {\n        return _this._urlResolver.resolve(templateAbsUrl, url);\n      }).concat(templateMeta.styleUrls.filter(style_url_resolver_1.isStyleUrlResolvable).map(function(url) {\n        return _this._urlResolver.resolve(directiveType.moduleUrl, url);\n      }));\n      var allResolvedStyles = allStyles.map(function(style) {\n        var styleWithImports = style_url_resolver_1.extractStyleUrls(_this._urlResolver, templateAbsUrl, style);\n        styleWithImports.styleUrls.forEach(function(styleUrl) {\n          return allStyleAbsUrls.push(styleUrl);\n        });\n        return styleWithImports.style;\n      });\n      var encapsulation = templateMeta.encapsulation;\n      if (encapsulation === view_1.ViewEncapsulation.Emulated && allResolvedStyles.length === 0 && allStyleAbsUrls.length === 0) {\n        encapsulation = view_1.ViewEncapsulation.None;\n      }\n      return new directive_metadata_1.CompileTemplateMetadata({\n        encapsulation: encapsulation,\n        template: template,\n        templateUrl: templateAbsUrl,\n        styles: allResolvedStyles,\n        styleUrls: allStyleAbsUrls,\n        ngContentSelectors: visitor.ngContentSelectors\n      });\n    };\n    TemplateNormalizer = __decorate([di_1.Injectable(), __metadata('design:paramtypes', [xhr_1.XHR, url_resolver_1.UrlResolver, html_parser_1.HtmlParser])], TemplateNormalizer);\n    return TemplateNormalizer;\n  })();\n  exports.TemplateNormalizer = TemplateNormalizer;\n  var TemplatePreparseVisitor = (function() {\n    function TemplatePreparseVisitor() {\n      this.ngContentSelectors = [];\n      this.styles = [];\n      this.styleUrls = [];\n      this.ngNonBindableStackCount = 0;\n    }\n    TemplatePreparseVisitor.prototype.visitElement = function(ast, context) {\n      var preparsedElement = template_preparser_1.preparseElement(ast);\n      switch (preparsedElement.type) {\n        case template_preparser_1.PreparsedElementType.NG_CONTENT:\n          if (this.ngNonBindableStackCount === 0) {\n            this.ngContentSelectors.push(preparsedElement.selectAttr);\n          }\n          break;\n        case template_preparser_1.PreparsedElementType.STYLE:\n          var textContent = '';\n          ast.children.forEach(function(child) {\n            if (child instanceof html_ast_1.HtmlTextAst) {\n              textContent += child.value;\n            }\n          });\n          this.styles.push(textContent);\n          break;\n        case template_preparser_1.PreparsedElementType.STYLESHEET:\n          this.styleUrls.push(preparsedElement.hrefAttr);\n          break;\n      }\n      if (preparsedElement.nonBindable) {\n        this.ngNonBindableStackCount++;\n      }\n      html_ast_1.htmlVisitAll(this, ast.children);\n      if (preparsedElement.nonBindable) {\n        this.ngNonBindableStackCount--;\n      }\n      return null;\n    };\n    TemplatePreparseVisitor.prototype.visitAttr = function(ast, context) {\n      return null;\n    };\n    TemplatePreparseVisitor.prototype.visitText = function(ast, context) {\n      return null;\n    };\n    return TemplatePreparseVisitor;\n  })();\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"angular2/src/compiler/runtime_metadata\", [\"angular2/src/core/di\", \"angular2/src/facade/lang\", \"angular2/src/facade/exceptions\", \"angular2/src/facade/collection\", \"angular2/src/compiler/directive_metadata\", \"angular2/src/core/metadata/directives\", \"angular2/src/core/linker/directive_resolver\", \"angular2/src/core/linker/view_resolver\", \"angular2/src/core/linker/directive_lifecycle_reflector\", \"angular2/src/core/linker/interfaces\", \"angular2/src/core/reflection/reflection\", \"angular2/src/core/di\", \"angular2/src/core/platform_directives_and_pipes\", \"angular2/src/compiler/util\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  var __decorate = (this && this.__decorate) || function(decorators, target, key, desc) {\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\")\n      return Reflect.decorate(decorators, target, key, desc);\n    switch (arguments.length) {\n      case 2:\n        return decorators.reduceRight(function(o, d) {\n          return (d && d(o)) || o;\n        }, target);\n      case 3:\n        return decorators.reduceRight(function(o, d) {\n          return (d && d(target, key)), void 0;\n        }, void 0);\n      case 4:\n        return decorators.reduceRight(function(o, d) {\n          return (d && d(target, key, o)) || o;\n        }, desc);\n    }\n  };\n  var __metadata = (this && this.__metadata) || function(k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\")\n      return Reflect.metadata(k, v);\n  };\n  var __param = (this && this.__param) || function(paramIndex, decorator) {\n    return function(target, key) {\n      decorator(target, key, paramIndex);\n    };\n  };\n  var di_1 = require(\"angular2/src/core/di\");\n  var lang_1 = require(\"angular2/src/facade/lang\");\n  var exceptions_1 = require(\"angular2/src/facade/exceptions\");\n  var collection_1 = require(\"angular2/src/facade/collection\");\n  var cpl = require(\"angular2/src/compiler/directive_metadata\");\n  var md = require(\"angular2/src/core/metadata/directives\");\n  var directive_resolver_1 = require(\"angular2/src/core/linker/directive_resolver\");\n  var view_resolver_1 = require(\"angular2/src/core/linker/view_resolver\");\n  var directive_lifecycle_reflector_1 = require(\"angular2/src/core/linker/directive_lifecycle_reflector\");\n  var interfaces_1 = require(\"angular2/src/core/linker/interfaces\");\n  var reflection_1 = require(\"angular2/src/core/reflection/reflection\");\n  var di_2 = require(\"angular2/src/core/di\");\n  var platform_directives_and_pipes_1 = require(\"angular2/src/core/platform_directives_and_pipes\");\n  var util_1 = require(\"angular2/src/compiler/util\");\n  var RuntimeMetadataResolver = (function() {\n    function RuntimeMetadataResolver(_directiveResolver, _viewResolver, _platformDirectives) {\n      this._directiveResolver = _directiveResolver;\n      this._viewResolver = _viewResolver;\n      this._platformDirectives = _platformDirectives;\n      this._cache = new Map();\n    }\n    RuntimeMetadataResolver.prototype.getMetadata = function(directiveType) {\n      var meta = this._cache.get(directiveType);\n      if (lang_1.isBlank(meta)) {\n        var dirMeta = this._directiveResolver.resolve(directiveType);\n        var moduleUrl = calcModuleUrl(directiveType, dirMeta);\n        var templateMeta = null;\n        var changeDetectionStrategy = null;\n        if (dirMeta instanceof md.ComponentMetadata) {\n          var cmpMeta = dirMeta;\n          var viewMeta = this._viewResolver.resolve(directiveType);\n          templateMeta = new cpl.CompileTemplateMetadata({\n            encapsulation: viewMeta.encapsulation,\n            template: viewMeta.template,\n            templateUrl: viewMeta.templateUrl,\n            styles: viewMeta.styles,\n            styleUrls: viewMeta.styleUrls\n          });\n          changeDetectionStrategy = cmpMeta.changeDetection;\n        }\n        meta = cpl.CompileDirectiveMetadata.create({\n          selector: dirMeta.selector,\n          exportAs: dirMeta.exportAs,\n          isComponent: lang_1.isPresent(templateMeta),\n          dynamicLoadable: true,\n          type: new cpl.CompileTypeMetadata({\n            name: lang_1.stringify(directiveType),\n            moduleUrl: moduleUrl,\n            runtime: directiveType\n          }),\n          template: templateMeta,\n          changeDetection: changeDetectionStrategy,\n          inputs: dirMeta.inputs,\n          outputs: dirMeta.outputs,\n          host: dirMeta.host,\n          lifecycleHooks: interfaces_1.LIFECYCLE_HOOKS_VALUES.filter(function(hook) {\n            return directive_lifecycle_reflector_1.hasLifecycleHook(hook, directiveType);\n          })\n        });\n        this._cache.set(directiveType, meta);\n      }\n      return meta;\n    };\n    RuntimeMetadataResolver.prototype.getViewDirectivesMetadata = function(component) {\n      var _this = this;\n      var view = this._viewResolver.resolve(component);\n      var directives = flattenDirectives(view, this._platformDirectives);\n      for (var i = 0; i < directives.length; i++) {\n        if (!isValidDirective(directives[i])) {\n          throw new exceptions_1.BaseException(\"Unexpected directive value '\" + lang_1.stringify(directives[i]) + \"' on the View of component '\" + lang_1.stringify(component) + \"'\");\n        }\n      }\n      return removeDuplicates(directives).map(function(type) {\n        return _this.getMetadata(type);\n      });\n    };\n    RuntimeMetadataResolver = __decorate([di_2.Injectable(), __param(2, di_2.Optional()), __param(2, di_2.Inject(platform_directives_and_pipes_1.PLATFORM_DIRECTIVES)), __metadata('design:paramtypes', [directive_resolver_1.DirectiveResolver, view_resolver_1.ViewResolver, Array])], RuntimeMetadataResolver);\n    return RuntimeMetadataResolver;\n  })();\n  exports.RuntimeMetadataResolver = RuntimeMetadataResolver;\n  function removeDuplicates(items) {\n    var m = new Map();\n    items.forEach(function(i) {\n      return m.set(i, null);\n    });\n    return collection_1.MapWrapper.keys(m);\n  }\n  function flattenDirectives(view, platformDirectives) {\n    var directives = [];\n    if (lang_1.isPresent(platformDirectives)) {\n      flattenArray(platformDirectives, directives);\n    }\n    if (lang_1.isPresent(view.directives)) {\n      flattenArray(view.directives, directives);\n    }\n    return directives;\n  }\n  function flattenArray(tree, out) {\n    for (var i = 0; i < tree.length; i++) {\n      var item = di_1.resolveForwardRef(tree[i]);\n      if (lang_1.isArray(item)) {\n        flattenArray(item, out);\n      } else {\n        out.push(item);\n      }\n    }\n  }\n  function isValidDirective(value) {\n    return lang_1.isPresent(value) && (value instanceof lang_1.Type);\n  }\n  function calcModuleUrl(type, dirMeta) {\n    if (lang_1.isPresent(dirMeta.moduleId)) {\n      return \"package:\" + dirMeta.moduleId + util_1.MODULE_SUFFIX;\n    } else {\n      return reflection_1.reflector.importUri(type);\n    }\n  }\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"angular2/src/compiler/schema/dom_element_schema_registry\", [\"angular2/src/core/di\", \"angular2/src/facade/lang\", \"angular2/src/facade/collection\", \"angular2/src/core/dom/dom_adapter\", \"angular2/src/compiler/schema/element_schema_registry\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  var __extends = (this && this.__extends) || function(d, b) {\n    for (var p in b)\n      if (b.hasOwnProperty(p))\n        d[p] = b[p];\n    function __() {\n      this.constructor = d;\n    }\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n  };\n  var __decorate = (this && this.__decorate) || function(decorators, target, key, desc) {\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\")\n      return Reflect.decorate(decorators, target, key, desc);\n    switch (arguments.length) {\n      case 2:\n        return decorators.reduceRight(function(o, d) {\n          return (d && d(o)) || o;\n        }, target);\n      case 3:\n        return decorators.reduceRight(function(o, d) {\n          return (d && d(target, key)), void 0;\n        }, void 0);\n      case 4:\n        return decorators.reduceRight(function(o, d) {\n          return (d && d(target, key, o)) || o;\n        }, desc);\n    }\n  };\n  var __metadata = (this && this.__metadata) || function(k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\")\n      return Reflect.metadata(k, v);\n  };\n  var di_1 = require(\"angular2/src/core/di\");\n  var lang_1 = require(\"angular2/src/facade/lang\");\n  var collection_1 = require(\"angular2/src/facade/collection\");\n  var dom_adapter_1 = require(\"angular2/src/core/dom/dom_adapter\");\n  var element_schema_registry_1 = require(\"angular2/src/compiler/schema/element_schema_registry\");\n  var DomElementSchemaRegistry = (function(_super) {\n    __extends(DomElementSchemaRegistry, _super);\n    function DomElementSchemaRegistry() {\n      _super.apply(this, arguments);\n      this._protoElements = new Map();\n    }\n    DomElementSchemaRegistry.prototype._getProtoElement = function(tagName) {\n      var element = this._protoElements.get(tagName);\n      if (lang_1.isBlank(element)) {\n        element = dom_adapter_1.DOM.createElement(tagName);\n        this._protoElements.set(tagName, element);\n      }\n      return element;\n    };\n    DomElementSchemaRegistry.prototype.hasProperty = function(tagName, propName) {\n      if (tagName.indexOf('-') !== -1) {\n        return true;\n      } else {\n        var elm = this._getProtoElement(tagName);\n        return dom_adapter_1.DOM.hasProperty(elm, propName);\n      }\n    };\n    DomElementSchemaRegistry.prototype.getMappedPropName = function(propName) {\n      var mappedPropName = collection_1.StringMapWrapper.get(dom_adapter_1.DOM.attrToPropMap, propName);\n      return lang_1.isPresent(mappedPropName) ? mappedPropName : propName;\n    };\n    DomElementSchemaRegistry = __decorate([di_1.Injectable(), __metadata('design:paramtypes', [])], DomElementSchemaRegistry);\n    return DomElementSchemaRegistry;\n  })(element_schema_registry_1.ElementSchemaRegistry);\n  exports.DomElementSchemaRegistry = DomElementSchemaRegistry;\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"angular2/src/compiler/app_root_url\", [\"angular2/src/core/di\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  var __decorate = (this && this.__decorate) || function(decorators, target, key, desc) {\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\")\n      return Reflect.decorate(decorators, target, key, desc);\n    switch (arguments.length) {\n      case 2:\n        return decorators.reduceRight(function(o, d) {\n          return (d && d(o)) || o;\n        }, target);\n      case 3:\n        return decorators.reduceRight(function(o, d) {\n          return (d && d(target, key)), void 0;\n        }, void 0);\n      case 4:\n        return decorators.reduceRight(function(o, d) {\n          return (d && d(target, key, o)) || o;\n        }, desc);\n    }\n  };\n  var __metadata = (this && this.__metadata) || function(k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\")\n      return Reflect.metadata(k, v);\n  };\n  var di_1 = require(\"angular2/src/core/di\");\n  var AppRootUrl = (function() {\n    function AppRootUrl(value) {\n      this.value = value;\n    }\n    AppRootUrl = __decorate([di_1.Injectable(), __metadata('design:paramtypes', [String])], AppRootUrl);\n    return AppRootUrl;\n  })();\n  exports.AppRootUrl = AppRootUrl;\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"angular2/src/compiler/anchor_based_app_root_url\", [\"angular2/src/compiler/app_root_url\", \"angular2/src/core/dom/dom_adapter\", \"angular2/src/core/di\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  var __extends = (this && this.__extends) || function(d, b) {\n    for (var p in b)\n      if (b.hasOwnProperty(p))\n        d[p] = b[p];\n    function __() {\n      this.constructor = d;\n    }\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n  };\n  var __decorate = (this && this.__decorate) || function(decorators, target, key, desc) {\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\")\n      return Reflect.decorate(decorators, target, key, desc);\n    switch (arguments.length) {\n      case 2:\n        return decorators.reduceRight(function(o, d) {\n          return (d && d(o)) || o;\n        }, target);\n      case 3:\n        return decorators.reduceRight(function(o, d) {\n          return (d && d(target, key)), void 0;\n        }, void 0);\n      case 4:\n        return decorators.reduceRight(function(o, d) {\n          return (d && d(target, key, o)) || o;\n        }, desc);\n    }\n  };\n  var __metadata = (this && this.__metadata) || function(k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\")\n      return Reflect.metadata(k, v);\n  };\n  var app_root_url_1 = require(\"angular2/src/compiler/app_root_url\");\n  var dom_adapter_1 = require(\"angular2/src/core/dom/dom_adapter\");\n  var di_1 = require(\"angular2/src/core/di\");\n  var AnchorBasedAppRootUrl = (function(_super) {\n    __extends(AnchorBasedAppRootUrl, _super);\n    function AnchorBasedAppRootUrl() {\n      _super.call(this, \"\");\n      var a = dom_adapter_1.DOM.createElement('a');\n      dom_adapter_1.DOM.resolveAndSetHref(a, './', null);\n      this.value = dom_adapter_1.DOM.getHref(a);\n    }\n    AnchorBasedAppRootUrl = __decorate([di_1.Injectable(), __metadata('design:paramtypes', [])], AnchorBasedAppRootUrl);\n    return AnchorBasedAppRootUrl;\n  })(app_root_url_1.AppRootUrl);\n  exports.AnchorBasedAppRootUrl = AnchorBasedAppRootUrl;\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"angular2/src/compiler/xhr_impl\", [\"angular2/src/facade/promise\", \"angular2/src/facade/lang\", \"angular2/src/compiler/xhr\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  var __extends = (this && this.__extends) || function(d, b) {\n    for (var p in b)\n      if (b.hasOwnProperty(p))\n        d[p] = b[p];\n    function __() {\n      this.constructor = d;\n    }\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n  };\n  var promise_1 = require(\"angular2/src/facade/promise\");\n  var lang_1 = require(\"angular2/src/facade/lang\");\n  var xhr_1 = require(\"angular2/src/compiler/xhr\");\n  var XHRImpl = (function(_super) {\n    __extends(XHRImpl, _super);\n    function XHRImpl() {\n      _super.apply(this, arguments);\n    }\n    XHRImpl.prototype.get = function(url) {\n      var completer = promise_1.PromiseWrapper.completer();\n      var xhr = new XMLHttpRequest();\n      xhr.open('GET', url, true);\n      xhr.responseType = 'text';\n      xhr.onload = function() {\n        var response = lang_1.isPresent(xhr.response) ? xhr.response : xhr.responseText;\n        var status = xhr.status === 1223 ? 204 : xhr.status;\n        if (status === 0) {\n          status = response ? 200 : 0;\n        }\n        if (200 <= status && status <= 300) {\n          completer.resolve(response);\n        } else {\n          completer.reject(\"Failed to load \" + url, null);\n        }\n      };\n      xhr.onerror = function() {\n        completer.reject(\"Failed to load \" + url, null);\n      };\n      xhr.send();\n      return completer.promise;\n    };\n    return XHRImpl;\n  })(xhr_1.XHR);\n  exports.XHRImpl = XHRImpl;\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"angular2/src/core/testability/testability\", [\"angular2/src/core/di\", \"angular2/src/core/dom/dom_adapter\", \"angular2/src/facade/collection\", \"angular2/src/facade/lang\", \"angular2/src/facade/exceptions\", \"angular2/src/core/zone/ng_zone\", \"angular2/src/facade/async\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  var __decorate = (this && this.__decorate) || function(decorators, target, key, desc) {\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\")\n      return Reflect.decorate(decorators, target, key, desc);\n    switch (arguments.length) {\n      case 2:\n        return decorators.reduceRight(function(o, d) {\n          return (d && d(o)) || o;\n        }, target);\n      case 3:\n        return decorators.reduceRight(function(o, d) {\n          return (d && d(target, key)), void 0;\n        }, void 0);\n      case 4:\n        return decorators.reduceRight(function(o, d) {\n          return (d && d(target, key, o)) || o;\n        }, desc);\n    }\n  };\n  var __metadata = (this && this.__metadata) || function(k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\")\n      return Reflect.metadata(k, v);\n  };\n  var di_1 = require(\"angular2/src/core/di\");\n  var dom_adapter_1 = require(\"angular2/src/core/dom/dom_adapter\");\n  var collection_1 = require(\"angular2/src/facade/collection\");\n  var lang_1 = require(\"angular2/src/facade/lang\");\n  var exceptions_1 = require(\"angular2/src/facade/exceptions\");\n  var ng_zone_1 = require(\"angular2/src/core/zone/ng_zone\");\n  var async_1 = require(\"angular2/src/facade/async\");\n  var Testability = (function() {\n    function Testability(_ngZone) {\n      this._pendingCount = 0;\n      this._callbacks = [];\n      this._isAngularEventPending = false;\n      this._watchAngularEvents(_ngZone);\n    }\n    Testability.prototype._watchAngularEvents = function(_ngZone) {\n      var _this = this;\n      async_1.ObservableWrapper.subscribe(_ngZone.onTurnStart, function(_) {\n        _this._isAngularEventPending = true;\n      });\n      _ngZone.runOutsideAngular(function() {\n        async_1.ObservableWrapper.subscribe(_ngZone.onEventDone, function(_) {\n          if (!_ngZone.hasPendingTimers) {\n            _this._isAngularEventPending = false;\n            _this._runCallbacksIfReady();\n          }\n        });\n      });\n    };\n    Testability.prototype.increasePendingRequestCount = function() {\n      this._pendingCount += 1;\n      return this._pendingCount;\n    };\n    Testability.prototype.decreasePendingRequestCount = function() {\n      this._pendingCount -= 1;\n      if (this._pendingCount < 0) {\n        throw new exceptions_1.BaseException('pending async requests below zero');\n      }\n      this._runCallbacksIfReady();\n      return this._pendingCount;\n    };\n    Testability.prototype.isStable = function() {\n      return this._pendingCount == 0 && !this._isAngularEventPending;\n    };\n    Testability.prototype._runCallbacksIfReady = function() {\n      var _this = this;\n      if (!this.isStable()) {\n        return ;\n      }\n      async_1.PromiseWrapper.resolve(null).then(function(_) {\n        while (_this._callbacks.length !== 0) {\n          (_this._callbacks.pop())();\n        }\n      });\n    };\n    Testability.prototype.whenStable = function(callback) {\n      this._callbacks.push(callback);\n      this._runCallbacksIfReady();\n    };\n    Testability.prototype.getPendingRequestCount = function() {\n      return this._pendingCount;\n    };\n    Testability.prototype.isAngularEventPending = function() {\n      return this._isAngularEventPending;\n    };\n    Testability.prototype.findBindings = function(using, provider, exactMatch) {\n      return [];\n    };\n    Testability.prototype.findProviders = function(using, provider, exactMatch) {\n      return [];\n    };\n    Testability = __decorate([di_1.Injectable(), __metadata('design:paramtypes', [ng_zone_1.NgZone])], Testability);\n    return Testability;\n  })();\n  exports.Testability = Testability;\n  var TestabilityRegistry = (function() {\n    function TestabilityRegistry() {\n      this._applications = new collection_1.Map();\n      testabilityGetter.addToWindow(this);\n    }\n    TestabilityRegistry.prototype.registerApplication = function(token, testability) {\n      this._applications.set(token, testability);\n    };\n    TestabilityRegistry.prototype.getAllTestabilities = function() {\n      return collection_1.MapWrapper.values(this._applications);\n    };\n    TestabilityRegistry.prototype.findTestabilityInTree = function(elem, findInAncestors) {\n      if (findInAncestors === void 0) {\n        findInAncestors = true;\n      }\n      if (elem == null) {\n        return null;\n      }\n      if (this._applications.has(elem)) {\n        return this._applications.get(elem);\n      } else if (!findInAncestors) {\n        return null;\n      }\n      if (dom_adapter_1.DOM.isShadowRoot(elem)) {\n        return this.findTestabilityInTree(dom_adapter_1.DOM.getHost(elem));\n      }\n      return this.findTestabilityInTree(dom_adapter_1.DOM.parentElement(elem));\n    };\n    TestabilityRegistry = __decorate([di_1.Injectable(), __metadata('design:paramtypes', [])], TestabilityRegistry);\n    return TestabilityRegistry;\n  })();\n  exports.TestabilityRegistry = TestabilityRegistry;\n  var NoopGetTestability = (function() {\n    function NoopGetTestability() {}\n    NoopGetTestability.prototype.addToWindow = function(registry) {};\n    NoopGetTestability = __decorate([lang_1.CONST(), __metadata('design:paramtypes', [])], NoopGetTestability);\n    return NoopGetTestability;\n  })();\n  function setTestabilityGetter(getter) {\n    testabilityGetter = getter;\n  }\n  exports.setTestabilityGetter = setTestabilityGetter;\n  var testabilityGetter = lang_1.CONST_EXPR(new NoopGetTestability());\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"angular2/src/core/render/dom/events/key_events\", [\"angular2/src/core/dom/dom_adapter\", \"angular2/src/facade/lang\", \"angular2/src/facade/collection\", \"angular2/src/core/render/dom/events/event_manager\", \"angular2/src/core/di\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  var __extends = (this && this.__extends) || function(d, b) {\n    for (var p in b)\n      if (b.hasOwnProperty(p))\n        d[p] = b[p];\n    function __() {\n      this.constructor = d;\n    }\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n  };\n  var __decorate = (this && this.__decorate) || function(decorators, target, key, desc) {\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\")\n      return Reflect.decorate(decorators, target, key, desc);\n    switch (arguments.length) {\n      case 2:\n        return decorators.reduceRight(function(o, d) {\n          return (d && d(o)) || o;\n        }, target);\n      case 3:\n        return decorators.reduceRight(function(o, d) {\n          return (d && d(target, key)), void 0;\n        }, void 0);\n      case 4:\n        return decorators.reduceRight(function(o, d) {\n          return (d && d(target, key, o)) || o;\n        }, desc);\n    }\n  };\n  var __metadata = (this && this.__metadata) || function(k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\")\n      return Reflect.metadata(k, v);\n  };\n  var dom_adapter_1 = require(\"angular2/src/core/dom/dom_adapter\");\n  var lang_1 = require(\"angular2/src/facade/lang\");\n  var collection_1 = require(\"angular2/src/facade/collection\");\n  var event_manager_1 = require(\"angular2/src/core/render/dom/events/event_manager\");\n  var di_1 = require(\"angular2/src/core/di\");\n  var modifierKeys = ['alt', 'control', 'meta', 'shift'];\n  var modifierKeyGetters = {\n    'alt': function(event) {\n      return event.altKey;\n    },\n    'control': function(event) {\n      return event.ctrlKey;\n    },\n    'meta': function(event) {\n      return event.metaKey;\n    },\n    'shift': function(event) {\n      return event.shiftKey;\n    }\n  };\n  var KeyEventsPlugin = (function(_super) {\n    __extends(KeyEventsPlugin, _super);\n    function KeyEventsPlugin() {\n      _super.call(this);\n    }\n    KeyEventsPlugin.prototype.supports = function(eventName) {\n      return lang_1.isPresent(KeyEventsPlugin.parseEventName(eventName));\n    };\n    KeyEventsPlugin.prototype.addEventListener = function(element, eventName, handler) {\n      var parsedEvent = KeyEventsPlugin.parseEventName(eventName);\n      var outsideHandler = KeyEventsPlugin.eventCallback(element, collection_1.StringMapWrapper.get(parsedEvent, 'fullKey'), handler, this.manager.getZone());\n      this.manager.getZone().runOutsideAngular(function() {\n        dom_adapter_1.DOM.on(element, collection_1.StringMapWrapper.get(parsedEvent, 'domEventName'), outsideHandler);\n      });\n    };\n    KeyEventsPlugin.parseEventName = function(eventName) {\n      var parts = eventName.toLowerCase().split('.');\n      var domEventName = parts.shift();\n      if ((parts.length === 0) || !(lang_1.StringWrapper.equals(domEventName, 'keydown') || lang_1.StringWrapper.equals(domEventName, 'keyup'))) {\n        return null;\n      }\n      var key = KeyEventsPlugin._normalizeKey(parts.pop());\n      var fullKey = '';\n      modifierKeys.forEach(function(modifierName) {\n        if (collection_1.ListWrapper.contains(parts, modifierName)) {\n          collection_1.ListWrapper.remove(parts, modifierName);\n          fullKey += modifierName + '.';\n        }\n      });\n      fullKey += key;\n      if (parts.length != 0 || key.length === 0) {\n        return null;\n      }\n      var result = collection_1.StringMapWrapper.create();\n      collection_1.StringMapWrapper.set(result, 'domEventName', domEventName);\n      collection_1.StringMapWrapper.set(result, 'fullKey', fullKey);\n      return result;\n    };\n    KeyEventsPlugin.getEventFullKey = function(event) {\n      var fullKey = '';\n      var key = dom_adapter_1.DOM.getEventKey(event);\n      key = key.toLowerCase();\n      if (lang_1.StringWrapper.equals(key, ' ')) {\n        key = 'space';\n      } else if (lang_1.StringWrapper.equals(key, '.')) {\n        key = 'dot';\n      }\n      modifierKeys.forEach(function(modifierName) {\n        if (modifierName != key) {\n          var modifierGetter = collection_1.StringMapWrapper.get(modifierKeyGetters, modifierName);\n          if (modifierGetter(event)) {\n            fullKey += modifierName + '.';\n          }\n        }\n      });\n      fullKey += key;\n      return fullKey;\n    };\n    KeyEventsPlugin.eventCallback = function(element, fullKey, handler, zone) {\n      return function(event) {\n        if (lang_1.StringWrapper.equals(KeyEventsPlugin.getEventFullKey(event), fullKey)) {\n          zone.run(function() {\n            return handler(event);\n          });\n        }\n      };\n    };\n    KeyEventsPlugin._normalizeKey = function(keyName) {\n      switch (keyName) {\n        case 'esc':\n          return 'escape';\n        default:\n          return keyName;\n      }\n    };\n    KeyEventsPlugin = __decorate([di_1.Injectable(), __metadata('design:paramtypes', [])], KeyEventsPlugin);\n    return KeyEventsPlugin;\n  })(event_manager_1.EventManagerPlugin);\n  exports.KeyEventsPlugin = KeyEventsPlugin;\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"angular2/src/core/render/dom/events/hammer_common\", [\"angular2/src/core/render/dom/events/event_manager\", \"angular2/src/facade/collection\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  var __extends = (this && this.__extends) || function(d, b) {\n    for (var p in b)\n      if (b.hasOwnProperty(p))\n        d[p] = b[p];\n    function __() {\n      this.constructor = d;\n    }\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n  };\n  var event_manager_1 = require(\"angular2/src/core/render/dom/events/event_manager\");\n  var collection_1 = require(\"angular2/src/facade/collection\");\n  var _eventNames = {\n    'pan': true,\n    'panstart': true,\n    'panmove': true,\n    'panend': true,\n    'pancancel': true,\n    'panleft': true,\n    'panright': true,\n    'panup': true,\n    'pandown': true,\n    'pinch': true,\n    'pinchstart': true,\n    'pinchmove': true,\n    'pinchend': true,\n    'pinchcancel': true,\n    'pinchin': true,\n    'pinchout': true,\n    'press': true,\n    'pressup': true,\n    'rotate': true,\n    'rotatestart': true,\n    'rotatemove': true,\n    'rotateend': true,\n    'rotatecancel': true,\n    'swipe': true,\n    'swipeleft': true,\n    'swiperight': true,\n    'swipeup': true,\n    'swipedown': true,\n    'tap': true\n  };\n  var HammerGesturesPluginCommon = (function(_super) {\n    __extends(HammerGesturesPluginCommon, _super);\n    function HammerGesturesPluginCommon() {\n      _super.call(this);\n    }\n    HammerGesturesPluginCommon.prototype.supports = function(eventName) {\n      eventName = eventName.toLowerCase();\n      return collection_1.StringMapWrapper.contains(_eventNames, eventName);\n    };\n    return HammerGesturesPluginCommon;\n  })(event_manager_1.EventManagerPlugin);\n  exports.HammerGesturesPluginCommon = HammerGesturesPluginCommon;\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"angular2/src/core/platform_bindings\", [\"angular2/src/core/di\", \"angular2/src/facade/exceptions\", \"angular2/src/core/dom/dom_adapter\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  var di_1 = require(\"angular2/src/core/di\");\n  var exceptions_1 = require(\"angular2/src/facade/exceptions\");\n  var dom_adapter_1 = require(\"angular2/src/core/dom/dom_adapter\");\n  exports.EXCEPTION_PROVIDER = di_1.provide(exceptions_1.ExceptionHandler, {\n    useFactory: function() {\n      return new exceptions_1.ExceptionHandler(dom_adapter_1.DOM, false);\n    },\n    deps: []\n  });\n  exports.EXCEPTION_BINDING = exports.EXCEPTION_PROVIDER;\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"angular2/src/core/profile/wtf_init\", [], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  function wtfInit() {}\n  exports.wtfInit = wtfInit;\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"angular2/src/core/application_ref\", [\"angular2/src/core/zone/ng_zone\", \"angular2/src/facade/lang\", \"angular2/src/core/di\", \"angular2/src/core/application_tokens\", \"angular2/src/facade/async\", \"angular2/src/facade/collection\", \"angular2/src/core/reflection/reflection\", \"angular2/src/core/testability/testability\", \"angular2/src/core/linker/dynamic_component_loader\", \"angular2/src/facade/exceptions\", \"angular2/src/core/dom/dom_adapter\", \"angular2/src/core/linker/view_ref\", \"angular2/src/core/change_detection/change_detection\", \"angular2/src/core/linker/view_pool\", \"angular2/src/core/linker/view_manager\", \"angular2/src/core/linker/view_manager_utils\", \"angular2/src/core/linker/view_listener\", \"angular2/src/core/linker/proto_view_factory\", \"angular2/src/core/linker/view_resolver\", \"angular2/src/core/linker/directive_resolver\", \"angular2/src/core/linker/pipe_resolver\", \"angular2/src/core/linker/compiler\", \"angular2/src/core/linker/dynamic_component_loader\", \"angular2/src/core/linker/view_manager\", \"angular2/src/core/linker/compiler\", \"angular2/src/core/profile/profile\", \"angular2/src/core/platform_directives_and_pipes\", \"angular2/src/facade/lang\", \"angular2/common\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  var __extends = (this && this.__extends) || function(d, b) {\n    for (var p in b)\n      if (b.hasOwnProperty(p))\n        d[p] = b[p];\n    function __() {\n      this.constructor = d;\n    }\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n  };\n  var ng_zone_1 = require(\"angular2/src/core/zone/ng_zone\");\n  var lang_1 = require(\"angular2/src/facade/lang\");\n  var di_1 = require(\"angular2/src/core/di\");\n  var application_tokens_1 = require(\"angular2/src/core/application_tokens\");\n  var async_1 = require(\"angular2/src/facade/async\");\n  var collection_1 = require(\"angular2/src/facade/collection\");\n  var reflection_1 = require(\"angular2/src/core/reflection/reflection\");\n  var testability_1 = require(\"angular2/src/core/testability/testability\");\n  var dynamic_component_loader_1 = require(\"angular2/src/core/linker/dynamic_component_loader\");\n  var exceptions_1 = require(\"angular2/src/facade/exceptions\");\n  var dom_adapter_1 = require(\"angular2/src/core/dom/dom_adapter\");\n  var view_ref_1 = require(\"angular2/src/core/linker/view_ref\");\n  var change_detection_1 = require(\"angular2/src/core/change_detection/change_detection\");\n  var view_pool_1 = require(\"angular2/src/core/linker/view_pool\");\n  var view_manager_1 = require(\"angular2/src/core/linker/view_manager\");\n  var view_manager_utils_1 = require(\"angular2/src/core/linker/view_manager_utils\");\n  var view_listener_1 = require(\"angular2/src/core/linker/view_listener\");\n  var proto_view_factory_1 = require(\"angular2/src/core/linker/proto_view_factory\");\n  var view_resolver_1 = require(\"angular2/src/core/linker/view_resolver\");\n  var directive_resolver_1 = require(\"angular2/src/core/linker/directive_resolver\");\n  var pipe_resolver_1 = require(\"angular2/src/core/linker/pipe_resolver\");\n  var compiler_1 = require(\"angular2/src/core/linker/compiler\");\n  var dynamic_component_loader_2 = require(\"angular2/src/core/linker/dynamic_component_loader\");\n  var view_manager_2 = require(\"angular2/src/core/linker/view_manager\");\n  var compiler_2 = require(\"angular2/src/core/linker/compiler\");\n  var profile_1 = require(\"angular2/src/core/profile/profile\");\n  var platform_directives_and_pipes_1 = require(\"angular2/src/core/platform_directives_and_pipes\");\n  var lang_2 = require(\"angular2/src/facade/lang\");\n  var common_1 = require(\"angular2/common\");\n  function platformProviders() {\n    return [di_1.provide(reflection_1.Reflector, {useValue: reflection_1.reflector}), testability_1.TestabilityRegistry];\n  }\n  exports.platformProviders = platformProviders;\n  function _componentProviders(appComponentType) {\n    return [di_1.provide(application_tokens_1.APP_COMPONENT, {useValue: appComponentType}), di_1.provide(application_tokens_1.APP_COMPONENT_REF_PROMISE, {\n      useFactory: function(dynamicComponentLoader, appRef, injector) {\n        var ref;\n        return dynamicComponentLoader.loadAsRoot(appComponentType, null, injector, function() {\n          appRef._unloadComponent(ref);\n        }).then(function(componentRef) {\n          ref = componentRef;\n          if (lang_1.isPresent(componentRef.location.nativeElement)) {\n            injector.get(testability_1.TestabilityRegistry).registerApplication(componentRef.location.nativeElement, injector.get(testability_1.Testability));\n          }\n          return componentRef;\n        });\n      },\n      deps: [dynamic_component_loader_1.DynamicComponentLoader, ApplicationRef, di_1.Injector]\n    }), di_1.provide(appComponentType, {\n      useFactory: function(p) {\n        return p.then(function(ref) {\n          return ref.instance;\n        });\n      },\n      deps: [application_tokens_1.APP_COMPONENT_REF_PROMISE]\n    })];\n  }\n  function applicationCommonProviders() {\n    return [di_1.provide(compiler_1.Compiler, {useClass: compiler_2.Compiler_}), application_tokens_1.APP_ID_RANDOM_PROVIDER, view_pool_1.AppViewPool, di_1.provide(view_pool_1.APP_VIEW_POOL_CAPACITY, {useValue: 10000}), di_1.provide(view_manager_1.AppViewManager, {useClass: view_manager_2.AppViewManager_}), view_manager_utils_1.AppViewManagerUtils, view_listener_1.AppViewListener, proto_view_factory_1.ProtoViewFactory, view_resolver_1.ViewResolver, di_1.provide(change_detection_1.IterableDiffers, {useValue: change_detection_1.defaultIterableDiffers}), di_1.provide(change_detection_1.KeyValueDiffers, {useValue: change_detection_1.defaultKeyValueDiffers}), directive_resolver_1.DirectiveResolver, pipe_resolver_1.PipeResolver, di_1.provide(platform_directives_and_pipes_1.PLATFORM_PIPES, {\n      useValue: common_1.COMMON_PIPES,\n      multi: true\n    }), di_1.provide(platform_directives_and_pipes_1.PLATFORM_DIRECTIVES, {\n      useValue: common_1.COMMON_DIRECTIVES,\n      multi: true\n    }), di_1.provide(dynamic_component_loader_1.DynamicComponentLoader, {useClass: dynamic_component_loader_2.DynamicComponentLoader_})];\n  }\n  exports.applicationCommonProviders = applicationCommonProviders;\n  function createNgZone() {\n    return new ng_zone_1.NgZone({enableLongStackTrace: lang_1.assertionsEnabled()});\n  }\n  exports.createNgZone = createNgZone;\n  var _platform;\n  function platformCommon(providers, initializer) {\n    lang_2.lockDevMode();\n    if (lang_1.isPresent(_platform)) {\n      if (lang_1.isBlank(providers)) {\n        return _platform;\n      }\n      throw \"platform() can only be called once per page\";\n    }\n    if (lang_1.isPresent(initializer)) {\n      initializer();\n    }\n    if (lang_1.isBlank(providers)) {\n      providers = platformProviders();\n    }\n    _platform = new PlatformRef_(di_1.Injector.resolveAndCreate(providers), function() {\n      _platform = null;\n    });\n    return _platform;\n  }\n  exports.platformCommon = platformCommon;\n  var PlatformRef = (function() {\n    function PlatformRef() {}\n    Object.defineProperty(PlatformRef.prototype, \"injector\", {\n      get: function() {\n        return exceptions_1.unimplemented();\n      },\n      enumerable: true,\n      configurable: true\n    });\n    ;\n    return PlatformRef;\n  })();\n  exports.PlatformRef = PlatformRef;\n  var PlatformRef_ = (function(_super) {\n    __extends(PlatformRef_, _super);\n    function PlatformRef_(_injector, _dispose) {\n      _super.call(this);\n      this._injector = _injector;\n      this._dispose = _dispose;\n      this._applications = [];\n      this._disposeListeners = [];\n    }\n    PlatformRef_.prototype.registerDisposeListener = function(dispose) {\n      this._disposeListeners.push(dispose);\n    };\n    Object.defineProperty(PlatformRef_.prototype, \"injector\", {\n      get: function() {\n        return this._injector;\n      },\n      enumerable: true,\n      configurable: true\n    });\n    PlatformRef_.prototype.application = function(providers) {\n      var app = this._initApp(createNgZone(), providers);\n      return app;\n    };\n    PlatformRef_.prototype.asyncApplication = function(bindingFn) {\n      var _this = this;\n      var zone = createNgZone();\n      var completer = async_1.PromiseWrapper.completer();\n      zone.run(function() {\n        async_1.PromiseWrapper.then(bindingFn(zone), function(providers) {\n          completer.resolve(_this._initApp(zone, providers));\n        });\n      });\n      return completer.promise;\n    };\n    PlatformRef_.prototype._initApp = function(zone, providers) {\n      var _this = this;\n      var injector;\n      var app;\n      zone.run(function() {\n        providers.push(di_1.provide(ng_zone_1.NgZone, {useValue: zone}));\n        providers.push(di_1.provide(ApplicationRef, {\n          useFactory: function() {\n            return app;\n          },\n          deps: []\n        }));\n        var exceptionHandler;\n        try {\n          injector = _this.injector.resolveAndCreateChild(providers);\n          exceptionHandler = injector.get(exceptions_1.ExceptionHandler);\n          zone.overrideOnErrorHandler(function(e, s) {\n            return exceptionHandler.call(e, s);\n          });\n        } catch (e) {\n          if (lang_1.isPresent(exceptionHandler)) {\n            exceptionHandler.call(e, e.stack);\n          } else {\n            dom_adapter_1.DOM.logError(e);\n          }\n        }\n      });\n      app = new ApplicationRef_(this, zone, injector);\n      this._applications.push(app);\n      return app;\n    };\n    PlatformRef_.prototype.dispose = function() {\n      this._applications.forEach(function(app) {\n        return app.dispose();\n      });\n      this._disposeListeners.forEach(function(dispose) {\n        return dispose();\n      });\n      this._dispose();\n    };\n    PlatformRef_.prototype._applicationDisposed = function(app) {\n      collection_1.ListWrapper.remove(this._applications, app);\n    };\n    return PlatformRef_;\n  })(PlatformRef);\n  exports.PlatformRef_ = PlatformRef_;\n  var ApplicationRef = (function() {\n    function ApplicationRef() {}\n    Object.defineProperty(ApplicationRef.prototype, \"injector\", {\n      get: function() {\n        return exceptions_1.unimplemented();\n      },\n      enumerable: true,\n      configurable: true\n    });\n    ;\n    Object.defineProperty(ApplicationRef.prototype, \"zone\", {\n      get: function() {\n        return exceptions_1.unimplemented();\n      },\n      enumerable: true,\n      configurable: true\n    });\n    ;\n    Object.defineProperty(ApplicationRef.prototype, \"componentTypes\", {\n      get: function() {\n        return exceptions_1.unimplemented();\n      },\n      enumerable: true,\n      configurable: true\n    });\n    ;\n    return ApplicationRef;\n  })();\n  exports.ApplicationRef = ApplicationRef;\n  var ApplicationRef_ = (function(_super) {\n    __extends(ApplicationRef_, _super);\n    function ApplicationRef_(_platform, _zone, _injector) {\n      var _this = this;\n      _super.call(this);\n      this._platform = _platform;\n      this._zone = _zone;\n      this._injector = _injector;\n      this._bootstrapListeners = [];\n      this._disposeListeners = [];\n      this._rootComponents = [];\n      this._rootComponentTypes = [];\n      this._changeDetectorRefs = [];\n      this._runningTick = false;\n      this._enforceNoNewChanges = false;\n      if (lang_1.isPresent(this._zone)) {\n        async_1.ObservableWrapper.subscribe(this._zone.onTurnDone, function(_) {\n          _this._zone.run(function() {\n            _this.tick();\n          });\n        });\n      }\n      this._enforceNoNewChanges = lang_1.assertionsEnabled();\n    }\n    ApplicationRef_.prototype.registerBootstrapListener = function(listener) {\n      this._bootstrapListeners.push(listener);\n    };\n    ApplicationRef_.prototype.registerDisposeListener = function(dispose) {\n      this._disposeListeners.push(dispose);\n    };\n    ApplicationRef_.prototype.registerChangeDetector = function(changeDetector) {\n      this._changeDetectorRefs.push(changeDetector);\n    };\n    ApplicationRef_.prototype.unregisterChangeDetector = function(changeDetector) {\n      collection_1.ListWrapper.remove(this._changeDetectorRefs, changeDetector);\n    };\n    ApplicationRef_.prototype.bootstrap = function(componentType, providers) {\n      var _this = this;\n      var completer = async_1.PromiseWrapper.completer();\n      this._zone.run(function() {\n        var componentProviders = _componentProviders(componentType);\n        if (lang_1.isPresent(providers)) {\n          componentProviders.push(providers);\n        }\n        var exceptionHandler = _this._injector.get(exceptions_1.ExceptionHandler);\n        _this._rootComponentTypes.push(componentType);\n        try {\n          var injector = _this._injector.resolveAndCreateChild(componentProviders);\n          var compRefToken = injector.get(application_tokens_1.APP_COMPONENT_REF_PROMISE);\n          var tick = function(componentRef) {\n            _this._loadComponent(componentRef);\n            completer.resolve(componentRef);\n          };\n          var tickResult = async_1.PromiseWrapper.then(compRefToken, tick);\n          async_1.PromiseWrapper.then(tickResult, function(_) {});\n          async_1.PromiseWrapper.then(tickResult, null, function(err, stackTrace) {\n            return completer.reject(err, stackTrace);\n          });\n        } catch (e) {\n          exceptionHandler.call(e, e.stack);\n          completer.reject(e, e.stack);\n        }\n      });\n      return completer.promise;\n    };\n    ApplicationRef_.prototype._loadComponent = function(ref) {\n      var appChangeDetector = view_ref_1.internalView(ref.hostView).changeDetector;\n      this._changeDetectorRefs.push(appChangeDetector.ref);\n      this.tick();\n      this._rootComponents.push(ref);\n      this._bootstrapListeners.forEach(function(listener) {\n        return listener(ref);\n      });\n    };\n    ApplicationRef_.prototype._unloadComponent = function(ref) {\n      if (!collection_1.ListWrapper.contains(this._rootComponents, ref)) {\n        return ;\n      }\n      this.unregisterChangeDetector(view_ref_1.internalView(ref.hostView).changeDetector.ref);\n      collection_1.ListWrapper.remove(this._rootComponents, ref);\n    };\n    Object.defineProperty(ApplicationRef_.prototype, \"injector\", {\n      get: function() {\n        return this._injector;\n      },\n      enumerable: true,\n      configurable: true\n    });\n    Object.defineProperty(ApplicationRef_.prototype, \"zone\", {\n      get: function() {\n        return this._zone;\n      },\n      enumerable: true,\n      configurable: true\n    });\n    ApplicationRef_.prototype.tick = function() {\n      if (this._runningTick) {\n        throw new exceptions_1.BaseException(\"ApplicationRef.tick is called recursively\");\n      }\n      var s = ApplicationRef_._tickScope();\n      try {\n        this._runningTick = true;\n        this._changeDetectorRefs.forEach(function(detector) {\n          return detector.detectChanges();\n        });\n        if (this._enforceNoNewChanges) {\n          this._changeDetectorRefs.forEach(function(detector) {\n            return detector.checkNoChanges();\n          });\n        }\n      } finally {\n        this._runningTick = false;\n        profile_1.wtfLeave(s);\n      }\n    };\n    ApplicationRef_.prototype.dispose = function() {\n      this._rootComponents.forEach(function(ref) {\n        return ref.dispose();\n      });\n      this._disposeListeners.forEach(function(dispose) {\n        return dispose();\n      });\n      this._platform._applicationDisposed(this);\n    };\n    Object.defineProperty(ApplicationRef_.prototype, \"componentTypes\", {\n      get: function() {\n        return this._rootComponentTypes;\n      },\n      enumerable: true,\n      configurable: true\n    });\n    ApplicationRef_._tickScope = profile_1.wtfCreateScope('ApplicationRef#tick()');\n    return ApplicationRef_;\n  })(ApplicationRef);\n  exports.ApplicationRef_ = ApplicationRef_;\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"angular2/src/core/bootstrap\", [\"angular2/src/core/application\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  var application_1 = require(\"angular2/src/core/application\");\n  exports.bootstrap = application_1.bootstrap;\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"angular2/src/core/services/title\", [\"angular2/src/core/dom/dom_adapter\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  var dom_adapter_1 = require(\"angular2/src/core/dom/dom_adapter\");\n  var Title = (function() {\n    function Title() {}\n    Title.prototype.getTitle = function() {\n      return dom_adapter_1.DOM.getTitle();\n    };\n    Title.prototype.setTitle = function(newTitle) {\n      dom_adapter_1.DOM.setTitle(newTitle);\n    };\n    return Title;\n  })();\n  exports.Title = Title;\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"angular2/src/core/zone\", [\"angular2/src/core/zone/ng_zone\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  var ng_zone_1 = require(\"angular2/src/core/zone/ng_zone\");\n  exports.NgZone = ng_zone_1.NgZone;\n  exports.NgZoneError = ng_zone_1.NgZoneError;\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"angular2/src/core/debug/debug_element\", [\"angular2/src/facade/lang\", \"angular2/src/facade/exceptions\", \"angular2/src/core/dom/dom_adapter\", \"angular2/src/core/linker/view\", \"angular2/src/core/linker/view_ref\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  var __extends = (this && this.__extends) || function(d, b) {\n    for (var p in b)\n      if (b.hasOwnProperty(p))\n        d[p] = b[p];\n    function __() {\n      this.constructor = d;\n    }\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n  };\n  var lang_1 = require(\"angular2/src/facade/lang\");\n  var exceptions_1 = require(\"angular2/src/facade/exceptions\");\n  var dom_adapter_1 = require(\"angular2/src/core/dom/dom_adapter\");\n  var view_1 = require(\"angular2/src/core/linker/view\");\n  var view_ref_1 = require(\"angular2/src/core/linker/view_ref\");\n  var DebugElement = (function() {\n    function DebugElement() {}\n    Object.defineProperty(DebugElement.prototype, \"componentInstance\", {\n      get: function() {\n        return exceptions_1.unimplemented();\n      },\n      enumerable: true,\n      configurable: true\n    });\n    ;\n    Object.defineProperty(DebugElement.prototype, \"nativeElement\", {\n      get: function() {\n        return exceptions_1.unimplemented();\n      },\n      enumerable: true,\n      configurable: true\n    });\n    ;\n    Object.defineProperty(DebugElement.prototype, \"elementRef\", {\n      get: function() {\n        return exceptions_1.unimplemented();\n      },\n      enumerable: true,\n      configurable: true\n    });\n    ;\n    Object.defineProperty(DebugElement.prototype, \"children\", {\n      get: function() {\n        return exceptions_1.unimplemented();\n      },\n      enumerable: true,\n      configurable: true\n    });\n    ;\n    Object.defineProperty(DebugElement.prototype, \"componentViewChildren\", {\n      get: function() {\n        return exceptions_1.unimplemented();\n      },\n      enumerable: true,\n      configurable: true\n    });\n    ;\n    DebugElement.prototype.query = function(predicate, scope) {\n      if (scope === void 0) {\n        scope = Scope.all;\n      }\n      var results = this.queryAll(predicate, scope);\n      return results.length > 0 ? results[0] : null;\n    };\n    DebugElement.prototype.queryAll = function(predicate, scope) {\n      if (scope === void 0) {\n        scope = Scope.all;\n      }\n      var elementsInScope = scope(this);\n      return elementsInScope.filter(predicate);\n    };\n    return DebugElement;\n  })();\n  exports.DebugElement = DebugElement;\n  var DebugElement_ = (function(_super) {\n    __extends(DebugElement_, _super);\n    function DebugElement_(_parentView, _boundElementIndex) {\n      _super.call(this);\n      this._parentView = _parentView;\n      this._boundElementIndex = _boundElementIndex;\n      this._elementInjector = this._parentView.elementInjectors[this._boundElementIndex];\n    }\n    Object.defineProperty(DebugElement_.prototype, \"componentInstance\", {\n      get: function() {\n        if (!lang_1.isPresent(this._elementInjector)) {\n          return null;\n        }\n        return this._elementInjector.getComponent();\n      },\n      enumerable: true,\n      configurable: true\n    });\n    Object.defineProperty(DebugElement_.prototype, \"nativeElement\", {\n      get: function() {\n        return this.elementRef.nativeElement;\n      },\n      enumerable: true,\n      configurable: true\n    });\n    Object.defineProperty(DebugElement_.prototype, \"elementRef\", {\n      get: function() {\n        return this._parentView.elementRefs[this._boundElementIndex];\n      },\n      enumerable: true,\n      configurable: true\n    });\n    DebugElement_.prototype.getDirectiveInstance = function(directiveIndex) {\n      return this._elementInjector.getDirectiveAtIndex(directiveIndex);\n    };\n    Object.defineProperty(DebugElement_.prototype, \"children\", {\n      get: function() {\n        return this._getChildElements(this._parentView, this._boundElementIndex);\n      },\n      enumerable: true,\n      configurable: true\n    });\n    Object.defineProperty(DebugElement_.prototype, \"componentViewChildren\", {\n      get: function() {\n        var shadowView = this._parentView.getNestedView(this._boundElementIndex);\n        if (!lang_1.isPresent(shadowView) || shadowView.proto.type !== view_1.ViewType.COMPONENT) {\n          return [];\n        }\n        return this._getChildElements(shadowView, null);\n      },\n      enumerable: true,\n      configurable: true\n    });\n    DebugElement_.prototype.triggerEventHandler = function(eventName, eventObj) {\n      this._parentView.triggerEventHandlers(eventName, eventObj, this._boundElementIndex);\n    };\n    DebugElement_.prototype.hasDirective = function(type) {\n      if (!lang_1.isPresent(this._elementInjector)) {\n        return false;\n      }\n      return this._elementInjector.hasDirective(type);\n    };\n    DebugElement_.prototype.inject = function(type) {\n      if (!lang_1.isPresent(this._elementInjector)) {\n        return null;\n      }\n      return this._elementInjector.get(type);\n    };\n    DebugElement_.prototype.getLocal = function(name) {\n      return this._parentView.locals.get(name);\n    };\n    DebugElement_.prototype._getChildElements = function(view, parentBoundElementIndex) {\n      var _this = this;\n      var els = [];\n      var parentElementBinder = null;\n      if (lang_1.isPresent(parentBoundElementIndex)) {\n        parentElementBinder = view.proto.elementBinders[parentBoundElementIndex - view.elementOffset];\n      }\n      for (var i = 0; i < view.proto.elementBinders.length; ++i) {\n        var binder = view.proto.elementBinders[i];\n        if (binder.parent == parentElementBinder) {\n          els.push(new DebugElement_(view, view.elementOffset + i));\n          var views = view.viewContainers[view.elementOffset + i];\n          if (lang_1.isPresent(views)) {\n            views.views.forEach(function(nextView) {\n              els = els.concat(_this._getChildElements(nextView, null));\n            });\n          }\n        }\n      }\n      return els;\n    };\n    return DebugElement_;\n  })(DebugElement);\n  exports.DebugElement_ = DebugElement_;\n  function inspectElement(elementRef) {\n    return new DebugElement_(view_ref_1.internalView(elementRef.parentView), elementRef.boundElementIndex);\n  }\n  exports.inspectElement = inspectElement;\n  function asNativeElements(arr) {\n    return arr.map(function(debugEl) {\n      return debugEl.nativeElement;\n    });\n  }\n  exports.asNativeElements = asNativeElements;\n  var Scope = (function() {\n    function Scope() {}\n    Scope.all = function(debugElement) {\n      var scope = [];\n      scope.push(debugElement);\n      debugElement.children.forEach(function(child) {\n        return scope = scope.concat(Scope.all(child));\n      });\n      debugElement.componentViewChildren.forEach(function(child) {\n        return scope = scope.concat(Scope.all(child));\n      });\n      return scope;\n    };\n    Scope.light = function(debugElement) {\n      var scope = [];\n      debugElement.children.forEach(function(child) {\n        scope.push(child);\n        scope = scope.concat(Scope.light(child));\n      });\n      return scope;\n    };\n    Scope.view = function(debugElement) {\n      var scope = [];\n      debugElement.componentViewChildren.forEach(function(child) {\n        scope.push(child);\n        scope = scope.concat(Scope.light(child));\n      });\n      return scope;\n    };\n    return Scope;\n  })();\n  exports.Scope = Scope;\n  var By = (function() {\n    function By() {}\n    By.all = function() {\n      return function(debugElement) {\n        return true;\n      };\n    };\n    By.css = function(selector) {\n      return function(debugElement) {\n        return lang_1.isPresent(debugElement.nativeElement) ? dom_adapter_1.DOM.elementMatches(debugElement.nativeElement, selector) : false;\n      };\n    };\n    By.directive = function(type) {\n      return function(debugElement) {\n        return debugElement.hasDirective(type);\n      };\n    };\n    return By;\n  })();\n  exports.By = By;\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"angular2/src/core/debug/debug_element_view_listener\", [\"angular2/src/facade/lang\", \"angular2/src/facade/collection\", \"angular2/src/core/di\", \"angular2/src/core/linker/view_listener\", \"angular2/src/core/dom/dom_adapter\", \"angular2/src/core/render/api\", \"angular2/src/core/debug/debug_element\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  var __decorate = (this && this.__decorate) || function(decorators, target, key, desc) {\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\")\n      return Reflect.decorate(decorators, target, key, desc);\n    switch (arguments.length) {\n      case 2:\n        return decorators.reduceRight(function(o, d) {\n          return (d && d(o)) || o;\n        }, target);\n      case 3:\n        return decorators.reduceRight(function(o, d) {\n          return (d && d(target, key)), void 0;\n        }, void 0);\n      case 4:\n        return decorators.reduceRight(function(o, d) {\n          return (d && d(target, key, o)) || o;\n        }, desc);\n    }\n  };\n  var __metadata = (this && this.__metadata) || function(k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\")\n      return Reflect.metadata(k, v);\n  };\n  var lang_1 = require(\"angular2/src/facade/lang\");\n  var collection_1 = require(\"angular2/src/facade/collection\");\n  var di_1 = require(\"angular2/src/core/di\");\n  var view_listener_1 = require(\"angular2/src/core/linker/view_listener\");\n  var dom_adapter_1 = require(\"angular2/src/core/dom/dom_adapter\");\n  var api_1 = require(\"angular2/src/core/render/api\");\n  var debug_element_1 = require(\"angular2/src/core/debug/debug_element\");\n  var NG_ID_PROPERTY = 'ngid';\n  var INSPECT_GLOBAL_NAME = 'ng.probe';\n  var NG_ID_SEPARATOR = '#';\n  var _allIdsByView = new collection_1.Map();\n  var _allViewsById = new collection_1.Map();\n  var _nextId = 0;\n  function _setElementId(element, indices) {\n    if (lang_1.isPresent(element)) {\n      dom_adapter_1.DOM.setData(element, NG_ID_PROPERTY, indices.join(NG_ID_SEPARATOR));\n    }\n  }\n  function _getElementId(element) {\n    var elId = dom_adapter_1.DOM.getData(element, NG_ID_PROPERTY);\n    if (lang_1.isPresent(elId)) {\n      return elId.split(NG_ID_SEPARATOR).map(function(partStr) {\n        return lang_1.NumberWrapper.parseInt(partStr, 10);\n      });\n    } else {\n      return null;\n    }\n  }\n  function inspectNativeElement(element) {\n    var elId = _getElementId(element);\n    if (lang_1.isPresent(elId)) {\n      var view = _allViewsById.get(elId[0]);\n      if (lang_1.isPresent(view)) {\n        return new debug_element_1.DebugElement_(view, elId[1]);\n      }\n    }\n    return null;\n  }\n  exports.inspectNativeElement = inspectNativeElement;\n  var DebugElementViewListener = (function() {\n    function DebugElementViewListener(_renderer) {\n      this._renderer = _renderer;\n      dom_adapter_1.DOM.setGlobalVar(INSPECT_GLOBAL_NAME, inspectNativeElement);\n    }\n    DebugElementViewListener.prototype.onViewCreated = function(view) {\n      var viewId = _nextId++;\n      _allViewsById.set(viewId, view);\n      _allIdsByView.set(view, viewId);\n      for (var i = 0; i < view.elementRefs.length; i++) {\n        var el = view.elementRefs[i];\n        _setElementId(this._renderer.getNativeElementSync(el), [viewId, i]);\n      }\n    };\n    DebugElementViewListener.prototype.onViewDestroyed = function(view) {\n      var viewId = _allIdsByView.get(view);\n      _allIdsByView.delete(view);\n      _allViewsById.delete(viewId);\n    };\n    DebugElementViewListener = __decorate([di_1.Injectable(), __metadata('design:paramtypes', [api_1.Renderer])], DebugElementViewListener);\n    return DebugElementViewListener;\n  })();\n  exports.DebugElementViewListener = DebugElementViewListener;\n  exports.ELEMENT_PROBE_PROVIDERS = lang_1.CONST_EXPR([DebugElementViewListener, lang_1.CONST_EXPR(new di_1.Provider(view_listener_1.AppViewListener, {useExisting: DebugElementViewListener}))]);\n  exports.ELEMENT_PROBE_BINDINGS = exports.ELEMENT_PROBE_PROVIDERS;\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"angular2/src/core/dev_mode\", [\"angular2/src/facade/lang\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  var lang_1 = require(\"angular2/src/facade/lang\");\n  exports.enableDevMode = lang_1.enableDevMode;\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"angular2/profile\", [\"angular2/src/core/profile/profile\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  var profile_1 = require(\"angular2/src/core/profile/profile\");\n  exports.wtfCreateScope = profile_1.wtfCreateScope;\n  exports.wtfLeave = profile_1.wtfLeave;\n  exports.wtfStartTimeRange = profile_1.wtfStartTimeRange;\n  exports.wtfEndTimeRange = profile_1.wtfEndTimeRange;\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"angular2/lifecycle_hooks\", [], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"angular2/bootstrap\", [\"angular2/src/core/bootstrap\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  var bootstrap_1 = require(\"angular2/src/core/bootstrap\");\n  exports.bootstrap = bootstrap_1.bootstrap;\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"angular2/src/upgrade/metadata\", [\"angular2/angular2\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  var angular2_1 = require(\"angular2/angular2\");\n  var COMPONENT_SELECTOR = /^[\\w|-]*$/;\n  var SKEWER_CASE = /-(\\w)/g;\n  var directiveResolver = new angular2_1.DirectiveResolver();\n  function getComponentInfo(type) {\n    var resolvedMetadata = directiveResolver.resolve(type);\n    var selector = resolvedMetadata.selector;\n    if (!selector.match(COMPONENT_SELECTOR)) {\n      throw new Error('Only selectors matching element names are supported, got: ' + selector);\n    }\n    var selector = selector.replace(SKEWER_CASE, function(all, letter) {\n      return letter.toUpperCase();\n    });\n    return {\n      type: type,\n      selector: selector,\n      inputs: parseFields(resolvedMetadata.inputs),\n      outputs: parseFields(resolvedMetadata.outputs)\n    };\n  }\n  exports.getComponentInfo = getComponentInfo;\n  function parseFields(names) {\n    var attrProps = [];\n    if (names) {\n      for (var i = 0; i < names.length; i++) {\n        var parts = names[i].split(':');\n        var prop = parts[0].trim();\n        var attr = (parts[1] || parts[0]).trim();\n        var capitalAttr = attr.charAt(0).toUpperCase() + attr.substr(1);\n        attrProps.push({\n          prop: prop,\n          attr: attr,\n          bracketAttr: \"[\" + attr + \"]\",\n          parenAttr: \"(\" + attr + \")\",\n          bracketParenAttr: \"[(\" + attr + \")]\",\n          onAttr: \"on\" + capitalAttr,\n          bindAttr: \"bind\" + capitalAttr,\n          bindonAttr: \"bindon\" + capitalAttr\n        });\n      }\n    }\n    return attrProps;\n  }\n  exports.parseFields = parseFields;\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"angular2/src/upgrade/util\", [], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  function stringify(obj) {\n    if (typeof obj == 'function')\n      return obj.name || obj.toString();\n    return '' + obj;\n  }\n  exports.stringify = stringify;\n  function onError(e) {\n    console.log(e, e.stack);\n    throw e;\n  }\n  exports.onError = onError;\n  function controllerKey(name) {\n    return '$' + name + 'Controller';\n  }\n  exports.controllerKey = controllerKey;\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"angular2/src/upgrade/constants\", [], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  exports.NG2_APP_VIEW_MANAGER = 'ng2.AppViewManager';\n  exports.NG2_COMPILER = 'ng2.Compiler';\n  exports.NG2_INJECTOR = 'ng2.Injector';\n  exports.NG2_PROTO_VIEW_REF_MAP = 'ng2.ProtoViewRefMap';\n  exports.NG2_ZONE = 'ng2.NgZone';\n  exports.NG1_CONTROLLER = '$controller';\n  exports.NG1_SCOPE = '$scope';\n  exports.NG1_ROOT_SCOPE = '$rootScope';\n  exports.NG1_COMPILE = '$compile';\n  exports.NG1_HTTP_BACKEND = '$httpBackend';\n  exports.NG1_INJECTOR = '$injector';\n  exports.NG1_PARSE = '$parse';\n  exports.NG1_TEMPLATE_CACHE = '$templateCache';\n  exports.REQUIRE_INJECTOR = '^' + exports.NG2_INJECTOR;\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"angular2/src/upgrade/downgrade_ng2_adapter\", [\"angular2/angular2\", \"angular2/src/upgrade/constants\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  var angular2_1 = require(\"angular2/angular2\");\n  var constants_1 = require(\"angular2/src/upgrade/constants\");\n  var INITIAL_VALUE = {__UNINITIALIZED__: true};\n  var DowngradeNg2ComponentAdapter = (function() {\n    function DowngradeNg2ComponentAdapter(id, info, element, attrs, scope, parentInjector, parse, viewManager, protoView) {\n      this.id = id;\n      this.info = info;\n      this.element = element;\n      this.attrs = attrs;\n      this.scope = scope;\n      this.parentInjector = parentInjector;\n      this.parse = parse;\n      this.viewManager = viewManager;\n      this.protoView = protoView;\n      this.component = null;\n      this.inputChangeCount = 0;\n      this.inputChanges = null;\n      this.hostViewRef = null;\n      this.changeDetector = null;\n      this.contentInserctionPoint = null;\n      this.element[0].id = id;\n      this.componentScope = scope.$new();\n      this.childNodes = element.contents();\n    }\n    DowngradeNg2ComponentAdapter.prototype.bootstrapNg2 = function() {\n      var childInjector = this.parentInjector.resolveAndCreateChild([angular2_1.provide(constants_1.NG1_SCOPE, {useValue: this.componentScope})]);\n      this.hostViewRef = this.viewManager.createRootHostView(this.protoView, '#' + this.id, childInjector);\n      var renderer = this.hostViewRef.render;\n      var hostElement = this.viewManager.getHostElement(this.hostViewRef);\n      this.changeDetector = this.hostViewRef.changeDetectorRef;\n      this.component = this.viewManager.getComponent(hostElement);\n      this.contentInserctionPoint = renderer.rootContentInsertionPoints[0];\n    };\n    DowngradeNg2ComponentAdapter.prototype.setupInputs = function() {\n      var _this = this;\n      var attrs = this.attrs;\n      var inputs = this.info.inputs;\n      for (var i = 0; i < inputs.length; i++) {\n        var input = inputs[i];\n        var expr = null;\n        if (attrs.hasOwnProperty(input.attr)) {\n          var observeFn = (function(prop) {\n            var prevValue = INITIAL_VALUE;\n            return function(value) {\n              if (_this.inputChanges !== null) {\n                _this.inputChangeCount++;\n                _this.inputChanges[prop] = new Ng1Change(value, prevValue === INITIAL_VALUE ? value : prevValue);\n                prevValue = value;\n              }\n              _this.component[prop] = value;\n            };\n          })(input.prop);\n          attrs.$observe(input.attr, observeFn);\n        } else if (attrs.hasOwnProperty(input.bindAttr)) {\n          expr = attrs[input.bindAttr];\n        } else if (attrs.hasOwnProperty(input.bracketAttr)) {\n          expr = attrs[input.bracketAttr];\n        } else if (attrs.hasOwnProperty(input.bindonAttr)) {\n          expr = attrs[input.bindonAttr];\n        } else if (attrs.hasOwnProperty(input.bracketParenAttr)) {\n          expr = attrs[input.bracketParenAttr];\n        }\n        if (expr != null) {\n          var watchFn = (function(prop) {\n            return function(value, prevValue) {\n              if (_this.inputChanges != null) {\n                _this.inputChangeCount++;\n                _this.inputChanges[prop] = new Ng1Change(prevValue, value);\n              }\n              _this.component[prop] = value;\n            };\n          })(input.prop);\n          this.componentScope.$watch(expr, watchFn);\n        }\n      }\n      var prototype = this.info.type.prototype;\n      if (prototype && prototype.onChanges) {\n        this.inputChanges = {};\n        this.componentScope.$watch(function() {\n          return _this.inputChangeCount;\n        }, function() {\n          var inputChanges = _this.inputChanges;\n          _this.inputChanges = {};\n          _this.component.onChanges(inputChanges);\n        });\n      }\n      this.componentScope.$watch(function() {\n        return _this.changeDetector && _this.changeDetector.detectChanges();\n      });\n    };\n    DowngradeNg2ComponentAdapter.prototype.projectContent = function() {\n      var childNodes = this.childNodes;\n      if (this.contentInserctionPoint) {\n        var parent = this.contentInserctionPoint.parentNode;\n        for (var i = 0,\n            ii = childNodes.length; i < ii; i++) {\n          parent.insertBefore(childNodes[i], this.contentInserctionPoint);\n        }\n      }\n    };\n    DowngradeNg2ComponentAdapter.prototype.setupOutputs = function() {\n      var _this = this;\n      var attrs = this.attrs;\n      var outputs = this.info.outputs;\n      for (var j = 0; j < outputs.length; j++) {\n        var output = outputs[j];\n        var expr = null;\n        var assignExpr = false;\n        var bindonAttr = output.bindonAttr ? output.bindonAttr.substring(0, output.bindonAttr.length - 6) : null;\n        var bracketParenAttr = output.bracketParenAttr ? \"[(\" + output.bracketParenAttr.substring(2, output.bracketParenAttr.length - 8) + \")]\" : null;\n        if (attrs.hasOwnProperty(output.onAttr)) {\n          expr = attrs[output.onAttr];\n        } else if (attrs.hasOwnProperty(output.parenAttr)) {\n          expr = attrs[output.parenAttr];\n        } else if (attrs.hasOwnProperty(bindonAttr)) {\n          expr = attrs[bindonAttr];\n          assignExpr = true;\n        } else if (attrs.hasOwnProperty(bracketParenAttr)) {\n          expr = attrs[bracketParenAttr];\n          assignExpr = true;\n        }\n        if (expr != null && assignExpr != null) {\n          var getter = this.parse(expr);\n          var setter = getter.assign;\n          if (assignExpr && !setter) {\n            throw new Error(\"Expression '\" + expr + \"' is not assignable!\");\n          }\n          var emitter = this.component[output.prop];\n          if (emitter) {\n            emitter.subscribe({next: assignExpr ? (function(setter) {\n                return function(value) {\n                  return setter(_this.scope, value);\n                };\n              })(setter) : (function(getter) {\n                return function(value) {\n                  return getter(_this.scope, {$event: value});\n                };\n              })(getter)});\n          } else {\n            throw new Error(\"Missing emitter '\" + output.prop + \"' on component '\" + this.info.selector + \"'!\");\n          }\n        }\n      }\n    };\n    DowngradeNg2ComponentAdapter.prototype.registerCleanup = function() {\n      var _this = this;\n      this.element.bind('$remove', function() {\n        return _this.viewManager.destroyRootHostView(_this.hostViewRef);\n      });\n    };\n    return DowngradeNg2ComponentAdapter;\n  })();\n  exports.DowngradeNg2ComponentAdapter = DowngradeNg2ComponentAdapter;\n  var Ng1Change = (function() {\n    function Ng1Change(previousValue, currentValue) {\n      this.previousValue = previousValue;\n      this.currentValue = currentValue;\n    }\n    Ng1Change.prototype.isFirstChange = function() {\n      return this.previousValue === this.currentValue;\n    };\n    return Ng1Change;\n  })();\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"angular2/src/upgrade/angular_js\", [], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  function noNg() {\n    throw new Error('AngularJS v1.x is not loaded!');\n  }\n  var angular = {\n    bootstrap: noNg,\n    module: noNg,\n    element: noNg,\n    version: noNg\n  };\n  try {\n    if (window.hasOwnProperty('angular')) {\n      angular = window.angular;\n    }\n  } catch (e) {}\n  exports.bootstrap = angular.bootstrap;\n  exports.module = angular.module;\n  exports.element = angular.element;\n  exports.version = angular.version;\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"@reactivex/rxjs/dist/cjs/Subscriber\", [\"@reactivex/rxjs/dist/cjs/util/noop\", \"@reactivex/rxjs/dist/cjs/util/throwError\", \"@reactivex/rxjs/dist/cjs/util/tryOrOnError\", \"@reactivex/rxjs/dist/cjs/Subscription\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  'use strict';\n  exports.__esModule = true;\n  var _createClass = (function() {\n    function defineProperties(target, props) {\n      for (var i = 0; i < props.length; i++) {\n        var descriptor = props[i];\n        descriptor.enumerable = descriptor.enumerable || false;\n        descriptor.configurable = true;\n        if ('value' in descriptor)\n          descriptor.writable = true;\n        Object.defineProperty(target, descriptor.key, descriptor);\n      }\n    }\n    return function(Constructor, protoProps, staticProps) {\n      if (protoProps)\n        defineProperties(Constructor.prototype, protoProps);\n      if (staticProps)\n        defineProperties(Constructor, staticProps);\n      return Constructor;\n    };\n  })();\n  function _interopRequireDefault(obj) {\n    return obj && obj.__esModule ? obj : {'default': obj};\n  }\n  function _classCallCheck(instance, Constructor) {\n    if (!(instance instanceof Constructor)) {\n      throw new TypeError('Cannot call a class as a function');\n    }\n  }\n  function _inherits(subClass, superClass) {\n    if (typeof superClass !== 'function' && superClass !== null) {\n      throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass);\n    }\n    subClass.prototype = Object.create(superClass && superClass.prototype, {constructor: {\n        value: subClass,\n        enumerable: false,\n        writable: true,\n        configurable: true\n      }});\n    if (superClass)\n      Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass;\n  }\n  var _utilNoop = require(\"@reactivex/rxjs/dist/cjs/util/noop\");\n  var _utilNoop2 = _interopRequireDefault(_utilNoop);\n  var _utilThrowError = require(\"@reactivex/rxjs/dist/cjs/util/throwError\");\n  var _utilThrowError2 = _interopRequireDefault(_utilThrowError);\n  var _utilTryOrOnError = require(\"@reactivex/rxjs/dist/cjs/util/tryOrOnError\");\n  var _utilTryOrOnError2 = _interopRequireDefault(_utilTryOrOnError);\n  var _Subscription2 = require(\"@reactivex/rxjs/dist/cjs/Subscription\");\n  var _Subscription3 = _interopRequireDefault(_Subscription2);\n  var Subscriber = (function(_Subscription) {\n    _inherits(Subscriber, _Subscription);\n    function Subscriber(destination) {\n      _classCallCheck(this, Subscriber);\n      _Subscription.call(this);\n      this.destination = destination;\n      this._isUnsubscribed = false;\n      if (!this.destination) {\n        return ;\n      }\n      var subscription = destination._subscription;\n      if (subscription) {\n        this._subscription = subscription;\n      } else if (destination instanceof Subscriber) {\n        this._subscription = destination;\n      }\n    }\n    Subscriber.create = function create(next, error, complete) {\n      var subscriber = new Subscriber();\n      subscriber._next = typeof next === \"function\" && _utilTryOrOnError2['default'](next) || _utilNoop2['default'];\n      subscriber._error = typeof error === \"function\" && error || _utilThrowError2['default'];\n      subscriber._complete = typeof complete === \"function\" && complete || _utilNoop2['default'];\n      return subscriber;\n    };\n    Subscriber.prototype.add = function add(sub) {\n      var _subscription = this._subscription;\n      if (_subscription) {\n        _subscription.add(sub);\n      } else {\n        _Subscription.prototype.add.call(this, sub);\n      }\n    };\n    Subscriber.prototype.remove = function remove(sub) {\n      if (this._subscription) {\n        this._subscription.remove(sub);\n      } else {\n        _Subscription.prototype.remove.call(this, sub);\n      }\n    };\n    Subscriber.prototype.unsubscribe = function unsubscribe() {\n      if (this._isUnsubscribed) {\n        return ;\n      } else if (this._subscription) {\n        this._isUnsubscribed = true;\n      } else {\n        _Subscription.prototype.unsubscribe.call(this);\n      }\n    };\n    Subscriber.prototype._next = function _next(value) {\n      this.destination.next(value);\n    };\n    Subscriber.prototype._error = function _error(err) {\n      this.destination.error(err);\n    };\n    Subscriber.prototype._complete = function _complete() {\n      this.destination.complete();\n    };\n    Subscriber.prototype.next = function next(value) {\n      if (!this.isUnsubscribed) {\n        this._next(value);\n      }\n    };\n    Subscriber.prototype.error = function error(_error2) {\n      if (!this.isUnsubscribed) {\n        this._error(_error2);\n        this.unsubscribe();\n      }\n    };\n    Subscriber.prototype.complete = function complete() {\n      if (!this.isUnsubscribed) {\n        this._complete();\n        this.unsubscribe();\n      }\n    };\n    _createClass(Subscriber, [{\n      key: 'isUnsubscribed',\n      get: function get() {\n        var subscription = this._subscription;\n        if (subscription) {\n          return this._isUnsubscribed || subscription.isUnsubscribed;\n        } else {\n          return this._isUnsubscribed;\n        }\n      },\n      set: function set(value) {\n        var subscription = this._subscription;\n        if (subscription) {\n          subscription.isUnsubscribed = Boolean(value);\n        } else {\n          this._isUnsubscribed = Boolean(value);\n        }\n      }\n    }]);\n    return Subscriber;\n  })(_Subscription3['default']);\n  exports['default'] = Subscriber;\n  module.exports = exports['default'];\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"@reactivex/rxjs/dist/cjs/util/tryCatch\", [\"@reactivex/rxjs/dist/cjs/util/errorObject\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  'use strict';\n  exports.__esModule = true;\n  exports['default'] = tryCatch;\n  var _errorObject = require(\"@reactivex/rxjs/dist/cjs/util/errorObject\");\n  var tryCatchTarget = undefined;\n  function tryCatcher() {\n    try {\n      return tryCatchTarget.apply(this, arguments);\n    } catch (e) {\n      _errorObject.errorObject.e = e;\n      return _errorObject.errorObject;\n    }\n  }\n  function tryCatch(fn) {\n    tryCatchTarget = fn;\n    return tryCatcher;\n  }\n  ;\n  module.exports = exports['default'];\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"@reactivex/rxjs/dist/cjs/util/subscribeToResult\", [\"@reactivex/rxjs/dist/cjs/Observable\", \"@reactivex/rxjs/dist/cjs/util/Symbol_iterator\", \"@reactivex/rxjs/dist/cjs/util/Symbol_observable\", \"@reactivex/rxjs/dist/cjs/InnerSubscriber\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  'use strict';\n  exports.__esModule = true;\n  exports['default'] = subscribeToResult;\n  function _interopRequireDefault(obj) {\n    return obj && obj.__esModule ? obj : {'default': obj};\n  }\n  var _Observable = require(\"@reactivex/rxjs/dist/cjs/Observable\");\n  var _Observable2 = _interopRequireDefault(_Observable);\n  var _utilSymbol_iterator = require(\"@reactivex/rxjs/dist/cjs/util/Symbol_iterator\");\n  var _utilSymbol_iterator2 = _interopRequireDefault(_utilSymbol_iterator);\n  var _utilSymbol_observable = require(\"@reactivex/rxjs/dist/cjs/util/Symbol_observable\");\n  var _utilSymbol_observable2 = _interopRequireDefault(_utilSymbol_observable);\n  var _InnerSubscriber = require(\"@reactivex/rxjs/dist/cjs/InnerSubscriber\");\n  var _InnerSubscriber2 = _interopRequireDefault(_InnerSubscriber);\n  var isArray = Array.isArray;\n  function subscribeToResult(outerSubscriber, result, outerValue, outerIndex) {\n    var destination = new _InnerSubscriber2['default'](outerSubscriber, outerValue, outerIndex);\n    if (destination.isUnsubscribed) {\n      return ;\n    }\n    if (result instanceof _Observable2['default']) {\n      if (result._isScalar) {\n        destination.next(result.value);\n        destination.complete();\n        return ;\n      } else {\n        return result.subscribe(destination);\n      }\n    }\n    if (isArray(result)) {\n      for (var i = 0,\n          len = result.length; i < len && !destination.isUnsubscribed; i++) {\n        destination.next(result[i]);\n      }\n      if (!destination.isUnsubscribed) {\n        destination.complete();\n      }\n    } else if (typeof result.then === 'function') {\n      result.then(function(x) {\n        if (!destination.isUnsubscribed) {\n          destination.next(x);\n          destination.complete();\n        }\n      }, function(err) {\n        return destination.error(err);\n      }).then(null, function(err) {\n        setTimeout(function() {\n          throw err;\n        });\n      });\n      return destination;\n    } else if (typeof result[_utilSymbol_iterator2['default']] === 'function') {\n      for (var _iterator = result,\n          _isArray = Array.isArray(_iterator),\n          _i = 0,\n          _iterator = _isArray ? _iterator : _iterator[Symbol.iterator](); ; ) {\n        var _ref;\n        if (_isArray) {\n          if (_i >= _iterator.length)\n            break;\n          _ref = _iterator[_i++];\n        } else {\n          _i = _iterator.next();\n          if (_i.done)\n            break;\n          _ref = _i.value;\n        }\n        var item = _ref;\n        destination.next(item);\n        if (destination.isUnsubscribed) {\n          break;\n        }\n      }\n      if (!destination.isUnsubscribed) {\n        destination.complete();\n      }\n    } else if (typeof result[_utilSymbol_observable2['default']] === 'function') {\n      var obs = result[_utilSymbol_observable2['default']]();\n      if (typeof obs.subscribe !== 'function') {\n        destination.error('invalid observable');\n      } else {\n        return obs.subscribe(new _InnerSubscriber2['default'](outerSubscriber, outerValue, outerIndex));\n      }\n    } else {\n      destination.error(new TypeError('unknown type returned'));\n    }\n  }\n  module.exports = exports['default'];\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"@reactivex/rxjs/dist/cjs/schedulers/ImmediateScheduler\", [\"@reactivex/rxjs/dist/cjs/schedulers/ImmediateAction\", \"@reactivex/rxjs/dist/cjs/schedulers/FutureAction\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  'use strict';\n  exports.__esModule = true;\n  function _interopRequireDefault(obj) {\n    return obj && obj.__esModule ? obj : {'default': obj};\n  }\n  function _classCallCheck(instance, Constructor) {\n    if (!(instance instanceof Constructor)) {\n      throw new TypeError('Cannot call a class as a function');\n    }\n  }\n  var _ImmediateAction = require(\"@reactivex/rxjs/dist/cjs/schedulers/ImmediateAction\");\n  var _ImmediateAction2 = _interopRequireDefault(_ImmediateAction);\n  var _FutureAction = require(\"@reactivex/rxjs/dist/cjs/schedulers/FutureAction\");\n  var _FutureAction2 = _interopRequireDefault(_FutureAction);\n  var ImmediateScheduler = (function() {\n    function ImmediateScheduler() {\n      _classCallCheck(this, ImmediateScheduler);\n      this.actions = [];\n      this.active = false;\n      this.scheduled = false;\n    }\n    ImmediateScheduler.prototype.now = function now() {\n      return Date.now();\n    };\n    ImmediateScheduler.prototype.flush = function flush() {\n      if (this.active || this.scheduled) {\n        return ;\n      }\n      this.active = true;\n      var actions = this.actions;\n      for (var action = undefined; action = actions.shift(); ) {\n        action.execute();\n      }\n      this.active = false;\n    };\n    ImmediateScheduler.prototype.schedule = function schedule(work, delay, state) {\n      if (delay === undefined)\n        delay = 0;\n      return delay <= 0 ? this.scheduleNow(work, state) : this.scheduleLater(work, delay, state);\n    };\n    ImmediateScheduler.prototype.scheduleNow = function scheduleNow(work, state) {\n      return new _ImmediateAction2['default'](this, work).schedule(state);\n    };\n    ImmediateScheduler.prototype.scheduleLater = function scheduleLater(work, delay, state) {\n      return new _FutureAction2['default'](this, work).schedule(state, delay);\n    };\n    return ImmediateScheduler;\n  })();\n  exports['default'] = ImmediateScheduler;\n  module.exports = exports['default'];\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"@reactivex/rxjs/dist/cjs/operators/observeOn-support\", [\"@reactivex/rxjs/dist/cjs/Subscriber\", \"@reactivex/rxjs/dist/cjs/Notification\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  'use strict';\n  exports.__esModule = true;\n  function _interopRequireDefault(obj) {\n    return obj && obj.__esModule ? obj : {'default': obj};\n  }\n  function _inherits(subClass, superClass) {\n    if (typeof superClass !== 'function' && superClass !== null) {\n      throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass);\n    }\n    subClass.prototype = Object.create(superClass && superClass.prototype, {constructor: {\n        value: subClass,\n        enumerable: false,\n        writable: true,\n        configurable: true\n      }});\n    if (superClass)\n      Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass;\n  }\n  function _classCallCheck(instance, Constructor) {\n    if (!(instance instanceof Constructor)) {\n      throw new TypeError('Cannot call a class as a function');\n    }\n  }\n  var _Subscriber2 = require(\"@reactivex/rxjs/dist/cjs/Subscriber\");\n  var _Subscriber3 = _interopRequireDefault(_Subscriber2);\n  var _Notification = require(\"@reactivex/rxjs/dist/cjs/Notification\");\n  var _Notification2 = _interopRequireDefault(_Notification);\n  var ObserveOnOperator = (function() {\n    function ObserveOnOperator(scheduler) {\n      var delay = arguments.length <= 1 || arguments[1] === undefined ? 0 : arguments[1];\n      _classCallCheck(this, ObserveOnOperator);\n      this.delay = delay;\n      this.scheduler = scheduler;\n    }\n    ObserveOnOperator.prototype.call = function call(subscriber) {\n      return new ObserveOnSubscriber(subscriber, this.scheduler, this.delay);\n    };\n    return ObserveOnOperator;\n  })();\n  exports.ObserveOnOperator = ObserveOnOperator;\n  var ObserveOnSubscriber = (function(_Subscriber) {\n    _inherits(ObserveOnSubscriber, _Subscriber);\n    function ObserveOnSubscriber(destination, scheduler) {\n      var delay = arguments.length <= 2 || arguments[2] === undefined ? 0 : arguments[2];\n      _classCallCheck(this, ObserveOnSubscriber);\n      _Subscriber.call(this, destination);\n      this.delay = delay;\n      this.scheduler = scheduler;\n    }\n    ObserveOnSubscriber.dispatch = function dispatch(_ref) {\n      var notification = _ref.notification;\n      var destination = _ref.destination;\n      notification.observe(destination);\n    };\n    ObserveOnSubscriber.prototype._next = function _next(x) {\n      this.add(this.scheduler.schedule(ObserveOnSubscriber.dispatch, this.delay, new ObserveOnMessage(_Notification2['default'].createNext(x), this.destination)));\n    };\n    ObserveOnSubscriber.prototype._error = function _error(e) {\n      this.add(this.scheduler.schedule(ObserveOnSubscriber.dispatch, this.delay, new ObserveOnMessage(_Notification2['default'].createError(e), this.destination)));\n    };\n    ObserveOnSubscriber.prototype._complete = function _complete() {\n      this.add(this.scheduler.schedule(ObserveOnSubscriber.dispatch, this.delay, new ObserveOnMessage(_Notification2['default'].createComplete(), this.destination)));\n    };\n    return ObserveOnSubscriber;\n  })(_Subscriber3['default']);\n  exports.ObserveOnSubscriber = ObserveOnSubscriber;\n  var ObserveOnMessage = function ObserveOnMessage(notification, destination) {\n    _classCallCheck(this, ObserveOnMessage);\n    this.notification = notification;\n    this.destination = destination;\n  };\n  ;\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"@reactivex/rxjs/dist/cjs/schedulers/NextTickAction\", [\"@reactivex/rxjs/dist/cjs/util/Immediate\", \"@reactivex/rxjs/dist/cjs/schedulers/ImmediateAction\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  'use strict';\n  exports.__esModule = true;\n  function _interopRequireDefault(obj) {\n    return obj && obj.__esModule ? obj : {'default': obj};\n  }\n  function _classCallCheck(instance, Constructor) {\n    if (!(instance instanceof Constructor)) {\n      throw new TypeError('Cannot call a class as a function');\n    }\n  }\n  function _inherits(subClass, superClass) {\n    if (typeof superClass !== 'function' && superClass !== null) {\n      throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass);\n    }\n    subClass.prototype = Object.create(superClass && superClass.prototype, {constructor: {\n        value: subClass,\n        enumerable: false,\n        writable: true,\n        configurable: true\n      }});\n    if (superClass)\n      Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass;\n  }\n  var _utilImmediate = require(\"@reactivex/rxjs/dist/cjs/util/Immediate\");\n  var _ImmediateAction2 = require(\"@reactivex/rxjs/dist/cjs/schedulers/ImmediateAction\");\n  var _ImmediateAction3 = _interopRequireDefault(_ImmediateAction2);\n  var NextTickAction = (function(_ImmediateAction) {\n    _inherits(NextTickAction, _ImmediateAction);\n    function NextTickAction() {\n      _classCallCheck(this, NextTickAction);\n      _ImmediateAction.apply(this, arguments);\n    }\n    NextTickAction.prototype.schedule = function schedule(state) {\n      var _this = this;\n      if (this.isUnsubscribed) {\n        return this;\n      }\n      this.state = state;\n      var scheduler = this.scheduler;\n      scheduler.actions.push(this);\n      if (!scheduler.scheduled) {\n        scheduler.scheduled = true;\n        this.id = _utilImmediate.Immediate.setImmediate(function() {\n          _this.id = null;\n          _this.scheduler.scheduled = false;\n          _this.scheduler.flush();\n        });\n      }\n      return this;\n    };\n    NextTickAction.prototype.unsubscribe = function unsubscribe() {\n      var id = this.id;\n      var scheduler = this.scheduler;\n      _ImmediateAction.prototype.unsubscribe.call(this);\n      if (scheduler.actions.length === 0) {\n        scheduler.active = false;\n        scheduler.scheduled = false;\n      }\n      if (id) {\n        this.id = null;\n        _utilImmediate.Immediate.clearImmediate(id);\n      }\n    };\n    return NextTickAction;\n  })(_ImmediateAction3['default']);\n  exports['default'] = NextTickAction;\n  module.exports = exports['default'];\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"@reactivex/rxjs/dist/cjs/operators/merge-static\", [\"@reactivex/rxjs/dist/cjs/observables/ArrayObservable\", \"@reactivex/rxjs/dist/cjs/operators/mergeAll-support\", \"@reactivex/rxjs/dist/cjs/schedulers/immediate\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  'use strict';\n  exports.__esModule = true;\n  exports['default'] = merge;\n  function _interopRequireDefault(obj) {\n    return obj && obj.__esModule ? obj : {'default': obj};\n  }\n  var _observablesArrayObservable = require(\"@reactivex/rxjs/dist/cjs/observables/ArrayObservable\");\n  var _observablesArrayObservable2 = _interopRequireDefault(_observablesArrayObservable);\n  var _mergeAllSupport = require(\"@reactivex/rxjs/dist/cjs/operators/mergeAll-support\");\n  var _schedulersImmediate = require(\"@reactivex/rxjs/dist/cjs/schedulers/immediate\");\n  var _schedulersImmediate2 = _interopRequireDefault(_schedulersImmediate);\n  function merge() {\n    var concurrent = Number.POSITIVE_INFINITY;\n    var scheduler = _schedulersImmediate2['default'];\n    for (var _len = arguments.length,\n        observables = Array(_len),\n        _key = 0; _key < _len; _key++) {\n      observables[_key] = arguments[_key];\n    }\n    var last = observables[observables.length - 1];\n    if (typeof last.schedule === 'function') {\n      scheduler = observables.pop();\n      if (observables.length > 1 && typeof observables[observables.length - 1] === 'number') {\n        concurrent = observables.pop();\n      }\n    } else if (typeof last === 'number') {\n      concurrent = observables.pop();\n    }\n    if (observables.length === 1) {\n      return observables[0];\n    }\n    return new _observablesArrayObservable2['default'](observables, scheduler).lift(new _mergeAllSupport.MergeAllOperator(concurrent));\n  }\n  module.exports = exports['default'];\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"@reactivex/rxjs/dist/cjs/operators/zip-static\", [\"@reactivex/rxjs/dist/cjs/observables/ArrayObservable\", \"@reactivex/rxjs/dist/cjs/operators/zip-support\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  'use strict';\n  exports.__esModule = true;\n  exports['default'] = zip;\n  function _interopRequireDefault(obj) {\n    return obj && obj.__esModule ? obj : {'default': obj};\n  }\n  var _observablesArrayObservable = require(\"@reactivex/rxjs/dist/cjs/observables/ArrayObservable\");\n  var _observablesArrayObservable2 = _interopRequireDefault(_observablesArrayObservable);\n  var _zipSupport = require(\"@reactivex/rxjs/dist/cjs/operators/zip-support\");\n  function zip() {\n    for (var _len = arguments.length,\n        observables = Array(_len),\n        _key = 0; _key < _len; _key++) {\n      observables[_key] = arguments[_key];\n    }\n    var project = observables[observables.length - 1];\n    if (typeof project === 'function') {\n      observables.pop();\n    }\n    return new _observablesArrayObservable2['default'](observables).lift(new _zipSupport.ZipOperator(project));\n  }\n  module.exports = exports['default'];\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"@reactivex/rxjs/dist/cjs/operators/concatMap\", [\"@reactivex/rxjs/dist/cjs/operators/mergeMap-support\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  'use strict';\n  exports.__esModule = true;\n  exports['default'] = concatMap;\n  var _mergeMapSupport = require(\"@reactivex/rxjs/dist/cjs/operators/mergeMap-support\");\n  function concatMap(project, projectResult) {\n    return this.lift(new _mergeMapSupport.MergeMapOperator(project, projectResult, 1));\n  }\n  module.exports = exports['default'];\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"@reactivex/rxjs/dist/cjs/operators/concatMapTo\", [\"@reactivex/rxjs/dist/cjs/operators/mergeMapTo-support\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  'use strict';\n  exports.__esModule = true;\n  exports['default'] = concatMapTo;\n  var _mergeMapToSupport = require(\"@reactivex/rxjs/dist/cjs/operators/mergeMapTo-support\");\n  function concatMapTo(observable, projectResult) {\n    return this.lift(new _mergeMapToSupport.MergeMapToOperator(observable, projectResult, 1));\n  }\n  module.exports = exports['default'];\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"@reactivex/rxjs/dist/cjs/operators/count\", [\"@reactivex/rxjs/dist/cjs/Subscriber\", \"@reactivex/rxjs/dist/cjs/util/tryCatch\", \"@reactivex/rxjs/dist/cjs/util/errorObject\", \"@reactivex/rxjs/dist/cjs/util/bindCallback\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  'use strict';\n  exports.__esModule = true;\n  exports['default'] = count;\n  function _interopRequireDefault(obj) {\n    return obj && obj.__esModule ? obj : {'default': obj};\n  }\n  function _inherits(subClass, superClass) {\n    if (typeof superClass !== 'function' && superClass !== null) {\n      throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass);\n    }\n    subClass.prototype = Object.create(superClass && superClass.prototype, {constructor: {\n        value: subClass,\n        enumerable: false,\n        writable: true,\n        configurable: true\n      }});\n    if (superClass)\n      Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass;\n  }\n  function _classCallCheck(instance, Constructor) {\n    if (!(instance instanceof Constructor)) {\n      throw new TypeError('Cannot call a class as a function');\n    }\n  }\n  var _Subscriber2 = require(\"@reactivex/rxjs/dist/cjs/Subscriber\");\n  var _Subscriber3 = _interopRequireDefault(_Subscriber2);\n  var _utilTryCatch = require(\"@reactivex/rxjs/dist/cjs/util/tryCatch\");\n  var _utilTryCatch2 = _interopRequireDefault(_utilTryCatch);\n  var _utilErrorObject = require(\"@reactivex/rxjs/dist/cjs/util/errorObject\");\n  var _utilBindCallback = require(\"@reactivex/rxjs/dist/cjs/util/bindCallback\");\n  var _utilBindCallback2 = _interopRequireDefault(_utilBindCallback);\n  function count(predicate, thisArg) {\n    return this.lift(new CountOperator(predicate, thisArg, this));\n  }\n  var CountOperator = (function() {\n    function CountOperator(predicate, thisArg, source) {\n      _classCallCheck(this, CountOperator);\n      this.predicate = predicate;\n      this.thisArg = thisArg;\n      this.source = source;\n    }\n    CountOperator.prototype.call = function call(subscriber) {\n      return new CountSubscriber(subscriber, this.predicate, this.thisArg, this.source);\n    };\n    return CountOperator;\n  })();\n  var CountSubscriber = (function(_Subscriber) {\n    _inherits(CountSubscriber, _Subscriber);\n    function CountSubscriber(destination, predicate, thisArg, source) {\n      _classCallCheck(this, CountSubscriber);\n      _Subscriber.call(this, destination);\n      this.thisArg = thisArg;\n      this.source = source;\n      this.count = 0;\n      this.index = 0;\n      if (typeof predicate === 'function') {\n        this.predicate = _utilBindCallback2['default'](predicate, thisArg, 3);\n      }\n    }\n    CountSubscriber.prototype._next = function _next(value) {\n      var predicate = this.predicate;\n      var passed = true;\n      if (predicate) {\n        passed = _utilTryCatch2['default'](predicate)(value, this.index++, this.source);\n        if (passed === _utilErrorObject.errorObject) {\n          this.destination.error(passed.e);\n          return ;\n        }\n      }\n      if (passed) {\n        this.count += 1;\n      }\n    };\n    CountSubscriber.prototype._complete = function _complete() {\n      this.destination.next(this.count);\n      this.destination.complete();\n    };\n    return CountSubscriber;\n  })(_Subscriber3['default']);\n  module.exports = exports['default'];\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"@reactivex/rxjs/dist/cjs/operators/delay\", [\"@reactivex/rxjs/dist/cjs/Subscriber\", \"@reactivex/rxjs/dist/cjs/Notification\", \"@reactivex/rxjs/dist/cjs/schedulers/immediate\", \"@reactivex/rxjs/dist/cjs/util/isDate\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  'use strict';\n  exports.__esModule = true;\n  exports['default'] = delay;\n  function _interopRequireDefault(obj) {\n    return obj && obj.__esModule ? obj : {'default': obj};\n  }\n  function _inherits(subClass, superClass) {\n    if (typeof superClass !== 'function' && superClass !== null) {\n      throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass);\n    }\n    subClass.prototype = Object.create(superClass && superClass.prototype, {constructor: {\n        value: subClass,\n        enumerable: false,\n        writable: true,\n        configurable: true\n      }});\n    if (superClass)\n      Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass;\n  }\n  function _classCallCheck(instance, Constructor) {\n    if (!(instance instanceof Constructor)) {\n      throw new TypeError('Cannot call a class as a function');\n    }\n  }\n  var _Subscriber2 = require(\"@reactivex/rxjs/dist/cjs/Subscriber\");\n  var _Subscriber3 = _interopRequireDefault(_Subscriber2);\n  var _Notification = require(\"@reactivex/rxjs/dist/cjs/Notification\");\n  var _Notification2 = _interopRequireDefault(_Notification);\n  var _schedulersImmediate = require(\"@reactivex/rxjs/dist/cjs/schedulers/immediate\");\n  var _schedulersImmediate2 = _interopRequireDefault(_schedulersImmediate);\n  var _utilIsDate = require(\"@reactivex/rxjs/dist/cjs/util/isDate\");\n  var _utilIsDate2 = _interopRequireDefault(_utilIsDate);\n  function delay(delay) {\n    var scheduler = arguments.length <= 1 || arguments[1] === undefined ? _schedulersImmediate2['default'] : arguments[1];\n    var absoluteDelay = _utilIsDate2['default'](delay);\n    var delayFor = absoluteDelay ? +delay - scheduler.now() : delay;\n    return this.lift(new DelayOperator(delayFor, scheduler));\n  }\n  var DelayOperator = (function() {\n    function DelayOperator(delay, scheduler) {\n      _classCallCheck(this, DelayOperator);\n      this.delay = delay;\n      this.scheduler = scheduler;\n    }\n    DelayOperator.prototype.call = function call(subscriber) {\n      return new DelaySubscriber(subscriber, this.delay, this.scheduler);\n    };\n    return DelayOperator;\n  })();\n  var DelaySubscriber = (function(_Subscriber) {\n    _inherits(DelaySubscriber, _Subscriber);\n    function DelaySubscriber(destination, delay, scheduler) {\n      _classCallCheck(this, DelaySubscriber);\n      _Subscriber.call(this, destination);\n      this.delay = delay;\n      this.scheduler = scheduler;\n      this.queue = [];\n      this.active = false;\n      this.errored = false;\n    }\n    DelaySubscriber.dispatch = function dispatch(state) {\n      var source = state.source;\n      var queue = source.queue;\n      var scheduler = state.scheduler;\n      var destination = state.destination;\n      while (queue.length > 0 && queue[0].time - scheduler.now() <= 0) {\n        queue.shift().notification.observe(destination);\n      }\n      if (queue.length > 0) {\n        var _delay = Math.max(0, queue[0].time - scheduler.now());\n        this.schedule(state, _delay);\n      } else {\n        source.active = false;\n      }\n    };\n    DelaySubscriber.prototype._schedule = function _schedule(scheduler) {\n      this.active = true;\n      this.add(scheduler.schedule(DelaySubscriber.dispatch, this.delay, {\n        source: this,\n        destination: this.destination,\n        scheduler: scheduler\n      }));\n    };\n    DelaySubscriber.prototype.scheduleNotification = function scheduleNotification(notification) {\n      if (this.errored === true) {\n        return ;\n      }\n      var scheduler = this.scheduler;\n      var message = new DelayMessage(scheduler.now() + this.delay, notification);\n      this.queue.push(message);\n      if (this.active === false) {\n        this._schedule(scheduler);\n      }\n    };\n    DelaySubscriber.prototype._next = function _next(value) {\n      this.scheduleNotification(_Notification2['default'].createNext(value));\n    };\n    DelaySubscriber.prototype._error = function _error(err) {\n      this.errored = true;\n      this.queue = [];\n      this.destination.error(err);\n    };\n    DelaySubscriber.prototype._complete = function _complete() {\n      this.scheduleNotification(_Notification2['default'].createComplete());\n    };\n    return DelaySubscriber;\n  })(_Subscriber3['default']);\n  var DelayMessage = function DelayMessage(time, notification) {\n    _classCallCheck(this, DelayMessage);\n    this.time = time;\n    this.notification = notification;\n  };\n  ;\n  module.exports = exports['default'];\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"@reactivex/rxjs/dist/cjs/operators/expand\", [\"@reactivex/rxjs/dist/cjs/operators/expand-support\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  'use strict';\n  exports.__esModule = true;\n  exports['default'] = expand;\n  var _expandSupport = require(\"@reactivex/rxjs/dist/cjs/operators/expand-support\");\n  function expand(project) {\n    var concurrent = arguments.length <= 1 || arguments[1] === undefined ? Number.POSITIVE_INFINITY : arguments[1];\n    return this.lift(new _expandSupport.ExpandOperator(project, concurrent));\n  }\n  module.exports = exports['default'];\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"@reactivex/rxjs/dist/cjs/operators/first\", [\"@reactivex/rxjs/dist/cjs/Subscriber\", \"@reactivex/rxjs/dist/cjs/util/tryCatch\", \"@reactivex/rxjs/dist/cjs/util/errorObject\", \"@reactivex/rxjs/dist/cjs/util/EmptyError\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  'use strict';\n  exports.__esModule = true;\n  exports['default'] = first;\n  function _interopRequireDefault(obj) {\n    return obj && obj.__esModule ? obj : {'default': obj};\n  }\n  function _inherits(subClass, superClass) {\n    if (typeof superClass !== 'function' && superClass !== null) {\n      throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass);\n    }\n    subClass.prototype = Object.create(superClass && superClass.prototype, {constructor: {\n        value: subClass,\n        enumerable: false,\n        writable: true,\n        configurable: true\n      }});\n    if (superClass)\n      Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass;\n  }\n  function _classCallCheck(instance, Constructor) {\n    if (!(instance instanceof Constructor)) {\n      throw new TypeError('Cannot call a class as a function');\n    }\n  }\n  var _Subscriber2 = require(\"@reactivex/rxjs/dist/cjs/Subscriber\");\n  var _Subscriber3 = _interopRequireDefault(_Subscriber2);\n  var _utilTryCatch = require(\"@reactivex/rxjs/dist/cjs/util/tryCatch\");\n  var _utilTryCatch2 = _interopRequireDefault(_utilTryCatch);\n  var _utilErrorObject = require(\"@reactivex/rxjs/dist/cjs/util/errorObject\");\n  var _utilEmptyError = require(\"@reactivex/rxjs/dist/cjs/util/EmptyError\");\n  var _utilEmptyError2 = _interopRequireDefault(_utilEmptyError);\n  function first(predicate, resultSelector, defaultValue) {\n    return this.lift(new FirstOperator(predicate, resultSelector, defaultValue, this));\n  }\n  var FirstOperator = (function() {\n    function FirstOperator(predicate, resultSelector, defaultValue, source) {\n      _classCallCheck(this, FirstOperator);\n      this.predicate = predicate;\n      this.resultSelector = resultSelector;\n      this.defaultValue = defaultValue;\n      this.source = source;\n    }\n    FirstOperator.prototype.call = function call(observer) {\n      return new FirstSubscriber(observer, this.predicate, this.resultSelector, this.defaultValue, this.source);\n    };\n    return FirstOperator;\n  })();\n  var FirstSubscriber = (function(_Subscriber) {\n    _inherits(FirstSubscriber, _Subscriber);\n    function FirstSubscriber(destination, predicate, resultSelector, defaultValue, source) {\n      _classCallCheck(this, FirstSubscriber);\n      _Subscriber.call(this, destination);\n      this.predicate = predicate;\n      this.resultSelector = resultSelector;\n      this.defaultValue = defaultValue;\n      this.source = source;\n      this.index = 0;\n      this.hasCompleted = false;\n    }\n    FirstSubscriber.prototype._next = function _next(value) {\n      var destination = this.destination;\n      var predicate = this.predicate;\n      var resultSelector = this.resultSelector;\n      var index = this.index++;\n      var passed = true;\n      if (predicate) {\n        passed = _utilTryCatch2['default'](predicate)(value, index, this.source);\n        if (passed === _utilErrorObject.errorObject) {\n          destination.error(_utilErrorObject.errorObject.e);\n          return ;\n        }\n      }\n      if (passed) {\n        if (resultSelector) {\n          var result = _utilTryCatch2['default'](resultSelector)(value, index);\n          if (result === _utilErrorObject.errorObject) {\n            destination.error(_utilErrorObject.errorObject.e);\n            return ;\n          }\n          destination.next(result);\n        } else {\n          destination.next(value);\n        }\n        destination.complete();\n        this.hasCompleted = true;\n      }\n    };\n    FirstSubscriber.prototype._complete = function _complete() {\n      var destination = this.destination;\n      if (!this.hasCompleted && typeof this.defaultValue !== 'undefined') {\n        destination.next(this.defaultValue);\n        destination.complete();\n      } else if (!this.hasCompleted) {\n        destination.error(new _utilEmptyError2['default']());\n      }\n    };\n    return FirstSubscriber;\n  })(_Subscriber3['default']);\n  module.exports = exports['default'];\n  global.define = __define;\n  return module.exports;\n});\n\n/**\n @license\n                               Apache License\n                         Version 2.0, January 2004\n                      http://www.apache.org/licenses/\n\n TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION\n\n 1. Definitions.\n\n    \"License\" shall mean the terms and conditions for use, reproduction,\n    and distribution as defined by Sections 1 through 9 of this document.\n\n    \"Licensor\" shall mean the copyright owner or entity authorized by\n    the copyright owner that is granting the License.\n\n    \"Legal Entity\" shall mean the union of the acting entity and all\n    other entities that control, are controlled by, or are under common\n    control with that entity. For the purposes of this definition,\n    \"control\" means (i) the power, direct or indirect, to cause the\n    direction or management of such entity, whether by contract or\n    otherwise, or (ii) ownership of fifty percent (50%) or more of the\n    outstanding shares, or (iii) beneficial ownership of such entity.\n\n    \"You\" (or \"Your\") shall mean an individual or Legal Entity\n    exercising permissions granted by this License.\n\n    \"Source\" form shall mean the preferred form for making modifications,\n    including but not limited to software source code, documentation\n    source, and configuration files.\n\n    \"Object\" form shall mean any form resulting from mechanical\n    transformation or translation of a Source form, including but\n    not limited to compiled object code, generated documentation,\n    and conversions to other media types.\n\n    \"Work\" shall mean the work of authorship, whether in Source or\n    Object form, made available under the License, as indicated by a\n    copyright notice that is included in or attached to the work\n    (an example is provided in the Appendix below).\n\n    \"Derivative Works\" shall mean any work, whether in Source or Object\n    form, that is based on (or derived from) the Work and for which the\n    editorial revisions, annotations, elaborations, or other modifications\n    represent, as a whole, an original work of authorship. For the purposes\n    of this License, Derivative Works shall not include works that remain\n    separable from, or merely link (or bind by name) to the interfaces of,\n    the Work and Derivative Works thereof.\n\n    \"Contribution\" shall mean any work of authorship, including\n    the original version of the Work and any modifications or additions\n    to that Work or Derivative Works thereof, that is intentionally\n    submitted to Licensor for inclusion in the Work by the copyright owner\n    or by an individual or Legal Entity authorized to submit on behalf of\n    the copyright owner. For the purposes of this definition, \"submitted\"\n    means any form of electronic, verbal, or written communication sent\n    to the Licensor or its representatives, including but not limited to\n    communication on electronic mailing lists, source code control systems,\n    and issue tracking systems that are managed by, or on behalf of, the\n    Licensor for the purpose of discussing and improving the Work, but\n    excluding communication that is conspicuously marked or otherwise\n    designated in writing by the copyright owner as \"Not a Contribution.\"\n\n    \"Contributor\" shall mean Licensor and any individual or Legal Entity\n    on behalf of whom a Contribution has been received by Licensor and\n    subsequently incorporated within the Work.\n\n 2. Grant of Copyright License. Subject to the terms and conditions of\n    this License, each Contributor hereby grants to You a perpetual,\n    worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n    copyright license to reproduce, prepare Derivative Works of,\n    publicly display, publicly perform, sublicense, and distribute the\n    Work and such Derivative Works in Source or Object form.\n\n 3. Grant of Patent License. Subject to the terms and conditions of\n    this License, each Contributor hereby grants to You a perpetual,\n    worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n    (except as stated in this section) patent license to make, have made,\n    use, offer to sell, sell, import, and otherwise transfer the Work,\n    where such license applies only to those patent claims licensable\n    by such Contributor that are necessarily infringed by their\n    Contribution(s) alone or by combination of their Contribution(s)\n    with the Work to which such Contribution(s) was submitted. If You\n    institute patent litigation against any entity (including a\n    cross-claim or counterclaim in a lawsuit) alleging that the Work\n    or a Contribution incorporated within the Work constitutes direct\n    or contributory patent infringement, then any patent licenses\n    granted to You under this License for that Work shall terminate\n    as of the date such litigation is filed.\n\n 4. Redistribution. You may reproduce and distribute copies of the\n    Work or Derivative Works thereof in any medium, with or without\n    modifications, and in Source or Object form, provided that You\n    meet the following conditions:\n\n    (a) You must give any other recipients of the Work or\n        Derivative Works a copy of this License; and\n\n    (b) You must cause any modified files to carry prominent notices\n        stating that You changed the files; and\n\n    (c) You must retain, in the Source form of any Derivative Works\n        that You distribute, all copyright, patent, trademark, and\n        attribution notices from the Source form of the Work,\n        excluding those notices that do not pertain to any part of\n        the Derivative Works; and\n\n    (d) If the Work includes a \"NOTICE\" text file as part of its\n        distribution, then any Derivative Works that You distribute must\n        include a readable copy of the attribution notices contained\n        within such NOTICE file, excluding those notices that do not\n        pertain to any part of the Derivative Works, in at least one\n        of the following places: within a NOTICE text file distributed\n        as part of the Derivative Works; within the Source form or\n        documentation, if provided along with the Derivative Works; or,\n        within a display generated by the Derivative Works, if and\n        wherever such third-party notices normally appear. The contents\n        of the NOTICE file are for informational purposes only and\n        do not modify the License. You may add Your own attribution\n        notices within Derivative Works that You distribute, alongside\n        or as an addendum to the NOTICE text from the Work, provided\n        that such additional attribution notices cannot be construed\n        as modifying the License.\n\n    You may add Your own copyright statement to Your modifications and\n    may provide additional or different license terms and conditions\n    for use, reproduction, or distribution of Your modifications, or\n    for any such Derivative Works as a whole, provided Your use,\n    reproduction, and distribution of the Work otherwise complies with\n    the conditions stated in this License.\n\n 5. Submission of Contributions. Unless You explicitly state otherwise,\n    any Contribution intentionally submitted for inclusion in the Work\n    by You to the Licensor shall be under the terms and conditions of\n    this License, without any additional terms or conditions.\n    Notwithstanding the above, nothing herein shall supersede or modify\n    the terms of any separate license agreement you may have executed\n    with Licensor regarding such Contributions.\n\n 6. Trademarks. This License does not grant permission to use the trade\n    names, trademarks, service marks, or product names of the Licensor,\n    except as required for reasonable and customary use in describing the\n    origin of the Work and reproducing the content of the NOTICE file.\n\n 7. Disclaimer of Warranty. Unless required by applicable law or\n    agreed to in writing, Licensor provides the Work (and each\n    Contributor provides its Contributions) on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or\n    implied, including, without limitation, any warranties or conditions\n    of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A\n    PARTICULAR PURPOSE. You are solely responsible for determining the\n    appropriateness of using or redistributing the Work and assume any\n    risks associated with Your exercise of permissions under this License.\n\n 8. Limitation of Liability. In no event and under no legal theory,\n    whether in tort (including negligence), contract, or otherwise,\n    unless required by applicable law (such as deliberate and grossly\n    negligent acts) or agreed to in writing, shall any Contributor be\n    liable to You for damages, including any direct, indirect, special,\n    incidental, or consequential damages of any character arising as a\n    result of this License or out of the use or inability to use the\n    Work (including but not limited to damages for loss of goodwill,\n    work stoppage, computer failure or malfunction, or any and all\n    other commercial damages or losses), even if such Contributor\n    has been advised of the possibility of such damages.\n\n 9. Accepting Warranty or Additional Liability. While redistributing\n    the Work or Derivative Works thereof, You may choose to offer,\n    and charge a fee for, acceptance of support, warranty, indemnity,\n    or other liability obligations and/or rights consistent with this\n    License. However, in accepting such obligations, You may act only\n    on Your own behalf and on Your sole responsibility, not on behalf\n    of any other Contributor, and only if You agree to indemnify,\n    defend, and hold each Contributor harmless for any liability\n    incurred by, or claims asserted against, such Contributor by reason\n    of your accepting any such warranty or additional liability.\n\n END OF TERMS AND CONDITIONS\n\n APPENDIX: How to apply the Apache License to your work.\n\n    To apply the Apache License to your work, attach the following\n    boilerplate notice, with the fields enclosed by brackets \"[]\"\n    replaced with your own identifying information. (Don't include\n    the brackets!)  The text should be enclosed in the appropriate\n    comment syntax for the file format. We also recommend that a\n    file or class name and description of purpose be included on the\n    same \"printed page\" as the copyright notice for easier\n    identification within third-party archives.\n\n Copyright 2015 Netflix, Inc.\n\n Licensed under the Apache License, Version 2.0 (the \"License\");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n\n     http://www.apache.org/licenses/LICENSE-2.0\n\n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n */\nSystem.register(\"@reactivex/rxjs/dist/cjs/Subject\", [\"@reactivex/rxjs/dist/cjs/Observable\", \"@reactivex/rxjs/dist/cjs/Subscriber\", \"@reactivex/rxjs/dist/cjs/Subscription\", \"@reactivex/rxjs/dist/cjs/subjects/SubjectSubscription\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  'use strict';\n  exports.__esModule = true;\n  function _interopRequireDefault(obj) {\n    return obj && obj.__esModule ? obj : {'default': obj};\n  }\n  function _classCallCheck(instance, Constructor) {\n    if (!(instance instanceof Constructor)) {\n      throw new TypeError('Cannot call a class as a function');\n    }\n  }\n  function _inherits(subClass, superClass) {\n    if (typeof superClass !== 'function' && superClass !== null) {\n      throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass);\n    }\n    subClass.prototype = Object.create(superClass && superClass.prototype, {constructor: {\n        value: subClass,\n        enumerable: false,\n        writable: true,\n        configurable: true\n      }});\n    if (superClass)\n      Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass;\n  }\n  var _Observable2 = require(\"@reactivex/rxjs/dist/cjs/Observable\");\n  var _Observable3 = _interopRequireDefault(_Observable2);\n  var _Subscriber = require(\"@reactivex/rxjs/dist/cjs/Subscriber\");\n  var _Subscriber2 = _interopRequireDefault(_Subscriber);\n  var _Subscription = require(\"@reactivex/rxjs/dist/cjs/Subscription\");\n  var _Subscription2 = _interopRequireDefault(_Subscription);\n  var _subjectsSubjectSubscription = require(\"@reactivex/rxjs/dist/cjs/subjects/SubjectSubscription\");\n  var _subjectsSubjectSubscription2 = _interopRequireDefault(_subjectsSubjectSubscription);\n  var subscriptionAdd = _Subscription2['default'].prototype.add;\n  var subscriptionRemove = _Subscription2['default'].prototype.remove;\n  var subscriptionUnsubscribe = _Subscription2['default'].prototype.unsubscribe;\n  var subscriberNext = _Subscriber2['default'].prototype.next;\n  var subscriberError = _Subscriber2['default'].prototype.error;\n  var subscriberComplete = _Subscriber2['default'].prototype.complete;\n  var _subscriberNext = _Subscriber2['default'].prototype._next;\n  var _subscriberError = _Subscriber2['default'].prototype._error;\n  var _subscriberComplete = _Subscriber2['default'].prototype._complete;\n  var Subject = (function(_Observable) {\n    _inherits(Subject, _Observable);\n    function Subject() {\n      _classCallCheck(this, Subject);\n      for (var _len = arguments.length,\n          args = Array(_len),\n          _key = 0; _key < _len; _key++) {\n        args[_key] = arguments[_key];\n      }\n      _Observable.call.apply(_Observable, [this].concat(args));\n      this.observers = [];\n      this.isUnsubscribed = false;\n      this.dispatching = false;\n      this.errorSignal = false;\n      this.completeSignal = false;\n    }\n    Subject.create = function create(source, destination) {\n      return new BidirectionalSubject(source, destination);\n    };\n    Subject.prototype.lift = function lift(operator) {\n      var subject = new BidirectionalSubject(this, this.destination || this);\n      subject.operator = operator;\n      return subject;\n    };\n    Subject.prototype._subscribe = function _subscribe(subscriber) {\n      if (subscriber.isUnsubscribed) {\n        return ;\n      } else if (this.errorSignal) {\n        subscriber.error(this.errorInstance);\n        return ;\n      } else if (this.completeSignal) {\n        subscriber.complete();\n        return ;\n      } else if (this.isUnsubscribed) {\n        throw new Error(\"Cannot subscribe to a disposed Subject.\");\n      }\n      this.observers.push(subscriber);\n      return new _subjectsSubjectSubscription2['default'](this, subscriber);\n    };\n    Subject.prototype.add = function add(subscription) {\n      subscriptionAdd.call(this, subscription);\n    };\n    Subject.prototype.remove = function remove(subscription) {\n      subscriptionRemove.call(this, subscription);\n    };\n    Subject.prototype.unsubscribe = function unsubscribe() {\n      this.observers = void 0;\n      subscriptionUnsubscribe.call(this);\n    };\n    Subject.prototype.next = function next(value) {\n      if (this.isUnsubscribed) {\n        return ;\n      }\n      this.dispatching = true;\n      this._next(value);\n      this.dispatching = false;\n      if (this.errorSignal) {\n        this.error(this.errorInstance);\n      } else if (this.completeSignal) {\n        this.complete();\n      }\n    };\n    Subject.prototype.error = function error(_error) {\n      if (this.isUnsubscribed || this.completeSignal) {\n        return ;\n      }\n      this.errorSignal = true;\n      this.errorInstance = _error;\n      if (this.dispatching) {\n        return ;\n      }\n      this._error(_error);\n      this.unsubscribe();\n    };\n    Subject.prototype.complete = function complete() {\n      if (this.isUnsubscribed || this.errorSignal) {\n        return ;\n      }\n      this.completeSignal = true;\n      if (this.dispatching) {\n        return ;\n      }\n      this._complete();\n      this.unsubscribe();\n    };\n    Subject.prototype._next = function _next(value) {\n      var index = -1;\n      var observers = this.observers.slice(0);\n      var len = observers.length;\n      while (++index < len) {\n        observers[index].next(value);\n      }\n    };\n    Subject.prototype._error = function _error(error) {\n      var index = -1;\n      var observers = this.observers;\n      var len = observers.length;\n      this.observers = void 0;\n      this.isUnsubscribed = true;\n      while (++index < len) {\n        observers[index].error(error);\n      }\n      this.isUnsubscribed = false;\n    };\n    Subject.prototype._complete = function _complete() {\n      var index = -1;\n      var observers = this.observers;\n      var len = observers.length;\n      this.observers = void 0;\n      this.isUnsubscribed = true;\n      while (++index < len) {\n        observers[index].complete();\n      }\n      this.isUnsubscribed = false;\n    };\n    return Subject;\n  })(_Observable3['default']);\n  exports['default'] = Subject;\n  var BidirectionalSubject = (function(_Subject) {\n    _inherits(BidirectionalSubject, _Subject);\n    function BidirectionalSubject(source, destination) {\n      _classCallCheck(this, BidirectionalSubject);\n      _Subject.call(this);\n      this.source = source;\n      this.destination = destination;\n    }\n    BidirectionalSubject.prototype._subscribe = function _subscribe(subscriber) {\n      var operator = this.operator;\n      return this.source._subscribe.call(this.source, operator ? operator.call(subscriber) : subscriber);\n    };\n    BidirectionalSubject.prototype.next = function next(x) {\n      subscriberNext.call(this, x);\n    };\n    BidirectionalSubject.prototype.error = function error(e) {\n      subscriberError.call(this, e);\n    };\n    BidirectionalSubject.prototype.complete = function complete() {\n      subscriberComplete.call(this);\n    };\n    BidirectionalSubject.prototype._next = function _next(x) {\n      _subscriberNext.call(this, x);\n    };\n    BidirectionalSubject.prototype._error = function _error(e) {\n      _subscriberError.call(this, e);\n    };\n    BidirectionalSubject.prototype._complete = function _complete() {\n      _subscriberComplete.call(this);\n    };\n    return BidirectionalSubject;\n  })(Subject);\n  module.exports = exports['default'];\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"@reactivex/rxjs/dist/cjs/operators/multicast\", [\"@reactivex/rxjs/dist/cjs/observables/ConnectableObservable\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  'use strict';\n  exports.__esModule = true;\n  exports['default'] = multicast;\n  function _interopRequireDefault(obj) {\n    return obj && obj.__esModule ? obj : {'default': obj};\n  }\n  var _observablesConnectableObservable = require(\"@reactivex/rxjs/dist/cjs/observables/ConnectableObservable\");\n  var _observablesConnectableObservable2 = _interopRequireDefault(_observablesConnectableObservable);\n  function multicast(subjectFactory) {\n    return new _observablesConnectableObservable2['default'](this, subjectFactory);\n  }\n  module.exports = exports['default'];\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"@reactivex/rxjs/dist/cjs/operators/partition\", [\"@reactivex/rxjs/dist/cjs/util/not\", \"@reactivex/rxjs/dist/cjs/operators/filter\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  'use strict';\n  exports.__esModule = true;\n  exports['default'] = partition;\n  function _interopRequireDefault(obj) {\n    return obj && obj.__esModule ? obj : {'default': obj};\n  }\n  var _utilNot = require(\"@reactivex/rxjs/dist/cjs/util/not\");\n  var _utilNot2 = _interopRequireDefault(_utilNot);\n  var _filter = require(\"@reactivex/rxjs/dist/cjs/operators/filter\");\n  var _filter2 = _interopRequireDefault(_filter);\n  function partition(predicate, thisArg) {\n    return [_filter2['default'].call(this, predicate), _filter2['default'].call(this, _utilNot2['default'](predicate, thisArg))];\n  }\n  module.exports = exports['default'];\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"@reactivex/rxjs/dist/cjs/operators/publishBehavior\", [\"@reactivex/rxjs/dist/cjs/subjects/BehaviorSubject\", \"@reactivex/rxjs/dist/cjs/operators/multicast\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  'use strict';\n  exports.__esModule = true;\n  exports['default'] = publishBehavior;\n  function _interopRequireDefault(obj) {\n    return obj && obj.__esModule ? obj : {'default': obj};\n  }\n  var _subjectsBehaviorSubject = require(\"@reactivex/rxjs/dist/cjs/subjects/BehaviorSubject\");\n  var _subjectsBehaviorSubject2 = _interopRequireDefault(_subjectsBehaviorSubject);\n  var _multicast = require(\"@reactivex/rxjs/dist/cjs/operators/multicast\");\n  var _multicast2 = _interopRequireDefault(_multicast);\n  function publishBehavior(value) {\n    return _multicast2['default'].call(this, function() {\n      return new _subjectsBehaviorSubject2['default'](value);\n    });\n  }\n  module.exports = exports['default'];\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"@reactivex/rxjs/dist/cjs/operators/publishReplay\", [\"@reactivex/rxjs/dist/cjs/subjects/ReplaySubject\", \"@reactivex/rxjs/dist/cjs/operators/multicast\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  'use strict';\n  exports.__esModule = true;\n  exports['default'] = publishReplay;\n  function _interopRequireDefault(obj) {\n    return obj && obj.__esModule ? obj : {'default': obj};\n  }\n  var _subjectsReplaySubject = require(\"@reactivex/rxjs/dist/cjs/subjects/ReplaySubject\");\n  var _subjectsReplaySubject2 = _interopRequireDefault(_subjectsReplaySubject);\n  var _multicast = require(\"@reactivex/rxjs/dist/cjs/operators/multicast\");\n  var _multicast2 = _interopRequireDefault(_multicast);\n  function publishReplay(bufferSize, windowTime, scheduler) {\n    if (bufferSize === undefined)\n      bufferSize = Number.POSITIVE_INFINITY;\n    if (windowTime === undefined)\n      windowTime = Number.POSITIVE_INFINITY;\n    return _multicast2['default'].call(this, function() {\n      return new _subjectsReplaySubject2['default'](bufferSize, windowTime, scheduler);\n    });\n  }\n  module.exports = exports['default'];\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"@reactivex/rxjs/dist/cjs/operators/reduce\", [\"@reactivex/rxjs/dist/cjs/operators/reduce-support\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  'use strict';\n  exports.__esModule = true;\n  exports['default'] = reduce;\n  var _reduceSupport = require(\"@reactivex/rxjs/dist/cjs/operators/reduce-support\");\n  function reduce(project, acc) {\n    return this.lift(new _reduceSupport.ReduceOperator(project, acc));\n  }\n  module.exports = exports['default'];\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"@reactivex/rxjs/dist/cjs/operators/subscribeOn\", [\"@reactivex/rxjs/dist/cjs/observables/SubscribeOnObservable\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  'use strict';\n  exports.__esModule = true;\n  exports['default'] = subscribeOn;\n  function _interopRequireDefault(obj) {\n    return obj && obj.__esModule ? obj : {'default': obj};\n  }\n  var _observablesSubscribeOnObservable = require(\"@reactivex/rxjs/dist/cjs/observables/SubscribeOnObservable\");\n  var _observablesSubscribeOnObservable2 = _interopRequireDefault(_observablesSubscribeOnObservable);\n  function subscribeOn(scheduler) {\n    var delay = arguments.length <= 1 || arguments[1] === undefined ? 0 : arguments[1];\n    return new _observablesSubscribeOnObservable2['default'](this, delay, scheduler);\n  }\n  module.exports = exports['default'];\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"angular2/src/core/di/decorators\", [\"angular2/src/core/di/metadata\", \"angular2/src/core/util/decorators\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  var metadata_1 = require(\"angular2/src/core/di/metadata\");\n  var decorators_1 = require(\"angular2/src/core/util/decorators\");\n  exports.Inject = decorators_1.makeParamDecorator(metadata_1.InjectMetadata);\n  exports.Optional = decorators_1.makeParamDecorator(metadata_1.OptionalMetadata);\n  exports.Injectable = decorators_1.makeDecorator(metadata_1.InjectableMetadata);\n  exports.Self = decorators_1.makeParamDecorator(metadata_1.SelfMetadata);\n  exports.Host = decorators_1.makeParamDecorator(metadata_1.HostMetadata);\n  exports.SkipSelf = decorators_1.makeParamDecorator(metadata_1.SkipSelfMetadata);\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"angular2/src/facade/exceptions\", [\"angular2/src/facade/exception_handler\", \"angular2/src/facade/exception_handler\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  var __extends = (this && this.__extends) || function(d, b) {\n    for (var p in b)\n      if (b.hasOwnProperty(p))\n        d[p] = b[p];\n    function __() {\n      this.constructor = d;\n    }\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n  };\n  var exception_handler_1 = require(\"angular2/src/facade/exception_handler\");\n  var exception_handler_2 = require(\"angular2/src/facade/exception_handler\");\n  exports.ExceptionHandler = exception_handler_2.ExceptionHandler;\n  var BaseException = (function(_super) {\n    __extends(BaseException, _super);\n    function BaseException(message) {\n      if (message === void 0) {\n        message = \"--\";\n      }\n      _super.call(this, message);\n      this.message = message;\n      this.stack = (new Error(message)).stack;\n    }\n    BaseException.prototype.toString = function() {\n      return this.message;\n    };\n    return BaseException;\n  })(Error);\n  exports.BaseException = BaseException;\n  var WrappedException = (function(_super) {\n    __extends(WrappedException, _super);\n    function WrappedException(_wrapperMessage, _originalException, _originalStack, _context) {\n      _super.call(this, _wrapperMessage);\n      this._wrapperMessage = _wrapperMessage;\n      this._originalException = _originalException;\n      this._originalStack = _originalStack;\n      this._context = _context;\n      this._wrapperStack = (new Error(_wrapperMessage)).stack;\n    }\n    Object.defineProperty(WrappedException.prototype, \"wrapperMessage\", {\n      get: function() {\n        return this._wrapperMessage;\n      },\n      enumerable: true,\n      configurable: true\n    });\n    Object.defineProperty(WrappedException.prototype, \"wrapperStack\", {\n      get: function() {\n        return this._wrapperStack;\n      },\n      enumerable: true,\n      configurable: true\n    });\n    Object.defineProperty(WrappedException.prototype, \"originalException\", {\n      get: function() {\n        return this._originalException;\n      },\n      enumerable: true,\n      configurable: true\n    });\n    Object.defineProperty(WrappedException.prototype, \"originalStack\", {\n      get: function() {\n        return this._originalStack;\n      },\n      enumerable: true,\n      configurable: true\n    });\n    Object.defineProperty(WrappedException.prototype, \"context\", {\n      get: function() {\n        return this._context;\n      },\n      enumerable: true,\n      configurable: true\n    });\n    Object.defineProperty(WrappedException.prototype, \"message\", {\n      get: function() {\n        return exception_handler_1.ExceptionHandler.exceptionToString(this);\n      },\n      enumerable: true,\n      configurable: true\n    });\n    WrappedException.prototype.toString = function() {\n      return this.message;\n    };\n    return WrappedException;\n  })(Error);\n  exports.WrappedException = WrappedException;\n  function makeTypeError(message) {\n    return new TypeError(message);\n  }\n  exports.makeTypeError = makeTypeError;\n  function unimplemented() {\n    throw new BaseException('unimplemented');\n  }\n  exports.unimplemented = unimplemented;\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"angular2/src/core/reflection/reflection\", [\"angular2/src/core/reflection/reflector\", \"angular2/src/core/reflection/reflector\", \"angular2/src/core/reflection/reflection_capabilities\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  var reflector_1 = require(\"angular2/src/core/reflection/reflector\");\n  var reflector_2 = require(\"angular2/src/core/reflection/reflector\");\n  exports.Reflector = reflector_2.Reflector;\n  exports.ReflectionInfo = reflector_2.ReflectionInfo;\n  var reflection_capabilities_1 = require(\"angular2/src/core/reflection/reflection_capabilities\");\n  exports.reflector = new reflector_1.Reflector(new reflection_capabilities_1.ReflectionCapabilities());\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"angular2/src/core/di/key\", [\"angular2/src/facade/lang\", \"angular2/src/facade/exceptions\", \"angular2/src/core/di/type_literal\", \"angular2/src/core/di/forward_ref\", \"angular2/src/core/di/type_literal\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  var lang_1 = require(\"angular2/src/facade/lang\");\n  var exceptions_1 = require(\"angular2/src/facade/exceptions\");\n  var type_literal_1 = require(\"angular2/src/core/di/type_literal\");\n  var forward_ref_1 = require(\"angular2/src/core/di/forward_ref\");\n  var type_literal_2 = require(\"angular2/src/core/di/type_literal\");\n  exports.TypeLiteral = type_literal_2.TypeLiteral;\n  var Key = (function() {\n    function Key(token, id) {\n      this.token = token;\n      this.id = id;\n      if (lang_1.isBlank(token)) {\n        throw new exceptions_1.BaseException('Token must be defined!');\n      }\n    }\n    Object.defineProperty(Key.prototype, \"displayName\", {\n      get: function() {\n        return lang_1.stringify(this.token);\n      },\n      enumerable: true,\n      configurable: true\n    });\n    Key.get = function(token) {\n      return _globalKeyRegistry.get(forward_ref_1.resolveForwardRef(token));\n    };\n    Object.defineProperty(Key, \"numberOfKeys\", {\n      get: function() {\n        return _globalKeyRegistry.numberOfKeys;\n      },\n      enumerable: true,\n      configurable: true\n    });\n    return Key;\n  })();\n  exports.Key = Key;\n  var KeyRegistry = (function() {\n    function KeyRegistry() {\n      this._allKeys = new Map();\n    }\n    KeyRegistry.prototype.get = function(token) {\n      if (token instanceof Key)\n        return token;\n      var theToken = token;\n      if (token instanceof type_literal_1.TypeLiteral) {\n        theToken = token.type;\n      }\n      token = theToken;\n      if (this._allKeys.has(token)) {\n        return this._allKeys.get(token);\n      }\n      var newKey = new Key(token, Key.numberOfKeys);\n      this._allKeys.set(token, newKey);\n      return newKey;\n    };\n    Object.defineProperty(KeyRegistry.prototype, \"numberOfKeys\", {\n      get: function() {\n        return this._allKeys.size;\n      },\n      enumerable: true,\n      configurable: true\n    });\n    return KeyRegistry;\n  })();\n  exports.KeyRegistry = KeyRegistry;\n  var _globalKeyRegistry = new KeyRegistry();\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"angular2/src/core/change_detection/change_detection_util\", [\"angular2/src/facade/lang\", \"angular2/src/facade/exceptions\", \"angular2/src/facade/collection\", \"angular2/src/core/change_detection/constants\", \"angular2/src/core/change_detection/pipe_lifecycle_reflector\", \"angular2/src/core/change_detection/binding_record\", \"angular2/src/core/change_detection/directive_record\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  var lang_1 = require(\"angular2/src/facade/lang\");\n  var exceptions_1 = require(\"angular2/src/facade/exceptions\");\n  var collection_1 = require(\"angular2/src/facade/collection\");\n  var constants_1 = require(\"angular2/src/core/change_detection/constants\");\n  var pipe_lifecycle_reflector_1 = require(\"angular2/src/core/change_detection/pipe_lifecycle_reflector\");\n  var binding_record_1 = require(\"angular2/src/core/change_detection/binding_record\");\n  var directive_record_1 = require(\"angular2/src/core/change_detection/directive_record\");\n  var WrappedValue = (function() {\n    function WrappedValue(wrapped) {\n      this.wrapped = wrapped;\n    }\n    WrappedValue.wrap = function(value) {\n      var w = _wrappedValues[_wrappedIndex++ % 5];\n      w.wrapped = value;\n      return w;\n    };\n    return WrappedValue;\n  })();\n  exports.WrappedValue = WrappedValue;\n  var _wrappedValues = [new WrappedValue(null), new WrappedValue(null), new WrappedValue(null), new WrappedValue(null), new WrappedValue(null)];\n  var _wrappedIndex = 0;\n  var SimpleChange = (function() {\n    function SimpleChange(previousValue, currentValue) {\n      this.previousValue = previousValue;\n      this.currentValue = currentValue;\n    }\n    SimpleChange.prototype.isFirstChange = function() {\n      return this.previousValue === ChangeDetectionUtil.uninitialized;\n    };\n    return SimpleChange;\n  })();\n  exports.SimpleChange = SimpleChange;\n  var _simpleChangesIndex = 0;\n  var _simpleChanges = [new SimpleChange(null, null), new SimpleChange(null, null), new SimpleChange(null, null), new SimpleChange(null, null), new SimpleChange(null, null), new SimpleChange(null, null), new SimpleChange(null, null), new SimpleChange(null, null), new SimpleChange(null, null), new SimpleChange(null, null), new SimpleChange(null, null), new SimpleChange(null, null), new SimpleChange(null, null), new SimpleChange(null, null), new SimpleChange(null, null), new SimpleChange(null, null), new SimpleChange(null, null), new SimpleChange(null, null), new SimpleChange(null, null), new SimpleChange(null, null)];\n  function _simpleChange(previousValue, currentValue) {\n    var index = _simpleChangesIndex++ % 20;\n    var s = _simpleChanges[index];\n    s.previousValue = previousValue;\n    s.currentValue = currentValue;\n    return s;\n  }\n  var ChangeDetectionUtil = (function() {\n    function ChangeDetectionUtil() {}\n    ChangeDetectionUtil.arrayFn0 = function() {\n      return [];\n    };\n    ChangeDetectionUtil.arrayFn1 = function(a1) {\n      return [a1];\n    };\n    ChangeDetectionUtil.arrayFn2 = function(a1, a2) {\n      return [a1, a2];\n    };\n    ChangeDetectionUtil.arrayFn3 = function(a1, a2, a3) {\n      return [a1, a2, a3];\n    };\n    ChangeDetectionUtil.arrayFn4 = function(a1, a2, a3, a4) {\n      return [a1, a2, a3, a4];\n    };\n    ChangeDetectionUtil.arrayFn5 = function(a1, a2, a3, a4, a5) {\n      return [a1, a2, a3, a4, a5];\n    };\n    ChangeDetectionUtil.arrayFn6 = function(a1, a2, a3, a4, a5, a6) {\n      return [a1, a2, a3, a4, a5, a6];\n    };\n    ChangeDetectionUtil.arrayFn7 = function(a1, a2, a3, a4, a5, a6, a7) {\n      return [a1, a2, a3, a4, a5, a6, a7];\n    };\n    ChangeDetectionUtil.arrayFn8 = function(a1, a2, a3, a4, a5, a6, a7, a8) {\n      return [a1, a2, a3, a4, a5, a6, a7, a8];\n    };\n    ChangeDetectionUtil.arrayFn9 = function(a1, a2, a3, a4, a5, a6, a7, a8, a9) {\n      return [a1, a2, a3, a4, a5, a6, a7, a8, a9];\n    };\n    ChangeDetectionUtil.operation_negate = function(value) {\n      return !value;\n    };\n    ChangeDetectionUtil.operation_add = function(left, right) {\n      return left + right;\n    };\n    ChangeDetectionUtil.operation_subtract = function(left, right) {\n      return left - right;\n    };\n    ChangeDetectionUtil.operation_multiply = function(left, right) {\n      return left * right;\n    };\n    ChangeDetectionUtil.operation_divide = function(left, right) {\n      return left / right;\n    };\n    ChangeDetectionUtil.operation_remainder = function(left, right) {\n      return left % right;\n    };\n    ChangeDetectionUtil.operation_equals = function(left, right) {\n      return left == right;\n    };\n    ChangeDetectionUtil.operation_not_equals = function(left, right) {\n      return left != right;\n    };\n    ChangeDetectionUtil.operation_identical = function(left, right) {\n      return left === right;\n    };\n    ChangeDetectionUtil.operation_not_identical = function(left, right) {\n      return left !== right;\n    };\n    ChangeDetectionUtil.operation_less_then = function(left, right) {\n      return left < right;\n    };\n    ChangeDetectionUtil.operation_greater_then = function(left, right) {\n      return left > right;\n    };\n    ChangeDetectionUtil.operation_less_or_equals_then = function(left, right) {\n      return left <= right;\n    };\n    ChangeDetectionUtil.operation_greater_or_equals_then = function(left, right) {\n      return left >= right;\n    };\n    ChangeDetectionUtil.cond = function(cond, trueVal, falseVal) {\n      return cond ? trueVal : falseVal;\n    };\n    ChangeDetectionUtil.mapFn = function(keys) {\n      function buildMap(values) {\n        var res = collection_1.StringMapWrapper.create();\n        for (var i = 0; i < keys.length; ++i) {\n          collection_1.StringMapWrapper.set(res, keys[i], values[i]);\n        }\n        return res;\n      }\n      switch (keys.length) {\n        case 0:\n          return function() {\n            return [];\n          };\n        case 1:\n          return function(a1) {\n            return buildMap([a1]);\n          };\n        case 2:\n          return function(a1, a2) {\n            return buildMap([a1, a2]);\n          };\n        case 3:\n          return function(a1, a2, a3) {\n            return buildMap([a1, a2, a3]);\n          };\n        case 4:\n          return function(a1, a2, a3, a4) {\n            return buildMap([a1, a2, a3, a4]);\n          };\n        case 5:\n          return function(a1, a2, a3, a4, a5) {\n            return buildMap([a1, a2, a3, a4, a5]);\n          };\n        case 6:\n          return function(a1, a2, a3, a4, a5, a6) {\n            return buildMap([a1, a2, a3, a4, a5, a6]);\n          };\n        case 7:\n          return function(a1, a2, a3, a4, a5, a6, a7) {\n            return buildMap([a1, a2, a3, a4, a5, a6, a7]);\n          };\n        case 8:\n          return function(a1, a2, a3, a4, a5, a6, a7, a8) {\n            return buildMap([a1, a2, a3, a4, a5, a6, a7, a8]);\n          };\n        case 9:\n          return function(a1, a2, a3, a4, a5, a6, a7, a8, a9) {\n            return buildMap([a1, a2, a3, a4, a5, a6, a7, a8, a9]);\n          };\n        default:\n          throw new exceptions_1.BaseException(\"Does not support literal maps with more than 9 elements\");\n      }\n    };\n    ChangeDetectionUtil.keyedAccess = function(obj, args) {\n      return obj[args[0]];\n    };\n    ChangeDetectionUtil.unwrapValue = function(value) {\n      if (value instanceof WrappedValue) {\n        return value.wrapped;\n      } else {\n        return value;\n      }\n    };\n    ChangeDetectionUtil.changeDetectionMode = function(strategy) {\n      return constants_1.isDefaultChangeDetectionStrategy(strategy) ? constants_1.ChangeDetectionStrategy.CheckAlways : constants_1.ChangeDetectionStrategy.CheckOnce;\n    };\n    ChangeDetectionUtil.simpleChange = function(previousValue, currentValue) {\n      return _simpleChange(previousValue, currentValue);\n    };\n    ChangeDetectionUtil.isValueBlank = function(value) {\n      return lang_1.isBlank(value);\n    };\n    ChangeDetectionUtil.s = function(value) {\n      return lang_1.isPresent(value) ? \"\" + value : '';\n    };\n    ChangeDetectionUtil.protoByIndex = function(protos, selfIndex) {\n      return selfIndex < 1 ? null : protos[selfIndex - 1];\n    };\n    ChangeDetectionUtil.callPipeOnDestroy = function(selectedPipe) {\n      if (pipe_lifecycle_reflector_1.implementsOnDestroy(selectedPipe.pipe)) {\n        selectedPipe.pipe.onDestroy();\n      }\n    };\n    ChangeDetectionUtil.bindingTarget = function(mode, elementIndex, name, unit, debug) {\n      return new binding_record_1.BindingTarget(mode, elementIndex, name, unit, debug);\n    };\n    ChangeDetectionUtil.directiveIndex = function(elementIndex, directiveIndex) {\n      return new directive_record_1.DirectiveIndex(elementIndex, directiveIndex);\n    };\n    ChangeDetectionUtil.looseNotIdentical = function(a, b) {\n      return !lang_1.looseIdentical(a, b);\n    };\n    ChangeDetectionUtil.uninitialized = lang_1.CONST_EXPR(new Object());\n    return ChangeDetectionUtil;\n  })();\n  exports.ChangeDetectionUtil = ChangeDetectionUtil;\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"angular2/src/core/profile/profile\", [\"angular2/src/core/profile/wtf_impl\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  var impl = require(\"angular2/src/core/profile/wtf_impl\");\n  exports.wtfEnabled = impl.detectWTF();\n  function noopScope(arg0, arg1) {\n    return null;\n  }\n  exports.wtfCreateScope = exports.wtfEnabled ? impl.createScope : function(signature, flags) {\n    return noopScope;\n  };\n  exports.wtfLeave = exports.wtfEnabled ? impl.leave : function(s, r) {\n    return r;\n  };\n  exports.wtfStartTimeRange = exports.wtfEnabled ? impl.startTimeRange : function(rangeType, action) {\n    return null;\n  };\n  exports.wtfEndTimeRange = exports.wtfEnabled ? impl.endTimeRange : function(r) {\n    return null;\n  };\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"angular2/src/core/change_detection/codegen_logic_util\", [\"angular2/src/facade/lang\", \"angular2/src/core/change_detection/codegen_facade\", \"angular2/src/core/change_detection/proto_record\", \"angular2/src/core/change_detection/constants\", \"angular2/src/facade/exceptions\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  var lang_1 = require(\"angular2/src/facade/lang\");\n  var codegen_facade_1 = require(\"angular2/src/core/change_detection/codegen_facade\");\n  var proto_record_1 = require(\"angular2/src/core/change_detection/proto_record\");\n  var constants_1 = require(\"angular2/src/core/change_detection/constants\");\n  var exceptions_1 = require(\"angular2/src/facade/exceptions\");\n  var CodegenLogicUtil = (function() {\n    function CodegenLogicUtil(_names, _utilName, _changeDetectorStateName, _changeDetection) {\n      this._names = _names;\n      this._utilName = _utilName;\n      this._changeDetectorStateName = _changeDetectorStateName;\n      this._changeDetection = _changeDetection;\n    }\n    CodegenLogicUtil.prototype.genPropertyBindingEvalValue = function(protoRec) {\n      var _this = this;\n      return this._genEvalValue(protoRec, function(idx) {\n        return _this._names.getLocalName(idx);\n      }, this._names.getLocalsAccessorName());\n    };\n    CodegenLogicUtil.prototype.genEventBindingEvalValue = function(eventRecord, protoRec) {\n      var _this = this;\n      return this._genEvalValue(protoRec, function(idx) {\n        return _this._names.getEventLocalName(eventRecord, idx);\n      }, \"locals\");\n    };\n    CodegenLogicUtil.prototype._genEvalValue = function(protoRec, getLocalName, localsAccessor) {\n      var context = (protoRec.contextIndex == -1) ? this._names.getDirectiveName(protoRec.directiveIndex) : getLocalName(protoRec.contextIndex);\n      var argString = protoRec.args.map(function(arg) {\n        return getLocalName(arg);\n      }).join(\", \");\n      var rhs;\n      switch (protoRec.mode) {\n        case proto_record_1.RecordType.Self:\n          rhs = context;\n          break;\n        case proto_record_1.RecordType.Const:\n          rhs = codegen_facade_1.codify(protoRec.funcOrValue);\n          break;\n        case proto_record_1.RecordType.PropertyRead:\n          rhs = this._observe(context + \".\" + protoRec.name, protoRec);\n          break;\n        case proto_record_1.RecordType.SafeProperty:\n          var read = this._observe(context + \".\" + protoRec.name, protoRec);\n          rhs = this._utilName + \".isValueBlank(\" + context + \") ? null : \" + this._observe(read, protoRec);\n          break;\n        case proto_record_1.RecordType.PropertyWrite:\n          rhs = context + \".\" + protoRec.name + \" = \" + getLocalName(protoRec.args[0]);\n          break;\n        case proto_record_1.RecordType.Local:\n          rhs = this._observe(localsAccessor + \".get(\" + codegen_facade_1.rawString(protoRec.name) + \")\", protoRec);\n          break;\n        case proto_record_1.RecordType.InvokeMethod:\n          rhs = this._observe(context + \".\" + protoRec.name + \"(\" + argString + \")\", protoRec);\n          break;\n        case proto_record_1.RecordType.SafeMethodInvoke:\n          var invoke = context + \".\" + protoRec.name + \"(\" + argString + \")\";\n          rhs = this._utilName + \".isValueBlank(\" + context + \") ? null : \" + this._observe(invoke, protoRec);\n          break;\n        case proto_record_1.RecordType.InvokeClosure:\n          rhs = context + \"(\" + argString + \")\";\n          break;\n        case proto_record_1.RecordType.PrimitiveOp:\n          rhs = this._utilName + \".\" + protoRec.name + \"(\" + argString + \")\";\n          break;\n        case proto_record_1.RecordType.CollectionLiteral:\n          rhs = this._utilName + \".\" + protoRec.name + \"(\" + argString + \")\";\n          break;\n        case proto_record_1.RecordType.Interpolate:\n          rhs = this._genInterpolation(protoRec);\n          break;\n        case proto_record_1.RecordType.KeyedRead:\n          rhs = this._observe(context + \"[\" + getLocalName(protoRec.args[0]) + \"]\", protoRec);\n          break;\n        case proto_record_1.RecordType.KeyedWrite:\n          rhs = context + \"[\" + getLocalName(protoRec.args[0]) + \"] = \" + getLocalName(protoRec.args[1]);\n          break;\n        case proto_record_1.RecordType.Chain:\n          rhs = 'null';\n          break;\n        default:\n          throw new exceptions_1.BaseException(\"Unknown operation \" + protoRec.mode);\n      }\n      return getLocalName(protoRec.selfIndex) + \" = \" + rhs + \";\";\n    };\n    CodegenLogicUtil.prototype._observe = function(exp, rec) {\n      if (this._changeDetection === constants_1.ChangeDetectionStrategy.OnPushObserve) {\n        return \"this.observeValue(\" + exp + \", \" + rec.selfIndex + \")\";\n      } else {\n        return exp;\n      }\n    };\n    CodegenLogicUtil.prototype.genPropertyBindingTargets = function(propertyBindingTargets, genDebugInfo) {\n      var _this = this;\n      var bs = propertyBindingTargets.map(function(b) {\n        if (lang_1.isBlank(b))\n          return \"null\";\n        var debug = genDebugInfo ? codegen_facade_1.codify(b.debug) : \"null\";\n        return _this._utilName + \".bindingTarget(\" + codegen_facade_1.codify(b.mode) + \", \" + b.elementIndex + \", \" + codegen_facade_1.codify(b.name) + \", \" + codegen_facade_1.codify(b.unit) + \", \" + debug + \")\";\n      });\n      return \"[\" + bs.join(\", \") + \"]\";\n    };\n    CodegenLogicUtil.prototype.genDirectiveIndices = function(directiveRecords) {\n      var _this = this;\n      var bs = directiveRecords.map(function(b) {\n        return (_this._utilName + \".directiveIndex(\" + b.directiveIndex.elementIndex + \", \" + b.directiveIndex.directiveIndex + \")\");\n      });\n      return \"[\" + bs.join(\", \") + \"]\";\n    };\n    CodegenLogicUtil.prototype._genInterpolation = function(protoRec) {\n      var iVals = [];\n      for (var i = 0; i < protoRec.args.length; ++i) {\n        iVals.push(codegen_facade_1.codify(protoRec.fixedArgs[i]));\n        iVals.push(this._utilName + \".s(\" + this._names.getLocalName(protoRec.args[i]) + \")\");\n      }\n      iVals.push(codegen_facade_1.codify(protoRec.fixedArgs[protoRec.args.length]));\n      return codegen_facade_1.combineGeneratedStrings(iVals);\n    };\n    CodegenLogicUtil.prototype.genHydrateDirectives = function(directiveRecords) {\n      var res = [];\n      for (var i = 0; i < directiveRecords.length; ++i) {\n        var r = directiveRecords[i];\n        res.push(this._names.getDirectiveName(r.directiveIndex) + \" = \" + this._genReadDirective(i) + \";\");\n      }\n      return res.join(\"\\n\");\n    };\n    CodegenLogicUtil.prototype._genReadDirective = function(index) {\n      if (this._changeDetection === constants_1.ChangeDetectionStrategy.OnPushObserve) {\n        return \"this.observeDirective(this.getDirectiveFor(directives, \" + index + \"), \" + index + \")\";\n      } else {\n        return \"this.getDirectiveFor(directives, \" + index + \")\";\n      }\n    };\n    CodegenLogicUtil.prototype.genHydrateDetectors = function(directiveRecords) {\n      var res = [];\n      for (var i = 0; i < directiveRecords.length; ++i) {\n        var r = directiveRecords[i];\n        if (!r.isDefaultChangeDetection()) {\n          res.push(this._names.getDetectorName(r.directiveIndex) + \" = this.getDetectorFor(directives, \" + i + \");\");\n        }\n      }\n      return res.join(\"\\n\");\n    };\n    CodegenLogicUtil.prototype.genContentLifecycleCallbacks = function(directiveRecords) {\n      var res = [];\n      var eq = lang_1.IS_DART ? '==' : '===';\n      for (var i = directiveRecords.length - 1; i >= 0; --i) {\n        var dir = directiveRecords[i];\n        if (dir.callAfterContentInit) {\n          res.push(\"if(\" + this._names.getStateName() + \" \" + eq + \" \" + this._changeDetectorStateName + \".NeverChecked) \" + this._names.getDirectiveName(dir.directiveIndex) + \".afterContentInit();\");\n        }\n        if (dir.callAfterContentChecked) {\n          res.push(this._names.getDirectiveName(dir.directiveIndex) + \".afterContentChecked();\");\n        }\n      }\n      return res;\n    };\n    CodegenLogicUtil.prototype.genViewLifecycleCallbacks = function(directiveRecords) {\n      var res = [];\n      var eq = lang_1.IS_DART ? '==' : '===';\n      for (var i = directiveRecords.length - 1; i >= 0; --i) {\n        var dir = directiveRecords[i];\n        if (dir.callAfterViewInit) {\n          res.push(\"if(\" + this._names.getStateName() + \" \" + eq + \" \" + this._changeDetectorStateName + \".NeverChecked) \" + this._names.getDirectiveName(dir.directiveIndex) + \".afterViewInit();\");\n        }\n        if (dir.callAfterViewChecked) {\n          res.push(this._names.getDirectiveName(dir.directiveIndex) + \".afterViewChecked();\");\n        }\n      }\n      return res;\n    };\n    return CodegenLogicUtil;\n  })();\n  exports.CodegenLogicUtil = CodegenLogicUtil;\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"angular2/src/common/pipes/date_pipe\", [\"angular2/src/facade/lang\", \"angular2/src/facade/intl\", \"angular2/src/core/di\", \"angular2/src/core/metadata\", \"angular2/src/facade/collection\", \"angular2/src/common/pipes/invalid_pipe_argument_exception\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  var __decorate = (this && this.__decorate) || function(decorators, target, key, desc) {\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\")\n      return Reflect.decorate(decorators, target, key, desc);\n    switch (arguments.length) {\n      case 2:\n        return decorators.reduceRight(function(o, d) {\n          return (d && d(o)) || o;\n        }, target);\n      case 3:\n        return decorators.reduceRight(function(o, d) {\n          return (d && d(target, key)), void 0;\n        }, void 0);\n      case 4:\n        return decorators.reduceRight(function(o, d) {\n          return (d && d(target, key, o)) || o;\n        }, desc);\n    }\n  };\n  var __metadata = (this && this.__metadata) || function(k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\")\n      return Reflect.metadata(k, v);\n  };\n  var lang_1 = require(\"angular2/src/facade/lang\");\n  var intl_1 = require(\"angular2/src/facade/intl\");\n  var di_1 = require(\"angular2/src/core/di\");\n  var metadata_1 = require(\"angular2/src/core/metadata\");\n  var collection_1 = require(\"angular2/src/facade/collection\");\n  var invalid_pipe_argument_exception_1 = require(\"angular2/src/common/pipes/invalid_pipe_argument_exception\");\n  var defaultLocale = 'en-US';\n  var DatePipe = (function() {\n    function DatePipe() {}\n    DatePipe.prototype.transform = function(value, args) {\n      if (lang_1.isBlank(value))\n        return null;\n      if (!this.supports(value)) {\n        throw new invalid_pipe_argument_exception_1.InvalidPipeArgumentException(DatePipe, value);\n      }\n      var pattern = lang_1.isPresent(args) && args.length > 0 ? args[0] : 'mediumDate';\n      if (lang_1.isNumber(value)) {\n        value = lang_1.DateWrapper.fromMillis(value);\n      }\n      if (collection_1.StringMapWrapper.contains(DatePipe._ALIASES, pattern)) {\n        pattern = collection_1.StringMapWrapper.get(DatePipe._ALIASES, pattern);\n      }\n      return intl_1.DateFormatter.format(value, defaultLocale, pattern);\n    };\n    DatePipe.prototype.supports = function(obj) {\n      return lang_1.isDate(obj) || lang_1.isNumber(obj);\n    };\n    DatePipe._ALIASES = {\n      'medium': 'yMMMdjms',\n      'short': 'yMdjm',\n      'fullDate': 'yMMMMEEEEd',\n      'longDate': 'yMMMMd',\n      'mediumDate': 'yMMMd',\n      'shortDate': 'yMd',\n      'mediumTime': 'jms',\n      'shortTime': 'jm'\n    };\n    DatePipe = __decorate([lang_1.CONST(), metadata_1.Pipe({\n      name: 'date',\n      pure: true\n    }), di_1.Injectable(), __metadata('design:paramtypes', [])], DatePipe);\n    return DatePipe;\n  })();\n  exports.DatePipe = DatePipe;\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"angular2/src/core/pipes/pipes\", [\"angular2/src/facade/lang\", \"angular2/src/facade/exceptions\", \"angular2/src/facade/collection\", \"angular2/src/core/change_detection/pipes\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  var lang_1 = require(\"angular2/src/facade/lang\");\n  var exceptions_1 = require(\"angular2/src/facade/exceptions\");\n  var collection_1 = require(\"angular2/src/facade/collection\");\n  var cd = require(\"angular2/src/core/change_detection/pipes\");\n  var ProtoPipes = (function() {\n    function ProtoPipes(config) {\n      this.config = config;\n      this.config = config;\n    }\n    ProtoPipes.fromProviders = function(providers) {\n      var config = {};\n      providers.forEach(function(b) {\n        return config[b.name] = b;\n      });\n      return new ProtoPipes(config);\n    };\n    ProtoPipes.prototype.get = function(name) {\n      var provider = this.config[name];\n      if (lang_1.isBlank(provider))\n        throw new exceptions_1.BaseException(\"Cannot find pipe '\" + name + \"'.\");\n      return provider;\n    };\n    return ProtoPipes;\n  })();\n  exports.ProtoPipes = ProtoPipes;\n  var Pipes = (function() {\n    function Pipes(proto, injector) {\n      this.proto = proto;\n      this.injector = injector;\n      this._config = {};\n    }\n    Pipes.prototype.get = function(name) {\n      var cached = collection_1.StringMapWrapper.get(this._config, name);\n      if (lang_1.isPresent(cached))\n        return cached;\n      var p = this.proto.get(name);\n      var transform = this.injector.instantiateResolved(p);\n      var res = new cd.SelectedPipe(transform, p.pure);\n      if (p.pure) {\n        collection_1.StringMapWrapper.set(this._config, name, res);\n      }\n      return res;\n    };\n    return Pipes;\n  })();\n  exports.Pipes = Pipes;\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"angular2/src/core/linker/view\", [\"angular2/src/facade/collection\", \"angular2/src/core/change_detection/change_detection\", \"angular2/src/core/change_detection/interfaces\", \"angular2/src/facade/lang\", \"angular2/src/facade/exceptions\", \"angular2/src/core/linker/view_ref\", \"angular2/src/core/render/dom/util\", \"angular2/src/core/linker/view_ref\", \"angular2/src/core/change_detection/interfaces\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  var __extends = (this && this.__extends) || function(d, b) {\n    for (var p in b)\n      if (b.hasOwnProperty(p))\n        d[p] = b[p];\n    function __() {\n      this.constructor = d;\n    }\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n  };\n  var collection_1 = require(\"angular2/src/facade/collection\");\n  var change_detection_1 = require(\"angular2/src/core/change_detection/change_detection\");\n  var interfaces_1 = require(\"angular2/src/core/change_detection/interfaces\");\n  var lang_1 = require(\"angular2/src/facade/lang\");\n  var exceptions_1 = require(\"angular2/src/facade/exceptions\");\n  var view_ref_1 = require(\"angular2/src/core/linker/view_ref\");\n  var util_1 = require(\"angular2/src/core/render/dom/util\");\n  var view_ref_2 = require(\"angular2/src/core/linker/view_ref\");\n  var interfaces_2 = require(\"angular2/src/core/change_detection/interfaces\");\n  exports.DebugContext = interfaces_2.DebugContext;\n  var REFLECT_PREFIX = 'ng-reflect-';\n  (function(ViewType) {\n    ViewType[ViewType[\"HOST\"] = 0] = \"HOST\";\n    ViewType[ViewType[\"COMPONENT\"] = 1] = \"COMPONENT\";\n    ViewType[ViewType[\"EMBEDDED\"] = 2] = \"EMBEDDED\";\n  })(exports.ViewType || (exports.ViewType = {}));\n  var ViewType = exports.ViewType;\n  var AppViewContainer = (function() {\n    function AppViewContainer() {\n      this.views = [];\n    }\n    return AppViewContainer;\n  })();\n  exports.AppViewContainer = AppViewContainer;\n  var AppView = (function() {\n    function AppView(renderer, proto, viewOffset, elementOffset, textOffset, protoLocals, render, renderFragment, containerElementInjector) {\n      this.renderer = renderer;\n      this.proto = proto;\n      this.viewOffset = viewOffset;\n      this.elementOffset = elementOffset;\n      this.textOffset = textOffset;\n      this.render = render;\n      this.renderFragment = renderFragment;\n      this.containerElementInjector = containerElementInjector;\n      this.views = null;\n      this.elementInjectors = null;\n      this.viewContainers = null;\n      this.preBuiltObjects = null;\n      this.changeDetector = null;\n      this.context = null;\n      this.ref = new view_ref_2.ViewRef_(this);\n      this.locals = new change_detection_1.Locals(null, collection_1.MapWrapper.clone(protoLocals));\n    }\n    AppView.prototype.init = function(changeDetector, elementInjectors, rootElementInjectors, preBuiltObjects, views, elementRefs, viewContainers) {\n      this.changeDetector = changeDetector;\n      this.elementInjectors = elementInjectors;\n      this.rootElementInjectors = rootElementInjectors;\n      this.preBuiltObjects = preBuiltObjects;\n      this.views = views;\n      this.elementRefs = elementRefs;\n      this.viewContainers = viewContainers;\n    };\n    AppView.prototype.setLocal = function(contextName, value) {\n      if (!this.hydrated())\n        throw new exceptions_1.BaseException('Cannot set locals on dehydrated view.');\n      if (!this.proto.templateVariableBindings.has(contextName)) {\n        return ;\n      }\n      var templateName = this.proto.templateVariableBindings.get(contextName);\n      this.locals.set(templateName, value);\n    };\n    AppView.prototype.hydrated = function() {\n      return lang_1.isPresent(this.context);\n    };\n    AppView.prototype.triggerEventHandlers = function(eventName, eventObj, boundElementIndex) {\n      var locals = new collection_1.Map();\n      locals.set('$event', eventObj);\n      this.dispatchEvent(boundElementIndex, eventName, locals);\n    };\n    AppView.prototype.notifyOnBinding = function(b, currentValue) {\n      if (b.isTextNode()) {\n        this.renderer.setText(this.render, b.elementIndex + this.textOffset, currentValue);\n      } else {\n        var elementRef = this.elementRefs[this.elementOffset + b.elementIndex];\n        if (b.isElementProperty()) {\n          this.renderer.setElementProperty(elementRef, b.name, currentValue);\n        } else if (b.isElementAttribute()) {\n          this.renderer.setElementAttribute(elementRef, b.name, lang_1.isPresent(currentValue) ? \"\" + currentValue : null);\n        } else if (b.isElementClass()) {\n          this.renderer.setElementClass(elementRef, b.name, currentValue);\n        } else if (b.isElementStyle()) {\n          var unit = lang_1.isPresent(b.unit) ? b.unit : '';\n          this.renderer.setElementStyle(elementRef, b.name, lang_1.isPresent(currentValue) ? \"\" + currentValue + unit : null);\n        } else {\n          throw new exceptions_1.BaseException('Unsupported directive record');\n        }\n      }\n    };\n    AppView.prototype.logBindingUpdate = function(b, value) {\n      if (b.isDirective() || b.isElementProperty()) {\n        var elementRef = this.elementRefs[this.elementOffset + b.elementIndex];\n        this.renderer.setElementAttribute(elementRef, \"\" + REFLECT_PREFIX + util_1.camelCaseToDashCase(b.name), \"\" + value);\n      }\n    };\n    AppView.prototype.notifyAfterContentChecked = function() {\n      var eiCount = this.proto.elementBinders.length;\n      var ei = this.elementInjectors;\n      for (var i = eiCount - 1; i >= 0; i--) {\n        if (lang_1.isPresent(ei[i + this.elementOffset]))\n          ei[i + this.elementOffset].afterContentChecked();\n      }\n    };\n    AppView.prototype.notifyAfterViewChecked = function() {\n      var eiCount = this.proto.elementBinders.length;\n      var ei = this.elementInjectors;\n      for (var i = eiCount - 1; i >= 0; i--) {\n        if (lang_1.isPresent(ei[i + this.elementOffset]))\n          ei[i + this.elementOffset].afterViewChecked();\n      }\n    };\n    AppView.prototype.getDirectiveFor = function(directive) {\n      var elementInjector = this.elementInjectors[this.elementOffset + directive.elementIndex];\n      return elementInjector.getDirectiveAtIndex(directive.directiveIndex);\n    };\n    AppView.prototype.getNestedView = function(boundElementIndex) {\n      var eli = this.elementInjectors[boundElementIndex];\n      return lang_1.isPresent(eli) ? eli.getNestedView() : null;\n    };\n    AppView.prototype.getContainerElement = function() {\n      return lang_1.isPresent(this.containerElementInjector) ? this.containerElementInjector.getElementRef() : null;\n    };\n    AppView.prototype.getDebugContext = function(elementIndex, directiveIndex) {\n      try {\n        var offsettedIndex = this.elementOffset + elementIndex;\n        var hasRefForIndex = offsettedIndex < this.elementRefs.length;\n        var elementRef = hasRefForIndex ? this.elementRefs[this.elementOffset + elementIndex] : null;\n        var container = this.getContainerElement();\n        var ei = hasRefForIndex ? this.elementInjectors[this.elementOffset + elementIndex] : null;\n        var element = lang_1.isPresent(elementRef) ? elementRef.nativeElement : null;\n        var componentElement = lang_1.isPresent(container) ? container.nativeElement : null;\n        var directive = lang_1.isPresent(directiveIndex) ? this.getDirectiveFor(directiveIndex) : null;\n        var injector = lang_1.isPresent(ei) ? ei.getInjector() : null;\n        return new interfaces_1.DebugContext(element, componentElement, directive, this.context, _localsToStringMap(this.locals), injector);\n      } catch (e) {\n        return null;\n      }\n    };\n    AppView.prototype.getDetectorFor = function(directive) {\n      var childView = this.getNestedView(this.elementOffset + directive.elementIndex);\n      return lang_1.isPresent(childView) ? childView.changeDetector : null;\n    };\n    AppView.prototype.invokeElementMethod = function(elementIndex, methodName, args) {\n      this.renderer.invokeElementMethod(this.elementRefs[elementIndex], methodName, args);\n    };\n    AppView.prototype.dispatchRenderEvent = function(boundElementIndex, eventName, locals) {\n      var elementRef = this.elementRefs[boundElementIndex];\n      var view = view_ref_1.internalView(elementRef.parentView);\n      return view.dispatchEvent(elementRef.boundElementIndex, eventName, locals);\n    };\n    AppView.prototype.dispatchEvent = function(boundElementIndex, eventName, locals) {\n      try {\n        if (this.hydrated()) {\n          return !this.changeDetector.handleEvent(eventName, boundElementIndex - this.elementOffset, new change_detection_1.Locals(this.locals, locals));\n        } else {\n          return true;\n        }\n      } catch (e) {\n        var c = this.getDebugContext(boundElementIndex - this.elementOffset, null);\n        var context = lang_1.isPresent(c) ? new _Context(c.element, c.componentElement, c.context, c.locals, c.injector) : null;\n        throw new EventEvaluationError(eventName, e, e.stack, context);\n      }\n    };\n    Object.defineProperty(AppView.prototype, \"ownBindersCount\", {\n      get: function() {\n        return this.proto.elementBinders.length;\n      },\n      enumerable: true,\n      configurable: true\n    });\n    return AppView;\n  })();\n  exports.AppView = AppView;\n  function _localsToStringMap(locals) {\n    var res = {};\n    var c = locals;\n    while (lang_1.isPresent(c)) {\n      res = collection_1.StringMapWrapper.merge(res, collection_1.MapWrapper.toStringMap(c.current));\n      c = c.parent;\n    }\n    return res;\n  }\n  var _Context = (function() {\n    function _Context(element, componentElement, context, locals, injector) {\n      this.element = element;\n      this.componentElement = componentElement;\n      this.context = context;\n      this.locals = locals;\n      this.injector = injector;\n    }\n    return _Context;\n  })();\n  var EventEvaluationError = (function(_super) {\n    __extends(EventEvaluationError, _super);\n    function EventEvaluationError(eventName, originalException, originalStack, context) {\n      _super.call(this, \"Error during evaluation of \\\"\" + eventName + \"\\\"\", originalException, originalStack, context);\n    }\n    return EventEvaluationError;\n  })(exceptions_1.WrappedException);\n  var AppProtoViewMergeInfo = (function() {\n    function AppProtoViewMergeInfo(embeddedViewCount, elementCount, viewCount) {\n      this.embeddedViewCount = embeddedViewCount;\n      this.elementCount = elementCount;\n      this.viewCount = viewCount;\n    }\n    return AppProtoViewMergeInfo;\n  })();\n  exports.AppProtoViewMergeInfo = AppProtoViewMergeInfo;\n  var AppProtoView = (function() {\n    function AppProtoView(templateId, templateCmds, type, isMergable, changeDetectorFactory, templateVariableBindings, pipes) {\n      this.templateId = templateId;\n      this.templateCmds = templateCmds;\n      this.type = type;\n      this.isMergable = isMergable;\n      this.changeDetectorFactory = changeDetectorFactory;\n      this.templateVariableBindings = templateVariableBindings;\n      this.pipes = pipes;\n      this.elementBinders = null;\n      this.mergeInfo = null;\n      this.variableLocations = null;\n      this.textBindingCount = null;\n      this.render = null;\n      this.ref = new view_ref_2.ProtoViewRef_(this);\n    }\n    AppProtoView.prototype.init = function(render, elementBinders, textBindingCount, mergeInfo, variableLocations) {\n      var _this = this;\n      this.render = render;\n      this.elementBinders = elementBinders;\n      this.textBindingCount = textBindingCount;\n      this.mergeInfo = mergeInfo;\n      this.variableLocations = variableLocations;\n      this.protoLocals = new collection_1.Map();\n      if (lang_1.isPresent(this.templateVariableBindings)) {\n        this.templateVariableBindings.forEach(function(templateName, _) {\n          _this.protoLocals.set(templateName, null);\n        });\n      }\n      if (lang_1.isPresent(variableLocations)) {\n        variableLocations.forEach(function(_, templateName) {\n          _this.protoLocals.set(templateName, null);\n        });\n      }\n    };\n    AppProtoView.prototype.isInitialized = function() {\n      return lang_1.isPresent(this.elementBinders);\n    };\n    return AppProtoView;\n  })();\n  exports.AppProtoView = AppProtoView;\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"angular2/src/core/linker/view_manager_utils\", [\"angular2/src/core/di\", \"angular2/src/facade/collection\", \"angular2/src/core/linker/element_injector\", \"angular2/src/facade/lang\", \"angular2/src/core/linker/view\", \"angular2/src/core/linker/element_ref\", \"angular2/src/core/linker/template_ref\", \"angular2/src/core/pipes/pipes\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  var __decorate = (this && this.__decorate) || function(decorators, target, key, desc) {\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\")\n      return Reflect.decorate(decorators, target, key, desc);\n    switch (arguments.length) {\n      case 2:\n        return decorators.reduceRight(function(o, d) {\n          return (d && d(o)) || o;\n        }, target);\n      case 3:\n        return decorators.reduceRight(function(o, d) {\n          return (d && d(target, key)), void 0;\n        }, void 0);\n      case 4:\n        return decorators.reduceRight(function(o, d) {\n          return (d && d(target, key, o)) || o;\n        }, desc);\n    }\n  };\n  var __metadata = (this && this.__metadata) || function(k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\")\n      return Reflect.metadata(k, v);\n  };\n  var di_1 = require(\"angular2/src/core/di\");\n  var collection_1 = require(\"angular2/src/facade/collection\");\n  var eli = require(\"angular2/src/core/linker/element_injector\");\n  var lang_1 = require(\"angular2/src/facade/lang\");\n  var viewModule = require(\"angular2/src/core/linker/view\");\n  var element_ref_1 = require(\"angular2/src/core/linker/element_ref\");\n  var template_ref_1 = require(\"angular2/src/core/linker/template_ref\");\n  var pipes_1 = require(\"angular2/src/core/pipes/pipes\");\n  var AppViewManagerUtils = (function() {\n    function AppViewManagerUtils() {}\n    AppViewManagerUtils.prototype.getComponentInstance = function(parentView, boundElementIndex) {\n      var eli = parentView.elementInjectors[boundElementIndex];\n      return eli.getComponent();\n    };\n    AppViewManagerUtils.prototype.createView = function(mergedParentViewProto, renderViewWithFragments, viewManager, renderer) {\n      var renderFragments = renderViewWithFragments.fragmentRefs;\n      var renderView = renderViewWithFragments.viewRef;\n      var elementCount = mergedParentViewProto.mergeInfo.elementCount;\n      var viewCount = mergedParentViewProto.mergeInfo.viewCount;\n      var elementRefs = collection_1.ListWrapper.createFixedSize(elementCount);\n      var viewContainers = collection_1.ListWrapper.createFixedSize(elementCount);\n      var preBuiltObjects = collection_1.ListWrapper.createFixedSize(elementCount);\n      var elementInjectors = collection_1.ListWrapper.createFixedSize(elementCount);\n      var views = collection_1.ListWrapper.createFixedSize(viewCount);\n      var elementOffset = 0;\n      var textOffset = 0;\n      var fragmentIdx = 0;\n      var containerElementIndicesByViewIndex = collection_1.ListWrapper.createFixedSize(viewCount);\n      for (var viewOffset = 0; viewOffset < viewCount; viewOffset++) {\n        var containerElementIndex = containerElementIndicesByViewIndex[viewOffset];\n        var containerElementInjector = lang_1.isPresent(containerElementIndex) ? elementInjectors[containerElementIndex] : null;\n        var parentView = lang_1.isPresent(containerElementInjector) ? preBuiltObjects[containerElementIndex].view : null;\n        var protoView = lang_1.isPresent(containerElementIndex) ? parentView.proto.elementBinders[containerElementIndex - parentView.elementOffset].nestedProtoView : mergedParentViewProto;\n        var renderFragment = null;\n        if (viewOffset === 0 || protoView.type === viewModule.ViewType.EMBEDDED) {\n          renderFragment = renderFragments[fragmentIdx++];\n        }\n        var currentView = new viewModule.AppView(renderer, protoView, viewOffset, elementOffset, textOffset, protoView.protoLocals, renderView, renderFragment, containerElementInjector);\n        views[viewOffset] = currentView;\n        if (lang_1.isPresent(containerElementIndex)) {\n          preBuiltObjects[containerElementIndex].nestedView = currentView;\n        }\n        var rootElementInjectors = [];\n        var nestedViewOffset = viewOffset + 1;\n        for (var binderIdx = 0; binderIdx < protoView.elementBinders.length; binderIdx++) {\n          var binder = protoView.elementBinders[binderIdx];\n          var boundElementIndex = elementOffset + binderIdx;\n          var elementInjector = null;\n          if (lang_1.isPresent(binder.nestedProtoView) && binder.nestedProtoView.isMergable) {\n            containerElementIndicesByViewIndex[nestedViewOffset] = boundElementIndex;\n            nestedViewOffset += binder.nestedProtoView.mergeInfo.viewCount;\n          }\n          var protoElementInjector = binder.protoElementInjector;\n          if (lang_1.isPresent(protoElementInjector)) {\n            if (lang_1.isPresent(protoElementInjector.parent)) {\n              var parentElementInjector = elementInjectors[elementOffset + protoElementInjector.parent.index];\n              elementInjector = protoElementInjector.instantiate(parentElementInjector);\n            } else {\n              elementInjector = protoElementInjector.instantiate(null);\n              rootElementInjectors.push(elementInjector);\n            }\n          }\n          elementInjectors[boundElementIndex] = elementInjector;\n          var el = new element_ref_1.ElementRef_(currentView.ref, boundElementIndex, renderer);\n          elementRefs[el.boundElementIndex] = el;\n          if (lang_1.isPresent(elementInjector)) {\n            var templateRef = lang_1.isPresent(binder.nestedProtoView) && binder.nestedProtoView.type === viewModule.ViewType.EMBEDDED ? new template_ref_1.TemplateRef_(el) : null;\n            preBuiltObjects[boundElementIndex] = new eli.PreBuiltObjects(viewManager, currentView, el, templateRef);\n          }\n        }\n        currentView.init(protoView.changeDetectorFactory(currentView), elementInjectors, rootElementInjectors, preBuiltObjects, views, elementRefs, viewContainers);\n        if (lang_1.isPresent(parentView) && protoView.type === viewModule.ViewType.COMPONENT) {\n          parentView.changeDetector.addViewChild(currentView.changeDetector);\n        }\n        elementOffset += protoView.elementBinders.length;\n        textOffset += protoView.textBindingCount;\n      }\n      return views[0];\n    };\n    AppViewManagerUtils.prototype.hydrateRootHostView = function(hostView, injector) {\n      this._hydrateView(hostView, injector, null, new Object(), null);\n    };\n    AppViewManagerUtils.prototype.attachViewInContainer = function(parentView, boundElementIndex, contextView, contextBoundElementIndex, index, view) {\n      if (lang_1.isBlank(contextView)) {\n        contextView = parentView;\n        contextBoundElementIndex = boundElementIndex;\n      }\n      parentView.changeDetector.addContentChild(view.changeDetector);\n      var viewContainer = parentView.viewContainers[boundElementIndex];\n      if (lang_1.isBlank(viewContainer)) {\n        viewContainer = new viewModule.AppViewContainer();\n        parentView.viewContainers[boundElementIndex] = viewContainer;\n      }\n      collection_1.ListWrapper.insert(viewContainer.views, index, view);\n      var elementInjector = contextView.elementInjectors[contextBoundElementIndex];\n      for (var i = view.rootElementInjectors.length - 1; i >= 0; i--) {\n        if (lang_1.isPresent(elementInjector.parent)) {\n          view.rootElementInjectors[i].link(elementInjector.parent);\n        }\n      }\n      elementInjector.traverseAndSetQueriesAsDirty();\n    };\n    AppViewManagerUtils.prototype.detachViewInContainer = function(parentView, boundElementIndex, index) {\n      var viewContainer = parentView.viewContainers[boundElementIndex];\n      var view = viewContainer.views[index];\n      parentView.elementInjectors[boundElementIndex].traverseAndSetQueriesAsDirty();\n      view.changeDetector.remove();\n      collection_1.ListWrapper.removeAt(viewContainer.views, index);\n      for (var i = 0; i < view.rootElementInjectors.length; ++i) {\n        var inj = view.rootElementInjectors[i];\n        inj.unlink();\n      }\n    };\n    AppViewManagerUtils.prototype.hydrateViewInContainer = function(parentView, boundElementIndex, contextView, contextBoundElementIndex, index, imperativelyCreatedProviders) {\n      if (lang_1.isBlank(contextView)) {\n        contextView = parentView;\n        contextBoundElementIndex = boundElementIndex;\n      }\n      var viewContainer = parentView.viewContainers[boundElementIndex];\n      var view = viewContainer.views[index];\n      var elementInjector = contextView.elementInjectors[contextBoundElementIndex];\n      var injector = lang_1.isPresent(imperativelyCreatedProviders) ? di_1.Injector.fromResolvedProviders(imperativelyCreatedProviders) : null;\n      this._hydrateView(view, injector, elementInjector.getHost(), contextView.context, contextView.locals);\n    };\n    AppViewManagerUtils.prototype._hydrateView = function(initView, imperativelyCreatedInjector, hostElementInjector, context, parentLocals) {\n      var viewIdx = initView.viewOffset;\n      var endViewOffset = viewIdx + initView.proto.mergeInfo.viewCount - 1;\n      while (viewIdx <= endViewOffset) {\n        var currView = initView.views[viewIdx];\n        var currProtoView = currView.proto;\n        if (currView !== initView && currView.proto.type === viewModule.ViewType.EMBEDDED) {\n          viewIdx += currView.proto.mergeInfo.viewCount;\n        } else {\n          if (currView !== initView) {\n            imperativelyCreatedInjector = null;\n            parentLocals = null;\n            hostElementInjector = currView.containerElementInjector;\n            context = hostElementInjector.getComponent();\n          }\n          currView.context = context;\n          currView.locals.parent = parentLocals;\n          var binders = currProtoView.elementBinders;\n          for (var binderIdx = 0; binderIdx < binders.length; binderIdx++) {\n            var boundElementIndex = binderIdx + currView.elementOffset;\n            var elementInjector = initView.elementInjectors[boundElementIndex];\n            if (lang_1.isPresent(elementInjector)) {\n              elementInjector.hydrate(imperativelyCreatedInjector, hostElementInjector, currView.preBuiltObjects[boundElementIndex]);\n              this._populateViewLocals(currView, elementInjector, boundElementIndex);\n              this._setUpEventEmitters(currView, elementInjector, boundElementIndex);\n            }\n          }\n          var pipes = lang_1.isPresent(hostElementInjector) ? new pipes_1.Pipes(currView.proto.pipes, hostElementInjector.getInjector()) : null;\n          currView.changeDetector.hydrate(currView.context, currView.locals, currView, pipes);\n          viewIdx++;\n        }\n      }\n    };\n    AppViewManagerUtils.prototype._populateViewLocals = function(view, elementInjector, boundElementIdx) {\n      if (lang_1.isPresent(elementInjector.getDirectiveVariableBindings())) {\n        elementInjector.getDirectiveVariableBindings().forEach(function(directiveIndex, name) {\n          if (lang_1.isBlank(directiveIndex)) {\n            view.locals.set(name, view.elementRefs[boundElementIdx].nativeElement);\n          } else {\n            view.locals.set(name, elementInjector.getDirectiveAtIndex(directiveIndex));\n          }\n        });\n      }\n    };\n    AppViewManagerUtils.prototype._setUpEventEmitters = function(view, elementInjector, boundElementIndex) {\n      var emitters = elementInjector.getEventEmitterAccessors();\n      for (var directiveIndex = 0; directiveIndex < emitters.length; ++directiveIndex) {\n        var directiveEmitters = emitters[directiveIndex];\n        var directive = elementInjector.getDirectiveAtIndex(directiveIndex);\n        for (var eventIndex = 0; eventIndex < directiveEmitters.length; ++eventIndex) {\n          var eventEmitterAccessor = directiveEmitters[eventIndex];\n          eventEmitterAccessor.subscribe(view, boundElementIndex, directive);\n        }\n      }\n    };\n    AppViewManagerUtils.prototype.dehydrateView = function(initView) {\n      var endViewOffset = initView.viewOffset + initView.proto.mergeInfo.viewCount - 1;\n      for (var viewIdx = initView.viewOffset; viewIdx <= endViewOffset; viewIdx++) {\n        var currView = initView.views[viewIdx];\n        if (currView.hydrated()) {\n          if (lang_1.isPresent(currView.locals)) {\n            currView.locals.clearValues();\n          }\n          currView.context = null;\n          currView.changeDetector.dehydrate();\n          var binders = currView.proto.elementBinders;\n          for (var binderIdx = 0; binderIdx < binders.length; binderIdx++) {\n            var eli = initView.elementInjectors[currView.elementOffset + binderIdx];\n            if (lang_1.isPresent(eli)) {\n              eli.dehydrate();\n            }\n          }\n        }\n      }\n    };\n    AppViewManagerUtils = __decorate([di_1.Injectable(), __metadata('design:paramtypes', [])], AppViewManagerUtils);\n    return AppViewManagerUtils;\n  })();\n  exports.AppViewManagerUtils = AppViewManagerUtils;\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"angular2/src/core/linker/directive_lifecycle_reflector\", [\"angular2/src/facade/lang\", \"angular2/src/core/linker/interfaces\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  var lang_1 = require(\"angular2/src/facade/lang\");\n  var interfaces_1 = require(\"angular2/src/core/linker/interfaces\");\n  function hasLifecycleHook(lcInterface, token) {\n    if (!(token instanceof lang_1.Type))\n      return false;\n    var proto = token.prototype;\n    switch (lcInterface) {\n      case interfaces_1.LifecycleHooks.AfterContentInit:\n        return !!proto.afterContentInit;\n      case interfaces_1.LifecycleHooks.AfterContentChecked:\n        return !!proto.afterContentChecked;\n      case interfaces_1.LifecycleHooks.AfterViewInit:\n        return !!proto.afterViewInit;\n      case interfaces_1.LifecycleHooks.AfterViewChecked:\n        return !!proto.afterViewChecked;\n      case interfaces_1.LifecycleHooks.OnChanges:\n        return !!proto.onChanges;\n      case interfaces_1.LifecycleHooks.DoCheck:\n        return !!proto.doCheck;\n      case interfaces_1.LifecycleHooks.OnDestroy:\n        return !!proto.onDestroy;\n      case interfaces_1.LifecycleHooks.OnInit:\n        return !!proto.onInit;\n      default:\n        return false;\n    }\n  }\n  exports.hasLifecycleHook = hasLifecycleHook;\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"angular2/src/core/render/dom/shared_styles_host\", [\"angular2/src/core/dom/dom_adapter\", \"angular2/src/core/di\", \"angular2/src/facade/collection\", \"angular2/src/core/render/dom/dom_tokens\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  var __extends = (this && this.__extends) || function(d, b) {\n    for (var p in b)\n      if (b.hasOwnProperty(p))\n        d[p] = b[p];\n    function __() {\n      this.constructor = d;\n    }\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n  };\n  var __decorate = (this && this.__decorate) || function(decorators, target, key, desc) {\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\")\n      return Reflect.decorate(decorators, target, key, desc);\n    switch (arguments.length) {\n      case 2:\n        return decorators.reduceRight(function(o, d) {\n          return (d && d(o)) || o;\n        }, target);\n      case 3:\n        return decorators.reduceRight(function(o, d) {\n          return (d && d(target, key)), void 0;\n        }, void 0);\n      case 4:\n        return decorators.reduceRight(function(o, d) {\n          return (d && d(target, key, o)) || o;\n        }, desc);\n    }\n  };\n  var __metadata = (this && this.__metadata) || function(k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\")\n      return Reflect.metadata(k, v);\n  };\n  var __param = (this && this.__param) || function(paramIndex, decorator) {\n    return function(target, key) {\n      decorator(target, key, paramIndex);\n    };\n  };\n  var dom_adapter_1 = require(\"angular2/src/core/dom/dom_adapter\");\n  var di_1 = require(\"angular2/src/core/di\");\n  var collection_1 = require(\"angular2/src/facade/collection\");\n  var dom_tokens_1 = require(\"angular2/src/core/render/dom/dom_tokens\");\n  var SharedStylesHost = (function() {\n    function SharedStylesHost() {\n      this._styles = [];\n      this._stylesSet = new Set();\n    }\n    SharedStylesHost.prototype.addStyles = function(styles) {\n      var _this = this;\n      var additions = [];\n      styles.forEach(function(style) {\n        if (!collection_1.SetWrapper.has(_this._stylesSet, style)) {\n          _this._stylesSet.add(style);\n          _this._styles.push(style);\n          additions.push(style);\n        }\n      });\n      this.onStylesAdded(additions);\n    };\n    SharedStylesHost.prototype.onStylesAdded = function(additions) {};\n    SharedStylesHost.prototype.getAllStyles = function() {\n      return this._styles;\n    };\n    SharedStylesHost = __decorate([di_1.Injectable(), __metadata('design:paramtypes', [])], SharedStylesHost);\n    return SharedStylesHost;\n  })();\n  exports.SharedStylesHost = SharedStylesHost;\n  var DomSharedStylesHost = (function(_super) {\n    __extends(DomSharedStylesHost, _super);\n    function DomSharedStylesHost(doc) {\n      _super.call(this);\n      this._hostNodes = new Set();\n      this._hostNodes.add(doc.head);\n    }\n    DomSharedStylesHost.prototype._addStylesToHost = function(styles, host) {\n      for (var i = 0; i < styles.length; i++) {\n        var style = styles[i];\n        dom_adapter_1.DOM.appendChild(host, dom_adapter_1.DOM.createStyleElement(style));\n      }\n    };\n    DomSharedStylesHost.prototype.addHost = function(hostNode) {\n      this._addStylesToHost(this._styles, hostNode);\n      this._hostNodes.add(hostNode);\n    };\n    DomSharedStylesHost.prototype.removeHost = function(hostNode) {\n      collection_1.SetWrapper.delete(this._hostNodes, hostNode);\n    };\n    DomSharedStylesHost.prototype.onStylesAdded = function(additions) {\n      var _this = this;\n      this._hostNodes.forEach(function(hostNode) {\n        _this._addStylesToHost(additions, hostNode);\n      });\n    };\n    DomSharedStylesHost = __decorate([di_1.Injectable(), __param(0, di_1.Inject(dom_tokens_1.DOCUMENT)), __metadata('design:paramtypes', [Object])], DomSharedStylesHost);\n    return DomSharedStylesHost;\n  })(SharedStylesHost);\n  exports.DomSharedStylesHost = DomSharedStylesHost;\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"angular2/src/animate/animation\", [\"angular2/src/facade/lang\", \"angular2/src/facade/math\", \"angular2/src/core/render/dom/util\", \"angular2/src/facade/collection\", \"angular2/src/core/dom/dom_adapter\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  var lang_1 = require(\"angular2/src/facade/lang\");\n  var math_1 = require(\"angular2/src/facade/math\");\n  var util_1 = require(\"angular2/src/core/render/dom/util\");\n  var collection_1 = require(\"angular2/src/facade/collection\");\n  var dom_adapter_1 = require(\"angular2/src/core/dom/dom_adapter\");\n  var Animation = (function() {\n    function Animation(element, data, browserDetails) {\n      var _this = this;\n      this.element = element;\n      this.data = data;\n      this.browserDetails = browserDetails;\n      this.callbacks = [];\n      this.eventClearFunctions = [];\n      this.completed = false;\n      this._stringPrefix = '';\n      this.startTime = lang_1.DateWrapper.toMillis(lang_1.DateWrapper.now());\n      this._stringPrefix = dom_adapter_1.DOM.getAnimationPrefix();\n      this.setup();\n      this.wait(function(timestamp) {\n        return _this.start();\n      });\n    }\n    Object.defineProperty(Animation.prototype, \"totalTime\", {\n      get: function() {\n        var delay = this.computedDelay != null ? this.computedDelay : 0;\n        var duration = this.computedDuration != null ? this.computedDuration : 0;\n        return delay + duration;\n      },\n      enumerable: true,\n      configurable: true\n    });\n    Animation.prototype.wait = function(callback) {\n      this.browserDetails.raf(callback, 2);\n    };\n    Animation.prototype.setup = function() {\n      if (this.data.fromStyles != null)\n        this.applyStyles(this.data.fromStyles);\n      if (this.data.duration != null)\n        this.applyStyles({'transitionDuration': this.data.duration.toString() + 'ms'});\n      if (this.data.delay != null)\n        this.applyStyles({'transitionDelay': this.data.delay.toString() + 'ms'});\n    };\n    Animation.prototype.start = function() {\n      this.addClasses(this.data.classesToAdd);\n      this.addClasses(this.data.animationClasses);\n      this.removeClasses(this.data.classesToRemove);\n      if (this.data.toStyles != null)\n        this.applyStyles(this.data.toStyles);\n      var computedStyles = dom_adapter_1.DOM.getComputedStyle(this.element);\n      this.computedDelay = math_1.Math.max(this.parseDurationString(computedStyles.getPropertyValue(this._stringPrefix + 'transition-delay')), this.parseDurationString(this.element.style.getPropertyValue(this._stringPrefix + 'transition-delay')));\n      this.computedDuration = math_1.Math.max(this.parseDurationString(computedStyles.getPropertyValue(this._stringPrefix + 'transition-duration')), this.parseDurationString(this.element.style.getPropertyValue(this._stringPrefix + 'transition-duration')));\n      this.addEvents();\n    };\n    Animation.prototype.applyStyles = function(styles) {\n      var _this = this;\n      collection_1.StringMapWrapper.forEach(styles, function(value, key) {\n        var dashCaseKey = util_1.camelCaseToDashCase(key);\n        if (lang_1.isPresent(dom_adapter_1.DOM.getStyle(_this.element, dashCaseKey))) {\n          dom_adapter_1.DOM.setStyle(_this.element, dashCaseKey, value.toString());\n        } else {\n          dom_adapter_1.DOM.setStyle(_this.element, _this._stringPrefix + dashCaseKey, value.toString());\n        }\n      });\n    };\n    Animation.prototype.addClasses = function(classes) {\n      for (var i = 0,\n          len = classes.length; i < len; i++)\n        dom_adapter_1.DOM.addClass(this.element, classes[i]);\n    };\n    Animation.prototype.removeClasses = function(classes) {\n      for (var i = 0,\n          len = classes.length; i < len; i++)\n        dom_adapter_1.DOM.removeClass(this.element, classes[i]);\n    };\n    Animation.prototype.addEvents = function() {\n      var _this = this;\n      if (this.totalTime > 0) {\n        this.eventClearFunctions.push(dom_adapter_1.DOM.onAndCancel(this.element, dom_adapter_1.DOM.getTransitionEnd(), function(event) {\n          return _this.handleAnimationEvent(event);\n        }));\n      } else {\n        this.handleAnimationCompleted();\n      }\n    };\n    Animation.prototype.handleAnimationEvent = function(event) {\n      var elapsedTime = math_1.Math.round(event.elapsedTime * 1000);\n      if (!this.browserDetails.elapsedTimeIncludesDelay)\n        elapsedTime += this.computedDelay;\n      event.stopPropagation();\n      if (elapsedTime >= this.totalTime)\n        this.handleAnimationCompleted();\n    };\n    Animation.prototype.handleAnimationCompleted = function() {\n      this.removeClasses(this.data.animationClasses);\n      this.callbacks.forEach(function(callback) {\n        return callback();\n      });\n      this.callbacks = [];\n      this.eventClearFunctions.forEach(function(fn) {\n        return fn();\n      });\n      this.eventClearFunctions = [];\n      this.completed = true;\n    };\n    Animation.prototype.onComplete = function(callback) {\n      if (this.completed) {\n        callback();\n      } else {\n        this.callbacks.push(callback);\n      }\n      return this;\n    };\n    Animation.prototype.parseDurationString = function(duration) {\n      var maxValue = 0;\n      if (duration == null || duration.length < 2) {\n        return maxValue;\n      } else if (duration.substring(duration.length - 2) == 'ms') {\n        var value = lang_1.NumberWrapper.parseInt(this.stripLetters(duration), 10);\n        if (value > maxValue)\n          maxValue = value;\n      } else if (duration.substring(duration.length - 1) == 's') {\n        var ms = lang_1.NumberWrapper.parseFloat(this.stripLetters(duration)) * 1000;\n        var value = math_1.Math.floor(ms);\n        if (value > maxValue)\n          maxValue = value;\n      }\n      return maxValue;\n    };\n    Animation.prototype.stripLetters = function(str) {\n      return lang_1.StringWrapper.replaceAll(str, lang_1.RegExpWrapper.create('[^0-9]+$', ''), '');\n    };\n    return Animation;\n  })();\n  exports.Animation = Animation;\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"angular2/src/core/render/dom/events/event_manager\", [\"angular2/src/facade/lang\", \"angular2/src/facade/exceptions\", \"angular2/src/facade/collection\", \"angular2/src/core/dom/dom_adapter\", \"angular2/src/core/zone/ng_zone\", \"angular2/src/core/di\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  var __extends = (this && this.__extends) || function(d, b) {\n    for (var p in b)\n      if (b.hasOwnProperty(p))\n        d[p] = b[p];\n    function __() {\n      this.constructor = d;\n    }\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n  };\n  var __decorate = (this && this.__decorate) || function(decorators, target, key, desc) {\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\")\n      return Reflect.decorate(decorators, target, key, desc);\n    switch (arguments.length) {\n      case 2:\n        return decorators.reduceRight(function(o, d) {\n          return (d && d(o)) || o;\n        }, target);\n      case 3:\n        return decorators.reduceRight(function(o, d) {\n          return (d && d(target, key)), void 0;\n        }, void 0);\n      case 4:\n        return decorators.reduceRight(function(o, d) {\n          return (d && d(target, key, o)) || o;\n        }, desc);\n    }\n  };\n  var __metadata = (this && this.__metadata) || function(k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\")\n      return Reflect.metadata(k, v);\n  };\n  var __param = (this && this.__param) || function(paramIndex, decorator) {\n    return function(target, key) {\n      decorator(target, key, paramIndex);\n    };\n  };\n  var lang_1 = require(\"angular2/src/facade/lang\");\n  var exceptions_1 = require(\"angular2/src/facade/exceptions\");\n  var collection_1 = require(\"angular2/src/facade/collection\");\n  var dom_adapter_1 = require(\"angular2/src/core/dom/dom_adapter\");\n  var ng_zone_1 = require(\"angular2/src/core/zone/ng_zone\");\n  var di_1 = require(\"angular2/src/core/di\");\n  exports.EVENT_MANAGER_PLUGINS = lang_1.CONST_EXPR(new di_1.OpaqueToken(\"EventManagerPlugins\"));\n  var EventManager = (function() {\n    function EventManager(plugins, _zone) {\n      var _this = this;\n      this._zone = _zone;\n      plugins.forEach(function(p) {\n        return p.manager = _this;\n      });\n      this._plugins = collection_1.ListWrapper.reversed(plugins);\n    }\n    EventManager.prototype.addEventListener = function(element, eventName, handler) {\n      var plugin = this._findPluginFor(eventName);\n      plugin.addEventListener(element, eventName, handler);\n    };\n    EventManager.prototype.addGlobalEventListener = function(target, eventName, handler) {\n      var plugin = this._findPluginFor(eventName);\n      return plugin.addGlobalEventListener(target, eventName, handler);\n    };\n    EventManager.prototype.getZone = function() {\n      return this._zone;\n    };\n    EventManager.prototype._findPluginFor = function(eventName) {\n      var plugins = this._plugins;\n      for (var i = 0; i < plugins.length; i++) {\n        var plugin = plugins[i];\n        if (plugin.supports(eventName)) {\n          return plugin;\n        }\n      }\n      throw new exceptions_1.BaseException(\"No event manager plugin found for event \" + eventName);\n    };\n    EventManager = __decorate([di_1.Injectable(), __param(0, di_1.Inject(exports.EVENT_MANAGER_PLUGINS)), __metadata('design:paramtypes', [Array, ng_zone_1.NgZone])], EventManager);\n    return EventManager;\n  })();\n  exports.EventManager = EventManager;\n  var EventManagerPlugin = (function() {\n    function EventManagerPlugin() {}\n    EventManagerPlugin.prototype.supports = function(eventName) {\n      return false;\n    };\n    EventManagerPlugin.prototype.addEventListener = function(element, eventName, handler) {\n      throw \"not implemented\";\n    };\n    EventManagerPlugin.prototype.addGlobalEventListener = function(element, eventName, handler) {\n      throw \"not implemented\";\n    };\n    return EventManagerPlugin;\n  })();\n  exports.EventManagerPlugin = EventManagerPlugin;\n  var DomEventsPlugin = (function(_super) {\n    __extends(DomEventsPlugin, _super);\n    function DomEventsPlugin() {\n      _super.apply(this, arguments);\n    }\n    DomEventsPlugin.prototype.supports = function(eventName) {\n      return true;\n    };\n    DomEventsPlugin.prototype.addEventListener = function(element, eventName, handler) {\n      var zone = this.manager.getZone();\n      var outsideHandler = function(event) {\n        return zone.run(function() {\n          return handler(event);\n        });\n      };\n      this.manager.getZone().runOutsideAngular(function() {\n        dom_adapter_1.DOM.on(element, eventName, outsideHandler);\n      });\n    };\n    DomEventsPlugin.prototype.addGlobalEventListener = function(target, eventName, handler) {\n      var element = dom_adapter_1.DOM.getGlobalEventTarget(target);\n      var zone = this.manager.getZone();\n      var outsideHandler = function(event) {\n        return zone.run(function() {\n          return handler(event);\n        });\n      };\n      return this.manager.getZone().runOutsideAngular(function() {\n        return dom_adapter_1.DOM.onAndCancel(element, eventName, outsideHandler);\n      });\n    };\n    DomEventsPlugin = __decorate([di_1.Injectable(), __metadata('design:paramtypes', [])], DomEventsPlugin);\n    return DomEventsPlugin;\n  })(EventManagerPlugin);\n  exports.DomEventsPlugin = DomEventsPlugin;\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"angular2/src/core/render/view_factory\", [\"angular2/src/facade/lang\", \"angular2/src/core/render/view\", \"angular2/src/core/metadata\", \"angular2/src/facade/collection\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  var lang_1 = require(\"angular2/src/facade/lang\");\n  var view_1 = require(\"angular2/src/core/render/view\");\n  var metadata_1 = require(\"angular2/src/core/metadata\");\n  var collection_1 = require(\"angular2/src/facade/collection\");\n  function encapsulateStyles(componentTemplate) {\n    var processedStyles = componentTemplate.styles;\n    if (componentTemplate.encapsulation === metadata_1.ViewEncapsulation.Emulated) {\n      processedStyles = collection_1.ListWrapper.createFixedSize(componentTemplate.styles.length);\n      for (var i = 0; i < componentTemplate.styles.length; i++) {\n        processedStyles[i] = lang_1.StringWrapper.replaceAll(componentTemplate.styles[i], COMPONENT_REGEX, componentTemplate.shortId);\n      }\n    }\n    return processedStyles;\n  }\n  exports.encapsulateStyles = encapsulateStyles;\n  function createRenderView(componentTemplate, cmds, inplaceElement, nodeFactory) {\n    var view;\n    var eventDispatcher = function(boundElementIndex, eventName, event) {\n      return view.dispatchRenderEvent(boundElementIndex, eventName, event);\n    };\n    var context = new BuildContext(eventDispatcher, nodeFactory, inplaceElement);\n    context.build(componentTemplate, cmds);\n    var fragments = [];\n    for (var i = 0; i < context.fragments.length; i++) {\n      fragments.push(new view_1.DefaultRenderFragmentRef(context.fragments[i]));\n    }\n    view = new view_1.DefaultRenderView(fragments, context.boundTextNodes, context.boundElements, context.nativeShadowRoots, context.globalEventAdders, context.rootContentInsertionPoints);\n    return view;\n  }\n  exports.createRenderView = createRenderView;\n  var BuildContext = (function() {\n    function BuildContext(_eventDispatcher, factory, _inplaceElement) {\n      this._eventDispatcher = _eventDispatcher;\n      this.factory = factory;\n      this._inplaceElement = _inplaceElement;\n      this._builders = [];\n      this.globalEventAdders = [];\n      this.boundElements = [];\n      this.boundTextNodes = [];\n      this.nativeShadowRoots = [];\n      this.fragments = [];\n      this.rootContentInsertionPoints = [];\n      this.componentCount = 0;\n      this.isHost = lang_1.isPresent((_inplaceElement));\n    }\n    BuildContext.prototype.build = function(template, cmds) {\n      this.enqueueRootBuilder(template, cmds);\n      this._build(this._builders[0]);\n    };\n    BuildContext.prototype._build = function(builder) {\n      this._builders = [];\n      builder.build(this);\n      var enqueuedBuilders = this._builders;\n      for (var i = 0; i < enqueuedBuilders.length; i++) {\n        this._build(enqueuedBuilders[i]);\n      }\n    };\n    BuildContext.prototype.enqueueComponentBuilder = function(component) {\n      this.componentCount++;\n      this._builders.push(new RenderViewBuilder(component, null, component.template, component.template.commands));\n    };\n    BuildContext.prototype.enqueueFragmentBuilder = function(parentComponent, parentTemplate, commands) {\n      var rootNodes = [];\n      this.fragments.push(rootNodes);\n      this._builders.push(new RenderViewBuilder(parentComponent, rootNodes, parentTemplate, commands));\n    };\n    BuildContext.prototype.enqueueRootBuilder = function(template, cmds) {\n      var rootNodes = [];\n      this.fragments.push(rootNodes);\n      this._builders.push(new RenderViewBuilder(null, rootNodes, template, cmds));\n    };\n    BuildContext.prototype.consumeInplaceElement = function() {\n      var result = this._inplaceElement;\n      this._inplaceElement = null;\n      return result;\n    };\n    BuildContext.prototype.addEventListener = function(boundElementIndex, target, eventName) {\n      if (lang_1.isPresent(target)) {\n        var handler = createEventHandler(boundElementIndex, target + \":\" + eventName, this._eventDispatcher);\n        this.globalEventAdders.push(createGlobalEventAdder(target, eventName, handler, this.factory));\n      } else {\n        var handler = createEventHandler(boundElementIndex, eventName, this._eventDispatcher);\n        this.factory.on(this.boundElements[boundElementIndex], eventName, handler);\n      }\n    };\n    return BuildContext;\n  })();\n  function createEventHandler(boundElementIndex, eventName, eventDispatcher) {\n    return function($event) {\n      return eventDispatcher(boundElementIndex, eventName, $event);\n    };\n  }\n  function createGlobalEventAdder(target, eventName, eventHandler, nodeFactory) {\n    return function() {\n      return nodeFactory.globalOn(target, eventName, eventHandler);\n    };\n  }\n  var RenderViewBuilder = (function() {\n    function RenderViewBuilder(parentComponent, fragmentRootNodes, template, cmds) {\n      this.parentComponent = parentComponent;\n      this.fragmentRootNodes = fragmentRootNodes;\n      this.template = template;\n      this.cmds = cmds;\n      var rootNodesParent = lang_1.isPresent(fragmentRootNodes) ? null : parentComponent.shadowRoot;\n      this.parentStack = [rootNodesParent];\n    }\n    RenderViewBuilder.prototype.build = function(context) {\n      var cmds = this.cmds;\n      for (var i = 0; i < cmds.length; i++) {\n        cmds[i].visit(this, context);\n      }\n    };\n    Object.defineProperty(RenderViewBuilder.prototype, \"parent\", {\n      get: function() {\n        return this.parentStack[this.parentStack.length - 1];\n      },\n      enumerable: true,\n      configurable: true\n    });\n    RenderViewBuilder.prototype.visitText = function(cmd, context) {\n      var text = context.factory.createText(cmd.value);\n      this._addChild(text, cmd.ngContentIndex, context);\n      if (cmd.isBound) {\n        context.boundTextNodes.push(text);\n      }\n      return null;\n    };\n    RenderViewBuilder.prototype.visitNgContent = function(cmd, context) {\n      if (lang_1.isPresent(this.parentComponent)) {\n        if (this.parentComponent.isRoot) {\n          var insertionPoint = context.factory.createRootContentInsertionPoint();\n          if (this.parent instanceof Component) {\n            context.factory.appendChild(this.parent.shadowRoot, insertionPoint);\n          } else {\n            context.factory.appendChild(this.parent, insertionPoint);\n          }\n          context.rootContentInsertionPoints.push(insertionPoint);\n        } else {\n          var projectedNodes = this.parentComponent.project(cmd.index);\n          for (var i = 0; i < projectedNodes.length; i++) {\n            var node = projectedNodes[i];\n            this._addChild(node, cmd.ngContentIndex, context);\n          }\n        }\n      }\n      return null;\n    };\n    RenderViewBuilder.prototype.visitBeginElement = function(cmd, context) {\n      this.parentStack.push(this._beginElement(cmd, context, null));\n      return null;\n    };\n    RenderViewBuilder.prototype.visitEndElement = function(context) {\n      this._endElement();\n      return null;\n    };\n    RenderViewBuilder.prototype.visitBeginComponent = function(cmd, context) {\n      var templateId = cmd.templateId;\n      var tpl = context.factory.resolveComponentTemplate(templateId);\n      var el = this._beginElement(cmd, context, tpl);\n      var root = el;\n      if (tpl.encapsulation === metadata_1.ViewEncapsulation.Native) {\n        root = context.factory.createShadowRoot(el, templateId);\n        context.nativeShadowRoots.push(root);\n      }\n      var isRoot = context.componentCount === 0 && context.isHost;\n      var component = new Component(el, root, isRoot, tpl);\n      context.enqueueComponentBuilder(component);\n      this.parentStack.push(component);\n      return null;\n    };\n    RenderViewBuilder.prototype.visitEndComponent = function(context) {\n      this._endElement();\n      return null;\n    };\n    RenderViewBuilder.prototype.visitEmbeddedTemplate = function(cmd, context) {\n      var el = context.factory.createTemplateAnchor(cmd.attrNameAndValues);\n      this._addChild(el, cmd.ngContentIndex, context);\n      context.boundElements.push(el);\n      if (cmd.isMerged) {\n        context.enqueueFragmentBuilder(this.parentComponent, this.template, cmd.children);\n      }\n      return null;\n    };\n    RenderViewBuilder.prototype._beginElement = function(cmd, context, componentTemplate) {\n      var el = context.consumeInplaceElement();\n      var attrNameAndValues = cmd.attrNameAndValues;\n      var templateEmulatedEncapsulation = this.template.encapsulation === metadata_1.ViewEncapsulation.Emulated;\n      var componentEmulatedEncapsulation = lang_1.isPresent(componentTemplate) && componentTemplate.encapsulation === metadata_1.ViewEncapsulation.Emulated;\n      var newAttrLength = attrNameAndValues.length + (templateEmulatedEncapsulation ? 2 : 0) + (componentEmulatedEncapsulation ? 2 : 0);\n      if (newAttrLength > attrNameAndValues.length) {\n        var newAttrNameAndValues = collection_1.ListWrapper.createFixedSize(newAttrLength);\n        var attrIndex;\n        for (attrIndex = 0; attrIndex < attrNameAndValues.length; attrIndex++) {\n          newAttrNameAndValues[attrIndex] = attrNameAndValues[attrIndex];\n        }\n        if (templateEmulatedEncapsulation) {\n          newAttrNameAndValues[attrIndex++] = _shimContentAttribute(this.template.shortId);\n          newAttrNameAndValues[attrIndex++] = '';\n        }\n        if (componentEmulatedEncapsulation) {\n          newAttrNameAndValues[attrIndex++] = _shimHostAttribute(componentTemplate.shortId);\n          newAttrNameAndValues[attrIndex++] = '';\n        }\n        attrNameAndValues = newAttrNameAndValues;\n      }\n      if (lang_1.isPresent(el)) {\n        context.factory.mergeElement(el, attrNameAndValues);\n        this.fragmentRootNodes.push(el);\n      } else {\n        el = context.factory.createElement(cmd.name, attrNameAndValues);\n        this._addChild(el, cmd.ngContentIndex, context);\n      }\n      if (cmd.isBound) {\n        var boundElementIndex = context.boundElements.length;\n        context.boundElements.push(el);\n        for (var i = 0; i < cmd.eventTargetAndNames.length; i += 2) {\n          var target = cmd.eventTargetAndNames[i];\n          var eventName = cmd.eventTargetAndNames[i + 1];\n          context.addEventListener(boundElementIndex, target, eventName);\n        }\n      }\n      return el;\n    };\n    RenderViewBuilder.prototype._endElement = function() {\n      this.parentStack.pop();\n    };\n    RenderViewBuilder.prototype._addChild = function(node, ngContentIndex, context) {\n      var parent = this.parent;\n      if (lang_1.isPresent(parent)) {\n        if (parent instanceof Component) {\n          parent.addContentNode(ngContentIndex, node, context);\n        } else {\n          context.factory.appendChild(parent, node);\n        }\n      } else {\n        this.fragmentRootNodes.push(node);\n      }\n    };\n    return RenderViewBuilder;\n  })();\n  var Component = (function() {\n    function Component(hostElement, shadowRoot, isRoot, template) {\n      this.hostElement = hostElement;\n      this.shadowRoot = shadowRoot;\n      this.isRoot = isRoot;\n      this.template = template;\n      this.contentNodesByNgContentIndex = [];\n    }\n    Component.prototype.addContentNode = function(ngContentIndex, node, context) {\n      if (lang_1.isBlank(ngContentIndex)) {\n        if (this.template.encapsulation === metadata_1.ViewEncapsulation.Native) {\n          context.factory.appendChild(this.hostElement, node);\n        }\n      } else {\n        while (this.contentNodesByNgContentIndex.length <= ngContentIndex) {\n          this.contentNodesByNgContentIndex.push([]);\n        }\n        this.contentNodesByNgContentIndex[ngContentIndex].push(node);\n      }\n    };\n    Component.prototype.project = function(ngContentIndex) {\n      return ngContentIndex < this.contentNodesByNgContentIndex.length ? this.contentNodesByNgContentIndex[ngContentIndex] : [];\n    };\n    return Component;\n  })();\n  var COMPONENT_REGEX = /%COMP%/g;\n  exports.COMPONENT_VARIABLE = '%COMP%';\n  exports.HOST_ATTR = \"_nghost-\" + exports.COMPONENT_VARIABLE;\n  exports.CONTENT_ATTR = \"_ngcontent-\" + exports.COMPONENT_VARIABLE;\n  function _shimContentAttribute(componentShortId) {\n    return lang_1.StringWrapper.replaceAll(exports.CONTENT_ATTR, COMPONENT_REGEX, componentShortId);\n  }\n  function _shimHostAttribute(componentShortId) {\n    return lang_1.StringWrapper.replaceAll(exports.HOST_ATTR, COMPONENT_REGEX, componentShortId);\n  }\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"angular2/render\", [\"angular2/src/core/render\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  function __export(m) {\n    for (var p in m)\n      if (!exports.hasOwnProperty(p))\n        exports[p] = m[p];\n  }\n  __export(require(\"angular2/src/core/render\"));\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"angular2/src/common/forms/directives/shared\", [\"angular2/src/facade/collection\", \"angular2/src/facade/lang\", \"angular2/src/facade/exceptions\", \"angular2/src/common/forms/validators\", \"angular2/src/common/forms/directives/default_value_accessor\", \"angular2/src/common/forms/directives/number_value_accessor\", \"angular2/src/common/forms/directives/checkbox_value_accessor\", \"angular2/src/common/forms/directives/select_control_value_accessor\", \"angular2/src/common/forms/directives/normalize_validator\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  var collection_1 = require(\"angular2/src/facade/collection\");\n  var lang_1 = require(\"angular2/src/facade/lang\");\n  var exceptions_1 = require(\"angular2/src/facade/exceptions\");\n  var validators_1 = require(\"angular2/src/common/forms/validators\");\n  var default_value_accessor_1 = require(\"angular2/src/common/forms/directives/default_value_accessor\");\n  var number_value_accessor_1 = require(\"angular2/src/common/forms/directives/number_value_accessor\");\n  var checkbox_value_accessor_1 = require(\"angular2/src/common/forms/directives/checkbox_value_accessor\");\n  var select_control_value_accessor_1 = require(\"angular2/src/common/forms/directives/select_control_value_accessor\");\n  var normalize_validator_1 = require(\"angular2/src/common/forms/directives/normalize_validator\");\n  function controlPath(name, parent) {\n    var p = collection_1.ListWrapper.clone(parent.path);\n    p.push(name);\n    return p;\n  }\n  exports.controlPath = controlPath;\n  function setUpControl(control, dir) {\n    if (lang_1.isBlank(control))\n      _throwError(dir, \"Cannot find control\");\n    if (lang_1.isBlank(dir.valueAccessor))\n      _throwError(dir, \"No value accessor for\");\n    control.validator = validators_1.Validators.compose([control.validator, dir.validator]);\n    control.asyncValidator = validators_1.Validators.composeAsync([control.asyncValidator, dir.asyncValidator]);\n    dir.valueAccessor.writeValue(control.value);\n    dir.valueAccessor.registerOnChange(function(newValue) {\n      dir.viewToModelUpdate(newValue);\n      control.updateValue(newValue, {emitModelToViewChange: false});\n      control.markAsDirty();\n    });\n    control.registerOnChange(function(newValue) {\n      return dir.valueAccessor.writeValue(newValue);\n    });\n    dir.valueAccessor.registerOnTouched(function() {\n      return control.markAsTouched();\n    });\n  }\n  exports.setUpControl = setUpControl;\n  function setUpControlGroup(control, dir) {\n    if (lang_1.isBlank(control))\n      _throwError(dir, \"Cannot find control\");\n    control.validator = validators_1.Validators.compose([control.validator, dir.validator]);\n    control.asyncValidator = validators_1.Validators.composeAsync([control.asyncValidator, dir.asyncValidator]);\n  }\n  exports.setUpControlGroup = setUpControlGroup;\n  function _throwError(dir, message) {\n    var path = dir.path.join(\" -> \");\n    throw new exceptions_1.BaseException(message + \" '\" + path + \"'\");\n  }\n  function setProperty(renderer, elementRef, propName, propValue) {\n    renderer.setElementProperty(elementRef, propName, propValue);\n  }\n  exports.setProperty = setProperty;\n  function composeValidators(validators) {\n    return lang_1.isPresent(validators) ? validators_1.Validators.compose(validators.map(normalize_validator_1.normalizeValidator)) : null;\n  }\n  exports.composeValidators = composeValidators;\n  function composeAsyncValidators(validators) {\n    return lang_1.isPresent(validators) ? validators_1.Validators.composeAsync(validators.map(normalize_validator_1.normalizeValidator)) : null;\n  }\n  exports.composeAsyncValidators = composeAsyncValidators;\n  function isPropertyUpdated(changes, viewModel) {\n    if (!collection_1.StringMapWrapper.contains(changes, \"model\"))\n      return false;\n    var change = changes[\"model\"];\n    if (change.isFirstChange())\n      return true;\n    return !lang_1.looseIdentical(viewModel, change.currentValue);\n  }\n  exports.isPropertyUpdated = isPropertyUpdated;\n  function selectValueAccessor(dir, valueAccessors) {\n    if (lang_1.isBlank(valueAccessors))\n      return null;\n    var defaultAccessor;\n    var builtinAccessor;\n    var customAccessor;\n    valueAccessors.forEach(function(v) {\n      if (v instanceof default_value_accessor_1.DefaultValueAccessor) {\n        defaultAccessor = v;\n      } else if (v instanceof checkbox_value_accessor_1.CheckboxControlValueAccessor || v instanceof number_value_accessor_1.NumberValueAccessor || v instanceof select_control_value_accessor_1.SelectControlValueAccessor) {\n        if (lang_1.isPresent(builtinAccessor))\n          _throwError(dir, \"More than one built-in value accessor matches\");\n        builtinAccessor = v;\n      } else {\n        if (lang_1.isPresent(customAccessor))\n          _throwError(dir, \"More than one custom value accessor matches\");\n        customAccessor = v;\n      }\n    });\n    if (lang_1.isPresent(customAccessor))\n      return customAccessor;\n    if (lang_1.isPresent(builtinAccessor))\n      return builtinAccessor;\n    if (lang_1.isPresent(defaultAccessor))\n      return defaultAccessor;\n    _throwError(dir, \"No valid value accessor for\");\n    return null;\n  }\n  exports.selectValueAccessor = selectValueAccessor;\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"angular2/src/common/forms/directives\", [\"angular2/src/facade/lang\", \"angular2/src/common/forms/directives/ng_control_name\", \"angular2/src/common/forms/directives/ng_form_control\", \"angular2/src/common/forms/directives/ng_model\", \"angular2/src/common/forms/directives/ng_control_group\", \"angular2/src/common/forms/directives/ng_form_model\", \"angular2/src/common/forms/directives/ng_form\", \"angular2/src/common/forms/directives/default_value_accessor\", \"angular2/src/common/forms/directives/checkbox_value_accessor\", \"angular2/src/common/forms/directives/number_value_accessor\", \"angular2/src/common/forms/directives/ng_control_status\", \"angular2/src/common/forms/directives/select_control_value_accessor\", \"angular2/src/common/forms/directives/validators\", \"angular2/src/common/forms/directives/ng_control_name\", \"angular2/src/common/forms/directives/ng_form_control\", \"angular2/src/common/forms/directives/ng_model\", \"angular2/src/common/forms/directives/ng_control_group\", \"angular2/src/common/forms/directives/ng_form_model\", \"angular2/src/common/forms/directives/ng_form\", \"angular2/src/common/forms/directives/default_value_accessor\", \"angular2/src/common/forms/directives/checkbox_value_accessor\", \"angular2/src/common/forms/directives/number_value_accessor\", \"angular2/src/common/forms/directives/ng_control_status\", \"angular2/src/common/forms/directives/select_control_value_accessor\", \"angular2/src/common/forms/directives/validators\", \"angular2/src/common/forms/directives/ng_control\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  var lang_1 = require(\"angular2/src/facade/lang\");\n  var ng_control_name_1 = require(\"angular2/src/common/forms/directives/ng_control_name\");\n  var ng_form_control_1 = require(\"angular2/src/common/forms/directives/ng_form_control\");\n  var ng_model_1 = require(\"angular2/src/common/forms/directives/ng_model\");\n  var ng_control_group_1 = require(\"angular2/src/common/forms/directives/ng_control_group\");\n  var ng_form_model_1 = require(\"angular2/src/common/forms/directives/ng_form_model\");\n  var ng_form_1 = require(\"angular2/src/common/forms/directives/ng_form\");\n  var default_value_accessor_1 = require(\"angular2/src/common/forms/directives/default_value_accessor\");\n  var checkbox_value_accessor_1 = require(\"angular2/src/common/forms/directives/checkbox_value_accessor\");\n  var number_value_accessor_1 = require(\"angular2/src/common/forms/directives/number_value_accessor\");\n  var ng_control_status_1 = require(\"angular2/src/common/forms/directives/ng_control_status\");\n  var select_control_value_accessor_1 = require(\"angular2/src/common/forms/directives/select_control_value_accessor\");\n  var validators_1 = require(\"angular2/src/common/forms/directives/validators\");\n  var ng_control_name_2 = require(\"angular2/src/common/forms/directives/ng_control_name\");\n  exports.NgControlName = ng_control_name_2.NgControlName;\n  var ng_form_control_2 = require(\"angular2/src/common/forms/directives/ng_form_control\");\n  exports.NgFormControl = ng_form_control_2.NgFormControl;\n  var ng_model_2 = require(\"angular2/src/common/forms/directives/ng_model\");\n  exports.NgModel = ng_model_2.NgModel;\n  var ng_control_group_2 = require(\"angular2/src/common/forms/directives/ng_control_group\");\n  exports.NgControlGroup = ng_control_group_2.NgControlGroup;\n  var ng_form_model_2 = require(\"angular2/src/common/forms/directives/ng_form_model\");\n  exports.NgFormModel = ng_form_model_2.NgFormModel;\n  var ng_form_2 = require(\"angular2/src/common/forms/directives/ng_form\");\n  exports.NgForm = ng_form_2.NgForm;\n  var default_value_accessor_2 = require(\"angular2/src/common/forms/directives/default_value_accessor\");\n  exports.DefaultValueAccessor = default_value_accessor_2.DefaultValueAccessor;\n  var checkbox_value_accessor_2 = require(\"angular2/src/common/forms/directives/checkbox_value_accessor\");\n  exports.CheckboxControlValueAccessor = checkbox_value_accessor_2.CheckboxControlValueAccessor;\n  var number_value_accessor_2 = require(\"angular2/src/common/forms/directives/number_value_accessor\");\n  exports.NumberValueAccessor = number_value_accessor_2.NumberValueAccessor;\n  var ng_control_status_2 = require(\"angular2/src/common/forms/directives/ng_control_status\");\n  exports.NgControlStatus = ng_control_status_2.NgControlStatus;\n  var select_control_value_accessor_2 = require(\"angular2/src/common/forms/directives/select_control_value_accessor\");\n  exports.SelectControlValueAccessor = select_control_value_accessor_2.SelectControlValueAccessor;\n  exports.NgSelectOption = select_control_value_accessor_2.NgSelectOption;\n  var validators_2 = require(\"angular2/src/common/forms/directives/validators\");\n  exports.RequiredValidator = validators_2.RequiredValidator;\n  exports.MinLengthValidator = validators_2.MinLengthValidator;\n  exports.MaxLengthValidator = validators_2.MaxLengthValidator;\n  var ng_control_1 = require(\"angular2/src/common/forms/directives/ng_control\");\n  exports.NgControl = ng_control_1.NgControl;\n  exports.FORM_DIRECTIVES = lang_1.CONST_EXPR([ng_control_name_1.NgControlName, ng_control_group_1.NgControlGroup, ng_form_control_1.NgFormControl, ng_model_1.NgModel, ng_form_model_1.NgFormModel, ng_form_1.NgForm, select_control_value_accessor_1.NgSelectOption, default_value_accessor_1.DefaultValueAccessor, number_value_accessor_1.NumberValueAccessor, checkbox_value_accessor_1.CheckboxControlValueAccessor, select_control_value_accessor_1.SelectControlValueAccessor, ng_control_status_1.NgControlStatus, validators_1.RequiredValidator, validators_1.MinLengthValidator, validators_1.MaxLengthValidator]);\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"angular2/src/compiler/directive_metadata\", [\"angular2/src/facade/lang\", \"angular2/src/facade/collection\", \"angular2/src/core/change_detection/change_detection\", \"angular2/src/core/metadata/view\", \"angular2/src/compiler/selector\", \"angular2/src/compiler/util\", \"angular2/src/core/linker/interfaces\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  var lang_1 = require(\"angular2/src/facade/lang\");\n  var collection_1 = require(\"angular2/src/facade/collection\");\n  var change_detection_1 = require(\"angular2/src/core/change_detection/change_detection\");\n  var view_1 = require(\"angular2/src/core/metadata/view\");\n  var selector_1 = require(\"angular2/src/compiler/selector\");\n  var util_1 = require(\"angular2/src/compiler/util\");\n  var interfaces_1 = require(\"angular2/src/core/linker/interfaces\");\n  var HOST_REG_EXP = /^(?:(?:\\[([^\\]]+)\\])|(?:\\(([^\\)]+)\\)))$/g;\n  var CompileTypeMetadata = (function() {\n    function CompileTypeMetadata(_a) {\n      var _b = _a === void 0 ? {} : _a,\n          runtime = _b.runtime,\n          name = _b.name,\n          moduleUrl = _b.moduleUrl,\n          isHost = _b.isHost;\n      this.runtime = runtime;\n      this.name = name;\n      this.moduleUrl = moduleUrl;\n      this.isHost = lang_1.normalizeBool(isHost);\n    }\n    CompileTypeMetadata.fromJson = function(data) {\n      return new CompileTypeMetadata({\n        name: data['name'],\n        moduleUrl: data['moduleUrl'],\n        isHost: data['isHost']\n      });\n    };\n    CompileTypeMetadata.prototype.toJson = function() {\n      return {\n        'name': this.name,\n        'moduleUrl': this.moduleUrl,\n        'isHost': this.isHost\n      };\n    };\n    return CompileTypeMetadata;\n  })();\n  exports.CompileTypeMetadata = CompileTypeMetadata;\n  var CompileTemplateMetadata = (function() {\n    function CompileTemplateMetadata(_a) {\n      var _b = _a === void 0 ? {} : _a,\n          encapsulation = _b.encapsulation,\n          template = _b.template,\n          templateUrl = _b.templateUrl,\n          styles = _b.styles,\n          styleUrls = _b.styleUrls,\n          ngContentSelectors = _b.ngContentSelectors;\n      this.encapsulation = lang_1.isPresent(encapsulation) ? encapsulation : view_1.ViewEncapsulation.Emulated;\n      this.template = template;\n      this.templateUrl = templateUrl;\n      this.styles = lang_1.isPresent(styles) ? styles : [];\n      this.styleUrls = lang_1.isPresent(styleUrls) ? styleUrls : [];\n      this.ngContentSelectors = lang_1.isPresent(ngContentSelectors) ? ngContentSelectors : [];\n    }\n    CompileTemplateMetadata.fromJson = function(data) {\n      return new CompileTemplateMetadata({\n        encapsulation: lang_1.isPresent(data['encapsulation']) ? view_1.VIEW_ENCAPSULATION_VALUES[data['encapsulation']] : data['encapsulation'],\n        template: data['template'],\n        templateUrl: data['templateUrl'],\n        styles: data['styles'],\n        styleUrls: data['styleUrls'],\n        ngContentSelectors: data['ngContentSelectors']\n      });\n    };\n    CompileTemplateMetadata.prototype.toJson = function() {\n      return {\n        'encapsulation': lang_1.isPresent(this.encapsulation) ? lang_1.serializeEnum(this.encapsulation) : this.encapsulation,\n        'template': this.template,\n        'templateUrl': this.templateUrl,\n        'styles': this.styles,\n        'styleUrls': this.styleUrls,\n        'ngContentSelectors': this.ngContentSelectors\n      };\n    };\n    return CompileTemplateMetadata;\n  })();\n  exports.CompileTemplateMetadata = CompileTemplateMetadata;\n  var CompileDirectiveMetadata = (function() {\n    function CompileDirectiveMetadata(_a) {\n      var _b = _a === void 0 ? {} : _a,\n          type = _b.type,\n          isComponent = _b.isComponent,\n          dynamicLoadable = _b.dynamicLoadable,\n          selector = _b.selector,\n          exportAs = _b.exportAs,\n          changeDetection = _b.changeDetection,\n          inputs = _b.inputs,\n          outputs = _b.outputs,\n          hostListeners = _b.hostListeners,\n          hostProperties = _b.hostProperties,\n          hostAttributes = _b.hostAttributes,\n          lifecycleHooks = _b.lifecycleHooks,\n          template = _b.template;\n      this.type = type;\n      this.isComponent = isComponent;\n      this.dynamicLoadable = dynamicLoadable;\n      this.selector = selector;\n      this.exportAs = exportAs;\n      this.changeDetection = changeDetection;\n      this.inputs = inputs;\n      this.outputs = outputs;\n      this.hostListeners = hostListeners;\n      this.hostProperties = hostProperties;\n      this.hostAttributes = hostAttributes;\n      this.lifecycleHooks = lifecycleHooks;\n      this.template = template;\n    }\n    CompileDirectiveMetadata.create = function(_a) {\n      var _b = _a === void 0 ? {} : _a,\n          type = _b.type,\n          isComponent = _b.isComponent,\n          dynamicLoadable = _b.dynamicLoadable,\n          selector = _b.selector,\n          exportAs = _b.exportAs,\n          changeDetection = _b.changeDetection,\n          inputs = _b.inputs,\n          outputs = _b.outputs,\n          host = _b.host,\n          lifecycleHooks = _b.lifecycleHooks,\n          template = _b.template;\n      var hostListeners = {};\n      var hostProperties = {};\n      var hostAttributes = {};\n      if (lang_1.isPresent(host)) {\n        collection_1.StringMapWrapper.forEach(host, function(value, key) {\n          var matches = lang_1.RegExpWrapper.firstMatch(HOST_REG_EXP, key);\n          if (lang_1.isBlank(matches)) {\n            hostAttributes[key] = value;\n          } else if (lang_1.isPresent(matches[1])) {\n            hostProperties[matches[1]] = value;\n          } else if (lang_1.isPresent(matches[2])) {\n            hostListeners[matches[2]] = value;\n          }\n        });\n      }\n      var inputsMap = {};\n      if (lang_1.isPresent(inputs)) {\n        inputs.forEach(function(bindConfig) {\n          var parts = util_1.splitAtColon(bindConfig, [bindConfig, bindConfig]);\n          inputsMap[parts[0]] = parts[1];\n        });\n      }\n      var outputsMap = {};\n      if (lang_1.isPresent(outputs)) {\n        outputs.forEach(function(bindConfig) {\n          var parts = util_1.splitAtColon(bindConfig, [bindConfig, bindConfig]);\n          outputsMap[parts[0]] = parts[1];\n        });\n      }\n      return new CompileDirectiveMetadata({\n        type: type,\n        isComponent: lang_1.normalizeBool(isComponent),\n        dynamicLoadable: lang_1.normalizeBool(dynamicLoadable),\n        selector: selector,\n        exportAs: exportAs,\n        changeDetection: changeDetection,\n        inputs: inputsMap,\n        outputs: outputsMap,\n        hostListeners: hostListeners,\n        hostProperties: hostProperties,\n        hostAttributes: hostAttributes,\n        lifecycleHooks: lang_1.isPresent(lifecycleHooks) ? lifecycleHooks : [],\n        template: template\n      });\n    };\n    CompileDirectiveMetadata.fromJson = function(data) {\n      return new CompileDirectiveMetadata({\n        isComponent: data['isComponent'],\n        dynamicLoadable: data['dynamicLoadable'],\n        selector: data['selector'],\n        exportAs: data['exportAs'],\n        type: lang_1.isPresent(data['type']) ? CompileTypeMetadata.fromJson(data['type']) : data['type'],\n        changeDetection: lang_1.isPresent(data['changeDetection']) ? change_detection_1.CHANGE_DETECTION_STRATEGY_VALUES[data['changeDetection']] : data['changeDetection'],\n        inputs: data['inputs'],\n        outputs: data['outputs'],\n        hostListeners: data['hostListeners'],\n        hostProperties: data['hostProperties'],\n        hostAttributes: data['hostAttributes'],\n        lifecycleHooks: data['lifecycleHooks'].map(function(hookValue) {\n          return interfaces_1.LIFECYCLE_HOOKS_VALUES[hookValue];\n        }),\n        template: lang_1.isPresent(data['template']) ? CompileTemplateMetadata.fromJson(data['template']) : data['template']\n      });\n    };\n    CompileDirectiveMetadata.prototype.toJson = function() {\n      return {\n        'isComponent': this.isComponent,\n        'dynamicLoadable': this.dynamicLoadable,\n        'selector': this.selector,\n        'exportAs': this.exportAs,\n        'type': lang_1.isPresent(this.type) ? this.type.toJson() : this.type,\n        'changeDetection': lang_1.isPresent(this.changeDetection) ? lang_1.serializeEnum(this.changeDetection) : this.changeDetection,\n        'inputs': this.inputs,\n        'outputs': this.outputs,\n        'hostListeners': this.hostListeners,\n        'hostProperties': this.hostProperties,\n        'hostAttributes': this.hostAttributes,\n        'lifecycleHooks': this.lifecycleHooks.map(function(hook) {\n          return lang_1.serializeEnum(hook);\n        }),\n        'template': lang_1.isPresent(this.template) ? this.template.toJson() : this.template\n      };\n    };\n    return CompileDirectiveMetadata;\n  })();\n  exports.CompileDirectiveMetadata = CompileDirectiveMetadata;\n  function createHostComponentMeta(componentType, componentSelector) {\n    var template = selector_1.CssSelector.parse(componentSelector)[0].getMatchingElementTemplate();\n    return CompileDirectiveMetadata.create({\n      type: new CompileTypeMetadata({\n        runtime: Object,\n        name: \"Host\" + componentType.name,\n        moduleUrl: componentType.moduleUrl,\n        isHost: true\n      }),\n      template: new CompileTemplateMetadata({\n        template: template,\n        templateUrl: '',\n        styles: [],\n        styleUrls: [],\n        ngContentSelectors: []\n      }),\n      changeDetection: change_detection_1.ChangeDetectionStrategy.Default,\n      inputs: [],\n      outputs: [],\n      host: {},\n      lifecycleHooks: [],\n      isComponent: true,\n      dynamicLoadable: false,\n      selector: '*'\n    });\n  }\n  exports.createHostComponentMeta = createHostComponentMeta;\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"angular2/src/compiler/change_definition_factory\", [\"angular2/src/facade/collection\", \"angular2/src/facade/lang\", \"angular2/src/core/reflection/reflection\", \"angular2/src/core/change_detection/change_detection\", \"angular2/src/compiler/template_ast\", \"angular2/src/core/linker/interfaces\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  var collection_1 = require(\"angular2/src/facade/collection\");\n  var lang_1 = require(\"angular2/src/facade/lang\");\n  var reflection_1 = require(\"angular2/src/core/reflection/reflection\");\n  var change_detection_1 = require(\"angular2/src/core/change_detection/change_detection\");\n  var template_ast_1 = require(\"angular2/src/compiler/template_ast\");\n  var interfaces_1 = require(\"angular2/src/core/linker/interfaces\");\n  function createChangeDetectorDefinitions(componentType, componentStrategy, genConfig, parsedTemplate) {\n    var pvVisitors = [];\n    var visitor = new ProtoViewVisitor(null, pvVisitors, componentStrategy);\n    template_ast_1.templateVisitAll(visitor, parsedTemplate);\n    return createChangeDefinitions(pvVisitors, componentType, genConfig);\n  }\n  exports.createChangeDetectorDefinitions = createChangeDetectorDefinitions;\n  var ProtoViewVisitor = (function() {\n    function ProtoViewVisitor(parent, allVisitors, strategy) {\n      this.parent = parent;\n      this.allVisitors = allVisitors;\n      this.strategy = strategy;\n      this.boundTextCount = 0;\n      this.boundElementCount = 0;\n      this.variableNames = [];\n      this.bindingRecords = [];\n      this.eventRecords = [];\n      this.directiveRecords = [];\n      this.viewIndex = allVisitors.length;\n      allVisitors.push(this);\n    }\n    ProtoViewVisitor.prototype.visitEmbeddedTemplate = function(ast, context) {\n      this.boundElementCount++;\n      template_ast_1.templateVisitAll(this, ast.outputs);\n      for (var i = 0; i < ast.directives.length; i++) {\n        ast.directives[i].visit(this, i);\n      }\n      var childVisitor = new ProtoViewVisitor(this, this.allVisitors, change_detection_1.ChangeDetectionStrategy.Default);\n      template_ast_1.templateVisitAll(childVisitor, ast.vars);\n      template_ast_1.templateVisitAll(childVisitor, ast.children);\n      return null;\n    };\n    ProtoViewVisitor.prototype.visitElement = function(ast, context) {\n      if (ast.isBound()) {\n        this.boundElementCount++;\n      }\n      template_ast_1.templateVisitAll(this, ast.inputs, null);\n      template_ast_1.templateVisitAll(this, ast.outputs);\n      template_ast_1.templateVisitAll(this, ast.exportAsVars);\n      for (var i = 0; i < ast.directives.length; i++) {\n        ast.directives[i].visit(this, i);\n      }\n      template_ast_1.templateVisitAll(this, ast.children);\n      return null;\n    };\n    ProtoViewVisitor.prototype.visitNgContent = function(ast, context) {\n      return null;\n    };\n    ProtoViewVisitor.prototype.visitVariable = function(ast, context) {\n      this.variableNames.push(ast.name);\n      return null;\n    };\n    ProtoViewVisitor.prototype.visitEvent = function(ast, directiveRecord) {\n      var bindingRecord = lang_1.isPresent(directiveRecord) ? change_detection_1.BindingRecord.createForHostEvent(ast.handler, ast.fullName, directiveRecord) : change_detection_1.BindingRecord.createForEvent(ast.handler, ast.fullName, this.boundElementCount - 1);\n      this.eventRecords.push(bindingRecord);\n      return null;\n    };\n    ProtoViewVisitor.prototype.visitElementProperty = function(ast, directiveRecord) {\n      var boundElementIndex = this.boundElementCount - 1;\n      var dirIndex = lang_1.isPresent(directiveRecord) ? directiveRecord.directiveIndex : null;\n      var bindingRecord;\n      if (ast.type === template_ast_1.PropertyBindingType.Property) {\n        bindingRecord = lang_1.isPresent(dirIndex) ? change_detection_1.BindingRecord.createForHostProperty(dirIndex, ast.value, ast.name) : change_detection_1.BindingRecord.createForElementProperty(ast.value, boundElementIndex, ast.name);\n      } else if (ast.type === template_ast_1.PropertyBindingType.Attribute) {\n        bindingRecord = lang_1.isPresent(dirIndex) ? change_detection_1.BindingRecord.createForHostAttribute(dirIndex, ast.value, ast.name) : change_detection_1.BindingRecord.createForElementAttribute(ast.value, boundElementIndex, ast.name);\n      } else if (ast.type === template_ast_1.PropertyBindingType.Class) {\n        bindingRecord = lang_1.isPresent(dirIndex) ? change_detection_1.BindingRecord.createForHostClass(dirIndex, ast.value, ast.name) : change_detection_1.BindingRecord.createForElementClass(ast.value, boundElementIndex, ast.name);\n      } else if (ast.type === template_ast_1.PropertyBindingType.Style) {\n        bindingRecord = lang_1.isPresent(dirIndex) ? change_detection_1.BindingRecord.createForHostStyle(dirIndex, ast.value, ast.name, ast.unit) : change_detection_1.BindingRecord.createForElementStyle(ast.value, boundElementIndex, ast.name, ast.unit);\n      }\n      this.bindingRecords.push(bindingRecord);\n      return null;\n    };\n    ProtoViewVisitor.prototype.visitAttr = function(ast, context) {\n      return null;\n    };\n    ProtoViewVisitor.prototype.visitBoundText = function(ast, context) {\n      var boundTextIndex = this.boundTextCount++;\n      this.bindingRecords.push(change_detection_1.BindingRecord.createForTextNode(ast.value, boundTextIndex));\n      return null;\n    };\n    ProtoViewVisitor.prototype.visitText = function(ast, context) {\n      return null;\n    };\n    ProtoViewVisitor.prototype.visitDirective = function(ast, directiveIndexAsNumber) {\n      var directiveIndex = new change_detection_1.DirectiveIndex(this.boundElementCount - 1, directiveIndexAsNumber);\n      var directiveMetadata = ast.directive;\n      var directiveRecord = new change_detection_1.DirectiveRecord({\n        directiveIndex: directiveIndex,\n        callAfterContentInit: directiveMetadata.lifecycleHooks.indexOf(interfaces_1.LifecycleHooks.AfterContentInit) !== -1,\n        callAfterContentChecked: directiveMetadata.lifecycleHooks.indexOf(interfaces_1.LifecycleHooks.AfterContentChecked) !== -1,\n        callAfterViewInit: directiveMetadata.lifecycleHooks.indexOf(interfaces_1.LifecycleHooks.AfterViewInit) !== -1,\n        callAfterViewChecked: directiveMetadata.lifecycleHooks.indexOf(interfaces_1.LifecycleHooks.AfterViewChecked) !== -1,\n        callOnChanges: directiveMetadata.lifecycleHooks.indexOf(interfaces_1.LifecycleHooks.OnChanges) !== -1,\n        callDoCheck: directiveMetadata.lifecycleHooks.indexOf(interfaces_1.LifecycleHooks.DoCheck) !== -1,\n        callOnInit: directiveMetadata.lifecycleHooks.indexOf(interfaces_1.LifecycleHooks.OnInit) !== -1,\n        changeDetection: directiveMetadata.changeDetection\n      });\n      this.directiveRecords.push(directiveRecord);\n      template_ast_1.templateVisitAll(this, ast.inputs, directiveRecord);\n      var bindingRecords = this.bindingRecords;\n      if (directiveRecord.callOnChanges) {\n        bindingRecords.push(change_detection_1.BindingRecord.createDirectiveOnChanges(directiveRecord));\n      }\n      if (directiveRecord.callOnInit) {\n        bindingRecords.push(change_detection_1.BindingRecord.createDirectiveOnInit(directiveRecord));\n      }\n      if (directiveRecord.callDoCheck) {\n        bindingRecords.push(change_detection_1.BindingRecord.createDirectiveDoCheck(directiveRecord));\n      }\n      template_ast_1.templateVisitAll(this, ast.hostProperties, directiveRecord);\n      template_ast_1.templateVisitAll(this, ast.hostEvents, directiveRecord);\n      template_ast_1.templateVisitAll(this, ast.exportAsVars);\n      return null;\n    };\n    ProtoViewVisitor.prototype.visitDirectiveProperty = function(ast, directiveRecord) {\n      var setter = reflection_1.reflector.setter(ast.directiveName);\n      this.bindingRecords.push(change_detection_1.BindingRecord.createForDirective(ast.value, ast.directiveName, setter, directiveRecord));\n      return null;\n    };\n    return ProtoViewVisitor;\n  })();\n  function createChangeDefinitions(pvVisitors, componentType, genConfig) {\n    var pvVariableNames = _collectNestedProtoViewsVariableNames(pvVisitors);\n    return pvVisitors.map(function(pvVisitor) {\n      var id = componentType.name + \"_\" + pvVisitor.viewIndex;\n      return new change_detection_1.ChangeDetectorDefinition(id, pvVisitor.strategy, pvVariableNames[pvVisitor.viewIndex], pvVisitor.bindingRecords, pvVisitor.eventRecords, pvVisitor.directiveRecords, genConfig);\n    });\n  }\n  function _collectNestedProtoViewsVariableNames(pvVisitors) {\n    var nestedPvVariableNames = collection_1.ListWrapper.createFixedSize(pvVisitors.length);\n    pvVisitors.forEach(function(pv) {\n      var parentVariableNames = lang_1.isPresent(pv.parent) ? nestedPvVariableNames[pv.parent.viewIndex] : [];\n      nestedPvVariableNames[pv.viewIndex] = parentVariableNames.concat(pv.variableNames);\n    });\n    return nestedPvVariableNames;\n  }\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"angular2/src/compiler/style_compiler\", [\"angular2/src/compiler/source_module\", \"angular2/src/core/metadata/view\", \"angular2/src/compiler/xhr\", \"angular2/src/facade/lang\", \"angular2/src/facade/async\", \"angular2/src/compiler/shadow_css\", \"angular2/src/compiler/url_resolver\", \"angular2/src/compiler/style_url_resolver\", \"angular2/src/compiler/util\", \"angular2/src/core/di\", \"angular2/src/core/render/view_factory\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  var __decorate = (this && this.__decorate) || function(decorators, target, key, desc) {\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\")\n      return Reflect.decorate(decorators, target, key, desc);\n    switch (arguments.length) {\n      case 2:\n        return decorators.reduceRight(function(o, d) {\n          return (d && d(o)) || o;\n        }, target);\n      case 3:\n        return decorators.reduceRight(function(o, d) {\n          return (d && d(target, key)), void 0;\n        }, void 0);\n      case 4:\n        return decorators.reduceRight(function(o, d) {\n          return (d && d(target, key, o)) || o;\n        }, desc);\n    }\n  };\n  var __metadata = (this && this.__metadata) || function(k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\")\n      return Reflect.metadata(k, v);\n  };\n  var source_module_1 = require(\"angular2/src/compiler/source_module\");\n  var view_1 = require(\"angular2/src/core/metadata/view\");\n  var xhr_1 = require(\"angular2/src/compiler/xhr\");\n  var lang_1 = require(\"angular2/src/facade/lang\");\n  var async_1 = require(\"angular2/src/facade/async\");\n  var shadow_css_1 = require(\"angular2/src/compiler/shadow_css\");\n  var url_resolver_1 = require(\"angular2/src/compiler/url_resolver\");\n  var style_url_resolver_1 = require(\"angular2/src/compiler/style_url_resolver\");\n  var util_1 = require(\"angular2/src/compiler/util\");\n  var di_1 = require(\"angular2/src/core/di\");\n  var view_factory_1 = require(\"angular2/src/core/render/view_factory\");\n  var StyleCompiler = (function() {\n    function StyleCompiler(_xhr, _urlResolver) {\n      this._xhr = _xhr;\n      this._urlResolver = _urlResolver;\n      this._styleCache = new Map();\n      this._shadowCss = new shadow_css_1.ShadowCss();\n    }\n    StyleCompiler.prototype.compileComponentRuntime = function(template) {\n      var styles = template.styles;\n      var styleAbsUrls = template.styleUrls;\n      return this._loadStyles(styles, styleAbsUrls, template.encapsulation === view_1.ViewEncapsulation.Emulated);\n    };\n    StyleCompiler.prototype.compileComponentCodeGen = function(template) {\n      var shim = template.encapsulation === view_1.ViewEncapsulation.Emulated;\n      return this._styleCodeGen(template.styles, template.styleUrls, shim);\n    };\n    StyleCompiler.prototype.compileStylesheetCodeGen = function(stylesheetUrl, cssText) {\n      var styleWithImports = style_url_resolver_1.extractStyleUrls(this._urlResolver, stylesheetUrl, cssText);\n      return [this._styleModule(stylesheetUrl, false, this._styleCodeGen([styleWithImports.style], styleWithImports.styleUrls, false)), this._styleModule(stylesheetUrl, true, this._styleCodeGen([styleWithImports.style], styleWithImports.styleUrls, true))];\n    };\n    StyleCompiler.prototype.clearCache = function() {\n      this._styleCache.clear();\n    };\n    StyleCompiler.prototype._loadStyles = function(plainStyles, absUrls, encapsulate) {\n      var _this = this;\n      var promises = absUrls.map(function(absUrl) {\n        var cacheKey = \"\" + absUrl + (encapsulate ? '.shim' : '');\n        var result = _this._styleCache.get(cacheKey);\n        if (lang_1.isBlank(result)) {\n          result = _this._xhr.get(absUrl).then(function(style) {\n            var styleWithImports = style_url_resolver_1.extractStyleUrls(_this._urlResolver, absUrl, style);\n            return _this._loadStyles([styleWithImports.style], styleWithImports.styleUrls, encapsulate);\n          });\n          _this._styleCache.set(cacheKey, result);\n        }\n        return result;\n      });\n      return async_1.PromiseWrapper.all(promises).then(function(nestedStyles) {\n        var result = plainStyles.map(function(plainStyle) {\n          return _this._shimIfNeeded(plainStyle, encapsulate);\n        });\n        nestedStyles.forEach(function(styles) {\n          return result.push(styles);\n        });\n        return result;\n      });\n    };\n    StyleCompiler.prototype._styleCodeGen = function(plainStyles, absUrls, shim) {\n      var _this = this;\n      var arrayPrefix = lang_1.IS_DART ? \"const\" : '';\n      var styleExpressions = plainStyles.map(function(plainStyle) {\n        return util_1.escapeSingleQuoteString(_this._shimIfNeeded(plainStyle, shim));\n      });\n      for (var i = 0; i < absUrls.length; i++) {\n        var moduleUrl = this._createModuleUrl(absUrls[i], shim);\n        styleExpressions.push(source_module_1.moduleRef(moduleUrl) + \"STYLES\");\n      }\n      var expressionSource = arrayPrefix + \" [\" + styleExpressions.join(',') + \"]\";\n      return new source_module_1.SourceExpression([], expressionSource);\n    };\n    StyleCompiler.prototype._styleModule = function(stylesheetUrl, shim, expression) {\n      var moduleSource = \"\\n      \" + expression.declarations.join('\\n') + \"\\n      \" + util_1.codeGenExportVariable('STYLES') + expression.expression + \";\\n    \";\n      return new source_module_1.SourceModule(this._createModuleUrl(stylesheetUrl, shim), moduleSource);\n    };\n    StyleCompiler.prototype._shimIfNeeded = function(style, shim) {\n      return shim ? this._shadowCss.shimCssText(style, view_factory_1.CONTENT_ATTR, view_factory_1.HOST_ATTR) : style;\n    };\n    StyleCompiler.prototype._createModuleUrl = function(stylesheetUrl, shim) {\n      return shim ? stylesheetUrl + \".shim\" + util_1.MODULE_SUFFIX : \"\" + stylesheetUrl + util_1.MODULE_SUFFIX;\n    };\n    StyleCompiler = __decorate([di_1.Injectable(), __metadata('design:paramtypes', [xhr_1.XHR, url_resolver_1.UrlResolver])], StyleCompiler);\n    return StyleCompiler;\n  })();\n  exports.StyleCompiler = StyleCompiler;\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"angular2/src/compiler/html_parser\", [\"angular2/src/facade/lang\", \"angular2/src/core/dom/dom_adapter\", \"angular2/src/compiler/html_ast\", \"angular2/src/compiler/util\", \"angular2/src/core/di\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  var __decorate = (this && this.__decorate) || function(decorators, target, key, desc) {\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\")\n      return Reflect.decorate(decorators, target, key, desc);\n    switch (arguments.length) {\n      case 2:\n        return decorators.reduceRight(function(o, d) {\n          return (d && d(o)) || o;\n        }, target);\n      case 3:\n        return decorators.reduceRight(function(o, d) {\n          return (d && d(target, key)), void 0;\n        }, void 0);\n      case 4:\n        return decorators.reduceRight(function(o, d) {\n          return (d && d(target, key, o)) || o;\n        }, desc);\n    }\n  };\n  var __metadata = (this && this.__metadata) || function(k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\")\n      return Reflect.metadata(k, v);\n  };\n  var lang_1 = require(\"angular2/src/facade/lang\");\n  var dom_adapter_1 = require(\"angular2/src/core/dom/dom_adapter\");\n  var html_ast_1 = require(\"angular2/src/compiler/html_ast\");\n  var util_1 = require(\"angular2/src/compiler/util\");\n  var di_1 = require(\"angular2/src/core/di\");\n  var HtmlParser = (function() {\n    function HtmlParser() {}\n    HtmlParser.prototype.parse = function(template, sourceInfo) {\n      var root = dom_adapter_1.DOM.createTemplate(template);\n      return parseChildNodes(root, sourceInfo);\n    };\n    HtmlParser.prototype.unparse = function(nodes) {\n      var visitor = new UnparseVisitor();\n      var parts = [];\n      html_ast_1.htmlVisitAll(visitor, nodes, parts);\n      return parts.join('');\n    };\n    HtmlParser = __decorate([di_1.Injectable(), __metadata('design:paramtypes', [])], HtmlParser);\n    return HtmlParser;\n  })();\n  exports.HtmlParser = HtmlParser;\n  function parseText(text, indexInParent, parentSourceInfo) {\n    var value = dom_adapter_1.DOM.getText(text);\n    return new html_ast_1.HtmlTextAst(value, parentSourceInfo + \" > #text(\" + value + \"):nth-child(\" + indexInParent + \")\");\n  }\n  function parseAttr(element, parentSourceInfo, attrName, attrValue) {\n    return new html_ast_1.HtmlAttrAst(attrName, attrValue, parentSourceInfo + \"[\" + attrName + \"=\" + attrValue + \"]\");\n  }\n  function parseElement(element, indexInParent, parentSourceInfo) {\n    var nodeName = dom_adapter_1.DOM.nodeName(element).toLowerCase();\n    var sourceInfo = parentSourceInfo + \" > \" + nodeName + \":nth-child(\" + indexInParent + \")\";\n    var attrs = parseAttrs(element, sourceInfo);\n    var childNodes = parseChildNodes(element, sourceInfo);\n    return new html_ast_1.HtmlElementAst(nodeName, attrs, childNodes, sourceInfo);\n  }\n  function parseAttrs(element, elementSourceInfo) {\n    var attrMap = dom_adapter_1.DOM.attributeMap(element);\n    var attrList = [];\n    attrMap.forEach(function(value, name) {\n      return attrList.push([name, value]);\n    });\n    attrList.sort(function(entry1, entry2) {\n      return lang_1.StringWrapper.compare(entry1[0], entry2[0]);\n    });\n    return attrList.map(function(entry) {\n      return parseAttr(element, elementSourceInfo, entry[0], entry[1]);\n    });\n  }\n  function parseChildNodes(element, parentSourceInfo) {\n    var root = dom_adapter_1.DOM.templateAwareRoot(element);\n    var childNodes = dom_adapter_1.DOM.childNodesAsList(root);\n    var result = [];\n    var index = 0;\n    childNodes.forEach(function(childNode) {\n      var childResult = null;\n      if (dom_adapter_1.DOM.isTextNode(childNode)) {\n        var text = childNode;\n        childResult = parseText(text, index, parentSourceInfo);\n      } else if (dom_adapter_1.DOM.isElementNode(childNode)) {\n        var el = childNode;\n        childResult = parseElement(el, index, parentSourceInfo);\n      }\n      if (lang_1.isPresent(childResult)) {\n        result.push(childResult);\n      }\n      index++;\n    });\n    return result;\n  }\n  var UnparseVisitor = (function() {\n    function UnparseVisitor() {}\n    UnparseVisitor.prototype.visitElement = function(ast, parts) {\n      parts.push(\"<\" + ast.name);\n      var attrs = [];\n      html_ast_1.htmlVisitAll(this, ast.attrs, attrs);\n      if (ast.attrs.length > 0) {\n        parts.push(' ');\n        parts.push(attrs.join(' '));\n      }\n      parts.push(\">\");\n      html_ast_1.htmlVisitAll(this, ast.children, parts);\n      parts.push(\"</\" + ast.name + \">\");\n      return null;\n    };\n    UnparseVisitor.prototype.visitAttr = function(ast, parts) {\n      parts.push(ast.name + \"=\" + util_1.escapeDoubleQuoteString(ast.value));\n      return null;\n    };\n    UnparseVisitor.prototype.visitText = function(ast, parts) {\n      parts.push(ast.value);\n      return null;\n    };\n    return UnparseVisitor;\n  })();\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"angular2/src/core/dom/generic_browser_adapter\", [\"angular2/src/facade/collection\", \"angular2/src/facade/lang\", \"angular2/src/core/dom/dom_adapter\", \"angular2/src/compiler/xhr_impl\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  var __extends = (this && this.__extends) || function(d, b) {\n    for (var p in b)\n      if (b.hasOwnProperty(p))\n        d[p] = b[p];\n    function __() {\n      this.constructor = d;\n    }\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n  };\n  var collection_1 = require(\"angular2/src/facade/collection\");\n  var lang_1 = require(\"angular2/src/facade/lang\");\n  var dom_adapter_1 = require(\"angular2/src/core/dom/dom_adapter\");\n  var xhr_impl_1 = require(\"angular2/src/compiler/xhr_impl\");\n  var GenericBrowserDomAdapter = (function(_super) {\n    __extends(GenericBrowserDomAdapter, _super);\n    function GenericBrowserDomAdapter() {\n      var _this = this;\n      _super.call(this);\n      this._animationPrefix = null;\n      this._transitionEnd = null;\n      try {\n        var element = this.createElement('div', this.defaultDoc());\n        if (lang_1.isPresent(this.getStyle(element, 'animationName'))) {\n          this._animationPrefix = '';\n        } else {\n          var domPrefixes = ['Webkit', 'Moz', 'O', 'ms'];\n          for (var i = 0; i < domPrefixes.length; i++) {\n            if (lang_1.isPresent(this.getStyle(element, domPrefixes[i] + 'AnimationName'))) {\n              this._animationPrefix = '-' + domPrefixes[i].toLowerCase() + '-';\n              break;\n            }\n          }\n        }\n        var transEndEventNames = {\n          WebkitTransition: 'webkitTransitionEnd',\n          MozTransition: 'transitionend',\n          OTransition: 'oTransitionEnd otransitionend',\n          transition: 'transitionend'\n        };\n        collection_1.StringMapWrapper.forEach(transEndEventNames, function(value, key) {\n          if (lang_1.isPresent(_this.getStyle(element, key))) {\n            _this._transitionEnd = value;\n          }\n        });\n      } catch (e) {\n        this._animationPrefix = null;\n        this._transitionEnd = null;\n      }\n    }\n    GenericBrowserDomAdapter.prototype.getXHR = function() {\n      return xhr_impl_1.XHRImpl;\n    };\n    GenericBrowserDomAdapter.prototype.getDistributedNodes = function(el) {\n      return el.getDistributedNodes();\n    };\n    GenericBrowserDomAdapter.prototype.resolveAndSetHref = function(el, baseUrl, href) {\n      el.href = href == null ? baseUrl : baseUrl + '/../' + href;\n    };\n    GenericBrowserDomAdapter.prototype.supportsDOMEvents = function() {\n      return true;\n    };\n    GenericBrowserDomAdapter.prototype.supportsNativeShadowDOM = function() {\n      return lang_1.isFunction(this.defaultDoc().body.createShadowRoot);\n    };\n    GenericBrowserDomAdapter.prototype.getAnimationPrefix = function() {\n      return lang_1.isPresent(this._animationPrefix) ? this._animationPrefix : \"\";\n    };\n    GenericBrowserDomAdapter.prototype.getTransitionEnd = function() {\n      return lang_1.isPresent(this._transitionEnd) ? this._transitionEnd : \"\";\n    };\n    GenericBrowserDomAdapter.prototype.supportsAnimation = function() {\n      return lang_1.isPresent(this._animationPrefix) && lang_1.isPresent(this._transitionEnd);\n    };\n    return GenericBrowserDomAdapter;\n  })(dom_adapter_1.DomAdapter);\n  exports.GenericBrowserDomAdapter = GenericBrowserDomAdapter;\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"angular2/src/core/testability/browser_testability\", [\"angular2/src/core/testability/testability\", \"angular2/src/facade/lang\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  var testability_1 = require(\"angular2/src/core/testability/testability\");\n  var lang_1 = require(\"angular2/src/facade/lang\");\n  var PublicTestability = (function() {\n    function PublicTestability(testability) {\n      this._testability = testability;\n    }\n    PublicTestability.prototype.isStable = function() {\n      return this._testability.isStable();\n    };\n    PublicTestability.prototype.whenStable = function(callback) {\n      this._testability.whenStable(callback);\n    };\n    PublicTestability.prototype.findBindings = function(using, provider, exactMatch) {\n      return this.findProviders(using, provider, exactMatch);\n    };\n    PublicTestability.prototype.findProviders = function(using, provider, exactMatch) {\n      return this._testability.findBindings(using, provider, exactMatch);\n    };\n    return PublicTestability;\n  })();\n  var BrowserGetTestability = (function() {\n    function BrowserGetTestability() {}\n    BrowserGetTestability.init = function() {\n      testability_1.setTestabilityGetter(new BrowserGetTestability());\n    };\n    BrowserGetTestability.prototype.addToWindow = function(registry) {\n      lang_1.global.getAngularTestability = function(elem, findInAncestors) {\n        if (findInAncestors === void 0) {\n          findInAncestors = true;\n        }\n        var testability = registry.findTestabilityInTree(elem, findInAncestors);\n        if (testability == null) {\n          throw new Error('Could not find testability for element.');\n        }\n        return new PublicTestability(testability);\n      };\n      lang_1.global.getAllAngularTestabilities = function() {\n        var testabilities = registry.getAllTestabilities();\n        return testabilities.map(function(testability) {\n          return new PublicTestability(testability);\n        });\n      };\n    };\n    return BrowserGetTestability;\n  })();\n  exports.BrowserGetTestability = BrowserGetTestability;\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"angular2/src/core/render/dom/events/hammer_gestures\", [\"angular2/src/core/render/dom/events/hammer_common\", \"angular2/src/facade/lang\", \"angular2/src/facade/exceptions\", \"angular2/src/core/di\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  var __extends = (this && this.__extends) || function(d, b) {\n    for (var p in b)\n      if (b.hasOwnProperty(p))\n        d[p] = b[p];\n    function __() {\n      this.constructor = d;\n    }\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n  };\n  var __decorate = (this && this.__decorate) || function(decorators, target, key, desc) {\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\")\n      return Reflect.decorate(decorators, target, key, desc);\n    switch (arguments.length) {\n      case 2:\n        return decorators.reduceRight(function(o, d) {\n          return (d && d(o)) || o;\n        }, target);\n      case 3:\n        return decorators.reduceRight(function(o, d) {\n          return (d && d(target, key)), void 0;\n        }, void 0);\n      case 4:\n        return decorators.reduceRight(function(o, d) {\n          return (d && d(target, key, o)) || o;\n        }, desc);\n    }\n  };\n  var __metadata = (this && this.__metadata) || function(k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\")\n      return Reflect.metadata(k, v);\n  };\n  var hammer_common_1 = require(\"angular2/src/core/render/dom/events/hammer_common\");\n  var lang_1 = require(\"angular2/src/facade/lang\");\n  var exceptions_1 = require(\"angular2/src/facade/exceptions\");\n  var di_1 = require(\"angular2/src/core/di\");\n  var HammerGesturesPlugin = (function(_super) {\n    __extends(HammerGesturesPlugin, _super);\n    function HammerGesturesPlugin() {\n      _super.apply(this, arguments);\n    }\n    HammerGesturesPlugin.prototype.supports = function(eventName) {\n      if (!_super.prototype.supports.call(this, eventName))\n        return false;\n      if (!lang_1.isPresent(window['Hammer'])) {\n        throw new exceptions_1.BaseException(\"Hammer.js is not loaded, can not bind \" + eventName + \" event\");\n      }\n      return true;\n    };\n    HammerGesturesPlugin.prototype.addEventListener = function(element, eventName, handler) {\n      var zone = this.manager.getZone();\n      eventName = eventName.toLowerCase();\n      zone.runOutsideAngular(function() {\n        var mc = new Hammer(element);\n        mc.get('pinch').set({enable: true});\n        mc.get('rotate').set({enable: true});\n        mc.on(eventName, function(eventObj) {\n          zone.run(function() {\n            handler(eventObj);\n          });\n        });\n      });\n    };\n    HammerGesturesPlugin = __decorate([di_1.Injectable(), __metadata('design:paramtypes', [])], HammerGesturesPlugin);\n    return HammerGesturesPlugin;\n  })(hammer_common_1.HammerGesturesPluginCommon);\n  exports.HammerGesturesPlugin = HammerGesturesPlugin;\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"angular2/src/core/services\", [\"angular2/src/compiler/app_root_url\", \"angular2/src/compiler/url_resolver\", \"angular2/src/core/services/title\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  var app_root_url_1 = require(\"angular2/src/compiler/app_root_url\");\n  exports.AppRootUrl = app_root_url_1.AppRootUrl;\n  var url_resolver_1 = require(\"angular2/src/compiler/url_resolver\");\n  exports.UrlResolver = url_resolver_1.UrlResolver;\n  var title_1 = require(\"angular2/src/core/services/title\");\n  exports.Title = title_1.Title;\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"angular2/src/core/debug\", [\"angular2/src/core/debug/debug_element\", \"angular2/src/core/debug/debug_element_view_listener\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  var debug_element_1 = require(\"angular2/src/core/debug/debug_element\");\n  exports.DebugElement = debug_element_1.DebugElement;\n  exports.asNativeElements = debug_element_1.asNativeElements;\n  exports.By = debug_element_1.By;\n  exports.Scope = debug_element_1.Scope;\n  exports.inspectElement = debug_element_1.inspectElement;\n  var debug_element_view_listener_1 = require(\"angular2/src/core/debug/debug_element_view_listener\");\n  exports.inspectNativeElement = debug_element_view_listener_1.inspectNativeElement;\n  exports.ELEMENT_PROBE_PROVIDERS = debug_element_view_listener_1.ELEMENT_PROBE_PROVIDERS;\n  exports.ELEMENT_PROBE_BINDINGS = debug_element_view_listener_1.ELEMENT_PROBE_BINDINGS;\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"angular2/src/upgrade/upgrade_ng1_adapter\", [\"angular2/angular2\", \"angular2/src/upgrade/constants\", \"angular2/src/upgrade/util\", \"angular2/src/upgrade/angular_js\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  var angular2_1 = require(\"angular2/angular2\");\n  var constants_1 = require(\"angular2/src/upgrade/constants\");\n  var util_1 = require(\"angular2/src/upgrade/util\");\n  var angular = require(\"angular2/src/upgrade/angular_js\");\n  var CAMEL_CASE = /([A-Z])/g;\n  var INITIAL_VALUE = {__UNINITIALIZED__: true};\n  var NOT_SUPPORTED = 'NOT_SUPPORTED';\n  var UpgradeNg1ComponentAdapterBuilder = (function() {\n    function UpgradeNg1ComponentAdapterBuilder(name) {\n      this.name = name;\n      this.inputs = [];\n      this.inputsRename = [];\n      this.outputs = [];\n      this.outputsRename = [];\n      this.propertyOutputs = [];\n      this.checkProperties = [];\n      this.propertyMap = {};\n      this.linkFn = null;\n      this.directive = null;\n      this.$controller = null;\n      var selector = name.replace(CAMEL_CASE, function(all, next) {\n        return '-' + next.toLowerCase();\n      });\n      var self = this;\n      this.type = angular2_1.Directive({\n        selector: selector,\n        inputs: this.inputsRename,\n        outputs: this.outputsRename\n      }).Class({\n        constructor: [new angular2_1.Inject(constants_1.NG1_SCOPE), angular2_1.ElementRef, function(scope, elementRef) {\n          return new UpgradeNg1ComponentAdapter(self.linkFn, scope, self.directive, elementRef, self.$controller, self.inputs, self.outputs, self.propertyOutputs, self.checkProperties, self.propertyMap);\n        }],\n        onChanges: function() {},\n        doCheck: function() {}\n      });\n    }\n    UpgradeNg1ComponentAdapterBuilder.prototype.extractDirective = function(injector) {\n      var directives = injector.get(this.name + 'Directive');\n      if (directives.length > 1) {\n        throw new Error('Only support single directive definition for: ' + this.name);\n      }\n      var directive = directives[0];\n      if (directive.replace)\n        this.notSupported('replace');\n      if (directive.terminal)\n        this.notSupported('terminal');\n      var link = directive.link;\n      if (typeof link == 'object') {\n        if (link.post)\n          this.notSupported('link.post');\n      }\n      return directive;\n    };\n    UpgradeNg1ComponentAdapterBuilder.prototype.notSupported = function(feature) {\n      throw new Error(\"Upgraded directive '\" + this.name + \"' does not support '\" + feature + \"'.\");\n    };\n    UpgradeNg1ComponentAdapterBuilder.prototype.extractBindings = function() {\n      var scope = this.directive.scope;\n      if (typeof scope == 'object') {\n        for (var name in scope) {\n          if (scope.hasOwnProperty(name)) {\n            var localName = scope[name];\n            var type = localName.charAt(0);\n            localName = localName.substr(1) || name;\n            var outputName = 'output_' + name;\n            var outputNameRename = outputName + ': ' + name;\n            var outputNameRenameChange = outputName + ': ' + name + 'Change';\n            var inputName = 'input_' + name;\n            var inputNameRename = inputName + ': ' + name;\n            switch (type) {\n              case '=':\n                this.propertyOutputs.push(outputName);\n                this.checkProperties.push(localName);\n                this.outputs.push(outputName);\n                this.outputsRename.push(outputNameRenameChange);\n                this.propertyMap[outputName] = localName;\n              case '@':\n                this.inputs.push(inputName);\n                this.inputsRename.push(inputNameRename);\n                this.propertyMap[inputName] = localName;\n                break;\n              case '&':\n                this.outputs.push(outputName);\n                this.outputsRename.push(outputNameRename);\n                this.propertyMap[outputName] = localName;\n                break;\n              default:\n                var json = JSON.stringify(scope);\n                throw new Error(\"Unexpected mapping '\" + type + \"' in '\" + json + \"' in '\" + this.name + \"' directive.\");\n            }\n          }\n        }\n      }\n    };\n    UpgradeNg1ComponentAdapterBuilder.prototype.compileTemplate = function(compile, templateCache, httpBackend) {\n      var _this = this;\n      if (this.directive.template) {\n        this.linkFn = compileHtml(this.directive.template);\n      } else if (this.directive.templateUrl) {\n        var url = this.directive.templateUrl;\n        var html = templateCache.get(url);\n        if (html !== undefined) {\n          this.linkFn = compileHtml(html);\n        } else {\n          return new Promise(function(resolve, err) {\n            httpBackend('GET', url, null, function(status, response) {\n              if (status == 200) {\n                resolve(_this.linkFn = compileHtml(templateCache.put(url, response)));\n              } else {\n                err(\"GET \" + url + \" returned \" + status + \": \" + response);\n              }\n            });\n          });\n        }\n      } else {\n        throw new Error(\"Directive '\" + this.name + \"' is not a component, it is missing template.\");\n      }\n      return null;\n      function compileHtml(html) {\n        var div = document.createElement('div');\n        div.innerHTML = html;\n        return compile(div.childNodes);\n      }\n    };\n    UpgradeNg1ComponentAdapterBuilder.resolve = function(exportedComponents, injector) {\n      var promises = [];\n      var compile = injector.get(constants_1.NG1_COMPILE);\n      var templateCache = injector.get(constants_1.NG1_TEMPLATE_CACHE);\n      var httpBackend = injector.get(constants_1.NG1_HTTP_BACKEND);\n      var $controller = injector.get(constants_1.NG1_CONTROLLER);\n      for (var name in exportedComponents) {\n        if (exportedComponents.hasOwnProperty(name)) {\n          var exportedComponent = exportedComponents[name];\n          exportedComponent.directive = exportedComponent.extractDirective(injector);\n          exportedComponent.$controller = $controller;\n          exportedComponent.extractBindings();\n          var promise = exportedComponent.compileTemplate(compile, templateCache, httpBackend);\n          if (promise)\n            promises.push(promise);\n        }\n      }\n      return Promise.all(promises);\n    };\n    return UpgradeNg1ComponentAdapterBuilder;\n  })();\n  exports.UpgradeNg1ComponentAdapterBuilder = UpgradeNg1ComponentAdapterBuilder;\n  var UpgradeNg1ComponentAdapter = (function() {\n    function UpgradeNg1ComponentAdapter(linkFn, scope, directive, elementRef, $controller, inputs, outputs, propOuts, checkProperties, propertyMap) {\n      this.directive = directive;\n      this.inputs = inputs;\n      this.outputs = outputs;\n      this.propOuts = propOuts;\n      this.checkProperties = checkProperties;\n      this.propertyMap = propertyMap;\n      this.destinationObj = null;\n      this.checkLastValues = [];\n      var element = elementRef.nativeElement;\n      var childNodes = [];\n      var childNode;\n      while (childNode = element.firstChild) {\n        element.removeChild(childNode);\n        childNodes.push(childNode);\n      }\n      var componentScope = scope.$new(!!directive.scope);\n      var $element = angular.element(element);\n      var controllerType = directive.controller;\n      var controller = null;\n      if (controllerType) {\n        var locals = {\n          $scope: componentScope,\n          $element: $element\n        };\n        controller = $controller(controllerType, locals, null, directive.controllerAs);\n        $element.data(util_1.controllerKey(directive.name), controller);\n      }\n      var link = directive.link;\n      if (typeof link == 'object')\n        link = link.pre;\n      if (link) {\n        var attrs = NOT_SUPPORTED;\n        var transcludeFn = NOT_SUPPORTED;\n        var linkController = this.resolveRequired($element, directive.require);\n        directive.link(componentScope, $element, attrs, linkController, transcludeFn);\n      }\n      this.destinationObj = directive.bindToController && controller ? controller : componentScope;\n      linkFn(componentScope, function(clonedElement, scope) {\n        for (var i = 0,\n            ii = clonedElement.length; i < ii; i++) {\n          element.appendChild(clonedElement[i]);\n        }\n      }, {parentBoundTranscludeFn: function(scope, cloneAttach) {\n          cloneAttach(childNodes);\n        }});\n      for (var i = 0; i < inputs.length; i++) {\n        this[inputs[i]] = null;\n      }\n      for (var j = 0; j < outputs.length; j++) {\n        var emitter = this[outputs[j]] = new angular2_1.EventEmitter();\n        this.setComponentProperty(outputs[j], (function(emitter) {\n          return function(value) {\n            return emitter.next(value);\n          };\n        })(emitter));\n      }\n      for (var k = 0; k < propOuts.length; k++) {\n        this[propOuts[k]] = new angular2_1.EventEmitter();\n        this.checkLastValues.push(INITIAL_VALUE);\n      }\n    }\n    UpgradeNg1ComponentAdapter.prototype.onChanges = function(changes) {\n      for (var name in changes) {\n        if (changes.hasOwnProperty(name)) {\n          var change = changes[name];\n          this.setComponentProperty(name, change.currentValue);\n        }\n      }\n    };\n    UpgradeNg1ComponentAdapter.prototype.doCheck = function() {\n      var count = 0;\n      var destinationObj = this.destinationObj;\n      var lastValues = this.checkLastValues;\n      var checkProperties = this.checkProperties;\n      for (var i = 0; i < checkProperties.length; i++) {\n        var value = destinationObj[checkProperties[i]];\n        var last = lastValues[i];\n        if (value !== last) {\n          if (typeof value == 'number' && isNaN(value) && typeof last == 'number' && isNaN(last)) {} else {\n            var eventEmitter = this[this.propOuts[i]];\n            eventEmitter.next(lastValues[i] = value);\n          }\n        }\n      }\n      return count;\n    };\n    UpgradeNg1ComponentAdapter.prototype.setComponentProperty = function(name, value) {\n      this.destinationObj[this.propertyMap[name]] = value;\n    };\n    UpgradeNg1ComponentAdapter.prototype.resolveRequired = function($element, require) {\n      if (!require) {\n        return undefined;\n      } else if (typeof require == 'string') {\n        var name = require;\n        var isOptional = false;\n        var startParent = false;\n        var searchParents = false;\n        var ch;\n        if (name.charAt(0) == '?') {\n          isOptional = true;\n          name = name.substr(1);\n        }\n        if (name.charAt(0) == '^') {\n          searchParents = true;\n          name = name.substr(1);\n        }\n        if (name.charAt(0) == '^') {\n          startParent = true;\n          name = name.substr(1);\n        }\n        var key = util_1.controllerKey(name);\n        if (startParent)\n          $element = $element.parent();\n        var dep = searchParents ? $element.inheritedData(key) : $element.data(key);\n        if (!dep && !isOptional) {\n          throw new Error(\"Can not locate '\" + require + \"' in '\" + this.directive.name + \"'.\");\n        }\n        return dep;\n      } else if (require instanceof Array) {\n        var deps = [];\n        for (var i = 0; i < require.length; i++) {\n          deps.push(this.resolveRequired($element, require[i]));\n        }\n        return deps;\n      }\n      throw new Error(\"Directive '\" + this.directive.name + \"' require syntax unrecognized: \" + this.directive.require);\n    };\n    return UpgradeNg1ComponentAdapter;\n  })();\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"@reactivex/rxjs/dist/cjs/Observable\", [\"@reactivex/rxjs/dist/cjs/Subscriber\", \"@reactivex/rxjs/dist/cjs/util/root\", \"@reactivex/rxjs/dist/cjs/util/Symbol_observable\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  'use strict';\n  exports.__esModule = true;\n  function _interopRequireDefault(obj) {\n    return obj && obj.__esModule ? obj : {'default': obj};\n  }\n  function _classCallCheck(instance, Constructor) {\n    if (!(instance instanceof Constructor)) {\n      throw new TypeError('Cannot call a class as a function');\n    }\n  }\n  var _Subscriber = require(\"@reactivex/rxjs/dist/cjs/Subscriber\");\n  var _Subscriber2 = _interopRequireDefault(_Subscriber);\n  var _utilRoot = require(\"@reactivex/rxjs/dist/cjs/util/root\");\n  var _utilSymbol_observable = require(\"@reactivex/rxjs/dist/cjs/util/Symbol_observable\");\n  var _utilSymbol_observable2 = _interopRequireDefault(_utilSymbol_observable);\n  var Observable = (function() {\n    function Observable(subscribe) {\n      _classCallCheck(this, Observable);\n      this._isScalar = false;\n      if (subscribe) {\n        this._subscribe = subscribe;\n      }\n    }\n    Observable.prototype.lift = function lift(operator) {\n      var observable = new Observable();\n      observable.source = this;\n      observable.operator = operator;\n      return observable;\n    };\n    Observable.prototype[_utilSymbol_observable2['default']] = function() {\n      return this;\n    };\n    Observable.prototype.subscribe = function subscribe(observerOrNext, error, complete) {\n      var subscriber = undefined;\n      if (observerOrNext && typeof observerOrNext === \"object\") {\n        if (observerOrNext instanceof _Subscriber2['default']) {\n          subscriber = observerOrNext;\n        } else {\n          subscriber = new _Subscriber2['default'](observerOrNext);\n        }\n      } else {\n        var next = observerOrNext;\n        subscriber = _Subscriber2['default'].create(next, error, complete);\n      }\n      subscriber.add(this._subscribe(subscriber));\n      return subscriber;\n    };\n    Observable.prototype.forEach = function forEach(next, PromiseCtor) {\n      var _this = this;\n      if (!PromiseCtor) {\n        if (_utilRoot.root.Rx && _utilRoot.root.Rx.config && _utilRoot.root.Rx.config.Promise) {\n          PromiseCtor = _utilRoot.root.Rx.config.Promise;\n        } else if (_utilRoot.root.Promise) {\n          PromiseCtor = _utilRoot.root.Promise;\n        }\n      }\n      if (!PromiseCtor) {\n        throw new Error('no Promise impl found');\n      }\n      return new PromiseCtor(function(resolve, reject) {\n        _this.subscribe(next, reject, resolve);\n      });\n    };\n    Observable.prototype._subscribe = function _subscribe(subscriber) {\n      return this.source._subscribe(this.operator.call(subscriber));\n    };\n    return Observable;\n  })();\n  exports['default'] = Observable;\n  Observable.create = function(subscribe) {\n    return new Observable(subscribe);\n  };\n  module.exports = exports['default'];\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"@reactivex/rxjs/dist/cjs/observables/ScalarObservable\", [\"@reactivex/rxjs/dist/cjs/Observable\", \"@reactivex/rxjs/dist/cjs/util/tryCatch\", \"@reactivex/rxjs/dist/cjs/util/errorObject\", \"@reactivex/rxjs/dist/cjs/observables/ErrorObservable\", \"@reactivex/rxjs/dist/cjs/observables/EmptyObservable\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  'use strict';\n  exports.__esModule = true;\n  function _interopRequireDefault(obj) {\n    return obj && obj.__esModule ? obj : {'default': obj};\n  }\n  function _classCallCheck(instance, Constructor) {\n    if (!(instance instanceof Constructor)) {\n      throw new TypeError('Cannot call a class as a function');\n    }\n  }\n  function _inherits(subClass, superClass) {\n    if (typeof superClass !== 'function' && superClass !== null) {\n      throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass);\n    }\n    subClass.prototype = Object.create(superClass && superClass.prototype, {constructor: {\n        value: subClass,\n        enumerable: false,\n        writable: true,\n        configurable: true\n      }});\n    if (superClass)\n      Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass;\n  }\n  var _Observable2 = require(\"@reactivex/rxjs/dist/cjs/Observable\");\n  var _Observable3 = _interopRequireDefault(_Observable2);\n  var _utilTryCatch = require(\"@reactivex/rxjs/dist/cjs/util/tryCatch\");\n  var _utilTryCatch2 = _interopRequireDefault(_utilTryCatch);\n  var _utilErrorObject = require(\"@reactivex/rxjs/dist/cjs/util/errorObject\");\n  var _ErrorObservable = require(\"@reactivex/rxjs/dist/cjs/observables/ErrorObservable\");\n  var _ErrorObservable2 = _interopRequireDefault(_ErrorObservable);\n  var _EmptyObservable = require(\"@reactivex/rxjs/dist/cjs/observables/EmptyObservable\");\n  var _EmptyObservable2 = _interopRequireDefault(_EmptyObservable);\n  var ScalarObservable = (function(_Observable) {\n    _inherits(ScalarObservable, _Observable);\n    function ScalarObservable(value, scheduler) {\n      _classCallCheck(this, ScalarObservable);\n      _Observable.call(this);\n      this.value = value;\n      this.scheduler = scheduler;\n      this._isScalar = true;\n    }\n    ScalarObservable.create = function create(value, scheduler) {\n      return new ScalarObservable(value, scheduler);\n    };\n    ScalarObservable.dispatch = function dispatch(state) {\n      var done = state.done;\n      var value = state.value;\n      var subscriber = state.subscriber;\n      if (done) {\n        subscriber.complete();\n        return ;\n      }\n      subscriber.next(value);\n      if (subscriber.isUnsubscribed) {\n        return ;\n      }\n      state.done = true;\n      this.schedule(state);\n    };\n    ScalarObservable.prototype._subscribe = function _subscribe(subscriber) {\n      var value = this.value;\n      var scheduler = this.scheduler;\n      if (scheduler) {\n        subscriber.add(scheduler.schedule(ScalarObservable.dispatch, 0, {\n          done: false,\n          value: value,\n          subscriber: subscriber\n        }));\n      } else {\n        subscriber.next(value);\n        if (!subscriber.isUnsubscribed) {\n          subscriber.complete();\n        }\n      }\n    };\n    return ScalarObservable;\n  })(_Observable3['default']);\n  exports['default'] = ScalarObservable;\n  var proto = ScalarObservable.prototype;\n  proto.map = function(project, thisArg) {\n    var result = _utilTryCatch2['default'](project).call(thisArg || this, this.value, 0);\n    if (result === _utilErrorObject.errorObject) {\n      return new _ErrorObservable2['default'](_utilErrorObject.errorObject.e);\n    } else {\n      return new ScalarObservable(project.call(thisArg || this, this.value, 0));\n    }\n  };\n  proto.filter = function(select, thisArg) {\n    var result = _utilTryCatch2['default'](select).call(thisArg || this, this.value, 0);\n    if (result === _utilErrorObject.errorObject) {\n      return new _ErrorObservable2['default'](_utilErrorObject.errorObject.e);\n    } else if (result) {\n      return this;\n    } else {\n      return new _EmptyObservable2['default']();\n    }\n  };\n  proto.reduce = function(project, acc) {\n    if (typeof acc === 'undefined') {\n      return this;\n    }\n    var result = _utilTryCatch2['default'](project)(acc, this.value);\n    if (result === _utilErrorObject.errorObject) {\n      return new _ErrorObservable2['default'](_utilErrorObject.errorObject.e);\n    } else {\n      return new ScalarObservable(result);\n    }\n  };\n  proto.scan = function(project, acc) {\n    return this.reduce(project, acc);\n  };\n  proto.count = function(predicate, thisArg) {\n    if (!predicate) {\n      return new ScalarObservable(1);\n    } else {\n      var result = _utilTryCatch2['default'](predicate).call(thisArg || this, this.value, 0, this);\n      if (result === _utilErrorObject.errorObject) {\n        return new _ErrorObservable2['default'](_utilErrorObject.errorObject.e);\n      } else {\n        return new ScalarObservable(result ? 1 : 0);\n      }\n    }\n  };\n  proto.skip = function(count) {\n    if (count > 0) {\n      return new _EmptyObservable2['default']();\n    }\n    return this;\n  };\n  proto.take = function(count) {\n    if (count > 0) {\n      return this;\n    }\n    return new _EmptyObservable2['default']();\n  };\n  module.exports = exports['default'];\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"@reactivex/rxjs/dist/cjs/operators/combineLatest-support\", [\"@reactivex/rxjs/dist/cjs/util/tryCatch\", \"@reactivex/rxjs/dist/cjs/util/errorObject\", \"@reactivex/rxjs/dist/cjs/OuterSubscriber\", \"@reactivex/rxjs/dist/cjs/util/subscribeToResult\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  'use strict';\n  exports.__esModule = true;\n  function _interopRequireDefault(obj) {\n    return obj && obj.__esModule ? obj : {'default': obj};\n  }\n  function _inherits(subClass, superClass) {\n    if (typeof superClass !== 'function' && superClass !== null) {\n      throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass);\n    }\n    subClass.prototype = Object.create(superClass && superClass.prototype, {constructor: {\n        value: subClass,\n        enumerable: false,\n        writable: true,\n        configurable: true\n      }});\n    if (superClass)\n      Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass;\n  }\n  function _classCallCheck(instance, Constructor) {\n    if (!(instance instanceof Constructor)) {\n      throw new TypeError('Cannot call a class as a function');\n    }\n  }\n  var _utilTryCatch = require(\"@reactivex/rxjs/dist/cjs/util/tryCatch\");\n  var _utilTryCatch2 = _interopRequireDefault(_utilTryCatch);\n  var _utilErrorObject = require(\"@reactivex/rxjs/dist/cjs/util/errorObject\");\n  var _OuterSubscriber2 = require(\"@reactivex/rxjs/dist/cjs/OuterSubscriber\");\n  var _OuterSubscriber3 = _interopRequireDefault(_OuterSubscriber2);\n  var _utilSubscribeToResult = require(\"@reactivex/rxjs/dist/cjs/util/subscribeToResult\");\n  var _utilSubscribeToResult2 = _interopRequireDefault(_utilSubscribeToResult);\n  var CombineLatestOperator = (function() {\n    function CombineLatestOperator(project) {\n      _classCallCheck(this, CombineLatestOperator);\n      this.project = project;\n    }\n    CombineLatestOperator.prototype.call = function call(subscriber) {\n      return new CombineLatestSubscriber(subscriber, this.project);\n    };\n    return CombineLatestOperator;\n  })();\n  exports.CombineLatestOperator = CombineLatestOperator;\n  var CombineLatestSubscriber = (function(_OuterSubscriber) {\n    _inherits(CombineLatestSubscriber, _OuterSubscriber);\n    function CombineLatestSubscriber(destination, project) {\n      _classCallCheck(this, CombineLatestSubscriber);\n      _OuterSubscriber.call(this, destination);\n      this.project = project;\n      this.active = 0;\n      this.values = [];\n      this.observables = [];\n      this.toRespond = [];\n    }\n    CombineLatestSubscriber.prototype._next = function _next(observable) {\n      var toRespond = this.toRespond;\n      toRespond.push(toRespond.length);\n      this.observables.push(observable);\n    };\n    CombineLatestSubscriber.prototype._complete = function _complete() {\n      var observables = this.observables;\n      var len = observables.length;\n      if (len === 0) {\n        this.destination.complete();\n      } else {\n        this.active = len;\n        for (var i = 0; i < len; i++) {\n          var observable = observables[i];\n          this.add(_utilSubscribeToResult2['default'](this, observable, observable, i));\n        }\n      }\n    };\n    CombineLatestSubscriber.prototype.notifyComplete = function notifyComplete(innerSubscriber) {\n      if ((this.active -= 1) === 0) {\n        this.destination.complete();\n      }\n    };\n    CombineLatestSubscriber.prototype.notifyNext = function notifyNext(observable, value, outerIndex, innerIndex) {\n      var values = this.values;\n      values[outerIndex] = value;\n      var toRespond = this.toRespond;\n      if (toRespond.length > 0) {\n        var found = toRespond.indexOf(outerIndex);\n        if (found !== -1) {\n          toRespond.splice(found, 1);\n        }\n      }\n      if (toRespond.length === 0) {\n        var project = this.project;\n        var destination = this.destination;\n        if (project) {\n          var result = _utilTryCatch2['default'](project).apply(this, values);\n          if (result === _utilErrorObject.errorObject) {\n            destination.error(_utilErrorObject.errorObject.e);\n          } else {\n            destination.next(result);\n          }\n        } else {\n          destination.next(values);\n        }\n      }\n    };\n    return CombineLatestSubscriber;\n  })(_OuterSubscriber3['default']);\n  exports.CombineLatestSubscriber = CombineLatestSubscriber;\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"@reactivex/rxjs/dist/cjs/schedulers/immediate\", [\"@reactivex/rxjs/dist/cjs/schedulers/ImmediateScheduler\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  'use strict';\n  exports.__esModule = true;\n  function _interopRequireDefault(obj) {\n    return obj && obj.__esModule ? obj : {'default': obj};\n  }\n  var _ImmediateScheduler = require(\"@reactivex/rxjs/dist/cjs/schedulers/ImmediateScheduler\");\n  var _ImmediateScheduler2 = _interopRequireDefault(_ImmediateScheduler);\n  exports['default'] = new _ImmediateScheduler2['default']();\n  module.exports = exports['default'];\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"@reactivex/rxjs/dist/cjs/observables/FromObservable\", [\"@reactivex/rxjs/dist/cjs/observables/PromiseObservable\", \"@reactivex/rxjs/dist/cjs/observables/IteratorObservable\", \"@reactivex/rxjs/dist/cjs/observables/ArrayObservable\", \"@reactivex/rxjs/dist/cjs/util/Symbol_observable\", \"@reactivex/rxjs/dist/cjs/util/Symbol_iterator\", \"@reactivex/rxjs/dist/cjs/Observable\", \"@reactivex/rxjs/dist/cjs/operators/observeOn-support\", \"@reactivex/rxjs/dist/cjs/schedulers/immediate\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  'use strict';\n  exports.__esModule = true;\n  function _interopRequireDefault(obj) {\n    return obj && obj.__esModule ? obj : {'default': obj};\n  }\n  function _classCallCheck(instance, Constructor) {\n    if (!(instance instanceof Constructor)) {\n      throw new TypeError('Cannot call a class as a function');\n    }\n  }\n  function _inherits(subClass, superClass) {\n    if (typeof superClass !== 'function' && superClass !== null) {\n      throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass);\n    }\n    subClass.prototype = Object.create(superClass && superClass.prototype, {constructor: {\n        value: subClass,\n        enumerable: false,\n        writable: true,\n        configurable: true\n      }});\n    if (superClass)\n      Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass;\n  }\n  var _PromiseObservable = require(\"@reactivex/rxjs/dist/cjs/observables/PromiseObservable\");\n  var _PromiseObservable2 = _interopRequireDefault(_PromiseObservable);\n  var _IteratorObservable = require(\"@reactivex/rxjs/dist/cjs/observables/IteratorObservable\");\n  var _IteratorObservable2 = _interopRequireDefault(_IteratorObservable);\n  var _ArrayObservable = require(\"@reactivex/rxjs/dist/cjs/observables/ArrayObservable\");\n  var _ArrayObservable2 = _interopRequireDefault(_ArrayObservable);\n  var _utilSymbol_observable = require(\"@reactivex/rxjs/dist/cjs/util/Symbol_observable\");\n  var _utilSymbol_observable2 = _interopRequireDefault(_utilSymbol_observable);\n  var _utilSymbol_iterator = require(\"@reactivex/rxjs/dist/cjs/util/Symbol_iterator\");\n  var _utilSymbol_iterator2 = _interopRequireDefault(_utilSymbol_iterator);\n  var _Observable2 = require(\"@reactivex/rxjs/dist/cjs/Observable\");\n  var _Observable3 = _interopRequireDefault(_Observable2);\n  var _operatorsObserveOnSupport = require(\"@reactivex/rxjs/dist/cjs/operators/observeOn-support\");\n  var _schedulersImmediate = require(\"@reactivex/rxjs/dist/cjs/schedulers/immediate\");\n  var _schedulersImmediate2 = _interopRequireDefault(_schedulersImmediate);\n  var isArray = Array.isArray;\n  var FromObservable = (function(_Observable) {\n    _inherits(FromObservable, _Observable);\n    function FromObservable(ish, scheduler) {\n      _classCallCheck(this, FromObservable);\n      _Observable.call(this, null);\n      this.ish = ish;\n      this.scheduler = scheduler;\n    }\n    FromObservable.create = function create(ish) {\n      var scheduler = arguments.length <= 1 || arguments[1] === undefined ? _schedulersImmediate2['default'] : arguments[1];\n      if (ish) {\n        if (isArray(ish)) {\n          return new _ArrayObservable2['default'](ish, scheduler);\n        } else if (typeof ish.then === 'function') {\n          return new _PromiseObservable2['default'](ish, scheduler);\n        } else if (typeof ish[_utilSymbol_observable2['default']] === 'function') {\n          if (ish instanceof _Observable3['default']) {\n            return ish;\n          }\n          return new FromObservable(ish, scheduler);\n        } else if (typeof ish[_utilSymbol_iterator2['default']] === 'function') {\n          return new _IteratorObservable2['default'](ish, null, null, scheduler);\n        }\n      }\n      throw new TypeError(typeof ish + ' is not observable');\n    };\n    FromObservable.prototype._subscribe = function _subscribe(subscriber) {\n      var ish = this.ish;\n      var scheduler = this.scheduler;\n      if (scheduler === _schedulersImmediate2['default']) {\n        return ish[_utilSymbol_observable2['default']]().subscribe(subscriber);\n      } else {\n        return ish[_utilSymbol_observable2['default']]().subscribe(new _operatorsObserveOnSupport.ObserveOnSubscriber(subscriber, scheduler, 0));\n      }\n    };\n    return FromObservable;\n  })(_Observable3['default']);\n  exports['default'] = FromObservable;\n  module.exports = exports['default'];\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"@reactivex/rxjs/dist/cjs/schedulers/NextTickScheduler\", [\"@reactivex/rxjs/dist/cjs/schedulers/ImmediateScheduler\", \"@reactivex/rxjs/dist/cjs/schedulers/NextTickAction\", \"@reactivex/rxjs/dist/cjs/schedulers/ImmediateAction\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  'use strict';\n  exports.__esModule = true;\n  function _interopRequireDefault(obj) {\n    return obj && obj.__esModule ? obj : {'default': obj};\n  }\n  function _classCallCheck(instance, Constructor) {\n    if (!(instance instanceof Constructor)) {\n      throw new TypeError('Cannot call a class as a function');\n    }\n  }\n  function _inherits(subClass, superClass) {\n    if (typeof superClass !== 'function' && superClass !== null) {\n      throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass);\n    }\n    subClass.prototype = Object.create(superClass && superClass.prototype, {constructor: {\n        value: subClass,\n        enumerable: false,\n        writable: true,\n        configurable: true\n      }});\n    if (superClass)\n      Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass;\n  }\n  var _ImmediateScheduler2 = require(\"@reactivex/rxjs/dist/cjs/schedulers/ImmediateScheduler\");\n  var _ImmediateScheduler3 = _interopRequireDefault(_ImmediateScheduler2);\n  var _NextTickAction = require(\"@reactivex/rxjs/dist/cjs/schedulers/NextTickAction\");\n  var _NextTickAction2 = _interopRequireDefault(_NextTickAction);\n  var _ImmediateAction = require(\"@reactivex/rxjs/dist/cjs/schedulers/ImmediateAction\");\n  var _ImmediateAction2 = _interopRequireDefault(_ImmediateAction);\n  var NextTickScheduler = (function(_ImmediateScheduler) {\n    _inherits(NextTickScheduler, _ImmediateScheduler);\n    function NextTickScheduler() {\n      _classCallCheck(this, NextTickScheduler);\n      _ImmediateScheduler.apply(this, arguments);\n    }\n    NextTickScheduler.prototype.scheduleNow = function scheduleNow(work, state) {\n      return (this.scheduled ? new _ImmediateAction2['default'](this, work) : new _NextTickAction2['default'](this, work)).schedule(state);\n    };\n    return NextTickScheduler;\n  })(_ImmediateScheduler3['default']);\n  exports['default'] = NextTickScheduler;\n  module.exports = exports['default'];\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"@reactivex/rxjs/dist/cjs/operators/groupBy\", [\"@reactivex/rxjs/dist/cjs/Subscriber\", \"@reactivex/rxjs/dist/cjs/Observable\", \"@reactivex/rxjs/dist/cjs/Subject\", \"@reactivex/rxjs/dist/cjs/util/Map\", \"@reactivex/rxjs/dist/cjs/util/FastMap\", \"@reactivex/rxjs/dist/cjs/operators/groupBy-support\", \"@reactivex/rxjs/dist/cjs/util/tryCatch\", \"@reactivex/rxjs/dist/cjs/util/errorObject\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  'use strict';\n  exports.__esModule = true;\n  exports.groupBy = groupBy;\n  function _interopRequireDefault(obj) {\n    return obj && obj.__esModule ? obj : {'default': obj};\n  }\n  function _classCallCheck(instance, Constructor) {\n    if (!(instance instanceof Constructor)) {\n      throw new TypeError('Cannot call a class as a function');\n    }\n  }\n  function _inherits(subClass, superClass) {\n    if (typeof superClass !== 'function' && superClass !== null) {\n      throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass);\n    }\n    subClass.prototype = Object.create(superClass && superClass.prototype, {constructor: {\n        value: subClass,\n        enumerable: false,\n        writable: true,\n        configurable: true\n      }});\n    if (superClass)\n      Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass;\n  }\n  var _Subscriber3 = require(\"@reactivex/rxjs/dist/cjs/Subscriber\");\n  var _Subscriber4 = _interopRequireDefault(_Subscriber3);\n  var _Observable2 = require(\"@reactivex/rxjs/dist/cjs/Observable\");\n  var _Observable3 = _interopRequireDefault(_Observable2);\n  var _Subject = require(\"@reactivex/rxjs/dist/cjs/Subject\");\n  var _Subject2 = _interopRequireDefault(_Subject);\n  var _utilMap = require(\"@reactivex/rxjs/dist/cjs/util/Map\");\n  var _utilMap2 = _interopRequireDefault(_utilMap);\n  var _utilFastMap = require(\"@reactivex/rxjs/dist/cjs/util/FastMap\");\n  var _utilFastMap2 = _interopRequireDefault(_utilFastMap);\n  var _groupBySupport = require(\"@reactivex/rxjs/dist/cjs/operators/groupBy-support\");\n  var _utilTryCatch = require(\"@reactivex/rxjs/dist/cjs/util/tryCatch\");\n  var _utilTryCatch2 = _interopRequireDefault(_utilTryCatch);\n  var _utilErrorObject = require(\"@reactivex/rxjs/dist/cjs/util/errorObject\");\n  function groupBy(keySelector, elementSelector, durationSelector) {\n    return new GroupByObservable(this, keySelector, elementSelector, durationSelector);\n  }\n  var GroupByObservable = (function(_Observable) {\n    _inherits(GroupByObservable, _Observable);\n    function GroupByObservable(source, keySelector, elementSelector, durationSelector) {\n      _classCallCheck(this, GroupByObservable);\n      _Observable.call(this);\n      this.source = source;\n      this.keySelector = keySelector;\n      this.elementSelector = elementSelector;\n      this.durationSelector = durationSelector;\n    }\n    GroupByObservable.prototype._subscribe = function _subscribe(subscriber) {\n      var refCountSubscription = new _groupBySupport.RefCountSubscription();\n      var groupBySubscriber = new GroupBySubscriber(subscriber, refCountSubscription, this.keySelector, this.elementSelector, this.durationSelector);\n      refCountSubscription.setPrimary(this.source.subscribe(groupBySubscriber));\n      return refCountSubscription;\n    };\n    return GroupByObservable;\n  })(_Observable3['default']);\n  exports.GroupByObservable = GroupByObservable;\n  var GroupBySubscriber = (function(_Subscriber) {\n    _inherits(GroupBySubscriber, _Subscriber);\n    function GroupBySubscriber(destination, refCountSubscription, keySelector, elementSelector, durationSelector) {\n      _classCallCheck(this, GroupBySubscriber);\n      _Subscriber.call(this);\n      this.refCountSubscription = refCountSubscription;\n      this.keySelector = keySelector;\n      this.elementSelector = elementSelector;\n      this.durationSelector = durationSelector;\n      this.groups = null;\n      this.destination = destination;\n      this.add(destination);\n    }\n    GroupBySubscriber.prototype._next = function _next(x) {\n      var key = _utilTryCatch2['default'](this.keySelector)(x);\n      if (key === _utilErrorObject.errorObject) {\n        this.error(key.e);\n      } else {\n        var groups = this.groups;\n        var elementSelector = this.elementSelector;\n        var durationSelector = this.durationSelector;\n        if (!groups) {\n          groups = this.groups = typeof key === 'string' ? new _utilFastMap2['default']() : new _utilMap2['default']();\n        }\n        var group = groups.get(key);\n        if (!group) {\n          groups.set(key, group = new _Subject2['default']());\n          var groupedObservable = new _groupBySupport.GroupedObservable(key, group, this.refCountSubscription);\n          if (durationSelector) {\n            var duration = _utilTryCatch2['default'](durationSelector)(new _groupBySupport.GroupedObservable(key, group));\n            if (duration === _utilErrorObject.errorObject) {\n              this.error(duration.e);\n            } else {\n              this.add(duration._subscribe(new GroupDurationSubscriber(key, group, this)));\n            }\n          }\n          this.destination.next(groupedObservable);\n        }\n        if (elementSelector) {\n          var value = _utilTryCatch2['default'](elementSelector)(x);\n          if (value === _utilErrorObject.errorObject) {\n            this.error(value.e);\n          } else {\n            group.next(value);\n          }\n        } else {\n          group.next(x);\n        }\n      }\n    };\n    GroupBySubscriber.prototype._error = function _error(err) {\n      var _this = this;\n      var groups = this.groups;\n      if (groups) {\n        groups.forEach(function(group, key) {\n          group.error(err);\n          _this.removeGroup(key);\n        });\n      }\n      this.destination.error(err);\n    };\n    GroupBySubscriber.prototype._complete = function _complete() {\n      var _this2 = this;\n      var groups = this.groups;\n      if (groups) {\n        groups.forEach(function(group, key) {\n          group.complete();\n          _this2.removeGroup(group);\n        });\n      }\n      this.destination.complete();\n    };\n    GroupBySubscriber.prototype.removeGroup = function removeGroup(key) {\n      this.groups['delete'](key);\n    };\n    return GroupBySubscriber;\n  })(_Subscriber4['default']);\n  var GroupDurationSubscriber = (function(_Subscriber2) {\n    _inherits(GroupDurationSubscriber, _Subscriber2);\n    function GroupDurationSubscriber(key, group, parent) {\n      _classCallCheck(this, GroupDurationSubscriber);\n      _Subscriber2.call(this, null);\n      this.key = key;\n      this.group = group;\n      this.parent = parent;\n    }\n    GroupDurationSubscriber.prototype._next = function _next(value) {\n      this.group.complete();\n      this.parent.removeGroup(this.key);\n    };\n    GroupDurationSubscriber.prototype._error = function _error(err) {\n      this.group.error(err);\n      this.parent.removeGroup(this.key);\n    };\n    GroupDurationSubscriber.prototype._complete = function _complete() {\n      this.group.complete();\n      this.parent.removeGroup(this.key);\n    };\n    return GroupDurationSubscriber;\n  })(_Subscriber4['default']);\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"angular2/src/core/di/provider\", [\"angular2/src/facade/lang\", \"angular2/src/facade/exceptions\", \"angular2/src/facade/collection\", \"angular2/src/core/reflection/reflection\", \"angular2/src/core/di/key\", \"angular2/src/core/di/metadata\", \"angular2/src/core/di/exceptions\", \"angular2/src/core/di/forward_ref\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  var __extends = (this && this.__extends) || function(d, b) {\n    for (var p in b)\n      if (b.hasOwnProperty(p))\n        d[p] = b[p];\n    function __() {\n      this.constructor = d;\n    }\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n  };\n  var __decorate = (this && this.__decorate) || function(decorators, target, key, desc) {\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\")\n      return Reflect.decorate(decorators, target, key, desc);\n    switch (arguments.length) {\n      case 2:\n        return decorators.reduceRight(function(o, d) {\n          return (d && d(o)) || o;\n        }, target);\n      case 3:\n        return decorators.reduceRight(function(o, d) {\n          return (d && d(target, key)), void 0;\n        }, void 0);\n      case 4:\n        return decorators.reduceRight(function(o, d) {\n          return (d && d(target, key, o)) || o;\n        }, desc);\n    }\n  };\n  var __metadata = (this && this.__metadata) || function(k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\")\n      return Reflect.metadata(k, v);\n  };\n  var lang_1 = require(\"angular2/src/facade/lang\");\n  var exceptions_1 = require(\"angular2/src/facade/exceptions\");\n  var collection_1 = require(\"angular2/src/facade/collection\");\n  var reflection_1 = require(\"angular2/src/core/reflection/reflection\");\n  var key_1 = require(\"angular2/src/core/di/key\");\n  var metadata_1 = require(\"angular2/src/core/di/metadata\");\n  var exceptions_2 = require(\"angular2/src/core/di/exceptions\");\n  var forward_ref_1 = require(\"angular2/src/core/di/forward_ref\");\n  var Dependency = (function() {\n    function Dependency(key, optional, lowerBoundVisibility, upperBoundVisibility, properties) {\n      this.key = key;\n      this.optional = optional;\n      this.lowerBoundVisibility = lowerBoundVisibility;\n      this.upperBoundVisibility = upperBoundVisibility;\n      this.properties = properties;\n    }\n    Dependency.fromKey = function(key) {\n      return new Dependency(key, false, null, null, []);\n    };\n    return Dependency;\n  })();\n  exports.Dependency = Dependency;\n  var _EMPTY_LIST = lang_1.CONST_EXPR([]);\n  var Provider = (function() {\n    function Provider(token, _a) {\n      var useClass = _a.useClass,\n          useValue = _a.useValue,\n          useExisting = _a.useExisting,\n          useFactory = _a.useFactory,\n          deps = _a.deps,\n          multi = _a.multi;\n      this.token = token;\n      this.useClass = useClass;\n      this.useValue = useValue;\n      this.useExisting = useExisting;\n      this.useFactory = useFactory;\n      this.dependencies = deps;\n      this._multi = multi;\n    }\n    Object.defineProperty(Provider.prototype, \"multi\", {\n      get: function() {\n        return lang_1.normalizeBool(this._multi);\n      },\n      enumerable: true,\n      configurable: true\n    });\n    Provider = __decorate([lang_1.CONST(), __metadata('design:paramtypes', [Object, Object])], Provider);\n    return Provider;\n  })();\n  exports.Provider = Provider;\n  var Binding = (function(_super) {\n    __extends(Binding, _super);\n    function Binding(token, _a) {\n      var toClass = _a.toClass,\n          toValue = _a.toValue,\n          toAlias = _a.toAlias,\n          toFactory = _a.toFactory,\n          deps = _a.deps,\n          multi = _a.multi;\n      _super.call(this, token, {\n        useClass: toClass,\n        useValue: toValue,\n        useExisting: toAlias,\n        useFactory: toFactory,\n        deps: deps,\n        multi: multi\n      });\n    }\n    Object.defineProperty(Binding.prototype, \"toClass\", {\n      get: function() {\n        return this.useClass;\n      },\n      enumerable: true,\n      configurable: true\n    });\n    Object.defineProperty(Binding.prototype, \"toAlias\", {\n      get: function() {\n        return this.useExisting;\n      },\n      enumerable: true,\n      configurable: true\n    });\n    Object.defineProperty(Binding.prototype, \"toFactory\", {\n      get: function() {\n        return this.useFactory;\n      },\n      enumerable: true,\n      configurable: true\n    });\n    Object.defineProperty(Binding.prototype, \"toValue\", {\n      get: function() {\n        return this.useValue;\n      },\n      enumerable: true,\n      configurable: true\n    });\n    Binding = __decorate([lang_1.CONST(), __metadata('design:paramtypes', [Object, Object])], Binding);\n    return Binding;\n  })(Provider);\n  exports.Binding = Binding;\n  var ResolvedProvider_ = (function() {\n    function ResolvedProvider_(key, resolvedFactories, multiProvider) {\n      this.key = key;\n      this.resolvedFactories = resolvedFactories;\n      this.multiProvider = multiProvider;\n    }\n    Object.defineProperty(ResolvedProvider_.prototype, \"resolvedFactory\", {\n      get: function() {\n        return this.resolvedFactories[0];\n      },\n      enumerable: true,\n      configurable: true\n    });\n    return ResolvedProvider_;\n  })();\n  exports.ResolvedProvider_ = ResolvedProvider_;\n  var ResolvedFactory = (function() {\n    function ResolvedFactory(factory, dependencies) {\n      this.factory = factory;\n      this.dependencies = dependencies;\n    }\n    return ResolvedFactory;\n  })();\n  exports.ResolvedFactory = ResolvedFactory;\n  function bind(token) {\n    return new ProviderBuilder(token);\n  }\n  exports.bind = bind;\n  function provide(token, _a) {\n    var useClass = _a.useClass,\n        useValue = _a.useValue,\n        useExisting = _a.useExisting,\n        useFactory = _a.useFactory,\n        deps = _a.deps,\n        multi = _a.multi;\n    return new Provider(token, {\n      useClass: useClass,\n      useValue: useValue,\n      useExisting: useExisting,\n      useFactory: useFactory,\n      deps: deps,\n      multi: multi\n    });\n  }\n  exports.provide = provide;\n  var ProviderBuilder = (function() {\n    function ProviderBuilder(token) {\n      this.token = token;\n    }\n    ProviderBuilder.prototype.toClass = function(type) {\n      if (!lang_1.isType(type)) {\n        throw new exceptions_1.BaseException(\"Trying to create a class provider but \\\"\" + lang_1.stringify(type) + \"\\\" is not a class!\");\n      }\n      return new Provider(this.token, {useClass: type});\n    };\n    ProviderBuilder.prototype.toValue = function(value) {\n      return new Provider(this.token, {useValue: value});\n    };\n    ProviderBuilder.prototype.toAlias = function(aliasToken) {\n      if (lang_1.isBlank(aliasToken)) {\n        throw new exceptions_1.BaseException(\"Can not alias \" + lang_1.stringify(this.token) + \" to a blank value!\");\n      }\n      return new Provider(this.token, {useExisting: aliasToken});\n    };\n    ProviderBuilder.prototype.toFactory = function(factory, dependencies) {\n      if (!lang_1.isFunction(factory)) {\n        throw new exceptions_1.BaseException(\"Trying to create a factory provider but \\\"\" + lang_1.stringify(factory) + \"\\\" is not a function!\");\n      }\n      return new Provider(this.token, {\n        useFactory: factory,\n        deps: dependencies\n      });\n    };\n    return ProviderBuilder;\n  })();\n  exports.ProviderBuilder = ProviderBuilder;\n  function resolveFactory(provider) {\n    var factoryFn;\n    var resolvedDeps;\n    if (lang_1.isPresent(provider.useClass)) {\n      var useClass = forward_ref_1.resolveForwardRef(provider.useClass);\n      factoryFn = reflection_1.reflector.factory(useClass);\n      resolvedDeps = _dependenciesFor(useClass);\n    } else if (lang_1.isPresent(provider.useExisting)) {\n      factoryFn = function(aliasInstance) {\n        return aliasInstance;\n      };\n      resolvedDeps = [Dependency.fromKey(key_1.Key.get(provider.useExisting))];\n    } else if (lang_1.isPresent(provider.useFactory)) {\n      factoryFn = provider.useFactory;\n      resolvedDeps = _constructDependencies(provider.useFactory, provider.dependencies);\n    } else {\n      factoryFn = function() {\n        return provider.useValue;\n      };\n      resolvedDeps = _EMPTY_LIST;\n    }\n    return new ResolvedFactory(factoryFn, resolvedDeps);\n  }\n  exports.resolveFactory = resolveFactory;\n  function resolveProvider(provider) {\n    return new ResolvedProvider_(key_1.Key.get(provider.token), [resolveFactory(provider)], false);\n  }\n  exports.resolveProvider = resolveProvider;\n  function resolveProviders(providers) {\n    var normalized = _createListOfProviders(_normalizeProviders(providers, new Map()));\n    return normalized.map(function(b) {\n      if (b instanceof _NormalizedProvider) {\n        return new ResolvedProvider_(b.key, [b.resolvedFactory], false);\n      } else {\n        var arr = b;\n        return new ResolvedProvider_(arr[0].key, arr.map(function(_) {\n          return _.resolvedFactory;\n        }), true);\n      }\n    });\n  }\n  exports.resolveProviders = resolveProviders;\n  var _NormalizedProvider = (function() {\n    function _NormalizedProvider(key, resolvedFactory) {\n      this.key = key;\n      this.resolvedFactory = resolvedFactory;\n    }\n    return _NormalizedProvider;\n  })();\n  function _createListOfProviders(flattenedProviders) {\n    return collection_1.MapWrapper.values(flattenedProviders);\n  }\n  function _normalizeProviders(providers, res) {\n    providers.forEach(function(b) {\n      if (b instanceof lang_1.Type) {\n        _normalizeProvider(provide(b, {useClass: b}), res);\n      } else if (b instanceof Provider) {\n        _normalizeProvider(b, res);\n      } else if (b instanceof Array) {\n        _normalizeProviders(b, res);\n      } else if (b instanceof ProviderBuilder) {\n        throw new exceptions_2.InvalidProviderError(b.token);\n      } else {\n        throw new exceptions_2.InvalidProviderError(b);\n      }\n    });\n    return res;\n  }\n  function _normalizeProvider(b, res) {\n    var key = key_1.Key.get(b.token);\n    var factory = resolveFactory(b);\n    var normalized = new _NormalizedProvider(key, factory);\n    if (b.multi) {\n      var existingProvider = res.get(key.id);\n      if (existingProvider instanceof Array) {\n        existingProvider.push(normalized);\n      } else if (lang_1.isBlank(existingProvider)) {\n        res.set(key.id, [normalized]);\n      } else {\n        throw new exceptions_2.MixingMultiProvidersWithRegularProvidersError(existingProvider, b);\n      }\n    } else {\n      var existingProvider = res.get(key.id);\n      if (existingProvider instanceof Array) {\n        throw new exceptions_2.MixingMultiProvidersWithRegularProvidersError(existingProvider, b);\n      }\n      res.set(key.id, normalized);\n    }\n  }\n  function _constructDependencies(factoryFunction, dependencies) {\n    if (lang_1.isBlank(dependencies)) {\n      return _dependenciesFor(factoryFunction);\n    } else {\n      var params = dependencies.map(function(t) {\n        return [t];\n      });\n      return dependencies.map(function(t) {\n        return _extractToken(factoryFunction, t, params);\n      });\n    }\n  }\n  function _dependenciesFor(typeOrFunc) {\n    var params = reflection_1.reflector.parameters(typeOrFunc);\n    if (lang_1.isBlank(params))\n      return [];\n    if (params.some(lang_1.isBlank)) {\n      throw new exceptions_2.NoAnnotationError(typeOrFunc, params);\n    }\n    return params.map(function(p) {\n      return _extractToken(typeOrFunc, p, params);\n    });\n  }\n  function _extractToken(typeOrFunc, metadata, params) {\n    var depProps = [];\n    var token = null;\n    var optional = false;\n    if (!lang_1.isArray(metadata)) {\n      if (metadata instanceof metadata_1.InjectMetadata) {\n        return _createDependency(metadata.token, optional, null, null, depProps);\n      } else {\n        return _createDependency(metadata, optional, null, null, depProps);\n      }\n    }\n    var lowerBoundVisibility = null;\n    var upperBoundVisibility = null;\n    for (var i = 0; i < metadata.length; ++i) {\n      var paramMetadata = metadata[i];\n      if (paramMetadata instanceof lang_1.Type) {\n        token = paramMetadata;\n      } else if (paramMetadata instanceof metadata_1.InjectMetadata) {\n        token = paramMetadata.token;\n      } else if (paramMetadata instanceof metadata_1.OptionalMetadata) {\n        optional = true;\n      } else if (paramMetadata instanceof metadata_1.SelfMetadata) {\n        upperBoundVisibility = paramMetadata;\n      } else if (paramMetadata instanceof metadata_1.HostMetadata) {\n        upperBoundVisibility = paramMetadata;\n      } else if (paramMetadata instanceof metadata_1.SkipSelfMetadata) {\n        lowerBoundVisibility = paramMetadata;\n      } else if (paramMetadata instanceof metadata_1.DependencyMetadata) {\n        if (lang_1.isPresent(paramMetadata.token)) {\n          token = paramMetadata.token;\n        }\n        depProps.push(paramMetadata);\n      }\n    }\n    token = forward_ref_1.resolveForwardRef(token);\n    if (lang_1.isPresent(token)) {\n      return _createDependency(token, optional, lowerBoundVisibility, upperBoundVisibility, depProps);\n    } else {\n      throw new exceptions_2.NoAnnotationError(typeOrFunc, params);\n    }\n  }\n  function _createDependency(token, optional, lowerBoundVisibility, upperBoundVisibility, depProps) {\n    return new Dependency(key_1.Key.get(token), optional, lowerBoundVisibility, upperBoundVisibility, depProps);\n  }\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"angular2/src/core/change_detection/abstract_change_detector\", [\"angular2/src/facade/lang\", \"angular2/src/facade/collection\", \"angular2/src/core/change_detection/change_detection_util\", \"angular2/src/core/change_detection/change_detector_ref\", \"angular2/src/core/change_detection/exceptions\", \"angular2/src/core/change_detection/constants\", \"angular2/src/core/profile/profile\", \"angular2/src/core/change_detection/observable_facade\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  var lang_1 = require(\"angular2/src/facade/lang\");\n  var collection_1 = require(\"angular2/src/facade/collection\");\n  var change_detection_util_1 = require(\"angular2/src/core/change_detection/change_detection_util\");\n  var change_detector_ref_1 = require(\"angular2/src/core/change_detection/change_detector_ref\");\n  var exceptions_1 = require(\"angular2/src/core/change_detection/exceptions\");\n  var constants_1 = require(\"angular2/src/core/change_detection/constants\");\n  var profile_1 = require(\"angular2/src/core/profile/profile\");\n  var observable_facade_1 = require(\"angular2/src/core/change_detection/observable_facade\");\n  var _scope_check = profile_1.wtfCreateScope(\"ChangeDetector#check(ascii id, bool throwOnChange)\");\n  var _Context = (function() {\n    function _Context(element, componentElement, context, locals, injector, expression) {\n      this.element = element;\n      this.componentElement = componentElement;\n      this.context = context;\n      this.locals = locals;\n      this.injector = injector;\n      this.expression = expression;\n    }\n    return _Context;\n  })();\n  var AbstractChangeDetector = (function() {\n    function AbstractChangeDetector(id, dispatcher, numberOfPropertyProtoRecords, bindingTargets, directiveIndices, strategy) {\n      this.id = id;\n      this.dispatcher = dispatcher;\n      this.numberOfPropertyProtoRecords = numberOfPropertyProtoRecords;\n      this.bindingTargets = bindingTargets;\n      this.directiveIndices = directiveIndices;\n      this.strategy = strategy;\n      this.contentChildren = [];\n      this.viewChildren = [];\n      this.state = constants_1.ChangeDetectorState.NeverChecked;\n      this.locals = null;\n      this.mode = null;\n      this.pipes = null;\n      this.ref = new change_detector_ref_1.ChangeDetectorRef_(this);\n    }\n    AbstractChangeDetector.prototype.addContentChild = function(cd) {\n      this.contentChildren.push(cd);\n      cd.parent = this;\n    };\n    AbstractChangeDetector.prototype.removeContentChild = function(cd) {\n      collection_1.ListWrapper.remove(this.contentChildren, cd);\n    };\n    AbstractChangeDetector.prototype.addViewChild = function(cd) {\n      this.viewChildren.push(cd);\n      cd.parent = this;\n    };\n    AbstractChangeDetector.prototype.removeViewChild = function(cd) {\n      collection_1.ListWrapper.remove(this.viewChildren, cd);\n    };\n    AbstractChangeDetector.prototype.remove = function() {\n      this.parent.removeContentChild(this);\n    };\n    AbstractChangeDetector.prototype.handleEvent = function(eventName, elIndex, locals) {\n      var res = this.handleEventInternal(eventName, elIndex, locals);\n      this.markPathToRootAsCheckOnce();\n      return res;\n    };\n    AbstractChangeDetector.prototype.handleEventInternal = function(eventName, elIndex, locals) {\n      return false;\n    };\n    AbstractChangeDetector.prototype.detectChanges = function() {\n      this.runDetectChanges(false);\n    };\n    AbstractChangeDetector.prototype.checkNoChanges = function() {\n      if (lang_1.assertionsEnabled()) {\n        this.runDetectChanges(true);\n      }\n    };\n    AbstractChangeDetector.prototype.runDetectChanges = function(throwOnChange) {\n      if (this.mode === constants_1.ChangeDetectionStrategy.Detached || this.mode === constants_1.ChangeDetectionStrategy.Checked || this.state === constants_1.ChangeDetectorState.Errored)\n        return ;\n      var s = _scope_check(this.id, throwOnChange);\n      this.detectChangesInRecords(throwOnChange);\n      this._detectChangesContentChildren(throwOnChange);\n      if (!throwOnChange)\n        this.afterContentLifecycleCallbacks();\n      this._detectChangesInViewChildren(throwOnChange);\n      if (!throwOnChange)\n        this.afterViewLifecycleCallbacks();\n      if (this.mode === constants_1.ChangeDetectionStrategy.CheckOnce)\n        this.mode = constants_1.ChangeDetectionStrategy.Checked;\n      this.state = constants_1.ChangeDetectorState.CheckedBefore;\n      profile_1.wtfLeave(s);\n    };\n    AbstractChangeDetector.prototype.detectChangesInRecords = function(throwOnChange) {\n      if (!this.hydrated()) {\n        this.throwDehydratedError();\n      }\n      try {\n        this.detectChangesInRecordsInternal(throwOnChange);\n      } catch (e) {\n        if (!(e instanceof exceptions_1.ExpressionChangedAfterItHasBeenCheckedException)) {\n          this.state = constants_1.ChangeDetectorState.Errored;\n        }\n        this._throwError(e, e.stack);\n      }\n    };\n    AbstractChangeDetector.prototype.detectChangesInRecordsInternal = function(throwOnChange) {};\n    AbstractChangeDetector.prototype.hydrate = function(context, locals, directives, pipes) {\n      this.mode = change_detection_util_1.ChangeDetectionUtil.changeDetectionMode(this.strategy);\n      this.context = context;\n      if (this.strategy === constants_1.ChangeDetectionStrategy.OnPushObserve) {\n        this.observeComponent(context);\n      }\n      this.locals = locals;\n      this.pipes = pipes;\n      this.hydrateDirectives(directives);\n      this.state = constants_1.ChangeDetectorState.NeverChecked;\n    };\n    AbstractChangeDetector.prototype.hydrateDirectives = function(directives) {};\n    AbstractChangeDetector.prototype.dehydrate = function() {\n      this.dehydrateDirectives(true);\n      if (this.strategy === constants_1.ChangeDetectionStrategy.OnPushObserve) {\n        this._unsubsribeFromObservables();\n      }\n      this.context = null;\n      this.locals = null;\n      this.pipes = null;\n    };\n    AbstractChangeDetector.prototype.dehydrateDirectives = function(destroyPipes) {};\n    AbstractChangeDetector.prototype.hydrated = function() {\n      return this.context !== null;\n    };\n    AbstractChangeDetector.prototype.afterContentLifecycleCallbacks = function() {\n      this.dispatcher.notifyAfterContentChecked();\n      this.afterContentLifecycleCallbacksInternal();\n    };\n    AbstractChangeDetector.prototype.afterContentLifecycleCallbacksInternal = function() {};\n    AbstractChangeDetector.prototype.afterViewLifecycleCallbacks = function() {\n      this.dispatcher.notifyAfterViewChecked();\n      this.afterViewLifecycleCallbacksInternal();\n    };\n    AbstractChangeDetector.prototype.afterViewLifecycleCallbacksInternal = function() {};\n    AbstractChangeDetector.prototype._detectChangesContentChildren = function(throwOnChange) {\n      var c = this.contentChildren;\n      for (var i = 0; i < c.length; ++i) {\n        c[i].runDetectChanges(throwOnChange);\n      }\n    };\n    AbstractChangeDetector.prototype._detectChangesInViewChildren = function(throwOnChange) {\n      var c = this.viewChildren;\n      for (var i = 0; i < c.length; ++i) {\n        c[i].runDetectChanges(throwOnChange);\n      }\n    };\n    AbstractChangeDetector.prototype.markAsCheckOnce = function() {\n      this.mode = constants_1.ChangeDetectionStrategy.CheckOnce;\n    };\n    AbstractChangeDetector.prototype.markPathToRootAsCheckOnce = function() {\n      var c = this;\n      while (lang_1.isPresent(c) && c.mode !== constants_1.ChangeDetectionStrategy.Detached) {\n        if (c.mode === constants_1.ChangeDetectionStrategy.Checked)\n          c.mode = constants_1.ChangeDetectionStrategy.CheckOnce;\n        c = c.parent;\n      }\n    };\n    AbstractChangeDetector.prototype._unsubsribeFromObservables = function() {\n      if (lang_1.isPresent(this.subscriptions)) {\n        for (var i = 0; i < this.subscriptions.length; ++i) {\n          var s = this.subscriptions[i];\n          if (lang_1.isPresent(this.subscriptions[i])) {\n            s.cancel();\n            this.subscriptions[i] = null;\n          }\n        }\n      }\n    };\n    AbstractChangeDetector.prototype.observeValue = function(value, index) {\n      var _this = this;\n      if (observable_facade_1.isObservable(value)) {\n        this._createArrayToStoreObservables();\n        if (lang_1.isBlank(this.subscriptions[index])) {\n          this.streams[index] = value.changes;\n          this.subscriptions[index] = value.changes.listen(function(_) {\n            return _this.ref.markForCheck();\n          });\n        } else if (this.streams[index] !== value.changes) {\n          this.subscriptions[index].cancel();\n          this.streams[index] = value.changes;\n          this.subscriptions[index] = value.changes.listen(function(_) {\n            return _this.ref.markForCheck();\n          });\n        }\n      }\n      return value;\n    };\n    AbstractChangeDetector.prototype.observeDirective = function(value, index) {\n      var _this = this;\n      if (observable_facade_1.isObservable(value)) {\n        this._createArrayToStoreObservables();\n        var arrayIndex = this.numberOfPropertyProtoRecords + index + 2;\n        this.streams[arrayIndex] = value.changes;\n        this.subscriptions[arrayIndex] = value.changes.listen(function(_) {\n          return _this.ref.markForCheck();\n        });\n      }\n      return value;\n    };\n    AbstractChangeDetector.prototype.observeComponent = function(value) {\n      var _this = this;\n      if (observable_facade_1.isObservable(value)) {\n        this._createArrayToStoreObservables();\n        var index = this.numberOfPropertyProtoRecords + 1;\n        this.streams[index] = value.changes;\n        this.subscriptions[index] = value.changes.listen(function(_) {\n          return _this.ref.markForCheck();\n        });\n      }\n      return value;\n    };\n    AbstractChangeDetector.prototype._createArrayToStoreObservables = function() {\n      if (lang_1.isBlank(this.subscriptions)) {\n        this.subscriptions = collection_1.ListWrapper.createFixedSize(this.numberOfPropertyProtoRecords + this.directiveIndices.length + 2);\n        this.streams = collection_1.ListWrapper.createFixedSize(this.numberOfPropertyProtoRecords + this.directiveIndices.length + 2);\n      }\n    };\n    AbstractChangeDetector.prototype.getDirectiveFor = function(directives, index) {\n      return directives.getDirectiveFor(this.directiveIndices[index]);\n    };\n    AbstractChangeDetector.prototype.getDetectorFor = function(directives, index) {\n      return directives.getDetectorFor(this.directiveIndices[index]);\n    };\n    AbstractChangeDetector.prototype.notifyDispatcher = function(value) {\n      this.dispatcher.notifyOnBinding(this._currentBinding(), value);\n    };\n    AbstractChangeDetector.prototype.logBindingUpdate = function(value) {\n      this.dispatcher.logBindingUpdate(this._currentBinding(), value);\n    };\n    AbstractChangeDetector.prototype.addChange = function(changes, oldValue, newValue) {\n      if (lang_1.isBlank(changes)) {\n        changes = {};\n      }\n      changes[this._currentBinding().name] = change_detection_util_1.ChangeDetectionUtil.simpleChange(oldValue, newValue);\n      return changes;\n    };\n    AbstractChangeDetector.prototype._throwError = function(exception, stack) {\n      var error;\n      try {\n        var c = this.dispatcher.getDebugContext(this._currentBinding().elementIndex, null);\n        var context = lang_1.isPresent(c) ? new _Context(c.element, c.componentElement, c.context, c.locals, c.injector, this._currentBinding().debug) : null;\n        error = new exceptions_1.ChangeDetectionError(this._currentBinding().debug, exception, stack, context);\n      } catch (e) {\n        error = new exceptions_1.ChangeDetectionError(null, exception, stack, null);\n      }\n      throw error;\n    };\n    AbstractChangeDetector.prototype.throwOnChangeError = function(oldValue, newValue) {\n      throw new exceptions_1.ExpressionChangedAfterItHasBeenCheckedException(this._currentBinding().debug, oldValue, newValue, null);\n    };\n    AbstractChangeDetector.prototype.throwDehydratedError = function() {\n      throw new exceptions_1.DehydratedException();\n    };\n    AbstractChangeDetector.prototype._currentBinding = function() {\n      return this.bindingTargets[this.propertyBindingIndex];\n    };\n    return AbstractChangeDetector;\n  })();\n  exports.AbstractChangeDetector = AbstractChangeDetector;\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"angular2/src/core/change_detection/change_detection_jit_generator\", [\"angular2/src/facade/lang\", \"angular2/src/facade/exceptions\", \"angular2/src/facade/collection\", \"angular2/src/core/change_detection/abstract_change_detector\", \"angular2/src/core/change_detection/change_detection_util\", \"angular2/src/core/change_detection/proto_record\", \"angular2/src/core/change_detection/codegen_name_util\", \"angular2/src/core/change_detection/codegen_logic_util\", \"angular2/src/core/change_detection/codegen_facade\", \"angular2/src/core/change_detection/constants\", \"angular2/src/core/change_detection/proto_change_detector\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  var lang_1 = require(\"angular2/src/facade/lang\");\n  var exceptions_1 = require(\"angular2/src/facade/exceptions\");\n  var collection_1 = require(\"angular2/src/facade/collection\");\n  var abstract_change_detector_1 = require(\"angular2/src/core/change_detection/abstract_change_detector\");\n  var change_detection_util_1 = require(\"angular2/src/core/change_detection/change_detection_util\");\n  var proto_record_1 = require(\"angular2/src/core/change_detection/proto_record\");\n  var codegen_name_util_1 = require(\"angular2/src/core/change_detection/codegen_name_util\");\n  var codegen_logic_util_1 = require(\"angular2/src/core/change_detection/codegen_logic_util\");\n  var codegen_facade_1 = require(\"angular2/src/core/change_detection/codegen_facade\");\n  var constants_1 = require(\"angular2/src/core/change_detection/constants\");\n  var proto_change_detector_1 = require(\"angular2/src/core/change_detection/proto_change_detector\");\n  var IS_CHANGED_LOCAL = \"isChanged\";\n  var CHANGES_LOCAL = \"changes\";\n  var ChangeDetectorJITGenerator = (function() {\n    function ChangeDetectorJITGenerator(definition, changeDetectionUtilVarName, abstractChangeDetectorVarName, changeDetectorStateVarName) {\n      this.changeDetectionUtilVarName = changeDetectionUtilVarName;\n      this.abstractChangeDetectorVarName = abstractChangeDetectorVarName;\n      this.changeDetectorStateVarName = changeDetectorStateVarName;\n      var propertyBindingRecords = proto_change_detector_1.createPropertyRecords(definition);\n      var eventBindingRecords = proto_change_detector_1.createEventRecords(definition);\n      var propertyBindingTargets = definition.bindingRecords.map(function(b) {\n        return b.target;\n      });\n      this.id = definition.id;\n      this.changeDetectionStrategy = definition.strategy;\n      this.genConfig = definition.genConfig;\n      this.records = propertyBindingRecords;\n      this.propertyBindingTargets = propertyBindingTargets;\n      this.eventBindings = eventBindingRecords;\n      this.directiveRecords = definition.directiveRecords;\n      this._names = new codegen_name_util_1.CodegenNameUtil(this.records, this.eventBindings, this.directiveRecords, this.changeDetectionUtilVarName);\n      this._logic = new codegen_logic_util_1.CodegenLogicUtil(this._names, this.changeDetectionUtilVarName, this.changeDetectorStateVarName, this.changeDetectionStrategy);\n      this.typeName = codegen_name_util_1.sanitizeName(\"ChangeDetector_\" + this.id);\n    }\n    ChangeDetectorJITGenerator.prototype.generate = function() {\n      var factorySource = \"\\n      \" + this.generateSource() + \"\\n      return function(dispatcher) {\\n        return new \" + this.typeName + \"(dispatcher);\\n      }\\n    \";\n      return new Function(this.abstractChangeDetectorVarName, this.changeDetectionUtilVarName, this.changeDetectorStateVarName, factorySource)(abstract_change_detector_1.AbstractChangeDetector, change_detection_util_1.ChangeDetectionUtil, constants_1.ChangeDetectorState);\n    };\n    ChangeDetectorJITGenerator.prototype.generateSource = function() {\n      return \"\\n      var \" + this.typeName + \" = function \" + this.typeName + \"(dispatcher) {\\n        \" + this.abstractChangeDetectorVarName + \".call(\\n            this, \" + JSON.stringify(this.id) + \", dispatcher, \" + this.records.length + \",\\n            \" + this.typeName + \".gen_propertyBindingTargets, \" + this.typeName + \".gen_directiveIndices,\\n            \" + codegen_facade_1.codify(this.changeDetectionStrategy) + \");\\n        this.dehydrateDirectives(false);\\n      }\\n\\n      \" + this.typeName + \".prototype = Object.create(\" + this.abstractChangeDetectorVarName + \".prototype);\\n\\n      \" + this.typeName + \".prototype.detectChangesInRecordsInternal = function(throwOnChange) {\\n        \" + this._names.genInitLocals() + \"\\n        var \" + IS_CHANGED_LOCAL + \" = false;\\n        var \" + CHANGES_LOCAL + \" = null;\\n\\n        \" + this._genAllRecords(this.records) + \"\\n      }\\n\\n      \" + this._maybeGenHandleEventInternal() + \"\\n\\n      \" + this._maybeGenAfterContentLifecycleCallbacks() + \"\\n\\n      \" + this._maybeGenAfterViewLifecycleCallbacks() + \"\\n\\n      \" + this._maybeGenHydrateDirectives() + \"\\n\\n      \" + this._maybeGenDehydrateDirectives() + \"\\n\\n      \" + this._genPropertyBindingTargets() + \"\\n\\n      \" + this._genDirectiveIndices() + \"\\n    \";\n    };\n    ChangeDetectorJITGenerator.prototype._genPropertyBindingTargets = function() {\n      var targets = this._logic.genPropertyBindingTargets(this.propertyBindingTargets, this.genConfig.genDebugInfo);\n      return this.typeName + \".gen_propertyBindingTargets = \" + targets + \";\";\n    };\n    ChangeDetectorJITGenerator.prototype._genDirectiveIndices = function() {\n      var indices = this._logic.genDirectiveIndices(this.directiveRecords);\n      return this.typeName + \".gen_directiveIndices = \" + indices + \";\";\n    };\n    ChangeDetectorJITGenerator.prototype._maybeGenHandleEventInternal = function() {\n      var _this = this;\n      if (this.eventBindings.length > 0) {\n        var handlers = this.eventBindings.map(function(eb) {\n          return _this._genEventBinding(eb);\n        }).join(\"\\n\");\n        return \"\\n        \" + this.typeName + \".prototype.handleEventInternal = function(eventName, elIndex, locals) {\\n          var \" + this._names.getPreventDefaultAccesor() + \" = false;\\n          \" + this._names.genInitEventLocals() + \"\\n          \" + handlers + \"\\n          return \" + this._names.getPreventDefaultAccesor() + \";\\n        }\\n      \";\n      } else {\n        return '';\n      }\n    };\n    ChangeDetectorJITGenerator.prototype._genEventBinding = function(eb) {\n      var _this = this;\n      var codes = [];\n      this._endOfBlockIdxs = [];\n      collection_1.ListWrapper.forEachWithIndex(eb.records, function(r, i) {\n        var code;\n        if (r.isConditionalSkipRecord()) {\n          code = _this._genConditionalSkip(r, _this._names.getEventLocalName(eb, i));\n        } else if (r.isUnconditionalSkipRecord()) {\n          code = _this._genUnconditionalSkip(r);\n        } else {\n          code = _this._genEventBindingEval(eb, r);\n        }\n        code += _this._genEndOfSkipBlock(i);\n        codes.push(code);\n      });\n      return \"\\n    if (eventName === \\\"\" + eb.eventName + \"\\\" && elIndex === \" + eb.elIndex + \") {\\n      \" + codes.join(\"\\n\") + \"\\n    }\";\n    };\n    ChangeDetectorJITGenerator.prototype._genEventBindingEval = function(eb, r) {\n      if (r.lastInBinding) {\n        var evalRecord = this._logic.genEventBindingEvalValue(eb, r);\n        var markPath = this._genMarkPathToRootAsCheckOnce(r);\n        var prevDefault = this._genUpdatePreventDefault(eb, r);\n        return evalRecord + \"\\n\" + markPath + \"\\n\" + prevDefault;\n      } else {\n        return this._logic.genEventBindingEvalValue(eb, r);\n      }\n    };\n    ChangeDetectorJITGenerator.prototype._genMarkPathToRootAsCheckOnce = function(r) {\n      var br = r.bindingRecord;\n      if (br.isDefaultChangeDetection()) {\n        return \"\";\n      } else {\n        return this._names.getDetectorName(br.directiveRecord.directiveIndex) + \".markPathToRootAsCheckOnce();\";\n      }\n    };\n    ChangeDetectorJITGenerator.prototype._genUpdatePreventDefault = function(eb, r) {\n      var local = this._names.getEventLocalName(eb, r.selfIndex);\n      return \"if (\" + local + \" === false) { \" + this._names.getPreventDefaultAccesor() + \" = true};\";\n    };\n    ChangeDetectorJITGenerator.prototype._maybeGenDehydrateDirectives = function() {\n      var destroyPipesCode = this._names.genPipeOnDestroy();\n      if (destroyPipesCode) {\n        destroyPipesCode = \"if (destroyPipes) { \" + destroyPipesCode + \" }\";\n      }\n      var dehydrateFieldsCode = this._names.genDehydrateFields();\n      if (!destroyPipesCode && !dehydrateFieldsCode)\n        return '';\n      return this.typeName + \".prototype.dehydrateDirectives = function(destroyPipes) {\\n        \" + destroyPipesCode + \"\\n        \" + dehydrateFieldsCode + \"\\n    }\";\n    };\n    ChangeDetectorJITGenerator.prototype._maybeGenHydrateDirectives = function() {\n      var hydrateDirectivesCode = this._logic.genHydrateDirectives(this.directiveRecords);\n      var hydrateDetectorsCode = this._logic.genHydrateDetectors(this.directiveRecords);\n      if (!hydrateDirectivesCode && !hydrateDetectorsCode)\n        return '';\n      return this.typeName + \".prototype.hydrateDirectives = function(directives) {\\n      \" + hydrateDirectivesCode + \"\\n      \" + hydrateDetectorsCode + \"\\n    }\";\n    };\n    ChangeDetectorJITGenerator.prototype._maybeGenAfterContentLifecycleCallbacks = function() {\n      var notifications = this._logic.genContentLifecycleCallbacks(this.directiveRecords);\n      if (notifications.length > 0) {\n        var directiveNotifications = notifications.join(\"\\n\");\n        return \"\\n        \" + this.typeName + \".prototype.afterContentLifecycleCallbacksInternal = function() {\\n          \" + directiveNotifications + \"\\n        }\\n      \";\n      } else {\n        return '';\n      }\n    };\n    ChangeDetectorJITGenerator.prototype._maybeGenAfterViewLifecycleCallbacks = function() {\n      var notifications = this._logic.genViewLifecycleCallbacks(this.directiveRecords);\n      if (notifications.length > 0) {\n        var directiveNotifications = notifications.join(\"\\n\");\n        return \"\\n        \" + this.typeName + \".prototype.afterViewLifecycleCallbacksInternal = function() {\\n          \" + directiveNotifications + \"\\n        }\\n      \";\n      } else {\n        return '';\n      }\n    };\n    ChangeDetectorJITGenerator.prototype._genAllRecords = function(rs) {\n      var codes = [];\n      this._endOfBlockIdxs = [];\n      for (var i = 0; i < rs.length; i++) {\n        var code = void 0;\n        var r = rs[i];\n        if (r.isLifeCycleRecord()) {\n          code = this._genDirectiveLifecycle(r);\n        } else if (r.isPipeRecord()) {\n          code = this._genPipeCheck(r);\n        } else if (r.isConditionalSkipRecord()) {\n          code = this._genConditionalSkip(r, this._names.getLocalName(r.contextIndex));\n        } else if (r.isUnconditionalSkipRecord()) {\n          code = this._genUnconditionalSkip(r);\n        } else {\n          code = this._genReferenceCheck(r);\n        }\n        code = \"\\n        \" + this._maybeFirstInBinding(r) + \"\\n        \" + code + \"\\n        \" + this._maybeGenLastInDirective(r) + \"\\n        \" + this._genEndOfSkipBlock(i) + \"\\n      \";\n        codes.push(code);\n      }\n      return codes.join(\"\\n\");\n    };\n    ChangeDetectorJITGenerator.prototype._genConditionalSkip = function(r, condition) {\n      var maybeNegate = r.mode === proto_record_1.RecordType.SkipRecordsIf ? '!' : '';\n      this._endOfBlockIdxs.push(r.fixedArgs[0] - 1);\n      return \"if (\" + maybeNegate + condition + \") {\";\n    };\n    ChangeDetectorJITGenerator.prototype._genUnconditionalSkip = function(r) {\n      this._endOfBlockIdxs.pop();\n      this._endOfBlockIdxs.push(r.fixedArgs[0] - 1);\n      return \"} else {\";\n    };\n    ChangeDetectorJITGenerator.prototype._genEndOfSkipBlock = function(protoIndex) {\n      if (!collection_1.ListWrapper.isEmpty(this._endOfBlockIdxs)) {\n        var endOfBlock = collection_1.ListWrapper.last(this._endOfBlockIdxs);\n        if (protoIndex === endOfBlock) {\n          this._endOfBlockIdxs.pop();\n          return '}';\n        }\n      }\n      return '';\n    };\n    ChangeDetectorJITGenerator.prototype._genDirectiveLifecycle = function(r) {\n      if (r.name === \"DoCheck\") {\n        return this._genOnCheck(r);\n      } else if (r.name === \"OnInit\") {\n        return this._genOnInit(r);\n      } else if (r.name === \"OnChanges\") {\n        return this._genOnChange(r);\n      } else {\n        throw new exceptions_1.BaseException(\"Unknown lifecycle event '\" + r.name + \"'\");\n      }\n    };\n    ChangeDetectorJITGenerator.prototype._genPipeCheck = function(r) {\n      var _this = this;\n      var context = this._names.getLocalName(r.contextIndex);\n      var argString = r.args.map(function(arg) {\n        return _this._names.getLocalName(arg);\n      }).join(\", \");\n      var oldValue = this._names.getFieldName(r.selfIndex);\n      var newValue = this._names.getLocalName(r.selfIndex);\n      var pipe = this._names.getPipeName(r.selfIndex);\n      var pipeName = r.name;\n      var init = \"\\n      if (\" + pipe + \" === \" + this.changeDetectionUtilVarName + \".uninitialized) {\\n        \" + pipe + \" = \" + this._names.getPipesAccessorName() + \".get('\" + pipeName + \"');\\n      }\\n    \";\n      var read = newValue + \" = \" + pipe + \".pipe.transform(\" + context + \", [\" + argString + \"]);\";\n      var contexOrArgCheck = r.args.map(function(a) {\n        return _this._names.getChangeName(a);\n      });\n      contexOrArgCheck.push(this._names.getChangeName(r.contextIndex));\n      var condition = \"!\" + pipe + \".pure || (\" + contexOrArgCheck.join(\" || \") + \")\";\n      var check = \"\\n      if (\" + this.changeDetectionUtilVarName + \".looseNotIdentical(\" + oldValue + \", \" + newValue + \")) {\\n        \" + newValue + \" = \" + this.changeDetectionUtilVarName + \".unwrapValue(\" + newValue + \")\\n        \" + this._genChangeMarker(r) + \"\\n        \" + this._genUpdateDirectiveOrElement(r) + \"\\n        \" + this._genAddToChanges(r) + \"\\n        \" + oldValue + \" = \" + newValue + \";\\n      }\\n    \";\n      var genCode = r.shouldBeChecked() ? \"\" + read + check : read;\n      if (r.isUsedByOtherRecord()) {\n        return init + \" if (\" + condition + \") { \" + genCode + \" } else { \" + newValue + \" = \" + oldValue + \"; }\";\n      } else {\n        return init + \" if (\" + condition + \") { \" + genCode + \" }\";\n      }\n    };\n    ChangeDetectorJITGenerator.prototype._genReferenceCheck = function(r) {\n      var _this = this;\n      var oldValue = this._names.getFieldName(r.selfIndex);\n      var newValue = this._names.getLocalName(r.selfIndex);\n      var read = \"\\n      \" + this._logic.genPropertyBindingEvalValue(r) + \"\\n    \";\n      var check = \"\\n      if (\" + this.changeDetectionUtilVarName + \".looseNotIdentical(\" + oldValue + \", \" + newValue + \")) {\\n        \" + this._genChangeMarker(r) + \"\\n        \" + this._genUpdateDirectiveOrElement(r) + \"\\n        \" + this._genAddToChanges(r) + \"\\n        \" + oldValue + \" = \" + newValue + \";\\n      }\\n    \";\n      var genCode = r.shouldBeChecked() ? \"\" + read + check : read;\n      if (r.isPureFunction()) {\n        var condition = r.args.map(function(a) {\n          return _this._names.getChangeName(a);\n        }).join(\" || \");\n        if (r.isUsedByOtherRecord()) {\n          return \"if (\" + condition + \") { \" + genCode + \" } else { \" + newValue + \" = \" + oldValue + \"; }\";\n        } else {\n          return \"if (\" + condition + \") { \" + genCode + \" }\";\n        }\n      } else {\n        return genCode;\n      }\n    };\n    ChangeDetectorJITGenerator.prototype._genChangeMarker = function(r) {\n      return r.argumentToPureFunction ? this._names.getChangeName(r.selfIndex) + \" = true\" : \"\";\n    };\n    ChangeDetectorJITGenerator.prototype._genUpdateDirectiveOrElement = function(r) {\n      if (!r.lastInBinding)\n        return \"\";\n      var newValue = this._names.getLocalName(r.selfIndex);\n      var oldValue = this._names.getFieldName(r.selfIndex);\n      var notifyDebug = this.genConfig.logBindingUpdate ? \"this.logBindingUpdate(\" + newValue + \");\" : \"\";\n      var br = r.bindingRecord;\n      if (br.target.isDirective()) {\n        var directiveProperty = this._names.getDirectiveName(br.directiveRecord.directiveIndex) + \".\" + br.target.name;\n        return \"\\n        \" + this._genThrowOnChangeCheck(oldValue, newValue) + \"\\n        \" + directiveProperty + \" = \" + newValue + \";\\n        \" + notifyDebug + \"\\n        \" + IS_CHANGED_LOCAL + \" = true;\\n      \";\n      } else {\n        return \"\\n        \" + this._genThrowOnChangeCheck(oldValue, newValue) + \"\\n        this.notifyDispatcher(\" + newValue + \");\\n        \" + notifyDebug + \"\\n      \";\n      }\n    };\n    ChangeDetectorJITGenerator.prototype._genThrowOnChangeCheck = function(oldValue, newValue) {\n      if (lang_1.assertionsEnabled()) {\n        return \"\\n        if(throwOnChange) {\\n          this.throwOnChangeError(\" + oldValue + \", \" + newValue + \");\\n        }\\n        \";\n      } else {\n        return '';\n      }\n    };\n    ChangeDetectorJITGenerator.prototype._genAddToChanges = function(r) {\n      var newValue = this._names.getLocalName(r.selfIndex);\n      var oldValue = this._names.getFieldName(r.selfIndex);\n      if (!r.bindingRecord.callOnChanges())\n        return \"\";\n      return CHANGES_LOCAL + \" = this.addChange(\" + CHANGES_LOCAL + \", \" + oldValue + \", \" + newValue + \");\";\n    };\n    ChangeDetectorJITGenerator.prototype._maybeFirstInBinding = function(r) {\n      var prev = change_detection_util_1.ChangeDetectionUtil.protoByIndex(this.records, r.selfIndex - 1);\n      var firstInBinding = lang_1.isBlank(prev) || prev.bindingRecord !== r.bindingRecord;\n      return firstInBinding && !r.bindingRecord.isDirectiveLifecycle() ? this._names.getPropertyBindingIndex() + \" = \" + r.propertyBindingIndex + \";\" : '';\n    };\n    ChangeDetectorJITGenerator.prototype._maybeGenLastInDirective = function(r) {\n      if (!r.lastInDirective)\n        return \"\";\n      return \"\\n      \" + CHANGES_LOCAL + \" = null;\\n      \" + this._genNotifyOnPushDetectors(r) + \"\\n      \" + IS_CHANGED_LOCAL + \" = false;\\n    \";\n    };\n    ChangeDetectorJITGenerator.prototype._genOnCheck = function(r) {\n      var br = r.bindingRecord;\n      return \"if (!throwOnChange) \" + this._names.getDirectiveName(br.directiveRecord.directiveIndex) + \".doCheck();\";\n    };\n    ChangeDetectorJITGenerator.prototype._genOnInit = function(r) {\n      var br = r.bindingRecord;\n      return \"if (!throwOnChange && \" + this._names.getStateName() + \" === \" + this.changeDetectorStateVarName + \".NeverChecked) \" + this._names.getDirectiveName(br.directiveRecord.directiveIndex) + \".onInit();\";\n    };\n    ChangeDetectorJITGenerator.prototype._genOnChange = function(r) {\n      var br = r.bindingRecord;\n      return \"if (!throwOnChange && \" + CHANGES_LOCAL + \") \" + this._names.getDirectiveName(br.directiveRecord.directiveIndex) + \".onChanges(\" + CHANGES_LOCAL + \");\";\n    };\n    ChangeDetectorJITGenerator.prototype._genNotifyOnPushDetectors = function(r) {\n      var br = r.bindingRecord;\n      if (!r.lastInDirective || br.isDefaultChangeDetection())\n        return \"\";\n      var retVal = \"\\n      if(\" + IS_CHANGED_LOCAL + \") {\\n        \" + this._names.getDetectorName(br.directiveRecord.directiveIndex) + \".markAsCheckOnce();\\n      }\\n    \";\n      return retVal;\n    };\n    return ChangeDetectorJITGenerator;\n  })();\n  exports.ChangeDetectorJITGenerator = ChangeDetectorJITGenerator;\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"angular2/src/core/linker/view_manager\", [\"angular2/src/core/di\", \"angular2/src/facade/lang\", \"angular2/src/facade/exceptions\", \"angular2/src/core/linker/view\", \"angular2/src/core/linker/view_ref\", \"angular2/src/core/render/api\", \"angular2/src/core/linker/view_manager_utils\", \"angular2/src/core/linker/view_pool\", \"angular2/src/core/linker/view_listener\", \"angular2/src/core/profile/profile\", \"angular2/src/core/linker/proto_view_factory\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  var __extends = (this && this.__extends) || function(d, b) {\n    for (var p in b)\n      if (b.hasOwnProperty(p))\n        d[p] = b[p];\n    function __() {\n      this.constructor = d;\n    }\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n  };\n  var __decorate = (this && this.__decorate) || function(decorators, target, key, desc) {\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\")\n      return Reflect.decorate(decorators, target, key, desc);\n    switch (arguments.length) {\n      case 2:\n        return decorators.reduceRight(function(o, d) {\n          return (d && d(o)) || o;\n        }, target);\n      case 3:\n        return decorators.reduceRight(function(o, d) {\n          return (d && d(target, key)), void 0;\n        }, void 0);\n      case 4:\n        return decorators.reduceRight(function(o, d) {\n          return (d && d(target, key, o)) || o;\n        }, desc);\n    }\n  };\n  var __metadata = (this && this.__metadata) || function(k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\")\n      return Reflect.metadata(k, v);\n  };\n  var __param = (this && this.__param) || function(paramIndex, decorator) {\n    return function(target, key) {\n      decorator(target, key, paramIndex);\n    };\n  };\n  var di_1 = require(\"angular2/src/core/di\");\n  var lang_1 = require(\"angular2/src/facade/lang\");\n  var exceptions_1 = require(\"angular2/src/facade/exceptions\");\n  var viewModule = require(\"angular2/src/core/linker/view\");\n  var view_ref_1 = require(\"angular2/src/core/linker/view_ref\");\n  var api_1 = require(\"angular2/src/core/render/api\");\n  var view_manager_utils_1 = require(\"angular2/src/core/linker/view_manager_utils\");\n  var view_pool_1 = require(\"angular2/src/core/linker/view_pool\");\n  var view_listener_1 = require(\"angular2/src/core/linker/view_listener\");\n  var profile_1 = require(\"angular2/src/core/profile/profile\");\n  var proto_view_factory_1 = require(\"angular2/src/core/linker/proto_view_factory\");\n  var AppViewManager = (function() {\n    function AppViewManager() {}\n    AppViewManager.prototype.getHostElement = function(hostViewRef) {\n      var hostView = view_ref_1.internalView(hostViewRef);\n      if (hostView.proto.type !== viewModule.ViewType.HOST) {\n        throw new exceptions_1.BaseException('This operation is only allowed on host views');\n      }\n      return hostView.elementRefs[hostView.elementOffset];\n    };\n    return AppViewManager;\n  })();\n  exports.AppViewManager = AppViewManager;\n  var AppViewManager_ = (function(_super) {\n    __extends(AppViewManager_, _super);\n    function AppViewManager_(_viewPool, _viewListener, _utils, _renderer, _protoViewFactory) {\n      _super.call(this);\n      this._viewPool = _viewPool;\n      this._viewListener = _viewListener;\n      this._utils = _utils;\n      this._renderer = _renderer;\n      this._createRootHostViewScope = profile_1.wtfCreateScope('AppViewManager#createRootHostView()');\n      this._destroyRootHostViewScope = profile_1.wtfCreateScope('AppViewManager#destroyRootHostView()');\n      this._createEmbeddedViewInContainerScope = profile_1.wtfCreateScope('AppViewManager#createEmbeddedViewInContainer()');\n      this._createHostViewInContainerScope = profile_1.wtfCreateScope('AppViewManager#createHostViewInContainer()');\n      this._destroyViewInContainerScope = profile_1.wtfCreateScope('AppViewMananger#destroyViewInContainer()');\n      this._attachViewInContainerScope = profile_1.wtfCreateScope('AppViewMananger#attachViewInContainer()');\n      this._detachViewInContainerScope = profile_1.wtfCreateScope('AppViewMananger#detachViewInContainer()');\n      this._protoViewFactory = _protoViewFactory;\n    }\n    AppViewManager_.prototype.getViewContainer = function(location) {\n      var hostView = view_ref_1.internalView(location.parentView);\n      return hostView.elementInjectors[location.boundElementIndex].getViewContainerRef();\n    };\n    AppViewManager_.prototype.getNamedElementInComponentView = function(hostLocation, variableName) {\n      var hostView = view_ref_1.internalView(hostLocation.parentView);\n      var boundElementIndex = hostLocation.boundElementIndex;\n      var componentView = hostView.getNestedView(boundElementIndex);\n      if (lang_1.isBlank(componentView)) {\n        throw new exceptions_1.BaseException(\"There is no component directive at element \" + boundElementIndex);\n      }\n      var binderIdx = componentView.proto.variableLocations.get(variableName);\n      if (lang_1.isBlank(binderIdx)) {\n        throw new exceptions_1.BaseException(\"Could not find variable \" + variableName);\n      }\n      return componentView.elementRefs[componentView.elementOffset + binderIdx];\n    };\n    AppViewManager_.prototype.getComponent = function(hostLocation) {\n      var hostView = view_ref_1.internalView(hostLocation.parentView);\n      var boundElementIndex = hostLocation.boundElementIndex;\n      return this._utils.getComponentInstance(hostView, boundElementIndex);\n    };\n    AppViewManager_.prototype.createRootHostView = function(hostProtoViewRef, overrideSelector, injector) {\n      var s = this._createRootHostViewScope();\n      var hostProtoView = view_ref_1.internalProtoView(hostProtoViewRef);\n      this._protoViewFactory.initializeProtoViewIfNeeded(hostProtoView);\n      var hostElementSelector = overrideSelector;\n      if (lang_1.isBlank(hostElementSelector)) {\n        hostElementSelector = hostProtoView.elementBinders[0].componentDirective.metadata.selector;\n      }\n      var renderViewWithFragments = this._renderer.createRootHostView(hostProtoView.render, hostProtoView.mergeInfo.embeddedViewCount + 1, hostElementSelector);\n      var hostView = this._createMainView(hostProtoView, renderViewWithFragments);\n      this._renderer.hydrateView(hostView.render);\n      this._utils.hydrateRootHostView(hostView, injector);\n      return profile_1.wtfLeave(s, hostView.ref);\n    };\n    AppViewManager_.prototype.destroyRootHostView = function(hostViewRef) {\n      var s = this._destroyRootHostViewScope();\n      var hostView = view_ref_1.internalView(hostViewRef);\n      this._renderer.detachFragment(hostView.renderFragment);\n      this._renderer.dehydrateView(hostView.render);\n      this._viewDehydrateRecurse(hostView);\n      this._viewListener.onViewDestroyed(hostView);\n      this._renderer.destroyView(hostView.render);\n      profile_1.wtfLeave(s);\n    };\n    AppViewManager_.prototype.createEmbeddedViewInContainer = function(viewContainerLocation, index, templateRef) {\n      var s = this._createEmbeddedViewInContainerScope();\n      var protoView = view_ref_1.internalProtoView(templateRef.protoViewRef);\n      if (protoView.type !== viewModule.ViewType.EMBEDDED) {\n        throw new exceptions_1.BaseException('This method can only be called with embedded ProtoViews!');\n      }\n      this._protoViewFactory.initializeProtoViewIfNeeded(protoView);\n      return profile_1.wtfLeave(s, this._createViewInContainer(viewContainerLocation, index, protoView, templateRef.elementRef, null));\n    };\n    AppViewManager_.prototype.createHostViewInContainer = function(viewContainerLocation, index, protoViewRef, imperativelyCreatedInjector) {\n      var s = this._createHostViewInContainerScope();\n      var protoView = view_ref_1.internalProtoView(protoViewRef);\n      if (protoView.type !== viewModule.ViewType.HOST) {\n        throw new exceptions_1.BaseException('This method can only be called with host ProtoViews!');\n      }\n      this._protoViewFactory.initializeProtoViewIfNeeded(protoView);\n      return profile_1.wtfLeave(s, this._createViewInContainer(viewContainerLocation, index, protoView, viewContainerLocation, imperativelyCreatedInjector));\n    };\n    AppViewManager_.prototype._createViewInContainer = function(viewContainerLocation, index, protoView, context, imperativelyCreatedInjector) {\n      var parentView = view_ref_1.internalView(viewContainerLocation.parentView);\n      var boundElementIndex = viewContainerLocation.boundElementIndex;\n      var contextView = view_ref_1.internalView(context.parentView);\n      var contextBoundElementIndex = context.boundElementIndex;\n      var embeddedFragmentView = contextView.getNestedView(contextBoundElementIndex);\n      var view;\n      if (protoView.type === viewModule.ViewType.EMBEDDED && lang_1.isPresent(embeddedFragmentView) && !embeddedFragmentView.hydrated()) {\n        view = embeddedFragmentView;\n        this._attachRenderView(parentView, boundElementIndex, index, view);\n      } else {\n        view = this._createPooledView(protoView);\n        this._attachRenderView(parentView, boundElementIndex, index, view);\n        this._renderer.hydrateView(view.render);\n      }\n      this._utils.attachViewInContainer(parentView, boundElementIndex, contextView, contextBoundElementIndex, index, view);\n      this._utils.hydrateViewInContainer(parentView, boundElementIndex, contextView, contextBoundElementIndex, index, imperativelyCreatedInjector);\n      return view.ref;\n    };\n    AppViewManager_.prototype._attachRenderView = function(parentView, boundElementIndex, index, view) {\n      var elementRef = parentView.elementRefs[boundElementIndex];\n      if (index === 0) {\n        this._renderer.attachFragmentAfterElement(elementRef, view.renderFragment);\n      } else {\n        var prevView = parentView.viewContainers[boundElementIndex].views[index - 1];\n        this._renderer.attachFragmentAfterFragment(prevView.renderFragment, view.renderFragment);\n      }\n    };\n    AppViewManager_.prototype.destroyViewInContainer = function(viewContainerLocation, index) {\n      var s = this._destroyViewInContainerScope();\n      var parentView = view_ref_1.internalView(viewContainerLocation.parentView);\n      var boundElementIndex = viewContainerLocation.boundElementIndex;\n      this._destroyViewInContainer(parentView, boundElementIndex, index);\n      profile_1.wtfLeave(s);\n    };\n    AppViewManager_.prototype.attachViewInContainer = function(viewContainerLocation, index, viewRef) {\n      var s = this._attachViewInContainerScope();\n      var view = view_ref_1.internalView(viewRef);\n      var parentView = view_ref_1.internalView(viewContainerLocation.parentView);\n      var boundElementIndex = viewContainerLocation.boundElementIndex;\n      this._utils.attachViewInContainer(parentView, boundElementIndex, null, null, index, view);\n      this._attachRenderView(parentView, boundElementIndex, index, view);\n      return profile_1.wtfLeave(s, viewRef);\n    };\n    AppViewManager_.prototype.detachViewInContainer = function(viewContainerLocation, index) {\n      var s = this._detachViewInContainerScope();\n      var parentView = view_ref_1.internalView(viewContainerLocation.parentView);\n      var boundElementIndex = viewContainerLocation.boundElementIndex;\n      var viewContainer = parentView.viewContainers[boundElementIndex];\n      var view = viewContainer.views[index];\n      this._utils.detachViewInContainer(parentView, boundElementIndex, index);\n      this._renderer.detachFragment(view.renderFragment);\n      return profile_1.wtfLeave(s, view.ref);\n    };\n    AppViewManager_.prototype._createMainView = function(protoView, renderViewWithFragments) {\n      var mergedParentView = this._utils.createView(protoView, renderViewWithFragments, this, this._renderer);\n      this._renderer.setEventDispatcher(mergedParentView.render, mergedParentView);\n      this._viewListener.onViewCreated(mergedParentView);\n      return mergedParentView;\n    };\n    AppViewManager_.prototype._createPooledView = function(protoView) {\n      var view = this._viewPool.getView(protoView);\n      if (lang_1.isBlank(view)) {\n        view = this._createMainView(protoView, this._renderer.createView(protoView.render, protoView.mergeInfo.embeddedViewCount + 1));\n      }\n      return view;\n    };\n    AppViewManager_.prototype._destroyPooledView = function(view) {\n      var wasReturned = this._viewPool.returnView(view);\n      if (!wasReturned) {\n        this._viewListener.onViewDestroyed(view);\n        this._renderer.destroyView(view.render);\n      }\n    };\n    AppViewManager_.prototype._destroyViewInContainer = function(parentView, boundElementIndex, index) {\n      var viewContainer = parentView.viewContainers[boundElementIndex];\n      var view = viewContainer.views[index];\n      this._viewDehydrateRecurse(view);\n      this._utils.detachViewInContainer(parentView, boundElementIndex, index);\n      if (view.viewOffset > 0) {\n        this._renderer.detachFragment(view.renderFragment);\n      } else {\n        this._renderer.dehydrateView(view.render);\n        this._renderer.detachFragment(view.renderFragment);\n        this._destroyPooledView(view);\n      }\n    };\n    AppViewManager_.prototype._viewDehydrateRecurse = function(view) {\n      if (view.hydrated()) {\n        this._utils.dehydrateView(view);\n      }\n      var viewContainers = view.viewContainers;\n      var startViewOffset = view.viewOffset;\n      var endViewOffset = view.viewOffset + view.proto.mergeInfo.viewCount - 1;\n      var elementOffset = view.elementOffset;\n      for (var viewIdx = startViewOffset; viewIdx <= endViewOffset; viewIdx++) {\n        var currView = view.views[viewIdx];\n        for (var binderIdx = 0; binderIdx < currView.proto.elementBinders.length; binderIdx++, elementOffset++) {\n          var vc = viewContainers[elementOffset];\n          if (lang_1.isPresent(vc)) {\n            for (var j = vc.views.length - 1; j >= 0; j--) {\n              this._destroyViewInContainer(currView, elementOffset, j);\n            }\n          }\n        }\n      }\n    };\n    AppViewManager_ = __decorate([di_1.Injectable(), __param(4, di_1.Inject(di_1.forwardRef(function() {\n      return proto_view_factory_1.ProtoViewFactory;\n    }))), __metadata('design:paramtypes', [view_pool_1.AppViewPool, view_listener_1.AppViewListener, view_manager_utils_1.AppViewManagerUtils, api_1.Renderer, Object])], AppViewManager_);\n    return AppViewManager_;\n  })(AppViewManager);\n  exports.AppViewManager_ = AppViewManager_;\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"angular2/src/animate/css_animation_builder\", [\"angular2/src/animate/css_animation_options\", \"angular2/src/animate/animation\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  var css_animation_options_1 = require(\"angular2/src/animate/css_animation_options\");\n  var animation_1 = require(\"angular2/src/animate/animation\");\n  var CssAnimationBuilder = (function() {\n    function CssAnimationBuilder(browserDetails) {\n      this.browserDetails = browserDetails;\n      this.data = new css_animation_options_1.CssAnimationOptions();\n    }\n    CssAnimationBuilder.prototype.addAnimationClass = function(className) {\n      this.data.animationClasses.push(className);\n      return this;\n    };\n    CssAnimationBuilder.prototype.addClass = function(className) {\n      this.data.classesToAdd.push(className);\n      return this;\n    };\n    CssAnimationBuilder.prototype.removeClass = function(className) {\n      this.data.classesToRemove.push(className);\n      return this;\n    };\n    CssAnimationBuilder.prototype.setDuration = function(duration) {\n      this.data.duration = duration;\n      return this;\n    };\n    CssAnimationBuilder.prototype.setDelay = function(delay) {\n      this.data.delay = delay;\n      return this;\n    };\n    CssAnimationBuilder.prototype.setStyles = function(from, to) {\n      return this.setFromStyles(from).setToStyles(to);\n    };\n    CssAnimationBuilder.prototype.setFromStyles = function(from) {\n      this.data.fromStyles = from;\n      return this;\n    };\n    CssAnimationBuilder.prototype.setToStyles = function(to) {\n      this.data.toStyles = to;\n      return this;\n    };\n    CssAnimationBuilder.prototype.start = function(element) {\n      return new animation_1.Animation(element, this.data, this.browserDetails);\n    };\n    return CssAnimationBuilder;\n  })();\n  exports.CssAnimationBuilder = CssAnimationBuilder;\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"angular2/src/common/forms/directives/ng_control_name\", [\"angular2/src/facade/lang\", \"angular2/src/facade/async\", \"angular2/src/core/metadata\", \"angular2/src/core/di\", \"angular2/src/common/forms/directives/control_container\", \"angular2/src/common/forms/directives/ng_control\", \"angular2/src/common/forms/directives/control_value_accessor\", \"angular2/src/common/forms/directives/shared\", \"angular2/src/common/forms/validators\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  var __extends = (this && this.__extends) || function(d, b) {\n    for (var p in b)\n      if (b.hasOwnProperty(p))\n        d[p] = b[p];\n    function __() {\n      this.constructor = d;\n    }\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n  };\n  var __decorate = (this && this.__decorate) || function(decorators, target, key, desc) {\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\")\n      return Reflect.decorate(decorators, target, key, desc);\n    switch (arguments.length) {\n      case 2:\n        return decorators.reduceRight(function(o, d) {\n          return (d && d(o)) || o;\n        }, target);\n      case 3:\n        return decorators.reduceRight(function(o, d) {\n          return (d && d(target, key)), void 0;\n        }, void 0);\n      case 4:\n        return decorators.reduceRight(function(o, d) {\n          return (d && d(target, key, o)) || o;\n        }, desc);\n    }\n  };\n  var __metadata = (this && this.__metadata) || function(k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\")\n      return Reflect.metadata(k, v);\n  };\n  var __param = (this && this.__param) || function(paramIndex, decorator) {\n    return function(target, key) {\n      decorator(target, key, paramIndex);\n    };\n  };\n  var lang_1 = require(\"angular2/src/facade/lang\");\n  var async_1 = require(\"angular2/src/facade/async\");\n  var metadata_1 = require(\"angular2/src/core/metadata\");\n  var di_1 = require(\"angular2/src/core/di\");\n  var control_container_1 = require(\"angular2/src/common/forms/directives/control_container\");\n  var ng_control_1 = require(\"angular2/src/common/forms/directives/ng_control\");\n  var control_value_accessor_1 = require(\"angular2/src/common/forms/directives/control_value_accessor\");\n  var shared_1 = require(\"angular2/src/common/forms/directives/shared\");\n  var validators_1 = require(\"angular2/src/common/forms/validators\");\n  var controlNameBinding = lang_1.CONST_EXPR(new di_1.Provider(ng_control_1.NgControl, {useExisting: di_1.forwardRef(function() {\n      return NgControlName;\n    })}));\n  var NgControlName = (function(_super) {\n    __extends(NgControlName, _super);\n    function NgControlName(_parent, _validators, _asyncValidators, valueAccessors) {\n      _super.call(this);\n      this._parent = _parent;\n      this._validators = _validators;\n      this._asyncValidators = _asyncValidators;\n      this.update = new async_1.EventEmitter();\n      this._added = false;\n      this.valueAccessor = shared_1.selectValueAccessor(this, valueAccessors);\n    }\n    NgControlName.prototype.onChanges = function(changes) {\n      if (!this._added) {\n        this.formDirective.addControl(this);\n        this._added = true;\n      }\n      if (shared_1.isPropertyUpdated(changes, this.viewModel)) {\n        this.viewModel = this.model;\n        this.formDirective.updateModel(this, this.model);\n      }\n    };\n    NgControlName.prototype.onDestroy = function() {\n      this.formDirective.removeControl(this);\n    };\n    NgControlName.prototype.viewToModelUpdate = function(newValue) {\n      this.viewModel = newValue;\n      async_1.ObservableWrapper.callNext(this.update, newValue);\n    };\n    Object.defineProperty(NgControlName.prototype, \"path\", {\n      get: function() {\n        return shared_1.controlPath(this.name, this._parent);\n      },\n      enumerable: true,\n      configurable: true\n    });\n    Object.defineProperty(NgControlName.prototype, \"formDirective\", {\n      get: function() {\n        return this._parent.formDirective;\n      },\n      enumerable: true,\n      configurable: true\n    });\n    Object.defineProperty(NgControlName.prototype, \"validator\", {\n      get: function() {\n        return shared_1.composeValidators(this._validators);\n      },\n      enumerable: true,\n      configurable: true\n    });\n    Object.defineProperty(NgControlName.prototype, \"asyncValidator\", {\n      get: function() {\n        return shared_1.composeAsyncValidators(this._asyncValidators);\n      },\n      enumerable: true,\n      configurable: true\n    });\n    Object.defineProperty(NgControlName.prototype, \"control\", {\n      get: function() {\n        return this.formDirective.getControl(this);\n      },\n      enumerable: true,\n      configurable: true\n    });\n    NgControlName = __decorate([metadata_1.Directive({\n      selector: '[ng-control]',\n      bindings: [controlNameBinding],\n      inputs: ['name: ngControl', 'model: ngModel'],\n      outputs: ['update: ngModelChange'],\n      exportAs: 'form'\n    }), __param(0, di_1.Host()), __param(0, di_1.SkipSelf()), __param(1, di_1.Optional()), __param(1, di_1.Inject(validators_1.NG_VALIDATORS)), __param(2, di_1.Optional()), __param(2, di_1.Inject(validators_1.NG_ASYNC_VALIDATORS)), __param(3, di_1.Optional()), __param(3, di_1.Inject(control_value_accessor_1.NG_VALUE_ACCESSOR)), __metadata('design:paramtypes', [control_container_1.ControlContainer, Array, Array, Array])], NgControlName);\n    return NgControlName;\n  })(ng_control_1.NgControl);\n  exports.NgControlName = NgControlName;\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"angular2/src/compiler/change_detector_compiler\", [\"angular2/src/compiler/source_module\", \"angular2/src/core/change_detection/change_detection_jit_generator\", \"angular2/src/compiler/change_definition_factory\", \"angular2/src/facade/lang\", \"angular2/src/core/change_detection/change_detection\", \"angular2/src/transform/template_compiler/change_detector_codegen\", \"angular2/src/compiler/util\", \"angular2/src/core/di\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  var __decorate = (this && this.__decorate) || function(decorators, target, key, desc) {\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\")\n      return Reflect.decorate(decorators, target, key, desc);\n    switch (arguments.length) {\n      case 2:\n        return decorators.reduceRight(function(o, d) {\n          return (d && d(o)) || o;\n        }, target);\n      case 3:\n        return decorators.reduceRight(function(o, d) {\n          return (d && d(target, key)), void 0;\n        }, void 0);\n      case 4:\n        return decorators.reduceRight(function(o, d) {\n          return (d && d(target, key, o)) || o;\n        }, desc);\n    }\n  };\n  var __metadata = (this && this.__metadata) || function(k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\")\n      return Reflect.metadata(k, v);\n  };\n  var source_module_1 = require(\"angular2/src/compiler/source_module\");\n  var change_detection_jit_generator_1 = require(\"angular2/src/core/change_detection/change_detection_jit_generator\");\n  var change_definition_factory_1 = require(\"angular2/src/compiler/change_definition_factory\");\n  var lang_1 = require(\"angular2/src/facade/lang\");\n  var change_detection_1 = require(\"angular2/src/core/change_detection/change_detection\");\n  var change_detector_codegen_1 = require(\"angular2/src/transform/template_compiler/change_detector_codegen\");\n  var util_1 = require(\"angular2/src/compiler/util\");\n  var di_1 = require(\"angular2/src/core/di\");\n  var ABSTRACT_CHANGE_DETECTOR = \"AbstractChangeDetector\";\n  var UTIL = \"ChangeDetectionUtil\";\n  var CHANGE_DETECTOR_STATE = \"ChangeDetectorState\";\n  var ABSTRACT_CHANGE_DETECTOR_MODULE = source_module_1.moduleRef(\"package:angular2/src/core/change_detection/abstract_change_detector\" + util_1.MODULE_SUFFIX);\n  var UTIL_MODULE = source_module_1.moduleRef(\"package:angular2/src/core/change_detection/change_detection_util\" + util_1.MODULE_SUFFIX);\n  var PREGEN_PROTO_CHANGE_DETECTOR_MODULE = source_module_1.moduleRef(\"package:angular2/src/core/change_detection/pregen_proto_change_detector\" + util_1.MODULE_SUFFIX);\n  var CONSTANTS_MODULE = source_module_1.moduleRef(\"package:angular2/src/core/change_detection/constants\" + util_1.MODULE_SUFFIX);\n  var ChangeDetectionCompiler = (function() {\n    function ChangeDetectionCompiler(_genConfig) {\n      this._genConfig = _genConfig;\n    }\n    ChangeDetectionCompiler.prototype.compileComponentRuntime = function(componentType, strategy, parsedTemplate) {\n      var _this = this;\n      var changeDetectorDefinitions = change_definition_factory_1.createChangeDetectorDefinitions(componentType, strategy, this._genConfig, parsedTemplate);\n      return changeDetectorDefinitions.map(function(definition) {\n        return _this._createChangeDetectorFactory(definition);\n      });\n    };\n    ChangeDetectionCompiler.prototype._createChangeDetectorFactory = function(definition) {\n      if (lang_1.IS_DART || !this._genConfig.useJit) {\n        var proto = new change_detection_1.DynamicProtoChangeDetector(definition);\n        return function(dispatcher) {\n          return proto.instantiate(dispatcher);\n        };\n      } else {\n        return new change_detection_jit_generator_1.ChangeDetectorJITGenerator(definition, UTIL, ABSTRACT_CHANGE_DETECTOR, CHANGE_DETECTOR_STATE).generate();\n      }\n    };\n    ChangeDetectionCompiler.prototype.compileComponentCodeGen = function(componentType, strategy, parsedTemplate) {\n      var changeDetectorDefinitions = change_definition_factory_1.createChangeDetectorDefinitions(componentType, strategy, this._genConfig, parsedTemplate);\n      var factories = [];\n      var index = 0;\n      var sourceParts = changeDetectorDefinitions.map(function(definition) {\n        var codegen;\n        var sourcePart;\n        if (lang_1.IS_DART) {\n          codegen = new change_detector_codegen_1.Codegen(PREGEN_PROTO_CHANGE_DETECTOR_MODULE);\n          var className = \"_\" + definition.id;\n          var typeRef = (index === 0 && componentType.isHost) ? 'dynamic' : \"\" + source_module_1.moduleRef(componentType.moduleUrl) + componentType.name;\n          codegen.generate(typeRef, className, definition);\n          factories.push(className + \".newChangeDetector\");\n          sourcePart = codegen.toString();\n        } else {\n          codegen = new change_detection_jit_generator_1.ChangeDetectorJITGenerator(definition, \"\" + UTIL_MODULE + UTIL, \"\" + ABSTRACT_CHANGE_DETECTOR_MODULE + ABSTRACT_CHANGE_DETECTOR, \"\" + CONSTANTS_MODULE + CHANGE_DETECTOR_STATE);\n          factories.push(\"function(dispatcher) { return new \" + codegen.typeName + \"(dispatcher); }\");\n          sourcePart = codegen.generateSource();\n        }\n        index++;\n        return sourcePart;\n      });\n      return new source_module_1.SourceExpressions(sourceParts, factories);\n    };\n    ChangeDetectionCompiler = __decorate([di_1.Injectable(), __metadata('design:paramtypes', [change_detection_1.ChangeDetectorGenConfig])], ChangeDetectionCompiler);\n    return ChangeDetectionCompiler;\n  })();\n  exports.ChangeDetectionCompiler = ChangeDetectionCompiler;\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"angular2/src/compiler/template_parser\", [\"angular2/src/facade/collection\", \"angular2/src/facade/lang\", \"angular2/src/core/di\", \"angular2/src/facade/exceptions\", \"angular2/src/core/change_detection/change_detection\", \"angular2/src/compiler/html_parser\", \"angular2/src/compiler/template_ast\", \"angular2/src/compiler/selector\", \"angular2/src/compiler/schema/element_schema_registry\", \"angular2/src/compiler/template_preparser\", \"angular2/src/compiler/style_url_resolver\", \"angular2/src/compiler/html_ast\", \"angular2/src/compiler/util\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  var __decorate = (this && this.__decorate) || function(decorators, target, key, desc) {\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\")\n      return Reflect.decorate(decorators, target, key, desc);\n    switch (arguments.length) {\n      case 2:\n        return decorators.reduceRight(function(o, d) {\n          return (d && d(o)) || o;\n        }, target);\n      case 3:\n        return decorators.reduceRight(function(o, d) {\n          return (d && d(target, key)), void 0;\n        }, void 0);\n      case 4:\n        return decorators.reduceRight(function(o, d) {\n          return (d && d(target, key, o)) || o;\n        }, desc);\n    }\n  };\n  var __metadata = (this && this.__metadata) || function(k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\")\n      return Reflect.metadata(k, v);\n  };\n  var collection_1 = require(\"angular2/src/facade/collection\");\n  var lang_1 = require(\"angular2/src/facade/lang\");\n  var di_1 = require(\"angular2/src/core/di\");\n  var exceptions_1 = require(\"angular2/src/facade/exceptions\");\n  var change_detection_1 = require(\"angular2/src/core/change_detection/change_detection\");\n  var html_parser_1 = require(\"angular2/src/compiler/html_parser\");\n  var template_ast_1 = require(\"angular2/src/compiler/template_ast\");\n  var selector_1 = require(\"angular2/src/compiler/selector\");\n  var element_schema_registry_1 = require(\"angular2/src/compiler/schema/element_schema_registry\");\n  var template_preparser_1 = require(\"angular2/src/compiler/template_preparser\");\n  var style_url_resolver_1 = require(\"angular2/src/compiler/style_url_resolver\");\n  var html_ast_1 = require(\"angular2/src/compiler/html_ast\");\n  var util_1 = require(\"angular2/src/compiler/util\");\n  var BIND_NAME_REGEXP = /^(?:(?:(?:(bind-)|(var-|#)|(on-)|(bindon-))(.+))|\\[\\(([^\\)]+)\\)\\]|\\[([^\\]]+)\\]|\\(([^\\)]+)\\))$/g;\n  var TEMPLATE_ELEMENT = 'template';\n  var TEMPLATE_ATTR = 'template';\n  var TEMPLATE_ATTR_PREFIX = '*';\n  var CLASS_ATTR = 'class';\n  var PROPERTY_PARTS_SEPARATOR = new RegExp('\\\\.');\n  var ATTRIBUTE_PREFIX = 'attr';\n  var CLASS_PREFIX = 'class';\n  var STYLE_PREFIX = 'style';\n  var TEXT_CSS_SELECTOR = selector_1.CssSelector.parse('*')[0];\n  var TemplateParser = (function() {\n    function TemplateParser(_exprParser, _schemaRegistry, _htmlParser) {\n      this._exprParser = _exprParser;\n      this._schemaRegistry = _schemaRegistry;\n      this._htmlParser = _htmlParser;\n    }\n    TemplateParser.prototype.parse = function(template, directives, sourceInfo) {\n      var parseVisitor = new TemplateParseVisitor(directives, this._exprParser, this._schemaRegistry);\n      var result = html_ast_1.htmlVisitAll(parseVisitor, this._htmlParser.parse(template, sourceInfo), EMPTY_COMPONENT);\n      if (parseVisitor.errors.length > 0) {\n        var errorString = parseVisitor.errors.join('\\n');\n        throw new exceptions_1.BaseException(\"Template parse errors:\\n\" + errorString);\n      }\n      return result;\n    };\n    TemplateParser = __decorate([di_1.Injectable(), __metadata('design:paramtypes', [change_detection_1.Parser, element_schema_registry_1.ElementSchemaRegistry, html_parser_1.HtmlParser])], TemplateParser);\n    return TemplateParser;\n  })();\n  exports.TemplateParser = TemplateParser;\n  var TemplateParseVisitor = (function() {\n    function TemplateParseVisitor(directives, _exprParser, _schemaRegistry) {\n      var _this = this;\n      this._exprParser = _exprParser;\n      this._schemaRegistry = _schemaRegistry;\n      this.errors = [];\n      this.directivesIndex = new Map();\n      this.ngContentCount = 0;\n      this.selectorMatcher = new selector_1.SelectorMatcher();\n      collection_1.ListWrapper.forEachWithIndex(directives, function(directive, index) {\n        var selector = selector_1.CssSelector.parse(directive.selector);\n        _this.selectorMatcher.addSelectables(selector, directive);\n        _this.directivesIndex.set(directive, index);\n      });\n    }\n    TemplateParseVisitor.prototype._reportError = function(message) {\n      this.errors.push(message);\n    };\n    TemplateParseVisitor.prototype._parseInterpolation = function(value, sourceInfo) {\n      try {\n        return this._exprParser.parseInterpolation(value, sourceInfo);\n      } catch (e) {\n        this._reportError(\"\" + e);\n        return this._exprParser.wrapLiteralPrimitive('ERROR', sourceInfo);\n      }\n    };\n    TemplateParseVisitor.prototype._parseAction = function(value, sourceInfo) {\n      try {\n        return this._exprParser.parseAction(value, sourceInfo);\n      } catch (e) {\n        this._reportError(\"\" + e);\n        return this._exprParser.wrapLiteralPrimitive('ERROR', sourceInfo);\n      }\n    };\n    TemplateParseVisitor.prototype._parseBinding = function(value, sourceInfo) {\n      try {\n        return this._exprParser.parseBinding(value, sourceInfo);\n      } catch (e) {\n        this._reportError(\"\" + e);\n        return this._exprParser.wrapLiteralPrimitive('ERROR', sourceInfo);\n      }\n    };\n    TemplateParseVisitor.prototype._parseTemplateBindings = function(value, sourceInfo) {\n      try {\n        return this._exprParser.parseTemplateBindings(value, sourceInfo);\n      } catch (e) {\n        this._reportError(\"\" + e);\n        return [];\n      }\n    };\n    TemplateParseVisitor.prototype.visitText = function(ast, component) {\n      var ngContentIndex = component.findNgContentIndex(TEXT_CSS_SELECTOR);\n      var expr = this._parseInterpolation(ast.value, ast.sourceInfo);\n      if (lang_1.isPresent(expr)) {\n        return new template_ast_1.BoundTextAst(expr, ngContentIndex, ast.sourceInfo);\n      } else {\n        return new template_ast_1.TextAst(ast.value, ngContentIndex, ast.sourceInfo);\n      }\n    };\n    TemplateParseVisitor.prototype.visitAttr = function(ast, contex) {\n      return new template_ast_1.AttrAst(ast.name, ast.value, ast.sourceInfo);\n    };\n    TemplateParseVisitor.prototype.visitElement = function(element, component) {\n      var _this = this;\n      var nodeName = element.name;\n      var preparsedElement = template_preparser_1.preparseElement(element);\n      if (preparsedElement.type === template_preparser_1.PreparsedElementType.SCRIPT || preparsedElement.type === template_preparser_1.PreparsedElementType.STYLE) {\n        return null;\n      }\n      if (preparsedElement.type === template_preparser_1.PreparsedElementType.STYLESHEET && style_url_resolver_1.isStyleUrlResolvable(preparsedElement.hrefAttr)) {\n        return null;\n      }\n      var matchableAttrs = [];\n      var elementOrDirectiveProps = [];\n      var vars = [];\n      var events = [];\n      var templateElementOrDirectiveProps = [];\n      var templateVars = [];\n      var templateMatchableAttrs = [];\n      var hasInlineTemplates = false;\n      var attrs = [];\n      element.attrs.forEach(function(attr) {\n        matchableAttrs.push([attr.name, attr.value]);\n        var hasBinding = _this._parseAttr(attr, matchableAttrs, elementOrDirectiveProps, events, vars);\n        var hasTemplateBinding = _this._parseInlineTemplateBinding(attr, templateMatchableAttrs, templateElementOrDirectiveProps, templateVars);\n        if (!hasBinding && !hasTemplateBinding) {\n          attrs.push(_this.visitAttr(attr, null));\n        }\n        if (hasTemplateBinding) {\n          hasInlineTemplates = true;\n        }\n      });\n      var isTemplateElement = nodeName == TEMPLATE_ELEMENT;\n      var elementCssSelector = createElementCssSelector(nodeName, matchableAttrs);\n      var directives = this._createDirectiveAsts(element.name, this._parseDirectives(this.selectorMatcher, elementCssSelector), elementOrDirectiveProps, isTemplateElement ? [] : vars, element.sourceInfo);\n      var elementProps = this._createElementPropertyAsts(element.name, elementOrDirectiveProps, directives);\n      var children = html_ast_1.htmlVisitAll(preparsedElement.nonBindable ? NON_BINDABLE_VISITOR : this, element.children, Component.create(directives));\n      var elementNgContentIndex = hasInlineTemplates ? null : component.findNgContentIndex(elementCssSelector);\n      var parsedElement;\n      if (preparsedElement.type === template_preparser_1.PreparsedElementType.NG_CONTENT) {\n        parsedElement = new template_ast_1.NgContentAst(this.ngContentCount++, elementNgContentIndex, element.sourceInfo);\n      } else if (isTemplateElement) {\n        this._assertAllEventsPublishedByDirectives(directives, events, element.sourceInfo);\n        this._assertNoComponentsNorElementBindingsOnTemplate(directives, elementProps, element.sourceInfo);\n        parsedElement = new template_ast_1.EmbeddedTemplateAst(attrs, events, vars, directives, children, elementNgContentIndex, element.sourceInfo);\n      } else {\n        this._assertOnlyOneComponent(directives, element.sourceInfo);\n        var elementExportAsVars = vars.filter(function(varAst) {\n          return varAst.value.length === 0;\n        });\n        parsedElement = new template_ast_1.ElementAst(nodeName, attrs, elementProps, events, elementExportAsVars, directives, children, elementNgContentIndex, element.sourceInfo);\n      }\n      if (hasInlineTemplates) {\n        var templateCssSelector = createElementCssSelector(TEMPLATE_ELEMENT, templateMatchableAttrs);\n        var templateDirectives = this._createDirectiveAsts(element.name, this._parseDirectives(this.selectorMatcher, templateCssSelector), templateElementOrDirectiveProps, [], element.sourceInfo);\n        var templateElementProps = this._createElementPropertyAsts(element.name, templateElementOrDirectiveProps, templateDirectives);\n        this._assertNoComponentsNorElementBindingsOnTemplate(templateDirectives, templateElementProps, element.sourceInfo);\n        parsedElement = new template_ast_1.EmbeddedTemplateAst([], [], templateVars, templateDirectives, [parsedElement], component.findNgContentIndex(templateCssSelector), element.sourceInfo);\n      }\n      return parsedElement;\n    };\n    TemplateParseVisitor.prototype._parseInlineTemplateBinding = function(attr, targetMatchableAttrs, targetProps, targetVars) {\n      var templateBindingsSource = null;\n      if (attr.name == TEMPLATE_ATTR) {\n        templateBindingsSource = attr.value;\n      } else if (attr.name.startsWith(TEMPLATE_ATTR_PREFIX)) {\n        var key = attr.name.substring(TEMPLATE_ATTR_PREFIX.length);\n        templateBindingsSource = (attr.value.length == 0) ? key : key + ' ' + attr.value;\n      }\n      if (lang_1.isPresent(templateBindingsSource)) {\n        var bindings = this._parseTemplateBindings(templateBindingsSource, attr.sourceInfo);\n        for (var i = 0; i < bindings.length; i++) {\n          var binding = bindings[i];\n          var dashCaseKey = util_1.camelCaseToDashCase(binding.key);\n          if (binding.keyIsVar) {\n            targetVars.push(new template_ast_1.VariableAst(util_1.dashCaseToCamelCase(binding.key), binding.name, attr.sourceInfo));\n            targetMatchableAttrs.push([dashCaseKey, binding.name]);\n          } else if (lang_1.isPresent(binding.expression)) {\n            this._parsePropertyAst(dashCaseKey, binding.expression, attr.sourceInfo, targetMatchableAttrs, targetProps);\n          } else {\n            targetMatchableAttrs.push([dashCaseKey, '']);\n            this._parseLiteralAttr(dashCaseKey, null, attr.sourceInfo, targetProps);\n          }\n        }\n        return true;\n      }\n      return false;\n    };\n    TemplateParseVisitor.prototype._parseAttr = function(attr, targetMatchableAttrs, targetProps, targetEvents, targetVars) {\n      var attrName = this._normalizeAttributeName(attr.name);\n      var attrValue = attr.value;\n      var bindParts = lang_1.RegExpWrapper.firstMatch(BIND_NAME_REGEXP, attrName);\n      var hasBinding = false;\n      if (lang_1.isPresent(bindParts)) {\n        hasBinding = true;\n        if (lang_1.isPresent(bindParts[1])) {\n          this._parseProperty(bindParts[5], attrValue, attr.sourceInfo, targetMatchableAttrs, targetProps);\n        } else if (lang_1.isPresent(bindParts[2])) {\n          var identifier = bindParts[5];\n          this._parseVariable(identifier, attrValue, attr.sourceInfo, targetVars);\n        } else if (lang_1.isPresent(bindParts[3])) {\n          this._parseEvent(bindParts[5], attrValue, attr.sourceInfo, targetMatchableAttrs, targetEvents);\n        } else if (lang_1.isPresent(bindParts[4])) {\n          this._parseProperty(bindParts[5], attrValue, attr.sourceInfo, targetMatchableAttrs, targetProps);\n          this._parseAssignmentEvent(bindParts[5], attrValue, attr.sourceInfo, targetMatchableAttrs, targetEvents);\n        } else if (lang_1.isPresent(bindParts[6])) {\n          this._parseProperty(bindParts[6], attrValue, attr.sourceInfo, targetMatchableAttrs, targetProps);\n          this._parseAssignmentEvent(bindParts[6], attrValue, attr.sourceInfo, targetMatchableAttrs, targetEvents);\n        } else if (lang_1.isPresent(bindParts[7])) {\n          this._parseProperty(bindParts[7], attrValue, attr.sourceInfo, targetMatchableAttrs, targetProps);\n        } else if (lang_1.isPresent(bindParts[8])) {\n          this._parseEvent(bindParts[8], attrValue, attr.sourceInfo, targetMatchableAttrs, targetEvents);\n        }\n      } else {\n        hasBinding = this._parsePropertyInterpolation(attrName, attrValue, attr.sourceInfo, targetMatchableAttrs, targetProps);\n      }\n      if (!hasBinding) {\n        this._parseLiteralAttr(attrName, attrValue, attr.sourceInfo, targetProps);\n      }\n      return hasBinding;\n    };\n    TemplateParseVisitor.prototype._normalizeAttributeName = function(attrName) {\n      return attrName.startsWith('data-') ? attrName.substring(5) : attrName;\n    };\n    TemplateParseVisitor.prototype._parseVariable = function(identifier, value, sourceInfo, targetVars) {\n      targetVars.push(new template_ast_1.VariableAst(util_1.dashCaseToCamelCase(identifier), value, sourceInfo));\n    };\n    TemplateParseVisitor.prototype._parseProperty = function(name, expression, sourceInfo, targetMatchableAttrs, targetProps) {\n      this._parsePropertyAst(name, this._parseBinding(expression, sourceInfo), sourceInfo, targetMatchableAttrs, targetProps);\n    };\n    TemplateParseVisitor.prototype._parsePropertyInterpolation = function(name, value, sourceInfo, targetMatchableAttrs, targetProps) {\n      var expr = this._parseInterpolation(value, sourceInfo);\n      if (lang_1.isPresent(expr)) {\n        this._parsePropertyAst(name, expr, sourceInfo, targetMatchableAttrs, targetProps);\n        return true;\n      }\n      return false;\n    };\n    TemplateParseVisitor.prototype._parsePropertyAst = function(name, ast, sourceInfo, targetMatchableAttrs, targetProps) {\n      targetMatchableAttrs.push([name, ast.source]);\n      targetProps.push(new BoundElementOrDirectiveProperty(name, ast, false, sourceInfo));\n    };\n    TemplateParseVisitor.prototype._parseAssignmentEvent = function(name, expression, sourceInfo, targetMatchableAttrs, targetEvents) {\n      this._parseEvent(name + \"-change\", expression + \"=$event\", sourceInfo, targetMatchableAttrs, targetEvents);\n    };\n    TemplateParseVisitor.prototype._parseEvent = function(name, expression, sourceInfo, targetMatchableAttrs, targetEvents) {\n      var parts = util_1.splitAtColon(name, [null, name]);\n      var target = parts[0];\n      var eventName = parts[1];\n      targetEvents.push(new template_ast_1.BoundEventAst(util_1.dashCaseToCamelCase(eventName), target, this._parseAction(expression, sourceInfo), sourceInfo));\n    };\n    TemplateParseVisitor.prototype._parseLiteralAttr = function(name, value, sourceInfo, targetProps) {\n      targetProps.push(new BoundElementOrDirectiveProperty(util_1.dashCaseToCamelCase(name), this._exprParser.wrapLiteralPrimitive(value, sourceInfo), true, sourceInfo));\n    };\n    TemplateParseVisitor.prototype._parseDirectives = function(selectorMatcher, elementCssSelector) {\n      var _this = this;\n      var directives = [];\n      selectorMatcher.match(elementCssSelector, function(selector, directive) {\n        directives.push(directive);\n      });\n      collection_1.ListWrapper.sort(directives, function(dir1, dir2) {\n        var dir1Comp = dir1.isComponent;\n        var dir2Comp = dir2.isComponent;\n        if (dir1Comp && !dir2Comp) {\n          return -1;\n        } else if (!dir1Comp && dir2Comp) {\n          return 1;\n        } else {\n          return _this.directivesIndex.get(dir1) - _this.directivesIndex.get(dir2);\n        }\n      });\n      return directives;\n    };\n    TemplateParseVisitor.prototype._createDirectiveAsts = function(elementName, directives, props, possibleExportAsVars, sourceInfo) {\n      var _this = this;\n      var matchedVariables = new Set();\n      var directiveAsts = directives.map(function(directive) {\n        var hostProperties = [];\n        var hostEvents = [];\n        var directiveProperties = [];\n        _this._createDirectiveHostPropertyAsts(elementName, directive.hostProperties, sourceInfo, hostProperties);\n        _this._createDirectiveHostEventAsts(directive.hostListeners, sourceInfo, hostEvents);\n        _this._createDirectivePropertyAsts(directive.inputs, props, directiveProperties);\n        var exportAsVars = [];\n        possibleExportAsVars.forEach(function(varAst) {\n          if ((varAst.value.length === 0 && directive.isComponent) || (directive.exportAs == varAst.value)) {\n            exportAsVars.push(varAst);\n            matchedVariables.add(varAst.name);\n          }\n        });\n        return new template_ast_1.DirectiveAst(directive, directiveProperties, hostProperties, hostEvents, exportAsVars, sourceInfo);\n      });\n      possibleExportAsVars.forEach(function(varAst) {\n        if (varAst.value.length > 0 && !collection_1.SetWrapper.has(matchedVariables, varAst.name)) {\n          _this._reportError(\"There is no directive with \\\"exportAs\\\" set to \\\"\" + varAst.value + \"\\\" at \" + varAst.sourceInfo);\n        }\n      });\n      return directiveAsts;\n    };\n    TemplateParseVisitor.prototype._createDirectiveHostPropertyAsts = function(elementName, hostProps, sourceInfo, targetPropertyAsts) {\n      var _this = this;\n      if (lang_1.isPresent(hostProps)) {\n        collection_1.StringMapWrapper.forEach(hostProps, function(expression, propName) {\n          var exprAst = _this._parseBinding(expression, sourceInfo);\n          targetPropertyAsts.push(_this._createElementPropertyAst(elementName, propName, exprAst, sourceInfo));\n        });\n      }\n    };\n    TemplateParseVisitor.prototype._createDirectiveHostEventAsts = function(hostListeners, sourceInfo, targetEventAsts) {\n      var _this = this;\n      if (lang_1.isPresent(hostListeners)) {\n        collection_1.StringMapWrapper.forEach(hostListeners, function(expression, propName) {\n          _this._parseEvent(propName, expression, sourceInfo, [], targetEventAsts);\n        });\n      }\n    };\n    TemplateParseVisitor.prototype._createDirectivePropertyAsts = function(directiveProperties, boundProps, targetBoundDirectiveProps) {\n      if (lang_1.isPresent(directiveProperties)) {\n        var boundPropsByName = new Map();\n        boundProps.forEach(function(boundProp) {\n          var key = util_1.dashCaseToCamelCase(boundProp.name);\n          var prevValue = boundPropsByName.get(boundProp.name);\n          if (lang_1.isBlank(prevValue) || prevValue.isLiteral) {\n            boundPropsByName.set(key, boundProp);\n          }\n        });\n        collection_1.StringMapWrapper.forEach(directiveProperties, function(elProp, dirProp) {\n          elProp = util_1.dashCaseToCamelCase(elProp);\n          var boundProp = boundPropsByName.get(elProp);\n          if (lang_1.isPresent(boundProp)) {\n            targetBoundDirectiveProps.push(new template_ast_1.BoundDirectivePropertyAst(dirProp, boundProp.name, boundProp.expression, boundProp.sourceInfo));\n          }\n        });\n      }\n    };\n    TemplateParseVisitor.prototype._createElementPropertyAsts = function(elementName, props, directives) {\n      var _this = this;\n      var boundElementProps = [];\n      var boundDirectivePropsIndex = new Map();\n      directives.forEach(function(directive) {\n        directive.inputs.forEach(function(prop) {\n          boundDirectivePropsIndex.set(prop.templateName, prop);\n        });\n      });\n      props.forEach(function(prop) {\n        if (!prop.isLiteral && lang_1.isBlank(boundDirectivePropsIndex.get(prop.name))) {\n          boundElementProps.push(_this._createElementPropertyAst(elementName, prop.name, prop.expression, prop.sourceInfo));\n        }\n      });\n      return boundElementProps;\n    };\n    TemplateParseVisitor.prototype._createElementPropertyAst = function(elementName, name, ast, sourceInfo) {\n      var unit = null;\n      var bindingType;\n      var boundPropertyName;\n      var parts = lang_1.StringWrapper.split(name, PROPERTY_PARTS_SEPARATOR);\n      if (parts.length === 1) {\n        boundPropertyName = this._schemaRegistry.getMappedPropName(util_1.dashCaseToCamelCase(parts[0]));\n        bindingType = template_ast_1.PropertyBindingType.Property;\n        if (!this._schemaRegistry.hasProperty(elementName, boundPropertyName)) {\n          this._reportError(\"Can't bind to '\" + boundPropertyName + \"' since it isn't a known native property in \" + sourceInfo);\n        }\n      } else if (parts[0] == ATTRIBUTE_PREFIX) {\n        boundPropertyName = util_1.dashCaseToCamelCase(parts[1]);\n        bindingType = template_ast_1.PropertyBindingType.Attribute;\n      } else if (parts[0] == CLASS_PREFIX) {\n        boundPropertyName = parts[1];\n        bindingType = template_ast_1.PropertyBindingType.Class;\n      } else if (parts[0] == STYLE_PREFIX) {\n        unit = parts.length > 2 ? parts[2] : null;\n        boundPropertyName = util_1.dashCaseToCamelCase(parts[1]);\n        bindingType = template_ast_1.PropertyBindingType.Style;\n      } else {\n        this._reportError(\"Invalid property name \" + name + \" in \" + sourceInfo);\n        bindingType = null;\n      }\n      return new template_ast_1.BoundElementPropertyAst(boundPropertyName, bindingType, ast, unit, sourceInfo);\n    };\n    TemplateParseVisitor.prototype._findComponentDirectiveNames = function(directives) {\n      var componentTypeNames = [];\n      directives.forEach(function(directive) {\n        var typeName = directive.directive.type.name;\n        if (directive.directive.isComponent) {\n          componentTypeNames.push(typeName);\n        }\n      });\n      return componentTypeNames;\n    };\n    TemplateParseVisitor.prototype._assertOnlyOneComponent = function(directives, sourceInfo) {\n      var componentTypeNames = this._findComponentDirectiveNames(directives);\n      if (componentTypeNames.length > 1) {\n        this._reportError(\"More than one component: \" + componentTypeNames.join(',') + \" in \" + sourceInfo);\n      }\n    };\n    TemplateParseVisitor.prototype._assertNoComponentsNorElementBindingsOnTemplate = function(directives, elementProps, sourceInfo) {\n      var _this = this;\n      var componentTypeNames = this._findComponentDirectiveNames(directives);\n      if (componentTypeNames.length > 0) {\n        this._reportError(\"Components on an embedded template: \" + componentTypeNames.join(',') + \" in \" + sourceInfo);\n      }\n      elementProps.forEach(function(prop) {\n        _this._reportError(\"Property binding \" + prop.name + \" not used by any directive on an embedded template in \" + prop.sourceInfo);\n      });\n    };\n    TemplateParseVisitor.prototype._assertAllEventsPublishedByDirectives = function(directives, events, sourceInfo) {\n      var _this = this;\n      var allDirectiveEvents = new Set();\n      directives.forEach(function(directive) {\n        collection_1.StringMapWrapper.forEach(directive.directive.outputs, function(eventName, _) {\n          allDirectiveEvents.add(eventName);\n        });\n      });\n      events.forEach(function(event) {\n        if (lang_1.isPresent(event.target) || !collection_1.SetWrapper.has(allDirectiveEvents, event.name)) {\n          _this._reportError(\"Event binding \" + event.fullName + \" not emitted by any directive on an embedded template in \" + sourceInfo);\n        }\n      });\n    };\n    return TemplateParseVisitor;\n  })();\n  var NonBindableVisitor = (function() {\n    function NonBindableVisitor() {}\n    NonBindableVisitor.prototype.visitElement = function(ast, component) {\n      var preparsedElement = template_preparser_1.preparseElement(ast);\n      if (preparsedElement.type === template_preparser_1.PreparsedElementType.SCRIPT || preparsedElement.type === template_preparser_1.PreparsedElementType.STYLE || preparsedElement.type === template_preparser_1.PreparsedElementType.STYLESHEET) {\n        return null;\n      }\n      var attrNameAndValues = ast.attrs.map(function(attrAst) {\n        return [attrAst.name, attrAst.value];\n      });\n      var selector = createElementCssSelector(ast.name, attrNameAndValues);\n      var ngContentIndex = component.findNgContentIndex(selector);\n      var children = html_ast_1.htmlVisitAll(this, ast.children, EMPTY_COMPONENT);\n      return new template_ast_1.ElementAst(ast.name, html_ast_1.htmlVisitAll(this, ast.attrs), [], [], [], [], children, ngContentIndex, ast.sourceInfo);\n    };\n    NonBindableVisitor.prototype.visitAttr = function(ast, context) {\n      return new template_ast_1.AttrAst(ast.name, ast.value, ast.sourceInfo);\n    };\n    NonBindableVisitor.prototype.visitText = function(ast, component) {\n      var ngContentIndex = component.findNgContentIndex(TEXT_CSS_SELECTOR);\n      return new template_ast_1.TextAst(ast.value, ngContentIndex, ast.sourceInfo);\n    };\n    return NonBindableVisitor;\n  })();\n  var BoundElementOrDirectiveProperty = (function() {\n    function BoundElementOrDirectiveProperty(name, expression, isLiteral, sourceInfo) {\n      this.name = name;\n      this.expression = expression;\n      this.isLiteral = isLiteral;\n      this.sourceInfo = sourceInfo;\n    }\n    return BoundElementOrDirectiveProperty;\n  })();\n  function splitClasses(classAttrValue) {\n    return lang_1.StringWrapper.split(classAttrValue.trim(), /\\s+/g);\n  }\n  exports.splitClasses = splitClasses;\n  var Component = (function() {\n    function Component(ngContentIndexMatcher, wildcardNgContentIndex) {\n      this.ngContentIndexMatcher = ngContentIndexMatcher;\n      this.wildcardNgContentIndex = wildcardNgContentIndex;\n    }\n    Component.create = function(directives) {\n      if (directives.length === 0 || !directives[0].directive.isComponent) {\n        return EMPTY_COMPONENT;\n      }\n      var matcher = new selector_1.SelectorMatcher();\n      var ngContentSelectors = directives[0].directive.template.ngContentSelectors;\n      var wildcardNgContentIndex = null;\n      for (var i = 0; i < ngContentSelectors.length; i++) {\n        var selector = ngContentSelectors[i];\n        if (lang_1.StringWrapper.equals(selector, '*')) {\n          wildcardNgContentIndex = i;\n        } else {\n          matcher.addSelectables(selector_1.CssSelector.parse(ngContentSelectors[i]), i);\n        }\n      }\n      return new Component(matcher, wildcardNgContentIndex);\n    };\n    Component.prototype.findNgContentIndex = function(selector) {\n      var ngContentIndices = [];\n      this.ngContentIndexMatcher.match(selector, function(selector, ngContentIndex) {\n        ngContentIndices.push(ngContentIndex);\n      });\n      collection_1.ListWrapper.sort(ngContentIndices);\n      if (lang_1.isPresent(this.wildcardNgContentIndex)) {\n        ngContentIndices.push(this.wildcardNgContentIndex);\n      }\n      return ngContentIndices.length > 0 ? ngContentIndices[0] : null;\n    };\n    return Component;\n  })();\n  function createElementCssSelector(elementName, matchableAttrs) {\n    var cssSelector = new selector_1.CssSelector();\n    cssSelector.setElement(elementName);\n    for (var i = 0; i < matchableAttrs.length; i++) {\n      var attrName = matchableAttrs[i][0].toLowerCase();\n      var attrValue = matchableAttrs[i][1];\n      cssSelector.addAttribute(attrName, attrValue);\n      if (attrName == CLASS_ATTR) {\n        var classes = splitClasses(attrValue);\n        classes.forEach(function(className) {\n          return cssSelector.addClassName(className);\n        });\n      }\n    }\n    return cssSelector;\n  }\n  var EMPTY_COMPONENT = new Component(new selector_1.SelectorMatcher(), null);\n  var NON_BINDABLE_VISITOR = new NonBindableVisitor();\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"angular2/src/core/dom/browser_adapter\", [\"angular2/src/facade/collection\", \"angular2/src/facade/lang\", \"angular2/src/core/dom/dom_adapter\", \"angular2/src/core/dom/generic_browser_adapter\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  var __extends = (this && this.__extends) || function(d, b) {\n    for (var p in b)\n      if (b.hasOwnProperty(p))\n        d[p] = b[p];\n    function __() {\n      this.constructor = d;\n    }\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n  };\n  var collection_1 = require(\"angular2/src/facade/collection\");\n  var lang_1 = require(\"angular2/src/facade/lang\");\n  var dom_adapter_1 = require(\"angular2/src/core/dom/dom_adapter\");\n  var generic_browser_adapter_1 = require(\"angular2/src/core/dom/generic_browser_adapter\");\n  var _attrToPropMap = {\n    'class': 'className',\n    'innerHtml': 'innerHTML',\n    'readonly': 'readOnly',\n    'tabindex': 'tabIndex'\n  };\n  var DOM_KEY_LOCATION_NUMPAD = 3;\n  var _keyMap = {\n    '\\b': 'Backspace',\n    '\\t': 'Tab',\n    '\\x7F': 'Delete',\n    '\\x1B': 'Escape',\n    'Del': 'Delete',\n    'Esc': 'Escape',\n    'Left': 'ArrowLeft',\n    'Right': 'ArrowRight',\n    'Up': 'ArrowUp',\n    'Down': 'ArrowDown',\n    'Menu': 'ContextMenu',\n    'Scroll': 'ScrollLock',\n    'Win': 'OS'\n  };\n  var _chromeNumKeyPadMap = {\n    'A': '1',\n    'B': '2',\n    'C': '3',\n    'D': '4',\n    'E': '5',\n    'F': '6',\n    'G': '7',\n    'H': '8',\n    'I': '9',\n    'J': '*',\n    'K': '+',\n    'M': '-',\n    'N': '.',\n    'O': '/',\n    '\\x60': '0',\n    '\\x90': 'NumLock'\n  };\n  var BrowserDomAdapter = (function(_super) {\n    __extends(BrowserDomAdapter, _super);\n    function BrowserDomAdapter() {\n      _super.apply(this, arguments);\n    }\n    BrowserDomAdapter.prototype.parse = function(templateHtml) {\n      throw new Error(\"parse not implemented\");\n    };\n    BrowserDomAdapter.makeCurrent = function() {\n      dom_adapter_1.setRootDomAdapter(new BrowserDomAdapter());\n    };\n    BrowserDomAdapter.prototype.hasProperty = function(element, name) {\n      return name in element;\n    };\n    BrowserDomAdapter.prototype.setProperty = function(el, name, value) {\n      el[name] = value;\n    };\n    BrowserDomAdapter.prototype.getProperty = function(el, name) {\n      return el[name];\n    };\n    BrowserDomAdapter.prototype.invoke = function(el, methodName, args) {\n      el[methodName].apply(el, args);\n    };\n    BrowserDomAdapter.prototype.logError = function(error) {\n      if (window.console.error) {\n        window.console.error(error);\n      } else {\n        window.console.log(error);\n      }\n    };\n    BrowserDomAdapter.prototype.log = function(error) {\n      window.console.log(error);\n    };\n    BrowserDomAdapter.prototype.logGroup = function(error) {\n      if (window.console.group) {\n        window.console.group(error);\n        this.logError(error);\n      } else {\n        window.console.log(error);\n      }\n    };\n    BrowserDomAdapter.prototype.logGroupEnd = function() {\n      if (window.console.groupEnd) {\n        window.console.groupEnd();\n      }\n    };\n    Object.defineProperty(BrowserDomAdapter.prototype, \"attrToPropMap\", {\n      get: function() {\n        return _attrToPropMap;\n      },\n      enumerable: true,\n      configurable: true\n    });\n    BrowserDomAdapter.prototype.query = function(selector) {\n      return document.querySelector(selector);\n    };\n    BrowserDomAdapter.prototype.querySelector = function(el, selector) {\n      return el.querySelector(selector);\n    };\n    BrowserDomAdapter.prototype.querySelectorAll = function(el, selector) {\n      return el.querySelectorAll(selector);\n    };\n    BrowserDomAdapter.prototype.on = function(el, evt, listener) {\n      el.addEventListener(evt, listener, false);\n    };\n    BrowserDomAdapter.prototype.onAndCancel = function(el, evt, listener) {\n      el.addEventListener(evt, listener, false);\n      return function() {\n        el.removeEventListener(evt, listener, false);\n      };\n    };\n    BrowserDomAdapter.prototype.dispatchEvent = function(el, evt) {\n      el.dispatchEvent(evt);\n    };\n    BrowserDomAdapter.prototype.createMouseEvent = function(eventType) {\n      var evt = document.createEvent('MouseEvent');\n      evt.initEvent(eventType, true, true);\n      return evt;\n    };\n    BrowserDomAdapter.prototype.createEvent = function(eventType) {\n      var evt = document.createEvent('Event');\n      evt.initEvent(eventType, true, true);\n      return evt;\n    };\n    BrowserDomAdapter.prototype.preventDefault = function(evt) {\n      evt.preventDefault();\n      evt.returnValue = false;\n    };\n    BrowserDomAdapter.prototype.isPrevented = function(evt) {\n      return evt.defaultPrevented || lang_1.isPresent(evt.returnValue) && !evt.returnValue;\n    };\n    BrowserDomAdapter.prototype.getInnerHTML = function(el) {\n      return el.innerHTML;\n    };\n    BrowserDomAdapter.prototype.getOuterHTML = function(el) {\n      return el.outerHTML;\n    };\n    BrowserDomAdapter.prototype.nodeName = function(node) {\n      return node.nodeName;\n    };\n    BrowserDomAdapter.prototype.nodeValue = function(node) {\n      return node.nodeValue;\n    };\n    BrowserDomAdapter.prototype.type = function(node) {\n      return node.type;\n    };\n    BrowserDomAdapter.prototype.content = function(node) {\n      if (this.hasProperty(node, \"content\")) {\n        return node.content;\n      } else {\n        return node;\n      }\n    };\n    BrowserDomAdapter.prototype.firstChild = function(el) {\n      return el.firstChild;\n    };\n    BrowserDomAdapter.prototype.nextSibling = function(el) {\n      return el.nextSibling;\n    };\n    BrowserDomAdapter.prototype.parentElement = function(el) {\n      return el.parentNode;\n    };\n    BrowserDomAdapter.prototype.childNodes = function(el) {\n      return el.childNodes;\n    };\n    BrowserDomAdapter.prototype.childNodesAsList = function(el) {\n      var childNodes = el.childNodes;\n      var res = collection_1.ListWrapper.createFixedSize(childNodes.length);\n      for (var i = 0; i < childNodes.length; i++) {\n        res[i] = childNodes[i];\n      }\n      return res;\n    };\n    BrowserDomAdapter.prototype.clearNodes = function(el) {\n      while (el.firstChild) {\n        el.removeChild(el.firstChild);\n      }\n    };\n    BrowserDomAdapter.prototype.appendChild = function(el, node) {\n      el.appendChild(node);\n    };\n    BrowserDomAdapter.prototype.removeChild = function(el, node) {\n      el.removeChild(node);\n    };\n    BrowserDomAdapter.prototype.replaceChild = function(el, newChild, oldChild) {\n      el.replaceChild(newChild, oldChild);\n    };\n    BrowserDomAdapter.prototype.remove = function(node) {\n      if (node.parentNode) {\n        node.parentNode.removeChild(node);\n      }\n      return node;\n    };\n    BrowserDomAdapter.prototype.insertBefore = function(el, node) {\n      el.parentNode.insertBefore(node, el);\n    };\n    BrowserDomAdapter.prototype.insertAllBefore = function(el, nodes) {\n      nodes.forEach(function(n) {\n        return el.parentNode.insertBefore(n, el);\n      });\n    };\n    BrowserDomAdapter.prototype.insertAfter = function(el, node) {\n      el.parentNode.insertBefore(node, el.nextSibling);\n    };\n    BrowserDomAdapter.prototype.setInnerHTML = function(el, value) {\n      el.innerHTML = value;\n    };\n    BrowserDomAdapter.prototype.getText = function(el) {\n      return el.textContent;\n    };\n    BrowserDomAdapter.prototype.setText = function(el, value) {\n      el.textContent = value;\n    };\n    BrowserDomAdapter.prototype.getValue = function(el) {\n      return el.value;\n    };\n    BrowserDomAdapter.prototype.setValue = function(el, value) {\n      el.value = value;\n    };\n    BrowserDomAdapter.prototype.getChecked = function(el) {\n      return el.checked;\n    };\n    BrowserDomAdapter.prototype.setChecked = function(el, value) {\n      el.checked = value;\n    };\n    BrowserDomAdapter.prototype.createComment = function(text) {\n      return document.createComment(text);\n    };\n    BrowserDomAdapter.prototype.createTemplate = function(html) {\n      var t = document.createElement('template');\n      t.innerHTML = html;\n      return t;\n    };\n    BrowserDomAdapter.prototype.createElement = function(tagName, doc) {\n      if (doc === void 0) {\n        doc = document;\n      }\n      return doc.createElement(tagName);\n    };\n    BrowserDomAdapter.prototype.createElementNS = function(ns, tagName, doc) {\n      if (doc === void 0) {\n        doc = document;\n      }\n      return doc.createElementNS(ns, tagName);\n    };\n    BrowserDomAdapter.prototype.createTextNode = function(text, doc) {\n      if (doc === void 0) {\n        doc = document;\n      }\n      return doc.createTextNode(text);\n    };\n    BrowserDomAdapter.prototype.createScriptTag = function(attrName, attrValue, doc) {\n      if (doc === void 0) {\n        doc = document;\n      }\n      var el = doc.createElement('SCRIPT');\n      el.setAttribute(attrName, attrValue);\n      return el;\n    };\n    BrowserDomAdapter.prototype.createStyleElement = function(css, doc) {\n      if (doc === void 0) {\n        doc = document;\n      }\n      var style = doc.createElement('style');\n      this.appendChild(style, this.createTextNode(css));\n      return style;\n    };\n    BrowserDomAdapter.prototype.createShadowRoot = function(el) {\n      return el.createShadowRoot();\n    };\n    BrowserDomAdapter.prototype.getShadowRoot = function(el) {\n      return el.shadowRoot;\n    };\n    BrowserDomAdapter.prototype.getHost = function(el) {\n      return el.host;\n    };\n    BrowserDomAdapter.prototype.clone = function(node) {\n      return node.cloneNode(true);\n    };\n    BrowserDomAdapter.prototype.getElementsByClassName = function(element, name) {\n      return element.getElementsByClassName(name);\n    };\n    BrowserDomAdapter.prototype.getElementsByTagName = function(element, name) {\n      return element.getElementsByTagName(name);\n    };\n    BrowserDomAdapter.prototype.classList = function(element) {\n      return Array.prototype.slice.call(element.classList, 0);\n    };\n    BrowserDomAdapter.prototype.addClass = function(element, classname) {\n      element.classList.add(classname);\n    };\n    BrowserDomAdapter.prototype.removeClass = function(element, classname) {\n      element.classList.remove(classname);\n    };\n    BrowserDomAdapter.prototype.hasClass = function(element, classname) {\n      return element.classList.contains(classname);\n    };\n    BrowserDomAdapter.prototype.setStyle = function(element, stylename, stylevalue) {\n      element.style[stylename] = stylevalue;\n    };\n    BrowserDomAdapter.prototype.removeStyle = function(element, stylename) {\n      element.style[stylename] = null;\n    };\n    BrowserDomAdapter.prototype.getStyle = function(element, stylename) {\n      return element.style[stylename];\n    };\n    BrowserDomAdapter.prototype.tagName = function(element) {\n      return element.tagName;\n    };\n    BrowserDomAdapter.prototype.attributeMap = function(element) {\n      var res = new Map();\n      var elAttrs = element.attributes;\n      for (var i = 0; i < elAttrs.length; i++) {\n        var attrib = elAttrs[i];\n        res.set(attrib.name, attrib.value);\n      }\n      return res;\n    };\n    BrowserDomAdapter.prototype.hasAttribute = function(element, attribute) {\n      return element.hasAttribute(attribute);\n    };\n    BrowserDomAdapter.prototype.getAttribute = function(element, attribute) {\n      return element.getAttribute(attribute);\n    };\n    BrowserDomAdapter.prototype.setAttribute = function(element, name, value) {\n      element.setAttribute(name, value);\n    };\n    BrowserDomAdapter.prototype.setAttributeNS = function(element, ns, name, value) {\n      element.setAttributeNS(ns, name, value);\n    };\n    BrowserDomAdapter.prototype.removeAttribute = function(element, attribute) {\n      element.removeAttribute(attribute);\n    };\n    BrowserDomAdapter.prototype.templateAwareRoot = function(el) {\n      return this.isTemplateElement(el) ? this.content(el) : el;\n    };\n    BrowserDomAdapter.prototype.createHtmlDocument = function() {\n      return document.implementation.createHTMLDocument('fakeTitle');\n    };\n    BrowserDomAdapter.prototype.defaultDoc = function() {\n      return document;\n    };\n    BrowserDomAdapter.prototype.getBoundingClientRect = function(el) {\n      try {\n        return el.getBoundingClientRect();\n      } catch (e) {\n        return {\n          top: 0,\n          bottom: 0,\n          left: 0,\n          right: 0,\n          width: 0,\n          height: 0\n        };\n      }\n    };\n    BrowserDomAdapter.prototype.getTitle = function() {\n      return document.title;\n    };\n    BrowserDomAdapter.prototype.setTitle = function(newTitle) {\n      document.title = newTitle || '';\n    };\n    BrowserDomAdapter.prototype.elementMatches = function(n, selector) {\n      var matches = false;\n      if (n instanceof HTMLElement) {\n        if (n.matches) {\n          matches = n.matches(selector);\n        } else if (n.msMatchesSelector) {\n          matches = n.msMatchesSelector(selector);\n        } else if (n.webkitMatchesSelector) {\n          matches = n.webkitMatchesSelector(selector);\n        }\n      }\n      return matches;\n    };\n    BrowserDomAdapter.prototype.isTemplateElement = function(el) {\n      return el instanceof HTMLElement && el.nodeName == \"TEMPLATE\";\n    };\n    BrowserDomAdapter.prototype.isTextNode = function(node) {\n      return node.nodeType === Node.TEXT_NODE;\n    };\n    BrowserDomAdapter.prototype.isCommentNode = function(node) {\n      return node.nodeType === Node.COMMENT_NODE;\n    };\n    BrowserDomAdapter.prototype.isElementNode = function(node) {\n      return node.nodeType === Node.ELEMENT_NODE;\n    };\n    BrowserDomAdapter.prototype.hasShadowRoot = function(node) {\n      return node instanceof HTMLElement && lang_1.isPresent(node.shadowRoot);\n    };\n    BrowserDomAdapter.prototype.isShadowRoot = function(node) {\n      return node instanceof DocumentFragment;\n    };\n    BrowserDomAdapter.prototype.importIntoDoc = function(node) {\n      var toImport = node;\n      if (this.isTemplateElement(node)) {\n        toImport = this.content(node);\n      }\n      return document.importNode(toImport, true);\n    };\n    BrowserDomAdapter.prototype.adoptNode = function(node) {\n      return document.adoptNode(node);\n    };\n    BrowserDomAdapter.prototype.getHref = function(el) {\n      return el.href;\n    };\n    BrowserDomAdapter.prototype.getEventKey = function(event) {\n      var key = event.key;\n      if (lang_1.isBlank(key)) {\n        key = event.keyIdentifier;\n        if (lang_1.isBlank(key)) {\n          return 'Unidentified';\n        }\n        if (key.startsWith('U+')) {\n          key = String.fromCharCode(parseInt(key.substring(2), 16));\n          if (event.location === DOM_KEY_LOCATION_NUMPAD && _chromeNumKeyPadMap.hasOwnProperty(key)) {\n            key = _chromeNumKeyPadMap[key];\n          }\n        }\n      }\n      if (_keyMap.hasOwnProperty(key)) {\n        key = _keyMap[key];\n      }\n      return key;\n    };\n    BrowserDomAdapter.prototype.getGlobalEventTarget = function(target) {\n      if (target == \"window\") {\n        return window;\n      } else if (target == \"document\") {\n        return document;\n      } else if (target == \"body\") {\n        return document.body;\n      }\n    };\n    BrowserDomAdapter.prototype.getHistory = function() {\n      return window.history;\n    };\n    BrowserDomAdapter.prototype.getLocation = function() {\n      return window.location;\n    };\n    BrowserDomAdapter.prototype.getBaseHref = function() {\n      var href = getBaseElementHref();\n      if (lang_1.isBlank(href)) {\n        return null;\n      }\n      return relativePath(href);\n    };\n    BrowserDomAdapter.prototype.resetBaseElement = function() {\n      baseElement = null;\n    };\n    BrowserDomAdapter.prototype.getUserAgent = function() {\n      return window.navigator.userAgent;\n    };\n    BrowserDomAdapter.prototype.setData = function(element, name, value) {\n      this.setAttribute(element, 'data-' + name, value);\n    };\n    BrowserDomAdapter.prototype.getData = function(element, name) {\n      return this.getAttribute(element, 'data-' + name);\n    };\n    BrowserDomAdapter.prototype.getComputedStyle = function(element) {\n      return getComputedStyle(element);\n    };\n    BrowserDomAdapter.prototype.setGlobalVar = function(path, value) {\n      lang_1.setValueOnPath(lang_1.global, path, value);\n    };\n    BrowserDomAdapter.prototype.requestAnimationFrame = function(callback) {\n      return window.requestAnimationFrame(callback);\n    };\n    BrowserDomAdapter.prototype.cancelAnimationFrame = function(id) {\n      window.cancelAnimationFrame(id);\n    };\n    BrowserDomAdapter.prototype.performanceNow = function() {\n      if (lang_1.isPresent(window.performance) && lang_1.isPresent(window.performance.now)) {\n        return window.performance.now();\n      } else {\n        return lang_1.DateWrapper.toMillis(lang_1.DateWrapper.now());\n      }\n    };\n    return BrowserDomAdapter;\n  })(generic_browser_adapter_1.GenericBrowserDomAdapter);\n  exports.BrowserDomAdapter = BrowserDomAdapter;\n  var baseElement = null;\n  function getBaseElementHref() {\n    if (lang_1.isBlank(baseElement)) {\n      baseElement = document.querySelector('base');\n      if (lang_1.isBlank(baseElement)) {\n        return null;\n      }\n    }\n    return baseElement.getAttribute('href');\n  }\n  var urlParsingNode = null;\n  function relativePath(url) {\n    if (lang_1.isBlank(urlParsingNode)) {\n      urlParsingNode = document.createElement(\"a\");\n    }\n    urlParsingNode.setAttribute('href', url);\n    return (urlParsingNode.pathname.charAt(0) === '/') ? urlParsingNode.pathname : '/' + urlParsingNode.pathname;\n  }\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"angular2/src/upgrade/upgrade_adapter\", [\"angular2/angular2\", \"angular2/src/core/application_common\", \"angular2/src/core/application_ref\", \"angular2/src/compiler/compiler\", \"angular2/src/facade/async\", \"angular2/src/upgrade/metadata\", \"angular2/src/upgrade/util\", \"angular2/src/upgrade/constants\", \"angular2/src/upgrade/downgrade_ng2_adapter\", \"angular2/src/upgrade/upgrade_ng1_adapter\", \"angular2/src/upgrade/angular_js\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  var angular2_1 = require(\"angular2/angular2\");\n  var application_common_1 = require(\"angular2/src/core/application_common\");\n  var application_ref_1 = require(\"angular2/src/core/application_ref\");\n  var compiler_1 = require(\"angular2/src/compiler/compiler\");\n  var async_1 = require(\"angular2/src/facade/async\");\n  var metadata_1 = require(\"angular2/src/upgrade/metadata\");\n  var util_1 = require(\"angular2/src/upgrade/util\");\n  var constants_1 = require(\"angular2/src/upgrade/constants\");\n  var downgrade_ng2_adapter_1 = require(\"angular2/src/upgrade/downgrade_ng2_adapter\");\n  var upgrade_ng1_adapter_1 = require(\"angular2/src/upgrade/upgrade_ng1_adapter\");\n  var angular = require(\"angular2/src/upgrade/angular_js\");\n  var upgradeCount = 0;\n  var UpgradeAdapter = (function() {\n    function UpgradeAdapter() {\n      this.idPrefix = \"NG2_UPGRADE_\" + upgradeCount++ + \"_\";\n      this.upgradedComponents = [];\n      this.downgradedComponents = {};\n      this.providers = [];\n    }\n    UpgradeAdapter.prototype.downgradeNg2Component = function(type) {\n      this.upgradedComponents.push(type);\n      var info = metadata_1.getComponentInfo(type);\n      return ng1ComponentDirective(info, \"\" + this.idPrefix + info.selector + \"_c\");\n    };\n    UpgradeAdapter.prototype.upgradeNg1Component = function(name) {\n      if (this.downgradedComponents.hasOwnProperty(name)) {\n        return this.downgradedComponents[name].type;\n      } else {\n        return (this.downgradedComponents[name] = new upgrade_ng1_adapter_1.UpgradeNg1ComponentAdapterBuilder(name)).type;\n      }\n    };\n    UpgradeAdapter.prototype.bootstrap = function(element, modules, config) {\n      var _this = this;\n      var upgrade = new UpgradeAdapterRef();\n      var ng1Injector = null;\n      var platformRef = angular2_1.platform();\n      var applicationRef = platformRef.application([application_ref_1.applicationCommonProviders(), application_common_1.applicationDomProviders(), compiler_1.compilerProviders(), angular2_1.provide(constants_1.NG1_INJECTOR, {useFactory: function() {\n          return ng1Injector;\n        }}), angular2_1.provide(constants_1.NG1_COMPILE, {useFactory: function() {\n          return ng1Injector.get(constants_1.NG1_COMPILE);\n        }}), this.providers]);\n      var injector = applicationRef.injector;\n      var ngZone = injector.get(angular2_1.NgZone);\n      var compiler = injector.get(angular2_1.Compiler);\n      var delayApplyExps = [];\n      var original$applyFn;\n      var rootScopePrototype;\n      var rootScope;\n      var protoViewRefMap = {};\n      var ng1Module = angular.module(this.idPrefix, modules);\n      var ng1compilePromise = null;\n      ng1Module.value(constants_1.NG2_INJECTOR, injector).value(constants_1.NG2_ZONE, ngZone).value(constants_1.NG2_COMPILER, compiler).value(constants_1.NG2_PROTO_VIEW_REF_MAP, protoViewRefMap).value(constants_1.NG2_APP_VIEW_MANAGER, injector.get(angular2_1.AppViewManager)).config(['$provide', function(provide) {\n        provide.decorator(constants_1.NG1_ROOT_SCOPE, ['$delegate', function(rootScopeDelegate) {\n          rootScopePrototype = rootScopeDelegate.constructor.prototype;\n          if (rootScopePrototype.hasOwnProperty('$apply')) {\n            original$applyFn = rootScopePrototype.$apply;\n            rootScopePrototype.$apply = function(exp) {\n              return delayApplyExps.push(exp);\n            };\n          } else {\n            throw new Error(\"Failed to find '$apply' on '$rootScope'!\");\n          }\n          return rootScope = rootScopeDelegate;\n        }]);\n      }]).run(['$injector', '$rootScope', function(injector, rootScope) {\n        ng1Injector = injector;\n        async_1.ObservableWrapper.subscribe(ngZone.onTurnDone, function(_) {\n          ngZone.run(function() {\n            return rootScope.$apply();\n          });\n        });\n        ng1compilePromise = upgrade_ng1_adapter_1.UpgradeNg1ComponentAdapterBuilder.resolve(_this.downgradedComponents, injector);\n      }]);\n      angular.element(element).data(util_1.controllerKey(constants_1.NG2_INJECTOR), injector);\n      ngZone.run(function() {\n        angular.bootstrap(element, [_this.idPrefix], config);\n      });\n      Promise.all([this.compileNg2Components(compiler, protoViewRefMap), ng1compilePromise]).then(function() {\n        ngZone.run(function() {\n          if (rootScopePrototype) {\n            rootScopePrototype.$apply = original$applyFn;\n            while (delayApplyExps.length) {\n              rootScope.$apply(delayApplyExps.shift());\n            }\n            upgrade._bootstrapDone(applicationRef, ng1Injector);\n            rootScopePrototype = null;\n          }\n        });\n      }, util_1.onError);\n      return upgrade;\n    };\n    UpgradeAdapter.prototype.addProvider = function(provider) {\n      this.providers.push(provider);\n    };\n    UpgradeAdapter.prototype.upgradeNg1Provider = function(name, options) {\n      var token = options && options.asToken || name;\n      this.providers.push(angular2_1.provide(token, {\n        useFactory: function(ng1Injector) {\n          return ng1Injector.get(name);\n        },\n        deps: [constants_1.NG1_INJECTOR]\n      }));\n    };\n    UpgradeAdapter.prototype.downgradeNg2Provider = function(token) {\n      var factory = function(injector) {\n        return injector.get(token);\n      };\n      factory.$inject = [constants_1.NG2_INJECTOR];\n      return factory;\n    };\n    UpgradeAdapter.prototype.compileNg2Components = function(compiler, protoViewRefMap) {\n      var _this = this;\n      var promises = [];\n      var types = this.upgradedComponents;\n      for (var i = 0; i < types.length; i++) {\n        promises.push(compiler.compileInHost(types[i]));\n      }\n      return Promise.all(promises).then(function(protoViews) {\n        var types = _this.upgradedComponents;\n        for (var i = 0; i < protoViews.length; i++) {\n          protoViewRefMap[metadata_1.getComponentInfo(types[i]).selector] = protoViews[i];\n        }\n        return protoViewRefMap;\n      }, util_1.onError);\n    };\n    return UpgradeAdapter;\n  })();\n  exports.UpgradeAdapter = UpgradeAdapter;\n  function ng1ComponentDirective(info, idPrefix) {\n    directiveFactory.$inject = [constants_1.NG2_PROTO_VIEW_REF_MAP, constants_1.NG2_APP_VIEW_MANAGER, constants_1.NG1_PARSE];\n    function directiveFactory(protoViewRefMap, viewManager, parse) {\n      var protoView = protoViewRefMap[info.selector];\n      if (!protoView)\n        throw new Error('Expecting ProtoViewRef for: ' + info.selector);\n      var idCount = 0;\n      return {\n        restrict: 'E',\n        require: constants_1.REQUIRE_INJECTOR,\n        link: {post: function(scope, element, attrs, parentInjector, transclude) {\n            var domElement = element[0];\n            var facade = new downgrade_ng2_adapter_1.DowngradeNg2ComponentAdapter(idPrefix + (idCount++), info, element, attrs, scope, parentInjector, parse, viewManager, protoView);\n            facade.setupInputs();\n            facade.bootstrapNg2();\n            facade.projectContent();\n            facade.setupOutputs();\n            facade.registerCleanup();\n          }}\n      };\n    }\n    return directiveFactory;\n  }\n  var UpgradeAdapterRef = (function() {\n    function UpgradeAdapterRef() {\n      this._readyFn = null;\n      this.ng1RootScope = null;\n      this.ng1Injector = null;\n      this.ng2ApplicationRef = null;\n      this.ng2Injector = null;\n    }\n    UpgradeAdapterRef.prototype._bootstrapDone = function(applicationRef, ng1Injector) {\n      this.ng2ApplicationRef = applicationRef;\n      this.ng2Injector = applicationRef.injector;\n      this.ng1Injector = ng1Injector;\n      this.ng1RootScope = ng1Injector.get(constants_1.NG1_ROOT_SCOPE);\n      this._readyFn && this._readyFn(this);\n    };\n    UpgradeAdapterRef.prototype.ready = function(fn) {\n      this._readyFn = fn;\n    };\n    UpgradeAdapterRef.prototype.dispose = function() {\n      this.ng1Injector.get(constants_1.NG1_ROOT_SCOPE).$destroy();\n      this.ng2ApplicationRef.dispose();\n    };\n    return UpgradeAdapterRef;\n  })();\n  exports.UpgradeAdapterRef = UpgradeAdapterRef;\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"@reactivex/rxjs/dist/cjs/observables/ArrayObservable\", [\"@reactivex/rxjs/dist/cjs/Observable\", \"@reactivex/rxjs/dist/cjs/observables/ScalarObservable\", \"@reactivex/rxjs/dist/cjs/observables/EmptyObservable\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  'use strict';\n  exports.__esModule = true;\n  function _interopRequireDefault(obj) {\n    return obj && obj.__esModule ? obj : {'default': obj};\n  }\n  function _classCallCheck(instance, Constructor) {\n    if (!(instance instanceof Constructor)) {\n      throw new TypeError('Cannot call a class as a function');\n    }\n  }\n  function _inherits(subClass, superClass) {\n    if (typeof superClass !== 'function' && superClass !== null) {\n      throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass);\n    }\n    subClass.prototype = Object.create(superClass && superClass.prototype, {constructor: {\n        value: subClass,\n        enumerable: false,\n        writable: true,\n        configurable: true\n      }});\n    if (superClass)\n      Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass;\n  }\n  var _Observable2 = require(\"@reactivex/rxjs/dist/cjs/Observable\");\n  var _Observable3 = _interopRequireDefault(_Observable2);\n  var _ScalarObservable = require(\"@reactivex/rxjs/dist/cjs/observables/ScalarObservable\");\n  var _ScalarObservable2 = _interopRequireDefault(_ScalarObservable);\n  var _EmptyObservable = require(\"@reactivex/rxjs/dist/cjs/observables/EmptyObservable\");\n  var _EmptyObservable2 = _interopRequireDefault(_EmptyObservable);\n  var ArrayObservable = (function(_Observable) {\n    _inherits(ArrayObservable, _Observable);\n    function ArrayObservable(array, scheduler) {\n      _classCallCheck(this, ArrayObservable);\n      _Observable.call(this);\n      this.array = array;\n      this.scheduler = scheduler;\n      if (!scheduler && array.length === 1) {\n        this._isScalar = true;\n        this.value = array[0];\n      }\n    }\n    ArrayObservable.create = function create(array, scheduler) {\n      return new ArrayObservable(array, scheduler);\n    };\n    ArrayObservable.of = function of() {\n      for (var _len = arguments.length,\n          array = Array(_len),\n          _key = 0; _key < _len; _key++) {\n        array[_key] = arguments[_key];\n      }\n      var scheduler = array[array.length - 1];\n      if (scheduler && typeof scheduler.schedule === 'function') {\n        array.pop();\n      } else {\n        scheduler = void 0;\n      }\n      var len = array.length;\n      if (len > 1) {\n        return new ArrayObservable(array, scheduler);\n      } else if (len === 1) {\n        return new _ScalarObservable2['default'](array[0], scheduler);\n      } else {\n        return new _EmptyObservable2['default'](scheduler);\n      }\n    };\n    ArrayObservable.dispatch = function dispatch(state) {\n      var array = state.array;\n      var index = state.index;\n      var count = state.count;\n      var subscriber = state.subscriber;\n      if (index >= count) {\n        subscriber.complete();\n        return ;\n      }\n      subscriber.next(array[index]);\n      if (subscriber.isUnsubscribed) {\n        return ;\n      }\n      state.index = index + 1;\n      this.schedule(state);\n    };\n    ArrayObservable.prototype._subscribe = function _subscribe(subscriber) {\n      var index = 0;\n      var array = this.array;\n      var count = array.length;\n      var scheduler = this.scheduler;\n      if (scheduler) {\n        subscriber.add(scheduler.schedule(ArrayObservable.dispatch, 0, {\n          array: array,\n          index: index,\n          count: count,\n          subscriber: subscriber\n        }));\n      } else {\n        for (var i = 0; i < count && !subscriber.isUnsubscribed; i++) {\n          subscriber.next(array[i]);\n        }\n        subscriber.complete();\n      }\n    };\n    return ArrayObservable;\n  })(_Observable3['default']);\n  exports['default'] = ArrayObservable;\n  module.exports = exports['default'];\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"@reactivex/rxjs/dist/cjs/operators/concat-static\", [\"@reactivex/rxjs/dist/cjs/Observable\", \"@reactivex/rxjs/dist/cjs/schedulers/immediate\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  'use strict';\n  exports.__esModule = true;\n  exports['default'] = concat;\n  function _interopRequireDefault(obj) {\n    return obj && obj.__esModule ? obj : {'default': obj};\n  }\n  var _Observable = require(\"@reactivex/rxjs/dist/cjs/Observable\");\n  var _Observable2 = _interopRequireDefault(_Observable);\n  var _schedulersImmediate = require(\"@reactivex/rxjs/dist/cjs/schedulers/immediate\");\n  var _schedulersImmediate2 = _interopRequireDefault(_schedulersImmediate);\n  function concat() {\n    var scheduler = _schedulersImmediate2['default'];\n    for (var _len = arguments.length,\n        observables = Array(_len),\n        _key = 0; _key < _len; _key++) {\n      observables[_key] = arguments[_key];\n    }\n    var args = observables;\n    if (typeof args[observables.length - 1].schedule === 'function') {\n      scheduler = args.pop();\n      args.push(1, scheduler);\n    }\n    return _Observable2['default'].fromArray(observables).mergeAll(1);\n  }\n  module.exports = exports['default'];\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"@reactivex/rxjs/dist/cjs/schedulers/nextTick\", [\"@reactivex/rxjs/dist/cjs/schedulers/NextTickScheduler\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  'use strict';\n  exports.__esModule = true;\n  function _interopRequireDefault(obj) {\n    return obj && obj.__esModule ? obj : {'default': obj};\n  }\n  var _NextTickScheduler = require(\"@reactivex/rxjs/dist/cjs/schedulers/NextTickScheduler\");\n  var _NextTickScheduler2 = _interopRequireDefault(_NextTickScheduler);\n  exports['default'] = new _NextTickScheduler2['default']();\n  module.exports = exports['default'];\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"angular2/src/core/di/injector\", [\"angular2/src/facade/collection\", \"angular2/src/core/di/provider\", \"angular2/src/core/di/exceptions\", \"angular2/src/facade/lang\", \"angular2/src/core/di/key\", \"angular2/src/core/di/metadata\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  var collection_1 = require(\"angular2/src/facade/collection\");\n  var provider_1 = require(\"angular2/src/core/di/provider\");\n  var exceptions_1 = require(\"angular2/src/core/di/exceptions\");\n  var lang_1 = require(\"angular2/src/facade/lang\");\n  var key_1 = require(\"angular2/src/core/di/key\");\n  var metadata_1 = require(\"angular2/src/core/di/metadata\");\n  var _MAX_CONSTRUCTION_COUNTER = 10;\n  exports.UNDEFINED = lang_1.CONST_EXPR(new Object());\n  (function(Visibility) {\n    Visibility[Visibility[\"Public\"] = 0] = \"Public\";\n    Visibility[Visibility[\"Private\"] = 1] = \"Private\";\n    Visibility[Visibility[\"PublicAndPrivate\"] = 2] = \"PublicAndPrivate\";\n  })(exports.Visibility || (exports.Visibility = {}));\n  var Visibility = exports.Visibility;\n  function canSee(src, dst) {\n    return (src === dst) || (dst === Visibility.PublicAndPrivate || src === Visibility.PublicAndPrivate);\n  }\n  var ProtoInjectorInlineStrategy = (function() {\n    function ProtoInjectorInlineStrategy(protoEI, bwv) {\n      this.provider0 = null;\n      this.provider1 = null;\n      this.provider2 = null;\n      this.provider3 = null;\n      this.provider4 = null;\n      this.provider5 = null;\n      this.provider6 = null;\n      this.provider7 = null;\n      this.provider8 = null;\n      this.provider9 = null;\n      this.keyId0 = null;\n      this.keyId1 = null;\n      this.keyId2 = null;\n      this.keyId3 = null;\n      this.keyId4 = null;\n      this.keyId5 = null;\n      this.keyId6 = null;\n      this.keyId7 = null;\n      this.keyId8 = null;\n      this.keyId9 = null;\n      this.visibility0 = null;\n      this.visibility1 = null;\n      this.visibility2 = null;\n      this.visibility3 = null;\n      this.visibility4 = null;\n      this.visibility5 = null;\n      this.visibility6 = null;\n      this.visibility7 = null;\n      this.visibility8 = null;\n      this.visibility9 = null;\n      var length = bwv.length;\n      if (length > 0) {\n        this.provider0 = bwv[0].provider;\n        this.keyId0 = bwv[0].getKeyId();\n        this.visibility0 = bwv[0].visibility;\n      }\n      if (length > 1) {\n        this.provider1 = bwv[1].provider;\n        this.keyId1 = bwv[1].getKeyId();\n        this.visibility1 = bwv[1].visibility;\n      }\n      if (length > 2) {\n        this.provider2 = bwv[2].provider;\n        this.keyId2 = bwv[2].getKeyId();\n        this.visibility2 = bwv[2].visibility;\n      }\n      if (length > 3) {\n        this.provider3 = bwv[3].provider;\n        this.keyId3 = bwv[3].getKeyId();\n        this.visibility3 = bwv[3].visibility;\n      }\n      if (length > 4) {\n        this.provider4 = bwv[4].provider;\n        this.keyId4 = bwv[4].getKeyId();\n        this.visibility4 = bwv[4].visibility;\n      }\n      if (length > 5) {\n        this.provider5 = bwv[5].provider;\n        this.keyId5 = bwv[5].getKeyId();\n        this.visibility5 = bwv[5].visibility;\n      }\n      if (length > 6) {\n        this.provider6 = bwv[6].provider;\n        this.keyId6 = bwv[6].getKeyId();\n        this.visibility6 = bwv[6].visibility;\n      }\n      if (length > 7) {\n        this.provider7 = bwv[7].provider;\n        this.keyId7 = bwv[7].getKeyId();\n        this.visibility7 = bwv[7].visibility;\n      }\n      if (length > 8) {\n        this.provider8 = bwv[8].provider;\n        this.keyId8 = bwv[8].getKeyId();\n        this.visibility8 = bwv[8].visibility;\n      }\n      if (length > 9) {\n        this.provider9 = bwv[9].provider;\n        this.keyId9 = bwv[9].getKeyId();\n        this.visibility9 = bwv[9].visibility;\n      }\n    }\n    ProtoInjectorInlineStrategy.prototype.getProviderAtIndex = function(index) {\n      if (index == 0)\n        return this.provider0;\n      if (index == 1)\n        return this.provider1;\n      if (index == 2)\n        return this.provider2;\n      if (index == 3)\n        return this.provider3;\n      if (index == 4)\n        return this.provider4;\n      if (index == 5)\n        return this.provider5;\n      if (index == 6)\n        return this.provider6;\n      if (index == 7)\n        return this.provider7;\n      if (index == 8)\n        return this.provider8;\n      if (index == 9)\n        return this.provider9;\n      throw new exceptions_1.OutOfBoundsError(index);\n    };\n    ProtoInjectorInlineStrategy.prototype.createInjectorStrategy = function(injector) {\n      return new InjectorInlineStrategy(injector, this);\n    };\n    return ProtoInjectorInlineStrategy;\n  })();\n  exports.ProtoInjectorInlineStrategy = ProtoInjectorInlineStrategy;\n  var ProtoInjectorDynamicStrategy = (function() {\n    function ProtoInjectorDynamicStrategy(protoInj, bwv) {\n      var len = bwv.length;\n      this.providers = collection_1.ListWrapper.createFixedSize(len);\n      this.keyIds = collection_1.ListWrapper.createFixedSize(len);\n      this.visibilities = collection_1.ListWrapper.createFixedSize(len);\n      for (var i = 0; i < len; i++) {\n        this.providers[i] = bwv[i].provider;\n        this.keyIds[i] = bwv[i].getKeyId();\n        this.visibilities[i] = bwv[i].visibility;\n      }\n    }\n    ProtoInjectorDynamicStrategy.prototype.getProviderAtIndex = function(index) {\n      if (index < 0 || index >= this.providers.length) {\n        throw new exceptions_1.OutOfBoundsError(index);\n      }\n      return this.providers[index];\n    };\n    ProtoInjectorDynamicStrategy.prototype.createInjectorStrategy = function(ei) {\n      return new InjectorDynamicStrategy(this, ei);\n    };\n    return ProtoInjectorDynamicStrategy;\n  })();\n  exports.ProtoInjectorDynamicStrategy = ProtoInjectorDynamicStrategy;\n  var ProtoInjector = (function() {\n    function ProtoInjector(bwv) {\n      this.numberOfProviders = bwv.length;\n      this._strategy = bwv.length > _MAX_CONSTRUCTION_COUNTER ? new ProtoInjectorDynamicStrategy(this, bwv) : new ProtoInjectorInlineStrategy(this, bwv);\n    }\n    ProtoInjector.prototype.getProviderAtIndex = function(index) {\n      return this._strategy.getProviderAtIndex(index);\n    };\n    return ProtoInjector;\n  })();\n  exports.ProtoInjector = ProtoInjector;\n  var InjectorInlineStrategy = (function() {\n    function InjectorInlineStrategy(injector, protoStrategy) {\n      this.injector = injector;\n      this.protoStrategy = protoStrategy;\n      this.obj0 = exports.UNDEFINED;\n      this.obj1 = exports.UNDEFINED;\n      this.obj2 = exports.UNDEFINED;\n      this.obj3 = exports.UNDEFINED;\n      this.obj4 = exports.UNDEFINED;\n      this.obj5 = exports.UNDEFINED;\n      this.obj6 = exports.UNDEFINED;\n      this.obj7 = exports.UNDEFINED;\n      this.obj8 = exports.UNDEFINED;\n      this.obj9 = exports.UNDEFINED;\n    }\n    InjectorInlineStrategy.prototype.resetConstructionCounter = function() {\n      this.injector._constructionCounter = 0;\n    };\n    InjectorInlineStrategy.prototype.instantiateProvider = function(provider, visibility) {\n      return this.injector._new(provider, visibility);\n    };\n    InjectorInlineStrategy.prototype.attach = function(parent, isHost) {\n      var inj = this.injector;\n      inj._parent = parent;\n      inj._isHost = isHost;\n    };\n    InjectorInlineStrategy.prototype.getObjByKeyId = function(keyId, visibility) {\n      var p = this.protoStrategy;\n      var inj = this.injector;\n      if (p.keyId0 === keyId && canSee(p.visibility0, visibility)) {\n        if (this.obj0 === exports.UNDEFINED) {\n          this.obj0 = inj._new(p.provider0, p.visibility0);\n        }\n        return this.obj0;\n      }\n      if (p.keyId1 === keyId && canSee(p.visibility1, visibility)) {\n        if (this.obj1 === exports.UNDEFINED) {\n          this.obj1 = inj._new(p.provider1, p.visibility1);\n        }\n        return this.obj1;\n      }\n      if (p.keyId2 === keyId && canSee(p.visibility2, visibility)) {\n        if (this.obj2 === exports.UNDEFINED) {\n          this.obj2 = inj._new(p.provider2, p.visibility2);\n        }\n        return this.obj2;\n      }\n      if (p.keyId3 === keyId && canSee(p.visibility3, visibility)) {\n        if (this.obj3 === exports.UNDEFINED) {\n          this.obj3 = inj._new(p.provider3, p.visibility3);\n        }\n        return this.obj3;\n      }\n      if (p.keyId4 === keyId && canSee(p.visibility4, visibility)) {\n        if (this.obj4 === exports.UNDEFINED) {\n          this.obj4 = inj._new(p.provider4, p.visibility4);\n        }\n        return this.obj4;\n      }\n      if (p.keyId5 === keyId && canSee(p.visibility5, visibility)) {\n        if (this.obj5 === exports.UNDEFINED) {\n          this.obj5 = inj._new(p.provider5, p.visibility5);\n        }\n        return this.obj5;\n      }\n      if (p.keyId6 === keyId && canSee(p.visibility6, visibility)) {\n        if (this.obj6 === exports.UNDEFINED) {\n          this.obj6 = inj._new(p.provider6, p.visibility6);\n        }\n        return this.obj6;\n      }\n      if (p.keyId7 === keyId && canSee(p.visibility7, visibility)) {\n        if (this.obj7 === exports.UNDEFINED) {\n          this.obj7 = inj._new(p.provider7, p.visibility7);\n        }\n        return this.obj7;\n      }\n      if (p.keyId8 === keyId && canSee(p.visibility8, visibility)) {\n        if (this.obj8 === exports.UNDEFINED) {\n          this.obj8 = inj._new(p.provider8, p.visibility8);\n        }\n        return this.obj8;\n      }\n      if (p.keyId9 === keyId && canSee(p.visibility9, visibility)) {\n        if (this.obj9 === exports.UNDEFINED) {\n          this.obj9 = inj._new(p.provider9, p.visibility9);\n        }\n        return this.obj9;\n      }\n      return exports.UNDEFINED;\n    };\n    InjectorInlineStrategy.prototype.getObjAtIndex = function(index) {\n      if (index == 0)\n        return this.obj0;\n      if (index == 1)\n        return this.obj1;\n      if (index == 2)\n        return this.obj2;\n      if (index == 3)\n        return this.obj3;\n      if (index == 4)\n        return this.obj4;\n      if (index == 5)\n        return this.obj5;\n      if (index == 6)\n        return this.obj6;\n      if (index == 7)\n        return this.obj7;\n      if (index == 8)\n        return this.obj8;\n      if (index == 9)\n        return this.obj9;\n      throw new exceptions_1.OutOfBoundsError(index);\n    };\n    InjectorInlineStrategy.prototype.getMaxNumberOfObjects = function() {\n      return _MAX_CONSTRUCTION_COUNTER;\n    };\n    return InjectorInlineStrategy;\n  })();\n  exports.InjectorInlineStrategy = InjectorInlineStrategy;\n  var InjectorDynamicStrategy = (function() {\n    function InjectorDynamicStrategy(protoStrategy, injector) {\n      this.protoStrategy = protoStrategy;\n      this.injector = injector;\n      this.objs = collection_1.ListWrapper.createFixedSize(protoStrategy.providers.length);\n      collection_1.ListWrapper.fill(this.objs, exports.UNDEFINED);\n    }\n    InjectorDynamicStrategy.prototype.resetConstructionCounter = function() {\n      this.injector._constructionCounter = 0;\n    };\n    InjectorDynamicStrategy.prototype.instantiateProvider = function(provider, visibility) {\n      return this.injector._new(provider, visibility);\n    };\n    InjectorDynamicStrategy.prototype.attach = function(parent, isHost) {\n      var inj = this.injector;\n      inj._parent = parent;\n      inj._isHost = isHost;\n    };\n    InjectorDynamicStrategy.prototype.getObjByKeyId = function(keyId, visibility) {\n      var p = this.protoStrategy;\n      for (var i = 0; i < p.keyIds.length; i++) {\n        if (p.keyIds[i] === keyId && canSee(p.visibilities[i], visibility)) {\n          if (this.objs[i] === exports.UNDEFINED) {\n            this.objs[i] = this.injector._new(p.providers[i], p.visibilities[i]);\n          }\n          return this.objs[i];\n        }\n      }\n      return exports.UNDEFINED;\n    };\n    InjectorDynamicStrategy.prototype.getObjAtIndex = function(index) {\n      if (index < 0 || index >= this.objs.length) {\n        throw new exceptions_1.OutOfBoundsError(index);\n      }\n      return this.objs[index];\n    };\n    InjectorDynamicStrategy.prototype.getMaxNumberOfObjects = function() {\n      return this.objs.length;\n    };\n    return InjectorDynamicStrategy;\n  })();\n  exports.InjectorDynamicStrategy = InjectorDynamicStrategy;\n  var ProviderWithVisibility = (function() {\n    function ProviderWithVisibility(provider, visibility) {\n      this.provider = provider;\n      this.visibility = visibility;\n    }\n    ;\n    ProviderWithVisibility.prototype.getKeyId = function() {\n      return this.provider.key.id;\n    };\n    return ProviderWithVisibility;\n  })();\n  exports.ProviderWithVisibility = ProviderWithVisibility;\n  var Injector = (function() {\n    function Injector(_proto, _parent, _depProvider, _debugContext) {\n      if (_parent === void 0) {\n        _parent = null;\n      }\n      if (_depProvider === void 0) {\n        _depProvider = null;\n      }\n      if (_debugContext === void 0) {\n        _debugContext = null;\n      }\n      this._depProvider = _depProvider;\n      this._debugContext = _debugContext;\n      this._isHost = false;\n      this._constructionCounter = 0;\n      this._proto = _proto;\n      this._parent = _parent;\n      this._strategy = _proto._strategy.createInjectorStrategy(this);\n    }\n    Injector.resolve = function(providers) {\n      return provider_1.resolveProviders(providers);\n    };\n    Injector.resolveAndCreate = function(providers) {\n      var resolvedProviders = Injector.resolve(providers);\n      return Injector.fromResolvedProviders(resolvedProviders);\n    };\n    Injector.fromResolvedProviders = function(providers) {\n      var bd = providers.map(function(b) {\n        return new ProviderWithVisibility(b, Visibility.Public);\n      });\n      var proto = new ProtoInjector(bd);\n      return new Injector(proto, null, null);\n    };\n    Injector.fromResolvedBindings = function(providers) {\n      return Injector.fromResolvedProviders(providers);\n    };\n    Injector.prototype.debugContext = function() {\n      return this._debugContext();\n    };\n    Injector.prototype.get = function(token) {\n      return this._getByKey(key_1.Key.get(token), null, null, false, Visibility.PublicAndPrivate);\n    };\n    Injector.prototype.getOptional = function(token) {\n      return this._getByKey(key_1.Key.get(token), null, null, true, Visibility.PublicAndPrivate);\n    };\n    Injector.prototype.getAt = function(index) {\n      return this._strategy.getObjAtIndex(index);\n    };\n    Object.defineProperty(Injector.prototype, \"parent\", {\n      get: function() {\n        return this._parent;\n      },\n      enumerable: true,\n      configurable: true\n    });\n    Object.defineProperty(Injector.prototype, \"internalStrategy\", {\n      get: function() {\n        return this._strategy;\n      },\n      enumerable: true,\n      configurable: true\n    });\n    Injector.prototype.resolveAndCreateChild = function(providers) {\n      var resolvedProviders = Injector.resolve(providers);\n      return this.createChildFromResolved(resolvedProviders);\n    };\n    Injector.prototype.createChildFromResolved = function(providers) {\n      var bd = providers.map(function(b) {\n        return new ProviderWithVisibility(b, Visibility.Public);\n      });\n      var proto = new ProtoInjector(bd);\n      var inj = new Injector(proto, null, null);\n      inj._parent = this;\n      return inj;\n    };\n    Injector.prototype.resolveAndInstantiate = function(provider) {\n      return this.instantiateResolved(Injector.resolve([provider])[0]);\n    };\n    Injector.prototype.instantiateResolved = function(provider) {\n      return this._instantiateProvider(provider, Visibility.PublicAndPrivate);\n    };\n    Injector.prototype._new = function(provider, visibility) {\n      if (this._constructionCounter++ > this._strategy.getMaxNumberOfObjects()) {\n        throw new exceptions_1.CyclicDependencyError(this, provider.key);\n      }\n      return this._instantiateProvider(provider, visibility);\n    };\n    Injector.prototype._instantiateProvider = function(provider, visibility) {\n      if (provider.multiProvider) {\n        var res = collection_1.ListWrapper.createFixedSize(provider.resolvedFactories.length);\n        for (var i = 0; i < provider.resolvedFactories.length; ++i) {\n          res[i] = this._instantiate(provider, provider.resolvedFactories[i], visibility);\n        }\n        return res;\n      } else {\n        return this._instantiate(provider, provider.resolvedFactories[0], visibility);\n      }\n    };\n    Injector.prototype._instantiate = function(provider, resolvedFactory, visibility) {\n      var factory = resolvedFactory.factory;\n      var deps = resolvedFactory.dependencies;\n      var length = deps.length;\n      var d0,\n          d1,\n          d2,\n          d3,\n          d4,\n          d5,\n          d6,\n          d7,\n          d8,\n          d9,\n          d10,\n          d11,\n          d12,\n          d13,\n          d14,\n          d15,\n          d16,\n          d17,\n          d18,\n          d19;\n      try {\n        d0 = length > 0 ? this._getByDependency(provider, deps[0], visibility) : null;\n        d1 = length > 1 ? this._getByDependency(provider, deps[1], visibility) : null;\n        d2 = length > 2 ? this._getByDependency(provider, deps[2], visibility) : null;\n        d3 = length > 3 ? this._getByDependency(provider, deps[3], visibility) : null;\n        d4 = length > 4 ? this._getByDependency(provider, deps[4], visibility) : null;\n        d5 = length > 5 ? this._getByDependency(provider, deps[5], visibility) : null;\n        d6 = length > 6 ? this._getByDependency(provider, deps[6], visibility) : null;\n        d7 = length > 7 ? this._getByDependency(provider, deps[7], visibility) : null;\n        d8 = length > 8 ? this._getByDependency(provider, deps[8], visibility) : null;\n        d9 = length > 9 ? this._getByDependency(provider, deps[9], visibility) : null;\n        d10 = length > 10 ? this._getByDependency(provider, deps[10], visibility) : null;\n        d11 = length > 11 ? this._getByDependency(provider, deps[11], visibility) : null;\n        d12 = length > 12 ? this._getByDependency(provider, deps[12], visibility) : null;\n        d13 = length > 13 ? this._getByDependency(provider, deps[13], visibility) : null;\n        d14 = length > 14 ? this._getByDependency(provider, deps[14], visibility) : null;\n        d15 = length > 15 ? this._getByDependency(provider, deps[15], visibility) : null;\n        d16 = length > 16 ? this._getByDependency(provider, deps[16], visibility) : null;\n        d17 = length > 17 ? this._getByDependency(provider, deps[17], visibility) : null;\n        d18 = length > 18 ? this._getByDependency(provider, deps[18], visibility) : null;\n        d19 = length > 19 ? this._getByDependency(provider, deps[19], visibility) : null;\n      } catch (e) {\n        if (e instanceof exceptions_1.AbstractProviderError || e instanceof exceptions_1.InstantiationError) {\n          e.addKey(this, provider.key);\n        }\n        throw e;\n      }\n      var obj;\n      try {\n        switch (length) {\n          case 0:\n            obj = factory();\n            break;\n          case 1:\n            obj = factory(d0);\n            break;\n          case 2:\n            obj = factory(d0, d1);\n            break;\n          case 3:\n            obj = factory(d0, d1, d2);\n            break;\n          case 4:\n            obj = factory(d0, d1, d2, d3);\n            break;\n          case 5:\n            obj = factory(d0, d1, d2, d3, d4);\n            break;\n          case 6:\n            obj = factory(d0, d1, d2, d3, d4, d5);\n            break;\n          case 7:\n            obj = factory(d0, d1, d2, d3, d4, d5, d6);\n            break;\n          case 8:\n            obj = factory(d0, d1, d2, d3, d4, d5, d6, d7);\n            break;\n          case 9:\n            obj = factory(d0, d1, d2, d3, d4, d5, d6, d7, d8);\n            break;\n          case 10:\n            obj = factory(d0, d1, d2, d3, d4, d5, d6, d7, d8, d9);\n            break;\n          case 11:\n            obj = factory(d0, d1, d2, d3, d4, d5, d6, d7, d8, d9, d10);\n            break;\n          case 12:\n            obj = factory(d0, d1, d2, d3, d4, d5, d6, d7, d8, d9, d10, d11);\n            break;\n          case 13:\n            obj = factory(d0, d1, d2, d3, d4, d5, d6, d7, d8, d9, d10, d11, d12);\n            break;\n          case 14:\n            obj = factory(d0, d1, d2, d3, d4, d5, d6, d7, d8, d9, d10, d11, d12, d13);\n            break;\n          case 15:\n            obj = factory(d0, d1, d2, d3, d4, d5, d6, d7, d8, d9, d10, d11, d12, d13, d14);\n            break;\n          case 16:\n            obj = factory(d0, d1, d2, d3, d4, d5, d6, d7, d8, d9, d10, d11, d12, d13, d14, d15);\n            break;\n          case 17:\n            obj = factory(d0, d1, d2, d3, d4, d5, d6, d7, d8, d9, d10, d11, d12, d13, d14, d15, d16);\n            break;\n          case 18:\n            obj = factory(d0, d1, d2, d3, d4, d5, d6, d7, d8, d9, d10, d11, d12, d13, d14, d15, d16, d17);\n            break;\n          case 19:\n            obj = factory(d0, d1, d2, d3, d4, d5, d6, d7, d8, d9, d10, d11, d12, d13, d14, d15, d16, d17, d18);\n            break;\n          case 20:\n            obj = factory(d0, d1, d2, d3, d4, d5, d6, d7, d8, d9, d10, d11, d12, d13, d14, d15, d16, d17, d18, d19);\n            break;\n        }\n      } catch (e) {\n        throw new exceptions_1.InstantiationError(this, e, e.stack, provider.key);\n      }\n      return obj;\n    };\n    Injector.prototype._getByDependency = function(provider, dep, providerVisibility) {\n      var special = lang_1.isPresent(this._depProvider) ? this._depProvider.getDependency(this, provider, dep) : exports.UNDEFINED;\n      if (special !== exports.UNDEFINED) {\n        return special;\n      } else {\n        return this._getByKey(dep.key, dep.lowerBoundVisibility, dep.upperBoundVisibility, dep.optional, providerVisibility);\n      }\n    };\n    Injector.prototype._getByKey = function(key, lowerBoundVisibility, upperBoundVisibility, optional, providerVisibility) {\n      if (key === INJECTOR_KEY) {\n        return this;\n      }\n      if (upperBoundVisibility instanceof metadata_1.SelfMetadata) {\n        return this._getByKeySelf(key, optional, providerVisibility);\n      } else if (upperBoundVisibility instanceof metadata_1.HostMetadata) {\n        return this._getByKeyHost(key, optional, providerVisibility, lowerBoundVisibility);\n      } else {\n        return this._getByKeyDefault(key, optional, providerVisibility, lowerBoundVisibility);\n      }\n    };\n    Injector.prototype._throwOrNull = function(key, optional) {\n      if (optional) {\n        return null;\n      } else {\n        throw new exceptions_1.NoProviderError(this, key);\n      }\n    };\n    Injector.prototype._getByKeySelf = function(key, optional, providerVisibility) {\n      var obj = this._strategy.getObjByKeyId(key.id, providerVisibility);\n      return (obj !== exports.UNDEFINED) ? obj : this._throwOrNull(key, optional);\n    };\n    Injector.prototype._getByKeyHost = function(key, optional, providerVisibility, lowerBoundVisibility) {\n      var inj = this;\n      if (lowerBoundVisibility instanceof metadata_1.SkipSelfMetadata) {\n        if (inj._isHost) {\n          return this._getPrivateDependency(key, optional, inj);\n        } else {\n          inj = inj._parent;\n        }\n      }\n      while (inj != null) {\n        var obj = inj._strategy.getObjByKeyId(key.id, providerVisibility);\n        if (obj !== exports.UNDEFINED)\n          return obj;\n        if (lang_1.isPresent(inj._parent) && inj._isHost) {\n          return this._getPrivateDependency(key, optional, inj);\n        } else {\n          inj = inj._parent;\n        }\n      }\n      return this._throwOrNull(key, optional);\n    };\n    Injector.prototype._getPrivateDependency = function(key, optional, inj) {\n      var obj = inj._parent._strategy.getObjByKeyId(key.id, Visibility.Private);\n      return (obj !== exports.UNDEFINED) ? obj : this._throwOrNull(key, optional);\n    };\n    Injector.prototype._getByKeyDefault = function(key, optional, providerVisibility, lowerBoundVisibility) {\n      var inj = this;\n      if (lowerBoundVisibility instanceof metadata_1.SkipSelfMetadata) {\n        providerVisibility = inj._isHost ? Visibility.PublicAndPrivate : Visibility.Public;\n        inj = inj._parent;\n      }\n      while (inj != null) {\n        var obj = inj._strategy.getObjByKeyId(key.id, providerVisibility);\n        if (obj !== exports.UNDEFINED)\n          return obj;\n        providerVisibility = inj._isHost ? Visibility.PublicAndPrivate : Visibility.Public;\n        inj = inj._parent;\n      }\n      return this._throwOrNull(key, optional);\n    };\n    Object.defineProperty(Injector.prototype, \"displayName\", {\n      get: function() {\n        return \"Injector(providers: [\" + _mapProviders(this, function(b) {\n          return (\" \\\"\" + b.key.displayName + \"\\\" \");\n        }).join(\", \") + \"])\";\n      },\n      enumerable: true,\n      configurable: true\n    });\n    Injector.prototype.toString = function() {\n      return this.displayName;\n    };\n    return Injector;\n  })();\n  exports.Injector = Injector;\n  var INJECTOR_KEY = key_1.Key.get(Injector);\n  function _mapProviders(injector, fn) {\n    var res = [];\n    for (var i = 0; i < injector._proto.numberOfProviders; ++i) {\n      res.push(fn(injector._proto.getProviderAtIndex(i)));\n    }\n    return res;\n  }\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"angular2/src/core/change_detection/dynamic_change_detector\", [\"angular2/src/facade/lang\", \"angular2/src/facade/exceptions\", \"angular2/src/facade/collection\", \"angular2/src/core/change_detection/abstract_change_detector\", \"angular2/src/core/change_detection/change_detection_util\", \"angular2/src/core/change_detection/constants\", \"angular2/src/core/change_detection/proto_record\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  var __extends = (this && this.__extends) || function(d, b) {\n    for (var p in b)\n      if (b.hasOwnProperty(p))\n        d[p] = b[p];\n    function __() {\n      this.constructor = d;\n    }\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n  };\n  var lang_1 = require(\"angular2/src/facade/lang\");\n  var exceptions_1 = require(\"angular2/src/facade/exceptions\");\n  var collection_1 = require(\"angular2/src/facade/collection\");\n  var abstract_change_detector_1 = require(\"angular2/src/core/change_detection/abstract_change_detector\");\n  var change_detection_util_1 = require(\"angular2/src/core/change_detection/change_detection_util\");\n  var constants_1 = require(\"angular2/src/core/change_detection/constants\");\n  var proto_record_1 = require(\"angular2/src/core/change_detection/proto_record\");\n  var DynamicChangeDetector = (function(_super) {\n    __extends(DynamicChangeDetector, _super);\n    function DynamicChangeDetector(id, dispatcher, numberOfPropertyProtoRecords, propertyBindingTargets, directiveIndices, strategy, _records, _eventBindings, _directiveRecords, _genConfig) {\n      _super.call(this, id, dispatcher, numberOfPropertyProtoRecords, propertyBindingTargets, directiveIndices, strategy);\n      this._records = _records;\n      this._eventBindings = _eventBindings;\n      this._directiveRecords = _directiveRecords;\n      this._genConfig = _genConfig;\n      this.directives = null;\n      var len = _records.length + 1;\n      this.values = collection_1.ListWrapper.createFixedSize(len);\n      this.localPipes = collection_1.ListWrapper.createFixedSize(len);\n      this.prevContexts = collection_1.ListWrapper.createFixedSize(len);\n      this.changes = collection_1.ListWrapper.createFixedSize(len);\n      this.dehydrateDirectives(false);\n    }\n    DynamicChangeDetector.prototype.handleEventInternal = function(eventName, elIndex, locals) {\n      var _this = this;\n      var preventDefault = false;\n      this._matchingEventBindings(eventName, elIndex).forEach(function(rec) {\n        var res = _this._processEventBinding(rec, locals);\n        if (res === false) {\n          preventDefault = true;\n        }\n      });\n      return preventDefault;\n    };\n    DynamicChangeDetector.prototype._processEventBinding = function(eb, locals) {\n      var values = collection_1.ListWrapper.createFixedSize(eb.records.length);\n      values[0] = this.values[0];\n      for (var protoIdx = 0; protoIdx < eb.records.length; ++protoIdx) {\n        var proto = eb.records[protoIdx];\n        if (proto.isSkipRecord()) {\n          protoIdx += this._computeSkipLength(protoIdx, proto, values);\n        } else {\n          var res = this._calculateCurrValue(proto, values, locals);\n          if (proto.lastInBinding) {\n            this._markPathAsCheckOnce(proto);\n            return res;\n          } else {\n            this._writeSelf(proto, res, values);\n          }\n        }\n      }\n      throw new exceptions_1.BaseException(\"Cannot be reached\");\n    };\n    DynamicChangeDetector.prototype._computeSkipLength = function(protoIndex, proto, values) {\n      if (proto.mode === proto_record_1.RecordType.SkipRecords) {\n        return proto.fixedArgs[0] - protoIndex - 1;\n      }\n      if (proto.mode === proto_record_1.RecordType.SkipRecordsIf) {\n        var condition = this._readContext(proto, values);\n        return condition ? proto.fixedArgs[0] - protoIndex - 1 : 0;\n      }\n      if (proto.mode === proto_record_1.RecordType.SkipRecordsIfNot) {\n        var condition = this._readContext(proto, values);\n        return condition ? 0 : proto.fixedArgs[0] - protoIndex - 1;\n      }\n      throw new exceptions_1.BaseException(\"Cannot be reached\");\n    };\n    DynamicChangeDetector.prototype._markPathAsCheckOnce = function(proto) {\n      if (!proto.bindingRecord.isDefaultChangeDetection()) {\n        var dir = proto.bindingRecord.directiveRecord;\n        this._getDetectorFor(dir.directiveIndex).markPathToRootAsCheckOnce();\n      }\n    };\n    DynamicChangeDetector.prototype._matchingEventBindings = function(eventName, elIndex) {\n      return this._eventBindings.filter(function(eb) {\n        return eb.eventName == eventName && eb.elIndex === elIndex;\n      });\n    };\n    DynamicChangeDetector.prototype.hydrateDirectives = function(directives) {\n      this.values[0] = this.context;\n      this.directives = directives;\n      if (this.strategy === constants_1.ChangeDetectionStrategy.OnPushObserve) {\n        for (var i = 0; i < this.directiveIndices.length; ++i) {\n          var index = this.directiveIndices[i];\n          _super.prototype.observeDirective.call(this, directives.getDirectiveFor(index), i);\n        }\n      }\n    };\n    DynamicChangeDetector.prototype.dehydrateDirectives = function(destroyPipes) {\n      if (destroyPipes) {\n        this._destroyPipes();\n      }\n      this.values[0] = null;\n      this.directives = null;\n      collection_1.ListWrapper.fill(this.values, change_detection_util_1.ChangeDetectionUtil.uninitialized, 1);\n      collection_1.ListWrapper.fill(this.changes, false);\n      collection_1.ListWrapper.fill(this.localPipes, null);\n      collection_1.ListWrapper.fill(this.prevContexts, change_detection_util_1.ChangeDetectionUtil.uninitialized);\n    };\n    DynamicChangeDetector.prototype._destroyPipes = function() {\n      for (var i = 0; i < this.localPipes.length; ++i) {\n        if (lang_1.isPresent(this.localPipes[i])) {\n          change_detection_util_1.ChangeDetectionUtil.callPipeOnDestroy(this.localPipes[i]);\n        }\n      }\n    };\n    DynamicChangeDetector.prototype.checkNoChanges = function() {\n      this.runDetectChanges(true);\n    };\n    DynamicChangeDetector.prototype.detectChangesInRecordsInternal = function(throwOnChange) {\n      var protos = this._records;\n      var changes = null;\n      var isChanged = false;\n      for (var protoIdx = 0; protoIdx < protos.length; ++protoIdx) {\n        var proto = protos[protoIdx];\n        var bindingRecord = proto.bindingRecord;\n        var directiveRecord = bindingRecord.directiveRecord;\n        if (this._firstInBinding(proto)) {\n          this.propertyBindingIndex = proto.propertyBindingIndex;\n        }\n        if (proto.isLifeCycleRecord()) {\n          if (proto.name === \"DoCheck\" && !throwOnChange) {\n            this._getDirectiveFor(directiveRecord.directiveIndex).doCheck();\n          } else if (proto.name === \"OnInit\" && !throwOnChange && this.state == constants_1.ChangeDetectorState.NeverChecked) {\n            this._getDirectiveFor(directiveRecord.directiveIndex).onInit();\n          } else if (proto.name === \"OnChanges\" && lang_1.isPresent(changes) && !throwOnChange) {\n            this._getDirectiveFor(directiveRecord.directiveIndex).onChanges(changes);\n          }\n        } else if (proto.isSkipRecord()) {\n          protoIdx += this._computeSkipLength(protoIdx, proto, this.values);\n        } else {\n          var change = this._check(proto, throwOnChange, this.values, this.locals);\n          if (lang_1.isPresent(change)) {\n            this._updateDirectiveOrElement(change, bindingRecord);\n            isChanged = true;\n            changes = this._addChange(bindingRecord, change, changes);\n          }\n        }\n        if (proto.lastInDirective) {\n          changes = null;\n          if (isChanged && !bindingRecord.isDefaultChangeDetection()) {\n            this._getDetectorFor(directiveRecord.directiveIndex).markAsCheckOnce();\n          }\n          isChanged = false;\n        }\n      }\n    };\n    DynamicChangeDetector.prototype._firstInBinding = function(r) {\n      var prev = change_detection_util_1.ChangeDetectionUtil.protoByIndex(this._records, r.selfIndex - 1);\n      return lang_1.isBlank(prev) || prev.bindingRecord !== r.bindingRecord;\n    };\n    DynamicChangeDetector.prototype.afterContentLifecycleCallbacksInternal = function() {\n      var dirs = this._directiveRecords;\n      for (var i = dirs.length - 1; i >= 0; --i) {\n        var dir = dirs[i];\n        if (dir.callAfterContentInit && this.state == constants_1.ChangeDetectorState.NeverChecked) {\n          this._getDirectiveFor(dir.directiveIndex).afterContentInit();\n        }\n        if (dir.callAfterContentChecked) {\n          this._getDirectiveFor(dir.directiveIndex).afterContentChecked();\n        }\n      }\n    };\n    DynamicChangeDetector.prototype.afterViewLifecycleCallbacksInternal = function() {\n      var dirs = this._directiveRecords;\n      for (var i = dirs.length - 1; i >= 0; --i) {\n        var dir = dirs[i];\n        if (dir.callAfterViewInit && this.state == constants_1.ChangeDetectorState.NeverChecked) {\n          this._getDirectiveFor(dir.directiveIndex).afterViewInit();\n        }\n        if (dir.callAfterViewChecked) {\n          this._getDirectiveFor(dir.directiveIndex).afterViewChecked();\n        }\n      }\n    };\n    DynamicChangeDetector.prototype._updateDirectiveOrElement = function(change, bindingRecord) {\n      if (lang_1.isBlank(bindingRecord.directiveRecord)) {\n        _super.prototype.notifyDispatcher.call(this, change.currentValue);\n      } else {\n        var directiveIndex = bindingRecord.directiveRecord.directiveIndex;\n        bindingRecord.setter(this._getDirectiveFor(directiveIndex), change.currentValue);\n      }\n      if (this._genConfig.logBindingUpdate) {\n        _super.prototype.logBindingUpdate.call(this, change.currentValue);\n      }\n    };\n    DynamicChangeDetector.prototype._addChange = function(bindingRecord, change, changes) {\n      if (bindingRecord.callOnChanges()) {\n        return _super.prototype.addChange.call(this, changes, change.previousValue, change.currentValue);\n      } else {\n        return changes;\n      }\n    };\n    DynamicChangeDetector.prototype._getDirectiveFor = function(directiveIndex) {\n      return this.directives.getDirectiveFor(directiveIndex);\n    };\n    DynamicChangeDetector.prototype._getDetectorFor = function(directiveIndex) {\n      return this.directives.getDetectorFor(directiveIndex);\n    };\n    DynamicChangeDetector.prototype._check = function(proto, throwOnChange, values, locals) {\n      if (proto.isPipeRecord()) {\n        return this._pipeCheck(proto, throwOnChange, values);\n      } else {\n        return this._referenceCheck(proto, throwOnChange, values, locals);\n      }\n    };\n    DynamicChangeDetector.prototype._referenceCheck = function(proto, throwOnChange, values, locals) {\n      if (this._pureFuncAndArgsDidNotChange(proto)) {\n        this._setChanged(proto, false);\n        return null;\n      }\n      var currValue = this._calculateCurrValue(proto, values, locals);\n      if (this.strategy === constants_1.ChangeDetectionStrategy.OnPushObserve) {\n        _super.prototype.observeValue.call(this, currValue, proto.selfIndex);\n      }\n      if (proto.shouldBeChecked()) {\n        var prevValue = this._readSelf(proto, values);\n        if (change_detection_util_1.ChangeDetectionUtil.looseNotIdentical(prevValue, currValue)) {\n          if (proto.lastInBinding) {\n            var change = change_detection_util_1.ChangeDetectionUtil.simpleChange(prevValue, currValue);\n            if (throwOnChange)\n              this.throwOnChangeError(prevValue, currValue);\n            this._writeSelf(proto, currValue, values);\n            this._setChanged(proto, true);\n            return change;\n          } else {\n            this._writeSelf(proto, currValue, values);\n            this._setChanged(proto, true);\n            return null;\n          }\n        } else {\n          this._setChanged(proto, false);\n          return null;\n        }\n      } else {\n        this._writeSelf(proto, currValue, values);\n        this._setChanged(proto, true);\n        return null;\n      }\n    };\n    DynamicChangeDetector.prototype._calculateCurrValue = function(proto, values, locals) {\n      switch (proto.mode) {\n        case proto_record_1.RecordType.Self:\n          return this._readContext(proto, values);\n        case proto_record_1.RecordType.Const:\n          return proto.funcOrValue;\n        case proto_record_1.RecordType.PropertyRead:\n          var context = this._readContext(proto, values);\n          return proto.funcOrValue(context);\n        case proto_record_1.RecordType.SafeProperty:\n          var context = this._readContext(proto, values);\n          return lang_1.isBlank(context) ? null : proto.funcOrValue(context);\n        case proto_record_1.RecordType.PropertyWrite:\n          var context = this._readContext(proto, values);\n          var value = this._readArgs(proto, values)[0];\n          proto.funcOrValue(context, value);\n          return value;\n        case proto_record_1.RecordType.KeyedWrite:\n          var context = this._readContext(proto, values);\n          var key = this._readArgs(proto, values)[0];\n          var value = this._readArgs(proto, values)[1];\n          context[key] = value;\n          return value;\n        case proto_record_1.RecordType.Local:\n          return locals.get(proto.name);\n        case proto_record_1.RecordType.InvokeMethod:\n          var context = this._readContext(proto, values);\n          var args = this._readArgs(proto, values);\n          return proto.funcOrValue(context, args);\n        case proto_record_1.RecordType.SafeMethodInvoke:\n          var context = this._readContext(proto, values);\n          if (lang_1.isBlank(context)) {\n            return null;\n          }\n          var args = this._readArgs(proto, values);\n          return proto.funcOrValue(context, args);\n        case proto_record_1.RecordType.KeyedRead:\n          var arg = this._readArgs(proto, values)[0];\n          return this._readContext(proto, values)[arg];\n        case proto_record_1.RecordType.Chain:\n          var args = this._readArgs(proto, values);\n          return args[args.length - 1];\n        case proto_record_1.RecordType.InvokeClosure:\n          return lang_1.FunctionWrapper.apply(this._readContext(proto, values), this._readArgs(proto, values));\n        case proto_record_1.RecordType.Interpolate:\n        case proto_record_1.RecordType.PrimitiveOp:\n        case proto_record_1.RecordType.CollectionLiteral:\n          return lang_1.FunctionWrapper.apply(proto.funcOrValue, this._readArgs(proto, values));\n        default:\n          throw new exceptions_1.BaseException(\"Unknown operation \" + proto.mode);\n      }\n    };\n    DynamicChangeDetector.prototype._pipeCheck = function(proto, throwOnChange, values) {\n      var context = this._readContext(proto, values);\n      var selectedPipe = this._pipeFor(proto, context);\n      if (!selectedPipe.pure || this._argsOrContextChanged(proto)) {\n        var args = this._readArgs(proto, values);\n        var currValue = selectedPipe.pipe.transform(context, args);\n        if (proto.shouldBeChecked()) {\n          var prevValue = this._readSelf(proto, values);\n          if (change_detection_util_1.ChangeDetectionUtil.looseNotIdentical(prevValue, currValue)) {\n            currValue = change_detection_util_1.ChangeDetectionUtil.unwrapValue(currValue);\n            if (proto.lastInBinding) {\n              var change = change_detection_util_1.ChangeDetectionUtil.simpleChange(prevValue, currValue);\n              if (throwOnChange)\n                this.throwOnChangeError(prevValue, currValue);\n              this._writeSelf(proto, currValue, values);\n              this._setChanged(proto, true);\n              return change;\n            } else {\n              this._writeSelf(proto, currValue, values);\n              this._setChanged(proto, true);\n              return null;\n            }\n          } else {\n            this._setChanged(proto, false);\n            return null;\n          }\n        } else {\n          this._writeSelf(proto, currValue, values);\n          this._setChanged(proto, true);\n          return null;\n        }\n      }\n    };\n    DynamicChangeDetector.prototype._pipeFor = function(proto, context) {\n      var storedPipe = this._readPipe(proto);\n      if (lang_1.isPresent(storedPipe))\n        return storedPipe;\n      var pipe = this.pipes.get(proto.name);\n      this._writePipe(proto, pipe);\n      return pipe;\n    };\n    DynamicChangeDetector.prototype._readContext = function(proto, values) {\n      if (proto.contextIndex == -1) {\n        return this._getDirectiveFor(proto.directiveIndex);\n      }\n      return values[proto.contextIndex];\n    };\n    DynamicChangeDetector.prototype._readSelf = function(proto, values) {\n      return values[proto.selfIndex];\n    };\n    DynamicChangeDetector.prototype._writeSelf = function(proto, value, values) {\n      values[proto.selfIndex] = value;\n    };\n    DynamicChangeDetector.prototype._readPipe = function(proto) {\n      return this.localPipes[proto.selfIndex];\n    };\n    DynamicChangeDetector.prototype._writePipe = function(proto, value) {\n      this.localPipes[proto.selfIndex] = value;\n    };\n    DynamicChangeDetector.prototype._setChanged = function(proto, value) {\n      if (proto.argumentToPureFunction)\n        this.changes[proto.selfIndex] = value;\n    };\n    DynamicChangeDetector.prototype._pureFuncAndArgsDidNotChange = function(proto) {\n      return proto.isPureFunction() && !this._argsChanged(proto);\n    };\n    DynamicChangeDetector.prototype._argsChanged = function(proto) {\n      var args = proto.args;\n      for (var i = 0; i < args.length; ++i) {\n        if (this.changes[args[i]]) {\n          return true;\n        }\n      }\n      return false;\n    };\n    DynamicChangeDetector.prototype._argsOrContextChanged = function(proto) {\n      return this._argsChanged(proto) || this.changes[proto.contextIndex];\n    };\n    DynamicChangeDetector.prototype._readArgs = function(proto, values) {\n      var res = collection_1.ListWrapper.createFixedSize(proto.args.length);\n      var args = proto.args;\n      for (var i = 0; i < args.length; ++i) {\n        res[i] = values[args[i]];\n      }\n      return res;\n    };\n    return DynamicChangeDetector;\n  })(abstract_change_detector_1.AbstractChangeDetector);\n  exports.DynamicChangeDetector = DynamicChangeDetector;\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"angular2/src/core/change_detection/jit_proto_change_detector\", [\"angular2/src/core/change_detection/change_detection_jit_generator\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  var change_detection_jit_generator_1 = require(\"angular2/src/core/change_detection/change_detection_jit_generator\");\n  var JitProtoChangeDetector = (function() {\n    function JitProtoChangeDetector(definition) {\n      this.definition = definition;\n      this._factory = this._createFactory(definition);\n    }\n    JitProtoChangeDetector.isSupported = function() {\n      return true;\n    };\n    JitProtoChangeDetector.prototype.instantiate = function(dispatcher) {\n      return this._factory(dispatcher);\n    };\n    JitProtoChangeDetector.prototype._createFactory = function(definition) {\n      return new change_detection_jit_generator_1.ChangeDetectorJITGenerator(definition, 'util', 'AbstractChangeDetector', 'ChangeDetectorStatus').generate();\n    };\n    return JitProtoChangeDetector;\n  })();\n  exports.JitProtoChangeDetector = JitProtoChangeDetector;\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"angular2/src/core/linker/element_injector\", [\"angular2/src/facade/lang\", \"angular2/src/facade/exceptions\", \"angular2/src/facade/async\", \"angular2/src/facade/collection\", \"angular2/src/core/di\", \"angular2/src/core/di/injector\", \"angular2/src/core/di/provider\", \"angular2/src/core/metadata/di\", \"angular2/src/core/linker/view_manager\", \"angular2/src/core/linker/view_container_ref\", \"angular2/src/core/linker/element_ref\", \"angular2/src/core/linker/template_ref\", \"angular2/src/core/metadata/directives\", \"angular2/src/core/linker/directive_lifecycle_reflector\", \"angular2/src/core/change_detection/change_detection\", \"angular2/src/core/linker/query_list\", \"angular2/src/core/reflection/reflection\", \"angular2/src/core/linker/event_config\", \"angular2/src/core/pipes/pipe_provider\", \"angular2/src/core/linker/interfaces\", \"angular2/src/core/linker/view_container_ref\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  var __extends = (this && this.__extends) || function(d, b) {\n    for (var p in b)\n      if (b.hasOwnProperty(p))\n        d[p] = b[p];\n    function __() {\n      this.constructor = d;\n    }\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n  };\n  var lang_1 = require(\"angular2/src/facade/lang\");\n  var exceptions_1 = require(\"angular2/src/facade/exceptions\");\n  var async_1 = require(\"angular2/src/facade/async\");\n  var collection_1 = require(\"angular2/src/facade/collection\");\n  var di_1 = require(\"angular2/src/core/di\");\n  var injector_1 = require(\"angular2/src/core/di/injector\");\n  var provider_1 = require(\"angular2/src/core/di/provider\");\n  var di_2 = require(\"angular2/src/core/metadata/di\");\n  var avmModule = require(\"angular2/src/core/linker/view_manager\");\n  var view_container_ref_1 = require(\"angular2/src/core/linker/view_container_ref\");\n  var element_ref_1 = require(\"angular2/src/core/linker/element_ref\");\n  var template_ref_1 = require(\"angular2/src/core/linker/template_ref\");\n  var directives_1 = require(\"angular2/src/core/metadata/directives\");\n  var directive_lifecycle_reflector_1 = require(\"angular2/src/core/linker/directive_lifecycle_reflector\");\n  var change_detection_1 = require(\"angular2/src/core/change_detection/change_detection\");\n  var query_list_1 = require(\"angular2/src/core/linker/query_list\");\n  var reflection_1 = require(\"angular2/src/core/reflection/reflection\");\n  var event_config_1 = require(\"angular2/src/core/linker/event_config\");\n  var pipe_provider_1 = require(\"angular2/src/core/pipes/pipe_provider\");\n  var interfaces_1 = require(\"angular2/src/core/linker/interfaces\");\n  var view_container_ref_2 = require(\"angular2/src/core/linker/view_container_ref\");\n  var _staticKeys;\n  var StaticKeys = (function() {\n    function StaticKeys() {\n      this.viewManagerId = di_1.Key.get(avmModule.AppViewManager).id;\n      this.templateRefId = di_1.Key.get(template_ref_1.TemplateRef).id;\n      this.viewContainerId = di_1.Key.get(view_container_ref_1.ViewContainerRef).id;\n      this.changeDetectorRefId = di_1.Key.get(change_detection_1.ChangeDetectorRef).id;\n      this.elementRefId = di_1.Key.get(element_ref_1.ElementRef).id;\n    }\n    StaticKeys.instance = function() {\n      if (lang_1.isBlank(_staticKeys))\n        _staticKeys = new StaticKeys();\n      return _staticKeys;\n    };\n    return StaticKeys;\n  })();\n  exports.StaticKeys = StaticKeys;\n  var TreeNode = (function() {\n    function TreeNode(parent) {\n      if (lang_1.isPresent(parent)) {\n        parent.addChild(this);\n      } else {\n        this._parent = null;\n      }\n    }\n    TreeNode.prototype.addChild = function(child) {\n      child._parent = this;\n    };\n    TreeNode.prototype.remove = function() {\n      this._parent = null;\n    };\n    Object.defineProperty(TreeNode.prototype, \"parent\", {\n      get: function() {\n        return this._parent;\n      },\n      enumerable: true,\n      configurable: true\n    });\n    return TreeNode;\n  })();\n  exports.TreeNode = TreeNode;\n  var DirectiveDependency = (function(_super) {\n    __extends(DirectiveDependency, _super);\n    function DirectiveDependency(key, optional, lowerBoundVisibility, upperBoundVisibility, properties, attributeName, queryDecorator) {\n      _super.call(this, key, optional, lowerBoundVisibility, upperBoundVisibility, properties);\n      this.attributeName = attributeName;\n      this.queryDecorator = queryDecorator;\n      this._verify();\n    }\n    DirectiveDependency.prototype._verify = function() {\n      var count = 0;\n      if (lang_1.isPresent(this.queryDecorator))\n        count++;\n      if (lang_1.isPresent(this.attributeName))\n        count++;\n      if (count > 1)\n        throw new exceptions_1.BaseException('A directive injectable can contain only one of the following @Attribute or @Query.');\n    };\n    DirectiveDependency.createFrom = function(d) {\n      return new DirectiveDependency(d.key, d.optional, d.lowerBoundVisibility, d.upperBoundVisibility, d.properties, DirectiveDependency._attributeName(d.properties), DirectiveDependency._query(d.properties));\n    };\n    DirectiveDependency._attributeName = function(properties) {\n      var p = properties.find(function(p) {\n        return p instanceof di_2.AttributeMetadata;\n      });\n      return lang_1.isPresent(p) ? p.attributeName : null;\n    };\n    DirectiveDependency._query = function(properties) {\n      return properties.find(function(p) {\n        return p instanceof di_2.QueryMetadata;\n      });\n    };\n    return DirectiveDependency;\n  })(di_1.Dependency);\n  exports.DirectiveDependency = DirectiveDependency;\n  var DirectiveProvider = (function(_super) {\n    __extends(DirectiveProvider, _super);\n    function DirectiveProvider(key, factory, deps, metadata, providers, viewProviders) {\n      _super.call(this, key, [new provider_1.ResolvedFactory(factory, deps)], false);\n      this.metadata = metadata;\n      this.providers = providers;\n      this.viewProviders = viewProviders;\n      this.callOnDestroy = directive_lifecycle_reflector_1.hasLifecycleHook(interfaces_1.LifecycleHooks.OnDestroy, key.token);\n    }\n    Object.defineProperty(DirectiveProvider.prototype, \"displayName\", {\n      get: function() {\n        return this.key.displayName;\n      },\n      enumerable: true,\n      configurable: true\n    });\n    Object.defineProperty(DirectiveProvider.prototype, \"queries\", {\n      get: function() {\n        if (lang_1.isBlank(this.metadata.queries))\n          return [];\n        var res = [];\n        collection_1.StringMapWrapper.forEach(this.metadata.queries, function(meta, fieldName) {\n          var setter = reflection_1.reflector.setter(fieldName);\n          res.push(new QueryMetadataWithSetter(setter, meta));\n        });\n        return res;\n      },\n      enumerable: true,\n      configurable: true\n    });\n    Object.defineProperty(DirectiveProvider.prototype, \"eventEmitters\", {\n      get: function() {\n        return lang_1.isPresent(this.metadata) && lang_1.isPresent(this.metadata.outputs) ? this.metadata.outputs : [];\n      },\n      enumerable: true,\n      configurable: true\n    });\n    DirectiveProvider.createFromProvider = function(provider, meta) {\n      if (lang_1.isBlank(meta)) {\n        meta = new directives_1.DirectiveMetadata();\n      }\n      var rb = provider_1.resolveProvider(provider);\n      var rf = rb.resolvedFactories[0];\n      var deps = rf.dependencies.map(DirectiveDependency.createFrom);\n      var providers = lang_1.isPresent(meta.providers) ? meta.providers : [];\n      var viewBindigs = meta instanceof directives_1.ComponentMetadata && lang_1.isPresent(meta.viewProviders) ? meta.viewProviders : [];\n      return new DirectiveProvider(rb.key, rf.factory, deps, meta, providers, viewBindigs);\n    };\n    DirectiveProvider.createFromType = function(type, annotation) {\n      var provider = new di_1.Provider(type, {useClass: type});\n      return DirectiveProvider.createFromProvider(provider, annotation);\n    };\n    return DirectiveProvider;\n  })(provider_1.ResolvedProvider_);\n  exports.DirectiveProvider = DirectiveProvider;\n  var PreBuiltObjects = (function() {\n    function PreBuiltObjects(viewManager, view, elementRef, templateRef) {\n      this.viewManager = viewManager;\n      this.view = view;\n      this.elementRef = elementRef;\n      this.templateRef = templateRef;\n      this.nestedView = null;\n    }\n    return PreBuiltObjects;\n  })();\n  exports.PreBuiltObjects = PreBuiltObjects;\n  var QueryMetadataWithSetter = (function() {\n    function QueryMetadataWithSetter(setter, metadata) {\n      this.setter = setter;\n      this.metadata = metadata;\n    }\n    return QueryMetadataWithSetter;\n  })();\n  exports.QueryMetadataWithSetter = QueryMetadataWithSetter;\n  var EventEmitterAccessor = (function() {\n    function EventEmitterAccessor(eventName, getter) {\n      this.eventName = eventName;\n      this.getter = getter;\n    }\n    EventEmitterAccessor.prototype.subscribe = function(view, boundElementIndex, directive) {\n      var _this = this;\n      var eventEmitter = this.getter(directive);\n      return async_1.ObservableWrapper.subscribe(eventEmitter, function(eventObj) {\n        return view.triggerEventHandlers(_this.eventName, eventObj, boundElementIndex);\n      });\n    };\n    return EventEmitterAccessor;\n  })();\n  exports.EventEmitterAccessor = EventEmitterAccessor;\n  function _createEventEmitterAccessors(bwv) {\n    var provider = bwv.provider;\n    if (!(provider instanceof DirectiveProvider))\n      return [];\n    var db = provider;\n    return db.eventEmitters.map(function(eventConfig) {\n      var parsedEvent = event_config_1.EventConfig.parse(eventConfig);\n      return new EventEmitterAccessor(parsedEvent.eventName, reflection_1.reflector.getter(parsedEvent.fieldName));\n    });\n  }\n  function _createProtoQueryRefs(providers) {\n    var res = [];\n    collection_1.ListWrapper.forEachWithIndex(providers, function(b, i) {\n      if (b.provider instanceof DirectiveProvider) {\n        var directiveProvider = b.provider;\n        var queries = directiveProvider.queries;\n        queries.forEach(function(q) {\n          return res.push(new ProtoQueryRef(i, q.setter, q.metadata));\n        });\n        var deps = directiveProvider.resolvedFactory.dependencies;\n        deps.forEach(function(d) {\n          if (lang_1.isPresent(d.queryDecorator))\n            res.push(new ProtoQueryRef(i, null, d.queryDecorator));\n        });\n      }\n    });\n    return res;\n  }\n  var ProtoElementInjector = (function() {\n    function ProtoElementInjector(parent, index, bwv, distanceToParent, _firstProviderIsComponent, directiveVariableBindings) {\n      this.parent = parent;\n      this.index = index;\n      this.distanceToParent = distanceToParent;\n      this.directiveVariableBindings = directiveVariableBindings;\n      this._firstProviderIsComponent = _firstProviderIsComponent;\n      var length = bwv.length;\n      this.protoInjector = new injector_1.ProtoInjector(bwv);\n      this.eventEmitterAccessors = collection_1.ListWrapper.createFixedSize(length);\n      for (var i = 0; i < length; ++i) {\n        this.eventEmitterAccessors[i] = _createEventEmitterAccessors(bwv[i]);\n      }\n      this.protoQueryRefs = _createProtoQueryRefs(bwv);\n    }\n    ProtoElementInjector.create = function(parent, index, providers, firstProviderIsComponent, distanceToParent, directiveVariableBindings) {\n      var bd = [];\n      ProtoElementInjector._createDirectiveProviderWithVisibility(providers, bd, firstProviderIsComponent);\n      if (firstProviderIsComponent) {\n        ProtoElementInjector._createViewProvidersWithVisibility(providers, bd);\n      }\n      ProtoElementInjector._createProvidersWithVisibility(providers, bd);\n      return new ProtoElementInjector(parent, index, bd, distanceToParent, firstProviderIsComponent, directiveVariableBindings);\n    };\n    ProtoElementInjector._createDirectiveProviderWithVisibility = function(dirProviders, bd, firstProviderIsComponent) {\n      dirProviders.forEach(function(dirProvider) {\n        bd.push(ProtoElementInjector._createProviderWithVisibility(firstProviderIsComponent, dirProvider, dirProviders, dirProvider));\n      });\n    };\n    ProtoElementInjector._createProvidersWithVisibility = function(dirProviders, bd) {\n      var providersFromAllDirectives = [];\n      dirProviders.forEach(function(dirProvider) {\n        providersFromAllDirectives = collection_1.ListWrapper.concat(providersFromAllDirectives, dirProvider.providers);\n      });\n      var resolved = di_1.Injector.resolve(providersFromAllDirectives);\n      resolved.forEach(function(b) {\n        return bd.push(new injector_1.ProviderWithVisibility(b, injector_1.Visibility.Public));\n      });\n    };\n    ProtoElementInjector._createProviderWithVisibility = function(firstProviderIsComponent, dirProvider, dirProviders, provider) {\n      var isComponent = firstProviderIsComponent && dirProviders[0] === dirProvider;\n      return new injector_1.ProviderWithVisibility(provider, isComponent ? injector_1.Visibility.PublicAndPrivate : injector_1.Visibility.Public);\n    };\n    ProtoElementInjector._createViewProvidersWithVisibility = function(dirProviders, bd) {\n      var resolvedViewProviders = di_1.Injector.resolve(dirProviders[0].viewProviders);\n      resolvedViewProviders.forEach(function(b) {\n        return bd.push(new injector_1.ProviderWithVisibility(b, injector_1.Visibility.Private));\n      });\n    };\n    ProtoElementInjector.prototype.instantiate = function(parent) {\n      return new ElementInjector(this, parent);\n    };\n    ProtoElementInjector.prototype.directParent = function() {\n      return this.distanceToParent < 2 ? this.parent : null;\n    };\n    Object.defineProperty(ProtoElementInjector.prototype, \"hasBindings\", {\n      get: function() {\n        return this.eventEmitterAccessors.length > 0;\n      },\n      enumerable: true,\n      configurable: true\n    });\n    ProtoElementInjector.prototype.getProviderAtIndex = function(index) {\n      return this.protoInjector.getProviderAtIndex(index);\n    };\n    return ProtoElementInjector;\n  })();\n  exports.ProtoElementInjector = ProtoElementInjector;\n  var _Context = (function() {\n    function _Context(element, componentElement, injector) {\n      this.element = element;\n      this.componentElement = componentElement;\n      this.injector = injector;\n    }\n    return _Context;\n  })();\n  var ElementInjector = (function(_super) {\n    __extends(ElementInjector, _super);\n    function ElementInjector(_proto, parent) {\n      var _this = this;\n      _super.call(this, parent);\n      this._preBuiltObjects = null;\n      this._proto = _proto;\n      this._injector = new di_1.Injector(this._proto.protoInjector, null, this, function() {\n        return _this._debugContext();\n      });\n      var injectorStrategy = this._injector.internalStrategy;\n      this._strategy = injectorStrategy instanceof injector_1.InjectorInlineStrategy ? new ElementInjectorInlineStrategy(injectorStrategy, this) : new ElementInjectorDynamicStrategy(injectorStrategy, this);\n      this.hydrated = false;\n      this._queryStrategy = this._buildQueryStrategy();\n    }\n    ElementInjector.prototype.dehydrate = function() {\n      this.hydrated = false;\n      this._host = null;\n      this._preBuiltObjects = null;\n      this._strategy.callOnDestroy();\n      this._strategy.dehydrate();\n      this._queryStrategy.dehydrate();\n    };\n    ElementInjector.prototype.hydrate = function(imperativelyCreatedInjector, host, preBuiltObjects) {\n      this._host = host;\n      this._preBuiltObjects = preBuiltObjects;\n      this._reattachInjectors(imperativelyCreatedInjector);\n      this._queryStrategy.hydrate();\n      this._strategy.hydrate();\n      this.hydrated = true;\n    };\n    ElementInjector.prototype._debugContext = function() {\n      var p = this._preBuiltObjects;\n      var index = p.elementRef.boundElementIndex - p.view.elementOffset;\n      var c = this._preBuiltObjects.view.getDebugContext(index, null);\n      return lang_1.isPresent(c) ? new _Context(c.element, c.componentElement, c.injector) : null;\n    };\n    ElementInjector.prototype._reattachInjectors = function(imperativelyCreatedInjector) {\n      if (lang_1.isPresent(this._parent)) {\n        if (lang_1.isPresent(imperativelyCreatedInjector)) {\n          this._reattachInjector(this._injector, imperativelyCreatedInjector, false);\n          this._reattachInjector(imperativelyCreatedInjector, this._parent._injector, false);\n        } else {\n          this._reattachInjector(this._injector, this._parent._injector, false);\n        }\n      } else if (lang_1.isPresent(this._host)) {\n        if (lang_1.isPresent(imperativelyCreatedInjector)) {\n          this._reattachInjector(this._injector, imperativelyCreatedInjector, false);\n          this._reattachInjector(imperativelyCreatedInjector, this._host._injector, true);\n        } else {\n          this._reattachInjector(this._injector, this._host._injector, true);\n        }\n      } else {\n        if (lang_1.isPresent(imperativelyCreatedInjector)) {\n          this._reattachInjector(this._injector, imperativelyCreatedInjector, true);\n        }\n      }\n    };\n    ElementInjector.prototype._reattachInjector = function(injector, parentInjector, isBoundary) {\n      injector.internalStrategy.attach(parentInjector, isBoundary);\n    };\n    ElementInjector.prototype.hasVariableBinding = function(name) {\n      var vb = this._proto.directiveVariableBindings;\n      return lang_1.isPresent(vb) && vb.has(name);\n    };\n    ElementInjector.prototype.getVariableBinding = function(name) {\n      var index = this._proto.directiveVariableBindings.get(name);\n      return lang_1.isPresent(index) ? this.getDirectiveAtIndex(index) : this.getElementRef();\n    };\n    ElementInjector.prototype.get = function(token) {\n      return this._injector.get(token);\n    };\n    ElementInjector.prototype.hasDirective = function(type) {\n      return lang_1.isPresent(this._injector.getOptional(type));\n    };\n    ElementInjector.prototype.getEventEmitterAccessors = function() {\n      return this._proto.eventEmitterAccessors;\n    };\n    ElementInjector.prototype.getDirectiveVariableBindings = function() {\n      return this._proto.directiveVariableBindings;\n    };\n    ElementInjector.prototype.getComponent = function() {\n      return this._strategy.getComponent();\n    };\n    ElementInjector.prototype.getInjector = function() {\n      return this._injector;\n    };\n    ElementInjector.prototype.getElementRef = function() {\n      return this._preBuiltObjects.elementRef;\n    };\n    ElementInjector.prototype.getViewContainerRef = function() {\n      return new view_container_ref_2.ViewContainerRef_(this._preBuiltObjects.viewManager, this.getElementRef());\n    };\n    ElementInjector.prototype.getNestedView = function() {\n      return this._preBuiltObjects.nestedView;\n    };\n    ElementInjector.prototype.getView = function() {\n      return this._preBuiltObjects.view;\n    };\n    ElementInjector.prototype.directParent = function() {\n      return this._proto.distanceToParent < 2 ? this.parent : null;\n    };\n    ElementInjector.prototype.isComponentKey = function(key) {\n      return this._strategy.isComponentKey(key);\n    };\n    ElementInjector.prototype.getDependency = function(injector, provider, dep) {\n      var key = dep.key;\n      if (provider instanceof DirectiveProvider) {\n        var dirDep = dep;\n        var dirProvider = provider;\n        var staticKeys = StaticKeys.instance();\n        if (key.id === staticKeys.viewManagerId)\n          return this._preBuiltObjects.viewManager;\n        if (lang_1.isPresent(dirDep.attributeName))\n          return this._buildAttribute(dirDep);\n        if (lang_1.isPresent(dirDep.queryDecorator))\n          return this._queryStrategy.findQuery(dirDep.queryDecorator).list;\n        if (dirDep.key.id === StaticKeys.instance().changeDetectorRefId) {\n          if (dirProvider.metadata instanceof directives_1.ComponentMetadata) {\n            var componentView = this._preBuiltObjects.view.getNestedView(this._preBuiltObjects.elementRef.boundElementIndex);\n            return componentView.changeDetector.ref;\n          } else {\n            return this._preBuiltObjects.view.changeDetector.ref;\n          }\n        }\n        if (dirDep.key.id === StaticKeys.instance().elementRefId) {\n          return this.getElementRef();\n        }\n        if (dirDep.key.id === StaticKeys.instance().viewContainerId) {\n          return this.getViewContainerRef();\n        }\n        if (dirDep.key.id === StaticKeys.instance().templateRefId) {\n          if (lang_1.isBlank(this._preBuiltObjects.templateRef)) {\n            if (dirDep.optional) {\n              return null;\n            }\n            throw new di_1.NoProviderError(null, dirDep.key);\n          }\n          return this._preBuiltObjects.templateRef;\n        }\n      } else if (provider instanceof pipe_provider_1.PipeProvider) {\n        if (dep.key.id === StaticKeys.instance().changeDetectorRefId) {\n          var componentView = this._preBuiltObjects.view.getNestedView(this._preBuiltObjects.elementRef.boundElementIndex);\n          return componentView.changeDetector.ref;\n        }\n      }\n      return injector_1.UNDEFINED;\n    };\n    ElementInjector.prototype._buildAttribute = function(dep) {\n      var attributes = this._proto.attributes;\n      if (lang_1.isPresent(attributes) && attributes.has(dep.attributeName)) {\n        return attributes.get(dep.attributeName);\n      } else {\n        return null;\n      }\n    };\n    ElementInjector.prototype.addDirectivesMatchingQuery = function(query, list) {\n      var templateRef = lang_1.isBlank(this._preBuiltObjects) ? null : this._preBuiltObjects.templateRef;\n      if (query.selector === template_ref_1.TemplateRef && lang_1.isPresent(templateRef)) {\n        list.push(templateRef);\n      }\n      this._strategy.addDirectivesMatchingQuery(query, list);\n    };\n    ElementInjector.prototype._buildQueryStrategy = function() {\n      if (this._proto.protoQueryRefs.length === 0) {\n        return _emptyQueryStrategy;\n      } else if (this._proto.protoQueryRefs.length <= InlineQueryStrategy.NUMBER_OF_SUPPORTED_QUERIES) {\n        return new InlineQueryStrategy(this);\n      } else {\n        return new DynamicQueryStrategy(this);\n      }\n    };\n    ElementInjector.prototype.link = function(parent) {\n      parent.addChild(this);\n    };\n    ElementInjector.prototype.unlink = function() {\n      this.remove();\n    };\n    ElementInjector.prototype.getDirectiveAtIndex = function(index) {\n      return this._injector.getAt(index);\n    };\n    ElementInjector.prototype.hasInstances = function() {\n      return this._proto.hasBindings && this.hydrated;\n    };\n    ElementInjector.prototype.getHost = function() {\n      return this._host;\n    };\n    ElementInjector.prototype.getBoundElementIndex = function() {\n      return this._proto.index;\n    };\n    ElementInjector.prototype.getRootViewInjectors = function() {\n      if (!this.hydrated)\n        return [];\n      var view = this._preBuiltObjects.view;\n      var nestedView = view.getNestedView(view.elementOffset + this.getBoundElementIndex());\n      return lang_1.isPresent(nestedView) ? nestedView.rootElementInjectors : [];\n    };\n    ElementInjector.prototype.afterViewChecked = function() {\n      this._queryStrategy.updateViewQueries();\n    };\n    ElementInjector.prototype.afterContentChecked = function() {\n      this._queryStrategy.updateContentQueries();\n    };\n    ElementInjector.prototype.traverseAndSetQueriesAsDirty = function() {\n      var inj = this;\n      while (lang_1.isPresent(inj)) {\n        inj._setQueriesAsDirty();\n        inj = inj.parent;\n      }\n    };\n    ElementInjector.prototype._setQueriesAsDirty = function() {\n      this._queryStrategy.setContentQueriesAsDirty();\n      if (lang_1.isPresent(this._host))\n        this._host._queryStrategy.setViewQueriesAsDirty();\n    };\n    return ElementInjector;\n  })(TreeNode);\n  exports.ElementInjector = ElementInjector;\n  var _EmptyQueryStrategy = (function() {\n    function _EmptyQueryStrategy() {}\n    _EmptyQueryStrategy.prototype.setContentQueriesAsDirty = function() {};\n    _EmptyQueryStrategy.prototype.setViewQueriesAsDirty = function() {};\n    _EmptyQueryStrategy.prototype.hydrate = function() {};\n    _EmptyQueryStrategy.prototype.dehydrate = function() {};\n    _EmptyQueryStrategy.prototype.updateContentQueries = function() {};\n    _EmptyQueryStrategy.prototype.updateViewQueries = function() {};\n    _EmptyQueryStrategy.prototype.findQuery = function(query) {\n      throw new exceptions_1.BaseException(\"Cannot find query for directive \" + query + \".\");\n    };\n    return _EmptyQueryStrategy;\n  })();\n  var _emptyQueryStrategy = new _EmptyQueryStrategy();\n  var InlineQueryStrategy = (function() {\n    function InlineQueryStrategy(ei) {\n      var protoRefs = ei._proto.protoQueryRefs;\n      if (protoRefs.length > 0)\n        this.query0 = new QueryRef(protoRefs[0], ei);\n      if (protoRefs.length > 1)\n        this.query1 = new QueryRef(protoRefs[1], ei);\n      if (protoRefs.length > 2)\n        this.query2 = new QueryRef(protoRefs[2], ei);\n    }\n    InlineQueryStrategy.prototype.setContentQueriesAsDirty = function() {\n      if (lang_1.isPresent(this.query0) && !this.query0.isViewQuery)\n        this.query0.dirty = true;\n      if (lang_1.isPresent(this.query1) && !this.query1.isViewQuery)\n        this.query1.dirty = true;\n      if (lang_1.isPresent(this.query2) && !this.query2.isViewQuery)\n        this.query2.dirty = true;\n    };\n    InlineQueryStrategy.prototype.setViewQueriesAsDirty = function() {\n      if (lang_1.isPresent(this.query0) && this.query0.isViewQuery)\n        this.query0.dirty = true;\n      if (lang_1.isPresent(this.query1) && this.query1.isViewQuery)\n        this.query1.dirty = true;\n      if (lang_1.isPresent(this.query2) && this.query2.isViewQuery)\n        this.query2.dirty = true;\n    };\n    InlineQueryStrategy.prototype.hydrate = function() {\n      if (lang_1.isPresent(this.query0))\n        this.query0.hydrate();\n      if (lang_1.isPresent(this.query1))\n        this.query1.hydrate();\n      if (lang_1.isPresent(this.query2))\n        this.query2.hydrate();\n    };\n    InlineQueryStrategy.prototype.dehydrate = function() {\n      if (lang_1.isPresent(this.query0))\n        this.query0.dehydrate();\n      if (lang_1.isPresent(this.query1))\n        this.query1.dehydrate();\n      if (lang_1.isPresent(this.query2))\n        this.query2.dehydrate();\n    };\n    InlineQueryStrategy.prototype.updateContentQueries = function() {\n      if (lang_1.isPresent(this.query0) && !this.query0.isViewQuery) {\n        this.query0.update();\n      }\n      if (lang_1.isPresent(this.query1) && !this.query1.isViewQuery) {\n        this.query1.update();\n      }\n      if (lang_1.isPresent(this.query2) && !this.query2.isViewQuery) {\n        this.query2.update();\n      }\n    };\n    InlineQueryStrategy.prototype.updateViewQueries = function() {\n      if (lang_1.isPresent(this.query0) && this.query0.isViewQuery) {\n        this.query0.update();\n      }\n      if (lang_1.isPresent(this.query1) && this.query1.isViewQuery) {\n        this.query1.update();\n      }\n      if (lang_1.isPresent(this.query2) && this.query2.isViewQuery) {\n        this.query2.update();\n      }\n    };\n    InlineQueryStrategy.prototype.findQuery = function(query) {\n      if (lang_1.isPresent(this.query0) && this.query0.protoQueryRef.query === query) {\n        return this.query0;\n      }\n      if (lang_1.isPresent(this.query1) && this.query1.protoQueryRef.query === query) {\n        return this.query1;\n      }\n      if (lang_1.isPresent(this.query2) && this.query2.protoQueryRef.query === query) {\n        return this.query2;\n      }\n      throw new exceptions_1.BaseException(\"Cannot find query for directive \" + query + \".\");\n    };\n    InlineQueryStrategy.NUMBER_OF_SUPPORTED_QUERIES = 3;\n    return InlineQueryStrategy;\n  })();\n  var DynamicQueryStrategy = (function() {\n    function DynamicQueryStrategy(ei) {\n      this.queries = ei._proto.protoQueryRefs.map(function(p) {\n        return new QueryRef(p, ei);\n      });\n    }\n    DynamicQueryStrategy.prototype.setContentQueriesAsDirty = function() {\n      for (var i = 0; i < this.queries.length; ++i) {\n        var q = this.queries[i];\n        if (!q.isViewQuery)\n          q.dirty = true;\n      }\n    };\n    DynamicQueryStrategy.prototype.setViewQueriesAsDirty = function() {\n      for (var i = 0; i < this.queries.length; ++i) {\n        var q = this.queries[i];\n        if (q.isViewQuery)\n          q.dirty = true;\n      }\n    };\n    DynamicQueryStrategy.prototype.hydrate = function() {\n      for (var i = 0; i < this.queries.length; ++i) {\n        var q = this.queries[i];\n        q.hydrate();\n      }\n    };\n    DynamicQueryStrategy.prototype.dehydrate = function() {\n      for (var i = 0; i < this.queries.length; ++i) {\n        var q = this.queries[i];\n        q.dehydrate();\n      }\n    };\n    DynamicQueryStrategy.prototype.updateContentQueries = function() {\n      for (var i = 0; i < this.queries.length; ++i) {\n        var q = this.queries[i];\n        if (!q.isViewQuery) {\n          q.update();\n        }\n      }\n    };\n    DynamicQueryStrategy.prototype.updateViewQueries = function() {\n      for (var i = 0; i < this.queries.length; ++i) {\n        var q = this.queries[i];\n        if (q.isViewQuery) {\n          q.update();\n        }\n      }\n    };\n    DynamicQueryStrategy.prototype.findQuery = function(query) {\n      for (var i = 0; i < this.queries.length; ++i) {\n        var q = this.queries[i];\n        if (q.protoQueryRef.query === query) {\n          return q;\n        }\n      }\n      throw new exceptions_1.BaseException(\"Cannot find query for directive \" + query + \".\");\n    };\n    return DynamicQueryStrategy;\n  })();\n  var ElementInjectorInlineStrategy = (function() {\n    function ElementInjectorInlineStrategy(injectorStrategy, _ei) {\n      this.injectorStrategy = injectorStrategy;\n      this._ei = _ei;\n    }\n    ElementInjectorInlineStrategy.prototype.hydrate = function() {\n      var i = this.injectorStrategy;\n      var p = i.protoStrategy;\n      i.resetConstructionCounter();\n      if (p.provider0 instanceof DirectiveProvider && lang_1.isPresent(p.keyId0) && i.obj0 === injector_1.UNDEFINED)\n        i.obj0 = i.instantiateProvider(p.provider0, p.visibility0);\n      if (p.provider1 instanceof DirectiveProvider && lang_1.isPresent(p.keyId1) && i.obj1 === injector_1.UNDEFINED)\n        i.obj1 = i.instantiateProvider(p.provider1, p.visibility1);\n      if (p.provider2 instanceof DirectiveProvider && lang_1.isPresent(p.keyId2) && i.obj2 === injector_1.UNDEFINED)\n        i.obj2 = i.instantiateProvider(p.provider2, p.visibility2);\n      if (p.provider3 instanceof DirectiveProvider && lang_1.isPresent(p.keyId3) && i.obj3 === injector_1.UNDEFINED)\n        i.obj3 = i.instantiateProvider(p.provider3, p.visibility3);\n      if (p.provider4 instanceof DirectiveProvider && lang_1.isPresent(p.keyId4) && i.obj4 === injector_1.UNDEFINED)\n        i.obj4 = i.instantiateProvider(p.provider4, p.visibility4);\n      if (p.provider5 instanceof DirectiveProvider && lang_1.isPresent(p.keyId5) && i.obj5 === injector_1.UNDEFINED)\n        i.obj5 = i.instantiateProvider(p.provider5, p.visibility5);\n      if (p.provider6 instanceof DirectiveProvider && lang_1.isPresent(p.keyId6) && i.obj6 === injector_1.UNDEFINED)\n        i.obj6 = i.instantiateProvider(p.provider6, p.visibility6);\n      if (p.provider7 instanceof DirectiveProvider && lang_1.isPresent(p.keyId7) && i.obj7 === injector_1.UNDEFINED)\n        i.obj7 = i.instantiateProvider(p.provider7, p.visibility7);\n      if (p.provider8 instanceof DirectiveProvider && lang_1.isPresent(p.keyId8) && i.obj8 === injector_1.UNDEFINED)\n        i.obj8 = i.instantiateProvider(p.provider8, p.visibility8);\n      if (p.provider9 instanceof DirectiveProvider && lang_1.isPresent(p.keyId9) && i.obj9 === injector_1.UNDEFINED)\n        i.obj9 = i.instantiateProvider(p.provider9, p.visibility9);\n    };\n    ElementInjectorInlineStrategy.prototype.dehydrate = function() {\n      var i = this.injectorStrategy;\n      i.obj0 = injector_1.UNDEFINED;\n      i.obj1 = injector_1.UNDEFINED;\n      i.obj2 = injector_1.UNDEFINED;\n      i.obj3 = injector_1.UNDEFINED;\n      i.obj4 = injector_1.UNDEFINED;\n      i.obj5 = injector_1.UNDEFINED;\n      i.obj6 = injector_1.UNDEFINED;\n      i.obj7 = injector_1.UNDEFINED;\n      i.obj8 = injector_1.UNDEFINED;\n      i.obj9 = injector_1.UNDEFINED;\n    };\n    ElementInjectorInlineStrategy.prototype.callOnDestroy = function() {\n      var i = this.injectorStrategy;\n      var p = i.protoStrategy;\n      if (p.provider0 instanceof DirectiveProvider && p.provider0.callOnDestroy) {\n        i.obj0.onDestroy();\n      }\n      if (p.provider1 instanceof DirectiveProvider && p.provider1.callOnDestroy) {\n        i.obj1.onDestroy();\n      }\n      if (p.provider2 instanceof DirectiveProvider && p.provider2.callOnDestroy) {\n        i.obj2.onDestroy();\n      }\n      if (p.provider3 instanceof DirectiveProvider && p.provider3.callOnDestroy) {\n        i.obj3.onDestroy();\n      }\n      if (p.provider4 instanceof DirectiveProvider && p.provider4.callOnDestroy) {\n        i.obj4.onDestroy();\n      }\n      if (p.provider5 instanceof DirectiveProvider && p.provider5.callOnDestroy) {\n        i.obj5.onDestroy();\n      }\n      if (p.provider6 instanceof DirectiveProvider && p.provider6.callOnDestroy) {\n        i.obj6.onDestroy();\n      }\n      if (p.provider7 instanceof DirectiveProvider && p.provider7.callOnDestroy) {\n        i.obj7.onDestroy();\n      }\n      if (p.provider8 instanceof DirectiveProvider && p.provider8.callOnDestroy) {\n        i.obj8.onDestroy();\n      }\n      if (p.provider9 instanceof DirectiveProvider && p.provider9.callOnDestroy) {\n        i.obj9.onDestroy();\n      }\n    };\n    ElementInjectorInlineStrategy.prototype.getComponent = function() {\n      return this.injectorStrategy.obj0;\n    };\n    ElementInjectorInlineStrategy.prototype.isComponentKey = function(key) {\n      return this._ei._proto._firstProviderIsComponent && lang_1.isPresent(key) && key.id === this.injectorStrategy.protoStrategy.keyId0;\n    };\n    ElementInjectorInlineStrategy.prototype.addDirectivesMatchingQuery = function(query, list) {\n      var i = this.injectorStrategy;\n      var p = i.protoStrategy;\n      if (lang_1.isPresent(p.provider0) && p.provider0.key.token === query.selector) {\n        if (i.obj0 === injector_1.UNDEFINED)\n          i.obj0 = i.instantiateProvider(p.provider0, p.visibility0);\n        list.push(i.obj0);\n      }\n      if (lang_1.isPresent(p.provider1) && p.provider1.key.token === query.selector) {\n        if (i.obj1 === injector_1.UNDEFINED)\n          i.obj1 = i.instantiateProvider(p.provider1, p.visibility1);\n        list.push(i.obj1);\n      }\n      if (lang_1.isPresent(p.provider2) && p.provider2.key.token === query.selector) {\n        if (i.obj2 === injector_1.UNDEFINED)\n          i.obj2 = i.instantiateProvider(p.provider2, p.visibility2);\n        list.push(i.obj2);\n      }\n      if (lang_1.isPresent(p.provider3) && p.provider3.key.token === query.selector) {\n        if (i.obj3 === injector_1.UNDEFINED)\n          i.obj3 = i.instantiateProvider(p.provider3, p.visibility3);\n        list.push(i.obj3);\n      }\n      if (lang_1.isPresent(p.provider4) && p.provider4.key.token === query.selector) {\n        if (i.obj4 === injector_1.UNDEFINED)\n          i.obj4 = i.instantiateProvider(p.provider4, p.visibility4);\n        list.push(i.obj4);\n      }\n      if (lang_1.isPresent(p.provider5) && p.provider5.key.token === query.selector) {\n        if (i.obj5 === injector_1.UNDEFINED)\n          i.obj5 = i.instantiateProvider(p.provider5, p.visibility5);\n        list.push(i.obj5);\n      }\n      if (lang_1.isPresent(p.provider6) && p.provider6.key.token === query.selector) {\n        if (i.obj6 === injector_1.UNDEFINED)\n          i.obj6 = i.instantiateProvider(p.provider6, p.visibility6);\n        list.push(i.obj6);\n      }\n      if (lang_1.isPresent(p.provider7) && p.provider7.key.token === query.selector) {\n        if (i.obj7 === injector_1.UNDEFINED)\n          i.obj7 = i.instantiateProvider(p.provider7, p.visibility7);\n        list.push(i.obj7);\n      }\n      if (lang_1.isPresent(p.provider8) && p.provider8.key.token === query.selector) {\n        if (i.obj8 === injector_1.UNDEFINED)\n          i.obj8 = i.instantiateProvider(p.provider8, p.visibility8);\n        list.push(i.obj8);\n      }\n      if (lang_1.isPresent(p.provider9) && p.provider9.key.token === query.selector) {\n        if (i.obj9 === injector_1.UNDEFINED)\n          i.obj9 = i.instantiateProvider(p.provider9, p.visibility9);\n        list.push(i.obj9);\n      }\n    };\n    return ElementInjectorInlineStrategy;\n  })();\n  var ElementInjectorDynamicStrategy = (function() {\n    function ElementInjectorDynamicStrategy(injectorStrategy, _ei) {\n      this.injectorStrategy = injectorStrategy;\n      this._ei = _ei;\n    }\n    ElementInjectorDynamicStrategy.prototype.hydrate = function() {\n      var inj = this.injectorStrategy;\n      var p = inj.protoStrategy;\n      inj.resetConstructionCounter();\n      for (var i = 0; i < p.keyIds.length; i++) {\n        if (p.providers[i] instanceof DirectiveProvider && lang_1.isPresent(p.keyIds[i]) && inj.objs[i] === injector_1.UNDEFINED) {\n          inj.objs[i] = inj.instantiateProvider(p.providers[i], p.visibilities[i]);\n        }\n      }\n    };\n    ElementInjectorDynamicStrategy.prototype.dehydrate = function() {\n      var inj = this.injectorStrategy;\n      collection_1.ListWrapper.fill(inj.objs, injector_1.UNDEFINED);\n    };\n    ElementInjectorDynamicStrategy.prototype.callOnDestroy = function() {\n      var ist = this.injectorStrategy;\n      var p = ist.protoStrategy;\n      for (var i = 0; i < p.providers.length; i++) {\n        if (p.providers[i] instanceof DirectiveProvider && p.providers[i].callOnDestroy) {\n          ist.objs[i].onDestroy();\n        }\n      }\n    };\n    ElementInjectorDynamicStrategy.prototype.getComponent = function() {\n      return this.injectorStrategy.objs[0];\n    };\n    ElementInjectorDynamicStrategy.prototype.isComponentKey = function(key) {\n      var p = this.injectorStrategy.protoStrategy;\n      return this._ei._proto._firstProviderIsComponent && lang_1.isPresent(key) && key.id === p.keyIds[0];\n    };\n    ElementInjectorDynamicStrategy.prototype.addDirectivesMatchingQuery = function(query, list) {\n      var ist = this.injectorStrategy;\n      var p = ist.protoStrategy;\n      for (var i = 0; i < p.providers.length; i++) {\n        if (p.providers[i].key.token === query.selector) {\n          if (ist.objs[i] === injector_1.UNDEFINED) {\n            ist.objs[i] = ist.instantiateProvider(p.providers[i], p.visibilities[i]);\n          }\n          list.push(ist.objs[i]);\n        }\n      }\n    };\n    return ElementInjectorDynamicStrategy;\n  })();\n  var ProtoQueryRef = (function() {\n    function ProtoQueryRef(dirIndex, setter, query) {\n      this.dirIndex = dirIndex;\n      this.setter = setter;\n      this.query = query;\n    }\n    Object.defineProperty(ProtoQueryRef.prototype, \"usesPropertySyntax\", {\n      get: function() {\n        return lang_1.isPresent(this.setter);\n      },\n      enumerable: true,\n      configurable: true\n    });\n    return ProtoQueryRef;\n  })();\n  exports.ProtoQueryRef = ProtoQueryRef;\n  var QueryRef = (function() {\n    function QueryRef(protoQueryRef, originator) {\n      this.protoQueryRef = protoQueryRef;\n      this.originator = originator;\n    }\n    Object.defineProperty(QueryRef.prototype, \"isViewQuery\", {\n      get: function() {\n        return this.protoQueryRef.query.isViewQuery;\n      },\n      enumerable: true,\n      configurable: true\n    });\n    QueryRef.prototype.update = function() {\n      if (!this.dirty)\n        return ;\n      this._update();\n      this.dirty = false;\n      if (this.protoQueryRef.usesPropertySyntax) {\n        var dir = this.originator.getDirectiveAtIndex(this.protoQueryRef.dirIndex);\n        if (this.protoQueryRef.query.first) {\n          this.protoQueryRef.setter(dir, this.list.length > 0 ? this.list.first : null);\n        } else {\n          this.protoQueryRef.setter(dir, this.list);\n        }\n      }\n      this.list.notifyOnChanges();\n    };\n    QueryRef.prototype._update = function() {\n      var aggregator = [];\n      if (this.protoQueryRef.query.isViewQuery) {\n        var view = this.originator.getView();\n        var nestedView = view.getNestedView(view.elementOffset + this.originator.getBoundElementIndex());\n        if (lang_1.isPresent(nestedView))\n          this._visitView(nestedView, aggregator);\n      } else {\n        this._visit(this.originator, aggregator);\n      }\n      this.list.reset(aggregator);\n    };\n    ;\n    QueryRef.prototype._visit = function(inj, aggregator) {\n      var view = inj.getView();\n      var startIdx = view.elementOffset + inj._proto.index;\n      for (var i = startIdx; i < view.elementOffset + view.ownBindersCount; i++) {\n        var curInj = view.elementInjectors[i];\n        if (lang_1.isBlank(curInj))\n          continue;\n        if (i > startIdx && (lang_1.isBlank(curInj) || lang_1.isBlank(curInj.parent) || view.elementOffset + curInj.parent._proto.index < startIdx)) {\n          break;\n        }\n        if (!this.protoQueryRef.query.descendants && !(curInj.parent == this.originator || curInj == this.originator))\n          continue;\n        this._visitInjector(curInj, aggregator);\n        var vc = view.viewContainers[i];\n        if (lang_1.isPresent(vc))\n          this._visitViewContainer(vc, aggregator);\n      }\n    };\n    QueryRef.prototype._visitInjector = function(inj, aggregator) {\n      if (this.protoQueryRef.query.isVarBindingQuery) {\n        this._aggregateVariableBinding(inj, aggregator);\n      } else {\n        this._aggregateDirective(inj, aggregator);\n      }\n    };\n    QueryRef.prototype._visitViewContainer = function(vc, aggregator) {\n      for (var j = 0; j < vc.views.length; j++) {\n        this._visitView(vc.views[j], aggregator);\n      }\n    };\n    QueryRef.prototype._visitView = function(view, aggregator) {\n      for (var i = view.elementOffset; i < view.elementOffset + view.ownBindersCount; i++) {\n        var inj = view.elementInjectors[i];\n        if (lang_1.isBlank(inj))\n          continue;\n        this._visitInjector(inj, aggregator);\n        var vc = view.viewContainers[i];\n        if (lang_1.isPresent(vc))\n          this._visitViewContainer(vc, aggregator);\n      }\n    };\n    QueryRef.prototype._aggregateVariableBinding = function(inj, aggregator) {\n      var vb = this.protoQueryRef.query.varBindings;\n      for (var i = 0; i < vb.length; ++i) {\n        if (inj.hasVariableBinding(vb[i])) {\n          aggregator.push(inj.getVariableBinding(vb[i]));\n        }\n      }\n    };\n    QueryRef.prototype._aggregateDirective = function(inj, aggregator) {\n      inj.addDirectivesMatchingQuery(this.protoQueryRef.query, aggregator);\n    };\n    QueryRef.prototype.dehydrate = function() {\n      this.list = null;\n    };\n    QueryRef.prototype.hydrate = function() {\n      this.list = new query_list_1.QueryList();\n      this.dirty = true;\n    };\n    return QueryRef;\n  })();\n  exports.QueryRef = QueryRef;\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"angular2/src/animate/animation_builder\", [\"angular2/src/core/di\", \"angular2/src/animate/css_animation_builder\", \"angular2/src/animate/browser_details\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  var __decorate = (this && this.__decorate) || function(decorators, target, key, desc) {\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\")\n      return Reflect.decorate(decorators, target, key, desc);\n    switch (arguments.length) {\n      case 2:\n        return decorators.reduceRight(function(o, d) {\n          return (d && d(o)) || o;\n        }, target);\n      case 3:\n        return decorators.reduceRight(function(o, d) {\n          return (d && d(target, key)), void 0;\n        }, void 0);\n      case 4:\n        return decorators.reduceRight(function(o, d) {\n          return (d && d(target, key, o)) || o;\n        }, desc);\n    }\n  };\n  var __metadata = (this && this.__metadata) || function(k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\")\n      return Reflect.metadata(k, v);\n  };\n  var di_1 = require(\"angular2/src/core/di\");\n  var css_animation_builder_1 = require(\"angular2/src/animate/css_animation_builder\");\n  var browser_details_1 = require(\"angular2/src/animate/browser_details\");\n  var AnimationBuilder = (function() {\n    function AnimationBuilder(browserDetails) {\n      this.browserDetails = browserDetails;\n    }\n    AnimationBuilder.prototype.css = function() {\n      return new css_animation_builder_1.CssAnimationBuilder(this.browserDetails);\n    };\n    AnimationBuilder = __decorate([di_1.Injectable(), __metadata('design:paramtypes', [browser_details_1.BrowserDetails])], AnimationBuilder);\n    return AnimationBuilder;\n  })();\n  exports.AnimationBuilder = AnimationBuilder;\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"angular2/src/common/forms\", [\"angular2/src/common/forms/model\", \"angular2/src/common/forms/directives/abstract_control_directive\", \"angular2/src/common/forms/directives/control_container\", \"angular2/src/common/forms/directives/ng_control_name\", \"angular2/src/common/forms/directives/ng_form_control\", \"angular2/src/common/forms/directives/ng_model\", \"angular2/src/common/forms/directives/ng_control\", \"angular2/src/common/forms/directives/ng_control_group\", \"angular2/src/common/forms/directives/ng_form_model\", \"angular2/src/common/forms/directives/ng_form\", \"angular2/src/common/forms/directives/control_value_accessor\", \"angular2/src/common/forms/directives/default_value_accessor\", \"angular2/src/common/forms/directives/ng_control_status\", \"angular2/src/common/forms/directives/checkbox_value_accessor\", \"angular2/src/common/forms/directives/select_control_value_accessor\", \"angular2/src/common/forms/directives\", \"angular2/src/common/forms/validators\", \"angular2/src/common/forms/directives/validators\", \"angular2/src/common/forms/form_builder\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  var model_1 = require(\"angular2/src/common/forms/model\");\n  exports.AbstractControl = model_1.AbstractControl;\n  exports.Control = model_1.Control;\n  exports.ControlGroup = model_1.ControlGroup;\n  exports.ControlArray = model_1.ControlArray;\n  var abstract_control_directive_1 = require(\"angular2/src/common/forms/directives/abstract_control_directive\");\n  exports.AbstractControlDirective = abstract_control_directive_1.AbstractControlDirective;\n  var control_container_1 = require(\"angular2/src/common/forms/directives/control_container\");\n  exports.ControlContainer = control_container_1.ControlContainer;\n  var ng_control_name_1 = require(\"angular2/src/common/forms/directives/ng_control_name\");\n  exports.NgControlName = ng_control_name_1.NgControlName;\n  var ng_form_control_1 = require(\"angular2/src/common/forms/directives/ng_form_control\");\n  exports.NgFormControl = ng_form_control_1.NgFormControl;\n  var ng_model_1 = require(\"angular2/src/common/forms/directives/ng_model\");\n  exports.NgModel = ng_model_1.NgModel;\n  var ng_control_1 = require(\"angular2/src/common/forms/directives/ng_control\");\n  exports.NgControl = ng_control_1.NgControl;\n  var ng_control_group_1 = require(\"angular2/src/common/forms/directives/ng_control_group\");\n  exports.NgControlGroup = ng_control_group_1.NgControlGroup;\n  var ng_form_model_1 = require(\"angular2/src/common/forms/directives/ng_form_model\");\n  exports.NgFormModel = ng_form_model_1.NgFormModel;\n  var ng_form_1 = require(\"angular2/src/common/forms/directives/ng_form\");\n  exports.NgForm = ng_form_1.NgForm;\n  var control_value_accessor_1 = require(\"angular2/src/common/forms/directives/control_value_accessor\");\n  exports.NG_VALUE_ACCESSOR = control_value_accessor_1.NG_VALUE_ACCESSOR;\n  var default_value_accessor_1 = require(\"angular2/src/common/forms/directives/default_value_accessor\");\n  exports.DefaultValueAccessor = default_value_accessor_1.DefaultValueAccessor;\n  var ng_control_status_1 = require(\"angular2/src/common/forms/directives/ng_control_status\");\n  exports.NgControlStatus = ng_control_status_1.NgControlStatus;\n  var checkbox_value_accessor_1 = require(\"angular2/src/common/forms/directives/checkbox_value_accessor\");\n  exports.CheckboxControlValueAccessor = checkbox_value_accessor_1.CheckboxControlValueAccessor;\n  var select_control_value_accessor_1 = require(\"angular2/src/common/forms/directives/select_control_value_accessor\");\n  exports.NgSelectOption = select_control_value_accessor_1.NgSelectOption;\n  exports.SelectControlValueAccessor = select_control_value_accessor_1.SelectControlValueAccessor;\n  var directives_1 = require(\"angular2/src/common/forms/directives\");\n  exports.FORM_DIRECTIVES = directives_1.FORM_DIRECTIVES;\n  var validators_1 = require(\"angular2/src/common/forms/validators\");\n  exports.NG_VALIDATORS = validators_1.NG_VALIDATORS;\n  exports.NG_ASYNC_VALIDATORS = validators_1.NG_ASYNC_VALIDATORS;\n  exports.Validators = validators_1.Validators;\n  var validators_2 = require(\"angular2/src/common/forms/directives/validators\");\n  exports.RequiredValidator = validators_2.RequiredValidator;\n  exports.MinLengthValidator = validators_2.MinLengthValidator;\n  exports.MaxLengthValidator = validators_2.MaxLengthValidator;\n  var form_builder_1 = require(\"angular2/src/common/forms/form_builder\");\n  exports.FormBuilder = form_builder_1.FormBuilder;\n  exports.FORM_PROVIDERS = form_builder_1.FORM_PROVIDERS;\n  exports.FORM_BINDINGS = form_builder_1.FORM_BINDINGS;\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"angular2/src/compiler/template_compiler\", [\"angular2/src/facade/lang\", \"angular2/src/facade/exceptions\", \"angular2/src/facade/collection\", \"angular2/src/facade/async\", \"angular2/src/core/linker/template_commands\", \"angular2/src/compiler/directive_metadata\", \"angular2/src/core/di\", \"angular2/src/compiler/source_module\", \"angular2/src/compiler/change_detector_compiler\", \"angular2/src/compiler/style_compiler\", \"angular2/src/compiler/command_compiler\", \"angular2/src/compiler/template_parser\", \"angular2/src/compiler/template_normalizer\", \"angular2/src/compiler/runtime_metadata\", \"angular2/src/compiler/command_compiler\", \"angular2/src/compiler/util\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  var __decorate = (this && this.__decorate) || function(decorators, target, key, desc) {\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\")\n      return Reflect.decorate(decorators, target, key, desc);\n    switch (arguments.length) {\n      case 2:\n        return decorators.reduceRight(function(o, d) {\n          return (d && d(o)) || o;\n        }, target);\n      case 3:\n        return decorators.reduceRight(function(o, d) {\n          return (d && d(target, key)), void 0;\n        }, void 0);\n      case 4:\n        return decorators.reduceRight(function(o, d) {\n          return (d && d(target, key, o)) || o;\n        }, desc);\n    }\n  };\n  var __metadata = (this && this.__metadata) || function(k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\")\n      return Reflect.metadata(k, v);\n  };\n  var lang_1 = require(\"angular2/src/facade/lang\");\n  var exceptions_1 = require(\"angular2/src/facade/exceptions\");\n  var collection_1 = require(\"angular2/src/facade/collection\");\n  var async_1 = require(\"angular2/src/facade/async\");\n  var template_commands_1 = require(\"angular2/src/core/linker/template_commands\");\n  var directive_metadata_1 = require(\"angular2/src/compiler/directive_metadata\");\n  var di_1 = require(\"angular2/src/core/di\");\n  var source_module_1 = require(\"angular2/src/compiler/source_module\");\n  var change_detector_compiler_1 = require(\"angular2/src/compiler/change_detector_compiler\");\n  var style_compiler_1 = require(\"angular2/src/compiler/style_compiler\");\n  var command_compiler_1 = require(\"angular2/src/compiler/command_compiler\");\n  var template_parser_1 = require(\"angular2/src/compiler/template_parser\");\n  var template_normalizer_1 = require(\"angular2/src/compiler/template_normalizer\");\n  var runtime_metadata_1 = require(\"angular2/src/compiler/runtime_metadata\");\n  var command_compiler_2 = require(\"angular2/src/compiler/command_compiler\");\n  var util_1 = require(\"angular2/src/compiler/util\");\n  var TemplateCompiler = (function() {\n    function TemplateCompiler(_runtimeMetadataResolver, _templateNormalizer, _templateParser, _styleCompiler, _commandCompiler, _cdCompiler) {\n      this._runtimeMetadataResolver = _runtimeMetadataResolver;\n      this._templateNormalizer = _templateNormalizer;\n      this._templateParser = _templateParser;\n      this._styleCompiler = _styleCompiler;\n      this._commandCompiler = _commandCompiler;\n      this._cdCompiler = _cdCompiler;\n      this._hostCacheKeys = new Map();\n      this._compiledTemplateCache = new Map();\n      this._compiledTemplateDone = new Map();\n      this._nextTemplateId = 0;\n    }\n    TemplateCompiler.prototype.normalizeDirectiveMetadata = function(directive) {\n      if (!directive.isComponent) {\n        return async_1.PromiseWrapper.resolve(directive);\n      }\n      return this._templateNormalizer.normalizeTemplate(directive.type, directive.template).then(function(normalizedTemplate) {\n        return new directive_metadata_1.CompileDirectiveMetadata({\n          type: directive.type,\n          isComponent: directive.isComponent,\n          dynamicLoadable: directive.dynamicLoadable,\n          selector: directive.selector,\n          exportAs: directive.exportAs,\n          changeDetection: directive.changeDetection,\n          inputs: directive.inputs,\n          outputs: directive.outputs,\n          hostListeners: directive.hostListeners,\n          hostProperties: directive.hostProperties,\n          hostAttributes: directive.hostAttributes,\n          lifecycleHooks: directive.lifecycleHooks,\n          template: normalizedTemplate\n        });\n      });\n    };\n    TemplateCompiler.prototype.compileHostComponentRuntime = function(type) {\n      var hostCacheKey = this._hostCacheKeys.get(type);\n      if (lang_1.isBlank(hostCacheKey)) {\n        hostCacheKey = new Object();\n        this._hostCacheKeys.set(type, hostCacheKey);\n        var compMeta = this._runtimeMetadataResolver.getMetadata(type);\n        assertComponent(compMeta);\n        var hostMeta = directive_metadata_1.createHostComponentMeta(compMeta.type, compMeta.selector);\n        this._compileComponentRuntime(hostCacheKey, hostMeta, [compMeta], new Set());\n      }\n      return this._compiledTemplateDone.get(hostCacheKey).then(function(compiledTemplate) {\n        return new template_commands_1.CompiledHostTemplate(compiledTemplate);\n      });\n    };\n    TemplateCompiler.prototype.clearCache = function() {\n      this._hostCacheKeys.clear();\n      this._styleCompiler.clearCache();\n      this._compiledTemplateCache.clear();\n      this._compiledTemplateDone.clear();\n    };\n    TemplateCompiler.prototype._compileComponentRuntime = function(cacheKey, compMeta, viewDirectives, compilingComponentCacheKeys) {\n      var _this = this;\n      var compiledTemplate = this._compiledTemplateCache.get(cacheKey);\n      var done = this._compiledTemplateDone.get(cacheKey);\n      if (lang_1.isBlank(compiledTemplate)) {\n        var styles = [];\n        var changeDetectorFactory;\n        var commands = [];\n        var templateId = lang_1.stringify(compMeta.type.runtime) + \"Template\" + this._nextTemplateId++;\n        compiledTemplate = new template_commands_1.CompiledComponentTemplate(templateId, function(dispatcher) {\n          return changeDetectorFactory(dispatcher);\n        }, commands, styles);\n        this._compiledTemplateCache.set(cacheKey, compiledTemplate);\n        compilingComponentCacheKeys.add(cacheKey);\n        done = async_1.PromiseWrapper.all([this._styleCompiler.compileComponentRuntime(compMeta.template)].concat(viewDirectives.map(function(dirMeta) {\n          return _this.normalizeDirectiveMetadata(dirMeta);\n        }))).then(function(stylesAndNormalizedViewDirMetas) {\n          var childPromises = [];\n          var normalizedViewDirMetas = stylesAndNormalizedViewDirMetas.slice(1);\n          var parsedTemplate = _this._templateParser.parse(compMeta.template.template, normalizedViewDirMetas, compMeta.type.name);\n          var changeDetectorFactories = _this._cdCompiler.compileComponentRuntime(compMeta.type, compMeta.changeDetection, parsedTemplate);\n          changeDetectorFactory = changeDetectorFactories[0];\n          var tmpStyles = stylesAndNormalizedViewDirMetas[0];\n          tmpStyles.forEach(function(style) {\n            return styles.push(style);\n          });\n          var tmpCommands = _this._compileCommandsRuntime(compMeta, parsedTemplate, changeDetectorFactories, compilingComponentCacheKeys, childPromises);\n          tmpCommands.forEach(function(cmd) {\n            return commands.push(cmd);\n          });\n          return async_1.PromiseWrapper.all(childPromises);\n        }).then(function(_) {\n          collection_1.SetWrapper.delete(compilingComponentCacheKeys, cacheKey);\n          return compiledTemplate;\n        });\n        this._compiledTemplateDone.set(cacheKey, done);\n      }\n      return compiledTemplate;\n    };\n    TemplateCompiler.prototype._compileCommandsRuntime = function(compMeta, parsedTemplate, changeDetectorFactories, compilingComponentCacheKeys, childPromises) {\n      var _this = this;\n      var cmds = this._commandCompiler.compileComponentRuntime(compMeta, parsedTemplate, changeDetectorFactories, function(childComponentDir) {\n        var childCacheKey = childComponentDir.type.runtime;\n        var childViewDirectives = _this._runtimeMetadataResolver.getViewDirectivesMetadata(childComponentDir.type.runtime);\n        var childIsRecursive = collection_1.SetWrapper.has(compilingComponentCacheKeys, childCacheKey);\n        var childTemplate = _this._compileComponentRuntime(childCacheKey, childComponentDir, childViewDirectives, compilingComponentCacheKeys);\n        if (!childIsRecursive) {\n          childPromises.push(_this._compiledTemplateDone.get(childCacheKey));\n        }\n        return function() {\n          return childTemplate;\n        };\n      });\n      cmds.forEach(function(cmd) {\n        if (cmd instanceof template_commands_1.BeginComponentCmd) {\n          cmd.templateGetter();\n        }\n      });\n      return cmds;\n    };\n    TemplateCompiler.prototype.compileTemplatesCodeGen = function(components) {\n      var _this = this;\n      if (components.length === 0) {\n        throw new exceptions_1.BaseException('No components given');\n      }\n      var declarations = [];\n      var templateArguments = [];\n      var componentMetas = [];\n      components.forEach(function(componentWithDirs) {\n        var compMeta = componentWithDirs.component;\n        assertComponent(compMeta);\n        componentMetas.push(compMeta);\n        _this._processTemplateCodeGen(compMeta, componentWithDirs.directives, declarations, templateArguments);\n        if (compMeta.dynamicLoadable) {\n          var hostMeta = directive_metadata_1.createHostComponentMeta(compMeta.type, compMeta.selector);\n          componentMetas.push(hostMeta);\n          _this._processTemplateCodeGen(hostMeta, [compMeta], declarations, templateArguments);\n        }\n      });\n      collection_1.ListWrapper.forEachWithIndex(componentMetas, function(compMeta, index) {\n        var templateId = compMeta.type.moduleUrl + \"|\" + compMeta.type.name;\n        var constructionKeyword = lang_1.IS_DART ? 'const' : 'new';\n        var compiledTemplateExpr = constructionKeyword + \" \" + command_compiler_2.TEMPLATE_COMMANDS_MODULE_REF + \"CompiledComponentTemplate('\" + templateId + \"',\" + templateArguments[index].join(',') + \")\";\n        var variableValueExpr;\n        if (compMeta.type.isHost) {\n          variableValueExpr = constructionKeyword + \" \" + command_compiler_2.TEMPLATE_COMMANDS_MODULE_REF + \"CompiledHostTemplate(\" + compiledTemplateExpr + \")\";\n        } else {\n          variableValueExpr = compiledTemplateExpr;\n        }\n        var varName = templateVariableName(compMeta.type);\n        declarations.push(\"\" + util_1.codeGenExportVariable(varName) + variableValueExpr + \";\");\n        declarations.push(util_1.codeGenValueFn([], varName, templateGetterName(compMeta.type)) + \";\");\n      });\n      var moduleUrl = components[0].component.type.moduleUrl;\n      return new source_module_1.SourceModule(\"\" + templateModuleUrl(moduleUrl), declarations.join('\\n'));\n    };\n    TemplateCompiler.prototype.compileStylesheetCodeGen = function(stylesheetUrl, cssText) {\n      return this._styleCompiler.compileStylesheetCodeGen(stylesheetUrl, cssText);\n    };\n    TemplateCompiler.prototype._processTemplateCodeGen = function(compMeta, directives, targetDeclarations, targetTemplateArguments) {\n      var styleExpr = this._styleCompiler.compileComponentCodeGen(compMeta.template);\n      var parsedTemplate = this._templateParser.parse(compMeta.template.template, directives, compMeta.type.name);\n      var changeDetectorsExprs = this._cdCompiler.compileComponentCodeGen(compMeta.type, compMeta.changeDetection, parsedTemplate);\n      var commandsExpr = this._commandCompiler.compileComponentCodeGen(compMeta, parsedTemplate, changeDetectorsExprs.expressions, codeGenComponentTemplateFactory);\n      addAll(styleExpr.declarations, targetDeclarations);\n      addAll(changeDetectorsExprs.declarations, targetDeclarations);\n      addAll(commandsExpr.declarations, targetDeclarations);\n      targetTemplateArguments.push([changeDetectorsExprs.expressions[0], commandsExpr.expression, styleExpr.expression]);\n    };\n    TemplateCompiler = __decorate([di_1.Injectable(), __metadata('design:paramtypes', [runtime_metadata_1.RuntimeMetadataResolver, template_normalizer_1.TemplateNormalizer, template_parser_1.TemplateParser, style_compiler_1.StyleCompiler, command_compiler_1.CommandCompiler, change_detector_compiler_1.ChangeDetectionCompiler])], TemplateCompiler);\n    return TemplateCompiler;\n  })();\n  exports.TemplateCompiler = TemplateCompiler;\n  var NormalizedComponentWithViewDirectives = (function() {\n    function NormalizedComponentWithViewDirectives(component, directives) {\n      this.component = component;\n      this.directives = directives;\n    }\n    return NormalizedComponentWithViewDirectives;\n  })();\n  exports.NormalizedComponentWithViewDirectives = NormalizedComponentWithViewDirectives;\n  function assertComponent(meta) {\n    if (!meta.isComponent) {\n      throw new exceptions_1.BaseException(\"Could not compile '\" + meta.type.name + \"' because it is not a component.\");\n    }\n  }\n  function templateVariableName(type) {\n    return type.name + \"Template\";\n  }\n  function templateGetterName(type) {\n    return templateVariableName(type) + \"Getter\";\n  }\n  function templateModuleUrl(moduleUrl) {\n    var urlWithoutSuffix = moduleUrl.substring(0, moduleUrl.length - util_1.MODULE_SUFFIX.length);\n    return urlWithoutSuffix + \".template\" + util_1.MODULE_SUFFIX;\n  }\n  function addAll(source, target) {\n    for (var i = 0; i < source.length; i++) {\n      target.push(source[i]);\n    }\n  }\n  function codeGenComponentTemplateFactory(nestedCompType) {\n    return \"\" + source_module_1.moduleRef(templateModuleUrl(nestedCompType.type.moduleUrl)) + templateGetterName(nestedCompType.type);\n  }\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"angular2/src/core/application_common\", [\"angular2/src/common/forms\", \"angular2/src/core/di\", \"angular2/src/facade/lang\", \"angular2/src/core/dom/browser_adapter\", \"angular2/src/core/testability/browser_testability\", \"angular2/src/core/dom/dom_adapter\", \"angular2/src/compiler/xhr\", \"angular2/src/compiler/xhr_impl\", \"angular2/src/core/render/dom/events/event_manager\", \"angular2/src/core/render/dom/events/key_events\", \"angular2/src/core/render/dom/events/hammer_gestures\", \"angular2/src/core/testability/testability\", \"angular2/src/core/render/api\", \"angular2/src/core/render/render\", \"angular2/src/core/render/dom/shared_styles_host\", \"angular2/src/core/platform_bindings\", \"angular2/src/animate/animation_builder\", \"angular2/src/animate/browser_details\", \"angular2/src/core/profile/wtf_init\", \"angular2/src/core/application_ref\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  var forms_1 = require(\"angular2/src/common/forms\");\n  var di_1 = require(\"angular2/src/core/di\");\n  var lang_1 = require(\"angular2/src/facade/lang\");\n  var browser_adapter_1 = require(\"angular2/src/core/dom/browser_adapter\");\n  var browser_testability_1 = require(\"angular2/src/core/testability/browser_testability\");\n  var dom_adapter_1 = require(\"angular2/src/core/dom/dom_adapter\");\n  var xhr_1 = require(\"angular2/src/compiler/xhr\");\n  var xhr_impl_1 = require(\"angular2/src/compiler/xhr_impl\");\n  var event_manager_1 = require(\"angular2/src/core/render/dom/events/event_manager\");\n  var key_events_1 = require(\"angular2/src/core/render/dom/events/key_events\");\n  var hammer_gestures_1 = require(\"angular2/src/core/render/dom/events/hammer_gestures\");\n  var testability_1 = require(\"angular2/src/core/testability/testability\");\n  var api_1 = require(\"angular2/src/core/render/api\");\n  var render_1 = require(\"angular2/src/core/render/render\");\n  var shared_styles_host_1 = require(\"angular2/src/core/render/dom/shared_styles_host\");\n  var platform_bindings_1 = require(\"angular2/src/core/platform_bindings\");\n  var animation_builder_1 = require(\"angular2/src/animate/animation_builder\");\n  var browser_details_1 = require(\"angular2/src/animate/browser_details\");\n  var wtf_init_1 = require(\"angular2/src/core/profile/wtf_init\");\n  var application_ref_1 = require(\"angular2/src/core/application_ref\");\n  function applicationDomProviders() {\n    if (lang_1.isBlank(dom_adapter_1.DOM)) {\n      throw \"Must set a root DOM adapter first.\";\n    }\n    return [di_1.provide(render_1.DOCUMENT, {useValue: dom_adapter_1.DOM.defaultDoc()}), event_manager_1.EventManager, new di_1.Provider(event_manager_1.EVENT_MANAGER_PLUGINS, {\n      useClass: event_manager_1.DomEventsPlugin,\n      multi: true\n    }), new di_1.Provider(event_manager_1.EVENT_MANAGER_PLUGINS, {\n      useClass: key_events_1.KeyEventsPlugin,\n      multi: true\n    }), new di_1.Provider(event_manager_1.EVENT_MANAGER_PLUGINS, {\n      useClass: hammer_gestures_1.HammerGesturesPlugin,\n      multi: true\n    }), di_1.provide(render_1.DomRenderer, {useClass: render_1.DomRenderer_}), di_1.provide(api_1.Renderer, {useExisting: render_1.DomRenderer}), shared_styles_host_1.DomSharedStylesHost, di_1.provide(shared_styles_host_1.SharedStylesHost, {useExisting: shared_styles_host_1.DomSharedStylesHost}), platform_bindings_1.EXCEPTION_PROVIDER, di_1.provide(xhr_1.XHR, {useValue: new xhr_impl_1.XHRImpl()}), testability_1.Testability, browser_details_1.BrowserDetails, animation_builder_1.AnimationBuilder, forms_1.FORM_PROVIDERS];\n  }\n  exports.applicationDomProviders = applicationDomProviders;\n  function platform(providers) {\n    return application_ref_1.platformCommon(providers, function() {\n      browser_adapter_1.BrowserDomAdapter.makeCurrent();\n      wtf_init_1.wtfInit();\n      browser_testability_1.BrowserGetTestability.init();\n    });\n  }\n  exports.platform = platform;\n  function commonBootstrap(appComponentType, appProviders) {\n    if (appProviders === void 0) {\n      appProviders = null;\n    }\n    var p = platform();\n    var bindings = [application_ref_1.applicationCommonProviders(), applicationDomProviders()];\n    if (lang_1.isPresent(appProviders)) {\n      bindings.push(appProviders);\n    }\n    return p.application(bindings).bootstrap(appComponentType);\n  }\n  exports.commonBootstrap = commonBootstrap;\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"angular2/upgrade\", [\"angular2/src/upgrade/upgrade_adapter\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  var upgrade_adapter_1 = require(\"angular2/src/upgrade/upgrade_adapter\");\n  exports.UpgradeAdapter = upgrade_adapter_1.UpgradeAdapter;\n  exports.UpgradeAdapterRef = upgrade_adapter_1.UpgradeAdapterRef;\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"@reactivex/rxjs/dist/cjs/operators/combineLatest-static\", [\"@reactivex/rxjs/dist/cjs/observables/ArrayObservable\", \"@reactivex/rxjs/dist/cjs/operators/combineLatest-support\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  'use strict';\n  exports.__esModule = true;\n  exports['default'] = combineLatest;\n  function _interopRequireDefault(obj) {\n    return obj && obj.__esModule ? obj : {'default': obj};\n  }\n  var _observablesArrayObservable = require(\"@reactivex/rxjs/dist/cjs/observables/ArrayObservable\");\n  var _observablesArrayObservable2 = _interopRequireDefault(_observablesArrayObservable);\n  var _combineLatestSupport = require(\"@reactivex/rxjs/dist/cjs/operators/combineLatest-support\");\n  function combineLatest() {\n    var project = undefined,\n        scheduler = undefined;\n    for (var _len = arguments.length,\n        observables = Array(_len),\n        _key = 0; _key < _len; _key++) {\n      observables[_key] = arguments[_key];\n    }\n    if (typeof observables[observables.length - 1].schedule === 'function') {\n      scheduler = observables.pop();\n    }\n    if (typeof observables[observables.length - 1] === 'function') {\n      project = observables.pop();\n    }\n    return new _observablesArrayObservable2['default'](observables, scheduler).lift(new _combineLatestSupport.CombineLatestOperator(project));\n  }\n  module.exports = exports['default'];\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"@reactivex/rxjs/dist/cjs/observables/IntervalObservable\", [\"@reactivex/rxjs/dist/cjs/util/isNumeric\", \"@reactivex/rxjs/dist/cjs/Observable\", \"@reactivex/rxjs/dist/cjs/schedulers/nextTick\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  'use strict';\n  exports.__esModule = true;\n  function _interopRequireDefault(obj) {\n    return obj && obj.__esModule ? obj : {'default': obj};\n  }\n  function _classCallCheck(instance, Constructor) {\n    if (!(instance instanceof Constructor)) {\n      throw new TypeError('Cannot call a class as a function');\n    }\n  }\n  function _inherits(subClass, superClass) {\n    if (typeof superClass !== 'function' && superClass !== null) {\n      throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass);\n    }\n    subClass.prototype = Object.create(superClass && superClass.prototype, {constructor: {\n        value: subClass,\n        enumerable: false,\n        writable: true,\n        configurable: true\n      }});\n    if (superClass)\n      Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass;\n  }\n  var _utilIsNumeric = require(\"@reactivex/rxjs/dist/cjs/util/isNumeric\");\n  var _utilIsNumeric2 = _interopRequireDefault(_utilIsNumeric);\n  var _Observable2 = require(\"@reactivex/rxjs/dist/cjs/Observable\");\n  var _Observable3 = _interopRequireDefault(_Observable2);\n  var _schedulersNextTick = require(\"@reactivex/rxjs/dist/cjs/schedulers/nextTick\");\n  var _schedulersNextTick2 = _interopRequireDefault(_schedulersNextTick);\n  var IntervalObservable = (function(_Observable) {\n    _inherits(IntervalObservable, _Observable);\n    function IntervalObservable() {\n      var period = arguments.length <= 0 || arguments[0] === undefined ? 0 : arguments[0];\n      var scheduler = arguments.length <= 1 || arguments[1] === undefined ? _schedulersNextTick2['default'] : arguments[1];\n      _classCallCheck(this, IntervalObservable);\n      _Observable.call(this);\n      this.period = period;\n      this.scheduler = scheduler;\n      if (!_utilIsNumeric2['default'](period) || period < 0) {\n        this.period = 0;\n      }\n      if (!scheduler || typeof scheduler.schedule !== 'function') {\n        this.scheduler = _schedulersNextTick2['default'];\n      }\n    }\n    IntervalObservable.create = function create() {\n      var period = arguments.length <= 0 || arguments[0] === undefined ? 0 : arguments[0];\n      var scheduler = arguments.length <= 1 || arguments[1] === undefined ? _schedulersNextTick2['default'] : arguments[1];\n      return new IntervalObservable(period, scheduler);\n    };\n    IntervalObservable.dispatch = function dispatch(state) {\n      var index = state.index;\n      var subscriber = state.subscriber;\n      var period = state.period;\n      subscriber.next(index);\n      if (subscriber.isUnsubscribed) {\n        return ;\n      }\n      state.index += 1;\n      this.schedule(state, period);\n    };\n    IntervalObservable.prototype._subscribe = function _subscribe(subscriber) {\n      var index = 0;\n      var period = this.period;\n      var scheduler = this.scheduler;\n      subscriber.add(scheduler.schedule(IntervalObservable.dispatch, period, {\n        index: index,\n        subscriber: subscriber,\n        period: period\n      }));\n    };\n    return IntervalObservable;\n  })(_Observable3['default']);\n  exports['default'] = IntervalObservable;\n  module.exports = exports['default'];\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"angular2/src/core/di\", [\"angular2/src/core/di/metadata\", \"angular2/src/core/di/decorators\", \"angular2/src/core/di/forward_ref\", \"angular2/src/core/di/injector\", \"angular2/src/core/di/provider\", \"angular2/src/core/di/key\", \"angular2/src/core/di/exceptions\", \"angular2/src/core/di/opaque_token\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  function __export(m) {\n    for (var p in m)\n      if (!exports.hasOwnProperty(p))\n        exports[p] = m[p];\n  }\n  var metadata_1 = require(\"angular2/src/core/di/metadata\");\n  exports.InjectMetadata = metadata_1.InjectMetadata;\n  exports.OptionalMetadata = metadata_1.OptionalMetadata;\n  exports.InjectableMetadata = metadata_1.InjectableMetadata;\n  exports.SelfMetadata = metadata_1.SelfMetadata;\n  exports.HostMetadata = metadata_1.HostMetadata;\n  exports.SkipSelfMetadata = metadata_1.SkipSelfMetadata;\n  exports.DependencyMetadata = metadata_1.DependencyMetadata;\n  __export(require(\"angular2/src/core/di/decorators\"));\n  var forward_ref_1 = require(\"angular2/src/core/di/forward_ref\");\n  exports.forwardRef = forward_ref_1.forwardRef;\n  exports.resolveForwardRef = forward_ref_1.resolveForwardRef;\n  var injector_1 = require(\"angular2/src/core/di/injector\");\n  exports.Injector = injector_1.Injector;\n  var provider_1 = require(\"angular2/src/core/di/provider\");\n  exports.Binding = provider_1.Binding;\n  exports.ProviderBuilder = provider_1.ProviderBuilder;\n  exports.ResolvedFactory = provider_1.ResolvedFactory;\n  exports.Dependency = provider_1.Dependency;\n  exports.bind = provider_1.bind;\n  exports.Provider = provider_1.Provider;\n  exports.provide = provider_1.provide;\n  var key_1 = require(\"angular2/src/core/di/key\");\n  exports.Key = key_1.Key;\n  exports.TypeLiteral = key_1.TypeLiteral;\n  var exceptions_1 = require(\"angular2/src/core/di/exceptions\");\n  exports.NoProviderError = exceptions_1.NoProviderError;\n  exports.AbstractProviderError = exceptions_1.AbstractProviderError;\n  exports.CyclicDependencyError = exceptions_1.CyclicDependencyError;\n  exports.InstantiationError = exceptions_1.InstantiationError;\n  exports.InvalidProviderError = exceptions_1.InvalidProviderError;\n  exports.NoAnnotationError = exceptions_1.NoAnnotationError;\n  exports.OutOfBoundsError = exceptions_1.OutOfBoundsError;\n  var opaque_token_1 = require(\"angular2/src/core/di/opaque_token\");\n  exports.OpaqueToken = opaque_token_1.OpaqueToken;\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"angular2/src/core/change_detection/proto_change_detector\", [\"angular2/src/facade/lang\", \"angular2/src/facade/exceptions\", \"angular2/src/facade/collection\", \"angular2/src/core/change_detection/parser/ast\", \"angular2/src/core/change_detection/change_detection_util\", \"angular2/src/core/change_detection/dynamic_change_detector\", \"angular2/src/core/change_detection/directive_record\", \"angular2/src/core/change_detection/event_binding\", \"angular2/src/core/change_detection/coalesce\", \"angular2/src/core/change_detection/proto_record\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  var lang_1 = require(\"angular2/src/facade/lang\");\n  var exceptions_1 = require(\"angular2/src/facade/exceptions\");\n  var collection_1 = require(\"angular2/src/facade/collection\");\n  var ast_1 = require(\"angular2/src/core/change_detection/parser/ast\");\n  var change_detection_util_1 = require(\"angular2/src/core/change_detection/change_detection_util\");\n  var dynamic_change_detector_1 = require(\"angular2/src/core/change_detection/dynamic_change_detector\");\n  var directive_record_1 = require(\"angular2/src/core/change_detection/directive_record\");\n  var event_binding_1 = require(\"angular2/src/core/change_detection/event_binding\");\n  var coalesce_1 = require(\"angular2/src/core/change_detection/coalesce\");\n  var proto_record_1 = require(\"angular2/src/core/change_detection/proto_record\");\n  var DynamicProtoChangeDetector = (function() {\n    function DynamicProtoChangeDetector(_definition) {\n      this._definition = _definition;\n      this._propertyBindingRecords = createPropertyRecords(_definition);\n      this._eventBindingRecords = createEventRecords(_definition);\n      this._propertyBindingTargets = this._definition.bindingRecords.map(function(b) {\n        return b.target;\n      });\n      this._directiveIndices = this._definition.directiveRecords.map(function(d) {\n        return d.directiveIndex;\n      });\n    }\n    DynamicProtoChangeDetector.prototype.instantiate = function(dispatcher) {\n      return new dynamic_change_detector_1.DynamicChangeDetector(this._definition.id, dispatcher, this._propertyBindingRecords.length, this._propertyBindingTargets, this._directiveIndices, this._definition.strategy, this._propertyBindingRecords, this._eventBindingRecords, this._definition.directiveRecords, this._definition.genConfig);\n    };\n    return DynamicProtoChangeDetector;\n  })();\n  exports.DynamicProtoChangeDetector = DynamicProtoChangeDetector;\n  function createPropertyRecords(definition) {\n    var recordBuilder = new ProtoRecordBuilder();\n    collection_1.ListWrapper.forEachWithIndex(definition.bindingRecords, function(b, index) {\n      return recordBuilder.add(b, definition.variableNames, index);\n    });\n    return coalesce_1.coalesce(recordBuilder.records);\n  }\n  exports.createPropertyRecords = createPropertyRecords;\n  function createEventRecords(definition) {\n    var varNames = collection_1.ListWrapper.concat(['$event'], definition.variableNames);\n    return definition.eventRecords.map(function(er) {\n      var records = _ConvertAstIntoProtoRecords.create(er, varNames);\n      var dirIndex = er.implicitReceiver instanceof directive_record_1.DirectiveIndex ? er.implicitReceiver : null;\n      return new event_binding_1.EventBinding(er.target.name, er.target.elementIndex, dirIndex, records);\n    });\n  }\n  exports.createEventRecords = createEventRecords;\n  var ProtoRecordBuilder = (function() {\n    function ProtoRecordBuilder() {\n      this.records = [];\n    }\n    ProtoRecordBuilder.prototype.add = function(b, variableNames, bindingIndex) {\n      var oldLast = collection_1.ListWrapper.last(this.records);\n      if (lang_1.isPresent(oldLast) && oldLast.bindingRecord.directiveRecord == b.directiveRecord) {\n        oldLast.lastInDirective = false;\n      }\n      var numberOfRecordsBefore = this.records.length;\n      this._appendRecords(b, variableNames, bindingIndex);\n      var newLast = collection_1.ListWrapper.last(this.records);\n      if (lang_1.isPresent(newLast) && newLast !== oldLast) {\n        newLast.lastInBinding = true;\n        newLast.lastInDirective = true;\n        this._setArgumentToPureFunction(numberOfRecordsBefore);\n      }\n    };\n    ProtoRecordBuilder.prototype._setArgumentToPureFunction = function(startIndex) {\n      var _this = this;\n      for (var i = startIndex; i < this.records.length; ++i) {\n        var rec = this.records[i];\n        if (rec.isPureFunction()) {\n          rec.args.forEach(function(recordIndex) {\n            return _this.records[recordIndex - 1].argumentToPureFunction = true;\n          });\n        }\n        if (rec.mode === proto_record_1.RecordType.Pipe) {\n          rec.args.forEach(function(recordIndex) {\n            return _this.records[recordIndex - 1].argumentToPureFunction = true;\n          });\n          this.records[rec.contextIndex - 1].argumentToPureFunction = true;\n        }\n      }\n    };\n    ProtoRecordBuilder.prototype._appendRecords = function(b, variableNames, bindingIndex) {\n      if (b.isDirectiveLifecycle()) {\n        this.records.push(new proto_record_1.ProtoRecord(proto_record_1.RecordType.DirectiveLifecycle, b.lifecycleEvent, null, [], [], -1, null, this.records.length + 1, b, false, false, false, false, null));\n      } else {\n        _ConvertAstIntoProtoRecords.append(this.records, b, variableNames, bindingIndex);\n      }\n    };\n    return ProtoRecordBuilder;\n  })();\n  exports.ProtoRecordBuilder = ProtoRecordBuilder;\n  var _ConvertAstIntoProtoRecords = (function() {\n    function _ConvertAstIntoProtoRecords(_records, _bindingRecord, _variableNames, _bindingIndex) {\n      this._records = _records;\n      this._bindingRecord = _bindingRecord;\n      this._variableNames = _variableNames;\n      this._bindingIndex = _bindingIndex;\n    }\n    _ConvertAstIntoProtoRecords.append = function(records, b, variableNames, bindingIndex) {\n      var c = new _ConvertAstIntoProtoRecords(records, b, variableNames, bindingIndex);\n      b.ast.visit(c);\n    };\n    _ConvertAstIntoProtoRecords.create = function(b, variableNames) {\n      var rec = [];\n      _ConvertAstIntoProtoRecords.append(rec, b, variableNames, null);\n      rec[rec.length - 1].lastInBinding = true;\n      return rec;\n    };\n    _ConvertAstIntoProtoRecords.prototype.visitImplicitReceiver = function(ast) {\n      return this._bindingRecord.implicitReceiver;\n    };\n    _ConvertAstIntoProtoRecords.prototype.visitInterpolation = function(ast) {\n      var args = this._visitAll(ast.expressions);\n      return this._addRecord(proto_record_1.RecordType.Interpolate, \"interpolate\", _interpolationFn(ast.strings), args, ast.strings, 0);\n    };\n    _ConvertAstIntoProtoRecords.prototype.visitLiteralPrimitive = function(ast) {\n      return this._addRecord(proto_record_1.RecordType.Const, \"literal\", ast.value, [], null, 0);\n    };\n    _ConvertAstIntoProtoRecords.prototype.visitPropertyRead = function(ast) {\n      var receiver = ast.receiver.visit(this);\n      if (lang_1.isPresent(this._variableNames) && collection_1.ListWrapper.contains(this._variableNames, ast.name) && ast.receiver instanceof ast_1.ImplicitReceiver) {\n        return this._addRecord(proto_record_1.RecordType.Local, ast.name, ast.name, [], null, receiver);\n      } else {\n        return this._addRecord(proto_record_1.RecordType.PropertyRead, ast.name, ast.getter, [], null, receiver);\n      }\n    };\n    _ConvertAstIntoProtoRecords.prototype.visitPropertyWrite = function(ast) {\n      if (lang_1.isPresent(this._variableNames) && collection_1.ListWrapper.contains(this._variableNames, ast.name) && ast.receiver instanceof ast_1.ImplicitReceiver) {\n        throw new exceptions_1.BaseException(\"Cannot reassign a variable binding \" + ast.name);\n      } else {\n        var receiver = ast.receiver.visit(this);\n        var value = ast.value.visit(this);\n        return this._addRecord(proto_record_1.RecordType.PropertyWrite, ast.name, ast.setter, [value], null, receiver);\n      }\n    };\n    _ConvertAstIntoProtoRecords.prototype.visitKeyedWrite = function(ast) {\n      var obj = ast.obj.visit(this);\n      var key = ast.key.visit(this);\n      var value = ast.value.visit(this);\n      return this._addRecord(proto_record_1.RecordType.KeyedWrite, null, null, [key, value], null, obj);\n    };\n    _ConvertAstIntoProtoRecords.prototype.visitSafePropertyRead = function(ast) {\n      var receiver = ast.receiver.visit(this);\n      return this._addRecord(proto_record_1.RecordType.SafeProperty, ast.name, ast.getter, [], null, receiver);\n    };\n    _ConvertAstIntoProtoRecords.prototype.visitMethodCall = function(ast) {\n      var receiver = ast.receiver.visit(this);\n      var args = this._visitAll(ast.args);\n      if (lang_1.isPresent(this._variableNames) && collection_1.ListWrapper.contains(this._variableNames, ast.name)) {\n        var target = this._addRecord(proto_record_1.RecordType.Local, ast.name, ast.name, [], null, receiver);\n        return this._addRecord(proto_record_1.RecordType.InvokeClosure, \"closure\", null, args, null, target);\n      } else {\n        return this._addRecord(proto_record_1.RecordType.InvokeMethod, ast.name, ast.fn, args, null, receiver);\n      }\n    };\n    _ConvertAstIntoProtoRecords.prototype.visitSafeMethodCall = function(ast) {\n      var receiver = ast.receiver.visit(this);\n      var args = this._visitAll(ast.args);\n      return this._addRecord(proto_record_1.RecordType.SafeMethodInvoke, ast.name, ast.fn, args, null, receiver);\n    };\n    _ConvertAstIntoProtoRecords.prototype.visitFunctionCall = function(ast) {\n      var target = ast.target.visit(this);\n      var args = this._visitAll(ast.args);\n      return this._addRecord(proto_record_1.RecordType.InvokeClosure, \"closure\", null, args, null, target);\n    };\n    _ConvertAstIntoProtoRecords.prototype.visitLiteralArray = function(ast) {\n      var primitiveName = \"arrayFn\" + ast.expressions.length;\n      return this._addRecord(proto_record_1.RecordType.CollectionLiteral, primitiveName, _arrayFn(ast.expressions.length), this._visitAll(ast.expressions), null, 0);\n    };\n    _ConvertAstIntoProtoRecords.prototype.visitLiteralMap = function(ast) {\n      return this._addRecord(proto_record_1.RecordType.CollectionLiteral, _mapPrimitiveName(ast.keys), change_detection_util_1.ChangeDetectionUtil.mapFn(ast.keys), this._visitAll(ast.values), null, 0);\n    };\n    _ConvertAstIntoProtoRecords.prototype.visitBinary = function(ast) {\n      var left = ast.left.visit(this);\n      switch (ast.operation) {\n        case '&&':\n          var branchEnd = [null];\n          this._addRecord(proto_record_1.RecordType.SkipRecordsIfNot, \"SkipRecordsIfNot\", null, [], branchEnd, left);\n          var right = ast.right.visit(this);\n          branchEnd[0] = right;\n          return this._addRecord(proto_record_1.RecordType.PrimitiveOp, \"cond\", change_detection_util_1.ChangeDetectionUtil.cond, [left, right, left], null, 0);\n        case '||':\n          var branchEnd = [null];\n          this._addRecord(proto_record_1.RecordType.SkipRecordsIf, \"SkipRecordsIf\", null, [], branchEnd, left);\n          var right = ast.right.visit(this);\n          branchEnd[0] = right;\n          return this._addRecord(proto_record_1.RecordType.PrimitiveOp, \"cond\", change_detection_util_1.ChangeDetectionUtil.cond, [left, left, right], null, 0);\n        default:\n          var right = ast.right.visit(this);\n          return this._addRecord(proto_record_1.RecordType.PrimitiveOp, _operationToPrimitiveName(ast.operation), _operationToFunction(ast.operation), [left, right], null, 0);\n      }\n    };\n    _ConvertAstIntoProtoRecords.prototype.visitPrefixNot = function(ast) {\n      var exp = ast.expression.visit(this);\n      return this._addRecord(proto_record_1.RecordType.PrimitiveOp, \"operation_negate\", change_detection_util_1.ChangeDetectionUtil.operation_negate, [exp], null, 0);\n    };\n    _ConvertAstIntoProtoRecords.prototype.visitConditional = function(ast) {\n      var condition = ast.condition.visit(this);\n      var startOfFalseBranch = [null];\n      var endOfFalseBranch = [null];\n      this._addRecord(proto_record_1.RecordType.SkipRecordsIfNot, \"SkipRecordsIfNot\", null, [], startOfFalseBranch, condition);\n      var whenTrue = ast.trueExp.visit(this);\n      var skip = this._addRecord(proto_record_1.RecordType.SkipRecords, \"SkipRecords\", null, [], endOfFalseBranch, 0);\n      var whenFalse = ast.falseExp.visit(this);\n      startOfFalseBranch[0] = skip;\n      endOfFalseBranch[0] = whenFalse;\n      return this._addRecord(proto_record_1.RecordType.PrimitiveOp, \"cond\", change_detection_util_1.ChangeDetectionUtil.cond, [condition, whenTrue, whenFalse], null, 0);\n    };\n    _ConvertAstIntoProtoRecords.prototype.visitPipe = function(ast) {\n      var value = ast.exp.visit(this);\n      var args = this._visitAll(ast.args);\n      return this._addRecord(proto_record_1.RecordType.Pipe, ast.name, ast.name, args, null, value);\n    };\n    _ConvertAstIntoProtoRecords.prototype.visitKeyedRead = function(ast) {\n      var obj = ast.obj.visit(this);\n      var key = ast.key.visit(this);\n      return this._addRecord(proto_record_1.RecordType.KeyedRead, \"keyedAccess\", change_detection_util_1.ChangeDetectionUtil.keyedAccess, [key], null, obj);\n    };\n    _ConvertAstIntoProtoRecords.prototype.visitChain = function(ast) {\n      var _this = this;\n      var args = ast.expressions.map(function(e) {\n        return e.visit(_this);\n      });\n      return this._addRecord(proto_record_1.RecordType.Chain, \"chain\", null, args, null, 0);\n    };\n    _ConvertAstIntoProtoRecords.prototype._visitAll = function(asts) {\n      var res = collection_1.ListWrapper.createFixedSize(asts.length);\n      for (var i = 0; i < asts.length; ++i) {\n        res[i] = asts[i].visit(this);\n      }\n      return res;\n    };\n    _ConvertAstIntoProtoRecords.prototype._addRecord = function(type, name, funcOrValue, args, fixedArgs, context) {\n      var selfIndex = this._records.length + 1;\n      if (context instanceof directive_record_1.DirectiveIndex) {\n        this._records.push(new proto_record_1.ProtoRecord(type, name, funcOrValue, args, fixedArgs, -1, context, selfIndex, this._bindingRecord, false, false, false, false, this._bindingIndex));\n      } else {\n        this._records.push(new proto_record_1.ProtoRecord(type, name, funcOrValue, args, fixedArgs, context, null, selfIndex, this._bindingRecord, false, false, false, false, this._bindingIndex));\n      }\n      return selfIndex;\n    };\n    return _ConvertAstIntoProtoRecords;\n  })();\n  function _arrayFn(length) {\n    switch (length) {\n      case 0:\n        return change_detection_util_1.ChangeDetectionUtil.arrayFn0;\n      case 1:\n        return change_detection_util_1.ChangeDetectionUtil.arrayFn1;\n      case 2:\n        return change_detection_util_1.ChangeDetectionUtil.arrayFn2;\n      case 3:\n        return change_detection_util_1.ChangeDetectionUtil.arrayFn3;\n      case 4:\n        return change_detection_util_1.ChangeDetectionUtil.arrayFn4;\n      case 5:\n        return change_detection_util_1.ChangeDetectionUtil.arrayFn5;\n      case 6:\n        return change_detection_util_1.ChangeDetectionUtil.arrayFn6;\n      case 7:\n        return change_detection_util_1.ChangeDetectionUtil.arrayFn7;\n      case 8:\n        return change_detection_util_1.ChangeDetectionUtil.arrayFn8;\n      case 9:\n        return change_detection_util_1.ChangeDetectionUtil.arrayFn9;\n      default:\n        throw new exceptions_1.BaseException(\"Does not support literal maps with more than 9 elements\");\n    }\n  }\n  function _mapPrimitiveName(keys) {\n    var stringifiedKeys = keys.map(function(k) {\n      return lang_1.isString(k) ? \"\\\"\" + k + \"\\\"\" : \"\" + k;\n    }).join(', ');\n    return \"mapFn([\" + stringifiedKeys + \"])\";\n  }\n  function _operationToPrimitiveName(operation) {\n    switch (operation) {\n      case '+':\n        return \"operation_add\";\n      case '-':\n        return \"operation_subtract\";\n      case '*':\n        return \"operation_multiply\";\n      case '/':\n        return \"operation_divide\";\n      case '%':\n        return \"operation_remainder\";\n      case '==':\n        return \"operation_equals\";\n      case '!=':\n        return \"operation_not_equals\";\n      case '===':\n        return \"operation_identical\";\n      case '!==':\n        return \"operation_not_identical\";\n      case '<':\n        return \"operation_less_then\";\n      case '>':\n        return \"operation_greater_then\";\n      case '<=':\n        return \"operation_less_or_equals_then\";\n      case '>=':\n        return \"operation_greater_or_equals_then\";\n      default:\n        throw new exceptions_1.BaseException(\"Unsupported operation \" + operation);\n    }\n  }\n  function _operationToFunction(operation) {\n    switch (operation) {\n      case '+':\n        return change_detection_util_1.ChangeDetectionUtil.operation_add;\n      case '-':\n        return change_detection_util_1.ChangeDetectionUtil.operation_subtract;\n      case '*':\n        return change_detection_util_1.ChangeDetectionUtil.operation_multiply;\n      case '/':\n        return change_detection_util_1.ChangeDetectionUtil.operation_divide;\n      case '%':\n        return change_detection_util_1.ChangeDetectionUtil.operation_remainder;\n      case '==':\n        return change_detection_util_1.ChangeDetectionUtil.operation_equals;\n      case '!=':\n        return change_detection_util_1.ChangeDetectionUtil.operation_not_equals;\n      case '===':\n        return change_detection_util_1.ChangeDetectionUtil.operation_identical;\n      case '!==':\n        return change_detection_util_1.ChangeDetectionUtil.operation_not_identical;\n      case '<':\n        return change_detection_util_1.ChangeDetectionUtil.operation_less_then;\n      case '>':\n        return change_detection_util_1.ChangeDetectionUtil.operation_greater_then;\n      case '<=':\n        return change_detection_util_1.ChangeDetectionUtil.operation_less_or_equals_then;\n      case '>=':\n        return change_detection_util_1.ChangeDetectionUtil.operation_greater_or_equals_then;\n      default:\n        throw new exceptions_1.BaseException(\"Unsupported operation \" + operation);\n    }\n  }\n  function s(v) {\n    return lang_1.isPresent(v) ? \"\" + v : '';\n  }\n  function _interpolationFn(strings) {\n    var length = strings.length;\n    var c0 = length > 0 ? strings[0] : null;\n    var c1 = length > 1 ? strings[1] : null;\n    var c2 = length > 2 ? strings[2] : null;\n    var c3 = length > 3 ? strings[3] : null;\n    var c4 = length > 4 ? strings[4] : null;\n    var c5 = length > 5 ? strings[5] : null;\n    var c6 = length > 6 ? strings[6] : null;\n    var c7 = length > 7 ? strings[7] : null;\n    var c8 = length > 8 ? strings[8] : null;\n    var c9 = length > 9 ? strings[9] : null;\n    switch (length - 1) {\n      case 1:\n        return function(a1) {\n          return c0 + s(a1) + c1;\n        };\n      case 2:\n        return function(a1, a2) {\n          return c0 + s(a1) + c1 + s(a2) + c2;\n        };\n      case 3:\n        return function(a1, a2, a3) {\n          return c0 + s(a1) + c1 + s(a2) + c2 + s(a3) + c3;\n        };\n      case 4:\n        return function(a1, a2, a3, a4) {\n          return c0 + s(a1) + c1 + s(a2) + c2 + s(a3) + c3 + s(a4) + c4;\n        };\n      case 5:\n        return function(a1, a2, a3, a4, a5) {\n          return c0 + s(a1) + c1 + s(a2) + c2 + s(a3) + c3 + s(a4) + c4 + s(a5) + c5;\n        };\n      case 6:\n        return function(a1, a2, a3, a4, a5, a6) {\n          return c0 + s(a1) + c1 + s(a2) + c2 + s(a3) + c3 + s(a4) + c4 + s(a5) + c5 + s(a6) + c6;\n        };\n      case 7:\n        return function(a1, a2, a3, a4, a5, a6, a7) {\n          return c0 + s(a1) + c1 + s(a2) + c2 + s(a3) + c3 + s(a4) + c4 + s(a5) + c5 + s(a6) + c6 + s(a7) + c7;\n        };\n      case 8:\n        return function(a1, a2, a3, a4, a5, a6, a7, a8) {\n          return c0 + s(a1) + c1 + s(a2) + c2 + s(a3) + c3 + s(a4) + c4 + s(a5) + c5 + s(a6) + c6 + s(a7) + c7 + s(a8) + c8;\n        };\n      case 9:\n        return function(a1, a2, a3, a4, a5, a6, a7, a8, a9) {\n          return c0 + s(a1) + c1 + s(a2) + c2 + s(a3) + c3 + s(a4) + c4 + s(a5) + c5 + s(a6) + c6 + s(a7) + c7 + s(a8) + c8 + s(a9) + c9;\n        };\n      default:\n        throw new exceptions_1.BaseException(\"Does not support more than 9 expressions\");\n    }\n  }\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"angular2/src/core/render/dom/dom_renderer\", [\"angular2/src/core/di\", \"angular2/src/animate/animation_builder\", \"angular2/src/facade/lang\", \"angular2/src/facade/exceptions\", \"angular2/src/core/dom/dom_adapter\", \"angular2/src/core/render/dom/events/event_manager\", \"angular2/src/core/render/dom/shared_styles_host\", \"angular2/src/core/profile/profile\", \"angular2/src/core/render/api\", \"angular2/src/core/render/dom/dom_tokens\", \"angular2/src/core/render/view_factory\", \"angular2/src/core/render/view\", \"angular2/src/core/render/dom/util\", \"angular2/src/core/metadata\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  var __extends = (this && this.__extends) || function(d, b) {\n    for (var p in b)\n      if (b.hasOwnProperty(p))\n        d[p] = b[p];\n    function __() {\n      this.constructor = d;\n    }\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n  };\n  var __decorate = (this && this.__decorate) || function(decorators, target, key, desc) {\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\")\n      return Reflect.decorate(decorators, target, key, desc);\n    switch (arguments.length) {\n      case 2:\n        return decorators.reduceRight(function(o, d) {\n          return (d && d(o)) || o;\n        }, target);\n      case 3:\n        return decorators.reduceRight(function(o, d) {\n          return (d && d(target, key)), void 0;\n        }, void 0);\n      case 4:\n        return decorators.reduceRight(function(o, d) {\n          return (d && d(target, key, o)) || o;\n        }, desc);\n    }\n  };\n  var __metadata = (this && this.__metadata) || function(k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\")\n      return Reflect.metadata(k, v);\n  };\n  var __param = (this && this.__param) || function(paramIndex, decorator) {\n    return function(target, key) {\n      decorator(target, key, paramIndex);\n    };\n  };\n  var di_1 = require(\"angular2/src/core/di\");\n  var animation_builder_1 = require(\"angular2/src/animate/animation_builder\");\n  var lang_1 = require(\"angular2/src/facade/lang\");\n  var exceptions_1 = require(\"angular2/src/facade/exceptions\");\n  var dom_adapter_1 = require(\"angular2/src/core/dom/dom_adapter\");\n  var event_manager_1 = require(\"angular2/src/core/render/dom/events/event_manager\");\n  var shared_styles_host_1 = require(\"angular2/src/core/render/dom/shared_styles_host\");\n  var profile_1 = require(\"angular2/src/core/profile/profile\");\n  var api_1 = require(\"angular2/src/core/render/api\");\n  var dom_tokens_1 = require(\"angular2/src/core/render/dom/dom_tokens\");\n  var view_factory_1 = require(\"angular2/src/core/render/view_factory\");\n  var view_1 = require(\"angular2/src/core/render/view\");\n  var util_1 = require(\"angular2/src/core/render/dom/util\");\n  var metadata_1 = require(\"angular2/src/core/metadata\");\n  var XLINK_NAMESPACE = 'http://www.w3.org/1999/xlink';\n  var SVG_NAMESPACE = 'http://www.w3.org/2000/svg';\n  var SVG_ELEMENT_NAMES = lang_1.CONST_EXPR({\n    'altGlyph': true,\n    'altGlyphDef': true,\n    'altGlyphItem': true,\n    'animate': true,\n    'animateColor': true,\n    'animateMotion': true,\n    'animateTransform': true,\n    'circle': true,\n    'clipPath': true,\n    'color-profile': true,\n    'cursor': true,\n    'defs': true,\n    'desc': true,\n    'ellipse': true,\n    'feBlend': true,\n    'feColorMatrix': true,\n    'feComponentTransfer': true,\n    'feComposite': true,\n    'feConvolveMatrix': true,\n    'feDiffuseLighting': true,\n    'feDisplacementMap': true,\n    'feDistantLight': true,\n    'feFlood': true,\n    'feFuncA': true,\n    'feFuncB': true,\n    'feFuncG': true,\n    'feFuncR': true,\n    'feGaussianBlur': true,\n    'feImage': true,\n    'feMerge': true,\n    'feMergeNode': true,\n    'feMorphology': true,\n    'feOffset': true,\n    'fePointLight': true,\n    'feSpecularLighting': true,\n    'feSpotLight': true,\n    'feTile': true,\n    'feTurbulence': true,\n    'filter': true,\n    'font': true,\n    'font-face': true,\n    'font-face-format': true,\n    'font-face-name': true,\n    'font-face-src': true,\n    'font-face-uri': true,\n    'foreignObject': true,\n    'g': true,\n    'glyphRef': true,\n    'hkern': true,\n    'image': true,\n    'line': true,\n    'linearGradient': true,\n    'marker': true,\n    'mask': true,\n    'metadata': true,\n    'missing-glyph': true,\n    'mpath': true,\n    'path': true,\n    'pattern': true,\n    'polygon': true,\n    'polyline': true,\n    'radialGradient': true,\n    'rect': true,\n    'set': true,\n    'stop': true,\n    'style': true,\n    'svg': true,\n    'switch': true,\n    'symbol': true,\n    'text': true,\n    'textPath': true,\n    'title': true,\n    'tref': true,\n    'tspan': true,\n    'use': true,\n    'view': true,\n    'vkern': true\n  });\n  var SVG_ATTR_NAMESPACES = lang_1.CONST_EXPR({\n    'href': XLINK_NAMESPACE,\n    'xlink:href': XLINK_NAMESPACE\n  });\n  var DomRenderer = (function(_super) {\n    __extends(DomRenderer, _super);\n    function DomRenderer() {\n      _super.apply(this, arguments);\n    }\n    DomRenderer.prototype.getNativeElementSync = function(location) {\n      return resolveInternalDomView(location.renderView).boundElements[location.boundElementIndex];\n    };\n    DomRenderer.prototype.getRootNodes = function(fragment) {\n      return resolveInternalDomFragment(fragment);\n    };\n    DomRenderer.prototype.attachFragmentAfterFragment = function(previousFragmentRef, fragmentRef) {\n      var previousFragmentNodes = resolveInternalDomFragment(previousFragmentRef);\n      if (previousFragmentNodes.length > 0) {\n        var sibling = previousFragmentNodes[previousFragmentNodes.length - 1];\n        var nodes = resolveInternalDomFragment(fragmentRef);\n        moveNodesAfterSibling(sibling, nodes);\n        this.animateNodesEnter(nodes);\n      }\n    };\n    DomRenderer.prototype.animateNodesEnter = function(nodes) {\n      for (var i = 0; i < nodes.length; i++)\n        this.animateNodeEnter(nodes[i]);\n    };\n    DomRenderer.prototype.attachFragmentAfterElement = function(elementRef, fragmentRef) {\n      var parentView = resolveInternalDomView(elementRef.renderView);\n      var element = parentView.boundElements[elementRef.boundElementIndex];\n      var nodes = resolveInternalDomFragment(fragmentRef);\n      moveNodesAfterSibling(element, nodes);\n      this.animateNodesEnter(nodes);\n    };\n    DomRenderer.prototype.hydrateView = function(viewRef) {\n      resolveInternalDomView(viewRef).hydrate();\n    };\n    DomRenderer.prototype.dehydrateView = function(viewRef) {\n      resolveInternalDomView(viewRef).dehydrate();\n    };\n    DomRenderer.prototype.createTemplateAnchor = function(attrNameAndValues) {\n      return this.createElement('script', attrNameAndValues);\n    };\n    DomRenderer.prototype.createText = function(value) {\n      return dom_adapter_1.DOM.createTextNode(lang_1.isPresent(value) ? value : '');\n    };\n    DomRenderer.prototype.appendChild = function(parent, child) {\n      dom_adapter_1.DOM.appendChild(parent, child);\n    };\n    DomRenderer.prototype.setElementProperty = function(location, propertyName, propertyValue) {\n      var view = resolveInternalDomView(location.renderView);\n      dom_adapter_1.DOM.setProperty(view.boundElements[location.boundElementIndex], propertyName, propertyValue);\n    };\n    DomRenderer.prototype.setElementAttribute = function(location, attributeName, attributeValue) {\n      var view = resolveInternalDomView(location.renderView);\n      var element = view.boundElements[location.boundElementIndex];\n      var dashCasedAttributeName = util_1.camelCaseToDashCase(attributeName);\n      if (lang_1.isPresent(attributeValue)) {\n        dom_adapter_1.DOM.setAttribute(element, dashCasedAttributeName, lang_1.stringify(attributeValue));\n      } else {\n        dom_adapter_1.DOM.removeAttribute(element, dashCasedAttributeName);\n      }\n    };\n    DomRenderer.prototype.setElementClass = function(location, className, isAdd) {\n      var view = resolveInternalDomView(location.renderView);\n      var element = view.boundElements[location.boundElementIndex];\n      if (isAdd) {\n        dom_adapter_1.DOM.addClass(element, className);\n      } else {\n        dom_adapter_1.DOM.removeClass(element, className);\n      }\n    };\n    DomRenderer.prototype.setElementStyle = function(location, styleName, styleValue) {\n      var view = resolveInternalDomView(location.renderView);\n      var element = view.boundElements[location.boundElementIndex];\n      var dashCasedStyleName = util_1.camelCaseToDashCase(styleName);\n      if (lang_1.isPresent(styleValue)) {\n        dom_adapter_1.DOM.setStyle(element, dashCasedStyleName, lang_1.stringify(styleValue));\n      } else {\n        dom_adapter_1.DOM.removeStyle(element, dashCasedStyleName);\n      }\n    };\n    DomRenderer.prototype.invokeElementMethod = function(location, methodName, args) {\n      var view = resolveInternalDomView(location.renderView);\n      var element = view.boundElements[location.boundElementIndex];\n      dom_adapter_1.DOM.invoke(element, methodName, args);\n    };\n    DomRenderer.prototype.setText = function(viewRef, textNodeIndex, text) {\n      var view = resolveInternalDomView(viewRef);\n      dom_adapter_1.DOM.setText(view.boundTextNodes[textNodeIndex], text);\n    };\n    DomRenderer.prototype.setEventDispatcher = function(viewRef, dispatcher) {\n      resolveInternalDomView(viewRef).setEventDispatcher(dispatcher);\n    };\n    return DomRenderer;\n  })(api_1.Renderer);\n  exports.DomRenderer = DomRenderer;\n  var DomRenderer_ = (function(_super) {\n    __extends(DomRenderer_, _super);\n    function DomRenderer_(_eventManager, _domSharedStylesHost, _animate, document) {\n      _super.call(this);\n      this._eventManager = _eventManager;\n      this._domSharedStylesHost = _domSharedStylesHost;\n      this._animate = _animate;\n      this._componentTpls = new Map();\n      this._createRootHostViewScope = profile_1.wtfCreateScope('DomRenderer#createRootHostView()');\n      this._createViewScope = profile_1.wtfCreateScope('DomRenderer#createView()');\n      this._detachFragmentScope = profile_1.wtfCreateScope('DomRenderer#detachFragment()');\n      this._document = document;\n    }\n    DomRenderer_.prototype.registerComponentTemplate = function(template) {\n      this._componentTpls.set(template.id, template);\n      if (template.encapsulation !== metadata_1.ViewEncapsulation.Native) {\n        var encapsulatedStyles = view_factory_1.encapsulateStyles(template);\n        this._domSharedStylesHost.addStyles(encapsulatedStyles);\n      }\n    };\n    DomRenderer_.prototype.createProtoView = function(componentTemplateId, cmds) {\n      return new view_1.DefaultProtoViewRef(this._componentTpls.get(componentTemplateId), cmds);\n    };\n    DomRenderer_.prototype.resolveComponentTemplate = function(templateId) {\n      return this._componentTpls.get(templateId);\n    };\n    DomRenderer_.prototype.createRootHostView = function(hostProtoViewRef, fragmentCount, hostElementSelector) {\n      var s = this._createRootHostViewScope();\n      var element = dom_adapter_1.DOM.querySelector(this._document, hostElementSelector);\n      if (lang_1.isBlank(element)) {\n        profile_1.wtfLeave(s);\n        throw new exceptions_1.BaseException(\"The selector \\\"\" + hostElementSelector + \"\\\" did not match any elements\");\n      }\n      return profile_1.wtfLeave(s, this._createView(hostProtoViewRef, element));\n    };\n    DomRenderer_.prototype.createView = function(protoViewRef, fragmentCount) {\n      var s = this._createViewScope();\n      return profile_1.wtfLeave(s, this._createView(protoViewRef, null));\n    };\n    DomRenderer_.prototype._createView = function(protoViewRef, inplaceElement) {\n      var dpvr = protoViewRef;\n      var view = view_factory_1.createRenderView(dpvr.template, dpvr.cmds, inplaceElement, this);\n      var sdRoots = view.nativeShadowRoots;\n      for (var i = 0; i < sdRoots.length; i++) {\n        this._domSharedStylesHost.addHost(sdRoots[i]);\n      }\n      return new api_1.RenderViewWithFragments(view, view.fragments);\n    };\n    DomRenderer_.prototype.destroyView = function(viewRef) {\n      var view = viewRef;\n      var sdRoots = view.nativeShadowRoots;\n      for (var i = 0; i < sdRoots.length; i++) {\n        this._domSharedStylesHost.removeHost(sdRoots[i]);\n      }\n    };\n    DomRenderer_.prototype.animateNodeEnter = function(node) {\n      if (dom_adapter_1.DOM.isElementNode(node) && dom_adapter_1.DOM.hasClass(node, 'ng-animate')) {\n        dom_adapter_1.DOM.addClass(node, 'ng-enter');\n        this._animate.css().addAnimationClass('ng-enter-active').start(node).onComplete(function() {\n          dom_adapter_1.DOM.removeClass(node, 'ng-enter');\n        });\n      }\n    };\n    DomRenderer_.prototype.animateNodeLeave = function(node) {\n      if (dom_adapter_1.DOM.isElementNode(node) && dom_adapter_1.DOM.hasClass(node, 'ng-animate')) {\n        dom_adapter_1.DOM.addClass(node, 'ng-leave');\n        this._animate.css().addAnimationClass('ng-leave-active').start(node).onComplete(function() {\n          dom_adapter_1.DOM.removeClass(node, 'ng-leave');\n          dom_adapter_1.DOM.remove(node);\n        });\n      } else {\n        dom_adapter_1.DOM.remove(node);\n      }\n    };\n    DomRenderer_.prototype.detachFragment = function(fragmentRef) {\n      var s = this._detachFragmentScope();\n      var fragmentNodes = resolveInternalDomFragment(fragmentRef);\n      for (var i = 0; i < fragmentNodes.length; i++) {\n        this.animateNodeLeave(fragmentNodes[i]);\n      }\n      profile_1.wtfLeave(s);\n    };\n    DomRenderer_.prototype.createElement = function(name, attrNameAndValues) {\n      var isSvg = SVG_ELEMENT_NAMES[name] == true;\n      var el = isSvg ? dom_adapter_1.DOM.createElementNS(SVG_NAMESPACE, name) : dom_adapter_1.DOM.createElement(name);\n      this._setAttributes(el, attrNameAndValues, isSvg);\n      return el;\n    };\n    DomRenderer_.prototype.mergeElement = function(existing, attrNameAndValues) {\n      dom_adapter_1.DOM.clearNodes(existing);\n      this._setAttributes(existing, attrNameAndValues, false);\n    };\n    DomRenderer_.prototype._setAttributes = function(node, attrNameAndValues, isSvg) {\n      for (var attrIdx = 0; attrIdx < attrNameAndValues.length; attrIdx += 2) {\n        var attrName = attrNameAndValues[attrIdx];\n        var attrValue = attrNameAndValues[attrIdx + 1];\n        var attrNs = isSvg ? SVG_ATTR_NAMESPACES[attrName] : null;\n        if (lang_1.isPresent(attrNs)) {\n          dom_adapter_1.DOM.setAttributeNS(node, XLINK_NAMESPACE, attrName, attrValue);\n        } else {\n          dom_adapter_1.DOM.setAttribute(node, attrName, attrValue);\n        }\n      }\n    };\n    DomRenderer_.prototype.createRootContentInsertionPoint = function() {\n      return dom_adapter_1.DOM.createComment('root-content-insertion-point');\n    };\n    DomRenderer_.prototype.createShadowRoot = function(host, templateId) {\n      var sr = dom_adapter_1.DOM.createShadowRoot(host);\n      var tpl = this._componentTpls.get(templateId);\n      for (var i = 0; i < tpl.styles.length; i++) {\n        dom_adapter_1.DOM.appendChild(sr, dom_adapter_1.DOM.createStyleElement(tpl.styles[i]));\n      }\n      return sr;\n    };\n    DomRenderer_.prototype.on = function(element, eventName, callback) {\n      this._eventManager.addEventListener(element, eventName, decoratePreventDefault(callback));\n    };\n    DomRenderer_.prototype.globalOn = function(target, eventName, callback) {\n      return this._eventManager.addGlobalEventListener(target, eventName, decoratePreventDefault(callback));\n    };\n    DomRenderer_ = __decorate([di_1.Injectable(), __param(3, di_1.Inject(dom_tokens_1.DOCUMENT)), __metadata('design:paramtypes', [event_manager_1.EventManager, shared_styles_host_1.DomSharedStylesHost, animation_builder_1.AnimationBuilder, Object])], DomRenderer_);\n    return DomRenderer_;\n  })(DomRenderer);\n  exports.DomRenderer_ = DomRenderer_;\n  function resolveInternalDomView(viewRef) {\n    return viewRef;\n  }\n  function resolveInternalDomFragment(fragmentRef) {\n    return fragmentRef.nodes;\n  }\n  function moveNodesAfterSibling(sibling, nodes) {\n    // https://github.com/angular/angular/issues/5077\n    var cs = sibling;\n    if (nodes.length > 0 && lang_1.isPresent(dom_adapter_1.DOM.parentElement(sibling))) {\n      for (var i = 0; i < nodes.length; i++) {\n        dom_adapter_1.DOM.insertAfter(cs, nodes[i]);\n        cs = nodes[i];\n      }\n    }\n  }\n  function moveNodesAfterSibling_IF_YOU_WANT_DAT_FLICKER(sibling, nodes) {\n    // https://github.com/angular/angular/issues/5077\n    var cs = sibling;\n    if (nodes.length > 0 && lang_1.isPresent(dom_adapter_1.DOM.parentElement(sibling))) {\n      for (var i = 0; i < nodes.length; i++) {\n        dom_adapter_1.DOM.insertAfter(cs, nodes[i]);\n        cs = nodes[i];\n      }\n    }\n  }\n  function moveNodesAfterSibling_IF_YOU_WANT_DAT_FLICKER(sibling, nodes) {\n    // https://github.com/angular/angular/issues/5077\n    var cs = sibling;\n    if (nodes.length > 0 && lang_1.isPresent(dom_adapter_1.DOM.parentElement(sibling))) {\n      for (var i = 0; i < nodes.length; i++) {\n        dom_adapter_1.DOM.insertAfter(cs, nodes[i]);\n        cs = nodes[i];\n      }\n    }\n  }\n  function moveNodesAfterSibling_IF_YOU_WANT_DAT_FLICKER(sibling, nodes) {\n    // https://github.com/angular/angular/issues/5077\n    var cs = sibling;\n    if (nodes.length > 0 && lang_1.isPresent(dom_adapter_1.DOM.parentElement(sibling))) {\n      for (var i = 0; i < nodes.length; i++) {\n        dom_adapter_1.DOM.insertAfter(cs, nodes[i]);\n        cs = nodes[i];\n      }\n    }\n  }\n  function moveNodesAfterSibling_IF_YOU_WANT_DAT_FLICKER(sibling, nodes) {\n    var sib = sibling;\n\n    if (nodes.length > 0 && lang_1.isPresent(dom_adapter_1.DOM.parentElement(sibling))) {\n      for (var i = 0; i < nodes.length; i++) {\n        dom_adapter_1.DOM.insertAfter(sib, nodes[i]);\n        sib = nodes[i];\n      }\n    }\n  }\n  function decoratePreventDefault(eventHandler) {\n    return function(event) {\n      var allowDefaultBehavior = eventHandler(event);\n      if (!allowDefaultBehavior) {\n        dom_adapter_1.DOM.preventDefault(event);\n      }\n    };\n  }\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"angular2/src/compiler/runtime_compiler\", [\"angular2/src/core/linker/compiler\", \"angular2/src/core/linker/proto_view_factory\", \"angular2/src/compiler/template_compiler\", \"angular2/src/core/di\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  var __extends = (this && this.__extends) || function(d, b) {\n    for (var p in b)\n      if (b.hasOwnProperty(p))\n        d[p] = b[p];\n    function __() {\n      this.constructor = d;\n    }\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n  };\n  var __decorate = (this && this.__decorate) || function(decorators, target, key, desc) {\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\")\n      return Reflect.decorate(decorators, target, key, desc);\n    switch (arguments.length) {\n      case 2:\n        return decorators.reduceRight(function(o, d) {\n          return (d && d(o)) || o;\n        }, target);\n      case 3:\n        return decorators.reduceRight(function(o, d) {\n          return (d && d(target, key)), void 0;\n        }, void 0);\n      case 4:\n        return decorators.reduceRight(function(o, d) {\n          return (d && d(target, key, o)) || o;\n        }, desc);\n    }\n  };\n  var __metadata = (this && this.__metadata) || function(k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\")\n      return Reflect.metadata(k, v);\n  };\n  var compiler_1 = require(\"angular2/src/core/linker/compiler\");\n  var proto_view_factory_1 = require(\"angular2/src/core/linker/proto_view_factory\");\n  var template_compiler_1 = require(\"angular2/src/compiler/template_compiler\");\n  var di_1 = require(\"angular2/src/core/di\");\n  var RuntimeCompiler = (function(_super) {\n    __extends(RuntimeCompiler, _super);\n    function RuntimeCompiler() {\n      _super.apply(this, arguments);\n    }\n    return RuntimeCompiler;\n  })(compiler_1.Compiler);\n  exports.RuntimeCompiler = RuntimeCompiler;\n  var RuntimeCompiler_ = (function(_super) {\n    __extends(RuntimeCompiler_, _super);\n    function RuntimeCompiler_(_protoViewFactory, _templateCompiler) {\n      _super.call(this, _protoViewFactory);\n      this._templateCompiler = _templateCompiler;\n    }\n    RuntimeCompiler_.prototype.compileInHost = function(componentType) {\n      var _this = this;\n      return this._templateCompiler.compileHostComponentRuntime(componentType).then(function(compiledHostTemplate) {\n        return compiler_1.internalCreateProtoView(_this, compiledHostTemplate);\n      });\n    };\n    RuntimeCompiler_.prototype.clearCache = function() {\n      _super.prototype.clearCache.call(this);\n      this._templateCompiler.clearCache();\n    };\n    RuntimeCompiler_ = __decorate([di_1.Injectable(), __metadata('design:paramtypes', [proto_view_factory_1.ProtoViewFactory, template_compiler_1.TemplateCompiler])], RuntimeCompiler_);\n    return RuntimeCompiler_;\n  })(compiler_1.Compiler_);\n  exports.RuntimeCompiler_ = RuntimeCompiler_;\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"@reactivex/rxjs/dist/cjs/Rx\", [\"@reactivex/rxjs/dist/cjs/Observable\", \"@reactivex/rxjs/dist/cjs/operators/combineLatest-static\", \"@reactivex/rxjs/dist/cjs/operators/concat-static\", \"@reactivex/rxjs/dist/cjs/observables/DeferObservable\", \"@reactivex/rxjs/dist/cjs/observables/EmptyObservable\", \"@reactivex/rxjs/dist/cjs/observables/ForkJoinObservable\", \"@reactivex/rxjs/dist/cjs/observables/FromObservable\", \"@reactivex/rxjs/dist/cjs/observables/ArrayObservable\", \"@reactivex/rxjs/dist/cjs/observables/FromEventObservable\", \"@reactivex/rxjs/dist/cjs/observables/FromEventPatternObservable\", \"@reactivex/rxjs/dist/cjs/observables/PromiseObservable\", \"@reactivex/rxjs/dist/cjs/observables/IntervalObservable\", \"@reactivex/rxjs/dist/cjs/operators/merge-static\", \"@reactivex/rxjs/dist/cjs/observables/InfiniteObservable\", \"@reactivex/rxjs/dist/cjs/observables/RangeObservable\", \"@reactivex/rxjs/dist/cjs/observables/ErrorObservable\", \"@reactivex/rxjs/dist/cjs/observables/TimerObservable\", \"@reactivex/rxjs/dist/cjs/operators/zip-static\", \"@reactivex/rxjs/dist/cjs/operators/buffer\", \"@reactivex/rxjs/dist/cjs/operators/bufferCount\", \"@reactivex/rxjs/dist/cjs/operators/bufferTime\", \"@reactivex/rxjs/dist/cjs/operators/bufferToggle\", \"@reactivex/rxjs/dist/cjs/operators/bufferWhen\", \"@reactivex/rxjs/dist/cjs/operators/catch\", \"@reactivex/rxjs/dist/cjs/operators/combineAll\", \"@reactivex/rxjs/dist/cjs/operators/combineLatest\", \"@reactivex/rxjs/dist/cjs/operators/concat\", \"@reactivex/rxjs/dist/cjs/operators/concatAll\", \"@reactivex/rxjs/dist/cjs/operators/concatMap\", \"@reactivex/rxjs/dist/cjs/operators/concatMapTo\", \"@reactivex/rxjs/dist/cjs/operators/count\", \"@reactivex/rxjs/dist/cjs/operators/dematerialize\", \"@reactivex/rxjs/dist/cjs/operators/debounce\", \"@reactivex/rxjs/dist/cjs/operators/debounceTime\", \"@reactivex/rxjs/dist/cjs/operators/defaultIfEmpty\", \"@reactivex/rxjs/dist/cjs/operators/delay\", \"@reactivex/rxjs/dist/cjs/operators/distinctUntilChanged\", \"@reactivex/rxjs/dist/cjs/operators/do\", \"@reactivex/rxjs/dist/cjs/operators/expand\", \"@reactivex/rxjs/dist/cjs/operators/filter\", \"@reactivex/rxjs/dist/cjs/operators/finally\", \"@reactivex/rxjs/dist/cjs/operators/first\", \"@reactivex/rxjs/dist/cjs/operators/groupBy\", \"@reactivex/rxjs/dist/cjs/operators/ignoreElements\", \"@reactivex/rxjs/dist/cjs/operators/every\", \"@reactivex/rxjs/dist/cjs/operators/last\", \"@reactivex/rxjs/dist/cjs/operators/map\", \"@reactivex/rxjs/dist/cjs/operators/mapTo\", \"@reactivex/rxjs/dist/cjs/operators/materialize\", \"@reactivex/rxjs/dist/cjs/operators/merge\", \"@reactivex/rxjs/dist/cjs/operators/mergeAll\", \"@reactivex/rxjs/dist/cjs/operators/mergeMap\", \"@reactivex/rxjs/dist/cjs/operators/mergeMapTo\", \"@reactivex/rxjs/dist/cjs/operators/multicast\", \"@reactivex/rxjs/dist/cjs/operators/observeOn\", \"@reactivex/rxjs/dist/cjs/operators/partition\", \"@reactivex/rxjs/dist/cjs/operators/publish\", \"@reactivex/rxjs/dist/cjs/operators/publishBehavior\", \"@reactivex/rxjs/dist/cjs/operators/publishReplay\", \"@reactivex/rxjs/dist/cjs/operators/reduce\", \"@reactivex/rxjs/dist/cjs/operators/repeat\", \"@reactivex/rxjs/dist/cjs/operators/retry\", \"@reactivex/rxjs/dist/cjs/operators/retryWhen\", \"@reactivex/rxjs/dist/cjs/operators/sample\", \"@reactivex/rxjs/dist/cjs/operators/sampleTime\", \"@reactivex/rxjs/dist/cjs/operators/scan\", \"@reactivex/rxjs/dist/cjs/operators/share\", \"@reactivex/rxjs/dist/cjs/operators/shareBehavior\", \"@reactivex/rxjs/dist/cjs/operators/shareReplay\", \"@reactivex/rxjs/dist/cjs/operators/single\", \"@reactivex/rxjs/dist/cjs/operators/skip\", \"@reactivex/rxjs/dist/cjs/operators/skipUntil\", \"@reactivex/rxjs/dist/cjs/operators/startWith\", \"@reactivex/rxjs/dist/cjs/operators/subscribeOn\", \"@reactivex/rxjs/dist/cjs/operators/switch\", \"@reactivex/rxjs/dist/cjs/operators/switchMap\", \"@reactivex/rxjs/dist/cjs/operators/switchMapTo\", \"@reactivex/rxjs/dist/cjs/operators/take\", \"@reactivex/rxjs/dist/cjs/operators/takeUntil\", \"@reactivex/rxjs/dist/cjs/operators/throttle\", \"@reactivex/rxjs/dist/cjs/operators/timeout\", \"@reactivex/rxjs/dist/cjs/operators/timeoutWith\", \"@reactivex/rxjs/dist/cjs/operators/toArray\", \"@reactivex/rxjs/dist/cjs/operators/toPromise\", \"@reactivex/rxjs/dist/cjs/operators/window\", \"@reactivex/rxjs/dist/cjs/operators/windowCount\", \"@reactivex/rxjs/dist/cjs/operators/windowTime\", \"@reactivex/rxjs/dist/cjs/operators/windowToggle\", \"@reactivex/rxjs/dist/cjs/operators/windowWhen\", \"@reactivex/rxjs/dist/cjs/operators/withLatestFrom\", \"@reactivex/rxjs/dist/cjs/operators/zip\", \"@reactivex/rxjs/dist/cjs/operators/zipAll\", \"@reactivex/rxjs/dist/cjs/Subject\", \"@reactivex/rxjs/dist/cjs/Subscription\", \"@reactivex/rxjs/dist/cjs/Subscriber\", \"@reactivex/rxjs/dist/cjs/subjects/ReplaySubject\", \"@reactivex/rxjs/dist/cjs/subjects/BehaviorSubject\", \"@reactivex/rxjs/dist/cjs/observables/ConnectableObservable\", \"@reactivex/rxjs/dist/cjs/Notification\", \"@reactivex/rxjs/dist/cjs/util/EmptyError\", \"@reactivex/rxjs/dist/cjs/util/ArgumentOutOfRangeError\", \"@reactivex/rxjs/dist/cjs/schedulers/nextTick\", \"@reactivex/rxjs/dist/cjs/schedulers/immediate\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  'use strict';\n  exports.__esModule = true;\n  function _interopRequireDefault(obj) {\n    return obj && obj.__esModule ? obj : {'default': obj};\n  }\n  var _Observable = require(\"@reactivex/rxjs/dist/cjs/Observable\");\n  var _Observable2 = _interopRequireDefault(_Observable);\n  var _operatorsCombineLatestStatic = require(\"@reactivex/rxjs/dist/cjs/operators/combineLatest-static\");\n  var _operatorsCombineLatestStatic2 = _interopRequireDefault(_operatorsCombineLatestStatic);\n  var _operatorsConcatStatic = require(\"@reactivex/rxjs/dist/cjs/operators/concat-static\");\n  var _operatorsConcatStatic2 = _interopRequireDefault(_operatorsConcatStatic);\n  var _observablesDeferObservable = require(\"@reactivex/rxjs/dist/cjs/observables/DeferObservable\");\n  var _observablesDeferObservable2 = _interopRequireDefault(_observablesDeferObservable);\n  var _observablesEmptyObservable = require(\"@reactivex/rxjs/dist/cjs/observables/EmptyObservable\");\n  var _observablesEmptyObservable2 = _interopRequireDefault(_observablesEmptyObservable);\n  var _observablesForkJoinObservable = require(\"@reactivex/rxjs/dist/cjs/observables/ForkJoinObservable\");\n  var _observablesForkJoinObservable2 = _interopRequireDefault(_observablesForkJoinObservable);\n  var _observablesFromObservable = require(\"@reactivex/rxjs/dist/cjs/observables/FromObservable\");\n  var _observablesFromObservable2 = _interopRequireDefault(_observablesFromObservable);\n  var _observablesArrayObservable = require(\"@reactivex/rxjs/dist/cjs/observables/ArrayObservable\");\n  var _observablesArrayObservable2 = _interopRequireDefault(_observablesArrayObservable);\n  var _observablesFromEventObservable = require(\"@reactivex/rxjs/dist/cjs/observables/FromEventObservable\");\n  var _observablesFromEventObservable2 = _interopRequireDefault(_observablesFromEventObservable);\n  var _observablesFromEventPatternObservable = require(\"@reactivex/rxjs/dist/cjs/observables/FromEventPatternObservable\");\n  var _observablesFromEventPatternObservable2 = _interopRequireDefault(_observablesFromEventPatternObservable);\n  var _observablesPromiseObservable = require(\"@reactivex/rxjs/dist/cjs/observables/PromiseObservable\");\n  var _observablesPromiseObservable2 = _interopRequireDefault(_observablesPromiseObservable);\n  var _observablesIntervalObservable = require(\"@reactivex/rxjs/dist/cjs/observables/IntervalObservable\");\n  var _observablesIntervalObservable2 = _interopRequireDefault(_observablesIntervalObservable);\n  var _operatorsMergeStatic = require(\"@reactivex/rxjs/dist/cjs/operators/merge-static\");\n  var _operatorsMergeStatic2 = _interopRequireDefault(_operatorsMergeStatic);\n  var _observablesInfiniteObservable = require(\"@reactivex/rxjs/dist/cjs/observables/InfiniteObservable\");\n  var _observablesInfiniteObservable2 = _interopRequireDefault(_observablesInfiniteObservable);\n  var _observablesRangeObservable = require(\"@reactivex/rxjs/dist/cjs/observables/RangeObservable\");\n  var _observablesRangeObservable2 = _interopRequireDefault(_observablesRangeObservable);\n  var _observablesErrorObservable = require(\"@reactivex/rxjs/dist/cjs/observables/ErrorObservable\");\n  var _observablesErrorObservable2 = _interopRequireDefault(_observablesErrorObservable);\n  var _observablesTimerObservable = require(\"@reactivex/rxjs/dist/cjs/observables/TimerObservable\");\n  var _observablesTimerObservable2 = _interopRequireDefault(_observablesTimerObservable);\n  var _operatorsZipStatic = require(\"@reactivex/rxjs/dist/cjs/operators/zip-static\");\n  var _operatorsZipStatic2 = _interopRequireDefault(_operatorsZipStatic);\n  var _operatorsBuffer = require(\"@reactivex/rxjs/dist/cjs/operators/buffer\");\n  var _operatorsBuffer2 = _interopRequireDefault(_operatorsBuffer);\n  var _operatorsBufferCount = require(\"@reactivex/rxjs/dist/cjs/operators/bufferCount\");\n  var _operatorsBufferCount2 = _interopRequireDefault(_operatorsBufferCount);\n  var _operatorsBufferTime = require(\"@reactivex/rxjs/dist/cjs/operators/bufferTime\");\n  var _operatorsBufferTime2 = _interopRequireDefault(_operatorsBufferTime);\n  var _operatorsBufferToggle = require(\"@reactivex/rxjs/dist/cjs/operators/bufferToggle\");\n  var _operatorsBufferToggle2 = _interopRequireDefault(_operatorsBufferToggle);\n  var _operatorsBufferWhen = require(\"@reactivex/rxjs/dist/cjs/operators/bufferWhen\");\n  var _operatorsBufferWhen2 = _interopRequireDefault(_operatorsBufferWhen);\n  var _operatorsCatch = require(\"@reactivex/rxjs/dist/cjs/operators/catch\");\n  var _operatorsCatch2 = _interopRequireDefault(_operatorsCatch);\n  var _operatorsCombineAll = require(\"@reactivex/rxjs/dist/cjs/operators/combineAll\");\n  var _operatorsCombineAll2 = _interopRequireDefault(_operatorsCombineAll);\n  var _operatorsCombineLatest = require(\"@reactivex/rxjs/dist/cjs/operators/combineLatest\");\n  var _operatorsCombineLatest2 = _interopRequireDefault(_operatorsCombineLatest);\n  var _operatorsConcat = require(\"@reactivex/rxjs/dist/cjs/operators/concat\");\n  var _operatorsConcat2 = _interopRequireDefault(_operatorsConcat);\n  var _operatorsConcatAll = require(\"@reactivex/rxjs/dist/cjs/operators/concatAll\");\n  var _operatorsConcatAll2 = _interopRequireDefault(_operatorsConcatAll);\n  var _operatorsConcatMap = require(\"@reactivex/rxjs/dist/cjs/operators/concatMap\");\n  var _operatorsConcatMap2 = _interopRequireDefault(_operatorsConcatMap);\n  var _operatorsConcatMapTo = require(\"@reactivex/rxjs/dist/cjs/operators/concatMapTo\");\n  var _operatorsConcatMapTo2 = _interopRequireDefault(_operatorsConcatMapTo);\n  var _operatorsCount = require(\"@reactivex/rxjs/dist/cjs/operators/count\");\n  var _operatorsCount2 = _interopRequireDefault(_operatorsCount);\n  var _operatorsDematerialize = require(\"@reactivex/rxjs/dist/cjs/operators/dematerialize\");\n  var _operatorsDematerialize2 = _interopRequireDefault(_operatorsDematerialize);\n  var _operatorsDebounce = require(\"@reactivex/rxjs/dist/cjs/operators/debounce\");\n  var _operatorsDebounce2 = _interopRequireDefault(_operatorsDebounce);\n  var _operatorsDebounceTime = require(\"@reactivex/rxjs/dist/cjs/operators/debounceTime\");\n  var _operatorsDebounceTime2 = _interopRequireDefault(_operatorsDebounceTime);\n  var _operatorsDefaultIfEmpty = require(\"@reactivex/rxjs/dist/cjs/operators/defaultIfEmpty\");\n  var _operatorsDefaultIfEmpty2 = _interopRequireDefault(_operatorsDefaultIfEmpty);\n  var _operatorsDelay = require(\"@reactivex/rxjs/dist/cjs/operators/delay\");\n  var _operatorsDelay2 = _interopRequireDefault(_operatorsDelay);\n  var _operatorsDistinctUntilChanged = require(\"@reactivex/rxjs/dist/cjs/operators/distinctUntilChanged\");\n  var _operatorsDistinctUntilChanged2 = _interopRequireDefault(_operatorsDistinctUntilChanged);\n  var _operatorsDo = require(\"@reactivex/rxjs/dist/cjs/operators/do\");\n  var _operatorsDo2 = _interopRequireDefault(_operatorsDo);\n  var _operatorsExpand = require(\"@reactivex/rxjs/dist/cjs/operators/expand\");\n  var _operatorsExpand2 = _interopRequireDefault(_operatorsExpand);\n  var _operatorsFilter = require(\"@reactivex/rxjs/dist/cjs/operators/filter\");\n  var _operatorsFilter2 = _interopRequireDefault(_operatorsFilter);\n  var _operatorsFinally = require(\"@reactivex/rxjs/dist/cjs/operators/finally\");\n  var _operatorsFinally2 = _interopRequireDefault(_operatorsFinally);\n  var _operatorsFirst = require(\"@reactivex/rxjs/dist/cjs/operators/first\");\n  var _operatorsFirst2 = _interopRequireDefault(_operatorsFirst);\n  var _operatorsGroupBy = require(\"@reactivex/rxjs/dist/cjs/operators/groupBy\");\n  var _operatorsIgnoreElements = require(\"@reactivex/rxjs/dist/cjs/operators/ignoreElements\");\n  var _operatorsIgnoreElements2 = _interopRequireDefault(_operatorsIgnoreElements);\n  var _operatorsEvery = require(\"@reactivex/rxjs/dist/cjs/operators/every\");\n  var _operatorsEvery2 = _interopRequireDefault(_operatorsEvery);\n  var _operatorsLast = require(\"@reactivex/rxjs/dist/cjs/operators/last\");\n  var _operatorsLast2 = _interopRequireDefault(_operatorsLast);\n  var _operatorsMap = require(\"@reactivex/rxjs/dist/cjs/operators/map\");\n  var _operatorsMap2 = _interopRequireDefault(_operatorsMap);\n  var _operatorsMapTo = require(\"@reactivex/rxjs/dist/cjs/operators/mapTo\");\n  var _operatorsMapTo2 = _interopRequireDefault(_operatorsMapTo);\n  var _operatorsMaterialize = require(\"@reactivex/rxjs/dist/cjs/operators/materialize\");\n  var _operatorsMaterialize2 = _interopRequireDefault(_operatorsMaterialize);\n  var _operatorsMerge = require(\"@reactivex/rxjs/dist/cjs/operators/merge\");\n  var _operatorsMerge2 = _interopRequireDefault(_operatorsMerge);\n  var _operatorsMergeAll = require(\"@reactivex/rxjs/dist/cjs/operators/mergeAll\");\n  var _operatorsMergeAll2 = _interopRequireDefault(_operatorsMergeAll);\n  var _operatorsMergeMap = require(\"@reactivex/rxjs/dist/cjs/operators/mergeMap\");\n  var _operatorsMergeMap2 = _interopRequireDefault(_operatorsMergeMap);\n  var _operatorsMergeMapTo = require(\"@reactivex/rxjs/dist/cjs/operators/mergeMapTo\");\n  var _operatorsMergeMapTo2 = _interopRequireDefault(_operatorsMergeMapTo);\n  var _operatorsMulticast = require(\"@reactivex/rxjs/dist/cjs/operators/multicast\");\n  var _operatorsMulticast2 = _interopRequireDefault(_operatorsMulticast);\n  var _operatorsObserveOn = require(\"@reactivex/rxjs/dist/cjs/operators/observeOn\");\n  var _operatorsObserveOn2 = _interopRequireDefault(_operatorsObserveOn);\n  var _operatorsPartition = require(\"@reactivex/rxjs/dist/cjs/operators/partition\");\n  var _operatorsPartition2 = _interopRequireDefault(_operatorsPartition);\n  var _operatorsPublish = require(\"@reactivex/rxjs/dist/cjs/operators/publish\");\n  var _operatorsPublish2 = _interopRequireDefault(_operatorsPublish);\n  var _operatorsPublishBehavior = require(\"@reactivex/rxjs/dist/cjs/operators/publishBehavior\");\n  var _operatorsPublishBehavior2 = _interopRequireDefault(_operatorsPublishBehavior);\n  var _operatorsPublishReplay = require(\"@reactivex/rxjs/dist/cjs/operators/publishReplay\");\n  var _operatorsPublishReplay2 = _interopRequireDefault(_operatorsPublishReplay);\n  var _operatorsReduce = require(\"@reactivex/rxjs/dist/cjs/operators/reduce\");\n  var _operatorsReduce2 = _interopRequireDefault(_operatorsReduce);\n  var _operatorsRepeat = require(\"@reactivex/rxjs/dist/cjs/operators/repeat\");\n  var _operatorsRepeat2 = _interopRequireDefault(_operatorsRepeat);\n  var _operatorsRetry = require(\"@reactivex/rxjs/dist/cjs/operators/retry\");\n  var _operatorsRetry2 = _interopRequireDefault(_operatorsRetry);\n  var _operatorsRetryWhen = require(\"@reactivex/rxjs/dist/cjs/operators/retryWhen\");\n  var _operatorsRetryWhen2 = _interopRequireDefault(_operatorsRetryWhen);\n  var _operatorsSample = require(\"@reactivex/rxjs/dist/cjs/operators/sample\");\n  var _operatorsSample2 = _interopRequireDefault(_operatorsSample);\n  var _operatorsSampleTime = require(\"@reactivex/rxjs/dist/cjs/operators/sampleTime\");\n  var _operatorsSampleTime2 = _interopRequireDefault(_operatorsSampleTime);\n  var _operatorsScan = require(\"@reactivex/rxjs/dist/cjs/operators/scan\");\n  var _operatorsScan2 = _interopRequireDefault(_operatorsScan);\n  var _operatorsShare = require(\"@reactivex/rxjs/dist/cjs/operators/share\");\n  var _operatorsShare2 = _interopRequireDefault(_operatorsShare);\n  var _operatorsShareBehavior = require(\"@reactivex/rxjs/dist/cjs/operators/shareBehavior\");\n  var _operatorsShareBehavior2 = _interopRequireDefault(_operatorsShareBehavior);\n  var _operatorsShareReplay = require(\"@reactivex/rxjs/dist/cjs/operators/shareReplay\");\n  var _operatorsShareReplay2 = _interopRequireDefault(_operatorsShareReplay);\n  var _operatorsSingle = require(\"@reactivex/rxjs/dist/cjs/operators/single\");\n  var _operatorsSingle2 = _interopRequireDefault(_operatorsSingle);\n  var _operatorsSkip = require(\"@reactivex/rxjs/dist/cjs/operators/skip\");\n  var _operatorsSkip2 = _interopRequireDefault(_operatorsSkip);\n  var _operatorsSkipUntil = require(\"@reactivex/rxjs/dist/cjs/operators/skipUntil\");\n  var _operatorsSkipUntil2 = _interopRequireDefault(_operatorsSkipUntil);\n  var _operatorsStartWith = require(\"@reactivex/rxjs/dist/cjs/operators/startWith\");\n  var _operatorsStartWith2 = _interopRequireDefault(_operatorsStartWith);\n  var _operatorsSubscribeOn = require(\"@reactivex/rxjs/dist/cjs/operators/subscribeOn\");\n  var _operatorsSubscribeOn2 = _interopRequireDefault(_operatorsSubscribeOn);\n  var _operatorsSwitch = require(\"@reactivex/rxjs/dist/cjs/operators/switch\");\n  var _operatorsSwitch2 = _interopRequireDefault(_operatorsSwitch);\n  var _operatorsSwitchMap = require(\"@reactivex/rxjs/dist/cjs/operators/switchMap\");\n  var _operatorsSwitchMap2 = _interopRequireDefault(_operatorsSwitchMap);\n  var _operatorsSwitchMapTo = require(\"@reactivex/rxjs/dist/cjs/operators/switchMapTo\");\n  var _operatorsSwitchMapTo2 = _interopRequireDefault(_operatorsSwitchMapTo);\n  var _operatorsTake = require(\"@reactivex/rxjs/dist/cjs/operators/take\");\n  var _operatorsTake2 = _interopRequireDefault(_operatorsTake);\n  var _operatorsTakeUntil = require(\"@reactivex/rxjs/dist/cjs/operators/takeUntil\");\n  var _operatorsTakeUntil2 = _interopRequireDefault(_operatorsTakeUntil);\n  var _operatorsThrottle = require(\"@reactivex/rxjs/dist/cjs/operators/throttle\");\n  var _operatorsThrottle2 = _interopRequireDefault(_operatorsThrottle);\n  var _operatorsTimeout = require(\"@reactivex/rxjs/dist/cjs/operators/timeout\");\n  var _operatorsTimeout2 = _interopRequireDefault(_operatorsTimeout);\n  var _operatorsTimeoutWith = require(\"@reactivex/rxjs/dist/cjs/operators/timeoutWith\");\n  var _operatorsTimeoutWith2 = _interopRequireDefault(_operatorsTimeoutWith);\n  var _operatorsToArray = require(\"@reactivex/rxjs/dist/cjs/operators/toArray\");\n  var _operatorsToArray2 = _interopRequireDefault(_operatorsToArray);\n  var _operatorsToPromise = require(\"@reactivex/rxjs/dist/cjs/operators/toPromise\");\n  var _operatorsToPromise2 = _interopRequireDefault(_operatorsToPromise);\n  var _operatorsWindow = require(\"@reactivex/rxjs/dist/cjs/operators/window\");\n  var _operatorsWindow2 = _interopRequireDefault(_operatorsWindow);\n  var _operatorsWindowCount = require(\"@reactivex/rxjs/dist/cjs/operators/windowCount\");\n  var _operatorsWindowCount2 = _interopRequireDefault(_operatorsWindowCount);\n  var _operatorsWindowTime = require(\"@reactivex/rxjs/dist/cjs/operators/windowTime\");\n  var _operatorsWindowTime2 = _interopRequireDefault(_operatorsWindowTime);\n  var _operatorsWindowToggle = require(\"@reactivex/rxjs/dist/cjs/operators/windowToggle\");\n  var _operatorsWindowToggle2 = _interopRequireDefault(_operatorsWindowToggle);\n  var _operatorsWindowWhen = require(\"@reactivex/rxjs/dist/cjs/operators/windowWhen\");\n  var _operatorsWindowWhen2 = _interopRequireDefault(_operatorsWindowWhen);\n  var _operatorsWithLatestFrom = require(\"@reactivex/rxjs/dist/cjs/operators/withLatestFrom\");\n  var _operatorsWithLatestFrom2 = _interopRequireDefault(_operatorsWithLatestFrom);\n  var _operatorsZip = require(\"@reactivex/rxjs/dist/cjs/operators/zip\");\n  var _operatorsZip2 = _interopRequireDefault(_operatorsZip);\n  var _operatorsZipAll = require(\"@reactivex/rxjs/dist/cjs/operators/zipAll\");\n  var _operatorsZipAll2 = _interopRequireDefault(_operatorsZipAll);\n  var _Subject = require(\"@reactivex/rxjs/dist/cjs/Subject\");\n  var _Subject2 = _interopRequireDefault(_Subject);\n  var _Subscription = require(\"@reactivex/rxjs/dist/cjs/Subscription\");\n  var _Subscription2 = _interopRequireDefault(_Subscription);\n  var _Subscriber = require(\"@reactivex/rxjs/dist/cjs/Subscriber\");\n  var _Subscriber2 = _interopRequireDefault(_Subscriber);\n  var _subjectsReplaySubject = require(\"@reactivex/rxjs/dist/cjs/subjects/ReplaySubject\");\n  var _subjectsReplaySubject2 = _interopRequireDefault(_subjectsReplaySubject);\n  var _subjectsBehaviorSubject = require(\"@reactivex/rxjs/dist/cjs/subjects/BehaviorSubject\");\n  var _subjectsBehaviorSubject2 = _interopRequireDefault(_subjectsBehaviorSubject);\n  var _observablesConnectableObservable = require(\"@reactivex/rxjs/dist/cjs/observables/ConnectableObservable\");\n  var _observablesConnectableObservable2 = _interopRequireDefault(_observablesConnectableObservable);\n  var _Notification = require(\"@reactivex/rxjs/dist/cjs/Notification\");\n  var _Notification2 = _interopRequireDefault(_Notification);\n  var _utilEmptyError = require(\"@reactivex/rxjs/dist/cjs/util/EmptyError\");\n  var _utilEmptyError2 = _interopRequireDefault(_utilEmptyError);\n  var _utilArgumentOutOfRangeError = require(\"@reactivex/rxjs/dist/cjs/util/ArgumentOutOfRangeError\");\n  var _utilArgumentOutOfRangeError2 = _interopRequireDefault(_utilArgumentOutOfRangeError);\n  var _schedulersNextTick = require(\"@reactivex/rxjs/dist/cjs/schedulers/nextTick\");\n  var _schedulersNextTick2 = _interopRequireDefault(_schedulersNextTick);\n  var _schedulersImmediate = require(\"@reactivex/rxjs/dist/cjs/schedulers/immediate\");\n  var _schedulersImmediate2 = _interopRequireDefault(_schedulersImmediate);\n  _Observable2['default'].combineLatest = _operatorsCombineLatestStatic2['default'];\n  _Observable2['default'].concat = _operatorsConcatStatic2['default'];\n  _Observable2['default'].defer = _observablesDeferObservable2['default'].create;\n  _Observable2['default'].empty = _observablesEmptyObservable2['default'].create;\n  _Observable2['default'].forkJoin = _observablesForkJoinObservable2['default'].create;\n  _Observable2['default'].from = _observablesFromObservable2['default'].create;\n  _Observable2['default'].fromArray = _observablesArrayObservable2['default'].create;\n  _Observable2['default'].fromEvent = _observablesFromEventObservable2['default'].create;\n  _Observable2['default'].fromEventPattern = _observablesFromEventPatternObservable2['default'].create;\n  _Observable2['default'].fromPromise = _observablesPromiseObservable2['default'].create;\n  _Observable2['default'].interval = _observablesIntervalObservable2['default'].create;\n  _Observable2['default'].merge = _operatorsMergeStatic2['default'];\n  _Observable2['default'].never = _observablesInfiniteObservable2['default'].create;\n  _Observable2['default'].of = _observablesArrayObservable2['default'].of;\n  _Observable2['default'].range = _observablesRangeObservable2['default'].create;\n  _Observable2['default']['throw'] = _observablesErrorObservable2['default'].create;\n  _Observable2['default'].timer = _observablesTimerObservable2['default'].create;\n  _Observable2['default'].zip = _operatorsZipStatic2['default'];\n  var observableProto = _Observable2['default'].prototype;\n  observableProto.buffer = _operatorsBuffer2['default'];\n  observableProto.bufferCount = _operatorsBufferCount2['default'];\n  observableProto.bufferTime = _operatorsBufferTime2['default'];\n  observableProto.bufferToggle = _operatorsBufferToggle2['default'];\n  observableProto.bufferWhen = _operatorsBufferWhen2['default'];\n  observableProto['catch'] = _operatorsCatch2['default'];\n  observableProto.combineAll = _operatorsCombineAll2['default'];\n  observableProto.combineLatest = _operatorsCombineLatest2['default'];\n  observableProto.concat = _operatorsConcat2['default'];\n  observableProto.concatAll = _operatorsConcatAll2['default'];\n  observableProto.concatMap = _operatorsConcatMap2['default'];\n  observableProto.concatMapTo = _operatorsConcatMapTo2['default'];\n  observableProto.count = _operatorsCount2['default'];\n  observableProto.dematerialize = _operatorsDematerialize2['default'];\n  observableProto.debounce = _operatorsDebounce2['default'];\n  observableProto.debounceTime = _operatorsDebounceTime2['default'];\n  observableProto.defaultIfEmpty = _operatorsDefaultIfEmpty2['default'];\n  observableProto.delay = _operatorsDelay2['default'];\n  observableProto.distinctUntilChanged = _operatorsDistinctUntilChanged2['default'];\n  observableProto['do'] = _operatorsDo2['default'];\n  observableProto.expand = _operatorsExpand2['default'];\n  observableProto.filter = _operatorsFilter2['default'];\n  observableProto['finally'] = _operatorsFinally2['default'];\n  observableProto.first = _operatorsFirst2['default'];\n  observableProto.groupBy = _operatorsGroupBy.groupBy;\n  observableProto.ignoreElements = _operatorsIgnoreElements2['default'];\n  observableProto.every = _operatorsEvery2['default'];\n  observableProto.last = _operatorsLast2['default'];\n  observableProto.map = _operatorsMap2['default'];\n  observableProto.mapTo = _operatorsMapTo2['default'];\n  observableProto.materialize = _operatorsMaterialize2['default'];\n  observableProto.merge = _operatorsMerge2['default'];\n  observableProto.mergeAll = _operatorsMergeAll2['default'];\n  observableProto.mergeMap = _operatorsMergeMap2['default'];\n  observableProto.flatMap = _operatorsMergeMap2['default'];\n  observableProto.mergeMapTo = _operatorsMergeMapTo2['default'];\n  observableProto.flatMapTo = _operatorsMergeMapTo2['default'];\n  observableProto.multicast = _operatorsMulticast2['default'];\n  observableProto.observeOn = _operatorsObserveOn2['default'];\n  observableProto.partition = _operatorsPartition2['default'];\n  observableProto.publish = _operatorsPublish2['default'];\n  observableProto.publishBehavior = _operatorsPublishBehavior2['default'];\n  observableProto.publishReplay = _operatorsPublishReplay2['default'];\n  observableProto.reduce = _operatorsReduce2['default'];\n  observableProto.repeat = _operatorsRepeat2['default'];\n  observableProto.retry = _operatorsRetry2['default'];\n  observableProto.retryWhen = _operatorsRetryWhen2['default'];\n  observableProto.sample = _operatorsSample2['default'];\n  observableProto.sampleTime = _operatorsSampleTime2['default'];\n  observableProto.scan = _operatorsScan2['default'];\n  observableProto.share = _operatorsShare2['default'];\n  observableProto.shareBehavior = _operatorsShareBehavior2['default'];\n  observableProto.shareReplay = _operatorsShareReplay2['default'];\n  observableProto.single = _operatorsSingle2['default'];\n  observableProto.skip = _operatorsSkip2['default'];\n  observableProto.skipUntil = _operatorsSkipUntil2['default'];\n  observableProto.startWith = _operatorsStartWith2['default'];\n  observableProto.subscribeOn = _operatorsSubscribeOn2['default'];\n  observableProto['switch'] = _operatorsSwitch2['default'];\n  observableProto.switchMap = _operatorsSwitchMap2['default'];\n  observableProto.switchMapTo = _operatorsSwitchMapTo2['default'];\n  observableProto.take = _operatorsTake2['default'];\n  observableProto.takeUntil = _operatorsTakeUntil2['default'];\n  observableProto.throttle = _operatorsThrottle2['default'];\n  observableProto.timeout = _operatorsTimeout2['default'];\n  observableProto.timeoutWith = _operatorsTimeoutWith2['default'];\n  observableProto.toArray = _operatorsToArray2['default'];\n  observableProto.toPromise = _operatorsToPromise2['default'];\n  observableProto.window = _operatorsWindow2['default'];\n  observableProto.windowCount = _operatorsWindowCount2['default'];\n  observableProto.windowTime = _operatorsWindowTime2['default'];\n  observableProto.windowToggle = _operatorsWindowToggle2['default'];\n  observableProto.windowWhen = _operatorsWindowWhen2['default'];\n  observableProto.withLatestFrom = _operatorsWithLatestFrom2['default'];\n  observableProto.zip = _operatorsZip2['default'];\n  observableProto.zipAll = _operatorsZipAll2['default'];\n  var Scheduler = {\n    nextTick: _schedulersNextTick2['default'],\n    immediate: _schedulersImmediate2['default']\n  };\n  exports.Subject = _Subject2['default'];\n  exports.Scheduler = Scheduler;\n  exports.Observable = _Observable2['default'];\n  exports.Subscriber = _Subscriber2['default'];\n  exports.Subscription = _Subscription2['default'];\n  exports.ReplaySubject = _subjectsReplaySubject2['default'];\n  exports.BehaviorSubject = _subjectsBehaviorSubject2['default'];\n  exports.ConnectableObservable = _observablesConnectableObservable2['default'];\n  exports.Notification = _Notification2['default'];\n  exports.EmptyError = _utilEmptyError2['default'];\n  exports.ArgumentOutOfRangeError = _utilArgumentOutOfRangeError2['default'];\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"angular2/src/core/metadata/di\", [\"angular2/src/facade/lang\", \"angular2/src/core/di\", \"angular2/src/core/di/metadata\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  var __extends = (this && this.__extends) || function(d, b) {\n    for (var p in b)\n      if (b.hasOwnProperty(p))\n        d[p] = b[p];\n    function __() {\n      this.constructor = d;\n    }\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n  };\n  var __decorate = (this && this.__decorate) || function(decorators, target, key, desc) {\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\")\n      return Reflect.decorate(decorators, target, key, desc);\n    switch (arguments.length) {\n      case 2:\n        return decorators.reduceRight(function(o, d) {\n          return (d && d(o)) || o;\n        }, target);\n      case 3:\n        return decorators.reduceRight(function(o, d) {\n          return (d && d(target, key)), void 0;\n        }, void 0);\n      case 4:\n        return decorators.reduceRight(function(o, d) {\n          return (d && d(target, key, o)) || o;\n        }, desc);\n    }\n  };\n  var __metadata = (this && this.__metadata) || function(k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\")\n      return Reflect.metadata(k, v);\n  };\n  var lang_1 = require(\"angular2/src/facade/lang\");\n  var di_1 = require(\"angular2/src/core/di\");\n  var metadata_1 = require(\"angular2/src/core/di/metadata\");\n  var AttributeMetadata = (function(_super) {\n    __extends(AttributeMetadata, _super);\n    function AttributeMetadata(attributeName) {\n      _super.call(this);\n      this.attributeName = attributeName;\n    }\n    Object.defineProperty(AttributeMetadata.prototype, \"token\", {\n      get: function() {\n        return this;\n      },\n      enumerable: true,\n      configurable: true\n    });\n    AttributeMetadata.prototype.toString = function() {\n      return \"@Attribute(\" + lang_1.stringify(this.attributeName) + \")\";\n    };\n    AttributeMetadata = __decorate([lang_1.CONST(), __metadata('design:paramtypes', [String])], AttributeMetadata);\n    return AttributeMetadata;\n  })(metadata_1.DependencyMetadata);\n  exports.AttributeMetadata = AttributeMetadata;\n  var QueryMetadata = (function(_super) {\n    __extends(QueryMetadata, _super);\n    function QueryMetadata(_selector, _a) {\n      var _b = _a === void 0 ? {} : _a,\n          _c = _b.descendants,\n          descendants = _c === void 0 ? false : _c,\n          _d = _b.first,\n          first = _d === void 0 ? false : _d;\n      _super.call(this);\n      this._selector = _selector;\n      this.descendants = descendants;\n      this.first = first;\n    }\n    Object.defineProperty(QueryMetadata.prototype, \"isViewQuery\", {\n      get: function() {\n        return false;\n      },\n      enumerable: true,\n      configurable: true\n    });\n    Object.defineProperty(QueryMetadata.prototype, \"selector\", {\n      get: function() {\n        return di_1.resolveForwardRef(this._selector);\n      },\n      enumerable: true,\n      configurable: true\n    });\n    Object.defineProperty(QueryMetadata.prototype, \"isVarBindingQuery\", {\n      get: function() {\n        return lang_1.isString(this.selector);\n      },\n      enumerable: true,\n      configurable: true\n    });\n    Object.defineProperty(QueryMetadata.prototype, \"varBindings\", {\n      get: function() {\n        return this.selector.split(',');\n      },\n      enumerable: true,\n      configurable: true\n    });\n    QueryMetadata.prototype.toString = function() {\n      return \"@Query(\" + lang_1.stringify(this.selector) + \")\";\n    };\n    QueryMetadata = __decorate([lang_1.CONST(), __metadata('design:paramtypes', [Object, Object])], QueryMetadata);\n    return QueryMetadata;\n  })(metadata_1.DependencyMetadata);\n  exports.QueryMetadata = QueryMetadata;\n  var ContentChildrenMetadata = (function(_super) {\n    __extends(ContentChildrenMetadata, _super);\n    function ContentChildrenMetadata(_selector, _a) {\n      var _b = (_a === void 0 ? {} : _a).descendants,\n          descendants = _b === void 0 ? false : _b;\n      _super.call(this, _selector, {descendants: descendants});\n    }\n    ContentChildrenMetadata = __decorate([lang_1.CONST(), __metadata('design:paramtypes', [Object, Object])], ContentChildrenMetadata);\n    return ContentChildrenMetadata;\n  })(QueryMetadata);\n  exports.ContentChildrenMetadata = ContentChildrenMetadata;\n  var ContentChildMetadata = (function(_super) {\n    __extends(ContentChildMetadata, _super);\n    function ContentChildMetadata(_selector) {\n      _super.call(this, _selector, {\n        descendants: true,\n        first: true\n      });\n    }\n    ContentChildMetadata = __decorate([lang_1.CONST(), __metadata('design:paramtypes', [Object])], ContentChildMetadata);\n    return ContentChildMetadata;\n  })(QueryMetadata);\n  exports.ContentChildMetadata = ContentChildMetadata;\n  var ViewQueryMetadata = (function(_super) {\n    __extends(ViewQueryMetadata, _super);\n    function ViewQueryMetadata(_selector, _a) {\n      var _b = _a === void 0 ? {} : _a,\n          _c = _b.descendants,\n          descendants = _c === void 0 ? false : _c,\n          _d = _b.first,\n          first = _d === void 0 ? false : _d;\n      _super.call(this, _selector, {\n        descendants: descendants,\n        first: first\n      });\n    }\n    Object.defineProperty(ViewQueryMetadata.prototype, \"isViewQuery\", {\n      get: function() {\n        return true;\n      },\n      enumerable: true,\n      configurable: true\n    });\n    ViewQueryMetadata.prototype.toString = function() {\n      return \"@ViewQuery(\" + lang_1.stringify(this.selector) + \")\";\n    };\n    ViewQueryMetadata = __decorate([lang_1.CONST(), __metadata('design:paramtypes', [Object, Object])], ViewQueryMetadata);\n    return ViewQueryMetadata;\n  })(QueryMetadata);\n  exports.ViewQueryMetadata = ViewQueryMetadata;\n  var ViewChildrenMetadata = (function(_super) {\n    __extends(ViewChildrenMetadata, _super);\n    function ViewChildrenMetadata(_selector) {\n      _super.call(this, _selector, {descendants: true});\n    }\n    ViewChildrenMetadata = __decorate([lang_1.CONST(), __metadata('design:paramtypes', [Object])], ViewChildrenMetadata);\n    return ViewChildrenMetadata;\n  })(ViewQueryMetadata);\n  exports.ViewChildrenMetadata = ViewChildrenMetadata;\n  var ViewChildMetadata = (function(_super) {\n    __extends(ViewChildMetadata, _super);\n    function ViewChildMetadata(_selector) {\n      _super.call(this, _selector, {\n        descendants: true,\n        first: true\n      });\n    }\n    ViewChildMetadata = __decorate([lang_1.CONST(), __metadata('design:paramtypes', [Object])], ViewChildMetadata);\n    return ViewChildMetadata;\n  })(ViewQueryMetadata);\n  exports.ViewChildMetadata = ViewChildMetadata;\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"angular2/src/core/change_detection/change_detection\", [\"angular2/src/core/change_detection/differs/iterable_differs\", \"angular2/src/core/change_detection/differs/default_iterable_differ\", \"angular2/src/core/change_detection/differs/keyvalue_differs\", \"angular2/src/core/change_detection/differs/default_keyvalue_differ\", \"angular2/src/facade/lang\", \"angular2/src/core/change_detection/parser/ast\", \"angular2/src/core/change_detection/parser/lexer\", \"angular2/src/core/change_detection/parser/parser\", \"angular2/src/core/change_detection/parser/locals\", \"angular2/src/core/change_detection/exceptions\", \"angular2/src/core/change_detection/interfaces\", \"angular2/src/core/change_detection/constants\", \"angular2/src/core/change_detection/proto_change_detector\", \"angular2/src/core/change_detection/jit_proto_change_detector\", \"angular2/src/core/change_detection/binding_record\", \"angular2/src/core/change_detection/directive_record\", \"angular2/src/core/change_detection/dynamic_change_detector\", \"angular2/src/core/change_detection/change_detector_ref\", \"angular2/src/core/change_detection/differs/iterable_differs\", \"angular2/src/core/change_detection/differs/keyvalue_differs\", \"angular2/src/core/change_detection/change_detection_util\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  var iterable_differs_1 = require(\"angular2/src/core/change_detection/differs/iterable_differs\");\n  var default_iterable_differ_1 = require(\"angular2/src/core/change_detection/differs/default_iterable_differ\");\n  var keyvalue_differs_1 = require(\"angular2/src/core/change_detection/differs/keyvalue_differs\");\n  var default_keyvalue_differ_1 = require(\"angular2/src/core/change_detection/differs/default_keyvalue_differ\");\n  var lang_1 = require(\"angular2/src/facade/lang\");\n  var ast_1 = require(\"angular2/src/core/change_detection/parser/ast\");\n  exports.ASTWithSource = ast_1.ASTWithSource;\n  exports.AST = ast_1.AST;\n  exports.AstTransformer = ast_1.AstTransformer;\n  exports.PropertyRead = ast_1.PropertyRead;\n  exports.LiteralArray = ast_1.LiteralArray;\n  exports.ImplicitReceiver = ast_1.ImplicitReceiver;\n  var lexer_1 = require(\"angular2/src/core/change_detection/parser/lexer\");\n  exports.Lexer = lexer_1.Lexer;\n  var parser_1 = require(\"angular2/src/core/change_detection/parser/parser\");\n  exports.Parser = parser_1.Parser;\n  var locals_1 = require(\"angular2/src/core/change_detection/parser/locals\");\n  exports.Locals = locals_1.Locals;\n  var exceptions_1 = require(\"angular2/src/core/change_detection/exceptions\");\n  exports.DehydratedException = exceptions_1.DehydratedException;\n  exports.ExpressionChangedAfterItHasBeenCheckedException = exceptions_1.ExpressionChangedAfterItHasBeenCheckedException;\n  exports.ChangeDetectionError = exceptions_1.ChangeDetectionError;\n  var interfaces_1 = require(\"angular2/src/core/change_detection/interfaces\");\n  exports.ChangeDetectorDefinition = interfaces_1.ChangeDetectorDefinition;\n  exports.DebugContext = interfaces_1.DebugContext;\n  exports.ChangeDetectorGenConfig = interfaces_1.ChangeDetectorGenConfig;\n  var constants_1 = require(\"angular2/src/core/change_detection/constants\");\n  exports.ChangeDetectionStrategy = constants_1.ChangeDetectionStrategy;\n  exports.CHANGE_DETECTION_STRATEGY_VALUES = constants_1.CHANGE_DETECTION_STRATEGY_VALUES;\n  var proto_change_detector_1 = require(\"angular2/src/core/change_detection/proto_change_detector\");\n  exports.DynamicProtoChangeDetector = proto_change_detector_1.DynamicProtoChangeDetector;\n  var jit_proto_change_detector_1 = require(\"angular2/src/core/change_detection/jit_proto_change_detector\");\n  exports.JitProtoChangeDetector = jit_proto_change_detector_1.JitProtoChangeDetector;\n  var binding_record_1 = require(\"angular2/src/core/change_detection/binding_record\");\n  exports.BindingRecord = binding_record_1.BindingRecord;\n  exports.BindingTarget = binding_record_1.BindingTarget;\n  var directive_record_1 = require(\"angular2/src/core/change_detection/directive_record\");\n  exports.DirectiveIndex = directive_record_1.DirectiveIndex;\n  exports.DirectiveRecord = directive_record_1.DirectiveRecord;\n  var dynamic_change_detector_1 = require(\"angular2/src/core/change_detection/dynamic_change_detector\");\n  exports.DynamicChangeDetector = dynamic_change_detector_1.DynamicChangeDetector;\n  var change_detector_ref_1 = require(\"angular2/src/core/change_detection/change_detector_ref\");\n  exports.ChangeDetectorRef = change_detector_ref_1.ChangeDetectorRef;\n  var iterable_differs_2 = require(\"angular2/src/core/change_detection/differs/iterable_differs\");\n  exports.IterableDiffers = iterable_differs_2.IterableDiffers;\n  var keyvalue_differs_2 = require(\"angular2/src/core/change_detection/differs/keyvalue_differs\");\n  exports.KeyValueDiffers = keyvalue_differs_2.KeyValueDiffers;\n  var change_detection_util_1 = require(\"angular2/src/core/change_detection/change_detection_util\");\n  exports.WrappedValue = change_detection_util_1.WrappedValue;\n  exports.SimpleChange = change_detection_util_1.SimpleChange;\n  exports.keyValDiff = lang_1.CONST_EXPR([lang_1.CONST_EXPR(new default_keyvalue_differ_1.DefaultKeyValueDifferFactory())]);\n  exports.iterableDiff = lang_1.CONST_EXPR([lang_1.CONST_EXPR(new default_iterable_differ_1.DefaultIterableDifferFactory())]);\n  exports.defaultIterableDiffers = lang_1.CONST_EXPR(new iterable_differs_1.IterableDiffers(exports.iterableDiff));\n  exports.defaultKeyValueDiffers = lang_1.CONST_EXPR(new keyvalue_differs_1.KeyValueDiffers(exports.keyValDiff));\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"angular2/src/core/render/render\", [\"angular2/src/core/render/dom/shared_styles_host\", \"angular2/src/core/render/dom/dom_renderer\", \"angular2/src/core/render/dom/dom_tokens\", \"angular2/src/core/render/api\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  function __export(m) {\n    for (var p in m)\n      if (!exports.hasOwnProperty(p))\n        exports[p] = m[p];\n  }\n  __export(require(\"angular2/src/core/render/dom/shared_styles_host\"));\n  __export(require(\"angular2/src/core/render/dom/dom_renderer\"));\n  __export(require(\"angular2/src/core/render/dom/dom_tokens\"));\n  __export(require(\"angular2/src/core/render/api\"));\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"angular2/src/compiler/compiler\", [\"angular2/src/compiler/runtime_compiler\", \"angular2/src/compiler/template_compiler\", \"angular2/src/compiler/directive_metadata\", \"angular2/src/compiler/source_module\", \"angular2/src/core/platform_directives_and_pipes\", \"angular2/src/facade/lang\", \"angular2/src/core/di\", \"angular2/src/compiler/template_parser\", \"angular2/src/compiler/html_parser\", \"angular2/src/compiler/template_normalizer\", \"angular2/src/compiler/runtime_metadata\", \"angular2/src/compiler/change_detector_compiler\", \"angular2/src/compiler/style_compiler\", \"angular2/src/compiler/command_compiler\", \"angular2/src/compiler/template_compiler\", \"angular2/src/core/change_detection/change_detection\", \"angular2/src/core/linker/compiler\", \"angular2/src/compiler/runtime_compiler\", \"angular2/src/compiler/schema/element_schema_registry\", \"angular2/src/compiler/schema/dom_element_schema_registry\", \"angular2/src/compiler/url_resolver\", \"angular2/src/compiler/app_root_url\", \"angular2/src/compiler/anchor_based_app_root_url\", \"angular2/src/core/change_detection/change_detection\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  var runtime_compiler_1 = require(\"angular2/src/compiler/runtime_compiler\");\n  var template_compiler_1 = require(\"angular2/src/compiler/template_compiler\");\n  exports.TemplateCompiler = template_compiler_1.TemplateCompiler;\n  var directive_metadata_1 = require(\"angular2/src/compiler/directive_metadata\");\n  exports.CompileDirectiveMetadata = directive_metadata_1.CompileDirectiveMetadata;\n  exports.CompileTypeMetadata = directive_metadata_1.CompileTypeMetadata;\n  exports.CompileTemplateMetadata = directive_metadata_1.CompileTemplateMetadata;\n  var source_module_1 = require(\"angular2/src/compiler/source_module\");\n  exports.SourceModule = source_module_1.SourceModule;\n  exports.SourceWithImports = source_module_1.SourceWithImports;\n  var platform_directives_and_pipes_1 = require(\"angular2/src/core/platform_directives_and_pipes\");\n  exports.PLATFORM_DIRECTIVES = platform_directives_and_pipes_1.PLATFORM_DIRECTIVES;\n  exports.PLATFORM_PIPES = platform_directives_and_pipes_1.PLATFORM_PIPES;\n  var lang_1 = require(\"angular2/src/facade/lang\");\n  var di_1 = require(\"angular2/src/core/di\");\n  var template_parser_1 = require(\"angular2/src/compiler/template_parser\");\n  var html_parser_1 = require(\"angular2/src/compiler/html_parser\");\n  var template_normalizer_1 = require(\"angular2/src/compiler/template_normalizer\");\n  var runtime_metadata_1 = require(\"angular2/src/compiler/runtime_metadata\");\n  var change_detector_compiler_1 = require(\"angular2/src/compiler/change_detector_compiler\");\n  var style_compiler_1 = require(\"angular2/src/compiler/style_compiler\");\n  var command_compiler_1 = require(\"angular2/src/compiler/command_compiler\");\n  var template_compiler_2 = require(\"angular2/src/compiler/template_compiler\");\n  var change_detection_1 = require(\"angular2/src/core/change_detection/change_detection\");\n  var compiler_1 = require(\"angular2/src/core/linker/compiler\");\n  var runtime_compiler_2 = require(\"angular2/src/compiler/runtime_compiler\");\n  var element_schema_registry_1 = require(\"angular2/src/compiler/schema/element_schema_registry\");\n  var dom_element_schema_registry_1 = require(\"angular2/src/compiler/schema/dom_element_schema_registry\");\n  var url_resolver_1 = require(\"angular2/src/compiler/url_resolver\");\n  var app_root_url_1 = require(\"angular2/src/compiler/app_root_url\");\n  var anchor_based_app_root_url_1 = require(\"angular2/src/compiler/anchor_based_app_root_url\");\n  var change_detection_2 = require(\"angular2/src/core/change_detection/change_detection\");\n  function compilerProviders() {\n    return [change_detection_2.Lexer, change_detection_2.Parser, html_parser_1.HtmlParser, template_parser_1.TemplateParser, template_normalizer_1.TemplateNormalizer, runtime_metadata_1.RuntimeMetadataResolver, style_compiler_1.StyleCompiler, command_compiler_1.CommandCompiler, change_detector_compiler_1.ChangeDetectionCompiler, di_1.provide(change_detection_1.ChangeDetectorGenConfig, {useValue: new change_detection_1.ChangeDetectorGenConfig(lang_1.assertionsEnabled(), false, true)}), template_compiler_2.TemplateCompiler, di_1.provide(runtime_compiler_2.RuntimeCompiler, {useClass: runtime_compiler_1.RuntimeCompiler_}), di_1.provide(compiler_1.Compiler, {useExisting: runtime_compiler_2.RuntimeCompiler}), dom_element_schema_registry_1.DomElementSchemaRegistry, di_1.provide(element_schema_registry_1.ElementSchemaRegistry, {useExisting: dom_element_schema_registry_1.DomElementSchemaRegistry}), anchor_based_app_root_url_1.AnchorBasedAppRootUrl, di_1.provide(app_root_url_1.AppRootUrl, {useExisting: anchor_based_app_root_url_1.AnchorBasedAppRootUrl}), url_resolver_1.UrlResolver];\n  }\n  exports.compilerProviders = compilerProviders;\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"angular2/src/facade/async\", [\"angular2/src/facade/lang\", \"angular2/src/facade/promise\", \"@reactivex/rxjs/dist/cjs/Rx\", \"@reactivex/rxjs/dist/cjs/Rx\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  var __extends = (this && this.__extends) || function(d, b) {\n    for (var p in b)\n      if (b.hasOwnProperty(p))\n        d[p] = b[p];\n    function __() {\n      this.constructor = d;\n    }\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n  };\n  var lang_1 = require(\"angular2/src/facade/lang\");\n  var promise_1 = require(\"angular2/src/facade/promise\");\n  exports.PromiseWrapper = promise_1.PromiseWrapper;\n  exports.Promise = promise_1.Promise;\n  var Rx_1 = require(\"@reactivex/rxjs/dist/cjs/Rx\");\n  var Rx_2 = require(\"@reactivex/rxjs/dist/cjs/Rx\");\n  exports.Subject = Rx_2.Subject;\n  var TimerWrapper = (function() {\n    function TimerWrapper() {}\n    TimerWrapper.setTimeout = function(fn, millis) {\n      return lang_1.global.setTimeout(fn, millis);\n    };\n    TimerWrapper.clearTimeout = function(id) {\n      lang_1.global.clearTimeout(id);\n    };\n    TimerWrapper.setInterval = function(fn, millis) {\n      return lang_1.global.setInterval(fn, millis);\n    };\n    TimerWrapper.clearInterval = function(id) {\n      lang_1.global.clearInterval(id);\n    };\n    return TimerWrapper;\n  })();\n  exports.TimerWrapper = TimerWrapper;\n  var ObservableWrapper = (function() {\n    function ObservableWrapper() {}\n    ObservableWrapper.subscribe = function(emitter, onNext, onError, onComplete) {\n      if (onComplete === void 0) {\n        onComplete = function() {};\n      }\n      return emitter.subscribe({\n        next: onNext,\n        error: onError,\n        complete: onComplete\n      });\n    };\n    ObservableWrapper.isObservable = function(obs) {\n      return obs instanceof Rx_1.Observable;\n    };\n    ObservableWrapper.hasSubscribers = function(obs) {\n      return obs.observers.length > 0;\n    };\n    ObservableWrapper.dispose = function(subscription) {\n      subscription.unsubscribe();\n    };\n    ObservableWrapper.callNext = function(emitter, value) {\n      emitter.next(value);\n    };\n    ObservableWrapper.callError = function(emitter, error) {\n      emitter.error(error);\n    };\n    ObservableWrapper.callComplete = function(emitter) {\n      emitter.complete();\n    };\n    ObservableWrapper.fromPromise = function(promise) {\n      return Rx_1.Observable.fromPromise(promise);\n    };\n    ObservableWrapper.toPromise = function(obj) {\n      return obj.toPromise();\n    };\n    return ObservableWrapper;\n  })();\n  exports.ObservableWrapper = ObservableWrapper;\n  var EventEmitter = (function(_super) {\n    __extends(EventEmitter, _super);\n    function EventEmitter(isAsync) {\n      if (isAsync === void 0) {\n        isAsync = true;\n      }\n      _super.call(this);\n      this._isAsync = isAsync;\n    }\n    EventEmitter.prototype.subscribe = function(generatorOrNext, error, complete) {\n      if (generatorOrNext && typeof generatorOrNext === 'object') {\n        var schedulerFn = this._isAsync ? function(value) {\n          setTimeout(function() {\n            return generatorOrNext.next(value);\n          });\n        } : function(value) {\n          generatorOrNext.next(value);\n        };\n        return _super.prototype.subscribe.call(this, schedulerFn, function(err) {\n          return generatorOrNext.error ? generatorOrNext.error(err) : null;\n        }, function() {\n          return generatorOrNext.complete ? generatorOrNext.complete() : null;\n        });\n      } else {\n        var schedulerFn = this._isAsync ? function(value) {\n          setTimeout(function() {\n            return generatorOrNext(value);\n          });\n        } : function(value) {\n          generatorOrNext(value);\n        };\n        return _super.prototype.subscribe.call(this, schedulerFn, function(err) {\n          return error ? error(err) : null;\n        }, function() {\n          return complete ? complete() : null;\n        });\n      }\n    };\n    return EventEmitter;\n  })(Rx_1.Subject);\n  exports.EventEmitter = EventEmitter;\n  var Observable = (function(_super) {\n    __extends(Observable, _super);\n    function Observable() {\n      _super.apply(this, arguments);\n    }\n    Observable.prototype.lift = function(operator) {\n      var observable = new Observable();\n      observable.source = this;\n      observable.operator = operator;\n      return observable;\n    };\n    return Observable;\n  })(Rx_1.Observable);\n  exports.Observable = Observable;\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"angular2/src/core/change_detection\", [\"angular2/src/core/change_detection/change_detection\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  var change_detection_1 = require(\"angular2/src/core/change_detection/change_detection\");\n  exports.ChangeDetectionStrategy = change_detection_1.ChangeDetectionStrategy;\n  exports.ExpressionChangedAfterItHasBeenCheckedException = change_detection_1.ExpressionChangedAfterItHasBeenCheckedException;\n  exports.ChangeDetectionError = change_detection_1.ChangeDetectionError;\n  exports.ChangeDetectorRef = change_detection_1.ChangeDetectorRef;\n  exports.WrappedValue = change_detection_1.WrappedValue;\n  exports.SimpleChange = change_detection_1.SimpleChange;\n  exports.IterableDiffers = change_detection_1.IterableDiffers;\n  exports.KeyValueDiffers = change_detection_1.KeyValueDiffers;\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"angular2/src/core/linker/template_commands\", [\"angular2/src/facade/lang\", \"angular2/src/facade/exceptions\", \"angular2/src/core/render/render\", \"angular2/src/core/metadata\", \"angular2/src/core/metadata\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  var __extends = (this && this.__extends) || function(d, b) {\n    for (var p in b)\n      if (b.hasOwnProperty(p))\n        d[p] = b[p];\n    function __() {\n      this.constructor = d;\n    }\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n  };\n  var __decorate = (this && this.__decorate) || function(decorators, target, key, desc) {\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\")\n      return Reflect.decorate(decorators, target, key, desc);\n    switch (arguments.length) {\n      case 2:\n        return decorators.reduceRight(function(o, d) {\n          return (d && d(o)) || o;\n        }, target);\n      case 3:\n        return decorators.reduceRight(function(o, d) {\n          return (d && d(target, key)), void 0;\n        }, void 0);\n      case 4:\n        return decorators.reduceRight(function(o, d) {\n          return (d && d(target, key, o)) || o;\n        }, desc);\n    }\n  };\n  var __metadata = (this && this.__metadata) || function(k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\")\n      return Reflect.metadata(k, v);\n  };\n  var lang_1 = require(\"angular2/src/facade/lang\");\n  var exceptions_1 = require(\"angular2/src/facade/exceptions\");\n  var render_1 = require(\"angular2/src/core/render/render\");\n  var metadata_1 = require(\"angular2/src/core/metadata\");\n  var metadata_2 = require(\"angular2/src/core/metadata\");\n  exports.ViewEncapsulation = metadata_2.ViewEncapsulation;\n  var CompiledHostTemplate = (function() {\n    function CompiledHostTemplate(template) {\n      this.template = template;\n    }\n    CompiledHostTemplate = __decorate([lang_1.CONST(), __metadata('design:paramtypes', [CompiledComponentTemplate])], CompiledHostTemplate);\n    return CompiledHostTemplate;\n  })();\n  exports.CompiledHostTemplate = CompiledHostTemplate;\n  var CompiledComponentTemplate = (function() {\n    function CompiledComponentTemplate(id, changeDetectorFactory, commands, styles) {\n      this.id = id;\n      this.changeDetectorFactory = changeDetectorFactory;\n      this.commands = commands;\n      this.styles = styles;\n    }\n    CompiledComponentTemplate = __decorate([lang_1.CONST(), __metadata('design:paramtypes', [String, Function, Array, Array])], CompiledComponentTemplate);\n    return CompiledComponentTemplate;\n  })();\n  exports.CompiledComponentTemplate = CompiledComponentTemplate;\n  var EMPTY_ARR = lang_1.CONST_EXPR([]);\n  var TextCmd = (function() {\n    function TextCmd(value, isBound, ngContentIndex) {\n      this.value = value;\n      this.isBound = isBound;\n      this.ngContentIndex = ngContentIndex;\n    }\n    TextCmd.prototype.visit = function(visitor, context) {\n      return visitor.visitText(this, context);\n    };\n    TextCmd = __decorate([lang_1.CONST(), __metadata('design:paramtypes', [String, Boolean, Number])], TextCmd);\n    return TextCmd;\n  })();\n  exports.TextCmd = TextCmd;\n  var NgContentCmd = (function() {\n    function NgContentCmd(index, ngContentIndex) {\n      this.index = index;\n      this.ngContentIndex = ngContentIndex;\n      this.isBound = false;\n    }\n    NgContentCmd.prototype.visit = function(visitor, context) {\n      return visitor.visitNgContent(this, context);\n    };\n    NgContentCmd = __decorate([lang_1.CONST(), __metadata('design:paramtypes', [Number, Number])], NgContentCmd);\n    return NgContentCmd;\n  })();\n  exports.NgContentCmd = NgContentCmd;\n  var IBeginElementCmd = (function(_super) {\n    __extends(IBeginElementCmd, _super);\n    function IBeginElementCmd() {\n      _super.apply(this, arguments);\n    }\n    Object.defineProperty(IBeginElementCmd.prototype, \"variableNameAndValues\", {\n      get: function() {\n        return exceptions_1.unimplemented();\n      },\n      enumerable: true,\n      configurable: true\n    });\n    Object.defineProperty(IBeginElementCmd.prototype, \"eventTargetAndNames\", {\n      get: function() {\n        return exceptions_1.unimplemented();\n      },\n      enumerable: true,\n      configurable: true\n    });\n    Object.defineProperty(IBeginElementCmd.prototype, \"directives\", {\n      get: function() {\n        return exceptions_1.unimplemented();\n      },\n      enumerable: true,\n      configurable: true\n    });\n    return IBeginElementCmd;\n  })(render_1.RenderBeginElementCmd);\n  exports.IBeginElementCmd = IBeginElementCmd;\n  var BeginElementCmd = (function() {\n    function BeginElementCmd(name, attrNameAndValues, eventTargetAndNames, variableNameAndValues, directives, isBound, ngContentIndex) {\n      this.name = name;\n      this.attrNameAndValues = attrNameAndValues;\n      this.eventTargetAndNames = eventTargetAndNames;\n      this.variableNameAndValues = variableNameAndValues;\n      this.directives = directives;\n      this.isBound = isBound;\n      this.ngContentIndex = ngContentIndex;\n    }\n    BeginElementCmd.prototype.visit = function(visitor, context) {\n      return visitor.visitBeginElement(this, context);\n    };\n    BeginElementCmd = __decorate([lang_1.CONST(), __metadata('design:paramtypes', [String, Array, Array, Array, Array, Boolean, Number])], BeginElementCmd);\n    return BeginElementCmd;\n  })();\n  exports.BeginElementCmd = BeginElementCmd;\n  var EndElementCmd = (function() {\n    function EndElementCmd() {}\n    EndElementCmd.prototype.visit = function(visitor, context) {\n      return visitor.visitEndElement(context);\n    };\n    EndElementCmd = __decorate([lang_1.CONST(), __metadata('design:paramtypes', [])], EndElementCmd);\n    return EndElementCmd;\n  })();\n  exports.EndElementCmd = EndElementCmd;\n  var BeginComponentCmd = (function() {\n    function BeginComponentCmd(name, attrNameAndValues, eventTargetAndNames, variableNameAndValues, directives, encapsulation, ngContentIndex, templateGetter) {\n      this.name = name;\n      this.attrNameAndValues = attrNameAndValues;\n      this.eventTargetAndNames = eventTargetAndNames;\n      this.variableNameAndValues = variableNameAndValues;\n      this.directives = directives;\n      this.encapsulation = encapsulation;\n      this.ngContentIndex = ngContentIndex;\n      this.templateGetter = templateGetter;\n      this.isBound = true;\n    }\n    Object.defineProperty(BeginComponentCmd.prototype, \"templateId\", {\n      get: function() {\n        return this.templateGetter().id;\n      },\n      enumerable: true,\n      configurable: true\n    });\n    BeginComponentCmd.prototype.visit = function(visitor, context) {\n      return visitor.visitBeginComponent(this, context);\n    };\n    BeginComponentCmd = __decorate([lang_1.CONST(), __metadata('design:paramtypes', [String, Array, Array, Array, Array, Number, Number, Function])], BeginComponentCmd);\n    return BeginComponentCmd;\n  })();\n  exports.BeginComponentCmd = BeginComponentCmd;\n  var EndComponentCmd = (function() {\n    function EndComponentCmd() {}\n    EndComponentCmd.prototype.visit = function(visitor, context) {\n      return visitor.visitEndComponent(context);\n    };\n    EndComponentCmd = __decorate([lang_1.CONST(), __metadata('design:paramtypes', [])], EndComponentCmd);\n    return EndComponentCmd;\n  })();\n  exports.EndComponentCmd = EndComponentCmd;\n  var EmbeddedTemplateCmd = (function() {\n    function EmbeddedTemplateCmd(attrNameAndValues, variableNameAndValues, directives, isMerged, ngContentIndex, changeDetectorFactory, children) {\n      this.attrNameAndValues = attrNameAndValues;\n      this.variableNameAndValues = variableNameAndValues;\n      this.directives = directives;\n      this.isMerged = isMerged;\n      this.ngContentIndex = ngContentIndex;\n      this.changeDetectorFactory = changeDetectorFactory;\n      this.children = children;\n      this.isBound = true;\n      this.name = null;\n      this.eventTargetAndNames = EMPTY_ARR;\n    }\n    EmbeddedTemplateCmd.prototype.visit = function(visitor, context) {\n      return visitor.visitEmbeddedTemplate(this, context);\n    };\n    EmbeddedTemplateCmd = __decorate([lang_1.CONST(), __metadata('design:paramtypes', [Array, Array, Array, Boolean, Number, Function, Array])], EmbeddedTemplateCmd);\n    return EmbeddedTemplateCmd;\n  })();\n  exports.EmbeddedTemplateCmd = EmbeddedTemplateCmd;\n  function visitAllCommands(visitor, cmds, context) {\n    if (context === void 0) {\n      context = null;\n    }\n    for (var i = 0; i < cmds.length; i++) {\n      cmds[i].visit(visitor, context);\n    }\n  }\n  exports.visitAllCommands = visitAllCommands;\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"angular2/src/core/application\", [\"angular2/src/facade/lang\", \"angular2/src/compiler/compiler\", \"angular2/src/core/application_common\", \"angular2/src/core/application_tokens\", \"angular2/src/core/application_common\", \"angular2/src/core/application_ref\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  var lang_1 = require(\"angular2/src/facade/lang\");\n  var compiler_1 = require(\"angular2/src/compiler/compiler\");\n  var application_common_1 = require(\"angular2/src/core/application_common\");\n  var application_tokens_1 = require(\"angular2/src/core/application_tokens\");\n  exports.APP_COMPONENT = application_tokens_1.APP_COMPONENT;\n  exports.APP_ID = application_tokens_1.APP_ID;\n  var application_common_2 = require(\"angular2/src/core/application_common\");\n  exports.platform = application_common_2.platform;\n  var application_ref_1 = require(\"angular2/src/core/application_ref\");\n  exports.PlatformRef = application_ref_1.PlatformRef;\n  exports.ApplicationRef = application_ref_1.ApplicationRef;\n  exports.applicationCommonProviders = application_ref_1.applicationCommonProviders;\n  exports.createNgZone = application_ref_1.createNgZone;\n  exports.platformCommon = application_ref_1.platformCommon;\n  exports.platformProviders = application_ref_1.platformProviders;\n  function bootstrap(appComponentType, appProviders) {\n    if (appProviders === void 0) {\n      appProviders = null;\n    }\n    var providers = [compiler_1.compilerProviders()];\n    if (lang_1.isPresent(appProviders)) {\n      providers.push(appProviders);\n    }\n    return application_common_1.commonBootstrap(appComponentType, providers);\n  }\n  exports.bootstrap = bootstrap;\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"angular2/src/core/metadata/directives\", [\"angular2/src/facade/lang\", \"angular2/src/core/di/metadata\", \"angular2/src/core/change_detection\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  var __extends = (this && this.__extends) || function(d, b) {\n    for (var p in b)\n      if (b.hasOwnProperty(p))\n        d[p] = b[p];\n    function __() {\n      this.constructor = d;\n    }\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n  };\n  var __decorate = (this && this.__decorate) || function(decorators, target, key, desc) {\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\")\n      return Reflect.decorate(decorators, target, key, desc);\n    switch (arguments.length) {\n      case 2:\n        return decorators.reduceRight(function(o, d) {\n          return (d && d(o)) || o;\n        }, target);\n      case 3:\n        return decorators.reduceRight(function(o, d) {\n          return (d && d(target, key)), void 0;\n        }, void 0);\n      case 4:\n        return decorators.reduceRight(function(o, d) {\n          return (d && d(target, key, o)) || o;\n        }, desc);\n    }\n  };\n  var __metadata = (this && this.__metadata) || function(k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\")\n      return Reflect.metadata(k, v);\n  };\n  var lang_1 = require(\"angular2/src/facade/lang\");\n  var metadata_1 = require(\"angular2/src/core/di/metadata\");\n  var change_detection_1 = require(\"angular2/src/core/change_detection\");\n  var DirectiveMetadata = (function(_super) {\n    __extends(DirectiveMetadata, _super);\n    function DirectiveMetadata(_a) {\n      var _b = _a === void 0 ? {} : _a,\n          selector = _b.selector,\n          inputs = _b.inputs,\n          outputs = _b.outputs,\n          properties = _b.properties,\n          events = _b.events,\n          host = _b.host,\n          bindings = _b.bindings,\n          providers = _b.providers,\n          exportAs = _b.exportAs,\n          moduleId = _b.moduleId,\n          queries = _b.queries;\n      _super.call(this);\n      this.selector = selector;\n      this._inputs = inputs;\n      this._properties = properties;\n      this._outputs = outputs;\n      this._events = events;\n      this.host = host;\n      this.exportAs = exportAs;\n      this.moduleId = moduleId;\n      this.queries = queries;\n      this._providers = providers;\n      this._bindings = bindings;\n    }\n    Object.defineProperty(DirectiveMetadata.prototype, \"inputs\", {\n      get: function() {\n        return lang_1.isPresent(this._properties) && this._properties.length > 0 ? this._properties : this._inputs;\n      },\n      enumerable: true,\n      configurable: true\n    });\n    Object.defineProperty(DirectiveMetadata.prototype, \"properties\", {\n      get: function() {\n        return this.inputs;\n      },\n      enumerable: true,\n      configurable: true\n    });\n    Object.defineProperty(DirectiveMetadata.prototype, \"outputs\", {\n      get: function() {\n        return lang_1.isPresent(this._events) && this._events.length > 0 ? this._events : this._outputs;\n      },\n      enumerable: true,\n      configurable: true\n    });\n    Object.defineProperty(DirectiveMetadata.prototype, \"events\", {\n      get: function() {\n        return this.outputs;\n      },\n      enumerable: true,\n      configurable: true\n    });\n    Object.defineProperty(DirectiveMetadata.prototype, \"providers\", {\n      get: function() {\n        return lang_1.isPresent(this._bindings) && this._bindings.length > 0 ? this._bindings : this._providers;\n      },\n      enumerable: true,\n      configurable: true\n    });\n    Object.defineProperty(DirectiveMetadata.prototype, \"bindings\", {\n      get: function() {\n        return this.providers;\n      },\n      enumerable: true,\n      configurable: true\n    });\n    DirectiveMetadata = __decorate([lang_1.CONST(), __metadata('design:paramtypes', [Object])], DirectiveMetadata);\n    return DirectiveMetadata;\n  })(metadata_1.InjectableMetadata);\n  exports.DirectiveMetadata = DirectiveMetadata;\n  var ComponentMetadata = (function(_super) {\n    __extends(ComponentMetadata, _super);\n    function ComponentMetadata(_a) {\n      var _b = _a === void 0 ? {} : _a,\n          selector = _b.selector,\n          inputs = _b.inputs,\n          outputs = _b.outputs,\n          properties = _b.properties,\n          events = _b.events,\n          host = _b.host,\n          exportAs = _b.exportAs,\n          moduleId = _b.moduleId,\n          bindings = _b.bindings,\n          providers = _b.providers,\n          viewBindings = _b.viewBindings,\n          viewProviders = _b.viewProviders,\n          _c = _b.changeDetection,\n          changeDetection = _c === void 0 ? change_detection_1.ChangeDetectionStrategy.Default : _c,\n          queries = _b.queries,\n          templateUrl = _b.templateUrl,\n          template = _b.template,\n          styleUrls = _b.styleUrls,\n          styles = _b.styles,\n          directives = _b.directives,\n          pipes = _b.pipes,\n          encapsulation = _b.encapsulation;\n      _super.call(this, {\n        selector: selector,\n        inputs: inputs,\n        outputs: outputs,\n        properties: properties,\n        events: events,\n        host: host,\n        exportAs: exportAs,\n        moduleId: moduleId,\n        bindings: bindings,\n        providers: providers,\n        queries: queries\n      });\n      this.changeDetection = changeDetection;\n      this._viewProviders = viewProviders;\n      this._viewBindings = viewBindings;\n      this.templateUrl = templateUrl;\n      this.template = template;\n      this.styleUrls = styleUrls;\n      this.styles = styles;\n      this.directives = directives;\n      this.pipes = pipes;\n      this.encapsulation = encapsulation;\n    }\n    Object.defineProperty(ComponentMetadata.prototype, \"viewProviders\", {\n      get: function() {\n        return lang_1.isPresent(this._viewBindings) && this._viewBindings.length > 0 ? this._viewBindings : this._viewProviders;\n      },\n      enumerable: true,\n      configurable: true\n    });\n    Object.defineProperty(ComponentMetadata.prototype, \"viewBindings\", {\n      get: function() {\n        return this.viewProviders;\n      },\n      enumerable: true,\n      configurable: true\n    });\n    ComponentMetadata = __decorate([lang_1.CONST(), __metadata('design:paramtypes', [Object])], ComponentMetadata);\n    return ComponentMetadata;\n  })(DirectiveMetadata);\n  exports.ComponentMetadata = ComponentMetadata;\n  var PipeMetadata = (function(_super) {\n    __extends(PipeMetadata, _super);\n    function PipeMetadata(_a) {\n      var name = _a.name,\n          pure = _a.pure;\n      _super.call(this);\n      this.name = name;\n      this._pure = pure;\n    }\n    Object.defineProperty(PipeMetadata.prototype, \"pure\", {\n      get: function() {\n        return lang_1.isPresent(this._pure) ? this._pure : true;\n      },\n      enumerable: true,\n      configurable: true\n    });\n    PipeMetadata = __decorate([lang_1.CONST(), __metadata('design:paramtypes', [Object])], PipeMetadata);\n    return PipeMetadata;\n  })(metadata_1.InjectableMetadata);\n  exports.PipeMetadata = PipeMetadata;\n  var InputMetadata = (function() {\n    function InputMetadata(bindingPropertyName) {\n      this.bindingPropertyName = bindingPropertyName;\n    }\n    InputMetadata = __decorate([lang_1.CONST(), __metadata('design:paramtypes', [String])], InputMetadata);\n    return InputMetadata;\n  })();\n  exports.InputMetadata = InputMetadata;\n  var OutputMetadata = (function() {\n    function OutputMetadata(bindingPropertyName) {\n      this.bindingPropertyName = bindingPropertyName;\n    }\n    OutputMetadata = __decorate([lang_1.CONST(), __metadata('design:paramtypes', [String])], OutputMetadata);\n    return OutputMetadata;\n  })();\n  exports.OutputMetadata = OutputMetadata;\n  var HostBindingMetadata = (function() {\n    function HostBindingMetadata(hostPropertyName) {\n      this.hostPropertyName = hostPropertyName;\n    }\n    HostBindingMetadata = __decorate([lang_1.CONST(), __metadata('design:paramtypes', [String])], HostBindingMetadata);\n    return HostBindingMetadata;\n  })();\n  exports.HostBindingMetadata = HostBindingMetadata;\n  var HostListenerMetadata = (function() {\n    function HostListenerMetadata(eventName, args) {\n      this.eventName = eventName;\n      this.args = args;\n    }\n    HostListenerMetadata = __decorate([lang_1.CONST(), __metadata('design:paramtypes', [String, Array])], HostListenerMetadata);\n    return HostListenerMetadata;\n  })();\n  exports.HostListenerMetadata = HostListenerMetadata;\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"angular2/src/core/linker/proto_view_factory\", [\"angular2/src/facade/lang\", \"angular2/src/core/render/api\", \"angular2/src/core/di\", \"angular2/src/core/pipes/pipe_provider\", \"angular2/src/core/pipes/pipes\", \"angular2/src/core/linker/view\", \"angular2/src/core/linker/element_binder\", \"angular2/src/core/linker/element_injector\", \"angular2/src/core/linker/directive_resolver\", \"angular2/src/core/linker/view_resolver\", \"angular2/src/core/linker/pipe_resolver\", \"angular2/src/core/metadata/view\", \"angular2/src/core/platform_directives_and_pipes\", \"angular2/src/core/linker/template_commands\", \"angular2/render\", \"angular2/src/core/application_tokens\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  var __decorate = (this && this.__decorate) || function(decorators, target, key, desc) {\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\")\n      return Reflect.decorate(decorators, target, key, desc);\n    switch (arguments.length) {\n      case 2:\n        return decorators.reduceRight(function(o, d) {\n          return (d && d(o)) || o;\n        }, target);\n      case 3:\n        return decorators.reduceRight(function(o, d) {\n          return (d && d(target, key)), void 0;\n        }, void 0);\n      case 4:\n        return decorators.reduceRight(function(o, d) {\n          return (d && d(target, key, o)) || o;\n        }, desc);\n    }\n  };\n  var __metadata = (this && this.__metadata) || function(k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\")\n      return Reflect.metadata(k, v);\n  };\n  var __param = (this && this.__param) || function(paramIndex, decorator) {\n    return function(target, key) {\n      decorator(target, key, paramIndex);\n    };\n  };\n  var lang_1 = require(\"angular2/src/facade/lang\");\n  var api_1 = require(\"angular2/src/core/render/api\");\n  var di_1 = require(\"angular2/src/core/di\");\n  var pipe_provider_1 = require(\"angular2/src/core/pipes/pipe_provider\");\n  var pipes_1 = require(\"angular2/src/core/pipes/pipes\");\n  var view_1 = require(\"angular2/src/core/linker/view\");\n  var element_binder_1 = require(\"angular2/src/core/linker/element_binder\");\n  var element_injector_1 = require(\"angular2/src/core/linker/element_injector\");\n  var directive_resolver_1 = require(\"angular2/src/core/linker/directive_resolver\");\n  var view_resolver_1 = require(\"angular2/src/core/linker/view_resolver\");\n  var pipe_resolver_1 = require(\"angular2/src/core/linker/pipe_resolver\");\n  var view_2 = require(\"angular2/src/core/metadata/view\");\n  var platform_directives_and_pipes_1 = require(\"angular2/src/core/platform_directives_and_pipes\");\n  var template_commands_1 = require(\"angular2/src/core/linker/template_commands\");\n  var render_1 = require(\"angular2/render\");\n  var application_tokens_1 = require(\"angular2/src/core/application_tokens\");\n  var ProtoViewFactory = (function() {\n    function ProtoViewFactory(_renderer, _platformPipes, _directiveResolver, _viewResolver, _pipeResolver, _appId) {\n      this._renderer = _renderer;\n      this._platformPipes = _platformPipes;\n      this._directiveResolver = _directiveResolver;\n      this._viewResolver = _viewResolver;\n      this._pipeResolver = _pipeResolver;\n      this._appId = _appId;\n      this._cache = new Map();\n      this._nextTemplateId = 0;\n    }\n    ProtoViewFactory.prototype.clearCache = function() {\n      this._cache.clear();\n    };\n    ProtoViewFactory.prototype.createHost = function(compiledHostTemplate) {\n      var compiledTemplate = compiledHostTemplate.template;\n      var result = this._cache.get(compiledTemplate.id);\n      if (lang_1.isBlank(result)) {\n        var emptyMap = {};\n        var shortId = this._appId + \"-\" + this._nextTemplateId++;\n        this._renderer.registerComponentTemplate(new api_1.RenderComponentTemplate(compiledTemplate.id, shortId, view_2.ViewEncapsulation.None, compiledTemplate.commands, []));\n        result = new view_1.AppProtoView(compiledTemplate.id, compiledTemplate.commands, view_1.ViewType.HOST, true, compiledTemplate.changeDetectorFactory, null, new pipes_1.ProtoPipes(emptyMap));\n        this._cache.set(compiledTemplate.id, result);\n      }\n      return result;\n    };\n    ProtoViewFactory.prototype._createComponent = function(cmd) {\n      var _this = this;\n      var nestedProtoView = this._cache.get(cmd.templateId);\n      if (lang_1.isBlank(nestedProtoView)) {\n        var component = cmd.directives[0];\n        var view = this._viewResolver.resolve(component);\n        var compiledTemplate = cmd.templateGetter();\n        var styles = _flattenStyleArr(compiledTemplate.styles, []);\n        var shortId = this._appId + \"-\" + this._nextTemplateId++;\n        this._renderer.registerComponentTemplate(new api_1.RenderComponentTemplate(compiledTemplate.id, shortId, cmd.encapsulation, compiledTemplate.commands, styles));\n        var boundPipes = this._flattenPipes(view).map(function(pipe) {\n          return _this._bindPipe(pipe);\n        });\n        nestedProtoView = new view_1.AppProtoView(compiledTemplate.id, compiledTemplate.commands, view_1.ViewType.COMPONENT, true, compiledTemplate.changeDetectorFactory, null, pipes_1.ProtoPipes.fromProviders(boundPipes));\n        this._cache.set(compiledTemplate.id, nestedProtoView);\n        this._initializeProtoView(nestedProtoView, null);\n      }\n      return nestedProtoView;\n    };\n    ProtoViewFactory.prototype._createEmbeddedTemplate = function(cmd, parent) {\n      var nestedProtoView = new view_1.AppProtoView(parent.templateId, cmd.children, view_1.ViewType.EMBEDDED, cmd.isMerged, cmd.changeDetectorFactory, arrayToMap(cmd.variableNameAndValues, true), new pipes_1.ProtoPipes(parent.pipes.config));\n      if (cmd.isMerged) {\n        this.initializeProtoViewIfNeeded(nestedProtoView);\n      }\n      return nestedProtoView;\n    };\n    ProtoViewFactory.prototype.initializeProtoViewIfNeeded = function(protoView) {\n      if (!protoView.isInitialized()) {\n        var render = this._renderer.createProtoView(protoView.templateId, protoView.templateCmds);\n        this._initializeProtoView(protoView, render);\n      }\n    };\n    ProtoViewFactory.prototype._initializeProtoView = function(protoView, render) {\n      var initializer = new _ProtoViewInitializer(protoView, this._directiveResolver, this);\n      template_commands_1.visitAllCommands(initializer, protoView.templateCmds);\n      var mergeInfo = new view_1.AppProtoViewMergeInfo(initializer.mergeEmbeddedViewCount, initializer.mergeElementCount, initializer.mergeViewCount);\n      protoView.init(render, initializer.elementBinders, initializer.boundTextCount, mergeInfo, initializer.variableLocations);\n    };\n    ProtoViewFactory.prototype._bindPipe = function(typeOrProvider) {\n      var meta = this._pipeResolver.resolve(typeOrProvider);\n      return pipe_provider_1.PipeProvider.createFromType(typeOrProvider, meta);\n    };\n    ProtoViewFactory.prototype._flattenPipes = function(view) {\n      var pipes = [];\n      if (lang_1.isPresent(this._platformPipes)) {\n        _flattenArray(this._platformPipes, pipes);\n      }\n      if (lang_1.isPresent(view.pipes)) {\n        _flattenArray(view.pipes, pipes);\n      }\n      return pipes;\n    };\n    ProtoViewFactory = __decorate([di_1.Injectable(), __param(1, di_1.Optional()), __param(1, di_1.Inject(platform_directives_and_pipes_1.PLATFORM_PIPES)), __param(5, di_1.Inject(application_tokens_1.APP_ID)), __metadata('design:paramtypes', [render_1.Renderer, Array, directive_resolver_1.DirectiveResolver, view_resolver_1.ViewResolver, pipe_resolver_1.PipeResolver, String])], ProtoViewFactory);\n    return ProtoViewFactory;\n  })();\n  exports.ProtoViewFactory = ProtoViewFactory;\n  function createComponent(protoViewFactory, cmd) {\n    return protoViewFactory._createComponent(cmd);\n  }\n  function createEmbeddedTemplate(protoViewFactory, cmd, parent) {\n    return protoViewFactory._createEmbeddedTemplate(cmd, parent);\n  }\n  var _ProtoViewInitializer = (function() {\n    function _ProtoViewInitializer(_protoView, _directiveResolver, _protoViewFactory) {\n      this._protoView = _protoView;\n      this._directiveResolver = _directiveResolver;\n      this._protoViewFactory = _protoViewFactory;\n      this.variableLocations = new Map();\n      this.boundTextCount = 0;\n      this.boundElementIndex = 0;\n      this.elementBinderStack = [];\n      this.distanceToParentElementBinder = 0;\n      this.distanceToParentProtoElementInjector = 0;\n      this.elementBinders = [];\n      this.mergeEmbeddedViewCount = 0;\n      this.mergeElementCount = 0;\n      this.mergeViewCount = 1;\n    }\n    _ProtoViewInitializer.prototype.visitText = function(cmd, context) {\n      if (cmd.isBound) {\n        this.boundTextCount++;\n      }\n      return null;\n    };\n    _ProtoViewInitializer.prototype.visitNgContent = function(cmd, context) {\n      return null;\n    };\n    _ProtoViewInitializer.prototype.visitBeginElement = function(cmd, context) {\n      if (cmd.isBound) {\n        this._visitBeginBoundElement(cmd, null);\n      } else {\n        this._visitBeginElement(cmd, null, null);\n      }\n      return null;\n    };\n    _ProtoViewInitializer.prototype.visitEndElement = function(context) {\n      return this._visitEndElement();\n    };\n    _ProtoViewInitializer.prototype.visitBeginComponent = function(cmd, context) {\n      var nestedProtoView = createComponent(this._protoViewFactory, cmd);\n      return this._visitBeginBoundElement(cmd, nestedProtoView);\n    };\n    _ProtoViewInitializer.prototype.visitEndComponent = function(context) {\n      return this._visitEndElement();\n    };\n    _ProtoViewInitializer.prototype.visitEmbeddedTemplate = function(cmd, context) {\n      var nestedProtoView = createEmbeddedTemplate(this._protoViewFactory, cmd, this._protoView);\n      if (cmd.isMerged) {\n        this.mergeEmbeddedViewCount++;\n      }\n      this._visitBeginBoundElement(cmd, nestedProtoView);\n      return this._visitEndElement();\n    };\n    _ProtoViewInitializer.prototype._visitBeginBoundElement = function(cmd, nestedProtoView) {\n      if (lang_1.isPresent(nestedProtoView) && nestedProtoView.isMergable) {\n        this.mergeElementCount += nestedProtoView.mergeInfo.elementCount;\n        this.mergeViewCount += nestedProtoView.mergeInfo.viewCount;\n        this.mergeEmbeddedViewCount += nestedProtoView.mergeInfo.embeddedViewCount;\n      }\n      var elementBinder = _createElementBinder(this._directiveResolver, nestedProtoView, this.elementBinderStack, this.boundElementIndex, this.distanceToParentElementBinder, this.distanceToParentProtoElementInjector, cmd);\n      this.elementBinders.push(elementBinder);\n      var protoElementInjector = elementBinder.protoElementInjector;\n      for (var i = 0; i < cmd.variableNameAndValues.length; i += 2) {\n        this.variableLocations.set(cmd.variableNameAndValues[i], this.boundElementIndex);\n      }\n      this.boundElementIndex++;\n      this.mergeElementCount++;\n      return this._visitBeginElement(cmd, elementBinder, protoElementInjector);\n    };\n    _ProtoViewInitializer.prototype._visitBeginElement = function(cmd, elementBinder, protoElementInjector) {\n      this.distanceToParentElementBinder = lang_1.isPresent(elementBinder) ? 1 : this.distanceToParentElementBinder + 1;\n      this.distanceToParentProtoElementInjector = lang_1.isPresent(protoElementInjector) ? 1 : this.distanceToParentProtoElementInjector + 1;\n      this.elementBinderStack.push(elementBinder);\n      return null;\n    };\n    _ProtoViewInitializer.prototype._visitEndElement = function() {\n      var parentElementBinder = this.elementBinderStack.pop();\n      var parentProtoElementInjector = lang_1.isPresent(parentElementBinder) ? parentElementBinder.protoElementInjector : null;\n      this.distanceToParentElementBinder = lang_1.isPresent(parentElementBinder) ? parentElementBinder.distanceToParent : this.distanceToParentElementBinder - 1;\n      this.distanceToParentProtoElementInjector = lang_1.isPresent(parentProtoElementInjector) ? parentProtoElementInjector.distanceToParent : this.distanceToParentProtoElementInjector - 1;\n      return null;\n    };\n    return _ProtoViewInitializer;\n  })();\n  function _createElementBinder(directiveResolver, nestedProtoView, elementBinderStack, boundElementIndex, distanceToParentBinder, distanceToParentPei, beginElementCmd) {\n    var parentElementBinder = null;\n    var parentProtoElementInjector = null;\n    if (distanceToParentBinder > 0) {\n      parentElementBinder = elementBinderStack[elementBinderStack.length - distanceToParentBinder];\n    }\n    if (lang_1.isBlank(parentElementBinder)) {\n      distanceToParentBinder = -1;\n    }\n    if (distanceToParentPei > 0) {\n      var peiBinder = elementBinderStack[elementBinderStack.length - distanceToParentPei];\n      if (lang_1.isPresent(peiBinder)) {\n        parentProtoElementInjector = peiBinder.protoElementInjector;\n      }\n    }\n    if (lang_1.isBlank(parentProtoElementInjector)) {\n      distanceToParentPei = -1;\n    }\n    var componentDirectiveProvider = null;\n    var isEmbeddedTemplate = false;\n    var directiveProviders = beginElementCmd.directives.map(function(type) {\n      return provideDirective(directiveResolver, type);\n    });\n    if (beginElementCmd instanceof template_commands_1.BeginComponentCmd) {\n      componentDirectiveProvider = directiveProviders[0];\n    } else if (beginElementCmd instanceof template_commands_1.EmbeddedTemplateCmd) {\n      isEmbeddedTemplate = true;\n    }\n    var protoElementInjector = null;\n    var hasVariables = beginElementCmd.variableNameAndValues.length > 0;\n    if (directiveProviders.length > 0 || hasVariables || isEmbeddedTemplate) {\n      var directiveVariableBindings = new Map();\n      if (!isEmbeddedTemplate) {\n        directiveVariableBindings = createDirectiveVariableBindings(beginElementCmd.variableNameAndValues, directiveProviders);\n      }\n      protoElementInjector = element_injector_1.ProtoElementInjector.create(parentProtoElementInjector, boundElementIndex, directiveProviders, lang_1.isPresent(componentDirectiveProvider), distanceToParentPei, directiveVariableBindings);\n      protoElementInjector.attributes = arrayToMap(beginElementCmd.attrNameAndValues, false);\n    }\n    return new element_binder_1.ElementBinder(boundElementIndex, parentElementBinder, distanceToParentBinder, protoElementInjector, componentDirectiveProvider, nestedProtoView);\n  }\n  function provideDirective(directiveResolver, type) {\n    var annotation = directiveResolver.resolve(type);\n    return element_injector_1.DirectiveProvider.createFromType(type, annotation);\n  }\n  function createDirectiveVariableBindings(variableNameAndValues, directiveProviders) {\n    var directiveVariableBindings = new Map();\n    for (var i = 0; i < variableNameAndValues.length; i += 2) {\n      var templateName = variableNameAndValues[i];\n      var dirIndex = variableNameAndValues[i + 1];\n      if (lang_1.isNumber(dirIndex)) {\n        directiveVariableBindings.set(templateName, dirIndex);\n      } else {\n        directiveVariableBindings.set(templateName, null);\n      }\n    }\n    return directiveVariableBindings;\n  }\n  exports.createDirectiveVariableBindings = createDirectiveVariableBindings;\n  function arrayToMap(arr, inverse) {\n    var result = new Map();\n    for (var i = 0; i < arr.length; i += 2) {\n      if (inverse) {\n        result.set(arr[i + 1], arr[i]);\n      } else {\n        result.set(arr[i], arr[i + 1]);\n      }\n    }\n    return result;\n  }\n  function _flattenArray(tree, out) {\n    for (var i = 0; i < tree.length; i++) {\n      var item = di_1.resolveForwardRef(tree[i]);\n      if (lang_1.isArray(item)) {\n        _flattenArray(item, out);\n      } else {\n        out.push(item);\n      }\n    }\n  }\n  function _flattenStyleArr(arr, out) {\n    for (var i = 0; i < arr.length; i++) {\n      var entry = arr[i];\n      if (lang_1.isArray(entry)) {\n        _flattenStyleArr(entry, out);\n      } else {\n        out.push(entry);\n      }\n    }\n    return out;\n  }\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"angular2/core\", [\"angular2/src/core/metadata\", \"angular2/src/core/util\", \"angular2/src/core/di\", \"angular2/src/common/pipes\", \"angular2/src/facade/facade\", \"angular2/src/core/application\", \"angular2/src/core/bootstrap\", \"angular2/src/core/services\", \"angular2/src/core/linker\", \"angular2/src/core/application_ref\", \"angular2/src/core/zone\", \"angular2/src/core/render\", \"angular2/src/common/directives\", \"angular2/src/common/forms\", \"angular2/src/core/debug\", \"angular2/src/core/change_detection\", \"angular2/src/core/platform_directives_and_pipes\", \"angular2/src/core/dev_mode\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  function __export(m) {\n    for (var p in m)\n      if (!exports.hasOwnProperty(p))\n        exports[p] = m[p];\n  }\n  __export(require(\"angular2/src/core/metadata\"));\n  __export(require(\"angular2/src/core/util\"));\n  __export(require(\"angular2/src/core/di\"));\n  __export(require(\"angular2/src/common/pipes\"));\n  __export(require(\"angular2/src/facade/facade\"));\n  __export(require(\"angular2/src/core/application\"));\n  __export(require(\"angular2/src/core/bootstrap\"));\n  __export(require(\"angular2/src/core/services\"));\n  __export(require(\"angular2/src/core/linker\"));\n  var application_ref_1 = require(\"angular2/src/core/application_ref\");\n  exports.ApplicationRef = application_ref_1.ApplicationRef;\n  __export(require(\"angular2/src/core/zone\"));\n  __export(require(\"angular2/src/core/render\"));\n  __export(require(\"angular2/src/common/directives\"));\n  __export(require(\"angular2/src/common/forms\"));\n  __export(require(\"angular2/src/core/debug\"));\n  __export(require(\"angular2/src/core/change_detection\"));\n  __export(require(\"angular2/src/core/platform_directives_and_pipes\"));\n  __export(require(\"angular2/src/core/dev_mode\"));\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"angular2/src/core/metadata\", [\"angular2/src/core/metadata/di\", \"angular2/src/core/metadata/directives\", \"angular2/src/core/metadata/view\", \"angular2/src/core/metadata/di\", \"angular2/src/core/metadata/directives\", \"angular2/src/core/metadata/view\", \"angular2/src/core/util/decorators\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  var di_1 = require(\"angular2/src/core/metadata/di\");\n  exports.QueryMetadata = di_1.QueryMetadata;\n  exports.ContentChildrenMetadata = di_1.ContentChildrenMetadata;\n  exports.ContentChildMetadata = di_1.ContentChildMetadata;\n  exports.ViewChildrenMetadata = di_1.ViewChildrenMetadata;\n  exports.ViewQueryMetadata = di_1.ViewQueryMetadata;\n  exports.ViewChildMetadata = di_1.ViewChildMetadata;\n  exports.AttributeMetadata = di_1.AttributeMetadata;\n  var directives_1 = require(\"angular2/src/core/metadata/directives\");\n  exports.ComponentMetadata = directives_1.ComponentMetadata;\n  exports.DirectiveMetadata = directives_1.DirectiveMetadata;\n  exports.PipeMetadata = directives_1.PipeMetadata;\n  exports.InputMetadata = directives_1.InputMetadata;\n  exports.OutputMetadata = directives_1.OutputMetadata;\n  exports.HostBindingMetadata = directives_1.HostBindingMetadata;\n  exports.HostListenerMetadata = directives_1.HostListenerMetadata;\n  var view_1 = require(\"angular2/src/core/metadata/view\");\n  exports.ViewMetadata = view_1.ViewMetadata;\n  exports.ViewEncapsulation = view_1.ViewEncapsulation;\n  var di_2 = require(\"angular2/src/core/metadata/di\");\n  var directives_2 = require(\"angular2/src/core/metadata/directives\");\n  var view_2 = require(\"angular2/src/core/metadata/view\");\n  var decorators_1 = require(\"angular2/src/core/util/decorators\");\n  exports.Component = decorators_1.makeDecorator(directives_2.ComponentMetadata, function(fn) {\n    return fn.View = exports.View;\n  });\n  exports.Directive = decorators_1.makeDecorator(directives_2.DirectiveMetadata);\n  exports.View = decorators_1.makeDecorator(view_2.ViewMetadata, function(fn) {\n    return fn.View = exports.View;\n  });\n  exports.Attribute = decorators_1.makeParamDecorator(di_2.AttributeMetadata);\n  exports.Query = decorators_1.makeParamDecorator(di_2.QueryMetadata);\n  exports.ContentChildren = decorators_1.makePropDecorator(di_2.ContentChildrenMetadata);\n  exports.ContentChild = decorators_1.makePropDecorator(di_2.ContentChildMetadata);\n  exports.ViewChildren = decorators_1.makePropDecorator(di_2.ViewChildrenMetadata);\n  exports.ViewChild = decorators_1.makePropDecorator(di_2.ViewChildMetadata);\n  exports.ViewQuery = decorators_1.makeParamDecorator(di_2.ViewQueryMetadata);\n  exports.Pipe = decorators_1.makeDecorator(directives_2.PipeMetadata);\n  exports.Input = decorators_1.makePropDecorator(directives_2.InputMetadata);\n  exports.Output = decorators_1.makePropDecorator(directives_2.OutputMetadata);\n  exports.HostBinding = decorators_1.makePropDecorator(directives_2.HostBindingMetadata);\n  exports.HostListener = decorators_1.makePropDecorator(directives_2.HostListenerMetadata);\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"angular2/src/core/linker/compiler\", [\"angular2/src/core/linker/proto_view_factory\", \"angular2/src/core/di\", \"angular2/src/facade/lang\", \"angular2/src/facade/exceptions\", \"angular2/src/facade/async\", \"angular2/src/core/reflection/reflection\", \"angular2/src/core/linker/template_commands\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  var __extends = (this && this.__extends) || function(d, b) {\n    for (var p in b)\n      if (b.hasOwnProperty(p))\n        d[p] = b[p];\n    function __() {\n      this.constructor = d;\n    }\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n  };\n  var __decorate = (this && this.__decorate) || function(decorators, target, key, desc) {\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\")\n      return Reflect.decorate(decorators, target, key, desc);\n    switch (arguments.length) {\n      case 2:\n        return decorators.reduceRight(function(o, d) {\n          return (d && d(o)) || o;\n        }, target);\n      case 3:\n        return decorators.reduceRight(function(o, d) {\n          return (d && d(target, key)), void 0;\n        }, void 0);\n      case 4:\n        return decorators.reduceRight(function(o, d) {\n          return (d && d(target, key, o)) || o;\n        }, desc);\n    }\n  };\n  var __metadata = (this && this.__metadata) || function(k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\")\n      return Reflect.metadata(k, v);\n  };\n  var proto_view_factory_1 = require(\"angular2/src/core/linker/proto_view_factory\");\n  var di_1 = require(\"angular2/src/core/di\");\n  var lang_1 = require(\"angular2/src/facade/lang\");\n  var exceptions_1 = require(\"angular2/src/facade/exceptions\");\n  var async_1 = require(\"angular2/src/facade/async\");\n  var reflection_1 = require(\"angular2/src/core/reflection/reflection\");\n  var template_commands_1 = require(\"angular2/src/core/linker/template_commands\");\n  var Compiler = (function() {\n    function Compiler() {}\n    return Compiler;\n  })();\n  exports.Compiler = Compiler;\n  function _isCompiledHostTemplate(type) {\n    return type instanceof template_commands_1.CompiledHostTemplate;\n  }\n  var Compiler_ = (function(_super) {\n    __extends(Compiler_, _super);\n    function Compiler_(_protoViewFactory) {\n      _super.call(this);\n      this._protoViewFactory = _protoViewFactory;\n    }\n    Compiler_.prototype.compileInHost = function(componentType) {\n      var metadatas = reflection_1.reflector.annotations(componentType);\n      var compiledHostTemplate = metadatas.find(_isCompiledHostTemplate);\n      if (lang_1.isBlank(compiledHostTemplate)) {\n        throw new exceptions_1.BaseException(\"No precompiled template for component \" + lang_1.stringify(componentType) + \" found\");\n      }\n      return async_1.PromiseWrapper.resolve(this._createProtoView(compiledHostTemplate));\n    };\n    Compiler_.prototype._createProtoView = function(compiledHostTemplate) {\n      return this._protoViewFactory.createHost(compiledHostTemplate).ref;\n    };\n    Compiler_.prototype.clearCache = function() {\n      this._protoViewFactory.clearCache();\n    };\n    Compiler_ = __decorate([di_1.Injectable(), __metadata('design:paramtypes', [proto_view_factory_1.ProtoViewFactory])], Compiler_);\n    return Compiler_;\n  })(Compiler);\n  exports.Compiler_ = Compiler_;\n  function internalCreateProtoView(compiler, compiledHostTemplate) {\n    return compiler._createProtoView(compiledHostTemplate);\n  }\n  exports.internalCreateProtoView = internalCreateProtoView;\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"angular2/src/common/pipes/async_pipe\", [\"angular2/src/facade/lang\", \"angular2/src/facade/async\", \"angular2/src/core/metadata\", \"angular2/src/core/di\", \"angular2/src/core/change_detection\", \"angular2/src/common/pipes/invalid_pipe_argument_exception\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  var __decorate = (this && this.__decorate) || function(decorators, target, key, desc) {\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\")\n      return Reflect.decorate(decorators, target, key, desc);\n    switch (arguments.length) {\n      case 2:\n        return decorators.reduceRight(function(o, d) {\n          return (d && d(o)) || o;\n        }, target);\n      case 3:\n        return decorators.reduceRight(function(o, d) {\n          return (d && d(target, key)), void 0;\n        }, void 0);\n      case 4:\n        return decorators.reduceRight(function(o, d) {\n          return (d && d(target, key, o)) || o;\n        }, desc);\n    }\n  };\n  var __metadata = (this && this.__metadata) || function(k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\")\n      return Reflect.metadata(k, v);\n  };\n  var lang_1 = require(\"angular2/src/facade/lang\");\n  var async_1 = require(\"angular2/src/facade/async\");\n  var metadata_1 = require(\"angular2/src/core/metadata\");\n  var di_1 = require(\"angular2/src/core/di\");\n  var change_detection_1 = require(\"angular2/src/core/change_detection\");\n  var invalid_pipe_argument_exception_1 = require(\"angular2/src/common/pipes/invalid_pipe_argument_exception\");\n  var ObservableStrategy = (function() {\n    function ObservableStrategy() {}\n    ObservableStrategy.prototype.createSubscription = function(async, updateLatestValue) {\n      return async_1.ObservableWrapper.subscribe(async, updateLatestValue, function(e) {\n        throw e;\n      });\n    };\n    ObservableStrategy.prototype.dispose = function(subscription) {\n      async_1.ObservableWrapper.dispose(subscription);\n    };\n    ObservableStrategy.prototype.onDestroy = function(subscription) {\n      async_1.ObservableWrapper.dispose(subscription);\n    };\n    return ObservableStrategy;\n  })();\n  var PromiseStrategy = (function() {\n    function PromiseStrategy() {}\n    PromiseStrategy.prototype.createSubscription = function(async, updateLatestValue) {\n      return async.then(updateLatestValue);\n    };\n    PromiseStrategy.prototype.dispose = function(subscription) {};\n    PromiseStrategy.prototype.onDestroy = function(subscription) {};\n    return PromiseStrategy;\n  })();\n  var _promiseStrategy = new PromiseStrategy();\n  var _observableStrategy = new ObservableStrategy();\n  var AsyncPipe = (function() {\n    function AsyncPipe(_ref) {\n      this._latestValue = null;\n      this._latestReturnedValue = null;\n      this._subscription = null;\n      this._obj = null;\n      this._strategy = null;\n      this._ref = _ref;\n    }\n    AsyncPipe.prototype.onDestroy = function() {\n      if (lang_1.isPresent(this._subscription)) {\n        this._dispose();\n      }\n    };\n    AsyncPipe.prototype.transform = function(obj, args) {\n      if (lang_1.isBlank(this._obj)) {\n        if (lang_1.isPresent(obj)) {\n          this._subscribe(obj);\n        }\n        return null;\n      }\n      if (obj !== this._obj) {\n        this._dispose();\n        return this.transform(obj);\n      }\n      if (this._latestValue === this._latestReturnedValue) {\n        return this._latestReturnedValue;\n      } else {\n        this._latestReturnedValue = this._latestValue;\n        return change_detection_1.WrappedValue.wrap(this._latestValue);\n      }\n    };\n    AsyncPipe.prototype._subscribe = function(obj) {\n      var _this = this;\n      this._obj = obj;\n      this._strategy = this._selectStrategy(obj);\n      this._subscription = this._strategy.createSubscription(obj, function(value) {\n        return _this._updateLatestValue(obj, value);\n      });\n    };\n    AsyncPipe.prototype._selectStrategy = function(obj) {\n      if (lang_1.isPromise(obj)) {\n        return _promiseStrategy;\n      } else if (async_1.ObservableWrapper.isObservable(obj)) {\n        return _observableStrategy;\n      } else {\n        throw new invalid_pipe_argument_exception_1.InvalidPipeArgumentException(AsyncPipe, obj);\n      }\n    };\n    AsyncPipe.prototype._dispose = function() {\n      this._strategy.dispose(this._subscription);\n      this._latestValue = null;\n      this._latestReturnedValue = null;\n      this._subscription = null;\n      this._obj = null;\n    };\n    AsyncPipe.prototype._updateLatestValue = function(async, value) {\n      if (async === this._obj) {\n        this._latestValue = value;\n        this._ref.markForCheck();\n      }\n    };\n    AsyncPipe = __decorate([metadata_1.Pipe({\n      name: 'async',\n      pure: false\n    }), di_1.Injectable(), __metadata('design:paramtypes', [change_detection_1.ChangeDetectorRef])], AsyncPipe);\n    return AsyncPipe;\n  })();\n  exports.AsyncPipe = AsyncPipe;\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"angular2/src/core/linker\", [\"angular2/src/core/linker/directive_resolver\", \"angular2/src/core/linker/view_resolver\", \"angular2/src/core/linker/compiler\", \"angular2/src/core/linker/view_manager\", \"angular2/src/core/linker/query_list\", \"angular2/src/core/linker/dynamic_component_loader\", \"angular2/src/core/linker/element_ref\", \"angular2/src/core/linker/template_ref\", \"angular2/src/core/linker/view_ref\", \"angular2/src/core/linker/view_container_ref\", \"angular2/src/core/linker/dynamic_component_loader\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  var directive_resolver_1 = require(\"angular2/src/core/linker/directive_resolver\");\n  exports.DirectiveResolver = directive_resolver_1.DirectiveResolver;\n  var view_resolver_1 = require(\"angular2/src/core/linker/view_resolver\");\n  exports.ViewResolver = view_resolver_1.ViewResolver;\n  var compiler_1 = require(\"angular2/src/core/linker/compiler\");\n  exports.Compiler = compiler_1.Compiler;\n  var view_manager_1 = require(\"angular2/src/core/linker/view_manager\");\n  exports.AppViewManager = view_manager_1.AppViewManager;\n  var query_list_1 = require(\"angular2/src/core/linker/query_list\");\n  exports.QueryList = query_list_1.QueryList;\n  var dynamic_component_loader_1 = require(\"angular2/src/core/linker/dynamic_component_loader\");\n  exports.DynamicComponentLoader = dynamic_component_loader_1.DynamicComponentLoader;\n  var element_ref_1 = require(\"angular2/src/core/linker/element_ref\");\n  exports.ElementRef = element_ref_1.ElementRef;\n  var template_ref_1 = require(\"angular2/src/core/linker/template_ref\");\n  exports.TemplateRef = template_ref_1.TemplateRef;\n  var view_ref_1 = require(\"angular2/src/core/linker/view_ref\");\n  exports.ViewRef = view_ref_1.ViewRef;\n  exports.ProtoViewRef = view_ref_1.ProtoViewRef;\n  var view_container_ref_1 = require(\"angular2/src/core/linker/view_container_ref\");\n  exports.ViewContainerRef = view_container_ref_1.ViewContainerRef;\n  var dynamic_component_loader_2 = require(\"angular2/src/core/linker/dynamic_component_loader\");\n  exports.ComponentRef = dynamic_component_loader_2.ComponentRef;\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"angular2/src/common/pipes\", [\"angular2/src/common/pipes/async_pipe\", \"angular2/src/common/pipes/uppercase_pipe\", \"angular2/src/common/pipes/lowercase_pipe\", \"angular2/src/common/pipes/json_pipe\", \"angular2/src/common/pipes/slice_pipe\", \"angular2/src/common/pipes/date_pipe\", \"angular2/src/common/pipes/number_pipe\", \"angular2/src/facade/lang\", \"angular2/src/common/pipes/async_pipe\", \"angular2/src/common/pipes/date_pipe\", \"angular2/src/common/pipes/json_pipe\", \"angular2/src/common/pipes/slice_pipe\", \"angular2/src/common/pipes/lowercase_pipe\", \"angular2/src/common/pipes/number_pipe\", \"angular2/src/common/pipes/uppercase_pipe\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  var async_pipe_1 = require(\"angular2/src/common/pipes/async_pipe\");\n  var uppercase_pipe_1 = require(\"angular2/src/common/pipes/uppercase_pipe\");\n  var lowercase_pipe_1 = require(\"angular2/src/common/pipes/lowercase_pipe\");\n  var json_pipe_1 = require(\"angular2/src/common/pipes/json_pipe\");\n  var slice_pipe_1 = require(\"angular2/src/common/pipes/slice_pipe\");\n  var date_pipe_1 = require(\"angular2/src/common/pipes/date_pipe\");\n  var number_pipe_1 = require(\"angular2/src/common/pipes/number_pipe\");\n  var lang_1 = require(\"angular2/src/facade/lang\");\n  var async_pipe_2 = require(\"angular2/src/common/pipes/async_pipe\");\n  exports.AsyncPipe = async_pipe_2.AsyncPipe;\n  var date_pipe_2 = require(\"angular2/src/common/pipes/date_pipe\");\n  exports.DatePipe = date_pipe_2.DatePipe;\n  var json_pipe_2 = require(\"angular2/src/common/pipes/json_pipe\");\n  exports.JsonPipe = json_pipe_2.JsonPipe;\n  var slice_pipe_2 = require(\"angular2/src/common/pipes/slice_pipe\");\n  exports.SlicePipe = slice_pipe_2.SlicePipe;\n  var lowercase_pipe_2 = require(\"angular2/src/common/pipes/lowercase_pipe\");\n  exports.LowerCasePipe = lowercase_pipe_2.LowerCasePipe;\n  var number_pipe_2 = require(\"angular2/src/common/pipes/number_pipe\");\n  exports.NumberPipe = number_pipe_2.NumberPipe;\n  exports.DecimalPipe = number_pipe_2.DecimalPipe;\n  exports.PercentPipe = number_pipe_2.PercentPipe;\n  exports.CurrencyPipe = number_pipe_2.CurrencyPipe;\n  var uppercase_pipe_2 = require(\"angular2/src/common/pipes/uppercase_pipe\");\n  exports.UpperCasePipe = uppercase_pipe_2.UpperCasePipe;\n  exports.COMMON_PIPES = lang_1.CONST_EXPR([async_pipe_1.AsyncPipe, uppercase_pipe_1.UpperCasePipe, lowercase_pipe_1.LowerCasePipe, json_pipe_1.JsonPipe, slice_pipe_1.SlicePipe, number_pipe_1.DecimalPipe, number_pipe_1.PercentPipe, number_pipe_1.CurrencyPipe, date_pipe_1.DatePipe]);\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"angular2/src/common/directives/ng_class\", [\"angular2/src/facade/lang\", \"angular2/src/core/metadata\", \"angular2/src/core/linker\", \"angular2/src/core/change_detection\", \"angular2/src/core/render\", \"angular2/src/facade/collection\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  var __decorate = (this && this.__decorate) || function(decorators, target, key, desc) {\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\")\n      return Reflect.decorate(decorators, target, key, desc);\n    switch (arguments.length) {\n      case 2:\n        return decorators.reduceRight(function(o, d) {\n          return (d && d(o)) || o;\n        }, target);\n      case 3:\n        return decorators.reduceRight(function(o, d) {\n          return (d && d(target, key)), void 0;\n        }, void 0);\n      case 4:\n        return decorators.reduceRight(function(o, d) {\n          return (d && d(target, key, o)) || o;\n        }, desc);\n    }\n  };\n  var __metadata = (this && this.__metadata) || function(k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\")\n      return Reflect.metadata(k, v);\n  };\n  var lang_1 = require(\"angular2/src/facade/lang\");\n  var metadata_1 = require(\"angular2/src/core/metadata\");\n  var linker_1 = require(\"angular2/src/core/linker\");\n  var change_detection_1 = require(\"angular2/src/core/change_detection\");\n  var render_1 = require(\"angular2/src/core/render\");\n  var collection_1 = require(\"angular2/src/facade/collection\");\n  var NgClass = (function() {\n    function NgClass(_iterableDiffers, _keyValueDiffers, _ngEl, _renderer) {\n      this._iterableDiffers = _iterableDiffers;\n      this._keyValueDiffers = _keyValueDiffers;\n      this._ngEl = _ngEl;\n      this._renderer = _renderer;\n      this._initialClasses = [];\n    }\n    Object.defineProperty(NgClass.prototype, \"initialClasses\", {\n      set: function(v) {\n        this._applyInitialClasses(true);\n        this._initialClasses = lang_1.isPresent(v) && lang_1.isString(v) ? v.split(' ') : [];\n        this._applyInitialClasses(false);\n        this._applyClasses(this._rawClass, false);\n      },\n      enumerable: true,\n      configurable: true\n    });\n    Object.defineProperty(NgClass.prototype, \"rawClass\", {\n      set: function(v) {\n        this._cleanupClasses(this._rawClass);\n        if (lang_1.isString(v)) {\n          v = v.split(' ');\n        }\n        this._rawClass = v;\n        if (lang_1.isPresent(v)) {\n          if (collection_1.isListLikeIterable(v)) {\n            this._differ = this._iterableDiffers.find(v).create(null);\n            this._mode = 'iterable';\n          } else {\n            this._differ = this._keyValueDiffers.find(v).create(null);\n            this._mode = 'keyValue';\n          }\n        } else {\n          this._differ = null;\n        }\n      },\n      enumerable: true,\n      configurable: true\n    });\n    NgClass.prototype.doCheck = function() {\n      if (lang_1.isPresent(this._differ)) {\n        var changes = this._differ.diff(this._rawClass);\n        if (lang_1.isPresent(changes)) {\n          if (this._mode == 'iterable') {\n            this._applyIterableChanges(changes);\n          } else {\n            this._applyKeyValueChanges(changes);\n          }\n        }\n      }\n    };\n    NgClass.prototype.onDestroy = function() {\n      this._cleanupClasses(this._rawClass);\n    };\n    NgClass.prototype._cleanupClasses = function(rawClassVal) {\n      this._applyClasses(rawClassVal, true);\n      this._applyInitialClasses(false);\n    };\n    NgClass.prototype._applyKeyValueChanges = function(changes) {\n      var _this = this;\n      changes.forEachAddedItem(function(record) {\n        _this._toggleClass(record.key, record.currentValue);\n      });\n      changes.forEachChangedItem(function(record) {\n        _this._toggleClass(record.key, record.currentValue);\n      });\n      changes.forEachRemovedItem(function(record) {\n        if (record.previousValue) {\n          _this._toggleClass(record.key, false);\n        }\n      });\n    };\n    NgClass.prototype._applyIterableChanges = function(changes) {\n      var _this = this;\n      changes.forEachAddedItem(function(record) {\n        _this._toggleClass(record.item, true);\n      });\n      changes.forEachRemovedItem(function(record) {\n        _this._toggleClass(record.item, false);\n      });\n    };\n    NgClass.prototype._applyInitialClasses = function(isCleanup) {\n      var _this = this;\n      this._initialClasses.forEach(function(className) {\n        return _this._toggleClass(className, !isCleanup);\n      });\n    };\n    NgClass.prototype._applyClasses = function(rawClassVal, isCleanup) {\n      var _this = this;\n      if (lang_1.isPresent(rawClassVal)) {\n        if (lang_1.isArray(rawClassVal)) {\n          rawClassVal.forEach(function(className) {\n            return _this._toggleClass(className, !isCleanup);\n          });\n        } else if (rawClassVal instanceof Set) {\n          rawClassVal.forEach(function(className) {\n            return _this._toggleClass(className, !isCleanup);\n          });\n        } else {\n          collection_1.StringMapWrapper.forEach(rawClassVal, function(expVal, className) {\n            if (expVal)\n              _this._toggleClass(className, !isCleanup);\n          });\n        }\n      }\n    };\n    NgClass.prototype._toggleClass = function(className, enabled) {\n      className = className.trim();\n      if (className.length > 0) {\n        this._renderer.setElementClass(this._ngEl, className, enabled);\n      }\n    };\n    NgClass = __decorate([metadata_1.Directive({\n      selector: '[ng-class]',\n      inputs: ['rawClass: ng-class', 'initialClasses: class']\n    }), __metadata('design:paramtypes', [change_detection_1.IterableDiffers, change_detection_1.KeyValueDiffers, linker_1.ElementRef, render_1.Renderer])], NgClass);\n    return NgClass;\n  })();\n  exports.NgClass = NgClass;\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"angular2/src/common/directives\", [\"angular2/src/common/directives/ng_class\", \"angular2/src/common/directives/ng_for\", \"angular2/src/common/directives/ng_if\", \"angular2/src/common/directives/ng_style\", \"angular2/src/common/directives/ng_switch\", \"angular2/src/common/directives/observable_list_diff\", \"angular2/src/common/directives/core_directives\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  function __export(m) {\n    for (var p in m)\n      if (!exports.hasOwnProperty(p))\n        exports[p] = m[p];\n  }\n  var ng_class_1 = require(\"angular2/src/common/directives/ng_class\");\n  exports.NgClass = ng_class_1.NgClass;\n  var ng_for_1 = require(\"angular2/src/common/directives/ng_for\");\n  exports.NgFor = ng_for_1.NgFor;\n  var ng_if_1 = require(\"angular2/src/common/directives/ng_if\");\n  exports.NgIf = ng_if_1.NgIf;\n  var ng_style_1 = require(\"angular2/src/common/directives/ng_style\");\n  exports.NgStyle = ng_style_1.NgStyle;\n  var ng_switch_1 = require(\"angular2/src/common/directives/ng_switch\");\n  exports.NgSwitch = ng_switch_1.NgSwitch;\n  exports.NgSwitchWhen = ng_switch_1.NgSwitchWhen;\n  exports.NgSwitchDefault = ng_switch_1.NgSwitchDefault;\n  __export(require(\"angular2/src/common/directives/observable_list_diff\"));\n  var core_directives_1 = require(\"angular2/src/common/directives/core_directives\");\n  exports.CORE_DIRECTIVES = core_directives_1.CORE_DIRECTIVES;\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"angular2/common\", [\"angular2/src/common/pipes\", \"angular2/src/common/directives\", \"angular2/src/common/forms\", \"angular2/src/common/common_directives\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  function __export(m) {\n    for (var p in m)\n      if (!exports.hasOwnProperty(p))\n        exports[p] = m[p];\n  }\n  __export(require(\"angular2/src/common/pipes\"));\n  __export(require(\"angular2/src/common/directives\"));\n  __export(require(\"angular2/src/common/forms\"));\n  __export(require(\"angular2/src/common/common_directives\"));\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"angular2/angular2\", [\"angular2/common\", \"angular2/core\", \"angular2/profile\", \"angular2/lifecycle_hooks\", \"angular2/bootstrap\", \"angular2/upgrade\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  function __export(m) {\n    for (var p in m)\n      if (!exports.hasOwnProperty(p))\n        exports[p] = m[p];\n  }\n  __export(require(\"angular2/common\"));\n  __export(require(\"angular2/core\"));\n  __export(require(\"angular2/profile\"));\n  __export(require(\"angular2/lifecycle_hooks\"));\n  __export(require(\"angular2/bootstrap\"));\n  __export(require(\"angular2/upgrade\"));\n  global.define = __define;\n  return module.exports;\n});\n\n//# sourceMappingURLDisabled=angular2.dev.js.map\n\n\"format register\";\nSystem.register(\"angular2/src/router/instruction\", [\"angular2/src/facade/collection\", \"angular2/src/facade/exceptions\", \"angular2/src/facade/lang\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  var __extends = (this && this.__extends) || function(d, b) {\n    for (var p in b)\n      if (b.hasOwnProperty(p))\n        d[p] = b[p];\n    function __() {\n      this.constructor = d;\n    }\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n  };\n  var collection_1 = require(\"angular2/src/facade/collection\");\n  var exceptions_1 = require(\"angular2/src/facade/exceptions\");\n  var lang_1 = require(\"angular2/src/facade/lang\");\n  var RouteParams = (function() {\n    function RouteParams(params) {\n      this.params = params;\n    }\n    RouteParams.prototype.get = function(param) {\n      return lang_1.normalizeBlank(collection_1.StringMapWrapper.get(this.params, param));\n    };\n    return RouteParams;\n  })();\n  exports.RouteParams = RouteParams;\n  var RouteData = (function() {\n    function RouteData(data) {\n      if (data === void 0) {\n        data = lang_1.CONST_EXPR({});\n      }\n      this.data = data;\n    }\n    RouteData.prototype.get = function(key) {\n      return lang_1.normalizeBlank(collection_1.StringMapWrapper.get(this.data, key));\n    };\n    return RouteData;\n  })();\n  exports.RouteData = RouteData;\n  var BLANK_ROUTE_DATA = new RouteData();\n  var Instruction = (function() {\n    function Instruction(component, child, auxInstruction) {\n      this.component = component;\n      this.child = child;\n      this.auxInstruction = auxInstruction;\n    }\n    Instruction.prototype.replaceChild = function(child) {\n      return new Instruction(this.component, child, this.auxInstruction);\n    };\n    return Instruction;\n  })();\n  exports.Instruction = Instruction;\n  var PrimaryInstruction = (function() {\n    function PrimaryInstruction(component, child, auxUrls) {\n      this.component = component;\n      this.child = child;\n      this.auxUrls = auxUrls;\n    }\n    return PrimaryInstruction;\n  })();\n  exports.PrimaryInstruction = PrimaryInstruction;\n  function stringifyInstruction(instruction) {\n    return stringifyInstructionPath(instruction) + stringifyInstructionQuery(instruction);\n  }\n  exports.stringifyInstruction = stringifyInstruction;\n  function stringifyInstructionPath(instruction) {\n    return instruction.component.urlPath + stringifyAux(instruction) + stringifyPrimaryPrefixed(instruction.child);\n  }\n  exports.stringifyInstructionPath = stringifyInstructionPath;\n  function stringifyInstructionQuery(instruction) {\n    return instruction.component.urlParams.length > 0 ? ('?' + instruction.component.urlParams.join('&')) : '';\n  }\n  exports.stringifyInstructionQuery = stringifyInstructionQuery;\n  function stringifyPrimaryPrefixed(instruction) {\n    var primary = stringifyPrimary(instruction);\n    if (primary.length > 0) {\n      primary = '/' + primary;\n    }\n    return primary;\n  }\n  function stringifyPrimary(instruction) {\n    if (lang_1.isBlank(instruction)) {\n      return '';\n    }\n    var params = instruction.component.urlParams.length > 0 ? (';' + instruction.component.urlParams.join(';')) : '';\n    return instruction.component.urlPath + params + stringifyAux(instruction) + stringifyPrimaryPrefixed(instruction.child);\n  }\n  function stringifyAux(instruction) {\n    var routes = [];\n    collection_1.StringMapWrapper.forEach(instruction.auxInstruction, function(auxInstruction, _) {\n      routes.push(stringifyPrimary(auxInstruction));\n    });\n    if (routes.length > 0) {\n      return '(' + routes.join('//') + ')';\n    }\n    return '';\n  }\n  var ComponentInstruction = (function() {\n    function ComponentInstruction() {\n      this.reuse = false;\n    }\n    Object.defineProperty(ComponentInstruction.prototype, \"componentType\", {\n      get: function() {\n        return exceptions_1.unimplemented();\n      },\n      enumerable: true,\n      configurable: true\n    });\n    ;\n    Object.defineProperty(ComponentInstruction.prototype, \"specificity\", {\n      get: function() {\n        return exceptions_1.unimplemented();\n      },\n      enumerable: true,\n      configurable: true\n    });\n    ;\n    Object.defineProperty(ComponentInstruction.prototype, \"terminal\", {\n      get: function() {\n        return exceptions_1.unimplemented();\n      },\n      enumerable: true,\n      configurable: true\n    });\n    ;\n    Object.defineProperty(ComponentInstruction.prototype, \"routeData\", {\n      get: function() {\n        return exceptions_1.unimplemented();\n      },\n      enumerable: true,\n      configurable: true\n    });\n    ;\n    return ComponentInstruction;\n  })();\n  exports.ComponentInstruction = ComponentInstruction;\n  var ComponentInstruction_ = (function(_super) {\n    __extends(ComponentInstruction_, _super);\n    function ComponentInstruction_(urlPath, urlParams, _recognizer, params) {\n      if (params === void 0) {\n        params = null;\n      }\n      _super.call(this);\n      this._recognizer = _recognizer;\n      this.urlPath = urlPath;\n      this.urlParams = urlParams;\n      this.params = params;\n      if (lang_1.isPresent(this._recognizer.handler.data)) {\n        this._routeData = new RouteData(this._recognizer.handler.data);\n      } else {\n        this._routeData = BLANK_ROUTE_DATA;\n      }\n    }\n    Object.defineProperty(ComponentInstruction_.prototype, \"componentType\", {\n      get: function() {\n        return this._recognizer.handler.componentType;\n      },\n      enumerable: true,\n      configurable: true\n    });\n    ComponentInstruction_.prototype.resolveComponentType = function() {\n      return this._recognizer.handler.resolveComponentType();\n    };\n    Object.defineProperty(ComponentInstruction_.prototype, \"specificity\", {\n      get: function() {\n        return this._recognizer.specificity;\n      },\n      enumerable: true,\n      configurable: true\n    });\n    Object.defineProperty(ComponentInstruction_.prototype, \"terminal\", {\n      get: function() {\n        return this._recognizer.terminal;\n      },\n      enumerable: true,\n      configurable: true\n    });\n    Object.defineProperty(ComponentInstruction_.prototype, \"routeData\", {\n      get: function() {\n        return this._routeData;\n      },\n      enumerable: true,\n      configurable: true\n    });\n    return ComponentInstruction_;\n  })(ComponentInstruction);\n  exports.ComponentInstruction_ = ComponentInstruction_;\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"angular2/src/router/lifecycle_annotations_impl\", [\"angular2/src/facade/lang\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  var __decorate = (this && this.__decorate) || function(decorators, target, key, desc) {\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\")\n      return Reflect.decorate(decorators, target, key, desc);\n    switch (arguments.length) {\n      case 2:\n        return decorators.reduceRight(function(o, d) {\n          return (d && d(o)) || o;\n        }, target);\n      case 3:\n        return decorators.reduceRight(function(o, d) {\n          return (d && d(target, key)), void 0;\n        }, void 0);\n      case 4:\n        return decorators.reduceRight(function(o, d) {\n          return (d && d(target, key, o)) || o;\n        }, desc);\n    }\n  };\n  var __metadata = (this && this.__metadata) || function(k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\")\n      return Reflect.metadata(k, v);\n  };\n  var lang_1 = require(\"angular2/src/facade/lang\");\n  var RouteLifecycleHook = (function() {\n    function RouteLifecycleHook(name) {\n      this.name = name;\n    }\n    RouteLifecycleHook = __decorate([lang_1.CONST(), __metadata('design:paramtypes', [String])], RouteLifecycleHook);\n    return RouteLifecycleHook;\n  })();\n  exports.RouteLifecycleHook = RouteLifecycleHook;\n  var CanActivate = (function() {\n    function CanActivate(fn) {\n      this.fn = fn;\n    }\n    CanActivate = __decorate([lang_1.CONST(), __metadata('design:paramtypes', [Function])], CanActivate);\n    return CanActivate;\n  })();\n  exports.CanActivate = CanActivate;\n  exports.canReuse = lang_1.CONST_EXPR(new RouteLifecycleHook(\"canReuse\"));\n  exports.canDeactivate = lang_1.CONST_EXPR(new RouteLifecycleHook(\"canDeactivate\"));\n  exports.onActivate = lang_1.CONST_EXPR(new RouteLifecycleHook(\"onActivate\"));\n  exports.onReuse = lang_1.CONST_EXPR(new RouteLifecycleHook(\"onReuse\"));\n  exports.onDeactivate = lang_1.CONST_EXPR(new RouteLifecycleHook(\"onDeactivate\"));\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"angular2/src/router/lifecycle_annotations\", [\"angular2/src/core/util/decorators\", \"angular2/src/router/lifecycle_annotations_impl\", \"angular2/src/router/lifecycle_annotations_impl\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  var decorators_1 = require(\"angular2/src/core/util/decorators\");\n  var lifecycle_annotations_impl_1 = require(\"angular2/src/router/lifecycle_annotations_impl\");\n  var lifecycle_annotations_impl_2 = require(\"angular2/src/router/lifecycle_annotations_impl\");\n  exports.canReuse = lifecycle_annotations_impl_2.canReuse;\n  exports.canDeactivate = lifecycle_annotations_impl_2.canDeactivate;\n  exports.onActivate = lifecycle_annotations_impl_2.onActivate;\n  exports.onReuse = lifecycle_annotations_impl_2.onReuse;\n  exports.onDeactivate = lifecycle_annotations_impl_2.onDeactivate;\n  exports.CanActivate = decorators_1.makeDecorator(lifecycle_annotations_impl_1.CanActivate);\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"angular2/src/router/location_strategy\", [], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  var LocationStrategy = (function() {\n    function LocationStrategy() {}\n    return LocationStrategy;\n  })();\n  exports.LocationStrategy = LocationStrategy;\n  function normalizeQueryParams(params) {\n    return (params.length > 0 && params.substring(0, 1) != '?') ? ('?' + params) : params;\n  }\n  exports.normalizeQueryParams = normalizeQueryParams;\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"angular2/src/router/url_parser\", [\"angular2/src/facade/collection\", \"angular2/src/facade/lang\", \"angular2/src/facade/exceptions\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  var __extends = (this && this.__extends) || function(d, b) {\n    for (var p in b)\n      if (b.hasOwnProperty(p))\n        d[p] = b[p];\n    function __() {\n      this.constructor = d;\n    }\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n  };\n  var collection_1 = require(\"angular2/src/facade/collection\");\n  var lang_1 = require(\"angular2/src/facade/lang\");\n  var exceptions_1 = require(\"angular2/src/facade/exceptions\");\n  var Url = (function() {\n    function Url(path, child, auxiliary, params) {\n      if (child === void 0) {\n        child = null;\n      }\n      if (auxiliary === void 0) {\n        auxiliary = lang_1.CONST_EXPR([]);\n      }\n      if (params === void 0) {\n        params = null;\n      }\n      this.path = path;\n      this.child = child;\n      this.auxiliary = auxiliary;\n      this.params = params;\n    }\n    Url.prototype.toString = function() {\n      return this.path + this._matrixParamsToString() + this._auxToString() + this._childString();\n    };\n    Url.prototype.segmentToString = function() {\n      return this.path + this._matrixParamsToString();\n    };\n    Url.prototype._auxToString = function() {\n      return this.auxiliary.length > 0 ? ('(' + this.auxiliary.map(function(sibling) {\n        return sibling.toString();\n      }).join('//') + ')') : '';\n    };\n    Url.prototype._matrixParamsToString = function() {\n      if (lang_1.isBlank(this.params)) {\n        return '';\n      }\n      return ';' + serializeParams(this.params).join(';');\n    };\n    Url.prototype._childString = function() {\n      return lang_1.isPresent(this.child) ? ('/' + this.child.toString()) : '';\n    };\n    return Url;\n  })();\n  exports.Url = Url;\n  var RootUrl = (function(_super) {\n    __extends(RootUrl, _super);\n    function RootUrl(path, child, auxiliary, params) {\n      if (child === void 0) {\n        child = null;\n      }\n      if (auxiliary === void 0) {\n        auxiliary = lang_1.CONST_EXPR([]);\n      }\n      if (params === void 0) {\n        params = null;\n      }\n      _super.call(this, path, child, auxiliary, params);\n    }\n    RootUrl.prototype.toString = function() {\n      return this.path + this._auxToString() + this._childString() + this._queryParamsToString();\n    };\n    RootUrl.prototype.segmentToString = function() {\n      return this.path + this._queryParamsToString();\n    };\n    RootUrl.prototype._queryParamsToString = function() {\n      if (lang_1.isBlank(this.params)) {\n        return '';\n      }\n      return '?' + serializeParams(this.params).join('&');\n    };\n    return RootUrl;\n  })(Url);\n  exports.RootUrl = RootUrl;\n  function pathSegmentsToUrl(pathSegments) {\n    var url = new Url(pathSegments[pathSegments.length - 1]);\n    for (var i = pathSegments.length - 2; i >= 0; i -= 1) {\n      url = new Url(pathSegments[i], url);\n    }\n    return url;\n  }\n  exports.pathSegmentsToUrl = pathSegmentsToUrl;\n  var SEGMENT_RE = lang_1.RegExpWrapper.create('^[^\\\\/\\\\(\\\\)\\\\?;=&#]+');\n  function matchUrlSegment(str) {\n    var match = lang_1.RegExpWrapper.firstMatch(SEGMENT_RE, str);\n    return lang_1.isPresent(match) ? match[0] : '';\n  }\n  var UrlParser = (function() {\n    function UrlParser() {}\n    UrlParser.prototype.peekStartsWith = function(str) {\n      return this._remaining.startsWith(str);\n    };\n    UrlParser.prototype.capture = function(str) {\n      if (!this._remaining.startsWith(str)) {\n        throw new exceptions_1.BaseException(\"Expected \\\"\" + str + \"\\\".\");\n      }\n      this._remaining = this._remaining.substring(str.length);\n    };\n    UrlParser.prototype.parse = function(url) {\n      this._remaining = url;\n      if (url == '' || url == '/') {\n        return new Url('');\n      }\n      return this.parseRoot();\n    };\n    UrlParser.prototype.parseRoot = function() {\n      if (this.peekStartsWith('/')) {\n        this.capture('/');\n      }\n      var path = matchUrlSegment(this._remaining);\n      this.capture(path);\n      var aux = [];\n      if (this.peekStartsWith('(')) {\n        aux = this.parseAuxiliaryRoutes();\n      }\n      if (this.peekStartsWith(';')) {\n        this.parseMatrixParams();\n      }\n      var child = null;\n      if (this.peekStartsWith('/') && !this.peekStartsWith('//')) {\n        this.capture('/');\n        child = this.parseSegment();\n      }\n      var queryParams = null;\n      if (this.peekStartsWith('?')) {\n        queryParams = this.parseQueryParams();\n      }\n      return new RootUrl(path, child, aux, queryParams);\n    };\n    UrlParser.prototype.parseSegment = function() {\n      if (this._remaining.length == 0) {\n        return null;\n      }\n      if (this.peekStartsWith('/')) {\n        this.capture('/');\n      }\n      var path = matchUrlSegment(this._remaining);\n      this.capture(path);\n      var matrixParams = null;\n      if (this.peekStartsWith(';')) {\n        matrixParams = this.parseMatrixParams();\n      }\n      var aux = [];\n      if (this.peekStartsWith('(')) {\n        aux = this.parseAuxiliaryRoutes();\n      }\n      var child = null;\n      if (this.peekStartsWith('/') && !this.peekStartsWith('//')) {\n        this.capture('/');\n        child = this.parseSegment();\n      }\n      return new Url(path, child, aux, matrixParams);\n    };\n    UrlParser.prototype.parseQueryParams = function() {\n      var params = {};\n      this.capture('?');\n      this.parseParam(params);\n      while (this._remaining.length > 0 && this.peekStartsWith('&')) {\n        this.capture('&');\n        this.parseParam(params);\n      }\n      return params;\n    };\n    UrlParser.prototype.parseMatrixParams = function() {\n      var params = {};\n      while (this._remaining.length > 0 && this.peekStartsWith(';')) {\n        this.capture(';');\n        this.parseParam(params);\n      }\n      return params;\n    };\n    UrlParser.prototype.parseParam = function(params) {\n      var key = matchUrlSegment(this._remaining);\n      if (lang_1.isBlank(key)) {\n        return ;\n      }\n      this.capture(key);\n      var value = true;\n      if (this.peekStartsWith('=')) {\n        this.capture('=');\n        var valueMatch = matchUrlSegment(this._remaining);\n        if (lang_1.isPresent(valueMatch)) {\n          value = valueMatch;\n          this.capture(value);\n        }\n      }\n      params[key] = value;\n    };\n    UrlParser.prototype.parseAuxiliaryRoutes = function() {\n      var routes = [];\n      this.capture('(');\n      while (!this.peekStartsWith(')') && this._remaining.length > 0) {\n        routes.push(this.parseSegment());\n        if (this.peekStartsWith('//')) {\n          this.capture('//');\n        }\n      }\n      this.capture(')');\n      return routes;\n    };\n    return UrlParser;\n  })();\n  exports.UrlParser = UrlParser;\n  exports.parser = new UrlParser();\n  function serializeParams(paramMap) {\n    var params = [];\n    if (lang_1.isPresent(paramMap)) {\n      collection_1.StringMapWrapper.forEach(paramMap, function(value, key) {\n        if (value == true) {\n          params.push(key);\n        } else {\n          params.push(key + '=' + value);\n        }\n      });\n    }\n    return params;\n  }\n  exports.serializeParams = serializeParams;\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"angular2/src/router/route_config_impl\", [\"angular2/src/facade/lang\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  var __decorate = (this && this.__decorate) || function(decorators, target, key, desc) {\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\")\n      return Reflect.decorate(decorators, target, key, desc);\n    switch (arguments.length) {\n      case 2:\n        return decorators.reduceRight(function(o, d) {\n          return (d && d(o)) || o;\n        }, target);\n      case 3:\n        return decorators.reduceRight(function(o, d) {\n          return (d && d(target, key)), void 0;\n        }, void 0);\n      case 4:\n        return decorators.reduceRight(function(o, d) {\n          return (d && d(target, key, o)) || o;\n        }, desc);\n    }\n  };\n  var __metadata = (this && this.__metadata) || function(k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\")\n      return Reflect.metadata(k, v);\n  };\n  var lang_1 = require(\"angular2/src/facade/lang\");\n  var RouteConfig = (function() {\n    function RouteConfig(configs) {\n      this.configs = configs;\n    }\n    RouteConfig = __decorate([lang_1.CONST(), __metadata('design:paramtypes', [Array])], RouteConfig);\n    return RouteConfig;\n  })();\n  exports.RouteConfig = RouteConfig;\n  var Route = (function() {\n    function Route(_a) {\n      var path = _a.path,\n          component = _a.component,\n          name = _a.name,\n          data = _a.data;\n      this.aux = null;\n      this.loader = null;\n      this.redirectTo = null;\n      this.path = path;\n      this.component = component;\n      this.name = name;\n      this.data = data;\n    }\n    Route = __decorate([lang_1.CONST(), __metadata('design:paramtypes', [Object])], Route);\n    return Route;\n  })();\n  exports.Route = Route;\n  var AuxRoute = (function() {\n    function AuxRoute(_a) {\n      var path = _a.path,\n          component = _a.component,\n          name = _a.name;\n      this.data = null;\n      this.aux = null;\n      this.loader = null;\n      this.redirectTo = null;\n      this.path = path;\n      this.component = component;\n      this.name = name;\n    }\n    AuxRoute = __decorate([lang_1.CONST(), __metadata('design:paramtypes', [Object])], AuxRoute);\n    return AuxRoute;\n  })();\n  exports.AuxRoute = AuxRoute;\n  var AsyncRoute = (function() {\n    function AsyncRoute(_a) {\n      var path = _a.path,\n          loader = _a.loader,\n          name = _a.name,\n          data = _a.data;\n      this.aux = null;\n      this.path = path;\n      this.loader = loader;\n      this.name = name;\n      this.data = data;\n    }\n    AsyncRoute = __decorate([lang_1.CONST(), __metadata('design:paramtypes', [Object])], AsyncRoute);\n    return AsyncRoute;\n  })();\n  exports.AsyncRoute = AsyncRoute;\n  var Redirect = (function() {\n    function Redirect(_a) {\n      var path = _a.path,\n          redirectTo = _a.redirectTo;\n      this.name = null;\n      this.loader = null;\n      this.data = null;\n      this.aux = null;\n      this.path = path;\n      this.redirectTo = redirectTo;\n    }\n    Redirect = __decorate([lang_1.CONST(), __metadata('design:paramtypes', [Object])], Redirect);\n    return Redirect;\n  })();\n  exports.Redirect = Redirect;\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"angular2/src/router/async_route_handler\", [\"angular2/src/facade/lang\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  var lang_1 = require(\"angular2/src/facade/lang\");\n  var AsyncRouteHandler = (function() {\n    function AsyncRouteHandler(_loader, data) {\n      this._loader = _loader;\n      this.data = data;\n      this._resolvedComponent = null;\n    }\n    AsyncRouteHandler.prototype.resolveComponentType = function() {\n      var _this = this;\n      if (lang_1.isPresent(this._resolvedComponent)) {\n        return this._resolvedComponent;\n      }\n      return this._resolvedComponent = this._loader().then(function(componentType) {\n        _this.componentType = componentType;\n        return componentType;\n      });\n    };\n    return AsyncRouteHandler;\n  })();\n  exports.AsyncRouteHandler = AsyncRouteHandler;\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"angular2/src/router/sync_route_handler\", [\"angular2/src/facade/async\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  var async_1 = require(\"angular2/src/facade/async\");\n  var SyncRouteHandler = (function() {\n    function SyncRouteHandler(componentType, data) {\n      this.componentType = componentType;\n      this.data = data;\n      this._resolvedComponent = null;\n      this._resolvedComponent = async_1.PromiseWrapper.resolve(componentType);\n    }\n    SyncRouteHandler.prototype.resolveComponentType = function() {\n      return this._resolvedComponent;\n    };\n    return SyncRouteHandler;\n  })();\n  exports.SyncRouteHandler = SyncRouteHandler;\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"angular2/src/router/route_config_decorator\", [\"angular2/src/router/route_config_impl\", \"angular2/src/core/util/decorators\", \"angular2/src/router/route_config_impl\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  var route_config_impl_1 = require(\"angular2/src/router/route_config_impl\");\n  var decorators_1 = require(\"angular2/src/core/util/decorators\");\n  var route_config_impl_2 = require(\"angular2/src/router/route_config_impl\");\n  exports.Route = route_config_impl_2.Route;\n  exports.Redirect = route_config_impl_2.Redirect;\n  exports.AuxRoute = route_config_impl_2.AuxRoute;\n  exports.AsyncRoute = route_config_impl_2.AsyncRoute;\n  exports.RouteConfig = decorators_1.makeDecorator(route_config_impl_1.RouteConfig);\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"angular2/src/router/hash_location_strategy\", [\"angular2/src/core/dom/dom_adapter\", \"angular2/angular2\", \"angular2/src/router/location_strategy\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  var __extends = (this && this.__extends) || function(d, b) {\n    for (var p in b)\n      if (b.hasOwnProperty(p))\n        d[p] = b[p];\n    function __() {\n      this.constructor = d;\n    }\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n  };\n  var __decorate = (this && this.__decorate) || function(decorators, target, key, desc) {\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\")\n      return Reflect.decorate(decorators, target, key, desc);\n    switch (arguments.length) {\n      case 2:\n        return decorators.reduceRight(function(o, d) {\n          return (d && d(o)) || o;\n        }, target);\n      case 3:\n        return decorators.reduceRight(function(o, d) {\n          return (d && d(target, key)), void 0;\n        }, void 0);\n      case 4:\n        return decorators.reduceRight(function(o, d) {\n          return (d && d(target, key, o)) || o;\n        }, desc);\n    }\n  };\n  var __metadata = (this && this.__metadata) || function(k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\")\n      return Reflect.metadata(k, v);\n  };\n  var dom_adapter_1 = require(\"angular2/src/core/dom/dom_adapter\");\n  var angular2_1 = require(\"angular2/angular2\");\n  var location_strategy_1 = require(\"angular2/src/router/location_strategy\");\n  var HashLocationStrategy = (function(_super) {\n    __extends(HashLocationStrategy, _super);\n    function HashLocationStrategy() {\n      _super.call(this);\n      this._location = dom_adapter_1.DOM.getLocation();\n      this._history = dom_adapter_1.DOM.getHistory();\n    }\n    HashLocationStrategy.prototype.onPopState = function(fn) {\n      dom_adapter_1.DOM.getGlobalEventTarget('window').addEventListener('popstate', fn, false);\n    };\n    HashLocationStrategy.prototype.getBaseHref = function() {\n      return '';\n    };\n    HashLocationStrategy.prototype.path = function() {\n      var path = this._location.hash;\n      return (path.length > 0 ? path.substring(1) : path) + location_strategy_1.normalizeQueryParams(this._location.search);\n    };\n    HashLocationStrategy.prototype.prepareExternalUrl = function(internal) {\n      return internal.length > 0 ? ('#' + internal) : internal;\n    };\n    HashLocationStrategy.prototype.pushState = function(state, title, path, queryParams) {\n      var url = path + location_strategy_1.normalizeQueryParams(queryParams);\n      if (url.length == 0) {\n        url = this._location.pathname;\n      } else {\n        url = this.prepareExternalUrl(url);\n      }\n      this._history.pushState(state, title, url);\n    };\n    HashLocationStrategy.prototype.forward = function() {\n      this._history.forward();\n    };\n    HashLocationStrategy.prototype.back = function() {\n      this._history.back();\n    };\n    HashLocationStrategy = __decorate([angular2_1.Injectable(), __metadata('design:paramtypes', [])], HashLocationStrategy);\n    return HashLocationStrategy;\n  })(location_strategy_1.LocationStrategy);\n  exports.HashLocationStrategy = HashLocationStrategy;\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"angular2/src/router/path_location_strategy\", [\"angular2/src/core/dom/dom_adapter\", \"angular2/angular2\", \"angular2/src/router/location_strategy\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  var __extends = (this && this.__extends) || function(d, b) {\n    for (var p in b)\n      if (b.hasOwnProperty(p))\n        d[p] = b[p];\n    function __() {\n      this.constructor = d;\n    }\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n  };\n  var __decorate = (this && this.__decorate) || function(decorators, target, key, desc) {\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\")\n      return Reflect.decorate(decorators, target, key, desc);\n    switch (arguments.length) {\n      case 2:\n        return decorators.reduceRight(function(o, d) {\n          return (d && d(o)) || o;\n        }, target);\n      case 3:\n        return decorators.reduceRight(function(o, d) {\n          return (d && d(target, key)), void 0;\n        }, void 0);\n      case 4:\n        return decorators.reduceRight(function(o, d) {\n          return (d && d(target, key, o)) || o;\n        }, desc);\n    }\n  };\n  var __metadata = (this && this.__metadata) || function(k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\")\n      return Reflect.metadata(k, v);\n  };\n  var dom_adapter_1 = require(\"angular2/src/core/dom/dom_adapter\");\n  var angular2_1 = require(\"angular2/angular2\");\n  var location_strategy_1 = require(\"angular2/src/router/location_strategy\");\n  var PathLocationStrategy = (function(_super) {\n    __extends(PathLocationStrategy, _super);\n    function PathLocationStrategy() {\n      _super.call(this);\n      this._location = dom_adapter_1.DOM.getLocation();\n      this._history = dom_adapter_1.DOM.getHistory();\n      this._baseHref = dom_adapter_1.DOM.getBaseHref();\n    }\n    PathLocationStrategy.prototype.onPopState = function(fn) {\n      dom_adapter_1.DOM.getGlobalEventTarget('window').addEventListener('popstate', fn, false);\n      dom_adapter_1.DOM.getGlobalEventTarget('window').addEventListener('hashchange', fn, false);\n    };\n    PathLocationStrategy.prototype.getBaseHref = function() {\n      return this._baseHref;\n    };\n    PathLocationStrategy.prototype.prepareExternalUrl = function(internal) {\n      return this._baseHref + internal;\n    };\n    PathLocationStrategy.prototype.path = function() {\n      return this._location.pathname + location_strategy_1.normalizeQueryParams(this._location.search);\n    };\n    PathLocationStrategy.prototype.pushState = function(state, title, url, queryParams) {\n      this._history.pushState(state, title, (url + location_strategy_1.normalizeQueryParams(queryParams)));\n    };\n    PathLocationStrategy.prototype.forward = function() {\n      this._history.forward();\n    };\n    PathLocationStrategy.prototype.back = function() {\n      this._history.back();\n    };\n    PathLocationStrategy = __decorate([angular2_1.Injectable(), __metadata('design:paramtypes', [])], PathLocationStrategy);\n    return PathLocationStrategy;\n  })(location_strategy_1.LocationStrategy);\n  exports.PathLocationStrategy = PathLocationStrategy;\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"angular2/src/router/route_definition\", [], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"angular2/src/router/location\", [\"angular2/src/router/location_strategy\", \"angular2/src/facade/lang\", \"angular2/src/facade/async\", \"angular2/src/facade/lang\", \"angular2/src/facade/exceptions\", \"angular2/angular2\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  var __decorate = (this && this.__decorate) || function(decorators, target, key, desc) {\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\")\n      return Reflect.decorate(decorators, target, key, desc);\n    switch (arguments.length) {\n      case 2:\n        return decorators.reduceRight(function(o, d) {\n          return (d && d(o)) || o;\n        }, target);\n      case 3:\n        return decorators.reduceRight(function(o, d) {\n          return (d && d(target, key)), void 0;\n        }, void 0);\n      case 4:\n        return decorators.reduceRight(function(o, d) {\n          return (d && d(target, key, o)) || o;\n        }, desc);\n    }\n  };\n  var __metadata = (this && this.__metadata) || function(k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\")\n      return Reflect.metadata(k, v);\n  };\n  var __param = (this && this.__param) || function(paramIndex, decorator) {\n    return function(target, key) {\n      decorator(target, key, paramIndex);\n    };\n  };\n  var location_strategy_1 = require(\"angular2/src/router/location_strategy\");\n  var lang_1 = require(\"angular2/src/facade/lang\");\n  var async_1 = require(\"angular2/src/facade/async\");\n  var lang_2 = require(\"angular2/src/facade/lang\");\n  var exceptions_1 = require(\"angular2/src/facade/exceptions\");\n  var angular2_1 = require(\"angular2/angular2\");\n  exports.APP_BASE_HREF = lang_1.CONST_EXPR(new angular2_1.OpaqueToken('appBaseHref'));\n  var Location = (function() {\n    function Location(platformStrategy, href) {\n      var _this = this;\n      this.platformStrategy = platformStrategy;\n      this._subject = new async_1.EventEmitter();\n      var browserBaseHref = lang_1.isPresent(href) ? href : this.platformStrategy.getBaseHref();\n      if (lang_2.isBlank(browserBaseHref)) {\n        throw new exceptions_1.BaseException(\"No base href set. Either provide a provider for the APP_BASE_HREF token or add a base element to the document.\");\n      }\n      this._baseHref = stripTrailingSlash(stripIndexHtml(browserBaseHref));\n      this.platformStrategy.onPopState(function(_) {\n        async_1.ObservableWrapper.callNext(_this._subject, {\n          'url': _this.path(),\n          'pop': true\n        });\n      });\n    }\n    Location.prototype.path = function() {\n      return this.normalize(this.platformStrategy.path());\n    };\n    Location.prototype.normalize = function(url) {\n      return stripTrailingSlash(_stripBaseHref(this._baseHref, stripIndexHtml(url)));\n    };\n    Location.prototype.prepareExternalUrl = function(url) {\n      if (!url.startsWith('/')) {\n        url = '/' + url;\n      }\n      return this.platformStrategy.prepareExternalUrl(stripTrailingSlash(_addBaseHref(this._baseHref, url)));\n    };\n    Location.prototype.go = function(path, query) {\n      if (query === void 0) {\n        query = '';\n      }\n      this.platformStrategy.pushState(null, '', path, query);\n    };\n    Location.prototype.forward = function() {\n      this.platformStrategy.forward();\n    };\n    Location.prototype.back = function() {\n      this.platformStrategy.back();\n    };\n    Location.prototype.subscribe = function(onNext, onThrow, onReturn) {\n      if (onThrow === void 0) {\n        onThrow = null;\n      }\n      if (onReturn === void 0) {\n        onReturn = null;\n      }\n      return async_1.ObservableWrapper.subscribe(this._subject, onNext, onThrow, onReturn);\n    };\n    Location = __decorate([angular2_1.Injectable(), __param(1, angular2_1.Optional()), __param(1, angular2_1.Inject(exports.APP_BASE_HREF)), __metadata('design:paramtypes', [location_strategy_1.LocationStrategy, String])], Location);\n    return Location;\n  })();\n  exports.Location = Location;\n  function _stripBaseHref(baseHref, url) {\n    if (baseHref.length > 0 && url.startsWith(baseHref)) {\n      return url.substring(baseHref.length);\n    }\n    return url;\n  }\n  function _addBaseHref(baseHref, url) {\n    if (!url.startsWith(baseHref)) {\n      return baseHref + url;\n    }\n    return url;\n  }\n  function stripIndexHtml(url) {\n    if (/\\/index.html$/g.test(url)) {\n      return url.substring(0, url.length - 11);\n    }\n    return url;\n  }\n  function stripTrailingSlash(url) {\n    if (/\\/$/g.test(url)) {\n      url = url.substring(0, url.length - 1);\n    }\n    return url;\n  }\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"angular2/src/router/path_recognizer\", [\"angular2/src/facade/lang\", \"angular2/src/facade/exceptions\", \"angular2/src/facade/collection\", \"angular2/src/router/url_parser\", \"angular2/src/router/instruction\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  var lang_1 = require(\"angular2/src/facade/lang\");\n  var exceptions_1 = require(\"angular2/src/facade/exceptions\");\n  var collection_1 = require(\"angular2/src/facade/collection\");\n  var url_parser_1 = require(\"angular2/src/router/url_parser\");\n  var instruction_1 = require(\"angular2/src/router/instruction\");\n  var TouchMap = (function() {\n    function TouchMap(map) {\n      var _this = this;\n      this.map = {};\n      this.keys = {};\n      if (lang_1.isPresent(map)) {\n        collection_1.StringMapWrapper.forEach(map, function(value, key) {\n          _this.map[key] = lang_1.isPresent(value) ? value.toString() : null;\n          _this.keys[key] = true;\n        });\n      }\n    }\n    TouchMap.prototype.get = function(key) {\n      collection_1.StringMapWrapper.delete(this.keys, key);\n      return this.map[key];\n    };\n    TouchMap.prototype.getUnused = function() {\n      var _this = this;\n      var unused = collection_1.StringMapWrapper.create();\n      var keys = collection_1.StringMapWrapper.keys(this.keys);\n      keys.forEach(function(key) {\n        return unused[key] = collection_1.StringMapWrapper.get(_this.map, key);\n      });\n      return unused;\n    };\n    return TouchMap;\n  })();\n  function normalizeString(obj) {\n    if (lang_1.isBlank(obj)) {\n      return null;\n    } else {\n      return obj.toString();\n    }\n  }\n  var ContinuationSegment = (function() {\n    function ContinuationSegment() {\n      this.name = '';\n    }\n    ContinuationSegment.prototype.generate = function(params) {\n      return '';\n    };\n    ContinuationSegment.prototype.match = function(path) {\n      return true;\n    };\n    return ContinuationSegment;\n  })();\n  var StaticSegment = (function() {\n    function StaticSegment(path) {\n      this.path = path;\n      this.name = '';\n    }\n    StaticSegment.prototype.match = function(path) {\n      return path == this.path;\n    };\n    StaticSegment.prototype.generate = function(params) {\n      return this.path;\n    };\n    return StaticSegment;\n  })();\n  var DynamicSegment = (function() {\n    function DynamicSegment(name) {\n      this.name = name;\n    }\n    DynamicSegment.prototype.match = function(path) {\n      return path.length > 0;\n    };\n    DynamicSegment.prototype.generate = function(params) {\n      if (!collection_1.StringMapWrapper.contains(params.map, this.name)) {\n        throw new exceptions_1.BaseException(\"Route generator for '\" + this.name + \"' was not included in parameters passed.\");\n      }\n      return normalizeString(params.get(this.name));\n    };\n    return DynamicSegment;\n  })();\n  var StarSegment = (function() {\n    function StarSegment(name) {\n      this.name = name;\n    }\n    StarSegment.prototype.match = function(path) {\n      return true;\n    };\n    StarSegment.prototype.generate = function(params) {\n      return normalizeString(params.get(this.name));\n    };\n    return StarSegment;\n  })();\n  var paramMatcher = /^:([^\\/]+)$/g;\n  var wildcardMatcher = /^\\*([^\\/]+)$/g;\n  function parsePathString(route) {\n    if (route.startsWith(\"/\")) {\n      route = route.substring(1);\n    }\n    var segments = splitBySlash(route);\n    var results = [];\n    var specificity = 0;\n    if (segments.length > 98) {\n      throw new exceptions_1.BaseException(\"'\" + route + \"' has more than the maximum supported number of segments.\");\n    }\n    var limit = segments.length - 1;\n    for (var i = 0; i <= limit; i++) {\n      var segment = segments[i],\n          match;\n      if (lang_1.isPresent(match = lang_1.RegExpWrapper.firstMatch(paramMatcher, segment))) {\n        results.push(new DynamicSegment(match[1]));\n        specificity += (100 - i);\n      } else if (lang_1.isPresent(match = lang_1.RegExpWrapper.firstMatch(wildcardMatcher, segment))) {\n        results.push(new StarSegment(match[1]));\n      } else if (segment == '...') {\n        if (i < limit) {\n          throw new exceptions_1.BaseException(\"Unexpected \\\"...\\\" before the end of the path for \\\"\" + route + \"\\\".\");\n        }\n        results.push(new ContinuationSegment());\n      } else {\n        results.push(new StaticSegment(segment));\n        specificity += 100 * (100 - i);\n      }\n    }\n    var result = collection_1.StringMapWrapper.create();\n    collection_1.StringMapWrapper.set(result, 'segments', results);\n    collection_1.StringMapWrapper.set(result, 'specificity', specificity);\n    return result;\n  }\n  function pathDslHash(segments) {\n    return segments.map(function(segment) {\n      if (segment instanceof StarSegment) {\n        return '*';\n      } else if (segment instanceof ContinuationSegment) {\n        return '...';\n      } else if (segment instanceof DynamicSegment) {\n        return ':';\n      } else if (segment instanceof StaticSegment) {\n        return segment.path;\n      }\n    }).join('/');\n  }\n  function splitBySlash(url) {\n    return url.split('/');\n  }\n  var RESERVED_CHARS = lang_1.RegExpWrapper.create('//|\\\\(|\\\\)|;|\\\\?|=');\n  function assertPath(path) {\n    if (lang_1.StringWrapper.contains(path, '#')) {\n      throw new exceptions_1.BaseException(\"Path \\\"\" + path + \"\\\" should not include \\\"#\\\". Use \\\"HashLocationStrategy\\\" instead.\");\n    }\n    var illegalCharacter = lang_1.RegExpWrapper.firstMatch(RESERVED_CHARS, path);\n    if (lang_1.isPresent(illegalCharacter)) {\n      throw new exceptions_1.BaseException(\"Path \\\"\" + path + \"\\\" contains \\\"\" + illegalCharacter[0] + \"\\\" which is not allowed in a route config.\");\n    }\n  }\n  var PathMatch = (function() {\n    function PathMatch(instruction, remaining, remainingAux) {\n      this.instruction = instruction;\n      this.remaining = remaining;\n      this.remainingAux = remainingAux;\n    }\n    return PathMatch;\n  })();\n  exports.PathMatch = PathMatch;\n  var PathRecognizer = (function() {\n    function PathRecognizer(path, handler) {\n      this.path = path;\n      this.handler = handler;\n      this.terminal = true;\n      this._cache = new collection_1.Map();\n      assertPath(path);\n      var parsed = parsePathString(path);\n      this._segments = parsed['segments'];\n      this.specificity = parsed['specificity'];\n      this.hash = pathDslHash(this._segments);\n      var lastSegment = this._segments[this._segments.length - 1];\n      this.terminal = !(lastSegment instanceof ContinuationSegment);\n    }\n    PathRecognizer.prototype.recognize = function(beginningSegment) {\n      var nextSegment = beginningSegment;\n      var currentSegment;\n      var positionalParams = {};\n      var captured = [];\n      for (var i = 0; i < this._segments.length; i += 1) {\n        var segment = this._segments[i];\n        currentSegment = nextSegment;\n        if (segment instanceof ContinuationSegment) {\n          break;\n        }\n        if (lang_1.isPresent(currentSegment)) {\n          captured.push(currentSegment.path);\n          if (segment instanceof StarSegment) {\n            positionalParams[segment.name] = currentSegment.toString();\n            nextSegment = null;\n            break;\n          }\n          if (segment instanceof DynamicSegment) {\n            positionalParams[segment.name] = currentSegment.path;\n          } else if (!segment.match(currentSegment.path)) {\n            return null;\n          }\n          nextSegment = currentSegment.child;\n        } else if (!segment.match('')) {\n          return null;\n        }\n      }\n      if (this.terminal && lang_1.isPresent(nextSegment)) {\n        return null;\n      }\n      var urlPath = captured.join('/');\n      var auxiliary;\n      var instruction;\n      var urlParams;\n      var allParams;\n      if (lang_1.isPresent(currentSegment)) {\n        var paramsSegment = beginningSegment instanceof url_parser_1.RootUrl ? beginningSegment : currentSegment;\n        allParams = lang_1.isPresent(paramsSegment.params) ? collection_1.StringMapWrapper.merge(paramsSegment.params, positionalParams) : positionalParams;\n        urlParams = url_parser_1.serializeParams(paramsSegment.params);\n        auxiliary = currentSegment.auxiliary;\n      } else {\n        allParams = positionalParams;\n        auxiliary = [];\n        urlParams = [];\n      }\n      instruction = this._getInstruction(urlPath, urlParams, this, allParams);\n      return new PathMatch(instruction, nextSegment, auxiliary);\n    };\n    PathRecognizer.prototype.generate = function(params) {\n      var paramTokens = new TouchMap(params);\n      var path = [];\n      for (var i = 0; i < this._segments.length; i++) {\n        var segment = this._segments[i];\n        if (!(segment instanceof ContinuationSegment)) {\n          path.push(segment.generate(paramTokens));\n        }\n      }\n      var urlPath = path.join('/');\n      var nonPositionalParams = paramTokens.getUnused();\n      var urlParams = url_parser_1.serializeParams(nonPositionalParams);\n      return this._getInstruction(urlPath, urlParams, this, params);\n    };\n    PathRecognizer.prototype._getInstruction = function(urlPath, urlParams, _recognizer, params) {\n      var hashKey = urlPath + '?' + urlParams.join('?');\n      if (this._cache.has(hashKey)) {\n        return this._cache.get(hashKey);\n      }\n      var instruction = new instruction_1.ComponentInstruction_(urlPath, urlParams, _recognizer, params);\n      this._cache.set(hashKey, instruction);\n      return instruction;\n    };\n    return PathRecognizer;\n  })();\n  exports.PathRecognizer = PathRecognizer;\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"angular2/src/router/route_config_nomalizer\", [\"angular2/src/router/route_config_decorator\", \"angular2/src/facade/lang\", \"angular2/src/facade/exceptions\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  var route_config_decorator_1 = require(\"angular2/src/router/route_config_decorator\");\n  var lang_1 = require(\"angular2/src/facade/lang\");\n  var exceptions_1 = require(\"angular2/src/facade/exceptions\");\n  function normalizeRouteConfig(config) {\n    if (config instanceof route_config_decorator_1.Route || config instanceof route_config_decorator_1.Redirect || config instanceof route_config_decorator_1.AsyncRoute || config instanceof route_config_decorator_1.AuxRoute) {\n      return config;\n    }\n    if ((+!!config.component) + (+!!config.redirectTo) + (+!!config.loader) != 1) {\n      throw new exceptions_1.BaseException(\"Route config should contain exactly one \\\"component\\\", \\\"loader\\\", or \\\"redirectTo\\\" property.\");\n    }\n    if (config.as && config.name) {\n      throw new exceptions_1.BaseException(\"Route config should contain exactly one \\\"as\\\" or \\\"name\\\" property.\");\n    }\n    if (config.as) {\n      config.name = config.as;\n    }\n    if (config.loader) {\n      return new route_config_decorator_1.AsyncRoute({\n        path: config.path,\n        loader: config.loader,\n        name: config.name\n      });\n    }\n    if (config.aux) {\n      return new route_config_decorator_1.AuxRoute({\n        path: config.aux,\n        component: config.component,\n        name: config.name\n      });\n    }\n    if (config.component) {\n      if (typeof config.component == 'object') {\n        var componentDefinitionObject = config.component;\n        if (componentDefinitionObject.type == 'constructor') {\n          return new route_config_decorator_1.Route({\n            path: config.path,\n            component: componentDefinitionObject.constructor,\n            name: config.name\n          });\n        } else if (componentDefinitionObject.type == 'loader') {\n          return new route_config_decorator_1.AsyncRoute({\n            path: config.path,\n            loader: componentDefinitionObject.loader,\n            name: config.name\n          });\n        } else {\n          throw new exceptions_1.BaseException(\"Invalid component type \\\"\" + componentDefinitionObject.type + \"\\\". Valid types are \\\"constructor\\\" and \\\"loader\\\".\");\n        }\n      }\n      return new route_config_decorator_1.Route(config);\n    }\n    if (config.redirectTo) {\n      return new route_config_decorator_1.Redirect({\n        path: config.path,\n        redirectTo: config.redirectTo\n      });\n    }\n    return config;\n  }\n  exports.normalizeRouteConfig = normalizeRouteConfig;\n  function assertComponentExists(component, path) {\n    if (!lang_1.isType(component)) {\n      throw new exceptions_1.BaseException(\"Component for route \\\"\" + path + \"\\\" is not defined, or is not a class.\");\n    }\n  }\n  exports.assertComponentExists = assertComponentExists;\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"angular2/src/router/route_lifecycle_reflector\", [\"angular2/src/facade/lang\", \"angular2/src/router/lifecycle_annotations_impl\", \"angular2/src/core/reflection/reflection\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  var lang_1 = require(\"angular2/src/facade/lang\");\n  var lifecycle_annotations_impl_1 = require(\"angular2/src/router/lifecycle_annotations_impl\");\n  var reflection_1 = require(\"angular2/src/core/reflection/reflection\");\n  function hasLifecycleHook(e, type) {\n    if (!(type instanceof lang_1.Type))\n      return false;\n    return e.name in type.prototype;\n  }\n  exports.hasLifecycleHook = hasLifecycleHook;\n  function getCanActivateHook(type) {\n    var annotations = reflection_1.reflector.annotations(type);\n    for (var i = 0; i < annotations.length; i += 1) {\n      var annotation = annotations[i];\n      if (annotation instanceof lifecycle_annotations_impl_1.CanActivate) {\n        return annotation.fn;\n      }\n    }\n    return null;\n  }\n  exports.getCanActivateHook = getCanActivateHook;\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"angular2/src/router/router_link\", [\"angular2/angular2\", \"angular2/src/facade/lang\", \"angular2/src/router/router\", \"angular2/src/router/location\", \"angular2/src/router/instruction\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  var __decorate = (this && this.__decorate) || function(decorators, target, key, desc) {\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\")\n      return Reflect.decorate(decorators, target, key, desc);\n    switch (arguments.length) {\n      case 2:\n        return decorators.reduceRight(function(o, d) {\n          return (d && d(o)) || o;\n        }, target);\n      case 3:\n        return decorators.reduceRight(function(o, d) {\n          return (d && d(target, key)), void 0;\n        }, void 0);\n      case 4:\n        return decorators.reduceRight(function(o, d) {\n          return (d && d(target, key, o)) || o;\n        }, desc);\n    }\n  };\n  var __metadata = (this && this.__metadata) || function(k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\")\n      return Reflect.metadata(k, v);\n  };\n  var angular2_1 = require(\"angular2/angular2\");\n  var lang_1 = require(\"angular2/src/facade/lang\");\n  var router_1 = require(\"angular2/src/router/router\");\n  var location_1 = require(\"angular2/src/router/location\");\n  var instruction_1 = require(\"angular2/src/router/instruction\");\n  var RouterLink = (function() {\n    function RouterLink(_router, _location) {\n      this._router = _router;\n      this._location = _location;\n    }\n    Object.defineProperty(RouterLink.prototype, \"isRouteActive\", {\n      get: function() {\n        return this._router.isRouteActive(this._navigationInstruction);\n      },\n      enumerable: true,\n      configurable: true\n    });\n    Object.defineProperty(RouterLink.prototype, \"routeParams\", {\n      set: function(changes) {\n        this._routeParams = changes;\n        this._navigationInstruction = this._router.generate(this._routeParams);\n        var navigationHref = instruction_1.stringifyInstruction(this._navigationInstruction);\n        this.visibleHref = this._location.prepareExternalUrl(navigationHref);\n      },\n      enumerable: true,\n      configurable: true\n    });\n    RouterLink.prototype.onClick = function() {\n      if (!lang_1.isString(this.target) || this.target == '_self') {\n        this._router.navigateByInstruction(this._navigationInstruction);\n        return false;\n      }\n      return true;\n    };\n    RouterLink = __decorate([angular2_1.Directive({\n      selector: '[router-link]',\n      inputs: ['routeParams: routerLink', 'target: target'],\n      host: {\n        '(click)': 'onClick()',\n        '[attr.href]': 'visibleHref',\n        '[class.router-link-active]': 'isRouteActive'\n      }\n    }), __metadata('design:paramtypes', [router_1.Router, location_1.Location])], RouterLink);\n    return RouterLink;\n  })();\n  exports.RouterLink = RouterLink;\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"angular2/src/router/route_recognizer\", [\"angular2/src/facade/lang\", \"angular2/src/facade/exceptions\", \"angular2/src/facade/collection\", \"angular2/src/router/path_recognizer\", \"angular2/src/router/route_config_impl\", \"angular2/src/router/async_route_handler\", \"angular2/src/router/sync_route_handler\", \"angular2/src/router/url_parser\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  var lang_1 = require(\"angular2/src/facade/lang\");\n  var exceptions_1 = require(\"angular2/src/facade/exceptions\");\n  var collection_1 = require(\"angular2/src/facade/collection\");\n  var path_recognizer_1 = require(\"angular2/src/router/path_recognizer\");\n  var route_config_impl_1 = require(\"angular2/src/router/route_config_impl\");\n  var async_route_handler_1 = require(\"angular2/src/router/async_route_handler\");\n  var sync_route_handler_1 = require(\"angular2/src/router/sync_route_handler\");\n  var url_parser_1 = require(\"angular2/src/router/url_parser\");\n  var RouteRecognizer = (function() {\n    function RouteRecognizer() {\n      this.names = new collection_1.Map();\n      this.auxRoutes = new collection_1.Map();\n      this.matchers = [];\n      this.redirects = [];\n    }\n    RouteRecognizer.prototype.config = function(config) {\n      var handler;\n      if (lang_1.isPresent(config.name) && config.name[0].toUpperCase() != config.name[0]) {\n        var suggestedName = config.name[0].toUpperCase() + config.name.substring(1);\n        throw new exceptions_1.BaseException(\"Route \\\"\" + config.path + \"\\\" with name \\\"\" + config.name + \"\\\" does not begin with an uppercase letter. Route names should be CamelCase like \\\"\" + suggestedName + \"\\\".\");\n      }\n      if (config instanceof route_config_impl_1.AuxRoute) {\n        handler = new sync_route_handler_1.SyncRouteHandler(config.component, config.data);\n        var path = config.path.startsWith('/') ? config.path.substring(1) : config.path;\n        var recognizer = new path_recognizer_1.PathRecognizer(config.path, handler);\n        this.auxRoutes.set(path, recognizer);\n        return recognizer.terminal;\n      }\n      if (config instanceof route_config_impl_1.Redirect) {\n        this.redirects.push(new Redirector(config.path, config.redirectTo));\n        return true;\n      }\n      if (config instanceof route_config_impl_1.Route) {\n        handler = new sync_route_handler_1.SyncRouteHandler(config.component, config.data);\n      } else if (config instanceof route_config_impl_1.AsyncRoute) {\n        handler = new async_route_handler_1.AsyncRouteHandler(config.loader, config.data);\n      }\n      var recognizer = new path_recognizer_1.PathRecognizer(config.path, handler);\n      this.matchers.forEach(function(matcher) {\n        if (recognizer.hash == matcher.hash) {\n          throw new exceptions_1.BaseException(\"Configuration '\" + config.path + \"' conflicts with existing route '\" + matcher.path + \"'\");\n        }\n      });\n      this.matchers.push(recognizer);\n      if (lang_1.isPresent(config.name)) {\n        this.names.set(config.name, recognizer);\n      }\n      return recognizer.terminal;\n    };\n    RouteRecognizer.prototype.recognize = function(urlParse) {\n      var solutions = [];\n      urlParse = this._redirect(urlParse);\n      this.matchers.forEach(function(pathRecognizer) {\n        var pathMatch = pathRecognizer.recognize(urlParse);\n        if (lang_1.isPresent(pathMatch)) {\n          solutions.push(pathMatch);\n        }\n      });\n      return solutions;\n    };\n    RouteRecognizer.prototype._redirect = function(urlParse) {\n      for (var i = 0; i < this.redirects.length; i += 1) {\n        var redirector = this.redirects[i];\n        var redirectedUrl = redirector.redirect(urlParse);\n        if (lang_1.isPresent(redirectedUrl)) {\n          return redirectedUrl;\n        }\n      }\n      return urlParse;\n    };\n    RouteRecognizer.prototype.recognizeAuxiliary = function(urlParse) {\n      var pathRecognizer = this.auxRoutes.get(urlParse.path);\n      if (lang_1.isBlank(pathRecognizer)) {\n        return null;\n      }\n      return pathRecognizer.recognize(urlParse);\n    };\n    RouteRecognizer.prototype.hasRoute = function(name) {\n      return this.names.has(name);\n    };\n    RouteRecognizer.prototype.generate = function(name, params) {\n      var pathRecognizer = this.names.get(name);\n      if (lang_1.isBlank(pathRecognizer)) {\n        return null;\n      }\n      return pathRecognizer.generate(params);\n    };\n    return RouteRecognizer;\n  })();\n  exports.RouteRecognizer = RouteRecognizer;\n  var Redirector = (function() {\n    function Redirector(path, redirectTo) {\n      this.segments = [];\n      this.toSegments = [];\n      if (path.startsWith('/')) {\n        path = path.substring(1);\n      }\n      this.segments = path.split('/');\n      if (redirectTo.startsWith('/')) {\n        redirectTo = redirectTo.substring(1);\n      }\n      this.toSegments = redirectTo.split('/');\n    }\n    Redirector.prototype.redirect = function(urlParse) {\n      for (var i = 0; i < this.segments.length; i += 1) {\n        if (lang_1.isBlank(urlParse)) {\n          return null;\n        }\n        var segment = this.segments[i];\n        if (segment != urlParse.path) {\n          return null;\n        }\n        urlParse = urlParse.child;\n      }\n      for (var i = this.toSegments.length - 1; i >= 0; i -= 1) {\n        var segment = this.toSegments[i];\n        urlParse = new url_parser_1.Url(segment, urlParse);\n      }\n      return urlParse;\n    };\n    return Redirector;\n  })();\n  exports.Redirector = Redirector;\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"angular2/src/router/route_registry\", [\"angular2/src/router/route_recognizer\", \"angular2/src/router/instruction\", \"angular2/src/facade/collection\", \"angular2/src/facade/async\", \"angular2/src/facade/lang\", \"angular2/src/facade/exceptions\", \"angular2/src/router/route_config_impl\", \"angular2/src/core/reflection/reflection\", \"angular2/angular2\", \"angular2/src/router/route_config_nomalizer\", \"angular2/src/router/url_parser\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  var __decorate = (this && this.__decorate) || function(decorators, target, key, desc) {\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\")\n      return Reflect.decorate(decorators, target, key, desc);\n    switch (arguments.length) {\n      case 2:\n        return decorators.reduceRight(function(o, d) {\n          return (d && d(o)) || o;\n        }, target);\n      case 3:\n        return decorators.reduceRight(function(o, d) {\n          return (d && d(target, key)), void 0;\n        }, void 0);\n      case 4:\n        return decorators.reduceRight(function(o, d) {\n          return (d && d(target, key, o)) || o;\n        }, desc);\n    }\n  };\n  var __metadata = (this && this.__metadata) || function(k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\")\n      return Reflect.metadata(k, v);\n  };\n  var route_recognizer_1 = require(\"angular2/src/router/route_recognizer\");\n  var instruction_1 = require(\"angular2/src/router/instruction\");\n  var collection_1 = require(\"angular2/src/facade/collection\");\n  var async_1 = require(\"angular2/src/facade/async\");\n  var lang_1 = require(\"angular2/src/facade/lang\");\n  var exceptions_1 = require(\"angular2/src/facade/exceptions\");\n  var route_config_impl_1 = require(\"angular2/src/router/route_config_impl\");\n  var reflection_1 = require(\"angular2/src/core/reflection/reflection\");\n  var angular2_1 = require(\"angular2/angular2\");\n  var route_config_nomalizer_1 = require(\"angular2/src/router/route_config_nomalizer\");\n  var url_parser_1 = require(\"angular2/src/router/url_parser\");\n  var _resolveToNull = async_1.PromiseWrapper.resolve(null);\n  var RouteRegistry = (function() {\n    function RouteRegistry() {\n      this._rules = new collection_1.Map();\n    }\n    RouteRegistry.prototype.config = function(parentComponent, config) {\n      config = route_config_nomalizer_1.normalizeRouteConfig(config);\n      if (config instanceof route_config_impl_1.Route) {\n        route_config_nomalizer_1.assertComponentExists(config.component, config.path);\n      } else if (config instanceof route_config_impl_1.AuxRoute) {\n        route_config_nomalizer_1.assertComponentExists(config.component, config.path);\n      }\n      var recognizer = this._rules.get(parentComponent);\n      if (lang_1.isBlank(recognizer)) {\n        recognizer = new route_recognizer_1.RouteRecognizer();\n        this._rules.set(parentComponent, recognizer);\n      }\n      var terminal = recognizer.config(config);\n      if (config instanceof route_config_impl_1.Route) {\n        if (terminal) {\n          assertTerminalComponent(config.component, config.path);\n        } else {\n          this.configFromComponent(config.component);\n        }\n      }\n    };\n    RouteRegistry.prototype.configFromComponent = function(component) {\n      var _this = this;\n      if (!lang_1.isType(component)) {\n        return ;\n      }\n      if (this._rules.has(component)) {\n        return ;\n      }\n      var annotations = reflection_1.reflector.annotations(component);\n      if (lang_1.isPresent(annotations)) {\n        for (var i = 0; i < annotations.length; i++) {\n          var annotation = annotations[i];\n          if (annotation instanceof route_config_impl_1.RouteConfig) {\n            var routeCfgs = annotation.configs;\n            routeCfgs.forEach(function(config) {\n              return _this.config(component, config);\n            });\n          }\n        }\n      }\n    };\n    RouteRegistry.prototype.recognize = function(url, parentComponent) {\n      var parsedUrl = url_parser_1.parser.parse(url);\n      return this._recognize(parsedUrl, parentComponent);\n    };\n    RouteRegistry.prototype._recognize = function(parsedUrl, parentComponent) {\n      var _this = this;\n      return this._recognizePrimaryRoute(parsedUrl, parentComponent).then(function(instruction) {\n        return _this._completeAuxiliaryRouteMatches(instruction, parentComponent);\n      });\n    };\n    RouteRegistry.prototype._recognizePrimaryRoute = function(parsedUrl, parentComponent) {\n      var _this = this;\n      var componentRecognizer = this._rules.get(parentComponent);\n      if (lang_1.isBlank(componentRecognizer)) {\n        return _resolveToNull;\n      }\n      var possibleMatches = componentRecognizer.recognize(parsedUrl);\n      var matchPromises = possibleMatches.map(function(candidate) {\n        return _this._completePrimaryRouteMatch(candidate);\n      });\n      return async_1.PromiseWrapper.all(matchPromises).then(mostSpecific);\n    };\n    RouteRegistry.prototype._completePrimaryRouteMatch = function(partialMatch) {\n      var _this = this;\n      var instruction = partialMatch.instruction;\n      return instruction.resolveComponentType().then(function(componentType) {\n        _this.configFromComponent(componentType);\n        if (instruction.terminal) {\n          return new instruction_1.PrimaryInstruction(instruction, null, partialMatch.remainingAux);\n        }\n        return _this._recognizePrimaryRoute(partialMatch.remaining, componentType).then(function(childInstruction) {\n          if (lang_1.isBlank(childInstruction)) {\n            return null;\n          } else {\n            return new instruction_1.PrimaryInstruction(instruction, childInstruction, partialMatch.remainingAux);\n          }\n        });\n      });\n    };\n    RouteRegistry.prototype._completeAuxiliaryRouteMatches = function(instruction, parentComponent) {\n      var _this = this;\n      if (lang_1.isBlank(instruction)) {\n        return _resolveToNull;\n      }\n      var componentRecognizer = this._rules.get(parentComponent);\n      var auxInstructions = {};\n      var promises = instruction.auxUrls.map(function(auxSegment) {\n        var match = componentRecognizer.recognizeAuxiliary(auxSegment);\n        if (lang_1.isBlank(match)) {\n          return _resolveToNull;\n        }\n        return _this._completePrimaryRouteMatch(match).then(function(auxInstruction) {\n          if (lang_1.isPresent(auxInstruction)) {\n            return _this._completeAuxiliaryRouteMatches(auxInstruction, parentComponent).then(function(finishedAuxRoute) {\n              auxInstructions[auxSegment.path] = finishedAuxRoute;\n            });\n          }\n        });\n      });\n      return async_1.PromiseWrapper.all(promises).then(function(_) {\n        if (lang_1.isBlank(instruction.child)) {\n          return new instruction_1.Instruction(instruction.component, null, auxInstructions);\n        }\n        return _this._completeAuxiliaryRouteMatches(instruction.child, instruction.component.componentType).then(function(completeChild) {\n          return new instruction_1.Instruction(instruction.component, completeChild, auxInstructions);\n        });\n      });\n    };\n    RouteRegistry.prototype.generate = function(linkParams, parentComponent) {\n      var segments = [];\n      var componentCursor = parentComponent;\n      var lastInstructionIsTerminal = false;\n      for (var i = 0; i < linkParams.length; i += 1) {\n        var segment = linkParams[i];\n        if (lang_1.isBlank(componentCursor)) {\n          throw new exceptions_1.BaseException(\"Could not find route named \\\"\" + segment + \"\\\".\");\n        }\n        if (!lang_1.isString(segment)) {\n          throw new exceptions_1.BaseException(\"Unexpected segment \\\"\" + segment + \"\\\" in link DSL. Expected a string.\");\n        } else if (segment == '' || segment == '.' || segment == '..') {\n          throw new exceptions_1.BaseException(\"\\\"\" + segment + \"/\\\" is only allowed at the beginning of a link DSL.\");\n        }\n        var params = {};\n        if (i + 1 < linkParams.length) {\n          var nextSegment = linkParams[i + 1];\n          if (lang_1.isStringMap(nextSegment)) {\n            params = nextSegment;\n            i += 1;\n          }\n        }\n        var componentRecognizer = this._rules.get(componentCursor);\n        if (lang_1.isBlank(componentRecognizer)) {\n          throw new exceptions_1.BaseException(\"Component \\\"\" + lang_1.getTypeNameForDebugging(componentCursor) + \"\\\" has no route config.\");\n        }\n        var response = componentRecognizer.generate(segment, params);\n        if (lang_1.isBlank(response)) {\n          throw new exceptions_1.BaseException(\"Component \\\"\" + lang_1.getTypeNameForDebugging(componentCursor) + \"\\\" has no route named \\\"\" + segment + \"\\\".\");\n        }\n        segments.push(response);\n        componentCursor = response.componentType;\n        lastInstructionIsTerminal = response.terminal;\n      }\n      var instruction = null;\n      if (!lastInstructionIsTerminal) {\n        instruction = this._generateRedirects(componentCursor);\n        if (lang_1.isPresent(instruction)) {\n          var lastInstruction = instruction;\n          while (lang_1.isPresent(lastInstruction.child)) {\n            lastInstruction = lastInstruction.child;\n          }\n          lastInstructionIsTerminal = lastInstruction.component.terminal;\n        }\n        if (lang_1.isPresent(componentCursor) && !lastInstructionIsTerminal) {\n          throw new exceptions_1.BaseException(\"Link \\\"\" + collection_1.ListWrapper.toJSON(linkParams) + \"\\\" does not resolve to a terminal or async instruction.\");\n        }\n      }\n      while (segments.length > 0) {\n        instruction = new instruction_1.Instruction(segments.pop(), instruction, {});\n      }\n      return instruction;\n    };\n    RouteRegistry.prototype.hasRoute = function(name, parentComponent) {\n      var componentRecognizer = this._rules.get(parentComponent);\n      if (lang_1.isBlank(componentRecognizer)) {\n        return false;\n      }\n      return componentRecognizer.hasRoute(name);\n    };\n    RouteRegistry.prototype._generateRedirects = function(componentCursor) {\n      if (lang_1.isBlank(componentCursor)) {\n        return null;\n      }\n      var componentRecognizer = this._rules.get(componentCursor);\n      if (lang_1.isBlank(componentRecognizer)) {\n        return null;\n      }\n      for (var i = 0; i < componentRecognizer.redirects.length; i += 1) {\n        var redirect = componentRecognizer.redirects[i];\n        if (redirect.segments.length == 1 && redirect.segments[0] == '') {\n          var toSegments = url_parser_1.pathSegmentsToUrl(redirect.toSegments);\n          var matches = componentRecognizer.recognize(toSegments);\n          var primaryInstruction = collection_1.ListWrapper.maximum(matches, function(match) {\n            return match.instruction.specificity;\n          });\n          if (lang_1.isPresent(primaryInstruction)) {\n            var child = this._generateRedirects(primaryInstruction.instruction.componentType);\n            return new instruction_1.Instruction(primaryInstruction.instruction, child, {});\n          }\n          return null;\n        }\n      }\n      return null;\n    };\n    RouteRegistry = __decorate([angular2_1.Injectable(), __metadata('design:paramtypes', [])], RouteRegistry);\n    return RouteRegistry;\n  })();\n  exports.RouteRegistry = RouteRegistry;\n  function mostSpecific(instructions) {\n    return collection_1.ListWrapper.maximum(instructions, function(instruction) {\n      return instruction.component.specificity;\n    });\n  }\n  function assertTerminalComponent(component, path) {\n    if (!lang_1.isType(component)) {\n      return ;\n    }\n    var annotations = reflection_1.reflector.annotations(component);\n    if (lang_1.isPresent(annotations)) {\n      for (var i = 0; i < annotations.length; i++) {\n        var annotation = annotations[i];\n        if (annotation instanceof route_config_impl_1.RouteConfig) {\n          throw new exceptions_1.BaseException(\"Child routes are not allowed for \\\"\" + path + \"\\\". Use \\\"...\\\" on the parent's route path.\");\n        }\n      }\n    }\n  }\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"angular2/src/router/router\", [\"angular2/src/facade/async\", \"angular2/src/facade/collection\", \"angular2/src/facade/lang\", \"angular2/src/facade/exceptions\", \"angular2/src/router/instruction\", \"angular2/src/router/route_lifecycle_reflector\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  var __extends = (this && this.__extends) || function(d, b) {\n    for (var p in b)\n      if (b.hasOwnProperty(p))\n        d[p] = b[p];\n    function __() {\n      this.constructor = d;\n    }\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n  };\n  var async_1 = require(\"angular2/src/facade/async\");\n  var collection_1 = require(\"angular2/src/facade/collection\");\n  var lang_1 = require(\"angular2/src/facade/lang\");\n  var exceptions_1 = require(\"angular2/src/facade/exceptions\");\n  var instruction_1 = require(\"angular2/src/router/instruction\");\n  var route_lifecycle_reflector_1 = require(\"angular2/src/router/route_lifecycle_reflector\");\n  var _resolveToTrue = async_1.PromiseWrapper.resolve(true);\n  var _resolveToFalse = async_1.PromiseWrapper.resolve(false);\n  var Router = (function() {\n    function Router(registry, parent, hostComponent) {\n      this.registry = registry;\n      this.parent = parent;\n      this.hostComponent = hostComponent;\n      this.navigating = false;\n      this._currentInstruction = null;\n      this._currentNavigation = _resolveToTrue;\n      this._outlet = null;\n      this._auxRouters = new collection_1.Map();\n      this._subject = new async_1.EventEmitter();\n    }\n    Router.prototype.childRouter = function(hostComponent) {\n      return this._childRouter = new ChildRouter(this, hostComponent);\n    };\n    Router.prototype.auxRouter = function(hostComponent) {\n      return new ChildRouter(this, hostComponent);\n    };\n    Router.prototype.registerPrimaryOutlet = function(outlet) {\n      if (lang_1.isPresent(outlet.name)) {\n        throw new exceptions_1.BaseException(\"registerPrimaryOutlet expects to be called with an unnamed outlet.\");\n      }\n      this._outlet = outlet;\n      if (lang_1.isPresent(this._currentInstruction)) {\n        return this.commit(this._currentInstruction, false);\n      }\n      return _resolveToTrue;\n    };\n    Router.prototype.registerAuxOutlet = function(outlet) {\n      var outletName = outlet.name;\n      if (lang_1.isBlank(outletName)) {\n        throw new exceptions_1.BaseException(\"registerAuxOutlet expects to be called with an outlet with a name.\");\n      }\n      var router = this.auxRouter(this.hostComponent);\n      this._auxRouters.set(outletName, router);\n      router._outlet = outlet;\n      var auxInstruction;\n      if (lang_1.isPresent(this._currentInstruction) && lang_1.isPresent(auxInstruction = this._currentInstruction.auxInstruction[outletName])) {\n        return router.commit(auxInstruction);\n      }\n      return _resolveToTrue;\n    };\n    Router.prototype.isRouteActive = function(instruction) {\n      var router = this;\n      while (lang_1.isPresent(router.parent) && lang_1.isPresent(instruction.child)) {\n        router = router.parent;\n        instruction = instruction.child;\n      }\n      return lang_1.isPresent(this._currentInstruction) && this._currentInstruction.component == instruction.component;\n    };\n    Router.prototype.config = function(definitions) {\n      var _this = this;\n      definitions.forEach(function(routeDefinition) {\n        _this.registry.config(_this.hostComponent, routeDefinition);\n      });\n      return this.renavigate();\n    };\n    Router.prototype.navigate = function(linkParams) {\n      var instruction = this.generate(linkParams);\n      return this.navigateByInstruction(instruction, false);\n    };\n    Router.prototype.navigateByUrl = function(url, _skipLocationChange) {\n      var _this = this;\n      if (_skipLocationChange === void 0) {\n        _skipLocationChange = false;\n      }\n      return this._currentNavigation = this._currentNavigation.then(function(_) {\n        _this.lastNavigationAttempt = url;\n        _this._startNavigating();\n        return _this._afterPromiseFinishNavigating(_this.recognize(url).then(function(instruction) {\n          if (lang_1.isBlank(instruction)) {\n            return false;\n          }\n          return _this._navigate(instruction, _skipLocationChange);\n        }));\n      });\n    };\n    Router.prototype.navigateByInstruction = function(instruction, _skipLocationChange) {\n      var _this = this;\n      if (_skipLocationChange === void 0) {\n        _skipLocationChange = false;\n      }\n      if (lang_1.isBlank(instruction)) {\n        return _resolveToFalse;\n      }\n      return this._currentNavigation = this._currentNavigation.then(function(_) {\n        _this._startNavigating();\n        return _this._afterPromiseFinishNavigating(_this._navigate(instruction, _skipLocationChange));\n      });\n    };\n    Router.prototype._navigate = function(instruction, _skipLocationChange) {\n      var _this = this;\n      return this._settleInstruction(instruction).then(function(_) {\n        return _this._canReuse(instruction);\n      }).then(function(_) {\n        return _this._canActivate(instruction);\n      }).then(function(result) {\n        if (!result) {\n          return false;\n        }\n        return _this._canDeactivate(instruction).then(function(result) {\n          if (result) {\n            return _this.commit(instruction, _skipLocationChange).then(function(_) {\n              _this._emitNavigationFinish(instruction_1.stringifyInstruction(instruction));\n              return true;\n            });\n          }\n        });\n      });\n    };\n    Router.prototype._settleInstruction = function(instruction) {\n      var _this = this;\n      var unsettledInstructions = [];\n      if (lang_1.isBlank(instruction.component.componentType)) {\n        unsettledInstructions.push(instruction.component.resolveComponentType().then(function(type) {\n          _this.registry.configFromComponent(type);\n        }));\n      }\n      if (lang_1.isPresent(instruction.child)) {\n        unsettledInstructions.push(this._settleInstruction(instruction.child));\n      }\n      collection_1.StringMapWrapper.forEach(instruction.auxInstruction, function(instruction, _) {\n        unsettledInstructions.push(_this._settleInstruction(instruction));\n      });\n      return async_1.PromiseWrapper.all(unsettledInstructions);\n    };\n    Router.prototype._emitNavigationFinish = function(url) {\n      async_1.ObservableWrapper.callNext(this._subject, url);\n    };\n    Router.prototype._afterPromiseFinishNavigating = function(promise) {\n      var _this = this;\n      return async_1.PromiseWrapper.catchError(promise.then(function(_) {\n        return _this._finishNavigating();\n      }), function(err) {\n        _this._finishNavigating();\n        throw err;\n      });\n    };\n    Router.prototype._canReuse = function(instruction) {\n      var _this = this;\n      if (lang_1.isBlank(this._outlet)) {\n        return _resolveToFalse;\n      }\n      return this._outlet.canReuse(instruction.component).then(function(result) {\n        instruction.component.reuse = result;\n        if (result && lang_1.isPresent(_this._childRouter) && lang_1.isPresent(instruction.child)) {\n          return _this._childRouter._canReuse(instruction.child);\n        }\n      });\n    };\n    Router.prototype._canActivate = function(nextInstruction) {\n      return canActivateOne(nextInstruction, this._currentInstruction);\n    };\n    Router.prototype._canDeactivate = function(instruction) {\n      var _this = this;\n      if (lang_1.isBlank(this._outlet)) {\n        return _resolveToTrue;\n      }\n      var next;\n      var childInstruction = null;\n      var reuse = false;\n      var componentInstruction = null;\n      if (lang_1.isPresent(instruction)) {\n        childInstruction = instruction.child;\n        componentInstruction = instruction.component;\n        reuse = instruction.component.reuse;\n      }\n      if (reuse) {\n        next = _resolveToTrue;\n      } else {\n        next = this._outlet.canDeactivate(componentInstruction);\n      }\n      return next.then(function(result) {\n        if (result == false) {\n          return false;\n        }\n        if (lang_1.isPresent(_this._childRouter)) {\n          return _this._childRouter._canDeactivate(childInstruction);\n        }\n        return true;\n      });\n    };\n    Router.prototype.commit = function(instruction, _skipLocationChange) {\n      var _this = this;\n      if (_skipLocationChange === void 0) {\n        _skipLocationChange = false;\n      }\n      this._currentInstruction = instruction;\n      var next = _resolveToTrue;\n      if (lang_1.isPresent(this._outlet)) {\n        var componentInstruction = instruction.component;\n        if (componentInstruction.reuse) {\n          next = this._outlet.reuse(componentInstruction);\n        } else {\n          next = this.deactivate(instruction).then(function(_) {\n            return _this._outlet.activate(componentInstruction);\n          });\n        }\n        if (lang_1.isPresent(instruction.child)) {\n          next = next.then(function(_) {\n            if (lang_1.isPresent(_this._childRouter)) {\n              return _this._childRouter.commit(instruction.child);\n            }\n          });\n        }\n      }\n      var promises = [];\n      this._auxRouters.forEach(function(router, name) {\n        if (lang_1.isPresent(instruction.auxInstruction[name])) {\n          promises.push(router.commit(instruction.auxInstruction[name]));\n        }\n      });\n      return next.then(function(_) {\n        return async_1.PromiseWrapper.all(promises);\n      });\n    };\n    Router.prototype._startNavigating = function() {\n      this.navigating = true;\n    };\n    Router.prototype._finishNavigating = function() {\n      this.navigating = false;\n    };\n    Router.prototype.subscribe = function(onNext) {\n      return async_1.ObservableWrapper.subscribe(this._subject, onNext);\n    };\n    Router.prototype.deactivate = function(instruction) {\n      var _this = this;\n      var childInstruction = null;\n      var componentInstruction = null;\n      if (lang_1.isPresent(instruction)) {\n        childInstruction = instruction.child;\n        componentInstruction = instruction.component;\n      }\n      var next = _resolveToTrue;\n      if (lang_1.isPresent(this._childRouter)) {\n        next = this._childRouter.deactivate(childInstruction);\n      }\n      if (lang_1.isPresent(this._outlet)) {\n        next = next.then(function(_) {\n          return _this._outlet.deactivate(componentInstruction);\n        });\n      }\n      return next;\n    };\n    Router.prototype.recognize = function(url) {\n      return this.registry.recognize(url, this.hostComponent);\n    };\n    Router.prototype.renavigate = function() {\n      if (lang_1.isBlank(this.lastNavigationAttempt)) {\n        return this._currentNavigation;\n      }\n      return this.navigateByUrl(this.lastNavigationAttempt);\n    };\n    Router.prototype.generate = function(linkParams) {\n      var normalizedLinkParams = splitAndFlattenLinkParams(linkParams);\n      var first = collection_1.ListWrapper.first(normalizedLinkParams);\n      var rest = collection_1.ListWrapper.slice(normalizedLinkParams, 1);\n      var router = this;\n      if (first == '') {\n        while (lang_1.isPresent(router.parent)) {\n          router = router.parent;\n        }\n      } else if (first == '..') {\n        router = router.parent;\n        while (collection_1.ListWrapper.first(rest) == '..') {\n          rest = collection_1.ListWrapper.slice(rest, 1);\n          router = router.parent;\n          if (lang_1.isBlank(router)) {\n            throw new exceptions_1.BaseException(\"Link \\\"\" + collection_1.ListWrapper.toJSON(linkParams) + \"\\\" has too many \\\"../\\\" segments.\");\n          }\n        }\n      } else if (first != '.') {\n        var childRouteExists = this.registry.hasRoute(first, this.hostComponent);\n        var parentRouteExists = lang_1.isPresent(this.parent) && this.registry.hasRoute(first, this.parent.hostComponent);\n        if (parentRouteExists && childRouteExists) {\n          var msg = \"Link \\\"\" + collection_1.ListWrapper.toJSON(linkParams) + \"\\\" is ambiguous, use \\\"./\\\" or \\\"../\\\" to disambiguate.\";\n          throw new exceptions_1.BaseException(msg);\n        }\n        if (parentRouteExists) {\n          router = this.parent;\n        }\n        rest = linkParams;\n      }\n      if (rest[rest.length - 1] == '') {\n        rest.pop();\n      }\n      if (rest.length < 1) {\n        var msg = \"Link \\\"\" + collection_1.ListWrapper.toJSON(linkParams) + \"\\\" must include a route name.\";\n        throw new exceptions_1.BaseException(msg);\n      }\n      var nextInstruction = this.registry.generate(rest, router.hostComponent);\n      var url = [];\n      var parent = router.parent;\n      while (lang_1.isPresent(parent)) {\n        url.unshift(parent._currentInstruction);\n        parent = parent.parent;\n      }\n      while (url.length > 0) {\n        nextInstruction = url.pop().replaceChild(nextInstruction);\n      }\n      return nextInstruction;\n    };\n    return Router;\n  })();\n  exports.Router = Router;\n  var RootRouter = (function(_super) {\n    __extends(RootRouter, _super);\n    function RootRouter(registry, location, primaryComponent) {\n      var _this = this;\n      _super.call(this, registry, null, primaryComponent);\n      this._location = location;\n      this._locationSub = this._location.subscribe(function(change) {\n        return _this.navigateByUrl(change['url'], lang_1.isPresent(change['pop']));\n      });\n      this.registry.configFromComponent(primaryComponent);\n      this.navigateByUrl(location.path());\n    }\n    RootRouter.prototype.commit = function(instruction, _skipLocationChange) {\n      var _this = this;\n      if (_skipLocationChange === void 0) {\n        _skipLocationChange = false;\n      }\n      var emitPath = instruction_1.stringifyInstructionPath(instruction);\n      var emitQuery = instruction_1.stringifyInstructionQuery(instruction);\n      if (emitPath.length > 0) {\n        emitPath = '/' + emitPath;\n      }\n      var promise = _super.prototype.commit.call(this, instruction);\n      if (!_skipLocationChange) {\n        promise = promise.then(function(_) {\n          _this._location.go(emitPath, emitQuery);\n        });\n      }\n      return promise;\n    };\n    RootRouter.prototype.dispose = function() {\n      if (lang_1.isPresent(this._locationSub)) {\n        async_1.ObservableWrapper.dispose(this._locationSub);\n        this._locationSub = null;\n      }\n    };\n    return RootRouter;\n  })(Router);\n  exports.RootRouter = RootRouter;\n  var ChildRouter = (function(_super) {\n    __extends(ChildRouter, _super);\n    function ChildRouter(parent, hostComponent) {\n      _super.call(this, parent.registry, parent, hostComponent);\n      this.parent = parent;\n    }\n    ChildRouter.prototype.navigateByUrl = function(url, _skipLocationChange) {\n      if (_skipLocationChange === void 0) {\n        _skipLocationChange = false;\n      }\n      return this.parent.navigateByUrl(url, _skipLocationChange);\n    };\n    ChildRouter.prototype.navigateByInstruction = function(instruction, _skipLocationChange) {\n      if (_skipLocationChange === void 0) {\n        _skipLocationChange = false;\n      }\n      return this.parent.navigateByInstruction(instruction, _skipLocationChange);\n    };\n    return ChildRouter;\n  })(Router);\n  function splitAndFlattenLinkParams(linkParams) {\n    return linkParams.reduce(function(accumulation, item) {\n      if (lang_1.isString(item)) {\n        var strItem = item;\n        return accumulation.concat(strItem.split('/'));\n      }\n      accumulation.push(item);\n      return accumulation;\n    }, []);\n  }\n  function canActivateOne(nextInstruction, prevInstruction) {\n    var next = _resolveToTrue;\n    if (lang_1.isPresent(nextInstruction.child)) {\n      next = canActivateOne(nextInstruction.child, lang_1.isPresent(prevInstruction) ? prevInstruction.child : null);\n    }\n    return next.then(function(result) {\n      if (result == false) {\n        return false;\n      }\n      if (nextInstruction.component.reuse) {\n        return true;\n      }\n      var hook = route_lifecycle_reflector_1.getCanActivateHook(nextInstruction.component.componentType);\n      if (lang_1.isPresent(hook)) {\n        return hook(nextInstruction.component, lang_1.isPresent(prevInstruction) ? prevInstruction.component : null);\n      }\n      return true;\n    });\n  }\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"angular2/src/router/router_outlet\", [\"angular2/src/facade/async\", \"angular2/src/facade/collection\", \"angular2/src/facade/lang\", \"angular2/src/facade/exceptions\", \"angular2/angular2\", \"angular2/src/router/router\", \"angular2/src/router/instruction\", \"angular2/src/router/lifecycle_annotations\", \"angular2/src/router/route_lifecycle_reflector\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  var __decorate = (this && this.__decorate) || function(decorators, target, key, desc) {\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\")\n      return Reflect.decorate(decorators, target, key, desc);\n    switch (arguments.length) {\n      case 2:\n        return decorators.reduceRight(function(o, d) {\n          return (d && d(o)) || o;\n        }, target);\n      case 3:\n        return decorators.reduceRight(function(o, d) {\n          return (d && d(target, key)), void 0;\n        }, void 0);\n      case 4:\n        return decorators.reduceRight(function(o, d) {\n          return (d && d(target, key, o)) || o;\n        }, desc);\n    }\n  };\n  var __metadata = (this && this.__metadata) || function(k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\")\n      return Reflect.metadata(k, v);\n  };\n  var __param = (this && this.__param) || function(paramIndex, decorator) {\n    return function(target, key) {\n      decorator(target, key, paramIndex);\n    };\n  };\n  var async_1 = require(\"angular2/src/facade/async\");\n  var collection_1 = require(\"angular2/src/facade/collection\");\n  var lang_1 = require(\"angular2/src/facade/lang\");\n  var exceptions_1 = require(\"angular2/src/facade/exceptions\");\n  var angular2_1 = require(\"angular2/angular2\");\n  var routerMod = require(\"angular2/src/router/router\");\n  var instruction_1 = require(\"angular2/src/router/instruction\");\n  var hookMod = require(\"angular2/src/router/lifecycle_annotations\");\n  var route_lifecycle_reflector_1 = require(\"angular2/src/router/route_lifecycle_reflector\");\n  var _resolveToTrue = async_1.PromiseWrapper.resolve(true);\n  var RouterOutlet = (function() {\n    function RouterOutlet(_elementRef, _loader, _parentRouter, nameAttr) {\n      this._elementRef = _elementRef;\n      this._loader = _loader;\n      this._parentRouter = _parentRouter;\n      this.name = null;\n      this._componentRef = null;\n      this._currentInstruction = null;\n      if (lang_1.isPresent(nameAttr)) {\n        this.name = nameAttr;\n        this._parentRouter.registerAuxOutlet(this);\n      } else {\n        this._parentRouter.registerPrimaryOutlet(this);\n      }\n    }\n    RouterOutlet.prototype.activate = function(nextInstruction) {\n      var _this = this;\n      var previousInstruction = this._currentInstruction;\n      this._currentInstruction = nextInstruction;\n      var componentType = nextInstruction.componentType;\n      var childRouter = this._parentRouter.childRouter(componentType);\n      var providers = angular2_1.Injector.resolve([angular2_1.provide(instruction_1.RouteData, {useValue: nextInstruction.routeData}), angular2_1.provide(instruction_1.RouteParams, {useValue: new instruction_1.RouteParams(nextInstruction.params)}), angular2_1.provide(routerMod.Router, {useValue: childRouter})]);\n      return this._loader.loadNextToLocation(componentType, this._elementRef, providers).then(function(componentRef) {\n        _this._componentRef = componentRef;\n        if (route_lifecycle_reflector_1.hasLifecycleHook(hookMod.onActivate, componentType)) {\n          return _this._componentRef.instance.onActivate(nextInstruction, previousInstruction);\n        }\n      });\n    };\n    RouterOutlet.prototype.reuse = function(nextInstruction) {\n      var previousInstruction = this._currentInstruction;\n      this._currentInstruction = nextInstruction;\n      if (lang_1.isBlank(this._componentRef)) {\n        throw new exceptions_1.BaseException(\"Cannot reuse an outlet that does not contain a component.\");\n      }\n      return async_1.PromiseWrapper.resolve(route_lifecycle_reflector_1.hasLifecycleHook(hookMod.onReuse, this._currentInstruction.componentType) ? this._componentRef.instance.onReuse(nextInstruction, previousInstruction) : true);\n    };\n    RouterOutlet.prototype.deactivate = function(nextInstruction) {\n      var _this = this;\n      var next = _resolveToTrue;\n      if (lang_1.isPresent(this._componentRef) && lang_1.isPresent(this._currentInstruction) && route_lifecycle_reflector_1.hasLifecycleHook(hookMod.onDeactivate, this._currentInstruction.componentType)) {\n        next = async_1.PromiseWrapper.resolve(this._componentRef.instance.onDeactivate(nextInstruction, this._currentInstruction));\n      }\n      return next.then(function(_) {\n        if (lang_1.isPresent(_this._componentRef)) {\n          _this._componentRef.dispose();\n          _this._componentRef = null;\n        }\n      });\n    };\n    RouterOutlet.prototype.canDeactivate = function(nextInstruction) {\n      if (lang_1.isBlank(this._currentInstruction)) {\n        return _resolveToTrue;\n      }\n      if (route_lifecycle_reflector_1.hasLifecycleHook(hookMod.canDeactivate, this._currentInstruction.componentType)) {\n        return async_1.PromiseWrapper.resolve(this._componentRef.instance.canDeactivate(nextInstruction, this._currentInstruction));\n      }\n      return _resolveToTrue;\n    };\n    RouterOutlet.prototype.canReuse = function(nextInstruction) {\n      var result;\n      if (lang_1.isBlank(this._currentInstruction) || this._currentInstruction.componentType != nextInstruction.componentType) {\n        result = false;\n      } else if (route_lifecycle_reflector_1.hasLifecycleHook(hookMod.canReuse, this._currentInstruction.componentType)) {\n        result = this._componentRef.instance.canReuse(nextInstruction, this._currentInstruction);\n      } else {\n        result = nextInstruction == this._currentInstruction || (lang_1.isPresent(nextInstruction.params) && lang_1.isPresent(this._currentInstruction.params) && collection_1.StringMapWrapper.equals(nextInstruction.params, this._currentInstruction.params));\n      }\n      return async_1.PromiseWrapper.resolve(result);\n    };\n    RouterOutlet = __decorate([angular2_1.Directive({selector: 'router-outlet'}), __param(3, angular2_1.Attribute('name')), __metadata('design:paramtypes', [angular2_1.ElementRef, angular2_1.DynamicComponentLoader, routerMod.Router, String])], RouterOutlet);\n    return RouterOutlet;\n  })();\n  exports.RouterOutlet = RouterOutlet;\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"angular2/router\", [\"angular2/src/router/router\", \"angular2/src/router/router_outlet\", \"angular2/src/router/router_link\", \"angular2/src/router/instruction\", \"angular2/src/router/route_registry\", \"angular2/src/router/location_strategy\", \"angular2/src/router/hash_location_strategy\", \"angular2/src/router/path_location_strategy\", \"angular2/src/router/location\", \"angular2/src/router/route_config_decorator\", \"angular2/src/router/route_definition\", \"angular2/src/router/lifecycle_annotations\", \"angular2/src/router/instruction\", \"angular2/angular2\", \"angular2/src/router/location_strategy\", \"angular2/src/router/path_location_strategy\", \"angular2/src/router/router\", \"angular2/src/router/router_outlet\", \"angular2/src/router/router_link\", \"angular2/src/router/route_registry\", \"angular2/src/router/location\", \"angular2/angular2\", \"angular2/src/facade/lang\", \"angular2/src/facade/exceptions\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  function __export(m) {\n    for (var p in m)\n      if (!exports.hasOwnProperty(p))\n        exports[p] = m[p];\n  }\n  var router_1 = require(\"angular2/src/router/router\");\n  exports.Router = router_1.Router;\n  var router_outlet_1 = require(\"angular2/src/router/router_outlet\");\n  exports.RouterOutlet = router_outlet_1.RouterOutlet;\n  var router_link_1 = require(\"angular2/src/router/router_link\");\n  exports.RouterLink = router_link_1.RouterLink;\n  var instruction_1 = require(\"angular2/src/router/instruction\");\n  exports.RouteParams = instruction_1.RouteParams;\n  exports.RouteData = instruction_1.RouteData;\n  var route_registry_1 = require(\"angular2/src/router/route_registry\");\n  exports.RouteRegistry = route_registry_1.RouteRegistry;\n  var location_strategy_1 = require(\"angular2/src/router/location_strategy\");\n  exports.LocationStrategy = location_strategy_1.LocationStrategy;\n  var hash_location_strategy_1 = require(\"angular2/src/router/hash_location_strategy\");\n  exports.HashLocationStrategy = hash_location_strategy_1.HashLocationStrategy;\n  var path_location_strategy_1 = require(\"angular2/src/router/path_location_strategy\");\n  exports.PathLocationStrategy = path_location_strategy_1.PathLocationStrategy;\n  var location_1 = require(\"angular2/src/router/location\");\n  exports.Location = location_1.Location;\n  exports.APP_BASE_HREF = location_1.APP_BASE_HREF;\n  __export(require(\"angular2/src/router/route_config_decorator\"));\n  __export(require(\"angular2/src/router/route_definition\"));\n  var lifecycle_annotations_1 = require(\"angular2/src/router/lifecycle_annotations\");\n  exports.CanActivate = lifecycle_annotations_1.CanActivate;\n  var instruction_2 = require(\"angular2/src/router/instruction\");\n  exports.Instruction = instruction_2.Instruction;\n  exports.ComponentInstruction = instruction_2.ComponentInstruction;\n  var angular2_1 = require(\"angular2/angular2\");\n  exports.OpaqueToken = angular2_1.OpaqueToken;\n  var location_strategy_2 = require(\"angular2/src/router/location_strategy\");\n  var path_location_strategy_2 = require(\"angular2/src/router/path_location_strategy\");\n  var router_2 = require(\"angular2/src/router/router\");\n  var router_outlet_2 = require(\"angular2/src/router/router_outlet\");\n  var router_link_2 = require(\"angular2/src/router/router_link\");\n  var route_registry_2 = require(\"angular2/src/router/route_registry\");\n  var location_2 = require(\"angular2/src/router/location\");\n  var angular2_2 = require(\"angular2/angular2\");\n  var lang_1 = require(\"angular2/src/facade/lang\");\n  var exceptions_1 = require(\"angular2/src/facade/exceptions\");\n  exports.ROUTER_PRIMARY_COMPONENT = lang_1.CONST_EXPR(new angular2_2.OpaqueToken('RouterPrimaryComponent'));\n  exports.ROUTER_DIRECTIVES = lang_1.CONST_EXPR([router_outlet_2.RouterOutlet, router_link_2.RouterLink]);\n  exports.ROUTER_PROVIDERS = lang_1.CONST_EXPR([route_registry_2.RouteRegistry, lang_1.CONST_EXPR(new angular2_2.Provider(location_strategy_2.LocationStrategy, {useClass: path_location_strategy_2.PathLocationStrategy})), location_2.Location, lang_1.CONST_EXPR(new angular2_2.Provider(router_2.Router, {\n    useFactory: routerFactory,\n    deps: lang_1.CONST_EXPR([route_registry_2.RouteRegistry, location_2.Location, exports.ROUTER_PRIMARY_COMPONENT, angular2_2.ApplicationRef])\n  })), lang_1.CONST_EXPR(new angular2_2.Provider(exports.ROUTER_PRIMARY_COMPONENT, {\n    useFactory: routerPrimaryComponentFactory,\n    deps: lang_1.CONST_EXPR([angular2_2.ApplicationRef])\n  }))]);\n  exports.ROUTER_BINDINGS = exports.ROUTER_PROVIDERS;\n  function routerFactory(registry, location, primaryComponent, appRef) {\n    var rootRouter = new router_2.RootRouter(registry, location, primaryComponent);\n    appRef.registerDisposeListener(function() {\n      return rootRouter.dispose();\n    });\n    return rootRouter;\n  }\n  function routerPrimaryComponentFactory(app) {\n    if (app.componentTypes.length == 0) {\n      throw new exceptions_1.BaseException(\"Bootstrap at least one component before injecting Router.\");\n    }\n    return app.componentTypes[0];\n  }\n  global.define = __define;\n  return module.exports;\n});\n\n//# sourceMappingURLDisabled=router.dev.js.map\n\"format register\";\nSystem.register(\"angular2/src/http/interfaces\", [], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  var ConnectionBackend = (function() {\n    function ConnectionBackend() {}\n    return ConnectionBackend;\n  })();\n  exports.ConnectionBackend = ConnectionBackend;\n  var Connection = (function() {\n    function Connection() {}\n    return Connection;\n  })();\n  exports.Connection = Connection;\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"angular2/src/http/headers\", [\"angular2/src/facade/lang\", \"angular2/src/facade/exceptions\", \"angular2/src/facade/collection\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  var lang_1 = require(\"angular2/src/facade/lang\");\n  var exceptions_1 = require(\"angular2/src/facade/exceptions\");\n  var collection_1 = require(\"angular2/src/facade/collection\");\n  var Headers = (function() {\n    function Headers(headers) {\n      var _this = this;\n      if (headers instanceof Headers) {\n        this._headersMap = headers._headersMap;\n        return ;\n      }\n      this._headersMap = new collection_1.Map();\n      if (lang_1.isBlank(headers)) {\n        return ;\n      }\n      collection_1.StringMapWrapper.forEach(headers, function(v, k) {\n        _this._headersMap.set(k, collection_1.isListLikeIterable(v) ? v : [v]);\n      });\n    }\n    Headers.prototype.append = function(name, value) {\n      var mapName = this._headersMap.get(name);\n      var list = collection_1.isListLikeIterable(mapName) ? mapName : [];\n      list.push(value);\n      this._headersMap.set(name, list);\n    };\n    Headers.prototype.delete = function(name) {\n      this._headersMap.delete(name);\n    };\n    Headers.prototype.forEach = function(fn) {\n      this._headersMap.forEach(fn);\n    };\n    Headers.prototype.get = function(header) {\n      return collection_1.ListWrapper.first(this._headersMap.get(header));\n    };\n    Headers.prototype.has = function(header) {\n      return this._headersMap.has(header);\n    };\n    Headers.prototype.keys = function() {\n      return collection_1.MapWrapper.keys(this._headersMap);\n    };\n    Headers.prototype.set = function(header, value) {\n      var list = [];\n      if (collection_1.isListLikeIterable(value)) {\n        var pushValue = value.join(',');\n        list.push(pushValue);\n      } else {\n        list.push(value);\n      }\n      this._headersMap.set(header, list);\n    };\n    Headers.prototype.values = function() {\n      return collection_1.MapWrapper.values(this._headersMap);\n    };\n    Headers.prototype.getAll = function(header) {\n      var headers = this._headersMap.get(header);\n      return collection_1.isListLikeIterable(headers) ? headers : [];\n    };\n    Headers.prototype.entries = function() {\n      throw new exceptions_1.BaseException('\"entries\" method is not implemented on Headers class');\n    };\n    return Headers;\n  })();\n  exports.Headers = Headers;\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"angular2/src/http/enums\", [], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  (function(RequestMethods) {\n    RequestMethods[RequestMethods[\"Get\"] = 0] = \"Get\";\n    RequestMethods[RequestMethods[\"Post\"] = 1] = \"Post\";\n    RequestMethods[RequestMethods[\"Put\"] = 2] = \"Put\";\n    RequestMethods[RequestMethods[\"Delete\"] = 3] = \"Delete\";\n    RequestMethods[RequestMethods[\"Options\"] = 4] = \"Options\";\n    RequestMethods[RequestMethods[\"Head\"] = 5] = \"Head\";\n    RequestMethods[RequestMethods[\"Patch\"] = 6] = \"Patch\";\n  })(exports.RequestMethods || (exports.RequestMethods = {}));\n  var RequestMethods = exports.RequestMethods;\n  (function(ReadyStates) {\n    ReadyStates[ReadyStates[\"Unsent\"] = 0] = \"Unsent\";\n    ReadyStates[ReadyStates[\"Open\"] = 1] = \"Open\";\n    ReadyStates[ReadyStates[\"HeadersReceived\"] = 2] = \"HeadersReceived\";\n    ReadyStates[ReadyStates[\"Loading\"] = 3] = \"Loading\";\n    ReadyStates[ReadyStates[\"Done\"] = 4] = \"Done\";\n    ReadyStates[ReadyStates[\"Cancelled\"] = 5] = \"Cancelled\";\n  })(exports.ReadyStates || (exports.ReadyStates = {}));\n  var ReadyStates = exports.ReadyStates;\n  (function(ResponseTypes) {\n    ResponseTypes[ResponseTypes[\"Basic\"] = 0] = \"Basic\";\n    ResponseTypes[ResponseTypes[\"Cors\"] = 1] = \"Cors\";\n    ResponseTypes[ResponseTypes[\"Default\"] = 2] = \"Default\";\n    ResponseTypes[ResponseTypes[\"Error\"] = 3] = \"Error\";\n    ResponseTypes[ResponseTypes[\"Opaque\"] = 4] = \"Opaque\";\n  })(exports.ResponseTypes || (exports.ResponseTypes = {}));\n  var ResponseTypes = exports.ResponseTypes;\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"angular2/src/http/url_search_params\", [\"angular2/src/facade/lang\", \"angular2/src/facade/collection\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  var lang_1 = require(\"angular2/src/facade/lang\");\n  var collection_1 = require(\"angular2/src/facade/collection\");\n  function paramParser(rawParams) {\n    if (rawParams === void 0) {\n      rawParams = '';\n    }\n    var map = new collection_1.Map();\n    if (rawParams.length > 0) {\n      var params = rawParams.split('&');\n      params.forEach(function(param) {\n        var split = param.split('=');\n        var key = split[0];\n        var val = split[1];\n        var list = lang_1.isPresent(map.get(key)) ? map.get(key) : [];\n        list.push(val);\n        map.set(key, list);\n      });\n    }\n    return map;\n  }\n  var URLSearchParams = (function() {\n    function URLSearchParams(rawParams) {\n      if (rawParams === void 0) {\n        rawParams = '';\n      }\n      this.rawParams = rawParams;\n      this.paramsMap = paramParser(rawParams);\n    }\n    URLSearchParams.prototype.clone = function() {\n      var clone = new URLSearchParams();\n      clone.appendAll(this);\n      return clone;\n    };\n    URLSearchParams.prototype.has = function(param) {\n      return this.paramsMap.has(param);\n    };\n    URLSearchParams.prototype.get = function(param) {\n      var storedParam = this.paramsMap.get(param);\n      if (collection_1.isListLikeIterable(storedParam)) {\n        return collection_1.ListWrapper.first(storedParam);\n      } else {\n        return null;\n      }\n    };\n    URLSearchParams.prototype.getAll = function(param) {\n      var mapParam = this.paramsMap.get(param);\n      return lang_1.isPresent(mapParam) ? mapParam : [];\n    };\n    URLSearchParams.prototype.set = function(param, val) {\n      var mapParam = this.paramsMap.get(param);\n      var list = lang_1.isPresent(mapParam) ? mapParam : [];\n      collection_1.ListWrapper.clear(list);\n      list.push(val);\n      this.paramsMap.set(param, list);\n    };\n    URLSearchParams.prototype.setAll = function(searchParams) {\n      var _this = this;\n      searchParams.paramsMap.forEach(function(value, param) {\n        var mapParam = _this.paramsMap.get(param);\n        var list = lang_1.isPresent(mapParam) ? mapParam : [];\n        collection_1.ListWrapper.clear(list);\n        list.push(value[0]);\n        _this.paramsMap.set(param, list);\n      });\n    };\n    URLSearchParams.prototype.append = function(param, val) {\n      var mapParam = this.paramsMap.get(param);\n      var list = lang_1.isPresent(mapParam) ? mapParam : [];\n      list.push(val);\n      this.paramsMap.set(param, list);\n    };\n    URLSearchParams.prototype.appendAll = function(searchParams) {\n      var _this = this;\n      searchParams.paramsMap.forEach(function(value, param) {\n        var mapParam = _this.paramsMap.get(param);\n        var list = lang_1.isPresent(mapParam) ? mapParam : [];\n        for (var i = 0; i < value.length; ++i) {\n          list.push(value[i]);\n        }\n        _this.paramsMap.set(param, list);\n      });\n    };\n    URLSearchParams.prototype.replaceAll = function(searchParams) {\n      var _this = this;\n      searchParams.paramsMap.forEach(function(value, param) {\n        var mapParam = _this.paramsMap.get(param);\n        var list = lang_1.isPresent(mapParam) ? mapParam : [];\n        collection_1.ListWrapper.clear(list);\n        for (var i = 0; i < value.length; ++i) {\n          list.push(value[i]);\n        }\n        _this.paramsMap.set(param, list);\n      });\n    };\n    URLSearchParams.prototype.toString = function() {\n      var paramsList = [];\n      this.paramsMap.forEach(function(values, k) {\n        values.forEach(function(v) {\n          return paramsList.push(k + '=' + v);\n        });\n      });\n      return paramsList.join('&');\n    };\n    URLSearchParams.prototype.delete = function(param) {\n      this.paramsMap.delete(param);\n    };\n    return URLSearchParams;\n  })();\n  exports.URLSearchParams = URLSearchParams;\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"angular2/src/http/static_response\", [\"angular2/src/facade/lang\", \"angular2/src/facade/exceptions\", \"angular2/src/http/http_utils\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  var lang_1 = require(\"angular2/src/facade/lang\");\n  var exceptions_1 = require(\"angular2/src/facade/exceptions\");\n  var http_utils_1 = require(\"angular2/src/http/http_utils\");\n  var Response = (function() {\n    function Response(responseOptions) {\n      this._body = responseOptions.body;\n      this.status = responseOptions.status;\n      this.statusText = responseOptions.statusText;\n      this.headers = responseOptions.headers;\n      this.type = responseOptions.type;\n      this.url = responseOptions.url;\n    }\n    Response.prototype.blob = function() {\n      throw new exceptions_1.BaseException('\"blob()\" method not implemented on Response superclass');\n    };\n    Response.prototype.json = function() {\n      var jsonResponse;\n      if (http_utils_1.isJsObject(this._body)) {\n        jsonResponse = this._body;\n      } else if (lang_1.isString(this._body)) {\n        jsonResponse = lang_1.Json.parse(this._body);\n      }\n      return jsonResponse;\n    };\n    Response.prototype.text = function() {\n      return this._body.toString();\n    };\n    Response.prototype.arrayBuffer = function() {\n      throw new exceptions_1.BaseException('\"arrayBuffer()\" method not implemented on Response superclass');\n    };\n    return Response;\n  })();\n  exports.Response = Response;\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"angular2/src/http/base_response_options\", [\"angular2/angular2\", \"angular2/src/facade/lang\", \"angular2/src/http/headers\", \"angular2/src/http/enums\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  var __extends = (this && this.__extends) || function(d, b) {\n    for (var p in b)\n      if (b.hasOwnProperty(p))\n        d[p] = b[p];\n    function __() {\n      this.constructor = d;\n    }\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n  };\n  var __decorate = (this && this.__decorate) || function(decorators, target, key, desc) {\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\")\n      return Reflect.decorate(decorators, target, key, desc);\n    switch (arguments.length) {\n      case 2:\n        return decorators.reduceRight(function(o, d) {\n          return (d && d(o)) || o;\n        }, target);\n      case 3:\n        return decorators.reduceRight(function(o, d) {\n          return (d && d(target, key)), void 0;\n        }, void 0);\n      case 4:\n        return decorators.reduceRight(function(o, d) {\n          return (d && d(target, key, o)) || o;\n        }, desc);\n    }\n  };\n  var __metadata = (this && this.__metadata) || function(k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\")\n      return Reflect.metadata(k, v);\n  };\n  var angular2_1 = require(\"angular2/angular2\");\n  var lang_1 = require(\"angular2/src/facade/lang\");\n  var headers_1 = require(\"angular2/src/http/headers\");\n  var enums_1 = require(\"angular2/src/http/enums\");\n  var ResponseOptions = (function() {\n    function ResponseOptions(_a) {\n      var _b = _a === void 0 ? {} : _a,\n          body = _b.body,\n          status = _b.status,\n          headers = _b.headers,\n          statusText = _b.statusText,\n          type = _b.type,\n          url = _b.url;\n      this.body = lang_1.isPresent(body) ? body : null;\n      this.status = lang_1.isPresent(status) ? status : null;\n      this.headers = lang_1.isPresent(headers) ? headers : null;\n      this.statusText = lang_1.isPresent(statusText) ? statusText : null;\n      this.type = lang_1.isPresent(type) ? type : null;\n      this.url = lang_1.isPresent(url) ? url : null;\n    }\n    ResponseOptions.prototype.merge = function(options) {\n      return new ResponseOptions({\n        body: lang_1.isPresent(options) && lang_1.isPresent(options.body) ? options.body : this.body,\n        status: lang_1.isPresent(options) && lang_1.isPresent(options.status) ? options.status : this.status,\n        headers: lang_1.isPresent(options) && lang_1.isPresent(options.headers) ? options.headers : this.headers,\n        statusText: lang_1.isPresent(options) && lang_1.isPresent(options.statusText) ? options.statusText : this.statusText,\n        type: lang_1.isPresent(options) && lang_1.isPresent(options.type) ? options.type : this.type,\n        url: lang_1.isPresent(options) && lang_1.isPresent(options.url) ? options.url : this.url\n      });\n    };\n    return ResponseOptions;\n  })();\n  exports.ResponseOptions = ResponseOptions;\n  var BaseResponseOptions = (function(_super) {\n    __extends(BaseResponseOptions, _super);\n    function BaseResponseOptions() {\n      _super.call(this, {\n        status: 200,\n        statusText: 'Ok',\n        type: enums_1.ResponseTypes.Default,\n        headers: new headers_1.Headers()\n      });\n    }\n    BaseResponseOptions = __decorate([angular2_1.Injectable(), __metadata('design:paramtypes', [])], BaseResponseOptions);\n    return BaseResponseOptions;\n  })(ResponseOptions);\n  exports.BaseResponseOptions = BaseResponseOptions;\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"angular2/src/http/backends/browser_xhr\", [\"angular2/angular2\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  var __decorate = (this && this.__decorate) || function(decorators, target, key, desc) {\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\")\n      return Reflect.decorate(decorators, target, key, desc);\n    switch (arguments.length) {\n      case 2:\n        return decorators.reduceRight(function(o, d) {\n          return (d && d(o)) || o;\n        }, target);\n      case 3:\n        return decorators.reduceRight(function(o, d) {\n          return (d && d(target, key)), void 0;\n        }, void 0);\n      case 4:\n        return decorators.reduceRight(function(o, d) {\n          return (d && d(target, key, o)) || o;\n        }, desc);\n    }\n  };\n  var __metadata = (this && this.__metadata) || function(k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\")\n      return Reflect.metadata(k, v);\n  };\n  var angular2_1 = require(\"angular2/angular2\");\n  var BrowserXhr = (function() {\n    function BrowserXhr() {}\n    BrowserXhr.prototype.build = function() {\n      return (new XMLHttpRequest());\n    };\n    BrowserXhr = __decorate([angular2_1.Injectable(), __metadata('design:paramtypes', [])], BrowserXhr);\n    return BrowserXhr;\n  })();\n  exports.BrowserXhr = BrowserXhr;\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"angular2/src/http/backends/browser_jsonp\", [\"angular2/angular2\", \"angular2/src/facade/lang\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  var __decorate = (this && this.__decorate) || function(decorators, target, key, desc) {\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\")\n      return Reflect.decorate(decorators, target, key, desc);\n    switch (arguments.length) {\n      case 2:\n        return decorators.reduceRight(function(o, d) {\n          return (d && d(o)) || o;\n        }, target);\n      case 3:\n        return decorators.reduceRight(function(o, d) {\n          return (d && d(target, key)), void 0;\n        }, void 0);\n      case 4:\n        return decorators.reduceRight(function(o, d) {\n          return (d && d(target, key, o)) || o;\n        }, desc);\n    }\n  };\n  var __metadata = (this && this.__metadata) || function(k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\")\n      return Reflect.metadata(k, v);\n  };\n  var angular2_1 = require(\"angular2/angular2\");\n  var lang_1 = require(\"angular2/src/facade/lang\");\n  var _nextRequestId = 0;\n  exports.JSONP_HOME = '__ng_jsonp__';\n  var _jsonpConnections = null;\n  function _getJsonpConnections() {\n    if (_jsonpConnections === null) {\n      _jsonpConnections = lang_1.global[exports.JSONP_HOME] = {};\n    }\n    return _jsonpConnections;\n  }\n  var BrowserJsonp = (function() {\n    function BrowserJsonp() {}\n    BrowserJsonp.prototype.build = function(url) {\n      var node = document.createElement('script');\n      node.src = url;\n      return node;\n    };\n    BrowserJsonp.prototype.nextRequestID = function() {\n      return \"__req\" + _nextRequestId++;\n    };\n    BrowserJsonp.prototype.requestCallback = function(id) {\n      return exports.JSONP_HOME + \".\" + id + \".finished\";\n    };\n    BrowserJsonp.prototype.exposeConnection = function(id, connection) {\n      var connections = _getJsonpConnections();\n      connections[id] = connection;\n    };\n    BrowserJsonp.prototype.removeConnection = function(id) {\n      var connections = _getJsonpConnections();\n      connections[id] = null;\n    };\n    BrowserJsonp.prototype.send = function(node) {\n      document.body.appendChild((node));\n    };\n    BrowserJsonp.prototype.cleanup = function(node) {\n      if (node.parentNode) {\n        node.parentNode.removeChild((node));\n      }\n    };\n    BrowserJsonp = __decorate([angular2_1.Injectable(), __metadata('design:paramtypes', [])], BrowserJsonp);\n    return BrowserJsonp;\n  })();\n  exports.BrowserJsonp = BrowserJsonp;\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"angular2/src/http/backends/mock_backend\", [\"angular2/angular2\", \"angular2/src/http/static_request\", \"angular2/src/http/enums\", \"angular2/src/facade/lang\", \"angular2/src/facade/exceptions\", \"@reactivex/rxjs/dist/cjs/Rx\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  var __decorate = (this && this.__decorate) || function(decorators, target, key, desc) {\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\")\n      return Reflect.decorate(decorators, target, key, desc);\n    switch (arguments.length) {\n      case 2:\n        return decorators.reduceRight(function(o, d) {\n          return (d && d(o)) || o;\n        }, target);\n      case 3:\n        return decorators.reduceRight(function(o, d) {\n          return (d && d(target, key)), void 0;\n        }, void 0);\n      case 4:\n        return decorators.reduceRight(function(o, d) {\n          return (d && d(target, key, o)) || o;\n        }, desc);\n    }\n  };\n  var __metadata = (this && this.__metadata) || function(k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\")\n      return Reflect.metadata(k, v);\n  };\n  var angular2_1 = require(\"angular2/angular2\");\n  var static_request_1 = require(\"angular2/src/http/static_request\");\n  var enums_1 = require(\"angular2/src/http/enums\");\n  var lang_1 = require(\"angular2/src/facade/lang\");\n  var exceptions_1 = require(\"angular2/src/facade/exceptions\");\n  var Rx = require(\"@reactivex/rxjs/dist/cjs/Rx\");\n  var Subject = Rx.Subject,\n      ReplaySubject = Rx.ReplaySubject;\n  var MockConnection = (function() {\n    function MockConnection(req) {\n      this.response = new ReplaySubject(1).take(1);\n      this.readyState = enums_1.ReadyStates.Open;\n      this.request = req;\n    }\n    MockConnection.prototype.mockRespond = function(res) {\n      if (this.readyState === enums_1.ReadyStates.Done || this.readyState === enums_1.ReadyStates.Cancelled) {\n        throw new exceptions_1.BaseException('Connection has already been resolved');\n      }\n      this.readyState = enums_1.ReadyStates.Done;\n      this.response.next(res);\n      this.response.complete();\n    };\n    MockConnection.prototype.mockDownload = function(res) {};\n    MockConnection.prototype.mockError = function(err) {\n      this.readyState = enums_1.ReadyStates.Done;\n      this.response.error(err);\n    };\n    return MockConnection;\n  })();\n  exports.MockConnection = MockConnection;\n  var MockBackend = (function() {\n    function MockBackend() {\n      var _this = this;\n      this.connectionsArray = [];\n      this.connections = new Subject();\n      this.connections.subscribe(function(connection) {\n        return _this.connectionsArray.push(connection);\n      });\n      this.pendingConnections = new Subject();\n    }\n    MockBackend.prototype.verifyNoPendingRequests = function() {\n      var pending = 0;\n      this.pendingConnections.subscribe(function(c) {\n        return pending++;\n      });\n      if (pending > 0)\n        throw new exceptions_1.BaseException(pending + \" pending connections to be resolved\");\n    };\n    MockBackend.prototype.resolveAllConnections = function() {\n      this.connections.subscribe(function(c) {\n        return c.readyState = 4;\n      });\n    };\n    MockBackend.prototype.createConnection = function(req) {\n      if (!lang_1.isPresent(req) || !(req instanceof static_request_1.Request)) {\n        throw new exceptions_1.BaseException(\"createConnection requires an instance of Request, got \" + req);\n      }\n      var connection = new MockConnection(req);\n      this.connections.next(connection);\n      return connection;\n    };\n    MockBackend = __decorate([angular2_1.Injectable(), __metadata('design:paramtypes', [])], MockBackend);\n    return MockBackend;\n  })();\n  exports.MockBackend = MockBackend;\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"angular2/src/http/http_utils\", [\"angular2/src/facade/lang\", \"angular2/src/http/enums\", \"angular2/src/facade/exceptions\", \"angular2/src/facade/lang\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  var lang_1 = require(\"angular2/src/facade/lang\");\n  var enums_1 = require(\"angular2/src/http/enums\");\n  var exceptions_1 = require(\"angular2/src/facade/exceptions\");\n  function normalizeMethodName(method) {\n    if (lang_1.isString(method)) {\n      var originalMethod = method;\n      method = method.replace(/(\\w)(\\w*)/g, function(g0, g1, g2) {\n        return g1.toUpperCase() + g2.toLowerCase();\n      });\n      method = enums_1.RequestMethods[method];\n      if (typeof method !== 'number')\n        throw exceptions_1.makeTypeError(\"Invalid request method. The method \\\"\" + originalMethod + \"\\\" is not supported.\");\n    }\n    return method;\n  }\n  exports.normalizeMethodName = normalizeMethodName;\n  var lang_2 = require(\"angular2/src/facade/lang\");\n  exports.isJsObject = lang_2.isJsObject;\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"angular2/src/http/base_request_options\", [\"angular2/src/facade/lang\", \"angular2/src/http/headers\", \"angular2/src/http/enums\", \"angular2/angular2\", \"angular2/src/http/url_search_params\", \"angular2/src/http/http_utils\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  var __extends = (this && this.__extends) || function(d, b) {\n    for (var p in b)\n      if (b.hasOwnProperty(p))\n        d[p] = b[p];\n    function __() {\n      this.constructor = d;\n    }\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n  };\n  var __decorate = (this && this.__decorate) || function(decorators, target, key, desc) {\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\")\n      return Reflect.decorate(decorators, target, key, desc);\n    switch (arguments.length) {\n      case 2:\n        return decorators.reduceRight(function(o, d) {\n          return (d && d(o)) || o;\n        }, target);\n      case 3:\n        return decorators.reduceRight(function(o, d) {\n          return (d && d(target, key)), void 0;\n        }, void 0);\n      case 4:\n        return decorators.reduceRight(function(o, d) {\n          return (d && d(target, key, o)) || o;\n        }, desc);\n    }\n  };\n  var __metadata = (this && this.__metadata) || function(k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\")\n      return Reflect.metadata(k, v);\n  };\n  var lang_1 = require(\"angular2/src/facade/lang\");\n  var headers_1 = require(\"angular2/src/http/headers\");\n  var enums_1 = require(\"angular2/src/http/enums\");\n  var angular2_1 = require(\"angular2/angular2\");\n  var url_search_params_1 = require(\"angular2/src/http/url_search_params\");\n  var http_utils_1 = require(\"angular2/src/http/http_utils\");\n  var RequestOptions = (function() {\n    function RequestOptions(_a) {\n      var _b = _a === void 0 ? {} : _a,\n          method = _b.method,\n          headers = _b.headers,\n          body = _b.body,\n          url = _b.url,\n          search = _b.search;\n      this.method = lang_1.isPresent(method) ? http_utils_1.normalizeMethodName(method) : null;\n      this.headers = lang_1.isPresent(headers) ? headers : null;\n      this.body = lang_1.isPresent(body) ? body : null;\n      this.url = lang_1.isPresent(url) ? url : null;\n      this.search = lang_1.isPresent(search) ? (lang_1.isString(search) ? new url_search_params_1.URLSearchParams((search)) : (search)) : null;\n    }\n    RequestOptions.prototype.merge = function(options) {\n      return new RequestOptions({\n        method: lang_1.isPresent(options) && lang_1.isPresent(options.method) ? options.method : this.method,\n        headers: lang_1.isPresent(options) && lang_1.isPresent(options.headers) ? options.headers : this.headers,\n        body: lang_1.isPresent(options) && lang_1.isPresent(options.body) ? options.body : this.body,\n        url: lang_1.isPresent(options) && lang_1.isPresent(options.url) ? options.url : this.url,\n        search: lang_1.isPresent(options) && lang_1.isPresent(options.search) ? (lang_1.isString(options.search) ? new url_search_params_1.URLSearchParams((options.search)) : (options.search).clone()) : this.search\n      });\n    };\n    return RequestOptions;\n  })();\n  exports.RequestOptions = RequestOptions;\n  var BaseRequestOptions = (function(_super) {\n    __extends(BaseRequestOptions, _super);\n    function BaseRequestOptions() {\n      _super.call(this, {\n        method: enums_1.RequestMethods.Get,\n        headers: new headers_1.Headers()\n      });\n    }\n    BaseRequestOptions = __decorate([angular2_1.Injectable(), __metadata('design:paramtypes', [])], BaseRequestOptions);\n    return BaseRequestOptions;\n  })(RequestOptions);\n  exports.BaseRequestOptions = BaseRequestOptions;\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"angular2/src/http/backends/xhr_backend\", [\"angular2/src/http/enums\", \"angular2/src/http/static_response\", \"angular2/src/http/base_response_options\", \"angular2/angular2\", \"angular2/src/http/backends/browser_xhr\", \"angular2/src/facade/lang\", \"angular2/angular2\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  var __decorate = (this && this.__decorate) || function(decorators, target, key, desc) {\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\")\n      return Reflect.decorate(decorators, target, key, desc);\n    switch (arguments.length) {\n      case 2:\n        return decorators.reduceRight(function(o, d) {\n          return (d && d(o)) || o;\n        }, target);\n      case 3:\n        return decorators.reduceRight(function(o, d) {\n          return (d && d(target, key)), void 0;\n        }, void 0);\n      case 4:\n        return decorators.reduceRight(function(o, d) {\n          return (d && d(target, key, o)) || o;\n        }, desc);\n    }\n  };\n  var __metadata = (this && this.__metadata) || function(k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\")\n      return Reflect.metadata(k, v);\n  };\n  var enums_1 = require(\"angular2/src/http/enums\");\n  var static_response_1 = require(\"angular2/src/http/static_response\");\n  var base_response_options_1 = require(\"angular2/src/http/base_response_options\");\n  var angular2_1 = require(\"angular2/angular2\");\n  var browser_xhr_1 = require(\"angular2/src/http/backends/browser_xhr\");\n  var lang_1 = require(\"angular2/src/facade/lang\");\n  var angular2_2 = require(\"angular2/angular2\");\n  var XHRConnection = (function() {\n    function XHRConnection(req, browserXHR, baseResponseOptions) {\n      var _this = this;\n      this.request = req;\n      this.response = new angular2_2.Observable(function(responseObserver) {\n        var _xhr = browserXHR.build();\n        _xhr.open(enums_1.RequestMethods[req.method].toUpperCase(), req.url);\n        var onLoad = function() {\n          var response = lang_1.isPresent(_xhr.response) ? _xhr.response : _xhr.responseText;\n          var status = _xhr.status === 1223 ? 204 : _xhr.status;\n          if (status === 0) {\n            status = response ? 200 : 0;\n          }\n          var responseOptions = new base_response_options_1.ResponseOptions({\n            body: response,\n            status: status\n          });\n          if (lang_1.isPresent(baseResponseOptions)) {\n            responseOptions = baseResponseOptions.merge(responseOptions);\n          }\n          responseObserver.next(new static_response_1.Response(responseOptions));\n          responseObserver.complete();\n        };\n        var onError = function(err) {\n          var responseOptions = new base_response_options_1.ResponseOptions({\n            body: err,\n            type: enums_1.ResponseTypes.Error\n          });\n          if (lang_1.isPresent(baseResponseOptions)) {\n            responseOptions = baseResponseOptions.merge(responseOptions);\n          }\n          responseObserver.error(new static_response_1.Response(responseOptions));\n        };\n        if (lang_1.isPresent(req.headers)) {\n          req.headers.forEach(function(values, name) {\n            return _xhr.setRequestHeader(name, values.join(','));\n          });\n        }\n        _xhr.addEventListener('load', onLoad);\n        _xhr.addEventListener('error', onError);\n        _xhr.send(_this.request.text());\n        return function() {\n          _xhr.removeEventListener('load', onLoad);\n          _xhr.removeEventListener('error', onError);\n          _xhr.abort();\n        };\n      });\n    }\n    return XHRConnection;\n  })();\n  exports.XHRConnection = XHRConnection;\n  var XHRBackend = (function() {\n    function XHRBackend(_browserXHR, _baseResponseOptions) {\n      this._browserXHR = _browserXHR;\n      this._baseResponseOptions = _baseResponseOptions;\n    }\n    XHRBackend.prototype.createConnection = function(request) {\n      return new XHRConnection(request, this._browserXHR, this._baseResponseOptions);\n    };\n    XHRBackend = __decorate([angular2_1.Injectable(), __metadata('design:paramtypes', [browser_xhr_1.BrowserXhr, base_response_options_1.ResponseOptions])], XHRBackend);\n    return XHRBackend;\n  })();\n  exports.XHRBackend = XHRBackend;\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"angular2/src/http/backends/jsonp_backend\", [\"angular2/src/http/interfaces\", \"angular2/src/http/enums\", \"angular2/src/http/static_response\", \"angular2/src/http/base_response_options\", \"angular2/angular2\", \"angular2/src/http/backends/browser_jsonp\", \"angular2/src/facade/exceptions\", \"angular2/src/facade/lang\", \"angular2/angular2\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  var __extends = (this && this.__extends) || function(d, b) {\n    for (var p in b)\n      if (b.hasOwnProperty(p))\n        d[p] = b[p];\n    function __() {\n      this.constructor = d;\n    }\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n  };\n  var __decorate = (this && this.__decorate) || function(decorators, target, key, desc) {\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\")\n      return Reflect.decorate(decorators, target, key, desc);\n    switch (arguments.length) {\n      case 2:\n        return decorators.reduceRight(function(o, d) {\n          return (d && d(o)) || o;\n        }, target);\n      case 3:\n        return decorators.reduceRight(function(o, d) {\n          return (d && d(target, key)), void 0;\n        }, void 0);\n      case 4:\n        return decorators.reduceRight(function(o, d) {\n          return (d && d(target, key, o)) || o;\n        }, desc);\n    }\n  };\n  var __metadata = (this && this.__metadata) || function(k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\")\n      return Reflect.metadata(k, v);\n  };\n  var interfaces_1 = require(\"angular2/src/http/interfaces\");\n  var enums_1 = require(\"angular2/src/http/enums\");\n  var static_response_1 = require(\"angular2/src/http/static_response\");\n  var base_response_options_1 = require(\"angular2/src/http/base_response_options\");\n  var angular2_1 = require(\"angular2/angular2\");\n  var browser_jsonp_1 = require(\"angular2/src/http/backends/browser_jsonp\");\n  var exceptions_1 = require(\"angular2/src/facade/exceptions\");\n  var lang_1 = require(\"angular2/src/facade/lang\");\n  var angular2_2 = require(\"angular2/angular2\");\n  var JSONP_ERR_NO_CALLBACK = 'JSONP injected script did not invoke callback.';\n  var JSONP_ERR_WRONG_METHOD = 'JSONP requests must use GET request method.';\n  var JSONPConnection = (function() {\n    function JSONPConnection() {}\n    return JSONPConnection;\n  })();\n  exports.JSONPConnection = JSONPConnection;\n  var JSONPConnection_ = (function(_super) {\n    __extends(JSONPConnection_, _super);\n    function JSONPConnection_(req, _dom, baseResponseOptions) {\n      var _this = this;\n      _super.call(this);\n      this._dom = _dom;\n      this.baseResponseOptions = baseResponseOptions;\n      this._finished = false;\n      if (req.method !== enums_1.RequestMethods.Get) {\n        throw exceptions_1.makeTypeError(JSONP_ERR_WRONG_METHOD);\n      }\n      this.request = req;\n      this.response = new angular2_2.Observable(function(responseObserver) {\n        _this.readyState = enums_1.ReadyStates.Loading;\n        var id = _this._id = _dom.nextRequestID();\n        _dom.exposeConnection(id, _this);\n        var callback = _dom.requestCallback(_this._id);\n        var url = req.url;\n        if (url.indexOf('=JSONP_CALLBACK&') > -1) {\n          url = lang_1.StringWrapper.replace(url, '=JSONP_CALLBACK&', \"=\" + callback + \"&\");\n        } else if (url.lastIndexOf('=JSONP_CALLBACK') === url.length - '=JSONP_CALLBACK'.length) {\n          url = url.substring(0, url.length - '=JSONP_CALLBACK'.length) + (\"=\" + callback);\n        }\n        var script = _this._script = _dom.build(url);\n        var onLoad = function(event) {\n          if (_this.readyState === enums_1.ReadyStates.Cancelled)\n            return ;\n          _this.readyState = enums_1.ReadyStates.Done;\n          _dom.cleanup(script);\n          if (!_this._finished) {\n            var responseOptions_1 = new base_response_options_1.ResponseOptions({\n              body: JSONP_ERR_NO_CALLBACK,\n              type: enums_1.ResponseTypes.Error\n            });\n            if (lang_1.isPresent(baseResponseOptions)) {\n              responseOptions_1 = baseResponseOptions.merge(responseOptions_1);\n            }\n            responseObserver.error(new static_response_1.Response(responseOptions_1));\n            return ;\n          }\n          var responseOptions = new base_response_options_1.ResponseOptions({body: _this._responseData});\n          if (lang_1.isPresent(_this.baseResponseOptions)) {\n            responseOptions = _this.baseResponseOptions.merge(responseOptions);\n          }\n          responseObserver.next(new static_response_1.Response(responseOptions));\n          responseObserver.complete();\n        };\n        var onError = function(error) {\n          if (_this.readyState === enums_1.ReadyStates.Cancelled)\n            return ;\n          _this.readyState = enums_1.ReadyStates.Done;\n          _dom.cleanup(script);\n          var responseOptions = new base_response_options_1.ResponseOptions({\n            body: error.message,\n            type: enums_1.ResponseTypes.Error\n          });\n          if (lang_1.isPresent(baseResponseOptions)) {\n            responseOptions = baseResponseOptions.merge(responseOptions);\n          }\n          responseObserver.error(new static_response_1.Response(responseOptions));\n        };\n        script.addEventListener('load', onLoad);\n        script.addEventListener('error', onError);\n        _dom.send(script);\n        return function() {\n          _this.readyState = enums_1.ReadyStates.Cancelled;\n          script.removeEventListener('load', onLoad);\n          script.removeEventListener('error', onError);\n          if (lang_1.isPresent(script)) {\n            _this._dom.cleanup(script);\n          }\n        };\n      });\n    }\n    JSONPConnection_.prototype.finished = function(data) {\n      this._finished = true;\n      this._dom.removeConnection(this._id);\n      if (this.readyState === enums_1.ReadyStates.Cancelled)\n        return ;\n      this._responseData = data;\n    };\n    return JSONPConnection_;\n  })(JSONPConnection);\n  exports.JSONPConnection_ = JSONPConnection_;\n  var JSONPBackend = (function(_super) {\n    __extends(JSONPBackend, _super);\n    function JSONPBackend() {\n      _super.apply(this, arguments);\n    }\n    return JSONPBackend;\n  })(interfaces_1.ConnectionBackend);\n  exports.JSONPBackend = JSONPBackend;\n  var JSONPBackend_ = (function(_super) {\n    __extends(JSONPBackend_, _super);\n    function JSONPBackend_(_browserJSONP, _baseResponseOptions) {\n      _super.call(this);\n      this._browserJSONP = _browserJSONP;\n      this._baseResponseOptions = _baseResponseOptions;\n    }\n    JSONPBackend_.prototype.createConnection = function(request) {\n      return new JSONPConnection_(request, this._browserJSONP, this._baseResponseOptions);\n    };\n    JSONPBackend_ = __decorate([angular2_1.Injectable(), __metadata('design:paramtypes', [browser_jsonp_1.BrowserJsonp, base_response_options_1.ResponseOptions])], JSONPBackend_);\n    return JSONPBackend_;\n  })(JSONPBackend);\n  exports.JSONPBackend_ = JSONPBackend_;\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"angular2/src/http/static_request\", [\"angular2/src/http/headers\", \"angular2/src/http/http_utils\", \"angular2/src/facade/lang\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  var headers_1 = require(\"angular2/src/http/headers\");\n  var http_utils_1 = require(\"angular2/src/http/http_utils\");\n  var lang_1 = require(\"angular2/src/facade/lang\");\n  var Request = (function() {\n    function Request(requestOptions) {\n      var url = requestOptions.url;\n      this.url = requestOptions.url;\n      if (lang_1.isPresent(requestOptions.search)) {\n        var search = requestOptions.search.toString();\n        if (search.length > 0) {\n          var prefix = '?';\n          if (lang_1.StringWrapper.contains(this.url, '?')) {\n            prefix = (this.url[this.url.length - 1] == '&') ? '' : '&';\n          }\n          this.url = url + prefix + search;\n        }\n      }\n      this._body = requestOptions.body;\n      this.method = http_utils_1.normalizeMethodName(requestOptions.method);\n      this.headers = new headers_1.Headers(requestOptions.headers);\n    }\n    Request.prototype.text = function() {\n      return lang_1.isPresent(this._body) ? this._body.toString() : '';\n    };\n    return Request;\n  })();\n  exports.Request = Request;\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"angular2/src/http/http\", [\"angular2/src/facade/lang\", \"angular2/src/facade/exceptions\", \"angular2/angular2\", \"angular2/src/http/interfaces\", \"angular2/src/http/static_request\", \"angular2/src/http/base_request_options\", \"angular2/src/http/enums\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  var __extends = (this && this.__extends) || function(d, b) {\n    for (var p in b)\n      if (b.hasOwnProperty(p))\n        d[p] = b[p];\n    function __() {\n      this.constructor = d;\n    }\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n  };\n  var __decorate = (this && this.__decorate) || function(decorators, target, key, desc) {\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\")\n      return Reflect.decorate(decorators, target, key, desc);\n    switch (arguments.length) {\n      case 2:\n        return decorators.reduceRight(function(o, d) {\n          return (d && d(o)) || o;\n        }, target);\n      case 3:\n        return decorators.reduceRight(function(o, d) {\n          return (d && d(target, key)), void 0;\n        }, void 0);\n      case 4:\n        return decorators.reduceRight(function(o, d) {\n          return (d && d(target, key, o)) || o;\n        }, desc);\n    }\n  };\n  var __metadata = (this && this.__metadata) || function(k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\")\n      return Reflect.metadata(k, v);\n  };\n  var lang_1 = require(\"angular2/src/facade/lang\");\n  var exceptions_1 = require(\"angular2/src/facade/exceptions\");\n  var angular2_1 = require(\"angular2/angular2\");\n  var interfaces_1 = require(\"angular2/src/http/interfaces\");\n  var static_request_1 = require(\"angular2/src/http/static_request\");\n  var base_request_options_1 = require(\"angular2/src/http/base_request_options\");\n  var enums_1 = require(\"angular2/src/http/enums\");\n  function httpRequest(backend, request) {\n    return backend.createConnection(request).response;\n  }\n  function mergeOptions(defaultOpts, providedOpts, method, url) {\n    var newOptions = defaultOpts;\n    if (lang_1.isPresent(providedOpts)) {\n      newOptions = newOptions.merge(new base_request_options_1.RequestOptions({\n        method: providedOpts.method,\n        url: providedOpts.url,\n        search: providedOpts.search,\n        headers: providedOpts.headers,\n        body: providedOpts.body\n      }));\n    }\n    if (lang_1.isPresent(method)) {\n      return newOptions.merge(new base_request_options_1.RequestOptions({\n        method: method,\n        url: url\n      }));\n    } else {\n      return newOptions.merge(new base_request_options_1.RequestOptions({url: url}));\n    }\n  }\n  var Http = (function() {\n    function Http(_backend, _defaultOptions) {\n      this._backend = _backend;\n      this._defaultOptions = _defaultOptions;\n    }\n    Http.prototype.request = function(url, options) {\n      var responseObservable;\n      if (lang_1.isString(url)) {\n        responseObservable = httpRequest(this._backend, new static_request_1.Request(mergeOptions(this._defaultOptions, options, enums_1.RequestMethods.Get, url)));\n      } else if (url instanceof static_request_1.Request) {\n        responseObservable = httpRequest(this._backend, url);\n      } else {\n        throw exceptions_1.makeTypeError('First argument must be a url string or Request instance.');\n      }\n      return responseObservable;\n    };\n    Http.prototype.get = function(url, options) {\n      return httpRequest(this._backend, new static_request_1.Request(mergeOptions(this._defaultOptions, options, enums_1.RequestMethods.Get, url)));\n    };\n    Http.prototype.post = function(url, body, options) {\n      return httpRequest(this._backend, new static_request_1.Request(mergeOptions(this._defaultOptions.merge(new base_request_options_1.RequestOptions({body: body})), options, enums_1.RequestMethods.Post, url)));\n    };\n    Http.prototype.put = function(url, body, options) {\n      return httpRequest(this._backend, new static_request_1.Request(mergeOptions(this._defaultOptions.merge(new base_request_options_1.RequestOptions({body: body})), options, enums_1.RequestMethods.Put, url)));\n    };\n    Http.prototype.delete = function(url, options) {\n      return httpRequest(this._backend, new static_request_1.Request(mergeOptions(this._defaultOptions, options, enums_1.RequestMethods.Delete, url)));\n    };\n    Http.prototype.patch = function(url, body, options) {\n      return httpRequest(this._backend, new static_request_1.Request(mergeOptions(this._defaultOptions.merge(new base_request_options_1.RequestOptions({body: body})), options, enums_1.RequestMethods.Patch, url)));\n    };\n    Http.prototype.head = function(url, options) {\n      return httpRequest(this._backend, new static_request_1.Request(mergeOptions(this._defaultOptions, options, enums_1.RequestMethods.Head, url)));\n    };\n    Http = __decorate([angular2_1.Injectable(), __metadata('design:paramtypes', [interfaces_1.ConnectionBackend, base_request_options_1.RequestOptions])], Http);\n    return Http;\n  })();\n  exports.Http = Http;\n  var Jsonp = (function(_super) {\n    __extends(Jsonp, _super);\n    function Jsonp(backend, defaultOptions) {\n      _super.call(this, backend, defaultOptions);\n    }\n    Jsonp.prototype.request = function(url, options) {\n      var responseObservable;\n      if (lang_1.isString(url)) {\n        url = new static_request_1.Request(mergeOptions(this._defaultOptions, options, enums_1.RequestMethods.Get, url));\n      }\n      if (url instanceof static_request_1.Request) {\n        if (url.method !== enums_1.RequestMethods.Get) {\n          exceptions_1.makeTypeError('JSONP requests must use GET request method.');\n        }\n        responseObservable = httpRequest(this._backend, url);\n      } else {\n        throw exceptions_1.makeTypeError('First argument must be a url string or Request instance.');\n      }\n      return responseObservable;\n    };\n    Jsonp = __decorate([angular2_1.Injectable(), __metadata('design:paramtypes', [interfaces_1.ConnectionBackend, base_request_options_1.RequestOptions])], Jsonp);\n    return Jsonp;\n  })(Http);\n  exports.Jsonp = Jsonp;\n  global.define = __define;\n  return module.exports;\n});\n\nSystem.register(\"angular2/http\", [\"angular2/angular2\", \"angular2/src/http/http\", \"angular2/src/http/backends/xhr_backend\", \"angular2/src/http/backends/jsonp_backend\", \"angular2/src/http/backends/browser_xhr\", \"angular2/src/http/backends/browser_jsonp\", \"angular2/src/http/base_request_options\", \"angular2/src/http/base_response_options\", \"angular2/src/http/backends/mock_backend\", \"angular2/src/http/static_request\", \"angular2/src/http/static_response\", \"angular2/src/http/interfaces\", \"angular2/src/http/backends/browser_xhr\", \"angular2/src/http/base_request_options\", \"angular2/src/http/base_response_options\", \"angular2/src/http/backends/xhr_backend\", \"angular2/src/http/backends/jsonp_backend\", \"angular2/src/http/http\", \"angular2/src/http/headers\", \"angular2/src/http/enums\", \"angular2/src/http/url_search_params\"], true, function(require, exports, module) {\n  var global = System.global,\n      __define = global.define;\n  global.define = undefined;\n  var angular2_1 = require(\"angular2/angular2\");\n  var http_1 = require(\"angular2/src/http/http\");\n  var xhr_backend_1 = require(\"angular2/src/http/backends/xhr_backend\");\n  var jsonp_backend_1 = require(\"angular2/src/http/backends/jsonp_backend\");\n  var browser_xhr_1 = require(\"angular2/src/http/backends/browser_xhr\");\n  var browser_jsonp_1 = require(\"angular2/src/http/backends/browser_jsonp\");\n  var base_request_options_1 = require(\"angular2/src/http/base_request_options\");\n  var base_response_options_1 = require(\"angular2/src/http/base_response_options\");\n  var mock_backend_1 = require(\"angular2/src/http/backends/mock_backend\");\n  exports.MockConnection = mock_backend_1.MockConnection;\n  exports.MockBackend = mock_backend_1.MockBackend;\n  var static_request_1 = require(\"angular2/src/http/static_request\");\n  exports.Request = static_request_1.Request;\n  var static_response_1 = require(\"angular2/src/http/static_response\");\n  exports.Response = static_response_1.Response;\n  var interfaces_1 = require(\"angular2/src/http/interfaces\");\n  exports.Connection = interfaces_1.Connection;\n  exports.ConnectionBackend = interfaces_1.ConnectionBackend;\n  var browser_xhr_2 = require(\"angular2/src/http/backends/browser_xhr\");\n  exports.BrowserXhr = browser_xhr_2.BrowserXhr;\n  var base_request_options_2 = require(\"angular2/src/http/base_request_options\");\n  exports.BaseRequestOptions = base_request_options_2.BaseRequestOptions;\n  exports.RequestOptions = base_request_options_2.RequestOptions;\n  var base_response_options_2 = require(\"angular2/src/http/base_response_options\");\n  exports.BaseResponseOptions = base_response_options_2.BaseResponseOptions;\n  exports.ResponseOptions = base_response_options_2.ResponseOptions;\n  var xhr_backend_2 = require(\"angular2/src/http/backends/xhr_backend\");\n  exports.XHRBackend = xhr_backend_2.XHRBackend;\n  exports.XHRConnection = xhr_backend_2.XHRConnection;\n  var jsonp_backend_2 = require(\"angular2/src/http/backends/jsonp_backend\");\n  exports.JSONPBackend = jsonp_backend_2.JSONPBackend;\n  exports.JSONPConnection = jsonp_backend_2.JSONPConnection;\n  var http_2 = require(\"angular2/src/http/http\");\n  exports.Http = http_2.Http;\n  exports.Jsonp = http_2.Jsonp;\n  var headers_1 = require(\"angular2/src/http/headers\");\n  exports.Headers = headers_1.Headers;\n  var enums_1 = require(\"angular2/src/http/enums\");\n  exports.ResponseTypes = enums_1.ResponseTypes;\n  exports.ReadyStates = enums_1.ReadyStates;\n  exports.RequestMethods = enums_1.RequestMethods;\n  var url_search_params_1 = require(\"angular2/src/http/url_search_params\");\n  exports.URLSearchParams = url_search_params_1.URLSearchParams;\n  exports.HTTP_PROVIDERS = [angular2_1.provide(http_1.Http, {\n    useFactory: function(xhrBackend, requestOptions) {\n      return new http_1.Http(xhrBackend, requestOptions);\n    },\n    deps: [xhr_backend_1.XHRBackend, base_request_options_1.RequestOptions]\n  }), browser_xhr_1.BrowserXhr, angular2_1.provide(base_request_options_1.RequestOptions, {useClass: base_request_options_1.BaseRequestOptions}), angular2_1.provide(base_response_options_1.ResponseOptions, {useClass: base_response_options_1.BaseResponseOptions}), xhr_backend_1.XHRBackend];\n  exports.HTTP_BINDINGS = exports.HTTP_PROVIDERS;\n  exports.JSONP_PROVIDERS = [angular2_1.provide(http_1.Jsonp, {\n    useFactory: function(jsonpBackend, requestOptions) {\n      return new http_1.Jsonp(jsonpBackend, requestOptions);\n    },\n    deps: [jsonp_backend_1.JSONPBackend, base_request_options_1.RequestOptions]\n  }), browser_jsonp_1.BrowserJsonp, angular2_1.provide(base_request_options_1.RequestOptions, {useClass: base_request_options_1.BaseRequestOptions}), angular2_1.provide(base_response_options_1.ResponseOptions, {useClass: base_response_options_1.BaseResponseOptions}), angular2_1.provide(jsonp_backend_1.JSONPBackend, {useClass: jsonp_backend_1.JSONPBackend_})];\n  exports.JSON_BINDINGS = exports.JSONP_PROVIDERS;\n  global.define = __define;\n  return module.exports;\n});\n\n//# sourceMappingURLDisabled=http.dev.js.map\n/*!\n  * https://github.com/paulmillr/es6-shim\n  * @license es6-shim Copyright 2013-2015 by Paul Miller (http://paulmillr.com)\n  *   and contributors,  MIT License\n  * es6-shim: v0.33.6\n  * see https://github.com/paulmillr/es6-shim/blob/0.33.3/LICENSE\n  * Details and documentation:\n  * https://github.com/paulmillr/es6-shim/\n  */\n(function(e,t){if(typeof define===\"function\"&&define.amd){define(t)}else if(typeof exports===\"object\"){module.exports=t()}else{e.returnExports=t()}})(this,function(){\"use strict\";var e=Function.call.bind(Function.apply);var t=Function.call.bind(Function.call);var r=Array.isArray;var n=function notThunker(t){return function notThunk(){return!e(t,this,arguments)}};var o=function(e){try{e();return false}catch(t){return true}};var i=function valueOrFalseIfThrows(e){try{return e()}catch(t){return false}};var a=n(o);var u=function(){return!o(function(){Object.defineProperty({},\"x\",{get:function(){}})})};var s=!!Object.defineProperty&&u();var f=function foo(){}.name===\"foo\";var c=Function.call.bind(Array.prototype.forEach);var l=Function.call.bind(Array.prototype.reduce);var p=Function.call.bind(Array.prototype.filter);var v=Function.call.bind(Array.prototype.every);var y=function createDataProperty(e,t,r){if(s){Object.defineProperty(e,t,{configurable:true,enumerable:true,writable:true,value:r})}else{e[t]=r}};var h=function createDataPropertyOrThrow(e,t,r){y(e,t,r);if(!oe.SameValue(e[t],r)){throw new TypeError(\"property is nonconfigurable\")}};var g=function(e,t,r,n){if(!n&&t in e){return}if(s){Object.defineProperty(e,t,{configurable:true,enumerable:false,writable:true,value:r})}else{e[t]=r}};var b=function(e,t){c(Object.keys(t),function(r){var n=t[r];g(e,r,n,false)})};var d=Object.create||function(e,t){var r=function Prototype(){};r.prototype=e;var n=new r;if(typeof t!==\"undefined\"){Object.keys(t).forEach(function(e){V.defineByDescriptor(n,e,t[e])})}return n};var m=function(e,t){if(!Object.setPrototypeOf){return false}return i(function(){var r=function Subclass(t){var r=new e(t);Object.setPrototypeOf(r,Subclass.prototype);return r};Object.setPrototypeOf(r,e);r.prototype=d(e.prototype,{constructor:{value:r}});return t(r)})};var O=function(){return String.prototype.startsWith&&o(function(){\"/a/\".startsWith(/a/)})};var w=function(){return String.prototype.startsWith&&\"abc\".startsWith(\"a\",Infinity)===false}();var j=function(){if(typeof self!==\"undefined\"){return self}if(typeof window!==\"undefined\"){return window}if(typeof global!==\"undefined\"){return global}throw new Error(\"unable to locate global object\")};var S=j();var T=S.isFinite;var I=function(){return this===null}.call(null);var E=O()&&w;var M=Function.call.bind(String.prototype.indexOf);var P=Function.call.bind(Object.prototype.toString);var x=Function.call.bind(Array.prototype.concat);var N=Function.call.bind(String.prototype.slice);var C=Function.call.bind(Array.prototype.push);var A=Function.apply.bind(Array.prototype.push);var _=Function.call.bind(Array.prototype.shift);var k=Math.max;var R=Math.min;var F=Math.floor;var D=Math.abs;var z=Math.log;var L=Math.sqrt;var q=Function.call.bind(Object.prototype.hasOwnProperty);var G;var W=function(){};var H=S.Symbol||{};var B=H.species||\"@@species\";var V={getter:function(e,t,r){if(!s){throw new TypeError(\"getters require true ES5 support\")}Object.defineProperty(e,t,{configurable:true,enumerable:false,get:r})},proxy:function(e,t,r){if(!s){throw new TypeError(\"getters require true ES5 support\")}var n=Object.getOwnPropertyDescriptor(e,t);Object.defineProperty(r,t,{configurable:n.configurable,enumerable:n.enumerable,get:function getKey(){return e[t]},set:function setKey(r){e[t]=r}})},redefine:function(e,t,r){if(s){var n=Object.getOwnPropertyDescriptor(e,t);n.value=r;Object.defineProperty(e,t,n)}else{e[t]=r}},defineByDescriptor:function(e,t,r){if(s){Object.defineProperty(e,t,r)}else if(\"value\"in r){e[t]=r.value}},preserveToString:function(e,t){g(e,\"toString\",t.toString.bind(t),true)}};var $=function wrapConstructor(e,t,r){V.preserveToString(t,e);if(Object.setPrototypeOf){Object.setPrototypeOf(e,t)}c(Object.getOwnPropertyNames(e),function(n){if(n in W||r[n]){return}V.proxy(e,n,t)});t.prototype=e.prototype;V.redefine(e.prototype,\"constructor\",t)};var J=function(){return this};var U=function(e){if(s&&!q(e,B)){V.getter(e,B,J)}};var K={primitive:function(e){return e===null||typeof e!==\"function\"&&typeof e!==\"object\"},object:function(e){return e!==null&&typeof e===\"object\"},string:function(e){return P(e)===\"[object String]\"},regex:function(e){return P(e)===\"[object RegExp]\"},symbol:function(e){return typeof S.Symbol===\"function\"&&typeof e===\"symbol\"}};var X=Number.isNaN||function isNaN(e){return e!==e};var Z=Number.isFinite||function isFinite(e){return typeof e===\"number\"&&T(e)};var Q=function overrideNative(e,t,r){var n=e[t];g(e,t,r,true);V.preserveToString(e[t],n)};var Y=K.symbol(H.iterator)?H.iterator:\"_es6-shim iterator_\";if(S.Set&&typeof(new S.Set)[\"@@iterator\"]===\"function\"){Y=\"@@iterator\"}var ee=function(e,t){var r=t||function iterator(){return this};g(e,Y,r);if(!e[Y]&&K.symbol(Y)){e[Y]=r}};var te=function isArguments(e){return P(e)===\"[object Arguments]\"};var re=function isArguments(e){return e!==null&&typeof e===\"object\"&&typeof e.length===\"number\"&&e.length>=0&&P(e)!==\"[object Array]\"&&P(e.callee)===\"[object Function]\"};var ne=te(arguments)?te:re;var oe={Call:function Call(t,r){var n=arguments.length>2?arguments[2]:[];if(!oe.IsCallable(t)){throw new TypeError(t+\" is not a function\")}return e(t,r,n)},RequireObjectCoercible:function(e,t){if(e==null){throw new TypeError(t||\"Cannot call method on \"+e)}},TypeIsObject:function(e){return e!=null&&Object(e)===e},ToObject:function(e,t){oe.RequireObjectCoercible(e,t);return Object(e)},IsCallable:function(e){return typeof e===\"function\"&&P(e)===\"[object Function]\"},IsConstructor:function(e){return oe.IsCallable(e)},ToInt32:function(e){return oe.ToNumber(e)>>0},ToUint32:function(e){return oe.ToNumber(e)>>>0},ToNumber:function(e){if(P(e)===\"[object Symbol]\"){throw new TypeError(\"Cannot convert a Symbol value to a number\")}return+e},ToInteger:function(e){var t=oe.ToNumber(e);if(X(t)){return 0}if(t===0||!Z(t)){return t}return(t>0?1:-1)*F(D(t))},ToLength:function(e){var t=oe.ToInteger(e);if(t<=0){return 0}if(t>Number.MAX_SAFE_INTEGER){return Number.MAX_SAFE_INTEGER}return t},SameValue:function(e,t){if(e===t){if(e===0){return 1/e===1/t}return true}return X(e)&&X(t)},SameValueZero:function(e,t){return e===t||X(e)&&X(t)},IsIterable:function(e){return oe.TypeIsObject(e)&&(typeof e[Y]!==\"undefined\"||ne(e))},GetIterator:function(e){if(ne(e)){return new G(e,\"value\")}var r=oe.GetMethod(e,Y);if(!oe.IsCallable(r)){throw new TypeError(\"value is not an iterable\")}var n=t(r,e);if(!oe.TypeIsObject(n)){throw new TypeError(\"bad iterator\")}return n},GetMethod:function(e,t){var r=oe.ToObject(e)[t];if(r===void 0||r===null){return void 0}if(!oe.IsCallable(r)){throw new TypeError(\"Method not callable: \"+t)}return r},IteratorComplete:function(e){return!!e.done},IteratorClose:function(e,r){var n=oe.GetMethod(e,\"return\");if(n===void 0){return}var o,i;try{o=t(n,e)}catch(a){i=a}if(r){return}if(i){throw i}if(!oe.TypeIsObject(o)){throw new TypeError(\"Iterator's return method returned a non-object.\")}},IteratorNext:function(e){var t=arguments.length>1?e.next(arguments[1]):e.next();if(!oe.TypeIsObject(t)){throw new TypeError(\"bad iterator\")}return t},IteratorStep:function(e){var t=oe.IteratorNext(e);var r=oe.IteratorComplete(t);return r?false:t},Construct:function(e,t,r,n){if(r===void 0){r=e}if(!n){return dr.construct(e,t,r)}var o=r.prototype;if(!oe.TypeIsObject(o)){o=Object.prototype}var i=d(o);var a=oe.Call(e,i,t);return oe.TypeIsObject(a)?a:i},SpeciesConstructor:function(e,t){var r=e.constructor;if(r===void 0){return t}if(!oe.TypeIsObject(r)){throw new TypeError(\"Bad constructor\")}var n=r[B];if(n===void 0||n===null){return t}if(!oe.IsConstructor(n)){throw new TypeError(\"Bad @@species\")}return n},CreateHTML:function(e,t,r,n){var o=String(e);var i=\"<\"+t;if(r!==\"\"){var a=String(n);var u=a.replace(/\"/g,\"&quot;\");i+=\" \"+r+'=\"'+u+'\"'}var s=i+\">\";var f=s+o;return f+\"</\"+t+\">\"}};var ie=function(e,t,r,n){if(!oe.TypeIsObject(e)){throw new TypeError(\"Constructor requires `new`: \"+t.name)}var o=t.prototype;if(!oe.TypeIsObject(o)){o=r}e=d(o);for(var i in n){if(q(n,i)){var a=n[i];g(e,i,a,true)}}return e};if(String.fromCodePoint&&String.fromCodePoint.length!==1){var ae=String.fromCodePoint;Q(String,\"fromCodePoint\",function fromCodePoint(t){return e(ae,this,arguments)})}var ue={fromCodePoint:function fromCodePoint(e){var t=[];var r;for(var n=0,o=arguments.length;n<o;n++){r=Number(arguments[n]);if(!oe.SameValue(r,oe.ToInteger(r))||r<0||r>1114111){throw new RangeError(\"Invalid code point \"+r)}if(r<65536){C(t,String.fromCharCode(r))}else{r-=65536;C(t,String.fromCharCode((r>>10)+55296));C(t,String.fromCharCode(r%1024+56320))}}return t.join(\"\")},raw:function raw(e){var t=oe.ToObject(e,\"bad callSite\");var r=oe.ToObject(t.raw,\"bad raw value\");var n=r.length;var o=oe.ToLength(n);if(o<=0){return\"\"}var i=[];var a=0;var u,s,f,c;while(a<o){u=String(a);f=String(r[u]);C(i,f);if(a+1>=o){break}s=a+1<arguments.length?arguments[a+1]:\"\";c=String(s);C(i,c);a++}return i.join(\"\")}};b(String,ue);if(String.raw({raw:{0:\"x\",1:\"y\",length:2}})!==\"xy\"){Q(String,\"raw\",ue.raw)}var se=function repeat(e,t){if(t<1){return\"\"}if(t%2){return repeat(e,t-1)+e}var r=repeat(e,t/2);return r+r};var fe=Infinity;var ce={repeat:function repeat(e){oe.RequireObjectCoercible(this);var t=String(this);var r=oe.ToInteger(e);if(r<0||r>=fe){throw new RangeError(\"repeat count must be less than infinity and not overflow maximum string size\")}return se(t,r)},startsWith:function startsWith(e){oe.RequireObjectCoercible(this);var t=String(this);if(K.regex(e)){throw new TypeError('Cannot call method \"startsWith\" with a regex')}var r=String(e);var n=arguments.length>1?arguments[1]:void 0;var o=k(oe.ToInteger(n),0);return N(t,o,o+r.length)===r},endsWith:function endsWith(e){oe.RequireObjectCoercible(this);var t=String(this);if(K.regex(e)){throw new TypeError('Cannot call method \"endsWith\" with a regex')}var r=String(e);var n=t.length;var o=arguments.length>1?arguments[1]:void 0;var i=typeof o===\"undefined\"?n:oe.ToInteger(o);var a=R(k(i,0),n);return N(t,a-r.length,a)===r},includes:function includes(e){if(K.regex(e)){throw new TypeError('\"includes\" does not accept a RegExp')}var t;if(arguments.length>1){t=arguments[1]}return M(this,e,t)!==-1},codePointAt:function codePointAt(e){oe.RequireObjectCoercible(this);var t=String(this);var r=oe.ToInteger(e);var n=t.length;if(r>=0&&r<n){var o=t.charCodeAt(r);var i=r+1===n;if(o<55296||o>56319||i){return o}var a=t.charCodeAt(r+1);if(a<56320||a>57343){return o}return(o-55296)*1024+(a-56320)+65536}}};b(String.prototype,ce);if(\"a\".includes(\"a\",Infinity)!==false){Q(String.prototype,\"includes\",ce.includes)}var le=\"\\x85\".trim().length!==1;if(le){delete String.prototype.trim;var pe=[\"\t\\n\u000b\\f\\r \\xa0\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\",\"\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000\\u2028\",\"\\u2029\\ufeff\"].join(\"\");var ve=new RegExp(\"(^[\"+pe+\"]+)|([\"+pe+\"]+$)\",\"g\");b(String.prototype,{trim:function trim(){if(typeof this===\"undefined\"||this===null){throw new TypeError(\"can't convert \"+this+\" to object\")}return String(this).replace(ve,\"\")}})}var ye=function(e){oe.RequireObjectCoercible(e);this._s=String(e);this._i=0};ye.prototype.next=function(){var e=this._s,t=this._i;if(typeof e===\"undefined\"||t>=e.length){this._s=void 0;return{value:void 0,done:true}}var r=e.charCodeAt(t),n,o;if(r<55296||r>56319||t+1===e.length){o=1}else{n=e.charCodeAt(t+1);o=n<56320||n>57343?1:2}this._i=t+o;return{value:e.substr(t,o),done:false}};ee(ye.prototype);ee(String.prototype,function(){return new ye(this)});if(!E){Q(String.prototype,\"startsWith\",ce.startsWith);Q(String.prototype,\"endsWith\",ce.endsWith)}var he={from:function from(e){var r=this;var n=arguments.length>1?arguments[1]:void 0;var o,i;if(n===void 0){o=false}else{if(!oe.IsCallable(n)){throw new TypeError(\"Array.from: when provided, the second argument must be a function\")}i=arguments.length>2?arguments[2]:void 0;o=true}var a=ne(e)||oe.GetMethod(e,Y);var u,s,f;if(a!==void 0){s=oe.IsConstructor(r)?Object(new r):[];var c=oe.GetIterator(e);var l,p;f=0;while(true){l=oe.IteratorStep(c);if(l===false){break}p=l.value;try{if(o){p=i!==undefined?t(n,i,p,f):n(p,f)}s[f]=p}catch(v){oe.IteratorClose(c,true);throw v}f+=1}u=f}else{var y=oe.ToObject(e);u=oe.ToLength(y.length);s=oe.IsConstructor(r)?Object(new r(u)):new Array(u);var h;for(f=0;f<u;++f){h=y[f];if(o){h=i!==undefined?t(n,i,h,f):n(h,f)}s[f]=h}}s.length=u;return s},of:function of(){var e=arguments.length;var t=this;var n=r(t)||!oe.IsCallable(t)?new Array(e):oe.Construct(t,[e]);for(var o=0;o<e;++o){h(n,o,arguments[o])}n.length=e;return n}};b(Array,he);U(Array);var ge=function(e){return{value:e,done:arguments.length===0}};G=function(e,t){this.i=0;this.array=e;this.kind=t};b(G.prototype,{next:function(){var e=this.i,t=this.array;if(!(this instanceof G)){throw new TypeError(\"Not an ArrayIterator\")}if(typeof t!==\"undefined\"){var r=oe.ToLength(t.length);for(;e<r;e++){var n=this.kind;var o;if(n===\"key\"){o=e}else if(n===\"value\"){o=t[e]}else if(n===\"entry\"){o=[e,t[e]]}this.i=e+1;return{value:o,done:false}}}this.array=void 0;return{value:void 0,done:true}}});ee(G.prototype);var be=function(e,t){b(this,{object:e,array:de(e),kind:t})};var de=function getAllKeys(e){var t=[];for(var r in e){C(t,r)}return t};b(be.prototype,{next:function next(){var e;var t=this.array;if(!(this instanceof be)){throw new TypeError(\"Not an ObjectIterator\")}while(t.length>0){e=_(t);if(!(e in this.object)){continue}if(this.kind===\"key\"){return ge(e)}else if(this.kind===\"value\"){return ge(this.object[e])}else{return ge([e,this.object[e]])}}return ge()}});ee(be.prototype);var me=Array.of===he.of||function(){var e=function Foo(e){this.length=e};e.prototype=[];var t=Array.of.apply(e,[1,2]);return t instanceof e&&t.length===2}();if(!me){Q(Array,\"of\",he.of)}var Oe={copyWithin:function copyWithin(e,t){var r=arguments[2];var n=oe.ToObject(this);var o=oe.ToLength(n.length);var i=oe.ToInteger(e);var a=oe.ToInteger(t);var u=i<0?k(o+i,0):R(i,o);var s=a<0?k(o+a,0):R(a,o);r=typeof r===\"undefined\"?o:oe.ToInteger(r);var f=r<0?k(o+r,0):R(r,o);var c=R(f-s,o-u);var l=1;if(s<u&&u<s+c){l=-1;s+=c-1;u+=c-1}while(c>0){if(q(n,s)){n[u]=n[s]}else{delete n[s]}s+=l;u+=l;c-=1}return n},fill:function fill(e){var t=arguments.length>1?arguments[1]:void 0;var r=arguments.length>2?arguments[2]:void 0;var n=oe.ToObject(this);var o=oe.ToLength(n.length);t=oe.ToInteger(typeof t===\"undefined\"?0:t);r=oe.ToInteger(typeof r===\"undefined\"?o:r);var i=t<0?k(o+t,0):R(t,o);var a=r<0?o+r:r;for(var u=i;u<o&&u<a;++u){n[u]=e}return n},find:function find(e){var r=oe.ToObject(this);var n=oe.ToLength(r.length);if(!oe.IsCallable(e)){throw new TypeError(\"Array#find: predicate must be a function\")}var o=arguments.length>1?arguments[1]:null;for(var i=0,a;i<n;i++){a=r[i];if(o){if(t(e,o,a,i,r)){return a}}else if(e(a,i,r)){return a}}},findIndex:function findIndex(e){var r=oe.ToObject(this);var n=oe.ToLength(r.length);if(!oe.IsCallable(e)){throw new TypeError(\"Array#findIndex: predicate must be a function\")}var o=arguments.length>1?arguments[1]:null;for(var i=0;i<n;i++){if(o){if(t(e,o,r[i],i,r)){return i}}else if(e(r[i],i,r)){return i}}return-1},keys:function keys(){return new G(this,\"key\")},values:function values(){return new G(this,\"value\")},entries:function entries(){return new G(this,\"entry\")}};if(Array.prototype.keys&&!oe.IsCallable([1].keys().next)){delete Array.prototype.keys}if(Array.prototype.entries&&!oe.IsCallable([1].entries().next)){delete Array.prototype.entries}if(Array.prototype.keys&&Array.prototype.entries&&!Array.prototype.values&&Array.prototype[Y]){b(Array.prototype,{values:Array.prototype[Y]});if(K.symbol(H.unscopables)){Array.prototype[H.unscopables].values=true}}if(f&&Array.prototype.values&&Array.prototype.values.name!==\"values\"){var we=Array.prototype.values;Q(Array.prototype,\"values\",function values(){return t(we,this)});g(Array.prototype,Y,Array.prototype.values,true)}b(Array.prototype,Oe);ee(Array.prototype,function(){return this.values()});if(Object.getPrototypeOf){ee(Object.getPrototypeOf([].values()))}var je=function(){return i(function(){return Array.from({length:-1}).length===0})}();var Se=function(){var e=Array.from([0].entries());return e.length===1&&r(e[0])&&e[0][0]===0&&e[0][1]===0}();if(!je||!Se){Q(Array,\"from\",he.from)}var Te=function(){return i(function(){return Array.from([0],undefined)})}();if(!Te){var Ie=Array.from;Q(Array,\"from\",function from(r){if(arguments.length>0&&typeof arguments[1]!==\"undefined\"){return e(Ie,this,arguments)}else{return t(Ie,this,r)}})}var Ee=function(e,r){var n={length:-1};n[r?(-1>>>0)-1:0]=true;return i(function(){t(e,n,function(){throw new RangeError(\"should not reach here\")},[])})};if(!Ee(Array.prototype.forEach)){var Me=Array.prototype.forEach;Q(Array.prototype,\"forEach\",function forEach(t){return e(Me,this.length>=0?this:[],arguments)},true)}if(!Ee(Array.prototype.map)){var Pe=Array.prototype.map;Q(Array.prototype,\"map\",function map(t){return e(Pe,this.length>=0?this:[],arguments)},true)}if(!Ee(Array.prototype.filter)){var xe=Array.prototype.filter;Q(Array.prototype,\"filter\",function filter(t){return e(xe,this.length>=0?this:[],arguments)},true)}if(!Ee(Array.prototype.some)){var Ne=Array.prototype.some;Q(Array.prototype,\"some\",function some(t){return e(Ne,this.length>=0?this:[],arguments)},true)}if(!Ee(Array.prototype.every)){var Ce=Array.prototype.every;Q(Array.prototype,\"every\",function every(t){return e(Ce,this.length>=0?this:[],arguments)},true)}if(!Ee(Array.prototype.reduce)){var Ae=Array.prototype.reduce;Q(Array.prototype,\"reduce\",function reduce(t){return e(Ae,this.length>=0?this:[],arguments)},true)}if(!Ee(Array.prototype.reduceRight,true)){var _e=Array.prototype.reduceRight;Q(Array.prototype,\"reduceRight\",function reduceRight(t){return e(_e,this.length>=0?this:[],arguments)},true)}if(Number(\"0o10\")!==8||Number(\"0b10\")!==2){var ke=Number;var Re=/^0b/i;var Fe=/^0o/i;var De=Re.test.bind(Re);var ze=Fe.test.bind(Fe);var Le=function(e){var t;if(typeof e.valueOf===\"function\"){t=e.valueOf();if(K.primitive(t)){return t}}if(typeof e.toString===\"function\"){t=e.toString();if(K.primitive(t)){return t}}throw new TypeError(\"No default value\")};var qe=function(){return function Number(e){var t=K.primitive(e)?e:Le(e,\"number\");if(typeof t===\"string\"){if(De(t)){t=parseInt(N(t,2),2)}else if(ze(t)){t=parseInt(N(t,2),8)}}if(this instanceof Number){return new ke(t)}return ke(t)}}();$(ke,qe,{});Number=qe;V.redefine(S,\"Number\",qe)}var Ge=Math.pow(2,53)-1;b(Number,{MAX_SAFE_INTEGER:Ge,MIN_SAFE_INTEGER:-Ge,EPSILON:2.220446049250313e-16,parseInt:S.parseInt,parseFloat:S.parseFloat,isFinite:Z,isInteger:function isInteger(e){return Z(e)&&oe.ToInteger(e)===e},isSafeInteger:function isSafeInteger(e){return Number.isInteger(e)&&D(e)<=Number.MAX_SAFE_INTEGER},isNaN:X});g(Number,\"parseInt\",S.parseInt,Number.parseInt!==S.parseInt);if(![,1].find(function(e,t){return t===0})){Q(Array.prototype,\"find\",Oe.find)}if([,1].findIndex(function(e,t){return t===0})!==0){Q(Array.prototype,\"findIndex\",Oe.findIndex)}var We=Function.bind.call(Function.bind,Object.prototype.propertyIsEnumerable);var He=function sliceArgs(){var e=Number(this);var t=arguments.length;var r=t-e;var n=new Array(r<0?0:r);for(var o=e;o<t;++o){n[o-e]=arguments[o]}return n};var Be=function assignTo(e){return function assignToSource(t,r){t[r]=e[r];return t}};var Ve=function(e,t){var r=Object.keys(Object(t));var n;if(oe.IsCallable(Object.getOwnPropertySymbols)){n=p(Object.getOwnPropertySymbols(Object(t)),We(t))}return l(x(r,n||[]),Be(t),e)};var $e={assign:function(t,r){var n=oe.ToObject(t,\"Cannot convert undefined or null to object\");return l(e(He,1,arguments),Ve,n)},is:function is(e,t){return oe.SameValue(e,t)}};var Je=Object.assign&&Object.preventExtensions&&function(){var e=Object.preventExtensions({1:2});try{Object.assign(e,\"xy\")}catch(t){return e[1]===\"y\"}}();if(Je){Q(Object,\"assign\",$e.assign)}b(Object,$e);if(s){var Ue={setPrototypeOf:function(e,r){var n;var o=function(e,t){if(!oe.TypeIsObject(e)){throw new TypeError(\"cannot set prototype on a non-object\")}if(!(t===null||oe.TypeIsObject(t))){throw new TypeError(\"can only set prototype to an object or null\"+t)}};var i=function(e,r){o(e,r);t(n,e,r);return e};try{n=e.getOwnPropertyDescriptor(e.prototype,r).set;t(n,{},null)}catch(a){if(e.prototype!=={}[r]){return}n=function(e){this[r]=e};i.polyfill=i(i({},null),e.prototype)instanceof e}return i}(Object,\"__proto__\")};b(Object,Ue)}if(Object.setPrototypeOf&&Object.getPrototypeOf&&Object.getPrototypeOf(Object.setPrototypeOf({},null))!==null&&Object.getPrototypeOf(Object.create(null))===null){(function(){var e=Object.create(null);var t=Object.getPrototypeOf,r=Object.setPrototypeOf;Object.getPrototypeOf=function(r){var n=t(r);return n===e?null:n};Object.setPrototypeOf=function(t,n){var o=n===null?e:n;return r(t,o)};Object.setPrototypeOf.polyfill=false})()}var Ke=!o(function(){Object.keys(\"foo\")});if(!Ke){var Xe=Object.keys;Q(Object,\"keys\",function keys(e){return Xe(oe.ToObject(e))})}if(Object.getOwnPropertyNames){var Ze=!o(function(){Object.getOwnPropertyNames(\"foo\")});if(!Ze){var Qe=typeof window===\"object\"?Object.getOwnPropertyNames(window):[];var Ye=Object.getOwnPropertyNames;Q(Object,\"getOwnPropertyNames\",function getOwnPropertyNames(e){var t=oe.ToObject(e);if(P(t)===\"[object Window]\"){try{return Ye(t)}catch(r){return x([],Qe)}}return Ye(t)})}}if(Object.getOwnPropertyDescriptor){var et=!o(function(){Object.getOwnPropertyDescriptor(\"foo\",\"bar\")});if(!et){var tt=Object.getOwnPropertyDescriptor;Q(Object,\"getOwnPropertyDescriptor\",function getOwnPropertyDescriptor(e,t){return tt(oe.ToObject(e),t)})}}if(Object.seal){var rt=!o(function(){Object.seal(\"foo\")});if(!rt){var nt=Object.seal;Q(Object,\"seal\",function seal(e){if(!K.object(e)){return e}return nt(e)})}}if(Object.isSealed){var ot=!o(function(){Object.isSealed(\"foo\")});if(!ot){var it=Object.isSealed;Q(Object,\"isSealed\",function isSealed(e){if(!K.object(e)){return true}return it(e)})}}if(Object.freeze){var at=!o(function(){Object.freeze(\"foo\")});if(!at){var ut=Object.freeze;Q(Object,\"freeze\",function freeze(e){if(!K.object(e)){return e}return ut(e)})}}if(Object.isFrozen){var st=!o(function(){Object.isFrozen(\"foo\")});if(!st){var ft=Object.isFrozen;Q(Object,\"isFrozen\",function isFrozen(e){if(!K.object(e)){return true}return ft(e)})}}if(Object.preventExtensions){var ct=!o(function(){Object.preventExtensions(\"foo\")});if(!ct){var lt=Object.preventExtensions;Q(Object,\"preventExtensions\",function preventExtensions(e){if(!K.object(e)){return e}return lt(e)})}}if(Object.isExtensible){var pt=!o(function(){Object.isExtensible(\"foo\")});if(!pt){var vt=Object.isExtensible;Q(Object,\"isExtensible\",function isExtensible(e){if(!K.object(e)){return false}return vt(e)})}}if(Object.getPrototypeOf){var yt=!o(function(){Object.getPrototypeOf(\"foo\")});if(!yt){var ht=Object.getPrototypeOf;Q(Object,\"getPrototypeOf\",function getPrototypeOf(e){return ht(oe.ToObject(e))})}}if(!RegExp.prototype.flags&&s){var gt=function flags(){if(!oe.TypeIsObject(this)){throw new TypeError(\"Method called on incompatible type: must be an object.\")}var e=\"\";if(this.global){e+=\"g\"}if(this.ignoreCase){e+=\"i\"}if(this.multiline){e+=\"m\"}if(this.unicode){e+=\"u\"}if(this.sticky){e+=\"y\"}return e};V.getter(RegExp.prototype,\"flags\",gt)}var bt=i(function(){return String(new RegExp(/a/g,\"i\"))===\"/a/i\"});if(!bt&&s){var dt=RegExp;var mt=function RegExp(e,t){var r=this instanceof RegExp;if(!r&&(K.regex(e)||e&&e.constructor===RegExp)){return e}if(K.regex(e)&&K.string(t)){return new RegExp(e.source,t)}return new dt(e,t)};$(dt,mt,{$input:true});RegExp=mt;V.redefine(S,\"RegExp\",mt)}if(s){var Ot={input:\"$_\",lastMatch:\"$&\",lastParen:\"$+\",leftContext:\"$`\",rightContext:\"$'\"};c(Object.keys(Ot),function(e){if(e in RegExp&&!(Ot[e]in RegExp)){V.getter(RegExp,Ot[e],function get(){return RegExp[e]})}})}U(RegExp);var wt=1/Number.EPSILON;var jt=function roundTiesToEven(e){return e+wt-wt};var St=Math.pow(2,-23);var Tt=Math.pow(2,127)*(2-St);var It=Math.pow(2,-126);var Et=Number.prototype.clz;delete Number.prototype.clz;var Mt={acosh:function acosh(e){var t=Number(e);if(Number.isNaN(t)||e<1){return NaN}if(t===1){return 0}if(t===Infinity){return t}return z(t/Math.E+L(t+1)*L(t-1)/Math.E)+1},asinh:function asinh(e){var t=Number(e);if(t===0||!T(t)){return t}return t<0?-Math.asinh(-t):z(t+L(t*t+1))},atanh:function atanh(e){var t=Number(e);if(Number.isNaN(t)||t<-1||t>1){return NaN}if(t===-1){return-Infinity}if(t===1){return Infinity}if(t===0){return t}return.5*z((1+t)/(1-t))},cbrt:function cbrt(e){var t=Number(e);if(t===0){return t}var r=t<0,n;if(r){t=-t}if(t===Infinity){n=Infinity}else{n=Math.exp(z(t)/3);n=(t/(n*n)+2*n)/3}return r?-n:n},clz32:function clz32(e){var r=Number(e);var n=oe.ToUint32(r);if(n===0){return 32}return Et?t(Et,n):31-F(z(n+.5)*Math.LOG2E)},cosh:function cosh(e){var t=Number(e);if(t===0){return 1}if(Number.isNaN(t)){return NaN}if(!T(t)){return Infinity}if(t<0){t=-t}if(t>21){return Math.exp(t)/2}return(Math.exp(t)+Math.exp(-t))/2},expm1:function expm1(e){var t=Number(e);if(t===-Infinity){return-1}if(!T(t)||t===0){return t}if(D(t)>.5){return Math.exp(t)-1}var r=t;var n=0;var o=1;while(n+r!==n){n+=r;o+=1;r*=t/o}return n},hypot:function hypot(e,t){var r=0;var n=0;for(var o=0;o<arguments.length;++o){var i=D(Number(arguments[o]));if(n<i){r*=n/i*(n/i);r+=1;n=i}else{r+=i>0?i/n*(i/n):i}}return n===Infinity?Infinity:n*L(r)},log2:function log2(e){return z(e)*Math.LOG2E},log10:function log10(e){return z(e)*Math.LOG10E},log1p:function log1p(e){var t=Number(e);if(t<-1||Number.isNaN(t)){return NaN}if(t===0||t===Infinity){return t}if(t===-1){return-Infinity}return 1+t-1===0?t:t*(z(1+t)/(1+t-1))},sign:function sign(e){var t=Number(e);if(t===0){return t}if(Number.isNaN(t)){return t}return t<0?-1:1},sinh:function sinh(e){var t=Number(e);if(!T(t)||t===0){return t}if(D(t)<1){return(Math.expm1(t)-Math.expm1(-t))/2}return(Math.exp(t-1)-Math.exp(-t-1))*Math.E/2},tanh:function tanh(e){var t=Number(e);if(Number.isNaN(t)||t===0){return t}if(t===Infinity){return 1}if(t===-Infinity){return-1}var r=Math.expm1(t);var n=Math.expm1(-t);if(r===Infinity){return 1}if(n===Infinity){return-1}return(r-n)/(Math.exp(t)+Math.exp(-t))},trunc:function trunc(e){var t=Number(e);return t<0?-F(-t):F(t)},imul:function imul(e,t){var r=oe.ToUint32(e);var n=oe.ToUint32(t);var o=r>>>16&65535;var i=r&65535;var a=n>>>16&65535;var u=n&65535;return i*u+(o*u+i*a<<16>>>0)|0},fround:function fround(e){var t=Number(e);if(t===0||t===Infinity||t===-Infinity||X(t)){return t}var r=Math.sign(t);var n=D(t);if(n<It){return r*jt(n/It/St)*It*St}var o=(1+St/Number.EPSILON)*n;var i=o-(o-n);if(i>Tt||X(i)){return r*Infinity}return r*i}};b(Math,Mt);g(Math,\"log1p\",Mt.log1p,Math.log1p(-1e-17)!==-1e-17);g(Math,\"asinh\",Mt.asinh,Math.asinh(-1e7)!==-Math.asinh(1e7));g(Math,\"tanh\",Mt.tanh,Math.tanh(-2e-17)!==-2e-17);g(Math,\"acosh\",Mt.acosh,Math.acosh(Number.MAX_VALUE)===Infinity);g(Math,\"cbrt\",Mt.cbrt,Math.abs(1-Math.cbrt(1e-300)/1e-100)/Number.EPSILON>8);g(Math,\"sinh\",Mt.sinh,Math.sinh(-2e-17)!==-2e-17);var Pt=Math.expm1(10);g(Math,\"expm1\",Mt.expm1,Pt>22025.465794806718||Pt<22025.465794806718);var xt=Math.round;var Nt=Math.round(.5-Number.EPSILON/4)===0&&Math.round(-.5+Number.EPSILON/3.99)===1;var Ct=wt+1;var At=2*wt-1;var _t=[Ct,At].every(function(e){return Math.round(e)===e});g(Math,\"round\",function round(e){var t=F(e);var r=t===-1?-0:t+1;return e-t<.5?t:r},!Nt||!_t);V.preserveToString(Math.round,xt);var kt=Math.imul;if(Math.imul(4294967295,5)!==-5){Math.imul=Mt.imul;V.preserveToString(Math.imul,kt)}if(Math.imul.length!==2){Q(Math,\"imul\",function imul(t,r){return e(kt,Math,arguments)})}var Rt=function(){var e=S.setTimeout;if(typeof e!==\"function\"){return}oe.IsPromise=function(e){if(!oe.TypeIsObject(e)){return false}if(typeof e._promise===\"undefined\"){return false}return true};var r=function(e){if(!oe.IsConstructor(e)){throw new TypeError(\"Bad promise constructor\")}var t=this;var r=function(e,r){if(t.resolve!==void 0||t.reject!==void 0){throw new TypeError(\"Bad Promise implementation!\")}t.resolve=e;t.reject=r};t.promise=new e(r);if(!(oe.IsCallable(t.resolve)&&oe.IsCallable(t.reject))){throw new TypeError(\"Bad promise constructor\")}};var n;if(typeof window!==\"undefined\"&&oe.IsCallable(window.postMessage)){n=function(){var e=[];var t=\"zero-timeout-message\";var r=function(r){C(e,r);window.postMessage(t,\"*\")};var n=function(r){if(r.source===window&&r.data===t){r.stopPropagation();if(e.length===0){return}var n=_(e);n()}};window.addEventListener(\"message\",n,true);return r}}var o=function(){var e=S.Promise;return e&&e.resolve&&function(t){return e.resolve().then(t)}};var i=oe.IsCallable(S.setImmediate)?S.setImmediate.bind(S):typeof process===\"object\"&&process.nextTick?process.nextTick:o()||(oe.IsCallable(n)?n():function(t){e(t,0)});var a=1;var u=2;var s=3;var f=4;var l=5;var p=function(e,t){var r=e.capabilities;var n=e.handler;var o,i=false,s;if(n===a){o=t}else if(n===u){o=t;i=true}else{try{o=n(t)}catch(f){o=f;i=true}}s=i?r.reject:r.resolve;s(o)};var v=function(e,t){c(e,function(e){i(function(){p(e,t)})})};var y=function(e,t){var r=e._promise;var n=r.fulfillReactions;r.result=t;r.fulfillReactions=void 0;r.rejectReactions=void 0;r.state=f;v(n,t)};var h=function(e,t){var r=e._promise;var n=r.rejectReactions;r.result=t;r.fulfillReactions=void 0;r.rejectReactions=void 0;r.state=l;v(n,t)};var g=function(e){var t=false;var r=function(r){var n;if(t){return}t=true;if(r===e){return h(e,new TypeError(\"Self resolution\"))}if(!oe.TypeIsObject(r)){return y(e,r)}try{n=r.then}catch(o){return h(e,o)}if(!oe.IsCallable(n)){return y(e,r)}i(function(){d(e,r,n)})};var n=function(r){if(t){return}t=true;return h(e,r)};return{resolve:r,reject:n}};var d=function(e,r,n){var o=g(e);var i=o.resolve;var a=o.reject;try{t(n,r,i,a)}catch(u){a(u)}};var m=function(e){if(!oe.TypeIsObject(e)){throw new TypeError(\"Promise is not object\")}var t=e[B];if(t!==void 0&&t!==null){return t}return e};var O=function Promise(e){if(!(this instanceof Promise)){throw new TypeError('Constructor Promise requires \"new\"')}if(this&&this._promise){throw new TypeError(\"Bad construction\")}if(!oe.IsCallable(e)){throw new TypeError(\"not a valid resolver\")}var t=ie(this,Promise,w,{_promise:{result:void 0,state:s,fulfillReactions:[],rejectReactions:[]}});var r=g(t);var n=r.reject;try{e(r.resolve,n)}catch(o){n(o)}return t};var w=O.prototype;var j=function(e,t,r,n){var o=false;return function(i){if(o){return}o=true;t[e]=i;if(--n.count===0){var a=r.resolve;a(t)}}};var T=function(e,t,r){var n=e.iterator;var o=[],i={count:1},a,u;var s=0;while(true){try{a=oe.IteratorStep(n);if(a===false){e.done=true;break}u=a.value}catch(f){e.done=true;throw f}o[s]=void 0;var c=t.resolve(u);var l=j(s,o,r,i);i.count++;c.then(l,r.reject);s+=1}if(--i.count===0){var p=r.resolve;p(o)}return r.promise};var I=function(e,t,r){var n=e.iterator,o,i,a;while(true){try{o=oe.IteratorStep(n);if(o===false){e.done=true;break}i=o.value}catch(u){e.done=true;throw u}a=t.resolve(i);a.then(r.resolve,r.reject)}return r.promise};b(O,{all:function all(e){var t=m(this);var n=new r(t);var o,i;try{o=oe.GetIterator(e);i={iterator:o,done:false};return T(i,t,n)}catch(a){if(i&&!i.done){try{oe.IteratorClose(o,true)}catch(u){a=u}}var s=n.reject;s(a);return n.promise}},race:function race(e){var t=m(this);var n=new r(t);var o,i;try{o=oe.GetIterator(e);i={iterator:o,done:false};return I(i,t,n)}catch(a){if(i&&!i.done){try{oe.IteratorClose(o,true)}catch(u){a=u}}var s=n.reject;s(a);return n.promise}},reject:function reject(e){var t=this;var n=new r(t);var o=n.reject;o(e);return n.promise},resolve:function resolve(e){var t=this;if(oe.IsPromise(e)){var n=e.constructor;if(n===t){return e}}var o=new r(t);var i=o.resolve;i(e);return o.promise}});b(w,{\"catch\":function(e){return this.then(void 0,e)},then:function then(e,t){var n=this;if(!oe.IsPromise(n)){throw new TypeError(\"not a promise\")}var o=oe.SpeciesConstructor(n,O);var c=new r(o);if(!oe.IsCallable(e)){e=a}if(!oe.IsCallable(t)){t=u}var v={capabilities:c,handler:e};var y={capabilities:c,handler:t};var h=n._promise,g;if(h.state===s){\nC(h.fulfillReactions,v);C(h.rejectReactions,y)}else if(h.state===f){g=h.result;i(function(){p(v,g)})}else if(h.state===l){g=h.result;i(function(){p(y,g)})}else{throw new TypeError(\"unexpected Promise state\")}return c.promise}});return O}();if(S.Promise){delete S.Promise.accept;delete S.Promise.defer;delete S.Promise.prototype.chain}if(typeof Rt===\"function\"){b(S,{Promise:Rt});var Ft=m(S.Promise,function(e){return e.resolve(42).then(function(){})instanceof e});var Dt=!o(function(){S.Promise.reject(42).then(null,5).then(null,W)});var zt=o(function(){S.Promise.call(3,W)});var Lt=function(e){var t=e.resolve(5);t.constructor={};var r=e.resolve(t);return t===r}(S.Promise);if(!Ft||!Dt||!zt||Lt){Promise=Rt;Q(S,\"Promise\",Rt)}U(Promise)}var qt=function(e){var t=Object.keys(l(e,function(e,t){e[t]=true;return e},{}));return e.join(\":\")===t.join(\":\")};var Gt=qt([\"z\",\"a\",\"bb\"]);var Wt=qt([\"z\",1,\"a\",\"3\",2]);if(s){var Ht=function fastkey(e){if(!Gt){return null}var t=typeof e;if(t===\"undefined\"||e===null){return\"^\"+String(e)}else if(t===\"string\"){return\"$\"+e}else if(t===\"number\"){if(!Wt){return\"n\"+e}return e}else if(t===\"boolean\"){return\"b\"+e}return null};var Bt=function emptyObject(){return Object.create?Object.create(null):{}};var Vt=function addIterableToMap(e,n,o){if(r(o)||K.string(o)){c(o,function(e){n.set(e[0],e[1])})}else if(o instanceof e){t(e.prototype.forEach,o,function(e,t){n.set(t,e)})}else{var i,a;if(o!==null&&typeof o!==\"undefined\"){a=n.set;if(!oe.IsCallable(a)){throw new TypeError(\"bad map\")}i=oe.GetIterator(o)}if(typeof i!==\"undefined\"){while(true){var u=oe.IteratorStep(i);if(u===false){break}var s=u.value;try{if(!oe.TypeIsObject(s)){throw new TypeError(\"expected iterable of pairs\")}t(a,n,s[0],s[1])}catch(f){oe.IteratorClose(i,true);throw f}}}}};var $t=function addIterableToSet(e,n,o){if(r(o)||K.string(o)){c(o,function(e){n.add(e)})}else if(o instanceof e){t(e.prototype.forEach,o,function(e){n.add(e)})}else{var i,a;if(o!==null&&typeof o!==\"undefined\"){a=n.add;if(!oe.IsCallable(a)){throw new TypeError(\"bad set\")}i=oe.GetIterator(o)}if(typeof i!==\"undefined\"){while(true){var u=oe.IteratorStep(i);if(u===false){break}var s=u.value;try{t(a,n,s)}catch(f){oe.IteratorClose(i,true);throw f}}}}};var Jt={Map:function(){var e={};var r=function MapEntry(e,t){this.key=e;this.value=t;this.next=null;this.prev=null};r.prototype.isRemoved=function isRemoved(){return this.key===e};var n=function isMap(e){return!!e._es6map};var o=function requireMapSlot(e,t){if(!oe.TypeIsObject(e)||!n(e)){throw new TypeError(\"Method Map.prototype.\"+t+\" called on incompatible receiver \"+String(e))}};var i=function MapIterator(e,t){o(e,\"[[MapIterator]]\");this.head=e._head;this.i=this.head;this.kind=t};i.prototype={next:function next(){var e=this.i,t=this.kind,r=this.head,n;if(typeof this.i===\"undefined\"){return{value:void 0,done:true}}while(e.isRemoved()&&e!==r){e=e.prev}while(e.next!==r){e=e.next;if(!e.isRemoved()){if(t===\"key\"){n=e.key}else if(t===\"value\"){n=e.value}else{n=[e.key,e.value]}this.i=e;return{value:n,done:false}}}this.i=void 0;return{value:void 0,done:true}}};ee(i.prototype);var a=function Map(){if(!(this instanceof Map)){throw new TypeError('Constructor Map requires \"new\"')}if(this&&this._es6map){throw new TypeError(\"Bad construction\")}var e=ie(this,Map,u,{_es6map:true,_head:null,_storage:Bt(),_size:0});var t=new r(null,null);t.next=t.prev=t;e._head=t;if(arguments.length>0){Vt(Map,e,arguments[0])}return e};var u=a.prototype;V.getter(u,\"size\",function(){if(typeof this._size===\"undefined\"){throw new TypeError(\"size method called on incompatible Map\")}return this._size});b(u,{get:function get(e){o(this,\"get\");var t=Ht(e);if(t!==null){var r=this._storage[t];if(r){return r.value}else{return}}var n=this._head,i=n;while((i=i.next)!==n){if(oe.SameValueZero(i.key,e)){return i.value}}},has:function has(e){o(this,\"has\");var t=Ht(e);if(t!==null){return typeof this._storage[t]!==\"undefined\"}var r=this._head,n=r;while((n=n.next)!==r){if(oe.SameValueZero(n.key,e)){return true}}return false},set:function set(e,t){o(this,\"set\");var n=this._head,i=n,a;var u=Ht(e);if(u!==null){if(typeof this._storage[u]!==\"undefined\"){this._storage[u].value=t;return this}else{a=this._storage[u]=new r(e,t);i=n.prev}}while((i=i.next)!==n){if(oe.SameValueZero(i.key,e)){i.value=t;return this}}a=a||new r(e,t);if(oe.SameValue(-0,e)){a.key=+0}a.next=this._head;a.prev=this._head.prev;a.prev.next=a;a.next.prev=a;this._size+=1;return this},\"delete\":function(t){o(this,\"delete\");var r=this._head,n=r;var i=Ht(t);if(i!==null){if(typeof this._storage[i]===\"undefined\"){return false}n=this._storage[i].prev;delete this._storage[i]}while((n=n.next)!==r){if(oe.SameValueZero(n.key,t)){n.key=n.value=e;n.prev.next=n.next;n.next.prev=n.prev;this._size-=1;return true}}return false},clear:function clear(){o(this,\"clear\");this._size=0;this._storage=Bt();var t=this._head,r=t,n=r.next;while((r=n)!==t){r.key=r.value=e;n=r.next;r.next=r.prev=t}t.next=t.prev=t},keys:function keys(){o(this,\"keys\");return new i(this,\"key\")},values:function values(){o(this,\"values\");return new i(this,\"value\")},entries:function entries(){o(this,\"entries\");return new i(this,\"key+value\")},forEach:function forEach(e){o(this,\"forEach\");var r=arguments.length>1?arguments[1]:null;var n=this.entries();for(var i=n.next();!i.done;i=n.next()){if(r){t(e,r,i.value[1],i.value[0],this)}else{e(i.value[1],i.value[0],this)}}}});ee(u,u.entries);return a}(),Set:function(){var e=function isSet(e){return e._es6set&&typeof e._storage!==\"undefined\"};var r=function requireSetSlot(t,r){if(!oe.TypeIsObject(t)||!e(t)){throw new TypeError(\"Set.prototype.\"+r+\" called on incompatible receiver \"+String(t))}};var n=function Set(){if(!(this instanceof Set)){throw new TypeError('Constructor Set requires \"new\"')}if(this&&this._es6set){throw new TypeError(\"Bad construction\")}var e=ie(this,Set,o,{_es6set:true,\"[[SetData]]\":null,_storage:Bt()});if(!e._es6set){throw new TypeError(\"bad set\")}if(arguments.length>0){$t(Set,e,arguments[0])}return e};var o=n.prototype;var i=function ensureMap(e){if(!e[\"[[SetData]]\"]){var t=e[\"[[SetData]]\"]=new Jt.Map;c(Object.keys(e._storage),function(e){if(e===\"^null\"){e=null}else if(e===\"^undefined\"){e=void 0}else{var r=e.charAt(0);if(r===\"$\"){e=N(e,1)}else if(r===\"n\"){e=+N(e,1)}else if(r===\"b\"){e=e===\"btrue\"}else{e=+e}}t.set(e,e)});e._storage=null}};V.getter(n.prototype,\"size\",function(){r(this,\"size\");i(this);return this[\"[[SetData]]\"].size});b(n.prototype,{has:function has(e){r(this,\"has\");var t;if(this._storage&&(t=Ht(e))!==null){return!!this._storage[t]}i(this);return this[\"[[SetData]]\"].has(e)},add:function add(e){r(this,\"add\");var t;if(this._storage&&(t=Ht(e))!==null){this._storage[t]=true;return this}i(this);this[\"[[SetData]]\"].set(e,e);return this},\"delete\":function(e){r(this,\"delete\");var t;if(this._storage&&(t=Ht(e))!==null){var n=q(this._storage,t);return delete this._storage[t]&&n}i(this);return this[\"[[SetData]]\"][\"delete\"](e)},clear:function clear(){r(this,\"clear\");if(this._storage){this._storage=Bt()}else{this[\"[[SetData]]\"].clear()}},values:function values(){r(this,\"values\");i(this);return this[\"[[SetData]]\"].values()},entries:function entries(){r(this,\"entries\");i(this);return this[\"[[SetData]]\"].entries()},forEach:function forEach(e){r(this,\"forEach\");var n=arguments.length>1?arguments[1]:null;var o=this;i(o);this[\"[[SetData]]\"].forEach(function(r,i){if(n){t(e,n,i,i,o)}else{e(i,i,o)}})}});g(n.prototype,\"keys\",n.prototype.values,true);ee(n.prototype,n.prototype.values);return n}()};if(S.Map||S.Set){var Ut=i(function(){return new Map([[1,2]]).get(1)===2});if(!Ut){var Kt=S.Map;S.Map=function Map(){if(!(this instanceof Map)){throw new TypeError('Constructor Map requires \"new\"')}var e=new Kt;if(arguments.length>0){Vt(Map,e,arguments[0])}Object.setPrototypeOf(e,S.Map.prototype);g(e,\"constructor\",Map,true);return e};S.Map.prototype=d(Kt.prototype);V.preserveToString(S.Map,Kt)}var Xt=new Map;var Zt=function(e){e[\"delete\"](0);e[\"delete\"](-0);e.set(0,3);e.get(-0,4);return e.get(0)===3&&e.get(-0)===4}(Xt);var Qt=Xt.set(1,2)===Xt;if(!Zt||!Qt){var Yt=Map.prototype.set;Q(Map.prototype,\"set\",function set(e,r){t(Yt,this,e===0?0:e,r);return this})}if(!Zt){var er=Map.prototype.get;var tr=Map.prototype.has;b(Map.prototype,{get:function get(e){return t(er,this,e===0?0:e)},has:function has(e){return t(tr,this,e===0?0:e)}},true);V.preserveToString(Map.prototype.get,er);V.preserveToString(Map.prototype.has,tr)}var rr=new Set;var nr=function(e){e[\"delete\"](0);e.add(-0);return!e.has(0)}(rr);var or=rr.add(1)===rr;if(!nr||!or){var ir=Set.prototype.add;Set.prototype.add=function add(e){t(ir,this,e===0?0:e);return this};V.preserveToString(Set.prototype.add,ir)}if(!nr){var ar=Set.prototype.has;Set.prototype.has=function has(e){return t(ar,this,e===0?0:e)};V.preserveToString(Set.prototype.has,ar);var ur=Set.prototype[\"delete\"];Set.prototype[\"delete\"]=function SetDelete(e){return t(ur,this,e===0?0:e)};V.preserveToString(Set.prototype[\"delete\"],ur)}var sr=m(S.Map,function(e){var t=new e([]);t.set(42,42);return t instanceof e});var fr=Object.setPrototypeOf&&!sr;var cr=function(){try{return!(S.Map()instanceof S.Map)}catch(e){return e instanceof TypeError}}();if(S.Map.length!==0||fr||!cr){var lr=S.Map;S.Map=function Map(){if(!(this instanceof Map)){throw new TypeError('Constructor Map requires \"new\"')}var e=new lr;if(arguments.length>0){Vt(Map,e,arguments[0])}Object.setPrototypeOf(e,Map.prototype);g(e,\"constructor\",Map,true);return e};S.Map.prototype=lr.prototype;V.preserveToString(S.Map,lr)}var pr=m(S.Set,function(e){var t=new e([]);t.add(42,42);return t instanceof e});var vr=Object.setPrototypeOf&&!pr;var yr=function(){try{return!(S.Set()instanceof S.Set)}catch(e){return e instanceof TypeError}}();if(S.Set.length!==0||vr||!yr){var hr=S.Set;S.Set=function Set(){if(!(this instanceof Set)){throw new TypeError('Constructor Set requires \"new\"')}var e=new hr;if(arguments.length>0){$t(Set,e,arguments[0])}Object.setPrototypeOf(e,Set.prototype);g(e,\"constructor\",Set,true);return e};S.Set.prototype=hr.prototype;V.preserveToString(S.Set,hr)}var gr=!i(function(){return(new Map).keys().next().done});if(typeof S.Map.prototype.clear!==\"function\"||(new S.Set).size!==0||(new S.Map).size!==0||typeof S.Map.prototype.keys!==\"function\"||typeof S.Set.prototype.keys!==\"function\"||typeof S.Map.prototype.forEach!==\"function\"||typeof S.Set.prototype.forEach!==\"function\"||a(S.Map)||a(S.Set)||typeof(new S.Map).keys().next!==\"function\"||gr||!sr){delete S.Map;delete S.Set;b(S,{Map:Jt.Map,Set:Jt.Set},true)}if(S.Set.prototype.keys!==S.Set.prototype.values){g(S.Set.prototype,\"keys\",S.Set.prototype.values,true)}ee(Object.getPrototypeOf((new S.Map).keys()));ee(Object.getPrototypeOf((new S.Set).keys()));if(f&&S.Set.prototype.has.name!==\"has\"){var br=S.Set.prototype.has;Q(S.Set.prototype,\"has\",function has(e){return t(br,this,e)})}}b(S,Jt);U(S.Map);U(S.Set)}if(!S.Reflect){g(S,\"Reflect\",{})}var dr=S.Reflect;var mr=function throwUnlessTargetIsObject(e){if(!oe.TypeIsObject(e)){throw new TypeError(\"target must be an object\")}};var Or={apply:function apply(){return e(oe.Call,null,arguments)},construct:function construct(e,t){if(!oe.IsConstructor(e)){throw new TypeError(\"First argument must be a constructor.\")}var r=arguments.length<3?e:arguments[2];if(!oe.IsConstructor(r)){throw new TypeError(\"new.target must be a constructor.\")}return oe.Construct(e,t,r,\"internal\")},deleteProperty:function deleteProperty(e,t){mr(e);if(s){var r=Object.getOwnPropertyDescriptor(e,t);if(r&&!r.configurable){return false}}return delete e[t]},enumerate:function enumerate(e){mr(e);return new be(e,\"key\")},has:function has(e,t){mr(e);return t in e}};if(Object.getOwnPropertyNames){Object.assign(Or,{ownKeys:function ownKeys(e){mr(e);var t=Object.getOwnPropertyNames(e);if(oe.IsCallable(Object.getOwnPropertySymbols)){A(t,Object.getOwnPropertySymbols(e))}return t}})}var wr=function ConvertExceptionToBoolean(e){return!o(e)};if(Object.preventExtensions){Object.assign(Or,{isExtensible:function isExtensible(e){mr(e);return Object.isExtensible(e)},preventExtensions:function preventExtensions(e){mr(e);return wr(function(){Object.preventExtensions(e)})}})}if(s){var jr=function get(e,r,n){var o=Object.getOwnPropertyDescriptor(e,r);if(!o){var i=Object.getPrototypeOf(e);if(i===null){return undefined}return jr(i,r,n)}if(\"value\"in o){return o.value}if(o.get){return t(o.get,n)}return undefined};var Sr=function set(e,r,n,o){var i=Object.getOwnPropertyDescriptor(e,r);if(!i){var a=Object.getPrototypeOf(e);if(a!==null){return Sr(a,r,n,o)}i={value:void 0,writable:true,enumerable:true,configurable:true}}if(\"value\"in i){if(!i.writable){return false}if(!oe.TypeIsObject(o)){return false}var u=Object.getOwnPropertyDescriptor(o,r);if(u){return dr.defineProperty(o,r,{value:n})}else{return dr.defineProperty(o,r,{value:n,writable:true,enumerable:true,configurable:true})}}if(i.set){t(i.set,o,n);return true}return false};Object.assign(Or,{defineProperty:function defineProperty(e,t,r){mr(e);return wr(function(){Object.defineProperty(e,t,r)})},getOwnPropertyDescriptor:function getOwnPropertyDescriptor(e,t){mr(e);return Object.getOwnPropertyDescriptor(e,t)},get:function get(e,t){mr(e);var r=arguments.length>2?arguments[2]:e;return jr(e,t,r)},set:function set(e,t,r){mr(e);var n=arguments.length>3?arguments[3]:e;return Sr(e,t,r,n)}})}if(Object.getPrototypeOf){var Tr=Object.getPrototypeOf;Or.getPrototypeOf=function getPrototypeOf(e){mr(e);return Tr(e)}}if(Object.setPrototypeOf&&Or.getPrototypeOf){var Ir=function(e,t){while(t){if(e===t){return true}t=Or.getPrototypeOf(t)}return false};Object.assign(Or,{setPrototypeOf:function setPrototypeOf(e,t){mr(e);if(t!==null&&!oe.TypeIsObject(t)){throw new TypeError(\"proto must be an object or null\")}if(t===dr.getPrototypeOf(e)){return true}if(dr.isExtensible&&!dr.isExtensible(e)){return false}if(Ir(e,t)){return false}Object.setPrototypeOf(e,t);return true}})}var Er=function(e,t){if(!oe.IsCallable(S.Reflect[e])){g(S.Reflect,e,t)}else{var r=i(function(){S.Reflect[e](1);S.Reflect[e](NaN);S.Reflect[e](true);return true});if(r){Q(S.Reflect,e,t)}}};Object.keys(Or).forEach(function(e){Er(e,Or[e])});if(f&&S.Reflect.getPrototypeOf.name!==\"getPrototypeOf\"){var Mr=S.Reflect.getPrototypeOf;Q(S.Reflect,\"getPrototypeOf\",function getPrototypeOf(e){return t(Mr,S.Reflect,e)})}if(S.Reflect.setPrototypeOf){if(i(function(){S.Reflect.setPrototypeOf(1,{});return true})){Q(S.Reflect,\"setPrototypeOf\",Or.setPrototypeOf)}}if(S.Reflect.defineProperty){if(!i(function(){var e=!S.Reflect.defineProperty(1,\"test\",{value:1});var t=typeof Object.preventExtensions!==\"function\"||!S.Reflect.defineProperty(Object.preventExtensions({}),\"test\",{});return e&&t})){Q(S.Reflect,\"defineProperty\",Or.defineProperty)}}if(S.Reflect.construct){if(!i(function(){var e=function F(){};return S.Reflect.construct(function(){},[],e)instanceof e})){Q(S.Reflect,\"construct\",Or.construct)}}if(String(new Date(NaN))!==\"Invalid Date\"){var Pr=Date.prototype.toString;var xr=function toString(){var e=+this;if(e!==e){return\"Invalid Date\"}return t(Pr,this)};Q(Date.prototype,\"toString\",xr)}var Nr={anchor:function anchor(e){return oe.CreateHTML(this,\"a\",\"name\",e)},big:function big(){return oe.CreateHTML(this,\"big\",\"\",\"\")},blink:function blink(){return oe.CreateHTML(this,\"blink\",\"\",\"\")},bold:function bold(){return oe.CreateHTML(this,\"b\",\"\",\"\")},fixed:function fixed(){return oe.CreateHTML(this,\"tt\",\"\",\"\")},fontcolor:function fontcolor(e){return oe.CreateHTML(this,\"font\",\"color\",e)},fontsize:function fontsize(e){return oe.CreateHTML(this,\"font\",\"size\",e)},italics:function italics(){return oe.CreateHTML(this,\"i\",\"\",\"\")},link:function link(e){return oe.CreateHTML(this,\"a\",\"href\",e)},small:function small(){return oe.CreateHTML(this,\"small\",\"\",\"\")},strike:function strike(){return oe.CreateHTML(this,\"strike\",\"\",\"\")},sub:function sub(){return oe.CreateHTML(this,\"sub\",\"\",\"\")},sup:function sub(){return oe.CreateHTML(this,\"sup\",\"\",\"\")}};c(Object.keys(Nr),function(e){var r=String.prototype[e];var n=false;if(oe.IsCallable(r)){var o=t(r,\"\",' \" ');var i=x([],o.match(/\"/g)).length;n=o!==o.toLowerCase()||i>2}else{n=true}if(n){Q(String.prototype,e,Nr[e])}});var Cr=function(){if(!K.symbol(H.iterator)){return false}var e=typeof JSON===\"object\"&&typeof JSON.stringify===\"function\"?JSON.stringify:null;if(!e){return false}if(typeof e(H())!==\"undefined\"){return true}if(e([H()])!==\"[null]\"){return true}var t={a:H()};t[H()]=true;if(e(t)!==\"{}\"){return true}return false}();var Ar=i(function(){if(!K.symbol(H.iterator)){return true}return JSON.stringify(Object(H()))===\"{}\"&&JSON.stringify([Object(H())])===\"[{}]\"});if(Cr||!Ar){var _r=JSON.stringify;Q(JSON,\"stringify\",function stringify(e){if(typeof e===\"symbol\"){return}var n;if(arguments.length>1){n=arguments[1]}var o=[e];if(!r(n)){var i=oe.IsCallable(n)?n:null;var a=function(e,r){var o=n?t(n,this,e,r):r;if(typeof o!==\"symbol\"){if(K.symbol(o)){return Be({})(o)}else{return o}}};o.push(a)}else{o.push(n)}if(arguments.length>2){o.push(arguments[2])}return _r.apply(this,o)})}return S});\n//# sourceMappingURL=es6-shim.map\n\nSystem.register('ionic/components', ['ionic/components/app/app', 'ionic/components/app/id', 'ionic/components/action-sheet/action-sheet', 'ionic/components/blur/blur', 'ionic/components/button/button', 'ionic/components/checkbox/checkbox', 'ionic/components/content/content', 'ionic/components/icon/icon', 'ionic/components/item/item', 'ionic/components/item/item-sliding', 'ionic/components/menu/menu', 'ionic/components/menu/menu-types', 'ionic/components/menu/menu-toggle', 'ionic/components/menu/menu-close', 'ionic/components/text-input/text-input', 'ionic/components/text-input/label', 'ionic/components/list/list', 'ionic/components/show-hide-when/show-hide-when', 'ionic/components/modal/modal', 'ionic/components/nav/nav', 'ionic/components/nav/nav-controller', 'ionic/components/nav/view-controller', 'ionic/components/nav/nav-push', 'ionic/components/nav/nav-router', 'ionic/components/navbar/navbar', 'ionic/components/overlay/overlay', 'ionic/components/popup/popup', 'ionic/components/slides/slides', 'ionic/components/radio/radio', 'ionic/components/scroll/scroll', 'ionic/components/scroll/pull-to-refresh', 'ionic/components/searchbar/searchbar', 'ionic/components/segment/segment', 'ionic/components/switch/switch', 'ionic/components/tabs/tabs', 'ionic/components/tabs/tab', 'ionic/components/tap-click/tap-click', 'ionic/components/toolbar/toolbar'], function (_export) {\n  'use strict';\n\n  return {\n    setters: [function (_ionicComponentsAppApp) {\n      for (var _key in _ionicComponentsAppApp) {\n        if (_key !== 'default') _export(_key, _ionicComponentsAppApp[_key]);\n      }\n    }, function (_ionicComponentsAppId) {\n      for (var _key2 in _ionicComponentsAppId) {\n        if (_key2 !== 'default') _export(_key2, _ionicComponentsAppId[_key2]);\n      }\n    }, function (_ionicComponentsActionSheetActionSheet) {\n      for (var _key3 in _ionicComponentsActionSheetActionSheet) {\n        if (_key3 !== 'default') _export(_key3, _ionicComponentsActionSheetActionSheet[_key3]);\n      }\n    }, function (_ionicComponentsBlurBlur) {\n      for (var _key4 in _ionicComponentsBlurBlur) {\n        if (_key4 !== 'default') _export(_key4, _ionicComponentsBlurBlur[_key4]);\n      }\n    }, function (_ionicComponentsButtonButton) {\n      for (var _key5 in _ionicComponentsButtonButton) {\n        if (_key5 !== 'default') _export(_key5, _ionicComponentsButtonButton[_key5]);\n      }\n    }, function (_ionicComponentsCheckboxCheckbox) {\n      for (var _key6 in _ionicComponentsCheckboxCheckbox) {\n        if (_key6 !== 'default') _export(_key6, _ionicComponentsCheckboxCheckbox[_key6]);\n      }\n    }, function (_ionicComponentsContentContent) {\n      for (var _key7 in _ionicComponentsContentContent) {\n        if (_key7 !== 'default') _export(_key7, _ionicComponentsContentContent[_key7]);\n      }\n    }, function (_ionicComponentsIconIcon) {\n      for (var _key8 in _ionicComponentsIconIcon) {\n        if (_key8 !== 'default') _export(_key8, _ionicComponentsIconIcon[_key8]);\n      }\n    }, function (_ionicComponentsItemItem) {\n      for (var _key9 in _ionicComponentsItemItem) {\n        if (_key9 !== 'default') _export(_key9, _ionicComponentsItemItem[_key9]);\n      }\n    }, function (_ionicComponentsItemItemSliding) {\n      for (var _key10 in _ionicComponentsItemItemSliding) {\n        if (_key10 !== 'default') _export(_key10, _ionicComponentsItemItemSliding[_key10]);\n      }\n    }, function (_ionicComponentsMenuMenu) {\n      for (var _key11 in _ionicComponentsMenuMenu) {\n        if (_key11 !== 'default') _export(_key11, _ionicComponentsMenuMenu[_key11]);\n      }\n    }, function (_ionicComponentsMenuMenuTypes) {\n      for (var _key12 in _ionicComponentsMenuMenuTypes) {\n        if (_key12 !== 'default') _export(_key12, _ionicComponentsMenuMenuTypes[_key12]);\n      }\n    }, function (_ionicComponentsMenuMenuToggle) {\n      for (var _key13 in _ionicComponentsMenuMenuToggle) {\n        if (_key13 !== 'default') _export(_key13, _ionicComponentsMenuMenuToggle[_key13]);\n      }\n    }, function (_ionicComponentsMenuMenuClose) {\n      for (var _key14 in _ionicComponentsMenuMenuClose) {\n        if (_key14 !== 'default') _export(_key14, _ionicComponentsMenuMenuClose[_key14]);\n      }\n    }, function (_ionicComponentsTextInputTextInput) {\n      for (var _key15 in _ionicComponentsTextInputTextInput) {\n        if (_key15 !== 'default') _export(_key15, _ionicComponentsTextInputTextInput[_key15]);\n      }\n    }, function (_ionicComponentsTextInputLabel) {\n      for (var _key16 in _ionicComponentsTextInputLabel) {\n        if (_key16 !== 'default') _export(_key16, _ionicComponentsTextInputLabel[_key16]);\n      }\n    }, function (_ionicComponentsListList) {\n      for (var _key17 in _ionicComponentsListList) {\n        if (_key17 !== 'default') _export(_key17, _ionicComponentsListList[_key17]);\n      }\n    }, function (_ionicComponentsShowHideWhenShowHideWhen) {\n      for (var _key18 in _ionicComponentsShowHideWhenShowHideWhen) {\n        if (_key18 !== 'default') _export(_key18, _ionicComponentsShowHideWhenShowHideWhen[_key18]);\n      }\n    }, function (_ionicComponentsModalModal) {\n      for (var _key19 in _ionicComponentsModalModal) {\n        if (_key19 !== 'default') _export(_key19, _ionicComponentsModalModal[_key19]);\n      }\n    }, function (_ionicComponentsNavNav) {\n      for (var _key20 in _ionicComponentsNavNav) {\n        if (_key20 !== 'default') _export(_key20, _ionicComponentsNavNav[_key20]);\n      }\n    }, function (_ionicComponentsNavNavController) {\n      for (var _key21 in _ionicComponentsNavNavController) {\n        if (_key21 !== 'default') _export(_key21, _ionicComponentsNavNavController[_key21]);\n      }\n    }, function (_ionicComponentsNavViewController) {\n      for (var _key22 in _ionicComponentsNavViewController) {\n        if (_key22 !== 'default') _export(_key22, _ionicComponentsNavViewController[_key22]);\n      }\n    }, function (_ionicComponentsNavNavPush) {\n      for (var _key23 in _ionicComponentsNavNavPush) {\n        if (_key23 !== 'default') _export(_key23, _ionicComponentsNavNavPush[_key23]);\n      }\n    }, function (_ionicComponentsNavNavRouter) {\n      for (var _key24 in _ionicComponentsNavNavRouter) {\n        if (_key24 !== 'default') _export(_key24, _ionicComponentsNavNavRouter[_key24]);\n      }\n    }, function (_ionicComponentsNavbarNavbar) {\n      for (var _key25 in _ionicComponentsNavbarNavbar) {\n        if (_key25 !== 'default') _export(_key25, _ionicComponentsNavbarNavbar[_key25]);\n      }\n    }, function (_ionicComponentsOverlayOverlay) {\n      for (var _key26 in _ionicComponentsOverlayOverlay) {\n        if (_key26 !== 'default') _export(_key26, _ionicComponentsOverlayOverlay[_key26]);\n      }\n    }, function (_ionicComponentsPopupPopup) {\n      for (var _key27 in _ionicComponentsPopupPopup) {\n        if (_key27 !== 'default') _export(_key27, _ionicComponentsPopupPopup[_key27]);\n      }\n    }, function (_ionicComponentsSlidesSlides) {\n      for (var _key28 in _ionicComponentsSlidesSlides) {\n        if (_key28 !== 'default') _export(_key28, _ionicComponentsSlidesSlides[_key28]);\n      }\n    }, function (_ionicComponentsRadioRadio) {\n      for (var _key29 in _ionicComponentsRadioRadio) {\n        if (_key29 !== 'default') _export(_key29, _ionicComponentsRadioRadio[_key29]);\n      }\n    }, function (_ionicComponentsScrollScroll) {\n      for (var _key30 in _ionicComponentsScrollScroll) {\n        if (_key30 !== 'default') _export(_key30, _ionicComponentsScrollScroll[_key30]);\n      }\n    }, function (_ionicComponentsScrollPullToRefresh) {\n      for (var _key31 in _ionicComponentsScrollPullToRefresh) {\n        if (_key31 !== 'default') _export(_key31, _ionicComponentsScrollPullToRefresh[_key31]);\n      }\n    }, function (_ionicComponentsSearchbarSearchbar) {\n      for (var _key32 in _ionicComponentsSearchbarSearchbar) {\n        if (_key32 !== 'default') _export(_key32, _ionicComponentsSearchbarSearchbar[_key32]);\n      }\n    }, function (_ionicComponentsSegmentSegment) {\n      for (var _key33 in _ionicComponentsSegmentSegment) {\n        if (_key33 !== 'default') _export(_key33, _ionicComponentsSegmentSegment[_key33]);\n      }\n    }, function (_ionicComponentsSwitchSwitch) {\n      for (var _key34 in _ionicComponentsSwitchSwitch) {\n        if (_key34 !== 'default') _export(_key34, _ionicComponentsSwitchSwitch[_key34]);\n      }\n    }, function (_ionicComponentsTabsTabs) {\n      for (var _key35 in _ionicComponentsTabsTabs) {\n        if (_key35 !== 'default') _export(_key35, _ionicComponentsTabsTabs[_key35]);\n      }\n    }, function (_ionicComponentsTabsTab) {\n      for (var _key36 in _ionicComponentsTabsTab) {\n        if (_key36 !== 'default') _export(_key36, _ionicComponentsTabsTab[_key36]);\n      }\n    }, function (_ionicComponentsTapClickTapClick) {\n      for (var _key37 in _ionicComponentsTapClickTapClick) {\n        if (_key37 !== 'default') _export(_key37, _ionicComponentsTapClickTapClick[_key37]);\n      }\n    }, function (_ionicComponentsToolbarToolbar) {\n      for (var _key38 in _ionicComponentsToolbarToolbar) {\n        if (_key38 !== 'default') _export(_key38, _ionicComponentsToolbarToolbar[_key38]);\n      }\n    }],\n    execute: function () {}\n  };\n});\nSystem.register('ionic/ionic', ['./config/bootstrap', './config/config', './config/modes', './config/decorators', './config/directives', './components', './platform/platform', './platform/registry', './platform/storage', './util/click-block', './util/events', './util/keyboard', './animations/animation', './animations/builtins', './animations/ios-transition', './animations/md-transition', './translation/translate', './translation/translate_pipe'], function (_export) {\n  'use strict';\n\n  return {\n    setters: [function (_configBootstrap) {\n      for (var _key in _configBootstrap) {\n        if (_key !== 'default') _export(_key, _configBootstrap[_key]);\n      }\n    }, function (_configConfig) {\n      for (var _key2 in _configConfig) {\n        if (_key2 !== 'default') _export(_key2, _configConfig[_key2]);\n      }\n    }, function (_configModes) {\n      for (var _key3 in _configModes) {\n        if (_key3 !== 'default') _export(_key3, _configModes[_key3]);\n      }\n    }, function (_configDecorators) {\n      for (var _key4 in _configDecorators) {\n        if (_key4 !== 'default') _export(_key4, _configDecorators[_key4]);\n      }\n    }, function (_configDirectives) {\n      for (var _key5 in _configDirectives) {\n        if (_key5 !== 'default') _export(_key5, _configDirectives[_key5]);\n      }\n    }, function (_components) {\n      for (var _key6 in _components) {\n        if (_key6 !== 'default') _export(_key6, _components[_key6]);\n      }\n    }, function (_platformPlatform) {\n      for (var _key7 in _platformPlatform) {\n        if (_key7 !== 'default') _export(_key7, _platformPlatform[_key7]);\n      }\n    }, function (_platformRegistry) {\n      for (var _key8 in _platformRegistry) {\n        if (_key8 !== 'default') _export(_key8, _platformRegistry[_key8]);\n      }\n    }, function (_platformStorage) {\n      for (var _key9 in _platformStorage) {\n        if (_key9 !== 'default') _export(_key9, _platformStorage[_key9]);\n      }\n    }, function (_utilClickBlock) {\n      for (var _key10 in _utilClickBlock) {\n        if (_key10 !== 'default') _export(_key10, _utilClickBlock[_key10]);\n      }\n    }, function (_utilEvents) {\n      for (var _key11 in _utilEvents) {\n        if (_key11 !== 'default') _export(_key11, _utilEvents[_key11]);\n      }\n    }, function (_utilKeyboard) {\n      for (var _key12 in _utilKeyboard) {\n        if (_key12 !== 'default') _export(_key12, _utilKeyboard[_key12]);\n      }\n    }, function (_animationsAnimation) {\n      for (var _key13 in _animationsAnimation) {\n        if (_key13 !== 'default') _export(_key13, _animationsAnimation[_key13]);\n      }\n    }, function (_animationsBuiltins) {\n      for (var _key14 in _animationsBuiltins) {\n        if (_key14 !== 'default') _export(_key14, _animationsBuiltins[_key14]);\n      }\n    }, function (_animationsIosTransition) {\n      for (var _key15 in _animationsIosTransition) {\n        if (_key15 !== 'default') _export(_key15, _animationsIosTransition[_key15]);\n      }\n    }, function (_animationsMdTransition) {\n      for (var _key16 in _animationsMdTransition) {\n        if (_key16 !== 'default') _export(_key16, _animationsMdTransition[_key16]);\n      }\n    }, function (_translationTranslate) {\n      for (var _key17 in _translationTranslate) {\n        if (_key17 !== 'default') _export(_key17, _translationTranslate[_key17]);\n      }\n    }, function (_translationTranslate_pipe) {\n      for (var _key18 in _translationTranslate_pipe) {\n        if (_key18 !== 'default') _export(_key18, _translationTranslate_pipe[_key18]);\n      }\n    }],\n    execute: function () {}\n  };\n});\nSystem.register('ionic/util', ['ionic/util/dom', 'ionic/util/util'], function (_export) {\n  'use strict';\n\n  var domUtil, dom;\n  return {\n    setters: [function (_ionicUtilDom) {\n      domUtil = _ionicUtilDom;\n    }, function (_ionicUtilUtil) {\n      for (var _key in _ionicUtilUtil) {\n        if (_key !== 'default') _export(_key, _ionicUtilUtil[_key]);\n      }\n    }],\n    execute: function () {\n      dom = domUtil;\n\n      _export('dom', dom);\n    }\n  };\n});\nSystem.register('ionic/animations/animation', ['../util/dom', '../util/util'], function (_export) {\n    /**\n      Animation Steps/Process\n      -----------------------\n      1) Construct animation (doesn't start)\n      2) Client play()'s animation, returns promise\n      3) Add before classes to elements\n      4) Remove before classes from elements\n      5) Elements staged in \"from\" effect w/ inline styles\n      6) Call onReady()\n      7) Wait for RENDER_DELAY milliseconds (give browser time to render)\n      8) Call onPlay()\n      8) Run from/to animation on elements\n      9) Animations finish async\n     10) Set inline styles w/ the \"to\" effects on elements\n     11) Add after classes to elements\n     12) Remove after classes from elements\n     13) Call onFinish()\n     14) Resolve play()'s promise\n    **/\n    'use strict';\n\n    var CSS, rafFrames, extend, Animation, Animate, TRANSFORMS, ANIMATE_PROPERTIES, CUBIC_BEZIERS, EASING_FN, AnimationRegistry;\n\n    var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();\n\n    function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\n    function insertEffects(effects, fromEffect, toEffect, easingConfig) {\n        easingConfig.opts = easingConfig.opts || {};\n        var increment = easingConfig.opts.increment || 0.04;\n        var easingFn = EASING_FN[easingConfig.name];\n        var pos = undefined,\n            tweenEffect = undefined,\n            addEffect = undefined,\n            property = undefined,\n            toProperty = undefined,\n            fromValue = undefined,\n            diffValue = undefined;\n        for (pos = increment; pos <= 1 - increment; pos += increment) {\n            tweenEffect = {};\n            addEffect = false;\n            for (property in toEffect) {\n                toProperty = toEffect[property];\n                if (toProperty.tween) {\n                    fromValue = fromEffect[property].num;\n                    diffValue = toProperty.num - fromValue;\n                    tweenEffect[property] = {\n                        value: roundValue(easingFn(pos, easingConfig.opts) * diffValue + fromValue) + toProperty.unit\n                    };\n                    addEffect = true;\n                }\n            }\n            if (addEffect) {\n                effects.push(convertProperties(tweenEffect));\n            }\n        }\n    }\n    function parseEffect(inputEffect) {\n        var val = undefined,\n            r = undefined,\n            num = undefined,\n            property = undefined;\n        var outputEffect = {};\n        for (property in inputEffect) {\n            val = inputEffect[property];\n            r = val.toString().match(/(^-?\\d*\\.?\\d*)(.*)/);\n            num = parseFloat(r[1]);\n            outputEffect[property] = {\n                value: val,\n                num: num,\n                unit: r[0] != r[2] ? r[2] : '',\n                tween: !isNaN(num) && ANIMATE_PROPERTIES.indexOf(property) > -1\n            };\n        }\n        return outputEffect;\n    }\n    function convertProperties(inputEffect) {\n        var outputEffect = {};\n        var transforms = [];\n        var value = undefined,\n            property = undefined;\n        for (property in inputEffect) {\n            value = inputEffect[property].value;\n            if (TRANSFORMS.indexOf(property) > -1) {\n                transforms.push(property + '(' + value + ')');\n            } else {\n                outputEffect[property] = value;\n            }\n        }\n        if (transforms.length) {\n            transforms.push('translateZ(0px)');\n            outputEffect.transform = transforms.join(' ');\n        }\n        return outputEffect;\n    }\n    function inlineStyle(ele, effect) {\n        if (ele && effect) {\n            var transforms = [];\n            var value = undefined,\n                property = undefined;\n            for (property in effect) {\n                value = effect[property].value;\n                if (TRANSFORMS.indexOf(property) > -1) {\n                    transforms.push(property + '(' + value + ')');\n                } else {\n                    ele.style[property] = value;\n                }\n            }\n            if (transforms.length) {\n                transforms.push('translateZ(0px)');\n                ele.style[CSS.transform] = transforms.join(' ');\n            }\n        }\n    }\n    function roundValue(val) {\n        return Math.round(val * 10000) / 10000;\n    }\n\n    function parallel(tasks, done) {\n        var l = tasks.length;\n        if (!l) {\n            done && done();\n            return;\n        }\n        var completed = 0;\n        function taskCompleted() {\n            completed++;\n            if (completed === l) {\n                done && done();\n            }\n        }\n        for (var i = 0; i < l; i++) {\n            tasks[i](taskCompleted);\n        }\n    }\n    return {\n        setters: [function (_utilDom) {\n            CSS = _utilDom.CSS;\n            rafFrames = _utilDom.rafFrames;\n        }, function (_utilUtil) {\n            extend = _utilUtil.extend;\n        }],\n        execute: function () {\n            Animation = (function () {\n                function Animation(ele) {\n                    var opts = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1];\n\n                    _classCallCheck(this, Animation);\n\n                    this.reset();\n                    this._opts = extend({\n                        renderDelay: 16\n                    }, opts);\n                    this.elements(ele);\n                    if (!document.documentElement.animate) {\n                        console.error('Web Animations polyfill missing');\n                    }\n                }\n\n                _createClass(Animation, [{\n                    key: 'reset',\n                    value: function reset() {\n                        this._el = [];\n                        this._chld = [];\n                        this._ani = [];\n                        this._bfAdd = [];\n                        this._bfSty = {};\n                        this._bfRmv = [];\n                        this._afAdd = [];\n                        this._afRmv = [];\n                        this._readys = [];\n                        this._plays = [];\n                        this._finishes = [];\n                    }\n                }, {\n                    key: 'elements',\n                    value: function elements(ele) {\n                        if (ele) {\n                            if (typeof ele === 'string') {\n                                // string query selector\n                                ele = document.querySelectorAll(ele);\n                            }\n                            if (ele.length) {\n                                // array of elements\n                                for (var i = 0; i < ele.length; i++) {\n                                    this.addElement(ele[i]);\n                                }\n                            } else {\n                                // single element\n                                this.addElement(ele);\n                            }\n                        }\n                        return this;\n                    }\n                }, {\n                    key: 'addElement',\n                    value: function addElement(ele) {\n                        // ensure only HTML Element nodes\n                        if (ele) {\n                            if (ele.nativeElement) {\n                                // angular ElementRef\n                                ele = ele.nativeElement;\n                            }\n                            if (ele.nodeType === 1) {\n                                this._el.push(ele);\n                            }\n                        }\n                    }\n                }, {\n                    key: 'parent',\n                    value: function parent(parentAnimation) {\n                        this._parent = parentAnimation;\n                        return this;\n                    }\n                }, {\n                    key: 'add',\n                    value: function add(childAnimations) {\n                        var _childAnimations = Array.isArray(childAnimations) ? childAnimations : arguments;\n                        for (var i = 0; i < _childAnimations.length; i++) {\n                            _childAnimations[i].parent(this);\n                            this._chld.push(_childAnimations[i]);\n                        }\n                        return this;\n                    }\n                }, {\n                    key: 'duration',\n                    value: function duration(value) {\n                        if (arguments.length) {\n                            this._duration = value;\n                            return this;\n                        }\n                        return this._duration || this._parent && this._parent.duration() || 0;\n                    }\n                }, {\n                    key: 'clearDuration',\n                    value: function clearDuration() {\n                        this._duration = null;\n                        for (var i = 0, l = this._chld.length; i < l; i++) {\n                            this._chld[i].clearDuration();\n                        }\n                    }\n                }, {\n                    key: 'easing',\n                    value: function easing(name, opts) {\n                        if (arguments.length) {\n                            this._easing = {\n                                name: name,\n                                opts: opts\n                            };\n                            return this;\n                        }\n                        return this._easing || this._parent && this._parent.easing();\n                    }\n                }, {\n                    key: 'playbackRate',\n                    value: function playbackRate(value) {\n                        if (arguments.length) {\n                            this._rate = value;\n                            var i = undefined;\n                            for (i = 0; i < this._chld.length; i++) {\n                                this._chld[i].playbackRate(value);\n                            }\n                            for (i = 0; i < this._ani.length; i++) {\n                                this._ani[i].playbackRate(value);\n                            }\n                            return this;\n                        }\n                        return typeof this._rate !== 'undefined' ? this._rate : this._parent && this._parent.playbackRate();\n                    }\n                }, {\n                    key: 'reverse',\n                    value: function reverse() {\n                        return this.playbackRate(-1);\n                    }\n                }, {\n                    key: 'forward',\n                    value: function forward() {\n                        return this.playbackRate(1);\n                    }\n                }, {\n                    key: 'from',\n                    value: function from(property, value) {\n                        if (!this._from) {\n                            this._from = {};\n                        }\n                        this._from[property] = value;\n                        return this;\n                    }\n                }, {\n                    key: 'to',\n                    value: function to(property, value) {\n                        if (!this._to) {\n                            this._to = {};\n                        }\n                        this._to[property] = value;\n                        return this;\n                    }\n                }, {\n                    key: 'fromTo',\n                    value: function fromTo(property, from, to) {\n                        return this.from(property, from).to(property, to);\n                    }\n                }, {\n                    key: 'fadeIn',\n                    value: function fadeIn() {\n                        return this.fromTo('opacity', 0.001, 1);\n                    }\n                }, {\n                    key: 'fadeOut',\n                    value: function fadeOut() {\n                        return this.fromTo('opacity', 0.999, 0);\n                    }\n                }, {\n                    key: 'play',\n                    value: function play(done) {\n                        var self = this;\n                        // the actual play() method which may or may not start async\n                        function beginPlay(beginPlayDone) {\n                            var tasks = [];\n                            self._chld.forEach(function (childAnimation) {\n                                tasks.push(function (taskDone) {\n                                    childAnimation.play(taskDone);\n                                });\n                            });\n                            self._ani.forEach(function (animation) {\n                                tasks.push(function (taskDone) {\n                                    animation.play(taskDone);\n                                });\n                            });\n                            parallel(tasks, beginPlayDone);\n                        }\n                        if (!self._parent) {\n                            var kickoff = function kickoff() {\n                                // synchronously call all onPlay()'s before play()\n                                self._onPlay();\n                                beginPlay(function () {\n                                    self._onFinish();\n                                    done();\n                                });\n                            };\n\n                            // this is the top level animation and is in full control\n                            // of when the async play() should actually kick off\n                            // stage all animations and child animations at their starting point\n                            self.stage();\n                            var promise = undefined;\n                            if (!done) {\n                                promise = new Promise(function (res) {\n                                    done = res;\n                                });\n                            }\n\n                            if (self._duration > 16 && self._opts.renderDelay > 0) {\n                                // begin each animation when everything is rendered in their starting point\n                                // give the browser some time to render everything in place before starting\n                                rafFrames(self._opts.renderDelay / 16, kickoff);\n                            } else {\n                                // no need to render everything in there place before animating in\n                                // just kick it off immediately to render them in their \"to\" locations\n                                kickoff();\n                            }\n                            return promise;\n                        }\n                        // this is a child animation, it is told exactly when to\n                        // start by the top level animation\n                        beginPlay(done);\n                    }\n                }, {\n                    key: 'stage',\n                    value: function stage() {\n                        // before the RENDER_DELAY\n                        // before the animations have started\n                        if (!this._isStaged) {\n                            this._isStaged = true;\n                            var i = undefined,\n                                p = undefined,\n                                l = undefined,\n                                j = undefined,\n                                ele = undefined,\n                                animation = undefined;\n                            for (i = 0, l = this._chld.length; i < l; i++) {\n                                this._chld[i].stage();\n                            }\n                            for (i = 0; i < this._el.length; i++) {\n                                ele = this._el[i];\n                                for (j = 0; j < this._bfAdd.length; j++) {\n                                    ele.classList.add(this._bfAdd[j]);\n                                }\n                                for (p in this._bfSty) {\n                                    ele.style[p] = this._bfSty[p];\n                                }\n                                for (j = 0; j < this._bfRmv.length; j++) {\n                                    ele.classList.remove(this._bfRmv[j]);\n                                }\n                            }\n                            if (this._to) {\n                                // only animate the elements if there are defined \"to\" effects\n                                for (i = 0; i < this._el.length; i++) {\n                                    animation = new Animate(this._el[i], this._from, this._to, this.duration(), this.easing(), this.playbackRate());\n                                    if (animation.shouldAnimate) {\n                                        this._ani.push(animation);\n                                    }\n                                }\n                            }\n                            for (i = 0; i < this._readys.length; i++) {\n                                this._readys[i](this);\n                            }\n                        }\n                    }\n                }, {\n                    key: '_onPlay',\n                    value: function _onPlay() {\n                        // after the RENDER_DELAY\n                        // before the animations have started\n                        var i = undefined;\n                        this._isFinished = false;\n                        for (i = 0; i < this._chld.length; i++) {\n                            this._chld[i]._onPlay();\n                        }\n                        for (i = 0; i < this._plays.length; i++) {\n                            this._plays[i](this);\n                        }\n                    }\n                }, {\n                    key: '_onFinish',\n                    value: function _onFinish() {\n                        // after the animations have finished\n                        if (!this._isFinished && !this.isProgress) {\n                            this._isFinished = true;\n                            var i = undefined,\n                                j = undefined,\n                                ele = undefined;\n                            for (i = 0; i < this._chld.length; i++) {\n                                this._chld[i]._onFinish();\n                            }\n                            if (this.playbackRate() < 0) {\n                                // reverse direction\n                                for (i = 0; i < this._el.length; i++) {\n                                    ele = this._el[i];\n                                    for (j = 0; j < this._bfAdd.length; j++) {\n                                        ele.classList.remove(this._bfAdd[j]);\n                                    }\n                                    for (j = 0; j < this._bfRmv.length; j++) {\n                                        ele.classList.add(this._bfRmv[j]);\n                                    }\n                                }\n                            } else {\n                                // normal direction\n                                for (i = 0; i < this._el.length; i++) {\n                                    ele = this._el[i];\n                                    for (j = 0; j < this._afAdd.length; j++) {\n                                        ele.classList.add(this._afAdd[j]);\n                                    }\n                                    for (j = 0; j < this._afRmv.length; j++) {\n                                        ele.classList.remove(this._afRmv[j]);\n                                    }\n                                }\n                            }\n                            for (i = 0; i < this._finishes.length; i++) {\n                                this._finishes[i](this);\n                            }\n                        }\n                    }\n                }, {\n                    key: 'pause',\n                    value: function pause() {\n                        var i = undefined;\n                        for (i = 0; i < this._chld.length; i++) {\n                            this._chld[i].pause();\n                        }\n                        for (i = 0; i < this._ani.length; i++) {\n                            this._ani[i].pause();\n                        }\n                    }\n                }, {\n                    key: 'progressStart',\n                    value: function progressStart() {\n                        this.isProgress = true;\n                        for (var i = 0; i < this._chld.length; i++) {\n                            this._chld[i].progressStart();\n                        }\n                        this.duration(1000);\n                        this.play();\n                        this.pause();\n                    }\n                }, {\n                    key: 'progress',\n                    value: function progress(value) {\n                        value = Math.min(1, Math.max(0, value));\n                        this.isProgress = true;\n                        var i = undefined;\n                        for (i = 0; i < this._chld.length; i++) {\n                            this._chld[i].progress(value);\n                        }\n                        for (i = 0; i < this._ani.length; i++) {\n                            this._ani[i].progress(value);\n                        }\n                    }\n\n                    /**\n                     * Get the current time of the first animation\n                     * in the list. To get a specific time of an animation, call\n                     * subAnimationInstance.getCurrentTime()\n                     */\n                }, {\n                    key: 'getCurrentTime',\n                    value: function getCurrentTime() {\n                        if (this._chld.length > 0) {\n                            return this._chld[0].getCurrentTime();\n                        }\n                        if (this._ani.length > 0) {\n                            return this._ani[0].getCurrentTime();\n                        }\n                        return 0;\n                    }\n                }, {\n                    key: 'progressEnd',\n                    value: function progressEnd(shouldComplete) {\n                        var rate = arguments.length <= 1 || arguments[1] === undefined ? 3 : arguments[1];\n\n                        var promises = [];\n                        this.isProgress = false;\n                        for (var i = 0; i < this._chld.length; i++) {\n                            promises.push(this._chld[i].progressEnd(shouldComplete));\n                        }\n                        this._ani.forEach(function (animation) {\n                            if (shouldComplete) {\n                                animation.playbackRate(rate);\n                            } else {\n                                animation.playbackRate(rate * -1);\n                            }\n                            promises.push(new Promise(function (resolve) {\n                                animation.play(resolve);\n                            }));\n                        });\n                        return Promise.all(promises);\n                    }\n                }, {\n                    key: 'onReady',\n                    value: function onReady(fn, clear) {\n                        if (clear) {\n                            this._readys = [];\n                        }\n                        this._readys.push(fn);\n                        return this;\n                    }\n                }, {\n                    key: 'onPlay',\n                    value: function onPlay(fn, clear) {\n                        if (clear) {\n                            this._plays = [];\n                        }\n                        this._plays.push(fn);\n                        return this;\n                    }\n                }, {\n                    key: 'onFinish',\n                    value: function onFinish(fn, clear) {\n                        if (clear) {\n                            this._finishes = [];\n                        }\n                        this._finishes.push(fn);\n                        return this;\n                    }\n                }, {\n                    key: 'clone',\n                    value: function clone() {\n                        function copy(dest, src) {\n                            // undo what stage() may have already done\n                            extend(dest, src);\n                            dest._isFinished = dest._isStaged = dest.isProgress = false;\n                            dest._chld = [];\n                            dest._ani = [];\n                            for (var i = 0; i < src._chld.length; i++) {\n                                dest.add(copy(new Animation(), src._chld[i]));\n                            }\n                            return dest;\n                        }\n                        return copy(new Animation(), this);\n                    }\n                }, {\n                    key: 'dispose',\n                    value: function dispose(removeElement) {\n                        var i = undefined;\n                        for (i = 0; i < this._chld.length; i++) {\n                            this._chld[i].dispose(removeElement);\n                        }\n                        for (i = 0; i < this._ani.length; i++) {\n                            this._ani[i].dispose(removeElement);\n                        }\n                        if (removeElement) {\n                            for (i = 0; i < this._el.length; i++) {\n                                this._el[i].parentNode && this._el[i].parentNode.removeChild(this._el[i]);\n                            }\n                        }\n                        this.reset();\n                    }\n\n                    /*\n                     STATIC CLASSES\n                     */\n                }, {\n                    key: 'before',\n                    get: function get() {\n                        var _this = this;\n\n                        return {\n                            addClass: function addClass(className) {\n                                _this._bfAdd.push(className);\n                                return _this;\n                            },\n                            removeClass: function removeClass(className) {\n                                _this._bfRmv.push(className);\n                                return _this;\n                            },\n                            setStyles: function setStyles(styles) {\n                                _this._bfSty = styles;\n                                return _this;\n                            }\n                        };\n                    }\n                }, {\n                    key: 'after',\n                    get: function get() {\n                        var _this2 = this;\n\n                        return {\n                            addClass: function addClass(className) {\n                                _this2._afAdd.push(className);\n                                return _this2;\n                            },\n                            removeClass: function removeClass(className) {\n                                _this2._afRmv.push(className);\n                                return _this2;\n                            }\n                        };\n                    }\n                }], [{\n                    key: 'create',\n                    value: function create(element, name) {\n                        var AnimationClass = AnimationRegistry[name];\n                        if (!AnimationClass) {\n                            // couldn't find an animation by the given name\n                            // fallback to just the base Animation class\n                            AnimationClass = Animation;\n                        }\n                        return new AnimationClass(element);\n                    }\n                }, {\n                    key: 'createTransition',\n                    value: function createTransition(enteringView, leavingView) {\n                        var opts = arguments.length <= 2 || arguments[2] === undefined ? {} : arguments[2];\n\n                        var name = opts.animation || 'ios-transition';\n                        var TransitionClass = AnimationRegistry[name];\n                        if (!TransitionClass) {\n                            TransitionClass = Animation;\n                        }\n                        return new TransitionClass(enteringView, leavingView, opts);\n                    }\n                }, {\n                    key: 'register',\n                    value: function register(name, AnimationClass) {\n                        AnimationRegistry[name] = AnimationClass;\n                    }\n                }]);\n\n                return Animation;\n            })();\n\n            _export('Animation', Animation);\n\n            Animate = (function () {\n                function Animate(ele, fromEffect, toEffect, duration, easingConfig, playbackRate) {\n                    _classCallCheck(this, Animate);\n\n                    // https://w3c.github.io/web-animations/\n                    // not using the direct API methods because they're still in flux\n                    // however, element.animate() seems locked in and uses the latest\n                    // and correct API methods under the hood, so really doesn't matter\n                    if (!fromEffect) {\n                        return console.error(ele.tagName, 'animation fromEffect required, toEffect:', toEffect);\n                    }\n                    this.toEffect = parseEffect(toEffect);\n                    this.shouldAnimate = duration > 32;\n                    if (!this.shouldAnimate) {\n                        return inlineStyle(ele, this.toEffect);\n                    }\n                    this.ele = ele;\n                    // stage where the element will start from\n                    this.fromEffect = parseEffect(fromEffect);\n                    inlineStyle(ele, this.fromEffect);\n                    this.duration = duration;\n                    this.rate = typeof playbackRate !== 'undefined' ? playbackRate : 1;\n                    this.easing = easingConfig && easingConfig.name || 'linear';\n                    this.effects = [convertProperties(this.fromEffect)];\n                    if (this.easing in EASING_FN) {\n                        insertEffects(this.effects, this.fromEffect, this.toEffect, easingConfig);\n                    } else if (this.easing in CUBIC_BEZIERS) {\n                        this.easing = 'cubic-bezier(' + CUBIC_BEZIERS[this.easing] + ')';\n                    }\n                    this.effects.push(convertProperties(this.toEffect));\n                }\n\n                _createClass(Animate, [{\n                    key: 'play',\n                    value: function play(done) {\n                        var self = this;\n                        if (self.ani) {\n                            self.ani.play();\n                        } else {\n                            // https://developers.google.com/web/updates/2014/05/Web-Animations---element-animate-is-now-in-Chrome-36\n                            // https://w3c.github.io/web-animations/\n                            // Future versions will use \"new window.Animation\" rather than \"element.animate()\"\n                            self.ani = self.ele.animate(self.effects, {\n                                duration: self.duration || 0,\n                                easing: self.easing,\n                                playbackRate: self.rate // old way of setting playbackRate, but still necessary\n                            });\n                            self.ani.playbackRate = self.rate;\n                        }\n                        self.ani.onfinish = function () {\n                            // lock in where the element will stop at\n                            // if the playbackRate is negative then it needs to return\n                            // to its \"from\" effects\n                            if (self.ani) {\n                                inlineStyle(self.ele, self.rate < 0 ? self.fromEffect : self.toEffect);\n                                self.ani = self.ani.onfinish = null;\n                                done && done();\n                            }\n                        };\n                    }\n                }, {\n                    key: 'pause',\n                    value: function pause() {\n                        this.ani && this.ani.pause();\n                    }\n                }, {\n                    key: 'progress',\n                    value: function progress(value) {\n                        if (this.ani) {\n                            // passed a number between 0 and 1\n                            if (this.ani.playState !== 'paused') {\n                                this.ani.pause();\n                            }\n                            // don't let the progress finish the animation\n                            // leave it off JUST before it's finished\n                            value = Math.min(0.999, Math.max(0.001, value));\n                            this.ani.currentTime = this.duration * value;\n                        }\n                    }\n                }, {\n                    key: 'getCurrentTime',\n                    value: function getCurrentTime() {\n                        return this.ani && this.ani.currentTime || 0;\n                    }\n                }, {\n                    key: 'playbackRate',\n                    value: function playbackRate(value) {\n                        this.rate = value;\n                        if (this.ani) {\n                            this.ani.playbackRate = value;\n                        }\n                    }\n                }, {\n                    key: 'dispose',\n                    value: function dispose() {\n                        this.ele = this.ani = this.effects = this.toEffect = null;\n                    }\n                }]);\n\n                return Animate;\n            })();\n\n            TRANSFORMS = ['translateX', 'translateY', 'translateZ', 'scale', 'scaleX', 'scaleY', 'scaleZ', 'rotate', 'rotateX', 'rotateY', 'rotateZ', 'skewX', 'skewY', 'perspective'];\n            ANIMATE_PROPERTIES = TRANSFORMS.concat('opacity');\n\n            // Robert Penner's Easing Functions\n            // http://robertpenner.com/easing/\n            CUBIC_BEZIERS = {\n                // default browser suppored easing\n                // ease\n                // ease-in\n                // ease-out\n                // ease-in-out\n                // Cubic\n                'ease-in-cubic': '0.55,0.055,0.675,0.19',\n                'ease-out-cubic': '0.215,0.61,0.355,1',\n                'ease-in-Out-cubic': '0.645,0.045,0.355,1',\n                // Circ\n                'ease-in-circ': '0.6,0.04,0.98,0.335',\n                'ease-out-circ': '0.075,0.82,0.165,1',\n                'ease-in-out-circ': '0.785,0.135,0.15,0.86',\n                // Expo\n                'ease-in-expo': '0.95,0.05,0.795,0.035',\n                'ease-out-expo': '0.19,1,0.22,1',\n                'ease-in-out-expo': '1,0,0,1',\n                // Quad\n                'ease-in-quad': '0.55,0.085,0.68,0.53',\n                'ease-out-quad': '0.25,0.46,0.45,0.94',\n                'ease-in-out-quad': '0.455,0.03,0.515,0.955',\n                // Quart\n                'ease-in-quart': '0.895,0.03,0.685,0.22',\n                'ease-out-quart': '0.165,0.84,0.44,1',\n                'ease-in-out-quart': '0.77,0,0.175,1',\n                // Quint\n                'ease-in-quint': '0.755,0.05,0.855,0.06',\n                'ease-out-quint': '0.23,1,0.32,1',\n                'ease-in-out-quint': '0.86,0,0.07,1',\n                // Sine\n                'ease-in-sine': '0.47,0,0.745,0.715',\n                'ease-out-sine': '0.39,0.575,0.565,1',\n                'ease-in-out-sine': '0.445,0.05,0.55,0.95',\n                // Back\n                'ease-in-back': '0.6,-0.28,0.735,0.045',\n                'ease-out-back': '0.175,0.885,0.32,1.275',\n                'ease-in-out-back': '0.68,-0.55,0.265,1.55'\n            };\n            EASING_FN = {\n                'elastic': function elastic(pos) {\n                    return -1 * Math.pow(4, -8 * pos) * Math.sin((pos * 6 - 1) * (2 * Math.PI) / 2) + 1;\n                },\n                'swing-from-to': function swingFromTo(pos, opts) {\n                    var s = opts.s || 1.70158;\n                    return (pos /= 0.5) < 1 ? 0.5 * (pos * pos * (((s *= 1.525) + 1) * pos - s)) : 0.5 * ((pos -= 2) * pos * (((s *= 1.525) + 1) * pos + s) + 2);\n                },\n                'swing-from': function swingFrom(pos, opts) {\n                    var s = opts.s || 1.70158;\n                    return pos * pos * ((s + 1) * pos - s);\n                },\n                'swing-to': function swingTo(pos, opts) {\n                    var s = opts.s || 1.70158;\n                    return (pos -= 1) * pos * ((s + 1) * pos + s) + 1;\n                },\n                'bounce': function bounce(pos) {\n                    if (pos < 1 / 2.75) {\n                        return 7.5625 * pos * pos;\n                    } else if (pos < 2 / 2.75) {\n                        return 7.5625 * (pos -= 1.5 / 2.75) * pos + 0.75;\n                    } else if (pos < 2.5 / 2.75) {\n                        return 7.5625 * (pos -= 2.25 / 2.75) * pos + 0.9375;\n                    }\n                    return 7.5625 * (pos -= 2.625 / 2.75) * pos + 0.984375;\n                },\n                'bounce-past': function bouncePast(pos) {\n                    if (pos < 1 / 2.75) {\n                        return 7.5625 * pos * pos;\n                    } else if (pos < 2 / 2.75) {\n                        return 2 - (7.5625 * (pos -= 1.5 / 2.75) * pos + 0.75);\n                    } else if (pos < 2.5 / 2.75) {\n                        return 2 - (7.5625 * (pos -= 2.25 / 2.75) * pos + 0.9375);\n                    }\n                    return 2 - (7.5625 * (pos -= 2.625 / 2.75) * pos + 0.984375);\n                },\n                'ease-out-bounce': function easeOutBounce(pos) {\n                    if (pos < 1 / 2.75) {\n                        return 7.5625 * pos * pos;\n                    } else if (pos < 2 / 2.75) {\n                        return 7.5625 * (pos -= 1.5 / 2.75) * pos + 0.75;\n                    } else if (pos < 2.5 / 2.75) {\n                        return 7.5625 * (pos -= 2.25 / 2.75) * pos + 0.9375;\n                    }\n                    return 7.5625 * (pos -= 2.625 / 2.75) * pos + 0.984375;\n                },\n                'ease-from-to': function easeFromTo(pos) {\n                    if ((pos /= 0.5) < 1) return 0.5 * Math.pow(pos, 4);\n                    return -0.5 * ((pos -= 2) * Math.pow(pos, 3) - 2);\n                },\n                'ease-from': function easeFrom(pos, opts) {\n                    return Math.pow(pos, opts.s || 4);\n                },\n                'ease-to': function easeTo(pos, opts) {\n                    return Math.pow(pos, opts.s || 0.25);\n                },\n                /*\n                 * scripty2, Thomas Fuchs (MIT Licence)\n                 * https://raw.github.com/madrobby/scripty2/master/src/effects/transitions/transitions.js\n                 */\n                'spring': function spring(pos, opts) {\n                    var damping = opts.damping || 4.5;\n                    var elasticity = opts.elasticity || 6;\n                    return 1 - Math.cos(pos * damping * Math.PI) * Math.exp(-pos * elasticity);\n                },\n                'sinusoidal': function sinusoidal(pos) {\n                    return -Math.cos(pos * Math.PI) / 2 + 0.5;\n                }\n            };\n            AnimationRegistry = {};\n        }\n    };\n});\nSystem.register('ionic/animations/builtins', ['./animation'], function (_export) {\n    'use strict';\n\n    var Animation, SlideIn, SlideOut, FadeIn, FadeOut;\n\n    var _get = function get(_x, _x2, _x3) { var _again = true; _function: while (_again) { var object = _x, property = _x2, receiver = _x3; _again = false; if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { _x = parent; _x2 = property; _x3 = receiver; _again = true; desc = parent = undefined; continue _function; } } else if ('value' in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } } };\n\n    function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\n    function _inherits(subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\n    return {\n        setters: [function (_animation) {\n            Animation = _animation.Animation;\n        }],\n        execute: function () {\n            SlideIn = (function (_Animation) {\n                _inherits(SlideIn, _Animation);\n\n                function SlideIn(element) {\n                    _classCallCheck(this, SlideIn);\n\n                    _get(Object.getPrototypeOf(SlideIn.prototype), 'constructor', this).call(this, element);\n                    this.easing('cubic-bezier(0.1,0.7,0.1,1)').duration(400).fromTo('translateY', '100%', '0%');\n                }\n\n                return SlideIn;\n            })(Animation);\n\n            Animation.register('slide-in', SlideIn);\n\n            SlideOut = (function (_Animation2) {\n                _inherits(SlideOut, _Animation2);\n\n                function SlideOut(element) {\n                    _classCallCheck(this, SlideOut);\n\n                    _get(Object.getPrototypeOf(SlideOut.prototype), 'constructor', this).call(this, element);\n                    this.easing('ease-out').duration(250).fromTo('translateY', '0%', '100%');\n                }\n\n                return SlideOut;\n            })(Animation);\n\n            Animation.register('slide-out', SlideOut);\n\n            FadeIn = (function (_Animation3) {\n                _inherits(FadeIn, _Animation3);\n\n                function FadeIn(element) {\n                    _classCallCheck(this, FadeIn);\n\n                    _get(Object.getPrototypeOf(FadeIn.prototype), 'constructor', this).call(this, element);\n                    this.easing('ease-in').duration(400).fadeIn();\n                }\n\n                return FadeIn;\n            })(Animation);\n\n            Animation.register('fade-in', FadeIn);\n\n            FadeOut = (function (_Animation4) {\n                _inherits(FadeOut, _Animation4);\n\n                function FadeOut(element) {\n                    _classCallCheck(this, FadeOut);\n\n                    _get(Object.getPrototypeOf(FadeOut.prototype), 'constructor', this).call(this, element);\n                    this.easing('ease-out').duration(250).fadeOut();\n                }\n\n                return FadeOut;\n            })(Animation);\n\n            Animation.register('fade-out', FadeOut);\n        }\n    };\n});\nSystem.register('ionic/animations/ios-transition', ['./animation'], function (_export) {\n    'use strict';\n\n    var Animation, DURATION, EASING, OPACITY, TRANSLATEX, OFF_RIGHT, OFF_LEFT, CENTER, OFF_OPACITY, SHOW_BACK_BTN_CSS, IOSTransition;\n\n    var _get = function get(_x, _x2, _x3) { var _again = true; _function: while (_again) { var object = _x, property = _x2, receiver = _x3; _again = false; if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { _x = parent; _x2 = property; _x3 = receiver; _again = true; desc = parent = undefined; continue _function; } } else if ('value' in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } } };\n\n    function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\n    function _inherits(subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\n    return {\n        setters: [function (_animation) {\n            Animation = _animation.Animation;\n        }],\n        execute: function () {\n            DURATION = 550;\n            EASING = 'cubic-bezier(0.36,0.66,0.04,1)';\n            OPACITY = 'opacity';\n            TRANSLATEX = 'translateX';\n            OFF_RIGHT = '99.5%';\n            OFF_LEFT = '-33%';\n            CENTER = '0%';\n            OFF_OPACITY = 0.8;\n            SHOW_BACK_BTN_CSS = 'show-back-button';\n\n            IOSTransition = (function (_Animation) {\n                _inherits(IOSTransition, _Animation);\n\n                function IOSTransition(enteringView, leavingView, opts) {\n                    _classCallCheck(this, IOSTransition);\n\n                    _get(Object.getPrototypeOf(IOSTransition.prototype), 'constructor', this).call(this, null, opts);\n                    this.duration(DURATION);\n                    this.easing(EASING);\n                    // what direction is the transition going\n                    var backDirection = opts.direction === 'back';\n                    // do they have navbars?\n                    var enteringHasNavbar = enteringView.hasNavbar();\n                    var leavingHasNavbar = leavingView && leavingView.hasNavbar();\n                    var enteringPage = new Animation(enteringView.pageRef());\n                    enteringPage.before.addClass('show-page');\n                    this.add(enteringPage);\n                    // entering content\n                    var enteringContent = new Animation(enteringView.contentRef());\n                    this.add(enteringContent);\n                    if (backDirection) {\n                        // entering content, back direction\n                        enteringContent.fromTo(TRANSLATEX, OFF_LEFT, CENTER).fromTo(OPACITY, OFF_OPACITY, 1);\n                    } else {\n                        // entering content, forward direction\n                        enteringContent.fromTo(TRANSLATEX, OFF_RIGHT, CENTER).fromTo(OPACITY, 1, 1);\n                    }\n                    if (enteringHasNavbar) {\n                        // entering page has a navbar\n                        var enteringNavBar = new Animation(enteringView.navbarRef());\n                        this.add(enteringNavBar);\n                        var enteringTitle = new Animation(enteringView.titleRef());\n                        var enteringNavbarItems = new Animation(enteringView.navbarItemRefs());\n                        var enteringNavbarBg = new Animation(enteringView.navbarBgRef());\n                        var enteringBackButton = new Animation(enteringView.backBtnRef());\n                        enteringNavBar.add(enteringTitle).add(enteringNavbarItems).add(enteringNavbarBg).add(enteringBackButton);\n                        enteringTitle.fadeIn();\n                        enteringNavbarItems.fadeIn();\n                        // set properties depending on direction\n                        if (backDirection) {\n                            // entering navbar, back direction\n                            enteringTitle.fromTo(TRANSLATEX, OFF_LEFT, CENTER);\n                            if (enteringView.enableBack()) {\n                                // back direction, entering page has a back button\n                                enteringBackButton.before.addClass(SHOW_BACK_BTN_CSS).fadeIn();\n                            }\n                        } else {\n                            // entering navbar, forward direction\n                            enteringTitle.fromTo(TRANSLATEX, OFF_RIGHT, CENTER);\n                            if (leavingHasNavbar) {\n                                // entering navbar, forward direction, and there's a leaving navbar\n                                // should just fade in, no sliding\n                                enteringNavbarBg.fromTo(TRANSLATEX, CENTER, CENTER).fadeIn();\n                            } else {\n                                // entering navbar, forward direction, and there's no leaving navbar\n                                // should just slide in, no fading in\n                                enteringNavbarBg.fromTo(TRANSLATEX, OFF_RIGHT, CENTER).fromTo(OPACITY, 1, 1);\n                            }\n                            if (enteringView.enableBack()) {\n                                // forward direction, entering page has a back button\n                                enteringBackButton.before.addClass(SHOW_BACK_BTN_CSS).fadeIn();\n                                var enteringBackBtnText = new Animation(enteringView.backBtnTextRef());\n                                enteringBackBtnText.fromTo(TRANSLATEX, '100px', '0px');\n                                enteringNavBar.add(enteringBackBtnText);\n                            } else {\n                                enteringBackButton.before.removeClass(SHOW_BACK_BTN_CSS);\n                            }\n                        }\n                    }\n                    // setup leaving view\n                    if (leavingView) {\n                        // leaving content\n                        var leavingContent = new Animation(leavingView.contentRef());\n                        this.add(leavingContent);\n                        if (backDirection) {\n                            // leaving content, back direction\n                            leavingContent.fromTo(TRANSLATEX, CENTER, '100%').fromTo(OPACITY, 1, 1);\n                        } else {\n                            // leaving content, forward direction\n                            leavingContent.fromTo(TRANSLATEX, CENTER, OFF_LEFT).fromTo(OPACITY, 1, OFF_OPACITY);\n                        }\n                        if (leavingHasNavbar) {\n                            // leaving page has a navbar\n                            var leavingNavBar = new Animation(leavingView.navbarRef());\n                            var leavingBackButton = new Animation(leavingView.backBtnRef());\n                            var leavingTitle = new Animation(leavingView.titleRef());\n                            var leavingNavbarItems = new Animation(leavingView.navbarItemRefs());\n                            var leavingNavbarBg = new Animation(leavingView.navbarBgRef());\n                            leavingNavBar.add(leavingBackButton).add(leavingTitle).add(leavingNavbarItems).add(leavingNavbarBg);\n                            this.add(leavingNavBar);\n                            // fade out leaving navbar items\n                            leavingBackButton.fadeOut();\n                            leavingTitle.fadeOut();\n                            leavingNavbarItems.fadeOut();\n                            if (backDirection) {\n                                // leaving navbar, back direction\n                                leavingTitle.fromTo(TRANSLATEX, CENTER, '100%');\n                                if (enteringHasNavbar) {\n                                    // leaving navbar, back direction, and there's an entering navbar\n                                    // should just fade out, no sliding\n                                    leavingNavbarBg.fromTo(TRANSLATEX, CENTER, CENTER).fadeOut();\n                                } else {\n                                    // leaving navbar, back direction, and there's no entering navbar\n                                    // should just slide out, no fading out\n                                    leavingNavbarBg.fromTo(TRANSLATEX, CENTER, '100%').fromTo(OPACITY, 1, 1);\n                                }\n                                var leavingBackBtnText = new Animation(leavingView.backBtnTextRef());\n                                leavingBackBtnText.fromTo(TRANSLATEX, CENTER, 300 + 'px');\n                                leavingNavBar.add(leavingBackBtnText);\n                            } else {\n                                // leaving navbar, forward direction\n                                leavingTitle.fromTo(TRANSLATEX, CENTER, OFF_LEFT);\n                            }\n                        }\n                    }\n                }\n\n                return IOSTransition;\n            })(Animation);\n\n            Animation.register('ios-transition', IOSTransition);\n        }\n    };\n});\nSystem.register('ionic/animations/md-transition', ['./animation'], function (_export) {\n    'use strict';\n\n    var Animation, TRANSLATEY, OFF_BOTTOM, CENTER, SHOW_BACK_BTN_CSS, MDTransition;\n\n    var _get = function get(_x, _x2, _x3) { var _again = true; _function: while (_again) { var object = _x, property = _x2, receiver = _x3; _again = false; if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { _x = parent; _x2 = property; _x3 = receiver; _again = true; desc = parent = undefined; continue _function; } } else if ('value' in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } } };\n\n    function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\n    function _inherits(subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\n    return {\n        setters: [function (_animation) {\n            Animation = _animation.Animation;\n        }],\n        execute: function () {\n            TRANSLATEY = 'translateY';\n            OFF_BOTTOM = '40px';\n            CENTER = '0px';\n            SHOW_BACK_BTN_CSS = 'show-back-button';\n\n            MDTransition = (function (_Animation) {\n                _inherits(MDTransition, _Animation);\n\n                function MDTransition(enteringView, leavingView, opts) {\n                    _classCallCheck(this, MDTransition);\n\n                    _get(Object.getPrototypeOf(MDTransition.prototype), 'constructor', this).call(this, null, opts);\n                    // what direction is the transition going\n                    var backDirection = opts.direction === 'back';\n                    // do they have navbars?\n                    var enteringHasNavbar = enteringView.hasNavbar();\n                    var leavingHasNavbar = leavingView && leavingView.hasNavbar();\n                    // entering content item moves in bottom to center\n                    var enteringPage = new Animation(enteringView.pageRef());\n                    enteringPage.before.addClass('show-page');\n                    this.add(enteringPage);\n                    if (backDirection) {\n                        this.duration(200).easing('cubic-bezier(0.47,0,0.745,0.715)');\n                        enteringPage.fromTo(TRANSLATEY, CENTER, CENTER);\n                    } else {\n                        this.duration(280).easing('cubic-bezier(0.36,0.66,0.04,1)');\n                        enteringPage.fromTo(TRANSLATEY, OFF_BOTTOM, CENTER).fadeIn();\n                    }\n                    if (enteringHasNavbar) {\n                        var enteringNavBar = new Animation(enteringView.navbarRef());\n                        this.add(enteringNavBar);\n                        var enteringBackButton = new Animation(enteringView.backBtnRef());\n                        this.add(enteringBackButton);\n                        if (enteringView.enableBack()) {\n                            enteringBackButton.before.addClass(SHOW_BACK_BTN_CSS);\n                        } else {\n                            enteringBackButton.before.removeClass(SHOW_BACK_BTN_CSS);\n                        }\n                    }\n                    // setup leaving view\n                    if (leavingView && backDirection) {\n                        // leaving content\n                        this.duration(200).easing('cubic-bezier(0.47,0,0.745,0.715)');\n                        var leavingPage = new Animation(leavingView.pageRef());\n                        this.add(leavingPage.fromTo(TRANSLATEY, CENTER, OFF_BOTTOM).fadeOut());\n                    }\n                }\n\n                return MDTransition;\n            })(Animation);\n\n            Animation.register('md-transition', MDTransition);\n        }\n    };\n});\nSystem.register('ionic/animations/scroll-to', ['../util/dom'], function (_export) {\n    'use strict';\n\n    var raf, ScrollTo;\n\n    var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();\n\n    function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\n    // decelerating to zero velocity\n    function easeOutCubic(t) {\n        return --t * t * t + 1;\n    }\n    return {\n        setters: [function (_utilDom) {\n            raf = _utilDom.raf;\n        }],\n        execute: function () {\n            ScrollTo = (function () {\n                function ScrollTo(ele, x, y, duration) {\n                    _classCallCheck(this, ScrollTo);\n\n                    if (typeof ele === 'string') {\n                        // string query selector\n                        ele = document.querySelector(ele);\n                    }\n                    if (ele) {\n                        if (ele.nativeElement) {\n                            // angular ElementRef\n                            ele = ele.nativeElement;\n                        }\n                        if (ele.nodeType === 1) {\n                            this._el = ele;\n                        }\n                    }\n                }\n\n                _createClass(ScrollTo, [{\n                    key: 'start',\n                    value: function start(x, y, duration, tolerance) {\n                        // scroll animation loop w/ easing\n                        // credit https://gist.github.com/dezinezync/5487119\n                        var self = this;\n                        if (!self._el) {\n                            // invalid element\n                            return Promise.resolve();\n                        }\n                        x = x || 0;\n                        y = y || 0;\n                        tolerance = tolerance || 0;\n                        var fromY = self._el.scrollTop;\n                        var fromX = self._el.scrollLeft;\n                        var xDistance = Math.abs(x - fromX);\n                        var yDistance = Math.abs(y - fromY);\n                        if (yDistance <= tolerance && xDistance <= tolerance) {\n                            // prevent scrolling if already close to there\n                            self._el = null;\n                            return Promise.resolve();\n                        }\n                        return new Promise(function (resolve, reject) {\n                            var start = undefined;\n                            // start scroll loop\n                            self.isPlaying = true;\n                            // chill out for a frame first\n                            raf(function () {\n                                start = Date.now();\n                                raf(step);\n                            });\n                            // scroll loop\n                            function step() {\n                                if (!self._el) {\n                                    return resolve();\n                                }\n                                var time = Math.min(1, (Date.now() - start) / duration);\n                                // where .5 would be 50% of time on a linear scale easedT gives a\n                                // fraction based on the easing method\n                                var easedT = easeOutCubic(time);\n                                if (fromY != y) {\n                                    self._el.scrollTop = parseInt(easedT * (y - fromY) + fromY, 10);\n                                }\n                                if (fromX != x) {\n                                    self._el.scrollLeft = parseInt(easedT * (x - fromX) + fromX, 10);\n                                }\n                                if (time < 1 && self.isPlaying) {\n                                    raf(step);\n                                } else if (!self.isPlaying) {\n                                    // stopped\n                                    self._el = null;\n                                    reject();\n                                } else {\n                                    // done\n                                    self._el = null;\n                                    resolve();\n                                }\n                            }\n                        });\n                    }\n                }, {\n                    key: 'stop',\n                    value: function stop() {\n                        this.isPlaying = false;\n                    }\n                }, {\n                    key: 'dispose',\n                    value: function dispose() {\n                        this.stop();\n                        this._el = null;\n                    }\n                }]);\n\n                return ScrollTo;\n            })();\n\n            _export('ScrollTo', ScrollTo);\n        }\n    };\n});\nSystem.register('ionic/components/ion', ['ionic/util/dom'], function (_export) {\n    /**\n     * Base class for all Ionic components. Exposes some common functionality\n     * that all Ionic components need, such as accessing underlying native elements and\n     * sending/receiving app-level events.\n     */\n    'use strict';\n\n    var dom, Ion;\n\n    var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();\n\n    function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\n    return {\n        setters: [function (_ionicUtilDom) {\n            dom = _ionicUtilDom;\n        }],\n        execute: function () {\n            Ion = (function () {\n                function Ion(elementRef, config) {\n                    _classCallCheck(this, Ion);\n\n                    this.elementRef = elementRef;\n                    this.config = config;\n                }\n\n                _createClass(Ion, [{\n                    key: 'onInit',\n                    value: function onInit() {\n                        var cls = this.constructor;\n                        if (cls.defaultInputs && this.config) {\n                            for (var prop in cls.defaultInputs) {\n                                // Priority:\n                                // ---------\n                                // 1) Value set from within constructor\n                                // 2) Value set from the host element's attribute\n                                // 3) Value set by the users global config\n                                // 4) Value set by the default mode/platform config\n                                // 5) Value set from the component's default\n                                if (this[prop]) {\n                                    // this property has already been set on the instance\n                                    // could be from the user setting the element's attribute\n                                    // or from the user setting it within the constructor\n                                    continue;\n                                }\n                                // get the property values from a global user/platform config\n                                var configVal = this.config.get(prop);\n                                if (configVal) {\n                                    this[prop] = configVal;\n                                    continue;\n                                }\n                                // wasn't set yet, so go with property's default value\n                                this[prop] = cls.defaultInputs[prop];\n                            }\n                        }\n                    }\n                }, {\n                    key: 'getElementRef',\n                    value: function getElementRef() {\n                        return this.elementRef;\n                    }\n                }, {\n                    key: 'getNativeElement',\n                    value: function getNativeElement() {\n                        return this.elementRef.nativeElement;\n                    }\n                }, {\n                    key: 'getDimensions',\n                    value: function getDimensions() {\n                        return dom.getDimensions(this);\n                    }\n                }, {\n                    key: 'width',\n                    value: function width() {\n                        return dom.getDimensions(this).width;\n                    }\n                }, {\n                    key: 'height',\n                    value: function height() {\n                        return dom.getDimensions(this).height;\n                    }\n                }]);\n\n                return Ion;\n            })();\n\n            _export('Ion', Ion);\n        }\n    };\n});\nSystem.register('ionic/config/bootstrap', ['angular2/angular2', 'angular2/router', 'angular2/http', '../components/app/app', './config', '../platform/platform', '../components/overlay/overlay-controller', '../util/form', '../util/keyboard', '../components/action-sheet/action-sheet', '../components/modal/modal', '../components/popup/popup', '../util/events', '../components/nav/nav-registry', '../translation/translate', '../util/click-block', '../util/feature-detect', '../components/tap-click/tap-click', '../util/dom'], function (_export) {\n    'use strict';\n\n    var provide, ROUTER_PROVIDERS, LocationStrategy, HashLocationStrategy, HTTP_PROVIDERS, IonicApp, Config, Platform, OverlayController, Form, Keyboard, ActionSheet, Modal, Popup, Events, NavRegistry, Translate, ClickBlock, FeatureDetect, TapClick, ready, closest;\n\n    _export('ionicProviders', ionicProviders);\n\n    function ionicProviders() {\n        var args = arguments.length <= 0 || arguments[0] === undefined ? {} : arguments[0];\n\n        var platform = new Platform();\n        var navRegistry = new NavRegistry(args.pages);\n        var config = args.config;\n        if (!(config instanceof Config)) {\n            config = new Config(config);\n        }\n        platform.url(window.location.href);\n        platform.userAgent(window.navigator.userAgent);\n        platform.navigatorPlatform(window.navigator.platform);\n        platform.load();\n        config.setPlatform(platform);\n        var clickBlock = new ClickBlock(config.get('clickBlock'));\n        var events = new Events();\n        var featureDetect = new FeatureDetect();\n        setupDom(window, document, config, platform, clickBlock, featureDetect);\n        bindEvents(window, document, platform, events);\n        // prepare the ready promise to fire....when ready\n        platform.prepareReady(config);\n        return [IonicApp, provide(ClickBlock, { useValue: clickBlock }), provide(Config, { useValue: config }), provide(Platform, { useValue: platform }), provide(FeatureDetect, { useValue: featureDetect }), provide(Events, { useValue: events }), provide(NavRegistry, { useValue: navRegistry }), TapClick, Form, Keyboard, OverlayController, ActionSheet, Modal, Popup, Translate, ROUTER_PROVIDERS, provide(LocationStrategy, { useClass: HashLocationStrategy }), HTTP_PROVIDERS];\n    }\n\n    function setupDom(window, document, config, platform, clickBlock, featureDetect) {\n        var bodyEle = document.body;\n        if (!bodyEle) {\n            return ready(function () {\n                applyBodyCss(document, config, platform);\n            });\n        }\n        var versions = platform.versions();\n        platform.platforms().forEach(function (platformName) {\n            // platform-ios\n            var platformClass = 'platform-' + platformName;\n            bodyEle.classList.add(platformClass);\n            var platformVersion = versions[platformName];\n            if (platformVersion) {\n                // platform-ios9\n                platformClass += platformVersion.major;\n                bodyEle.classList.add(platformClass);\n                // platform-ios9_3\n                bodyEle.classList.add(platformClass + '_' + platformVersion.minor);\n            }\n        });\n        // set the mode class name\n        // ios/md\n        bodyEle.classList.add(config.get('mode'));\n        // touch devices should not use :hover CSS pseudo\n        // enable :hover CSS when the \"hoverCSS\" setting is not false\n        if (config.get('hoverCSS') !== false) {\n            bodyEle.classList.add('enable-hover');\n        }\n        if (config.get('clickBlock')) {\n            clickBlock.enable();\n        }\n        // run feature detection tests\n        featureDetect.run(window, document);\n    }\n    /**\n     * Bind some global events and publish on the 'app' channel\n     */\n    function bindEvents(window, document, platform, events) {\n        window.addEventListener('online', function (ev) {\n            events.publish('app:online', ev);\n        }, false);\n        window.addEventListener('offline', function (ev) {\n            events.publish('app:offline', ev);\n        }, false);\n        window.addEventListener('orientationchange', function (ev) {\n            events.publish('app:rotated', ev);\n        });\n        // When that status taps, we respond\n        window.addEventListener('statusTap', function (ev) {\n            // TODO: Make this more better\n            var el = document.elementFromPoint(platform.width() / 2, platform.height() / 2);\n            if (!el) {\n                return;\n            }\n            var content = closest(el, 'scroll-content');\n            if (content) {\n                var scrollTo = new ScrollTo(content);\n                scrollTo.start(0, 0, 300, 0);\n            }\n        });\n        // start listening for resizes XXms after the app starts\n        setTimeout(function () {\n            window.addEventListener('resize', function () {\n                platform.windowResize();\n            });\n        }, 2000);\n    }\n    return {\n        setters: [function (_angular2Angular2) {\n            provide = _angular2Angular2.provide;\n        }, function (_angular2Router) {\n            ROUTER_PROVIDERS = _angular2Router.ROUTER_PROVIDERS;\n            LocationStrategy = _angular2Router.LocationStrategy;\n            HashLocationStrategy = _angular2Router.HashLocationStrategy;\n        }, function (_angular2Http) {\n            HTTP_PROVIDERS = _angular2Http.HTTP_PROVIDERS;\n        }, function (_componentsAppApp) {\n            IonicApp = _componentsAppApp.IonicApp;\n        }, function (_config) {\n            Config = _config.Config;\n        }, function (_platformPlatform) {\n            Platform = _platformPlatform.Platform;\n        }, function (_componentsOverlayOverlayController) {\n            OverlayController = _componentsOverlayOverlayController.OverlayController;\n        }, function (_utilForm) {\n            Form = _utilForm.Form;\n        }, function (_utilKeyboard) {\n            Keyboard = _utilKeyboard.Keyboard;\n        }, function (_componentsActionSheetActionSheet) {\n            ActionSheet = _componentsActionSheetActionSheet.ActionSheet;\n        }, function (_componentsModalModal) {\n            Modal = _componentsModalModal.Modal;\n        }, function (_componentsPopupPopup) {\n            Popup = _componentsPopupPopup.Popup;\n        }, function (_utilEvents) {\n            Events = _utilEvents.Events;\n        }, function (_componentsNavNavRegistry) {\n            NavRegistry = _componentsNavNavRegistry.NavRegistry;\n        }, function (_translationTranslate) {\n            Translate = _translationTranslate.Translate;\n        }, function (_utilClickBlock) {\n            ClickBlock = _utilClickBlock.ClickBlock;\n        }, function (_utilFeatureDetect) {\n            FeatureDetect = _utilFeatureDetect.FeatureDetect;\n        }, function (_componentsTapClickTapClick) {\n            TapClick = _componentsTapClickTapClick.TapClick;\n        }, function (_utilDom) {\n            ready = _utilDom.ready;\n            closest = _utilDom.closest;\n        }],\n        execute: function () {}\n    };\n});\nSystem.register('ionic/config/config', ['../platform/platform', '../util/util'], function (_export) {\n    /**\n    * @ngdoc service\n    * @name Config\n    * @module ionic\n    * @description\n    * Config allows you to set the modes of your components\n    */\n\n    /**\n     * Config lets you change multiple or a single value in an apps mode configuration. Things such as tab placement, icon changes, and view animations can be set here.\n     *\n     * ```ts\n     * @App({\n     *   template: `<ion-nav [root]=\"root\"></ion-nav>`\n     *   config: {\n     *     backButtonText: 'Go Back',\n     *     iconMode: 'ios',\n     *     modalEnter: 'modal-slide-in',\n     *     modalLeave: 'modal-slide-out',\n     *     tabbarPlacement: 'bottom',\n     *     pageTransition: 'ios',\n     *   }\n     * })\n     * ```\n     *\n     * Config can be overwritting at multiple levels, allowing deeper configuration. Taking the example from earlier, we can override any setting we want based on a platform.\n     * ```ts\n     * @App({\n     *   template: `<ion-nav [root]=\"root\"></ion-nav>`\n     *   config: {\n     *     tabbarPlacement: 'bottom',\n     *     platforms: {\n     *      ios: {\n     *        tabbarPlacement: 'top',\n     *      }\n     *     }\n     *   }\n     * })\n     * ```\n     *\n     * We could also configure these values at a component level. Take `tabbarPlacement`, we can configure this as a property on our `ion-tabs`.\n     *\n     * ```html\n     * <ion-tabs tabbar-placement=\"top\">\n     *    <ion-tab tab-title=\"Dash\" tab-icon=\"pulse\" [root]=\"tabRoot\"></ion-tab>\n     *  </ion-tabs>\n     * ```\n     *\n     * The property will override anything else set in the apps.\n     *\n     * The last way we could configure is through URL query strings. This is useful for testing while in the browser.\n     * Simply add `?ionic<PROPERTYNAME>=<value>` to the url.\n     *\n     * ```bash\n     * http://localhost:8100/?ionicTabbarPlacement=bottom\n     * ```\n     *\n     * A config value can come from anywhere and be anything, but there are a default set of values.\n     *\n     * ``` javascript\n     * // iOS\n     * activator: 'highlight',\n     * actionSheetEnter: 'action-sheet-slide-in',\n     * actionSheetLeave: 'action-sheet-slide-out',\n     * actionSheetCancelIcon: '',\n     * actionSheetDestructiveIcon: '',\n     * backButtonText: 'Back',\n     * backButtonIcon: 'ion-ios-arrow-back',\n     * iconMode: 'ios',\n     * menuType: 'reveal',\n     * modalEnter: 'modal-slide-in',\n     * modalLeave: 'modal-slide-out',\n     * pageTransition: 'ios-transition',\n     * pageTransitionDelay: 16,\n     * popupEnter: 'popup-pop-in',\n     * popupLeave: 'popup-pop-out',\n     * tabbarPlacement: 'bottom',\n    \n     * // MD\n     * activator: 'ripple',\n     * actionSheetEnter: 'action-sheet-md-slide-in',\n     * actionSheetLeave: 'action-sheet-md-slide-out',\n     * actionSheetCancelIcon: 'ion-md-close',\n     * actionSheetDestructiveIcon: 'ion-md-trash',\n     * backButtonText: '',\n     * backButtonIcon: 'ion-md-arrow-back',\n     * iconMode: 'md',\n     * menuType: 'overlay',\n     * modalEnter: 'modal-md-slide-in',\n     * modalLeave: 'modal-md-slide-out',\n     * pageTransition: 'md-transition',\n     * pageTransitionDelay: 120,\n     * popupEnter: 'popup-md-pop-in',\n     * popupLeave: 'popup-md-pop-out',\n     * tabbarHighlight: true,\n     * tabbarPlacement: 'top',\n     * tabSubPages: true,\n     * ```\n     *\n     *\n    **/\n    'use strict';\n\n    var Platform, isObject, isDefined, isFunction, isArray, Config, modeConfigs;\n\n    var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();\n\n    function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\n    return {\n        setters: [function (_platformPlatform) {\n            Platform = _platformPlatform.Platform;\n        }, function (_utilUtil) {\n            isObject = _utilUtil.isObject;\n            isDefined = _utilUtil.isDefined;\n            isFunction = _utilUtil.isFunction;\n            isArray = _utilUtil.isArray;\n        }],\n        execute: function () {\n            Config = (function () {\n                function Config(config) {\n                    _classCallCheck(this, Config);\n\n                    this._s = config && isObject(config) && !isArray(config) ? config : {};\n                    this._c = {}; // cached values\n                }\n\n                /**\n                 * For setting and getting multiple config values\n                 */\n                /**\n                 * @private\n                 * @name settings()\n                 * @description\n                 */\n\n                _createClass(Config, [{\n                    key: 'settings',\n                    value: function settings() {\n                        var args = arguments;\n                        switch (args.length) {\n                            case 0:\n                                return this._s;\n                            case 1:\n                                // settings({...})\n                                this._s = args[0];\n                                this._c = {}; // clear cache\n                                break;\n                            case 2:\n                                // settings('ios', {...})\n                                this._s.platforms = this._s.platforms || {};\n                                this._s.platforms[args[0]] = args[1];\n                                this._c = {}; // clear cache\n                                break;\n                        }\n                        return this;\n                    }\n\n                    /**\n                    * For setting a single config values\n                    */\n                    /**\n                     * @private\n                     * @name set()\n                     * @description\n                     */\n                }, {\n                    key: 'set',\n                    value: function set() {\n                        var args = arguments;\n                        var arg0 = args[0];\n                        var arg1 = args[1];\n                        switch (args.length) {\n                            case 2:\n                                // set('key', 'value') = set key/value pair\n                                // arg1 = value\n                                this._s[arg0] = arg1;\n                                delete this._c[arg0]; // clear cache\n                                break;\n                            case 3:\n                                // setting('ios', 'key', 'value') = set key/value pair for platform\n                                // arg0 = platform\n                                // arg1 = key\n                                // arg2 = value\n                                this._s.platforms = this._s.platforms || {};\n                                this._s.platforms[arg0] = this._s.platforms[arg0] || {};\n                                this._s.platforms[arg0][arg1] = args[2];\n                                delete this._c[arg1]; // clear cache\n                                break;\n                        }\n                        return this;\n                    }\n\n                    /**\n                     * For getting a single config values\n                     */\n                    /**\n                     * @private\n                     * @name get()\n                     * @description\n                     */\n                }, {\n                    key: 'get',\n                    value: function get(key) {\n                        if (!isDefined(this._c[key])) {\n                            // if the value was already set this will all be skipped\n                            // if there was no user config then it'll check each of\n                            // the user config's platforms, which already contains\n                            // settings from default platform configs\n                            var userPlatformValue = undefined;\n                            var userDefaultValue = this._s[key];\n                            var userPlatformModeValue = undefined;\n                            var userDefaultModeValue = undefined;\n                            var platformValue = undefined;\n                            var platformModeValue = undefined;\n                            var configObj = null;\n                            if (this._platform) {\n                                var queryStringValue = this._platform.query('ionic' + key.toLowerCase());\n                                if (isDefined(queryStringValue)) {\n                                    return this._c[key] = queryStringValue === 'true' ? true : queryStringValue === 'false' ? false : queryStringValue;\n                                }\n                                // check the platform settings object for this value\n                                // loop though each of the active platforms\n                                // array of active platforms, which also knows the hierarchy,\n                                // with the last one the most important\n                                var activePlatformKeys = this._platform.platforms();\n                                // loop through all of the active platforms we're on\n                                for (var i = 0, l = activePlatformKeys.length; i < l; i++) {\n                                    // get user defined platform values\n                                    if (this._s.platforms) {\n                                        configObj = this._s.platforms[activePlatformKeys[i]];\n                                        if (configObj) {\n                                            if (isDefined(configObj[key])) {\n                                                userPlatformValue = configObj[key];\n                                            }\n                                            configObj = Config.getModeConfig(configObj.mode);\n                                            if (configObj && isDefined(configObj[key])) {\n                                                userPlatformModeValue = configObj[key];\n                                            }\n                                        }\n                                    }\n                                    // get default platform's setting\n                                    configObj = Platform.get(activePlatformKeys[i]);\n                                    if (configObj && configObj.settings) {\n                                        if (isDefined(configObj.settings[key])) {\n                                            // found a setting for this platform\n                                            platformValue = configObj.settings[key];\n                                        }\n                                        configObj = Config.getModeConfig(configObj.settings.mode);\n                                        if (configObj && isDefined(configObj[key])) {\n                                            // found setting for this platform's mode\n                                            platformModeValue = configObj[key];\n                                        }\n                                    }\n                                }\n                            }\n                            configObj = Config.getModeConfig(this._s.mode);\n                            if (configObj && isDefined(configObj[key])) {\n                                userDefaultModeValue = configObj[key];\n                            }\n                            // cache the value\n                            this._c[key] = isDefined(userPlatformValue) ? userPlatformValue : isDefined(userDefaultValue) ? userDefaultValue : isDefined(userPlatformModeValue) ? userPlatformModeValue : isDefined(userDefaultModeValue) ? userDefaultModeValue : isDefined(platformValue) ? platformValue : isDefined(platformModeValue) ? platformModeValue : null;\n                        }\n                        // return key's value\n                        // either it came directly from the user config\n                        // or it was from the users platform configs\n                        // or it was from the default platform configs\n                        // in that order\n                        if (isFunction(this._c[key])) {\n                            return this._c[key](this._platform);\n                        }\n                        return this._c[key];\n                    }\n\n                    /**\n                     * @private\n                     */\n                }, {\n                    key: 'setPlatform',\n                    value: function setPlatform(platform) {\n                        this._platform = platform;\n                    }\n                }], [{\n                    key: 'setModeConfig',\n                    value: function setModeConfig(mode, config) {\n                        modeConfigs[mode] = config;\n                    }\n                }, {\n                    key: 'getModeConfig',\n                    value: function getModeConfig(mode) {\n                        return modeConfigs[mode] || null;\n                    }\n                }]);\n\n                return Config;\n            })();\n\n            _export('Config', Config);\n\n            modeConfigs = {};\n        }\n    };\n});\nSystem.register('ionic/config/decorators', ['angular2/angular2', '../components/tap-click/tap-click', '../util/util', './bootstrap', './directives'], function (_export) {\n    /**\n     * _For more information on how pages are created, see the [NavController API\n     * reference](../../components/nav/NavController/#creating_pages)._\n     *\n     * The Page decorator indicates that the decorated class is an Ionic\n     * navigation component, meaning it can be navigated to using a NavController.\n     *\n     * Pages have all [IONIC_DIRECTIVES](../IONIC_DIRECTIVES/), which include\n     * all Ionic components and directives, as well as Angular's [CORE_DIRECTIVES](https://angular.io/docs/js/latest/api/core/CORE_DIRECTIVES-const.html)\n     * and [FORM_DIRECTIVES](https://angular.io/docs/js/latest/api/core/FORM_DIRECTIVES-const.html),\n     * already provided to them, so you only need to supply custom components and\n     * directives to your pages:\n     *\n     * ```ts\n     * @Page({\n     *   template: `\n     *     <ion-checkbox my-custom-dir>\n     *     </ion-checkbox>`\n     *   directives: [MyCustomDirective]\n     * })\n     * class MyPage {}\n     * ```\n     * Here [Checkbox](../../../components/checkbox/Checkbox/) will load because\n     * it is in IONIC_DIRECTIVES, so there is no need to add it to the `directives`\n     * array.\n     *\n     * For custom components that use Ionic components, you will need to include\n     * IONIC_DIRECTIVES in the `directives` array:\n     *\n     * ```ts\n     * import {IONIC_DIRECTIVES} from 'ionic/ionic';\n     * @Component({\n     *   selector: 'my-component'\n     *   template: `<div class=\"my-style\">\n     *   \t\t\t\t\t\t  <ion-checkbox></ion-checkbox>\n     *   \t\t\t\t\t\t</div>`,\n     *   directives: [IONIC_DIRECTIVES]\n     * })\n     * class MyCustomCheckbox {}\n     *```\n     * Alternatively, you could:\n     * ```ts\n     * import {Checkbox, Icon} from 'ionic/ionic'\n     * ```\n     * along with any other components and add them individually:\n     * ```\n     * @Component({\n     *   ...\n     *   directives: [Checkbox, Icon]\n     * })\n     * ```\n     * However, using IONIC_DIRECTIVES will always *Just Work* with no\n     * performance overhead, so there is really no reason to not always use it.\n     *\n     * Pages have their content automatically wrapped in `<ion-view>`, so although\n     * you may see these tags if you inspect your markup, you don't need to include\n     * them in your templates.\n     */\n    'use strict';\n\n    var Component, bootstrap, TapClick, pascalCaseToDashCase, ionicProviders, IONIC_DIRECTIVES;\n\n    /**\n     * @private\n     */\n\n    _export('Page', Page);\n\n    /**\n     * @private\n     */\n\n    _export('ConfigComponent', ConfigComponent);\n\n    _export('App', App);\n\n    /**\n    * @ngdoc service\n    * @name App\n    * @module ionic\n    * @param {object} [config] - the app's [../Config](Config) object\n    * @param {string} [template] - the template to use for the app root\n    * @param {string} [templateUrl] - a relative URL pointing to the template to use for the app root\n    * @description\n    * App is an Ionic decorator that bootstraps an application. It can be passed a number of arguments, that act as global config variables for the app.\n    */\n\n    function Page() {\n        var config = arguments.length <= 0 || arguments[0] === undefined ? {} : arguments[0];\n\n        return function (cls) {\n            config.selector = 'ion-page';\n            config.directives = config.directives ? config.directives.concat(IONIC_DIRECTIVES) : IONIC_DIRECTIVES;\n            config.host = config.host || {};\n            config.host['[hidden]'] = '_hidden';\n            config.host['[class.tab-subpage]'] = '_tabSubPage';\n            var annotations = Reflect.getMetadata('annotations', cls) || [];\n            annotations.push(new Component(config));\n            Reflect.defineMetadata('annotations', annotations, cls);\n            return cls;\n        };\n    }\n\n    function ConfigComponent(config) {\n        return function (cls) {\n            var annotations = Reflect.getMetadata('annotations', cls) || [];\n            annotations.push(new Component(appendConfig(cls, config)));\n            Reflect.defineMetadata('annotations', annotations, cls);\n            return cls;\n        };\n    }\n\n    function appendConfig(cls, config) {\n        config.host = config.host || {};\n        cls.defaultInputs = config.defaultInputs || {};\n        config.inputs = config.inputs || [];\n        for (var prop in cls.defaultInputs) {\n            // add the property to the component \"inputs\"\n            config.inputs.push(prop);\n            // set the component \"hostProperties\", so the instance's\n            // input value will be used to set the element's attribute\n            config.host['[attr.' + pascalCaseToDashCase(prop) + ']'] = prop;\n        }\n        cls.delegates = config.delegates;\n        return config;\n    }\n    function App() {\n        var args = arguments.length <= 0 || arguments[0] === undefined ? {} : arguments[0];\n\n        return function (cls) {\n            // get current annotations\n            var annotations = Reflect.getMetadata('annotations', cls) || [];\n            args.selector = 'ion-app';\n            // auto add Ionic directives\n            args.directives = args.directives ? args.directives.concat(IONIC_DIRECTIVES) : IONIC_DIRECTIVES;\n            // if no template was provided, default so it has a root <ion-nav>\n            if (!args.templateUrl && !args.template) {\n                args.template = '<ion-nav></ion-nav>';\n            }\n            // create @Component\n            annotations.push(new Component(args));\n            // redefine with added annotations\n            Reflect.defineMetadata('annotations', annotations, cls);\n            bootstrap(cls, ionicProviders(args)).then(function (appRef) {\n                appRef.injector.get(TapClick);\n            });\n            return cls;\n        };\n    }\n\n    return {\n        setters: [function (_angular2Angular2) {\n            Component = _angular2Angular2.Component;\n            bootstrap = _angular2Angular2.bootstrap;\n        }, function (_componentsTapClickTapClick) {\n            TapClick = _componentsTapClickTapClick.TapClick;\n        }, function (_utilUtil) {\n            pascalCaseToDashCase = _utilUtil.pascalCaseToDashCase;\n        }, function (_bootstrap) {\n            ionicProviders = _bootstrap.ionicProviders;\n        }, function (_directives) {\n            IONIC_DIRECTIVES = _directives.IONIC_DIRECTIVES;\n        }],\n        execute: function () {}\n    };\n});\nSystem.register('ionic/config/directives', ['angular2/angular2', '../components/overlay/overlay', '../components/menu/menu', '../components/menu/menu-toggle', '../components/menu/menu-close', '../components/button/button', '../components/blur/blur', '../components/content/content', '../components/scroll/scroll', '../components/scroll/pull-to-refresh', '../components/slides/slides', '../components/tabs/tabs', '../components/tabs/tab', '../components/list/list', '../components/item/item', '../components/item/item-sliding', '../components/toolbar/toolbar', '../components/icon/icon', '../components/checkbox/checkbox', '../components/switch/switch', '../components/text-input/text-input', '../components/text-input/label', '../components/segment/segment', '../components/radio/radio', '../components/searchbar/searchbar', '../components/nav/nav', '../components/nav/nav-push', '../components/nav/nav-router', '../components/navbar/navbar', '../components/app/id', '../components/show-hide-when/show-hide-when'], function (_export) {\n    /**\n     * The core Ionic directives as well as Angular's CORE_DIRECTIVES and\n     * FORM_DIRECTIVES.  Automatically available in every [@Page](../Page/) template.\n     */\n    'use strict';\n\n    var CORE_DIRECTIVES, FORM_DIRECTIVES, OverlayNav, Menu, MenuToggle, MenuClose, Button, Blur, Content, Scroll, Refresher, Slides, Slide, SlideLazy, Tabs, Tab, List, ListHeader, Item, ItemSliding, Toolbar, ToolbarTitle, ToolbarItem, Icon, Checkbox, Switch, TextInput, TextInputElement, Label, Segment, SegmentButton, RadioGroup, RadioButton, Searchbar, Nav, NavPush, NavPop, NavRouter, NavbarTemplate, Navbar, IdRef, ShowWhen, HideWhen, IONIC_DIRECTIVES;\n    return {\n        setters: [function (_angular2Angular2) {\n            CORE_DIRECTIVES = _angular2Angular2.CORE_DIRECTIVES;\n            FORM_DIRECTIVES = _angular2Angular2.FORM_DIRECTIVES;\n        }, function (_componentsOverlayOverlay) {\n            OverlayNav = _componentsOverlayOverlay.OverlayNav;\n        }, function (_componentsMenuMenu) {\n            Menu = _componentsMenuMenu.Menu;\n        }, function (_componentsMenuMenuToggle) {\n            MenuToggle = _componentsMenuMenuToggle.MenuToggle;\n        }, function (_componentsMenuMenuClose) {\n            MenuClose = _componentsMenuMenuClose.MenuClose;\n        }, function (_componentsButtonButton) {\n            Button = _componentsButtonButton.Button;\n        }, function (_componentsBlurBlur) {\n            Blur = _componentsBlurBlur.Blur;\n        }, function (_componentsContentContent) {\n            Content = _componentsContentContent.Content;\n        }, function (_componentsScrollScroll) {\n            Scroll = _componentsScrollScroll.Scroll;\n        }, function (_componentsScrollPullToRefresh) {\n            Refresher = _componentsScrollPullToRefresh.Refresher;\n        }, function (_componentsSlidesSlides) {\n            Slides = _componentsSlidesSlides.Slides;\n            Slide = _componentsSlidesSlides.Slide;\n            SlideLazy = _componentsSlidesSlides.SlideLazy;\n        }, function (_componentsTabsTabs) {\n            Tabs = _componentsTabsTabs.Tabs;\n        }, function (_componentsTabsTab) {\n            Tab = _componentsTabsTab.Tab;\n        }, function (_componentsListList) {\n            List = _componentsListList.List;\n            ListHeader = _componentsListList.ListHeader;\n        }, function (_componentsItemItem) {\n            Item = _componentsItemItem.Item;\n        }, function (_componentsItemItemSliding) {\n            ItemSliding = _componentsItemItemSliding.ItemSliding;\n        }, function (_componentsToolbarToolbar) {\n            Toolbar = _componentsToolbarToolbar.Toolbar;\n            ToolbarTitle = _componentsToolbarToolbar.ToolbarTitle;\n            ToolbarItem = _componentsToolbarToolbar.ToolbarItem;\n        }, function (_componentsIconIcon) {\n            Icon = _componentsIconIcon.Icon;\n        }, function (_componentsCheckboxCheckbox) {\n            Checkbox = _componentsCheckboxCheckbox.Checkbox;\n        }, function (_componentsSwitchSwitch) {\n            Switch = _componentsSwitchSwitch.Switch;\n        }, function (_componentsTextInputTextInput) {\n            TextInput = _componentsTextInputTextInput.TextInput;\n            TextInputElement = _componentsTextInputTextInput.TextInputElement;\n        }, function (_componentsTextInputLabel) {\n            Label = _componentsTextInputLabel.Label;\n        }, function (_componentsSegmentSegment) {\n            Segment = _componentsSegmentSegment.Segment;\n            SegmentButton = _componentsSegmentSegment.SegmentButton;\n        }, function (_componentsRadioRadio) {\n            RadioGroup = _componentsRadioRadio.RadioGroup;\n            RadioButton = _componentsRadioRadio.RadioButton;\n        }, function (_componentsSearchbarSearchbar) {\n            Searchbar = _componentsSearchbarSearchbar.Searchbar;\n        }, function (_componentsNavNav) {\n            Nav = _componentsNavNav.Nav;\n        }, function (_componentsNavNavPush) {\n            NavPush = _componentsNavNavPush.NavPush;\n            NavPop = _componentsNavNavPush.NavPop;\n        }, function (_componentsNavNavRouter) {\n            NavRouter = _componentsNavNavRouter.NavRouter;\n        }, function (_componentsNavbarNavbar) {\n            NavbarTemplate = _componentsNavbarNavbar.NavbarTemplate;\n            Navbar = _componentsNavbarNavbar.Navbar;\n        }, function (_componentsAppId) {\n            IdRef = _componentsAppId.IdRef;\n        }, function (_componentsShowHideWhenShowHideWhen) {\n            ShowWhen = _componentsShowHideWhenShowHideWhen.ShowWhen;\n            HideWhen = _componentsShowHideWhenShowHideWhen.HideWhen;\n        }],\n        execute: function () {\n            IONIC_DIRECTIVES = [\n            // Angular\n            CORE_DIRECTIVES, FORM_DIRECTIVES,\n            // Content\n            OverlayNav, Menu, MenuToggle, MenuClose, Button, Blur, Content, Scroll, Refresher,\n            // Lists\n            List, ListHeader, Item, ItemSliding,\n            // Slides\n            Slides, Slide, SlideLazy,\n            // Tabs\n            Tabs, Tab,\n            // Toolbar\n            Toolbar, ToolbarTitle, ToolbarItem,\n            // Media\n            Icon,\n            // Forms\n            Searchbar, Segment, SegmentButton, Checkbox, RadioGroup, RadioButton, Switch, TextInput, TextInputElement, Label,\n            // Nav\n            Nav, NavbarTemplate, Navbar, NavPush, NavPop, NavRouter, IdRef, ShowWhen, HideWhen];\n\n            _export('IONIC_DIRECTIVES', IONIC_DIRECTIVES);\n        }\n    };\n});\nSystem.register('ionic/config/modes', ['./config'], function (_export) {\n    // iOS Mode Settings\n    'use strict';\n\n    var Config;\n    return {\n        setters: [function (_config) {\n            Config = _config.Config;\n        }],\n        execute: function () {\n            Config.setModeConfig('ios', {\n                activator: 'highlight',\n                actionSheetEnter: 'action-sheet-slide-in',\n                actionSheetLeave: 'action-sheet-slide-out',\n                actionSheetCancelIcon: '',\n                actionSheetDestructiveIcon: '',\n                backButtonText: 'Back',\n                backButtonIcon: 'ion-ios-arrow-back',\n                iconMode: 'ios',\n                menuType: 'reveal',\n                modalEnter: 'modal-slide-in',\n                modalLeave: 'modal-slide-out',\n                pageTransition: 'ios-transition',\n                pageTransitionDelay: 16,\n                popupEnter: 'popup-pop-in',\n                popupLeave: 'popup-pop-out',\n                tabbarPlacement: 'bottom'\n            });\n            // Material Design Mode Settings\n            Config.setModeConfig('md', {\n                activator: 'ripple',\n                actionSheetEnter: 'action-sheet-md-slide-in',\n                actionSheetLeave: 'action-sheet-md-slide-out',\n                actionSheetCancelIcon: 'ion-md-close',\n                actionSheetDestructiveIcon: 'ion-md-trash',\n                backButtonText: '',\n                backButtonIcon: 'ion-md-arrow-back',\n                iconMode: 'md',\n                menuType: 'overlay',\n                modalEnter: 'modal-md-slide-in',\n                modalLeave: 'modal-md-slide-out',\n                pageTransition: 'md-transition',\n                pageTransitionDelay: 120,\n                popupEnter: 'popup-md-pop-in',\n                popupLeave: 'popup-md-pop-out',\n                tabbarHighlight: true,\n                tabbarPlacement: 'top',\n                tabSubPages: true\n            });\n        }\n    };\n});\nSystem.register('ionic/gestures/drag-gesture', ['ionic/gestures/gesture', 'ionic/util'], function (_export) {\n    'use strict';\n\n    var Gesture, util, DragGesture;\n\n    var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();\n\n    var _get = function get(_x2, _x3, _x4) { var _again = true; _function: while (_again) { var object = _x2, property = _x3, receiver = _x4; _again = false; if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { _x2 = parent; _x3 = property; _x4 = receiver; _again = true; desc = parent = undefined; continue _function; } } else if ('value' in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } } };\n\n    function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\n    function _inherits(subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\n    return {\n        setters: [function (_ionicGesturesGesture) {\n            Gesture = _ionicGesturesGesture.Gesture;\n        }, function (_ionicUtil) {\n            util = _ionicUtil;\n        }],\n        execute: function () {\n            DragGesture = (function (_Gesture) {\n                _inherits(DragGesture, _Gesture);\n\n                function DragGesture(element) {\n                    var opts = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1];\n\n                    _classCallCheck(this, DragGesture);\n\n                    util.defaults(opts, {});\n                    _get(Object.getPrototypeOf(DragGesture.prototype), 'constructor', this).call(this, element, opts);\n                }\n\n                _createClass(DragGesture, [{\n                    key: 'listen',\n                    value: function listen() {\n                        var _this = this;\n\n                        _get(Object.getPrototypeOf(DragGesture.prototype), 'listen', this).call(this);\n                        this.on('panstart', function (ev) {\n                            if (_this.onDragStart(ev) !== false) {\n                                _this.dragging = true;\n                            }\n                        });\n                        this.on('panmove', function (ev) {\n                            if (!_this.dragging) return;\n                            if (_this.onDrag(ev) === false) {\n                                _this.dragging = false;\n                            }\n                        });\n                        this.on('panend', function (ev) {\n                            if (!_this.dragging) return;\n                            _this.onDragEnd(ev);\n                            _this.dragging = false;\n                        });\n                        this.hammertime.get('pan').set(this._options);\n                    }\n                }, {\n                    key: 'onDrag',\n                    value: function onDrag() {}\n                }, {\n                    key: 'onDragStart',\n                    value: function onDragStart() {}\n                }, {\n                    key: 'onDragEnd',\n                    value: function onDragEnd() {}\n                }]);\n\n                return DragGesture;\n            })(Gesture);\n\n            _export('DragGesture', DragGesture);\n        }\n    };\n});\nSystem.register('ionic/gestures/gesture', ['ionic/util', 'ionic/gestures/hammer'], function (_export) {\n    /**\n     * A gesture recognizer class.\n     *\n     * TODO(mlynch): Re-enable the DOM event simulation that was causing issues (or verify hammer does this already, it might);\n     */\n    'use strict';\n\n    var util, Hammer, Gesture;\n\n    var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();\n\n    function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\n    return {\n        setters: [function (_ionicUtil) {\n            util = _ionicUtil;\n        }, function (_ionicGesturesHammer) {\n            Hammer = _ionicGesturesHammer.Hammer;\n        }],\n        execute: function () {\n            Gesture = (function () {\n                function Gesture(element) {\n                    var opts = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1];\n\n                    _classCallCheck(this, Gesture);\n\n                    util.defaults(opts, {\n                        domEvents: true\n                    });\n                    this.element = element;\n                    // Map 'x' or 'y' string to hammerjs opts\n                    this.direction = opts.direction || 'x';\n                    opts.direction = this.direction === 'x' ? Hammer.DIRECTION_HORIZONTAL : Hammer.DIRECTION_VERTICAL;\n                    this._options = opts;\n                    this._callbacks = {};\n                }\n\n                _createClass(Gesture, [{\n                    key: 'options',\n                    value: function options() {\n                        var opts = arguments.length <= 0 || arguments[0] === undefined ? {} : arguments[0];\n\n                        util.extend(this._options, opts);\n                    }\n                }, {\n                    key: 'on',\n                    value: function on(type, cb) {\n                        if (type == 'pinch' || type == 'rotate') {\n                            this.hammertime.get('pinch').set({ enable: true });\n                        }\n                        this.hammertime.on(type, cb);\n                        (this._callbacks[type] || (this._callbacks[type] = [])).push(cb);\n                    }\n                }, {\n                    key: 'off',\n                    value: function off(type, cb) {\n                        this.hammertime.off(type, this._callbacks[type] ? cb : null);\n                    }\n                }, {\n                    key: 'listen',\n                    value: function listen() {\n                        this.hammertime = Hammer(this.element, this._options);\n                    }\n                }, {\n                    key: 'unlisten',\n                    value: function unlisten() {\n                        if (this.hammertime) {\n                            for (var type in this._callbacks) {\n                                for (var i = 0; i < this._callbacks[type].length; i++) {\n                                    this.hammertime.off(type, this._callbacks[type]);\n                                }\n                            }\n                            this.hammertime.destroy();\n                            this.hammertime = null;\n                            this._callbacks = {};\n                        }\n                    }\n                }, {\n                    key: 'destroy',\n                    value: function destroy() {\n                        this.unlisten();\n                    }\n                }]);\n\n                return Gesture;\n            })();\n\n            _export('Gesture', Gesture);\n        }\n    };\n});\nSystem.register('ionic/gestures/hammer', [], function (_export) {\n    /*! Hammer.JS - v2.0.4 - 2014-09-28\n     * http://hammerjs.github.io/\n     *\n     * Copyright (c) 2014 Jorik Tangelder;\n     * Licensed under the MIT license */\n    'use strict';\n\n    var VENDOR_PREFIXES, TEST_ELEMENT, TYPE_FUNCTION, round, abs, now, _uniqueId, MOBILE_REGEX, SUPPORT_TOUCH, SUPPORT_POINTER_EVENTS, SUPPORT_ONLY_TOUCH, INPUT_TYPE_TOUCH, INPUT_TYPE_PEN, INPUT_TYPE_MOUSE, INPUT_TYPE_KINECT, COMPUTE_INTERVAL, INPUT_START, INPUT_MOVE, INPUT_END, INPUT_CANCEL, DIRECTION_NONE, DIRECTION_LEFT, DIRECTION_RIGHT, DIRECTION_UP, DIRECTION_DOWN, DIRECTION_HORIZONTAL, DIRECTION_VERTICAL, DIRECTION_ALL, PROPS_XY, PROPS_CLIENT_XY, MOUSE_INPUT_MAP, MOUSE_ELEMENT_EVENTS, MOUSE_WINDOW_EVENTS, POINTER_INPUT_MAP, IE10_POINTER_TYPE_ENUM, POINTER_ELEMENT_EVENTS, POINTER_WINDOW_EVENTS, SINGLE_TOUCH_INPUT_MAP, SINGLE_TOUCH_TARGET_EVENTS, SINGLE_TOUCH_WINDOW_EVENTS, TOUCH_INPUT_MAP, TOUCH_TARGET_EVENTS, PREFIXED_TOUCH_ACTION, NATIVE_TOUCH_ACTION, TOUCH_ACTION_COMPUTE, TOUCH_ACTION_AUTO, TOUCH_ACTION_MANIPULATION, TOUCH_ACTION_NONE, TOUCH_ACTION_PAN_X, TOUCH_ACTION_PAN_Y, STATE_POSSIBLE, STATE_BEGAN, STATE_CHANGED, STATE_ENDED, STATE_RECOGNIZED, STATE_CANCELLED, STATE_FAILED, STOP, FORCED_STOP;\n\n    /**\n     * set a timeout with a given scope\n     * @param {Function} fn\n     * @param {Number} timeout\n     * @param {Object} context\n     * @returns {number}\n     */\n    function setTimeoutContext(fn, timeout, context) {\n        return setTimeout(bindFn(fn, context), timeout);\n    }\n    /**\n     * if the argument is an array, we want to execute the fn on each entry\n     * if it aint an array we don't want to do a thing.\n     * this is used by all the methods that accept a single and array argument.\n     * @param {*|Array} arg\n     * @param {String} fn\n     * @param {Object} [context]\n     * @returns {Boolean}\n     */\n    function invokeArrayArg(arg, fn, context) {\n        if (Array.isArray(arg)) {\n            each(arg, context[fn], context);\n            return true;\n        }\n        return false;\n    }\n    /**\n     * walk objects and arrays\n     * @param {Object} obj\n     * @param {Function} iterator\n     * @param {Object} context\n     */\n    function each(obj, iterator, context) {\n        var i;\n        if (!obj) {\n            return;\n        }\n        if (obj.forEach) {\n            obj.forEach(iterator, context);\n        } else if (obj.length !== undefined) {\n            i = 0;\n            while (i < obj.length) {\n                iterator.call(context, obj[i], i, obj);\n                i++;\n            }\n        } else {\n            for (i in obj) {\n                obj.hasOwnProperty(i) && iterator.call(context, obj[i], i, obj);\n            }\n        }\n    }\n    /**\n     * extend object.\n     * means that properties in dest will be overwritten by the ones in src.\n     * @param {Object} dest\n     * @param {Object} src\n     * @param {Boolean} [merge]\n     * @returns {Object} dest\n     */\n    function extend(dest, src, merge) {\n        var keys = Object.keys(src);\n        var i = 0;\n        while (i < keys.length) {\n            if (!merge || merge && dest[keys[i]] === undefined) {\n                dest[keys[i]] = src[keys[i]];\n            }\n            i++;\n        }\n        return dest;\n    }\n    /**\n     * merge the values from src in the dest.\n     * means that properties that exist in dest will not be overwritten by src\n     * @param {Object} dest\n     * @param {Object} src\n     * @returns {Object} dest\n     */\n    function merge(dest, src) {\n        return extend(dest, src, true);\n    }\n    /**\n     * simple class inheritance\n     * @param {Function} child\n     * @param {Function} base\n     * @param {Object} [properties]\n     */\n    function inherit(child, base, properties) {\n        var baseP = base.prototype,\n            childP;\n        childP = child.prototype = Object.create(baseP);\n        childP.constructor = child;\n        childP._super = baseP;\n        if (properties) {\n            extend(childP, properties);\n        }\n    }\n    /**\n     * simple function bind\n     * @param {Function} fn\n     * @param {Object} context\n     * @returns {Function}\n     */\n    function bindFn(fn, context) {\n        return function boundFn() {\n            return fn.apply(context, arguments);\n        };\n    }\n    /**\n     * let a boolean value also be a function that must return a boolean\n     * this first item in args will be used as the context\n     * @param {Boolean|Function} val\n     * @param {Array} [args]\n     * @returns {Boolean}\n     */\n    function boolOrFn(val, args) {\n        if (typeof val == TYPE_FUNCTION) {\n            return val.apply(args ? args[0] || undefined : undefined, args);\n        }\n        return val;\n    }\n    /**\n     * use the val2 when val1 is undefined\n     * @param {*} val1\n     * @param {*} val2\n     * @returns {*}\n     */\n    function ifUndefined(val1, val2) {\n        return val1 === undefined ? val2 : val1;\n    }\n    /**\n     * addEventListener with multiple events at once\n     * @param {EventTarget} target\n     * @param {String} types\n     * @param {Function} handler\n     */\n    function addEventListeners(target, types, handler) {\n        each(splitStr(types), function (type) {\n            //console.debug('hammer addEventListener', type, target.tagName);\n            target.addEventListener(type, handler, false);\n        });\n    }\n    /**\n     * removeEventListener with multiple events at once\n     * @param {EventTarget} target\n     * @param {String} types\n     * @param {Function} handler\n     */\n    function removeEventListeners(target, types, handler) {\n        each(splitStr(types), function (type) {\n            //console.debug('hammer removeEventListener', type, target.tagName);\n            target.removeEventListener(type, handler, false);\n        });\n    }\n    /**\n     * find if a node is in the given parent\n     * @method hasParent\n     * @param {HTMLElement} node\n     * @param {HTMLElement} parent\n     * @return {Boolean} found\n     */\n    function hasParent(node, parent) {\n        while (node) {\n            if (node == parent) {\n                return true;\n            }\n            node = node.parentNode;\n        }\n        return false;\n    }\n    /**\n     * small indexOf wrapper\n     * @param {String} str\n     * @param {String} find\n     * @returns {Boolean} found\n     */\n    function inStr(str, find) {\n        return str.indexOf(find) > -1;\n    }\n    /**\n     * split string on whitespace\n     * @param {String} str\n     * @returns {Array} words\n     */\n    function splitStr(str) {\n        return str.trim().split(/\\s+/g);\n    }\n    /**\n     * find if a array contains the object using indexOf or a simple polyFill\n     * @param {Array} src\n     * @param {String} find\n     * @param {String} [findByKey]\n     * @return {Boolean|Number} false when not found, or the index\n     */\n    function inArray(src, find, findByKey) {\n        if (src.indexOf && !findByKey) {\n            return src.indexOf(find);\n        } else {\n            var i = 0;\n            while (i < src.length) {\n                if (findByKey && src[i][findByKey] == find || !findByKey && src[i] === find) {\n                    return i;\n                }\n                i++;\n            }\n            return -1;\n        }\n    }\n    /**\n     * convert array-like objects to real arrays\n     * @param {Object} obj\n     * @returns {Array}\n     */\n    function toArray(obj) {\n        return Array.prototype.slice.call(obj, 0);\n    }\n    /**\n     * unique array with objects based on a key (like 'id') or just by the array's value\n     * @param {Array} src [{id:1},{id:2},{id:1}]\n     * @param {String} [key]\n     * @param {Boolean} [sort=False]\n     * @returns {Array} [{id:1},{id:2}]\n     */\n    function uniqueArray(src, key, sort) {\n        var results = [];\n        var values = [];\n        var i = 0;\n        while (i < src.length) {\n            var val = key ? src[i][key] : src[i];\n            if (inArray(values, val) < 0) {\n                results.push(src[i]);\n            }\n            values[i] = val;\n            i++;\n        }\n        if (sort) {\n            if (!key) {\n                results = results.sort();\n            } else {\n                results = results.sort(function sortUniqueArray(a, b) {\n                    return a[key] > b[key];\n                });\n            }\n        }\n        return results;\n    }\n    /**\n     * get the prefixed property\n     * @param {Object} obj\n     * @param {String} property\n     * @returns {String|Undefined} prefixed\n     */\n    function prefixed(obj, property) {\n        var prefix, prop;\n        var camelProp = property[0].toUpperCase() + property.slice(1);\n        var i = 0;\n        while (i < VENDOR_PREFIXES.length) {\n            prefix = VENDOR_PREFIXES[i];\n            prop = prefix ? prefix + camelProp : property;\n            if (prop in obj) {\n                return prop;\n            }\n            i++;\n        }\n        return undefined;\n    }\n    /**\n     * get a unique id\n     * @returns {number} uniqueId\n     */\n\n    function uniqueId() {\n        return _uniqueId++;\n    }\n    /**\n     * get the window object of an element\n     * @param {HTMLElement} element\n     * @returns {DocumentView|Window}\n     */\n    function getWindowForElement(element) {\n        var doc = element.ownerDocument;\n        return doc.defaultView || doc.parentWindow;\n    }\n\n    /**\n     * create new input type manager\n     * @param {Manager} manager\n     * @param {Function} callback\n     * @returns {Input}\n     * @constructor\n     */\n    function Input(manager, callback) {\n        var self = this;\n        this.manager = manager;\n        this.callback = callback;\n        this.element = manager.element;\n        this.target = manager.options.inputTarget;\n        // smaller wrapper around the handler, for the scope and the enabled state of the manager,\n        // so when disabled the input events are completely bypassed.\n        this.domHandler = function (ev) {\n            if (boolOrFn(manager.options.enable, [manager])) {\n                self.handler(ev);\n            }\n        };\n        this.init();\n    }\n\n    /**\n     * create new input type manager\n     * called by the Manager constructor\n     * @param {Hammer} manager\n     * @returns {Input}\n     */\n    function createInputInstance(manager) {\n        var Type;\n        var inputClass = manager.options.inputClass;\n        if (inputClass) {\n            Type = inputClass;\n        } else if (SUPPORT_POINTER_EVENTS) {\n            Type = PointerEventInput;\n        } else if (SUPPORT_ONLY_TOUCH) {\n            Type = TouchInput;\n        } else if (!SUPPORT_TOUCH) {\n            Type = MouseInput;\n        } else {\n            Type = TouchMouseInput;\n        }\n        return new Type(manager, inputHandler);\n    }\n    /**\n     * handle input events\n     * @param {Manager} manager\n     * @param {String} eventType\n     * @param {Object} input\n     */\n    function inputHandler(manager, eventType, input) {\n        var pointersLen = input.pointers.length;\n        var changedPointersLen = input.changedPointers.length;\n        var isFirst = eventType & INPUT_START && pointersLen - changedPointersLen === 0;\n        var isFinal = eventType & (INPUT_END | INPUT_CANCEL) && pointersLen - changedPointersLen === 0;\n        input.isFirst = !!isFirst;\n        input.isFinal = !!isFinal;\n        if (isFirst) {\n            manager.session = {};\n        }\n        // source event is the normalized value of the domEvents\n        // like 'touchstart, mouseup, pointerdown'\n        input.eventType = eventType;\n        // compute scale, rotation etc\n        computeInputData(manager, input);\n        // emit secret event\n        manager.emit('hammer.input', input);\n        manager.recognize(input);\n        manager.session.prevInput = input;\n    }\n    /**\n     * extend the data with some usable properties like scale, rotate, velocity etc\n     * @param {Object} manager\n     * @param {Object} input\n     */\n    function computeInputData(manager, input) {\n        var session = manager.session;\n        var pointers = input.pointers;\n        var pointersLength = pointers.length;\n        // store the first input to calculate the distance and direction\n        if (!session.firstInput) {\n            session.firstInput = simpleCloneInputData(input);\n        }\n        // to compute scale and rotation we need to store the multiple touches\n        if (pointersLength > 1 && !session.firstMultiple) {\n            session.firstMultiple = simpleCloneInputData(input);\n        } else if (pointersLength === 1) {\n            session.firstMultiple = false;\n        }\n        var firstInput = session.firstInput;\n        var firstMultiple = session.firstMultiple;\n        var offsetCenter = firstMultiple ? firstMultiple.center : firstInput.center;\n        var center = input.center = getCenter(pointers);\n        input.timeStamp = now();\n        input.deltaTime = input.timeStamp - firstInput.timeStamp;\n        input.angle = getAngle(offsetCenter, center);\n        input.distance = getDistance(offsetCenter, center);\n        computeDeltaXY(session, input);\n        input.offsetDirection = getDirection(input.deltaX, input.deltaY);\n        input.scale = firstMultiple ? getScale(firstMultiple.pointers, pointers) : 1;\n        input.rotation = firstMultiple ? getRotation(firstMultiple.pointers, pointers) : 0;\n        computeIntervalInputData(session, input);\n        // find the correct target\n        var target = manager.element;\n        if (hasParent(input.srcEvent.target, target)) {\n            target = input.srcEvent.target;\n        }\n        input.target = target;\n    }\n    function computeDeltaXY(session, input) {\n        var center = input.center;\n        var offset = session.offsetDelta || {};\n        var prevDelta = session.prevDelta || {};\n        var prevInput = session.prevInput || {};\n        if (input.eventType === INPUT_START || prevInput.eventType === INPUT_END) {\n            prevDelta = session.prevDelta = {\n                x: prevInput.deltaX || 0,\n                y: prevInput.deltaY || 0\n            };\n            offset = session.offsetDelta = {\n                x: center.x,\n                y: center.y\n            };\n        }\n        input.deltaX = prevDelta.x + (center.x - offset.x);\n        input.deltaY = prevDelta.y + (center.y - offset.y);\n    }\n    /**\n     * velocity is calculated every x ms\n     * @param {Object} session\n     * @param {Object} input\n     */\n    function computeIntervalInputData(session, input) {\n        var last = session.lastInterval || input,\n            deltaTime = input.timeStamp - last.timeStamp,\n            velocity,\n            velocityX,\n            velocityY,\n            direction;\n        if (input.eventType != INPUT_CANCEL && (deltaTime > COMPUTE_INTERVAL || last.velocity === undefined)) {\n            var deltaX = last.deltaX - input.deltaX;\n            var deltaY = last.deltaY - input.deltaY;\n            var v = getVelocity(deltaTime, deltaX, deltaY);\n            velocityX = v.x;\n            velocityY = v.y;\n            velocity = abs(v.x) > abs(v.y) ? v.x : v.y;\n            direction = getDirection(deltaX, deltaY);\n            session.lastInterval = input;\n        } else {\n            // use latest velocity info if it doesn't overtake a minimum period\n            velocity = last.velocity;\n            velocityX = last.velocityX;\n            velocityY = last.velocityY;\n            direction = last.direction;\n        }\n        input.velocity = velocity;\n        input.velocityX = velocityX;\n        input.velocityY = velocityY;\n        input.direction = direction;\n    }\n    /**\n     * create a simple clone from the input used for storage of firstInput and firstMultiple\n     * @param {Object} input\n     * @returns {Object} clonedInputData\n     */\n    function simpleCloneInputData(input) {\n        // make a simple copy of the pointers because we will get a reference if we don't\n        // we only need clientXY for the calculations\n        var pointers = [];\n        var i = 0;\n        while (i < input.pointers.length) {\n            pointers[i] = {\n                clientX: round(input.pointers[i].clientX),\n                clientY: round(input.pointers[i].clientY)\n            };\n            i++;\n        }\n        return {\n            timeStamp: now(),\n            pointers: pointers,\n            center: getCenter(pointers),\n            deltaX: input.deltaX,\n            deltaY: input.deltaY\n        };\n    }\n    /**\n     * get the center of all the pointers\n     * @param {Array} pointers\n     * @return {Object} center contains `x` and `y` properties\n     */\n    function getCenter(pointers) {\n        var pointersLength = pointers.length;\n        // no need to loop when only one touch\n        if (pointersLength === 1) {\n            return {\n                x: round(pointers[0].clientX),\n                y: round(pointers[0].clientY)\n            };\n        }\n        var x = 0,\n            y = 0,\n            i = 0;\n        while (i < pointersLength) {\n            x += pointers[i].clientX;\n            y += pointers[i].clientY;\n            i++;\n        }\n        return {\n            x: round(x / pointersLength),\n            y: round(y / pointersLength)\n        };\n    }\n    /**\n     * calculate the velocity between two points. unit is in px per ms.\n     * @param {Number} deltaTime\n     * @param {Number} x\n     * @param {Number} y\n     * @return {Object} velocity `x` and `y`\n     */\n    function getVelocity(deltaTime, x, y) {\n        return {\n            x: x / deltaTime || 0,\n            y: y / deltaTime || 0\n        };\n    }\n    /**\n     * get the direction between two points\n     * @param {Number} x\n     * @param {Number} y\n     * @return {Number} direction\n     */\n    function getDirection(x, y) {\n        if (x === y) {\n            return DIRECTION_NONE;\n        }\n        if (abs(x) >= abs(y)) {\n            return x > 0 ? DIRECTION_LEFT : DIRECTION_RIGHT;\n        }\n        return y > 0 ? DIRECTION_UP : DIRECTION_DOWN;\n    }\n    /**\n     * calculate the absolute distance between two points\n     * @param {Object} p1 {x, y}\n     * @param {Object} p2 {x, y}\n     * @param {Array} [props] containing x and y keys\n     * @return {Number} distance\n     */\n    function getDistance(p1, p2, props) {\n        if (!props) {\n            props = PROPS_XY;\n        }\n        var x = p2[props[0]] - p1[props[0]],\n            y = p2[props[1]] - p1[props[1]];\n        return Math.sqrt(x * x + y * y);\n    }\n    /**\n     * calculate the angle between two coordinates\n     * @param {Object} p1\n     * @param {Object} p2\n     * @param {Array} [props] containing x and y keys\n     * @return {Number} angle\n     */\n    function getAngle(p1, p2, props) {\n        if (!props) {\n            props = PROPS_XY;\n        }\n        var x = p2[props[0]] - p1[props[0]],\n            y = p2[props[1]] - p1[props[1]];\n        return Math.atan2(y, x) * 180 / Math.PI;\n    }\n    /**\n     * calculate the rotation degrees between two pointersets\n     * @param {Array} start array of pointers\n     * @param {Array} end array of pointers\n     * @return {Number} rotation\n     */\n    function getRotation(start, end) {\n        return getAngle(end[1], end[0], PROPS_CLIENT_XY) - getAngle(start[1], start[0], PROPS_CLIENT_XY);\n    }\n    /**\n     * calculate the scale factor between two pointersets\n     * no scale is 1, and goes down to 0 when pinched together, and bigger when pinched out\n     * @param {Array} start array of pointers\n     * @param {Array} end array of pointers\n     * @return {Number} scale\n     */\n    function getScale(start, end) {\n        return getDistance(end[0], end[1], PROPS_CLIENT_XY) / getDistance(start[0], start[1], PROPS_CLIENT_XY);\n    }\n\n    /**\n     * Mouse events input\n     * @constructor\n     * @extends Input\n     */\n    function MouseInput() {\n        this.evEl = MOUSE_ELEMENT_EVENTS;\n        this.evWin = MOUSE_WINDOW_EVENTS;\n        this.allow = true; // used by Input.TouchMouse to disable mouse events\n        this.pressed = false; // mousedown state\n        Input.apply(this, arguments);\n    }\n\n    /**\n     * Pointer events input\n     * @constructor\n     * @extends Input\n     */\n    function PointerEventInput() {\n        this.evEl = POINTER_ELEMENT_EVENTS;\n        this.evWin = POINTER_WINDOW_EVENTS;\n        Input.apply(this, arguments);\n        this.store = this.manager.session.pointerEvents = [];\n    }\n\n    /**\n     * Touch events input\n     * @constructor\n     * @extends Input\n     */\n    function SingleTouchInput() {\n        this.evTarget = SINGLE_TOUCH_TARGET_EVENTS;\n        this.evWin = SINGLE_TOUCH_WINDOW_EVENTS;\n        this.started = false;\n        Input.apply(this, arguments);\n    }\n\n    /**\n     * @this {TouchInput}\n     * @param {Object} ev\n     * @param {Number} type flag\n     * @returns {undefined|Array} [all, changed]\n     */\n    function normalizeSingleTouches(ev, type) {\n        var all = toArray(ev.touches);\n        var changed = toArray(ev.changedTouches);\n        if (type & (INPUT_END | INPUT_CANCEL)) {\n            all = uniqueArray(all.concat(changed), 'identifier', true);\n        }\n        return [all, changed];\n    }\n\n    /**\n     * Multi-user touch events input\n     * @constructor\n     * @extends Input\n     */\n    function TouchInput() {\n        this.evTarget = TOUCH_TARGET_EVENTS;\n        this.targetIds = {};\n        Input.apply(this, arguments);\n    }\n\n    /**\n     * @this {TouchInput}\n     * @param {Object} ev\n     * @param {Number} type flag\n     * @returns {undefined|Array} [all, changed]\n     */\n    function getTouches(ev, type) {\n        var allTouches = toArray(ev.touches);\n        var targetIds = this.targetIds;\n        // when there is only one touch, the process can be simplified\n        if (type & (INPUT_START | INPUT_MOVE) && allTouches.length === 1) {\n            targetIds[allTouches[0].identifier] = true;\n            return [allTouches, allTouches];\n        }\n        var i,\n            targetTouches,\n            changedTouches = toArray(ev.changedTouches),\n            changedTargetTouches = [],\n            target = this.target;\n        // get target touches from touches\n        targetTouches = allTouches.filter(function (touch) {\n            return hasParent(touch.target, target);\n        });\n        // collect touches\n        if (type === INPUT_START) {\n            i = 0;\n            while (i < targetTouches.length) {\n                targetIds[targetTouches[i].identifier] = true;\n                i++;\n            }\n        }\n        // filter changed touches to only contain touches that exist in the collected target ids\n        i = 0;\n        while (i < changedTouches.length) {\n            if (targetIds[changedTouches[i].identifier]) {\n                changedTargetTouches.push(changedTouches[i]);\n            }\n            // cleanup removed touches\n            if (type & (INPUT_END | INPUT_CANCEL)) {\n                delete targetIds[changedTouches[i].identifier];\n            }\n            i++;\n        }\n        if (!changedTargetTouches.length) {\n            return;\n        }\n        return [\n        // merge targetTouches with changedTargetTouches so it contains ALL touches, including 'end' and 'cancel'\n        uniqueArray(targetTouches.concat(changedTargetTouches), 'identifier', true), changedTargetTouches];\n    }\n    /**\n     * Combined touch and mouse input\n     *\n     * Touch has a higher priority then mouse, and while touching no mouse events are allowed.\n     * This because touch devices also emit mouse events while doing a touch.\n     *\n     * @constructor\n     * @extends Input\n     */\n    function TouchMouseInput() {\n        Input.apply(this, arguments);\n        var handler = bindFn(this.handler, this);\n        this.touch = new TouchInput(this.manager, handler);\n        this.mouse = new MouseInput(this.manager, handler);\n    }\n\n    /**\n     * Touch Action\n     * sets the touchAction property or uses the js alternative\n     * @param {Manager} manager\n     * @param {String} value\n     * @constructor\n     */\n    function TouchAction(manager, value) {\n        this.manager = manager;\n        this.set(value);\n    }\n\n    /**\n     * when the touchActions are collected they are not a valid value, so we need to clean things up. *\n     * @param {String} actions\n     * @returns {*}\n     */\n    function cleanTouchActions(actions) {\n        // none\n        if (inStr(actions, TOUCH_ACTION_NONE)) {\n            return TOUCH_ACTION_NONE;\n        }\n        var hasPanX = inStr(actions, TOUCH_ACTION_PAN_X);\n        var hasPanY = inStr(actions, TOUCH_ACTION_PAN_Y);\n        // pan-x and pan-y can be combined\n        if (hasPanX && hasPanY) {\n            return TOUCH_ACTION_PAN_X + ' ' + TOUCH_ACTION_PAN_Y;\n        }\n        // pan-x OR pan-y\n        if (hasPanX || hasPanY) {\n            return hasPanX ? TOUCH_ACTION_PAN_X : TOUCH_ACTION_PAN_Y;\n        }\n        // manipulation\n        if (inStr(actions, TOUCH_ACTION_MANIPULATION)) {\n            return TOUCH_ACTION_MANIPULATION;\n        }\n        return TOUCH_ACTION_AUTO;\n    }\n    /**\n     * Recognizer flow explained; *\n     * All recognizers have the initial state of POSSIBLE when a input session starts.\n     * The definition of a input session is from the first input until the last input, with all it's movement in it. *\n     * Example session for mouse-input: mousedown -> mousemove -> mouseup\n     *\n     * On each recognizing cycle (see Manager.recognize) the .recognize() method is executed\n     * which determines with state it should be.\n     *\n     * If the recognizer has the state FAILED, CANCELLED or RECOGNIZED (equals ENDED), it is reset to\n     * POSSIBLE to give it another change on the next cycle.\n     *\n     *               Possible\n     *                  |\n     *            +-----+---------------+\n     *            |                     |\n     *      +-----+-----+               |\n     *      |           |               |\n     *   Failed      Cancelled          |\n     *                          +-------+------+\n     *                          |              |\n     *                      Recognized       Began\n     *                                         |\n     *                                      Changed\n     *                                         |\n     *                                  Ended/Recognized\n     */\n\n    /**\n     * Recognizer\n     * Every recognizer needs to extend from this class.\n     * @constructor\n     * @param {Object} options\n     */\n    function Recognizer(options) {\n        this.id = uniqueId();\n        this.manager = null;\n        this.options = merge(options || {}, this.defaults);\n        // default is enable true\n        this.options.enable = ifUndefined(this.options.enable, true);\n        this.state = STATE_POSSIBLE;\n        this.simultaneous = {};\n        this.requireFail = [];\n    }\n\n    /**\n     * get a usable string, used as event postfix\n     * @param {Const} state\n     * @returns {String} state\n     */\n    function stateStr(state) {\n        if (state & STATE_CANCELLED) {\n            return 'cancel';\n        } else if (state & STATE_ENDED) {\n            return 'end';\n        } else if (state & STATE_CHANGED) {\n            return 'move';\n        } else if (state & STATE_BEGAN) {\n            return 'start';\n        }\n        return '';\n    }\n    /**\n     * direction cons to string\n     * @param {Const} direction\n     * @returns {String}\n     */\n    function directionStr(direction) {\n        if (direction == DIRECTION_DOWN) {\n            return 'down';\n        } else if (direction == DIRECTION_UP) {\n            return 'up';\n        } else if (direction == DIRECTION_LEFT) {\n            return 'left';\n        } else if (direction == DIRECTION_RIGHT) {\n            return 'right';\n        }\n        return '';\n    }\n    /**\n     * get a recognizer by name if it is bound to a manager\n     * @param {Recognizer|String} otherRecognizer\n     * @param {Recognizer} recognizer\n     * @returns {Recognizer}\n     */\n    function getRecognizerByNameIfManager(otherRecognizer, recognizer) {\n        var manager = recognizer.manager;\n        if (manager) {\n            return manager.get(otherRecognizer);\n        }\n        return otherRecognizer;\n    }\n    /**\n     * This recognizer is just used as a base for the simple attribute recognizers.\n     * @constructor\n     * @extends Recognizer\n     */\n    function AttrRecognizer() {\n        Recognizer.apply(this, arguments);\n    }\n\n    /**\n     * Pan\n     * Recognized when the pointer is down and moved in the allowed direction.\n     * @constructor\n     * @extends AttrRecognizer\n     */\n    function PanRecognizer() {\n        AttrRecognizer.apply(this, arguments);\n        this.pX = null;\n        this.pY = null;\n    }\n\n    /**\n     * Pinch\n     * Recognized when two or more pointers are moving toward (zoom-in) or away from each other (zoom-out).\n     * @constructor\n     * @extends AttrRecognizer\n     */\n    function PinchRecognizer() {\n        AttrRecognizer.apply(this, arguments);\n    }\n\n    /**\n     * Press\n     * Recognized when the pointer is down for x ms without any movement.\n     * @constructor\n     * @extends Recognizer\n     */\n    function PressRecognizer() {\n        Recognizer.apply(this, arguments);\n        this._timer = null;\n        this._input = null;\n    }\n\n    /**\n     * Rotate\n     * Recognized when two or more pointer are moving in a circular motion.\n     * @constructor\n     * @extends AttrRecognizer\n     */\n    function RotateRecognizer() {\n        AttrRecognizer.apply(this, arguments);\n    }\n\n    /**\n     * Swipe\n     * Recognized when the pointer is moving fast (velocity), with enough distance in the allowed direction.\n     * @constructor\n     * @extends AttrRecognizer\n     */\n    function SwipeRecognizer() {\n        AttrRecognizer.apply(this, arguments);\n    }\n\n    /**\n     * A tap is ecognized when the pointer is doing a small tap/click. Multiple taps are recognized if they occur\n     * between the given interval and position. The delay option can be used to recognize multi-taps without firing\n     * a single tap.\n     *\n     * The eventData from the emitted event contains the property `tapCount`, which contains the amount of\n     * multi-taps being recognized.\n     * @constructor\n     * @extends Recognizer\n     */\n    function TapRecognizer() {\n        Recognizer.apply(this, arguments);\n        // previous time and center,\n        // used for tap counting\n        this.pTime = false;\n        this.pCenter = false;\n        this._timer = null;\n        this._input = null;\n        this.count = 0;\n    }\n\n    /**\n     * Simple way to create an manager with a default set of recognizers.\n     * @param {HTMLElement} element\n     * @param {Object} [options]\n     * @constructor\n     */\n    function Hammer(element, options) {\n        options = options || {};\n        options.recognizers = ifUndefined(options.recognizers, Hammer.defaults.preset);\n        return new Manager(element, options);\n    }\n    /**\n     * @const {string}\n     */\n\n    /**\n     * Manager\n     * @param {HTMLElement} element\n     * @param {Object} [options]\n     * @constructor\n     */\n    function Manager(element, options) {\n        options = options || {};\n        this.options = merge(options, Hammer.defaults);\n        this.options.inputTarget = this.options.inputTarget || element;\n        this.handlers = {};\n        this.session = {};\n        this.recognizers = [];\n        this.element = element;\n        this.input = createInputInstance(this);\n        this.touchAction = new TouchAction(this, this.options.touchAction);\n        toggleCssProps(this, true);\n        each(options.recognizers, function (item) {\n            var recognizer = this.add(new item[0](item[1]));\n            item[2] && recognizer.recognizeWith(item[2]);\n            item[3] && recognizer.requireFailure(item[3]);\n        }, this);\n    }\n\n    /**\n     * add/remove the css properties as defined in manager.options.cssProps\n     * @param {Manager} manager\n     * @param {Boolean} add\n     */\n    function toggleCssProps(manager, add) {\n        var element = manager.element;\n        each(manager.options.cssProps, function (value, name) {\n            element.style[prefixed(element.style, name)] = add ? value : '';\n        });\n    }\n    /**\n     * trigger dom event\n     * @param {String} event\n     * @param {Object} data\n     */\n    function triggerDomEvent(event, data) {\n        var gestureEvent = document.createEvent('Event');\n        gestureEvent.initEvent(event, true, true);\n        gestureEvent.gesture = data;\n        data.target.dispatchEvent(gestureEvent);\n    }\n    return {\n        setters: [],\n        execute: function () {\n            VENDOR_PREFIXES = ['', 'webkit', 'moz', 'MS', 'ms', 'o'];\n            TEST_ELEMENT = document.createElement('div');\n            TYPE_FUNCTION = 'function';\n            round = Math.round;\n            abs = Math.abs;\n            now = Date.now;\n            _uniqueId = 1;\n            MOBILE_REGEX = /mobile|tablet|ip(ad|hone|od)|android/i;\n            SUPPORT_TOUCH = 'ontouchstart' in window;\n            SUPPORT_POINTER_EVENTS = prefixed(window, 'PointerEvent') !== undefined;\n            SUPPORT_ONLY_TOUCH = SUPPORT_TOUCH && MOBILE_REGEX.test(navigator.userAgent);\n            INPUT_TYPE_TOUCH = 'touch';\n            INPUT_TYPE_PEN = 'pen';\n            INPUT_TYPE_MOUSE = 'mouse';\n            INPUT_TYPE_KINECT = 'kinect';\n            COMPUTE_INTERVAL = 25;\n            INPUT_START = 1;\n            INPUT_MOVE = 2;\n            INPUT_END = 4;\n            INPUT_CANCEL = 8;\n            DIRECTION_NONE = 1;\n            DIRECTION_LEFT = 2;\n            DIRECTION_RIGHT = 4;\n            DIRECTION_UP = 8;\n            DIRECTION_DOWN = 16;\n            DIRECTION_HORIZONTAL = DIRECTION_LEFT | DIRECTION_RIGHT;\n            DIRECTION_VERTICAL = DIRECTION_UP | DIRECTION_DOWN;\n            DIRECTION_ALL = DIRECTION_HORIZONTAL | DIRECTION_VERTICAL;\n            PROPS_XY = ['x', 'y'];\n            PROPS_CLIENT_XY = ['clientX', 'clientY'];\n            Input.prototype = {\n                /**\n                 * should handle the inputEvent data and trigger the callback\n                 * @virtual\n                 */\n                handler: function handler() {},\n                /**\n                 * bind the events\n                 */\n                init: function init() {\n                    //console.debug('hammer Input init')\n                    this.evEl && addEventListeners(this.element, this.evEl, this.domHandler);\n                    this.evTarget && addEventListeners(this.target, this.evTarget, this.domHandler);\n                    this.evWin && addEventListeners(getWindowForElement(this.element), this.evWin, this.domHandler);\n                },\n                /**\n                 * unbind the events\n                 */\n                destroy: function destroy() {\n                    this.evEl && removeEventListeners(this.element, this.evEl, this.domHandler);\n                    this.evTarget && removeEventListeners(this.target, this.evTarget, this.domHandler);\n                    this.evWin && removeEventListeners(getWindowForElement(this.element), this.evWin, this.domHandler);\n                }\n            };MOUSE_INPUT_MAP = {\n                mousedown: INPUT_START,\n                mousemove: INPUT_MOVE,\n                mouseup: INPUT_END\n            };\n            MOUSE_ELEMENT_EVENTS = 'mousedown';\n            MOUSE_WINDOW_EVENTS = 'mousemove mouseup';\n            inherit(MouseInput, Input, {\n                /**\n                 * handle mouse events\n                 * @param {Object} ev\n                 */\n                handler: function MEhandler(ev) {\n                    var eventType = MOUSE_INPUT_MAP[ev.type];\n                    // on start we want to have the left mouse button down\n                    if (eventType & INPUT_START && ev.button === 0) {\n                        this.pressed = true;\n                    }\n                    if (eventType & INPUT_MOVE && ev.which !== 1) {\n                        eventType = INPUT_END;\n                    }\n                    // mouse must be down, and mouse events are allowed (see the TouchMouse input)\n                    if (!this.pressed || !this.allow) {\n                        return;\n                    }\n                    if (eventType & INPUT_END) {\n                        this.pressed = false;\n                    }\n                    this.callback(this.manager, eventType, {\n                        pointers: [ev],\n                        changedPointers: [ev],\n                        pointerType: INPUT_TYPE_MOUSE,\n                        srcEvent: ev\n                    });\n                }\n            });\n            POINTER_INPUT_MAP = {\n                pointerdown: INPUT_START,\n                pointermove: INPUT_MOVE,\n                pointerup: INPUT_END,\n                pointercancel: INPUT_CANCEL,\n                pointerout: INPUT_CANCEL\n            };\n\n            // in IE10 the pointer types is defined as an enum\n            IE10_POINTER_TYPE_ENUM = {\n                2: INPUT_TYPE_TOUCH,\n                3: INPUT_TYPE_PEN,\n                4: INPUT_TYPE_MOUSE,\n                5: INPUT_TYPE_KINECT // see https://twitter.com/jacobrossi/status/480596438489890816\n            };\n            POINTER_ELEMENT_EVENTS = 'pointerdown';\n            POINTER_WINDOW_EVENTS = 'pointermove pointerup pointercancel';\n\n            // IE10 has prefixed support, and case-sensitive\n            if (window.MSPointerEvent) {\n                POINTER_ELEMENT_EVENTS = 'MSPointerDown';\n                POINTER_WINDOW_EVENTS = 'MSPointerMove MSPointerUp MSPointerCancel';\n            }inherit(PointerEventInput, Input, {\n                /**\n                 * handle mouse events\n                 * @param {Object} ev\n                 */\n                handler: function PEhandler(ev) {\n                    var store = this.store;\n                    var removePointer = false;\n                    var eventTypeNormalized = ev.type.toLowerCase().replace('ms', '');\n                    var eventType = POINTER_INPUT_MAP[eventTypeNormalized];\n                    var pointerType = IE10_POINTER_TYPE_ENUM[ev.pointerType] || ev.pointerType;\n                    var isTouch = pointerType == INPUT_TYPE_TOUCH;\n                    // get index of the event in the store\n                    var storeIndex = inArray(store, ev.pointerId, 'pointerId');\n                    // start and mouse must be down\n                    if (eventType & INPUT_START && (ev.button === 0 || isTouch)) {\n                        if (storeIndex < 0) {\n                            store.push(ev);\n                            storeIndex = store.length - 1;\n                        }\n                    } else if (eventType & (INPUT_END | INPUT_CANCEL)) {\n                        removePointer = true;\n                    }\n                    // it not found, so the pointer hasn't been down (so it's probably a hover)\n                    if (storeIndex < 0) {\n                        return;\n                    }\n                    // update the event in the store\n                    store[storeIndex] = ev;\n                    this.callback(this.manager, eventType, {\n                        pointers: store,\n                        changedPointers: [ev],\n                        pointerType: pointerType,\n                        srcEvent: ev\n                    });\n                    if (removePointer) {\n                        // remove from the store\n                        store.splice(storeIndex, 1);\n                    }\n                }\n            });\n            SINGLE_TOUCH_INPUT_MAP = {\n                touchstart: INPUT_START,\n                touchmove: INPUT_MOVE,\n                touchend: INPUT_END,\n                touchcancel: INPUT_CANCEL\n            };\n            SINGLE_TOUCH_TARGET_EVENTS = 'touchstart';\n            SINGLE_TOUCH_WINDOW_EVENTS = 'touchstart touchmove touchend touchcancel';\n            inherit(SingleTouchInput, Input, {\n                handler: function TEhandler(ev) {\n                    var type = SINGLE_TOUCH_INPUT_MAP[ev.type];\n                    // should we handle the touch events?\n                    if (type === INPUT_START) {\n                        this.started = true;\n                    }\n                    if (!this.started) {\n                        return;\n                    }\n                    var touches = normalizeSingleTouches.call(this, ev, type);\n                    // when done, reset the started state\n                    if (type & (INPUT_END | INPUT_CANCEL) && touches[0].length - touches[1].length === 0) {\n                        this.started = false;\n                    }\n                    this.callback(this.manager, type, {\n                        pointers: touches[0],\n                        changedPointers: touches[1],\n                        pointerType: INPUT_TYPE_TOUCH,\n                        srcEvent: ev\n                    });\n                }\n            });TOUCH_INPUT_MAP = {\n                touchstart: INPUT_START,\n                touchmove: INPUT_MOVE,\n                touchend: INPUT_END,\n                touchcancel: INPUT_CANCEL\n            };\n            TOUCH_TARGET_EVENTS = 'touchstart touchmove touchend touchcancel';\n            inherit(TouchInput, Input, {\n                handler: function MTEhandler(ev) {\n                    var type = TOUCH_INPUT_MAP[ev.type];\n                    var touches = getTouches.call(this, ev, type);\n                    if (!touches) {\n                        return;\n                    }\n                    this.callback(this.manager, type, {\n                        pointers: touches[0],\n                        changedPointers: touches[1],\n                        pointerType: INPUT_TYPE_TOUCH,\n                        srcEvent: ev\n                    });\n                }\n            });inherit(TouchMouseInput, Input, {\n                /**\n                 * handle mouse and touch events\n                 * @param {Hammer} manager\n                 * @param {String} inputEvent\n                 * @param {Object} inputData\n                 */\n                handler: function TMEhandler(manager, inputEvent, inputData) {\n                    var isTouch = inputData.pointerType == INPUT_TYPE_TOUCH,\n                        isMouse = inputData.pointerType == INPUT_TYPE_MOUSE;\n                    // when we're in a touch event, so  block all upcoming mouse events\n                    // most mobile browser also emit mouseevents, right after touchstart\n                    if (isTouch) {\n                        this.mouse.allow = false;\n                    } else if (isMouse && !this.mouse.allow) {\n                        return;\n                    }\n                    // reset the allowMouse when we're done\n                    if (inputEvent & (INPUT_END | INPUT_CANCEL)) {\n                        this.mouse.allow = true;\n                    }\n                    this.callback(manager, inputEvent, inputData);\n                },\n                /**\n                 * remove the event listeners\n                 */\n                destroy: function destroy() {\n                    this.touch.destroy();\n                    this.mouse.destroy();\n                }\n            });\n            PREFIXED_TOUCH_ACTION = prefixed(TEST_ELEMENT.style, 'touchAction');\n            NATIVE_TOUCH_ACTION = PREFIXED_TOUCH_ACTION !== undefined;\n\n            // magical touchAction value\n            TOUCH_ACTION_COMPUTE = 'compute';\n            TOUCH_ACTION_AUTO = 'auto';\n            TOUCH_ACTION_MANIPULATION = 'manipulation';\n            // not implemented\n            TOUCH_ACTION_NONE = 'none';\n            TOUCH_ACTION_PAN_X = 'pan-x';\n            TOUCH_ACTION_PAN_Y = 'pan-y';\n            TouchAction.prototype = {\n                /**\n                 * set the touchAction value on the element or enable the polyfill\n                 * @param {String} value\n                 */\n                set: function set(value) {\n                    // find out the touch-action by the event handlers\n                    if (value == TOUCH_ACTION_COMPUTE) {\n                        value = this.compute();\n                    }\n                    if (NATIVE_TOUCH_ACTION) {\n                        this.manager.element.style[PREFIXED_TOUCH_ACTION] = value;\n                    }\n                    this.actions = value.toLowerCase().trim();\n                },\n                /**\n                 * just re-set the touchAction value\n                 */\n                update: function update() {\n                    this.set(this.manager.options.touchAction);\n                },\n                /**\n                 * compute the value for the touchAction property based on the recognizer's settings\n                 * @returns {String} value\n                 */\n                compute: function compute() {\n                    var actions = [];\n                    each(this.manager.recognizers, function (recognizer) {\n                        if (boolOrFn(recognizer.options.enable, [recognizer])) {\n                            actions = actions.concat(recognizer.getTouchAction());\n                        }\n                    });\n                    return cleanTouchActions(actions.join(' '));\n                },\n                /**\n                 * this method is called on each input cycle and provides the preventing of the browser behavior\n                 * @param {Object} input\n                 */\n                preventDefaults: function preventDefaults(input) {\n                    // not needed with native support for the touchAction property\n                    if (NATIVE_TOUCH_ACTION) {\n                        return;\n                    }\n                    var srcEvent = input.srcEvent;\n                    var direction = input.offsetDirection;\n                    // if the touch action did prevented once this session\n                    if (this.manager.session.prevented) {\n                        srcEvent.preventDefault();\n                        return;\n                    }\n                    var actions = this.actions;\n                    var hasNone = inStr(actions, TOUCH_ACTION_NONE);\n                    var hasPanY = inStr(actions, TOUCH_ACTION_PAN_Y);\n                    var hasPanX = inStr(actions, TOUCH_ACTION_PAN_X);\n                    if (hasNone || hasPanY && direction & DIRECTION_HORIZONTAL || hasPanX && direction & DIRECTION_VERTICAL) {\n                        return this.preventSrc(srcEvent);\n                    }\n                },\n                /**\n                 * call preventDefault to prevent the browser's default behavior (scrolling in most cases)\n                 * @param {Object} srcEvent\n                 */\n                preventSrc: function preventSrc(srcEvent) {\n                    this.manager.session.prevented = true;\n                    srcEvent.preventDefault();\n                }\n            };STATE_POSSIBLE = 1;\n            STATE_BEGAN = 2;\n            STATE_CHANGED = 4;\n            STATE_ENDED = 8;\n            STATE_RECOGNIZED = STATE_ENDED;\n            STATE_CANCELLED = 16;\n            STATE_FAILED = 32;\n            Recognizer.prototype = {\n                /**\n                 * @virtual\n                 * @type {Object}\n                 */\n                defaults: {},\n                /**\n                 * set options\n                 * @param {Object} options\n                 * @return {Recognizer}\n                 */\n                set: function set(options) {\n                    extend(this.options, options);\n                    // also update the touchAction, in case something changed about the directions/enabled state\n                    this.manager && this.manager.touchAction.update();\n                    return this;\n                },\n                /**\n                 * recognize simultaneous with an other recognizer.\n                 * @param {Recognizer} otherRecognizer\n                 * @returns {Recognizer} this\n                 */\n                recognizeWith: function recognizeWith(otherRecognizer) {\n                    if (invokeArrayArg(otherRecognizer, 'recognizeWith', this)) {\n                        return this;\n                    }\n                    var simultaneous = this.simultaneous;\n                    otherRecognizer = getRecognizerByNameIfManager(otherRecognizer, this);\n                    if (!simultaneous[otherRecognizer.id]) {\n                        simultaneous[otherRecognizer.id] = otherRecognizer;\n                        otherRecognizer.recognizeWith(this);\n                    }\n                    return this;\n                },\n                /**\n                 * drop the simultaneous link. it doesnt remove the link on the other recognizer.\n                 * @param {Recognizer} otherRecognizer\n                 * @returns {Recognizer} this\n                 */\n                dropRecognizeWith: function dropRecognizeWith(otherRecognizer) {\n                    if (invokeArrayArg(otherRecognizer, 'dropRecognizeWith', this)) {\n                        return this;\n                    }\n                    otherRecognizer = getRecognizerByNameIfManager(otherRecognizer, this);\n                    delete this.simultaneous[otherRecognizer.id];\n                    return this;\n                },\n                /**\n                 * recognizer can only run when an other is failing\n                 * @param {Recognizer} otherRecognizer\n                 * @returns {Recognizer} this\n                 */\n                requireFailure: function requireFailure(otherRecognizer) {\n                    if (invokeArrayArg(otherRecognizer, 'requireFailure', this)) {\n                        return this;\n                    }\n                    var requireFail = this.requireFail;\n                    otherRecognizer = getRecognizerByNameIfManager(otherRecognizer, this);\n                    if (inArray(requireFail, otherRecognizer) === -1) {\n                        requireFail.push(otherRecognizer);\n                        otherRecognizer.requireFailure(this);\n                    }\n                    return this;\n                },\n                /**\n                 * drop the requireFailure link. it does not remove the link on the other recognizer.\n                 * @param {Recognizer} otherRecognizer\n                 * @returns {Recognizer} this\n                 */\n                dropRequireFailure: function dropRequireFailure(otherRecognizer) {\n                    if (invokeArrayArg(otherRecognizer, 'dropRequireFailure', this)) {\n                        return this;\n                    }\n                    otherRecognizer = getRecognizerByNameIfManager(otherRecognizer, this);\n                    var index = inArray(this.requireFail, otherRecognizer);\n                    if (index > -1) {\n                        this.requireFail.splice(index, 1);\n                    }\n                    return this;\n                },\n                /**\n                 * has require failures boolean\n                 * @returns {boolean}\n                 */\n                hasRequireFailures: function hasRequireFailures() {\n                    return this.requireFail.length > 0;\n                },\n                /**\n                 * if the recognizer can recognize simultaneous with an other recognizer\n                 * @param {Recognizer} otherRecognizer\n                 * @returns {Boolean}\n                 */\n                canRecognizeWith: function canRecognizeWith(otherRecognizer) {\n                    return !!this.simultaneous[otherRecognizer.id];\n                },\n                /**\n                 * You should use `tryEmit` instead of `emit` directly to check\n                 * that all the needed recognizers has failed before emitting.\n                 * @param {Object} input\n                 */\n                emit: function emit(input) {\n                    var self = this;\n                    var state = this.state;\n                    function emit(withState) {\n                        self.manager.emit(self.options.event + (withState ? stateStr(state) : ''), input);\n                    }\n                    // 'panstart' and 'panmove'\n                    if (state < STATE_ENDED) {\n                        emit(true);\n                    }\n                    emit(); // simple 'eventName' events\n                    // panend and pancancel\n                    if (state >= STATE_ENDED) {\n                        emit(true);\n                    }\n                },\n                /**\n                 * Check that all the require failure recognizers has failed,\n                 * if true, it emits a gesture event,\n                 * otherwise, setup the state to FAILED.\n                 * @param {Object} input\n                 */\n                tryEmit: function tryEmit(input) {\n                    if (this.canEmit()) {\n                        return this.emit(input);\n                    }\n                    // it's failing anyway\n                    this.state = STATE_FAILED;\n                },\n                /**\n                 * can we emit?\n                 * @returns {boolean}\n                 */\n                canEmit: function canEmit() {\n                    var i = 0;\n                    while (i < this.requireFail.length) {\n                        if (!(this.requireFail[i].state & (STATE_FAILED | STATE_POSSIBLE))) {\n                            return false;\n                        }\n                        i++;\n                    }\n                    return true;\n                },\n                /**\n                 * update the recognizer\n                 * @param {Object} inputData\n                 */\n                recognize: function recognize(inputData) {\n                    // make a new copy of the inputData\n                    // so we can change the inputData without messing up the other recognizers\n                    var inputDataClone = extend({}, inputData);\n                    // is is enabled and allow recognizing?\n                    if (!boolOrFn(this.options.enable, [this, inputDataClone])) {\n                        this.reset();\n                        this.state = STATE_FAILED;\n                        return;\n                    }\n                    // reset when we've reached the end\n                    if (this.state & (STATE_RECOGNIZED | STATE_CANCELLED | STATE_FAILED)) {\n                        this.state = STATE_POSSIBLE;\n                    }\n                    this.state = this.process(inputDataClone);\n                    // the recognizer has recognized a gesture\n                    // so trigger an event\n                    if (this.state & (STATE_BEGAN | STATE_CHANGED | STATE_ENDED | STATE_CANCELLED)) {\n                        this.tryEmit(inputDataClone);\n                    }\n                },\n                /**\n                 * return the state of the recognizer\n                 * the actual recognizing happens in this method\n                 * @virtual\n                 * @param {Object} inputData\n                 * @returns {Const} STATE\n                 */\n                process: function process(inputData) {},\n                /**\n                 * return the preferred touch-action\n                 * @virtual\n                 * @returns {Array}\n                 */\n                getTouchAction: function getTouchAction() {},\n                /**\n                 * called when the gesture isn't allowed to recognize\n                 * like when another is being recognized or it is disabled\n                 * @virtual\n                 */\n                reset: function reset() {}\n            };inherit(AttrRecognizer, Recognizer, {\n                /**\n                 * @namespace\n                 * @memberof AttrRecognizer\n                 */\n                defaults: {\n                    /**\n                     * @type {Number}\n                     * @default 1\n                     */\n                    pointers: 1\n                },\n                /**\n                 * Used to check if it the recognizer receives valid input, like input.distance > 10.\n                 * @memberof AttrRecognizer\n                 * @param {Object} input\n                 * @returns {Boolean} recognized\n                 */\n                attrTest: function attrTest(input) {\n                    var optionPointers = this.options.pointers;\n                    return optionPointers === 0 || input.pointers.length === optionPointers;\n                },\n                /**\n                 * Process the input and return the state for the recognizer\n                 * @memberof AttrRecognizer\n                 * @param {Object} input\n                 * @returns {*} State\n                 */\n                process: function process(input) {\n                    var state = this.state;\n                    var eventType = input.eventType;\n                    var isRecognized = state & (STATE_BEGAN | STATE_CHANGED);\n                    var isValid = this.attrTest(input);\n                    // on cancel input and we've recognized before, return STATE_CANCELLED\n                    if (isRecognized && (eventType & INPUT_CANCEL || !isValid)) {\n                        return state | STATE_CANCELLED;\n                    } else if (isRecognized || isValid) {\n                        if (eventType & INPUT_END) {\n                            return state | STATE_ENDED;\n                        } else if (!(state & STATE_BEGAN)) {\n                            return STATE_BEGAN;\n                        }\n                        return state | STATE_CHANGED;\n                    }\n                    return STATE_FAILED;\n                }\n            });inherit(PanRecognizer, AttrRecognizer, {\n                /**\n                 * @namespace\n                 * @memberof PanRecognizer\n                 */\n                defaults: {\n                    event: 'pan',\n                    threshold: 10,\n                    pointers: 1,\n                    direction: DIRECTION_ALL\n                },\n                getTouchAction: function getTouchAction() {\n                    var direction = this.options.direction;\n                    var actions = [];\n                    if (direction & DIRECTION_HORIZONTAL) {\n                        actions.push(TOUCH_ACTION_PAN_Y);\n                    }\n                    if (direction & DIRECTION_VERTICAL) {\n                        actions.push(TOUCH_ACTION_PAN_X);\n                    }\n                    return actions;\n                },\n                directionTest: function directionTest(input) {\n                    var options = this.options;\n                    var hasMoved = true;\n                    var distance = input.distance;\n                    var direction = input.direction;\n                    var x = input.deltaX;\n                    var y = input.deltaY;\n                    // lock to axis?\n                    if (!(direction & options.direction)) {\n                        if (options.direction & DIRECTION_HORIZONTAL) {\n                            direction = x === 0 ? DIRECTION_NONE : x < 0 ? DIRECTION_LEFT : DIRECTION_RIGHT;\n                            hasMoved = x != this.pX;\n                            distance = Math.abs(input.deltaX);\n                        } else {\n                            direction = y === 0 ? DIRECTION_NONE : y < 0 ? DIRECTION_UP : DIRECTION_DOWN;\n                            hasMoved = y != this.pY;\n                            distance = Math.abs(input.deltaY);\n                        }\n                    }\n                    input.direction = direction;\n                    return hasMoved && distance > options.threshold && direction & options.direction;\n                },\n                attrTest: function attrTest(input) {\n                    return AttrRecognizer.prototype.attrTest.call(this, input) && (this.state & STATE_BEGAN || !(this.state & STATE_BEGAN) && this.directionTest(input));\n                },\n                emit: function emit(input) {\n                    this.pX = input.deltaX;\n                    this.pY = input.deltaY;\n                    var direction = directionStr(input.direction);\n                    if (direction) {\n                        this.manager.emit(this.options.event + direction, input);\n                    }\n                    this._super.emit.call(this, input);\n                }\n            });inherit(PinchRecognizer, AttrRecognizer, {\n                /**\n                 * @namespace\n                 * @memberof PinchRecognizer\n                 */\n                defaults: {\n                    event: 'pinch',\n                    threshold: 0,\n                    pointers: 2\n                },\n                getTouchAction: function getTouchAction() {\n                    return [TOUCH_ACTION_NONE];\n                },\n                attrTest: function attrTest(input) {\n                    return this._super.attrTest.call(this, input) && (Math.abs(input.scale - 1) > this.options.threshold || this.state & STATE_BEGAN);\n                },\n                emit: function emit(input) {\n                    this._super.emit.call(this, input);\n                    if (input.scale !== 1) {\n                        var inOut = input.scale < 1 ? 'in' : 'out';\n                        this.manager.emit(this.options.event + inOut, input);\n                    }\n                }\n            });inherit(PressRecognizer, Recognizer, {\n                /**\n                 * @namespace\n                 * @memberof PressRecognizer\n                 */\n                defaults: {\n                    event: 'press',\n                    pointers: 1,\n                    time: 500,\n                    threshold: 5 // a minimal movement is ok, but keep it low\n                },\n                getTouchAction: function getTouchAction() {\n                    return [TOUCH_ACTION_AUTO];\n                },\n                process: function process(input) {\n                    var options = this.options;\n                    var validPointers = input.pointers.length === options.pointers;\n                    var validMovement = input.distance < options.threshold;\n                    var validTime = input.deltaTime > options.time;\n                    this._input = input;\n                    // we only allow little movement\n                    // and we've reached an end event, so a tap is possible\n                    if (!validMovement || !validPointers || input.eventType & (INPUT_END | INPUT_CANCEL) && !validTime) {\n                        this.reset();\n                    } else if (input.eventType & INPUT_START) {\n                        this.reset();\n                        this._timer = setTimeoutContext(function () {\n                            this.state = STATE_RECOGNIZED;\n                            this.tryEmit();\n                        }, options.time, this);\n                    } else if (input.eventType & INPUT_END) {\n                        return STATE_RECOGNIZED;\n                    }\n                    return STATE_FAILED;\n                },\n                reset: function reset() {\n                    clearTimeout(this._timer);\n                },\n                emit: function emit(input) {\n                    if (this.state !== STATE_RECOGNIZED) {\n                        return;\n                    }\n                    if (input && input.eventType & INPUT_END) {\n                        this.manager.emit(this.options.event + 'up', input);\n                    } else {\n                        this._input.timeStamp = now();\n                        this.manager.emit(this.options.event, this._input);\n                    }\n                }\n            });inherit(RotateRecognizer, AttrRecognizer, {\n                /**\n                 * @namespace\n                 * @memberof RotateRecognizer\n                 */\n                defaults: {\n                    event: 'rotate',\n                    threshold: 0,\n                    pointers: 2\n                },\n                getTouchAction: function getTouchAction() {\n                    return [TOUCH_ACTION_NONE];\n                },\n                attrTest: function attrTest(input) {\n                    return this._super.attrTest.call(this, input) && (Math.abs(input.rotation) > this.options.threshold || this.state & STATE_BEGAN);\n                }\n            });inherit(SwipeRecognizer, AttrRecognizer, {\n                /**\n                 * @namespace\n                 * @memberof SwipeRecognizer\n                 */\n                defaults: {\n                    event: 'swipe',\n                    threshold: 10,\n                    velocity: 0.65,\n                    direction: DIRECTION_HORIZONTAL | DIRECTION_VERTICAL,\n                    pointers: 1\n                },\n                getTouchAction: function getTouchAction() {\n                    return PanRecognizer.prototype.getTouchAction.call(this);\n                },\n                attrTest: function attrTest(input) {\n                    var direction = this.options.direction;\n                    var velocity;\n                    if (direction & (DIRECTION_HORIZONTAL | DIRECTION_VERTICAL)) {\n                        velocity = input.velocity;\n                    } else if (direction & DIRECTION_HORIZONTAL) {\n                        velocity = input.velocityX;\n                    } else if (direction & DIRECTION_VERTICAL) {\n                        velocity = input.velocityY;\n                    }\n                    return this._super.attrTest.call(this, input) && direction & input.direction && input.distance > this.options.threshold && abs(velocity) > this.options.velocity && input.eventType & INPUT_END;\n                },\n                emit: function emit(input) {\n                    var direction = directionStr(input.direction);\n                    if (direction) {\n                        this.manager.emit(this.options.event + direction, input);\n                    }\n                    this.manager.emit(this.options.event, input);\n                }\n            });inherit(TapRecognizer, Recognizer, {\n                /**\n                 * @namespace\n                 * @memberof PinchRecognizer\n                 */\n                defaults: {\n                    event: 'tap',\n                    pointers: 1,\n                    taps: 1,\n                    interval: 300,\n                    time: 250,\n                    threshold: 2,\n                    posThreshold: 10 // a multi-tap can be a bit off the initial position\n                },\n                getTouchAction: function getTouchAction() {\n                    return [TOUCH_ACTION_MANIPULATION];\n                },\n                process: function process(input) {\n                    var options = this.options;\n                    var validPointers = input.pointers.length === options.pointers;\n                    var validMovement = input.distance < options.threshold;\n                    var validTouchTime = input.deltaTime < options.time;\n                    this.reset();\n                    if (input.eventType & INPUT_START && this.count === 0) {\n                        return this.failTimeout();\n                    }\n                    // we only allow little movement\n                    // and we've reached an end event, so a tap is possible\n                    if (validMovement && validTouchTime && validPointers) {\n                        if (input.eventType != INPUT_END) {\n                            return this.failTimeout();\n                        }\n                        var validInterval = this.pTime ? input.timeStamp - this.pTime < options.interval : true;\n                        var validMultiTap = !this.pCenter || getDistance(this.pCenter, input.center) < options.posThreshold;\n                        this.pTime = input.timeStamp;\n                        this.pCenter = input.center;\n                        if (!validMultiTap || !validInterval) {\n                            this.count = 1;\n                        } else {\n                            this.count += 1;\n                        }\n                        this._input = input;\n                        // if tap count matches we have recognized it,\n                        // else it has began recognizing...\n                        var tapCount = this.count % options.taps;\n                        if (tapCount === 0) {\n                            // no failing requirements, immediately trigger the tap event\n                            // or wait as long as the multitap interval to trigger\n                            if (!this.hasRequireFailures()) {\n                                return STATE_RECOGNIZED;\n                            } else {\n                                this._timer = setTimeoutContext(function () {\n                                    this.state = STATE_RECOGNIZED;\n                                    this.tryEmit();\n                                }, options.interval, this);\n                                return STATE_BEGAN;\n                            }\n                        }\n                    }\n                    return STATE_FAILED;\n                },\n                failTimeout: function failTimeout() {\n                    this._timer = setTimeoutContext(function () {\n                        this.state = STATE_FAILED;\n                    }, this.options.interval, this);\n                    return STATE_FAILED;\n                },\n                reset: function reset() {\n                    clearTimeout(this._timer);\n                },\n                emit: function emit() {\n                    if (this.state == STATE_RECOGNIZED) {\n                        this._input.tapCount = this.count;\n                        this.manager.emit(this.options.event, this._input);\n                    }\n                }\n            });Hammer.VERSION = '2.0.4';\n            /**\n             * default settings\n             * @namespace\n             */\n            Hammer.defaults = {\n                /**\n                 * set if DOM events are being triggered.\n                 * But this is slower and unused by simple implementations, so disabled by default.\n                 * @type {Boolean}\n                 * @default false\n                 */\n                domEvents: false,\n                /**\n                 * The value for the touchAction property/fallback.\n                 * When set to `compute` it will magically set the correct value based on the added recognizers.\n                 * @type {String}\n                 * @default compute\n                 */\n                touchAction: TOUCH_ACTION_COMPUTE,\n                /**\n                 * @type {Boolean}\n                 * @default true\n                 */\n                enable: true,\n                /**\n                 * EXPERIMENTAL FEATURE -- can be removed/changed\n                 * Change the parent input target element.\n                 * If Null, then it is being set the to main element.\n                 * @type {Null|EventTarget}\n                 * @default null\n                 */\n                inputTarget: null,\n                /**\n                 * force an input class\n                 * @type {Null|Function}\n                 * @default null\n                 */\n                inputClass: null,\n                /**\n                 * Default recognizer setup when calling `Hammer()`\n                 * When creating a new Manager these will be skipped.\n                 * @type {Array}\n                 */\n                preset: [\n                // RecognizerClass, options, [recognizeWith, ...], [requireFailure, ...]\n                [RotateRecognizer, { enable: false }], [PinchRecognizer, { enable: false }, ['rotate']], [SwipeRecognizer, { direction: DIRECTION_HORIZONTAL }], [PanRecognizer, { direction: DIRECTION_HORIZONTAL }, ['swipe']], [TapRecognizer], [TapRecognizer, { event: 'doubletap', taps: 2 }, ['tap']], [PressRecognizer]],\n                /**\n                 * Some CSS properties can be used to improve the working of Hammer.\n                 * Add them to this method and they will be set when creating a new Manager.\n                 * @namespace\n                 */\n                cssProps: {\n                    /**\n                     * Disables text selection to improve the dragging gesture. Mainly for desktop browsers.\n                     * @type {String}\n                     * @default 'none'\n                     */\n                    userSelect: 'none',\n                    /**\n                     * Disable the Windows Phone grippers when pressing an element.\n                     * @type {String}\n                     * @default 'none'\n                     */\n                    touchSelect: 'none',\n                    /**\n                     * Disables the default callout shown when you touch and hold a touch target.\n                     * On iOS, when you touch and hold a touch target such as a link, Safari displays\n                     * a callout containing information about the link. This property allows you to disable that callout.\n                     * @type {String}\n                     * @default 'none'\n                     */\n                    touchCallout: 'none',\n                    /**\n                     * Specifies whether zooming is enabled. Used by IE10>\n                     * @type {String}\n                     * @default 'none'\n                     */\n                    contentZooming: 'none',\n                    /**\n                     * Specifies that an entire element should be draggable instead of its contents. Mainly for desktop browsers.\n                     * @type {String}\n                     * @default 'none'\n                     */\n                    userDrag: 'none',\n                    /**\n                     * Overrides the highlight color shown when the user taps a link or a JavaScript\n                     * clickable element in iOS. This property obeys the alpha value, if specified.\n                     * @type {String}\n                     * @default 'rgba(0,0,0,0)'\n                     */\n                    tapHighlightColor: 'rgba(0,0,0,0)'\n                }\n            };\n            STOP = 1;\n            FORCED_STOP = 2;\n            Manager.prototype = {\n                /**\n                 * set options\n                 * @param {Object} options\n                 * @returns {Manager}\n                 */\n                set: function set(options) {\n                    extend(this.options, options);\n                    // Options that need a little more setup\n                    if (options.touchAction) {\n                        this.touchAction.update();\n                    }\n                    if (options.inputTarget) {\n                        // Clean up existing event listeners and reinitialize\n                        this.input.destroy();\n                        this.input.target = options.inputTarget;\n                        this.input.init();\n                    }\n                    return this;\n                },\n                /**\n                 * stop recognizing for this session.\n                 * This session will be discarded, when a new [input]start event is fired.\n                 * When forced, the recognizer cycle is stopped immediately.\n                 * @param {Boolean} [force]\n                 */\n                stop: function stop(force) {\n                    this.session.stopped = force ? FORCED_STOP : STOP;\n                },\n                /**\n                 * run the recognizers!\n                 * called by the inputHandler function on every movement of the pointers (touches)\n                 * it walks through all the recognizers and tries to detect the gesture that is being made\n                 * @param {Object} inputData\n                 */\n                recognize: function recognize(inputData) {\n                    var session = this.session;\n                    if (session.stopped) {\n                        return;\n                    }\n                    // run the touch-action polyfill\n                    this.touchAction.preventDefaults(inputData);\n                    var recognizer;\n                    var recognizers = this.recognizers;\n                    // this holds the recognizer that is being recognized.\n                    // so the recognizer's state needs to be BEGAN, CHANGED, ENDED or RECOGNIZED\n                    // if no recognizer is detecting a thing, it is set to `null`\n                    var curRecognizer = session.curRecognizer;\n                    // reset when the last recognizer is recognized\n                    // or when we're in a new session\n                    if (!curRecognizer || curRecognizer && curRecognizer.state & STATE_RECOGNIZED) {\n                        curRecognizer = session.curRecognizer = null;\n                    }\n                    var i = 0;\n                    while (i < recognizers.length) {\n                        recognizer = recognizers[i];\n                        // find out if we are allowed try to recognize the input for this one.\n                        // 1.   allow if the session is NOT forced stopped (see the .stop() method)\n                        // 2.   allow if we still haven't recognized a gesture in this session, or the this recognizer is the one\n                        //      that is being recognized.\n                        // 3.   allow if the recognizer is allowed to run simultaneous with the current recognized recognizer.\n                        //      this can be setup with the `recognizeWith()` method on the recognizer.\n                        if (session.stopped !== FORCED_STOP && (!curRecognizer || recognizer == curRecognizer || recognizer.canRecognizeWith(curRecognizer))) {\n                            recognizer.recognize(inputData);\n                        } else {\n                            recognizer.reset();\n                        }\n                        // if the recognizer has been recognizing the input as a valid gesture, we want to store this one as the\n                        // current active recognizer. but only if we don't already have an active recognizer\n                        if (!curRecognizer && recognizer.state & (STATE_BEGAN | STATE_CHANGED | STATE_ENDED)) {\n                            curRecognizer = session.curRecognizer = recognizer;\n                        }\n                        i++;\n                    }\n                },\n                /**\n                 * get a recognizer by its event name.\n                 * @param {Recognizer|String} recognizer\n                 * @returns {Recognizer|Null}\n                 */\n                get: function get(recognizer) {\n                    if (recognizer instanceof Recognizer) {\n                        return recognizer;\n                    }\n                    var recognizers = this.recognizers;\n                    for (var i = 0; i < recognizers.length; i++) {\n                        if (recognizers[i].options.event == recognizer) {\n                            return recognizers[i];\n                        }\n                    }\n                    return null;\n                },\n                /**\n                 * add a recognizer to the manager\n                 * existing recognizers with the same event name will be removed\n                 * @param {Recognizer} recognizer\n                 * @returns {Recognizer|Manager}\n                 */\n                add: function add(recognizer) {\n                    if (invokeArrayArg(recognizer, 'add', this)) {\n                        return this;\n                    }\n                    // remove existing\n                    var existing = this.get(recognizer.options.event);\n                    if (existing) {\n                        this.remove(existing);\n                    }\n                    this.recognizers.push(recognizer);\n                    recognizer.manager = this;\n                    this.touchAction.update();\n                    return recognizer;\n                },\n                /**\n                 * remove a recognizer by name or instance\n                 * @param {Recognizer|String} recognizer\n                 * @returns {Manager}\n                 */\n                remove: function remove(recognizer) {\n                    if (invokeArrayArg(recognizer, 'remove', this)) {\n                        return this;\n                    }\n                    var recognizers = this.recognizers;\n                    recognizer = this.get(recognizer);\n                    recognizers.splice(inArray(recognizers, recognizer), 1);\n                    this.touchAction.update();\n                    return this;\n                },\n                /**\n                 * bind event\n                 * @param {String} events\n                 * @param {Function} handler\n                 * @returns {EventEmitter} this\n                 */\n                on: function on(events, handler) {\n                    var handlers = this.handlers;\n                    each(splitStr(events), function (event) {\n                        handlers[event] = handlers[event] || [];\n                        handlers[event].push(handler);\n                    });\n                    return this;\n                },\n                /**\n                 * unbind event, leave emit blank to remove all handlers\n                 * @param {String} events\n                 * @param {Function} [handler]\n                 * @returns {EventEmitter} this\n                 */\n                off: function off(events, handler) {\n                    var handlers = this.handlers;\n                    each(splitStr(events), function (event) {\n                        if (!handler) {\n                            delete handlers[event];\n                        } else {\n                            handlers[event].splice(inArray(handlers[event], handler), 1);\n                        }\n                    });\n                    return this;\n                },\n                /**\n                 * emit event to the listeners\n                 * @param {String} event\n                 * @param {Object} data\n                 */\n                emit: function emit(event, data) {\n                    // we also want to trigger dom events\n                    if (this.options.domEvents) {\n                        triggerDomEvent(event, data);\n                    }\n                    // no handlers, so skip it all\n                    var handlers = this.handlers[event] && this.handlers[event].slice();\n                    if (!handlers || !handlers.length) {\n                        return;\n                    }\n                    data.type = event;\n                    data.preventDefault = function () {\n                        data.srcEvent.preventDefault();\n                    };\n                    var i = 0;\n                    while (i < handlers.length) {\n                        handlers[i](data);\n                        i++;\n                    }\n                },\n                /**\n                 * destroy the manager and unbinds all events\n                 * it doesn't unbind dom events, that is the user own responsibility\n                 */\n                destroy: function destroy() {\n                    this.element && toggleCssProps(this, false);\n                    this.handlers = {};\n                    this.session = {};\n                    this.input.destroy();\n                    this.element = null;\n                }\n            };extend(Hammer, {\n                INPUT_START: INPUT_START,\n                INPUT_MOVE: INPUT_MOVE,\n                INPUT_END: INPUT_END,\n                INPUT_CANCEL: INPUT_CANCEL,\n                STATE_POSSIBLE: STATE_POSSIBLE,\n                STATE_BEGAN: STATE_BEGAN,\n                STATE_CHANGED: STATE_CHANGED,\n                STATE_ENDED: STATE_ENDED,\n                STATE_RECOGNIZED: STATE_RECOGNIZED,\n                STATE_CANCELLED: STATE_CANCELLED,\n                STATE_FAILED: STATE_FAILED,\n                DIRECTION_NONE: DIRECTION_NONE,\n                DIRECTION_LEFT: DIRECTION_LEFT,\n                DIRECTION_RIGHT: DIRECTION_RIGHT,\n                DIRECTION_UP: DIRECTION_UP,\n                DIRECTION_DOWN: DIRECTION_DOWN,\n                DIRECTION_HORIZONTAL: DIRECTION_HORIZONTAL,\n                DIRECTION_VERTICAL: DIRECTION_VERTICAL,\n                DIRECTION_ALL: DIRECTION_ALL,\n                Manager: Manager,\n                Input: Input,\n                TouchAction: TouchAction,\n                TouchInput: TouchInput,\n                MouseInput: MouseInput,\n                PointerEventInput: PointerEventInput,\n                TouchMouseInput: TouchMouseInput,\n                SingleTouchInput: SingleTouchInput,\n                Recognizer: Recognizer,\n                AttrRecognizer: AttrRecognizer,\n                Tap: TapRecognizer,\n                Pan: PanRecognizer,\n                Swipe: SwipeRecognizer,\n                Pinch: PinchRecognizer,\n                Rotate: RotateRecognizer,\n                Press: PressRecognizer,\n                on: addEventListeners,\n                off: removeEventListeners,\n                each: each,\n                merge: merge,\n                extend: extend,\n                inherit: inherit,\n                bindFn: bindFn,\n                prefixed: prefixed\n            });\n            // attach to window for angular2 gesture listeners\n            window.Hammer = Hammer;\n\n            _export('Hammer', Hammer);\n        }\n    };\n});\nSystem.register('ionic/gestures/slide-edge-gesture', ['ionic/gestures/slide-gesture', '../util/util', '../util/dom'], function (_export) {\n    'use strict';\n\n    var SlideGesture, defaults, windowDimensions, SlideEdgeGesture;\n\n    var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();\n\n    var _get = function get(_x2, _x3, _x4) { var _again = true; _function: while (_again) { var object = _x2, property = _x3, receiver = _x4; _again = false; if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { _x2 = parent; _x3 = property; _x4 = receiver; _again = true; desc = parent = undefined; continue _function; } } else if ('value' in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } } };\n\n    function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\n    function _inherits(subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\n    return {\n        setters: [function (_ionicGesturesSlideGesture) {\n            SlideGesture = _ionicGesturesSlideGesture.SlideGesture;\n        }, function (_utilUtil) {\n            defaults = _utilUtil.defaults;\n        }, function (_utilDom) {\n            windowDimensions = _utilDom.windowDimensions;\n        }],\n        execute: function () {\n            SlideEdgeGesture = (function (_SlideGesture) {\n                _inherits(SlideEdgeGesture, _SlideGesture);\n\n                function SlideEdgeGesture(element) {\n                    var opts = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1];\n\n                    _classCallCheck(this, SlideEdgeGesture);\n\n                    defaults(opts, {\n                        edge: 'left',\n                        threshold: 50\n                    });\n                    _get(Object.getPrototypeOf(SlideEdgeGesture.prototype), 'constructor', this).call(this, element, opts);\n                    // Can check corners through use of eg 'left top'\n                    this.edges = opts.edge.split(' ');\n                    this.threshold = opts.threshold;\n                }\n\n                _createClass(SlideEdgeGesture, [{\n                    key: 'canStart',\n                    value: function canStart(ev) {\n                        var _this = this;\n\n                        this._d = this.getContainerDimensions();\n                        return this.edges.every(function (edge) {\n                            return _this._checkEdge(edge, ev.center);\n                        });\n                    }\n                }, {\n                    key: 'getContainerDimensions',\n                    value: function getContainerDimensions() {\n                        return {\n                            left: 0,\n                            top: 0,\n                            width: windowDimensions().width,\n                            height: windowDimensions().height\n                        };\n                    }\n                }, {\n                    key: '_checkEdge',\n                    value: function _checkEdge(edge, pos) {\n                        switch (edge) {\n                            case 'left':\n                                return pos.x <= this._d.left + this.threshold;\n                            case 'right':\n                                return pos.x >= this._d.width - this.threshold;\n                            case 'top':\n                                return pos.y <= this._d.top + this.threshold;\n                            case 'bottom':\n                                return pos.y >= this._d.height - this.threshold;\n                        }\n                    }\n                }]);\n\n                return SlideEdgeGesture;\n            })(SlideGesture);\n\n            _export('SlideEdgeGesture', SlideEdgeGesture);\n        }\n    };\n});\nSystem.register('ionic/gestures/slide-gesture', ['ionic/gestures/drag-gesture', 'ionic/util'], function (_export) {\n    'use strict';\n\n    var DragGesture, util, SlideGesture;\n\n    var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();\n\n    var _get = function get(_x2, _x3, _x4) { var _again = true; _function: while (_again) { var object = _x2, property = _x3, receiver = _x4; _again = false; if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { _x2 = parent; _x3 = property; _x4 = receiver; _again = true; desc = parent = undefined; continue _function; } } else if ('value' in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } } };\n\n    function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\n    function _inherits(subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\n    return {\n        setters: [function (_ionicGesturesDragGesture) {\n            DragGesture = _ionicGesturesDragGesture.DragGesture;\n        }, function (_ionicUtil) {\n            util = _ionicUtil;\n        }],\n        execute: function () {\n            SlideGesture = (function (_DragGesture) {\n                _inherits(SlideGesture, _DragGesture);\n\n                function SlideGesture(element) {\n                    var opts = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1];\n\n                    _classCallCheck(this, SlideGesture);\n\n                    _get(Object.getPrototypeOf(SlideGesture.prototype), 'constructor', this).call(this, element, opts);\n                    this.element = element;\n                }\n\n                /*\n                 * Get the min and max for the slide. pageX/pageY.\n                 * Only called on dragstart.\n                 */\n\n                _createClass(SlideGesture, [{\n                    key: 'getSlideBoundaries',\n                    value: function getSlideBoundaries(slide, ev) {\n                        return {\n                            min: 0,\n                            max: this.element.offsetWidth\n                        };\n                    }\n\n                    /*\n                     * Get the element's pos when the drag starts.\n                     * For example, an open side menu starts at 100% and a closed\n                     * sidemenu starts at 0%.\n                     */\n                }, {\n                    key: 'getElementStartPos',\n                    value: function getElementStartPos(slide, ev) {\n                        return 0;\n                    }\n                }, {\n                    key: 'canStart',\n                    value: function canStart() {\n                        return true;\n                    }\n                }, {\n                    key: 'onDragStart',\n                    value: function onDragStart(ev) {\n                        var _this = this;\n\n                        if (!this.canStart(ev)) return false;\n                        this.slide = {};\n                        var promise = this.onSlideBeforeStart(this.slide, ev) || Promise.resolve();\n                        promise.then(function () {\n                            var _getSlideBoundaries = _this.getSlideBoundaries(_this.slide, ev);\n\n                            var min = _getSlideBoundaries.min;\n                            var max = _getSlideBoundaries.max;\n\n                            _this.slide.min = min;\n                            _this.slide.max = max;\n                            _this.slide.elementStartPos = _this.getElementStartPos(_this.slide, ev);\n                            _this.slide.pointerStartPos = ev.center[_this.direction];\n                            _this.slide.started = true;\n                            _this.onSlideStart(_this.slide, ev);\n                        })['catch'](function () {\n                            _this.slide = null;\n                        });\n                    }\n                }, {\n                    key: 'onDrag',\n                    value: function onDrag(ev) {\n                        if (!this.slide || !this.slide.started) return;\n                        this.slide.pos = ev.center[this.direction];\n                        this.slide.distance = util.clamp(this.slide.min, this.slide.pos - this.slide.pointerStartPos + this.slide.elementStartPos, this.slide.max);\n                        this.slide.delta = this.slide.pos - this.slide.pointerStartPos;\n                        this.onSlide(this.slide, ev);\n                    }\n                }, {\n                    key: 'onDragEnd',\n                    value: function onDragEnd(ev) {\n                        if (!this.slide || !this.slide.started) return;\n                        this.onSlideEnd(this.slide, ev);\n                        this.slide = null;\n                    }\n                }, {\n                    key: 'onSlideBeforeStart',\n                    value: function onSlideBeforeStart() {}\n                }, {\n                    key: 'onSlideStart',\n                    value: function onSlideStart() {}\n                }, {\n                    key: 'onSlide',\n                    value: function onSlide() {}\n                }, {\n                    key: 'onSlideEnd',\n                    value: function onSlideEnd() {}\n                }]);\n\n                return SlideGesture;\n            })(DragGesture);\n\n            _export('SlideGesture', SlideGesture);\n        }\n    };\n});\nSystem.register('ionic/platform/platform', ['../util/util', '../util/dom'], function (_export) {\n    /**\n    +* @ngdoc service\n    +* @name platform\n    +* @module ionic\n    +* @description\n    +* Platform returns the availble information about your current platform\n    +*/\n\n    /**\n     * TODO\n     */\n    'use strict';\n\n    var getQuerystring, extend, ready, windowDimensions, flushDimensionCache, Platform, PlatformNode, platformRegistry, platformDefault;\n\n    var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();\n\n    function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\n    function insertSuperset(platformNode) {\n        var supersetPlaformName = platformNode.superset();\n        if (supersetPlaformName) {\n            // add a platform in between two exist platforms\n            // so we can build the correct hierarchy of active platforms\n            var supersetPlatform = new PlatformNode(supersetPlaformName);\n            supersetPlatform.parent(platformNode.parent());\n            supersetPlatform.child(platformNode);\n            if (supersetPlatform.parent()) {\n                supersetPlatform.parent().child(supersetPlatform);\n            }\n            platformNode.parent(supersetPlatform);\n        }\n    }\n    return {\n        setters: [function (_utilUtil) {\n            getQuerystring = _utilUtil.getQuerystring;\n            extend = _utilUtil.extend;\n        }, function (_utilDom) {\n            ready = _utilDom.ready;\n            windowDimensions = _utilDom.windowDimensions;\n            flushDimensionCache = _utilDom.flushDimensionCache;\n        }],\n        execute: function () {\n            Platform = (function () {\n                function Platform() {\n                    var _this = this;\n\n                    var platforms = arguments.length <= 0 || arguments[0] === undefined ? [] : arguments[0];\n\n                    _classCallCheck(this, Platform);\n\n                    this._platforms = platforms;\n                    this._versions = {};\n                    this._onResizes = [];\n                    this._readyPromise = new Promise(function (res) {\n                        _this._readyResolve = res;\n                    });\n                }\n\n                // Methods\n                // **********************************************\n                /**\n                 * @param {string} platformName\n                 * @returns {bool} returns true/false based on platform you place\n                 * @description\n                 * Depending on the platform name, isPlatform will return true or flase\n                 *\n                 * ```\n                 * import {Platform} 'ionic/ionic';\n                 * export MyClass {\n                 *    constructor(platform: Platform){\n                 *      this.platform = platform;\n                 *      if(this.platform.is('ios'){\n                 *        // what ever you need to do for\n                 *        // if the platfomr is ios\n                 *      }\n                 *    }\n                 * }\n                 * ```\n                 */\n\n                _createClass(Platform, [{\n                    key: 'is',\n                    value: function is(platformName) {\n                        return this._platforms.indexOf(platformName) > -1;\n                    }\n\n                    /**\n                     * @returns {array} the array of platforms\n                     * @description\n                     * Depending on what device you are on, `platforms` can return multiple values.\n                     * Each possible value is a hierarchy of platforms. For example, on an iPhone,\n                     * it would return mobile, ios, and iphone.\n                     *\n                     * ```\n                     * import {Platform} 'ionic/ionic';\n                     * export MyClass {\n                     *    constructor(platform: Platform){\n                     *      this.platform = platform;\n                     *      console.log(this.platform.platforms());\n                     *      // This will return an array of all the availble platforms\n                     *      // From if your on mobile, to mobile os, and device name\n                     *    }\n                     * }\n                     * ```\n                     */\n                }, {\n                    key: 'platforms',\n                    value: function platforms() {\n                        // get the array of active platforms, which also knows the hierarchy,\n                        // with the last one the most important\n                        return this._platforms;\n                    }\n\n                    /**\n                     * @param {string} optional platformName\n                     * @returns {object} An object with various platform info\n                     * - `{object=} `cordova`\n                     * - `{object=}` `platformOS` {str: \"9.1\", num: 9.1, major: 9, minor: 1}\n                     * - `{object=} `deviceName` Returns the name of the device\n                     * - `{object=}` `device platform` R\n                     * @description\n                     * Returns an object conta\n                     *\n                     * ```\n                     * import {Platform} 'ionic/ionic';\n                     * export MyClass {\n                     *    constructor(platform: Platform){\n                     *      this.platform = platform;\n                     *      console.log(this.platform.versions());\n                     *      // or pass in a platform name\n                     *      console.log(this.platform.versions('ios'));\n                     *    }\n                     * }\n                     * ```\n                     *\n                     */\n                }, {\n                    key: 'versions',\n                    value: function versions(platformName) {\n                        if (arguments.length) {\n                            // get a specific platform's version\n                            return this._versions[platformName];\n                        }\n                        // get all the platforms that have a valid parsed version\n                        return this._versions;\n                    }\n                }, {\n                    key: 'version',\n                    value: function version() {\n                        for (var platformName in this._versions) {\n                            if (this._versions[platformName]) {\n                                return this._versions[platformName];\n                            }\n                        }\n                        return {};\n                    }\n\n                    /**\n                     * @returns {promise}\n                     * @description\n                     * Returns a promise when the platform is ready and native functionality can be called\n                     *\n                     * ```\n                     * import {Platform} 'ionic/ionic';\n                     * export MyClass {\n                     *    constructor(platform: Platform){\n                     *      this.platform = platform;\n                     *      this.platform.ready().then(() => {\n                     *        console.log('Platform ready');\n                     *        // The platform is now ready, execute any native code you want\n                     *       });\n                     *    }\n                     * }\n                     * ```\n                     */\n                }, {\n                    key: 'ready',\n                    value: function ready() {\n                        return this._readyPromise;\n                    }\n\n                    /**\n                     * @private\n                     * TODO\n                     * @param {TODO} config  TODO\n                     * @returns {TODO} TODO\n                     */\n                }, {\n                    key: 'prepareReady',\n                    value: function prepareReady(config) {\n                        var self = this;\n                        function resolve() {\n                            self._readyResolve(config);\n                        }\n                        if (this._engineReady) {\n                            // the engine provide a ready promise, use this instead\n                            this._engineReady(resolve);\n                        } else {\n                            // there is no custom ready method from the engine\n                            // use the default dom ready\n                            ready(resolve);\n                        }\n                    }\n\n                    // Methods meant to be overridden by the engine\n                    // **********************************************\n                    // Provided NOOP methods so they do not error when\n                    // called by engines (the browser) doesn't provide them\n                }, {\n                    key: 'on',\n                    value: function on() {}\n                }, {\n                    key: 'onHardwareBackButton',\n                    value: function onHardwareBackButton() {}\n                }, {\n                    key: 'registerBackButtonAction',\n                    value: function registerBackButtonAction() {}\n                }, {\n                    key: 'exitApp',\n                    value: function exitApp() {}\n                }, {\n                    key: 'fullScreen',\n                    value: function fullScreen() {}\n                }, {\n                    key: 'showStatusBar',\n                    value: function showStatusBar() {}\n\n                    // Getter/Setter Methods\n                    // **********************************************\n                }, {\n                    key: 'url',\n                    value: function url(val) {\n                        if (arguments.length) {\n                            this._url = val;\n                            this._qs = getQuerystring(val);\n                        }\n                        return this._url;\n                    }\n                }, {\n                    key: 'query',\n                    value: function query(key) {\n                        return (this._qs || {})[key];\n                    }\n                }, {\n                    key: 'userAgent',\n                    value: function userAgent(val) {\n                        if (arguments.length) {\n                            this._ua = val;\n                        }\n                        return this._ua || '';\n                    }\n                }, {\n                    key: 'navigatorPlatform',\n                    value: function navigatorPlatform(val) {\n                        if (arguments.length) {\n                            this._bPlt = val;\n                        }\n                        return this._bPlt || '';\n                    }\n                }, {\n                    key: 'width',\n                    value: function width() {\n                        return windowDimensions().width;\n                    }\n                }, {\n                    key: 'height',\n                    value: function height() {\n                        return windowDimensions().height;\n                    }\n                }, {\n                    key: 'isPortrait',\n                    value: function isPortrait() {\n                        return this.width() < this.height();\n                    }\n                }, {\n                    key: 'isLandscape',\n                    value: function isLandscape() {\n                        return !this.isPortrait();\n                    }\n                }, {\n                    key: 'windowResize',\n                    value: function windowResize() {\n                        var self = this;\n                        clearTimeout(self._resizeTimer);\n                        self._resizeTimer = setTimeout(function () {\n                            flushDimensionCache();\n                            for (var i = 0; i < self._onResizes.length; i++) {\n                                try {\n                                    self._onResizes[i]();\n                                } catch (e) {\n                                    console.error(e);\n                                }\n                            }\n                        }, 500);\n                    }\n                }, {\n                    key: 'onResize',\n                    value: function onResize(cb) {\n                        this._onResizes.push(cb);\n                    }\n\n                    // Platform Registry\n                    // **********************************************\n                    /**\n                     * TODO\n                     * @param {TODO} platformConfig  TODO\n                     */\n                }, {\n                    key: 'testQuery',\n\n                    /**\n                     * TODO\n                     * @param {TODO} queryValue  TODO\n                     * @returns {boolean} TODO\n                     */\n                    value: function testQuery(queryValue, queryTestValue) {\n                        var valueSplit = queryValue.toLowerCase().split(';');\n                        return valueSplit.indexOf(queryTestValue) > -1;\n                    }\n\n                    /**\n                     * TODO\n                     * @param {TODO} userAgentExpression  TODO\n                     * @returns {boolean} TODO\n                     */\n                }, {\n                    key: 'testUserAgent',\n                    value: function testUserAgent(userAgentExpression) {\n                        var rgx = new RegExp(userAgentExpression, 'i');\n                        return rgx.test(this._ua || '');\n                    }\n\n                    /**\n                     * TODO\n                     * @param {TODO} navigatorPlatformExpression  TODO\n                     * @returns {boolean} TODO\n                     */\n                }, {\n                    key: 'testNavigatorPlatform',\n                    value: function testNavigatorPlatform(navigatorPlatformExpression) {\n                        return navigatorPlatformExpression.test(this._bPlt || '');\n                    }\n\n                    /**\n                     * TODO\n                     * @param {TODO} userAgentExpression  TODO\n                     * @returns {Object} TODO\n                     */\n                }, {\n                    key: 'matchUserAgentVersion',\n                    value: function matchUserAgentVersion(userAgentExpression) {\n                        if (this._ua && userAgentExpression) {\n                            var val = this._ua.match(userAgentExpression);\n                            if (val) {\n                                return {\n                                    major: val[1],\n                                    minor: val[2]\n                                };\n                            }\n                        }\n                    }\n\n                    /**\n                     * TODO\n                     * @param {TODO} queryValue  TODO\n                     * @param {TODO} userAgentExpression  TODO\n                     * @returns {boolean} TODO\n                     */\n                }, {\n                    key: 'isPlatform',\n                    value: function isPlatform(queryTestValue, userAgentExpression) {\n                        if (!userAgentExpression) {\n                            userAgentExpression = queryTestValue;\n                        }\n                        var queryValue = this.query('ionicplatform');\n                        if (queryValue) {\n                            return this.testQuery(queryValue, queryTestValue);\n                        }\n                        return this.testUserAgent(userAgentExpression);\n                    }\n\n                    /**\n                     * TODO\n                     * @param {TODO} config  TODO\n                     */\n                }, {\n                    key: 'load',\n                    value: function load(platformOverride) {\n                        var rootPlatformNode = null;\n                        var engineNode = null;\n                        var self = this;\n                        this.platformOverride = platformOverride;\n                        // figure out the most specific platform and active engine\n                        var tmpPlatform = null;\n                        for (var platformName in platformRegistry) {\n                            tmpPlatform = this.matchPlatform(platformName);\n                            if (tmpPlatform) {\n                                // we found a platform match!\n                                // check if its more specific than the one we already have\n                                if (tmpPlatform.isEngine) {\n                                    // because it matched then this should be the active engine\n                                    // you cannot have more than one active engine\n                                    engineNode = tmpPlatform;\n                                } else if (!rootPlatformNode || tmpPlatform.depth > rootPlatformNode.depth) {\n                                    // only find the root node for platforms that are not engines\n                                    // set this node as the root since we either don't already\n                                    // have one, or this one is more specific that the current one\n                                    rootPlatformNode = tmpPlatform;\n                                }\n                            }\n                        }\n                        if (!rootPlatformNode) {\n                            rootPlatformNode = new PlatformNode(platformDefault);\n                        }\n                        // build a Platform instance filled with the\n                        // hierarchy of active platforms and settings\n                        if (rootPlatformNode) {\n                            // check if we found an engine node (cordova/node-webkit/etc)\n                            if (engineNode) {\n                                // add the engine to the first in the platform hierarchy\n                                // the original rootPlatformNode now becomes a child\n                                // of the engineNode, which is not the new root\n                                engineNode.child(rootPlatformNode);\n                                rootPlatformNode.parent(engineNode);\n                                rootPlatformNode = engineNode;\n                                // add any events which the engine would provide\n                                // for example, Cordova provides its own ready event\n                                var engineMethods = engineNode.methods();\n                                engineMethods._engineReady = engineMethods.ready;\n                                delete engineMethods.ready;\n                                extend(this, engineMethods);\n                            }\n                            var platformNode = rootPlatformNode;\n                            while (platformNode) {\n                                insertSuperset(platformNode);\n                                platformNode = platformNode.child();\n                            }\n                            // make sure the root noot is actually the root\n                            // incase a node was inserted before the root\n                            platformNode = rootPlatformNode.parent();\n                            while (platformNode) {\n                                rootPlatformNode = platformNode;\n                                platformNode = platformNode.parent();\n                            }\n                            platformNode = rootPlatformNode;\n                            while (platformNode) {\n                                // set the array of active platforms with\n                                // the last one in the array the most important\n                                this._platforms.push(platformNode.name());\n                                // get the platforms version if a version parser was provided\n                                this._versions[platformNode.name()] = platformNode.version(this);\n                                // go to the next platform child\n                                platformNode = platformNode.child();\n                            }\n                        }\n                    }\n\n                    /**\n                     * TODO\n                     * @param {TODO} platformName  TODO\n                     * @returns {TODO} TODO\n                     */\n                }, {\n                    key: 'matchPlatform',\n                    value: function matchPlatform(platformName) {\n                        // build a PlatformNode and assign config data to it\n                        // use it's getRoot method to build up its hierarchy\n                        // depending on which platforms match\n                        var platformNode = new PlatformNode(platformName);\n                        var rootNode = platformNode.getRoot(this, 0);\n                        if (rootNode) {\n                            rootNode.depth = 0;\n                            var childPlatform = rootNode.child();\n                            while (childPlatform) {\n                                rootNode.depth++;\n                                childPlatform = childPlatform.child();\n                            }\n                        }\n                        return rootNode;\n                    }\n                }], [{\n                    key: 'register',\n                    value: function register(platformConfig) {\n                        platformRegistry[platformConfig.name] = platformConfig;\n                    }\n                }, {\n                    key: 'registry',\n                    value: function registry() {\n                        return platformRegistry;\n                    }\n\n                    /**\n                     * TODO\n                     * @param {TODO} platformName  TODO\n                     * @returns {string} TODO\n                     */\n                }, {\n                    key: 'get',\n                    value: function get(platformName) {\n                        return platformRegistry[platformName] || {};\n                    }\n                }, {\n                    key: 'setDefault',\n                    value: function setDefault(platformName) {\n                        platformDefault = platformName;\n                    }\n                }]);\n\n                return Platform;\n            })();\n\n            _export('Platform', Platform);\n\n            PlatformNode = (function () {\n                function PlatformNode(platformName) {\n                    _classCallCheck(this, PlatformNode);\n\n                    this.c = Platform.get(platformName);\n                    this.isEngine = this.c.isEngine;\n                }\n\n                _createClass(PlatformNode, [{\n                    key: 'name',\n                    value: function name() {\n                        return this.c.name;\n                    }\n                }, {\n                    key: 'settings',\n                    value: function settings() {\n                        return this.c.settings || {};\n                    }\n                }, {\n                    key: 'superset',\n                    value: function superset() {\n                        return this.c.superset;\n                    }\n                }, {\n                    key: 'methods',\n                    value: function methods() {\n                        return this.c.methods || {};\n                    }\n                }, {\n                    key: 'parent',\n                    value: function parent(val) {\n                        if (arguments.length) {\n                            this._parent = val;\n                        }\n                        return this._parent;\n                    }\n                }, {\n                    key: 'child',\n                    value: function child(val) {\n                        if (arguments.length) {\n                            this._child = val;\n                        }\n                        return this._child;\n                    }\n                }, {\n                    key: 'isMatch',\n                    value: function isMatch(p) {\n                        if (p.platformOverride && !this.isEngine) {\n                            return p.platformOverride === this.c.name;\n                        } else if (!this.c.isMatch) {\n                            return false;\n                        }\n                        return this.c.isMatch(p);\n                    }\n                }, {\n                    key: 'version',\n                    value: function version(p) {\n                        if (this.c.versionParser) {\n                            var v = this.c.versionParser(p);\n                            if (v) {\n                                var str = v.major + '.' + v.minor;\n                                return {\n                                    str: str,\n                                    num: parseFloat(str),\n                                    major: parseInt(v.major, 10),\n                                    minor: parseInt(v.minor, 10)\n                                };\n                            }\n                        }\n                    }\n                }, {\n                    key: 'getRoot',\n                    value: function getRoot(p) {\n                        if (this.isMatch(p)) {\n                            var parents = this.getSubsetParents(this.name());\n                            if (!parents.length) {\n                                return this;\n                            }\n                            var platform = null;\n                            var rootPlatform = null;\n                            for (var i = 0; i < parents.length; i++) {\n                                platform = new PlatformNode(parents[i]);\n                                platform.child(this);\n                                rootPlatform = platform.getRoot(p);\n                                if (rootPlatform) {\n                                    this.parent(platform);\n                                    return rootPlatform;\n                                }\n                            }\n                        }\n                        return null;\n                    }\n                }, {\n                    key: 'getSubsetParents',\n                    value: function getSubsetParents(subsetPlatformName) {\n                        var platformRegistry = Platform.registry();\n                        var parentPlatformNames = [];\n                        var platform = null;\n                        for (var platformName in platformRegistry) {\n                            platform = platformRegistry[platformName];\n                            if (platform.subsets && platform.subsets.indexOf(subsetPlatformName) > -1) {\n                                parentPlatformNames.push(platformName);\n                            }\n                        }\n                        return parentPlatformNames;\n                    }\n                }]);\n\n                return PlatformNode;\n            })();\n\n            platformRegistry = {};\n            platformDefault = null;\n        }\n    };\n});\nSystem.register('ionic/platform/registry', ['./platform', '../util/dom'], function (_export) {\n    'use strict';\n\n    var Platform, windowLoad;\n\n    function isIOSDevice(p) {\n        // shortcut function to be reused internally\n        // checks navigator.platform to see if it's an actual iOS device\n        // this does not use the user-agent string because it is often spoofed\n        // an actual iPad will return true, a chrome dev tools iPad will return false\n        return p.testNavigatorPlatform(/iphone|ipad|ipod/i);\n    }\n    return {\n        setters: [function (_platform) {\n            Platform = _platform.Platform;\n        }, function (_utilDom) {\n            windowLoad = _utilDom.windowLoad;\n        }],\n        execute: function () {\n            Platform.register({\n                name: 'core',\n                settings: {\n                    mode: 'ios',\n                    keyboardHeight: 290\n                }\n            });\n            Platform.setDefault('core');\n            Platform.register({\n                name: 'mobile'\n            });\n            Platform.register({\n                name: 'phablet',\n                isMatch: function isMatch(p) {\n                    var smallest = Math.min(p.width(), p.height());\n                    var largest = Math.max(p.width(), p.height());\n                    return smallest > 390 && smallest < 520 && largest > 620 && largest < 800;\n                }\n            });\n            Platform.register({\n                name: 'tablet',\n                isMatch: function isMatch(p) {\n                    var smallest = Math.min(p.width(), p.height());\n                    var largest = Math.max(p.width(), p.height());\n                    return smallest > 460 && smallest < 820 && largest > 780 && largest < 1400;\n                }\n            });\n            Platform.register({\n                name: 'android',\n                superset: 'mobile',\n                subsets: ['phablet', 'tablet'],\n                settings: {\n                    activator: function activator(p) {\n                        // md mode defaults to use ripple activator\n                        // however, under-powered devices shouldn't use ripple\n                        // if this a linux device, and is using Android Chrome v36 (Android 5.0)\n                        // or above then use ripple, otherwise do not use a ripple effect\n                        if (p.testNavigatorPlatform('/linux/i')) {\n                            var chromeVersion = p.matchUserAgentVersion(/Chrome\\/(\\d+).(\\d+)?/);\n                            if (chromeVersion) {\n                                // linux android device using modern android chrome browser gets ripple\n                                return parseInt(chromeVersion.major, 10) < 36 ? 'none' : 'ripple';\n                            }\n                            // linux android device not using chrome browser checks just android's version\n                            if (p.version().major < 5) {\n                                return 'none';\n                            }\n                        }\n                        // fallback to always use ripple\n                        return 'ripple';\n                    },\n                    hoverCSS: false,\n                    keyboardHeight: 300,\n                    mode: 'md',\n                    scrollAssist: true\n                },\n                isMatch: function isMatch(p) {\n                    return p.isPlatform('android', 'android|silk');\n                },\n                versionParser: function versionParser(p) {\n                    return p.matchUserAgentVersion(/Android (\\d+).(\\d+)?/);\n                }\n            });\n            Platform.register({\n                name: 'ios',\n                superset: 'mobile',\n                subsets: ['ipad', 'iphone'],\n                settings: {\n                    clickBlock: true,\n                    hoverCSS: false,\n                    keyboardHeight: 300,\n                    mode: 'ios',\n                    scrollAssist: isIOSDevice,\n                    swipeBackEnabled: isIOSDevice,\n                    swipeBackThreshold: 40,\n                    tapPolyfill: isIOSDevice\n                },\n                isMatch: function isMatch(p) {\n                    return p.isPlatform('ios', 'iphone|ipad|ipod');\n                },\n                versionParser: function versionParser(p) {\n                    return p.matchUserAgentVersion(/OS (\\d+)_(\\d+)?/);\n                }\n            });\n            Platform.register({\n                name: 'ipad',\n                superset: 'tablet',\n                settings: {\n                    keyboardHeight: 500\n                },\n                isMatch: function isMatch(p) {\n                    return p.isPlatform('ipad');\n                }\n            });\n            Platform.register({\n                name: 'iphone',\n                subsets: ['phablet'],\n                isMatch: function isMatch(p) {\n                    return p.isPlatform('iphone');\n                }\n            });\n            Platform.register({\n                name: 'windowsphone',\n                superset: 'mobile',\n                subsets: ['phablet', 'tablet'],\n                settings: {\n                    mode: 'md'\n                },\n                isMatch: function isMatch(p) {\n                    return p.isPlatform('windowsphone', 'windows phone');\n                },\n                versionParser: function versionParser(p) {\n                    return p.matchUserAgentVersion(/Windows Phone (\\d+).(\\d+)?/);\n                }\n            });\n            Platform.register({\n                name: 'cordova',\n                isEngine: true,\n                methods: {\n                    ready: function ready(resolve) {\n                        function isReady() {\n                            document.removeEventListener('deviceready', isReady);\n                            resolve();\n                        }\n                        windowLoad(function () {\n                            document.addEventListener('deviceready', isReady);\n                        });\n                    }\n                },\n                isMatch: function isMatch() {\n                    return !!(window.cordova || window.PhoneGap || window.phonegap);\n                }\n            });\n        }\n    };\n});\nSystem.register('ionic/platform/storage', ['./storage/storage', './storage/local-storage', './storage/sql'], function (_export) {\n  'use strict';\n\n  return {\n    setters: [function (_storageStorage) {\n      for (var _key in _storageStorage) {\n        if (_key !== 'default') _export(_key, _storageStorage[_key]);\n      }\n    }, function (_storageLocalStorage) {\n      for (var _key2 in _storageLocalStorage) {\n        if (_key2 !== 'default') _export(_key2, _storageLocalStorage[_key2]);\n      }\n    }, function (_storageSql) {\n      for (var _key3 in _storageSql) {\n        if (_key3 !== 'default') _export(_key3, _storageSql[_key3]);\n      }\n    }],\n    execute: function () {}\n  };\n});\nSystem.register(\"ionic/translation/translate\", [\"angular2/angular2\"], function (_export) {\n    /**\n     * @private\n     * Provide multi-language and i18n support in your app. Translate works by\n     * mapping full strings to language translated ones. That means that you don't need\n     * to provide strings for your default language, just new languages.\n     *\n     * @usage\n     * ```js\n     * Translate.translations({\n     *   'de': {\n     *     'Welcome to MyApp': 'Willkommen auf'\n     *   }\n     * })\n     *\n     * Changing the default language:\n     *\n     * Translate.setLanguage('de');\n     * ```\n     *\n     * Usage in a template:\n     *\n     * ```js\n     * <span>{{ 'Welcome to MyApp' | translate }}\n     * ```\n     */\n    \"use strict\";\n\n    var Injectable, __decorate, __metadata, Translate;\n\n    var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();\n\n    function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n    return {\n        setters: [function (_angular2Angular2) {\n            Injectable = _angular2Angular2.Injectable;\n        }],\n        execute: function () {\n            __decorate = undefined && undefined.__decorate || function (decorators, target, key, desc) {\n                if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") return Reflect.decorate(decorators, target, key, desc);\n                switch (arguments.length) {\n                    case 2:\n                        return decorators.reduceRight(function (o, d) {\n                            return d && d(o) || o;\n                        }, target);\n                    case 3:\n                        return decorators.reduceRight(function (o, d) {\n                            return d && d(target, key), void 0;\n                        }, void 0);\n                    case 4:\n                        return decorators.reduceRight(function (o, d) {\n                            return d && d(target, key, o) || o;\n                        }, desc);\n                }\n            };\n\n            __metadata = undefined && undefined.__metadata || function (k, v) {\n                if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n            };\n\n            Translate = (function () {\n                function Translate() {\n                    _classCallCheck(this, Translate);\n\n                    this._transMap = {};\n                }\n\n                _createClass(Translate, [{\n                    key: \"translations\",\n                    value: function translations(lang, map) {\n                        this._transMap[lang] = map;\n                    }\n                }, {\n                    key: \"setLanguage\",\n                    value: function setLanguage(lang) {\n                        this._language = lang;\n                    }\n                }, {\n                    key: \"getTranslations\",\n                    value: function getTranslations(lang) {\n                        return this._transMap[lang];\n                    }\n                }, {\n                    key: \"translate\",\n                    value: function translate(key, lang) {\n                        // If the language isn't specified and we have no overridden one, return the string passed.\n                        if (!lang && !this._language) {\n                            return key;\n                        }\n                        var setLanguage = lang || this._language;\n                        var map = this.getTranslations(setLanguage);\n                        if (!map) {\n                            console.warn('I18N: No translation for key', key, 'using language', setLanguage);\n                            return '';\n                        }\n                        return this._getTranslation(map, key);\n                    }\n                }, {\n                    key: \"_getTranslation\",\n                    value: function _getTranslation(map, key) {\n                        return map && map[key] || '';\n                    }\n                }]);\n\n                return Translate;\n            })();\n\n            _export(\"Translate\", Translate);\n\n            _export(\"Translate\", Translate = __decorate([Injectable(), __metadata('design:paramtypes', [])], Translate));\n        }\n    };\n});\nSystem.register(\"ionic/translation/translate_pipe\", [\"angular2/angular2\", \"./translate\"], function (_export) {\n    /**\n     * @private\n     * The Translate pipe makes it easy to translate strings.\n     *\n     * @usage\n     * Translate using the current language or language set through Translate.setLanguage\n     * {{ 'Please enter your location' | translate }}\n     *\n     * Translate using a specific language\n     * {{ 'Please enter your location' | translate:\"de\" }}\n     */\n    \"use strict\";\n\n    var Injectable, Pipe, Translate, __decorate, __metadata, TranslatePipe, _a;\n\n    var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();\n\n    function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n    return {\n        setters: [function (_angular2Angular2) {\n            Injectable = _angular2Angular2.Injectable;\n            Pipe = _angular2Angular2.Pipe;\n        }, function (_translate) {\n            Translate = _translate.Translate;\n        }],\n        execute: function () {\n            __decorate = undefined && undefined.__decorate || function (decorators, target, key, desc) {\n                if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") return Reflect.decorate(decorators, target, key, desc);\n                switch (arguments.length) {\n                    case 2:\n                        return decorators.reduceRight(function (o, d) {\n                            return d && d(o) || o;\n                        }, target);\n                    case 3:\n                        return decorators.reduceRight(function (o, d) {\n                            return d && d(target, key), void 0;\n                        }, void 0);\n                    case 4:\n                        return decorators.reduceRight(function (o, d) {\n                            return d && d(target, key, o) || o;\n                        }, desc);\n                }\n            };\n\n            __metadata = undefined && undefined.__metadata || function (k, v) {\n                if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n            };\n\n            TranslatePipe = (function () {\n                function TranslatePipe(translate) {\n                    _classCallCheck(this, TranslatePipe);\n\n                    this.translate = translate;\n                }\n\n                _createClass(TranslatePipe, [{\n                    key: \"transform\",\n                    value: function transform(value, args) {\n                        var lang = undefined;\n                        if (args.length > 0) {\n                            lang = args[0];\n                        }\n                        return this.translate.translate(value, lang);\n                    }\n                }, {\n                    key: \"supports\",\n                    value: function supports(obj) {\n                        return true;\n                    }\n                }]);\n\n                return TranslatePipe;\n            })();\n\n            _export(\"TranslatePipe\", TranslatePipe);\n\n            _export(\"TranslatePipe\", TranslatePipe = __decorate([Pipe({ name: 'translate' }), Injectable(), __metadata('design:paramtypes', [typeof (_a = typeof Translate !== 'undefined' && Translate) === 'function' && _a || Object])], TranslatePipe));\n        }\n    };\n});\nSystem.register('ionic/util/click-block', [], function (_export) {\n    'use strict';\n\n    var CSS_CLICK_BLOCK, DEFAULT_EXPIRE, cbEle, fallbackTimerId, isShowing, ClickBlock;\n\n    var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();\n\n    function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\n    function _show(expire) {\n        clearTimeout(fallbackTimerId);\n        fallbackTimerId = setTimeout(hide, expire || DEFAULT_EXPIRE);\n        if (!isShowing) {\n            cbEle.classList.add(CSS_CLICK_BLOCK);\n            isShowing = true;\n        }\n    }\n    function hide() {\n        clearTimeout(fallbackTimerId);\n        if (isShowing) {\n            cbEle.classList.remove(CSS_CLICK_BLOCK);\n            isShowing = false;\n        }\n    }\n    return {\n        setters: [],\n        execute: function () {\n            CSS_CLICK_BLOCK = 'click-block-active';\n            DEFAULT_EXPIRE = 330;\n            cbEle = undefined;\n            fallbackTimerId = undefined;\n            isShowing = false;\n\n            /**\n             * @private\n             */\n\n            ClickBlock = (function () {\n                function ClickBlock() {\n                    _classCallCheck(this, ClickBlock);\n                }\n\n                _createClass(ClickBlock, [{\n                    key: 'enable',\n                    value: function enable() {\n                        cbEle = document.createElement('click-block');\n                        document.body.appendChild(cbEle);\n                        cbEle.addEventListener('touchmove', function (ev) {\n                            ev.preventDefault();\n                            ev.stopPropagation();\n                        });\n                        this._enabled = true;\n                    }\n                }, {\n                    key: 'show',\n                    value: function show(shouldShow, expire) {\n                        if (this._enabled) {\n                            if (shouldShow) {\n                                _show(expire);\n                            } else {\n                                hide();\n                            }\n                        }\n                    }\n                }]);\n\n                return ClickBlock;\n            })();\n\n            _export('ClickBlock', ClickBlock);\n        }\n    };\n});\nSystem.register('ionic/util/dom', [], function (_export) {\n    'use strict';\n\n    var nativeRaf, nativeCancelRaf, _raf, rafCancel, CSS, matchesFn, dimensionCache, dimensionIds;\n\n    _export('raf', raf);\n\n    _export('rafFrames', rafFrames);\n\n    _export('transitionEnd', transitionEnd);\n\n    _export('animationStart', animationStart);\n\n    _export('animationEnd', animationEnd);\n\n    _export('ready', ready);\n\n    _export('windowLoad', windowLoad);\n\n    _export('pointerCoord', pointerCoord);\n\n    _export('hasPointerMoved', hasPointerMoved);\n\n    _export('isActive', isActive);\n\n    _export('hasFocus', hasFocus);\n\n    _export('isTextInput', isTextInput);\n\n    _export('hasFocusedTextInput', hasFocusedTextInput);\n\n    _export('closest', closest);\n\n    /**\n     * Get the element offsetWidth and offsetHeight. Values are cached\n     * to reduce DOM reads. Cache is cleared on a window resize.\n     * @param {TODO} ele  TODO\n     */\n\n    _export('removeElement', removeElement);\n\n    _export('getDimensions', getDimensions);\n\n    _export('windowDimensions', windowDimensions);\n\n    _export('flushDimensionCache', flushDimensionCache);\n\n    _export('parentOffsetEl', parentOffsetEl);\n\n    /**\n    * Get the current coordinates of the element, relative to the document.\n    * Read-only equivalent of [jQuery's offset function](http://api.jquery.com/offset/).\n    * @param {element} element The element to get the offset of.\n    * @returns {object} Returns an object containing the properties top, left, width and height.\n    */\n\n    _export('position', position);\n\n    _export('offset', offset);\n\n    function raf(callback) {\n        //console.log('raf', callback.toString().replace(/\\s/g, '').replace('function', '').substring(0, 50));\n        //console.log('raf, isRootZone()', zone.isRootZone(), '$id', zone.$id);\n        _raf(callback);\n    }\n\n    function rafFrames(framesToWait, callback) {\n        framesToWait = Math.ceil(framesToWait);\n        if (framesToWait < 2) {\n            raf(callback);\n        } else {\n            setTimeout(function () {\n                raf(callback);\n            }, (framesToWait - 1) * 17);\n        }\n    }\n\n    function transitionEnd(el) {\n        return cssPromise(el, CSS.transitionEnd);\n    }\n\n    function animationStart(el, animationName) {\n        return cssPromise(el, CSS.animationStart, animationName);\n    }\n\n    function animationEnd(el, animationName) {\n        return cssPromise(el, CSS.animationEnd, animationName);\n    }\n\n    function cssPromise(el, eventNames, animationName) {\n        return new Promise(function (resolve) {\n            eventNames.split(' ').forEach(function (eventName) {\n                el.addEventListener(eventName, onEvent);\n            });\n            function onEvent(ev) {\n                if (ev.animationName && animationName) {\n                    // do not resolve if a bubbled up ev.animationName\n                    // is not the same as the passed in animationName arg\n                    if (ev.animationName !== animationName) {\n                        return;\n                    }\n                } else if (ev.target !== el) {\n                    // do not resolve if the event's target element is not\n                    // the same as the element the listener was added to\n                    return;\n                }\n                ev.stopPropagation();\n                eventNames.split(' ').forEach(function (eventName) {\n                    el.removeEventListener(eventName, onEvent);\n                });\n                resolve(ev);\n            }\n        });\n    }\n\n    function ready(callback) {\n        var promise = null;\n        if (!callback) {\n            // a callback wasn't provided, so let's return a promise instead\n            promise = new Promise(function (resolve) {\n                callback = resolve;\n            });\n        }\n        if (document.readyState === 'complete' || document.readyState === 'interactive') {\n            callback();\n        } else {\n            (function () {\n                var completed = function completed() {\n                    document.removeEventListener('DOMContentLoaded', completed, false);\n                    window.removeEventListener('load', completed, false);\n                    callback();\n                };\n\n                document.addEventListener('DOMContentLoaded', completed, false);\n                window.addEventListener('load', completed, false);\n            })();\n        }\n        return promise;\n    }\n\n    function windowLoad(callback) {\n        var promise = null;\n        if (!callback) {\n            // a callback wasn't provided, so let's return a promise instead\n            promise = new Promise(function (resolve) {\n                callback = resolve;\n            });\n        }\n        if (document.readyState === 'complete') {\n            callback();\n        } else {\n            (function () {\n                var completed = function completed() {\n                    window.removeEventListener('load', completed, false);\n                    callback();\n                };\n\n                window.addEventListener('load', completed, false);\n            })();\n        }\n        return promise;\n    }\n\n    function pointerCoord(ev) {\n        // get coordinates for either a mouse click\n        // or a touch depending on the given event\n        var c = { x: 0, y: 0 };\n        if (ev) {\n            var touches = ev.touches && ev.touches.length ? ev.touches : [ev];\n            var e = ev.changedTouches && ev.changedTouches[0] || touches[0];\n            if (e) {\n                c.x = e.clientX || e.pageX || 0;\n                c.y = e.clientY || e.pageY || 0;\n            }\n        }\n        return c;\n    }\n\n    function hasPointerMoved(threshold, startCoord, endCoord) {\n        return startCoord && endCoord && (Math.abs(startCoord.x - endCoord.x) > threshold || Math.abs(startCoord.y - endCoord.y) > threshold);\n    }\n\n    function isActive(ele) {\n        return !!(ele && document.activeElement === ele);\n    }\n\n    function hasFocus(ele) {\n        return isActive(ele) && ele.parentElement.querySelector(':focus') === ele;\n    }\n\n    function isTextInput(ele) {\n        return !!ele && (ele.tagName == 'TEXTAREA' || ele.contentEditable === 'true' || ele.tagName == 'INPUT' && !/^(radio|checkbox|range|file|submit|reset|color|image|button)$/i.test(ele.type));\n    }\n\n    function hasFocusedTextInput() {\n        var ele = document.activeElement;\n        if (isTextInput(ele)) {\n            return ele.parentElement.querySelector(':focus') === ele;\n        }\n        return false;\n    }\n\n    function closest(ele, selector, checkSelf) {\n        if (ele && matchesFn) {\n            // traverse parents\n            ele = checkSelf ? ele : ele.parentElement;\n            while (ele !== null) {\n                if (ele[matchesFn](selector)) {\n                    return ele;\n                }\n                ele = ele.parentElement;\n            }\n        }\n        return null;\n    }\n\n    function removeElement(ele) {\n        ele && ele.parentNode && ele.parentNode.removeChild(ele);\n    }\n\n    function getDimensions(ion, ele) {\n        if (!ion._dimId) {\n            ion._dimId = ++dimensionIds;\n            if (ion._dimId % 1000 === 0) {\n                // periodically flush dimensions\n                flushDimensionCache();\n            }\n        }\n        var dimensions = dimensionCache[ion._dimId];\n        if (!dimensions) {\n            var _ele = ion.getNativeElement();\n            // make sure we got good values before caching\n            if (_ele.offsetWidth && _ele.offsetHeight) {\n                dimensions = dimensionCache[ion._dimId] = {\n                    width: _ele.offsetWidth,\n                    height: _ele.offsetHeight,\n                    left: _ele.offsetLeft,\n                    top: _ele.offsetTop\n                };\n            } else {\n                // do not cache bad values\n                return { width: 0, height: 0, left: 0, top: 0 };\n            }\n        }\n        return dimensions;\n    }\n\n    function windowDimensions() {\n        if (!dimensionCache.win) {\n            // make sure we got good values before caching\n            if (window.innerWidth && window.innerHeight) {\n                dimensionCache.win = {\n                    width: window.innerWidth,\n                    height: window.innerHeight\n                };\n            } else {\n                // do not cache bad values\n                return { width: 0, height: 0 };\n            }\n        }\n        return dimensionCache.win;\n    }\n\n    function flushDimensionCache() {\n        dimensionCache = {};\n    }\n\n    function isStaticPositioned(element) {\n        return (element.style.position || 'static') === 'static';\n    }\n    /**\n     * returns the closest, non-statically positioned parentOffset of a given element\n     * @param element\n     */\n\n    function parentOffsetEl(element) {\n        var offsetParent = element.offsetParent || document;\n        while (offsetParent && offsetParent !== document && isStaticPositioned(offsetParent)) {\n            offsetParent = offsetParent.offsetParent;\n        }\n        return offsetParent || document;\n    }\n\n    /**\n     * Get the current coordinates of the element, relative to the offset parent.\n     * Read-only equivalent of [jQuery's position function](http://api.jquery.com/position/).\n     * @param {element} element The element to get the position of.\n     * @returns {object} Returns an object containing the properties top, left, width and height.\n     */\n\n    function position(element) {\n        var elBCR = offset(element);\n        var offsetParentBCR = { top: 0, left: 0 };\n        var offsetParentEl = parentOffsetEl(element);\n        if (offsetParentEl != document) {\n            offsetParentBCR = offset(offsetParentEl);\n            offsetParentBCR.top += offsetParentEl.clientTop - offsetParentEl.scrollTop;\n            offsetParentBCR.left += offsetParentEl.clientLeft - offsetParentEl.scrollLeft;\n        }\n        var boundingClientRect = element.getBoundingClientRect();\n        return {\n            width: boundingClientRect.width || element.offsetWidth,\n            height: boundingClientRect.height || element.offsetHeight,\n            top: elBCR.top - offsetParentBCR.top,\n            left: elBCR.left - offsetParentBCR.left\n        };\n    }\n\n    function offset(element) {\n        var boundingClientRect = element.getBoundingClientRect();\n        return {\n            width: boundingClientRect.width || element.offsetWidth,\n            height: boundingClientRect.height || element.offsetHeight,\n            top: boundingClientRect.top + (window.pageYOffset || document.documentElement.scrollTop),\n            left: boundingClientRect.left + (window.pageXOffset || document.documentElement.scrollLeft)\n        };\n    }\n\n    return {\n        setters: [],\n        execute: function () {\n            nativeRaf = window.requestAnimationFrame || window.webkitRequestAnimationFrame || window.mozRequestAnimationFrame;\n            nativeCancelRaf = window.cancelAnimationFrame || window.webkitCancelAnimationFrame || window.webkitCancelRequestAnimationFrame;\n\n            _raf = nativeRaf || function (callback) {\n                var timeCurrent = new Date().getTime(),\n                    timeDelta = undefined;\n                /* Dynamically set delay on a per-tick basis to match 60fps. */\n                /* Technique by Erik Moller. MIT license: https://gist.github.com/paulirish/1579671 */\n                timeDelta = Math.max(0, 16 - (timeCurrent - timeLast));\n                timeLast = timeCurrent + timeDelta;\n                return setTimeout(function () {\n                    callback(timeCurrent + timeDelta);\n                }, timeDelta);\n            };\n\n            rafCancel = nativeRaf ? nativeCancelRaf : function (id) {\n                return window.cancelTimeout(id);\n            };\n\n            _export('rafCancel', rafCancel);\n\n            CSS = {};\n\n            _export('CSS', CSS);\n\n            (function () {\n                // transform\n                var i,\n                    keys = ['webkitTransform', 'transform', '-webkit-transform', 'webkit-transform', '-moz-transform', 'moz-transform', 'MozTransform', 'mozTransform', 'msTransform'];\n                for (i = 0; i < keys.length; i++) {\n                    if (document.documentElement.style[keys[i]] !== undefined) {\n                        CSS.transform = keys[i];\n                        break;\n                    }\n                }\n                // transition\n                keys = ['webkitTransition', 'mozTransition', 'msTransition', 'transition'];\n                for (i = 0; i < keys.length; i++) {\n                    if (document.documentElement.style[keys[i]] !== undefined) {\n                        CSS.transition = keys[i];\n                        break;\n                    }\n                }\n                // The only prefix we care about is webkit for transitions.\n                var isWebkit = CSS.transition.indexOf('webkit') > -1;\n                CSS.prefix = isWebkit ? '-webkit-' : '';\n                // transition duration\n                CSS.transitionDuration = (isWebkit ? '-webkit-' : '') + 'transition-duration';\n                // To be sure transitionend works everywhere, include *both* the webkit and non-webkit events\n                CSS.transitionEnd = (isWebkit ? 'webkitTransitionEnd ' : '') + 'transitionend';\n            })();\n            if (window.onanimationend === undefined && window.onwebkitanimationend !== undefined) {\n                CSS.animation = 'WebkitAnimation';\n                CSS.animationStart = 'webkitAnimationStart animationstart';\n                CSS.animationEnd = 'webkitAnimationEnd animationend';\n            } else {\n                CSS.animation = 'animation';\n                CSS.animationStart = 'animationstart';\n                CSS.animationEnd = 'animationend';\n            }\n            matchesFn = undefined;\n\n            ['matches', 'webkitMatchesSelector', 'mozMatchesSelector', 'msMatchesSelector'].some(function (fn) {\n                if (typeof document.documentElement[fn] == 'function') {\n                    matchesFn = fn;\n                }\n            });\n            dimensionCache = {};\n            dimensionIds = 0;\n\n            ;\n        }\n    };\n});\nSystem.register(\"ionic/util/events\", [\"angular2/angular2\"], function (_export) {\n    /**\n     * Events is a pub/sub style event system for sending and responding to application-level\n     * events across your app.\n     * @usage\n     * ```ts\n     * // first page (publish an event when a user is created)\n     * function createUser(user) {\n     *   console.log('User created!')\n     *   events.publish('user:created', user);\n     * }\n     *\n     * // second page (listen for the user created event)\n     * events.subscribe('user:created', (user) => {\n     *   console.log('Welcome', user);\n     * });\n     *\n     * ```\n     */\n    \"use strict\";\n\n    var Injectable, __decorate, __metadata, Events;\n\n    var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();\n\n    function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n    return {\n        setters: [function (_angular2Angular2) {\n            Injectable = _angular2Angular2.Injectable;\n        }],\n        execute: function () {\n            __decorate = undefined && undefined.__decorate || function (decorators, target, key, desc) {\n                if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") return Reflect.decorate(decorators, target, key, desc);\n                switch (arguments.length) {\n                    case 2:\n                        return decorators.reduceRight(function (o, d) {\n                            return d && d(o) || o;\n                        }, target);\n                    case 3:\n                        return decorators.reduceRight(function (o, d) {\n                            return d && d(target, key), void 0;\n                        }, void 0);\n                    case 4:\n                        return decorators.reduceRight(function (o, d) {\n                            return d && d(target, key, o) || o;\n                        }, desc);\n                }\n            };\n\n            __metadata = undefined && undefined.__metadata || function (k, v) {\n                if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n            };\n\n            Events = (function () {\n                function Events() {\n                    _classCallCheck(this, Events);\n\n                    this.channels = [];\n                }\n\n                /**\n                 * Subscribe to an event topic. Events that get posted to that topic\n                 * will trigger the provided handler.\n                 *\n                 * @param topic the topic to subscribe to\n                 * @param handler the event handler\n                 */\n\n                _createClass(Events, [{\n                    key: \"subscribe\",\n                    value: function subscribe(topic) {\n                        var _this = this;\n\n                        if (!this.channels[topic]) {\n                            this.channels[topic] = [];\n                        }\n\n                        for (var _len = arguments.length, handlers = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n                            handlers[_key - 1] = arguments[_key];\n                        }\n\n                        handlers.forEach(function (handler) {\n                            _this.channels[topic].push(handler);\n                        });\n                    }\n\n                    /**\n                     * Unsubscribe from the given topic. Your handler will\n                     * no longer receive events published to this topic.\n                     *\n                     * @param topic the topic to unsubscribe from\n                     * @param handler the event handler\n                     *\n                     * @return true if a handler was removed\n                     */\n                }, {\n                    key: \"unsubscribe\",\n                    value: function unsubscribe(topic, handler) {\n                        var t = this.channels[topic];\n                        if (!t) {\n                            // Wasn't found, wasn't removed\n                            return false;\n                        }\n                        if (!handler) {\n                            // Remove all handlers for this topic\n                            delete this.channels[topic];\n                            return true;\n                        }\n                        // We need to find and remove a specific handler\n                        var i = t.indexOf(handler);\n                        if (i < 0) {\n                            // Wasn't found, wasn't removed\n                            return false;\n                        }\n                        t.splice(i, 1);\n                        // If the channel is empty now, remove it from the channel map\n                        if (!t.length) {\n                            delete this.channels[topic];\n                        }\n                        return true;\n                    }\n\n                    /**\n                     * Publish an event to the given topic.\n                     *\n                     * @param topic the topic to publish to\n                     * @param eventData the data to send as the event\n                     */\n                }, {\n                    key: \"publish\",\n                    value: function publish(topic) {\n                        for (var _len2 = arguments.length, args = Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {\n                            args[_key2 - 1] = arguments[_key2];\n                        }\n\n                        var t = this.channels[topic];\n                        if (!t) {\n                            return null;\n                        }\n                        var responses = [];\n                        t.forEach(function (handler) {\n                            responses.push(handler(args));\n                        });\n                        return responses;\n                    }\n                }]);\n\n                return Events;\n            })();\n\n            _export(\"Events\", Events);\n\n            _export(\"Events\", Events = __decorate([Injectable(), __metadata('design:paramtypes', [])], Events));\n        }\n    };\n});\nSystem.register('ionic/util/feature-detect', [], function (_export) {\n    'use strict';\n\n    var FeatureDetect, featureDetects;\n\n    var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();\n\n    function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\n    return {\n        setters: [],\n        execute: function () {\n            FeatureDetect = (function () {\n                function FeatureDetect() {\n                    _classCallCheck(this, FeatureDetect);\n                }\n\n                _createClass(FeatureDetect, [{\n                    key: 'run',\n                    value: function run(window, document) {\n                        this._results = {};\n                        for (var _name in featureDetects) {\n                            this._results[_name] = featureDetects[_name](window, document, document.body);\n                        }\n                    }\n                }, {\n                    key: 'has',\n                    value: function has(featureName) {\n                        return !!this._results[featureName];\n                    }\n                }], [{\n                    key: 'add',\n                    value: function add(name, fn) {\n                        featureDetects[name] = fn;\n                    }\n                }]);\n\n                return FeatureDetect;\n            })();\n\n            _export('FeatureDetect', FeatureDetect);\n\n            featureDetects = {};\n\n            // FeatureDetect.add('sticky', function(window, document) {\n            //   // css position sticky\n            //   let ele = document.createElement('div');\n            //   ele.style.cssText = 'position:-webkit-sticky;position:sticky';\n            //   return ele.style.position.indexOf('sticky') > -1;\n            // });\n            FeatureDetect.add('hairlines', function (window, document, body) {\n                /**\n                * Hairline Shim\n                * Add the \"hairline\" CSS class name to the body tag\n                * if the browser supports subpixels.\n                */\n                var canDo = false;\n                if (window.devicePixelRatio >= 2) {\n                    var hairlineEle = document.createElement('div');\n                    hairlineEle.style.border = '.5px solid transparent';\n                    body.appendChild(hairlineEle);\n                    if (hairlineEle.offsetHeight === 1) {\n                        body.classList.add('hairlines');\n                        canDo = true;\n                    }\n                    body.removeChild(hairlineEle);\n                }\n                return canDo;\n            });\n        }\n    };\n});\nSystem.register(\"ionic/util/form\", [\"angular2/angular2\"], function (_export) {\n    /**\n     * The Input component is used to focus text input elements.\n     *\n     * @usage\n     * ```html\n     * <ion-input>\n     *   <ion-label>Name</ion-label>\n     *   <input value=\"Name\" type=\"text\">\n     * </ion-input>\n     * ```\n     */\n    \"use strict\";\n\n    var Injectable, __decorate, __metadata, Form;\n\n    var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();\n\n    function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n    return {\n        setters: [function (_angular2Angular2) {\n            Injectable = _angular2Angular2.Injectable;\n        }],\n        execute: function () {\n            __decorate = undefined && undefined.__decorate || function (decorators, target, key, desc) {\n                if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") return Reflect.decorate(decorators, target, key, desc);\n                switch (arguments.length) {\n                    case 2:\n                        return decorators.reduceRight(function (o, d) {\n                            return d && d(o) || o;\n                        }, target);\n                    case 3:\n                        return decorators.reduceRight(function (o, d) {\n                            return d && d(target, key), void 0;\n                        }, void 0);\n                    case 4:\n                        return decorators.reduceRight(function (o, d) {\n                            return d && d(target, key, o) || o;\n                        }, desc);\n                }\n            };\n\n            __metadata = undefined && undefined.__metadata || function (k, v) {\n                if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n            };\n\n            Form = (function () {\n                function Form() {\n                    _classCallCheck(this, Form);\n\n                    this._inputs = [];\n                    this._focused = null;\n                    this.focusCtrl(document);\n                }\n\n                _createClass(Form, [{\n                    key: \"register\",\n                    value: function register(input) {\n                        this._inputs.push(input);\n                    }\n                }, {\n                    key: \"deregister\",\n                    value: function deregister(input) {\n                        var index = this._inputs.indexOf(input);\n                        if (index > -1) {\n                            this._inputs.splice(index, 1);\n                        }\n                        if (input === this._focused) {\n                            this._focused = null;\n                        }\n                    }\n                }, {\n                    key: \"focusCtrl\",\n                    value: function focusCtrl(document) {\n                        // raw DOM fun\n                        var focusCtrl = document.createElement('focus-ctrl');\n                        focusCtrl.setAttribute('aria-hidden', true);\n                        this._blur = document.createElement('button');\n                        this._blur.tabIndex = -1;\n                        focusCtrl.appendChild(this._blur);\n                        document.body.appendChild(focusCtrl);\n                    }\n                }, {\n                    key: \"focusOut\",\n                    value: function focusOut() {\n                        console.debug('focusOut');\n                        this._blur.focus();\n                    }\n                }, {\n                    key: \"setAsFocused\",\n                    value: function setAsFocused(input) {\n                        this._focused = input;\n                    }\n\n                    /**\n                     * Focuses the next input element, if it exists.\n                     */\n                }, {\n                    key: \"focusNext\",\n                    value: function focusNext(currentInput) {\n                        console.debug('focusNext');\n                        var index = this._inputs.indexOf(currentInput);\n                        if (index > -1 && index + 1 < this._inputs.length) {\n                            var nextInput = this._inputs[index + 1];\n                            if (nextInput !== this._focused) {\n                                return nextInput.initFocus();\n                            }\n                        }\n                        index = this._inputs.indexOf(this._focused);\n                        if (index > 0) {\n                            var previousInput = this._inputs[index - 1];\n                            if (previousInput) {\n                                previousInput.initFocus();\n                            }\n                        }\n                    }\n                }]);\n\n                return Form;\n            })();\n\n            _export(\"Form\", Form);\n\n            _export(\"Form\", Form = __decorate([Injectable(), __metadata('design:paramtypes', [])], Form));\n        }\n    };\n});\nSystem.register(\"ionic/util/keyboard\", [\"angular2/angular2\", \"../config/config\", \"./form\", \"./dom\"], function (_export) {\n    \"use strict\";\n\n    var Injectable, NgZone, Config, Form, hasFocusedTextInput, raf, rafFrames, __decorate, __metadata, Keyboard, KEYBOARD_CLOSE_POLLING, _a, _b, _c;\n\n    var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();\n\n    function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n    return {\n        setters: [function (_angular2Angular2) {\n            Injectable = _angular2Angular2.Injectable;\n            NgZone = _angular2Angular2.NgZone;\n        }, function (_configConfig) {\n            Config = _configConfig.Config;\n        }, function (_form) {\n            Form = _form.Form;\n        }, function (_dom) {\n            hasFocusedTextInput = _dom.hasFocusedTextInput;\n            raf = _dom.raf;\n            rafFrames = _dom.rafFrames;\n        }],\n        execute: function () {\n            __decorate = undefined && undefined.__decorate || function (decorators, target, key, desc) {\n                if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") return Reflect.decorate(decorators, target, key, desc);\n                switch (arguments.length) {\n                    case 2:\n                        return decorators.reduceRight(function (o, d) {\n                            return d && d(o) || o;\n                        }, target);\n                    case 3:\n                        return decorators.reduceRight(function (o, d) {\n                            return d && d(target, key), void 0;\n                        }, void 0);\n                    case 4:\n                        return decorators.reduceRight(function (o, d) {\n                            return d && d(target, key, o) || o;\n                        }, desc);\n                }\n            };\n\n            __metadata = undefined && undefined.__metadata || function (k, v) {\n                if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n            };\n\n            Keyboard = (function () {\n                function Keyboard(config, form, zone) {\n                    var _this = this;\n\n                    _classCallCheck(this, Keyboard);\n\n                    this.form = form;\n                    this.zone = zone;\n                    zone.runOutsideAngular(function () {\n                        _this.focusOutline(config.get('focusOutline'), document);\n                    });\n                }\n\n                _createClass(Keyboard, [{\n                    key: \"isOpen\",\n                    value: function isOpen() {\n                        return hasFocusedTextInput();\n                    }\n                }, {\n                    key: \"onClose\",\n                    value: function onClose(callback) {\n                        var pollingInternval = arguments.length <= 1 || arguments[1] === undefined ? KEYBOARD_CLOSE_POLLING : arguments[1];\n\n                        var self = this;\n                        var promise = null;\n                        if (!callback) {\n                            // a callback wasn't provided, so let's return a promise instead\n                            promise = new Promise(function (resolve) {\n                                callback = resolve;\n                            });\n                        }\n                        self.zone.runOutsideAngular(function () {\n                            function checkKeyboard() {\n                                if (!self.isOpen()) {\n                                    rafFrames(30, function () {\n                                        self.zone.run(function () {\n                                            console.debug('keyboard closed');\n                                            callback();\n                                        });\n                                    });\n                                } else {\n                                    setTimeout(checkKeyboard, pollingInternval);\n                                }\n                            }\n                            setTimeout(checkKeyboard, pollingInternval);\n                        });\n                        return promise;\n                    }\n                }, {\n                    key: \"close\",\n                    value: function close() {\n                        var _this2 = this;\n\n                        raf(function () {\n                            if (hasFocusedTextInput()) {\n                                // only focus out when a text input has focus\n                                _this2.form.focusOut();\n                            }\n                        });\n                    }\n                }, {\n                    key: \"focusOutline\",\n                    value: function focusOutline(setting, document) {\n                        /* Focus Outline\n                         * --------------------------------------------------\n                         * By default, when a keydown event happens from a tab key, then\n                         * the 'focus-outline' css class is added to the body element\n                         * so focusable elements have an outline. On a mousedown or\n                         * touchstart event, then the 'focus-outline' css class is removed.\n                         *\n                         * Config default overrides:\n                         * focusOutline: true     - Always add the focus-outline\n                         * focusOutline: false    - Do not add the focus-outline\n                         */\n                        var self = this;\n                        var isKeyInputEnabled = false;\n                        function cssClass() {\n                            raf(function () {\n                                document.body.classList[isKeyInputEnabled ? 'add' : 'remove']('focus-outline');\n                            });\n                        }\n                        if (setting === true) {\n                            isKeyInputEnabled = true;\n                            return cssClass();\n                        } else if (setting === false) {\n                            return;\n                        }\n                        // default is to add the focus-outline when the tab key is used\n                        function keyDown(ev) {\n                            if (!isKeyInputEnabled && ev.keyCode == 9) {\n                                isKeyInputEnabled = true;\n                                enableKeyInput();\n                            }\n                        }\n                        function pointerDown() {\n                            isKeyInputEnabled = false;\n                            enableKeyInput();\n                        }\n                        function enableKeyInput() {\n                            cssClass();\n                            self.zone.runOutsideAngular(function () {\n                                document.removeEventListener('mousedown', pointerDown);\n                                document.removeEventListener('touchstart', pointerDown);\n                                if (isKeyInputEnabled) {\n                                    document.addEventListener('mousedown', pointerDown);\n                                    document.addEventListener('touchstart', pointerDown);\n                                }\n                            });\n                        }\n                        document.addEventListener('keydown', keyDown);\n                    }\n                }]);\n\n                return Keyboard;\n            })();\n\n            _export(\"Keyboard\", Keyboard);\n\n            _export(\"Keyboard\", Keyboard = __decorate([Injectable(), __metadata('design:paramtypes', [typeof (_a = typeof Config !== 'undefined' && Config) === 'function' && _a || Object, typeof (_b = typeof Form !== 'undefined' && Form) === 'function' && _b || Object, typeof (_c = typeof NgZone !== 'undefined' && NgZone) === 'function' && _c || Object])], Keyboard));\n            KEYBOARD_CLOSE_POLLING = 150;\n        }\n    };\n});\nSystem.register('ionic/util/util', [], function (_export) {\n    // Simple noop function\n    'use strict';\n\n    var isBoolean, isString, isNumber, isFunction, isDefined, isUndefined, isBlank, isObject, isArray, isTrueProperty, uid, array;\n\n    _export('noop', noop);\n\n    /**\n     * Extend the destination with an arbitrary number of other objects.\n     * @param dst the destination\n     * @param ... the param objects\n     */\n\n    _export('clamp', clamp);\n\n    /**\n     * Do a deep extend (merge).\n     * @param dst the destination\n     * @param ... the param objects\n     */\n\n    _export('extend', extend);\n\n    _export('merge', merge);\n\n    /**\n     * Apply default arguments if they don't exist in\n     * the first object.\n     * @param the destination to apply defaults to.\n     */\n\n    _export('debounce', debounce);\n\n    _export('defaults', defaults);\n\n    _export('pascalCaseToDashCase', pascalCaseToDashCase);\n\n    _export('nextUid', nextUid);\n\n    /**\n     * Throttle the given fun, only allowing it to be\n     * called at most every `wait` ms.\n     */\n\n    _export('getQuerystring', getQuerystring);\n\n    _export('throttle', throttle);\n\n    function noop() {}\n\n    /**\n     * Given a min and max, restrict the given number\n     * to the range.\n     * @param min the minimum\n     * @param n the value\n     * @param max the maximum\n     */\n\n    function clamp(min, n, max) {\n        return Math.max(min, Math.min(n, max));\n    }\n\n    function extend(dst) {\n        return _baseExtend(dst, [].slice.call(arguments, 1), false);\n    }\n\n    function merge(dst) {\n        return _baseExtend(dst, [].slice.call(arguments, 1), true);\n    }\n\n    function _baseExtend(dst, objs, deep) {\n        for (var i = 0, ii = objs.length; i < ii; ++i) {\n            var obj = objs[i];\n            if (!obj || !isObject(obj) && !isFunction(obj)) continue;\n            var keys = Object.keys(obj);\n            for (var j = 0, jj = keys.length; j < jj; j++) {\n                var key = keys[j];\n                var src = obj[key];\n                if (deep && isObject(src)) {\n                    if (!isObject(dst[key])) dst[key] = isArray(src) ? [] : {};\n                    _baseExtend(dst[key], [src], true);\n                } else {\n                    dst[key] = src;\n                }\n            }\n        }\n        return dst;\n    }\n\n    function debounce(func, wait, immediate) {\n        var timeout, args, context, timestamp, result;\n        return function () {\n            context = this;\n            args = arguments;\n            timestamp = new Date();\n            var later = function later() {\n                var last = new Date() - timestamp;\n                if (last < wait) {\n                    timeout = setTimeout(later, wait - last);\n                } else {\n                    timeout = null;\n                    if (!immediate) result = func.apply(context, args);\n                }\n            };\n            var callNow = immediate && !timeout;\n            if (!timeout) {\n                timeout = setTimeout(later, wait);\n            }\n            if (callNow) result = func.apply(context, args);\n            return result;\n        };\n    }\n\n    function defaults(dest) {\n        for (var i = arguments.length - 1; i >= 1; i--) {\n            var source = arguments[i] || {};\n            for (var key in source) {\n                if (source.hasOwnProperty(key) && !dest.hasOwnProperty(key)) {\n                    dest[key] = source[key];\n                }\n            }\n        }\n        return dest;\n    }\n\n    /**\n     * Convert a string in the format thisIsAString to a slug format this-is-a-string\n     */\n\n    function pascalCaseToDashCase() {\n        var str = arguments.length <= 0 || arguments[0] === undefined ? '' : arguments[0];\n\n        return str.charAt(0).toLowerCase() + str.substring(1).replace(/[A-Z]/g, function (match) {\n            return '-' + match.toLowerCase();\n        });\n    }\n\n    function nextUid() {\n        return ++uid;\n    }\n\n    /**\n     * Grab the query string param value for the given key.\n     * @param key the key to look for\n     */\n\n    function getQuerystring(url, key) {\n        var queryParams = {};\n        if (url) {\n            var startIndex = url.indexOf('?');\n            if (startIndex !== -1) {\n                var queries = url.slice(startIndex + 1).split('&');\n                queries.forEach(function (param) {\n                    var split = param.split('=');\n                    queryParams[split[0].toLowerCase()] = split[1].split('#')[0];\n                });\n            }\n            if (key) {\n                return queryParams[key] || '';\n            }\n        }\n        return queryParams;\n    }\n\n    function throttle(func, wait, options) {\n        var context, args, result;\n        var timeout = null;\n        var previous = 0;\n        options || (options = {});\n        var later = function later() {\n            previous = options.leading === false ? 0 : Date.now();\n            timeout = null;\n            result = func.apply(context, args);\n        };\n        return function () {\n            var now = Date.now();\n            if (!previous && options.leading === false) previous = now;\n            var remaining = wait - (now - previous);\n            context = this;\n            args = arguments;\n            if (remaining <= 0) {\n                clearTimeout(timeout);\n                timeout = null;\n                previous = now;\n                result = func.apply(context, args);\n            } else if (!timeout && options.trailing !== false) {\n                timeout = setTimeout(later, remaining);\n            }\n            return result;\n        };\n    }\n\n    return {\n        setters: [],\n        execute: function () {\n            ;\n            isBoolean = function isBoolean(val) {\n                return typeof val === 'boolean';\n            };\n\n            _export('isBoolean', isBoolean);\n\n            isString = function isString(val) {\n                return typeof val === 'string';\n            };\n\n            _export('isString', isString);\n\n            isNumber = function isNumber(val) {\n                return typeof val === 'number';\n            };\n\n            _export('isNumber', isNumber);\n\n            isFunction = function isFunction(val) {\n                return typeof val === 'function';\n            };\n\n            _export('isFunction', isFunction);\n\n            isDefined = function isDefined(val) {\n                return typeof val !== 'undefined';\n            };\n\n            _export('isDefined', isDefined);\n\n            isUndefined = function isUndefined(val) {\n                return typeof val === 'undefined';\n            };\n\n            _export('isUndefined', isUndefined);\n\n            isBlank = function isBlank(val) {\n                return val === undefined || val === null;\n            };\n\n            _export('isBlank', isBlank);\n\n            isObject = function isObject(val) {\n                return typeof val === 'object';\n            };\n\n            _export('isObject', isObject);\n\n            isArray = Array.isArray;\n\n            _export('isArray', isArray);\n\n            isTrueProperty = function isTrueProperty(val) {\n                return typeof val !== 'undefined' && val !== \"false\";\n            };\n\n            _export('isTrueProperty', isTrueProperty);\n\n            uid = 0;\n            array = {\n                find: function find(arr, cb) {\n                    for (var i = 0, ii = arr.length; i < ii; i++) {\n                        if (cb(arr[i], i)) return arr[i];\n                    }\n                },\n                remove: function remove(arr, itemOrIndex) {\n                    var index = -1;\n                    if (isNumber(itemOrIndex)) {\n                        index = itemOrIndex;\n                    } else {\n                        index = arr.indexOf(itemOrIndex);\n                    }\n                    if (index < 0) {\n                        return false;\n                    }\n                    arr.splice(index, 1);\n                    return true;\n                }\n            };\n\n            _export('array', array);\n        }\n    };\n});\nSystem.register(\"ionic/components/action-sheet/action-sheet\", [\"angular2/angular2\", \"../overlay/overlay-controller\", \"../../config/config\", \"../icon/icon\", \"../../animations/animation\", \"../nav/nav-controller\", \"../../util/util\"], function (_export) {\n    \"use strict\";\n\n    var Component, Injectable, Renderer, NgFor, NgIf, OverlayController, Config, Icon, Animation, NavParams, extend, __decorate, __metadata, ActionSheetCmp, ActionSheet, OVERLAY_TYPE, ActionSheetSlideIn, ActionSheetSlideOut, ActionSheetMdSlideIn, ActionSheetMdSlideOut, _a, _b, _c, _d;\n\n    var _get = function get(_x2, _x3, _x4) { var _again = true; _function: while (_again) { var object = _x2, property = _x3, receiver = _x4; _again = false; if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { _x2 = parent; _x3 = property; _x4 = receiver; _again = true; desc = parent = undefined; continue _function; } } else if (\"value\" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } } };\n\n    var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();\n\n    function _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\n    function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n    return {\n        setters: [function (_angular2Angular2) {\n            Component = _angular2Angular2.Component;\n            Injectable = _angular2Angular2.Injectable;\n            Renderer = _angular2Angular2.Renderer;\n            NgFor = _angular2Angular2.NgFor;\n            NgIf = _angular2Angular2.NgIf;\n        }, function (_overlayOverlayController) {\n            OverlayController = _overlayOverlayController.OverlayController;\n        }, function (_configConfig) {\n            Config = _configConfig.Config;\n        }, function (_iconIcon) {\n            Icon = _iconIcon.Icon;\n        }, function (_animationsAnimation) {\n            Animation = _animationsAnimation.Animation;\n        }, function (_navNavController) {\n            NavParams = _navNavController.NavParams;\n        }, function (_utilUtil) {\n            extend = _utilUtil.extend;\n        }],\n        execute: function () {\n            __decorate = undefined && undefined.__decorate || function (decorators, target, key, desc) {\n                if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") return Reflect.decorate(decorators, target, key, desc);\n                switch (arguments.length) {\n                    case 2:\n                        return decorators.reduceRight(function (o, d) {\n                            return d && d(o) || o;\n                        }, target);\n                    case 3:\n                        return decorators.reduceRight(function (o, d) {\n                            return d && d(target, key), void 0;\n                        }, void 0);\n                    case 4:\n                        return decorators.reduceRight(function (o, d) {\n                            return d && d(target, key, o) || o;\n                        }, desc);\n                }\n            };\n\n            __metadata = undefined && undefined.__metadata || function (k, v) {\n                if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n            };\n\n            ActionSheetCmp = (function () {\n                function ActionSheetCmp(params, renderer) {\n                    _classCallCheck(this, ActionSheetCmp);\n\n                    this.d = params.data;\n                    if (this.d.cssClass) {\n                        renderer.setElementClass(elementRef, this.d.cssClass, true);\n                    }\n                }\n\n                _createClass(ActionSheetCmp, [{\n                    key: \"cancel\",\n                    value: function cancel() {\n                        this.d.cancel && this.d.cancel();\n                        return this.close();\n                    }\n                }, {\n                    key: \"destructive\",\n                    value: function destructive() {\n                        if (this.d.destructiveButtonClicked()) {\n                            return this.close();\n                        }\n                    }\n                }, {\n                    key: \"buttonClicked\",\n                    value: function buttonClicked(index) {\n                        if (this.d.buttonClicked(index)) {\n                            return this.close();\n                        }\n                    }\n                }]);\n\n                return ActionSheetCmp;\n            })();\n\n            ActionSheetCmp = __decorate([Component({\n                selector: 'ion-action-sheet',\n                template: '<backdrop (click)=\"cancel()\" tappable disable-activated></backdrop>' + '<action-sheet-wrapper>' + '<div class=\"action-sheet-container\">' + '<div class=\"action-sheet-group action-sheet-options\">' + '<div class=\"action-sheet-title\" *ng-if=\"d.titleText\">{{d.titleText}}</div>' + '<button (click)=\"buttonClicked(i)\" *ng-for=\"#b of d.buttons; #i=index\" class=\"action-sheet-option disable-hover\">' + '<icon [name]=\"b.icon\" *ng-if=\"b.icon\"></icon> ' + '{{b.text}}' + '</button>' + '<button *ng-if=\"d.destructiveText\" (click)=\"destructive()\" class=\"action-sheet-destructive disable-hover\">' + '<icon [name]=\"d.destructiveIcon\" *ng-if=\"d.destructiveIcon\"></icon> ' + '{{d.destructiveText}}</button>' + '</div>' + '<div class=\"action-sheet-group action-sheet-cancel\" *ng-if=\"d.cancelText\">' + '<button (click)=\"cancel()\" class=\"disable-hover\">' + '<icon [name]=\"d.cancelIcon\" *ng-if=\"d.cancelIcon\"></icon> ' + '{{d.cancelText}}</button>' + '</div>' + '</div>' + '</action-sheet-wrapper>',\n                host: {\n                    'role': 'dialog'\n                },\n                directives: [NgFor, NgIf, Icon]\n            }), __metadata('design:paramtypes', [typeof (_a = typeof NavParams !== 'undefined' && NavParams) === 'function' && _a || Object, typeof (_b = typeof Renderer !== 'undefined' && Renderer) === 'function' && _b || Object])], ActionSheetCmp);\n            /**\n             * @name ActionSheet\n             * @description\n             * The Action Sheet is a slide-up pane that lets the user choose from a set of options. Dangerous options are made obvious.\n             * There are easy ways to cancel out of the action sheet, such as tapping the backdrop or even hitting escape on the keyboard for desktop testing.\n             *\n             * @usage\n             * ```ts\n             * openMenu() {\n             *\n             *   this.actionSheet.open({\n             *     buttons: [\n             *       { text: 'Share This' },\n             *       { text: 'Move' }\n             *     ],\n             *     destructiveText: 'Delete',\n             *     titleText: 'Modify your album',\n             *     cancelText: 'Cancel',\n             *     cancel: function() {\n             *       console.log('Canceled');\n             *     },\n             *     destructiveButtonClicked: () => {\n             *       console.log('Destructive clicked');\n             *     },\n             *     buttonClicked: function(index) {\n             *       console.log('Button clicked', index);\n             *       if(index == 1) { return false; }\n             *       return true;\n             *     }\n             *\n             *   }).then(actionSheetRef => {\n             *     this.actionSheetRef = actionSheetRef;\n             *   });\n             *\n             * }\n             * ```\n             *\n             * @see {@link /docs/components#action-sheets ActionSheet Component Docs}\n             */\n\n            ActionSheet = (function () {\n                function ActionSheet(ctrl, config) {\n                    _classCallCheck(this, ActionSheet);\n\n                    this.ctrl = ctrl;\n                    this.config = config;\n                }\n\n                /**\n                 * Create and open a new Action Sheet. This is the\n                 * public API, and most often you will only use ActionSheet.open()\n                 *\n                 * @param {Object} [opts={}]  An object containing optional settings.\n                 *  - `[Object]` `buttons` Which buttons to show.  Each button is an object with a `text` field.\n                 *  - `{string}` `titleText` The title to show on the action sheet.\n                 *  - `{string=}` `cancelText` the text for a 'cancel' button on the action sheet.\n                 *  - `{string=}` `destructiveText` The text for a 'danger' on the action sheet.\n                 *  - `{function=}` `cancel` Called if the cancel button is pressed, the backdrop is tapped or\n                 *     the hardware back button is pressed.\n                 *  - `{function=}` `buttonClicked` Called when one of the non-destructive buttons is clicked,\n                 *     with the index of the button that was clicked and the button object. Return true to close\n                 *     the action sheet, or false to keep it opened.\n                 *  - `{function=}` `destructiveButtonClicked` Called when the destructive button is clicked.\n                 *     Return true to close the action sheet, or false to keep it opened.\n                 * @param {String} [opts.enterAnimation='action-sheet-slide-in'] The class used to animate an actionSheet that is entering.\n                 * @param {String} [opts.leaveAnimation='action-sheet-slide-out'] The class used to animate an actionSheet that is leaving.\n                 * @return {Promise} Promise that resolves when the action sheet is open.\n                 */\n\n                _createClass(ActionSheet, [{\n                    key: \"open\",\n                    value: function open() {\n                        var opts = arguments.length <= 0 || arguments[0] === undefined ? {} : arguments[0];\n\n                        opts = extend({\n                            pageType: OVERLAY_TYPE,\n                            enterAnimation: this.config.get('actionSheetEnter'),\n                            leaveAnimation: this.config.get('actionSheetLeave'),\n                            cancelIcon: this.config.get('actionSheetCancelIcon'),\n                            destructiveIcon: this.config.get('actionSheetDestructiveIcon')\n                        }, opts);\n                        return this.ctrl.open(ActionSheetCmp, opts, opts);\n                    }\n\n                    /**\n                     * Retrieves an actionSheet instance.\n                     *\n                     * @param {String} [handle]  The handle used to open the instance to be retrieved.\n                     * @returns {ActionSheet} An actionSheet instance.\n                     */\n                }, {\n                    key: \"get\",\n                    value: function get(handle) {\n                        if (handle) {\n                            return this.ctrl.getByHandle(handle);\n                        }\n                        return this.ctrl.getByType(OVERLAY_TYPE);\n                    }\n                }]);\n\n                return ActionSheet;\n            })();\n\n            _export(\"ActionSheet\", ActionSheet);\n\n            _export(\"ActionSheet\", ActionSheet = __decorate([Injectable(), __metadata('design:paramtypes', [typeof (_c = typeof OverlayController !== 'undefined' && OverlayController) === 'function' && _c || Object, typeof (_d = typeof Config !== 'undefined' && Config) === 'function' && _d || Object])], ActionSheet));\n            OVERLAY_TYPE = 'action-sheet';\n\n            ActionSheetSlideIn = (function (_Animation) {\n                _inherits(ActionSheetSlideIn, _Animation);\n\n                function ActionSheetSlideIn(enteringView, leavingView, opts) {\n                    _classCallCheck(this, ActionSheetSlideIn);\n\n                    _get(Object.getPrototypeOf(ActionSheetSlideIn.prototype), \"constructor\", this).call(this, null, opts);\n                    var ele = enteringView.pageRef().nativeElement;\n                    var backdrop = new Animation(ele.querySelector('backdrop'));\n                    var wrapper = new Animation(ele.querySelector('action-sheet-wrapper'));\n                    backdrop.fromTo('opacity', 0.01, 0.4);\n                    wrapper.fromTo('translateY', '100%', '0%');\n                    this.easing('cubic-bezier(.36,.66,.04,1)').duration(400).add([backdrop, wrapper]);\n                }\n\n                return ActionSheetSlideIn;\n            })(Animation);\n\n            Animation.register('action-sheet-slide-in', ActionSheetSlideIn);\n\n            ActionSheetSlideOut = (function (_Animation2) {\n                _inherits(ActionSheetSlideOut, _Animation2);\n\n                function ActionSheetSlideOut(enteringView, leavingView, opts) {\n                    _classCallCheck(this, ActionSheetSlideOut);\n\n                    _get(Object.getPrototypeOf(ActionSheetSlideOut.prototype), \"constructor\", this).call(this, null, opts);\n                    var ele = leavingView.pageRef().nativeElement;\n                    var backdrop = new Animation(ele.querySelector('backdrop'));\n                    var wrapper = new Animation(ele.querySelector('action-sheet-wrapper'));\n                    backdrop.fromTo('opacity', 0.4, 0);\n                    wrapper.fromTo('translateY', '0%', '100%');\n                    this.easing('cubic-bezier(.36,.66,.04,1)').duration(300).add([backdrop, wrapper]);\n                }\n\n                return ActionSheetSlideOut;\n            })(Animation);\n\n            Animation.register('action-sheet-slide-out', ActionSheetSlideOut);\n\n            ActionSheetMdSlideIn = (function (_Animation3) {\n                _inherits(ActionSheetMdSlideIn, _Animation3);\n\n                function ActionSheetMdSlideIn(enteringView, leavingView, opts) {\n                    _classCallCheck(this, ActionSheetMdSlideIn);\n\n                    _get(Object.getPrototypeOf(ActionSheetMdSlideIn.prototype), \"constructor\", this).call(this, null, opts);\n                    var ele = enteringView.pageRef().nativeElement;\n                    var backdrop = new Animation(ele.querySelector('backdrop'));\n                    var wrapper = new Animation(ele.querySelector('action-sheet-wrapper'));\n                    backdrop.fromTo('opacity', 0.01, 0.26);\n                    wrapper.fromTo('translateY', '100%', '0%');\n                    this.easing('cubic-bezier(.36,.66,.04,1)').duration(450).add([backdrop, wrapper]);\n                }\n\n                return ActionSheetMdSlideIn;\n            })(Animation);\n\n            Animation.register('action-sheet-md-slide-in', ActionSheetMdSlideIn);\n\n            ActionSheetMdSlideOut = (function (_Animation4) {\n                _inherits(ActionSheetMdSlideOut, _Animation4);\n\n                function ActionSheetMdSlideOut(enteringView, leavingView, opts) {\n                    _classCallCheck(this, ActionSheetMdSlideOut);\n\n                    _get(Object.getPrototypeOf(ActionSheetMdSlideOut.prototype), \"constructor\", this).call(this, null, opts);\n                    var ele = leavingView.pageRef().nativeElement;\n                    var backdrop = new Animation(ele.querySelector('backdrop'));\n                    var wrapper = new Animation(ele.querySelector('action-sheet-wrapper'));\n                    backdrop.fromTo('opacity', 0.26, 0);\n                    wrapper.fromTo('translateY', '0%', '100%');\n                    this.easing('cubic-bezier(.36,.66,.04,1)').duration(450).add([backdrop, wrapper]);\n                }\n\n                return ActionSheetMdSlideOut;\n            })(Animation);\n\n            Animation.register('action-sheet-md-slide-out', ActionSheetMdSlideOut);\n        }\n    };\n});\nSystem.register(\"ionic/components/app/app\", [\"angular2/angular2\", \"../../config/config\", \"../../util/click-block\", \"../../util/dom\"], function (_export) {\n    /**\n     * Component registry service.  For more information on registering\n     * components see the [IdRef API reference](../id/IdRef/).\n     */\n    \"use strict\";\n\n    var Injectable, NgZone, Title, Config, ClickBlock, rafFrames, __decorate, __metadata, IonicApp, _a, _b, _c;\n\n    var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();\n\n    function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n    return {\n        setters: [function (_angular2Angular2) {\n            Injectable = _angular2Angular2.Injectable;\n            NgZone = _angular2Angular2.NgZone;\n            Title = _angular2Angular2.Title;\n        }, function (_configConfig) {\n            Config = _configConfig.Config;\n        }, function (_utilClickBlock) {\n            ClickBlock = _utilClickBlock.ClickBlock;\n        }, function (_utilDom) {\n            rafFrames = _utilDom.rafFrames;\n        }],\n        execute: function () {\n            __decorate = undefined && undefined.__decorate || function (decorators, target, key, desc) {\n                if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") return Reflect.decorate(decorators, target, key, desc);\n                switch (arguments.length) {\n                    case 2:\n                        return decorators.reduceRight(function (o, d) {\n                            return d && d(o) || o;\n                        }, target);\n                    case 3:\n                        return decorators.reduceRight(function (o, d) {\n                            return d && d(target, key), void 0;\n                        }, void 0);\n                    case 4:\n                        return decorators.reduceRight(function (o, d) {\n                            return d && d(target, key, o) || o;\n                        }, desc);\n                }\n            };\n\n            __metadata = undefined && undefined.__metadata || function (k, v) {\n                if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n            };\n\n            IonicApp = (function () {\n                function IonicApp(config, clickBlock, zone) {\n                    _classCallCheck(this, IonicApp);\n\n                    this._config = config;\n                    this._zone = zone;\n                    this._titleSrv = new Title();\n                    this._title = '';\n                    this._disTime = 0;\n                    this._clickBlock = clickBlock;\n                    // Our component registry map\n                    this.components = {};\n                }\n\n                /**\n                 * Sets the document title.\n                 * @param {string} val  Value to set the document title to.\n                 */\n\n                _createClass(IonicApp, [{\n                    key: \"setTitle\",\n                    value: function setTitle(val) {\n                        var self = this;\n                        if (val !== self._title) {\n                            self._title = val;\n                            this._zone.runOutsideAngular(function () {\n                                function setAppTitle() {\n                                    self._titleSrv.setTitle(self._title);\n                                }\n                                rafFrames(4, setAppTitle);\n                            });\n                        }\n                    }\n\n                    /**\n                     * Sets if the app is currently enabled or not, meaning if it's\n                     * available to accept new user commands. For example, this is set to `false`\n                     * while views transition, a modal slides up, an action-sheet\n                     * slides up, etc. After the transition completes it is set back to `true`.\n                     * @param {bool} isEnabled\n                     * @param {bool} fallback  When `isEnabled` is set to `false`, this argument\n                     * is used to set the maximum number of milliseconds that app will wait until\n                     * it will automatically enable the app again. It's basically a fallback incase\n                     * something goes wrong during a transition and the app wasn't re-enabled correctly.\n                     */\n                }, {\n                    key: \"setEnabled\",\n                    value: function setEnabled(isEnabled) {\n                        var duration = arguments.length <= 1 || arguments[1] === undefined ? 700 : arguments[1];\n\n                        this._disTime = isEnabled ? 0 : Date.now() + duration;\n                        if (duration > 32 || isEnabled) {\n                            // only do a click block if the duration is longer than XXms\n                            this._clickBlock.show(!isEnabled, duration + 64);\n                        }\n                    }\n\n                    /**\n                     * Boolean if the app is actively enabled or not.\n                     * @return {bool}\n                     */\n                }, {\n                    key: \"isEnabled\",\n                    value: function isEnabled() {\n                        return this._disTime < Date.now();\n                    }\n\n                    /**\n                     * Register a known component with a key, for easy lookups later.\n                     * @param {TODO} id  The id to use to register the component\n                     * @param {TODO} component  The component to register\n                     */\n                }, {\n                    key: \"register\",\n                    value: function register(id, component) {\n                        if (this.components[id] && this.components[id] !== component) {}\n                        this.components[id] = component;\n                    }\n\n                    /**\n                     * Unregister a known component with a key.\n                     * @param {TODO} id  The id to use to unregister\n                     */\n                }, {\n                    key: \"unregister\",\n                    value: function unregister(id) {\n                        delete this.components[id];\n                    }\n\n                    /**\n                     * Get a registered component with the given type (returns the first)\n                     * @param {Object} cls the type to search for\n                     * @return the matching component, or undefined if none was found\n                     */\n                }, {\n                    key: \"getRegisteredComponent\",\n                    value: function getRegisteredComponent(cls) {\n                        var _iteratorNormalCompletion = true;\n                        var _didIteratorError = false;\n                        var _iteratorError = undefined;\n\n                        try {\n                            for (var _iterator = this.components[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {\n                                var component = _step.value;\n\n                                if (component instanceof cls) {\n                                    return component;\n                                }\n                            }\n                        } catch (err) {\n                            _didIteratorError = true;\n                            _iteratorError = err;\n                        } finally {\n                            try {\n                                if (!_iteratorNormalCompletion && _iterator[\"return\"]) {\n                                    _iterator[\"return\"]();\n                                }\n                            } finally {\n                                if (_didIteratorError) {\n                                    throw _iteratorError;\n                                }\n                            }\n                        }\n                    }\n\n                    /**\n                     * Get the component for the given key.\n                     * @param {TODO} key  TODO\n                     * @return {TODO} TODO\n                     */\n                }, {\n                    key: \"getComponent\",\n                    value: function getComponent(id) {\n                        return this.components[id];\n                    }\n                }]);\n\n                return IonicApp;\n            })();\n\n            _export(\"IonicApp\", IonicApp);\n\n            _export(\"IonicApp\", IonicApp = __decorate([Injectable(), __metadata('design:paramtypes', [typeof (_a = typeof Config !== 'undefined' && Config) === 'function' && _a || Object, typeof (_b = typeof ClickBlock !== 'undefined' && ClickBlock) === 'function' && _b || Object, typeof (_c = typeof NgZone !== 'undefined' && NgZone) === 'function' && _c || Object])], IonicApp));\n        }\n    };\n});\nSystem.register(\"ionic/components/app/id\", [\"angular2/angular2\", \"./app\"], function (_export) {\n    /**\n     * IdRef is an easy way to identify unique components in an app and access them\n     * no matter where in the UI heirarchy you are. For example, this makes toggling\n     * a global side menu feasible from any place in the application.\n     *\n     * See the [Menu section](https://ionicframework.com/docs/components/#menus) of\n     * the Component docs for an example of how Menus rely on ID's.\n     *\n     * To give any component an ID, simply set its `id` property:\n     * ```html\n     * <ion-checkbox id=\"myCheckbox\"></ion-checkbox>\n     * ```\n     *\n     * To get a reference to the registered component, inject the [IonicApp](../app/IonicApp/)\n     * service:\n     * ```ts\n     * constructor(app: IonicApp) {\n     *   var checkbox = app.getComponent(\"myCheckbox\");\n     *   if (checkbox.checked) console.log('checkbox is checked');\n     * }\n     * ```\n     *\n     * *NOTE:* It is not recommended to use ID's across Pages, as there is often no\n     * guarantee that the registered component has not been destroyed if its Page\n     * has been navigated away from.\n     */\n    \"use strict\";\n\n    var AppViewManager, ElementRef, Directive, Renderer, IonicApp, __decorate, __metadata, IdRef, Attr, _a, _b, _c, _d, _e;\n\n    var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();\n\n    function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n    return {\n        setters: [function (_angular2Angular2) {\n            AppViewManager = _angular2Angular2.AppViewManager;\n            ElementRef = _angular2Angular2.ElementRef;\n            Directive = _angular2Angular2.Directive;\n            Renderer = _angular2Angular2.Renderer;\n        }, function (_app) {\n            IonicApp = _app.IonicApp;\n        }],\n        execute: function () {\n            __decorate = undefined && undefined.__decorate || function (decorators, target, key, desc) {\n                if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") return Reflect.decorate(decorators, target, key, desc);\n                switch (arguments.length) {\n                    case 2:\n                        return decorators.reduceRight(function (o, d) {\n                            return d && d(o) || o;\n                        }, target);\n                    case 3:\n                        return decorators.reduceRight(function (o, d) {\n                            return d && d(target, key), void 0;\n                        }, void 0);\n                    case 4:\n                        return decorators.reduceRight(function (o, d) {\n                            return d && d(target, key, o) || o;\n                        }, desc);\n                }\n            };\n\n            __metadata = undefined && undefined.__metadata || function (k, v) {\n                if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n            };\n\n            IdRef = (function () {\n                function IdRef(app, elementRef, appViewManager) {\n                    _classCallCheck(this, IdRef);\n\n                    this.app = app;\n                    this.elementRef = elementRef;\n                    this.appViewManager = appViewManager;\n                    // Grab the component this directive is attached to\n                    this.component = appViewManager.getComponent(elementRef);\n                }\n\n                /**\n                 * @private\n                 */\n\n                _createClass(IdRef, [{\n                    key: \"onInit\",\n                    value: function onInit() {\n                        this.app.register(this.id, this.component);\n                    }\n\n                    /**\n                     * @private\n                     */\n                }, {\n                    key: \"onDestroy\",\n                    value: function onDestroy() {\n                        this.app.unregister(this.id);\n                    }\n                }]);\n\n                return IdRef;\n            })();\n\n            _export(\"IdRef\", IdRef);\n\n            _export(\"IdRef\", IdRef = __decorate([Directive({\n                selector: '[id]',\n                inputs: ['id']\n            }), __metadata('design:paramtypes', [typeof (_a = typeof IonicApp !== 'undefined' && IonicApp) === 'function' && _a || Object, typeof (_b = typeof ElementRef !== 'undefined' && ElementRef) === 'function' && _b || Object, typeof (_c = typeof AppViewManager !== 'undefined' && AppViewManager) === 'function' && _c || Object])], IdRef));\n            /**\n             * @name Attr\n             * @description\n             * Attr allows you to dynamically add or remove an attribute based on the value of an expression or variable.\n             * @usage\n             * ```html\n             * // toggle the no-lines attributes based on whether isAndroid is true or false\n             * <ion-list [attr.no-lines]=\"isAndroid ? '' : null\">\n             * ```\n             */\n\n            Attr = (function () {\n                function Attr(renderer, elementRef) {\n                    _classCallCheck(this, Attr);\n\n                    this.renderer = renderer;\n                    this.elementRef = elementRef;\n                }\n\n                /**\n                 * @private\n                 */\n\n                _createClass(Attr, [{\n                    key: \"onInit\",\n                    value: function onInit() {\n                        this.renderer.setElementAttribute(this.elementRef, this.attr, '');\n                    }\n                }]);\n\n                return Attr;\n            })();\n\n            _export(\"Attr\", Attr);\n\n            _export(\"Attr\", Attr = __decorate([Directive({\n                selector: '[attr]',\n                inputs: ['attr']\n            }), __metadata('design:paramtypes', [typeof (_d = typeof Renderer !== 'undefined' && Renderer) === 'function' && _d || Object, typeof (_e = typeof ElementRef !== 'undefined' && ElementRef) === 'function' && _e || Object])], Attr));\n        }\n    };\n});\nSystem.register(\"ionic/components/blur/blur\", [\"angular2/angular2\"], function (_export) {\n    \"use strict\";\n\n    var Directive, Renderer, ElementRef, __decorate, __metadata, Blur, _a, _b;\n\n    function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n    return {\n        setters: [function (_angular2Angular2) {\n            Directive = _angular2Angular2.Directive;\n            Renderer = _angular2Angular2.Renderer;\n            ElementRef = _angular2Angular2.ElementRef;\n        }],\n        execute: function () {\n            __decorate = undefined && undefined.__decorate || function (decorators, target, key, desc) {\n                if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") return Reflect.decorate(decorators, target, key, desc);\n                switch (arguments.length) {\n                    case 2:\n                        return decorators.reduceRight(function (o, d) {\n                            return d && d(o) || o;\n                        }, target);\n                    case 3:\n                        return decorators.reduceRight(function (o, d) {\n                            return d && d(target, key), void 0;\n                        }, void 0);\n                    case 4:\n                        return decorators.reduceRight(function (o, d) {\n                            return d && d(target, key, o) || o;\n                        }, desc);\n                }\n            };\n\n            __metadata = undefined && undefined.__metadata || function (k, v) {\n                if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n            };\n\n            Blur = function Blur(elementRef, renderer) {\n                _classCallCheck(this, Blur);\n\n                this.elementRef = elementRef;\n                this.renderer = renderer;\n                renderer.setElementStyle(elementRef, '-webkit-backdrop-filter', 'blur(10px)');\n            };\n\n            _export(\"Blur\", Blur);\n\n            _export(\"Blur\", Blur = __decorate([Directive({\n                selector: '[ion-blur]'\n            }), __metadata('design:paramtypes', [typeof (_a = typeof ElementRef !== 'undefined' && ElementRef) === 'function' && _a || Object, typeof (_b = typeof Renderer !== 'undefined' && Renderer) === 'function' && _b || Object])], Blur));\n        }\n    };\n});\nSystem.register(\"ionic/components/button/button\", [\"angular2/angular2\", \"../../config/config\"], function (_export) {\n    /**\n      * @name Button\n      * @module ionic\n      * @property [primary] - sets button color to default primary\n      * @property [secondary] - sets button color to default secondary\n      * @property [danger] - sets button color to default danger\n      * @property [light] - sets button color to default light\n      * @property [dark] - sets button color to default dark\n      * @property [outline] - for an unfilled outline button\n      * @property [clear] - for a transparent button that only shows text and icons\n      * @property [round] - for a button with rounded corners\n      * @property [block] - for a block button that fills it's parent container\n      * @property [full] - for a full width button\n      * @property [small] - sets button size to small\n      * @property [large] - sets button size to large\n      * @property [fab] - for a floating action button\n      * @property [fab-left] - position a fab button to the left\n      * @property [fab-right] - position a fab button to the right\n      * @property [fab-center] - position a fab button towards the center\n      * @property [fab-top] - position a fab button towards the top\n      * @property [fab-bottom] - position a fab button towards the bottom\n      * @description\n      * Buttons are simple components in Ionic, can consist of text, an icon, or both, and can be enhanced with a wide range of attributes.\n      * @demo /docs/demos/buttons/\n      * @see {@link /docs/components#buttons Button Component Docs}\n    \n     */\n    \"use strict\";\n\n    var Directive, ElementRef, Renderer, Attribute, Config, __decorate, __metadata, __param, Button, TEXT, ICON, _a, _b, _c;\n\n    function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n    return {\n        setters: [function (_angular2Angular2) {\n            Directive = _angular2Angular2.Directive;\n            ElementRef = _angular2Angular2.ElementRef;\n            Renderer = _angular2Angular2.Renderer;\n            Attribute = _angular2Angular2.Attribute;\n        }, function (_configConfig) {\n            Config = _configConfig.Config;\n        }],\n        execute: function () {\n            __decorate = undefined && undefined.__decorate || function (decorators, target, key, desc) {\n                if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") return Reflect.decorate(decorators, target, key, desc);\n                switch (arguments.length) {\n                    case 2:\n                        return decorators.reduceRight(function (o, d) {\n                            return d && d(o) || o;\n                        }, target);\n                    case 3:\n                        return decorators.reduceRight(function (o, d) {\n                            return d && d(target, key), void 0;\n                        }, void 0);\n                    case 4:\n                        return decorators.reduceRight(function (o, d) {\n                            return d && d(target, key, o) || o;\n                        }, desc);\n                }\n            };\n\n            __metadata = undefined && undefined.__metadata || function (k, v) {\n                if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n            };\n\n            __param = undefined && undefined.__param || function (paramIndex, decorator) {\n                return function (target, key) {\n                    decorator(target, key, paramIndex);\n                };\n            };\n\n            Button = function Button(config, elementRef, renderer, type) {\n                _classCallCheck(this, Button);\n\n                var element = elementRef.nativeElement;\n                if (config.get('hoverCSS') === false) {\n                    renderer.setElementClass(elementRef, 'disable-hover', true);\n                }\n                if (element.hasAttribute('ion-item')) {\n                    // no need to put on these icon classes for an ion-item\n                    return;\n                }\n                if (type) {\n                    renderer.setElementAttribute(elementRef, type, '');\n                }\n                // figure out if and where the icon lives in the button\n                var childNodes = element.childNodes;\n                var childNode = undefined;\n                var nodes = [];\n                for (var i = 0, l = childNodes.length; i < l; i++) {\n                    childNode = childNodes[i];\n                    if (childNode.nodeType === 3) {\n                        // text node\n                        if (childNode.textContent.trim() !== '') {\n                            nodes.push(TEXT);\n                        }\n                    } else if (childNode.nodeType === 1) {\n                        if (childNode.nodeName === 'ICON') {\n                            // icon element node\n                            nodes.push(ICON);\n                        } else {\n                            // element other than an <icon>\n                            nodes.push(TEXT);\n                        }\n                    }\n                }\n                if (nodes.length > 1) {\n                    if (nodes[0] === ICON && nodes[1] === TEXT) {\n                        element.classList.add('icon-left');\n                    } else if (nodes[0] === TEXT && nodes[1] === ICON) {\n                        element.classList.add('icon-right');\n                    }\n                } else if (nodes.length === 1 && nodes[0] === ICON) {\n                    element.classList.add('icon-only');\n                }\n            };\n\n            _export(\"Button\", Button);\n\n            _export(\"Button\", Button = __decorate([Directive({\n                selector: 'button,[button]'\n            }), __param(3, Attribute('type')), __metadata('design:paramtypes', [typeof (_a = typeof Config !== 'undefined' && Config) === 'function' && _a || Object, typeof (_b = typeof ElementRef !== 'undefined' && ElementRef) === 'function' && _b || Object, typeof (_c = typeof Renderer !== 'undefined' && Renderer) === 'function' && _c || Object, String])], Button));\n            TEXT = 1;\n            ICON = 2;\n        }\n    };\n});\nSystem.register(\"ionic/components/checkbox/checkbox\", [\"angular2/angular2\", \"../../util/form\"], function (_export) {\n    /**\n     * The checkbox is no different than the HTML checkbox input, except it's styled differently.\n     *\n     * See the [Angular 2 Docs](https://angular.io/docs/js/latest/api/core/Form-interface.html) for more info on forms and input.\n     *\n     * @property [checked] - whether or not the checkbox is checked (defaults to false)\n     * @property [value] - the value of the checkbox component\n     *\n     * @usage\n     * ```html\n     * <ion-checkbox checked=\"true\" value=\"isChecked\" ng-control=\"htmlCtrl\">\n     *   HTML5\n     * </ion-checkbox>\n     * ```\n     * @see {@link /docs/components#checkbox Checkbox Component Docs}\n     */\n    \"use strict\";\n\n    var Component, Optional, NgControl, ElementRef, Form, __decorate, __metadata, __param, Checkbox, _a, _b, _c;\n\n    var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();\n\n    function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n    return {\n        setters: [function (_angular2Angular2) {\n            Component = _angular2Angular2.Component;\n            Optional = _angular2Angular2.Optional;\n            NgControl = _angular2Angular2.NgControl;\n            ElementRef = _angular2Angular2.ElementRef;\n        }, function (_utilForm) {\n            Form = _utilForm.Form;\n        }],\n        execute: function () {\n            __decorate = undefined && undefined.__decorate || function (decorators, target, key, desc) {\n                if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") return Reflect.decorate(decorators, target, key, desc);\n                switch (arguments.length) {\n                    case 2:\n                        return decorators.reduceRight(function (o, d) {\n                            return d && d(o) || o;\n                        }, target);\n                    case 3:\n                        return decorators.reduceRight(function (o, d) {\n                            return d && d(target, key), void 0;\n                        }, void 0);\n                    case 4:\n                        return decorators.reduceRight(function (o, d) {\n                            return d && d(target, key, o) || o;\n                        }, desc);\n                }\n            };\n\n            __metadata = undefined && undefined.__metadata || function (k, v) {\n                if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n            };\n\n            __param = undefined && undefined.__param || function (paramIndex, decorator) {\n                return function (target, key) {\n                    decorator(target, key, paramIndex);\n                };\n            };\n\n            Checkbox = (function () {\n                function Checkbox(form, ngControl, elementRef) {\n                    _classCallCheck(this, Checkbox);\n\n                    this.form = form;\n                    form.register(this);\n                    this.onChange = function (_) {};\n                    this.onTouched = function (_) {};\n                    this.ngControl = ngControl;\n                    if (ngControl) ngControl.valueAccessor = this;\n                }\n\n                _createClass(Checkbox, [{\n                    key: \"onInit\",\n                    value: function onInit() {\n                        this.labelId = 'label-' + this.inputId;\n                    }\n\n                    /**\n                     * Toggle the checked state of the checkbox. Calls onChange to pass the updated checked state to the model (Control).\n                     */\n                }, {\n                    key: \"toggle\",\n                    value: function toggle() {\n                        this.checked = !this.checked;\n                        this.onChange(this.checked);\n                    }\n\n                    /**\n                     * @private\n                     * Click event handler to toggle the checkbox checked state.\n                     * @param {MouseEvent} ev  The click event.\n                     */\n                }, {\n                    key: \"click\",\n                    value: function click(ev) {\n                        ev.preventDefault();\n                        ev.stopPropagation();\n                        this.toggle();\n                    }\n\n                    /**\n                     * @private\n                     * Angular2 Forms API method called by the model (Control) on change to update\n                     * the checked value.\n                     * https://github.com/angular/angular/blob/master/modules/angular2/src/forms/directives/shared.ts#L34\n                     */\n                }, {\n                    key: \"writeValue\",\n                    value: function writeValue(value) {\n                        this.checked = value;\n                    }\n\n                    /**\n                     * @private\n                     * Angular2 Forms API method called by the view (NgControl) to register the\n                     * onChange event handler that updates the model (Control).\n                     * https://github.com/angular/angular/blob/master/modules/angular2/src/forms/directives/shared.ts#L27\n                     * @param {Function} fn  the onChange event handler.\n                     */\n                }, {\n                    key: \"registerOnChange\",\n                    value: function registerOnChange(fn) {\n                        this.onChange = fn;\n                    }\n\n                    /**\n                     * @private\n                     * Angular2 Forms API method called by the the view (NgControl) to register\n                     * the onTouched event handler that marks model (Control) as touched.\n                     * @param {Function} fn  onTouched event handler.\n                     */\n                }, {\n                    key: \"registerOnTouched\",\n                    value: function registerOnTouched(fn) {\n                        this.onTouched = fn;\n                    }\n\n                    /**\n                     * @private\n                     */\n                }, {\n                    key: \"onDestroy\",\n                    value: function onDestroy() {\n                        this.form.deregister(this);\n                    }\n                }]);\n\n                return Checkbox;\n            })();\n\n            _export(\"Checkbox\", Checkbox);\n\n            _export(\"Checkbox\", Checkbox = __decorate([Component({\n                selector: 'ion-checkbox',\n                inputs: ['value', 'checked', 'disabled', 'id'],\n                host: {\n                    'role': 'checkbox',\n                    'tappable': 'true',\n                    '[attr.tab-index]': 'tabIndex',\n                    '[attr.aria-checked]': 'checked',\n                    '[attr.aria-disabled]': 'disabled',\n                    '[attr.aria-labelledby]': 'labelId',\n                    '(click)': 'click($event)',\n                    'class': 'item'\n                },\n                template: '<div class=\"item-inner\">' + '<media-checkbox disable-activated>' + '<checkbox-icon></checkbox-icon>' + '</media-checkbox>' + '<ion-item-content id=\"{{labelId}}\">' + '<ng-content></ng-content>' + '</ion-item-content>' + '</div>'\n            }), __param(1, Optional()), __metadata('design:paramtypes', [typeof (_a = typeof Form !== 'undefined' && Form) === 'function' && _a || Object, typeof (_b = typeof NgControl !== 'undefined' && NgControl) === 'function' && _b || Object, typeof (_c = typeof ElementRef !== 'undefined' && ElementRef) === 'function' && _c || Object])], Checkbox));\n        }\n    };\n});\nSystem.register(\"ionic/components/content/content\", [\"angular2/angular2\", \"../ion\", \"../../config/config\", \"../../util/dom\", \"../../util/keyboard\", \"../nav/view-controller\", \"../../animations/scroll-to\"], function (_export) {\n    /**\n     * The Content component provides an easy to use content area that can be configured to use Ionic's custom Scroll View, or the built in overflow scrolling of the browser.\n     *\n     * While we recommend using the custom Scroll features in Ionic in most cases, sometimes (for performance reasons) only the browser's native overflow scrolling will suffice, and so we've made it easy to toggle between the Ionic scroll implementation and overflow scrolling.\n     *\n     * You can implement pull-to-refresh with the [Refresher](../../scroll/Refresher) component.\n     *\n     * @usage\n     * ```html\n     * <ion-content>\n     *   Add your content here!\n     * </ion-content>\n     * ```\n     *\n     */\n    \"use strict\";\n\n    var Component, ElementRef, Optional, NgZone, Ion, Config, raf, Keyboard, ViewController, ScrollTo, __decorate, __metadata, __param, Content, _a, _b, _c, _d, _e;\n\n    var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();\n\n    var _get = function get(_x, _x2, _x3) { var _again = true; _function: while (_again) { var object = _x, property = _x2, receiver = _x3; _again = false; if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { _x = parent; _x2 = property; _x3 = receiver; _again = true; desc = parent = undefined; continue _function; } } else if (\"value\" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } } };\n\n    function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n    function _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\n    return {\n        setters: [function (_angular2Angular2) {\n            Component = _angular2Angular2.Component;\n            ElementRef = _angular2Angular2.ElementRef;\n            Optional = _angular2Angular2.Optional;\n            NgZone = _angular2Angular2.NgZone;\n        }, function (_ion) {\n            Ion = _ion.Ion;\n        }, function (_configConfig) {\n            Config = _configConfig.Config;\n        }, function (_utilDom) {\n            raf = _utilDom.raf;\n        }, function (_utilKeyboard) {\n            Keyboard = _utilKeyboard.Keyboard;\n        }, function (_navViewController) {\n            ViewController = _navViewController.ViewController;\n        }, function (_animationsScrollTo) {\n            ScrollTo = _animationsScrollTo.ScrollTo;\n        }],\n        execute: function () {\n            __decorate = undefined && undefined.__decorate || function (decorators, target, key, desc) {\n                if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") return Reflect.decorate(decorators, target, key, desc);\n                switch (arguments.length) {\n                    case 2:\n                        return decorators.reduceRight(function (o, d) {\n                            return d && d(o) || o;\n                        }, target);\n                    case 3:\n                        return decorators.reduceRight(function (o, d) {\n                            return d && d(target, key), void 0;\n                        }, void 0);\n                    case 4:\n                        return decorators.reduceRight(function (o, d) {\n                            return d && d(target, key, o) || o;\n                        }, desc);\n                }\n            };\n\n            __metadata = undefined && undefined.__metadata || function (k, v) {\n                if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n            };\n\n            __param = undefined && undefined.__param || function (paramIndex, decorator) {\n                return function (target, key) {\n                    decorator(target, key, paramIndex);\n                };\n            };\n\n            Content = (function (_Ion) {\n                _inherits(Content, _Ion);\n\n                /**\n                 * @param {ElementRef} elementRef  A reference to the component's DOM element.\n                 * @param {Config} config  The config object to change content's default settings.\n                 */\n\n                function Content(elementRef, config, keyboard, viewCtrl, _zone) {\n                    _classCallCheck(this, Content);\n\n                    _get(Object.getPrototypeOf(Content.prototype), \"constructor\", this).call(this, elementRef, config);\n                    this._zone = _zone;\n                    this.scrollPadding = 0;\n                    this.keyboard = keyboard;\n                    if (viewCtrl) {\n                        viewCtrl.setContent(this);\n                        viewCtrl.setContentRef(elementRef);\n                    }\n                }\n\n                /**\n                 * @private\n                 */\n\n                _createClass(Content, [{\n                    key: \"onInit\",\n                    value: function onInit() {\n                        _get(Object.getPrototypeOf(Content.prototype), \"onInit\", this).call(this);\n                        this.scrollElement = this.getNativeElement().children[0];\n                    }\n\n                    /**\n                     * Adds the specified scroll handler to the content' scroll element.\n                     * @param {Function} handler  The scroll event handler.\n                     * @returns {Function} A function that removes the scroll handler.\n                     */\n                }, {\n                    key: \"addScrollEventListener\",\n                    value: function addScrollEventListener(handler) {\n                        var _this = this;\n\n                        if (!this.scrollElement) {\n                            return;\n                        }\n                        // ensure we're not creating duplicates\n                        this.scrollElement.removeEventListener('scroll', handler);\n                        this.scrollElement.addEventListener('scroll', handler);\n                        return function () {\n                            _this.scrollElement.removeEventListener('scroll', handler);\n                        };\n                    }\n                }, {\n                    key: \"onScrollEnd\",\n                    value: function onScrollEnd(callback) {\n                        var lastScrollTop = null;\n                        var framesUnchanged = 0;\n                        var scrollElement = this.scrollElement;\n                        function next() {\n                            var currentScrollTop = scrollElement.scrollTop;\n                            if (lastScrollTop !== null) {\n                                if (Math.round(lastScrollTop) === Math.round(currentScrollTop)) {\n                                    framesUnchanged++;\n                                } else {\n                                    framesUnchanged = 0;\n                                }\n                                if (framesUnchanged > 9) {\n                                    return callback();\n                                }\n                            }\n                            lastScrollTop = currentScrollTop;\n                            raf(function () {\n                                raf(next);\n                            });\n                        }\n                        setTimeout(next, 100);\n                    }\n\n                    /**\n                     * Adds the specified touchmove handler to the content's scroll element.\n                     * @param {Function} handler  The touchmove handler.\n                     * @returns {Function} A function that removes the touchmove handler.\n                     */\n                }, {\n                    key: \"addTouchMoveListener\",\n                    value: function addTouchMoveListener(handler) {\n                        var _this2 = this;\n\n                        if (!this.scrollElement) {\n                            return;\n                        }\n                        // ensure we're not creating duplicates\n                        this.scrollElement.removeEventListener('touchmove', handler);\n                        this.scrollElement.addEventListener('touchmove', handler);\n                        return function () {\n                            _this2.scrollElement.removeEventListener('touchmove', handler);\n                        };\n                    }\n\n                    /**\n                     * Scroll to the specified position.\n                     * @param {TODO} x  The x-value to scroll to.\n                     * @param {TODO} y  The y-value to scroll to.\n                     * @param {Number} duration  Duration of the scroll animation.\n                     * @param {TODO} tolerance  TODO\n                     * @returns {TODO} TODO\n                     */\n                }, {\n                    key: \"scrollTo\",\n                    value: function scrollTo(x, y, duration, tolerance) {\n                        if (this._scrollTo) {\n                            this._scrollTo.dispose();\n                        }\n                        this._scrollTo = new ScrollTo(this.scrollElement);\n                        return this._scrollTo.start(x, y, duration, tolerance);\n                    }\n                }, {\n                    key: \"scrollToTop\",\n                    value: function scrollToTop() {\n                        if (this._scrollTo) {\n                            this._scrollTo.dispose();\n                        }\n                        this._scrollTo = new ScrollTo(this.scrollElement);\n                        return this._scrollTo.start(0, 0, 300, 0);\n                    }\n\n                    /**\n                     * @private\n                     * Returns the content and scroll elements' dimensions.\n                     * @returns {Object} dimensions  The content and scroll elements' dimensions\n                     * {Number} dimensions.contentHeight  content offsetHeight\n                     * {Number} dimensions.contentTop  content offsetTop\n                     * {Number} dimensions.contentBottom  content offsetTop+offsetHeight\n                     * {Number} dimensions.contentWidth  content offsetWidth\n                     * {Number} dimensions.contentLeft  content offsetLeft\n                     * {Number} dimensions.contentRight  content offsetLeft + offsetWidth\n                     * {Number} dimensions.scrollHeight  scroll scrollHeight\n                     * {Number} dimensions.scrollTop  scroll scrollTop\n                     * {Number} dimensions.scrollBottom  scroll scrollTop + scrollHeight\n                     * {Number} dimensions.scrollWidth  scroll scrollWidth\n                     * {Number} dimensions.scrollLeft  scroll scrollLeft\n                     * {Number} dimensions.scrollRight  scroll scrollLeft + scrollWidth\n                     */\n                }, {\n                    key: \"getDimensions\",\n                    value: function getDimensions() {\n                        var scrollElement = this.scrollElement;\n                        var parentElement = scrollElement.parentElement;\n                        return {\n                            contentHeight: parentElement.offsetHeight,\n                            contentTop: parentElement.offsetTop,\n                            contentBottom: parentElement.offsetTop + parentElement.offsetHeight,\n                            contentWidth: parentElement.offsetWidth,\n                            contentLeft: parentElement.offsetLeft,\n                            contentRight: parentElement.offsetLeft + parentElement.offsetWidth,\n                            scrollHeight: scrollElement.scrollHeight,\n                            scrollTop: scrollElement.scrollTop,\n                            scrollBottom: scrollElement.scrollTop + scrollElement.scrollHeight,\n                            scrollWidth: scrollElement.scrollWidth,\n                            scrollLeft: scrollElement.scrollLeft,\n                            scrollRight: scrollElement.scrollLeft + scrollElement.scrollWidth\n                        };\n                    }\n\n                    /**\n                     * @private\n                     * Adds padding to the bottom of the scroll element when the keyboard is open\n                     * so content below the keyboard can be scrolled into view.\n                     */\n                }, {\n                    key: \"addScrollPadding\",\n                    value: function addScrollPadding(newScrollPadding) {\n                        if (newScrollPadding > this.scrollPadding) {\n                            console.debug('addScrollPadding', newScrollPadding);\n                            this.scrollPadding = newScrollPadding;\n                            this.scrollElement.style.paddingBottom = newScrollPadding + 'px';\n                        }\n                    }\n                }]);\n\n                return Content;\n            })(Ion);\n\n            _export(\"Content\", Content);\n\n            _export(\"Content\", Content = __decorate([Component({\n                selector: 'ion-content',\n                template: '<scroll-content>' + '<ng-content></ng-content>' + '</scroll-content>'\n            }), __param(3, Optional()), __metadata('design:paramtypes', [typeof (_a = typeof ElementRef !== 'undefined' && ElementRef) === 'function' && _a || Object, typeof (_b = typeof Config !== 'undefined' && Config) === 'function' && _b || Object, typeof (_c = typeof Keyboard !== 'undefined' && Keyboard) === 'function' && _c || Object, typeof (_d = typeof ViewController !== 'undefined' && ViewController) === 'function' && _d || Object, typeof (_e = typeof NgZone !== 'undefined' && NgZone) === 'function' && _e || Object])], Content));\n        }\n    };\n});\nSystem.register(\"ionic/components/icon/icon\", [\"angular2/angular2\", \"../../config/config\"], function (_export) {\n    /**\n     * @name Icon\n     * @description\n     * Icons can be used on their own, or inside of a number of Ionic components. For a full list of available icons,\n     * check out the [Ionicons resource docs](../../../../../resources/ionicons).\n     *\n     * @property {boolean} [is-active] - Whether or not the icon is active. Icons that are not active will use an outlined version of the icon.\n     * If there is not an outlined version for the particular icon, it will use the default (full) version.\n     * @property {string} [ios] - Explicitly set the icon to use on iOS.\n     * @property {string} [md] - Explicitly set the icon to use on Android.\n     * @see {@link /docs/components#icons Icon Component Docs}\n     *\n     */\n    \"use strict\";\n\n    var Directive, ElementRef, Renderer, Config, __decorate, __metadata, Icon, _a, _b, _c;\n\n    var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();\n\n    function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n    return {\n        setters: [function (_angular2Angular2) {\n            Directive = _angular2Angular2.Directive;\n            ElementRef = _angular2Angular2.ElementRef;\n            Renderer = _angular2Angular2.Renderer;\n        }, function (_configConfig) {\n            Config = _configConfig.Config;\n        }],\n        execute: function () {\n            __decorate = undefined && undefined.__decorate || function (decorators, target, key, desc) {\n                if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") return Reflect.decorate(decorators, target, key, desc);\n                switch (arguments.length) {\n                    case 2:\n                        return decorators.reduceRight(function (o, d) {\n                            return d && d(o) || o;\n                        }, target);\n                    case 3:\n                        return decorators.reduceRight(function (o, d) {\n                            return d && d(target, key), void 0;\n                        }, void 0);\n                    case 4:\n                        return decorators.reduceRight(function (o, d) {\n                            return d && d(target, key, o) || o;\n                        }, desc);\n                }\n            };\n\n            __metadata = undefined && undefined.__metadata || function (k, v) {\n                if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n            };\n\n            Icon = (function () {\n                function Icon(elementRef, config, renderer) {\n                    _classCallCheck(this, Icon);\n\n                    this.elementRef = elementRef;\n                    this.renderer = renderer;\n                    this.config = config;\n                    this.mode = config.get('iconMode');\n                }\n\n                /**\n                 * @private\n                 */\n\n                _createClass(Icon, [{\n                    key: \"onInit\",\n                    value: function onInit() {\n                        var ele = this.elementRef.nativeElement;\n                        if (this.mode == 'ios' && this.ios) {\n                            this.name = this.ios;\n                        } else if (this.mode == 'md' && this.md) {\n                            this.name = this.md;\n                        } else if (!this.name) {\n                            // looping through native dom attributes, eww\n                            // https://github.com/angular/angular/issues/3961\n                            for (var i = 0, l = ele.attributes.length; i < l; i++) {\n                                if (ele.attributes[i].value === '' && /_|item-|is-active|large|small|class/.test(ele.attributes[i].name) !== true) {\n                                    this.name = ele.attributes[i].name;\n                                    break;\n                                }\n                            }\n                        }\n                        if (!this.name) return;\n                        if (!/^ion-/.test(this.name)) {\n                            // not an exact icon being used\n                            // add mode specific prefix\n                            this.name = 'ion-' + this.mode + '-' + this.name;\n                        }\n                        this.update();\n                    }\n                }, {\n                    key: \"update\",\n\n                    /**\n                     * @private\n                     */\n                    value: function update() {\n                        if (this.name && this.mode == 'ios') {\n                            if (this.isActive) {\n                                if (/-outline/.test(this.name)) {\n                                    this.name = this.name.replace('-outline', '');\n                                }\n                            } else if (!/-outline/.test(this.name)) {\n                                this.name += '-outline';\n                            }\n                        }\n                        if (this._name !== this.name) {\n                            if (this._name) {\n                                this.renderer.setElementClass(this.elementRef, this._name, false);\n                            }\n                            this._name = this.name;\n                            this.renderer.setElementClass(this.elementRef, this.name, true);\n                            this.renderer.setElementAttribute(this.elementRef, 'aria-label', this.name.replace('ion-', '').replace('ios-', '').replace('md-', '').replace('-', ' '));\n                        }\n                    }\n                }, {\n                    key: \"isActive\",\n                    get: function get() {\n                        return this._isActive === undefined || this._isActive === true || this._isActive === 'true';\n                    },\n\n                    /**\n                     * @private\n                     */\n                    set: function set(val) {\n                        this._isActive = val;\n                        this.update();\n                    }\n                }]);\n\n                return Icon;\n            })();\n\n            _export(\"Icon\", Icon);\n\n            _export(\"Icon\", Icon = __decorate([Directive({\n                selector: 'icon',\n                inputs: ['name', 'ios', 'md', 'isActive'],\n                host: {\n                    'role': 'img'\n                }\n            }), __metadata('design:paramtypes', [typeof (_a = typeof ElementRef !== 'undefined' && ElementRef) === 'function' && _a || Object, typeof (_b = typeof Config !== 'undefined' && Config) === 'function' && _b || Object, typeof (_c = typeof Renderer !== 'undefined' && Renderer) === 'function' && _c || Object])], Icon));\n        }\n    };\n});\nSystem.register('ionic/components/item/item-sliding-gesture', ['ionic/gestures/hammer', 'ionic/gestures/drag-gesture', 'ionic/util/dom'], function (_export) {\n    'use strict';\n\n    var Hammer, DragGesture, CSS, raf, closest, ItemSlidingGesture, DRAG_THRESHOLD;\n\n    var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();\n\n    var _get = function get(_x, _x2, _x3) { var _again = true; _function: while (_again) { var object = _x, property = _x2, receiver = _x3; _again = false; if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { _x = parent; _x2 = property; _x3 = receiver; _again = true; desc = parent = undefined; continue _function; } } else if ('value' in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } } };\n\n    function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\n    function _inherits(subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\n    function isItemActive(ele, isActive) {\n        ele.classList[isActive ? 'add' : 'remove']('active-slide');\n        ele.classList[isActive ? 'add' : 'remove']('active-options');\n    }\n    function preventDefault(ev) {\n        ev.preventDefault();\n    }\n    function getItemConatiner(ele) {\n        return closest(ele, 'ion-item-sliding', true);\n    }\n    function isFromOptionButtons(ele) {\n        return !!closest(ele, 'ion-item-options', true);\n    }\n    function getOptionsWidth(itemContainerEle) {\n        var optsEle = itemContainerEle.querySelector('ion-item-options');\n        if (optsEle) {\n            return optsEle.offsetWidth;\n        }\n    }\n    function isActive(itemContainerEle) {\n        return itemContainerEle.classList.contains('active-slide');\n    }\n    return {\n        setters: [function (_ionicGesturesHammer) {\n            Hammer = _ionicGesturesHammer.Hammer;\n        }, function (_ionicGesturesDragGesture) {\n            DragGesture = _ionicGesturesDragGesture.DragGesture;\n        }, function (_ionicUtilDom) {\n            CSS = _ionicUtilDom.CSS;\n            raf = _ionicUtilDom.raf;\n            closest = _ionicUtilDom.closest;\n        }],\n        execute: function () {\n            ItemSlidingGesture = (function (_DragGesture) {\n                _inherits(ItemSlidingGesture, _DragGesture);\n\n                function ItemSlidingGesture(list, listEle) {\n                    var _this = this;\n\n                    _classCallCheck(this, ItemSlidingGesture);\n\n                    _get(Object.getPrototypeOf(ItemSlidingGesture.prototype), 'constructor', this).call(this, listEle, {\n                        direction: 'x',\n                        threshold: DRAG_THRESHOLD\n                    });\n                    this.data = {};\n                    this.openItems = 0;\n                    this.list = list;\n                    this.listEle = listEle;\n                    this.canDrag = true;\n                    this.listen();\n                    this.tap = function (ev) {\n                        if (!isFromOptionButtons(ev.target)) {\n                            var didClose = _this.closeOpened();\n                            if (didClose) {\n                                preventDefault(ev);\n                            }\n                        }\n                    };\n                    this.mouseOut = function (ev) {\n                        if (ev.target.tagName === 'ION-ITEM-SLIDING') {\n                            _this.onDragEnd(ev);\n                        }\n                    };\n                }\n\n                _createClass(ItemSlidingGesture, [{\n                    key: 'onDragStart',\n                    value: function onDragStart(ev) {\n                        var itemContainerEle = getItemConatiner(ev.target);\n                        if (!itemContainerEle) return;\n                        this.closeOpened(itemContainerEle);\n                        var openAmout = this.getOpenAmount(itemContainerEle);\n                        var itemData = this.get(itemContainerEle);\n                        this.preventDrag = openAmout > 0;\n                        if (this.preventDrag) {\n                            this.closeOpened();\n                            return preventDefault(ev);\n                        }\n                        itemContainerEle.classList.add('active-slide');\n                        this.set(itemContainerEle, 'offsetX', openAmout);\n                        this.set(itemContainerEle, 'startX', ev.center[this.direction]);\n                        this.dragEnded = false;\n                    }\n                }, {\n                    key: 'onDrag',\n                    value: function onDrag(ev) {\n                        var _this2 = this;\n\n                        if (this.dragEnded || this.preventDrag || Math.abs(ev.deltaY) > 30) {\n                            this.preventDrag = true;\n                            return;\n                        }\n                        var itemContainerEle = getItemConatiner(ev.target);\n                        if (!itemContainerEle || !isActive(itemContainerEle)) return;\n                        var itemData = this.get(itemContainerEle);\n                        if (!itemData.optsWidth) {\n                            itemData.optsWidth = getOptionsWidth(itemContainerEle);\n                            if (!itemData.optsWidth) return;\n                        }\n                        var x = ev.center[this.direction];\n                        var delta = x - itemData.startX;\n                        var newX = Math.max(0, itemData.offsetX - delta);\n                        if (newX > itemData.optsWidth) {\n                            // Calculate the new X position, capped at the top of the buttons\n                            newX = -Math.min(-itemData.optsWidth, -itemData.optsWidth + (delta + itemData.optsWidth) * 0.4);\n                        }\n                        if (newX > 5 && ev.srcEvent.type.indexOf('mouse') > -1 && !itemData.hasMouseOut) {\n                            itemContainerEle.addEventListener('mouseout', this.mouseOut);\n                            itemData.hasMouseOut = true;\n                        }\n                        raf(function () {\n                            if (!_this2.dragEnded && !_this2.preventDrag) {\n                                isItemActive(itemContainerEle, true);\n                                _this2.open(itemContainerEle, newX, false);\n                            }\n                        });\n                    }\n                }, {\n                    key: 'onDragEnd',\n                    value: function onDragEnd(ev) {\n                        var _this3 = this;\n\n                        this.preventDrag = false;\n                        this.dragEnded = true;\n                        var itemContainerEle = getItemConatiner(ev.target);\n                        if (!itemContainerEle || !isActive(itemContainerEle)) return;\n                        // If we are currently dragging, we want to snap back into place\n                        // The final resting point X will be the width of the exposed buttons\n                        var itemData = this.get(itemContainerEle);\n                        var restingPoint = itemData.optsWidth;\n                        // Check if the drag didn't clear the buttons mid-point\n                        // and we aren't moving fast enough to swipe open\n                        if (this.getOpenAmount(itemContainerEle) < restingPoint / 2) {\n                            // If we are going left but too slow, or going right, go back to resting\n                            if (ev.direction & Hammer.DIRECTION_RIGHT || Math.abs(ev.velocityX) < 0.3) {\n                                restingPoint = 0;\n                            }\n                        }\n                        itemContainerEle.removeEventListener('mouseout', this.mouseOut);\n                        itemData.hasMouseOut = false;\n                        raf(function () {\n                            _this3.open(itemContainerEle, restingPoint, true);\n                        });\n                    }\n                }, {\n                    key: 'closeOpened',\n                    value: function closeOpened(doNotCloseEle) {\n                        var didClose = false;\n                        if (this.openItems) {\n                            var openItemElements = this.listEle.querySelectorAll('.active-slide');\n                            for (var i = 0; i < openItemElements.length; i++) {\n                                if (openItemElements[i] !== doNotCloseEle) {\n                                    this.open(openItemElements[i], 0, true);\n                                    didClose = true;\n                                }\n                            }\n                        }\n                        return didClose;\n                    }\n                }, {\n                    key: 'open',\n                    value: function open(itemContainerEle, openAmount, isFinal) {\n                        var _this4 = this;\n\n                        var slidingEle = itemContainerEle.querySelector('ion-item,[ion-item]');\n                        if (!slidingEle) return;\n                        this.set(itemContainerEle, 'openAmount', openAmount);\n                        clearTimeout(this.get(itemContainerEle).timerId);\n                        if (openAmount) {\n                            this.openItems++;\n                        } else {\n                            var timerId = setTimeout(function () {\n                                if (slidingEle.style[CSS.transform] === '') {\n                                    isItemActive(itemContainerEle, false);\n                                    _this4.openItems--;\n                                }\n                            }, 400);\n                            this.set(itemContainerEle, 'timerId', timerId);\n                        }\n                        slidingEle.style[CSS.transition] = isFinal ? '' : 'none';\n                        slidingEle.style[CSS.transform] = openAmount ? 'translate3d(' + -openAmount + 'px,0,0)' : '';\n                        if (isFinal) {\n                            if (openAmount) {\n                                isItemActive(itemContainerEle, true);\n                                this.on('tap', this.tap);\n                            } else {\n                                this.off('tap', this.tap);\n                            }\n                            this.enableScroll(!openAmount);\n                        }\n                    }\n                }, {\n                    key: 'getOpenAmount',\n                    value: function getOpenAmount(itemContainerEle) {\n                        return this.get(itemContainerEle).openAmount || 0;\n                    }\n                }, {\n                    key: 'get',\n                    value: function get(itemContainerEle) {\n                        return this.data[itemContainerEle && itemContainerEle.$ionSlide] || {};\n                    }\n                }, {\n                    key: 'set',\n                    value: function set(itemContainerEle, key, value) {\n                        if (!this.data[itemContainerEle.$ionSlide]) {\n                            this.data[itemContainerEle.$ionSlide] = {};\n                        }\n                        this.data[itemContainerEle.$ionSlide][key] = value;\n                    }\n                }, {\n                    key: 'enableScroll',\n                    value: function enableScroll(shouldEnable) {\n                        var scrollContentEle = closest(this.listEle, 'scroll-content');\n                        if (scrollContentEle) {\n                            scrollContentEle[shouldEnable ? 'removeEventListener' : 'addEventListener']('touchstart', preventDefault);\n                        }\n                    }\n                }, {\n                    key: 'unlisten',\n                    value: function unlisten() {\n                        _get(Object.getPrototypeOf(ItemSlidingGesture.prototype), 'unlisten', this).call(this);\n                        this.listEle = null;\n                    }\n                }]);\n\n                return ItemSlidingGesture;\n            })(DragGesture);\n\n            _export('ItemSlidingGesture', ItemSlidingGesture);\n\n            DRAG_THRESHOLD = 20;\n        }\n    };\n});\nSystem.register(\"ionic/components/item/item-sliding\", [\"angular2/angular2\", \"../list/list\"], function (_export) {\n    /**\n     * @description\n     * Creates a list-item that can easily be swiped,\n     * deleted, reordered, edited, and more.\n     *\n     * @usage\n     * ```html\n     * <ion-list>\n     *   <ion-item-sliding *ng-for=\"#item of items\">\n     *     <ion-item (click)=\"itemTapped(item)\">\n     *       {{item.title}}\n     *     </ion-item>\n     *     <ion-item-options>\n     *       <button (click)=\"favorite(item)\">Favorite</button>\n     *       <button (click)=\"share(item)\">Share</button>\n     *     </ion-item-options>\n     *   </ion-item>\n     * </ion-list>\n     * ```\n     */\n    \"use strict\";\n\n    var Component, ElementRef, Optional, List, __decorate, __metadata, __param, ItemSliding, slideIds, _a, _b;\n\n    var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();\n\n    function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n    return {\n        setters: [function (_angular2Angular2) {\n            Component = _angular2Angular2.Component;\n            ElementRef = _angular2Angular2.ElementRef;\n            Optional = _angular2Angular2.Optional;\n        }, function (_listList) {\n            List = _listList.List;\n        }],\n        execute: function () {\n            __decorate = undefined && undefined.__decorate || function (decorators, target, key, desc) {\n                if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") return Reflect.decorate(decorators, target, key, desc);\n                switch (arguments.length) {\n                    case 2:\n                        return decorators.reduceRight(function (o, d) {\n                            return d && d(o) || o;\n                        }, target);\n                    case 3:\n                        return decorators.reduceRight(function (o, d) {\n                            return d && d(target, key), void 0;\n                        }, void 0);\n                    case 4:\n                        return decorators.reduceRight(function (o, d) {\n                            return d && d(target, key, o) || o;\n                        }, desc);\n                }\n            };\n\n            __metadata = undefined && undefined.__metadata || function (k, v) {\n                if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n            };\n\n            __param = undefined && undefined.__param || function (paramIndex, decorator) {\n                return function (target, key) {\n                    decorator(target, key, paramIndex);\n                };\n            };\n\n            ItemSliding = (function () {\n                function ItemSliding(list, elementRef) {\n                    _classCallCheck(this, ItemSliding);\n\n                    this.list = list;\n                    list.enableSlidingItems(true);\n                    elementRef.nativeElement.$ionSlide = ++slideIds;\n                }\n\n                _createClass(ItemSliding, [{\n                    key: \"close\",\n                    value: function close() {\n                        this.list.closeSlidingItems();\n                    }\n                }]);\n\n                return ItemSliding;\n            })();\n\n            _export(\"ItemSliding\", ItemSliding);\n\n            _export(\"ItemSliding\", ItemSliding = __decorate([Component({\n                selector: 'ion-item-sliding',\n                template: '<ng-content select=\"ion-item,[ion-item]\"></ng-content>' + '<ng-content select=\"ion-item-options\"></ng-content>'\n            }), __param(0, Optional()), __metadata('design:paramtypes', [typeof (_a = typeof List !== 'undefined' && List) === 'function' && _a || Object, typeof (_b = typeof ElementRef !== 'undefined' && ElementRef) === 'function' && _b || Object])], ItemSliding));\n            slideIds = 0;\n        }\n    };\n});\nSystem.register(\"ionic/components/item/item\", [\"angular2/angular2\"], function (_export) {\n    /**\n     * Creates a list-item that can easily be swiped, deleted, reordered, edited, and more.\n     *\n     * There are three common ways to use an item:\n     * - Use `<ion-item>` for something that is only non-clickable text.\n     * - Use `<button ion-item>` for something that can be clicked/tapped. Typically this element will also have a `(click)` handler.\n     * - Use `<a ion-item>` for when the item needs to contain a `href`.\n     *\n     * By default, `<button ion-item>` and `<a ion-item>` will receive a right arrow icon on iOS to signal that tapping the item will reveal more information.\n     * To hide this icon, add the `detail-none` attribute to the item (eg: `<button ion-item detail-none>`). To add the icon when it is not displayed by default,\n     * add the `detail-push` attribute (eg: `<ion-item detail-push>`).\n     *\n     * To break an item up into multiple columns, add multiple `<ion-item-content>` components inside of the item. By default,\n     * this component will automatically be added inside of an `<ion-item>`, giving it a single column.\n     *\n     *\n     * @usage\n     * ```html\n     *\n     * <ion-list>\n     *\n     *   // default item\n     *   <ion-item>\n     *     {{item.title}}\n     *   </ion-item>\n     *\n     *   // multiple item-content containers\n     *   <ion-item>\n     *     <ion-item-content>First Column</ion-item-content>\n     *     <ion-item-content>Second Column</ion-item-content>\n     *     <ion-item-content>Third Column</ion-item-content>\n     *   </ion-item>\n     *\n     * </ion-list>\n     *\n     *  ```\n     * @see {@link /docs/components#lists List Component Docs}\n     * @see {@link ../../list/List List API Docs}\n     */\n    \"use strict\";\n\n    var Component, __decorate, __metadata, Item;\n\n    function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n    return {\n        setters: [function (_angular2Angular2) {\n            Component = _angular2Angular2.Component;\n        }],\n        execute: function () {\n            __decorate = undefined && undefined.__decorate || function (decorators, target, key, desc) {\n                if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") return Reflect.decorate(decorators, target, key, desc);\n                switch (arguments.length) {\n                    case 2:\n                        return decorators.reduceRight(function (o, d) {\n                            return d && d(o) || o;\n                        }, target);\n                    case 3:\n                        return decorators.reduceRight(function (o, d) {\n                            return d && d(target, key), void 0;\n                        }, void 0);\n                    case 4:\n                        return decorators.reduceRight(function (o, d) {\n                            return d && d(target, key, o) || o;\n                        }, desc);\n                }\n            };\n\n            __metadata = undefined && undefined.__metadata || function (k, v) {\n                if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n            };\n\n            Item = function Item() {\n                _classCallCheck(this, Item);\n            };\n\n            _export(\"Item\", Item);\n\n            _export(\"Item\", Item = __decorate([Component({\n                selector: 'ion-item,[ion-item]',\n                template: '<ng-content select=\"[item-left]\"></ng-content>' + '<div class=\"item-inner\">' + '<ng-content select=\"ion-item-content\"></ng-content>' + '<ion-item-content cnt>' + '<ng-content></ng-content>' + '</ion-item-content>' + '<ng-content select=\"[item-right]\"></ng-content>' + '</div>',\n                host: {\n                    'class': 'item'\n                }\n            }), __metadata('design:paramtypes', [])], Item));\n        }\n    };\n});\nSystem.register(\"ionic/components/list/list\", [\"angular2/angular2\", \"../ion\", \"../../config/config\", \"./virtual\", \"../item/item-sliding-gesture\", \"ionic/util\"], function (_export) {\n    /**\n     * The List is a widely used interface element in almost any mobile app, and can include\n     * content ranging from basic text all the way to buttons, toggles, icons, and thumbnails.\n     *\n     * Both the list, which contains items, and the list items themselves can be any HTML\n     * element.\n     *\n     * Using the List and Item components make it easy to support various\n     * interaction modes such as swipe to edit, drag to reorder, and removing items.\n     * @demo /docs/demos/list/\n     * @see {@link /docs/components#lists List Component Docs}\n     *\n     *\n     */\n    \"use strict\";\n\n    var Directive, ElementRef, NgZone, Ion, Config, ListVirtualScroll, ItemSlidingGesture, util, __decorate, __metadata, List, ListHeader, _a, _b, _c;\n\n    var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();\n\n    var _get = function get(_x, _x2, _x3) { var _again = true; _function: while (_again) { var object = _x, property = _x2, receiver = _x3; _again = false; if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { _x = parent; _x2 = property; _x3 = receiver; _again = true; desc = parent = undefined; continue _function; } } else if (\"value\" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } } };\n\n    function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n    function _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\n    return {\n        setters: [function (_angular2Angular2) {\n            Directive = _angular2Angular2.Directive;\n            ElementRef = _angular2Angular2.ElementRef;\n            NgZone = _angular2Angular2.NgZone;\n        }, function (_ion) {\n            Ion = _ion.Ion;\n        }, function (_configConfig) {\n            Config = _configConfig.Config;\n        }, function (_virtual) {\n            ListVirtualScroll = _virtual.ListVirtualScroll;\n        }, function (_itemItemSlidingGesture) {\n            ItemSlidingGesture = _itemItemSlidingGesture.ItemSlidingGesture;\n        }, function (_ionicUtil) {\n            util = _ionicUtil;\n        }],\n        execute: function () {\n            __decorate = undefined && undefined.__decorate || function (decorators, target, key, desc) {\n                if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") return Reflect.decorate(decorators, target, key, desc);\n                switch (arguments.length) {\n                    case 2:\n                        return decorators.reduceRight(function (o, d) {\n                            return d && d(o) || o;\n                        }, target);\n                    case 3:\n                        return decorators.reduceRight(function (o, d) {\n                            return d && d(target, key), void 0;\n                        }, void 0);\n                    case 4:\n                        return decorators.reduceRight(function (o, d) {\n                            return d && d(target, key, o) || o;\n                        }, desc);\n                }\n            };\n\n            __metadata = undefined && undefined.__metadata || function (k, v) {\n                if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n            };\n\n            List = (function (_Ion) {\n                _inherits(List, _Ion);\n\n                function List(elementRef, config, zone) {\n                    _classCallCheck(this, List);\n\n                    _get(Object.getPrototypeOf(List.prototype), \"constructor\", this).call(this, elementRef, config);\n                    this.zone = zone;\n                    this.ele = elementRef.nativeElement;\n                    this._enableSliding = false;\n                }\n\n                /**\n                 * @private\n                 */\n\n                _createClass(List, [{\n                    key: \"onInit\",\n                    value: function onInit() {\n                        _get(Object.getPrototypeOf(List.prototype), \"onInit\", this).call(this);\n                        if (util.isDefined(this.virtual)) {\n                            console.log('Content', this.content);\n                            console.log('Virtual?', this.virtual);\n                            console.log('Items?', this.items.length, 'of \\'em');\n                            this._initVirtualScrolling();\n                        }\n                    }\n\n                    /**\n                     * @private\n                     */\n                }, {\n                    key: \"onDestroy\",\n                    value: function onDestroy() {\n                        this.ele = null;\n                        this.slidingGesture && this.slidingGesture.unlisten();\n                    }\n\n                    /**\n                     * @private\n                     */\n                }, {\n                    key: \"_initVirtualScrolling\",\n                    value: function _initVirtualScrolling() {\n                        if (!this.content) {\n                            return;\n                        }\n                        this._virtualScrollingManager = new ListVirtualScroll(this);\n                    }\n\n                    /**\n                     * @private\n                     */\n                }, {\n                    key: \"setItemTemplate\",\n                    value: function setItemTemplate(item) {\n                        this.itemTemplate = item;\n                    }\n                }, {\n                    key: \"enableSlidingItems\",\n                    value: function enableSlidingItems(shouldEnable) {\n                        var _this = this;\n\n                        if (this._init) {\n                            if (this._enableSliding !== shouldEnable) {\n                                this._enableSliding = shouldEnable;\n                                if (shouldEnable) {\n                                    console.debug('enableSlidingItems');\n                                    this.zone.runOutsideAngular(function () {\n                                        setTimeout(function () {\n                                            _this.slidingGesture = new ItemSlidingGesture(_this, _this.ele);\n                                        });\n                                    });\n                                } else {\n                                    this.slidingGesture && this.slidingGesture.unlisten();\n                                }\n                            }\n                        }\n                    }\n                }, {\n                    key: \"closeSlidingItems\",\n                    value: function closeSlidingItems() {\n                        this.slidingGesture && this.slidingGesture.closeOpened();\n                    }\n\n                    /**\n                     * @private\n                     */\n                }, {\n                    key: \"afterViewInit\",\n                    value: function afterViewInit() {\n                        this._init = true;\n                        if (this._enableSliding) {\n                            this.enableSlidingItems(true);\n                        }\n                    }\n                }]);\n\n                return List;\n            })(Ion);\n\n            _export(\"List\", List);\n\n            _export(\"List\", List = __decorate([Directive({\n                selector: 'ion-list',\n                inputs: ['items', 'virtual', 'content']\n            }), __metadata('design:paramtypes', [typeof (_a = typeof ElementRef !== 'undefined' && ElementRef) === 'function' && _a || Object, typeof (_b = typeof Config !== 'undefined' && Config) === 'function' && _b || Object, typeof (_c = typeof NgZone !== 'undefined' && NgZone) === 'function' && _c || Object])], List));\n            /**\n             * @private\n             */\n\n            ListHeader = function ListHeader() {\n                _classCallCheck(this, ListHeader);\n            };\n\n            _export(\"ListHeader\", ListHeader);\n\n            _export(\"ListHeader\", ListHeader = __decorate([Directive({\n                selector: 'ion-list-header',\n                inputs: ['id'],\n                host: {\n                    '[attr.id]': 'id'\n                }\n            }), __metadata('design:paramtypes', [])], ListHeader));\n        }\n    };\n});\nSystem.register('ionic/components/list/virtual', [], function (_export) {\n    'use strict';\n\n    var ListVirtualScroll, VirtualItemRef;\n\n    var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();\n\n    function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\n    return {\n        setters: [],\n        execute: function () {\n            ListVirtualScroll = (function () {\n                function ListVirtualScroll(list) {\n                    var _this = this;\n\n                    _classCallCheck(this, ListVirtualScroll);\n\n                    this.list = list;\n                    this.content = this.list.content;\n                    this.viewportHeight = this.content.height();\n                    this.viewContainer = this.list.itemTemplate.viewContainer;\n                    this.itemHeight = 60;\n                    this.shownItems = {};\n                    this.enteringItems = [];\n                    this.leavingItems = [];\n                    // Compute the initial sizes\n                    setTimeout(function () {\n                        _this.resize();\n                        // Simulate the first event to start layout\n                        _this._handleVirtualScroll({\n                            target: _this.content.scrollElement\n                        });\n                    });\n                    this.content.addScrollEventListener(function (event) {\n                        _this._handleVirtualScroll(event);\n                    });\n                }\n\n                _createClass(ListVirtualScroll, [{\n                    key: 'resize',\n                    value: function resize() {\n                        this.viewportHeight = this.content.height();\n                        this.viewportScrollHeight = this.content.scrollElement.scrollHeight;\n                        this.virtualHeight = this.list.items.length * this.itemHeight;\n                        this.itemsPerScreen = this.viewportHeight / this.itemHeight;\n                        console.log('VIRTUAL: resize(viewportHeight:', this.viewportHeight, 'viewportScrollHeight:', this.viewportScrollHeight, 'virtualHeight:', this.virtualHeight, ', itemsPerScreen:', this.itemsPerScreen, ')');\n                    }\n                }, {\n                    key: '_handleVirtualScroll',\n                    value: function _handleVirtualScroll(event) {\n                        var item = undefined;\n                        var shownItemRef = undefined;\n                        var st = event.target.scrollTop;\n                        var sh = event.target.scrollHeight;\n                        var topIndex = Math.floor(st / this.itemHeight);\n                        var bottomIndex = Math.floor(st / this.itemHeight + this.itemsPerScreen);\n                        var items = this.list.items;\n                        // Key iterate the shown items map\n                        // and compare the index to our index range,\n                        // pushing the items to remove to our leaving\n                        // list if they're ouside this range.\n                        for (var i in this.shownItems) {\n                            if (i < topIndex || i > bottomIndex) {\n                                this.leavingItems.push(this.shownItems[i]);\n                                delete this.shownItems[i];\n                            }\n                        }\n                        var realIndex = 0;\n                        // Iterate the set of items that will be rendered, using the\n                        // index from the actual items list as the map for the\n                        // virtual items we draw\n                        for (var i = topIndex, _realIndex = 0; i < bottomIndex && i < items.length; i++, _realIndex++) {\n                            item = items[i];\n                            console.log('Drawing item', i, item.title);\n                            shownItemRef = this.shownItems[i];\n                            // Is this a new item?\n                            if (!shownItemRef) {\n                                var itemView = this.viewContainer.create(this.list.itemTemplate.protoViewRef, _realIndex);\n                                itemView.setLocal('\\$implicit', item);\n                                itemView.setLocal('\\$item', item);\n                                shownItemRef = new VirtualItemRef(item, i, _realIndex, itemView);\n                                this.shownItems[i] = shownItemRef;\n                                this.enteringItems.push(shownItemRef);\n                            }\n                        }\n                        while (this.leavingItems.length) {\n                            var itemRef = this.leavingItems.pop();\n                            console.log('Removing item', itemRef.item, itemRef.realIndex);\n                            this.viewContainer.remove(itemRef.realIndex);\n                        }\n                        console.log('VIRTUAL SCROLL: scroll(scrollTop:', st, 'topIndex:', topIndex, 'bottomIndex:', bottomIndex, ')');\n                        console.log('Container has', this.list.getNativeElement().children.length, 'children');\n                    }\n                }, {\n                    key: 'cellAtIndex',\n                    value: function cellAtIndex(index) {}\n                }]);\n\n                return ListVirtualScroll;\n            })();\n\n            _export('ListVirtualScroll', ListVirtualScroll);\n\n            VirtualItemRef = function VirtualItemRef(item, index, realIndex, view) {\n                _classCallCheck(this, VirtualItemRef);\n\n                this.item = item;\n                this.index = index;\n                this.realIndex = realIndex;\n                this.view = view;\n            };\n        }\n    };\n});\nSystem.register(\"ionic/components/menu/menu-close\", [\"angular2/angular2\", \"../ion\", \"../app/app\"], function (_export) {\n    /**\n    * TODO\n    * @see {@link /docs/components#menus Menu Component Docs}\n    * @see {@link ../../menu/Menu Menu API Docs}\n    */\n    \"use strict\";\n\n    var Directive, ElementRef, Ion, IonicApp, __decorate, __metadata, MenuClose, _a, _b;\n\n    var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();\n\n    var _get = function get(_x, _x2, _x3) { var _again = true; _function: while (_again) { var object = _x, property = _x2, receiver = _x3; _again = false; if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { _x = parent; _x2 = property; _x3 = receiver; _again = true; desc = parent = undefined; continue _function; } } else if (\"value\" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } } };\n\n    function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n    function _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\n    return {\n        setters: [function (_angular2Angular2) {\n            Directive = _angular2Angular2.Directive;\n            ElementRef = _angular2Angular2.ElementRef;\n        }, function (_ion) {\n            Ion = _ion.Ion;\n        }, function (_appApp) {\n            IonicApp = _appApp.IonicApp;\n        }],\n        execute: function () {\n            __decorate = undefined && undefined.__decorate || function (decorators, target, key, desc) {\n                if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") return Reflect.decorate(decorators, target, key, desc);\n                switch (arguments.length) {\n                    case 2:\n                        return decorators.reduceRight(function (o, d) {\n                            return d && d(o) || o;\n                        }, target);\n                    case 3:\n                        return decorators.reduceRight(function (o, d) {\n                            return d && d(target, key), void 0;\n                        }, void 0);\n                    case 4:\n                        return decorators.reduceRight(function (o, d) {\n                            return d && d(target, key, o) || o;\n                        }, desc);\n                }\n            };\n\n            __metadata = undefined && undefined.__metadata || function (k, v) {\n                if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n            };\n\n            MenuClose = (function (_Ion) {\n                _inherits(MenuClose, _Ion);\n\n                function MenuClose(app, elementRef) {\n                    _classCallCheck(this, MenuClose);\n\n                    _get(Object.getPrototypeOf(MenuClose.prototype), \"constructor\", this).call(this, elementRef, null);\n                    this.app = app;\n                }\n\n                _createClass(MenuClose, [{\n                    key: \"close\",\n                    value: function close() {\n                        var menu = this.app.getComponent(this.menuClose || 'menu');\n                        menu && menu.close();\n                    }\n                }]);\n\n                return MenuClose;\n            })(Ion);\n\n            _export(\"MenuClose\", MenuClose);\n\n            _export(\"MenuClose\", MenuClose = __decorate([Directive({\n                selector: '[menu-close]',\n                inputs: ['menuClose'],\n                host: {\n                    '(click)': 'close()'\n                }\n            }), __metadata('design:paramtypes', [typeof (_a = typeof IonicApp !== 'undefined' && IonicApp) === 'function' && _a || Object, typeof (_b = typeof ElementRef !== 'undefined' && ElementRef) === 'function' && _b || Object])], MenuClose));\n        }\n    };\n});\nSystem.register('ionic/components/menu/menu-gestures', ['../../gestures/slide-edge-gesture', 'ionic/util'], function (_export) {\n    'use strict';\n\n    var SlideEdgeGesture, util, MenuContentGesture, TargetGesture, LeftMenuGesture, RightMenuGesture;\n\n    var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();\n\n    var _get = function get(_x2, _x3, _x4) { var _again = true; _function: while (_again) { var object = _x2, property = _x3, receiver = _x4; _again = false; if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { _x2 = parent; _x3 = property; _x4 = receiver; _again = true; desc = parent = undefined; continue _function; } } else if ('value' in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } } };\n\n    function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\n    function _inherits(subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\n    return {\n        setters: [function (_gesturesSlideEdgeGesture) {\n            SlideEdgeGesture = _gesturesSlideEdgeGesture.SlideEdgeGesture;\n        }, function (_ionicUtil) {\n            util = _ionicUtil;\n        }],\n        execute: function () {\n            MenuContentGesture = (function (_SlideEdgeGesture) {\n                _inherits(MenuContentGesture, _SlideEdgeGesture);\n\n                function MenuContentGesture(menu, targetEl) {\n                    var options = arguments.length <= 2 || arguments[2] === undefined ? {} : arguments[2];\n\n                    _classCallCheck(this, MenuContentGesture);\n\n                    _get(Object.getPrototypeOf(MenuContentGesture.prototype), 'constructor', this).call(this, targetEl, util.extend({\n                        direction: menu.side === 'left' || menu.side === 'right' ? 'x' : 'y',\n                        edge: menu.side,\n                        threshold: 75\n                    }, options));\n                    this.menu = menu;\n                    this.listen();\n                }\n\n                /**\n                 * Support dragging the target menu as well as the content.\n                 */\n\n                _createClass(MenuContentGesture, [{\n                    key: 'canStart',\n                    value: function canStart(ev) {\n                        return this.menu.isOpen && this.menu.isEnabled ? true : _get(Object.getPrototypeOf(MenuContentGesture.prototype), 'canStart', this).call(this, ev);\n                    }\n\n                    // Set CSS, then wait one frame for it to apply before sliding starts\n                }, {\n                    key: 'onSlideBeforeStart',\n                    value: function onSlideBeforeStart(slide, ev) {\n                        this.menu.setProgressStart();\n                    }\n                }, {\n                    key: 'onSlide',\n                    value: function onSlide(slide, ev) {\n                        this.menu.setProgess(slide.distance / slide.max);\n                    }\n                }, {\n                    key: 'onSlideEnd',\n                    value: function onSlideEnd(slide, ev) {\n                        var shouldComplete = Math.abs(ev.velocityX) > 0.2 || Math.abs(slide.delta) > Math.abs(slide.max) * 0.5;\n                        this.menu.setProgressEnd(shouldComplete);\n                    }\n                }, {\n                    key: 'getElementStartPos',\n                    value: function getElementStartPos(slide, ev) {\n                        return this.menu.isOpen ? slide.max : slide.min;\n                    }\n                }, {\n                    key: 'getSlideBoundaries',\n                    value: function getSlideBoundaries() {\n                        return {\n                            min: 0,\n                            max: this.menu.width()\n                        };\n                    }\n                }]);\n\n                return MenuContentGesture;\n            })(SlideEdgeGesture);\n\n            TargetGesture = (function (_MenuContentGesture) {\n                _inherits(TargetGesture, _MenuContentGesture);\n\n                function TargetGesture(menu) {\n                    _classCallCheck(this, TargetGesture);\n\n                    _get(Object.getPrototypeOf(TargetGesture.prototype), 'constructor', this).call(this, menu, menu.getNativeElement(), {\n                        threshold: 0\n                    });\n                }\n\n                return TargetGesture;\n            })(MenuContentGesture);\n\n            _export('TargetGesture', TargetGesture);\n\n            LeftMenuGesture = (function (_MenuContentGesture2) {\n                _inherits(LeftMenuGesture, _MenuContentGesture2);\n\n                function LeftMenuGesture(menu) {\n                    _classCallCheck(this, LeftMenuGesture);\n\n                    _get(Object.getPrototypeOf(LeftMenuGesture.prototype), 'constructor', this).call(this, menu, menu.getContentElement());\n                }\n\n                return LeftMenuGesture;\n            })(MenuContentGesture);\n\n            _export('LeftMenuGesture', LeftMenuGesture);\n\n            RightMenuGesture = (function (_MenuContentGesture3) {\n                _inherits(RightMenuGesture, _MenuContentGesture3);\n\n                function RightMenuGesture(menu) {\n                    _classCallCheck(this, RightMenuGesture);\n\n                    _get(Object.getPrototypeOf(RightMenuGesture.prototype), 'constructor', this).call(this, menu, menu.getContentElement());\n                }\n\n                _createClass(RightMenuGesture, [{\n                    key: 'onSlide',\n                    value: function onSlide(slide, ev) {\n                        this.menu.setProgess(slide.distance / slide.min);\n                    }\n                }, {\n                    key: 'getElementStartPos',\n                    value: function getElementStartPos(slide, ev) {\n                        return this.menu.isOpen ? slide.min : slide.max;\n                    }\n                }, {\n                    key: 'getSlideBoundaries',\n                    value: function getSlideBoundaries() {\n                        return {\n                            min: -this.menu.width(),\n                            max: 0\n                        };\n                    }\n                }]);\n\n                return RightMenuGesture;\n            })(MenuContentGesture);\n\n            _export('RightMenuGesture', RightMenuGesture);\n        }\n    };\n});\nSystem.register(\"ionic/components/menu/menu-toggle\", [\"angular2/angular2\", \"../ion\", \"../app/app\", \"../nav/view-controller\", \"../navbar/navbar\"], function (_export) {\n    /**\n    * TODO\n    * @see {@link /docs/components#menus Menu Component Docs}\n    * @see {@link ../../menu/Menu Menu API Docs}\n    */\n    \"use strict\";\n\n    var Directive, ElementRef, Optional, Ion, IonicApp, ViewController, Navbar, __decorate, __metadata, __param, MenuToggle, _a, _b, _c, _d;\n\n    var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();\n\n    var _get = function get(_x, _x2, _x3) { var _again = true; _function: while (_again) { var object = _x, property = _x2, receiver = _x3; _again = false; if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { _x = parent; _x2 = property; _x3 = receiver; _again = true; desc = parent = undefined; continue _function; } } else if (\"value\" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } } };\n\n    function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n    function _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\n    return {\n        setters: [function (_angular2Angular2) {\n            Directive = _angular2Angular2.Directive;\n            ElementRef = _angular2Angular2.ElementRef;\n            Optional = _angular2Angular2.Optional;\n        }, function (_ion) {\n            Ion = _ion.Ion;\n        }, function (_appApp) {\n            IonicApp = _appApp.IonicApp;\n        }, function (_navViewController) {\n            ViewController = _navViewController.ViewController;\n        }, function (_navbarNavbar) {\n            Navbar = _navbarNavbar.Navbar;\n        }],\n        execute: function () {\n            __decorate = undefined && undefined.__decorate || function (decorators, target, key, desc) {\n                if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") return Reflect.decorate(decorators, target, key, desc);\n                switch (arguments.length) {\n                    case 2:\n                        return decorators.reduceRight(function (o, d) {\n                            return d && d(o) || o;\n                        }, target);\n                    case 3:\n                        return decorators.reduceRight(function (o, d) {\n                            return d && d(target, key), void 0;\n                        }, void 0);\n                    case 4:\n                        return decorators.reduceRight(function (o, d) {\n                            return d && d(target, key, o) || o;\n                        }, desc);\n                }\n            };\n\n            __metadata = undefined && undefined.__metadata || function (k, v) {\n                if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n            };\n\n            __param = undefined && undefined.__param || function (paramIndex, decorator) {\n                return function (target, key) {\n                    decorator(target, key, paramIndex);\n                };\n            };\n\n            MenuToggle = (function (_Ion) {\n                _inherits(MenuToggle, _Ion);\n\n                function MenuToggle(app, elementRef, viewCtrl, navbar) {\n                    _classCallCheck(this, MenuToggle);\n\n                    _get(Object.getPrototypeOf(MenuToggle.prototype), \"constructor\", this).call(this, elementRef, null);\n                    this.app = app;\n                    this.viewCtrl = viewCtrl;\n                    this.withinNavbar = !!navbar;\n                }\n\n                /**\n                * TODO\n                * @param {TODO} event  TODO\n                */\n\n                _createClass(MenuToggle, [{\n                    key: \"toggle\",\n                    value: function toggle() {\n                        var menu = this.app.getComponent(this.menuToggle || 'menu');\n                        menu && menu.toggle();\n                    }\n                }, {\n                    key: \"isHidden\",\n                    get: function get() {\n                        if (this.withinNavbar && this.viewCtrl) {\n                            return !this.viewCtrl.isRoot();\n                        }\n                        return false;\n                    }\n                }]);\n\n                return MenuToggle;\n            })(Ion);\n\n            _export(\"MenuToggle\", MenuToggle);\n\n            _export(\"MenuToggle\", MenuToggle = __decorate([Directive({\n                selector: '[menu-toggle]',\n                inputs: ['menuToggle'],\n                host: {\n                    '(click)': 'toggle()',\n                    '[hidden]': 'isHidden',\n                    'menu-toggle': '' //ensures the attr is there for css when using [menu-toggle]\n                }\n            }), __param(2, Optional()), __param(3, Optional()), __metadata('design:paramtypes', [typeof (_a = typeof IonicApp !== 'undefined' && IonicApp) === 'function' && _a || Object, typeof (_b = typeof ElementRef !== 'undefined' && ElementRef) === 'function' && _b || Object, typeof (_c = typeof ViewController !== 'undefined' && ViewController) === 'function' && _c || Object, typeof (_d = typeof Navbar !== 'undefined' && Navbar) === 'function' && _d || Object])], MenuToggle));\n        }\n    };\n});\nSystem.register('ionic/components/menu/menu-types', ['./menu', 'ionic/animations/animation'], function (_export) {\n    /**\n     * Menu Type\n     * Base class which is extended by the various types. Each\n     * type will provide their own animations for open and close\n     * and registers itself with Menu.\n     * @private\n     */\n    'use strict';\n\n    var Menu, Animation, MenuType, MenuRevealType, MenuPushType, MenuOverlayType, OPACITY, TRANSLATE_X;\n\n    var _get = function get(_x, _x2, _x3) { var _again = true; _function: while (_again) { var object = _x, property = _x2, receiver = _x3; _again = false; if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { _x = parent; _x2 = property; _x3 = receiver; _again = true; desc = parent = undefined; continue _function; } } else if ('value' in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } } };\n\n    var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();\n\n    function _inherits(subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\n    function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\n    return {\n        setters: [function (_menu) {\n            Menu = _menu.Menu;\n        }, function (_ionicAnimationsAnimation) {\n            Animation = _ionicAnimationsAnimation.Animation;\n        }],\n        execute: function () {\n            MenuType = (function () {\n                function MenuType() {\n                    _classCallCheck(this, MenuType);\n\n                    this.open = new Animation();\n                    this.close = new Animation();\n                }\n\n                /**\n                 * Menu Reveal Type\n                 * The content slides over to reveal the menu underneath.\n                 * The menu itself, which is under the content, does not move.\n                 */\n\n                _createClass(MenuType, [{\n                    key: 'setOpen',\n                    value: function setOpen(shouldOpen) {\n                        var _this = this;\n\n                        return new Promise(function (resolve) {\n                            if (shouldOpen) {\n                                _this.open.playbackRate(1).onFinish(resolve, true).play();\n                            } else {\n                                _this.close.playbackRate(1).onFinish(resolve, true).play();\n                            }\n                        });\n                    }\n                }, {\n                    key: 'setProgressStart',\n                    value: function setProgressStart(isOpen) {\n                        this.isOpening = !isOpen;\n                        this.seek && this.seek.dispose();\n                        // clone the correct animation depending on open/close\n                        if (this.isOpening) {\n                            this.seek = this.open.clone();\n                        } else {\n                            this.seek = this.close.clone();\n                        }\n                        // the cloned animation should not use an easing curve during seek\n                        this.seek.easing('linear').progressStart();\n                    }\n                }, {\n                    key: 'setProgess',\n                    value: function setProgess(value) {\n                        // adjust progress value depending if it opening or closing\n                        if (!this.isOpening) {\n                            value = 1 - value;\n                        }\n                        this.seek.progress(value);\n                    }\n                }, {\n                    key: 'setProgressEnd',\n                    value: function setProgressEnd(shouldComplete) {\n                        var _this2 = this;\n\n                        var resolve = undefined;\n                        var promise = new Promise(function (res) {\n                            resolve = res;\n                        });\n                        var isOpen = this.isOpening && shouldComplete;\n                        if (!this.isOpening && !shouldComplete) {\n                            isOpen = true;\n                        }\n                        this.seek.progressEnd(shouldComplete).then(function () {\n                            _this2.isOpening = false;\n                            resolve(isOpen);\n                        });\n                        return promise;\n                    }\n                }, {\n                    key: 'onDestroy',\n                    value: function onDestroy() {\n                        this.open && this.open.dispose();\n                        this.close && this.close.dispose();\n                        this.seek && this.seek.dispose();\n                    }\n                }]);\n\n                return MenuType;\n            })();\n\n            _export('MenuType', MenuType);\n\n            MenuRevealType = (function (_MenuType) {\n                _inherits(MenuRevealType, _MenuType);\n\n                function MenuRevealType(menu) {\n                    _classCallCheck(this, MenuRevealType);\n\n                    _get(Object.getPrototypeOf(MenuRevealType.prototype), 'constructor', this).call(this);\n                    var easing = 'ease';\n                    var duration = 250;\n                    var openedX = menu.width() * (menu.side == 'right' ? -1 : 1) + 'px';\n                    var closedX = '0px';\n                    this.open.easing(easing).duration(duration);\n                    this.close.easing(easing).duration(duration);\n                    var contentOpen = new Animation(menu.getContentElement());\n                    contentOpen.fromTo(TRANSLATE_X, closedX, openedX);\n                    this.open.add(contentOpen);\n                    var contentClose = new Animation(menu.getContentElement());\n                    contentClose.fromTo(TRANSLATE_X, openedX, closedX);\n                    this.close.add(contentClose);\n                }\n\n                return MenuRevealType;\n            })(MenuType);\n\n            Menu.register('reveal', MenuRevealType);\n            /**\n             * Menu Push Type\n             * The content slides over to reveal the menu underneath.\n             * The menu itself also slides over to reveal its bad self.\n             */\n\n            MenuPushType = (function (_MenuType2) {\n                _inherits(MenuPushType, _MenuType2);\n\n                function MenuPushType(menu) {\n                    _classCallCheck(this, MenuPushType);\n\n                    _get(Object.getPrototypeOf(MenuPushType.prototype), 'constructor', this).call(this);\n                    var easing = 'ease';\n                    var duration = 250;\n                    var contentOpenedX = undefined,\n                        menuClosedX = undefined,\n                        menuOpenedX = undefined;\n                    if (menu.side == 'right') {\n                        contentOpenedX = -menu.width() + 'px';\n                        menuOpenedX = menu.platform.width() - menu.width() + 'px';\n                        menuClosedX = menu.platform.width() + 'px';\n                    } else {\n                        contentOpenedX = menu.width() + 'px';\n                        menuOpenedX = '0px';\n                        menuClosedX = -menu.width() + 'px';\n                    }\n                    // left side\n                    this.open.easing(easing).duration(duration);\n                    this.close.easing(easing).duration(duration);\n                    var menuOpen = new Animation(menu.getMenuElement());\n                    menuOpen.fromTo(TRANSLATE_X, menuClosedX, menuOpenedX);\n                    this.open.add(menuOpen);\n                    var contentOpen = new Animation(menu.getContentElement());\n                    contentOpen.fromTo(TRANSLATE_X, '0px', contentOpenedX);\n                    this.open.add(contentOpen);\n                    var menuClose = new Animation(menu.getMenuElement());\n                    menuClose.fromTo(TRANSLATE_X, menuOpenedX, menuClosedX);\n                    this.close.add(menuClose);\n                    var contentClose = new Animation(menu.getContentElement());\n                    contentClose.fromTo(TRANSLATE_X, contentOpenedX, '0px');\n                    this.close.add(contentClose);\n                }\n\n                return MenuPushType;\n            })(MenuType);\n\n            Menu.register('push', MenuPushType);\n            /**\n             * Menu Overlay Type\n             * The menu slides over the content. The content\n             * itself, which is under the menu, does not move.\n             */\n\n            MenuOverlayType = (function (_MenuType3) {\n                _inherits(MenuOverlayType, _MenuType3);\n\n                function MenuOverlayType(menu) {\n                    _classCallCheck(this, MenuOverlayType);\n\n                    _get(Object.getPrototypeOf(MenuOverlayType.prototype), 'constructor', this).call(this);\n                    var easing = 'ease';\n                    var duration = 250;\n                    var backdropOpacity = 0.35;\n                    var closedX = undefined,\n                        openedX = undefined;\n                    if (menu.side == 'right') {\n                        // right side\n                        closedX = menu.platform.width() + 'px';\n                        openedX = menu.platform.width() - menu.width() - 8 + 'px';\n                    } else {\n                        // left side\n                        closedX = -menu.width() + 'px';\n                        openedX = '8px';\n                    }\n                    this.open.easing(easing).duration(duration);\n                    this.close.easing(easing).duration(duration);\n                    var menuOpen = new Animation(menu.getMenuElement());\n                    menuOpen.fromTo(TRANSLATE_X, closedX, openedX);\n                    this.open.add(menuOpen);\n                    var backdropOpen = new Animation(menu.getBackdropElement());\n                    backdropOpen.fromTo(OPACITY, 0.01, backdropOpacity);\n                    this.open.add(backdropOpen);\n                    var menuClose = new Animation(menu.getMenuElement());\n                    menuClose.fromTo(TRANSLATE_X, openedX, closedX);\n                    this.close.add(menuClose);\n                    var backdropClose = new Animation(menu.getBackdropElement());\n                    backdropClose.fromTo(OPACITY, backdropOpacity, 0.01);\n                    this.close.add(backdropClose);\n                }\n\n                return MenuOverlayType;\n            })(MenuType);\n\n            Menu.register('overlay', MenuOverlayType);\n            OPACITY = 'opacity';\n            TRANSLATE_X = 'translateX';\n        }\n    };\n});\nSystem.register(\"ionic/components/menu/menu\", [\"angular2/angular2\", \"../ion\", \"../app/app\", \"../../config/config\", \"../../platform/platform\", \"../../util/keyboard\", \"./menu-gestures\"], function (_export) {\n    /**\n     * _For basic Menu usage, see the [Menu section](../../../../components/#menus)\n     * of the Component docs._\n     *\n     * Menu is a side-menu navigation that can be dragged out or toggled to show.\n     *\n     * In order to use Menu, you must specify a [reference](https://angular.io/docs/ts/latest/guide/user-input.html#local-variables)\n     * to the content element that Menu should listen on for drag events, using the\n     * `content` property:\n     * ```html\n     * <ion-menu [content]=\"contentRef\">\n     *   <ion-content>\n     *     <ion-list>\n     *     ...\n     *     </ion-list>\n     *   </ion-content>\n     * </ion-menu>\n     *\n     * <ion-nav #content-ref [root]=\"rootPage\"></ion-nav>\n     * ```\n     *\n     * By default, Menus are on the left, but this can be overriden with the `side`\n     * property:\n     * ```html\n     * <ion-menu [content]=\"contentRef\" side=\"right\"></ion-menu>\n     * ```\n     *\n     * Menu supports two display styles: overlay, and reveal. Overlay\n     * is the traditional Android drawer style, and Reveal is the traditional iOS\n     * style. By default, Menu will adjust to the correct style for the platform,\n     * but this can be overriden using the `type` property:\n     * ```html\n     * <ion-menu [content]=\"contentRef\" type=\"overlay\"></ion-menu>\n     * ```\n     * @see {@link /docs/components#menus Menu Component Docs}\n     * @see {@link /docs/components#navigation Navigation Component Docs}\n     * @see {@link ../../nav/Nav Nav API Docs}\n     *\n     */\n    \"use strict\";\n\n    var Component, forwardRef, Directive, Host, EventEmitter, ElementRef, Ion, IonicApp, Config, Platform, Keyboard, gestures, __decorate, __metadata, __param, Menu, menuTypes, MenuBackdrop, _a, _b, _c, _d, _e, _f;\n\n    var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();\n\n    var _get = function get(_x, _x2, _x3) { var _again = true; _function: while (_again) { var object = _x, property = _x2, receiver = _x3; _again = false; if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { _x = parent; _x2 = property; _x3 = receiver; _again = true; desc = parent = undefined; continue _function; } } else if (\"value\" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } } };\n\n    function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n    function _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\n    return {\n        setters: [function (_angular2Angular2) {\n            Component = _angular2Angular2.Component;\n            forwardRef = _angular2Angular2.forwardRef;\n            Directive = _angular2Angular2.Directive;\n            Host = _angular2Angular2.Host;\n            EventEmitter = _angular2Angular2.EventEmitter;\n            ElementRef = _angular2Angular2.ElementRef;\n        }, function (_ion) {\n            Ion = _ion.Ion;\n        }, function (_appApp) {\n            IonicApp = _appApp.IonicApp;\n        }, function (_configConfig) {\n            Config = _configConfig.Config;\n        }, function (_platformPlatform) {\n            Platform = _platformPlatform.Platform;\n        }, function (_utilKeyboard) {\n            Keyboard = _utilKeyboard.Keyboard;\n        }, function (_menuGestures) {\n            gestures = _menuGestures;\n        }],\n        execute: function () {\n            __decorate = undefined && undefined.__decorate || function (decorators, target, key, desc) {\n                if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") return Reflect.decorate(decorators, target, key, desc);\n                switch (arguments.length) {\n                    case 2:\n                        return decorators.reduceRight(function (o, d) {\n                            return d && d(o) || o;\n                        }, target);\n                    case 3:\n                        return decorators.reduceRight(function (o, d) {\n                            return d && d(target, key), void 0;\n                        }, void 0);\n                    case 4:\n                        return decorators.reduceRight(function (o, d) {\n                            return d && d(target, key, o) || o;\n                        }, desc);\n                }\n            };\n\n            __metadata = undefined && undefined.__metadata || function (k, v) {\n                if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n            };\n\n            __param = undefined && undefined.__param || function (paramIndex, decorator) {\n                return function (target, key) {\n                    decorator(target, key, paramIndex);\n                };\n            };\n\n            Menu = (function (_Ion) {\n                _inherits(Menu, _Ion);\n\n                function Menu(app, elementRef, config, platform, keyboard) {\n                    _classCallCheck(this, Menu);\n\n                    _get(Object.getPrototypeOf(Menu.prototype), \"constructor\", this).call(this, elementRef, config);\n                    this.app = app;\n                    this.platform = platform;\n                    this.keyboard = keyboard;\n                    this.opening = new EventEmitter('opening');\n                    this.isOpen = false;\n                    this._preventTime = 0;\n                    this.isEnabled = true;\n                }\n\n                /**\n                 * @private\n                 */\n\n                _createClass(Menu, [{\n                    key: \"onInit\",\n                    value: function onInit() {\n                        _get(Object.getPrototypeOf(Menu.prototype), \"onInit\", this).call(this);\n                        var self = this;\n                        var content = self.content;\n                        self._cntEle = content instanceof Node ? content : content && content.getNativeElement && content.getNativeElement();\n                        if (!self._cntEle) {\n                            return console.error('Menu: must have a [content] element to listen for drag events on. Example:\\n\\n<ion-menu [content]=\"content\"></ion-menu>\\n\\n<ion-nav #content></ion-nav>');\n                        }\n                        if (self.side !== 'left' && self.side !== 'right') {\n                            self.side = 'left';\n                        }\n                        if (!self.id) {\n                            // Auto register\n                            self.id = 'menu';\n                            self.app.register(self.id, self);\n                        }\n                        self._initGesture();\n                        self._initType(self.type);\n                        self._cntEle.classList.add('menu-content');\n                        self._cntEle.classList.add('menu-content-' + self.type);\n                        self.onContentClick = function (ev) {\n                            if (self.isEnabled) {\n                                ev.preventDefault();\n                                ev.stopPropagation();\n                                self.close();\n                            }\n                        };\n                    }\n\n                    /**\n                     * @private\n                     */\n                }, {\n                    key: \"_initGesture\",\n                    value: function _initGesture() {\n                        switch (this.side) {\n                            case 'right':\n                                this._gesture = new gestures.RightMenuGesture(this);\n                                break;\n                            case 'left':\n                                this._gesture = new gestures.LeftMenuGesture(this);\n                                break;\n                        }\n                        this._targetGesture = new gestures.TargetGesture(this);\n                    }\n\n                    /**\n                     * @private\n                     */\n                }, {\n                    key: \"_initType\",\n                    value: function _initType(type) {\n                        type = type && type.trim().toLowerCase();\n                        if (!type) {\n                            type = this.config.get('menuType');\n                        }\n                        this.type = type;\n                    }\n\n                    /**\n                     * @private\n                     */\n                }, {\n                    key: \"_getType\",\n                    value: function _getType() {\n                        if (!this._type) {\n                            this._type = new menuTypes[this.type](this);\n                            if (this.config.get('animate') === false) {\n                                this._type.open.duration(33);\n                                this._type.close.duration(33);\n                            }\n                        }\n                        return this._type;\n                    }\n\n                    /**\n                     * Sets the state of the Menu to open or not.\n                     * @param {boolean} isOpen  If the Menu is open or not.\n                     * @return {Promise} TODO\n                     */\n                }, {\n                    key: \"setOpen\",\n                    value: function setOpen(shouldOpen) {\n                        var _this = this;\n\n                        // _isPrevented is used to prevent unwanted opening/closing after swiping open/close\n                        // or swiping open the menu while pressing down on the menu-toggle button\n                        if (shouldOpen === this.isOpen || this._isPrevented()) {\n                            return Promise.resolve();\n                        }\n                        this._before();\n                        return this._getType().setOpen(shouldOpen).then(function () {\n                            _this._after(shouldOpen);\n                        });\n                    }\n\n                    /**\n                     * @private\n                     */\n                }, {\n                    key: \"setProgressStart\",\n                    value: function setProgressStart() {\n                        // user started swiping the menu open/close\n                        if (this._isPrevented() || !this.isEnabled) return;\n                        this._before();\n                        this._getType().setProgressStart(this.isOpen);\n                    }\n\n                    /**\n                     * @private\n                     */\n                }, {\n                    key: \"setProgess\",\n                    value: function setProgess(value) {\n                        // user actively dragging the menu\n                        if (this.isEnabled) {\n                            this._prevent();\n                            this._getType().setProgess(value);\n                            this.opening.next(value);\n                        }\n                    }\n\n                    /**\n                     * @private\n                     */\n                }, {\n                    key: \"setProgressEnd\",\n                    value: function setProgressEnd(shouldComplete) {\n                        var _this2 = this;\n\n                        // user has finished dragging the menu\n                        if (this.isEnabled) {\n                            this._prevent();\n                            this._getType().setProgressEnd(shouldComplete).then(function (isOpen) {\n                                _this2._after(isOpen);\n                            });\n                        }\n                    }\n\n                    /**\n                     * @private\n                     */\n                }, {\n                    key: \"_before\",\n                    value: function _before() {\n                        // this places the menu into the correct location before it animates in\n                        // this css class doesn't actually kick off any animations\n                        if (this.isEnabled) {\n                            this.getNativeElement().classList.add('show-menu');\n                            this.getBackdropElement().classList.add('show-backdrop');\n                            this._prevent();\n                            this.keyboard.close();\n                        }\n                    }\n\n                    /**\n                     * @private\n                     */\n                }, {\n                    key: \"_after\",\n                    value: function _after(isOpen) {\n                        // keep opening/closing the menu disabled for a touch more yet\n                        // only add listeners/css if it's enabled and isOpen\n                        // and only remove listeners/css if it's not open\n                        if (this.isEnabled && isOpen || !isOpen) {\n                            this._prevent();\n                            this.isOpen = isOpen;\n                            this._cntEle.classList[isOpen ? 'add' : 'remove']('menu-content-open');\n                            this._cntEle.removeEventListener('click', this.onContentClick);\n                            if (isOpen) {\n                                this._cntEle.addEventListener('click', this.onContentClick);\n                            } else {\n                                this.getNativeElement().classList.remove('show-menu');\n                                this.getBackdropElement().classList.remove('show-backdrop');\n                            }\n                        }\n                    }\n\n                    /**\n                     * @private\n                     */\n                }, {\n                    key: \"_prevent\",\n                    value: function _prevent() {\n                        // used to prevent unwanted opening/closing after swiping open/close\n                        // or swiping open the menu while pressing down on the menu-toggle\n                        this._preventTime = Date.now() + 20;\n                    }\n\n                    /**\n                     * @private\n                     */\n                }, {\n                    key: \"_isPrevented\",\n                    value: function _isPrevented() {\n                        return this._preventTime > Date.now();\n                    }\n\n                    /**\n                     * TODO\n                     * @return {TODO} TODO\n                     */\n                }, {\n                    key: \"open\",\n                    value: function open() {\n                        return this.setOpen(true);\n                    }\n\n                    /**\n                     * TODO\n                     * @return {TODO} TODO\n                     */\n                }, {\n                    key: \"close\",\n                    value: function close() {\n                        return this.setOpen(false);\n                    }\n\n                    /**\n                     * TODO\n                     * @return {TODO} TODO\n                     */\n                }, {\n                    key: \"toggle\",\n                    value: function toggle() {\n                        return this.setOpen(!this.isOpen);\n                    }\n\n                    /**\n                     * Used to enable or disable a menu. For example, there could be multiple\n                     * left menus, but only one of them should be able to be dragged open.\n                     * @param {boolean} shouldEnable  True if it should be enabled, false if not.\n                     * @return {Menu}  Returns the instance of the menu, which is useful for chaining.\n                     */\n                }, {\n                    key: \"enable\",\n                    value: function enable(shouldEnable) {\n                        this.isEnabled = shouldEnable;\n                        if (!shouldEnable) {\n                            this.close();\n                        }\n                        return this;\n                    }\n\n                    /**\n                     * @private\n                     */\n                }, {\n                    key: \"getMenuElement\",\n                    value: function getMenuElement() {\n                        return this.getNativeElement();\n                    }\n\n                    /**\n                     * @private\n                     */\n                }, {\n                    key: \"getContentElement\",\n                    value: function getContentElement() {\n                        return this._cntEle;\n                    }\n\n                    /**\n                     * @private\n                     */\n                }, {\n                    key: \"getBackdropElement\",\n                    value: function getBackdropElement() {\n                        return this.backdrop.elementRef.nativeElement;\n                    }\n\n                    /**\n                     * @private\n                     */\n                }, {\n                    key: \"onDestroy\",\n\n                    /**\n                     * @private\n                     */\n                    value: function onDestroy() {\n                        this.app.unregister(this.id);\n                        this._gesture && this._gesture.destroy();\n                        this._targetGesture && this._targetGesture.destroy();\n                        this._type && this._type.onDestroy();\n                        this._cntEle = null;\n                    }\n                }], [{\n                    key: \"register\",\n                    value: function register(name, cls) {\n                        menuTypes[name] = cls;\n                    }\n                }]);\n\n                return Menu;\n            })(Ion);\n\n            _export(\"Menu\", Menu);\n\n            _export(\"Menu\", Menu = __decorate([Component({\n                selector: 'ion-menu',\n                inputs: ['content', 'dragThreshold', 'id', 'side', 'type'],\n                defaultInputs: {\n                    'side': 'left',\n                    'menuType': 'reveal'\n                },\n                outputs: ['opening'],\n                host: {\n                    'role': 'navigation',\n                    '[attr.side]': 'side',\n                    '[attr.type]': 'type'\n                },\n                template: '<ng-content></ng-content><backdrop tappable disable-activated></backdrop>',\n                directives: [forwardRef(function () {\n                    return MenuBackdrop;\n                })]\n            }), __metadata('design:paramtypes', [typeof (_a = typeof IonicApp !== 'undefined' && IonicApp) === 'function' && _a || Object, typeof (_b = typeof ElementRef !== 'undefined' && ElementRef) === 'function' && _b || Object, typeof (_c = typeof Config !== 'undefined' && Config) === 'function' && _c || Object, typeof (_d = typeof Platform !== 'undefined' && Platform) === 'function' && _d || Object, typeof (_e = typeof Keyboard !== 'undefined' && Keyboard) === 'function' && _e || Object])], Menu));\n            menuTypes = {};\n\n            MenuBackdrop = (function () {\n                function MenuBackdrop(menu, elementRef) {\n                    _classCallCheck(this, MenuBackdrop);\n\n                    this.menu = menu;\n                    this.elementRef = elementRef;\n                    menu.backdrop = this;\n                }\n\n                /**\n                 * @private\n                 */\n\n                _createClass(MenuBackdrop, [{\n                    key: \"clicked\",\n                    value: function clicked(ev) {\n                        console.debug('backdrop clicked');\n                        ev.preventDefault();\n                        ev.stopPropagation();\n                        this.menu.close();\n                    }\n                }]);\n\n                return MenuBackdrop;\n            })();\n\n            MenuBackdrop = __decorate([Directive({\n                selector: 'backdrop',\n                host: {\n                    '(click)': 'clicked($event)'\n                }\n            }), __param(0, Host()), __metadata('design:paramtypes', [Menu, typeof (_f = typeof ElementRef !== 'undefined' && ElementRef) === 'function' && _f || Object])], MenuBackdrop);\n        }\n    };\n});\nSystem.register(\"ionic/components/modal/modal\", [\"angular2/angular2\", \"../overlay/overlay-controller\", \"../../config/config\", \"../../animations/animation\", \"ionic/util\"], function (_export) {\n    /**\n     * The Modal is a content pane that can go over the user's current page.\n     * Usually used for making a choice or editing an item. A modal can be opened\n     * similar to how NavController#push works, where it is passed a Page component,\n     * along with optional Page params, and options for presenting the modal.\n     *\n     * @usage\n     * ```ts\n     * class MyApp {\n     *\n     *  constructor(modal: Modal) {\n     *    this.modal = modal;\n     *  }\n     *\n     *  openContactModal() {\n     *    this.modal.open(ContactUs);\n     *  }\n     *\n     *  openProfileModal() {\n     *    this.modal.open(Profile, { userId: 8675309 }, {\n     *      enterAnimation: 'my-fade-in',\n     *      leaveAnimation: 'my-fade-out',\n     *      handle: 'profile-modal'\n     *    });\n     *  }\n     *\n     * }\n     * ```\n     * @demo /docs/demos/modal/\n     * @see {@link /docs/components#modals Modal Component Docs}\n     */\n    \"use strict\";\n\n    var Injectable, OverlayController, Config, Animation, extend, __decorate, __metadata, Modal, OVERLAY_TYPE, ModalSlideIn, ModalSlideOut, ModalMDSlideIn, ModalMDSlideOut, _a, _b;\n\n    var _get = function get(_x3, _x4, _x5) { var _again = true; _function: while (_again) { var object = _x3, property = _x4, receiver = _x5; _again = false; if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { _x3 = parent; _x4 = property; _x5 = receiver; _again = true; desc = parent = undefined; continue _function; } } else if (\"value\" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } } };\n\n    var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();\n\n    function _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\n    function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n    return {\n        setters: [function (_angular2Angular2) {\n            Injectable = _angular2Angular2.Injectable;\n        }, function (_overlayOverlayController) {\n            OverlayController = _overlayOverlayController.OverlayController;\n        }, function (_configConfig) {\n            Config = _configConfig.Config;\n        }, function (_animationsAnimation) {\n            Animation = _animationsAnimation.Animation;\n        }, function (_ionicUtil) {\n            extend = _ionicUtil.extend;\n        }],\n        execute: function () {\n            __decorate = undefined && undefined.__decorate || function (decorators, target, key, desc) {\n                if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") return Reflect.decorate(decorators, target, key, desc);\n                switch (arguments.length) {\n                    case 2:\n                        return decorators.reduceRight(function (o, d) {\n                            return d && d(o) || o;\n                        }, target);\n                    case 3:\n                        return decorators.reduceRight(function (o, d) {\n                            return d && d(target, key), void 0;\n                        }, void 0);\n                    case 4:\n                        return decorators.reduceRight(function (o, d) {\n                            return d && d(target, key, o) || o;\n                        }, desc);\n                }\n            };\n\n            __metadata = undefined && undefined.__metadata || function (k, v) {\n                if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n            };\n\n            Modal = (function () {\n                function Modal(ctrl, config) {\n                    _classCallCheck(this, Modal);\n\n                    this.ctrl = ctrl;\n                    this.config = config;\n                }\n\n                /**\n                 * Opens a new modal using the page component is was pass as the first\n                 * argument. This is similar to how NavController's `push` method works.\n                 * Currently you must have `<ion-overlay>` in the @App component's template\n                 * for the modal to work correctly. (This is something that will\n                 * be hopefully be removed in the near future.)\n                 * @param pageComponent  The Page component to load in the modal.\n                 * @param {Object} [params={}]  Optional data which can be passed to the page\n                 * component, which can be read from the constructor's `NavParams`.\n                 * @param {Object} [opts={}]  Additional options for this one modal instance of.\n                 * Options include `enterAnimation` and `leaveAnimation`, which\n                 * allows customization of which animation to use.\n                 * @returns {Promise} Returns a promise which resolves when the modal has\n                 * loaded and its entering animation has completed. The resolved promise's\n                 * value is the instance of the newly created modal.\n                 */\n\n                _createClass(Modal, [{\n                    key: \"open\",\n                    value: function open(pageComponent) {\n                        var params = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1];\n                        var opts = arguments.length <= 2 || arguments[2] === undefined ? {} : arguments[2];\n\n                        opts = extend({\n                            pageType: OVERLAY_TYPE,\n                            enterAnimation: this.config.get('modalEnter'),\n                            leaveAnimation: this.config.get('modalLeave')\n                        }, opts);\n                        return this.ctrl.open(pageComponent, params, opts);\n                    }\n\n                    /**\n                     * Get the instance of a modal. This is usually helpful to getting ahold of a\n                     * certain modal, from anywhere within the app, and closing it. By calling\n                     * just `get()` without a `handle` argument, it'll return the active modal\n                     * on top (it is possible to have multipe modals opened at the same time).\n                     * If getting just the active modal isn't enough, when creating\n                     * a modal, it's options can be given a `handle`, which is simply a string-based\n                     * name for the modal instance. You can later get a reference to that modal's\n                     * instance by calling this method with the same handle name.\n                     * @param  [handle]  Optional string name given in the modal's options when it was opened.\n                     * @returns Returns the instance of the modal if it is found, otherwise `null`.\n                     */\n                }, {\n                    key: \"get\",\n                    value: function get(handle) {\n                        if (handle) {\n                            return this.ctrl.getByHandle(handle);\n                        }\n                        return this.ctrl.getByType(OVERLAY_TYPE);\n                    }\n                }]);\n\n                return Modal;\n            })();\n\n            _export(\"Modal\", Modal);\n\n            _export(\"Modal\", Modal = __decorate([Injectable(), __metadata('design:paramtypes', [typeof (_a = typeof OverlayController !== 'undefined' && OverlayController) === 'function' && _a || Object, typeof (_b = typeof Config !== 'undefined' && Config) === 'function' && _b || Object])], Modal));\n            OVERLAY_TYPE = 'modal';\n\n            /**\n             * Animations for modals\n             */\n\n            ModalSlideIn = (function (_Animation) {\n                _inherits(ModalSlideIn, _Animation);\n\n                function ModalSlideIn(enteringView, leavingView, opts) {\n                    _classCallCheck(this, ModalSlideIn);\n\n                    _get(Object.getPrototypeOf(ModalSlideIn.prototype), \"constructor\", this).call(this, enteringView.pageRef(), opts);\n                    this.easing('cubic-bezier(0.36,0.66,0.04,1)').duration(400).fromTo('translateY', '100%', '0%').before.addClass('show-page');\n                }\n\n                return ModalSlideIn;\n            })(Animation);\n\n            Animation.register('modal-slide-in', ModalSlideIn);\n\n            ModalSlideOut = (function (_Animation2) {\n                _inherits(ModalSlideOut, _Animation2);\n\n                function ModalSlideOut(enteringView, leavingView, opts) {\n                    _classCallCheck(this, ModalSlideOut);\n\n                    _get(Object.getPrototypeOf(ModalSlideOut.prototype), \"constructor\", this).call(this, leavingView.pageRef(), opts);\n                    this.easing('ease-out').duration(250).fromTo('translateY', '0%', '100%');\n                }\n\n                return ModalSlideOut;\n            })(Animation);\n\n            Animation.register('modal-slide-out', ModalSlideOut);\n\n            ModalMDSlideIn = (function (_Animation3) {\n                _inherits(ModalMDSlideIn, _Animation3);\n\n                function ModalMDSlideIn(enteringView, leavingView, opts) {\n                    _classCallCheck(this, ModalMDSlideIn);\n\n                    _get(Object.getPrototypeOf(ModalMDSlideIn.prototype), \"constructor\", this).call(this, enteringView.pageRef(), opts);\n                    this.easing('cubic-bezier(0.36,0.66,0.04,1)').duration(280).fromTo('translateY', '40px', '0px').fadeIn().before.addClass('show-page');\n                }\n\n                return ModalMDSlideIn;\n            })(Animation);\n\n            Animation.register('modal-md-slide-in', ModalMDSlideIn);\n\n            ModalMDSlideOut = (function (_Animation4) {\n                _inherits(ModalMDSlideOut, _Animation4);\n\n                function ModalMDSlideOut(enteringView, leavingView, opts) {\n                    _classCallCheck(this, ModalMDSlideOut);\n\n                    _get(Object.getPrototypeOf(ModalMDSlideOut.prototype), \"constructor\", this).call(this, leavingView.pageRef(), opts);\n                    this.duration(200).easing('cubic-bezier(0.47,0,0.745,0.715)').fromTo('translateY', '0px', '40px').fadeOut();\n                }\n\n                return ModalMDSlideOut;\n            })(Animation);\n\n            Animation.register('modal-md-slide-out', ModalMDSlideOut);\n        }\n    };\n});\nSystem.register('ionic/components/nav/nav-controller', ['angular2/angular2', '../ion', './view-controller', '../../animations/animation', './swipe-back', '../../util/util', '../../util/dom'], function (_export) {\n    /**\n     * _For examples on the basic usage of NavController, check out the\n     * [Navigation section](../../../../components/#navigation) of the Component\n     * docs._\n     *\n     * NavController is the base class for navigation controller components like\n     * [`Nav`](../Nav/) and [`Tab`](../../Tabs/Tab/). You use navigation controllers\n     * to navigate to [pages](#creating_pages) in your app. At a basic level, a\n     * navigation controller is an array of pages representing a particular history\n     * (of a Tab for example). This array can be manipulated to navigate throughout\n     * an app by pushing and popping pages or inserting and removing them at\n     * arbitrary locations in history.\n     *\n     * The current page is the last one in the array, or the top of the stack if we\n     * think of it that way.  [Pushing](#push) a new page onto the top of the\n     * navigation stack causes the new page to be animated in, while [popping](#pop)\n     * the current page will navigate to the previous page in the stack.\n     *\n     * Unless you are using a directive like [NavPush](../NavPush/), or need a\n     * specific NavController, most times you will inject and use a reference to the\n     * nearest NavController to manipulate the navigation stack.\n     *\n     * <h3 id=\"injecting_nav_controller\">Injecting NavController</h3>\n     * Injecting NavController will always get you an instance of the nearest\n     * NavController, regardless of whether it is a Tab or a Nav.\n     *\n     * Behind the scenes, when Ionic instantiates a new NavController, it creates an\n     * injector with NavController bound to that instance (usually either a Nav or\n     * Tab) and adds the injector to its own providers.  For more information on\n     * providers and dependency injection, see [Providers and DI]().\n     *\n     * Instead, you can inject NavController and know that it is the correct\n     * navigation controller for most situations (for more advanced situations, see\n     * [Menu](../../Menu/Menu/) and [Tab](../../Tab/Tab/)).\n     *\n     * ```ts\n     *  class MyComponent {\n     *    constructor(nav: NavController) {\n     *      this.nav = nav;\n     *    }\n     *  }\n     * ```\n     *\n     * <h2 id=\"creating_pages\">Page creation</h2>\n     * _For more information on the `@Page` decorator see the [@Page API\n     * reference](../../../config/Page/)._\n     *\n     * Pages are created when they are added to the navigation stack.  For methods\n     * like [push()](#push), the NavController takes any component class that is\n     * decorated with `@Page` as its first argument.  The NavController then\n     * compiles that component, adds it to the app and animates it into view.\n     *\n     * By default, pages are cached and left in the DOM if they are navigated away\n     * from but still in the navigation stack (the exiting page on a `push()` for\n     * example).  They are destroyed when removed from the navigation stack (on\n     * [pop()](#pop) or [setRoot()](#setRoot)).\n     *\n     *\n     * <h2 id=\"Lifecycle\">Lifecycle events</h2>\n     * Lifecycle events are fired during various stages of navigation.  They can be\n     * defined in any `@Page` decorated component class.\n     *\n     * ```ts\n     * @Page({\n     *   template: 'Hello World'\n     * })\n     * class HelloWorld {\n     *   onPageLoaded() {\n     *     console.log(\"I'm alive!\");\n     *   }\n     *   onPageWillLeave() {\n     *     console.log(\"Looks like I'm about to leave :(\");\n     *   }\n     * }\n     * ```\n     *\n     *\n     *\n     * - `onPageLoaded` - Runs when the page has loaded. This event only happens once per page being created and added to the DOM. If a page leaves but is cached, then this event will not fire again on a subsequent viewing. The `onPageLoaded` event is good place to put your setup code for the page.\n     * - `onPageWillEnter` - Runs when the page is about to enter and become the active page.\n     * - `onPageDidEnter` - Runs when the page has fully entered and is now the active page. This event will fire, whether it was the first load or a cached page.\n     * - `onPageWillLeave` - Runs when the page is about to leave and no longer be the active page.\n     * - `onPageDidLeave` - Runs when the page has finished leaving and is no longer the active page.\n     * - `onPageWillUnload` - Runs when the page is about to be destroyed and have its elements removed.\n     * - `onPageDidUnload` - Runs after the page has been destroyed and its elements have been removed.\n     *\n     * @see {@link /docs/components#navigation Navigation Component Docs}\n     */\n    'use strict';\n\n    var Injector, provide, wtfLeave, wtfCreateScope, wtfStartTimeRange, wtfEndTimeRange, Ion, ViewController, Animation, SwipeBackGesture, isBoolean, array, raf, rafFrames, NavController, ACTIVE_STATE, CACHED_STATE, STAGED_ENTERING_STATE, STAGED_LEAVING_STATE, ctrlIds, NavParams;\n\n    var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();\n\n    var _get = function get(_x12, _x13, _x14) { var _again = true; _function: while (_again) { var object = _x12, property = _x13, receiver = _x14; _again = false; if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { _x12 = parent; _x13 = property; _x14 = receiver; _again = true; desc = parent = undefined; continue _function; } } else if ('value' in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } } };\n\n    function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\n    function _inherits(subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\n    return {\n        setters: [function (_angular2Angular2) {\n            Injector = _angular2Angular2.Injector;\n            provide = _angular2Angular2.provide;\n            wtfLeave = _angular2Angular2.wtfLeave;\n            wtfCreateScope = _angular2Angular2.wtfCreateScope;\n            wtfStartTimeRange = _angular2Angular2.wtfStartTimeRange;\n            wtfEndTimeRange = _angular2Angular2.wtfEndTimeRange;\n        }, function (_ion) {\n            Ion = _ion.Ion;\n        }, function (_viewController) {\n            ViewController = _viewController.ViewController;\n        }, function (_animationsAnimation) {\n            Animation = _animationsAnimation.Animation;\n        }, function (_swipeBack) {\n            SwipeBackGesture = _swipeBack.SwipeBackGesture;\n        }, function (_utilUtil) {\n            isBoolean = _utilUtil.isBoolean;\n            array = _utilUtil.array;\n        }, function (_utilDom) {\n            raf = _utilDom.raf;\n            rafFrames = _utilDom.rafFrames;\n        }],\n        execute: function () {\n            NavController = (function (_Ion) {\n                _inherits(NavController, _Ion);\n\n                function NavController(parentnavCtrl, app, config, keyboard, elementRef, anchorName, compiler, viewManager, zone, renderer, cd) {\n                    _classCallCheck(this, NavController);\n\n                    _get(Object.getPrototypeOf(NavController.prototype), 'constructor', this).call(this, elementRef, config);\n                    this.parent = parentnavCtrl;\n                    this.app = app;\n                    this.config = config;\n                    this.keyboard = keyboard;\n                    this._anchorName = anchorName;\n                    this._compiler = compiler;\n                    this._viewManager = viewManager;\n                    this._zone = zone;\n                    this._renderer = renderer;\n                    this._cd = cd;\n                    this._views = [];\n                    this._trnsTime = 0;\n                    this._trnsDelay = config.get('pageTransitionDelay');\n                    this._sbTrans = null;\n                    this._sbEnabled = config.get('swipeBackEnabled') || false;\n                    this._sbThreshold = config.get('swipeBackThreshold') || 40;\n                    this.initZIndex = 10;\n                    this.id = ++ctrlIds;\n                    this._ids = -1;\n                    // build a new injector for child ViewControllers to use\n                    this.providers = Injector.resolve([provide(NavController, { useValue: this })]);\n                }\n\n                /**\n                 * Boolean if the nav controller is actively transitioning or not.\n                 * @private\n                 * @return {bool}\n                 */\n\n                _createClass(NavController, [{\n                    key: 'isTransitioning',\n                    value: function isTransitioning() {\n                        return this._trnsTime > Date.now();\n                    }\n\n                    /**\n                     * Boolean if the nav controller is actively transitioning or not.\n                     * @private\n                     * @return {bool}\n                     */\n                }, {\n                    key: 'setTransitioning',\n                    value: function setTransitioning(isTransitioning) {\n                        var fallback = arguments.length <= 1 || arguments[1] === undefined ? 700 : arguments[1];\n\n                        this._trnsTime = isTransitioning ? Date.now() + fallback : 0;\n                    }\n\n                    /**\n                     * Push is how we can pass components and navigate to them. We push the component we want to navigate to on to the navigation stack.\n                     *\n                     * ```typescript\n                     * class MyClass{\n                     *    constructor(nav:NavController){\n                     *      this.nav = nav;\n                     *    }\n                     *\n                     *    pushPage(){\n                     *      this.nav.push(SecondView);\n                     *    }\n                     * }\n                     * ```\n                     *\n                     * We can also pass along parameters to the next view, such as data that we have on the current view. This is a similar concept to to V1 apps with `$stateParams`.\n                     *\n                     * ```typescript\n                     * class MyClass{\n                     *    constructor(nav:NavController){\n                     *      this.nav = nav;\n                     *    }\n                     *\n                     *    pushPage(user){\n                     *      this.nav.push(SecondView,{\n                     *       // user is an object we have in our view\n                     *       // typically this comes from an ngFor or some array\n                     *       // here we can create an object with a property of\n                     *       // paramUser, and set it's value to the user object we passed in\n                     *       paramUser: user\n                     *      });\n                     *    }\n                     * }\n                     * ```\n                     *\n                     * We'll look at how we can access that data in the `SecondView` in the navParam docs\n                     *\n                     * We can also pass any options to the transtion from that same method\n                     *\n                     * ```typescript\n                     * class MyClass{\n                     *    constructor(nav:NavController){\n                     *      this.nav = nav;\n                     *    }\n                     *\n                     *    pushPage(user){\n                     *      this.nav.push(SecondView,{\n                     *       // user is an object we have in our view\n                     *       // typically this comes from an ngFor or some array\n                     *       // here we can create an object with a property of\n                     *       // paramUser, and set it's value to the user object we passed in\n                     *       paramUser: user\n                     *      },{\n                     *       // here we can configure things like the animations direction or\n                     *       // or if the view should animate at all.\n                     *       direction: back\n                     *      });\n                     *    }\n                     * }\n                     * ```\n                     * @param {Any} component The name of the component you want to push on the navigation stack\n                     * @param {Object} [params={}] Any nav-params you want to pass along to the next view\n                     * @param {Object} [opts={}] Any options you want to use pass to transtion\n                     * @returns {Promise} Returns a promise when the transition is completed\n                     */\n                }, {\n                    key: 'push',\n                    value: function push(componentType, params, opts, callback) {\n                        if (params === undefined) params = {};\n                        if (opts === undefined) opts = {};\n\n                        if (!componentType) {\n                            return Promise.reject('invalid componentType to push');\n                        }\n                        if (typeof componentType !== 'function') {\n                            throw 'Loading component must be a component class, not \"' + componentType.toString() + '\"';\n                        }\n                        if (this.isTransitioning()) {\n                            return Promise.reject('nav controller actively transitioning');\n                        }\n                        this.setTransitioning(true, 500);\n                        var promise = null;\n                        if (!callback) {\n                            promise = new Promise(function (res) {\n                                callback = res;\n                            });\n                        }\n                        // do not animate if this is the first in the stack\n                        if (!this._views.length && !opts.animateFirst) {\n                            opts.animate = false;\n                        }\n                        // default the direction to \"forward\"\n                        opts.direction = opts.direction || 'forward';\n                        // the active view is going to be the leaving one (if one exists)\n                        var leavingView = this.getActive() || new ViewController();\n                        leavingView.shouldCache = isBoolean(opts.cacheLeavingView) ? opts.cacheLeavingView : true;\n                        leavingView.shouldDestroy = !leavingView.shouldCache;\n                        if (leavingView.shouldDestroy) {\n                            leavingView.willUnload();\n                        }\n                        // create a new ViewController\n                        var enteringView = new ViewController(this, componentType, params);\n                        enteringView.shouldDestroy = false;\n                        enteringView.shouldCache = false;\n                        enteringView.pageType = opts.pageType;\n                        enteringView.handle = opts.handle || null;\n                        // add the view to the stack\n                        this._add(enteringView);\n                        if (this.router) {\n                            // notify router of the state change\n                            this.router.stateChange('push', enteringView, params);\n                        }\n                        // start the transition\n                        this._transition(enteringView, leavingView, opts, callback);\n                        return promise;\n                    }\n\n                    /**\n                     * If you wanted to navigate back from a current view, you can use the back-button or programatically call `pop()`\n                     * Similar to `push()`, you can pass animation options.\n                     *\n                     * ```typescript\n                     * class SecondView{\n                     *    constructor(nav:NavController){\n                     *      this.nav = nav;\n                     *    }\n                     *    goBack(){\n                     *      this.nav.pop();\n                     *    }\n                     * }\n                     * ```\n                     *\n                     * @param {Object} [opts={}] Any options you want to use pass to transtion\n                     * @returns {Promise} Returns a promise when the transition is completed\n                     */\n                }, {\n                    key: 'pop',\n                    value: function pop() {\n                        var opts = arguments.length <= 0 || arguments[0] === undefined ? {} : arguments[0];\n\n                        if (!opts.animateFirst && !this.canGoBack()) {\n                            return Promise.reject('pop cannot go back');\n                        }\n                        if (this.isTransitioning()) {\n                            return Promise.reject('nav controller actively transitioning');\n                        }\n                        this.setTransitioning(true, 500);\n                        var resolve = null;\n                        var promise = new Promise(function (res) {\n                            resolve = res;\n                        });\n                        // default the direction to \"back\"\n                        opts.direction = opts.direction || 'back';\n                        // get the active view and set that it is staged to be leaving\n                        // was probably the one popped from the stack\n                        var leavingView = this.getActive() || new ViewController();\n                        leavingView.shouldCache = isBoolean(opts.cacheLeavingView) ? opts.cacheLeavingView : false;\n                        leavingView.shouldDestroy = !leavingView.shouldCache;\n                        if (leavingView.shouldDestroy) {\n                            leavingView.willUnload();\n                        }\n                        // the entering view is now the new last view\n                        // Note: we might not have an entering view if this is the\n                        // only view on the history stack.\n                        var enteringView = this.getPrevious(leavingView);\n                        if (this.router) {\n                            // notify router of the state change\n                            this.router.stateChange('pop', enteringView);\n                        }\n                        // start the transition\n                        this._transition(enteringView, leavingView, opts, resolve);\n                        return promise;\n                    }\n\n                    /**\n                     * @private\n                     * Pop to a specific view in the history stack\n                     * @param view {ViewController} to pop to\n                     * @param {Object} [opts={}] Any options you want to use pass to transtion\n                     */\n                }, {\n                    key: 'popTo',\n                    value: function popTo(viewCtrl) {\n                        var opts = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1];\n\n                        // Get the target index of the view to pop to\n                        var viewIndex = this._views.indexOf(viewCtrl);\n                        var targetIndex = viewIndex + 1;\n                        // Don't pop to the view if it wasn't found, or the target is beyond the view list\n                        if (viewIndex < 0 || targetIndex > this._views.length - 1) {\n                            return Promise.resolve();\n                        }\n                        // ensure the entering view is shown\n                        this._cachePage(viewCtrl, true);\n                        var resolve = null;\n                        var promise = new Promise(function (res) {\n                            resolve = res;\n                        });\n                        opts.direction = opts.direction || 'back';\n                        var leavingView = this.getActive() || new ViewController();\n                        // get the views to auto remove without having to do a transiton for each\n                        // the last view (the currently active one) will do a normal transition out\n                        if (this._views.length > 1) {\n                            var autoRemoveItems = this._views.slice(targetIndex, this._views.length);\n                            var popView = undefined;\n                            for (var i = 0; i < autoRemoveItems.length; i++) {\n                                popView = autoRemoveItems[i];\n                                popView.shouldDestroy = true;\n                                popView.shouldCache = false;\n                                popView.willUnload();\n                                // only the leaving view should be shown, all others hide\n                                this._cachePage(popView, popView === leavingView);\n                            }\n                        }\n                        if (this.router) {\n                            this.router.stateChange('pop', viewCtrl);\n                        }\n                        this._transition(viewCtrl, leavingView, opts, resolve);\n                        return promise;\n                    }\n\n                    /**\n                     * Similar to `pop()`, this method let's you navigate back to the root of the stack, no matter how many views that is\n                     * @param {Object} [opts={}] Any options you want to use pass to transtion\n                     */\n                }, {\n                    key: 'popToRoot',\n                    value: function popToRoot() {\n                        var opts = arguments.length <= 0 || arguments[0] === undefined ? {} : arguments[0];\n\n                        return this.popTo(this.first(), opts);\n                    }\n\n                    /**\n                     * Inserts a view into the nav stack at the specified index.\n                     * This is useful if you need to add a view at any point in your navigation stack\n                     *\n                     * ```typescript\n                     * export class Detail {\n                     *    constructor(nav: NavController) {\n                     *      this.nav = nav;\n                     *    }\n                     *    insertView(){\n                     *      this.nav.insert(1,Info)\n                     *    }\n                     *  }\n                     * ```\n                     *\n                     * This will insert the `Info` view into the second slot of our navigation stack\n                     *\n                     * @param {Number} index The index where you want to insert the view\n                     * @param {Any} component The name of the component you want to insert into the nav stack\n                     * @returns {Promise} Returns a promise when the view has been inserted into the navigation stack\n                     */\n                }, {\n                    key: 'insert',\n                    value: function insert(index, componentType) {\n                        var params = arguments.length <= 2 || arguments[2] === undefined ? {} : arguments[2];\n                        var opts = arguments.length <= 3 || arguments[3] === undefined ? {} : arguments[3];\n\n                        if (!componentType || index < 0) {\n                            return Promise.reject('invalid insert');\n                        }\n                        // push it onto the end\n                        if (index >= this._views.length) {\n                            return this.push(componentType, params, opts);\n                        }\n                        // create new ViewController, but don't render yet\n                        var viewCtrl = new ViewController(this, componentType, params);\n                        viewCtrl.state = CACHED_STATE;\n                        viewCtrl.shouldDestroy = false;\n                        viewCtrl.shouldCache = false;\n                        this._incrementId(viewCtrl);\n                        this._views.splice(index, 0, viewCtrl);\n                        this._cleanup();\n                        return Promise.resolve();\n                    }\n\n                    /**\n                     * Removes a view from the nav stack at the specified index.\n                     *\n                     * ```typescript\n                     * export class Detail {\n                     *    constructor(nav: NavController) {\n                     *      this.nav = nav;\n                     *    }\n                     *    removeView(){\n                     *      this.nav.remove(1)\n                     *    }\n                     *  }\n                     * ```\n                     *\n                     * @param {Number} index Remove the view from the nav stack at that index\n                     * @param {Object} [opts={}] Any options you want to use pass to transtion\n                     * @returns {Promise} Returns a promise when the view has been removed\n                     */\n                }, {\n                    key: 'remove',\n                    value: function remove(index) {\n                        var opts = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1];\n\n                        if (index < 0 || index >= this._views.length) {\n                            return Promise.reject(\"index out of range\");\n                        }\n                        var viewToRemove = this._views[index];\n                        if (this.isActive(viewToRemove)) {\n                            return this.pop(opts);\n                        }\n                        viewToRemove.shouldDestroy = true;\n                        this._cleanup();\n                        return Promise.resolve();\n                    }\n\n                    /**\n                     * @private\n                     */\n                }, {\n                    key: 'setViews',\n                    value: function setViews(components) {\n                        var opts = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1];\n\n                        console.warn('setViews() deprecated, use setPages() instead');\n                        return this.setPages(components, opts);\n                    }\n\n                    /**\n                     * You can set the views of the current navigation stack and navigate to the last view past\n                     *\n                     *\n                     *```typescript\n                     * import {Page, NavController} from 'ionic/ionic'\n                     * import {Detail} from '../detail/detail'\n                     * import {Info} from '../info/info'\n                     *\n                     *  export class Home {\n                     *    constructor(nav: NavController) {\n                     *      this.nav = nav;\n                     *    }\n                     *    setPages() {\n                     *      this.nav.setPages([List,Detail, Info]);\n                     *    }\n                     *  }\n                     *```\n                     *\n                     *\n                     *In this example, we're giving the current nav stack an array of pages. Then the navigation stack will navigate to the last view in the array and remove the orignal view you came from.\n                     *\n                     *By default, animations are disabled, but they can be enabled by passing options to the navigation controller\n                     *\n                     *\n                     *```typescript\n                     * import {Page, NavController} from 'ionic/ionic'\n                     * import {Detail} from '../detail/detail'\n                     * import {Info} from '../info/info'\n                     *\n                     *  export class Home {\n                     *    constructor(nav: NavController) {\n                     *      this.nav = nav;\n                     *    }\n                     *    setPages() {\n                     *      this.nav.setPages([List,Detail, Info],{\n                     *        animate: true\n                     *      });\n                     *    }\n                     *  }\n                     *```\n                     *\n                     *\n                     *You can also pass any navigation params to the individual pages in the array.\n                     *\n                     *\n                     *```typescript\n                     * import {Page, NavController} from 'ionic/ionic'\n                     * import {Detail} from '../detail/detail'\n                     * import {Info} from '../info/info'\n                     *\n                     *  export class Home {\n                     *    constructor(nav: NavController) {\n                     *      this.nav = nav;\n                     *    }\n                     *    setPages() {\n                     *      this.nav.setPages([{\n                     *        componentType: List,\n                     *        params: {id: 43}\n                     *      }, {\n                     *        componentType: Detail,\n                     *        params: {id: 45}\n                     *      },{\n                     *        componentType: Info,\n                     *        params: {id: 5}\n                     *      }]);\n                     *    }\n                     *  }\n                     *```\n                     *\n                     * @param {Array} component an arry of components to load in the stack\n                     * @param {Object} [opts={}] Any options you want to use pass\n                     * @returns {Promise} Returns a promise when the pages are set\n                     */\n                }, {\n                    key: 'setPages',\n                    value: function setPages(components) {\n                        var opts = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1];\n\n                        if (!components || !components.length) {\n                            return Promise.resolve();\n                        }\n                        var leavingView = this.getActive() || new ViewController();\n                        // if animate has not been set then default to false\n                        opts.animate = opts.animate || false;\n                        // ensure leaving views are not cached, and should be destroyed\n                        opts.cacheLeavingView = false;\n                        // get the views to auto remove without having to do a transiton for each\n                        // the last view (the currently active one) will do a normal transition out\n                        if (this._views.length > 1) {\n                            var autoRemoveItems = this._views.slice(0, this._views.length - 1);\n                            var popView = undefined;\n                            for (var i = 0; i < autoRemoveItems.length; i++) {\n                                popView = autoRemoveItems[i];\n                                popView.shouldDestroy = true;\n                                popView.shouldCache = false;\n                                popView.willUnload();\n                                if (opts.animate) {\n                                    // only the leaving view should be shown, all others hide\n                                    this._cachePage(popView, popView === leavingView);\n                                }\n                            }\n                        }\n                        var componentObj = null;\n                        var componentType = null;\n                        var viewCtrl = null;\n                        // create the ViewControllers that go before the new active ViewController\n                        // in the stack, but the previous views shouldn't render yet\n                        if (components.length > 1) {\n                            var newBeforeItems = components.slice(0, components.length - 1);\n                            for (var j = 0; j < newBeforeItems.length; j++) {\n                                componentObj = newBeforeItems[j];\n                                if (componentObj) {\n                                    // could be an object with a componentType property, or it is a componentType\n                                    componentType = componentObj.componentType || componentObj;\n                                    viewCtrl = new ViewController(this, componentType, componentObj.params);\n                                    viewCtrl.state = CACHED_STATE;\n                                    viewCtrl.shouldDestroy = false;\n                                    viewCtrl.shouldCache = false;\n                                    // add the item to the stack\n                                    this._add(viewCtrl);\n                                }\n                            }\n                        }\n                        // get the component that will become the active item\n                        // it'll be the last one in the given components array\n                        componentObj = components[components.length - 1];\n                        componentType = componentObj.componentType || componentObj;\n                        // transition the leaving and entering\n                        return this.push(componentType, componentObj.params, opts);\n                    }\n\n                    /**\n                     * Set the root for the current navigation stack\n                     * @param {Component} The name of the component you want to push on the navigation stack\n                     * @param {Object} [params={}] Any nav-params you want to pass along to the next view\n                     * @param {Object} [opts={}] Any options you want to use pass to transtion\n                     * @returns {Promise} Returns a promise when done\n                     */\n                }, {\n                    key: 'setRoot',\n                    value: function setRoot(componentType) {\n                        var params = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1];\n                        var opts = arguments.length <= 2 || arguments[2] === undefined ? {} : arguments[2];\n\n                        return this.setPages([{\n                            componentType: componentType,\n                            params: params\n                        }], opts);\n                    }\n\n                    /**\n                     * @private\n                     */\n                }, {\n                    key: '_transition',\n                    value: function _transition(enteringView, leavingView, opts, done) {\n                        if (enteringView === leavingView) {\n                            // if the entering view and leaving view are the same thing don't continue\n                            return done(enteringView);\n                        }\n                        if (!opts.animation) {\n                            opts.animation = this.config.get('pageTransition');\n                        }\n                        if (this.config.get('animate') === false) {\n                            opts.animate = false;\n                        }\n                        if (!enteringView) {\n                            // if no entering view then create a bogus one\n                            // already consider this bogus one loaded\n                            enteringView = new ViewController();\n                            enteringView.loaded();\n                        }\n                        var wtfScope = wtfStartTimeRange('ionic.NavController#_transition ' + enteringView.name);\n                        /* Async steps to complete a transition\n                          1. _render: compile the view and render it in the DOM. Load page if it hasn't loaded already. When done call postRender\n                          2. _postRender: Run willEnter/willLeave, then wait a frame (change detection happens), then call beginTransition\n                          3. _beforeTrans: Create the transition's animation, play the animation, wait for it to end\n                          4. _afterTrans: Run didEnter/didLeave, call _transComplete()\n                          5. _transComplete: Cleanup, remove cache views, then call the final callback\n                        */\n                        // begin the multiple async process of transitioning to the entering view\n                        this._render(enteringView, leavingView, opts, function () {\n                            wtfEndTimeRange(wtfScope);\n                            done(enteringView);\n                        });\n                    }\n\n                    /**\n                     * @private\n                     */\n                }, {\n                    key: '_render',\n                    value: function _render(enteringView, leavingView, opts, done) {\n                        var _this = this;\n\n                        // compile/load the view into the DOM\n                        if (enteringView.shouldDestroy) {\n                            // about to be destroyed, shouldn't continue\n                            done();\n                        } else if (enteringView.isLoaded()) {\n                            // already compiled this view, do not load again and continue\n                            this._postRender(enteringView, leavingView, opts, done);\n                        } else {\n                            // view has not been compiled/loaded yet\n                            // continue once the view has finished compiling\n                            // DOM WRITE\n                            this.loadPage(enteringView, null, opts, function () {\n                                if (enteringView.onReady) {\n                                    // this entering view needs to wait for it to be ready\n                                    // this is used by Tabs to wait for the first page of\n                                    // the first selected tab to be loaded\n                                    enteringView.onReady(function () {\n                                        enteringView.loaded();\n                                        _this._postRender(enteringView, leavingView, opts, done);\n                                    });\n                                } else {\n                                    enteringView.loaded();\n                                    _this._postRender(enteringView, leavingView, opts, done);\n                                }\n                            });\n                        }\n                    }\n\n                    /**\n                     * @private\n                     */\n                }, {\n                    key: '_postRender',\n                    value: function _postRender(enteringView, leavingView, opts, done) {\n                        var _this2 = this;\n\n                        var wtfScope = wtfStartTimeRange('ionic.NavController#_postRender ' + enteringView.name);\n                        // called after _render has completed and the view is compiled/loaded\n                        if (enteringView.shouldDestroy) {\n                            // view already marked as a view that will be destroyed, don't continue\n                            wtfEndTimeRange(wtfScope);\n                            done();\n                        } else if (!opts.preload) {\n                            // the enteringView will become the active view, and is not being preloaded\n                            // call each view's lifecycle events\n                            // POSSIBLE DOM READ THEN DOM WRITE\n                            enteringView.willEnter();\n                            leavingView.willLeave();\n                            // set the correct zIndex for the entering and leaving views\n                            // DOM WRITE\n                            this._setZIndex(enteringView, leavingView, opts.direction);\n                            // make sure the entering and leaving views are showing\n                            // and all others are hidden, but don't remove the leaving view yet\n                            // DOM WRITE\n                            this._cleanup(enteringView, leavingView, true);\n                            // lifecycle events may have updated some data\n                            // wait one frame and allow the raf to do a change detection\n                            // before kicking off the transition and showing the new view\n                            raf(function () {\n                                wtfEndTimeRange(wtfScope);\n                                _this2._beforeTrans(enteringView, leavingView, opts, done);\n                            });\n                        } else {\n                            // this view is being preloaded, don't call lifecycle events\n                            // transition does not need to animate\n                            opts.animate = false;\n                            wtfEndTimeRange(wtfScope);\n                            this._beforeTrans(enteringView, leavingView, opts, done);\n                        }\n                    }\n\n                    /**\n                     * @private\n                     */\n                }, {\n                    key: '_beforeTrans',\n                    value: function _beforeTrans(enteringView, leavingView, opts, done) {\n                        var _this3 = this;\n\n                        var wtfScope = wtfStartTimeRange('ionic.NavController#_beforeTrans ' + enteringView.name);\n                        // called after one raf from postRender()\n                        // create the transitions animation, play the animation\n                        // when the transition ends call wait for it to end\n                        // everything during the transition should runOutsideAngular\n                        this._zone.runOutsideAngular(function () {\n                            // ensure the entering view is not destroyed or cached\n                            enteringView.shouldDestroy = false;\n                            enteringView.shouldCache = false;\n                            // set that the new view pushed on the stack is staged to be entering/leaving\n                            // staged state is important for the transition to find the correct view\n                            enteringView.state = STAGED_ENTERING_STATE;\n                            leavingView.state = STAGED_LEAVING_STATE;\n                            // init the transition animation\n                            opts.renderDelay = opts.transitionDelay || self._trnsDelay;\n                            var transAnimation = Animation.createTransition(enteringView, leavingView, opts);\n                            if (opts.animate === false) {\n                                // force it to not animate the elements, just apply the \"to\" styles\n                                transAnimation.clearDuration();\n                                transAnimation.duration(0);\n                            }\n                            var duration = transAnimation.duration();\n                            var enableApp = duration < 64;\n                            // block any clicks during the transition and provide a\n                            // fallback to remove the clickblock if something goes wrong\n                            _this3.app.setEnabled(enableApp, duration);\n                            _this3.setTransitioning(!enableApp, duration);\n                            if (opts.pageType) {\n                                transAnimation.before.addClass(opts.pageType);\n                            }\n                            wtfEndTimeRange(wtfScope);\n                            // start the transition\n                            transAnimation.play(function () {\n                                // transition animation has ended\n                                // dispose the animation and it's element references\n                                transAnimation.dispose();\n                                _this3._afterTrans(enteringView, leavingView, opts, done);\n                            });\n                        });\n                    }\n\n                    /**\n                     * @private\n                     */\n                }, {\n                    key: '_afterTrans',\n                    value: function _afterTrans(enteringView, leavingView, opts, done) {\n                        var _this4 = this;\n\n                        var wtfScope = wtfStartTimeRange('ionic.NavController#_afterTrans ' + enteringView.name);\n                        // transition has completed, update each view's state\n                        // place back into the zone, run didEnter/didLeave\n                        // call the final callback when done\n                        enteringView.state = ACTIVE_STATE;\n                        leavingView.state = CACHED_STATE;\n                        // run inside of the zone again\n                        this._zone.run(function () {\n                            if (!opts.preload) {\n                                enteringView.didEnter();\n                                leavingView.didLeave();\n                            }\n                            if (_this4.keyboard.isOpen()) {\n                                // the keyboard is still open!\n                                // no problem, let's just close for them\n                                _this4.keyboard.onClose(function () {\n                                    // keyboard has finished closing, transition complete\n                                    _this4._transComplete();\n                                    wtfEndTimeRange(wtfScope);\n                                    done();\n                                }, 32);\n                            } else {\n                                // all good, transition complete\n                                _this4._transComplete();\n                                wtfEndTimeRange(wtfScope);\n                                done();\n                            }\n                        });\n                    }\n\n                    /**\n                     * @private\n                     */\n                }, {\n                    key: '_transComplete',\n                    value: function _transComplete() {\n                        var wtfScope = wtfCreateScope('ionic.NavController#_transComplete')();\n                        this._views.forEach(function (view) {\n                            if (view) {\n                                if (view.shouldDestroy) {\n                                    view.didUnload();\n                                } else if (view.state === CACHED_STATE && view.shouldCache) {\n                                    view.shouldCache = false;\n                                }\n                            }\n                        });\n                        // allow clicks again, but still set an enable time\n                        // meaning nothing with this view controller can happen for XXms\n                        this.app.setEnabled(true);\n                        this.setTransitioning(false);\n                        this._sbComplete();\n                        this._cleanup();\n                        wtfLeave(wtfScope);\n                    }\n\n                    /**\n                     * @private\n                     */\n                }, {\n                    key: 'loadPage',\n                    value: function loadPage(viewCtrl, navbarContainerRef, opts, done) {\n                        var _this5 = this;\n\n                        var wtfTimeRangeScope = wtfStartTimeRange('ionic.NavController#loadPage ' + viewCtrl.name);\n                        // guts of DynamicComponentLoader#loadIntoLocation\n                        this._compiler.compileInHost(viewCtrl.componentType).then(function (hostProtoViewRef) {\n                            var wtfScope = wtfCreateScope('ionic.NavController#loadPage_After_Compile')();\n                            var providers = _this5.providers.concat(Injector.resolve([provide(ViewController, { useValue: viewCtrl }), provide(NavParams, { useValue: viewCtrl.params })]));\n                            var location = _this5.elementRef;\n                            if (_this5._anchorName) {\n                                location = _this5._viewManager.getNamedElementInComponentView(location, _this5._anchorName);\n                            }\n                            var viewContainer = _this5._viewManager.getViewContainer(location);\n                            var hostViewRef = viewContainer.createHostView(hostProtoViewRef, viewContainer.length, providers);\n                            var pageElementRef = _this5._viewManager.getHostElement(hostViewRef);\n                            var component = _this5._viewManager.getComponent(pageElementRef);\n                            viewCtrl.addDestroy(function () {\n                                // ensure the element is cleaned up for when the view pool reuses this element\n                                _this5._renderer.setElementAttribute(pageElementRef, 'class', null);\n                                _this5._renderer.setElementAttribute(pageElementRef, 'style', null);\n                                // remove the page from its container\n                                var index = viewContainer.indexOf(hostViewRef);\n                                if (index !== -1) {\n                                    viewContainer.remove(index);\n                                }\n                            });\n                            // a new ComponentRef has been created\n                            // set the ComponentRef's instance to this ViewController\n                            viewCtrl.setInstance(component);\n                            // remember the ElementRef to the ion-page elementRef that was just created\n                            viewCtrl.setPageRef(pageElementRef);\n                            if (!navbarContainerRef) {\n                                navbarContainerRef = viewCtrl.getNavbarViewRef();\n                            }\n                            var navbarTemplateRef = viewCtrl.getNavbarTemplateRef();\n                            if (navbarContainerRef && navbarTemplateRef) {\n                                (function () {\n                                    var navbarView = navbarContainerRef.createEmbeddedView(navbarTemplateRef);\n                                    viewCtrl.addDestroy(function () {\n                                        var index = navbarContainerRef.indexOf(navbarView);\n                                        if (index > -1) {\n                                            navbarContainerRef.remove(index);\n                                        }\n                                    });\n                                })();\n                            }\n                            opts.postLoad && opts.postLoad(viewCtrl);\n                            if (_this5._views.length === 1) {\n                                _this5._zone.runOutsideAngular(function () {\n                                    rafFrames(38, function () {\n                                        _this5._renderer.setElementClass(_this5.elementRef, 'has-views', true);\n                                    });\n                                });\n                            }\n                            wtfEndTimeRange(wtfTimeRangeScope);\n                            wtfLeave(wtfScope);\n                            done(viewCtrl);\n                        });\n                    }\n\n                    /**\n                     * @private\n                     */\n                }, {\n                    key: '_setZIndex',\n                    value: function _setZIndex(enteringView, leavingView, direction) {\n                        var enteringPageRef = enteringView && enteringView.pageRef();\n                        if (enteringPageRef) {\n                            if (!leavingView || !leavingView.isLoaded()) {\n                                enteringView.zIndex = this.initZIndex;\n                            } else if (direction === 'back') {\n                                // moving back\n                                enteringView.zIndex = leavingView.zIndex - 1;\n                            } else {\n                                // moving forward\n                                enteringView.zIndex = leavingView.zIndex + 1;\n                            }\n                            if (enteringView.zIndex !== enteringView._zIndex) {\n                                this._renderer.setElementStyle(enteringPageRef, 'z-index', enteringView.zIndex);\n                                enteringView._zIndex = enteringView.zIndex;\n                            }\n                        }\n                    }\n\n                    /**\n                     * @private\n                     */\n                }, {\n                    key: '_cachePage',\n                    value: function _cachePage(viewCtrl, shouldShow) {\n                        // using hidden element attribute to display:none and not render views\n                        // renderAttr of '' means the hidden attribute will be added\n                        // renderAttr of null means the hidden attribute will be removed\n                        // doing checks to make sure we only make an update to the element when needed\n                        if (shouldShow && viewCtrl._hdnAttr === '' || !shouldShow && viewCtrl._hdnAttr !== '') {\n                            viewCtrl._hdnAttr = shouldShow ? null : '';\n                            this._renderer.setElementAttribute(viewCtrl.pageRef(), 'hidden', viewCtrl._hdnAttr);\n                            var navbarRef = viewCtrl.navbarRef();\n                            if (navbarRef) {\n                                this._renderer.setElementAttribute(navbarRef, 'hidden', viewCtrl._hdnAttr);\n                            }\n                        }\n                    }\n\n                    /**\n                     * @private\n                     */\n                }, {\n                    key: '_cleanup',\n                    value: function _cleanup(activeView, previousView, skipDestroy) {\n                        var _this6 = this;\n\n                        // the active page, and the previous page, should be rendered in dom and ready to go\n                        // all others, like a cached page 2 back, should be display: none and not rendered\n                        var destroys = [];\n                        activeView = activeView || this.getActive();\n                        previousView = previousView || this.getPrevious(activeView);\n                        this._views.forEach(function (view) {\n                            if (view) {\n                                if (view.shouldDestroy && !skipDestroy) {\n                                    destroys.push(view);\n                                } else if (view.isLoaded()) {\n                                    var shouldShow = view === activeView || view === previousView;\n                                    _this6._cachePage(view, shouldShow);\n                                }\n                            }\n                        });\n                        // all pages being destroyed should be removed from the list of pages\n                        // and completely removed from the dom\n                        destroys.forEach(function (view) {\n                            _this6._remove(view);\n                            view.destroy();\n                        });\n                    }\n\n                    /**\n                     * @private\n                     */\n                }, {\n                    key: 'swipeBackStart',\n                    value: function swipeBackStart() {\n                        var _this7 = this;\n\n                        return;\n                        if (!this.app.isEnabled() || !this.canSwipeBack()) {\n                            return;\n                        }\n                        // disables the app during the transition\n                        this.app.setEnabled(false);\n                        this.setTransitioning(true);\n                        // default the direction to \"back\"\n                        var opts = {\n                            direction: 'back'\n                        };\n                        // get the active view and set that it is staged to be leaving\n                        // was probably the one popped from the stack\n                        var leavingView = this.getActive() || new ViewController();\n                        leavingView.shouldDestroy = true;\n                        leavingView.shouldCache = false;\n                        leavingView.willLeave();\n                        leavingView.willUnload();\n                        // the entering view is now the new last view\n                        var enteringView = this.getPrevious(leavingView);\n                        enteringView.shouldDestroy = false;\n                        enteringView.shouldCache = false;\n                        enteringView.willEnter();\n                        // wait for the new view to complete setup\n                        this._render(enteringView, {}, function () {\n                            _this7._zone.runOutsideAngular(function () {\n                                // set that the new view pushed on the stack is staged to be entering/leaving\n                                // staged state is important for the transition to find the correct view\n                                enteringView.state = STAGED_ENTERING_STATE;\n                                leavingView.state = STAGED_LEAVING_STATE;\n                                // init the swipe back transition animation\n                                _this7._sbTrans = Transition.create(_this7, opts);\n                                _this7._sbTrans.easing('linear').progressStart();\n                            });\n                        });\n                    }\n\n                    /**\n                     * @private\n                     */\n                }, {\n                    key: 'swipeBackProgress',\n                    value: function swipeBackProgress(value) {\n                        return;\n                        if (this._sbTrans) {\n                            // continue to disable the app while actively dragging\n                            this.app.setEnabled(false, 4000);\n                            this.setTransitioning(true, 4000);\n                            // set the transition animation's progress\n                            this._sbTrans.progress(value);\n                        }\n                    }\n\n                    /**\n                     * @private\n                     */\n                }, {\n                    key: 'swipeBackEnd',\n                    value: function swipeBackEnd(completeSwipeBack, rate) {\n                        var _this8 = this;\n\n                        return;\n                        if (!this._sbTrans) return;\n                        // disables the app during the transition\n                        this.app.setEnabled(false);\n                        this.setTransitioning(true);\n                        this._sbTrans.progressEnd(completeSwipeBack, rate).then(function () {\n                            _this8._zone.run(function () {\n                                // find the views that were entering and leaving\n                                var enteringView = _this8._getStagedEntering();\n                                var leavingView = _this8._getStagedLeaving();\n                                if (enteringView && leavingView) {\n                                    // finish up the animation\n                                    if (completeSwipeBack) {\n                                        // swipe back has completed navigating back\n                                        // update each view's state\n                                        enteringView.state = ACTIVE_STATE;\n                                        leavingView.state = CACHED_STATE;\n                                        enteringView.didEnter();\n                                        leavingView.didLeave();\n                                        if (_this8.router) {\n                                            // notify router of the pop state change\n                                            _this8.router.stateChange('pop', enteringView);\n                                        }\n                                    } else {\n                                        // cancelled the swipe back, they didn't end up going back\n                                        // return views to their original state\n                                        leavingView.state = ACTIVE_STATE;\n                                        enteringView.state = CACHED_STATE;\n                                        leavingView.willEnter();\n                                        leavingView.didEnter();\n                                        enteringView.didLeave();\n                                        leavingView.shouldDestroy = false;\n                                        enteringView.shouldDestroy = false;\n                                    }\n                                }\n                                // empty out and dispose the swipe back transition animation\n                                _this8._sbTrans && _this8._sbTrans.dispose();\n                                _this8._sbTrans = null;\n                                // all done!\n                                _this8._transComplete();\n                            });\n                        });\n                    }\n\n                    /**\n                     * @private\n                     */\n                }, {\n                    key: '_sbComplete',\n                    value: function _sbComplete() {\n                        return;\n                        if (this.canSwipeBack()) {\n                            // it is possible to swipe back\n                            if (this.sbGesture) {\n                                // this is already an active gesture, don't create another one\n                                return;\n                            }\n                            var opts = {\n                                edge: 'left',\n                                threshold: this._sbThreshold\n                            };\n                            this.sbGesture = new SwipeBackGesture(this.getNativeElement(), opts, this);\n                            console.debug('SwipeBackGesture listen');\n                            this.sbGesture.listen();\n                        } else if (this.sbGesture) {\n                            // it is not possible to swipe back and there is an\n                            // active sbGesture, so unlisten it\n                            console.debug('SwipeBackGesture unlisten');\n                            this.sbGesture.unlisten();\n                            this.sbGesture = null;\n                        }\n                    }\n\n                    /**\n                     * Check to see if swipe-to-go-back is enabled\n                     * @param {boolean=} isSwipeBackEnabled Set whether or not swipe-to-go-back is enabled\n                     * @returns {boolean} Whether swipe-to-go-back is enabled\n                     */\n                }, {\n                    key: 'isSwipeBackEnabled',\n                    value: function isSwipeBackEnabled(val) {\n                        if (arguments.length) {\n                            this._sbEnabled = !!val;\n                        }\n                        return this._sbEnabled;\n                    }\n\n                    /**\n                     * If it's possible to use swipe back or not. If it's not possible\n                     * to go back, or swipe back is not enable then this will return false.\n                     * If it is possible to go back, and swipe back is enabled, then this\n                     * will return true.\n                     * @returns {boolean} Whether you can swipe to go back\n                     */\n                }, {\n                    key: 'canSwipeBack',\n                    value: function canSwipeBack() {\n                        return this._sbEnabled && this.canGoBack();\n                    }\n\n                    /**\n                     * Returns `true` if there's a valid previous page that we can pop back to.\n                     * Otherwise returns false.\n                     * @returns {boolean} Whether there is a page to go back to\n                     */\n                }, {\n                    key: 'canGoBack',\n                    value: function canGoBack() {\n                        var activeView = this.getActive();\n                        if (activeView) {\n                            return activeView.enableBack();\n                        }\n                        return false;\n                    }\n\n                    /**\n                     * @private\n                     */\n                }, {\n                    key: 'navbarViewContainer',\n                    value: function navbarViewContainer(nbContainer) {\n                        if (nbContainer) {\n                            this._nbContainer = nbContainer;\n                        }\n                        if (this._nbContainer) {\n                            return this._nbContainer;\n                        }\n                        if (this.parent) {\n                            return this.parent.navbarViewContainer();\n                        }\n                    }\n\n                    /**\n                     * @private\n                     * @returns {TODO} TODO\n                     */\n                }, {\n                    key: 'anchorElementRef',\n                    value: function anchorElementRef() {\n                        if (arguments.length) {\n                            this._anchorER = arguments[0];\n                        }\n                        return this._anchorER;\n                    }\n\n                    /**\n                     * @private\n                     */\n                }, {\n                    key: '_add',\n                    value: function _add(viewCtrl) {\n                        this._incrementId(viewCtrl);\n                        this._views.push(viewCtrl);\n                    }\n\n                    /**\n                     * @private\n                     */\n                }, {\n                    key: '_incrementId',\n                    value: function _incrementId(viewCtrl) {\n                        viewCtrl.id = this.id + '-' + ++this._ids;\n                    }\n\n                    /**\n                     * @private\n                     */\n                }, {\n                    key: '_remove',\n                    value: function _remove(viewOrIndex) {\n                        array.remove(this._views, viewOrIndex);\n                    }\n\n                    /**\n                     * @private\n                     */\n                }, {\n                    key: '_getStagedEntering',\n                    value: function _getStagedEntering() {\n                        for (var i = 0, ii = this._views.length; i < ii; i++) {\n                            if (this._views[i].state === STAGED_ENTERING_STATE) {\n                                return this._views[i];\n                            }\n                        }\n                        return null;\n                    }\n\n                    /**\n                     * @private\n                     */\n                }, {\n                    key: '_getStagedLeaving',\n                    value: function _getStagedLeaving() {\n                        for (var i = 0, ii = this._views.length; i < ii; i++) {\n                            if (this._views[i].state === STAGED_LEAVING_STATE) {\n                                return this._views[i];\n                            }\n                        }\n                        return null;\n                    }\n\n                    /**\n                     * @private\n                     * @returns {Component} TODO\n                     */\n                }, {\n                    key: 'getActive',\n                    value: function getActive() {\n                        for (var i = this._views.length - 1; i >= 0; i--) {\n                            if (this._views[i].state === ACTIVE_STATE && !this._views[i].shouldDestroy) {\n                                return this._views[i];\n                            }\n                        }\n                        return null;\n                    }\n\n                    /**\n                     * @param {Index} The index of the page you want to get\n                     * @returns {Component} Returns the component that matches the index given\n                     */\n                }, {\n                    key: 'getByIndex',\n                    value: function getByIndex(index) {\n                        if (index < this._views.length && index > -1) {\n                            return this._views[index];\n                        }\n                        return null;\n                    }\n\n                    /**\n                     * @private\n                     * @param {Handle} The handle of the page you want to get\n                     * @returns {Component} Returns the component that matches the handle given\n                     */\n                }, {\n                    key: 'getByHandle',\n                    value: function getByHandle(handle) {\n                        for (var i = 0, ii = this._views.length; i < ii; i++) {\n                            if (this._views[i].handle === handle) {\n                                return this._views[i];\n                            }\n                        }\n                        return null;\n                    }\n\n                    /**\n                     * @private\n                     * @param {TODO} pageType  TODO\n                     * @returns {TODO} TODO\n                     */\n                }, {\n                    key: 'getByType',\n                    value: function getByType(pageType) {\n                        for (var i = 0, ii = this._views.length; i < ii; i++) {\n                            if (this._views[i].pageType === pageType) {\n                                return this._views[i];\n                            }\n                        }\n                        return null;\n                    }\n\n                    /**\n                     * @private\n                     * @param {TODO} view  TODO\n                     * @returns {TODO} TODO\n                     */\n                }, {\n                    key: 'getPrevious',\n                    value: function getPrevious(viewCtrl) {\n                        if (viewCtrl) {\n                            var viewIndex = this._views.indexOf(viewCtrl);\n                            for (var i = viewIndex - 1; i >= 0; i--) {\n                                if (!this._views[i].shouldDestroy) {\n                                    return this._views[i];\n                                }\n                            }\n                        }\n                        return null;\n                    }\n\n                    /**\n                     * First page in this nav controller's stack. This would not return a page which is about to be destroyed.\n                     * @returns {Component} Returns the first component page in the current stack\n                     */\n                }, {\n                    key: 'first',\n                    value: function first() {\n                        for (var i = 0, l = this._views.length; i < l; i++) {\n                            if (!this._views[i].shouldDestroy) {\n                                return this._views[i];\n                            }\n                        }\n                        return null;\n                    }\n\n                    /**\n                     * Last page in this nav controller's stack. This would not return a page which is about to be destroyed.\n                     * @returns {Component} Returns the last component page in the current stack\n                     */\n                }, {\n                    key: 'last',\n                    value: function last() {\n                        for (var i = this._views.length - 1; i >= 0; i--) {\n                            if (!this._views[i].shouldDestroy) {\n                                return this._views[i];\n                            }\n                        }\n                        return null;\n                    }\n\n                    /**\n                     * @private\n                     * @param {TODO} view  TODO\n                     * @returns {TODO} TODO\n                     */\n                }, {\n                    key: 'indexOf',\n                    value: function indexOf(viewCtrl) {\n                        return this._views.indexOf(viewCtrl);\n                    }\n\n                    /**\n                     * Number of sibling views in the nav controller. This does\n                     * not include views which are about to be destroyed.\n                     * @returns {Number} The number of views in stack, including the current view\n                     */\n                }, {\n                    key: 'length',\n                    value: function length() {\n                        var len = 0;\n                        for (var i = 0, l = this._views.length; i < l; i++) {\n                            if (!this._views[i].shouldDestroy) {\n                                len++;\n                            }\n                        }\n                        return len;\n                    }\n\n                    /**\n                     * @private\n                     * IS RETURNING UNDEFIND\n                     * @param {TODO} view  TODO\n                     * @returns {TODO} TODO\n                     */\n                }, {\n                    key: 'isActive',\n                    value: function isActive(viewCtrl) {\n                        return viewCtrl && viewCtrl.state === ACTIVE_STATE;\n                    }\n\n                    /**\n                     * @private\n                     * @param {TODO} router  TODO\n                     */\n                }, {\n                    key: 'registerRouter',\n                    value: function registerRouter(router) {\n                        this.router = router;\n                    }\n                }]);\n\n                return NavController;\n            })(Ion);\n\n            _export('NavController', NavController);\n\n            ACTIVE_STATE = 1;\n            CACHED_STATE = 2;\n            STAGED_ENTERING_STATE = 3;\n            STAGED_LEAVING_STATE = 4;\n            ctrlIds = -1;\n\n            /**\n             * @name NavParams\n             * @description\n             * NavParams are an object that exists on a page and can contain data for that particular view.\n             * Similar to how data was pass to a view in V1 with `$stateParams`, NavParams offer a much more flexible\n             * option with a simple `get` method.\n             *\n             * @usage\n             * ```ts\n             * export class MyClass{\n             *  constructor(params: NavParams){\n             *    this.params = params;\n             *    // userParams is an object we have in our nav-parameters\n             *    this.params.get('userParams');\n             *  }\n             * }\n             * ```\n             * @demo /docs/demos/nav-params/\n             * @see {@link /docs/components#navigation Navigation Component Docs}\n             * @see {@link ../NavController/ NavController API Docs}\n             * @see {@link ../Nav/ Nav API Docs}\n             * @see {@link ../NavPush/ NavPush API Docs}\n             */\n\n            NavParams = (function () {\n                /**\n                 * @private\n                 * @param {TODO} data  TODO\n                 */\n\n                function NavParams(data) {\n                    _classCallCheck(this, NavParams);\n\n                    this.data = data || {};\n                }\n\n                /**\n                 * Get the value of a nav-parameter for the current view\n                 *\n                 * ```ts\n                 * export class MyClass{\n                 *  constructor(params: NavParams){\n                 *    this.params = params;\n                 *    // userParams is an object we have in our nav-parameters\n                 *    this.params.get('userParams');\n                 *  }\n                 * }\n                 * ```\n                 *\n                 *\n                 * @param {string} parameter Which param you want to look up\n                 */\n\n                _createClass(NavParams, [{\n                    key: 'get',\n                    value: function get(param) {\n                        return this.data[param];\n                    }\n                }]);\n\n                return NavParams;\n            })();\n\n            _export('NavParams', NavParams);\n        }\n    };\n});\nSystem.register(\"ionic/components/nav/nav-push\", [\"angular2/angular2\", \"./nav-controller\", \"./nav-registry\"], function (_export) {\n    /**\n     * Directive for declaratively linking to a new page instead of using\n     * [NavController.push()](../NavController/#push). Similar to ui-router's `ui-sref`.\n     *\n     * Basic usage:\n     * ```html\n     * <button [nav-push]=\"pushPage\"></button>\n     * ```\n     * To specify parameters you can use array syntax or the `nav-params` property:\n     * ```html\n     * <button [nav-push]=\"pushPage\" [nav-params]=\"params\"></button>\n     * ```\n     * Where `pushPage` and `params` are specified in your component, and `pushPage`\n     * contains a reference to a [@Page component](../../../config/Page/):\n     *\n     * ```ts\n     * import {LoginPage} from 'login';\n     * @Page({\n     *   template: `<button [nav-push]=\"pushPage\" [nav-params]=\"params\"></button>`\n     * })\n     * class MyPage {\n     *   constructor(){\n     *     this.pushPage = LoginPage;\n     *     this.params = { id: 42 };\n     *   }\n     * }\n     * ```\n     *\n     * ### Alternate syntax\n     * You can also use syntax similar to Angular2's router, passing an array to\n     * NavPush:\n     * ```html\n     * <button [nav-push]=\"[pushPage, params]\"></button>\n     * ```\n     * @demo /docs/demos/nav-push-pop/\n     * @see {@link /docs/components#navigation Navigation Component Docs}\n     * @see {@link ../NavPop NavPop API Docs}\n     */\n    \"use strict\";\n\n    var Directive, Optional, NavController, NavRegistry, __decorate, __metadata, __param, NavPush, NavPop, _a, _b, _c;\n\n    var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();\n\n    function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n    return {\n        setters: [function (_angular2Angular2) {\n            Directive = _angular2Angular2.Directive;\n            Optional = _angular2Angular2.Optional;\n        }, function (_navController) {\n            NavController = _navController.NavController;\n        }, function (_navRegistry) {\n            NavRegistry = _navRegistry.NavRegistry;\n        }],\n        execute: function () {\n            __decorate = undefined && undefined.__decorate || function (decorators, target, key, desc) {\n                if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") return Reflect.decorate(decorators, target, key, desc);\n                switch (arguments.length) {\n                    case 2:\n                        return decorators.reduceRight(function (o, d) {\n                            return d && d(o) || o;\n                        }, target);\n                    case 3:\n                        return decorators.reduceRight(function (o, d) {\n                            return d && d(target, key), void 0;\n                        }, void 0);\n                    case 4:\n                        return decorators.reduceRight(function (o, d) {\n                            return d && d(target, key, o) || o;\n                        }, desc);\n                }\n            };\n\n            __metadata = undefined && undefined.__metadata || function (k, v) {\n                if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n            };\n\n            __param = undefined && undefined.__param || function (paramIndex, decorator) {\n                return function (target, key) {\n                    decorator(target, key, paramIndex);\n                };\n            };\n\n            NavPush = (function () {\n                /**\n                 * TODO\n                 * @param {NavController} nav  TODO\n                 */\n\n                function NavPush(nav, registry) {\n                    _classCallCheck(this, NavPush);\n\n                    this.nav = nav;\n                    this.registry = registry;\n                    if (!nav) {\n                        console.error('nav-push must be within a NavController');\n                    }\n                }\n\n                _createClass(NavPush, [{\n                    key: \"onClick\",\n                    value: function onClick() {\n                        var destination = undefined,\n                            params = undefined;\n                        if (this.instruction instanceof Array) {\n                            if (this.instruction.length > 2) {\n                                throw 'Too many [nav-push] arguments, expects [View, { params }]';\n                            }\n                            destination = this.instruction[0];\n                            params = this.instruction[1] || this.params;\n                        } else {\n                            destination = this.instruction;\n                            params = this.params;\n                        }\n                        if (typeof destination === \"string\") {\n                            destination = this.registry.get(destination);\n                        }\n                        this.nav && this.nav.push(destination, params);\n                    }\n                }]);\n\n                return NavPush;\n            })();\n\n            _export(\"NavPush\", NavPush);\n\n            _export(\"NavPush\", NavPush = __decorate([Directive({\n                selector: '[nav-push]',\n                inputs: ['instruction: navPush', 'params: navParams'],\n                host: {\n                    '(click)': 'onClick()',\n                    'role': 'link'\n                }\n            }), __param(0, Optional()), __metadata('design:paramtypes', [typeof (_a = typeof NavController !== 'undefined' && NavController) === 'function' && _a || Object, typeof (_b = typeof NavRegistry !== 'undefined' && NavRegistry) === 'function' && _b || Object])], NavPush));\n            /**\n             * TODO\n             * @demo /docs/demos/nav-push-pop/\n             * @see {@link /docs/components#navigation Navigation Component Docs}\n             * @see {@link ../NavPush NavPush API Docs}\n             */\n\n            NavPop = (function () {\n                /**\n                 * TODO\n                 * @param {NavController} nav  TODO\n                 */\n\n                function NavPop(nav) {\n                    _classCallCheck(this, NavPop);\n\n                    this.nav = nav;\n                    if (!nav) {\n                        console.error('nav-pop must be within a NavController');\n                    }\n                }\n\n                _createClass(NavPop, [{\n                    key: \"onClick\",\n                    value: function onClick() {\n                        this.nav && this.nav.pop();\n                    }\n                }]);\n\n                return NavPop;\n            })();\n\n            _export(\"NavPop\", NavPop);\n\n            _export(\"NavPop\", NavPop = __decorate([Directive({\n                selector: '[nav-pop]',\n                host: {\n                    '(click)': 'onClick()',\n                    'role': 'link'\n                }\n            }), __param(0, Optional()), __metadata('design:paramtypes', [typeof (_c = typeof NavController !== 'undefined' && NavController) === 'function' && _c || Object])], NavPop));\n        }\n    };\n});\nSystem.register(\"ionic/components/nav/nav-registry\", [], function (_export) {\n    /**\n     * @private\n     * Map of possible pages that can be navigated to using an Ionic NavController\n     */\n    \"use strict\";\n\n    var NavRegistry;\n\n    var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();\n\n    function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n    return {\n        setters: [],\n        execute: function () {\n            NavRegistry = (function () {\n                function NavRegistry() {\n                    var pages = arguments.length <= 0 || arguments[0] === undefined ? [] : arguments[0];\n\n                    _classCallCheck(this, NavRegistry);\n\n                    this._pages = new Map(pages.map(function (page) {\n                        return [page.name, page];\n                    }));\n                }\n\n                _createClass(NavRegistry, [{\n                    key: \"get\",\n                    value: function get(pageName) {\n                        return this._pages.get(pageName);\n                    }\n                }, {\n                    key: \"set\",\n                    value: function set(page) {\n                        this._pages.set(page.name, page);\n                    }\n                }]);\n\n                return NavRegistry;\n            })();\n\n            _export(\"NavRegistry\", NavRegistry);\n        }\n    };\n});\nSystem.register(\"ionic/components/nav/nav-router\", [\"angular2/angular2\", \"angular2/router\", \"./nav\"], function (_export) {\n    /**\n     * TODO\n     */\n    \"use strict\";\n\n    var Directive, ElementRef, DynamicComponentLoader, Attribute, RouterOutlet, Router, Instruction, Nav, __decorate, __metadata, __param, NavRouter, _a, _b, _c, _d;\n\n    var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();\n\n    var _get = function get(_x, _x2, _x3) { var _again = true; _function: while (_again) { var object = _x, property = _x2, receiver = _x3; _again = false; if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { _x = parent; _x2 = property; _x3 = receiver; _again = true; desc = parent = undefined; continue _function; } } else if (\"value\" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } } };\n\n    function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n    function _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\n    return {\n        setters: [function (_angular2Angular2) {\n            Directive = _angular2Angular2.Directive;\n            ElementRef = _angular2Angular2.ElementRef;\n            DynamicComponentLoader = _angular2Angular2.DynamicComponentLoader;\n            Attribute = _angular2Angular2.Attribute;\n        }, function (_angular2Router) {\n            RouterOutlet = _angular2Router.RouterOutlet;\n            Router = _angular2Router.Router;\n            Instruction = _angular2Router.Instruction;\n        }, function (_nav) {\n            Nav = _nav.Nav;\n        }],\n        execute: function () {\n            __decorate = undefined && undefined.__decorate || function (decorators, target, key, desc) {\n                if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") return Reflect.decorate(decorators, target, key, desc);\n                switch (arguments.length) {\n                    case 2:\n                        return decorators.reduceRight(function (o, d) {\n                            return d && d(o) || o;\n                        }, target);\n                    case 3:\n                        return decorators.reduceRight(function (o, d) {\n                            return d && d(target, key), void 0;\n                        }, void 0);\n                    case 4:\n                        return decorators.reduceRight(function (o, d) {\n                            return d && d(target, key, o) || o;\n                        }, desc);\n                }\n            };\n\n            __metadata = undefined && undefined.__metadata || function (k, v) {\n                if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n            };\n\n            __param = undefined && undefined.__param || function (paramIndex, decorator) {\n                return function (target, key) {\n                    decorator(target, key, paramIndex);\n                };\n            };\n\n            NavRouter = (function (_RouterOutlet) {\n                _inherits(NavRouter, _RouterOutlet);\n\n                /**\n                 * TODO\n                 * @param {ElementRef} _elementRef  TODO\n                 * @param {DynamicComponentLoader} _loader  TODO\n                 * @param {Router} _parentRouter  TODO\n                 * @param {string} nameAttr  Value of the element's 'name' attribute\n                 * @param {Nav} nav  TODO\n                 */\n\n                function NavRouter(_elementRef, _loader, _parentRouter, nameAttr, nav) {\n                    _classCallCheck(this, NavRouter);\n\n                    _get(Object.getPrototypeOf(NavRouter.prototype), \"constructor\", this).call(this, _elementRef, _loader, _parentRouter, nameAttr);\n                    // Nav is Ionic's NavController, which we injected into this class\n                    this.nav = nav;\n                    // register this router with Ionic's NavController\n                    // Ionic's NavController will call this NavRouter's \"stateChange\"\n                    // method when the NavController has...changed its state\n                    nav.registerRouter(this);\n                }\n\n                /**\n                 * @private\n                 * TODO\n                 * @param {ComponentInstruction} instruction  TODO\n                 */\n\n                _createClass(NavRouter, [{\n                    key: \"activate\",\n                    value: function activate(nextInstruction) {\n                        var previousInstruction = this._currentInstruction;\n                        this._currentInstruction = nextInstruction;\n                        var componentType = nextInstruction.componentType;\n                        var childRouter = this._parentRouter.childRouter(componentType);\n                        // prevent double navigations to the same view\n                        var lastView = this.nav.last();\n                        if (this.nav.isTransitioning() || lastView && lastView.componentType === componentType && lastView.params.data === nextInstruction.params) {\n                            return Promise.resolve();\n                        }\n                        // tell the NavController which componentType, and it's params, to navigate to\n                        return this.nav.push(componentType, nextInstruction.params);\n                    }\n                }, {\n                    key: \"reuse\",\n                    value: function reuse(nextInstruction) {\n                        return Promise.resolve();\n                    }\n\n                    /**\n                     * TODO\n                     * @param {TODO} type  TODO\n                     * @param {TODO} viewCtrl  TODO\n                     */\n                }, {\n                    key: \"stateChange\",\n                    value: function stateChange(type, viewCtrl) {\n                        // stateChange is called by Ionic's NavController\n                        // type could be \"push\" or \"pop\"\n                        // viewCtrl is Ionic's ViewController class, which has the properties \"componentType\" and \"params\"\n                        // only do an update if there's an actual view change\n                        if (!viewCtrl || this._activeViewId === viewCtrl.id) return;\n                        this._activeViewId = viewCtrl.id;\n                        // get the best PathRecognizer for this view's componentType\n                        var pathRecognizer = this.getPathRecognizerByComponent(viewCtrl.componentType);\n                        if (pathRecognizer) {\n                            // generate a componentInstruction from the view's PathRecognizer and params\n                            var componentInstruction = pathRecognizer.generate(viewCtrl.params.data);\n                            // create an Instruction from the componentInstruction\n                            var instruction = new Instruction(componentInstruction, null);\n                            this._parentRouter.navigateByInstruction(instruction);\n                        }\n                    }\n\n                    /**\n                     * TODO\n                     * @param {TODO} componentType  TODO\n                     * @returns {TODO} TODO\n                     */\n                }, {\n                    key: \"getPathRecognizerByComponent\",\n                    value: function getPathRecognizerByComponent(componentType) {\n                        // given a componentType, figure out the best PathRecognizer to use\n                        var rules = this._parentRouter.registry._rules;\n                        var pathRecognizer = null;\n                        rules.forEach(function (rule) {\n                            pathRecognizer = rule.matchers.find(function (matcherPathRecognizer) {\n                                return matcherPathRecognizer.handler.componentType === componentType;\n                            });\n                        });\n                        return pathRecognizer;\n                    }\n                }]);\n\n                return NavRouter;\n            })(RouterOutlet);\n\n            _export(\"NavRouter\", NavRouter);\n\n            _export(\"NavRouter\", NavRouter = __decorate([Directive({\n                selector: 'ion-nav'\n            }), __param(3, Attribute('name')), __metadata('design:paramtypes', [typeof (_a = typeof ElementRef !== 'undefined' && ElementRef) === 'function' && _a || Object, typeof (_b = typeof DynamicComponentLoader !== 'undefined' && DynamicComponentLoader) === 'function' && _b || Object, typeof (_c = typeof Router !== 'undefined' && Router) === 'function' && _c || Object, String, typeof (_d = typeof Nav !== 'undefined' && Nav) === 'function' && _d || Object])], NavRouter));\n        }\n    };\n});\nSystem.register(\"ionic/components/nav/nav\", [\"angular2/angular2\", \"../app/app\", \"../../config/config\", \"../../util/keyboard\", \"../../config/decorators\", \"./nav-controller\", \"./view-controller\"], function (_export) {\n    /**\n     * _For a quick walkthrough of navigation in Ionic, check out the\n     * [Navigation section](../../../../components/#navigation) of the Component\n     * docs._\n     *\n     * Nav is a basic navigation controller component.  As a subclass of NavController\n     * you use it to navigate to pages in your app and manipulate the navigation stack.\n     * Nav automatically animates transitions between pages for you.\n     *\n     * For more information on using navigation controllers like Nav or [Tab](../../Tabs/Tab/),\n     * take a look at the [NavController API reference](../NavController/).\n     *\n     * You must set a root page (where page is any [@Page](../../config/Page/)\n     * component) to be loaded initially by any Nav you create, using\n     * the 'root' property:\n     *\n     * ```ts\n     * import {GettingStartedPage} from 'getting-started';\n     * @App({\n     *   template: `<ion-nav [root]=\"rootPage\"></ion-nav>`\n     * })\n     * class MyApp {\n     *   constructor(){\n     *     this.rootPage = GettingStartedPage;\n     *   }\n     * }\n     * ```\n     *\n     * <h2 id=\"back_navigation\">Back navigation</h2>\n     * If a [page](../NavController/#creating_pages) you navigate to has a [NavBar](../NavBar/),\n     * Nav will automatically add a back button to it if there is a page\n     * before the one you are navigating to in the navigation stack.\n     *\n     * Additionally, specifying the `swipe-back-enabled` property will allow you to\n     * swipe to go back:\n     * ```html\n     * <ion-nav swipe-back-enabled=\"false\" [root]=\"rootPage\"></ion-nav>\n     * ```\n     *\n     * Here is a diagram of how Nav animates smoothly between pages:\n     *\n     * <div class=\"highlight less-margin\">\n     *   <pre>\n     *                           +-------+\n     *                           |  App  |\n     *                           +---+---+\n     *                           &lt;ion-app&gt;\n     *                               |\n     *                  +------------+-------------+\n     *                  |   Ionic Nav Controller   |\n     *                  +------------+-------------+\n     *                           &lt;ion-nav&gt;\n     *                               |\n     *                               |\n     *             Page 3  +--------------------+                     LoginPage\n     *           Page 2  +--------------------+ |\n     *         Page 1  +--------------------+ | |              +--------------------+\n     *                 | | Header           |&lt;-----------------|       Login        |\n     *                 +--------------------+ | |              +--------------------+\n     *                 | | |                | | |              | Username:          |\n     *                 | | |                | | |              | Password:          |\n     *                 | | |  Page 3 is     | | |              |                    |\n     *                 | | |  only content  | | |              |                    |\n     *                 | | |                |&lt;-----------------|                    |\n     *                 | | |                | | |              |                    |\n     *                 | | |                | | |              |                    |\n     *                 | +------------------|-+ |              |                    |\n     *                 | | Footer           |-|-+              |                    |\n     *                 | +------------------|-+                |                    |\n     *                 +--------------------+                  +--------------------+\n     *\n     *           +--------------------+    +--------------------+    +--------------------+\n     *           | Header             |    | Content            |    | Content            |\n     *           +--------------------+    |                    |    |                    |\n     *           | Content            |    |                    |    |                    |\n     *           |                    |    |                    |    |                    |\n     *           |                    |    |                    |    |                    |\n     *           |                    |    |                    |    |                    |\n     *           |                    |    |                    |    |                    |\n     *           |                    |    |                    |    |                    |\n     *           |                    |    |                    |    |                    |\n     *           |                    |    |                    |    |                    |\n     *           |                    |    +--------------------+    |                    |\n     *           |                    |    | Footer             |    |                    |\n     *           +--------------------+    +--------------------+    +--------------------+\n     *\n     *   </pre>\n     * </div>\n     *\n     * @see {@link /docs/components#navigation Navigation Component Docs}\n     */\n    \"use strict\";\n\n    var ChangeDetectorRef, ElementRef, Optional, NgZone, Compiler, AppViewManager, Renderer, IonicApp, Config, Keyboard, ConfigComponent, NavController, ViewController, __decorate, __metadata, __param, Nav, _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l;\n\n    var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();\n\n    var _get = function get(_x, _x2, _x3) { var _again = true; _function: while (_again) { var object = _x, property = _x2, receiver = _x3; _again = false; if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { _x = parent; _x2 = property; _x3 = receiver; _again = true; desc = parent = undefined; continue _function; } } else if (\"value\" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } } };\n\n    function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n    function _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\n    return {\n        setters: [function (_angular2Angular2) {\n            ChangeDetectorRef = _angular2Angular2.ChangeDetectorRef;\n            ElementRef = _angular2Angular2.ElementRef;\n            Optional = _angular2Angular2.Optional;\n            NgZone = _angular2Angular2.NgZone;\n            Compiler = _angular2Angular2.Compiler;\n            AppViewManager = _angular2Angular2.AppViewManager;\n            Renderer = _angular2Angular2.Renderer;\n        }, function (_appApp) {\n            IonicApp = _appApp.IonicApp;\n        }, function (_configConfig) {\n            Config = _configConfig.Config;\n        }, function (_utilKeyboard) {\n            Keyboard = _utilKeyboard.Keyboard;\n        }, function (_configDecorators) {\n            ConfigComponent = _configDecorators.ConfigComponent;\n        }, function (_navController) {\n            NavController = _navController.NavController;\n        }, function (_viewController) {\n            ViewController = _viewController.ViewController;\n        }],\n        execute: function () {\n            __decorate = undefined && undefined.__decorate || function (decorators, target, key, desc) {\n                if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") return Reflect.decorate(decorators, target, key, desc);\n                switch (arguments.length) {\n                    case 2:\n                        return decorators.reduceRight(function (o, d) {\n                            return d && d(o) || o;\n                        }, target);\n                    case 3:\n                        return decorators.reduceRight(function (o, d) {\n                            return d && d(target, key), void 0;\n                        }, void 0);\n                    case 4:\n                        return decorators.reduceRight(function (o, d) {\n                            return d && d(target, key, o) || o;\n                        }, desc);\n                }\n            };\n\n            __metadata = undefined && undefined.__metadata || function (k, v) {\n                if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n            };\n\n            __param = undefined && undefined.__param || function (paramIndex, decorator) {\n                return function (target, key) {\n                    decorator(target, key, paramIndex);\n                };\n            };\n\n            Nav = (function (_NavController) {\n                _inherits(Nav, _NavController);\n\n                function Nav(hostNavCtrl, viewCtrl, app, config, keyboard, elementRef, compiler, viewManager, zone, renderer, cd) {\n                    _classCallCheck(this, Nav);\n\n                    _get(Object.getPrototypeOf(Nav.prototype), \"constructor\", this).call(this, hostNavCtrl, app, config, keyboard, elementRef, 'contents', compiler, viewManager, zone, renderer, cd);\n                    if (viewCtrl) {\n                        // an ion-nav can also act as an ion-page within a parent ion-nav\n                        // this would happen when an ion-nav nests a child ion-nav.\n                        viewCtrl.setContent(this);\n                        viewCtrl.setContentRef(elementRef);\n                    }\n                }\n\n                /**\n                 * @private\n                 */\n\n                _createClass(Nav, [{\n                    key: \"onInit\",\n                    value: function onInit() {\n                        _get(Object.getPrototypeOf(Nav.prototype), \"onInit\", this).call(this);\n                        if (this.root) {\n                            if (typeof this.root !== 'function') {\n                                throw 'The [root] property in <ion-nav> must be given a reference to a component class from within the constructor.';\n                            }\n                            this.push(this.root);\n                        }\n                        // default the swipe back to be enabled\n                        this.isSwipeBackEnabled((this.swipeBackEnabled || '').toString() !== 'false');\n                    }\n                }]);\n\n                return Nav;\n            })(NavController);\n\n            _export(\"Nav\", Nav);\n\n            _export(\"Nav\", Nav = __decorate([ConfigComponent({\n                selector: 'ion-nav',\n                inputs: ['root'],\n                defaultInputs: {\n                    'swipeBackEnabled': true\n                },\n                template: '<template #contents></template>'\n            }), __param(0, Optional()), __param(1, Optional()), __metadata('design:paramtypes', [typeof (_a = typeof NavController !== 'undefined' && NavController) === 'function' && _a || Object, typeof (_b = typeof ViewController !== 'undefined' && ViewController) === 'function' && _b || Object, typeof (_c = typeof IonicApp !== 'undefined' && IonicApp) === 'function' && _c || Object, typeof (_d = typeof Config !== 'undefined' && Config) === 'function' && _d || Object, typeof (_e = typeof Keyboard !== 'undefined' && Keyboard) === 'function' && _e || Object, typeof (_f = typeof ElementRef !== 'undefined' && ElementRef) === 'function' && _f || Object, typeof (_g = typeof Compiler !== 'undefined' && Compiler) === 'function' && _g || Object, typeof (_h = typeof AppViewManager !== 'undefined' && AppViewManager) === 'function' && _h || Object, typeof (_j = typeof NgZone !== 'undefined' && NgZone) === 'function' && _j || Object, typeof (_k = typeof Renderer !== 'undefined' && Renderer) === 'function' && _k || Object, typeof (_l = typeof ChangeDetectorRef !== 'undefined' && ChangeDetectorRef) === 'function' && _l || Object])], Nav));\n        }\n    };\n});\nSystem.register('ionic/components/nav/swipe-back', ['ionic/gestures/slide-edge-gesture'], function (_export) {\n    'use strict';\n\n    var SlideEdgeGesture, SwipeBackGesture;\n\n    var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();\n\n    var _get = function get(_x, _x2, _x3) { var _again = true; _function: while (_again) { var object = _x, property = _x2, receiver = _x3; _again = false; if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { _x = parent; _x2 = property; _x3 = receiver; _again = true; desc = parent = undefined; continue _function; } } else if ('value' in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } } };\n\n    function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\n    function _inherits(subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\n    return {\n        setters: [function (_ionicGesturesSlideEdgeGesture) {\n            SlideEdgeGesture = _ionicGesturesSlideEdgeGesture.SlideEdgeGesture;\n        }],\n        execute: function () {\n            SwipeBackGesture = (function (_SlideEdgeGesture) {\n                _inherits(SwipeBackGesture, _SlideEdgeGesture);\n\n                function SwipeBackGesture(element, opts, navCtrl) {\n                    if (opts === undefined) opts = {};\n\n                    _classCallCheck(this, SwipeBackGesture);\n\n                    _get(Object.getPrototypeOf(SwipeBackGesture.prototype), 'constructor', this).call(this, element, opts);\n                    // Can check corners through use of eg 'left top'\n                    this.edges = opts.edge.split(' ');\n                    this.threshold = opts.threshold;\n                    this.navCtrl = navCtrl;\n                }\n\n                _createClass(SwipeBackGesture, [{\n                    key: 'onSlideStart',\n                    value: function onSlideStart() {\n                        this.navCtrl.swipeBackStart();\n                    }\n                }, {\n                    key: 'onSlide',\n                    value: function onSlide(slide, ev) {\n                        this.navCtrl.swipeBackProgress(slide.distance / slide.max);\n                    }\n                }, {\n                    key: 'onSlideEnd',\n                    value: function onSlideEnd(slide, ev) {\n                        var shouldComplete = Math.abs(ev.velocityX) > 0.2 || Math.abs(slide.delta) > Math.abs(slide.max) * 0.5;\n                        // TODO: calculate a better playback rate depending on velocity and distance\n                        this.navCtrl.swipeBackEnd(shouldComplete, 1);\n                    }\n                }]);\n\n                return SwipeBackGesture;\n            })(SlideEdgeGesture);\n\n            _export('SwipeBackGesture', SwipeBackGesture);\n        }\n    };\n});\nSystem.register('ionic/components/nav/view-controller', ['./nav-controller'], function (_export) {\n    /**\n     * @name ViewController\n     * @description\n     * Access various features and information about the current view\n     * @usage\n     *  ```ts\n     *  import {Page, ViewController} from 'ionic/ionic';\n     *  @Page....\n     *  export class MyPage{\n     *   constructor(viewCtrl: ViewController){\n     *     this.viewCtrl = viewCtrl;\n     *   }\n     *  }\n     *  ```\n     */\n    'use strict';\n\n    var NavParams, ViewController;\n\n    var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();\n\n    function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\n    function ctrlFn(viewCtrl, fnName) {\n        if (viewCtrl.instance && viewCtrl.instance[fnName]) {\n            try {\n                viewCtrl.instance[fnName]();\n            } catch (e) {\n                console.error(fnName + ': ' + e.message);\n            }\n        }\n    }\n    return {\n        setters: [function (_navController) {\n            NavParams = _navController.NavParams;\n        }],\n        execute: function () {\n            ViewController = (function () {\n                function ViewController(navCtrl, componentType) {\n                    var params = arguments.length <= 2 || arguments[2] === undefined ? {} : arguments[2];\n\n                    _classCallCheck(this, ViewController);\n\n                    this.navCtrl = navCtrl;\n                    this.componentType = componentType;\n                    this.params = new NavParams(params);\n                    this.instance = {};\n                    this.state = 0;\n                    this._destroys = [];\n                    this._loaded = false;\n                }\n\n                /**\n                 * Check to see if you can go back in the navigation stack\n                 * @param {boolean} Check whether or not you can go back from this page\n                 * @returns {boolean} Returns if it's possible to go back from this Page.\n                 */\n\n                _createClass(ViewController, [{\n                    key: 'enableBack',\n                    value: function enableBack() {\n                        // update if it's possible to go back from this nav item\n                        if (this.navCtrl) {\n                            var previousItem = this.navCtrl.getPrevious(this);\n                            // the previous view may exist, but if it's about to be destroyed\n                            // it shouldn't be able to go back to\n                            return !!(previousItem && !previousItem.shouldDestroy);\n                        }\n                        return false;\n                    }\n\n                    /**\n                     * @private\n                     */\n                }, {\n                    key: 'setInstance',\n                    value: function setInstance(instance) {\n                        this.instance = instance;\n                    }\n\n                    /**\n                     * @private\n                     */\n                }, {\n                    key: 'isRoot',\n\n                    /**\n                     * @returns {boolean} Returns if this Page is the root page of the NavController.\n                     */\n                    value: function isRoot() {\n                        return this.index === 0;\n                    }\n\n                    /**\n                     * @private\n                     */\n                }, {\n                    key: 'addDestroy',\n                    value: function addDestroy(destroyFn) {\n                        this._destroys.push(destroyFn);\n                    }\n\n                    /**\n                     * @private\n                     */\n                }, {\n                    key: 'destroy',\n                    value: function destroy() {\n                        for (var i = 0; i < this._destroys.length; i++) {\n                            this._destroys[i]();\n                        }\n                        this._destroys = [];\n                    }\n\n                    /**\n                     * @private\n                     */\n                }, {\n                    key: 'setNavbarTemplateRef',\n                    value: function setNavbarTemplateRef(templateRef) {\n                        this._nbTmpRef = templateRef;\n                    }\n\n                    /**\n                     * @private\n                     */\n                }, {\n                    key: 'getNavbarTemplateRef',\n                    value: function getNavbarTemplateRef() {\n                        return this._nbTmpRef;\n                    }\n\n                    /**\n                     * @private\n                     */\n                }, {\n                    key: 'getNavbarViewRef',\n                    value: function getNavbarViewRef() {\n                        return this._nbVwRef;\n                    }\n\n                    /**\n                     * @private\n                     */\n                }, {\n                    key: 'setNavbarViewRef',\n                    value: function setNavbarViewRef(viewContainerRef) {\n                        this._nbVwRef = viewContainerRef;\n                    }\n\n                    /**\n                     * @private\n                     */\n                }, {\n                    key: 'setPageRef',\n                    value: function setPageRef(elementRef) {\n                        this._pgRef = elementRef;\n                    }\n\n                    /**\n                     * @private\n                     * @returns {ElementRef} Returns the Page's ElementRef\n                     */\n                }, {\n                    key: 'pageRef',\n                    value: function pageRef() {\n                        return this._pgRef;\n                    }\n\n                    /**\n                     * @private\n                     */\n                }, {\n                    key: 'setContentRef',\n                    value: function setContentRef(elementRef) {\n                        this._cntRef = elementRef;\n                    }\n\n                    /**\n                     * @private\n                     * @returns {ElementRef} Returns the Page's Content ElementRef\n                     */\n                }, {\n                    key: 'contentRef',\n                    value: function contentRef() {\n                        return this._cntRef;\n                    }\n\n                    /**\n                     * @private\n                     */\n                }, {\n                    key: 'setContent',\n                    value: function setContent(directive) {\n                        this._cntDir = directive;\n                    }\n\n                    /**\n                     * @private\n                     * @returns {Component} Returns the Page's Content component reference.\n                     */\n                }, {\n                    key: 'getContent',\n                    value: function getContent() {\n                        return this._cntDir;\n                    }\n\n                    /**\n                     * @private\n                     */\n                }, {\n                    key: 'setNavbar',\n                    value: function setNavbar(directive) {\n                        this._nbDir = directive;\n                    }\n\n                    /**\n                     * @private\n                     */\n                }, {\n                    key: 'getNavbar',\n                    value: function getNavbar() {\n                        return this._nbDir;\n                    }\n\n                    /**\n                     * You can find out of the current view has a Navbar or not. Be sure to wrap this in an `onPageWillEnter` method in order to make sure the view has rendered fully.\n                     *\n                     * ```typescript\n                     * export class Page1 {\n                     *  constructor(view: ViewController) {\n                     *    this.view = view\n                     *  }\n                     *  onPageWillEnter(){\n                     *    console.log('Do we have a Navbar?', this.view.hasNavbar());\n                     *  }\n                     *}\n                     * ```\n                     *\n                     * @returns {boolean} Returns a boolean if this Page has a navbar or not.\n                     */\n                }, {\n                    key: 'hasNavbar',\n                    value: function hasNavbar() {\n                        return !!this.getNavbar();\n                    }\n\n                    /**\n                     * @private\n                     */\n                }, {\n                    key: 'navbarRef',\n                    value: function navbarRef() {\n                        var navbar = this.getNavbar();\n                        return navbar && navbar.getElementRef();\n                    }\n\n                    /**\n                     * @private\n                     */\n                }, {\n                    key: 'titleRef',\n                    value: function titleRef() {\n                        var navbar = this.getNavbar();\n                        return navbar && navbar.getTitleRef();\n                    }\n\n                    /**\n                     * @private\n                     */\n                }, {\n                    key: 'navbarItemRefs',\n                    value: function navbarItemRefs() {\n                        var navbar = this.getNavbar();\n                        return navbar && navbar.getItemRefs();\n                    }\n\n                    /**\n                     * @private\n                     */\n                }, {\n                    key: 'backBtnRef',\n                    value: function backBtnRef() {\n                        var navbar = this.getNavbar();\n                        return navbar && navbar.getBackButtonRef();\n                    }\n\n                    /**\n                     * @private\n                     */\n                }, {\n                    key: 'backBtnTextRef',\n                    value: function backBtnTextRef() {\n                        var navbar = this.getNavbar();\n                        return navbar && navbar.getBackButtonTextRef();\n                    }\n\n                    /**\n                     * @private\n                     */\n                }, {\n                    key: 'navbarBgRef',\n                    value: function navbarBgRef() {\n                        var navbar = this.getNavbar();\n                        return navbar && navbar.getBackgroundRef();\n                    }\n\n                    /**\n                     * You can change the text of the back button on a view-by-view basis.\n                     *\n                     * ```ts\n                     * export class MyClass{\n                     *  constructor(viewCtrl: ViewController){\n                     *    this.viewCtrl = viewCtrl\n                     *  }\n                     *  onPageWillEnter() {\n                     *    this.viewCtrl.setBackButtonText('Previous');\n                     *  }\n                     * }\n                     * ```\n                     * Make sure you use the view events when calling this method, otherwise the back-button will not have been created\n                     *\n                     * @param {string} backButtonText Set the back button text.\n                     */\n                }, {\n                    key: 'setBackButtonText',\n                    value: function setBackButtonText(val) {\n                        var navbar = this.getNavbar();\n                        if (navbar) {\n                            navbar.bbText = val;\n                        }\n                    }\n\n                    /**\n                     * Set if the back button for the current view is visible or not. Be sure to wrap this in `onPageWillEnter` to make sure the has been compleltly rendered.\n                     * @param {boolean} Set if this Page's back button should show or not.\n                     */\n                }, {\n                    key: 'showBackButton',\n                    value: function showBackButton(shouldShow) {\n                        var navbar = this.getNavbar();\n                        if (navbar) {\n                            navbar.hideBackButton = !shouldShow;\n                        }\n                    }\n\n                    /**\n                     * @private\n                     */\n                }, {\n                    key: 'isLoaded',\n                    value: function isLoaded() {\n                        return this._loaded;\n                    }\n\n                    /**\n                     * @private\n                     * The view has loaded. This event only happens once per view being\n                     * created. If a view leaves but is cached, then this will not\n                     * fire again on a subsequent viewing. This method is a good place\n                     * to put your setup code for the view; however, it is not the\n                     * recommended method to use when a view becomes active.\n                     */\n                }, {\n                    key: 'loaded',\n                    value: function loaded() {\n                        this._loaded = true;\n                        if (!this.shouldDestroy) {\n                            ctrlFn(this, 'onPageLoaded');\n                        }\n                    }\n\n                    /**\n                     * @private\n                     * The view is about to enter and become the active view.\n                     */\n                }, {\n                    key: 'willEnter',\n                    value: function willEnter() {\n                        if (!this.shouldDestroy) {\n                            ctrlFn(this, 'onPageWillEnter');\n                        }\n                    }\n\n                    /**\n                     * @private\n                     * The view has fully entered and is now the active view. This\n                     * will fire, whether it was the first load or loaded from the cache.\n                     */\n                }, {\n                    key: 'didEnter',\n                    value: function didEnter() {\n                        var navbar = this.getNavbar();\n                        navbar && navbar.didEnter();\n                        ctrlFn(this, 'onPageDidEnter');\n                    }\n\n                    /**\n                     * @private\n                     * The view has is about to leave and no longer be the active view.\n                     */\n                }, {\n                    key: 'willLeave',\n                    value: function willLeave() {\n                        ctrlFn(this, 'onPageWillLeave');\n                    }\n\n                    /**\n                     * @private\n                     * The view has finished leaving and is no longer the active view. This\n                     * will fire, whether it is cached or unloaded.\n                     */\n                }, {\n                    key: 'didLeave',\n                    value: function didLeave() {\n                        ctrlFn(this, 'onPageDidLeave');\n                    }\n\n                    /**\n                     * @private\n                     * The view is about to be destroyed and have its elements removed.\n                     */\n                }, {\n                    key: 'willUnload',\n                    value: function willUnload() {\n                        ctrlFn(this, 'onPageWillUnload');\n                    }\n\n                    /**\n                     * @private\n                     * The view has been destroyed and its elements have been removed.\n                     */\n                }, {\n                    key: 'didUnload',\n                    value: function didUnload() {\n                        ctrlFn(this, 'onPageDidUnload');\n                    }\n                }, {\n                    key: 'name',\n                    get: function get() {\n                        return this.componentType ? this.componentType.name : '';\n                    }\n\n                    /**\n                     * You can find out the index of the current view is in the current navigation stack\n                     *\n                     * ```typescript\n                     *  export class Page1 {\n                     *    constructor(view: ViewController){\n                     *      this.view = view;\n                     *      // Just log out the index\n                     *      console.log(this.view.index);\n                     *    }\n                     *  }\n                     * ```\n                     *\n                     * @returns {Number} Returns the index of this page within its NavController.\n                     */\n                }, {\n                    key: 'index',\n                    get: function get() {\n                        return this.navCtrl ? this.navCtrl.indexOf(this) : -1;\n                    }\n                }]);\n\n                return ViewController;\n            })();\n\n            _export('ViewController', ViewController);\n        }\n    };\n});\nSystem.register(\"ionic/components/navbar/navbar\", [\"angular2/angular2\", \"../ion\", \"../icon/icon\", \"../toolbar/toolbar\", \"../../config/config\", \"../app/app\", \"../nav/view-controller\", \"../nav/nav-controller\"], function (_export) {\n    \"use strict\";\n\n    var Component, Directive, Optional, ElementRef, Renderer, TemplateRef, forwardRef, Inject, ViewContainerRef, Ion, Icon, ToolbarBase, Config, IonicApp, ViewController, NavController, __decorate, __metadata, __param, BackButton, BackButtonText, ToolbarBackground, Navbar, NavbarTemplate, _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m;\n\n    var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();\n\n    var _get = function get(_x, _x2, _x3) { var _again = true; _function: while (_again) { var object = _x, property = _x2, receiver = _x3; _again = false; if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { _x = parent; _x2 = property; _x3 = receiver; _again = true; desc = parent = undefined; continue _function; } } else if (\"value\" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } } };\n\n    function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n    function _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\n    return {\n        setters: [function (_angular2Angular2) {\n            Component = _angular2Angular2.Component;\n            Directive = _angular2Angular2.Directive;\n            Optional = _angular2Angular2.Optional;\n            ElementRef = _angular2Angular2.ElementRef;\n            Renderer = _angular2Angular2.Renderer;\n            TemplateRef = _angular2Angular2.TemplateRef;\n            forwardRef = _angular2Angular2.forwardRef;\n            Inject = _angular2Angular2.Inject;\n            ViewContainerRef = _angular2Angular2.ViewContainerRef;\n        }, function (_ion) {\n            Ion = _ion.Ion;\n        }, function (_iconIcon) {\n            Icon = _iconIcon.Icon;\n        }, function (_toolbarToolbar) {\n            ToolbarBase = _toolbarToolbar.ToolbarBase;\n        }, function (_configConfig) {\n            Config = _configConfig.Config;\n        }, function (_appApp) {\n            IonicApp = _appApp.IonicApp;\n        }, function (_navViewController) {\n            ViewController = _navViewController.ViewController;\n        }, function (_navNavController) {\n            NavController = _navNavController.NavController;\n        }],\n        execute: function () {\n            __decorate = undefined && undefined.__decorate || function (decorators, target, key, desc) {\n                if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") return Reflect.decorate(decorators, target, key, desc);\n                switch (arguments.length) {\n                    case 2:\n                        return decorators.reduceRight(function (o, d) {\n                            return d && d(o) || o;\n                        }, target);\n                    case 3:\n                        return decorators.reduceRight(function (o, d) {\n                            return d && d(target, key), void 0;\n                        }, void 0);\n                    case 4:\n                        return decorators.reduceRight(function (o, d) {\n                            return d && d(target, key, o) || o;\n                        }, desc);\n                }\n            };\n\n            __metadata = undefined && undefined.__metadata || function (k, v) {\n                if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n            };\n\n            __param = undefined && undefined.__param || function (paramIndex, decorator) {\n                return function (target, key) {\n                    decorator(target, key, paramIndex);\n                };\n            };\n\n            BackButton = (function (_Ion) {\n                _inherits(BackButton, _Ion);\n\n                function BackButton(navCtrl, elementRef, navbar) {\n                    _classCallCheck(this, BackButton);\n\n                    _get(Object.getPrototypeOf(BackButton.prototype), \"constructor\", this).call(this, elementRef, null);\n                    this.navCtrl = navCtrl;\n                    navbar && navbar.setBackButtonRef(elementRef);\n                }\n\n                _createClass(BackButton, [{\n                    key: \"goBack\",\n                    value: function goBack(ev) {\n                        ev.stopPropagation();\n                        ev.preventDefault();\n                        this.navCtrl && this.navCtrl.pop();\n                    }\n                }]);\n\n                return BackButton;\n            })(Ion);\n\n            BackButton = __decorate([Directive({\n                selector: '.back-button',\n                host: {\n                    '(click)': 'goBack($event)'\n                }\n            }), __param(0, Optional()), __param(2, Optional()), __param(2, Inject(forwardRef(function () {\n                return Navbar;\n            }))), __metadata('design:paramtypes', [typeof (_a = typeof NavController !== 'undefined' && NavController) === 'function' && _a || Object, typeof (_b = typeof ElementRef !== 'undefined' && ElementRef) === 'function' && _b || Object, Navbar])], BackButton);\n\n            BackButtonText = function BackButtonText(elementRef, navbar) {\n                _classCallCheck(this, BackButtonText);\n\n                navbar.setBackButtonTextRef(elementRef);\n            };\n\n            BackButtonText = __decorate([Directive({\n                selector: '.back-button-text'\n            }), __param(1, Inject(forwardRef(function () {\n                return Navbar;\n            }))), __metadata('design:paramtypes', [typeof (_c = typeof ElementRef !== 'undefined' && ElementRef) === 'function' && _c || Object, Navbar])], BackButtonText);\n\n            ToolbarBackground = function ToolbarBackground(elementRef, navbar) {\n                _classCallCheck(this, ToolbarBackground);\n\n                navbar.setBackgroundRef(elementRef);\n            };\n\n            ToolbarBackground = __decorate([Directive({\n                selector: 'toolbar-background'\n            }), __param(1, Inject(forwardRef(function () {\n                return Navbar;\n            }))), __metadata('design:paramtypes', [typeof (_d = typeof ElementRef !== 'undefined' && ElementRef) === 'function' && _d || Object, Navbar])], ToolbarBackground);\n\n            Navbar = (function (_ToolbarBase) {\n                _inherits(Navbar, _ToolbarBase);\n\n                function Navbar(app, viewCtrl, elementRef, config, renderer) {\n                    _classCallCheck(this, Navbar);\n\n                    _get(Object.getPrototypeOf(Navbar.prototype), \"constructor\", this).call(this, elementRef, config);\n                    this.app = app;\n                    this.renderer = renderer;\n                    var navbarStyle = config.get('navbarStyle');\n                    if (navbarStyle) {\n                        renderer.setElementAttribute(elementRef, navbarStyle, '');\n                    }\n                    viewCtrl && viewCtrl.setNavbar(this);\n                    this.bbIcon = config.get('backButtonIcon');\n                    this.bbText = config.get('backButtonText');\n                }\n\n                /**\n                 * @private\n                 */\n\n                _createClass(Navbar, [{\n                    key: \"onInit\",\n                    value: function onInit() {\n                        _get(Object.getPrototypeOf(Navbar.prototype), \"onInit\", this).call(this);\n                        var hideBackButton = this.hideBackButton;\n                        if (typeof hideBackButton === 'string') {\n                            this.hideBackButton = hideBackButton === '' || hideBackButton === 'true';\n                        }\n                        if (this.navbarStyle) {\n                            this.renderer.setElementAttribute(this.elementRef, this.navbarStyle, '');\n                        }\n                    }\n\n                    /**\n                     * @private\n                     */\n                }, {\n                    key: \"getBackButtonRef\",\n                    value: function getBackButtonRef() {\n                        return this.bbRef;\n                    }\n\n                    /**\n                     * @private\n                     */\n                }, {\n                    key: \"setBackButtonRef\",\n                    value: function setBackButtonRef(backButtonElementRef) {\n                        this.bbRef = backButtonElementRef;\n                    }\n\n                    /**\n                     * @private\n                     */\n                }, {\n                    key: \"getBackButtonTextRef\",\n                    value: function getBackButtonTextRef() {\n                        return this.bbtRef;\n                    }\n\n                    /**\n                     * @private\n                     */\n                }, {\n                    key: \"setBackButtonTextRef\",\n                    value: function setBackButtonTextRef(backButtonTextElementRef) {\n                        this.bbtRef = backButtonTextElementRef;\n                    }\n\n                    /**\n                     * @private\n                     */\n                }, {\n                    key: \"setBackgroundRef\",\n                    value: function setBackgroundRef(backgrouneElementRef) {\n                        this.bgRef = backgrouneElementRef;\n                    }\n\n                    /**\n                     * @private\n                     */\n                }, {\n                    key: \"getBackgroundRef\",\n                    value: function getBackgroundRef() {\n                        return this.bgRef;\n                    }\n\n                    /**\n                     * @private\n                     */\n                }, {\n                    key: \"didEnter\",\n                    value: function didEnter() {\n                        try {\n                            this.app.setTitle(this.getTitleText());\n                        } catch (e) {\n                            console.error(e);\n                        }\n                    }\n\n                    /**\n                     * @private\n                     */\n                }, {\n                    key: \"setHidden\",\n                    value: function setHidden(isHidden) {\n                        this._hidden = isHidden;\n                    }\n                }]);\n\n                return Navbar;\n            })(ToolbarBase);\n\n            _export(\"Navbar\", Navbar);\n\n            _export(\"Navbar\", Navbar = __decorate([Component({\n                selector: 'ion-navbar',\n                template: '<toolbar-background></toolbar-background>' + '<button class=\"back-button\" [hidden]=\"hideBackButton\">' + '<icon class=\"back-button-icon\" [name]=\"bbIcon\"></icon>' + '<span class=\"back-button-text\">' + '<span class=\"back-default\">{{bbText}}</span>' + '</span>' + '</button>' + '<ng-content select=\"[menu-toggle]\"></ng-content>' + '<ng-content select=\"ion-nav-items[primary]\"></ng-content>' + '<ng-content select=\"ion-nav-items[secondary]\"></ng-content>' + '<toolbar-content>' + '<ng-content></ng-content>' + '</toolbar-content>',\n                host: {\n                    '[hidden]': '_hidden',\n                    'class': 'toolbar'\n                },\n                inputs: ['hideBackButton', 'navbarStyle'],\n                directives: [BackButton, BackButtonText, Icon, ToolbarBackground]\n            }), __param(1, Optional()), __metadata('design:paramtypes', [typeof (_e = typeof IonicApp !== 'undefined' && IonicApp) === 'function' && _e || Object, typeof (_f = typeof ViewController !== 'undefined' && ViewController) === 'function' && _f || Object, typeof (_g = typeof ElementRef !== 'undefined' && ElementRef) === 'function' && _g || Object, typeof (_h = typeof Config !== 'undefined' && Config) === 'function' && _h || Object, typeof (_j = typeof Renderer !== 'undefined' && Renderer) === 'function' && _j || Object])], Navbar));\n            /**\n             * @private\n             * Used to find and register headers in a view, and this directive's\n             * content will be moved up to the common navbar location, and created\n             * using the same context as the view's content area.\n            */\n\n            NavbarTemplate = function NavbarTemplate(viewContainerRef, templateRef, viewCtrl) {\n                _classCallCheck(this, NavbarTemplate);\n\n                if (viewCtrl) {\n                    viewCtrl.setNavbarTemplateRef(templateRef);\n                    viewCtrl.setNavbarViewRef(viewContainerRef);\n                }\n            };\n\n            _export(\"NavbarTemplate\", NavbarTemplate);\n\n            _export(\"NavbarTemplate\", NavbarTemplate = __decorate([Directive({\n                selector: 'template[navbar]'\n            }), __param(2, Optional()), __metadata('design:paramtypes', [typeof (_k = typeof ViewContainerRef !== 'undefined' && ViewContainerRef) === 'function' && _k || Object, typeof (_l = typeof TemplateRef !== 'undefined' && TemplateRef) === 'function' && _l || Object, typeof (_m = typeof ViewController !== 'undefined' && ViewController) === 'function' && _m || Object])], NavbarTemplate));\n        }\n    };\n});\nSystem.register('ionic/components/overlay/overlay-controller', ['ionic/util'], function (_export) {\n    /**\n     * @private\n     */\n    'use strict';\n\n    var extend, OverlayController;\n\n    var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();\n\n    function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\n    return {\n        setters: [function (_ionicUtil) {\n            extend = _ionicUtil.extend;\n        }],\n        execute: function () {\n            OverlayController = (function () {\n                function OverlayController() {\n                    _classCallCheck(this, OverlayController);\n                }\n\n                _createClass(OverlayController, [{\n                    key: 'open',\n                    value: function open(componentType) {\n                        var _this = this;\n\n                        var params = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1];\n                        var opts = arguments.length <= 2 || arguments[2] === undefined ? {} : arguments[2];\n\n                        if (!this.nav) {\n                            console.error('<ion-overlay></ion-overlay> required in root template (app.html) to use: ' + overlayType);\n                            return Promise.reject();\n                        }\n                        var resolve = undefined,\n                            reject = undefined;\n                        var promise = new Promise(function (res, rej) {\n                            resolve = res;reject = rej;\n                        });\n                        opts.animation = opts.enterAnimation;\n                        opts.animateFirst = true;\n                        this.nav.push(componentType, params, opts).then(function (viewCtrl) {\n                            if (viewCtrl && viewCtrl.instance) {\n                                (function () {\n                                    var escape = function escape(ev) {\n                                        if (ev.keyCode == 27 && self.nav.last() === viewCtrl) {\n                                            viewCtrl.instance.close();\n                                        }\n                                    };\n\n                                    var self = _this;\n\n                                    viewCtrl.instance.close = function (data) {\n                                        var closeOpts = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1];\n\n                                        extend(opts, closeOpts);\n                                        opts.animation = opts.leaveAnimation;\n                                        viewCtrl.instance.onClose && viewCtrl.instance.onClose(data);\n                                        _this.nav.pop(opts);\n                                        document.removeEventListener('keyup', escape, true);\n                                    };\n                                    document.addEventListener('keyup', escape, true);\n                                    resolve(viewCtrl.instance);\n                                })();\n                            } else {\n                                reject();\n                            }\n                        });\n                        return promise;\n                    }\n                }, {\n                    key: 'getByType',\n                    value: function getByType(overlayType) {\n                        var overlay = this.nav.getByType(overlayType);\n                        return overlay && overlay.instance;\n                    }\n                }, {\n                    key: 'getByHandle',\n                    value: function getByHandle(handle, overlayType) {\n                        var overlay = this.nav.getByHandle(handle);\n                        return overlay && overlay.instance;\n                    }\n                }]);\n\n                return OverlayController;\n            })();\n\n            _export('OverlayController', OverlayController);\n        }\n    };\n});\nSystem.register(\"ionic/components/overlay/overlay\", [\"angular2/angular2\", \"../app/app\", \"../../config/config\", \"../../util/keyboard\", \"./overlay-controller\", \"../nav/nav-controller\"], function (_export) {\n    /**\n     * @private\n     */\n    \"use strict\";\n\n    var ChangeDetectorRef, Component, ElementRef, Compiler, AppViewManager, NgZone, Renderer, IonicApp, Config, Keyboard, OverlayController, NavController, __decorate, __metadata, OverlayNav, _a, _b, _c, _d, _e, _f, _g, _h, _j, _k;\n\n    var _get = function get(_x, _x2, _x3) { var _again = true; _function: while (_again) { var object = _x, property = _x2, receiver = _x3; _again = false; if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { _x = parent; _x2 = property; _x3 = receiver; _again = true; desc = parent = undefined; continue _function; } } else if (\"value\" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } } };\n\n    function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n    function _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\n    return {\n        setters: [function (_angular2Angular2) {\n            ChangeDetectorRef = _angular2Angular2.ChangeDetectorRef;\n            Component = _angular2Angular2.Component;\n            ElementRef = _angular2Angular2.ElementRef;\n            Compiler = _angular2Angular2.Compiler;\n            AppViewManager = _angular2Angular2.AppViewManager;\n            NgZone = _angular2Angular2.NgZone;\n            Renderer = _angular2Angular2.Renderer;\n        }, function (_appApp) {\n            IonicApp = _appApp.IonicApp;\n        }, function (_configConfig) {\n            Config = _configConfig.Config;\n        }, function (_utilKeyboard) {\n            Keyboard = _utilKeyboard.Keyboard;\n        }, function (_overlayController) {\n            OverlayController = _overlayController.OverlayController;\n        }, function (_navNavController) {\n            NavController = _navNavController.NavController;\n        }],\n        execute: function () {\n            __decorate = undefined && undefined.__decorate || function (decorators, target, key, desc) {\n                if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") return Reflect.decorate(decorators, target, key, desc);\n                switch (arguments.length) {\n                    case 2:\n                        return decorators.reduceRight(function (o, d) {\n                            return d && d(o) || o;\n                        }, target);\n                    case 3:\n                        return decorators.reduceRight(function (o, d) {\n                            return d && d(target, key), void 0;\n                        }, void 0);\n                    case 4:\n                        return decorators.reduceRight(function (o, d) {\n                            return d && d(target, key, o) || o;\n                        }, desc);\n                }\n            };\n\n            __metadata = undefined && undefined.__metadata || function (k, v) {\n                if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n            };\n\n            OverlayNav = (function (_NavController) {\n                _inherits(OverlayNav, _NavController);\n\n                function OverlayNav(overlayCtrl, app, config, keyboard, elementRef, compiler, viewManager, zone, renderer, cd) {\n                    _classCallCheck(this, OverlayNav);\n\n                    _get(Object.getPrototypeOf(OverlayNav.prototype), \"constructor\", this).call(this, null, app, config, keyboard, elementRef, null, compiler, viewManager, zone, renderer, cd);\n                    if (overlayCtrl.anchor) {\n                        throw 'An app should only have one <ion-overlay></ion-overlay>';\n                    }\n                    this.initZIndex = 1000;\n                    overlayCtrl.nav = this;\n                }\n\n                return OverlayNav;\n            })(NavController);\n\n            _export(\"OverlayNav\", OverlayNav);\n\n            _export(\"OverlayNav\", OverlayNav = __decorate([Component({\n                selector: 'ion-overlay',\n                template: ''\n            }), __metadata('design:paramtypes', [typeof (_a = typeof OverlayController !== 'undefined' && OverlayController) === 'function' && _a || Object, typeof (_b = typeof IonicApp !== 'undefined' && IonicApp) === 'function' && _b || Object, typeof (_c = typeof Config !== 'undefined' && Config) === 'function' && _c || Object, typeof (_d = typeof Keyboard !== 'undefined' && Keyboard) === 'function' && _d || Object, typeof (_e = typeof ElementRef !== 'undefined' && ElementRef) === 'function' && _e || Object, typeof (_f = typeof Compiler !== 'undefined' && Compiler) === 'function' && _f || Object, typeof (_g = typeof AppViewManager !== 'undefined' && AppViewManager) === 'function' && _g || Object, typeof (_h = typeof NgZone !== 'undefined' && NgZone) === 'function' && _h || Object, typeof (_j = typeof Renderer !== 'undefined' && Renderer) === 'function' && _j || Object, typeof (_k = typeof ChangeDetectorRef !== 'undefined' && ChangeDetectorRef) === 'function' && _k || Object])], OverlayNav));\n        }\n    };\n});\nSystem.register(\"ionic/components/popup/popup\", [\"angular2/angular2\", \"../overlay/overlay-controller\", \"../../config/config\", \"../../animations/animation\", \"../nav/nav-controller\", \"../button/button\", \"../../util/util\"], function (_export) {\n    /**\n     * The Ionic Popup service allows the creation of popup windows that require the user to respond in order to continue.\n     *\n     * The popup service has support for more flexible versions of the built in `alert()`, `prompt()`, and `confirm()` functions that users are used to, in addition to allowing popups with completely custom content and look.\n     *\n     * @usage\n     * ```ts\n     * class myApp {\n     *\n     *   constructor(popup: Popup) {\n     *     this.popup = popup;\n     *   }\n     *\n     *   doAlert() {\n     *     this.popup.alert({\n     *       title: \"New Friend!\",\n     *       template: \"Your friend, Obi wan Kenobi, just accepted your friend request!\",\n     *       cssClass: 'my-alert'\n     *     }).then(() => {\n     *       console.log('Alert closed');\n     *     });\n     *   }\n     *\n     *   doPrompt() {\n     *     this.popup.prompt({\n     *       title: \"New Album\",\n     *       template: \"Enter a name for this new album you're so keen on adding\",\n     *       inputPlaceholder: \"Title\",\n     *       okText: \"Save\",\n     *       okType: \"secondary\"\n     *     }).then((name) => {\n     *       console.log('Name entered:', name);\n     *     }, () => {\n     *       console.error('Prompt closed');\n     *     });\n     *   }\n     *\n     *   doConfirm() {\n     *     this.popup.confirm({\n     *       title: \"Use this lightsaber?\",\n     *       subTitle: \"You can't exchange lightsabers\",\n     *       template: \"Do you agree to use this lightsaber to do good across the intergalactic galaxy?\",\n     *       cancelText: \"Disagree\",\n     *       okText: \"Agree\"\n     *     }).then((result, ev) => {\n     *       console.log('Confirmed!', result);\n     *     }, () => {\n     *       console.error('Not confirmed!');\n     *     });\n     *   }\n     * }\n     * ```\n     * @see {@link /docs/components#popups Popup Component Docs}\n     */\n    \"use strict\";\n\n    var FORM_DIRECTIVES, Component, ElementRef, Injectable, NgClass, NgIf, NgFor, Renderer, OverlayController, Config, Animation, NavParams, Button, extend, __decorate, __metadata, Popup, OVERLAY_TYPE, PopupCmp, PopupPopIn, PopupPopOut, PopupMdPopIn, PopupMdPopOut, _a, _b, _c, _d, _e;\n\n    var _get = function get(_x4, _x5, _x6) { var _again = true; _function: while (_again) { var object = _x4, property = _x5, receiver = _x6; _again = false; if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { _x4 = parent; _x5 = property; _x6 = receiver; _again = true; desc = parent = undefined; continue _function; } } else if (\"value\" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } } };\n\n    var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();\n\n    function _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\n    function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n    return {\n        setters: [function (_angular2Angular2) {\n            FORM_DIRECTIVES = _angular2Angular2.FORM_DIRECTIVES;\n            Component = _angular2Angular2.Component;\n            ElementRef = _angular2Angular2.ElementRef;\n            Injectable = _angular2Angular2.Injectable;\n            NgClass = _angular2Angular2.NgClass;\n            NgIf = _angular2Angular2.NgIf;\n            NgFor = _angular2Angular2.NgFor;\n            Renderer = _angular2Angular2.Renderer;\n        }, function (_overlayOverlayController) {\n            OverlayController = _overlayOverlayController.OverlayController;\n        }, function (_configConfig) {\n            Config = _configConfig.Config;\n        }, function (_animationsAnimation) {\n            Animation = _animationsAnimation.Animation;\n        }, function (_navNavController) {\n            NavParams = _navNavController.NavParams;\n        }, function (_buttonButton) {\n            Button = _buttonButton.Button;\n        }, function (_utilUtil) {\n            extend = _utilUtil.extend;\n        }],\n        execute: function () {\n            __decorate = undefined && undefined.__decorate || function (decorators, target, key, desc) {\n                if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") return Reflect.decorate(decorators, target, key, desc);\n                switch (arguments.length) {\n                    case 2:\n                        return decorators.reduceRight(function (o, d) {\n                            return d && d(o) || o;\n                        }, target);\n                    case 3:\n                        return decorators.reduceRight(function (o, d) {\n                            return d && d(target, key), void 0;\n                        }, void 0);\n                    case 4:\n                        return decorators.reduceRight(function (o, d) {\n                            return d && d(target, key, o) || o;\n                        }, desc);\n                }\n            };\n\n            __metadata = undefined && undefined.__metadata || function (k, v) {\n                if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n            };\n\n            Popup = (function () {\n                function Popup(ctrl, config) {\n                    _classCallCheck(this, Popup);\n\n                    this.ctrl = ctrl;\n                    this.config = config;\n                }\n\n                /**\n                 * TODO\n                 * @param {TODO} opts  TODO\n                 * @returns {object} A promise\n                 */\n\n                _createClass(Popup, [{\n                    key: \"open\",\n                    value: function open(opts) {\n                        var _this = this;\n\n                        return new Promise(function (resolve, reject) {\n                            opts.promiseResolve = resolve;\n                            opts.promiseReject = reject;\n                            opts = extend({\n                                pageType: OVERLAY_TYPE,\n                                enterAnimation: _this.config.get('popupEnter'),\n                                leaveAnimation: _this.config.get('popupLeave')\n                            }, opts);\n                            return _this.ctrl.open(PopupCmp, opts, opts);\n                        });\n                    }\n\n                    /**\n                     * Show a simple alert popup with a message and one button\n                     * that the user can tap to close the popup.\n                     *\n                     * @param {object} opts The options for showing the alert, of the form:\n                     *\n                     * ```\n                     * {\n                     *   title: '', // String. The title of the popup.\n                     *   cssClass: '', // String (optional). The custom CSS class name.\n                     *   subTitle: '', // String (optional). The sub-title of the popup.\n                     *   template: '', // String (optional). The html template to place in the popup body.\n                     *   okText: '', // String (default: 'OK'). The text of the OK button.\n                     *   okType: '', // String (default: ''). The type of the OK button.\n                     * }\n                     * ```\n                     *\n                     * @returns {object} A promise which is resolved when the popup is closed.\n                     */\n                }, {\n                    key: \"alert\",\n                    value: function alert() {\n                        var opts = arguments.length <= 0 || arguments[0] === undefined ? {} : arguments[0];\n\n                        if (typeof opts === 'string') {\n                            opts = {\n                                title: opts\n                            };\n                        }\n                        var button = {\n                            text: opts.okText || 'OK',\n                            type: opts.okType || '',\n                            onTap: function onTap(event, popupRef) {\n                                // Allow it to close\n                                //resolve();\n                            }\n                        };\n                        opts = extend({\n                            showPrompt: false,\n                            cancel: function cancel() {\n                                //reject();\n                            },\n                            buttons: [button]\n                        }, opts);\n                        return this.open(opts);\n                    }\n\n                    /**\n                     * Show a simple confirm popup with a message, Cancel and OK button.\n                     *\n                     * Resolves the promise with true if the user presses the OK button, and false if the user presses the Cancel button.\n                     *\n                     * @param {object} opts The options for showing the confirm, of the form:\n                     *\n                     * ```\n                     * {\n                     *   title: '', // String. The title of the popup.\n                     *   cssClass: '', // String (optional). The custom CSS class name.\n                     *   subTitle: '', // String (optional). The sub-title of the popup.\n                     *   template: '', // String (optional). The html template to place in the popup body.\n                     *   cancelText: '', // String (default: 'Cancel'). The text of the Cancel button.\n                     *   cancelType: '', // String (default: ''). The type of the Cancel button.\n                     *   okText: '', // String (default: 'OK'). The text of the OK button.\n                     *   okType: '', // String (default: ''). The type of the OK button.\n                     * }\n                     * ```\n                     *\n                     * @returns {object} A promise which is resolved when the popup is closed.\n                     */\n                }, {\n                    key: \"confirm\",\n                    value: function confirm() {\n                        var opts = arguments.length <= 0 || arguments[0] === undefined ? {} : arguments[0];\n\n                        if (typeof opts === 'string') {\n                            opts = {\n                                title: opts\n                            };\n                        }\n                        var okButton = {\n                            text: opts.okText || 'OK',\n                            type: opts.okType || '',\n                            onTap: function onTap(event, popupRef) {\n                                // Allow it to close\n                            }\n                        };\n                        var cancelButton = {\n                            text: opts.cancelText || 'Cancel',\n                            type: opts.cancelType || '',\n                            isCancel: true,\n                            onTap: function onTap(event, popupRef) {\n                                // Allow it to close\n                            }\n                        };\n                        opts = extend({\n                            showPrompt: false,\n                            cancel: function cancel() {},\n                            buttons: [cancelButton, okButton]\n                        }, opts);\n                        return this.open(opts);\n                    }\n\n                    /**\n                     * Show a simple prompt popup with a message, input, Cancel and OK button.\n                     *\n                     * Resolves the promise with the value of the input if the user presses OK, and with undefined if the user presses Cancel.\n                     *\n                     * @param {object} opts The options for showing the prompt, of the form:\n                     *\n                     * ```\n                     * {\n                     *   title: '', // String. The title of the popup.\n                     *   cssClass: '', // String (optional). The custom CSS class name.\n                     *   subTitle: '', // String (optional). The sub-title of the popup.\n                     *   template: '', // String (optional). The html template to place in the popup body.\n                     *   inputType: // String (default: 'text'). The type of input to use.\n                     *   inputPlaceholder: // String (default: ''). A placeholder to use for the input.\n                     *   cancelText: '', // String (default: 'Cancel'). The text of the Cancel button.\n                     *   cancelType: '', // String (default: ''). The type of the Cancel button.\n                     *   okText: '', // String (default: 'OK'). The text of the OK button.\n                     *   okType: '', // String (default: ''). The type of the OK button.\n                     * }\n                     * ```\n                     *\n                     * @returns {object} A promise which is resolved when the popup is closed.\n                     */\n                }, {\n                    key: \"prompt\",\n                    value: function prompt() {\n                        var opts = arguments.length <= 0 || arguments[0] === undefined ? {} : arguments[0];\n\n                        if (typeof opts === 'string') {\n                            opts = {\n                                title: opts\n                            };\n                        }\n                        var okButton = {\n                            text: opts.okText || 'OK',\n                            type: opts.okType || '',\n                            onTap: function onTap(event, popupRef) {\n                                // Allow it to close\n                            }\n                        };\n                        var cancelButton = {\n                            text: opts.cancelText || 'Cancel',\n                            type: opts.cancelType || '',\n                            isCancel: true,\n                            onTap: function onTap(event, popupRef) {\n                                // Allow it to close\n                            }\n                        };\n                        opts = extend({\n                            showPrompt: true,\n                            promptPlaceholder: '',\n                            cancel: function cancel() {},\n                            buttons: [cancelButton, okButton]\n                        }, opts);\n                        return this.open(opts);\n                    }\n\n                    /**\n                     * TODO\n                     * @param {TODO} handle  TODO\n                     * @returns {TODO} TODO\n                     */\n                }, {\n                    key: \"get\",\n                    value: function get(handle) {\n                        if (handle) {\n                            return this.ctrl.getByHandle(handle);\n                        }\n                        return this.ctrl.getByType(OVERLAY_TYPE);\n                    }\n                }]);\n\n                return Popup;\n            })();\n\n            _export(\"Popup\", Popup);\n\n            _export(\"Popup\", Popup = __decorate([Injectable(), __metadata('design:paramtypes', [typeof (_a = typeof OverlayController !== 'undefined' && OverlayController) === 'function' && _a || Object, typeof (_b = typeof Config !== 'undefined' && Config) === 'function' && _b || Object])], Popup));\n            OVERLAY_TYPE = 'popup';\n\n            // TODO add button type to button: [type]=\"button.type\"\n\n            PopupCmp = (function () {\n                function PopupCmp(elementRef, params, renderer) {\n                    _classCallCheck(this, PopupCmp);\n\n                    this.elementRef = elementRef;\n                    this.d = params.data;\n                    if (this.d.cssClass) {\n                        renderer.setElementClass(elementRef, this.d.cssClass, true);\n                    }\n                }\n\n                _createClass(PopupCmp, [{\n                    key: \"onInit\",\n                    value: function onInit() {\n                        var _this2 = this;\n\n                        setTimeout(function () {\n                            // TODO: make more better, no DOM BS\n                            _this2.promptInput = _this2.elementRef.nativeElement.querySelector('input');\n                            if (_this2.promptInput) {\n                                _this2.promptInput.value = '';\n                            }\n                        });\n                    }\n                }, {\n                    key: \"buttonTapped\",\n                    value: function buttonTapped(button, ev) {\n                        var promptValue = this.promptInput && this.promptInput.value;\n                        var retVal = button.onTap && button.onTap(ev, this, {\n                            promptValue: promptValue\n                        });\n                        // If the event.preventDefault() wasn't called, close\n                        if (!ev.defaultPrevented) {\n                            // If this is a cancel button, reject the promise\n                            if (button.isCancel) {\n                                this.d.promiseReject();\n                            } else {\n                                // Resolve with the prompt value\n                                this.d.promiseResolve(promptValue);\n                            }\n                            return this.close();\n                        }\n                    }\n                }, {\n                    key: \"cancel\",\n                    value: function cancel(ev) {\n                        this.d.cancel && this.d.cancel(event);\n                        if (!ev.defaultPrevented) {\n                            this.d.promiseReject();\n                            return this.close();\n                        }\n                    }\n                }]);\n\n                return PopupCmp;\n            })();\n\n            PopupCmp = __decorate([Component({\n                selector: 'ion-popup',\n                template: '<backdrop (click)=\"cancel($event)\" tappable disable-activated></backdrop>' + '<popup-wrapper>' + '<div class=\"popup-head\">' + '<h2 class=\"popup-title\" [inner-html]=\"d.title\" *ng-if=\"d.title\"></h2>' + '<h3 class=\"popup-sub-title\" [inner-html]=\"d.subTitle\" *ng-if=\"d.subTitle\"></h3>' + '</div>' + '<div class=\"popup-body\">' + '<div [inner-html]=\"d.template\" *ng-if=\"d.template\"></div>' + '<input type=\"{{d.inputType || \\'text\\'}}\" placeholder=\"{{d.inputPlaceholder}}\" *ng-if=\"d.showPrompt\" class=\"prompt-input\">' + '</div>' + '<div class=\"popup-buttons\" *ng-if=\"d.buttons.length\">' + '<button *ng-for=\"#btn of d.buttons\" (click)=\"buttonTapped(btn, $event)\" [inner-html]=\"btn.text\"></button>' + '</div>' + '</popup-wrapper>',\n                host: {\n                    'role': 'dialog'\n                },\n                directives: [FORM_DIRECTIVES, NgClass, NgIf, NgFor, Button]\n            }), __metadata('design:paramtypes', [typeof (_c = typeof ElementRef !== 'undefined' && ElementRef) === 'function' && _c || Object, typeof (_d = typeof NavParams !== 'undefined' && NavParams) === 'function' && _d || Object, typeof (_e = typeof Renderer !== 'undefined' && Renderer) === 'function' && _e || Object])], PopupCmp);\n            /**\n             * Animations for popups\n             */\n\n            PopupPopIn = (function (_Animation) {\n                _inherits(PopupPopIn, _Animation);\n\n                function PopupPopIn(enteringView, leavingView, opts) {\n                    _classCallCheck(this, PopupPopIn);\n\n                    _get(Object.getPrototypeOf(PopupPopIn.prototype), \"constructor\", this).call(this, null, opts);\n                    var ele = enteringView.pageRef().nativeElement;\n                    var backdrop = new Animation(ele.querySelector('backdrop'));\n                    var wrapper = new Animation(ele.querySelector('popup-wrapper'));\n                    wrapper.fromTo('opacity', '0.01', '1').fromTo('scale', '1.1', '1');\n                    backdrop.fromTo('opacity', '0.01', '0.3');\n                    this.easing('ease-in-out').duration(200).add(backdrop, wrapper);\n                }\n\n                return PopupPopIn;\n            })(Animation);\n\n            Animation.register('popup-pop-in', PopupPopIn);\n\n            PopupPopOut = (function (_Animation2) {\n                _inherits(PopupPopOut, _Animation2);\n\n                function PopupPopOut(enteringView, leavingView, opts) {\n                    _classCallCheck(this, PopupPopOut);\n\n                    _get(Object.getPrototypeOf(PopupPopOut.prototype), \"constructor\", this).call(this, null, opts);\n                    var ele = leavingView.pageRef().nativeElement;\n                    var backdrop = new Animation(ele.querySelector('backdrop'));\n                    var wrapper = new Animation(ele.querySelector('popup-wrapper'));\n                    wrapper.fromTo('opacity', '1', '0').fromTo('scale', '1', '0.9');\n                    backdrop.fromTo('opacity', '0.3', '0');\n                    this.easing('ease-in-out').duration(200).add(backdrop, wrapper);\n                }\n\n                return PopupPopOut;\n            })(Animation);\n\n            Animation.register('popup-pop-out', PopupPopOut);\n\n            PopupMdPopIn = (function (_Animation3) {\n                _inherits(PopupMdPopIn, _Animation3);\n\n                function PopupMdPopIn(enteringView, leavingView, opts) {\n                    _classCallCheck(this, PopupMdPopIn);\n\n                    _get(Object.getPrototypeOf(PopupMdPopIn.prototype), \"constructor\", this).call(this, null, opts);\n                    var ele = enteringView.pageRef().nativeElement;\n                    var backdrop = new Animation(ele.querySelector('backdrop'));\n                    var wrapper = new Animation(ele.querySelector('popup-wrapper'));\n                    wrapper.fromTo('opacity', '0.01', '1').fromTo('scale', '1.1', '1');\n                    backdrop.fromTo('opacity', '0.01', '0.5');\n                    this.easing('ease-in-out').duration(200).add(backdrop, wrapper);\n                }\n\n                return PopupMdPopIn;\n            })(Animation);\n\n            Animation.register('popup-md-pop-in', PopupMdPopIn);\n\n            PopupMdPopOut = (function (_Animation4) {\n                _inherits(PopupMdPopOut, _Animation4);\n\n                function PopupMdPopOut(enteringView, leavingView, opts) {\n                    _classCallCheck(this, PopupMdPopOut);\n\n                    _get(Object.getPrototypeOf(PopupMdPopOut.prototype), \"constructor\", this).call(this, null, opts);\n                    var ele = leavingView.pageRef().nativeElement;\n                    var backdrop = new Animation(ele.querySelector('backdrop'));\n                    var wrapper = new Animation(ele.querySelector('popup-wrapper'));\n                    wrapper.fromTo('opacity', '1', '0').fromTo('scale', '1', '0.9');\n                    backdrop.fromTo('opacity', '0.5', '0');\n                    this.easing('ease-in-out').duration(200).add(backdrop, wrapper);\n                }\n\n                return PopupMdPopOut;\n            })(Animation);\n\n            Animation.register('popup-md-pop-out', PopupMdPopOut);\n        }\n    };\n});\nSystem.register(\"ionic/components/radio/radio\", [\"angular2/angular2\", \"../../config/config\", \"../ion\", \"../list/list\"], function (_export) {\n    /**\n     * A radio group is a group of radio components.\n     *\n     * Selecting a radio button in the group unselects all others in the group.\n     *\n     * New radios can be registered dynamically.\n     *\n     * See the [Angular 2 Docs](https://angular.io/docs/js/latest/api/forms/) for more info on forms and input.\n     *\n     * @usage\n     * ```html\n     * <ion-list radio-group ng-control=\"clientside\">\n     *\n     *   <ion-list-header>\n     *     Clientside\n     *   </ion-list-header>\n     *\n     *   <ion-radio value=\"ember\">\n     *     Ember\n     *   </ion-radio>\n     *\n     *   <ion-radio value=\"angular1\">\n     *     Angular 1\n     *   </ion-radio>\n     *\n     *   <ion-radio value=\"angular2\" checked=\"true\">\n     *     Angular 2\n     *   </ion-radio>\n     *\n     *   <ion-radio value=\"react\">\n     *     React\n     *   </ion-radio>\n     *\n     * </ion-list>\n     * ```\n     * @see {@link /docs/components#radio Radio Component Docs}\n    */\n    \"use strict\";\n\n    var Component, Directive, ElementRef, Host, Optional, NgControl, Query, QueryList, Config, Ion, ListHeader, __decorate, __metadata, __param, RadioGroup, RadioButton, radioGroupIds, _a, _b, _c, _d, _e, _f;\n\n    var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();\n\n    var _get = function get(_x, _x2, _x3) { var _again = true; _function: while (_again) { var object = _x, property = _x2, receiver = _x3; _again = false; if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { _x = parent; _x2 = property; _x3 = receiver; _again = true; desc = parent = undefined; continue _function; } } else if (\"value\" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } } };\n\n    function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n    function _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\n    return {\n        setters: [function (_angular2Angular2) {\n            Component = _angular2Angular2.Component;\n            Directive = _angular2Angular2.Directive;\n            ElementRef = _angular2Angular2.ElementRef;\n            Host = _angular2Angular2.Host;\n            Optional = _angular2Angular2.Optional;\n            NgControl = _angular2Angular2.NgControl;\n            Query = _angular2Angular2.Query;\n            QueryList = _angular2Angular2.QueryList;\n        }, function (_configConfig) {\n            Config = _configConfig.Config;\n        }, function (_ion) {\n            Ion = _ion.Ion;\n        }, function (_listList) {\n            ListHeader = _listList.ListHeader;\n        }],\n        execute: function () {\n            __decorate = undefined && undefined.__decorate || function (decorators, target, key, desc) {\n                if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") return Reflect.decorate(decorators, target, key, desc);\n                switch (arguments.length) {\n                    case 2:\n                        return decorators.reduceRight(function (o, d) {\n                            return d && d(o) || o;\n                        }, target);\n                    case 3:\n                        return decorators.reduceRight(function (o, d) {\n                            return d && d(target, key), void 0;\n                        }, void 0);\n                    case 4:\n                        return decorators.reduceRight(function (o, d) {\n                            return d && d(target, key, o) || o;\n                        }, desc);\n                }\n            };\n\n            __metadata = undefined && undefined.__metadata || function (k, v) {\n                if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n            };\n\n            __param = undefined && undefined.__param || function (paramIndex, decorator) {\n                return function (target, key) {\n                    decorator(target, key, paramIndex);\n                };\n            };\n\n            RadioGroup = (function (_Ion) {\n                _inherits(RadioGroup, _Ion);\n\n                function RadioGroup(elementRef, config, ngControl, headerQuery) {\n                    _classCallCheck(this, RadioGroup);\n\n                    _get(Object.getPrototypeOf(RadioGroup.prototype), \"constructor\", this).call(this, elementRef, config);\n                    this.headerQuery = headerQuery;\n                    this.radios = [];\n                    this.ngControl = ngControl;\n                    this.id = ++radioGroupIds;\n                    this.radioIds = -1;\n                    this.onChange = function (_) {};\n                    this.onTouched = function (_) {};\n                    if (ngControl) this.ngControl.valueAccessor = this;\n                }\n\n                /**\n                 * @private\n                 */\n\n                _createClass(RadioGroup, [{\n                    key: \"onInit\",\n                    value: function onInit() {\n                        var header = this.headerQuery.first;\n                        if (header) {\n                            if (!header.id) {\n                                header.id = 'radio-header-' + this.id;\n                            }\n                            this.describedById = header.id;\n                        }\n                    }\n\n                    /**\n                     * @private\n                     * Register the specified radio button with the radio group.\n                     * @param {RadioButton} radio  The radio button to register.\n                     */\n                }, {\n                    key: \"registerRadio\",\n                    value: function registerRadio(radio) {\n                        radio.id = radio.id || 'radio-' + this.id + '-' + ++this.radioIds;\n                        this.radios.push(radio);\n                        if (this.value == radio.value) {\n                            radio.check(this.value);\n                        }\n                        if (radio.checked) {\n                            this.value = radio.value;\n                            this.onChange(this.value);\n                            this.activeId = radio.id;\n                        }\n                    }\n\n                    /**\n                     * @private\n                     * Update which radio button in the group is checked, unchecking all others.\n                     * @param {RadioButton} checkedRadio  The radio button to check.\n                     */\n                }, {\n                    key: \"update\",\n                    value: function update(checkedRadio) {\n                        this.value = checkedRadio.value;\n                        this.activeId = checkedRadio.id;\n                        var _iteratorNormalCompletion = true;\n                        var _didIteratorError = false;\n                        var _iteratorError = undefined;\n\n                        try {\n                            for (var _iterator = this.radios[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {\n                                var radio = _step.value;\n\n                                radio.checked = radio === checkedRadio;\n                            }\n                        } catch (err) {\n                            _didIteratorError = true;\n                            _iteratorError = err;\n                        } finally {\n                            try {\n                                if (!_iteratorNormalCompletion && _iterator[\"return\"]) {\n                                    _iterator[\"return\"]();\n                                }\n                            } finally {\n                                if (_didIteratorError) {\n                                    throw _iteratorError;\n                                }\n                            }\n                        }\n\n                        this.onChange(this.value);\n                    }\n\n                    /**\n                     * @private\n                     * Angular2 Forms API method called by the model (Control) on change to update\n                     * the checked value.\n                     * https://github.com/angular/angular/blob/master/modules/angular2/src/forms/directives/shared.ts#L34\n                     */\n                }, {\n                    key: \"writeValue\",\n                    value: function writeValue(value) {\n                        this.value = value;\n                        var _iteratorNormalCompletion2 = true;\n                        var _didIteratorError2 = false;\n                        var _iteratorError2 = undefined;\n\n                        try {\n                            for (var _iterator2 = this.radios[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {\n                                var radio = _step2.value;\n\n                                radio.checked = radio.value == value;\n                            }\n                        } catch (err) {\n                            _didIteratorError2 = true;\n                            _iteratorError2 = err;\n                        } finally {\n                            try {\n                                if (!_iteratorNormalCompletion2 && _iterator2[\"return\"]) {\n                                    _iterator2[\"return\"]();\n                                }\n                            } finally {\n                                if (_didIteratorError2) {\n                                    throw _iteratorError2;\n                                }\n                            }\n                        }\n                    }\n\n                    /**\n                     * @private\n                     * Angular2 Forms API method called by the view (NgControl) to register the\n                     * onChange event handler that updates the model (Control).\n                     * https://github.com/angular/angular/blob/master/modules/angular2/src/forms/directives/shared.ts#L27\n                     * @param {Function} fn  the onChange event handler.\n                     */\n                }, {\n                    key: \"registerOnChange\",\n                    value: function registerOnChange(fn) {\n                        this.onChange = fn;\n                    }\n\n                    /**\n                     * @private\n                     * Angular2 Forms API method called by the the view (NgControl) to register\n                     * the onTouched event handler that marks the model (Control) as touched.\n                     * @param {Function} fn  onTouched event handler.\n                     */\n                }, {\n                    key: \"registerOnTouched\",\n                    value: function registerOnTouched(fn) {\n                        this.onTouched = fn;\n                    }\n                }]);\n\n                return RadioGroup;\n            })(Ion);\n\n            _export(\"RadioGroup\", RadioGroup);\n\n            _export(\"RadioGroup\", RadioGroup = __decorate([Directive({\n                selector: '[radio-group]',\n                host: {\n                    'role': 'radiogroup',\n                    '[attr.aria-activedescendant]': 'activeId',\n                    '[attr.aria-describedby]': 'describedById'\n                }\n            }), __param(2, Optional()), __param(3, Query(ListHeader)), __metadata('design:paramtypes', [typeof (_a = typeof ElementRef !== 'undefined' && ElementRef) === 'function' && _a || Object, typeof (_b = typeof Config !== 'undefined' && Config) === 'function' && _b || Object, typeof (_c = typeof NgControl !== 'undefined' && NgControl) === 'function' && _c || Object, typeof (_d = typeof QueryList !== 'undefined' && QueryList) === 'function' && _d || Object])], RadioGroup));\n            /**\n             * @description\n             * A single radio component.\n             *\n             * See the [Angular 2 Docs](https://angular.io/docs/js/latest/api/forms/) for more info on forms and input.\n             *\n             * @usage\n             * ```html\n             * <ion-radio value=\"isChecked\" checked=\"true\">\n             *   Radio Label\n             * </ion-radio>\n             * ```\n             *\n             * @see {@link /docs/components#radio Radio Component Docs}\n             */\n\n            RadioButton = (function (_Ion2) {\n                _inherits(RadioButton, _Ion2);\n\n                function RadioButton(group, elementRef, config) {\n                    _classCallCheck(this, RadioButton);\n\n                    _get(Object.getPrototypeOf(RadioButton.prototype), \"constructor\", this).call(this, elementRef, config);\n                    this.group = group;\n                    this.tabIndex = 0;\n                }\n\n                /**\n                 * @private\n                 */\n\n                _createClass(RadioButton, [{\n                    key: \"onInit\",\n                    value: function onInit() {\n                        _get(Object.getPrototypeOf(RadioButton.prototype), \"onInit\", this).call(this);\n                        this.group.registerRadio(this);\n                        this.labelId = 'label-' + this.id;\n                    }\n\n                    /**\n                     * @private\n                     */\n                }, {\n                    key: \"click\",\n                    value: function click(event) {\n                        event.preventDefault();\n                        event.stopPropagation();\n                        this.check();\n                    }\n\n                    /**\n                     * Update the checked state of this radio button.\n                     * TODO: Call this toggle? Since unchecks as well\n                     */\n                }, {\n                    key: \"check\",\n                    value: function check() {\n                        this.checked = !this.checked;\n                        this.group.update(this);\n                    }\n                }]);\n\n                return RadioButton;\n            })(Ion);\n\n            _export(\"RadioButton\", RadioButton);\n\n            _export(\"RadioButton\", RadioButton = __decorate([Component({\n                selector: 'ion-radio',\n                inputs: ['value', 'checked', 'disabled', 'id'],\n                host: {\n                    'role': 'radio',\n                    'tappable': 'true',\n                    '[attr.id]': 'id',\n                    '[attr.tab-index]': 'tabIndex',\n                    '[attr.aria-checked]': 'checked',\n                    '[attr.aria-disabled]': 'disabled',\n                    '[attr.aria-labelledby]': 'labelId',\n                    '(click)': 'click($event)',\n                    'class': 'item'\n                },\n                template: '<div class=\"item-inner\">' + '<ion-item-content id=\"{{labelId}}\">' + '<ng-content></ng-content>' + '</ion-item-content>' + '<media-radio>' + '<radio-icon></radio-icon>' + '</media-radio>' + '</div>'\n            }), __param(0, Host()), __param(0, Optional()), __metadata('design:paramtypes', [RadioGroup, typeof (_e = typeof ElementRef !== 'undefined' && ElementRef) === 'function' && _e || Object, typeof (_f = typeof Config !== 'undefined' && Config) === 'function' && _f || Object])], RadioButton));\n            radioGroupIds = -1;\n        }\n    };\n});\nSystem.register(\"ionic/components/scroll/pull-to-refresh\", [\"angular2/angular2\", \"../content/content\", \"ionic/util\", \"ionic/util/dom\"], function (_export) {\n    /**\n     * Allows you to add pull-to-refresh to an Content component.\n     *\n     * Place it as the first child of your Content or Scroll element.\n     *\n     * When refreshing is complete, call `refresher.complete()` from your controller.\n     *\n     *  @usage\n     *  ```ts\n     *  <ion-refresher (starting)=\"doStarting()\" (refresh)=\"doRefresh($event, refresher)\" (pulling)=\"doPulling($event, amt)\">\n     *\n     *\n     *  doRefresh(refresher) {\n     *    console.log('Refreshing!', refresher);\n     *\n     *    setTimeout(() => {\n     *      console.log('Pull to refresh complete!', refresher);\n     *      refresher.complete();\n     *    })\n     *  }\n     *\n     *  doStarting() {\n     *    console.log('Pull started!');\n     *  }\n     *\n     *  doPulling(amt) {\n     *    console.log('You have pulled', amt);\n     *  }\n     *  ```\n     */\n    \"use strict\";\n\n    var Component, NgIf, NgClass, ElementRef, EventEmitter, Host, Content, util, raf, CSS, __decorate, __metadata, __param, Refresher, _a, _b;\n\n    var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();\n\n    function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n    return {\n        setters: [function (_angular2Angular2) {\n            Component = _angular2Angular2.Component;\n            NgIf = _angular2Angular2.NgIf;\n            NgClass = _angular2Angular2.NgClass;\n            ElementRef = _angular2Angular2.ElementRef;\n            EventEmitter = _angular2Angular2.EventEmitter;\n            Host = _angular2Angular2.Host;\n        }, function (_contentContent) {\n            Content = _contentContent.Content;\n        }, function (_ionicUtil) {\n            util = _ionicUtil;\n        }, function (_ionicUtilDom) {\n            raf = _ionicUtilDom.raf;\n            CSS = _ionicUtilDom.CSS;\n        }],\n        execute: function () {\n            __decorate = undefined && undefined.__decorate || function (decorators, target, key, desc) {\n                if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") return Reflect.decorate(decorators, target, key, desc);\n                switch (arguments.length) {\n                    case 2:\n                        return decorators.reduceRight(function (o, d) {\n                            return d && d(o) || o;\n                        }, target);\n                    case 3:\n                        return decorators.reduceRight(function (o, d) {\n                            return d && d(target, key), void 0;\n                        }, void 0);\n                    case 4:\n                        return decorators.reduceRight(function (o, d) {\n                            return d && d(target, key, o) || o;\n                        }, desc);\n                }\n            };\n\n            __metadata = undefined && undefined.__metadata || function (k, v) {\n                if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n            };\n\n            __param = undefined && undefined.__param || function (paramIndex, decorator) {\n                return function (target, key) {\n                    decorator(target, key, paramIndex);\n                };\n            };\n\n            Refresher = (function () {\n                /**\n                 * TODO\n                 * @param {Content} content  TODO\n                 * @param {ElementRef} elementRef  TODO\n                 */\n\n                function Refresher(content, element) {\n                    _classCallCheck(this, Refresher);\n\n                    this.ele = element.nativeElement;\n                    this.ele.classList.add('content');\n                    this.content = content;\n                    this.refresh = new EventEmitter('refresh');\n                    this.starting = new EventEmitter('starting');\n                    this.pulling = new EventEmitter('pulling');\n                }\n\n                _createClass(Refresher, [{\n                    key: \"onInit\",\n                    value: function onInit() {\n                        this.initEvents();\n                    }\n\n                    /**\n                     * Initialize touch and scroll event listeners.\n                     */\n                }, {\n                    key: \"initEvents\",\n                    value: function initEvents() {\n                        var sp = this.content.getNativeElement();\n                        var sc = this.content.scrollElement;\n                        this.isDragging = false;\n                        this.isOverscrolling = false;\n                        this.dragOffset = 0;\n                        this.lastOverscroll = 0;\n                        this.ptrThreshold = 60;\n                        this.activated = false;\n                        this.scrollTime = 500;\n                        this.startY = null;\n                        this.deltaY = null;\n                        this.canOverscroll = true;\n                        this.scrollHost = sp;\n                        this.scrollChild = sc;\n                        util.defaults(this, {\n                            pullingIcon: 'ion-android-arrow-down',\n                            refreshingIcon: 'ion-ionic'\n                        });\n                        this.showSpinner = !util.isDefined(this.refreshingIcon) && this.spinner != 'none';\n                        this.showIcon = util.isDefined(this.refreshingIcon);\n                        this._touchMoveListener = this._handleTouchMove.bind(this);\n                        this._touchEndListener = this._handleTouchEnd.bind(this);\n                        this._handleScrollListener = this._handleScroll.bind(this);\n                        sc.addEventListener('touchmove', this._touchMoveListener);\n                        sc.addEventListener('touchend', this._touchEndListener);\n                        sc.addEventListener('scroll', this._handleScrollListener);\n                    }\n                }, {\n                    key: \"onDehydrate\",\n                    value: function onDehydrate() {\n                        console.log('DEHYDRATION');\n                        var sc = this.content.scrollElement;\n                        sc.removeEventListener('touchmove', this._touchMoveListener);\n                        sc.removeEventListener('touchend', this._touchEndListener);\n                        sc.removeEventListener('scroll', this._handleScrollListener);\n                    }\n\n                    /**\n                     * TODO\n                     * @param {TODO} val  TODO\n                     */\n                }, {\n                    key: \"overscroll\",\n                    value: function overscroll(val) {\n                        this.scrollChild.style[CSS.transform] = 'translateY(' + val + 'px)';\n                        this.lastOverscroll = val;\n                    }\n\n                    /**\n                     * TODO\n                     * @param {TODO} target  TODO\n                     * @param {TODO} newScrollTop  TODO\n                     */\n                }, {\n                    key: \"nativescroll\",\n                    value: function nativescroll(target, newScrollTop) {\n                        // creates a scroll event that bubbles, can be cancelled, and with its view\n                        // and detail property initialized to window and 1, respectively\n                        target.scrollTop = newScrollTop;\n                        var e = document.createEvent(\"UIEvents\");\n                        e.initUIEvent(\"scroll\", true, true, window, 1);\n                        target.dispatchEvent(e);\n                    }\n\n                    /**\n                     * TODO\n                     * @param {TODO} enabled  TODO\n                     */\n                }, {\n                    key: \"setScrollLock\",\n                    value: function setScrollLock(enabled) {\n                        var _this = this;\n\n                        // set the scrollbar to be position:fixed in preparation to overscroll\n                        // or remove it so the app can be natively scrolled\n                        if (enabled) {\n                            raf(function () {\n                                _this.scrollChild.classList.add('overscroll');\n                                _this.show();\n                            });\n                        } else {\n                            raf(function () {\n                                _this.scrollChild.classList.remove('overscroll');\n                                _this.hide();\n                                _this.deactivate();\n                            });\n                        }\n                    }\n\n                    /**\n                     * TODO\n                     */\n                }, {\n                    key: \"activate\",\n                    value: function activate() {\n                        //this.ele.classList.add('active');\n                        this.isActive = true;\n                        //this.starting.next();\n                    }\n\n                    /**\n                     * TODO\n                     */\n                }, {\n                    key: \"deactivate\",\n                    value: function deactivate() {\n                        var _this2 = this;\n\n                        // give tail 150ms to finish\n                        setTimeout(function () {\n                            _this2.isActive = false;\n                            _this2.isRefreshing = false;\n                            _this2.isRefreshingTail = false;\n                            // deactivateCallback\n                            if (_this2.activated) _this2.activated = false;\n                        }, 150);\n                    }\n                }, {\n                    key: \"start\",\n                    value: function start() {\n                        // startCallback\n                        this.isRefreshing = true;\n                        this.refresh.next(this);\n                        //$scope.$onRefresh();\n                    }\n\n                    /**\n                     * TODO\n                     */\n                }, {\n                    key: \"show\",\n                    value: function show() {\n                        // showCallback\n                        this.ele.classList.remove('invisible');\n                    }\n\n                    /**\n                     * TODO\n                     */\n                }, {\n                    key: \"hide\",\n                    value: function hide() {\n                        // showCallback\n                        this.ele.classList.add('invisible');\n                    }\n\n                    /**\n                     * TODO\n                     */\n                }, {\n                    key: \"tail\",\n                    value: function tail() {\n                        // tailCallback\n                        this.ele.classList.add('refreshing-tail');\n                    }\n\n                    /**\n                     * TODO\n                     */\n                }, {\n                    key: \"complete\",\n                    value: function complete() {\n                        var _this3 = this;\n\n                        setTimeout(function () {\n                            raf(_this3.tail.bind(_this3));\n                            // scroll back to home during tail animation\n                            _this3.scrollTo(0, _this3.scrollTime, _this3.deactivate.bind(_this3));\n                            // return to native scrolling after tail animation has time to finish\n                            setTimeout(function () {\n                                if (_this3.isOverscrolling) {\n                                    _this3.isOverscrolling = false;\n                                    _this3.setScrollLock(false);\n                                }\n                            }, _this3.scrollTime);\n                        }, this.scrollTime);\n                    }\n\n                    /**\n                     * TODO\n                     * @param {TODO} Y  TODO\n                     * @param {TODO} duration  TODO\n                     * @param {Function} callback  TODO\n                     */\n                }, {\n                    key: \"scrollTo\",\n                    value: function scrollTo(Y, duration, callback) {\n                        // scroll animation loop w/ easing\n                        // credit https://gist.github.com/dezinezync/5487119\n                        var start = Date.now(),\n                            from = this.lastOverscroll;\n                        if (from === Y) {\n                            callback();\n                            return; /* Prevent scrolling to the Y point if already there */\n                        }\n                        // decelerating to zero velocity\n                        function easeOutCubic(t) {\n                            return --t * t * t + 1;\n                        }\n                        // scroll loop\n                        function scroll() {\n                            var currentTime = Date.now(),\n                                time = Math.min(1, (currentTime - start) / duration),\n\n                            // where .5 would be 50% of time on a linear scale easedT gives a\n                            // fraction based on the easing method\n                            easedT = easeOutCubic(time);\n                            this.overscroll(parseInt(easedT * (Y - from) + from, 10));\n                            if (time < 1) {\n                                raf(scroll.bind(this));\n                            } else {\n                                if (Y < 5 && Y > -5) {\n                                    this.isOverscrolling = false;\n                                    this.setScrollLock(false);\n                                }\n                                callback && callback();\n                            }\n                        }\n                        // start scroll loop\n                        raf(scroll.bind(this));\n                    }\n\n                    /**\n                     * @private\n                     * TODO\n                     * @param {Event} e  TODO\n                     */\n                }, {\n                    key: \"_handleTouchMove\",\n                    value: function _handleTouchMove(e) {\n                        //console.log('TOUCHMOVE', e);\n                        // if multitouch or regular scroll event, get out immediately\n                        if (!this.canOverscroll || e.touches.length > 1) {\n                            return;\n                        }\n                        //if this is a new drag, keep track of where we start\n                        if (this.startY === null) {\n                            this.startY = parseInt(e.touches[0].screenY, 10);\n                        }\n                        // how far have we dragged so far?\n                        this.deltaY = parseInt(e.touches[0].screenY, 10) - this.startY;\n                        // if we've dragged up and back down in to native scroll territory\n                        if (this.deltaY - this.dragOffset <= 0 || this.scrollHost.scrollTop !== 0) {\n                            if (this.isOverscrolling) {\n                                this.isOverscrolling = false;\n                                this.setScrollLock(false);\n                            }\n                            if (this.isDragging) {\n                                this.nativescroll(this.scrollHost, parseInt(this.deltaY - this.dragOffset, 10) * -1);\n                            }\n                            // if we're not at overscroll 0 yet, 0 out\n                            if (this.lastOverscroll !== 0) {\n                                this.overscroll(0);\n                            }\n                            return;\n                        } else if (this.deltaY > 0 && this.scrollHost.scrollTop === 0 && !this.isOverscrolling) {\n                            // starting overscroll, but drag started below scrollTop 0, so we need to offset the position\n                            this.dragOffset = this.deltaY;\n                        }\n                        // prevent native scroll events while overscrolling\n                        e.preventDefault();\n                        // if not overscrolling yet, initiate overscrolling\n                        if (!this.isOverscrolling) {\n                            this.isOverscrolling = true;\n                            this.setScrollLock(true);\n                        }\n                        this.isDragging = true;\n                        // overscroll according to the user's drag so far\n                        this.overscroll(parseInt((this.deltaY - this.dragOffset) / 3, 10));\n                        // Pass an incremental pull amount to the EventEmitter\n                        this.pulling.next(this.lastOverscroll);\n                        // update the icon accordingly\n                        if (!this.activated && this.lastOverscroll > this.ptrThreshold) {\n                            this.activated = true;\n                            raf(this.activate.bind(this));\n                        } else if (this.activated && this.lastOverscroll < this.ptrThreshold) {\n                            this.activated = false;\n                            raf(this.deactivate.bind(this));\n                        }\n                    }\n\n                    /**\n                     * @private\n                     * TODO\n                     * @param {Event} e  TODO\n                     */\n                }, {\n                    key: \"_handleTouchEnd\",\n                    value: function _handleTouchEnd(e) {\n                        console.log('TOUCHEND', e);\n                        // if this wasn't an overscroll, get out immediately\n                        if (!this.canOverscroll && !this.isDragging) {\n                            return;\n                        }\n                        // reset Y\n                        this.startY = null;\n                        // the user has overscrolled but went back to native scrolling\n                        if (!this.isDragging) {\n                            this.dragOffset = 0;\n                            this.isOverscrolling = false;\n                            this.setScrollLock(false);\n                        } else {\n                            this.isDragging = false;\n                            this.dragOffset = 0;\n                            // the user has scroll far enough to trigger a refresh\n                            if (this.lastOverscroll > this.ptrThreshold) {\n                                this.start();\n                                this.scrollTo(this.ptrThreshold, this.scrollTime);\n                            } else {\n                                this.scrollTo(0, this.scrollTime, this.deactivate.bind(this));\n                                this.isOverscrolling = false;\n                            }\n                        }\n                    }\n\n                    /**\n                     * @private\n                     * TODO\n                     * @param {Event} e  TODO\n                     */\n                }, {\n                    key: \"_handleScroll\",\n                    value: function _handleScroll(e) {\n                        console.log('SCROLL', e.target.scrollTop);\n                    }\n                }]);\n\n                return Refresher;\n            })();\n\n            _export(\"Refresher\", Refresher);\n\n            _export(\"Refresher\", Refresher = __decorate([Component({\n                selector: 'ion-refresher',\n                inputs: ['pullingIcon', 'pullingText', 'refreshingIcon', 'refreshingText', 'spinner', 'disablePullingRotation'],\n                outputs: ['refresh', 'starting', 'pulling'],\n                host: {\n                    '[class.active]': 'isActive',\n                    '[class.refreshing]': 'isRefreshing',\n                    '[class.refreshingTail]': 'isRefreshingTail'\n                },\n                template: '<div class=\"refresher-content\" [class.refresher-with-text]=\"pullingText || refreshingText\">' + '<div class=\"icon-pulling\">' + '<i class=\"icon\" [ng-class]=\"pullingIcon\"></i>' + '</div>' + '<div class=\"text-pulling\" [inner-html]=\"pullingText\" *ng-if=\"pullingText\"></div>' + '<div class=\"icon-refreshing\">' + '<i class=\"icon\" [ng-class]=\"refreshingIcon\"></i>' + '</div>' + '<div class=\"text-refreshing\" [inner-html]=\"refreshingText\" *ng-if=\"refreshingText\"></div>' + '</div>',\n                directives: [NgIf, NgClass]\n            }), __param(0, Host()), __metadata('design:paramtypes', [typeof (_a = typeof Content !== 'undefined' && Content) === 'function' && _a || Object, typeof (_b = typeof ElementRef !== 'undefined' && ElementRef) === 'function' && _b || Object])], Refresher));\n        }\n    };\n});\nSystem.register(\"ionic/components/scroll/scroll\", [\"angular2/angular2\", \"../ion\", \"../../config/config\"], function (_export) {\n    /**\n     * @name Scroll\n     * @description\n     * Scroll is a non-flexboxed scroll area that can scroll horizontally or vertically. `ion-Scroll` Can be used in places were you may not need a full page scroller, but a highly customized one, such as image scubber or comment scroller.\n     * @usage\n     * ```html\n     * <ion-scroll scroll-x=\"true\">\n     * </ion-scroll>\n     *\n     * <ion-scroll scroll-y=\"true\">\n     * </ion-scroll>\n     *\n     * <ion-scroll scroll-x=\"true\" scroll-y=\"true\">\n     * </ion-scroll>\n     * ```\n     *@property {boolean} [scroll-x] - whether to enable scrolling along the X axis\n     *@property {boolean} [scroll-y] - whether to enable scrolling along the Y axis\n     *@property {boolean} [zoom] - whether to enable zooming\n     *@property {number} [max-zoom] - set the max zoom amount for ion-scroll\n     */\n    \"use strict\";\n\n    var Component, ElementRef, Ion, Config, __decorate, __metadata, Scroll, _a, _b;\n\n    var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();\n\n    var _get = function get(_x, _x2, _x3) { var _again = true; _function: while (_again) { var object = _x, property = _x2, receiver = _x3; _again = false; if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { _x = parent; _x2 = property; _x3 = receiver; _again = true; desc = parent = undefined; continue _function; } } else if (\"value\" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } } };\n\n    function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n    function _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\n    return {\n        setters: [function (_angular2Angular2) {\n            Component = _angular2Angular2.Component;\n            ElementRef = _angular2Angular2.ElementRef;\n        }, function (_ion) {\n            Ion = _ion.Ion;\n        }, function (_configConfig) {\n            Config = _configConfig.Config;\n        }],\n        execute: function () {\n            __decorate = undefined && undefined.__decorate || function (decorators, target, key, desc) {\n                if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") return Reflect.decorate(decorators, target, key, desc);\n                switch (arguments.length) {\n                    case 2:\n                        return decorators.reduceRight(function (o, d) {\n                            return d && d(o) || o;\n                        }, target);\n                    case 3:\n                        return decorators.reduceRight(function (o, d) {\n                            return d && d(target, key), void 0;\n                        }, void 0);\n                    case 4:\n                        return decorators.reduceRight(function (o, d) {\n                            return d && d(target, key, o) || o;\n                        }, desc);\n                }\n            };\n\n            __metadata = undefined && undefined.__metadata || function (k, v) {\n                if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n            };\n\n            Scroll = (function (_Ion) {\n                _inherits(Scroll, _Ion);\n\n                function Scroll(elementRef, Config) {\n                    _classCallCheck(this, Scroll);\n\n                    _get(Object.getPrototypeOf(Scroll.prototype), \"constructor\", this).call(this, elementRef, Config);\n                    this.maxScale = 3;\n                    this.zoomDuration = 250;\n                }\n\n                /**\n                 * @private\n                 */\n\n                _createClass(Scroll, [{\n                    key: \"onInit\",\n                    value: function onInit() {\n                        this.scrollElement = this.getNativeElement().children[0];\n                    }\n\n                    /**\n                     * Add a scroll event handler to the scroll element if it exists.\n                     * @param {Function} handler  The scroll handler to add to the scroll element.\n                     * @returns {?Function} a function to remove the specified handler, otherwise\n                     * undefined if the scroll element doesn't exist.\n                     */\n                }, {\n                    key: \"addScrollEventListener\",\n                    value: function addScrollEventListener(handler) {\n                        var _this = this;\n\n                        if (!this.scrollElement) {\n                            return;\n                        }\n                        this.scrollElement.addEventListener('scroll', handler);\n                        return function () {\n                            _this.scrollElement.removeEventListener('scroll', handler);\n                        };\n                    }\n                }]);\n\n                return Scroll;\n            })(Ion);\n\n            _export(\"Scroll\", Scroll);\n\n            _export(\"Scroll\", Scroll = __decorate([Component({\n                selector: 'ion-scroll',\n                inputs: ['scrollX', 'scrollY', 'zoom', 'maxZoom'],\n                host: {\n                    '[class.scroll-x]': 'scrollX',\n                    '[class.scroll-y]': 'scrollY'\n                },\n                template: '<scroll-content>' + '<div class=\"scroll-zoom-wrapper\">' + '<ng-content></ng-content>' + '</div>' + '</scroll-content>'\n            }), __metadata('design:paramtypes', [typeof (_a = typeof ElementRef !== 'undefined' && ElementRef) === 'function' && _a || Object, typeof (_b = typeof Config !== 'undefined' && Config) === 'function' && _b || Object])], Scroll));\n        }\n    };\n});\nSystem.register(\"ionic/components/searchbar/searchbar\", [\"angular2/angular2\", \"../ion\", \"../../config/config\", \"../../config/decorators\", \"../icon/icon\"], function (_export) {\n    /**\n     * @name Searchbar\n     * @module ionic\n     * @description\n     * Manages the display of a search bar which can be used to search or filter items.\n     *\n     * @usage\n     * ```html\n     * <ion-searchbar [(ng-model)]=\"defaultSearch\"></ion-searchbar>\n     * ```\n     *\n     * @property [placeholder] - sets input placeholder to value passed in\n     * @property [show-cancel] - shows the cancel button based on boolean value passed in\n     * @property [cancel-text] - sets the cancel button text to the value passed in\n     * @property [cancel-action] - the function that gets called by clicking the cancel button\n     * @see {@link /docs/components#search Search Component Docs}\n     */\n    \"use strict\";\n\n    var ElementRef, NgControl, Renderer, FORM_DIRECTIVES, NgIf, NgClass, Ion, Config, ConfigComponent, Icon, __decorate, __metadata, Searchbar, _a, _b, _c, _d;\n\n    var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();\n\n    var _get = function get(_x, _x2, _x3) { var _again = true; _function: while (_again) { var object = _x, property = _x2, receiver = _x3; _again = false; if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { _x = parent; _x2 = property; _x3 = receiver; _again = true; desc = parent = undefined; continue _function; } } else if (\"value\" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } } };\n\n    function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n    function _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\n    return {\n        setters: [function (_angular2Angular2) {\n            ElementRef = _angular2Angular2.ElementRef;\n            NgControl = _angular2Angular2.NgControl;\n            Renderer = _angular2Angular2.Renderer;\n            FORM_DIRECTIVES = _angular2Angular2.FORM_DIRECTIVES;\n            NgIf = _angular2Angular2.NgIf;\n            NgClass = _angular2Angular2.NgClass;\n        }, function (_ion) {\n            Ion = _ion.Ion;\n        }, function (_configConfig) {\n            Config = _configConfig.Config;\n        }, function (_configDecorators) {\n            ConfigComponent = _configDecorators.ConfigComponent;\n        }, function (_iconIcon) {\n            Icon = _iconIcon.Icon;\n        }],\n        execute: function () {\n            __decorate = undefined && undefined.__decorate || function (decorators, target, key, desc) {\n                if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") return Reflect.decorate(decorators, target, key, desc);\n                switch (arguments.length) {\n                    case 2:\n                        return decorators.reduceRight(function (o, d) {\n                            return d && d(o) || o;\n                        }, target);\n                    case 3:\n                        return decorators.reduceRight(function (o, d) {\n                            return d && d(target, key), void 0;\n                        }, void 0);\n                    case 4:\n                        return decorators.reduceRight(function (o, d) {\n                            return d && d(target, key, o) || o;\n                        }, desc);\n                }\n            };\n\n            __metadata = undefined && undefined.__metadata || function (k, v) {\n                if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n            };\n\n            Searchbar = (function (_Ion) {\n                _inherits(Searchbar, _Ion);\n\n                function Searchbar(elementRef, config, ngControl, renderer) {\n                    _classCallCheck(this, Searchbar);\n\n                    _get(Object.getPrototypeOf(Searchbar.prototype), \"constructor\", this).call(this, elementRef, config);\n                    this.renderer = renderer;\n                    this.elementRef = elementRef;\n                    // If there is no control then we shouldn't do anything\n                    if (!ngControl) return;\n                    this.ngControl = ngControl;\n                    this.ngControl.valueAccessor = this;\n                }\n\n                /**\n                 * @private\n                 * After the view has initialized check if the searchbar has a value\n                 * and then store that value in query\n                 */\n\n                _createClass(Searchbar, [{\n                    key: \"afterViewInit\",\n                    value: function afterViewInit() {\n                        // If the user passes in a value to the model we should left align\n                        this.shouldLeftAlign = this.ngControl.value && this.ngControl.value.trim() != '';\n                        this.query = this.ngControl.value || '';\n                    }\n\n                    /**\n                     * @private\n                     * Write a new value to the element.\n                     */\n                }, {\n                    key: \"writeValue\",\n                    value: function writeValue(value) {\n                        this.query = value;\n                    }\n\n                    /**\n                     * @private\n                     * Set the function to be called when the control receives a change event.\n                     */\n                }, {\n                    key: \"registerOnChange\",\n                    value: function registerOnChange(fn) {\n                        this.onChange = fn;\n                    }\n\n                    /**\n                     * @private\n                     * Set the function to be called when the control receives a touch event.\n                     */\n                }, {\n                    key: \"registerOnTouched\",\n                    value: function registerOnTouched(fn) {\n                        this.onTouched = fn;\n                    }\n\n                    /**\n                     * @private\n                     * Updates the value of the control when the searchbar input changes.\n                     */\n                }, {\n                    key: \"inputChanged\",\n                    value: function inputChanged(event) {\n                        this.writeValue(event.target.value);\n                        this.onChange(event.target.value);\n                    }\n\n                    /**\n                     * @private\n                     * Sets the searchbar to focused and aligned left on input focus.\n                     */\n                }, {\n                    key: \"inputFocused\",\n                    value: function inputFocused() {\n                        this.isFocused = true;\n                        this.shouldLeftAlign = true;\n                    }\n\n                    /**\n                     * @private\n                     * Sets the searchbar to not focused and checks if it should align left\n                     * based on whether there is a value in the searchbar or not on input blur.\n                     */\n                }, {\n                    key: \"inputBlurred\",\n                    value: function inputBlurred() {\n                        this.isFocused = false;\n                        this.shouldLeftAlign = this.ngControl.value && this.ngControl.value.trim() != '';\n                    }\n\n                    /**\n                     * @private\n                     * Clears the input field and triggers the control change.\n                     */\n                }, {\n                    key: \"clearInput\",\n                    value: function clearInput(event) {\n                        this.writeValue('');\n                        this.onChange('');\n                    }\n\n                    /**\n                     * @private\n                     * Blurs the input field, clears the input field and removes the left align\n                     * then calls the custom cancel function if the user passed one in.\n                     */\n                }, {\n                    key: \"cancelSearchbar\",\n                    value: function cancelSearchbar(event, query) {\n                        this.element = this.elementRef.nativeElement.querySelector('input');\n                        this.element.blur();\n                        this.clearInput();\n                        this.shouldLeftAlign = false;\n                        this.cancelAction && this.cancelAction(event, query);\n                    }\n                }]);\n\n                return Searchbar;\n            })(Ion);\n\n            _export(\"Searchbar\", Searchbar);\n\n            _export(\"Searchbar\", Searchbar = __decorate([ConfigComponent({\n                selector: 'ion-searchbar',\n                defaultInputs: {\n                    'showCancel': false,\n                    'cancelText': 'Cancel',\n                    'placeholder': 'Search'\n                },\n                inputs: ['cancelAction'],\n                host: {\n                    '[class.left-align]': 'shouldLeftAlign',\n                    '[class.focused]': 'isFocused'\n                },\n                template: '<div class=\"searchbar-input-container\">' + '<button (click)=\"cancelSearchbar($event, query)\" clear dark class=\"searchbar-cancel-icon\"><icon arrow-back></icon></button>' + '<div class=\"searchbar-search-icon\"></div>' + '<input [(value)]=\"query\" (focus)=\"inputFocused()\" (blur)=\"inputBlurred()\" ' + '(input)=\"inputChanged($event)\" class=\"searchbar-input\" type=\"search\" [attr.placeholder]=\"placeholder\">' + '<button clear *ng-if=\"query\" class=\"searchbar-close-icon\" (click)=\"clearInput($event)\"></button>' + '</div>' + '<button *ng-if=\"showCancel\" (click)=\"cancelSearchbar($event, query)\" class=\"searchbar-cancel\">{{cancelText}}</button>',\n                directives: [FORM_DIRECTIVES, NgIf, NgClass, Icon]\n            }), __metadata('design:paramtypes', [typeof (_a = typeof ElementRef !== 'undefined' && ElementRef) === 'function' && _a || Object, typeof (_b = typeof Config !== 'undefined' && Config) === 'function' && _b || Object, typeof (_c = typeof NgControl !== 'undefined' && NgControl) === 'function' && _c || Object, typeof (_d = typeof Renderer !== 'undefined' && Renderer) === 'function' && _d || Object])], Searchbar));\n        }\n    };\n});\nSystem.register(\"ionic/components/segment/segment\", [\"angular2/angular2\", \"../ion\", \"../../config/config\"], function (_export) {\n    /**\n     * @name Segment\n     * @description\n     * A Segment is a group of buttons, sometimes known as Segmented Controls, that allow the user to interact with a compact group of a number of controls.\n     * Segments provide functionality similar to tabs, selecting one will unselect all others. You should use a tab bar instead of a segmented control when you want to let the user move back and forth between distinct pages in your app.\n     * You could use Angular 2's `ng-model` or `FormBuilder` API. For an overview on how `FormBuilder` works, checkout [Angular 2 Forms](http://learnangular2.com/forms/), or [Angular FormBuilder](https://angular.io/docs/ts/latest/api/common/FormBuilder-class.html)\n     *\n     *\n     * @usage\n     * ```html\n     * <ion-segment [(ng-model)]=\"relationship\" danger>\n     *   <ion-segment-button value=\"friends\">\n     *     Friends\n     *   </ion-segment-button>\n     *   <ion-segment-button value=\"enemies\">\n     *     Enemies\n     *   </ion-segment-button>\n     * </ion-segment>\n     *```\n     *\n     * Or with `FormBuilder`\n     *\n     *```html\n     * <form [ng-form-model]=\"myForm\">\n     *   <ion-segment ng-control=\"mapStyle\" danger>\n     *     <ion-segment-button value=\"standard\">\n     *       Standard\n     *     </ion-segment-button>\n     *     <ion-segment-button value=\"hybrid\">\n     *       Hybrid\n     *     </ion-segment-button>\n     *     <ion-segment-button value=\"sat\">\n     *       Satellite\n     *     </ion-segment-button>\n     *   </ion-segment>\n     * </form>\n     * ```\n     *\n     * @see {@link /docs/components#segment Segment Component Docs}\n     * @see [Angular 2 Forms](http://learnangular2.com/forms/)\n     */\n    \"use strict\";\n\n    var Directive, Renderer, ElementRef, Host, Optional, NgControl, Ion, Config, __decorate, __metadata, __param, Segment, SegmentButton, _a, _b, _c, _d, _e;\n\n    var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();\n\n    var _get = function get(_x, _x2, _x3) { var _again = true; _function: while (_again) { var object = _x, property = _x2, receiver = _x3; _again = false; if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { _x = parent; _x2 = property; _x3 = receiver; _again = true; desc = parent = undefined; continue _function; } } else if (\"value\" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } } };\n\n    function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n    function _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\n    return {\n        setters: [function (_angular2Angular2) {\n            Directive = _angular2Angular2.Directive;\n            Renderer = _angular2Angular2.Renderer;\n            ElementRef = _angular2Angular2.ElementRef;\n            Host = _angular2Angular2.Host;\n            Optional = _angular2Angular2.Optional;\n            NgControl = _angular2Angular2.NgControl;\n        }, function (_ion) {\n            Ion = _ion.Ion;\n        }, function (_configConfig) {\n            Config = _configConfig.Config;\n        }],\n        execute: function () {\n            __decorate = undefined && undefined.__decorate || function (decorators, target, key, desc) {\n                if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") return Reflect.decorate(decorators, target, key, desc);\n                switch (arguments.length) {\n                    case 2:\n                        return decorators.reduceRight(function (o, d) {\n                            return d && d(o) || o;\n                        }, target);\n                    case 3:\n                        return decorators.reduceRight(function (o, d) {\n                            return d && d(target, key), void 0;\n                        }, void 0);\n                    case 4:\n                        return decorators.reduceRight(function (o, d) {\n                            return d && d(target, key, o) || o;\n                        }, desc);\n                }\n            };\n\n            __metadata = undefined && undefined.__metadata || function (k, v) {\n                if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n            };\n\n            __param = undefined && undefined.__param || function (paramIndex, decorator) {\n                return function (target, key) {\n                    decorator(target, key, paramIndex);\n                };\n            };\n\n            Segment = (function (_Ion) {\n                _inherits(Segment, _Ion);\n\n                function Segment(ngControl, elementRef, config) {\n                    _classCallCheck(this, Segment);\n\n                    _get(Object.getPrototypeOf(Segment.prototype), \"constructor\", this).call(this, elementRef, config);\n                    /**\n                     * @private\n                     */\n                    this.buttons = [];\n                    this.onChange = function (_) {};\n                    this.onTouched = function (_) {};\n                    if (ngControl) ngControl.valueAccessor = this;\n                }\n\n                /**\n                 * @private\n                 */\n\n                _createClass(Segment, [{\n                    key: \"writeValue\",\n                    value: function writeValue(value) {\n                        this.value = !value ? '' : value;\n                    }\n\n                    /**\n                     * @private\n                     */\n                }, {\n                    key: \"registerOnChange\",\n                    value: function registerOnChange(fn) {\n                        this.onChange = fn;\n                    }\n\n                    /**\n                     * @private\n                     */\n                }, {\n                    key: \"registerOnTouched\",\n                    value: function registerOnTouched(fn) {\n                        this.onTouched = fn;\n                    }\n\n                    /**\n                     * @private\n                     * Called by child SegmentButtons to bind themselves to\n                     * the Segment.\n                     * @param {SegmentButton} segmentButton  The child SegmentButton to register.\n                     */\n                }, {\n                    key: \"register\",\n                    value: function register(segmentButton) {\n                        this.buttons.push(segmentButton);\n                        // If this button is registered and matches our value,\n                        // make sure to select it\n                        if (this.value == segmentButton.value) {\n                            this.selected(segmentButton);\n                        }\n                    }\n\n                    /**\n                     * @private\n                     * Select the button with the given value.\n                     * @param {string} value  Value of the button to select.\n                     */\n                }, {\n                    key: \"selectFromValue\",\n                    value: function selectFromValue(value) {\n                        if (this.buttons.length == 0) {\n                            return;\n                        }\n                        this.buttons.forEach(function (button) {\n                            if (button.value === value) {\n                                button.isActive = true;\n                            }\n                        });\n                    }\n\n                    /**\n                     * @private\n                     * Indicate a button should be selected.\n                     * @param {SegmentButton} segmentButton  The button to select.\n                     */\n                }, {\n                    key: \"selected\",\n                    value: function selected(segmentButton) {\n                        this.buttons.forEach(function (button) {\n                            button.isActive = false;\n                        });\n                        segmentButton.isActive = true;\n                        this.value = segmentButton.value;\n                        this.onChange(segmentButton.value);\n                    }\n                }]);\n\n                return Segment;\n            })(Ion);\n\n            _export(\"Segment\", Segment);\n\n            _export(\"Segment\", Segment = __decorate([Directive({\n                selector: 'ion-segment'\n            }), __param(0, Optional()), __metadata('design:paramtypes', [typeof (_a = typeof NgControl !== 'undefined' && NgControl) === 'function' && _a || Object, typeof (_b = typeof ElementRef !== 'undefined' && ElementRef) === 'function' && _b || Object, typeof (_c = typeof Config !== 'undefined' && Config) === 'function' && _c || Object])], Segment));\n            /**\n             * @name SegmentButton\n             * @description\n             * The child buttons of the `ion-segment` component. Each `ion-segment-button` must have a value.\n             * @property {string} [value] - the value of the segment-button.\n             * @usage\n             * ```html\n             * <ion-segment [(ng-model)]=\"relationship\" danger>\n             *   <ion-segment-button value=\"friends\">\n             *     Friends\n             *   </ion-segment-button>\n             *   <ion-segment-button value=\"enemies\">\n             *     Enemies\n             *   </ion-segment-button>\n             * </ion-segment>\n             *```\n             *\n             * Or with `FormBuilder`\n             *\n             *```html\n             * <form [ng-form-model]=\"myForm\">\n             *   <ion-segment ng-control=\"mapStyle\" danger>\n             *     <ion-segment-button value=\"standard\">\n             *       Standard\n             *     </ion-segment-button>\n             *     <ion-segment-button value=\"hybrid\">\n             *       Hybrid\n             *     </ion-segment-button>\n             *     <ion-segment-button value=\"sat\">\n             *       Satellite\n             *     </ion-segment-button>\n             *   </ion-segment>\n             * </form>\n             * ```\n             * @see {@link /docs/components#segment Segment Component Docs}\n             * @see {@link /docs/api/components/segment/Segment/ Segment API Docs}\n             */\n\n            SegmentButton = (function () {\n                function SegmentButton(segment, elementRef, renderer) {\n                    _classCallCheck(this, SegmentButton);\n\n                    this.segment = segment;\n                    renderer.setElementAttribute(elementRef, 'button', '');\n                    renderer.setElementAttribute(elementRef, 'outline', '');\n                }\n\n                /**\n                 * @private\n                 */\n\n                _createClass(SegmentButton, [{\n                    key: \"onInit\",\n                    value: function onInit() {\n                        this.segment.register(this);\n                    }\n\n                    /**\n                     * @private\n                     */\n                }, {\n                    key: \"click\",\n                    value: function click(event) {\n                        this.segment.selected(this, event);\n                    }\n                }]);\n\n                return SegmentButton;\n            })();\n\n            _export(\"SegmentButton\", SegmentButton);\n\n            _export(\"SegmentButton\", SegmentButton = __decorate([Directive({\n                selector: 'ion-segment-button',\n                inputs: ['value'],\n                host: {\n                    '(click)': 'click($event)',\n                    '[class.segment-activated]': 'isActive'\n                }\n            }), __param(0, Host()), __metadata('design:paramtypes', [Segment, typeof (_d = typeof ElementRef !== 'undefined' && ElementRef) === 'function' && _d || Object, typeof (_e = typeof Renderer !== 'undefined' && Renderer) === 'function' && _e || Object])], SegmentButton));\n        }\n    };\n});\nSystem.register(\"ionic/components/show-hide-when/show-hide-when\", [\"angular2/angular2\", \"../../platform/platform\"], function (_export) {\n    \"use strict\";\n\n    var Directive, Attribute, NgZone, Platform, __decorate, __metadata, __param, DisplayWhen, ShowWhen, HideWhen, _a, _b, _c, _d;\n\n    var _get = function get(_x, _x2, _x3) { var _again = true; _function: while (_again) { var object = _x, property = _x2, receiver = _x3; _again = false; if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { _x = parent; _x2 = property; _x3 = receiver; _again = true; desc = parent = undefined; continue _function; } } else if (\"value\" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } } };\n\n    var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();\n\n    function _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\n    function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n    return {\n        setters: [function (_angular2Angular2) {\n            Directive = _angular2Angular2.Directive;\n            Attribute = _angular2Angular2.Attribute;\n            NgZone = _angular2Angular2.NgZone;\n        }, function (_platformPlatform) {\n            Platform = _platformPlatform.Platform;\n        }],\n        execute: function () {\n            __decorate = undefined && undefined.__decorate || function (decorators, target, key, desc) {\n                if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") return Reflect.decorate(decorators, target, key, desc);\n                switch (arguments.length) {\n                    case 2:\n                        return decorators.reduceRight(function (o, d) {\n                            return d && d(o) || o;\n                        }, target);\n                    case 3:\n                        return decorators.reduceRight(function (o, d) {\n                            return d && d(target, key), void 0;\n                        }, void 0);\n                    case 4:\n                        return decorators.reduceRight(function (o, d) {\n                            return d && d(target, key, o) || o;\n                        }, desc);\n                }\n            };\n\n            __metadata = undefined && undefined.__metadata || function (k, v) {\n                if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n            };\n\n            __param = undefined && undefined.__param || function (paramIndex, decorator) {\n                return function (target, key) {\n                    decorator(target, key, paramIndex);\n                };\n            };\n\n            DisplayWhen = (function () {\n                function DisplayWhen(conditions, platform, ngZone) {\n                    var _this = this;\n\n                    _classCallCheck(this, DisplayWhen);\n\n                    this.isMatch = false;\n                    this.platform = platform;\n                    if (!conditions) return;\n                    this.conditions = conditions.split(',');\n                    // check if its one of the matching platforms first\n                    // a platform does not change during the life of an app\n                    for (var i = 0; i < this.conditions.length; i++) {\n                        if (this.conditions[i] && platform.is(this.conditions[i])) {\n                            this.isMatch = true;\n                            return;\n                        }\n                    }\n                    if (this.orientation()) {\n                        // add window resize listener\n                        platform.onResize(function () {\n                            ngZone.run(function () {\n                                _this.orientation();\n                            });\n                        });\n                        return;\n                    }\n                }\n\n                /**\n                 *\n                 * The `show-when` attribute takes a value or expression, and only shows the element it has been added to when\n                 * the value or expression is true. Complements the [hide-when attribute](../HideWhen).\n                 * @usage\n                 * ```html\n                 * <div show-when=\"false\">I am hidden!</div>\n                 * ```\n                 */\n\n                _createClass(DisplayWhen, [{\n                    key: \"orientation\",\n                    value: function orientation() {\n                        for (var i = 0; i < this.conditions.length; i++) {\n                            if (this.conditions[i] == 'portrait') {\n                                this.isMatch = this.platform.isPortrait();\n                                return true;\n                            }\n                            if (this.conditions[i] == 'landscape') {\n                                this.isMatch = this.platform.isLandscape();\n                                return true;\n                            }\n                        }\n                    }\n                }]);\n\n                return DisplayWhen;\n            })();\n\n            ShowWhen = (function (_DisplayWhen) {\n                _inherits(ShowWhen, _DisplayWhen);\n\n                function ShowWhen(showWhen, platform, ngZone) {\n                    _classCallCheck(this, ShowWhen);\n\n                    _get(Object.getPrototypeOf(ShowWhen.prototype), \"constructor\", this).call(this, showWhen, platform, ngZone);\n                }\n\n                /**\n                 * @private\n                 */\n\n                _createClass(ShowWhen, [{\n                    key: \"hidden\",\n                    get: function get() {\n                        return !this.isMatch;\n                    }\n                }]);\n\n                return ShowWhen;\n            })(DisplayWhen);\n\n            _export(\"ShowWhen\", ShowWhen);\n\n            _export(\"ShowWhen\", ShowWhen = __decorate([Directive({\n                selector: '[show-when]',\n                host: {\n                    '[hidden]': 'hidden'\n                }\n            }), __param(0, Attribute('show-when')), __metadata('design:paramtypes', [String, typeof (_a = typeof Platform !== 'undefined' && Platform) === 'function' && _a || Object, typeof (_b = typeof NgZone !== 'undefined' && NgZone) === 'function' && _b || Object])], ShowWhen));\n            /**\n             *\n             * The `hide-when` attribute takes a value or expression, and hides the element it has been added to when\n             * the value or expression is true. Complements the [show-when attribute](../ShowWhen).\n             * @usage\n             * ```html\n             * <div hide-when=\"true\">I am hidden!</div>\n             * ```\n             */\n\n            HideWhen = (function (_DisplayWhen2) {\n                _inherits(HideWhen, _DisplayWhen2);\n\n                function HideWhen(hideWhen, platform, ngZone) {\n                    _classCallCheck(this, HideWhen);\n\n                    _get(Object.getPrototypeOf(HideWhen.prototype), \"constructor\", this).call(this, hideWhen, platform, ngZone);\n                }\n\n                /**\n                 * @private\n                 */\n\n                _createClass(HideWhen, [{\n                    key: \"hidden\",\n                    get: function get() {\n                        return this.isMatch;\n                    }\n                }]);\n\n                return HideWhen;\n            })(DisplayWhen);\n\n            _export(\"HideWhen\", HideWhen);\n\n            _export(\"HideWhen\", HideWhen = __decorate([Directive({\n                selector: '[hide-when]',\n                host: {\n                    '[hidden]': 'hidden'\n                }\n            }), __param(0, Attribute('hide-when')), __metadata('design:paramtypes', [String, typeof (_c = typeof Platform !== 'undefined' && Platform) === 'function' && _c || Object, typeof (_d = typeof NgZone !== 'undefined' && NgZone) === 'function' && _d || Object])], HideWhen));\n        }\n    };\n});\nSystem.register(\"ionic/components/slides/slides\", [\"angular2/angular2\", \"../ion\", \"ionic/animations/animation\", \"ionic/gestures/gesture\", \"../../config/config\", \"ionic/util\", \"../../util/dom\", \"./swiper-widget\"], function (_export) {\n    /**\n     * @name Slides\n     * @description\n     * Slides is a slide box implementation based on Swiper.js\n     *\n     * Swiper.js:\n     * The most modern mobile touch slider and framework with hardware accelerated transitions\n     *\n     * http://www.idangero.us/swiper/\n     *\n     * Copyright 2015, Vladimir Kharlampidi\n     * The iDangero.us\n     * http://www.idangero.us/\n     *\n     * Licensed under MIT\n     *\n     * @usage\n     * ```ts\n     * @Page({\n     *  template: `\n     *     <ion-slides pager (slide-changed)=\"onSlideChanged($event)\" loop=\"true\" autoplay=\"true\">\n     *      <ion-slide>\n     *        <h3>Thank you for choosing the Awesome App!</h3>\n     *        <p>\n     *          The number one app for everything awesome.\n     *        </p>\n     *      </ion-slide>\n     *      <ion-slide>\n     *        <h3>Using Awesome</h3>\n     *         <div id=\"list\">\n     *           <h5>Just three steps:</h5>\n     *           <ol>\n     *             <li>Be awesome</li>\n     *             <li>Stay awesome</li>\n     *             <li>There is no step 3</li>\n     *           </ol>\n     *         </div>\n     *      </ion-slide>\n     *      <ion-slide>\n     *        <h3>Any questions?</h3>\n     *      </ion-slide>\n     *    </ion-slides>\n     *    `\n     *})\n     *\n     *```\n     * @property {Boolean} [autoplay] - whether or not the slides should automatically change\n     * @property {Boolean} [loop] - whether the slides should loop from the last slide back to the first\n     * @property {Boolean} [bounce] - whether the slides should bounce\n     * @property {Number} [index] - The slide index to start on\n     * @property [pager] - add this property to enable the slide pager\n     * @property {Any} [slideChanged] - expression to evaluate when a slide has been changed\n     * @see {@link /docs/components#slides Slides Component Docs}\n     */\n    \"use strict\";\n\n    var Directive, Component, ElementRef, Host, NgClass, EventEmitter, Ion, Animation, Gesture, Config, dom, util, CSS, Swiper, __decorate, __metadata, __param, Slides, Slide, SlideLazy, _a, _b, _c, _d;\n\n    var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();\n\n    var _get = function get(_x, _x2, _x3) { var _again = true; _function: while (_again) { var object = _x, property = _x2, receiver = _x3; _again = false; if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { _x = parent; _x2 = property; _x3 = receiver; _again = true; desc = parent = undefined; continue _function; } } else if (\"value\" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } } };\n\n    function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n    function _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\n    return {\n        setters: [function (_angular2Angular2) {\n            Directive = _angular2Angular2.Directive;\n            Component = _angular2Angular2.Component;\n            ElementRef = _angular2Angular2.ElementRef;\n            Host = _angular2Angular2.Host;\n            NgClass = _angular2Angular2.NgClass;\n            EventEmitter = _angular2Angular2.EventEmitter;\n        }, function (_ion) {\n            Ion = _ion.Ion;\n        }, function (_ionicAnimationsAnimation) {\n            Animation = _ionicAnimationsAnimation.Animation;\n        }, function (_ionicGesturesGesture) {\n            Gesture = _ionicGesturesGesture.Gesture;\n        }, function (_configConfig) {\n            Config = _configConfig.Config;\n        }, function (_ionicUtil) {\n            dom = _ionicUtil.dom;\n            util = _ionicUtil;\n        }, function (_utilDom) {\n            CSS = _utilDom.CSS;\n        }, function (_swiperWidget) {\n            Swiper = _swiperWidget.Swiper;\n        }],\n        execute: function () {\n            __decorate = undefined && undefined.__decorate || function (decorators, target, key, desc) {\n                if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") return Reflect.decorate(decorators, target, key, desc);\n                switch (arguments.length) {\n                    case 2:\n                        return decorators.reduceRight(function (o, d) {\n                            return d && d(o) || o;\n                        }, target);\n                    case 3:\n                        return decorators.reduceRight(function (o, d) {\n                            return d && d(target, key), void 0;\n                        }, void 0);\n                    case 4:\n                        return decorators.reduceRight(function (o, d) {\n                            return d && d(target, key, o) || o;\n                        }, desc);\n                }\n            };\n\n            __metadata = undefined && undefined.__metadata || function (k, v) {\n                if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n            };\n\n            __param = undefined && undefined.__param || function (paramIndex, decorator) {\n                return function (target, key) {\n                    decorator(target, key, paramIndex);\n                };\n            };\n\n            Slides = (function (_Ion) {\n                _inherits(Slides, _Ion);\n\n                /**\n                 * @private\n                 * @param {ElementRef} elementRef  TODO\n                 */\n\n                function Slides(elementRef, config) {\n                    var _this = this;\n\n                    _classCallCheck(this, Slides);\n\n                    _get(Object.getPrototypeOf(Slides.prototype), \"constructor\", this).call(this, elementRef, config);\n                    this.rapidUpdate = util.debounce(function () {\n                        _this.update();\n                    }, 10);\n                    this.slideChanged = new EventEmitter('slideChanged');\n                }\n\n                /**\n                 * @private\n                 */\n\n                _createClass(Slides, [{\n                    key: \"onInit\",\n                    value: function onInit() {\n                        var _this2 = this;\n\n                        if (!this.options) {\n                            this.options = {};\n                        }\n                        this.showPager = util.isTrueProperty(this.pager);\n                        var options = util.defaults({\n                            loop: this.loop,\n                            pagination: '.swiper-pagination',\n                            paginationClickable: true,\n                            lazyLoading: true,\n                            preloadImages: false\n                        }, this.options);\n                        options.onTap = function (swiper, e) {\n                            _this2.onTap(swiper, e);\n                            return _this2.options.onTap && _this2.options.onTap(swiper, e);\n                        };\n                        options.onClick = function (swiper, e) {\n                            _this2.onClick(swiper, e);\n                            return _this2.options.onClick && _this2.options.onClick(swiper, e);\n                        };\n                        options.onDoubleTap = function (swiper, e) {\n                            _this2.onDoubleTap(swiper, e);\n                            return _this2.options.onDoubleTap && _this2.options.onDoubleTap(swiper, e);\n                        };\n                        options.onTransitionStart = function (swiper, e) {\n                            _this2.onTransitionStart(swiper, e);\n                            return _this2.options.onTransitionStart && _this2.options.onTransitionStart(swiper, e);\n                        };\n                        options.onTransitionEnd = function (swiper, e) {\n                            _this2.onTransitionEnd(swiper, e);\n                            return _this2.options.onTransitionEnd && _this2.options.onTransitionEnd(swiper, e);\n                        };\n                        options.onSlideChangeStart = function (swiper) {\n                            return _this2.options.onSlideChangeStart && _this2.options.onSlideChangeStart(swiper);\n                        };\n                        options.onSlideChangeEnd = function (swiper) {\n                            _this2.slideChanged.next(swiper);\n                            return _this2.options.onSlideChangeEnd && _this2.options.onSlideChangeEnd(swiper);\n                        };\n                        options.onLazyImageLoad = function (swiper, slide, img) {\n                            return _this2.options.onLazyImageLoad && _this2.options.onLazyImageLoad(swiper, slide, img);\n                        };\n                        options.onLazyImageReady = function (swiper, slide, img) {\n                            return _this2.options.onLazyImageReady && _this2.options.onLazyImageReady(swiper, slide, img);\n                        };\n                        var swiper = new Swiper(this.getNativeElement().children[0], options);\n                        this.slider = swiper;\n                        /*\n                        * TODO: Finish this\n                        if(util.isTrueProperty(this.zoom)) {\n                          this.enableZoom = true;\n                          setTimeout(() => {\n                            this.initZoom();\n                          })\n                        }\n                        */\n                    }\n\n                    /**\n                     * @private\n                     */\n                }, {\n                    key: \"onTap\",\n                    value: function onTap(swiper, e) {}\n\n                    /**\n                     * @private\n                     */\n                }, {\n                    key: \"onClick\",\n                    value: function onClick(swiper, e) {}\n\n                    /**\n                     * @private\n                     */\n                }, {\n                    key: \"onDoubleTap\",\n                    value: function onDoubleTap(swiper, e) {\n                        this.toggleZoom(swiper, e);\n                    }\n\n                    /**\n                     * @private\n                     */\n                }, {\n                    key: \"onLazyImageLoad\",\n                    value: function onLazyImageLoad(swiper, slide, img) {}\n\n                    /**\n                     * @private\n                     */\n                }, {\n                    key: \"onLazyImageReady\",\n                    value: function onLazyImageReady(swiper, slide, img) {}\n\n                    /*\n                    nextButton(swiper, e) {\n                    }\n                    prevButton() {\n                    }\n                    indexButton() {\n                    }\n                    */\n                    /**\n                     * @private\n                     */\n                }, {\n                    key: \"initZoom\",\n                    value: function initZoom() {\n                        var _this3 = this;\n\n                        this.zoomDuration = this.zoomDuration || 230;\n                        this.maxScale = this.zoomMax || 3;\n                        this.zoomElement = this.getNativeElement().children[0].children[0];\n                        this.zoomElement && this.zoomElement.classList.add('ion-scroll-zoom');\n                        this.zoomGesture = new Gesture(this.zoomElement);\n                        this.zoomGesture.listen();\n                        this.scale = 1;\n                        this.zoomLastPosX = 0;\n                        this.zoomLastPosY = 0;\n                        var last_scale = undefined,\n                            startX = undefined,\n                            startY = undefined,\n                            posX = 0,\n                            posY = 0,\n                            zoomRect = undefined;\n                        this.viewportWidth = this.getNativeElement().offsetWidth;\n                        this.viewportHeight = this.getNativeElement().offsetHeight;\n                        this.zoomElement.addEventListener('touchstart', function (e) {\n                            _this3.onTouchStart(e);\n                        });\n                        this.zoomElement.addEventListener('touchmove', function (e) {\n                            _this3.onTouchMove(e);\n                        });\n                        this.zoomElement.addEventListener('touchend', function (e) {\n                            _this3.onTouchEnd(e);\n                        });\n                        this.zoomGesture.on('pinchstart', function (e) {\n                            last_scale = _this3.scale;\n                            console.log('Last scale', e.scale);\n                        });\n                        this.zoomGesture.on('pinch', function (e) {\n                            _this3.scale = Math.max(1, Math.min(last_scale * e.scale, 10));\n                            console.log('Scaling', _this3.scale);\n                            _this3.zoomElement.style[CSS.transform] = 'scale(' + _this3.scale + ')';\n                            zoomRect = _this3.zoomElement.getBoundingClientRect();\n                        });\n                        this.zoomGesture.on('pinchend', function (e) {\n                            //last_scale = Math.max(1, Math.min(last_scale * e.scale, 10));\n                            if (_this3.scale > _this3.maxScale) {\n                                var za = new Animation(_this3.zoomElement).duration(_this3.zoomDuration).easing('linear').from('scale', _this3.scale).to('scale', _this3.maxScale);\n                                za.play();\n                                _this3.scale = _this3.maxScale;\n                            }\n                        });\n                    }\n\n                    /**\n                     * @private\n                     */\n                }, {\n                    key: \"resetZoom\",\n                    value: function resetZoom() {\n                        if (this.zoomElement) {\n                            this.zoomElement.parentElement.style[CSS.transform] = '';\n                            this.zoomElement.style[CSS.transform] = 'scale(1)';\n                        }\n                        this.scale = 1;\n                        this.zoomLastPosX = 0;\n                        this.zoomLastPosY = 0;\n                    }\n\n                    /**\n                     * @private\n                     */\n                }, {\n                    key: \"toggleZoom\",\n                    value: function toggleZoom(swiper, e) {\n                        console.log('Try toggle zoom');\n                        if (!this.enableZoom) {\n                            return;\n                        }\n                        console.log('Toggling zoom', e);\n                        /*\n                        let x = e.pointers[0].clientX;\n                        let y = e.pointers[0].clientY;\n                             let mx = this.viewportWidth / 2;\n                        let my = this.viewportHeight / 2;\n                             let tx, ty;\n                             if(x > mx) {\n                          // Greater than half\n                          tx = -x;\n                        } else {\n                          // Less than or equal to half\n                          tx = (this.viewportWidth - x);\n                        }\n                        if(y > my) {\n                          ty = -y;\n                        } else {\n                          ty = y-my;\n                        }\n                             console.log(y);\n                        */\n                        var zi = new Animation(this.touch.target.children[0]).duration(this.zoomDuration).easing('linear').fill('none');\n                        var zw = new Animation(this.touch.target.children[0]).duration(this.zoomDuration).easing('linear');\n                        var za = new Animation();\n                        za.fill('none');\n                        za.add(zi); //, zw);\n                        if (this.scale > 1) {\n                            // Zoom out\n                            //zw.fromTo('translateX', posX + 'px', '0px');\n                            //zw.fromTo('translateY', posY + 'px', '0px');\n                            zi.from('scale', this.scale);\n                            zi.to('scale', 1);\n                            za.play();\n                            //posX = 0;\n                            //posY = 0;\n                            this.scale = 1;\n                        } else {\n                            // Zoom in\n                            //zw.fromTo('translateX', posX + 'px', tx + 'px');\n                            //zw.fromTo('translateY', posY + 'px', ty + 'px');\n                            zi.from('scale', this.scale);\n                            zi.to('scale', this.maxScale);\n                            za.play();\n                            //posX = tx;\n                            //posY = ty;\n                            this.scale = this.maxScale;\n                        }\n                    }\n\n                    /**\n                     * @private\n                     */\n                }, {\n                    key: \"onTransitionStart\",\n                    value: function onTransitionStart(swiper) {}\n\n                    /**\n                     * @private\n                     */\n                }, {\n                    key: \"onTransitionEnd\",\n                    value: function onTransitionEnd(swiper) {}\n\n                    /**\n                     * @private\n                     */\n                }, {\n                    key: \"onTouchStart\",\n                    value: function onTouchStart(e) {\n                        console.log('Touch start', e);\n                        //TODO: Support mice as well\n                        var target = dom.closest(e.target, '.slide').children[0].children[0];\n                        this.touch = {\n                            startX: e.touches[0].clientX,\n                            startY: e.touches[0].clientY,\n                            deltaX: 0,\n                            deltaY: 0,\n                            lastX: 0,\n                            lastY: 0,\n                            target: target.parentElement,\n                            zoomable: target,\n                            zoomableWidth: target.offsetWidth,\n                            zoomableHeight: target.offsetHeight\n                        };\n                        console.log('Target', this.touch.target);\n                        //TODO: android prevent default\n                    }\n\n                    /**\n                     * @private\n                     */\n                }, {\n                    key: \"onTouchMove\",\n                    value: function onTouchMove(e) {\n                        this.touch.deltaX = e.touches[0].clientX - this.touch.startX;\n                        this.touch.deltaY = e.touches[0].clientY - this.touch.startY;\n                        // TODO: Make sure we need to transform (image is bigger than viewport)\n                        var zoomableScaledWidth = this.touch.zoomableWidth * this.scale;\n                        var zoomableScaledHeight = this.touch.zoomableHeight * this.scale;\n                        var x1 = Math.min(this.viewportWidth / 2 - zoomableScaledWidth / 2, 0);\n                        var x2 = -x1;\n                        var y1 = Math.min(this.viewportHeight / 2 - zoomableScaledHeight / 2, 0);\n                        var y2 = -y1;\n                        console.log('BOUNDS', x1, x2, y1, y2);\n                        if (this.scale <= 1) {\n                            return;\n                        }\n                        console.log('PAN', e);\n                        // Move image\n                        this.touch.x = this.touch.deltaX + this.touch.lastX;\n                        this.touch.y = this.touch.deltaY + this.touch.lastY;\n                        console.log(this.touch.x, this.touch.y);\n                        if (this.touch.x < x1) {\n                            console.log('OUT ON LEFT');\n                        }\n                        if (this.touch.x > x2) {\n                            console.log('OUT ON RIGHT');\n                        }\n                        if (this.touch.x > this.viewportWidth) {} else if (-this.touch.x > this.viewportWidth) {} else {\n                            console.log('TRANSFORM', this.touch.x, this.touch.y, this.touch.target);\n                            //this.touch.target.style[CSS.transform] = 'translateX(' + this.touch.x + 'px) translateY(' + this.touch.y + 'px)';\n                            this.touch.target.style[CSS.transform] = 'translateX(' + this.touch.x + 'px) translateY(' + this.touch.y + 'px)';\n                            e.preventDefault();\n                            e.stopPropagation();\n                            return false;\n                        }\n                    }\n\n                    /**\n                     * @private\n                     */\n                }, {\n                    key: \"onTouchEnd\",\n                    value: function onTouchEnd(e) {\n                        console.log('PANEND', e);\n                        if (this.scale > 1) {\n                            if (Math.abs(this.touch.x) > this.viewportWidth) {\n                                posX = posX > 0 ? this.viewportWidth - 1 : -(this.viewportWidth - 1);\n                                console.log('Setting on posx', this.touch.x);\n                            }\n                            /*\n                            if(posY > this.viewportHeight/2) {\n                              let z = new Animation(this.zoomElement.parentElement);\n                              z.fromTo('translateY', posY + 'px', Math.min(this.viewportHeight/2 + 30, posY));\n                              z.play();\n                            } else {\n                              let z = new Animation(this.zoomElement.parentElement);\n                              z.fromTo('translateY', posY + 'px', Math.max(this.viewportHeight/2 - 30, posY));\n                              z.play();\n                            }\n                            */\n                            this.touch.lastX = this.touch.x;\n                            this.touch.lastY = this.touch.y;\n                        }\n                    }\n\n                    /**\n                     * @private\n                     * Update the underlying slider implementation. Call this if you've added or removed\n                     * child slides.\n                     */\n                }, {\n                    key: \"update\",\n                    value: function update() {\n                        var _this4 = this;\n\n                        setTimeout(function () {\n                            _this4.slider.update();\n                            // Don't allow pager to show with > 10 slides\n                            if (_this4.slider.slides.length > 10) {\n                                _this4.showPager = false;\n                            }\n                        });\n                    }\n\n                    /**\n                     * @private\n                     */\n                }, {\n                    key: \"next\",\n                    value: function next() {\n                        this.slider.slideNext();\n                    }\n\n                    /**\n                     * @private\n                     */\n                }, {\n                    key: \"prev\",\n                    value: function prev() {\n                        this.slider.slidePrev();\n                    }\n\n                    /**\n                     * @private\n                     */\n                }, {\n                    key: \"getIndex\",\n                    value: function getIndex() {\n                        return this.slider.activeIndex;\n                    }\n\n                    /**\n                     * @private\n                     */\n                }, {\n                    key: \"getNumSlides\",\n                    value: function getNumSlides() {\n                        return this.slider.slides.length;\n                    }\n\n                    /**\n                     * @private\n                     */\n                }, {\n                    key: \"isAtEnd\",\n                    value: function isAtEnd() {\n                        return this.slider.isEnd;\n                    }\n\n                    /**\n                     * @private\n                     */\n                }, {\n                    key: \"isAtBeginning\",\n                    value: function isAtBeginning() {\n                        return this.slider.isBeginning;\n                    }\n\n                    /**\n                     * @private\n                     */\n                }, {\n                    key: \"getSliderWidget\",\n                    value: function getSliderWidget() {\n                        return this.slider;\n                    }\n                }]);\n\n                return Slides;\n            })(Ion);\n\n            _export(\"Slides\", Slides);\n\n            _export(\"Slides\", Slides = __decorate([Component({\n                selector: 'ion-slides',\n                inputs: ['autoplay', 'loop', 'index', 'bounce', 'pager', 'options', 'zoom', 'zoomDuration', 'zoomMax'],\n                outputs: ['slideChanged'],\n                template: '<div class=\"swiper-container\">' + '<div class=\"swiper-wrapper\">' + '<ng-content></ng-content>' + '</div>' + '<div [class.hide]=\"!showPager\" class=\"swiper-pagination\"></div>' + '</div>',\n                directives: [NgClass]\n            }), __metadata('design:paramtypes', [typeof (_a = typeof ElementRef !== 'undefined' && ElementRef) === 'function' && _a || Object, typeof (_b = typeof Config !== 'undefined' && Config) === 'function' && _b || Object])], Slides));\n            /**\n             * @private\n             */\n\n            Slide =\n            /**\n             * TODO\n             * @param {Slides} slides  The containing slidebox.\n             * @param {ElementRef} elementRef  TODO\n             */\n            function Slide(elementRef, slides) {\n                _classCallCheck(this, Slide);\n\n                this.ele = elementRef.nativeElement;\n                this.ele.classList.add('swiper-slide');\n                slides.rapidUpdate();\n            };\n\n            _export(\"Slide\", Slide);\n\n            _export(\"Slide\", Slide = __decorate([Component({\n                selector: 'ion-slide',\n                inputs: ['zoom'],\n                template: '<div class=\"slide-zoom\"><ng-content></ng-content></div>'\n            }), __param(1, Host()), __metadata('design:paramtypes', [typeof (_c = typeof ElementRef !== 'undefined' && ElementRef) === 'function' && _c || Object, Slides])], Slide));\n            /**\n             * @private\n             */\n\n            SlideLazy = function SlideLazy(elementRef) {\n                _classCallCheck(this, SlideLazy);\n\n                elementRef.getNativeElement().classList.add('swiper-lazy');\n            };\n\n            _export(\"SlideLazy\", SlideLazy);\n\n            _export(\"SlideLazy\", SlideLazy = __decorate([Directive({\n                selector: 'slide-lazy'\n            }), __metadata('design:paramtypes', [typeof (_d = typeof ElementRef !== 'undefined' && ElementRef) === 'function' && _d || Object])], SlideLazy));\n        }\n    };\n});\nSystem.register('ionic/components/slides/swiper-widget',[],function(_export){ /**\n * Swiper 3.1.2\n * Most modern mobile touch slider and framework with hardware accelerated transitions\n *\n * http://www.idangero.us/swiper/\n *\n * Copyright 2015, Vladimir Kharlampidi\n * The iDangero.us\n * http://www.idangero.us/\n *\n * Licensed under MIT\n *\n * Released on: August 22, 2015\n */'use strict';var $,Dom7,swiperDomPlugins,i,domLib;_export('Swiper',Swiper); /*===========================\nSwiper\n===========================*/function Swiper(container,params){if(!(this instanceof Swiper))return new Swiper(container,params);var defaults={direction:'horizontal',touchEventsTarget:'container',initialSlide:0,speed:300, // autoplay\nautoplay:false,autoplayDisableOnInteraction:true, // To support iOS's swipe-to-go-back gesture (when being used in-app, with UIWebView).\niOSEdgeSwipeDetection:false,iOSEdgeSwipeThreshold:20, // Free mode\nfreeMode:false,freeModeMomentum:true,freeModeMomentumRatio:1,freeModeMomentumBounce:true,freeModeMomentumBounceRatio:1,freeModeSticky:false, // Set wrapper width\nsetWrapperSize:false, // Virtual Translate\nvirtualTranslate:false, // Effects\neffect:'slide',coverflow:{rotate:50,stretch:0,depth:100,modifier:1,slideShadows:true},cube:{slideShadows:true,shadow:true,shadowOffset:20,shadowScale:0.94},fade:{crossFade:false}, // Parallax\nparallax:false, // Scrollbar\nscrollbar:null,scrollbarHide:true, // Keyboard Mousewheel\nkeyboardControl:false,mousewheelControl:false,mousewheelReleaseOnEdges:false,mousewheelInvert:false,mousewheelForceToAxis:false,mousewheelSensitivity:1, // Hash Navigation\nhashnav:false, // Slides grid\nspaceBetween:0,slidesPerView:1,slidesPerColumn:1,slidesPerColumnFill:'column',slidesPerGroup:1,centeredSlides:false,slidesOffsetBefore:0,slidesOffsetAfter:0, // Round length\nroundLengths:false, // Touches\ntouchRatio:1,touchAngle:45,simulateTouch:true,shortSwipes:true,longSwipes:true,longSwipesRatio:0.5,longSwipesMs:300,followFinger:true,onlyExternal:false,threshold:0,touchMoveStopPropagation:true, // Pagination\npagination:null,paginationElement:'span',paginationClickable:false,paginationHide:false,paginationBulletRender:null, // Resistance\nresistance:true,resistanceRatio:0.85, // Next/prev buttons\nnextButton:null,prevButton:null, // Progress\nwatchSlidesProgress:false,watchSlidesVisibility:false, // Cursor\ngrabCursor:false, // Clicks\npreventClicks:true,preventClicksPropagation:true,slideToClickedSlide:false, // Lazy Loading\nlazyLoading:false,lazyLoadingInPrevNext:false,lazyLoadingOnTransitionStart:false, // Images\npreloadImages:true,updateOnImagesReady:true, // loop\nloop:false,loopAdditionalSlides:0,loopedSlides:null, // Control\ncontrol:undefined,controlInverse:false,controlBy:'slide', // Swiping/no swiping\nallowSwipeToPrev:true,allowSwipeToNext:true,swipeHandler:null,noSwiping:true,noSwipingClass:'swiper-no-swiping', // NS\nslideClass:'swiper-slide',slideActiveClass:'swiper-slide-active',slideVisibleClass:'swiper-slide-visible',slideDuplicateClass:'swiper-slide-duplicate',slideNextClass:'swiper-slide-next',slidePrevClass:'swiper-slide-prev',wrapperClass:'swiper-wrapper',bulletClass:'swiper-pagination-bullet',bulletActiveClass:'swiper-pagination-bullet-active',buttonDisabledClass:'swiper-button-disabled',paginationHiddenClass:'swiper-pagination-hidden', // Observer\nobserver:false,observeParents:false, // Accessibility\na11y:false,prevSlideMessage:'Previous slide',nextSlideMessage:'Next slide',firstSlideMessage:'This is the first slide',lastSlideMessage:'This is the last slide',paginationBulletMessage:'Go to slide {{index}}', // Callbacks\nrunCallbacksOnInit:true};var initialVirtualTranslate=params && params.virtualTranslate;params = params || {};for(var def in defaults) {if(typeof params[def] === 'undefined'){params[def] = defaults[def];}else if(typeof params[def] === 'object'){for(var deepDef in defaults[def]) {if(typeof params[def][deepDef] === 'undefined'){params[def][deepDef] = defaults[def][deepDef];}}}} // Swiper\nvar s=this; // Version\ns.version = '3.1.0'; // Params\ns.params = params; // Classname\ns.classNames = []; /*=========================\n      Dom Library and plugins\n      ===========================*/if(typeof $ !== 'undefined' && typeof Dom7 !== 'undefined'){$ = Dom7;}if(typeof $ === 'undefined'){if(typeof Dom7 === 'undefined'){$ = window.Dom7 || window.Zepto || window.jQuery;}else {$ = Dom7;}if(!$)return;} // Export it to Swiper instance\ns.$ = $; /*=========================\n      Preparation - Define Container, Wrapper and Pagination\n      ===========================*/s.container = $(container);if(s.container.length === 0)return;if(s.container.length > 1){s.container.each(function(){new Swiper(this,params);});return;} // Save instance in container HTML Element and in data\ns.container[0].swiper = s;s.container.data('swiper',s);s.classNames.push('swiper-container-' + s.params.direction);if(s.params.freeMode){s.classNames.push('swiper-container-free-mode');}if(!s.support.flexbox){s.classNames.push('swiper-container-no-flexbox');s.params.slidesPerColumn = 1;} // Enable slides progress when required\nif(s.params.parallax || s.params.watchSlidesVisibility){s.params.watchSlidesProgress = true;} // Coverflow / 3D\nif(['cube','coverflow'].indexOf(s.params.effect) >= 0){if(s.support.transforms3d){s.params.watchSlidesProgress = true;s.classNames.push('swiper-container-3d');}else {s.params.effect = 'slide';}}if(s.params.effect !== 'slide'){s.classNames.push('swiper-container-' + s.params.effect);}if(s.params.effect === 'cube'){s.params.resistanceRatio = 0;s.params.slidesPerView = 1;s.params.slidesPerColumn = 1;s.params.slidesPerGroup = 1;s.params.centeredSlides = false;s.params.spaceBetween = 0;s.params.virtualTranslate = true;s.params.setWrapperSize = false;}if(s.params.effect === 'fade'){s.params.slidesPerView = 1;s.params.slidesPerColumn = 1;s.params.slidesPerGroup = 1;s.params.watchSlidesProgress = true;s.params.spaceBetween = 0;if(typeof initialVirtualTranslate === 'undefined'){s.params.virtualTranslate = true;}} // Grab Cursor\nif(s.params.grabCursor && s.support.touch){s.params.grabCursor = false;} // Wrapper\ns.wrapper = s.container.children('.' + s.params.wrapperClass); // Pagination\nif(s.params.pagination){s.paginationContainer = $(s.params.pagination);if(s.params.paginationClickable){s.paginationContainer.addClass('swiper-pagination-clickable');}} // Is Horizontal\nfunction isH(){return s.params.direction === 'horizontal';} // RTL\ns.rtl = isH() && (s.container[0].dir.toLowerCase() === 'rtl' || s.container.css('direction') === 'rtl');if(s.rtl){s.classNames.push('swiper-container-rtl');} // Wrong RTL support\nif(s.rtl){s.wrongRTL = s.wrapper.css('display') === '-webkit-box';} // Columns\nif(s.params.slidesPerColumn > 1){s.classNames.push('swiper-container-multirow');} // Check for Android\nif(s.device.android){s.classNames.push('swiper-container-android');} // Add classes\ns.container.addClass(s.classNames.join(' ')); // Translate\ns.translate = 0; // Progress\ns.progress = 0; // Velocity\ns.velocity = 0; /*=========================\n      Locks, unlocks\n      ===========================*/s.lockSwipeToNext = function(){s.params.allowSwipeToNext = false;};s.lockSwipeToPrev = function(){s.params.allowSwipeToPrev = false;};s.lockSwipes = function(){s.params.allowSwipeToNext = s.params.allowSwipeToPrev = false;};s.unlockSwipeToNext = function(){s.params.allowSwipeToNext = true;};s.unlockSwipeToPrev = function(){s.params.allowSwipeToPrev = true;};s.unlockSwipes = function(){s.params.allowSwipeToNext = s.params.allowSwipeToPrev = true;}; /*=========================\n      Round helper\n      ===========================*/function round(a){return Math.floor(a);} /*=========================\n      Set grab cursor\n      ===========================*/if(s.params.grabCursor){s.container[0].style.cursor = 'move';s.container[0].style.cursor = '-webkit-grab';s.container[0].style.cursor = '-moz-grab';s.container[0].style.cursor = 'grab';} /*=========================\n      Update on Images Ready\n      ===========================*/s.imagesToLoad = [];s.imagesLoaded = 0;s.loadImage = function(imgElement,src,checkForComplete,callback){var image;function onReady(){if(callback)callback();}if(!imgElement.complete || !checkForComplete){if(src){image = new window.Image();image.onload = onReady;image.onerror = onReady;image.src = src;}else {onReady();}}else {onReady();}};s.preloadImages = function(){s.imagesToLoad = s.container.find('img');function _onReady(){if(typeof s === 'undefined' || s === null)return;if(s.imagesLoaded !== undefined)s.imagesLoaded++;if(s.imagesLoaded === s.imagesToLoad.length){if(s.params.updateOnImagesReady)s.update();s.emit('onImagesReady',s);}}for(var i=0;i < s.imagesToLoad.length;i++) {s.loadImage(s.imagesToLoad[i],s.imagesToLoad[i].currentSrc || s.imagesToLoad[i].getAttribute('src'),true,_onReady);}}; /*=========================\n      Autoplay\n      ===========================*/s.autoplayTimeoutId = undefined;s.autoplaying = false;s.autoplayPaused = false;function autoplay(){s.autoplayTimeoutId = setTimeout(function(){if(s.params.loop){s.fixLoop();s._slideNext();}else {if(!s.isEnd){s._slideNext();}else {if(!params.autoplayStopOnLast){s._slideTo(0);}else {s.stopAutoplay();}}}},s.params.autoplay);}s.startAutoplay = function(){if(typeof s.autoplayTimeoutId !== 'undefined')return false;if(!s.params.autoplay)return false;if(s.autoplaying)return false;s.autoplaying = true;s.emit('onAutoplayStart',s);autoplay();};s.stopAutoplay = function(internal){if(!s.autoplayTimeoutId)return;if(s.autoplayTimeoutId)clearTimeout(s.autoplayTimeoutId);s.autoplaying = false;s.autoplayTimeoutId = undefined;s.emit('onAutoplayStop',s);};s.pauseAutoplay = function(speed){if(s.autoplayPaused)return;if(s.autoplayTimeoutId)clearTimeout(s.autoplayTimeoutId);s.autoplayPaused = true;if(speed === 0){s.autoplayPaused = false;autoplay();}else {s.wrapper.transitionEnd(function(){if(!s)return;s.autoplayPaused = false;if(!s.autoplaying){s.stopAutoplay();}else {autoplay();}});}}; /*=========================\n      Min/Max Translate\n      ===========================*/s.minTranslate = function(){return -s.snapGrid[0];};s.maxTranslate = function(){return -s.snapGrid[s.snapGrid.length - 1];}; /*=========================\n      Slider/slides sizes\n      ===========================*/s.updateContainerSize = function(){var width,height;if(typeof s.params.width !== 'undefined'){width = s.params.width;}else {width = s.container[0].clientWidth;}if(typeof s.params.height !== 'undefined'){height = s.params.height;}else {height = s.container[0].clientHeight;}if(width === 0 && isH() || height === 0 && !isH()){return;} //Subtract paddings\nwidth = width - parseInt(s.container.css('padding-left'),10) - parseInt(s.container.css('padding-right'),10);height = height - parseInt(s.container.css('padding-top'),10) - parseInt(s.container.css('padding-bottom'),10); // Store values\ns.width = width;s.height = height;s.size = isH()?s.width:s.height;};s.updateSlidesSize = function(){s.slides = s.wrapper.children('.' + s.params.slideClass);s.snapGrid = [];s.slidesGrid = [];s.slidesSizesGrid = [];var spaceBetween=s.params.spaceBetween,slidePosition=-s.params.slidesOffsetBefore,i,prevSlideSize=0,index=0;if(typeof spaceBetween === 'string' && spaceBetween.indexOf('%') >= 0){spaceBetween = parseFloat(spaceBetween.replace('%','')) / 100 * s.size;}s.virtualSize = -spaceBetween; // reset margins\nif(s.rtl)s.slides.css({marginLeft:'',marginTop:''});else s.slides.css({marginRight:'',marginBottom:''});var slidesNumberEvenToRows;if(s.params.slidesPerColumn > 1){if(Math.floor(s.slides.length / s.params.slidesPerColumn) === s.slides.length / s.params.slidesPerColumn){slidesNumberEvenToRows = s.slides.length;}else {slidesNumberEvenToRows = Math.ceil(s.slides.length / s.params.slidesPerColumn) * s.params.slidesPerColumn;}} // Calc slides\nvar slideSize;var slidesPerColumn=s.params.slidesPerColumn;var slidesPerRow=slidesNumberEvenToRows / slidesPerColumn;var numFullColumns=slidesPerRow - (s.params.slidesPerColumn * slidesPerRow - s.slides.length);for(i = 0;i < s.slides.length;i++) {slideSize = 0;var slide=s.slides.eq(i);if(s.params.slidesPerColumn > 1){ // Set slides order\nvar newSlideOrderIndex;var column,row;if(s.params.slidesPerColumnFill === 'column'){column = Math.floor(i / slidesPerColumn);row = i - column * slidesPerColumn;if(column > numFullColumns || column === numFullColumns && row === slidesPerColumn - 1){if(++row >= slidesPerColumn){row = 0;column++;}}newSlideOrderIndex = column + row * slidesNumberEvenToRows / slidesPerColumn;slide.css({'-webkit-box-ordinal-group':newSlideOrderIndex,'-moz-box-ordinal-group':newSlideOrderIndex,'-ms-flex-order':newSlideOrderIndex,'-webkit-order':newSlideOrderIndex,'order':newSlideOrderIndex});}else {row = Math.floor(i / slidesPerRow);column = i - row * slidesPerRow;}slide.css({'margin-top':row !== 0 && s.params.spaceBetween && s.params.spaceBetween + 'px'}).attr('data-swiper-column',column).attr('data-swiper-row',row);}if(slide.css('display') === 'none')continue;if(s.params.slidesPerView === 'auto'){slideSize = isH()?slide.outerWidth(true):slide.outerHeight(true);if(s.params.roundLengths)slideSize = round(slideSize);}else {slideSize = (s.size - (s.params.slidesPerView - 1) * spaceBetween) / s.params.slidesPerView;if(s.params.roundLengths)slideSize = round(slideSize);if(isH()){s.slides[i].style.width = slideSize + 'px';}else {s.slides[i].style.height = slideSize + 'px';}}s.slides[i].swiperSlideSize = slideSize;s.slidesSizesGrid.push(slideSize);if(s.params.centeredSlides){slidePosition = slidePosition + slideSize / 2 + prevSlideSize / 2 + spaceBetween;if(i === 0)slidePosition = slidePosition - s.size / 2 - spaceBetween;if(Math.abs(slidePosition) < 1 / 1000)slidePosition = 0;if(index % s.params.slidesPerGroup === 0)s.snapGrid.push(slidePosition);s.slidesGrid.push(slidePosition);}else {if(index % s.params.slidesPerGroup === 0)s.snapGrid.push(slidePosition);s.slidesGrid.push(slidePosition);slidePosition = slidePosition + slideSize + spaceBetween;}s.virtualSize += slideSize + spaceBetween;prevSlideSize = slideSize;index++;}s.virtualSize = Math.max(s.virtualSize,s.size) + s.params.slidesOffsetAfter;var newSlidesGrid;if(s.rtl && s.wrongRTL && (s.params.effect === 'slide' || s.params.effect === 'coverflow')){s.wrapper.css({width:s.virtualSize + s.params.spaceBetween + 'px'});}if(!s.support.flexbox || s.params.setWrapperSize){if(isH())s.wrapper.css({width:s.virtualSize + s.params.spaceBetween + 'px'});else s.wrapper.css({height:s.virtualSize + s.params.spaceBetween + 'px'});}if(s.params.slidesPerColumn > 1){s.virtualSize = (slideSize + s.params.spaceBetween) * slidesNumberEvenToRows;s.virtualSize = Math.ceil(s.virtualSize / s.params.slidesPerColumn) - s.params.spaceBetween;s.wrapper.css({width:s.virtualSize + s.params.spaceBetween + 'px'});if(s.params.centeredSlides){newSlidesGrid = [];for(i = 0;i < s.snapGrid.length;i++) {if(s.snapGrid[i] < s.virtualSize + s.snapGrid[0])newSlidesGrid.push(s.snapGrid[i]);}s.snapGrid = newSlidesGrid;}} // Remove last grid elements depending on width\nif(!s.params.centeredSlides){newSlidesGrid = [];for(i = 0;i < s.snapGrid.length;i++) {if(s.snapGrid[i] <= s.virtualSize - s.size){newSlidesGrid.push(s.snapGrid[i]);}}s.snapGrid = newSlidesGrid;if(Math.floor(s.virtualSize - s.size) > Math.floor(s.snapGrid[s.snapGrid.length - 1])){s.snapGrid.push(s.virtualSize - s.size);}}if(s.snapGrid.length === 0)s.snapGrid = [0];if(s.params.spaceBetween !== 0){if(isH()){if(s.rtl)s.slides.css({marginLeft:spaceBetween + 'px'});else s.slides.css({marginRight:spaceBetween + 'px'});}else s.slides.css({marginBottom:spaceBetween + 'px'});}if(s.params.watchSlidesProgress){s.updateSlidesOffset();}};s.updateSlidesOffset = function(){for(var i=0;i < s.slides.length;i++) {s.slides[i].swiperSlideOffset = isH()?s.slides[i].offsetLeft:s.slides[i].offsetTop;}}; /*=========================\n      Slider/slides progress\n      ===========================*/s.updateSlidesProgress = function(translate){if(typeof translate === 'undefined'){translate = s.translate || 0;}if(s.slides.length === 0)return;if(typeof s.slides[0].swiperSlideOffset === 'undefined')s.updateSlidesOffset();var offsetCenter=-translate;if(s.rtl)offsetCenter = translate; // Visible Slides\nvar containerBox=s.container[0].getBoundingClientRect();var sideBefore=isH()?'left':'top';var sideAfter=isH()?'right':'bottom';s.slides.removeClass(s.params.slideVisibleClass);for(var i=0;i < s.slides.length;i++) {var slide=s.slides[i];var slideProgress=(offsetCenter - slide.swiperSlideOffset) / (slide.swiperSlideSize + s.params.spaceBetween);if(s.params.watchSlidesVisibility){var slideBefore=-(offsetCenter - slide.swiperSlideOffset);var slideAfter=slideBefore + s.slidesSizesGrid[i];var isVisible=slideBefore >= 0 && slideBefore < s.size || slideAfter > 0 && slideAfter <= s.size || slideBefore <= 0 && slideAfter >= s.size;if(isVisible){s.slides.eq(i).addClass(s.params.slideVisibleClass);}}slide.progress = s.rtl?-slideProgress:slideProgress;}};s.updateProgress = function(translate){if(typeof translate === 'undefined'){translate = s.translate || 0;}var translatesDiff=s.maxTranslate() - s.minTranslate();if(translatesDiff === 0){s.progress = 0;s.isBeginning = s.isEnd = true;}else {s.progress = (translate - s.minTranslate()) / translatesDiff;s.isBeginning = s.progress <= 0;s.isEnd = s.progress >= 1;}if(s.isBeginning)s.emit('onReachBeginning',s);if(s.isEnd)s.emit('onReachEnd',s);if(s.params.watchSlidesProgress)s.updateSlidesProgress(translate);s.emit('onProgress',s,s.progress);};s.updateActiveIndex = function(){var translate=s.rtl?s.translate:-s.translate;var newActiveIndex,i,snapIndex;for(i = 0;i < s.slidesGrid.length;i++) {if(typeof s.slidesGrid[i + 1] !== 'undefined'){if(translate >= s.slidesGrid[i] && translate < s.slidesGrid[i + 1] - (s.slidesGrid[i + 1] - s.slidesGrid[i]) / 2){newActiveIndex = i;}else if(translate >= s.slidesGrid[i] && translate < s.slidesGrid[i + 1]){newActiveIndex = i + 1;}}else {if(translate >= s.slidesGrid[i]){newActiveIndex = i;}}} // Normalize slideIndex\nif(newActiveIndex < 0 || typeof newActiveIndex === 'undefined')newActiveIndex = 0; // for (i = 0; i < s.slidesGrid.length; i++) {\n// if (- translate >= s.slidesGrid[i]) {\n// newActiveIndex = i;\n// }\n// }\nsnapIndex = Math.floor(newActiveIndex / s.params.slidesPerGroup);if(snapIndex >= s.snapGrid.length)snapIndex = s.snapGrid.length - 1;if(newActiveIndex === s.activeIndex){return;}s.snapIndex = snapIndex;s.previousIndex = s.activeIndex;s.activeIndex = newActiveIndex;s.updateClasses();}; /*=========================\n      Classes\n      ===========================*/s.updateClasses = function(){s.slides.removeClass(s.params.slideActiveClass + ' ' + s.params.slideNextClass + ' ' + s.params.slidePrevClass);var activeSlide=s.slides.eq(s.activeIndex); // Active classes\nactiveSlide.addClass(s.params.slideActiveClass);activeSlide.next('.' + s.params.slideClass).addClass(s.params.slideNextClass);activeSlide.prev('.' + s.params.slideClass).addClass(s.params.slidePrevClass); // Pagination\nif(s.bullets && s.bullets.length > 0){s.bullets.removeClass(s.params.bulletActiveClass);var bulletIndex;if(s.params.loop){bulletIndex = Math.ceil(s.activeIndex - s.loopedSlides) / s.params.slidesPerGroup;if(bulletIndex > s.slides.length - 1 - s.loopedSlides * 2){bulletIndex = bulletIndex - (s.slides.length - s.loopedSlides * 2);}if(bulletIndex > s.bullets.length - 1)bulletIndex = bulletIndex - s.bullets.length;}else {if(typeof s.snapIndex !== 'undefined'){bulletIndex = s.snapIndex;}else {bulletIndex = s.activeIndex || 0;}}if(s.paginationContainer.length > 1){s.bullets.each(function(){if($(this).index() === bulletIndex)$(this).addClass(s.params.bulletActiveClass);});}else {s.bullets.eq(bulletIndex).addClass(s.params.bulletActiveClass);}} // Next/active buttons\nif(!s.params.loop){if(s.params.prevButton){if(s.isBeginning){$(s.params.prevButton).addClass(s.params.buttonDisabledClass);if(s.params.a11y && s.a11y)s.a11y.disable($(s.params.prevButton));}else {$(s.params.prevButton).removeClass(s.params.buttonDisabledClass);if(s.params.a11y && s.a11y)s.a11y.enable($(s.params.prevButton));}}if(s.params.nextButton){if(s.isEnd){$(s.params.nextButton).addClass(s.params.buttonDisabledClass);if(s.params.a11y && s.a11y)s.a11y.disable($(s.params.nextButton));}else {$(s.params.nextButton).removeClass(s.params.buttonDisabledClass);if(s.params.a11y && s.a11y)s.a11y.enable($(s.params.nextButton));}}}}; /*=========================\n      Pagination\n      ===========================*/s.updatePagination = function(){if(!s.params.pagination)return;if(s.paginationContainer && s.paginationContainer.length > 0){var bulletsHTML='';var numberOfBullets=s.params.loop?Math.ceil((s.slides.length - s.loopedSlides * 2) / s.params.slidesPerGroup):s.snapGrid.length;for(var i=0;i < numberOfBullets;i++) {if(s.params.paginationBulletRender){bulletsHTML += s.params.paginationBulletRender(i,s.params.bulletClass);}else {bulletsHTML += '<' + s.params.paginationElement + ' class=\"' + s.params.bulletClass + '\"></' + s.params.paginationElement + '>';}}s.paginationContainer.html(bulletsHTML);s.bullets = s.paginationContainer.find('.' + s.params.bulletClass);if(s.params.paginationClickable && s.params.a11y && s.a11y){s.a11y.initPagination();}}}; /*=========================\n      Common update method\n      ===========================*/s.update = function(updateTranslate){s.updateContainerSize();s.updateSlidesSize();s.updateProgress();s.updatePagination();s.updateClasses();if(s.params.scrollbar && s.scrollbar){s.scrollbar.set();}function forceSetTranslate(){newTranslate = Math.min(Math.max(s.translate,s.maxTranslate()),s.minTranslate());s.setWrapperTranslate(newTranslate);s.updateActiveIndex();s.updateClasses();}if(updateTranslate){var translated,newTranslate;if(s.controller && s.controller.spline){s.controller.spline = undefined;}if(s.params.freeMode){forceSetTranslate();}else {if((s.params.slidesPerView === 'auto' || s.params.slidesPerView > 1) && s.isEnd && !s.params.centeredSlides){translated = s.slideTo(s.slides.length - 1,0,false,true);}else {translated = s.slideTo(s.activeIndex,0,false,true);}if(!translated){forceSetTranslate();}}}}; /*=========================\n      Resize Handler\n      ===========================*/s.onResize = function(forceUpdatePagination){ // Disable locks on resize\nvar allowSwipeToPrev=s.params.allowSwipeToPrev;var allowSwipeToNext=s.params.allowSwipeToNext;s.params.allowSwipeToPrev = s.params.allowSwipeToNext = true;s.updateContainerSize();s.updateSlidesSize();if(s.params.slidesPerView === 'auto' || s.params.freeMode || forceUpdatePagination)s.updatePagination();if(s.params.scrollbar && s.scrollbar){s.scrollbar.set();}if(s.controller && s.controller.spline){s.controller.spline = undefined;}if(s.params.freeMode){var newTranslate=Math.min(Math.max(s.translate,s.maxTranslate()),s.minTranslate());s.setWrapperTranslate(newTranslate);s.updateActiveIndex();s.updateClasses();}else {s.updateClasses();if((s.params.slidesPerView === 'auto' || s.params.slidesPerView > 1) && s.isEnd && !s.params.centeredSlides){s.slideTo(s.slides.length - 1,0,false,true);}else {s.slideTo(s.activeIndex,0,false,true);}} // Return locks after resize\ns.params.allowSwipeToPrev = allowSwipeToPrev;s.params.allowSwipeToNext = allowSwipeToNext;}; /*=========================\n      Events\n      ===========================*/ //Define Touch Events\nvar desktopEvents=['mousedown','mousemove','mouseup'];if(window.navigator.pointerEnabled)desktopEvents = ['pointerdown','pointermove','pointerup'];else if(window.navigator.msPointerEnabled)desktopEvents = ['MSPointerDown','MSPointerMove','MSPointerUp'];s.touchEvents = {start:s.support.touch || !s.params.simulateTouch?'touchstart':desktopEvents[0],move:s.support.touch || !s.params.simulateTouch?'touchmove':desktopEvents[1],end:s.support.touch || !s.params.simulateTouch?'touchend':desktopEvents[2]}; // WP8 Touch Events Fix\nif(window.navigator.pointerEnabled || window.navigator.msPointerEnabled){(s.params.touchEventsTarget === 'container'?s.container:s.wrapper).addClass('swiper-wp8-' + s.params.direction);} // Attach/detach events\ns.initEvents = function(detach){console.debug('swiper initEvents',detach?'detach':'attach');var actionDom=detach?'off':'on';var action=detach?'removeEventListener':'addEventListener';var touchEventsTarget=s.params.touchEventsTarget === 'container'?s.container[0]:s.wrapper[0];var target=s.support.touch?touchEventsTarget:document;var moveCapture=s.params.nested?true:false; //Touch Events\nif(s.browser.ie){touchEventsTarget[action](s.touchEvents.start,s.onTouchStart,false);target[action](s.touchEvents.move,s.onTouchMove,moveCapture);target[action](s.touchEvents.end,s.onTouchEnd,false);}else {if(s.support.touch){touchEventsTarget[action](s.touchEvents.start,s.onTouchStart,false);touchEventsTarget[action](s.touchEvents.move,s.onTouchMove,moveCapture);touchEventsTarget[action](s.touchEvents.end,s.onTouchEnd,false);}if(params.simulateTouch && !s.device.ios && !s.device.android){touchEventsTarget[action]('mousedown',s.onTouchStart,false);document[action]('mousemove',s.onTouchMove,moveCapture);document[action]('mouseup',s.onTouchEnd,false);}}window[action]('resize',s.onResize); // Next, Prev, Index\nif(s.params.nextButton){$(s.params.nextButton)[actionDom]('click',s.onClickNext);if(s.params.a11y && s.a11y)$(s.params.nextButton)[actionDom]('keydown',s.a11y.onEnterKey);}if(s.params.prevButton){$(s.params.prevButton)[actionDom]('click',s.onClickPrev);if(s.params.a11y && s.a11y)$(s.params.prevButton)[actionDom]('keydown',s.a11y.onEnterKey);}if(s.params.pagination && s.params.paginationClickable){$(s.paginationContainer)[actionDom]('click','.' + s.params.bulletClass,s.onClickIndex);if(s.params.a11y && s.a11y)$(s.paginationContainer)[actionDom]('keydown','.' + s.params.bulletClass,s.a11y.onEnterKey);} // Prevent Links Clicks\nif(s.params.preventClicks || s.params.preventClicksPropagation)touchEventsTarget[action]('click',s.preventClicks,true);};s.attachEvents = function(detach){s.initEvents();};s.detachEvents = function(){s.initEvents(true);}; /*=========================\n      Handle Clicks\n      ===========================*/ // Prevent Clicks\ns.allowClick = true;s.preventClicks = function(e){if(!s.allowClick){if(s.params.preventClicks)e.preventDefault();if(s.params.preventClicksPropagation && s.animating){e.stopPropagation();e.stopImmediatePropagation();}}}; // Clicks\ns.onClickNext = function(e){e.preventDefault();if(s.isEnd && !s.params.loop)return;s.slideNext();};s.onClickPrev = function(e){e.preventDefault();if(s.isBeginning && !s.params.loop)return;s.slidePrev();};s.onClickIndex = function(e){e.preventDefault();var index=$(this).index() * s.params.slidesPerGroup;if(s.params.loop)index = index + s.loopedSlides;s.slideTo(index);}; /*=========================\n      Handle Touches\n      ===========================*/function findElementInEvent(e,selector){var el=$(e.target);if(!el.is(selector)){if(typeof selector === 'string'){el = el.parents(selector);}else if(selector.nodeType){var found;el.parents().each(function(index,_el){if(_el === selector)found = selector;});if(!found)return undefined;else return selector;}}if(el.length === 0){return undefined;}return el[0];}s.updateClickedSlide = function(e){var slide=findElementInEvent(e,'.' + s.params.slideClass);var slideFound=false;if(slide){for(var i=0;i < s.slides.length;i++) {if(s.slides[i] === slide)slideFound = true;}}if(slide && slideFound){s.clickedSlide = slide;s.clickedIndex = $(slide).index();}else {s.clickedSlide = undefined;s.clickedIndex = undefined;return;}if(s.params.slideToClickedSlide && s.clickedIndex !== undefined && s.clickedIndex !== s.activeIndex){var slideToIndex=s.clickedIndex,realIndex;if(s.params.loop){realIndex = $(s.clickedSlide).attr('data-swiper-slide-index');if(slideToIndex > s.slides.length - s.params.slidesPerView){s.fixLoop();slideToIndex = s.wrapper.children('.' + s.params.slideClass + '[data-swiper-slide-index=\"' + realIndex + '\"]').eq(0).index();setTimeout(function(){s.slideTo(slideToIndex);},0);}else if(slideToIndex < s.params.slidesPerView - 1){s.fixLoop();var duplicatedSlides=s.wrapper.children('.' + s.params.slideClass + '[data-swiper-slide-index=\"' + realIndex + '\"]');slideToIndex = duplicatedSlides.eq(duplicatedSlides.length - 1).index();setTimeout(function(){s.slideTo(slideToIndex);},0);}else {s.slideTo(slideToIndex);}}else {s.slideTo(slideToIndex);}}};var isTouched,isMoved,touchStartTime,isScrolling,currentTranslate,startTranslate,allowThresholdMove, // Form elements to match\nformElements='input, select, textarea, button', // Last click time\nlastClickTime=Date.now(),clickTimeout, //Velocities\nvelocities=[],allowMomentumBounce; // Animating Flag\ns.animating = false; // Touches information\ns.touches = {startX:0,startY:0,currentX:0,currentY:0,diff:0}; // Touch handlers\nvar isTouchEvent,startMoving;s.onTouchStart = function(e){if(e.originalEvent)e = e.originalEvent;isTouchEvent = e.type === 'touchstart';if(!isTouchEvent && 'which' in e && e.which === 3)return;if(s.params.noSwiping && findElementInEvent(e,'.' + s.params.noSwipingClass)){s.allowClick = true;return;}if(s.params.swipeHandler){if(!findElementInEvent(e,s.params.swipeHandler))return;}var startX=s.touches.currentX = e.type === 'touchstart'?e.targetTouches[0].pageX:e.pageX;var startY=s.touches.currentY = e.type === 'touchstart'?e.targetTouches[0].pageY:e.pageY; // Do NOT start if iOS edge swipe is detected. Otherwise iOS app (UIWebView) cannot swipe-to-go-back anymore\nif(s.device.ios && s.params.iOSEdgeSwipeDetection && startX <= s.params.iOSEdgeSwipeThreshold){return;}isTouched = true;isMoved = false;isScrolling = undefined;startMoving = undefined;s.touches.startX = startX;s.touches.startY = startY;touchStartTime = Date.now();s.allowClick = true;s.updateContainerSize();s.swipeDirection = undefined;if(s.params.threshold > 0)allowThresholdMove = false;if(e.type !== 'touchstart'){var preventDefault=true;if($(e.target).is(formElements))preventDefault = false;if(document.activeElement && $(document.activeElement).is(formElements)){document.activeElement.blur();}if(preventDefault){e.preventDefault();}}s.emit('onTouchStart',s,e);};s.onTouchMove = function(e){if(e.originalEvent)e = e.originalEvent;if(isTouchEvent && e.type === 'mousemove')return;if(e.preventedByNestedSwiper)return;if(s.params.onlyExternal){ // isMoved = true;\ns.allowClick = false;if(isTouched){s.touches.startX = s.touches.currentX = e.type === 'touchmove'?e.targetTouches[0].pageX:e.pageX;s.touches.startY = s.touches.currentY = e.type === 'touchmove'?e.targetTouches[0].pageY:e.pageY;touchStartTime = Date.now();}return;}if(isTouchEvent && document.activeElement){if(e.target === document.activeElement && $(e.target).is(formElements)){isMoved = true;s.allowClick = false;return;}}s.emit('onTouchMove',s,e);if(e.targetTouches && e.targetTouches.length > 1)return;s.touches.currentX = e.type === 'touchmove'?e.targetTouches[0].pageX:e.pageX;s.touches.currentY = e.type === 'touchmove'?e.targetTouches[0].pageY:e.pageY;if(typeof isScrolling === 'undefined'){var touchAngle=Math.atan2(Math.abs(s.touches.currentY - s.touches.startY),Math.abs(s.touches.currentX - s.touches.startX)) * 180 / Math.PI;isScrolling = isH()?touchAngle > s.params.touchAngle:90 - touchAngle > s.params.touchAngle;}if(isScrolling){s.emit('onTouchMoveOpposite',s,e);}if(typeof startMoving === 'undefined' && s.browser.ieTouch){if(s.touches.currentX !== s.touches.startX || s.touches.currentY !== s.touches.startY){startMoving = true;}}if(!isTouched)return;if(isScrolling){isTouched = false;return;}if(!startMoving && s.browser.ieTouch){return;}s.allowClick = false;s.emit('onSliderMove',s,e);e.preventDefault();if(s.params.touchMoveStopPropagation && !s.params.nested){e.stopPropagation();}if(!isMoved){if(params.loop){s.fixLoop();}startTranslate = s.getWrapperTranslate();s.setWrapperTransition(0);if(s.animating){s.wrapper.trigger('webkitTransitionEnd transitionend oTransitionEnd MSTransitionEnd msTransitionEnd');}if(s.params.autoplay && s.autoplaying){if(s.params.autoplayDisableOnInteraction){s.stopAutoplay();}else {s.pauseAutoplay();}}allowMomentumBounce = false; //Grab Cursor\nif(s.params.grabCursor){s.container[0].style.cursor = 'move';s.container[0].style.cursor = '-webkit-grabbing';s.container[0].style.cursor = '-moz-grabbin';s.container[0].style.cursor = 'grabbing';}}isMoved = true;var diff=s.touches.diff = isH()?s.touches.currentX - s.touches.startX:s.touches.currentY - s.touches.startY;diff = diff * s.params.touchRatio;if(s.rtl)diff = -diff;s.swipeDirection = diff > 0?'prev':'next';currentTranslate = diff + startTranslate;var disableParentSwiper=true;if(diff > 0 && currentTranslate > s.minTranslate()){disableParentSwiper = false;if(s.params.resistance)currentTranslate = s.minTranslate() - 1 + Math.pow(-s.minTranslate() + startTranslate + diff,s.params.resistanceRatio);}else if(diff < 0 && currentTranslate < s.maxTranslate()){disableParentSwiper = false;if(s.params.resistance)currentTranslate = s.maxTranslate() + 1 - Math.pow(s.maxTranslate() - startTranslate - diff,s.params.resistanceRatio);}if(disableParentSwiper){e.preventedByNestedSwiper = true;} // Directions locks\nif(!s.params.allowSwipeToNext && s.swipeDirection === 'next' && currentTranslate < startTranslate){currentTranslate = startTranslate;}if(!s.params.allowSwipeToPrev && s.swipeDirection === 'prev' && currentTranslate > startTranslate){currentTranslate = startTranslate;}if(!s.params.followFinger)return; // Threshold\nif(s.params.threshold > 0){if(Math.abs(diff) > s.params.threshold || allowThresholdMove){if(!allowThresholdMove){allowThresholdMove = true;s.touches.startX = s.touches.currentX;s.touches.startY = s.touches.currentY;currentTranslate = startTranslate;s.touches.diff = isH()?s.touches.currentX - s.touches.startX:s.touches.currentY - s.touches.startY;return;}}else {currentTranslate = startTranslate;return;}} // Update active index in free mode\nif(s.params.freeMode || s.params.watchSlidesProgress){s.updateActiveIndex();}if(s.params.freeMode){ //Velocity\nif(velocities.length === 0){velocities.push({position:s.touches[isH()?'startX':'startY'],time:touchStartTime});}velocities.push({position:s.touches[isH()?'currentX':'currentY'],time:new window.Date().getTime()});} // Update progress\ns.updateProgress(currentTranslate); // Update translate\ns.setWrapperTranslate(currentTranslate);};s.onTouchEnd = function(e){if(e.originalEvent)e = e.originalEvent;s.emit('onTouchEnd',s,e);if(!isTouched)return; //Return Grab Cursor\nif(s.params.grabCursor && isMoved && isTouched){s.container[0].style.cursor = 'move';s.container[0].style.cursor = '-webkit-grab';s.container[0].style.cursor = '-moz-grab';s.container[0].style.cursor = 'grab';} // Time diff\nvar touchEndTime=Date.now();var timeDiff=touchEndTime - touchStartTime; // Tap, doubleTap, Click\nif(s.allowClick){s.updateClickedSlide(e);s.emit('onTap',s,e);if(timeDiff < 300 && touchEndTime - lastClickTime > 300){if(clickTimeout)clearTimeout(clickTimeout);clickTimeout = setTimeout(function(){if(!s)return;if(s.params.paginationHide && s.paginationContainer.length > 0 && !$(e.target).hasClass(s.params.bulletClass)){s.paginationContainer.toggleClass(s.params.paginationHiddenClass);}s.emit('onClick',s,e);},300);}if(timeDiff < 300 && touchEndTime - lastClickTime < 300){if(clickTimeout)clearTimeout(clickTimeout);s.emit('onDoubleTap',s,e);}}lastClickTime = Date.now();setTimeout(function(){if(s)s.allowClick = true;},0);if(!isTouched || !isMoved || !s.swipeDirection || s.touches.diff === 0 || currentTranslate === startTranslate){isTouched = isMoved = false;return;}isTouched = isMoved = false;var currentPos;if(s.params.followFinger){currentPos = s.rtl?s.translate:-s.translate;}else {currentPos = -currentTranslate;}if(s.params.freeMode){if(currentPos < -s.minTranslate()){s.slideTo(s.activeIndex);return;}else if(currentPos > -s.maxTranslate()){if(s.slides.length < s.snapGrid.length){s.slideTo(s.snapGrid.length - 1);}else {s.slideTo(s.slides.length - 1);}return;}if(s.params.freeModeMomentum){if(velocities.length > 1){var lastMoveEvent=velocities.pop(),velocityEvent=velocities.pop();var distance=lastMoveEvent.position - velocityEvent.position;var time=lastMoveEvent.time - velocityEvent.time;s.velocity = distance / time;s.velocity = s.velocity / 2;if(Math.abs(s.velocity) < 0.02){s.velocity = 0;} // this implies that the user stopped moving a finger then released.\n// There would be no events with distance zero, so the last event is stale.\nif(time > 150 || new window.Date().getTime() - lastMoveEvent.time > 300){s.velocity = 0;}}else {s.velocity = 0;}velocities.length = 0;var momentumDuration=1000 * s.params.freeModeMomentumRatio;var momentumDistance=s.velocity * momentumDuration;var newPosition=s.translate + momentumDistance;if(s.rtl)newPosition = -newPosition;var doBounce=false;var afterBouncePosition;var bounceAmount=Math.abs(s.velocity) * 20 * s.params.freeModeMomentumBounceRatio;if(newPosition < s.maxTranslate()){if(s.params.freeModeMomentumBounce){if(newPosition + s.maxTranslate() < -bounceAmount){newPosition = s.maxTranslate() - bounceAmount;}afterBouncePosition = s.maxTranslate();doBounce = true;allowMomentumBounce = true;}else {newPosition = s.maxTranslate();}}else if(newPosition > s.minTranslate()){if(s.params.freeModeMomentumBounce){if(newPosition - s.minTranslate() > bounceAmount){newPosition = s.minTranslate() + bounceAmount;}afterBouncePosition = s.minTranslate();doBounce = true;allowMomentumBounce = true;}else {newPosition = s.minTranslate();}}else if(s.params.freeModeSticky){var j=0,nextSlide;for(j = 0;j < s.snapGrid.length;j += 1) {if(s.snapGrid[j] > -newPosition){nextSlide = j;break;}}if(Math.abs(s.snapGrid[nextSlide] - newPosition) < Math.abs(s.snapGrid[nextSlide - 1] - newPosition) || s.swipeDirection === 'next'){newPosition = s.snapGrid[nextSlide];}else {newPosition = s.snapGrid[nextSlide - 1];}if(!s.rtl)newPosition = -newPosition;} //Fix duration\nif(s.velocity !== 0){if(s.rtl){momentumDuration = Math.abs((-newPosition - s.translate) / s.velocity);}else {momentumDuration = Math.abs((newPosition - s.translate) / s.velocity);}}else if(s.params.freeModeSticky){s.slideReset();return;}if(s.params.freeModeMomentumBounce && doBounce){s.updateProgress(afterBouncePosition);s.setWrapperTransition(momentumDuration);s.setWrapperTranslate(newPosition);s.onTransitionStart();s.animating = true;s.wrapper.transitionEnd(function(){if(!s || !allowMomentumBounce)return;s.emit('onMomentumBounce',s);s.setWrapperTransition(s.params.speed);s.setWrapperTranslate(afterBouncePosition);s.wrapper.transitionEnd(function(){if(!s)return;s.onTransitionEnd();});});}else if(s.velocity){s.updateProgress(newPosition);s.setWrapperTransition(momentumDuration);s.setWrapperTranslate(newPosition);s.onTransitionStart();if(!s.animating){s.animating = true;s.wrapper.transitionEnd(function(){if(!s)return;s.onTransitionEnd();});}}else {s.updateProgress(newPosition);}s.updateActiveIndex();}if(!s.params.freeModeMomentum || timeDiff >= s.params.longSwipesMs){s.updateProgress();s.updateActiveIndex();}return;} // Find current slide\nvar i,stopIndex=0,groupSize=s.slidesSizesGrid[0];for(i = 0;i < s.slidesGrid.length;i += s.params.slidesPerGroup) {if(typeof s.slidesGrid[i + s.params.slidesPerGroup] !== 'undefined'){if(currentPos >= s.slidesGrid[i] && currentPos < s.slidesGrid[i + s.params.slidesPerGroup]){stopIndex = i;groupSize = s.slidesGrid[i + s.params.slidesPerGroup] - s.slidesGrid[i];}}else {if(currentPos >= s.slidesGrid[i]){stopIndex = i;groupSize = s.slidesGrid[s.slidesGrid.length - 1] - s.slidesGrid[s.slidesGrid.length - 2];}}} // Find current slide size\nvar ratio=(currentPos - s.slidesGrid[stopIndex]) / groupSize;if(timeDiff > s.params.longSwipesMs){ // Long touches\nif(!s.params.longSwipes){s.slideTo(s.activeIndex);return;}if(s.swipeDirection === 'next'){if(ratio >= s.params.longSwipesRatio)s.slideTo(stopIndex + s.params.slidesPerGroup);else s.slideTo(stopIndex);}if(s.swipeDirection === 'prev'){if(ratio > 1 - s.params.longSwipesRatio)s.slideTo(stopIndex + s.params.slidesPerGroup);else s.slideTo(stopIndex);}}else { // Short swipes\nif(!s.params.shortSwipes){s.slideTo(s.activeIndex);return;}if(s.swipeDirection === 'next'){s.slideTo(stopIndex + s.params.slidesPerGroup);}if(s.swipeDirection === 'prev'){s.slideTo(stopIndex);}}}; /*=========================\n      Transitions\n      ===========================*/s._slideTo = function(slideIndex,speed){return s.slideTo(slideIndex,speed,true,true);};s.slideTo = function(slideIndex,speed,runCallbacks,internal){if(typeof runCallbacks === 'undefined')runCallbacks = true;if(typeof slideIndex === 'undefined')slideIndex = 0;if(slideIndex < 0)slideIndex = 0;s.snapIndex = Math.floor(slideIndex / s.params.slidesPerGroup);if(s.snapIndex >= s.snapGrid.length)s.snapIndex = s.snapGrid.length - 1;var translate=-s.snapGrid[s.snapIndex]; // Stop autoplay\nif(s.params.autoplay && s.autoplaying){if(internal || !s.params.autoplayDisableOnInteraction){s.pauseAutoplay(speed);}else {s.stopAutoplay();}} // Update progress\ns.updateProgress(translate); // Normalize slideIndex\nfor(var i=0;i < s.slidesGrid.length;i++) {if(-Math.floor(translate * 100) >= Math.floor(s.slidesGrid[i] * 100)){slideIndex = i;}} // Directions locks\nif(!s.params.allowSwipeToNext && translate < s.translate && translate < s.minTranslate()){return false;}if(!s.params.allowSwipeToPrev && translate > s.translate && translate > s.maxTranslate()){if((s.activeIndex || 0) !== slideIndex)return false;} // Update Index\nif(typeof speed === 'undefined')speed = s.params.speed;s.previousIndex = s.activeIndex || 0;s.activeIndex = slideIndex;if(translate === s.translate){s.updateClasses();return false;}s.updateClasses();s.onTransitionStart(runCallbacks);var translateX=isH()?translate:0,translateY=isH()?0:translate;if(speed === 0){s.setWrapperTransition(0);s.setWrapperTranslate(translate);s.onTransitionEnd(runCallbacks);}else {s.setWrapperTransition(speed);s.setWrapperTranslate(translate);if(!s.animating){s.animating = true;s.wrapper.transitionEnd(function(){if(!s)return;s.onTransitionEnd(runCallbacks);});}}return true;};s.onTransitionStart = function(runCallbacks){if(typeof runCallbacks === 'undefined')runCallbacks = true;if(s.lazy)s.lazy.onTransitionStart();if(runCallbacks){s.emit('onTransitionStart',s);if(s.activeIndex !== s.previousIndex){s.emit('onSlideChangeStart',s);}}};s.onTransitionEnd = function(runCallbacks){s.animating = false;s.setWrapperTransition(0);if(typeof runCallbacks === 'undefined')runCallbacks = true;if(s.lazy)s.lazy.onTransitionEnd();if(runCallbacks){s.emit('onTransitionEnd',s);if(s.activeIndex !== s.previousIndex){s.emit('onSlideChangeEnd',s);}}if(s.params.hashnav && s.hashnav){s.hashnav.setHash();}};s.slideNext = function(runCallbacks,speed,internal){if(s.params.loop){if(s.animating)return false;s.fixLoop();var clientLeft=s.container[0].clientLeft;return s.slideTo(s.activeIndex + s.params.slidesPerGroup,speed,runCallbacks,internal);}else return s.slideTo(s.activeIndex + s.params.slidesPerGroup,speed,runCallbacks,internal);};s._slideNext = function(speed){return s.slideNext(true,speed,true);};s.slidePrev = function(runCallbacks,speed,internal){if(s.params.loop){if(s.animating)return false;s.fixLoop();var clientLeft=s.container[0].clientLeft;return s.slideTo(s.activeIndex - 1,speed,runCallbacks,internal);}else return s.slideTo(s.activeIndex - 1,speed,runCallbacks,internal);};s._slidePrev = function(speed){return s.slidePrev(true,speed,true);};s.slideReset = function(runCallbacks,speed,internal){return s.slideTo(s.activeIndex,speed,runCallbacks);}; /*=========================\n      Translate/transition helpers\n      ===========================*/s.setWrapperTransition = function(duration,byController){s.wrapper.transition(duration);if(s.params.effect !== 'slide' && s.effects[s.params.effect]){s.effects[s.params.effect].setTransition(duration);}if(s.params.parallax && s.parallax){s.parallax.setTransition(duration);}if(s.params.scrollbar && s.scrollbar){s.scrollbar.setTransition(duration);}if(s.params.control && s.controller){s.controller.setTransition(duration,byController);}s.emit('onSetTransition',s,duration);};s.setWrapperTranslate = function(translate,updateActiveIndex,byController){var x=0,y=0,z=0;if(isH()){x = s.rtl?-translate:translate;}else {y = translate;}if(!s.params.virtualTranslate){if(s.support.transforms3d)s.wrapper.transform('translate3d(' + x + 'px, ' + y + 'px, ' + z + 'px)');else s.wrapper.transform('translate(' + x + 'px, ' + y + 'px)');}s.translate = isH()?x:y;if(updateActiveIndex)s.updateActiveIndex();if(s.params.effect !== 'slide' && s.effects[s.params.effect]){s.effects[s.params.effect].setTranslate(s.translate);}if(s.params.parallax && s.parallax){s.parallax.setTranslate(s.translate);}if(s.params.scrollbar && s.scrollbar){s.scrollbar.setTranslate(s.translate);}if(s.params.control && s.controller){s.controller.setTranslate(s.translate,byController);}s.emit('onSetTranslate',s,s.translate);};s.getTranslate = function(el,axis){var matrix,curTransform,curStyle,transformMatrix; // automatic axis detection\nif(typeof axis === 'undefined'){axis = 'x';}if(s.params.virtualTranslate){return s.rtl?-s.translate:s.translate;}curStyle = window.getComputedStyle(el,null);if(window.WebKitCSSMatrix){ // Some old versions of Webkit choke when 'none' is passed; pass\n// empty string instead in this case\ntransformMatrix = new window.WebKitCSSMatrix(curStyle.webkitTransform === 'none'?'':curStyle.webkitTransform);}else {transformMatrix = curStyle.MozTransform || curStyle.OTransform || curStyle.MsTransform || curStyle.msTransform || curStyle.transform || curStyle.getPropertyValue('transform').replace('translate(','matrix(1, 0, 0, 1,');matrix = transformMatrix.toString().split(',');}if(axis === 'x'){ //Latest Chrome and webkits Fix\nif(window.WebKitCSSMatrix)curTransform = transformMatrix.m41;else if(matrix.length === 16)curTransform = parseFloat(matrix[12]);else curTransform = parseFloat(matrix[4]);}if(axis === 'y'){ //Latest Chrome and webkits Fix\nif(window.WebKitCSSMatrix)curTransform = transformMatrix.m42;else if(matrix.length === 16)curTransform = parseFloat(matrix[13]);else curTransform = parseFloat(matrix[5]);}if(s.rtl && curTransform)curTransform = -curTransform;return curTransform || 0;};s.getWrapperTranslate = function(axis){if(typeof axis === 'undefined'){axis = isH()?'x':'y';}return s.getTranslate(s.wrapper[0],axis);}; /*=========================\n      Observer\n      ===========================*/s.observers = [];function initObserver(target,options){options = options || {}; // create an observer instance\nvar ObserverFunc=window.MutationObserver || window.WebkitMutationObserver;var observer=new ObserverFunc(function(mutations){mutations.forEach(function(mutation){s.onResize(true);s.emit('onObserverUpdate',s,mutation);});});observer.observe(target,{attributes:typeof options.attributes === 'undefined'?true:options.attributes,childList:typeof options.childList === 'undefined'?true:options.childList,characterData:typeof options.characterData === 'undefined'?true:options.characterData});s.observers.push(observer);}s.initObservers = function(){if(s.params.observeParents){var containerParents=s.container.parents();for(var i=0;i < containerParents.length;i++) {initObserver(containerParents[i]);}} // Observe container\ninitObserver(s.container[0],{childList:false}); // Observe wrapper\ninitObserver(s.wrapper[0],{attributes:false});};s.disconnectObservers = function(){for(var i=0;i < s.observers.length;i++) {s.observers[i].disconnect();}s.observers = [];}; /*=========================\n      Loop\n      ===========================*/ // Create looped slides\ns.createLoop = function(){ // Remove duplicated slides\ns.wrapper.children('.' + s.params.slideClass + '.' + s.params.slideDuplicateClass).remove();var slides=s.wrapper.children('.' + s.params.slideClass);if(s.params.slidesPerView === 'auto' && !s.params.loopedSlides)s.params.loopedSlides = slides.length;s.loopedSlides = parseInt(s.params.loopedSlides || s.params.slidesPerView,10);s.loopedSlides = s.loopedSlides + s.params.loopAdditionalSlides;if(s.loopedSlides > slides.length){s.loopedSlides = slides.length;}var prependSlides=[],appendSlides=[],i;slides.each(function(index,el){var slide=$(this);if(index < s.loopedSlides)appendSlides.push(el);if(index < slides.length && index >= slides.length - s.loopedSlides)prependSlides.push(el);slide.attr('data-swiper-slide-index',index);});for(i = 0;i < appendSlides.length;i++) {s.wrapper.append($(appendSlides[i].cloneNode(true)).addClass(s.params.slideDuplicateClass));}for(i = prependSlides.length - 1;i >= 0;i--) {s.wrapper.prepend($(prependSlides[i].cloneNode(true)).addClass(s.params.slideDuplicateClass));}};s.destroyLoop = function(){s.wrapper.children('.' + s.params.slideClass + '.' + s.params.slideDuplicateClass).remove();s.slides.removeAttr('data-swiper-slide-index');};s.fixLoop = function(){var newIndex; //Fix For Negative Oversliding\nif(s.activeIndex < s.loopedSlides){newIndex = s.slides.length - s.loopedSlides * 3 + s.activeIndex;newIndex = newIndex + s.loopedSlides;s.slideTo(newIndex,0,false,true);}else if(s.params.slidesPerView === 'auto' && s.activeIndex >= s.loopedSlides * 2 || s.activeIndex > s.slides.length - s.params.slidesPerView * 2){newIndex = -s.slides.length + s.activeIndex + s.loopedSlides;newIndex = newIndex + s.loopedSlides;s.slideTo(newIndex,0,false,true);}}; /*=========================\n      Append/Prepend/Remove Slides\n      ===========================*/s.appendSlide = function(slides){if(s.params.loop){s.destroyLoop();}if(typeof slides === 'object' && slides.length){for(var i=0;i < slides.length;i++) {if(slides[i])s.wrapper.append(slides[i]);}}else {s.wrapper.append(slides);}if(s.params.loop){s.createLoop();}if(!(s.params.observer && s.support.observer)){s.update(true);}};s.prependSlide = function(slides){if(s.params.loop){s.destroyLoop();}var newActiveIndex=s.activeIndex + 1;if(typeof slides === 'object' && slides.length){for(var i=0;i < slides.length;i++) {if(slides[i])s.wrapper.prepend(slides[i]);}newActiveIndex = s.activeIndex + slides.length;}else {s.wrapper.prepend(slides);}if(s.params.loop){s.createLoop();}if(!(s.params.observer && s.support.observer)){s.update(true);}s.slideTo(newActiveIndex,0,false);};s.removeSlide = function(slidesIndexes){if(s.params.loop){s.destroyLoop();s.slides = s.wrapper.children('.' + s.params.slideClass);}var newActiveIndex=s.activeIndex,indexToRemove;if(typeof slidesIndexes === 'object' && slidesIndexes.length){for(var i=0;i < slidesIndexes.length;i++) {indexToRemove = slidesIndexes[i];if(s.slides[indexToRemove])s.slides.eq(indexToRemove).remove();if(indexToRemove < newActiveIndex)newActiveIndex--;}newActiveIndex = Math.max(newActiveIndex,0);}else {indexToRemove = slidesIndexes;if(s.slides[indexToRemove])s.slides.eq(indexToRemove).remove();if(indexToRemove < newActiveIndex)newActiveIndex--;newActiveIndex = Math.max(newActiveIndex,0);}if(s.params.loop){s.createLoop();}if(!(s.params.observer && s.support.observer)){s.update(true);}if(s.params.loop){s.slideTo(newActiveIndex + s.loopedSlides,0,false);}else {s.slideTo(newActiveIndex,0,false);}};s.removeAllSlides = function(){var slidesIndexes=[];for(var i=0;i < s.slides.length;i++) {slidesIndexes.push(i);}s.removeSlide(slidesIndexes);}; /*=========================\n      Effects\n      ===========================*/s.effects = {fade:{setTranslate:function setTranslate(){for(var i=0;i < s.slides.length;i++) {var slide=s.slides.eq(i);var offset=slide[0].swiperSlideOffset;var tx=-offset;if(!s.params.virtualTranslate)tx = tx - s.translate;var ty=0;if(!isH()){ty = tx;tx = 0;}var slideOpacity=s.params.fade.crossFade?Math.max(1 - Math.abs(slide[0].progress),0):1 + Math.min(Math.max(slide[0].progress,-1),0);slide.css({opacity:slideOpacity}).transform('translate3d(' + tx + 'px, ' + ty + 'px, 0px)');}},setTransition:function setTransition(duration){s.slides.transition(duration);if(s.params.virtualTranslate && duration !== 0){var eventTriggered=false;s.slides.transitionEnd(function(){if(eventTriggered)return;if(!s)return;eventTriggered = true;s.animating = false;var triggerEvents=['webkitTransitionEnd','transitionend','oTransitionEnd','MSTransitionEnd','msTransitionEnd'];for(var i=0;i < triggerEvents.length;i++) {s.wrapper.trigger(triggerEvents[i]);}});}}},cube:{setTranslate:function setTranslate(){var wrapperRotate=0,cubeShadow;if(s.params.cube.shadow){if(isH()){cubeShadow = s.wrapper.find('.swiper-cube-shadow');if(cubeShadow.length === 0){cubeShadow = $('<div class=\"swiper-cube-shadow\"></div>');s.wrapper.append(cubeShadow);}cubeShadow.css({height:s.width + 'px'});}else {cubeShadow = s.container.find('.swiper-cube-shadow');if(cubeShadow.length === 0){cubeShadow = $('<div class=\"swiper-cube-shadow\"></div>');s.container.append(cubeShadow);}}}for(var i=0;i < s.slides.length;i++) {var slide=s.slides.eq(i);var slideAngle=i * 90;var round=Math.floor(slideAngle / 360);if(s.rtl){slideAngle = -slideAngle;round = Math.floor(-slideAngle / 360);}var progress=Math.max(Math.min(slide[0].progress,1),-1);var tx=0,ty=0,tz=0;if(i % 4 === 0){tx = -round * 4 * s.size;tz = 0;}else if((i - 1) % 4 === 0){tx = 0;tz = -round * 4 * s.size;}else if((i - 2) % 4 === 0){tx = s.size + round * 4 * s.size;tz = s.size;}else if((i - 3) % 4 === 0){tx = -s.size;tz = 3 * s.size + s.size * 4 * round;}if(s.rtl){tx = -tx;}if(!isH()){ty = tx;tx = 0;}var transform='rotateX(' + (isH()?0:-slideAngle) + 'deg) rotateY(' + (isH()?slideAngle:0) + 'deg) translate3d(' + tx + 'px, ' + ty + 'px, ' + tz + 'px)';if(progress <= 1 && progress > -1){wrapperRotate = i * 90 + progress * 90;if(s.rtl)wrapperRotate = -i * 90 - progress * 90;}slide.transform(transform);if(s.params.cube.slideShadows){ //Set shadows\nvar shadowBefore=isH()?slide.find('.swiper-slide-shadow-left'):slide.find('.swiper-slide-shadow-top');var shadowAfter=isH()?slide.find('.swiper-slide-shadow-right'):slide.find('.swiper-slide-shadow-bottom');if(shadowBefore.length === 0){shadowBefore = $('<div class=\"swiper-slide-shadow-' + (isH()?'left':'top') + '\"></div>');slide.append(shadowBefore);}if(shadowAfter.length === 0){shadowAfter = $('<div class=\"swiper-slide-shadow-' + (isH()?'right':'bottom') + '\"></div>');slide.append(shadowAfter);}var shadowOpacity=slide[0].progress;if(shadowBefore.length)shadowBefore[0].style.opacity = -slide[0].progress;if(shadowAfter.length)shadowAfter[0].style.opacity = slide[0].progress;}}s.wrapper.css({'-webkit-transform-origin':'50% 50% -' + s.size / 2 + 'px','-moz-transform-origin':'50% 50% -' + s.size / 2 + 'px','-ms-transform-origin':'50% 50% -' + s.size / 2 + 'px','transform-origin':'50% 50% -' + s.size / 2 + 'px'});if(s.params.cube.shadow){if(isH()){cubeShadow.transform('translate3d(0px, ' + (s.width / 2 + s.params.cube.shadowOffset) + 'px, ' + -s.width / 2 + 'px) rotateX(90deg) rotateZ(0deg) scale(' + s.params.cube.shadowScale + ')');}else {var shadowAngle=Math.abs(wrapperRotate) - Math.floor(Math.abs(wrapperRotate) / 90) * 90;var multiplier=1.5 - (Math.sin(shadowAngle * 2 * Math.PI / 360) / 2 + Math.cos(shadowAngle * 2 * Math.PI / 360) / 2);var scale1=s.params.cube.shadowScale,scale2=s.params.cube.shadowScale / multiplier,offset=s.params.cube.shadowOffset;cubeShadow.transform('scale3d(' + scale1 + ', 1, ' + scale2 + ') translate3d(0px, ' + (s.height / 2 + offset) + 'px, ' + -s.height / 2 / scale2 + 'px) rotateX(-90deg)');}}var zFactor=s.isSafari || s.isUiWebView?-s.size / 2:0;s.wrapper.transform('translate3d(0px,0,' + zFactor + 'px) rotateX(' + (isH()?0:wrapperRotate) + 'deg) rotateY(' + (isH()?-wrapperRotate:0) + 'deg)');},setTransition:function setTransition(duration){s.slides.transition(duration).find('.swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left').transition(duration);if(s.params.cube.shadow && !isH()){s.container.find('.swiper-cube-shadow').transition(duration);}}},coverflow:{setTranslate:function setTranslate(){var transform=s.translate;var center=isH()?-transform + s.width / 2:-transform + s.height / 2;var rotate=isH()?s.params.coverflow.rotate:-s.params.coverflow.rotate;var translate=s.params.coverflow.depth; //Each slide offset from center\nfor(var i=0,length=s.slides.length;i < length;i++) {var slide=s.slides.eq(i);var slideSize=s.slidesSizesGrid[i];var slideOffset=slide[0].swiperSlideOffset;var offsetMultiplier=(center - slideOffset - slideSize / 2) / slideSize * s.params.coverflow.modifier;var rotateY=isH()?rotate * offsetMultiplier:0;var rotateX=isH()?0:rotate * offsetMultiplier; // var rotateZ = 0\nvar translateZ=-translate * Math.abs(offsetMultiplier);var translateY=isH()?0:s.params.coverflow.stretch * offsetMultiplier;var translateX=isH()?s.params.coverflow.stretch * offsetMultiplier:0; //Fix for ultra small values\nif(Math.abs(translateX) < 0.001)translateX = 0;if(Math.abs(translateY) < 0.001)translateY = 0;if(Math.abs(translateZ) < 0.001)translateZ = 0;if(Math.abs(rotateY) < 0.001)rotateY = 0;if(Math.abs(rotateX) < 0.001)rotateX = 0;var slideTransform='translate3d(' + translateX + 'px,' + translateY + 'px,' + translateZ + 'px)  rotateX(' + rotateX + 'deg) rotateY(' + rotateY + 'deg)';slide.transform(slideTransform);slide[0].style.zIndex = -Math.abs(Math.round(offsetMultiplier)) + 1;if(s.params.coverflow.slideShadows){ //Set shadows\nvar shadowBefore=isH()?slide.find('.swiper-slide-shadow-left'):slide.find('.swiper-slide-shadow-top');var shadowAfter=isH()?slide.find('.swiper-slide-shadow-right'):slide.find('.swiper-slide-shadow-bottom');if(shadowBefore.length === 0){shadowBefore = $('<div class=\"swiper-slide-shadow-' + (isH()?'left':'top') + '\"></div>');slide.append(shadowBefore);}if(shadowAfter.length === 0){shadowAfter = $('<div class=\"swiper-slide-shadow-' + (isH()?'right':'bottom') + '\"></div>');slide.append(shadowAfter);}if(shadowBefore.length)shadowBefore[0].style.opacity = offsetMultiplier > 0?offsetMultiplier:0;if(shadowAfter.length)shadowAfter[0].style.opacity = -offsetMultiplier > 0?-offsetMultiplier:0;}} //Set correct perspective for IE10\nif(s.browser.ie){var ws=s.wrapper[0].style;ws.perspectiveOrigin = center + 'px 50%';}},setTransition:function setTransition(duration){s.slides.transition(duration).find('.swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left').transition(duration);}}}; /*=========================\n      Images Lazy Loading\n      ===========================*/s.lazy = {initialImageLoaded:false,loadImageInSlide:function loadImageInSlide(index,loadInDuplicate){if(typeof index === 'undefined')return;if(typeof loadInDuplicate === 'undefined')loadInDuplicate = true;if(s.slides.length === 0)return;var slide=s.slides.eq(index);var img=slide.find('.swiper-lazy:not(.swiper-lazy-loaded):not(.swiper-lazy-loading)');if(slide.hasClass('swiper-lazy') && !slide.hasClass('swiper-lazy-loaded') && !slide.hasClass('swiper-lazy-loading')){img.add(slide[0]);}if(img.length === 0)return;img.each(function(){var _img=$(this);_img.addClass('swiper-lazy-loading');var background=_img.attr('data-background');var src=_img.attr('data-src');s.loadImage(_img[0],src || background,false,function(){if(background){_img.css('background-image','url(' + background + ')');_img.removeAttr('data-background');}else {_img.attr('src',src);_img.removeAttr('data-src');}_img.addClass('swiper-lazy-loaded').removeClass('swiper-lazy-loading');slide.find('.swiper-lazy-preloader, .preloader').remove();if(s.params.loop && loadInDuplicate){var slideOriginalIndex=slide.attr('data-swiper-slide-index');if(slide.hasClass(s.params.slideDuplicateClass)){var originalSlide=s.wrapper.children('[data-swiper-slide-index=\"' + slideOriginalIndex + '\"]:not(.' + s.params.slideDuplicateClass + ')');s.lazy.loadImageInSlide(originalSlide.index(),false);}else {var duplicatedSlide=s.wrapper.children('.' + s.params.slideDuplicateClass + '[data-swiper-slide-index=\"' + slideOriginalIndex + '\"]');s.lazy.loadImageInSlide(duplicatedSlide.index(),false);}}s.emit('onLazyImageReady',s,slide[0],_img[0]);});s.emit('onLazyImageLoad',s,slide[0],_img[0]);});},load:function load(){var i;if(s.params.watchSlidesVisibility){s.wrapper.children('.' + s.params.slideVisibleClass).each(function(){s.lazy.loadImageInSlide($(this).index());});}else {if(s.params.slidesPerView > 1){for(i = s.activeIndex;i < s.activeIndex + s.params.slidesPerView;i++) {if(s.slides[i])s.lazy.loadImageInSlide(i);}}else {s.lazy.loadImageInSlide(s.activeIndex);}}if(s.params.lazyLoadingInPrevNext){if(s.params.slidesPerView > 1){ // Next Slides\nfor(i = s.activeIndex + s.params.slidesPerView;i < s.activeIndex + s.params.slidesPerView + s.params.slidesPerView;i++) {if(s.slides[i])s.lazy.loadImageInSlide(i);} // Prev Slides\nfor(i = s.activeIndex - s.params.slidesPerView;i < s.activeIndex;i++) {if(s.slides[i])s.lazy.loadImageInSlide(i);}}else {var nextSlide=s.wrapper.children('.' + s.params.slideNextClass);if(nextSlide.length > 0)s.lazy.loadImageInSlide(nextSlide.index());var prevSlide=s.wrapper.children('.' + s.params.slidePrevClass);if(prevSlide.length > 0)s.lazy.loadImageInSlide(prevSlide.index());}}},onTransitionStart:function onTransitionStart(){if(s.params.lazyLoading){if(s.params.lazyLoadingOnTransitionStart || !s.params.lazyLoadingOnTransitionStart && !s.lazy.initialImageLoaded){s.lazy.load();}}},onTransitionEnd:function onTransitionEnd(){if(s.params.lazyLoading && !s.params.lazyLoadingOnTransitionStart){s.lazy.load();}}}; /*=========================\n      Scrollbar\n      ===========================*/s.scrollbar = {set:function set(){if(!s.params.scrollbar)return;var sb=s.scrollbar;sb.track = $(s.params.scrollbar);sb.drag = sb.track.find('.swiper-scrollbar-drag');if(sb.drag.length === 0){sb.drag = $('<div class=\"swiper-scrollbar-drag\"></div>');sb.track.append(sb.drag);}sb.drag[0].style.width = '';sb.drag[0].style.height = '';sb.trackSize = isH()?sb.track[0].offsetWidth:sb.track[0].offsetHeight;sb.divider = s.size / s.virtualSize;sb.moveDivider = sb.divider * (sb.trackSize / s.size);sb.dragSize = sb.trackSize * sb.divider;if(isH()){sb.drag[0].style.width = sb.dragSize + 'px';}else {sb.drag[0].style.height = sb.dragSize + 'px';}if(sb.divider >= 1){sb.track[0].style.display = 'none';}else {sb.track[0].style.display = '';}if(s.params.scrollbarHide){sb.track[0].style.opacity = 0;}},setTranslate:function setTranslate(){if(!s.params.scrollbar)return;var diff;var sb=s.scrollbar;var translate=s.translate || 0;var newPos;var newSize=sb.dragSize;newPos = (sb.trackSize - sb.dragSize) * s.progress;if(s.rtl && isH()){newPos = -newPos;if(newPos > 0){newSize = sb.dragSize - newPos;newPos = 0;}else if(-newPos + sb.dragSize > sb.trackSize){newSize = sb.trackSize + newPos;}}else {if(newPos < 0){newSize = sb.dragSize + newPos;newPos = 0;}else if(newPos + sb.dragSize > sb.trackSize){newSize = sb.trackSize - newPos;}}if(isH()){if(s.support.transforms3d){sb.drag.transform('translate3d(' + newPos + 'px, 0, 0)');}else {sb.drag.transform('translateX(' + newPos + 'px)');}sb.drag[0].style.width = newSize + 'px';}else {if(s.support.transforms3d){sb.drag.transform('translate3d(0px, ' + newPos + 'px, 0)');}else {sb.drag.transform('translateY(' + newPos + 'px)');}sb.drag[0].style.height = newSize + 'px';}if(s.params.scrollbarHide){clearTimeout(sb.timeout);sb.track[0].style.opacity = 1;sb.timeout = setTimeout(function(){sb.track[0].style.opacity = 0;sb.track.transition(400);},1000);}},setTransition:function setTransition(duration){if(!s.params.scrollbar)return;s.scrollbar.drag.transition(duration);}}; /*=========================\n      Controller\n      ===========================*/s.controller = {LinearSpline:function LinearSpline(x,y){this.x = x;this.y = y;this.lastIndex = x.length - 1; // Given an x value (x2), return the expected y2 value:\n// (x1,y1) is the known point before given value,\n// (x3,y3) is the known point after given value.\nvar i1,i3;var l=this.x.length;this.interpolate = function(x2){if(!x2)return 0; // Get the indexes of x1 and x3 (the array indexes before and after given x2):\ni3 = binarySearch(this.x,x2);i1 = i3 - 1; // We have our indexes i1 & i3, so we can calculate already:\n// y2 := ((x2−x1) × (y3−y1)) ÷ (x3−x1) + y1\nreturn (x2 - this.x[i1]) * (this.y[i3] - this.y[i1]) / (this.x[i3] - this.x[i1]) + this.y[i1];};var binarySearch=(function(){var maxIndex,minIndex,guess;return function(array,val){minIndex = -1;maxIndex = array.length;while(maxIndex - minIndex > 1) if(array[guess = maxIndex + minIndex >> 1] <= val){minIndex = guess;}else {maxIndex = guess;}return maxIndex;};})();}, //xxx: for now i will just save one spline function to to\ngetInterpolateFunction:function getInterpolateFunction(c){if(!s.controller.spline)s.controller.spline = s.params.loop?new s.controller.LinearSpline(s.slidesGrid,c.slidesGrid):new s.controller.LinearSpline(s.snapGrid,c.snapGrid);},setTranslate:function setTranslate(translate,byController){var controlled=s.params.control;var multiplier,controlledTranslate;function setControlledTranslate(c){ // this will create an Interpolate function based on the snapGrids\n// x is the Grid of the scrolled scroller and y will be the controlled scroller\n// it makes sense to create this only once and recall it for the interpolation\n// the function does a lot of value caching for performance\ntranslate = c.rtl && c.params.direction === 'horizontal'?-s.translate:s.translate;if(s.params.controlBy === 'slide'){s.controller.getInterpolateFunction(c); // i am not sure why the values have to be multiplicated this way, tried to invert the snapGrid\n// but it did not work out\ncontrolledTranslate = -s.controller.spline.interpolate(-translate);}if(!controlledTranslate || s.params.controlBy === 'container'){multiplier = (c.maxTranslate() - c.minTranslate()) / (s.maxTranslate() - s.minTranslate());controlledTranslate = (translate - s.minTranslate()) * multiplier + c.minTranslate();}if(s.params.controlInverse){controlledTranslate = c.maxTranslate() - controlledTranslate;}c.updateProgress(controlledTranslate);c.setWrapperTranslate(controlledTranslate,false,s);c.updateActiveIndex();}if(s.isArray(controlled)){for(var i=0;i < controlled.length;i++) {if(controlled[i] !== byController && controlled[i] instanceof Swiper){setControlledTranslate(controlled[i]);}}}else if(controlled instanceof Swiper && byController !== controlled){setControlledTranslate(controlled);}},setTransition:function setTransition(duration,byController){var controlled=s.params.control;var i;function setControlledTransition(c){c.setWrapperTransition(duration,s);if(duration !== 0){c.onTransitionStart();c.wrapper.transitionEnd(function(){if(!controlled)return;if(c.params.loop && s.params.controlBy === 'slide'){c.fixLoop();}c.onTransitionEnd();});}}if(s.isArray(controlled)){for(i = 0;i < controlled.length;i++) {if(controlled[i] !== byController && controlled[i] instanceof Swiper){setControlledTransition(controlled[i]);}}}else if(controlled instanceof Swiper && byController !== controlled){setControlledTransition(controlled);}}}; /*=========================\n      Hash Navigation\n      ===========================*/s.hashnav = {init:function init(){if(!s.params.hashnav)return;s.hashnav.initialized = true;var hash=document.location.hash.replace('#','');if(!hash)return;var speed=0;for(var i=0,length=s.slides.length;i < length;i++) {var slide=s.slides.eq(i);var slideHash=slide.attr('data-hash');if(slideHash === hash && !slide.hasClass(s.params.slideDuplicateClass)){var index=slide.index();s.slideTo(index,speed,s.params.runCallbacksOnInit,true);}}},setHash:function setHash(){if(!s.hashnav.initialized || !s.params.hashnav)return;document.location.hash = s.slides.eq(s.activeIndex).attr('data-hash') || '';}}; /*=========================\n      Keyboard Control\n      ===========================*/function handleKeyboard(e){if(e.originalEvent)e = e.originalEvent; //jquery fix\nvar kc=e.keyCode || e.charCode; // Directions locks\nif(!s.params.allowSwipeToNext && (isH() && kc === 39 || !isH() && kc === 40)){return false;}if(!s.params.allowSwipeToPrev && (isH() && kc === 37 || !isH() && kc === 38)){return false;}if(e.shiftKey || e.altKey || e.ctrlKey || e.metaKey){return;}if(document.activeElement && document.activeElement.nodeName && (document.activeElement.nodeName.toLowerCase() === 'input' || document.activeElement.nodeName.toLowerCase() === 'textarea')){return;}if(kc === 37 || kc === 39 || kc === 38 || kc === 40){var inView=false; //Check that swiper should be inside of visible area of window\nif(s.container.parents('.swiper-slide').length > 0 && s.container.parents('.swiper-slide-active').length === 0){return;}var windowScroll={left:window.pageXOffset,top:window.pageYOffset};var windowWidth=window.innerWidth;var windowHeight=window.innerHeight;var swiperOffset=s.container.offset();if(s.rtl)swiperOffset.left = swiperOffset.left - s.container[0].scrollLeft;var swiperCoord=[[swiperOffset.left,swiperOffset.top],[swiperOffset.left + s.width,swiperOffset.top],[swiperOffset.left,swiperOffset.top + s.height],[swiperOffset.left + s.width,swiperOffset.top + s.height]];for(var i=0;i < swiperCoord.length;i++) {var point=swiperCoord[i];if(point[0] >= windowScroll.left && point[0] <= windowScroll.left + windowWidth && point[1] >= windowScroll.top && point[1] <= windowScroll.top + windowHeight){inView = true;}}if(!inView)return;}if(isH()){if(kc === 37 || kc === 39){if(e.preventDefault)e.preventDefault();else e.returnValue = false;}if(kc === 39 && !s.rtl || kc === 37 && s.rtl)s.slideNext();if(kc === 37 && !s.rtl || kc === 39 && s.rtl)s.slidePrev();}else {if(kc === 38 || kc === 40){if(e.preventDefault)e.preventDefault();else e.returnValue = false;}if(kc === 40)s.slideNext();if(kc === 38)s.slidePrev();}}s.disableKeyboardControl = function(){$(document).off('keydown',handleKeyboard);};s.enableKeyboardControl = function(){$(document).on('keydown',handleKeyboard);}; /*=========================\n      Mousewheel Control\n      ===========================*/s.mousewheel = {event:false,lastScrollTime:new window.Date().getTime()};if(s.params.mousewheelControl){try{new window.WheelEvent('wheel');s.mousewheel.event = 'wheel';}catch(e) {}if(!s.mousewheel.event && document.onmousewheel !== undefined){s.mousewheel.event = 'mousewheel';}if(!s.mousewheel.event){s.mousewheel.event = 'DOMMouseScroll';}}function handleMousewheel(e){if(e.originalEvent)e = e.originalEvent; //jquery fix\nvar we=s.mousewheel.event;var delta=0; //Opera & IE\nif(e.detail)delta = -e.detail;else if(we === 'mousewheel'){if(s.params.mousewheelForceToAxis){if(isH()){if(Math.abs(e.wheelDeltaX) > Math.abs(e.wheelDeltaY))delta = e.wheelDeltaX;else return;}else {if(Math.abs(e.wheelDeltaY) > Math.abs(e.wheelDeltaX))delta = e.wheelDeltaY;else return;}}else {delta = e.wheelDelta;}}else if(we === 'DOMMouseScroll')delta = -e.detail;else if(we === 'wheel'){if(s.params.mousewheelForceToAxis){if(isH()){if(Math.abs(e.deltaX) > Math.abs(e.deltaY))delta = -e.deltaX;else return;}else {if(Math.abs(e.deltaY) > Math.abs(e.deltaX))delta = -e.deltaY;else return;}}else {delta = Math.abs(e.deltaX) > Math.abs(e.deltaY)?-e.deltaX:-e.deltaY;}}if(s.params.mousewheelInvert)delta = -delta;if(!s.params.freeMode){if(new window.Date().getTime() - s.mousewheel.lastScrollTime > 60){if(delta < 0){if((!s.isEnd || s.params.loop) && !s.animating)s.slideNext();else if(s.params.mousewheelReleaseOnEdges)return true;}else {if((!s.isBeginning || s.params.loop) && !s.animating)s.slidePrev();else if(s.params.mousewheelReleaseOnEdges)return true;}}s.mousewheel.lastScrollTime = new window.Date().getTime();}else { //Freemode or scrollContainer:\nvar position=s.getWrapperTranslate() + delta * s.params.mousewheelSensitivity;if(position > 0)position = 0;if(position < s.maxTranslate())position = s.maxTranslate();s.setWrapperTransition(0);s.setWrapperTranslate(position);s.updateProgress();s.updateActiveIndex();if(s.params.freeModeSticky){clearTimeout(s.mousewheel.timeout);s.mousewheel.timeout = setTimeout(function(){s.slideReset();},300);} // Return page scroll on edge positions\nif(position === 0 || position === s.maxTranslate())return;}if(s.params.autoplay)s.stopAutoplay();if(e.preventDefault)e.preventDefault();else e.returnValue = false;return false;}s.disableMousewheelControl = function(){if(!s.mousewheel.event)return false;s.container.off(s.mousewheel.event,handleMousewheel);return true;};s.enableMousewheelControl = function(){if(!s.mousewheel.event)return false;s.container.on(s.mousewheel.event,handleMousewheel);return true;}; /*=========================\n      Parallax\n      ===========================*/function setParallaxTransform(el,progress){el = $(el);var p,pX,pY;p = el.attr('data-swiper-parallax') || '0';pX = el.attr('data-swiper-parallax-x');pY = el.attr('data-swiper-parallax-y');if(pX || pY){pX = pX || '0';pY = pY || '0';}else {if(isH()){pX = p;pY = '0';}else {pY = p;pX = '0';}}if(pX.indexOf('%') >= 0){pX = parseInt(pX,10) * progress + '%';}else {pX = pX * progress + 'px';}if(pY.indexOf('%') >= 0){pY = parseInt(pY,10) * progress + '%';}else {pY = pY * progress + 'px';}el.transform('translate3d(' + pX + ', ' + pY + ',0px)');}s.parallax = {setTranslate:function setTranslate(){s.container.children('[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y]').each(function(){setParallaxTransform(this,s.progress);});s.slides.each(function(){var slide=$(this);slide.find('[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y]').each(function(){var progress=Math.min(Math.max(slide[0].progress,-1),1);setParallaxTransform(this,progress);});});},setTransition:function setTransition(duration){if(typeof duration === 'undefined')duration = s.params.speed;s.container.find('[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y]').each(function(){var el=$(this);var parallaxDuration=parseInt(el.attr('data-swiper-parallax-duration'),10) || duration;if(duration === 0)parallaxDuration = 0;el.transition(parallaxDuration);});}}; /*=========================\n      Plugins API. Collect all and init all plugins\n      ===========================*/s._plugins = [];for(var plugin in s.plugins) {var p=s.plugins[plugin](s,s.params[plugin]);if(p)s._plugins.push(p);} // Method to call all plugins event/method\ns.callPlugins = function(eventName){for(var i=0;i < s._plugins.length;i++) {if(eventName in s._plugins[i]){s._plugins[i][eventName](arguments[1],arguments[2],arguments[3],arguments[4],arguments[5]);}}}; /*=========================\n      Events/Callbacks/Plugins Emitter\n      ===========================*/function normalizeEventName(eventName){if(eventName.indexOf('on') !== 0){if(eventName[0] !== eventName[0].toUpperCase()){eventName = 'on' + eventName[0].toUpperCase() + eventName.substring(1);}else {eventName = 'on' + eventName;}}return eventName;}s.emitterEventListeners = {};s.emit = function(eventName){ // Trigger callbacks\nif(s.params[eventName]){s.params[eventName](arguments[1],arguments[2],arguments[3],arguments[4],arguments[5]);}var i; // Trigger events\nif(s.emitterEventListeners[eventName]){for(i = 0;i < s.emitterEventListeners[eventName].length;i++) {s.emitterEventListeners[eventName][i](arguments[1],arguments[2],arguments[3],arguments[4],arguments[5]);}} // Trigger plugins\nif(s.callPlugins)s.callPlugins(eventName,arguments[1],arguments[2],arguments[3],arguments[4],arguments[5]);};s.on = function(eventName,handler){eventName = normalizeEventName(eventName);if(!s.emitterEventListeners[eventName])s.emitterEventListeners[eventName] = [];s.emitterEventListeners[eventName].push(handler);return s;};s.off = function(eventName,handler){var i;eventName = normalizeEventName(eventName);if(typeof handler === 'undefined'){ // Remove all handlers for such event\ns.emitterEventListeners[eventName] = [];return s;}if(!s.emitterEventListeners[eventName] || s.emitterEventListeners[eventName].length === 0)return;for(i = 0;i < s.emitterEventListeners[eventName].length;i++) {if(s.emitterEventListeners[eventName][i] === handler)s.emitterEventListeners[eventName].splice(i,1);}return s;};s.once = function(eventName,handler){eventName = normalizeEventName(eventName);var _handler=function _handler(){handler(arguments[0],arguments[1],arguments[2],arguments[3],arguments[4]);s.off(eventName,_handler);};s.on(eventName,_handler);return s;}; // Accessibility tools\ns.a11y = {makeFocusable:function makeFocusable($el){$el.attr('tabIndex','0');return $el;},addRole:function addRole($el,role){$el.attr('role',role);return $el;},addLabel:function addLabel($el,label){$el.attr('aria-label',label);return $el;},disable:function disable($el){$el.attr('aria-disabled',true);return $el;},enable:function enable($el){$el.attr('aria-disabled',false);return $el;},onEnterKey:function onEnterKey(event){if(event.keyCode !== 13)return;if($(event.target).is(s.params.nextButton)){s.onClickNext(event);if(s.isEnd){s.a11y.notify(s.params.lastSlideMessage);}else {s.a11y.notify(s.params.nextSlideMessage);}}else if($(event.target).is(s.params.prevButton)){s.onClickPrev(event);if(s.isBeginning){s.a11y.notify(s.params.firstSlideMessage);}else {s.a11y.notify(s.params.prevSlideMessage);}}if($(event.target).is('.' + s.params.bulletClass)){$(event.target)[0].click();}},liveRegion:$('<span class=\"swiper-notification\" aria-live=\"assertive\" aria-atomic=\"true\"></span>'),notify:function notify(message){var notification=s.a11y.liveRegion;if(notification.length === 0)return;notification.html('');notification.html(message);},init:function init(){ // Setup accessibility\nif(s.params.nextButton){var nextButton=$(s.params.nextButton);s.a11y.makeFocusable(nextButton);s.a11y.addRole(nextButton,'button');s.a11y.addLabel(nextButton,s.params.nextSlideMessage);}if(s.params.prevButton){var prevButton=$(s.params.prevButton);s.a11y.makeFocusable(prevButton);s.a11y.addRole(prevButton,'button');s.a11y.addLabel(prevButton,s.params.prevSlideMessage);}$(s.container).append(s.a11y.liveRegion);},initPagination:function initPagination(){if(s.params.pagination && s.params.paginationClickable && s.bullets && s.bullets.length){s.bullets.each(function(){var bullet=$(this);s.a11y.makeFocusable(bullet);s.a11y.addRole(bullet,'button');s.a11y.addLabel(bullet,s.params.paginationBulletMessage.replace(/{{index}}/,bullet.index() + 1));});}},destroy:function destroy(){if(s.a11y.liveRegion && s.a11y.liveRegion.length > 0)s.a11y.liveRegion.remove();}}; /*=========================\n      Init/Destroy\n      ===========================*/s.init = function(){if(s.params.loop)s.createLoop();s.updateContainerSize();s.updateSlidesSize();s.updatePagination();if(s.params.scrollbar && s.scrollbar){s.scrollbar.set();}if(s.params.effect !== 'slide' && s.effects[s.params.effect]){if(!s.params.loop)s.updateProgress();s.effects[s.params.effect].setTranslate();}if(s.params.loop){s.slideTo(s.params.initialSlide + s.loopedSlides,0,s.params.runCallbacksOnInit);}else {s.slideTo(s.params.initialSlide,0,s.params.runCallbacksOnInit);if(s.params.initialSlide === 0){if(s.parallax && s.params.parallax)s.parallax.setTranslate();if(s.lazy && s.params.lazyLoading){s.lazy.load();s.lazy.initialImageLoaded = true;}}}s.attachEvents();if(s.params.observer && s.support.observer){s.initObservers();}if(s.params.preloadImages && !s.params.lazyLoading){s.preloadImages();}if(s.params.autoplay){s.startAutoplay();}if(s.params.keyboardControl){if(s.enableKeyboardControl)s.enableKeyboardControl();}if(s.params.mousewheelControl){if(s.enableMousewheelControl)s.enableMousewheelControl();}if(s.params.hashnav){if(s.hashnav)s.hashnav.init();}if(s.params.a11y && s.a11y)s.a11y.init();s.emit('onInit',s);}; // Cleanup dynamic styles\ns.cleanupStyles = function(){ // Container\ns.container.removeClass(s.classNames.join(' ')).removeAttr('style'); // Wrapper\ns.wrapper.removeAttr('style'); // Slides\nif(s.slides && s.slides.length){s.slides.removeClass([s.params.slideVisibleClass,s.params.slideActiveClass,s.params.slideNextClass,s.params.slidePrevClass].join(' ')).removeAttr('style').removeAttr('data-swiper-column').removeAttr('data-swiper-row');} // Pagination/Bullets\nif(s.paginationContainer && s.paginationContainer.length){s.paginationContainer.removeClass(s.params.paginationHiddenClass);}if(s.bullets && s.bullets.length){s.bullets.removeClass(s.params.bulletActiveClass);} // Buttons\nif(s.params.prevButton)$(s.params.prevButton).removeClass(s.params.buttonDisabledClass);if(s.params.nextButton)$(s.params.nextButton).removeClass(s.params.buttonDisabledClass); // Scrollbar\nif(s.params.scrollbar && s.scrollbar){if(s.scrollbar.track && s.scrollbar.track.length)s.scrollbar.track.removeAttr('style');if(s.scrollbar.drag && s.scrollbar.drag.length)s.scrollbar.drag.removeAttr('style');}}; // Destroy\ns.destroy = function(deleteInstance,cleanupStyles){ // Detach evebts\ns.detachEvents(); // Stop autoplay\ns.stopAutoplay(); // Destroy loop\nif(s.params.loop){s.destroyLoop();} // Cleanup styles\nif(cleanupStyles){s.cleanupStyles();} // Disconnect observer\ns.disconnectObservers(); // Disable keyboard/mousewheel\nif(s.params.keyboardControl){if(s.disableKeyboardControl)s.disableKeyboardControl();}if(s.params.mousewheelControl){if(s.disableMousewheelControl)s.disableMousewheelControl();} // Disable a11y\nif(s.params.a11y && s.a11y)s.a11y.destroy(); // Destroy callback\ns.emit('onDestroy'); // Delete instance\nif(deleteInstance !== false)s = null;};s.init(); // Return swiper instance\nreturn s;} /*===========================\nAdd .swiper plugin from Dom libraries\n===========================*/function addLibraryPlugin(lib){lib.fn.swiper = function(params){var firstInstance;lib(this).each(function(){var s=new Swiper(this,params);if(!firstInstance)firstInstance = s;});return firstInstance;};}return {setters:[],execute:function(){; /*==================================================\n    Prototype\n====================================================*/Swiper.prototype = {isSafari:(function(){var ua=navigator.userAgent.toLowerCase();return ua.indexOf('safari') >= 0 && ua.indexOf('chrome') < 0 && ua.indexOf('android') < 0;})(),isUiWebView:/(iPhone|iPod|iPad).*AppleWebKit(?!.*Safari)/i.test(navigator.userAgent),isArray:function isArray(arr){return Object.prototype.toString.apply(arr) === '[object Array]';}, /*==================================================\n    Browser\n    ====================================================*/browser:{ie:window.navigator.pointerEnabled || window.navigator.msPointerEnabled,ieTouch:window.navigator.msPointerEnabled && window.navigator.msMaxTouchPoints > 1 || window.navigator.pointerEnabled && window.navigator.maxTouchPoints > 1}, /*==================================================\n    Devices\n    ====================================================*/device:(function(){var ua=navigator.userAgent;var android=ua.match(/(Android);?[\\s\\/]+([\\d.]+)?/);var ipad=ua.match(/(iPad).*OS\\s([\\d_]+)/);var ipod=ua.match(/(iPod)(.*OS\\s([\\d_]+))?/);var iphone=!ipad && ua.match(/(iPhone\\sOS)\\s([\\d_]+)/);return {ios:ipad || iphone || ipod,android:android};})(), /*==================================================\n    Feature Detection\n    ====================================================*/support:{touch:window.Modernizr && Modernizr.touch === true || (function(){return !!('ontouchstart' in window || window.DocumentTouch && document instanceof DocumentTouch);})(),transforms3d:window.Modernizr && Modernizr.csstransforms3d === true || (function(){var div=document.createElement('div').style;return 'webkitPerspective' in div || 'MozPerspective' in div || 'OPerspective' in div || 'MsPerspective' in div || 'perspective' in div;})(),flexbox:(function(){var div=document.createElement('div').style;var styles='alignItems webkitAlignItems webkitBoxAlign msFlexAlign mozBoxAlign webkitFlexDirection msFlexDirection mozBoxDirection mozBoxOrient webkitBoxDirection webkitBoxOrient'.split(' ');for(var i=0;i < styles.length;i++) {if(styles[i] in div)return true;}})(),observer:(function(){return 'MutationObserver' in window || 'WebkitMutationObserver' in window;})()}, /*==================================================\n    Plugins\n    ====================================================*/plugins:{}}; /*===========================\nDom7 Library\n===========================*/Dom7 = (function(){var Dom7=function Dom7(arr){var _this=this,i=0; // Create array-like object\nfor(i = 0;i < arr.length;i++) {_this[i] = arr[i];}_this.length = arr.length; // Return collection with methods\nreturn this;};var $=function $(selector,context){var arr=[],i=0;if(selector && !context){if(selector instanceof Dom7){return selector;}}if(selector){ // String\nif(typeof selector === 'string'){var els,tempParent,html=selector.trim();if(html.indexOf('<') >= 0 && html.indexOf('>') >= 0){var toCreate='div';if(html.indexOf('<li') === 0)toCreate = 'ul';if(html.indexOf('<tr') === 0)toCreate = 'tbody';if(html.indexOf('<td') === 0 || html.indexOf('<th') === 0)toCreate = 'tr';if(html.indexOf('<tbody') === 0)toCreate = 'table';if(html.indexOf('<option') === 0)toCreate = 'select';tempParent = document.createElement(toCreate);tempParent.innerHTML = selector;for(i = 0;i < tempParent.childNodes.length;i++) {arr.push(tempParent.childNodes[i]);}}else {if(!context && selector[0] === '#' && !selector.match(/[ .<>:~]/)){ // Pure ID selector\nels = [document.getElementById(selector.split('#')[1])];}else { // Other selectors\nels = (context || document).querySelectorAll(selector);}for(i = 0;i < els.length;i++) {if(els[i])arr.push(els[i]);}}}else if(selector.nodeType || selector === window || selector === document){arr.push(selector);}else if(selector.length > 0 && selector[0].nodeType){for(i = 0;i < selector.length;i++) {arr.push(selector[i]);}}}return new Dom7(arr);};Dom7.prototype = { // Classes and attriutes\naddClass:function addClass(className){if(typeof className === 'undefined'){return this;}var classes=className.split(' ');for(var i=0;i < classes.length;i++) {for(var j=0;j < this.length;j++) {this[j].classList.add(classes[i]);}}return this;},removeClass:function removeClass(className){var classes=className.split(' ');for(var i=0;i < classes.length;i++) {for(var j=0;j < this.length;j++) {this[j].classList.remove(classes[i]);}}return this;},hasClass:function hasClass(className){if(!this[0])return false;else return this[0].classList.contains(className);},toggleClass:function toggleClass(className){var classes=className.split(' ');for(var i=0;i < classes.length;i++) {for(var j=0;j < this.length;j++) {this[j].classList.toggle(classes[i]);}}return this;},attr:function attr(attrs,value){if(arguments.length === 1 && typeof attrs === 'string'){ // Get attr\nif(this[0])return this[0].getAttribute(attrs);else return undefined;}else { // Set attrs\nfor(var i=0;i < this.length;i++) {if(arguments.length === 2){ // String\nthis[i].setAttribute(attrs,value);}else { // Object\nfor(var attrName in attrs) {this[i][attrName] = attrs[attrName];this[i].setAttribute(attrName,attrs[attrName]);}}}return this;}},removeAttr:function removeAttr(attr){for(var i=0;i < this.length;i++) {this[i].removeAttribute(attr);}return this;},data:function data(key,value){if(typeof value === 'undefined'){ // Get value\nif(this[0]){var dataKey=this[0].getAttribute('data-' + key);if(dataKey)return dataKey;else if(this[0].dom7ElementDataStorage && key in this[0].dom7ElementDataStorage)return this[0].dom7ElementDataStorage[key];else return undefined;}else return undefined;}else { // Set value\nfor(var i=0;i < this.length;i++) {var el=this[i];if(!el.dom7ElementDataStorage)el.dom7ElementDataStorage = {};el.dom7ElementDataStorage[key] = value;}return this;}}, // Transforms\ntransform:function transform(_transform){for(var i=0;i < this.length;i++) {var elStyle=this[i].style;elStyle.webkitTransform = elStyle.MsTransform = elStyle.msTransform = elStyle.MozTransform = elStyle.OTransform = elStyle.transform = _transform;}return this;},transition:function transition(duration){if(typeof duration !== 'string'){duration = duration + 'ms';}for(var i=0;i < this.length;i++) {var elStyle=this[i].style;elStyle.webkitTransitionDuration = elStyle.MsTransitionDuration = elStyle.msTransitionDuration = elStyle.MozTransitionDuration = elStyle.OTransitionDuration = elStyle.transitionDuration = duration;}return this;}, //Events\non:function on(eventName,targetSelector,listener,capture){function handleLiveEvent(e){var target=e.target;if($(target).is(targetSelector))listener.call(target,e);else {var parents=$(target).parents();for(var k=0;k < parents.length;k++) {if($(parents[k]).is(targetSelector))listener.call(parents[k],e);}}}var events=eventName.split(' ');var i,j;for(i = 0;i < this.length;i++) {if(typeof targetSelector === 'function' || targetSelector === false){ // Usual events\nif(typeof targetSelector === 'function'){listener = arguments[1];capture = arguments[2] || false;}for(j = 0;j < events.length;j++) {this[i].addEventListener(events[j],listener,capture);}}else { //Live events\nfor(j = 0;j < events.length;j++) {if(!this[i].dom7LiveListeners)this[i].dom7LiveListeners = [];this[i].dom7LiveListeners.push({listener:listener,liveListener:handleLiveEvent});this[i].addEventListener(events[j],handleLiveEvent,capture);}}}return this;},off:function off(eventName,targetSelector,listener,capture){var events=eventName.split(' ');for(var i=0;i < events.length;i++) {for(var j=0;j < this.length;j++) {if(typeof targetSelector === 'function' || targetSelector === false){ // Usual events\nif(typeof targetSelector === 'function'){listener = arguments[1];capture = arguments[2] || false;}this[j].removeEventListener(events[i],listener,capture);}else { // Live event\nif(this[j].dom7LiveListeners){for(var k=0;k < this[j].dom7LiveListeners.length;k++) {if(this[j].dom7LiveListeners[k].listener === listener){this[j].removeEventListener(events[i],this[j].dom7LiveListeners[k].liveListener,capture);}}}}}}return this;},once:function once(eventName,targetSelector,listener,capture){var dom=this;if(typeof targetSelector === 'function'){targetSelector = false;listener = arguments[1];capture = arguments[2];}function proxy(e){listener(e);dom.off(eventName,targetSelector,proxy,capture);}dom.on(eventName,targetSelector,proxy,capture);},trigger:function trigger(eventName,eventData){for(var i=0;i < this.length;i++) {var evt;try{evt = new window.CustomEvent(eventName,{detail:eventData,bubbles:true,cancelable:true});}catch(e) {evt = document.createEvent('Event');evt.initEvent(eventName,true,true);evt.detail = eventData;}this[i].dispatchEvent(evt);}return this;},transitionEnd:function transitionEnd(callback){var events=['webkitTransitionEnd','transitionend','oTransitionEnd','MSTransitionEnd','msTransitionEnd'],i,j,dom=this;function fireCallBack(e){ /*jshint validthis:true */if(e.target !== this)return;callback.call(this,e);for(i = 0;i < events.length;i++) {dom.off(events[i],fireCallBack);}}if(callback){for(i = 0;i < events.length;i++) {dom.on(events[i],fireCallBack);}}return this;}, // Sizing/Styles\nwidth:function width(){if(this[0] === window){return window.innerWidth;}else {if(this.length > 0){return parseFloat(this.css('width'));}else {return null;}}},outerWidth:function outerWidth(includeMargins){if(this.length > 0){if(includeMargins)return this[0].offsetWidth + parseFloat(this.css('margin-right')) + parseFloat(this.css('margin-left'));else return this[0].offsetWidth;}else return null;},height:function height(){if(this[0] === window){return window.innerHeight;}else {if(this.length > 0){return parseFloat(this.css('height'));}else {return null;}}},outerHeight:function outerHeight(includeMargins){if(this.length > 0){if(includeMargins)return this[0].offsetHeight + parseFloat(this.css('margin-top')) + parseFloat(this.css('margin-bottom'));else return this[0].offsetHeight;}else return null;},offset:function offset(){if(this.length > 0){var el=this[0];var box=el.getBoundingClientRect();var body=document.body;var clientTop=el.clientTop || body.clientTop || 0;var clientLeft=el.clientLeft || body.clientLeft || 0;var scrollTop=window.pageYOffset || el.scrollTop;var scrollLeft=window.pageXOffset || el.scrollLeft;return {top:box.top + scrollTop - clientTop,left:box.left + scrollLeft - clientLeft};}else {return null;}},css:function css(props,value){var i;if(arguments.length === 1){if(typeof props === 'string'){if(this[0])return window.getComputedStyle(this[0],null).getPropertyValue(props);}else {for(i = 0;i < this.length;i++) {for(var prop in props) {this[i].style[prop] = props[prop];}}return this;}}if(arguments.length === 2 && typeof props === 'string'){for(i = 0;i < this.length;i++) {this[i].style[props] = value;}return this;}return this;}, //Dom manipulation\neach:function each(callback){for(var i=0;i < this.length;i++) {callback.call(this[i],i,this[i]);}return this;},html:function html(_html){if(typeof _html === 'undefined'){return this[0]?this[0].innerHTML:undefined;}else {for(var i=0;i < this.length;i++) {this[i].innerHTML = _html;}return this;}},is:function is(selector){if(!this[0])return false;var compareWith,i;if(typeof selector === 'string'){var el=this[0];if(el === document)return selector === document;if(el === window)return selector === window;if(el.matches)return el.matches(selector);else if(el.webkitMatchesSelector)return el.webkitMatchesSelector(selector);else if(el.mozMatchesSelector)return el.mozMatchesSelector(selector);else if(el.msMatchesSelector)return el.msMatchesSelector(selector);else {compareWith = $(selector);for(i = 0;i < compareWith.length;i++) {if(compareWith[i] === this[0])return true;}return false;}}else if(selector === document)return this[0] === document;else if(selector === window)return this[0] === window;else {if(selector.nodeType || selector instanceof Dom7){compareWith = selector.nodeType?[selector]:selector;for(i = 0;i < compareWith.length;i++) {if(compareWith[i] === this[0])return true;}return false;}return false;}},index:function index(){if(this[0]){var child=this[0];var i=0;while((child = child.previousSibling) !== null) {if(child.nodeType === 1)i++;}return i;}else return undefined;},eq:function eq(index){if(typeof index === 'undefined')return this;var length=this.length;var returnIndex;if(index > length - 1){return new Dom7([]);}if(index < 0){returnIndex = length + index;if(returnIndex < 0)return new Dom7([]);else return new Dom7([this[returnIndex]]);}return new Dom7([this[index]]);},append:function append(newChild){var i,j;for(i = 0;i < this.length;i++) {if(typeof newChild === 'string'){var tempDiv=document.createElement('div');tempDiv.innerHTML = newChild;while(tempDiv.firstChild) {this[i].appendChild(tempDiv.firstChild);}}else if(newChild instanceof Dom7){for(j = 0;j < newChild.length;j++) {this[i].appendChild(newChild[j]);}}else {this[i].appendChild(newChild);}}return this;},prepend:function prepend(newChild){var i,j;for(i = 0;i < this.length;i++) {if(typeof newChild === 'string'){var tempDiv=document.createElement('div');tempDiv.innerHTML = newChild;for(j = tempDiv.childNodes.length - 1;j >= 0;j--) {this[i].insertBefore(tempDiv.childNodes[j],this[i].childNodes[0]);}}else if(newChild instanceof Dom7){for(j = 0;j < newChild.length;j++) {this[i].insertBefore(newChild[j],this[i].childNodes[0]);}}else {this[i].insertBefore(newChild,this[i].childNodes[0]);}}return this;},insertBefore:function insertBefore(selector){var before=$(selector);for(var i=0;i < this.length;i++) {if(before.length === 1){before[0].parentNode.insertBefore(this[i],before[0]);}else if(before.length > 1){for(var j=0;j < before.length;j++) {before[j].parentNode.insertBefore(this[i].cloneNode(true),before[j]);}}}},insertAfter:function insertAfter(selector){var after=$(selector);for(var i=0;i < this.length;i++) {if(after.length === 1){after[0].parentNode.insertBefore(this[i],after[0].nextSibling);}else if(after.length > 1){for(var j=0;j < after.length;j++) {after[j].parentNode.insertBefore(this[i].cloneNode(true),after[j].nextSibling);}}}},next:function next(selector){if(this.length > 0){if(selector){if(this[0].nextElementSibling && $(this[0].nextElementSibling).is(selector))return new Dom7([this[0].nextElementSibling]);else return new Dom7([]);}else {if(this[0].nextElementSibling)return new Dom7([this[0].nextElementSibling]);else return new Dom7([]);}}else return new Dom7([]);},nextAll:function nextAll(selector){var nextEls=[];var el=this[0];if(!el)return new Dom7([]);while(el.nextElementSibling) {var next=el.nextElementSibling;if(selector){if($(next).is(selector))nextEls.push(next);}else nextEls.push(next);el = next;}return new Dom7(nextEls);},prev:function prev(selector){if(this.length > 0){if(selector){if(this[0].previousElementSibling && $(this[0].previousElementSibling).is(selector))return new Dom7([this[0].previousElementSibling]);else return new Dom7([]);}else {if(this[0].previousElementSibling)return new Dom7([this[0].previousElementSibling]);else return new Dom7([]);}}else return new Dom7([]);},prevAll:function prevAll(selector){var prevEls=[];var el=this[0];if(!el)return new Dom7([]);while(el.previousElementSibling) {var prev=el.previousElementSibling;if(selector){if($(prev).is(selector))prevEls.push(prev);}else prevEls.push(prev);el = prev;}return new Dom7(prevEls);},parent:function parent(selector){var parents=[];for(var i=0;i < this.length;i++) {if(selector){if($(this[i].parentNode).is(selector))parents.push(this[i].parentNode);}else {parents.push(this[i].parentNode);}}return $($.unique(parents));},parents:function parents(selector){var parents=[];for(var i=0;i < this.length;i++) {var parent=this[i].parentNode;while(parent) {if(selector){if($(parent).is(selector))parents.push(parent);}else {parents.push(parent);}parent = parent.parentNode;}}return $($.unique(parents));},find:function find(selector){var foundElements=[];for(var i=0;i < this.length;i++) {var found=this[i].querySelectorAll(selector);for(var j=0;j < found.length;j++) {foundElements.push(found[j]);}}return new Dom7(foundElements);},children:function children(selector){var children=[];for(var i=0;i < this.length;i++) {var childNodes=this[i].childNodes;for(var j=0;j < childNodes.length;j++) {if(!selector){if(childNodes[j].nodeType === 1)children.push(childNodes[j]);}else {if(childNodes[j].nodeType === 1 && $(childNodes[j]).is(selector))children.push(childNodes[j]);}}}return new Dom7($.unique(children));},remove:function remove(){for(var i=0;i < this.length;i++) {if(this[i].parentNode)this[i].parentNode.removeChild(this[i]);}return this;},add:function add(){var dom=this;var i,j;for(i = 0;i < arguments.length;i++) {var toAdd=$(arguments[i]);for(j = 0;j < toAdd.length;j++) {dom[dom.length] = toAdd[j];dom.length++;}}return dom;}};$.fn = Dom7.prototype;$.unique = function(arr){var unique=[];for(var i=0;i < arr.length;i++) {if(unique.indexOf(arr[i]) === -1)unique.push(arr[i]);}return unique;};return $;})(); /*===========================\n Get Dom libraries\n ===========================*/swiperDomPlugins = ['jQuery','Zepto','Dom7'];for(i = 0;i < swiperDomPlugins.length;i++) {if(window[swiperDomPlugins[i]]){addLibraryPlugin(window[swiperDomPlugins[i]]);}} // Required DOM Plugins\nif(typeof Dom7 === 'undefined'){domLib = window.Dom7 || window.Zepto || window.jQuery;}else {domLib = Dom7;}if(domLib){if(!('transitionEnd' in domLib.fn)){domLib.fn.transitionEnd = function(callback){var events=['webkitTransitionEnd','transitionend','oTransitionEnd','MSTransitionEnd','msTransitionEnd'],i,j,dom=this;function fireCallBack(e){ /*jshint validthis:true */if(e.target !== this)return;callback.call(this,e);for(i = 0;i < events.length;i++) {dom.off(events[i],fireCallBack);}}if(callback){for(i = 0;i < events.length;i++) {dom.on(events[i],fireCallBack);}}return this;};}if(!('transform' in domLib.fn)){domLib.fn.transform = function(transform){for(var i=0;i < this.length;i++) {var elStyle=this[i].style;elStyle.webkitTransform = elStyle.MsTransform = elStyle.msTransform = elStyle.MozTransform = elStyle.OTransform = elStyle.transform = transform;}return this;};}if(!('transition' in domLib.fn)){domLib.fn.transition = function(duration){if(typeof duration !== 'string'){duration = duration + 'ms';}for(var i=0;i < this.length;i++) {var elStyle=this[i].style;elStyle.webkitTransitionDuration = elStyle.MsTransitionDuration = elStyle.msTransitionDuration = elStyle.MozTransitionDuration = elStyle.OTransitionDuration = elStyle.transitionDuration = duration;}return this;};}}}};});\nSystem.register(\"ionic/components/switch/switch\", [\"angular2/angular2\", \"../../util/form\", \"../../config/config\", \"../../util/dom\"], function (_export) {\n    /**\n     * @private\n     */\n    \"use strict\";\n\n    var Component, Directive, ElementRef, Host, Optional, NgControl, Inject, forwardRef, Form, Config, pointerCoord, __decorate, __metadata, __param, MediaSwitch, Switch, _a, _b, _c, _d, _e;\n\n    var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();\n\n    function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n    return {\n        setters: [function (_angular2Angular2) {\n            Component = _angular2Angular2.Component;\n            Directive = _angular2Angular2.Directive;\n            ElementRef = _angular2Angular2.ElementRef;\n            Host = _angular2Angular2.Host;\n            Optional = _angular2Angular2.Optional;\n            NgControl = _angular2Angular2.NgControl;\n            Inject = _angular2Angular2.Inject;\n            forwardRef = _angular2Angular2.forwardRef;\n        }, function (_utilForm) {\n            Form = _utilForm.Form;\n        }, function (_configConfig) {\n            Config = _configConfig.Config;\n        }, function (_utilDom) {\n            pointerCoord = _utilDom.pointerCoord;\n        }],\n        execute: function () {\n            __decorate = undefined && undefined.__decorate || function (decorators, target, key, desc) {\n                if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") return Reflect.decorate(decorators, target, key, desc);\n                switch (arguments.length) {\n                    case 2:\n                        return decorators.reduceRight(function (o, d) {\n                            return d && d(o) || o;\n                        }, target);\n                    case 3:\n                        return decorators.reduceRight(function (o, d) {\n                            return d && d(target, key), void 0;\n                        }, void 0);\n                    case 4:\n                        return decorators.reduceRight(function (o, d) {\n                            return d && d(target, key, o) || o;\n                        }, desc);\n                }\n            };\n\n            __metadata = undefined && undefined.__metadata || function (k, v) {\n                if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n            };\n\n            __param = undefined && undefined.__param || function (paramIndex, decorator) {\n                return function (target, key) {\n                    decorator(target, key, paramIndex);\n                };\n            };\n\n            MediaSwitch =\n            /**\n             * TODO\n             * @param {Switch} swtch  TODO\n             * @param {} elementRef  TODO\n             * @param {Config} config  TODO\n             */\n            function MediaSwitch(swtch, elementRef) {\n                _classCallCheck(this, MediaSwitch);\n\n                swtch.switchEle = elementRef.nativeElement;\n                this.swtch = swtch;\n            };\n\n            MediaSwitch = __decorate([Directive({\n                selector: 'media-switch',\n                host: {\n                    '[class.switch-activated]': 'swtch.isActivated'\n                }\n            }), __param(0, Host()), __param(0, Inject(forwardRef(function () {\n                return Switch;\n            }))), __metadata('design:paramtypes', [Switch, typeof (_a = typeof ElementRef !== 'undefined' && ElementRef) === 'function' && _a || Object])], MediaSwitch);\n            /**\n             * @name Switch\n             * @description\n             * A switch technically is the same thing as an HTML checkbox input, except it looks different and is easier to use on a touch device. Ionic prefers to wrap the checkbox input with the `<label>` in order to make the entire toggle easy to tap or drag.\n             * Switches can also have colors assigned to them, by adding any color attribute to them.\n             *\n             * See the [Angular 2 Docs](https://angular.io/docs/js/latest/api/forms/) for more info on forms and input.\n             * @property {any} [value] - the inital value of the switch\n             * @property {boolean} [checked] - whether the switch it toggled or not\n             * @property {boolean} [disabled] - whether the switch is disabled or not\n             * @property {string} [id] - a unique ID for a switch\n             * @usage\n             * ```html\n             * // Create a single switch\n             *  <ion-switch checked=\"true\">\n             *    Pineapple\n             *  </ion-switch>\n             *\n             * // Create a list of switches:\n             *  <ion-list>\n             *\n             *    <ion-switch checked=\"true\">\n             *      Apple\n             *    </ion-switch>\n             *\n             *     <ion-switch checked=\"false\">\n             *       Banana\n             *     </ion-switch>\n             *\n             *     <ion-switch disabled=\"true\">\n             *       Cherry\n             *     </ion-switch>\n             *\n             *  </ion-list>\n             * ```\n             *\n             * @see {@link /docs/components#switch Switch Component Docs}\n             */\n\n            Switch = (function () {\n                function Switch(form, elementRef, config, ngControl) {\n                    _classCallCheck(this, Switch);\n\n                    this.ngControl = ngControl;\n                    this.form = form;\n                    form.register(this);\n                    this.lastTouch = 0;\n                    this.mode = config.get('mode');\n                    this.onChange = function (_) {};\n                    this.onTouched = function (_) {};\n                    if (ngControl) ngControl.valueAccessor = this;\n                    var self = this;\n                    function pointerMove(ev) {\n                        var currentX = pointerCoord(ev).x;\n                        if (self.checked) {\n                            if (currentX + 15 < self.startX) {\n                                self.toggle(ev);\n                                self.startX = currentX;\n                            }\n                        } else if (currentX - 15 > self.startX) {\n                            self.toggle(ev);\n                            self.startX = currentX;\n                        }\n                    }\n                    function pointerOut(ev) {\n                        if (ev.currentTarget === ev.target) {\n                            self.pointerUp(ev);\n                        }\n                    }\n                    this.addMoveListener = function () {\n                        self.switchEle.addEventListener('touchmove', pointerMove);\n                        self.switchEle.addEventListener('mousemove', pointerMove);\n                        elementRef.nativeElement.addEventListener('mouseout', pointerOut);\n                    };\n                    this.removeMoveListener = function () {\n                        self.switchEle.removeEventListener('touchmove', pointerMove);\n                        self.switchEle.removeEventListener('mousemove', pointerMove);\n                        elementRef.nativeElement.removeEventListener('mouseout', pointerOut);\n                    };\n                }\n\n                /**\n                 * @private\n                 */\n\n                _createClass(Switch, [{\n                    key: \"onInit\",\n                    value: function onInit() {\n                        this.labelId = 'label-' + this.inputId;\n                    }\n\n                    /**\n                     * Set checked state of this switch.\n                     * @param {boolean} value  Boolean to set this switch's checked state to.\n                     */\n                }, {\n                    key: \"check\",\n                    value: function check(value) {\n                        this.checked = !!value;\n                        this.onChange(this.checked);\n                    }\n\n                    /**\n                     * Toggle the checked state of this switch.\n                     */\n                }, {\n                    key: \"toggle\",\n                    value: function toggle(ev) {\n                        this.check(!this.checked);\n                    }\n\n                    /**\n                     * @private\n                     */\n                }, {\n                    key: \"writeValue\",\n                    value: function writeValue(value) {\n                        this.checked = value;\n                    }\n\n                    /**\n                     * @private\n                     */\n                }, {\n                    key: \"pointerDown\",\n                    value: function pointerDown(ev) {\n                        if (/touch/.test(ev.type)) {\n                            this.lastTouch = Date.now();\n                        }\n                        if (this.isDisabled(ev)) return;\n                        this.startX = pointerCoord(ev).x;\n                        this.removeMoveListener();\n                        this.addMoveListener();\n                        this.isActivated = true;\n                    }\n\n                    /**\n                     * @private\n                     */\n                }, {\n                    key: \"pointerUp\",\n                    value: function pointerUp(ev) {\n                        if (this.isDisabled(ev)) return;\n                        var endX = pointerCoord(ev).x;\n                        if (this.checked) {\n                            if (this.startX + 4 > endX) {\n                                this.toggle(ev);\n                            }\n                        } else if (this.startX - 4 < endX) {\n                            this.toggle(ev);\n                        }\n                        this.removeMoveListener();\n                        this.isActivated = false;\n                    }\n\n                    /**\n                     * @private\n                     */\n                }, {\n                    key: \"registerOnChange\",\n                    value: function registerOnChange(fn) {\n                        this.onChange = fn;\n                    }\n\n                    /**\n                     * @private\n                     */\n                }, {\n                    key: \"registerOnTouched\",\n                    value: function registerOnTouched(fn) {\n                        this.onTouched = fn;\n                    }\n\n                    /**\n                     * @private\n                     */\n                }, {\n                    key: \"onDestroy\",\n                    value: function onDestroy() {\n                        this.removeMoveListener();\n                        this.switchEle = this.addMoveListener = this.removeMoveListener = null;\n                        this.form.deregister(this);\n                    }\n\n                    /**\n                     * @private\n                     */\n                }, {\n                    key: \"isDisabled\",\n                    value: function isDisabled(ev) {\n                        return this.lastTouch + 999 > Date.now() && /mouse/.test(ev.type) || this.mode == 'ios' && ev.target.tagName == 'ION-SWITCH';\n                    }\n                }]);\n\n                return Switch;\n            })();\n\n            _export(\"Switch\", Switch);\n\n            _export(\"Switch\", Switch = __decorate([Component({\n                selector: 'ion-switch',\n                inputs: ['value', 'checked', 'disabled', 'id'],\n                host: {\n                    'role': 'checkbox',\n                    'tappable': 'true',\n                    '[attr.tab-index]': 'tabIndex',\n                    '[attr.aria-checked]': 'checked',\n                    '[attr.aria-disabled]': 'disabled',\n                    '[attr.aria-labelledby]': 'labelId',\n                    '(touchstart)': 'pointerDown($event)',\n                    '(mousedown)': 'pointerDown($event)',\n                    '(touchend)': 'pointerUp($event)',\n                    '(mouseup)': 'pointerUp($event)',\n                    'class': 'item'\n                },\n                template: '<ng-content select=\"[item-left]\"></ng-content>' + '<div class=\"item-inner\">' + '<ion-item-content id=\"{{labelId}}\">' + '<ng-content></ng-content>' + '</ion-item-content>' + '<media-switch disable-activated>' + '<switch-icon></switch-icon>' + '</media-switch>' + \"</div>\",\n                directives: [MediaSwitch]\n            }), __param(3, Optional()), __metadata('design:paramtypes', [typeof (_b = typeof Form !== 'undefined' && Form) === 'function' && _b || Object, typeof (_c = typeof ElementRef !== 'undefined' && ElementRef) === 'function' && _c || Object, typeof (_d = typeof Config !== 'undefined' && Config) === 'function' && _d || Object, typeof (_e = typeof NgControl !== 'undefined' && NgControl) === 'function' && _e || Object])], Switch));\n        }\n    };\n});\nSystem.register(\"ionic/components/tabs/tab\", [\"angular2/angular2\", \"../app/app\", \"../../config/config\", \"../../util/keyboard\", \"../nav/nav-controller\", \"./tabs\"], function (_export) {\n    /**\n     * @name Tab\n     * @usage\n     * ```html\n     * <ion-tabs>\n     * \t <ion-tab tab-title=\"Home\" tab-icon=\"home\" [root]=\"tabOneRoot\"></ion-tab>\n     * \t <ion-tab tab-title=\"Login\" tab-icon=\"star\" [root]=\"tabTwoRoot\"></ion-tab>\n     * </ion-tabs>\n     * ```\n     *\n     * @description\n     * _For basic Tabs usage, see the [Tabs section](../../../../components/#tabs)\n     * of the Component docs._\n     *\n     * Tab components are basic navigation controllers used with Tabs.  Much like\n     * Nav, they are a subclass of NavController and can be used to navigate\n     * to pages in and manipulate the navigation stack of a particular tab.\n     *\n     * For more information on using navigation controllers like Tab or [Nav](../../nav/Nav/),\n     * take a look at the [NavController API reference](../NavController/).\n     *\n     * See the [Tabs API reference](../Tabs/) for more details on configuring Tabs\n     * and the TabBar.\n    \n     *\n     * @property {any} [root] - set the root page for this tab\n     * @property {any} [tab-title] - set the title of this tab\n     * @property {any} [tab-icon] - set the icon for this tab\n    \n     */\n    \"use strict\";\n\n    var ChangeDetectorRef, Component, Host, ElementRef, Compiler, AppViewManager, NgZone, Renderer, IonicApp, Config, Keyboard, NavController, Tabs, __decorate, __metadata, __param, Tab, _a, _b, _c, _d, _e, _f, _g, _h, _j, _k;\n\n    var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();\n\n    var _get = function get(_x, _x2, _x3) { var _again = true; _function: while (_again) { var object = _x, property = _x2, receiver = _x3; _again = false; if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { _x = parent; _x2 = property; _x3 = receiver; _again = true; desc = parent = undefined; continue _function; } } else if (\"value\" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } } };\n\n    function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n    function _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\n    return {\n        setters: [function (_angular2Angular2) {\n            ChangeDetectorRef = _angular2Angular2.ChangeDetectorRef;\n            Component = _angular2Angular2.Component;\n            Host = _angular2Angular2.Host;\n            ElementRef = _angular2Angular2.ElementRef;\n            Compiler = _angular2Angular2.Compiler;\n            AppViewManager = _angular2Angular2.AppViewManager;\n            NgZone = _angular2Angular2.NgZone;\n            Renderer = _angular2Angular2.Renderer;\n        }, function (_appApp) {\n            IonicApp = _appApp.IonicApp;\n        }, function (_configConfig) {\n            Config = _configConfig.Config;\n        }, function (_utilKeyboard) {\n            Keyboard = _utilKeyboard.Keyboard;\n        }, function (_navNavController) {\n            NavController = _navNavController.NavController;\n        }, function (_tabs) {\n            Tabs = _tabs.Tabs;\n        }],\n        execute: function () {\n            __decorate = undefined && undefined.__decorate || function (decorators, target, key, desc) {\n                if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") return Reflect.decorate(decorators, target, key, desc);\n                switch (arguments.length) {\n                    case 2:\n                        return decorators.reduceRight(function (o, d) {\n                            return d && d(o) || o;\n                        }, target);\n                    case 3:\n                        return decorators.reduceRight(function (o, d) {\n                            return d && d(target, key), void 0;\n                        }, void 0);\n                    case 4:\n                        return decorators.reduceRight(function (o, d) {\n                            return d && d(target, key, o) || o;\n                        }, desc);\n                }\n            };\n\n            __metadata = undefined && undefined.__metadata || function (k, v) {\n                if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n            };\n\n            __param = undefined && undefined.__param || function (paramIndex, decorator) {\n                return function (target, key) {\n                    decorator(target, key, paramIndex);\n                };\n            };\n\n            Tab = (function (_NavController) {\n                _inherits(Tab, _NavController);\n\n                function Tab(parentTabs, app, config, keyboard, elementRef, compiler, viewManager, zone, renderer, cd) {\n                    _classCallCheck(this, Tab);\n\n                    // A Tab is a NavController for its child pages\n                    _get(Object.getPrototypeOf(Tab.prototype), \"constructor\", this).call(this, parentTabs, app, config, keyboard, elementRef, 'contents', compiler, viewManager, zone, renderer, cd);\n                    this._isInitial = parentTabs.add(this);\n                    this._panelId = 'tabpanel-' + this.id;\n                    this._btnId = 'tab-' + this.id;\n                }\n\n                /**\n                 * @private\n                 */\n\n                _createClass(Tab, [{\n                    key: \"onInit\",\n                    value: function onInit() {\n                        var _this = this;\n\n                        if (this._isInitial) {\n                            this.parent.select(this);\n                        } else if (this.parent.preloadTabs) {\n                            this._loadTimer = setTimeout(function () {\n                                if (!_this._loaded) {\n                                    _this.load({\n                                        animate: false,\n                                        preload: true,\n                                        postLoad: function postLoad(viewCtrl) {\n                                            var navbar = viewCtrl.getNavbar();\n                                            navbar && navbar.setHidden(true);\n                                        }\n                                    }, function () {});\n                                }\n                            }, 1000 * this.index);\n                        }\n                    }\n\n                    /**\n                     * @private\n                     */\n                }, {\n                    key: \"load\",\n                    value: function load(opts, done) {\n                        if (!this._loaded && this.root) {\n                            this.push(this.root, null, opts, done);\n                            this._loaded = true;\n                        } else {\n                            done();\n                        }\n                    }\n\n                    /**\n                     * @private\n                     */\n                }, {\n                    key: \"loadPage\",\n                    value: function loadPage(viewCtrl, navbarContainerRef, opts, done) {\n                        // by default a page's navbar goes into the shared tab's navbar section\n                        navbarContainerRef = this.parent.navbarContainerRef;\n                        var isTabSubPage = this.parent.subPages && viewCtrl.index > 0;\n                        if (isTabSubPage) {\n                            // a subpage, that's not the first index\n                            // should not use the shared tabs navbar section, but use it's own\n                            navbarContainerRef = null;\n                        }\n                        _get(Object.getPrototypeOf(Tab.prototype), \"loadPage\", this).call(this, viewCtrl, navbarContainerRef, opts, function () {\n                            if (viewCtrl.instance) {\n                                viewCtrl.instance._tabSubPage = isTabSubPage;\n                            }\n                            done();\n                        });\n                    }\n\n                    /**\n                     * @private\n                     */\n                }, {\n                    key: \"setSelected\",\n                    value: function setSelected(isSelected) {\n                        this.isSelected = isSelected;\n                        this.hideNavbars(!isSelected);\n                    }\n\n                    /**\n                     * @private\n                     */\n                }, {\n                    key: \"hideNavbars\",\n                    value: function hideNavbars(shouldHideNavbars) {\n                        this._views.forEach(function (viewCtrl) {\n                            var navbar = viewCtrl.getNavbar();\n                            navbar && navbar.setHidden(shouldHideNavbars);\n                        });\n                    }\n\n                    /**\n                     *\n                     * ```ts\n                     * export class MyClass{\n                     *  constructor(tab: Tab){\n                     *    this.tab = tab;\n                     *    console.log(this.tab.index);\n                     *  }\n                     * }\n                     * ```\n                     *\n                     * @returns {Number} Returns the index of this page within its NavController.\n                     *\n                     */\n                }, {\n                    key: \"onDestroy\",\n\n                    /**\n                     * @private\n                     */\n                    value: function onDestroy() {\n                        clearTimeout(this._loadTimer);\n                    }\n                }, {\n                    key: \"index\",\n                    get: function get() {\n                        return this.parent.getIndex(this);\n                    }\n                }]);\n\n                return Tab;\n            })(NavController);\n\n            _export(\"Tab\", Tab);\n\n            _export(\"Tab\", Tab = __decorate([Component({\n                selector: 'ion-tab',\n                inputs: ['root', 'tabTitle', 'tabIcon'],\n                host: {\n                    '[class.show-tab]': 'isSelected',\n                    '[attr.id]': '_panelId',\n                    '[attr.aria-labelledby]': '_btnId',\n                    'role': 'tabpanel'\n                },\n                template: '<template #contents></template>'\n            }), __param(0, Host()), __metadata('design:paramtypes', [typeof (_a = typeof Tabs !== 'undefined' && Tabs) === 'function' && _a || Object, typeof (_b = typeof IonicApp !== 'undefined' && IonicApp) === 'function' && _b || Object, typeof (_c = typeof Config !== 'undefined' && Config) === 'function' && _c || Object, typeof (_d = typeof Keyboard !== 'undefined' && Keyboard) === 'function' && _d || Object, typeof (_e = typeof ElementRef !== 'undefined' && ElementRef) === 'function' && _e || Object, typeof (_f = typeof Compiler !== 'undefined' && Compiler) === 'function' && _f || Object, typeof (_g = typeof AppViewManager !== 'undefined' && AppViewManager) === 'function' && _g || Object, typeof (_h = typeof NgZone !== 'undefined' && NgZone) === 'function' && _h || Object, typeof (_j = typeof Renderer !== 'undefined' && Renderer) === 'function' && _j || Object, typeof (_k = typeof ChangeDetectorRef !== 'undefined' && ChangeDetectorRef) === 'function' && _k || Object])], Tab));\n        }\n    };\n});\nSystem.register(\"ionic/components/tabs/tabs\", [\"angular2/angular2\", \"../ion\", \"../app/id\", \"../../config/config\", \"../../platform/platform\", \"../nav/nav-controller\", \"../nav/view-controller\", \"../../config/decorators\", \"../icon/icon\", \"../../util/dom\"], function (_export) {\n    /**\n     * @name Tabs\n     * @property {any} [tabbar-placement] - set position of the tabbar, top or bottom\n     * @property {any} [tabbar-icons] - set the position of the tabbar's icons: top, bottom, left, right, hide\n     * @property {any} [tabbar-style] - sets tabbar's style (primary, secondary, etc)\n     * @property {any} [preload-tabs] - sets whether to preload all the tabs, true or false\n     * @usage\n    * ```html\n     * <ion-tabs>\n     *   <ion-tab [root]=\"tabRoot\"></ion-tab>\n     * </ion-tabs>\n     * ```\n     * @description\n     * _For basic Tabs usage, see the [Tabs section](../../../../components/#tabs)\n     * of the Component docs._\n     *\n     * The Tabs component is a container with a TabBar and any number of\n     * individual Tab components. On iOS, the TabBar is placed on the bottom of\n     * the screen, while on Android it is at the top.\n     *\n     * @see {@link /docs/components#tabs Tabs Component Docs}\n     * @see {@link ../Tab Tab API Docs}\n     */\n    \"use strict\";\n\n    var Directive, ElementRef, Optional, Host, NgFor, NgIf, forwardRef, ViewContainerRef, Ion, Attr, Config, Platform, NavController, ViewController, ConfigComponent, Icon, rafFrames, __decorate, __metadata, __param, Tabs, tabIds, TabButton, TabHighlight, TabNavBarAnchor, _a, _b, _c, _d, _e, _f, _g, _h, _j, _k;\n\n    var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();\n\n    var _get = function get(_x, _x2, _x3) { var _again = true; _function: while (_again) { var object = _x, property = _x2, receiver = _x3; _again = false; if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { _x = parent; _x2 = property; _x3 = receiver; _again = true; desc = parent = undefined; continue _function; } } else if (\"value\" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } } };\n\n    function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n    function _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\n    return {\n        setters: [function (_angular2Angular2) {\n            Directive = _angular2Angular2.Directive;\n            ElementRef = _angular2Angular2.ElementRef;\n            Optional = _angular2Angular2.Optional;\n            Host = _angular2Angular2.Host;\n            NgFor = _angular2Angular2.NgFor;\n            NgIf = _angular2Angular2.NgIf;\n            forwardRef = _angular2Angular2.forwardRef;\n            ViewContainerRef = _angular2Angular2.ViewContainerRef;\n        }, function (_ion) {\n            Ion = _ion.Ion;\n        }, function (_appId) {\n            Attr = _appId.Attr;\n        }, function (_configConfig) {\n            Config = _configConfig.Config;\n        }, function (_platformPlatform) {\n            Platform = _platformPlatform.Platform;\n        }, function (_navNavController) {\n            NavController = _navNavController.NavController;\n        }, function (_navViewController) {\n            ViewController = _navViewController.ViewController;\n        }, function (_configDecorators) {\n            ConfigComponent = _configDecorators.ConfigComponent;\n        }, function (_iconIcon) {\n            Icon = _iconIcon.Icon;\n        }, function (_utilDom) {\n            rafFrames = _utilDom.rafFrames;\n        }],\n        execute: function () {\n            __decorate = undefined && undefined.__decorate || function (decorators, target, key, desc) {\n                if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") return Reflect.decorate(decorators, target, key, desc);\n                switch (arguments.length) {\n                    case 2:\n                        return decorators.reduceRight(function (o, d) {\n                            return d && d(o) || o;\n                        }, target);\n                    case 3:\n                        return decorators.reduceRight(function (o, d) {\n                            return d && d(target, key), void 0;\n                        }, void 0);\n                    case 4:\n                        return decorators.reduceRight(function (o, d) {\n                            return d && d(target, key, o) || o;\n                        }, desc);\n                }\n            };\n\n            __metadata = undefined && undefined.__metadata || function (k, v) {\n                if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n            };\n\n            __param = undefined && undefined.__param || function (paramIndex, decorator) {\n                return function (target, key) {\n                    decorator(target, key, paramIndex);\n                };\n            };\n\n            Tabs = (function (_Ion) {\n                _inherits(Tabs, _Ion);\n\n                /**\n                 * Hi, I'm \"Tabs\". I'm really just another Page, with a few special features.\n                 * \"Tabs\" can be a sibling to other pages that can be navigated to, which those\n                 * sibling pages may or may not have their own tab bars (doesn't matter). The fact\n                 * that \"Tabs\" can happen to have children \"Tab\" classes, and each \"Tab\" can have\n                 * children pages with their own \"ViewController\" instance, as nothing to do with the\n                 * point that \"Tabs\" is itself is just a page with its own instance of ViewController.\n                 */\n\n                function Tabs(config, elementRef, viewCtrl, navCtrl, platform) {\n                    var _this = this;\n\n                    _classCallCheck(this, Tabs);\n\n                    _get(Object.getPrototypeOf(Tabs.prototype), \"constructor\", this).call(this, elementRef, config);\n                    this.platform = platform;\n                    this.parent = navCtrl;\n                    this.subPages = config.get('tabSubPages');\n                    this._tabs = [];\n                    this._id = ++tabIds;\n                    this._ids = -1;\n                    this._onReady = null;\n                    // Tabs may also be an actual ViewController which was navigated to\n                    // if Tabs is static and not navigated to within a NavController\n                    // then skip this and don't treat it as it's own ViewController\n                    if (viewCtrl) {\n                        viewCtrl.setContent(this);\n                        viewCtrl.setContentRef(elementRef);\n                        viewCtrl.onReady = function (done) {\n                            _this._onReady = done;\n                        };\n                    }\n                }\n\n                /**\n                 * @private\n                 */\n\n                _createClass(Tabs, [{\n                    key: \"onInit\",\n                    value: function onInit() {\n                        var _this2 = this;\n\n                        _get(Object.getPrototypeOf(Tabs.prototype), \"onInit\", this).call(this);\n                        this.preloadTabs = this.preloadTabs !== \"false\" && this.preloadTabs !== false;\n                        if (this._highlight) {\n                            this.platform.onResize(function () {\n                                _this2._highlight.select(_this2.getSelected());\n                            });\n                        }\n                    }\n\n                    /**\n                     * @private\n                     */\n                }, {\n                    key: \"add\",\n                    value: function add(tab) {\n                        tab.id = this._id + '-' + ++this._ids;\n                        this._tabs.push(tab);\n                        return this._tabs.length === 1;\n                    }\n\n                    /**\n                     * @param {Number} index Index of the tab you want to select\n                     */\n                }, {\n                    key: \"select\",\n                    value: function select(tabOrIndex) {\n                        var _this3 = this;\n\n                        var selectedTab = typeof tabOrIndex === 'number' ? this.getByIndex(tabOrIndex) : tabOrIndex;\n                        if (!selectedTab) {\n                            return Promise.reject();\n                        }\n                        var deselectedTab = this.getSelected();\n                        if (selectedTab === deselectedTab) {\n                            // no change\n                            return this._touchActive(selectedTab);\n                        }\n                        console.time('Tabs#select ' + selectedTab.id);\n                        var opts = {\n                            animate: false\n                        };\n                        var deselectedPage = undefined;\n                        if (deselectedTab) {\n                            deselectedPage = deselectedTab.getActive();\n                            deselectedPage && deselectedPage.willLeave();\n                        }\n                        var selectedPage = selectedTab.getActive();\n                        selectedPage && selectedPage.willEnter();\n                        selectedTab.load(opts, function () {\n                            _this3._tabs.forEach(function (tab) {\n                                tab.setSelected(tab === selectedTab);\n                            });\n                            _this3._highlight && _this3._highlight.select(selectedTab);\n                            selectedPage && selectedPage.didEnter();\n                            deselectedPage && deselectedPage.didLeave();\n                            if (_this3._onReady) {\n                                _this3._onReady();\n                                _this3._onReady = null;\n                            }\n                            console.time('Tabs#select ' + selectedTab.id);\n                        });\n                    }\n\n                    /**\n                     * @param {Number} index Index of the tab you want to get\n                     * @returns {Any} Tab Returs the tab who's index matches the one passed\n                     */\n                }, {\n                    key: \"getByIndex\",\n                    value: function getByIndex(index) {\n                        if (index < this._tabs.length && index > -1) {\n                            return this._tabs[index];\n                        }\n                        return null;\n                    }\n\n                    /**\n                     * @return {Any} Tab Returns the currently selected tab\n                     */\n                }, {\n                    key: \"getSelected\",\n                    value: function getSelected() {\n                        for (var i = 0; i < this._tabs.length; i++) {\n                            if (this._tabs[i].isSelected) {\n                                return this._tabs[i];\n                            }\n                        }\n                        return null;\n                    }\n\n                    /**\n                     * @private\n                     */\n                }, {\n                    key: \"getIndex\",\n                    value: function getIndex(tab) {\n                        return this._tabs.indexOf(tab);\n                    }\n\n                    /**\n                     * @private\n                     * \"Touch\" the active tab, going back to the root view of the tab\n                     * or optionally letting the tab handle the event\n                     */\n                }, {\n                    key: \"_touchActive\",\n                    value: function _touchActive(tab) {\n                        var active = tab.getActive();\n                        if (!active) {\n                            return Promise.resolve();\n                        }\n                        var instance = active.instance;\n                        // If they have a custom tab selected handler, call it\n                        if (instance.tabSelected) {\n                            return instance.tabSelected();\n                        }\n                        // If we're a few pages deep, pop to root\n                        if (tab.length() > 1) {\n                            // Pop to the root view\n                            return tab.popToRoot();\n                        }\n                        // Otherwise, if the page we're on is not our real root, reset it to our\n                        // default root type\n                        if (tab.root != active.componentType) {\n                            return tab.setRoot(tab.root);\n                        }\n                        // And failing all of that, we do something safe and secure\n                        return Promise.resolve();\n                    }\n                }]);\n\n                return Tabs;\n            })(Ion);\n\n            _export(\"Tabs\", Tabs);\n\n            _export(\"Tabs\", Tabs = __decorate([ConfigComponent({\n                selector: 'ion-tabs',\n                defaultInputs: {\n                    'tabbarPlacement': 'bottom',\n                    'tabbarIcons': 'top',\n                    'tabbarStyle': 'default',\n                    'preloadTabs': false\n                },\n                template: '<ion-navbar-section>' + '<template navbar-anchor></template>' + '</ion-navbar-section>' + '<ion-tabbar-section>' + '<tabbar role=\"tablist\" [attr]=\"tabbarStyle\">' + '<a *ng-for=\"#t of _tabs\" [tab]=\"t\" class=\"tab-button\" role=\"tab\">' + '<icon [name]=\"t.tabIcon\" [is-active]=\"t.isSelected\" class=\"tab-button-icon\"></icon>' + '<span class=\"tab-button-text\">{{t.tabTitle}}</span>' + '</a>' + '<tab-highlight></tab-highlight>' + '</tabbar>' + '</ion-tabbar-section>' + '<ion-content-section>' + '<ng-content></ng-content>' + '</ion-content-section>',\n                directives: [Icon, NgFor, NgIf, Attr, forwardRef(function () {\n                    return TabButton;\n                }), forwardRef(function () {\n                    return TabHighlight;\n                }), forwardRef(function () {\n                    return TabNavBarAnchor;\n                })]\n            }), __param(2, Optional()), __param(3, Optional()), __metadata('design:paramtypes', [typeof (_a = typeof Config !== 'undefined' && Config) === 'function' && _a || Object, typeof (_b = typeof ElementRef !== 'undefined' && ElementRef) === 'function' && _b || Object, typeof (_c = typeof ViewController !== 'undefined' && ViewController) === 'function' && _c || Object, typeof (_d = typeof NavController !== 'undefined' && NavController) === 'function' && _d || Object, typeof (_e = typeof Platform !== 'undefined' && Platform) === 'function' && _e || Object])], Tabs));\n            tabIds = -1;\n\n            /**\n             * @private\n             */\n\n            TabButton = (function (_Ion2) {\n                _inherits(TabButton, _Ion2);\n\n                function TabButton(tabs, config, elementRef) {\n                    _classCallCheck(this, TabButton);\n\n                    _get(Object.getPrototypeOf(TabButton.prototype), \"constructor\", this).call(this, elementRef, config);\n                    this.tabs = tabs;\n                    this.disHover = config.get('hoverCSS') === false;\n                }\n\n                _createClass(TabButton, [{\n                    key: \"onInit\",\n                    value: function onInit() {\n                        this.tab.btn = this;\n                        this.hasTitle = !!this.tab.tabTitle;\n                        this.hasIcon = !!this.tab.tabIcon;\n                        this.hasTitleOnly = this.hasTitle && !this.hasIcon;\n                        this.hasIconOnly = this.hasIcon && !this.hasTitle;\n                    }\n                }, {\n                    key: \"onClick\",\n                    value: function onClick() {\n                        this.tabs.select(this.tab);\n                    }\n                }]);\n\n                return TabButton;\n            })(Ion);\n\n            TabButton = __decorate([Directive({\n                selector: '.tab-button',\n                inputs: ['tab'],\n                host: {\n                    '[attr.id]': 'tab._btnId',\n                    '[attr.aria-controls]': 'tab._panelId',\n                    '[attr.aria-selected]': 'tab.isSelected',\n                    '[class.has-title]': 'hasTitle',\n                    '[class.has-icon]': 'hasIcon',\n                    '[class.has-title-only]': 'hasTitleOnly',\n                    '[class.icon-only]': 'hasIconOnly',\n                    '[class.disable-hover]': 'disHover',\n                    '(click)': 'onClick()'\n                }\n            }), __param(0, Host()), __metadata('design:paramtypes', [Tabs, typeof (_f = typeof Config !== 'undefined' && Config) === 'function' && _f || Object, typeof (_g = typeof ElementRef !== 'undefined' && ElementRef) === 'function' && _g || Object])], TabButton);\n            /**\n             * @private\n             */\n\n            TabHighlight = (function () {\n                function TabHighlight(tabs, config, elementRef) {\n                    _classCallCheck(this, TabHighlight);\n\n                    if (config.get('tabbarHighlight')) {\n                        tabs._highlight = this;\n                        this.elementRef = elementRef;\n                    }\n                }\n\n                _createClass(TabHighlight, [{\n                    key: \"select\",\n                    value: function select(tab) {\n                        var _this4 = this;\n\n                        rafFrames(3, function () {\n                            var d = tab.btn.getDimensions();\n                            var ele = _this4.elementRef.nativeElement;\n                            ele.style.transform = 'translate3d(' + d.left + 'px,0,0) scaleX(' + d.width + ')';\n                            if (!_this4.init) {\n                                _this4.init = true;\n                                rafFrames(6, function () {\n                                    ele.classList.add('animate');\n                                });\n                            }\n                        });\n                    }\n                }]);\n\n                return TabHighlight;\n            })();\n\n            TabHighlight = __decorate([Directive({\n                selector: 'tab-highlight'\n            }), __param(0, Host()), __metadata('design:paramtypes', [Tabs, typeof (_h = typeof Config !== 'undefined' && Config) === 'function' && _h || Object, typeof (_j = typeof ElementRef !== 'undefined' && ElementRef) === 'function' && _j || Object])], TabHighlight);\n            /**\n             * @private\n             */\n\n            TabNavBarAnchor = function TabNavBarAnchor(tabs, viewContainerRef) {\n                _classCallCheck(this, TabNavBarAnchor);\n\n                tabs.navbarContainerRef = viewContainerRef;\n            };\n\n            TabNavBarAnchor = __decorate([Directive({ selector: 'template[navbar-anchor]' }), __param(0, Host()), __metadata('design:paramtypes', [Tabs, typeof (_k = typeof ViewContainerRef !== 'undefined' && ViewContainerRef) === 'function' && _k || Object])], TabNavBarAnchor);\n        }\n    };\n});\nSystem.register('ionic/components/tap-click/activator', ['../../util/dom'], function (_export) {\n    'use strict';\n\n    var rafFrames, Activator;\n\n    var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();\n\n    function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\n    return {\n        setters: [function (_utilDom) {\n            rafFrames = _utilDom.rafFrames;\n        }],\n        execute: function () {\n            Activator = (function () {\n                function Activator(app, config, zone) {\n                    _classCallCheck(this, Activator);\n\n                    this.app = app;\n                    this.zone = zone;\n                    this.queue = [];\n                    this.active = [];\n                    this.clearStateDefers = 5;\n                    this.clearAttempt = 0;\n                    this.activatedClass = config.get('activatedClass') || 'activated';\n                    this.x = 0;\n                    this.y = 0;\n                }\n\n                _createClass(Activator, [{\n                    key: 'downAction',\n                    value: function downAction(ev, activatableEle, pointerX, pointerY, callback) {\n                        // the user just pressed down\n                        var self = this;\n                        if (self.disableActivated(ev)) return false;\n                        // remember where they pressed\n                        self.x = pointerX;\n                        self.y = pointerY;\n                        // queue to have this element activated\n                        self.queue.push(activatableEle);\n                        function activateCss() {\n                            var activatableEle = undefined;\n                            for (var i = 0; i < self.queue.length; i++) {\n                                activatableEle = self.queue[i];\n                                if (activatableEle && activatableEle.parentNode) {\n                                    self.active.push(activatableEle);\n                                    activatableEle.classList.add(self.activatedClass);\n                                }\n                            }\n                            self.queue = [];\n                        }\n                        this.zone.runOutsideAngular(function () {\n                            rafFrames(2, activateCss);\n                        });\n                        return true;\n                    }\n                }, {\n                    key: 'upAction',\n                    value: function upAction() {\n                        // the user was pressing down, then just let up\n                        var self = this;\n                        function activateUp() {\n                            self.clearState();\n                        }\n                        this.zone.runOutsideAngular(function () {\n                            rafFrames(self.clearStateDefers, activateUp);\n                        });\n                    }\n                }, {\n                    key: 'clearState',\n                    value: function clearState() {\n                        var _this = this;\n\n                        // all states should return to normal\n                        if (!this.app.isEnabled()) {\n                            // the app is actively disabled, so don't bother deactivating anything.\n                            // this makes it easier on the GPU so it doesn't have to redraw any\n                            // buttons during a transition. This will retry in XX milliseconds.\n                            setTimeout(function () {\n                                _this.clearState();\n                            }, 600);\n                        } else {\n                            // not actively transitioning, good to deactivate any elements\n                            this.deactivate();\n                        }\n                    }\n                }, {\n                    key: 'deactivate',\n                    value: function deactivate() {\n                        // remove the active class from all active elements\n                        var self = this;\n                        self.queue = [];\n                        function deactivate() {\n                            for (var i = 0; i < self.active.length; i++) {\n                                self.active[i].classList.remove(self.activatedClass);\n                            }\n                            self.active = [];\n                        }\n                        rafFrames(2, deactivate);\n                    }\n                }, {\n                    key: 'disableActivated',\n                    value: function disableActivated(ev) {\n                        if (ev.defaultPrevented) return true;\n                        var targetEle = ev.target;\n                        for (var x = 0; x < 4; x++) {\n                            if (!targetEle) break;\n                            if (targetEle.hasAttribute('disable-activated')) return true;\n                            targetEle = targetEle.parentElement;\n                        }\n                        return false;\n                    }\n                }]);\n\n                return Activator;\n            })();\n\n            _export('Activator', Activator);\n        }\n    };\n});\nSystem.register('ionic/components/tap-click/ripple', ['./activator', '../../animations/animation', '../../util/dom'], function (_export) {\n    'use strict';\n\n    var Activator, Animation, raf, rafFrames, RippleActivator, TOUCH_DOWN_ACCEL, EXPAND_DOWN_PLAYBACK_RATE, EXPAND_OUT_PLAYBACK_RATE, FADE_OUT_DURATION;\n\n    var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();\n\n    var _get = function get(_x, _x2, _x3) { var _again = true; _function: while (_again) { var object = _x, property = _x2, receiver = _x3; _again = false; if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { _x = parent; _x2 = property; _x3 = receiver; _again = true; desc = parent = undefined; continue _function; } } else if ('value' in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } } };\n\n    function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\n    function _inherits(subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\n    return {\n        setters: [function (_activator) {\n            Activator = _activator.Activator;\n        }, function (_animationsAnimation) {\n            Animation = _animationsAnimation.Animation;\n        }, function (_utilDom) {\n            raf = _utilDom.raf;\n            rafFrames = _utilDom.rafFrames;\n        }],\n        execute: function () {\n            RippleActivator = (function (_Activator) {\n                _inherits(RippleActivator, _Activator);\n\n                function RippleActivator(app, config, zone) {\n                    _classCallCheck(this, RippleActivator);\n\n                    _get(Object.getPrototypeOf(RippleActivator.prototype), 'constructor', this).call(this, app, config, zone);\n                    this.expands = {};\n                    this.fades = {};\n                    this.expandSpeed = null;\n                }\n\n                _createClass(RippleActivator, [{\n                    key: 'downAction',\n                    value: function downAction(ev, activatableEle, pointerX, pointerY) {\n                        var _this = this;\n\n                        if (_get(Object.getPrototypeOf(RippleActivator.prototype), 'downAction', this).call(this, ev, activatableEle, pointerX, pointerY)) {\n                            // create a new ripple element\n                            this.expandSpeed = EXPAND_DOWN_PLAYBACK_RATE;\n                            this.zone.runOutsideAngular(function () {\n                                raf(function () {\n                                    var clientRect = activatableEle.getBoundingClientRect();\n                                    raf(function () {\n                                        _this.createRipple(activatableEle, pointerX, pointerY, clientRect);\n                                    });\n                                });\n                            });\n                        }\n                    }\n                }, {\n                    key: 'createRipple',\n                    value: function createRipple(activatableEle, pointerX, pointerY, clientRect) {\n                        var _this2 = this;\n\n                        var clientPointerX = pointerX - clientRect.left;\n                        var clientPointerY = pointerY - clientRect.top;\n                        var x = Math.max(Math.abs(clientRect.width - clientPointerX), clientPointerX) * 2;\n                        var y = Math.max(Math.abs(clientRect.height - clientPointerY), clientPointerY) * 2;\n                        var diameter = Math.max(Math.sqrt(Math.pow(x, 2) + Math.pow(y, 2)), 64);\n                        var radius = Math.sqrt(clientRect.width + clientRect.height);\n                        var duration = 1000 * Math.sqrt(radius / TOUCH_DOWN_ACCEL) + 0.5;\n                        var rippleEle = document.createElement('md-ripple');\n                        var rippleId = Date.now();\n                        var eleStyle = rippleEle.style;\n                        eleStyle.width = eleStyle.height = diameter + 'px';\n                        eleStyle.marginTop = eleStyle.marginLeft = -(diameter / 2) + 'px';\n                        eleStyle.left = clientPointerX + 'px';\n                        eleStyle.top = clientPointerY + 'px';\n                        activatableEle.appendChild(rippleEle);\n                        // create the animation for the fade out, but don't start it yet\n                        this.fades[rippleId] = new Animation(rippleEle, { renderDelay: 0 });\n                        this.fades[rippleId].fadeOut().duration(FADE_OUT_DURATION).playbackRate(1).onFinish(function () {\n                            raf(function () {\n                                _this2.fades[rippleId].dispose(true);\n                                delete _this2.fades[rippleId];\n                            });\n                        });\n                        // expand the circle from the users starting point\n                        // start slow, and when they let up, then speed up the animation\n                        this.expands[rippleId] = new Animation(rippleEle, { renderDelay: 0 });\n                        this.expands[rippleId].fromTo('scale', '0.001', '1').duration(duration).playbackRate(this.expandSpeed).onFinish(function () {\n                            _this2.expands[rippleId].dispose();\n                            delete _this2.expands[rippleId];\n                            _this2.next();\n                        }).play();\n                    }\n                }, {\n                    key: 'upAction',\n                    value: function upAction() {\n                        var _this3 = this;\n\n                        this.deactivate();\n                        this.expandSpeed = 1;\n                        this.zone.runOutsideAngular(function () {\n                            rafFrames(4, function () {\n                                _this3.next();\n                            });\n                        });\n                    }\n                }, {\n                    key: 'next',\n                    value: function next() {\n                        var now = Date.now();\n                        var rippleId = undefined;\n                        for (rippleId in this.expands) {\n                            if (parseInt(rippleId, 10) + 4000 < now) {\n                                this.expands[rippleId].dispose(true);\n                                delete this.expands[rippleId];\n                            } else if (this.expands[rippleId].playbackRate() === EXPAND_DOWN_PLAYBACK_RATE) {\n                                this.expands[rippleId].playbackRate(EXPAND_OUT_PLAYBACK_RATE);\n                            }\n                        }\n                        for (rippleId in this.fades) {\n                            if (parseInt(rippleId, 10) + 4000 < now) {\n                                this.fades[rippleId].dispose(true);\n                                delete this.fades[rippleId];\n                            } else if (!this.fades[rippleId].isPlaying) {\n                                this.fades[rippleId].isPlaying = true;\n                                this.fades[rippleId].play();\n                            }\n                        }\n                    }\n                }, {\n                    key: 'clearState',\n                    value: function clearState() {\n                        this.deactivate();\n                        this.next();\n                    }\n                }]);\n\n                return RippleActivator;\n            })(Activator);\n\n            _export('RippleActivator', RippleActivator);\n\n            TOUCH_DOWN_ACCEL = 512;\n            EXPAND_DOWN_PLAYBACK_RATE = 0.35;\n            EXPAND_OUT_PLAYBACK_RATE = 3;\n            FADE_OUT_DURATION = 700;\n        }\n    };\n});\nSystem.register(\"ionic/components/tap-click/tap-click\", [\"angular2/angular2\", \"../app/app\", \"../../config/config\", \"../../util/dom\", \"./activator\", \"./ripple\"], function (_export) {\n    /**\n     * @private\n     */\n    \"use strict\";\n\n    var Injectable, NgZone, IonicApp, Config, pointerCoord, hasPointerMoved, Activator, RippleActivator, __decorate, __metadata, TapClick, ACTIVATABLE_ELEMENTS, ACTIVATABLE_ATTRIBUTES, POINTER_TOLERANCE, POINTER_MOVE_UNTIL_CANCEL, DISABLE_NATIVE_CLICK_AMOUNT, _a, _b, _c;\n\n    var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();\n\n    _export(\"isActivatable\", isActivatable);\n\n    function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n    function getActivatableTarget(ele) {\n        var targetEle = ele;\n        for (var x = 0; x < 4; x++) {\n            if (!targetEle) break;\n            if (isActivatable(targetEle)) return targetEle;\n            targetEle = targetEle.parentElement;\n        }\n        return null;\n    }\n    /**\n     * @private\n     */\n\n    function isActivatable(ele) {\n        if (ACTIVATABLE_ELEMENTS.test(ele.tagName)) {\n            return true;\n        }\n        var attributes = ele.attributes;\n        for (var i = 0, l = attributes.length; i < l; i++) {\n            if (ACTIVATABLE_ATTRIBUTES.test(attributes[i].name)) {\n                return true;\n            }\n        }\n        return false;\n    }\n\n    function addListener(type, listener, useCapture) {\n        document.addEventListener(type, listener, useCapture);\n    }\n    function removeListener(type, listener) {\n        document.removeEventListener(type, listener);\n    }\n    return {\n        setters: [function (_angular2Angular2) {\n            Injectable = _angular2Angular2.Injectable;\n            NgZone = _angular2Angular2.NgZone;\n        }, function (_appApp) {\n            IonicApp = _appApp.IonicApp;\n        }, function (_configConfig) {\n            Config = _configConfig.Config;\n        }, function (_utilDom) {\n            pointerCoord = _utilDom.pointerCoord;\n            hasPointerMoved = _utilDom.hasPointerMoved;\n        }, function (_activator) {\n            Activator = _activator.Activator;\n        }, function (_ripple) {\n            RippleActivator = _ripple.RippleActivator;\n        }],\n        execute: function () {\n            __decorate = undefined && undefined.__decorate || function (decorators, target, key, desc) {\n                if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") return Reflect.decorate(decorators, target, key, desc);\n                switch (arguments.length) {\n                    case 2:\n                        return decorators.reduceRight(function (o, d) {\n                            return d && d(o) || o;\n                        }, target);\n                    case 3:\n                        return decorators.reduceRight(function (o, d) {\n                            return d && d(target, key), void 0;\n                        }, void 0);\n                    case 4:\n                        return decorators.reduceRight(function (o, d) {\n                            return d && d(target, key, o) || o;\n                        }, desc);\n                }\n            };\n\n            __metadata = undefined && undefined.__metadata || function (k, v) {\n                if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n            };\n\n            TapClick = (function () {\n                function TapClick(app, config, zone) {\n                    _classCallCheck(this, TapClick);\n\n                    var self = this;\n                    self.app = app;\n                    self.zone = zone;\n                    self.lastTouch = 0;\n                    self.disableClick = 0;\n                    self.lastActivated = 0;\n                    if (config.get('activator') == 'ripple') {\n                        self.activator = new RippleActivator(app, config, zone);\n                    } else if (config.get('activator') == 'highlight') {\n                        self.activator = new Activator(app, config, zone);\n                    }\n                    self.usePolyfill = config.get('tapPolyfill') === true;\n                    zone.runOutsideAngular(function () {\n                        addListener('click', self.click.bind(self), true);\n                        if (self.usePolyfill) {\n                            addListener('touchstart', self.touchStart.bind(self));\n                            addListener('touchend', self.touchEnd.bind(self));\n                            addListener('touchcancel', self.pointerCancel.bind(self));\n                        }\n                        addListener('mousedown', self.mouseDown.bind(self), true);\n                        addListener('mouseup', self.mouseUp.bind(self), true);\n                    });\n                    self.pointerMove = function (ev) {\n                        if (hasPointerMoved(POINTER_MOVE_UNTIL_CANCEL, self.startCoord, pointerCoord(ev))) {\n                            self.pointerCancel(ev);\n                        }\n                    };\n                }\n\n                _createClass(TapClick, [{\n                    key: \"touchStart\",\n                    value: function touchStart(ev) {\n                        this.lastTouch = Date.now();\n                        this.pointerStart(ev);\n                    }\n                }, {\n                    key: \"touchEnd\",\n                    value: function touchEnd(ev) {\n                        this.lastTouch = Date.now();\n                        if (this.usePolyfill && this.startCoord && this.app.isEnabled()) {\n                            var endCoord = pointerCoord(ev);\n                            if (!hasPointerMoved(POINTER_TOLERANCE, this.startCoord, endCoord)) {\n                                console.debug('create click from touch ' + Date.now());\n                                // prevent native mouse click events for XX amount of time\n                                this.disableClick = this.lastTouch + DISABLE_NATIVE_CLICK_AMOUNT;\n                                // manually dispatch the mouse click event\n                                var clickEvent = document.createEvent('MouseEvents');\n                                clickEvent.initMouseEvent('click', true, true, window, 1, 0, 0, endCoord.x, endCoord.y, false, false, false, false, 0, null);\n                                clickEvent.isIonicTap = true;\n                                ev.target.dispatchEvent(clickEvent);\n                            }\n                        }\n                        this.pointerEnd(ev);\n                    }\n                }, {\n                    key: \"mouseDown\",\n                    value: function mouseDown(ev) {\n                        if (this.isDisabledNativeClick()) {\n                            console.debug('mouseDown prevent ' + ev.target.tagName + ' ' + Date.now());\n                            // does not prevent default on purpose\n                            // so native blur events from inputs can happen\n                            ev.stopPropagation();\n                        } else if (this.lastTouch + DISABLE_NATIVE_CLICK_AMOUNT < Date.now()) {\n                            this.pointerStart(ev);\n                        }\n                    }\n                }, {\n                    key: \"mouseUp\",\n                    value: function mouseUp(ev) {\n                        if (this.isDisabledNativeClick()) {\n                            console.debug('mouseUp prevent ' + ev.target.tagName + ' ' + Date.now());\n                            ev.preventDefault();\n                            ev.stopPropagation();\n                        }\n                        if (this.lastTouch + DISABLE_NATIVE_CLICK_AMOUNT < Date.now()) {\n                            this.pointerEnd(ev);\n                        }\n                    }\n                }, {\n                    key: \"pointerStart\",\n                    value: function pointerStart(ev) {\n                        var activatableEle = getActivatableTarget(ev.target);\n                        if (activatableEle) {\n                            this.startCoord = pointerCoord(ev);\n                            var now = Date.now();\n                            if (this.lastActivated + 150 < now) {\n                                this.activator && this.activator.downAction(ev, activatableEle, this.startCoord.x, this.startCoord.y);\n                                this.lastActivated = now;\n                            }\n                            this.moveListeners(true);\n                        } else {\n                            this.startCoord = null;\n                        }\n                    }\n                }, {\n                    key: \"pointerEnd\",\n                    value: function pointerEnd(ev) {\n                        this.moveListeners(false);\n                        this.activator && this.activator.upAction();\n                    }\n                }, {\n                    key: \"pointerCancel\",\n                    value: function pointerCancel(ev) {\n                        console.debug('pointerCancel from ' + ev.type + ' ' + Date.now());\n                        this.activator && this.activator.clearState();\n                        this.moveListeners(false);\n                    }\n                }, {\n                    key: \"moveListeners\",\n                    value: function moveListeners(shouldAdd) {\n                        removeListener(this.usePolyfill ? 'touchmove' : 'mousemove', this.pointerMove);\n                        //this.zone.runOutsideAngular(() => {\n                        if (shouldAdd) {\n                            addListener(this.usePolyfill ? 'touchmove' : 'mousemove', this.pointerMove);\n                        } else {}\n                        //});\n                    }\n                }, {\n                    key: \"click\",\n                    value: function click(ev) {\n                        var preventReason = null;\n                        if (!this.app.isEnabled()) {\n                            preventReason = 'appDisabled';\n                        } else if (!ev.isIonicTap && this.isDisabledNativeClick()) {\n                            preventReason = 'nativeClick';\n                        }\n                        if (preventReason !== null) {\n                            console.debug('click prevent ' + preventReason + ' ' + Date.now());\n                            ev.preventDefault();\n                            ev.stopPropagation();\n                        }\n                    }\n                }, {\n                    key: \"isDisabledNativeClick\",\n                    value: function isDisabledNativeClick() {\n                        return this.disableClick > Date.now();\n                    }\n                }]);\n\n                return TapClick;\n            })();\n\n            _export(\"TapClick\", TapClick);\n\n            _export(\"TapClick\", TapClick = __decorate([Injectable(), __metadata('design:paramtypes', [typeof (_a = typeof IonicApp !== 'undefined' && IonicApp) === 'function' && _a || Object, typeof (_b = typeof Config !== 'undefined' && Config) === 'function' && _b || Object, typeof (_c = typeof NgZone !== 'undefined' && NgZone) === 'function' && _c || Object])], TapClick));ACTIVATABLE_ELEMENTS = /^(A|BUTTON)$/;\n            ACTIVATABLE_ATTRIBUTES = /tappable|button/i;\n            POINTER_TOLERANCE = 4;\n            POINTER_MOVE_UNTIL_CANCEL = 10;\n            DISABLE_NATIVE_CLICK_AMOUNT = 2500;\n        }\n    };\n});\nSystem.register(\"ionic/components/text-input/label\", [\"angular2/angular2\", \"../../config/config\", \"./text-input\", \"../../util/dom\"], function (_export) {\n    /**\n     * @name Label\n     * @description\n     * Labels describe the data that the user should enter in to an input element.\n     * @usage\n     * ```html\n     * <ion-input>\n     *   <ion-label>Username</ion-label>\n     *   <input type=\"text\" value=\"\">\n     * </ion-input>\n     * ```\n     *\n     * @see {@link ../../../../components#inputs Input Component Docs}\n     * @see {@link ../Input Input API Docs}\n     *\n     */\n    \"use strict\";\n\n    var Directive, Optional, Config, TextInput, pointerCoord, hasPointerMoved, __decorate, __metadata, __param, Label, labelIds, _a, _b;\n\n    var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();\n\n    function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n    return {\n        setters: [function (_angular2Angular2) {\n            Directive = _angular2Angular2.Directive;\n            Optional = _angular2Angular2.Optional;\n        }, function (_configConfig) {\n            Config = _configConfig.Config;\n        }, function (_textInput) {\n            TextInput = _textInput.TextInput;\n        }, function (_utilDom) {\n            pointerCoord = _utilDom.pointerCoord;\n            hasPointerMoved = _utilDom.hasPointerMoved;\n        }],\n        execute: function () {\n            __decorate = undefined && undefined.__decorate || function (decorators, target, key, desc) {\n                if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") return Reflect.decorate(decorators, target, key, desc);\n                switch (arguments.length) {\n                    case 2:\n                        return decorators.reduceRight(function (o, d) {\n                            return d && d(o) || o;\n                        }, target);\n                    case 3:\n                        return decorators.reduceRight(function (o, d) {\n                            return d && d(target, key), void 0;\n                        }, void 0);\n                    case 4:\n                        return decorators.reduceRight(function (o, d) {\n                            return d && d(target, key, o) || o;\n                        }, desc);\n                }\n            };\n\n            __metadata = undefined && undefined.__metadata || function (k, v) {\n                if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n            };\n\n            __param = undefined && undefined.__param || function (paramIndex, decorator) {\n                return function (target, key) {\n                    decorator(target, key, paramIndex);\n                };\n            };\n\n            Label = (function () {\n                function Label(config, container) {\n                    _classCallCheck(this, Label);\n\n                    this.scrollAssist = config.get('scrollAssist');\n                    if (!this.id) {\n                        this.id = 'lbl-' + ++labelIds;\n                    }\n                    this.container = container;\n                    container && container.registerLabel(this);\n                }\n\n                /**\n                 * @private\n                 */\n\n                _createClass(Label, [{\n                    key: \"pointerStart\",\n                    value: function pointerStart(ev) {\n                        if (this.scrollAssist) {\n                            // remember where the touchstart/mousedown started\n                            this.startCoord = pointerCoord(ev);\n                        }\n                    }\n\n                    /**\n                     * @private\n                     */\n                }, {\n                    key: \"pointerEnd\",\n                    value: function pointerEnd(ev) {\n                        if (this.container) {\n                            // get where the touchend/mouseup ended\n                            var endCoord = pointerCoord(ev);\n                            // focus this input if the pointer hasn't moved XX pixels\n                            if (!hasPointerMoved(20, this.startCoord, endCoord)) {\n                                ev.preventDefault();\n                                ev.stopPropagation();\n                                this.container.initFocus();\n                            }\n                            this.startCoord = null;\n                        }\n                    }\n                }]);\n\n                return Label;\n            })();\n\n            _export(\"Label\", Label);\n\n            _export(\"Label\", Label = __decorate([Directive({\n                selector: 'ion-label',\n                inputs: ['id'],\n                host: {\n                    '[attr.id]': 'id',\n                    '(touchstart)': 'pointerStart($event)',\n                    '(touchend)': 'pointerEnd($event)',\n                    '(mousedown)': 'pointerStart($event)',\n                    '(mouseup)': 'pointerEnd($event)'\n                }\n            }), __param(1, Optional()), __metadata('design:paramtypes', [typeof (_a = typeof Config !== 'undefined' && Config) === 'function' && _a || Object, typeof (_b = typeof TextInput !== 'undefined' && TextInput) === 'function' && _b || Object])], Label));\n            labelIds = -1;\n        }\n    };\n});\nSystem.register(\"ionic/components/text-input/text-input\", [\"angular2/angular2\", \"../nav/nav-controller\", \"../../config/config\", \"../../util/form\", \"../app/app\", \"../content/content\", \"../../util/dom\", \"../../platform/platform\"], function (_export) {\n    /**\n     * @name Input\n     * @module ionic\n     * @description\n     * `ionInput` is a generic wrapper for both inputs and textareas. You can give `ion-input` to tell it how to handle a chile `ion-label` component\n     * @property [fixed-labels] - a persistant label that sits next the the input\n     * @property [floating-labels] - a label that will float about the input if the input is empty of looses focus\n     * @property [stacked-labels] - A stacked label will always appear on top of the input\n     * @usage\n     * ```html\n     *  <ion-input>\n     *    <ion-label>Username</ion-label>\n     *    <input type=\"text\" value=\"\">\n     *  </ion-input>\n     *\n     *  <ion-input>\n     *    <input type=\"text\" placeholder=\"Username\">\n     *  </ion-input>\n     *\n     *  <ion-input fixed-label>\n     *    <ion-label>Username</ion-label>\n     *    <input type=\"text\" value=\"\">\n     *  </ion-input>\n     *\n     *  <ion-input floating-label>\n     *    <ion-label>Username</ion-label>\n     *    <input type=\"text\" value=\"\">\n     *  </ion-input>\n     * ```\n     *\n     */\n    \"use strict\";\n\n    var Component, Directive, NgIf, forwardRef, Host, Optional, ElementRef, Renderer, Attribute, NavController, Config, Form, IonicApp, Content, dom, Platform, __decorate, __metadata, __param, _TextInput, TextInputElement, InputScrollAssist, SCROLL_ASSIST_SPEED, _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l;\n\n    var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();\n\n    function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n    function cloneInput(srcInput, addCssClass) {\n        var clonedInputEle = srcInput.cloneNode(true);\n        clonedInputEle.classList.add(addCssClass);\n        clonedInputEle.classList.remove('hide-focused-input');\n        clonedInputEle.setAttribute('aria-hidden', true);\n        clonedInputEle.removeAttribute('aria-labelledby');\n        clonedInputEle.tabIndex = -1;\n        return clonedInputEle;\n    }\n\n    function getScrollAssistDuration(distanceToScroll) {\n        //return 3000;\n        distanceToScroll = Math.abs(distanceToScroll);\n        var duration = distanceToScroll / SCROLL_ASSIST_SPEED;\n        return Math.min(400, Math.max(100, duration));\n    }\n    return {\n        setters: [function (_angular2Angular2) {\n            Component = _angular2Angular2.Component;\n            Directive = _angular2Angular2.Directive;\n            NgIf = _angular2Angular2.NgIf;\n            forwardRef = _angular2Angular2.forwardRef;\n            Host = _angular2Angular2.Host;\n            Optional = _angular2Angular2.Optional;\n            ElementRef = _angular2Angular2.ElementRef;\n            Renderer = _angular2Angular2.Renderer;\n            Attribute = _angular2Angular2.Attribute;\n        }, function (_navNavController) {\n            NavController = _navNavController.NavController;\n        }, function (_configConfig) {\n            Config = _configConfig.Config;\n        }, function (_utilForm) {\n            Form = _utilForm.Form;\n        }, function (_appApp) {\n            IonicApp = _appApp.IonicApp;\n        }, function (_contentContent) {\n            Content = _contentContent.Content;\n        }, function (_utilDom) {\n            dom = _utilDom;\n        }, function (_platformPlatform) {\n            Platform = _platformPlatform.Platform;\n        }],\n        execute: function () {\n            __decorate = undefined && undefined.__decorate || function (decorators, target, key, desc) {\n                if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") return Reflect.decorate(decorators, target, key, desc);\n                switch (arguments.length) {\n                    case 2:\n                        return decorators.reduceRight(function (o, d) {\n                            return d && d(o) || o;\n                        }, target);\n                    case 3:\n                        return decorators.reduceRight(function (o, d) {\n                            return d && d(target, key), void 0;\n                        }, void 0);\n                    case 4:\n                        return decorators.reduceRight(function (o, d) {\n                            return d && d(target, key, o) || o;\n                        }, desc);\n                }\n            };\n\n            __metadata = undefined && undefined.__metadata || function (k, v) {\n                if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n            };\n\n            __param = undefined && undefined.__param || function (paramIndex, decorator) {\n                return function (target, key) {\n                    decorator(target, key, paramIndex);\n                };\n            };\n\n            _TextInput = (function () {\n                function TextInput(form, elementRef, config, renderer, app, platform, scrollView, navCtrl) {\n                    _classCallCheck(this, TextInput);\n\n                    this.renderer = renderer;\n                    this.form = form;\n                    form.register(this);\n                    this.type = 'text';\n                    this.lastTouch = 0;\n                    this.app = app;\n                    this.elementRef = elementRef;\n                    this.platform = platform;\n                    this.navCtrl = navCtrl;\n                    this.scrollView = scrollView;\n                    this.scrollAssist = config.get('scrollAssist');\n                    this.keyboardHeight = config.get('keyboardHeight');\n                }\n\n                /**\n                 * @private\n                 * This function is used to add the Angular css classes associated with inputs in forms\n                 */\n\n                _createClass(TextInput, [{\n                    key: \"addNgClass\",\n                    value: function addNgClass(className) {\n                        return this.input.elementRef.nativeElement.classList.contains(className);\n                    }\n\n                    /**\n                     * @private\n                     */\n                }, {\n                    key: \"registerInput\",\n                    value: function registerInput(textInputElement) {\n                        this.input = textInputElement;\n                        this.type = textInputElement.type || 'text';\n                    }\n\n                    /**\n                     * @private\n                     */\n                }, {\n                    key: \"registerLabel\",\n                    value: function registerLabel(label) {\n                        this.label = label;\n                    }\n\n                    /**\n                     * @private\n                     */\n                }, {\n                    key: \"onInit\",\n                    value: function onInit() {\n                        var _this = this;\n\n                        if (this.input && this.label) {\n                            // if there is an input and an label\n                            // then give the label an ID\n                            // and tell the input the ID of who it's labelled by\n                            this.input.labelledBy(this.label.id);\n                        }\n                        var self = this;\n                        self.scrollMove = function (ev) {\n                            if (!(_this.navCtrl && _this.navCtrl.isTransitioning())) {\n                                self.deregMove();\n                                if (self.hasFocus) {\n                                    self.input.hideFocus(true);\n                                    _this.scrollView.onScrollEnd(function () {\n                                        self.input.hideFocus(false);\n                                        if (self.hasFocus) {\n                                            self.regMove();\n                                        }\n                                    });\n                                }\n                            }\n                        };\n                    }\n\n                    /**\n                     * @private\n                     */\n                }, {\n                    key: \"pointerStart\",\n                    value: function pointerStart(ev) {\n                        if (this.scrollAssist && this.app.isEnabled()) {\n                            // remember where the touchstart/mousedown started\n                            this.startCoord = dom.pointerCoord(ev);\n                        }\n                    }\n\n                    /**\n                     * @private\n                     */\n                }, {\n                    key: \"pointerEnd\",\n                    value: function pointerEnd(ev) {\n                        if (!this.app.isEnabled()) {\n                            ev.preventDefault();\n                            ev.stopPropagation();\n                        } else if (this.scrollAssist && ev.type === 'touchend') {\n                            // get where the touchend/mouseup ended\n                            var endCoord = dom.pointerCoord(ev);\n                            // focus this input if the pointer hasn't moved XX pixels\n                            // and the input doesn't already have focus\n                            if (!dom.hasPointerMoved(8, this.startCoord, endCoord) && !this.hasFocus) {\n                                ev.preventDefault();\n                                ev.stopPropagation();\n                                this.initFocus();\n                                // temporarily prevent mouseup's from focusing\n                                this.lastTouch = Date.now();\n                            }\n                        } else if (this.lastTouch + 999 < Date.now()) {\n                            ev.preventDefault();\n                            ev.stopPropagation();\n                            this.setFocus();\n                            this.regMove();\n                        }\n                    }\n\n                    /**\n                     * @private\n                     */\n                }, {\n                    key: \"initFocus\",\n                    value: function initFocus() {\n                        var _this2 = this;\n\n                        // begin the process of setting focus to the inner input element\n                        var scrollView = this.scrollView;\n                        if (scrollView && this.scrollAssist) {\n                            // this input is inside of a scroll view\n                            // find out if text input should be manually scrolled into view\n                            var ele = this.elementRef.nativeElement;\n                            var scrollData = _TextInput.getScrollData(ele.offsetTop, ele.offsetHeight, scrollView.getDimensions(), this.keyboardHeight, this.platform.height());\n                            if (scrollData.scrollAmount > -3 && scrollData.scrollAmount < 3) {\n                                // the text input is in a safe position that doesn't require\n                                // it to be scrolled into view, just set focus now\n                                this.setFocus();\n                                this.regMove();\n                                return;\n                            }\n                            // add padding to the bottom of the scroll view (if needed)\n                            scrollView.addScrollPadding(scrollData.scrollPadding);\n                            // manually scroll the text input to the top\n                            // do not allow any clicks while it's scrolling\n                            var scrollDuration = getScrollAssistDuration(scrollData.scrollAmount);\n                            this.app.setEnabled(false, scrollDuration);\n                            this.navCtrl && this.navCtrl.setTransitioning(true, scrollDuration);\n                            // temporarily move the focus to the focus holder so the browser\n                            // doesn't freak out while it's trying to get the input in place\n                            // at this point the native text input still does not have focus\n                            this.input.relocate(true, scrollData.inputSafeY);\n                            // scroll the input into place\n                            scrollView.scrollTo(0, scrollData.scrollTo, scrollDuration).then(function () {\n                                // the scroll view is in the correct position now\n                                // give the native text input focus\n                                _this2.input.relocate(false);\n                                // all good, allow clicks again\n                                _this2.app.setEnabled(true);\n                                _this2.navCtrl && _this2.navCtrl.setTransitioning(false);\n                                _this2.regMove();\n                            });\n                        } else {\n                            // not inside of a scroll view, just focus it\n                            this.setFocus();\n                            this.regMove();\n                        }\n                    }\n\n                    /**\n                     * @private\n                     * @param {TODO} inputOffsetTop  TODO\n                     * @param {TODO} inputOffsetHeight  TODO\n                     * @param {TODO} scrollViewDimensions  TODO\n                     * @param {TODO} keyboardHeight  TODO\n                     * @returns {TODO} TODO\n                     */\n                }, {\n                    key: \"focusChange\",\n\n                    /**\n                     * @private\n                     */\n                    value: function focusChange(hasFocus) {\n                        this.renderer.setElementClass(this.elementRef, 'has-focus', hasFocus);\n                        if (!hasFocus) {\n                            this.deregMove();\n                            this.input.hideFocus(false);\n                        }\n                    }\n\n                    /**\n                     * @private\n                     */\n                }, {\n                    key: \"hasValue\",\n                    value: function hasValue(inputValue) {\n                        this.renderer.setElementClass(this.elementRef, 'has-value', inputValue && inputValue !== '');\n                    }\n\n                    /**\n                     * @private\n                     */\n                }, {\n                    key: \"setFocus\",\n                    value: function setFocus() {\n                        if (this.input) {\n                            this.form.setAsFocused(this);\n                            // set focus on the actual input element\n                            this.input.setFocus();\n                            // ensure the body hasn't scrolled down\n                            document.body.scrollTop = 0;\n                        }\n                    }\n\n                    /**\n                     * @private\n                     */\n                }, {\n                    key: \"regMove\",\n                    value: function regMove() {\n                        var _this3 = this;\n\n                        if (this.scrollAssist && this.scrollView) {\n                            setTimeout(function () {\n                                _this3.deregMove();\n                                _this3.deregScroll = _this3.scrollView.addScrollEventListener(_this3.scrollMove);\n                            }, 80);\n                        }\n                    }\n\n                    /**\n                     * @private\n                     */\n                }, {\n                    key: \"deregMove\",\n                    value: function deregMove() {\n                        this.deregScroll && this.deregScroll();\n                    }\n\n                    /**\n                     * @private\n                     */\n                }, {\n                    key: \"onDestroy\",\n\n                    /**\n                     * @private\n                     */\n                    value: function onDestroy() {\n                        this.deregMove();\n                        this.form.deregister(this);\n                    }\n                }, {\n                    key: \"hasFocus\",\n                    get: function get() {\n                        return !!this.input && this.input.hasFocus;\n                    }\n                }], [{\n                    key: \"getScrollData\",\n                    value: function getScrollData(inputOffsetTop, inputOffsetHeight, scrollViewDimensions, keyboardHeight, plaformHeight) {\n                        // compute input's Y values relative to the body\n                        var inputTop = inputOffsetTop + scrollViewDimensions.contentTop - scrollViewDimensions.scrollTop;\n                        var inputBottom = inputTop + inputOffsetHeight;\n                        // compute the safe area which is the viewable content area when the soft keyboard is up\n                        var safeAreaTop = scrollViewDimensions.contentTop;\n                        var safeAreaHeight = plaformHeight - keyboardHeight - safeAreaTop;\n                        safeAreaHeight /= 2;\n                        var safeAreaBottom = safeAreaTop + safeAreaHeight;\n                        var inputTopWithinSafeArea = inputTop >= safeAreaTop && inputTop <= safeAreaBottom;\n                        var inputTopAboveSafeArea = inputTop < safeAreaTop;\n                        var inputTopBelowSafeArea = inputTop > safeAreaBottom;\n                        var inputBottomWithinSafeArea = inputBottom >= safeAreaTop && inputBottom <= safeAreaBottom;\n                        var inputBottomBelowSafeArea = inputBottom > safeAreaBottom;\n                        /*\n                        Text Input Scroll To Scenarios\n                        ---------------------------------------\n                        1) Input top within safe area, bottom within safe area\n                        2) Input top within safe area, bottom below safe area, room to scroll\n                        3) Input top above safe area, bottom within safe area, room to scroll\n                        4) Input top below safe area, no room to scroll, input smaller than safe area\n                        5) Input top within safe area, bottom below safe area, no room to scroll, input smaller than safe area\n                        6) Input top within safe area, bottom below safe area, no room to scroll, input larger than safe area\n                        7) Input top below safe area, no room to scroll, input larger than safe area\n                        */\n                        var scrollData = {\n                            scrollAmount: 0,\n                            scrollTo: 0,\n                            scrollPadding: 0,\n                            inputSafeY: 0\n                        };\n                        if (inputTopWithinSafeArea && inputBottomWithinSafeArea) {\n                            // Input top within safe area, bottom within safe area\n                            // no need to scroll to a position, it's good as-is\n                            return scrollData;\n                        }\n                        // looks like we'll have to do some auto-scrolling\n                        if (inputTopBelowSafeArea || inputBottomBelowSafeArea) {\n                            // Input top and bottom below safe area\n                            // auto scroll the input up so at least the top of it shows\n                            if (safeAreaHeight > inputOffsetHeight) {\n                                // safe area height is taller than the input height, so we\n                                // can bring it up the input just enough to show the input bottom\n                                scrollData.scrollAmount = Math.round(safeAreaBottom - inputBottom);\n                            } else {\n                                // safe area height is smaller than the input height, so we can\n                                // only scroll it up so the input top is at the top of the safe area\n                                // however the input bottom will be below the safe area\n                                scrollData.scrollAmount = Math.round(safeAreaTop - inputTop);\n                            }\n                            scrollData.inputSafeY = -(inputTop - safeAreaTop) + 4;\n                        } else if (inputTopAboveSafeArea) {\n                            // Input top above safe area\n                            // auto scroll the input down so at least the top of it shows\n                            scrollData.scrollAmount = Math.round(safeAreaTop - inputTop);\n                            scrollData.inputSafeY = safeAreaTop - inputTop + 4;\n                        }\n                        // figure out where it should scroll to for the best position to the input\n                        scrollData.scrollTo = scrollViewDimensions.scrollTop - scrollData.scrollAmount;\n                        if (scrollData.scrollAmount < 0) {\n                            // when auto-scrolling up, there also needs to be enough\n                            // content padding at the bottom of the scroll view\n                            // manually add it if there isn't enough scrollable area\n                            // figure out how many scrollable area is left to scroll up\n                            var availablePadding = scrollViewDimensions.scrollHeight - scrollViewDimensions.scrollTop - scrollViewDimensions.contentHeight;\n                            var paddingSpace = availablePadding + scrollData.scrollAmount;\n                            if (paddingSpace < 0) {\n                                // there's not enough scrollable area at the bottom, so manually add more\n                                scrollData.scrollPadding = scrollViewDimensions.contentHeight - safeAreaHeight;\n                            }\n                        }\n                        // if (!window.safeAreaEle) {\n                        //   window.safeAreaEle = document.createElement('div');\n                        //   window.safeAreaEle.style.position = 'absolute';\n                        //   window.safeAreaEle.style.background = 'rgba(0, 128, 0, 0.7)';\n                        //   window.safeAreaEle.style.padding = '2px 5px';\n                        //   window.safeAreaEle.style.textShadow = '1px 1px white';\n                        //   window.safeAreaEle.style.left = '0px';\n                        //   window.safeAreaEle.style.right = '0px';\n                        //   window.safeAreaEle.style.fontWeight = 'bold';\n                        //   window.safeAreaEle.style.pointerEvents = 'none';\n                        //   document.body.appendChild(window.safeAreaEle);\n                        // }\n                        // window.safeAreaEle.style.top = safeAreaTop + 'px';\n                        // window.safeAreaEle.style.height = safeAreaHeight + 'px';\n                        // window.safeAreaEle.innerHTML = `\n                        //   <div>scrollTo: ${scrollData.scrollTo}</div>\n                        //   <div>scrollAmount: ${scrollData.scrollAmount}</div>\n                        //   <div>scrollPadding: ${scrollData.scrollPadding}</div>\n                        //   <div>inputSafeY: ${scrollData.inputSafeY}</div>\n                        //   <div>scrollHeight: ${scrollViewDimensions.scrollHeight}</div>\n                        //   <div>scrollTop: ${scrollViewDimensions.scrollTop}</div>\n                        //   <div>contentHeight: ${scrollViewDimensions.contentHeight}</div>\n                        // `;\n                        return scrollData;\n                    }\n                }]);\n\n                return TextInput;\n            })();\n\n            _export(\"TextInput\", _TextInput);\n\n            _TextInput = __decorate([Component({\n                selector: 'ion-input',\n                host: {\n                    '(touchstart)': 'pointerStart($event)',\n                    '(touchend)': 'pointerEnd($event)',\n                    '(mouseup)': 'pointerEnd($event)',\n                    'class': 'item',\n                    '[class.ng-untouched]': 'addNgClass(\"ng-untouched\")',\n                    '[class.ng-touched]': 'addNgClass(\"ng-touched\")',\n                    '[class.ng-pristine]': 'addNgClass(\"ng-pristine\")',\n                    '[class.ng-dirty]': 'addNgClass(\"ng-dirty\")',\n                    '[class.ng-valid]': 'addNgClass(\"ng-valid\")',\n                    '[class.ng-invalid]': 'addNgClass(\"ng-invalid\")'\n                },\n                template: '<div class=\"item-inner\">' + '<ng-content></ng-content>' + '<input [type]=\"type\" aria-hidden=\"true\" scroll-assist *ng-if=\"scrollAssist\">' + '</div>',\n                directives: [NgIf, forwardRef(function () {\n                    return InputScrollAssist;\n                })]\n            }), __param(6, Optional()), __param(6, Host()), __param(7, Optional()), __metadata('design:paramtypes', [typeof (_a = typeof Form !== 'undefined' && Form) === 'function' && _a || Object, typeof (_b = typeof ElementRef !== 'undefined' && ElementRef) === 'function' && _b || Object, typeof (_c = typeof Config !== 'undefined' && Config) === 'function' && _c || Object, typeof (_d = typeof Renderer !== 'undefined' && Renderer) === 'function' && _d || Object, typeof (_e = typeof IonicApp !== 'undefined' && IonicApp) === 'function' && _e || Object, typeof (_f = typeof Platform !== 'undefined' && Platform) === 'function' && _f || Object, typeof (_g = typeof Content !== 'undefined' && Content) === 'function' && _g || Object, typeof (_h = typeof NavController !== 'undefined' && NavController) === 'function' && _h || Object])], _TextInput);\n            /**\n             * @private\n             */\n\n            TextInputElement = (function () {\n                function TextInputElement(type, elementRef, renderer, wrapper) {\n                    _classCallCheck(this, TextInputElement);\n\n                    this.type = type;\n                    this.elementRef = elementRef;\n                    this.wrapper = wrapper;\n                    this.renderer = renderer;\n                    renderer.setElementAttribute(this.elementRef, 'text-input', '');\n                    if (wrapper) {\n                        // it's within ionic's ion-input, let ion-input handle what's up\n                        wrapper.registerInput(this);\n                    }\n                }\n\n                _createClass(TextInputElement, [{\n                    key: \"onInit\",\n                    value: function onInit() {\n                        this.wrapper && this.wrapper.hasValue(this.value);\n                    }\n                }, {\n                    key: \"focusChange\",\n                    value: function focusChange(changed) {\n                        this.wrapper && this.wrapper.focusChange(changed);\n                    }\n                }, {\n                    key: \"onKeyup\",\n                    value: function onKeyup(ev) {\n                        this.wrapper && this.wrapper.hasValue(ev.target.value);\n                    }\n                }, {\n                    key: \"labelledBy\",\n                    value: function labelledBy(val) {\n                        this.renderer.setElementAttribute(this.elementRef, 'aria-labelledby', val);\n                    }\n                }, {\n                    key: \"setFocus\",\n                    value: function setFocus() {\n                        this.getNativeElement().focus();\n                    }\n                }, {\n                    key: \"relocate\",\n                    value: function relocate(shouldRelocate, inputRelativeY) {\n                        if (this._relocated !== shouldRelocate) {\n                            var focusedInputEle = this.getNativeElement();\n                            if (shouldRelocate) {\n                                var clonedInputEle = cloneInput(focusedInputEle, 'cloned-input');\n                                focusedInputEle.classList.add('hide-focused-input');\n                                focusedInputEle.style[dom.CSS.transform] = \"translate3d(-9999px,\" + inputRelativeY + \"px,0)\";\n                                focusedInputEle.parentNode.insertBefore(clonedInputEle, focusedInputEle);\n                                this.wrapper.setFocus();\n                            } else {\n                                focusedInputEle.classList.remove('hide-focused-input');\n                                focusedInputEle.style[dom.CSS.transform] = '';\n                                var clonedInputEle = focusedInputEle.parentNode.querySelector('.cloned-input');\n                                if (clonedInputEle) {\n                                    clonedInputEle.parentNode.removeChild(clonedInputEle);\n                                }\n                            }\n                            this._relocated = shouldRelocate;\n                        }\n                    }\n                }, {\n                    key: \"hideFocus\",\n                    value: function hideFocus(shouldHideFocus) {\n                        var focusedInputEle = this.getNativeElement();\n                        if (shouldHideFocus) {\n                            var clonedInputEle = cloneInput(focusedInputEle, 'cloned-hidden');\n                            focusedInputEle.classList.add('hide-focused-input');\n                            focusedInputEle.style[dom.CSS.transform] = 'translate3d(-9999px,0,0)';\n                            focusedInputEle.parentNode.insertBefore(clonedInputEle, focusedInputEle);\n                        } else {\n                            focusedInputEle.classList.remove('hide-focused-input');\n                            focusedInputEle.style[dom.CSS.transform] = '';\n                            var clonedInputEle = focusedInputEle.parentNode.querySelector('.cloned-hidden');\n                            if (clonedInputEle) {\n                                clonedInputEle.parentNode.removeChild(clonedInputEle);\n                            }\n                        }\n                    }\n                }, {\n                    key: \"getNativeElement\",\n                    value: function getNativeElement() {\n                        return this.elementRef.nativeElement;\n                    }\n                }, {\n                    key: \"hasFocus\",\n                    get: function get() {\n                        return dom.hasFocus(this.getNativeElement());\n                    }\n                }]);\n\n                return TextInputElement;\n            })();\n\n            _export(\"TextInputElement\", TextInputElement);\n\n            _export(\"TextInputElement\", TextInputElement = __decorate([Directive({\n                selector: 'textarea,input[type=text],input[type=password],input[type=number],input[type=search],input[type=email],input[type=url],input[type=tel]',\n                inputs: ['value'],\n                host: {\n                    '(focus)': 'focusChange(true)',\n                    '(blur)': 'focusChange(false)',\n                    '(keyup)': 'onKeyup($event)'\n                }\n            }), __param(0, Attribute('type')), __param(3, Optional()), __metadata('design:paramtypes', [String, typeof (_j = typeof ElementRef !== 'undefined' && ElementRef) === 'function' && _j || Object, typeof (_k = typeof Renderer !== 'undefined' && Renderer) === 'function' && _k || Object, _TextInput])], TextInputElement));\n            /**\n             * @private\n             */\n\n            InputScrollAssist = (function () {\n                function InputScrollAssist(form, textInput) {\n                    _classCallCheck(this, InputScrollAssist);\n\n                    this.form = form;\n                    this.textInput = textInput;\n                }\n\n                _createClass(InputScrollAssist, [{\n                    key: \"receivedFocus\",\n                    value: function receivedFocus(ev) {\n                        this.form.focusNext(this.textInput);\n                    }\n                }]);\n\n                return InputScrollAssist;\n            })();\n\n            InputScrollAssist = __decorate([Directive({\n                selector: '[scroll-assist]',\n                host: {\n                    '(focus)': 'receivedFocus($event)'\n                }\n            }), __metadata('design:paramtypes', [typeof (_l = typeof Form !== 'undefined' && Form) === 'function' && _l || Object, _TextInput])], InputScrollAssist);SCROLL_ASSIST_SPEED = 0.4;\n        }\n    };\n});\nSystem.register(\"ionic/components/toolbar/toolbar\", [\"angular2/angular2\", \"../ion\", \"../../config/config\", \"../navbar/navbar\"], function (_export) {\n    /**\n     * @private\n     */\n    \"use strict\";\n\n    var Component, Directive, ElementRef, Optional, forwardRef, Inject, Ion, Config, Navbar, __decorate, __metadata, __param, ToolbarBase, Toolbar, ToolbarTitle, ToolbarItem, _a, _b, _c, _d, _e, _f;\n\n    var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();\n\n    var _get = function get(_x, _x2, _x3) { var _again = true; _function: while (_again) { var object = _x, property = _x2, receiver = _x3; _again = false; if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { _x = parent; _x2 = property; _x3 = receiver; _again = true; desc = parent = undefined; continue _function; } } else if (\"value\" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } } };\n\n    function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n    function _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\n    return {\n        setters: [function (_angular2Angular2) {\n            Component = _angular2Angular2.Component;\n            Directive = _angular2Angular2.Directive;\n            ElementRef = _angular2Angular2.ElementRef;\n            Optional = _angular2Angular2.Optional;\n            forwardRef = _angular2Angular2.forwardRef;\n            Inject = _angular2Angular2.Inject;\n        }, function (_ion) {\n            Ion = _ion.Ion;\n        }, function (_configConfig) {\n            Config = _configConfig.Config;\n        }, function (_navbarNavbar) {\n            Navbar = _navbarNavbar.Navbar;\n        }],\n        execute: function () {\n            __decorate = undefined && undefined.__decorate || function (decorators, target, key, desc) {\n                if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") return Reflect.decorate(decorators, target, key, desc);\n                switch (arguments.length) {\n                    case 2:\n                        return decorators.reduceRight(function (o, d) {\n                            return d && d(o) || o;\n                        }, target);\n                    case 3:\n                        return decorators.reduceRight(function (o, d) {\n                            return d && d(target, key), void 0;\n                        }, void 0);\n                    case 4:\n                        return decorators.reduceRight(function (o, d) {\n                            return d && d(target, key, o) || o;\n                        }, desc);\n                }\n            };\n\n            __metadata = undefined && undefined.__metadata || function (k, v) {\n                if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n            };\n\n            __param = undefined && undefined.__param || function (paramIndex, decorator) {\n                return function (target, key) {\n                    decorator(target, key, paramIndex);\n                };\n            };\n\n            ToolbarBase = (function (_Ion) {\n                _inherits(ToolbarBase, _Ion);\n\n                function ToolbarBase(elementRef, config) {\n                    _classCallCheck(this, ToolbarBase);\n\n                    _get(Object.getPrototypeOf(ToolbarBase.prototype), \"constructor\", this).call(this, elementRef, config);\n                    this.itemRefs = [];\n                    this.titleRef = null;\n                }\n\n                /**\n                 * @name Toolbar\n                 * @description\n                 * The toolbar is generic bar that sits above content.\n                 * Unlike an `ionNavbar`, `ionToolbar` can be used for a subheader as well.\n                 * @usage\n                 * ```html\n                 * <ion-toolbar>\n                 *   <ion-title>My Toolbar Title</ion-title>\n                 * </ion-toolbar>\n                 *\n                 *  <ion-content></ion-content>\n                 *  ```\n                 */\n\n                /**\n                 * @private\n                 */\n\n                _createClass(ToolbarBase, [{\n                    key: \"setTitleCmp\",\n                    value: function setTitleCmp(titleCmp) {\n                        this.titleCmp = titleCmp;\n                    }\n\n                    /**\n                     * @private\n                     */\n                }, {\n                    key: \"getTitleText\",\n                    value: function getTitleText() {\n                        return this.titleCmp && this.titleCmp.getTitleText() || '';\n                    }\n\n                    /**\n                     * @private\n                     */\n                }, {\n                    key: \"getTitleRef\",\n                    value: function getTitleRef() {\n                        return this.titleCmp && this.titleCmp.elementRef;\n                    }\n\n                    /**\n                     * @private\n                     * A toolbar items include the left and right side `ion-nav-items`,\n                     * and every `menu-toggle`. It does not include the `ion-title`.\n                     * @returns {TODO} Array of this toolbar's item ElementRefs.\n                     */\n                }, {\n                    key: \"getItemRefs\",\n                    value: function getItemRefs() {\n                        return this.itemRefs;\n                    }\n\n                    /**\n                     * @private\n                     */\n                }, {\n                    key: \"addItemRef\",\n                    value: function addItemRef(itemElementRef) {\n                        this.itemRefs.push(itemElementRef);\n                    }\n                }]);\n\n                return ToolbarBase;\n            })(Ion);\n\n            _export(\"ToolbarBase\", ToolbarBase);\n\n            Toolbar = (function (_ToolbarBase) {\n                _inherits(Toolbar, _ToolbarBase);\n\n                function Toolbar(elementRef, config) {\n                    _classCallCheck(this, Toolbar);\n\n                    _get(Object.getPrototypeOf(Toolbar.prototype), \"constructor\", this).call(this, elementRef, config);\n                }\n\n                return Toolbar;\n            })(ToolbarBase);\n\n            _export(\"Toolbar\", Toolbar);\n\n            _export(\"Toolbar\", Toolbar = __decorate([Component({\n                selector: 'ion-toolbar',\n                template: '<toolbar-background></toolbar-background>' + '<ng-content select=\"[menu-toggle]\"></ng-content>' + '<ng-content select=\"ion-nav-items[primary]\"></ng-content>' + '<ng-content select=\"ion-nav-items[secondary]\"></ng-content>' + '<toolbar-content>' + '<ng-content></ng-content>' + '</toolbar-content>',\n                host: {\n                    'class': 'toolbar'\n                }\n            }), __metadata('design:paramtypes', [typeof (_a = typeof ElementRef !== 'undefined' && ElementRef) === 'function' && _a || Object, typeof (_b = typeof Config !== 'undefined' && Config) === 'function' && _b || Object])], Toolbar));\n            /**\n             * @name ToolbarTitle\n             * @description\n             * `ion-title` is a component that sets the title of the `ionToolbar` or `ionNavbar`\n             * @usage\n             * ```html\n             * <ion-navbar *navbar>\n             *    <ion-title>Tab 1</ion-title>\n             * </ion-navbar>\n             *\n             *<!-- or if you wanted to crate a subheader title-->\n             * <ion-navbar *navbar>\n             *    <ion-title>Tab 1</ion-title>\n             * </ion-navbar>\n             * <ion-toolbar>\n             *   <ion-title>SubHeader</ion-title>\n             * </ion-toolbar>\n             *  ```\n             */\n\n            ToolbarTitle = (function (_Ion2) {\n                _inherits(ToolbarTitle, _Ion2);\n\n                function ToolbarTitle(elementRef, toolbar, navbar) {\n                    _classCallCheck(this, ToolbarTitle);\n\n                    _get(Object.getPrototypeOf(ToolbarTitle.prototype), \"constructor\", this).call(this, elementRef, null);\n                    toolbar && toolbar.setTitleCmp(this);\n                    navbar && navbar.setTitleCmp(this);\n                }\n\n                /**\n                 * @private\n                 */\n\n                _createClass(ToolbarTitle, [{\n                    key: \"getTitleText\",\n                    value: function getTitleText() {\n                        return this.getNativeElement().textContent;\n                    }\n                }]);\n\n                return ToolbarTitle;\n            })(Ion);\n\n            _export(\"ToolbarTitle\", ToolbarTitle);\n\n            _export(\"ToolbarTitle\", ToolbarTitle = __decorate([Component({\n                selector: 'ion-title',\n                template: '<div class=\"toolbar-title\">' + '<ng-content></ng-content>' + '</div>'\n            }), __param(1, Optional()), __param(2, Optional()), __param(2, Inject(forwardRef(function () {\n                return Navbar;\n            }))), __metadata('design:paramtypes', [typeof (_c = typeof ElementRef !== 'undefined' && ElementRef) === 'function' && _c || Object, Toolbar, typeof (_d = typeof Navbar !== 'undefined' && Navbar) === 'function' && _d || Object])], ToolbarTitle));\n            /**\n             * @private\n             */\n\n            ToolbarItem = (function (_Ion3) {\n                _inherits(ToolbarItem, _Ion3);\n\n                function ToolbarItem(elementRef, toolbar, navbar) {\n                    _classCallCheck(this, ToolbarItem);\n\n                    _get(Object.getPrototypeOf(ToolbarItem.prototype), \"constructor\", this).call(this, elementRef, null);\n                    toolbar && toolbar.addItemRef(elementRef);\n                    navbar && navbar.addItemRef(elementRef);\n                }\n\n                return ToolbarItem;\n            })(Ion);\n\n            _export(\"ToolbarItem\", ToolbarItem);\n\n            _export(\"ToolbarItem\", ToolbarItem = __decorate([Directive({\n                selector: 'ion-nav-items,[menu-toggle]'\n            }), __param(1, Optional()), __param(2, Optional()), __param(2, Inject(forwardRef(function () {\n                return Navbar;\n            }))), __metadata('design:paramtypes', [typeof (_e = typeof ElementRef !== 'undefined' && ElementRef) === 'function' && _e || Object, Toolbar, typeof (_f = typeof Navbar !== 'undefined' && Navbar) === 'function' && _f || Object])], ToolbarItem));\n        }\n    };\n});\nSystem.register('ionic/config/config.spec', ['ionic/ionic'], function (_export) {\n    'use strict';\n\n    var Config, Platform, ionicProviders;\n\n    _export('run', run);\n\n    function run() {\n        it('should set activator setting to none for old Android Browser on a linux device', function () {\n            var config = new Config();\n            var platform = new Platform();\n            platform.userAgent('Mozilla/5.0 (Linux; U; Android 4.2.2; nl-nl; GT-I9505 Build/JDQ39) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30');\n            platform.navigatorPlatform('linux');\n            platform.load();\n            config.setPlatform(platform);\n            expect(config.get('activator')).toEqual('none');\n        });\n        it('should set activator setting to ripple for Android dev tools simulation on a mac', function () {\n            var config = new Config();\n            var platform = new Platform();\n            platform.userAgent('Mozilla/5.0 (Linux; U; Android 4.2.2; nl-nl; GT-I9505 Build/JDQ39) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30');\n            platform.navigatorPlatform('MacIntel');\n            platform.load();\n            config.setPlatform(platform);\n            expect(config.get('activator')).toEqual('ripple');\n        });\n        it('should set activator setting to none for Android Chrome versions below v36 on a linux device', function () {\n            var config = new Config();\n            var platform = new Platform();\n            platform.userAgent('Mozilla/5.0 (Linux; Android 4.2.2; GT-I9505 Build/JDQ39) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1650.59 Mobile Safari/537.36');\n            platform.navigatorPlatform('linux');\n            platform.load();\n            config.setPlatform(platform);\n            expect(config.get('activator')).toEqual('none');\n        });\n        it('should set activator setting to ripple for Android Chrome v36 and above on a linux device', function () {\n            var config = new Config();\n            var platform = new Platform();\n            platform.userAgent('Mozilla/5.0 (Linux; Android 4.2.2; GT-I9505 Build/JDQ39) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1650.59 Mobile Safari/537.36');\n            platform.navigatorPlatform('linux');\n            platform.load();\n            config.setPlatform(platform);\n            expect(config.get('activator')).toEqual('ripple');\n        });\n        it('should set activator setting to ripple for Android v5.0 and above on a linux device not using Chrome', function () {\n            var config = new Config();\n            var platform = new Platform();\n            platform.userAgent('Mozilla/5.0 (Android 5.0; Mobile; rv:41.0) Gecko/41.0 Firefox/41.0');\n            platform.navigatorPlatform('linux');\n            platform.load();\n            config.setPlatform(platform);\n            expect(config.get('activator')).toEqual('ripple');\n        });\n        it('should set activator setting to none for Android versions below v5.0 on a linux device not using Chrome', function () {\n            var config = new Config();\n            var platform = new Platform();\n            platform.userAgent('Mozilla/5.0 (Android 4.4; Mobile; rv:41.0) Gecko/41.0 Firefox/41.0');\n            platform.navigatorPlatform('linux');\n            platform.load();\n            config.setPlatform(platform);\n            expect(config.get('activator')).toEqual('none');\n        });\n        it('should create a new Config instace when no confg passed in ionicProviders', function () {\n            var providers = ionicProviders();\n            var config = providers.find(function (provider) {\n                return provider.useValue instanceof Config;\n            }).useValue;\n            expect(config.get('mode')).toEqual('ios');\n        });\n        it('should used passed in Config instance in ionicProviders', function () {\n            var userConfig = new Config({\n                mode: 'configInstance'\n            });\n            var providers = ionicProviders({ config: userConfig });\n            var config = providers.find(function (provider) {\n                return provider.useValue instanceof Config;\n            }).useValue;\n            expect(config.get('mode')).toEqual('configInstance');\n        });\n        it('should create new Config instance from config object in ionicProviders', function () {\n            var providers = ionicProviders({ config: {\n                    mode: 'configObj'\n                } });\n            var config = providers.find(function (provider) {\n                return provider.useValue instanceof Config;\n            }).useValue;\n            expect(config.get('mode')).toEqual('configObj');\n        });\n        it('should override mode settings', function () {\n            var config = new Config({\n                mode: 'md'\n            });\n            var platform = new Platform(['ios']);\n            config.setPlatform(platform);\n            expect(config.get('mode')).toEqual('md');\n            expect(config.get('tabbarPlacement')).toEqual('top');\n        });\n        it('should override mode settings from platforms setting', function () {\n            var config = new Config({\n                platforms: {\n                    ios: {\n                        mode: 'md'\n                    }\n                }\n            });\n            var platform = new Platform(['ios']);\n            config.setPlatform(platform);\n            expect(config.get('mode')).toEqual('md');\n            expect(config.get('tabbarPlacement')).toEqual('top');\n        });\n        it('should get boolean value from querystring', function () {\n            var config = new Config();\n            var platform = new Platform();\n            platform.url('http://biff.com/?ionicanimate=true');\n            config.setPlatform(platform);\n            expect(config.get('animate')).toEqual(true);\n            config = new Config();\n            platform = new Platform();\n            platform.url('http://biff.com/?ionicanimate=false');\n            config.setPlatform(platform);\n            expect(config.get('animate')).toEqual(false);\n        });\n        it('should get value from case insensitive querystring key', function () {\n            var config = new Config({\n                mode: 'a'\n            });\n            var platform = new Platform();\n            platform.url('http://biff.com/?ionicConfigKey=b');\n            config.setPlatform(platform);\n            expect(config.get('configKey')).toEqual('b');\n        });\n        it('should get value from querystring', function () {\n            var config = new Config({\n                mode: 'modeA'\n            });\n            var platform = new Platform();\n            platform.url('http://biff.com/?ionicmode=modeB');\n            config.setPlatform(platform);\n            expect(config.get('mode')).toEqual('modeB');\n        });\n        it('should override mode platform', function () {\n            var config = new Config({\n                mode: 'modeA',\n                platforms: {\n                    mobile: {\n                        mode: 'modeB'\n                    },\n                    ios: {\n                        mode: 'modeC'\n                    }\n                }\n            });\n            var platform = new Platform(['mobile']);\n            config.setPlatform(platform);\n            expect(config.get('mode')).toEqual('modeB');\n        });\n        it('should override mode', function () {\n            var config = new Config({\n                mode: 'modeA'\n            });\n            var platform = new Platform(['core']);\n            config.setPlatform(platform);\n            expect(config.get('mode')).toEqual('modeA');\n        });\n        it('should get user settings after user platform settings', function () {\n            var config = new Config({\n                hoverCSS: true\n            });\n            var platform = new Platform(['ios']);\n            config.setPlatform(platform);\n            expect(config.get('hoverCSS')).toEqual(true);\n        });\n        it('should get ios mode for core platform', function () {\n            var config = new Config();\n            var platform = new Platform(['core']);\n            config.setPlatform(platform);\n            expect(config.get('mode')).toEqual('ios');\n        });\n        it('should get ios mode for ipad platform', function () {\n            var config = new Config();\n            var platform = new Platform(['mobile', 'ios', 'ipad', 'tablet']);\n            config.setPlatform(platform);\n            expect(config.get('mode')).toEqual('ios');\n        });\n        it('should get md mode for windowsphone platform', function () {\n            var config = new Config();\n            var platform = new Platform(['mobile', 'windowsphone']);\n            config.setPlatform(platform);\n            expect(config.get('mode')).toEqual('md');\n        });\n        it('should get md mode for android platform', function () {\n            var config = new Config();\n            var platform = new Platform(['mobile', 'android']);\n            config.setPlatform(platform);\n            expect(config.get('mode')).toEqual('md');\n        });\n        it('should override ios mode config with user platform setting', function () {\n            var config = new Config({\n                tabbarPlacement: 'hide',\n                platforms: {\n                    ios: {\n                        tabbarPlacement: 'top'\n                    }\n                }\n            });\n            var platform = new Platform(['ios']);\n            config.setPlatform(platform);\n            expect(config.get('tabbarPlacement')).toEqual('top');\n        });\n        it('should override ios mode config with user setting', function () {\n            var config = new Config({\n                tabbarPlacement: 'top'\n            });\n            var platform = new Platform(['ios']);\n            config.setPlatform(platform);\n            expect(config.get('tabbarPlacement')).toEqual('top');\n        });\n        it('should get setting from md mode', function () {\n            var config = new Config();\n            var platform = new Platform(['android']);\n            config.setPlatform(platform);\n            expect(config.get('tabbarPlacement')).toEqual('top');\n        });\n        it('should get setting from ios mode', function () {\n            var config = new Config();\n            var platform = new Platform(['ios']);\n            config.setPlatform(platform);\n            expect(config.get('tabbarPlacement')).toEqual('bottom');\n        });\n        it('should set/get platform setting from set()', function () {\n            var config = new Config();\n            var platform = new Platform(['ios']);\n            config.setPlatform(platform);\n            config.set('tabbarPlacement', 'bottom');\n            config.set('ios', 'tabbarPlacement', 'top');\n            expect(config.get('tabbarPlacement')).toEqual('top');\n        });\n        it('should set/get setting from set()', function () {\n            var config = new Config();\n            var platform = new Platform(['ios']);\n            config.setPlatform(platform);\n            config.set('tabbarPlacement', 'top');\n            expect(config.get('tabbarPlacement')).toEqual('top');\n        });\n        it('should set ios platform settings from settings()', function () {\n            var config = new Config();\n            var platform = new Platform(['ios']);\n            config.setPlatform(platform);\n            config.settings('ios', {\n                key: 'iosValue'\n            });\n            expect(config.get('key')).toEqual('iosValue');\n        });\n        it('should set/get mobile setting even w/ higher priority ios', function () {\n            var config = new Config();\n            var platform = new Platform(['mobile', 'ios']);\n            config.setPlatform(platform);\n            config.settings({\n                key: 'defaultValue',\n                platforms: {\n                    mobile: {\n                        key: 'mobileValue'\n                    }\n                }\n            });\n            expect(config.get('key')).toEqual('mobileValue');\n        });\n        it('should set/get mobile setting even w/ higher priority ios', function () {\n            var config = new Config();\n            var platform = new Platform(['mobile', 'ios']);\n            config.setPlatform(platform);\n            config.settings({\n                key: 'defaultValue',\n                platforms: {\n                    mobile: {\n                        key: 'mobileValue'\n                    }\n                }\n            });\n            expect(config.get('key')).toEqual('mobileValue');\n        });\n        it('should set/get android setting w/ higher priority than mobile', function () {\n            var config = new Config();\n            var platform = new Platform(['mobile', 'android']);\n            config.setPlatform(platform);\n            config.settings({\n                key: 'defaultValue',\n                platforms: {\n                    mobile: {\n                        key: 'mobileValue'\n                    },\n                    android: {\n                        key: 'androidValue'\n                    }\n                }\n            });\n            expect(config.get('key')).toEqual('androidValue');\n        });\n        it('should set/get ios setting w/ platforms set', function () {\n            var config = new Config();\n            var platform = new Platform(['ios']);\n            config.setPlatform(platform);\n            config.settings({\n                key: 'defaultValue',\n                platforms: {\n                    ios: {\n                        key: 'iosValue'\n                    },\n                    android: {\n                        key: 'androidValue'\n                    }\n                }\n            });\n            expect(config.get('key')).toEqual('iosValue');\n        });\n        it('should set/get default setting w/ platforms set, but no platform match', function () {\n            var config = new Config();\n            config.settings({\n                key: 'defaultValue',\n                platforms: {\n                    ios: {\n                        key: 'iosValue'\n                    },\n                    android: {\n                        key: 'androidValue'\n                    }\n                }\n            });\n            expect(config.get('key')).toEqual('defaultValue');\n        });\n        it('should set setting object', function () {\n            var config = new Config();\n            config.settings({\n                name: 'Doc Brown',\n                occupation: 'Weather Man'\n            });\n            expect(config.get('name')).toEqual('Doc Brown');\n            expect(config.get('name')).toEqual('Doc Brown');\n            expect(config.get('occupation')).toEqual('Weather Man');\n            expect(config.get('occupation')).toEqual('Weather Man');\n        });\n        it('should get null setting', function () {\n            var config = new Config();\n            expect(config.get('name')).toEqual(null);\n            expect(config.get('name')).toEqual(null);\n            expect(config.get('occupation')).toEqual(null);\n            expect(config.get('occupation')).toEqual(null);\n        });\n        it('should set/get single setting', function () {\n            var config = new Config();\n            config.set('name', 'Doc Brown');\n            config.set('occupation', 'Weather Man');\n            expect(config.get('name')).toEqual('Doc Brown');\n            expect(config.get('name')).toEqual('Doc Brown');\n            expect(config.get('occupation')).toEqual('Weather Man');\n            expect(config.get('occupation')).toEqual('Weather Man');\n        });\n        it('should init w/ given config settings', function () {\n            var config = new Config({\n                name: 'Doc Brown',\n                occupation: 'Weather Man'\n            });\n            expect(config.get('name')).toEqual('Doc Brown');\n            expect(config.get('occupation')).toEqual('Weather Man');\n        });\n        it('should get settings object', function () {\n            var config = new Config({\n                name: 'Doc Brown',\n                occupation: 'Weather Man'\n            });\n            expect(config.settings()).toEqual({\n                name: 'Doc Brown',\n                occupation: 'Weather Man'\n            });\n        });\n        it('should create default config w/ bad settings value', function () {\n            var config = new Config(null);\n            expect(config.settings()).toEqual({});\n            config = new Config(undefined);\n            expect(config.settings()).toEqual({});\n            config = new Config();\n            expect(config.settings()).toEqual({});\n            config = new Config([1, 2, 3]);\n            expect(config.settings()).toEqual({});\n            config = new Config('im bad, you know it');\n            expect(config.settings()).toEqual({});\n            config = new Config(8675309);\n            expect(config.settings()).toEqual({});\n            config = new Config(true);\n            expect(config.settings()).toEqual({});\n            config = new Config(false);\n            expect(config.settings()).toEqual({});\n            config = new Config(1);\n            expect(config.settings()).toEqual({});\n            config = new Config(function () {});\n            expect(config.settings()).toEqual({});\n        });\n    }\n\n    return {\n        setters: [function (_ionicIonic) {\n            Config = _ionicIonic.Config;\n            Platform = _ionicIonic.Platform;\n            ionicProviders = _ionicIonic.ionicProviders;\n        }],\n        execute: function () {}\n    };\n});\nSystem.register('ionic/platform/storage/local-storage', ['./storage'], function (_export) {\n    /**\n     * The LocalStorage storage engine uses the browser's local storage system for\n     * storing key/value pairs.\n     *\n     * Note: LocalStorage should ONLY be used for temporary data that you can afford to lose.\n     * Given disk space constraints on a mobile device, local storage might be \"cleaned up\"\n     * by the operating system (iOS).\n     *\n     * For guaranteed, long-term storage, use the SqlStorage engine which stores data in a file.\n     * @demo /docs/demos/local-storage/\n     * @see {@link /docs/platform/storage/ Storage Platform Docs}\n     */\n    'use strict';\n\n    var StorageEngine, LocalStorage;\n\n    var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();\n\n    var _get = function get(_x, _x2, _x3) { var _again = true; _function: while (_again) { var object = _x, property = _x2, receiver = _x3; _again = false; if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { _x = parent; _x2 = property; _x3 = receiver; _again = true; desc = parent = undefined; continue _function; } } else if ('value' in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } } };\n\n    function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\n    function _inherits(subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\n    return {\n        setters: [function (_storage) {\n            StorageEngine = _storage.StorageEngine;\n        }],\n        execute: function () {\n            LocalStorage = (function (_StorageEngine) {\n                _inherits(LocalStorage, _StorageEngine);\n\n                function LocalStorage() {\n                    _classCallCheck(this, LocalStorage);\n\n                    _get(Object.getPrototypeOf(LocalStorage.prototype), 'constructor', this).call(this);\n                }\n\n                _createClass(LocalStorage, [{\n                    key: 'get',\n                    value: function get(key) {\n                        return new Promise(function (resolve, reject) {\n                            try {\n                                var value = window.localStorage.getItem(key);\n                                resolve(value);\n                            } catch (e) {\n                                reject(e);\n                            }\n                        });\n                    }\n                }, {\n                    key: 'set',\n                    value: function set(key, value) {\n                        return new Promise(function (resolve, reject) {\n                            try {\n                                window.localStorage.setItem(key, value);\n                                resolve();\n                            } catch (e) {\n                                reject(e);\n                            }\n                        });\n                    }\n                }, {\n                    key: 'remove',\n                    value: function remove(key) {\n                        return new Promise(function (resolve, reject) {\n                            try {\n                                window.localStorage.removeItem(key);\n                                resolve();\n                            } catch (e) {\n                                reject(e);\n                            }\n                        });\n                    }\n                }]);\n\n                return LocalStorage;\n            })(StorageEngine);\n\n            _export('LocalStorage', LocalStorage);\n        }\n    };\n});\nSystem.register('ionic/platform/storage/sql', ['./storage', 'ionic/util'], function (_export) {\n    'use strict';\n\n    var StorageEngine, util, DB_NAME, SqlStorage;\n\n    var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();\n\n    var _get = function get(_x2, _x3, _x4) { var _again = true; _function: while (_again) { var object = _x2, property = _x3, receiver = _x4; _again = false; if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { _x2 = parent; _x3 = property; _x4 = receiver; _again = true; desc = parent = undefined; continue _function; } } else if ('value' in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } } };\n\n    function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\n    function _inherits(subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\n    return {\n        setters: [function (_storage) {\n            StorageEngine = _storage.StorageEngine;\n        }, function (_ionicUtil) {\n            util = _ionicUtil;\n        }],\n        execute: function () {\n            DB_NAME = '__ionicstorage';\n\n            /**\n             * SqlStorage uses SQLite or WebSQL (development only!) to store data in a\n             * persistent SQL store on the filesystem.\n             *\n             * This is the preferred storage engine, as data will be stored in appropriate\n             * app storage, unlike Local Storage which is treated differently by the OS.\n             *\n             * For convenience, the engine supports key/value storage for simple get/set and blob\n             * storage. The full SQL engine is exposed underneath through the `query` method.\n             *\n             * @usage\n             ```js\n             * let storage = new Storage(SqlStorage, options);\n             * storage.set('name', 'Max');\n             * storage.get('name').then((name) => {\n             * });\n             *\n             * // Sql storage also exposes the full engine underneath\n             * storage.query('insert into projects(name, data) values('Cool Project', 'blah')');\n             * storage.query('select * from projects').then((resp) => {})\n             * ```\n             *\n             * The `SqlStorage` service supports these options:\n             * {\n             *   name: the name of the database (__ionicstorage by default)\n             *   backupFlag: // where to store the file, default is BACKUP_LOCAL which DOES NOT store to iCloud. Other options: BACKUP_LIBRARY, BACKUP_DOCUMENTS\n             *   existingDatabase: whether to load this as an existing database (default is false)\n             * }\n             *\n             */\n\n            SqlStorage = (function (_StorageEngine) {\n                _inherits(SqlStorage, _StorageEngine);\n\n                function SqlStorage() {\n                    var options = arguments.length <= 0 || arguments[0] === undefined ? {} : arguments[0];\n\n                    _classCallCheck(this, SqlStorage);\n\n                    _get(Object.getPrototypeOf(SqlStorage.prototype), 'constructor', this).call(this);\n                    var dbOptions = util.defaults(options, {\n                        name: DB_NAME,\n                        backupFlag: SqlStorage.BACKUP_LOCAL,\n                        existingDatabase: false\n                    });\n                    if (window.sqlitePlugin) {\n                        var _location = this._getBackupLocation(dbOptions.backupFlag);\n                        this._db = window.sqlitePlugin.openDatabase(util.extend({\n                            name: dbOptions.name,\n                            location: _location,\n                            createFromLocation: dbOptions.existingDatabase ? 1 : 0\n                        }, dbOptions));\n                    } else {\n                        console.warn('Storage: SQLite plugin not installed, falling back to WebSQL. Make sure to install cordova-sqlite-storage in production!');\n                        this._db = window.openDatabase(dbOptions.name, '1.0', 'database', 5 * 1024 * 1024);\n                    }\n                    this._tryInit();\n                }\n\n                _createClass(SqlStorage, [{\n                    key: '_getBackupLocation',\n                    value: function _getBackupLocation(dbFlag) {\n                        switch (dbFlag) {\n                            case SqlStorage.BACKUP_LOCAL:\n                                return 2;\n                            case SqlStorage.BACKUP_LIBRARY:\n                                return 1;\n                            case SqlStorage.BACKUP_DOCUMENTS:\n                                return 0;\n                            default:\n                                throw Error('Invalid backup flag: ' + dbFlag);\n                        }\n                    }\n\n                    // Initialize the DB with our required tables\n                }, {\n                    key: '_tryInit',\n                    value: function _tryInit() {\n                        this._db.transaction(function (tx) {\n                            tx.executeSql('CREATE TABLE IF NOT EXISTS kv (key text primary key, value text)', [], function (tx, res) {}, function (tx, err) {\n                                console.error('Storage: Unable to create initial storage tables', tx, err);\n                            });\n                        });\n                    }\n\n                    /**\n                     * Perform an arbitrary SQL operation on the database. Use this method\n                     * to have full control over the underlying database through SQL operations\n                     * like SELECT, INSERT, and UPDATE.\n                     *\n                     * @param {string} query the query to run\n                     * @param {array} params the additional params to use for query placeholders\n                     * @return {Promise} that resolves or rejects with an object of the form { tx: Transaction, res: Result (or err)}\n                     */\n                }, {\n                    key: 'query',\n                    value: function query(_query) {\n                        var _this = this;\n\n                        for (var _len = arguments.length, params = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n                            params[_key - 1] = arguments[_key];\n                        }\n\n                        return new Promise(function (resolve, reject) {\n                            try {\n                                _this._db.transaction(function (tx) {\n                                    tx.executeSql(_query, params, function (tx, res) {\n                                        resolve({\n                                            tx: tx,\n                                            res: res\n                                        });\n                                    }, function (tx, err) {\n                                        reject({\n                                            tx: tx,\n                                            err: err\n                                        });\n                                    });\n                                }, function (err) {\n                                    reject(err);\n                                });\n                            } catch (e) {\n                                reject(e);\n                            }\n                        });\n                    }\n\n                    /**\n                     * Get the value in the database identified by the given key.\n                     * @param {string} key the key\n                     * @return {Promise} that resolves or rejects with an object of the form { tx: Transaction, res: Result (or err)}\n                     */\n                }, {\n                    key: 'get',\n                    value: function get(key) {\n                        var _this2 = this;\n\n                        return new Promise(function (resolve, reject) {\n                            try {\n                                _this2._db.transaction(function (tx) {\n                                    tx.executeSql(\"select key, value from kv where key = ? limit 1\", [key], function (tx, res) {\n                                        if (res.rows.length > 0) {\n                                            var item = res.rows.item(0);\n                                            resolve(item.value);\n                                        }\n                                        resolve(null);\n                                    }, function (tx, err) {\n                                        reject({\n                                            tx: tx,\n                                            err: err\n                                        });\n                                    });\n                                }, function (err) {\n                                    reject(err);\n                                });\n                            } catch (e) {\n                                reject(e);\n                            }\n                        });\n                    }\n\n                    /**\n                    * Set the value in the database for the given key. Existing values will be overwritten.\n                    * @param {string} key the key\n                    * @param {string} value The value (as a string)\n                    * @return {Promise} that resolves or rejects with an object of the form { tx: Transaction, res: Result (or err)}\n                    */\n                }, {\n                    key: 'set',\n                    value: function set(key, value) {\n                        var _this3 = this;\n\n                        return new Promise(function (resolve, reject) {\n                            try {\n                                _this3._db.transaction(function (tx) {\n                                    tx.executeSql('insert or replace into kv(key, value) values (?, ?)', [key, value], function (tx, res) {\n                                        resolve();\n                                    }, function (tx, err) {\n                                        reject({\n                                            tx: tx,\n                                            err: err\n                                        });\n                                    });\n                                }, function (err) {\n                                    reject(err);\n                                });\n                            } catch (e) {\n                                reject(e);\n                            }\n                        });\n                    }\n\n                    /**\n                    * Remove the value in the database for the given key.\n                    * @param {string} key the key\n                    * @param {string} value The value (as a string)\n                    * @return {Promise} that resolves or rejects with an object of the form { tx: Transaction, res: Result (or err)}\n                    */\n                }, {\n                    key: 'remove',\n                    value: function remove(key) {\n                        var _this4 = this;\n\n                        return new Promise(function (resolve, reject) {\n                            try {\n                                _this4._db.transaction(function (tx) {\n                                    tx.executeSql('delete from kv where key = ?', [key], function (tx, res) {\n                                        resolve();\n                                    }, function (tx, err) {\n                                        reject({\n                                            tx: tx,\n                                            err: err\n                                        });\n                                    });\n                                }, function (err) {\n                                    reject(err);\n                                });\n                            } catch (e) {\n                                reject(e);\n                            }\n                        });\n                    }\n                }]);\n\n                return SqlStorage;\n            })(StorageEngine);\n\n            _export('SqlStorage', SqlStorage);\n\n            SqlStorage.BACKUP_LOCAL = 2;\n            SqlStorage.BACKUP_LIBRARY = 1;\n            SqlStorage.BACKUP_DOCUMENTS = 0;\n        }\n    };\n});\nSystem.register('ionic/platform/storage/storage', [], function (_export) {\n    /**\n     * Storage is an easy way to store key/value pairs and other complicated\n     * data in a way that uses a variety of storage engines underneath.\n     *\n     * For most cases, we recommend the SqlStorage system as it will store\n     * data in a file in the app's sandbox. LocalStorage should ONLY be used\n     * for temporary data as it may be \"cleaned up\" by the operation system\n     * during low disk space situations.\n     */\n    /**\n     * @private\n    */\n    'use strict';\n\n    var Storage, StorageEngine;\n\n    var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();\n\n    function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\n    return {\n        setters: [],\n        execute: function () {\n            Storage = (function () {\n                function Storage(strategyCls, options) {\n                    _classCallCheck(this, Storage);\n\n                    this._strategy = new strategyCls(options);\n                }\n\n                /**\n                 * @private\n                */\n\n                _createClass(Storage, [{\n                    key: 'get',\n                    value: function get(key) {\n                        return this._strategy.get(key);\n                    }\n                }, {\n                    key: 'getJson',\n                    value: function getJson(key) {\n                        try {\n                            return JSON.parse(this._strategy.get(key));\n                        } catch (e) {\n                            console.warn('Storage getJson(): unable to parse value for key', key, ' as JSON');\n                            return null;\n                        }\n                    }\n                }, {\n                    key: 'set',\n                    value: function set(key, value) {\n                        return this._strategy.set(key, value);\n                    }\n                }, {\n                    key: 'remove',\n                    value: function remove(key) {\n                        return this._strategy.remove(key);\n                    }\n                }, {\n                    key: 'query',\n                    value: function query(_query, params) {\n                        return this._strategy.query(_query, params);\n                    }\n                }]);\n\n                return Storage;\n            })();\n\n            _export('Storage', Storage);\n\n            StorageEngine = (function () {\n                function StorageEngine() {\n                    _classCallCheck(this, StorageEngine);\n                }\n\n                _createClass(StorageEngine, [{\n                    key: 'get',\n                    value: function get(key, value) {\n                        throw Error(\"get() not implemented for this storage engine\");\n                    }\n                }, {\n                    key: 'set',\n                    value: function set(key, value) {\n                        throw Error(\"set() not implemented for this storage engine\");\n                    }\n                }, {\n                    key: 'remove',\n                    value: function remove(key) {\n                        throw Error(\"remove() not implemented for this storage engine\");\n                    }\n                }, {\n                    key: 'query',\n                    value: function query(_query2, params) {\n                        throw Error(\"query() not implemented for this storage engine\");\n                    }\n                }]);\n\n                return StorageEngine;\n            })();\n\n            _export('StorageEngine', StorageEngine);\n        }\n    };\n});\nSystem.register('ionic/platform/platform.spec', ['ionic/ionic'], function (_export) {\n    'use strict';\n\n    var Platform, ANDROID_UA, IPHONE_UA, IPAD_UA;\n\n    _export('run', run);\n\n    function run() {\n        it('should set core as the fallback', function () {\n            var platform = new Platform();\n            platform.userAgent('idk');\n            platform.load();\n            expect(platform.is('android')).toEqual(false);\n            expect(platform.is('ios')).toEqual(false);\n            expect(platform.is('core')).toEqual(true);\n        });\n        it('should set android via platformOverride, despite ios user agent', function () {\n            var platform = new Platform();\n            platform.userAgent(IPAD_UA);\n            platform.load('android');\n            expect(platform.is('android')).toEqual(true);\n            expect(platform.is('ios')).toEqual(false);\n        });\n        it('should get case insensitive querystring value', function () {\n            var platform = new Platform();\n            platform.url('/?KEY=value');\n            expect(platform.query('key')).toEqual('value');\n        });\n        it('should get querystring value', function () {\n            var platform = new Platform();\n            platform.url('/?key=value');\n            expect(platform.query('key')).toEqual('value');\n        });\n        it('should set ios via platformOverride, despite android querystring', function () {\n            var platform = new Platform();\n            platform.url('/?ionicplatform=android');\n            platform.load('ios');\n            expect(platform.is('android')).toEqual(false);\n            expect(platform.is('ios')).toEqual(true);\n        });\n        it('should set ios via platformOverride', function () {\n            var platform = new Platform();\n            platform.load('ios');\n            expect(platform.is('android')).toEqual(false);\n            expect(platform.is('ios')).toEqual(true);\n        });\n        it('should set android via platformOverride', function () {\n            var platform = new Platform();\n            platform.load('android');\n            expect(platform.is('android')).toEqual(true);\n            expect(platform.is('ios')).toEqual(false);\n        });\n        it('should set ios via querystring', function () {\n            var platform = new Platform();\n            platform.url('/?ionicplatform=ios');\n            platform.load();\n            expect(platform.is('mobile')).toEqual(true);\n            expect(platform.is('android')).toEqual(false);\n            expect(platform.is('ios')).toEqual(true);\n            expect(platform.is('tablet')).toEqual(false);\n        });\n        it('should set ios via querystring, even with android user agent', function () {\n            var platform = new Platform();\n            platform.url('/?ionicplatform=ios');\n            platform.userAgent(ANDROID_UA);\n            platform.load();\n            expect(platform.is('android')).toEqual(false);\n            expect(platform.is('ios')).toEqual(true);\n        });\n        it('should set android via querystring', function () {\n            var platform = new Platform();\n            platform.url('/?ionicplatform=android');\n            platform.load();\n            expect(platform.is('android')).toEqual(true);\n            expect(platform.is('ios')).toEqual(false);\n        });\n        it('should set android via querystring, even with ios user agent', function () {\n            var platform = new Platform();\n            platform.url('/?ionicplatform=android');\n            platform.userAgent(IPHONE_UA);\n            platform.load();\n            expect(platform.is('android')).toEqual(true);\n            expect(platform.is('ios')).toEqual(false);\n        });\n        it('should set android via user agent', function () {\n            var platform = new Platform();\n            platform.userAgent(ANDROID_UA);\n            platform.load();\n            expect(platform.is('mobile')).toEqual(true);\n            expect(platform.is('android')).toEqual(true);\n            expect(platform.is('ios')).toEqual(false);\n        });\n        it('should set iphone via user agent', function () {\n            var platform = new Platform();\n            platform.userAgent(IPHONE_UA);\n            platform.load();\n            expect(platform.is('mobile')).toEqual(true);\n            expect(platform.is('android')).toEqual(false);\n            expect(platform.is('ios')).toEqual(true);\n            expect(platform.is('iphone')).toEqual(true);\n            expect(platform.is('tablet')).toEqual(false);\n        });\n        it('should set ipad via user agent', function () {\n            var platform = new Platform();\n            platform.userAgent(IPAD_UA);\n            platform.load();\n            expect(platform.is('mobile')).toEqual(true);\n            expect(platform.is('android')).toEqual(false);\n            expect(platform.is('ios')).toEqual(true);\n            expect(platform.is('ipad')).toEqual(true);\n            expect(platform.is('tablet')).toEqual(true);\n        });\n    }\n\n    return {\n        setters: [function (_ionicIonic) {\n            Platform = _ionicIonic.Platform;\n        }],\n        execute: function () {\n            ANDROID_UA = 'Mozilla/5.0 (Linux; Android 5.1.1; Nexus 6 Build/LYZ28E) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.20 Mobile Safari/537.36';\n            IPHONE_UA = 'Mozilla/5.0 (iPhone; CPU iPhone OS 8_0 like Mac OS X) AppleWebKit/600.1.3 (KHTML, like Gecko) Version/8.0 Mobile/12A4345d Safari/600.1.4';\n            IPAD_UA = 'Mozilla/5.0 (iPad; CPU OS 7_0 like Mac OS X) AppleWebKit/537.51.1 (KHTML, like Gecko) Version/7.0 Mobile/11A465 Safari/9537.53';\n        }\n    };\n});\n// Copyright 2014 Google Inc. All rights reserved.\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n//     You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n//     See the License for the specific language governing permissions and\n// limitations under the License.\n\n!function(a,b){b[\"true\"]=a,function(){if(document.documentElement.animate){var a=document.documentElement.animate([],0),b=!0;if(a&&(b=!1,\"play|currentTime|pause|reverse|playbackRate|cancel|finish|startTime|playState\".split(\"|\").forEach(function(c){void 0===a[c]&&(b=!0)})),!b)return}var c={},d={},e={},f=null;!function(a,b){function c(a){if(\"number\"==typeof a)return a;var b={};for(var c in a)b[c]=a[c];return b}function d(){this._delay=0,this._endDelay=0,this._fill=\"none\",this._iterationStart=0,this._iterations=1,this._duration=0,this._playbackRate=1,this._direction=\"normal\",this._easing=\"linear\"}function e(a,b,c){var e=new d;return b&&(e.fill=\"both\",e.duration=\"auto\"),\"number\"!=typeof a||isNaN(a)?void 0!==a&&Object.getOwnPropertyNames(a).forEach(function(b){if(\"auto\"!=a[b]){if((\"number\"==typeof e[b]||\"duration\"==b)&&(\"number\"!=typeof a[b]||isNaN(a[b])))return;if(\"fill\"==b&&-1==t.indexOf(a[b]))return;if(\"direction\"==b&&-1==u.indexOf(a[b]))return;e[b]=a[b]}}):e.duration=a,e}function f(a){return\"number\"==typeof a&&(a=isNaN(a)?{duration:0}:{duration:a}),a}function g(b,c){b=a.numericTimingToObject(b);var d=e(b,c);return d._easing=j(d.easing),d}function h(a,b,c,d){return 0>a||a>1||0>c||c>1?C:function(e){function f(a,b,c){return 3*a*(1-c)*(1-c)*c+3*b*(1-c)*c*c+c*c*c}if(0==e||1==e)return e;for(var g=0,h=1;;){var i=(g+h)/2,j=f(a,c,i);if(Math.abs(e-j)<.001)return f(b,d,i);e>j?g=i:h=i}}}function i(a,b){return function(c){if(c>=1)return 1;var d=1/a;return c+=b*d,c-c%d}}function j(a){var b=A.exec(a);if(b)return h.apply(this,b.slice(1).map(Number));var c=B.exec(a);if(c)return i(Number(c[1]),{start:v,middle:w,end:x}[c[2]]);var d=y[a];return d?d:C}function k(a){return Math.abs(l(a)/a.playbackRate)}function l(a){return a.duration*a.iterations}function m(a,b,c){return null==b?D:b<c.delay?E:b>=c.delay+a?F:G}function n(a,b,c,d,e){switch(d){case E:return\"backwards\"==b||\"both\"==b?0:null;case G:return c-e;case F:return\"forwards\"==b||\"both\"==b?a:null;case D:return null}}function o(a,b,c,d){return(d.playbackRate<0?b-a:b)*d.playbackRate+c}function p(a,b,c,d,e){return c===1/0||c===-(1/0)||c-d==b&&e.iterations&&(e.iterations+e.iterationStart)%1==0?a:c%a}function q(a,b,c,d){return 0===c?0:b==a?d.iterationStart+d.iterations-1:Math.floor(c/a)}function r(a,b,c,d){var e=a%2>=1,f=\"normal\"==d.direction||d.direction==(e?\"alternate-reverse\":\"alternate\"),g=f?c:b-c,h=g/b;return b*d.easing(h)}function s(a,b,c){var d=m(a,b,c),e=n(a,c.fill,b,d,c.delay);if(null===e)return null;if(0===a)return d===E?0:1;var f=c.iterationStart*c.duration,g=o(a,e,f,c),h=p(c.duration,l(c),g,f,c),i=q(c.duration,h,g,c);return r(i,c.duration,h,c)/c.duration}var t=\"backwards|forwards|both|none\".split(\"|\"),u=\"reverse|alternate|alternate-reverse\".split(\"|\");d.prototype={_setMember:function(b,c){this[\"_\"+b]=c,this._effect&&(this._effect._timingInput[b]=c,this._effect._timing=a.normalizeTimingInput(a.normalizeTimingInput(this._effect._timingInput)),this._effect.activeDuration=a.calculateActiveDuration(this._effect._timing),this._effect._animation&&this._effect._animation._rebuildUnderlyingAnimation())},get playbackRate(){return this._playbackRate},set delay(a){this._setMember(\"delay\",a)},get delay(){return this._delay},set endDelay(a){this._setMember(\"endDelay\",a)},get endDelay(){return this._endDelay},set fill(a){this._setMember(\"fill\",a)},get fill(){return this._fill},set iterationStart(a){this._setMember(\"iterationStart\",a)},get iterationStart(){return this._iterationStart},set duration(a){this._setMember(\"duration\",a)},get duration(){return this._duration},set direction(a){this._setMember(\"direction\",a)},get direction(){return this._direction},set easing(a){this._setMember(\"easing\",a)},get easing(){return this._easing},set iterations(a){this._setMember(\"iterations\",a)},get iterations(){return this._iterations}};var v=1,w=.5,x=0,y={ease:h(.25,.1,.25,1),\"ease-in\":h(.42,0,1,1),\"ease-out\":h(0,0,.58,1),\"ease-in-out\":h(.42,0,.58,1),\"step-start\":i(1,v),\"step-middle\":i(1,w),\"step-end\":i(1,x)},z=\"\\\\s*(-?\\\\d+\\\\.?\\\\d*|-?\\\\.\\\\d+)\\\\s*\",A=new RegExp(\"cubic-bezier\\\\(\"+z+\",\"+z+\",\"+z+\",\"+z+\"\\\\)\"),B=/steps\\(\\s*(\\d+)\\s*,\\s*(start|middle|end)\\s*\\)/,C=function(a){return a},D=0,E=1,F=2,G=3;a.cloneTimingInput=c,a.makeTiming=e,a.numericTimingToObject=f,a.normalizeTimingInput=g,a.calculateActiveDuration=k,a.calculateTimeFraction=s,a.calculatePhase=m,a.toTimingFunction=j}(c,f),function(a,b){function c(a,b){return a in i?i[a][b]||b:b}function d(a,b,d){var e=f[a];if(e){g.style[a]=b;for(var h in e){var i=e[h],j=g.style[i];d[i]=c(i,j)}}else d[a]=c(a,b)}function e(b){function c(){var a=e.length;null==e[a-1].offset&&(e[a-1].offset=1),a>1&&null==e[0].offset&&(e[0].offset=0);for(var b=0,c=e[0].offset,d=1;a>d;d++){var f=e[d].offset;if(null!=f){for(var g=1;d-b>g;g++)e[b+g].offset=c+(f-c)*g/(d-b);b=d,c=f}}}if(!Array.isArray(b)&&null!==b)throw new TypeError(\"Keyframes must be null or an array of keyframes\");if(null==b)return[];for(var e=b.map(function(b){var c={};for(var e in b){var f=b[e];if(\"offset\"==e){if(null!=f&&(f=Number(f),!isFinite(f)))throw new TypeError(\"keyframe offsets must be numbers.\")}else{if(\"composite\"==e)throw{type:DOMException.NOT_SUPPORTED_ERR,name:\"NotSupportedError\",message:\"add compositing is not supported\"};f=\"easing\"==e?a.toTimingFunction(f):\"\"+f}d(e,f,c)}return void 0==c.offset&&(c.offset=null),void 0==c.easing&&(c.easing=a.toTimingFunction(\"linear\")),c}),f=!0,g=-(1/0),h=0;h<e.length;h++){var i=e[h].offset;if(null!=i){if(g>i)throw{code:DOMException.INVALID_MODIFICATION_ERR,name:\"InvalidModificationError\",message:\"Keyframes are not loosely sorted by offset. Sort or specify offsets.\"};g=i}else f=!1}return e=e.filter(function(a){return a.offset>=0&&a.offset<=1}),f||c(),e}var f={background:[\"backgroundImage\",\"backgroundPosition\",\"backgroundSize\",\"backgroundRepeat\",\"backgroundAttachment\",\"backgroundOrigin\",\"backgroundClip\",\"backgroundColor\"],border:[\"borderTopColor\",\"borderTopStyle\",\"borderTopWidth\",\"borderRightColor\",\"borderRightStyle\",\"borderRightWidth\",\"borderBottomColor\",\"borderBottomStyle\",\"borderBottomWidth\",\"borderLeftColor\",\"borderLeftStyle\",\"borderLeftWidth\"],borderBottom:[\"borderBottomWidth\",\"borderBottomStyle\",\"borderBottomColor\"],borderColor:[\"borderTopColor\",\"borderRightColor\",\"borderBottomColor\",\"borderLeftColor\"],borderLeft:[\"borderLeftWidth\",\"borderLeftStyle\",\"borderLeftColor\"],borderRadius:[\"borderTopLeftRadius\",\"borderTopRightRadius\",\"borderBottomRightRadius\",\"borderBottomLeftRadius\"],borderRight:[\"borderRightWidth\",\"borderRightStyle\",\"borderRightColor\"],borderTop:[\"borderTopWidth\",\"borderTopStyle\",\"borderTopColor\"],borderWidth:[\"borderTopWidth\",\"borderRightWidth\",\"borderBottomWidth\",\"borderLeftWidth\"],flex:[\"flexGrow\",\"flexShrink\",\"flexBasis\"],font:[\"fontFamily\",\"fontSize\",\"fontStyle\",\"fontVariant\",\"fontWeight\",\"lineHeight\"],margin:[\"marginTop\",\"marginRight\",\"marginBottom\",\"marginLeft\"],outline:[\"outlineColor\",\"outlineStyle\",\"outlineWidth\"],padding:[\"paddingTop\",\"paddingRight\",\"paddingBottom\",\"paddingLeft\"]},g=document.createElementNS(\"http://www.w3.org/1999/xhtml\",\"div\"),h={thin:\"1px\",medium:\"3px\",thick:\"5px\"},i={borderBottomWidth:h,borderLeftWidth:h,borderRightWidth:h,borderTopWidth:h,fontSize:{\"xx-small\":\"60%\",\"x-small\":\"75%\",small:\"89%\",medium:\"100%\",large:\"120%\",\"x-large\":\"150%\",\"xx-large\":\"200%\"},fontWeight:{normal:\"400\",bold:\"700\"},outlineWidth:h,textShadow:{none:\"0px 0px 0px transparent\"},boxShadow:{none:\"0px 0px 0px 0px transparent\"}};a.normalizeKeyframes=e}(c,f),function(a,b,c){function d(a){for(var b={},c=0;c<a.length;c++)for(var d in a[c])if(\"offset\"!=d&&\"easing\"!=d&&\"composite\"!=d){var e={offset:a[c].offset,easing:a[c].easing,value:a[c][d]};b[d]=b[d]||[],b[d].push(e)}for(var f in b){var g=b[f];if(0!=g[0].offset||1!=g[g.length-1].offset)throw{type:DOMException.NOT_SUPPORTED_ERR,name:\"NotSupportedError\",message:\"Partial keyframes are not supported\"}}return b}function e(a){var c=[];for(var d in a)for(var e=a[d],f=0;f<e.length-1;f++){var g=e[f].offset,h=e[f+1].offset,i=e[f].value,j=e[f+1].value;g==h&&(1==h?i=j:j=i),c.push({startTime:g,endTime:h,easing:e[f].easing,property:d,interpolation:b.propertyInterpolation(d,i,j)})}return c.sort(function(a,b){return a.startTime-b.startTime}),c}b.convertEffectInput=function(c){var f=a.normalizeKeyframes(c),g=d(f),h=e(g);return function(a,c){null!=c&&h.filter(function(a){return 0>=c&&0==a.startTime||c>=1&&1==a.endTime||c>=a.startTime&&c<=a.endTime}).forEach(function(d){var e=c-d.startTime,f=d.endTime-d.startTime,g=0==f?0:d.easing(e/f);b.apply(a,d.property,d.interpolation(g))})}}}(c,d,f),function(a,b){function c(a,b,c){f[c]=f[c]||[],f[c].push([a,b])}function d(a,b,d){for(var e=0;e<d.length;e++){var f=d[e];c(a,b,f),/-/.test(f)&&c(a,b,f.replace(/-(.)/g,function(a,b){return b.toUpperCase()}))}}function e(b,c,d){if(\"initial\"==c||\"initial\"==d){var e=b.replace(/-(.)/g,function(a,b){return b.toUpperCase()});\"initial\"==c&&(c=g[e]),\"initial\"==d&&(d=g[e])}for(var h=c==d?[]:f[b],i=0;h&&i<h.length;i++){var j=h[i][0](c),k=h[i][0](d);if(void 0!==j&&void 0!==k){var l=h[i][1](j,k);if(l){var m=a.Interpolation.apply(null,l);return function(a){return 0==a?c:1==a?d:m(a)}}}}return a.Interpolation(!1,!0,function(a){return a?d:c})}var f={};a.addPropertiesHandler=d;var g={backgroundColor:\"transparent\",backgroundPosition:\"0% 0%\",borderBottomColor:\"currentColor\",borderBottomLeftRadius:\"0px\",borderBottomRightRadius:\"0px\",borderBottomWidth:\"3px\",borderLeftColor:\"currentColor\",borderLeftWidth:\"3px\",borderRightColor:\"currentColor\",borderRightWidth:\"3px\",borderSpacing:\"2px\",borderTopColor:\"currentColor\",borderTopLeftRadius:\"0px\",borderTopRightRadius:\"0px\",borderTopWidth:\"3px\",bottom:\"auto\",clip:\"rect(0px, 0px, 0px, 0px)\",color:\"black\",fontSize:\"100%\",fontWeight:\"400\",height:\"auto\",left:\"auto\",letterSpacing:\"normal\",lineHeight:\"120%\",marginBottom:\"0px\",marginLeft:\"0px\",marginRight:\"0px\",marginTop:\"0px\",maxHeight:\"none\",maxWidth:\"none\",minHeight:\"0px\",minWidth:\"0px\",opacity:\"1.0\",outlineColor:\"invert\",outlineOffset:\"0px\",outlineWidth:\"3px\",paddingBottom:\"0px\",paddingLeft:\"0px\",paddingRight:\"0px\",paddingTop:\"0px\",right:\"auto\",textIndent:\"0px\",textShadow:\"0px 0px 0px transparent\",top:\"auto\",transform:\"\",verticalAlign:\"0px\",visibility:\"visible\",width:\"auto\",wordSpacing:\"normal\",zIndex:\"auto\"};a.propertyInterpolation=e}(d,f),function(a,b,c){function d(b){var c=a.calculateActiveDuration(b),d=function(d){return a.calculateTimeFraction(c,d,b)};return d._totalDuration=b.delay+c+b.endDelay,d._isCurrent=function(d){var e=a.calculatePhase(c,d,b);return e===PhaseActive||e===PhaseBefore},d}b.KeyframeEffect=function(c,e,f){var g,h=d(a.normalizeTimingInput(f)),i=b.convertEffectInput(e),j=function(){i(c,g)};return j._update=function(a){return g=h(a),null!==g},j._clear=function(){i(c,null)},j._hasSameTarget=function(a){return c===a},j._isCurrent=h._isCurrent,j._totalDuration=h._totalDuration,j},b.NullEffect=function(a){var b=function(){a&&(a(),a=null)};return b._update=function(){return null},b._totalDuration=0,b._isCurrent=function(){return!1},b._hasSameTarget=function(){return!1},b}}(c,d,f),function(a,b){a.apply=function(b,c,d){b.style[a.propertyName(c)]=d},a.clear=function(b,c){b.style[a.propertyName(c)]=\"\"}}(d,f),function(a){window.Element.prototype.animate=function(b,c){return a.timeline._play(a.KeyframeEffect(this,b,c))}}(d),function(a,b){function c(a,b,d){if(\"number\"==typeof a&&\"number\"==typeof b)return a*(1-d)+b*d;if(\"boolean\"==typeof a&&\"boolean\"==typeof b)return.5>d?a:b;if(a.length==b.length){for(var e=[],f=0;f<a.length;f++)e.push(c(a[f],b[f],d));return e}throw\"Mismatched interpolation arguments \"+a+\":\"+b}a.Interpolation=function(a,b,d){return function(e){return d(c(a,b,e))}}}(d,f),function(a,b,c){a.sequenceNumber=0;var d=function(a,b,c){this.target=a,this.currentTime=b,this.timelineTime=c,this.type=\"finish\",this.bubbles=!1,this.cancelable=!1,this.currentTarget=a,this.defaultPrevented=!1,this.eventPhase=Event.AT_TARGET,this.timeStamp=Date.now()};b.Animation=function(b){this._sequenceNumber=a.sequenceNumber++,this._currentTime=0,this._startTime=null,this._paused=!1,this._playbackRate=1,this._inTimeline=!0,this._finishedFlag=!1,this.onfinish=null,this._finishHandlers=[],this._effect=b,this._inEffect=this._effect._update(0),this._idle=!0,this._currentTimePending=!1},b.Animation.prototype={_ensureAlive:function(){this.playbackRate<0&&0===this.currentTime?this._inEffect=this._effect._update(-1):this._inEffect=this._effect._update(this.currentTime),this._inTimeline||!this._inEffect&&this._finishedFlag||(this._inTimeline=!0,b.timeline._animations.push(this))},_tickCurrentTime:function(a,b){a!=this._currentTime&&(this._currentTime=a,this._isFinished&&!b&&(this._currentTime=this._playbackRate>0?this._totalDuration:0),this._ensureAlive())},get currentTime(){return this._idle||this._currentTimePending?null:this._currentTime},set currentTime(a){a=+a,isNaN(a)||(b.restart(),this._paused||null==this._startTime||(this._startTime=this._timeline.currentTime-a/this._playbackRate),this._currentTimePending=!1,this._currentTime!=a&&(this._tickCurrentTime(a,!0),b.invalidateEffects()))},get startTime(){return this._startTime},set startTime(a){a=+a,isNaN(a)||this._paused||this._idle||(this._startTime=a,this._tickCurrentTime((this._timeline.currentTime-this._startTime)*this.playbackRate),b.invalidateEffects())},get playbackRate(){return this._playbackRate},set playbackRate(a){if(a!=this._playbackRate){var b=this.currentTime;this._playbackRate=a,this._startTime=null,\"paused\"!=this.playState&&\"idle\"!=this.playState&&this.play(),null!=b&&(this.currentTime=b)}},get _isFinished(){return!this._idle&&(this._playbackRate>0&&this._currentTime>=this._totalDuration||this._playbackRate<0&&this._currentTime<=0)},get _totalDuration(){return this._effect._totalDuration},get playState(){return this._idle?\"idle\":null==this._startTime&&!this._paused&&0!=this.playbackRate||this._currentTimePending?\"pending\":this._paused?\"paused\":this._isFinished?\"finished\":\"running\"},play:function(){this._paused=!1,(this._isFinished||this._idle)&&(this._currentTime=this._playbackRate>0?0:this._totalDuration,this._startTime=null,b.invalidateEffects()),this._finishedFlag=!1,b.restart(),this._idle=!1,this._ensureAlive()},pause:function(){this._isFinished||this._paused||this._idle||(this._currentTimePending=!0),this._startTime=null,this._paused=!0},finish:function(){this._idle||(this.currentTime=this._playbackRate>0?this._totalDuration:0,this._startTime=this._totalDuration-this.currentTime,this._currentTimePending=!1)},cancel:function(){this._inEffect&&(this._inEffect=!1,this._idle=!0,this.currentTime=0,this._startTime=null,this._effect._update(null),b.invalidateEffects(),b.restart())},reverse:function(){this.playbackRate*=-1,this.play()},addEventListener:function(a,b){\"function\"==typeof b&&\"finish\"==a&&this._finishHandlers.push(b)},removeEventListener:function(a,b){if(\"finish\"==a){var c=this._finishHandlers.indexOf(b);c>=0&&this._finishHandlers.splice(c,1)}},_fireEvents:function(a){var b=this._isFinished;if((b||this._idle)&&!this._finishedFlag){var c=new d(this,this._currentTime,a),e=this._finishHandlers.concat(this.onfinish?[this.onfinish]:[]);e.forEach(function(a){a.call(c.target,c)})}this._finishedFlag=b},_tick:function(a){return this._idle||this._paused||(null==this._startTime?this.startTime=a-this._currentTime/this.playbackRate:this._isFinished||this._tickCurrentTime((a-this._startTime)*this.playbackRate)),this._currentTimePending=!1,this._fireEvents(a),!this._idle&&(this._inEffect||!this._finishedFlag)}}}(c,d,f),function(a,b,c){function d(a){a||(a=Date.now());var b=j;j=[],a<t.currentTime&&(a=t.currentTime),h(a),b.forEach(function(b){b[1](a)}),p&&h(a),g(),m=void 0}function e(a,b){return a._sequenceNumber-b._sequenceNumber}function f(){this._animations=[],this.currentTime=window.performance&&performance.now?performance.now():0}function g(){q.forEach(function(a){a()}),q.length=0}function h(a){o=!1;var c=b.timeline;c.currentTime=a,c._animations.sort(e),n=!1;var d=c._animations;c._animations=[];var f=[],g=[];d=d.filter(function(b){return b._inTimeline=b._tick(a),b._inEffect?g.push(b._effect):f.push(b._effect),b._isFinished||b._paused||b._idle||(n=!0),b._inTimeline}),q.push.apply(q,f),q.push.apply(q,g),c._animations.push.apply(c._animations,d),p=!1,n&&requestAnimationFrame(function(){})}var i=window.requestAnimationFrame,j=[],k=0;window.requestAnimationFrame=function(a){var b=k++;return 0==j.length&&i(d),j.push([b,a]),b},window.cancelAnimationFrame=function(a){j.forEach(function(b){b[0]==a&&(b[1]=function(){})})},f.prototype={_play:function(c){c._timing=a.normalizeTimingInput(c.timing);var d=new b.Animation(c);return d._idle=!1,d._timeline=this,this._animations.push(d),b.restart(),b.invalidateEffects(),d}};var l,m=void 0,l=function(){return void 0==m&&(m=performance.now()),m},n=!1,o=!1;b.restart=function(){return n||(n=!0,requestAnimationFrame(function(){}),o=!0),o};var p=!1;b.invalidateEffects=function(){p=!0};var q=[],r=1e3/60,s=window.getComputedStyle;Object.defineProperty(window,\"getComputedStyle\",{configurable:!0,enumerable:!0,value:function(){if(p){var a=l();a-t.currentTime>0&&(t.currentTime+=r*(Math.floor((a-t.currentTime)/r)+1)),h(t.currentTime)}return g(),s.apply(this,arguments)}});var t=new f;b.timeline=t}(c,d,f),function(a){function b(a,b){var c=a.exec(b);return c?(c=a.ignoreCase?c[0].toLowerCase():c[0],[c,b.substr(c.length)]):void 0}function c(a,b){b=b.replace(/^\\s*/,\"\");var c=a(b);return c?[c[0],c[1].replace(/^\\s*/,\"\")]:void 0}function d(a,d,e){a=c.bind(null,a);for(var f=[];;){var g=a(e);if(!g)return[f,e];if(f.push(g[0]),e=g[1],g=b(d,e),!g||\"\"==g[1])return[f,e];e=g[1]}}function e(a,b){for(var c=0,d=0;d<b.length&&(!/\\s|,/.test(b[d])||0!=c);d++)if(\"(\"==b[d])c++;else if(\")\"==b[d]&&(c--,0==c&&d++,0>=c))break;var e=a(b.substr(0,d));return void 0==e?void 0:[e,b.substr(d)]}function f(a,b){for(var c=a,d=b;c&&d;)c>d?c%=d:d%=c;return c=a*b/(c+d)}function g(a){return function(b){var c=a(b);return c&&(c[0]=void 0),c}}function h(a,b){return function(c){var d=a(c);return d?d:[b,c]}}function i(b,c){for(var d=[],e=0;e<b.length;e++){var f=a.consumeTrimmed(b[e],c);if(!f||\"\"==f[0])return;void 0!==f[0]&&d.push(f[0]),c=f[1]}return\"\"==c?d:void 0}function j(a,b,c,d,e){for(var g=[],h=[],i=[],j=f(d.length,e.length),k=0;j>k;k++){var l=b(d[k%d.length],e[k%e.length]);if(!l)return;g.push(l[0]),h.push(l[1]),i.push(l[2])}return[g,h,function(b){var d=b.map(function(a,b){return i[b](a)}).join(c);return a?a(d):d}]}function k(a,b,c){for(var d=[],e=[],f=[],g=0,h=0;h<c.length;h++)if(\"function\"==typeof c[h]){var i=c[h](a[g],b[g++]);d.push(i[0]),e.push(i[1]),f.push(i[2])}else!function(a){d.push(!1),e.push(!1),f.push(function(){return c[a]})}(h);return[d,e,function(a){for(var b=\"\",c=0;c<a.length;c++)b+=f[c](a[c]);return b}]}a.consumeToken=b,a.consumeTrimmed=c,a.consumeRepeated=d,a.consumeParenthesised=e,a.ignore=g,a.optional=h,a.consumeList=i,a.mergeNestedRepeated=j.bind(null,null),a.mergeWrappedNestedRepeated=j,a.mergeList=k}(d),function(a){function b(b){function c(b){var c=a.consumeToken(/^inset/i,b);if(c)return d.inset=!0,c;var c=a.consumeLengthOrPercent(b);if(c)return d.lengths.push(c[0]),c;var c=a.consumeColor(b);return c?(d.color=c[0],c):void 0}var d={inset:!1,lengths:[],color:null},e=a.consumeRepeated(c,/^/,b);return e&&e[0].length?[d,e[1]]:void 0}function c(c){var d=a.consumeRepeated(b,/^,/,c);return d&&\"\"==d[1]?d[0]:void 0}function d(b,c){for(;b.lengths.length<Math.max(b.lengths.length,c.lengths.length);)b.lengths.push({px:0});for(;c.lengths.length<Math.max(b.lengths.length,c.lengths.length);)c.lengths.push({px:0});if(b.inset==c.inset&&!!b.color==!!c.color){for(var d,e=[],f=[[],0],g=[[],0],h=0;h<b.lengths.length;h++){var i=a.mergeDimensions(b.lengths[h],c.lengths[h],2==h);f[0].push(i[0]),g[0].push(i[1]),e.push(i[2])}if(b.color&&c.color){var j=a.mergeColors(b.color,c.color);f[1]=j[0],g[1]=j[1],d=j[2]}return[f,g,function(a){for(var c=b.inset?\"inset \":\" \",f=0;f<e.length;f++)c+=e[f](a[0][f])+\" \";return d&&(c+=d(a[1])),c}]}}function e(b,c,d,e){function f(a){return{inset:a,color:[0,0,0,0],lengths:[{px:0},{px:0},{px:0},{px:0}]}}for(var g=[],h=[],i=0;i<d.length||i<e.length;i++){var j=d[i]||f(e[i].inset),k=e[i]||f(d[i].inset);g.push(j),h.push(k)}return a.mergeNestedRepeated(b,c,g,h)}var f=e.bind(null,d,\", \");a.addPropertiesHandler(c,f,[\"box-shadow\",\"text-shadow\"])}(d),function(a,b){function c(a){return a.toFixed(3).replace(\".000\",\"\")}function d(a,b,c){return Math.min(b,Math.max(a,c))}function e(a){return/^\\s*[-+]?(\\d*\\.)?\\d+\\s*$/.test(a)?Number(a):void 0}function f(a,b){return[a,b,c]}function g(a,b){return 0!=a?i(0,1/0)(a,b):void 0}function h(a,b){return[a,b,function(a){return Math.round(d(1,1/0,a))}]}function i(a,b){return function(e,f){return[e,f,function(e){return c(d(a,b,e))}]}}function j(a,b){return[a,b,Math.round]}a.clamp=d,a.addPropertiesHandler(e,i(0,1/0),[\"border-image-width\",\"line-height\"]),a.addPropertiesHandler(e,i(0,1),[\"opacity\",\"shape-image-threshold\"]),a.addPropertiesHandler(e,g,[\"flex-grow\",\"flex-shrink\"]),a.addPropertiesHandler(e,h,[\"orphans\",\"widows\"]),a.addPropertiesHandler(e,j,[\"z-index\"]),a.parseNumber=e,a.mergeNumbers=f,a.numberToString=c}(d,f),function(a,b){function c(a,b){return\"visible\"==a||\"visible\"==b?[0,1,function(c){return 0>=c?a:c>=1?b:\"visible\"}]:void 0}a.addPropertiesHandler(String,c,[\"visibility\"])}(d),function(a,b){function c(a){a=a.trim(),f.fillStyle=\"#000\",f.fillStyle=a;var b=f.fillStyle;if(f.fillStyle=\"#fff\",f.fillStyle=a,b==f.fillStyle){f.fillRect(0,0,1,1);var c=f.getImageData(0,0,1,1).data;f.clearRect(0,0,1,1);var d=c[3]/255;return[c[0]*d,c[1]*d,c[2]*d,d]}}function d(b,c){return[b,c,function(b){function c(a){return Math.max(0,Math.min(255,a))}if(b[3])for(var d=0;3>d;d++)b[d]=Math.round(c(b[d]/b[3]));return b[3]=a.numberToString(a.clamp(0,1,b[3])),\"rgba(\"+b.join(\",\")+\")\"}]}var e=document.createElementNS(\"http://www.w3.org/1999/xhtml\",\"canvas\");e.width=e.height=1;var f=e.getContext(\"2d\");a.addPropertiesHandler(c,d,[\"background-color\",\"border-bottom-color\",\"border-left-color\",\"border-right-color\",\"border-top-color\",\"color\",\"outline-color\",\"text-decoration-color\"]),a.consumeColor=a.consumeParenthesised.bind(null,c),a.mergeColors=d}(d,f),function(a,b){function c(a,b){if(b=b.trim().toLowerCase(),\"0\"==b&&\"px\".search(a)>=0)return{px:0};if(/^[^(]*$|^calc/.test(b)){b=b.replace(/calc\\(/g,\"(\");var c={};b=b.replace(a,function(a){return c[a]=null,\"U\"+a});for(var d=\"U(\"+a.source+\")\",e=b.replace(/[-+]?(\\d*\\.)?\\d+/g,\"N\").replace(new RegExp(\"N\"+d,\"g\"),\"D\").replace(/\\s[+-]\\s/g,\"O\").replace(/\\s/g,\"\"),f=[/N\\*(D)/g,/(N|D)[*/]N/g,/(N|D)O\\1/g,/\\((N|D)\\)/g],g=0;g<f.length;)f[g].test(e)?(e=e.replace(f[g],\"$1\"),g=0):g++;if(\"D\"==e){for(var h in c){var i=eval(b.replace(new RegExp(\"U\"+h,\"g\"),\"\").replace(new RegExp(d,\"g\"),\"*0\"));if(!isFinite(i))return;c[h]=i}return c}}}function d(a,b){return e(a,b,!0)}function e(b,c,d){var e,f=[];for(e in b)f.push(e);for(e in c)f.indexOf(e)<0&&f.push(e);return b=f.map(function(a){return b[a]||0}),c=f.map(function(a){return c[a]||0}),[b,c,function(b){var c=b.map(function(c,e){return 1==b.length&&d&&(c=Math.max(c,0)),a.numberToString(c)+f[e]}).join(\" + \");return b.length>1?\"calc(\"+c+\")\":c}]}var f=\"px|em|ex|ch|rem|vw|vh|vmin|vmax|cm|mm|in|pt|pc\",g=c.bind(null,new RegExp(f,\"g\")),h=c.bind(null,new RegExp(f+\"|%\",\"g\")),i=c.bind(null,/deg|rad|grad|turn/g);a.parseLength=g,a.parseLengthOrPercent=h,a.consumeLengthOrPercent=a.consumeParenthesised.bind(null,h),a.parseAngle=i,a.mergeDimensions=e;var j=a.consumeParenthesised.bind(null,g),k=a.consumeRepeated.bind(void 0,j,/^/),l=a.consumeRepeated.bind(void 0,k,/^,/);a.consumeSizePairList=l;var m=function(a){var b=l(a);return b&&\"\"==b[1]?b[0]:void 0},n=a.mergeNestedRepeated.bind(void 0,d,\" \"),o=a.mergeNestedRepeated.bind(void 0,n,\",\");a.mergeNonNegativeSizePair=n,a.addPropertiesHandler(m,o,[\"background-size\"]),a.addPropertiesHandler(h,d,[\"border-bottom-width\",\"border-image-width\",\"border-left-width\",\"border-right-width\",\"border-top-width\",\"flex-basis\",\"font-size\",\"height\",\"line-height\",\"max-height\",\"max-width\",\"outline-width\",\"width\"]),a.addPropertiesHandler(h,e,[\"border-bottom-left-radius\",\"border-bottom-right-radius\",\"border-top-left-radius\",\"border-top-right-radius\",\"bottom\",\"left\",\"letter-spacing\",\"margin-bottom\",\"margin-left\",\"margin-right\",\"margin-top\",\"min-height\",\"min-width\",\"outline-offset\",\"padding-bottom\",\"padding-left\",\"padding-right\",\"padding-top\",\"perspective\",\"right\",\"shape-margin\",\"text-indent\",\"top\",\"vertical-align\",\"word-spacing\"])}(d,f),function(a,b){function c(b){return a.consumeLengthOrPercent(b)||a.consumeToken(/^auto/,b)}function d(b){var d=a.consumeList([a.ignore(a.consumeToken.bind(null,/^rect/)),a.ignore(a.consumeToken.bind(null,/^\\(/)),a.consumeRepeated.bind(null,c,/^,/),a.ignore(a.consumeToken.bind(null,/^\\)/))],b);return d&&4==d[0].length?d[0]:void 0}function e(b,c){return\"auto\"==b||\"auto\"==c?[!0,!1,function(d){var e=d?b:c;if(\"auto\"==e)return\"auto\";var f=a.mergeDimensions(e,e);return f[2](f[0])}]:a.mergeDimensions(b,c)}function f(a){return\"rect(\"+a+\")\"}var g=a.mergeWrappedNestedRepeated.bind(null,f,e,\", \");a.parseBox=d,a.mergeBoxes=g,a.addPropertiesHandler(d,g,[\"clip\"])}(d,f),function(a,b){function c(a){return function(b){var c=0;return a.map(function(a){return a===k?b[c++]:a})}}function d(a){return a}function e(b){if(b=b.toLowerCase().trim(),\"none\"==b)return[];for(var c,d=/\\s*(\\w+)\\(([^)]*)\\)/g,e=[],f=0;c=d.exec(b);){if(c.index!=f)return;f=c.index+c[0].length;var g=c[1],h=n[g];if(!h)return;var i=c[2].split(\",\"),j=h[0];if(j.length<i.length)return;for(var k=[],o=0;o<j.length;o++){var p,q=i[o],r=j[o];if(p=q?{A:function(b){return\"0\"==b.trim()?m:a.parseAngle(b)},N:a.parseNumber,T:a.parseLengthOrPercent,L:a.parseLength}[r.toUpperCase()](q):{a:m,n:k[0],t:l}[r],void 0===p)return;k.push(p)}if(e.push({t:g,d:k}),d.lastIndex==b.length)return e}}function f(a){return a.toFixed(6).replace(\".000000\",\"\")}function g(b,c){if(b.decompositionPair!==c){b.decompositionPair=c;var d=a.makeMatrixDecomposition(b)}if(c.decompositionPair!==b){c.decompositionPair=b;var e=a.makeMatrixDecomposition(c)}return null==d[0]||null==e[0]?[[!1],[!0],function(a){return a?c[0].d:b[0].d}]:(d[0].push(0),e[0].push(1),[d,e,function(b){var c=a.quat(d[0][3],e[0][3],b[5]),g=a.composeMatrix(b[0],b[1],b[2],c,b[4]),h=g.map(f).join(\",\");return h}])}function h(a){return a.replace(/[xy]/,\"\")}function i(a){return a.replace(/(x|y|z|3d)?$/,\"3d\")}function j(b,c){var d=a.makeMatrixDecomposition&&!0,e=!1;if(!b.length||!c.length){b.length||(e=!0,b=c,c=[]);for(var f=0;f<b.length;f++){var j=b[f].t,k=b[f].d,l=\"scale\"==j.substr(0,5)?1:0;c.push({t:j,d:k.map(function(a){if(\"number\"==typeof a)return l;var b={};for(var c in a)b[c]=l;return b})})}}var m=function(a,b){return\"perspective\"==a&&\"perspective\"==b||(\"matrix\"==a||\"matrix3d\"==a)&&(\"matrix\"==b||\"matrix3d\"==b)},o=[],p=[],q=[];if(b.length!=c.length){if(!d)return;var r=g(b,c);o=[r[0]],p=[r[1]],q=[[\"matrix\",[r[2]]]]}else for(var f=0;f<b.length;f++){var j,s=b[f].t,t=c[f].t,u=b[f].d,v=c[f].d,w=n[s],x=n[t];if(m(s,t)){if(!d)return;var r=g([b[f]],[c[f]]);o.push(r[0]),p.push(r[1]),q.push([\"matrix\",[r[2]]])}else{if(s==t)j=s;else if(w[2]&&x[2]&&h(s)==h(t))j=h(s),u=w[2](u),v=x[2](v);else{if(!w[1]||!x[1]||i(s)!=i(t)){if(!d)return;var r=g(b,c);o=[r[0]],p=[r[1]],q=[[\"matrix\",[r[2]]]];break}j=i(s),u=w[1](u),v=x[1](v)}for(var y=[],z=[],A=[],B=0;B<u.length;B++){var C=\"number\"==typeof u[B]?a.mergeNumbers:a.mergeDimensions,r=C(u[B],v[B]);y[B]=r[0],z[B]=r[1],A.push(r[2])}o.push(y),p.push(z),q.push([j,A])}}if(e){var D=o;o=p,p=D}return[o,p,function(a){return a.map(function(a,b){var c=a.map(function(a,c){return q[b][1][c](a)}).join(\",\");return\"matrix\"==q[b][0]&&16==c.split(\",\").length&&(q[b][0]=\"matrix3d\"),q[b][0]+\"(\"+c+\")\"}).join(\" \")}]}var k=null,l={px:0},m={deg:0},n={matrix:[\"NNNNNN\",[k,k,0,0,k,k,0,0,0,0,1,0,k,k,0,1],d],matrix3d:[\"NNNNNNNNNNNNNNNN\",d],rotate:[\"A\"],rotatex:[\"A\"],rotatey:[\"A\"],rotatez:[\"A\"],rotate3d:[\"NNNA\"],perspective:[\"L\"],scale:[\"Nn\",c([k,k,1]),d],scalex:[\"N\",c([k,1,1]),c([k,1])],scaley:[\"N\",c([1,k,1]),c([1,k])],scalez:[\"N\",c([1,1,k])],scale3d:[\"NNN\",d],skew:[\"Aa\",null,d],skewx:[\"A\",null,c([k,m])],skewy:[\"A\",null,c([m,k])],translate:[\"Tt\",c([k,k,l]),d],translatex:[\"T\",c([k,l,l]),c([k,l])],translatey:[\"T\",c([l,k,l]),c([l,k])],translatez:[\"L\",c([l,l,k])],translate3d:[\"TTL\",d]};a.addPropertiesHandler(e,j,[\"transform\"])}(d,f),function(a,b){function c(a,b){b.concat([a]).forEach(function(b){b in document.documentElement.style&&(d[a]=b)})}var d={};c(\"transform\",[\"webkitTransform\",\"msTransform\"]),c(\"transformOrigin\",[\"webkitTransformOrigin\"]),c(\"perspective\",[\"webkitPerspective\"]),c(\"perspectiveOrigin\",[\"webkitPerspectiveOrigin\"]),a.propertyName=function(a){return d[a]||a}}(d,f)}()}({},function(){return this}());\n//# sourceMappingURL=web-animations.min.js.map"
  },
  {
    "path": "content/js/ionic.js",
    "content": "/*\nCopyright 2013 Drifty Co.\nhttp://drifty.com/\n\nIonic - an amazing HTML5 mobile app framework.\nhttps://ionicframework.com/\n\nBy @maxlynch, @benjsperry, @adamdbradley <3\n\nLicensed under the MIT license. Please see LICENSE for more information.\n\nMake awesome shit.\n*/\n;\n\n// Create namespaces \nwindow.ionic = {\n  controllers: {},\n  views: {}\n};\n;\n(function(ionic) {\n\n  var bezierCoord = function (x,y) {\n    if(!x) var x=0;\n    if(!y) var y=0;\n    return {x: x, y: y};\n  }\n\n  function B1(t) { return t*t*t }\n  function B2(t) { return 3*t*t*(1-t) }\n  function B3(t) { return 3*t*(1-t)*(1-t) }\n  function B4(t) { return (1-t)*(1-t)*(1-t) }\n\n  ionic.Animator = {\n    // Quadratic bezier solver\n    getQuadraticBezier: function(percent,C1,C2,C3,C4) {\n      var pos = new bezierCoord();\n      pos.x = C1.x*B1(percent) + C2.x*B2(percent) + C3.x*B3(percent) + C4.x*B4(percent);\n      pos.y = C1.y*B1(percent) + C2.y*B2(percent) + C3.y*B3(percent) + C4.y*B4(percent);\n      return pos;\n    },\n\n    // Cubic bezier solver from https://github.com/arian/cubic-bezier (MIT)\n    getCubicBezier: function(x1, y1, x2, y2, duration) {\n      // Precision\n      epsilon = (1000 / 60 / duration) / 4;\n\n      var curveX = function(t){\n        var v = 1 - t;\n        return 3 * v * v * t * x1 + 3 * v * t * t * x2 + t * t * t;\n      };\n\n      var curveY = function(t){\n        var v = 1 - t;\n        return 3 * v * v * t * y1 + 3 * v * t * t * y2 + t * t * t;\n      };\n\n      var derivativeCurveX = function(t){\n        var v = 1 - t;\n        return 3 * (2 * (t - 1) * t + v * v) * x1 + 3 * (- t * t * t + 2 * v * t) * x2;\n      };\n\n      return function(t) {\n\n        var x = t, t0, t1, t2, x2, d2, i;\n\n        // First try a few iterations of Newton's method -- normally very fast.\n        for (t2 = x, i = 0; i < 8; i++){\n          x2 = curveX(t2) - x;\n          if (Math.abs(x2) < epsilon) return curveY(t2);\n          d2 = derivativeCurveX(t2);\n          if (Math.abs(d2) < 1e-6) break;\n          t2 = t2 - x2 / d2;\n        }\n\n        t0 = 0, t1 = 1, t2 = x;\n\n        if (t2 < t0) return curveY(t0);\n        if (t2 > t1) return curveY(t1);\n\n        // Fallback to the bisection method for reliability.\n        while (t0 < t1){\n          x2 = curveX(t2);\n          if (Math.abs(x2 - x) < epsilon) return curveY(t2);\n          if (x > x2) t0 = t2;\n          else t1 = t2;\n          t2 = (t1 - t0) * .5 + t0;\n        }\n\n        // Failure\n        return curveY(t2);\n      };\n    },\n\n    animate: function(element, className, fn) {\n      return {\n        leave: function() {\n          var endFunc = function() {\n\n            element.classList.remove('leave');\n            element.classList.remove('leave-active');\n\n            element.removeEventListener('webkitTransitionEnd', endFunc);\n            element.removeEventListener('transitionEnd', endFunc);\n          };\n          element.addEventListener('webkitTransitionEnd', endFunc);\n          element.addEventListener('transitionEnd', endFunc);\n\n          element.classList.add('leave');\n          element.classList.add('leave-active');\n          return this;\n        },\n        enter: function() {\n          var endFunc = function() {\n\n            element.classList.remove('enter');\n            element.classList.remove('enter-active');\n\n            element.removeEventListener('webkitTransitionEnd', endFunc);\n            element.removeEventListener('transitionEnd', endFunc);\n          };\n          element.addEventListener('webkitTransitionEnd', endFunc);\n          element.addEventListener('transitionEnd', endFunc);\n\n          element.classList.add('enter');\n          element.classList.add('enter-active');\n\n          return this;\n        }\n      };\n    }\n  };\n})(ionic);\n;\n(function(ionic) {\n  ionic.DomUtil = {\n    getTextBounds: function(textNode) {\n      if(document.createRange) {\n        var range = document.createRange();\n        range.selectNodeContents(textNode);\n        if(range.getBoundingClientRect) {\n          var rect = range.getBoundingClientRect();\n\n          var sx = window.scrollX;\n          var sy = window.scrollY;\n\n          return {\n            top: rect.top + sy,\n            left: rect.left + sx,\n            right: rect.left + sx + rect.width,\n            bottom: rect.top + sy + rect.height,\n            width: rect.width,\n            height: rect.height\n          };\n        }\n      }\n      return null\n    },\n\n    getChildIndex: function(element) {\n      return Array.prototype.slice.call(element.parentNode.children).indexOf(element);\n    },\n    swapNodes: function(src, dest) {\n      dest.parentNode.insertBefore(src, dest);\n    },\n    /**\n     * {returns} the closest parent matching the className\n     */\n    getParentWithClass: function(e, className) {\n      while(e.parentNode) {\n        if(e.parentNode.classList && e.parentNode.classList.contains(className)) {\n          return e.parentNode;\n        }\n        e = e.parentNode;\n      }\n      return null;\n    },\n    /**\n     * {returns} the closest parent or self matching the className\n     */\n    getParentOrSelfWithClass: function(e, className) {\n      while(e) {\n        if(e.classList && e.classList.contains(className)) {\n          return e;\n        }\n        e = e.parentNode;\n      }\n      return null;\n    }\n  };\n})(window.ionic);\n;\n/**\n * ion-events.js\n *\n * Author: Max Lynch <max@drifty.com>\n *\n * Framework events handles various mobile browser events, and \n * detects special events like tap/swipe/etc. and emits them\n * as custom events that can be used in an app.\n *\n * Portions lovingly adapted from github.com/maker/ratchet and github.com/alexgibson/tap.js - thanks guys!\n */\n\n(function(ionic) {\n  ionic.EventController = {\n    VIRTUALIZED_EVENTS: ['tap', 'swipe', 'swiperight', 'swipeleft', 'drag', 'hold', 'release'],\n\n    // Trigger a new event\n    trigger: function(eventType, data) {\n      var event = new CustomEvent(eventType, { detail: data });\n\n      // Make sure to trigger the event on the given target, or dispatch it from\n      // the window if we don't have an event target\n      data && data.target && data.target.dispatchEvent(event) || window.dispatchEvent(event);\n    },\n  \n    // Bind an event\n    on: function(type, callback, element) {\n      var e = element || window;\n\n      // Bind a gesture if it's a virtual event\n      for(var i = 0, j = this.VIRTUALIZED_EVENTS.length; i < j; i++) {\n        if(type == this.VIRTUALIZED_EVENTS[i]) {\n          var gesture = new ionic.Gesture(element);\n          gesture.on(type, callback);\n          return gesture;\n        }\n      }\n\n      // Otherwise bind a normal event\n      e.addEventListener(type, callback);\n    },\n\n    off: function(type, callback, element) {\n      element.removeEventListener(type, callback);\n    },\n\n    // Register for a new gesture event on the given element\n    onGesture: function(type, callback, element) {\n      var gesture = new ionic.Gesture(element);\n      gesture.on(type, callback);\n      return gesture;\n    },\n\n    // Unregister a previous gesture event\n    offGesture: function(gesture, type, callback) {\n      gesture.off(type, callback);\n    },\n\n    // // With a click event, we need to check the target\n    // // and if it's an internal target that doesn't want\n    // // a click, cancel it\n    // handleClick: function(e) {\n    //   var target = e.target;\n\n    //   if(ionic.Gestures.HAS_TOUCHEVENTS) {\n    //     // We don't allow any clicks on mobile\n    //     e.preventDefault();\n    //     return false;\n    //   }\n\n    //   if (\n    //     !  target\n    //     || e.which > 1\n    //     || e.metaKey\n    //     || e.ctrlKey\n    //     //|| isScrolling\n    //     // || location.protocol !== target.protocol\n    //     // || location.host     !== target.host\n    //     // // Not sure abotu this one\n    //     // //|| !target.hash && /#/.test(target.href)\n    //     // || target.hash && target.href.replace(target.hash, '') === location.href.replace(location.hash, '')\n    //     //|| target.getAttribute('data-ignore') == 'push'\n    //   ) {\n    //     // Allow it\n    //     return;\n    //   }\n    //   // We need to cancel this one\n    //   e.preventDefault();\n\n    // },\n    \n    handlePopState: function(event) {\n    },\n  };\n  \n  \n  // Map some convenient top-level functions for event handling\n  ionic.on = function() { ionic.EventController.on.apply(ionic.EventController, arguments); };\n  ionic.off = function() { ionic.EventController.off.apply(ionic.EventController, arguments); };\n  ionic.trigger = function() { ionic.EventController.trigger.apply(ionic.EventController.trigger, arguments); };\n  ionic.onGesture = function() { ionic.EventController.onGesture.apply(ionic.EventController.onGesture, arguments); };\n  ionic.offGesture = function() { ionic.EventController.offGesture.apply(ionic.EventController.offGesture, arguments); };\n\n  // DISABLING FOR NOW. THE TAP CODE AT THE EXT LEVEL SHOULD BE DOING THIS\n  // Set up various listeners\n  //window.addEventListener('click', ionic.EventController.handleClick);\n\n})(window.ionic);\n;\n/**\n  * Simple gesture controllers with some common gestures that emit\n  * gesture events.\n  *\n  * Ported from github.com/EightMedia/ionic.Gestures.js - thanks!\n  */\n(function(ionic) {\n  \n  /**\n   * ionic.Gestures\n   * use this to create instances\n   * @param   {HTMLElement}   element\n   * @param   {Object}        options\n   * @returns {ionic.Gestures.Instance}\n   * @constructor\n   */\n  ionic.Gesture = function(element, options) {\n    return new ionic.Gestures.Instance(element, options || {});\n  };\n\n  ionic.Gestures = {};\n\n  // default settings\n  ionic.Gestures.defaults = {\n    // add styles and attributes to the element to prevent the browser from doing\n    // its native behavior. this doesnt prevent the scrolling, but cancels\n    // the contextmenu, tap highlighting etc\n    // set to false to disable this\n    stop_browser_behavior: {\n      // this also triggers onselectstart=false for IE\n      userSelect: 'none',\n      // this makes the element blocking in IE10 >, you could experiment with the value\n      // see for more options this issue; https://github.com/EightMedia/hammer.js/issues/241\n      touchAction: 'none',\n      touchCallout: 'none',\n      contentZooming: 'none',\n      userDrag: 'none',\n      tapHighlightColor: 'rgba(0,0,0,0)'\n    }\n\n                           // more settings are defined per gesture at gestures.js\n  };\n\n  // detect touchevents\n  ionic.Gestures.HAS_POINTEREVENTS = window.navigator.pointerEnabled || window.navigator.msPointerEnabled;\n  ionic.Gestures.HAS_TOUCHEVENTS = ('ontouchstart' in window);\n\n  // dont use mouseevents on mobile devices\n  ionic.Gestures.MOBILE_REGEX = /mobile|tablet|ip(ad|hone|od)|android|silk/i;\n  ionic.Gestures.NO_MOUSEEVENTS = ionic.Gestures.HAS_TOUCHEVENTS && window.navigator.userAgent.match(ionic.Gestures.MOBILE_REGEX);\n\n  // eventtypes per touchevent (start, move, end)\n  // are filled by ionic.Gestures.event.determineEventTypes on setup\n  ionic.Gestures.EVENT_TYPES = {};\n\n  // direction defines\n  ionic.Gestures.DIRECTION_DOWN = 'down';\n  ionic.Gestures.DIRECTION_LEFT = 'left';\n  ionic.Gestures.DIRECTION_UP = 'up';\n  ionic.Gestures.DIRECTION_RIGHT = 'right';\n\n  // pointer type\n  ionic.Gestures.POINTER_MOUSE = 'mouse';\n  ionic.Gestures.POINTER_TOUCH = 'touch';\n  ionic.Gestures.POINTER_PEN = 'pen';\n\n  // touch event defines\n  ionic.Gestures.EVENT_START = 'start';\n  ionic.Gestures.EVENT_MOVE = 'move';\n  ionic.Gestures.EVENT_END = 'end';\n\n  // hammer document where the base events are added at\n  ionic.Gestures.DOCUMENT = window.document;\n\n  // plugins namespace\n  ionic.Gestures.plugins = {};\n\n  // if the window events are set...\n  ionic.Gestures.READY = false;\n\n  /**\n   * setup events to detect gestures on the document\n   */\n  function setup() {\n    if(ionic.Gestures.READY) {\n      return;\n    }\n\n    // find what eventtypes we add listeners to\n    ionic.Gestures.event.determineEventTypes();\n\n    // Register all gestures inside ionic.Gestures.gestures\n    for(var name in ionic.Gestures.gestures) {\n      if(ionic.Gestures.gestures.hasOwnProperty(name)) {\n        ionic.Gestures.detection.register(ionic.Gestures.gestures[name]);\n      }\n    }\n\n    // Add touch events on the document\n    ionic.Gestures.event.onTouch(ionic.Gestures.DOCUMENT, ionic.Gestures.EVENT_MOVE, ionic.Gestures.detection.detect);\n    ionic.Gestures.event.onTouch(ionic.Gestures.DOCUMENT, ionic.Gestures.EVENT_END, ionic.Gestures.detection.detect);\n\n    // ionic.Gestures is ready...!\n    ionic.Gestures.READY = true;\n  }\n\n  /**\n   * create new hammer instance\n   * all methods should return the instance itself, so it is chainable.\n   * @param   {HTMLElement}       element\n   * @param   {Object}            [options={}]\n   * @returns {ionic.Gestures.Instance}\n   * @constructor\n   */\n  ionic.Gestures.Instance = function(element, options) {\n    var self = this;\n\n    // A null element was passed into the instance, which means\n    // whatever lookup was done to find this element failed to find it\n    // so we can't listen for events on it.\n    if(element === null) {\n      console.error('Null element passed to gesture (element does not exist). Not listening for gesture');\n      return;\n    }\n\n    // setup ionic.GesturesJS window events and register all gestures\n    // this also sets up the default options\n    setup();\n\n    this.element = element;\n\n    // start/stop detection option\n    this.enabled = true;\n\n    // merge options\n    this.options = ionic.Gestures.utils.extend(\n        ionic.Gestures.utils.extend({}, ionic.Gestures.defaults),\n        options || {});\n\n    // add some css to the element to prevent the browser from doing its native behavoir\n    if(this.options.stop_browser_behavior) {\n      ionic.Gestures.utils.stopDefaultBrowserBehavior(this.element, this.options.stop_browser_behavior);\n    }\n\n    // start detection on touchstart\n    ionic.Gestures.event.onTouch(element, ionic.Gestures.EVENT_START, function(ev) {\n      if(self.enabled) {\n        ionic.Gestures.detection.startDetect(self, ev);\n      }\n    });\n\n    // return instance\n    return this;\n  };\n\n\n  ionic.Gestures.Instance.prototype = {\n    /**\n     * bind events to the instance\n     * @param   {String}      gesture\n     * @param   {Function}    handler\n     * @returns {ionic.Gestures.Instance}\n     */\n    on: function onEvent(gesture, handler){\n      var gestures = gesture.split(' ');\n      for(var t=0; t<gestures.length; t++) {\n        this.element.addEventListener(gestures[t], handler, false);\n      }\n      return this;\n    },\n\n\n    /**\n     * unbind events to the instance\n     * @param   {String}      gesture\n     * @param   {Function}    handler\n     * @returns {ionic.Gestures.Instance}\n     */\n    off: function offEvent(gesture, handler){\n      var gestures = gesture.split(' ');\n      for(var t=0; t<gestures.length; t++) {\n        this.element.removeEventListener(gestures[t], handler, false);\n      }\n      return this;\n    },\n\n\n    /**\n     * trigger gesture event\n     * @param   {String}      gesture\n     * @param   {Object}      eventData\n     * @returns {ionic.Gestures.Instance}\n     */\n    trigger: function triggerEvent(gesture, eventData){\n      // create DOM event\n      var event = ionic.Gestures.DOCUMENT.createEvent('Event');\n      event.initEvent(gesture, true, true);\n      event.gesture = eventData;\n\n      // trigger on the target if it is in the instance element,\n      // this is for event delegation tricks\n      var element = this.element;\n      if(ionic.Gestures.utils.hasParent(eventData.target, element)) {\n        element = eventData.target;\n      }\n\n      element.dispatchEvent(event);\n      return this;\n    },\n\n\n    /**\n     * enable of disable hammer.js detection\n     * @param   {Boolean}   state\n     * @returns {ionic.Gestures.Instance}\n     */\n    enable: function enable(state) {\n      this.enabled = state;\n      return this;\n    }\n  };\n\n  /**\n   * this holds the last move event,\n   * used to fix empty touchend issue\n   * see the onTouch event for an explanation\n   * @type {Object}\n   */\n  var last_move_event = null;\n\n\n  /**\n   * when the mouse is hold down, this is true\n   * @type {Boolean}\n   */\n  var enable_detect = false;\n\n\n  /**\n   * when touch events have been fired, this is true\n   * @type {Boolean}\n   */\n  var touch_triggered = false;\n\n\n  ionic.Gestures.event = {\n    /**\n     * simple addEventListener\n     * @param   {HTMLElement}   element\n     * @param   {String}        type\n     * @param   {Function}      handler\n     */\n    bindDom: function(element, type, handler) {\n      var types = type.split(' ');\n      for(var t=0; t<types.length; t++) {\n        element.addEventListener(types[t], handler, false);\n      }\n    },\n\n\n    /**\n     * touch events with mouse fallback\n     * @param   {HTMLElement}   element\n     * @param   {String}        eventType        like ionic.Gestures.EVENT_MOVE\n     * @param   {Function}      handler\n     */\n    onTouch: function onTouch(element, eventType, handler) {\n      var self = this;\n\n      this.bindDom(element, ionic.Gestures.EVENT_TYPES[eventType], function bindDomOnTouch(ev) {\n        var sourceEventType = ev.type.toLowerCase();\n\n        // onmouseup, but when touchend has been fired we do nothing.\n        // this is for touchdevices which also fire a mouseup on touchend\n        if(sourceEventType.match(/mouse/) && touch_triggered) {\n          return;\n        }\n\n        // mousebutton must be down or a touch event\n        else if( sourceEventType.match(/touch/) ||   // touch events are always on screen\n          sourceEventType.match(/pointerdown/) || // pointerevents touch\n          (sourceEventType.match(/mouse/) && ev.which === 1)   // mouse is pressed\n          ){\n            enable_detect = true;\n          }\n\n        // mouse isn't pressed\n        else if(sourceEventType.match(/mouse/) && ev.which !== 1) {\n          enable_detect = false;\n        }\n\n\n        // we are in a touch event, set the touch triggered bool to true,\n        // this for the conflicts that may occur on ios and android\n        if(sourceEventType.match(/touch|pointer/)) {\n          touch_triggered = true;\n        }\n\n        // count the total touches on the screen\n        var count_touches = 0;\n\n        // when touch has been triggered in this detection session\n        // and we are now handling a mouse event, we stop that to prevent conflicts\n        if(enable_detect) {\n          // update pointerevent\n          if(ionic.Gestures.HAS_POINTEREVENTS && eventType != ionic.Gestures.EVENT_END) {\n            count_touches = ionic.Gestures.PointerEvent.updatePointer(eventType, ev);\n          }\n          // touch\n          else if(sourceEventType.match(/touch/)) {\n            count_touches = ev.touches.length;\n          }\n          // mouse\n          else if(!touch_triggered) {\n            count_touches = sourceEventType.match(/up/) ? 0 : 1;\n          }\n\n          // if we are in a end event, but when we remove one touch and\n          // we still have enough, set eventType to move\n          if(count_touches > 0 && eventType == ionic.Gestures.EVENT_END) {\n            eventType = ionic.Gestures.EVENT_MOVE;\n          }\n          // no touches, force the end event\n          else if(!count_touches) {\n            eventType = ionic.Gestures.EVENT_END;\n          }\n\n          // store the last move event\n          if(count_touches || last_move_event === null) {\n            last_move_event = ev;\n          }\n\n          // trigger the handler\n          handler.call(ionic.Gestures.detection, self.collectEventData(element, eventType, self.getTouchList(last_move_event, eventType), ev));\n\n          // remove pointerevent from list\n          if(ionic.Gestures.HAS_POINTEREVENTS && eventType == ionic.Gestures.EVENT_END) {\n            count_touches = ionic.Gestures.PointerEvent.updatePointer(eventType, ev);\n          }\n        }\n\n        //debug(sourceEventType +\" \"+ eventType);\n\n        // on the end we reset everything\n        if(!count_touches) {\n          last_move_event = null;\n          enable_detect = false;\n          touch_triggered = false;\n          ionic.Gestures.PointerEvent.reset();\n        }\n      });\n    },\n\n\n    /**\n     * we have different events for each device/browser\n     * determine what we need and set them in the ionic.Gestures.EVENT_TYPES constant\n     */\n    determineEventTypes: function determineEventTypes() {\n      // determine the eventtype we want to set\n      var types;\n\n      // pointerEvents magic\n      if(ionic.Gestures.HAS_POINTEREVENTS) {\n        types = ionic.Gestures.PointerEvent.getEvents();\n      }\n      // on Android, iOS, blackberry, windows mobile we dont want any mouseevents\n      else if(ionic.Gestures.NO_MOUSEEVENTS) {\n        types = [\n          'touchstart',\n          'touchmove',\n          'touchend touchcancel'];\n      }\n      // for non pointer events browsers and mixed browsers,\n      // like chrome on windows8 touch laptop\n      else {\n        types = [\n          'touchstart mousedown',\n          'touchmove mousemove',\n          'touchend touchcancel mouseup'];\n      }\n\n      ionic.Gestures.EVENT_TYPES[ionic.Gestures.EVENT_START]  = types[0];\n      ionic.Gestures.EVENT_TYPES[ionic.Gestures.EVENT_MOVE]   = types[1];\n      ionic.Gestures.EVENT_TYPES[ionic.Gestures.EVENT_END]    = types[2];\n    },\n\n\n    /**\n     * create touchlist depending on the event\n     * @param   {Object}    ev\n     * @param   {String}    eventType   used by the fakemultitouch plugin\n     */\n    getTouchList: function getTouchList(ev/*, eventType*/) {\n      // get the fake pointerEvent touchlist\n      if(ionic.Gestures.HAS_POINTEREVENTS) {\n        return ionic.Gestures.PointerEvent.getTouchList();\n      }\n      // get the touchlist\n      else if(ev.touches) {\n        return ev.touches;\n      }\n      // make fake touchlist from mouse position\n      else {\n        ev.indentifier = 1;\n        return [ev];\n      }\n    },\n\n\n    /**\n     * collect event data for ionic.Gestures js\n     * @param   {HTMLElement}   element\n     * @param   {String}        eventType        like ionic.Gestures.EVENT_MOVE\n     * @param   {Object}        eventData\n     */\n    collectEventData: function collectEventData(element, eventType, touches, ev) {\n\n      // find out pointerType\n      var pointerType = ionic.Gestures.POINTER_TOUCH;\n      if(ev.type.match(/mouse/) || ionic.Gestures.PointerEvent.matchType(ionic.Gestures.POINTER_MOUSE, ev)) {\n        pointerType = ionic.Gestures.POINTER_MOUSE;\n      }\n\n      return {\n        center      : ionic.Gestures.utils.getCenter(touches),\n                    timeStamp   : new Date().getTime(),\n                    target      : ev.target,\n                    touches     : touches,\n                    eventType   : eventType,\n                    pointerType : pointerType,\n                    srcEvent    : ev,\n\n                    /**\n                     * prevent the browser default actions\n                     * mostly used to disable scrolling of the browser\n                     */\n                    preventDefault: function() {\n                      if(this.srcEvent.preventManipulation) {\n                        this.srcEvent.preventManipulation();\n                      }\n\n                      if(this.srcEvent.preventDefault) {\n                        this.srcEvent.preventDefault();\n                      }\n                    },\n\n                    /**\n                     * stop bubbling the event up to its parents\n                     */\n                    stopPropagation: function() {\n                      this.srcEvent.stopPropagation();\n                    },\n\n                    /**\n                     * immediately stop gesture detection\n                     * might be useful after a swipe was detected\n                     * @return {*}\n                     */\n                    stopDetect: function() {\n                      return ionic.Gestures.detection.stopDetect();\n                    }\n      };\n    }\n  };\n\n  ionic.Gestures.PointerEvent = {\n    /**\n     * holds all pointers\n     * @type {Object}\n     */\n    pointers: {},\n\n    /**\n     * get a list of pointers\n     * @returns {Array}     touchlist\n     */\n    getTouchList: function() {\n      var self = this;\n      var touchlist = [];\n\n      // we can use forEach since pointerEvents only is in IE10\n      Object.keys(self.pointers).sort().forEach(function(id) {\n        touchlist.push(self.pointers[id]);\n      });\n      return touchlist;\n    },\n\n    /**\n     * update the position of a pointer\n     * @param   {String}   type             ionic.Gestures.EVENT_END\n     * @param   {Object}   pointerEvent\n     */\n    updatePointer: function(type, pointerEvent) {\n      if(type == ionic.Gestures.EVENT_END) {\n        this.pointers = {};\n      }\n      else {\n        pointerEvent.identifier = pointerEvent.pointerId;\n        this.pointers[pointerEvent.pointerId] = pointerEvent;\n      }\n\n      return Object.keys(this.pointers).length;\n    },\n\n    /**\n     * check if ev matches pointertype\n     * @param   {String}        pointerType     ionic.Gestures.POINTER_MOUSE\n     * @param   {PointerEvent}  ev\n     */\n    matchType: function(pointerType, ev) {\n      if(!ev.pointerType) {\n        return false;\n      }\n\n      var types = {};\n      types[ionic.Gestures.POINTER_MOUSE] = (ev.pointerType == ev.MSPOINTER_TYPE_MOUSE || ev.pointerType == ionic.Gestures.POINTER_MOUSE);\n      types[ionic.Gestures.POINTER_TOUCH] = (ev.pointerType == ev.MSPOINTER_TYPE_TOUCH || ev.pointerType == ionic.Gestures.POINTER_TOUCH);\n      types[ionic.Gestures.POINTER_PEN] = (ev.pointerType == ev.MSPOINTER_TYPE_PEN || ev.pointerType == ionic.Gestures.POINTER_PEN);\n      return types[pointerType];\n    },\n\n\n    /**\n     * get events\n     */\n    getEvents: function() {\n      return [\n        'pointerdown MSPointerDown',\n      'pointermove MSPointerMove',\n      'pointerup pointercancel MSPointerUp MSPointerCancel'\n        ];\n    },\n\n    /**\n     * reset the list\n     */\n    reset: function() {\n      this.pointers = {};\n    }\n  };\n\n\n  ionic.Gestures.utils = {\n    /**\n     * extend method,\n     * also used for cloning when dest is an empty object\n     * @param   {Object}    dest\n     * @param   {Object}    src\n     * @parm\t{Boolean}\tmerge\t\tdo a merge\n     * @returns {Object}    dest\n     */\n    extend: function extend(dest, src, merge) {\n      for (var key in src) {\n        if(dest[key] !== undefined && merge) {\n          continue;\n        }\n        dest[key] = src[key];\n      }\n      return dest;\n    },\n\n\n    /**\n     * find if a node is in the given parent\n     * used for event delegation tricks\n     * @param   {HTMLElement}   node\n     * @param   {HTMLElement}   parent\n     * @returns {boolean}       has_parent\n     */\n    hasParent: function(node, parent) {\n      while(node){\n        if(node == parent) {\n          return true;\n        }\n        node = node.parentNode;\n      }\n      return false;\n    },\n\n\n    /**\n     * get the center of all the touches\n     * @param   {Array}     touches\n     * @returns {Object}    center\n     */\n    getCenter: function getCenter(touches) {\n      var valuesX = [], valuesY = [];\n\n      for(var t= 0,len=touches.length; t<len; t++) {\n        valuesX.push(touches[t].pageX);\n        valuesY.push(touches[t].pageY);\n      }\n\n      return {\n        pageX: ((Math.min.apply(Math, valuesX) + Math.max.apply(Math, valuesX)) / 2),\n          pageY: ((Math.min.apply(Math, valuesY) + Math.max.apply(Math, valuesY)) / 2)\n      };\n    },\n\n\n    /**\n     * calculate the velocity between two points\n     * @param   {Number}    delta_time\n     * @param   {Number}    delta_x\n     * @param   {Number}    delta_y\n     * @returns {Object}    velocity\n     */\n    getVelocity: function getVelocity(delta_time, delta_x, delta_y) {\n      return {\n        x: Math.abs(delta_x / delta_time) || 0,\n        y: Math.abs(delta_y / delta_time) || 0\n      };\n    },\n\n\n    /**\n     * calculate the angle between two coordinates\n     * @param   {Touch}     touch1\n     * @param   {Touch}     touch2\n     * @returns {Number}    angle\n     */\n    getAngle: function getAngle(touch1, touch2) {\n      var y = touch2.pageY - touch1.pageY,\n      x = touch2.pageX - touch1.pageX;\n      return Math.atan2(y, x) * 180 / Math.PI;\n    },\n\n\n    /**\n     * angle to direction define\n     * @param   {Touch}     touch1\n     * @param   {Touch}     touch2\n     * @returns {String}    direction constant, like ionic.Gestures.DIRECTION_LEFT\n     */\n    getDirection: function getDirection(touch1, touch2) {\n      var x = Math.abs(touch1.pageX - touch2.pageX),\n      y = Math.abs(touch1.pageY - touch2.pageY);\n\n      if(x >= y) {\n        return touch1.pageX - touch2.pageX > 0 ? ionic.Gestures.DIRECTION_LEFT : ionic.Gestures.DIRECTION_RIGHT;\n      }\n      else {\n        return touch1.pageY - touch2.pageY > 0 ? ionic.Gestures.DIRECTION_UP : ionic.Gestures.DIRECTION_DOWN;\n      }\n    },\n\n\n    /**\n     * calculate the distance between two touches\n     * @param   {Touch}     touch1\n     * @param   {Touch}     touch2\n     * @returns {Number}    distance\n     */\n    getDistance: function getDistance(touch1, touch2) {\n      var x = touch2.pageX - touch1.pageX,\n      y = touch2.pageY - touch1.pageY;\n      return Math.sqrt((x*x) + (y*y));\n    },\n\n\n    /**\n     * calculate the scale factor between two touchLists (fingers)\n     * no scale is 1, and goes down to 0 when pinched together, and bigger when pinched out\n     * @param   {Array}     start\n     * @param   {Array}     end\n     * @returns {Number}    scale\n     */\n    getScale: function getScale(start, end) {\n      // need two fingers...\n      if(start.length >= 2 && end.length >= 2) {\n        return this.getDistance(end[0], end[1]) /\n          this.getDistance(start[0], start[1]);\n      }\n      return 1;\n    },\n\n\n    /**\n     * calculate the rotation degrees between two touchLists (fingers)\n     * @param   {Array}     start\n     * @param   {Array}     end\n     * @returns {Number}    rotation\n     */\n    getRotation: function getRotation(start, end) {\n      // need two fingers\n      if(start.length >= 2 && end.length >= 2) {\n        return this.getAngle(end[1], end[0]) -\n          this.getAngle(start[1], start[0]);\n      }\n      return 0;\n    },\n\n\n    /**\n     * boolean if the direction is vertical\n     * @param    {String}    direction\n     * @returns  {Boolean}   is_vertical\n     */\n    isVertical: function isVertical(direction) {\n      return (direction == ionic.Gestures.DIRECTION_UP || direction == ionic.Gestures.DIRECTION_DOWN);\n    },\n\n\n    /**\n     * stop browser default behavior with css props\n     * @param   {HtmlElement}   element\n     * @param   {Object}        css_props\n     */\n    stopDefaultBrowserBehavior: function stopDefaultBrowserBehavior(element, css_props) {\n      var prop,\n      vendors = ['webkit','khtml','moz','Moz','ms','o',''];\n\n      if(!css_props || !element.style) {\n        return;\n      }\n\n      // with css properties for modern browsers\n      for(var i = 0; i < vendors.length; i++) {\n        for(var p in css_props) {\n          if(css_props.hasOwnProperty(p)) {\n            prop = p;\n\n            // vender prefix at the property\n            if(vendors[i]) {\n              prop = vendors[i] + prop.substring(0, 1).toUpperCase() + prop.substring(1);\n            }\n\n            // set the style\n            element.style[prop] = css_props[p];\n          }\n        }\n      }\n\n      // also the disable onselectstart\n      if(css_props.userSelect == 'none') {\n        element.onselectstart = function() {\n          return false;\n        };\n      }\n    }\n  };\n\n\n  ionic.Gestures.detection = {\n    // contains all registred ionic.Gestures.gestures in the correct order\n    gestures: [],\n\n    // data of the current ionic.Gestures.gesture detection session\n    current: null,\n\n    // the previous ionic.Gestures.gesture session data\n    // is a full clone of the previous gesture.current object\n    previous: null,\n\n    // when this becomes true, no gestures are fired\n    stopped: false,\n\n\n    /**\n     * start ionic.Gestures.gesture detection\n     * @param   {ionic.Gestures.Instance}   inst\n     * @param   {Object}            eventData\n     */\n    startDetect: function startDetect(inst, eventData) {\n      // already busy with a ionic.Gestures.gesture detection on an element\n      if(this.current) {\n        return;\n      }\n\n      this.stopped = false;\n\n      this.current = {\n        inst        : inst, // reference to ionic.GesturesInstance we're working for\n        startEvent  : ionic.Gestures.utils.extend({}, eventData), // start eventData for distances, timing etc\n        lastEvent   : false, // last eventData\n        name        : '' // current gesture we're in/detected, can be 'tap', 'hold' etc\n      };\n\n      this.detect(eventData);\n    },\n\n\n    /**\n     * ionic.Gestures.gesture detection\n     * @param   {Object}    eventData\n     */\n    detect: function detect(eventData) {\n      if(!this.current || this.stopped) {\n        return;\n      }\n\n      // extend event data with calculations about scale, distance etc\n      eventData = this.extendEventData(eventData);\n\n      // instance options\n      var inst_options = this.current.inst.options;\n\n      // call ionic.Gestures.gesture handlers\n      for(var g=0,len=this.gestures.length; g<len; g++) {\n        var gesture = this.gestures[g];\n\n        // only when the instance options have enabled this gesture\n        if(!this.stopped && inst_options[gesture.name] !== false) {\n          // if a handler returns false, we stop with the detection\n          if(gesture.handler.call(gesture, eventData, this.current.inst) === false) {\n            this.stopDetect();\n            break;\n          }\n        }\n      }\n\n      // store as previous event event\n      if(this.current) {\n        this.current.lastEvent = eventData;\n      }\n\n      // endevent, but not the last touch, so dont stop\n      if(eventData.eventType == ionic.Gestures.EVENT_END && !eventData.touches.length-1) {\n        this.stopDetect();\n      }\n\n      return eventData;\n    },\n\n\n    /**\n     * clear the ionic.Gestures.gesture vars\n     * this is called on endDetect, but can also be used when a final ionic.Gestures.gesture has been detected\n     * to stop other ionic.Gestures.gestures from being fired\n     */\n    stopDetect: function stopDetect() {\n      // clone current data to the store as the previous gesture\n      // used for the double tap gesture, since this is an other gesture detect session\n      this.previous = ionic.Gestures.utils.extend({}, this.current);\n\n      // reset the current\n      this.current = null;\n\n      // stopped!\n      this.stopped = true;\n    },\n\n\n    /**\n     * extend eventData for ionic.Gestures.gestures\n     * @param   {Object}   ev\n     * @returns {Object}   ev\n     */\n    extendEventData: function extendEventData(ev) {\n      var startEv = this.current.startEvent;\n\n      // if the touches change, set the new touches over the startEvent touches\n      // this because touchevents don't have all the touches on touchstart, or the\n      // user must place his fingers at the EXACT same time on the screen, which is not realistic\n      // but, sometimes it happens that both fingers are touching at the EXACT same time\n      if(startEv && (ev.touches.length != startEv.touches.length || ev.touches === startEv.touches)) {\n        // extend 1 level deep to get the touchlist with the touch objects\n        startEv.touches = [];\n        for(var i=0,len=ev.touches.length; i<len; i++) {\n          startEv.touches.push(ionic.Gestures.utils.extend({}, ev.touches[i]));\n        }\n      }\n\n      var delta_time = ev.timeStamp - startEv.timeStamp,\n          delta_x = ev.center.pageX - startEv.center.pageX,\n          delta_y = ev.center.pageY - startEv.center.pageY,\n          velocity = ionic.Gestures.utils.getVelocity(delta_time, delta_x, delta_y);\n\n      ionic.Gestures.utils.extend(ev, {\n        deltaTime   : delta_time,\n\n        deltaX      : delta_x,\n        deltaY      : delta_y,\n\n        velocityX   : velocity.x,\n        velocityY   : velocity.y,\n\n        distance    : ionic.Gestures.utils.getDistance(startEv.center, ev.center),\n        angle       : ionic.Gestures.utils.getAngle(startEv.center, ev.center),\n        direction   : ionic.Gestures.utils.getDirection(startEv.center, ev.center),\n\n        scale       : ionic.Gestures.utils.getScale(startEv.touches, ev.touches),\n        rotation    : ionic.Gestures.utils.getRotation(startEv.touches, ev.touches),\n\n        startEvent  : startEv\n      });\n\n      return ev;\n    },\n\n\n    /**\n     * register new gesture\n     * @param   {Object}    gesture object, see gestures.js for documentation\n     * @returns {Array}     gestures\n     */\n    register: function register(gesture) {\n      // add an enable gesture options if there is no given\n      var options = gesture.defaults || {};\n      if(options[gesture.name] === undefined) {\n        options[gesture.name] = true;\n      }\n\n      // extend ionic.Gestures default options with the ionic.Gestures.gesture options\n      ionic.Gestures.utils.extend(ionic.Gestures.defaults, options, true);\n\n      // set its index\n      gesture.index = gesture.index || 1000;\n\n      // add ionic.Gestures.gesture to the list\n      this.gestures.push(gesture);\n\n      // sort the list by index\n      this.gestures.sort(function(a, b) {\n        if (a.index < b.index) {\n          return -1;\n        }\n        if (a.index > b.index) {\n          return 1;\n        }\n        return 0;\n      });\n\n      return this.gestures;\n    }\n  };\n\n\n  ionic.Gestures.gestures = ionic.Gestures.gestures || {};\n\n  /**\n   * Custom gestures\n   * ==============================\n   *\n   * Gesture object\n   * --------------------\n   * The object structure of a gesture:\n   *\n   * { name: 'mygesture',\n   *   index: 1337,\n   *   defaults: {\n   *     mygesture_option: true\n   *   }\n   *   handler: function(type, ev, inst) {\n   *     // trigger gesture event\n   *     inst.trigger(this.name, ev);\n   *   }\n   * }\n\n   * @param   {String}    name\n   * this should be the name of the gesture, lowercase\n   * it is also being used to disable/enable the gesture per instance config.\n   *\n   * @param   {Number}    [index=1000]\n   * the index of the gesture, where it is going to be in the stack of gestures detection\n   * like when you build an gesture that depends on the drag gesture, it is a good\n   * idea to place it after the index of the drag gesture.\n   *\n   * @param   {Object}    [defaults={}]\n   * the default settings of the gesture. these are added to the instance settings,\n   * and can be overruled per instance. you can also add the name of the gesture,\n   * but this is also added by default (and set to true).\n   *\n   * @param   {Function}  handler\n   * this handles the gesture detection of your custom gesture and receives the\n   * following arguments:\n   *\n   *      @param  {Object}    eventData\n   *      event data containing the following properties:\n   *          timeStamp   {Number}        time the event occurred\n   *          target      {HTMLElement}   target element\n   *          touches     {Array}         touches (fingers, pointers, mouse) on the screen\n   *          pointerType {String}        kind of pointer that was used. matches ionic.Gestures.POINTER_MOUSE|TOUCH\n   *          center      {Object}        center position of the touches. contains pageX and pageY\n   *          deltaTime   {Number}        the total time of the touches in the screen\n   *          deltaX      {Number}        the delta on x axis we haved moved\n   *          deltaY      {Number}        the delta on y axis we haved moved\n   *          velocityX   {Number}        the velocity on the x\n   *          velocityY   {Number}        the velocity on y\n   *          angle       {Number}        the angle we are moving\n   *          direction   {String}        the direction we are moving. matches ionic.Gestures.DIRECTION_UP|DOWN|LEFT|RIGHT\n   *          distance    {Number}        the distance we haved moved\n   *          scale       {Number}        scaling of the touches, needs 2 touches\n   *          rotation    {Number}        rotation of the touches, needs 2 touches *\n   *          eventType   {String}        matches ionic.Gestures.EVENT_START|MOVE|END\n   *          srcEvent    {Object}        the source event, like TouchStart or MouseDown *\n   *          startEvent  {Object}        contains the same properties as above,\n   *                                      but from the first touch. this is used to calculate\n   *                                      distances, deltaTime, scaling etc\n   *\n   *      @param  {ionic.Gestures.Instance}    inst\n   *      the instance we are doing the detection for. you can get the options from\n   *      the inst.options object and trigger the gesture event by calling inst.trigger\n   *\n   *\n   * Handle gestures\n   * --------------------\n   * inside the handler you can get/set ionic.Gestures.detectionic.current. This is the current\n   * detection sessionic. It has the following properties\n   *      @param  {String}    name\n   *      contains the name of the gesture we have detected. it has not a real function,\n  *      only to check in other gestures if something is detected.\n    *      like in the drag gesture we set it to 'drag' and in the swipe gesture we can\n    *      check if the current gesture is 'drag' by accessing ionic.Gestures.detectionic.current.name\n    *\n    *      @readonly\n    *      @param  {ionic.Gestures.Instance}    inst\n    *      the instance we do the detection for\n    *\n    *      @readonly\n    *      @param  {Object}    startEvent\n    *      contains the properties of the first gesture detection in this sessionic.\n    *      Used for calculations about timing, distance, etc.\n    *\n    *      @readonly\n    *      @param  {Object}    lastEvent\n    *      contains all the properties of the last gesture detect in this sessionic.\n    *\n    * after the gesture detection session has been completed (user has released the screen)\n    * the ionic.Gestures.detectionic.current object is copied into ionic.Gestures.detectionic.previous,\n    * this is usefull for gestures like doubletap, where you need to know if the\n      * previous gesture was a tap\n      *\n      * options that have been set by the instance can be received by calling inst.options\n      *\n      * You can trigger a gesture event by calling inst.trigger(\"mygesture\", event).\n      * The first param is the name of your gesture, the second the event argument\n      *\n      *\n      * Register gestures\n      * --------------------\n      * When an gesture is added to the ionic.Gestures.gestures object, it is auto registered\n      * at the setup of the first ionic.Gestures instance. You can also call ionic.Gestures.detectionic.register\n      * manually and pass your gesture object as a param\n      *\n      */\n\n      /**\n       * Hold\n       * Touch stays at the same place for x time\n       * @events  hold\n       */\n      ionic.Gestures.gestures.Hold = {\n        name: 'hold',\n        index: 10,\n        defaults: {\n          hold_timeout\t: 500,\n          hold_threshold\t: 1\n        },\n        timer: null,\n        handler: function holdGesture(ev, inst) {\n          switch(ev.eventType) {\n            case ionic.Gestures.EVENT_START:\n              // clear any running timers\n              clearTimeout(this.timer);\n\n              // set the gesture so we can check in the timeout if it still is\n              ionic.Gestures.detection.current.name = this.name;\n\n              // set timer and if after the timeout it still is hold,\n              // we trigger the hold event\n              this.timer = setTimeout(function() {\n                if(ionic.Gestures.detection.current.name == 'hold') {\n                  inst.trigger('hold', ev);\n                }\n              }, inst.options.hold_timeout);\n              break;\n\n              // when you move or end we clear the timer\n            case ionic.Gestures.EVENT_MOVE:\n              if(ev.distance > inst.options.hold_threshold) {\n                clearTimeout(this.timer);\n              }\n              break;\n\n            case ionic.Gestures.EVENT_END:\n              clearTimeout(this.timer);\n              break;\n          }\n        }\n      };\n\n\n  /**\n   * Tap/DoubleTap\n   * Quick touch at a place or double at the same place\n   * @events  tap, doubletap\n   */\n  ionic.Gestures.gestures.Tap = {\n    name: 'tap',\n    index: 100,\n    defaults: {\n      tap_max_touchtime\t: 250,\n      tap_max_distance\t: 10,\n      tap_always\t\t\t: true,\n      doubletap_distance\t: 20,\n      doubletap_interval\t: 300\n    },\n    handler: function tapGesture(ev, inst) {\n      if(ev.eventType == ionic.Gestures.EVENT_END) {\n        // previous gesture, for the double tap since these are two different gesture detections\n        var prev = ionic.Gestures.detection.previous,\n        did_doubletap = false;\n\n        // when the touchtime is higher then the max touch time\n        // or when the moving distance is too much\n        if(ev.deltaTime > inst.options.tap_max_touchtime ||\n            ev.distance > inst.options.tap_max_distance) {\n              return;\n            }\n\n        // check if double tap\n        if(prev && prev.name == 'tap' &&\n            (ev.timeStamp - prev.lastEvent.timeStamp) < inst.options.doubletap_interval &&\n            ev.distance < inst.options.doubletap_distance) {\n              inst.trigger('doubletap', ev);\n              did_doubletap = true;\n            }\n\n        // do a single tap\n        if(!did_doubletap || inst.options.tap_always) {\n          ionic.Gestures.detection.current.name = 'tap';\n          inst.trigger(ionic.Gestures.detection.current.name, ev);\n        }\n      }\n    }\n  };\n\n\n  /**\n   * Swipe\n   * triggers swipe events when the end velocity is above the threshold\n   * @events  swipe, swipeleft, swiperight, swipeup, swipedown\n   */\n  ionic.Gestures.gestures.Swipe = {\n    name: 'swipe',\n    index: 40,\n    defaults: {\n      // set 0 for unlimited, but this can conflict with transform\n      swipe_max_touches  : 1,\n      swipe_velocity     : 0.7\n    },\n    handler: function swipeGesture(ev, inst) {\n      if(ev.eventType == ionic.Gestures.EVENT_END) {\n        // max touches\n        if(inst.options.swipe_max_touches > 0 &&\n            ev.touches.length > inst.options.swipe_max_touches) {\n              return;\n            }\n\n        // when the distance we moved is too small we skip this gesture\n        // or we can be already in dragging\n        if(ev.velocityX > inst.options.swipe_velocity ||\n            ev.velocityY > inst.options.swipe_velocity) {\n              // trigger swipe events\n              inst.trigger(this.name, ev);\n              inst.trigger(this.name + ev.direction, ev);\n            }\n      }\n    }\n  };\n\n\n  /**\n   * Drag\n   * Move with x fingers (default 1) around on the page. Blocking the scrolling when\n   * moving left and right is a good practice. When all the drag events are blocking\n   * you disable scrolling on that area.\n   * @events  drag, drapleft, dragright, dragup, dragdown\n   */\n  ionic.Gestures.gestures.Drag = {\n    name: 'drag',\n    index: 50,\n    defaults: {\n      drag_min_distance : 10,\n      // Set correct_for_drag_min_distance to true to make the starting point of the drag\n      // be calculated from where the drag was triggered, not from where the touch started.\n      // Useful to avoid a jerk-starting drag, which can make fine-adjustments\n      // through dragging difficult, and be visually unappealing.\n      correct_for_drag_min_distance : true,\n      // set 0 for unlimited, but this can conflict with transform\n      drag_max_touches  : 1,\n      // prevent default browser behavior when dragging occurs\n      // be careful with it, it makes the element a blocking element\n      // when you are using the drag gesture, it is a good practice to set this true\n      drag_block_horizontal   : true,\n      drag_block_vertical     : true,\n      // drag_lock_to_axis keeps the drag gesture on the axis that it started on,\n      // It disallows vertical directions if the initial direction was horizontal, and vice versa.\n      drag_lock_to_axis       : false,\n      // drag lock only kicks in when distance > drag_lock_min_distance\n      // This way, locking occurs only when the distance has become large enough to reliably determine the direction\n      drag_lock_min_distance : 25\n    },\n    triggered: false,\n    handler: function dragGesture(ev, inst) {\n      // current gesture isnt drag, but dragged is true\n      // this means an other gesture is busy. now call dragend\n      if(ionic.Gestures.detection.current.name != this.name && this.triggered) {\n        inst.trigger(this.name +'end', ev);\n        this.triggered = false;\n        return;\n      }\n\n      // max touches\n      if(inst.options.drag_max_touches > 0 &&\n          ev.touches.length > inst.options.drag_max_touches) {\n            return;\n          }\n\n      switch(ev.eventType) {\n        case ionic.Gestures.EVENT_START:\n          this.triggered = false;\n          break;\n\n        case ionic.Gestures.EVENT_MOVE:\n          // when the distance we moved is too small we skip this gesture\n          // or we can be already in dragging\n          if(ev.distance < inst.options.drag_min_distance &&\n              ionic.Gestures.detection.current.name != this.name) {\n                return;\n              }\n\n          // we are dragging!\n          if(ionic.Gestures.detection.current.name != this.name) {\n            ionic.Gestures.detection.current.name = this.name;\n            if (inst.options.correct_for_drag_min_distance) {\n              // When a drag is triggered, set the event center to drag_min_distance pixels from the original event center.\n              // Without this correction, the dragged distance would jumpstart at drag_min_distance pixels instead of at 0.\n              // It might be useful to save the original start point somewhere\n              var factor = Math.abs(inst.options.drag_min_distance/ev.distance);\n              ionic.Gestures.detection.current.startEvent.center.pageX += ev.deltaX * factor;\n              ionic.Gestures.detection.current.startEvent.center.pageY += ev.deltaY * factor;\n\n              // recalculate event data using new start point\n              ev = ionic.Gestures.detection.extendEventData(ev);\n            }\n          }\n\n          // lock drag to axis?\n          if(ionic.Gestures.detection.current.lastEvent.drag_locked_to_axis || (inst.options.drag_lock_to_axis && inst.options.drag_lock_min_distance<=ev.distance)) {\n            ev.drag_locked_to_axis = true;\n          }\n          var last_direction = ionic.Gestures.detection.current.lastEvent.direction;\n          if(ev.drag_locked_to_axis && last_direction !== ev.direction) {\n            // keep direction on the axis that the drag gesture started on\n            if(ionic.Gestures.utils.isVertical(last_direction)) {\n              ev.direction = (ev.deltaY < 0) ? ionic.Gestures.DIRECTION_UP : ionic.Gestures.DIRECTION_DOWN;\n            }\n            else {\n              ev.direction = (ev.deltaX < 0) ? ionic.Gestures.DIRECTION_LEFT : ionic.Gestures.DIRECTION_RIGHT;\n            }\n          }\n\n          // first time, trigger dragstart event\n          if(!this.triggered) {\n            inst.trigger(this.name +'start', ev);\n            this.triggered = true;\n          }\n\n          // trigger normal event\n          inst.trigger(this.name, ev);\n\n          // direction event, like dragdown\n          inst.trigger(this.name + ev.direction, ev);\n\n          // block the browser events\n          if( (inst.options.drag_block_vertical && ionic.Gestures.utils.isVertical(ev.direction)) ||\n              (inst.options.drag_block_horizontal && !ionic.Gestures.utils.isVertical(ev.direction))) {\n                ev.preventDefault();\n              }\n          break;\n\n        case ionic.Gestures.EVENT_END:\n          // trigger dragend\n          if(this.triggered) {\n            inst.trigger(this.name +'end', ev);\n          }\n\n          this.triggered = false;\n          break;\n      }\n    }\n  };\n\n\n  /**\n   * Transform\n   * User want to scale or rotate with 2 fingers\n   * @events  transform, pinch, pinchin, pinchout, rotate\n   */\n  ionic.Gestures.gestures.Transform = {\n    name: 'transform',\n    index: 45,\n    defaults: {\n      // factor, no scale is 1, zoomin is to 0 and zoomout until higher then 1\n      transform_min_scale     : 0.01,\n      // rotation in degrees\n      transform_min_rotation  : 1,\n      // prevent default browser behavior when two touches are on the screen\n      // but it makes the element a blocking element\n      // when you are using the transform gesture, it is a good practice to set this true\n      transform_always_block  : false\n    },\n    triggered: false,\n    handler: function transformGesture(ev, inst) {\n      // current gesture isnt drag, but dragged is true\n      // this means an other gesture is busy. now call dragend\n      if(ionic.Gestures.detection.current.name != this.name && this.triggered) {\n        inst.trigger(this.name +'end', ev);\n        this.triggered = false;\n        return;\n      }\n\n      // atleast multitouch\n      if(ev.touches.length < 2) {\n        return;\n      }\n\n      // prevent default when two fingers are on the screen\n      if(inst.options.transform_always_block) {\n        ev.preventDefault();\n      }\n\n      switch(ev.eventType) {\n        case ionic.Gestures.EVENT_START:\n          this.triggered = false;\n          break;\n\n        case ionic.Gestures.EVENT_MOVE:\n          var scale_threshold = Math.abs(1-ev.scale);\n          var rotation_threshold = Math.abs(ev.rotation);\n\n          // when the distance we moved is too small we skip this gesture\n          // or we can be already in dragging\n          if(scale_threshold < inst.options.transform_min_scale &&\n              rotation_threshold < inst.options.transform_min_rotation) {\n                return;\n              }\n\n          // we are transforming!\n          ionic.Gestures.detection.current.name = this.name;\n\n          // first time, trigger dragstart event\n          if(!this.triggered) {\n            inst.trigger(this.name +'start', ev);\n            this.triggered = true;\n          }\n\n          inst.trigger(this.name, ev); // basic transform event\n\n          // trigger rotate event\n          if(rotation_threshold > inst.options.transform_min_rotation) {\n            inst.trigger('rotate', ev);\n          }\n\n          // trigger pinch event\n          if(scale_threshold > inst.options.transform_min_scale) {\n            inst.trigger('pinch', ev);\n            inst.trigger('pinch'+ ((ev.scale < 1) ? 'in' : 'out'), ev);\n          }\n          break;\n\n        case ionic.Gestures.EVENT_END:\n          // trigger dragend\n          if(this.triggered) {\n            inst.trigger(this.name +'end', ev);\n          }\n\n          this.triggered = false;\n          break;\n      }\n    }\n  };\n\n\n  /**\n   * Touch\n   * Called as first, tells the user has touched the screen\n   * @events  touch\n   */\n  ionic.Gestures.gestures.Touch = {\n    name: 'touch',\n    index: -Infinity,\n    defaults: {\n      // call preventDefault at touchstart, and makes the element blocking by\n      // disabling the scrolling of the page, but it improves gestures like\n      // transforming and dragging.\n      // be careful with using this, it can be very annoying for users to be stuck\n      // on the page\n      prevent_default: false,\n\n      // disable mouse events, so only touch (or pen!) input triggers events\n      prevent_mouseevents: false\n    },\n    handler: function touchGesture(ev, inst) {\n      if(inst.options.prevent_mouseevents && ev.pointerType == ionic.Gestures.POINTER_MOUSE) {\n        ev.stopDetect();\n        return;\n      }\n\n      if(inst.options.prevent_default) {\n        ev.preventDefault();\n      }\n\n      if(ev.eventType ==  ionic.Gestures.EVENT_START) {\n        inst.trigger(this.name, ev);\n      }\n    }\n  };\n\n\n  /**\n   * Release\n   * Called as last, tells the user has released the screen\n   * @events  release\n   */\n  ionic.Gestures.gestures.Release = {\n    name: 'release',\n    index: Infinity,\n    handler: function releaseGesture(ev, inst) {\n      if(ev.eventType ==  ionic.Gestures.EVENT_END) {\n        inst.trigger(this.name, ev);\n      }\n    }\n  };\n})(window.ionic);\n;\n(function(ionic) {\n\n  ionic.Platform = {\n    detect: function() {\n      var platforms = [];\n\n      this._checkPlatforms(platforms);\n\n      for(var i = 0; i < platforms.length; i++) {\n        document.body.classList.add('platform-' + platforms[i]);\n      }\n\n    },\n    _checkPlatforms: function(platforms) {\n      if(this.isCordova()) {\n        platforms.push('cordova');\n      }\n      if(this.isIOS7()) {\n        platforms.push('ios7');\n      }\n    },\n\n    // Check if we are running in Cordova, which will have\n    // window.device available.\n    isCordova: function() {\n      return (window.cordova || window.PhoneGap || window.phonegap);\n      //&& /^file:\\/{3}[^\\/]/i.test(window.location.href) \n      //&& /ios|iphone|ipod|ipad|android/i.test(navigator.userAgent);\n    },\n    isIOS7: function() {\n      if(!window.device) {\n        return false;\n      }\n      return parseFloat(window.device.version) >= 7.0;\n    }\n  };\n\n  ionic.Platform.detect();\n})(window.ionic);\n;\n(function(window, document, ionic) {\n  'use strict';\n\n  // From the man himself, Mr. Paul Irish.\n  // The requestAnimationFrame polyfill\n  window.rAF = (function(){\n    return  window.requestAnimationFrame       ||\n            window.webkitRequestAnimationFrame ||\n            window.mozRequestAnimationFrame    ||\n            function( callback ){\n              window.setTimeout(callback, 1000 / 60);\n            };\n  })();\n\n  // Ionic CSS polyfills\n  ionic.CSS = {};\n  \n  (function() {\n    var d = document.createElement('div');\n    var keys = ['webkitTransform', 'transform', '-webkit-transform', 'webkit-transform',\n                '-moz-transform', 'moz-transform', 'MozTransform', 'mozTransform'];\n\n    for(var i = 0; i < keys.length; i++) {\n      if(d.style[keys[i]] !== undefined) {\n        ionic.CSS.TRANSFORM = keys[i];\n        break;\n      }\n    }\n  })();\n\n\n  // polyfill use to simulate native \"tap\"\n  function inputTapPolyfill(ele, e) {\n    if(ele.type === \"radio\" || ele.type === \"checkbox\") {\n      //ele.checked = !ele.checked;\n    } else if(ele.type === \"submit\" || ele.type === \"button\") {\n      ele.click();\n    } else {\n      ele.focus();\n    }\n    e.stopPropagation();\n    e.preventDefault();\n    return false;\n  }\n\n  function tapPolyfill(e) {\n    // if the source event wasn't from a touch event then don't use this polyfill\n    if(!e.gesture || e.gesture.pointerType !== \"touch\" || !e.gesture.srcEvent) return;\n\n    // An internal Ionic indicator for angular directives that contain\n    // elements that normally need poly behavior, but are already processed\n    // (like the radio directive that has a radio button in it, but handles\n    // the tap stuff itself). This is in contrast to preventDefault which will\n    // mess up other operations like change events and such\n    if(e.alreadyHandled) {\n      return;\n    }\n\n    e = e.gesture.srcEvent; // evaluate the actual source event, not the created event by gestures.js\n\n    var ele = e.target;\n\n    while(ele) {\n      if( ele.tagName === \"INPUT\" || ele.tagName === \"TEXTAREA\" || ele.tagName === \"SELECT\" ) {\n        return inputTapPolyfill(ele, e);\n      } else if( ele.tagName === \"LABEL\" ) {\n        if(ele.control) {\n          return inputTapPolyfill(ele.control, e);\n        }\n      }\n      /* Let ng-click handle this\n      else if( ele.tagName === \"A\" || ele.tagName === \"BUTTON\" ) {\n        ele.click();\n        e.stopPropagation();\n        e.preventDefault();\n        return false;\n      }\n      */\n      ele = ele.parentElement;\n    }\n\n    // they didn't tap one of the above elements\n    // if the currently active element is an input, and they tapped outside\n    // of the current input, then unset its focus (blur) so the keyboard goes away\n    var activeElement = document.activeElement;\n    if(activeElement && (activeElement.tagName === \"INPUT\" || activeElement.tagName === \"TEXTAREA\" || activeElement.tagName === \"SELECT\")) {\n      activeElement.blur();\n      e.stopPropagation();\n      e.preventDefault();\n      return false;\n    }\n  }\n\n  // global tap event listener polyfill for HTML elements that were \"tapped\" by the user\n  ionic.on(\"tap\", tapPolyfill, window);\n\n})(this, document, ionic);\n;\n(function(ionic) {\n  \n  /**\n   * Various utilities used throughout Ionic\n   *\n   * Some of these are adopted from underscore.js and backbone.js, both also MIT licensed.\n   */\n  ionic.Utils = {\n\n    /**\n     * Return a function that will be called with the given context\n     */\n    proxy: function(func, context) {\n      var args = Array.prototype.slice.call(arguments, 2);\n      return function() {\n        return func.apply(context, args.concat(Array.prototype.slice.call(arguments)));\n      };\n    },\n\n    /**\n     * Only call a function once in the given interval.\n     * \n     * @param func {Function} the function to call\n     * @param wait {int} how long to wait before/after to allow function calls\n     * @param immediate {boolean} whether to call immediately or after the wait interval\n     */\n     debounce: function(func, wait, immediate) {\n      var timeout, args, context, timestamp, result;\n      return function() {\n        context = this;\n        args = arguments;\n        timestamp = new Date();\n        var later = function() {\n          var last = (new Date()) - timestamp;\n          if (last < wait) {\n            timeout = setTimeout(later, wait - last);\n          } else {\n            timeout = null;\n            if (!immediate) result = func.apply(context, args);\n          }\n        };\n        var callNow = immediate && !timeout;\n        if (!timeout) {\n          timeout = setTimeout(later, wait);\n        }\n        if (callNow) result = func.apply(context, args);\n        return result;\n      };\n    },\n\n    /**\n     * Throttle the given fun, only allowing it to be\n     * called at most every `wait` ms.\n     */\n    throttle: function(func, wait, options) {\n      var context, args, result;\n      var timeout = null;\n      var previous = 0;\n      options || (options = {});\n      var later = function() {\n        previous = options.leading === false ? 0 : Date.now();\n        timeout = null;\n        result = func.apply(context, args);\n      };\n      return function() {\n        var now = Date.now();\n        if (!previous && options.leading === false) previous = now;\n        var remaining = wait - (now - previous);\n        context = this;\n        args = arguments;\n        if (remaining <= 0) {\n          clearTimeout(timeout);\n          timeout = null;\n          previous = now;\n          result = func.apply(context, args);\n        } else if (!timeout && options.trailing !== false) {\n          timeout = setTimeout(later, remaining);\n        }\n        return result;\n      };\n    },\n     // Borrowed from Backbone.js's extend\n     // Helper function to correctly set up the prototype chain, for subclasses.\n     // Similar to `goog.inherits`, but uses a hash of prototype properties and\n     // class properties to be extended.\n    inherit: function(protoProps, staticProps) {\n      var parent = this;\n      var child;\n\n      // The constructor function for the new subclass is either defined by you\n      // (the \"constructor\" property in your `extend` definition), or defaulted\n      // by us to simply call the parent's constructor.\n      if (protoProps && protoProps.hasOwnProperty('constructor')) {\n        child = protoProps.constructor;\n      } else {\n        child = function(){ return parent.apply(this, arguments); };\n      }\n\n      // Add static properties to the constructor function, if supplied.\n      ionic.extend(child, parent, staticProps);\n\n      // Set the prototype chain to inherit from `parent`, without calling\n      // `parent`'s constructor function.\n      var Surrogate = function(){ this.constructor = child; };\n      Surrogate.prototype = parent.prototype;\n      child.prototype = new Surrogate;\n\n      // Add prototype properties (instance properties) to the subclass,\n      // if supplied.\n      if (protoProps) ionic.extend(child.prototype, protoProps);\n\n      // Set a convenience property in case the parent's prototype is needed\n      // later.\n      child.__super__ = parent.prototype;\n\n      return child;\n    },\n\n    // Extend adapted from Underscore.js\n    extend: function(obj) {\n       var args = Array.prototype.slice.call(arguments, 1);\n       for(var i = 0; i < args.length; i++) {\n         var source = args[i];\n         if (source) {\n           for (var prop in source) {\n             obj[prop] = source[prop];\n           }\n         }\n       }\n       return obj;\n    }\n  };\n\n  // Bind a few of the most useful functions to the ionic scope\n  ionic.inherit = ionic.Utils.inherit;\n  ionic.extend = ionic.Utils.extend;\n  ionic.throttle = ionic.Utils.throttle;\n  ionic.proxy = ionic.Utils.proxy;\n  ionic.debounce = ionic.Utils.debounce;\n\n})(window.ionic);\n;\n(function(ionic) {\n'use strict';\n  ionic.views.View = function() {\n    this.initialize.apply(this, arguments);\n  };\n\n  ionic.views.View.inherit = ionic.inherit;\n\n  ionic.extend(ionic.views.View.prototype, {\n    initialize: function() {}\n  });\n\n})(window.ionic);\n;\n/**\n * ionic.views.Scroll. Portions lovingly adapted from the great iScroll 5, which is\n * also MIT licensed.\n * iScroll v5.0.5 ~ (c) 2008-2013 Matteo Spinelli ~ http://cubiq.org/license\n *\n * Think of ionic.views.Scroll like a Javascript version of UIScrollView or any \n * scroll container in any UI library. You could just use -webkit-overflow-scrolling: touch,\n * but you lose control over scroll behavior that native developers have with things\n * like UIScrollView, and you don't get events after the finger stops touching the\n * device (after a flick, for example).\n *\n * Some people are afraid of using Javascript powered scrolling, but\n * with today's devices, Javascript is probably the best solution for\n * scrolling in hybrid apps. Someone's code is running somewhere, even on native, right?\n */\n(function(ionic) {\n'use strict';\n\n  // Some easing functions for animations\n  var EASING_FUNCTIONS = {\n    quadratic: 'cubic-bezier(0.25, 0.46, 0.45, 0.94)',\n\t\tcircular: 'cubic-bezier(0.1, 0.57, 0.1, 1)',\n    circular2: 'cubic-bezier(0.075, 0.82, 0.165, 1)',\n\n    bounce: 'cubic-bezier(.02,.69,.67,1)',\n\n    // It closes like a high-end toilet seat. Fast, then nice and slow.\n    // Thanks to our @xtheglobe for that.\n    toiletSeat: 'cubic-bezier(0.05, 0.60, 0.05, 0.60)'\n  };\n\n  ionic.views.Scroll = ionic.views.View.inherit({\n\n    initialize: function(opts) {\n      var _this = this;\n\n      // Extend the options with our defaults\n      opts = ionic.Utils.extend({\n        decelerationRate: ionic.views.Scroll.prototype.DECEL_RATE_NORMAL,\n        dragThreshold: 10,\n        \n        // Resistance when scrolling too far up or down\n        rubberBandResistance: 2,\n\n        // Scroll event names. These are custom so can be configured\n        scrollEventName: 'momentumScrolled',\n        scrollEndEventName: 'momentumScrollEnd',\n\n        hasPullToRefresh: true,\n\n        // Whether to disable overflow rubber banding when content is small\n        // enough to fit in the viewport (i.e. doesn't need scrolling)\n        disableNonOverflowRubberBand: true,\n\n        // Called as the refresher is opened, an amount is passed\n        onRefreshOpening: function() {},\n        // Called when let go and is refreshing\n        onRefresh: function() {},\n        refreshEasing: EASING_FUNCTIONS.bounce,\n        // ms transition time\n        refreshEasingTime: 400,\n        refreshOpeningInterval: 100,\n\n        // How frequently to fire scroll events in the case of \n        // a flick or momentum scroll where the finger is no longer\n        // touching the screen. If your event handler is a performance\n        // hog, change this millisecond value to cut down on the frequency\n        // of events triggered in those instances.\n        inertialEventInterval: 50,\n\n        // How quickly to scroll with a mouse wheel. 20 is a good default\n        mouseWheelSpeed: 20,\n\n        // Invert the mouse wheel? This makes sense on new Macbooks, but\n        // nowhere else.\n        invertWheel: false,\n\n        // Enable vertical scrolling\n        isVerticalEnabled: true,\n\n        // Enable horizontal scrolling\n        isHorizontalEnabled: false,\n\n        // The easing function to use for bouncing up or down on the bounds\n        // of the scrolling area\n        bounceEasing: EASING_FUNCTIONS.bounce,\n\n        //how long to take when bouncing back in a rubber band\n        bounceTime: 600 \n      }, opts);\n\n      ionic.extend(this, opts);\n\n      this.el = opts.el;\n\n      this.y = 0;\n      this.x = 0;\n\n      // Create a throttled pull to refresh \"opening\" function\n      // which will get called as the refresh \"opens\" from drag\n      var refreshOpening = _this.onRefreshOpening;\n      _this.onRefreshOpening = ionic.throttle(function(ratio) {\n        refreshOpening && refreshOpening(ratio);\n      }, 100);\n\n      // Listen for drag and release events\n      ionic.onGesture('drag', function(e) {\n        _this._handleDrag(e);\n      }, this.el);\n      ionic.onGesture('release', function(e) {\n        _this._handleEndDrag(e);\n      }, this.el);\n      ionic.on('mousewheel', function(e) {\n        _this._wheel(e);\n      }, this.el);\n      ionic.on('DOMMouseScroll', function(e) {\n        _this._wheel(e);\n      }, this.el);\n      ionic.on(this.scrollEndEventName, function(e) {\n        _this._onScrollEnd(e);\n      }, this.el);\n      ionic.on('webkitTransitionEnd', function(e) {\n        _this._onTransitionEnd(e);\n      });\n    },\n\n    // Called by user to tell the scroll view to stop pull to refresh\n    doneRefreshing: function() {\n      var _this = this;\n\n      this._scrollTo(0, 0, this.refreshEasingTime, this.refreshEasing);\n\n      this._isHoldingRefresh = false;\n\n      // Hide the refresher\n      setTimeout(function() {\n        _this._refresher.style.display = 'none';\n        _this._isRefresherHidden = true;\n      }, this.refreshEasingTime);\n    },\n\n    /**\n     * Scroll to the given X and Y point, taking \n     * the given amount of time, with the given\n     * easing function defined as a CSS3 timing function.\n     *\n     * Note: the x and y values will be converted to negative offsets due to\n     * the way scrolling works internally.\n     *\n     * @param {float} the x position to scroll to (CURRENTLY NOT SUPPORTED!)\n     * @param {float} the y position to scroll to\n     * @param {float} the time to take scrolling to the new position\n     * @param {easing} the animation function to use for easing\n     */\n    scrollTo: function(x, y, time, easing) {\n      this._scrollTo(-x, -y, time, easing);\n    },\n\n    _scrollTo: function(x, y, time, easing) {\n      var _this = this;\n\n      time = time || 0;\n\n      var start = Date.now();\n\n      easing = easing || 'cubic-bezier(0.1, 0.57, 0.1, 1)';\n      var easingValues = easing.replace('cubic-bezier(', '').replace(')', '').split(',');\n      easingValues = [parseFloat(easingValues[0]), parseFloat(easingValues[1]), parseFloat(easingValues[2]), parseFloat(easingValues[3])];\n\n      var cubicBezierFunction = ionic.Animator.getCubicBezier(easingValues[0], easingValues[1], easingValues[2], easingValues[3], time);\n\n      var ox = this.x, oy = this.y;\n\n\n      var el = this.el;\n\n      if(x !== null) {\n        this.x = x;\n      } else {\n        x = this.x;\n      }\n      if(y !== null) {\n        this.y = y;\n      } else {\n        y = this.y;\n      }\n\n      if(ox == x && oy == y) {\n        time = 0;\n      }\n\n      var dx = ox - x;\n      var dy = oy - y;\n\n      el.offsetHeight;\n      el.style.webkitTransitionTimingFunction = easing;\n      el.style.webkitTransitionDuration = time;\n      el.style[ionic.CSS.TRANSFORM] = 'translate3d(' + x + 'px,' + y + 'px, 0)';\n\n      // Stop any other momentum event callbacks\n      clearTimeout(this._momentumStepTimeout);\n\n      // Start triggering events as the element scrolls from inertia.\n      // This is important because we need to receive scroll events\n      // even after a \"flick\" and adjust, etc.\n      if(time > 0) {\n        this._momentumStepTimeout = setTimeout(function eventNotify() {\n          // Calculate where in the animation process we might be\n          var diff = Math.min(time, Math.abs(Date.now() - start));\n\n          // How far along in time have we moved\n          var timeRatio = diff / time;\n\n          // Interpolate the transition values, using the same\n          // cubic bezier animation function used in the transition.\n          var bx = ox - dx * cubicBezierFunction(timeRatio);\n          var by = oy - dy * cubicBezierFunction(timeRatio);\n\n          _this.didScroll && _this.didScroll({\n            target: _this.el,\n            scrollLeft: -bx,\n            scrollTop: -by\n          });\n          ionic.trigger(_this.scrollEventName, {\n            target: _this.el,\n            scrollLeft: -bx,\n            scrollTop: -by\n          });\n\n          if(_this.isDragging) {\n            _this._momentumStepTimeout = setTimeout(eventNotify, _this.inertialEventInterval);\n          }\n        }, this.inertialEventInterval);\n      } else {\n        this.didScroll && this.didScroll({\n          target: this.el,\n          scrollLeft: -this.x,\n          scrollTop: -this.y\n        });\n        ionic.trigger(this.scrollEventName, {\n          target: this.el,\n          scrollLeft: -this.x,\n          scrollTop: -this.y\n        });\n      }\n    },\n\n    /**\n     * Check if the current scroll bounds needs to be brought back to the min/max\n     * allowable given the total scrollable area.\n     */\n    needsWrapping: function() {\n      var _this = this;\n\n      var totalWidth = this.el.scrollWidth;\n      var totalHeight = this.el.scrollHeight;\n      var parentWidth = this.el.parentNode.offsetWidth;\n      var parentHeight = this.el.parentNode.offsetHeight;\n\n      var maxX = Math.min(0, (-totalWidth + parentWidth));\n      var maxY = Math.min(0, (-totalHeight + parentHeight));\n\n      if (this.isHorizontalEnabled && (this.x > 0 || this.x < maxX)) {\n        return true;\n      }\n      \n      if (this.isVerticalEnabled && (this.y > 0 || this.y < maxY)) {\n        return true;\n      }\n\n      return false;\n    },\n\n    /**\n     * If the scroll position is outside the current bounds,\n     * animate it back.\n     */\n    wrapScrollPosition: function(transitionTime) {\n      var _this = this;\n\n      var totalWidth = _this.el.scrollWidth;\n      var totalHeight = _this.el.scrollHeight;\n      var parentWidth = _this.el.parentNode.offsetWidth;\n      var parentHeight = _this.el.parentNode.offsetHeight;\n\n      var maxX = Math.min(0, (-totalWidth + parentWidth));\n      var maxY = Math.min(0, (-totalHeight + parentHeight));\n\n        //this._execEvent('scrollEnd');\n      var x = _this.x, y = _this.y;\n\n      if (!_this.isHorizontalEnabled || _this.x > 0) {\n        x = 0;\n      } else if ( _this.x < maxX) {\n        x = maxX;\n      }\n\n      if (!_this.isVerticalEnabled || _this.y > 0) {\n        y = 0;\n      } else if (_this.y < maxY) {\n        y = maxY;\n      }\n\n      // No change\n      if (x == _this.x && y == _this.y) {\n        return false;\n      }\n      _this._scrollTo(x, y, transitionTime || 0, _this.bounceEasing);\n    \n      return true;\n    },\n\n    _wheel: function(e) {\n      var wheelDeltaX, wheelDeltaY,\n        newX, newY,\n        that = this;\n\n      var totalWidth = this.el.scrollWidth;\n      var totalHeight = this.el.scrollHeight;\n      var parentWidth = this.el.parentNode.offsetWidth;\n      var parentHeight = this.el.parentNode.offsetHeight;\n\n      var maxX = Math.min(0, (-totalWidth + parentWidth));\n      var maxY = Math.min(0, (-totalHeight + parentHeight));\n\n      // Execute the scrollEnd event after 400ms the wheel stopped scrolling\n      clearTimeout(this.wheelTimeout);\n      this.wheelTimeout = setTimeout(function () {\n        that._doneScrolling();\n      }, 400);\n\n      e.preventDefault();\n\n      if('wheelDeltaX' in e) {\n        wheelDeltaX = e.wheelDeltaX / 120;\n        wheelDeltaY = e.wheelDeltaY / 120;\n      } else if ('wheelDelta' in e) {\n        wheelDeltaX = wheelDeltaY = e.wheelDelta / 120;\n      } else if ('detail' in e) {\n        wheelDeltaX = wheelDeltaY = -e.detail / 3;\n      } else {\n        return;\n      }\n\n      wheelDeltaX *= this.mouseWheelSpeed;\n      wheelDeltaY *= this.mouseWheelSpeed;\n\n      if(!this.isVerticalEnabled) {\n        wheelDeltaX = wheelDeltaY;\n        wheelDeltaY = 0;\n      }\n\n      newX = this.x + (this.isHorizontalEnabled ? wheelDeltaX * (this.invertWheel ? -1 : 1) : 0);\n      newY = this.y + (this.isVerticalEnabled ? wheelDeltaY * (this.invertWheel ? -1 : 1) : 0);\n\n      if(newX > 0) {\n        newX = 0;\n      } else if (newX < maxX) {\n        newX = maxX;\n      }\n\n      if(newY > 0) {\n        newY = 0;\n      } else if (newY < maxY) {\n        newY = maxY;\n      }\n\n      this._scrollTo(newX, newY, 0);\n    },\n\n    _getMomentum: function (current, start, time, lowerMargin, wrapperSize) {\n      var distance = current - start,\n        speed = Math.abs(distance) / time,\n        destination,\n        duration,\n        deceleration = 0.0006;\n\n      // Calculate the final desination\n      destination = current + ( speed * speed ) / ( 2 * deceleration ) * ( distance < 0 ? -1 : 1 );\n      duration = speed / deceleration;\n\n      if(speed === 0) {\n        return {\n          destination: current,\n          duration: 0\n        };\n      }\n\n      // Check if the final destination needs to be rubber banded\n      if ( destination < lowerMargin ) {\n        // We have dragged too far down, snap back to the maximum\n        destination = wrapperSize ? lowerMargin - ( wrapperSize / 2.5 * ( speed / 8 ) ) : lowerMargin;\n        distance = Math.abs(destination - current);\n        duration = distance / speed;\n      } else if ( destination > 0 ) {\n\n        // We have dragged too far up, snap back to 0\n        destination = wrapperSize ? wrapperSize / 2.5 * ( speed / 8 ) : 0;\n        distance = Math.abs(current) + destination;\n        duration = distance / speed;\n      }\n\n      return {\n        destination: Math.round(destination),\n        duration: duration\n      };\n    },\n\n    _onTransitionEnd: function(e) {\n      var _this = this;\n\n      if (e.target != this.el) {\n        return;\n      }\n\n      if(this._isHoldingRefresh) {\n        return;\n      }\n\n      var needsWrapping = this.needsWrapping();\n\n      // Triggered to end scroll, once the final animation has ended\n      if(needsWrapping && this._didEndScroll) {\n        this._didEndScroll = false;\n        this._doneScrolling();\n      } else if(!needsWrapping) {\n        this._didEndScroll = false;\n        this._doneScrolling();\n      }\n\n      this.el.style.webkitTransitionDuration = '0';\n\n      window.rAF(function() {\n        if(_this.wrapScrollPosition(_this.bounceTime)) {\n          _this._didEndScroll = true;\n        }\n      });\n    },\n\n    _onScrollEnd: function() {\n      this.isDragging = false;\n      this._drag = null;\n      this.el.classList.remove('scroll-scrolling');\n\n      this.el.style.webkitTransitionDuration = '0';\n\n      clearTimeout(this._momentumStepTimeout)\n    },\n\n\n    _initDrag: function() {\n      this._onScrollEnd();\n      this._isStopped = false;\n    },\n\n\n    /**\n     * Initialize a drag by grabbing the content area to drag, and any other\n     * info we might need for the dragging.\n     */\n    _startDrag: function(e) {\n      var offsetX, content;\n\n      this._initDrag();\n\n      var scrollLeft = parseFloat(this.el.style.webkitTransform.replace('translate3d(', '').split(',')[0]) || 0;\n      var scrollTop = parseFloat(this.el.style.webkitTransform.replace('translate3d(', '').split(',')[1]) || 0;\n\n      var totalWidth = this.el.scrollWidth;\n      var totalHeight = this.el.scrollHeight;\n      var parentWidth = this.el.parentNode.offsetWidth;\n      var parentHeight = this.el.parentNode.offsetHeight;\n\n      this.x = scrollLeft;\n      this.y = scrollTop;\n\n      // Grab the refresher element if using Pull to Refresh\n      if(this.hasPullToRefresh) {\n        this._refresher = document.querySelector('.scroll-refresher');\n\n        if(this._refresher) {\n          this._refresherHeight = parseFloat(this._refresher.firstElementChild.offsetHeight) || 100;\n          // We always start the refresher hidden\n          if(this.y < 0) {\n            this._isRefresherHidden = true;\n            this._refresher.style.display = 'none';\n          } else {\n            this._isRefresherHidden = false;\n            this._didTriggerRefresh = false;\n            this._refresher.style.display = 'block';\n          }\n\n          this._isHoldingRefresh = false;\n\n          if(this._refresher) {\n            this._refresher.classList.remove('scroll-refreshing');\n          }\n        }\n      }\n\n      this._drag = {\n        direction: 'v',\n        pointX: e.gesture.touches[0].pageX,\n        pointY: e.gesture.touches[0].pageY,\n        startX: scrollLeft,\n        startY: scrollTop,\n        resist: 1,\n        startTime: Date.now()\n      };\n\n      // If the viewport is too small and we aren't using pull to refresh,\n      // don't rubber band the drag\n      if(this.disableNonOverflowRubberBand === true && !this._refresher) {\n        var maxX = Math.min(0, (-totalWidth + parentWidth));\n        var maxY = Math.min(0, (-totalHeight + parentHeight));\n\n        // Check if we even have enough content to scroll, if not, don't start the drag\n        if((this.isHorizontalEnabled && maxX == 0) || (this.isVerticalEnabled && maxY == 0)) {\n          this._drag.noRubberBand = true;\n        }\n      }\n    },\n\n    /**\n     * Process the drag event to move the item to the left or right.\n     *\n     * This function needs to be as fast as possible to make sure scrolling\n     * performance is high.\n     */\n    _handleDrag: function(e) {\n      var _this = this;\n\n      var content;\n\n      // The drag stopped already, don't process this one\n      if(_this._isStopped) {\n        _this._initDrag();\n        return;\n      }\n\n      // We really aren't dragging\n      if(!_this._drag) {\n        _this._startDrag(e);\n        if(!_this._drag) { return; }\n      }\n\n      // Stop any default events during the drag\n      e.preventDefault();\n\n      var px = e.gesture.touches[0].pageX;\n      var py = e.gesture.touches[0].pageY;\n\n      var deltaX = px - _this._drag.pointX;\n      var deltaY = py - _this._drag.pointY;\n\n      _this._drag.pointX = px;\n      _this._drag.pointY = py;\n\n      // Check if we should start dragging. Check if we've dragged past the threshold.\n      if(!_this.isDragging && \n          ((Math.abs(e.gesture.deltaY) > _this.dragThreshold) ||\n          (Math.abs(e.gesture.deltaX) > _this.dragThreshold))) {\n        _this.isDragging = true;\n      }\n\n      if(_this.isDragging) {\n        var drag = _this._drag;\n\n        // Request an animation frame to batch DOM reads/writes\n        window.rAF(function() {\n          // We are dragging, grab the current content height\n\n          var totalWidth = _this.el.scrollWidth;\n          var totalHeight = _this.el.scrollHeight;\n          var parentWidth = _this.el.parentNode.offsetWidth;\n          var parentHeight = _this.el.parentNode.offsetHeight;\n          var maxX = Math.min(0, (-totalWidth + parentWidth));\n          var maxY = Math.min(0, (-totalHeight + parentHeight));\n\n          // Grab current timestamp to keep our speend, etc.\n          // calculations in a window\n          var timestamp = Date.now();\n\n          // Calculate the new Y point for the container\n          // TODO: Only enable certain axes\n          var newX = _this.x + deltaX;\n          var newY = _this.y + deltaY;\n\n          if(drag.noRubberBand === true) {\n            if(newY > 0) {\n              newY = 0;\n            } else if(newY < maxY) {\n              newY = maxY;\n            }\n            if(newX > 0) {\n              newX = 0;\n            } else if(newX < maxX) {\n              newX = maxX;\n            }\n          } else {\n            // Check if the dragging is beyond the bottom or top\n            if(newY > 0 || (-newY + parentHeight) > totalHeight) {\n              newY = _this.y + deltaY / _this.rubberBandResistance;\n            }\n          }\n\n          if(!_this.isHorizontalEnabled) {\n            newX = 0;\n          }\n          if(!_this.isVerticalEnabled) {\n            newY = 0;\n          }\n\n          if(_this._refresher && newY > 0) {\n            // We are pulling to refresh, so update the refresher\n            if(_this._isRefresherHidden) {\n              // Show it only in a drag and if we haven't showed it yet\n              _this._refresher.style.display = 'block';\n              _this._isRefresherHidden = false;\n            }\n\n            if(newY > _this._refresherHeight && !_this._isHoldingRefresh) {\n              _this._isHoldingRefresh = true;\n              // Trigger refresh holding event here\n            } else {\n              // Trigger refresh open amount\n              var ratio = Math.min(1, newY / _this._refresherHeight);\n              _this.onRefreshOpening(ratio);\n            }\n\n            // Update the new translated Y point of the container\n            _this.el.style[ionic.CSS.TRANSFORM] = 'translate3d(' + newX + 'px,' + newY + 'px, 0)';\n          } else {\n\n            _this._isHoldingRefresh = false;\n\n            // Hide the refresher\n            if(_this.refresher && !_this._isRefresherHidden) {\n              _this._refresher.style.display = 'none';\n              _this._isRefresherHidden = true;\n            }\n            // Update the new translated Y point of the container\n            _this.el.style[ionic.CSS.TRANSFORM] = 'translate3d(' + newX + 'px,' + newY + 'px, 0)';\n          }\n\n          // Store the last points\n          _this.x = newX;\n          _this.y = newY;\n\n          // Check if we need to reset the drag initial states if we've\n          // been dragging for a bit\n          if(timestamp - drag.startTime > 300) {\n            drag.startTime = timestamp;\n            drag.startX = _this.x;\n            drag.startY = _this.y;\n          }\n\n          _this.didScroll && _this.didScroll({\n            target: _this.el,\n            scrollLeft: -newX,\n            scrollTop: -newY\n          });\n\n          // Trigger a scroll event\n          ionic.trigger(_this.scrollEventName, {\n            target: _this.el,\n            scrollLeft: -newX,\n            scrollTop: -newY\n          });\n        });\n      }\n    },\n\n\n\n    _handleEndDrag: function(e) {\n      // We didn't have a drag, so just init and leave\n      if(!this._drag) {\n        this._initDrag();\n        return;\n      }\n\n      // Set a flag in case we don't cleanup completely after the\n      // drag animation so we can cleanup the next time a drag starts\n      this._isStopped = true;\n\n      // Animate to the finishing point\n      this._animateToStop(e);\n\n    },\n\n\n    // Find the stopping point given the current velocity and acceleration rate, and\n    // animate to that position\n    _animateToStop: function(e) {\n      var _this = this;\n      window.rAF(function() {\n\n        var drag = _this._drag;\n\n        // Calculate the viewport height and the height of the content\n        var totalWidth = _this.el.scrollWidth;\n        var totalHeight = _this.el.scrollHeight;\n\n        // The parent bounding box helps us figure max/min scroll amounts\n        var parentWidth = _this.el.parentNode.offsetWidth;\n        var parentHeight = _this.el.parentNode.offsetHeight;\n\n        // Calculate how long we've been dragging for, with a max of 300ms\n        var duration = Date.now() - _this._drag.startTime;\n        var time = 0;\n        var easing = '';\n\n\n        if(_this._refresher && _this.y > 0) {\n          // Pull to refresh\n\n          if(Math.ceil(_this.y) >= _this._refresherHeight) {\n            // REFRESH\n            _this._refresher.classList.add('scroll-refreshing');\n            //_this._refresher.style.height = firstChildHeight + 'px';\n            _this._scrollTo(0, _this._refresherHeight, 100, _this.refreshEasing);\n            if(!_this._didTriggerRefresh) {\n              _this.onRefresh && _this.onRefresh();\n              _this._didTriggerRefresh = true;\n            }\n          } else {\n            _this._refresher.classList.add('scroll-refreshing');\n            //_this._refresher.style.height = 0 + 'px';\n            _this._scrollTo(0, 0, _this.refreshEasingTime, _this.refreshEasing);\n          }\n          return;\n        }\n\n        var newX = Math.round(_this.x);\n        var newY = Math.round(_this.y);\n\n        _this._scrollTo(newX, newY);\n\n        // Check if we just snap back to bounds\n        if(_this.wrapScrollPosition(_this.bounceTime)) {\n          return;\n        }\n\n        // If the duration is within reasonable bounds, enable momentum scrolling so we\n        // can \"slide\" to a finishing point\n        if(duration < 300) {\n          var momentumX = _this._getMomentum(_this.x, drag.startX, duration, parentWidth - totalWidth, parentWidth);\n          var momentumY = _this._getMomentum(_this.y, drag.startY, duration, parentHeight - totalHeight, parentHeight);\n          //var newX = momentumX.destination;\n          newX = momentumX.destination;\n          newY = momentumY.destination;\n\n          // Calculate the longest required time for the momentum animation and\n          // use that.\n          time = Math.max(momentumX.duration, momentumY.duration);\n        }\n        \n        // If we've moved, we will need to scroll\n        if(newX != _this.x || newY != _this.y) {\n          // If the end position is out of bounds, change the function we use for easing\n          // to get a different animation for the rubber banding\n          if ( newX > 0 || newX < (-totalWidth + parentWidth) || newY > 0 || newY < (-totalHeight + parentHeight)) {\n            easing = EASING_FUNCTIONS.bounce;\n          }\n\n          _this._scrollTo(newX, newY, time, easing);\n        } else {\n          // We are done\n          _this._doneScrolling();\n        }\n      });\n    },\n\n    /**\n     * Trigger a done scrolling event.\n     */\n    _doneScrolling: function() {\n      this.didStopScrolling && this.didStopScrolling({\n        target: this.el,\n        scrollLeft: this.x,\n        scrollTop: this.y\n      });\n      ionic.trigger(this.scrollEndEventName, {\n        target: this.el,\n        scrollLeft: this.x,\n        scrollTop: this.y\n      });\n    }\n  }, {\n    DECEL_RATE_NORMAL: 0.998,\n    DECEL_RATE_FAST: 0.99,\n    DECEL_RATE_SLOW: 0.996,\n  });\n\n})(ionic);\n;\n(function(ionic) {\n'use strict';\n  /**\n   * An ActionSheet is the slide up menu popularized on iOS.\n   *\n   * You see it all over iOS apps, where it offers a set of options \n   * triggered after an action.\n   */\n  ionic.views.ActionSheet = ionic.views.View.inherit({\n    initialize: function(opts) {\n      this.el = opts.el;\n    },\n    show: function() {\n      // Force a reflow so the animation will actually run\n      this.el.offsetWidth;\n\n      this.el.classList.add('active');\n    },\n    hide: function() {\n      // Force a reflow so the animation will actually run\n      this.el.offsetWidth;\n      this.el.classList.remove('active');\n    }\n  });\n\n})(ionic);\n;\n(function(ionic) {\n'use strict';\n\n  ionic.views.HeaderBar = ionic.views.View.inherit({\n    initialize: function(opts) {\n      this.el = opts.el;\n\n      ionic.extend(this, {\n        alignTitle: 'center'\n      }, opts);\n\n      this.align();\n    },\n\n    /**\n     * Align the title text given the buttons in the header\n     * so that the header text size is maximized and aligned\n     * correctly as long as possible.\n     */\n    align: function() {\n      var _this = this;\n\n      window.rAF(ionic.proxy(function() {\n        var i, c, childSize, childStyle;\n        var children = this.el.children;\n        var childNodes = this.el.childNodes;\n        var styles = window.getComputedStyle(this.el, null);\n\n        // Get the padding of the header for calculations\n        var paddingLeft = parseFloat(styles['paddingLeft']);\n        var paddingRight = parseFloat(styles['paddingRight']);\n\n        // Get the full width of the header\n        var headerWidth = this.el.offsetWidth;\n\n        // Find the title element\n        var title = this.el.querySelector('.title');\n        if(!title) {\n          return;\n        }\n      \n        var leftWidth = 0;\n        var rightWidth = 0;\n        var titlePos = Array.prototype.indexOf.call(this.el.childNodes, title);\n\n        // Compute how wide the left children are\n        for(i = 0; i < titlePos; i++) {\n          childSize = null;\n          c = childNodes[i];\n          if(c.nodeType == 3) {\n            childSize = ionic.DomUtil.getTextBounds(c);\n          } else if(c.nodeType == 1) {\n            childSize = c.getBoundingClientRect();\n          }\n          if(childSize) {\n            leftWidth += childSize.width;\n          }\n        }\n\n        // Compute how wide the right children are\n        for(i = titlePos + 1; i < childNodes.length; i++) {\n          childSize = null;\n          c = childNodes[i];\n          if(c.nodeType == 3) {\n            childSize = ionic.DomUtil.getTextBounds(c);\n          } else if(c.nodeType == 1) {\n            childSize = c.getBoundingClientRect();\n          }\n          if(childSize) {\n            rightWidth += childSize.width;\n          }\n        }\n\n        var margin = Math.max(leftWidth, rightWidth) + 10;\n\n        // Size and align the header title based on the sizes of the left and\n        // right children, and the desired alignment mode\n        if(this.alignTitle == 'center') {\n          title.style.left = margin + 'px';\n          title.style.right = margin + 'px';\n\n          if(title.offsetWidth < title.scrollWidth) {\n            title.style.textAlign = 'left';\n            title.style.right = (rightWidth + 5) + 'px';\n          } else {\n            title.style.textAlign = 'center';\n          }\n        } else if(this.alignTitle == 'left') {\n          title.style.textAlign = 'left';\n          title.style.left = (leftWidth + 15) + 'px';\n        } else if(this.alignTitle == 'right') {\n          title.style.textAlign = 'right';\n          title.style.right = (rightWidth + 15) + 'px';\n        }\n      }, this));\n    }\n  });\n\n})(ionic);\n;\n(function(ionic) {\n'use strict';\n\n  var ITEM_CLASS = 'item';\n  var ITEM_CONTENT_CLASS = 'item-content';\n  var ITEM_SLIDING_CLASS = 'item-sliding';\n  var ITEM_OPTIONS_CLASS = 'item-options';\n  var ITEM_PLACEHOLDER_CLASS = 'item-placeholder';\n  var ITEM_REORDERING_CLASS = 'item-reordering';\n  var ITEM_DRAG_CLASS = 'item-drag';\n\n  var DragOp = function() {};\n  DragOp.prototype = {\n    start: function(e) {\n    },\n    drag: function(e) {\n    },\n    end: function(e) {\n    }\n  };\n\n\n\n  var SlideDrag = function(opts) {\n    this.dragThresholdX = opts.dragThresholdX || 10;\n    this.el = opts.el;\n  };\n\n  SlideDrag.prototype = new DragOp();\n  SlideDrag.prototype.start = function(e) {\n    var content, buttons, offsetX, buttonsWidth;\n\n    if(e.target.classList.contains(ITEM_CONTENT_CLASS)) {\n      content = e.target;\n    } else if(e.target.classList.contains(ITEM_CLASS)) {\n      content = e.target.querySelector('.' + ITEM_CONTENT_CLASS);\n    }\n\n    // If we don't have a content area as one of our children (or ourselves), skip\n    if(!content) {\n      return;\n    }\n\n    // Make sure we aren't animating as we slide\n    content.classList.remove(ITEM_SLIDING_CLASS);\n\n    // Grab the starting X point for the item (for example, so we can tell whether it is open or closed to start)\n    offsetX = parseFloat(content.style.webkitTransform.replace('translate3d(', '').split(',')[0]) || 0;\n\n    // Grab the buttons\n    buttons = content.parentNode.querySelector('.' + ITEM_OPTIONS_CLASS);\n    if(!buttons) {\n      return;\n    }\n      \n    buttonsWidth = buttons.offsetWidth;\n\n    this._currentDrag = {\n      buttonsWidth: buttonsWidth,\n      content: content,\n      startOffsetX: offsetX\n    };\n  };\n\n  SlideDrag.prototype.drag = function(e) {\n    var _this = this, buttonsWidth;\n\n    window.rAF(function() {\n      // We really aren't dragging\n      if(!_this._currentDrag) {\n        return;\n      }\n\n      // Check if we should start dragging. Check if we've dragged past the threshold,\n      // or we are starting from the open state.\n      if(!_this._isDragging &&\n          ((Math.abs(e.gesture.deltaX) > _this.dragThresholdX) ||\n          (Math.abs(_this._currentDrag.startOffsetX) > 0)))\n      {\n        _this._isDragging = true;\n      }\n\n      if(_this._isDragging) {\n        buttonsWidth = _this._currentDrag.buttonsWidth;\n\n        // Grab the new X point, capping it at zero\n        var newX = Math.min(0, _this._currentDrag.startOffsetX + e.gesture.deltaX);\n\n        // If the new X position is past the buttons, we need to slow down the drag (rubber band style)\n        if(newX < -buttonsWidth) {\n          // Calculate the new X position, capped at the top of the buttons\n          newX = Math.min(-buttonsWidth, -buttonsWidth + (((e.gesture.deltaX + buttonsWidth) * 0.4)));\n        }\n\n        _this._currentDrag.content.style.webkitTransform = 'translate3d(' + newX + 'px, 0, 0)';\n      }\n    });\n  };\n\n  SlideDrag.prototype.end = function(e, doneCallback) {\n    var _this = this;\n\n    // There is no drag, just end immediately\n    if(!this._currentDrag) {\n      doneCallback && doneCallback();\n      return;\n    }\n\n    // If we are currently dragging, we want to snap back into place\n    // The final resting point X will be the width of the exposed buttons\n    var restingPoint = -this._currentDrag.buttonsWidth;\n\n    // Check if the drag didn't clear the buttons mid-point \n    // and we aren't moving fast enough to swipe open\n    if(e.gesture.deltaX > -(this._currentDrag.buttonsWidth/2)) {\n\n      // If we are going left but too slow, or going right, go back to resting\n      if(e.gesture.direction == \"left\" && Math.abs(e.gesture.velocityX) < 0.3) {\n        restingPoint = 0;\n      } else if(e.gesture.direction == \"right\") {\n        restingPoint = 0;\n      }\n\n    }\n\n    var content = this._currentDrag.content;\n\n    var onRestingAnimationEnd = function(e) {\n      if(e.propertyName == '-webkit-transform') {\n        content.classList.remove(ITEM_SLIDING_CLASS);\n      }\n      e.target.removeEventListener('webkitTransitionEnd', onRestingAnimationEnd);\n    };\n\n    window.rAF(function() {\n      var currentX = parseFloat(_this._currentDrag.content.style.webkitTransform.replace('translate3d(', '').split(',')[0]) || 0;\n      if(currentX !== restingPoint) {\n        _this._currentDrag.content.classList.add(ITEM_SLIDING_CLASS);\n        _this._currentDrag.content.addEventListener('webkitTransitionEnd', onRestingAnimationEnd);\n      }\n      _this._currentDrag.content.style.webkitTransform = 'translate3d(' + restingPoint + 'px, 0, 0)';\n\n      // Kill the current drag\n      _this._currentDrag = null;\n\n\n      // We are done, notify caller\n      doneCallback && doneCallback();\n    });\n  };\n\n  var ReorderDrag = function(opts) {\n    this.dragThresholdY = opts.dragThresholdY || 0;\n    this.el = opts.el;\n  };\n\n  ReorderDrag.prototype = new DragOp();\n\n  ReorderDrag.prototype.start = function(e) {\n    var content;\n\n\n    // Grab the starting Y point for the item\n    var offsetY = this.el.offsetTop;//parseFloat(this.el.style.webkitTransform.replace('translate3d(', '').split(',')[1]) || 0;\n\n    var placeholder = this.el.cloneNode(true);\n\n    placeholder.classList.add(ITEM_PLACEHOLDER_CLASS);\n\n    this.el.parentNode.insertBefore(placeholder, this.el);\n\n    this.el.classList.add(ITEM_REORDERING_CLASS);\n\n\n    this._currentDrag = {\n      startOffsetTop: offsetY,\n      placeholder: placeholder\n    };\n  };\n\n  ReorderDrag.prototype.drag = function(e) {\n    var _this = this;\n\n    window.rAF(function() {\n      // We really aren't dragging\n      if(!_this._currentDrag) {\n        return;\n      }\n\n      // Check if we should start dragging. Check if we've dragged past the threshold,\n      // or we are starting from the open state.\n      if(!_this._isDragging && Math.abs(e.gesture.deltaY) > _this.dragThresholdY) {\n        _this._isDragging = true;\n      }\n\n      if(_this._isDragging) {\n        var newY = _this._currentDrag.startOffsetTop + e.gesture.deltaY;\n        \n        _this.el.style.top = newY + 'px';\n\n        _this._currentDrag.currentY = newY;\n\n        _this._reorderItems();\n      }\n    });\n  };\n\n  // When an item is dragged, we need to reorder any items for sorting purposes\n  ReorderDrag.prototype._reorderItems = function() {\n    var placeholder = this._currentDrag.placeholder;\n    var siblings = Array.prototype.slice.call(this._currentDrag.placeholder.parentNode.children);\n    \n    // Remove the floating element from the child search list\n    siblings.splice(siblings.indexOf(this.el), 1);\n\n    var index = siblings.indexOf(this._currentDrag.placeholder);\n    var topSibling = siblings[Math.max(0, index - 1)];\n    var bottomSibling = siblings[Math.min(siblings.length, index+1)];\n    var thisOffsetTop = this._currentDrag.currentY;// + this._currentDrag.startOffsetTop;\n\n    if(topSibling && (thisOffsetTop < topSibling.offsetTop + topSibling.offsetHeight/2)) {\n      ionic.DomUtil.swapNodes(this._currentDrag.placeholder, topSibling);\n      return index - 1;\n    } else if(bottomSibling && thisOffsetTop > (bottomSibling.offsetTop + bottomSibling.offsetHeight/2)) {\n      ionic.DomUtil.swapNodes(bottomSibling, this._currentDrag.placeholder);\n      return index + 1;\n    }\n  };\n\n  ReorderDrag.prototype.end = function(e, doneCallback) {\n    if(!this._currentDrag) {\n      doneCallback && doneCallback();\n      return;\n    }\n\n    var placeholder = this._currentDrag.placeholder;\n\n    // Reposition the element\n    this.el.classList.remove(ITEM_REORDERING_CLASS);\n    this.el.style.top = 0;\n\n    var finalPosition = ionic.DomUtil.getChildIndex(placeholder);\n    placeholder.parentNode.insertBefore(this.el, placeholder);\n    placeholder.parentNode.removeChild(placeholder);\n\n    this._currentDrag = null;\n    doneCallback && doneCallback();\n  };\n\n\n\n  /**\n   * The ListView handles a list of items. It will process drag animations, edit mode,\n   * and other operations that are common on mobile lists or table views.\n   */\n  ionic.views.ListView = ionic.views.Scroll.inherit({\n    initialize: function(opts) {\n      var _this = this;\n\n      opts = ionic.extend({\n        virtualRemoveThreshold: -200,\n        virtualAddThreshold: 200\n      }, opts);\n\n      ionic.extend(this, opts);\n\n      if(!this.itemHeight && this.listEl) {\n        this.itemHeight = this.listEl.children[0] && parseInt(this.listEl.children[0].style.height);\n      }\n\n      ionic.views.ListView.__super__.initialize.call(this, opts);\n\n      this.onRefresh = opts.onRefresh || function() {};\n      this.onRefreshOpening = opts.onRefreshOpening || function() {};\n      this.onRefreshHolding = opts.onRefreshHolding || function() {};\n\n      window.ionic.onGesture('touch', function(e) {\n        _this._handleTouch(e);\n      }, this.el);\n\n      window.ionic.onGesture('release', function(e) {\n        _this._handleTouchRelease(e);\n      }, this.el);\n        \n      // Start the drag states\n      this._initDrag();\n    },\n    /**\n     * Called to tell the list to stop refreshing. This is useful\n     * if you are refreshing the list and are done with refreshing.\n     */\n    stopRefreshing: function() {\n      var refresher = this.el.querySelector('.list-refresher');\n      refresher.style.height = '0px';\n    },\n\n    /**\n     * If we scrolled and have virtual mode enabled, compute the window\n     * of active elements in order to figure out the viewport to render.\n     */\n    didScroll: function(e) {\n      if(this.isVirtual) {\n        var itemHeight = this.itemHeight;\n\n        // TODO: This would be inaccurate if we are windowed\n        var totalItems = this.listEl.children.length;\n\n        // Grab the total height of the list\n        var scrollHeight = e.target.scrollHeight;\n\n        // Get the viewport height\n        var viewportHeight = this.el.parentNode.offsetHeight;\n\n        // scrollTop is the current scroll position\n        var scrollTop = e.scrollTop;\n\n        // High water is the pixel position of the first element to include (everything before\n        // that will be removed)\n        var highWater = Math.max(0, e.scrollTop + this.virtualRemoveThreshold);\n\n        // Low water is the pixel position of the last element to include (everything after\n        // that will be removed)\n        var lowWater = Math.min(scrollHeight, Math.abs(e.scrollTop) + viewportHeight + this.virtualAddThreshold);\n\n        // Compute how many items per viewport size can show\n        var itemsPerViewport = Math.floor((lowWater - highWater) / itemHeight);\n\n        // Get the first and last elements in the list based on how many can fit\n        // between the pixel range of lowWater and highWater\n        var first = parseInt(Math.abs(highWater / itemHeight));\n        var last = parseInt(Math.abs(lowWater / itemHeight));\n\n        // Get the items we need to remove\n        this._virtualItemsToRemove = Array.prototype.slice.call(this.listEl.children, 0, first);\n\n        // Grab the nodes we will be showing\n        var nodes = Array.prototype.slice.call(this.listEl.children, first, first + itemsPerViewport);\n\n        this.renderViewport && this.renderViewport(highWater, lowWater, first, last);\n      }\n    },\n\n    didStopScrolling: function(e) {\n      if(this.isVirtual) {\n        for(var i = 0; i < this._virtualItemsToRemove.length; i++) {\n          var el = this._virtualItemsToRemove[i];\n          //el.parentNode.removeChild(el);\n          this.didHideItem && this.didHideItem(i);\n        }\n        // Once scrolling stops, check if we need to remove old items\n\n      }\n    },\n\n    _initDrag: function() {\n      ionic.views.ListView.__super__._initDrag.call(this);\n\n      //this._isDragging = false;\n      this._dragOp = null;\n    },\n\n    // Return the list item from the given target\n    _getItem: function(target) {\n      while(target) {\n        if(target.classList.contains(ITEM_CLASS)) {\n          return target;\n        }\n        target = target.parentNode;\n      }\n      return null;\n    },\n\n\n    _startDrag: function(e) {\n      var _this = this;\n\n      this._isDragging = false;\n\n      // Check if this is a reorder drag\n      if(ionic.DomUtil.getParentOrSelfWithClass(e.target, ITEM_DRAG_CLASS) && (e.gesture.direction == 'up' || e.gesture.direction == 'down')) {\n        var item = this._getItem(e.target);\n\n        if(item) {\n          this._dragOp = new ReorderDrag({ el: item });\n          this._dragOp.start(e);\n          e.preventDefault();\n          return;\n        }\n      }\n\n      // Or check if this is a swipe to the side drag\n      else if((e.gesture.direction == 'left' || e.gesture.direction == 'right') && Math.abs(e.gesture.deltaX) > 5) {\n        this._dragOp = new SlideDrag({ el: this.el });\n        this._dragOp.start(e);\n        e.preventDefault();\n        return;\n      }\n\n      // We aren't handling it, so pass it up the chain\n      ionic.views.ListView.__super__._startDrag.call(this, e);\n    },\n\n\n    _handleEndDrag: function(e) {\n      var _this = this;\n      \n      if(!this._dragOp) {\n        ionic.views.ListView.__super__._handleEndDrag.call(this, e);\n        return;\n      }\n\n      this._dragOp.end(e, function() {\n        _this._initDrag();\n      });\n    },\n\n    /**\n     * Process the drag event to move the item to the left or right.\n     */\n    _handleDrag: function(e) {\n      var _this = this, content, buttons;\n          \n      // If the user has a touch timeout to highlight an element, clear it if we\n      // get sufficient draggage\n      if(Math.abs(e.gesture.deltaX) > 10 || Math.abs(e.gesture.deltaY) > 10) {\n        clearTimeout(this._touchTimeout);\n      }\n\n      clearTimeout(this._touchTimeout);\n      // If we get a drag event, make sure we aren't in another drag, then check if we should\n      // start one\n      if(!this.isDragging && !this._dragOp) {\n        this._startDrag(e);\n      }\n\n      // No drag still, pass it up\n      if(!this._dragOp) { \n        ionic.views.ListView.__super__._handleDrag.call(this, e);\n        return;\n      }\n\n      e.preventDefault();\n      this._dragOp.drag(e);\n    },\n\n    /**\n     * Handle the touch event to show the active state on an item if necessary.\n     */\n    _handleTouch: function(e) {\n      var _this = this;\n\n      var item = ionic.DomUtil.getParentOrSelfWithClass(e.target, ITEM_CLASS);\n      if(!item) { return; }\n\n      this._touchTimeout = setTimeout(function() {\n        var items = _this.el.querySelectorAll('.item');\n        for(var i = 0, l = items.length; i < l; i++) {\n          items[i].classList.remove('active');\n        }\n        item.classList.add('active');\n      }, 250);\n    },\n\n    /**\n     * Handle the release event to remove the active state on an item if necessary.\n     */\n    _handleTouchRelease: function(e) {\n      var _this = this;\n\n      // Cancel touch timeout\n      clearTimeout(this._touchTimeout);\n      var items = _this.el.querySelectorAll('.item');\n      for(var i = 0, l = items.length; i < l; i++) {\n        items[i].classList.remove('active');\n      }\n    }\n  });\n\n})(ionic);\n;\n(function(ionic) {\n'use strict';\n  /**\n   * An ActionSheet is the slide up menu popularized on iOS.\n   *\n   * You see it all over iOS apps, where it offers a set of options \n   * triggered after an action.\n   */\n  ionic.views.Loading = ionic.views.View.inherit({\n    initialize: function(opts) {\n      var _this = this;\n\n      this.el = opts.el;\n\n      this.maxWidth = opts.maxWidth || 200;\n\n      this._loadingBox = this.el.querySelector('.loading');\n    },\n    show: function() {\n      var _this = this;\n\n      if(this._loadingBox) {\n        var lb = _this._loadingBox;\n\n        var width = Math.min(_this.maxWidth, Math.max(window.outerWidth - 40, lb.offsetWidth));\n\n        lb.style.width = width;\n\n        lb.style.marginLeft = (-lb.offsetWidth) / 2 + 'px';\n        lb.style.marginTop = (-lb.offsetHeight) / 2 + 'px';\n\n        _this.el.classList.add('active');\n      }\n    },\n    hide: function() {\n      // Force a reflow so the animation will actually run\n      this.el.offsetWidth;\n\n      this.el.classList.remove('active');\n    }\n  });\n\n})(ionic);\n;\n(function(ionic) {\n'use strict';\n\n  ionic.views.Modal = ionic.views.View.inherit({\n    initialize: function(opts) {\n      opts = ionic.extend({\n        focusFirstInput: true,\n        unfocusOnHide: true\n      }, opts);\n\n      ionic.extend(this, opts);\n\n      this.el = opts.el;\n    },\n    show: function() {\n      this.el.classList.add('active');\n\n      if(this.focusFirstInput) {\n        var input = this.el.querySelector('input, textarea');\n        input && input.focus && input.focus();\n      }\n    },\n    hide: function() {\n      this.el.classList.remove('active');\n\n      // Unfocus all elements\n      if(this.unfocusOnHide) {\n        var inputs = this.el.querySelectorAll('input, textarea');\n        for(var i = 0; i < inputs.length; i++) {\n          inputs[i].blur && inputs[i].blur();\n        }\n      }\n    }\n  });\n\n})(ionic);\n;\n(function(ionic) {\n'use strict';\n\n  ionic.views.NavBar = ionic.views.View.inherit({\n    initialize: function(opts) {\n      this.el = opts.el;\n\n      this._titleEl = this.el.querySelector('.title');\n\n      if(opts.hidden) {\n        this.hide();\n      }\n    },\n    hide: function() {\n      this.el.classList.add('hidden');\n    },\n    show: function() {\n      this.el.classList.remove('hidden');\n    },\n    shouldGoBack: function() {},\n\n    setTitle: function(title) {\n      if(!this._titleEl) {\n        return;\n      }\n      this._titleEl.innerHTML = title;\n    },\n\n    showBackButton: function(shouldShow) {\n      var _this = this;\n\n      if(!this._currentBackButton) {\n        var back = document.createElement('a');\n        back.className = 'button back';\n        back.innerHTML = 'Back';\n\n        this._currentBackButton = back;\n        this._currentBackButton.onclick = function(event) {\n          _this.shouldGoBack && _this.shouldGoBack();\n        };\n      }\n\n      if(shouldShow && !this._currentBackButton.parentNode) {\n        // Prepend the back button\n        this.el.insertBefore(this._currentBackButton, this.el.firstChild);\n      } else if(!shouldShow && this._currentBackButton.parentNode) {\n        // Remove the back button if it's there\n        this._currentBackButton.parentNode.removeChild(this._currentBackButton);\n      }\n    }\n  });\n\n})(ionic);\n;\n(function(ionic) {\n'use strict';\n  /**\n   * An ActionSheet is the slide up menu popularized on iOS.\n   *\n   * You see it all over iOS apps, where it offers a set of options \n   * triggered after an action.\n   */\n  ionic.views.Popup = ionic.views.View.inherit({\n    initialize: function(opts) {\n      var _this = this;\n\n      this.el = opts.el;\n    },\n\n    setTitle: function(title) {\n      var titleEl = el.querySelector('.popup-title');\n      if(titleEl) {\n        titleEl.innerHTML = title;\n      }\n    },\n    alert: function(message) {\n      var _this = this;\n\n      window.rAF(function() {\n        _this.setTitle(message);\n        _this.el.classList.add('active');\n      });\n    },\n    hide: function() {\n      // Force a reflow so the animation will actually run\n      this.el.offsetWidth;\n\n      this.el.classList.remove('active');\n    }\n  });\n\n})(ionic);\n;\n(function(ionic) {\n'use strict';\n\n  /**\n   * The side menu view handles one of the side menu's in a Side Menu Controller\n   * configuration.\n   * It takes a DOM reference to that side menu element.\n   */\n  ionic.views.SideMenu = ionic.views.View.inherit({\n    initialize: function(opts) {\n      this.el = opts.el;\n      this.width = opts.width;\n      this.isEnabled = opts.isEnabled || true;\n    },\n\n    getFullWidth: function() {\n      return this.width;\n    },\n    setIsEnabled: function(isEnabled) {\n      this.isEnabled = isEnabled;\n    },\n    bringUp: function() {\n      this.el.style.zIndex = 0;\n    },\n    pushDown: function() {\n      this.el.style.zIndex = -1;\n    }\n  });\n\n  ionic.views.SideMenuContent = ionic.views.View.inherit({\n    initialize: function(opts) {\n      var _this = this;\n\n      ionic.extend(this, {\n        animationClass: 'menu-animated',\n        onDrag: function(e) {},\n        onEndDrag: function(e) {},\n      }, opts);\n\n      ionic.onGesture('drag', ionic.proxy(this._onDrag, this), this.el);\n      ionic.onGesture('release', ionic.proxy(this._onEndDrag, this), this.el);\n    },\n    _onDrag: function(e) {\n      this.onDrag && this.onDrag(e);\n    },\n    _onEndDrag: function(e) {\n      this.onEndDrag && this.onEndDrag(e);\n    },\n    disableAnimation: function() {\n      this.el.classList.remove(this.animationClass);\n    },\n    enableAnimation: function() {\n      this.el.classList.add(this.animationClass);\n    },\n    getTranslateX: function() {\n      return parseFloat(this.el.style.webkitTransform.replace('translate3d(', '').split(',')[0]);\n    },\n    setTranslateX: function(x) {\n      this.el.style.webkitTransform = 'translate3d(' + x + 'px, 0, 0)';\n    }\n  });\n\n})(ionic);\n;\n/**\n * The SlideBox is a swipeable, slidable, slideshowable box. Think of any image gallery\n * or iOS \"dot\" pager gallery, or maybe a carousel.\n *\n * Each screen fills the full width and height of the viewport, and screens can\n * be swiped between, or set to automatically transition.\n */\n(function(ionic) {\n'use strict';\n\n  ionic.views.SlideBox = ionic.views.View.inherit({\n    initialize: function(opts) {\n      var _this = this;\n\n      this.el = opts.el;\n      this.pager = this.el.querySelector('.slide-box-pager');\n\n      // The drag threshold is the pixel delta that will trigger a drag (to \n      // avoid accidental dragging)\n      this.dragThresholdX = opts.dragThresholdX || 10;\n      // The velocity threshold is a velocity of drag that indicates a \"swipe\". This\n      // number is taken from hammer.js's calculations\n      this.velocityXThreshold = opts.velocityXThreshold || 0.3;\n\n      // Initialize the slide index to the first page and update the pager\n      this.slideIndex = 0;\n      this._updatePager();\n\n      // Listen for drag and release events\n      window.ionic.onGesture('drag', function(e) {\n        _this._handleDrag(e);\n      }, this.el);\n      window.ionic.onGesture('release', function(e) {\n        _this._handleEndDrag(e);\n      }, this.el);\n    },\n\n    /**\n     * Tell the pager to update itself if content is added or\n     * removed. \n     */\n    update: function() {\n      this._updatePager();\n    },\n\n    prependSlide: function(el) {\n      var content = this.el.firstElementChild;\n      if(!content) { return; }\n\n      var slideWidth = content.offsetWidth;\n      var offsetX = parseFloat(content.style.webkitTransform.replace('translate3d(', '').split(',')[0]) || 0;\n      var newOffsetX = Math.min(0, offsetX - slideWidth);\n          \n      content.insertBefore(el, content.firstChild);\n\n      content.classList.remove('slide-box-animating');\n      content.style.webkitTransform = 'translate3d(' + newOffsetX + 'px, 0, 0)';\n\n      this._prependPagerIcon();\n      this.slideIndex = (this.slideIndex + 1) % content.children.length;\n      this._updatePager();\n    },\n\n    appendSlide: function(el) {\n      var content = this.el.firstElementChild;\n      if(!content) { return; }\n\n      content.classList.remove('slide-box-animating');\n      content.appendChild(el);\n\n      this._appendPagerIcon();\n      this._updatePager();\n    },\n\n    removeSlide: function(index) {\n      var content = this.el.firstElementChild;\n      if(!content) { return; }\n\n      var items = this.el.firstElementChild;\n      items.removeChild(items.firstElementChild);\n\n      var slideWidth = content.offsetWidth;\n      var offsetX = parseFloat(content.style.webkitTransform.replace('translate3d(', '').split(',')[0]) || 0;\n      var newOffsetX = Math.min(0, offsetX + slideWidth);\n          \n      content.classList.remove('slide-box-animating');\n      content.style.webkitTransform = 'translate3d(' + newOffsetX + 'px, 0, 0)';\n\n      this._removePagerIcon();\n      this.slideIndex = Math.max(0, (this.slideIndex - 1) % content.children.length);\n      this._updatePager();\n    },\n\n    /**\n     * Slide to the given slide index.\n     *\n     * @param {int} the index of the slide to animate to.\n     */\n    slideToSlide: function(index) {\n      var content = this.el.firstElementChild;\n      if(!content) {\n        return;\n      }\n\n      // Get the width of one slide\n      var slideWidth = content.offsetWidth;\n\n      // Calculate the new offsetX position which is just\n      // N slides to the left, where N is the given index\n      var offsetX = index * slideWidth;\n\n      // Calculate the max X position we'd allow based on how many slides\n      // there are.\n      var maxX = Math.max(0, content.children.length - 1) * slideWidth;\n\n      // Bounds the offset X position in the range maxX >= offsetX >= 0\n      offsetX = offsetX < 0 ? 0 : offsetX > maxX ? maxX : offsetX;\n\n      // Animate and slide the slides over\n      content.classList.add('slide-box-animating');\n      content.style.webkitTransform = 'translate3d(' + -offsetX + 'px, 0, 0)';\n\n      // Update the slide index\n      this.slideIndex = Math.ceil(offsetX / slideWidth);\n\n      this._updatePager();\n    },\n\n    /**\n     * Get the currently set slide index. This method\n     * is updated before any transitions run, so the\n     * value could be early.\n     *\n     * @return {int} the current slide index\n     */\n    getSlideIndex: function() {\n      return this.slideIndex;\n    },\n\n    _appendPagerIcon: function() {\n      if(!this.pager || !this.pager.children.length) { return; }\n\n      var newPagerChild = this.pager.children[0].cloneNode();\n      this.pager.appendChild(newPagerChild);\n    },\n\n    _prependPagerIcon: function() {\n      if(!this.pager || !this.pager.children.length) { return; }\n\n      var newPagerChild = this.pager.children[0].cloneNode();\n      this.pager.insertBefore(newPagerChild, this.pager.firstChild);\n    },\n\n    _removePagerIcon: function() {\n      if(!this.pager || !this.pager.children.length) { return; }\n\n      this.pager.removeChild(this.pager.firstElementChild);\n    },\n\n    /**\n     * If we have a pager, update the active page when the current slide\n     * changes.\n     */\n    _updatePager: function() {\n      if(!this.pager) {\n        return;\n      }\n\n      var numPagerChildren = this.pager.children.length;\n      if(!numPagerChildren) {\n        // No children to update\n        return;\n      }\n\n      // Update the active state of the pager icons\n      for(var i = 0, j = this.pager.children.length; i < j; i++) {\n        if(i == this.slideIndex) {\n          this.pager.children[i].classList.add('active');\n        } else {\n          this.pager.children[i].classList.remove('active');\n        }\n      }\n    },\n\n    _initDrag: function() {\n      this._isDragging = false;\n      this._drag = null;\n    },\n\n    _handleEndDrag: function(e) {\n      var _this = this,\n          finalOffsetX, content, ratio, slideWidth, totalWidth, offsetX;\n\n      window.rAF(function() {\n      \n        // We didn't have a drag, so just init and leave\n        if(!_this._drag) {\n          _this._initDrag();\n          return;\n        }\n\n        // We did have a drag, so we need to snap to the correct spot\n\n        // Grab the content layer\n        content = _this._drag.content;\n\n        // Enable transition duration\n        content.classList.add('slide-box-animating');\n\n        // Grab the current offset X position\n        offsetX = parseFloat(content.style.webkitTransform.replace('translate3d(', '').split(',')[0]) || 0;\n\n        // Calculate how wide a single slide is, and their total width\n        slideWidth = content.offsetWidth;\n        totalWidth = content.offsetWidth * content.children.length;\n\n        // Calculate how far in this slide we've dragged\n        ratio = (offsetX % slideWidth) / slideWidth;\n\n        if(ratio >= 0) {\n          // Anything greater than zero is too far left, this is an extreme case\n          // TODO: Do we need this anymore?\n          finalOffsetX = 0;\n        } else if(ratio >= -0.5) {\n          // We are less than half-way through a drag\n          // Sliiide to the left\n          finalOffsetX = Math.max(0, Math.floor(Math.abs(offsetX) / slideWidth) * slideWidth);\n        } else {\n          // We are more than half-way through a drag\n          // Sliiide to the right\n          finalOffsetX = Math.min(totalWidth - slideWidth, Math.ceil(Math.abs(offsetX) / slideWidth) * slideWidth);\n        }\n\n\n        if(e.gesture.velocityX > _this.velocityXThreshold) {\n          if(e.gesture.direction == 'left') {\n            _this.slideToSlide(_this.slideIndex + 1);\n          } else if(e.gesture.direction == 'right') {\n            _this.slideToSlide(_this.slideIndex - 1);\n          }\n        } else {\n          // Calculate the new slide index (or \"page\")\n          _this.slideIndex = Math.ceil(finalOffsetX / slideWidth);\n\n          // Negative offsetX to slide correctly\n          content.style.webkitTransform = 'translate3d(' + -finalOffsetX + 'px, 0, 0)';\n        }\n\n        _this._initDrag();\n      });\n    },\n\n    /**\n     * Initialize a drag by grabbing the content area to drag, and any other\n     * info we might need for the dragging.\n     */\n    _startDrag: function(e) {\n      var offsetX, content;\n\n      this._initDrag();\n\n      // Make sure to grab the element we will slide as our target\n      content = ionic.DomUtil.getParentOrSelfWithClass(e.target, 'slide-box-slides');\n      if(!content) {\n        return;\n      }\n\n      // Disable transitions during drag\n      content.classList.remove('slide-box-animating');\n\n      // Grab the starting X point for the item (for example, so we can tell whether it is open or closed to start)\n      offsetX = parseFloat(content.style.webkitTransform.replace('translate3d(', '').split(',')[0]) || 0;\n\n      this._drag = {\n        content: content,\n        startOffsetX: offsetX,\n        resist: 1\n      };\n    },\n\n    /**\n     * Process the drag event to move the item to the left or right.\n     */\n    _handleDrag: function(e) {\n      var _this = this;\n\n      window.rAF(function() {\n        var content;\n\n        // We really aren't dragging\n        if(!_this._drag) {\n          _this._startDrag(e);\n        }\n\n        // Sanity\n        if(!_this._drag) { return; }\n\n        // Stop any default events during the drag\n        e.preventDefault();\n\n        // Check if we should start dragging. Check if we've dragged past the threshold.\n        if(!_this._isDragging && (Math.abs(e.gesture.deltaX) > _this.dragThresholdX)) {\n          _this._isDragging = true;\n        }\n\n        if(_this._isDragging) {\n          content = _this._drag.content;\n\n          var newX = _this._drag.startOffsetX + (e.gesture.deltaX / _this._drag.resist);\n\n          var rightMostX = -(content.offsetWidth * Math.max(0, content.children.length - 1));\n\n          if(newX > 0) {\n            // We are dragging past the leftmost pane, rubber band\n            _this._drag.resist = (newX / content.offsetWidth) + 1.4;\n          } else if(newX < rightMostX) {\n            // Dragging past the rightmost pane, rubber band\n            //newX = Math.min(rightMostX, + (((e.gesture.deltaX + buttonsWidth) * 0.4)));\n            _this._drag.resist = (Math.abs(newX) / content.offsetWidth) - 0.6;\n          }\n\n          _this._drag.content.style.webkitTransform = 'translate3d(' + newX + 'px, 0, 0)';\n        }\n      });\n    }\n  });\n\n})(window.ionic);\n;\n(function(ionic) {\n'use strict';\n\nionic.views.TabBarItem = ionic.views.View.inherit({\n  initialize: function(el) {\n    this.el = el;\n\n    this._buildItem();\n  },\n  // Factory for creating an item from a given javascript object\n  create: function(itemData) {\n    var item = document.createElement('a');\n    item.className = 'tab-item';\n\n    // If there is an icon, add the icon element\n    if(itemData.icon) {\n      var icon = document.createElement('i');\n      icon.className = itemData.icon;\n      item.appendChild(icon);\n    }\n    item.appendChild(document.createTextNode(itemData.title));\n\n    return new ionic.views.TabBarItem(item);\n  },\n\n\n  _buildItem: function() {\n    var _this = this, child, children = Array.prototype.slice.call(this.el.children);\n\n    for(var i = 0, j = children.length; i < j; i++) {\n      child = children[i];\n\n      // Test if this is a \"i\" tag with icon in the class name\n      // TODO: This heuristic might not be sufficient\n      if(child.tagName.toLowerCase() == 'i' && /icon/.test(child.className)) {\n        this.icon = child.className;\n        break;\n      }\n\n    }\n\n    // Set the title to the text content of the tab.\n    this.title = this.el.innerText.trim();\n\n    this._tapHandler = function(e) {\n      _this.onTap && _this.onTap(e);\n    };\n\n    ionic.on('tap', this._tapHandler, this.el);\n  },\n  onTap: function(e) {\n  },\n\n  // Remove the event listeners from this object\n  destroy: function() {\n    ionic.off('tap', this._tapHandler, this.el);\n  },\n\n  getIcon: function() {\n    return this.icon;\n  },\n\n  getTitle: function() {\n    return this.title;\n  },\n\n  setSelected: function(isSelected) {\n    this.isSelected = isSelected;\n    if(isSelected) {\n      this.el.classList.add('active');\n    } else {\n      this.el.classList.remove('active');\n    }\n  }\n});\n\nionic.views.TabBar = ionic.views.View.inherit({\n  initialize: function(opts) {\n    this.el = opts.el;\n     \n    this.items = [];\n\n    this._buildItems();\n  },\n  // get all the items for the TabBar\n  getItems: function() {\n    return this.items;\n  },\n\n  // Add an item to the tab bar\n  addItem: function(item) {\n    // Create a new TabItem\n    var tabItem = ionic.views.TabBarItem.prototype.create(item);\n\n    this.appendItemElement(tabItem);\n\n    this.items.push(tabItem);\n    this._bindEventsOnItem(tabItem);\n  },\n\n  appendItemElement: function(item) {\n    if(!this.el) {\n      return;\n    }\n    this.el.appendChild(item.el);\n  },\n\n  // Remove an item from the tab bar\n  removeItem: function(index) {\n    var item = this.items[index];\n    if(!item) {\n      return;\n    }\n    item.onTap = undefined;\n    item.destroy();\n  },\n\n  _bindEventsOnItem: function(item) {\n    var _this = this;\n\n    if(!this._itemTapHandler) {\n      this._itemTapHandler = function(e) {\n        //_this.selectItem(this);\n        _this.trySelectItem(this);\n      };\n    }\n    item.onTap = this._itemTapHandler;\n  },\n\n  // Get the currently selected item\n  getSelectedItem: function() {\n    return this.selectedItem;\n  },\n\n  // Set the currently selected item by index\n  setSelectedItem: function(index) {\n    this.selectedItem = this.items[index];\n\n    // Deselect all\n    for(var i = 0, j = this.items.length; i < j; i += 1) {\n      this.items[i].setSelected(false);\n    }\n\n    // Select the new item\n    if(this.selectedItem) {\n      this.selectedItem.setSelected(true);\n      //this.onTabSelected && this.onTabSelected(this.selectedItem, index);\n    }\n  },\n\n  // Select the given item assuming we can find it in our\n  // item list.\n  selectItem: function(item) {\n    for(var i = 0, j = this.items.length; i < j; i += 1) {\n      if(this.items[i] == item) {\n        this.setSelectedItem(i);\n        return;\n      }\n    }\n  },\n\n  // Try to select a given item. This triggers an event such\n  // that the view controller managing this tab bar can decide\n  // whether to select the item or cancel it.\n  trySelectItem: function(item) {\n    for(var i = 0, j = this.items.length; i < j; i += 1) {\n      if(this.items[i] == item) {\n        this.tryTabSelect && this.tryTabSelect(i);\n        return;\n      }\n    }\n  },\n\n  // Build the initial items list from the given DOM node.\n  _buildItems: function() {\n\n    var item, items = Array.prototype.slice.call(this.el.children);\n\n    for(var i = 0, j = items.length; i < j; i += 1) {\n      item =  new ionic.views.TabBarItem(items[i]);\n      this.items[i] = item;\n      this._bindEventsOnItem(item);\n    }\n  \n    if(this.items.length > 0) {\n      this.selectedItem = this.items[0];\n    }\n\n  },\n\n  // Destroy this tab bar\n  destroy: function() {\n    for(var i = 0, j = this.items.length; i < j; i += 1) {\n      this.items[i].destroy();\n    }\n    this.items.length = 0;\n  }\n});\n\n})(window.ionic);\n;\n(function(ionic) {\n'use strict';\n\n  ionic.views.Toggle = ionic.views.View.inherit({\n    initialize: function(opts) {\n      this.el = opts.el;\n      this.checkbox = opts.checkbox;\n      this.handle = opts.handle;\n      this.openPercent = -1;\n    },\n\n    tap: function(e) {\n      this.val( !this.checkbox.checked );\n    },\n\n    drag: function(e) {\n      var slidePageLeft = this.checkbox.offsetLeft + (this.handle.offsetWidth / 2);\n      var slidePageRight = this.checkbox.offsetLeft + this.checkbox.offsetWidth - (this.handle.offsetWidth / 2);\n\n      if(e.pageX >= slidePageRight - 4) {\n        this.val(true);\n      } else if(e.pageX <= slidePageLeft) {\n        this.val(false);\n      } else {\n        this.setOpenPercent( Math.round( (1 - ((slidePageRight - e.pageX) / (slidePageRight - slidePageLeft) )) * 100) );\n      }\n    },\n\n    setOpenPercent: function(openPercent) {\n      // only make a change if the new open percent has changed\n      if(this.openPercent < 0 || (openPercent < (this.openPercent - 3) || openPercent > (this.openPercent + 3) ) ) {\n        this.openPercent = openPercent;\n\n        if(openPercent === 0) {\n          this.val(false);\n        } else if(openPercent === 100) {\n          this.val(true);\n        } else {\n          var openPixel = Math.round( (openPercent / 100) * this.checkbox.offsetWidth - (this.handle.offsetWidth) );\n          openPixel = (openPixel < 1 ? 0 : openPixel);\n          this.handle.style.webkitTransform = 'translate3d(' + openPixel + 'px,0,0)';\n        }\n      }\n    },\n\n    release: function(e) {\n      this.val( this.openPercent >= 50 );\n    },\n\n    val: function(value) {\n      if(value === true || value === false) {\n        if(this.handle.style.webkitTransform !== \"\") {\n          this.handle.style.webkitTransform = \"\";\n        }\n        this.checkbox.checked = value;\n        this.openPercent = (value ? 100 : 0);\n      }\n      return this.checkbox.checked;\n    }\n\n  });\n\n})(ionic);\n;\n(function(ionic) {\n'use strict';\n  ionic.controllers.ViewController = function(options) {\n    this.initialize.apply(this, arguments);\n  };\n\n  ionic.controllers.ViewController.inherit = ionic.inherit;\n\n  ionic.extend(ionic.controllers.ViewController.prototype, {\n    initialize: function() {},\n    // Destroy this view controller, including all child views\n    destroy: function() {\n    }\n  });\n\n})(window.ionic);\n;\n(function(ionic) {\n'use strict';\n\n/**\n * The NavController makes it easy to have a stack\n * of views or screens that can be pushed and popped\n * for a dynamic navigation flow. This API is modelled\n * off of the UINavigationController in iOS.\n *\n * The NavController can drive a nav bar to show a back button\n * if the stack can be poppped to go back to the last view, and\n * it will handle updating the title of the nav bar and processing animations.\n */\nionic.controllers.NavController = ionic.controllers.ViewController.inherit({\n  initialize: function(opts) {\n    var _this = this;\n\n    this.navBar = opts.navBar;\n    this.content = opts.content;\n    this.controllers = opts.controllers || [];\n\n    this._updateNavBar();\n\n    // TODO: Is this the best way?\n    this.navBar.shouldGoBack = function() {\n      _this.pop();\n    };\n  },\n\n  /**\n   * @return {array} the array of controllers on the stack.\n   */\n  getControllers: function() {\n    return this.controllers;\n  },\n\n  /**\n   * @return {object} the controller at the top of the stack.\n   */\n  getTopController: function() {\n    return this.controllers[this.controllers.length-1];\n  },\n\n  /**\n   * Push a new controller onto the navigation stack. The new controller\n   * will automatically become the new visible view.\n   *\n   * @param {object} controller the controller to push on the stack.\n   */\n  push: function(controller) {\n    var last = this.controllers[this.controllers.length - 1];\n\n    this.controllers.push(controller);\n\n    // Indicate we are switching controllers\n    var shouldSwitch = this.switchingController && this.switchingController(controller) || true;\n\n    // Return if navigation cancelled\n    if(shouldSwitch === false)\n      return;\n\n    // Actually switch the active controllers\n    if(last) {\n      last.isVisible = false;\n      last.visibilityChanged && last.visibilityChanged('push');\n    }\n\n    // Grab the top controller on the stack\n    var next = this.controllers[this.controllers.length - 1];\n\n    next.isVisible = true;\n    // Trigger visibility change, but send 'first' if this is the first page\n    next.visibilityChanged && next.visibilityChanged(last ? 'push' : 'first');\n\n    this._updateNavBar();\n\n    return controller;\n  },\n\n  /**\n   * Pop the top controller off the stack, and show the last one. This is the\n   * \"back\" operation.\n   *\n   * @return {object} the last popped controller\n   */\n  pop: function() {\n    var next, last;\n\n    // Make sure we keep one on the stack at all times\n    if(this.controllers.length < 2) {\n      return;\n    }\n\n    // Grab the controller behind the top one on the stack\n    last = this.controllers.pop();\n    if(last) {\n      last.isVisible = false;\n      last.visibilityChanged && last.visibilityChanged('pop');\n    }\n    \n    // Remove the old one\n    //last && last.detach();\n\n    next = this.controllers[this.controllers.length - 1];\n\n    // TODO: No DOM stuff here\n    //this.content.el.appendChild(next.el);\n    next.isVisible = true;\n    next.visibilityChanged && next.visibilityChanged('pop');\n\n    // Switch to it (TODO: Animate or such things here)\n\n    this._updateNavBar();\n\n    return last;\n  },\n\n  /**\n   * Show the NavBar (if any)\n   */\n  showNavBar: function() {\n    if(this.navBar) {\n      this.navBar.show();\n    }\n  },\n\n  /**\n   * Hide the NavBar (if any)\n   */\n  hideNavBar: function() {\n    if(this.navBar) {\n      this.navBar.hide();\n    }\n  },\n\n  // Update the nav bar after a push or pop\n  _updateNavBar: function() {\n    if(!this.getTopController() || !this.navBar) {\n      return;\n    }\n\n    this.navBar.setTitle(this.getTopController().title);\n\n    if(this.controllers.length > 1) {\n      this.navBar.showBackButton(true);\n    } else {\n      this.navBar.showBackButton(false);\n    }\n  }\n});\n\n})(window.ionic);\n;\n(function(ionic) {\n'use strict';\n\n  /**\n   * The SideMenuController is a controller with a left and/or right menu that\n   * can be slid out and toggled. Seen on many an app.\n   *\n   * The right or left menu can be disabled or not used at all, if desired.\n   */\n  ionic.controllers.SideMenuController = ionic.controllers.ViewController.inherit({\n    initialize: function(options) {\n      var self = this;\n\n      this.left = options.left;\n      this.right = options.right;\n      this.content = options.content;\n      this.dragThresholdX = options.dragThresholdX || 10;\n        \n      this._rightShowing = false;\n      this._leftShowing = false;\n      this._isDragging = false;\n\n      if(this.content) {\n        this.content.onDrag = function(e) {\n          self._handleDrag(e);\n        };\n\n        this.content.onEndDrag =function(e) {\n          self._endDrag(e);\n        };\n      }\n    },\n    /**\n     * Set the content view controller if not passed in the constructor options.\n     * \n     * @param {object} content\n     */\n    setContent: function(content) {\n      var self = this;\n\n      this.content = content;\n\n      this.content.onDrag = function(e) {\n        self._handleDrag(e);\n      };\n\n      this.content.endDrag = function(e) {\n        self._endDrag(e);\n      };\n    },\n\n    /**\n     * Toggle the left menu to open 100%\n     */\n    toggleLeft: function() {\n      var openAmount = this.getOpenAmount();\n      if(openAmount > 0) {\n        this.openPercentage(0);\n      } else {\n        this.openPercentage(100);\n      }\n    },\n\n    /**\n     * Toggle the right menu to open 100%\n     */\n    toggleRight: function() {\n      var openAmount = this.getOpenAmount();\n      if(openAmount < 0) {\n        this.openPercentage(0);\n      } else {\n        this.openPercentage(-100);\n      }\n    },\n\n    /**\n     * Close all menus.\n     */\n    close: function() {\n      this.openPercentage(0);\n    },\n\n    /**\n     * @return {float} The amount the side menu is open, either positive or negative for left (positive), or right (negative)\n     */\n    getOpenAmount: function() {\n      return this.content.getTranslateX() || 0;\n    },\n\n    /**\n     * @return {float} The ratio of open amount over menu width. For example, a\n     * menu of width 100 open 50 pixels would be open 50% or a ratio of 0.5. Value is negative\n     * for right menu.\n     */\n    getOpenRatio: function() {\n      var amount = this.getOpenAmount();\n      if(amount >= 0) {\n        return amount / this.left.width;\n      }\n      return amount / this.right.width;\n    },\n\n    /**\n     * @return {float} The percentage of open amount over menu width. For example, a\n     * menu of width 100 open 50 pixels would be open 50%. Value is negative\n     * for right menu.\n     */\n    getOpenPercentage: function() {\n      return this.getOpenRatio() * 100;\n    },\n\n    /**\n     * Open the menu with a given percentage amount.\n     * @param {float} percentage The percentage (positive or negative for left/right) to open the menu.\n     */\n    openPercentage: function(percentage) {\n      var p = percentage / 100;\n\n      if(this.left && percentage >= 0) {\n        this.openAmount(this.left.width * p);\n      } else if(this.right && percentage < 0) {\n        var maxRight = this.right.width;\n        this.openAmount(this.right.width * p);\n      }\n    },\n\n    /**\n     * Open the menu the given pixel amount.\n     * @param {float} amount the pixel amount to open the menu. Positive value for left menu,\n     * negative value for right menu (only one menu will be visible at a time).\n     */\n    openAmount: function(amount) {\n      var maxLeft = this.left && this.left.width || 0;\n      var maxRight = this.right && this.right.width || 0;\n\n      // Check if we can move to that side, depending if the left/right panel is enabled\n      if((!(this.left && this.left.isEnabled) && amount > 0) || (!(this.right && this.right.isEnabled) && amount < 0)) {\n        return;\n      }\n\n      if((this._leftShowing && amount > maxLeft) || (this._rightShowing && amount < -maxRight)) {\n        return;\n      }\n      \n      this.content.setTranslateX(amount);\n\n      if(amount >= 0) {\n        this._leftShowing = true;\n        this._rightShowing = false;\n\n        // Push the z-index of the right menu down\n        this.right && this.right.pushDown();\n        // Bring the z-index of the left menu up\n        this.left && this.left.bringUp();\n      } else {\n        this._rightShowing = true;\n        this._leftShowing = false;\n\n        // Bring the z-index of the right menu up\n        this.right && this.right.bringUp();\n        // Push the z-index of the left menu down\n        this.left && this.left.pushDown();\n      }\n    },\n\n    /**\n     * Given an event object, find the final resting position of this side\n     * menu. For example, if the user \"throws\" the content to the right and \n     * releases the touch, the left menu should snap open (animated, of course).\n     *\n     * @param {Event} e the gesture event to use for snapping\n     */\n    snapToRest: function(e) {\n      // We want to animate at the end of this\n      this.content.enableAnimation();\n      this._isDragging = false;\n\n      // Check how much the panel is open after the drag, and\n      // what the drag velocity is\n      var ratio = this.getOpenRatio();\n\n      if(ratio === 0)\n        return;\n\n      var velocityThreshold = 0.3;\n      var velocityX = e.gesture.velocityX;\n      var direction = e.gesture.direction;\n\n      // Less than half, going left \n      //if(ratio > 0 && ratio < 0.5 && direction == 'left' && velocityX < velocityThreshold) {\n      //this.openPercentage(0);\n      //}\n\n      // Going right, less than half, too slow (snap back)\n      if(ratio > 0 && ratio < 0.5 && direction == 'right' && velocityX < velocityThreshold) {\n        this.openPercentage(0);\n      }\n\n      // Going left, more than half, too slow (snap back)\n      else if(ratio > 0.5 && direction == 'left' && velocityX < velocityThreshold) {\n        this.openPercentage(100);\n      }\n\n      // Going left, less than half, too slow (snap back)\n      else if(ratio < 0 && ratio > -0.5 && direction == 'left' && velocityX < velocityThreshold) {\n        this.openPercentage(0);\n      }\n\n      // Going right, more than half, too slow (snap back)\n      else if(ratio < 0.5 && direction == 'right' && velocityX < velocityThreshold) {\n        this.openPercentage(-100);\n      }\n      \n      // Going right, more than half, or quickly (snap open)\n      else if(direction == 'right' && ratio >= 0 && (ratio >= 0.5 || velocityX > velocityThreshold)) {\n        this.openPercentage(100);\n      }\n      \n      // Going left, more than half, or quickly (span open)\n      else if(direction == 'left' && ratio <= 0 && (ratio <= -0.5 || velocityX > velocityThreshold)) {\n        this.openPercentage(-100);\n      }\n      \n      // Snap back for safety\n      else {\n        this.openPercentage(0);\n      }\n    },\n\n    // End a drag with the given event\n    _endDrag: function(e) {\n      this.snapToRest(e);\n      this._startX = null;\n      this._lastX = null;\n      this._offsetX = null;\n    },\n\n    // Handle a drag event\n    _handleDrag: function(e) {\n      // If we don't have start coords, grab and store them\n      if(!this._startX) {\n        this._startX = e.gesture.touches[0].pageX;\n        this._lastX = this._startX;\n      } else {\n        // Grab the current tap coords\n        this._lastX = e.gesture.touches[0].pageX;\n      }\n\n      // Calculate difference from the tap points\n      if(!this._isDragging && Math.abs(this._lastX - this._startX) > this.dragThresholdX) {\n        // if the difference is greater than threshold, start dragging using the current\n        // point as the starting point\n        this._startX = this._lastX;\n\n        this._isDragging = true;\n        // Initialize dragging\n        this.content.disableAnimation();\n        this._offsetX = this.getOpenAmount();\n      }\n\n      if(this._isDragging) {\n        this.openAmount(this._offsetX + (this._lastX - this._startX));\n      }\n    }\n  });\n\n})(ionic);\n;\n(function(ionic) {\n'use strict';\n\n/**\n * The TabBarController handles a set of view controllers powered by a tab strip\n * at the bottom (or possibly top) of a screen.\n *\n * The API here is somewhat modelled off of UITabController in the sense that the\n * controllers actually define what the tab will look like (title, icon, etc.).\n *\n * Tabs shouldn't be interacted with through your own code. Instead, use the controller\n * methods which will power the tab bar.\n */\nionic.controllers.TabBarController = ionic.controllers.ViewController.inherit({\n  initialize: function(options) {\n    this.tabBar = options.tabBar;\n\n    this._bindEvents();\n\n    this.controllers = [];\n\n    var controllers = options.controllers || [];\n\n    for(var i = 0; i < controllers.length; i++) {\n      this.addController(controllers[i]);\n    }\n\n    // Bind or set our tabWillChange callback\n    this.controllerWillChange = options.controllerWillChange || function(controller) {};\n    this.controllerChanged = options.controllerChanged || function(controller) {};\n\n    // Try to select the first controller if we have one\n    this.setSelectedController(0);\n  },\n  // Start listening for events on our tab bar\n  _bindEvents: function() {\n    var _this = this;\n\n    this.tabBar.tryTabSelect = function(index) {\n      _this.setSelectedController(index);\n    };\n  },\n\n\n  selectController: function(index) {\n    var shouldChange = true;\n\n    // Check if we should switch to this tab. This lets the app\n    // cancel tab switches if the context isn't right, for example.\n    if(this.controllerWillChange) {\n      if(this.controllerWillChange(this.controllers[index], index) === false) {\n        shouldChange = false;\n      }\n    }\n\n    if(shouldChange) {\n      this.setSelectedController(index);\n    }\n  },\n\n  // Force the selection of a controller at the given index\n  setSelectedController: function(index) {\n    if(index >= this.controllers.length) {\n      return;\n    }\n    var lastController = this.selectedController;\n    var lastIndex = this.selectedIndex;\n\n    this.selectedController = this.controllers[index];\n    this.selectedIndex = index;\n\n    this._showController(index);\n    this.tabBar.setSelectedItem(index);\n\n    this.controllerChanged && this.controllerChanged(lastController, lastIndex, this.selectedController, this.selectedIndex);\n  },\n\n  _showController: function(index) {\n    var c;\n\n    for(var i = 0, j = this.controllers.length; i < j; i ++) {\n      c = this.controllers[i];\n      //c.detach && c.detach();\n      c.isVisible = false;\n      c.visibilityChanged && c.visibilityChanged();\n    }\n\n    c = this.controllers[index];\n    //c.attach && c.attach();\n    c.isVisible = true;\n    c.visibilityChanged && c.visibilityChanged();\n  },\n\n  _clearSelected: function() {\n    this.selectedController = null;\n    this.selectedIndex = -1;\n  },\n\n  // Return the tab at the given index\n  getController: function(index) {\n    return this.controllers[index];\n  },\n\n  // Return the current tab list\n  getControllers: function() {\n    return this.controllers;\n  },\n\n  // Get the currently selected controller\n  getSelectedController: function() {\n    return this.selectedController;\n  },\n\n  // Get the index of the currently selected controller\n  getSelectedControllerIndex: function() {\n    return this.selectedIndex;\n  },\n\n  // Add a tab\n  addController: function(controller) {\n    this.controllers.push(controller);\n\n    this.tabBar.addItem({\n      title: controller.title,\n      icon: controller.icon\n    });\n\n    // If we don't have a selected controller yet, select the first one.\n    if(!this.selectedController) {\n      this.setSelectedController(0);\n    }\n  },\n\n  // Set the tabs and select the first\n  setControllers: function(controllers) {\n    this.controllers = controllers;\n    this._clearSelected();\n    this.selectController(0);\n  },\n});\n\n})(window.ionic);\n"
  },
  {
    "path": "content/js/lunr.js",
    "content": "\n/**\n * lunr - http://lunrjs.com - A bit like Solr, but much smaller and not as bright - 0.4.2\n * Copyright (C) 2013 Oliver Nightingale\n * MIT Licensed\n * @license\n */\n\n/**\n * Convenience function for instantiating a new lunr index and configuring it\n * with the default pipeline functions and the passed config function.\n *\n * When using this convenience function a new index will be created with the\n * following functions already in the pipeline:\n *\n * lunr.StopWordFilter - filters out any stop words before they enter the\n * index\n *\n * lunr.stemmer - stems the tokens before entering the index.\n *\n * Example:\n *\n *     var idx = lunr(function () {\n *       this.field('title', 10)\n *       this.field('tags', 100)\n *       this.field('body')\n *       \n *       this.ref('cid')\n *       \n *       this.pipeline.add(function () {\n *         // some custom pipeline function\n *       })\n *       \n *     })\n *\n * @param {Function} config A function that will be called with the new instance\n * of the lunr.Index as both its context and first parameter. It can be used to\n * customize the instance of new lunr.Index.\n * @namespace\n * @module\n * @returns {lunr.Index}\n *\n */\nvar lunr = function (config) {\n  var idx = new lunr.Index\n\n  idx.pipeline.add(lunr.stopWordFilter, lunr.stemmer)\n\n  if (config) config.call(idx, idx)\n\n  return idx\n}\n\nlunr.version = \"0.4.2\"\n\nif (typeof module !== 'undefined') {\n  module.exports = lunr\n}\n/*!\n * lunr.utils\n * Copyright (C) 2013 Oliver Nightingale\n */\n\n/**\n * A namespace containing utils for the rest of the lunr library\n */\nlunr.utils = {}\n\n/**\n * Print a warning message to the console.\n *\n * @param {String} message The message to be printed.\n * @memberOf Utils\n */\nlunr.utils.warn = (function (global) {\n  return function (message) {\n    if (global.console && console.warn) {\n      console.warn(message)\n    }\n  }\n})(this)\n\n/**\n * Returns a zero filled array of the length specified.\n *\n * @param {Number} length The number of zeros required.\n * @returns {Array}\n * @memberOf Utils\n */\nlunr.utils.zeroFillArray = (function () {\n  var zeros = [0]\n\n  return function (length) {\n    while (zeros.length < length) {\n      zeros = zeros.concat(zeros)\n    }\n\n    return zeros.slice(0, length)\n  }\n})()\n/*!\n * lunr.EventEmitter\n * Copyright (C) 2013 Oliver Nightingale\n */\n\n/**\n * lunr.EventEmitter is an event emitter for lunr. It manages adding and removing event handlers and triggering events and their handlers.\n *\n * @constructor\n */\nlunr.EventEmitter = function () {\n  this.events = {}\n}\n\n/**\n * Binds a handler function to a specific event(s).\n *\n * Can bind a single function to many different events in one call.\n *\n * @param {String} [eventName] The name(s) of events to bind this function to.\n * @param {Function} handler The function to call when an event is fired.\n * @memberOf EventEmitter\n */\nlunr.EventEmitter.prototype.addListener = function () {\n  var args = Array.prototype.slice.call(arguments),\n      fn = args.pop(),\n      names = args\n\n  if (typeof fn !== \"function\") throw new TypeError (\"last argument must be a function\")\n\n  names.forEach(function (name) {\n    if (!this.hasHandler(name)) this.events[name] = []\n    this.events[name].push(fn)\n  }, this)\n}\n\n/**\n * Removes a handler function from a specific event.\n *\n * @param {String} eventName The name of the event to remove this function from.\n * @param {Function} handler The function to remove from an event.\n * @memberOf EventEmitter\n */\nlunr.EventEmitter.prototype.removeListener = function (name, fn) {\n  if (!this.hasHandler(name)) return\n\n  var fnIndex = this.events[name].indexOf(fn)\n  this.events[name].splice(fnIndex, 1)\n\n  if (!this.events[name].length) delete this.events[name]\n}\n\n/**\n * Calls all functions bound to the given event.\n *\n * Additional data can be passed to the event handler as arguments to `emit`\n * after the event name.\n *\n * @param {String} eventName The name of the event to emit.\n * @memberOf EventEmitter\n */\nlunr.EventEmitter.prototype.emit = function (name) {\n  if (!this.hasHandler(name)) return\n\n  var args = Array.prototype.slice.call(arguments, 1)\n\n  this.events[name].forEach(function (fn) {\n    fn.apply(undefined, args)\n  })\n}\n\n/**\n * Checks whether a handler has ever been stored against an event.\n *\n * @param {String} eventName The name of the event to check.\n * @private\n * @memberOf EventEmitter\n */\nlunr.EventEmitter.prototype.hasHandler = function (name) {\n  return name in this.events\n}\n\n/*!\n * lunr.tokenizer\n * Copyright (C) 2013 Oliver Nightingale\n */\n\n/**\n * A function for splitting a string into tokens ready to be inserted into\n * the search index.\n *\n * @module\n * @param {String} obj The string to convert into tokens\n * @returns {Array}\n */\nlunr.tokenizer = function (obj) {\n  if (!arguments.length) return []\n  if (Array.isArray(obj)) return obj.map(function (t) { return t.toLowerCase() })\n\n  var str = obj.toString().replace(/^\\s+/, '')\n\n  for (var i = str.length - 1; i >= 0; i--) {\n    if (/\\S/.test(str.charAt(i))) {\n      str = str.substring(0, i + 1)\n      break\n    }\n  }\n\n  return str\n    .split(/\\s+/)\n    .map(function (token) {\n      return token.replace(/^\\W+/, '').replace(/\\W+$/, '').toLowerCase()\n    })\n}\n/*!\n * lunr.Pipeline\n * Copyright (C) 2013 Oliver Nightingale\n */\n\n/**\n * lunr.Pipelines maintain an ordered list of functions to be applied to all\n * tokens in documents entering the search index and queries being ran against\n * the index.\n *\n * An instance of lunr.Index created with the lunr shortcut will contain a\n * pipeline with a stop word filter and an English language stemmer. Extra\n * functions can be added before or after either of these functions or these\n * default functions can be removed.\n *\n * When run the pipeline will call each function in turn, passing a token, the\n * index of that token in the original list of all tokens and finally a list of\n * all the original tokens.\n *\n * The output of functions in the pipeline will be passed to the next function\n * in the pipeline. To exclude a token from entering the index the function\n * should return undefined, the rest of the pipeline will not be called with\n * this token.\n *\n * For serialisation of pipelines to work, all functions used in an instance of\n * a pipeline should be registered with lunr.Pipeline. Registered functions can\n * then be loaded. If trying to load a serialised pipeline that uses functions\n * that are not registered an error will be thrown.\n *\n * If not planning on serialising the pipeline then registering pipeline functions\n * is not necessary.\n *\n * @constructor\n */\nlunr.Pipeline = function () {\n  this._stack = []\n}\n\nlunr.Pipeline.registeredFunctions = {}\n\n/**\n * Register a function with the pipeline.\n *\n * Functions that are used in the pipeline should be registered if the pipeline\n * needs to be serialised, or a serialised pipeline needs to be loaded.\n *\n * Registering a function does not add it to a pipeline, functions must still be\n * added to instances of the pipeline for them to be used when running a pipeline.\n *\n * @param {Function} fn The function to check for.\n * @param {String} label The label to register this function with\n * @memberOf Pipeline\n */\nlunr.Pipeline.registerFunction = function (fn, label) {\n  if (label in this.registeredFunctions) {\n    lunr.utils.warn('Overwriting existing registered function: ' + label)\n  }\n\n  fn.label = label\n  lunr.Pipeline.registeredFunctions[fn.label] = fn\n}\n\n/**\n * Warns if the function is not registered as a Pipeline function.\n *\n * @param {Function} fn The function to check for.\n * @private\n * @memberOf Pipeline\n */\nlunr.Pipeline.warnIfFunctionNotRegistered = function (fn) {\n  var isRegistered = fn.label && (fn.label in this.registeredFunctions)\n\n  if (!isRegistered) {\n    lunr.utils.warn('Function is not registered with pipeline. This may cause problems when serialising the index.\\n', fn)\n  }\n}\n\n/**\n * Loads a previously serialised pipeline.\n *\n * All functions to be loaded must already be registered with lunr.Pipeline.\n * If any function from the serialised data has not been registered then an\n * error will be thrown.\n *\n * @param {Object} serialised The serialised pipeline to load.\n * @returns {lunr.Pipeline}\n * @memberOf Pipeline\n */\nlunr.Pipeline.load = function (serialised) {\n  var pipeline = new lunr.Pipeline\n\n  serialised.forEach(function (fnName) {\n    var fn = lunr.Pipeline.registeredFunctions[fnName]\n\n    if (fn) {\n      pipeline.add(fn)\n    } else {\n      throw new Error ('Cannot load un-registered function: ' + fnName)\n    }\n  })\n\n  return pipeline\n}\n\n/**\n * Adds new functions to the end of the pipeline.\n *\n * Logs a warning if the function has not been registered.\n *\n * @param {Function} functions Any number of functions to add to the pipeline.\n * @memberOf Pipeline\n */\nlunr.Pipeline.prototype.add = function () {\n  var fns = Array.prototype.slice.call(arguments)\n\n  fns.forEach(function (fn) {\n    lunr.Pipeline.warnIfFunctionNotRegistered(fn)\n    this._stack.push(fn)\n  }, this)\n}\n\n/**\n * Adds a single function after a function that already exists in the\n * pipeline.\n *\n * Logs a warning if the function has not been registered.\n *\n * @param {Function} existingFn A function that already exists in the pipeline.\n * @param {Function} newFn The new function to add to the pipeline.\n * @memberOf Pipeline\n */\nlunr.Pipeline.prototype.after = function (existingFn, newFn) {\n  lunr.Pipeline.warnIfFunctionNotRegistered(newFn)\n\n  var pos = this._stack.indexOf(existingFn) + 1\n  this._stack.splice(pos, 0, newFn)\n}\n\n/**\n * Adds a single function before a function that already exists in the\n * pipeline.\n *\n * Logs a warning if the function has not been registered.\n *\n * @param {Function} existingFn A function that already exists in the pipeline.\n * @param {Function} newFn The new function to add to the pipeline.\n * @memberOf Pipeline\n */\nlunr.Pipeline.prototype.before = function (existingFn, newFn) {\n  lunr.Pipeline.warnIfFunctionNotRegistered(newFn)\n\n  var pos = this._stack.indexOf(existingFn)\n  this._stack.splice(pos, 0, newFn)\n}\n\n/**\n * Removes a function from the pipeline.\n *\n * @param {Function} fn The function to remove from the pipeline.\n * @memberOf Pipeline\n */\nlunr.Pipeline.prototype.remove = function (fn) {\n  var pos = this._stack.indexOf(fn)\n  this._stack.splice(pos, 1)\n}\n\n/**\n * Runs the current list of functions that make up the pipeline against the\n * passed tokens.\n *\n * @param {Array} tokens The tokens to run through the pipeline.\n * @returns {Array}\n * @memberOf Pipeline\n */\nlunr.Pipeline.prototype.run = function (tokens) {\n  var out = [],\n      tokenLength = tokens.length,\n      stackLength = this._stack.length\n\n  for (var i = 0; i < tokenLength; i++) {\n    var token = tokens[i]\n\n    for (var j = 0; j < stackLength; j++) {\n      token = this._stack[j](token, i, tokens)\n      if (token === void 0) break\n    };\n\n    if (token !== void 0) out.push(token)\n  };\n\n  return out\n}\n\n/**\n * Returns a representation of the pipeline ready for serialisation.\n *\n * Logs a warning if the function has not been registered.\n *\n * @returns {Array}\n * @memberOf Pipeline\n */\nlunr.Pipeline.prototype.toJSON = function () {\n  return this._stack.map(function (fn) {\n    lunr.Pipeline.warnIfFunctionNotRegistered(fn)\n\n    return fn.label\n  })\n}\n/*!\n * lunr.Vector\n * Copyright (C) 2013 Oliver Nightingale\n */\n\n/**\n * lunr.Vectors wrap arrays and add vector related operations for the array\n * elements.\n *\n * @constructor\n * @param {Array} elements Elements that make up the vector.\n */\nlunr.Vector = function (elements) {\n  this.elements = elements\n}\n\n/**\n * Calculates the magnitude of this vector.\n *\n * @returns {Number}\n * @memberOf Vector\n */\nlunr.Vector.prototype.magnitude = function () {\n  if (this._magnitude) return this._magnitude\n\n  var sumOfSquares = 0,\n      elems = this.elements,\n      len = elems.length,\n      el\n\n  for (var i = 0; i < len; i++) {\n    el = elems[i]\n    sumOfSquares += el * el\n  };\n\n  return this._magnitude = Math.sqrt(sumOfSquares)\n}\n\n/**\n * Calculates the dot product of this vector and another vector.\n *\n * @param {lunr.Vector} otherVector The vector to compute the dot product with.\n * @returns {Number}\n * @memberOf Vector\n */\nlunr.Vector.prototype.dot = function (otherVector) {\n  var elem1 = this.elements,\n      elem2 = otherVector.elements,\n      length = elem1.length,\n      dotProduct = 0\n\n  for (var i = 0; i < length; i++) {\n    dotProduct += elem1[i] * elem2[i]\n  };\n\n  return dotProduct\n}\n\n/**\n * Calculates the cosine similarity between this vector and another\n * vector.\n *\n * @param {lunr.Vector} otherVector The other vector to calculate the\n * similarity with.\n * @returns {Number}\n * @memberOf Vector\n */\nlunr.Vector.prototype.similarity = function (otherVector) {\n  return this.dot(otherVector) / (this.magnitude() * otherVector.magnitude())\n}\n\n/**\n * Converts this vector back into an array.\n *\n * @returns {Array}\n * @memberOf Vector\n */\nlunr.Vector.prototype.toArray = function () {\n  return this.elements\n}\n/*!\n * lunr.SortedSet\n * Copyright (C) 2013 Oliver Nightingale\n */\n\n/**\n * lunr.SortedSets are used to maintain an array of uniq values in a sorted\n * order.\n *\n * @constructor\n */\nlunr.SortedSet = function () {\n  this.length = 0\n  this.elements = []\n}\n\n/**\n * Loads a previously serialised sorted set.\n *\n * @param {Array} serialisedData The serialised set to load.\n * @returns {lunr.SortedSet}\n * @memberOf SortedSet\n */\nlunr.SortedSet.load = function (serialisedData) {\n  var set = new this\n\n  set.elements = serialisedData\n  set.length = serialisedData.length\n\n  return set\n}\n\n/**\n * Inserts new items into the set in the correct position to maintain the\n * order.\n *\n * @param {Object} The objects to add to this set.\n * @memberOf SortedSet\n */\nlunr.SortedSet.prototype.add = function () {\n  Array.prototype.slice.call(arguments).forEach(function (element) {\n    if (~this.indexOf(element)) return\n    this.elements.splice(this.locationFor(element), 0, element)\n  }, this)\n\n  this.length = this.elements.length\n}\n\n/**\n * Converts this sorted set into an array.\n *\n * @returns {Array}\n * @memberOf SortedSet\n */\nlunr.SortedSet.prototype.toArray = function () {\n  return this.elements.slice()\n}\n\n/**\n * Creates a new array with the results of calling a provided function on every\n * element in this sorted set.\n *\n * Delegates to Array.prototype.map and has the same signature.\n *\n * @param {Function} fn The function that is called on each element of the\n * set.\n * @param {Object} ctx An optional object that can be used as the context\n * for the function fn.\n * @returns {Array}\n * @memberOf SortedSet\n */\nlunr.SortedSet.prototype.map = function (fn, ctx) {\n  return this.elements.map(fn, ctx)\n}\n\n/**\n * Executes a provided function once per sorted set element.\n *\n * Delegates to Array.prototype.forEach and has the same signature.\n *\n * @param {Function} fn The function that is called on each element of the\n * set.\n * @param {Object} ctx An optional object that can be used as the context\n * @memberOf SortedSet\n * for the function fn.\n */\nlunr.SortedSet.prototype.forEach = function (fn, ctx) {\n  return this.elements.forEach(fn, ctx)\n}\n\n/**\n * Returns the index at which a given element can be found in the\n * sorted set, or -1 if it is not present.\n *\n * @param {Object} elem The object to locate in the sorted set.\n * @param {Number} start An optional index at which to start searching from\n * within the set.\n * @param {Number} end An optional index at which to stop search from within\n * the set.\n * @returns {Number}\n * @memberOf SortedSet\n */\nlunr.SortedSet.prototype.indexOf = function (elem, start, end) {\n  var start = start || 0,\n      end = end || this.elements.length,\n      sectionLength = end - start,\n      pivot = start + Math.floor(sectionLength / 2),\n      pivotElem = this.elements[pivot]\n\n  if (sectionLength <= 1) {\n    if (pivotElem === elem) {\n      return pivot\n    } else {\n      return -1\n    }\n  }\n\n  if (pivotElem < elem) return this.indexOf(elem, pivot, end)\n  if (pivotElem > elem) return this.indexOf(elem, start, pivot)\n  if (pivotElem === elem) return pivot\n}\n\n/**\n * Returns the position within the sorted set that an element should be\n * inserted at to maintain the current order of the set.\n *\n * This function assumes that the element to search for does not already exist\n * in the sorted set.\n *\n * @param {Object} elem The elem to find the position for in the set\n * @param {Number} start An optional index at which to start searching from\n * within the set.\n * @param {Number} end An optional index at which to stop search from within\n * the set.\n * @returns {Number}\n * @memberOf SortedSet\n */\nlunr.SortedSet.prototype.locationFor = function (elem, start, end) {\n  var start = start || 0,\n      end = end || this.elements.length,\n      sectionLength = end - start,\n      pivot = start + Math.floor(sectionLength / 2),\n      pivotElem = this.elements[pivot]\n\n  if (sectionLength <= 1) {\n    if (pivotElem > elem) return pivot\n    if (pivotElem < elem) return pivot + 1\n  }\n\n  if (pivotElem < elem) return this.locationFor(elem, pivot, end)\n  if (pivotElem > elem) return this.locationFor(elem, start, pivot)\n}\n\n/**\n * Creates a new lunr.SortedSet that contains the elements in the intersection\n * of this set and the passed set.\n *\n * @param {lunr.SortedSet} otherSet The set to intersect with this set.\n * @returns {lunr.SortedSet}\n * @memberOf SortedSet\n */\nlunr.SortedSet.prototype.intersect = function (otherSet) {\n  var intersectSet = new lunr.SortedSet,\n      i = 0, j = 0,\n      a_len = this.length, b_len = otherSet.length,\n      a = this.elements, b = otherSet.elements\n\n  while (true) {\n    if (i > a_len - 1 || j > b_len - 1) break\n\n    if (a[i] === b[j]) {\n      intersectSet.add(a[i])\n      i++, j++\n      continue\n    }\n\n    if (a[i] < b[j]) {\n      i++\n      continue\n    }\n\n    if (a[i] > b[j]) {\n      j++\n      continue\n    }\n  };\n\n  return intersectSet\n}\n\n/**\n * Makes a copy of this set\n *\n * @returns {lunr.SortedSet}\n * @memberOf SortedSet\n */\nlunr.SortedSet.prototype.clone = function () {\n  var clone = new lunr.SortedSet\n\n  clone.elements = this.toArray()\n  clone.length = clone.elements.length\n\n  return clone\n}\n\n/**\n * Creates a new lunr.SortedSet that contains the elements in the union\n * of this set and the passed set.\n *\n * @param {lunr.SortedSet} otherSet The set to union with this set.\n * @returns {lunr.SortedSet}\n * @memberOf SortedSet\n */\nlunr.SortedSet.prototype.union = function (otherSet) {\n  var longSet, shortSet, unionSet\n\n  if (this.length >= otherSet.length) {\n    longSet = this, shortSet = otherSet\n  } else {\n    longSet = otherSet, shortSet = this\n  }\n\n  unionSet = longSet.clone()\n\n  unionSet.add.apply(unionSet, shortSet.toArray())\n\n  return unionSet\n}\n\n/**\n * Returns a representation of the sorted set ready for serialisation.\n *\n * @returns {Array}\n * @memberOf SortedSet\n */\nlunr.SortedSet.prototype.toJSON = function () {\n  return this.toArray()\n}\n/*!\n * lunr.Index\n * Copyright (C) 2013 Oliver Nightingale\n */\n\n/**\n * lunr.Index is object that manages a search index.  It contains the indexes\n * and stores all the tokens and document lookups.  It also provides the main\n * user facing API for the library.\n *\n * @constructor\n */\nlunr.Index = function () {\n  this._fields = []\n  this._ref = 'id'\n  this.pipeline = new lunr.Pipeline\n  this.documentStore = new lunr.Store\n  this.tokenStore = new lunr.TokenStore\n  this.corpusTokens = new lunr.SortedSet\n  this.eventEmitter =  new lunr.EventEmitter\n\n  this._idfCache = {}\n\n  this.on('add', 'remove', 'update', (function () {\n    this._idfCache = {}\n  }).bind(this))\n}\n\n/**\n * Bind a handler to events being emitted by the index.\n *\n * The handler can be bound to many events at the same time.\n *\n * @param {String} [eventName] The name(s) of events to bind the function to.\n * @param {Function} handler The serialised set to load.\n * @memberOf Index\n */\nlunr.Index.prototype.on = function () {\n  var args = Array.prototype.slice.call(arguments)\n  return this.eventEmitter.addListener.apply(this.eventEmitter, args)\n}\n\n/**\n * Removes a handler from an event being emitted by the index.\n *\n * @param {String} eventName The name of events to remove the function from.\n * @param {Function} handler The serialised set to load.\n * @memberOf Index\n */\nlunr.Index.prototype.off = function (name, fn) {\n  return this.eventEmitter.removeListener(name, fn)\n}\n\n/**\n * Loads a previously serialised index.\n *\n * Issues a warning if the index being imported was serialised\n * by a different version of lunr.\n *\n * @param {Object} serialisedData The serialised set to load.\n * @returns {lunr.Index}\n * @memberOf Index\n */\nlunr.Index.load = function (serialisedData) {\n  if (serialisedData.version !== lunr.version) {\n    lunr.utils.warn('version mismatch: current ' + lunr.version + ' importing ' + serialisedData.version)\n  }\n\n  var idx = new this\n\n  idx._fields = serialisedData.fields\n  idx._ref = serialisedData.ref\n\n  idx.documentStore = lunr.Store.load(serialisedData.documentStore)\n  idx.tokenStore = lunr.TokenStore.load(serialisedData.tokenStore)\n  idx.corpusTokens = lunr.SortedSet.load(serialisedData.corpusTokens)\n  idx.pipeline = lunr.Pipeline.load(serialisedData.pipeline)\n\n  return idx\n}\n\n/**\n * Adds a field to the list of fields that will be searchable within documents\n * in the index.\n *\n * An optional boost param can be passed to affect how much tokens in this field\n * rank in search results, by default the boost value is 1.\n *\n * Fields should be added before any documents are added to the index, fields\n * that are added after documents are added to the index will only apply to new\n * documents added to the index.\n *\n * @param {String} fieldName The name of the field within the document that\n * should be indexed\n * @param {Number} boost An optional boost that can be applied to terms in this\n * field.\n * @returns {lunr.Index}\n * @memberOf Index\n */\nlunr.Index.prototype.field = function (fieldName, opts) {\n  var opts = opts || {},\n      field = { name: fieldName, boost: opts.boost || 1 }\n\n  this._fields.push(field)\n  return this\n}\n\n/**\n * Sets the property used to uniquely identify documents added to the index,\n * by default this property is 'id'.\n *\n * This should only be changed before adding documents to the index, changing\n * the ref property without resetting the index can lead to unexpected results.\n *\n * @param {String} refName The property to use to uniquely identify the\n * documents in the index.\n * @param {Boolean} emitEvent Whether to emit add events, defaults to true\n * @returns {lunr.Index}\n * @memberOf Index\n */\nlunr.Index.prototype.ref = function (refName) {\n  this._ref = refName\n  return this\n}\n\n/**\n * Add a document to the index.\n *\n * This is the way new documents enter the index, this function will run the\n * fields from the document through the index's pipeline and then add it to\n * the index, it will then show up in search results.\n *\n * An 'add' event is emitted with the document that has been added and the index\n * the document has been added to. This event can be silenced by passing false\n * as the second argument to add.\n *\n * @param {Object} doc The document to add to the index.\n * @param {Boolean} emitEvent Whether or not to emit events, default true.\n * @memberOf Index\n */\nlunr.Index.prototype.add = function (doc, emitEvent) {\n  var docTokens = {},\n      allDocumentTokens = new lunr.SortedSet,\n      docRef = doc[this._ref],\n      emitEvent = emitEvent === undefined ? true : emitEvent\n\n  this._fields.forEach(function (field) {\n    var fieldTokens = this.pipeline.run(lunr.tokenizer(doc[field.name]))\n\n    docTokens[field.name] = fieldTokens\n    lunr.SortedSet.prototype.add.apply(allDocumentTokens, fieldTokens)\n  }, this)\n\n  this.documentStore.set(docRef, allDocumentTokens)\n  lunr.SortedSet.prototype.add.apply(this.corpusTokens, allDocumentTokens.toArray())\n\n  for (var i = 0; i < allDocumentTokens.length; i++) {\n    var token = allDocumentTokens.elements[i]\n    var tf = this._fields.reduce(function (memo, field) {\n      var fieldLength = docTokens[field.name].length\n\n      if (!fieldLength) return memo\n\n      var tokenCount = docTokens[field.name].filter(function (t) { return t === token }).length\n\n      return memo + (tokenCount / fieldLength * field.boost)\n    }, 0)\n\n    this.tokenStore.add(token, { ref: docRef, tf: tf })\n  };\n\n  if (emitEvent) this.eventEmitter.emit('add', doc, this)\n}\n\n/**\n * Removes a document from the index.\n *\n * To make sure documents no longer show up in search results they can be\n * removed from the index using this method.\n *\n * The document passed only needs to have the same ref property value as the\n * document that was added to the index, they could be completely different\n * objects.\n *\n * A 'remove' event is emitted with the document that has been removed and the index\n * the document has been removed from. This event can be silenced by passing false\n * as the second argument to remove.\n *\n * @param {Object} doc The document to remove from the index.\n * @param {Boolean} emitEvent Whether to emit remove events, defaults to true\n * @memberOf Index\n */\nlunr.Index.prototype.remove = function (doc, emitEvent) {\n  var docRef = doc[this._ref],\n      emitEvent = emitEvent === undefined ? true : emitEvent\n\n  if (!this.documentStore.has(docRef)) return\n\n  var docTokens = this.documentStore.get(docRef)\n\n  this.documentStore.remove(docRef)\n\n  docTokens.forEach(function (token) {\n    this.tokenStore.remove(token, docRef)\n  }, this)\n\n  if (emitEvent) this.eventEmitter.emit('remove', doc, this)\n}\n\n/**\n * Updates a document in the index.\n *\n * When a document contained within the index gets updated, fields changed,\n * added or removed, to make sure it correctly matched against search queries,\n * it should be updated in the index.\n *\n * This method is just a wrapper around `remove` and `add`\n *\n * An 'update' event is emitted with the document that has been updated and the index.\n * This event can be silenced by passing false as the second argument to update. Only\n * an update event will be fired, the 'add' and 'remove' events of the underlying calls\n * are silenced.\n *\n * @param {Object} doc The document to update in the index.\n * @param {Boolean} emitEvent Whether to emit update events, defaults to true\n * @see Index.prototype.remove\n * @see Index.prototype.add\n * @memberOf Index\n */\nlunr.Index.prototype.update = function (doc, emitEvent) {\n  var emitEvent = emitEvent === undefined ? true : emitEvent\n\n  this.remove(doc, false)\n  this.add(doc, false)\n\n  if (emitEvent) this.eventEmitter.emit('update', doc, this)\n}\n\n/**\n * Calculates the inverse document frequency for a token within the index.\n *\n * @param {String} token The token to calculate the idf of.\n * @see Index.prototype.idf\n * @private\n * @memberOf Index\n */\nlunr.Index.prototype.idf = function (term) {\n  if (this._idfCache[term]) return this._idfCache[term]\n\n  var documentFrequency = this.tokenStore.count(term),\n      idf = 1\n\n  if (documentFrequency > 0) {\n    idf = 1 + Math.log(this.tokenStore.length / documentFrequency)\n  }\n\n  return this._idfCache[term] = idf\n}\n\n/**\n * Searches the index using the passed query.\n *\n * Queries should be a string, multiple words are allowed and will lead to an\n * AND based query, e.g. `idx.search('foo bar')` will run a search for\n * documents containing both 'foo' and 'bar'.\n *\n * All query tokens are passed through the same pipeline that document tokens\n * are passed through, so any language processing involved will be run on every\n * query term.\n *\n * Each query term is expanded, so that the term 'he' might be expanded to\n * 'hello' and 'help' if those terms were already included in the index.\n *\n * Matching documents are returned as an array of objects, each object contains\n * the matching document ref, as set for this index, and the similarity score\n * for this document against the query.\n *\n * @param {String} query The query to search the index with.\n * @returns {Object}\n * @see Index.prototype.idf\n * @see Index.prototype.documentVector\n * @memberOf Index\n */\nlunr.Index.prototype.search = function (query) {\n  var queryTokens = this.pipeline.run(lunr.tokenizer(query)),\n      queryArr = lunr.utils.zeroFillArray(this.corpusTokens.length),\n      documentSets = [],\n      fieldBoosts = this._fields.reduce(function (memo, f) { return memo + f.boost }, 0)\n\n  var hasSomeToken = queryTokens.some(function (token) {\n    return this.tokenStore.has(token)\n  }, this)\n\n  if (!hasSomeToken) return []\n\n  queryTokens\n    .forEach(function (token, i, tokens) {\n      var tf = 1 / tokens.length * this._fields.length * fieldBoosts,\n          self = this\n\n      var set = this.tokenStore.expand(token).reduce(function (memo, key) {\n        var pos = self.corpusTokens.indexOf(key),\n            idf = self.idf(key),\n            similarityBoost = 1,\n            set = new lunr.SortedSet\n\n        // if the expanded key is not an exact match to the token then\n        // penalise the score for this key by how different the key is\n        // to the token.\n        if (key !== token) {\n          var diff = Math.max(3, key.length - token.length)\n          similarityBoost = 1 / Math.log(diff)\n        }\n\n        // calculate the query tf-idf score for this token\n        // applying an similarityBoost to ensure exact matches\n        // these rank higher than expanded terms\n        if (pos > -1) queryArr[pos] = tf * idf * similarityBoost\n\n        // add all the documents that have this key into a set\n        Object.keys(self.tokenStore.get(key)).forEach(function (ref) { set.add(ref) })\n\n        return memo.union(set)\n      }, new lunr.SortedSet)\n\n      documentSets.push(set)\n    }, this)\n\n  var documentSet = documentSets.reduce(function (memo, set) {\n    return memo.intersect(set)\n  })\n\n  var queryVector = new lunr.Vector (queryArr)\n\n  return documentSet\n    .map(function (ref) {\n      return { ref: ref, score: queryVector.similarity(this.documentVector(ref)) }\n    }, this)\n    .sort(function (a, b) {\n      return b.score - a.score\n    })\n}\n\n/**\n * Generates a vector containing all the tokens in the document matching the\n * passed documentRef.\n *\n * The vector contains the tf-idf score for each token contained in the\n * document with the passed documentRef.  The vector will contain an element\n * for every token in the indexes corpus, if the document does not contain that\n * token the element will be 0.\n *\n * @param {Object} documentRef The ref to find the document with.\n * @returns {lunr.Vector}\n * @private\n * @memberOf Index\n */\nlunr.Index.prototype.documentVector = function (documentRef) {\n  var documentTokens = this.documentStore.get(documentRef),\n      documentTokensLength = documentTokens.length,\n      documentArr = lunr.utils.zeroFillArray(this.corpusTokens.length)\n\n  for (var i = 0; i < documentTokensLength; i++) {\n    var token = documentTokens.elements[i],\n        tf = this.tokenStore.get(token)[documentRef] ? \n          this.tokenStore.get(token)[documentRef].tf : null,\n        idf = this.idf(token)\n\n    documentArr[this.corpusTokens.indexOf(token)] = tf * idf\n  };\n\n  return new lunr.Vector (documentArr)\n}\n\n/**\n * Returns a representation of the index ready for serialisation.\n *\n * @returns {Object}\n * @memberOf Index\n */\nlunr.Index.prototype.toJSON = function () {\n  return {\n    version: lunr.version,\n    fields: this._fields,\n    ref: this._ref,\n    documentStore: this.documentStore.toJSON(),\n    tokenStore: this.tokenStore.toJSON(),\n    corpusTokens: this.corpusTokens.toJSON(),\n    pipeline: this.pipeline.toJSON()\n  }\n}\n/*!\n * lunr.Store\n * Copyright (C) 2013 Oliver Nightingale\n */\n\n/**\n * lunr.Store is a simple key-value store used for storing sets of tokens for\n * documents stored in index.\n *\n * @constructor\n * @module\n */\nlunr.Store = function () {\n  this.store = {}\n  this.length = 0\n}\n\n/**\n * Loads a previously serialised store\n *\n * @param {Object} serialisedData The serialised store to load.\n * @returns {lunr.Store}\n * @memberOf Store\n */\nlunr.Store.load = function (serialisedData) {\n  var store = new this\n\n  store.length = serialisedData.length\n  store.store = Object.keys(serialisedData.store).reduce(function (memo, key) {\n    memo[key] = lunr.SortedSet.load(serialisedData.store[key])\n    return memo\n  }, {})\n\n  return store\n}\n\n/**\n * Stores the given tokens in the store against the given id.\n *\n * @param {Object} id The key used to store the tokens against.\n * @param {Object} tokens The tokens to store against the key.\n * @memberOf Store\n */\nlunr.Store.prototype.set = function (id, tokens) {\n  this.store[id] = tokens\n  this.length = Object.keys(this.store).length\n}\n\n/**\n * Retrieves the tokens from the store for a given key.\n *\n * @param {Object} id The key to lookup and retrieve from the store.\n * @returns {Object}\n * @memberOf Store\n */\nlunr.Store.prototype.get = function (id) {\n  return this.store[id]\n}\n\n/**\n * Checks whether the store contains a key.\n *\n * @param {Object} id The id to look up in the store.\n * @returns {Boolean}\n * @memberOf Store\n */\nlunr.Store.prototype.has = function (id) {\n  return id in this.store\n}\n\n/**\n * Removes the value for a key in the store.\n *\n * @param {Object} id The id to remove from the store.\n * @memberOf Store\n */\nlunr.Store.prototype.remove = function (id) {\n  if (!this.has(id)) return\n\n  delete this.store[id]\n  this.length--\n}\n\n/**\n * Returns a representation of the store ready for serialisation.\n *\n * @returns {Object}\n * @memberOf Store\n */\nlunr.Store.prototype.toJSON = function () {\n  return {\n    store: this.store,\n    length: this.length\n  }\n}\n\n/*!\n * lunr.stemmer\n * Copyright (C) 2013 Oliver Nightingale\n * Includes code from - http://tartarus.org/~martin/PorterStemmer/js.txt\n */\n\n/**\n * lunr.stemmer is an english language stemmer, this is a JavaScript\n * implementation of the PorterStemmer taken from http://tartaurs.org/~martin\n *\n * @module\n * @param {String} str The string to stem\n * @returns {String}\n * @see lunr.Pipeline\n */\nlunr.stemmer = (function(){\n  var step2list = {\n      \"ational\" : \"ate\",\n      \"tional\" : \"tion\",\n      \"enci\" : \"ence\",\n      \"anci\" : \"ance\",\n      \"izer\" : \"ize\",\n      \"bli\" : \"ble\",\n      \"alli\" : \"al\",\n      \"entli\" : \"ent\",\n      \"eli\" : \"e\",\n      \"ousli\" : \"ous\",\n      \"ization\" : \"ize\",\n      \"ation\" : \"ate\",\n      \"ator\" : \"ate\",\n      \"alism\" : \"al\",\n      \"iveness\" : \"ive\",\n      \"fulness\" : \"ful\",\n      \"ousness\" : \"ous\",\n      \"aliti\" : \"al\",\n      \"iviti\" : \"ive\",\n      \"biliti\" : \"ble\",\n      \"logi\" : \"log\"\n    },\n\n    step3list = {\n      \"icate\" : \"ic\",\n      \"ative\" : \"\",\n      \"alize\" : \"al\",\n      \"iciti\" : \"ic\",\n      \"ical\" : \"ic\",\n      \"ful\" : \"\",\n      \"ness\" : \"\"\n    },\n\n    c = \"[^aeiou]\",          // consonant\n    v = \"[aeiouy]\",          // vowel\n    C = c + \"[^aeiouy]*\",    // consonant sequence\n    V = v + \"[aeiou]*\",      // vowel sequence\n\n    mgr0 = \"^(\" + C + \")?\" + V + C,               // [C]VC... is m>0\n    meq1 = \"^(\" + C + \")?\" + V + C + \"(\" + V + \")?$\",  // [C]VC[V] is m=1\n    mgr1 = \"^(\" + C + \")?\" + V + C + V + C,       // [C]VCVC... is m>1\n    s_v = \"^(\" + C + \")?\" + v;                   // vowel in stem\n\n  return function (w) {\n    var   stem,\n      suffix,\n      firstch,\n      re,\n      re2,\n      re3,\n      re4;\n\n    if (w.length < 3) { return w; }\n\n    firstch = w.substr(0,1);\n    if (firstch == \"y\") {\n      w = firstch.toUpperCase() + w.substr(1);\n    }\n\n    // Step 1a\n    re = /^(.+?)(ss|i)es$/;\n    re2 = /^(.+?)([^s])s$/;\n\n    if (re.test(w)) { w = w.replace(re,\"$1$2\"); }\n    else if (re2.test(w)) { w = w.replace(re2,\"$1$2\"); }\n\n    // Step 1b\n    re = /^(.+?)eed$/;\n    re2 = /^(.+?)(ed|ing)$/;\n    if (re.test(w)) {\n      var fp = re.exec(w);\n      re = new RegExp(mgr0);\n      if (re.test(fp[1])) {\n        re = /.$/;\n        w = w.replace(re,\"\");\n      }\n    } else if (re2.test(w)) {\n      var fp = re2.exec(w);\n      stem = fp[1];\n      re2 = new RegExp(s_v);\n      if (re2.test(stem)) {\n        w = stem;\n        re2 = /(at|bl|iz)$/;\n        re3 = new RegExp(\"([^aeiouylsz])\\\\1$\");\n        re4 = new RegExp(\"^\" + C + v + \"[^aeiouwxy]$\");\n        if (re2.test(w)) {  w = w + \"e\"; }\n        else if (re3.test(w)) { re = /.$/; w = w.replace(re,\"\"); }\n        else if (re4.test(w)) { w = w + \"e\"; }\n      }\n    }\n\n    // Step 1c\n    re = /^(.+?)y$/;\n    if (re.test(w)) {\n      var fp = re.exec(w);\n      stem = fp[1];\n      re = new RegExp(s_v);\n      if (re.test(stem)) { w = stem + \"i\"; }\n    }\n\n    // Step 2\n    re = /^(.+?)(ational|tional|enci|anci|izer|bli|alli|entli|eli|ousli|ization|ation|ator|alism|iveness|fulness|ousness|aliti|iviti|biliti|logi)$/;\n    if (re.test(w)) {\n      var fp = re.exec(w);\n      stem = fp[1];\n      suffix = fp[2];\n      re = new RegExp(mgr0);\n      if (re.test(stem)) {\n        w = stem + step2list[suffix];\n      }\n    }\n\n    // Step 3\n    re = /^(.+?)(icate|ative|alize|iciti|ical|ful|ness)$/;\n    if (re.test(w)) {\n      var fp = re.exec(w);\n      stem = fp[1];\n      suffix = fp[2];\n      re = new RegExp(mgr0);\n      if (re.test(stem)) {\n        w = stem + step3list[suffix];\n      }\n    }\n\n    // Step 4\n    re = /^(.+?)(al|ance|ence|er|ic|able|ible|ant|ement|ment|ent|ou|ism|ate|iti|ous|ive|ize)$/;\n    re2 = /^(.+?)(s|t)(ion)$/;\n    if (re.test(w)) {\n      var fp = re.exec(w);\n      stem = fp[1];\n      re = new RegExp(mgr1);\n      if (re.test(stem)) {\n        w = stem;\n      }\n    } else if (re2.test(w)) {\n      var fp = re2.exec(w);\n      stem = fp[1] + fp[2];\n      re2 = new RegExp(mgr1);\n      if (re2.test(stem)) {\n        w = stem;\n      }\n    }\n\n    // Step 5\n    re = /^(.+?)e$/;\n    if (re.test(w)) {\n      var fp = re.exec(w);\n      stem = fp[1];\n      re = new RegExp(mgr1);\n      re2 = new RegExp(meq1);\n      re3 = new RegExp(\"^\" + C + v + \"[^aeiouwxy]$\");\n      if (re.test(stem) || (re2.test(stem) && !(re3.test(stem)))) {\n        w = stem;\n      }\n    }\n\n    re = /ll$/;\n    re2 = new RegExp(mgr1);\n    if (re.test(w) && re2.test(w)) {\n      re = /.$/;\n      w = w.replace(re,\"\");\n    }\n\n    // and turn initial Y back to y\n\n    if (firstch == \"y\") {\n      w = firstch.toLowerCase() + w.substr(1);\n    }\n\n    return w;\n  }\n})();\n\nlunr.Pipeline.registerFunction(lunr.stemmer, 'stemmer')\n/*!\n * lunr.stopWordFilter\n * Copyright (C) 2013 Oliver Nightingale\n */\n\n/**\n * lunr.stopWordFilter is an English language stop word list filter, any words\n * contained in the list will not be passed through the filter.\n *\n * This is intended to be used in the Pipeline. If the token does not pass the\n * filter then undefined will be returned.\n *\n * @module\n * @param {String} token The token to pass through the filter\n * @returns {String}\n * @see lunr.Pipeline\n */\nlunr.stopWordFilter = function (token) {\n  if (lunr.stopWordFilter.stopWords.indexOf(token) === -1) return token\n}\n\nlunr.stopWordFilter.stopWords = new lunr.SortedSet\nlunr.stopWordFilter.stopWords.length = 119\nlunr.stopWordFilter.stopWords.elements = [\n  \"\",\n  \"a\",\n  \"able\",\n  \"about\",\n  \"across\",\n  \"after\",\n  \"all\",\n  \"almost\",\n  \"also\",\n  \"am\",\n  \"among\",\n  \"an\",\n  \"and\",\n  \"any\",\n  \"are\",\n  \"as\",\n  \"at\",\n  \"be\",\n  \"because\",\n  \"been\",\n  \"but\",\n  \"by\",\n  \"can\",\n  \"cannot\",\n  \"could\",\n  \"dear\",\n  \"did\",\n  \"do\",\n  \"does\",\n  \"either\",\n  \"else\",\n  \"ever\",\n  \"every\",\n  \"for\",\n  \"from\",\n  \"get\",\n  \"got\",\n  \"had\",\n  \"has\",\n  \"have\",\n  \"he\",\n  \"her\",\n  \"hers\",\n  \"him\",\n  \"his\",\n  \"how\",\n  \"however\",\n  \"i\",\n  \"if\",\n  \"in\",\n  \"into\",\n  \"is\",\n  \"it\",\n  \"its\",\n  \"just\",\n  \"least\",\n  \"let\",\n  \"like\",\n  \"likely\",\n  \"may\",\n  \"me\",\n  \"might\",\n  \"most\",\n  \"must\",\n  \"my\",\n  \"neither\",\n  \"no\",\n  \"nor\",\n  \"not\",\n  \"of\",\n  \"off\",\n  \"often\",\n  \"on\",\n  \"only\",\n  \"or\",\n  \"other\",\n  \"our\",\n  \"own\",\n  \"rather\",\n  \"said\",\n  \"say\",\n  \"says\",\n  \"she\",\n  \"should\",\n  \"since\",\n  \"so\",\n  \"some\",\n  \"than\",\n  \"that\",\n  \"the\",\n  \"their\",\n  \"them\",\n  \"then\",\n  \"there\",\n  \"these\",\n  \"they\",\n  \"this\",\n  \"tis\",\n  \"to\",\n  \"too\",\n  \"twas\",\n  \"us\",\n  \"wants\",\n  \"was\",\n  \"we\",\n  \"were\",\n  \"what\",\n  \"when\",\n  \"where\",\n  \"which\",\n  \"while\",\n  \"who\",\n  \"whom\",\n  \"why\",\n  \"will\",\n  \"with\",\n  \"would\",\n  \"yet\",\n  \"you\",\n  \"your\"\n]\n\nlunr.Pipeline.registerFunction(lunr.stopWordFilter, 'stopWordFilter')\n/*!\n * lunr.stemmer\n * Copyright (C) 2013 Oliver Nightingale\n * Includes code from - http://tartarus.org/~martin/PorterStemmer/js.txt\n */\n\n/**\n * lunr.TokenStore is used for efficient storing and lookup of the reverse\n * index of token to document ref.\n *\n * @constructor\n */\nlunr.TokenStore = function () {\n  this.root = { docs: {} }\n  this.length = 0\n}\n\n/**\n * Loads a previously serialised token store\n *\n * @param {Object} serialisedData The serialised token store to load.\n * @returns {lunr.TokenStore}\n * @memberOf TokenStore\n */\nlunr.TokenStore.load = function (serialisedData) {\n  var store = new this\n\n  store.root = serialisedData.root\n  store.length = serialisedData.length\n\n  return store\n}\n\n/**\n * Adds a new token doc pair to the store.\n *\n * By default this function starts at the root of the current store, however\n * it can start at any node of any token store if required.\n *\n * @param {String} token The token to store the doc under\n * @param {Object} doc The doc to store against the token\n * @param {Object} root An optional node at which to start looking for the\n * correct place to enter the doc, by default the root of this lunr.TokenStore\n * is used.\n * @memberOf TokenStore\n */\nlunr.TokenStore.prototype.add = function (token, doc, root) {\n  var root = root || this.root,\n      key = token[0],\n      rest = token.slice(1)\n\n  if (!(key in root)) root[key] = {docs: {}}\n\n  if (rest.length === 0) {\n    root[key].docs[doc.ref] = doc\n    this.length += 1\n    return\n  } else {\n    return this.add(rest, doc, root[key])\n  }\n}\n\n/**\n * Checks whether this key is contained within this lunr.TokenStore.\n *\n * By default this function starts at the root of the current store, however\n * it can start at any node of any token store if required.\n *\n * @param {String} token The token to check for\n * @param {Object} root An optional node at which to start\n * @memberOf TokenStore\n */\nlunr.TokenStore.prototype.has = function (token) {\n  if (!token) return false\n\n  var node = this.root\n\n  for (var i = 0; i < token.length; i++) {\n    if (!node[token[i]]) return false\n\n    node = node[token[i]]\n  }\n\n  return true\n}\n\n/**\n * Retrieve a node from the token store for a given token.\n *\n * By default this function starts at the root of the current store, however\n * it can start at any node of any token store if required.\n *\n * @param {String} token The token to get the node for.\n * @param {Object} root An optional node at which to start.\n * @returns {Object}\n * @see TokenStore.prototype.get\n * @memberOf TokenStore\n */\nlunr.TokenStore.prototype.getNode = function (token) {\n  if (!token) return {}\n\n  var node = this.root\n\n  for (var i = 0; i < token.length; i++) {\n    if (!node[token[i]]) return {}\n\n    node = node[token[i]]\n  }\n\n  return node\n}\n\n/**\n * Retrieve the documents for a node for the given token.\n *\n * By default this function starts at the root of the current store, however\n * it can start at any node of any token store if required.\n *\n * @param {String} token The token to get the documents for.\n * @param {Object} root An optional node at which to start.\n * @returns {Object}\n * @memberOf TokenStore\n */\nlunr.TokenStore.prototype.get = function (token, root) {\n  return this.getNode(token, root).docs || {}\n}\n\nlunr.TokenStore.prototype.count = function (token, root) {\n  return Object.keys(this.get(token, root)).length\n}\n\n/**\n * Remove the document identified by ref from the token in the store.\n *\n * By default this function starts at the root of the current store, however\n * it can start at any node of any token store if required.\n *\n * @param {String} token The token to get the documents for.\n * @param {String} ref The ref of the document to remove from this token.\n * @param {Object} root An optional node at which to start.\n * @returns {Object}\n * @memberOf TokenStore\n */\nlunr.TokenStore.prototype.remove = function (token, ref) {\n  if (!token) return\n  var node = this.root\n\n  for (var i = 0; i < token.length; i++) {\n    if (!(token[i] in node)) return\n    node = node[token[i]]\n  }\n\n  delete node.docs[ref]\n}\n\n/**\n * Find all the possible suffixes of the passed token using tokens\n * currently in the store.\n *\n * @param {String} token The token to expand.\n * @returns {Array}\n * @memberOf TokenStore\n */\nlunr.TokenStore.prototype.expand = function (token, memo) {\n  var root = this.getNode(token),\n      docs = root.docs || {},\n      memo = memo || []\n\n  if (Object.keys(docs).length) memo.push(token)\n\n  Object.keys(root)\n    .forEach(function (key) {\n      if (key === 'docs') return\n\n      memo.concat(this.expand(token + key, memo))\n    }, this)\n\n  return memo\n}\n\n/**\n * Returns a representation of the token store ready for serialisation.\n *\n * @returns {Object}\n * @memberOf TokenStore\n */\nlunr.TokenStore.prototype.toJSON = function () {\n  return {\n    root: this.root,\n    length: this.length\n  }\n}"
  },
  {
    "path": "content/js/nprogress.js",
    "content": "/* NProgress, (c) 2013, 2014 Rico Sta. Cruz - http://ricostacruz.com/nprogress\n * @license MIT */\n\n;(function(root, factory) {\n\n  if (typeof define === 'function' && define.amd) {\n    define(factory);\n  } else if (typeof exports === 'object') {\n    module.exports = factory();\n  } else {\n    root.NProgress = factory();\n  }\n\n})(this, function() {\n  var NProgress = {};\n\n  NProgress.version = '0.1.6';\n\n  var Settings = NProgress.settings = {\n    minimum: 0.08,\n    easing: 'ease',\n    positionUsing: '',\n    speed: 200,\n    trickle: true,\n    trickleRate: 0.02,\n    trickleSpeed: 800,\n    showSpinner: true,\n    barSelector: '[role=\"bar\"]',\n    spinnerSelector: '[role=\"spinner\"]',\n    parent: 'body',\n    template: '<div class=\"bar\" role=\"bar\"><div class=\"peg\"></div></div><div class=\"spinner\" role=\"spinner\"><div class=\"spinner-icon\"></div></div>'\n  };\n\n  /**\n   * Updates configuration.\n   *\n   *     NProgress.configure({\n   *       minimum: 0.1\n   *     });\n   */\n  NProgress.configure = function(options) {\n    var key, value;\n    for (key in options) {\n      value = options[key];\n      if (value !== undefined && options.hasOwnProperty(key)) Settings[key] = value;\n    }\n\n    return this;\n  };\n\n  /**\n   * Last number.\n   */\n\n  NProgress.status = null;\n\n  /**\n   * Sets the progress bar status, where `n` is a number from `0.0` to `1.0`.\n   *\n   *     NProgress.set(0.4);\n   *     NProgress.set(1.0);\n   */\n\n  NProgress.set = function(n) {\n    var started = NProgress.isStarted();\n\n    n = clamp(n, Settings.minimum, 1);\n    NProgress.status = (n === 1 ? null : n);\n\n    var progress = NProgress.render(!started),\n        bar      = progress.querySelector(Settings.barSelector),\n        speed    = Settings.speed,\n        ease     = Settings.easing;\n\n    progress.offsetWidth; /* Repaint */\n\n    queue(function(next) {\n      // Set positionUsing if it hasn't already been set\n      if (Settings.positionUsing === '') Settings.positionUsing = NProgress.getPositioningCSS();\n\n      // Add transition\n      css(bar, barPositionCSS(n, speed, ease));\n\n      if (n === 1) {\n        // Fade out\n        css(progress, { \n          transition: 'none', \n          opacity: 1 \n        });\n        progress.offsetWidth; /* Repaint */\n\n        setTimeout(function() {\n          css(progress, { \n            transition: 'all ' + speed + 'ms linear', \n            opacity: 0 \n          });\n          setTimeout(function() {\n            NProgress.remove();\n            next();\n          }, speed);\n        }, speed);\n      } else {\n        setTimeout(next, speed);\n      }\n    });\n\n    return this;\n  };\n\n  NProgress.isStarted = function() {\n    return typeof NProgress.status === 'number';\n  };\n\n  /**\n   * Shows the progress bar.\n   * This is the same as setting the status to 0%, except that it doesn't go backwards.\n   *\n   *     NProgress.start();\n   *\n   */\n  NProgress.start = function() {\n    if (!NProgress.status) NProgress.set(0);\n\n    var work = function() {\n      setTimeout(function() {\n        if (!NProgress.status) return;\n        NProgress.trickle();\n        work();\n      }, Settings.trickleSpeed);\n    };\n\n    if (Settings.trickle) work();\n\n    return this;\n  };\n\n  /**\n   * Hides the progress bar.\n   * This is the *sort of* the same as setting the status to 100%, with the\n   * difference being `done()` makes some placebo effect of some realistic motion.\n   *\n   *     NProgress.done();\n   *\n   * If `true` is passed, it will show the progress bar even if its hidden.\n   *\n   *     NProgress.done(true);\n   */\n\n  NProgress.done = function(force) {\n    if (!force && !NProgress.status) return this;\n\n    return NProgress.inc(0.3 + 0.5 * Math.random()).set(1);\n  };\n\n  /**\n   * Increments by a random amount.\n   */\n\n  NProgress.inc = function(amount) {\n    var n = NProgress.status;\n\n    if (!n) {\n      return NProgress.start();\n    } else {\n      if (typeof amount !== 'number') {\n        amount = (1 - n) * clamp(Math.random() * n, 0.1, 0.95);\n      }\n\n      n = clamp(n + amount, 0, 0.994);\n      return NProgress.set(n);\n    }\n  };\n\n  NProgress.trickle = function() {\n    return NProgress.inc(Math.random() * Settings.trickleRate);\n  };\n\n  /**\n   * Waits for all supplied jQuery promises and\n   * increases the progress as the promises resolve.\n   * \n   * @param $promise jQUery Promise\n   */\n  (function() {\n    var initial = 0, current = 0;\n    \n    NProgress.promise = function($promise) {\n      if (!$promise || $promise.state() == \"resolved\") {\n        return this;\n      }\n      \n      if (current == 0) {\n        NProgress.start();\n      }\n      \n      initial++;\n      current++;\n      \n      $promise.always(function() {\n        current--;\n        if (current == 0) {\n            initial = 0;\n            NProgress.done();\n        } else {\n            NProgress.set((initial - current) / initial);\n        }\n      });\n      \n      return this;\n    };\n    \n  })();\n\n  /**\n   * (Internal) renders the progress bar markup based on the `template`\n   * setting.\n   */\n\n  NProgress.render = function(fromStart) {\n    if (NProgress.isRendered()) return document.getElementById('nprogress');\n\n    addClass(document.documentElement, 'nprogress-busy');\n    \n    var progress = document.createElement('div');\n    progress.id = 'nprogress';\n    progress.innerHTML = Settings.template;\n\n    var bar      = progress.querySelector(Settings.barSelector),\n        perc     = fromStart ? '-100' : toBarPerc(NProgress.status || 0),\n        parent   = document.querySelector(Settings.parent),\n        spinner;\n    \n    css(bar, {\n      transition: 'all 0 linear',\n      transform: 'translate3d(' + perc + '%,0,0)'\n    });\n\n    if (!Settings.showSpinner) {\n      spinner = progress.querySelector(Settings.spinnerSelector);\n      spinner && removeElement(spinner);\n    }\n\n    if (parent != document.body) {\n      addClass(parent, 'nprogress-custom-parent');\n    }\n\n    parent.appendChild(progress);\n    return progress;\n  };\n\n  /**\n   * Removes the element. Opposite of render().\n   */\n\n  NProgress.remove = function() {\n    removeClass(document.documentElement, 'nprogress-busy');\n    removeClass(document.querySelector(Settings.parent), 'nprogress-custom-parent')\n    var progress = document.getElementById('nprogress');\n    progress && removeElement(progress);\n  };\n\n  /**\n   * Checks if the progress bar is rendered.\n   */\n\n  NProgress.isRendered = function() {\n    return !!document.getElementById('nprogress');\n  };\n\n  /**\n   * Determine which positioning CSS rule to use.\n   */\n\n  NProgress.getPositioningCSS = function() {\n    // Sniff on document.body.style\n    var bodyStyle = document.body.style;\n\n    // Sniff prefixes\n    var vendorPrefix = ('WebkitTransform' in bodyStyle) ? 'Webkit' :\n                       ('MozTransform' in bodyStyle) ? 'Moz' :\n                       ('msTransform' in bodyStyle) ? 'ms' :\n                       ('OTransform' in bodyStyle) ? 'O' : '';\n\n    if (vendorPrefix + 'Perspective' in bodyStyle) {\n      // Modern browsers with 3D support, e.g. Webkit, IE10\n      return 'translate3d';\n    } else if (vendorPrefix + 'Transform' in bodyStyle) {\n      // Browsers without 3D support, e.g. IE9\n      return 'translate';\n    } else {\n      // Browsers without translate() support, e.g. IE7-8\n      return 'margin';\n    }\n  };\n\n  /**\n   * Helpers\n   */\n\n  function clamp(n, min, max) {\n    if (n < min) return min;\n    if (n > max) return max;\n    return n;\n  }\n\n  /**\n   * (Internal) converts a percentage (`0..1`) to a bar translateX\n   * percentage (`-100%..0%`).\n   */\n\n  function toBarPerc(n) {\n    return (-1 + n) * 100;\n  }\n\n\n  /**\n   * (Internal) returns the correct CSS for changing the bar's\n   * position given an n percentage, and speed and ease from Settings\n   */\n\n  function barPositionCSS(n, speed, ease) {\n    var barCSS;\n\n    if (Settings.positionUsing === 'translate3d') {\n      barCSS = { transform: 'translate3d('+toBarPerc(n)+'%,0,0)' };\n    } else if (Settings.positionUsing === 'translate') {\n      barCSS = { transform: 'translate('+toBarPerc(n)+'%,0)' };\n    } else {\n      barCSS = { 'margin-left': toBarPerc(n)+'%' };\n    }\n\n    barCSS.transition = 'all '+speed+'ms '+ease;\n\n    return barCSS;\n  }\n\n  /**\n   * (Internal) Queues a function to be executed.\n   */\n\n  var queue = (function() {\n    var pending = [];\n    \n    function next() {\n      var fn = pending.shift();\n      if (fn) {\n        fn(next);\n      }\n    }\n\n    return function(fn) {\n      pending.push(fn);\n      if (pending.length == 1) next();\n    };\n  })();\n\n  /**\n   * (Internal) Applies css properties to an element, similar to the jQuery \n   * css method.\n   *\n   * While this helper does assist with vendor prefixed property names, it \n   * does not perform any manipulation of values prior to setting styles.\n   */\n\n  var css = (function() {\n    var cssPrefixes = [ 'Webkit', 'O', 'Moz', 'ms' ],\n        cssProps    = {};\n\n    function camelCase(string) {\n      return string.replace(/^-ms-/, 'ms-').replace(/-([\\da-z])/gi, function(match, letter) {\n        return letter.toUpperCase();\n      });\n    }\n\n    function getVendorProp(name) {\n      var style = document.body.style;\n      if (name in style) return name;\n\n      var i = cssPrefixes.length,\n          capName = name.charAt(0).toUpperCase() + name.slice(1),\n          vendorName;\n      while (i--) {\n        vendorName = cssPrefixes[i] + capName;\n        if (vendorName in style) return vendorName;\n      }\n\n      return name;\n    }\n\n    function getStyleProp(name) {\n      name = camelCase(name);\n      return cssProps[name] || (cssProps[name] = getVendorProp(name));\n    }\n\n    function applyCss(element, prop, value) {\n      prop = getStyleProp(prop);\n      element.style[prop] = value;\n    }\n\n    return function(element, properties) {\n      var args = arguments,\n          prop, \n          value;\n\n      if (args.length == 2) {\n        for (prop in properties) {\n          value = properties[prop];\n          if (value !== undefined && properties.hasOwnProperty(prop)) applyCss(element, prop, value);\n        }\n      } else {\n        applyCss(element, args[1], args[2]);\n      }\n    }\n  })();\n\n  /**\n   * (Internal) Determines if an element or space separated list of class names contains a class name.\n   */\n\n  function hasClass(element, name) {\n    var list = typeof element == 'string' ? element : classList(element);\n    return list.indexOf(' ' + name + ' ') >= 0;\n  }\n\n  /**\n   * (Internal) Adds a class to an element.\n   */\n\n  function addClass(element, name) {\n    var oldList = classList(element),\n        newList = oldList + name;\n\n    if (hasClass(oldList, name)) return; \n\n    // Trim the opening space.\n    element.className = newList.substring(1);\n  }\n\n  /**\n   * (Internal) Removes a class from an element.\n   */\n\n  function removeClass(element, name) {\n    var oldList = classList(element),\n        newList;\n\n    if (!hasClass(element, name)) return;\n\n    // Replace the class name.\n    newList = oldList.replace(' ' + name + ' ', ' ');\n\n    // Trim the opening and closing spaces.\n    element.className = newList.substring(1, newList.length - 1);\n  }\n\n  /**\n   * (Internal) Gets a space separated list of the class names on the element. \n   * The list is wrapped with a single space on each end to facilitate finding \n   * matches within the list.\n   */\n\n  function classList(element) {\n    return (' ' + (element.className || '') + ' ').replace(/\\s+/gi, ' ');\n  }\n\n  /**\n   * (Internal) Removes an element from the DOM.\n   */\n\n  function removeElement(element) {\n    element && element.parentNode && element.parentNode.removeChild(element);\n  }\n\n  return NProgress;\n});\n\n"
  },
  {
    "path": "content/js/site.js",
    "content": "/*\n _             _\n(_)           (_)\n _  ___  _ __  _  ___\n| |/ _ \\| '_ \\| |/ __|\n| | (_) | | | | | (__\n|_|\\___/|_| |_|_|\\___|\n\n*/\n\nvar ionicSite = (function(){\n  var smoothScrollingTo,\n      fixedMenu,\n      winHeight = $(window).height(),\n      docContent = $('.main-content'),\n      devicePreview,\n      defaultScreen;\n\n  window.rAF = (function(){\n    return  window.requestAnimationFrame       ||\n            window.webkitRequestAnimationFrame ||\n            window.mozRequestAnimationFrame    ||\n            function( callback ){\n              window.setTimeout(callback, 16);\n            };\n  })();\n\n  /* Header menu toggle for mobile */\n  $(\"#menu-toggle\").click(function(e) {\n      e.preventDefault();\n      $(this).toggleClass(\"active\");\n  });\n\n  // smooth scroll\n  $('a[href*=#]:not([href=#])').click(function() {\n    if (location.pathname.replace(/^\\//,'') == this.pathname.replace(/^\\//,'') && location.hostname == this.hostname) {\n      var target = $(this.hash);\n      target = target.length ? target : $('[name=' + this.hash.slice(1) +']');\n      if (target.length) {\n        smoothScrollingTo = '#' + target.attr('id');\n        $('html,body').animate({ scrollTop: target.offset().top }, 100, 'swing',\n          function() {\n            if(docContent) {\n              previewSection(smoothScrollingTo);\n            }\n            smoothScrollingTo = undefined;\n          });\n        return false;\n      }\n    }\n  });\n\n  // left menu link highlight\n  var leftMenu = $('.left-menu');\n  var activeLink = leftMenu.find('[href=\"' + window.location.pathname + '\"]');\n  activeLink.parents('li').addClass(\"active\");\n\n  leftMenu.find('.api-section').click(function(){\n    if( $(this).attr('href') == '#' ) {\n      $(this).closest('.left-menu').find(\"li\").removeClass('active');\n      $(this).closest('li').toggleClass('active');\n      return false;\n    }\n  });\n\n\n  /* Fixed left menu */\n  (function() {\n    var activeId;\n    fixedMenu = $('.docked-menu');\n    if(fixedMenu.length) {\n\n      var targets = fixedMenu.find('.active-menu').find('a');\n      targets.each(function() {\n        var href = $(this).attr('href');\n        if(href && href.indexOf('#') > -1) {\n          href = href.split('#');\n          href = \"#\" + href[ href.length - 1 ];\n          $(this).attr('href', href);\n        }\n      });\n\n      var scrollSpyOffset = 40;\n      if( $(document.body).hasClass(\"device-preview-page\") ) {\n        scrollSpyOffset = 300;\n      }\n\n      $(document.body).scrollspy({ target: '.docked-menu', offset: scrollSpyOffset });\n\n      var fixedMenuTop = fixedMenu.offset().top;\n      var menuTopPadding = 20;\n      fixedMenu.css({\n        top: menuTopPadding + 'px'\n      });\n\n      function docScroll() {\n        var win = $(window);\n        var scrollTop = win.scrollTop();\n        var winWidth = win.width();\n        if(scrollTop + menuTopPadding > fixedMenuTop && winWidth >= 768) {\n          // middle of the page\n          if(!fixedMenu.hasClass(\"fixed-menu\")) {\n            fixedMenu\n              .css({\n                width: fixedMenu.width() + 'px',\n                top: '20px'\n              })\n              .addClass(\"fixed-menu\");\n          }\n        } else {\n          // top of page\n          if(fixedMenu.hasClass(\"fixed-menu\")) {\n            fixedMenu\n              .removeClass(\"fixed-menu\")\n              .css({\n                width: 'auto',\n                top: '20px'\n              });\n          }\n          if(scrollTop < 200) {\n            $('.active').removeClass(\".active\");\n          }\n        }\n      }\n      $(window).resize(function() {\n        //preFooterTop = $('.pre-footer').offset().top;\n        winHeight = $(window).height();\n        fixedMenu\n            .removeClass(\"fixed-menu\")\n            .css({\n              width: 'auto'\n            });\n        docScroll();\n      });\n      var docScrollGovernor;\n      function governDocScroll(){\n        clearTimeout(docScrollGovernor);\n        docScrollGovernor = setTimeout(docScroll, 15);\n      }\n      $(window).scroll(governDocScroll);\n\n      function scrollSpyChange(e) {\n        if(smoothScrollingTo || !docContent) {\n          window.history.replaceState && window.history.replaceState({}, smoothScrollingTo, smoothScrollingTo);\n          return;\n        }\n\n        var id;\n        if(e.target.children.length > 1) {\n          // this is a top level nav link\n          var activeSublinks = $(e.target).find('.active');\n          if(!activeSublinks.length) {\n            // no children are active for this top level link\n            id = e.target.children[0].hash;\n          }\n        } else if(e.target.children.length === 1) {\n          // this is a sub nav link\n          id = e.target.children[0].hash;\n        }\n\n        if(id) {\n          if(devicePreview) {\n            window.rAF(function(){\n              previewSection(id);\n            });\n          } else {\n            var activeSection = $(id);\n            if(activeSection.length) {\n              window.rAF(function(){\n                docContent.find('.active').removeClass('active');\n                activeSection.addClass(\"active\");\n              });\n            }\n          }\n          window.history.replaceState && window.history.replaceState({}, id, id);\n        }\n      }\n      fixedMenu.on('activate.bs.scrollspy', scrollSpyChange);\n    }\n  })();\n\n  // initDevicePreview\n  (function() {\n    /* Fixed device preview on the docs page */\n    devicePreview = $('.device-preview');\n    if(devicePreview.length) {\n      var orgDeviceTop = devicePreview.offset().top;\n\n      function onScroll() {\n        if($(window).scrollTop() > orgDeviceTop) {\n          if( !devicePreview.hasClass('fixed-preview') ) {\n            devicePreview\n              .css({\n                left: Math.round(devicePreview.offset().left) + 'px'\n              })\n              .addClass(\"fixed-preview\");\n            }\n        } else {\n          if( devicePreview.hasClass('fixed-preview') ) {\n            devicePreview\n              .removeClass(\"fixed-preview\")\n              .css({\n                left: 'auto'\n              });\n          }\n        }\n\n      }\n\n      var scrollGovernor;\n      function governScroll() {\n        clearTimeout(scrollGovernor);\n        scrollGovernor = setTimeout(onScroll, 15);\n      }\n\n      $(window).resize(function(){\n        devicePreview\n            .removeClass(\"fixed-preview\")\n            .css({\n              left: 'auto'\n            });\n        onScroll();\n      });\n      $(window).scroll(governScroll);\n\n      onScroll();\n\n      var firstSection = docContent.find('.docs-section').first();\n      if(firstSection.length) {\n        previewSection( '#' + firstSection[0].id, true );\n      }\n\n      // manually add the activated CSS like how ionic does it\n      devicePreview.on('mousedown', function(e){\n        if(e.target.classList && e.target.classList.contains('button')) {\n          e.target.classList.add('activated');\n        }\n      });\n\n      devicePreview.on('mouseup', function(e){\n        devicePreview.find('.activated').removeClass('activated');\n      });\n\n    }\n  })();\n\n\n  function previewSection(id) {\n    var activeSection = $(id);\n    if(!activeSection.length || !devicePreview) return;\n\n    var title = activeSection.find('h1,h2,h3').first();\n    var newTitle = \"Ionic Components\";\n    activeId = activeSection.attr('id');\n    if(title.length) {\n      newTitle = title.text() + \" - \" + newTitle;\n    }\n    document.title = newTitle;\n\n    docContent.find('.active:not(.tab-item)').removeClass('active');\n    activeSection.addClass(\"active\");\n\n    devicePreview.find('.active-preview').removeClass('active-preview');\n    var docExample = activeSection.find('.doc-example');\n    if( docExample.length ) {\n      // this\n      var exampleId = 'example-' + activeId;\n      var examplePreview = $('#' + exampleId);\n      if(examplePreview.length) {\n        // preview has already been added\n        window.rAF(function(){\n          examplePreview.addClass('active-preview');\n        });\n      } else if(devicePreview) {\n        // create a new example preview\n        devicePreview.append( '<div id=\"' + exampleId + '\" class=\"ionic-body\">' + docExample.html() + '</div>' );\n        window.rAF(function(){\n          $('#' + exampleId)\n            .addClass('active-preview')\n            .find('a').click(function(e){\n              // Activates tabs in tab CSS demo.\n              if ($(this).hasClass('tab-item')) {\n                $(this).siblings('.tab-item').removeClass('active');\n                $(this).addClass('active');\n              }\n              return false;\n            });\n        });\n      }\n\n    } else {\n      window.rAF(function(){\n        if(!defaultScreen) {\n          defaultScreen = devicePreview.find('.default-screen');\n        }\n        defaultScreen.addClass('active-preview');\n      });\n    }\n  }\n\n})();\n\n$(document).ready(function () {\n\n  var searchInput = $('#search-input');\n\n  if(!searchInput.length || $(window).width() < 768) return;\n\n  var searchResultsDiv = $('#search-results');\n\n  setTimeout(function(){\n    // check if there if there is recent search data in local storage\n    try {\n      var localData = JSON.parse(localStorage.getItem('search-index'));\n      if(localData && (localData.ts + 86400000) > Date.now()) {\n        searchReady(localData);\n        return;\n      }\n    } catch(e){}\n\n    $.getJSON('/data/index.json', function (requestData) {\n      searchReady(requestData);\n      setTimeout(function(){\n        try{\n          requestData.ts = Date.now();\n          localStorage.setItem('search-index', JSON.stringify(requestData))\n        }catch(e){}\n      }, 100);\n    });\n\n  }, 5);\n\n  var debounce = function (fn) {\n    var timeout;\n    return function () {\n      var args = Array.prototype.slice.call(arguments),\n          ctx = this;\n\n      clearTimeout(timeout);\n      timeout = setTimeout(function () {\n        fn.apply(ctx, args);\n      }, 50);\n    }\n  }\n\n  function searchReady(data) {\n    var idx = lunr.Index.load(data.index);\n\n    searchInput.closest('.search-bar').css({visibility: 'visible'});\n\n    searchInput.on('keyup', debounce(function () {\n      var query = $(this).val();\n\n      if (!query || query.length < 2 || query == 'Search') {\n        hideResults();\n        return;\n      }\n\n      var\n      results = {\n        api: {},\n        css: {},\n        content: {}\n      },\n      queryResult,\n      queryResultId,\n      queryData,\n      queryResults = idx.search(query);\n\n      for(queryResultId in queryResults) {\n        queryResult = queryResults[queryResultId];\n        queryData = data.ref[ queryResult.ref ];\n\n        if(queryData.l == 'docs_api') {\n          results.api[ queryResult.ref ] = queryData;\n        } else if(queryData.l == 'docs_css') {\n          results.css[ queryResult.ref ] = queryData;\n        } else {\n          results.content[ queryResult.ref ] = queryData;\n        }\n      }\n\n      showResults(results);\n    }));\n\n  }\n\n  function showResults(resultsData) {\n    addResults('#results-api', resultsData.api, 42);\n    addResults('#results-css', resultsData.css, 14);\n    addResults('#results-content', resultsData.content, 14);\n\n    clearTimeout(removeOverlay);\n    searchResultsDiv.show();\n\n    if( !$('#search-overlay').length ) {\n      $(document.body).append('<div id=\"search-overlay\"></div>');\n    }\n\n    setTimeout(function(){\n      $(document.body).addClass('search-open');\n    }, 16);\n  }\n\n  function addResults(sectionId, data, limit) {\n    var links = '';\n    var section = searchResultsDiv.find(sectionId);\n    var total = 0;\n\n    for(var i in data) {\n      links += '<li><a href=\"' + data[i].p + '\">' + data[i].t + '</a></li>';\n      total++;\n      if(total >= limit) break;\n    }\n\n    section.html(links);\n  }\n\n  var removeOverlay;\n  function hideResults(){\n    $(document.body).removeClass('search-open');\n    removeOverlay=setTimeout(function(){\n      $('#search-overlay').remove();\n      searchResultsDiv.hide();\n    }, 200);\n  }\n\n  $(document).keyup(function(e) {\n    if(e.keyCode == 27) {\n      searchInput.val('');\n      hideResults();\n    }\n  });\n\n  searchInput.focus(function(){\n    if( $(this).val() == 'Search' ) {\n      $(this).val('');\n    }\n    $(this).closest('.search-bar').addClass('active');\n  });\n\n  searchInput.blur(function(){\n    $(this).val('Search');\n    $(this).closest('.search-bar').removeClass('active');\n    setTimeout(function(){\n      hideResults();\n    }, 200);\n  });\n\n});\n"
  },
  {
    "path": "content/js/slick.js",
    "content": "/*\n     _ _      _       _\n ___| (_) ___| | __  (_)___\n/ __| | |/ __| |/ /  | / __|\n\\__ \\ | | (__|   < _ | \\__ \\\n|___/_|_|\\___|_|\\_(_)/ |___/\n                   |__/\n\n Version: 1.5.8\n  Author: Ken Wheeler\n Website: http://kenwheeler.github.io\n    Docs: http://kenwheeler.github.io/slick\n    Repo: http://github.com/kenwheeler/slick\n  Issues: http://github.com/kenwheeler/slick/issues\n\n */\n/* global window, document, define, jQuery, setInterval, clearInterval */\n(function(factory) {\n    'use strict';\n    if (typeof define === 'function' && define.amd) {\n        define(['jquery'], factory);\n    } else if (typeof exports !== 'undefined') {\n        module.exports = factory(require('jquery'));\n    } else {\n        factory(jQuery);\n    }\n\n}(function($) {\n    'use strict';\n    var Slick = window.Slick || {};\n\n    Slick = (function() {\n\n        var instanceUid = 0;\n\n        function Slick(element, settings) {\n\n            var _ = this, dataSettings;\n\n            _.defaults = {\n                accessibility: true,\n                adaptiveHeight: false,\n                appendArrows: $(element),\n                appendDots: $(element),\n                arrows: true,\n                asNavFor: null,\n                prevArrow: '<button type=\"button\" data-role=\"none\" class=\"slick-prev\" aria-label=\"Previous\" tabindex=\"0\" role=\"button\">Previous</button>',\n                nextArrow: '<button type=\"button\" data-role=\"none\" class=\"slick-next\" aria-label=\"Next\" tabindex=\"0\" role=\"button\">Next</button>',\n                autoplay: false,\n                autoplaySpeed: 3000,\n                centerMode: false,\n                centerPadding: '50px',\n                cssEase: 'ease',\n                customPaging: function(slider, i) {\n                    return '<button type=\"button\" data-role=\"none\" role=\"button\" aria-required=\"false\" tabindex=\"0\">' + (i + 1) + '</button>';\n                },\n                dots: false,\n                dotsClass: 'slick-dots',\n                draggable: true,\n                easing: 'linear',\n                edgeFriction: 0.35,\n                fade: false,\n                focusOnSelect: false,\n                infinite: true,\n                initialSlide: 0,\n                lazyLoad: 'ondemand',\n                mobileFirst: false,\n                pauseOnHover: true,\n                pauseOnDotsHover: false,\n                respondTo: 'window',\n                responsive: null,\n                rows: 1,\n                rtl: false,\n                slide: '',\n                slidesPerRow: 1,\n                slidesToShow: 1,\n                slidesToScroll: 1,\n                speed: 500,\n                swipe: true,\n                swipeToSlide: false,\n                touchMove: true,\n                touchThreshold: 5,\n                useCSS: true,\n                variableWidth: false,\n                vertical: false,\n                verticalSwiping: false,\n                waitForAnimate: true,\n                zIndex: 1000\n            };\n\n            _.initials = {\n                animating: false,\n                dragging: false,\n                autoPlayTimer: null,\n                currentDirection: 0,\n                currentLeft: null,\n                currentSlide: 0,\n                direction: 1,\n                $dots: null,\n                listWidth: null,\n                listHeight: null,\n                loadIndex: 0,\n                $nextArrow: null,\n                $prevArrow: null,\n                slideCount: null,\n                slideWidth: null,\n                $slideTrack: null,\n                $slides: null,\n                sliding: false,\n                slideOffset: 0,\n                swipeLeft: null,\n                $list: null,\n                touchObject: {},\n                transformsEnabled: false,\n                unslicked: false\n            };\n\n            $.extend(_, _.initials);\n\n            _.activeBreakpoint = null;\n            _.animType = null;\n            _.animProp = null;\n            _.breakpoints = [];\n            _.breakpointSettings = [];\n            _.cssTransitions = false;\n            _.hidden = 'hidden';\n            _.paused = false;\n            _.positionProp = null;\n            _.respondTo = null;\n            _.rowCount = 1;\n            _.shouldClick = true;\n            _.$slider = $(element);\n            _.$slidesCache = null;\n            _.transformType = null;\n            _.transitionType = null;\n            _.visibilityChange = 'visibilitychange';\n            _.windowWidth = 0;\n            _.windowTimer = null;\n\n            dataSettings = $(element).data('slick') || {};\n\n            _.options = $.extend({}, _.defaults, dataSettings, settings);\n\n            _.currentSlide = _.options.initialSlide;\n\n            _.originalSettings = _.options;\n\n            if (typeof document.mozHidden !== 'undefined') {\n                _.hidden = 'mozHidden';\n                _.visibilityChange = 'mozvisibilitychange';\n            } else if (typeof document.webkitHidden !== 'undefined') {\n                _.hidden = 'webkitHidden';\n                _.visibilityChange = 'webkitvisibilitychange';\n            }\n\n            _.autoPlay = $.proxy(_.autoPlay, _);\n            _.autoPlayClear = $.proxy(_.autoPlayClear, _);\n            _.changeSlide = $.proxy(_.changeSlide, _);\n            _.clickHandler = $.proxy(_.clickHandler, _);\n            _.selectHandler = $.proxy(_.selectHandler, _);\n            _.setPosition = $.proxy(_.setPosition, _);\n            _.swipeHandler = $.proxy(_.swipeHandler, _);\n            _.dragHandler = $.proxy(_.dragHandler, _);\n            _.keyHandler = $.proxy(_.keyHandler, _);\n            _.autoPlayIterator = $.proxy(_.autoPlayIterator, _);\n\n            _.instanceUid = instanceUid++;\n\n            // A simple way to check for HTML strings\n            // Strict HTML recognition (must start with <)\n            // Extracted from jQuery v1.11 source\n            _.htmlExpr = /^(?:\\s*(<[\\w\\W]+>)[^>]*)$/;\n\n\n            _.registerBreakpoints();\n            _.init(true);\n            _.checkResponsive(true);\n\n        }\n\n        return Slick;\n\n    }());\n\n    Slick.prototype.addSlide = Slick.prototype.slickAdd = function(markup, index, addBefore) {\n\n        var _ = this;\n\n        if (typeof(index) === 'boolean') {\n            addBefore = index;\n            index = null;\n        } else if (index < 0 || (index >= _.slideCount)) {\n            return false;\n        }\n\n        _.unload();\n\n        if (typeof(index) === 'number') {\n            if (index === 0 && _.$slides.length === 0) {\n                $(markup).appendTo(_.$slideTrack);\n            } else if (addBefore) {\n                $(markup).insertBefore(_.$slides.eq(index));\n            } else {\n                $(markup).insertAfter(_.$slides.eq(index));\n            }\n        } else {\n            if (addBefore === true) {\n                $(markup).prependTo(_.$slideTrack);\n            } else {\n                $(markup).appendTo(_.$slideTrack);\n            }\n        }\n\n        _.$slides = _.$slideTrack.children(this.options.slide);\n\n        _.$slideTrack.children(this.options.slide).detach();\n\n        _.$slideTrack.append(_.$slides);\n\n        _.$slides.each(function(index, element) {\n            $(element).attr('data-slick-index', index);\n        });\n\n        _.$slidesCache = _.$slides;\n\n        _.reinit();\n\n    };\n\n    Slick.prototype.animateHeight = function() {\n        var _ = this;\n        if (_.options.slidesToShow === 1 && _.options.adaptiveHeight === true && _.options.vertical === false) {\n            var targetHeight = _.$slides.eq(_.currentSlide).outerHeight(true);\n            _.$list.animate({\n                height: targetHeight\n            }, _.options.speed);\n        }\n    };\n\n    Slick.prototype.animateSlide = function(targetLeft, callback) {\n\n        var animProps = {},\n            _ = this;\n\n        _.animateHeight();\n\n        if (_.options.rtl === true && _.options.vertical === false) {\n            targetLeft = -targetLeft;\n        }\n        if (_.transformsEnabled === false) {\n            if (_.options.vertical === false) {\n                _.$slideTrack.animate({\n                    left: targetLeft\n                }, _.options.speed, _.options.easing, callback);\n            } else {\n                _.$slideTrack.animate({\n                    top: targetLeft\n                }, _.options.speed, _.options.easing, callback);\n            }\n\n        } else {\n\n            if (_.cssTransitions === false) {\n                if (_.options.rtl === true) {\n                    _.currentLeft = -(_.currentLeft);\n                }\n                $({\n                    animStart: _.currentLeft\n                }).animate({\n                    animStart: targetLeft\n                }, {\n                    duration: _.options.speed,\n                    easing: _.options.easing,\n                    step: function(now) {\n                        now = Math.ceil(now);\n                        if (_.options.vertical === false) {\n                            animProps[_.animType] = 'translate(' +\n                                now + 'px, 0px)';\n                            _.$slideTrack.css(animProps);\n                        } else {\n                            animProps[_.animType] = 'translate(0px,' +\n                                now + 'px)';\n                            _.$slideTrack.css(animProps);\n                        }\n                    },\n                    complete: function() {\n                        if (callback) {\n                            callback.call();\n                        }\n                    }\n                });\n\n            } else {\n\n                _.applyTransition();\n                targetLeft = Math.ceil(targetLeft);\n\n                if (_.options.vertical === false) {\n                    animProps[_.animType] = 'translate3d(' + targetLeft + 'px, 0px, 0px)';\n                } else {\n                    animProps[_.animType] = 'translate3d(0px,' + targetLeft + 'px, 0px)';\n                }\n                _.$slideTrack.css(animProps);\n\n                if (callback) {\n                    setTimeout(function() {\n\n                        _.disableTransition();\n\n                        callback.call();\n                    }, _.options.speed);\n                }\n\n            }\n\n        }\n\n    };\n\n    Slick.prototype.asNavFor = function(index) {\n\n        var _ = this,\n            asNavFor = _.options.asNavFor;\n\n        if ( asNavFor && asNavFor !== null ) {\n            asNavFor = $(asNavFor).not(_.$slider);\n        }\n\n        if ( asNavFor !== null && typeof asNavFor === 'object' ) {\n            asNavFor.each(function() {\n                var target = $(this).slick('getSlick');\n                if(!target.unslicked) {\n                    target.slideHandler(index, true);\n                }\n            });\n        }\n\n    };\n\n    Slick.prototype.applyTransition = function(slide) {\n\n        var _ = this,\n            transition = {};\n\n        if (_.options.fade === false) {\n            transition[_.transitionType] = _.transformType + ' ' + _.options.speed + 'ms ' + _.options.cssEase;\n        } else {\n            transition[_.transitionType] = 'opacity ' + _.options.speed + 'ms ' + _.options.cssEase;\n        }\n\n        if (_.options.fade === false) {\n            _.$slideTrack.css(transition);\n        } else {\n            _.$slides.eq(slide).css(transition);\n        }\n\n    };\n\n    Slick.prototype.autoPlay = function() {\n\n        var _ = this;\n\n        if (_.autoPlayTimer) {\n            clearInterval(_.autoPlayTimer);\n        }\n\n        if (_.slideCount > _.options.slidesToShow && _.paused !== true) {\n            _.autoPlayTimer = setInterval(_.autoPlayIterator,\n                _.options.autoplaySpeed);\n        }\n\n    };\n\n    Slick.prototype.autoPlayClear = function() {\n\n        var _ = this;\n        if (_.autoPlayTimer) {\n            clearInterval(_.autoPlayTimer);\n        }\n\n    };\n\n    Slick.prototype.autoPlayIterator = function() {\n\n        var _ = this;\n\n        if (_.options.infinite === false) {\n\n            if (_.direction === 1) {\n\n                if ((_.currentSlide + 1) === _.slideCount -\n                    1) {\n                    _.direction = 0;\n                }\n\n                _.slideHandler(_.currentSlide + _.options.slidesToScroll);\n\n            } else {\n\n                if ((_.currentSlide - 1 === 0)) {\n\n                    _.direction = 1;\n\n                }\n\n                _.slideHandler(_.currentSlide - _.options.slidesToScroll);\n\n            }\n\n        } else {\n\n            _.slideHandler(_.currentSlide + _.options.slidesToScroll);\n\n        }\n\n    };\n\n    Slick.prototype.buildArrows = function() {\n\n        var _ = this;\n\n        if (_.options.arrows === true ) {\n\n            _.$prevArrow = $(_.options.prevArrow).addClass('slick-arrow');\n            _.$nextArrow = $(_.options.nextArrow).addClass('slick-arrow');\n\n            if( _.slideCount > _.options.slidesToShow ) {\n\n                _.$prevArrow.removeClass('slick-hidden').removeAttr('aria-hidden tabindex');\n                _.$nextArrow.removeClass('slick-hidden').removeAttr('aria-hidden tabindex');\n\n                if (_.htmlExpr.test(_.options.prevArrow)) {\n                    _.$prevArrow.prependTo(_.options.appendArrows);\n                }\n\n                if (_.htmlExpr.test(_.options.nextArrow)) {\n                    _.$nextArrow.appendTo(_.options.appendArrows);\n                }\n\n                if (_.options.infinite !== true) {\n                    _.$prevArrow\n                        .addClass('slick-disabled')\n                        .attr('aria-disabled', 'true');\n                }\n\n            } else {\n\n                _.$prevArrow.add( _.$nextArrow )\n\n                    .addClass('slick-hidden')\n                    .attr({\n                        'aria-disabled': 'true',\n                        'tabindex': '-1'\n                    });\n\n            }\n\n        }\n\n    };\n\n    Slick.prototype.buildDots = function() {\n\n        var _ = this,\n            i, dotString;\n\n        if (_.options.dots === true && _.slideCount > _.options.slidesToShow) {\n\n            dotString = '<ul class=\"' + _.options.dotsClass + '\">';\n\n            for (i = 0; i <= _.getDotCount(); i += 1) {\n                dotString += '<li>' + _.options.customPaging.call(this, _, i) + '</li>';\n            }\n\n            dotString += '</ul>';\n\n            _.$dots = $(dotString).appendTo(\n                _.options.appendDots);\n\n            _.$dots.find('li').first().addClass('slick-active').attr('aria-hidden', 'false');\n\n        }\n\n    };\n\n    Slick.prototype.buildOut = function() {\n\n        var _ = this;\n\n        _.$slides =\n            _.$slider\n                .children( _.options.slide + ':not(.slick-cloned)')\n                .addClass('slick-slide');\n\n        _.slideCount = _.$slides.length;\n\n        _.$slides.each(function(index, element) {\n            $(element)\n                .attr('data-slick-index', index)\n                .data('originalStyling', $(element).attr('style') || '');\n        });\n\n        _.$slidesCache = _.$slides;\n\n        _.$slider.addClass('slick-slider');\n\n        _.$slideTrack = (_.slideCount === 0) ?\n            $('<div class=\"slick-track\"/>').appendTo(_.$slider) :\n            _.$slides.wrapAll('<div class=\"slick-track\"/>').parent();\n\n        _.$list = _.$slideTrack.wrap(\n            '<div aria-live=\"polite\" class=\"slick-list\"/>').parent();\n        _.$slideTrack.css('opacity', 0);\n\n        if (_.options.centerMode === true || _.options.swipeToSlide === true) {\n            _.options.slidesToScroll = 1;\n        }\n\n        $('img[data-lazy]', _.$slider).not('[src]').addClass('slick-loading');\n\n        _.setupInfinite();\n\n        _.buildArrows();\n\n        _.buildDots();\n\n        _.updateDots();\n\n\n        _.setSlideClasses(typeof _.currentSlide === 'number' ? _.currentSlide : 0);\n\n        if (_.options.draggable === true) {\n            _.$list.addClass('draggable');\n        }\n\n    };\n\n    Slick.prototype.buildRows = function() {\n\n        var _ = this, a, b, c, newSlides, numOfSlides, originalSlides,slidesPerSection;\n\n        newSlides = document.createDocumentFragment();\n        originalSlides = _.$slider.children();\n\n        if(_.options.rows > 1) {\n\n            slidesPerSection = _.options.slidesPerRow * _.options.rows;\n            numOfSlides = Math.ceil(\n                originalSlides.length / slidesPerSection\n            );\n\n            for(a = 0; a < numOfSlides; a++){\n                var slide = document.createElement('div');\n                for(b = 0; b < _.options.rows; b++) {\n                    var row = document.createElement('div');\n                    for(c = 0; c < _.options.slidesPerRow; c++) {\n                        var target = (a * slidesPerSection + ((b * _.options.slidesPerRow) + c));\n                        if (originalSlides.get(target)) {\n                            row.appendChild(originalSlides.get(target));\n                        }\n                    }\n                    slide.appendChild(row);\n                }\n                newSlides.appendChild(slide);\n            }\n\n            _.$slider.html(newSlides);\n            _.$slider.children().children().children()\n                .css({\n                    'width':(100 / _.options.slidesPerRow) + '%',\n                    'display': 'inline-block'\n                });\n\n        }\n\n    };\n\n    Slick.prototype.checkResponsive = function(initial, forceUpdate) {\n\n        var _ = this,\n            breakpoint, targetBreakpoint, respondToWidth, triggerBreakpoint = false;\n        var sliderWidth = _.$slider.width();\n        var windowWidth = window.innerWidth || $(window).width();\n\n        if (_.respondTo === 'window') {\n            respondToWidth = windowWidth;\n        } else if (_.respondTo === 'slider') {\n            respondToWidth = sliderWidth;\n        } else if (_.respondTo === 'min') {\n            respondToWidth = Math.min(windowWidth, sliderWidth);\n        }\n\n        if ( _.options.responsive &&\n            _.options.responsive.length &&\n            _.options.responsive !== null) {\n\n            targetBreakpoint = null;\n\n            for (breakpoint in _.breakpoints) {\n                if (_.breakpoints.hasOwnProperty(breakpoint)) {\n                    if (_.originalSettings.mobileFirst === false) {\n                        if (respondToWidth < _.breakpoints[breakpoint]) {\n                            targetBreakpoint = _.breakpoints[breakpoint];\n                        }\n                    } else {\n                        if (respondToWidth > _.breakpoints[breakpoint]) {\n                            targetBreakpoint = _.breakpoints[breakpoint];\n                        }\n                    }\n                }\n            }\n\n            if (targetBreakpoint !== null) {\n                if (_.activeBreakpoint !== null) {\n                    if (targetBreakpoint !== _.activeBreakpoint || forceUpdate) {\n                        _.activeBreakpoint =\n                            targetBreakpoint;\n                        if (_.breakpointSettings[targetBreakpoint] === 'unslick') {\n                            _.unslick(targetBreakpoint);\n                        } else {\n                            _.options = $.extend({}, _.originalSettings,\n                                _.breakpointSettings[\n                                    targetBreakpoint]);\n                            if (initial === true) {\n                                _.currentSlide = _.options.initialSlide;\n                            }\n                            _.refresh(initial);\n                        }\n                        triggerBreakpoint = targetBreakpoint;\n                    }\n                } else {\n                    _.activeBreakpoint = targetBreakpoint;\n                    if (_.breakpointSettings[targetBreakpoint] === 'unslick') {\n                        _.unslick(targetBreakpoint);\n                    } else {\n                        _.options = $.extend({}, _.originalSettings,\n                            _.breakpointSettings[\n                                targetBreakpoint]);\n                        if (initial === true) {\n                            _.currentSlide = _.options.initialSlide;\n                        }\n                        _.refresh(initial);\n                    }\n                    triggerBreakpoint = targetBreakpoint;\n                }\n            } else {\n                if (_.activeBreakpoint !== null) {\n                    _.activeBreakpoint = null;\n                    _.options = _.originalSettings;\n                    if (initial === true) {\n                        _.currentSlide = _.options.initialSlide;\n                    }\n                    _.refresh(initial);\n                    triggerBreakpoint = targetBreakpoint;\n                }\n            }\n\n            // only trigger breakpoints during an actual break. not on initialize.\n            if( !initial && triggerBreakpoint !== false ) {\n                _.$slider.trigger('breakpoint', [_, triggerBreakpoint]);\n            }\n        }\n\n    };\n\n    Slick.prototype.changeSlide = function(event, dontAnimate) {\n\n        var _ = this,\n            $target = $(event.target),\n            indexOffset, slideOffset, unevenOffset;\n\n        // If target is a link, prevent default action.\n        if($target.is('a')) {\n            event.preventDefault();\n        }\n\n        // If target is not the <li> element (ie: a child), find the <li>.\n        if(!$target.is('li')) {\n            $target = $target.closest('li');\n        }\n\n        unevenOffset = (_.slideCount % _.options.slidesToScroll !== 0);\n        indexOffset = unevenOffset ? 0 : (_.slideCount - _.currentSlide) % _.options.slidesToScroll;\n\n        switch (event.data.message) {\n\n            case 'previous':\n                slideOffset = indexOffset === 0 ? _.options.slidesToScroll : _.options.slidesToShow - indexOffset;\n                if (_.slideCount > _.options.slidesToShow) {\n                    _.slideHandler(_.currentSlide - slideOffset, false, dontAnimate);\n                }\n                break;\n\n            case 'next':\n                slideOffset = indexOffset === 0 ? _.options.slidesToScroll : indexOffset;\n                if (_.slideCount > _.options.slidesToShow) {\n                    _.slideHandler(_.currentSlide + slideOffset, false, dontAnimate);\n                }\n                break;\n\n            case 'index':\n                var index = event.data.index === 0 ? 0 :\n                    event.data.index || $target.index() * _.options.slidesToScroll;\n\n                _.slideHandler(_.checkNavigable(index), false, dontAnimate);\n                $target.children().trigger('focus');\n                break;\n\n            default:\n                return;\n        }\n\n    };\n\n    Slick.prototype.checkNavigable = function(index) {\n\n        var _ = this,\n            navigables, prevNavigable;\n\n        navigables = _.getNavigableIndexes();\n        prevNavigable = 0;\n        if (index > navigables[navigables.length - 1]) {\n            index = navigables[navigables.length - 1];\n        } else {\n            for (var n in navigables) {\n                if (index < navigables[n]) {\n                    index = prevNavigable;\n                    break;\n                }\n                prevNavigable = navigables[n];\n            }\n        }\n\n        return index;\n    };\n\n    Slick.prototype.cleanUpEvents = function() {\n\n        var _ = this;\n\n        if (_.options.dots && _.$dots !== null) {\n\n            $('li', _.$dots).off('click.slick', _.changeSlide);\n\n            if (_.options.pauseOnDotsHover === true && _.options.autoplay === true) {\n\n                $('li', _.$dots)\n                    .off('mouseenter.slick', $.proxy(_.setPaused, _, true))\n                    .off('mouseleave.slick', $.proxy(_.setPaused, _, false));\n\n            }\n\n        }\n\n        if (_.options.arrows === true && _.slideCount > _.options.slidesToShow) {\n            _.$prevArrow && _.$prevArrow.off('click.slick', _.changeSlide);\n            _.$nextArrow && _.$nextArrow.off('click.slick', _.changeSlide);\n        }\n\n        _.$list.off('touchstart.slick mousedown.slick', _.swipeHandler);\n        _.$list.off('touchmove.slick mousemove.slick', _.swipeHandler);\n        _.$list.off('touchend.slick mouseup.slick', _.swipeHandler);\n        _.$list.off('touchcancel.slick mouseleave.slick', _.swipeHandler);\n\n        _.$list.off('click.slick', _.clickHandler);\n\n        $(document).off(_.visibilityChange, _.visibility);\n\n        _.$list.off('mouseenter.slick', $.proxy(_.setPaused, _, true));\n        _.$list.off('mouseleave.slick', $.proxy(_.setPaused, _, false));\n\n        if (_.options.accessibility === true) {\n            _.$list.off('keydown.slick', _.keyHandler);\n        }\n\n        if (_.options.focusOnSelect === true) {\n            $(_.$slideTrack).children().off('click.slick', _.selectHandler);\n        }\n\n        $(window).off('orientationchange.slick.slick-' + _.instanceUid, _.orientationChange);\n\n        $(window).off('resize.slick.slick-' + _.instanceUid, _.resize);\n\n        $('[draggable!=true]', _.$slideTrack).off('dragstart', _.preventDefault);\n\n        $(window).off('load.slick.slick-' + _.instanceUid, _.setPosition);\n        $(document).off('ready.slick.slick-' + _.instanceUid, _.setPosition);\n    };\n\n    Slick.prototype.cleanUpRows = function() {\n\n        var _ = this, originalSlides;\n\n        if(_.options.rows > 1) {\n            originalSlides = _.$slides.children().children();\n            originalSlides.removeAttr('style');\n            _.$slider.html(originalSlides);\n        }\n\n    };\n\n    Slick.prototype.clickHandler = function(event) {\n\n        var _ = this;\n\n        if (_.shouldClick === false) {\n            event.stopImmediatePropagation();\n            event.stopPropagation();\n            event.preventDefault();\n        }\n\n    };\n\n    Slick.prototype.destroy = function(refresh) {\n\n        var _ = this;\n\n        _.autoPlayClear();\n\n        _.touchObject = {};\n\n        _.cleanUpEvents();\n\n        $('.slick-cloned', _.$slider).detach();\n\n        if (_.$dots) {\n            _.$dots.remove();\n        }\n\n\n        if ( _.$prevArrow && _.$prevArrow.length ) {\n\n            _.$prevArrow\n                .removeClass('slick-disabled slick-arrow slick-hidden')\n                .removeAttr('aria-hidden aria-disabled tabindex')\n                .css(\"display\",\"\");\n\n            if ( _.htmlExpr.test( _.options.prevArrow )) {\n                _.$prevArrow.remove();\n            }\n        }\n\n        if ( _.$nextArrow && _.$nextArrow.length ) {\n\n            _.$nextArrow\n                .removeClass('slick-disabled slick-arrow slick-hidden')\n                .removeAttr('aria-hidden aria-disabled tabindex')\n                .css(\"display\",\"\");\n\n            if ( _.htmlExpr.test( _.options.nextArrow )) {\n                _.$nextArrow.remove();\n            }\n\n        }\n\n\n        if (_.$slides) {\n\n            _.$slides\n                .removeClass('slick-slide slick-active slick-center slick-visible slick-current')\n                .removeAttr('aria-hidden')\n                .removeAttr('data-slick-index')\n                .each(function(){\n                    $(this).attr('style', $(this).data('originalStyling'));\n                });\n\n            _.$slideTrack.children(this.options.slide).detach();\n\n            _.$slideTrack.detach();\n\n            _.$list.detach();\n\n            _.$slider.append(_.$slides);\n        }\n\n        _.cleanUpRows();\n\n        _.$slider.removeClass('slick-slider');\n        _.$slider.removeClass('slick-initialized');\n\n        _.unslicked = true;\n\n        if(!refresh) {\n            _.$slider.trigger('destroy', [_]);\n        }\n\n    };\n\n    Slick.prototype.disableTransition = function(slide) {\n\n        var _ = this,\n            transition = {};\n\n        transition[_.transitionType] = '';\n\n        if (_.options.fade === false) {\n            _.$slideTrack.css(transition);\n        } else {\n            _.$slides.eq(slide).css(transition);\n        }\n\n    };\n\n    Slick.prototype.fadeSlide = function(slideIndex, callback) {\n\n        var _ = this;\n\n        if (_.cssTransitions === false) {\n\n            _.$slides.eq(slideIndex).css({\n                zIndex: _.options.zIndex\n            });\n\n            _.$slides.eq(slideIndex).animate({\n                opacity: 1\n            }, _.options.speed, _.options.easing, callback);\n\n        } else {\n\n            _.applyTransition(slideIndex);\n\n            _.$slides.eq(slideIndex).css({\n                opacity: 1,\n                zIndex: _.options.zIndex\n            });\n\n            if (callback) {\n                setTimeout(function() {\n\n                    _.disableTransition(slideIndex);\n\n                    callback.call();\n                }, _.options.speed);\n            }\n\n        }\n\n    };\n\n    Slick.prototype.fadeSlideOut = function(slideIndex) {\n\n        var _ = this;\n\n        if (_.cssTransitions === false) {\n\n            _.$slides.eq(slideIndex).animate({\n                opacity: 0,\n                zIndex: _.options.zIndex - 2\n            }, _.options.speed, _.options.easing);\n\n        } else {\n\n            _.applyTransition(slideIndex);\n\n            _.$slides.eq(slideIndex).css({\n                opacity: 0,\n                zIndex: _.options.zIndex - 2\n            });\n\n        }\n\n    };\n\n    Slick.prototype.filterSlides = Slick.prototype.slickFilter = function(filter) {\n\n        var _ = this;\n\n        if (filter !== null) {\n\n            _.unload();\n\n            _.$slideTrack.children(this.options.slide).detach();\n\n            _.$slidesCache.filter(filter).appendTo(_.$slideTrack);\n\n            _.reinit();\n\n        }\n\n    };\n\n    Slick.prototype.getCurrent = Slick.prototype.slickCurrentSlide = function() {\n\n        var _ = this;\n        return _.currentSlide;\n\n    };\n\n    Slick.prototype.getDotCount = function() {\n\n        var _ = this;\n\n        var breakPoint = 0;\n        var counter = 0;\n        var pagerQty = 0;\n\n        if (_.options.infinite === true) {\n            while (breakPoint < _.slideCount) {\n                ++pagerQty;\n                breakPoint = counter + _.options.slidesToShow;\n                counter += _.options.slidesToScroll <= _.options.slidesToShow ? _.options.slidesToScroll : _.options.slidesToShow;\n            }\n        } else if (_.options.centerMode === true) {\n            pagerQty = _.slideCount;\n        } else {\n            while (breakPoint < _.slideCount) {\n                ++pagerQty;\n                breakPoint = counter + _.options.slidesToShow;\n                counter += _.options.slidesToScroll <= _.options.slidesToShow ? _.options.slidesToScroll : _.options.slidesToShow;\n            }\n        }\n\n        return pagerQty - 1;\n\n    };\n\n    Slick.prototype.getLeft = function(slideIndex) {\n\n        var _ = this,\n            targetLeft,\n            verticalHeight,\n            verticalOffset = 0,\n            targetSlide;\n\n        _.slideOffset = 0;\n        verticalHeight = _.$slides.first().outerHeight(true);\n\n        if (_.options.infinite === true) {\n            if (_.slideCount > _.options.slidesToShow) {\n                _.slideOffset = (_.slideWidth * _.options.slidesToShow) * -1;\n                verticalOffset = (verticalHeight * _.options.slidesToShow) * -1;\n            }\n            if (_.slideCount % _.options.slidesToScroll !== 0) {\n                if (slideIndex + _.options.slidesToScroll > _.slideCount && _.slideCount > _.options.slidesToShow) {\n                    if (slideIndex > _.slideCount) {\n                        _.slideOffset = ((_.options.slidesToShow - (slideIndex - _.slideCount)) * _.slideWidth) * -1;\n                        verticalOffset = ((_.options.slidesToShow - (slideIndex - _.slideCount)) * verticalHeight) * -1;\n                    } else {\n                        _.slideOffset = ((_.slideCount % _.options.slidesToScroll) * _.slideWidth) * -1;\n                        verticalOffset = ((_.slideCount % _.options.slidesToScroll) * verticalHeight) * -1;\n                    }\n                }\n            }\n        } else {\n            if (slideIndex + _.options.slidesToShow > _.slideCount) {\n                _.slideOffset = ((slideIndex + _.options.slidesToShow) - _.slideCount) * _.slideWidth;\n                verticalOffset = ((slideIndex + _.options.slidesToShow) - _.slideCount) * verticalHeight;\n            }\n        }\n\n        if (_.slideCount <= _.options.slidesToShow) {\n            _.slideOffset = 0;\n            verticalOffset = 0;\n        }\n\n        if (_.options.centerMode === true && _.options.infinite === true) {\n            _.slideOffset += _.slideWidth * Math.floor(_.options.slidesToShow / 2) - _.slideWidth;\n        } else if (_.options.centerMode === true) {\n            _.slideOffset = 0;\n            _.slideOffset += _.slideWidth * Math.floor(_.options.slidesToShow / 2);\n        }\n\n        if (_.options.vertical === false) {\n            targetLeft = ((slideIndex * _.slideWidth) * -1) + _.slideOffset;\n        } else {\n            targetLeft = ((slideIndex * verticalHeight) * -1) + verticalOffset;\n        }\n\n        if (_.options.variableWidth === true) {\n\n            if (_.slideCount <= _.options.slidesToShow || _.options.infinite === false) {\n                targetSlide = _.$slideTrack.children('.slick-slide').eq(slideIndex);\n            } else {\n                targetSlide = _.$slideTrack.children('.slick-slide').eq(slideIndex + _.options.slidesToShow);\n            }\n\n            targetLeft = targetSlide[0] ? targetSlide[0].offsetLeft * -1 : 0;\n\n            if (_.options.centerMode === true) {\n                if (_.options.infinite === false) {\n                    targetSlide = _.$slideTrack.children('.slick-slide').eq(slideIndex);\n                } else {\n                    targetSlide = _.$slideTrack.children('.slick-slide').eq(slideIndex + _.options.slidesToShow + 1);\n                }\n                targetLeft = targetSlide[0] ? targetSlide[0].offsetLeft * -1 : 0;\n                targetLeft += (_.$list.width() - targetSlide.outerWidth()) / 2;\n            }\n        }\n\n        return targetLeft;\n\n    };\n\n    Slick.prototype.getOption = Slick.prototype.slickGetOption = function(option) {\n\n        var _ = this;\n\n        return _.options[option];\n\n    };\n\n    Slick.prototype.getNavigableIndexes = function() {\n\n        var _ = this,\n            breakPoint = 0,\n            counter = 0,\n            indexes = [],\n            max;\n\n        if (_.options.infinite === false) {\n            max = _.slideCount;\n        } else {\n            breakPoint = _.options.slidesToScroll * -1;\n            counter = _.options.slidesToScroll * -1;\n            max = _.slideCount * 2;\n        }\n\n        while (breakPoint < max) {\n            indexes.push(breakPoint);\n            breakPoint = counter + _.options.slidesToScroll;\n            counter += _.options.slidesToScroll <= _.options.slidesToShow ? _.options.slidesToScroll : _.options.slidesToShow;\n        }\n\n        return indexes;\n\n    };\n\n    Slick.prototype.getSlick = function() {\n\n        return this;\n\n    };\n\n    Slick.prototype.getSlideCount = function() {\n\n        var _ = this,\n            slidesTraversed, swipedSlide, centerOffset;\n\n        centerOffset = _.options.centerMode === true ? _.slideWidth * Math.floor(_.options.slidesToShow / 2) : 0;\n\n        if (_.options.swipeToSlide === true) {\n            _.$slideTrack.find('.slick-slide').each(function(index, slide) {\n                if (slide.offsetLeft - centerOffset + ($(slide).outerWidth() / 2) > (_.swipeLeft * -1)) {\n                    swipedSlide = slide;\n                    return false;\n                }\n            });\n\n            slidesTraversed = Math.abs($(swipedSlide).attr('data-slick-index') - _.currentSlide) || 1;\n\n            return slidesTraversed;\n\n        } else {\n            return _.options.slidesToScroll;\n        }\n\n    };\n\n    Slick.prototype.goTo = Slick.prototype.slickGoTo = function(slide, dontAnimate) {\n\n        var _ = this;\n\n        _.changeSlide({\n            data: {\n                message: 'index',\n                index: parseInt(slide)\n            }\n        }, dontAnimate);\n\n    };\n\n    Slick.prototype.init = function(creation) {\n\n        var _ = this;\n\n        if (!$(_.$slider).hasClass('slick-initialized')) {\n\n            $(_.$slider).addClass('slick-initialized');\n\n            _.buildRows();\n            _.buildOut();\n            _.setProps();\n            _.startLoad();\n            _.loadSlider();\n            _.initializeEvents();\n            _.updateArrows();\n            _.updateDots();\n\n        }\n\n        if (creation) {\n            _.$slider.trigger('init', [_]);\n        }\n\n        if (_.options.accessibility === true) {\n            _.initADA();\n        }\n\n    };\n\n    Slick.prototype.initArrowEvents = function() {\n\n        var _ = this;\n\n        if (_.options.arrows === true && _.slideCount > _.options.slidesToShow) {\n            _.$prevArrow.on('click.slick', {\n                message: 'previous'\n            }, _.changeSlide);\n            _.$nextArrow.on('click.slick', {\n                message: 'next'\n            }, _.changeSlide);\n        }\n\n    };\n\n    Slick.prototype.initDotEvents = function() {\n\n        var _ = this;\n\n        if (_.options.dots === true && _.slideCount > _.options.slidesToShow) {\n            $('li', _.$dots).on('click.slick', {\n                message: 'index'\n            }, _.changeSlide);\n        }\n\n        if (_.options.dots === true && _.options.pauseOnDotsHover === true && _.options.autoplay === true) {\n            $('li', _.$dots)\n                .on('mouseenter.slick', $.proxy(_.setPaused, _, true))\n                .on('mouseleave.slick', $.proxy(_.setPaused, _, false));\n        }\n\n    };\n\n    Slick.prototype.initializeEvents = function() {\n\n        var _ = this;\n\n        _.initArrowEvents();\n\n        _.initDotEvents();\n\n        _.$list.on('touchstart.slick mousedown.slick', {\n            action: 'start'\n        }, _.swipeHandler);\n        _.$list.on('touchmove.slick mousemove.slick', {\n            action: 'move'\n        }, _.swipeHandler);\n        _.$list.on('touchend.slick mouseup.slick', {\n            action: 'end'\n        }, _.swipeHandler);\n        _.$list.on('touchcancel.slick mouseleave.slick', {\n            action: 'end'\n        }, _.swipeHandler);\n\n        _.$list.on('click.slick', _.clickHandler);\n\n        $(document).on(_.visibilityChange, $.proxy(_.visibility, _));\n\n        _.$list.on('mouseenter.slick', $.proxy(_.setPaused, _, true));\n        _.$list.on('mouseleave.slick', $.proxy(_.setPaused, _, false));\n\n        if (_.options.accessibility === true) {\n            _.$list.on('keydown.slick', _.keyHandler);\n        }\n\n        if (_.options.focusOnSelect === true) {\n            $(_.$slideTrack).children().on('click.slick', _.selectHandler);\n        }\n\n        $(window).on('orientationchange.slick.slick-' + _.instanceUid, $.proxy(_.orientationChange, _));\n\n        $(window).on('resize.slick.slick-' + _.instanceUid, $.proxy(_.resize, _));\n\n        $('[draggable!=true]', _.$slideTrack).on('dragstart', _.preventDefault);\n\n        $(window).on('load.slick.slick-' + _.instanceUid, _.setPosition);\n        $(document).on('ready.slick.slick-' + _.instanceUid, _.setPosition);\n\n    };\n\n    Slick.prototype.initUI = function() {\n\n        var _ = this;\n\n        if (_.options.arrows === true && _.slideCount > _.options.slidesToShow) {\n\n            _.$prevArrow.show();\n            _.$nextArrow.show();\n\n        }\n\n        if (_.options.dots === true && _.slideCount > _.options.slidesToShow) {\n\n            _.$dots.show();\n\n        }\n\n        if (_.options.autoplay === true) {\n\n            _.autoPlay();\n\n        }\n\n    };\n\n    Slick.prototype.keyHandler = function(event) {\n\n        var _ = this;\n         //Dont slide if the cursor is inside the form fields and arrow keys are pressed\n        if(!event.target.tagName.match('TEXTAREA|INPUT|SELECT')) {\n            if (event.keyCode === 37 && _.options.accessibility === true) {\n                _.changeSlide({\n                    data: {\n                        message: 'previous'\n                    }\n                });\n            } else if (event.keyCode === 39 && _.options.accessibility === true) {\n                _.changeSlide({\n                    data: {\n                        message: 'next'\n                    }\n                });\n            }\n        }\n\n    };\n\n    Slick.prototype.lazyLoad = function() {\n\n        var _ = this,\n            loadRange, cloneRange, rangeStart, rangeEnd;\n\n        function loadImages(imagesScope) {\n            $('img[data-lazy]', imagesScope).each(function() {\n\n                var image = $(this),\n                    imageSource = $(this).attr('data-lazy'),\n                    imageToLoad = document.createElement('img');\n\n                imageToLoad.onload = function() {\n                    image\n                        .animate({ opacity: 0 }, 100, function() {\n                            image\n                                .attr('src', imageSource)\n                                .animate({ opacity: 1 }, 200, function() {\n                                    image\n                                        .removeAttr('data-lazy')\n                                        .removeClass('slick-loading');\n                                });\n                        });\n                };\n\n                imageToLoad.src = imageSource;\n\n            });\n        }\n\n        if (_.options.centerMode === true) {\n            if (_.options.infinite === true) {\n                rangeStart = _.currentSlide + (_.options.slidesToShow / 2 + 1);\n                rangeEnd = rangeStart + _.options.slidesToShow + 2;\n            } else {\n                rangeStart = Math.max(0, _.currentSlide - (_.options.slidesToShow / 2 + 1));\n                rangeEnd = 2 + (_.options.slidesToShow / 2 + 1) + _.currentSlide;\n            }\n        } else {\n            rangeStart = _.options.infinite ? _.options.slidesToShow + _.currentSlide : _.currentSlide;\n            rangeEnd = rangeStart + _.options.slidesToShow;\n            if (_.options.fade === true) {\n                if (rangeStart > 0) rangeStart--;\n                if (rangeEnd <= _.slideCount) rangeEnd++;\n            }\n        }\n\n        loadRange = _.$slider.find('.slick-slide').slice(rangeStart, rangeEnd);\n        loadImages(loadRange);\n\n        if (_.slideCount <= _.options.slidesToShow) {\n            cloneRange = _.$slider.find('.slick-slide');\n            loadImages(cloneRange);\n        } else\n        if (_.currentSlide >= _.slideCount - _.options.slidesToShow) {\n            cloneRange = _.$slider.find('.slick-cloned').slice(0, _.options.slidesToShow);\n            loadImages(cloneRange);\n        } else if (_.currentSlide === 0) {\n            cloneRange = _.$slider.find('.slick-cloned').slice(_.options.slidesToShow * -1);\n            loadImages(cloneRange);\n        }\n\n    };\n\n    Slick.prototype.loadSlider = function() {\n\n        var _ = this;\n\n        _.setPosition();\n\n        _.$slideTrack.css({\n            opacity: 1\n        });\n\n        _.$slider.removeClass('slick-loading');\n\n        _.initUI();\n\n        if (_.options.lazyLoad === 'progressive') {\n            _.progressiveLazyLoad();\n        }\n\n    };\n\n    Slick.prototype.next = Slick.prototype.slickNext = function() {\n\n        var _ = this;\n\n        _.changeSlide({\n            data: {\n                message: 'next'\n            }\n        });\n\n    };\n\n    Slick.prototype.orientationChange = function() {\n\n        var _ = this;\n\n        _.checkResponsive();\n        _.setPosition();\n\n    };\n\n    Slick.prototype.pause = Slick.prototype.slickPause = function() {\n\n        var _ = this;\n\n        _.autoPlayClear();\n        _.paused = true;\n\n    };\n\n    Slick.prototype.play = Slick.prototype.slickPlay = function() {\n\n        var _ = this;\n\n        _.paused = false;\n        _.autoPlay();\n\n    };\n\n    Slick.prototype.postSlide = function(index) {\n\n        var _ = this;\n\n        _.$slider.trigger('afterChange', [_, index]);\n\n        _.animating = false;\n\n        _.setPosition();\n\n        _.swipeLeft = null;\n\n        if (_.options.autoplay === true && _.paused === false) {\n            _.autoPlay();\n        }\n        if (_.options.accessibility === true) {\n            _.initADA();\n        }\n\n    };\n\n    Slick.prototype.prev = Slick.prototype.slickPrev = function() {\n\n        var _ = this;\n\n        _.changeSlide({\n            data: {\n                message: 'previous'\n            }\n        });\n\n    };\n\n    Slick.prototype.preventDefault = function(event) {\n        event.preventDefault();\n    };\n\n    Slick.prototype.progressiveLazyLoad = function() {\n\n        var _ = this,\n            imgCount, targetImage;\n\n        imgCount = $('img[data-lazy]', _.$slider).length;\n\n        if (imgCount > 0) {\n            targetImage = $('img[data-lazy]', _.$slider).first();\n            targetImage.attr('src', targetImage.attr('data-lazy')).removeClass('slick-loading').load(function() {\n                    targetImage.removeAttr('data-lazy');\n                    _.progressiveLazyLoad();\n\n                    if (_.options.adaptiveHeight === true) {\n                        _.setPosition();\n                    }\n                })\n                .error(function() {\n                    targetImage.removeAttr('data-lazy');\n                    _.progressiveLazyLoad();\n                });\n        }\n\n    };\n\n    Slick.prototype.refresh = function( initializing ) {\n\n        var _ = this, currentSlide, firstVisible;\n\n        firstVisible = _.slideCount - _.options.slidesToShow;\n\n        // check that the new breakpoint can actually accept the\n        // \"current slide\" as the current slide, otherwise we need\n        // to set it to the closest possible value.\n        if ( !_.options.infinite ) {\n            if ( _.slideCount <= _.options.slidesToShow ) {\n                _.currentSlide = 0;\n            } else if ( _.currentSlide > firstVisible ) {\n                _.currentSlide = firstVisible;\n            }\n        }\n\n         currentSlide = _.currentSlide;\n\n        _.destroy(true);\n\n        $.extend(_, _.initials, { currentSlide: currentSlide });\n\n        _.init();\n\n        if( !initializing ) {\n\n            _.changeSlide({\n                data: {\n                    message: 'index',\n                    index: currentSlide\n                }\n            }, false);\n\n        }\n\n    };\n\n    Slick.prototype.registerBreakpoints = function() {\n\n        var _ = this, breakpoint, currentBreakpoint, l,\n            responsiveSettings = _.options.responsive || null;\n\n        if ( $.type(responsiveSettings) === \"array\" && responsiveSettings.length ) {\n\n            _.respondTo = _.options.respondTo || 'window';\n\n            for ( breakpoint in responsiveSettings ) {\n\n                l = _.breakpoints.length-1;\n                currentBreakpoint = responsiveSettings[breakpoint].breakpoint;\n\n                if (responsiveSettings.hasOwnProperty(breakpoint)) {\n\n                    // loop through the breakpoints and cut out any existing\n                    // ones with the same breakpoint number, we don't want dupes.\n                    while( l >= 0 ) {\n                        if( _.breakpoints[l] && _.breakpoints[l] === currentBreakpoint ) {\n                            _.breakpoints.splice(l,1);\n                        }\n                        l--;\n                    }\n\n                    _.breakpoints.push(currentBreakpoint);\n                    _.breakpointSettings[currentBreakpoint] = responsiveSettings[breakpoint].settings;\n\n                }\n\n            }\n\n            _.breakpoints.sort(function(a, b) {\n                return ( _.options.mobileFirst ) ? a-b : b-a;\n            });\n\n        }\n\n    };\n\n    Slick.prototype.reinit = function() {\n\n        var _ = this;\n\n        _.$slides =\n            _.$slideTrack\n                .children(_.options.slide)\n                .addClass('slick-slide');\n\n        _.slideCount = _.$slides.length;\n\n        if (_.currentSlide >= _.slideCount && _.currentSlide !== 0) {\n            _.currentSlide = _.currentSlide - _.options.slidesToScroll;\n        }\n\n        if (_.slideCount <= _.options.slidesToShow) {\n            _.currentSlide = 0;\n        }\n\n        _.registerBreakpoints();\n\n        _.setProps();\n        _.setupInfinite();\n        _.buildArrows();\n        _.updateArrows();\n        _.initArrowEvents();\n        _.buildDots();\n        _.updateDots();\n        _.initDotEvents();\n\n        _.checkResponsive(false, true);\n\n        if (_.options.focusOnSelect === true) {\n            $(_.$slideTrack).children().on('click.slick', _.selectHandler);\n        }\n\n        _.setSlideClasses(0);\n\n        _.setPosition();\n\n        _.$slider.trigger('reInit', [_]);\n\n        if (_.options.autoplay === true) {\n            _.focusHandler();\n        }\n\n    };\n\n    Slick.prototype.resize = function() {\n\n        var _ = this;\n\n        if ($(window).width() !== _.windowWidth) {\n            clearTimeout(_.windowDelay);\n            _.windowDelay = window.setTimeout(function() {\n                _.windowWidth = $(window).width();\n                _.checkResponsive();\n                if( !_.unslicked ) { _.setPosition(); }\n            }, 50);\n        }\n    };\n\n    Slick.prototype.removeSlide = Slick.prototype.slickRemove = function(index, removeBefore, removeAll) {\n\n        var _ = this;\n\n        if (typeof(index) === 'boolean') {\n            removeBefore = index;\n            index = removeBefore === true ? 0 : _.slideCount - 1;\n        } else {\n            index = removeBefore === true ? --index : index;\n        }\n\n        if (_.slideCount < 1 || index < 0 || index > _.slideCount - 1) {\n            return false;\n        }\n\n        _.unload();\n\n        if (removeAll === true) {\n            _.$slideTrack.children().remove();\n        } else {\n            _.$slideTrack.children(this.options.slide).eq(index).remove();\n        }\n\n        _.$slides = _.$slideTrack.children(this.options.slide);\n\n        _.$slideTrack.children(this.options.slide).detach();\n\n        _.$slideTrack.append(_.$slides);\n\n        _.$slidesCache = _.$slides;\n\n        _.reinit();\n\n    };\n\n    Slick.prototype.setCSS = function(position) {\n\n        var _ = this,\n            positionProps = {},\n            x, y;\n\n        if (_.options.rtl === true) {\n            position = -position;\n        }\n        x = _.positionProp == 'left' ? Math.ceil(position) + 'px' : '0px';\n        y = _.positionProp == 'top' ? Math.ceil(position) + 'px' : '0px';\n\n        positionProps[_.positionProp] = position;\n\n        if (_.transformsEnabled === false) {\n            _.$slideTrack.css(positionProps);\n        } else {\n            positionProps = {};\n            if (_.cssTransitions === false) {\n                positionProps[_.animType] = 'translate(' + x + ', ' + y + ')';\n                _.$slideTrack.css(positionProps);\n            } else {\n                positionProps[_.animType] = 'translate3d(' + x + ', ' + y + ', 0px)';\n                _.$slideTrack.css(positionProps);\n            }\n        }\n\n    };\n\n    Slick.prototype.setDimensions = function() {\n\n        var _ = this;\n\n        if (_.options.vertical === false) {\n            if (_.options.centerMode === true) {\n                _.$list.css({\n                    padding: ('0px ' + _.options.centerPadding)\n                });\n            }\n        } else {\n            _.$list.height(_.$slides.first().outerHeight(true) * _.options.slidesToShow);\n            if (_.options.centerMode === true) {\n                _.$list.css({\n                    padding: (_.options.centerPadding + ' 0px')\n                });\n            }\n        }\n\n        _.listWidth = _.$list.width();\n        _.listHeight = _.$list.height();\n\n\n        if (_.options.vertical === false && _.options.variableWidth === false) {\n            _.slideWidth = Math.ceil(_.listWidth / _.options.slidesToShow);\n            _.$slideTrack.width(Math.ceil((_.slideWidth * _.$slideTrack.children('.slick-slide').length)));\n\n        } else if (_.options.variableWidth === true) {\n            _.$slideTrack.width(5000 * _.slideCount);\n        } else {\n            _.slideWidth = Math.ceil(_.listWidth);\n            _.$slideTrack.height(Math.ceil((_.$slides.first().outerHeight(true) * _.$slideTrack.children('.slick-slide').length)));\n        }\n\n        var offset = _.$slides.first().outerWidth(true) - _.$slides.first().width();\n        if (_.options.variableWidth === false) _.$slideTrack.children('.slick-slide').width(_.slideWidth - offset);\n\n    };\n\n    Slick.prototype.setFade = function() {\n\n        var _ = this,\n            targetLeft;\n\n        _.$slides.each(function(index, element) {\n            targetLeft = (_.slideWidth * index) * -1;\n            if (_.options.rtl === true) {\n                $(element).css({\n                    position: 'relative',\n                    right: targetLeft,\n                    top: 0,\n                    zIndex: _.options.zIndex - 2,\n                    opacity: 0\n                });\n            } else {\n                $(element).css({\n                    position: 'relative',\n                    left: targetLeft,\n                    top: 0,\n                    zIndex: _.options.zIndex - 2,\n                    opacity: 0\n                });\n            }\n        });\n\n        _.$slides.eq(_.currentSlide).css({\n            zIndex: _.options.zIndex - 1,\n            opacity: 1\n        });\n\n    };\n\n    Slick.prototype.setHeight = function() {\n\n        var _ = this;\n\n        if (_.options.slidesToShow === 1 && _.options.adaptiveHeight === true && _.options.vertical === false) {\n            var targetHeight = _.$slides.eq(_.currentSlide).outerHeight(true);\n            _.$list.css('height', targetHeight);\n        }\n\n    };\n\n    Slick.prototype.setOption = Slick.prototype.slickSetOption = function(option, value, refresh) {\n\n        var _ = this, l, item;\n\n        if( option === \"responsive\" && $.type(value) === \"array\" ) {\n            for ( item in value ) {\n                if( $.type( _.options.responsive ) !== \"array\" ) {\n                    _.options.responsive = [ value[item] ];\n                } else {\n                    l = _.options.responsive.length-1;\n                    // loop through the responsive object and splice out duplicates.\n                    while( l >= 0 ) {\n                        if( _.options.responsive[l].breakpoint === value[item].breakpoint ) {\n                            _.options.responsive.splice(l,1);\n                        }\n                        l--;\n                    }\n                    _.options.responsive.push( value[item] );\n                }\n            }\n        } else {\n            _.options[option] = value;\n        }\n\n        if (refresh === true) {\n            _.unload();\n            _.reinit();\n        }\n\n    };\n\n    Slick.prototype.setPosition = function() {\n\n        var _ = this;\n\n        _.setDimensions();\n\n        _.setHeight();\n\n        if (_.options.fade === false) {\n            _.setCSS(_.getLeft(_.currentSlide));\n        } else {\n            _.setFade();\n        }\n\n        _.$slider.trigger('setPosition', [_]);\n\n    };\n\n    Slick.prototype.setProps = function() {\n\n        var _ = this,\n            bodyStyle = document.body.style;\n\n        _.positionProp = _.options.vertical === true ? 'top' : 'left';\n\n        if (_.positionProp === 'top') {\n            _.$slider.addClass('slick-vertical');\n        } else {\n            _.$slider.removeClass('slick-vertical');\n        }\n\n        if (bodyStyle.WebkitTransition !== undefined ||\n            bodyStyle.MozTransition !== undefined ||\n            bodyStyle.msTransition !== undefined) {\n            if (_.options.useCSS === true) {\n                _.cssTransitions = true;\n            }\n        }\n\n        if ( _.options.fade ) {\n            if ( typeof _.options.zIndex === 'number' ) {\n                if( _.options.zIndex < 3 ) {\n                    _.options.zIndex = 3;\n                }\n            } else {\n                _.options.zIndex = _.defaults.zIndex;\n            }\n        }\n\n        if (bodyStyle.OTransform !== undefined) {\n            _.animType = 'OTransform';\n            _.transformType = '-o-transform';\n            _.transitionType = 'OTransition';\n            if (bodyStyle.perspectiveProperty === undefined && bodyStyle.webkitPerspective === undefined) _.animType = false;\n        }\n        if (bodyStyle.MozTransform !== undefined) {\n            _.animType = 'MozTransform';\n            _.transformType = '-moz-transform';\n            _.transitionType = 'MozTransition';\n            if (bodyStyle.perspectiveProperty === undefined && bodyStyle.MozPerspective === undefined) _.animType = false;\n        }\n        if (bodyStyle.webkitTransform !== undefined) {\n            _.animType = 'webkitTransform';\n            _.transformType = '-webkit-transform';\n            _.transitionType = 'webkitTransition';\n            if (bodyStyle.perspectiveProperty === undefined && bodyStyle.webkitPerspective === undefined) _.animType = false;\n        }\n        if (bodyStyle.msTransform !== undefined) {\n            _.animType = 'msTransform';\n            _.transformType = '-ms-transform';\n            _.transitionType = 'msTransition';\n            if (bodyStyle.msTransform === undefined) _.animType = false;\n        }\n        if (bodyStyle.transform !== undefined && _.animType !== false) {\n            _.animType = 'transform';\n            _.transformType = 'transform';\n            _.transitionType = 'transition';\n        }\n        _.transformsEnabled = (_.animType !== null && _.animType !== false);\n\n    };\n\n\n    Slick.prototype.setSlideClasses = function(index) {\n\n        var _ = this,\n            centerOffset, allSlides, indexOffset, remainder;\n\n        allSlides = _.$slider\n            .find('.slick-slide')\n            .removeClass('slick-active slick-center slick-current')\n            .attr('aria-hidden', 'true');\n\n        _.$slides\n            .eq(index)\n            .addClass('slick-current');\n\n        if (_.options.centerMode === true) {\n\n            centerOffset = Math.floor(_.options.slidesToShow / 2);\n\n            if (_.options.infinite === true) {\n\n                if (index >= centerOffset && index <= (_.slideCount - 1) - centerOffset) {\n\n                    _.$slides\n                        .slice(index - centerOffset, index + centerOffset + 1)\n                        .addClass('slick-active')\n                        .attr('aria-hidden', 'false');\n\n                } else {\n\n                    indexOffset = _.options.slidesToShow + index;\n                    allSlides\n                        .slice(indexOffset - centerOffset + 1, indexOffset + centerOffset + 2)\n                        .addClass('slick-active')\n                        .attr('aria-hidden', 'false');\n\n                }\n\n                if (index === 0) {\n\n                    allSlides\n                        .eq(allSlides.length - 1 - _.options.slidesToShow)\n                        .addClass('slick-center');\n\n                } else if (index === _.slideCount - 1) {\n\n                    allSlides\n                        .eq(_.options.slidesToShow)\n                        .addClass('slick-center');\n\n                }\n\n            }\n\n            _.$slides\n                .eq(index)\n                .addClass('slick-center');\n\n        } else {\n\n            if (index >= 0 && index <= (_.slideCount - _.options.slidesToShow)) {\n\n                _.$slides\n                    .slice(index, index + _.options.slidesToShow)\n                    .addClass('slick-active')\n                    .attr('aria-hidden', 'false');\n\n            } else if (allSlides.length <= _.options.slidesToShow) {\n\n                allSlides\n                    .addClass('slick-active')\n                    .attr('aria-hidden', 'false');\n\n            } else {\n\n                remainder = _.slideCount % _.options.slidesToShow;\n                indexOffset = _.options.infinite === true ? _.options.slidesToShow + index : index;\n\n                if (_.options.slidesToShow == _.options.slidesToScroll && (_.slideCount - index) < _.options.slidesToShow) {\n\n                    allSlides\n                        .slice(indexOffset - (_.options.slidesToShow - remainder), indexOffset + remainder)\n                        .addClass('slick-active')\n                        .attr('aria-hidden', 'false');\n\n                } else {\n\n                    allSlides\n                        .slice(indexOffset, indexOffset + _.options.slidesToShow)\n                        .addClass('slick-active')\n                        .attr('aria-hidden', 'false');\n\n                }\n\n            }\n\n        }\n\n        if (_.options.lazyLoad === 'ondemand') {\n            _.lazyLoad();\n        }\n\n    };\n\n    Slick.prototype.setupInfinite = function() {\n\n        var _ = this,\n            i, slideIndex, infiniteCount;\n\n        if (_.options.fade === true) {\n            _.options.centerMode = false;\n        }\n\n        if (_.options.infinite === true && _.options.fade === false) {\n\n            slideIndex = null;\n\n            if (_.slideCount > _.options.slidesToShow) {\n\n                if (_.options.centerMode === true) {\n                    infiniteCount = _.options.slidesToShow + 1;\n                } else {\n                    infiniteCount = _.options.slidesToShow;\n                }\n\n                for (i = _.slideCount; i > (_.slideCount -\n                        infiniteCount); i -= 1) {\n                    slideIndex = i - 1;\n                    $(_.$slides[slideIndex]).clone(true).attr('id', '')\n                        .attr('data-slick-index', slideIndex - _.slideCount)\n                        .prependTo(_.$slideTrack).addClass('slick-cloned');\n                }\n                for (i = 0; i < infiniteCount; i += 1) {\n                    slideIndex = i;\n                    $(_.$slides[slideIndex]).clone(true).attr('id', '')\n                        .attr('data-slick-index', slideIndex + _.slideCount)\n                        .appendTo(_.$slideTrack).addClass('slick-cloned');\n                }\n                _.$slideTrack.find('.slick-cloned').find('[id]').each(function() {\n                    $(this).attr('id', '');\n                });\n\n            }\n\n        }\n\n    };\n\n    Slick.prototype.setPaused = function(paused) {\n\n        var _ = this;\n\n        if (_.options.autoplay === true && _.options.pauseOnHover === true) {\n            _.paused = paused;\n            if (!paused) {\n                _.autoPlay();\n            } else {\n                _.autoPlayClear();\n            }\n        }\n    };\n\n    Slick.prototype.selectHandler = function(event) {\n\n        var _ = this;\n\n        var targetElement =\n            $(event.target).is('.slick-slide') ?\n                $(event.target) :\n                $(event.target).parents('.slick-slide');\n\n        var index = parseInt(targetElement.attr('data-slick-index'));\n\n        if (!index) index = 0;\n\n        if (_.slideCount <= _.options.slidesToShow) {\n\n            _.setSlideClasses(index);\n            _.asNavFor(index);\n            return;\n\n        }\n\n        _.slideHandler(index);\n\n    };\n\n    Slick.prototype.slideHandler = function(index, sync, dontAnimate) {\n\n        var targetSlide, animSlide, oldSlide, slideLeft, targetLeft = null,\n            _ = this;\n\n        sync = sync || false;\n\n        if (_.animating === true && _.options.waitForAnimate === true) {\n            return;\n        }\n\n        if (_.options.fade === true && _.currentSlide === index) {\n            return;\n        }\n\n        if (_.slideCount <= _.options.slidesToShow) {\n            return;\n        }\n\n        if (sync === false) {\n            _.asNavFor(index);\n        }\n\n        targetSlide = index;\n        targetLeft = _.getLeft(targetSlide);\n        slideLeft = _.getLeft(_.currentSlide);\n\n        _.currentLeft = _.swipeLeft === null ? slideLeft : _.swipeLeft;\n\n        if (_.options.infinite === false && _.options.centerMode === false && (index < 0 || index > _.getDotCount() * _.options.slidesToScroll)) {\n            if (_.options.fade === false) {\n                targetSlide = _.currentSlide;\n                if (dontAnimate !== true) {\n                    _.animateSlide(slideLeft, function() {\n                        _.postSlide(targetSlide);\n                    });\n                } else {\n                    _.postSlide(targetSlide);\n                }\n            }\n            return;\n        } else if (_.options.infinite === false && _.options.centerMode === true && (index < 0 || index > (_.slideCount - _.options.slidesToScroll))) {\n            if (_.options.fade === false) {\n                targetSlide = _.currentSlide;\n                if (dontAnimate !== true) {\n                    _.animateSlide(slideLeft, function() {\n                        _.postSlide(targetSlide);\n                    });\n                } else {\n                    _.postSlide(targetSlide);\n                }\n            }\n            return;\n        }\n\n        if (_.options.autoplay === true) {\n            clearInterval(_.autoPlayTimer);\n        }\n\n        if (targetSlide < 0) {\n            if (_.slideCount % _.options.slidesToScroll !== 0) {\n                animSlide = _.slideCount - (_.slideCount % _.options.slidesToScroll);\n            } else {\n                animSlide = _.slideCount + targetSlide;\n            }\n        } else if (targetSlide >= _.slideCount) {\n            if (_.slideCount % _.options.slidesToScroll !== 0) {\n                animSlide = 0;\n            } else {\n                animSlide = targetSlide - _.slideCount;\n            }\n        } else {\n            animSlide = targetSlide;\n        }\n\n        _.animating = true;\n\n        _.$slider.trigger('beforeChange', [_, _.currentSlide, animSlide]);\n\n        oldSlide = _.currentSlide;\n        _.currentSlide = animSlide;\n\n        _.setSlideClasses(_.currentSlide);\n\n        _.updateDots();\n        _.updateArrows();\n\n        if (_.options.fade === true) {\n            if (dontAnimate !== true) {\n\n                _.fadeSlideOut(oldSlide);\n\n                _.fadeSlide(animSlide, function() {\n                    _.postSlide(animSlide);\n                });\n\n            } else {\n                _.postSlide(animSlide);\n            }\n            _.animateHeight();\n            return;\n        }\n\n        if (dontAnimate !== true) {\n            _.animateSlide(targetLeft, function() {\n                _.postSlide(animSlide);\n            });\n        } else {\n            _.postSlide(animSlide);\n        }\n\n    };\n\n    Slick.prototype.startLoad = function() {\n\n        var _ = this;\n\n        if (_.options.arrows === true && _.slideCount > _.options.slidesToShow) {\n\n            _.$prevArrow.hide();\n            _.$nextArrow.hide();\n\n        }\n\n        if (_.options.dots === true && _.slideCount > _.options.slidesToShow) {\n\n            _.$dots.hide();\n\n        }\n\n        _.$slider.addClass('slick-loading');\n\n    };\n\n    Slick.prototype.swipeDirection = function() {\n\n        var xDist, yDist, r, swipeAngle, _ = this;\n\n        xDist = _.touchObject.startX - _.touchObject.curX;\n        yDist = _.touchObject.startY - _.touchObject.curY;\n        r = Math.atan2(yDist, xDist);\n\n        swipeAngle = Math.round(r * 180 / Math.PI);\n        if (swipeAngle < 0) {\n            swipeAngle = 360 - Math.abs(swipeAngle);\n        }\n\n        if ((swipeAngle <= 45) && (swipeAngle >= 0)) {\n            return (_.options.rtl === false ? 'left' : 'right');\n        }\n        if ((swipeAngle <= 360) && (swipeAngle >= 315)) {\n            return (_.options.rtl === false ? 'left' : 'right');\n        }\n        if ((swipeAngle >= 135) && (swipeAngle <= 225)) {\n            return (_.options.rtl === false ? 'right' : 'left');\n        }\n        if (_.options.verticalSwiping === true) {\n            if ((swipeAngle >= 35) && (swipeAngle <= 135)) {\n                return 'left';\n            } else {\n                return 'right';\n            }\n        }\n\n        return 'vertical';\n\n    };\n\n    Slick.prototype.swipeEnd = function(event) {\n\n        var _ = this,\n            slideCount;\n\n        _.dragging = false;\n\n        _.shouldClick = (_.touchObject.swipeLength > 10) ? false : true;\n\n        if (_.touchObject.curX === undefined) {\n            return false;\n        }\n\n        if (_.touchObject.edgeHit === true) {\n            _.$slider.trigger('edge', [_, _.swipeDirection()]);\n        }\n\n        if (_.touchObject.swipeLength >= _.touchObject.minSwipe) {\n\n            switch (_.swipeDirection()) {\n                case 'left':\n                    slideCount = _.options.swipeToSlide ? _.checkNavigable(_.currentSlide + _.getSlideCount()) : _.currentSlide + _.getSlideCount();\n                    _.slideHandler(slideCount);\n                    _.currentDirection = 0;\n                    _.touchObject = {};\n                    _.$slider.trigger('swipe', [_, 'left']);\n                    break;\n\n                case 'right':\n                    slideCount = _.options.swipeToSlide ? _.checkNavigable(_.currentSlide - _.getSlideCount()) : _.currentSlide - _.getSlideCount();\n                    _.slideHandler(slideCount);\n                    _.currentDirection = 1;\n                    _.touchObject = {};\n                    _.$slider.trigger('swipe', [_, 'right']);\n                    break;\n            }\n        } else {\n            if (_.touchObject.startX !== _.touchObject.curX) {\n                _.slideHandler(_.currentSlide);\n                _.touchObject = {};\n            }\n        }\n\n    };\n\n    Slick.prototype.swipeHandler = function(event) {\n\n        var _ = this;\n\n        if ((_.options.swipe === false) || ('ontouchend' in document && _.options.swipe === false)) {\n            return;\n        } else if (_.options.draggable === false && event.type.indexOf('mouse') !== -1) {\n            return;\n        }\n\n        _.touchObject.fingerCount = event.originalEvent && event.originalEvent.touches !== undefined ?\n            event.originalEvent.touches.length : 1;\n\n        _.touchObject.minSwipe = _.listWidth / _.options\n            .touchThreshold;\n\n        if (_.options.verticalSwiping === true) {\n            _.touchObject.minSwipe = _.listHeight / _.options\n                .touchThreshold;\n        }\n\n        switch (event.data.action) {\n\n            case 'start':\n                _.swipeStart(event);\n                break;\n\n            case 'move':\n                _.swipeMove(event);\n                break;\n\n            case 'end':\n                _.swipeEnd(event);\n                break;\n\n        }\n\n    };\n\n    Slick.prototype.swipeMove = function(event) {\n\n        var _ = this,\n            edgeWasHit = false,\n            curLeft, swipeDirection, swipeLength, positionOffset, touches;\n\n        touches = event.originalEvent !== undefined ? event.originalEvent.touches : null;\n\n        if (!_.dragging || touches && touches.length !== 1) {\n            return false;\n        }\n\n        curLeft = _.getLeft(_.currentSlide);\n\n        _.touchObject.curX = touches !== undefined ? touches[0].pageX : event.clientX;\n        _.touchObject.curY = touches !== undefined ? touches[0].pageY : event.clientY;\n\n        _.touchObject.swipeLength = Math.round(Math.sqrt(\n            Math.pow(_.touchObject.curX - _.touchObject.startX, 2)));\n\n        if (_.options.verticalSwiping === true) {\n            _.touchObject.swipeLength = Math.round(Math.sqrt(\n                Math.pow(_.touchObject.curY - _.touchObject.startY, 2)));\n        }\n\n        swipeDirection = _.swipeDirection();\n\n        if (swipeDirection === 'vertical') {\n            return;\n        }\n\n        if (event.originalEvent !== undefined && _.touchObject.swipeLength > 4) {\n            event.preventDefault();\n        }\n\n        positionOffset = (_.options.rtl === false ? 1 : -1) * (_.touchObject.curX > _.touchObject.startX ? 1 : -1);\n        if (_.options.verticalSwiping === true) {\n            positionOffset = _.touchObject.curY > _.touchObject.startY ? 1 : -1;\n        }\n\n\n        swipeLength = _.touchObject.swipeLength;\n\n        _.touchObject.edgeHit = false;\n\n        if (_.options.infinite === false) {\n            if ((_.currentSlide === 0 && swipeDirection === 'right') || (_.currentSlide >= _.getDotCount() && swipeDirection === 'left')) {\n                swipeLength = _.touchObject.swipeLength * _.options.edgeFriction;\n                _.touchObject.edgeHit = true;\n            }\n        }\n\n        if (_.options.vertical === false) {\n            _.swipeLeft = curLeft + swipeLength * positionOffset;\n        } else {\n            _.swipeLeft = curLeft + (swipeLength * (_.$list.height() / _.listWidth)) * positionOffset;\n        }\n        if (_.options.verticalSwiping === true) {\n            _.swipeLeft = curLeft + swipeLength * positionOffset;\n        }\n\n        if (_.options.fade === true || _.options.touchMove === false) {\n            return false;\n        }\n\n        if (_.animating === true) {\n            _.swipeLeft = null;\n            return false;\n        }\n\n        _.setCSS(_.swipeLeft);\n\n    };\n\n    Slick.prototype.swipeStart = function(event) {\n\n        var _ = this,\n            touches;\n\n        if (_.touchObject.fingerCount !== 1 || _.slideCount <= _.options.slidesToShow) {\n            _.touchObject = {};\n            return false;\n        }\n\n        if (event.originalEvent !== undefined && event.originalEvent.touches !== undefined) {\n            touches = event.originalEvent.touches[0];\n        }\n\n        _.touchObject.startX = _.touchObject.curX = touches !== undefined ? touches.pageX : event.clientX;\n        _.touchObject.startY = _.touchObject.curY = touches !== undefined ? touches.pageY : event.clientY;\n\n        _.dragging = true;\n\n    };\n\n    Slick.prototype.unfilterSlides = Slick.prototype.slickUnfilter = function() {\n\n        var _ = this;\n\n        if (_.$slidesCache !== null) {\n\n            _.unload();\n\n            _.$slideTrack.children(this.options.slide).detach();\n\n            _.$slidesCache.appendTo(_.$slideTrack);\n\n            _.reinit();\n\n        }\n\n    };\n\n    Slick.prototype.unload = function() {\n\n        var _ = this;\n\n        $('.slick-cloned', _.$slider).remove();\n\n        if (_.$dots) {\n            _.$dots.remove();\n        }\n\n        if (_.$prevArrow && _.htmlExpr.test(_.options.prevArrow)) {\n            _.$prevArrow.remove();\n        }\n\n        if (_.$nextArrow && _.htmlExpr.test(_.options.nextArrow)) {\n            _.$nextArrow.remove();\n        }\n\n        _.$slides\n            .removeClass('slick-slide slick-active slick-visible slick-current')\n            .attr('aria-hidden', 'true')\n            .css('width', '');\n\n    };\n\n    Slick.prototype.unslick = function(fromBreakpoint) {\n\n        var _ = this;\n        _.$slider.trigger('unslick', [_, fromBreakpoint]);\n        _.destroy();\n\n    };\n\n    Slick.prototype.updateArrows = function() {\n\n        var _ = this,\n            centerOffset;\n\n        centerOffset = Math.floor(_.options.slidesToShow / 2);\n\n        if ( _.options.arrows === true &&\n            _.slideCount > _.options.slidesToShow &&\n            !_.options.infinite ) {\n\n            _.$prevArrow.removeClass('slick-disabled').attr('aria-disabled', 'false');\n            _.$nextArrow.removeClass('slick-disabled').attr('aria-disabled', 'false');\n\n            if (_.currentSlide === 0) {\n\n                _.$prevArrow.addClass('slick-disabled').attr('aria-disabled', 'true');\n                _.$nextArrow.removeClass('slick-disabled').attr('aria-disabled', 'false');\n\n            } else if (_.currentSlide >= _.slideCount - _.options.slidesToShow && _.options.centerMode === false) {\n\n                _.$nextArrow.addClass('slick-disabled').attr('aria-disabled', 'true');\n                _.$prevArrow.removeClass('slick-disabled').attr('aria-disabled', 'false');\n\n            } else if (_.currentSlide >= _.slideCount - 1 && _.options.centerMode === true) {\n\n                _.$nextArrow.addClass('slick-disabled').attr('aria-disabled', 'true');\n                _.$prevArrow.removeClass('slick-disabled').attr('aria-disabled', 'false');\n\n            }\n\n        }\n\n    };\n\n    Slick.prototype.updateDots = function() {\n\n        var _ = this;\n\n        if (_.$dots !== null) {\n\n            _.$dots\n                .find('li')\n                .removeClass('slick-active')\n                .attr('aria-hidden', 'true');\n\n            _.$dots\n                .find('li')\n                .eq(Math.floor(_.currentSlide / _.options.slidesToScroll))\n                .addClass('slick-active')\n                .attr('aria-hidden', 'false');\n\n        }\n\n    };\n\n    Slick.prototype.visibility = function() {\n\n        var _ = this;\n\n        if (document[_.hidden]) {\n            _.paused = true;\n            _.autoPlayClear();\n        } else {\n            if (_.options.autoplay === true) {\n                _.paused = false;\n                _.autoPlay();\n            }\n        }\n\n    };\n    Slick.prototype.initADA = function() {\n        var _ = this;\n        _.$slides.add(_.$slideTrack.find('.slick-cloned')).attr({\n            'aria-hidden': 'true',\n            'tabindex': '-1'\n        }).find('a, input, button, select').attr({\n            'tabindex': '-1'\n        });\n\n        _.$slideTrack.attr('role', 'listbox');\n\n        _.$slides.not(_.$slideTrack.find('.slick-cloned')).each(function(i) {\n            $(this).attr({\n                'role': 'option',\n                'aria-describedby': 'slick-slide' + _.instanceUid + i + ''\n            });\n        });\n\n        if (_.$dots !== null) {\n            _.$dots.attr('role', 'tablist').find('li').each(function(i) {\n                $(this).attr({\n                    'role': 'presentation',\n                    'aria-selected': 'false',\n                    'aria-controls': 'navigation' + _.instanceUid + i + '',\n                    'id': 'slick-slide' + _.instanceUid + i + ''\n                });\n            })\n                .first().attr('aria-selected', 'true').end()\n                .find('button').attr('role', 'button').end()\n                .closest('div').attr('role', 'toolbar');\n        }\n        _.activateADA();\n\n    };\n\n    Slick.prototype.activateADA = function() {\n        var _ = this,\n        _isSlideOnFocus =_.$slider.find('*').is(':focus');\n        // _isSlideOnFocus = _.$slides.is(':focus') || _.$slides.find('*').is(':focus');\n\n        _.$slideTrack.find('.slick-active').attr({\n            'aria-hidden': 'false',\n            'tabindex': '0'\n        }).find('a, input, button, select').attr({\n            'tabindex': '0'\n        });\n\n        (_isSlideOnFocus) &&  _.$slideTrack.find('.slick-active').focus();\n\n    };\n\n    Slick.prototype.focusHandler = function() {\n        var _ = this;\n        _.$slider.on('focus.slick blur.slick', '*', function(event) {\n            event.stopImmediatePropagation();\n            var sf = $(this);\n            setTimeout(function() {\n                if (_.isPlay) {\n                    if (sf.is(':focus')) {\n                        _.autoPlayClear();\n                        _.paused = true;\n                    } else {\n                        _.paused = false;\n                        _.autoPlay();\n                    }\n                }\n            }, 0);\n        });\n    };\n\n    $.fn.slick = function() {\n        var _ = this,\n            opt = arguments[0],\n            args = Array.prototype.slice.call(arguments, 1),\n            l = _.length,\n            i = 0,\n            ret;\n        for (i; i < l; i++) {\n            if (typeof opt == 'object' || typeof opt == 'undefined')\n                _[i].slick = new Slick(_[i], opt);\n            else\n                ret = _[i].slick[opt].apply(_[i].slick, args);\n            if (typeof ret != 'undefined') return ret;\n        }\n        return _;\n    };\n\n}));\n"
  },
  {
    "path": "content/js/stencil/cjs/es5/build/bubpozqb.entry.js",
    "content": "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar ionic_site_components_core_js_1 = require(\"../ionic-site-components.core.js\");\nvar CACHED_MAP;\nfunction getIconMap() { if (!CACHED_MAP) {\n    var t = window;\n    t.Ionicons = t.Ionicons || {}, CACHED_MAP = t.Ionicons.map = t.Ionicons.map || new Map;\n} return CACHED_MAP; }\nfunction getName(t, e, i, n) { return e = \"ios\" === (e = (e || \"md\").toLowerCase()) ? \"ios\" : \"md\", i && \"ios\" === e ? t = i.toLowerCase() : n && \"md\" === e ? t = n.toLowerCase() : t && (t = t.toLowerCase(), /^md-|^ios-|^logo-/.test(t) || (t = e + \"-\" + t)), \"string\" != typeof t || \"\" === t.trim() ? null : \"\" !== t.replace(/[a-z]|-|\\d/gi, \"\") ? null : t; }\nfunction getSrc(t) { return \"string\" == typeof t && isSrc(t = t.trim()) ? t : null; }\nfunction isSrc(t) { return t.length > 0 && /(\\/|\\.)/.test(t); }\nfunction isValid(t) { if (1 === t.nodeType) {\n    if (\"script\" === t.nodeName.toLowerCase())\n        return !1;\n    for (var e = 0; e < t.attributes.length; e++) {\n        var i = t.attributes[e].value;\n        if (\"string\" == typeof i && 0 === i.toLowerCase().indexOf(\"on\"))\n            return !1;\n    }\n    for (e = 0; e < t.childNodes.length; e++)\n        if (!isValid(t.childNodes[e]))\n            return !1;\n} return !0; }\nvar Icon = function () { function t() { this.isVisible = !1, this.lazy = !1; } return t.prototype.componentWillLoad = function () { var t = this; this.waitUntilVisible(this.el, \"50px\", function () { t.isVisible = !0, t.loadIcon(); }); }, t.prototype.componentDidUnload = function () { this.io && (this.io.disconnect(), this.io = void 0); }, t.prototype.waitUntilVisible = function (t, e, i) { var n = this; if (this.lazy && this.win && this.win.IntersectionObserver) {\n    var r = this.io = new this.win.IntersectionObserver(function (t) { t[0].isIntersecting && (r.disconnect(), n.io = void 0, i()); }, { rootMargin: e });\n    r.observe(t);\n}\nelse\n    i(); }, t.prototype.loadIcon = function () { var t = this; if (!this.isServer && this.isVisible) {\n    var e = this.getUrl();\n    e ? getSvgContent(this.doc, e, \"s-ion-icon\").then(function (e) { return t.svgContent = e; }) : console.error(\"icon was not resolved\");\n} if (!this.ariaLabel) {\n    var i = getName(this.getName(), this.mode, this.ios, this.md);\n    i && (this.ariaLabel = i.replace(\"ios-\", \"\").replace(\"md-\", \"\").replace(/\\-/g, \" \"));\n} }, t.prototype.getName = function () { return void 0 !== this.name ? this.name : this.icon && !isSrc(this.icon) ? this.icon : void 0; }, t.prototype.getUrl = function () { var t = getSrc(this.src); return t || ((t = getName(this.getName(), this.mode, this.ios, this.md)) ? this.getNamedUrl(t) : (t = getSrc(this.icon)) || null); }, t.prototype.getNamedUrl = function (t) { return getIconMap().get(t) || this.resourcesUrl + \"svg/\" + t + \".svg\"; }, t.prototype.hostData = function () { var t, e = this.flipRtl || this.ariaLabel && this.ariaLabel.indexOf(\"arrow\") > -1 && !1 !== this.flipRtl; return { role: \"img\", class: Object.assign({}, createColorClasses(this.color), (t = {}, t[\"icon-\" + this.size] = !!this.size, t[\"flip-rtl\"] = e && \"rtl\" === this.doc.dir, t)) }; }, t.prototype.render = function () { return ionic_site_components_core_js_1.h(\"div\", !this.isServer && this.svgContent ? { class: \"icon-inner\", innerHTML: this.svgContent } : { class: \"icon-inner\" }); }, Object.defineProperty(t, \"is\", { get: function () { return \"ion-icon\"; }, enumerable: !0, configurable: !0 }), Object.defineProperty(t, \"encapsulation\", { get: function () { return \"shadow\"; }, enumerable: !0, configurable: !0 }), Object.defineProperty(t, \"properties\", { get: function () { return { ariaLabel: { type: String, attr: \"aria-label\", reflectToAttr: !0, mutable: !0 }, color: { type: String, attr: \"color\" }, doc: { context: \"document\" }, el: { elementRef: !0 }, flipRtl: { type: Boolean, attr: \"flip-rtl\" }, icon: { type: String, attr: \"icon\", watchCallbacks: [\"loadIcon\"] }, ios: { type: String, attr: \"ios\" }, isServer: { context: \"isServer\" }, isVisible: { state: !0 }, lazy: { type: Boolean, attr: \"lazy\" }, md: { type: String, attr: \"md\" }, mode: { type: String, attr: \"mode\" }, name: { type: String, attr: \"name\", watchCallbacks: [\"loadIcon\"] }, resourcesUrl: { context: \"resourcesUrl\" }, size: { type: String, attr: \"size\" }, src: { type: String, attr: \"src\", watchCallbacks: [\"loadIcon\"] }, svgContent: { state: !0 }, win: { context: \"window\" } }; }, enumerable: !0, configurable: !0 }), Object.defineProperty(t, \"style\", { get: function () { return \":host{display:inline-block;width:1em;height:1em;contain:strict;-webkit-box-sizing:content-box!important;box-sizing:content-box!important}.icon-inner,svg{display:block;fill:currentColor;stroke:currentColor;height:100%;width:100%}:host(.flip-rtl) .icon-inner{-webkit-transform:scaleX(-1);transform:scaleX(-1)}:host(.icon-small){font-size:18px!important}:host(.icon-large){font-size:32px!important}:host(.ion-color){color:var(--ion-color-base)!important}:host(.ion-color-primary){--ion-color-base:var(--ion-color-primary,#3880ff)}:host(.ion-color-secondary){--ion-color-base:var(--ion-color-secondary,#0cd1e8)}:host(.ion-color-tertiary){--ion-color-base:var(--ion-color-tertiary,#f4a942)}:host(.ion-color-success){--ion-color-base:var(--ion-color-success,#10dc60)}:host(.ion-color-warning){--ion-color-base:var(--ion-color-warning,#ffce00)}:host(.ion-color-danger){--ion-color-base:var(--ion-color-danger,#f14141)}:host(.ion-color-light){--ion-color-base:var(--ion-color-light,#f4f5f8)}:host(.ion-color-medium){--ion-color-base:var(--ion-color-medium,#989aa2)}:host(.ion-color-dark){--ion-color-base:var(--ion-color-dark,#222428)}\"; }, enumerable: !0, configurable: !0 }), t; }(), requests = new Map;\nexports.IonIcon = Icon;\nfunction getSvgContent(t, e, i) { var n = requests.get(e); return n || (n = fetch(e, { cache: \"force-cache\" }).then(function (t) { return isStatusValid(t.status) ? t.text() : Promise.resolve(null); }).then(function (e) { return validateContent(t, e, i); }), requests.set(e, n)), n; }\nfunction isStatusValid(t) { return t <= 299; }\nfunction validateContent(t, e, i) { if (e) {\n    var n = t.createDocumentFragment(), r = t.createElement(\"div\");\n    r.innerHTML = e, n.appendChild(r);\n    for (var o = r.childNodes.length - 1; o >= 0; o--)\n        \"svg\" !== r.childNodes[o].nodeName.toLowerCase() && r.removeChild(r.childNodes[o]);\n    var s = r.firstElementChild;\n    if (s && \"svg\" === s.nodeName.toLowerCase() && (i && s.setAttribute(\"class\", i), isValid(s)))\n        return r.innerHTML;\n} return \"\"; }\nfunction createColorClasses(t) { var e; return t ? ((e = { \"ion-color\": !0 })[\"ion-color-\" + t] = !0, e) : null; }\n"
  },
  {
    "path": "content/js/stencil/cjs/es5/build/bubpozqb.sc.entry.js",
    "content": "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar ionic_site_components_core_js_1 = require(\"../ionic-site-components.core.js\");\nvar CACHED_MAP;\nfunction getIconMap() { if (!CACHED_MAP) {\n    var t = window;\n    t.Ionicons = t.Ionicons || {}, CACHED_MAP = t.Ionicons.map = t.Ionicons.map || new Map;\n} return CACHED_MAP; }\nfunction getName(t, e, i, n) { return e = \"ios\" === (e = (e || \"md\").toLowerCase()) ? \"ios\" : \"md\", i && \"ios\" === e ? t = i.toLowerCase() : n && \"md\" === e ? t = n.toLowerCase() : t && (t = t.toLowerCase(), /^md-|^ios-|^logo-/.test(t) || (t = e + \"-\" + t)), \"string\" != typeof t || \"\" === t.trim() ? null : \"\" !== t.replace(/[a-z]|-|\\d/gi, \"\") ? null : t; }\nfunction getSrc(t) { return \"string\" == typeof t && isSrc(t = t.trim()) ? t : null; }\nfunction isSrc(t) { return t.length > 0 && /(\\/|\\.)/.test(t); }\nfunction isValid(t) { if (1 === t.nodeType) {\n    if (\"script\" === t.nodeName.toLowerCase())\n        return !1;\n    for (var e = 0; e < t.attributes.length; e++) {\n        var i = t.attributes[e].value;\n        if (\"string\" == typeof i && 0 === i.toLowerCase().indexOf(\"on\"))\n            return !1;\n    }\n    for (e = 0; e < t.childNodes.length; e++)\n        if (!isValid(t.childNodes[e]))\n            return !1;\n} return !0; }\nvar Icon = function () { function t() { this.isVisible = !1, this.lazy = !1; } return t.prototype.componentWillLoad = function () { var t = this; this.waitUntilVisible(this.el, \"50px\", function () { t.isVisible = !0, t.loadIcon(); }); }, t.prototype.componentDidUnload = function () { this.io && (this.io.disconnect(), this.io = void 0); }, t.prototype.waitUntilVisible = function (t, e, i) { var n = this; if (this.lazy && this.win && this.win.IntersectionObserver) {\n    var r = this.io = new this.win.IntersectionObserver(function (t) { t[0].isIntersecting && (r.disconnect(), n.io = void 0, i()); }, { rootMargin: e });\n    r.observe(t);\n}\nelse\n    i(); }, t.prototype.loadIcon = function () { var t = this; if (!this.isServer && this.isVisible) {\n    var e = this.getUrl();\n    e ? getSvgContent(this.doc, e, \"s-ion-icon\").then(function (e) { return t.svgContent = e; }) : console.error(\"icon was not resolved\");\n} if (!this.ariaLabel) {\n    var i = getName(this.getName(), this.mode, this.ios, this.md);\n    i && (this.ariaLabel = i.replace(\"ios-\", \"\").replace(\"md-\", \"\").replace(/\\-/g, \" \"));\n} }, t.prototype.getName = function () { return void 0 !== this.name ? this.name : this.icon && !isSrc(this.icon) ? this.icon : void 0; }, t.prototype.getUrl = function () { var t = getSrc(this.src); return t || ((t = getName(this.getName(), this.mode, this.ios, this.md)) ? this.getNamedUrl(t) : (t = getSrc(this.icon)) || null); }, t.prototype.getNamedUrl = function (t) { return getIconMap().get(t) || this.resourcesUrl + \"svg/\" + t + \".svg\"; }, t.prototype.hostData = function () { var t, e = this.flipRtl || this.ariaLabel && this.ariaLabel.indexOf(\"arrow\") > -1 && !1 !== this.flipRtl; return { role: \"img\", class: Object.assign({}, createColorClasses(this.color), (t = {}, t[\"icon-\" + this.size] = !!this.size, t[\"flip-rtl\"] = e && \"rtl\" === this.doc.dir, t)) }; }, t.prototype.render = function () { return ionic_site_components_core_js_1.h(\"div\", !this.isServer && this.svgContent ? { class: \"icon-inner\", innerHTML: this.svgContent } : { class: \"icon-inner\" }); }, Object.defineProperty(t, \"is\", { get: function () { return \"ion-icon\"; }, enumerable: !0, configurable: !0 }), Object.defineProperty(t, \"encapsulation\", { get: function () { return \"shadow\"; }, enumerable: !0, configurable: !0 }), Object.defineProperty(t, \"properties\", { get: function () { return { ariaLabel: { type: String, attr: \"aria-label\", reflectToAttr: !0, mutable: !0 }, color: { type: String, attr: \"color\" }, doc: { context: \"document\" }, el: { elementRef: !0 }, flipRtl: { type: Boolean, attr: \"flip-rtl\" }, icon: { type: String, attr: \"icon\", watchCallbacks: [\"loadIcon\"] }, ios: { type: String, attr: \"ios\" }, isServer: { context: \"isServer\" }, isVisible: { state: !0 }, lazy: { type: Boolean, attr: \"lazy\" }, md: { type: String, attr: \"md\" }, mode: { type: String, attr: \"mode\" }, name: { type: String, attr: \"name\", watchCallbacks: [\"loadIcon\"] }, resourcesUrl: { context: \"resourcesUrl\" }, size: { type: String, attr: \"size\" }, src: { type: String, attr: \"src\", watchCallbacks: [\"loadIcon\"] }, svgContent: { state: !0 }, win: { context: \"window\" } }; }, enumerable: !0, configurable: !0 }), Object.defineProperty(t, \"style\", { get: function () { return \".sc-ion-icon-h{display:inline-block;width:1em;height:1em;contain:strict;-webkit-box-sizing:content-box!important;box-sizing:content-box!important}.icon-inner.sc-ion-icon, svg.sc-ion-icon{display:block;fill:currentColor;stroke:currentColor;height:100%;width:100%}.flip-rtl.sc-ion-icon-h   .icon-inner.sc-ion-icon{-webkit-transform:scaleX(-1);transform:scaleX(-1)}.icon-small.sc-ion-icon-h{font-size:18px!important}.icon-large.sc-ion-icon-h{font-size:32px!important}.ion-color.sc-ion-icon-h{color:var(--ion-color-base)!important}.ion-color-primary.sc-ion-icon-h{--ion-color-base:var(--ion-color-primary,#3880ff)}.ion-color-secondary.sc-ion-icon-h{--ion-color-base:var(--ion-color-secondary,#0cd1e8)}.ion-color-tertiary.sc-ion-icon-h{--ion-color-base:var(--ion-color-tertiary,#f4a942)}.ion-color-success.sc-ion-icon-h{--ion-color-base:var(--ion-color-success,#10dc60)}.ion-color-warning.sc-ion-icon-h{--ion-color-base:var(--ion-color-warning,#ffce00)}.ion-color-danger.sc-ion-icon-h{--ion-color-base:var(--ion-color-danger,#f14141)}.ion-color-light.sc-ion-icon-h{--ion-color-base:var(--ion-color-light,#f4f5f8)}.ion-color-medium.sc-ion-icon-h{--ion-color-base:var(--ion-color-medium,#989aa2)}.ion-color-dark.sc-ion-icon-h{--ion-color-base:var(--ion-color-dark,#222428)}\"; }, enumerable: !0, configurable: !0 }), t; }(), requests = new Map;\nexports.IonIcon = Icon;\nfunction getSvgContent(t, e, i) { var n = requests.get(e); return n || (n = fetch(e, { cache: \"force-cache\" }).then(function (t) { return isStatusValid(t.status) ? t.text() : Promise.resolve(null); }).then(function (e) { return validateContent(t, e, i); }), requests.set(e, n)), n; }\nfunction isStatusValid(t) { return t <= 299; }\nfunction validateContent(t, e, i) { if (e) {\n    var n = t.createDocumentFragment(), r = t.createElement(\"div\");\n    r.innerHTML = e, n.appendChild(r);\n    for (var o = r.childNodes.length - 1; o >= 0; o--)\n        \"svg\" !== r.childNodes[o].nodeName.toLowerCase() && r.removeChild(r.childNodes[o]);\n    var s = r.firstElementChild;\n    if (s && \"svg\" === s.nodeName.toLowerCase() && (i && s.setAttribute(\"class\", i), isValid(s)))\n        return r.innerHTML;\n} return \"\"; }\nfunction createColorClasses(t) { var e; return t ? ((e = { \"ion-color\": !0 })[\"ion-color-\" + t] = !0, e) : null; }\n"
  },
  {
    "path": "content/js/stencil/cjs/es5/build/cetridhp.entry.js",
    "content": "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar ionic_site_components_core_js_1 = require(\"../ionic-site-components.core.js\");\nvar IonicSnapBar = function () { function e() { this.active = !1; } return e.prototype.componentDidLoad = function () { var e = this; setTimeout(function () { e.active = !0; }, 2500); }, e.prototype.close = function () { this.active = !1; }, e.prototype.render = function () { return [ionic_site_components_core_js_1.h(\"div\", { class: \"wrapper \" + (this.active ? \"active\" : \"\") }, ionic_site_components_core_js_1.h(\"slot\", null)), ionic_site_components_core_js_1.h(\"div\", { id: \"snap-bar-close\", class: \"close\", onClick: this.close.bind(this) }, \"×\")]; }, Object.defineProperty(e, \"is\", { get: function () { return \"ionic-snap-bar\"; }, enumerable: !0, configurable: !0 }), Object.defineProperty(e, \"properties\", { get: function () { return { active: { state: !0 } }; }, enumerable: !0, configurable: !0 }), Object.defineProperty(e, \"style\", { get: function () { return \"ionic-snap-bar{background:-webkit-gradient(linear,left top,right top,from(#17203d),to(#1f2c53));background:linear-gradient(90deg,#17203d,#1f2c53);display:none;width:100%;position:relative;padding:0 24px;z-index:1;font-family:Eina,Helvetica Neue,Helvetica,sans-serif}ionic-snap-bar.hydrated{display:block}ionic-snap-bar .wrapper{padding:0 16px;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-align:center;align-items:center;-ms-flex-pack:distribute;justify-content:space-around;color:hsla(0,0%,100%,.6);margin:0 auto;max-width:586px;height:0;-webkit-transition:height .4s ease,padding .4s ease;transition:height .4s ease,padding .4s ease}ionic-snap-bar .wrapper.active{height:48px;padding-top:13px;padding-bottom:13px}ionic-snap-bar .wrapper.active>*{-webkit-transform:scaleY(1);transform:scaleY(1)}ionic-snap-bar .wrapper.active+.close{opacity:1;pointer-events:all}ionic-snap-bar .wrapper>*{font-size:1em;font-weight:600;display:inline-block;-webkit-transform:scaleY(0);transform:scaleY(0);-webkit-transition:transform .2s ease;transition:transform .2s ease}ionic-snap-bar .wrapper a{border-radius:1.8em;text-transform:uppercase;color:#fff;text-decoration:none;background:rgba(56,128,255,.28);display:inline-block;padding:6px 12px 4px;font-size:10px;letter-spacing:.1em;margin-bottom:2px;-webkit-transition:background .2s ease;transition:background .2s ease;font-weight:800}ionic-snap-bar .wrapper a:after{content:\\\"\\\";border:solid #fff;border-width:0 1px 1px 0;display:inline-block;padding:3px;margin-left:2px;vertical-align:1px;-webkit-transform:rotate(-45deg);transform:rotate(-45deg)}ionic-snap-bar .wrapper a:hover{background:rgba(56,128,255,.4)}ionic-snap-bar .wrapper h1,ionic-snap-bar .wrapper h2,ionic-snap-bar .wrapper h3,ionic-snap-bar .wrapper h4,ionic-snap-bar .wrapper strong{font-weight:700;color:#fff;letter-spacing:.01em}ionic-snap-bar .close{color:hsla(0,0%,100%,.3);position:absolute;font-size:24px;right:16px;top:5px;cursor:pointer;pointer-events:none;opacity:0;-webkit-transition:opacity .4s ease,color .2s ease;transition:opacity .4s ease,color .2s ease}ionic-snap-bar .close:hover{color:hsla(0,0%,100%,.5)}\"; }, enumerable: !0, configurable: !0 }), e; }();\nexports.IonicSnapBar = IonicSnapBar;\n"
  },
  {
    "path": "content/js/stencil/cjs/es5/build/cetridhp.sc.entry.js",
    "content": "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar ionic_site_components_core_js_1 = require(\"../ionic-site-components.core.js\");\nvar IonicSnapBar = function () { function e() { this.active = !1; } return e.prototype.componentDidLoad = function () { var e = this; setTimeout(function () { e.active = !0; }, 2500); }, e.prototype.close = function () { this.active = !1; }, e.prototype.render = function () { return [ionic_site_components_core_js_1.h(\"div\", { class: \"wrapper \" + (this.active ? \"active\" : \"\") }, ionic_site_components_core_js_1.h(\"slot\", null)), ionic_site_components_core_js_1.h(\"div\", { id: \"snap-bar-close\", class: \"close\", onClick: this.close.bind(this) }, \"×\")]; }, Object.defineProperty(e, \"is\", { get: function () { return \"ionic-snap-bar\"; }, enumerable: !0, configurable: !0 }), Object.defineProperty(e, \"properties\", { get: function () { return { active: { state: !0 } }; }, enumerable: !0, configurable: !0 }), Object.defineProperty(e, \"style\", { get: function () { return \"ionic-snap-bar{background:-webkit-gradient(linear,left top,right top,from(#17203d),to(#1f2c53));background:linear-gradient(90deg,#17203d,#1f2c53);display:none;width:100%;position:relative;padding:0 24px;z-index:1;font-family:Eina,Helvetica Neue,Helvetica,sans-serif}ionic-snap-bar.hydrated{display:block}ionic-snap-bar .wrapper{padding:0 16px;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-align:center;align-items:center;-ms-flex-pack:distribute;justify-content:space-around;color:hsla(0,0%,100%,.6);margin:0 auto;max-width:586px;height:0;-webkit-transition:height .4s ease,padding .4s ease;transition:height .4s ease,padding .4s ease}ionic-snap-bar .wrapper.active{height:48px;padding-top:13px;padding-bottom:13px}ionic-snap-bar .wrapper.active>*{-webkit-transform:scaleY(1);transform:scaleY(1)}ionic-snap-bar .wrapper.active+.close{opacity:1;pointer-events:all}ionic-snap-bar .wrapper>*{font-size:1em;font-weight:600;display:inline-block;-webkit-transform:scaleY(0);transform:scaleY(0);-webkit-transition:transform .2s ease;transition:transform .2s ease}ionic-snap-bar .wrapper a{border-radius:1.8em;text-transform:uppercase;color:#fff;text-decoration:none;background:rgba(56,128,255,.28);display:inline-block;padding:6px 12px 4px;font-size:10px;letter-spacing:.1em;margin-bottom:2px;-webkit-transition:background .2s ease;transition:background .2s ease;font-weight:800}ionic-snap-bar .wrapper a:after{content:\\\"\\\";border:solid #fff;border-width:0 1px 1px 0;display:inline-block;padding:3px;margin-left:2px;vertical-align:1px;-webkit-transform:rotate(-45deg);transform:rotate(-45deg)}ionic-snap-bar .wrapper a:hover{background:rgba(56,128,255,.4)}ionic-snap-bar .wrapper h1,ionic-snap-bar .wrapper h2,ionic-snap-bar .wrapper h3,ionic-snap-bar .wrapper h4,ionic-snap-bar .wrapper strong{font-weight:700;color:#fff;letter-spacing:.01em}ionic-snap-bar .close{color:hsla(0,0%,100%,.3);position:absolute;font-size:24px;right:16px;top:5px;cursor:pointer;pointer-events:none;opacity:0;-webkit-transition:opacity .4s ease,color .2s ease;transition:opacity .4s ease,color .2s ease}ionic-snap-bar .close:hover{color:hsla(0,0%,100%,.5)}\"; }, enumerable: !0, configurable: !0 }), e; }();\nexports.IonicSnapBar = IonicSnapBar;\n"
  },
  {
    "path": "content/js/stencil/cjs/es5/build/cz7vrrja.entry.js",
    "content": "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar ionic_site_components_core_js_1 = require(\"../ionic-site-components.core.js\");\nvar IonicToggle = function () { function e() { } return e.prototype.componentDidLoad = function () { }, e.prototype.selectionChanged = function (e) { var t = e.detail, o = this.el.querySelectorAll(\"ionic-toggle-button\"); Array.prototype.forEach.call(o, function (e) { e.deselect(); }); var n = t.tab; t.select(), console.log(\"Selecting this one\", n, t); var r = this.el.querySelectorAll(\"ionic-toggle-tab\"); console.log(\"Found tabs\", r), Array.prototype.forEach.call(r, function (e) { e.hide(), e.tab === n && e.show(); }); }, e.prototype.render = function () { return ionic_site_components_core_js_1.h(\"div\", { class: \"toggle-content\" }, ionic_site_components_core_js_1.h(\"div\", { class: \"toggle-buttons\" }, ionic_site_components_core_js_1.h(\"slot\", { name: \"buttons\" })), ionic_site_components_core_js_1.h(\"div\", { class: \"toggle-tabs\" }, ionic_site_components_core_js_1.h(\"slot\", { name: \"tabs\" }))); }, Object.defineProperty(e, \"is\", { get: function () { return \"ionic-toggle\"; }, enumerable: !0, configurable: !0 }), Object.defineProperty(e, \"encapsulation\", { get: function () { return \"shadow\"; }, enumerable: !0, configurable: !0 }), Object.defineProperty(e, \"properties\", { get: function () { return { el: { elementRef: !0 } }; }, enumerable: !0, configurable: !0 }), Object.defineProperty(e, \"listeners\", { get: function () { return [{ name: \"toggleSelected\", method: \"selectionChanged\" }]; }, enumerable: !0, configurable: !0 }), Object.defineProperty(e, \"style\", { get: function () { return \":host{display:block}.toggle-buttons{display:-ms-flexbox;display:flex;-ms-flex-direction:row;flex-direction:row;-ms-flex-pack:center;justify-content:center}\"; }, enumerable: !0, configurable: !0 }), e; }();\nexports.IonicToggle = IonicToggle;\n"
  },
  {
    "path": "content/js/stencil/cjs/es5/build/cz7vrrja.sc.entry.js",
    "content": "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar ionic_site_components_core_js_1 = require(\"../ionic-site-components.core.js\");\nvar IonicToggle = function () { function e() { } return e.prototype.componentDidLoad = function () { }, e.prototype.selectionChanged = function (e) { var t = e.detail, o = this.el.querySelectorAll(\"ionic-toggle-button\"); Array.prototype.forEach.call(o, function (e) { e.deselect(); }); var n = t.tab; t.select(), console.log(\"Selecting this one\", n, t); var r = this.el.querySelectorAll(\"ionic-toggle-tab\"); console.log(\"Found tabs\", r), Array.prototype.forEach.call(r, function (e) { e.hide(), e.tab === n && e.show(); }); }, e.prototype.render = function () { return ionic_site_components_core_js_1.h(\"div\", { class: \"toggle-content\" }, ionic_site_components_core_js_1.h(\"div\", { class: \"toggle-buttons\" }, ionic_site_components_core_js_1.h(\"slot\", { name: \"buttons\" })), ionic_site_components_core_js_1.h(\"div\", { class: \"toggle-tabs\" }, ionic_site_components_core_js_1.h(\"slot\", { name: \"tabs\" }))); }, Object.defineProperty(e, \"is\", { get: function () { return \"ionic-toggle\"; }, enumerable: !0, configurable: !0 }), Object.defineProperty(e, \"encapsulation\", { get: function () { return \"shadow\"; }, enumerable: !0, configurable: !0 }), Object.defineProperty(e, \"properties\", { get: function () { return { el: { elementRef: !0 } }; }, enumerable: !0, configurable: !0 }), Object.defineProperty(e, \"listeners\", { get: function () { return [{ name: \"toggleSelected\", method: \"selectionChanged\" }]; }, enumerable: !0, configurable: !0 }), Object.defineProperty(e, \"style\", { get: function () { return \".sc-ionic-toggle-h{display:block}.toggle-buttons.sc-ionic-toggle{display:-ms-flexbox;display:flex;-ms-flex-direction:row;flex-direction:row;-ms-flex-pack:center;justify-content:center}\"; }, enumerable: !0, configurable: !0 }), e; }();\nexports.IonicToggle = IonicToggle;\n"
  },
  {
    "path": "content/js/stencil/cjs/es5/build/ehteibio.entry.js",
    "content": "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar tslib_1 = require(\"../polyfills/tslib.js\");\nvar ionic_site_components_core_js_1 = require(\"../ionic-site-components.core.js\");\nvar Close = function () { return ionic_site_components_core_js_1.h(\"svg\", { version: \"1.1\", xmlns: \"http://www.w3.org/2000/svg\", viewBox: \"0 0 512 512\", preserveAspectRatio: \"\", style: { \"enable-background\": \"new 0 0 512 512\" } }, ionic_site_components_core_js_1.h(\"path\", { d: \"M256,307c-2.4,0-4.8-0.4-7-1.2L78.3,246.3c-11.1-3.9-17-16-13.1-27.1c3.9-11.1,16.1-16.9,27.2-13l157.9,55.1\\n\\tc3.7,1.3,7.7,1.3,11.3,0l157.9-55.1c11.1-3.9,23.3,2,27.2,13c3.9,11.1-2,23.2-13.1,27.1L263,305.8C260.8,306.6,258.4,307,256,307z\" })); }, IonicSearch = function () { function t() { this.active = !1, this.query = \"\", this.pending = 0, this.results = null, this.dragY = null, this.startY = null, this.screenHeight = null, this.URLS = function () { var t = \"https://api.swiftype.com/api/v1/public/engines/\", e = \"9oVyaKGPzxoZAyUo9Sm8\"; return { autocomplete: function (i) { return t + \"suggest.json?q=\" + i + \"&engine_key=\" + e; }, search: function (i) { return t + \"search.json?q=\" + i + \"&engine_key=\" + e; } }; }, this.activate = this.activate.bind(this), this.close = this.close.bind(this), this.onKeyUp = this.onKeyUp.bind(this), this.touchStart = this.touchStart.bind(this), this.touchMove = this.touchMove.bind(this), this.touchEnd = this.touchEnd.bind(this), this.urls = this.URLS(); } return t.prototype.activate = function () { var t = this; this.active = !0, this.el.classList.add(\"active\"), setTimeout(function () { t.el.querySelector(\"input\").focus(); }, 500, this); }, t.prototype.close = function () { var t = this; this.active = !1, this.el.classList.remove(\"active\"), this.el.querySelector(\"input\").blur(), setTimeout(function () { t.el.querySelector(\"input\").value = \"\", t.results = null; }, 500, this); }, t.prototype.onKeyUp = function (t) { return tslib_1.__awaiter(this, void 0, void 0, function () { var e; return tslib_1.__generator(this, function (i) { switch (i.label) {\n    case 0: return 27 === t.keyCode ? (this.close(), [2]) : t.target.value.length < 3 ? (this.results = null, [2]) : (this.query = t.target.value, this.pending++, [4, fetch(this.urls.autocomplete(this.query))]);\n    case 1: return [4, i.sent().json()];\n    case 2: return e = i.sent(), this.pending--, this.results = e.records.page, [2];\n} }); }); }, t.prototype.touchStart = function (t) { this.screenHeight = window.innerHeight || document.documentElement.clientHeight || document.body.clientHeight, this.startY = Math.round(t.touches.item(0).screenY); }, t.prototype.touchMove = function (t) { t.preventDefault(), this.dragY = Math.max(0, Math.round((t.touches.item(0).screenY - this.startY) / this.screenHeight * 100)), this.dragStyles = { transitionDuration: \".1s\", transform: \"translate3d(0, \" + this.dragY + \"%, 0)\" }; }, t.prototype.isFirefox = function () { return -1 != navigator.userAgent.indexOf(\"Firefox\"); }, t.prototype.touchEnd = function () { this.dragY > 30 && this.close(), this.dragY = null, this.startY = null, this.dragStyles = {}; }, t.prototype.render = function () { var t = this; return [ionic_site_components_core_js_1.h(\"div\", { class: \"search-box\" + (this.active ? \" active\" : \"\"), style: this.dragStyles, onTouchMove: function (e) { return t.results && t.results.length > 5 ? null : e.preventDefault(); } }, ionic_site_components_core_js_1.h(\"input\", { type: \"text\", onKeyUp: this.onKeyUp, placeholder: \"Search Ionic..\" }), ionic_site_components_core_js_1.h(\"ion-icon\", { class: \"search-static \" + (this.active ? \" active\" : \"\"), name: \"md-search\" }), this.mobile && !this.isFirefox() ? ionic_site_components_core_js_1.h(\"div\", { class: \"mobile-close\", onClick: this.close, onTouchStart: this.touchStart, onTouchMove: this.touchMove, onTouchEnd: this.touchEnd }, ionic_site_components_core_js_1.h(Close, null)) : ionic_site_components_core_js_1.h(\"ion-icon\", { class: \"close \" + (this.active ? \" active\" : \"\"), name: \"md-close\", onClick: this.close }), null !== this.results ? ionic_site_components_core_js_1.h(\"ul\", null, this.results.map(function (t) { return ionic_site_components_core_js_1.h(\"li\", null, ionic_site_components_core_js_1.h(\"a\", { href: t.url, title: t.title }, ionic_site_components_core_js_1.h(\"strong\", null, t.title), ionic_site_components_core_js_1.h(\"span\", { innerHTML: t.highlight.sections }))); }), 0 === this.results.length ? ionic_site_components_core_js_1.h(\"li\", null, ionic_site_components_core_js_1.h(\"span\", { class: \"no-results\" }, \"No results\")) : null) : null, ionic_site_components_core_js_1.h(\"div\", { class: \"slot \" + (null === this.results ? \"\" : \"hidden\") }, ionic_site_components_core_js_1.h(\"slot\", null)), this.pending > 0 ? ionic_site_components_core_js_1.h(\"span\", { class: \"searching\" }) : null), ionic_site_components_core_js_1.h(\"ion-icon\", { class: \"search \" + (this.active ? \" active\" : \"\"), name: \"md-search\", onClick: this.active ? null : this.activate }), ionic_site_components_core_js_1.h(\"div\", { class: \"backdrop \" + (this.active ? \"active\" : null), onClick: this.close })]; }, Object.defineProperty(t, \"is\", { get: function () { return \"ionic-search\"; }, enumerable: !0, configurable: !0 }), Object.defineProperty(t, \"properties\", { get: function () { return { active: { state: !0 }, dragStyles: { state: !0 }, el: { elementRef: !0 }, mobile: { type: Boolean, attr: \"mobile\" }, pending: { state: !0 }, query: { state: !0 }, results: { state: !0 } }; }, enumerable: !0, configurable: !0 }), Object.defineProperty(t, \"style\", { get: function () { return \"\\@-webkit-keyframes ionic-search-scan{0%{left:0}to{left:100%}}\\@keyframes ionic-search-scan{0%{left:0}to{left:100%}}\\@-webkit-keyframes ionic-search-scan-mobile{0%{left:calc(0% + 8px)}to{left:calc(100% - 16px)}}\\@keyframes ionic-search-scan-mobile{0%{left:calc(0% + 8px)}to{left:calc(100% - 16px)}}ionic-search{display:block;display:inline-block}ionic-search svg{fill:#727a87}ionic-search ion-icon{font-size:18px;cursor:pointer}ionic-search ion-icon:hover svg{fill:#3880ff}ionic-search .search{right:115px;font-size:18px;margin-top:7px;color:#fff;-webkit-transition:opacity .2s,-webkit-transform .4s cubic-bezier(.23,1,.32,1);transition:opacity .2s,-webkit-transform .4s cubic-bezier(.23,1,.32,1);transition:opacity .2s,transform .4s cubic-bezier(.23,1,.32,1);transition:opacity .2s,transform .4s cubic-bezier(.23,1,.32,1),-webkit-transform .4s cubic-bezier(.23,1,.32,1)}ionic-search .search.active{cursor:default;opacity:0;-webkit-transform:scale3d(0,0,1);transform:scale3d(0,0,1)}ionic-search .search svg{fill:#a8b0be;width:18px;height:18px}ionic-search .search-static{left:15px;z-index:2;opacity:0;-webkit-transform:translate3d(0,-25px,0);transform:translate3d(0,-25px,0);-webkit-transition:opacity .1s,-webkit-transform .4s cubic-bezier(.23,1,.32,1);transition:opacity .1s,-webkit-transform .4s cubic-bezier(.23,1,.32,1);transition:transform .4s cubic-bezier(.23,1,.32,1),opacity .1s;transition:transform .4s cubic-bezier(.23,1,.32,1),opacity .1s,-webkit-transform .4s cubic-bezier(.23,1,.32,1)}ionic-search .close{right:11px;z-index:2;opacity:0;pointer-events:none;-webkit-transition:opacity .3s;transition:opacity .3s}ionic-search .close.active{pointer-events:all;opacity:1;-webkit-transform:none;transform:none}ionic-search input{width:100%;margin-left:0;padding-left:40px;padding-right:40px;outline:none;border:none;z-index:2;background:#fff;border-radius:6px;padding:14px 30px 14px 41px;font-size:14px;letter-spacing:-.01em;position:relative;opacity:0;-webkit-transform:translate3d(0,-15px,0);transform:translate3d(0,-15px,0);-webkit-transition:opacity .2s,-webkit-transform .4s cubic-bezier(.23,1,.32,1);transition:opacity .2s,-webkit-transform .4s cubic-bezier(.23,1,.32,1);transition:opacity .2s,transform .4s cubic-bezier(.23,1,.32,1);transition:opacity .2s,transform .4s cubic-bezier(.23,1,.32,1),-webkit-transform .4s cubic-bezier(.23,1,.32,1)}ionic-search input::-webkit-input-placeholder{color:#a8b0be}ionic-search input:-ms-input-placeholder{color:#a8b0be}ionic-search input::-ms-input-placeholder{color:#a8b0be}ionic-search input::placeholder{color:#a8b0be}ionic-search .slot .hidden{display:none}ionic-search ul{position:relative;background:#fff;list-style:none;margin-top:4px;margin-bottom:0;border-radius:6px;text-align:left;padding:19px 3px;-webkit-box-shadow:0 8px 16px rgba(0,0,0,.08);box-shadow:0 8px 16px rgba(0,0,0,.08);opacity:0;-webkit-transform:translate3d(0,-50px,0);transform:translate3d(0,-50px,0);-webkit-transition:opacity .2s,-webkit-transform .5s cubic-bezier(.23,1,.32,1);transition:opacity .2s,-webkit-transform .5s cubic-bezier(.23,1,.32,1);transition:transform .5s cubic-bezier(.23,1,.32,1),opacity .2s;transition:transform .5s cubic-bezier(.23,1,.32,1),opacity .2s,-webkit-transform .5s cubic-bezier(.23,1,.32,1)}ionic-search ul strong{display:block;font-weight:600}ionic-search ul span{color:#767d88;font-size:12px}ionic-search ul span em{color:#727a87}ionic-search a,ionic-search ul .no-results{padding:8px 40px;color:#2a2f38}ionic-search a{display:inline-block;font-weight:600;width:100%;-webkit-transition:color .2s,background-color .2s;transition:color .2s,background-color .2s}ionic-search a:hover{color:#3880ff;background-color:#fafafa}ionic-search .searching{position:absolute;height:1px;width:8px;background:#3880ff;top:30px;left:0;-webkit-animation:ionic-search-scan 1s ease-in-out infinite;animation:ionic-search-scan 1s ease-in-out infinite}ionic-search .search-box{position:absolute;left:calc(50% - 330px);width:660px;top:10px;z-index:1;padding-top:2px;pointer-events:none;-webkit-transition:opacity .2s linear;transition:opacity .2s linear}ionic-search .search-box ion-icon{top:17px;font-size:17px;position:absolute}ionic-search .search-box.active{pointer-events:all}ionic-search .search-box.active ul{-webkit-transform:none;transform:none;opacity:1;-webkit-transition-delay:.2s;transition-delay:.2s}ionic-search .search-box.active input{-webkit-transition-delay:.1s;transition-delay:.1s}ionic-search .search-box.active .close,ionic-search .search-box.active .search-static,ionic-search .search-box.active input{-webkit-transform:none;transform:none;opacity:1}ionic-search .search-box.active .close{-webkit-transition-delay:.4s;transition-delay:.4s}ionic-search .backdrop{background:rgba(0,8,24,.4);position:fixed;top:0;right:0;bottom:0;left:0;opacity:0;pointer-events:none;-webkit-transition:all .4s ease;transition:all .4s ease}ionic-search .backdrop.active{opacity:1;pointer-events:all}ionic-search[mobile]{display:block}ionic-search[mobile] .search{color:#999;right:auto;left:0;bottom:0;font-size:28px;padding:22px;top:auto;z-index:3;position:fixed}ionic-search[mobile] .backdrop{top:0;background:rgba(0,0,0,.5);z-index:2}ionic-search[mobile] .search-box{width:auto;left:2px;right:2px;top:42px;bottom:0;padding:60px 12px 48px;position:fixed;z-index:3;background:#fff;border-top-left-radius:12px;border-top-right-radius:12px;-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0);-webkit-transition:-webkit-transform .4s cubic-bezier(.23,1,.32,1);transition:-webkit-transform .4s cubic-bezier(.23,1,.32,1);transition:transform .4s cubic-bezier(.23,1,.32,1);transition:transform .4s cubic-bezier(.23,1,.32,1),-webkit-transform .4s cubic-bezier(.23,1,.32,1)}ionic-search[mobile] .search-box.active{-webkit-transform:none;transform:none}ionic-search[mobile] .mobile-close{-webkit-transition-delay:0;transition-delay:0;left:calc(50% - 24px);top:0;left:0;right:0;position:absolute}ionic-search[mobile] .mobile-close svg{position:absolute;top:8px;width:40px;height:40px;left:calc(50% - 20px)}ionic-search[mobile] .searching{top:113px;z-index:3;-webkit-animation:ionic-search-scan-mobile 1s ease-in-out infinite;animation:ionic-search-scan-mobile 1s ease-in-out infinite}ionic-search[mobile] ul{opacity:1;-webkit-transform:none;transform:none;z-index:3;top:auto;-webkit-box-shadow:none;box-shadow:none;width:100%;max-height:calc(100vh - 154px);overflow:touch}ionic-search[mobile] .search-static{-webkit-transform:none;transform:none;opacity:1;z-index:3;top:71px;left:22px}ionic-search[mobile] a{padding-left:20px;padding-right:20px}ionic-search[mobile] input{margin:0 0 10px;padding:10px 40px 8px;background:#eceef2;border-radius:12px;width:100%}ionic-search[mobile]~.mobile-nav__pane{min-height:100%;background:#fff;-webkit-transition:transform .4s ease,border-radius .4s step-end;transition:transform .4s ease,border-radius .4s step-end}ionic-search[mobile].active~.mobile-nav__pane{border-radius:12px;-webkit-transform:scale3d(.97,.97,1);transform:scale3d(.97,.97,1);-webkit-transition:transform .4s ease;transition:transform .4s ease}.mobile-nav{background:#000!important}\"; }, enumerable: !0, configurable: !0 }), t; }();\nexports.IonicSearch = IonicSearch;\n"
  },
  {
    "path": "content/js/stencil/cjs/es5/build/ehteibio.sc.entry.js",
    "content": "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar tslib_1 = require(\"../polyfills/tslib.js\");\nvar ionic_site_components_core_js_1 = require(\"../ionic-site-components.core.js\");\nvar Close = function () { return ionic_site_components_core_js_1.h(\"svg\", { version: \"1.1\", xmlns: \"http://www.w3.org/2000/svg\", viewBox: \"0 0 512 512\", preserveAspectRatio: \"\", style: { \"enable-background\": \"new 0 0 512 512\" } }, ionic_site_components_core_js_1.h(\"path\", { d: \"M256,307c-2.4,0-4.8-0.4-7-1.2L78.3,246.3c-11.1-3.9-17-16-13.1-27.1c3.9-11.1,16.1-16.9,27.2-13l157.9,55.1\\n\\tc3.7,1.3,7.7,1.3,11.3,0l157.9-55.1c11.1-3.9,23.3,2,27.2,13c3.9,11.1-2,23.2-13.1,27.1L263,305.8C260.8,306.6,258.4,307,256,307z\" })); }, IonicSearch = function () { function t() { this.active = !1, this.query = \"\", this.pending = 0, this.results = null, this.dragY = null, this.startY = null, this.screenHeight = null, this.URLS = function () { var t = \"https://api.swiftype.com/api/v1/public/engines/\", e = \"9oVyaKGPzxoZAyUo9Sm8\"; return { autocomplete: function (i) { return t + \"suggest.json?q=\" + i + \"&engine_key=\" + e; }, search: function (i) { return t + \"search.json?q=\" + i + \"&engine_key=\" + e; } }; }, this.activate = this.activate.bind(this), this.close = this.close.bind(this), this.onKeyUp = this.onKeyUp.bind(this), this.touchStart = this.touchStart.bind(this), this.touchMove = this.touchMove.bind(this), this.touchEnd = this.touchEnd.bind(this), this.urls = this.URLS(); } return t.prototype.activate = function () { var t = this; this.active = !0, this.el.classList.add(\"active\"), setTimeout(function () { t.el.querySelector(\"input\").focus(); }, 500, this); }, t.prototype.close = function () { var t = this; this.active = !1, this.el.classList.remove(\"active\"), this.el.querySelector(\"input\").blur(), setTimeout(function () { t.el.querySelector(\"input\").value = \"\", t.results = null; }, 500, this); }, t.prototype.onKeyUp = function (t) { return tslib_1.__awaiter(this, void 0, void 0, function () { var e; return tslib_1.__generator(this, function (i) { switch (i.label) {\n    case 0: return 27 === t.keyCode ? (this.close(), [2]) : t.target.value.length < 3 ? (this.results = null, [2]) : (this.query = t.target.value, this.pending++, [4, fetch(this.urls.autocomplete(this.query))]);\n    case 1: return [4, i.sent().json()];\n    case 2: return e = i.sent(), this.pending--, this.results = e.records.page, [2];\n} }); }); }, t.prototype.touchStart = function (t) { this.screenHeight = window.innerHeight || document.documentElement.clientHeight || document.body.clientHeight, this.startY = Math.round(t.touches.item(0).screenY); }, t.prototype.touchMove = function (t) { t.preventDefault(), this.dragY = Math.max(0, Math.round((t.touches.item(0).screenY - this.startY) / this.screenHeight * 100)), this.dragStyles = { transitionDuration: \".1s\", transform: \"translate3d(0, \" + this.dragY + \"%, 0)\" }; }, t.prototype.isFirefox = function () { return -1 != navigator.userAgent.indexOf(\"Firefox\"); }, t.prototype.touchEnd = function () { this.dragY > 30 && this.close(), this.dragY = null, this.startY = null, this.dragStyles = {}; }, t.prototype.render = function () { var t = this; return [ionic_site_components_core_js_1.h(\"div\", { class: \"search-box\" + (this.active ? \" active\" : \"\"), style: this.dragStyles, onTouchMove: function (e) { return t.results && t.results.length > 5 ? null : e.preventDefault(); } }, ionic_site_components_core_js_1.h(\"input\", { type: \"text\", onKeyUp: this.onKeyUp, placeholder: \"Search Ionic..\" }), ionic_site_components_core_js_1.h(\"ion-icon\", { class: \"search-static \" + (this.active ? \" active\" : \"\"), name: \"md-search\" }), this.mobile && !this.isFirefox() ? ionic_site_components_core_js_1.h(\"div\", { class: \"mobile-close\", onClick: this.close, onTouchStart: this.touchStart, onTouchMove: this.touchMove, onTouchEnd: this.touchEnd }, ionic_site_components_core_js_1.h(Close, null)) : ionic_site_components_core_js_1.h(\"ion-icon\", { class: \"close \" + (this.active ? \" active\" : \"\"), name: \"md-close\", onClick: this.close }), null !== this.results ? ionic_site_components_core_js_1.h(\"ul\", null, this.results.map(function (t) { return ionic_site_components_core_js_1.h(\"li\", null, ionic_site_components_core_js_1.h(\"a\", { href: t.url, title: t.title }, ionic_site_components_core_js_1.h(\"strong\", null, t.title), ionic_site_components_core_js_1.h(\"span\", { innerHTML: t.highlight.sections }))); }), 0 === this.results.length ? ionic_site_components_core_js_1.h(\"li\", null, ionic_site_components_core_js_1.h(\"span\", { class: \"no-results\" }, \"No results\")) : null) : null, ionic_site_components_core_js_1.h(\"div\", { class: \"slot \" + (null === this.results ? \"\" : \"hidden\") }, ionic_site_components_core_js_1.h(\"slot\", null)), this.pending > 0 ? ionic_site_components_core_js_1.h(\"span\", { class: \"searching\" }) : null), ionic_site_components_core_js_1.h(\"ion-icon\", { class: \"search \" + (this.active ? \" active\" : \"\"), name: \"md-search\", onClick: this.active ? null : this.activate }), ionic_site_components_core_js_1.h(\"div\", { class: \"backdrop \" + (this.active ? \"active\" : null), onClick: this.close })]; }, Object.defineProperty(t, \"is\", { get: function () { return \"ionic-search\"; }, enumerable: !0, configurable: !0 }), Object.defineProperty(t, \"properties\", { get: function () { return { active: { state: !0 }, dragStyles: { state: !0 }, el: { elementRef: !0 }, mobile: { type: Boolean, attr: \"mobile\" }, pending: { state: !0 }, query: { state: !0 }, results: { state: !0 } }; }, enumerable: !0, configurable: !0 }), Object.defineProperty(t, \"style\", { get: function () { return \"\\@-webkit-keyframes ionic-search-scan{0%{left:0}to{left:100%}}\\@keyframes ionic-search-scan{0%{left:0}to{left:100%}}\\@-webkit-keyframes ionic-search-scan-mobile{0%{left:calc(0% + 8px)}to{left:calc(100% - 16px)}}\\@keyframes ionic-search-scan-mobile{0%{left:calc(0% + 8px)}to{left:calc(100% - 16px)}}ionic-search{display:block;display:inline-block}ionic-search svg{fill:#727a87}ionic-search ion-icon{font-size:18px;cursor:pointer}ionic-search ion-icon:hover svg{fill:#3880ff}ionic-search .search{right:115px;font-size:18px;margin-top:7px;color:#fff;-webkit-transition:opacity .2s,-webkit-transform .4s cubic-bezier(.23,1,.32,1);transition:opacity .2s,-webkit-transform .4s cubic-bezier(.23,1,.32,1);transition:opacity .2s,transform .4s cubic-bezier(.23,1,.32,1);transition:opacity .2s,transform .4s cubic-bezier(.23,1,.32,1),-webkit-transform .4s cubic-bezier(.23,1,.32,1)}ionic-search .search.active{cursor:default;opacity:0;-webkit-transform:scale3d(0,0,1);transform:scale3d(0,0,1)}ionic-search .search svg{fill:#a8b0be;width:18px;height:18px}ionic-search .search-static{left:15px;z-index:2;opacity:0;-webkit-transform:translate3d(0,-25px,0);transform:translate3d(0,-25px,0);-webkit-transition:opacity .1s,-webkit-transform .4s cubic-bezier(.23,1,.32,1);transition:opacity .1s,-webkit-transform .4s cubic-bezier(.23,1,.32,1);transition:transform .4s cubic-bezier(.23,1,.32,1),opacity .1s;transition:transform .4s cubic-bezier(.23,1,.32,1),opacity .1s,-webkit-transform .4s cubic-bezier(.23,1,.32,1)}ionic-search .close{right:11px;z-index:2;opacity:0;pointer-events:none;-webkit-transition:opacity .3s;transition:opacity .3s}ionic-search .close.active{pointer-events:all;opacity:1;-webkit-transform:none;transform:none}ionic-search input{width:100%;margin-left:0;padding-left:40px;padding-right:40px;outline:none;border:none;z-index:2;background:#fff;border-radius:6px;padding:14px 30px 14px 41px;font-size:14px;letter-spacing:-.01em;position:relative;opacity:0;-webkit-transform:translate3d(0,-15px,0);transform:translate3d(0,-15px,0);-webkit-transition:opacity .2s,-webkit-transform .4s cubic-bezier(.23,1,.32,1);transition:opacity .2s,-webkit-transform .4s cubic-bezier(.23,1,.32,1);transition:opacity .2s,transform .4s cubic-bezier(.23,1,.32,1);transition:opacity .2s,transform .4s cubic-bezier(.23,1,.32,1),-webkit-transform .4s cubic-bezier(.23,1,.32,1)}ionic-search input::-webkit-input-placeholder{color:#a8b0be}ionic-search input:-ms-input-placeholder{color:#a8b0be}ionic-search input::-ms-input-placeholder{color:#a8b0be}ionic-search input::placeholder{color:#a8b0be}ionic-search .slot .hidden{display:none}ionic-search ul{position:relative;background:#fff;list-style:none;margin-top:4px;margin-bottom:0;border-radius:6px;text-align:left;padding:19px 3px;-webkit-box-shadow:0 8px 16px rgba(0,0,0,.08);box-shadow:0 8px 16px rgba(0,0,0,.08);opacity:0;-webkit-transform:translate3d(0,-50px,0);transform:translate3d(0,-50px,0);-webkit-transition:opacity .2s,-webkit-transform .5s cubic-bezier(.23,1,.32,1);transition:opacity .2s,-webkit-transform .5s cubic-bezier(.23,1,.32,1);transition:transform .5s cubic-bezier(.23,1,.32,1),opacity .2s;transition:transform .5s cubic-bezier(.23,1,.32,1),opacity .2s,-webkit-transform .5s cubic-bezier(.23,1,.32,1)}ionic-search ul strong{display:block;font-weight:600}ionic-search ul span{color:#767d88;font-size:12px}ionic-search ul span em{color:#727a87}ionic-search a,ionic-search ul .no-results{padding:8px 40px;color:#2a2f38}ionic-search a{display:inline-block;font-weight:600;width:100%;-webkit-transition:color .2s,background-color .2s;transition:color .2s,background-color .2s}ionic-search a:hover{color:#3880ff;background-color:#fafafa}ionic-search .searching{position:absolute;height:1px;width:8px;background:#3880ff;top:30px;left:0;-webkit-animation:ionic-search-scan 1s ease-in-out infinite;animation:ionic-search-scan 1s ease-in-out infinite}ionic-search .search-box{position:absolute;left:calc(50% - 330px);width:660px;top:10px;z-index:1;padding-top:2px;pointer-events:none;-webkit-transition:opacity .2s linear;transition:opacity .2s linear}ionic-search .search-box ion-icon{top:17px;font-size:17px;position:absolute}ionic-search .search-box.active{pointer-events:all}ionic-search .search-box.active ul{-webkit-transform:none;transform:none;opacity:1;-webkit-transition-delay:.2s;transition-delay:.2s}ionic-search .search-box.active input{-webkit-transition-delay:.1s;transition-delay:.1s}ionic-search .search-box.active .close,ionic-search .search-box.active .search-static,ionic-search .search-box.active input{-webkit-transform:none;transform:none;opacity:1}ionic-search .search-box.active .close{-webkit-transition-delay:.4s;transition-delay:.4s}ionic-search .backdrop{background:rgba(0,8,24,.4);position:fixed;top:0;right:0;bottom:0;left:0;opacity:0;pointer-events:none;-webkit-transition:all .4s ease;transition:all .4s ease}ionic-search .backdrop.active{opacity:1;pointer-events:all}ionic-search[mobile]{display:block}ionic-search[mobile] .search{color:#999;right:auto;left:0;bottom:0;font-size:28px;padding:22px;top:auto;z-index:3;position:fixed}ionic-search[mobile] .backdrop{top:0;background:rgba(0,0,0,.5);z-index:2}ionic-search[mobile] .search-box{width:auto;left:2px;right:2px;top:42px;bottom:0;padding:60px 12px 48px;position:fixed;z-index:3;background:#fff;border-top-left-radius:12px;border-top-right-radius:12px;-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0);-webkit-transition:-webkit-transform .4s cubic-bezier(.23,1,.32,1);transition:-webkit-transform .4s cubic-bezier(.23,1,.32,1);transition:transform .4s cubic-bezier(.23,1,.32,1);transition:transform .4s cubic-bezier(.23,1,.32,1),-webkit-transform .4s cubic-bezier(.23,1,.32,1)}ionic-search[mobile] .search-box.active{-webkit-transform:none;transform:none}ionic-search[mobile] .mobile-close{-webkit-transition-delay:0;transition-delay:0;left:calc(50% - 24px);top:0;left:0;right:0;position:absolute}ionic-search[mobile] .mobile-close svg{position:absolute;top:8px;width:40px;height:40px;left:calc(50% - 20px)}ionic-search[mobile] .searching{top:113px;z-index:3;-webkit-animation:ionic-search-scan-mobile 1s ease-in-out infinite;animation:ionic-search-scan-mobile 1s ease-in-out infinite}ionic-search[mobile] ul{opacity:1;-webkit-transform:none;transform:none;z-index:3;top:auto;-webkit-box-shadow:none;box-shadow:none;width:100%;max-height:calc(100vh - 154px);overflow:touch}ionic-search[mobile] .search-static{-webkit-transform:none;transform:none;opacity:1;z-index:3;top:71px;left:22px}ionic-search[mobile] a{padding-left:20px;padding-right:20px}ionic-search[mobile] input{margin:0 0 10px;padding:10px 40px 8px;background:#eceef2;border-radius:12px;width:100%}ionic-search[mobile]~.mobile-nav__pane{min-height:100%;background:#fff;-webkit-transition:transform .4s ease,border-radius .4s step-end;transition:transform .4s ease,border-radius .4s step-end}ionic-search[mobile].active~.mobile-nav__pane{border-radius:12px;-webkit-transform:scale3d(.97,.97,1);transform:scale3d(.97,.97,1);-webkit-transition:transform .4s ease;transition:transform .4s ease}.mobile-nav{background:#000!important}\"; }, enumerable: !0, configurable: !0 }), t; }();\nexports.IonicSearch = IonicSearch;\n"
  },
  {
    "path": "content/js/stencil/cjs/es5/build/hclgi8iu.entry.js",
    "content": "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar ionic_site_components_core_js_1 = require(\"../ionic-site-components.core.js\");\nvar _gsScope = \"undefined\" != typeof window ? window : \"undefined\" != typeof module && module.exports && \"undefined\" != typeof global ? global : {}, TweenLite = function (t) { var e = {}, i = t.document, s = t.GreenSockGlobals = t.GreenSockGlobals || t; if (s.TweenLite)\n    return s.TweenLite; var n, r, a, o, l, h, _, c = function (t) { var e, i = t.split(\".\"), n = s; for (e = 0; e < i.length; e++)\n    n[i[e]] = n = n[i[e]] || {}; return n; }, u = c(\"com.greensock\"), f = function (t) { var e, i = [], s = t.length; for (e = 0; e !== s; i.push(t[e++]))\n    ; return i; }, p = function () { }, m = (h = Object.prototype.toString, _ = h.call([]), function (t) { return null != t && (t instanceof Array || \"object\" == typeof t && !!t.push && h.call(t) === _); }), d = {}, v = function (t, i, n, r) { this.sc = d[t] ? d[t].sc : [], d[t] = this, this.gsClass = null, this.func = n; var a = []; this.check = function (o) { for (var l, h, _, u, f = i.length, p = f; --f > -1;)\n    (l = d[i[f]] || new v(i[f], [])).gsClass ? (a[f] = l.gsClass, p--) : o && l.sc.push(this); if (0 === p && n)\n    for (_ = (h = (\"com.greensock.\" + t).split(\".\")).pop(), u = c(h.join(\".\"))[_] = this.gsClass = n.apply(n, a), r && (s[_] = e[_] = u), f = 0; f < this.sc.length; f++)\n        this.sc[f].check(); }, this.check(!0); }, g = t._gsDefine = function (t, e, i, s) { return new v(t, e, i, s); }, T = u._class = function (t, e, i) { return e = e || function () { }, g(t, [], function () { return e; }, i), e; }; g.globals = s; var y = [0, 0, 1, 1], w = T(\"easing.Ease\", function (t, e, i, s) { this._func = t, this._type = i || 0, this._power = s || 0, this._params = e ? y.concat(e) : y; }, !0), P = w.map = {}, b = w.register = function (t, e, i, s) { for (var n, r, a, o, l = e.split(\",\"), h = l.length, _ = (i || \"easeIn,easeOut,easeInOut\").split(\",\"); --h > -1;)\n    for (r = l[h], n = s ? T(\"easing.\" + r, null, !0) : u.easing[r] || {}, a = _.length; --a > -1;)\n        P[r + \".\" + (o = _[a])] = P[o + r] = n[o] = t.getRatio ? t : t[o] || new t; }; for ((a = w.prototype)._calcEnd = !1, a.getRatio = function (t) { if (this._func)\n    return this._params[0] = t, this._func.apply(null, this._params); var e = this._type, i = this._power, s = 1 === e ? 1 - t : 2 === e ? t : t < .5 ? 2 * t : 2 * (1 - t); return 1 === i ? s *= s : 2 === i ? s *= s * s : 3 === i ? s *= s * s * s : 4 === i && (s *= s * s * s * s), 1 === e ? 1 - s : 2 === e ? s : t < .5 ? s / 2 : 1 - s / 2; }, r = (n = [\"Linear\", \"Quad\", \"Cubic\", \"Quart\", \"Quint,Strong\"]).length; --r > -1;)\n    a = n[r] + \",Power\" + r, b(new w(null, null, 1, r), a, \"easeOut\", !0), b(new w(null, null, 2, r), a, \"easeIn\" + (0 === r ? \",easeNone\" : \"\")), b(new w(null, null, 3, r), a, \"easeInOut\"); P.linear = u.easing.Linear.easeIn, P.swing = u.easing.Quad.easeInOut; var S = T(\"events.EventDispatcher\", function (t) { this._listeners = {}, this._eventTarget = t || this; }); (a = S.prototype).addEventListener = function (t, e, i, s, n) { n = n || 0; var r, a, h = this._listeners[t], _ = 0; for (this !== o || l || o.wake(), null == h && (this._listeners[t] = h = []), a = h.length; --a > -1;)\n    (r = h[a]).c === e && r.s === i ? h.splice(a, 1) : 0 === _ && r.pr < n && (_ = a + 1); h.splice(_, 0, { c: e, s: i, up: s, pr: n }); }, a.removeEventListener = function (t, e) { var i, s = this._listeners[t]; if (s)\n    for (i = s.length; --i > -1;)\n        if (s[i].c === e)\n            return void s.splice(i, 1); }, a.dispatchEvent = function (t) { var e, i, s, n = this._listeners[t]; if (n)\n    for ((e = n.length) > 1 && (n = n.slice(0)), i = this._eventTarget; --e > -1;)\n        (s = n[e]) && (s.up ? s.c.call(s.s || i, { type: t, target: i }) : s.c.call(s.s || i)); }; var k = t.requestAnimationFrame, A = t.cancelAnimationFrame, C = Date.now || function () { return (new Date).getTime(); }, x = C(); for (r = (n = [\"ms\", \"moz\", \"webkit\", \"o\"]).length; --r > -1 && !k;)\n    k = t[n[r] + \"RequestAnimationFrame\"], A = t[n[r] + \"CancelAnimationFrame\"] || t[n[r] + \"CancelRequestAnimationFrame\"]; T(\"Ticker\", function (t, e) { var s, n, r, a, h, _ = this, c = C(), u = !(!1 === e || !k) && \"auto\", f = 500, m = 33, d = function (t) { var e, i, o = C() - x; o > f && (c += o - m), _.time = ((x += o) - c) / 1e3, e = _.time - h, (!s || e > 0 || !0 === t) && (_.frame++, h += e + (e >= a ? .004 : a - e), i = !0), !0 !== t && (r = n(d)), i && _.dispatchEvent(\"tick\"); }; S.call(_), _.time = _.frame = 0, _.tick = function () { d(!0); }, _.lagSmoothing = function (t, e) { if (!arguments.length)\n    return f < 1e8; f = t || 1e8, m = Math.min(e, f, 0); }, _.sleep = function () { null != r && (u && A ? A(r) : clearTimeout(r), n = p, r = null, _ === o && (l = !1)); }, _.wake = function (t) { null !== r ? _.sleep() : t ? c += -x + (x = C()) : _.frame > 10 && (x = C() - f + 5), n = 0 === s ? p : u && k ? k : function (t) { return setTimeout(t, 1e3 * (h - _.time) + 1 | 0); }, _ === o && (l = !0), d(2); }, _.fps = function (t) { if (!arguments.length)\n    return s; h = this.time + (a = 1 / ((s = t) || 60)), _.wake(); }, _.useRAF = function (t) { if (!arguments.length)\n    return u; _.sleep(), u = t, _.fps(s); }, _.fps(t), setTimeout(function () { \"auto\" === u && _.frame < 5 && \"hidden\" !== (i || {}).visibilityState && _.useRAF(!1); }, 1500); }), (a = u.Ticker.prototype = new u.events.EventDispatcher).constructor = u.Ticker; var R = T(\"core.Animation\", function (t, e) { if (this.vars = e = e || {}, this._duration = this._totalDuration = t || 0, this._delay = Number(e.delay) || 0, this._timeScale = 1, this._active = !!e.immediateRender, this.data = e.data, this._reversed = !!e.reversed, J) {\n    l || o.wake();\n    var i = this.vars.useFrames ? H : J;\n    i.add(this, i._time), this.vars.paused && this.paused(!0);\n} }); o = R.ticker = new u.Ticker, (a = R.prototype)._dirty = a._gc = a._initted = a._paused = !1, a._totalTime = a._time = 0, a._rawPrevTime = -1, a._next = a._last = a._onUpdate = a._timeline = a.timeline = null, a._paused = !1; var D = function () { l && C() - x > 2e3 && (\"hidden\" !== (i || {}).visibilityState || !o.lagSmoothing()) && o.wake(); var t = setTimeout(D, 2e3); t.unref && t.unref(); }; D(), a.play = function (t, e) { return null != t && this.seek(t, e), this.reversed(!1).paused(!1); }, a.pause = function (t, e) { return null != t && this.seek(t, e), this.paused(!0); }, a.resume = function (t, e) { return null != t && this.seek(t, e), this.paused(!1); }, a.seek = function (t, e) { return this.totalTime(Number(t), !1 !== e); }, a.restart = function (t, e) { return this.reversed(!1).paused(!1).totalTime(t ? -this._delay : 0, !1 !== e, !0); }, a.reverse = function (t, e) { return null != t && this.seek(t || this.totalDuration(), e), this.reversed(!0).paused(!1); }, a.render = function (t, e, i) { }, a.invalidate = function () { return this._time = this._totalTime = 0, this._initted = this._gc = !1, this._rawPrevTime = -1, !this._gc && this.timeline || this._enabled(!0), this; }, a.isActive = function () { var t, e = this._timeline, i = this._startTime; return !e || !this._gc && !this._paused && e.isActive() && (t = e.rawTime(!0)) >= i && t < i + this.totalDuration() / this._timeScale - 1e-8; }, a._enabled = function (t, e) { return l || o.wake(), this._gc = !t, this._active = this.isActive(), !0 !== e && (t && !this.timeline ? this._timeline.add(this, this._startTime - this._delay) : !t && this.timeline && this._timeline._remove(this, !0)), !1; }, a._kill = function (t, e) { return this._enabled(!1, !1); }, a.kill = function (t, e) { return this._kill(t, e), this; }, a._uncache = function (t) { for (var e = t ? this : this.timeline; e;)\n    e._dirty = !0, e = e.timeline; return this; }, a._swapSelfInParams = function (t) { for (var e = t.length, i = t.concat(); --e > -1;)\n    \"{self}\" === t[e] && (i[e] = this); return i; }, a._callback = function (t) { var e = this.vars, i = e[t], s = e[t + \"Params\"], n = e[t + \"Scope\"] || e.callbackScope || this; switch (s ? s.length : 0) {\n    case 0:\n        i.call(n);\n        break;\n    case 1:\n        i.call(n, s[0]);\n        break;\n    case 2:\n        i.call(n, s[0], s[1]);\n        break;\n    default: i.apply(n, s);\n} }, a.eventCallback = function (t, e, i, s) { if (\"on\" === (t || \"\").substr(0, 2)) {\n    var n = this.vars;\n    if (1 === arguments.length)\n        return n[t];\n    null == e ? delete n[t] : (n[t] = e, n[t + \"Params\"] = m(i) && -1 !== i.join(\"\").indexOf(\"{self}\") ? this._swapSelfInParams(i) : i, n[t + \"Scope\"] = s), \"onUpdate\" === t && (this._onUpdate = e);\n} return this; }, a.delay = function (t) { return arguments.length ? (this._timeline.smoothChildTiming && this.startTime(this._startTime + t - this._delay), this._delay = t, this) : this._delay; }, a.duration = function (t) { return arguments.length ? (this._duration = this._totalDuration = t, this._uncache(!0), this._timeline.smoothChildTiming && this._time > 0 && this._time < this._duration && 0 !== t && this.totalTime(this._totalTime * (t / this._duration), !0), this) : (this._dirty = !1, this._duration); }, a.totalDuration = function (t) { return this._dirty = !1, arguments.length ? this.duration(t) : this._totalDuration; }, a.time = function (t, e) { return arguments.length ? (this._dirty && this.totalDuration(), this.totalTime(t > this._duration ? this._duration : t, e)) : this._time; }, a.totalTime = function (t, e, i) { if (l || o.wake(), !arguments.length)\n    return this._totalTime; if (this._timeline) {\n    if (t < 0 && !i && (t += this.totalDuration()), this._timeline.smoothChildTiming) {\n        this._dirty && this.totalDuration();\n        var s = this._totalDuration, n = this._timeline;\n        if (t > s && !i && (t = s), this._startTime = (this._paused ? this._pauseTime : n._time) - (this._reversed ? s - t : t) / this._timeScale, n._dirty || this._uncache(!1), n._timeline)\n            for (; n._timeline;)\n                n._timeline._time !== (n._startTime + n._totalTime) / n._timeScale && n.totalTime(n._totalTime, !0), n = n._timeline;\n    }\n    this._gc && this._enabled(!0, !1), this._totalTime === t && 0 !== this._duration || (I.length && W(), this.render(t, e, !1), I.length && W());\n} return this; }, a.progress = a.totalProgress = function (t, e) { var i = this.duration(); return arguments.length ? this.totalTime(i * t, e) : i ? this._time / i : this.ratio; }, a.startTime = function (t) { return arguments.length ? (t !== this._startTime && (this._startTime = t, this.timeline && this.timeline._sortChildren && this.timeline.add(this, t - this._delay)), this) : this._startTime; }, a.endTime = function (t) { return this._startTime + (0 != t ? this.totalDuration() : this.duration()) / this._timeScale; }, a.timeScale = function (t) { if (!arguments.length)\n    return this._timeScale; var e, i; for (t = t || 1e-8, this._timeline && this._timeline.smoothChildTiming && (i = (e = this._pauseTime) || 0 === e ? e : this._timeline.totalTime(), this._startTime = i - (i - this._startTime) * this._timeScale / t), this._timeScale = t, i = this.timeline; i && i.timeline;)\n    i._dirty = !0, i.totalDuration(), i = i.timeline; return this; }, a.reversed = function (t) { return arguments.length ? (t != this._reversed && (this._reversed = t, this.totalTime(this._timeline && !this._timeline.smoothChildTiming ? this.totalDuration() - this._totalTime : this._totalTime, !0)), this) : this._reversed; }, a.paused = function (t) { if (!arguments.length)\n    return this._paused; var e, i, s = this._timeline; return t != this._paused && s && (l || t || o.wake(), i = (e = s.rawTime()) - this._pauseTime, !t && s.smoothChildTiming && (this._startTime += i, this._uncache(!1)), this._pauseTime = t ? e : null, this._paused = t, this._active = this.isActive(), !t && 0 !== i && this._initted && this.duration() && this.render(e = s.smoothChildTiming ? this._totalTime : (e - this._startTime) / this._timeScale, e === this._totalTime, !0)), this._gc && !t && this._enabled(!0, !1), this; }; var E = T(\"core.SimpleTimeline\", function (t) { R.call(this, 0, t), this.autoRemoveChildren = this.smoothChildTiming = !0; }); (a = E.prototype = new R).constructor = E, a.kill()._gc = !1, a._first = a._last = a._recent = null, a._sortChildren = !1, a.add = a.insert = function (t, e, i, s) { var n, r; if (t._startTime = Number(e || 0) + t._delay, t._paused && this !== t._timeline && (t._pauseTime = this.rawTime() - (t._timeline.rawTime() - t._pauseTime)), t.timeline && t.timeline._remove(t, !0), t.timeline = t._timeline = this, t._gc && t._enabled(!0, !0), n = this._last, this._sortChildren)\n    for (r = t._startTime; n && n._startTime > r;)\n        n = n._prev; return n ? (t._next = n._next, n._next = t) : (t._next = this._first, this._first = t), t._next ? t._next._prev = t : this._last = t, t._prev = n, this._recent = t, this._timeline && this._uncache(!0), this; }, a._remove = function (t, e) { return t.timeline === this && (e || t._enabled(!1, !0), t._prev ? t._prev._next = t._next : this._first === t && (this._first = t._next), t._next ? t._next._prev = t._prev : this._last === t && (this._last = t._prev), t._next = t._prev = t.timeline = null, t === this._recent && (this._recent = this._last), this._timeline && this._uncache(!0)), this; }, a.render = function (t, e, i) { var s, n = this._first; for (this._totalTime = this._time = this._rawPrevTime = t; n;)\n    s = n._next, (n._active || t >= n._startTime && !n._paused && !n._gc) && n.render(n._reversed ? (n._dirty ? n.totalDuration() : n._totalDuration) - (t - n._startTime) * n._timeScale : (t - n._startTime) * n._timeScale, e, i), n = s; }, a.rawTime = function () { return l || o.wake(), this._totalTime; }; var L = T(\"TweenLite\", function (e, i, s) { if (R.call(this, i, s), this.render = L.prototype.render, null == e)\n    throw \"Cannot tween a null target.\"; this.target = e = \"string\" != typeof e ? e : L.selector(e) || e; var n, r, a, o = e.jquery || e.length && e !== t && e[0] && (e[0] === t || e[0].nodeType && e[0].style && !e.nodeType), l = this.vars.overwrite; if (this._overwrite = l = null == l ? Y[L.defaultOverwrite] : \"number\" == typeof l ? l >> 0 : Y[l], (o || e instanceof Array || e.push && m(e)) && \"number\" != typeof e[0])\n    for (this._targets = a = f(e), this._propLookup = [], this._siblings = [], n = 0; n < a.length; n++)\n        (r = a[n]) ? \"string\" != typeof r ? r.length && r !== t && r[0] && (r[0] === t || r[0].nodeType && r[0].style && !r.nodeType) ? (a.splice(n--, 1), this._targets = a = a.concat(f(r))) : (this._siblings[n] = X(r, this, !1), 1 === l && this._siblings[n].length > 1 && tt(r, this, null, 1, this._siblings[n])) : \"string\" == typeof (r = a[n--] = L.selector(r)) && a.splice(n + 1, 1) : a.splice(n--, 1);\nelse\n    this._propLookup = {}, this._siblings = X(e, this, !1), 1 === l && this._siblings.length > 1 && tt(e, this, null, 1, this._siblings); (this.vars.immediateRender || 0 === i && 0 === this._delay && !1 !== this.vars.immediateRender) && (this._time = -1e-8, this.render(Math.min(0, -this._delay))); }, !0), O = function (e) { return e && e.length && e !== t && e[0] && (e[0] === t || e[0].nodeType && e[0].style && !e.nodeType); }; (a = L.prototype = new R).constructor = L, a.kill()._gc = !1, a.ratio = 0, a._firstPT = a._targets = a._overwrittenProps = a._startAt = null, a._notifyPluginsOfEnabled = a._lazy = !1, L.version = \"2.1.2\", L.defaultEase = a._ease = new w(null, null, 1, 1), L.defaultOverwrite = \"auto\", L.ticker = o, L.autoSleep = 120, L.lagSmoothing = function (t, e) { o.lagSmoothing(t, e); }, L.selector = t.$ || t.jQuery || function (e) { var s = t.$ || t.jQuery; return s ? (L.selector = s, s(e)) : (i || (i = t.document), i ? i.querySelectorAll ? i.querySelectorAll(e) : i.getElementById(\"#\" === e.charAt(0) ? e.substr(1) : e) : e); }; var I = [], z = {}, F = /(?:(-|-=|\\+=)?\\d*\\.?\\d*(?:e[\\-+]?\\d+)?)[0-9]/gi, $ = /[\\+-]=-?[\\.\\d]/, U = function (t) { for (var e, i = this._firstPT; i;)\n    e = i.blob ? 1 === t && null != this.end ? this.end : t ? this.join(\"\") : this.start : i.c * t + i.s, i.m ? e = i.m.call(this._tween, e, this._target || i.t, this._tween) : e < 1e-6 && e > -1e-6 && !i.blob && (e = 0), i.f ? i.fp ? i.t[i.p](i.fp, e) : i.t[i.p](e) : i.t[i.p] = e, i = i._next; }, N = function (t) { return (1e3 * t | 0) / 1e3 + \"\"; }, j = function (t, e, i, s) { var n, r, a, o, l, h, _, c = [], u = 0, f = \"\", p = 0; for (c.start = t, c.end = e, t = c[0] = t + \"\", e = c[1] = e + \"\", i && (i(c), t = c[0], e = c[1]), c.length = 0, n = t.match(F) || [], r = e.match(F) || [], s && (s._next = null, s.blob = 1, c._firstPT = c._applyPT = s), l = r.length, o = 0; o < l; o++)\n    f += (h = e.substr(u, e.indexOf(_ = r[o], u) - u)) || !o ? h : \",\", u += h.length, p ? p = (p + 1) % 5 : \"rgba(\" === h.substr(-5) && (p = 1), _ === n[o] || n.length <= o ? f += _ : (f && (c.push(f), f = \"\"), a = parseFloat(n[o]), c.push(a), c._firstPT = { _next: c._firstPT, t: c, p: c.length - 1, s: a, c: (\"=\" === _.charAt(1) ? parseInt(_.charAt(0) + \"1\", 10) * parseFloat(_.substr(2)) : parseFloat(_) - a) || 0, f: 0, m: p && p < 4 ? Math.round : N }), u += _.length; return (f += e.substr(u)) && c.push(f), c.setRatio = U, $.test(e) && (c.end = null), c; }, G = function (t, e, i, s, n, r, a, o, l) { \"function\" == typeof s && (s = s(l || 0, t)); var h = typeof t[e], _ = \"function\" !== h ? \"\" : e.indexOf(\"set\") || \"function\" != typeof t[\"get\" + e.substr(3)] ? e : \"get\" + e.substr(3), c = \"get\" !== i ? i : _ ? a ? t[_](a) : t[_]() : t[e], u = \"string\" == typeof s && \"=\" === s.charAt(1), f = { t: t, p: e, s: c, f: \"function\" === h, pg: 0, n: n || e, m: r ? \"function\" == typeof r ? r : Math.round : 0, pr: 0, c: u ? parseInt(s.charAt(0) + \"1\", 10) * parseFloat(s.substr(2)) : parseFloat(s) - c || 0 }; if ((\"number\" != typeof c || \"number\" != typeof s && !u) && (a || isNaN(c) || !u && isNaN(s) || \"boolean\" == typeof c || \"boolean\" == typeof s ? (f.fp = a, f = { t: j(c, u ? parseFloat(f.s) + f.c + (f.s + \"\").replace(/[0-9\\-\\.]/g, \"\") : s, o || L.defaultStringFilter, f), p: \"setRatio\", s: 0, c: 1, f: 2, pg: 0, n: n || e, pr: 0, m: 0 }) : (f.s = parseFloat(c), u || (f.c = parseFloat(s) - f.s || 0))), f.c)\n    return (f._next = this._firstPT) && (f._next._prev = f), this._firstPT = f, f; }, q = L._internals = { isArray: m, isSelector: O, lazyTweens: I, blobDif: j }, M = L._plugins = {}, Q = q.tweenLookup = {}, B = 0, K = q.reservedProps = { ease: 1, delay: 1, overwrite: 1, onComplete: 1, onCompleteParams: 1, onCompleteScope: 1, useFrames: 1, runBackwards: 1, startAt: 1, onUpdate: 1, onUpdateParams: 1, onUpdateScope: 1, onStart: 1, onStartParams: 1, onStartScope: 1, onReverseComplete: 1, onReverseCompleteParams: 1, onReverseCompleteScope: 1, onRepeat: 1, onRepeatParams: 1, onRepeatScope: 1, easeParams: 1, yoyo: 1, immediateRender: 1, repeat: 1, repeatDelay: 1, data: 1, paused: 1, reversed: 1, autoCSS: 1, lazy: 1, onOverwrite: 1, callbackScope: 1, stringFilter: 1, id: 1, yoyoEase: 1, stagger: 1 }, Y = { none: 0, all: 1, auto: 2, concurrent: 3, allOnStart: 4, preexisting: 5, true: 1, false: 0 }, H = R._rootFramesTimeline = new E, J = R._rootTimeline = new E, V = 30, W = q.lazyRender = function () { var t, e, i = I.length; for (z = {}, t = 0; t < i; t++)\n    (e = I[t]) && !1 !== e._lazy && (e.render(e._lazy[0], e._lazy[1], !0), e._lazy = !1); I.length = 0; }; J._startTime = o.time, H._startTime = o.frame, J._active = H._active = !0, setTimeout(W, 1), R._updateRoot = L.render = function () { var t, e, i; if (I.length && W(), J.render((o.time - J._startTime) * J._timeScale, !1, !1), H.render((o.frame - H._startTime) * H._timeScale, !1, !1), I.length && W(), o.frame >= V) {\n    for (i in V = o.frame + (parseInt(L.autoSleep, 10) || 120), Q) {\n        for (t = (e = Q[i].tweens).length; --t > -1;)\n            e[t]._gc && e.splice(t, 1);\n        0 === e.length && delete Q[i];\n    }\n    if ((!(i = J._first) || i._paused) && L.autoSleep && !H._first && 1 === o._listeners.tick.length) {\n        for (; i && i._paused;)\n            i = i._next;\n        i || o.sleep();\n    }\n} }, o.addEventListener(\"tick\", R._updateRoot); var X = function (t, e, i) { var s, n, r = t._gsTweenID; if (Q[r || (t._gsTweenID = r = \"t\" + B++)] || (Q[r] = { target: t, tweens: [] }), e && ((s = Q[r].tweens)[n = s.length] = e, i))\n    for (; --n > -1;)\n        s[n] === e && s.splice(n, 1); return Q[r].tweens; }, Z = function (t, e, i, s) { var n, r, a = t.vars.onOverwrite; return a && (n = a(t, e, i, s)), (a = L.onOverwrite) && (r = a(t, e, i, s)), !1 !== n && !1 !== r; }, tt = function (t, e, i, s, n) { var r, a, o, l; if (1 === s || s >= 4) {\n    for (l = n.length, r = 0; r < l; r++)\n        if ((o = n[r]) !== e)\n            o._gc || o._kill(null, t, e) && (a = !0);\n        else if (5 === s)\n            break;\n    return a;\n} var h, _ = e._startTime + 1e-8, c = [], u = 0, f = 0 === e._duration; for (r = n.length; --r > -1;)\n    (o = n[r]) === e || o._gc || o._paused || (o._timeline !== e._timeline ? (h = h || et(e, 0, f), 0 === et(o, h, f) && (c[u++] = o)) : o._startTime <= _ && o._startTime + o.totalDuration() / o._timeScale > _ && ((f || !o._initted) && _ - o._startTime <= 2e-8 || (c[u++] = o))); for (r = u; --r > -1;)\n    if (l = (o = c[r])._firstPT, 2 === s && o._kill(i, t, e) && (a = !0), 2 !== s || !o._firstPT && o._initted && l) {\n        if (2 !== s && !Z(o, e))\n            continue;\n        o._enabled(!1, !1) && (a = !0);\n    } return a; }, et = function (t, e, i) { for (var s = t._timeline, n = s._timeScale, r = t._startTime; s._timeline;) {\n    if (r += s._startTime, n *= s._timeScale, s._paused)\n        return -100;\n    s = s._timeline;\n} return (r /= n) > e ? r - e : i && r === e || !t._initted && r - e < 2e-8 ? 1e-8 : (r += t.totalDuration() / t._timeScale / n) > e + 1e-8 ? 0 : r - e - 1e-8; }; a._init = function () { var t, e, i, s, n, r, a = this.vars, o = this._overwrittenProps, l = this._duration, h = !!a.immediateRender, _ = a.ease, c = this._startAt; if (a.startAt) {\n    for (s in c && (c.render(-1, !0), c.kill()), n = {}, a.startAt)\n        n[s] = a.startAt[s];\n    if (n.data = \"isStart\", n.overwrite = !1, n.immediateRender = !0, n.lazy = h && !1 !== a.lazy, n.startAt = n.delay = null, n.onUpdate = a.onUpdate, n.onUpdateParams = a.onUpdateParams, n.onUpdateScope = a.onUpdateScope || a.callbackScope || this, this._startAt = L.to(this.target || {}, 0, n), h)\n        if (this._time > 0)\n            this._startAt = null;\n        else if (0 !== l)\n            return;\n}\nelse if (a.runBackwards && 0 !== l)\n    if (c)\n        c.render(-1, !0), c.kill(), this._startAt = null;\n    else {\n        for (s in 0 !== this._time && (h = !1), i = {}, a)\n            K[s] && \"autoCSS\" !== s || (i[s] = a[s]);\n        if (i.overwrite = 0, i.data = \"isFromStart\", i.lazy = h && !1 !== a.lazy, i.immediateRender = h, this._startAt = L.to(this.target, 0, i), h) {\n            if (0 === this._time)\n                return;\n        }\n        else\n            this._startAt._init(), this._startAt._enabled(!1), this.vars.immediateRender && (this._startAt = null);\n    } if (this._ease = _ = _ ? _ instanceof w ? _ : \"function\" == typeof _ ? new w(_, a.easeParams) : P[_] || L.defaultEase : L.defaultEase, a.easeParams instanceof Array && _.config && (this._ease = _.config.apply(_, a.easeParams)), this._easeType = this._ease._type, this._easePower = this._ease._power, this._firstPT = null, this._targets)\n    for (r = this._targets.length, t = 0; t < r; t++)\n        this._initProps(this._targets[t], this._propLookup[t] = {}, this._siblings[t], o ? o[t] : null, t) && (e = !0);\nelse\n    e = this._initProps(this.target, this._propLookup, this._siblings, o, 0); if (e && L._onPluginEvent(\"_onInitAllProps\", this), o && (this._firstPT || \"function\" != typeof this.target && this._enabled(!1, !1)), a.runBackwards)\n    for (i = this._firstPT; i;)\n        i.s += i.c, i.c = -i.c, i = i._next; this._onUpdate = a.onUpdate, this._initted = !0; }, a._initProps = function (e, i, s, n, r) { var a, o, l, h, _, c; if (null == e)\n    return !1; for (a in z[e._gsTweenID] && W(), this.vars.css || e.style && e !== t && e.nodeType && M.css && !1 !== this.vars.autoCSS && function (t, e) { var i, s = {}; for (i in t)\n    K[i] || i in e && \"transform\" !== i && \"x\" !== i && \"y\" !== i && \"width\" !== i && \"height\" !== i && \"className\" !== i && \"border\" !== i || !(!M[i] || M[i] && M[i]._autoCSS) || (s[i] = t[i], delete t[i]); t.css = s; }(this.vars, e), this.vars)\n    if (c = this.vars[a], K[a])\n        c && (c instanceof Array || c.push && m(c)) && -1 !== c.join(\"\").indexOf(\"{self}\") && (this.vars[a] = c = this._swapSelfInParams(c, this));\n    else if (M[a] && (h = new M[a])._onInitTween(e, this.vars[a], this, r)) {\n        for (this._firstPT = _ = { _next: this._firstPT, t: h, p: \"setRatio\", s: 0, c: 1, f: 1, n: a, pg: 1, pr: h._priority, m: 0 }, o = h._overwriteProps.length; --o > -1;)\n            i[h._overwriteProps[o]] = this._firstPT;\n        (h._priority || h._onInitAllProps) && (l = !0), (h._onDisable || h._onEnable) && (this._notifyPluginsOfEnabled = !0), _._next && (_._next._prev = _);\n    }\n    else\n        i[a] = G.call(this, e, a, \"get\", c, a, 0, null, this.vars.stringFilter, r); return n && this._kill(n, e) ? this._initProps(e, i, s, n, r) : this._overwrite > 1 && this._firstPT && s.length > 1 && tt(e, this, i, this._overwrite, s) ? (this._kill(i, e), this._initProps(e, i, s, n, r)) : (this._firstPT && (!1 !== this.vars.lazy && this._duration || this.vars.lazy && !this._duration) && (z[e._gsTweenID] = !0), l); }, a.render = function (t, e, i) { var s, n, r, a, o = this._time, l = this._duration, h = this._rawPrevTime; if (t >= l - 1e-8 && t >= 0)\n    this._totalTime = this._time = l, this.ratio = this._ease._calcEnd ? this._ease.getRatio(1) : 1, this._reversed || (s = !0, n = \"onComplete\", i = i || this._timeline.autoRemoveChildren), 0 === l && (this._initted || !this.vars.lazy || i) && (this._startTime === this._timeline._duration && (t = 0), (h < 0 || t <= 0 && t >= -1e-8 || 1e-8 === h && \"isPause\" !== this.data) && h !== t && (i = !0, h > 1e-8 && (n = \"onReverseComplete\")), this._rawPrevTime = a = !e || t || h === t ? t : 1e-8);\nelse if (t < 1e-8)\n    this._totalTime = this._time = 0, this.ratio = this._ease._calcEnd ? this._ease.getRatio(0) : 0, (0 !== o || 0 === l && h > 0) && (n = \"onReverseComplete\", s = this._reversed), t > -1e-8 ? t = 0 : t < 0 && (this._active = !1, 0 === l && (this._initted || !this.vars.lazy || i) && (h >= 0 && (1e-8 !== h || \"isPause\" !== this.data) && (i = !0), this._rawPrevTime = a = !e || t || h === t ? t : 1e-8)), (!this._initted || this._startAt && this._startAt.progress()) && (i = !0);\nelse if (this._totalTime = this._time = t, this._easeType) {\n    var _ = t / l, c = this._easeType, u = this._easePower;\n    (1 === c || 3 === c && _ >= .5) && (_ = 1 - _), 3 === c && (_ *= 2), 1 === u ? _ *= _ : 2 === u ? _ *= _ * _ : 3 === u ? _ *= _ * _ * _ : 4 === u && (_ *= _ * _ * _ * _), this.ratio = 1 === c ? 1 - _ : 2 === c ? _ : t / l < .5 ? _ / 2 : 1 - _ / 2;\n}\nelse\n    this.ratio = this._ease.getRatio(t / l); if (this._time !== o || i) {\n    if (!this._initted) {\n        if (this._init(), !this._initted || this._gc)\n            return;\n        if (!i && this._firstPT && (!1 !== this.vars.lazy && this._duration || this.vars.lazy && !this._duration))\n            return this._time = this._totalTime = o, this._rawPrevTime = h, I.push(this), void (this._lazy = [t, e]);\n        this._time && !s ? this.ratio = this._ease.getRatio(this._time / l) : s && this._ease._calcEnd && (this.ratio = this._ease.getRatio(0 === this._time ? 0 : 1));\n    }\n    for (!1 !== this._lazy && (this._lazy = !1), this._active || !this._paused && this._time !== o && t >= 0 && (this._active = !0), 0 === o && (this._startAt && (t >= 0 ? this._startAt.render(t, !0, i) : n || (n = \"_dummyGS\")), this.vars.onStart && (0 === this._time && 0 !== l || e || this._callback(\"onStart\"))), r = this._firstPT; r;)\n        r.f ? r.t[r.p](r.c * this.ratio + r.s) : r.t[r.p] = r.c * this.ratio + r.s, r = r._next;\n    this._onUpdate && (t < 0 && this._startAt && -1e-4 !== t && this._startAt.render(t, !0, i), e || (this._time !== o || s || i) && this._callback(\"onUpdate\")), n && (this._gc && !i || (t < 0 && this._startAt && !this._onUpdate && -1e-4 !== t && this._startAt.render(t, !0, i), s && (this._timeline.autoRemoveChildren && this._enabled(!1, !1), this._active = !1), !e && this.vars[n] && this._callback(n), 0 === l && 1e-8 === this._rawPrevTime && 1e-8 !== a && (this._rawPrevTime = 0)));\n} }, a._kill = function (t, e, i) { if (\"all\" === t && (t = null), null == t && (null == e || e === this.target))\n    return this._lazy = !1, this._enabled(!1, !1); e = \"string\" != typeof e ? e || this._targets || this.target : L.selector(e) || e; var s, n, r, a, o, l, h, _, c, u = i && this._time && i._startTime === this._startTime && this._timeline === i._timeline, f = this._firstPT; if ((m(e) || O(e)) && \"number\" != typeof e[0])\n    for (s = e.length; --s > -1;)\n        this._kill(t, e[s], i) && (l = !0);\nelse {\n    if (this._targets) {\n        for (s = this._targets.length; --s > -1;)\n            if (e === this._targets[s]) {\n                o = this._propLookup[s] || {}, this._overwrittenProps = this._overwrittenProps || [], n = this._overwrittenProps[s] = t ? this._overwrittenProps[s] || {} : \"all\";\n                break;\n            }\n    }\n    else {\n        if (e !== this.target)\n            return !1;\n        o = this._propLookup, n = this._overwrittenProps = t ? this._overwrittenProps || {} : \"all\";\n    }\n    if (o) {\n        if (h = t || o, _ = t !== n && \"all\" !== n && t !== o && (\"object\" != typeof t || !t._tempKill), i && (L.onOverwrite || this.vars.onOverwrite)) {\n            for (r in h)\n                o[r] && (c || (c = []), c.push(r));\n            if ((c || !t) && !Z(this, i, e, c))\n                return !1;\n        }\n        for (r in h)\n            (a = o[r]) && (u && (a.f ? a.t[a.p](a.s) : a.t[a.p] = a.s, l = !0), a.pg && a.t._kill(h) && (l = !0), a.pg && 0 !== a.t._overwriteProps.length || (a._prev ? a._prev._next = a._next : a === this._firstPT && (this._firstPT = a._next), a._next && (a._next._prev = a._prev), a._next = a._prev = null), delete o[r]), _ && (n[r] = 1);\n        !this._firstPT && this._initted && f && this._enabled(!1, !1);\n    }\n} return l; }, a.invalidate = function () { this._notifyPluginsOfEnabled && L._onPluginEvent(\"_onDisable\", this); var t = this._time; return this._firstPT = this._overwrittenProps = this._startAt = this._onUpdate = null, this._notifyPluginsOfEnabled = this._active = this._lazy = !1, this._propLookup = this._targets ? {} : [], R.prototype.invalidate.call(this), this.vars.immediateRender && (this._time = -1e-8, this.render(t, !1, !1 !== this.vars.lazy)), this; }, a._enabled = function (t, e) { if (l || o.wake(), t && this._gc) {\n    var i, s = this._targets;\n    if (s)\n        for (i = s.length; --i > -1;)\n            this._siblings[i] = X(s[i], this, !0);\n    else\n        this._siblings = X(this.target, this, !0);\n} return R.prototype._enabled.call(this, t, e), !(!this._notifyPluginsOfEnabled || !this._firstPT) && L._onPluginEvent(t ? \"_onEnable\" : \"_onDisable\", this); }, L.to = function (t, e, i) { return new L(t, e, i); }, L.from = function (t, e, i) { return i.runBackwards = !0, i.immediateRender = 0 != i.immediateRender, new L(t, e, i); }, L.fromTo = function (t, e, i, s) { return s.startAt = i, s.immediateRender = 0 != s.immediateRender && 0 != i.immediateRender, new L(t, e, s); }, L.delayedCall = function (t, e, i, s, n) { return new L(e, 0, { delay: t, onComplete: e, onCompleteParams: i, callbackScope: s, onReverseComplete: e, onReverseCompleteParams: i, immediateRender: !1, lazy: !1, useFrames: n, overwrite: 0 }); }, L.set = function (t, e) { return new L(t, 0, e); }, L.getTweensOf = function (t, e) { if (null == t)\n    return []; var i, s, n, r; if (t = \"string\" != typeof t ? t : L.selector(t) || t, (m(t) || O(t)) && \"number\" != typeof t[0]) {\n    for (i = t.length, s = []; --i > -1;)\n        s = s.concat(L.getTweensOf(t[i], e));\n    for (i = s.length; --i > -1;)\n        for (r = s[i], n = i; --n > -1;)\n            r === s[n] && s.splice(i, 1);\n}\nelse if (t._gsTweenID)\n    for (i = (s = X(t).concat()).length; --i > -1;)\n        (s[i]._gc || e && !s[i].isActive()) && s.splice(i, 1); return s || []; }, L.killTweensOf = L.killDelayedCallsTo = function (t, e, i) { \"object\" == typeof e && (i = e, e = !1); for (var s = L.getTweensOf(t, e), n = s.length; --n > -1;)\n    s[n]._kill(i, t); }; var it = T(\"plugins.TweenPlugin\", function (t, e) { this._overwriteProps = (t || \"\").split(\",\"), this._propName = this._overwriteProps[0], this._priority = e || 0, this._super = it.prototype; }, !0); if (a = it.prototype, it.version = \"1.19.0\", it.API = 2, a._firstPT = null, a._addTween = G, a.setRatio = U, a._kill = function (t) { var e, i = this._overwriteProps, s = this._firstPT; if (null != t[this._propName])\n    this._overwriteProps = [];\nelse\n    for (e = i.length; --e > -1;)\n        null != t[i[e]] && i.splice(e, 1); for (; s;)\n    null != t[s.n] && (s._next && (s._next._prev = s._prev), s._prev ? (s._prev._next = s._next, s._prev = null) : this._firstPT === s && (this._firstPT = s._next)), s = s._next; return !1; }, a._mod = a._roundProps = function (t) { for (var e, i = this._firstPT; i;)\n    (e = t[this._propName] || null != i.n && t[i.n.split(this._propName + \"_\").join(\"\")]) && \"function\" == typeof e && (2 === i.f ? i.t._applyPT.m = e : i.m = e), i = i._next; }, L._onPluginEvent = function (t, e) { var i, s, n, r, a, o = e._firstPT; if (\"_onInitAllProps\" === t) {\n    for (; o;) {\n        for (a = o._next, s = n; s && s.pr > o.pr;)\n            s = s._next;\n        (o._prev = s ? s._prev : r) ? o._prev._next = o : n = o, (o._next = s) ? s._prev = o : r = o, o = a;\n    }\n    o = e._firstPT = n;\n} for (; o;)\n    o.pg && \"function\" == typeof o.t[t] && o.t[t]() && (i = !0), o = o._next; return i; }, it.activate = function (t) { for (var e = t.length; --e > -1;)\n    t[e].API === it.API && (M[(new t[e])._propName] = t[e]); return !0; }, g.plugin = function (t) { if (!(t && t.propName && t.init && t.API))\n    throw \"illegal plugin definition.\"; var e, i = t.propName, s = t.priority || 0, n = t.overwriteProps, r = { init: \"_onInitTween\", set: \"setRatio\", kill: \"_kill\", round: \"_mod\", mod: \"_mod\", initAll: \"_onInitAllProps\" }, a = T(\"plugins.\" + i.charAt(0).toUpperCase() + i.substr(1) + \"Plugin\", function () { it.call(this, i, s), this._overwriteProps = n || []; }, !0 === t.global), o = a.prototype = new it(i); for (e in o.constructor = a, a.API = t.API, r)\n    \"function\" == typeof t[e] && (o[r[e]] = t[e]); return a.version = t.version, it.activate([a]), a; }, n = t._gsQueue) {\n    for (r = 0; r < n.length; r++)\n        n[r]();\n    for (a in d)\n        d[a].func || t.console.log(\"GSAP encountered missing dependency: \" + a);\n} return l = !1, L; }(_gsScope), globals = _gsScope.GreenSockGlobals, nonGlobals = globals.com.greensock, SimpleTimeline = nonGlobals.core.SimpleTimeline, Animation = nonGlobals.core.Animation, Ease = globals.Ease, Linear = globals.Linear, Power1 = globals.Power1, Power2 = globals.Power2, Power3 = globals.Power3, Power4 = globals.Power4, TweenPlugin = globals.TweenPlugin, EventDispatcher = nonGlobals.events.EventDispatcher, IonicAppflowActivator = function () { function t() { this.$circles = [], this.$lis = [], this.screenshots = [], this.active = null, this.duration = 6, this.quickDuration = .25, this.r = 31, this.gsRefs = [], this.scrollPause = null, this.circumference = 2 * this.r * Math.PI, this.animationSelect = this.animationSelect.bind(this), this.animationStart = this.animationStart.bind(this); } return t.prototype.componentDidLoad = function () { var t = this; setTimeout(this.animationStart, 2e3, 0); var e = function (i, s) { t.$lis[s] = i, t.$circles[s] = i.querySelector(\".progress-ring__circle\"), t.screenshots[s] = i.querySelector(\"a\").dataset.screenshot, i.nextElementSibling && \"LI\" === i.nextElementSibling.nodeName && e(i.nextElementSibling, s + 1); }; e(this.el.querySelector(\"li:nth-child(1)\"), 0), this.active = 0; }, t.prototype.animationStart = function (t) { var e = this; if (console.log(\"starting\"), window.pageYOffset > 1e3)\n    return console.log(\"pausing\"), void (this.scrollPause = setTimeout(this.animationStart, 5e3, 0)); this.active = t, this.$lis[t].classList.add(\"active\"), TweenLite.to(this.$circles[t], .4, { opacity: 1 }), TweenLite.to(this.$circles[t], this.duration, { strokeDashoffset: 0, onCompleteScope: this, onComplete: function () { e.animationStart(t >= e.$circles.length - 1 ? 0 : t + 1), e.$lis[t].classList.remove(\"active\"), TweenLite.to(e.$circles[t], .2, { opacity: 0, onCompleteScope: e, onComplete: function () { TweenLite.to(e.$circles[t], 0, { strokeDashoffset: e.circumference, lazy: !0 }); } }); } }); }, t.prototype.animationSelect = function (t) { var e = this; this.$lis[t].classList.add(\"active\"), this.active = t, this.scrollPause && clearTimeout(this.scrollPause), this.animationStopOthers(t), TweenLite.to(this.$circles[t], this.quickDuration, { strokeDashoffset: 0, opacity: 1, onCompleteScope: this, onComplete: function () { e.animationStopOthers(t); } }); }, t.prototype.animationRestart = function (t) { var e = this; this.animationStopOthers(t), TweenLite.to(this.$circles[t], .5, { strokeDashoffset: -1 * this.circumference, lazy: !0, onCompleteScope: this, onComplete: function () { TweenLite.to(e.$circles[t], 0, { strokeDashoffset: e.circumference, opacity: 0, lazy: !0, onCompleteScope: e, onComplete: function () { e.animationStart(t); } }); } }); }, t.prototype.animationStopOthers = function (t) { var e = this, i = []; this.$circles.forEach(function (s, n) { n != t && (i.push(s), e.$lis[n].classList.remove(\"active\")); }), TweenLite.to(i, .2, { opacity: 0, lazy: !0, onCompleteScope: this, onComplete: function () { TweenLite.to(i, 0, { strokeDashoffset: e.circumference, opacity: 0, lazy: !0 }); } }); }, t.prototype.circle = function (t) { return void 0 === t && (t = 0), ionic_site_components_core_js_1.h(\"svg\", { class: \"progress-ring\", height: \"64\", width: \"64\" }, ionic_site_components_core_js_1.h(\"circle\", { class: \"progress-ring__circle\", stroke: \"#6C89F7\", \"stroke-width\": \"2\", fill: \"transparent\", r: this.r, cx: \"32\", cy: \"32\", style: { strokeDasharray: this.circumference + \" \" + this.circumference, strokeDashoffset: this.circumference - t / 100 * this.circumference } })); }, t.prototype.render = function () { var t = this; return [ionic_site_components_core_js_1.h(\"div\", { class: \"app-screenshot\" }, this.screenshots.map(function (e, i) { return ionic_site_components_core_js_1.h(\"img\", { class: i === t.active ? \"active\" : \"inactive\", src: e }); })), ionic_site_components_core_js_1.h(\"nav\", null, ionic_site_components_core_js_1.h(\"ul\", null, ionic_site_components_core_js_1.h(\"li\", { onMouseEnter: function () { return t.animationSelect(0); }, onMouseLeave: function () { return t.animationRestart(0); } }, this.circle(), ionic_site_components_core_js_1.h(\"slot\", { name: \"1\" })), ionic_site_components_core_js_1.h(\"li\", { onMouseEnter: function () { return t.animationSelect(1); }, onMouseLeave: function () { return t.animationRestart(1); } }, this.circle(), ionic_site_components_core_js_1.h(\"slot\", { name: \"2\" })), ionic_site_components_core_js_1.h(\"li\", { onMouseEnter: function () { return t.animationSelect(2); }, onMouseLeave: function () { return t.animationRestart(2); } }, this.circle(), ionic_site_components_core_js_1.h(\"slot\", { name: \"3\" }))))]; }, Object.defineProperty(t, \"is\", { get: function () { return \"ionic-appflow-activator\"; }, enumerable: !0, configurable: !0 }), Object.defineProperty(t, \"properties\", { get: function () { return { $circles: { state: !0 }, $lis: { state: !0 }, active: { state: !0 }, el: { elementRef: !0 }, screenshots: { state: !0 } }; }, enumerable: !0, configurable: !0 }), Object.defineProperty(t, \"style\", { get: function () { return \"ionic-appflow-activator nav{background:#fff;position:-webkit-sticky;position:sticky;top:100px;width:100%;margin-top:100px}ionic-appflow-activator ul{display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between;max-width:100%;width:600px;padding-left:10px;padding-right:10px;margin-top:-44px;margin-right:auto;margin-left:auto}ionic-appflow-activator li{width:120px;position:relative;list-style:none}ionic-appflow-activator .progress-ring{position:absolute;top:0;left:calc(50% - 32px);pointer-events:none}ionic-appflow-activator .progress-ring__circle{opacity:0;-webkit-transform:rotate(-90deg);transform:rotate(-90deg);-webkit-transform-origin:50% 50%;transform-origin:50% 50%}ionic-appflow-activator a{text-align:center;display:block;padding-top:64px;cursor:pointer}ionic-appflow-activator a .icon,ionic-appflow-activator a .icon-active{position:absolute;border-radius:50%;height:56px;width:56px;top:4px;left:calc(50% - 28px);-webkit-transition:opacity .2s ease,transform .2s ease;transition:opacity .2s ease,transform .2s ease}ionic-appflow-activator a .icon-active{opacity:0;-webkit-transform:scale(1.1);transform:scale(1.1);-webkit-transition:opacity .2s ease,transform .2s ease;transition:opacity .2s ease,transform .2s ease}ionic-appflow-activator a span{font-size:14px;line-height:22px;text-align:center;letter-spacing:.06em;text-transform:uppercase;font-weight:600;color:#92a1b3;-webkit-transition:color .2s ease;transition:color .2s ease}ionic-appflow-activator .active .icon{-webkit-transform:scale(1.1);transform:scale(1.1);opacity:0}ionic-appflow-activator .active .icon-active{opacity:1;-webkit-transform:scale(1);transform:scale(1)}ionic-appflow-activator .active span{color:#6c89f7}ionic-appflow-activator .app-screenshot{position:relative}ionic-appflow-activator .app-screenshot img{position:absolute;top:0;right:0;bottom:0;left:0;opacity:0;-webkit-transform:scale(1.01);transform:scale(1.01);-webkit-transition:opacity .2s ease,transform .2s ease;transition:opacity .2s ease,transform .2s ease}ionic-appflow-activator .app-screenshot img.active{opacity:1;-webkit-transform:none;transform:none}\\@-webkit-keyframes full-circle{to{stroke-dashoffset:0}}\\@keyframes full-circle{to{stroke-dashoffset:0}}\"; }, enumerable: !0, configurable: !0 }), t; }();\nexports.IonicAppflowActivator = IonicAppflowActivator;\n"
  },
  {
    "path": "content/js/stencil/cjs/es5/build/hclgi8iu.sc.entry.js",
    "content": "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar ionic_site_components_core_js_1 = require(\"../ionic-site-components.core.js\");\nvar _gsScope = \"undefined\" != typeof window ? window : \"undefined\" != typeof module && module.exports && \"undefined\" != typeof global ? global : {}, TweenLite = function (t) { var e = {}, i = t.document, s = t.GreenSockGlobals = t.GreenSockGlobals || t; if (s.TweenLite)\n    return s.TweenLite; var n, r, a, o, l, h, _, c = function (t) { var e, i = t.split(\".\"), n = s; for (e = 0; e < i.length; e++)\n    n[i[e]] = n = n[i[e]] || {}; return n; }, u = c(\"com.greensock\"), f = function (t) { var e, i = [], s = t.length; for (e = 0; e !== s; i.push(t[e++]))\n    ; return i; }, p = function () { }, m = (h = Object.prototype.toString, _ = h.call([]), function (t) { return null != t && (t instanceof Array || \"object\" == typeof t && !!t.push && h.call(t) === _); }), d = {}, v = function (t, i, n, r) { this.sc = d[t] ? d[t].sc : [], d[t] = this, this.gsClass = null, this.func = n; var a = []; this.check = function (o) { for (var l, h, _, u, f = i.length, p = f; --f > -1;)\n    (l = d[i[f]] || new v(i[f], [])).gsClass ? (a[f] = l.gsClass, p--) : o && l.sc.push(this); if (0 === p && n)\n    for (_ = (h = (\"com.greensock.\" + t).split(\".\")).pop(), u = c(h.join(\".\"))[_] = this.gsClass = n.apply(n, a), r && (s[_] = e[_] = u), f = 0; f < this.sc.length; f++)\n        this.sc[f].check(); }, this.check(!0); }, g = t._gsDefine = function (t, e, i, s) { return new v(t, e, i, s); }, T = u._class = function (t, e, i) { return e = e || function () { }, g(t, [], function () { return e; }, i), e; }; g.globals = s; var y = [0, 0, 1, 1], w = T(\"easing.Ease\", function (t, e, i, s) { this._func = t, this._type = i || 0, this._power = s || 0, this._params = e ? y.concat(e) : y; }, !0), P = w.map = {}, b = w.register = function (t, e, i, s) { for (var n, r, a, o, l = e.split(\",\"), h = l.length, _ = (i || \"easeIn,easeOut,easeInOut\").split(\",\"); --h > -1;)\n    for (r = l[h], n = s ? T(\"easing.\" + r, null, !0) : u.easing[r] || {}, a = _.length; --a > -1;)\n        P[r + \".\" + (o = _[a])] = P[o + r] = n[o] = t.getRatio ? t : t[o] || new t; }; for ((a = w.prototype)._calcEnd = !1, a.getRatio = function (t) { if (this._func)\n    return this._params[0] = t, this._func.apply(null, this._params); var e = this._type, i = this._power, s = 1 === e ? 1 - t : 2 === e ? t : t < .5 ? 2 * t : 2 * (1 - t); return 1 === i ? s *= s : 2 === i ? s *= s * s : 3 === i ? s *= s * s * s : 4 === i && (s *= s * s * s * s), 1 === e ? 1 - s : 2 === e ? s : t < .5 ? s / 2 : 1 - s / 2; }, r = (n = [\"Linear\", \"Quad\", \"Cubic\", \"Quart\", \"Quint,Strong\"]).length; --r > -1;)\n    a = n[r] + \",Power\" + r, b(new w(null, null, 1, r), a, \"easeOut\", !0), b(new w(null, null, 2, r), a, \"easeIn\" + (0 === r ? \",easeNone\" : \"\")), b(new w(null, null, 3, r), a, \"easeInOut\"); P.linear = u.easing.Linear.easeIn, P.swing = u.easing.Quad.easeInOut; var S = T(\"events.EventDispatcher\", function (t) { this._listeners = {}, this._eventTarget = t || this; }); (a = S.prototype).addEventListener = function (t, e, i, s, n) { n = n || 0; var r, a, h = this._listeners[t], _ = 0; for (this !== o || l || o.wake(), null == h && (this._listeners[t] = h = []), a = h.length; --a > -1;)\n    (r = h[a]).c === e && r.s === i ? h.splice(a, 1) : 0 === _ && r.pr < n && (_ = a + 1); h.splice(_, 0, { c: e, s: i, up: s, pr: n }); }, a.removeEventListener = function (t, e) { var i, s = this._listeners[t]; if (s)\n    for (i = s.length; --i > -1;)\n        if (s[i].c === e)\n            return void s.splice(i, 1); }, a.dispatchEvent = function (t) { var e, i, s, n = this._listeners[t]; if (n)\n    for ((e = n.length) > 1 && (n = n.slice(0)), i = this._eventTarget; --e > -1;)\n        (s = n[e]) && (s.up ? s.c.call(s.s || i, { type: t, target: i }) : s.c.call(s.s || i)); }; var k = t.requestAnimationFrame, A = t.cancelAnimationFrame, C = Date.now || function () { return (new Date).getTime(); }, x = C(); for (r = (n = [\"ms\", \"moz\", \"webkit\", \"o\"]).length; --r > -1 && !k;)\n    k = t[n[r] + \"RequestAnimationFrame\"], A = t[n[r] + \"CancelAnimationFrame\"] || t[n[r] + \"CancelRequestAnimationFrame\"]; T(\"Ticker\", function (t, e) { var s, n, r, a, h, _ = this, c = C(), u = !(!1 === e || !k) && \"auto\", f = 500, m = 33, d = function (t) { var e, i, o = C() - x; o > f && (c += o - m), _.time = ((x += o) - c) / 1e3, e = _.time - h, (!s || e > 0 || !0 === t) && (_.frame++, h += e + (e >= a ? .004 : a - e), i = !0), !0 !== t && (r = n(d)), i && _.dispatchEvent(\"tick\"); }; S.call(_), _.time = _.frame = 0, _.tick = function () { d(!0); }, _.lagSmoothing = function (t, e) { if (!arguments.length)\n    return f < 1e8; f = t || 1e8, m = Math.min(e, f, 0); }, _.sleep = function () { null != r && (u && A ? A(r) : clearTimeout(r), n = p, r = null, _ === o && (l = !1)); }, _.wake = function (t) { null !== r ? _.sleep() : t ? c += -x + (x = C()) : _.frame > 10 && (x = C() - f + 5), n = 0 === s ? p : u && k ? k : function (t) { return setTimeout(t, 1e3 * (h - _.time) + 1 | 0); }, _ === o && (l = !0), d(2); }, _.fps = function (t) { if (!arguments.length)\n    return s; h = this.time + (a = 1 / ((s = t) || 60)), _.wake(); }, _.useRAF = function (t) { if (!arguments.length)\n    return u; _.sleep(), u = t, _.fps(s); }, _.fps(t), setTimeout(function () { \"auto\" === u && _.frame < 5 && \"hidden\" !== (i || {}).visibilityState && _.useRAF(!1); }, 1500); }), (a = u.Ticker.prototype = new u.events.EventDispatcher).constructor = u.Ticker; var R = T(\"core.Animation\", function (t, e) { if (this.vars = e = e || {}, this._duration = this._totalDuration = t || 0, this._delay = Number(e.delay) || 0, this._timeScale = 1, this._active = !!e.immediateRender, this.data = e.data, this._reversed = !!e.reversed, J) {\n    l || o.wake();\n    var i = this.vars.useFrames ? H : J;\n    i.add(this, i._time), this.vars.paused && this.paused(!0);\n} }); o = R.ticker = new u.Ticker, (a = R.prototype)._dirty = a._gc = a._initted = a._paused = !1, a._totalTime = a._time = 0, a._rawPrevTime = -1, a._next = a._last = a._onUpdate = a._timeline = a.timeline = null, a._paused = !1; var D = function () { l && C() - x > 2e3 && (\"hidden\" !== (i || {}).visibilityState || !o.lagSmoothing()) && o.wake(); var t = setTimeout(D, 2e3); t.unref && t.unref(); }; D(), a.play = function (t, e) { return null != t && this.seek(t, e), this.reversed(!1).paused(!1); }, a.pause = function (t, e) { return null != t && this.seek(t, e), this.paused(!0); }, a.resume = function (t, e) { return null != t && this.seek(t, e), this.paused(!1); }, a.seek = function (t, e) { return this.totalTime(Number(t), !1 !== e); }, a.restart = function (t, e) { return this.reversed(!1).paused(!1).totalTime(t ? -this._delay : 0, !1 !== e, !0); }, a.reverse = function (t, e) { return null != t && this.seek(t || this.totalDuration(), e), this.reversed(!0).paused(!1); }, a.render = function (t, e, i) { }, a.invalidate = function () { return this._time = this._totalTime = 0, this._initted = this._gc = !1, this._rawPrevTime = -1, !this._gc && this.timeline || this._enabled(!0), this; }, a.isActive = function () { var t, e = this._timeline, i = this._startTime; return !e || !this._gc && !this._paused && e.isActive() && (t = e.rawTime(!0)) >= i && t < i + this.totalDuration() / this._timeScale - 1e-8; }, a._enabled = function (t, e) { return l || o.wake(), this._gc = !t, this._active = this.isActive(), !0 !== e && (t && !this.timeline ? this._timeline.add(this, this._startTime - this._delay) : !t && this.timeline && this._timeline._remove(this, !0)), !1; }, a._kill = function (t, e) { return this._enabled(!1, !1); }, a.kill = function (t, e) { return this._kill(t, e), this; }, a._uncache = function (t) { for (var e = t ? this : this.timeline; e;)\n    e._dirty = !0, e = e.timeline; return this; }, a._swapSelfInParams = function (t) { for (var e = t.length, i = t.concat(); --e > -1;)\n    \"{self}\" === t[e] && (i[e] = this); return i; }, a._callback = function (t) { var e = this.vars, i = e[t], s = e[t + \"Params\"], n = e[t + \"Scope\"] || e.callbackScope || this; switch (s ? s.length : 0) {\n    case 0:\n        i.call(n);\n        break;\n    case 1:\n        i.call(n, s[0]);\n        break;\n    case 2:\n        i.call(n, s[0], s[1]);\n        break;\n    default: i.apply(n, s);\n} }, a.eventCallback = function (t, e, i, s) { if (\"on\" === (t || \"\").substr(0, 2)) {\n    var n = this.vars;\n    if (1 === arguments.length)\n        return n[t];\n    null == e ? delete n[t] : (n[t] = e, n[t + \"Params\"] = m(i) && -1 !== i.join(\"\").indexOf(\"{self}\") ? this._swapSelfInParams(i) : i, n[t + \"Scope\"] = s), \"onUpdate\" === t && (this._onUpdate = e);\n} return this; }, a.delay = function (t) { return arguments.length ? (this._timeline.smoothChildTiming && this.startTime(this._startTime + t - this._delay), this._delay = t, this) : this._delay; }, a.duration = function (t) { return arguments.length ? (this._duration = this._totalDuration = t, this._uncache(!0), this._timeline.smoothChildTiming && this._time > 0 && this._time < this._duration && 0 !== t && this.totalTime(this._totalTime * (t / this._duration), !0), this) : (this._dirty = !1, this._duration); }, a.totalDuration = function (t) { return this._dirty = !1, arguments.length ? this.duration(t) : this._totalDuration; }, a.time = function (t, e) { return arguments.length ? (this._dirty && this.totalDuration(), this.totalTime(t > this._duration ? this._duration : t, e)) : this._time; }, a.totalTime = function (t, e, i) { if (l || o.wake(), !arguments.length)\n    return this._totalTime; if (this._timeline) {\n    if (t < 0 && !i && (t += this.totalDuration()), this._timeline.smoothChildTiming) {\n        this._dirty && this.totalDuration();\n        var s = this._totalDuration, n = this._timeline;\n        if (t > s && !i && (t = s), this._startTime = (this._paused ? this._pauseTime : n._time) - (this._reversed ? s - t : t) / this._timeScale, n._dirty || this._uncache(!1), n._timeline)\n            for (; n._timeline;)\n                n._timeline._time !== (n._startTime + n._totalTime) / n._timeScale && n.totalTime(n._totalTime, !0), n = n._timeline;\n    }\n    this._gc && this._enabled(!0, !1), this._totalTime === t && 0 !== this._duration || (I.length && W(), this.render(t, e, !1), I.length && W());\n} return this; }, a.progress = a.totalProgress = function (t, e) { var i = this.duration(); return arguments.length ? this.totalTime(i * t, e) : i ? this._time / i : this.ratio; }, a.startTime = function (t) { return arguments.length ? (t !== this._startTime && (this._startTime = t, this.timeline && this.timeline._sortChildren && this.timeline.add(this, t - this._delay)), this) : this._startTime; }, a.endTime = function (t) { return this._startTime + (0 != t ? this.totalDuration() : this.duration()) / this._timeScale; }, a.timeScale = function (t) { if (!arguments.length)\n    return this._timeScale; var e, i; for (t = t || 1e-8, this._timeline && this._timeline.smoothChildTiming && (i = (e = this._pauseTime) || 0 === e ? e : this._timeline.totalTime(), this._startTime = i - (i - this._startTime) * this._timeScale / t), this._timeScale = t, i = this.timeline; i && i.timeline;)\n    i._dirty = !0, i.totalDuration(), i = i.timeline; return this; }, a.reversed = function (t) { return arguments.length ? (t != this._reversed && (this._reversed = t, this.totalTime(this._timeline && !this._timeline.smoothChildTiming ? this.totalDuration() - this._totalTime : this._totalTime, !0)), this) : this._reversed; }, a.paused = function (t) { if (!arguments.length)\n    return this._paused; var e, i, s = this._timeline; return t != this._paused && s && (l || t || o.wake(), i = (e = s.rawTime()) - this._pauseTime, !t && s.smoothChildTiming && (this._startTime += i, this._uncache(!1)), this._pauseTime = t ? e : null, this._paused = t, this._active = this.isActive(), !t && 0 !== i && this._initted && this.duration() && this.render(e = s.smoothChildTiming ? this._totalTime : (e - this._startTime) / this._timeScale, e === this._totalTime, !0)), this._gc && !t && this._enabled(!0, !1), this; }; var E = T(\"core.SimpleTimeline\", function (t) { R.call(this, 0, t), this.autoRemoveChildren = this.smoothChildTiming = !0; }); (a = E.prototype = new R).constructor = E, a.kill()._gc = !1, a._first = a._last = a._recent = null, a._sortChildren = !1, a.add = a.insert = function (t, e, i, s) { var n, r; if (t._startTime = Number(e || 0) + t._delay, t._paused && this !== t._timeline && (t._pauseTime = this.rawTime() - (t._timeline.rawTime() - t._pauseTime)), t.timeline && t.timeline._remove(t, !0), t.timeline = t._timeline = this, t._gc && t._enabled(!0, !0), n = this._last, this._sortChildren)\n    for (r = t._startTime; n && n._startTime > r;)\n        n = n._prev; return n ? (t._next = n._next, n._next = t) : (t._next = this._first, this._first = t), t._next ? t._next._prev = t : this._last = t, t._prev = n, this._recent = t, this._timeline && this._uncache(!0), this; }, a._remove = function (t, e) { return t.timeline === this && (e || t._enabled(!1, !0), t._prev ? t._prev._next = t._next : this._first === t && (this._first = t._next), t._next ? t._next._prev = t._prev : this._last === t && (this._last = t._prev), t._next = t._prev = t.timeline = null, t === this._recent && (this._recent = this._last), this._timeline && this._uncache(!0)), this; }, a.render = function (t, e, i) { var s, n = this._first; for (this._totalTime = this._time = this._rawPrevTime = t; n;)\n    s = n._next, (n._active || t >= n._startTime && !n._paused && !n._gc) && n.render(n._reversed ? (n._dirty ? n.totalDuration() : n._totalDuration) - (t - n._startTime) * n._timeScale : (t - n._startTime) * n._timeScale, e, i), n = s; }, a.rawTime = function () { return l || o.wake(), this._totalTime; }; var L = T(\"TweenLite\", function (e, i, s) { if (R.call(this, i, s), this.render = L.prototype.render, null == e)\n    throw \"Cannot tween a null target.\"; this.target = e = \"string\" != typeof e ? e : L.selector(e) || e; var n, r, a, o = e.jquery || e.length && e !== t && e[0] && (e[0] === t || e[0].nodeType && e[0].style && !e.nodeType), l = this.vars.overwrite; if (this._overwrite = l = null == l ? Y[L.defaultOverwrite] : \"number\" == typeof l ? l >> 0 : Y[l], (o || e instanceof Array || e.push && m(e)) && \"number\" != typeof e[0])\n    for (this._targets = a = f(e), this._propLookup = [], this._siblings = [], n = 0; n < a.length; n++)\n        (r = a[n]) ? \"string\" != typeof r ? r.length && r !== t && r[0] && (r[0] === t || r[0].nodeType && r[0].style && !r.nodeType) ? (a.splice(n--, 1), this._targets = a = a.concat(f(r))) : (this._siblings[n] = X(r, this, !1), 1 === l && this._siblings[n].length > 1 && tt(r, this, null, 1, this._siblings[n])) : \"string\" == typeof (r = a[n--] = L.selector(r)) && a.splice(n + 1, 1) : a.splice(n--, 1);\nelse\n    this._propLookup = {}, this._siblings = X(e, this, !1), 1 === l && this._siblings.length > 1 && tt(e, this, null, 1, this._siblings); (this.vars.immediateRender || 0 === i && 0 === this._delay && !1 !== this.vars.immediateRender) && (this._time = -1e-8, this.render(Math.min(0, -this._delay))); }, !0), O = function (e) { return e && e.length && e !== t && e[0] && (e[0] === t || e[0].nodeType && e[0].style && !e.nodeType); }; (a = L.prototype = new R).constructor = L, a.kill()._gc = !1, a.ratio = 0, a._firstPT = a._targets = a._overwrittenProps = a._startAt = null, a._notifyPluginsOfEnabled = a._lazy = !1, L.version = \"2.1.2\", L.defaultEase = a._ease = new w(null, null, 1, 1), L.defaultOverwrite = \"auto\", L.ticker = o, L.autoSleep = 120, L.lagSmoothing = function (t, e) { o.lagSmoothing(t, e); }, L.selector = t.$ || t.jQuery || function (e) { var s = t.$ || t.jQuery; return s ? (L.selector = s, s(e)) : (i || (i = t.document), i ? i.querySelectorAll ? i.querySelectorAll(e) : i.getElementById(\"#\" === e.charAt(0) ? e.substr(1) : e) : e); }; var I = [], z = {}, F = /(?:(-|-=|\\+=)?\\d*\\.?\\d*(?:e[\\-+]?\\d+)?)[0-9]/gi, $ = /[\\+-]=-?[\\.\\d]/, U = function (t) { for (var e, i = this._firstPT; i;)\n    e = i.blob ? 1 === t && null != this.end ? this.end : t ? this.join(\"\") : this.start : i.c * t + i.s, i.m ? e = i.m.call(this._tween, e, this._target || i.t, this._tween) : e < 1e-6 && e > -1e-6 && !i.blob && (e = 0), i.f ? i.fp ? i.t[i.p](i.fp, e) : i.t[i.p](e) : i.t[i.p] = e, i = i._next; }, N = function (t) { return (1e3 * t | 0) / 1e3 + \"\"; }, j = function (t, e, i, s) { var n, r, a, o, l, h, _, c = [], u = 0, f = \"\", p = 0; for (c.start = t, c.end = e, t = c[0] = t + \"\", e = c[1] = e + \"\", i && (i(c), t = c[0], e = c[1]), c.length = 0, n = t.match(F) || [], r = e.match(F) || [], s && (s._next = null, s.blob = 1, c._firstPT = c._applyPT = s), l = r.length, o = 0; o < l; o++)\n    f += (h = e.substr(u, e.indexOf(_ = r[o], u) - u)) || !o ? h : \",\", u += h.length, p ? p = (p + 1) % 5 : \"rgba(\" === h.substr(-5) && (p = 1), _ === n[o] || n.length <= o ? f += _ : (f && (c.push(f), f = \"\"), a = parseFloat(n[o]), c.push(a), c._firstPT = { _next: c._firstPT, t: c, p: c.length - 1, s: a, c: (\"=\" === _.charAt(1) ? parseInt(_.charAt(0) + \"1\", 10) * parseFloat(_.substr(2)) : parseFloat(_) - a) || 0, f: 0, m: p && p < 4 ? Math.round : N }), u += _.length; return (f += e.substr(u)) && c.push(f), c.setRatio = U, $.test(e) && (c.end = null), c; }, G = function (t, e, i, s, n, r, a, o, l) { \"function\" == typeof s && (s = s(l || 0, t)); var h = typeof t[e], _ = \"function\" !== h ? \"\" : e.indexOf(\"set\") || \"function\" != typeof t[\"get\" + e.substr(3)] ? e : \"get\" + e.substr(3), c = \"get\" !== i ? i : _ ? a ? t[_](a) : t[_]() : t[e], u = \"string\" == typeof s && \"=\" === s.charAt(1), f = { t: t, p: e, s: c, f: \"function\" === h, pg: 0, n: n || e, m: r ? \"function\" == typeof r ? r : Math.round : 0, pr: 0, c: u ? parseInt(s.charAt(0) + \"1\", 10) * parseFloat(s.substr(2)) : parseFloat(s) - c || 0 }; if ((\"number\" != typeof c || \"number\" != typeof s && !u) && (a || isNaN(c) || !u && isNaN(s) || \"boolean\" == typeof c || \"boolean\" == typeof s ? (f.fp = a, f = { t: j(c, u ? parseFloat(f.s) + f.c + (f.s + \"\").replace(/[0-9\\-\\.]/g, \"\") : s, o || L.defaultStringFilter, f), p: \"setRatio\", s: 0, c: 1, f: 2, pg: 0, n: n || e, pr: 0, m: 0 }) : (f.s = parseFloat(c), u || (f.c = parseFloat(s) - f.s || 0))), f.c)\n    return (f._next = this._firstPT) && (f._next._prev = f), this._firstPT = f, f; }, q = L._internals = { isArray: m, isSelector: O, lazyTweens: I, blobDif: j }, M = L._plugins = {}, Q = q.tweenLookup = {}, B = 0, K = q.reservedProps = { ease: 1, delay: 1, overwrite: 1, onComplete: 1, onCompleteParams: 1, onCompleteScope: 1, useFrames: 1, runBackwards: 1, startAt: 1, onUpdate: 1, onUpdateParams: 1, onUpdateScope: 1, onStart: 1, onStartParams: 1, onStartScope: 1, onReverseComplete: 1, onReverseCompleteParams: 1, onReverseCompleteScope: 1, onRepeat: 1, onRepeatParams: 1, onRepeatScope: 1, easeParams: 1, yoyo: 1, immediateRender: 1, repeat: 1, repeatDelay: 1, data: 1, paused: 1, reversed: 1, autoCSS: 1, lazy: 1, onOverwrite: 1, callbackScope: 1, stringFilter: 1, id: 1, yoyoEase: 1, stagger: 1 }, Y = { none: 0, all: 1, auto: 2, concurrent: 3, allOnStart: 4, preexisting: 5, true: 1, false: 0 }, H = R._rootFramesTimeline = new E, J = R._rootTimeline = new E, V = 30, W = q.lazyRender = function () { var t, e, i = I.length; for (z = {}, t = 0; t < i; t++)\n    (e = I[t]) && !1 !== e._lazy && (e.render(e._lazy[0], e._lazy[1], !0), e._lazy = !1); I.length = 0; }; J._startTime = o.time, H._startTime = o.frame, J._active = H._active = !0, setTimeout(W, 1), R._updateRoot = L.render = function () { var t, e, i; if (I.length && W(), J.render((o.time - J._startTime) * J._timeScale, !1, !1), H.render((o.frame - H._startTime) * H._timeScale, !1, !1), I.length && W(), o.frame >= V) {\n    for (i in V = o.frame + (parseInt(L.autoSleep, 10) || 120), Q) {\n        for (t = (e = Q[i].tweens).length; --t > -1;)\n            e[t]._gc && e.splice(t, 1);\n        0 === e.length && delete Q[i];\n    }\n    if ((!(i = J._first) || i._paused) && L.autoSleep && !H._first && 1 === o._listeners.tick.length) {\n        for (; i && i._paused;)\n            i = i._next;\n        i || o.sleep();\n    }\n} }, o.addEventListener(\"tick\", R._updateRoot); var X = function (t, e, i) { var s, n, r = t._gsTweenID; if (Q[r || (t._gsTweenID = r = \"t\" + B++)] || (Q[r] = { target: t, tweens: [] }), e && ((s = Q[r].tweens)[n = s.length] = e, i))\n    for (; --n > -1;)\n        s[n] === e && s.splice(n, 1); return Q[r].tweens; }, Z = function (t, e, i, s) { var n, r, a = t.vars.onOverwrite; return a && (n = a(t, e, i, s)), (a = L.onOverwrite) && (r = a(t, e, i, s)), !1 !== n && !1 !== r; }, tt = function (t, e, i, s, n) { var r, a, o, l; if (1 === s || s >= 4) {\n    for (l = n.length, r = 0; r < l; r++)\n        if ((o = n[r]) !== e)\n            o._gc || o._kill(null, t, e) && (a = !0);\n        else if (5 === s)\n            break;\n    return a;\n} var h, _ = e._startTime + 1e-8, c = [], u = 0, f = 0 === e._duration; for (r = n.length; --r > -1;)\n    (o = n[r]) === e || o._gc || o._paused || (o._timeline !== e._timeline ? (h = h || et(e, 0, f), 0 === et(o, h, f) && (c[u++] = o)) : o._startTime <= _ && o._startTime + o.totalDuration() / o._timeScale > _ && ((f || !o._initted) && _ - o._startTime <= 2e-8 || (c[u++] = o))); for (r = u; --r > -1;)\n    if (l = (o = c[r])._firstPT, 2 === s && o._kill(i, t, e) && (a = !0), 2 !== s || !o._firstPT && o._initted && l) {\n        if (2 !== s && !Z(o, e))\n            continue;\n        o._enabled(!1, !1) && (a = !0);\n    } return a; }, et = function (t, e, i) { for (var s = t._timeline, n = s._timeScale, r = t._startTime; s._timeline;) {\n    if (r += s._startTime, n *= s._timeScale, s._paused)\n        return -100;\n    s = s._timeline;\n} return (r /= n) > e ? r - e : i && r === e || !t._initted && r - e < 2e-8 ? 1e-8 : (r += t.totalDuration() / t._timeScale / n) > e + 1e-8 ? 0 : r - e - 1e-8; }; a._init = function () { var t, e, i, s, n, r, a = this.vars, o = this._overwrittenProps, l = this._duration, h = !!a.immediateRender, _ = a.ease, c = this._startAt; if (a.startAt) {\n    for (s in c && (c.render(-1, !0), c.kill()), n = {}, a.startAt)\n        n[s] = a.startAt[s];\n    if (n.data = \"isStart\", n.overwrite = !1, n.immediateRender = !0, n.lazy = h && !1 !== a.lazy, n.startAt = n.delay = null, n.onUpdate = a.onUpdate, n.onUpdateParams = a.onUpdateParams, n.onUpdateScope = a.onUpdateScope || a.callbackScope || this, this._startAt = L.to(this.target || {}, 0, n), h)\n        if (this._time > 0)\n            this._startAt = null;\n        else if (0 !== l)\n            return;\n}\nelse if (a.runBackwards && 0 !== l)\n    if (c)\n        c.render(-1, !0), c.kill(), this._startAt = null;\n    else {\n        for (s in 0 !== this._time && (h = !1), i = {}, a)\n            K[s] && \"autoCSS\" !== s || (i[s] = a[s]);\n        if (i.overwrite = 0, i.data = \"isFromStart\", i.lazy = h && !1 !== a.lazy, i.immediateRender = h, this._startAt = L.to(this.target, 0, i), h) {\n            if (0 === this._time)\n                return;\n        }\n        else\n            this._startAt._init(), this._startAt._enabled(!1), this.vars.immediateRender && (this._startAt = null);\n    } if (this._ease = _ = _ ? _ instanceof w ? _ : \"function\" == typeof _ ? new w(_, a.easeParams) : P[_] || L.defaultEase : L.defaultEase, a.easeParams instanceof Array && _.config && (this._ease = _.config.apply(_, a.easeParams)), this._easeType = this._ease._type, this._easePower = this._ease._power, this._firstPT = null, this._targets)\n    for (r = this._targets.length, t = 0; t < r; t++)\n        this._initProps(this._targets[t], this._propLookup[t] = {}, this._siblings[t], o ? o[t] : null, t) && (e = !0);\nelse\n    e = this._initProps(this.target, this._propLookup, this._siblings, o, 0); if (e && L._onPluginEvent(\"_onInitAllProps\", this), o && (this._firstPT || \"function\" != typeof this.target && this._enabled(!1, !1)), a.runBackwards)\n    for (i = this._firstPT; i;)\n        i.s += i.c, i.c = -i.c, i = i._next; this._onUpdate = a.onUpdate, this._initted = !0; }, a._initProps = function (e, i, s, n, r) { var a, o, l, h, _, c; if (null == e)\n    return !1; for (a in z[e._gsTweenID] && W(), this.vars.css || e.style && e !== t && e.nodeType && M.css && !1 !== this.vars.autoCSS && function (t, e) { var i, s = {}; for (i in t)\n    K[i] || i in e && \"transform\" !== i && \"x\" !== i && \"y\" !== i && \"width\" !== i && \"height\" !== i && \"className\" !== i && \"border\" !== i || !(!M[i] || M[i] && M[i]._autoCSS) || (s[i] = t[i], delete t[i]); t.css = s; }(this.vars, e), this.vars)\n    if (c = this.vars[a], K[a])\n        c && (c instanceof Array || c.push && m(c)) && -1 !== c.join(\"\").indexOf(\"{self}\") && (this.vars[a] = c = this._swapSelfInParams(c, this));\n    else if (M[a] && (h = new M[a])._onInitTween(e, this.vars[a], this, r)) {\n        for (this._firstPT = _ = { _next: this._firstPT, t: h, p: \"setRatio\", s: 0, c: 1, f: 1, n: a, pg: 1, pr: h._priority, m: 0 }, o = h._overwriteProps.length; --o > -1;)\n            i[h._overwriteProps[o]] = this._firstPT;\n        (h._priority || h._onInitAllProps) && (l = !0), (h._onDisable || h._onEnable) && (this._notifyPluginsOfEnabled = !0), _._next && (_._next._prev = _);\n    }\n    else\n        i[a] = G.call(this, e, a, \"get\", c, a, 0, null, this.vars.stringFilter, r); return n && this._kill(n, e) ? this._initProps(e, i, s, n, r) : this._overwrite > 1 && this._firstPT && s.length > 1 && tt(e, this, i, this._overwrite, s) ? (this._kill(i, e), this._initProps(e, i, s, n, r)) : (this._firstPT && (!1 !== this.vars.lazy && this._duration || this.vars.lazy && !this._duration) && (z[e._gsTweenID] = !0), l); }, a.render = function (t, e, i) { var s, n, r, a, o = this._time, l = this._duration, h = this._rawPrevTime; if (t >= l - 1e-8 && t >= 0)\n    this._totalTime = this._time = l, this.ratio = this._ease._calcEnd ? this._ease.getRatio(1) : 1, this._reversed || (s = !0, n = \"onComplete\", i = i || this._timeline.autoRemoveChildren), 0 === l && (this._initted || !this.vars.lazy || i) && (this._startTime === this._timeline._duration && (t = 0), (h < 0 || t <= 0 && t >= -1e-8 || 1e-8 === h && \"isPause\" !== this.data) && h !== t && (i = !0, h > 1e-8 && (n = \"onReverseComplete\")), this._rawPrevTime = a = !e || t || h === t ? t : 1e-8);\nelse if (t < 1e-8)\n    this._totalTime = this._time = 0, this.ratio = this._ease._calcEnd ? this._ease.getRatio(0) : 0, (0 !== o || 0 === l && h > 0) && (n = \"onReverseComplete\", s = this._reversed), t > -1e-8 ? t = 0 : t < 0 && (this._active = !1, 0 === l && (this._initted || !this.vars.lazy || i) && (h >= 0 && (1e-8 !== h || \"isPause\" !== this.data) && (i = !0), this._rawPrevTime = a = !e || t || h === t ? t : 1e-8)), (!this._initted || this._startAt && this._startAt.progress()) && (i = !0);\nelse if (this._totalTime = this._time = t, this._easeType) {\n    var _ = t / l, c = this._easeType, u = this._easePower;\n    (1 === c || 3 === c && _ >= .5) && (_ = 1 - _), 3 === c && (_ *= 2), 1 === u ? _ *= _ : 2 === u ? _ *= _ * _ : 3 === u ? _ *= _ * _ * _ : 4 === u && (_ *= _ * _ * _ * _), this.ratio = 1 === c ? 1 - _ : 2 === c ? _ : t / l < .5 ? _ / 2 : 1 - _ / 2;\n}\nelse\n    this.ratio = this._ease.getRatio(t / l); if (this._time !== o || i) {\n    if (!this._initted) {\n        if (this._init(), !this._initted || this._gc)\n            return;\n        if (!i && this._firstPT && (!1 !== this.vars.lazy && this._duration || this.vars.lazy && !this._duration))\n            return this._time = this._totalTime = o, this._rawPrevTime = h, I.push(this), void (this._lazy = [t, e]);\n        this._time && !s ? this.ratio = this._ease.getRatio(this._time / l) : s && this._ease._calcEnd && (this.ratio = this._ease.getRatio(0 === this._time ? 0 : 1));\n    }\n    for (!1 !== this._lazy && (this._lazy = !1), this._active || !this._paused && this._time !== o && t >= 0 && (this._active = !0), 0 === o && (this._startAt && (t >= 0 ? this._startAt.render(t, !0, i) : n || (n = \"_dummyGS\")), this.vars.onStart && (0 === this._time && 0 !== l || e || this._callback(\"onStart\"))), r = this._firstPT; r;)\n        r.f ? r.t[r.p](r.c * this.ratio + r.s) : r.t[r.p] = r.c * this.ratio + r.s, r = r._next;\n    this._onUpdate && (t < 0 && this._startAt && -1e-4 !== t && this._startAt.render(t, !0, i), e || (this._time !== o || s || i) && this._callback(\"onUpdate\")), n && (this._gc && !i || (t < 0 && this._startAt && !this._onUpdate && -1e-4 !== t && this._startAt.render(t, !0, i), s && (this._timeline.autoRemoveChildren && this._enabled(!1, !1), this._active = !1), !e && this.vars[n] && this._callback(n), 0 === l && 1e-8 === this._rawPrevTime && 1e-8 !== a && (this._rawPrevTime = 0)));\n} }, a._kill = function (t, e, i) { if (\"all\" === t && (t = null), null == t && (null == e || e === this.target))\n    return this._lazy = !1, this._enabled(!1, !1); e = \"string\" != typeof e ? e || this._targets || this.target : L.selector(e) || e; var s, n, r, a, o, l, h, _, c, u = i && this._time && i._startTime === this._startTime && this._timeline === i._timeline, f = this._firstPT; if ((m(e) || O(e)) && \"number\" != typeof e[0])\n    for (s = e.length; --s > -1;)\n        this._kill(t, e[s], i) && (l = !0);\nelse {\n    if (this._targets) {\n        for (s = this._targets.length; --s > -1;)\n            if (e === this._targets[s]) {\n                o = this._propLookup[s] || {}, this._overwrittenProps = this._overwrittenProps || [], n = this._overwrittenProps[s] = t ? this._overwrittenProps[s] || {} : \"all\";\n                break;\n            }\n    }\n    else {\n        if (e !== this.target)\n            return !1;\n        o = this._propLookup, n = this._overwrittenProps = t ? this._overwrittenProps || {} : \"all\";\n    }\n    if (o) {\n        if (h = t || o, _ = t !== n && \"all\" !== n && t !== o && (\"object\" != typeof t || !t._tempKill), i && (L.onOverwrite || this.vars.onOverwrite)) {\n            for (r in h)\n                o[r] && (c || (c = []), c.push(r));\n            if ((c || !t) && !Z(this, i, e, c))\n                return !1;\n        }\n        for (r in h)\n            (a = o[r]) && (u && (a.f ? a.t[a.p](a.s) : a.t[a.p] = a.s, l = !0), a.pg && a.t._kill(h) && (l = !0), a.pg && 0 !== a.t._overwriteProps.length || (a._prev ? a._prev._next = a._next : a === this._firstPT && (this._firstPT = a._next), a._next && (a._next._prev = a._prev), a._next = a._prev = null), delete o[r]), _ && (n[r] = 1);\n        !this._firstPT && this._initted && f && this._enabled(!1, !1);\n    }\n} return l; }, a.invalidate = function () { this._notifyPluginsOfEnabled && L._onPluginEvent(\"_onDisable\", this); var t = this._time; return this._firstPT = this._overwrittenProps = this._startAt = this._onUpdate = null, this._notifyPluginsOfEnabled = this._active = this._lazy = !1, this._propLookup = this._targets ? {} : [], R.prototype.invalidate.call(this), this.vars.immediateRender && (this._time = -1e-8, this.render(t, !1, !1 !== this.vars.lazy)), this; }, a._enabled = function (t, e) { if (l || o.wake(), t && this._gc) {\n    var i, s = this._targets;\n    if (s)\n        for (i = s.length; --i > -1;)\n            this._siblings[i] = X(s[i], this, !0);\n    else\n        this._siblings = X(this.target, this, !0);\n} return R.prototype._enabled.call(this, t, e), !(!this._notifyPluginsOfEnabled || !this._firstPT) && L._onPluginEvent(t ? \"_onEnable\" : \"_onDisable\", this); }, L.to = function (t, e, i) { return new L(t, e, i); }, L.from = function (t, e, i) { return i.runBackwards = !0, i.immediateRender = 0 != i.immediateRender, new L(t, e, i); }, L.fromTo = function (t, e, i, s) { return s.startAt = i, s.immediateRender = 0 != s.immediateRender && 0 != i.immediateRender, new L(t, e, s); }, L.delayedCall = function (t, e, i, s, n) { return new L(e, 0, { delay: t, onComplete: e, onCompleteParams: i, callbackScope: s, onReverseComplete: e, onReverseCompleteParams: i, immediateRender: !1, lazy: !1, useFrames: n, overwrite: 0 }); }, L.set = function (t, e) { return new L(t, 0, e); }, L.getTweensOf = function (t, e) { if (null == t)\n    return []; var i, s, n, r; if (t = \"string\" != typeof t ? t : L.selector(t) || t, (m(t) || O(t)) && \"number\" != typeof t[0]) {\n    for (i = t.length, s = []; --i > -1;)\n        s = s.concat(L.getTweensOf(t[i], e));\n    for (i = s.length; --i > -1;)\n        for (r = s[i], n = i; --n > -1;)\n            r === s[n] && s.splice(i, 1);\n}\nelse if (t._gsTweenID)\n    for (i = (s = X(t).concat()).length; --i > -1;)\n        (s[i]._gc || e && !s[i].isActive()) && s.splice(i, 1); return s || []; }, L.killTweensOf = L.killDelayedCallsTo = function (t, e, i) { \"object\" == typeof e && (i = e, e = !1); for (var s = L.getTweensOf(t, e), n = s.length; --n > -1;)\n    s[n]._kill(i, t); }; var it = T(\"plugins.TweenPlugin\", function (t, e) { this._overwriteProps = (t || \"\").split(\",\"), this._propName = this._overwriteProps[0], this._priority = e || 0, this._super = it.prototype; }, !0); if (a = it.prototype, it.version = \"1.19.0\", it.API = 2, a._firstPT = null, a._addTween = G, a.setRatio = U, a._kill = function (t) { var e, i = this._overwriteProps, s = this._firstPT; if (null != t[this._propName])\n    this._overwriteProps = [];\nelse\n    for (e = i.length; --e > -1;)\n        null != t[i[e]] && i.splice(e, 1); for (; s;)\n    null != t[s.n] && (s._next && (s._next._prev = s._prev), s._prev ? (s._prev._next = s._next, s._prev = null) : this._firstPT === s && (this._firstPT = s._next)), s = s._next; return !1; }, a._mod = a._roundProps = function (t) { for (var e, i = this._firstPT; i;)\n    (e = t[this._propName] || null != i.n && t[i.n.split(this._propName + \"_\").join(\"\")]) && \"function\" == typeof e && (2 === i.f ? i.t._applyPT.m = e : i.m = e), i = i._next; }, L._onPluginEvent = function (t, e) { var i, s, n, r, a, o = e._firstPT; if (\"_onInitAllProps\" === t) {\n    for (; o;) {\n        for (a = o._next, s = n; s && s.pr > o.pr;)\n            s = s._next;\n        (o._prev = s ? s._prev : r) ? o._prev._next = o : n = o, (o._next = s) ? s._prev = o : r = o, o = a;\n    }\n    o = e._firstPT = n;\n} for (; o;)\n    o.pg && \"function\" == typeof o.t[t] && o.t[t]() && (i = !0), o = o._next; return i; }, it.activate = function (t) { for (var e = t.length; --e > -1;)\n    t[e].API === it.API && (M[(new t[e])._propName] = t[e]); return !0; }, g.plugin = function (t) { if (!(t && t.propName && t.init && t.API))\n    throw \"illegal plugin definition.\"; var e, i = t.propName, s = t.priority || 0, n = t.overwriteProps, r = { init: \"_onInitTween\", set: \"setRatio\", kill: \"_kill\", round: \"_mod\", mod: \"_mod\", initAll: \"_onInitAllProps\" }, a = T(\"plugins.\" + i.charAt(0).toUpperCase() + i.substr(1) + \"Plugin\", function () { it.call(this, i, s), this._overwriteProps = n || []; }, !0 === t.global), o = a.prototype = new it(i); for (e in o.constructor = a, a.API = t.API, r)\n    \"function\" == typeof t[e] && (o[r[e]] = t[e]); return a.version = t.version, it.activate([a]), a; }, n = t._gsQueue) {\n    for (r = 0; r < n.length; r++)\n        n[r]();\n    for (a in d)\n        d[a].func || t.console.log(\"GSAP encountered missing dependency: \" + a);\n} return l = !1, L; }(_gsScope), globals = _gsScope.GreenSockGlobals, nonGlobals = globals.com.greensock, SimpleTimeline = nonGlobals.core.SimpleTimeline, Animation = nonGlobals.core.Animation, Ease = globals.Ease, Linear = globals.Linear, Power1 = globals.Power1, Power2 = globals.Power2, Power3 = globals.Power3, Power4 = globals.Power4, TweenPlugin = globals.TweenPlugin, EventDispatcher = nonGlobals.events.EventDispatcher, IonicAppflowActivator = function () { function t() { this.$circles = [], this.$lis = [], this.screenshots = [], this.active = null, this.duration = 6, this.quickDuration = .25, this.r = 31, this.gsRefs = [], this.scrollPause = null, this.circumference = 2 * this.r * Math.PI, this.animationSelect = this.animationSelect.bind(this), this.animationStart = this.animationStart.bind(this); } return t.prototype.componentDidLoad = function () { var t = this; setTimeout(this.animationStart, 2e3, 0); var e = function (i, s) { t.$lis[s] = i, t.$circles[s] = i.querySelector(\".progress-ring__circle\"), t.screenshots[s] = i.querySelector(\"a\").dataset.screenshot, i.nextElementSibling && \"LI\" === i.nextElementSibling.nodeName && e(i.nextElementSibling, s + 1); }; e(this.el.querySelector(\"li:nth-child(1)\"), 0), this.active = 0; }, t.prototype.animationStart = function (t) { var e = this; if (console.log(\"starting\"), window.pageYOffset > 1e3)\n    return console.log(\"pausing\"), void (this.scrollPause = setTimeout(this.animationStart, 5e3, 0)); this.active = t, this.$lis[t].classList.add(\"active\"), TweenLite.to(this.$circles[t], .4, { opacity: 1 }), TweenLite.to(this.$circles[t], this.duration, { strokeDashoffset: 0, onCompleteScope: this, onComplete: function () { e.animationStart(t >= e.$circles.length - 1 ? 0 : t + 1), e.$lis[t].classList.remove(\"active\"), TweenLite.to(e.$circles[t], .2, { opacity: 0, onCompleteScope: e, onComplete: function () { TweenLite.to(e.$circles[t], 0, { strokeDashoffset: e.circumference, lazy: !0 }); } }); } }); }, t.prototype.animationSelect = function (t) { var e = this; this.$lis[t].classList.add(\"active\"), this.active = t, this.scrollPause && clearTimeout(this.scrollPause), this.animationStopOthers(t), TweenLite.to(this.$circles[t], this.quickDuration, { strokeDashoffset: 0, opacity: 1, onCompleteScope: this, onComplete: function () { e.animationStopOthers(t); } }); }, t.prototype.animationRestart = function (t) { var e = this; this.animationStopOthers(t), TweenLite.to(this.$circles[t], .5, { strokeDashoffset: -1 * this.circumference, lazy: !0, onCompleteScope: this, onComplete: function () { TweenLite.to(e.$circles[t], 0, { strokeDashoffset: e.circumference, opacity: 0, lazy: !0, onCompleteScope: e, onComplete: function () { e.animationStart(t); } }); } }); }, t.prototype.animationStopOthers = function (t) { var e = this, i = []; this.$circles.forEach(function (s, n) { n != t && (i.push(s), e.$lis[n].classList.remove(\"active\")); }), TweenLite.to(i, .2, { opacity: 0, lazy: !0, onCompleteScope: this, onComplete: function () { TweenLite.to(i, 0, { strokeDashoffset: e.circumference, opacity: 0, lazy: !0 }); } }); }, t.prototype.circle = function (t) { return void 0 === t && (t = 0), ionic_site_components_core_js_1.h(\"svg\", { class: \"progress-ring\", height: \"64\", width: \"64\" }, ionic_site_components_core_js_1.h(\"circle\", { class: \"progress-ring__circle\", stroke: \"#6C89F7\", \"stroke-width\": \"2\", fill: \"transparent\", r: this.r, cx: \"32\", cy: \"32\", style: { strokeDasharray: this.circumference + \" \" + this.circumference, strokeDashoffset: this.circumference - t / 100 * this.circumference } })); }, t.prototype.render = function () { var t = this; return [ionic_site_components_core_js_1.h(\"div\", { class: \"app-screenshot\" }, this.screenshots.map(function (e, i) { return ionic_site_components_core_js_1.h(\"img\", { class: i === t.active ? \"active\" : \"inactive\", src: e }); })), ionic_site_components_core_js_1.h(\"nav\", null, ionic_site_components_core_js_1.h(\"ul\", null, ionic_site_components_core_js_1.h(\"li\", { onMouseEnter: function () { return t.animationSelect(0); }, onMouseLeave: function () { return t.animationRestart(0); } }, this.circle(), ionic_site_components_core_js_1.h(\"slot\", { name: \"1\" })), ionic_site_components_core_js_1.h(\"li\", { onMouseEnter: function () { return t.animationSelect(1); }, onMouseLeave: function () { return t.animationRestart(1); } }, this.circle(), ionic_site_components_core_js_1.h(\"slot\", { name: \"2\" })), ionic_site_components_core_js_1.h(\"li\", { onMouseEnter: function () { return t.animationSelect(2); }, onMouseLeave: function () { return t.animationRestart(2); } }, this.circle(), ionic_site_components_core_js_1.h(\"slot\", { name: \"3\" }))))]; }, Object.defineProperty(t, \"is\", { get: function () { return \"ionic-appflow-activator\"; }, enumerable: !0, configurable: !0 }), Object.defineProperty(t, \"properties\", { get: function () { return { $circles: { state: !0 }, $lis: { state: !0 }, active: { state: !0 }, el: { elementRef: !0 }, screenshots: { state: !0 } }; }, enumerable: !0, configurable: !0 }), Object.defineProperty(t, \"style\", { get: function () { return \"ionic-appflow-activator nav{background:#fff;position:-webkit-sticky;position:sticky;top:100px;width:100%;margin-top:100px}ionic-appflow-activator ul{display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between;max-width:100%;width:600px;padding-left:10px;padding-right:10px;margin-top:-44px;margin-right:auto;margin-left:auto}ionic-appflow-activator li{width:120px;position:relative;list-style:none}ionic-appflow-activator .progress-ring{position:absolute;top:0;left:calc(50% - 32px);pointer-events:none}ionic-appflow-activator .progress-ring__circle{opacity:0;-webkit-transform:rotate(-90deg);transform:rotate(-90deg);-webkit-transform-origin:50% 50%;transform-origin:50% 50%}ionic-appflow-activator a{text-align:center;display:block;padding-top:64px;cursor:pointer}ionic-appflow-activator a .icon,ionic-appflow-activator a .icon-active{position:absolute;border-radius:50%;height:56px;width:56px;top:4px;left:calc(50% - 28px);-webkit-transition:opacity .2s ease,transform .2s ease;transition:opacity .2s ease,transform .2s ease}ionic-appflow-activator a .icon-active{opacity:0;-webkit-transform:scale(1.1);transform:scale(1.1);-webkit-transition:opacity .2s ease,transform .2s ease;transition:opacity .2s ease,transform .2s ease}ionic-appflow-activator a span{font-size:14px;line-height:22px;text-align:center;letter-spacing:.06em;text-transform:uppercase;font-weight:600;color:#92a1b3;-webkit-transition:color .2s ease;transition:color .2s ease}ionic-appflow-activator .active .icon{-webkit-transform:scale(1.1);transform:scale(1.1);opacity:0}ionic-appflow-activator .active .icon-active{opacity:1;-webkit-transform:scale(1);transform:scale(1)}ionic-appflow-activator .active span{color:#6c89f7}ionic-appflow-activator .app-screenshot{position:relative}ionic-appflow-activator .app-screenshot img{position:absolute;top:0;right:0;bottom:0;left:0;opacity:0;-webkit-transform:scale(1.01);transform:scale(1.01);-webkit-transition:opacity .2s ease,transform .2s ease;transition:opacity .2s ease,transform .2s ease}ionic-appflow-activator .app-screenshot img.active{opacity:1;-webkit-transform:none;transform:none}\\@-webkit-keyframes full-circle{to{stroke-dashoffset:0}}\\@keyframes full-circle{to{stroke-dashoffset:0}}\"; }, enumerable: !0, configurable: !0 }), t; }();\nexports.IonicAppflowActivator = IonicAppflowActivator;\n"
  },
  {
    "path": "content/js/stencil/cjs/es5/build/index.js",
    "content": ""
  },
  {
    "path": "content/js/stencil/cjs/es5/build/lo9utgpp.entry.js",
    "content": "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar ionic_site_components_core_js_1 = require(\"../ionic-site-components.core.js\");\nvar IonicBarChart = function () { function t() { } return t.prototype.componentWillLoad = function () { }, t.prototype.componentDidLoad = function () { }, t.prototype.hexToRgb = function (t) { t = t.replace(/^#?([a-f\\d])([a-f\\d])([a-f\\d])$/i, function (t, e, r, n) { return e + e + r + r + n + n; }); var e = /^\\s?#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i.exec(t); return e ? parseInt(e[1], 16) + \", \" + parseInt(e[2], 16) + \", \" + parseInt(e[3], 16) : null; }, t.prototype.prepareData = function () { var t = this, e = 0, r = this.color ? this.color.split(\",\") : [\"#92E1A7\", \"#51A7FF\"], n = JSON.parse(this.data.replace(/'/g, '\"')); return Object.keys(n).map(function (t) { return e < n[t] && (e = n[t]), { name: t, value: parseInt(n[t], 10) }; }).map(function (n, a) { return Object.assign({}, n, { styles: { bar: { width: Math.round(n.value / e * 100) + \"%\", background: a > 1 ? \"rgba(91,112,139) linear-gradient(to right, \" + r.map(function (e) { return \"rgba(\" + t.hexToRgb(e) + \", .2)\"; }).join(\", \") + \")\" : \"linear-gradient(to right, \" + r.join(\", \") + \")\" }, text: { color: a > 1 ? \"#5B708B\" : r[r.length - 1] } } }); }); }, t.prototype.render = function () { return [ionic_site_components_core_js_1.h(\"figure\", null, this.prepareData().map(function (t) { return [ionic_site_components_core_js_1.h(\"div\", { class: \"bar-container\" }, ionic_site_components_core_js_1.h(\"div\", { class: \"bar\", style: t.styles.bar }, ionic_site_components_core_js_1.h(\"span\", { style: t.styles.text }, t.value, \"%\"))), ionic_site_components_core_js_1.h(\"strong\", null, t.name)]; }))]; }, Object.defineProperty(t, \"is\", { get: function () { return \"ionic-bar-chart\"; }, enumerable: !0, configurable: !0 }), Object.defineProperty(t, \"properties\", { get: function () { return { color: { type: String, attr: \"color\" }, data: { type: String, attr: \"data\" } }; }, enumerable: !0, configurable: !0 }), Object.defineProperty(t, \"style\", { get: function () { return \"ionic-bar-chart{font-style:normal;font-weight:400;line-height:normal;font-size:16px;display:block;letter-spacing:-.04em}ionic-bar-chart .bar-container{width:100%;padding-right:50px;max-width:697px}ionic-bar-chart .bar{height:12px;position:relative;border-radius:2px}ionic-bar-chart .bar span{position:absolute;right:-40px;font-weight:500;top:-3px}ionic-bar-chart strong{margin-top:10px;display:block;font-weight:400;margin-bottom:34px}\"; }, enumerable: !0, configurable: !0 }), t; }();\nexports.IonicBarChart = IonicBarChart;\n"
  },
  {
    "path": "content/js/stencil/cjs/es5/build/lo9utgpp.sc.entry.js",
    "content": "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar ionic_site_components_core_js_1 = require(\"../ionic-site-components.core.js\");\nvar IonicBarChart = function () { function t() { } return t.prototype.componentWillLoad = function () { }, t.prototype.componentDidLoad = function () { }, t.prototype.hexToRgb = function (t) { t = t.replace(/^#?([a-f\\d])([a-f\\d])([a-f\\d])$/i, function (t, e, r, n) { return e + e + r + r + n + n; }); var e = /^\\s?#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i.exec(t); return e ? parseInt(e[1], 16) + \", \" + parseInt(e[2], 16) + \", \" + parseInt(e[3], 16) : null; }, t.prototype.prepareData = function () { var t = this, e = 0, r = this.color ? this.color.split(\",\") : [\"#92E1A7\", \"#51A7FF\"], n = JSON.parse(this.data.replace(/'/g, '\"')); return Object.keys(n).map(function (t) { return e < n[t] && (e = n[t]), { name: t, value: parseInt(n[t], 10) }; }).map(function (n, a) { return Object.assign({}, n, { styles: { bar: { width: Math.round(n.value / e * 100) + \"%\", background: a > 1 ? \"rgba(91,112,139) linear-gradient(to right, \" + r.map(function (e) { return \"rgba(\" + t.hexToRgb(e) + \", .2)\"; }).join(\", \") + \")\" : \"linear-gradient(to right, \" + r.join(\", \") + \")\" }, text: { color: a > 1 ? \"#5B708B\" : r[r.length - 1] } } }); }); }, t.prototype.render = function () { return [ionic_site_components_core_js_1.h(\"figure\", null, this.prepareData().map(function (t) { return [ionic_site_components_core_js_1.h(\"div\", { class: \"bar-container\" }, ionic_site_components_core_js_1.h(\"div\", { class: \"bar\", style: t.styles.bar }, ionic_site_components_core_js_1.h(\"span\", { style: t.styles.text }, t.value, \"%\"))), ionic_site_components_core_js_1.h(\"strong\", null, t.name)]; }))]; }, Object.defineProperty(t, \"is\", { get: function () { return \"ionic-bar-chart\"; }, enumerable: !0, configurable: !0 }), Object.defineProperty(t, \"properties\", { get: function () { return { color: { type: String, attr: \"color\" }, data: { type: String, attr: \"data\" } }; }, enumerable: !0, configurable: !0 }), Object.defineProperty(t, \"style\", { get: function () { return \"ionic-bar-chart{font-style:normal;font-weight:400;line-height:normal;font-size:16px;display:block;letter-spacing:-.04em}ionic-bar-chart .bar-container{width:100%;padding-right:50px;max-width:697px}ionic-bar-chart .bar{height:12px;position:relative;border-radius:2px}ionic-bar-chart .bar span{position:absolute;right:-40px;font-weight:500;top:-3px}ionic-bar-chart strong{margin-top:10px;display:block;font-weight:400;margin-bottom:34px}\"; }, enumerable: !0, configurable: !0 }), t; }();\nexports.IonicBarChart = IonicBarChart;\n"
  },
  {
    "path": "content/js/stencil/cjs/es5/build/m0trkizf.entry.js",
    "content": "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar ionic_site_components_core_js_1 = require(\"../ionic-site-components.core.js\");\nvar IonicToggleButton = function () { function e() { this.selected = !1; } return e.prototype.deselect = function () { this.selected = !1; }, e.prototype.select = function () { this.selected = !0; }, e.prototype.handleSelected = function () { this.toggleSelected.emit(this); }, e.prototype.hostData = function () { return { class: { selected: this.selected } }; }, e.prototype.render = function () { var e = this; return ionic_site_components_core_js_1.h(\"div\", { onClick: function (t) { return e.handleSelected(); } }, this.title); }, Object.defineProperty(e, \"is\", { get: function () { return \"ionic-toggle-button\"; }, enumerable: !0, configurable: !0 }), Object.defineProperty(e, \"encapsulation\", { get: function () { return \"shadow\"; }, enumerable: !0, configurable: !0 }), Object.defineProperty(e, \"properties\", { get: function () { return { deselect: { method: !0 }, select: { method: !0 }, selected: { state: !0 }, tab: { type: String, attr: \"tab\" }, title: { type: String, attr: \"title\" } }; }, enumerable: !0, configurable: !0 }), Object.defineProperty(e, \"events\", { get: function () { return [{ name: \"toggleSelected\", method: \"toggleSelected\", bubbles: !0, cancelable: !0, composed: !0 }]; }, enumerable: !0, configurable: !0 }), Object.defineProperty(e, \"style\", { get: function () { return \":host{display:-ms-flexbox;display:flex;text-decoration:none;cursor:pointer;border:1px solid #eee;text-align:center;font-size:14px}:host,div{-ms-flex:1;flex:1}div{padding:16px}:host(:last-child){border-left:none}:host(.selected){background-color:#4f8ef7;color:#fff;font-weight:700}\"; }, enumerable: !0, configurable: !0 }), e; }();\nexports.IonicToggleButton = IonicToggleButton;\n"
  },
  {
    "path": "content/js/stencil/cjs/es5/build/m0trkizf.sc.entry.js",
    "content": "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar ionic_site_components_core_js_1 = require(\"../ionic-site-components.core.js\");\nvar IonicToggleButton = function () { function e() { this.selected = !1; } return e.prototype.deselect = function () { this.selected = !1; }, e.prototype.select = function () { this.selected = !0; }, e.prototype.handleSelected = function () { this.toggleSelected.emit(this); }, e.prototype.hostData = function () { return { class: { selected: this.selected } }; }, e.prototype.render = function () { var e = this; return ionic_site_components_core_js_1.h(\"div\", { onClick: function (t) { return e.handleSelected(); } }, this.title); }, Object.defineProperty(e, \"is\", { get: function () { return \"ionic-toggle-button\"; }, enumerable: !0, configurable: !0 }), Object.defineProperty(e, \"encapsulation\", { get: function () { return \"shadow\"; }, enumerable: !0, configurable: !0 }), Object.defineProperty(e, \"properties\", { get: function () { return { deselect: { method: !0 }, select: { method: !0 }, selected: { state: !0 }, tab: { type: String, attr: \"tab\" }, title: { type: String, attr: \"title\" } }; }, enumerable: !0, configurable: !0 }), Object.defineProperty(e, \"events\", { get: function () { return [{ name: \"toggleSelected\", method: \"toggleSelected\", bubbles: !0, cancelable: !0, composed: !0 }]; }, enumerable: !0, configurable: !0 }), Object.defineProperty(e, \"style\", { get: function () { return \".sc-ionic-toggle-button-h{display:-ms-flexbox;display:flex;text-decoration:none;cursor:pointer;border:1px solid #eee;text-align:center;font-size:14px}.sc-ionic-toggle-button-h, div.sc-ionic-toggle-button{-ms-flex:1;flex:1}div.sc-ionic-toggle-button{padding:16px}.sc-ionic-toggle-button-h:last-child{border-left:none}.selected.sc-ionic-toggle-button-h{background-color:#4f8ef7;color:#fff;font-weight:700}\"; }, enumerable: !0, configurable: !0 }), e; }();\nexports.IonicToggleButton = IonicToggleButton;\n"
  },
  {
    "path": "content/js/stencil/cjs/es5/build/nrj8jyt7.entry.js",
    "content": "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar ionic_site_components_core_js_1 = require(\"../ionic-site-components.core.js\");\nvar IonicToggleTab = function () { function e() { this.hidden = !0; } return e.prototype.hide = function () { this.hidden = !0; }, e.prototype.show = function () { this.hidden = !1; }, e.prototype.hostData = function () { return { style: { display: this.hidden ? \"none\" : \"block\" } }; }, e.prototype.render = function () { return ionic_site_components_core_js_1.h(\"slot\", null); }, Object.defineProperty(e, \"is\", { get: function () { return \"ionic-toggle-tab\"; }, enumerable: !0, configurable: !0 }), Object.defineProperty(e, \"encapsulation\", { get: function () { return \"shadow\"; }, enumerable: !0, configurable: !0 }), Object.defineProperty(e, \"properties\", { get: function () { return { hidden: { state: !0 }, hide: { method: !0 }, show: { method: !0 }, tab: { type: String, attr: \"tab\" } }; }, enumerable: !0, configurable: !0 }), e; }();\nexports.IonicToggleTab = IonicToggleTab;\n"
  },
  {
    "path": "content/js/stencil/cjs/es5/build/nrj8jyt7.sc.entry.js",
    "content": "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar ionic_site_components_core_js_1 = require(\"../ionic-site-components.core.js\");\nvar IonicToggleTab = function () { function e() { this.hidden = !0; } return e.prototype.hide = function () { this.hidden = !0; }, e.prototype.show = function () { this.hidden = !1; }, e.prototype.hostData = function () { return { style: { display: this.hidden ? \"none\" : \"block\" } }; }, e.prototype.render = function () { return ionic_site_components_core_js_1.h(\"slot\", null); }, Object.defineProperty(e, \"is\", { get: function () { return \"ionic-toggle-tab\"; }, enumerable: !0, configurable: !0 }), Object.defineProperty(e, \"encapsulation\", { get: function () { return \"shadow\"; }, enumerable: !0, configurable: !0 }), Object.defineProperty(e, \"properties\", { get: function () { return { hidden: { state: !0 }, hide: { method: !0 }, show: { method: !0 }, tab: { type: String, attr: \"tab\" } }; }, enumerable: !0, configurable: !0 }), e; }();\nexports.IonicToggleTab = IonicToggleTab;\n"
  },
  {
    "path": "content/js/stencil/cjs/es5/build/raorzqti.entry.js",
    "content": "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar ionic_site_components_core_js_1 = require(\"../ionic-site-components.core.js\");\nvar IonicQuickSignup = function () { function e() { this.showPricingNotice = !1, this.buttonColor = \"white\", this.transparentInput = !1; } return e.prototype.handleSubmit = function (e) { var t = window.getCookie(\"hubspotutk\"); return this.hsidRef && (this.hsidRef.value = t), !0; }, e.prototype.render = function () { var e = this; return ionic_site_components_core_js_1.h(\"form\", { class: \"form quick-signup-form \" + (this.transparentInput ? \"transparent-input\" : \"\"), role: \"form\", action: \"https://dashboard.ionicframework.com/signup\", method: \"GET\", onSubmit: function (t) { return e.handleSubmit(t); } }, ionic_site_components_core_js_1.h(\"input\", { type: \"hidden\", name: \"hsid\", ref: function (t) { return e.hsidRef = t; } }), ionic_site_components_core_js_1.h(\"input\", { type: \"hidden\", name: \"source\", value: \"homepage-quick\" }), ionic_site_components_core_js_1.h(\"div\", { class: \"form-group\", id: \"field-email\" }, ionic_site_components_core_js_1.h(\"div\", { class: \"row\" }, ionic_site_components_core_js_1.h(\"div\", { class: \"col-sm-8 input-col\" }, ionic_site_components_core_js_1.h(\"input\", { class: \"form-control\", type: \"email\", placeholder: \"Enter your email address\", id: \"id_email\", name: \"email\", spellcheck: \"false\", required: !0 })), ionic_site_components_core_js_1.h(\"div\", { class: \"col-sm-4\" }, ionic_site_components_core_js_1.h(\"button\", { type: \"submit\", class: \"btn \" + this.buttonColor }, \"Get started\")))), this.showPricingNotice ? ionic_site_components_core_js_1.h(\"div\", { class: \"form-group\" }, \"Ionic is free and open source for all developers. We also offer \", ionic_site_components_core_js_1.h(\"a\", { href: \"/pricing\" }, \"enterprise options\"), \" for teams that need support and premium features.\") : null); }, Object.defineProperty(e, \"is\", { get: function () { return \"ionic-quick-signup\"; }, enumerable: !0, configurable: !0 }), Object.defineProperty(e, \"properties\", { get: function () { return { buttonColor: { type: String, attr: \"button-color\" }, showPricingNotice: { type: Boolean, attr: \"show-pricing-notice\" }, transparentInput: { type: Boolean, attr: \"transparent-input\" } }; }, enumerable: !0, configurable: !0 }), Object.defineProperty(e, \"style\", { get: function () { return \"ionic-quick-signup{display:block}.quick-signup-form{width:100%;margin-bottom:-15px}.quick-signup-form .input-col{padding-right:0}.quick-signup-form.transparent-input input{background-color:hsla(0,0%,100%,.2);border:none;border-radius:8px;color:#fff}.quick-signup-form.transparent-input input:focus{border:none}.quick-signup-form.transparent-input input::-webkit-input-placeholder{color:hsla(0,0%,100%,.8);font-weight:400}.quick-signup-form.transparent-input input:-ms-input-placeholder{color:hsla(0,0%,100%,.8);font-weight:400}.quick-signup-form.transparent-input input::-ms-input-placeholder{color:hsla(0,0%,100%,.8);font-weight:400}.quick-signup-form.transparent-input input::placeholder{color:hsla(0,0%,100%,.8);font-weight:400}.quick-signup-form.transparent-input button.btn.white{font-family:Eina,Helvetica Neue,Helvetica,sans-serif;border-radius:8px;text-transform:none;font-weight:600;padding-left:15px;padding-right:15px}.quick-signup-form input{padding:0 14px;height:54px;background-color:#fff;-webkit-box-shadow:none;box-shadow:none;border:2px solid transparent;margin:0;width:100%}.quick-signup-form input::-webkit-input-placeholder{color:#757575;font-weight:700}.quick-signup-form input:-ms-input-placeholder{color:#757575;font-weight:700}.quick-signup-form input::-ms-input-placeholder{color:#757575;font-weight:700}.quick-signup-form input::placeholder{color:#757575;font-weight:700}.quick-signup-form input:focus{border:2px solid #757575}.quick-signup-form button{margin-top:0}\\@media (max-width:991px){.quick-signup-form{max-width:60%;margin:auto}}\\@media (max-width:767px){.quick-signup-form .btn{margin-top:20px}}\"; }, enumerable: !0, configurable: !0 }), e; }();\nexports.IonicQuickSignup = IonicQuickSignup;\n"
  },
  {
    "path": "content/js/stencil/cjs/es5/build/raorzqti.sc.entry.js",
    "content": "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar ionic_site_components_core_js_1 = require(\"../ionic-site-components.core.js\");\nvar IonicQuickSignup = function () { function e() { this.showPricingNotice = !1, this.buttonColor = \"white\", this.transparentInput = !1; } return e.prototype.handleSubmit = function (e) { var t = window.getCookie(\"hubspotutk\"); return this.hsidRef && (this.hsidRef.value = t), !0; }, e.prototype.render = function () { var e = this; return ionic_site_components_core_js_1.h(\"form\", { class: \"form quick-signup-form \" + (this.transparentInput ? \"transparent-input\" : \"\"), role: \"form\", action: \"https://dashboard.ionicframework.com/signup\", method: \"GET\", onSubmit: function (t) { return e.handleSubmit(t); } }, ionic_site_components_core_js_1.h(\"input\", { type: \"hidden\", name: \"hsid\", ref: function (t) { return e.hsidRef = t; } }), ionic_site_components_core_js_1.h(\"input\", { type: \"hidden\", name: \"source\", value: \"homepage-quick\" }), ionic_site_components_core_js_1.h(\"div\", { class: \"form-group\", id: \"field-email\" }, ionic_site_components_core_js_1.h(\"div\", { class: \"row\" }, ionic_site_components_core_js_1.h(\"div\", { class: \"col-sm-8 input-col\" }, ionic_site_components_core_js_1.h(\"input\", { class: \"form-control\", type: \"email\", placeholder: \"Enter your email address\", id: \"id_email\", name: \"email\", spellcheck: \"false\", required: !0 })), ionic_site_components_core_js_1.h(\"div\", { class: \"col-sm-4\" }, ionic_site_components_core_js_1.h(\"button\", { type: \"submit\", class: \"btn \" + this.buttonColor }, \"Get started\")))), this.showPricingNotice ? ionic_site_components_core_js_1.h(\"div\", { class: \"form-group\" }, \"Ionic is free and open source for all developers. We also offer \", ionic_site_components_core_js_1.h(\"a\", { href: \"/pricing\" }, \"enterprise options\"), \" for teams that need support and premium features.\") : null); }, Object.defineProperty(e, \"is\", { get: function () { return \"ionic-quick-signup\"; }, enumerable: !0, configurable: !0 }), Object.defineProperty(e, \"properties\", { get: function () { return { buttonColor: { type: String, attr: \"button-color\" }, showPricingNotice: { type: Boolean, attr: \"show-pricing-notice\" }, transparentInput: { type: Boolean, attr: \"transparent-input\" } }; }, enumerable: !0, configurable: !0 }), Object.defineProperty(e, \"style\", { get: function () { return \"ionic-quick-signup{display:block}.quick-signup-form{width:100%;margin-bottom:-15px}.quick-signup-form .input-col{padding-right:0}.quick-signup-form.transparent-input input{background-color:hsla(0,0%,100%,.2);border:none;border-radius:8px;color:#fff}.quick-signup-form.transparent-input input:focus{border:none}.quick-signup-form.transparent-input input::-webkit-input-placeholder{color:hsla(0,0%,100%,.8);font-weight:400}.quick-signup-form.transparent-input input:-ms-input-placeholder{color:hsla(0,0%,100%,.8);font-weight:400}.quick-signup-form.transparent-input input::-ms-input-placeholder{color:hsla(0,0%,100%,.8);font-weight:400}.quick-signup-form.transparent-input input::placeholder{color:hsla(0,0%,100%,.8);font-weight:400}.quick-signup-form.transparent-input button.btn.white{font-family:Eina,Helvetica Neue,Helvetica,sans-serif;border-radius:8px;text-transform:none;font-weight:600;padding-left:15px;padding-right:15px}.quick-signup-form input{padding:0 14px;height:54px;background-color:#fff;-webkit-box-shadow:none;box-shadow:none;border:2px solid transparent;margin:0;width:100%}.quick-signup-form input::-webkit-input-placeholder{color:#757575;font-weight:700}.quick-signup-form input:-ms-input-placeholder{color:#757575;font-weight:700}.quick-signup-form input::-ms-input-placeholder{color:#757575;font-weight:700}.quick-signup-form input::placeholder{color:#757575;font-weight:700}.quick-signup-form input:focus{border:2px solid #757575}.quick-signup-form button{margin-top:0}\\@media (max-width:991px){.quick-signup-form{max-width:60%;margin:auto}}\\@media (max-width:767px){.quick-signup-form .btn{margin-top:20px}}\"; }, enumerable: !0, configurable: !0 }), e; }();\nexports.IonicQuickSignup = IonicQuickSignup;\n"
  },
  {
    "path": "content/js/stencil/cjs/es5/build/uy47nvwg.entry.js",
    "content": "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar ionic_site_components_core_js_1 = require(\"../ionic-site-components.core.js\");\nvar IonicSlider = function () { function t() { var t = this; this.slideCount = 1, this.timer = null, this.old = null, this.upcoming = null, this.slideDelay = 1e4, this.current = 0, this.status = [], this.ticker = 0, this.next = function () { t.goTo(t.current >= t.slideCount - 1 ? 0 : t.current + 1); }, this.goTo = function (e) { t.status[e] && (clearTimeout(t.timer), t.old = t.current, setTimeout(t.deactivate, 1e3), t.upcoming = t.current = e, t.status[e].visible = !0, t.status[e].new = !0, setTimeout(t.activate, 500), t.timer = setTimeout(t.next, t.slideDelay), t.ticker++); }, this.deactivate = function () { t.status[t.old].active = !1, t.status[t.old].visible = !1, t.status[t.current].new = !1, t.ticker++; }, this.activate = function () { t.status[t.current].active = !0, t.ticker++; }, this.getClasses.bind(this), this.goTo.bind(this), this.activate.bind(this), this.deactivate.bind(this), this.next.bind(this); for (var e = 0; e < this.slideCount; e++)\n    this.status.push({ visible: 0 === e, active: 0 === e, new: !1 }); } return t.prototype.componentDidLoad = function () { this.timer = setTimeout(this.next, this.slideDelay); }, t.prototype.getClasses = function (t) { return [this.status[t].visible ? \"visible\" : \"\", this.status[t].active ? \"active\" : \"\", this.status[t].new ? \"new\" : \"\"].join(\" \"); }, t.prototype.render = function () { return [ionic_site_components_core_js_1.h(\"div\", { class: this.getClasses(0) }, ionic_site_components_core_js_1.h(\"slot\", { name: \"slide-0\" })), ionic_site_components_core_js_1.h(\"div\", { class: this.getClasses(1) }, ionic_site_components_core_js_1.h(\"slot\", { name: \"slide-1\" })), ionic_site_components_core_js_1.h(\"ul\", { class: \"dots\" }, ionic_site_components_core_js_1.h(\"li\", { class: 0 === this.current ? \"active\" : \"\", onClick: this.goTo.bind(this, 0) }), ionic_site_components_core_js_1.h(\"li\", { class: 1 === this.current ? \"active\" : \"\", onClick: this.goTo.bind(this, 1) }))]; }, Object.defineProperty(t, \"is\", { get: function () { return \"ionic-slider\"; }, enumerable: !0, configurable: !0 }), Object.defineProperty(t, \"properties\", { get: function () { return { current: { state: !0 }, status: { state: !0 }, ticker: { state: !0 } }; }, enumerable: !0, configurable: !0 }), Object.defineProperty(t, \"style\", { get: function () { return \"ionic-slider{position:relative}ionic-slider>div,ionic-slider [slot^=slide-]{position:absolute;top:0;right:0;bottom:0;left:0;overflow:hidden}ionic-slider>div{display:none;-webkit-animation:fadeIn .5s ease;animation:fadeIn .5s ease}ionic-slider>div.visible{display:block}ionic-slider>div.visible.new{z-index:1}ionic-slider .dots{position:absolute;top:0;bottom:0;left:20px;padding:0;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;-ms-flex-pack:center;justify-content:center;-ms-flex-line-pack:center;align-content:center;z-index:2}ionic-slider .dots li{height:8px;width:8px;border-radius:50%;border:1px solid hsla(0,0%,100%,.5);margin-bottom:4px;list-style:none;cursor:pointer;-webkit-transition:background-color .5s ease,border-color .5s ease;transition:background-color .5s ease,border-color .5s ease}ionic-slider .dots li.active{background-color:#fff;border-color:#fff}\"; }, enumerable: !0, configurable: !0 }), t; }();\nexports.IonicSlider = IonicSlider;\n"
  },
  {
    "path": "content/js/stencil/cjs/es5/build/uy47nvwg.sc.entry.js",
    "content": "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar ionic_site_components_core_js_1 = require(\"../ionic-site-components.core.js\");\nvar IonicSlider = function () { function t() { var t = this; this.slideCount = 1, this.timer = null, this.old = null, this.upcoming = null, this.slideDelay = 1e4, this.current = 0, this.status = [], this.ticker = 0, this.next = function () { t.goTo(t.current >= t.slideCount - 1 ? 0 : t.current + 1); }, this.goTo = function (e) { t.status[e] && (clearTimeout(t.timer), t.old = t.current, setTimeout(t.deactivate, 1e3), t.upcoming = t.current = e, t.status[e].visible = !0, t.status[e].new = !0, setTimeout(t.activate, 500), t.timer = setTimeout(t.next, t.slideDelay), t.ticker++); }, this.deactivate = function () { t.status[t.old].active = !1, t.status[t.old].visible = !1, t.status[t.current].new = !1, t.ticker++; }, this.activate = function () { t.status[t.current].active = !0, t.ticker++; }, this.getClasses.bind(this), this.goTo.bind(this), this.activate.bind(this), this.deactivate.bind(this), this.next.bind(this); for (var e = 0; e < this.slideCount; e++)\n    this.status.push({ visible: 0 === e, active: 0 === e, new: !1 }); } return t.prototype.componentDidLoad = function () { this.timer = setTimeout(this.next, this.slideDelay); }, t.prototype.getClasses = function (t) { return [this.status[t].visible ? \"visible\" : \"\", this.status[t].active ? \"active\" : \"\", this.status[t].new ? \"new\" : \"\"].join(\" \"); }, t.prototype.render = function () { return [ionic_site_components_core_js_1.h(\"div\", { class: this.getClasses(0) }, ionic_site_components_core_js_1.h(\"slot\", { name: \"slide-0\" })), ionic_site_components_core_js_1.h(\"div\", { class: this.getClasses(1) }, ionic_site_components_core_js_1.h(\"slot\", { name: \"slide-1\" })), ionic_site_components_core_js_1.h(\"ul\", { class: \"dots\" }, ionic_site_components_core_js_1.h(\"li\", { class: 0 === this.current ? \"active\" : \"\", onClick: this.goTo.bind(this, 0) }), ionic_site_components_core_js_1.h(\"li\", { class: 1 === this.current ? \"active\" : \"\", onClick: this.goTo.bind(this, 1) }))]; }, Object.defineProperty(t, \"is\", { get: function () { return \"ionic-slider\"; }, enumerable: !0, configurable: !0 }), Object.defineProperty(t, \"properties\", { get: function () { return { current: { state: !0 }, status: { state: !0 }, ticker: { state: !0 } }; }, enumerable: !0, configurable: !0 }), Object.defineProperty(t, \"style\", { get: function () { return \"ionic-slider{position:relative}ionic-slider>div,ionic-slider [slot^=slide-]{position:absolute;top:0;right:0;bottom:0;left:0;overflow:hidden}ionic-slider>div{display:none;-webkit-animation:fadeIn .5s ease;animation:fadeIn .5s ease}ionic-slider>div.visible{display:block}ionic-slider>div.visible.new{z-index:1}ionic-slider .dots{position:absolute;top:0;bottom:0;left:20px;padding:0;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;-ms-flex-pack:center;justify-content:center;-ms-flex-line-pack:center;align-content:center;z-index:2}ionic-slider .dots li{height:8px;width:8px;border-radius:50%;border:1px solid hsla(0,0%,100%,.5);margin-bottom:4px;list-style:none;cursor:pointer;-webkit-transition:background-color .5s ease,border-color .5s ease;transition:background-color .5s ease,border-color .5s ease}ionic-slider .dots li.active{background-color:#fff;border-color:#fff}\"; }, enumerable: !0, configurable: !0 }), t; }();\nexports.IonicSlider = IonicSlider;\n"
  },
  {
    "path": "content/js/stencil/cjs/es5/build/uyiaiqzf.entry.js",
    "content": "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar ionic_site_components_core_js_1 = require(\"../ionic-site-components.core.js\");\nvar IconExternal = function () { function e() { } return e.prototype.render = function () { return ionic_site_components_core_js_1.h(\"svg\", { class: \"new-tab\", viewBox: \"0 0 12 12\", \"data-ssrc\": \"59.1\" }, ionic_site_components_core_js_1.h(\"g\", { transform: \"translate(0,1)\", \"data-ssrc\": \"59.0\" }, ionic_site_components_core_js_1.h(\"rect\", { class: \"new-tab__box\", x: \"0\", y: \"2\", width: \"9\", height: \"9\", rx: \"1.5\", \"data-ssrc\": \"59.0.\" }), ionic_site_components_core_js_1.h(\"path\", { class: \"new-tab__arrow\", d: \"M9.18198052,1 L6.5,1 L6.5,0 L11,0 L11,1 L11,4.5 L10,4.5 L10,1.59619408 L4.02512627,7.57106781 L3.31801948,6.86396103 L9.18198052,1 Z\", \"data-ssrc\": \"59.1.\" }))); }, Object.defineProperty(e, \"is\", { get: function () { return \"icon-external\"; }, enumerable: !0, configurable: !0 }), Object.defineProperty(e, \"style\", { get: function () { return \"icon-external{color:#a6b8d2;width:.8em;height:.8em;display:inline-block}icon-external svg{fill:currentColor}icon-external svg .new-tab__box{opacity:.5}icon-external svg .new-tab__arrow{-webkit-transition:transform .2s ease-out,fill .2s ease;transition:transform .2s ease-out,fill .2s ease;will-change:trasnform,fill}a:hover icon-external,icon-external:hover{color:#488aff}a:hover icon-external .new-tab__arrow,icon-external:hover .new-tab__arrow{-webkit-transform:translate(1px,-1px);transform:translate(1px,-1px)}\"; }, enumerable: !0, configurable: !0 }), e; }();\nexports.IconExternal = IconExternal;\n"
  },
  {
    "path": "content/js/stencil/cjs/es5/build/uyiaiqzf.sc.entry.js",
    "content": "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar ionic_site_components_core_js_1 = require(\"../ionic-site-components.core.js\");\nvar IconExternal = function () { function e() { } return e.prototype.render = function () { return ionic_site_components_core_js_1.h(\"svg\", { class: \"new-tab\", viewBox: \"0 0 12 12\", \"data-ssrc\": \"59.1\" }, ionic_site_components_core_js_1.h(\"g\", { transform: \"translate(0,1)\", \"data-ssrc\": \"59.0\" }, ionic_site_components_core_js_1.h(\"rect\", { class: \"new-tab__box\", x: \"0\", y: \"2\", width: \"9\", height: \"9\", rx: \"1.5\", \"data-ssrc\": \"59.0.\" }), ionic_site_components_core_js_1.h(\"path\", { class: \"new-tab__arrow\", d: \"M9.18198052,1 L6.5,1 L6.5,0 L11,0 L11,1 L11,4.5 L10,4.5 L10,1.59619408 L4.02512627,7.57106781 L3.31801948,6.86396103 L9.18198052,1 Z\", \"data-ssrc\": \"59.1.\" }))); }, Object.defineProperty(e, \"is\", { get: function () { return \"icon-external\"; }, enumerable: !0, configurable: !0 }), Object.defineProperty(e, \"style\", { get: function () { return \"icon-external{color:#a6b8d2;width:.8em;height:.8em;display:inline-block}icon-external svg{fill:currentColor}icon-external svg .new-tab__box{opacity:.5}icon-external svg .new-tab__arrow{-webkit-transition:transform .2s ease-out,fill .2s ease;transition:transform .2s ease-out,fill .2s ease;will-change:trasnform,fill}a:hover icon-external,icon-external:hover{color:#488aff}a:hover icon-external .new-tab__arrow,icon-external:hover .new-tab__arrow{-webkit-transform:translate(1px,-1px);transform:translate(1px,-1px)}\"; }, enumerable: !0, configurable: !0 }), e; }();\nexports.IconExternal = IconExternal;\n"
  },
  {
    "path": "content/js/stencil/cjs/es5/build/z7r5cewq.entry.js",
    "content": "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar ionic_site_components_core_js_1 = require(\"../ionic-site-components.core.js\");\nvar IonicButton = function () { function e() { this.color = \"default\", this.type = \"button\", this.disabled = !1; } return e.prototype.render = function () { return ionic_site_components_core_js_1.h(\"button\", this.disabled ? { class: this.color, type: this.type, disabled: !0 } : { class: this.color, type: this.type }, ionic_site_components_core_js_1.h(\"slot\", null)); }, Object.defineProperty(e, \"is\", { get: function () { return \"ionic-button\"; }, enumerable: !0, configurable: !0 }), Object.defineProperty(e, \"properties\", { get: function () { return { color: { type: String, attr: \"color\" }, disabled: { type: Boolean, attr: \"disabled\" }, type: { type: String, attr: \"type\" } }; }, enumerable: !0, configurable: !0 }), Object.defineProperty(e, \"style\", { get: function () { return \"ionic-button button{border-radius:4px;padding:11px 15px 9px;font-size:16px;font-weight:500;-webkit-box-shadow:0 1px 3px rgba(0,0,0,.1);box-shadow:0 1px 3px rgba(0,0,0,.1);border:0;outline:none;height:100%;-webkit-transition:background-color .2s,border-color .3s,color .3s,-webkit-box-shadow .3s;transition:background-color .2s,border-color .3s,color .3s,-webkit-box-shadow .3s;transition:background-color .2s,border-color .3s,box-shadow .3s,color .3s;transition:background-color .2s,border-color .3s,box-shadow .3s,color .3s,-webkit-box-shadow .3s}ionic-button button.default{background:#488aff;color:#fff}ionic-button button.default:hover{background:#629aff}ionic-button button.default:active{background:#2f7aff}ionic-button button.white{background:#fff;border-color:#e8ebf1;color:#488aff}ionic-button button.white:active{background:#fafafa}ionic-button button:hover{-webkit-box-shadow:0 2px 5px rgba(0,0,0,.12);box-shadow:0 2px 5px rgba(0,0,0,.12)}ionic-button button:active{-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.1);box-shadow:inset 0 1px 2px rgba(0,0,0,.1)}ionic-button button:disabled{background:#e8ebf1;color:#fff;-webkit-box-shadow:none;box-shadow:none}\"; }, enumerable: !0, configurable: !0 }), e; }(), EmailIcon = function () { return ionic_site_components_core_js_1.h(\"svg\", { width: \"20\", height: \"14\", viewBox: \"0 0 20 14\", fill: \"none\", xmlns: \"http://www.w3.org/2000/svg\" }, ionic_site_components_core_js_1.h(\"path\", { d: \"M19.8365 1.71514L14.6635 7.04323C14.625 7.08213 14.625 7.14046 14.6635 7.17935L18.2837 11.0782C18.5288 11.3261 18.5288 11.7248 18.2837 11.9727C18.1635 12.0942 18 12.1574 17.8413 12.1574C17.6827 12.1574 17.5192 12.0942 17.399 11.9727L13.7933 8.08844C13.7548 8.04954 13.6923 8.04954 13.6538 8.08844L12.774 8.99266C12.0385 9.74617 11.0625 10.1643 10.0144 10.1691C8.95192 10.174 7.94231 9.72187 7.19712 8.95863L6.35096 8.08844C6.3125 8.04954 6.25 8.04954 6.21154 8.08844L2.60577 11.9727C2.48558 12.0942 2.32212 12.1574 2.16346 12.1574C2.00481 12.1574 1.84135 12.0942 1.72115 11.9727C1.47596 11.7248 1.47596 11.3261 1.72115 11.0782L5.34135 7.17935C5.375 7.14046 5.375 7.08213 5.34135 7.04323L0.163462 1.71514C0.100962 1.65194 0 1.69569 0 1.7832V12.4443C0 13.2999 0.692308 13.9999 1.53846 13.9999H18.4615C19.3077 13.9999 20 13.2999 20 12.4443V1.7832C20 1.69569 19.8942 1.6568 19.8365 1.71514Z\", fill: \"#B2BECD\" }), ionic_site_components_core_js_1.h(\"path\", { d: \"M10.0013 8.90121C10.7128 8.90121 11.3811 8.61925 11.8811 8.10394L19.4244 0.340297C19.1599 0.126396 18.833 0 18.4724 0H1.53493C1.17435 0 0.842623 0.126396 0.583008 0.340297L8.12628 8.10394C8.62147 8.61438 9.28974 8.90121 10.0013 8.90121Z\", fill: \"#B2BECD\" })); }, IonicNewsletterSignup = function () { function e() { this.placeholder = \"Email address\", this.buttonText = \"Subscribe\", this.darkMode = !1, this.homepageMode = !1, this.arrowMode = !1, this.lg = !1, this.kind = \"default\", this.isLoading = !1, this.hasSubmitted = !1, this.email = null, this.hsFormIds = { default: \"76e5f69f-85fd-4579-afce-a1892d48bb32\", podcast: \"\" }; } return e.prototype.handleEmailChange = function (e) { this.email = e.target.value; }, e.prototype.handleSubmit = function (e) { var t = this; e.preventDefault(); var i = this.email; this.isLoading = !0; var o = new XMLHttpRequest; o.open(\"POST\", \"/api/v1/newsletter\"), o.setRequestHeader(\"Content-Type\", \"application/json;charset=UTF-8\"), o.onreadystatechange = function () { if (4 === o.readyState && 200 === o.status) {\n    t.isLoading = !1;\n    var e = JSON.parse(o.responseText);\n    t.hasSubmitted = e.ok, t.hubspotIdentify(i);\n} }, o.send(JSON.stringify({ email: this.email, podcast: \"podcast\" === this.kind })); }, e.prototype.hubspotIdentify = function (e) { var t = window._hsq = window._hsq || []; t.push([\"identify\", { email: e }]), t.push([\"trackEvent\", { id: \"Signed Up for Newsletter\", value: !0 }]); var i = new XMLHttpRequest, o = [\"https://api.hsforms.com/submissions/v3/integration/submit\", \"3776657\", \"76e5f69f-85fd-4579-afce-a1892d48bb32\"].join(\"/\"); i.open(\"POST\", o), i.setRequestHeader(\"Content-Type\", \"application/json;charset=UTF-8\"), i.onreadystatechange = function () { if (4 === i.readyState && 200 === i.status) {\n    var e = JSON.parse(i.responseText);\n    console.log(e);\n} }, i.send(JSON.stringify({ fields: [{ name: \"email\", value: this.email }], context: { hutk: document.cookie.match(/hubspotutk=(.*?);/)[1], pageUri: window.location.href, pageName: document.title } })); }, e.prototype.getFormClass = function () { var e = this.darkMode ? \"dark\" : \"\"; return this.arrowMode && (e += \" arrow\"), this.homepageMode && (e += \" homepage\"), this.lg && (e += \" lg\"), e; }, e.prototype.render = function () { var e = this; return ionic_site_components_core_js_1.h(\"form\", { onSubmit: function (t) { return e.handleSubmit(t); }, class: this.getFormClass() }, this.homepageMode ? ionic_site_components_core_js_1.h(EmailIcon, null) : \"\", ionic_site_components_core_js_1.h(\"input\", { name: \"email\", type: \"email\", value: this.email, onInput: function () { return e.handleEmailChange(event); }, disabled: this.isLoading, placeholder: this.placeholder, required: !0 }), ionic_site_components_core_js_1.h(\"ionic-button\", { color: this.darkMode ? \"white\" : \"default\", type: \"submit\", disabled: this.isLoading || this.hasSubmitted }, this.hasSubmitted ? \"Added!\" : this.arrowMode || this.homepageMode ? ionic_site_components_core_js_1.h(\"ion-icon\", { name: \"md-arrow-forward\" }) : this.buttonText)); }, Object.defineProperty(e, \"is\", { get: function () { return \"ionic-newsletter-signup\"; }, enumerable: !0, configurable: !0 }), Object.defineProperty(e, \"properties\", { get: function () { return { arrowMode: { type: Boolean, attr: \"arrow-mode\" }, buttonText: { type: String, attr: \"button-text\" }, darkMode: { type: Boolean, attr: \"dark-mode\" }, email: { state: !0 }, hasSubmitted: { state: !0 }, homepageMode: { type: Boolean, attr: \"homepage-mode\" }, isLoading: { state: !0 }, kind: { type: String, attr: \"kind\" }, lg: { type: Boolean, attr: \"lg\" }, placeholder: { type: String, attr: \"placeholder\" } }; }, enumerable: !0, configurable: !0 }), Object.defineProperty(e, \"style\", { get: function () { return \"ionic-newsletter-signup form{position:relative;display:-ms-flexbox;display:flex;border-collapse:separate;width:100%;height:40px}\\@media (max-width:991px){ionic-newsletter-signup form{max-width:calc(100% - 340px)}}\\@media (max-width:767px){ionic-newsletter-signup form{float:none;max-width:100%;margin-top:15px}}ionic-newsletter-signup form.dark input{color:#fff;-webkit-box-shadow:none;box-shadow:none}ionic-newsletter-signup form.dark input:hover{-webkit-box-shadow:0 1px 3px rgba(0,0,0,.15);box-shadow:0 1px 3px rgba(0,0,0,.15)}ionic-newsletter-signup form.dark input:focus{-webkit-box-shadow:0 1px 3px rgba(0,0,0,.1);box-shadow:0 1px 3px rgba(0,0,0,.1)}ionic-newsletter-signup form.dark input::-webkit-input-placeholder{color:#bbceef}ionic-newsletter-signup form.dark input:-ms-input-placeholder{color:#bbceef}ionic-newsletter-signup form.dark input::-ms-input-placeholder{color:#bbceef}ionic-newsletter-signup form.dark input::placeholder{color:#bbceef}ionic-newsletter-signup form.lg{height:48px}ionic-newsletter-signup form.lg input{padding:1px 17px 0;font-size:14px}ionic-newsletter-signup form.lg ionic-button button{padding:11px 12px}ionic-newsletter-signup form.arrow{border-radius:6px;-webkit-box-shadow:0 1px 3px rgba(0,16,44,.08),0 2px 4px rgba(0,16,44,.12);box-shadow:0 1px 3px rgba(0,16,44,.08),0 2px 4px rgba(0,16,44,.12);-webkit-transition:box-shadow .15s ease;transition:box-shadow .15s ease}ionic-newsletter-signup form.arrow:hover{-webkit-box-shadow:0 7px 14px rgba(0,16,44,.12),0 3px 6px rgba(0,16,44,.08);box-shadow:0 7px 14px rgba(0,16,44,.12),0 3px 6px rgba(0,16,44,.08)}ionic-newsletter-signup form.arrow input{border-radius:6px 0 0 6px;-webkit-box-shadow:none;box-shadow:none}ionic-newsletter-signup form.arrow input::-webkit-input-placeholder{color:#a8b0be;font-weight:400}ionic-newsletter-signup form.arrow input:-ms-input-placeholder{color:#a8b0be;font-weight:400}ionic-newsletter-signup form.arrow input::-ms-input-placeholder{color:#a8b0be;font-weight:400}ionic-newsletter-signup form.arrow input::placeholder{color:#a8b0be;font-weight:400}ionic-newsletter-signup form.arrow ionic-button button{background:#f0f5ff;color:#3880ff;font-size:23px;display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;border-radius:0 6px 6px 0}ionic-newsletter-signup form.arrow ionic-button button:hover{background:#ebf2ff}\\@media (max-width:991px){ionic-newsletter-signup form.arrow{max-width:100%}}ionic-newsletter-signup form.homepage{height:48px;border-radius:6px;background:#f8fafc;border:1px solid #e9edf3;-webkit-transition:border-color .2s,background-color .2s;transition:border-color .2s,background-color .2s}ionic-newsletter-signup form.homepage:hover{border-color:#73a6ff;background:#fff}ionic-newsletter-signup form.homepage svg{position:absolute;top:16px;left:16px}ionic-newsletter-signup form.homepage input{border-radius:6px 0 0 6px;-webkit-box-shadow:none;box-shadow:none;padding-left:46px}ionic-newsletter-signup form.homepage input::-webkit-input-placeholder{color:#a8b0be;font-weight:400}ionic-newsletter-signup form.homepage input:-ms-input-placeholder{color:#a8b0be;font-weight:400}ionic-newsletter-signup form.homepage input::-ms-input-placeholder{color:#a8b0be;font-weight:400}ionic-newsletter-signup form.homepage input::placeholder{color:#a8b0be;font-weight:400}ionic-newsletter-signup form.homepage ionic-button button{background:transparent;color:#7cabff;font-size:23px;display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-webkit-box-shadow:none;box-shadow:none;border-radius:0 6px 6px 0}ionic-newsletter-signup form.homepage ionic-button button:hover{color:#498aff;background:transparent}\\@media (max-width:991px){ionic-newsletter-signup form.homepage{max-width:100%}}ionic-newsletter-signup input{border:none;background:hsla(0,0%,100%,.2);border-radius:4px 0 0 4px;font-size:13px;color:#24282e;-webkit-box-shadow:none;box-shadow:none;font-weight:500;height:100%;outline:0;-ms-flex-positive:1;flex-grow:1;padding:0 16px 1px;-webkit-box-shadow:0 1px 3px rgba(0,0,0,.1);box-shadow:0 1px 3px rgba(0,0,0,.1);-webkit-transition:background .2s,box-shadow .2s;transition:background .2s,box-shadow .2s}ionic-newsletter-signup input:hover{-webkit-box-shadow:0 1px 3px rgba(0,0,0,.15);box-shadow:0 1px 3px rgba(0,0,0,.15)}ionic-newsletter-signup input:focus{-webkit-box-shadow:none;box-shadow:none;background:hsla(0,0%,100%,.25);-webkit-box-shadow:inset 0 0 2px rgba(0,0,0,.1);box-shadow:inset 0 0 2px rgba(0,0,0,.1)}ionic-newsletter-signup input::-webkit-input-placeholder{padding-left:0;color:#a1a9b6}ionic-newsletter-signup input:-ms-input-placeholder{padding-left:0;color:#a1a9b6}ionic-newsletter-signup input::-ms-input-placeholder{padding-left:0;color:#a1a9b6}ionic-newsletter-signup input::placeholder{padding-left:0;color:#a1a9b6}ionic-newsletter-signup ionic-button{height:100%}ionic-newsletter-signup ionic-button button{border-top-left-radius:0;border-bottom-left-radius:0;font-weight:500;font-size:14px;height:100%;padding:8px 9px 10px}\"; }, enumerable: !0, configurable: !0 }), e; }();\nexports.IonicButton = IonicButton;\nexports.IonicNewsletterSignup = IonicNewsletterSignup;\n"
  },
  {
    "path": "content/js/stencil/cjs/es5/build/z7r5cewq.sc.entry.js",
    "content": "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar ionic_site_components_core_js_1 = require(\"../ionic-site-components.core.js\");\nvar IonicButton = function () { function e() { this.color = \"default\", this.type = \"button\", this.disabled = !1; } return e.prototype.render = function () { return ionic_site_components_core_js_1.h(\"button\", this.disabled ? { class: this.color, type: this.type, disabled: !0 } : { class: this.color, type: this.type }, ionic_site_components_core_js_1.h(\"slot\", null)); }, Object.defineProperty(e, \"is\", { get: function () { return \"ionic-button\"; }, enumerable: !0, configurable: !0 }), Object.defineProperty(e, \"properties\", { get: function () { return { color: { type: String, attr: \"color\" }, disabled: { type: Boolean, attr: \"disabled\" }, type: { type: String, attr: \"type\" } }; }, enumerable: !0, configurable: !0 }), Object.defineProperty(e, \"style\", { get: function () { return \"ionic-button button{border-radius:4px;padding:11px 15px 9px;font-size:16px;font-weight:500;-webkit-box-shadow:0 1px 3px rgba(0,0,0,.1);box-shadow:0 1px 3px rgba(0,0,0,.1);border:0;outline:none;height:100%;-webkit-transition:background-color .2s,border-color .3s,color .3s,-webkit-box-shadow .3s;transition:background-color .2s,border-color .3s,color .3s,-webkit-box-shadow .3s;transition:background-color .2s,border-color .3s,box-shadow .3s,color .3s;transition:background-color .2s,border-color .3s,box-shadow .3s,color .3s,-webkit-box-shadow .3s}ionic-button button.default{background:#488aff;color:#fff}ionic-button button.default:hover{background:#629aff}ionic-button button.default:active{background:#2f7aff}ionic-button button.white{background:#fff;border-color:#e8ebf1;color:#488aff}ionic-button button.white:active{background:#fafafa}ionic-button button:hover{-webkit-box-shadow:0 2px 5px rgba(0,0,0,.12);box-shadow:0 2px 5px rgba(0,0,0,.12)}ionic-button button:active{-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.1);box-shadow:inset 0 1px 2px rgba(0,0,0,.1)}ionic-button button:disabled{background:#e8ebf1;color:#fff;-webkit-box-shadow:none;box-shadow:none}\"; }, enumerable: !0, configurable: !0 }), e; }(), EmailIcon = function () { return ionic_site_components_core_js_1.h(\"svg\", { width: \"20\", height: \"14\", viewBox: \"0 0 20 14\", fill: \"none\", xmlns: \"http://www.w3.org/2000/svg\" }, ionic_site_components_core_js_1.h(\"path\", { d: \"M19.8365 1.71514L14.6635 7.04323C14.625 7.08213 14.625 7.14046 14.6635 7.17935L18.2837 11.0782C18.5288 11.3261 18.5288 11.7248 18.2837 11.9727C18.1635 12.0942 18 12.1574 17.8413 12.1574C17.6827 12.1574 17.5192 12.0942 17.399 11.9727L13.7933 8.08844C13.7548 8.04954 13.6923 8.04954 13.6538 8.08844L12.774 8.99266C12.0385 9.74617 11.0625 10.1643 10.0144 10.1691C8.95192 10.174 7.94231 9.72187 7.19712 8.95863L6.35096 8.08844C6.3125 8.04954 6.25 8.04954 6.21154 8.08844L2.60577 11.9727C2.48558 12.0942 2.32212 12.1574 2.16346 12.1574C2.00481 12.1574 1.84135 12.0942 1.72115 11.9727C1.47596 11.7248 1.47596 11.3261 1.72115 11.0782L5.34135 7.17935C5.375 7.14046 5.375 7.08213 5.34135 7.04323L0.163462 1.71514C0.100962 1.65194 0 1.69569 0 1.7832V12.4443C0 13.2999 0.692308 13.9999 1.53846 13.9999H18.4615C19.3077 13.9999 20 13.2999 20 12.4443V1.7832C20 1.69569 19.8942 1.6568 19.8365 1.71514Z\", fill: \"#B2BECD\" }), ionic_site_components_core_js_1.h(\"path\", { d: \"M10.0013 8.90121C10.7128 8.90121 11.3811 8.61925 11.8811 8.10394L19.4244 0.340297C19.1599 0.126396 18.833 0 18.4724 0H1.53493C1.17435 0 0.842623 0.126396 0.583008 0.340297L8.12628 8.10394C8.62147 8.61438 9.28974 8.90121 10.0013 8.90121Z\", fill: \"#B2BECD\" })); }, IonicNewsletterSignup = function () { function e() { this.placeholder = \"Email address\", this.buttonText = \"Subscribe\", this.darkMode = !1, this.homepageMode = !1, this.arrowMode = !1, this.lg = !1, this.kind = \"default\", this.isLoading = !1, this.hasSubmitted = !1, this.email = null, this.hsFormIds = { default: \"76e5f69f-85fd-4579-afce-a1892d48bb32\", podcast: \"\" }; } return e.prototype.handleEmailChange = function (e) { this.email = e.target.value; }, e.prototype.handleSubmit = function (e) { var t = this; e.preventDefault(); var i = this.email; this.isLoading = !0; var o = new XMLHttpRequest; o.open(\"POST\", \"/api/v1/newsletter\"), o.setRequestHeader(\"Content-Type\", \"application/json;charset=UTF-8\"), o.onreadystatechange = function () { if (4 === o.readyState && 200 === o.status) {\n    t.isLoading = !1;\n    var e = JSON.parse(o.responseText);\n    t.hasSubmitted = e.ok, t.hubspotIdentify(i);\n} }, o.send(JSON.stringify({ email: this.email, podcast: \"podcast\" === this.kind })); }, e.prototype.hubspotIdentify = function (e) { var t = window._hsq = window._hsq || []; t.push([\"identify\", { email: e }]), t.push([\"trackEvent\", { id: \"Signed Up for Newsletter\", value: !0 }]); var i = new XMLHttpRequest, o = [\"https://api.hsforms.com/submissions/v3/integration/submit\", \"3776657\", \"76e5f69f-85fd-4579-afce-a1892d48bb32\"].join(\"/\"); i.open(\"POST\", o), i.setRequestHeader(\"Content-Type\", \"application/json;charset=UTF-8\"), i.onreadystatechange = function () { if (4 === i.readyState && 200 === i.status) {\n    var e = JSON.parse(i.responseText);\n    console.log(e);\n} }, i.send(JSON.stringify({ fields: [{ name: \"email\", value: this.email }], context: { hutk: document.cookie.match(/hubspotutk=(.*?);/)[1], pageUri: window.location.href, pageName: document.title } })); }, e.prototype.getFormClass = function () { var e = this.darkMode ? \"dark\" : \"\"; return this.arrowMode && (e += \" arrow\"), this.homepageMode && (e += \" homepage\"), this.lg && (e += \" lg\"), e; }, e.prototype.render = function () { var e = this; return ionic_site_components_core_js_1.h(\"form\", { onSubmit: function (t) { return e.handleSubmit(t); }, class: this.getFormClass() }, this.homepageMode ? ionic_site_components_core_js_1.h(EmailIcon, null) : \"\", ionic_site_components_core_js_1.h(\"input\", { name: \"email\", type: \"email\", value: this.email, onInput: function () { return e.handleEmailChange(event); }, disabled: this.isLoading, placeholder: this.placeholder, required: !0 }), ionic_site_components_core_js_1.h(\"ionic-button\", { color: this.darkMode ? \"white\" : \"default\", type: \"submit\", disabled: this.isLoading || this.hasSubmitted }, this.hasSubmitted ? \"Added!\" : this.arrowMode || this.homepageMode ? ionic_site_components_core_js_1.h(\"ion-icon\", { name: \"md-arrow-forward\" }) : this.buttonText)); }, Object.defineProperty(e, \"is\", { get: function () { return \"ionic-newsletter-signup\"; }, enumerable: !0, configurable: !0 }), Object.defineProperty(e, \"properties\", { get: function () { return { arrowMode: { type: Boolean, attr: \"arrow-mode\" }, buttonText: { type: String, attr: \"button-text\" }, darkMode: { type: Boolean, attr: \"dark-mode\" }, email: { state: !0 }, hasSubmitted: { state: !0 }, homepageMode: { type: Boolean, attr: \"homepage-mode\" }, isLoading: { state: !0 }, kind: { type: String, attr: \"kind\" }, lg: { type: Boolean, attr: \"lg\" }, placeholder: { type: String, attr: \"placeholder\" } }; }, enumerable: !0, configurable: !0 }), Object.defineProperty(e, \"style\", { get: function () { return \"ionic-newsletter-signup form{position:relative;display:-ms-flexbox;display:flex;border-collapse:separate;width:100%;height:40px}\\@media (max-width:991px){ionic-newsletter-signup form{max-width:calc(100% - 340px)}}\\@media (max-width:767px){ionic-newsletter-signup form{float:none;max-width:100%;margin-top:15px}}ionic-newsletter-signup form.dark input{color:#fff;-webkit-box-shadow:none;box-shadow:none}ionic-newsletter-signup form.dark input:hover{-webkit-box-shadow:0 1px 3px rgba(0,0,0,.15);box-shadow:0 1px 3px rgba(0,0,0,.15)}ionic-newsletter-signup form.dark input:focus{-webkit-box-shadow:0 1px 3px rgba(0,0,0,.1);box-shadow:0 1px 3px rgba(0,0,0,.1)}ionic-newsletter-signup form.dark input::-webkit-input-placeholder{color:#bbceef}ionic-newsletter-signup form.dark input:-ms-input-placeholder{color:#bbceef}ionic-newsletter-signup form.dark input::-ms-input-placeholder{color:#bbceef}ionic-newsletter-signup form.dark input::placeholder{color:#bbceef}ionic-newsletter-signup form.lg{height:48px}ionic-newsletter-signup form.lg input{padding:1px 17px 0;font-size:14px}ionic-newsletter-signup form.lg ionic-button button{padding:11px 12px}ionic-newsletter-signup form.arrow{border-radius:6px;-webkit-box-shadow:0 1px 3px rgba(0,16,44,.08),0 2px 4px rgba(0,16,44,.12);box-shadow:0 1px 3px rgba(0,16,44,.08),0 2px 4px rgba(0,16,44,.12);-webkit-transition:box-shadow .15s ease;transition:box-shadow .15s ease}ionic-newsletter-signup form.arrow:hover{-webkit-box-shadow:0 7px 14px rgba(0,16,44,.12),0 3px 6px rgba(0,16,44,.08);box-shadow:0 7px 14px rgba(0,16,44,.12),0 3px 6px rgba(0,16,44,.08)}ionic-newsletter-signup form.arrow input{border-radius:6px 0 0 6px;-webkit-box-shadow:none;box-shadow:none}ionic-newsletter-signup form.arrow input::-webkit-input-placeholder{color:#a8b0be;font-weight:400}ionic-newsletter-signup form.arrow input:-ms-input-placeholder{color:#a8b0be;font-weight:400}ionic-newsletter-signup form.arrow input::-ms-input-placeholder{color:#a8b0be;font-weight:400}ionic-newsletter-signup form.arrow input::placeholder{color:#a8b0be;font-weight:400}ionic-newsletter-signup form.arrow ionic-button button{background:#f0f5ff;color:#3880ff;font-size:23px;display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;border-radius:0 6px 6px 0}ionic-newsletter-signup form.arrow ionic-button button:hover{background:#ebf2ff}\\@media (max-width:991px){ionic-newsletter-signup form.arrow{max-width:100%}}ionic-newsletter-signup form.homepage{height:48px;border-radius:6px;background:#f8fafc;border:1px solid #e9edf3;-webkit-transition:border-color .2s,background-color .2s;transition:border-color .2s,background-color .2s}ionic-newsletter-signup form.homepage:hover{border-color:#73a6ff;background:#fff}ionic-newsletter-signup form.homepage svg{position:absolute;top:16px;left:16px}ionic-newsletter-signup form.homepage input{border-radius:6px 0 0 6px;-webkit-box-shadow:none;box-shadow:none;padding-left:46px}ionic-newsletter-signup form.homepage input::-webkit-input-placeholder{color:#a8b0be;font-weight:400}ionic-newsletter-signup form.homepage input:-ms-input-placeholder{color:#a8b0be;font-weight:400}ionic-newsletter-signup form.homepage input::-ms-input-placeholder{color:#a8b0be;font-weight:400}ionic-newsletter-signup form.homepage input::placeholder{color:#a8b0be;font-weight:400}ionic-newsletter-signup form.homepage ionic-button button{background:transparent;color:#7cabff;font-size:23px;display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-webkit-box-shadow:none;box-shadow:none;border-radius:0 6px 6px 0}ionic-newsletter-signup form.homepage ionic-button button:hover{color:#498aff;background:transparent}\\@media (max-width:991px){ionic-newsletter-signup form.homepage{max-width:100%}}ionic-newsletter-signup input{border:none;background:hsla(0,0%,100%,.2);border-radius:4px 0 0 4px;font-size:13px;color:#24282e;-webkit-box-shadow:none;box-shadow:none;font-weight:500;height:100%;outline:0;-ms-flex-positive:1;flex-grow:1;padding:0 16px 1px;-webkit-box-shadow:0 1px 3px rgba(0,0,0,.1);box-shadow:0 1px 3px rgba(0,0,0,.1);-webkit-transition:background .2s,box-shadow .2s;transition:background .2s,box-shadow .2s}ionic-newsletter-signup input:hover{-webkit-box-shadow:0 1px 3px rgba(0,0,0,.15);box-shadow:0 1px 3px rgba(0,0,0,.15)}ionic-newsletter-signup input:focus{-webkit-box-shadow:none;box-shadow:none;background:hsla(0,0%,100%,.25);-webkit-box-shadow:inset 0 0 2px rgba(0,0,0,.1);box-shadow:inset 0 0 2px rgba(0,0,0,.1)}ionic-newsletter-signup input::-webkit-input-placeholder{padding-left:0;color:#a1a9b6}ionic-newsletter-signup input:-ms-input-placeholder{padding-left:0;color:#a1a9b6}ionic-newsletter-signup input::-ms-input-placeholder{padding-left:0;color:#a1a9b6}ionic-newsletter-signup input::placeholder{padding-left:0;color:#a1a9b6}ionic-newsletter-signup ionic-button{height:100%}ionic-newsletter-signup ionic-button button{border-top-left-radius:0;border-bottom-left-radius:0;font-weight:500;font-size:14px;height:100%;padding:8px 9px 10px}\"; }, enumerable: !0, configurable: !0 }), e; }();\nexports.IonicButton = IonicButton;\nexports.IonicNewsletterSignup = IonicNewsletterSignup;\n"
  },
  {
    "path": "content/js/stencil/cjs/es5/index.js",
    "content": "\"use strict\";\nfunction __export(m) {\n    for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];\n}\nObject.defineProperty(exports, \"__esModule\", { value: true });\n// IonicSiteComponents: ES Module\n__export(require(\"./build/index.js\"));\n"
  },
  {
    "path": "content/js/stencil/cjs/es5/ionic-site-components.components.js",
    "content": "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n// IonicSiteComponents: Host Data, ES Module/es5 Target\nexports.COMPONENTS = [[\"icon-external\", \"uyiaiqzf\", 1], [\"ion-icon\", \"bubpozqb\", 1, [[\"ariaLabel\", 2, 1, \"aria-label\", 2], [\"color\", 1, 0, 1, 2], [\"doc\", 4, 0, 0, 0, \"document\"], [\"el\", 64], [\"flipRtl\", 1, 0, \"flip-rtl\", 4], [\"icon\", 1, 0, 1, 2], [\"ios\", 1, 0, 1, 2], [\"isServer\", 4, 0, 0, 0, \"isServer\"], [\"isVisible\", 16], [\"lazy\", 1, 0, 1, 4], [\"md\", 1, 0, 1, 2], [\"mode\", 1, 0, 1, 2], [\"name\", 1, 0, 1, 2], [\"resourcesUrl\", 4, 0, 0, 0, \"resourcesUrl\"], [\"size\", 1, 0, 1, 2], [\"src\", 1, 0, 1, 2], [\"svgContent\", 16], [\"win\", 4, 0, 0, 0, \"window\"]], 1], [\"ionic-appflow-activator\", \"hclgi8iu\", 1, [[\"$circles\", 16], [\"$lis\", 16], [\"active\", 16], [\"el\", 64], [\"screenshots\", 16]]], [\"ionic-bar-chart\", \"lo9utgpp\", 1, [[\"color\", 1, 0, 1, 2], [\"data\", 1, 0, 1, 2]]], [\"ionic-button\", \"z7r5cewq\", 1, [[\"color\", 1, 0, 1, 2], [\"disabled\", 1, 0, 1, 4], [\"type\", 1, 0, 1, 2]]], [\"ionic-newsletter-signup\", \"z7r5cewq\", 1, [[\"arrowMode\", 1, 0, \"arrow-mode\", 4], [\"buttonText\", 1, 0, \"button-text\", 2], [\"darkMode\", 1, 0, \"dark-mode\", 4], [\"email\", 16], [\"hasSubmitted\", 16], [\"homepageMode\", 1, 0, \"homepage-mode\", 4], [\"isLoading\", 16], [\"kind\", 1, 0, 1, 2], [\"lg\", 1, 0, 1, 4], [\"placeholder\", 1, 0, 1, 2]]], [\"ionic-quick-signup\", \"raorzqti\", 1, [[\"buttonColor\", 1, 0, \"button-color\", 2], [\"showPricingNotice\", 1, 0, \"show-pricing-notice\", 4], [\"transparentInput\", 1, 0, \"transparent-input\", 4]]], [\"ionic-search\", \"ehteibio\", 1, [[\"active\", 16], [\"dragStyles\", 16], [\"el\", 64], [\"mobile\", 1, 0, 1, 4], [\"pending\", 16], [\"query\", 16], [\"results\", 16]]], [\"ionic-slider\", \"uy47nvwg\", 1, [[\"current\", 16], [\"status\", 16], [\"ticker\", 16]]], [\"ionic-snap-bar\", \"cetridhp\", 1, [[\"active\", 16]]], [\"ionic-toggle\", \"cz7vrrja\", 1, [[\"el\", 64]], 1, [[\"toggleSelected\", \"selectionChanged\"]]], [\"ionic-toggle-button\", \"m0trkizf\", 1, [[\"deselect\", 32], [\"select\", 32], [\"selected\", 16], [\"tab\", 1, 0, 1, 2], [\"title\", 1, 0, 1, 2]], 1], [\"ionic-toggle-tab\", \"nrj8jyt7\", 0, [[\"hidden\", 16], [\"hide\", 32], [\"show\", 32], [\"tab\", 1, 0, 1, 2]], 1]];\n"
  },
  {
    "path": "content/js/stencil/cjs/es5/ionic-site-components.core.js",
    "content": "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n/*!\n * IonicSiteComponents: Core, es5\n * Built with http://stenciljs.com\n */\nfunction n(n, t) { return \"sc-\" + n.t + (t && t !== c ? \"-\" + t : \"\"); }\nfunction t(n, t) { return n + (t ? \"-h\" : \"-s\"); }\nfunction e(n, t) { for (var e, r, i = null, o = !1, u = !1, f = arguments.length; f-- > 2;)\n    A.push(arguments[f]); for (; A.length > 0;) {\n    var c = A.pop();\n    if (c && void 0 !== c.pop)\n        for (f = c.length; f--;)\n            A.push(c[f]);\n    else\n        \"boolean\" == typeof c && (c = null), (u = \"function\" != typeof n) && (null == c ? c = \"\" : \"number\" == typeof c ? c = String(c) : \"string\" != typeof c && (u = !1)), u && o ? i[i.length - 1].vtext += c : null === i ? i = [u ? { vtext: c } : c] : i.push(u ? { vtext: c } : c), o = u;\n} if (null != t) {\n    if (t.className && (t.class = t.className), \"object\" == typeof t.class) {\n        for (f in t.class)\n            t.class[f] && A.push(f);\n        t.class = A.join(\" \"), A.length = 0;\n    }\n    null != t.key && (e = t.key), null != t.name && (r = t.name);\n} return \"function\" == typeof n ? n(t, i || [], E) : { vtag: n, vchildren: i, vtext: void 0, vattrs: t, vkey: e, vname: r, i: void 0, o: !1 }; }\nexports.h = e;\nfunction r(n, t, e) { void 0 === e && (e = {}); var r = Array.isArray(t) ? t : [t], i = n.document, o = e.hydratedCssClass || \"hydrated\", u = e.exclude; u && (r = r.filter(function (n) { return -1 === u.indexOf(n[0]); })); var c = r.map(function (n) { return n[0]; }); if (c.length > 0) {\n    var a = i.createElement(\"style\");\n    a.innerHTML = c.join() + \"{visibility:hidden}.\" + o + \"{visibility:inherit}\", a.setAttribute(\"data-styles\", \"\"), i.head.insertBefore(a, i.head.firstChild);\n} var s = e.namespace || \"IonicSiteComponents\"; return q || (q = !0, function l(n, t, e) { (n[\"s-apps\"] = n[\"s-apps\"] || []).push(t), e.componentOnReady || (e.componentOnReady = function t() { function e(t) { if (r.nodeName.indexOf(\"-\") > 0) {\n    for (var e = n[\"s-apps\"], i = 0, o = 0; o < e.length; o++)\n        if (n[e[o]].componentOnReady) {\n            if (n[e[o]].componentOnReady(r, t))\n                return;\n            i++;\n        }\n    if (i < e.length)\n        return void (n[\"s-cr\"] = n[\"s-cr\"] || []).push([r, t]);\n} t(null); } var r = this; return n.Promise ? new n.Promise(e) : { then: e }; }); }(n, s, n.HTMLElement.prototype)), applyPolyfills(n).then(function () { function t() { r.forEach(function (t) { var e; !function r(n) { return /\\{\\s*\\[native code\\]\\s*\\}/.test(\"\" + n); }(n.customElements.define) ? (e = function (t) { return n.HTMLElement.call(this, t); }).prototype = Object.create(n.HTMLElement.prototype, { constructor: { value: e, configurable: !0 } }) : e = new Function(\"w\", \"return class extends w.HTMLElement{}\")(n), H[s].u(function i(n) { var t = C(n), e = t.s, r = d(n[0]); return t.s = function (n) { var t = n.mode, i = n.scoped; return function o(n, t, e) { return Promise.resolve().then(function () { return require(\"./build/\" + n + (t ? \".sc\" : \"\") + \".entry.js\"); }).then(function (n) { return n[e]; }); }(\"string\" == typeof e ? e : e[t], i, r); }, t; }(t), e); }); } if (!H[s]) {\n    var u = {}, c = e.resourcesUrl || \"./\";\n    f(s, u, n, i, c, o), H[s] = F(s, u, n, i, c, o, r);\n} if (window.customStyleShim)\n    return H[s].l = window.customStyleShim, H[s].l.initShim().then(t); t(); }); }\nexports.defineCustomElement = r;\nthis && this.v;\nvar i = this && this.p || function (n, t, e, r) { return new (e || (e = Promise))(function (i, o) { function u(n) { try {\n    c(r.next(n));\n}\ncatch (n) {\n    o(n);\n} } function f(n) { try {\n    c(r.throw(n));\n}\ncatch (n) {\n    o(n);\n} } function c(n) { n.done ? i(n.value) : new e(function (t) { t(n.value); }).then(u, f); } c((r = r.apply(n, t || [])).next()); }); }, o = this && this.m || function (n, t) { function e(e) { return function (u) { return function c(e) { if (r)\n    throw new TypeError(\"Generator is already executing.\"); for (; f;)\n    try {\n        if (r = 1, i && (o = 2 & e[0] ? i.return : e[0] ? i.throw || ((o = i.return) && o.call(i), 0) : i.next) && !(o = o.call(i, e[1])).done)\n            return o;\n        switch (i = 0, o && (e = [2 & e[0], o.value]), e[0]) {\n            case 0:\n            case 1:\n                o = e;\n                break;\n            case 4: return f.label++, { value: e[1], done: !1 };\n            case 5:\n                f.label++, i = e[1], e = [0];\n                continue;\n            case 7:\n                e = f.g.pop(), f.M.pop();\n                continue;\n            default:\n                if (!(o = (o = f.M).length > 0 && o[o.length - 1]) && (6 === e[0] || 2 === e[0])) {\n                    f = 0;\n                    continue;\n                }\n                if (3 === e[0] && (!o || e[1] > o[0] && e[1] < o[3])) {\n                    f.label = e[1];\n                    break;\n                }\n                if (6 === e[0] && f.label < o[1]) {\n                    f.label = o[1], o = e;\n                    break;\n                }\n                if (o && f.label < o[2]) {\n                    f.label = o[2], f.g.push(e);\n                    break;\n                }\n                o[2] && f.g.pop(), f.M.pop();\n                continue;\n        }\n        e = t.call(n, f);\n    }\n    catch (n) {\n        e = [6, n], i = 0;\n    }\n    finally {\n        r = o = 0;\n    } if (5 & e[0])\n    throw e[1]; return { value: e[0] ? e[1] : void 0, done: !0 }; }([e, u]); }; } var r, i, o, u, f = { label: 0, j: function () { if (1 & o[0])\n        throw o[1]; return o[1]; }, M: [], g: [] }; return u = { next: e(0), throw: e(1), return: e(2) }, \"function\" == typeof Symbol && (u[Symbol.iterator] = function () { return this; }), u; }, u = this, f = function () { };\nfunction applyPolyfills(n) { n.k = function () { function t() { var n = setTimeout; return function () { return n(e, 1); }; } function e() { for (var n = 0; n < b; n += 2)\n    (0, O[n])(O[n + 1]), O[n] = void 0, O[n + 1] = void 0; b = 0; } function r(n, t) { var e = this, r = new this.constructor(o); void 0 === r[_] && h(r); var i = e.A; if (i) {\n    var u = arguments[i - 1];\n    M(function () { return d(i, r, u, e.C); });\n}\nelse\n    v(e, r, n, t); return r; } function i(n) { if (n && \"object\" == typeof n && n.constructor === this)\n    return n; var t = new this(o); return c(t, n), t; } function o() { } function u(n) { try {\n    return n.then;\n}\ncatch (n) {\n    return P.error = n, P;\n} } function f(n, t, e) { t.constructor === n.constructor && e === r && t.constructor.resolve === i ? function (n, t) { t.A === W ? s(n, t.C) : t.A === x ? l(n, t.C) : v(t, void 0, function (t) { return c(n, t); }, function (t) { return l(n, t); }); }(n, t) : e === P ? (l(n, P.error), P.error = null) : void 0 === e ? s(n, t) : \"function\" == typeof e ? function (n, t, e) { M(function (n) { var r = !1, i = function (n, t, e, r) { try {\n    n.call(t, e, r);\n}\ncatch (n) {\n    return n;\n} }(e, t, function (e) { r || (r = !0, t !== e ? c(n, e) : s(n, e)); }, function (t) { r || (r = !0, l(n, t)); }, n.O); !r && i && (r = !0, l(n, i)); }, n); }(n, t, e) : s(n, t); } function c(n, t) { if (n === t)\n    l(n, new TypeError(\"cannot resolve promise w/ itself\"));\nelse {\n    var e = typeof t;\n    null === t || \"object\" !== e && \"function\" !== e ? s(n, t) : f(n, t, u(t));\n} } function a(n) { n.S && n.S(n.C), p(n); } function s(n, t) { n.A === T && (n.C = t, n.A = W, 0 !== n._.length && M(p, n)); } function l(n, t) { n.A === T && (n.A = x, n.C = t, M(a, n)); } function v(n, t, e, r) { var i = n._, o = i.length; n.S = null, i[o] = t, i[o + W] = e, i[o + x] = r, 0 === o && n.A && M(p, n); } function p(n) { var t = n._, e = n.A; if (0 !== t.length) {\n    for (var r, i, o = n.C, u = 0; u < t.length; u += 3)\n        r = t[u], i = t[u + e], r ? d(e, r, i, o) : i(o);\n    n._.length = 0;\n} } function d(n, t, e, r) { var i = \"function\" == typeof e, o = void 0, u = void 0, f = void 0, a = void 0; if (i) {\n    try {\n        o = e(r);\n    }\n    catch (n) {\n        P.error = n, o = P;\n    }\n    if (o === P ? (a = !0, u = o.error, o.error = null) : f = !0, t === o)\n        return void l(t, new TypeError(\"Cannot return same promise\"));\n}\nelse\n    o = r, f = !0; t.A === T && (i && f ? c(t, o) : a ? l(t, u) : n === W ? s(t, o) : n === x && l(t, o)); } function h(n) { n[_] = N++, n.A = void 0, n.C = void 0, n._ = []; } var y, w = Array.isArray ? Array.isArray : function (n) { return \"[object Array]\" === Object.prototype.toString.call(n); }, b = 0, m = void 0, g = void 0, M = function (n, t) { O[b] = n, O[b + 1] = t, 2 === (b += 2) && (g ? g(e) : S()); }, j = (y = void 0 !== n ? n : void 0) || {}, k = j.MutationObserver || j.WebKitMutationObserver; j = \"undefined\" == typeof self; var $, A, E, C = \"undefined\" != typeof Uint8ClampedArray && \"undefined\" != typeof importScripts && \"undefined\" != typeof MessageChannel, O = Array(1e3), S = void 0; S = k ? ($ = 0, A = new k(e), E = document.createTextNode(\"\"), A.observe(E, { characterData: !0 }), function () { E.data = $ = ++$ % 2; }) : C ? function () { var n = new MessageChannel; return n.port1.onmessage = e, function () { return n.port2.postMessage(0); }; }() : void 0 === y && \"function\" == typeof require ? function () { try {\n    var n = Function(\"return this\")().require(\"vertx\");\n    return void 0 !== (m = n.T || n.W) ? function () { m(e); } : t();\n}\ncatch (n) {\n    return t();\n} }() : t(); var _ = Math.random().toString(36).substring(2), T = void 0, W = 1, x = 2, P = { error: null }, N = 0, R = function () { function n(n, t) { this.P = n, this.N = new n(o), this.N[_] || h(this.N), w(t) ? (this.R = this.length = t.length, this.C = Array(this.length), 0 === this.length ? s(this.N, this.C) : (this.length = this.length || 0, this.L(t), 0 === this.R && s(this.N, this.C))) : l(this.N, Error(\"Array Methods must be provided an Array\")); } return n.prototype.L = function (n) { for (var t = 0; this.A === T && t < n.length; t++)\n    this.D(n[t], t); }, n.prototype.D = function (n, t) { var e = this.P, c = e.resolve; c === i ? (c = u(n)) === r && n.A !== T ? this.F(n.A, t, n.C) : \"function\" != typeof c ? (this.R--, this.C[t] = n) : e === L ? (f(e = new e(o), n, c), this.H(e, t)) : this.H(new e(function (t) { return t(n); }), t) : this.H(c(n), t); }, n.prototype.F = function (n, t, e) { var r = this.N; r.A === T && (this.R--, n === x ? l(r, e) : this.C[t] = e), 0 === this.R && s(r, this.C); }, n.prototype.H = function (n, t) { var e = this; v(n, void 0, function (n) { return e.F(W, t, n); }, function (n) { return e.F(x, t, n); }); }, n; }(), L = function () { function n(t) { if (this[_] = N++, this.C = this.A = void 0, this._ = [], o !== t) {\n    if (\"function\" != typeof t)\n        throw new TypeError(\"Must pass a resolver fn as 1st arg\");\n    if (!(this instanceof n))\n        throw new TypeError(\"Failed to construct 'Promise': Use the 'new' operator.\");\n    !function (n, t) { try {\n        t(function (t) { c(n, t); }, function (t) { l(n, t); });\n    }\n    catch (t) {\n        l(n, t);\n    } }(this, t);\n} } return n.prototype.catch = function (n) { return this.then(null, n); }, n.prototype.finally = function (n) { var t = this.constructor; return this.then(function (e) { return t.resolve(n()).then(function () { return e; }); }, function (e) { return t.resolve(n()).then(function () { throw e; }); }); }, n; }(); return L.prototype.then = r, L.all = function (n) { return new R(this, n).N; }, L.race = function (n) { var t = this; return w(n) ? new t(function (e, r) { for (var i = n.length, o = 0; o < i; o++)\n    t.resolve(n[o]).then(e, r); }) : new t(function (n, t) { return t(new TypeError(\"Must pass array to race\")); }); }, L.resolve = i, L.reject = function (n) { var t = new this(o); return l(t, n), t; }, L.q = function (n) { g = n; }, L.U = function (n) { M = n; }, L.B = M, L.I = function () { var n = void 0; if (\"undefined\" != typeof global)\n    n = global;\nelse if (\"undefined\" != typeof self)\n    n = self;\nelse\n    try {\n        n = Function(\"return this\")();\n    }\n    catch (n) {\n        throw Error(\"polyfill failed\");\n    } var t = n.Promise; if (t) {\n    var e = null;\n    try {\n        e = Object.prototype.toString.call(t.resolve());\n    }\n    catch (n) { }\n    if (\"[object Promise]\" === e && !t.cast)\n        return;\n} n.Promise = L; }, L.Promise = L, L.I(), L; }(); var t = []; return n.customElements && (!n.Element || n.Element.prototype.closest && n.Element.prototype.matches && n.Element.prototype.remove) || t.push(Promise.resolve().then(function () { return require(\"./polyfills/dom.js\"); })), \"function\" == typeof Object.assign && Object.entries || t.push(Promise.resolve().then(function () { return require(\"./polyfills/object.js\"); })), Array.prototype.find && Array.prototype.includes || t.push(Promise.resolve().then(function () { return require(\"./polyfills/array.js\"); })), String.prototype.startsWith && String.prototype.endsWith || t.push(Promise.resolve().then(function () { return require(\"./polyfills/string.js\"); })), n.fetch || t.push(Promise.resolve().then(function () { return require(\"./polyfills/fetch.js\"); })), \"undefined\" != typeof WeakMap && n.CSS && n.CSS.supports && n.CSS.supports(\"color\", \"var(--c)\") || t.push(Promise.resolve().then(function () { return require(\"./polyfills/css-shim.js\"); })), function e() { try {\n    var n = new URL(\"b\", \"http://a\");\n    return n.pathname = \"c%20d\", \"http://a/c%20d\" === n.href && n.searchParams;\n}\ncatch (n) {\n    return !1;\n} } || t.push(Promise.resolve().then(function () { return require(\"./polyfills/url.js\"); })), Promise.all(t).then(function (t) { t.forEach(function (t) { try {\n    t.applyPolyfill(n, n.document);\n}\ncatch (n) {\n    console.error(n);\n} }); }); }\nvar c = \"$\", a = {}, s = { enter: 13, escape: 27, space: 32, tab: 9, left: 37, up: 38, right: 39, down: 40 }, l = function (t, e, r, i) { var o = r.t + c, u = r[o]; if ((2 === r.G || 1 === r.G && !t.Z.Y) && (i[\"s-sc\"] = u ? n(r, i.mode) : n(r)), u) {\n    var f = e.J.head;\n    if (e.Y)\n        if (1 === r.G)\n            f = i.shadowRoot;\n        else {\n            var a = i.getRootNode();\n            a.host && (f = a);\n        }\n    var s = t.K.get(f);\n    if (s || t.K.set(f, s = {}), !s[o]) {\n        var l = void 0;\n        if (t.l ? l = t.l.createHostStyle(i, o, u) : ((l = e.V(\"style\")).innerHTML = u, s[o] = !0), l) {\n            var v = f.querySelectorAll(\"[data-styles]\");\n            e.X(f, l, v.length && v[v.length - 1].nextSibling || f.firstChild);\n        }\n    }\n} }, v = function (n) { return null != n; }, p = function (n) { return n.toLowerCase(); }, d = function (n) { return p(n).split(\"-\").map(function (n) { return n.charAt(0).toUpperCase() + n.slice(1); }).join(\"\"); }, h = function () { }, y = function (n, t, e, r, i) { void 0 === r && (r = \"boolean\" == typeof e), i = t !== (t = t.replace(/^xlink\\:?/, \"\")), null == e || r && (!e || \"false\" === e) ? i ? n.removeAttributeNS(w, p(t)) : n.removeAttribute(t) : \"function\" != typeof e && (e = r ? \"\" : e.toString(), i ? n.setAttributeNS(w, p(t), e) : n.setAttribute(t, e)); }, w = \"http://www.w3.org/1999/xlink\", b = function (n, t, e, r, i, o, u) { if (\"class\" !== e || o)\n    if (\"style\" === e) {\n        for (var f in r)\n            i && null != i[f] || (/-/.test(f) ? t.style.removeProperty(f) : t.style[f] = \"\");\n        for (var f in i)\n            r && i[f] === r[f] || (/-/.test(f) ? t.style.setProperty(f, i[f]) : t.style[f] = i[f]);\n    }\n    else if (\"o\" !== e[0] || \"n\" !== e[1] || !/[A-Z]/.test(e[2]) || e in t)\n        if (\"list\" !== e && \"type\" !== e && !o && (e in t || -1 !== [\"object\", \"function\"].indexOf(typeof i) && null !== i)) {\n            var c = n.nn(t);\n            c && c.tn && c.tn[e] ? (g(t, e, i), u && c.tn[e].en && y(t, c.tn[e].rn, i, 4 === c.tn[e].in)) : \"ref\" !== e && (g(t, e, null == i ? \"\" : i), null != i && !1 !== i || n.Z.on(t, e));\n        }\n        else\n            null != i && \"key\" !== e ? y(t, e, i) : (o || n.Z.un(t, e) && (null == i || !1 === i)) && n.Z.on(t, e);\n    else\n        e = p(e) in t ? p(e.substring(2)) : p(e[2]) + e.substring(3), i ? i !== r && n.Z.fn(t, e, i, 0) : n.Z.cn(t, e, 0);\nelse if (r !== i) {\n    var a = m(r), s = m(i), l = a.filter(function (n) { return !s.includes(n); }), v = m(t.className).filter(function (n) { return !l.includes(n); }), d = s.filter(function (n) { return !a.includes(n) && !v.includes(n); });\n    v.push.apply(v, d), t.className = v.join(\" \");\n} }, m = function (n) { return null == n || \"\" === n ? [] : n.trim().split(/\\s+/); }, g = function (n, t, e) { try {\n    n[t] = e;\n}\ncatch (n) { } }, M = function (n, t, e, r, i) { var o = 11 === e.i.nodeType && e.i.host ? e.i.host : e.i, u = t && t.vattrs || a, f = e.vattrs || a; for (i in u)\n    f && null != f[i] || null == u[i] || b(n, o, i, u[i], void 0, r, e.o); for (i in f)\n    i in u && f[i] === (\"value\" === i || \"checked\" === i ? o[i] : u[i]) || b(n, o, i, u[i], f[i], r, e.o); }, j = !1, k = function (n, t) { n && (n.vattrs && n.vattrs.ref && n.vattrs.ref(t ? null : n.i), n.vchildren && n.vchildren.forEach(function (n) { k(n, t); })); }, $ = function (n, t) { var e = 0, r = !1, i = function () { return t.performance.now(); }, o = !1 !== n.asyncQueue, u = Promise.resolve(), f = [], c = [], a = [], s = [], l = function (t) { return function (e) { t.push(e), r || (r = !0, n.raf(d)); }; }, v = function (n) { for (var t = 0; t < n.length; t++)\n    try {\n        n[t](i());\n    }\n    catch (n) {\n        console.error(n);\n    } n.length = 0; }, p = function (n, t) { for (var e, r = 0; r < n.length && (e = i()) < t;)\n    try {\n        n[r++](e);\n    }\n    catch (n) {\n        console.error(n);\n    } r === n.length ? n.length = 0 : 0 !== r && n.splice(0, r); }, d = function () { e++, v(c); var t = o ? i() + 7 * Math.ceil(e * (1 / 22)) : Infinity; p(a, t), p(s, t), a.length > 0 && (s.push.apply(s, a), a.length = 0), (r = c.length + a.length + s.length > 0) ? n.raf(d) : e = 0; }; return n.raf || (n.raf = t.requestAnimationFrame.bind(t)), { tick: function (n) { f.push(n), 1 === f.length && u.then(function () { return v(f); }); }, read: l(c), write: l(a) }; }, A = [], E = { forEach: function (n, t) { return n.forEach(t); }, map: function (n, t) { return n.map(t); } }, C = function (n, t, e) { var r = n[0], i = n[1], o = n[3], u = n[4], f = n[5], c = { color: { rn: \"color\" } }; if (o)\n    for (t = 0; t < o.length; t++)\n        c[(e = o[t])[0]] = { an: e[1], en: !!e[2], rn: \"string\" == typeof e[3] ? e[3] : e[3] ? e[0] : 0, in: e[4] }; return { t: r, s: i, tn: Object.assign({}, c), G: u, sn: f ? f.map(O) : void 0 }; }, O = function (n) { return { ln: n[0], vn: n[1], pn: !!n[2], dn: !!n[3], hn: !!n[4] }; }, S = function (n, t) { return v(t) && \"object\" != typeof t && \"function\" != typeof t ? n === Boolean || 4 === n ? \"false\" !== t && (\"\" === t || !!t) : n === Number || 8 === n ? parseFloat(t) : n === String || 2 === n ? t.toString() : t : t; }, _ = function (n, t, e) { n.yn.add(t), n.wn.has(t) || (n.wn.set(t, !0), n.bn ? n.queue.write(function () { return T(n, t, e); }) : n.queue.tick(function () { return T(n, t, e); })); }, T = function (n, r, f, c, a, s) { return i(u, void 0, void 0, function () { var i, u; return o(this, function (o) { switch (o.label) {\n    case 0:\n        if (n.wn.delete(r), n.mn.has(r))\n            return [3, 12];\n        if (a = n.gn.get(r))\n            return [3, 6];\n        if ((s = n.Mn.get(r)) && !s[\"s-rn\"])\n            return (s[\"s-rc\"] = s[\"s-rc\"] || []).push(function () { T(n, r, f); }), [2];\n        if (!(a = R(n, r, n.jn.get(r), f)))\n            return [3, 5];\n        o.label = 1;\n    case 1: return o.M.push([1, 4, , 5]), a.componentWillLoad ? [4, a.componentWillLoad()] : [3, 3];\n    case 2: o.j(), o.label = 3;\n    case 3: return [3, 5];\n    case 4: return i = o.j(), n.kn(i, 3, r), [3, 5];\n    case 5:\n    case 6: return [3, 11];\n    case 7: return o.M.push([7, 10, , 11]), a.componentWillUpdate ? [4, a.componentWillUpdate()] : [3, 9];\n    case 8: o.j(), o.label = 9;\n    case 9: return [3, 11];\n    case 10: return u = o.j(), n.kn(u, 5, r), [3, 11];\n    case 11: (function (n, r, i, o) { try {\n        var u, f = r.$n.host, c = r.$n.encapsulation, a = \"shadow\" === c && n.Z.Y, s = i;\n        if (u = function (n, t, e) { return n && Object.keys(n).forEach(function (r) { n[r].reflectToAttr && ((e = e || {})[r] = t[r]); }), e; }(r.$n.properties, o), a && (s = i.shadowRoot), !i[\"s-rn\"]) {\n            n.An(n, n.Z, r, i);\n            var l = i[\"s-sc\"];\n            l && (n.Z.En(i, t(l, !0)), \"scoped\" === c && n.Z.En(i, t(l)));\n        }\n        if (o.render || o.hostData || f || u) {\n            n.Cn = !0;\n            var v = o.render && o.render(), p = void 0;\n            p = o.hostData && o.hostData(), u && (p = p ? Object.assign(p, u) : u), n.Cn = !1;\n            var d = e(null, p, v), h = n.On.get(i) || {};\n            h.i = s, d.o = !0, n.On.set(i, n.render(i, h, d, a, c));\n        }\n        n.l && n.l.updateHost(i), i[\"s-rn\"] = !0, i[\"s-rc\"] && (i[\"s-rc\"].forEach(function (n) { return n(); }), i[\"s-rc\"] = null);\n    }\n    catch (t) {\n        n.Cn = !1, n.kn(t, 8, i, !0);\n    } })(n, n.nn(r), r, a), r[\"s-init\"](), o.label = 12;\n    case 12: return [2];\n} }); }); }, W = function (n, t, e, r, i, o, u) { (u = n.Sn.get(t)) || n.Sn.set(t, u = {}); var f = u[e]; if (r !== f && (u[e] = r, o = n.gn.get(t))) {\n    var c = u[N + e];\n    if (c)\n        for (var a = 0; a < c.length; a++)\n            try {\n                o[c[a]].call(o, r, f, e);\n            }\n            catch (n) {\n                console.error(n);\n            }\n    !n.Cn && t[\"s-rn\"] && _(n, t, i);\n} }, x = function (n, t, e) { Object.defineProperty(n, t, { configurable: !0, value: e }); }, P = function (n, t, e, r) { Object.defineProperty(n, t, { configurable: !0, get: e, set: r }); }, N = \"wc-\", R = function (n, t, e, r, i, o, u, f) { try {\n    i = new (o = n.nn(t).$n), function (n, t, e, r, i, o) { n._n.set(r, e), n.Sn.has(e) || n.Sn.set(e, {}), Object.entries(Object.assign({ color: { type: String } }, t.properties, { mode: { type: String } })).forEach(function (t) { var u = t[0], f = t[1]; (function (n, t, e, r, i, o, u, f, c) { if (t.type || t.state) {\n        var a = n.Sn.get(e);\n        t.state || (!t.attr || void 0 !== a[i] && \"\" !== a[i] || (f = o && o.Tn) && v(c = f[t.attr]) && (a[i] = S(t.type, c)), e.hasOwnProperty(i) && (void 0 === a[i] && (a[i] = S(t.type, e[i])), \"mode\" !== i && delete e[i])), r.hasOwnProperty(i) && void 0 === a[i] && (a[i] = r[i]), t.watchCallbacks && (a[N + i] = t.watchCallbacks.slice()), P(r, i, function s(t) { return (t = n.Sn.get(n._n.get(this))) && t[i]; }, function l(e, r) { (r = n._n.get(this)) && (t.state || t.mutable) && W(n, r, i, e, u); });\n    }\n    else if (t.elementRef)\n        x(r, i, e);\n    else if (t.method)\n        x(e, i, r[i].bind(r));\n    else if (t.context) {\n        var p = n.Wn(t.context);\n        void 0 !== p && x(r, i, p.getContext && p.getContext(e) || p);\n    } })(n, f, e, r, u, i, o); }); }(n, o, t, i, e, r), function c(n, t, e) { if (t) {\n        var r = n._n.get(e);\n        t.forEach(function (t) { e[t.method] = { emit: function (e) { return n.xn(r, t.name, { bubbles: t.bubbles, composed: t.composed, cancelable: t.cancelable, detail: e }); } }; });\n    } }(n, o.events, i);\n    try {\n        if (u = n.Pn.get(t)) {\n            for (f = 0; f < u.length; f += 2)\n                i[u[f]](u[f + 1]);\n            n.Pn.delete(t);\n        }\n    }\n    catch (e) {\n        n.kn(e, 2, t);\n    }\n}\ncatch (e) {\n    i = {}, n.kn(e, 7, t, !0);\n} return n.gn.set(t, i), i; }, L = function (n, t) { for (var e = 0; e < t.childNodes.length; e++) {\n    var r = t.childNodes[e];\n    if (1 === r.nodeType) {\n        if (n.nn(r) && !n.Nn.has(r))\n            return !1;\n        if (!L(n, r))\n            return !1;\n    }\n} return !0; }, D = function (n, t, e, r, i, o) { if (n.yn.delete(t), (i = n.Mn.get(t)) && ((r = i[\"s-ld\"]) && ((e = r.indexOf(t)) > -1 && r.splice(e, 1), r.length || i[\"s-init\"] && i[\"s-init\"]()), n.Mn.delete(t)), n.Rn.length && !n.yn.size)\n    for (; o = n.Rn.shift();)\n        o(); }, F = function (n, t, r, i, o, u) { var f = r.performance, a = { html: {} }, d = r[n] = r[n] || {}, y = function (n, t, e) { var r = new WeakMap, i = { J: e, Y: !!e.documentElement.attachShadow, Ln: !1, Dn: function (n) { return n.nodeType; }, V: function (n) { return e.createElement(n); }, Fn: function (n, t) { return e.createElementNS(n, t); }, Hn: function (n) { return e.createTextNode(n); }, qn: function (n) { return e.createComment(n); }, X: function (n, t, e) { return n.insertBefore(t, e); }, Un: function (n) { return n.remove(); }, Bn: function (n, t) { return n.appendChild(t); }, En: function (n, t) { if (n.classList)\n        n.classList.add(t);\n    else if (\"svg\" === n.nodeName.toLowerCase()) {\n        var e = n.getAttribute(\"class\") || \"\";\n        e.split(\" \").includes(t) || (e += \" \" + t), n.setAttribute(\"class\", e.trim());\n    } }, In: function (n) { return n.childNodes; }, Gn: function (n) { return n.parentNode; }, Qn: function (n) { return n.nextSibling; }, Yn: function (n) { return n.previousSibling; }, Zn: function (n) { return p(n.nodeName); }, zn: function (n) { return n.textContent; }, Jn: function (n, t) { return n.textContent = t; }, Kn: function (n, t) { return n.getAttribute(t); }, Vn: function (n, t, e) { return n.setAttribute(t, e); }, on: function (n, t) { return n.removeAttribute(t); }, un: function (n, t) { return n.hasAttribute(t); }, Xn: function (t) { return t.getAttribute(\"mode\") || (n.Context || {}).mode; }, nt: function (n, r) { return \"child\" === r ? n.firstElementChild : \"parent\" === r ? i.tt(n) : \"body\" === r ? e.body : \"document\" === r ? e : \"window\" === r ? t : n; }, fn: function (t, e, o, u, f, c, a, l, v, p) { var d = t, h = o, y = r.get(t); p = e + u, y && y[p] && y[p](), \"string\" == typeof a ? d = i.nt(t, a) : \"object\" == typeof a ? d = a : (v = e.split(\":\")).length > 1 && (d = i.nt(t, v[0]), e = v[1]), d && ((v = e.split(\".\")).length > 1 && (e = v[0], h = function (n) { n.keyCode === s[v[1]] && o(n); }), l = i.Ln ? { capture: !!f, passive: !!c } : !!f, n.ael(d, e, h, l), y || r.set(t, y = {}), y[p] = function () { d && n.rel(d, e, h, l), y[p] = null; }); }, cn: function (n, t, e, i) { (i = r.get(n)) && (t ? i[t + e] && i[t + e]() : Object.keys(i).forEach(function (n) { i[n] && i[n](); })); }, et: function (n, e, r, i) { return i = new t.CustomEvent(e, r), n && n.dispatchEvent(i), i; }, tt: function (n, t) { return (t = i.Gn(n)) && 11 === i.Dn(t) ? t.host : t; }, rt: function (n, t, e, r) { return n.setAttributeNS(t, e, r); }, it: function (n, t) { return n.attachShadow(t); } }; \"function\" != typeof t.CustomEvent && (t.CustomEvent = function (n, t, r) { return t = t || {}, (r = e.createEvent(\"CustomEvent\")).initCustomEvent(n, t.bubbles, t.cancelable, t.detail), r; }, t.CustomEvent.prototype = t.Event.prototype), n.ael || (n.ael = function (n, t, e, r) { return n.addEventListener(t, e, r); }, n.rel = function (n, t, e, r) { return n.removeEventListener(t, e, r); }); try {\n    t.addEventListener(\"e\", null, Object.defineProperty({}, \"passive\", { get: function () { return i.Ln = !0; } }));\n}\ncatch (n) { } return i; }(d, r, i), w = y.J.documentElement, b = r[\"s-defined\"] = r[\"s-defined\"] || {}, m = { Z: y, u: function (n, t) { r.customElements.get(n.t) || (function (n, t, e, r, i) { if (e.connectedCallback = function () { (function (n, t, e) { n.ot.has(e) || (n.ot.set(e, !0), function r(n, t) { var e = n.nn(t); e.sn && e.sn.forEach(function (e) { e.pn || n.Z.fn(t, e.ln, function r(n, t, e, i) { return function (r) { (i = n.gn.get(t)) ? i[e](r) : ((i = n.Pn.get(t) || []).push(e, r), n.Pn.set(t, i)); }; }(n, t, e.vn), 1, e.hn, e.dn); }); }(n, e)), n.mn.delete(e), n.Nn.has(e) || (n.ut = !0, n.yn.add(e), n.Nn.set(e, !0), function (n, t, e) { for (e = t; e = n.Z.tt(e);)\n        if (n.ft(e)) {\n            n.ct.has(t) || (n.Mn.set(t, e), (e[\"s-ld\"] = e[\"s-ld\"] || []).push(t));\n            break;\n        } }(n, e), n.queue.tick(function () { n.jn.set(e, function (n, t, e, r, i) { if (e.mode || (e.mode = n.Xn(e)), e[\"s-cr\"] || n.Kn(e, \"ssrv\") || n.Y && 1 === t.G || (e[\"s-cr\"] = n.Hn(\"\"), e[\"s-cr\"][\"s-cn\"] = !0, n.X(e, e[\"s-cr\"], n.In(e)[0])), !n.Y && 1 === t.G)\n        try {\n            !window.HTMLElement || \"shadowRoot\" in window.HTMLElement.prototype || (e.shadowRoot = e);\n        }\n        catch (n) { } return 1 === t.G && n.Y && !e.shadowRoot && n.it(e, { mode: \"open\" }), r = { Tn: {} }, t.tn && Object.keys(t.tn).forEach(function (o) { (i = t.tn[o].rn) && (r.Tn[i] = n.Kn(e, i)); }), r; }(n.Z, t, e)), n.at(t, e); })); })(n, t, this); }, e.disconnectedCallback = function () { (function (n, t) { if (!n.st && function (n, t) { for (; t;) {\n        if (!n.Gn(t))\n            return 9 !== n.Dn(t);\n        t = n.Gn(t);\n    } }(n.Z, t)) {\n        n.mn.set(t, !0), D(n, t), k(n.On.get(t), !0);\n        var e = n.gn.get(t);\n        e && e.componentDidUnload && e.componentDidUnload(), n.Z.cn(t), n.ot.delete(t), n.l && n.l.removeHost(t), [n.Mn, n.lt, n.jn].forEach(function (n) { return n.delete(t); });\n    } })(n, this); }, e[\"s-init\"] = function () { (function (n, t, e, r, i, o, u) { if (L(n, t) && (i = n.gn.get(t)) && !n.mn.has(t) && (!t[\"s-ld\"] || !t[\"s-ld\"].length)) {\n        n.ct.set(t, !0), (u = n.vt.has(t)) || (n.vt.set(t, !0), t[\"s-ld\"] = void 0, n.Z.En(t, e));\n        try {\n            k(n.On.get(t)), (o = n.lt.get(t)) && (o.forEach(function (n) { return n(t); }), n.lt.delete(t)), !u && i.componentDidLoad && i.componentDidLoad();\n        }\n        catch (e) {\n            n.kn(e, 4, t);\n        }\n        D(n, t);\n    } })(n, this, r); }, e.forceUpdate = function () { _(n, this, i); }, t.tn) {\n        var o = Object.entries(t.tn), u = {};\n        o.forEach(function (n) { var t = n[0], e = n[1].rn; e && (u[e] = t); }), u = Object.assign({}, u), e.attributeChangedCallback = function (n, t, e) { (function r(n, t, e, i) { var o = n[p(e)]; o && (t[o] = (null !== i || \"boolean\" != typeof t[o]) && i); })(u, this, n, e); }, function (n, t, e, r) { o.forEach(function (t) { var i = t[0], o = t[1], u = o.an; 3 & u ? P(e, i, function t() { return (n.Sn.get(this) || {})[i]; }, function t(e) { W(n, this, i, S(o.in, e), r); }) : 32 === u && x(e, i, h); }); }(n, 0, e, i);\n    } }(m, a[n.t] = n, t.prototype, u, f), t.observedAttributes = Object.values(n.tn).map(function (n) { return n.rn; }).filter(function (n) { return !!n; }), r.customElements.define(n.t, t)); }, nn: function (n) { return a[y.Zn(n)]; }, Wn: function (n) { return t[n]; }, isClient: !0, ft: function (n) { return !(!b[y.Zn(n)] && !m.nn(n)); }, kn: function (n, t, e) { return console.error(n, t, e && e.tagName); }, queue: t.queue = $(d, r), at: function (n, t) { var e = !y.Y, r = { mode: t.mode, scoped: e }; n.s(r).then(function (e) { try {\n        n.$n = e, function r(n, t, e, i, o) { if (i) {\n            var u = t.t + (o || c);\n            t[u] || (t[u] = i);\n        } }(0, n, n.G, e.style, e.styleMode);\n    }\n    catch (t) {\n        console.error(t), n.$n = function i() { };\n    } _(m, t, f); }); }, Cn: !1, bn: !1, st: !1, An: l, Mn: new WeakMap, K: new WeakMap, Nn: new WeakMap, ot: new WeakMap, vt: new WeakMap, ct: new WeakMap, _n: new WeakMap, jn: new WeakMap, gn: new WeakMap, mn: new WeakMap, wn: new WeakMap, lt: new WeakMap, Pn: new WeakMap, On: new WeakMap, Sn: new WeakMap, yn: new Set, Rn: [] }; return t.isServer = t.isPrerender = !(t.isClient = !0), t.window = r, t.location = r.location, t.document = i, t.resourcesUrl = t.publicPath = o, t.enableListener = function (n, t, e, r, i) { return function o(n, t, e, r, i, u) { if (t) {\n    var f = n._n.get(t), c = n.nn(f);\n    if (c && c.sn)\n        if (r) {\n            var a = c.sn.find(function (n) { return n.ln === e; });\n            a && n.Z.fn(f, e, function (n) { return t[a.vn](n); }, 1, a.hn, void 0 === u ? a.dn : !!u, i);\n        }\n        else\n            n.Z.cn(f, e, 1);\n} }(m, n, t, e, r, i); }, m.xn = t.emit = function (n, e, r) { return y.et(n, t.eventNameFn ? t.eventNameFn(e) : e, r); }, d.h = e, d.Context = t, d.onReady = function () { return new Promise(function (n) { return m.queue.write(function () { return m.yn.size ? m.Rn.push(n) : n(); }); }); }, m.render = function (n, t) { var e, r, i, o, u, f, c, a = function (i, l, p, d, h, y, w, b, m) { if (b = l.vchildren[p], e || (o = !0, \"slot\" === b.vtag && (r && t.En(d, r + \"-s\"), b.vchildren ? b.pt = !0 : b.dt = !0)), v(b.vtext))\n    b.i = t.Hn(b.vtext);\nelse if (b.dt)\n    b.i = t.Hn(\"\");\nelse {\n    if (y = b.i = j || \"svg\" === b.vtag ? t.Fn(\"http://www.w3.org/2000/svg\", b.vtag) : t.V(b.pt ? \"slot-fb\" : b.vtag), n.ft(y) && n.ct.delete(c), j = \"svg\" === b.vtag || \"foreignObject\" !== b.vtag && j, M(n, null, b, j), v(r) && y[\"s-si\"] !== r && t.En(y, y[\"s-si\"] = r), b.vchildren)\n        for (h = 0; h < b.vchildren.length; ++h)\n            (w = a(i, b, h, y)) && t.Bn(y, w);\n    \"svg\" === b.vtag && (j = !1);\n} return b.i[\"s-hn\"] = f, (b.pt || b.dt) && (b.i[\"s-sr\"] = !0, b.i[\"s-cr\"] = u, b.i[\"s-sn\"] = b.vname || \"\", (m = i && i.vchildren && i.vchildren[p]) && m.vtag === b.vtag && i.i && s(i.i)), b.i; }, s = function (e, r, i, u) { n.st = !0; var c = t.In(e); for (i = c.length - 1; i >= 0; i--)\n    (u = c[i])[\"s-hn\"] !== f && u[\"s-ol\"] && (t.Un(u), t.X(y(u), u, h(u)), t.Un(u[\"s-ol\"]), u[\"s-ol\"] = null, o = !0), r && s(u, r); n.st = !1; }, l = function (n, e, r, i, o, u, c, s) { var l = n[\"s-cr\"]; for ((c = l && t.Gn(l) || n).shadowRoot && t.Zn(c) === f && (c = c.shadowRoot); o <= u; ++o)\n    i[o] && (s = v(i[o].vtext) ? t.Hn(i[o].vtext) : a(null, r, o, n)) && (i[o].i = s, t.X(c, s, h(e))); }, p = function (n, e, r, o) { for (; e <= r; ++e)\n    v(n[e]) && (o = n[e].i, i = !0, o[\"s-ol\"] ? t.Un(o[\"s-ol\"]) : s(o, !0), t.Un(o)); }, d = function (n, t) { return n.vtag === t.vtag && n.vkey === t.vkey && (\"slot\" !== n.vtag || n.vname === t.vname); }, h = function (n) { return n && n[\"s-ol\"] ? n[\"s-ol\"] : n; }, y = function (n) { return t.Gn(n[\"s-ol\"] ? n[\"s-ol\"] : n); }, w = function (e, r, i) { var o = r.i = e.i, u = e.vchildren, f = r.vchildren; j = r.i && v(t.tt(r.i)) && void 0 !== r.i.ownerSVGElement, j = \"svg\" === r.vtag || \"foreignObject\" !== r.vtag && j, v(r.vtext) ? (i = o[\"s-cr\"]) ? t.Jn(t.Gn(i), r.vtext) : e.vtext !== r.vtext && t.Jn(o, r.vtext) : (\"slot\" !== r.vtag && M(n, e, r, j), v(u) && v(f) ? function (n, e, r, i, o, u, f, c) { for (var b = 0, m = 0, g = e.length - 1, M = e[0], j = e[g], k = i.length - 1, $ = i[0], A = i[k]; b <= g && m <= k;)\n    if (null == M)\n        M = e[++b];\n    else if (null == j)\n        j = e[--g];\n    else if (null == $)\n        $ = i[++m];\n    else if (null == A)\n        A = i[--k];\n    else if (d(M, $))\n        w(M, $), M = e[++b], $ = i[++m];\n    else if (d(j, A))\n        w(j, A), j = e[--g], A = i[--k];\n    else if (d(M, A))\n        \"slot\" !== M.vtag && \"slot\" !== A.vtag || s(t.Gn(M.i)), w(M, A), t.X(n, M.i, t.Qn(j.i)), M = e[++b], A = i[--k];\n    else if (d(j, $))\n        \"slot\" !== M.vtag && \"slot\" !== A.vtag || s(t.Gn(j.i)), w(j, $), t.X(n, j.i, M.i), j = e[--g], $ = i[++m];\n    else {\n        for (o = null, u = b; u <= g; ++u)\n            if (e[u] && v(e[u].vkey) && e[u].vkey === $.vkey) {\n                o = u;\n                break;\n            }\n        v(o) ? ((c = e[o]).vtag !== $.vtag ? f = a(e && e[m], r, o, n) : (w(c, $), e[o] = void 0, f = c.i), $ = i[++m]) : (f = a(e && e[m], r, m, n), $ = i[++m]), f && t.X(y(M.i), f, h(M.i));\n    } b > g ? l(n, null == i[k + 1] ? null : i[k + 1].i, r, i, m, k) : m > k && p(e, b, g); }(o, u, r, f) : v(f) ? (v(e.vtext) && t.Jn(o, \"\"), l(o, null, r, f, 0, f.length - 1)) : v(u) && p(u, 0, u.length - 1)), j && \"svg\" === r.vtag && (j = !1); }, b = function (n, e, r, i, o, u, f, c) { for (i = 0, o = (r = t.In(n)).length; i < o; i++)\n    if (e = r[i], 1 === t.Dn(e)) {\n        if (e[\"s-sr\"])\n            for (f = e[\"s-sn\"], e.hidden = !1, u = 0; u < o; u++)\n                if (r[u][\"s-hn\"] !== e[\"s-hn\"])\n                    if (c = t.Dn(r[u]), \"\" !== f) {\n                        if (1 === c && f === t.Kn(r[u], \"slot\")) {\n                            e.hidden = !0;\n                            break;\n                        }\n                    }\n                    else if (1 === c || 3 === c && \"\" !== t.zn(r[u]).trim()) {\n                        e.hidden = !0;\n                        break;\n                    }\n        b(e);\n    } }, m = [], g = function (n, e, r, o, u, f, c, a, s, l) { for (u = 0, f = (e = t.In(n)).length; u < f; u++) {\n    if ((r = e[u])[\"s-sr\"] && (o = r[\"s-cr\"]))\n        for (a = t.In(t.Gn(o)), s = r[\"s-sn\"], c = a.length - 1; c >= 0; c--)\n            (o = a[c])[\"s-cn\"] || o[\"s-nr\"] || o[\"s-hn\"] === r[\"s-hn\"] || ((3 === (l = t.Dn(o)) || 8 === l) && \"\" === s || 1 === l && null === t.Kn(o, \"slot\") && \"\" === s || 1 === l && t.Kn(o, \"slot\") === s) && (m.some(function (n) { return n.ht === o; }) || (i = !0, o[\"s-sn\"] = s, m.push({ yt: r, ht: o })));\n    1 === t.Dn(r) && g(r);\n} }; return function (a, s, l, v, p, d, h, y, M, j, k, $) { if (c = a, f = t.Zn(c), u = c[\"s-cr\"], e = v, r = c[\"s-sc\"], o = i = !1, w(s, l), o) {\n    for (g(l.i), h = 0; h < m.length; h++)\n        (y = m[h]).ht[\"s-ol\"] || ((M = t.Hn(\"\"))[\"s-nr\"] = y.ht, t.X(t.Gn(y.ht), y.ht[\"s-ol\"] = M, y.ht));\n    for (n.st = !0, h = 0; h < m.length; h++) {\n        for (y = m[h], k = t.Gn(y.yt), $ = t.Qn(y.yt), M = y.ht[\"s-ol\"]; M = t.Yn(M);)\n            if ((j = M[\"s-nr\"]) && j && j[\"s-sn\"] === y.ht[\"s-sn\"] && k === t.Gn(j) && (j = t.Qn(j)) && j && !j[\"s-nr\"]) {\n                $ = j;\n                break;\n            }\n        (!$ && k !== t.Gn(y.ht) || t.Qn(y.ht) !== $) && y.ht !== $ && (t.Un(y.ht), t.X(k, y.ht, $));\n    }\n    n.st = !1;\n} return i && b(l.i), m.length = 0, l; }; }(m, y), w[\"s-ld\"] = [], w[\"s-rn\"] = !0, w[\"s-init\"] = function () { m.ct.set(w, d.loaded = m.bn = !0), y.et(r, \"appload\", { detail: { namespace: n } }); }, function (n, t, e, r, i, o) { if (t.componentOnReady = function (t, e) { if (!t.nodeName.includes(\"-\"))\n    return e(null), !1; var r = n.nn(t); if (r)\n    if (n.ct.has(t))\n        e(t);\n    else {\n        var i = n.lt.get(t) || [];\n        i.push(e), n.lt.set(t, i);\n    } return !!r; }, i) {\n    for (o = i.length - 1; o >= 0; o--)\n        t.componentOnReady(i[o][0], i[o][1]) && i.splice(o, 1);\n    for (o = 0; o < r.length; o++)\n        if (!e[r[o]].componentOnReady)\n            return;\n    for (o = 0; o < i.length; o++)\n        i[o][1](null);\n    i.length = 0;\n} }(m, d, r, r[\"s-apps\"], r[\"s-cr\"]), d.initialized = !0, m; }, H = {}, q = !1;\n"
  },
  {
    "path": "content/js/stencil/cjs/es5/ionic-site-components.define.js",
    "content": "\"use strict\";\n// IonicSiteComponents: Custom Elements Define Library, ES Module/es5 Target\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar ionic_site_components_core_js_1 = require(\"./ionic-site-components.core.js\");\nvar ionic_site_components_components_js_1 = require(\"./ionic-site-components.components.js\");\nfunction defineCustomElements(win, opts) {\n    return ionic_site_components_core_js_1.defineCustomElement(win, ionic_site_components_components_js_1.COMPONENTS, opts);\n}\nexports.defineCustomElements = defineCustomElements;\n"
  },
  {
    "path": "content/js/stencil/cjs/es5/polyfills/array.js",
    "content": "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nfunction applyPolyfill(window, document) {\n    Array.prototype.fill || Object.defineProperty(Array.prototype, \"fill\", { value: function (t) { var r, e, i, n, o, a, l; if (null == this)\n            throw new TypeError(\"this is null or not defined\"); for (e = (r = Object(this)).length >>> 0, n = (i = arguments[1] >> 0) < 0 ? Math.max(e + i, 0) : Math.min(i, e), l = (a = void 0 === (o = arguments[2]) ? e : o >> 0) < 0 ? Math.max(e + a, 0) : Math.min(a, e); n < l;)\n            r[n] = t, n++; return r; } });\n    /*!\n    Array.prototype.find\n    */\n    Array.prototype.find || Object.defineProperty(Array.prototype, \"find\", { writable: !0, configurable: !0, value: function (c, e) { if (null == this)\n            throw new TypeError('\"this\" is null or not defined'); var b = Object(this), f = b.length >>> 0; if (\"function\" !== typeof c)\n            throw new TypeError(\"predicate must be a function\"); for (var a = 0; a < f;) {\n            var d = b[a];\n            if (c.call(e, d, a, b))\n                return d;\n            a++;\n        } } });\n    /*!\n    Array.prototype.findIndex\n    */\n    Array.prototype.findIndex || Object.defineProperty(Array.prototype, \"findIndex\", { value: function (c, d) { if (null == this)\n            throw new TypeError('\"this\" is null or not defined'); var b = Object(this), e = b.length >>> 0; if (\"function\" !== typeof c)\n            throw new TypeError(\"predicate must be a function\"); for (var a = 0; a < e;) {\n            if (c.call(d, b[a], a, b))\n                return a;\n            a++;\n        } return -1; }, configurable: !0, writable: !0 });\n    /*!\n    Array.from\n    */\n    Array.from || (Array.from = function () {\n        var l = Object.prototype.toString, h = function (c) { return \"function\" === typeof c || \"[object Function]\" === l.call(c); }, m = Math.pow(2, 53) - 1;\n        return function (c) {\n            var k = Object(c);\n            if (null == c)\n                throw new TypeError(\"Array.from requires an array-like object - not null or undefined\");\n            var d = 1 < arguments.length ? arguments[1] : void 0, f;\n            if (\"undefined\" !== typeof d) {\n                if (!h(d))\n                    throw new TypeError(\"Array.from: when provided, the second argument must be a function\");\n                2 < arguments.length && (f = arguments[2]);\n            }\n            var a = Number(k.length);\n            a = isNaN(a) ? 0 : 0 !== a && isFinite(a) ? (0 < a ? 1 : -1) * Math.floor(Math.abs(a)) : a;\n            a = Math.min(Math.max(a, 0), m);\n            for (var g = h(this) ? Object(new this(a)) : Array(a), b = 0, e; b < a;)\n                e = k[b], g[b] = d ? \"undefined\" === typeof f ? d(e, b) : d.call(f, e, b) : e, b += 1;\n            g.length = a;\n            return g;\n        };\n    }());\n    /*!\n    Array.prototype.includes\n    */\n    Array.prototype.includes || Object.defineProperty(Array.prototype, \"includes\", { writable: !0, configurable: !0, value: function (r, e) { if (null == this)\n            throw new TypeError('\"this\" is null or not defined'); var t = Object(this), n = t.length >>> 0; if (0 === n)\n            return !1; var i, o, a = 0 | e, u = Math.max(0 <= a ? a : n - Math.abs(a), 0); for (; u < n;) {\n            if ((i = t[u]) === (o = r) || \"number\" == typeof i && \"number\" == typeof o && isNaN(i) && isNaN(o))\n                return !0;\n            u++;\n        } return !1; } });\n}\nexports.applyPolyfill = applyPolyfill;\n"
  },
  {
    "path": "content/js/stencil/cjs/es5/polyfills/css-shim.js",
    "content": "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nfunction applyPolyfill(window, document) {\n    (function (e) {\n        function d(a, b) { function c(a) { if (!this || this.constructor !== c)\n            return new c(a); this._keys = []; this._values = []; this._itp = []; this.objectOnly = b; a && v.call(this, a); } b || w(a, \"size\", { get: x }); a.constructor = c; c.prototype = a; return c; }\n        function v(a) { this.add ? a.forEach(this.add, this) : a.forEach(function (a) { this.set(a[0], a[1]); }, this); }\n        function f(a) { this.has(a) && (this._keys.splice(c, 1), this._values.splice(c, 1), this._itp.forEach(function (a) { c < a[0] && a[0]--; })); return -1 < c; }\n        function m(a) {\n            return this.has(a) ? this._values[c] :\n                void 0;\n        }\n        function n(a, b) { if (this.objectOnly && b !== Object(b))\n            throw new TypeError(\"Invalid value used as weak collection key\"); if (b != b || 0 === b)\n            for (c = a.length; c-- && !y(a[c], b);)\n                ;\n        else\n            c = a.indexOf(b); return -1 < c; }\n        function p(a) { return n.call(this, this._values, a); }\n        function q(a) { return n.call(this, this._keys, a); }\n        function r(a, b) { this.has(a) ? this._values[c] = b : this._values[this._keys.push(a) - 1] = b; return this; }\n        function t(a) { this.has(a) || this._values.push(a); return this; }\n        function h() {\n            (this._keys || 0).length = this._values.length =\n                0;\n        }\n        function z() { return k(this._itp, this._keys); }\n        function l() { return k(this._itp, this._values); }\n        function A() { return k(this._itp, this._keys, this._values); }\n        function B() { return k(this._itp, this._values, this._values); }\n        function k(a, b, c) { var g = [0], e = !1; a.push(g); return { next: function () { var d = g[0]; if (!e && d < b.length) {\n                var f = c ? [b[d], c[d]] : b[d];\n                g[0]++;\n            }\n            else\n                e = !0, a.splice(a.indexOf(g), 1); return { done: e, value: f }; } }; }\n        function x() { return this._values.length; }\n        function u(a, b) {\n            for (var c = this.entries();;) {\n                var d = c.next();\n                if (d.done)\n                    break;\n                a.call(b, d.value[1], d.value[0], this);\n            }\n        }\n        var c, w = Object.defineProperty, y = function (a, b) { return a === b || a !== a && b !== b; };\n        \"undefined\" == typeof WeakMap && (e.WeakMap = d({ \"delete\": f, clear: h, get: m, has: q, set: r }, !0));\n        \"undefined\" != typeof Map && \"function\" === typeof (new Map).values && (new Map).values().next || (e.Map = d({ \"delete\": f, has: q, get: m, set: r, keys: z, values: l, entries: A, forEach: u, clear: h }));\n        \"undefined\" != typeof Set && \"function\" === typeof (new Set).values && (new Set).values().next || (e.Set = d({ has: p, add: t, \"delete\": f, clear: h, keys: l,\n            values: l, entries: B, forEach: u }));\n        \"undefined\" == typeof WeakSet && (e.WeakSet = d({ \"delete\": f, add: t, clear: h, has: p }, !0));\n    })(window);\n    var StyleNode = function () { return function () { this.start = 0, this.end = 0, this.previous = null, this.parent = null, this.rules = null, this.parsedCssText = \"\", this.cssText = \"\", this.atRule = !1, this.type = 0, this.keyframesName = \"\", this.selector = \"\", this.parsedSelector = \"\"; }; }();\n    function parse(e) { return parseCss(lex(e = clean(e)), e); }\n    function clean(e) { return e.replace(RX.comments, \"\").replace(RX.port, \"\"); }\n    function lex(e) { var t = new StyleNode; t.start = 0, t.end = e.length; for (var r = t, n = 0, s = e.length; n < s; n++)\n        if (e[n] === OPEN_BRACE) {\n            r.rules || (r.rules = []);\n            var a = r, o = a.rules[a.rules.length - 1] || null;\n            (r = new StyleNode).start = n + 1, r.parent = a, r.previous = o, a.rules.push(r);\n        }\n        else\n            e[n] === CLOSE_BRACE && (r.end = n + 1, r = r.parent || t); return t; }\n    function parseCss(e, t) { var r = t.substring(e.start, e.end - 1); if (e.parsedCssText = e.cssText = r.trim(), e.parent) {\n        var n = e.previous ? e.previous.end : e.parent.start;\n        r = (r = (r = _expandUnicodeEscapes(r = t.substring(n, e.start - 1))).replace(RX.multipleSpaces, \" \")).substring(r.lastIndexOf(\";\") + 1);\n        var s = e.parsedSelector = e.selector = r.trim();\n        e.atRule = 0 === s.indexOf(AT_START), e.atRule ? 0 === s.indexOf(MEDIA_START) ? e.type = types.MEDIA_RULE : s.match(RX.keyframesRule) && (e.type = types.KEYFRAMES_RULE, e.keyframesName = e.selector.split(RX.multipleSpaces).pop()) : 0 === s.indexOf(VAR_START) ? e.type = types.MIXIN_RULE : e.type = types.STYLE_RULE;\n    } var a = e.rules; if (a)\n        for (var o = 0, i = a.length, l = void 0; o < i && (l = a[o]); o++)\n            parseCss(l, t); return e; }\n    function _expandUnicodeEscapes(e) { return e.replace(/\\\\([0-9a-f]{1,6})\\s/gi, function () { for (var e = arguments[1], t = 6 - e.length; t--;)\n        e = \"0\" + e; return \"\\\\\" + e; }); }\n    var types = { STYLE_RULE: 1, KEYFRAMES_RULE: 7, MEDIA_RULE: 4, MIXIN_RULE: 1e3 }, OPEN_BRACE = \"{\", CLOSE_BRACE = \"}\", RX = { comments: /\\/\\*[^*]*\\*+([^\\/*][^*]*\\*+)*\\//gim, port: /@import[^;]*;/gim, customProp: /(?:^[^;\\-\\s}]+)?--[^;{}]*?:[^{};]*?(?:[;\\n]|$)/gim, mixinProp: /(?:^[^;\\-\\s}]+)?--[^;{}]*?:[^{};]*?{[^}]*?}(?:[;\\n]|$)?/gim, mixinApply: /@apply\\s*\\(?[^);]*\\)?\\s*(?:[;\\n]|$)?/gim, varApply: /[^;:]*?:[^;]*?var\\([^;]*\\)(?:[;\\n]|$)?/gim, keyframesRule: /^@[^\\s]*keyframes/, multipleSpaces: /\\s+/g }, VAR_START = \"--\", MEDIA_START = \"@media\", AT_START = \"@\";\n    function findRegex(e, t, r) { e.lastIndex = 0; var n = t.substring(r).match(e); if (n) {\n        var s = r + n.index;\n        return { start: s, end: s + n[0].length };\n    } return null; }\n    var VAR_USAGE_START = /\\bvar\\(/, VAR_ASSIGN_START = /\\B--[\\w-]+\\s*:/, COMMENTS = /\\/\\*[^*]*\\*+([^\\/*][^*]*\\*+)*\\//gim, TRAILING_LINES = /^[\\t ]+\\n/gm;\n    function resolveVar(e, t, r) { return e[t] ? e[t] : r ? executeTemplate(r, e) : \"\"; }\n    function findVarEndIndex(e, t) { for (var r = 0, n = t; n < e.length; n++) {\n        var s = e[n];\n        if (\"(\" === s)\n            r++;\n        else if (\")\" === s && --r <= 0)\n            return n + 1;\n    } return n; }\n    function parseVar(e, t) { var r = findRegex(VAR_USAGE_START, e, t); if (!r)\n        return null; var n = findVarEndIndex(e, r.start), s = e.substring(r.end, n - 1).split(\",\"), a = s[0], o = s.slice(1); return { start: r.start, end: n, propName: a.trim(), fallback: o.length > 0 ? o.join(\",\").trim() : void 0 }; }\n    function compileVar(e, t, r) { var n = parseVar(e, r); if (!n)\n        return t.push(e.substring(r, e.length)), e.length; var s = n.propName, a = null != n.fallback ? compileTemplate(n.fallback) : void 0; return t.push(e.substring(r, n.start), function (e) { return resolveVar(e, s, a); }), n.end; }\n    function executeTemplate(e, t) { for (var r = \"\", n = 0; n < e.length; n++) {\n        var s = e[n];\n        r += \"string\" == typeof s ? s : s(t);\n    } return r; }\n    function findEndValue(e, t) { for (var r = !1, n = !1, s = t; s < e.length; s++) {\n        var a = e[s];\n        if (r)\n            n && '\"' === a && (r = !1), n || \"'\" !== a || (r = !1);\n        else if ('\"' === a)\n            r = !0, n = !0;\n        else if (\"'\" === a)\n            r = !0, n = !1;\n        else {\n            if (\";\" === a)\n                return s + 1;\n            if (\"}\" === a)\n                return s;\n        }\n    } return s; }\n    function removeCustomAssigns(e) { for (var t = \"\", r = 0;;) {\n        var n = findRegex(VAR_ASSIGN_START, e, r), s = n ? n.start : e.length;\n        if (t += e.substring(r, s), !n)\n            break;\n        r = findEndValue(e, s);\n    } return t; }\n    function compileTemplate(e) { var t = 0; e = removeCustomAssigns(e = e.replace(COMMENTS, \"\")).replace(TRAILING_LINES, \"\"); for (var r = []; t < e.length;)\n        t = compileVar(e, r, t); return r; }\n    function resolveValues(e) { var t = {}; e.forEach(function (e) { e.declarations.forEach(function (e) { t[e.prop] = e.value; }); }); for (var r = {}, n = Object.entries(t), s = function (e) { var t = !1; if (n.forEach(function (e) { var n = e[0], s = executeTemplate(e[1], r); s !== r[n] && (r[n] = s, t = !0); }), !t)\n        return \"break\"; }, a = 0; a < 10; a++) {\n        if (\"break\" === s())\n            break;\n    } return r; }\n    function getSelectors(e, t) { if (void 0 === t && (t = 0), !e.rules)\n        return []; var r = []; return e.rules.filter(function (e) { return e.type === types.STYLE_RULE; }).forEach(function (e) { var n = getDeclarations(e.cssText); n.length > 0 && e.parsedSelector.split(\",\").forEach(function (e) { e = e.trim(), r.push({ selector: e, declarations: n, specificity: computeSpecificity(e), nu: t }); }), t++; }), r; }\n    function computeSpecificity(e) { return 1; }\n    var IMPORTANT = \"!important\", FIND_DECLARATIONS = /(?:^|[;\\s{]\\s*)(--[\\w-]*?)\\s*:\\s*(?:((?:'(?:\\\\'|.)*?'|\"(?:\\\\\"|.)*?\"|\\([^)]*?\\)|[^};{])+)|\\{([^}]*)\\}(?:(?=[;\\s}])|$))/gm;\n    function getDeclarations(e) { for (var t, r = []; t = FIND_DECLARATIONS.exec(e.trim());) {\n        var n = normalizeValue(t[2]), s = n.value, a = n.important;\n        r.push({ prop: t[1].trim(), value: compileTemplate(s), important: a });\n    } return r; }\n    function normalizeValue(e) { var t = (e = e.replace(/\\s+/gim, \" \").trim()).endsWith(IMPORTANT); return t && (e = e.substr(0, e.length - IMPORTANT.length).trim()), { value: e, important: t }; }\n    function getActiveSelectors(e, t, r) { return sortSelectors(getSelectorsForScopes(r.concat(getScopesForElement(t, e))).filter(function (t) { return matches(e, t.selector); })); }\n    function getScopesForElement(e, t) { for (var r = []; t;) {\n        var n = e.get(t);\n        n && r.push(n), t = t.parentElement;\n    } return r; }\n    function getSelectorsForScopes(e) { var t = []; return e.forEach(function (e) { t.push.apply(t, e.selectors); }), t; }\n    function sortSelectors(e) { return e.sort(function (e, t) { return e.specificity === t.specificity ? e.nu - t.nu : e.specificity - t.specificity; }), e; }\n    function matches(e, t) { return e.matches(t); }\n    function parseCSS(e) { var t = parse(e), r = compileTemplate(e); return { original: e, template: r, selectors: getSelectors(t), isDynamic: r.length > 1 }; }\n    function addGlobalStyle(e, t) { var r = parseCSS(t.innerHTML); r.styleEl = t, e.push(r); }\n    function updateGlobalScopes(e) { var t = resolveValues(getSelectorsForScopes(e)); e.forEach(function (e) { e.isDynamic && (e.styleEl.innerHTML = executeTemplate(e.template, t)); }); }\n    function reScope(e, t) { var r = e.template.map(function (r) { return \"string\" == typeof r ? replaceScope(r, e.cssScopeId, t) : r; }), n = e.selectors.map(function (r) { return Object.assign({}, r, { selector: replaceScope(r.selector, e.cssScopeId, t) }); }); return Object.assign({}, e, { template: r, selectors: n, cssScopeId: t }); }\n    function replaceScope(e, t, r) { return e = replaceAll(e, \"\\\\.\" + t, \".\" + r); }\n    function replaceAll(e, t, r) { return e.replace(new RegExp(t, \"g\"), r); }\n    function loadDocument(e, t) { return loadDocumentLinks(e, t).then(function () { loadDocumentStyles(e, t); }); }\n    function loadDocumentLinks(e, t) { for (var r = [], n = e.querySelectorAll('link[rel=\"stylesheet\"][href]'), s = 0; s < n.length; s++)\n        r.push(addGlobalLink(e, t, n[s])); return Promise.all(r); }\n    function loadDocumentStyles(e, t) { for (var r = e.querySelectorAll(\"style\"), n = 0; n < r.length; n++)\n        addGlobalStyle(t, r[n]); }\n    function addGlobalLink(e, t, r) { var n = r.href; return fetch(n).then(function (e) { return e.text(); }).then(function (s) { if (hasCssVariables(s) && r.parentNode) {\n        hasRelativeUrls(s) && (s = fixRelativeUrls(s, n));\n        var a = e.createElement(\"style\");\n        a.innerHTML = s, addGlobalStyle(t, a), r.parentNode.insertBefore(a, r), r.remove();\n    } }).catch(function (e) { console.error(e); }); }\n    var CSS_VARIABLE_REGEXP = /[\\s;{]--[-a-zA-Z0-9]+\\s*:/m;\n    function hasCssVariables(e) { return e.indexOf(\"var(\") > -1 || CSS_VARIABLE_REGEXP.test(e); }\n    var CSS_URL_REGEXP = /url[\\s]*\\([\\s]*['\"]?(?![http|\\/])([^\\'\\\"\\)]*)[\\s]*['\"]?\\)[\\s]*/gim;\n    function hasRelativeUrls(e) { return CSS_URL_REGEXP.lastIndex = 0, CSS_URL_REGEXP.test(e); }\n    function fixRelativeUrls(e, t) { var r = t.replace(/[^\\/]*$/, \"\"); return e.replace(CSS_URL_REGEXP, function (e, t) { var n = r + t; return e.replace(t, n); }); }\n    var CustomStyle = function () { function e(e, t) { this.win = e, this.doc = t, this.count = 0, this.hostStyleMap = new WeakMap, this.hostScopeMap = new WeakMap, this.globalScopes = [], this.scopesMap = new Map; } return e.prototype.initShim = function () { var e = this; return new Promise(function (t) { e.win.requestAnimationFrame(function () { loadDocument(e.doc, e.globalScopes).then(function () { return t(); }); }); }); }, e.prototype.addLink = function (e) { var t = this; return addGlobalLink(this.doc, this.globalScopes, e).then(function () { t.updateGlobal(); }); }, e.prototype.addGlobalStyle = function (e) { addGlobalStyle(this.globalScopes, e), this.updateGlobal(); }, e.prototype.createHostStyle = function (e, t, r) { if (this.hostScopeMap.has(e))\n        return null; var n = e[\"s-sc\"], s = this.registerHostTemplate(r, t, n), a = s.isDynamic && s.cssScopeId; if (!(a || !s.styleEl))\n        return null; var o = this.doc.createElement(\"style\"); if (a) {\n        var i = s.cssScopeId + \"-\" + this.count;\n        e[\"s-sc\"] = i, this.hostStyleMap.set(e, o), this.hostScopeMap.set(e, reScope(s, i)), this.count++;\n    }\n    else\n        s.styleEl = o, s.isDynamic || (o.innerHTML = executeTemplate(s.template, {})), this.globalScopes.push(s), this.updateGlobal(), this.hostScopeMap.set(e, s); return o; }, e.prototype.removeHost = function (e) { var t = this.hostStyleMap.get(e); t && t.remove(), this.hostStyleMap.delete(e), this.hostScopeMap.delete(e); }, e.prototype.updateHost = function (e) { var t = this.hostScopeMap.get(e); if (t && t.isDynamic && t.cssScopeId) {\n        var r = this.hostStyleMap.get(e);\n        if (r) {\n            var n = resolveValues(getActiveSelectors(e, this.hostScopeMap, this.globalScopes));\n            r.innerHTML = executeTemplate(t.template, n);\n        }\n    } }, e.prototype.updateGlobal = function () { updateGlobalScopes(this.globalScopes); }, e.prototype.registerHostTemplate = function (e, t, r) { var n = this.scopesMap.get(t); return n || ((n = parseCSS(e)).cssScopeId = r, this.scopesMap.set(t, n)), n; }, e; }();\n    window.customStyleShim = new CustomStyle(window, document);\n}\nexports.applyPolyfill = applyPolyfill;\n"
  },
  {
    "path": "content/js/stencil/cjs/es5/polyfills/dom.js",
    "content": "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nfunction applyPolyfill(window, document) {\n    if (!window['s-ce1']) {\n        window['s-ce1'] = true;\n        (function (e, t) {\n            \"use strict\";\n            function Ht() { var e = wt.splice(0, wt.length); Et = 0; while (e.length)\n                e.shift().call(null, e.shift()); }\n            function Bt(e, t) { for (var n = 0, r = e.length; n < r; n++)\n                Jt(e[n], t); }\n            function jt(e) { for (var t = 0, n = e.length, r; t < n; t++)\n                r = e[t], Pt(r, A[It(r)]); }\n            function Ft(e) { return function (t) { ut(t) && (Jt(t, e), O.length && Bt(t.querySelectorAll(O), e)); }; }\n            function It(e) { var t = ht.call(e, \"is\"), n = e.nodeName.toUpperCase(), r = _.call(L, t ? N + t.toUpperCase() : T + n); return t && -1 < r && !qt(n, t) ? -1 : r; }\n            function qt(e, t) { return -1 < O.indexOf(e + '[is=\"' + t + '\"]'); }\n            function Rt(e) { var t = e.currentTarget, n = e.attrChange, r = e.attrName, i = e.target, s = e[y] || 2, o = e[w] || 3; kt && (!i || i === t) && t[h] && r !== \"style\" && (e.prevValue !== e.newValue || e.newValue === \"\" && (n === s || n === o)) && t[h](r, n === s ? null : e.prevValue, n === o ? null : e.newValue); }\n            function Ut(e) { var t = Ft(e); return function (e) { wt.push(t, e.target), Et && clearTimeout(Et), Et = setTimeout(Ht, 1); }; }\n            function zt(e) { Ct && (Ct = !1, e.currentTarget.removeEventListener(S, zt)), O.length && Bt((e.target || n).querySelectorAll(O), e.detail === l ? l : a), st && Vt(); }\n            function Wt(e, t) { var n = this; vt.call(n, e, t), Lt.call(n, { target: n }); }\n            function Xt(e, t) { nt(e, t), Mt ? Mt.observe(e, yt) : (Nt && (e.setAttribute = Wt, e[o] = Ot(e), e[u](x, Lt)), e[u](E, Rt)), e[m] && kt && (e.created = !0, e[m](), e.created = !1); }\n            function Vt() { for (var e, t = 0, n = at.length; t < n; t++)\n                e = at[t], M.contains(e) || (n--, at.splice(t--, 1), Jt(e, l)); }\n            function $t(e) { throw new Error(\"A \" + e + \" type is already registered\"); }\n            function Jt(e, t) { var n, r = It(e), i; -1 < r && (Dt(e, A[r]), r = 0, t === a && !e[a] ? (e[l] = !1, e[a] = !0, i = \"connected\", r = 1, st && _.call(at, e) < 0 && at.push(e)) : t === l && !e[l] && (e[a] = !1, e[l] = !0, i = \"disconnected\", r = 1), r && (n = e[t + f] || e[i + f]) && n.call(e)); }\n            function Kt() { }\n            function Qt(e, t, r) { var i = r && r[c] || \"\", o = t.prototype, u = tt(o), a = t.observedAttributes || j, f = { prototype: u }; ot(u, m, { value: function () { if (Q)\n                    Q = !1;\n                else if (!this[W]) {\n                    this[W] = !0, new t(this), o[m] && o[m].call(this);\n                    var e = G[Z.get(t)];\n                    (!V || e.create.length > 1) && Zt(this);\n                } } }), ot(u, h, { value: function (e) { -1 < _.call(a, e) && o[h].apply(this, arguments); } }), o[d] && ot(u, p, { value: o[d] }), o[v] && ot(u, g, { value: o[v] }), i && (f[c] = i), e = e.toUpperCase(), G[e] = { constructor: t, create: i ? [i, et(e)] : [e] }, Z.set(t, e), n[s](e.toLowerCase(), f), en(e), Y[e].r(); }\n            function Gt(e) { var t = G[e.toUpperCase()]; return t && t.constructor; }\n            function Yt(e) { return typeof e == \"string\" ? e : e && e.is || \"\"; }\n            function Zt(e) { var t = e[h], n = t ? e.attributes : j, r = n.length, i; while (r--)\n                i = n[r], t.call(e, i.name || i.nodeName, null, i.value || i.nodeValue); }\n            function en(e) { return e = e.toUpperCase(), e in Y || (Y[e] = {}, Y[e].p = new K(function (t) { Y[e].r = t; })), Y[e].p; }\n            function tn() { X && delete e.customElements, B(e, \"customElements\", { configurable: !0, value: new Kt }), B(e, \"CustomElementRegistry\", { configurable: !0, value: Kt }); for (var t = function (t) { var r = e[t]; if (r) {\n                e[t] = function (t) { var i, s; return t || (t = this), t[W] || (Q = !0, i = G[Z.get(t.constructor)], s = V && i.create.length === 1, t = s ? Reflect.construct(r, j, i.constructor) : n.createElement.apply(n, i.create), t[W] = !0, Q = !1, s || Zt(t)), t; }, e[t].prototype = r.prototype;\n                try {\n                    r.prototype.constructor = e[t];\n                }\n                catch (i) {\n                    z = !0, B(r, W, { value: e[t] });\n                }\n            } }, r = i.get(/^HTML[A-Z]*[a-z]/), o = r.length; o--; t(r[o]))\n                ; n.createElement = function (e, t) { var n = Yt(t); return n ? gt.call(this, e, et(n)) : gt.call(this, e); }, St || (Tt = !0, n[s](\"\")); }\n            var n = e.document, r = e.Object, i = function (e) { var t = /^[A-Z]+[a-z]/, n = function (e) { var t = [], n; for (n in s)\n                e.test(n) && t.push(n); return t; }, i = function (e, t) { t = t.toLowerCase(), t in s || (s[e] = (s[e] || []).concat(t), s[t] = s[t.toUpperCase()] = e); }, s = (r.create || r)(null), o = {}, u, a, f, l; for (a in e)\n                for (l in e[a]) {\n                    f = e[a][l], s[l] = f;\n                    for (u = 0; u < f.length; u++)\n                        s[f[u].toLowerCase()] = s[f[u].toUpperCase()] = l;\n                } return o.get = function (r) { return typeof r == \"string\" ? s[r] || (t.test(r) ? [] : \"\") : n(r); }, o.set = function (n, r) { return t.test(n) ? i(n, r) : i(r, n), o; }, o; }({ collections: { HTMLAllCollection: [\"all\"], HTMLCollection: [\"forms\"], HTMLFormControlsCollection: [\"elements\"], HTMLOptionsCollection: [\"options\"] }, elements: { Element: [\"element\"], HTMLAnchorElement: [\"a\"], HTMLAppletElement: [\"applet\"], HTMLAreaElement: [\"area\"], HTMLAttachmentElement: [\"attachment\"], HTMLAudioElement: [\"audio\"], HTMLBRElement: [\"br\"], HTMLBaseElement: [\"base\"], HTMLBodyElement: [\"body\"], HTMLButtonElement: [\"button\"], HTMLCanvasElement: [\"canvas\"], HTMLContentElement: [\"content\"], HTMLDListElement: [\"dl\"], HTMLDataElement: [\"data\"], HTMLDataListElement: [\"datalist\"], HTMLDetailsElement: [\"details\"], HTMLDialogElement: [\"dialog\"], HTMLDirectoryElement: [\"dir\"], HTMLDivElement: [\"div\"], HTMLDocument: [\"document\"], HTMLElement: [\"element\", \"abbr\", \"address\", \"article\", \"aside\", \"b\", \"bdi\", \"bdo\", \"cite\", \"code\", \"command\", \"dd\", \"dfn\", \"dt\", \"em\", \"figcaption\", \"figure\", \"footer\", \"header\", \"i\", \"kbd\", \"mark\", \"nav\", \"noscript\", \"rp\", \"rt\", \"ruby\", \"s\", \"samp\", \"section\", \"small\", \"strong\", \"sub\", \"summary\", \"sup\", \"u\", \"var\", \"wbr\"], HTMLEmbedElement: [\"embed\"], HTMLFieldSetElement: [\"fieldset\"], HTMLFontElement: [\"font\"], HTMLFormElement: [\"form\"], HTMLFrameElement: [\"frame\"], HTMLFrameSetElement: [\"frameset\"], HTMLHRElement: [\"hr\"], HTMLHeadElement: [\"head\"], HTMLHeadingElement: [\"h1\", \"h2\", \"h3\", \"h4\", \"h5\", \"h6\"], HTMLHtmlElement: [\"html\"], HTMLIFrameElement: [\"iframe\"], HTMLImageElement: [\"img\"], HTMLInputElement: [\"input\"], HTMLKeygenElement: [\"keygen\"], HTMLLIElement: [\"li\"], HTMLLabelElement: [\"label\"], HTMLLegendElement: [\"legend\"], HTMLLinkElement: [\"link\"], HTMLMapElement: [\"map\"], HTMLMarqueeElement: [\"marquee\"], HTMLMediaElement: [\"media\"], HTMLMenuElement: [\"menu\"], HTMLMenuItemElement: [\"menuitem\"], HTMLMetaElement: [\"meta\"], HTMLMeterElement: [\"meter\"], HTMLModElement: [\"del\", \"ins\"], HTMLOListElement: [\"ol\"], HTMLObjectElement: [\"object\"], HTMLOptGroupElement: [\"optgroup\"], HTMLOptionElement: [\"option\"], HTMLOutputElement: [\"output\"], HTMLParagraphElement: [\"p\"], HTMLParamElement: [\"param\"], HTMLPictureElement: [\"picture\"], HTMLPreElement: [\"pre\"], HTMLProgressElement: [\"progress\"], HTMLQuoteElement: [\"blockquote\", \"q\", \"quote\"], HTMLScriptElement: [\"script\"], HTMLSelectElement: [\"select\"], HTMLShadowElement: [\"shadow\"], HTMLSlotElement: [\"slot\"], HTMLSourceElement: [\"source\"], HTMLSpanElement: [\"span\"], HTMLStyleElement: [\"style\"], HTMLTableCaptionElement: [\"caption\"], HTMLTableCellElement: [\"td\", \"th\"], HTMLTableColElement: [\"col\", \"colgroup\"], HTMLTableElement: [\"table\"], HTMLTableRowElement: [\"tr\"], HTMLTableSectionElement: [\"thead\", \"tbody\", \"tfoot\"], HTMLTemplateElement: [\"template\"], HTMLTextAreaElement: [\"textarea\"], HTMLTimeElement: [\"time\"], HTMLTitleElement: [\"title\"], HTMLTrackElement: [\"track\"], HTMLUListElement: [\"ul\"], HTMLUnknownElement: [\"unknown\", \"vhgroupv\", \"vkeygen\"], HTMLVideoElement: [\"video\"] }, nodes: { Attr: [\"node\"], Audio: [\"audio\"], CDATASection: [\"node\"], CharacterData: [\"node\"], Comment: [\"#comment\"], Document: [\"#document\"], DocumentFragment: [\"#document-fragment\"], DocumentType: [\"node\"], HTMLDocument: [\"#document\"], Image: [\"img\"], Option: [\"option\"], ProcessingInstruction: [\"node\"], ShadowRoot: [\"#shadow-root\"], Text: [\"#text\"], XMLDocument: [\"xml\"] } });\n            typeof t != \"object\" && (t = { type: t || \"auto\" });\n            var s = \"registerElement\", o = \"__\" + s + (e.Math.random() * 1e5 >> 0), u = \"addEventListener\", a = \"attached\", f = \"Callback\", l = \"detached\", c = \"extends\", h = \"attributeChanged\" + f, p = a + f, d = \"connected\" + f, v = \"disconnected\" + f, m = \"created\" + f, g = l + f, y = \"ADDITION\", b = \"MODIFICATION\", w = \"REMOVAL\", E = \"DOMAttrModified\", S = \"DOMContentLoaded\", x = \"DOMSubtreeModified\", T = \"<\", N = \"=\", C = /^[A-Z][A-Z0-9]*(?:-[A-Z0-9]+)+$/, k = [\"ANNOTATION-XML\", \"COLOR-PROFILE\", \"FONT-FACE\", \"FONT-FACE-SRC\", \"FONT-FACE-URI\", \"FONT-FACE-FORMAT\", \"FONT-FACE-NAME\", \"MISSING-GLYPH\"], L = [], A = [], O = \"\", M = n.documentElement, _ = L.indexOf || function (e) { for (var t = this.length; t-- && this[t] !== e;)\n                ; return t; }, D = r.prototype, P = D.hasOwnProperty, H = D.isPrototypeOf, B = r.defineProperty, j = [], F = r.getOwnPropertyDescriptor, I = r.getOwnPropertyNames, q = r.getPrototypeOf, R = r.setPrototypeOf, U = !!r.__proto__, z = !1, W = \"__dreCEv1\", X = e.customElements, V = !/^force/.test(t.type) && !!(X && X.define && X.get && X.whenDefined), $ = r.create || r, J = e.Map || function () { var t = [], n = [], r; return { get: function (e) { return n[_.call(t, e)]; }, set: function (e, i) { r = _.call(t, e), r < 0 ? n[t.push(e) - 1] = i : n[r] = i; } }; }, K = e.Promise || function (e) { function i(e) { n = !0; while (t.length)\n                t.shift()(e); } var t = [], n = !1, r = { \"catch\": function () { return r; }, then: function (e) { return t.push(e), n && setTimeout(i, 1), r; } }; return e(i), r; }, Q = !1, G = $(null), Y = $(null), Z = new J, et = function (e) { return e.toLowerCase(); }, tt = r.create || function sn(e) { return e ? (sn.prototype = e, new sn) : this; }, nt = R || (U ? function (e, t) { return e.__proto__ = t, e; } : I && F ? function () { function e(e, t) { for (var n, r = I(t), i = 0, s = r.length; i < s; i++)\n                n = r[i], P.call(e, n) || B(e, n, F(t, n)); } return function (t, n) { do\n                e(t, n);\n            while ((n = q(n)) && !H.call(n, t)); return t; }; }() : function (e, t) { for (var n in t)\n                e[n] = t[n]; return e; }), rt = e.MutationObserver || e.WebKitMutationObserver, it = (e.HTMLElement || e.Element || e.Node).prototype, st = !H.call(it, M), ot = st ? function (e, t, n) { return e[t] = n.value, e; } : B, ut = st ? function (e) { return e.nodeType === 1; } : function (e) { return H.call(it, e); }, at = st && [], ft = it.attachShadow, lt = it.cloneNode, ct = it.dispatchEvent, ht = it.getAttribute, pt = it.hasAttribute, dt = it.removeAttribute, vt = it.setAttribute, mt = n.createElement, gt = mt, yt = rt && { attributes: !0, characterData: !0, attributeOldValue: !0 }, bt = rt || function (e) { Nt = !1, M.removeEventListener(E, bt); }, wt, Et = 0, St = s in n && !/^force-all/.test(t.type), xt = !0, Tt = !1, Nt = !0, Ct = !0, kt = !0, Lt, At, Ot, Mt, _t, Dt, Pt;\n            St || (R || U ? (Dt = function (e, t) { H.call(t, e) || Xt(e, t); }, Pt = Xt) : (Dt = function (e, t) { e[o] || (e[o] = r(!0), Xt(e, t)); }, Pt = Dt), st ? (Nt = !1, function () { var e = F(it, u), t = e.value, n = function (e) { var t = new CustomEvent(E, { bubbles: !0 }); t.attrName = e, t.prevValue = ht.call(this, e), t.newValue = null, t[w] = t.attrChange = 2, dt.call(this, e), ct.call(this, t); }, r = function (e, t) { var n = pt.call(this, e), r = n && ht.call(this, e), i = new CustomEvent(E, { bubbles: !0 }); vt.call(this, e, t), i.attrName = e, i.prevValue = n ? r : null, i.newValue = t, n ? i[b] = i.attrChange = 1 : i[y] = i.attrChange = 0, ct.call(this, i); }, i = function (e) { var t = e.currentTarget, n = t[o], r = e.propertyName, i; n.hasOwnProperty(r) && (n = n[r], i = new CustomEvent(E, { bubbles: !0 }), i.attrName = n.name, i.prevValue = n.value || null, i.newValue = n.value = t[r] || null, i.prevValue == null ? i[y] = i.attrChange = 0 : i[b] = i.attrChange = 1, ct.call(t, i)); }; e.value = function (e, s, u) { e === E && this[h] && this.setAttribute !== r && (this[o] = { className: { name: \"class\", value: this.className } }, this.setAttribute = r, this.removeAttribute = n, t.call(this, \"propertychange\", i)), t.call(this, e, s, u); }, B(it, u, e); }()) : rt || (M[u](E, bt), M.setAttribute(o, 1), M.removeAttribute(o), Nt && (Lt = function (e) { var t = this, n, r, i; if (t === e.target) {\n                n = t[o], t[o] = r = Ot(t);\n                for (i in r) {\n                    if (!(i in n))\n                        return At(0, t, i, n[i], r[i], y);\n                    if (r[i] !== n[i])\n                        return At(1, t, i, n[i], r[i], b);\n                }\n                for (i in n)\n                    if (!(i in r))\n                        return At(2, t, i, n[i], r[i], w);\n            } }, At = function (e, t, n, r, i, s) { var o = { attrChange: e, currentTarget: t, attrName: n, prevValue: r, newValue: i }; o[s] = e, Rt(o); }, Ot = function (e) { for (var t, n, r = {}, i = e.attributes, s = 0, o = i.length; s < o; s++)\n                t = i[s], n = t.name, n !== \"setAttribute\" && (r[n] = t.value); return r; })), n[s] = function (t, r) { p = t.toUpperCase(), xt && (xt = !1, rt ? (Mt = function (e, t) { function n(e, t) { for (var n = 0, r = e.length; n < r; t(e[n++]))\n                ; } return new rt(function (r) { for (var i, s, o, u = 0, a = r.length; u < a; u++)\n                i = r[u], i.type === \"childList\" ? (n(i.addedNodes, e), n(i.removedNodes, t)) : (s = i.target, kt && s[h] && i.attributeName !== \"style\" && (o = ht.call(s, i.attributeName), o !== i.oldValue && s[h](i.attributeName, i.oldValue, o))); }); }(Ft(a), Ft(l)), _t = function (e) { return Mt.observe(e, { childList: !0, subtree: !0 }), e; }, _t(n), ft && (it.attachShadow = function () { return _t(ft.apply(this, arguments)); })) : (wt = [], n[u](\"DOMNodeInserted\", Ut(a)), n[u](\"DOMNodeRemoved\", Ut(l))), n[u](S, zt), n[u](\"readystatechange\", zt), it.cloneNode = function (e) { var t = lt.call(this, !!e), n = It(t); return -1 < n && Pt(t, A[n]), e && O.length && jt(t.querySelectorAll(O)), t; }); if (Tt)\n                return Tt = !1; -2 < _.call(L, N + p) + _.call(L, T + p) && $t(t); if (!C.test(p) || -1 < _.call(k, p))\n                throw new Error(\"The type \" + t + \" is invalid\"); var i = function () { return o ? n.createElement(f, p) : n.createElement(f); }, s = r || D, o = P.call(s, c), f = o ? r[c].toUpperCase() : p, p, d; return o && -1 < _.call(L, T + f) && $t(f), d = L.push((o ? N : T) + p) - 1, O = O.concat(O.length ? \",\" : \"\", o ? f + '[is=\"' + t.toLowerCase() + '\"]' : f), i.prototype = A[d] = P.call(s, \"prototype\") ? s.prototype : tt(it), O.length && Bt(n.querySelectorAll(O), a), i; }, n.createElement = gt = function (e, t) { var r = Yt(t), i = r ? mt.call(n, e, et(r)) : mt.call(n, e), s = \"\" + e, o = _.call(L, (r ? N : T) + (r || s).toUpperCase()), u = -1 < o; return r && (i.setAttribute(\"is\", r = r.toLowerCase()), u && (u = qt(s.toUpperCase(), r))), kt = !n.createElement.innerHTMLHelper, u && Pt(i, A[o]), i; }), Kt.prototype = { constructor: Kt, define: V ? function (e, t, n) { if (n)\n                    Qt(e, t, n);\n                else {\n                    var r = e.toUpperCase();\n                    G[r] = { constructor: t, create: [r] }, Z.set(t, r), X.define(e, t);\n                } } : Qt, get: V ? function (e) { return X.get(e) || Gt(e); } : Gt, whenDefined: V ? function (e) { return K.race([X.whenDefined(e), en(e)]); } : en };\n            if (!X || /^force/.test(t.type))\n                tn();\n            else if (!t.noBuiltIn)\n                try {\n                    (function (t, r, i) { r[c] = \"a\", t.prototype = tt(HTMLAnchorElement.prototype), t.prototype.constructor = t, e.customElements.define(i, t, r); if (ht.call(n.createElement(\"a\", { is: i }), \"is\") !== i || V && ht.call(new t, \"is\") !== i)\n                        throw r; })(function on() { return Reflect.construct(HTMLAnchorElement, [], on); }, {}, \"document-register-element-a\");\n                }\n                catch (nn) {\n                    tn();\n                }\n            if (!t.noBuiltIn)\n                try {\n                    mt.call(n, \"a\", \"a\");\n                }\n                catch (rn) {\n                    et = function (e) { return { is: e.toLowerCase() }; };\n                }\n        })(window);\n    }\n    /*!\n    Element.closest and Element.matches\n    https://github.com/jonathantneal/closest\n    Creative Commons Zero v1.0 Universal\n    */\n    (function (a) { \"function\" !== typeof a.matches && (a.matches = a.msMatchesSelector || a.mozMatchesSelector || a.webkitMatchesSelector || function (a) { a = (this.document || this.ownerDocument).querySelectorAll(a); for (var b = 0; a[b] && a[b] !== this;)\n        ++b; return !!a[b]; }); \"function\" !== typeof a.closest && (a.closest = function (a) { for (var b = this; b && 1 === b.nodeType;) {\n        if (b.matches(a))\n            return b;\n        b = b.parentNode;\n    } return null; }); })(window.Element.prototype);\n    /*!\n    Element.getRootNode()\n    */\n    (function (c) { function d(a) { a = b(a); return 11 === a.nodeType ? d(a.host) : a; } function b(a) { return a.parentNode ? b(a.parentNode) : a; } \"function\" !== typeof c.getRootNode && (c.getRootNode = function (a) { return a && a.composed ? d(this) : b(this); }); })(Element.prototype);\n    /*!\n    Element.remove()\n    */\n    (function (b) { b.forEach(function (a) { a.hasOwnProperty(\"remove\") || Object.defineProperty(a, \"remove\", { configurable: !0, enumerable: !0, writable: !0, value: function () { null !== this.parentNode && this.parentNode.removeChild(this); } }); }); })([Element.prototype, CharacterData.prototype, DocumentType.prototype]);\n}\nexports.applyPolyfill = applyPolyfill;\n"
  },
  {
    "path": "content/js/stencil/cjs/es5/polyfills/fetch.js",
    "content": "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nfunction applyPolyfill(window, document) {\n    (function (e) {\n        function l(a) { \"string\" !== typeof a && (a = String(a)); if (/[^a-z0-9\\-#$%&'*+.\\^_`|~]/i.test(a))\n            throw new TypeError(\"Invalid character in header field name\"); return a.toLowerCase(); }\n        function q(a) { \"string\" !== typeof a && (a = String(a)); return a; }\n        function n(a) { var b = { next: function () { var b = a.shift(); return { done: void 0 === b, value: b }; } }; g.iterable && (b[Symbol.iterator] = function () { return b; }); return b; }\n        function d(a) {\n            this.map = {};\n            a instanceof d ? a.forEach(function (a, c) { this.append(c, a); }, this) : Array.isArray(a) ?\n                a.forEach(function (a) { this.append(a[0], a[1]); }, this) : a && Object.getOwnPropertyNames(a).forEach(function (b) { this.append(b, a[b]); }, this);\n        }\n        function p(a) { if (a.bodyUsed)\n            return Promise.reject(new TypeError(\"Already read\")); a.bodyUsed = !0; }\n        function r(a) { return new Promise(function (b, c) { a.onload = function () { b(a.result); }; a.onerror = function () { c(a.error); }; }); }\n        function w(a) { var b = new FileReader, c = r(b); b.readAsArrayBuffer(a); return c; }\n        function x(a) {\n            a = new Uint8Array(a);\n            for (var b = Array(a.length), c = 0; c < a.length; c++)\n                b[c] = String.fromCharCode(a[c]);\n            return b.join(\"\");\n        }\n        function t(a) { if (a.slice)\n            return a.slice(0); var b = new Uint8Array(a.byteLength); b.set(new Uint8Array(a)); return b.buffer; }\n        function u() {\n            this.bodyUsed = !1;\n            this._initBody = function (a) {\n                if (this._bodyInit = a)\n                    if (\"string\" === typeof a)\n                        this._bodyText = a;\n                    else if (g.blob && Blob.prototype.isPrototypeOf(a))\n                        this._bodyBlob = a;\n                    else if (g.formData && FormData.prototype.isPrototypeOf(a))\n                        this._bodyFormData = a;\n                    else if (g.searchParams && URLSearchParams.prototype.isPrototypeOf(a))\n                        this._bodyText = a.toString();\n                    else if (g.arrayBuffer &&\n                        g.blob && y(a))\n                        this._bodyArrayBuffer = t(a.buffer), this._bodyInit = new Blob([this._bodyArrayBuffer]);\n                    else if (g.arrayBuffer && (ArrayBuffer.prototype.isPrototypeOf(a) || z(a)))\n                        this._bodyArrayBuffer = t(a);\n                    else\n                        throw Error(\"unsupported BodyInit type\");\n                else\n                    this._bodyText = \"\";\n                this.headers.get(\"content-type\") || (\"string\" === typeof a ? this.headers.set(\"content-type\", \"text/plain;charset=UTF-8\") : this._bodyBlob && this._bodyBlob.type ? this.headers.set(\"content-type\", this._bodyBlob.type) : g.searchParams && URLSearchParams.prototype.isPrototypeOf(a) &&\n                    this.headers.set(\"content-type\", \"application/x-www-form-urlencoded;charset=UTF-8\"));\n            };\n            g.blob && (this.blob = function () { var a = p(this); if (a)\n                return a; if (this._bodyBlob)\n                return Promise.resolve(this._bodyBlob); if (this._bodyArrayBuffer)\n                return Promise.resolve(new Blob([this._bodyArrayBuffer])); if (this._bodyFormData)\n                throw Error(\"could not read FormData body as blob\"); return Promise.resolve(new Blob([this._bodyText])); }, this.arrayBuffer = function () {\n                return this._bodyArrayBuffer ? p(this) || Promise.resolve(this._bodyArrayBuffer) :\n                    this.blob().then(w);\n            });\n            this.text = function () { var a = p(this); if (a)\n                return a; if (this._bodyBlob) {\n                a = this._bodyBlob;\n                var b = new FileReader, c = r(b);\n                b.readAsText(a);\n                return c;\n            } if (this._bodyArrayBuffer)\n                return Promise.resolve(x(this._bodyArrayBuffer)); if (this._bodyFormData)\n                throw Error(\"could not read FormData body as text\"); return Promise.resolve(this._bodyText); };\n            g.formData && (this.formData = function () { return this.text().then(A); });\n            this.json = function () { return this.text().then(JSON.parse); };\n            return this;\n        }\n        function k(a, b) {\n            b =\n                b || {};\n            var c = b.body;\n            if (a instanceof k) {\n                if (a.bodyUsed)\n                    throw new TypeError(\"Already read\");\n                this.url = a.url;\n                this.credentials = a.credentials;\n                b.headers || (this.headers = new d(a.headers));\n                this.method = a.method;\n                this.mode = a.mode;\n                c || null == a._bodyInit || (c = a._bodyInit, a.bodyUsed = !0);\n            }\n            else\n                this.url = String(a);\n            this.credentials = b.credentials || this.credentials || \"omit\";\n            if (b.headers || !this.headers)\n                this.headers = new d(b.headers);\n            var v = b.method || this.method || \"GET\", g = v.toUpperCase();\n            this.method = -1 < B.indexOf(g) ? g : v;\n            this.mode =\n                b.mode || this.mode || null;\n            this.referrer = null;\n            if ((\"GET\" === this.method || \"HEAD\" === this.method) && c)\n                throw new TypeError(\"Body not allowed for GET or HEAD requests\");\n            this._initBody(c);\n        }\n        function A(a) { var b = new FormData; a.trim().split(\"&\").forEach(function (a) { if (a) {\n            var c = a.split(\"=\");\n            a = c.shift().replace(/\\+/g, \" \");\n            c = c.join(\"=\").replace(/\\+/g, \" \");\n            b.append(decodeURIComponent(a), decodeURIComponent(c));\n        } }); return b; }\n        function C(a) {\n            var b = new d;\n            a.replace(/\\r?\\n[\\t ]+/g, \" \").split(/\\r?\\n/).forEach(function (a) {\n                var c = a.split(\":\");\n                if (a = c.shift().trim())\n                    c = c.join(\":\").trim(), b.append(a, c);\n            });\n            return b;\n        }\n        function h(a, b) { b || (b = {}); this.type = \"default\"; this.status = void 0 === b.status ? 200 : b.status; this.ok = 200 <= this.status && 300 > this.status; this.statusText = \"statusText\" in b ? b.statusText : \"OK\"; this.headers = new d(b.headers); this.url = b.url || \"\"; this._initBody(a); }\n        if (!e.fetch) {\n            var D = \"Symbol\" in e && \"iterator\" in Symbol, m;\n            if (m = \"FileReader\" in e && \"Blob\" in e)\n                try {\n                    new Blob, m = !0;\n                }\n                catch (a) {\n                    m = !1;\n                }\n            var g = { searchParams: \"URLSearchParams\" in e, iterable: D,\n                blob: m, formData: \"FormData\" in e, arrayBuffer: \"ArrayBuffer\" in e };\n            if (g.arrayBuffer) {\n                var E = \"[object Int8Array];[object Uint8Array];[object Uint8ClampedArray];[object Int16Array];[object Uint16Array];[object Int32Array];[object Uint32Array];[object Float32Array];[object Float64Array]\".split(\";\");\n                var y = function (a) { return a && DataView.prototype.isPrototypeOf(a); };\n                var z = ArrayBuffer.isView || function (a) { return a && -1 < E.indexOf(Object.prototype.toString.call(a)); };\n            }\n            d.prototype.append = function (a, b) {\n                a = l(a);\n                b = q(b);\n                var c = this.map[a];\n                this.map[a] = c ? c + \",\" + b : b;\n            };\n            d.prototype[\"delete\"] = function (a) { delete this.map[l(a)]; };\n            d.prototype.get = function (a) { a = l(a); return this.has(a) ? this.map[a] : null; };\n            d.prototype.has = function (a) { return this.map.hasOwnProperty(l(a)); };\n            d.prototype.set = function (a, b) { this.map[l(a)] = q(b); };\n            d.prototype.forEach = function (a, b) { for (var c in this.map)\n                this.map.hasOwnProperty(c) && a.call(b, this.map[c], c, this); };\n            d.prototype.keys = function () { var a = []; this.forEach(function (b, c) { a.push(c); }); return n(a); };\n            d.prototype.values =\n                function () { var a = []; this.forEach(function (b) { a.push(b); }); return n(a); };\n            d.prototype.entries = function () { var a = []; this.forEach(function (b, c) { a.push([c, b]); }); return n(a); };\n            g.iterable && (d.prototype[Symbol.iterator] = d.prototype.entries);\n            var B = \"DELETE GET HEAD OPTIONS POST PUT\".split(\" \");\n            k.prototype.clone = function () { return new k(this, { body: this._bodyInit }); };\n            u.call(k.prototype);\n            u.call(h.prototype);\n            h.prototype.clone = function () {\n                return new h(this._bodyInit, { status: this.status, statusText: this.statusText, headers: new d(this.headers),\n                    url: this.url });\n            };\n            h.error = function () { var a = new h(null, { status: 0, statusText: \"\" }); a.type = \"error\"; return a; };\n            var F = [301, 302, 303, 307, 308];\n            h.redirect = function (a, b) { if (-1 === F.indexOf(b))\n                throw new RangeError(\"Invalid status code\"); return new h(null, { status: b, headers: { location: a } }); };\n            e.Headers = d;\n            e.Request = k;\n            e.Response = h;\n            e.fetch = function (a, b) {\n                return new Promise(function (c, d) {\n                    var e = new k(a, b), f = new XMLHttpRequest;\n                    f.onload = function () {\n                        var a = { status: f.status, statusText: f.statusText, headers: C(f.getAllResponseHeaders() ||\n                                \"\") };\n                        a.url = \"responseURL\" in f ? f.responseURL : a.headers.get(\"X-Request-URL\");\n                        c(new h(\"response\" in f ? f.response : f.responseText, a));\n                    };\n                    f.onerror = function () { d(new TypeError(\"Network request failed\")); };\n                    f.ontimeout = function () { d(new TypeError(\"Network request failed\")); };\n                    f.open(e.method, e.url, !0);\n                    \"include\" === e.credentials ? f.withCredentials = !0 : \"omit\" === e.credentials && (f.withCredentials = !1);\n                    \"responseType\" in f && g.blob && (f.responseType = \"blob\");\n                    e.headers.forEach(function (a, b) { f.setRequestHeader(b, a); });\n                    f.send(\"undefined\" ===\n                        typeof e._bodyInit ? null : e._bodyInit);\n                });\n            };\n            e.fetch.polyfill = !0;\n        }\n    })(\"undefined\" !== typeof self ? self : window);\n}\nexports.applyPolyfill = applyPolyfill;\n"
  },
  {
    "path": "content/js/stencil/cjs/es5/polyfills/map.js",
    "content": "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nfunction applyPolyfill(window, document) {\n    (function (e) {\n        function d(a, b) { function c(a) { if (!this || this.constructor !== c)\n            return new c(a); this._keys = []; this._values = []; this._itp = []; this.objectOnly = b; a && v.call(this, a); } b || w(a, \"size\", { get: x }); a.constructor = c; c.prototype = a; return c; }\n        function v(a) { this.add ? a.forEach(this.add, this) : a.forEach(function (a) { this.set(a[0], a[1]); }, this); }\n        function f(a) { this.has(a) && (this._keys.splice(c, 1), this._values.splice(c, 1), this._itp.forEach(function (a) { c < a[0] && a[0]--; })); return -1 < c; }\n        function m(a) {\n            return this.has(a) ? this._values[c] :\n                void 0;\n        }\n        function n(a, b) { if (this.objectOnly && b !== Object(b))\n            throw new TypeError(\"Invalid value used as weak collection key\"); if (b != b || 0 === b)\n            for (c = a.length; c-- && !y(a[c], b);)\n                ;\n        else\n            c = a.indexOf(b); return -1 < c; }\n        function p(a) { return n.call(this, this._values, a); }\n        function q(a) { return n.call(this, this._keys, a); }\n        function r(a, b) { this.has(a) ? this._values[c] = b : this._values[this._keys.push(a) - 1] = b; return this; }\n        function t(a) { this.has(a) || this._values.push(a); return this; }\n        function h() {\n            (this._keys || 0).length = this._values.length =\n                0;\n        }\n        function z() { return k(this._itp, this._keys); }\n        function l() { return k(this._itp, this._values); }\n        function A() { return k(this._itp, this._keys, this._values); }\n        function B() { return k(this._itp, this._values, this._values); }\n        function k(a, b, c) { var g = [0], e = !1; a.push(g); return { next: function () { var d = g[0]; if (!e && d < b.length) {\n                var f = c ? [b[d], c[d]] : b[d];\n                g[0]++;\n            }\n            else\n                e = !0, a.splice(a.indexOf(g), 1); return { done: e, value: f }; } }; }\n        function x() { return this._values.length; }\n        function u(a, b) {\n            for (var c = this.entries();;) {\n                var d = c.next();\n                if (d.done)\n                    break;\n                a.call(b, d.value[1], d.value[0], this);\n            }\n        }\n        var c, w = Object.defineProperty, y = function (a, b) { return a === b || a !== a && b !== b; };\n        \"undefined\" == typeof WeakMap && (e.WeakMap = d({ \"delete\": f, clear: h, get: m, has: q, set: r }, !0));\n        \"undefined\" != typeof Map && \"function\" === typeof (new Map).values && (new Map).values().next || (e.Map = d({ \"delete\": f, has: q, get: m, set: r, keys: z, values: l, entries: A, forEach: u, clear: h }));\n        \"undefined\" != typeof Set && \"function\" === typeof (new Set).values && (new Set).values().next || (e.Set = d({ has: p, add: t, \"delete\": f, clear: h, keys: l,\n            values: l, entries: B, forEach: u }));\n        \"undefined\" == typeof WeakSet && (e.WeakSet = d({ \"delete\": f, add: t, clear: h, has: p }, !0));\n    })(window);\n}\nexports.applyPolyfill = applyPolyfill;\n"
  },
  {
    "path": "content/js/stencil/cjs/es5/polyfills/object.js",
    "content": "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nfunction applyPolyfill(window, document) {\n    \"function\" != typeof Object.assign && Object.defineProperty(Object, \"assign\", { value: function (d, f) { if (null == d)\n            throw new TypeError(\"Cannot convert undefined or null to object\"); for (var e = Object(d), b = 1; b < arguments.length; b++) {\n            var a = arguments[b];\n            if (null != a)\n                for (var c in a)\n                    Object.prototype.hasOwnProperty.call(a, c) && (e[c] = a[c]);\n        } return e; }, writable: !0, configurable: !0 });\n    /*!\n    Object.entries\n    */\n    Object.entries || (Object.entries = function (c) { for (var b = Object.keys(c), a = b.length, d = Array(a); a--;)\n        d[a] = [b[a], c[b[a]]]; return d; });\n    /*!\n    Object.values\n    */\n    Object.values || (Object.values = function (n) { return Object.keys(n).map(function (r) { return n[r]; }); });\n    /*!\n    Number\n    */\n    void 0 === Number.isFinite && (Number.isFinite = function (a) { return \"number\" === typeof a && isFinite(a); });\n    Number.isNaN = Number.isNaN || function (a) { return a !== a; };\n    Number.isInteger = Number.isInteger || function (a) { return \"number\" === typeof a && isFinite(a) && Math.floor(a) === a; };\n}\nexports.applyPolyfill = applyPolyfill;\n"
  },
  {
    "path": "content/js/stencil/cjs/es5/polyfills/promise.js",
    "content": "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nfunction applyPolyfill(window, document) {\n    (window.ES6Promise = function () { function t() { var t = setTimeout; return function () { return t(r, 1); }; } function r() { for (var t = 0; t < y; t += 2)\n        (0, C[t])(C[t + 1]), C[t] = void 0, C[t + 1] = void 0; y = 0; } function e(t, r) { var e = this, n = new this.constructor(o); void 0 === n[O] && _(n); var i = e._state; if (i) {\n        var s = arguments[i - 1];\n        g(function () { return v(i, n, s, e._result); });\n    }\n    else\n        l(e, n, t, r); return n; } function n(t) { if (t && \"object\" == typeof t && t.constructor === this)\n        return t; var r = new this(o); return u(r, t), r; } function o() { } function i(t) { try {\n        return t.then;\n    }\n    catch (t) {\n        return q.error = t, q;\n    } } function s(t, r, o) { r.constructor === t.constructor && o === e && r.constructor.resolve === n ? function (t, r) { r._state === x ? a(t, r._result) : r._state === F ? f(t, r._result) : l(r, void 0, function (r) { return u(t, r); }, function (r) { return f(t, r); }); }(t, r) : o === q ? (f(t, q.error), q.error = null) : void 0 === o ? a(t, r) : \"function\" == typeof o ? function (t, r, e) { g(function (t) { var n = !1, o = function (t, r, e, n) { try {\n        t.call(r, e, n);\n    }\n    catch (t) {\n        return t;\n    } }(e, r, function (e) { n || (n = !0, r !== e ? u(t, e) : a(t, e)); }, function (r) { n || (n = !0, f(t, r)); }, t._label); !n && o && (n = !0, f(t, o)); }, t); }(t, r, o) : a(t, r); } function u(t, r) { if (t === r)\n        f(t, new TypeError(\"cannot resolve promise w/ itself\"));\n    else {\n        var e = typeof r;\n        null === r || \"object\" !== e && \"function\" !== e ? a(t, r) : s(t, r, i(r));\n    } } function c(t) { t._onerror && t._onerror(t._result), h(t); } function a(t, r) { t._state === P && (t._result = r, t._state = x, 0 !== t._subscribers.length && g(h, t)); } function f(t, r) { t._state === P && (t._state = F, t._result = r, g(c, t)); } function l(t, r, e, n) { var o = t._subscribers, i = o.length; t._onerror = null, o[i] = r, o[i + x] = e, o[i + F] = n, 0 === i && t._state && g(h, t); } function h(t) { var r = t._subscribers, e = t._state; if (0 !== r.length) {\n        for (var n, o, i = t._result, s = 0; s < r.length; s += 3)\n            n = r[s], o = r[s + e], n ? v(e, n, o, i) : o(i);\n        t._subscribers.length = 0;\n    } } function v(t, r, e, n) { var o = \"function\" == typeof e, i = void 0, s = void 0, c = void 0, l = void 0; if (o) {\n        try {\n            i = e(n);\n        }\n        catch (t) {\n            q.error = t, i = q;\n        }\n        if (i === q ? (l = !0, s = i.error, i.error = null) : c = !0, r === i)\n            return void f(r, new TypeError(\"Cannot return same promise\"));\n    }\n    else\n        i = n, c = !0; r._state === P && (o && c ? u(r, i) : l ? f(r, s) : t === x ? a(r, i) : t === F && f(r, i)); } function _(t) { t[O] = U++, t._state = void 0, t._result = void 0, t._subscribers = []; } var p, d = Array.isArray ? Array.isArray : function (t) { return \"[object Array]\" === Object.prototype.toString.call(t); }, y = 0, w = void 0, m = void 0, g = function (t, e) { C[y] = t, C[y + 1] = e, 2 === (y += 2) && (m ? m(r) : T()); }, b = (p = \"undefined\" != typeof window ? window : void 0) || {}, A = b.MutationObserver || b.WebKitMutationObserver; b = \"undefined\" == typeof self; var E, S, M, j = \"undefined\" != typeof Uint8ClampedArray && \"undefined\" != typeof importScripts && \"undefined\" != typeof MessageChannel, C = Array(1e3), T = void 0; T = A ? (E = 0, S = new A(r), M = document.createTextNode(\"\"), S.observe(M, { characterData: !0 }), function () { M.data = E = ++E % 2; }) : j ? function () { var t = new MessageChannel; return t.port1.onmessage = r, function () { return t.port2.postMessage(0); }; }() : void 0 === p && \"function\" == typeof require ? function () { try {\n        var e = Function(\"return this\")().require(\"vertx\");\n        return void 0 !== (w = e.runOnLoop || e.runOnContext) ? function () { w(r); } : t();\n    }\n    catch (r) {\n        return t();\n    } }() : t(); var O = Math.random().toString(36).substring(2), P = void 0, x = 1, F = 2, q = { error: null }, U = 0, D = function () { function t(t, r) { this._instanceConstructor = t, this.promise = new t(o), this.promise[O] || _(this.promise), d(r) ? (this._remaining = this.length = r.length, this._result = Array(this.length), 0 === this.length ? a(this.promise, this._result) : (this.length = this.length || 0, this._enumerate(r), 0 === this._remaining && a(this.promise, this._result))) : f(this.promise, Error(\"Array Methods must be provided an Array\")); } return t.prototype._enumerate = function (t) { for (var r = 0; this._state === P && r < t.length; r++)\n        this._eachEntry(t[r], r); }, t.prototype._eachEntry = function (t, r) { var u = this._instanceConstructor, c = u.resolve; c === n ? (c = i(t)) === e && t._state !== P ? this._settledAt(t._state, r, t._result) : \"function\" != typeof c ? (this._remaining--, this._result[r] = t) : u === K ? (s(u = new u(o), t, c), this._willSettleAt(u, r)) : this._willSettleAt(new u(function (r) { return r(t); }), r) : this._willSettleAt(c(t), r); }, t.prototype._settledAt = function (t, r, e) { var n = this.promise; n._state === P && (this._remaining--, t === F ? f(n, e) : this._result[r] = e), 0 === this._remaining && a(n, this._result); }, t.prototype._willSettleAt = function (t, r) { var e = this; l(t, void 0, function (t) { return e._settledAt(x, r, t); }, function (t) { return e._settledAt(F, r, t); }); }, t; }(), K = function () { function t(r) { if (this[O] = U++, this._result = this._state = void 0, this._subscribers = [], o !== r) {\n        if (\"function\" != typeof r)\n            throw new TypeError(\"Must pass a resolver fn as 1st arg\");\n        if (!(this instanceof t))\n            throw new TypeError(\"Failed to construct 'Promise': Use the 'new' operator.\");\n        !function (t, r) { try {\n            r(function (r) { u(t, r); }, function (r) { f(t, r); });\n        }\n        catch (r) {\n            f(t, r);\n        } }(this, r);\n    } } return t.prototype.catch = function (t) { return this.then(null, t); }, t.prototype.finally = function (t) { var r = this.constructor; return this.then(function (e) { return r.resolve(t()).then(function () { return e; }); }, function (e) { return r.resolve(t()).then(function () { throw e; }); }); }, t; }(); return K.prototype.then = e, K.all = function (t) { return new D(this, t).promise; }, K.race = function (t) { var r = this; return d(t) ? new r(function (e, n) { for (var o = t.length, i = 0; i < o; i++)\n        r.resolve(t[i]).then(e, n); }) : new r(function (t, r) { return r(new TypeError(\"Must pass array to race\")); }); }, K.resolve = n, K.reject = function (t) { var r = new this(o); return f(r, t), r; }, K._setScheduler = function (t) { m = t; }, K._setAsap = function (t) { g = t; }, K._asap = g, K.polyfill = function () { var t = void 0; if (\"undefined\" != typeof global)\n        t = global;\n    else if (\"undefined\" != typeof self)\n        t = self;\n    else\n        try {\n            t = Function(\"return this\")();\n        }\n        catch (t) {\n            throw Error(\"polyfill failed\");\n        } var r = t.Promise; if (r) {\n        var e = null;\n        try {\n            e = Object.prototype.toString.call(r.resolve());\n        }\n        catch (t) { }\n        if (\"[object Promise]\" === e && !r.cast)\n            return;\n    } t.Promise = K; }, K.Promise = K, K.polyfill(), K; }());\n}\nexports.applyPolyfill = applyPolyfill;\n"
  },
  {
    "path": "content/js/stencil/cjs/es5/polyfills/string.js",
    "content": "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nfunction applyPolyfill(window, document) {\n    String.prototype.endsWith || Object.defineProperty(String.prototype, \"endsWith\", { writable: !0, configurable: !0, value: function (b, a) { if (void 0 === a || a > this.length)\n            a = this.length; return this.substring(a - b.length, a) === b; } });\n    /*!\n    String.prototype.includes\n    */\n    String.prototype.includes || (String.prototype.includes = function (b, a) { \"number\" !== typeof a && (a = 0); return a + b.length > this.length ? !1 : -1 !== this.indexOf(b, a); });\n    /*!\n    String.prototype.startsWith\n    */\n    String.prototype.startsWith || Object.defineProperty(String.prototype, \"startsWith\", { writable: !0, configurable: !0, value: function (b, a) { return this.substr(!a || 0 > a ? 0 : +a, b.length) === b; } });\n}\nexports.applyPolyfill = applyPolyfill;\n"
  },
  {
    "path": "content/js/stencil/cjs/es5/polyfills/tslib.js",
    "content": "\"use strict\";\n// REV: 9dd9aa322c893e5e0b3f1609b1126314ccf37bbb\nObject.defineProperty(exports, \"__esModule\", { value: true });\n/*! *****************************************************************************\nCopyright (c) Microsoft Corporation. All rights reserved.\nLicensed under the Apache License, Version 2.0 (the \"License\"); you may not use\nthis file except in compliance with the License. You may obtain a copy of the\nLicense at http://www.apache.org/licenses/LICENSE-2.0\nTHIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\nKIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED\nWARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,\nMERCHANTABLITY OR NON-INFRINGEMENT.\nSee the Apache Version 2.0 License for specific language governing permissions\nand limitations under the License.\n***************************************************************************** */\n/* global Reflect, Promise */\nvar extendStatics = function (d, b) {\n    extendStatics = Object.setPrototypeOf ||\n        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n        function (d, b) { for (var p in b)\n            if (b.hasOwnProperty(p))\n                d[p] = b[p]; };\n    return extendStatics(d, b);\n};\nfunction __extends(d, b) {\n    extendStatics(d, b);\n    function __() { this.constructor = d; }\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n}\nexports.__extends = __extends;\nexports.__assign = function () {\n    exports.__assign = Object.assign || function __assign(t) {\n        for (var s, i = 1, n = arguments.length; i < n; i++) {\n            s = arguments[i];\n            for (var p in s)\n                if (Object.prototype.hasOwnProperty.call(s, p))\n                    t[p] = s[p];\n        }\n        return t;\n    };\n    return exports.__assign.apply(this, arguments);\n};\nfunction __rest(s, e) {\n    var t = {};\n    for (var p in s)\n        if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n            t[p] = s[p];\n    if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n        for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++)\n            if (e.indexOf(p[i]) < 0)\n                t[p[i]] = s[p[i]];\n    return t;\n}\nexports.__rest = __rest;\nfunction __decorate(decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\")\n        r = Reflect.decorate(decorators, target, key, desc);\n    else\n        for (var i = decorators.length - 1; i >= 0; i--)\n            if (d = decorators[i])\n                r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n}\nexports.__decorate = __decorate;\nfunction __param(paramIndex, decorator) {\n    return function (target, key) { decorator(target, key, paramIndex); };\n}\nexports.__param = __param;\nfunction __metadata(metadataKey, metadataValue) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\")\n        return Reflect.metadata(metadataKey, metadataValue);\n}\nexports.__metadata = __metadata;\nfunction __awaiter(thisArg, _arguments, P, generator) {\n    return new (P || (P = Promise))(function (resolve, reject) {\n        function fulfilled(value) { try {\n            step(generator.next(value));\n        }\n        catch (e) {\n            reject(e);\n        } }\n        function rejected(value) { try {\n            step(generator[\"throw\"](value));\n        }\n        catch (e) {\n            reject(e);\n        } }\n        function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }\n        step((generator = generator.apply(thisArg, _arguments || [])).next());\n    });\n}\nexports.__awaiter = __awaiter;\nfunction __generator(thisArg, body) {\n    var _ = { label: 0, sent: function () { if (t[0] & 1)\n            throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\n    return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function () { return this; }), g;\n    function verb(n) { return function (v) { return step([n, v]); }; }\n    function step(op) {\n        if (f)\n            throw new TypeError(\"Generator is already executing.\");\n        while (_)\n            try {\n                if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done)\n                    return t;\n                if (y = 0, t)\n                    op = [op[0] & 2, t.value];\n                switch (op[0]) {\n                    case 0:\n                    case 1:\n                        t = op;\n                        break;\n                    case 4:\n                        _.label++;\n                        return { value: op[1], done: false };\n                    case 5:\n                        _.label++;\n                        y = op[1];\n                        op = [0];\n                        continue;\n                    case 7:\n                        op = _.ops.pop();\n                        _.trys.pop();\n                        continue;\n                    default:\n                        if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) {\n                            _ = 0;\n                            continue;\n                        }\n                        if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) {\n                            _.label = op[1];\n                            break;\n                        }\n                        if (op[0] === 6 && _.label < t[1]) {\n                            _.label = t[1];\n                            t = op;\n                            break;\n                        }\n                        if (t && _.label < t[2]) {\n                            _.label = t[2];\n                            _.ops.push(op);\n                            break;\n                        }\n                        if (t[2])\n                            _.ops.pop();\n                        _.trys.pop();\n                        continue;\n                }\n                op = body.call(thisArg, _);\n            }\n            catch (e) {\n                op = [6, e];\n                y = 0;\n            }\n            finally {\n                f = t = 0;\n            }\n        if (op[0] & 5)\n            throw op[1];\n        return { value: op[0] ? op[1] : void 0, done: true };\n    }\n}\nexports.__generator = __generator;\nfunction __exportStar(m, exports) {\n    for (var p in m)\n        if (!exports.hasOwnProperty(p))\n            exports[p] = m[p];\n}\nexports.__exportStar = __exportStar;\nfunction __values(o) {\n    var m = typeof Symbol === \"function\" && o[Symbol.iterator], i = 0;\n    if (m)\n        return m.call(o);\n    return {\n        next: function () {\n            if (o && i >= o.length)\n                o = void 0;\n            return { value: o && o[i++], done: !o };\n        }\n    };\n}\nexports.__values = __values;\nfunction __read(o, n) {\n    var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n    if (!m)\n        return o;\n    var i = m.call(o), r, ar = [], e;\n    try {\n        while ((n === void 0 || n-- > 0) && !(r = i.next()).done)\n            ar.push(r.value);\n    }\n    catch (error) {\n        e = { error: error };\n    }\n    finally {\n        try {\n            if (r && !r.done && (m = i[\"return\"]))\n                m.call(i);\n        }\n        finally {\n            if (e)\n                throw e.error;\n        }\n    }\n    return ar;\n}\nexports.__read = __read;\nfunction __spread() {\n    for (var ar = [], i = 0; i < arguments.length; i++)\n        ar = ar.concat(__read(arguments[i]));\n    return ar;\n}\nexports.__spread = __spread;\nfunction __await(v) {\n    return this instanceof __await ? (this.v = v, this) : new __await(v);\n}\nexports.__await = __await;\nfunction __makeTemplateObject(cooked, raw) {\n    if (Object.defineProperty) {\n        Object.defineProperty(cooked, \"raw\", { value: raw });\n    }\n    else {\n        cooked.raw = raw;\n    }\n    return cooked;\n}\nexports.__makeTemplateObject = __makeTemplateObject;\n;\nfunction __importStar(mod) {\n    if (mod && mod.__esModule)\n        return mod;\n    var result = {};\n    if (mod != null)\n        for (var k in mod)\n            if (Object.hasOwnProperty.call(mod, k))\n                result[k] = mod[k];\n    result.default = mod;\n    return result;\n}\nexports.__importStar = __importStar;\nfunction __importDefault(mod) {\n    return (mod && mod.__esModule) ? mod : { default: mod };\n}\nexports.__importDefault = __importDefault;\n"
  },
  {
    "path": "content/js/stencil/cjs/es5/polyfills/url.js",
    "content": "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nfunction applyPolyfill(window, document) {\n    (function (e) { var t = function () { try {\n        return !!Symbol.iterator;\n    }\n    catch (e) {\n        return false;\n    } }; var n = t(); var r = function (e) { var t = { next: function () { var t = e.shift(); return { done: t === void 0, value: t }; } }; if (n) {\n        t[Symbol.iterator] = function () { return t; };\n    } return t; }; var i = function (e) { return encodeURIComponent(e).replace(/%20/g, \"+\"); }; var o = function (e) { return decodeURIComponent(e).replace(/\\+/g, \" \"); }; var a = function () { var t = function (e) { Object.defineProperty(this, \"_entries\", { value: {} }); if (typeof e === \"string\") {\n        if (e !== \"\") {\n            e = e.replace(/^\\?/, \"\");\n            var n = e.split(\"&\");\n            var r;\n            for (var i = 0; i < n.length; i++) {\n                r = n[i].split(\"=\");\n                this.append(o(r[0]), r.length > 1 ? o(r[1]) : \"\");\n            }\n        }\n    }\n    else if (e instanceof t) {\n        var a = this;\n        e.forEach(function (e, t) { a.append(e, t); });\n    } }; var a = t.prototype; a.append = function (e, t) { if (e in this._entries) {\n        this._entries[e].push(t.toString());\n    }\n    else {\n        this._entries[e] = [t.toString()];\n    } }; a.delete = function (e) { delete this._entries[e]; }; a.get = function (e) { return e in this._entries ? this._entries[e][0] : null; }; a.getAll = function (e) { return e in this._entries ? this._entries[e].slice(0) : []; }; a.has = function (e) { return e in this._entries; }; a.set = function (e, t) { this._entries[e] = [t.toString()]; }; a.forEach = function (e, t) { var n; for (var r in this._entries) {\n        if (this._entries.hasOwnProperty(r)) {\n            n = this._entries[r];\n            for (var i = 0; i < n.length; i++) {\n                e.call(t, n[i], r, this);\n            }\n        }\n    } }; a.keys = function () { var e = []; this.forEach(function (t, n) { e.push(n); }); return r(e); }; a.values = function () { var e = []; this.forEach(function (t) { e.push(t); }); return r(e); }; a.entries = function () { var e = []; this.forEach(function (t, n) { e.push([n, t]); }); return r(e); }; if (n) {\n        a[Symbol.iterator] = a.entries;\n    } a.toString = function () { var e = []; this.forEach(function (t, n) { e.push(i(n) + \"=\" + i(t)); }); return e.join(\"&\"); }; e.URLSearchParams = t; }; if (!(\"URLSearchParams\" in e) || new URLSearchParams(\"?a=1\").toString() !== \"a=1\") {\n        a();\n    } })(typeof global !== \"undefined\" ? global : typeof window !== \"undefined\" ? window : typeof self !== \"undefined\" ? self : this);\n    (function (e) { var t = function () { try {\n        var e = new URL(\"b\", \"http://a\");\n        e.pathname = \"c%20d\";\n        return e.href === \"http://a/c%20d\" && e.searchParams;\n    }\n    catch (e) {\n        return false;\n    } }; var n = function () { var t = e.URL; var n = function (e, t) { if (typeof e !== \"string\")\n        e = String(e); var n = document.implementation.createHTMLDocument(\"\"); window.doc = n; if (t) {\n        var r = n.createElement(\"base\");\n        r.href = t;\n        n.head.appendChild(r);\n    } var i = n.createElement(\"a\"); i.href = e; n.body.appendChild(i); i.href = i.href; if (i.protocol === \":\" || !/:/.test(i.href)) {\n        throw new TypeError(\"Invalid URL\");\n    } Object.defineProperty(this, \"_anchorElement\", { value: i }); }; var r = n.prototype; var i = function (e) { Object.defineProperty(r, e, { get: function () { return this._anchorElement[e]; }, set: function (t) { this._anchorElement[e] = t; }, enumerable: true }); }; [\"hash\", \"host\", \"hostname\", \"port\", \"protocol\", \"search\"].forEach(function (e) { i(e); }); Object.defineProperties(r, { toString: { get: function () { var e = this; return function () { return e.href; }; } }, href: { get: function () { return this._anchorElement.href.replace(/\\?$/, \"\"); }, set: function (e) { this._anchorElement.href = e; }, enumerable: true }, pathname: { get: function () { return this._anchorElement.pathname.replace(/(^\\/?)/, \"/\"); }, set: function (e) { this._anchorElement.pathname = e; }, enumerable: true }, origin: { get: function () { var e = { \"http:\": 80, \"https:\": 443, \"ftp:\": 21 }[this._anchorElement.protocol]; var t = this._anchorElement.port != e && this._anchorElement.port !== \"\"; return this._anchorElement.protocol + \"//\" + this._anchorElement.hostname + (t ? \":\" + this._anchorElement.port : \"\"); }, enumerable: true }, password: { get: function () { return \"\"; }, set: function (e) { }, enumerable: true }, username: { get: function () { return \"\"; }, set: function (e) { }, enumerable: true }, searchParams: { get: function () { var e = new URLSearchParams(this.search); var t = this; [\"append\", \"delete\", \"set\"].forEach(function (n) { var r = e[n]; e[n] = function () { r.apply(e, arguments); t.search = e.toString(); }; }); return e; }, enumerable: true } }); n.createObjectURL = function (e) { return t.createObjectURL.apply(t, arguments); }; n.revokeObjectURL = function (e) { return t.revokeObjectURL.apply(t, arguments); }; e.URL = n; }; if (!t()) {\n        n();\n    } if (e.location !== void 0 && !(\"origin\" in e.location)) {\n        var r = function () { return e.location.protocol + \"//\" + e.location.hostname + (e.location.port ? \":\" + e.location.port : \"\"); };\n        try {\n            Object.defineProperty(e.location, \"origin\", { get: r, enumerable: true });\n        }\n        catch (t) {\n            setInterval(function () { e.location.origin = r(); }, 100);\n        }\n    } })(typeof global !== \"undefined\" ? global : typeof window !== \"undefined\" ? window : typeof self !== \"undefined\" ? self : this);\n}\nexports.applyPolyfill = applyPolyfill;\n"
  },
  {
    "path": "content/js/stencil/collection/collection-manifest.json",
    "content": "{\n  \"components\": [\n    {\n      \"tag\": \"icon-external\",\n      \"dependencies\": [],\n      \"componentClass\": \"IconExternal\",\n      \"componentPath\": \"components/icon-external/icon-external.js\",\n      \"styles\": {\n        \"$\": {\n          \"stylePaths\": [\n            \"components/icon-external/icon-external.scss\"\n          ]\n        }\n      }\n    },\n    {\n      \"tag\": \"ionic-appflow-activator\",\n      \"dependencies\": [],\n      \"componentClass\": \"IonicAppflowActivator\",\n      \"componentPath\": \"components/ionic-appflow-activatior/ionic-appflow-activatior.js\",\n      \"styles\": {\n        \"$\": {\n          \"stylePaths\": [\n            \"components/ionic-appflow-activatior/ionic-appflow-activator.scss\"\n          ]\n        }\n      },\n      \"states\": [\n        {\n          \"name\": \"$circles\"\n        },\n        {\n          \"name\": \"$lis\"\n        },\n        {\n          \"name\": \"active\"\n        },\n        {\n          \"name\": \"screenshots\"\n        }\n      ],\n      \"hostElement\": {\n        \"name\": \"el\"\n      }\n    },\n    {\n      \"tag\": \"ionic-bar-chart\",\n      \"dependencies\": [],\n      \"componentClass\": \"IonicBarChart\",\n      \"componentPath\": \"components/ionic-bar-chart/ionic-bar-chart.js\",\n      \"styles\": {\n        \"$\": {\n          \"stylePaths\": [\n            \"components/ionic-bar-chart/ionic-bar-chart.scss\"\n          ]\n        }\n      },\n      \"props\": [\n        {\n          \"name\": \"color\",\n          \"type\": \"String\",\n          \"attr\": \"color\"\n        },\n        {\n          \"name\": \"data\",\n          \"type\": \"String\",\n          \"attr\": \"data\"\n        }\n      ]\n    },\n    {\n      \"tag\": \"ionic-button\",\n      \"dependencies\": [],\n      \"componentClass\": \"IonicButton\",\n      \"componentPath\": \"components/ionic-button/ionic-button.js\",\n      \"styles\": {\n        \"$\": {\n          \"stylePaths\": [\n            \"components/ionic-button/ionic-button.scss\"\n          ]\n        }\n      },\n      \"props\": [\n        {\n          \"name\": \"color\",\n          \"type\": \"String\",\n          \"attr\": \"color\"\n        },\n        {\n          \"name\": \"disabled\",\n          \"type\": \"Boolean\",\n          \"attr\": \"disabled\"\n        },\n        {\n          \"name\": \"type\",\n          \"type\": \"String\",\n          \"attr\": \"type\"\n        }\n      ]\n    },\n    {\n      \"tag\": \"ionic-newsletter-signup\",\n      \"dependencies\": [\n        \"ion-icon\",\n        \"ionic-button\"\n      ],\n      \"componentClass\": \"IonicNewsletterSignup\",\n      \"componentPath\": \"components/ionic-newsletter-signup/ionic-newsletter-signup.js\",\n      \"styles\": {\n        \"$\": {\n          \"stylePaths\": [\n            \"components/ionic-newsletter-signup/ionic-newsletter-signup.scss\"\n          ]\n        }\n      },\n      \"props\": [\n        {\n          \"name\": \"arrowMode\",\n          \"type\": \"Boolean\",\n          \"attr\": \"arrow-mode\"\n        },\n        {\n          \"name\": \"buttonText\",\n          \"type\": \"String\",\n          \"attr\": \"button-text\"\n        },\n        {\n          \"name\": \"darkMode\",\n          \"type\": \"Boolean\",\n          \"attr\": \"dark-mode\"\n        },\n        {\n          \"name\": \"homepageMode\",\n          \"type\": \"Boolean\",\n          \"attr\": \"homepage-mode\"\n        },\n        {\n          \"name\": \"kind\",\n          \"type\": \"String\",\n          \"attr\": \"kind\"\n        },\n        {\n          \"name\": \"lg\",\n          \"type\": \"Boolean\",\n          \"attr\": \"lg\"\n        },\n        {\n          \"name\": \"placeholder\",\n          \"type\": \"String\",\n          \"attr\": \"placeholder\"\n        }\n      ],\n      \"states\": [\n        {\n          \"name\": \"email\"\n        },\n        {\n          \"name\": \"hasSubmitted\"\n        },\n        {\n          \"name\": \"isLoading\"\n        }\n      ]\n    },\n    {\n      \"tag\": \"ionic-quick-signup\",\n      \"dependencies\": [],\n      \"componentClass\": \"IonicQuickSignup\",\n      \"componentPath\": \"components/ionic-quick-signup/ionic-quick-signup.js\",\n      \"styles\": {\n        \"$\": {\n          \"stylePaths\": [\n            \"components/ionic-quick-signup/ionic-quick-signup.scss\"\n          ]\n        }\n      },\n      \"props\": [\n        {\n          \"name\": \"buttonColor\",\n          \"type\": \"String\",\n          \"attr\": \"button-color\"\n        },\n        {\n          \"name\": \"showPricingNotice\",\n          \"type\": \"Boolean\",\n          \"attr\": \"show-pricing-notice\"\n        },\n        {\n          \"name\": \"transparentInput\",\n          \"type\": \"Boolean\",\n          \"attr\": \"transparent-input\"\n        }\n      ]\n    },\n    {\n      \"tag\": \"ionic-search\",\n      \"dependencies\": [\n        \"ion-icon\"\n      ],\n      \"componentClass\": \"IonicSearch\",\n      \"componentPath\": \"components/ionic-search/ionic-search.js\",\n      \"styles\": {\n        \"$\": {\n          \"stylePaths\": [\n            \"components/ionic-search/ionic-search.scss\"\n          ]\n        }\n      },\n      \"props\": [\n        {\n          \"name\": \"mobile\",\n          \"type\": \"Boolean\",\n          \"attr\": \"mobile\"\n        }\n      ],\n      \"states\": [\n        {\n          \"name\": \"active\"\n        },\n        {\n          \"name\": \"dragStyles\"\n        },\n        {\n          \"name\": \"pending\"\n        },\n        {\n          \"name\": \"query\"\n        },\n        {\n          \"name\": \"results\"\n        }\n      ],\n      \"hostElement\": {\n        \"name\": \"el\"\n      }\n    },\n    {\n      \"tag\": \"ionic-slider\",\n      \"dependencies\": [],\n      \"componentClass\": \"IonicSlider\",\n      \"componentPath\": \"components/ionic-slider/ionic-slider.js\",\n      \"styles\": {\n        \"$\": {\n          \"stylePaths\": [\n            \"components/ionic-slider/ionic-slider.scss\"\n          ]\n        }\n      },\n      \"states\": [\n        {\n          \"name\": \"current\"\n        },\n        {\n          \"name\": \"status\"\n        },\n        {\n          \"name\": \"ticker\"\n        }\n      ]\n    },\n    {\n      \"tag\": \"ionic-snap-bar\",\n      \"dependencies\": [],\n      \"componentClass\": \"IonicSnapBar\",\n      \"componentPath\": \"components/ionic-snap-bar/ionic-snap-bar.js\",\n      \"styles\": {\n        \"$\": {\n          \"stylePaths\": [\n            \"components/ionic-snap-bar/ionic-snap-bar.scss\"\n          ]\n        }\n      },\n      \"states\": [\n        {\n          \"name\": \"active\"\n        }\n      ]\n    },\n    {\n      \"tag\": \"ionic-toggle\",\n      \"dependencies\": [],\n      \"componentClass\": \"IonicToggle\",\n      \"componentPath\": \"components/ionic-toggle/ionic-toggle.js\",\n      \"styles\": {\n        \"$\": {\n          \"stylePaths\": [\n            \"components/ionic-toggle/ionic-toggle.scss\"\n          ]\n        }\n      },\n      \"listeners\": [\n        {\n          \"event\": \"toggleSelected\",\n          \"method\": \"selectionChanged\",\n          \"passive\": false,\n          \"capture\": false\n        }\n      ],\n      \"hostElement\": {\n        \"name\": \"el\"\n      },\n      \"shadow\": true\n    },\n    {\n      \"tag\": \"ionic-toggle-button\",\n      \"dependencies\": [],\n      \"componentClass\": \"IonicToggleButton\",\n      \"componentPath\": \"components/ionic-toggle/ionic-toggle-button.js\",\n      \"styles\": {\n        \"$\": {\n          \"stylePaths\": [\n            \"components/ionic-toggle/ionic-toggle-button.scss\"\n          ]\n        }\n      },\n      \"props\": [\n        {\n          \"name\": \"tab\",\n          \"type\": \"String\",\n          \"attr\": \"tab\"\n        },\n        {\n          \"name\": \"title\",\n          \"type\": \"String\",\n          \"attr\": \"title\"\n        }\n      ],\n      \"states\": [\n        {\n          \"name\": \"selected\"\n        }\n      ],\n      \"methods\": [\n        {\n          \"name\": \"deselect\"\n        },\n        {\n          \"name\": \"select\"\n        }\n      ],\n      \"events\": [\n        {\n          \"event\": \"toggleSelected\"\n        }\n      ],\n      \"shadow\": true\n    },\n    {\n      \"tag\": \"ionic-toggle-tab\",\n      \"dependencies\": [],\n      \"componentClass\": \"IonicToggleTab\",\n      \"componentPath\": \"components/ionic-toggle/ionic-toggle-tab.js\",\n      \"styles\": {},\n      \"props\": [\n        {\n          \"name\": \"tab\",\n          \"type\": \"String\",\n          \"attr\": \"tab\"\n        }\n      ],\n      \"states\": [\n        {\n          \"name\": \"hidden\"\n        }\n      ],\n      \"methods\": [\n        {\n          \"name\": \"hide\"\n        },\n        {\n          \"name\": \"show\"\n        }\n      ],\n      \"shadow\": true\n    }\n  ],\n  \"collections\": [\n    {\n      \"name\": \"ionicons\",\n      \"tags\": [\n        \"ion-icon\"\n      ]\n    }\n  ],\n  \"compiler\": {\n    \"name\": \"@stencil/core\",\n    \"version\": \"0.18.1\",\n    \"typescriptVersion\": \"3.3.3\"\n  },\n  \"bundles\": []\n}"
  },
  {
    "path": "content/js/stencil/collection/components/icon-external/icon-external.css",
    "content": "icon-external {\n  color: #a6b8d2;\n  width: .8em;\n  height: .8em;\n  display: inline-block; }\n  icon-external svg {\n    fill: currentColor; }\n    icon-external svg .new-tab__box {\n      opacity: .5; }\n    icon-external svg .new-tab__arrow {\n      transition: .2s transform ease-out, .2s fill ease;\n      will-change: trasnform, fill; }\n\na:hover icon-external,\nicon-external:hover {\n  color: #488aff; }\n  a:hover icon-external .new-tab__arrow,\n  icon-external:hover .new-tab__arrow {\n    transform: translate(1px, -1px); }\n"
  },
  {
    "path": "content/js/stencil/collection/components/icon-external/icon-external.js",
    "content": "export class IconExternal {\r\n    render() {\r\n        return (h(\"svg\", { class: \"new-tab\", viewBox: \"0 0 12 12\", \"data-ssrc\": \"59.1\" },\r\n            h(\"g\", { transform: \"translate(0,1)\", \"data-ssrc\": \"59.0\" },\r\n                h(\"rect\", { class: \"new-tab__box\", x: \"0\", y: \"2\", width: \"9\", height: \"9\", rx: \"1.5\", \"data-ssrc\": \"59.0.\" }),\r\n                h(\"path\", { class: \"new-tab__arrow\", d: \"M9.18198052,1 L6.5,1 L6.5,0 L11,0 L11,1 L11,4.5 L10,4.5 L10,1.59619408 L4.02512627,7.57106781 L3.31801948,6.86396103 L9.18198052,1 Z\", \"data-ssrc\": \"59.1.\" }))));\r\n    }\r\n    static get is() { return \"icon-external\"; }\r\n    static get style() { return \"/**style-placeholder:icon-external:**/\"; }\r\n}\r\n"
  },
  {
    "path": "content/js/stencil/collection/components/icon-external/icon-external.scss",
    "content": "@import '../../vars';\n\nicon-external {\n  color: #a6b8d2;\n  width: .8em;\n  height: .8em;\n  display: inline-block;\n\n  svg {\n    fill: currentColor;\n\n    .new-tab__box {\n      opacity: .5;\n    }\n\n    .new-tab__arrow {\n      transition: .2s transform ease-out, .2s fill ease;\n      will-change: trasnform, fill;\n    }\n  }\n}\n\na:hover icon-external,\nicon-external:hover {\n  color: $blue;\n\n  .new-tab__arrow {\n    transform: translate(1px, -1px);\n  }\n}\n"
  },
  {
    "path": "content/js/stencil/collection/components/ionic-appflow-activatior/ionic-appflow-activatior.js",
    "content": "import { TweenLite } from \"gsap/TweenLite\";\r\nexport class IonicAppflowActivator {\r\n    constructor() {\r\n        this.$circles = [];\r\n        this.$lis = [];\r\n        this.screenshots = [];\r\n        this.active = null;\r\n        this.duration = 6;\r\n        this.quickDuration = .25;\r\n        this.r = 31;\r\n        this.gsRefs = [];\r\n        this.scrollPause = null;\r\n        this.circumference = this.r * 2 * Math.PI;\r\n        this.animationSelect = this.animationSelect.bind(this);\r\n        this.animationStart = this.animationStart.bind(this);\r\n    }\r\n    componentDidLoad() {\r\n        setTimeout(this.animationStart, 2000, 0);\r\n        const addCircle = (li, i) => {\r\n            this.$lis[i] = li;\r\n            this.$circles[i] = li.querySelector('.progress-ring__circle');\r\n            this.screenshots[i] = li.querySelector('a').dataset.screenshot;\r\n            if (li.nextElementSibling && li.nextElementSibling.nodeName === 'LI') {\r\n                addCircle(li.nextElementSibling, i + 1);\r\n            }\r\n        };\r\n        addCircle(this.el.querySelector('li:nth-child(1)'), 0);\r\n        this.active = 0;\r\n    }\r\n    animationStart(index) {\r\n        console.log('starting');\r\n        if (window.pageYOffset > 1000) {\r\n            console.log('pausing');\r\n            this.scrollPause = setTimeout(this.animationStart, 5000, 0);\r\n            return;\r\n        }\r\n        this.active = index;\r\n        this.$lis[index].classList.add('active');\r\n        TweenLite.to(this.$circles[index], .4, {\r\n            opacity: 1\r\n        });\r\n        TweenLite.to(this.$circles[index], this.duration, {\r\n            strokeDashoffset: 0,\r\n            onCompleteScope: this,\r\n            onComplete: () => {\r\n                this.animationStart(index >= this.$circles.length - 1 ? 0 : index + 1);\r\n                this.$lis[index].classList.remove('active');\r\n                TweenLite.to(this.$circles[index], .2, {\r\n                    opacity: 0,\r\n                    onCompleteScope: this,\r\n                    onComplete: () => {\r\n                        TweenLite.to(this.$circles[index], 0, {\r\n                            strokeDashoffset: this.circumference,\r\n                            lazy: true\r\n                        });\r\n                    }\r\n                });\r\n            }\r\n        });\r\n    }\r\n    animationSelect(index) {\r\n        this.$lis[index].classList.add('active');\r\n        this.active = index;\r\n        if (this.scrollPause) {\r\n            clearTimeout(this.scrollPause);\r\n        }\r\n        this.animationStopOthers(index);\r\n        TweenLite.to(this.$circles[index], this.quickDuration, {\r\n            strokeDashoffset: 0,\r\n            opacity: 1,\r\n            onCompleteScope: this,\r\n            onComplete: () => {\r\n                this.animationStopOthers(index);\r\n            }\r\n        });\r\n    }\r\n    animationRestart(index) {\r\n        this.animationStopOthers(index);\r\n        TweenLite.to(this.$circles[index], .5, {\r\n            strokeDashoffset: this.circumference * -1,\r\n            lazy: true,\r\n            onCompleteScope: this,\r\n            onComplete: () => {\r\n                TweenLite.to(this.$circles[index], 0, {\r\n                    strokeDashoffset: this.circumference,\r\n                    opacity: 0,\r\n                    lazy: true,\r\n                    onCompleteScope: this,\r\n                    onComplete: () => {\r\n                        this.animationStart(index);\r\n                    }\r\n                });\r\n            }\r\n        });\r\n    }\r\n    animationStopOthers(index) {\r\n        const circles = [];\r\n        this.$circles.forEach((circle, i) => {\r\n            if (i != index) {\r\n                circles.push(circle);\r\n                this.$lis[i].classList.remove('active');\r\n            }\r\n        });\r\n        TweenLite.to(circles, .2, {\r\n            opacity: 0,\r\n            lazy: true,\r\n            onCompleteScope: this,\r\n            onComplete: () => {\r\n                TweenLite.to(circles, 0, {\r\n                    strokeDashoffset: this.circumference,\r\n                    opacity: 0,\r\n                    lazy: true\r\n                });\r\n            }\r\n        });\r\n    }\r\n    circle(percent = 0) {\r\n        return (h(\"svg\", { class: \"progress-ring\", height: \"64\", width: \"64\" },\r\n            h(\"circle\", { class: \"progress-ring__circle\", stroke: \"#6C89F7\", \"stroke-width\": \"2\", fill: \"transparent\", r: this.r, cx: \"32\", cy: \"32\", style: {\r\n                    strokeDasharray: `${this.circumference} ${this.circumference}`,\r\n                    strokeDashoffset: this.circumference - percent / 100 * this.circumference\r\n                } })));\r\n    }\r\n    render() {\r\n        return ([\r\n            h(\"div\", { class: \"app-screenshot\" }, this.screenshots.map((screenshot, i) => h(\"img\", { class: i === this.active ? 'active' : 'inactive', src: screenshot }))),\r\n            h(\"nav\", null,\r\n                h(\"ul\", null,\r\n                    h(\"li\", { onMouseEnter: () => this.animationSelect(0), onMouseLeave: () => this.animationRestart(0) },\r\n                        this.circle(),\r\n                        h(\"slot\", { name: \"1\" })),\r\n                    h(\"li\", { onMouseEnter: () => this.animationSelect(1), onMouseLeave: () => this.animationRestart(1) },\r\n                        this.circle(),\r\n                        h(\"slot\", { name: \"2\" })),\r\n                    h(\"li\", { onMouseEnter: () => this.animationSelect(2), onMouseLeave: () => this.animationRestart(2) },\r\n                        this.circle(),\r\n                        h(\"slot\", { name: \"3\" }))))\r\n        ]);\r\n    }\r\n    static get is() { return \"ionic-appflow-activator\"; }\r\n    static get properties() { return {\r\n        \"$circles\": {\r\n            \"state\": true\r\n        },\r\n        \"$lis\": {\r\n            \"state\": true\r\n        },\r\n        \"active\": {\r\n            \"state\": true\r\n        },\r\n        \"el\": {\r\n            \"elementRef\": true\r\n        },\r\n        \"screenshots\": {\r\n            \"state\": true\r\n        }\r\n    }; }\r\n    static get style() { return \"/**style-placeholder:ionic-appflow-activator:**/\"; }\r\n}\r\n"
  },
  {
    "path": "content/js/stencil/collection/components/ionic-appflow-activatior/ionic-appflow-activator.css",
    "content": "ionic-appflow-activator nav {\n  background: white;\n  position: sticky;\n  top: 100px;\n  width: 100%;\n  margin-top: 100px; }\n\nionic-appflow-activator ul {\n  display: flex;\n  justify-content: space-between;\n  max-width: 100%;\n  width: 600px;\n  padding-left: 10px;\n  padding-right: 10px;\n  margin-top: -44px;\n  margin-right: auto;\n  margin-left: auto; }\n\nionic-appflow-activator li {\n  width: 120px;\n  position: relative;\n  list-style: none; }\n\nionic-appflow-activator .progress-ring {\n  position: absolute;\n  top: 0px;\n  left: calc(50% - 32px);\n  pointer-events: none; }\n  ionic-appflow-activator .progress-ring__circle {\n    opacity: 0;\n    transform: rotate(-90deg);\n    transform-origin: 50% 50%; }\n\nionic-appflow-activator a {\n  text-align: center;\n  display: block;\n  padding-top: 64px;\n  cursor: pointer; }\n  ionic-appflow-activator a .icon,\n  ionic-appflow-activator a .icon-active {\n    position: absolute;\n    border-radius: 50%;\n    height: 56px;\n    width: 56px;\n    top: 4px;\n    left: calc(50% - 28px);\n    transition: .2s opacity ease, .2s transform ease; }\n  ionic-appflow-activator a .icon-active {\n    opacity: 0;\n    transform: scale(1.1, 1.1);\n    transition: .2s opacity ease, .2s transform ease; }\n  ionic-appflow-activator a span {\n    font-size: 14px;\n    line-height: 22px;\n    text-align: center;\n    letter-spacing: 0.06em;\n    text-transform: uppercase;\n    font-weight: 600;\n    color: #92A1B3;\n    transition: .2s color ease; }\n\nionic-appflow-activator .active .icon {\n  transform: scale(1.1, 1.1);\n  opacity: 0; }\n\nionic-appflow-activator .active .icon-active {\n  opacity: 1;\n  transform: scale(1, 1); }\n\nionic-appflow-activator .active span {\n  color: #6C89F7; }\n\nionic-appflow-activator .app-screenshot {\n  position: relative; }\n  ionic-appflow-activator .app-screenshot img {\n    position: absolute;\n    top: 0;\n    right: 0;\n    bottom: 0;\n    left: 0;\n    opacity: 0;\n    transform: scale(1.01, 1.01);\n    transition: .2s opacity ease, .2s transform ease; }\n    ionic-appflow-activator .app-screenshot img.active {\n      opacity: 1;\n      transform: none; }\n\n@keyframes full-circle {\n  to {\n    stroke-dashoffset: 0; } }\n"
  },
  {
    "path": "content/js/stencil/collection/components/ionic-appflow-activatior/ionic-appflow-activator.scss",
    "content": "@import '../../vars';\n\nionic-appflow-activator {\n  nav {\n    background: white;\n    position: sticky;\n    top: 100px;\n    width: 100%;\n    margin-top: 100px;\n  }\n\n  ul {\n    display: flex;\n    justify-content: space-between;\n    max-width: 100%;\n    width: 600px;\n    padding-left: 10px;\n    padding-right: 10px;\n    margin-top: -44px;\n    margin-right: auto;\n    margin-left: auto;\n  }\n\n  li {\n    width: 120px;\n    position: relative;\n    list-style: none;\n  }\n\n  .progress-ring {\n    position: absolute;\n    top: 0px;\n    left: calc(50% - 32px);\n    pointer-events: none;\n\n    &__circle {\n      // transition: 0.35s stroke-dashoffset ease;\n      // axis compensation\n      opacity: 0;\n      transform: rotate(-90deg);\n      transform-origin: 50% 50%;\n      // animation: 5s full-circle infinite;\n    }\n\n    &:hover .progress-ring__circle {\n      // stroke-dashoffset: 0 !important;\n    }\n  }\n\n  a {\n    text-align: center;\n    display: block;\n    padding-top: 64px;\n    cursor: pointer;\n\n    .icon,\n    .icon-active {\n      position: absolute;\n      border-radius: 50%;\n      height: 56px;\n      width: 56px;\n      top: 4px;\n      left: calc(50% - 28px);\n      transition: .2s opacity ease, .2s transform ease;\n    }\n\n    .icon-active {\n      opacity: 0;\n      transform: scale(1.1, 1.1);\n      transition: .2s opacity ease, .2s transform ease;\n    }\n\n    span {\n      font-size: 14px;\n      line-height: 22px;\n      text-align: center;\n      letter-spacing: 0.06em;\n      text-transform: uppercase;\n      font-weight: 600;\n      color: #92A1B3;\n      transition: .2s color ease;\n    }\n  }\n\n  .active {\n    .icon {\n      transform: scale(1.1, 1.1);\n      opacity: 0;\n    }\n\n    .icon-active {\n      opacity: 1;\n      transform: scale(1, 1);\n    }\n\n    span  {\n      color: #6C89F7;\n    }\n  }\n\n  .app-screenshot {\n    position: relative;\n\n    img {\n      position: absolute;\n      top: 0;\n      right: 0;\n      bottom: 0;\n      left: 0;\n      opacity: 0;\n      transform: scale(1.01, 1.01);\n      transition: .2s opacity ease, .2s transform ease;\n\n      &.active {\n        opacity: 1;\n        transform: none;\n      }\n    }\n  }\n}\n\n\n@keyframes full-circle {\n  to  { stroke-dashoffset: 0; }\n}"
  },
  {
    "path": "content/js/stencil/collection/components/ionic-bar-chart/ionic-bar-chart.css",
    "content": "ionic-bar-chart {\n  font-style: normal;\n  font-weight: normal;\n  line-height: normal;\n  font-size: 16px;\n  display: block;\n  letter-spacing: -0.04em; }\n  ionic-bar-chart .bar-container {\n    width: 100%;\n    padding-right: 50px;\n    max-width: 697px; }\n  ionic-bar-chart .bar {\n    height: 12px;\n    position: relative;\n    border-radius: 2px; }\n    ionic-bar-chart .bar span {\n      position: absolute;\n      right: -40px;\n      font-weight: 500;\n      top: -3px; }\n  ionic-bar-chart strong {\n    margin-top: 10px;\n    display: block;\n    font-weight: 400;\n    margin-bottom: 34px; }\n"
  },
  {
    "path": "content/js/stencil/collection/components/ionic-bar-chart/ionic-bar-chart.js",
    "content": "export class IonicBarChart {\r\n    constructor() {\r\n    }\r\n    componentWillLoad() {\r\n    }\r\n    componentDidLoad() {\r\n    }\r\n    hexToRgb(hex) {\r\n        var shorthandRegex = /^#?([a-f\\d])([a-f\\d])([a-f\\d])$/i;\r\n        hex = hex.replace(shorthandRegex, function (_, r, g, b) {\r\n            return r + r + g + g + b + b;\r\n        });\r\n        var result = /^\\s?#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i.exec(hex);\r\n        return result ?\r\n            `${parseInt(result[1], 16)}, ${parseInt(result[2], 16)}, ` +\r\n                `${parseInt(result[3], 16)}` : null;\r\n    }\r\n    prepareData() {\r\n        let max = 0;\r\n        const color = this.color ? this.color.split(',') : ['#92E1A7', '#51A7FF'];\r\n        const dataObj = JSON.parse(this.data.replace(/'/g, '\"'));\r\n        return Object.keys(dataObj).map((key) => {\r\n            if (max < dataObj[key]) {\r\n                max = dataObj[key];\r\n            }\r\n            return {\r\n                name: key,\r\n                value: parseInt(dataObj[key], 10)\r\n            };\r\n        }).map((item, i) => {\r\n            return Object.assign({}, item, { styles: {\r\n                    bar: {\r\n                        width: `${Math.round((item.value / max) * 100)}%`,\r\n                        background: i > 1 ?\r\n                            `rgba(91,112,139) linear-gradient(to right, ${color.map(item => `rgba(${this.hexToRgb(item)}, .2)`).join(', ')})` :\r\n                            `linear-gradient(to right, ${color.join(', ')})`\r\n                    },\r\n                    text: {\r\n                        color: i > 1 ? '#5B708B' : color[color.length - 1]\r\n                    }\r\n                } });\r\n        });\r\n    }\r\n    render() {\r\n        return [\r\n            h(\"figure\", null, this.prepareData().map(item => {\r\n                return [\r\n                    h(\"div\", { class: \"bar-container\" },\r\n                        h(\"div\", { class: \"bar\", style: item.styles.bar },\r\n                            h(\"span\", { style: item.styles.text },\r\n                                item.value,\r\n                                \"%\"))),\r\n                    h(\"strong\", null, item.name)\r\n                ];\r\n            }))\r\n        ];\r\n    }\r\n    static get is() { return \"ionic-bar-chart\"; }\r\n    static get properties() { return {\r\n        \"color\": {\r\n            \"type\": String,\r\n            \"attr\": \"color\"\r\n        },\r\n        \"data\": {\r\n            \"type\": String,\r\n            \"attr\": \"data\"\r\n        }\r\n    }; }\r\n    static get style() { return \"/**style-placeholder:ionic-bar-chart:**/\"; }\r\n}\r\n"
  },
  {
    "path": "content/js/stencil/collection/components/ionic-bar-chart/ionic-bar-chart.scss",
    "content": "@import '../../vars';\n\nionic-bar-chart {\n  font-style: normal;\n  font-weight: normal;\n  line-height: normal;\n  font-size: 16px;\n  display: block;\n  letter-spacing: -0.04em;\n\n  .bar-container {\n    width: 100%;\n    padding-right: 50px;\n    max-width: 697px;\n  }\n\n  .bar {\n    height: 12px;\n    position: relative;\n    border-radius: 2px;\n\n    span {\n      position: absolute;\n      right: -40px;\n      font-weight: 500;\n      top: -3px;\n    }\n  }\n\n  strong {\n    margin-top: 10px;\n    display: block;\n    font-weight: 400;\n    margin-bottom: 34px;\n  }\n}"
  },
  {
    "path": "content/js/stencil/collection/components/ionic-button/ionic-button.css",
    "content": "ionic-button button {\n  border-radius: 4px;\n  padding: 11px 15px 9px;\n  font-size: 16px;\n  font-weight: 500;\n  box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);\n  border: 0;\n  outline: none;\n  height: 100%;\n  transition: background-color .2s, border-color .3s, box-shadow .3s, color .3s; }\n  ionic-button button.default {\n    background: #488aff;\n    color: white; }\n    ionic-button button.default:hover {\n      background: #629aff; }\n    ionic-button button.default:active {\n      background: #2f7aff; }\n  ionic-button button.white {\n    background: white;\n    border-color: #e8ebf1;\n    color: #488aff; }\n    ionic-button button.white:active {\n      background: #fafafa; }\n  ionic-button button:hover {\n    box-shadow: 0 2px 5px rgba(0, 0, 0, 0.12); }\n  ionic-button button:active {\n    box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1); }\n  ionic-button button:disabled {\n    background: #e8ebf1;\n    color: white;\n    box-shadow: none; }\n"
  },
  {
    "path": "content/js/stencil/collection/components/ionic-button/ionic-button.js",
    "content": "export class IonicButton {\r\n    constructor() {\r\n        this.color = 'default';\r\n        this.type = 'button';\r\n        this.disabled = false;\r\n    }\r\n    render() {\r\n        if (this.disabled) {\r\n            return (h(\"button\", { class: this.color, type: this.type, disabled: true },\r\n                h(\"slot\", null)));\r\n        }\r\n        return (h(\"button\", { class: this.color, type: this.type },\r\n            h(\"slot\", null)));\r\n    }\r\n    static get is() { return \"ionic-button\"; }\r\n    static get properties() { return {\r\n        \"color\": {\r\n            \"type\": String,\r\n            \"attr\": \"color\"\r\n        },\r\n        \"disabled\": {\r\n            \"type\": Boolean,\r\n            \"attr\": \"disabled\"\r\n        },\r\n        \"type\": {\r\n            \"type\": String,\r\n            \"attr\": \"type\"\r\n        }\r\n    }; }\r\n    static get style() { return \"/**style-placeholder:ionic-button:**/\"; }\r\n}\r\n"
  },
  {
    "path": "content/js/stencil/collection/components/ionic-button/ionic-button.scss",
    "content": "@import '../../vars';\n@mixin colorize($color, $dark: true) {\n  background: $color;\n\n  @if $dark {\n    color: white;\n\n    &:hover {\n      background: lighten($color, 5);\n    }\n\n    &:active {\n      background: darken($color, 5);\n    }\n  } @else {\n\n    &:active {\n      background: darken($color, 2);\n    }\n  }\n}\n\nionic-button {\n  button {\n    border-radius: 4px;\n    padding: 11px 15px 9px;\n    font-size: 16px;\n    font-weight: 500;\n    box-shadow: 0 1px 3px rgba(0,0,0,.1);\n    border: 0;\n    outline: none;\n    height: 100%;\n    transition:\n      background-color .2s,\n      border-color .3s,\n      box-shadow .3s,\n      color .3s;\n\n    &.default { @include colorize($blue) }\n    &.white {\n      @include colorize(white, false);\n      border-color: $lightgrey;\n      color: $blue;\n    }\n\n    &:hover {\n      box-shadow: 0 2px 5px rgba(0,0,0,.12);\n    }\n\n    &:active {\n      box-shadow: inset 0 1px 2px rgba(0,0,0,.1);\n    }\n\n    &:disabled {\n      background: $lightgrey;\n      color: white;\n      box-shadow: none;\n    }\n  }\n}\n\n\n\n\n"
  },
  {
    "path": "content/js/stencil/collection/components/ionic-newsletter-signup/ico-email.js",
    "content": "export const EmailIcon = () => (h(\"svg\", { width: \"20\", height: \"14\", viewBox: \"0 0 20 14\", fill: \"none\", xmlns: \"http://www.w3.org/2000/svg\" },\r\n    h(\"path\", { d: \"M19.8365 1.71514L14.6635 7.04323C14.625 7.08213 14.625 7.14046 14.6635 7.17935L18.2837 11.0782C18.5288 11.3261 18.5288 11.7248 18.2837 11.9727C18.1635 12.0942 18 12.1574 17.8413 12.1574C17.6827 12.1574 17.5192 12.0942 17.399 11.9727L13.7933 8.08844C13.7548 8.04954 13.6923 8.04954 13.6538 8.08844L12.774 8.99266C12.0385 9.74617 11.0625 10.1643 10.0144 10.1691C8.95192 10.174 7.94231 9.72187 7.19712 8.95863L6.35096 8.08844C6.3125 8.04954 6.25 8.04954 6.21154 8.08844L2.60577 11.9727C2.48558 12.0942 2.32212 12.1574 2.16346 12.1574C2.00481 12.1574 1.84135 12.0942 1.72115 11.9727C1.47596 11.7248 1.47596 11.3261 1.72115 11.0782L5.34135 7.17935C5.375 7.14046 5.375 7.08213 5.34135 7.04323L0.163462 1.71514C0.100962 1.65194 0 1.69569 0 1.7832V12.4443C0 13.2999 0.692308 13.9999 1.53846 13.9999H18.4615C19.3077 13.9999 20 13.2999 20 12.4443V1.7832C20 1.69569 19.8942 1.6568 19.8365 1.71514Z\", fill: \"#B2BECD\" }),\r\n    h(\"path\", { d: \"M10.0013 8.90121C10.7128 8.90121 11.3811 8.61925 11.8811 8.10394L19.4244 0.340297C19.1599 0.126396 18.833 0 18.4724 0H1.53493C1.17435 0 0.842623 0.126396 0.583008 0.340297L8.12628 8.10394C8.62147 8.61438 9.28974 8.90121 10.0013 8.90121Z\", fill: \"#B2BECD\" })));\r\n"
  },
  {
    "path": "content/js/stencil/collection/components/ionic-newsletter-signup/ionic-newsletter-signup.css",
    "content": "ionic-newsletter-signup form {\n  position: relative;\n  display: flex;\n  border-collapse: separate;\n  width: 100%;\n  height: 40px; }\n  @media (max-width: 991px) {\n    ionic-newsletter-signup form {\n      max-width: calc(100% - 340px); } }\n  @media (max-width: 767px) {\n    ionic-newsletter-signup form {\n      float: none;\n      max-width: 100%;\n      margin-top: 15px; } }\n  ionic-newsletter-signup form.dark input {\n    color: white;\n    box-shadow: none; }\n    ionic-newsletter-signup form.dark input:hover {\n      box-shadow: 0 1px 3px rgba(0, 0, 0, 0.15); }\n    ionic-newsletter-signup form.dark input:focus {\n      box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1); }\n    ionic-newsletter-signup form.dark input::placeholder {\n      color: #bbceef; }\n  ionic-newsletter-signup form.lg {\n    height: 48px; }\n    ionic-newsletter-signup form.lg input {\n      padding: 1px 17px 0;\n      font-size: 14px; }\n    ionic-newsletter-signup form.lg ionic-button button {\n      padding: 11px 12px; }\n  ionic-newsletter-signup form.arrow {\n    border-radius: 6px;\n    box-shadow: 0 1px 3px rgba(0, 16, 44, 0.08), 0 2px 4px rgba(0, 16, 44, 0.12);\n    transition: .15s box-shadow ease; }\n    ionic-newsletter-signup form.arrow:hover {\n      box-shadow: 0 7px 14px rgba(0, 16, 44, 0.12), 0 3px 6px rgba(0, 16, 44, 0.08); }\n    ionic-newsletter-signup form.arrow input {\n      border-radius: 6px 0 0 6px;\n      box-shadow: none; }\n      ionic-newsletter-signup form.arrow input::placeholder {\n        color: #a8b0be;\n        font-weight: 400; }\n    ionic-newsletter-signup form.arrow ionic-button button {\n      background: #f0f5ff;\n      color: #3880ff;\n      font-size: 23px;\n      display: flex;\n      align-items: center;\n      border-radius: 0 6px 6px 0; }\n      ionic-newsletter-signup form.arrow ionic-button button:hover {\n        background: #ebf2ff; }\n    @media (max-width: 991px) {\n      ionic-newsletter-signup form.arrow {\n        max-width: 100%; } }\n  ionic-newsletter-signup form.homepage {\n    height: 48px;\n    border-radius: 6px;\n    background: #F8FAFC;\n    border: 1px solid #E9EDF3;\n    transition: .2s border-color, .2s background-color; }\n    ionic-newsletter-signup form.homepage:hover {\n      border-color: #73A6FF;\n      background: white; }\n    ionic-newsletter-signup form.homepage svg {\n      position: absolute;\n      top: 16px;\n      left: 16px; }\n    ionic-newsletter-signup form.homepage input {\n      border-radius: 6px 0 0 6px;\n      box-shadow: none;\n      padding-left: 46px; }\n      ionic-newsletter-signup form.homepage input::placeholder {\n        color: #a8b0be;\n        font-weight: 400; }\n    ionic-newsletter-signup form.homepage ionic-button button {\n      background: transparent;\n      color: #7CABFF;\n      font-size: 23px;\n      display: flex;\n      align-items: center;\n      box-shadow: none;\n      border-radius: 0 6px 6px 0; }\n      ionic-newsletter-signup form.homepage ionic-button button:hover {\n        color: #498aff;\n        background: transparent; }\n    @media (max-width: 991px) {\n      ionic-newsletter-signup form.homepage {\n        max-width: 100%; } }\n\nionic-newsletter-signup input {\n  border: none;\n  background: rgba(255, 255, 255, 0.2);\n  border-radius: 4px 0 0 4px;\n  font-size: 13px;\n  color: #24282e;\n  box-shadow: none;\n  font-weight: 500;\n  height: 100%;\n  outline: 0;\n  flex-grow: 1;\n  padding: 0px 16px 1px;\n  box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);\n  transition: .2s background, .2s box-shadow; }\n  ionic-newsletter-signup input:hover {\n    box-shadow: 0 1px 3px rgba(0, 0, 0, 0.15); }\n  ionic-newsletter-signup input:focus {\n    box-shadow: none;\n    background: rgba(255, 255, 255, 0.25);\n    box-shadow: inset 0 0 2px rgba(0, 0, 0, 0.1); }\n  ionic-newsletter-signup input::placeholder {\n    padding-left: 0;\n    color: #a1a9b6; }\n\nionic-newsletter-signup ionic-button {\n  height: 100%; }\n  ionic-newsletter-signup ionic-button button {\n    border-top-left-radius: 0;\n    border-bottom-left-radius: 0;\n    font-weight: 500;\n    font-size: 14px;\n    height: 100%;\n    padding: 8px 9px 10px; }\n"
  },
  {
    "path": "content/js/stencil/collection/components/ionic-newsletter-signup/ionic-newsletter-signup.js",
    "content": "import { EmailIcon } from './ico-email';\r\nexport class IonicNewsletterSignup {\r\n    constructor() {\r\n        this.placeholder = 'Email address';\r\n        this.buttonText = 'Subscribe';\r\n        this.darkMode = false;\r\n        this.homepageMode = false;\r\n        this.arrowMode = false;\r\n        this.lg = false;\r\n        this.kind = 'default';\r\n        this.isLoading = false;\r\n        this.hasSubmitted = false;\r\n        this.email = null;\r\n        this.hsFormIds = {\r\n            default: '76e5f69f-85fd-4579-afce-a1892d48bb32',\r\n            podcast: ''\r\n        };\r\n    }\r\n    handleEmailChange(event) {\r\n        this.email = event.target.value;\r\n    }\r\n    handleSubmit(e) {\r\n        e.preventDefault();\r\n        const email = this.email;\r\n        this.isLoading = true;\r\n        var xhr = new XMLHttpRequest();\r\n        xhr.open(\"POST\", \"/api/v1/newsletter\");\r\n        xhr.setRequestHeader(\"Content-Type\", \"application/json;charset=UTF-8\");\r\n        xhr.onreadystatechange = () => {\r\n            if (xhr.readyState === 4 && xhr.status === 200) {\r\n                this.isLoading = false;\r\n                var json = JSON.parse(xhr.responseText);\r\n                this.hasSubmitted = json.ok;\r\n                this.hubspotIdentify(email);\r\n            }\r\n        };\r\n        xhr.send(JSON.stringify({ email: this.email, podcast: this.kind === 'podcast' }));\r\n    }\r\n    hubspotIdentify(email) {\r\n        const _hsq = window['_hsq'] = window['_hsq'] || [];\r\n        _hsq.push([\"identify\", {\r\n                email: email\r\n            }]);\r\n        _hsq.push([\"trackEvent\", {\r\n                id: \"Signed Up for Newsletter\",\r\n                value: true\r\n            }]);\r\n        var xhr = new XMLHttpRequest();\r\n        var url = [\r\n            'https://api.hsforms.com/submissions/v3/integration/submit',\r\n            '3776657',\r\n            '76e5f69f-85fd-4579-afce-a1892d48bb32'\r\n        ].join('/');\r\n        xhr.open(\"POST\", url);\r\n        xhr.setRequestHeader(\"Content-Type\", \"application/json;charset=UTF-8\");\r\n        xhr.onreadystatechange = () => {\r\n            if (xhr.readyState === 4 && xhr.status === 200) {\r\n                var json = JSON.parse(xhr.responseText);\r\n                console.log(json);\r\n            }\r\n        };\r\n        xhr.send(JSON.stringify({\r\n            fields: [{\r\n                    name: 'email',\r\n                    value: this.email\r\n                }],\r\n            context: {\r\n                hutk: document.cookie.match(/hubspotutk=(.*?);/)[1],\r\n                pageUri: window.location.href,\r\n                pageName: document.title\r\n            }\r\n        }));\r\n    }\r\n    getFormClass() {\r\n        let str = this.darkMode ? 'dark' : '';\r\n        if (this.arrowMode) {\r\n            str += ' arrow';\r\n        }\r\n        if (this.homepageMode) {\r\n            str += ' homepage';\r\n        }\r\n        if (this.lg) {\r\n            str += ' lg';\r\n        }\r\n        return str;\r\n    }\r\n    render() {\r\n        return (h(\"form\", { onSubmit: (e) => this.handleSubmit(e), class: this.getFormClass() },\r\n            this.homepageMode ? h(EmailIcon, null) : '',\r\n            h(\"input\", { name: \"email\", type: \"email\", value: this.email, onInput: () => this.handleEmailChange(event), disabled: this.isLoading, placeholder: this.placeholder, required: true }),\r\n            h(\"ionic-button\", { color: this.darkMode ? 'white' : 'default', type: \"submit\", disabled: this.isLoading || this.hasSubmitted }, this.hasSubmitted ? 'Added!' :\r\n                this.arrowMode || this.homepageMode ?\r\n                    h(\"ion-icon\", { name: \"md-arrow-forward\" }) : this.buttonText)));\r\n    }\r\n    static get is() { return \"ionic-newsletter-signup\"; }\r\n    static get properties() { return {\r\n        \"arrowMode\": {\r\n            \"type\": Boolean,\r\n            \"attr\": \"arrow-mode\"\r\n        },\r\n        \"buttonText\": {\r\n            \"type\": String,\r\n            \"attr\": \"button-text\"\r\n        },\r\n        \"darkMode\": {\r\n            \"type\": Boolean,\r\n            \"attr\": \"dark-mode\"\r\n        },\r\n        \"email\": {\r\n            \"state\": true\r\n        },\r\n        \"hasSubmitted\": {\r\n            \"state\": true\r\n        },\r\n        \"homepageMode\": {\r\n            \"type\": Boolean,\r\n            \"attr\": \"homepage-mode\"\r\n        },\r\n        \"isLoading\": {\r\n            \"state\": true\r\n        },\r\n        \"kind\": {\r\n            \"type\": String,\r\n            \"attr\": \"kind\"\r\n        },\r\n        \"lg\": {\r\n            \"type\": Boolean,\r\n            \"attr\": \"lg\"\r\n        },\r\n        \"placeholder\": {\r\n            \"type\": String,\r\n            \"attr\": \"placeholder\"\r\n        }\r\n    }; }\r\n    static get style() { return \"/**style-placeholder:ionic-newsletter-signup:**/\"; }\r\n}\r\n"
  },
  {
    "path": "content/js/stencil/collection/components/ionic-newsletter-signup/ionic-newsletter-signup.scss",
    "content": "@import '../../vars';\n\nionic-newsletter-signup {\n\n  form {\n    position: relative;\n    display: flex;\n    border-collapse: separate;\n    width: 100%;\n    height: 40px;\n\n    @media (max-width: $screen-sm-max) {\n      max-width: calc(100% - 340px);\n    }\n\n    @media (max-width: $screen-xs-max) {\n      float: none;\n      max-width: 100%;\n      margin-top: 15px;\n    }\n\n    &.dark {\n      input {\n        color: white;\n        box-shadow: none;\n\n        &:hover {\n          box-shadow: 0 1px 3px rgba(0, 0, 0, .15);\n        }\n\n        &:focus {\n          box-shadow: 0 1px 3px rgba(0, 0, 0, .1);\n        }\n\n        &::placeholder {\n          color: #bbceef;\n        }\n      }\n    }\n\n    &.lg {\n      height: 48px;\n\n      input {\n        padding: 1px 17px 0;\n        font-size: 14px;\n      }\n\n      ionic-button button {\n        padding: 11px 12px;\n      }\n    }\n\n    &.arrow {\n      border-radius: 6px;\n      box-shadow: 0 1px 3px rgba(0,16,44,.08), 0 2px 4px rgba(0,16,44,.12);\n      transition: .15s box-shadow ease;\n\n      &:hover {\n        box-shadow: 0 7px 14px rgba(0,16,44,.12), 0 3px 6px rgba(0,16,44,.08);\n      }\n\n      input {\n        border-radius: 6px 0 0 6px;\n        box-shadow: none;\n\n\n\n        &::placeholder {\n          color: #a8b0be;\n          font-weight: 400;\n        }\n      }\n\n      ionic-button button {\n        background: #f0f5ff;\n        color: #3880ff;\n        font-size: 23px;\n        display: flex;\n        align-items: center;\n        border-radius: 0 6px 6px 0;\n\n        &:hover {\n          background: darken(#f0f5ff, 1);\n        }\n      }\n\n      @media (max-width: $screen-sm-max) {\n        max-width: 100%;\n      }\n    }\n\n    &.homepage {\n      height: 48px;\n      border-radius: 6px;\n      background: #F8FAFC;\n      border: 1px solid #E9EDF3;\n      transition: .2s border-color, .2s background-color;\n\n      &:hover {\n        border-color: #73A6FF;\n        background: white;\n      }\n\n      svg {\n        position: absolute;\n        top: 16px;\n        left: 16px;\n      }\n\n      input {\n        border-radius: 6px 0 0 6px;\n        box-shadow: none;\n        padding-left: 46px;\n\n\n        &::placeholder {\n          color: #a8b0be;\n          font-weight: 400;\n        }\n      }\n\n      ionic-button button {\n        background: transparent;\n        color: #7CABFF;\n        font-size: 23px;\n        display: flex;\n        align-items: center;\n        box-shadow: none;\n        border-radius: 0 6px 6px 0;\n\n        &:hover {\n          color: darken(#7CABFF, 10);\n          background: transparent;\n        }\n      }\n\n      @media (max-width: $screen-sm-max) {\n        max-width: 100%;\n      }\n    }\n  }\n\n  input {\n    border: none;\n    background: rgba(white, .2);\n    border-radius: 4px 0 0 4px;\n    font-size: 13px;\n    color: $dark;\n    box-shadow: none;\n    font-weight: 500;\n    height: 100%;\n    outline: 0;\n    flex-grow: 1;\n    padding: 0px 16px 1px;\n    box-shadow: 0 1px 3px rgba(0, 0, 0, .1);\n    transition: .2s background, .2s box-shadow;\n\n    &:hover {\n      box-shadow: 0 1px 3px rgba(0, 0, 0, .15);\n    }\n\n    &:focus {\n      box-shadow: none;\n      background: rgba(white,.25);\n      box-shadow: inset 0 0 2px rgba(0, 0, 0, .1);\n    }\n\n    &::placeholder {\n      padding-left: 0;\n      color: #a1a9b6;\n    }\n  }\n\n  ionic-button {\n    height: 100%;\n\n    button {\n      border-top-left-radius: 0;\n      border-bottom-left-radius: 0;\n      font-weight: 500;\n      font-size: 14px;\n      height: 100%;\n      padding: 8px 9px 10px;\n    }\n  }\n}\n"
  },
  {
    "path": "content/js/stencil/collection/components/ionic-quick-signup/ionic-quick-signup.css",
    "content": "ionic-quick-signup {\n  display: block; }\n\n.quick-signup-form {\n  width: 100%;\n  margin-bottom: -15px; }\n  .quick-signup-form .input-col {\n    padding-right: 0px; }\n  .quick-signup-form.transparent-input input {\n    background-color: rgba(255, 255, 255, 0.2);\n    border: none;\n    border-radius: 8px;\n    color: #fff; }\n    .quick-signup-form.transparent-input input:focus {\n      border: none; }\n    .quick-signup-form.transparent-input input::placeholder {\n      color: rgba(255, 255, 255, 0.8);\n      font-weight: normal; }\n  .quick-signup-form.transparent-input button.btn.white {\n    font-family: \"Eina\", \"Helvetica Neue\", Helvetica, sans-serif;\n    border-radius: 8px;\n    text-transform: none;\n    font-weight: 600;\n    padding-left: 15px;\n    padding-right: 15px; }\n  .quick-signup-form input {\n    padding: 0 14px;\n    height: 54px;\n    background-color: #fff;\n    box-shadow: none;\n    border: 2px solid transparent;\n    margin: 0;\n    width: 100%; }\n    .quick-signup-form input::placeholder {\n      color: #757575;\n      font-weight: bold; }\n    .quick-signup-form input:focus {\n      border: 2px solid #757575; }\n  .quick-signup-form button {\n    margin-top: 0; }\n\n@media (max-width: 991px) {\n  .quick-signup-form {\n    max-width: 60%;\n    margin: auto; } }\n\n@media (max-width: 767px) {\n  .quick-signup-form .btn {\n    margin-top: 20px; } }\n"
  },
  {
    "path": "content/js/stencil/collection/components/ionic-quick-signup/ionic-quick-signup.js",
    "content": "export class IonicQuickSignup {\r\n    constructor() {\r\n        this.showPricingNotice = false;\r\n        this.buttonColor = 'white';\r\n        this.transparentInput = false;\r\n    }\r\n    handleSubmit(_) {\r\n        var hsutk = window.getCookie('hubspotutk');\r\n        if (this.hsidRef)\r\n            this.hsidRef.value = hsutk;\r\n        return true;\r\n    }\r\n    render() {\r\n        return (h(\"form\", { class: `form quick-signup-form ${this.transparentInput ? 'transparent-input' : ''}`, role: \"form\", action: \"https://dashboard.ionicframework.com/signup\", method: \"GET\", onSubmit: e => this.handleSubmit(e) },\r\n            h(\"input\", { type: \"hidden\", name: \"hsid\", ref: e => this.hsidRef = e }),\r\n            h(\"input\", { type: \"hidden\", name: \"source\", value: \"homepage-quick\" }),\r\n            h(\"div\", { class: \"form-group\", id: \"field-email\" },\r\n                h(\"div\", { class: \"row\" },\r\n                    h(\"div\", { class: \"col-sm-8 input-col\" },\r\n                        h(\"input\", { class: \"form-control\", type: \"email\", placeholder: \"Enter your email address\", id: \"id_email\", name: \"email\", spellcheck: \"false\", required: true })),\r\n                    h(\"div\", { class: \"col-sm-4\" },\r\n                        h(\"button\", { type: \"submit\", class: `btn ${this.buttonColor}` }, \"Get started\")))),\r\n            this.showPricingNotice ? (h(\"div\", { class: \"form-group\" },\r\n                \"Ionic is free and open source for all developers. We also offer \",\r\n                h(\"a\", { href: \"/pricing\" }, \"enterprise options\"),\r\n                \" for teams that need support and premium features.\")) : null));\r\n    }\r\n    static get is() { return \"ionic-quick-signup\"; }\r\n    static get properties() { return {\r\n        \"buttonColor\": {\r\n            \"type\": String,\r\n            \"attr\": \"button-color\"\r\n        },\r\n        \"showPricingNotice\": {\r\n            \"type\": Boolean,\r\n            \"attr\": \"show-pricing-notice\"\r\n        },\r\n        \"transparentInput\": {\r\n            \"type\": Boolean,\r\n            \"attr\": \"transparent-input\"\r\n        }\r\n    }; }\r\n    static get style() { return \"/**style-placeholder:ionic-quick-signup:**/\"; }\r\n}\r\n"
  },
  {
    "path": "content/js/stencil/collection/components/ionic-quick-signup/ionic-quick-signup.scss",
    "content": "@import \"../../vars\";\n\nionic-quick-signup {\n  display: block;\n}\n\n.quick-signup-form {\n  width: 100%;\n  margin-bottom: -15px;\n\n  .input-col {\n    padding-right: 0px;\n  }\n\n  &.transparent-input {\n    input {\n      background-color: rgba(255, 255, 255, 0.2);\n\n      border: none;\n\n      border-radius: 8px;\n\n      color: #fff;\n\n      &:focus {\n        border: none;\n      }\n\n      &::placeholder {\n        color: rgba(255, 255, 255, 0.8);\n        font-weight: normal;\n      }\n    }\n\n    button.btn.white {\n      font-family: $font-family-inter;\n      border-radius: 8px;\n      text-transform: none;\n      font-weight: 600;\n      padding-left: 15px;\n      padding-right: 15px;\n    }\n  }\n\n  input {\n    padding: 0 14px;\n    height: 54px;\n    background-color: #fff;\n    box-shadow: none;\n    border: 2px solid transparent;\n    margin: 0;\n    width: 100%;\n    &::placeholder {\n      color: #757575;\n      font-weight: bold;\n    }\n    &:focus {\n      border: 2px solid #757575;\n    }\n  }\n  button {\n    margin-top: 0;\n  }\n}\n@media (max-width: $screen-sm-max) {\n  .quick-signup-form {\n    max-width: 60%;\n    margin: auto;\n  }\n}\n\n@media (max-width: $screen-xs-max) {\n  .quick-signup-form {\n    .btn {\n      margin-top: 20px;\n    }\n  }\n}\n"
  },
  {
    "path": "content/js/stencil/collection/components/ionic-search/arrow.svg.js",
    "content": "export const Close = () => (h(\"svg\", { version: \"1.1\", xmlns: \"http://www.w3.org/2000/svg\", viewBox: \"0 0 512 512\", preserveAspectRatio: \"\", style: { 'enable-background': 'new 0 0 512 512' } },\r\n    h(\"path\", { d: \"M256,307c-2.4,0-4.8-0.4-7-1.2L78.3,246.3c-11.1-3.9-17-16-13.1-27.1c3.9-11.1,16.1-16.9,27.2-13l157.9,55.1\\n\\tc3.7,1.3,7.7,1.3,11.3,0l157.9-55.1c11.1-3.9,23.3,2,27.2,13c3.9,11.1-2,23.2-13.1,27.1L263,305.8C260.8,306.6,258.4,307,256,307z\" })));\r\n"
  },
  {
    "path": "content/js/stencil/collection/components/ionic-search/ionic-search.css",
    "content": "@keyframes ionic-search-scan {\n  from {\n    left: 0; }\n  to {\n    left: 100%; } }\n\n@keyframes ionic-search-scan-mobile {\n  from {\n    left: calc(0% + 8px); }\n  to {\n    left: calc(100% - 16px); } }\n\nionic-search {\n  display: block;\n  display: inline-block; }\n  ionic-search svg {\n    fill: #727a87; }\n  ionic-search ion-icon {\n    font-size: 18px;\n    cursor: pointer; }\n    ionic-search ion-icon:hover svg {\n      fill: #3880ff; }\n  ionic-search .search {\n    right: 115px;\n    font-size: 18px;\n    margin-top: 7px;\n    color: white;\n    transition: 0.2s opacity, 0.4s transform cubic-bezier(0.23, 1, 0.32, 1); }\n    ionic-search .search.active {\n      cursor: default;\n      opacity: 0;\n      transform: scale3d(0, 0, 1); }\n    ionic-search .search svg {\n      fill: #a8b0be;\n      width: 18px;\n      height: 18px; }\n  ionic-search .search-static {\n    left: 15px;\n    z-index: 2;\n    opacity: 0;\n    transform: translate3d(0, -25px, 0);\n    transition: 0.4s transform cubic-bezier(0.23, 1, 0.32, 1), 0.1s opacity; }\n  ionic-search .close {\n    right: 11px;\n    z-index: 2;\n    opacity: 0;\n    pointer-events: none;\n    transition: .3s opacity; }\n    ionic-search .close.active {\n      pointer-events: all;\n      opacity: 1;\n      transform: none; }\n  ionic-search input {\n    width: 100%;\n    margin-left: 0;\n    padding-left: 40px;\n    padding-right: 40px;\n    outline: none;\n    border: none;\n    z-index: 2;\n    background: white;\n    border-radius: 6px;\n    padding: 14px 30px 14px 41px;\n    font-size: 14px;\n    letter-spacing: -.01em;\n    position: relative;\n    opacity: 0;\n    transform: translate3d(0, -15px, 0);\n    transition: 0.2s opacity, 0.4s transform cubic-bezier(0.23, 1, 0.32, 1); }\n    ionic-search input::placeholder {\n      color: #a8b0be; }\n  ionic-search .slot .hidden {\n    display: none; }\n  ionic-search ul {\n    position: relative;\n    background: white;\n    list-style: none;\n    margin-top: 4px;\n    margin-bottom: 0;\n    border-radius: 6px;\n    text-align: left;\n    padding: 19px 3px;\n    box-shadow: 0 8px 16px rgba(0, 0, 0, 0.08);\n    opacity: 0;\n    transform: translate3d(0, -50px, 0);\n    transition: 0.5s transform cubic-bezier(0.23, 1, 0.32, 1), 0.2s opacity; }\n    ionic-search ul strong {\n      display: block;\n      font-weight: 600; }\n    ionic-search ul span {\n      color: #767d88;\n      font-size: 12px; }\n      ionic-search ul span em {\n        color: #727a87; }\n    ionic-search ul .no-results {\n      padding: 8px 40px;\n      color: #2a2f38; }\n  ionic-search a {\n    display: inline-block;\n    padding: 8px 40px;\n    font-weight: 600;\n    color: #2a2f38;\n    width: 100%;\n    transition: .2s color, .2s background-color; }\n    ionic-search a:hover {\n      color: #3880ff;\n      background-color: #fafafa; }\n  ionic-search .searching {\n    position: absolute;\n    height: 1px;\n    width: 8px;\n    background: #3880ff;\n    top: 30px;\n    left: 0;\n    animation: ionic-search-scan 1s ease-in-out infinite; }\n  ionic-search .search-box {\n    position: absolute;\n    left: calc(50% - 330px);\n    width: 660px;\n    top: 10px;\n    z-index: 1;\n    padding-top: 2px;\n    pointer-events: none;\n    transition: opacity 0.2s linear; }\n    ionic-search .search-box ion-icon {\n      top: 17px;\n      font-size: 17px;\n      position: absolute; }\n    ionic-search .search-box.active {\n      pointer-events: all; }\n      ionic-search .search-box.active ul {\n        transform: none;\n        opacity: 1;\n        transition-delay: .2s; }\n      ionic-search .search-box.active input {\n        transform: none;\n        opacity: 1;\n        transition-delay: .1s; }\n      ionic-search .search-box.active .search-static {\n        opacity: 1;\n        transform: none; }\n      ionic-search .search-box.active .close {\n        opacity: 1;\n        transform: none;\n        transition-delay: .4s; }\n  ionic-search .backdrop {\n    background: rgba(0, 8, 24, 0.4);\n    position: fixed;\n    top: 0;\n    right: 0;\n    bottom: 0;\n    left: 0;\n    opacity: 0;\n    pointer-events: none;\n    transition: .4s all ease; }\n    ionic-search .backdrop.active {\n      opacity: 1;\n      pointer-events: all; }\n  ionic-search[mobile] {\n    display: block; }\n    ionic-search[mobile] .search {\n      color: #999;\n      right: auto;\n      left: 0;\n      bottom: 0;\n      font-size: 28px;\n      padding: 22px;\n      top: auto;\n      z-index: 3;\n      position: fixed; }\n    ionic-search[mobile] .backdrop {\n      top: 0;\n      background: rgba(0, 0, 0, 0.5);\n      z-index: 2; }\n    ionic-search[mobile] .search-box {\n      width: auto;\n      left: 2px;\n      right: 2px;\n      top: 42px;\n      bottom: 0;\n      padding: 60px 12px 48px;\n      position: fixed;\n      z-index: 3;\n      background: white;\n      border-top-left-radius: 12px;\n      border-top-right-radius: 12px;\n      transform: translate3d(0, 100%, 0);\n      transition: 0.4s transform cubic-bezier(0.23, 1, 0.32, 1); }\n      ionic-search[mobile] .search-box.active {\n        transform: none; }\n    ionic-search[mobile] .mobile-close {\n      transition-delay: 0;\n      left: calc(50% - 24px);\n      top: 0;\n      left: 0;\n      right: 0;\n      position: absolute; }\n      ionic-search[mobile] .mobile-close svg {\n        position: absolute;\n        top: 8px;\n        width: 40px;\n        height: 40px;\n        left: calc(50% - 20px); }\n    ionic-search[mobile] .searching {\n      top: 113px;\n      z-index: 3;\n      animation: ionic-search-scan-mobile 1s ease-in-out infinite; }\n    ionic-search[mobile] ul {\n      opacity: 1;\n      transform: none;\n      z-index: 3;\n      top: auto;\n      box-shadow: none;\n      width: 100%;\n      max-height: calc(100vh - 154px);\n      overflow: touch; }\n    ionic-search[mobile] .search-static {\n      transform: none;\n      opacity: 1;\n      z-index: 3;\n      top: 71px;\n      left: 22px; }\n    ionic-search[mobile] a {\n      padding-left: 20px;\n      padding-right: 20px; }\n    ionic-search[mobile] input {\n      margin: 0 0 10px;\n      padding: 10px 40px 8px;\n      background: #eceef2;\n      border-radius: 12px;\n      width: 100%; }\n    ionic-search[mobile] ~ .mobile-nav__pane {\n      min-height: 100%;\n      background: white;\n      transition: .4s transform ease, .4s border-radius step-end; }\n    ionic-search[mobile].active ~ .mobile-nav__pane {\n      border-radius: 12px;\n      transform: scale3d(0.97, 0.97, 1);\n      transition: .4s transform ease; }\n\n.mobile-nav {\n  background: black !important; }\n"
  },
  {
    "path": "content/js/stencil/collection/components/ionic-search/ionic-search.js",
    "content": "import { Close } from './arrow.svg';\r\nexport class IonicSearch {\r\n    constructor() {\r\n        this.active = false;\r\n        this.query = '';\r\n        this.pending = 0;\r\n        this.results = null;\r\n        this.dragY = null;\r\n        this.startY = null;\r\n        this.screenHeight = null;\r\n        this.URLS = () => {\r\n            const api = 'https://api.swiftype.com/api/v1/public/engines/';\r\n            const key = '9oVyaKGPzxoZAyUo9Sm8';\r\n            return {\r\n                autocomplete: query => `${api}suggest.json?q=${query}&engine_key=${key}`,\r\n                search: query => `${api}search.json?q=${query}&engine_key=${key}`\r\n            };\r\n        };\r\n        this.activate = this.activate.bind(this);\r\n        this.close = this.close.bind(this);\r\n        this.onKeyUp = this.onKeyUp.bind(this);\r\n        this.touchStart = this.touchStart.bind(this);\r\n        this.touchMove = this.touchMove.bind(this);\r\n        this.touchEnd = this.touchEnd.bind(this);\r\n        this.urls = this.URLS();\r\n    }\r\n    activate() {\r\n        this.active = true;\r\n        this.el.classList.add('active');\r\n        setTimeout(() => {\r\n            this.el.querySelector('input').focus();\r\n        }, 500, this);\r\n    }\r\n    close() {\r\n        this.active = false;\r\n        this.el.classList.remove('active');\r\n        this.el.querySelector('input').blur();\r\n        setTimeout(() => {\r\n            this.el.querySelector('input').value = '';\r\n            this.results = null;\r\n        }, 500, this);\r\n    }\r\n    async onKeyUp(e) {\r\n        if (e.keyCode === 27) {\r\n            this.close();\r\n            return;\r\n        }\r\n        if (e.target.value.length < 3) {\r\n            this.results = null;\r\n            return;\r\n        }\r\n        this.query = e.target.value;\r\n        this.pending++;\r\n        const resp = await fetch(this.urls.autocomplete(this.query));\r\n        const res = await resp.json();\r\n        this.pending--;\r\n        this.results = res.records.page;\r\n    }\r\n    touchStart(e) {\r\n        this.screenHeight = window.innerHeight\r\n            || document.documentElement.clientHeight\r\n            || document.body.clientHeight;\r\n        this.startY = Math.round(e.touches.item(0).screenY);\r\n    }\r\n    touchMove(e) {\r\n        e.preventDefault();\r\n        this.dragY = Math.max(0, Math.round((e.touches.item(0).screenY - this.startY) / this.screenHeight * 100));\r\n        this.dragStyles = {\r\n            transitionDuration: '.1s',\r\n            transform: `translate3d(0, ${this.dragY}%, 0)`\r\n        };\r\n    }\r\n    isFirefox() {\r\n        return navigator.userAgent.indexOf(\"Firefox\") != -1;\r\n    }\r\n    touchEnd() {\r\n        if (this.dragY > 30) {\r\n            this.close();\r\n        }\r\n        this.dragY = null;\r\n        this.startY = null;\r\n        this.dragStyles = {};\r\n    }\r\n    render() {\r\n        return [\r\n            h(\"div\", { class: `search-box${this.active ? ' active' : ''}`, style: this.dragStyles, onTouchMove: e => this.results && this.results.length > 5 ?\r\n                    null : e.preventDefault() },\r\n                h(\"input\", { type: \"text\", onKeyUp: this.onKeyUp, placeholder: \"Search Ionic..\" }),\r\n                h(\"ion-icon\", { class: `search-static ${this.active ? ' active' : ''}`, name: \"md-search\" }),\r\n                this.mobile && !this.isFirefox() ?\r\n                    h(\"div\", { class: \"mobile-close\", onClick: this.close, onTouchStart: this.touchStart, onTouchMove: this.touchMove, onTouchEnd: this.touchEnd },\r\n                        h(Close, null))\r\n                    :\r\n                        h(\"ion-icon\", { class: `close ${this.active ? ' active' : ''}`, name: 'md-close', onClick: this.close }),\r\n                this.results !== null ? h(\"ul\", null,\r\n                    this.results.map(result => h(\"li\", null,\r\n                        h(\"a\", { href: result.url, title: result.title },\r\n                            h(\"strong\", null, result.title),\r\n                            h(\"span\", { innerHTML: result.highlight.sections })))),\r\n                    this.results.length === 0 ?\r\n                        h(\"li\", null,\r\n                            h(\"span\", { class: \"no-results\" }, \"No results\"))\r\n                        : null) : null,\r\n                h(\"div\", { class: `slot ${this.results === null ? '' : 'hidden'}` },\r\n                    h(\"slot\", null)),\r\n                this.pending > 0 ? h(\"span\", { class: \"searching\" }) : null),\r\n            h(\"ion-icon\", { class: `search ${this.active ? ' active' : ''}`, name: \"md-search\", onClick: this.active ? null : this.activate }),\r\n            h(\"div\", { class: `backdrop ${this.active ? 'active' : null}`, onClick: this.close })\r\n        ];\r\n    }\r\n    static get is() { return \"ionic-search\"; }\r\n    static get properties() { return {\r\n        \"active\": {\r\n            \"state\": true\r\n        },\r\n        \"dragStyles\": {\r\n            \"state\": true\r\n        },\r\n        \"el\": {\r\n            \"elementRef\": true\r\n        },\r\n        \"mobile\": {\r\n            \"type\": Boolean,\r\n            \"attr\": \"mobile\"\r\n        },\r\n        \"pending\": {\r\n            \"state\": true\r\n        },\r\n        \"query\": {\r\n            \"state\": true\r\n        },\r\n        \"results\": {\r\n            \"state\": true\r\n        }\r\n    }; }\r\n    static get style() { return \"/**style-placeholder:ionic-search:**/\"; }\r\n}\r\n"
  },
  {
    "path": "content/js/stencil/collection/components/ionic-search/ionic-search.scss",
    "content": "@import '../../vars';\n\n@keyframes ionic-search-scan {\n  from {left: 0;}\n  to {left: 100%;}\n}\n\n@keyframes ionic-search-scan-mobile {\n  from {left: calc(0% + 8px);}\n  to {left: calc(100% - 16px);}\n}\n\nionic-search {\n  display: block;\n  display: inline-block;\n\n  svg {\n    fill: $darkgrey;\n  }\n\n  ion-icon {\n    font-size: 18px;\n    cursor: pointer;\n\n    &:hover svg {\n      fill: #3880ff;\n    }\n  }\n\n  .search {\n    right: 115px;\n    font-size: 18px;\n    margin-top:7px;\n    color: white;\n    transition: .2s opacity, .4s transform cubic-bezier(0.23, 1, 0.32, 1);\n\n    &.active {\n      cursor: default;\n      opacity: 0;\n      transform: scale3d(0, 0, 1);\n    }\n\n    svg {\n      fill: $grey;\n      width: 18px;\n      height: 18px;\n    }\n  }\n\n  .search-static {\n    left: 15px;\n    z-index: 2;\n    opacity: 0;\n    transform: translate3d(0, -25px, 0);\n    transition: .4s transform cubic-bezier(0.23, 1, 0.32, 1), .1s opacity;\n  }\n\n  .close {\n    right: 11px;\n    z-index: 2;\n    opacity: 0;\n    pointer-events: none;\n    transition: .3s opacity;\n\n    &.active {\n      pointer-events: all;\n      opacity: 1;\n      transform: none;\n    }\n  }\n\n  input {\n    width: 100%;\n    margin-left: 0;\n    padding-left: 40px;\n    padding-right: 40px;\n    outline: none;\n    border: none;\n    z-index: 2;\n    background: white;\n    border-radius: 6px;\n    padding: 14px 30px 14px 41px;\n    font-size: 14px;\n    letter-spacing: -.01em;\n    position: relative;\n    opacity: 0;\n    transform: translate3d(0, -15px, 0);\n    transition: .2s opacity, .4s transform cubic-bezier(0.23, 1, 0.32, 1);\n\n    &::placeholder {\n      color: $grey;\n    }\n\n    &:focus {\n      // border-color: #eee;\n    }\n  }\n\n  .slot {\n    .hidden {\n      display: none;\n    }\n  }\n\n  ul {\n    position: relative;\n    background: white;\n    list-style: none;\n    margin-top: 4px;\n    margin-bottom: 0;\n    border-radius: 6px;\n    text-align: left;\n    padding: 19px 3px;\n    box-shadow: 0 8px 16px rgba(0,0,0,.08);\n    opacity: 0;\n    transform: translate3d(0, -50px, 0);\n    transition: .5s transform cubic-bezier(0.23, 1, 0.32, 1), .2s opacity;\n\n    strong {\n      display: block;\n      font-weight: 600;\n    }\n\n    span {\n      color: #767d88;\n      font-size: 12px;\n\n      em {\n        color: $darkgrey;\n      }\n    }\n\n    .no-results {\n      padding: 8px 40px;\n      color: #2a2f38;\n    }\n  }\n\n  a {\n    display: inline-block;\n    padding: 8px 40px;\n    font-weight: 600;\n    color: #2a2f38;\n    width: 100%;\n    transition: .2s color, .2s background-color;\n\n    &:hover {\n      color: #3880ff;\n      background-color: #fafafa;\n    }\n  }\n\n  .searching {\n    position: absolute;\n    height: 1px;\n    width: 8px;\n    background: #3880ff;\n    top: 30px;\n    left: 0;\n    animation: ionic-search-scan 1s ease-in-out infinite;\n  }\n\n  .search-box {\n    // display: none;\n    position: absolute;\n    left: calc(50% - 330px);\n    width: 660px;\n    top: 10px;\n    z-index: 1;\n    padding-top: 2px;\n    pointer-events: none;\n    transition: opacity 0.2s linear;\n\n    ion-icon {\n      top: 17px;\n      font-size: 17px;\n      position: absolute;\n    }\n\n    &.active {\n      pointer-events: all;\n\n      ul {\n        transform: none;\n        opacity: 1;\n        transition-delay: .2s;\n      }\n\n      input {\n        transform: none;\n        opacity: 1;\n        transition-delay: .1s;\n      }\n\n      .search-static {\n        opacity: 1;\n        transform: none;\n      }\n\n      .close {\n        opacity: 1;\n        transform: none;\n        transition-delay: .4s;\n      }\n    }\n  }\n\n  .backdrop {\n    background: rgba(0, 8, 24, 0.4);\n    position: fixed;\n    top: 0;\n    right: 0;\n    bottom: 0;\n    left: 0;\n    opacity: 0;\n    pointer-events: none;\n    transition: .4s all ease;\n\n    &.active {\n      opacity: 1;\n      pointer-events: all;\n    }\n  }\n\n  &[mobile] {\n    display: block;\n\n    .search {\n      color: #999;\n      right: auto;\n      left: 0;\n      bottom: 0;\n      font-size: 28px;\n      padding: 22px;\n      top: auto;\n      z-index: 3;\n      position: fixed;\n    }\n\n    .backdrop {\n      top: 0;\n      background: rgba(0,0,0,.5);\n      z-index: 2;\n    }\n\n    .search-box {\n      width: auto;\n      left: 2px;\n      right: 2px;\n      top: 42px;\n      bottom: 0;\n      padding: 60px 12px 48px;\n      position: fixed;\n      z-index: 3;\n      background: white;\n      border-top-left-radius: 12px;\n      border-top-right-radius: 12px;\n      transform: translate3d(0, 100%, 0);\n      transition: .4s transform cubic-bezier(0.23, 1, 0.32, 1);\n\n      &.active {\n        transform: none;\n      }\n    }\n\n    .mobile-close {\n      transition-delay: 0;\n      left: calc(50% - 24px);\n      top: 0;\n      left: 0;\n      right: 0;\n      position: absolute;\n\n      svg {\n        position: absolute;\n        top: 8px;\n        width: 40px;\n        height: 40px;\n        left: calc(50% - 20px);\n      }\n    }\n\n    .searching {\n      top: 113px;\n      z-index: 3;\n      animation: ionic-search-scan-mobile 1s ease-in-out infinite;\n    }\n\n    ul {\n      opacity: 1;\n      transform: none;\n      z-index: 3;\n      top: auto;\n      box-shadow: none;\n      width: 100%;\n      max-height: calc(100vh - 154px);\n      overflow: touch;\n    }\n\n    .search-static {\n      transform: none;\n      opacity: 1;\n      z-index: 3;\n      top: 71px;\n      left: 22px;\n    }\n\n    a {\n      padding-left: 20px;\n      padding-right: 20px;\n    }\n\n    input {\n      margin: 0 0 10px;\n      padding: 10px 40px 8px;\n      background: #eceef2;\n      border-radius: 12px;\n      width: 100%;\n    }\n\n    ~ .mobile-nav__pane {\n      min-height: 100%;\n      background: white;\n      transition: .4s transform ease, .4s border-radius step-end;\n    }\n\n    &.active ~ .mobile-nav__pane {\n      border-radius: 12px;\n      transform: scale3d(0.97, 0.97, 1);\n      transition: .4s transform ease;\n    }\n  }\n}\n\n.mobile-nav {\n  background: black !important;\n}\n"
  },
  {
    "path": "content/js/stencil/collection/components/ionic-slider/ionic-slider.css",
    "content": "ionic-slider {\n  position: relative; }\n  ionic-slider [slot^=\"slide-\"] {\n    position: absolute;\n    top: 0;\n    right: 0;\n    bottom: 0;\n    left: 0;\n    overflow: hidden; }\n  ionic-slider > div {\n    position: absolute;\n    top: 0;\n    right: 0;\n    bottom: 0;\n    left: 0;\n    overflow: hidden;\n    display: none;\n    animation: fadeIn .5s ease; }\n    ionic-slider > div.visible {\n      display: block; }\n      ionic-slider > div.visible.new {\n        z-index: 1; }\n  ionic-slider .dots {\n    position: absolute;\n    top: 0;\n    bottom: 0;\n    left: 20px;\n    padding: 0;\n    display: flex;\n    flex-direction: column;\n    justify-content: center;\n    align-content: center;\n    z-index: 2; }\n    ionic-slider .dots li {\n      height: 8px;\n      width: 8px;\n      border-radius: 50%;\n      border: 1px solid rgba(255, 255, 255, 0.5);\n      margin-bottom: 4px;\n      list-style: none;\n      cursor: pointer;\n      transition: .5s background-color ease, .5s border-color ease; }\n      ionic-slider .dots li.active {\n        background-color: white;\n        border-color: white; }\n"
  },
  {
    "path": "content/js/stencil/collection/components/ionic-slider/ionic-slider.js",
    "content": "export class IonicSlider {\r\n    constructor() {\r\n        this.slideCount = 1;\r\n        this.timer = null;\r\n        this.old = null;\r\n        this.upcoming = null;\r\n        this.slideDelay = 10000;\r\n        this.current = 0;\r\n        this.status = [];\r\n        this.ticker = 0;\r\n        this.next = () => {\r\n            this.goTo(this.current >= this.slideCount - 1 ? 0 : this.current + 1);\r\n        };\r\n        this.goTo = (slide) => {\r\n            if (!this.status[slide])\r\n                return;\r\n            clearTimeout(this.timer);\r\n            this.old = this.current;\r\n            setTimeout(this.deactivate, 1000);\r\n            this.upcoming = this.current = slide;\r\n            this.status[slide].visible = true;\r\n            this.status[slide].new = true;\r\n            setTimeout(this.activate, 500);\r\n            this.timer = setTimeout(this.next, this.slideDelay);\r\n            this.ticker++;\r\n        };\r\n        this.deactivate = () => {\r\n            this.status[this.old].active = false;\r\n            this.status[this.old].visible = false;\r\n            this.status[this.current].new = false;\r\n            this.ticker++;\r\n        };\r\n        this.activate = () => {\r\n            this.status[this.current].active = true;\r\n            this.ticker++;\r\n        };\r\n        this.getClasses.bind(this);\r\n        this.goTo.bind(this);\r\n        this.activate.bind(this);\r\n        this.deactivate.bind(this);\r\n        this.next.bind(this);\r\n        for (let i = 0; i < this.slideCount; i++) {\r\n            this.status.push({\r\n                visible: i === 0,\r\n                active: i === 0,\r\n                new: false\r\n            });\r\n        }\r\n    }\r\n    componentDidLoad() {\r\n        this.timer = setTimeout(this.next, this.slideDelay);\r\n    }\r\n    getClasses(item) {\r\n        return [\r\n            this.status[item].visible ? 'visible' : '',\r\n            this.status[item].active ? 'active' : '',\r\n            this.status[item].new ? 'new' : ''\r\n        ].join(' ');\r\n    }\r\n    render() {\r\n        return [\r\n            h(\"div\", { class: this.getClasses(0) },\r\n                h(\"slot\", { name: \"slide-0\" })),\r\n            h(\"div\", { class: this.getClasses(1) },\r\n                h(\"slot\", { name: \"slide-1\" })),\r\n            h(\"ul\", { class: \"dots\" },\r\n                h(\"li\", { class: this.current === 0 ? 'active' : '', onClick: this.goTo.bind(this, 0) }),\r\n                h(\"li\", { class: this.current === 1 ? 'active' : '', onClick: this.goTo.bind(this, 1) }))\r\n        ];\r\n    }\r\n    static get is() { return \"ionic-slider\"; }\r\n    static get properties() { return {\r\n        \"current\": {\r\n            \"state\": true\r\n        },\r\n        \"status\": {\r\n            \"state\": true\r\n        },\r\n        \"ticker\": {\r\n            \"state\": true\r\n        }\r\n    }; }\r\n    static get style() { return \"/**style-placeholder:ionic-slider:**/\"; }\r\n}\r\n"
  },
  {
    "path": "content/js/stencil/collection/components/ionic-slider/ionic-slider.scss",
    "content": "@import '../../vars';\n\nionic-slider {\n  position: relative;\n\n  [slot^=\"slide-\"] {\n    position: absolute;\n    top: 0;\n    right: 0;\n    bottom: 0;\n    left: 0;\n    overflow: hidden;\n  }\n\n  > div {\n    position: absolute;\n    top: 0;\n    right: 0;\n    bottom: 0;\n    left: 0;\n    overflow: hidden;\n    display: none;\n    animation: fadeIn .5s ease;\n\n    &.visible {\n      display: block;\n\n      &.new {\n        z-index: 1;\n      }\n    }\n  }\n\n  .dots {\n    position: absolute;\n    top: 0;\n    bottom: 0;\n    left: 20px;\n    padding: 0;\n    display: flex;\n    flex-direction: column;\n    justify-content: center;\n    align-content: center;\n    z-index: 2;\n\n    li {\n      height: 8px;\n      width: 8px;\n      border-radius: 50%;\n      border: 1px solid rgba(255,255,255, .5);\n      margin-bottom: 4px;\n      list-style: none;\n      cursor: pointer;\n      transition: .5s background-color ease, .5s border-color ease;\n\n      &.active {\n        background-color: white;\n        border-color: white;\n      }\n    }\n  }\n}\n\n\n\n"
  },
  {
    "path": "content/js/stencil/collection/components/ionic-snap-bar/ionic-snap-bar.css",
    "content": "ionic-snap-bar {\n  background: linear-gradient(to right, #17203d, #1f2c53);\n  display: none;\n  width: 100%;\n  position: relative;\n  padding: 0 24px;\n  z-index: 1;\n  font-family: \"Eina\", \"Helvetica Neue\", Helvetica, sans-serif; }\n  ionic-snap-bar.hydrated {\n    display: block; }\n  ionic-snap-bar .wrapper {\n    padding: 0 16px;\n    display: flex;\n    flex-wrap: wrap;\n    align-items: center;\n    justify-content: space-around;\n    color: rgba(255, 255, 255, 0.6);\n    margin: 0 auto;\n    max-width: 586px;\n    height: 0;\n    transition: .4s height ease, .4s padding ease; }\n    ionic-snap-bar .wrapper.active {\n      height: 48px;\n      padding-top: 13px;\n      padding-bottom: 13px; }\n      ionic-snap-bar .wrapper.active > * {\n        transform: scaleY(1); }\n      ionic-snap-bar .wrapper.active + .close {\n        opacity: 1;\n        pointer-events: all; }\n    ionic-snap-bar .wrapper > * {\n      font-size: 1em;\n      font-weight: 600;\n      display: inline-block;\n      transform: scaleY(0);\n      transition: .2s transform ease; }\n    ionic-snap-bar .wrapper a {\n      border-radius: 1.8em;\n      text-transform: uppercase;\n      color: #fff;\n      text-decoration: none;\n      background: rgba(56, 128, 255, 0.28);\n      display: inline-block;\n      padding: 6px 12px 4px;\n      font-size: 10px;\n      letter-spacing: .1em;\n      margin-bottom: 2px;\n      transition: .2s background ease;\n      font-weight: 800; }\n      ionic-snap-bar .wrapper a::after {\n        content: '';\n        border: solid white;\n        border-width: 0 1px 1px 0;\n        display: inline-block;\n        padding: 3px;\n        margin-left: 2px;\n        vertical-align: 1px;\n        transform: rotate(-45deg); }\n      ionic-snap-bar .wrapper a:hover {\n        background: rgba(56, 128, 255, 0.4); }\n    ionic-snap-bar .wrapper strong,\n    ionic-snap-bar .wrapper h1,\n    ionic-snap-bar .wrapper h2,\n    ionic-snap-bar .wrapper h3,\n    ionic-snap-bar .wrapper h4 {\n      font-weight: 700;\n      color: white;\n      letter-spacing: .01em; }\n  ionic-snap-bar .close {\n    color: rgba(255, 255, 255, 0.3);\n    position: absolute;\n    font-size: 24px;\n    right: 16px;\n    top: 5px;\n    cursor: pointer;\n    pointer-events: none;\n    opacity: 0;\n    transition: .4s opacity ease, .2s color ease; }\n    ionic-snap-bar .close:hover {\n      color: rgba(255, 255, 255, 0.5); }\n"
  },
  {
    "path": "content/js/stencil/collection/components/ionic-snap-bar/ionic-snap-bar.js",
    "content": "export class IonicSnapBar {\r\n    constructor() {\r\n        this.active = false;\r\n    }\r\n    componentDidLoad() {\r\n        setTimeout(() => {\r\n            this.active = true;\r\n        }, 2500);\r\n    }\r\n    close() {\r\n        this.active = false;\r\n    }\r\n    render() {\r\n        return [\r\n            h(\"div\", { class: `wrapper ${this.active ? 'active' : ''}` },\r\n                h(\"slot\", null)),\r\n            h(\"div\", { id: \"snap-bar-close\", class: \"close\", onClick: this.close.bind(this) }, \"\\u00D7\")\r\n        ];\r\n    }\r\n    static get is() { return \"ionic-snap-bar\"; }\r\n    static get properties() { return {\r\n        \"active\": {\r\n            \"state\": true\r\n        }\r\n    }; }\r\n    static get style() { return \"/**style-placeholder:ionic-snap-bar:**/\"; }\r\n}\r\n"
  },
  {
    "path": "content/js/stencil/collection/components/ionic-snap-bar/ionic-snap-bar.scss",
    "content": "@import \"../../vars\";\n\nionic-snap-bar {\n  background: linear-gradient(to right, #17203d, #1f2c53);\n  display: none;\n  width: 100%;\n  position: relative;\n  padding: 0 24px;\n  z-index: 1;\n\n  &.hydrated {\n    display: block;\n  }\n\n  .wrapper {\n    padding: 0 16px;\n    display: flex;\n    flex-wrap: wrap;\n    align-items: center;\n    justify-content: space-around;\n    color: rgba(white, 0.6);\n    margin: 0 auto;\n    max-width: 586px;\n    height: 0;\n    transition: 0.4s height ease, 0.4s padding ease;\n\n    &.active {\n      height: 48px;\n      padding-top: 13px;\n      padding-bottom: 13px;\n\n      > * {\n        transform: scaleY(1);\n      }\n\n      + .close {\n        opacity: 1;\n        pointer-events: all;\n      }\n    }\n\n    > * {\n      font-size: 1em;\n      font-weight: 600;\n      display: inline-block;\n      transform: scaleY(0);\n      transition: 0.2s transform ease;\n    }\n\n    a {\n      border-radius: 1.8em;\n      text-transform: uppercase;\n      color: #fff;\n      text-decoration: none;\n      background: rgba(56, 128, 255, 0.28);\n      display: inline-block;\n      padding: 6px 12px 4px;\n      font-size: 10px;\n      letter-spacing: 0.1em;\n      margin-bottom: 2px;\n      transition: 0.2s background ease;\n      font-weight: 800;\n\n      &::after {\n        content: \"\";\n        border: solid white;\n        border-width: 0 1px 1px 0;\n        display: inline-block;\n        padding: 3px;\n        margin-left: 2px;\n        vertical-align: 1px;\n        transform: rotate(-45deg);\n      }\n\n      &:hover {\n        background: rgba(56, 128, 255, 0.4);\n      }\n    }\n\n    strong,\n    h1,\n    h2,\n    h3,\n    h4 {\n      font-weight: 700;\n      color: white;\n      letter-spacing: 0.01em;\n    }\n  }\n\n  .close {\n    color: rgba(white, 0.3);\n    position: absolute;\n    font-size: 24px;\n    right: 16px;\n    top: 5px;\n    cursor: pointer;\n    pointer-events: none;\n    opacity: 0;\n    transition: 0.4s opacity ease, 0.2s color ease;\n\n    &:hover {\n      color: rgba(white, 0.5);\n    }\n  }\n}\n"
  },
  {
    "path": "content/js/stencil/collection/components/ionic-toggle/ionic-toggle-button.css",
    "content": ":host {\n  flex: 1;\n  display: flex;\n  text-decoration: none;\n  cursor: pointer;\n  border: 1px solid #eee;\n  text-align: center;\n  font-size: 14px; }\n\ndiv {\n  padding: 16px;\n  flex: 1; }\n\n:host(:last-child) {\n  border-left: none; }\n\n:host(.selected) {\n  background-color: #4F8EF7;\n  color: white;\n  font-weight: bold; }\n"
  },
  {
    "path": "content/js/stencil/collection/components/ionic-toggle/ionic-toggle-button.js",
    "content": "export class IonicToggleButton {\r\n    constructor() {\r\n        this.selected = false;\r\n    }\r\n    deselect() {\r\n        this.selected = false;\r\n    }\r\n    select() {\r\n        this.selected = true;\r\n    }\r\n    handleSelected() {\r\n        this.toggleSelected.emit(this);\r\n    }\r\n    hostData() {\r\n        return {\r\n            class: {\r\n                selected: this.selected\r\n            }\r\n        };\r\n    }\r\n    render() {\r\n        return (h(\"div\", { onClick: _ => this.handleSelected() }, this.title));\r\n    }\r\n    static get is() { return \"ionic-toggle-button\"; }\r\n    static get encapsulation() { return \"shadow\"; }\r\n    static get properties() { return {\r\n        \"deselect\": {\r\n            \"method\": true\r\n        },\r\n        \"select\": {\r\n            \"method\": true\r\n        },\r\n        \"selected\": {\r\n            \"state\": true\r\n        },\r\n        \"tab\": {\r\n            \"type\": String,\r\n            \"attr\": \"tab\"\r\n        },\r\n        \"title\": {\r\n            \"type\": String,\r\n            \"attr\": \"title\"\r\n        }\r\n    }; }\r\n    static get events() { return [{\r\n            \"name\": \"toggleSelected\",\r\n            \"method\": \"toggleSelected\",\r\n            \"bubbles\": true,\r\n            \"cancelable\": true,\r\n            \"composed\": true\r\n        }]; }\r\n    static get style() { return \"/**style-placeholder:ionic-toggle-button:**/\"; }\r\n}\r\n"
  },
  {
    "path": "content/js/stencil/collection/components/ionic-toggle/ionic-toggle-button.scss",
    "content": ":host {\n  flex: 1;\n  display: flex;\n  text-decoration: none;\n  cursor: pointer;\n  border: 1px solid #eee;\n  text-align: center;\n  font-size: 14px;\n}\ndiv {\n  padding: 16px;\n  flex: 1;\n}\n:host(:last-child) {\n  border-left: none;\n}\n:host(.selected) {\n  background-color: #4F8EF7;\n  color: white;\n  font-weight: bold;\n}"
  },
  {
    "path": "content/js/stencil/collection/components/ionic-toggle/ionic-toggle-tab.js",
    "content": "export class IonicToggleTab {\r\n    constructor() {\r\n        this.hidden = true;\r\n    }\r\n    hide() {\r\n        this.hidden = true;\r\n    }\r\n    show() {\r\n        this.hidden = false;\r\n    }\r\n    hostData() {\r\n        return {\r\n            style: {\r\n                display: this.hidden ? 'none' : 'block'\r\n            }\r\n        };\r\n    }\r\n    render() {\r\n        return (h(\"slot\", null));\r\n    }\r\n    static get is() { return \"ionic-toggle-tab\"; }\r\n    static get encapsulation() { return \"shadow\"; }\r\n    static get properties() { return {\r\n        \"hidden\": {\r\n            \"state\": true\r\n        },\r\n        \"hide\": {\r\n            \"method\": true\r\n        },\r\n        \"show\": {\r\n            \"method\": true\r\n        },\r\n        \"tab\": {\r\n            \"type\": String,\r\n            \"attr\": \"tab\"\r\n        }\r\n    }; }\r\n}\r\n"
  },
  {
    "path": "content/js/stencil/collection/components/ionic-toggle/ionic-toggle.css",
    "content": ":host {\n  display: block; }\n\n.toggle-buttons {\n  display: flex;\n  flex-direction: row;\n  justify-content: center; }\n"
  },
  {
    "path": "content/js/stencil/collection/components/ionic-toggle/ionic-toggle.js",
    "content": "export class IonicToggle {\r\n    componentDidLoad() {\r\n    }\r\n    selectionChanged(e) {\r\n        const target = e.detail;\r\n        const buttons = this.el.querySelectorAll('ionic-toggle-button');\r\n        Array.prototype.forEach.call(buttons, (child) => {\r\n            child.deselect();\r\n        });\r\n        const tabName = target.tab;\r\n        target.select();\r\n        console.log('Selecting this one', tabName, target);\r\n        const tabs = this.el.querySelectorAll(`ionic-toggle-tab`);\r\n        console.log('Found tabs', tabs);\r\n        Array.prototype.forEach.call(tabs, (tab) => {\r\n            tab.hide();\r\n            if (tab.tab === tabName) {\r\n                tab.show();\r\n            }\r\n        });\r\n    }\r\n    render() {\r\n        return (h(\"div\", { class: \"toggle-content\" },\r\n            h(\"div\", { class: \"toggle-buttons\" },\r\n                h(\"slot\", { name: \"buttons\" })),\r\n            h(\"div\", { class: \"toggle-tabs\" },\r\n                h(\"slot\", { name: \"tabs\" }))));\r\n    }\r\n    static get is() { return \"ionic-toggle\"; }\r\n    static get encapsulation() { return \"shadow\"; }\r\n    static get properties() { return {\r\n        \"el\": {\r\n            \"elementRef\": true\r\n        }\r\n    }; }\r\n    static get listeners() { return [{\r\n            \"name\": \"toggleSelected\",\r\n            \"method\": \"selectionChanged\"\r\n        }]; }\r\n    static get style() { return \"/**style-placeholder:ionic-toggle:**/\"; }\r\n}\r\n"
  },
  {
    "path": "content/js/stencil/collection/components/ionic-toggle/ionic-toggle.scss",
    "content": ":host {\n  display: block;\n}\n\n.toggle-buttons {\n  display: flex;\n  flex-direction: row;\n\n  justify-content: center;\n}\n\n.toggle-tabs {\n\n}"
  },
  {
    "path": "content/js/stencil/collection/index.js",
    "content": ""
  },
  {
    "path": "content/js/stencil/collection/interface.js",
    "content": ""
  },
  {
    "path": "content/js/stencil/esm/es2017/build/bubpozqb.entry.js",
    "content": "import { h } from '../ionic-site-components.core.js';\n\nlet CACHED_MAP;\r\nfunction getIconMap() {\r\n    if (!CACHED_MAP) {\r\n        const win = window;\r\n        win.Ionicons = win.Ionicons || {};\r\n        CACHED_MAP = win.Ionicons.map = win.Ionicons.map || new Map();\r\n    }\r\n    return CACHED_MAP;\r\n}\r\nfunction getName(name, mode, ios, md) {\r\n    mode = (mode || 'md').toLowerCase();\r\n    mode = mode === 'ios' ? 'ios' : 'md';\r\n    if (ios && mode === 'ios') {\r\n        name = ios.toLowerCase();\r\n    }\r\n    else if (md && mode === 'md') {\r\n        name = md.toLowerCase();\r\n    }\r\n    else if (name) {\r\n        name = name.toLowerCase();\r\n        if (!/^md-|^ios-|^logo-/.test(name)) {\r\n            name = `${mode}-${name}`;\r\n        }\r\n    }\r\n    if (typeof name !== 'string' || name.trim() === '') {\r\n        return null;\r\n    }\r\n    const invalidChars = name.replace(/[a-z]|-|\\d/gi, '');\r\n    if (invalidChars !== '') {\r\n        return null;\r\n    }\r\n    return name;\r\n}\r\nfunction getSrc(src) {\r\n    if (typeof src === 'string') {\r\n        src = src.trim();\r\n        if (isSrc(src)) {\r\n            return src;\r\n        }\r\n    }\r\n    return null;\r\n}\r\nfunction isSrc(str) {\r\n    return str.length > 0 && /(\\/|\\.)/.test(str);\r\n}\r\nfunction isValid(elm) {\r\n    if (elm.nodeType === 1) {\r\n        if (elm.nodeName.toLowerCase() === 'script') {\r\n            return false;\r\n        }\r\n        for (let i = 0; i < elm.attributes.length; i++) {\r\n            const val = elm.attributes[i].value;\r\n            if (typeof val === 'string' && val.toLowerCase().indexOf('on') === 0) {\r\n                return false;\r\n            }\r\n        }\r\n        for (let i = 0; i < elm.childNodes.length; i++) {\r\n            if (!isValid(elm.childNodes[i])) {\r\n                return false;\r\n            }\r\n        }\r\n    }\r\n    return true;\r\n}\n\nclass Icon {\n    constructor() {\n        this.isVisible = false;\n        this.lazy = false;\n    }\n    componentWillLoad() {\n        this.waitUntilVisible(this.el, \"50px\", () => {\n            this.isVisible = true;\n            this.loadIcon();\n        });\n    }\n    componentDidUnload() {\n        if (this.io) {\n            this.io.disconnect();\n            this.io = undefined;\n        }\n    }\n    waitUntilVisible(el, rootMargin, cb) {\n        if (this.lazy && this.win && this.win.IntersectionObserver) {\n            const io = this.io = new this.win.IntersectionObserver((data) => {\n                if (data[0].isIntersecting) {\n                    io.disconnect();\n                    this.io = undefined;\n                    cb();\n                }\n            }, { rootMargin });\n            io.observe(el);\n        }\n        else {\n            cb();\n        }\n    }\n    loadIcon() {\n        if (!this.isServer && this.isVisible) {\n            const url = this.getUrl();\n            if (url) {\n                getSvgContent(this.doc, url, \"s-ion-icon\")\n                    .then(svgContent => this.svgContent = svgContent);\n            }\n            else {\n                console.error(\"icon was not resolved\");\n            }\n        }\n        if (!this.ariaLabel) {\n            const name = getName(this.getName(), this.mode, this.ios, this.md);\n            if (name) {\n                this.ariaLabel = name\n                    .replace(\"ios-\", \"\")\n                    .replace(\"md-\", \"\")\n                    .replace(/\\-/g, \" \");\n            }\n        }\n    }\n    getName() {\n        if (this.name !== undefined) {\n            return this.name;\n        }\n        if (this.icon && !isSrc(this.icon)) {\n            return this.icon;\n        }\n        return undefined;\n    }\n    getUrl() {\n        let url = getSrc(this.src);\n        if (url) {\n            return url;\n        }\n        url = getName(this.getName(), this.mode, this.ios, this.md);\n        if (url) {\n            return this.getNamedUrl(url);\n        }\n        url = getSrc(this.icon);\n        if (url) {\n            return url;\n        }\n        return null;\n    }\n    getNamedUrl(name) {\n        const url = getIconMap().get(name);\n        if (url) {\n            return url;\n        }\n        return `${this.resourcesUrl}svg/${name}.svg`;\n    }\n    hostData() {\n        const flipRtl = this.flipRtl || (this.ariaLabel && this.ariaLabel.indexOf(\"arrow\") > -1 && this.flipRtl !== false);\n        return {\n            \"role\": \"img\",\n            class: Object.assign({}, createColorClasses(this.color), { [`icon-${this.size}`]: !!this.size, \"flip-rtl\": flipRtl && this.doc.dir === \"rtl\" })\n        };\n    }\n    render() {\n        if (!this.isServer && this.svgContent) {\n            return h(\"div\", { class: \"icon-inner\", innerHTML: this.svgContent });\n        }\n        return h(\"div\", { class: \"icon-inner\" });\n    }\n    static get is() { return \"ion-icon\"; }\n    static get encapsulation() { return \"shadow\"; }\n    static get properties() {\n        return {\n            \"ariaLabel\": {\n                \"type\": String,\n                \"attr\": \"aria-label\",\n                \"reflectToAttr\": true,\n                \"mutable\": true\n            },\n            \"color\": {\n                \"type\": String,\n                \"attr\": \"color\"\n            },\n            \"doc\": {\n                \"context\": \"document\"\n            },\n            \"el\": {\n                \"elementRef\": true\n            },\n            \"flipRtl\": {\n                \"type\": Boolean,\n                \"attr\": \"flip-rtl\"\n            },\n            \"icon\": {\n                \"type\": String,\n                \"attr\": \"icon\",\n                \"watchCallbacks\": [\"loadIcon\"]\n            },\n            \"ios\": {\n                \"type\": String,\n                \"attr\": \"ios\"\n            },\n            \"isServer\": {\n                \"context\": \"isServer\"\n            },\n            \"isVisible\": {\n                \"state\": true\n            },\n            \"lazy\": {\n                \"type\": Boolean,\n                \"attr\": \"lazy\"\n            },\n            \"md\": {\n                \"type\": String,\n                \"attr\": \"md\"\n            },\n            \"mode\": {\n                \"type\": String,\n                \"attr\": \"mode\"\n            },\n            \"name\": {\n                \"type\": String,\n                \"attr\": \"name\",\n                \"watchCallbacks\": [\"loadIcon\"]\n            },\n            \"resourcesUrl\": {\n                \"context\": \"resourcesUrl\"\n            },\n            \"size\": {\n                \"type\": String,\n                \"attr\": \"size\"\n            },\n            \"src\": {\n                \"type\": String,\n                \"attr\": \"src\",\n                \"watchCallbacks\": [\"loadIcon\"]\n            },\n            \"svgContent\": {\n                \"state\": true\n            },\n            \"win\": {\n                \"context\": \"window\"\n            }\n        };\n    }\n    static get style() { return \":host{display:inline-block;width:1em;height:1em;contain:strict;-webkit-box-sizing:content-box!important;box-sizing:content-box!important}.icon-inner,svg{display:block;fill:currentColor;stroke:currentColor;height:100%;width:100%}:host(.flip-rtl) .icon-inner{-webkit-transform:scaleX(-1);transform:scaleX(-1)}:host(.icon-small){font-size:18px!important}:host(.icon-large){font-size:32px!important}:host(.ion-color){color:var(--ion-color-base)!important}:host(.ion-color-primary){--ion-color-base:var(--ion-color-primary,#3880ff)}:host(.ion-color-secondary){--ion-color-base:var(--ion-color-secondary,#0cd1e8)}:host(.ion-color-tertiary){--ion-color-base:var(--ion-color-tertiary,#f4a942)}:host(.ion-color-success){--ion-color-base:var(--ion-color-success,#10dc60)}:host(.ion-color-warning){--ion-color-base:var(--ion-color-warning,#ffce00)}:host(.ion-color-danger){--ion-color-base:var(--ion-color-danger,#f14141)}:host(.ion-color-light){--ion-color-base:var(--ion-color-light,#f4f5f8)}:host(.ion-color-medium){--ion-color-base:var(--ion-color-medium,#989aa2)}:host(.ion-color-dark){--ion-color-base:var(--ion-color-dark,#222428)}\"; }\n}\nconst requests = new Map();\nfunction getSvgContent(doc, url, scopedId) {\n    let req = requests.get(url);\n    if (!req) {\n        req = fetch(url, { cache: \"force-cache\" }).then(rsp => {\n            if (isStatusValid(rsp.status)) {\n                return rsp.text();\n            }\n            return Promise.resolve(null);\n        }).then(svgContent => validateContent(doc, svgContent, scopedId));\n        requests.set(url, req);\n    }\n    return req;\n}\nfunction isStatusValid(status) {\n    return status <= 299;\n}\nfunction validateContent(document, svgContent, scopeId) {\n    if (svgContent) {\n        const frag = document.createDocumentFragment();\n        const div = document.createElement(\"div\");\n        div.innerHTML = svgContent;\n        frag.appendChild(div);\n        for (let i = div.childNodes.length - 1; i >= 0; i--) {\n            if (div.childNodes[i].nodeName.toLowerCase() !== \"svg\") {\n                div.removeChild(div.childNodes[i]);\n            }\n        }\n        const svgElm = div.firstElementChild;\n        if (svgElm && svgElm.nodeName.toLowerCase() === \"svg\") {\n            if (scopeId) {\n                svgElm.setAttribute(\"class\", scopeId);\n            }\n            if (isValid(svgElm)) {\n                return div.innerHTML;\n            }\n        }\n    }\n    return \"\";\n}\nfunction createColorClasses(color) {\n    return (color) ? {\n        \"ion-color\": true,\n        [`ion-color-${color}`]: true\n    } : null;\n}\n\nexport { Icon as IonIcon };\n"
  },
  {
    "path": "content/js/stencil/esm/es2017/build/bubpozqb.sc.entry.js",
    "content": "import { h } from '../ionic-site-components.core.js';\n\nlet CACHED_MAP;\r\nfunction getIconMap() {\r\n    if (!CACHED_MAP) {\r\n        const win = window;\r\n        win.Ionicons = win.Ionicons || {};\r\n        CACHED_MAP = win.Ionicons.map = win.Ionicons.map || new Map();\r\n    }\r\n    return CACHED_MAP;\r\n}\r\nfunction getName(name, mode, ios, md) {\r\n    mode = (mode || 'md').toLowerCase();\r\n    mode = mode === 'ios' ? 'ios' : 'md';\r\n    if (ios && mode === 'ios') {\r\n        name = ios.toLowerCase();\r\n    }\r\n    else if (md && mode === 'md') {\r\n        name = md.toLowerCase();\r\n    }\r\n    else if (name) {\r\n        name = name.toLowerCase();\r\n        if (!/^md-|^ios-|^logo-/.test(name)) {\r\n            name = `${mode}-${name}`;\r\n        }\r\n    }\r\n    if (typeof name !== 'string' || name.trim() === '') {\r\n        return null;\r\n    }\r\n    const invalidChars = name.replace(/[a-z]|-|\\d/gi, '');\r\n    if (invalidChars !== '') {\r\n        return null;\r\n    }\r\n    return name;\r\n}\r\nfunction getSrc(src) {\r\n    if (typeof src === 'string') {\r\n        src = src.trim();\r\n        if (isSrc(src)) {\r\n            return src;\r\n        }\r\n    }\r\n    return null;\r\n}\r\nfunction isSrc(str) {\r\n    return str.length > 0 && /(\\/|\\.)/.test(str);\r\n}\r\nfunction isValid(elm) {\r\n    if (elm.nodeType === 1) {\r\n        if (elm.nodeName.toLowerCase() === 'script') {\r\n            return false;\r\n        }\r\n        for (let i = 0; i < elm.attributes.length; i++) {\r\n            const val = elm.attributes[i].value;\r\n            if (typeof val === 'string' && val.toLowerCase().indexOf('on') === 0) {\r\n                return false;\r\n            }\r\n        }\r\n        for (let i = 0; i < elm.childNodes.length; i++) {\r\n            if (!isValid(elm.childNodes[i])) {\r\n                return false;\r\n            }\r\n        }\r\n    }\r\n    return true;\r\n}\n\nclass Icon {\n    constructor() {\n        this.isVisible = false;\n        this.lazy = false;\n    }\n    componentWillLoad() {\n        this.waitUntilVisible(this.el, \"50px\", () => {\n            this.isVisible = true;\n            this.loadIcon();\n        });\n    }\n    componentDidUnload() {\n        if (this.io) {\n            this.io.disconnect();\n            this.io = undefined;\n        }\n    }\n    waitUntilVisible(el, rootMargin, cb) {\n        if (this.lazy && this.win && this.win.IntersectionObserver) {\n            const io = this.io = new this.win.IntersectionObserver((data) => {\n                if (data[0].isIntersecting) {\n                    io.disconnect();\n                    this.io = undefined;\n                    cb();\n                }\n            }, { rootMargin });\n            io.observe(el);\n        }\n        else {\n            cb();\n        }\n    }\n    loadIcon() {\n        if (!this.isServer && this.isVisible) {\n            const url = this.getUrl();\n            if (url) {\n                getSvgContent(this.doc, url, \"s-ion-icon\")\n                    .then(svgContent => this.svgContent = svgContent);\n            }\n            else {\n                console.error(\"icon was not resolved\");\n            }\n        }\n        if (!this.ariaLabel) {\n            const name = getName(this.getName(), this.mode, this.ios, this.md);\n            if (name) {\n                this.ariaLabel = name\n                    .replace(\"ios-\", \"\")\n                    .replace(\"md-\", \"\")\n                    .replace(/\\-/g, \" \");\n            }\n        }\n    }\n    getName() {\n        if (this.name !== undefined) {\n            return this.name;\n        }\n        if (this.icon && !isSrc(this.icon)) {\n            return this.icon;\n        }\n        return undefined;\n    }\n    getUrl() {\n        let url = getSrc(this.src);\n        if (url) {\n            return url;\n        }\n        url = getName(this.getName(), this.mode, this.ios, this.md);\n        if (url) {\n            return this.getNamedUrl(url);\n        }\n        url = getSrc(this.icon);\n        if (url) {\n            return url;\n        }\n        return null;\n    }\n    getNamedUrl(name) {\n        const url = getIconMap().get(name);\n        if (url) {\n            return url;\n        }\n        return `${this.resourcesUrl}svg/${name}.svg`;\n    }\n    hostData() {\n        const flipRtl = this.flipRtl || (this.ariaLabel && this.ariaLabel.indexOf(\"arrow\") > -1 && this.flipRtl !== false);\n        return {\n            \"role\": \"img\",\n            class: Object.assign({}, createColorClasses(this.color), { [`icon-${this.size}`]: !!this.size, \"flip-rtl\": flipRtl && this.doc.dir === \"rtl\" })\n        };\n    }\n    render() {\n        if (!this.isServer && this.svgContent) {\n            return h(\"div\", { class: \"icon-inner\", innerHTML: this.svgContent });\n        }\n        return h(\"div\", { class: \"icon-inner\" });\n    }\n    static get is() { return \"ion-icon\"; }\n    static get encapsulation() { return \"shadow\"; }\n    static get properties() {\n        return {\n            \"ariaLabel\": {\n                \"type\": String,\n                \"attr\": \"aria-label\",\n                \"reflectToAttr\": true,\n                \"mutable\": true\n            },\n            \"color\": {\n                \"type\": String,\n                \"attr\": \"color\"\n            },\n            \"doc\": {\n                \"context\": \"document\"\n            },\n            \"el\": {\n                \"elementRef\": true\n            },\n            \"flipRtl\": {\n                \"type\": Boolean,\n                \"attr\": \"flip-rtl\"\n            },\n            \"icon\": {\n                \"type\": String,\n                \"attr\": \"icon\",\n                \"watchCallbacks\": [\"loadIcon\"]\n            },\n            \"ios\": {\n                \"type\": String,\n                \"attr\": \"ios\"\n            },\n            \"isServer\": {\n                \"context\": \"isServer\"\n            },\n            \"isVisible\": {\n                \"state\": true\n            },\n            \"lazy\": {\n                \"type\": Boolean,\n                \"attr\": \"lazy\"\n            },\n            \"md\": {\n                \"type\": String,\n                \"attr\": \"md\"\n            },\n            \"mode\": {\n                \"type\": String,\n                \"attr\": \"mode\"\n            },\n            \"name\": {\n                \"type\": String,\n                \"attr\": \"name\",\n                \"watchCallbacks\": [\"loadIcon\"]\n            },\n            \"resourcesUrl\": {\n                \"context\": \"resourcesUrl\"\n            },\n            \"size\": {\n                \"type\": String,\n                \"attr\": \"size\"\n            },\n            \"src\": {\n                \"type\": String,\n                \"attr\": \"src\",\n                \"watchCallbacks\": [\"loadIcon\"]\n            },\n            \"svgContent\": {\n                \"state\": true\n            },\n            \"win\": {\n                \"context\": \"window\"\n            }\n        };\n    }\n    static get style() { return \".sc-ion-icon-h{display:inline-block;width:1em;height:1em;contain:strict;-webkit-box-sizing:content-box!important;box-sizing:content-box!important}.icon-inner.sc-ion-icon, svg.sc-ion-icon{display:block;fill:currentColor;stroke:currentColor;height:100%;width:100%}.flip-rtl.sc-ion-icon-h   .icon-inner.sc-ion-icon{-webkit-transform:scaleX(-1);transform:scaleX(-1)}.icon-small.sc-ion-icon-h{font-size:18px!important}.icon-large.sc-ion-icon-h{font-size:32px!important}.ion-color.sc-ion-icon-h{color:var(--ion-color-base)!important}.ion-color-primary.sc-ion-icon-h{--ion-color-base:var(--ion-color-primary,#3880ff)}.ion-color-secondary.sc-ion-icon-h{--ion-color-base:var(--ion-color-secondary,#0cd1e8)}.ion-color-tertiary.sc-ion-icon-h{--ion-color-base:var(--ion-color-tertiary,#f4a942)}.ion-color-success.sc-ion-icon-h{--ion-color-base:var(--ion-color-success,#10dc60)}.ion-color-warning.sc-ion-icon-h{--ion-color-base:var(--ion-color-warning,#ffce00)}.ion-color-danger.sc-ion-icon-h{--ion-color-base:var(--ion-color-danger,#f14141)}.ion-color-light.sc-ion-icon-h{--ion-color-base:var(--ion-color-light,#f4f5f8)}.ion-color-medium.sc-ion-icon-h{--ion-color-base:var(--ion-color-medium,#989aa2)}.ion-color-dark.sc-ion-icon-h{--ion-color-base:var(--ion-color-dark,#222428)}\"; }\n}\nconst requests = new Map();\nfunction getSvgContent(doc, url, scopedId) {\n    let req = requests.get(url);\n    if (!req) {\n        req = fetch(url, { cache: \"force-cache\" }).then(rsp => {\n            if (isStatusValid(rsp.status)) {\n                return rsp.text();\n            }\n            return Promise.resolve(null);\n        }).then(svgContent => validateContent(doc, svgContent, scopedId));\n        requests.set(url, req);\n    }\n    return req;\n}\nfunction isStatusValid(status) {\n    return status <= 299;\n}\nfunction validateContent(document, svgContent, scopeId) {\n    if (svgContent) {\n        const frag = document.createDocumentFragment();\n        const div = document.createElement(\"div\");\n        div.innerHTML = svgContent;\n        frag.appendChild(div);\n        for (let i = div.childNodes.length - 1; i >= 0; i--) {\n            if (div.childNodes[i].nodeName.toLowerCase() !== \"svg\") {\n                div.removeChild(div.childNodes[i]);\n            }\n        }\n        const svgElm = div.firstElementChild;\n        if (svgElm && svgElm.nodeName.toLowerCase() === \"svg\") {\n            if (scopeId) {\n                svgElm.setAttribute(\"class\", scopeId);\n            }\n            if (isValid(svgElm)) {\n                return div.innerHTML;\n            }\n        }\n    }\n    return \"\";\n}\nfunction createColorClasses(color) {\n    return (color) ? {\n        \"ion-color\": true,\n        [`ion-color-${color}`]: true\n    } : null;\n}\n\nexport { Icon as IonIcon };\n"
  },
  {
    "path": "content/js/stencil/esm/es2017/build/cetridhp.entry.js",
    "content": "import { h } from '../ionic-site-components.core.js';\n\nclass IonicSnapBar {\r\n    constructor() {\r\n        this.active = false;\r\n    }\r\n    componentDidLoad() {\r\n        setTimeout(() => {\r\n            this.active = true;\r\n        }, 2500);\r\n    }\r\n    close() {\r\n        this.active = false;\r\n    }\r\n    render() {\r\n        return [\r\n            h(\"div\", { class: `wrapper ${this.active ? 'active' : ''}` },\r\n                h(\"slot\", null)),\r\n            h(\"div\", { id: \"snap-bar-close\", class: \"close\", onClick: this.close.bind(this) }, \"\\u00D7\")\r\n        ];\r\n    }\r\n    static get is() { return \"ionic-snap-bar\"; }\r\n    static get properties() { return {\r\n        \"active\": {\r\n            \"state\": true\r\n        }\r\n    }; }\r\n    static get style() { return \"ionic-snap-bar{background:-webkit-gradient(linear,left top,right top,from(#17203d),to(#1f2c53));background:linear-gradient(90deg,#17203d,#1f2c53);display:none;width:100%;position:relative;padding:0 24px;z-index:1;font-family:Eina,Helvetica Neue,Helvetica,sans-serif}ionic-snap-bar.hydrated{display:block}ionic-snap-bar .wrapper{padding:0 16px;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-align:center;align-items:center;-ms-flex-pack:distribute;justify-content:space-around;color:hsla(0,0%,100%,.6);margin:0 auto;max-width:586px;height:0;-webkit-transition:height .4s ease,padding .4s ease;transition:height .4s ease,padding .4s ease}ionic-snap-bar .wrapper.active{height:48px;padding-top:13px;padding-bottom:13px}ionic-snap-bar .wrapper.active>*{-webkit-transform:scaleY(1);transform:scaleY(1)}ionic-snap-bar .wrapper.active+.close{opacity:1;pointer-events:all}ionic-snap-bar .wrapper>*{font-size:1em;font-weight:600;display:inline-block;-webkit-transform:scaleY(0);transform:scaleY(0);-webkit-transition:transform .2s ease;transition:transform .2s ease}ionic-snap-bar .wrapper a{border-radius:1.8em;text-transform:uppercase;color:#fff;text-decoration:none;background:rgba(56,128,255,.28);display:inline-block;padding:6px 12px 4px;font-size:10px;letter-spacing:.1em;margin-bottom:2px;-webkit-transition:background .2s ease;transition:background .2s ease;font-weight:800}ionic-snap-bar .wrapper a:after{content:\\\"\\\";border:solid #fff;border-width:0 1px 1px 0;display:inline-block;padding:3px;margin-left:2px;vertical-align:1px;-webkit-transform:rotate(-45deg);transform:rotate(-45deg)}ionic-snap-bar .wrapper a:hover{background:rgba(56,128,255,.4)}ionic-snap-bar .wrapper h1,ionic-snap-bar .wrapper h2,ionic-snap-bar .wrapper h3,ionic-snap-bar .wrapper h4,ionic-snap-bar .wrapper strong{font-weight:700;color:#fff;letter-spacing:.01em}ionic-snap-bar .close{color:hsla(0,0%,100%,.3);position:absolute;font-size:24px;right:16px;top:5px;cursor:pointer;pointer-events:none;opacity:0;-webkit-transition:opacity .4s ease,color .2s ease;transition:opacity .4s ease,color .2s ease}ionic-snap-bar .close:hover{color:hsla(0,0%,100%,.5)}\"; }\r\n}\n\nexport { IonicSnapBar };\n"
  },
  {
    "path": "content/js/stencil/esm/es2017/build/cetridhp.sc.entry.js",
    "content": "import { h } from '../ionic-site-components.core.js';\n\nclass IonicSnapBar {\r\n    constructor() {\r\n        this.active = false;\r\n    }\r\n    componentDidLoad() {\r\n        setTimeout(() => {\r\n            this.active = true;\r\n        }, 2500);\r\n    }\r\n    close() {\r\n        this.active = false;\r\n    }\r\n    render() {\r\n        return [\r\n            h(\"div\", { class: `wrapper ${this.active ? 'active' : ''}` },\r\n                h(\"slot\", null)),\r\n            h(\"div\", { id: \"snap-bar-close\", class: \"close\", onClick: this.close.bind(this) }, \"\\u00D7\")\r\n        ];\r\n    }\r\n    static get is() { return \"ionic-snap-bar\"; }\r\n    static get properties() { return {\r\n        \"active\": {\r\n            \"state\": true\r\n        }\r\n    }; }\r\n    static get style() { return \"ionic-snap-bar{background:-webkit-gradient(linear,left top,right top,from(#17203d),to(#1f2c53));background:linear-gradient(90deg,#17203d,#1f2c53);display:none;width:100%;position:relative;padding:0 24px;z-index:1;font-family:Eina,Helvetica Neue,Helvetica,sans-serif}ionic-snap-bar.hydrated{display:block}ionic-snap-bar .wrapper{padding:0 16px;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-align:center;align-items:center;-ms-flex-pack:distribute;justify-content:space-around;color:hsla(0,0%,100%,.6);margin:0 auto;max-width:586px;height:0;-webkit-transition:height .4s ease,padding .4s ease;transition:height .4s ease,padding .4s ease}ionic-snap-bar .wrapper.active{height:48px;padding-top:13px;padding-bottom:13px}ionic-snap-bar .wrapper.active>*{-webkit-transform:scaleY(1);transform:scaleY(1)}ionic-snap-bar .wrapper.active+.close{opacity:1;pointer-events:all}ionic-snap-bar .wrapper>*{font-size:1em;font-weight:600;display:inline-block;-webkit-transform:scaleY(0);transform:scaleY(0);-webkit-transition:transform .2s ease;transition:transform .2s ease}ionic-snap-bar .wrapper a{border-radius:1.8em;text-transform:uppercase;color:#fff;text-decoration:none;background:rgba(56,128,255,.28);display:inline-block;padding:6px 12px 4px;font-size:10px;letter-spacing:.1em;margin-bottom:2px;-webkit-transition:background .2s ease;transition:background .2s ease;font-weight:800}ionic-snap-bar .wrapper a:after{content:\\\"\\\";border:solid #fff;border-width:0 1px 1px 0;display:inline-block;padding:3px;margin-left:2px;vertical-align:1px;-webkit-transform:rotate(-45deg);transform:rotate(-45deg)}ionic-snap-bar .wrapper a:hover{background:rgba(56,128,255,.4)}ionic-snap-bar .wrapper h1,ionic-snap-bar .wrapper h2,ionic-snap-bar .wrapper h3,ionic-snap-bar .wrapper h4,ionic-snap-bar .wrapper strong{font-weight:700;color:#fff;letter-spacing:.01em}ionic-snap-bar .close{color:hsla(0,0%,100%,.3);position:absolute;font-size:24px;right:16px;top:5px;cursor:pointer;pointer-events:none;opacity:0;-webkit-transition:opacity .4s ease,color .2s ease;transition:opacity .4s ease,color .2s ease}ionic-snap-bar .close:hover{color:hsla(0,0%,100%,.5)}\"; }\r\n}\n\nexport { IonicSnapBar };\n"
  },
  {
    "path": "content/js/stencil/esm/es2017/build/cz7vrrja.entry.js",
    "content": "import { h } from '../ionic-site-components.core.js';\n\nclass IonicToggle {\r\n    componentDidLoad() {\r\n    }\r\n    selectionChanged(e) {\r\n        const target = e.detail;\r\n        const buttons = this.el.querySelectorAll('ionic-toggle-button');\r\n        Array.prototype.forEach.call(buttons, (child) => {\r\n            child.deselect();\r\n        });\r\n        const tabName = target.tab;\r\n        target.select();\r\n        console.log('Selecting this one', tabName, target);\r\n        const tabs = this.el.querySelectorAll(`ionic-toggle-tab`);\r\n        console.log('Found tabs', tabs);\r\n        Array.prototype.forEach.call(tabs, (tab) => {\r\n            tab.hide();\r\n            if (tab.tab === tabName) {\r\n                tab.show();\r\n            }\r\n        });\r\n    }\r\n    render() {\r\n        return (h(\"div\", { class: \"toggle-content\" },\r\n            h(\"div\", { class: \"toggle-buttons\" },\r\n                h(\"slot\", { name: \"buttons\" })),\r\n            h(\"div\", { class: \"toggle-tabs\" },\r\n                h(\"slot\", { name: \"tabs\" }))));\r\n    }\r\n    static get is() { return \"ionic-toggle\"; }\r\n    static get encapsulation() { return \"shadow\"; }\r\n    static get properties() { return {\r\n        \"el\": {\r\n            \"elementRef\": true\r\n        }\r\n    }; }\r\n    static get listeners() { return [{\r\n            \"name\": \"toggleSelected\",\r\n            \"method\": \"selectionChanged\"\r\n        }]; }\r\n    static get style() { return \":host{display:block}.toggle-buttons{display:-ms-flexbox;display:flex;-ms-flex-direction:row;flex-direction:row;-ms-flex-pack:center;justify-content:center}\"; }\r\n}\n\nexport { IonicToggle };\n"
  },
  {
    "path": "content/js/stencil/esm/es2017/build/cz7vrrja.sc.entry.js",
    "content": "import { h } from '../ionic-site-components.core.js';\n\nclass IonicToggle {\r\n    componentDidLoad() {\r\n    }\r\n    selectionChanged(e) {\r\n        const target = e.detail;\r\n        const buttons = this.el.querySelectorAll('ionic-toggle-button');\r\n        Array.prototype.forEach.call(buttons, (child) => {\r\n            child.deselect();\r\n        });\r\n        const tabName = target.tab;\r\n        target.select();\r\n        console.log('Selecting this one', tabName, target);\r\n        const tabs = this.el.querySelectorAll(`ionic-toggle-tab`);\r\n        console.log('Found tabs', tabs);\r\n        Array.prototype.forEach.call(tabs, (tab) => {\r\n            tab.hide();\r\n            if (tab.tab === tabName) {\r\n                tab.show();\r\n            }\r\n        });\r\n    }\r\n    render() {\r\n        return (h(\"div\", { class: \"toggle-content\" },\r\n            h(\"div\", { class: \"toggle-buttons\" },\r\n                h(\"slot\", { name: \"buttons\" })),\r\n            h(\"div\", { class: \"toggle-tabs\" },\r\n                h(\"slot\", { name: \"tabs\" }))));\r\n    }\r\n    static get is() { return \"ionic-toggle\"; }\r\n    static get encapsulation() { return \"shadow\"; }\r\n    static get properties() { return {\r\n        \"el\": {\r\n            \"elementRef\": true\r\n        }\r\n    }; }\r\n    static get listeners() { return [{\r\n            \"name\": \"toggleSelected\",\r\n            \"method\": \"selectionChanged\"\r\n        }]; }\r\n    static get style() { return \".sc-ionic-toggle-h{display:block}.toggle-buttons.sc-ionic-toggle{display:-ms-flexbox;display:flex;-ms-flex-direction:row;flex-direction:row;-ms-flex-pack:center;justify-content:center}\"; }\r\n}\n\nexport { IonicToggle };\n"
  },
  {
    "path": "content/js/stencil/esm/es2017/build/ehteibio.entry.js",
    "content": "import { h } from '../ionic-site-components.core.js';\n\nconst Close = () => (h(\"svg\", { version: \"1.1\", xmlns: \"http://www.w3.org/2000/svg\", viewBox: \"0 0 512 512\", preserveAspectRatio: \"\", style: { 'enable-background': 'new 0 0 512 512' } },\r\n    h(\"path\", { d: \"M256,307c-2.4,0-4.8-0.4-7-1.2L78.3,246.3c-11.1-3.9-17-16-13.1-27.1c3.9-11.1,16.1-16.9,27.2-13l157.9,55.1\\n\\tc3.7,1.3,7.7,1.3,11.3,0l157.9-55.1c11.1-3.9,23.3,2,27.2,13c3.9,11.1-2,23.2-13.1,27.1L263,305.8C260.8,306.6,258.4,307,256,307z\" })));\n\nclass IonicSearch {\r\n    constructor() {\r\n        this.active = false;\r\n        this.query = '';\r\n        this.pending = 0;\r\n        this.results = null;\r\n        this.dragY = null;\r\n        this.startY = null;\r\n        this.screenHeight = null;\r\n        this.URLS = () => {\r\n            const api = 'https://api.swiftype.com/api/v1/public/engines/';\r\n            const key = '9oVyaKGPzxoZAyUo9Sm8';\r\n            return {\r\n                autocomplete: query => `${api}suggest.json?q=${query}&engine_key=${key}`,\r\n                search: query => `${api}search.json?q=${query}&engine_key=${key}`\r\n            };\r\n        };\r\n        this.activate = this.activate.bind(this);\r\n        this.close = this.close.bind(this);\r\n        this.onKeyUp = this.onKeyUp.bind(this);\r\n        this.touchStart = this.touchStart.bind(this);\r\n        this.touchMove = this.touchMove.bind(this);\r\n        this.touchEnd = this.touchEnd.bind(this);\r\n        this.urls = this.URLS();\r\n    }\r\n    activate() {\r\n        this.active = true;\r\n        this.el.classList.add('active');\r\n        setTimeout(() => {\r\n            this.el.querySelector('input').focus();\r\n        }, 500, this);\r\n    }\r\n    close() {\r\n        this.active = false;\r\n        this.el.classList.remove('active');\r\n        this.el.querySelector('input').blur();\r\n        setTimeout(() => {\r\n            this.el.querySelector('input').value = '';\r\n            this.results = null;\r\n        }, 500, this);\r\n    }\r\n    async onKeyUp(e) {\r\n        if (e.keyCode === 27) {\r\n            this.close();\r\n            return;\r\n        }\r\n        if (e.target.value.length < 3) {\r\n            this.results = null;\r\n            return;\r\n        }\r\n        this.query = e.target.value;\r\n        this.pending++;\r\n        const resp = await fetch(this.urls.autocomplete(this.query));\r\n        const res = await resp.json();\r\n        this.pending--;\r\n        this.results = res.records.page;\r\n    }\r\n    touchStart(e) {\r\n        this.screenHeight = window.innerHeight\r\n            || document.documentElement.clientHeight\r\n            || document.body.clientHeight;\r\n        this.startY = Math.round(e.touches.item(0).screenY);\r\n    }\r\n    touchMove(e) {\r\n        e.preventDefault();\r\n        this.dragY = Math.max(0, Math.round((e.touches.item(0).screenY - this.startY) / this.screenHeight * 100));\r\n        this.dragStyles = {\r\n            transitionDuration: '.1s',\r\n            transform: `translate3d(0, ${this.dragY}%, 0)`\r\n        };\r\n    }\r\n    isFirefox() {\r\n        return navigator.userAgent.indexOf(\"Firefox\") != -1;\r\n    }\r\n    touchEnd() {\r\n        if (this.dragY > 30) {\r\n            this.close();\r\n        }\r\n        this.dragY = null;\r\n        this.startY = null;\r\n        this.dragStyles = {};\r\n    }\r\n    render() {\r\n        return [\r\n            h(\"div\", { class: `search-box${this.active ? ' active' : ''}`, style: this.dragStyles, onTouchMove: e => this.results && this.results.length > 5 ?\r\n                    null : e.preventDefault() },\r\n                h(\"input\", { type: \"text\", onKeyUp: this.onKeyUp, placeholder: \"Search Ionic..\" }),\r\n                h(\"ion-icon\", { class: `search-static ${this.active ? ' active' : ''}`, name: \"md-search\" }),\r\n                this.mobile && !this.isFirefox() ?\r\n                    h(\"div\", { class: \"mobile-close\", onClick: this.close, onTouchStart: this.touchStart, onTouchMove: this.touchMove, onTouchEnd: this.touchEnd },\r\n                        h(Close, null))\r\n                    :\r\n                        h(\"ion-icon\", { class: `close ${this.active ? ' active' : ''}`, name: 'md-close', onClick: this.close }),\r\n                this.results !== null ? h(\"ul\", null,\r\n                    this.results.map(result => h(\"li\", null,\r\n                        h(\"a\", { href: result.url, title: result.title },\r\n                            h(\"strong\", null, result.title),\r\n                            h(\"span\", { innerHTML: result.highlight.sections })))),\r\n                    this.results.length === 0 ?\r\n                        h(\"li\", null,\r\n                            h(\"span\", { class: \"no-results\" }, \"No results\"))\r\n                        : null) : null,\r\n                h(\"div\", { class: `slot ${this.results === null ? '' : 'hidden'}` },\r\n                    h(\"slot\", null)),\r\n                this.pending > 0 ? h(\"span\", { class: \"searching\" }) : null),\r\n            h(\"ion-icon\", { class: `search ${this.active ? ' active' : ''}`, name: \"md-search\", onClick: this.active ? null : this.activate }),\r\n            h(\"div\", { class: `backdrop ${this.active ? 'active' : null}`, onClick: this.close })\r\n        ];\r\n    }\r\n    static get is() { return \"ionic-search\"; }\r\n    static get properties() { return {\r\n        \"active\": {\r\n            \"state\": true\r\n        },\r\n        \"dragStyles\": {\r\n            \"state\": true\r\n        },\r\n        \"el\": {\r\n            \"elementRef\": true\r\n        },\r\n        \"mobile\": {\r\n            \"type\": Boolean,\r\n            \"attr\": \"mobile\"\r\n        },\r\n        \"pending\": {\r\n            \"state\": true\r\n        },\r\n        \"query\": {\r\n            \"state\": true\r\n        },\r\n        \"results\": {\r\n            \"state\": true\r\n        }\r\n    }; }\r\n    static get style() { return \"\\@-webkit-keyframes ionic-search-scan{0%{left:0}to{left:100%}}\\@keyframes ionic-search-scan{0%{left:0}to{left:100%}}\\@-webkit-keyframes ionic-search-scan-mobile{0%{left:calc(0% + 8px)}to{left:calc(100% - 16px)}}\\@keyframes ionic-search-scan-mobile{0%{left:calc(0% + 8px)}to{left:calc(100% - 16px)}}ionic-search{display:block;display:inline-block}ionic-search svg{fill:#727a87}ionic-search ion-icon{font-size:18px;cursor:pointer}ionic-search ion-icon:hover svg{fill:#3880ff}ionic-search .search{right:115px;font-size:18px;margin-top:7px;color:#fff;-webkit-transition:opacity .2s,-webkit-transform .4s cubic-bezier(.23,1,.32,1);transition:opacity .2s,-webkit-transform .4s cubic-bezier(.23,1,.32,1);transition:opacity .2s,transform .4s cubic-bezier(.23,1,.32,1);transition:opacity .2s,transform .4s cubic-bezier(.23,1,.32,1),-webkit-transform .4s cubic-bezier(.23,1,.32,1)}ionic-search .search.active{cursor:default;opacity:0;-webkit-transform:scale3d(0,0,1);transform:scale3d(0,0,1)}ionic-search .search svg{fill:#a8b0be;width:18px;height:18px}ionic-search .search-static{left:15px;z-index:2;opacity:0;-webkit-transform:translate3d(0,-25px,0);transform:translate3d(0,-25px,0);-webkit-transition:opacity .1s,-webkit-transform .4s cubic-bezier(.23,1,.32,1);transition:opacity .1s,-webkit-transform .4s cubic-bezier(.23,1,.32,1);transition:transform .4s cubic-bezier(.23,1,.32,1),opacity .1s;transition:transform .4s cubic-bezier(.23,1,.32,1),opacity .1s,-webkit-transform .4s cubic-bezier(.23,1,.32,1)}ionic-search .close{right:11px;z-index:2;opacity:0;pointer-events:none;-webkit-transition:opacity .3s;transition:opacity .3s}ionic-search .close.active{pointer-events:all;opacity:1;-webkit-transform:none;transform:none}ionic-search input{width:100%;margin-left:0;padding-left:40px;padding-right:40px;outline:none;border:none;z-index:2;background:#fff;border-radius:6px;padding:14px 30px 14px 41px;font-size:14px;letter-spacing:-.01em;position:relative;opacity:0;-webkit-transform:translate3d(0,-15px,0);transform:translate3d(0,-15px,0);-webkit-transition:opacity .2s,-webkit-transform .4s cubic-bezier(.23,1,.32,1);transition:opacity .2s,-webkit-transform .4s cubic-bezier(.23,1,.32,1);transition:opacity .2s,transform .4s cubic-bezier(.23,1,.32,1);transition:opacity .2s,transform .4s cubic-bezier(.23,1,.32,1),-webkit-transform .4s cubic-bezier(.23,1,.32,1)}ionic-search input::-webkit-input-placeholder{color:#a8b0be}ionic-search input:-ms-input-placeholder{color:#a8b0be}ionic-search input::-ms-input-placeholder{color:#a8b0be}ionic-search input::placeholder{color:#a8b0be}ionic-search .slot .hidden{display:none}ionic-search ul{position:relative;background:#fff;list-style:none;margin-top:4px;margin-bottom:0;border-radius:6px;text-align:left;padding:19px 3px;-webkit-box-shadow:0 8px 16px rgba(0,0,0,.08);box-shadow:0 8px 16px rgba(0,0,0,.08);opacity:0;-webkit-transform:translate3d(0,-50px,0);transform:translate3d(0,-50px,0);-webkit-transition:opacity .2s,-webkit-transform .5s cubic-bezier(.23,1,.32,1);transition:opacity .2s,-webkit-transform .5s cubic-bezier(.23,1,.32,1);transition:transform .5s cubic-bezier(.23,1,.32,1),opacity .2s;transition:transform .5s cubic-bezier(.23,1,.32,1),opacity .2s,-webkit-transform .5s cubic-bezier(.23,1,.32,1)}ionic-search ul strong{display:block;font-weight:600}ionic-search ul span{color:#767d88;font-size:12px}ionic-search ul span em{color:#727a87}ionic-search a,ionic-search ul .no-results{padding:8px 40px;color:#2a2f38}ionic-search a{display:inline-block;font-weight:600;width:100%;-webkit-transition:color .2s,background-color .2s;transition:color .2s,background-color .2s}ionic-search a:hover{color:#3880ff;background-color:#fafafa}ionic-search .searching{position:absolute;height:1px;width:8px;background:#3880ff;top:30px;left:0;-webkit-animation:ionic-search-scan 1s ease-in-out infinite;animation:ionic-search-scan 1s ease-in-out infinite}ionic-search .search-box{position:absolute;left:calc(50% - 330px);width:660px;top:10px;z-index:1;padding-top:2px;pointer-events:none;-webkit-transition:opacity .2s linear;transition:opacity .2s linear}ionic-search .search-box ion-icon{top:17px;font-size:17px;position:absolute}ionic-search .search-box.active{pointer-events:all}ionic-search .search-box.active ul{-webkit-transform:none;transform:none;opacity:1;-webkit-transition-delay:.2s;transition-delay:.2s}ionic-search .search-box.active input{-webkit-transition-delay:.1s;transition-delay:.1s}ionic-search .search-box.active .close,ionic-search .search-box.active .search-static,ionic-search .search-box.active input{-webkit-transform:none;transform:none;opacity:1}ionic-search .search-box.active .close{-webkit-transition-delay:.4s;transition-delay:.4s}ionic-search .backdrop{background:rgba(0,8,24,.4);position:fixed;top:0;right:0;bottom:0;left:0;opacity:0;pointer-events:none;-webkit-transition:all .4s ease;transition:all .4s ease}ionic-search .backdrop.active{opacity:1;pointer-events:all}ionic-search[mobile]{display:block}ionic-search[mobile] .search{color:#999;right:auto;left:0;bottom:0;font-size:28px;padding:22px;top:auto;z-index:3;position:fixed}ionic-search[mobile] .backdrop{top:0;background:rgba(0,0,0,.5);z-index:2}ionic-search[mobile] .search-box{width:auto;left:2px;right:2px;top:42px;bottom:0;padding:60px 12px 48px;position:fixed;z-index:3;background:#fff;border-top-left-radius:12px;border-top-right-radius:12px;-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0);-webkit-transition:-webkit-transform .4s cubic-bezier(.23,1,.32,1);transition:-webkit-transform .4s cubic-bezier(.23,1,.32,1);transition:transform .4s cubic-bezier(.23,1,.32,1);transition:transform .4s cubic-bezier(.23,1,.32,1),-webkit-transform .4s cubic-bezier(.23,1,.32,1)}ionic-search[mobile] .search-box.active{-webkit-transform:none;transform:none}ionic-search[mobile] .mobile-close{-webkit-transition-delay:0;transition-delay:0;left:calc(50% - 24px);top:0;left:0;right:0;position:absolute}ionic-search[mobile] .mobile-close svg{position:absolute;top:8px;width:40px;height:40px;left:calc(50% - 20px)}ionic-search[mobile] .searching{top:113px;z-index:3;-webkit-animation:ionic-search-scan-mobile 1s ease-in-out infinite;animation:ionic-search-scan-mobile 1s ease-in-out infinite}ionic-search[mobile] ul{opacity:1;-webkit-transform:none;transform:none;z-index:3;top:auto;-webkit-box-shadow:none;box-shadow:none;width:100%;max-height:calc(100vh - 154px);overflow:touch}ionic-search[mobile] .search-static{-webkit-transform:none;transform:none;opacity:1;z-index:3;top:71px;left:22px}ionic-search[mobile] a{padding-left:20px;padding-right:20px}ionic-search[mobile] input{margin:0 0 10px;padding:10px 40px 8px;background:#eceef2;border-radius:12px;width:100%}ionic-search[mobile]~.mobile-nav__pane{min-height:100%;background:#fff;-webkit-transition:transform .4s ease,border-radius .4s step-end;transition:transform .4s ease,border-radius .4s step-end}ionic-search[mobile].active~.mobile-nav__pane{border-radius:12px;-webkit-transform:scale3d(.97,.97,1);transform:scale3d(.97,.97,1);-webkit-transition:transform .4s ease;transition:transform .4s ease}.mobile-nav{background:#000!important}\"; }\r\n}\n\nexport { IonicSearch };\n"
  },
  {
    "path": "content/js/stencil/esm/es2017/build/ehteibio.sc.entry.js",
    "content": "import { h } from '../ionic-site-components.core.js';\n\nconst Close = () => (h(\"svg\", { version: \"1.1\", xmlns: \"http://www.w3.org/2000/svg\", viewBox: \"0 0 512 512\", preserveAspectRatio: \"\", style: { 'enable-background': 'new 0 0 512 512' } },\r\n    h(\"path\", { d: \"M256,307c-2.4,0-4.8-0.4-7-1.2L78.3,246.3c-11.1-3.9-17-16-13.1-27.1c3.9-11.1,16.1-16.9,27.2-13l157.9,55.1\\n\\tc3.7,1.3,7.7,1.3,11.3,0l157.9-55.1c11.1-3.9,23.3,2,27.2,13c3.9,11.1-2,23.2-13.1,27.1L263,305.8C260.8,306.6,258.4,307,256,307z\" })));\n\nclass IonicSearch {\r\n    constructor() {\r\n        this.active = false;\r\n        this.query = '';\r\n        this.pending = 0;\r\n        this.results = null;\r\n        this.dragY = null;\r\n        this.startY = null;\r\n        this.screenHeight = null;\r\n        this.URLS = () => {\r\n            const api = 'https://api.swiftype.com/api/v1/public/engines/';\r\n            const key = '9oVyaKGPzxoZAyUo9Sm8';\r\n            return {\r\n                autocomplete: query => `${api}suggest.json?q=${query}&engine_key=${key}`,\r\n                search: query => `${api}search.json?q=${query}&engine_key=${key}`\r\n            };\r\n        };\r\n        this.activate = this.activate.bind(this);\r\n        this.close = this.close.bind(this);\r\n        this.onKeyUp = this.onKeyUp.bind(this);\r\n        this.touchStart = this.touchStart.bind(this);\r\n        this.touchMove = this.touchMove.bind(this);\r\n        this.touchEnd = this.touchEnd.bind(this);\r\n        this.urls = this.URLS();\r\n    }\r\n    activate() {\r\n        this.active = true;\r\n        this.el.classList.add('active');\r\n        setTimeout(() => {\r\n            this.el.querySelector('input').focus();\r\n        }, 500, this);\r\n    }\r\n    close() {\r\n        this.active = false;\r\n        this.el.classList.remove('active');\r\n        this.el.querySelector('input').blur();\r\n        setTimeout(() => {\r\n            this.el.querySelector('input').value = '';\r\n            this.results = null;\r\n        }, 500, this);\r\n    }\r\n    async onKeyUp(e) {\r\n        if (e.keyCode === 27) {\r\n            this.close();\r\n            return;\r\n        }\r\n        if (e.target.value.length < 3) {\r\n            this.results = null;\r\n            return;\r\n        }\r\n        this.query = e.target.value;\r\n        this.pending++;\r\n        const resp = await fetch(this.urls.autocomplete(this.query));\r\n        const res = await resp.json();\r\n        this.pending--;\r\n        this.results = res.records.page;\r\n    }\r\n    touchStart(e) {\r\n        this.screenHeight = window.innerHeight\r\n            || document.documentElement.clientHeight\r\n            || document.body.clientHeight;\r\n        this.startY = Math.round(e.touches.item(0).screenY);\r\n    }\r\n    touchMove(e) {\r\n        e.preventDefault();\r\n        this.dragY = Math.max(0, Math.round((e.touches.item(0).screenY - this.startY) / this.screenHeight * 100));\r\n        this.dragStyles = {\r\n            transitionDuration: '.1s',\r\n            transform: `translate3d(0, ${this.dragY}%, 0)`\r\n        };\r\n    }\r\n    isFirefox() {\r\n        return navigator.userAgent.indexOf(\"Firefox\") != -1;\r\n    }\r\n    touchEnd() {\r\n        if (this.dragY > 30) {\r\n            this.close();\r\n        }\r\n        this.dragY = null;\r\n        this.startY = null;\r\n        this.dragStyles = {};\r\n    }\r\n    render() {\r\n        return [\r\n            h(\"div\", { class: `search-box${this.active ? ' active' : ''}`, style: this.dragStyles, onTouchMove: e => this.results && this.results.length > 5 ?\r\n                    null : e.preventDefault() },\r\n                h(\"input\", { type: \"text\", onKeyUp: this.onKeyUp, placeholder: \"Search Ionic..\" }),\r\n                h(\"ion-icon\", { class: `search-static ${this.active ? ' active' : ''}`, name: \"md-search\" }),\r\n                this.mobile && !this.isFirefox() ?\r\n                    h(\"div\", { class: \"mobile-close\", onClick: this.close, onTouchStart: this.touchStart, onTouchMove: this.touchMove, onTouchEnd: this.touchEnd },\r\n                        h(Close, null))\r\n                    :\r\n                        h(\"ion-icon\", { class: `close ${this.active ? ' active' : ''}`, name: 'md-close', onClick: this.close }),\r\n                this.results !== null ? h(\"ul\", null,\r\n                    this.results.map(result => h(\"li\", null,\r\n                        h(\"a\", { href: result.url, title: result.title },\r\n                            h(\"strong\", null, result.title),\r\n                            h(\"span\", { innerHTML: result.highlight.sections })))),\r\n                    this.results.length === 0 ?\r\n                        h(\"li\", null,\r\n                            h(\"span\", { class: \"no-results\" }, \"No results\"))\r\n                        : null) : null,\r\n                h(\"div\", { class: `slot ${this.results === null ? '' : 'hidden'}` },\r\n                    h(\"slot\", null)),\r\n                this.pending > 0 ? h(\"span\", { class: \"searching\" }) : null),\r\n            h(\"ion-icon\", { class: `search ${this.active ? ' active' : ''}`, name: \"md-search\", onClick: this.active ? null : this.activate }),\r\n            h(\"div\", { class: `backdrop ${this.active ? 'active' : null}`, onClick: this.close })\r\n        ];\r\n    }\r\n    static get is() { return \"ionic-search\"; }\r\n    static get properties() { return {\r\n        \"active\": {\r\n            \"state\": true\r\n        },\r\n        \"dragStyles\": {\r\n            \"state\": true\r\n        },\r\n        \"el\": {\r\n            \"elementRef\": true\r\n        },\r\n        \"mobile\": {\r\n            \"type\": Boolean,\r\n            \"attr\": \"mobile\"\r\n        },\r\n        \"pending\": {\r\n            \"state\": true\r\n        },\r\n        \"query\": {\r\n            \"state\": true\r\n        },\r\n        \"results\": {\r\n            \"state\": true\r\n        }\r\n    }; }\r\n    static get style() { return \"\\@-webkit-keyframes ionic-search-scan{0%{left:0}to{left:100%}}\\@keyframes ionic-search-scan{0%{left:0}to{left:100%}}\\@-webkit-keyframes ionic-search-scan-mobile{0%{left:calc(0% + 8px)}to{left:calc(100% - 16px)}}\\@keyframes ionic-search-scan-mobile{0%{left:calc(0% + 8px)}to{left:calc(100% - 16px)}}ionic-search{display:block;display:inline-block}ionic-search svg{fill:#727a87}ionic-search ion-icon{font-size:18px;cursor:pointer}ionic-search ion-icon:hover svg{fill:#3880ff}ionic-search .search{right:115px;font-size:18px;margin-top:7px;color:#fff;-webkit-transition:opacity .2s,-webkit-transform .4s cubic-bezier(.23,1,.32,1);transition:opacity .2s,-webkit-transform .4s cubic-bezier(.23,1,.32,1);transition:opacity .2s,transform .4s cubic-bezier(.23,1,.32,1);transition:opacity .2s,transform .4s cubic-bezier(.23,1,.32,1),-webkit-transform .4s cubic-bezier(.23,1,.32,1)}ionic-search .search.active{cursor:default;opacity:0;-webkit-transform:scale3d(0,0,1);transform:scale3d(0,0,1)}ionic-search .search svg{fill:#a8b0be;width:18px;height:18px}ionic-search .search-static{left:15px;z-index:2;opacity:0;-webkit-transform:translate3d(0,-25px,0);transform:translate3d(0,-25px,0);-webkit-transition:opacity .1s,-webkit-transform .4s cubic-bezier(.23,1,.32,1);transition:opacity .1s,-webkit-transform .4s cubic-bezier(.23,1,.32,1);transition:transform .4s cubic-bezier(.23,1,.32,1),opacity .1s;transition:transform .4s cubic-bezier(.23,1,.32,1),opacity .1s,-webkit-transform .4s cubic-bezier(.23,1,.32,1)}ionic-search .close{right:11px;z-index:2;opacity:0;pointer-events:none;-webkit-transition:opacity .3s;transition:opacity .3s}ionic-search .close.active{pointer-events:all;opacity:1;-webkit-transform:none;transform:none}ionic-search input{width:100%;margin-left:0;padding-left:40px;padding-right:40px;outline:none;border:none;z-index:2;background:#fff;border-radius:6px;padding:14px 30px 14px 41px;font-size:14px;letter-spacing:-.01em;position:relative;opacity:0;-webkit-transform:translate3d(0,-15px,0);transform:translate3d(0,-15px,0);-webkit-transition:opacity .2s,-webkit-transform .4s cubic-bezier(.23,1,.32,1);transition:opacity .2s,-webkit-transform .4s cubic-bezier(.23,1,.32,1);transition:opacity .2s,transform .4s cubic-bezier(.23,1,.32,1);transition:opacity .2s,transform .4s cubic-bezier(.23,1,.32,1),-webkit-transform .4s cubic-bezier(.23,1,.32,1)}ionic-search input::-webkit-input-placeholder{color:#a8b0be}ionic-search input:-ms-input-placeholder{color:#a8b0be}ionic-search input::-ms-input-placeholder{color:#a8b0be}ionic-search input::placeholder{color:#a8b0be}ionic-search .slot .hidden{display:none}ionic-search ul{position:relative;background:#fff;list-style:none;margin-top:4px;margin-bottom:0;border-radius:6px;text-align:left;padding:19px 3px;-webkit-box-shadow:0 8px 16px rgba(0,0,0,.08);box-shadow:0 8px 16px rgba(0,0,0,.08);opacity:0;-webkit-transform:translate3d(0,-50px,0);transform:translate3d(0,-50px,0);-webkit-transition:opacity .2s,-webkit-transform .5s cubic-bezier(.23,1,.32,1);transition:opacity .2s,-webkit-transform .5s cubic-bezier(.23,1,.32,1);transition:transform .5s cubic-bezier(.23,1,.32,1),opacity .2s;transition:transform .5s cubic-bezier(.23,1,.32,1),opacity .2s,-webkit-transform .5s cubic-bezier(.23,1,.32,1)}ionic-search ul strong{display:block;font-weight:600}ionic-search ul span{color:#767d88;font-size:12px}ionic-search ul span em{color:#727a87}ionic-search a,ionic-search ul .no-results{padding:8px 40px;color:#2a2f38}ionic-search a{display:inline-block;font-weight:600;width:100%;-webkit-transition:color .2s,background-color .2s;transition:color .2s,background-color .2s}ionic-search a:hover{color:#3880ff;background-color:#fafafa}ionic-search .searching{position:absolute;height:1px;width:8px;background:#3880ff;top:30px;left:0;-webkit-animation:ionic-search-scan 1s ease-in-out infinite;animation:ionic-search-scan 1s ease-in-out infinite}ionic-search .search-box{position:absolute;left:calc(50% - 330px);width:660px;top:10px;z-index:1;padding-top:2px;pointer-events:none;-webkit-transition:opacity .2s linear;transition:opacity .2s linear}ionic-search .search-box ion-icon{top:17px;font-size:17px;position:absolute}ionic-search .search-box.active{pointer-events:all}ionic-search .search-box.active ul{-webkit-transform:none;transform:none;opacity:1;-webkit-transition-delay:.2s;transition-delay:.2s}ionic-search .search-box.active input{-webkit-transition-delay:.1s;transition-delay:.1s}ionic-search .search-box.active .close,ionic-search .search-box.active .search-static,ionic-search .search-box.active input{-webkit-transform:none;transform:none;opacity:1}ionic-search .search-box.active .close{-webkit-transition-delay:.4s;transition-delay:.4s}ionic-search .backdrop{background:rgba(0,8,24,.4);position:fixed;top:0;right:0;bottom:0;left:0;opacity:0;pointer-events:none;-webkit-transition:all .4s ease;transition:all .4s ease}ionic-search .backdrop.active{opacity:1;pointer-events:all}ionic-search[mobile]{display:block}ionic-search[mobile] .search{color:#999;right:auto;left:0;bottom:0;font-size:28px;padding:22px;top:auto;z-index:3;position:fixed}ionic-search[mobile] .backdrop{top:0;background:rgba(0,0,0,.5);z-index:2}ionic-search[mobile] .search-box{width:auto;left:2px;right:2px;top:42px;bottom:0;padding:60px 12px 48px;position:fixed;z-index:3;background:#fff;border-top-left-radius:12px;border-top-right-radius:12px;-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0);-webkit-transition:-webkit-transform .4s cubic-bezier(.23,1,.32,1);transition:-webkit-transform .4s cubic-bezier(.23,1,.32,1);transition:transform .4s cubic-bezier(.23,1,.32,1);transition:transform .4s cubic-bezier(.23,1,.32,1),-webkit-transform .4s cubic-bezier(.23,1,.32,1)}ionic-search[mobile] .search-box.active{-webkit-transform:none;transform:none}ionic-search[mobile] .mobile-close{-webkit-transition-delay:0;transition-delay:0;left:calc(50% - 24px);top:0;left:0;right:0;position:absolute}ionic-search[mobile] .mobile-close svg{position:absolute;top:8px;width:40px;height:40px;left:calc(50% - 20px)}ionic-search[mobile] .searching{top:113px;z-index:3;-webkit-animation:ionic-search-scan-mobile 1s ease-in-out infinite;animation:ionic-search-scan-mobile 1s ease-in-out infinite}ionic-search[mobile] ul{opacity:1;-webkit-transform:none;transform:none;z-index:3;top:auto;-webkit-box-shadow:none;box-shadow:none;width:100%;max-height:calc(100vh - 154px);overflow:touch}ionic-search[mobile] .search-static{-webkit-transform:none;transform:none;opacity:1;z-index:3;top:71px;left:22px}ionic-search[mobile] a{padding-left:20px;padding-right:20px}ionic-search[mobile] input{margin:0 0 10px;padding:10px 40px 8px;background:#eceef2;border-radius:12px;width:100%}ionic-search[mobile]~.mobile-nav__pane{min-height:100%;background:#fff;-webkit-transition:transform .4s ease,border-radius .4s step-end;transition:transform .4s ease,border-radius .4s step-end}ionic-search[mobile].active~.mobile-nav__pane{border-radius:12px;-webkit-transform:scale3d(.97,.97,1);transform:scale3d(.97,.97,1);-webkit-transition:transform .4s ease;transition:transform .4s ease}.mobile-nav{background:#000!important}\"; }\r\n}\n\nexport { IonicSearch };\n"
  },
  {
    "path": "content/js/stencil/esm/es2017/build/hclgi8iu.entry.js",
    "content": "import { h } from '../ionic-site-components.core.js';\n\n/*!\n * VERSION: 2.1.2\n * DATE: 2019-03-01\n * UPDATES AND DOCS AT: http://greensock.com\n *\n * @license Copyright (c) 2008-2019, GreenSock. All rights reserved.\n * This work is subject to the terms at http://greensock.com/standard-license or for\n * Club GreenSock members, the software agreement that was issued with your membership.\n *\n * @author: Jack Doyle, jack@greensock.com\n */\n/* eslint-disable */\n\n/* ES6 changes:\n\t- declare and export _gsScope at top.\n\t- set var TweenLite = the result of the main function\n\t- export default TweenLite at the bottom\n\t- return TweenLite at the bottom of the main function\n\t- pass in _gsScope as the first parameter of the main function (which is actually at the bottom)\n\t- remove the \"export to multiple environments\" in Definition().\n */\nvar _gsScope = (typeof(window) !== \"undefined\") ? window : (typeof(module) !== \"undefined\" && module.exports && typeof(global) !== \"undefined\") ? global : undefined || {};\n\nvar TweenLite = (function(window) {\n\t\tvar _exports = {},\n\t\t\t_doc = window.document,\n\t\t\t_globals = window.GreenSockGlobals = window.GreenSockGlobals || window;\n\t\tif (_globals.TweenLite) {\n\t\t\treturn _globals.TweenLite; //in case the core set of classes is already loaded, don't instantiate twice.\n\t\t}\n\t\tvar _namespace = function(ns) {\n\t\t\t\tvar a = ns.split(\".\"),\n\t\t\t\t\tp = _globals, i;\n\t\t\t\tfor (i = 0; i < a.length; i++) {\n\t\t\t\t\tp[a[i]] = p = p[a[i]] || {};\n\t\t\t\t}\n\t\t\t\treturn p;\n\t\t\t},\n\t\t\tgs = _namespace(\"com.greensock\"),\n\t\t\t_tinyNum = 0.00000001,\n\t\t\t_slice = function(a) { //don't use Array.prototype.slice.call(target, 0) because that doesn't work in IE8 with a NodeList that's returned by querySelectorAll()\n\t\t\t\tvar b = [],\n\t\t\t\t\tl = a.length,\n\t\t\t\t\ti;\n\t\t\t\tfor (i = 0; i !== l; b.push(a[i++])) {}\n\t\t\t\treturn b;\n\t\t\t},\n\t\t\t_emptyFunc = function() {},\n\t\t\t_isArray = (function() { //works around issues in iframe environments where the Array global isn't shared, thus if the object originates in a different window/iframe, \"(obj instanceof Array)\" will evaluate false. We added some speed optimizations to avoid Object.prototype.toString.call() unless it's absolutely necessary because it's VERY slow (like 20x slower)\n\t\t\t\tvar toString = Object.prototype.toString,\n\t\t\t\t\tarray = toString.call([]);\n\t\t\t\treturn function(obj) {\n\t\t\t\t\treturn obj != null && (obj instanceof Array || (typeof(obj) === \"object\" && !!obj.push && toString.call(obj) === array));\n\t\t\t\t};\n\t\t\t}()),\n\t\t\ta, i, p, _ticker, _tickerActive,\n\t\t\t_defLookup = {},\n\n\t\t\t/**\n\t\t\t * @constructor\n\t\t\t * Defines a GreenSock class, optionally with an array of dependencies that must be instantiated first and passed into the definition.\n\t\t\t * This allows users to load GreenSock JS files in any order even if they have interdependencies (like CSSPlugin extends TweenPlugin which is\n\t\t\t * inside TweenLite.js, but if CSSPlugin is loaded first, it should wait to run its code until TweenLite.js loads and instantiates TweenPlugin\n\t\t\t * and then pass TweenPlugin to CSSPlugin's definition). This is all done automatically and internally.\n\t\t\t *\n\t\t\t * Every definition will be added to a \"com.greensock\" global object (typically window, but if a window.GreenSockGlobals object is found,\n\t\t\t * it will go there as of v1.7). For example, TweenLite will be found at window.com.greensock.TweenLite and since it's a global class that should be available anywhere,\n\t\t\t * it is ALSO referenced at window.TweenLite. However some classes aren't considered global, like the base com.greensock.core.Animation class, so\n\t\t\t * those will only be at the package like window.com.greensock.core.Animation. Again, if you define a GreenSockGlobals object on the window, everything\n\t\t\t * gets tucked neatly inside there instead of on the window directly. This allows you to do advanced things like load multiple versions of GreenSock\n\t\t\t * files and put them into distinct objects (imagine a banner ad uses a newer version but the main site uses an older one). In that case, you could\n\t\t\t * sandbox the banner one like:\n\t\t\t *\n\t\t\t * <script>\n\t\t\t *     var gs = window.GreenSockGlobals = {}; //the newer version we're about to load could now be referenced in a \"gs\" object, like gs.TweenLite.to(...). Use whatever alias you want as long as it's unique, \"gs\" or \"banner\" or whatever.\n\t\t\t * </script>\n\t\t\t * <script src=\"js/greensock/v1.7/TweenMax.js\"></script>\n\t\t\t * <script>\n\t\t\t *     window.GreenSockGlobals = window._gsQueue = window._gsDefine = null; //reset it back to null (along with the special _gsQueue variable) so that the next load of TweenMax affects the window and we can reference things directly like TweenLite.to(...)\n\t\t\t * </script>\n\t\t\t * <script src=\"js/greensock/v1.6/TweenMax.js\"></script>\n\t\t\t * <script>\n\t\t\t *     gs.TweenLite.to(...); //would use v1.7\n\t\t\t *     TweenLite.to(...); //would use v1.6\n\t\t\t * </script>\n\t\t\t *\n\t\t\t * @param {!string} ns The namespace of the class definition, leaving off \"com.greensock.\" as that's assumed. For example, \"TweenLite\" or \"plugins.CSSPlugin\" or \"easing.Back\".\n\t\t\t * @param {!Array.<string>} dependencies An array of dependencies (described as their namespaces minus \"com.greensock.\" prefix). For example [\"TweenLite\",\"plugins.TweenPlugin\",\"core.Animation\"]\n\t\t\t * @param {!function():Object} func The function that should be called and passed the resolved dependencies which will return the actual class for this definition.\n\t\t\t * @param {boolean=} global If true, the class will be added to the global scope (typically window unless you define a window.GreenSockGlobals object)\n\t\t\t */\n\t\t\tDefinition = function(ns, dependencies, func, global) {\n\t\t\t\tthis.sc = (_defLookup[ns]) ? _defLookup[ns].sc : []; //subclasses\n\t\t\t\t_defLookup[ns] = this;\n\t\t\t\tthis.gsClass = null;\n\t\t\t\tthis.func = func;\n\t\t\t\tvar _classes = [];\n\t\t\t\tthis.check = function(init) {\n\t\t\t\t\tvar i = dependencies.length,\n\t\t\t\t\t\tmissing = i,\n\t\t\t\t\t\tcur, a, n, cl;\n\t\t\t\t\twhile (--i > -1) {\n\t\t\t\t\t\tif ((cur = _defLookup[dependencies[i]] || new Definition(dependencies[i], [])).gsClass) {\n\t\t\t\t\t\t\t_classes[i] = cur.gsClass;\n\t\t\t\t\t\t\tmissing--;\n\t\t\t\t\t\t} else if (init) {\n\t\t\t\t\t\t\tcur.sc.push(this);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (missing === 0 && func) {\n\t\t\t\t\t\ta = (\"com.greensock.\" + ns).split(\".\");\n\t\t\t\t\t\tn = a.pop();\n\t\t\t\t\t\tcl = _namespace(a.join(\".\"))[n] = this.gsClass = func.apply(func, _classes);\n\n\t\t\t\t\t\t//exports to multiple environments\n\t\t\t\t\t\tif (global) {\n\t\t\t\t\t\t\t_globals[n] = _exports[n] = cl; //provides a way to avoid global namespace pollution. By default, the main classes like TweenLite, Power1, Strong, etc. are added to window unless a GreenSockGlobals is defined. So if you want to have things added to a custom object instead, just do something like window.GreenSockGlobals = {} before loading any GreenSock files. You can even set up an alias like window.GreenSockGlobals = windows.gs = {} so that you can access everything like gs.TweenLite. Also remember that ALL classes are added to the window.com.greensock object (in their respective packages, like com.greensock.easing.Power1, com.greensock.TweenLite, etc.)\n\t\t\t\t\t\t\t/*\n\t\t\t\t\t\t\tif (typeof(module) !== \"undefined\" && module.exports) { //node\n\t\t\t\t\t\t\t\tif (ns === moduleName) {\n\t\t\t\t\t\t\t\t\tmodule.exports = _exports[moduleName] = cl;\n\t\t\t\t\t\t\t\t\tfor (i in _exports) {\n\t\t\t\t\t\t\t\t\t\tcl[i] = _exports[i];\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t} else if (_exports[moduleName]) {\n\t\t\t\t\t\t\t\t\t_exports[moduleName][n] = cl;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else if (typeof(define) === \"function\" && define.amd){ //AMD\n\t\t\t\t\t\t\t\tdefine((window.GreenSockAMDPath ? window.GreenSockAMDPath + \"/\" : \"\") + ns.split(\".\").pop(), [], function() { return cl; });\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t*/\n\t\t\t\t\t\t}\n\t\t\t\t\t\tfor (i = 0; i < this.sc.length; i++) {\n\t\t\t\t\t\t\tthis.sc[i].check();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t\tthis.check(true);\n\t\t\t},\n\n\t\t\t//used to create Definition instances (which basically registers a class that has dependencies).\n\t\t\t_gsDefine = window._gsDefine = function(ns, dependencies, func, global) {\n\t\t\t\treturn new Definition(ns, dependencies, func, global);\n\t\t\t},\n\n\t\t\t//a quick way to create a class that doesn't have any dependencies. Returns the class, but first registers it in the GreenSock namespace so that other classes can grab it (other classes might be dependent on the class).\n\t\t\t_class = gs._class = function(ns, func, global) {\n\t\t\t\tfunc = func || function() {};\n\t\t\t\t_gsDefine(ns, [], function(){ return func; }, global);\n\t\t\t\treturn func;\n\t\t\t};\n\n\t\t_gsDefine.globals = _globals;\n\n\n\n/*\n * ----------------------------------------------------------------\n * Ease\n * ----------------------------------------------------------------\n */\n\t\tvar _baseParams = [0, 0, 1, 1],\n\t\t\tEase = _class(\"easing.Ease\", function(func, extraParams, type, power) {\n\t\t\t\tthis._func = func;\n\t\t\t\tthis._type = type || 0;\n\t\t\t\tthis._power = power || 0;\n\t\t\t\tthis._params = extraParams ? _baseParams.concat(extraParams) : _baseParams;\n\t\t\t}, true),\n\t\t\t_easeMap = Ease.map = {},\n\t\t\t_easeReg = Ease.register = function(ease, names, types, create) {\n\t\t\t\tvar na = names.split(\",\"),\n\t\t\t\t\ti = na.length,\n\t\t\t\t\tta = (types || \"easeIn,easeOut,easeInOut\").split(\",\"),\n\t\t\t\t\te, name, j, type;\n\t\t\t\twhile (--i > -1) {\n\t\t\t\t\tname = na[i];\n\t\t\t\t\te = create ? _class(\"easing.\"+name, null, true) : gs.easing[name] || {};\n\t\t\t\t\tj = ta.length;\n\t\t\t\t\twhile (--j > -1) {\n\t\t\t\t\t\ttype = ta[j];\n\t\t\t\t\t\t_easeMap[name + \".\" + type] = _easeMap[type + name] = e[type] = ease.getRatio ? ease : ease[type] || new ease();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\n\t\tp = Ease.prototype;\n\t\tp._calcEnd = false;\n\t\tp.getRatio = function(p) {\n\t\t\tif (this._func) {\n\t\t\t\tthis._params[0] = p;\n\t\t\t\treturn this._func.apply(null, this._params);\n\t\t\t}\n\t\t\tvar t = this._type,\n\t\t\t\tpw = this._power,\n\t\t\t\tr = (t === 1) ? 1 - p : (t === 2) ? p : (p < 0.5) ? p * 2 : (1 - p) * 2;\n\t\t\tif (pw === 1) {\n\t\t\t\tr *= r;\n\t\t\t} else if (pw === 2) {\n\t\t\t\tr *= r * r;\n\t\t\t} else if (pw === 3) {\n\t\t\t\tr *= r * r * r;\n\t\t\t} else if (pw === 4) {\n\t\t\t\tr *= r * r * r * r;\n\t\t\t}\n\t\t\treturn (t === 1) ? 1 - r : (t === 2) ? r : (p < 0.5) ? r / 2 : 1 - (r / 2);\n\t\t};\n\n\t\t//create all the standard eases like Linear, Quad, Cubic, Quart, Quint, Strong, Power0, Power1, Power2, Power3, and Power4 (each with easeIn, easeOut, and easeInOut)\n\t\ta = [\"Linear\",\"Quad\",\"Cubic\",\"Quart\",\"Quint,Strong\"];\n\t\ti = a.length;\n\t\twhile (--i > -1) {\n\t\t\tp = a[i]+\",Power\"+i;\n\t\t\t_easeReg(new Ease(null,null,1,i), p, \"easeOut\", true);\n\t\t\t_easeReg(new Ease(null,null,2,i), p, \"easeIn\" + ((i === 0) ? \",easeNone\" : \"\"));\n\t\t\t_easeReg(new Ease(null,null,3,i), p, \"easeInOut\");\n\t\t}\n\t\t_easeMap.linear = gs.easing.Linear.easeIn;\n\t\t_easeMap.swing = gs.easing.Quad.easeInOut; //for jQuery folks\n\n\n/*\n * ----------------------------------------------------------------\n * EventDispatcher\n * ----------------------------------------------------------------\n */\n\t\tvar EventDispatcher = _class(\"events.EventDispatcher\", function(target) {\n\t\t\tthis._listeners = {};\n\t\t\tthis._eventTarget = target || this;\n\t\t});\n\t\tp = EventDispatcher.prototype;\n\n\t\tp.addEventListener = function(type, callback, scope, useParam, priority) {\n\t\t\tpriority = priority || 0;\n\t\t\tvar list = this._listeners[type],\n\t\t\t\tindex = 0,\n\t\t\t\tlistener, i;\n\t\t\tif (this === _ticker && !_tickerActive) {\n\t\t\t\t_ticker.wake();\n\t\t\t}\n\t\t\tif (list == null) {\n\t\t\t\tthis._listeners[type] = list = [];\n\t\t\t}\n\t\t\ti = list.length;\n\t\t\twhile (--i > -1) {\n\t\t\t\tlistener = list[i];\n\t\t\t\tif (listener.c === callback && listener.s === scope) {\n\t\t\t\t\tlist.splice(i, 1);\n\t\t\t\t} else if (index === 0 && listener.pr < priority) {\n\t\t\t\t\tindex = i + 1;\n\t\t\t\t}\n\t\t\t}\n\t\t\tlist.splice(index, 0, {c:callback, s:scope, up:useParam, pr:priority});\n\t\t};\n\n\t\tp.removeEventListener = function(type, callback) {\n\t\t\tvar list = this._listeners[type], i;\n\t\t\tif (list) {\n\t\t\t\ti = list.length;\n\t\t\t\twhile (--i > -1) {\n\t\t\t\t\tif (list[i].c === callback) {\n\t\t\t\t\t\tlist.splice(i, 1);\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\tp.dispatchEvent = function(type) {\n\t\t\tvar list = this._listeners[type],\n\t\t\t\ti, t, listener;\n\t\t\tif (list) {\n\t\t\t\ti = list.length;\n\t\t\t\tif (i > 1) {\n\t\t\t\t\tlist = list.slice(0); //in case addEventListener() is called from within a listener/callback (otherwise the index could change, resulting in a skip)\n\t\t\t\t}\n\t\t\t\tt = this._eventTarget;\n\t\t\t\twhile (--i > -1) {\n\t\t\t\t\tlistener = list[i];\n\t\t\t\t\tif (listener) {\n\t\t\t\t\t\tif (listener.up) {\n\t\t\t\t\t\t\tlistener.c.call(listener.s || t, {type:type, target:t});\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tlistener.c.call(listener.s || t);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\n/*\n * ----------------------------------------------------------------\n * Ticker\n * ----------------------------------------------------------------\n */\n \t\tvar _reqAnimFrame = window.requestAnimationFrame,\n\t\t\t_cancelAnimFrame = window.cancelAnimationFrame,\n\t\t\t_getTime = Date.now || function() {return new Date().getTime();},\n\t\t\t_lastUpdate = _getTime();\n\n\t\t//now try to determine the requestAnimationFrame and cancelAnimationFrame functions and if none are found, we'll use a setTimeout()/clearTimeout() polyfill.\n\t\ta = [\"ms\",\"moz\",\"webkit\",\"o\"];\n\t\ti = a.length;\n\t\twhile (--i > -1 && !_reqAnimFrame) {\n\t\t\t_reqAnimFrame = window[a[i] + \"RequestAnimationFrame\"];\n\t\t\t_cancelAnimFrame = window[a[i] + \"CancelAnimationFrame\"] || window[a[i] + \"CancelRequestAnimationFrame\"];\n\t\t}\n\n\t\t_class(\"Ticker\", function(fps, useRAF) {\n\t\t\tvar _self = this,\n\t\t\t\t_startTime = _getTime(),\n\t\t\t\t_useRAF = (useRAF !== false && _reqAnimFrame) ? \"auto\" : false,\n\t\t\t\t_lagThreshold = 500,\n\t\t\t\t_adjustedLag = 33,\n\t\t\t\t_tickWord = \"tick\", //helps reduce gc burden\n\t\t\t\t_fps, _req, _id, _gap, _nextTime,\n\t\t\t\t_tick = function(manual) {\n\t\t\t\t\tvar elapsed = _getTime() - _lastUpdate,\n\t\t\t\t\t\toverlap, dispatch;\n\t\t\t\t\tif (elapsed > _lagThreshold) {\n\t\t\t\t\t\t_startTime += elapsed - _adjustedLag;\n\t\t\t\t\t}\n\t\t\t\t\t_lastUpdate += elapsed;\n\t\t\t\t\t_self.time = (_lastUpdate - _startTime) / 1000;\n\t\t\t\t\toverlap = _self.time - _nextTime;\n\t\t\t\t\tif (!_fps || overlap > 0 || manual === true) {\n\t\t\t\t\t\t_self.frame++;\n\t\t\t\t\t\t_nextTime += overlap + (overlap >= _gap ? 0.004 : _gap - overlap);\n\t\t\t\t\t\tdispatch = true;\n\t\t\t\t\t}\n\t\t\t\t\tif (manual !== true) { //make sure the request is made before we dispatch the \"tick\" event so that timing is maintained. Otherwise, if processing the \"tick\" requires a bunch of time (like 15ms) and we're using a setTimeout() that's based on 16.7ms, it'd technically take 31.7ms between frames otherwise.\n\t\t\t\t\t\t_id = _req(_tick);\n\t\t\t\t\t}\n\t\t\t\t\tif (dispatch) {\n\t\t\t\t\t\t_self.dispatchEvent(_tickWord);\n\t\t\t\t\t}\n\t\t\t\t};\n\n\t\t\tEventDispatcher.call(_self);\n\t\t\t_self.time = _self.frame = 0;\n\t\t\t_self.tick = function() {\n\t\t\t\t_tick(true);\n\t\t\t};\n\n\t\t\t_self.lagSmoothing = function(threshold, adjustedLag) {\n\t\t\t\tif (!arguments.length) { //if lagSmoothing() is called with no arguments, treat it like a getter that returns a boolean indicating if it's enabled or not. This is purposely undocumented and is for internal use.\n\t\t\t\t\treturn (_lagThreshold < 1 / _tinyNum);\n\t\t\t\t}\n\t\t\t\t_lagThreshold = threshold || (1 / _tinyNum); //zero should be interpreted as basically unlimited\n\t\t\t\t_adjustedLag = Math.min(adjustedLag, _lagThreshold, 0);\n\t\t\t};\n\n\t\t\t_self.sleep = function() {\n\t\t\t\tif (_id == null) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tif (!_useRAF || !_cancelAnimFrame) {\n\t\t\t\t\tclearTimeout(_id);\n\t\t\t\t} else {\n\t\t\t\t\t_cancelAnimFrame(_id);\n\t\t\t\t}\n\t\t\t\t_req = _emptyFunc;\n\t\t\t\t_id = null;\n\t\t\t\tif (_self === _ticker) {\n\t\t\t\t\t_tickerActive = false;\n\t\t\t\t}\n\t\t\t};\n\n\t\t\t_self.wake = function(seamless) {\n\t\t\t\tif (_id !== null) {\n\t\t\t\t\t_self.sleep();\n\t\t\t\t} else if (seamless) {\n\t\t\t\t\t_startTime += -_lastUpdate + (_lastUpdate = _getTime());\n\t\t\t\t} else if (_self.frame > 10) { //don't trigger lagSmoothing if we're just waking up, and make sure that at least 10 frames have elapsed because of the iOS bug that we work around below with the 1.5-second setTimout().\n\t\t\t\t\t_lastUpdate = _getTime() - _lagThreshold + 5;\n\t\t\t\t}\n\t\t\t\t_req = (_fps === 0) ? _emptyFunc : (!_useRAF || !_reqAnimFrame) ? function(f) { return setTimeout(f, ((_nextTime - _self.time) * 1000 + 1) | 0); } : _reqAnimFrame;\n\t\t\t\tif (_self === _ticker) {\n\t\t\t\t\t_tickerActive = true;\n\t\t\t\t}\n\t\t\t\t_tick(2);\n\t\t\t};\n\n\t\t\t_self.fps = function(value) {\n\t\t\t\tif (!arguments.length) {\n\t\t\t\t\treturn _fps;\n\t\t\t\t}\n\t\t\t\t_fps = value;\n\t\t\t\t_gap = 1 / (_fps || 60);\n\t\t\t\t_nextTime = this.time + _gap;\n\t\t\t\t_self.wake();\n\t\t\t};\n\n\t\t\t_self.useRAF = function(value) {\n\t\t\t\tif (!arguments.length) {\n\t\t\t\t\treturn _useRAF;\n\t\t\t\t}\n\t\t\t\t_self.sleep();\n\t\t\t\t_useRAF = value;\n\t\t\t\t_self.fps(_fps);\n\t\t\t};\n\t\t\t_self.fps(fps);\n\n\t\t\t//a bug in iOS 6 Safari occasionally prevents the requestAnimationFrame from working initially, so we use a 1.5-second timeout that automatically falls back to setTimeout() if it senses this condition.\n\t\t\tsetTimeout(function() {\n\t\t\t\tif (_useRAF === \"auto\" && _self.frame < 5 && (_doc || {}).visibilityState !== \"hidden\") {\n\t\t\t\t\t_self.useRAF(false);\n\t\t\t\t}\n\t\t\t}, 1500);\n\t\t});\n\n\t\tp = gs.Ticker.prototype = new gs.events.EventDispatcher();\n\t\tp.constructor = gs.Ticker;\n\n\n/*\n * ----------------------------------------------------------------\n * Animation\n * ----------------------------------------------------------------\n */\n\t\tvar Animation = _class(\"core.Animation\", function(duration, vars) {\n\t\t\t\tthis.vars = vars = vars || {};\n\t\t\t\tthis._duration = this._totalDuration = duration || 0;\n\t\t\t\tthis._delay = Number(vars.delay) || 0;\n\t\t\t\tthis._timeScale = 1;\n\t\t\t\tthis._active = !!vars.immediateRender;\n\t\t\t\tthis.data = vars.data;\n\t\t\t\tthis._reversed = !!vars.reversed;\n\n\t\t\t\tif (!_rootTimeline) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tif (!_tickerActive) { //some browsers (like iOS 6 Safari) shut down JavaScript execution when the tab is disabled and they [occasionally] neglect to start up requestAnimationFrame again when returning - this code ensures that the engine starts up again properly.\n\t\t\t\t\t_ticker.wake();\n\t\t\t\t}\n\n\t\t\t\tvar tl = this.vars.useFrames ? _rootFramesTimeline : _rootTimeline;\n\t\t\t\ttl.add(this, tl._time);\n\n\t\t\t\tif (this.vars.paused) {\n\t\t\t\t\tthis.paused(true);\n\t\t\t\t}\n\t\t\t});\n\n\t\t_ticker = Animation.ticker = new gs.Ticker();\n\t\tp = Animation.prototype;\n\t\tp._dirty = p._gc = p._initted = p._paused = false;\n\t\tp._totalTime = p._time = 0;\n\t\tp._rawPrevTime = -1;\n\t\tp._next = p._last = p._onUpdate = p._timeline = p.timeline = null;\n\t\tp._paused = false;\n\n\n\t\t//some browsers (like iOS) occasionally drop the requestAnimationFrame event when the user switches to a different tab and then comes back again, so we use a 2-second setTimeout() to sense if/when that condition occurs and then wake() the ticker.\n\t\tvar _checkTimeout = function() {\n\t\t\t\tif (_tickerActive && _getTime() - _lastUpdate > 2000 && ((_doc || {}).visibilityState !== \"hidden\" || !_ticker.lagSmoothing())) { //note: if the tab is hidden, we should still wake if lagSmoothing has been disabled.\n\t\t\t\t\t_ticker.wake();\n\t\t\t\t}\n\t\t\t\tvar t = setTimeout(_checkTimeout, 2000);\n\t\t\t\tif (t.unref) {\n\t\t\t\t\t// allows a node process to exit even if the timeout’s callback hasn't been invoked. Without it, the node process could hang as this function is called every two seconds.\n\t\t\t\t\tt.unref();\n\t\t\t\t}\n\t\t\t};\n\t\t_checkTimeout();\n\n\n\t\tp.play = function(from, suppressEvents) {\n\t\t\tif (from != null) {\n\t\t\t\tthis.seek(from, suppressEvents);\n\t\t\t}\n\t\t\treturn this.reversed(false).paused(false);\n\t\t};\n\n\t\tp.pause = function(atTime, suppressEvents) {\n\t\t\tif (atTime != null) {\n\t\t\t\tthis.seek(atTime, suppressEvents);\n\t\t\t}\n\t\t\treturn this.paused(true);\n\t\t};\n\n\t\tp.resume = function(from, suppressEvents) {\n\t\t\tif (from != null) {\n\t\t\t\tthis.seek(from, suppressEvents);\n\t\t\t}\n\t\t\treturn this.paused(false);\n\t\t};\n\n\t\tp.seek = function(time, suppressEvents) {\n\t\t\treturn this.totalTime(Number(time), suppressEvents !== false);\n\t\t};\n\n\t\tp.restart = function(includeDelay, suppressEvents) {\n\t\t\treturn this.reversed(false).paused(false).totalTime(includeDelay ? -this._delay : 0, (suppressEvents !== false), true);\n\t\t};\n\n\t\tp.reverse = function(from, suppressEvents) {\n\t\t\tif (from != null) {\n\t\t\t\tthis.seek((from || this.totalDuration()), suppressEvents);\n\t\t\t}\n\t\t\treturn this.reversed(true).paused(false);\n\t\t};\n\n\t\tp.render = function(time, suppressEvents, force) {\n\t\t\t//stub - we override this method in subclasses.\n\t\t};\n\n\t\tp.invalidate = function() {\n\t\t\tthis._time = this._totalTime = 0;\n\t\t\tthis._initted = this._gc = false;\n\t\t\tthis._rawPrevTime = -1;\n\t\t\tif (this._gc || !this.timeline) {\n\t\t\t\tthis._enabled(true);\n\t\t\t}\n\t\t\treturn this;\n\t\t};\n\n\t\tp.isActive = function() {\n\t\t\tvar tl = this._timeline, //the 2 root timelines won't have a _timeline; they're always active.\n\t\t\t\tstartTime = this._startTime,\n\t\t\t\trawTime;\n\t\t\treturn (!tl || (!this._gc && !this._paused && tl.isActive() && (rawTime = tl.rawTime(true)) >= startTime && rawTime < startTime + this.totalDuration() / this._timeScale - _tinyNum));\n\t\t};\n\n\t\tp._enabled = function (enabled, ignoreTimeline) {\n\t\t\tif (!_tickerActive) {\n\t\t\t\t_ticker.wake();\n\t\t\t}\n\t\t\tthis._gc = !enabled;\n\t\t\tthis._active = this.isActive();\n\t\t\tif (ignoreTimeline !== true) {\n\t\t\t\tif (enabled && !this.timeline) {\n\t\t\t\t\tthis._timeline.add(this, this._startTime - this._delay);\n\t\t\t\t} else if (!enabled && this.timeline) {\n\t\t\t\t\tthis._timeline._remove(this, true);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t};\n\n\n\t\tp._kill = function(vars, target) {\n\t\t\treturn this._enabled(false, false);\n\t\t};\n\n\t\tp.kill = function(vars, target) {\n\t\t\tthis._kill(vars, target);\n\t\t\treturn this;\n\t\t};\n\n\t\tp._uncache = function(includeSelf) {\n\t\t\tvar tween = includeSelf ? this : this.timeline;\n\t\t\twhile (tween) {\n\t\t\t\ttween._dirty = true;\n\t\t\t\ttween = tween.timeline;\n\t\t\t}\n\t\t\treturn this;\n\t\t};\n\n\t\tp._swapSelfInParams = function(params) {\n\t\t\tvar i = params.length,\n\t\t\t\tcopy = params.concat();\n\t\t\twhile (--i > -1) {\n\t\t\t\tif (params[i] === \"{self}\") {\n\t\t\t\t\tcopy[i] = this;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn copy;\n\t\t};\n\n\t\tp._callback = function(type) {\n\t\t\tvar v = this.vars,\n\t\t\t\tcallback = v[type],\n\t\t\t\tparams = v[type + \"Params\"],\n\t\t\t\tscope = v[type + \"Scope\"] || v.callbackScope || this,\n\t\t\t\tl = params ? params.length : 0;\n\t\t\tswitch (l) { //speed optimization; call() is faster than apply() so use it when there are only a few parameters (which is by far most common). Previously we simply did var v = this.vars; v[type].apply(v[type + \"Scope\"] || v.callbackScope || this, v[type + \"Params\"] || _blankArray);\n\t\t\t\tcase 0: callback.call(scope); break;\n\t\t\t\tcase 1: callback.call(scope, params[0]); break;\n\t\t\t\tcase 2: callback.call(scope, params[0], params[1]); break;\n\t\t\t\tdefault: callback.apply(scope, params);\n\t\t\t}\n\t\t};\n\n//----Animation getters/setters --------------------------------------------------------\n\n\t\tp.eventCallback = function(type, callback, params, scope) {\n\t\t\tif ((type || \"\").substr(0,2) === \"on\") {\n\t\t\t\tvar v = this.vars;\n\t\t\t\tif (arguments.length === 1) {\n\t\t\t\t\treturn v[type];\n\t\t\t\t}\n\t\t\t\tif (callback == null) {\n\t\t\t\t\tdelete v[type];\n\t\t\t\t} else {\n\t\t\t\t\tv[type] = callback;\n\t\t\t\t\tv[type + \"Params\"] = (_isArray(params) && params.join(\"\").indexOf(\"{self}\") !== -1) ? this._swapSelfInParams(params) : params;\n\t\t\t\t\tv[type + \"Scope\"] = scope;\n\t\t\t\t}\n\t\t\t\tif (type === \"onUpdate\") {\n\t\t\t\t\tthis._onUpdate = callback;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn this;\n\t\t};\n\n\t\tp.delay = function(value) {\n\t\t\tif (!arguments.length) {\n\t\t\t\treturn this._delay;\n\t\t\t}\n\t\t\tif (this._timeline.smoothChildTiming) {\n\t\t\t\tthis.startTime( this._startTime + value - this._delay );\n\t\t\t}\n\t\t\tthis._delay = value;\n\t\t\treturn this;\n\t\t};\n\n\t\tp.duration = function(value) {\n\t\t\tif (!arguments.length) {\n\t\t\t\tthis._dirty = false;\n\t\t\t\treturn this._duration;\n\t\t\t}\n\t\t\tthis._duration = this._totalDuration = value;\n\t\t\tthis._uncache(true); //true in case it's a TweenMax or TimelineMax that has a repeat - we'll need to refresh the totalDuration.\n\t\t\tif (this._timeline.smoothChildTiming) if (this._time > 0) if (this._time < this._duration) if (value !== 0) {\n\t\t\t\tthis.totalTime(this._totalTime * (value / this._duration), true);\n\t\t\t}\n\t\t\treturn this;\n\t\t};\n\n\t\tp.totalDuration = function(value) {\n\t\t\tthis._dirty = false;\n\t\t\treturn (!arguments.length) ? this._totalDuration : this.duration(value);\n\t\t};\n\n\t\tp.time = function(value, suppressEvents) {\n\t\t\tif (!arguments.length) {\n\t\t\t\treturn this._time;\n\t\t\t}\n\t\t\tif (this._dirty) {\n\t\t\t\tthis.totalDuration();\n\t\t\t}\n\t\t\treturn this.totalTime((value > this._duration) ? this._duration : value, suppressEvents);\n\t\t};\n\n\t\tp.totalTime = function(time, suppressEvents, uncapped) {\n\t\t\tif (!_tickerActive) {\n\t\t\t\t_ticker.wake();\n\t\t\t}\n\t\t\tif (!arguments.length) {\n\t\t\t\treturn this._totalTime;\n\t\t\t}\n\t\t\tif (this._timeline) {\n\t\t\t\tif (time < 0 && !uncapped) {\n\t\t\t\t\ttime += this.totalDuration();\n\t\t\t\t}\n\t\t\t\tif (this._timeline.smoothChildTiming) {\n\t\t\t\t\tif (this._dirty) {\n\t\t\t\t\t\tthis.totalDuration();\n\t\t\t\t\t}\n\t\t\t\t\tvar totalDuration = this._totalDuration,\n\t\t\t\t\t\ttl = this._timeline;\n\t\t\t\t\tif (time > totalDuration && !uncapped) {\n\t\t\t\t\t\ttime = totalDuration;\n\t\t\t\t\t}\n\t\t\t\t\tthis._startTime = (this._paused ? this._pauseTime : tl._time) - ((!this._reversed ? time : totalDuration - time) / this._timeScale);\n\t\t\t\t\tif (!tl._dirty) { //for performance improvement. If the parent's cache is already dirty, it already took care of marking the ancestors as dirty too, so skip the function call here.\n\t\t\t\t\t\tthis._uncache(false);\n\t\t\t\t\t}\n\t\t\t\t\t//in case any of the ancestor timelines had completed but should now be enabled, we should reset their totalTime() which will also ensure that they're lined up properly and enabled. Skip for animations that are on the root (wasteful). Example: a TimelineLite.exportRoot() is performed when there's a paused tween on the root, the export will not complete until that tween is unpaused, but imagine a child gets restarted later, after all [unpaused] tweens have completed. The startTime of that child would get pushed out, but one of the ancestors may have completed.\n\t\t\t\t\tif (tl._timeline) {\n\t\t\t\t\t\twhile (tl._timeline) {\n\t\t\t\t\t\t\tif (tl._timeline._time !== (tl._startTime + tl._totalTime) / tl._timeScale) {\n\t\t\t\t\t\t\t\ttl.totalTime(tl._totalTime, true);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\ttl = tl._timeline;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (this._gc) {\n\t\t\t\t\tthis._enabled(true, false);\n\t\t\t\t}\n\t\t\t\tif (this._totalTime !== time || this._duration === 0) {\n\t\t\t\t\tif (_lazyTweens.length) {\n\t\t\t\t\t\t_lazyRender();\n\t\t\t\t\t}\n\t\t\t\t\tthis.render(time, suppressEvents, false);\n\t\t\t\t\tif (_lazyTweens.length) { //in case rendering caused any tweens to lazy-init, we should render them because typically when someone calls seek() or time() or progress(), they expect an immediate render.\n\t\t\t\t\t\t_lazyRender();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn this;\n\t\t};\n\n\t\tp.progress = p.totalProgress = function(value, suppressEvents) {\n\t\t\tvar duration = this.duration();\n\t\t\treturn (!arguments.length) ? (duration ? this._time / duration : this.ratio) : this.totalTime(duration * value, suppressEvents);\n\t\t};\n\n\t\tp.startTime = function(value) {\n\t\t\tif (!arguments.length) {\n\t\t\t\treturn this._startTime;\n\t\t\t}\n\t\t\tif (value !== this._startTime) {\n\t\t\t\tthis._startTime = value;\n\t\t\t\tif (this.timeline) if (this.timeline._sortChildren) {\n\t\t\t\t\tthis.timeline.add(this, value - this._delay); //ensures that any necessary re-sequencing of Animations in the timeline occurs to make sure the rendering order is correct.\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn this;\n\t\t};\n\n\t\tp.endTime = function(includeRepeats) {\n\t\t\treturn this._startTime + ((includeRepeats != false) ? this.totalDuration() : this.duration()) / this._timeScale;\n\t\t};\n\n\t\tp.timeScale = function(value) {\n\t\t\tif (!arguments.length) {\n\t\t\t\treturn this._timeScale;\n\t\t\t}\n\t\t\tvar pauseTime, t;\n\t\t\tvalue = value || _tinyNum; //can't allow zero because it'll throw the math off\n\t\t\tif (this._timeline && this._timeline.smoothChildTiming) {\n\t\t\t\tpauseTime = this._pauseTime;\n\t\t\t\tt = (pauseTime || pauseTime === 0) ? pauseTime : this._timeline.totalTime();\n\t\t\t\tthis._startTime = t - ((t - this._startTime) * this._timeScale / value);\n\t\t\t}\n\t\t\tthis._timeScale = value;\n\t\t\tt = this.timeline;\n\t\t\twhile (t && t.timeline) { //must update the duration/totalDuration of all ancestor timelines immediately in case in the middle of a render loop, one tween alters another tween's timeScale which shoves its startTime before 0, forcing the parent timeline to shift around and shiftChildren() which could affect that next tween's render (startTime). Doesn't matter for the root timeline though.\n\t\t\t\tt._dirty = true;\n\t\t\t\tt.totalDuration();\n\t\t\t\tt = t.timeline;\n\t\t\t}\n\t\t\treturn this;\n\t\t};\n\n\t\tp.reversed = function(value) {\n\t\t\tif (!arguments.length) {\n\t\t\t\treturn this._reversed;\n\t\t\t}\n\t\t\tif (value != this._reversed) {\n\t\t\t\tthis._reversed = value;\n\t\t\t\tthis.totalTime(((this._timeline && !this._timeline.smoothChildTiming) ? this.totalDuration() - this._totalTime : this._totalTime), true);\n\t\t\t}\n\t\t\treturn this;\n\t\t};\n\n\t\tp.paused = function(value) {\n\t\t\tif (!arguments.length) {\n\t\t\t\treturn this._paused;\n\t\t\t}\n\t\t\tvar tl = this._timeline,\n\t\t\t\traw, elapsed;\n\t\t\tif (value != this._paused) if (tl) {\n\t\t\t\tif (!_tickerActive && !value) {\n\t\t\t\t\t_ticker.wake();\n\t\t\t\t}\n\t\t\t\traw = tl.rawTime();\n\t\t\t\telapsed = raw - this._pauseTime;\n\t\t\t\tif (!value && tl.smoothChildTiming) {\n\t\t\t\t\tthis._startTime += elapsed;\n\t\t\t\t\tthis._uncache(false);\n\t\t\t\t}\n\t\t\t\tthis._pauseTime = value ? raw : null;\n\t\t\t\tthis._paused = value;\n\t\t\t\tthis._active = this.isActive();\n\t\t\t\tif (!value && elapsed !== 0 && this._initted && this.duration()) {\n\t\t\t\t\traw = tl.smoothChildTiming ? this._totalTime : (raw - this._startTime) / this._timeScale;\n\t\t\t\t\tthis.render(raw, (raw === this._totalTime), true); //in case the target's properties changed via some other tween or manual update by the user, we should force a render.\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (this._gc && !value) {\n\t\t\t\tthis._enabled(true, false);\n\t\t\t}\n\t\t\treturn this;\n\t\t};\n\n\n/*\n * ----------------------------------------------------------------\n * SimpleTimeline\n * ----------------------------------------------------------------\n */\n\t\tvar SimpleTimeline = _class(\"core.SimpleTimeline\", function(vars) {\n\t\t\tAnimation.call(this, 0, vars);\n\t\t\tthis.autoRemoveChildren = this.smoothChildTiming = true;\n\t\t});\n\n\t\tp = SimpleTimeline.prototype = new Animation();\n\t\tp.constructor = SimpleTimeline;\n\t\tp.kill()._gc = false;\n\t\tp._first = p._last = p._recent = null;\n\t\tp._sortChildren = false;\n\n\t\tp.add = p.insert = function(child, position, align, stagger) {\n\t\t\tvar prevTween, st;\n\t\t\tchild._startTime = Number(position || 0) + child._delay;\n\t\t\tif (child._paused) if (this !== child._timeline) { //we only adjust the _pauseTime if it wasn't in this timeline already. Remember, sometimes a tween will be inserted again into the same timeline when its startTime is changed so that the tweens in the TimelineLite/Max are re-ordered properly in the linked list (so everything renders in the proper order).\n\t\t\t\tchild._pauseTime = this.rawTime() - (child._timeline.rawTime() - child._pauseTime);\n\t\t\t}\n\t\t\tif (child.timeline) {\n\t\t\t\tchild.timeline._remove(child, true); //removes from existing timeline so that it can be properly added to this one.\n\t\t\t}\n\t\t\tchild.timeline = child._timeline = this;\n\t\t\tif (child._gc) {\n\t\t\t\tchild._enabled(true, true);\n\t\t\t}\n\t\t\tprevTween = this._last;\n\t\t\tif (this._sortChildren) {\n\t\t\t\tst = child._startTime;\n\t\t\t\twhile (prevTween && prevTween._startTime > st) {\n\t\t\t\t\tprevTween = prevTween._prev;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (prevTween) {\n\t\t\t\tchild._next = prevTween._next;\n\t\t\t\tprevTween._next = child;\n\t\t\t} else {\n\t\t\t\tchild._next = this._first;\n\t\t\t\tthis._first = child;\n\t\t\t}\n\t\t\tif (child._next) {\n\t\t\t\tchild._next._prev = child;\n\t\t\t} else {\n\t\t\t\tthis._last = child;\n\t\t\t}\n\t\t\tchild._prev = prevTween;\n\t\t\tthis._recent = child;\n\t\t\tif (this._timeline) {\n\t\t\t\tthis._uncache(true);\n\t\t\t}\n\t\t\treturn this;\n\t\t};\n\n\t\tp._remove = function(tween, skipDisable) {\n\t\t\tif (tween.timeline === this) {\n\t\t\t\tif (!skipDisable) {\n\t\t\t\t\ttween._enabled(false, true);\n\t\t\t\t}\n\n\t\t\t\tif (tween._prev) {\n\t\t\t\t\ttween._prev._next = tween._next;\n\t\t\t\t} else if (this._first === tween) {\n\t\t\t\t\tthis._first = tween._next;\n\t\t\t\t}\n\t\t\t\tif (tween._next) {\n\t\t\t\t\ttween._next._prev = tween._prev;\n\t\t\t\t} else if (this._last === tween) {\n\t\t\t\t\tthis._last = tween._prev;\n\t\t\t\t}\n\t\t\t\ttween._next = tween._prev = tween.timeline = null;\n\t\t\t\tif (tween === this._recent) {\n\t\t\t\t\tthis._recent = this._last;\n\t\t\t\t}\n\n\t\t\t\tif (this._timeline) {\n\t\t\t\t\tthis._uncache(true);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn this;\n\t\t};\n\n\t\tp.render = function(time, suppressEvents, force) {\n\t\t\tvar tween = this._first,\n\t\t\t\tnext;\n\t\t\tthis._totalTime = this._time = this._rawPrevTime = time;\n\t\t\twhile (tween) {\n\t\t\t\tnext = tween._next; //record it here because the value could change after rendering...\n\t\t\t\tif (tween._active || (time >= tween._startTime && !tween._paused && !tween._gc)) {\n\t\t\t\t\tif (!tween._reversed) {\n\t\t\t\t\t\ttween.render((time - tween._startTime) * tween._timeScale, suppressEvents, force);\n\t\t\t\t\t} else {\n\t\t\t\t\t\ttween.render(((!tween._dirty) ? tween._totalDuration : tween.totalDuration()) - ((time - tween._startTime) * tween._timeScale), suppressEvents, force);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\ttween = next;\n\t\t\t}\n\t\t};\n\n\t\tp.rawTime = function() {\n\t\t\tif (!_tickerActive) {\n\t\t\t\t_ticker.wake();\n\t\t\t}\n\t\t\treturn this._totalTime;\n\t\t};\n\n/*\n * ----------------------------------------------------------------\n * TweenLite\n * ----------------------------------------------------------------\n */\n\t\tvar TweenLite = _class(\"TweenLite\", function(target, duration, vars) {\n\t\t\t\tAnimation.call(this, duration, vars);\n\t\t\t\tthis.render = TweenLite.prototype.render; //speed optimization (avoid prototype lookup on this \"hot\" method)\n\n\t\t\t\tif (target == null) {\n\t\t\t\t\tthrow \"Cannot tween a null target.\";\n\t\t\t\t}\n\n\t\t\t\tthis.target = target = (typeof(target) !== \"string\") ? target : TweenLite.selector(target) || target;\n\n\t\t\t\tvar isSelector = (target.jquery || (target.length && target !== window && target[0] && (target[0] === window || (target[0].nodeType && target[0].style && !target.nodeType)))),\n\t\t\t\t\toverwrite = this.vars.overwrite,\n\t\t\t\t\ti, targ, targets;\n\n\t\t\t\tthis._overwrite = overwrite = (overwrite == null) ? _overwriteLookup[TweenLite.defaultOverwrite] : (typeof(overwrite) === \"number\") ? overwrite >> 0 : _overwriteLookup[overwrite];\n\n\t\t\t\tif ((isSelector || target instanceof Array || (target.push && _isArray(target))) && typeof(target[0]) !== \"number\") {\n\t\t\t\t\tthis._targets = targets = _slice(target);  //don't use Array.prototype.slice.call(target, 0) because that doesn't work in IE8 with a NodeList that's returned by querySelectorAll()\n\t\t\t\t\tthis._propLookup = [];\n\t\t\t\t\tthis._siblings = [];\n\t\t\t\t\tfor (i = 0; i < targets.length; i++) {\n\t\t\t\t\t\ttarg = targets[i];\n\t\t\t\t\t\tif (!targ) {\n\t\t\t\t\t\t\ttargets.splice(i--, 1);\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t} else if (typeof(targ) === \"string\") {\n\t\t\t\t\t\t\ttarg = targets[i--] = TweenLite.selector(targ); //in case it's an array of strings\n\t\t\t\t\t\t\tif (typeof(targ) === \"string\") {\n\t\t\t\t\t\t\t\ttargets.splice(i+1, 1); //to avoid an endless loop (can't imagine why the selector would return a string, but just in case)\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t} else if (targ.length && targ !== window && targ[0] && (targ[0] === window || (targ[0].nodeType && targ[0].style && !targ.nodeType))) { //in case the user is passing in an array of selector objects (like jQuery objects), we need to check one more level and pull things out if necessary. Also note that <select> elements pass all the criteria regarding length and the first child having style, so we must also check to ensure the target isn't an HTML node itself.\n\t\t\t\t\t\t\ttargets.splice(i--, 1);\n\t\t\t\t\t\t\tthis._targets = targets = targets.concat(_slice(targ));\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tthis._siblings[i] = _register(targ, this, false);\n\t\t\t\t\t\tif (overwrite === 1) if (this._siblings[i].length > 1) {\n\t\t\t\t\t\t\t_applyOverwrite(targ, this, null, 1, this._siblings[i]);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\t\t\t\t\tthis._propLookup = {};\n\t\t\t\t\tthis._siblings = _register(target, this, false);\n\t\t\t\t\tif (overwrite === 1) if (this._siblings.length > 1) {\n\t\t\t\t\t\t_applyOverwrite(target, this, null, 1, this._siblings);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (this.vars.immediateRender || (duration === 0 && this._delay === 0 && this.vars.immediateRender !== false)) {\n\t\t\t\t\tthis._time = -_tinyNum; //forces a render without having to set the render() \"force\" parameter to true because we want to allow lazying by default (using the \"force\" parameter always forces an immediate full render)\n\t\t\t\t\tthis.render(Math.min(0, -this._delay)); //in case delay is negative\n\t\t\t\t}\n\t\t\t}, true),\n\t\t\t_isSelector = function(v) {\n\t\t\t\treturn (v && v.length && v !== window && v[0] && (v[0] === window || (v[0].nodeType && v[0].style && !v.nodeType))); //we cannot check \"nodeType\" if the target is window from within an iframe, otherwise it will trigger a security error in some browsers like Firefox.\n\t\t\t},\n\t\t\t_autoCSS = function(vars, target) {\n\t\t\t\tvar css = {},\n\t\t\t\t\tp;\n\t\t\t\tfor (p in vars) {\n\t\t\t\t\tif (!_reservedProps[p] && (!(p in target) || p === \"transform\" || p === \"x\" || p === \"y\" || p === \"width\" || p === \"height\" || p === \"className\" || p === \"border\") && (!_plugins[p] || (_plugins[p] && _plugins[p]._autoCSS))) { //note: <img> elements contain read-only \"x\" and \"y\" properties. We should also prioritize editing css width/height rather than the element's properties.\n\t\t\t\t\t\tcss[p] = vars[p];\n\t\t\t\t\t\tdelete vars[p];\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tvars.css = css;\n\t\t\t};\n\n\t\tp = TweenLite.prototype = new Animation();\n\t\tp.constructor = TweenLite;\n\t\tp.kill()._gc = false;\n\n//----TweenLite defaults, overwrite management, and root updates ----------------------------------------------------\n\n\t\tp.ratio = 0;\n\t\tp._firstPT = p._targets = p._overwrittenProps = p._startAt = null;\n\t\tp._notifyPluginsOfEnabled = p._lazy = false;\n\n\t\tTweenLite.version = \"2.1.2\";\n\t\tTweenLite.defaultEase = p._ease = new Ease(null, null, 1, 1);\n\t\tTweenLite.defaultOverwrite = \"auto\";\n\t\tTweenLite.ticker = _ticker;\n\t\tTweenLite.autoSleep = 120;\n\t\tTweenLite.lagSmoothing = function(threshold, adjustedLag) {\n\t\t\t_ticker.lagSmoothing(threshold, adjustedLag);\n\t\t};\n\n\t\tTweenLite.selector = window.$ || window.jQuery || function(e) {\n\t\t\tvar selector = window.$ || window.jQuery;\n\t\t\tif (selector) {\n\t\t\t\tTweenLite.selector = selector;\n\t\t\t\treturn selector(e);\n\t\t\t}\n\t\t\tif (!_doc) { //in some dev environments (like Angular 6), GSAP gets loaded before the document is defined! So re-query it here if/when necessary.\n\t\t\t\t_doc = window.document;\n\t\t\t}\n\t\t\treturn (!_doc) ? e : (_doc.querySelectorAll ? _doc.querySelectorAll(e) : _doc.getElementById((e.charAt(0) === \"#\") ? e.substr(1) : e));\n\t\t};\n\n\t\tvar _lazyTweens = [],\n\t\t\t_lazyLookup = {},\n\t\t\t_numbersExp = /(?:(-|-=|\\+=)?\\d*\\.?\\d*(?:e[\\-+]?\\d+)?)[0-9]/ig,\n\t\t\t_relExp = /[\\+-]=-?[\\.\\d]/,\n\t\t\t//_nonNumbersExp = /(?:([\\-+](?!(\\d|=)))|[^\\d\\-+=e]|(e(?![\\-+][\\d])))+/ig,\n\t\t\t_setRatio = function(v) {\n\t\t\t\tvar pt = this._firstPT,\n\t\t\t\t\tmin = 0.000001,\n\t\t\t\t\tval;\n\t\t\t\twhile (pt) {\n\t\t\t\t\tval = !pt.blob ? pt.c * v + pt.s : (v === 1 && this.end != null) ? this.end : v ? this.join(\"\") : this.start;\n\t\t\t\t\tif (pt.m) {\n\t\t\t\t\t\tval = pt.m.call(this._tween, val, this._target || pt.t, this._tween);\n\t\t\t\t\t} else if (val < min) if (val > -min && !pt.blob) { //prevents issues with converting very small numbers to strings in the browser\n\t\t\t\t\t\tval = 0;\n\t\t\t\t\t}\n\t\t\t\t\tif (!pt.f) {\n\t\t\t\t\t\tpt.t[pt.p] = val;\n\t\t\t\t\t} else if (pt.fp) {\n\t\t\t\t\t\tpt.t[pt.p](pt.fp, val);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tpt.t[pt.p](val);\n\t\t\t\t\t}\n\t\t\t\t\tpt = pt._next;\n\t\t\t\t}\n\t\t\t},\n\t\t\t_blobRound = function(v) {\n\t\t\t\treturn (((v * 1000) | 0) / 1000) + \"\";\n\t\t\t},\n\t\t\t//compares two strings (start/end), finds the numbers that are different and spits back an array representing the whole value but with the changing values isolated as elements. For example, \"rgb(0,0,0)\" and \"rgb(100,50,0)\" would become [\"rgb(\", 0, \",\", 50, \",0)\"]. Notice it merges the parts that are identical (performance optimization). The array also has a linked list of PropTweens attached starting with _firstPT that contain the tweening data (t, p, s, c, f, etc.). It also stores the starting value as a \"start\" property so that we can revert to it if/when necessary, like when a tween rewinds fully. If the quantity of numbers differs between the start and end, it will always prioritize the end value(s). The pt parameter is optional - it's for a PropTween that will be appended to the end of the linked list and is typically for actually setting the value after all of the elements have been updated (with array.join(\"\")).\n\t\t\t_blobDif = function(start, end, filter, pt) {\n\t\t\t\tvar a = [],\n\t\t\t\t\tcharIndex = 0,\n\t\t\t\t\ts = \"\",\n\t\t\t\t\tcolor = 0,\n\t\t\t\t\tstartNums, endNums, num, i, l, nonNumbers, currentNum;\n\t\t\t\ta.start = start;\n\t\t\t\ta.end = end;\n\t\t\t\tstart = a[0] = start + \"\"; //ensure values are strings\n\t\t\t\tend = a[1] = end + \"\";\n\t\t\t\tif (filter) {\n\t\t\t\t\tfilter(a); //pass an array with the starting and ending values and let the filter do whatever it needs to the values.\n\t\t\t\t\tstart = a[0];\n\t\t\t\t\tend = a[1];\n\t\t\t\t}\n\t\t\t\ta.length = 0;\n\t\t\t\tstartNums = start.match(_numbersExp) || [];\n\t\t\t\tendNums = end.match(_numbersExp) || [];\n\t\t\t\tif (pt) {\n\t\t\t\t\tpt._next = null;\n\t\t\t\t\tpt.blob = 1;\n\t\t\t\t\ta._firstPT = a._applyPT = pt; //apply last in the linked list (which means inserting it first)\n\t\t\t\t}\n\t\t\t\tl = endNums.length;\n\t\t\t\tfor (i = 0; i < l; i++) {\n\t\t\t\t\tcurrentNum = endNums[i];\n\t\t\t\t\tnonNumbers = end.substr(charIndex, end.indexOf(currentNum, charIndex)-charIndex);\n\t\t\t\t\ts += (nonNumbers || !i) ? nonNumbers : \",\"; //note: SVG spec allows omission of comma/space when a negative sign is wedged between two numbers, like 2.5-5.3 instead of 2.5,-5.3 but when tweening, the negative value may switch to positive, so we insert the comma just in case.\n\t\t\t\t\tcharIndex += nonNumbers.length;\n\t\t\t\t\tif (color) { //sense rgba() values and round them.\n\t\t\t\t\t\tcolor = (color + 1) % 5;\n\t\t\t\t\t} else if (nonNumbers.substr(-5) === \"rgba(\") {\n\t\t\t\t\t\tcolor = 1;\n\t\t\t\t\t}\n\t\t\t\t\tif (currentNum === startNums[i] || startNums.length <= i) {\n\t\t\t\t\t\ts += currentNum;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tif (s) {\n\t\t\t\t\t\t\ta.push(s);\n\t\t\t\t\t\t\ts = \"\";\n\t\t\t\t\t\t}\n\t\t\t\t\t\tnum = parseFloat(startNums[i]);\n\t\t\t\t\t\ta.push(num);\n\t\t\t\t\t\ta._firstPT = {_next: a._firstPT, t:a, p: a.length-1, s:num, c:((currentNum.charAt(1) === \"=\") ? parseInt(currentNum.charAt(0) + \"1\", 10) * parseFloat(currentNum.substr(2)) : (parseFloat(currentNum) - num)) || 0, f:0, m:(color && color < 4) ? Math.round : _blobRound}; //limiting to 3 decimal places and casting as a string can really help performance when array.join() is called!\n\t\t\t\t\t\t//note: we don't set _prev because we'll never need to remove individual PropTweens from this list.\n\t\t\t\t\t}\n\t\t\t\t\tcharIndex += currentNum.length;\n\t\t\t\t}\n\t\t\t\ts += end.substr(charIndex);\n\t\t\t\tif (s) {\n\t\t\t\t\ta.push(s);\n\t\t\t\t}\n\t\t\t\ta.setRatio = _setRatio;\n\t\t\t\tif (_relExp.test(end)) { //if the end string contains relative values, delete it so that on the final render (in _setRatio()), we don't actually set it to the string with += or -= characters (forces it to use the calculated value).\n\t\t\t\t\ta.end = null;\n\t\t\t\t}\n\t\t\t\treturn a;\n\t\t\t},\n\t\t\t//note: \"funcParam\" is only necessary for function-based getters/setters that require an extra parameter like getAttribute(\"width\") and setAttribute(\"width\", value). In this example, funcParam would be \"width\". Used by AttrPlugin for example.\n\t\t\t_addPropTween = function(target, prop, start, end, overwriteProp, mod, funcParam, stringFilter, index) {\n\t\t\t\tif (typeof(end) === \"function\") {\n\t\t\t\t\tend = end(index || 0, target);\n\t\t\t\t}\n\t\t\t\tvar type = typeof(target[prop]),\n\t\t\t\t\tgetterName = (type !== \"function\") ? \"\" : ((prop.indexOf(\"set\") || typeof(target[\"get\" + prop.substr(3)]) !== \"function\") ? prop : \"get\" + prop.substr(3)),\n\t\t\t\t\ts = (start !== \"get\") ? start : !getterName ? target[prop] : funcParam ? target[getterName](funcParam) : target[getterName](),\n\t\t\t\t\tisRelative = (typeof(end) === \"string\" && end.charAt(1) === \"=\"),\n\t\t\t\t\tpt = {t:target, p:prop, s:s, f:(type === \"function\"), pg:0, n:overwriteProp || prop, m:(!mod ? 0 : (typeof(mod) === \"function\") ? mod : Math.round), pr:0, c:isRelative ? parseInt(end.charAt(0) + \"1\", 10) * parseFloat(end.substr(2)) : (parseFloat(end) - s) || 0},\n\t\t\t\t\tblob;\n\n\t\t\t\tif (typeof(s) !== \"number\" || (typeof(end) !== \"number\" && !isRelative)) {\n\t\t\t\t\tif (funcParam || isNaN(s) || (!isRelative && isNaN(end)) || typeof(s) === \"boolean\" || typeof(end) === \"boolean\") {\n\t\t\t\t\t\t//a blob (string that has multiple numbers in it)\n\t\t\t\t\t\tpt.fp = funcParam;\n\t\t\t\t\t\tblob = _blobDif(s, (isRelative ? (parseFloat(pt.s) + pt.c) + (pt.s + \"\").replace(/[0-9\\-\\.]/g, \"\") : end), stringFilter || TweenLite.defaultStringFilter, pt);\n\t\t\t\t\t\tpt = {t: blob, p: \"setRatio\", s: 0, c: 1, f: 2, pg: 0, n: overwriteProp || prop, pr: 0, m: 0}; //\"2\" indicates it's a Blob property tween. Needed for RoundPropsPlugin for example.\n\t\t\t\t\t} else {\n\t\t\t\t\t\tpt.s = parseFloat(s);\n\t\t\t\t\t\tif (!isRelative) {\n\t\t\t\t\t\t\tpt.c = (parseFloat(end) - pt.s) || 0;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (pt.c) { //only add it to the linked list if there's a change.\n\t\t\t\t\tif ((pt._next = this._firstPT)) {\n\t\t\t\t\t\tpt._next._prev = pt;\n\t\t\t\t\t}\n\t\t\t\t\tthis._firstPT = pt;\n\t\t\t\t\treturn pt;\n\t\t\t\t}\n\t\t\t},\n\t\t\t_internals = TweenLite._internals = {isArray:_isArray, isSelector:_isSelector, lazyTweens:_lazyTweens, blobDif:_blobDif}, //gives us a way to expose certain private values to other GreenSock classes without contaminating tha main TweenLite object.\n\t\t\t_plugins = TweenLite._plugins = {},\n\t\t\t_tweenLookup = _internals.tweenLookup = {},\n\t\t\t_tweenLookupNum = 0,\n\t\t\t_reservedProps = _internals.reservedProps = {ease:1, delay:1, overwrite:1, onComplete:1, onCompleteParams:1, onCompleteScope:1, useFrames:1, runBackwards:1, startAt:1, onUpdate:1, onUpdateParams:1, onUpdateScope:1, onStart:1, onStartParams:1, onStartScope:1, onReverseComplete:1, onReverseCompleteParams:1, onReverseCompleteScope:1, onRepeat:1, onRepeatParams:1, onRepeatScope:1, easeParams:1, yoyo:1, immediateRender:1, repeat:1, repeatDelay:1, data:1, paused:1, reversed:1, autoCSS:1, lazy:1, onOverwrite:1, callbackScope:1, stringFilter:1, id:1, yoyoEase:1, stagger:1},\n\t\t\t_overwriteLookup = {none:0, all:1, auto:2, concurrent:3, allOnStart:4, preexisting:5, \"true\":1, \"false\":0},\n\t\t\t_rootFramesTimeline = Animation._rootFramesTimeline = new SimpleTimeline(),\n\t\t\t_rootTimeline = Animation._rootTimeline = new SimpleTimeline(),\n\t\t\t_nextGCFrame = 30,\n\t\t\t_lazyRender = _internals.lazyRender = function() {\n\t\t\t\tvar l = _lazyTweens.length,\n\t\t\t\t\ti, tween;\n\t\t\t\t_lazyLookup = {};\n\t\t\t\tfor (i = 0; i < l; i++) {\n\t\t\t\t\ttween = _lazyTweens[i];\n\t\t\t\t\tif (tween && tween._lazy !== false) {\n\t\t\t\t\t\ttween.render(tween._lazy[0], tween._lazy[1], true);\n\t\t\t\t\t\ttween._lazy = false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t_lazyTweens.length = 0;\n\t\t\t};\n\n\t\t_rootTimeline._startTime = _ticker.time;\n\t\t_rootFramesTimeline._startTime = _ticker.frame;\n\t\t_rootTimeline._active = _rootFramesTimeline._active = true;\n\t\tsetTimeout(_lazyRender, 1); //on some mobile devices, there isn't a \"tick\" before code runs which means any lazy renders wouldn't run before the next official \"tick\".\n\n\t\tAnimation._updateRoot = TweenLite.render = function() {\n\t\t\t\tvar i, a, p;\n\t\t\t\tif (_lazyTweens.length) { //if code is run outside of the requestAnimationFrame loop, there may be tweens queued AFTER the engine refreshed, so we need to ensure any pending renders occur before we refresh again.\n\t\t\t\t\t_lazyRender();\n\t\t\t\t}\n\t\t\t\t_rootTimeline.render((_ticker.time - _rootTimeline._startTime) * _rootTimeline._timeScale, false, false);\n\t\t\t\t_rootFramesTimeline.render((_ticker.frame - _rootFramesTimeline._startTime) * _rootFramesTimeline._timeScale, false, false);\n\t\t\t\tif (_lazyTweens.length) {\n\t\t\t\t\t_lazyRender();\n\t\t\t\t}\n\t\t\t\tif (_ticker.frame >= _nextGCFrame) { //dump garbage every 120 frames or whatever the user sets TweenLite.autoSleep to\n\t\t\t\t\t_nextGCFrame = _ticker.frame + (parseInt(TweenLite.autoSleep, 10) || 120);\n\t\t\t\t\tfor (p in _tweenLookup) {\n\t\t\t\t\t\ta = _tweenLookup[p].tweens;\n\t\t\t\t\t\ti = a.length;\n\t\t\t\t\t\twhile (--i > -1) {\n\t\t\t\t\t\t\tif (a[i]._gc) {\n\t\t\t\t\t\t\t\ta.splice(i, 1);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (a.length === 0) {\n\t\t\t\t\t\t\tdelete _tweenLookup[p];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\t//if there are no more tweens in the root timelines, or if they're all paused, make the _timer sleep to reduce load on the CPU slightly\n\t\t\t\t\tp = _rootTimeline._first;\n\t\t\t\t\tif (!p || p._paused) if (TweenLite.autoSleep && !_rootFramesTimeline._first && _ticker._listeners.tick.length === 1) {\n\t\t\t\t\t\twhile (p && p._paused) {\n\t\t\t\t\t\t\tp = p._next;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (!p) {\n\t\t\t\t\t\t\t_ticker.sleep();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\n\t\t_ticker.addEventListener(\"tick\", Animation._updateRoot);\n\n\t\tvar _register = function(target, tween, scrub) {\n\t\t\t\tvar id = target._gsTweenID, a, i;\n\t\t\t\tif (!_tweenLookup[id || (target._gsTweenID = id = \"t\" + (_tweenLookupNum++))]) {\n\t\t\t\t\t_tweenLookup[id] = {target:target, tweens:[]};\n\t\t\t\t}\n\t\t\t\tif (tween) {\n\t\t\t\t\ta = _tweenLookup[id].tweens;\n\t\t\t\t\ta[(i = a.length)] = tween;\n\t\t\t\t\tif (scrub) {\n\t\t\t\t\t\twhile (--i > -1) {\n\t\t\t\t\t\t\tif (a[i] === tween) {\n\t\t\t\t\t\t\t\ta.splice(i, 1);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn _tweenLookup[id].tweens;\n\t\t\t},\n\t\t\t_onOverwrite = function(overwrittenTween, overwritingTween, target, killedProps) {\n\t\t\t\tvar func = overwrittenTween.vars.onOverwrite, r1, r2;\n\t\t\t\tif (func) {\n\t\t\t\t\tr1 = func(overwrittenTween, overwritingTween, target, killedProps);\n\t\t\t\t}\n\t\t\t\tfunc = TweenLite.onOverwrite;\n\t\t\t\tif (func) {\n\t\t\t\t\tr2 = func(overwrittenTween, overwritingTween, target, killedProps);\n\t\t\t\t}\n\t\t\t\treturn (r1 !== false && r2 !== false);\n\t\t\t},\n\t\t\t_applyOverwrite = function(target, tween, props, mode, siblings) {\n\t\t\t\tvar i, changed, curTween, l;\n\t\t\t\tif (mode === 1 || mode >= 4) {\n\t\t\t\t\tl = siblings.length;\n\t\t\t\t\tfor (i = 0; i < l; i++) {\n\t\t\t\t\t\tif ((curTween = siblings[i]) !== tween) {\n\t\t\t\t\t\t\tif (!curTween._gc) {\n\t\t\t\t\t\t\t\tif (curTween._kill(null, target, tween)) {\n\t\t\t\t\t\t\t\t\tchanged = true;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else if (mode === 5) {\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn changed;\n\t\t\t\t}\n\t\t\t\t//NOTE: Add tiny amount to overcome floating point errors that can cause the startTime to be VERY slightly off (when a tween's time() is set for example)\n\t\t\t\tvar startTime = tween._startTime + _tinyNum,\n\t\t\t\t\toverlaps = [],\n\t\t\t\t\toCount = 0,\n\t\t\t\t\tzeroDur = (tween._duration === 0),\n\t\t\t\t\tglobalStart;\n\t\t\t\ti = siblings.length;\n\t\t\t\twhile (--i > -1) {\n\t\t\t\t\tif ((curTween = siblings[i]) === tween || curTween._gc || curTween._paused) ; else if (curTween._timeline !== tween._timeline) {\n\t\t\t\t\t\tglobalStart = globalStart || _checkOverlap(tween, 0, zeroDur);\n\t\t\t\t\t\tif (_checkOverlap(curTween, globalStart, zeroDur) === 0) {\n\t\t\t\t\t\t\toverlaps[oCount++] = curTween;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (curTween._startTime <= startTime) if (curTween._startTime + curTween.totalDuration() / curTween._timeScale > startTime) if (!((zeroDur || !curTween._initted) && startTime - curTween._startTime <= _tinyNum * 2)) {\n\t\t\t\t\t\toverlaps[oCount++] = curTween;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\ti = oCount;\n\t\t\t\twhile (--i > -1) {\n\t\t\t\t\tcurTween = overlaps[i];\n\t\t\t\t\tl = curTween._firstPT; //we need to discern if there were property tweens originally; if they all get removed in the next line's _kill() call, the tween should be killed. See https://github.com/greensock/GreenSock-JS/issues/278\n\t\t\t\t\tif (mode === 2) if (curTween._kill(props, target, tween)) {\n\t\t\t\t\t\tchanged = true;\n\t\t\t\t\t}\n\t\t\t\t\tif (mode !== 2 || (!curTween._firstPT && curTween._initted && l)) {\n\t\t\t\t\t\tif (mode !== 2 && !_onOverwrite(curTween, tween)) {\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (curTween._enabled(false, false)) { //if all property tweens have been overwritten, kill the tween.\n\t\t\t\t\t\t\tchanged = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn changed;\n\t\t\t},\n\t\t\t_checkOverlap = function(tween, reference, zeroDur) {\n\t\t\t\tvar tl = tween._timeline,\n\t\t\t\t\tts = tl._timeScale,\n\t\t\t\t\tt = tween._startTime;\n\t\t\t\twhile (tl._timeline) {\n\t\t\t\t\tt += tl._startTime;\n\t\t\t\t\tts *= tl._timeScale;\n\t\t\t\t\tif (tl._paused) {\n\t\t\t\t\t\treturn -100;\n\t\t\t\t\t}\n\t\t\t\t\ttl = tl._timeline;\n\t\t\t\t}\n\t\t\t\tt /= ts;\n\t\t\t\treturn (t > reference) ? t - reference : ((zeroDur && t === reference) || (!tween._initted && t - reference < 2 * _tinyNum)) ? _tinyNum : ((t += tween.totalDuration() / tween._timeScale / ts) > reference + _tinyNum) ? 0 : t - reference - _tinyNum;\n\t\t\t};\n\n\n//---- TweenLite instance methods -----------------------------------------------------------------------------\n\n\t\tp._init = function() {\n\t\t\tvar v = this.vars,\n\t\t\t\top = this._overwrittenProps,\n\t\t\t\tdur = this._duration,\n\t\t\t\timmediate = !!v.immediateRender,\n\t\t\t\tease = v.ease,\n\t\t\t\tstartAt = this._startAt,\n\t\t\t\ti, initPlugins, pt, p, startVars, l;\n\t\t\tif (v.startAt) {\n\t\t\t\tif (startAt) {\n\t\t\t\t\tstartAt.render(-1, true); //if we've run a startAt previously (when the tween instantiated), we should revert it so that the values re-instantiate correctly particularly for relative tweens. Without this, a TweenLite.fromTo(obj, 1, {x:\"+=100\"}, {x:\"-=100\"}), for example, would actually jump to +=200 because the startAt would run twice, doubling the relative change.\n\t\t\t\t\tstartAt.kill();\n\t\t\t\t}\n\t\t\t\tstartVars = {};\n\t\t\t\tfor (p in v.startAt) { //copy the properties/values into a new object to avoid collisions, like var to = {x:0}, from = {x:500}; timeline.fromTo(e, 1, from, to).fromTo(e, 1, to, from);\n\t\t\t\t\tstartVars[p] = v.startAt[p];\n\t\t\t\t}\n\t\t\t\tstartVars.data = \"isStart\";\n\t\t\t\tstartVars.overwrite = false;\n\t\t\t\tstartVars.immediateRender = true;\n\t\t\t\tstartVars.lazy = (immediate && v.lazy !== false);\n\t\t\t\tstartVars.startAt = startVars.delay = null; //no nesting of startAt objects allowed (otherwise it could cause an infinite loop).\n\t\t\t\tstartVars.onUpdate = v.onUpdate;\n\t\t\t\tstartVars.onUpdateParams = v.onUpdateParams;\n\t\t\t\tstartVars.onUpdateScope = v.onUpdateScope || v.callbackScope || this;\n\t\t\t\tthis._startAt = TweenLite.to(this.target || {}, 0, startVars);\n\t\t\t\tif (immediate) {\n\t\t\t\t\tif (this._time > 0) {\n\t\t\t\t\t\tthis._startAt = null; //tweens that render immediately (like most from() and fromTo() tweens) shouldn't revert when their parent timeline's playhead goes backward past the startTime because the initial render could have happened anytime and it shouldn't be directly correlated to this tween's startTime. Imagine setting up a complex animation where the beginning states of various objects are rendered immediately but the tween doesn't happen for quite some time - if we revert to the starting values as soon as the playhead goes backward past the tween's startTime, it will throw things off visually. Reversion should only happen in TimelineLite/Max instances where immediateRender was false (which is the default in the convenience methods like from()).\n\t\t\t\t\t} else if (dur !== 0) {\n\t\t\t\t\t\treturn; //we skip initialization here so that overwriting doesn't occur until the tween actually begins. Otherwise, if you create several immediateRender:true tweens of the same target/properties to drop into a TimelineLite or TimelineMax, the last one created would overwrite the first ones because they didn't get placed into the timeline yet before the first render occurs and kicks in overwriting.\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else if (v.runBackwards && dur !== 0) {\n\t\t\t\t//from() tweens must be handled uniquely: their beginning values must be rendered but we don't want overwriting to occur yet (when time is still 0). Wait until the tween actually begins before doing all the routines like overwriting. At that time, we should render at the END of the tween to ensure that things initialize correctly (remember, from() tweens go backwards)\n\t\t\t\tif (startAt) {\n\t\t\t\t\tstartAt.render(-1, true);\n\t\t\t\t\tstartAt.kill();\n\t\t\t\t\tthis._startAt = null;\n\t\t\t\t} else {\n\t\t\t\t\tif (this._time !== 0) { //in rare cases (like if a from() tween runs and then is invalidate()-ed), immediateRender could be true but the initial forced-render gets skipped, so there's no need to force the render in this context when the _time is greater than 0\n\t\t\t\t\t\timmediate = false;\n\t\t\t\t\t}\n\t\t\t\t\tpt = {};\n\t\t\t\t\tfor (p in v) { //copy props into a new object and skip any reserved props, otherwise onComplete or onUpdate or onStart could fire. We should, however, permit autoCSS to go through.\n\t\t\t\t\t\tif (!_reservedProps[p] || p === \"autoCSS\") {\n\t\t\t\t\t\t\tpt[p] = v[p];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tpt.overwrite = 0;\n\t\t\t\t\tpt.data = \"isFromStart\"; //we tag the tween with as \"isFromStart\" so that if [inside a plugin] we need to only do something at the very END of a tween, we have a way of identifying this tween as merely the one that's setting the beginning values for a \"from()\" tween. For example, clearProps in CSSPlugin should only get applied at the very END of a tween and without this tag, from(...{height:100, clearProps:\"height\", delay:1}) would wipe the height at the beginning of the tween and after 1 second, it'd kick back in.\n\t\t\t\t\tpt.lazy = (immediate && v.lazy !== false);\n\t\t\t\t\tpt.immediateRender = immediate; //zero-duration tweens render immediately by default, but if we're not specifically instructed to render this tween immediately, we should skip this and merely _init() to record the starting values (rendering them immediately would push them to completion which is wasteful in that case - we'd have to render(-1) immediately after)\n\t\t\t\t\tthis._startAt = TweenLite.to(this.target, 0, pt);\n\t\t\t\t\tif (!immediate) {\n\t\t\t\t\t\tthis._startAt._init(); //ensures that the initial values are recorded\n\t\t\t\t\t\tthis._startAt._enabled(false); //no need to have the tween render on the next cycle. Disable it because we'll always manually control the renders of the _startAt tween.\n\t\t\t\t\t\tif (this.vars.immediateRender) {\n\t\t\t\t\t\t\tthis._startAt = null;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (this._time === 0) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis._ease = ease = (!ease) ? TweenLite.defaultEase : (ease instanceof Ease) ? ease : (typeof(ease) === \"function\") ? new Ease(ease, v.easeParams) : _easeMap[ease] || TweenLite.defaultEase;\n\t\t\tif (v.easeParams instanceof Array && ease.config) {\n\t\t\t\tthis._ease = ease.config.apply(ease, v.easeParams);\n\t\t\t}\n\t\t\tthis._easeType = this._ease._type;\n\t\t\tthis._easePower = this._ease._power;\n\t\t\tthis._firstPT = null;\n\n\t\t\tif (this._targets) {\n\t\t\t\tl = this._targets.length;\n\t\t\t\tfor (i = 0; i < l; i++) {\n\t\t\t\t\tif ( this._initProps( this._targets[i], (this._propLookup[i] = {}), this._siblings[i], (op ? op[i] : null), i) ) {\n\t\t\t\t\t\tinitPlugins = true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tinitPlugins = this._initProps(this.target, this._propLookup, this._siblings, op, 0);\n\t\t\t}\n\n\t\t\tif (initPlugins) {\n\t\t\t\tTweenLite._onPluginEvent(\"_onInitAllProps\", this); //reorders the array in order of priority. Uses a static TweenPlugin method in order to minimize file size in TweenLite\n\t\t\t}\n\t\t\tif (op) if (!this._firstPT) if (typeof(this.target) !== \"function\") { //if all tweening properties have been overwritten, kill the tween. If the target is a function, it's probably a delayedCall so let it live.\n\t\t\t\tthis._enabled(false, false);\n\t\t\t}\n\t\t\tif (v.runBackwards) {\n\t\t\t\tpt = this._firstPT;\n\t\t\t\twhile (pt) {\n\t\t\t\t\tpt.s += pt.c;\n\t\t\t\t\tpt.c = -pt.c;\n\t\t\t\t\tpt = pt._next;\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis._onUpdate = v.onUpdate;\n\t\t\tthis._initted = true;\n\t\t};\n\n\t\tp._initProps = function(target, propLookup, siblings, overwrittenProps, index) {\n\t\t\tvar p, i, initPlugins, plugin, pt, v;\n\t\t\tif (target == null) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tif (_lazyLookup[target._gsTweenID]) {\n\t\t\t\t_lazyRender(); //if other tweens of the same target have recently initted but haven't rendered yet, we've got to force the render so that the starting values are correct (imagine populating a timeline with a bunch of sequential tweens and then jumping to the end)\n\t\t\t}\n\n\t\t\tif (!this.vars.css) if (target.style) if (target !== window && target.nodeType) if (_plugins.css) if (this.vars.autoCSS !== false) { //it's so common to use TweenLite/Max to animate the css of DOM elements, we assume that if the target is a DOM element, that's what is intended (a convenience so that users don't have to wrap things in css:{}, although we still recommend it for a slight performance boost and better specificity). Note: we cannot check \"nodeType\" on the window inside an iframe.\n\t\t\t\t_autoCSS(this.vars, target);\n\t\t\t}\n\t\t\tfor (p in this.vars) {\n\t\t\t\tv = this.vars[p];\n\t\t\t\tif (_reservedProps[p]) {\n\t\t\t\t\tif (v) if ((v instanceof Array) || (v.push && _isArray(v))) if (v.join(\"\").indexOf(\"{self}\") !== -1) {\n\t\t\t\t\t\tthis.vars[p] = v = this._swapSelfInParams(v, this);\n\t\t\t\t\t}\n\n\t\t\t\t} else if (_plugins[p] && (plugin = new _plugins[p]())._onInitTween(target, this.vars[p], this, index)) {\n\n\t\t\t\t\t//t - target \t\t[object]\n\t\t\t\t\t//p - property \t\t[string]\n\t\t\t\t\t//s - start\t\t\t[number]\n\t\t\t\t\t//c - change\t\t[number]\n\t\t\t\t\t//f - isFunction\t[boolean]\n\t\t\t\t\t//n - name\t\t\t[string]\n\t\t\t\t\t//pg - isPlugin \t[boolean]\n\t\t\t\t\t//pr - priority\t\t[number]\n\t\t\t\t\t//m - mod           [function | 0]\n\t\t\t\t\tthis._firstPT = pt = {_next:this._firstPT, t:plugin, p:\"setRatio\", s:0, c:1, f:1, n:p, pg:1, pr:plugin._priority, m:0};\n\t\t\t\t\ti = plugin._overwriteProps.length;\n\t\t\t\t\twhile (--i > -1) {\n\t\t\t\t\t\tpropLookup[plugin._overwriteProps[i]] = this._firstPT;\n\t\t\t\t\t}\n\t\t\t\t\tif (plugin._priority || plugin._onInitAllProps) {\n\t\t\t\t\t\tinitPlugins = true;\n\t\t\t\t\t}\n\t\t\t\t\tif (plugin._onDisable || plugin._onEnable) {\n\t\t\t\t\t\tthis._notifyPluginsOfEnabled = true;\n\t\t\t\t\t}\n\t\t\t\t\tif (pt._next) {\n\t\t\t\t\t\tpt._next._prev = pt;\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\t\t\t\t\tpropLookup[p] = _addPropTween.call(this, target, p, \"get\", v, p, 0, null, this.vars.stringFilter, index);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (overwrittenProps) if (this._kill(overwrittenProps, target)) { //another tween may have tried to overwrite properties of this tween before init() was called (like if two tweens start at the same time, the one created second will run first)\n\t\t\t\treturn this._initProps(target, propLookup, siblings, overwrittenProps, index);\n\t\t\t}\n\t\t\tif (this._overwrite > 1) if (this._firstPT) if (siblings.length > 1) if (_applyOverwrite(target, this, propLookup, this._overwrite, siblings)) {\n\t\t\t\tthis._kill(propLookup, target);\n\t\t\t\treturn this._initProps(target, propLookup, siblings, overwrittenProps, index);\n\t\t\t}\n\t\t\tif (this._firstPT) if ((this.vars.lazy !== false && this._duration) || (this.vars.lazy && !this._duration)) { //zero duration tweens don't lazy render by default; everything else does.\n\t\t\t\t_lazyLookup[target._gsTweenID] = true;\n\t\t\t}\n\t\t\treturn initPlugins;\n\t\t};\n\n\t\tp.render = function(time, suppressEvents, force) {\n\t\t\tvar self = this,\n\t\t\t\tprevTime = self._time,\n\t\t\t\tduration = self._duration,\n\t\t\t\tprevRawPrevTime = self._rawPrevTime,\n\t\t\t\tisComplete, callback, pt, rawPrevTime;\n\t\t\tif (time >= duration - _tinyNum && time >= 0) { //to work around occasional floating point math artifacts.\n\t\t\t\tself._totalTime = self._time = duration;\n\t\t\t\tself.ratio = self._ease._calcEnd ? self._ease.getRatio(1) : 1;\n\t\t\t\tif (!self._reversed ) {\n\t\t\t\t\tisComplete = true;\n\t\t\t\t\tcallback = \"onComplete\";\n\t\t\t\t\tforce = (force || self._timeline.autoRemoveChildren); //otherwise, if the animation is unpaused/activated after it's already finished, it doesn't get removed from the parent timeline.\n\t\t\t\t}\n\t\t\t\tif (duration === 0) if (self._initted || !self.vars.lazy || force) { //zero-duration tweens are tricky because we must discern the momentum/direction of time in order to determine whether the starting values should be rendered or the ending values. If the \"playhead\" of its timeline goes past the zero-duration tween in the forward direction or lands directly on it, the end values should be rendered, but if the timeline's \"playhead\" moves past it in the backward direction (from a postitive time to a negative time), the starting values must be rendered.\n\t\t\t\t\tif (self._startTime === self._timeline._duration) { //if a zero-duration tween is at the VERY end of a timeline and that timeline renders at its end, it will typically add a tiny bit of cushion to the render time to prevent rounding errors from getting in the way of tweens rendering their VERY end. If we then reverse() that timeline, the zero-duration tween will trigger its onReverseComplete even though technically the playhead didn't pass over it again. It's a very specific edge case we must accommodate.\n\t\t\t\t\t\ttime = 0;\n\t\t\t\t\t}\n\t\t\t\t\tif (prevRawPrevTime < 0 || (time <= 0 && time >= -_tinyNum) || (prevRawPrevTime === _tinyNum && self.data !== \"isPause\")) if (prevRawPrevTime !== time) { //note: when this.data is \"isPause\", it's a callback added by addPause() on a timeline that we should not be triggered when LEAVING its exact start time. In other words, tl.addPause(1).play(1) shouldn't pause.\n\t\t\t\t\t\tforce = true;\n\t\t\t\t\t\tif (prevRawPrevTime > _tinyNum) {\n\t\t\t\t\t\t\tcallback = \"onReverseComplete\";\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tself._rawPrevTime = rawPrevTime = (!suppressEvents || time || prevRawPrevTime === time) ? time : _tinyNum; //when the playhead arrives at EXACTLY time 0 (right on top) of a zero-duration tween, we need to discern if events are suppressed so that when the playhead moves again (next time), it'll trigger the callback. If events are NOT suppressed, obviously the callback would be triggered in this render. Basically, the callback should fire either when the playhead ARRIVES or LEAVES this exact spot, not both. Imagine doing a timeline.seek(0) and there's a callback that sits at 0. Since events are suppressed on that seek() by default, nothing will fire, but when the playhead moves off of that position, the callback should fire. This behavior is what people intuitively expect. We set the _rawPrevTime to be a precise tiny number to indicate this scenario rather than using another property/variable which would increase memory usage. This technique is less readable, but more efficient.\n\t\t\t\t}\n\n\t\t\t} else if (time < _tinyNum) { //to work around occasional floating point math artifacts, round super small values to 0.\n\t\t\t\tself._totalTime = self._time = 0;\n\t\t\t\tself.ratio = self._ease._calcEnd ? self._ease.getRatio(0) : 0;\n\t\t\t\tif (prevTime !== 0 || (duration === 0 && prevRawPrevTime > 0)) {\n\t\t\t\t\tcallback = \"onReverseComplete\";\n\t\t\t\t\tisComplete = self._reversed;\n\t\t\t\t}\n\t\t\t\tif (time > -_tinyNum) {\n\t\t\t\t\ttime = 0;\n\t\t\t\t} else if (time < 0) {\n\t\t\t\t\tself._active = false;\n\t\t\t\t\tif (duration === 0) if (self._initted || !self.vars.lazy || force) { //zero-duration tweens are tricky because we must discern the momentum/direction of time in order to determine whether the starting values should be rendered or the ending values. If the \"playhead\" of its timeline goes past the zero-duration tween in the forward direction or lands directly on it, the end values should be rendered, but if the timeline's \"playhead\" moves past it in the backward direction (from a postitive time to a negative time), the starting values must be rendered.\n\t\t\t\t\t\tif (prevRawPrevTime >= 0 && !(prevRawPrevTime === _tinyNum && self.data === \"isPause\")) {\n\t\t\t\t\t\t\tforce = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tself._rawPrevTime = rawPrevTime = (!suppressEvents || time || prevRawPrevTime === time) ? time : _tinyNum; //when the playhead arrives at EXACTLY time 0 (right on top) of a zero-duration tween, we need to discern if events are suppressed so that when the playhead moves again (next time), it'll trigger the callback. If events are NOT suppressed, obviously the callback would be triggered in this render. Basically, the callback should fire either when the playhead ARRIVES or LEAVES this exact spot, not both. Imagine doing a timeline.seek(0) and there's a callback that sits at 0. Since events are suppressed on that seek() by default, nothing will fire, but when the playhead moves off of that position, the callback should fire. This behavior is what people intuitively expect. We set the _rawPrevTime to be a precise tiny number to indicate this scenario rather than using another property/variable which would increase memory usage. This technique is less readable, but more efficient.\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (!self._initted || (self._startAt && self._startAt.progress())) { //if we render the very beginning (time == 0) of a fromTo(), we must force the render (normal tweens wouldn't need to render at a time of 0 when the prevTime was also 0). This is also mandatory to make sure overwriting kicks in immediately. Also, we check progress() because if startAt has already rendered at its end, we should force a render at its beginning. Otherwise, if you put the playhead directly on top of where a fromTo({immediateRender:false}) starts, and then move it backwards, the from() won't revert its values.\n\t\t\t\t\tforce = true;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tself._totalTime = self._time = time;\n\n\t\t\t\tif (self._easeType) {\n\t\t\t\t\tvar r = time / duration, type = self._easeType, pow = self._easePower;\n\t\t\t\t\tif (type === 1 || (type === 3 && r >= 0.5)) {\n\t\t\t\t\t\tr = 1 - r;\n\t\t\t\t\t}\n\t\t\t\t\tif (type === 3) {\n\t\t\t\t\t\tr *= 2;\n\t\t\t\t\t}\n\t\t\t\t\tif (pow === 1) {\n\t\t\t\t\t\tr *= r;\n\t\t\t\t\t} else if (pow === 2) {\n\t\t\t\t\t\tr *= r * r;\n\t\t\t\t\t} else if (pow === 3) {\n\t\t\t\t\t\tr *= r * r * r;\n\t\t\t\t\t} else if (pow === 4) {\n\t\t\t\t\t\tr *= r * r * r * r;\n\t\t\t\t\t}\n\t\t\t\t\tself.ratio = (type === 1) ? 1 - r : (type === 2) ? r : (time / duration < 0.5) ? r / 2 : 1 - (r / 2);\n\t\t\t\t} else {\n\t\t\t\t\tself.ratio = self._ease.getRatio(time / duration);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (self._time === prevTime && !force) {\n\t\t\t\treturn;\n\t\t\t} else if (!self._initted) {\n\t\t\t\tself._init();\n\t\t\t\tif (!self._initted || self._gc) { //immediateRender tweens typically won't initialize until the playhead advances (_time is greater than 0) in order to ensure that overwriting occurs properly. Also, if all of the tweening properties have been overwritten (which would cause _gc to be true, as set in _init()), we shouldn't continue otherwise an onStart callback could be called for example.\n\t\t\t\t\treturn;\n\t\t\t\t} else if (!force && self._firstPT && ((self.vars.lazy !== false && self._duration) || (self.vars.lazy && !self._duration))) {\n\t\t\t\t\tself._time = self._totalTime = prevTime;\n\t\t\t\t\tself._rawPrevTime = prevRawPrevTime;\n\t\t\t\t\t_lazyTweens.push(self);\n\t\t\t\t\tself._lazy = [time, suppressEvents];\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\t//_ease is initially set to defaultEase, so now that init() has run, _ease is set properly and we need to recalculate the ratio. Overall this is faster than using conditional logic earlier in the method to avoid having to set ratio twice because we only init() once but renderTime() gets called VERY frequently.\n\t\t\t\tif (self._time && !isComplete) {\n\t\t\t\t\tself.ratio = self._ease.getRatio(self._time / duration);\n\t\t\t\t} else if (isComplete && self._ease._calcEnd) {\n\t\t\t\t\tself.ratio = self._ease.getRatio((self._time === 0) ? 0 : 1);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (self._lazy !== false) { //in case a lazy render is pending, we should flush it because the new render is occurring now (imagine a lazy tween instantiating and then immediately the user calls tween.seek(tween.duration()), skipping to the end - the end render would be forced, and then if we didn't flush the lazy render, it'd fire AFTER the seek(), rendering it at the wrong time.\n\t\t\t\tself._lazy = false;\n\t\t\t}\n\t\t\tif (!self._active) if (!self._paused && self._time !== prevTime && time >= 0) {\n\t\t\t\tself._active = true;  //so that if the user renders a tween (as opposed to the timeline rendering it), the timeline is forced to re-render and align it with the proper time/frame on the next rendering cycle. Maybe the tween already finished but the user manually re-renders it as halfway done.\n\t\t\t}\n\t\t\tif (prevTime === 0) {\n\t\t\t\tif (self._startAt) {\n\t\t\t\t\tif (time >= 0) {\n\t\t\t\t\t\tself._startAt.render(time, true, force);\n\t\t\t\t\t} else if (!callback) {\n\t\t\t\t\t\tcallback = \"_dummyGS\"; //if no callback is defined, use a dummy value just so that the condition at the end evaluates as true because _startAt should render AFTER the normal render loop when the time is negative. We could handle this in a more intuitive way, of course, but the render loop is the MOST important thing to optimize, so this technique allows us to avoid adding extra conditional logic in a high-frequency area.\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (self.vars.onStart) if (self._time !== 0 || duration === 0) if (!suppressEvents) {\n\t\t\t\t\tself._callback(\"onStart\");\n\t\t\t\t}\n\t\t\t}\n\t\t\tpt = self._firstPT;\n\t\t\twhile (pt) {\n\t\t\t\tif (pt.f) {\n\t\t\t\t\tpt.t[pt.p](pt.c * self.ratio + pt.s);\n\t\t\t\t} else {\n\t\t\t\t\tpt.t[pt.p] = pt.c * self.ratio + pt.s;\n\t\t\t\t}\n\t\t\t\tpt = pt._next;\n\t\t\t}\n\n\t\t\tif (self._onUpdate) {\n\t\t\t\tif (time < 0) if (self._startAt && time !== -0.0001) { //if the tween is positioned at the VERY beginning (_startTime 0) of its parent timeline, it's illegal for the playhead to go back further, so we should not render the recorded startAt values.\n\t\t\t\t\tself._startAt.render(time, true, force); //note: for performance reasons, we tuck this conditional logic inside less traveled areas (most tweens don't have an onUpdate). We'd just have it at the end before the onComplete, but the values should be updated before any onUpdate is called, so we ALSO put it here and then if it's not called, we do so later near the onComplete.\n\t\t\t\t}\n\t\t\t\tif (!suppressEvents) if (self._time !== prevTime || isComplete || force) {\n\t\t\t\t\tself._callback(\"onUpdate\");\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (callback) if (!self._gc || force) { //check _gc because there's a chance that kill() could be called in an onUpdate\n\t\t\t\tif (time < 0 && self._startAt && !self._onUpdate && time !== -0.0001) { //-0.0001 is a special value that we use when looping back to the beginning of a repeated TimelineMax, in which case we shouldn't render the _startAt values.\n\t\t\t\t\tself._startAt.render(time, true, force);\n\t\t\t\t}\n\t\t\t\tif (isComplete) {\n\t\t\t\t\tif (self._timeline.autoRemoveChildren) {\n\t\t\t\t\t\tself._enabled(false, false);\n\t\t\t\t\t}\n\t\t\t\t\tself._active = false;\n\t\t\t\t}\n\t\t\t\tif (!suppressEvents && self.vars[callback]) {\n\t\t\t\t\tself._callback(callback);\n\t\t\t\t}\n\t\t\t\tif (duration === 0 && self._rawPrevTime === _tinyNum && rawPrevTime !== _tinyNum) { //the onComplete or onReverseComplete could trigger movement of the playhead and for zero-duration tweens (which must discern direction) that land directly back on their start time, we don't want to fire again on the next render. Think of several addPause()'s in a timeline that forces the playhead to a certain spot, but what if it's already paused and another tween is tweening the \"time\" of the timeline? Each time it moves [forward] past that spot, it would move back, and since suppressEvents is true, it'd reset _rawPrevTime to _tinyNum so that when it begins again, the callback would fire (so ultimately it could bounce back and forth during that tween). Again, this is a very uncommon scenario, but possible nonetheless.\n\t\t\t\t\tself._rawPrevTime = 0;\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\tp._kill = function(vars, target, overwritingTween) {\n\t\t\tif (vars === \"all\") {\n\t\t\t\tvars = null;\n\t\t\t}\n\t\t\tif (vars == null) if (target == null || target === this.target) {\n\t\t\t\tthis._lazy = false;\n\t\t\t\treturn this._enabled(false, false);\n\t\t\t}\n\t\t\ttarget = (typeof(target) !== \"string\") ? (target || this._targets || this.target) : TweenLite.selector(target) || target;\n\t\t\tvar simultaneousOverwrite = (overwritingTween && this._time && overwritingTween._startTime === this._startTime && this._timeline === overwritingTween._timeline),\n\t\t\t\tfirstPT = this._firstPT,\n\t\t\t\ti, overwrittenProps, p, pt, propLookup, changed, killProps, record, killed;\n\t\t\tif ((_isArray(target) || _isSelector(target)) && typeof(target[0]) !== \"number\") {\n\t\t\t\ti = target.length;\n\t\t\t\twhile (--i > -1) {\n\t\t\t\t\tif (this._kill(vars, target[i], overwritingTween)) {\n\t\t\t\t\t\tchanged = true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif (this._targets) {\n\t\t\t\t\ti = this._targets.length;\n\t\t\t\t\twhile (--i > -1) {\n\t\t\t\t\t\tif (target === this._targets[i]) {\n\t\t\t\t\t\t\tpropLookup = this._propLookup[i] || {};\n\t\t\t\t\t\t\tthis._overwrittenProps = this._overwrittenProps || [];\n\t\t\t\t\t\t\toverwrittenProps = this._overwrittenProps[i] = vars ? this._overwrittenProps[i] || {} : \"all\";\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} else if (target !== this.target) {\n\t\t\t\t\treturn false;\n\t\t\t\t} else {\n\t\t\t\t\tpropLookup = this._propLookup;\n\t\t\t\t\toverwrittenProps = this._overwrittenProps = vars ? this._overwrittenProps || {} : \"all\";\n\t\t\t\t}\n\n\t\t\t\tif (propLookup) {\n\t\t\t\t\tkillProps = vars || propLookup;\n\t\t\t\t\trecord = (vars !== overwrittenProps && overwrittenProps !== \"all\" && vars !== propLookup && (typeof(vars) !== \"object\" || !vars._tempKill)); //_tempKill is a super-secret way to delete a particular tweening property but NOT have it remembered as an official overwritten property (like in BezierPlugin)\n\t\t\t\t\tif (overwritingTween && (TweenLite.onOverwrite || this.vars.onOverwrite)) {\n\t\t\t\t\t\tfor (p in killProps) {\n\t\t\t\t\t\t\tif (propLookup[p]) {\n\t\t\t\t\t\t\t\tif (!killed) {\n\t\t\t\t\t\t\t\t\tkilled = [];\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tkilled.push(p);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif ((killed || !vars) && !_onOverwrite(this, overwritingTween, target, killed)) { //if the onOverwrite returned false, that means the user wants to override the overwriting (cancel it).\n\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tfor (p in killProps) {\n\t\t\t\t\t\tif ((pt = propLookup[p])) {\n\t\t\t\t\t\t\tif (simultaneousOverwrite) { //if another tween overwrites this one and they both start at exactly the same time, yet this tween has already rendered once (for example, at 0.001) because it's first in the queue, we should revert the values to where they were at 0 so that the starting values aren't contaminated on the overwriting tween.\n\t\t\t\t\t\t\t\tif (pt.f) {\n\t\t\t\t\t\t\t\t\tpt.t[pt.p](pt.s);\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tpt.t[pt.p] = pt.s;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tchanged = true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (pt.pg && pt.t._kill(killProps)) {\n\t\t\t\t\t\t\t\tchanged = true; //some plugins need to be notified so they can perform cleanup tasks first\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (!pt.pg || pt.t._overwriteProps.length === 0) {\n\t\t\t\t\t\t\t\tif (pt._prev) {\n\t\t\t\t\t\t\t\t\tpt._prev._next = pt._next;\n\t\t\t\t\t\t\t\t} else if (pt === this._firstPT) {\n\t\t\t\t\t\t\t\t\tthis._firstPT = pt._next;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tif (pt._next) {\n\t\t\t\t\t\t\t\t\tpt._next._prev = pt._prev;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tpt._next = pt._prev = null;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdelete propLookup[p];\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (record) {\n\t\t\t\t\t\t\toverwrittenProps[p] = 1;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (!this._firstPT && this._initted && firstPT) { //if all tweening properties are killed, kill the tween. Without this line, if there's a tween with multiple targets and then you killTweensOf() each target individually, the tween would technically still remain active and fire its onComplete even though there aren't any more properties tweening.\n\t\t\t\t\t\tthis._enabled(false, false);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn changed;\n\t\t};\n\n\t\tp.invalidate = function() {\n\t\t\tif (this._notifyPluginsOfEnabled) {\n\t\t\t\tTweenLite._onPluginEvent(\"_onDisable\", this);\n\t\t\t}\n\t\t\tvar t = this._time;\n\t\t\tthis._firstPT = this._overwrittenProps = this._startAt = this._onUpdate = null;\n\t\t\tthis._notifyPluginsOfEnabled = this._active = this._lazy = false;\n\t\t\tthis._propLookup = (this._targets) ? {} : [];\n\t\t\tAnimation.prototype.invalidate.call(this);\n\t\t\tif (this.vars.immediateRender) {\n\t\t\t\tthis._time = -_tinyNum; //forces a render without having to set the render() \"force\" parameter to true because we want to allow lazying by default (using the \"force\" parameter always forces an immediate full render)\n\t\t\t\tthis.render(t, false, this.vars.lazy !== false);\n\t\t\t}\n\t\t\treturn this;\n\t\t};\n\n\t\tp._enabled = function(enabled, ignoreTimeline) {\n\t\t\tif (!_tickerActive) {\n\t\t\t\t_ticker.wake();\n\t\t\t}\n\t\t\tif (enabled && this._gc) {\n\t\t\t\tvar targets = this._targets,\n\t\t\t\t\ti;\n\t\t\t\tif (targets) {\n\t\t\t\t\ti = targets.length;\n\t\t\t\t\twhile (--i > -1) {\n\t\t\t\t\t\tthis._siblings[i] = _register(targets[i], this, true);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tthis._siblings = _register(this.target, this, true);\n\t\t\t\t}\n\t\t\t}\n\t\t\tAnimation.prototype._enabled.call(this, enabled, ignoreTimeline);\n\t\t\tif (this._notifyPluginsOfEnabled) if (this._firstPT) {\n\t\t\t\treturn TweenLite._onPluginEvent((enabled ? \"_onEnable\" : \"_onDisable\"), this);\n\t\t\t}\n\t\t\treturn false;\n\t\t};\n\n\n//----TweenLite static methods -----------------------------------------------------\n\n\t\tTweenLite.to = function(target, duration, vars) {\n\t\t\treturn new TweenLite(target, duration, vars);\n\t\t};\n\n\t\tTweenLite.from = function(target, duration, vars) {\n\t\t\tvars.runBackwards = true;\n\t\t\tvars.immediateRender = (vars.immediateRender != false);\n\t\t\treturn new TweenLite(target, duration, vars);\n\t\t};\n\n\t\tTweenLite.fromTo = function(target, duration, fromVars, toVars) {\n\t\t\ttoVars.startAt = fromVars;\n\t\t\ttoVars.immediateRender = (toVars.immediateRender != false && fromVars.immediateRender != false);\n\t\t\treturn new TweenLite(target, duration, toVars);\n\t\t};\n\n\t\tTweenLite.delayedCall = function(delay, callback, params, scope, useFrames) {\n\t\t\treturn new TweenLite(callback, 0, {delay:delay, onComplete:callback, onCompleteParams:params, callbackScope:scope, onReverseComplete:callback, onReverseCompleteParams:params, immediateRender:false, lazy:false, useFrames:useFrames, overwrite:0});\n\t\t};\n\n\t\tTweenLite.set = function(target, vars) {\n\t\t\treturn new TweenLite(target, 0, vars);\n\t\t};\n\n\t\tTweenLite.getTweensOf = function(target, onlyActive) {\n\t\t\tif (target == null) { return []; }\n\t\t\ttarget = (typeof(target) !== \"string\") ? target : TweenLite.selector(target) || target;\n\t\t\tvar i, a, j, t;\n\t\t\tif ((_isArray(target) || _isSelector(target)) && typeof(target[0]) !== \"number\") {\n\t\t\t\ti = target.length;\n\t\t\t\ta = [];\n\t\t\t\twhile (--i > -1) {\n\t\t\t\t\ta = a.concat(TweenLite.getTweensOf(target[i], onlyActive));\n\t\t\t\t}\n\t\t\t\ti = a.length;\n\t\t\t\t//now get rid of any duplicates (tweens of arrays of objects could cause duplicates)\n\t\t\t\twhile (--i > -1) {\n\t\t\t\t\tt = a[i];\n\t\t\t\t\tj = i;\n\t\t\t\t\twhile (--j > -1) {\n\t\t\t\t\t\tif (t === a[j]) {\n\t\t\t\t\t\t\ta.splice(i, 1);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else if (target._gsTweenID) {\n\t\t\t\ta = _register(target).concat();\n\t\t\t\ti = a.length;\n\t\t\t\twhile (--i > -1) {\n\t\t\t\t\tif (a[i]._gc || (onlyActive && !a[i].isActive())) {\n\t\t\t\t\t\ta.splice(i, 1);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn a || [];\n\t\t};\n\n\t\tTweenLite.killTweensOf = TweenLite.killDelayedCallsTo = function(target, onlyActive, vars) {\n\t\t\tif (typeof(onlyActive) === \"object\") {\n\t\t\t\tvars = onlyActive; //for backwards compatibility (before \"onlyActive\" parameter was inserted)\n\t\t\t\tonlyActive = false;\n\t\t\t}\n\t\t\tvar a = TweenLite.getTweensOf(target, onlyActive),\n\t\t\t\ti = a.length;\n\t\t\twhile (--i > -1) {\n\t\t\t\ta[i]._kill(vars, target);\n\t\t\t}\n\t\t};\n\n\n\n/*\n * ----------------------------------------------------------------\n * TweenPlugin   (could easily be split out as a separate file/class, but included for ease of use (so that people don't need to include another script call before loading plugins which is easy to forget)\n * ----------------------------------------------------------------\n */\n\t\tvar TweenPlugin = _class(\"plugins.TweenPlugin\", function(props, priority) {\n\t\t\t\t\tthis._overwriteProps = (props || \"\").split(\",\");\n\t\t\t\t\tthis._propName = this._overwriteProps[0];\n\t\t\t\t\tthis._priority = priority || 0;\n\t\t\t\t\tthis._super = TweenPlugin.prototype;\n\t\t\t\t}, true);\n\n\t\tp = TweenPlugin.prototype;\n\t\tTweenPlugin.version = \"1.19.0\";\n\t\tTweenPlugin.API = 2;\n\t\tp._firstPT = null;\n\t\tp._addTween = _addPropTween;\n\t\tp.setRatio = _setRatio;\n\n\t\tp._kill = function(lookup) {\n\t\t\tvar a = this._overwriteProps,\n\t\t\t\tpt = this._firstPT,\n\t\t\t\ti;\n\t\t\tif (lookup[this._propName] != null) {\n\t\t\t\tthis._overwriteProps = [];\n\t\t\t} else {\n\t\t\t\ti = a.length;\n\t\t\t\twhile (--i > -1) {\n\t\t\t\t\tif (lookup[a[i]] != null) {\n\t\t\t\t\t\ta.splice(i, 1);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\twhile (pt) {\n\t\t\t\tif (lookup[pt.n] != null) {\n\t\t\t\t\tif (pt._next) {\n\t\t\t\t\t\tpt._next._prev = pt._prev;\n\t\t\t\t\t}\n\t\t\t\t\tif (pt._prev) {\n\t\t\t\t\t\tpt._prev._next = pt._next;\n\t\t\t\t\t\tpt._prev = null;\n\t\t\t\t\t} else if (this._firstPT === pt) {\n\t\t\t\t\t\tthis._firstPT = pt._next;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tpt = pt._next;\n\t\t\t}\n\t\t\treturn false;\n\t\t};\n\n\t\tp._mod = p._roundProps = function(lookup) {\n\t\t\tvar pt = this._firstPT,\n\t\t\t\tval;\n\t\t\twhile (pt) {\n\t\t\t\tval = lookup[this._propName] || (pt.n != null && lookup[ pt.n.split(this._propName + \"_\").join(\"\") ]);\n\t\t\t\tif (val && typeof(val) === \"function\") { //some properties that are very plugin-specific add a prefix named after the _propName plus an underscore, so we need to ignore that extra stuff here.\n\t\t\t\t\tif (pt.f === 2) {\n\t\t\t\t\t\tpt.t._applyPT.m = val;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tpt.m = val;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tpt = pt._next;\n\t\t\t}\n\t\t};\n\n\t\tTweenLite._onPluginEvent = function(type, tween) {\n\t\t\tvar pt = tween._firstPT,\n\t\t\t\tchanged, pt2, first, last, next;\n\t\t\tif (type === \"_onInitAllProps\") {\n\t\t\t\t//sorts the PropTween linked list in order of priority because some plugins need to render earlier/later than others, like MotionBlurPlugin applies its effects after all x/y/alpha tweens have rendered on each frame.\n\t\t\t\twhile (pt) {\n\t\t\t\t\tnext = pt._next;\n\t\t\t\t\tpt2 = first;\n\t\t\t\t\twhile (pt2 && pt2.pr > pt.pr) {\n\t\t\t\t\t\tpt2 = pt2._next;\n\t\t\t\t\t}\n\t\t\t\t\tif ((pt._prev = pt2 ? pt2._prev : last)) {\n\t\t\t\t\t\tpt._prev._next = pt;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tfirst = pt;\n\t\t\t\t\t}\n\t\t\t\t\tif ((pt._next = pt2)) {\n\t\t\t\t\t\tpt2._prev = pt;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tlast = pt;\n\t\t\t\t\t}\n\t\t\t\t\tpt = next;\n\t\t\t\t}\n\t\t\t\tpt = tween._firstPT = first;\n\t\t\t}\n\t\t\twhile (pt) {\n\t\t\t\tif (pt.pg) if (typeof(pt.t[type]) === \"function\") if (pt.t[type]()) {\n\t\t\t\t\tchanged = true;\n\t\t\t\t}\n\t\t\t\tpt = pt._next;\n\t\t\t}\n\t\t\treturn changed;\n\t\t};\n\n\t\tTweenPlugin.activate = function(plugins) {\n\t\t\tvar i = plugins.length;\n\t\t\twhile (--i > -1) {\n\t\t\t\tif (plugins[i].API === TweenPlugin.API) {\n\t\t\t\t\t_plugins[(new plugins[i]())._propName] = plugins[i];\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t};\n\n\t\t//provides a more concise way to define plugins that have no dependencies besides TweenPlugin and TweenLite, wrapping common boilerplate stuff into one function (added in 1.9.0). You don't NEED to use this to define a plugin - the old way still works and can be useful in certain (rare) situations.\n\t\t_gsDefine.plugin = function(config) {\n\t\t\tif (!config || !config.propName || !config.init || !config.API) { throw \"illegal plugin definition.\"; }\n\t\t\tvar propName = config.propName,\n\t\t\t\tpriority = config.priority || 0,\n\t\t\t\toverwriteProps = config.overwriteProps,\n\t\t\t\tmap = {init:\"_onInitTween\", set:\"setRatio\", kill:\"_kill\", round:\"_mod\", mod:\"_mod\", initAll:\"_onInitAllProps\"},\n\t\t\t\tPlugin = _class(\"plugins.\" + propName.charAt(0).toUpperCase() + propName.substr(1) + \"Plugin\",\n\t\t\t\t\tfunction() {\n\t\t\t\t\t\tTweenPlugin.call(this, propName, priority);\n\t\t\t\t\t\tthis._overwriteProps = overwriteProps || [];\n\t\t\t\t\t}, (config.global === true)),\n\t\t\t\tp = Plugin.prototype = new TweenPlugin(propName),\n\t\t\t\tprop;\n\t\t\tp.constructor = Plugin;\n\t\t\tPlugin.API = config.API;\n\t\t\tfor (prop in map) {\n\t\t\t\tif (typeof(config[prop]) === \"function\") {\n\t\t\t\t\tp[map[prop]] = config[prop];\n\t\t\t\t}\n\t\t\t}\n\t\t\tPlugin.version = config.version;\n\t\t\tTweenPlugin.activate([Plugin]);\n\t\t\treturn Plugin;\n\t\t};\n\n\n\t\t//now run through all the dependencies discovered and if any are missing, log that to the console as a warning. This is why it's best to have TweenLite load last - it can check all the dependencies for you.\n\t\ta = window._gsQueue;\n\t\tif (a) {\n\t\t\tfor (i = 0; i < a.length; i++) {\n\t\t\t\ta[i]();\n\t\t\t}\n\t\t\tfor (p in _defLookup) {\n\t\t\t\tif (!_defLookup[p].func) {\n\t\t\t\t\twindow.console.log(\"GSAP encountered missing dependency: \" + p);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t_tickerActive = false; //ensures that the first official animation forces a ticker.tick() to update the time when it is instantiated\n\n\t\treturn TweenLite;\n\n})(_gsScope, \"TweenLite\");\n\nvar globals = _gsScope.GreenSockGlobals;\nvar nonGlobals = globals.com.greensock;\nvar SimpleTimeline = nonGlobals.core.SimpleTimeline;\nvar Animation = nonGlobals.core.Animation;\nvar Ease = globals.Ease;\nvar Linear = globals.Linear;\nvar Power1 = globals.Power1;\nvar Power2 = globals.Power2;\nvar Power3 = globals.Power3;\nvar Power4 = globals.Power4;\nvar TweenPlugin = globals.TweenPlugin;\nvar EventDispatcher = nonGlobals.events.EventDispatcher;\n\nclass IonicAppflowActivator {\r\n    constructor() {\r\n        this.$circles = [];\r\n        this.$lis = [];\r\n        this.screenshots = [];\r\n        this.active = null;\r\n        this.duration = 6;\r\n        this.quickDuration = .25;\r\n        this.r = 31;\r\n        this.gsRefs = [];\r\n        this.scrollPause = null;\r\n        this.circumference = this.r * 2 * Math.PI;\r\n        this.animationSelect = this.animationSelect.bind(this);\r\n        this.animationStart = this.animationStart.bind(this);\r\n    }\r\n    componentDidLoad() {\r\n        setTimeout(this.animationStart, 2000, 0);\r\n        const addCircle = (li, i) => {\r\n            this.$lis[i] = li;\r\n            this.$circles[i] = li.querySelector('.progress-ring__circle');\r\n            this.screenshots[i] = li.querySelector('a').dataset.screenshot;\r\n            if (li.nextElementSibling && li.nextElementSibling.nodeName === 'LI') {\r\n                addCircle(li.nextElementSibling, i + 1);\r\n            }\r\n        };\r\n        addCircle(this.el.querySelector('li:nth-child(1)'), 0);\r\n        this.active = 0;\r\n    }\r\n    animationStart(index) {\r\n        console.log('starting');\r\n        if (window.pageYOffset > 1000) {\r\n            console.log('pausing');\r\n            this.scrollPause = setTimeout(this.animationStart, 5000, 0);\r\n            return;\r\n        }\r\n        this.active = index;\r\n        this.$lis[index].classList.add('active');\r\n        TweenLite.to(this.$circles[index], .4, {\r\n            opacity: 1\r\n        });\r\n        TweenLite.to(this.$circles[index], this.duration, {\r\n            strokeDashoffset: 0,\r\n            onCompleteScope: this,\r\n            onComplete: () => {\r\n                this.animationStart(index >= this.$circles.length - 1 ? 0 : index + 1);\r\n                this.$lis[index].classList.remove('active');\r\n                TweenLite.to(this.$circles[index], .2, {\r\n                    opacity: 0,\r\n                    onCompleteScope: this,\r\n                    onComplete: () => {\r\n                        TweenLite.to(this.$circles[index], 0, {\r\n                            strokeDashoffset: this.circumference,\r\n                            lazy: true\r\n                        });\r\n                    }\r\n                });\r\n            }\r\n        });\r\n    }\r\n    animationSelect(index) {\r\n        this.$lis[index].classList.add('active');\r\n        this.active = index;\r\n        if (this.scrollPause) {\r\n            clearTimeout(this.scrollPause);\r\n        }\r\n        this.animationStopOthers(index);\r\n        TweenLite.to(this.$circles[index], this.quickDuration, {\r\n            strokeDashoffset: 0,\r\n            opacity: 1,\r\n            onCompleteScope: this,\r\n            onComplete: () => {\r\n                this.animationStopOthers(index);\r\n            }\r\n        });\r\n    }\r\n    animationRestart(index) {\r\n        this.animationStopOthers(index);\r\n        TweenLite.to(this.$circles[index], .5, {\r\n            strokeDashoffset: this.circumference * -1,\r\n            lazy: true,\r\n            onCompleteScope: this,\r\n            onComplete: () => {\r\n                TweenLite.to(this.$circles[index], 0, {\r\n                    strokeDashoffset: this.circumference,\r\n                    opacity: 0,\r\n                    lazy: true,\r\n                    onCompleteScope: this,\r\n                    onComplete: () => {\r\n                        this.animationStart(index);\r\n                    }\r\n                });\r\n            }\r\n        });\r\n    }\r\n    animationStopOthers(index) {\r\n        const circles = [];\r\n        this.$circles.forEach((circle, i) => {\r\n            if (i != index) {\r\n                circles.push(circle);\r\n                this.$lis[i].classList.remove('active');\r\n            }\r\n        });\r\n        TweenLite.to(circles, .2, {\r\n            opacity: 0,\r\n            lazy: true,\r\n            onCompleteScope: this,\r\n            onComplete: () => {\r\n                TweenLite.to(circles, 0, {\r\n                    strokeDashoffset: this.circumference,\r\n                    opacity: 0,\r\n                    lazy: true\r\n                });\r\n            }\r\n        });\r\n    }\r\n    circle(percent = 0) {\r\n        return (h(\"svg\", { class: \"progress-ring\", height: \"64\", width: \"64\" },\r\n            h(\"circle\", { class: \"progress-ring__circle\", stroke: \"#6C89F7\", \"stroke-width\": \"2\", fill: \"transparent\", r: this.r, cx: \"32\", cy: \"32\", style: {\r\n                    strokeDasharray: `${this.circumference} ${this.circumference}`,\r\n                    strokeDashoffset: this.circumference - percent / 100 * this.circumference\r\n                } })));\r\n    }\r\n    render() {\r\n        return ([\r\n            h(\"div\", { class: \"app-screenshot\" }, this.screenshots.map((screenshot, i) => h(\"img\", { class: i === this.active ? 'active' : 'inactive', src: screenshot }))),\r\n            h(\"nav\", null,\r\n                h(\"ul\", null,\r\n                    h(\"li\", { onMouseEnter: () => this.animationSelect(0), onMouseLeave: () => this.animationRestart(0) },\r\n                        this.circle(),\r\n                        h(\"slot\", { name: \"1\" })),\r\n                    h(\"li\", { onMouseEnter: () => this.animationSelect(1), onMouseLeave: () => this.animationRestart(1) },\r\n                        this.circle(),\r\n                        h(\"slot\", { name: \"2\" })),\r\n                    h(\"li\", { onMouseEnter: () => this.animationSelect(2), onMouseLeave: () => this.animationRestart(2) },\r\n                        this.circle(),\r\n                        h(\"slot\", { name: \"3\" }))))\r\n        ]);\r\n    }\r\n    static get is() { return \"ionic-appflow-activator\"; }\r\n    static get properties() { return {\r\n        \"$circles\": {\r\n            \"state\": true\r\n        },\r\n        \"$lis\": {\r\n            \"state\": true\r\n        },\r\n        \"active\": {\r\n            \"state\": true\r\n        },\r\n        \"el\": {\r\n            \"elementRef\": true\r\n        },\r\n        \"screenshots\": {\r\n            \"state\": true\r\n        }\r\n    }; }\r\n    static get style() { return \"ionic-appflow-activator nav{background:#fff;position:-webkit-sticky;position:sticky;top:100px;width:100%;margin-top:100px}ionic-appflow-activator ul{display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between;max-width:100%;width:600px;padding-left:10px;padding-right:10px;margin-top:-44px;margin-right:auto;margin-left:auto}ionic-appflow-activator li{width:120px;position:relative;list-style:none}ionic-appflow-activator .progress-ring{position:absolute;top:0;left:calc(50% - 32px);pointer-events:none}ionic-appflow-activator .progress-ring__circle{opacity:0;-webkit-transform:rotate(-90deg);transform:rotate(-90deg);-webkit-transform-origin:50% 50%;transform-origin:50% 50%}ionic-appflow-activator a{text-align:center;display:block;padding-top:64px;cursor:pointer}ionic-appflow-activator a .icon,ionic-appflow-activator a .icon-active{position:absolute;border-radius:50%;height:56px;width:56px;top:4px;left:calc(50% - 28px);-webkit-transition:opacity .2s ease,transform .2s ease;transition:opacity .2s ease,transform .2s ease}ionic-appflow-activator a .icon-active{opacity:0;-webkit-transform:scale(1.1);transform:scale(1.1);-webkit-transition:opacity .2s ease,transform .2s ease;transition:opacity .2s ease,transform .2s ease}ionic-appflow-activator a span{font-size:14px;line-height:22px;text-align:center;letter-spacing:.06em;text-transform:uppercase;font-weight:600;color:#92a1b3;-webkit-transition:color .2s ease;transition:color .2s ease}ionic-appflow-activator .active .icon{-webkit-transform:scale(1.1);transform:scale(1.1);opacity:0}ionic-appflow-activator .active .icon-active{opacity:1;-webkit-transform:scale(1);transform:scale(1)}ionic-appflow-activator .active span{color:#6c89f7}ionic-appflow-activator .app-screenshot{position:relative}ionic-appflow-activator .app-screenshot img{position:absolute;top:0;right:0;bottom:0;left:0;opacity:0;-webkit-transform:scale(1.01);transform:scale(1.01);-webkit-transition:opacity .2s ease,transform .2s ease;transition:opacity .2s ease,transform .2s ease}ionic-appflow-activator .app-screenshot img.active{opacity:1;-webkit-transform:none;transform:none}\\@-webkit-keyframes full-circle{to{stroke-dashoffset:0}}\\@keyframes full-circle{to{stroke-dashoffset:0}}\"; }\r\n}\n\nexport { IonicAppflowActivator };\n"
  },
  {
    "path": "content/js/stencil/esm/es2017/build/hclgi8iu.sc.entry.js",
    "content": "import { h } from '../ionic-site-components.core.js';\n\n/*!\n * VERSION: 2.1.2\n * DATE: 2019-03-01\n * UPDATES AND DOCS AT: http://greensock.com\n *\n * @license Copyright (c) 2008-2019, GreenSock. All rights reserved.\n * This work is subject to the terms at http://greensock.com/standard-license or for\n * Club GreenSock members, the software agreement that was issued with your membership.\n *\n * @author: Jack Doyle, jack@greensock.com\n */\n/* eslint-disable */\n\n/* ES6 changes:\n\t- declare and export _gsScope at top.\n\t- set var TweenLite = the result of the main function\n\t- export default TweenLite at the bottom\n\t- return TweenLite at the bottom of the main function\n\t- pass in _gsScope as the first parameter of the main function (which is actually at the bottom)\n\t- remove the \"export to multiple environments\" in Definition().\n */\nvar _gsScope = (typeof(window) !== \"undefined\") ? window : (typeof(module) !== \"undefined\" && module.exports && typeof(global) !== \"undefined\") ? global : undefined || {};\n\nvar TweenLite = (function(window) {\n\t\tvar _exports = {},\n\t\t\t_doc = window.document,\n\t\t\t_globals = window.GreenSockGlobals = window.GreenSockGlobals || window;\n\t\tif (_globals.TweenLite) {\n\t\t\treturn _globals.TweenLite; //in case the core set of classes is already loaded, don't instantiate twice.\n\t\t}\n\t\tvar _namespace = function(ns) {\n\t\t\t\tvar a = ns.split(\".\"),\n\t\t\t\t\tp = _globals, i;\n\t\t\t\tfor (i = 0; i < a.length; i++) {\n\t\t\t\t\tp[a[i]] = p = p[a[i]] || {};\n\t\t\t\t}\n\t\t\t\treturn p;\n\t\t\t},\n\t\t\tgs = _namespace(\"com.greensock\"),\n\t\t\t_tinyNum = 0.00000001,\n\t\t\t_slice = function(a) { //don't use Array.prototype.slice.call(target, 0) because that doesn't work in IE8 with a NodeList that's returned by querySelectorAll()\n\t\t\t\tvar b = [],\n\t\t\t\t\tl = a.length,\n\t\t\t\t\ti;\n\t\t\t\tfor (i = 0; i !== l; b.push(a[i++])) {}\n\t\t\t\treturn b;\n\t\t\t},\n\t\t\t_emptyFunc = function() {},\n\t\t\t_isArray = (function() { //works around issues in iframe environments where the Array global isn't shared, thus if the object originates in a different window/iframe, \"(obj instanceof Array)\" will evaluate false. We added some speed optimizations to avoid Object.prototype.toString.call() unless it's absolutely necessary because it's VERY slow (like 20x slower)\n\t\t\t\tvar toString = Object.prototype.toString,\n\t\t\t\t\tarray = toString.call([]);\n\t\t\t\treturn function(obj) {\n\t\t\t\t\treturn obj != null && (obj instanceof Array || (typeof(obj) === \"object\" && !!obj.push && toString.call(obj) === array));\n\t\t\t\t};\n\t\t\t}()),\n\t\t\ta, i, p, _ticker, _tickerActive,\n\t\t\t_defLookup = {},\n\n\t\t\t/**\n\t\t\t * @constructor\n\t\t\t * Defines a GreenSock class, optionally with an array of dependencies that must be instantiated first and passed into the definition.\n\t\t\t * This allows users to load GreenSock JS files in any order even if they have interdependencies (like CSSPlugin extends TweenPlugin which is\n\t\t\t * inside TweenLite.js, but if CSSPlugin is loaded first, it should wait to run its code until TweenLite.js loads and instantiates TweenPlugin\n\t\t\t * and then pass TweenPlugin to CSSPlugin's definition). This is all done automatically and internally.\n\t\t\t *\n\t\t\t * Every definition will be added to a \"com.greensock\" global object (typically window, but if a window.GreenSockGlobals object is found,\n\t\t\t * it will go there as of v1.7). For example, TweenLite will be found at window.com.greensock.TweenLite and since it's a global class that should be available anywhere,\n\t\t\t * it is ALSO referenced at window.TweenLite. However some classes aren't considered global, like the base com.greensock.core.Animation class, so\n\t\t\t * those will only be at the package like window.com.greensock.core.Animation. Again, if you define a GreenSockGlobals object on the window, everything\n\t\t\t * gets tucked neatly inside there instead of on the window directly. This allows you to do advanced things like load multiple versions of GreenSock\n\t\t\t * files and put them into distinct objects (imagine a banner ad uses a newer version but the main site uses an older one). In that case, you could\n\t\t\t * sandbox the banner one like:\n\t\t\t *\n\t\t\t * <script>\n\t\t\t *     var gs = window.GreenSockGlobals = {}; //the newer version we're about to load could now be referenced in a \"gs\" object, like gs.TweenLite.to(...). Use whatever alias you want as long as it's unique, \"gs\" or \"banner\" or whatever.\n\t\t\t * </script>\n\t\t\t * <script src=\"js/greensock/v1.7/TweenMax.js\"></script>\n\t\t\t * <script>\n\t\t\t *     window.GreenSockGlobals = window._gsQueue = window._gsDefine = null; //reset it back to null (along with the special _gsQueue variable) so that the next load of TweenMax affects the window and we can reference things directly like TweenLite.to(...)\n\t\t\t * </script>\n\t\t\t * <script src=\"js/greensock/v1.6/TweenMax.js\"></script>\n\t\t\t * <script>\n\t\t\t *     gs.TweenLite.to(...); //would use v1.7\n\t\t\t *     TweenLite.to(...); //would use v1.6\n\t\t\t * </script>\n\t\t\t *\n\t\t\t * @param {!string} ns The namespace of the class definition, leaving off \"com.greensock.\" as that's assumed. For example, \"TweenLite\" or \"plugins.CSSPlugin\" or \"easing.Back\".\n\t\t\t * @param {!Array.<string>} dependencies An array of dependencies (described as their namespaces minus \"com.greensock.\" prefix). For example [\"TweenLite\",\"plugins.TweenPlugin\",\"core.Animation\"]\n\t\t\t * @param {!function():Object} func The function that should be called and passed the resolved dependencies which will return the actual class for this definition.\n\t\t\t * @param {boolean=} global If true, the class will be added to the global scope (typically window unless you define a window.GreenSockGlobals object)\n\t\t\t */\n\t\t\tDefinition = function(ns, dependencies, func, global) {\n\t\t\t\tthis.sc = (_defLookup[ns]) ? _defLookup[ns].sc : []; //subclasses\n\t\t\t\t_defLookup[ns] = this;\n\t\t\t\tthis.gsClass = null;\n\t\t\t\tthis.func = func;\n\t\t\t\tvar _classes = [];\n\t\t\t\tthis.check = function(init) {\n\t\t\t\t\tvar i = dependencies.length,\n\t\t\t\t\t\tmissing = i,\n\t\t\t\t\t\tcur, a, n, cl;\n\t\t\t\t\twhile (--i > -1) {\n\t\t\t\t\t\tif ((cur = _defLookup[dependencies[i]] || new Definition(dependencies[i], [])).gsClass) {\n\t\t\t\t\t\t\t_classes[i] = cur.gsClass;\n\t\t\t\t\t\t\tmissing--;\n\t\t\t\t\t\t} else if (init) {\n\t\t\t\t\t\t\tcur.sc.push(this);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (missing === 0 && func) {\n\t\t\t\t\t\ta = (\"com.greensock.\" + ns).split(\".\");\n\t\t\t\t\t\tn = a.pop();\n\t\t\t\t\t\tcl = _namespace(a.join(\".\"))[n] = this.gsClass = func.apply(func, _classes);\n\n\t\t\t\t\t\t//exports to multiple environments\n\t\t\t\t\t\tif (global) {\n\t\t\t\t\t\t\t_globals[n] = _exports[n] = cl; //provides a way to avoid global namespace pollution. By default, the main classes like TweenLite, Power1, Strong, etc. are added to window unless a GreenSockGlobals is defined. So if you want to have things added to a custom object instead, just do something like window.GreenSockGlobals = {} before loading any GreenSock files. You can even set up an alias like window.GreenSockGlobals = windows.gs = {} so that you can access everything like gs.TweenLite. Also remember that ALL classes are added to the window.com.greensock object (in their respective packages, like com.greensock.easing.Power1, com.greensock.TweenLite, etc.)\n\t\t\t\t\t\t\t/*\n\t\t\t\t\t\t\tif (typeof(module) !== \"undefined\" && module.exports) { //node\n\t\t\t\t\t\t\t\tif (ns === moduleName) {\n\t\t\t\t\t\t\t\t\tmodule.exports = _exports[moduleName] = cl;\n\t\t\t\t\t\t\t\t\tfor (i in _exports) {\n\t\t\t\t\t\t\t\t\t\tcl[i] = _exports[i];\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t} else if (_exports[moduleName]) {\n\t\t\t\t\t\t\t\t\t_exports[moduleName][n] = cl;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else if (typeof(define) === \"function\" && define.amd){ //AMD\n\t\t\t\t\t\t\t\tdefine((window.GreenSockAMDPath ? window.GreenSockAMDPath + \"/\" : \"\") + ns.split(\".\").pop(), [], function() { return cl; });\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t*/\n\t\t\t\t\t\t}\n\t\t\t\t\t\tfor (i = 0; i < this.sc.length; i++) {\n\t\t\t\t\t\t\tthis.sc[i].check();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t\tthis.check(true);\n\t\t\t},\n\n\t\t\t//used to create Definition instances (which basically registers a class that has dependencies).\n\t\t\t_gsDefine = window._gsDefine = function(ns, dependencies, func, global) {\n\t\t\t\treturn new Definition(ns, dependencies, func, global);\n\t\t\t},\n\n\t\t\t//a quick way to create a class that doesn't have any dependencies. Returns the class, but first registers it in the GreenSock namespace so that other classes can grab it (other classes might be dependent on the class).\n\t\t\t_class = gs._class = function(ns, func, global) {\n\t\t\t\tfunc = func || function() {};\n\t\t\t\t_gsDefine(ns, [], function(){ return func; }, global);\n\t\t\t\treturn func;\n\t\t\t};\n\n\t\t_gsDefine.globals = _globals;\n\n\n\n/*\n * ----------------------------------------------------------------\n * Ease\n * ----------------------------------------------------------------\n */\n\t\tvar _baseParams = [0, 0, 1, 1],\n\t\t\tEase = _class(\"easing.Ease\", function(func, extraParams, type, power) {\n\t\t\t\tthis._func = func;\n\t\t\t\tthis._type = type || 0;\n\t\t\t\tthis._power = power || 0;\n\t\t\t\tthis._params = extraParams ? _baseParams.concat(extraParams) : _baseParams;\n\t\t\t}, true),\n\t\t\t_easeMap = Ease.map = {},\n\t\t\t_easeReg = Ease.register = function(ease, names, types, create) {\n\t\t\t\tvar na = names.split(\",\"),\n\t\t\t\t\ti = na.length,\n\t\t\t\t\tta = (types || \"easeIn,easeOut,easeInOut\").split(\",\"),\n\t\t\t\t\te, name, j, type;\n\t\t\t\twhile (--i > -1) {\n\t\t\t\t\tname = na[i];\n\t\t\t\t\te = create ? _class(\"easing.\"+name, null, true) : gs.easing[name] || {};\n\t\t\t\t\tj = ta.length;\n\t\t\t\t\twhile (--j > -1) {\n\t\t\t\t\t\ttype = ta[j];\n\t\t\t\t\t\t_easeMap[name + \".\" + type] = _easeMap[type + name] = e[type] = ease.getRatio ? ease : ease[type] || new ease();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\n\t\tp = Ease.prototype;\n\t\tp._calcEnd = false;\n\t\tp.getRatio = function(p) {\n\t\t\tif (this._func) {\n\t\t\t\tthis._params[0] = p;\n\t\t\t\treturn this._func.apply(null, this._params);\n\t\t\t}\n\t\t\tvar t = this._type,\n\t\t\t\tpw = this._power,\n\t\t\t\tr = (t === 1) ? 1 - p : (t === 2) ? p : (p < 0.5) ? p * 2 : (1 - p) * 2;\n\t\t\tif (pw === 1) {\n\t\t\t\tr *= r;\n\t\t\t} else if (pw === 2) {\n\t\t\t\tr *= r * r;\n\t\t\t} else if (pw === 3) {\n\t\t\t\tr *= r * r * r;\n\t\t\t} else if (pw === 4) {\n\t\t\t\tr *= r * r * r * r;\n\t\t\t}\n\t\t\treturn (t === 1) ? 1 - r : (t === 2) ? r : (p < 0.5) ? r / 2 : 1 - (r / 2);\n\t\t};\n\n\t\t//create all the standard eases like Linear, Quad, Cubic, Quart, Quint, Strong, Power0, Power1, Power2, Power3, and Power4 (each with easeIn, easeOut, and easeInOut)\n\t\ta = [\"Linear\",\"Quad\",\"Cubic\",\"Quart\",\"Quint,Strong\"];\n\t\ti = a.length;\n\t\twhile (--i > -1) {\n\t\t\tp = a[i]+\",Power\"+i;\n\t\t\t_easeReg(new Ease(null,null,1,i), p, \"easeOut\", true);\n\t\t\t_easeReg(new Ease(null,null,2,i), p, \"easeIn\" + ((i === 0) ? \",easeNone\" : \"\"));\n\t\t\t_easeReg(new Ease(null,null,3,i), p, \"easeInOut\");\n\t\t}\n\t\t_easeMap.linear = gs.easing.Linear.easeIn;\n\t\t_easeMap.swing = gs.easing.Quad.easeInOut; //for jQuery folks\n\n\n/*\n * ----------------------------------------------------------------\n * EventDispatcher\n * ----------------------------------------------------------------\n */\n\t\tvar EventDispatcher = _class(\"events.EventDispatcher\", function(target) {\n\t\t\tthis._listeners = {};\n\t\t\tthis._eventTarget = target || this;\n\t\t});\n\t\tp = EventDispatcher.prototype;\n\n\t\tp.addEventListener = function(type, callback, scope, useParam, priority) {\n\t\t\tpriority = priority || 0;\n\t\t\tvar list = this._listeners[type],\n\t\t\t\tindex = 0,\n\t\t\t\tlistener, i;\n\t\t\tif (this === _ticker && !_tickerActive) {\n\t\t\t\t_ticker.wake();\n\t\t\t}\n\t\t\tif (list == null) {\n\t\t\t\tthis._listeners[type] = list = [];\n\t\t\t}\n\t\t\ti = list.length;\n\t\t\twhile (--i > -1) {\n\t\t\t\tlistener = list[i];\n\t\t\t\tif (listener.c === callback && listener.s === scope) {\n\t\t\t\t\tlist.splice(i, 1);\n\t\t\t\t} else if (index === 0 && listener.pr < priority) {\n\t\t\t\t\tindex = i + 1;\n\t\t\t\t}\n\t\t\t}\n\t\t\tlist.splice(index, 0, {c:callback, s:scope, up:useParam, pr:priority});\n\t\t};\n\n\t\tp.removeEventListener = function(type, callback) {\n\t\t\tvar list = this._listeners[type], i;\n\t\t\tif (list) {\n\t\t\t\ti = list.length;\n\t\t\t\twhile (--i > -1) {\n\t\t\t\t\tif (list[i].c === callback) {\n\t\t\t\t\t\tlist.splice(i, 1);\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\tp.dispatchEvent = function(type) {\n\t\t\tvar list = this._listeners[type],\n\t\t\t\ti, t, listener;\n\t\t\tif (list) {\n\t\t\t\ti = list.length;\n\t\t\t\tif (i > 1) {\n\t\t\t\t\tlist = list.slice(0); //in case addEventListener() is called from within a listener/callback (otherwise the index could change, resulting in a skip)\n\t\t\t\t}\n\t\t\t\tt = this._eventTarget;\n\t\t\t\twhile (--i > -1) {\n\t\t\t\t\tlistener = list[i];\n\t\t\t\t\tif (listener) {\n\t\t\t\t\t\tif (listener.up) {\n\t\t\t\t\t\t\tlistener.c.call(listener.s || t, {type:type, target:t});\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tlistener.c.call(listener.s || t);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\n/*\n * ----------------------------------------------------------------\n * Ticker\n * ----------------------------------------------------------------\n */\n \t\tvar _reqAnimFrame = window.requestAnimationFrame,\n\t\t\t_cancelAnimFrame = window.cancelAnimationFrame,\n\t\t\t_getTime = Date.now || function() {return new Date().getTime();},\n\t\t\t_lastUpdate = _getTime();\n\n\t\t//now try to determine the requestAnimationFrame and cancelAnimationFrame functions and if none are found, we'll use a setTimeout()/clearTimeout() polyfill.\n\t\ta = [\"ms\",\"moz\",\"webkit\",\"o\"];\n\t\ti = a.length;\n\t\twhile (--i > -1 && !_reqAnimFrame) {\n\t\t\t_reqAnimFrame = window[a[i] + \"RequestAnimationFrame\"];\n\t\t\t_cancelAnimFrame = window[a[i] + \"CancelAnimationFrame\"] || window[a[i] + \"CancelRequestAnimationFrame\"];\n\t\t}\n\n\t\t_class(\"Ticker\", function(fps, useRAF) {\n\t\t\tvar _self = this,\n\t\t\t\t_startTime = _getTime(),\n\t\t\t\t_useRAF = (useRAF !== false && _reqAnimFrame) ? \"auto\" : false,\n\t\t\t\t_lagThreshold = 500,\n\t\t\t\t_adjustedLag = 33,\n\t\t\t\t_tickWord = \"tick\", //helps reduce gc burden\n\t\t\t\t_fps, _req, _id, _gap, _nextTime,\n\t\t\t\t_tick = function(manual) {\n\t\t\t\t\tvar elapsed = _getTime() - _lastUpdate,\n\t\t\t\t\t\toverlap, dispatch;\n\t\t\t\t\tif (elapsed > _lagThreshold) {\n\t\t\t\t\t\t_startTime += elapsed - _adjustedLag;\n\t\t\t\t\t}\n\t\t\t\t\t_lastUpdate += elapsed;\n\t\t\t\t\t_self.time = (_lastUpdate - _startTime) / 1000;\n\t\t\t\t\toverlap = _self.time - _nextTime;\n\t\t\t\t\tif (!_fps || overlap > 0 || manual === true) {\n\t\t\t\t\t\t_self.frame++;\n\t\t\t\t\t\t_nextTime += overlap + (overlap >= _gap ? 0.004 : _gap - overlap);\n\t\t\t\t\t\tdispatch = true;\n\t\t\t\t\t}\n\t\t\t\t\tif (manual !== true) { //make sure the request is made before we dispatch the \"tick\" event so that timing is maintained. Otherwise, if processing the \"tick\" requires a bunch of time (like 15ms) and we're using a setTimeout() that's based on 16.7ms, it'd technically take 31.7ms between frames otherwise.\n\t\t\t\t\t\t_id = _req(_tick);\n\t\t\t\t\t}\n\t\t\t\t\tif (dispatch) {\n\t\t\t\t\t\t_self.dispatchEvent(_tickWord);\n\t\t\t\t\t}\n\t\t\t\t};\n\n\t\t\tEventDispatcher.call(_self);\n\t\t\t_self.time = _self.frame = 0;\n\t\t\t_self.tick = function() {\n\t\t\t\t_tick(true);\n\t\t\t};\n\n\t\t\t_self.lagSmoothing = function(threshold, adjustedLag) {\n\t\t\t\tif (!arguments.length) { //if lagSmoothing() is called with no arguments, treat it like a getter that returns a boolean indicating if it's enabled or not. This is purposely undocumented and is for internal use.\n\t\t\t\t\treturn (_lagThreshold < 1 / _tinyNum);\n\t\t\t\t}\n\t\t\t\t_lagThreshold = threshold || (1 / _tinyNum); //zero should be interpreted as basically unlimited\n\t\t\t\t_adjustedLag = Math.min(adjustedLag, _lagThreshold, 0);\n\t\t\t};\n\n\t\t\t_self.sleep = function() {\n\t\t\t\tif (_id == null) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tif (!_useRAF || !_cancelAnimFrame) {\n\t\t\t\t\tclearTimeout(_id);\n\t\t\t\t} else {\n\t\t\t\t\t_cancelAnimFrame(_id);\n\t\t\t\t}\n\t\t\t\t_req = _emptyFunc;\n\t\t\t\t_id = null;\n\t\t\t\tif (_self === _ticker) {\n\t\t\t\t\t_tickerActive = false;\n\t\t\t\t}\n\t\t\t};\n\n\t\t\t_self.wake = function(seamless) {\n\t\t\t\tif (_id !== null) {\n\t\t\t\t\t_self.sleep();\n\t\t\t\t} else if (seamless) {\n\t\t\t\t\t_startTime += -_lastUpdate + (_lastUpdate = _getTime());\n\t\t\t\t} else if (_self.frame > 10) { //don't trigger lagSmoothing if we're just waking up, and make sure that at least 10 frames have elapsed because of the iOS bug that we work around below with the 1.5-second setTimout().\n\t\t\t\t\t_lastUpdate = _getTime() - _lagThreshold + 5;\n\t\t\t\t}\n\t\t\t\t_req = (_fps === 0) ? _emptyFunc : (!_useRAF || !_reqAnimFrame) ? function(f) { return setTimeout(f, ((_nextTime - _self.time) * 1000 + 1) | 0); } : _reqAnimFrame;\n\t\t\t\tif (_self === _ticker) {\n\t\t\t\t\t_tickerActive = true;\n\t\t\t\t}\n\t\t\t\t_tick(2);\n\t\t\t};\n\n\t\t\t_self.fps = function(value) {\n\t\t\t\tif (!arguments.length) {\n\t\t\t\t\treturn _fps;\n\t\t\t\t}\n\t\t\t\t_fps = value;\n\t\t\t\t_gap = 1 / (_fps || 60);\n\t\t\t\t_nextTime = this.time + _gap;\n\t\t\t\t_self.wake();\n\t\t\t};\n\n\t\t\t_self.useRAF = function(value) {\n\t\t\t\tif (!arguments.length) {\n\t\t\t\t\treturn _useRAF;\n\t\t\t\t}\n\t\t\t\t_self.sleep();\n\t\t\t\t_useRAF = value;\n\t\t\t\t_self.fps(_fps);\n\t\t\t};\n\t\t\t_self.fps(fps);\n\n\t\t\t//a bug in iOS 6 Safari occasionally prevents the requestAnimationFrame from working initially, so we use a 1.5-second timeout that automatically falls back to setTimeout() if it senses this condition.\n\t\t\tsetTimeout(function() {\n\t\t\t\tif (_useRAF === \"auto\" && _self.frame < 5 && (_doc || {}).visibilityState !== \"hidden\") {\n\t\t\t\t\t_self.useRAF(false);\n\t\t\t\t}\n\t\t\t}, 1500);\n\t\t});\n\n\t\tp = gs.Ticker.prototype = new gs.events.EventDispatcher();\n\t\tp.constructor = gs.Ticker;\n\n\n/*\n * ----------------------------------------------------------------\n * Animation\n * ----------------------------------------------------------------\n */\n\t\tvar Animation = _class(\"core.Animation\", function(duration, vars) {\n\t\t\t\tthis.vars = vars = vars || {};\n\t\t\t\tthis._duration = this._totalDuration = duration || 0;\n\t\t\t\tthis._delay = Number(vars.delay) || 0;\n\t\t\t\tthis._timeScale = 1;\n\t\t\t\tthis._active = !!vars.immediateRender;\n\t\t\t\tthis.data = vars.data;\n\t\t\t\tthis._reversed = !!vars.reversed;\n\n\t\t\t\tif (!_rootTimeline) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tif (!_tickerActive) { //some browsers (like iOS 6 Safari) shut down JavaScript execution when the tab is disabled and they [occasionally] neglect to start up requestAnimationFrame again when returning - this code ensures that the engine starts up again properly.\n\t\t\t\t\t_ticker.wake();\n\t\t\t\t}\n\n\t\t\t\tvar tl = this.vars.useFrames ? _rootFramesTimeline : _rootTimeline;\n\t\t\t\ttl.add(this, tl._time);\n\n\t\t\t\tif (this.vars.paused) {\n\t\t\t\t\tthis.paused(true);\n\t\t\t\t}\n\t\t\t});\n\n\t\t_ticker = Animation.ticker = new gs.Ticker();\n\t\tp = Animation.prototype;\n\t\tp._dirty = p._gc = p._initted = p._paused = false;\n\t\tp._totalTime = p._time = 0;\n\t\tp._rawPrevTime = -1;\n\t\tp._next = p._last = p._onUpdate = p._timeline = p.timeline = null;\n\t\tp._paused = false;\n\n\n\t\t//some browsers (like iOS) occasionally drop the requestAnimationFrame event when the user switches to a different tab and then comes back again, so we use a 2-second setTimeout() to sense if/when that condition occurs and then wake() the ticker.\n\t\tvar _checkTimeout = function() {\n\t\t\t\tif (_tickerActive && _getTime() - _lastUpdate > 2000 && ((_doc || {}).visibilityState !== \"hidden\" || !_ticker.lagSmoothing())) { //note: if the tab is hidden, we should still wake if lagSmoothing has been disabled.\n\t\t\t\t\t_ticker.wake();\n\t\t\t\t}\n\t\t\t\tvar t = setTimeout(_checkTimeout, 2000);\n\t\t\t\tif (t.unref) {\n\t\t\t\t\t// allows a node process to exit even if the timeout’s callback hasn't been invoked. Without it, the node process could hang as this function is called every two seconds.\n\t\t\t\t\tt.unref();\n\t\t\t\t}\n\t\t\t};\n\t\t_checkTimeout();\n\n\n\t\tp.play = function(from, suppressEvents) {\n\t\t\tif (from != null) {\n\t\t\t\tthis.seek(from, suppressEvents);\n\t\t\t}\n\t\t\treturn this.reversed(false).paused(false);\n\t\t};\n\n\t\tp.pause = function(atTime, suppressEvents) {\n\t\t\tif (atTime != null) {\n\t\t\t\tthis.seek(atTime, suppressEvents);\n\t\t\t}\n\t\t\treturn this.paused(true);\n\t\t};\n\n\t\tp.resume = function(from, suppressEvents) {\n\t\t\tif (from != null) {\n\t\t\t\tthis.seek(from, suppressEvents);\n\t\t\t}\n\t\t\treturn this.paused(false);\n\t\t};\n\n\t\tp.seek = function(time, suppressEvents) {\n\t\t\treturn this.totalTime(Number(time), suppressEvents !== false);\n\t\t};\n\n\t\tp.restart = function(includeDelay, suppressEvents) {\n\t\t\treturn this.reversed(false).paused(false).totalTime(includeDelay ? -this._delay : 0, (suppressEvents !== false), true);\n\t\t};\n\n\t\tp.reverse = function(from, suppressEvents) {\n\t\t\tif (from != null) {\n\t\t\t\tthis.seek((from || this.totalDuration()), suppressEvents);\n\t\t\t}\n\t\t\treturn this.reversed(true).paused(false);\n\t\t};\n\n\t\tp.render = function(time, suppressEvents, force) {\n\t\t\t//stub - we override this method in subclasses.\n\t\t};\n\n\t\tp.invalidate = function() {\n\t\t\tthis._time = this._totalTime = 0;\n\t\t\tthis._initted = this._gc = false;\n\t\t\tthis._rawPrevTime = -1;\n\t\t\tif (this._gc || !this.timeline) {\n\t\t\t\tthis._enabled(true);\n\t\t\t}\n\t\t\treturn this;\n\t\t};\n\n\t\tp.isActive = function() {\n\t\t\tvar tl = this._timeline, //the 2 root timelines won't have a _timeline; they're always active.\n\t\t\t\tstartTime = this._startTime,\n\t\t\t\trawTime;\n\t\t\treturn (!tl || (!this._gc && !this._paused && tl.isActive() && (rawTime = tl.rawTime(true)) >= startTime && rawTime < startTime + this.totalDuration() / this._timeScale - _tinyNum));\n\t\t};\n\n\t\tp._enabled = function (enabled, ignoreTimeline) {\n\t\t\tif (!_tickerActive) {\n\t\t\t\t_ticker.wake();\n\t\t\t}\n\t\t\tthis._gc = !enabled;\n\t\t\tthis._active = this.isActive();\n\t\t\tif (ignoreTimeline !== true) {\n\t\t\t\tif (enabled && !this.timeline) {\n\t\t\t\t\tthis._timeline.add(this, this._startTime - this._delay);\n\t\t\t\t} else if (!enabled && this.timeline) {\n\t\t\t\t\tthis._timeline._remove(this, true);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t};\n\n\n\t\tp._kill = function(vars, target) {\n\t\t\treturn this._enabled(false, false);\n\t\t};\n\n\t\tp.kill = function(vars, target) {\n\t\t\tthis._kill(vars, target);\n\t\t\treturn this;\n\t\t};\n\n\t\tp._uncache = function(includeSelf) {\n\t\t\tvar tween = includeSelf ? this : this.timeline;\n\t\t\twhile (tween) {\n\t\t\t\ttween._dirty = true;\n\t\t\t\ttween = tween.timeline;\n\t\t\t}\n\t\t\treturn this;\n\t\t};\n\n\t\tp._swapSelfInParams = function(params) {\n\t\t\tvar i = params.length,\n\t\t\t\tcopy = params.concat();\n\t\t\twhile (--i > -1) {\n\t\t\t\tif (params[i] === \"{self}\") {\n\t\t\t\t\tcopy[i] = this;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn copy;\n\t\t};\n\n\t\tp._callback = function(type) {\n\t\t\tvar v = this.vars,\n\t\t\t\tcallback = v[type],\n\t\t\t\tparams = v[type + \"Params\"],\n\t\t\t\tscope = v[type + \"Scope\"] || v.callbackScope || this,\n\t\t\t\tl = params ? params.length : 0;\n\t\t\tswitch (l) { //speed optimization; call() is faster than apply() so use it when there are only a few parameters (which is by far most common). Previously we simply did var v = this.vars; v[type].apply(v[type + \"Scope\"] || v.callbackScope || this, v[type + \"Params\"] || _blankArray);\n\t\t\t\tcase 0: callback.call(scope); break;\n\t\t\t\tcase 1: callback.call(scope, params[0]); break;\n\t\t\t\tcase 2: callback.call(scope, params[0], params[1]); break;\n\t\t\t\tdefault: callback.apply(scope, params);\n\t\t\t}\n\t\t};\n\n//----Animation getters/setters --------------------------------------------------------\n\n\t\tp.eventCallback = function(type, callback, params, scope) {\n\t\t\tif ((type || \"\").substr(0,2) === \"on\") {\n\t\t\t\tvar v = this.vars;\n\t\t\t\tif (arguments.length === 1) {\n\t\t\t\t\treturn v[type];\n\t\t\t\t}\n\t\t\t\tif (callback == null) {\n\t\t\t\t\tdelete v[type];\n\t\t\t\t} else {\n\t\t\t\t\tv[type] = callback;\n\t\t\t\t\tv[type + \"Params\"] = (_isArray(params) && params.join(\"\").indexOf(\"{self}\") !== -1) ? this._swapSelfInParams(params) : params;\n\t\t\t\t\tv[type + \"Scope\"] = scope;\n\t\t\t\t}\n\t\t\t\tif (type === \"onUpdate\") {\n\t\t\t\t\tthis._onUpdate = callback;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn this;\n\t\t};\n\n\t\tp.delay = function(value) {\n\t\t\tif (!arguments.length) {\n\t\t\t\treturn this._delay;\n\t\t\t}\n\t\t\tif (this._timeline.smoothChildTiming) {\n\t\t\t\tthis.startTime( this._startTime + value - this._delay );\n\t\t\t}\n\t\t\tthis._delay = value;\n\t\t\treturn this;\n\t\t};\n\n\t\tp.duration = function(value) {\n\t\t\tif (!arguments.length) {\n\t\t\t\tthis._dirty = false;\n\t\t\t\treturn this._duration;\n\t\t\t}\n\t\t\tthis._duration = this._totalDuration = value;\n\t\t\tthis._uncache(true); //true in case it's a TweenMax or TimelineMax that has a repeat - we'll need to refresh the totalDuration.\n\t\t\tif (this._timeline.smoothChildTiming) if (this._time > 0) if (this._time < this._duration) if (value !== 0) {\n\t\t\t\tthis.totalTime(this._totalTime * (value / this._duration), true);\n\t\t\t}\n\t\t\treturn this;\n\t\t};\n\n\t\tp.totalDuration = function(value) {\n\t\t\tthis._dirty = false;\n\t\t\treturn (!arguments.length) ? this._totalDuration : this.duration(value);\n\t\t};\n\n\t\tp.time = function(value, suppressEvents) {\n\t\t\tif (!arguments.length) {\n\t\t\t\treturn this._time;\n\t\t\t}\n\t\t\tif (this._dirty) {\n\t\t\t\tthis.totalDuration();\n\t\t\t}\n\t\t\treturn this.totalTime((value > this._duration) ? this._duration : value, suppressEvents);\n\t\t};\n\n\t\tp.totalTime = function(time, suppressEvents, uncapped) {\n\t\t\tif (!_tickerActive) {\n\t\t\t\t_ticker.wake();\n\t\t\t}\n\t\t\tif (!arguments.length) {\n\t\t\t\treturn this._totalTime;\n\t\t\t}\n\t\t\tif (this._timeline) {\n\t\t\t\tif (time < 0 && !uncapped) {\n\t\t\t\t\ttime += this.totalDuration();\n\t\t\t\t}\n\t\t\t\tif (this._timeline.smoothChildTiming) {\n\t\t\t\t\tif (this._dirty) {\n\t\t\t\t\t\tthis.totalDuration();\n\t\t\t\t\t}\n\t\t\t\t\tvar totalDuration = this._totalDuration,\n\t\t\t\t\t\ttl = this._timeline;\n\t\t\t\t\tif (time > totalDuration && !uncapped) {\n\t\t\t\t\t\ttime = totalDuration;\n\t\t\t\t\t}\n\t\t\t\t\tthis._startTime = (this._paused ? this._pauseTime : tl._time) - ((!this._reversed ? time : totalDuration - time) / this._timeScale);\n\t\t\t\t\tif (!tl._dirty) { //for performance improvement. If the parent's cache is already dirty, it already took care of marking the ancestors as dirty too, so skip the function call here.\n\t\t\t\t\t\tthis._uncache(false);\n\t\t\t\t\t}\n\t\t\t\t\t//in case any of the ancestor timelines had completed but should now be enabled, we should reset their totalTime() which will also ensure that they're lined up properly and enabled. Skip for animations that are on the root (wasteful). Example: a TimelineLite.exportRoot() is performed when there's a paused tween on the root, the export will not complete until that tween is unpaused, but imagine a child gets restarted later, after all [unpaused] tweens have completed. The startTime of that child would get pushed out, but one of the ancestors may have completed.\n\t\t\t\t\tif (tl._timeline) {\n\t\t\t\t\t\twhile (tl._timeline) {\n\t\t\t\t\t\t\tif (tl._timeline._time !== (tl._startTime + tl._totalTime) / tl._timeScale) {\n\t\t\t\t\t\t\t\ttl.totalTime(tl._totalTime, true);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\ttl = tl._timeline;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (this._gc) {\n\t\t\t\t\tthis._enabled(true, false);\n\t\t\t\t}\n\t\t\t\tif (this._totalTime !== time || this._duration === 0) {\n\t\t\t\t\tif (_lazyTweens.length) {\n\t\t\t\t\t\t_lazyRender();\n\t\t\t\t\t}\n\t\t\t\t\tthis.render(time, suppressEvents, false);\n\t\t\t\t\tif (_lazyTweens.length) { //in case rendering caused any tweens to lazy-init, we should render them because typically when someone calls seek() or time() or progress(), they expect an immediate render.\n\t\t\t\t\t\t_lazyRender();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn this;\n\t\t};\n\n\t\tp.progress = p.totalProgress = function(value, suppressEvents) {\n\t\t\tvar duration = this.duration();\n\t\t\treturn (!arguments.length) ? (duration ? this._time / duration : this.ratio) : this.totalTime(duration * value, suppressEvents);\n\t\t};\n\n\t\tp.startTime = function(value) {\n\t\t\tif (!arguments.length) {\n\t\t\t\treturn this._startTime;\n\t\t\t}\n\t\t\tif (value !== this._startTime) {\n\t\t\t\tthis._startTime = value;\n\t\t\t\tif (this.timeline) if (this.timeline._sortChildren) {\n\t\t\t\t\tthis.timeline.add(this, value - this._delay); //ensures that any necessary re-sequencing of Animations in the timeline occurs to make sure the rendering order is correct.\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn this;\n\t\t};\n\n\t\tp.endTime = function(includeRepeats) {\n\t\t\treturn this._startTime + ((includeRepeats != false) ? this.totalDuration() : this.duration()) / this._timeScale;\n\t\t};\n\n\t\tp.timeScale = function(value) {\n\t\t\tif (!arguments.length) {\n\t\t\t\treturn this._timeScale;\n\t\t\t}\n\t\t\tvar pauseTime, t;\n\t\t\tvalue = value || _tinyNum; //can't allow zero because it'll throw the math off\n\t\t\tif (this._timeline && this._timeline.smoothChildTiming) {\n\t\t\t\tpauseTime = this._pauseTime;\n\t\t\t\tt = (pauseTime || pauseTime === 0) ? pauseTime : this._timeline.totalTime();\n\t\t\t\tthis._startTime = t - ((t - this._startTime) * this._timeScale / value);\n\t\t\t}\n\t\t\tthis._timeScale = value;\n\t\t\tt = this.timeline;\n\t\t\twhile (t && t.timeline) { //must update the duration/totalDuration of all ancestor timelines immediately in case in the middle of a render loop, one tween alters another tween's timeScale which shoves its startTime before 0, forcing the parent timeline to shift around and shiftChildren() which could affect that next tween's render (startTime). Doesn't matter for the root timeline though.\n\t\t\t\tt._dirty = true;\n\t\t\t\tt.totalDuration();\n\t\t\t\tt = t.timeline;\n\t\t\t}\n\t\t\treturn this;\n\t\t};\n\n\t\tp.reversed = function(value) {\n\t\t\tif (!arguments.length) {\n\t\t\t\treturn this._reversed;\n\t\t\t}\n\t\t\tif (value != this._reversed) {\n\t\t\t\tthis._reversed = value;\n\t\t\t\tthis.totalTime(((this._timeline && !this._timeline.smoothChildTiming) ? this.totalDuration() - this._totalTime : this._totalTime), true);\n\t\t\t}\n\t\t\treturn this;\n\t\t};\n\n\t\tp.paused = function(value) {\n\t\t\tif (!arguments.length) {\n\t\t\t\treturn this._paused;\n\t\t\t}\n\t\t\tvar tl = this._timeline,\n\t\t\t\traw, elapsed;\n\t\t\tif (value != this._paused) if (tl) {\n\t\t\t\tif (!_tickerActive && !value) {\n\t\t\t\t\t_ticker.wake();\n\t\t\t\t}\n\t\t\t\traw = tl.rawTime();\n\t\t\t\telapsed = raw - this._pauseTime;\n\t\t\t\tif (!value && tl.smoothChildTiming) {\n\t\t\t\t\tthis._startTime += elapsed;\n\t\t\t\t\tthis._uncache(false);\n\t\t\t\t}\n\t\t\t\tthis._pauseTime = value ? raw : null;\n\t\t\t\tthis._paused = value;\n\t\t\t\tthis._active = this.isActive();\n\t\t\t\tif (!value && elapsed !== 0 && this._initted && this.duration()) {\n\t\t\t\t\traw = tl.smoothChildTiming ? this._totalTime : (raw - this._startTime) / this._timeScale;\n\t\t\t\t\tthis.render(raw, (raw === this._totalTime), true); //in case the target's properties changed via some other tween or manual update by the user, we should force a render.\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (this._gc && !value) {\n\t\t\t\tthis._enabled(true, false);\n\t\t\t}\n\t\t\treturn this;\n\t\t};\n\n\n/*\n * ----------------------------------------------------------------\n * SimpleTimeline\n * ----------------------------------------------------------------\n */\n\t\tvar SimpleTimeline = _class(\"core.SimpleTimeline\", function(vars) {\n\t\t\tAnimation.call(this, 0, vars);\n\t\t\tthis.autoRemoveChildren = this.smoothChildTiming = true;\n\t\t});\n\n\t\tp = SimpleTimeline.prototype = new Animation();\n\t\tp.constructor = SimpleTimeline;\n\t\tp.kill()._gc = false;\n\t\tp._first = p._last = p._recent = null;\n\t\tp._sortChildren = false;\n\n\t\tp.add = p.insert = function(child, position, align, stagger) {\n\t\t\tvar prevTween, st;\n\t\t\tchild._startTime = Number(position || 0) + child._delay;\n\t\t\tif (child._paused) if (this !== child._timeline) { //we only adjust the _pauseTime if it wasn't in this timeline already. Remember, sometimes a tween will be inserted again into the same timeline when its startTime is changed so that the tweens in the TimelineLite/Max are re-ordered properly in the linked list (so everything renders in the proper order).\n\t\t\t\tchild._pauseTime = this.rawTime() - (child._timeline.rawTime() - child._pauseTime);\n\t\t\t}\n\t\t\tif (child.timeline) {\n\t\t\t\tchild.timeline._remove(child, true); //removes from existing timeline so that it can be properly added to this one.\n\t\t\t}\n\t\t\tchild.timeline = child._timeline = this;\n\t\t\tif (child._gc) {\n\t\t\t\tchild._enabled(true, true);\n\t\t\t}\n\t\t\tprevTween = this._last;\n\t\t\tif (this._sortChildren) {\n\t\t\t\tst = child._startTime;\n\t\t\t\twhile (prevTween && prevTween._startTime > st) {\n\t\t\t\t\tprevTween = prevTween._prev;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (prevTween) {\n\t\t\t\tchild._next = prevTween._next;\n\t\t\t\tprevTween._next = child;\n\t\t\t} else {\n\t\t\t\tchild._next = this._first;\n\t\t\t\tthis._first = child;\n\t\t\t}\n\t\t\tif (child._next) {\n\t\t\t\tchild._next._prev = child;\n\t\t\t} else {\n\t\t\t\tthis._last = child;\n\t\t\t}\n\t\t\tchild._prev = prevTween;\n\t\t\tthis._recent = child;\n\t\t\tif (this._timeline) {\n\t\t\t\tthis._uncache(true);\n\t\t\t}\n\t\t\treturn this;\n\t\t};\n\n\t\tp._remove = function(tween, skipDisable) {\n\t\t\tif (tween.timeline === this) {\n\t\t\t\tif (!skipDisable) {\n\t\t\t\t\ttween._enabled(false, true);\n\t\t\t\t}\n\n\t\t\t\tif (tween._prev) {\n\t\t\t\t\ttween._prev._next = tween._next;\n\t\t\t\t} else if (this._first === tween) {\n\t\t\t\t\tthis._first = tween._next;\n\t\t\t\t}\n\t\t\t\tif (tween._next) {\n\t\t\t\t\ttween._next._prev = tween._prev;\n\t\t\t\t} else if (this._last === tween) {\n\t\t\t\t\tthis._last = tween._prev;\n\t\t\t\t}\n\t\t\t\ttween._next = tween._prev = tween.timeline = null;\n\t\t\t\tif (tween === this._recent) {\n\t\t\t\t\tthis._recent = this._last;\n\t\t\t\t}\n\n\t\t\t\tif (this._timeline) {\n\t\t\t\t\tthis._uncache(true);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn this;\n\t\t};\n\n\t\tp.render = function(time, suppressEvents, force) {\n\t\t\tvar tween = this._first,\n\t\t\t\tnext;\n\t\t\tthis._totalTime = this._time = this._rawPrevTime = time;\n\t\t\twhile (tween) {\n\t\t\t\tnext = tween._next; //record it here because the value could change after rendering...\n\t\t\t\tif (tween._active || (time >= tween._startTime && !tween._paused && !tween._gc)) {\n\t\t\t\t\tif (!tween._reversed) {\n\t\t\t\t\t\ttween.render((time - tween._startTime) * tween._timeScale, suppressEvents, force);\n\t\t\t\t\t} else {\n\t\t\t\t\t\ttween.render(((!tween._dirty) ? tween._totalDuration : tween.totalDuration()) - ((time - tween._startTime) * tween._timeScale), suppressEvents, force);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\ttween = next;\n\t\t\t}\n\t\t};\n\n\t\tp.rawTime = function() {\n\t\t\tif (!_tickerActive) {\n\t\t\t\t_ticker.wake();\n\t\t\t}\n\t\t\treturn this._totalTime;\n\t\t};\n\n/*\n * ----------------------------------------------------------------\n * TweenLite\n * ----------------------------------------------------------------\n */\n\t\tvar TweenLite = _class(\"TweenLite\", function(target, duration, vars) {\n\t\t\t\tAnimation.call(this, duration, vars);\n\t\t\t\tthis.render = TweenLite.prototype.render; //speed optimization (avoid prototype lookup on this \"hot\" method)\n\n\t\t\t\tif (target == null) {\n\t\t\t\t\tthrow \"Cannot tween a null target.\";\n\t\t\t\t}\n\n\t\t\t\tthis.target = target = (typeof(target) !== \"string\") ? target : TweenLite.selector(target) || target;\n\n\t\t\t\tvar isSelector = (target.jquery || (target.length && target !== window && target[0] && (target[0] === window || (target[0].nodeType && target[0].style && !target.nodeType)))),\n\t\t\t\t\toverwrite = this.vars.overwrite,\n\t\t\t\t\ti, targ, targets;\n\n\t\t\t\tthis._overwrite = overwrite = (overwrite == null) ? _overwriteLookup[TweenLite.defaultOverwrite] : (typeof(overwrite) === \"number\") ? overwrite >> 0 : _overwriteLookup[overwrite];\n\n\t\t\t\tif ((isSelector || target instanceof Array || (target.push && _isArray(target))) && typeof(target[0]) !== \"number\") {\n\t\t\t\t\tthis._targets = targets = _slice(target);  //don't use Array.prototype.slice.call(target, 0) because that doesn't work in IE8 with a NodeList that's returned by querySelectorAll()\n\t\t\t\t\tthis._propLookup = [];\n\t\t\t\t\tthis._siblings = [];\n\t\t\t\t\tfor (i = 0; i < targets.length; i++) {\n\t\t\t\t\t\ttarg = targets[i];\n\t\t\t\t\t\tif (!targ) {\n\t\t\t\t\t\t\ttargets.splice(i--, 1);\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t} else if (typeof(targ) === \"string\") {\n\t\t\t\t\t\t\ttarg = targets[i--] = TweenLite.selector(targ); //in case it's an array of strings\n\t\t\t\t\t\t\tif (typeof(targ) === \"string\") {\n\t\t\t\t\t\t\t\ttargets.splice(i+1, 1); //to avoid an endless loop (can't imagine why the selector would return a string, but just in case)\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t} else if (targ.length && targ !== window && targ[0] && (targ[0] === window || (targ[0].nodeType && targ[0].style && !targ.nodeType))) { //in case the user is passing in an array of selector objects (like jQuery objects), we need to check one more level and pull things out if necessary. Also note that <select> elements pass all the criteria regarding length and the first child having style, so we must also check to ensure the target isn't an HTML node itself.\n\t\t\t\t\t\t\ttargets.splice(i--, 1);\n\t\t\t\t\t\t\tthis._targets = targets = targets.concat(_slice(targ));\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tthis._siblings[i] = _register(targ, this, false);\n\t\t\t\t\t\tif (overwrite === 1) if (this._siblings[i].length > 1) {\n\t\t\t\t\t\t\t_applyOverwrite(targ, this, null, 1, this._siblings[i]);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\t\t\t\t\tthis._propLookup = {};\n\t\t\t\t\tthis._siblings = _register(target, this, false);\n\t\t\t\t\tif (overwrite === 1) if (this._siblings.length > 1) {\n\t\t\t\t\t\t_applyOverwrite(target, this, null, 1, this._siblings);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (this.vars.immediateRender || (duration === 0 && this._delay === 0 && this.vars.immediateRender !== false)) {\n\t\t\t\t\tthis._time = -_tinyNum; //forces a render without having to set the render() \"force\" parameter to true because we want to allow lazying by default (using the \"force\" parameter always forces an immediate full render)\n\t\t\t\t\tthis.render(Math.min(0, -this._delay)); //in case delay is negative\n\t\t\t\t}\n\t\t\t}, true),\n\t\t\t_isSelector = function(v) {\n\t\t\t\treturn (v && v.length && v !== window && v[0] && (v[0] === window || (v[0].nodeType && v[0].style && !v.nodeType))); //we cannot check \"nodeType\" if the target is window from within an iframe, otherwise it will trigger a security error in some browsers like Firefox.\n\t\t\t},\n\t\t\t_autoCSS = function(vars, target) {\n\t\t\t\tvar css = {},\n\t\t\t\t\tp;\n\t\t\t\tfor (p in vars) {\n\t\t\t\t\tif (!_reservedProps[p] && (!(p in target) || p === \"transform\" || p === \"x\" || p === \"y\" || p === \"width\" || p === \"height\" || p === \"className\" || p === \"border\") && (!_plugins[p] || (_plugins[p] && _plugins[p]._autoCSS))) { //note: <img> elements contain read-only \"x\" and \"y\" properties. We should also prioritize editing css width/height rather than the element's properties.\n\t\t\t\t\t\tcss[p] = vars[p];\n\t\t\t\t\t\tdelete vars[p];\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tvars.css = css;\n\t\t\t};\n\n\t\tp = TweenLite.prototype = new Animation();\n\t\tp.constructor = TweenLite;\n\t\tp.kill()._gc = false;\n\n//----TweenLite defaults, overwrite management, and root updates ----------------------------------------------------\n\n\t\tp.ratio = 0;\n\t\tp._firstPT = p._targets = p._overwrittenProps = p._startAt = null;\n\t\tp._notifyPluginsOfEnabled = p._lazy = false;\n\n\t\tTweenLite.version = \"2.1.2\";\n\t\tTweenLite.defaultEase = p._ease = new Ease(null, null, 1, 1);\n\t\tTweenLite.defaultOverwrite = \"auto\";\n\t\tTweenLite.ticker = _ticker;\n\t\tTweenLite.autoSleep = 120;\n\t\tTweenLite.lagSmoothing = function(threshold, adjustedLag) {\n\t\t\t_ticker.lagSmoothing(threshold, adjustedLag);\n\t\t};\n\n\t\tTweenLite.selector = window.$ || window.jQuery || function(e) {\n\t\t\tvar selector = window.$ || window.jQuery;\n\t\t\tif (selector) {\n\t\t\t\tTweenLite.selector = selector;\n\t\t\t\treturn selector(e);\n\t\t\t}\n\t\t\tif (!_doc) { //in some dev environments (like Angular 6), GSAP gets loaded before the document is defined! So re-query it here if/when necessary.\n\t\t\t\t_doc = window.document;\n\t\t\t}\n\t\t\treturn (!_doc) ? e : (_doc.querySelectorAll ? _doc.querySelectorAll(e) : _doc.getElementById((e.charAt(0) === \"#\") ? e.substr(1) : e));\n\t\t};\n\n\t\tvar _lazyTweens = [],\n\t\t\t_lazyLookup = {},\n\t\t\t_numbersExp = /(?:(-|-=|\\+=)?\\d*\\.?\\d*(?:e[\\-+]?\\d+)?)[0-9]/ig,\n\t\t\t_relExp = /[\\+-]=-?[\\.\\d]/,\n\t\t\t//_nonNumbersExp = /(?:([\\-+](?!(\\d|=)))|[^\\d\\-+=e]|(e(?![\\-+][\\d])))+/ig,\n\t\t\t_setRatio = function(v) {\n\t\t\t\tvar pt = this._firstPT,\n\t\t\t\t\tmin = 0.000001,\n\t\t\t\t\tval;\n\t\t\t\twhile (pt) {\n\t\t\t\t\tval = !pt.blob ? pt.c * v + pt.s : (v === 1 && this.end != null) ? this.end : v ? this.join(\"\") : this.start;\n\t\t\t\t\tif (pt.m) {\n\t\t\t\t\t\tval = pt.m.call(this._tween, val, this._target || pt.t, this._tween);\n\t\t\t\t\t} else if (val < min) if (val > -min && !pt.blob) { //prevents issues with converting very small numbers to strings in the browser\n\t\t\t\t\t\tval = 0;\n\t\t\t\t\t}\n\t\t\t\t\tif (!pt.f) {\n\t\t\t\t\t\tpt.t[pt.p] = val;\n\t\t\t\t\t} else if (pt.fp) {\n\t\t\t\t\t\tpt.t[pt.p](pt.fp, val);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tpt.t[pt.p](val);\n\t\t\t\t\t}\n\t\t\t\t\tpt = pt._next;\n\t\t\t\t}\n\t\t\t},\n\t\t\t_blobRound = function(v) {\n\t\t\t\treturn (((v * 1000) | 0) / 1000) + \"\";\n\t\t\t},\n\t\t\t//compares two strings (start/end), finds the numbers that are different and spits back an array representing the whole value but with the changing values isolated as elements. For example, \"rgb(0,0,0)\" and \"rgb(100,50,0)\" would become [\"rgb(\", 0, \",\", 50, \",0)\"]. Notice it merges the parts that are identical (performance optimization). The array also has a linked list of PropTweens attached starting with _firstPT that contain the tweening data (t, p, s, c, f, etc.). It also stores the starting value as a \"start\" property so that we can revert to it if/when necessary, like when a tween rewinds fully. If the quantity of numbers differs between the start and end, it will always prioritize the end value(s). The pt parameter is optional - it's for a PropTween that will be appended to the end of the linked list and is typically for actually setting the value after all of the elements have been updated (with array.join(\"\")).\n\t\t\t_blobDif = function(start, end, filter, pt) {\n\t\t\t\tvar a = [],\n\t\t\t\t\tcharIndex = 0,\n\t\t\t\t\ts = \"\",\n\t\t\t\t\tcolor = 0,\n\t\t\t\t\tstartNums, endNums, num, i, l, nonNumbers, currentNum;\n\t\t\t\ta.start = start;\n\t\t\t\ta.end = end;\n\t\t\t\tstart = a[0] = start + \"\"; //ensure values are strings\n\t\t\t\tend = a[1] = end + \"\";\n\t\t\t\tif (filter) {\n\t\t\t\t\tfilter(a); //pass an array with the starting and ending values and let the filter do whatever it needs to the values.\n\t\t\t\t\tstart = a[0];\n\t\t\t\t\tend = a[1];\n\t\t\t\t}\n\t\t\t\ta.length = 0;\n\t\t\t\tstartNums = start.match(_numbersExp) || [];\n\t\t\t\tendNums = end.match(_numbersExp) || [];\n\t\t\t\tif (pt) {\n\t\t\t\t\tpt._next = null;\n\t\t\t\t\tpt.blob = 1;\n\t\t\t\t\ta._firstPT = a._applyPT = pt; //apply last in the linked list (which means inserting it first)\n\t\t\t\t}\n\t\t\t\tl = endNums.length;\n\t\t\t\tfor (i = 0; i < l; i++) {\n\t\t\t\t\tcurrentNum = endNums[i];\n\t\t\t\t\tnonNumbers = end.substr(charIndex, end.indexOf(currentNum, charIndex)-charIndex);\n\t\t\t\t\ts += (nonNumbers || !i) ? nonNumbers : \",\"; //note: SVG spec allows omission of comma/space when a negative sign is wedged between two numbers, like 2.5-5.3 instead of 2.5,-5.3 but when tweening, the negative value may switch to positive, so we insert the comma just in case.\n\t\t\t\t\tcharIndex += nonNumbers.length;\n\t\t\t\t\tif (color) { //sense rgba() values and round them.\n\t\t\t\t\t\tcolor = (color + 1) % 5;\n\t\t\t\t\t} else if (nonNumbers.substr(-5) === \"rgba(\") {\n\t\t\t\t\t\tcolor = 1;\n\t\t\t\t\t}\n\t\t\t\t\tif (currentNum === startNums[i] || startNums.length <= i) {\n\t\t\t\t\t\ts += currentNum;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tif (s) {\n\t\t\t\t\t\t\ta.push(s);\n\t\t\t\t\t\t\ts = \"\";\n\t\t\t\t\t\t}\n\t\t\t\t\t\tnum = parseFloat(startNums[i]);\n\t\t\t\t\t\ta.push(num);\n\t\t\t\t\t\ta._firstPT = {_next: a._firstPT, t:a, p: a.length-1, s:num, c:((currentNum.charAt(1) === \"=\") ? parseInt(currentNum.charAt(0) + \"1\", 10) * parseFloat(currentNum.substr(2)) : (parseFloat(currentNum) - num)) || 0, f:0, m:(color && color < 4) ? Math.round : _blobRound}; //limiting to 3 decimal places and casting as a string can really help performance when array.join() is called!\n\t\t\t\t\t\t//note: we don't set _prev because we'll never need to remove individual PropTweens from this list.\n\t\t\t\t\t}\n\t\t\t\t\tcharIndex += currentNum.length;\n\t\t\t\t}\n\t\t\t\ts += end.substr(charIndex);\n\t\t\t\tif (s) {\n\t\t\t\t\ta.push(s);\n\t\t\t\t}\n\t\t\t\ta.setRatio = _setRatio;\n\t\t\t\tif (_relExp.test(end)) { //if the end string contains relative values, delete it so that on the final render (in _setRatio()), we don't actually set it to the string with += or -= characters (forces it to use the calculated value).\n\t\t\t\t\ta.end = null;\n\t\t\t\t}\n\t\t\t\treturn a;\n\t\t\t},\n\t\t\t//note: \"funcParam\" is only necessary for function-based getters/setters that require an extra parameter like getAttribute(\"width\") and setAttribute(\"width\", value). In this example, funcParam would be \"width\". Used by AttrPlugin for example.\n\t\t\t_addPropTween = function(target, prop, start, end, overwriteProp, mod, funcParam, stringFilter, index) {\n\t\t\t\tif (typeof(end) === \"function\") {\n\t\t\t\t\tend = end(index || 0, target);\n\t\t\t\t}\n\t\t\t\tvar type = typeof(target[prop]),\n\t\t\t\t\tgetterName = (type !== \"function\") ? \"\" : ((prop.indexOf(\"set\") || typeof(target[\"get\" + prop.substr(3)]) !== \"function\") ? prop : \"get\" + prop.substr(3)),\n\t\t\t\t\ts = (start !== \"get\") ? start : !getterName ? target[prop] : funcParam ? target[getterName](funcParam) : target[getterName](),\n\t\t\t\t\tisRelative = (typeof(end) === \"string\" && end.charAt(1) === \"=\"),\n\t\t\t\t\tpt = {t:target, p:prop, s:s, f:(type === \"function\"), pg:0, n:overwriteProp || prop, m:(!mod ? 0 : (typeof(mod) === \"function\") ? mod : Math.round), pr:0, c:isRelative ? parseInt(end.charAt(0) + \"1\", 10) * parseFloat(end.substr(2)) : (parseFloat(end) - s) || 0},\n\t\t\t\t\tblob;\n\n\t\t\t\tif (typeof(s) !== \"number\" || (typeof(end) !== \"number\" && !isRelative)) {\n\t\t\t\t\tif (funcParam || isNaN(s) || (!isRelative && isNaN(end)) || typeof(s) === \"boolean\" || typeof(end) === \"boolean\") {\n\t\t\t\t\t\t//a blob (string that has multiple numbers in it)\n\t\t\t\t\t\tpt.fp = funcParam;\n\t\t\t\t\t\tblob = _blobDif(s, (isRelative ? (parseFloat(pt.s) + pt.c) + (pt.s + \"\").replace(/[0-9\\-\\.]/g, \"\") : end), stringFilter || TweenLite.defaultStringFilter, pt);\n\t\t\t\t\t\tpt = {t: blob, p: \"setRatio\", s: 0, c: 1, f: 2, pg: 0, n: overwriteProp || prop, pr: 0, m: 0}; //\"2\" indicates it's a Blob property tween. Needed for RoundPropsPlugin for example.\n\t\t\t\t\t} else {\n\t\t\t\t\t\tpt.s = parseFloat(s);\n\t\t\t\t\t\tif (!isRelative) {\n\t\t\t\t\t\t\tpt.c = (parseFloat(end) - pt.s) || 0;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (pt.c) { //only add it to the linked list if there's a change.\n\t\t\t\t\tif ((pt._next = this._firstPT)) {\n\t\t\t\t\t\tpt._next._prev = pt;\n\t\t\t\t\t}\n\t\t\t\t\tthis._firstPT = pt;\n\t\t\t\t\treturn pt;\n\t\t\t\t}\n\t\t\t},\n\t\t\t_internals = TweenLite._internals = {isArray:_isArray, isSelector:_isSelector, lazyTweens:_lazyTweens, blobDif:_blobDif}, //gives us a way to expose certain private values to other GreenSock classes without contaminating tha main TweenLite object.\n\t\t\t_plugins = TweenLite._plugins = {},\n\t\t\t_tweenLookup = _internals.tweenLookup = {},\n\t\t\t_tweenLookupNum = 0,\n\t\t\t_reservedProps = _internals.reservedProps = {ease:1, delay:1, overwrite:1, onComplete:1, onCompleteParams:1, onCompleteScope:1, useFrames:1, runBackwards:1, startAt:1, onUpdate:1, onUpdateParams:1, onUpdateScope:1, onStart:1, onStartParams:1, onStartScope:1, onReverseComplete:1, onReverseCompleteParams:1, onReverseCompleteScope:1, onRepeat:1, onRepeatParams:1, onRepeatScope:1, easeParams:1, yoyo:1, immediateRender:1, repeat:1, repeatDelay:1, data:1, paused:1, reversed:1, autoCSS:1, lazy:1, onOverwrite:1, callbackScope:1, stringFilter:1, id:1, yoyoEase:1, stagger:1},\n\t\t\t_overwriteLookup = {none:0, all:1, auto:2, concurrent:3, allOnStart:4, preexisting:5, \"true\":1, \"false\":0},\n\t\t\t_rootFramesTimeline = Animation._rootFramesTimeline = new SimpleTimeline(),\n\t\t\t_rootTimeline = Animation._rootTimeline = new SimpleTimeline(),\n\t\t\t_nextGCFrame = 30,\n\t\t\t_lazyRender = _internals.lazyRender = function() {\n\t\t\t\tvar l = _lazyTweens.length,\n\t\t\t\t\ti, tween;\n\t\t\t\t_lazyLookup = {};\n\t\t\t\tfor (i = 0; i < l; i++) {\n\t\t\t\t\ttween = _lazyTweens[i];\n\t\t\t\t\tif (tween && tween._lazy !== false) {\n\t\t\t\t\t\ttween.render(tween._lazy[0], tween._lazy[1], true);\n\t\t\t\t\t\ttween._lazy = false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t_lazyTweens.length = 0;\n\t\t\t};\n\n\t\t_rootTimeline._startTime = _ticker.time;\n\t\t_rootFramesTimeline._startTime = _ticker.frame;\n\t\t_rootTimeline._active = _rootFramesTimeline._active = true;\n\t\tsetTimeout(_lazyRender, 1); //on some mobile devices, there isn't a \"tick\" before code runs which means any lazy renders wouldn't run before the next official \"tick\".\n\n\t\tAnimation._updateRoot = TweenLite.render = function() {\n\t\t\t\tvar i, a, p;\n\t\t\t\tif (_lazyTweens.length) { //if code is run outside of the requestAnimationFrame loop, there may be tweens queued AFTER the engine refreshed, so we need to ensure any pending renders occur before we refresh again.\n\t\t\t\t\t_lazyRender();\n\t\t\t\t}\n\t\t\t\t_rootTimeline.render((_ticker.time - _rootTimeline._startTime) * _rootTimeline._timeScale, false, false);\n\t\t\t\t_rootFramesTimeline.render((_ticker.frame - _rootFramesTimeline._startTime) * _rootFramesTimeline._timeScale, false, false);\n\t\t\t\tif (_lazyTweens.length) {\n\t\t\t\t\t_lazyRender();\n\t\t\t\t}\n\t\t\t\tif (_ticker.frame >= _nextGCFrame) { //dump garbage every 120 frames or whatever the user sets TweenLite.autoSleep to\n\t\t\t\t\t_nextGCFrame = _ticker.frame + (parseInt(TweenLite.autoSleep, 10) || 120);\n\t\t\t\t\tfor (p in _tweenLookup) {\n\t\t\t\t\t\ta = _tweenLookup[p].tweens;\n\t\t\t\t\t\ti = a.length;\n\t\t\t\t\t\twhile (--i > -1) {\n\t\t\t\t\t\t\tif (a[i]._gc) {\n\t\t\t\t\t\t\t\ta.splice(i, 1);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (a.length === 0) {\n\t\t\t\t\t\t\tdelete _tweenLookup[p];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\t//if there are no more tweens in the root timelines, or if they're all paused, make the _timer sleep to reduce load on the CPU slightly\n\t\t\t\t\tp = _rootTimeline._first;\n\t\t\t\t\tif (!p || p._paused) if (TweenLite.autoSleep && !_rootFramesTimeline._first && _ticker._listeners.tick.length === 1) {\n\t\t\t\t\t\twhile (p && p._paused) {\n\t\t\t\t\t\t\tp = p._next;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (!p) {\n\t\t\t\t\t\t\t_ticker.sleep();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\n\t\t_ticker.addEventListener(\"tick\", Animation._updateRoot);\n\n\t\tvar _register = function(target, tween, scrub) {\n\t\t\t\tvar id = target._gsTweenID, a, i;\n\t\t\t\tif (!_tweenLookup[id || (target._gsTweenID = id = \"t\" + (_tweenLookupNum++))]) {\n\t\t\t\t\t_tweenLookup[id] = {target:target, tweens:[]};\n\t\t\t\t}\n\t\t\t\tif (tween) {\n\t\t\t\t\ta = _tweenLookup[id].tweens;\n\t\t\t\t\ta[(i = a.length)] = tween;\n\t\t\t\t\tif (scrub) {\n\t\t\t\t\t\twhile (--i > -1) {\n\t\t\t\t\t\t\tif (a[i] === tween) {\n\t\t\t\t\t\t\t\ta.splice(i, 1);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn _tweenLookup[id].tweens;\n\t\t\t},\n\t\t\t_onOverwrite = function(overwrittenTween, overwritingTween, target, killedProps) {\n\t\t\t\tvar func = overwrittenTween.vars.onOverwrite, r1, r2;\n\t\t\t\tif (func) {\n\t\t\t\t\tr1 = func(overwrittenTween, overwritingTween, target, killedProps);\n\t\t\t\t}\n\t\t\t\tfunc = TweenLite.onOverwrite;\n\t\t\t\tif (func) {\n\t\t\t\t\tr2 = func(overwrittenTween, overwritingTween, target, killedProps);\n\t\t\t\t}\n\t\t\t\treturn (r1 !== false && r2 !== false);\n\t\t\t},\n\t\t\t_applyOverwrite = function(target, tween, props, mode, siblings) {\n\t\t\t\tvar i, changed, curTween, l;\n\t\t\t\tif (mode === 1 || mode >= 4) {\n\t\t\t\t\tl = siblings.length;\n\t\t\t\t\tfor (i = 0; i < l; i++) {\n\t\t\t\t\t\tif ((curTween = siblings[i]) !== tween) {\n\t\t\t\t\t\t\tif (!curTween._gc) {\n\t\t\t\t\t\t\t\tif (curTween._kill(null, target, tween)) {\n\t\t\t\t\t\t\t\t\tchanged = true;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else if (mode === 5) {\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn changed;\n\t\t\t\t}\n\t\t\t\t//NOTE: Add tiny amount to overcome floating point errors that can cause the startTime to be VERY slightly off (when a tween's time() is set for example)\n\t\t\t\tvar startTime = tween._startTime + _tinyNum,\n\t\t\t\t\toverlaps = [],\n\t\t\t\t\toCount = 0,\n\t\t\t\t\tzeroDur = (tween._duration === 0),\n\t\t\t\t\tglobalStart;\n\t\t\t\ti = siblings.length;\n\t\t\t\twhile (--i > -1) {\n\t\t\t\t\tif ((curTween = siblings[i]) === tween || curTween._gc || curTween._paused) ; else if (curTween._timeline !== tween._timeline) {\n\t\t\t\t\t\tglobalStart = globalStart || _checkOverlap(tween, 0, zeroDur);\n\t\t\t\t\t\tif (_checkOverlap(curTween, globalStart, zeroDur) === 0) {\n\t\t\t\t\t\t\toverlaps[oCount++] = curTween;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (curTween._startTime <= startTime) if (curTween._startTime + curTween.totalDuration() / curTween._timeScale > startTime) if (!((zeroDur || !curTween._initted) && startTime - curTween._startTime <= _tinyNum * 2)) {\n\t\t\t\t\t\toverlaps[oCount++] = curTween;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\ti = oCount;\n\t\t\t\twhile (--i > -1) {\n\t\t\t\t\tcurTween = overlaps[i];\n\t\t\t\t\tl = curTween._firstPT; //we need to discern if there were property tweens originally; if they all get removed in the next line's _kill() call, the tween should be killed. See https://github.com/greensock/GreenSock-JS/issues/278\n\t\t\t\t\tif (mode === 2) if (curTween._kill(props, target, tween)) {\n\t\t\t\t\t\tchanged = true;\n\t\t\t\t\t}\n\t\t\t\t\tif (mode !== 2 || (!curTween._firstPT && curTween._initted && l)) {\n\t\t\t\t\t\tif (mode !== 2 && !_onOverwrite(curTween, tween)) {\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (curTween._enabled(false, false)) { //if all property tweens have been overwritten, kill the tween.\n\t\t\t\t\t\t\tchanged = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn changed;\n\t\t\t},\n\t\t\t_checkOverlap = function(tween, reference, zeroDur) {\n\t\t\t\tvar tl = tween._timeline,\n\t\t\t\t\tts = tl._timeScale,\n\t\t\t\t\tt = tween._startTime;\n\t\t\t\twhile (tl._timeline) {\n\t\t\t\t\tt += tl._startTime;\n\t\t\t\t\tts *= tl._timeScale;\n\t\t\t\t\tif (tl._paused) {\n\t\t\t\t\t\treturn -100;\n\t\t\t\t\t}\n\t\t\t\t\ttl = tl._timeline;\n\t\t\t\t}\n\t\t\t\tt /= ts;\n\t\t\t\treturn (t > reference) ? t - reference : ((zeroDur && t === reference) || (!tween._initted && t - reference < 2 * _tinyNum)) ? _tinyNum : ((t += tween.totalDuration() / tween._timeScale / ts) > reference + _tinyNum) ? 0 : t - reference - _tinyNum;\n\t\t\t};\n\n\n//---- TweenLite instance methods -----------------------------------------------------------------------------\n\n\t\tp._init = function() {\n\t\t\tvar v = this.vars,\n\t\t\t\top = this._overwrittenProps,\n\t\t\t\tdur = this._duration,\n\t\t\t\timmediate = !!v.immediateRender,\n\t\t\t\tease = v.ease,\n\t\t\t\tstartAt = this._startAt,\n\t\t\t\ti, initPlugins, pt, p, startVars, l;\n\t\t\tif (v.startAt) {\n\t\t\t\tif (startAt) {\n\t\t\t\t\tstartAt.render(-1, true); //if we've run a startAt previously (when the tween instantiated), we should revert it so that the values re-instantiate correctly particularly for relative tweens. Without this, a TweenLite.fromTo(obj, 1, {x:\"+=100\"}, {x:\"-=100\"}), for example, would actually jump to +=200 because the startAt would run twice, doubling the relative change.\n\t\t\t\t\tstartAt.kill();\n\t\t\t\t}\n\t\t\t\tstartVars = {};\n\t\t\t\tfor (p in v.startAt) { //copy the properties/values into a new object to avoid collisions, like var to = {x:0}, from = {x:500}; timeline.fromTo(e, 1, from, to).fromTo(e, 1, to, from);\n\t\t\t\t\tstartVars[p] = v.startAt[p];\n\t\t\t\t}\n\t\t\t\tstartVars.data = \"isStart\";\n\t\t\t\tstartVars.overwrite = false;\n\t\t\t\tstartVars.immediateRender = true;\n\t\t\t\tstartVars.lazy = (immediate && v.lazy !== false);\n\t\t\t\tstartVars.startAt = startVars.delay = null; //no nesting of startAt objects allowed (otherwise it could cause an infinite loop).\n\t\t\t\tstartVars.onUpdate = v.onUpdate;\n\t\t\t\tstartVars.onUpdateParams = v.onUpdateParams;\n\t\t\t\tstartVars.onUpdateScope = v.onUpdateScope || v.callbackScope || this;\n\t\t\t\tthis._startAt = TweenLite.to(this.target || {}, 0, startVars);\n\t\t\t\tif (immediate) {\n\t\t\t\t\tif (this._time > 0) {\n\t\t\t\t\t\tthis._startAt = null; //tweens that render immediately (like most from() and fromTo() tweens) shouldn't revert when their parent timeline's playhead goes backward past the startTime because the initial render could have happened anytime and it shouldn't be directly correlated to this tween's startTime. Imagine setting up a complex animation where the beginning states of various objects are rendered immediately but the tween doesn't happen for quite some time - if we revert to the starting values as soon as the playhead goes backward past the tween's startTime, it will throw things off visually. Reversion should only happen in TimelineLite/Max instances where immediateRender was false (which is the default in the convenience methods like from()).\n\t\t\t\t\t} else if (dur !== 0) {\n\t\t\t\t\t\treturn; //we skip initialization here so that overwriting doesn't occur until the tween actually begins. Otherwise, if you create several immediateRender:true tweens of the same target/properties to drop into a TimelineLite or TimelineMax, the last one created would overwrite the first ones because they didn't get placed into the timeline yet before the first render occurs and kicks in overwriting.\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else if (v.runBackwards && dur !== 0) {\n\t\t\t\t//from() tweens must be handled uniquely: their beginning values must be rendered but we don't want overwriting to occur yet (when time is still 0). Wait until the tween actually begins before doing all the routines like overwriting. At that time, we should render at the END of the tween to ensure that things initialize correctly (remember, from() tweens go backwards)\n\t\t\t\tif (startAt) {\n\t\t\t\t\tstartAt.render(-1, true);\n\t\t\t\t\tstartAt.kill();\n\t\t\t\t\tthis._startAt = null;\n\t\t\t\t} else {\n\t\t\t\t\tif (this._time !== 0) { //in rare cases (like if a from() tween runs and then is invalidate()-ed), immediateRender could be true but the initial forced-render gets skipped, so there's no need to force the render in this context when the _time is greater than 0\n\t\t\t\t\t\timmediate = false;\n\t\t\t\t\t}\n\t\t\t\t\tpt = {};\n\t\t\t\t\tfor (p in v) { //copy props into a new object and skip any reserved props, otherwise onComplete or onUpdate or onStart could fire. We should, however, permit autoCSS to go through.\n\t\t\t\t\t\tif (!_reservedProps[p] || p === \"autoCSS\") {\n\t\t\t\t\t\t\tpt[p] = v[p];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tpt.overwrite = 0;\n\t\t\t\t\tpt.data = \"isFromStart\"; //we tag the tween with as \"isFromStart\" so that if [inside a plugin] we need to only do something at the very END of a tween, we have a way of identifying this tween as merely the one that's setting the beginning values for a \"from()\" tween. For example, clearProps in CSSPlugin should only get applied at the very END of a tween and without this tag, from(...{height:100, clearProps:\"height\", delay:1}) would wipe the height at the beginning of the tween and after 1 second, it'd kick back in.\n\t\t\t\t\tpt.lazy = (immediate && v.lazy !== false);\n\t\t\t\t\tpt.immediateRender = immediate; //zero-duration tweens render immediately by default, but if we're not specifically instructed to render this tween immediately, we should skip this and merely _init() to record the starting values (rendering them immediately would push them to completion which is wasteful in that case - we'd have to render(-1) immediately after)\n\t\t\t\t\tthis._startAt = TweenLite.to(this.target, 0, pt);\n\t\t\t\t\tif (!immediate) {\n\t\t\t\t\t\tthis._startAt._init(); //ensures that the initial values are recorded\n\t\t\t\t\t\tthis._startAt._enabled(false); //no need to have the tween render on the next cycle. Disable it because we'll always manually control the renders of the _startAt tween.\n\t\t\t\t\t\tif (this.vars.immediateRender) {\n\t\t\t\t\t\t\tthis._startAt = null;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (this._time === 0) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis._ease = ease = (!ease) ? TweenLite.defaultEase : (ease instanceof Ease) ? ease : (typeof(ease) === \"function\") ? new Ease(ease, v.easeParams) : _easeMap[ease] || TweenLite.defaultEase;\n\t\t\tif (v.easeParams instanceof Array && ease.config) {\n\t\t\t\tthis._ease = ease.config.apply(ease, v.easeParams);\n\t\t\t}\n\t\t\tthis._easeType = this._ease._type;\n\t\t\tthis._easePower = this._ease._power;\n\t\t\tthis._firstPT = null;\n\n\t\t\tif (this._targets) {\n\t\t\t\tl = this._targets.length;\n\t\t\t\tfor (i = 0; i < l; i++) {\n\t\t\t\t\tif ( this._initProps( this._targets[i], (this._propLookup[i] = {}), this._siblings[i], (op ? op[i] : null), i) ) {\n\t\t\t\t\t\tinitPlugins = true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tinitPlugins = this._initProps(this.target, this._propLookup, this._siblings, op, 0);\n\t\t\t}\n\n\t\t\tif (initPlugins) {\n\t\t\t\tTweenLite._onPluginEvent(\"_onInitAllProps\", this); //reorders the array in order of priority. Uses a static TweenPlugin method in order to minimize file size in TweenLite\n\t\t\t}\n\t\t\tif (op) if (!this._firstPT) if (typeof(this.target) !== \"function\") { //if all tweening properties have been overwritten, kill the tween. If the target is a function, it's probably a delayedCall so let it live.\n\t\t\t\tthis._enabled(false, false);\n\t\t\t}\n\t\t\tif (v.runBackwards) {\n\t\t\t\tpt = this._firstPT;\n\t\t\t\twhile (pt) {\n\t\t\t\t\tpt.s += pt.c;\n\t\t\t\t\tpt.c = -pt.c;\n\t\t\t\t\tpt = pt._next;\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis._onUpdate = v.onUpdate;\n\t\t\tthis._initted = true;\n\t\t};\n\n\t\tp._initProps = function(target, propLookup, siblings, overwrittenProps, index) {\n\t\t\tvar p, i, initPlugins, plugin, pt, v;\n\t\t\tif (target == null) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tif (_lazyLookup[target._gsTweenID]) {\n\t\t\t\t_lazyRender(); //if other tweens of the same target have recently initted but haven't rendered yet, we've got to force the render so that the starting values are correct (imagine populating a timeline with a bunch of sequential tweens and then jumping to the end)\n\t\t\t}\n\n\t\t\tif (!this.vars.css) if (target.style) if (target !== window && target.nodeType) if (_plugins.css) if (this.vars.autoCSS !== false) { //it's so common to use TweenLite/Max to animate the css of DOM elements, we assume that if the target is a DOM element, that's what is intended (a convenience so that users don't have to wrap things in css:{}, although we still recommend it for a slight performance boost and better specificity). Note: we cannot check \"nodeType\" on the window inside an iframe.\n\t\t\t\t_autoCSS(this.vars, target);\n\t\t\t}\n\t\t\tfor (p in this.vars) {\n\t\t\t\tv = this.vars[p];\n\t\t\t\tif (_reservedProps[p]) {\n\t\t\t\t\tif (v) if ((v instanceof Array) || (v.push && _isArray(v))) if (v.join(\"\").indexOf(\"{self}\") !== -1) {\n\t\t\t\t\t\tthis.vars[p] = v = this._swapSelfInParams(v, this);\n\t\t\t\t\t}\n\n\t\t\t\t} else if (_plugins[p] && (plugin = new _plugins[p]())._onInitTween(target, this.vars[p], this, index)) {\n\n\t\t\t\t\t//t - target \t\t[object]\n\t\t\t\t\t//p - property \t\t[string]\n\t\t\t\t\t//s - start\t\t\t[number]\n\t\t\t\t\t//c - change\t\t[number]\n\t\t\t\t\t//f - isFunction\t[boolean]\n\t\t\t\t\t//n - name\t\t\t[string]\n\t\t\t\t\t//pg - isPlugin \t[boolean]\n\t\t\t\t\t//pr - priority\t\t[number]\n\t\t\t\t\t//m - mod           [function | 0]\n\t\t\t\t\tthis._firstPT = pt = {_next:this._firstPT, t:plugin, p:\"setRatio\", s:0, c:1, f:1, n:p, pg:1, pr:plugin._priority, m:0};\n\t\t\t\t\ti = plugin._overwriteProps.length;\n\t\t\t\t\twhile (--i > -1) {\n\t\t\t\t\t\tpropLookup[plugin._overwriteProps[i]] = this._firstPT;\n\t\t\t\t\t}\n\t\t\t\t\tif (plugin._priority || plugin._onInitAllProps) {\n\t\t\t\t\t\tinitPlugins = true;\n\t\t\t\t\t}\n\t\t\t\t\tif (plugin._onDisable || plugin._onEnable) {\n\t\t\t\t\t\tthis._notifyPluginsOfEnabled = true;\n\t\t\t\t\t}\n\t\t\t\t\tif (pt._next) {\n\t\t\t\t\t\tpt._next._prev = pt;\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\t\t\t\t\tpropLookup[p] = _addPropTween.call(this, target, p, \"get\", v, p, 0, null, this.vars.stringFilter, index);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (overwrittenProps) if (this._kill(overwrittenProps, target)) { //another tween may have tried to overwrite properties of this tween before init() was called (like if two tweens start at the same time, the one created second will run first)\n\t\t\t\treturn this._initProps(target, propLookup, siblings, overwrittenProps, index);\n\t\t\t}\n\t\t\tif (this._overwrite > 1) if (this._firstPT) if (siblings.length > 1) if (_applyOverwrite(target, this, propLookup, this._overwrite, siblings)) {\n\t\t\t\tthis._kill(propLookup, target);\n\t\t\t\treturn this._initProps(target, propLookup, siblings, overwrittenProps, index);\n\t\t\t}\n\t\t\tif (this._firstPT) if ((this.vars.lazy !== false && this._duration) || (this.vars.lazy && !this._duration)) { //zero duration tweens don't lazy render by default; everything else does.\n\t\t\t\t_lazyLookup[target._gsTweenID] = true;\n\t\t\t}\n\t\t\treturn initPlugins;\n\t\t};\n\n\t\tp.render = function(time, suppressEvents, force) {\n\t\t\tvar self = this,\n\t\t\t\tprevTime = self._time,\n\t\t\t\tduration = self._duration,\n\t\t\t\tprevRawPrevTime = self._rawPrevTime,\n\t\t\t\tisComplete, callback, pt, rawPrevTime;\n\t\t\tif (time >= duration - _tinyNum && time >= 0) { //to work around occasional floating point math artifacts.\n\t\t\t\tself._totalTime = self._time = duration;\n\t\t\t\tself.ratio = self._ease._calcEnd ? self._ease.getRatio(1) : 1;\n\t\t\t\tif (!self._reversed ) {\n\t\t\t\t\tisComplete = true;\n\t\t\t\t\tcallback = \"onComplete\";\n\t\t\t\t\tforce = (force || self._timeline.autoRemoveChildren); //otherwise, if the animation is unpaused/activated after it's already finished, it doesn't get removed from the parent timeline.\n\t\t\t\t}\n\t\t\t\tif (duration === 0) if (self._initted || !self.vars.lazy || force) { //zero-duration tweens are tricky because we must discern the momentum/direction of time in order to determine whether the starting values should be rendered or the ending values. If the \"playhead\" of its timeline goes past the zero-duration tween in the forward direction or lands directly on it, the end values should be rendered, but if the timeline's \"playhead\" moves past it in the backward direction (from a postitive time to a negative time), the starting values must be rendered.\n\t\t\t\t\tif (self._startTime === self._timeline._duration) { //if a zero-duration tween is at the VERY end of a timeline and that timeline renders at its end, it will typically add a tiny bit of cushion to the render time to prevent rounding errors from getting in the way of tweens rendering their VERY end. If we then reverse() that timeline, the zero-duration tween will trigger its onReverseComplete even though technically the playhead didn't pass over it again. It's a very specific edge case we must accommodate.\n\t\t\t\t\t\ttime = 0;\n\t\t\t\t\t}\n\t\t\t\t\tif (prevRawPrevTime < 0 || (time <= 0 && time >= -_tinyNum) || (prevRawPrevTime === _tinyNum && self.data !== \"isPause\")) if (prevRawPrevTime !== time) { //note: when this.data is \"isPause\", it's a callback added by addPause() on a timeline that we should not be triggered when LEAVING its exact start time. In other words, tl.addPause(1).play(1) shouldn't pause.\n\t\t\t\t\t\tforce = true;\n\t\t\t\t\t\tif (prevRawPrevTime > _tinyNum) {\n\t\t\t\t\t\t\tcallback = \"onReverseComplete\";\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tself._rawPrevTime = rawPrevTime = (!suppressEvents || time || prevRawPrevTime === time) ? time : _tinyNum; //when the playhead arrives at EXACTLY time 0 (right on top) of a zero-duration tween, we need to discern if events are suppressed so that when the playhead moves again (next time), it'll trigger the callback. If events are NOT suppressed, obviously the callback would be triggered in this render. Basically, the callback should fire either when the playhead ARRIVES or LEAVES this exact spot, not both. Imagine doing a timeline.seek(0) and there's a callback that sits at 0. Since events are suppressed on that seek() by default, nothing will fire, but when the playhead moves off of that position, the callback should fire. This behavior is what people intuitively expect. We set the _rawPrevTime to be a precise tiny number to indicate this scenario rather than using another property/variable which would increase memory usage. This technique is less readable, but more efficient.\n\t\t\t\t}\n\n\t\t\t} else if (time < _tinyNum) { //to work around occasional floating point math artifacts, round super small values to 0.\n\t\t\t\tself._totalTime = self._time = 0;\n\t\t\t\tself.ratio = self._ease._calcEnd ? self._ease.getRatio(0) : 0;\n\t\t\t\tif (prevTime !== 0 || (duration === 0 && prevRawPrevTime > 0)) {\n\t\t\t\t\tcallback = \"onReverseComplete\";\n\t\t\t\t\tisComplete = self._reversed;\n\t\t\t\t}\n\t\t\t\tif (time > -_tinyNum) {\n\t\t\t\t\ttime = 0;\n\t\t\t\t} else if (time < 0) {\n\t\t\t\t\tself._active = false;\n\t\t\t\t\tif (duration === 0) if (self._initted || !self.vars.lazy || force) { //zero-duration tweens are tricky because we must discern the momentum/direction of time in order to determine whether the starting values should be rendered or the ending values. If the \"playhead\" of its timeline goes past the zero-duration tween in the forward direction or lands directly on it, the end values should be rendered, but if the timeline's \"playhead\" moves past it in the backward direction (from a postitive time to a negative time), the starting values must be rendered.\n\t\t\t\t\t\tif (prevRawPrevTime >= 0 && !(prevRawPrevTime === _tinyNum && self.data === \"isPause\")) {\n\t\t\t\t\t\t\tforce = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tself._rawPrevTime = rawPrevTime = (!suppressEvents || time || prevRawPrevTime === time) ? time : _tinyNum; //when the playhead arrives at EXACTLY time 0 (right on top) of a zero-duration tween, we need to discern if events are suppressed so that when the playhead moves again (next time), it'll trigger the callback. If events are NOT suppressed, obviously the callback would be triggered in this render. Basically, the callback should fire either when the playhead ARRIVES or LEAVES this exact spot, not both. Imagine doing a timeline.seek(0) and there's a callback that sits at 0. Since events are suppressed on that seek() by default, nothing will fire, but when the playhead moves off of that position, the callback should fire. This behavior is what people intuitively expect. We set the _rawPrevTime to be a precise tiny number to indicate this scenario rather than using another property/variable which would increase memory usage. This technique is less readable, but more efficient.\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (!self._initted || (self._startAt && self._startAt.progress())) { //if we render the very beginning (time == 0) of a fromTo(), we must force the render (normal tweens wouldn't need to render at a time of 0 when the prevTime was also 0). This is also mandatory to make sure overwriting kicks in immediately. Also, we check progress() because if startAt has already rendered at its end, we should force a render at its beginning. Otherwise, if you put the playhead directly on top of where a fromTo({immediateRender:false}) starts, and then move it backwards, the from() won't revert its values.\n\t\t\t\t\tforce = true;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tself._totalTime = self._time = time;\n\n\t\t\t\tif (self._easeType) {\n\t\t\t\t\tvar r = time / duration, type = self._easeType, pow = self._easePower;\n\t\t\t\t\tif (type === 1 || (type === 3 && r >= 0.5)) {\n\t\t\t\t\t\tr = 1 - r;\n\t\t\t\t\t}\n\t\t\t\t\tif (type === 3) {\n\t\t\t\t\t\tr *= 2;\n\t\t\t\t\t}\n\t\t\t\t\tif (pow === 1) {\n\t\t\t\t\t\tr *= r;\n\t\t\t\t\t} else if (pow === 2) {\n\t\t\t\t\t\tr *= r * r;\n\t\t\t\t\t} else if (pow === 3) {\n\t\t\t\t\t\tr *= r * r * r;\n\t\t\t\t\t} else if (pow === 4) {\n\t\t\t\t\t\tr *= r * r * r * r;\n\t\t\t\t\t}\n\t\t\t\t\tself.ratio = (type === 1) ? 1 - r : (type === 2) ? r : (time / duration < 0.5) ? r / 2 : 1 - (r / 2);\n\t\t\t\t} else {\n\t\t\t\t\tself.ratio = self._ease.getRatio(time / duration);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (self._time === prevTime && !force) {\n\t\t\t\treturn;\n\t\t\t} else if (!self._initted) {\n\t\t\t\tself._init();\n\t\t\t\tif (!self._initted || self._gc) { //immediateRender tweens typically won't initialize until the playhead advances (_time is greater than 0) in order to ensure that overwriting occurs properly. Also, if all of the tweening properties have been overwritten (which would cause _gc to be true, as set in _init()), we shouldn't continue otherwise an onStart callback could be called for example.\n\t\t\t\t\treturn;\n\t\t\t\t} else if (!force && self._firstPT && ((self.vars.lazy !== false && self._duration) || (self.vars.lazy && !self._duration))) {\n\t\t\t\t\tself._time = self._totalTime = prevTime;\n\t\t\t\t\tself._rawPrevTime = prevRawPrevTime;\n\t\t\t\t\t_lazyTweens.push(self);\n\t\t\t\t\tself._lazy = [time, suppressEvents];\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\t//_ease is initially set to defaultEase, so now that init() has run, _ease is set properly and we need to recalculate the ratio. Overall this is faster than using conditional logic earlier in the method to avoid having to set ratio twice because we only init() once but renderTime() gets called VERY frequently.\n\t\t\t\tif (self._time && !isComplete) {\n\t\t\t\t\tself.ratio = self._ease.getRatio(self._time / duration);\n\t\t\t\t} else if (isComplete && self._ease._calcEnd) {\n\t\t\t\t\tself.ratio = self._ease.getRatio((self._time === 0) ? 0 : 1);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (self._lazy !== false) { //in case a lazy render is pending, we should flush it because the new render is occurring now (imagine a lazy tween instantiating and then immediately the user calls tween.seek(tween.duration()), skipping to the end - the end render would be forced, and then if we didn't flush the lazy render, it'd fire AFTER the seek(), rendering it at the wrong time.\n\t\t\t\tself._lazy = false;\n\t\t\t}\n\t\t\tif (!self._active) if (!self._paused && self._time !== prevTime && time >= 0) {\n\t\t\t\tself._active = true;  //so that if the user renders a tween (as opposed to the timeline rendering it), the timeline is forced to re-render and align it with the proper time/frame on the next rendering cycle. Maybe the tween already finished but the user manually re-renders it as halfway done.\n\t\t\t}\n\t\t\tif (prevTime === 0) {\n\t\t\t\tif (self._startAt) {\n\t\t\t\t\tif (time >= 0) {\n\t\t\t\t\t\tself._startAt.render(time, true, force);\n\t\t\t\t\t} else if (!callback) {\n\t\t\t\t\t\tcallback = \"_dummyGS\"; //if no callback is defined, use a dummy value just so that the condition at the end evaluates as true because _startAt should render AFTER the normal render loop when the time is negative. We could handle this in a more intuitive way, of course, but the render loop is the MOST important thing to optimize, so this technique allows us to avoid adding extra conditional logic in a high-frequency area.\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (self.vars.onStart) if (self._time !== 0 || duration === 0) if (!suppressEvents) {\n\t\t\t\t\tself._callback(\"onStart\");\n\t\t\t\t}\n\t\t\t}\n\t\t\tpt = self._firstPT;\n\t\t\twhile (pt) {\n\t\t\t\tif (pt.f) {\n\t\t\t\t\tpt.t[pt.p](pt.c * self.ratio + pt.s);\n\t\t\t\t} else {\n\t\t\t\t\tpt.t[pt.p] = pt.c * self.ratio + pt.s;\n\t\t\t\t}\n\t\t\t\tpt = pt._next;\n\t\t\t}\n\n\t\t\tif (self._onUpdate) {\n\t\t\t\tif (time < 0) if (self._startAt && time !== -0.0001) { //if the tween is positioned at the VERY beginning (_startTime 0) of its parent timeline, it's illegal for the playhead to go back further, so we should not render the recorded startAt values.\n\t\t\t\t\tself._startAt.render(time, true, force); //note: for performance reasons, we tuck this conditional logic inside less traveled areas (most tweens don't have an onUpdate). We'd just have it at the end before the onComplete, but the values should be updated before any onUpdate is called, so we ALSO put it here and then if it's not called, we do so later near the onComplete.\n\t\t\t\t}\n\t\t\t\tif (!suppressEvents) if (self._time !== prevTime || isComplete || force) {\n\t\t\t\t\tself._callback(\"onUpdate\");\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (callback) if (!self._gc || force) { //check _gc because there's a chance that kill() could be called in an onUpdate\n\t\t\t\tif (time < 0 && self._startAt && !self._onUpdate && time !== -0.0001) { //-0.0001 is a special value that we use when looping back to the beginning of a repeated TimelineMax, in which case we shouldn't render the _startAt values.\n\t\t\t\t\tself._startAt.render(time, true, force);\n\t\t\t\t}\n\t\t\t\tif (isComplete) {\n\t\t\t\t\tif (self._timeline.autoRemoveChildren) {\n\t\t\t\t\t\tself._enabled(false, false);\n\t\t\t\t\t}\n\t\t\t\t\tself._active = false;\n\t\t\t\t}\n\t\t\t\tif (!suppressEvents && self.vars[callback]) {\n\t\t\t\t\tself._callback(callback);\n\t\t\t\t}\n\t\t\t\tif (duration === 0 && self._rawPrevTime === _tinyNum && rawPrevTime !== _tinyNum) { //the onComplete or onReverseComplete could trigger movement of the playhead and for zero-duration tweens (which must discern direction) that land directly back on their start time, we don't want to fire again on the next render. Think of several addPause()'s in a timeline that forces the playhead to a certain spot, but what if it's already paused and another tween is tweening the \"time\" of the timeline? Each time it moves [forward] past that spot, it would move back, and since suppressEvents is true, it'd reset _rawPrevTime to _tinyNum so that when it begins again, the callback would fire (so ultimately it could bounce back and forth during that tween). Again, this is a very uncommon scenario, but possible nonetheless.\n\t\t\t\t\tself._rawPrevTime = 0;\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\tp._kill = function(vars, target, overwritingTween) {\n\t\t\tif (vars === \"all\") {\n\t\t\t\tvars = null;\n\t\t\t}\n\t\t\tif (vars == null) if (target == null || target === this.target) {\n\t\t\t\tthis._lazy = false;\n\t\t\t\treturn this._enabled(false, false);\n\t\t\t}\n\t\t\ttarget = (typeof(target) !== \"string\") ? (target || this._targets || this.target) : TweenLite.selector(target) || target;\n\t\t\tvar simultaneousOverwrite = (overwritingTween && this._time && overwritingTween._startTime === this._startTime && this._timeline === overwritingTween._timeline),\n\t\t\t\tfirstPT = this._firstPT,\n\t\t\t\ti, overwrittenProps, p, pt, propLookup, changed, killProps, record, killed;\n\t\t\tif ((_isArray(target) || _isSelector(target)) && typeof(target[0]) !== \"number\") {\n\t\t\t\ti = target.length;\n\t\t\t\twhile (--i > -1) {\n\t\t\t\t\tif (this._kill(vars, target[i], overwritingTween)) {\n\t\t\t\t\t\tchanged = true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif (this._targets) {\n\t\t\t\t\ti = this._targets.length;\n\t\t\t\t\twhile (--i > -1) {\n\t\t\t\t\t\tif (target === this._targets[i]) {\n\t\t\t\t\t\t\tpropLookup = this._propLookup[i] || {};\n\t\t\t\t\t\t\tthis._overwrittenProps = this._overwrittenProps || [];\n\t\t\t\t\t\t\toverwrittenProps = this._overwrittenProps[i] = vars ? this._overwrittenProps[i] || {} : \"all\";\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} else if (target !== this.target) {\n\t\t\t\t\treturn false;\n\t\t\t\t} else {\n\t\t\t\t\tpropLookup = this._propLookup;\n\t\t\t\t\toverwrittenProps = this._overwrittenProps = vars ? this._overwrittenProps || {} : \"all\";\n\t\t\t\t}\n\n\t\t\t\tif (propLookup) {\n\t\t\t\t\tkillProps = vars || propLookup;\n\t\t\t\t\trecord = (vars !== overwrittenProps && overwrittenProps !== \"all\" && vars !== propLookup && (typeof(vars) !== \"object\" || !vars._tempKill)); //_tempKill is a super-secret way to delete a particular tweening property but NOT have it remembered as an official overwritten property (like in BezierPlugin)\n\t\t\t\t\tif (overwritingTween && (TweenLite.onOverwrite || this.vars.onOverwrite)) {\n\t\t\t\t\t\tfor (p in killProps) {\n\t\t\t\t\t\t\tif (propLookup[p]) {\n\t\t\t\t\t\t\t\tif (!killed) {\n\t\t\t\t\t\t\t\t\tkilled = [];\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tkilled.push(p);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif ((killed || !vars) && !_onOverwrite(this, overwritingTween, target, killed)) { //if the onOverwrite returned false, that means the user wants to override the overwriting (cancel it).\n\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tfor (p in killProps) {\n\t\t\t\t\t\tif ((pt = propLookup[p])) {\n\t\t\t\t\t\t\tif (simultaneousOverwrite) { //if another tween overwrites this one and they both start at exactly the same time, yet this tween has already rendered once (for example, at 0.001) because it's first in the queue, we should revert the values to where they were at 0 so that the starting values aren't contaminated on the overwriting tween.\n\t\t\t\t\t\t\t\tif (pt.f) {\n\t\t\t\t\t\t\t\t\tpt.t[pt.p](pt.s);\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tpt.t[pt.p] = pt.s;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tchanged = true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (pt.pg && pt.t._kill(killProps)) {\n\t\t\t\t\t\t\t\tchanged = true; //some plugins need to be notified so they can perform cleanup tasks first\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (!pt.pg || pt.t._overwriteProps.length === 0) {\n\t\t\t\t\t\t\t\tif (pt._prev) {\n\t\t\t\t\t\t\t\t\tpt._prev._next = pt._next;\n\t\t\t\t\t\t\t\t} else if (pt === this._firstPT) {\n\t\t\t\t\t\t\t\t\tthis._firstPT = pt._next;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tif (pt._next) {\n\t\t\t\t\t\t\t\t\tpt._next._prev = pt._prev;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tpt._next = pt._prev = null;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdelete propLookup[p];\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (record) {\n\t\t\t\t\t\t\toverwrittenProps[p] = 1;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (!this._firstPT && this._initted && firstPT) { //if all tweening properties are killed, kill the tween. Without this line, if there's a tween with multiple targets and then you killTweensOf() each target individually, the tween would technically still remain active and fire its onComplete even though there aren't any more properties tweening.\n\t\t\t\t\t\tthis._enabled(false, false);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn changed;\n\t\t};\n\n\t\tp.invalidate = function() {\n\t\t\tif (this._notifyPluginsOfEnabled) {\n\t\t\t\tTweenLite._onPluginEvent(\"_onDisable\", this);\n\t\t\t}\n\t\t\tvar t = this._time;\n\t\t\tthis._firstPT = this._overwrittenProps = this._startAt = this._onUpdate = null;\n\t\t\tthis._notifyPluginsOfEnabled = this._active = this._lazy = false;\n\t\t\tthis._propLookup = (this._targets) ? {} : [];\n\t\t\tAnimation.prototype.invalidate.call(this);\n\t\t\tif (this.vars.immediateRender) {\n\t\t\t\tthis._time = -_tinyNum; //forces a render without having to set the render() \"force\" parameter to true because we want to allow lazying by default (using the \"force\" parameter always forces an immediate full render)\n\t\t\t\tthis.render(t, false, this.vars.lazy !== false);\n\t\t\t}\n\t\t\treturn this;\n\t\t};\n\n\t\tp._enabled = function(enabled, ignoreTimeline) {\n\t\t\tif (!_tickerActive) {\n\t\t\t\t_ticker.wake();\n\t\t\t}\n\t\t\tif (enabled && this._gc) {\n\t\t\t\tvar targets = this._targets,\n\t\t\t\t\ti;\n\t\t\t\tif (targets) {\n\t\t\t\t\ti = targets.length;\n\t\t\t\t\twhile (--i > -1) {\n\t\t\t\t\t\tthis._siblings[i] = _register(targets[i], this, true);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tthis._siblings = _register(this.target, this, true);\n\t\t\t\t}\n\t\t\t}\n\t\t\tAnimation.prototype._enabled.call(this, enabled, ignoreTimeline);\n\t\t\tif (this._notifyPluginsOfEnabled) if (this._firstPT) {\n\t\t\t\treturn TweenLite._onPluginEvent((enabled ? \"_onEnable\" : \"_onDisable\"), this);\n\t\t\t}\n\t\t\treturn false;\n\t\t};\n\n\n//----TweenLite static methods -----------------------------------------------------\n\n\t\tTweenLite.to = function(target, duration, vars) {\n\t\t\treturn new TweenLite(target, duration, vars);\n\t\t};\n\n\t\tTweenLite.from = function(target, duration, vars) {\n\t\t\tvars.runBackwards = true;\n\t\t\tvars.immediateRender = (vars.immediateRender != false);\n\t\t\treturn new TweenLite(target, duration, vars);\n\t\t};\n\n\t\tTweenLite.fromTo = function(target, duration, fromVars, toVars) {\n\t\t\ttoVars.startAt = fromVars;\n\t\t\ttoVars.immediateRender = (toVars.immediateRender != false && fromVars.immediateRender != false);\n\t\t\treturn new TweenLite(target, duration, toVars);\n\t\t};\n\n\t\tTweenLite.delayedCall = function(delay, callback, params, scope, useFrames) {\n\t\t\treturn new TweenLite(callback, 0, {delay:delay, onComplete:callback, onCompleteParams:params, callbackScope:scope, onReverseComplete:callback, onReverseCompleteParams:params, immediateRender:false, lazy:false, useFrames:useFrames, overwrite:0});\n\t\t};\n\n\t\tTweenLite.set = function(target, vars) {\n\t\t\treturn new TweenLite(target, 0, vars);\n\t\t};\n\n\t\tTweenLite.getTweensOf = function(target, onlyActive) {\n\t\t\tif (target == null) { return []; }\n\t\t\ttarget = (typeof(target) !== \"string\") ? target : TweenLite.selector(target) || target;\n\t\t\tvar i, a, j, t;\n\t\t\tif ((_isArray(target) || _isSelector(target)) && typeof(target[0]) !== \"number\") {\n\t\t\t\ti = target.length;\n\t\t\t\ta = [];\n\t\t\t\twhile (--i > -1) {\n\t\t\t\t\ta = a.concat(TweenLite.getTweensOf(target[i], onlyActive));\n\t\t\t\t}\n\t\t\t\ti = a.length;\n\t\t\t\t//now get rid of any duplicates (tweens of arrays of objects could cause duplicates)\n\t\t\t\twhile (--i > -1) {\n\t\t\t\t\tt = a[i];\n\t\t\t\t\tj = i;\n\t\t\t\t\twhile (--j > -1) {\n\t\t\t\t\t\tif (t === a[j]) {\n\t\t\t\t\t\t\ta.splice(i, 1);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else if (target._gsTweenID) {\n\t\t\t\ta = _register(target).concat();\n\t\t\t\ti = a.length;\n\t\t\t\twhile (--i > -1) {\n\t\t\t\t\tif (a[i]._gc || (onlyActive && !a[i].isActive())) {\n\t\t\t\t\t\ta.splice(i, 1);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn a || [];\n\t\t};\n\n\t\tTweenLite.killTweensOf = TweenLite.killDelayedCallsTo = function(target, onlyActive, vars) {\n\t\t\tif (typeof(onlyActive) === \"object\") {\n\t\t\t\tvars = onlyActive; //for backwards compatibility (before \"onlyActive\" parameter was inserted)\n\t\t\t\tonlyActive = false;\n\t\t\t}\n\t\t\tvar a = TweenLite.getTweensOf(target, onlyActive),\n\t\t\t\ti = a.length;\n\t\t\twhile (--i > -1) {\n\t\t\t\ta[i]._kill(vars, target);\n\t\t\t}\n\t\t};\n\n\n\n/*\n * ----------------------------------------------------------------\n * TweenPlugin   (could easily be split out as a separate file/class, but included for ease of use (so that people don't need to include another script call before loading plugins which is easy to forget)\n * ----------------------------------------------------------------\n */\n\t\tvar TweenPlugin = _class(\"plugins.TweenPlugin\", function(props, priority) {\n\t\t\t\t\tthis._overwriteProps = (props || \"\").split(\",\");\n\t\t\t\t\tthis._propName = this._overwriteProps[0];\n\t\t\t\t\tthis._priority = priority || 0;\n\t\t\t\t\tthis._super = TweenPlugin.prototype;\n\t\t\t\t}, true);\n\n\t\tp = TweenPlugin.prototype;\n\t\tTweenPlugin.version = \"1.19.0\";\n\t\tTweenPlugin.API = 2;\n\t\tp._firstPT = null;\n\t\tp._addTween = _addPropTween;\n\t\tp.setRatio = _setRatio;\n\n\t\tp._kill = function(lookup) {\n\t\t\tvar a = this._overwriteProps,\n\t\t\t\tpt = this._firstPT,\n\t\t\t\ti;\n\t\t\tif (lookup[this._propName] != null) {\n\t\t\t\tthis._overwriteProps = [];\n\t\t\t} else {\n\t\t\t\ti = a.length;\n\t\t\t\twhile (--i > -1) {\n\t\t\t\t\tif (lookup[a[i]] != null) {\n\t\t\t\t\t\ta.splice(i, 1);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\twhile (pt) {\n\t\t\t\tif (lookup[pt.n] != null) {\n\t\t\t\t\tif (pt._next) {\n\t\t\t\t\t\tpt._next._prev = pt._prev;\n\t\t\t\t\t}\n\t\t\t\t\tif (pt._prev) {\n\t\t\t\t\t\tpt._prev._next = pt._next;\n\t\t\t\t\t\tpt._prev = null;\n\t\t\t\t\t} else if (this._firstPT === pt) {\n\t\t\t\t\t\tthis._firstPT = pt._next;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tpt = pt._next;\n\t\t\t}\n\t\t\treturn false;\n\t\t};\n\n\t\tp._mod = p._roundProps = function(lookup) {\n\t\t\tvar pt = this._firstPT,\n\t\t\t\tval;\n\t\t\twhile (pt) {\n\t\t\t\tval = lookup[this._propName] || (pt.n != null && lookup[ pt.n.split(this._propName + \"_\").join(\"\") ]);\n\t\t\t\tif (val && typeof(val) === \"function\") { //some properties that are very plugin-specific add a prefix named after the _propName plus an underscore, so we need to ignore that extra stuff here.\n\t\t\t\t\tif (pt.f === 2) {\n\t\t\t\t\t\tpt.t._applyPT.m = val;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tpt.m = val;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tpt = pt._next;\n\t\t\t}\n\t\t};\n\n\t\tTweenLite._onPluginEvent = function(type, tween) {\n\t\t\tvar pt = tween._firstPT,\n\t\t\t\tchanged, pt2, first, last, next;\n\t\t\tif (type === \"_onInitAllProps\") {\n\t\t\t\t//sorts the PropTween linked list in order of priority because some plugins need to render earlier/later than others, like MotionBlurPlugin applies its effects after all x/y/alpha tweens have rendered on each frame.\n\t\t\t\twhile (pt) {\n\t\t\t\t\tnext = pt._next;\n\t\t\t\t\tpt2 = first;\n\t\t\t\t\twhile (pt2 && pt2.pr > pt.pr) {\n\t\t\t\t\t\tpt2 = pt2._next;\n\t\t\t\t\t}\n\t\t\t\t\tif ((pt._prev = pt2 ? pt2._prev : last)) {\n\t\t\t\t\t\tpt._prev._next = pt;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tfirst = pt;\n\t\t\t\t\t}\n\t\t\t\t\tif ((pt._next = pt2)) {\n\t\t\t\t\t\tpt2._prev = pt;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tlast = pt;\n\t\t\t\t\t}\n\t\t\t\t\tpt = next;\n\t\t\t\t}\n\t\t\t\tpt = tween._firstPT = first;\n\t\t\t}\n\t\t\twhile (pt) {\n\t\t\t\tif (pt.pg) if (typeof(pt.t[type]) === \"function\") if (pt.t[type]()) {\n\t\t\t\t\tchanged = true;\n\t\t\t\t}\n\t\t\t\tpt = pt._next;\n\t\t\t}\n\t\t\treturn changed;\n\t\t};\n\n\t\tTweenPlugin.activate = function(plugins) {\n\t\t\tvar i = plugins.length;\n\t\t\twhile (--i > -1) {\n\t\t\t\tif (plugins[i].API === TweenPlugin.API) {\n\t\t\t\t\t_plugins[(new plugins[i]())._propName] = plugins[i];\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t};\n\n\t\t//provides a more concise way to define plugins that have no dependencies besides TweenPlugin and TweenLite, wrapping common boilerplate stuff into one function (added in 1.9.0). You don't NEED to use this to define a plugin - the old way still works and can be useful in certain (rare) situations.\n\t\t_gsDefine.plugin = function(config) {\n\t\t\tif (!config || !config.propName || !config.init || !config.API) { throw \"illegal plugin definition.\"; }\n\t\t\tvar propName = config.propName,\n\t\t\t\tpriority = config.priority || 0,\n\t\t\t\toverwriteProps = config.overwriteProps,\n\t\t\t\tmap = {init:\"_onInitTween\", set:\"setRatio\", kill:\"_kill\", round:\"_mod\", mod:\"_mod\", initAll:\"_onInitAllProps\"},\n\t\t\t\tPlugin = _class(\"plugins.\" + propName.charAt(0).toUpperCase() + propName.substr(1) + \"Plugin\",\n\t\t\t\t\tfunction() {\n\t\t\t\t\t\tTweenPlugin.call(this, propName, priority);\n\t\t\t\t\t\tthis._overwriteProps = overwriteProps || [];\n\t\t\t\t\t}, (config.global === true)),\n\t\t\t\tp = Plugin.prototype = new TweenPlugin(propName),\n\t\t\t\tprop;\n\t\t\tp.constructor = Plugin;\n\t\t\tPlugin.API = config.API;\n\t\t\tfor (prop in map) {\n\t\t\t\tif (typeof(config[prop]) === \"function\") {\n\t\t\t\t\tp[map[prop]] = config[prop];\n\t\t\t\t}\n\t\t\t}\n\t\t\tPlugin.version = config.version;\n\t\t\tTweenPlugin.activate([Plugin]);\n\t\t\treturn Plugin;\n\t\t};\n\n\n\t\t//now run through all the dependencies discovered and if any are missing, log that to the console as a warning. This is why it's best to have TweenLite load last - it can check all the dependencies for you.\n\t\ta = window._gsQueue;\n\t\tif (a) {\n\t\t\tfor (i = 0; i < a.length; i++) {\n\t\t\t\ta[i]();\n\t\t\t}\n\t\t\tfor (p in _defLookup) {\n\t\t\t\tif (!_defLookup[p].func) {\n\t\t\t\t\twindow.console.log(\"GSAP encountered missing dependency: \" + p);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t_tickerActive = false; //ensures that the first official animation forces a ticker.tick() to update the time when it is instantiated\n\n\t\treturn TweenLite;\n\n})(_gsScope, \"TweenLite\");\n\nvar globals = _gsScope.GreenSockGlobals;\nvar nonGlobals = globals.com.greensock;\nvar SimpleTimeline = nonGlobals.core.SimpleTimeline;\nvar Animation = nonGlobals.core.Animation;\nvar Ease = globals.Ease;\nvar Linear = globals.Linear;\nvar Power1 = globals.Power1;\nvar Power2 = globals.Power2;\nvar Power3 = globals.Power3;\nvar Power4 = globals.Power4;\nvar TweenPlugin = globals.TweenPlugin;\nvar EventDispatcher = nonGlobals.events.EventDispatcher;\n\nclass IonicAppflowActivator {\r\n    constructor() {\r\n        this.$circles = [];\r\n        this.$lis = [];\r\n        this.screenshots = [];\r\n        this.active = null;\r\n        this.duration = 6;\r\n        this.quickDuration = .25;\r\n        this.r = 31;\r\n        this.gsRefs = [];\r\n        this.scrollPause = null;\r\n        this.circumference = this.r * 2 * Math.PI;\r\n        this.animationSelect = this.animationSelect.bind(this);\r\n        this.animationStart = this.animationStart.bind(this);\r\n    }\r\n    componentDidLoad() {\r\n        setTimeout(this.animationStart, 2000, 0);\r\n        const addCircle = (li, i) => {\r\n            this.$lis[i] = li;\r\n            this.$circles[i] = li.querySelector('.progress-ring__circle');\r\n            this.screenshots[i] = li.querySelector('a').dataset.screenshot;\r\n            if (li.nextElementSibling && li.nextElementSibling.nodeName === 'LI') {\r\n                addCircle(li.nextElementSibling, i + 1);\r\n            }\r\n        };\r\n        addCircle(this.el.querySelector('li:nth-child(1)'), 0);\r\n        this.active = 0;\r\n    }\r\n    animationStart(index) {\r\n        console.log('starting');\r\n        if (window.pageYOffset > 1000) {\r\n            console.log('pausing');\r\n            this.scrollPause = setTimeout(this.animationStart, 5000, 0);\r\n            return;\r\n        }\r\n        this.active = index;\r\n        this.$lis[index].classList.add('active');\r\n        TweenLite.to(this.$circles[index], .4, {\r\n            opacity: 1\r\n        });\r\n        TweenLite.to(this.$circles[index], this.duration, {\r\n            strokeDashoffset: 0,\r\n            onCompleteScope: this,\r\n            onComplete: () => {\r\n                this.animationStart(index >= this.$circles.length - 1 ? 0 : index + 1);\r\n                this.$lis[index].classList.remove('active');\r\n                TweenLite.to(this.$circles[index], .2, {\r\n                    opacity: 0,\r\n                    onCompleteScope: this,\r\n                    onComplete: () => {\r\n                        TweenLite.to(this.$circles[index], 0, {\r\n                            strokeDashoffset: this.circumference,\r\n                            lazy: true\r\n                        });\r\n                    }\r\n                });\r\n            }\r\n        });\r\n    }\r\n    animationSelect(index) {\r\n        this.$lis[index].classList.add('active');\r\n        this.active = index;\r\n        if (this.scrollPause) {\r\n            clearTimeout(this.scrollPause);\r\n        }\r\n        this.animationStopOthers(index);\r\n        TweenLite.to(this.$circles[index], this.quickDuration, {\r\n            strokeDashoffset: 0,\r\n            opacity: 1,\r\n            onCompleteScope: this,\r\n            onComplete: () => {\r\n                this.animationStopOthers(index);\r\n            }\r\n        });\r\n    }\r\n    animationRestart(index) {\r\n        this.animationStopOthers(index);\r\n        TweenLite.to(this.$circles[index], .5, {\r\n            strokeDashoffset: this.circumference * -1,\r\n            lazy: true,\r\n            onCompleteScope: this,\r\n            onComplete: () => {\r\n                TweenLite.to(this.$circles[index], 0, {\r\n                    strokeDashoffset: this.circumference,\r\n                    opacity: 0,\r\n                    lazy: true,\r\n                    onCompleteScope: this,\r\n                    onComplete: () => {\r\n                        this.animationStart(index);\r\n                    }\r\n                });\r\n            }\r\n        });\r\n    }\r\n    animationStopOthers(index) {\r\n        const circles = [];\r\n        this.$circles.forEach((circle, i) => {\r\n            if (i != index) {\r\n                circles.push(circle);\r\n                this.$lis[i].classList.remove('active');\r\n            }\r\n        });\r\n        TweenLite.to(circles, .2, {\r\n            opacity: 0,\r\n            lazy: true,\r\n            onCompleteScope: this,\r\n            onComplete: () => {\r\n                TweenLite.to(circles, 0, {\r\n                    strokeDashoffset: this.circumference,\r\n                    opacity: 0,\r\n                    lazy: true\r\n                });\r\n            }\r\n        });\r\n    }\r\n    circle(percent = 0) {\r\n        return (h(\"svg\", { class: \"progress-ring\", height: \"64\", width: \"64\" },\r\n            h(\"circle\", { class: \"progress-ring__circle\", stroke: \"#6C89F7\", \"stroke-width\": \"2\", fill: \"transparent\", r: this.r, cx: \"32\", cy: \"32\", style: {\r\n                    strokeDasharray: `${this.circumference} ${this.circumference}`,\r\n                    strokeDashoffset: this.circumference - percent / 100 * this.circumference\r\n                } })));\r\n    }\r\n    render() {\r\n        return ([\r\n            h(\"div\", { class: \"app-screenshot\" }, this.screenshots.map((screenshot, i) => h(\"img\", { class: i === this.active ? 'active' : 'inactive', src: screenshot }))),\r\n            h(\"nav\", null,\r\n                h(\"ul\", null,\r\n                    h(\"li\", { onMouseEnter: () => this.animationSelect(0), onMouseLeave: () => this.animationRestart(0) },\r\n                        this.circle(),\r\n                        h(\"slot\", { name: \"1\" })),\r\n                    h(\"li\", { onMouseEnter: () => this.animationSelect(1), onMouseLeave: () => this.animationRestart(1) },\r\n                        this.circle(),\r\n                        h(\"slot\", { name: \"2\" })),\r\n                    h(\"li\", { onMouseEnter: () => this.animationSelect(2), onMouseLeave: () => this.animationRestart(2) },\r\n                        this.circle(),\r\n                        h(\"slot\", { name: \"3\" }))))\r\n        ]);\r\n    }\r\n    static get is() { return \"ionic-appflow-activator\"; }\r\n    static get properties() { return {\r\n        \"$circles\": {\r\n            \"state\": true\r\n        },\r\n        \"$lis\": {\r\n            \"state\": true\r\n        },\r\n        \"active\": {\r\n            \"state\": true\r\n        },\r\n        \"el\": {\r\n            \"elementRef\": true\r\n        },\r\n        \"screenshots\": {\r\n            \"state\": true\r\n        }\r\n    }; }\r\n    static get style() { return \"ionic-appflow-activator nav{background:#fff;position:-webkit-sticky;position:sticky;top:100px;width:100%;margin-top:100px}ionic-appflow-activator ul{display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between;max-width:100%;width:600px;padding-left:10px;padding-right:10px;margin-top:-44px;margin-right:auto;margin-left:auto}ionic-appflow-activator li{width:120px;position:relative;list-style:none}ionic-appflow-activator .progress-ring{position:absolute;top:0;left:calc(50% - 32px);pointer-events:none}ionic-appflow-activator .progress-ring__circle{opacity:0;-webkit-transform:rotate(-90deg);transform:rotate(-90deg);-webkit-transform-origin:50% 50%;transform-origin:50% 50%}ionic-appflow-activator a{text-align:center;display:block;padding-top:64px;cursor:pointer}ionic-appflow-activator a .icon,ionic-appflow-activator a .icon-active{position:absolute;border-radius:50%;height:56px;width:56px;top:4px;left:calc(50% - 28px);-webkit-transition:opacity .2s ease,transform .2s ease;transition:opacity .2s ease,transform .2s ease}ionic-appflow-activator a .icon-active{opacity:0;-webkit-transform:scale(1.1);transform:scale(1.1);-webkit-transition:opacity .2s ease,transform .2s ease;transition:opacity .2s ease,transform .2s ease}ionic-appflow-activator a span{font-size:14px;line-height:22px;text-align:center;letter-spacing:.06em;text-transform:uppercase;font-weight:600;color:#92a1b3;-webkit-transition:color .2s ease;transition:color .2s ease}ionic-appflow-activator .active .icon{-webkit-transform:scale(1.1);transform:scale(1.1);opacity:0}ionic-appflow-activator .active .icon-active{opacity:1;-webkit-transform:scale(1);transform:scale(1)}ionic-appflow-activator .active span{color:#6c89f7}ionic-appflow-activator .app-screenshot{position:relative}ionic-appflow-activator .app-screenshot img{position:absolute;top:0;right:0;bottom:0;left:0;opacity:0;-webkit-transform:scale(1.01);transform:scale(1.01);-webkit-transition:opacity .2s ease,transform .2s ease;transition:opacity .2s ease,transform .2s ease}ionic-appflow-activator .app-screenshot img.active{opacity:1;-webkit-transform:none;transform:none}\\@-webkit-keyframes full-circle{to{stroke-dashoffset:0}}\\@keyframes full-circle{to{stroke-dashoffset:0}}\"; }\r\n}\n\nexport { IonicAppflowActivator };\n"
  },
  {
    "path": "content/js/stencil/esm/es2017/build/index.js",
    "content": "import { h } from '../ionic-site-components.core.js';\n"
  },
  {
    "path": "content/js/stencil/esm/es2017/build/lo9utgpp.entry.js",
    "content": "import { h } from '../ionic-site-components.core.js';\n\nclass IonicBarChart {\r\n    constructor() {\r\n    }\r\n    componentWillLoad() {\r\n    }\r\n    componentDidLoad() {\r\n    }\r\n    hexToRgb(hex) {\r\n        var shorthandRegex = /^#?([a-f\\d])([a-f\\d])([a-f\\d])$/i;\r\n        hex = hex.replace(shorthandRegex, function (_, r, g, b) {\r\n            return r + r + g + g + b + b;\r\n        });\r\n        var result = /^\\s?#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i.exec(hex);\r\n        return result ?\r\n            `${parseInt(result[1], 16)}, ${parseInt(result[2], 16)}, ` +\r\n                `${parseInt(result[3], 16)}` : null;\r\n    }\r\n    prepareData() {\r\n        let max = 0;\r\n        const color = this.color ? this.color.split(',') : ['#92E1A7', '#51A7FF'];\r\n        const dataObj = JSON.parse(this.data.replace(/'/g, '\"'));\r\n        return Object.keys(dataObj).map((key) => {\r\n            if (max < dataObj[key]) {\r\n                max = dataObj[key];\r\n            }\r\n            return {\r\n                name: key,\r\n                value: parseInt(dataObj[key], 10)\r\n            };\r\n        }).map((item, i) => {\r\n            return Object.assign({}, item, { styles: {\r\n                    bar: {\r\n                        width: `${Math.round((item.value / max) * 100)}%`,\r\n                        background: i > 1 ?\r\n                            `rgba(91,112,139) linear-gradient(to right, ${color.map(item => `rgba(${this.hexToRgb(item)}, .2)`).join(', ')})` :\r\n                            `linear-gradient(to right, ${color.join(', ')})`\r\n                    },\r\n                    text: {\r\n                        color: i > 1 ? '#5B708B' : color[color.length - 1]\r\n                    }\r\n                } });\r\n        });\r\n    }\r\n    render() {\r\n        return [\r\n            h(\"figure\", null, this.prepareData().map(item => {\r\n                return [\r\n                    h(\"div\", { class: \"bar-container\" },\r\n                        h(\"div\", { class: \"bar\", style: item.styles.bar },\r\n                            h(\"span\", { style: item.styles.text },\r\n                                item.value,\r\n                                \"%\"))),\r\n                    h(\"strong\", null, item.name)\r\n                ];\r\n            }))\r\n        ];\r\n    }\r\n    static get is() { return \"ionic-bar-chart\"; }\r\n    static get properties() { return {\r\n        \"color\": {\r\n            \"type\": String,\r\n            \"attr\": \"color\"\r\n        },\r\n        \"data\": {\r\n            \"type\": String,\r\n            \"attr\": \"data\"\r\n        }\r\n    }; }\r\n    static get style() { return \"ionic-bar-chart{font-style:normal;font-weight:400;line-height:normal;font-size:16px;display:block;letter-spacing:-.04em}ionic-bar-chart .bar-container{width:100%;padding-right:50px;max-width:697px}ionic-bar-chart .bar{height:12px;position:relative;border-radius:2px}ionic-bar-chart .bar span{position:absolute;right:-40px;font-weight:500;top:-3px}ionic-bar-chart strong{margin-top:10px;display:block;font-weight:400;margin-bottom:34px}\"; }\r\n}\n\nexport { IonicBarChart };\n"
  },
  {
    "path": "content/js/stencil/esm/es2017/build/lo9utgpp.sc.entry.js",
    "content": "import { h } from '../ionic-site-components.core.js';\n\nclass IonicBarChart {\r\n    constructor() {\r\n    }\r\n    componentWillLoad() {\r\n    }\r\n    componentDidLoad() {\r\n    }\r\n    hexToRgb(hex) {\r\n        var shorthandRegex = /^#?([a-f\\d])([a-f\\d])([a-f\\d])$/i;\r\n        hex = hex.replace(shorthandRegex, function (_, r, g, b) {\r\n            return r + r + g + g + b + b;\r\n        });\r\n        var result = /^\\s?#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i.exec(hex);\r\n        return result ?\r\n            `${parseInt(result[1], 16)}, ${parseInt(result[2], 16)}, ` +\r\n                `${parseInt(result[3], 16)}` : null;\r\n    }\r\n    prepareData() {\r\n        let max = 0;\r\n        const color = this.color ? this.color.split(',') : ['#92E1A7', '#51A7FF'];\r\n        const dataObj = JSON.parse(this.data.replace(/'/g, '\"'));\r\n        return Object.keys(dataObj).map((key) => {\r\n            if (max < dataObj[key]) {\r\n                max = dataObj[key];\r\n            }\r\n            return {\r\n                name: key,\r\n                value: parseInt(dataObj[key], 10)\r\n            };\r\n        }).map((item, i) => {\r\n            return Object.assign({}, item, { styles: {\r\n                    bar: {\r\n                        width: `${Math.round((item.value / max) * 100)}%`,\r\n                        background: i > 1 ?\r\n                            `rgba(91,112,139) linear-gradient(to right, ${color.map(item => `rgba(${this.hexToRgb(item)}, .2)`).join(', ')})` :\r\n                            `linear-gradient(to right, ${color.join(', ')})`\r\n                    },\r\n                    text: {\r\n                        color: i > 1 ? '#5B708B' : color[color.length - 1]\r\n                    }\r\n                } });\r\n        });\r\n    }\r\n    render() {\r\n        return [\r\n            h(\"figure\", null, this.prepareData().map(item => {\r\n                return [\r\n                    h(\"div\", { class: \"bar-container\" },\r\n                        h(\"div\", { class: \"bar\", style: item.styles.bar },\r\n                            h(\"span\", { style: item.styles.text },\r\n                                item.value,\r\n                                \"%\"))),\r\n                    h(\"strong\", null, item.name)\r\n                ];\r\n            }))\r\n        ];\r\n    }\r\n    static get is() { return \"ionic-bar-chart\"; }\r\n    static get properties() { return {\r\n        \"color\": {\r\n            \"type\": String,\r\n            \"attr\": \"color\"\r\n        },\r\n        \"data\": {\r\n            \"type\": String,\r\n            \"attr\": \"data\"\r\n        }\r\n    }; }\r\n    static get style() { return \"ionic-bar-chart{font-style:normal;font-weight:400;line-height:normal;font-size:16px;display:block;letter-spacing:-.04em}ionic-bar-chart .bar-container{width:100%;padding-right:50px;max-width:697px}ionic-bar-chart .bar{height:12px;position:relative;border-radius:2px}ionic-bar-chart .bar span{position:absolute;right:-40px;font-weight:500;top:-3px}ionic-bar-chart strong{margin-top:10px;display:block;font-weight:400;margin-bottom:34px}\"; }\r\n}\n\nexport { IonicBarChart };\n"
  },
  {
    "path": "content/js/stencil/esm/es2017/build/m0trkizf.entry.js",
    "content": "import { h } from '../ionic-site-components.core.js';\n\nclass IonicToggleButton {\r\n    constructor() {\r\n        this.selected = false;\r\n    }\r\n    deselect() {\r\n        this.selected = false;\r\n    }\r\n    select() {\r\n        this.selected = true;\r\n    }\r\n    handleSelected() {\r\n        this.toggleSelected.emit(this);\r\n    }\r\n    hostData() {\r\n        return {\r\n            class: {\r\n                selected: this.selected\r\n            }\r\n        };\r\n    }\r\n    render() {\r\n        return (h(\"div\", { onClick: _ => this.handleSelected() }, this.title));\r\n    }\r\n    static get is() { return \"ionic-toggle-button\"; }\r\n    static get encapsulation() { return \"shadow\"; }\r\n    static get properties() { return {\r\n        \"deselect\": {\r\n            \"method\": true\r\n        },\r\n        \"select\": {\r\n            \"method\": true\r\n        },\r\n        \"selected\": {\r\n            \"state\": true\r\n        },\r\n        \"tab\": {\r\n            \"type\": String,\r\n            \"attr\": \"tab\"\r\n        },\r\n        \"title\": {\r\n            \"type\": String,\r\n            \"attr\": \"title\"\r\n        }\r\n    }; }\r\n    static get events() { return [{\r\n            \"name\": \"toggleSelected\",\r\n            \"method\": \"toggleSelected\",\r\n            \"bubbles\": true,\r\n            \"cancelable\": true,\r\n            \"composed\": true\r\n        }]; }\r\n    static get style() { return \":host{display:-ms-flexbox;display:flex;text-decoration:none;cursor:pointer;border:1px solid #eee;text-align:center;font-size:14px}:host,div{-ms-flex:1;flex:1}div{padding:16px}:host(:last-child){border-left:none}:host(.selected){background-color:#4f8ef7;color:#fff;font-weight:700}\"; }\r\n}\n\nexport { IonicToggleButton };\n"
  },
  {
    "path": "content/js/stencil/esm/es2017/build/m0trkizf.sc.entry.js",
    "content": "import { h } from '../ionic-site-components.core.js';\n\nclass IonicToggleButton {\r\n    constructor() {\r\n        this.selected = false;\r\n    }\r\n    deselect() {\r\n        this.selected = false;\r\n    }\r\n    select() {\r\n        this.selected = true;\r\n    }\r\n    handleSelected() {\r\n        this.toggleSelected.emit(this);\r\n    }\r\n    hostData() {\r\n        return {\r\n            class: {\r\n                selected: this.selected\r\n            }\r\n        };\r\n    }\r\n    render() {\r\n        return (h(\"div\", { onClick: _ => this.handleSelected() }, this.title));\r\n    }\r\n    static get is() { return \"ionic-toggle-button\"; }\r\n    static get encapsulation() { return \"shadow\"; }\r\n    static get properties() { return {\r\n        \"deselect\": {\r\n            \"method\": true\r\n        },\r\n        \"select\": {\r\n            \"method\": true\r\n        },\r\n        \"selected\": {\r\n            \"state\": true\r\n        },\r\n        \"tab\": {\r\n            \"type\": String,\r\n            \"attr\": \"tab\"\r\n        },\r\n        \"title\": {\r\n            \"type\": String,\r\n            \"attr\": \"title\"\r\n        }\r\n    }; }\r\n    static get events() { return [{\r\n            \"name\": \"toggleSelected\",\r\n            \"method\": \"toggleSelected\",\r\n            \"bubbles\": true,\r\n            \"cancelable\": true,\r\n            \"composed\": true\r\n        }]; }\r\n    static get style() { return \".sc-ionic-toggle-button-h{display:-ms-flexbox;display:flex;text-decoration:none;cursor:pointer;border:1px solid #eee;text-align:center;font-size:14px}.sc-ionic-toggle-button-h, div.sc-ionic-toggle-button{-ms-flex:1;flex:1}div.sc-ionic-toggle-button{padding:16px}.sc-ionic-toggle-button-h:last-child{border-left:none}.selected.sc-ionic-toggle-button-h{background-color:#4f8ef7;color:#fff;font-weight:700}\"; }\r\n}\n\nexport { IonicToggleButton };\n"
  },
  {
    "path": "content/js/stencil/esm/es2017/build/nrj8jyt7.entry.js",
    "content": "import { h } from '../ionic-site-components.core.js';\n\nclass IonicToggleTab {\r\n    constructor() {\r\n        this.hidden = true;\r\n    }\r\n    hide() {\r\n        this.hidden = true;\r\n    }\r\n    show() {\r\n        this.hidden = false;\r\n    }\r\n    hostData() {\r\n        return {\r\n            style: {\r\n                display: this.hidden ? 'none' : 'block'\r\n            }\r\n        };\r\n    }\r\n    render() {\r\n        return (h(\"slot\", null));\r\n    }\r\n    static get is() { return \"ionic-toggle-tab\"; }\r\n    static get encapsulation() { return \"shadow\"; }\r\n    static get properties() { return {\r\n        \"hidden\": {\r\n            \"state\": true\r\n        },\r\n        \"hide\": {\r\n            \"method\": true\r\n        },\r\n        \"show\": {\r\n            \"method\": true\r\n        },\r\n        \"tab\": {\r\n            \"type\": String,\r\n            \"attr\": \"tab\"\r\n        }\r\n    }; }\r\n}\n\nexport { IonicToggleTab };\n"
  },
  {
    "path": "content/js/stencil/esm/es2017/build/nrj8jyt7.sc.entry.js",
    "content": "import { h } from '../ionic-site-components.core.js';\n\nclass IonicToggleTab {\r\n    constructor() {\r\n        this.hidden = true;\r\n    }\r\n    hide() {\r\n        this.hidden = true;\r\n    }\r\n    show() {\r\n        this.hidden = false;\r\n    }\r\n    hostData() {\r\n        return {\r\n            style: {\r\n                display: this.hidden ? 'none' : 'block'\r\n            }\r\n        };\r\n    }\r\n    render() {\r\n        return (h(\"slot\", null));\r\n    }\r\n    static get is() { return \"ionic-toggle-tab\"; }\r\n    static get encapsulation() { return \"shadow\"; }\r\n    static get properties() { return {\r\n        \"hidden\": {\r\n            \"state\": true\r\n        },\r\n        \"hide\": {\r\n            \"method\": true\r\n        },\r\n        \"show\": {\r\n            \"method\": true\r\n        },\r\n        \"tab\": {\r\n            \"type\": String,\r\n            \"attr\": \"tab\"\r\n        }\r\n    }; }\r\n}\n\nexport { IonicToggleTab };\n"
  },
  {
    "path": "content/js/stencil/esm/es2017/build/raorzqti.entry.js",
    "content": "import { h } from '../ionic-site-components.core.js';\n\nclass IonicQuickSignup {\r\n    constructor() {\r\n        this.showPricingNotice = false;\r\n        this.buttonColor = 'white';\r\n        this.transparentInput = false;\r\n    }\r\n    handleSubmit(_) {\r\n        var hsutk = window.getCookie('hubspotutk');\r\n        if (this.hsidRef)\r\n            this.hsidRef.value = hsutk;\r\n        return true;\r\n    }\r\n    render() {\r\n        return (h(\"form\", { class: `form quick-signup-form ${this.transparentInput ? 'transparent-input' : ''}`, role: \"form\", action: \"https://dashboard.ionicframework.com/signup\", method: \"GET\", onSubmit: e => this.handleSubmit(e) },\r\n            h(\"input\", { type: \"hidden\", name: \"hsid\", ref: e => this.hsidRef = e }),\r\n            h(\"input\", { type: \"hidden\", name: \"source\", value: \"homepage-quick\" }),\r\n            h(\"div\", { class: \"form-group\", id: \"field-email\" },\r\n                h(\"div\", { class: \"row\" },\r\n                    h(\"div\", { class: \"col-sm-8 input-col\" },\r\n                        h(\"input\", { class: \"form-control\", type: \"email\", placeholder: \"Enter your email address\", id: \"id_email\", name: \"email\", spellcheck: \"false\", required: true })),\r\n                    h(\"div\", { class: \"col-sm-4\" },\r\n                        h(\"button\", { type: \"submit\", class: `btn ${this.buttonColor}` }, \"Get started\")))),\r\n            this.showPricingNotice ? (h(\"div\", { class: \"form-group\" },\r\n                \"Ionic is free and open source for all developers. We also offer \",\r\n                h(\"a\", { href: \"/pricing\" }, \"enterprise options\"),\r\n                \" for teams that need support and premium features.\")) : null));\r\n    }\r\n    static get is() { return \"ionic-quick-signup\"; }\r\n    static get properties() { return {\r\n        \"buttonColor\": {\r\n            \"type\": String,\r\n            \"attr\": \"button-color\"\r\n        },\r\n        \"showPricingNotice\": {\r\n            \"type\": Boolean,\r\n            \"attr\": \"show-pricing-notice\"\r\n        },\r\n        \"transparentInput\": {\r\n            \"type\": Boolean,\r\n            \"attr\": \"transparent-input\"\r\n        }\r\n    }; }\r\n    static get style() { return \"ionic-quick-signup{display:block}.quick-signup-form{width:100%;margin-bottom:-15px}.quick-signup-form .input-col{padding-right:0}.quick-signup-form.transparent-input input{background-color:hsla(0,0%,100%,.2);border:none;border-radius:8px;color:#fff}.quick-signup-form.transparent-input input:focus{border:none}.quick-signup-form.transparent-input input::-webkit-input-placeholder{color:hsla(0,0%,100%,.8);font-weight:400}.quick-signup-form.transparent-input input:-ms-input-placeholder{color:hsla(0,0%,100%,.8);font-weight:400}.quick-signup-form.transparent-input input::-ms-input-placeholder{color:hsla(0,0%,100%,.8);font-weight:400}.quick-signup-form.transparent-input input::placeholder{color:hsla(0,0%,100%,.8);font-weight:400}.quick-signup-form.transparent-input button.btn.white{font-family:Eina,Helvetica Neue,Helvetica,sans-serif;border-radius:8px;text-transform:none;font-weight:600;padding-left:15px;padding-right:15px}.quick-signup-form input{padding:0 14px;height:54px;background-color:#fff;-webkit-box-shadow:none;box-shadow:none;border:2px solid transparent;margin:0;width:100%}.quick-signup-form input::-webkit-input-placeholder{color:#757575;font-weight:700}.quick-signup-form input:-ms-input-placeholder{color:#757575;font-weight:700}.quick-signup-form input::-ms-input-placeholder{color:#757575;font-weight:700}.quick-signup-form input::placeholder{color:#757575;font-weight:700}.quick-signup-form input:focus{border:2px solid #757575}.quick-signup-form button{margin-top:0}\\@media (max-width:991px){.quick-signup-form{max-width:60%;margin:auto}}\\@media (max-width:767px){.quick-signup-form .btn{margin-top:20px}}\"; }\r\n}\n\nexport { IonicQuickSignup };\n"
  },
  {
    "path": "content/js/stencil/esm/es2017/build/raorzqti.sc.entry.js",
    "content": "import { h } from '../ionic-site-components.core.js';\n\nclass IonicQuickSignup {\r\n    constructor() {\r\n        this.showPricingNotice = false;\r\n        this.buttonColor = 'white';\r\n        this.transparentInput = false;\r\n    }\r\n    handleSubmit(_) {\r\n        var hsutk = window.getCookie('hubspotutk');\r\n        if (this.hsidRef)\r\n            this.hsidRef.value = hsutk;\r\n        return true;\r\n    }\r\n    render() {\r\n        return (h(\"form\", { class: `form quick-signup-form ${this.transparentInput ? 'transparent-input' : ''}`, role: \"form\", action: \"https://dashboard.ionicframework.com/signup\", method: \"GET\", onSubmit: e => this.handleSubmit(e) },\r\n            h(\"input\", { type: \"hidden\", name: \"hsid\", ref: e => this.hsidRef = e }),\r\n            h(\"input\", { type: \"hidden\", name: \"source\", value: \"homepage-quick\" }),\r\n            h(\"div\", { class: \"form-group\", id: \"field-email\" },\r\n                h(\"div\", { class: \"row\" },\r\n                    h(\"div\", { class: \"col-sm-8 input-col\" },\r\n                        h(\"input\", { class: \"form-control\", type: \"email\", placeholder: \"Enter your email address\", id: \"id_email\", name: \"email\", spellcheck: \"false\", required: true })),\r\n                    h(\"div\", { class: \"col-sm-4\" },\r\n                        h(\"button\", { type: \"submit\", class: `btn ${this.buttonColor}` }, \"Get started\")))),\r\n            this.showPricingNotice ? (h(\"div\", { class: \"form-group\" },\r\n                \"Ionic is free and open source for all developers. We also offer \",\r\n                h(\"a\", { href: \"/pricing\" }, \"enterprise options\"),\r\n                \" for teams that need support and premium features.\")) : null));\r\n    }\r\n    static get is() { return \"ionic-quick-signup\"; }\r\n    static get properties() { return {\r\n        \"buttonColor\": {\r\n            \"type\": String,\r\n            \"attr\": \"button-color\"\r\n        },\r\n        \"showPricingNotice\": {\r\n            \"type\": Boolean,\r\n            \"attr\": \"show-pricing-notice\"\r\n        },\r\n        \"transparentInput\": {\r\n            \"type\": Boolean,\r\n            \"attr\": \"transparent-input\"\r\n        }\r\n    }; }\r\n    static get style() { return \"ionic-quick-signup{display:block}.quick-signup-form{width:100%;margin-bottom:-15px}.quick-signup-form .input-col{padding-right:0}.quick-signup-form.transparent-input input{background-color:hsla(0,0%,100%,.2);border:none;border-radius:8px;color:#fff}.quick-signup-form.transparent-input input:focus{border:none}.quick-signup-form.transparent-input input::-webkit-input-placeholder{color:hsla(0,0%,100%,.8);font-weight:400}.quick-signup-form.transparent-input input:-ms-input-placeholder{color:hsla(0,0%,100%,.8);font-weight:400}.quick-signup-form.transparent-input input::-ms-input-placeholder{color:hsla(0,0%,100%,.8);font-weight:400}.quick-signup-form.transparent-input input::placeholder{color:hsla(0,0%,100%,.8);font-weight:400}.quick-signup-form.transparent-input button.btn.white{font-family:Eina,Helvetica Neue,Helvetica,sans-serif;border-radius:8px;text-transform:none;font-weight:600;padding-left:15px;padding-right:15px}.quick-signup-form input{padding:0 14px;height:54px;background-color:#fff;-webkit-box-shadow:none;box-shadow:none;border:2px solid transparent;margin:0;width:100%}.quick-signup-form input::-webkit-input-placeholder{color:#757575;font-weight:700}.quick-signup-form input:-ms-input-placeholder{color:#757575;font-weight:700}.quick-signup-form input::-ms-input-placeholder{color:#757575;font-weight:700}.quick-signup-form input::placeholder{color:#757575;font-weight:700}.quick-signup-form input:focus{border:2px solid #757575}.quick-signup-form button{margin-top:0}\\@media (max-width:991px){.quick-signup-form{max-width:60%;margin:auto}}\\@media (max-width:767px){.quick-signup-form .btn{margin-top:20px}}\"; }\r\n}\n\nexport { IonicQuickSignup };\n"
  },
  {
    "path": "content/js/stencil/esm/es2017/build/uy47nvwg.entry.js",
    "content": "import { h } from '../ionic-site-components.core.js';\n\nclass IonicSlider {\r\n    constructor() {\r\n        this.slideCount = 1;\r\n        this.timer = null;\r\n        this.old = null;\r\n        this.upcoming = null;\r\n        this.slideDelay = 10000;\r\n        this.current = 0;\r\n        this.status = [];\r\n        this.ticker = 0;\r\n        this.next = () => {\r\n            this.goTo(this.current >= this.slideCount - 1 ? 0 : this.current + 1);\r\n        };\r\n        this.goTo = (slide) => {\r\n            if (!this.status[slide])\r\n                return;\r\n            clearTimeout(this.timer);\r\n            this.old = this.current;\r\n            setTimeout(this.deactivate, 1000);\r\n            this.upcoming = this.current = slide;\r\n            this.status[slide].visible = true;\r\n            this.status[slide].new = true;\r\n            setTimeout(this.activate, 500);\r\n            this.timer = setTimeout(this.next, this.slideDelay);\r\n            this.ticker++;\r\n        };\r\n        this.deactivate = () => {\r\n            this.status[this.old].active = false;\r\n            this.status[this.old].visible = false;\r\n            this.status[this.current].new = false;\r\n            this.ticker++;\r\n        };\r\n        this.activate = () => {\r\n            this.status[this.current].active = true;\r\n            this.ticker++;\r\n        };\r\n        this.getClasses.bind(this);\r\n        this.goTo.bind(this);\r\n        this.activate.bind(this);\r\n        this.deactivate.bind(this);\r\n        this.next.bind(this);\r\n        for (let i = 0; i < this.slideCount; i++) {\r\n            this.status.push({\r\n                visible: i === 0,\r\n                active: i === 0,\r\n                new: false\r\n            });\r\n        }\r\n    }\r\n    componentDidLoad() {\r\n        this.timer = setTimeout(this.next, this.slideDelay);\r\n    }\r\n    getClasses(item) {\r\n        return [\r\n            this.status[item].visible ? 'visible' : '',\r\n            this.status[item].active ? 'active' : '',\r\n            this.status[item].new ? 'new' : ''\r\n        ].join(' ');\r\n    }\r\n    render() {\r\n        return [\r\n            h(\"div\", { class: this.getClasses(0) },\r\n                h(\"slot\", { name: \"slide-0\" })),\r\n            h(\"div\", { class: this.getClasses(1) },\r\n                h(\"slot\", { name: \"slide-1\" })),\r\n            h(\"ul\", { class: \"dots\" },\r\n                h(\"li\", { class: this.current === 0 ? 'active' : '', onClick: this.goTo.bind(this, 0) }),\r\n                h(\"li\", { class: this.current === 1 ? 'active' : '', onClick: this.goTo.bind(this, 1) }))\r\n        ];\r\n    }\r\n    static get is() { return \"ionic-slider\"; }\r\n    static get properties() { return {\r\n        \"current\": {\r\n            \"state\": true\r\n        },\r\n        \"status\": {\r\n            \"state\": true\r\n        },\r\n        \"ticker\": {\r\n            \"state\": true\r\n        }\r\n    }; }\r\n    static get style() { return \"ionic-slider{position:relative}ionic-slider>div,ionic-slider [slot^=slide-]{position:absolute;top:0;right:0;bottom:0;left:0;overflow:hidden}ionic-slider>div{display:none;-webkit-animation:fadeIn .5s ease;animation:fadeIn .5s ease}ionic-slider>div.visible{display:block}ionic-slider>div.visible.new{z-index:1}ionic-slider .dots{position:absolute;top:0;bottom:0;left:20px;padding:0;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;-ms-flex-pack:center;justify-content:center;-ms-flex-line-pack:center;align-content:center;z-index:2}ionic-slider .dots li{height:8px;width:8px;border-radius:50%;border:1px solid hsla(0,0%,100%,.5);margin-bottom:4px;list-style:none;cursor:pointer;-webkit-transition:background-color .5s ease,border-color .5s ease;transition:background-color .5s ease,border-color .5s ease}ionic-slider .dots li.active{background-color:#fff;border-color:#fff}\"; }\r\n}\n\nexport { IonicSlider };\n"
  },
  {
    "path": "content/js/stencil/esm/es2017/build/uy47nvwg.sc.entry.js",
    "content": "import { h } from '../ionic-site-components.core.js';\n\nclass IonicSlider {\r\n    constructor() {\r\n        this.slideCount = 1;\r\n        this.timer = null;\r\n        this.old = null;\r\n        this.upcoming = null;\r\n        this.slideDelay = 10000;\r\n        this.current = 0;\r\n        this.status = [];\r\n        this.ticker = 0;\r\n        this.next = () => {\r\n            this.goTo(this.current >= this.slideCount - 1 ? 0 : this.current + 1);\r\n        };\r\n        this.goTo = (slide) => {\r\n            if (!this.status[slide])\r\n                return;\r\n            clearTimeout(this.timer);\r\n            this.old = this.current;\r\n            setTimeout(this.deactivate, 1000);\r\n            this.upcoming = this.current = slide;\r\n            this.status[slide].visible = true;\r\n            this.status[slide].new = true;\r\n            setTimeout(this.activate, 500);\r\n            this.timer = setTimeout(this.next, this.slideDelay);\r\n            this.ticker++;\r\n        };\r\n        this.deactivate = () => {\r\n            this.status[this.old].active = false;\r\n            this.status[this.old].visible = false;\r\n            this.status[this.current].new = false;\r\n            this.ticker++;\r\n        };\r\n        this.activate = () => {\r\n            this.status[this.current].active = true;\r\n            this.ticker++;\r\n        };\r\n        this.getClasses.bind(this);\r\n        this.goTo.bind(this);\r\n        this.activate.bind(this);\r\n        this.deactivate.bind(this);\r\n        this.next.bind(this);\r\n        for (let i = 0; i < this.slideCount; i++) {\r\n            this.status.push({\r\n                visible: i === 0,\r\n                active: i === 0,\r\n                new: false\r\n            });\r\n        }\r\n    }\r\n    componentDidLoad() {\r\n        this.timer = setTimeout(this.next, this.slideDelay);\r\n    }\r\n    getClasses(item) {\r\n        return [\r\n            this.status[item].visible ? 'visible' : '',\r\n            this.status[item].active ? 'active' : '',\r\n            this.status[item].new ? 'new' : ''\r\n        ].join(' ');\r\n    }\r\n    render() {\r\n        return [\r\n            h(\"div\", { class: this.getClasses(0) },\r\n                h(\"slot\", { name: \"slide-0\" })),\r\n            h(\"div\", { class: this.getClasses(1) },\r\n                h(\"slot\", { name: \"slide-1\" })),\r\n            h(\"ul\", { class: \"dots\" },\r\n                h(\"li\", { class: this.current === 0 ? 'active' : '', onClick: this.goTo.bind(this, 0) }),\r\n                h(\"li\", { class: this.current === 1 ? 'active' : '', onClick: this.goTo.bind(this, 1) }))\r\n        ];\r\n    }\r\n    static get is() { return \"ionic-slider\"; }\r\n    static get properties() { return {\r\n        \"current\": {\r\n            \"state\": true\r\n        },\r\n        \"status\": {\r\n            \"state\": true\r\n        },\r\n        \"ticker\": {\r\n            \"state\": true\r\n        }\r\n    }; }\r\n    static get style() { return \"ionic-slider{position:relative}ionic-slider>div,ionic-slider [slot^=slide-]{position:absolute;top:0;right:0;bottom:0;left:0;overflow:hidden}ionic-slider>div{display:none;-webkit-animation:fadeIn .5s ease;animation:fadeIn .5s ease}ionic-slider>div.visible{display:block}ionic-slider>div.visible.new{z-index:1}ionic-slider .dots{position:absolute;top:0;bottom:0;left:20px;padding:0;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;-ms-flex-pack:center;justify-content:center;-ms-flex-line-pack:center;align-content:center;z-index:2}ionic-slider .dots li{height:8px;width:8px;border-radius:50%;border:1px solid hsla(0,0%,100%,.5);margin-bottom:4px;list-style:none;cursor:pointer;-webkit-transition:background-color .5s ease,border-color .5s ease;transition:background-color .5s ease,border-color .5s ease}ionic-slider .dots li.active{background-color:#fff;border-color:#fff}\"; }\r\n}\n\nexport { IonicSlider };\n"
  },
  {
    "path": "content/js/stencil/esm/es2017/build/uyiaiqzf.entry.js",
    "content": "import { h } from '../ionic-site-components.core.js';\n\nclass IconExternal {\r\n    render() {\r\n        return (h(\"svg\", { class: \"new-tab\", viewBox: \"0 0 12 12\", \"data-ssrc\": \"59.1\" },\r\n            h(\"g\", { transform: \"translate(0,1)\", \"data-ssrc\": \"59.0\" },\r\n                h(\"rect\", { class: \"new-tab__box\", x: \"0\", y: \"2\", width: \"9\", height: \"9\", rx: \"1.5\", \"data-ssrc\": \"59.0.\" }),\r\n                h(\"path\", { class: \"new-tab__arrow\", d: \"M9.18198052,1 L6.5,1 L6.5,0 L11,0 L11,1 L11,4.5 L10,4.5 L10,1.59619408 L4.02512627,7.57106781 L3.31801948,6.86396103 L9.18198052,1 Z\", \"data-ssrc\": \"59.1.\" }))));\r\n    }\r\n    static get is() { return \"icon-external\"; }\r\n    static get style() { return \"icon-external{color:#a6b8d2;width:.8em;height:.8em;display:inline-block}icon-external svg{fill:currentColor}icon-external svg .new-tab__box{opacity:.5}icon-external svg .new-tab__arrow{-webkit-transition:transform .2s ease-out,fill .2s ease;transition:transform .2s ease-out,fill .2s ease;will-change:trasnform,fill}a:hover icon-external,icon-external:hover{color:#488aff}a:hover icon-external .new-tab__arrow,icon-external:hover .new-tab__arrow{-webkit-transform:translate(1px,-1px);transform:translate(1px,-1px)}\"; }\r\n}\n\nexport { IconExternal };\n"
  },
  {
    "path": "content/js/stencil/esm/es2017/build/uyiaiqzf.sc.entry.js",
    "content": "import { h } from '../ionic-site-components.core.js';\n\nclass IconExternal {\r\n    render() {\r\n        return (h(\"svg\", { class: \"new-tab\", viewBox: \"0 0 12 12\", \"data-ssrc\": \"59.1\" },\r\n            h(\"g\", { transform: \"translate(0,1)\", \"data-ssrc\": \"59.0\" },\r\n                h(\"rect\", { class: \"new-tab__box\", x: \"0\", y: \"2\", width: \"9\", height: \"9\", rx: \"1.5\", \"data-ssrc\": \"59.0.\" }),\r\n                h(\"path\", { class: \"new-tab__arrow\", d: \"M9.18198052,1 L6.5,1 L6.5,0 L11,0 L11,1 L11,4.5 L10,4.5 L10,1.59619408 L4.02512627,7.57106781 L3.31801948,6.86396103 L9.18198052,1 Z\", \"data-ssrc\": \"59.1.\" }))));\r\n    }\r\n    static get is() { return \"icon-external\"; }\r\n    static get style() { return \"icon-external{color:#a6b8d2;width:.8em;height:.8em;display:inline-block}icon-external svg{fill:currentColor}icon-external svg .new-tab__box{opacity:.5}icon-external svg .new-tab__arrow{-webkit-transition:transform .2s ease-out,fill .2s ease;transition:transform .2s ease-out,fill .2s ease;will-change:trasnform,fill}a:hover icon-external,icon-external:hover{color:#488aff}a:hover icon-external .new-tab__arrow,icon-external:hover .new-tab__arrow{-webkit-transform:translate(1px,-1px);transform:translate(1px,-1px)}\"; }\r\n}\n\nexport { IconExternal };\n"
  },
  {
    "path": "content/js/stencil/esm/es2017/build/z7r5cewq.entry.js",
    "content": "import { h } from '../ionic-site-components.core.js';\n\nclass IonicButton {\r\n    constructor() {\r\n        this.color = 'default';\r\n        this.type = 'button';\r\n        this.disabled = false;\r\n    }\r\n    render() {\r\n        if (this.disabled) {\r\n            return (h(\"button\", { class: this.color, type: this.type, disabled: true },\r\n                h(\"slot\", null)));\r\n        }\r\n        return (h(\"button\", { class: this.color, type: this.type },\r\n            h(\"slot\", null)));\r\n    }\r\n    static get is() { return \"ionic-button\"; }\r\n    static get properties() { return {\r\n        \"color\": {\r\n            \"type\": String,\r\n            \"attr\": \"color\"\r\n        },\r\n        \"disabled\": {\r\n            \"type\": Boolean,\r\n            \"attr\": \"disabled\"\r\n        },\r\n        \"type\": {\r\n            \"type\": String,\r\n            \"attr\": \"type\"\r\n        }\r\n    }; }\r\n    static get style() { return \"ionic-button button{border-radius:4px;padding:11px 15px 9px;font-size:16px;font-weight:500;-webkit-box-shadow:0 1px 3px rgba(0,0,0,.1);box-shadow:0 1px 3px rgba(0,0,0,.1);border:0;outline:none;height:100%;-webkit-transition:background-color .2s,border-color .3s,color .3s,-webkit-box-shadow .3s;transition:background-color .2s,border-color .3s,color .3s,-webkit-box-shadow .3s;transition:background-color .2s,border-color .3s,box-shadow .3s,color .3s;transition:background-color .2s,border-color .3s,box-shadow .3s,color .3s,-webkit-box-shadow .3s}ionic-button button.default{background:#488aff;color:#fff}ionic-button button.default:hover{background:#629aff}ionic-button button.default:active{background:#2f7aff}ionic-button button.white{background:#fff;border-color:#e8ebf1;color:#488aff}ionic-button button.white:active{background:#fafafa}ionic-button button:hover{-webkit-box-shadow:0 2px 5px rgba(0,0,0,.12);box-shadow:0 2px 5px rgba(0,0,0,.12)}ionic-button button:active{-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.1);box-shadow:inset 0 1px 2px rgba(0,0,0,.1)}ionic-button button:disabled{background:#e8ebf1;color:#fff;-webkit-box-shadow:none;box-shadow:none}\"; }\r\n}\n\nconst EmailIcon = () => (h(\"svg\", { width: \"20\", height: \"14\", viewBox: \"0 0 20 14\", fill: \"none\", xmlns: \"http://www.w3.org/2000/svg\" },\r\n    h(\"path\", { d: \"M19.8365 1.71514L14.6635 7.04323C14.625 7.08213 14.625 7.14046 14.6635 7.17935L18.2837 11.0782C18.5288 11.3261 18.5288 11.7248 18.2837 11.9727C18.1635 12.0942 18 12.1574 17.8413 12.1574C17.6827 12.1574 17.5192 12.0942 17.399 11.9727L13.7933 8.08844C13.7548 8.04954 13.6923 8.04954 13.6538 8.08844L12.774 8.99266C12.0385 9.74617 11.0625 10.1643 10.0144 10.1691C8.95192 10.174 7.94231 9.72187 7.19712 8.95863L6.35096 8.08844C6.3125 8.04954 6.25 8.04954 6.21154 8.08844L2.60577 11.9727C2.48558 12.0942 2.32212 12.1574 2.16346 12.1574C2.00481 12.1574 1.84135 12.0942 1.72115 11.9727C1.47596 11.7248 1.47596 11.3261 1.72115 11.0782L5.34135 7.17935C5.375 7.14046 5.375 7.08213 5.34135 7.04323L0.163462 1.71514C0.100962 1.65194 0 1.69569 0 1.7832V12.4443C0 13.2999 0.692308 13.9999 1.53846 13.9999H18.4615C19.3077 13.9999 20 13.2999 20 12.4443V1.7832C20 1.69569 19.8942 1.6568 19.8365 1.71514Z\", fill: \"#B2BECD\" }),\r\n    h(\"path\", { d: \"M10.0013 8.90121C10.7128 8.90121 11.3811 8.61925 11.8811 8.10394L19.4244 0.340297C19.1599 0.126396 18.833 0 18.4724 0H1.53493C1.17435 0 0.842623 0.126396 0.583008 0.340297L8.12628 8.10394C8.62147 8.61438 9.28974 8.90121 10.0013 8.90121Z\", fill: \"#B2BECD\" })));\n\nclass IonicNewsletterSignup {\r\n    constructor() {\r\n        this.placeholder = 'Email address';\r\n        this.buttonText = 'Subscribe';\r\n        this.darkMode = false;\r\n        this.homepageMode = false;\r\n        this.arrowMode = false;\r\n        this.lg = false;\r\n        this.kind = 'default';\r\n        this.isLoading = false;\r\n        this.hasSubmitted = false;\r\n        this.email = null;\r\n        this.hsFormIds = {\r\n            default: '76e5f69f-85fd-4579-afce-a1892d48bb32',\r\n            podcast: ''\r\n        };\r\n    }\r\n    handleEmailChange(event) {\r\n        this.email = event.target.value;\r\n    }\r\n    handleSubmit(e) {\r\n        e.preventDefault();\r\n        const email = this.email;\r\n        this.isLoading = true;\r\n        var xhr = new XMLHttpRequest();\r\n        xhr.open(\"POST\", \"/api/v1/newsletter\");\r\n        xhr.setRequestHeader(\"Content-Type\", \"application/json;charset=UTF-8\");\r\n        xhr.onreadystatechange = () => {\r\n            if (xhr.readyState === 4 && xhr.status === 200) {\r\n                this.isLoading = false;\r\n                var json = JSON.parse(xhr.responseText);\r\n                this.hasSubmitted = json.ok;\r\n                this.hubspotIdentify(email);\r\n            }\r\n        };\r\n        xhr.send(JSON.stringify({ email: this.email, podcast: this.kind === 'podcast' }));\r\n    }\r\n    hubspotIdentify(email) {\r\n        const _hsq = window['_hsq'] = window['_hsq'] || [];\r\n        _hsq.push([\"identify\", {\r\n                email: email\r\n            }]);\r\n        _hsq.push([\"trackEvent\", {\r\n                id: \"Signed Up for Newsletter\",\r\n                value: true\r\n            }]);\r\n        var xhr = new XMLHttpRequest();\r\n        var url = [\r\n            'https://api.hsforms.com/submissions/v3/integration/submit',\r\n            '3776657',\r\n            '76e5f69f-85fd-4579-afce-a1892d48bb32'\r\n        ].join('/');\r\n        xhr.open(\"POST\", url);\r\n        xhr.setRequestHeader(\"Content-Type\", \"application/json;charset=UTF-8\");\r\n        xhr.onreadystatechange = () => {\r\n            if (xhr.readyState === 4 && xhr.status === 200) {\r\n                var json = JSON.parse(xhr.responseText);\r\n                console.log(json);\r\n            }\r\n        };\r\n        xhr.send(JSON.stringify({\r\n            fields: [{\r\n                    name: 'email',\r\n                    value: this.email\r\n                }],\r\n            context: {\r\n                hutk: document.cookie.match(/hubspotutk=(.*?);/)[1],\r\n                pageUri: window.location.href,\r\n                pageName: document.title\r\n            }\r\n        }));\r\n    }\r\n    getFormClass() {\r\n        let str = this.darkMode ? 'dark' : '';\r\n        if (this.arrowMode) {\r\n            str += ' arrow';\r\n        }\r\n        if (this.homepageMode) {\r\n            str += ' homepage';\r\n        }\r\n        if (this.lg) {\r\n            str += ' lg';\r\n        }\r\n        return str;\r\n    }\r\n    render() {\r\n        return (h(\"form\", { onSubmit: (e) => this.handleSubmit(e), class: this.getFormClass() },\r\n            this.homepageMode ? h(EmailIcon, null) : '',\r\n            h(\"input\", { name: \"email\", type: \"email\", value: this.email, onInput: () => this.handleEmailChange(event), disabled: this.isLoading, placeholder: this.placeholder, required: true }),\r\n            h(\"ionic-button\", { color: this.darkMode ? 'white' : 'default', type: \"submit\", disabled: this.isLoading || this.hasSubmitted }, this.hasSubmitted ? 'Added!' :\r\n                this.arrowMode || this.homepageMode ?\r\n                    h(\"ion-icon\", { name: \"md-arrow-forward\" }) : this.buttonText)));\r\n    }\r\n    static get is() { return \"ionic-newsletter-signup\"; }\r\n    static get properties() { return {\r\n        \"arrowMode\": {\r\n            \"type\": Boolean,\r\n            \"attr\": \"arrow-mode\"\r\n        },\r\n        \"buttonText\": {\r\n            \"type\": String,\r\n            \"attr\": \"button-text\"\r\n        },\r\n        \"darkMode\": {\r\n            \"type\": Boolean,\r\n            \"attr\": \"dark-mode\"\r\n        },\r\n        \"email\": {\r\n            \"state\": true\r\n        },\r\n        \"hasSubmitted\": {\r\n            \"state\": true\r\n        },\r\n        \"homepageMode\": {\r\n            \"type\": Boolean,\r\n            \"attr\": \"homepage-mode\"\r\n        },\r\n        \"isLoading\": {\r\n            \"state\": true\r\n        },\r\n        \"kind\": {\r\n            \"type\": String,\r\n            \"attr\": \"kind\"\r\n        },\r\n        \"lg\": {\r\n            \"type\": Boolean,\r\n            \"attr\": \"lg\"\r\n        },\r\n        \"placeholder\": {\r\n            \"type\": String,\r\n            \"attr\": \"placeholder\"\r\n        }\r\n    }; }\r\n    static get style() { return \"ionic-newsletter-signup form{position:relative;display:-ms-flexbox;display:flex;border-collapse:separate;width:100%;height:40px}\\@media (max-width:991px){ionic-newsletter-signup form{max-width:calc(100% - 340px)}}\\@media (max-width:767px){ionic-newsletter-signup form{float:none;max-width:100%;margin-top:15px}}ionic-newsletter-signup form.dark input{color:#fff;-webkit-box-shadow:none;box-shadow:none}ionic-newsletter-signup form.dark input:hover{-webkit-box-shadow:0 1px 3px rgba(0,0,0,.15);box-shadow:0 1px 3px rgba(0,0,0,.15)}ionic-newsletter-signup form.dark input:focus{-webkit-box-shadow:0 1px 3px rgba(0,0,0,.1);box-shadow:0 1px 3px rgba(0,0,0,.1)}ionic-newsletter-signup form.dark input::-webkit-input-placeholder{color:#bbceef}ionic-newsletter-signup form.dark input:-ms-input-placeholder{color:#bbceef}ionic-newsletter-signup form.dark input::-ms-input-placeholder{color:#bbceef}ionic-newsletter-signup form.dark input::placeholder{color:#bbceef}ionic-newsletter-signup form.lg{height:48px}ionic-newsletter-signup form.lg input{padding:1px 17px 0;font-size:14px}ionic-newsletter-signup form.lg ionic-button button{padding:11px 12px}ionic-newsletter-signup form.arrow{border-radius:6px;-webkit-box-shadow:0 1px 3px rgba(0,16,44,.08),0 2px 4px rgba(0,16,44,.12);box-shadow:0 1px 3px rgba(0,16,44,.08),0 2px 4px rgba(0,16,44,.12);-webkit-transition:box-shadow .15s ease;transition:box-shadow .15s ease}ionic-newsletter-signup form.arrow:hover{-webkit-box-shadow:0 7px 14px rgba(0,16,44,.12),0 3px 6px rgba(0,16,44,.08);box-shadow:0 7px 14px rgba(0,16,44,.12),0 3px 6px rgba(0,16,44,.08)}ionic-newsletter-signup form.arrow input{border-radius:6px 0 0 6px;-webkit-box-shadow:none;box-shadow:none}ionic-newsletter-signup form.arrow input::-webkit-input-placeholder{color:#a8b0be;font-weight:400}ionic-newsletter-signup form.arrow input:-ms-input-placeholder{color:#a8b0be;font-weight:400}ionic-newsletter-signup form.arrow input::-ms-input-placeholder{color:#a8b0be;font-weight:400}ionic-newsletter-signup form.arrow input::placeholder{color:#a8b0be;font-weight:400}ionic-newsletter-signup form.arrow ionic-button button{background:#f0f5ff;color:#3880ff;font-size:23px;display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;border-radius:0 6px 6px 0}ionic-newsletter-signup form.arrow ionic-button button:hover{background:#ebf2ff}\\@media (max-width:991px){ionic-newsletter-signup form.arrow{max-width:100%}}ionic-newsletter-signup form.homepage{height:48px;border-radius:6px;background:#f8fafc;border:1px solid #e9edf3;-webkit-transition:border-color .2s,background-color .2s;transition:border-color .2s,background-color .2s}ionic-newsletter-signup form.homepage:hover{border-color:#73a6ff;background:#fff}ionic-newsletter-signup form.homepage svg{position:absolute;top:16px;left:16px}ionic-newsletter-signup form.homepage input{border-radius:6px 0 0 6px;-webkit-box-shadow:none;box-shadow:none;padding-left:46px}ionic-newsletter-signup form.homepage input::-webkit-input-placeholder{color:#a8b0be;font-weight:400}ionic-newsletter-signup form.homepage input:-ms-input-placeholder{color:#a8b0be;font-weight:400}ionic-newsletter-signup form.homepage input::-ms-input-placeholder{color:#a8b0be;font-weight:400}ionic-newsletter-signup form.homepage input::placeholder{color:#a8b0be;font-weight:400}ionic-newsletter-signup form.homepage ionic-button button{background:transparent;color:#7cabff;font-size:23px;display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-webkit-box-shadow:none;box-shadow:none;border-radius:0 6px 6px 0}ionic-newsletter-signup form.homepage ionic-button button:hover{color:#498aff;background:transparent}\\@media (max-width:991px){ionic-newsletter-signup form.homepage{max-width:100%}}ionic-newsletter-signup input{border:none;background:hsla(0,0%,100%,.2);border-radius:4px 0 0 4px;font-size:13px;color:#24282e;-webkit-box-shadow:none;box-shadow:none;font-weight:500;height:100%;outline:0;-ms-flex-positive:1;flex-grow:1;padding:0 16px 1px;-webkit-box-shadow:0 1px 3px rgba(0,0,0,.1);box-shadow:0 1px 3px rgba(0,0,0,.1);-webkit-transition:background .2s,box-shadow .2s;transition:background .2s,box-shadow .2s}ionic-newsletter-signup input:hover{-webkit-box-shadow:0 1px 3px rgba(0,0,0,.15);box-shadow:0 1px 3px rgba(0,0,0,.15)}ionic-newsletter-signup input:focus{-webkit-box-shadow:none;box-shadow:none;background:hsla(0,0%,100%,.25);-webkit-box-shadow:inset 0 0 2px rgba(0,0,0,.1);box-shadow:inset 0 0 2px rgba(0,0,0,.1)}ionic-newsletter-signup input::-webkit-input-placeholder{padding-left:0;color:#a1a9b6}ionic-newsletter-signup input:-ms-input-placeholder{padding-left:0;color:#a1a9b6}ionic-newsletter-signup input::-ms-input-placeholder{padding-left:0;color:#a1a9b6}ionic-newsletter-signup input::placeholder{padding-left:0;color:#a1a9b6}ionic-newsletter-signup ionic-button{height:100%}ionic-newsletter-signup ionic-button button{border-top-left-radius:0;border-bottom-left-radius:0;font-weight:500;font-size:14px;height:100%;padding:8px 9px 10px}\"; }\r\n}\n\nexport { IonicButton, IonicNewsletterSignup };\n"
  },
  {
    "path": "content/js/stencil/esm/es2017/build/z7r5cewq.sc.entry.js",
    "content": "import { h } from '../ionic-site-components.core.js';\n\nclass IonicButton {\r\n    constructor() {\r\n        this.color = 'default';\r\n        this.type = 'button';\r\n        this.disabled = false;\r\n    }\r\n    render() {\r\n        if (this.disabled) {\r\n            return (h(\"button\", { class: this.color, type: this.type, disabled: true },\r\n                h(\"slot\", null)));\r\n        }\r\n        return (h(\"button\", { class: this.color, type: this.type },\r\n            h(\"slot\", null)));\r\n    }\r\n    static get is() { return \"ionic-button\"; }\r\n    static get properties() { return {\r\n        \"color\": {\r\n            \"type\": String,\r\n            \"attr\": \"color\"\r\n        },\r\n        \"disabled\": {\r\n            \"type\": Boolean,\r\n            \"attr\": \"disabled\"\r\n        },\r\n        \"type\": {\r\n            \"type\": String,\r\n            \"attr\": \"type\"\r\n        }\r\n    }; }\r\n    static get style() { return \"ionic-button button{border-radius:4px;padding:11px 15px 9px;font-size:16px;font-weight:500;-webkit-box-shadow:0 1px 3px rgba(0,0,0,.1);box-shadow:0 1px 3px rgba(0,0,0,.1);border:0;outline:none;height:100%;-webkit-transition:background-color .2s,border-color .3s,color .3s,-webkit-box-shadow .3s;transition:background-color .2s,border-color .3s,color .3s,-webkit-box-shadow .3s;transition:background-color .2s,border-color .3s,box-shadow .3s,color .3s;transition:background-color .2s,border-color .3s,box-shadow .3s,color .3s,-webkit-box-shadow .3s}ionic-button button.default{background:#488aff;color:#fff}ionic-button button.default:hover{background:#629aff}ionic-button button.default:active{background:#2f7aff}ionic-button button.white{background:#fff;border-color:#e8ebf1;color:#488aff}ionic-button button.white:active{background:#fafafa}ionic-button button:hover{-webkit-box-shadow:0 2px 5px rgba(0,0,0,.12);box-shadow:0 2px 5px rgba(0,0,0,.12)}ionic-button button:active{-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.1);box-shadow:inset 0 1px 2px rgba(0,0,0,.1)}ionic-button button:disabled{background:#e8ebf1;color:#fff;-webkit-box-shadow:none;box-shadow:none}\"; }\r\n}\n\nconst EmailIcon = () => (h(\"svg\", { width: \"20\", height: \"14\", viewBox: \"0 0 20 14\", fill: \"none\", xmlns: \"http://www.w3.org/2000/svg\" },\r\n    h(\"path\", { d: \"M19.8365 1.71514L14.6635 7.04323C14.625 7.08213 14.625 7.14046 14.6635 7.17935L18.2837 11.0782C18.5288 11.3261 18.5288 11.7248 18.2837 11.9727C18.1635 12.0942 18 12.1574 17.8413 12.1574C17.6827 12.1574 17.5192 12.0942 17.399 11.9727L13.7933 8.08844C13.7548 8.04954 13.6923 8.04954 13.6538 8.08844L12.774 8.99266C12.0385 9.74617 11.0625 10.1643 10.0144 10.1691C8.95192 10.174 7.94231 9.72187 7.19712 8.95863L6.35096 8.08844C6.3125 8.04954 6.25 8.04954 6.21154 8.08844L2.60577 11.9727C2.48558 12.0942 2.32212 12.1574 2.16346 12.1574C2.00481 12.1574 1.84135 12.0942 1.72115 11.9727C1.47596 11.7248 1.47596 11.3261 1.72115 11.0782L5.34135 7.17935C5.375 7.14046 5.375 7.08213 5.34135 7.04323L0.163462 1.71514C0.100962 1.65194 0 1.69569 0 1.7832V12.4443C0 13.2999 0.692308 13.9999 1.53846 13.9999H18.4615C19.3077 13.9999 20 13.2999 20 12.4443V1.7832C20 1.69569 19.8942 1.6568 19.8365 1.71514Z\", fill: \"#B2BECD\" }),\r\n    h(\"path\", { d: \"M10.0013 8.90121C10.7128 8.90121 11.3811 8.61925 11.8811 8.10394L19.4244 0.340297C19.1599 0.126396 18.833 0 18.4724 0H1.53493C1.17435 0 0.842623 0.126396 0.583008 0.340297L8.12628 8.10394C8.62147 8.61438 9.28974 8.90121 10.0013 8.90121Z\", fill: \"#B2BECD\" })));\n\nclass IonicNewsletterSignup {\r\n    constructor() {\r\n        this.placeholder = 'Email address';\r\n        this.buttonText = 'Subscribe';\r\n        this.darkMode = false;\r\n        this.homepageMode = false;\r\n        this.arrowMode = false;\r\n        this.lg = false;\r\n        this.kind = 'default';\r\n        this.isLoading = false;\r\n        this.hasSubmitted = false;\r\n        this.email = null;\r\n        this.hsFormIds = {\r\n            default: '76e5f69f-85fd-4579-afce-a1892d48bb32',\r\n            podcast: ''\r\n        };\r\n    }\r\n    handleEmailChange(event) {\r\n        this.email = event.target.value;\r\n    }\r\n    handleSubmit(e) {\r\n        e.preventDefault();\r\n        const email = this.email;\r\n        this.isLoading = true;\r\n        var xhr = new XMLHttpRequest();\r\n        xhr.open(\"POST\", \"/api/v1/newsletter\");\r\n        xhr.setRequestHeader(\"Content-Type\", \"application/json;charset=UTF-8\");\r\n        xhr.onreadystatechange = () => {\r\n            if (xhr.readyState === 4 && xhr.status === 200) {\r\n                this.isLoading = false;\r\n                var json = JSON.parse(xhr.responseText);\r\n                this.hasSubmitted = json.ok;\r\n                this.hubspotIdentify(email);\r\n            }\r\n        };\r\n        xhr.send(JSON.stringify({ email: this.email, podcast: this.kind === 'podcast' }));\r\n    }\r\n    hubspotIdentify(email) {\r\n        const _hsq = window['_hsq'] = window['_hsq'] || [];\r\n        _hsq.push([\"identify\", {\r\n                email: email\r\n            }]);\r\n        _hsq.push([\"trackEvent\", {\r\n                id: \"Signed Up for Newsletter\",\r\n                value: true\r\n            }]);\r\n        var xhr = new XMLHttpRequest();\r\n        var url = [\r\n            'https://api.hsforms.com/submissions/v3/integration/submit',\r\n            '3776657',\r\n            '76e5f69f-85fd-4579-afce-a1892d48bb32'\r\n        ].join('/');\r\n        xhr.open(\"POST\", url);\r\n        xhr.setRequestHeader(\"Content-Type\", \"application/json;charset=UTF-8\");\r\n        xhr.onreadystatechange = () => {\r\n            if (xhr.readyState === 4 && xhr.status === 200) {\r\n                var json = JSON.parse(xhr.responseText);\r\n                console.log(json);\r\n            }\r\n        };\r\n        xhr.send(JSON.stringify({\r\n            fields: [{\r\n                    name: 'email',\r\n                    value: this.email\r\n                }],\r\n            context: {\r\n                hutk: document.cookie.match(/hubspotutk=(.*?);/)[1],\r\n                pageUri: window.location.href,\r\n                pageName: document.title\r\n            }\r\n        }));\r\n    }\r\n    getFormClass() {\r\n        let str = this.darkMode ? 'dark' : '';\r\n        if (this.arrowMode) {\r\n            str += ' arrow';\r\n        }\r\n        if (this.homepageMode) {\r\n            str += ' homepage';\r\n        }\r\n        if (this.lg) {\r\n            str += ' lg';\r\n        }\r\n        return str;\r\n    }\r\n    render() {\r\n        return (h(\"form\", { onSubmit: (e) => this.handleSubmit(e), class: this.getFormClass() },\r\n            this.homepageMode ? h(EmailIcon, null) : '',\r\n            h(\"input\", { name: \"email\", type: \"email\", value: this.email, onInput: () => this.handleEmailChange(event), disabled: this.isLoading, placeholder: this.placeholder, required: true }),\r\n            h(\"ionic-button\", { color: this.darkMode ? 'white' : 'default', type: \"submit\", disabled: this.isLoading || this.hasSubmitted }, this.hasSubmitted ? 'Added!' :\r\n                this.arrowMode || this.homepageMode ?\r\n                    h(\"ion-icon\", { name: \"md-arrow-forward\" }) : this.buttonText)));\r\n    }\r\n    static get is() { return \"ionic-newsletter-signup\"; }\r\n    static get properties() { return {\r\n        \"arrowMode\": {\r\n            \"type\": Boolean,\r\n            \"attr\": \"arrow-mode\"\r\n        },\r\n        \"buttonText\": {\r\n            \"type\": String,\r\n            \"attr\": \"button-text\"\r\n        },\r\n        \"darkMode\": {\r\n            \"type\": Boolean,\r\n            \"attr\": \"dark-mode\"\r\n        },\r\n        \"email\": {\r\n            \"state\": true\r\n        },\r\n        \"hasSubmitted\": {\r\n            \"state\": true\r\n        },\r\n        \"homepageMode\": {\r\n            \"type\": Boolean,\r\n            \"attr\": \"homepage-mode\"\r\n        },\r\n        \"isLoading\": {\r\n            \"state\": true\r\n        },\r\n        \"kind\": {\r\n            \"type\": String,\r\n            \"attr\": \"kind\"\r\n        },\r\n        \"lg\": {\r\n            \"type\": Boolean,\r\n            \"attr\": \"lg\"\r\n        },\r\n        \"placeholder\": {\r\n            \"type\": String,\r\n            \"attr\": \"placeholder\"\r\n        }\r\n    }; }\r\n    static get style() { return \"ionic-newsletter-signup form{position:relative;display:-ms-flexbox;display:flex;border-collapse:separate;width:100%;height:40px}\\@media (max-width:991px){ionic-newsletter-signup form{max-width:calc(100% - 340px)}}\\@media (max-width:767px){ionic-newsletter-signup form{float:none;max-width:100%;margin-top:15px}}ionic-newsletter-signup form.dark input{color:#fff;-webkit-box-shadow:none;box-shadow:none}ionic-newsletter-signup form.dark input:hover{-webkit-box-shadow:0 1px 3px rgba(0,0,0,.15);box-shadow:0 1px 3px rgba(0,0,0,.15)}ionic-newsletter-signup form.dark input:focus{-webkit-box-shadow:0 1px 3px rgba(0,0,0,.1);box-shadow:0 1px 3px rgba(0,0,0,.1)}ionic-newsletter-signup form.dark input::-webkit-input-placeholder{color:#bbceef}ionic-newsletter-signup form.dark input:-ms-input-placeholder{color:#bbceef}ionic-newsletter-signup form.dark input::-ms-input-placeholder{color:#bbceef}ionic-newsletter-signup form.dark input::placeholder{color:#bbceef}ionic-newsletter-signup form.lg{height:48px}ionic-newsletter-signup form.lg input{padding:1px 17px 0;font-size:14px}ionic-newsletter-signup form.lg ionic-button button{padding:11px 12px}ionic-newsletter-signup form.arrow{border-radius:6px;-webkit-box-shadow:0 1px 3px rgba(0,16,44,.08),0 2px 4px rgba(0,16,44,.12);box-shadow:0 1px 3px rgba(0,16,44,.08),0 2px 4px rgba(0,16,44,.12);-webkit-transition:box-shadow .15s ease;transition:box-shadow .15s ease}ionic-newsletter-signup form.arrow:hover{-webkit-box-shadow:0 7px 14px rgba(0,16,44,.12),0 3px 6px rgba(0,16,44,.08);box-shadow:0 7px 14px rgba(0,16,44,.12),0 3px 6px rgba(0,16,44,.08)}ionic-newsletter-signup form.arrow input{border-radius:6px 0 0 6px;-webkit-box-shadow:none;box-shadow:none}ionic-newsletter-signup form.arrow input::-webkit-input-placeholder{color:#a8b0be;font-weight:400}ionic-newsletter-signup form.arrow input:-ms-input-placeholder{color:#a8b0be;font-weight:400}ionic-newsletter-signup form.arrow input::-ms-input-placeholder{color:#a8b0be;font-weight:400}ionic-newsletter-signup form.arrow input::placeholder{color:#a8b0be;font-weight:400}ionic-newsletter-signup form.arrow ionic-button button{background:#f0f5ff;color:#3880ff;font-size:23px;display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;border-radius:0 6px 6px 0}ionic-newsletter-signup form.arrow ionic-button button:hover{background:#ebf2ff}\\@media (max-width:991px){ionic-newsletter-signup form.arrow{max-width:100%}}ionic-newsletter-signup form.homepage{height:48px;border-radius:6px;background:#f8fafc;border:1px solid #e9edf3;-webkit-transition:border-color .2s,background-color .2s;transition:border-color .2s,background-color .2s}ionic-newsletter-signup form.homepage:hover{border-color:#73a6ff;background:#fff}ionic-newsletter-signup form.homepage svg{position:absolute;top:16px;left:16px}ionic-newsletter-signup form.homepage input{border-radius:6px 0 0 6px;-webkit-box-shadow:none;box-shadow:none;padding-left:46px}ionic-newsletter-signup form.homepage input::-webkit-input-placeholder{color:#a8b0be;font-weight:400}ionic-newsletter-signup form.homepage input:-ms-input-placeholder{color:#a8b0be;font-weight:400}ionic-newsletter-signup form.homepage input::-ms-input-placeholder{color:#a8b0be;font-weight:400}ionic-newsletter-signup form.homepage input::placeholder{color:#a8b0be;font-weight:400}ionic-newsletter-signup form.homepage ionic-button button{background:transparent;color:#7cabff;font-size:23px;display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-webkit-box-shadow:none;box-shadow:none;border-radius:0 6px 6px 0}ionic-newsletter-signup form.homepage ionic-button button:hover{color:#498aff;background:transparent}\\@media (max-width:991px){ionic-newsletter-signup form.homepage{max-width:100%}}ionic-newsletter-signup input{border:none;background:hsla(0,0%,100%,.2);border-radius:4px 0 0 4px;font-size:13px;color:#24282e;-webkit-box-shadow:none;box-shadow:none;font-weight:500;height:100%;outline:0;-ms-flex-positive:1;flex-grow:1;padding:0 16px 1px;-webkit-box-shadow:0 1px 3px rgba(0,0,0,.1);box-shadow:0 1px 3px rgba(0,0,0,.1);-webkit-transition:background .2s,box-shadow .2s;transition:background .2s,box-shadow .2s}ionic-newsletter-signup input:hover{-webkit-box-shadow:0 1px 3px rgba(0,0,0,.15);box-shadow:0 1px 3px rgba(0,0,0,.15)}ionic-newsletter-signup input:focus{-webkit-box-shadow:none;box-shadow:none;background:hsla(0,0%,100%,.25);-webkit-box-shadow:inset 0 0 2px rgba(0,0,0,.1);box-shadow:inset 0 0 2px rgba(0,0,0,.1)}ionic-newsletter-signup input::-webkit-input-placeholder{padding-left:0;color:#a1a9b6}ionic-newsletter-signup input:-ms-input-placeholder{padding-left:0;color:#a1a9b6}ionic-newsletter-signup input::-ms-input-placeholder{padding-left:0;color:#a1a9b6}ionic-newsletter-signup input::placeholder{padding-left:0;color:#a1a9b6}ionic-newsletter-signup ionic-button{height:100%}ionic-newsletter-signup ionic-button button{border-top-left-radius:0;border-bottom-left-radius:0;font-weight:500;font-size:14px;height:100%;padding:8px 9px 10px}\"; }\r\n}\n\nexport { IonicButton, IonicNewsletterSignup };\n"
  },
  {
    "path": "content/js/stencil/esm/es2017/index.js",
    "content": "// IonicSiteComponents: ES Module\nexport * from './build/index.js';"
  },
  {
    "path": "content/js/stencil/esm/es2017/ionic-site-components.components.js",
    "content": "// IonicSiteComponents: Host Data, ES Module/es2017 Target\nexport const COMPONENTS = [[\"icon-external\",\"uyiaiqzf\",1],[\"ion-icon\",\"bubpozqb\",1,[[\"ariaLabel\",2,1,\"aria-label\",2],[\"color\",1,0,1,2],[\"doc\",4,0,0,0,\"document\"],[\"el\",64],[\"flipRtl\",1,0,\"flip-rtl\",4],[\"icon\",1,0,1,2],[\"ios\",1,0,1,2],[\"isServer\",4,0,0,0,\"isServer\"],[\"isVisible\",16],[\"lazy\",1,0,1,4],[\"md\",1,0,1,2],[\"mode\",1,0,1,2],[\"name\",1,0,1,2],[\"resourcesUrl\",4,0,0,0,\"resourcesUrl\"],[\"size\",1,0,1,2],[\"src\",1,0,1,2],[\"svgContent\",16],[\"win\",4,0,0,0,\"window\"]],1],[\"ionic-appflow-activator\",\"hclgi8iu\",1,[[\"$circles\",16],[\"$lis\",16],[\"active\",16],[\"el\",64],[\"screenshots\",16]]],[\"ionic-bar-chart\",\"lo9utgpp\",1,[[\"color\",1,0,1,2],[\"data\",1,0,1,2]]],[\"ionic-button\",\"z7r5cewq\",1,[[\"color\",1,0,1,2],[\"disabled\",1,0,1,4],[\"type\",1,0,1,2]]],[\"ionic-newsletter-signup\",\"z7r5cewq\",1,[[\"arrowMode\",1,0,\"arrow-mode\",4],[\"buttonText\",1,0,\"button-text\",2],[\"darkMode\",1,0,\"dark-mode\",4],[\"email\",16],[\"hasSubmitted\",16],[\"homepageMode\",1,0,\"homepage-mode\",4],[\"isLoading\",16],[\"kind\",1,0,1,2],[\"lg\",1,0,1,4],[\"placeholder\",1,0,1,2]]],[\"ionic-quick-signup\",\"raorzqti\",1,[[\"buttonColor\",1,0,\"button-color\",2],[\"showPricingNotice\",1,0,\"show-pricing-notice\",4],[\"transparentInput\",1,0,\"transparent-input\",4]]],[\"ionic-search\",\"ehteibio\",1,[[\"active\",16],[\"dragStyles\",16],[\"el\",64],[\"mobile\",1,0,1,4],[\"pending\",16],[\"query\",16],[\"results\",16]]],[\"ionic-slider\",\"uy47nvwg\",1,[[\"current\",16],[\"status\",16],[\"ticker\",16]]],[\"ionic-snap-bar\",\"cetridhp\",1,[[\"active\",16]]],[\"ionic-toggle\",\"cz7vrrja\",1,[[\"el\",64]],1,[[\"toggleSelected\",\"selectionChanged\"]]],[\"ionic-toggle-button\",\"m0trkizf\",1,[[\"deselect\",32],[\"select\",32],[\"selected\",16],[\"tab\",1,0,1,2],[\"title\",1,0,1,2]],1],[\"ionic-toggle-tab\",\"nrj8jyt7\",0,[[\"hidden\",16],[\"hide\",32],[\"show\",32],[\"tab\",1,0,1,2]],1]]"
  },
  {
    "path": "content/js/stencil/esm/es2017/ionic-site-components.core.js",
    "content": "/*!\n * IonicSiteComponents: Core, es2017\n * Built with http://stenciljs.com\n */\nfunction e(e,t){return\"sc-\"+e.t+(t&&t!==l?\"-\"+t:\"\")}function t(e,t){return e+(t?\"-h\":\"-s\")}function n(e,t){let n,o,i=null,l=!1,s=!1,r=arguments.length;for(;r-- >2;)g.push(arguments[r]);for(;g.length>0;){let t=g.pop();if(t&&void 0!==t.pop)for(r=t.length;r--;)g.push(t[r]);else\"boolean\"==typeof t&&(t=null),(s=\"function\"!=typeof e)&&(null==t?t=\"\":\"number\"==typeof t?t=String(t):\"string\"!=typeof t&&(s=!1)),s&&l?i[i.length-1].vtext+=t:null===i?i=[s?{vtext:t}:t]:i.push(s?{vtext:t}:t),l=s}if(null!=t){if(t.className&&(t.class=t.className),\"object\"==typeof t.class){for(r in t.class)t.class[r]&&g.push(r);t.class=g.join(\" \"),g.length=0}null!=t.key&&(n=t.key),null!=t.name&&(o=t.name)}return\"function\"==typeof e?e(t,i||[],k):{vtag:e,vchildren:i,vtext:void 0,vattrs:t,vkey:n,vname:o,o:void 0,i:!1}}function o(e,t,n={}){let o=Array.isArray(t)?t:[t];const l=e.document,s=n.hydratedCssClass||\"hydrated\",r=n.exclude;r&&(o=o.filter(e=>-1===r.indexOf(e[0])));const c=o.map(e=>e[0]);if(c.length>0){const e=l.createElement(\"style\");e.innerHTML=c.join()+\"{visibility:hidden}.\"+s+\"{visibility:inherit}\",e.setAttribute(\"data-styles\",\"\"),l.head.insertBefore(e,l.head.firstChild)}const f=n.namespace||\"IonicSiteComponents\";return q||(q=!0,function a(e,t,n){(e[\"s-apps\"]=e[\"s-apps\"]||[]).push(t),n.componentOnReady||(n.componentOnReady=function t(){function n(t){if(o.nodeName.indexOf(\"-\")>0){for(var n=e[\"s-apps\"],i=0,l=0;l<n.length;l++)if(e[n[l]].componentOnReady){if(e[n[l]].componentOnReady(o,t))return;i++}if(i<n.length)return void(e[\"s-cr\"]=e[\"s-cr\"]||[]).push([o,t])}t(null)}var o=this;return e.Promise?new e.Promise(n):{then:n}})}(e,f,e.HTMLElement.prototype)),applyPolyfills(e).then(()=>{if(!H[f]){const t={},r=n.resourcesUrl||\"./\";i(f,t,e,l,r,s),H[f]=D(f,t,e,l,r,s,o)}(function t(){o.forEach(t=>{let n;!function o(e){return/\\{\\s*\\[native code\\]\\s*\\}/.test(\"\"+e)}(e.customElements.define)?(n=function(t){return e.HTMLElement.call(this,t)}).prototype=Object.create(e.HTMLElement.prototype,{constructor:{value:n,configurable:!0}}):n=new Function(\"w\",\"return class extends w.HTMLElement{}\")(e),H[f].l(function i(e){const t=j(e),n=t.s,o=u(e[0]);return t.s=(({mode:e,scoped:t})=>{return function i(e,t,n){return import(`./build/${e}${t?\".sc\":\"\"}.entry.js`).then(e=>e[n])}(\"string\"==typeof n?n:n[e],t,o)}),t}(t),n)})})()})}var i=function(){};function applyPolyfills(){return Promise.resolve()}const l=\"$\",s={},r={enter:13,escape:27,space:32,tab:9,left:37,up:38,right:39,down:40},c=(t,n,o,i)=>{let s=o.t+l,r=o[s];if((2===o.u||1===o.u&&!t.v.p)&&(i[\"s-sc\"]=r?e(o,i.mode):e(o)),r){let e=n.m.head;if(n.p)if(1===o.u)e=i.shadowRoot;else{const t=i.getRootNode();t.host&&(e=t)}let l=t.M.get(e);if(l||t.M.set(e,l={}),!l[s]){let t;{t=r.content.cloneNode(!0),l[s]=!0;const o=e.querySelectorAll(\"[data-styles]\");n.g(e,t,o.length&&o[o.length-1].nextSibling||e.firstChild)}}}},f=e=>null!=e,a=e=>e.toLowerCase(),u=e=>a(e).split(\"-\").map(e=>e.charAt(0).toUpperCase()+e.slice(1)).join(\"\"),p=()=>{},d=(e,t,n,o=\"boolean\"==typeof n,i)=>{i=t!==(t=t.replace(/^xlink\\:?/,\"\")),null==n||o&&(!n||\"false\"===n)?i?e.removeAttributeNS(b,a(t)):e.removeAttribute(t):\"function\"!=typeof n&&(n=o?\"\":n.toString(),i?e.setAttributeNS(b,a(t),n):e.setAttribute(t,n))},b=\"http://www.w3.org/1999/xlink\",v=(e,t,n,o,i,l,s)=>{if(\"class\"!==n||l)if(\"style\"===n){for(const e in o)i&&null!=i[e]||(/-/.test(e)?t.style.removeProperty(e):t.style[e]=\"\");for(const e in i)o&&i[e]===o[e]||(/-/.test(e)?t.style.setProperty(e,i[e]):t.style[e]=i[e])}else if(\"o\"!==n[0]||\"n\"!==n[1]||!/[A-Z]/.test(n[2])||n in t)if(\"list\"!==n&&\"type\"!==n&&!l&&(n in t||-1!==[\"object\",\"function\"].indexOf(typeof i)&&null!==i)){const o=e.k(t);o&&o.j&&o.j[n]?(m(t,n,i),s&&o.j[n].C&&d(t,o.j[n].A,i,4===o.j[n].O)):\"ref\"!==n&&(m(t,n,null==i?\"\":i),null!=i&&!1!==i||e.v._(t,n))}else null!=i&&\"key\"!==n?d(t,n,i):(l||e.v.S(t,n)&&(null==i||!1===i))&&e.v._(t,n);else n=a(n)in t?a(n.substring(2)):a(n[2])+n.substring(3),i?i!==o&&e.v.W(t,n,i,0):e.v.N(t,n,0);else if(o!==i){const e=y(o),n=y(i),l=e.filter(e=>!n.includes(e)),s=y(t.className).filter(e=>!l.includes(e)),r=n.filter(t=>!e.includes(t)&&!s.includes(t));s.push(...r),t.className=s.join(\" \")}},y=e=>null==e||\"\"===e?[]:e.trim().split(/\\s+/),m=(e,t,n)=>{try{e[t]=n}catch(e){}},h=(e,t,n,o,i)=>{const l=11===n.o.nodeType&&n.o.host?n.o.host:n.o,r=t&&t.vattrs||s,c=n.vattrs||s;for(i in r)c&&null!=c[i]||null==r[i]||v(e,l,i,r[i],void 0,o,n.i);for(i in c)i in r&&c[i]===(\"value\"===i||\"checked\"===i?l[i]:r[i])||v(e,l,i,r[i],c[i],o,n.i)};let w=!1;const M=(e,t)=>{e&&(e.vattrs&&e.vattrs.ref&&e.vattrs.ref(t?null:e.o),e.vchildren&&e.vchildren.forEach(e=>{M(e,t)}))},$=(e,t)=>{{let n=0,o=!1;const i=()=>t.performance.now(),l=!1!==e.asyncQueue,s=Promise.resolve(),r=[],c=[],f=[],a=[],u=t=>n=>{t.push(n),o||(o=!0,e.raf(b))},p=e=>{for(let t=0;t<e.length;t++)try{e[t](i())}catch(e){console.error(e)}e.length=0},d=(e,t)=>{let n,o=0;for(;o<e.length&&(n=i())<t;)try{e[o++](n)}catch(e){console.error(e)}o===e.length?e.length=0:0!==o&&e.splice(0,o)},b=()=>{n++,p(c);const t=l?i()+7*Math.ceil(n*(1/22)):Infinity;d(f,t),d(a,t),f.length>0&&(a.push(...f),f.length=0),(o=c.length+f.length+a.length>0)?e.raf(b):n=0};return e.raf||(e.raf=t.requestAnimationFrame.bind(t)),{tick(e){r.push(e),1===r.length&&s.then(()=>p(r))},read:u(c),write:u(f)}}},g=[],k={forEach:(e,t)=>e.forEach(t),map:(e,t)=>e.map(t)},j=(e,t,n)=>{const[o,i,,l,s,r]=e,c={color:{A:\"color\"}};if(l)for(t=0;t<l.length;t++)c[(n=l[t])[0]]={P:n[1],C:!!n[2],A:\"string\"==typeof n[3]?n[3]:n[3]?n[0]:0,O:n[4]};return{t:o,s:i,j:Object.assign({},c),u:s,L:r?r.map(C):void 0}},C=e=>({R:e[0],T:e[1],D:!!e[2],H:!!e[3],q:!!e[4]}),E=(e,t)=>{return f(t)&&\"object\"!=typeof t&&\"function\"!=typeof t?e===Boolean||4===e?\"false\"!==t&&(\"\"===t||!!t):e===Number||8===e?parseFloat(t):e===String||2===e?t.toString():t:t},A=(e,t,n)=>{e.B.add(t),e.F.has(t)||(e.F.set(t,!0),e.I?e.queue.write(()=>O(e,t,n)):e.queue.tick(()=>O(e,t,n)))},O=async(e,o,i,l,s,r)=>{if(e.F.delete(o),!e.U.has(o)){if(!(s=e.Y.get(o))){if((r=e.Z.get(o))&&!r[\"s-rn\"])return void(r[\"s-rc\"]=r[\"s-rc\"]||[]).push(()=>{O(e,o,i)});if(s=P(e,o,e.G.get(o),i))try{s.componentWillLoad&&await s.componentWillLoad()}catch(t){e.J(t,3,o)}}((e,o,i,l)=>{try{const s=o.K.host,r=o.K.encapsulation,c=\"shadow\"===r&&e.v.p;let f,a=i;if(f=((e,t,n)=>{return e&&Object.keys(e).forEach(o=>{e[o].reflectToAttr&&((n=n||{})[o]=t[o])}),n})(o.K.properties,l),c&&(a=i.shadowRoot),!i[\"s-rn\"]){e.V(e,e.v,o,i);const n=i[\"s-sc\"];n&&(e.v.X(i,t(n,!0)),\"scoped\"===r&&e.v.X(i,t(n)))}if(l.render||l.hostData||s||f){e.ee=!0;const t=l.render&&l.render();let o;o=l.hostData&&l.hostData(),f&&(o=o?Object.assign(o,f):f),e.ee=!1;const s=n(null,o,t),u=e.te.get(i)||{};u.o=a,s.i=!0,e.te.set(i,e.render(i,u,s,c,r))}i[\"s-rn\"]=!0,i[\"s-rc\"]&&(i[\"s-rc\"].forEach(e=>e()),i[\"s-rc\"]=null)}catch(t){e.ee=!1,e.J(t,8,i,!0)}})(e,e.k(o),o,s),o[\"s-init\"]()}},_=(e,t,n,o,i,l,s,r,c)=>{if(t.type||t.state){const a=e.ne.get(n);t.state||(!t.attr||void 0!==a[i]&&\"\"!==a[i]||(r=l&&l.oe)&&f(c=r[t.attr])&&(a[i]=E(t.type,c)),n.hasOwnProperty(i)&&(void 0===a[i]&&(a[i]=E(t.type,n[i])),\"mode\"!==i&&delete n[i])),o.hasOwnProperty(i)&&void 0===a[i]&&(a[i]=o[i]),t.watchCallbacks&&(a[x+i]=t.watchCallbacks.slice()),N(o,i,function a(t){return(t=e.ne.get(e.ie.get(this)))&&t[i]},function u(n,o){(o=e.ie.get(this))&&(t.state||t.mutable)&&S(e,o,i,n,s)})}else if(t.elementRef)W(o,i,n);else if(t.method)W(n,i,o[i].bind(o));else if(t.context){const l=e.le(t.context);void 0!==l&&W(o,i,l.getContext&&l.getContext(n)||l)}},S=(e,t,n,o,i,l,s)=>{(s=e.ne.get(t))||e.ne.set(t,s={});const r=s[n];if(o!==r&&(s[n]=o,l=e.Y.get(t))){{const e=s[x+n];if(e)for(let t=0;t<e.length;t++)try{l[e[t]].call(l,o,r,n)}catch(e){console.error(e)}}!e.ee&&t[\"s-rn\"]&&A(e,t,i)}},W=(e,t,n)=>{Object.defineProperty(e,t,{configurable:!0,value:n})},N=(e,t,n,o)=>{Object.defineProperty(e,t,{configurable:!0,get:n,set:o})},x=\"wc-\",P=(e,t,n,o,i,l,s,r)=>{try{i=new(l=e.k(t).K),((e,t,n,o,i,l)=>{e.ie.set(o,n),e.ne.has(n)||e.ne.set(n,{}),Object.entries(Object.assign({color:{type:String}},t.properties,{mode:{type:String}})).forEach(([t,s])=>{_(e,s,n,o,t,i,l)})})(e,l,t,i,n,o),function c(e,t,n){if(t){const o=e.ie.get(n);t.forEach(t=>{n[t.method]={emit:n=>e.se(o,t.name,{bubbles:t.bubbles,composed:t.composed,cancelable:t.cancelable,detail:n})}})}}(e,l.events,i);try{if(s=e.re.get(t)){for(r=0;r<s.length;r+=2)i[s[r]](s[r+1]);e.re.delete(t)}}catch(n){e.J(n,2,t)}}catch(n){i={},e.J(n,7,t,!0)}return e.Y.set(t,i),i},L=(e,t,n,o,i,l)=>{if(e.B.delete(t),(i=e.Z.get(t))&&((o=i[\"s-ld\"])&&((n=o.indexOf(t))>-1&&o.splice(n,1),o.length||i[\"s-init\"]&&i[\"s-init\"]()),e.Z.delete(t)),e.ce.length&&!e.B.size)for(;l=e.ce.shift();)l()},R=(e,t,n,o)=>{t.forEach(([t,i])=>{const l=i.P;3&l?N(n,t,function n(){return(e.ne.get(this)||{})[t]},function n(l){S(e,this,t,E(i.O,l),o)}):32===l&&W(n,t,p)})},T=(e,t,n,o,i)=>{if(n.connectedCallback=function(){((e,t,n)=>{e.fe.has(n)||(e.fe.set(n,!0),function o(e,t){const n=e.k(t);n.L&&n.L.forEach(n=>{n.D||e.v.W(t,n.R,function o(e,t,n,i){return o=>{(i=e.Y.get(t))?i[n](o):((i=e.re.get(t)||[]).push(n,o),e.re.set(t,i))}}(e,t,n.T),1,n.q,n.H)})}(e,n)),e.U.delete(n),e.ae.has(n)||(e.ue=!0,e.B.add(n),e.ae.set(n,!0),((e,t,n)=>{for(n=t;n=e.v.pe(n);)if(e.de(n)){e.be.has(t)||(e.Z.set(t,n),(n[\"s-ld\"]=n[\"s-ld\"]||[]).push(t));break}})(e,n),e.queue.tick(()=>{e.G.set(n,((e,t,n,o,i)=>{return n.mode||(n.mode=e.ve(n)),n[\"s-cr\"]||e.ye(n,\"ssrv\")||e.p&&1===t.u||(n[\"s-cr\"]=e.me(\"\"),n[\"s-cr\"][\"s-cn\"]=!0,e.g(n,n[\"s-cr\"],e.he(n)[0])),1===t.u&&e.p&&!n.shadowRoot&&e.we(n,{mode:\"open\"}),o={oe:{}},t.j&&Object.keys(t.j).forEach(l=>{(i=t.j[l].A)&&(o.oe[i]=e.ye(n,i))}),o})(e.v,t,n)),e.Me(t,n)}))})(e,t,this)},n.disconnectedCallback=function(){((e,t)=>{if(!e.$e&&((e,t)=>{for(;t;){if(!e.ge(t))return 9!==e.ke(t);t=e.ge(t)}})(e.v,t)){e.U.set(t,!0),L(e,t),M(e.te.get(t),!0);{const n=e.Y.get(t);n&&n.componentDidUnload&&n.componentDidUnload()}e.v.N(t),e.fe.delete(t),[e.Z,e.je,e.G].forEach(e=>e.delete(t))}})(e,this)},n[\"s-init\"]=function(){((e,t,n,o,i,l,s)=>{if((i=e.Y.get(t))&&!e.U.has(t)&&(!t[\"s-ld\"]||!t[\"s-ld\"].length)){e.be.set(t,!0),(s=e.Ce.has(t))||(e.Ce.set(t,!0),t[\"s-ld\"]=void 0,e.v.X(t,n));try{M(e.te.get(t)),(l=e.je.get(t))&&(l.forEach(e=>e(t)),e.je.delete(t)),!s&&i.componentDidLoad&&i.componentDidLoad()}catch(n){e.J(n,4,t)}L(e,t)}})(e,this,o)},n.forceUpdate=function(){A(e,this,i)},t.j){const o=Object.entries(t.j);{let e={};o.forEach(([t,{A:n}])=>{n&&(e[n]=t)}),e=Object.assign({},e),n.attributeChangedCallback=function(t,n,o){(function i(e,t,n,o){const i=e[a(n)];i&&(t[i]=(null!==o||\"boolean\"!=typeof t[i])&&o)})(e,this,t,o)}}R(e,o,n,i)}},D=(e,t,o,i,s,u)=>{const p=o.performance,d={html:{}},b=o[e]=o[e]||{},v=((e,t,n)=>{const o=new WeakMap,i={m:n,p:!!n.documentElement.attachShadow,Ee:!1,ke:e=>e.nodeType,Ae:e=>n.createElement(e),Oe:(e,t)=>n.createElementNS(e,t),me:e=>n.createTextNode(e),_e:e=>n.createComment(e),g:(e,t,n)=>e.insertBefore(t,n),Se:e=>e.remove(),We:(e,t)=>e.appendChild(t),X:(e,t)=>{e.classList.add(t)},he:e=>e.childNodes,ge:e=>e.parentNode,Ne:e=>e.nextSibling,xe:e=>e.previousSibling,Pe:e=>a(e.nodeName),Le:e=>e.textContent,Re:(e,t)=>e.textContent=t,ye:(e,t)=>e.getAttribute(t),Te:(e,t,n)=>e.setAttribute(t,n),_:(e,t)=>e.removeAttribute(t),S:(e,t)=>e.hasAttribute(t),ve:t=>t.getAttribute(\"mode\")||(e.Context||{}).mode,De:(e,o)=>{return\"child\"===o?e.firstElementChild:\"parent\"===o?i.pe(e):\"body\"===o?n.body:\"document\"===o?n:\"window\"===o?t:e},W:(t,n,l,s,c,f,a,u,p,d)=>{let b=t,v=l,y=o.get(t);d=n+s,y&&y[d]&&y[d](),\"string\"==typeof a?b=i.De(t,a):\"object\"==typeof a?b=a:(p=n.split(\":\")).length>1&&(b=i.De(t,p[0]),n=p[1]),b&&((p=n.split(\".\")).length>1&&(n=p[0],v=(e=>{e.keyCode===r[p[1]]&&l(e)})),u=i.Ee?{capture:!!c,passive:!!f}:!!c,e.ael(b,n,v,u),y||o.set(t,y={}),y[d]=(()=>{b&&e.rel(b,n,v,u),y[d]=null}))},N:(e,t,n,i)=>{(i=o.get(e))&&(t?i[t+n]&&i[t+n]():Object.keys(i).forEach(e=>{i[e]&&i[e]()}))},He:(e,n,o,i)=>{return i=new t.CustomEvent(n,o),e&&e.dispatchEvent(i),i},pe:(e,t)=>(t=i.ge(e))&&11===i.ke(t)?t.host:t,qe:(e,t,n,o)=>e.setAttributeNS(t,n,o),we:(e,t)=>e.attachShadow(t)};e.ael||(e.ael=((e,t,n,o)=>e.addEventListener(t,n,o)),e.rel=((e,t,n,o)=>e.removeEventListener(t,n,o)));try{t.addEventListener(\"e\",null,Object.defineProperty({},\"passive\",{get:()=>i.Ee=!0}))}catch(e){}return i})(b,o,i),y=v.m.documentElement,m=o[\"s-defined\"]=o[\"s-defined\"]||{},M={v:v,l:(e,t)=>{o.customElements.get(e.t)||(T(M,d[e.t]=e,t.prototype,u,p),t.observedAttributes=Object.values(e.j).map(e=>e.A).filter(e=>!!e),o.customElements.define(e.t,t))},k:e=>d[v.Pe(e)],le:e=>t[e],isClient:!0,de:e=>!(!m[v.Pe(e)]&&!M.k(e)),J:(e,t,n)=>console.error(e,t,n&&n.tagName),queue:t.queue=$(b,o),Me:(e,t)=>{{const n=!v.p,o={mode:t.mode,scoped:n};e.s(o).then(n=>{try{e.K=n,function o(e,t,n,i,s){if(i){const n=t.t+(s||l);if(!t[n]){const o=e.Ae(\"template\");t[n]=o,o.innerHTML=`<style>${i}</style>`,e.We(e.m.head,o)}}}(v,e,e.u,n.style,n.styleMode)}catch(t){console.error(t),e.K=class{}}A(M,t,p)})}},ee:!1,I:!1,$e:!1,V:c,Z:new WeakMap,M:new WeakMap,ae:new WeakMap,fe:new WeakMap,Ce:new WeakMap,be:new WeakMap,ie:new WeakMap,G:new WeakMap,Y:new WeakMap,U:new WeakMap,F:new WeakMap,je:new WeakMap,re:new WeakMap,te:new WeakMap,ne:new WeakMap,B:new Set,ce:[]};return t.isServer=t.isPrerender=!(t.isClient=!0),t.window=o,t.location=o.location,t.document=i,t.resourcesUrl=t.publicPath=s,t.enableListener=((e,t,n,o,i)=>(function l(e,t,n,o,i,s){if(t){const l=e.ie.get(t),r=e.k(l);if(r&&r.L)if(o){const o=r.L.find(e=>e.R===n);o&&e.v.W(l,n,e=>t[o.T](e),1,o.q,void 0===s?o.H:!!s,i)}else e.v.N(l,n,1)}})(M,e,t,n,o,i)),M.se=t.emit=((e,n,o)=>v.He(e,t.eventNameFn?t.eventNameFn(n):n,o)),b.h=n,b.Context=t,b.onReady=(()=>new Promise(e=>M.queue.write(()=>M.B.size?M.ce.push(e):e()))),M.render=((e,t)=>{let n,o,i,l,s,r,c;const a=(i,p,d,b,v,y,m,M,$)=>{if(M=p.vchildren[d],n||(l=!0,\"slot\"===M.vtag&&(o&&t.X(b,o+\"-s\"),M.vchildren?M.Be=!0:M.Fe=!0)),f(M.vtext))M.o=t.me(M.vtext);else if(M.Fe)M.o=t.me(\"\");else{if(y=M.o=w||\"svg\"===M.vtag?t.Oe(\"http://www.w3.org/2000/svg\",M.vtag):t.Ae(M.Be?\"slot-fb\":M.vtag),e.de(y)&&e.be.delete(c),w=\"svg\"===M.vtag||\"foreignObject\"!==M.vtag&&w,h(e,null,M,w),f(o)&&y[\"s-si\"]!==o&&t.X(y,y[\"s-si\"]=o),M.vchildren)for(v=0;v<M.vchildren.length;++v)(m=a(i,M,v,y))&&t.We(y,m);\"svg\"===M.vtag&&(w=!1)}return M.o[\"s-hn\"]=r,(M.Be||M.Fe)&&(M.o[\"s-sr\"]=!0,M.o[\"s-cr\"]=s,M.o[\"s-sn\"]=M.vname||\"\",($=i&&i.vchildren&&i.vchildren[d])&&$.vtag===M.vtag&&i.o&&u(i.o)),M.o},u=(n,o,i,s)=>{e.$e=!0;const c=t.he(n);for(i=c.length-1;i>=0;i--)(s=c[i])[\"s-hn\"]!==r&&s[\"s-ol\"]&&(t.Se(s),t.g(y(s),s,v(s)),t.Se(s[\"s-ol\"]),s[\"s-ol\"]=null,l=!0),o&&u(s,o);e.$e=!1},p=(e,n,o,i,l,s,c,u)=>{const p=e[\"s-cr\"];for((c=p&&t.ge(p)||e).shadowRoot&&t.Pe(c)===r&&(c=c.shadowRoot);l<=s;++l)i[l]&&(u=f(i[l].vtext)?t.me(i[l].vtext):a(null,o,l,e))&&(i[l].o=u,t.g(c,u,v(n)))},d=(e,n,o,l)=>{for(;n<=o;++n)f(e[n])&&(l=e[n].o,i=!0,l[\"s-ol\"]?t.Se(l[\"s-ol\"]):u(l,!0),t.Se(l))},b=(e,t)=>{return e.vtag===t.vtag&&e.vkey===t.vkey&&(\"slot\"!==e.vtag||e.vname===t.vname)},v=e=>{return e&&e[\"s-ol\"]?e[\"s-ol\"]:e},y=e=>{return t.ge(e[\"s-ol\"]?e[\"s-ol\"]:e)},m=(n,o,i)=>{const l=o.o=n.o,s=n.vchildren,r=o.vchildren;w=o.o&&f(t.pe(o.o))&&void 0!==o.o.ownerSVGElement,w=\"svg\"===o.vtag||\"foreignObject\"!==o.vtag&&w,f(o.vtext)?(i=l[\"s-cr\"])?t.Re(t.ge(i),o.vtext):n.vtext!==o.vtext&&t.Re(l,o.vtext):(\"slot\"!==o.vtag&&h(e,n,o,w),f(s)&&f(r)?((e,n,o,i,l,s,r,c)=>{let h=0,w=0,M=n.length-1,$=n[0],g=n[M],k=i.length-1,j=i[0],C=i[k];for(;h<=M&&w<=k;)if(null==$)$=n[++h];else if(null==g)g=n[--M];else if(null==j)j=i[++w];else if(null==C)C=i[--k];else if(b($,j))m($,j),$=n[++h],j=i[++w];else if(b(g,C))m(g,C),g=n[--M],C=i[--k];else if(b($,C))\"slot\"!==$.vtag&&\"slot\"!==C.vtag||u(t.ge($.o)),m($,C),t.g(e,$.o,t.Ne(g.o)),$=n[++h],C=i[--k];else if(b(g,j))\"slot\"!==$.vtag&&\"slot\"!==C.vtag||u(t.ge(g.o)),m(g,j),t.g(e,g.o,$.o),g=n[--M],j=i[++w];else{for(l=null,s=h;s<=M;++s)if(n[s]&&f(n[s].vkey)&&n[s].vkey===j.vkey){l=s;break}f(l)?((c=n[l]).vtag!==j.vtag?r=a(n&&n[w],o,l,e):(m(c,j),n[l]=void 0,r=c.o),j=i[++w]):(r=a(n&&n[w],o,w,e),j=i[++w]),r&&t.g(y($.o),r,v($.o))}h>M?p(e,null==i[k+1]?null:i[k+1].o,o,i,w,k):w>k&&d(n,h,M)})(l,s,o,r):f(r)?(f(n.vtext)&&t.Re(l,\"\"),p(l,null,o,r,0,r.length-1)):f(s)&&d(s,0,s.length-1)),w&&\"svg\"===o.vtag&&(w=!1)},M=(e,n,o,i,l,s,r,c)=>{for(i=0,l=(o=t.he(e)).length;i<l;i++)if(n=o[i],1===t.ke(n)){if(n[\"s-sr\"])for(r=n[\"s-sn\"],n.hidden=!1,s=0;s<l;s++)if(o[s][\"s-hn\"]!==n[\"s-hn\"])if(c=t.ke(o[s]),\"\"!==r){if(1===c&&r===t.ye(o[s],\"slot\")){n.hidden=!0;break}}else if(1===c||3===c&&\"\"!==t.Le(o[s]).trim()){n.hidden=!0;break}M(n)}},$=[],g=(e,n,o,l,s,r,c,f,a,u)=>{for(s=0,r=(n=t.he(e)).length;s<r;s++){if((o=n[s])[\"s-sr\"]&&(l=o[\"s-cr\"]))for(f=t.he(t.ge(l)),a=o[\"s-sn\"],c=f.length-1;c>=0;c--)(l=f[c])[\"s-cn\"]||l[\"s-nr\"]||l[\"s-hn\"]===o[\"s-hn\"]||((3===(u=t.ke(l))||8===u)&&\"\"===a||1===u&&null===t.ye(l,\"slot\")&&\"\"===a||1===u&&t.ye(l,\"slot\")===a)&&($.some(e=>e.Ie===l)||(i=!0,l[\"s-sn\"]=a,$.push({Qe:o,Ie:l})));1===t.ke(o)&&g(o)}};return(f,a,u,p,d,b,v,y,h,w,k,j)=>{if(c=f,r=t.Pe(c),s=c[\"s-cr\"],n=p,o=c[\"s-sc\"],l=i=!1,m(a,u),l){for(g(u.o),v=0;v<$.length;v++)(y=$[v]).Ie[\"s-ol\"]||((h=t.me(\"\"))[\"s-nr\"]=y.Ie,t.g(t.ge(y.Ie),y.Ie[\"s-ol\"]=h,y.Ie));for(e.$e=!0,v=0;v<$.length;v++){for(y=$[v],k=t.ge(y.Qe),j=t.Ne(y.Qe),h=y.Ie[\"s-ol\"];h=t.xe(h);)if((w=h[\"s-nr\"])&&w&&w[\"s-sn\"]===y.Ie[\"s-sn\"]&&k===t.ge(w)&&(w=t.Ne(w))&&w&&!w[\"s-nr\"]){j=w;break}(!j&&k!==t.ge(y.Ie)||t.Ne(y.Ie)!==j)&&y.Ie!==j&&(t.Se(y.Ie),t.g(k,y.Ie,j))}e.$e=!1}return i&&M(u.o),$.length=0,u}})(M,v),y[\"s-ld\"]=[],y[\"s-rn\"]=!0,y[\"s-init\"]=(()=>{M.be.set(y,b.loaded=M.I=!0),v.He(o,\"appload\",{detail:{namespace:e}})}),((e,t,n,o,i,l)=>{if(t.componentOnReady=((t,n)=>{if(!t.nodeName.includes(\"-\"))return n(null),!1;const o=e.k(t);if(o)if(e.be.has(t))n(t);else{const o=e.je.get(t)||[];o.push(n),e.je.set(t,o)}return!!o}),i){for(l=i.length-1;l>=0;l--)t.componentOnReady(i[l][0],i[l][1])&&i.splice(l,1);for(l=0;l<o.length;l++)if(!n[o[l]].componentOnReady)return;for(l=0;l<i.length;l++)i[l][1](null);i.length=0}})(M,b,o,o[\"s-apps\"],o[\"s-cr\"]),b.initialized=!0,M},H={};let q=!1;export{o as defineCustomElement,n as h};"
  },
  {
    "path": "content/js/stencil/esm/es2017/ionic-site-components.define.js",
    "content": "\n// IonicSiteComponents: Custom Elements Define Library, ES Module/es2017 Target\n\nimport { defineCustomElement } from './ionic-site-components.core.js';\nimport { COMPONENTS } from './ionic-site-components.components.js';\n\nexport function defineCustomElements(win, opts) {\n  return defineCustomElement(win, COMPONENTS, opts);\n}\n"
  },
  {
    "path": "content/js/stencil/esm/es5/build/bubpozqb.entry.js",
    "content": "import{h}from\"../ionic-site-components.core.js\";var CACHED_MAP;function getIconMap(){if(!CACHED_MAP){var t=window;t.Ionicons=t.Ionicons||{},CACHED_MAP=t.Ionicons.map=t.Ionicons.map||new Map}return CACHED_MAP}function getName(t,e,i,n){return e=\"ios\"===(e=(e||\"md\").toLowerCase())?\"ios\":\"md\",i&&\"ios\"===e?t=i.toLowerCase():n&&\"md\"===e?t=n.toLowerCase():t&&(t=t.toLowerCase(),/^md-|^ios-|^logo-/.test(t)||(t=e+\"-\"+t)),\"string\"!=typeof t||\"\"===t.trim()?null:\"\"!==t.replace(/[a-z]|-|\\d/gi,\"\")?null:t}function getSrc(t){return\"string\"==typeof t&&isSrc(t=t.trim())?t:null}function isSrc(t){return t.length>0&&/(\\/|\\.)/.test(t)}function isValid(t){if(1===t.nodeType){if(\"script\"===t.nodeName.toLowerCase())return!1;for(var e=0;e<t.attributes.length;e++){var i=t.attributes[e].value;if(\"string\"==typeof i&&0===i.toLowerCase().indexOf(\"on\"))return!1}for(e=0;e<t.childNodes.length;e++)if(!isValid(t.childNodes[e]))return!1}return!0}var Icon=function(){function t(){this.isVisible=!1,this.lazy=!1}return t.prototype.componentWillLoad=function(){var t=this;this.waitUntilVisible(this.el,\"50px\",function(){t.isVisible=!0,t.loadIcon()})},t.prototype.componentDidUnload=function(){this.io&&(this.io.disconnect(),this.io=void 0)},t.prototype.waitUntilVisible=function(t,e,i){var n=this;if(this.lazy&&this.win&&this.win.IntersectionObserver){var r=this.io=new this.win.IntersectionObserver(function(t){t[0].isIntersecting&&(r.disconnect(),n.io=void 0,i())},{rootMargin:e});r.observe(t)}else i()},t.prototype.loadIcon=function(){var t=this;if(!this.isServer&&this.isVisible){var e=this.getUrl();e?getSvgContent(this.doc,e,\"s-ion-icon\").then(function(e){return t.svgContent=e}):console.error(\"icon was not resolved\")}if(!this.ariaLabel){var i=getName(this.getName(),this.mode,this.ios,this.md);i&&(this.ariaLabel=i.replace(\"ios-\",\"\").replace(\"md-\",\"\").replace(/\\-/g,\" \"))}},t.prototype.getName=function(){return void 0!==this.name?this.name:this.icon&&!isSrc(this.icon)?this.icon:void 0},t.prototype.getUrl=function(){var t=getSrc(this.src);return t||((t=getName(this.getName(),this.mode,this.ios,this.md))?this.getNamedUrl(t):(t=getSrc(this.icon))||null)},t.prototype.getNamedUrl=function(t){return getIconMap().get(t)||this.resourcesUrl+\"svg/\"+t+\".svg\"},t.prototype.hostData=function(){var t,e=this.flipRtl||this.ariaLabel&&this.ariaLabel.indexOf(\"arrow\")>-1&&!1!==this.flipRtl;return{role:\"img\",class:Object.assign({},createColorClasses(this.color),(t={},t[\"icon-\"+this.size]=!!this.size,t[\"flip-rtl\"]=e&&\"rtl\"===this.doc.dir,t))}},t.prototype.render=function(){return h(\"div\",!this.isServer&&this.svgContent?{class:\"icon-inner\",innerHTML:this.svgContent}:{class:\"icon-inner\"})},Object.defineProperty(t,\"is\",{get:function(){return\"ion-icon\"},enumerable:!0,configurable:!0}),Object.defineProperty(t,\"encapsulation\",{get:function(){return\"shadow\"},enumerable:!0,configurable:!0}),Object.defineProperty(t,\"properties\",{get:function(){return{ariaLabel:{type:String,attr:\"aria-label\",reflectToAttr:!0,mutable:!0},color:{type:String,attr:\"color\"},doc:{context:\"document\"},el:{elementRef:!0},flipRtl:{type:Boolean,attr:\"flip-rtl\"},icon:{type:String,attr:\"icon\",watchCallbacks:[\"loadIcon\"]},ios:{type:String,attr:\"ios\"},isServer:{context:\"isServer\"},isVisible:{state:!0},lazy:{type:Boolean,attr:\"lazy\"},md:{type:String,attr:\"md\"},mode:{type:String,attr:\"mode\"},name:{type:String,attr:\"name\",watchCallbacks:[\"loadIcon\"]},resourcesUrl:{context:\"resourcesUrl\"},size:{type:String,attr:\"size\"},src:{type:String,attr:\"src\",watchCallbacks:[\"loadIcon\"]},svgContent:{state:!0},win:{context:\"window\"}}},enumerable:!0,configurable:!0}),Object.defineProperty(t,\"style\",{get:function(){return\":host{display:inline-block;width:1em;height:1em;contain:strict;-webkit-box-sizing:content-box!important;box-sizing:content-box!important}.icon-inner,svg{display:block;fill:currentColor;stroke:currentColor;height:100%;width:100%}:host(.flip-rtl) .icon-inner{-webkit-transform:scaleX(-1);transform:scaleX(-1)}:host(.icon-small){font-size:18px!important}:host(.icon-large){font-size:32px!important}:host(.ion-color){color:var(--ion-color-base)!important}:host(.ion-color-primary){--ion-color-base:var(--ion-color-primary,#3880ff)}:host(.ion-color-secondary){--ion-color-base:var(--ion-color-secondary,#0cd1e8)}:host(.ion-color-tertiary){--ion-color-base:var(--ion-color-tertiary,#f4a942)}:host(.ion-color-success){--ion-color-base:var(--ion-color-success,#10dc60)}:host(.ion-color-warning){--ion-color-base:var(--ion-color-warning,#ffce00)}:host(.ion-color-danger){--ion-color-base:var(--ion-color-danger,#f14141)}:host(.ion-color-light){--ion-color-base:var(--ion-color-light,#f4f5f8)}:host(.ion-color-medium){--ion-color-base:var(--ion-color-medium,#989aa2)}:host(.ion-color-dark){--ion-color-base:var(--ion-color-dark,#222428)}\"},enumerable:!0,configurable:!0}),t}(),requests=new Map;function getSvgContent(t,e,i){var n=requests.get(e);return n||(n=fetch(e,{cache:\"force-cache\"}).then(function(t){return isStatusValid(t.status)?t.text():Promise.resolve(null)}).then(function(e){return validateContent(t,e,i)}),requests.set(e,n)),n}function isStatusValid(t){return t<=299}function validateContent(t,e,i){if(e){var n=t.createDocumentFragment(),r=t.createElement(\"div\");r.innerHTML=e,n.appendChild(r);for(var o=r.childNodes.length-1;o>=0;o--)\"svg\"!==r.childNodes[o].nodeName.toLowerCase()&&r.removeChild(r.childNodes[o]);var s=r.firstElementChild;if(s&&\"svg\"===s.nodeName.toLowerCase()&&(i&&s.setAttribute(\"class\",i),isValid(s)))return r.innerHTML}return\"\"}function createColorClasses(t){var e;return t?((e={\"ion-color\":!0})[\"ion-color-\"+t]=!0,e):null}export{Icon as IonIcon};"
  },
  {
    "path": "content/js/stencil/esm/es5/build/bubpozqb.sc.entry.js",
    "content": "import{h}from\"../ionic-site-components.core.js\";var CACHED_MAP;function getIconMap(){if(!CACHED_MAP){var t=window;t.Ionicons=t.Ionicons||{},CACHED_MAP=t.Ionicons.map=t.Ionicons.map||new Map}return CACHED_MAP}function getName(t,e,i,n){return e=\"ios\"===(e=(e||\"md\").toLowerCase())?\"ios\":\"md\",i&&\"ios\"===e?t=i.toLowerCase():n&&\"md\"===e?t=n.toLowerCase():t&&(t=t.toLowerCase(),/^md-|^ios-|^logo-/.test(t)||(t=e+\"-\"+t)),\"string\"!=typeof t||\"\"===t.trim()?null:\"\"!==t.replace(/[a-z]|-|\\d/gi,\"\")?null:t}function getSrc(t){return\"string\"==typeof t&&isSrc(t=t.trim())?t:null}function isSrc(t){return t.length>0&&/(\\/|\\.)/.test(t)}function isValid(t){if(1===t.nodeType){if(\"script\"===t.nodeName.toLowerCase())return!1;for(var e=0;e<t.attributes.length;e++){var i=t.attributes[e].value;if(\"string\"==typeof i&&0===i.toLowerCase().indexOf(\"on\"))return!1}for(e=0;e<t.childNodes.length;e++)if(!isValid(t.childNodes[e]))return!1}return!0}var Icon=function(){function t(){this.isVisible=!1,this.lazy=!1}return t.prototype.componentWillLoad=function(){var t=this;this.waitUntilVisible(this.el,\"50px\",function(){t.isVisible=!0,t.loadIcon()})},t.prototype.componentDidUnload=function(){this.io&&(this.io.disconnect(),this.io=void 0)},t.prototype.waitUntilVisible=function(t,e,i){var n=this;if(this.lazy&&this.win&&this.win.IntersectionObserver){var r=this.io=new this.win.IntersectionObserver(function(t){t[0].isIntersecting&&(r.disconnect(),n.io=void 0,i())},{rootMargin:e});r.observe(t)}else i()},t.prototype.loadIcon=function(){var t=this;if(!this.isServer&&this.isVisible){var e=this.getUrl();e?getSvgContent(this.doc,e,\"s-ion-icon\").then(function(e){return t.svgContent=e}):console.error(\"icon was not resolved\")}if(!this.ariaLabel){var i=getName(this.getName(),this.mode,this.ios,this.md);i&&(this.ariaLabel=i.replace(\"ios-\",\"\").replace(\"md-\",\"\").replace(/\\-/g,\" \"))}},t.prototype.getName=function(){return void 0!==this.name?this.name:this.icon&&!isSrc(this.icon)?this.icon:void 0},t.prototype.getUrl=function(){var t=getSrc(this.src);return t||((t=getName(this.getName(),this.mode,this.ios,this.md))?this.getNamedUrl(t):(t=getSrc(this.icon))||null)},t.prototype.getNamedUrl=function(t){return getIconMap().get(t)||this.resourcesUrl+\"svg/\"+t+\".svg\"},t.prototype.hostData=function(){var t,e=this.flipRtl||this.ariaLabel&&this.ariaLabel.indexOf(\"arrow\")>-1&&!1!==this.flipRtl;return{role:\"img\",class:Object.assign({},createColorClasses(this.color),(t={},t[\"icon-\"+this.size]=!!this.size,t[\"flip-rtl\"]=e&&\"rtl\"===this.doc.dir,t))}},t.prototype.render=function(){return h(\"div\",!this.isServer&&this.svgContent?{class:\"icon-inner\",innerHTML:this.svgContent}:{class:\"icon-inner\"})},Object.defineProperty(t,\"is\",{get:function(){return\"ion-icon\"},enumerable:!0,configurable:!0}),Object.defineProperty(t,\"encapsulation\",{get:function(){return\"shadow\"},enumerable:!0,configurable:!0}),Object.defineProperty(t,\"properties\",{get:function(){return{ariaLabel:{type:String,attr:\"aria-label\",reflectToAttr:!0,mutable:!0},color:{type:String,attr:\"color\"},doc:{context:\"document\"},el:{elementRef:!0},flipRtl:{type:Boolean,attr:\"flip-rtl\"},icon:{type:String,attr:\"icon\",watchCallbacks:[\"loadIcon\"]},ios:{type:String,attr:\"ios\"},isServer:{context:\"isServer\"},isVisible:{state:!0},lazy:{type:Boolean,attr:\"lazy\"},md:{type:String,attr:\"md\"},mode:{type:String,attr:\"mode\"},name:{type:String,attr:\"name\",watchCallbacks:[\"loadIcon\"]},resourcesUrl:{context:\"resourcesUrl\"},size:{type:String,attr:\"size\"},src:{type:String,attr:\"src\",watchCallbacks:[\"loadIcon\"]},svgContent:{state:!0},win:{context:\"window\"}}},enumerable:!0,configurable:!0}),Object.defineProperty(t,\"style\",{get:function(){return\".sc-ion-icon-h{display:inline-block;width:1em;height:1em;contain:strict;-webkit-box-sizing:content-box!important;box-sizing:content-box!important}.icon-inner.sc-ion-icon, svg.sc-ion-icon{display:block;fill:currentColor;stroke:currentColor;height:100%;width:100%}.flip-rtl.sc-ion-icon-h   .icon-inner.sc-ion-icon{-webkit-transform:scaleX(-1);transform:scaleX(-1)}.icon-small.sc-ion-icon-h{font-size:18px!important}.icon-large.sc-ion-icon-h{font-size:32px!important}.ion-color.sc-ion-icon-h{color:var(--ion-color-base)!important}.ion-color-primary.sc-ion-icon-h{--ion-color-base:var(--ion-color-primary,#3880ff)}.ion-color-secondary.sc-ion-icon-h{--ion-color-base:var(--ion-color-secondary,#0cd1e8)}.ion-color-tertiary.sc-ion-icon-h{--ion-color-base:var(--ion-color-tertiary,#f4a942)}.ion-color-success.sc-ion-icon-h{--ion-color-base:var(--ion-color-success,#10dc60)}.ion-color-warning.sc-ion-icon-h{--ion-color-base:var(--ion-color-warning,#ffce00)}.ion-color-danger.sc-ion-icon-h{--ion-color-base:var(--ion-color-danger,#f14141)}.ion-color-light.sc-ion-icon-h{--ion-color-base:var(--ion-color-light,#f4f5f8)}.ion-color-medium.sc-ion-icon-h{--ion-color-base:var(--ion-color-medium,#989aa2)}.ion-color-dark.sc-ion-icon-h{--ion-color-base:var(--ion-color-dark,#222428)}\"},enumerable:!0,configurable:!0}),t}(),requests=new Map;function getSvgContent(t,e,i){var n=requests.get(e);return n||(n=fetch(e,{cache:\"force-cache\"}).then(function(t){return isStatusValid(t.status)?t.text():Promise.resolve(null)}).then(function(e){return validateContent(t,e,i)}),requests.set(e,n)),n}function isStatusValid(t){return t<=299}function validateContent(t,e,i){if(e){var n=t.createDocumentFragment(),r=t.createElement(\"div\");r.innerHTML=e,n.appendChild(r);for(var o=r.childNodes.length-1;o>=0;o--)\"svg\"!==r.childNodes[o].nodeName.toLowerCase()&&r.removeChild(r.childNodes[o]);var s=r.firstElementChild;if(s&&\"svg\"===s.nodeName.toLowerCase()&&(i&&s.setAttribute(\"class\",i),isValid(s)))return r.innerHTML}return\"\"}function createColorClasses(t){var e;return t?((e={\"ion-color\":!0})[\"ion-color-\"+t]=!0,e):null}export{Icon as IonIcon};"
  },
  {
    "path": "content/js/stencil/esm/es5/build/cetridhp.entry.js",
    "content": "import{h}from\"../ionic-site-components.core.js\";var IonicSnapBar=function(){function e(){this.active=!1}return e.prototype.componentDidLoad=function(){var e=this;setTimeout(function(){e.active=!0},2500)},e.prototype.close=function(){this.active=!1},e.prototype.render=function(){return[h(\"div\",{class:\"wrapper \"+(this.active?\"active\":\"\")},h(\"slot\",null)),h(\"div\",{id:\"snap-bar-close\",class:\"close\",onClick:this.close.bind(this)},\"×\")]},Object.defineProperty(e,\"is\",{get:function(){return\"ionic-snap-bar\"},enumerable:!0,configurable:!0}),Object.defineProperty(e,\"properties\",{get:function(){return{active:{state:!0}}},enumerable:!0,configurable:!0}),Object.defineProperty(e,\"style\",{get:function(){return\"ionic-snap-bar{background:-webkit-gradient(linear,left top,right top,from(#17203d),to(#1f2c53));background:linear-gradient(90deg,#17203d,#1f2c53);display:none;width:100%;position:relative;padding:0 24px;z-index:1;font-family:Eina,Helvetica Neue,Helvetica,sans-serif}ionic-snap-bar.hydrated{display:block}ionic-snap-bar .wrapper{padding:0 16px;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-align:center;align-items:center;-ms-flex-pack:distribute;justify-content:space-around;color:hsla(0,0%,100%,.6);margin:0 auto;max-width:586px;height:0;-webkit-transition:height .4s ease,padding .4s ease;transition:height .4s ease,padding .4s ease}ionic-snap-bar .wrapper.active{height:48px;padding-top:13px;padding-bottom:13px}ionic-snap-bar .wrapper.active>*{-webkit-transform:scaleY(1);transform:scaleY(1)}ionic-snap-bar .wrapper.active+.close{opacity:1;pointer-events:all}ionic-snap-bar .wrapper>*{font-size:1em;font-weight:600;display:inline-block;-webkit-transform:scaleY(0);transform:scaleY(0);-webkit-transition:transform .2s ease;transition:transform .2s ease}ionic-snap-bar .wrapper a{border-radius:1.8em;text-transform:uppercase;color:#fff;text-decoration:none;background:rgba(56,128,255,.28);display:inline-block;padding:6px 12px 4px;font-size:10px;letter-spacing:.1em;margin-bottom:2px;-webkit-transition:background .2s ease;transition:background .2s ease;font-weight:800}ionic-snap-bar .wrapper a:after{content:\\\"\\\";border:solid #fff;border-width:0 1px 1px 0;display:inline-block;padding:3px;margin-left:2px;vertical-align:1px;-webkit-transform:rotate(-45deg);transform:rotate(-45deg)}ionic-snap-bar .wrapper a:hover{background:rgba(56,128,255,.4)}ionic-snap-bar .wrapper h1,ionic-snap-bar .wrapper h2,ionic-snap-bar .wrapper h3,ionic-snap-bar .wrapper h4,ionic-snap-bar .wrapper strong{font-weight:700;color:#fff;letter-spacing:.01em}ionic-snap-bar .close{color:hsla(0,0%,100%,.3);position:absolute;font-size:24px;right:16px;top:5px;cursor:pointer;pointer-events:none;opacity:0;-webkit-transition:opacity .4s ease,color .2s ease;transition:opacity .4s ease,color .2s ease}ionic-snap-bar .close:hover{color:hsla(0,0%,100%,.5)}\"},enumerable:!0,configurable:!0}),e}();export{IonicSnapBar};"
  },
  {
    "path": "content/js/stencil/esm/es5/build/cetridhp.sc.entry.js",
    "content": "import{h}from\"../ionic-site-components.core.js\";var IonicSnapBar=function(){function e(){this.active=!1}return e.prototype.componentDidLoad=function(){var e=this;setTimeout(function(){e.active=!0},2500)},e.prototype.close=function(){this.active=!1},e.prototype.render=function(){return[h(\"div\",{class:\"wrapper \"+(this.active?\"active\":\"\")},h(\"slot\",null)),h(\"div\",{id:\"snap-bar-close\",class:\"close\",onClick:this.close.bind(this)},\"×\")]},Object.defineProperty(e,\"is\",{get:function(){return\"ionic-snap-bar\"},enumerable:!0,configurable:!0}),Object.defineProperty(e,\"properties\",{get:function(){return{active:{state:!0}}},enumerable:!0,configurable:!0}),Object.defineProperty(e,\"style\",{get:function(){return\"ionic-snap-bar{background:-webkit-gradient(linear,left top,right top,from(#17203d),to(#1f2c53));background:linear-gradient(90deg,#17203d,#1f2c53);display:none;width:100%;position:relative;padding:0 24px;z-index:1;font-family:Eina,Helvetica Neue,Helvetica,sans-serif}ionic-snap-bar.hydrated{display:block}ionic-snap-bar .wrapper{padding:0 16px;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-align:center;align-items:center;-ms-flex-pack:distribute;justify-content:space-around;color:hsla(0,0%,100%,.6);margin:0 auto;max-width:586px;height:0;-webkit-transition:height .4s ease,padding .4s ease;transition:height .4s ease,padding .4s ease}ionic-snap-bar .wrapper.active{height:48px;padding-top:13px;padding-bottom:13px}ionic-snap-bar .wrapper.active>*{-webkit-transform:scaleY(1);transform:scaleY(1)}ionic-snap-bar .wrapper.active+.close{opacity:1;pointer-events:all}ionic-snap-bar .wrapper>*{font-size:1em;font-weight:600;display:inline-block;-webkit-transform:scaleY(0);transform:scaleY(0);-webkit-transition:transform .2s ease;transition:transform .2s ease}ionic-snap-bar .wrapper a{border-radius:1.8em;text-transform:uppercase;color:#fff;text-decoration:none;background:rgba(56,128,255,.28);display:inline-block;padding:6px 12px 4px;font-size:10px;letter-spacing:.1em;margin-bottom:2px;-webkit-transition:background .2s ease;transition:background .2s ease;font-weight:800}ionic-snap-bar .wrapper a:after{content:\\\"\\\";border:solid #fff;border-width:0 1px 1px 0;display:inline-block;padding:3px;margin-left:2px;vertical-align:1px;-webkit-transform:rotate(-45deg);transform:rotate(-45deg)}ionic-snap-bar .wrapper a:hover{background:rgba(56,128,255,.4)}ionic-snap-bar .wrapper h1,ionic-snap-bar .wrapper h2,ionic-snap-bar .wrapper h3,ionic-snap-bar .wrapper h4,ionic-snap-bar .wrapper strong{font-weight:700;color:#fff;letter-spacing:.01em}ionic-snap-bar .close{color:hsla(0,0%,100%,.3);position:absolute;font-size:24px;right:16px;top:5px;cursor:pointer;pointer-events:none;opacity:0;-webkit-transition:opacity .4s ease,color .2s ease;transition:opacity .4s ease,color .2s ease}ionic-snap-bar .close:hover{color:hsla(0,0%,100%,.5)}\"},enumerable:!0,configurable:!0}),e}();export{IonicSnapBar};"
  },
  {
    "path": "content/js/stencil/esm/es5/build/cz7vrrja.entry.js",
    "content": "import{h}from\"../ionic-site-components.core.js\";var IonicToggle=function(){function e(){}return e.prototype.componentDidLoad=function(){},e.prototype.selectionChanged=function(e){var t=e.detail,o=this.el.querySelectorAll(\"ionic-toggle-button\");Array.prototype.forEach.call(o,function(e){e.deselect()});var n=t.tab;t.select(),console.log(\"Selecting this one\",n,t);var r=this.el.querySelectorAll(\"ionic-toggle-tab\");console.log(\"Found tabs\",r),Array.prototype.forEach.call(r,function(e){e.hide(),e.tab===n&&e.show()})},e.prototype.render=function(){return h(\"div\",{class:\"toggle-content\"},h(\"div\",{class:\"toggle-buttons\"},h(\"slot\",{name:\"buttons\"})),h(\"div\",{class:\"toggle-tabs\"},h(\"slot\",{name:\"tabs\"})))},Object.defineProperty(e,\"is\",{get:function(){return\"ionic-toggle\"},enumerable:!0,configurable:!0}),Object.defineProperty(e,\"encapsulation\",{get:function(){return\"shadow\"},enumerable:!0,configurable:!0}),Object.defineProperty(e,\"properties\",{get:function(){return{el:{elementRef:!0}}},enumerable:!0,configurable:!0}),Object.defineProperty(e,\"listeners\",{get:function(){return[{name:\"toggleSelected\",method:\"selectionChanged\"}]},enumerable:!0,configurable:!0}),Object.defineProperty(e,\"style\",{get:function(){return\":host{display:block}.toggle-buttons{display:-ms-flexbox;display:flex;-ms-flex-direction:row;flex-direction:row;-ms-flex-pack:center;justify-content:center}\"},enumerable:!0,configurable:!0}),e}();export{IonicToggle};"
  },
  {
    "path": "content/js/stencil/esm/es5/build/cz7vrrja.sc.entry.js",
    "content": "import{h}from\"../ionic-site-components.core.js\";var IonicToggle=function(){function e(){}return e.prototype.componentDidLoad=function(){},e.prototype.selectionChanged=function(e){var t=e.detail,o=this.el.querySelectorAll(\"ionic-toggle-button\");Array.prototype.forEach.call(o,function(e){e.deselect()});var n=t.tab;t.select(),console.log(\"Selecting this one\",n,t);var r=this.el.querySelectorAll(\"ionic-toggle-tab\");console.log(\"Found tabs\",r),Array.prototype.forEach.call(r,function(e){e.hide(),e.tab===n&&e.show()})},e.prototype.render=function(){return h(\"div\",{class:\"toggle-content\"},h(\"div\",{class:\"toggle-buttons\"},h(\"slot\",{name:\"buttons\"})),h(\"div\",{class:\"toggle-tabs\"},h(\"slot\",{name:\"tabs\"})))},Object.defineProperty(e,\"is\",{get:function(){return\"ionic-toggle\"},enumerable:!0,configurable:!0}),Object.defineProperty(e,\"encapsulation\",{get:function(){return\"shadow\"},enumerable:!0,configurable:!0}),Object.defineProperty(e,\"properties\",{get:function(){return{el:{elementRef:!0}}},enumerable:!0,configurable:!0}),Object.defineProperty(e,\"listeners\",{get:function(){return[{name:\"toggleSelected\",method:\"selectionChanged\"}]},enumerable:!0,configurable:!0}),Object.defineProperty(e,\"style\",{get:function(){return\".sc-ionic-toggle-h{display:block}.toggle-buttons.sc-ionic-toggle{display:-ms-flexbox;display:flex;-ms-flex-direction:row;flex-direction:row;-ms-flex-pack:center;justify-content:center}\"},enumerable:!0,configurable:!0}),e}();export{IonicToggle};"
  },
  {
    "path": "content/js/stencil/esm/es5/build/ehteibio.entry.js",
    "content": "import*as tslib_1 from\"../polyfills/tslib.js\";import{h}from\"../ionic-site-components.core.js\";var Close=function(){return h(\"svg\",{version:\"1.1\",xmlns:\"http://www.w3.org/2000/svg\",viewBox:\"0 0 512 512\",preserveAspectRatio:\"\",style:{\"enable-background\":\"new 0 0 512 512\"}},h(\"path\",{d:\"M256,307c-2.4,0-4.8-0.4-7-1.2L78.3,246.3c-11.1-3.9-17-16-13.1-27.1c3.9-11.1,16.1-16.9,27.2-13l157.9,55.1\\n\\tc3.7,1.3,7.7,1.3,11.3,0l157.9-55.1c11.1-3.9,23.3,2,27.2,13c3.9,11.1-2,23.2-13.1,27.1L263,305.8C260.8,306.6,258.4,307,256,307z\"}))},IonicSearch=function(){function t(){this.active=!1,this.query=\"\",this.pending=0,this.results=null,this.dragY=null,this.startY=null,this.screenHeight=null,this.URLS=function(){var t=\"https://api.swiftype.com/api/v1/public/engines/\",e=\"9oVyaKGPzxoZAyUo9Sm8\";return{autocomplete:function(i){return t+\"suggest.json?q=\"+i+\"&engine_key=\"+e},search:function(i){return t+\"search.json?q=\"+i+\"&engine_key=\"+e}}},this.activate=this.activate.bind(this),this.close=this.close.bind(this),this.onKeyUp=this.onKeyUp.bind(this),this.touchStart=this.touchStart.bind(this),this.touchMove=this.touchMove.bind(this),this.touchEnd=this.touchEnd.bind(this),this.urls=this.URLS()}return t.prototype.activate=function(){var t=this;this.active=!0,this.el.classList.add(\"active\"),setTimeout(function(){t.el.querySelector(\"input\").focus()},500,this)},t.prototype.close=function(){var t=this;this.active=!1,this.el.classList.remove(\"active\"),this.el.querySelector(\"input\").blur(),setTimeout(function(){t.el.querySelector(\"input\").value=\"\",t.results=null},500,this)},t.prototype.onKeyUp=function(t){return tslib_1.__awaiter(this,void 0,void 0,function(){var e;return tslib_1.__generator(this,function(i){switch(i.label){case 0:return 27===t.keyCode?(this.close(),[2]):t.target.value.length<3?(this.results=null,[2]):(this.query=t.target.value,this.pending++,[4,fetch(this.urls.autocomplete(this.query))]);case 1:return[4,i.sent().json()];case 2:return e=i.sent(),this.pending--,this.results=e.records.page,[2]}})})},t.prototype.touchStart=function(t){this.screenHeight=window.innerHeight||document.documentElement.clientHeight||document.body.clientHeight,this.startY=Math.round(t.touches.item(0).screenY)},t.prototype.touchMove=function(t){t.preventDefault(),this.dragY=Math.max(0,Math.round((t.touches.item(0).screenY-this.startY)/this.screenHeight*100)),this.dragStyles={transitionDuration:\".1s\",transform:\"translate3d(0, \"+this.dragY+\"%, 0)\"}},t.prototype.isFirefox=function(){return-1!=navigator.userAgent.indexOf(\"Firefox\")},t.prototype.touchEnd=function(){this.dragY>30&&this.close(),this.dragY=null,this.startY=null,this.dragStyles={}},t.prototype.render=function(){var t=this;return[h(\"div\",{class:\"search-box\"+(this.active?\" active\":\"\"),style:this.dragStyles,onTouchMove:function(e){return t.results&&t.results.length>5?null:e.preventDefault()}},h(\"input\",{type:\"text\",onKeyUp:this.onKeyUp,placeholder:\"Search Ionic..\"}),h(\"ion-icon\",{class:\"search-static \"+(this.active?\" active\":\"\"),name:\"md-search\"}),this.mobile&&!this.isFirefox()?h(\"div\",{class:\"mobile-close\",onClick:this.close,onTouchStart:this.touchStart,onTouchMove:this.touchMove,onTouchEnd:this.touchEnd},h(Close,null)):h(\"ion-icon\",{class:\"close \"+(this.active?\" active\":\"\"),name:\"md-close\",onClick:this.close}),null!==this.results?h(\"ul\",null,this.results.map(function(t){return h(\"li\",null,h(\"a\",{href:t.url,title:t.title},h(\"strong\",null,t.title),h(\"span\",{innerHTML:t.highlight.sections})))}),0===this.results.length?h(\"li\",null,h(\"span\",{class:\"no-results\"},\"No results\")):null):null,h(\"div\",{class:\"slot \"+(null===this.results?\"\":\"hidden\")},h(\"slot\",null)),this.pending>0?h(\"span\",{class:\"searching\"}):null),h(\"ion-icon\",{class:\"search \"+(this.active?\" active\":\"\"),name:\"md-search\",onClick:this.active?null:this.activate}),h(\"div\",{class:\"backdrop \"+(this.active?\"active\":null),onClick:this.close})]},Object.defineProperty(t,\"is\",{get:function(){return\"ionic-search\"},enumerable:!0,configurable:!0}),Object.defineProperty(t,\"properties\",{get:function(){return{active:{state:!0},dragStyles:{state:!0},el:{elementRef:!0},mobile:{type:Boolean,attr:\"mobile\"},pending:{state:!0},query:{state:!0},results:{state:!0}}},enumerable:!0,configurable:!0}),Object.defineProperty(t,\"style\",{get:function(){return\"\\@-webkit-keyframes ionic-search-scan{0%{left:0}to{left:100%}}\\@keyframes ionic-search-scan{0%{left:0}to{left:100%}}\\@-webkit-keyframes ionic-search-scan-mobile{0%{left:calc(0% + 8px)}to{left:calc(100% - 16px)}}\\@keyframes ionic-search-scan-mobile{0%{left:calc(0% + 8px)}to{left:calc(100% - 16px)}}ionic-search{display:block;display:inline-block}ionic-search svg{fill:#727a87}ionic-search ion-icon{font-size:18px;cursor:pointer}ionic-search ion-icon:hover svg{fill:#3880ff}ionic-search .search{right:115px;font-size:18px;margin-top:7px;color:#fff;-webkit-transition:opacity .2s,-webkit-transform .4s cubic-bezier(.23,1,.32,1);transition:opacity .2s,-webkit-transform .4s cubic-bezier(.23,1,.32,1);transition:opacity .2s,transform .4s cubic-bezier(.23,1,.32,1);transition:opacity .2s,transform .4s cubic-bezier(.23,1,.32,1),-webkit-transform .4s cubic-bezier(.23,1,.32,1)}ionic-search .search.active{cursor:default;opacity:0;-webkit-transform:scale3d(0,0,1);transform:scale3d(0,0,1)}ionic-search .search svg{fill:#a8b0be;width:18px;height:18px}ionic-search .search-static{left:15px;z-index:2;opacity:0;-webkit-transform:translate3d(0,-25px,0);transform:translate3d(0,-25px,0);-webkit-transition:opacity .1s,-webkit-transform .4s cubic-bezier(.23,1,.32,1);transition:opacity .1s,-webkit-transform .4s cubic-bezier(.23,1,.32,1);transition:transform .4s cubic-bezier(.23,1,.32,1),opacity .1s;transition:transform .4s cubic-bezier(.23,1,.32,1),opacity .1s,-webkit-transform .4s cubic-bezier(.23,1,.32,1)}ionic-search .close{right:11px;z-index:2;opacity:0;pointer-events:none;-webkit-transition:opacity .3s;transition:opacity .3s}ionic-search .close.active{pointer-events:all;opacity:1;-webkit-transform:none;transform:none}ionic-search input{width:100%;margin-left:0;padding-left:40px;padding-right:40px;outline:none;border:none;z-index:2;background:#fff;border-radius:6px;padding:14px 30px 14px 41px;font-size:14px;letter-spacing:-.01em;position:relative;opacity:0;-webkit-transform:translate3d(0,-15px,0);transform:translate3d(0,-15px,0);-webkit-transition:opacity .2s,-webkit-transform .4s cubic-bezier(.23,1,.32,1);transition:opacity .2s,-webkit-transform .4s cubic-bezier(.23,1,.32,1);transition:opacity .2s,transform .4s cubic-bezier(.23,1,.32,1);transition:opacity .2s,transform .4s cubic-bezier(.23,1,.32,1),-webkit-transform .4s cubic-bezier(.23,1,.32,1)}ionic-search input::-webkit-input-placeholder{color:#a8b0be}ionic-search input:-ms-input-placeholder{color:#a8b0be}ionic-search input::-ms-input-placeholder{color:#a8b0be}ionic-search input::placeholder{color:#a8b0be}ionic-search .slot .hidden{display:none}ionic-search ul{position:relative;background:#fff;list-style:none;margin-top:4px;margin-bottom:0;border-radius:6px;text-align:left;padding:19px 3px;-webkit-box-shadow:0 8px 16px rgba(0,0,0,.08);box-shadow:0 8px 16px rgba(0,0,0,.08);opacity:0;-webkit-transform:translate3d(0,-50px,0);transform:translate3d(0,-50px,0);-webkit-transition:opacity .2s,-webkit-transform .5s cubic-bezier(.23,1,.32,1);transition:opacity .2s,-webkit-transform .5s cubic-bezier(.23,1,.32,1);transition:transform .5s cubic-bezier(.23,1,.32,1),opacity .2s;transition:transform .5s cubic-bezier(.23,1,.32,1),opacity .2s,-webkit-transform .5s cubic-bezier(.23,1,.32,1)}ionic-search ul strong{display:block;font-weight:600}ionic-search ul span{color:#767d88;font-size:12px}ionic-search ul span em{color:#727a87}ionic-search a,ionic-search ul .no-results{padding:8px 40px;color:#2a2f38}ionic-search a{display:inline-block;font-weight:600;width:100%;-webkit-transition:color .2s,background-color .2s;transition:color .2s,background-color .2s}ionic-search a:hover{color:#3880ff;background-color:#fafafa}ionic-search .searching{position:absolute;height:1px;width:8px;background:#3880ff;top:30px;left:0;-webkit-animation:ionic-search-scan 1s ease-in-out infinite;animation:ionic-search-scan 1s ease-in-out infinite}ionic-search .search-box{position:absolute;left:calc(50% - 330px);width:660px;top:10px;z-index:1;padding-top:2px;pointer-events:none;-webkit-transition:opacity .2s linear;transition:opacity .2s linear}ionic-search .search-box ion-icon{top:17px;font-size:17px;position:absolute}ionic-search .search-box.active{pointer-events:all}ionic-search .search-box.active ul{-webkit-transform:none;transform:none;opacity:1;-webkit-transition-delay:.2s;transition-delay:.2s}ionic-search .search-box.active input{-webkit-transition-delay:.1s;transition-delay:.1s}ionic-search .search-box.active .close,ionic-search .search-box.active .search-static,ionic-search .search-box.active input{-webkit-transform:none;transform:none;opacity:1}ionic-search .search-box.active .close{-webkit-transition-delay:.4s;transition-delay:.4s}ionic-search .backdrop{background:rgba(0,8,24,.4);position:fixed;top:0;right:0;bottom:0;left:0;opacity:0;pointer-events:none;-webkit-transition:all .4s ease;transition:all .4s ease}ionic-search .backdrop.active{opacity:1;pointer-events:all}ionic-search[mobile]{display:block}ionic-search[mobile] .search{color:#999;right:auto;left:0;bottom:0;font-size:28px;padding:22px;top:auto;z-index:3;position:fixed}ionic-search[mobile] .backdrop{top:0;background:rgba(0,0,0,.5);z-index:2}ionic-search[mobile] .search-box{width:auto;left:2px;right:2px;top:42px;bottom:0;padding:60px 12px 48px;position:fixed;z-index:3;background:#fff;border-top-left-radius:12px;border-top-right-radius:12px;-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0);-webkit-transition:-webkit-transform .4s cubic-bezier(.23,1,.32,1);transition:-webkit-transform .4s cubic-bezier(.23,1,.32,1);transition:transform .4s cubic-bezier(.23,1,.32,1);transition:transform .4s cubic-bezier(.23,1,.32,1),-webkit-transform .4s cubic-bezier(.23,1,.32,1)}ionic-search[mobile] .search-box.active{-webkit-transform:none;transform:none}ionic-search[mobile] .mobile-close{-webkit-transition-delay:0;transition-delay:0;left:calc(50% - 24px);top:0;left:0;right:0;position:absolute}ionic-search[mobile] .mobile-close svg{position:absolute;top:8px;width:40px;height:40px;left:calc(50% - 20px)}ionic-search[mobile] .searching{top:113px;z-index:3;-webkit-animation:ionic-search-scan-mobile 1s ease-in-out infinite;animation:ionic-search-scan-mobile 1s ease-in-out infinite}ionic-search[mobile] ul{opacity:1;-webkit-transform:none;transform:none;z-index:3;top:auto;-webkit-box-shadow:none;box-shadow:none;width:100%;max-height:calc(100vh - 154px);overflow:touch}ionic-search[mobile] .search-static{-webkit-transform:none;transform:none;opacity:1;z-index:3;top:71px;left:22px}ionic-search[mobile] a{padding-left:20px;padding-right:20px}ionic-search[mobile] input{margin:0 0 10px;padding:10px 40px 8px;background:#eceef2;border-radius:12px;width:100%}ionic-search[mobile]~.mobile-nav__pane{min-height:100%;background:#fff;-webkit-transition:transform .4s ease,border-radius .4s step-end;transition:transform .4s ease,border-radius .4s step-end}ionic-search[mobile].active~.mobile-nav__pane{border-radius:12px;-webkit-transform:scale3d(.97,.97,1);transform:scale3d(.97,.97,1);-webkit-transition:transform .4s ease;transition:transform .4s ease}.mobile-nav{background:#000!important}\"},enumerable:!0,configurable:!0}),t}();export{IonicSearch};"
  },
  {
    "path": "content/js/stencil/esm/es5/build/ehteibio.sc.entry.js",
    "content": "import*as tslib_1 from\"../polyfills/tslib.js\";import{h}from\"../ionic-site-components.core.js\";var Close=function(){return h(\"svg\",{version:\"1.1\",xmlns:\"http://www.w3.org/2000/svg\",viewBox:\"0 0 512 512\",preserveAspectRatio:\"\",style:{\"enable-background\":\"new 0 0 512 512\"}},h(\"path\",{d:\"M256,307c-2.4,0-4.8-0.4-7-1.2L78.3,246.3c-11.1-3.9-17-16-13.1-27.1c3.9-11.1,16.1-16.9,27.2-13l157.9,55.1\\n\\tc3.7,1.3,7.7,1.3,11.3,0l157.9-55.1c11.1-3.9,23.3,2,27.2,13c3.9,11.1-2,23.2-13.1,27.1L263,305.8C260.8,306.6,258.4,307,256,307z\"}))},IonicSearch=function(){function t(){this.active=!1,this.query=\"\",this.pending=0,this.results=null,this.dragY=null,this.startY=null,this.screenHeight=null,this.URLS=function(){var t=\"https://api.swiftype.com/api/v1/public/engines/\",e=\"9oVyaKGPzxoZAyUo9Sm8\";return{autocomplete:function(i){return t+\"suggest.json?q=\"+i+\"&engine_key=\"+e},search:function(i){return t+\"search.json?q=\"+i+\"&engine_key=\"+e}}},this.activate=this.activate.bind(this),this.close=this.close.bind(this),this.onKeyUp=this.onKeyUp.bind(this),this.touchStart=this.touchStart.bind(this),this.touchMove=this.touchMove.bind(this),this.touchEnd=this.touchEnd.bind(this),this.urls=this.URLS()}return t.prototype.activate=function(){var t=this;this.active=!0,this.el.classList.add(\"active\"),setTimeout(function(){t.el.querySelector(\"input\").focus()},500,this)},t.prototype.close=function(){var t=this;this.active=!1,this.el.classList.remove(\"active\"),this.el.querySelector(\"input\").blur(),setTimeout(function(){t.el.querySelector(\"input\").value=\"\",t.results=null},500,this)},t.prototype.onKeyUp=function(t){return tslib_1.__awaiter(this,void 0,void 0,function(){var e;return tslib_1.__generator(this,function(i){switch(i.label){case 0:return 27===t.keyCode?(this.close(),[2]):t.target.value.length<3?(this.results=null,[2]):(this.query=t.target.value,this.pending++,[4,fetch(this.urls.autocomplete(this.query))]);case 1:return[4,i.sent().json()];case 2:return e=i.sent(),this.pending--,this.results=e.records.page,[2]}})})},t.prototype.touchStart=function(t){this.screenHeight=window.innerHeight||document.documentElement.clientHeight||document.body.clientHeight,this.startY=Math.round(t.touches.item(0).screenY)},t.prototype.touchMove=function(t){t.preventDefault(),this.dragY=Math.max(0,Math.round((t.touches.item(0).screenY-this.startY)/this.screenHeight*100)),this.dragStyles={transitionDuration:\".1s\",transform:\"translate3d(0, \"+this.dragY+\"%, 0)\"}},t.prototype.isFirefox=function(){return-1!=navigator.userAgent.indexOf(\"Firefox\")},t.prototype.touchEnd=function(){this.dragY>30&&this.close(),this.dragY=null,this.startY=null,this.dragStyles={}},t.prototype.render=function(){var t=this;return[h(\"div\",{class:\"search-box\"+(this.active?\" active\":\"\"),style:this.dragStyles,onTouchMove:function(e){return t.results&&t.results.length>5?null:e.preventDefault()}},h(\"input\",{type:\"text\",onKeyUp:this.onKeyUp,placeholder:\"Search Ionic..\"}),h(\"ion-icon\",{class:\"search-static \"+(this.active?\" active\":\"\"),name:\"md-search\"}),this.mobile&&!this.isFirefox()?h(\"div\",{class:\"mobile-close\",onClick:this.close,onTouchStart:this.touchStart,onTouchMove:this.touchMove,onTouchEnd:this.touchEnd},h(Close,null)):h(\"ion-icon\",{class:\"close \"+(this.active?\" active\":\"\"),name:\"md-close\",onClick:this.close}),null!==this.results?h(\"ul\",null,this.results.map(function(t){return h(\"li\",null,h(\"a\",{href:t.url,title:t.title},h(\"strong\",null,t.title),h(\"span\",{innerHTML:t.highlight.sections})))}),0===this.results.length?h(\"li\",null,h(\"span\",{class:\"no-results\"},\"No results\")):null):null,h(\"div\",{class:\"slot \"+(null===this.results?\"\":\"hidden\")},h(\"slot\",null)),this.pending>0?h(\"span\",{class:\"searching\"}):null),h(\"ion-icon\",{class:\"search \"+(this.active?\" active\":\"\"),name:\"md-search\",onClick:this.active?null:this.activate}),h(\"div\",{class:\"backdrop \"+(this.active?\"active\":null),onClick:this.close})]},Object.defineProperty(t,\"is\",{get:function(){return\"ionic-search\"},enumerable:!0,configurable:!0}),Object.defineProperty(t,\"properties\",{get:function(){return{active:{state:!0},dragStyles:{state:!0},el:{elementRef:!0},mobile:{type:Boolean,attr:\"mobile\"},pending:{state:!0},query:{state:!0},results:{state:!0}}},enumerable:!0,configurable:!0}),Object.defineProperty(t,\"style\",{get:function(){return\"\\@-webkit-keyframes ionic-search-scan{0%{left:0}to{left:100%}}\\@keyframes ionic-search-scan{0%{left:0}to{left:100%}}\\@-webkit-keyframes ionic-search-scan-mobile{0%{left:calc(0% + 8px)}to{left:calc(100% - 16px)}}\\@keyframes ionic-search-scan-mobile{0%{left:calc(0% + 8px)}to{left:calc(100% - 16px)}}ionic-search{display:block;display:inline-block}ionic-search svg{fill:#727a87}ionic-search ion-icon{font-size:18px;cursor:pointer}ionic-search ion-icon:hover svg{fill:#3880ff}ionic-search .search{right:115px;font-size:18px;margin-top:7px;color:#fff;-webkit-transition:opacity .2s,-webkit-transform .4s cubic-bezier(.23,1,.32,1);transition:opacity .2s,-webkit-transform .4s cubic-bezier(.23,1,.32,1);transition:opacity .2s,transform .4s cubic-bezier(.23,1,.32,1);transition:opacity .2s,transform .4s cubic-bezier(.23,1,.32,1),-webkit-transform .4s cubic-bezier(.23,1,.32,1)}ionic-search .search.active{cursor:default;opacity:0;-webkit-transform:scale3d(0,0,1);transform:scale3d(0,0,1)}ionic-search .search svg{fill:#a8b0be;width:18px;height:18px}ionic-search .search-static{left:15px;z-index:2;opacity:0;-webkit-transform:translate3d(0,-25px,0);transform:translate3d(0,-25px,0);-webkit-transition:opacity .1s,-webkit-transform .4s cubic-bezier(.23,1,.32,1);transition:opacity .1s,-webkit-transform .4s cubic-bezier(.23,1,.32,1);transition:transform .4s cubic-bezier(.23,1,.32,1),opacity .1s;transition:transform .4s cubic-bezier(.23,1,.32,1),opacity .1s,-webkit-transform .4s cubic-bezier(.23,1,.32,1)}ionic-search .close{right:11px;z-index:2;opacity:0;pointer-events:none;-webkit-transition:opacity .3s;transition:opacity .3s}ionic-search .close.active{pointer-events:all;opacity:1;-webkit-transform:none;transform:none}ionic-search input{width:100%;margin-left:0;padding-left:40px;padding-right:40px;outline:none;border:none;z-index:2;background:#fff;border-radius:6px;padding:14px 30px 14px 41px;font-size:14px;letter-spacing:-.01em;position:relative;opacity:0;-webkit-transform:translate3d(0,-15px,0);transform:translate3d(0,-15px,0);-webkit-transition:opacity .2s,-webkit-transform .4s cubic-bezier(.23,1,.32,1);transition:opacity .2s,-webkit-transform .4s cubic-bezier(.23,1,.32,1);transition:opacity .2s,transform .4s cubic-bezier(.23,1,.32,1);transition:opacity .2s,transform .4s cubic-bezier(.23,1,.32,1),-webkit-transform .4s cubic-bezier(.23,1,.32,1)}ionic-search input::-webkit-input-placeholder{color:#a8b0be}ionic-search input:-ms-input-placeholder{color:#a8b0be}ionic-search input::-ms-input-placeholder{color:#a8b0be}ionic-search input::placeholder{color:#a8b0be}ionic-search .slot .hidden{display:none}ionic-search ul{position:relative;background:#fff;list-style:none;margin-top:4px;margin-bottom:0;border-radius:6px;text-align:left;padding:19px 3px;-webkit-box-shadow:0 8px 16px rgba(0,0,0,.08);box-shadow:0 8px 16px rgba(0,0,0,.08);opacity:0;-webkit-transform:translate3d(0,-50px,0);transform:translate3d(0,-50px,0);-webkit-transition:opacity .2s,-webkit-transform .5s cubic-bezier(.23,1,.32,1);transition:opacity .2s,-webkit-transform .5s cubic-bezier(.23,1,.32,1);transition:transform .5s cubic-bezier(.23,1,.32,1),opacity .2s;transition:transform .5s cubic-bezier(.23,1,.32,1),opacity .2s,-webkit-transform .5s cubic-bezier(.23,1,.32,1)}ionic-search ul strong{display:block;font-weight:600}ionic-search ul span{color:#767d88;font-size:12px}ionic-search ul span em{color:#727a87}ionic-search a,ionic-search ul .no-results{padding:8px 40px;color:#2a2f38}ionic-search a{display:inline-block;font-weight:600;width:100%;-webkit-transition:color .2s,background-color .2s;transition:color .2s,background-color .2s}ionic-search a:hover{color:#3880ff;background-color:#fafafa}ionic-search .searching{position:absolute;height:1px;width:8px;background:#3880ff;top:30px;left:0;-webkit-animation:ionic-search-scan 1s ease-in-out infinite;animation:ionic-search-scan 1s ease-in-out infinite}ionic-search .search-box{position:absolute;left:calc(50% - 330px);width:660px;top:10px;z-index:1;padding-top:2px;pointer-events:none;-webkit-transition:opacity .2s linear;transition:opacity .2s linear}ionic-search .search-box ion-icon{top:17px;font-size:17px;position:absolute}ionic-search .search-box.active{pointer-events:all}ionic-search .search-box.active ul{-webkit-transform:none;transform:none;opacity:1;-webkit-transition-delay:.2s;transition-delay:.2s}ionic-search .search-box.active input{-webkit-transition-delay:.1s;transition-delay:.1s}ionic-search .search-box.active .close,ionic-search .search-box.active .search-static,ionic-search .search-box.active input{-webkit-transform:none;transform:none;opacity:1}ionic-search .search-box.active .close{-webkit-transition-delay:.4s;transition-delay:.4s}ionic-search .backdrop{background:rgba(0,8,24,.4);position:fixed;top:0;right:0;bottom:0;left:0;opacity:0;pointer-events:none;-webkit-transition:all .4s ease;transition:all .4s ease}ionic-search .backdrop.active{opacity:1;pointer-events:all}ionic-search[mobile]{display:block}ionic-search[mobile] .search{color:#999;right:auto;left:0;bottom:0;font-size:28px;padding:22px;top:auto;z-index:3;position:fixed}ionic-search[mobile] .backdrop{top:0;background:rgba(0,0,0,.5);z-index:2}ionic-search[mobile] .search-box{width:auto;left:2px;right:2px;top:42px;bottom:0;padding:60px 12px 48px;position:fixed;z-index:3;background:#fff;border-top-left-radius:12px;border-top-right-radius:12px;-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0);-webkit-transition:-webkit-transform .4s cubic-bezier(.23,1,.32,1);transition:-webkit-transform .4s cubic-bezier(.23,1,.32,1);transition:transform .4s cubic-bezier(.23,1,.32,1);transition:transform .4s cubic-bezier(.23,1,.32,1),-webkit-transform .4s cubic-bezier(.23,1,.32,1)}ionic-search[mobile] .search-box.active{-webkit-transform:none;transform:none}ionic-search[mobile] .mobile-close{-webkit-transition-delay:0;transition-delay:0;left:calc(50% - 24px);top:0;left:0;right:0;position:absolute}ionic-search[mobile] .mobile-close svg{position:absolute;top:8px;width:40px;height:40px;left:calc(50% - 20px)}ionic-search[mobile] .searching{top:113px;z-index:3;-webkit-animation:ionic-search-scan-mobile 1s ease-in-out infinite;animation:ionic-search-scan-mobile 1s ease-in-out infinite}ionic-search[mobile] ul{opacity:1;-webkit-transform:none;transform:none;z-index:3;top:auto;-webkit-box-shadow:none;box-shadow:none;width:100%;max-height:calc(100vh - 154px);overflow:touch}ionic-search[mobile] .search-static{-webkit-transform:none;transform:none;opacity:1;z-index:3;top:71px;left:22px}ionic-search[mobile] a{padding-left:20px;padding-right:20px}ionic-search[mobile] input{margin:0 0 10px;padding:10px 40px 8px;background:#eceef2;border-radius:12px;width:100%}ionic-search[mobile]~.mobile-nav__pane{min-height:100%;background:#fff;-webkit-transition:transform .4s ease,border-radius .4s step-end;transition:transform .4s ease,border-radius .4s step-end}ionic-search[mobile].active~.mobile-nav__pane{border-radius:12px;-webkit-transform:scale3d(.97,.97,1);transform:scale3d(.97,.97,1);-webkit-transition:transform .4s ease;transition:transform .4s ease}.mobile-nav{background:#000!important}\"},enumerable:!0,configurable:!0}),t}();export{IonicSearch};"
  },
  {
    "path": "content/js/stencil/esm/es5/build/hclgi8iu.entry.js",
    "content": "import{h}from\"../ionic-site-components.core.js\";var _gsScope=\"undefined\"!=typeof window?window:\"undefined\"!=typeof module&&module.exports&&\"undefined\"!=typeof global?global:{},TweenLite=function(t){var e={},i=t.document,s=t.GreenSockGlobals=t.GreenSockGlobals||t;if(s.TweenLite)return s.TweenLite;var n,r,a,o,l,h,_,c=function(t){var e,i=t.split(\".\"),n=s;for(e=0;e<i.length;e++)n[i[e]]=n=n[i[e]]||{};return n},u=c(\"com.greensock\"),f=function(t){var e,i=[],s=t.length;for(e=0;e!==s;i.push(t[e++]));return i},p=function(){},m=(h=Object.prototype.toString,_=h.call([]),function(t){return null!=t&&(t instanceof Array||\"object\"==typeof t&&!!t.push&&h.call(t)===_)}),d={},v=function(t,i,n,r){this.sc=d[t]?d[t].sc:[],d[t]=this,this.gsClass=null,this.func=n;var a=[];this.check=function(o){for(var l,h,_,u,f=i.length,p=f;--f>-1;)(l=d[i[f]]||new v(i[f],[])).gsClass?(a[f]=l.gsClass,p--):o&&l.sc.push(this);if(0===p&&n)for(_=(h=(\"com.greensock.\"+t).split(\".\")).pop(),u=c(h.join(\".\"))[_]=this.gsClass=n.apply(n,a),r&&(s[_]=e[_]=u),f=0;f<this.sc.length;f++)this.sc[f].check()},this.check(!0)},g=t._gsDefine=function(t,e,i,s){return new v(t,e,i,s)},T=u._class=function(t,e,i){return e=e||function(){},g(t,[],function(){return e},i),e};g.globals=s;var y=[0,0,1,1],w=T(\"easing.Ease\",function(t,e,i,s){this._func=t,this._type=i||0,this._power=s||0,this._params=e?y.concat(e):y},!0),P=w.map={},b=w.register=function(t,e,i,s){for(var n,r,a,o,l=e.split(\",\"),h=l.length,_=(i||\"easeIn,easeOut,easeInOut\").split(\",\");--h>-1;)for(r=l[h],n=s?T(\"easing.\"+r,null,!0):u.easing[r]||{},a=_.length;--a>-1;)P[r+\".\"+(o=_[a])]=P[o+r]=n[o]=t.getRatio?t:t[o]||new t};for((a=w.prototype)._calcEnd=!1,a.getRatio=function(t){if(this._func)return this._params[0]=t,this._func.apply(null,this._params);var e=this._type,i=this._power,s=1===e?1-t:2===e?t:t<.5?2*t:2*(1-t);return 1===i?s*=s:2===i?s*=s*s:3===i?s*=s*s*s:4===i&&(s*=s*s*s*s),1===e?1-s:2===e?s:t<.5?s/2:1-s/2},r=(n=[\"Linear\",\"Quad\",\"Cubic\",\"Quart\",\"Quint,Strong\"]).length;--r>-1;)a=n[r]+\",Power\"+r,b(new w(null,null,1,r),a,\"easeOut\",!0),b(new w(null,null,2,r),a,\"easeIn\"+(0===r?\",easeNone\":\"\")),b(new w(null,null,3,r),a,\"easeInOut\");P.linear=u.easing.Linear.easeIn,P.swing=u.easing.Quad.easeInOut;var S=T(\"events.EventDispatcher\",function(t){this._listeners={},this._eventTarget=t||this});(a=S.prototype).addEventListener=function(t,e,i,s,n){n=n||0;var r,a,h=this._listeners[t],_=0;for(this!==o||l||o.wake(),null==h&&(this._listeners[t]=h=[]),a=h.length;--a>-1;)(r=h[a]).c===e&&r.s===i?h.splice(a,1):0===_&&r.pr<n&&(_=a+1);h.splice(_,0,{c:e,s:i,up:s,pr:n})},a.removeEventListener=function(t,e){var i,s=this._listeners[t];if(s)for(i=s.length;--i>-1;)if(s[i].c===e)return void s.splice(i,1)},a.dispatchEvent=function(t){var e,i,s,n=this._listeners[t];if(n)for((e=n.length)>1&&(n=n.slice(0)),i=this._eventTarget;--e>-1;)(s=n[e])&&(s.up?s.c.call(s.s||i,{type:t,target:i}):s.c.call(s.s||i))};var k=t.requestAnimationFrame,A=t.cancelAnimationFrame,C=Date.now||function(){return(new Date).getTime()},x=C();for(r=(n=[\"ms\",\"moz\",\"webkit\",\"o\"]).length;--r>-1&&!k;)k=t[n[r]+\"RequestAnimationFrame\"],A=t[n[r]+\"CancelAnimationFrame\"]||t[n[r]+\"CancelRequestAnimationFrame\"];T(\"Ticker\",function(t,e){var s,n,r,a,h,_=this,c=C(),u=!(!1===e||!k)&&\"auto\",f=500,m=33,d=function(t){var e,i,o=C()-x;o>f&&(c+=o-m),_.time=((x+=o)-c)/1e3,e=_.time-h,(!s||e>0||!0===t)&&(_.frame++,h+=e+(e>=a?.004:a-e),i=!0),!0!==t&&(r=n(d)),i&&_.dispatchEvent(\"tick\")};S.call(_),_.time=_.frame=0,_.tick=function(){d(!0)},_.lagSmoothing=function(t,e){if(!arguments.length)return f<1e8;f=t||1e8,m=Math.min(e,f,0)},_.sleep=function(){null!=r&&(u&&A?A(r):clearTimeout(r),n=p,r=null,_===o&&(l=!1))},_.wake=function(t){null!==r?_.sleep():t?c+=-x+(x=C()):_.frame>10&&(x=C()-f+5),n=0===s?p:u&&k?k:function(t){return setTimeout(t,1e3*(h-_.time)+1|0)},_===o&&(l=!0),d(2)},_.fps=function(t){if(!arguments.length)return s;h=this.time+(a=1/((s=t)||60)),_.wake()},_.useRAF=function(t){if(!arguments.length)return u;_.sleep(),u=t,_.fps(s)},_.fps(t),setTimeout(function(){\"auto\"===u&&_.frame<5&&\"hidden\"!==(i||{}).visibilityState&&_.useRAF(!1)},1500)}),(a=u.Ticker.prototype=new u.events.EventDispatcher).constructor=u.Ticker;var R=T(\"core.Animation\",function(t,e){if(this.vars=e=e||{},this._duration=this._totalDuration=t||0,this._delay=Number(e.delay)||0,this._timeScale=1,this._active=!!e.immediateRender,this.data=e.data,this._reversed=!!e.reversed,J){l||o.wake();var i=this.vars.useFrames?H:J;i.add(this,i._time),this.vars.paused&&this.paused(!0)}});o=R.ticker=new u.Ticker,(a=R.prototype)._dirty=a._gc=a._initted=a._paused=!1,a._totalTime=a._time=0,a._rawPrevTime=-1,a._next=a._last=a._onUpdate=a._timeline=a.timeline=null,a._paused=!1;var D=function(){l&&C()-x>2e3&&(\"hidden\"!==(i||{}).visibilityState||!o.lagSmoothing())&&o.wake();var t=setTimeout(D,2e3);t.unref&&t.unref()};D(),a.play=function(t,e){return null!=t&&this.seek(t,e),this.reversed(!1).paused(!1)},a.pause=function(t,e){return null!=t&&this.seek(t,e),this.paused(!0)},a.resume=function(t,e){return null!=t&&this.seek(t,e),this.paused(!1)},a.seek=function(t,e){return this.totalTime(Number(t),!1!==e)},a.restart=function(t,e){return this.reversed(!1).paused(!1).totalTime(t?-this._delay:0,!1!==e,!0)},a.reverse=function(t,e){return null!=t&&this.seek(t||this.totalDuration(),e),this.reversed(!0).paused(!1)},a.render=function(t,e,i){},a.invalidate=function(){return this._time=this._totalTime=0,this._initted=this._gc=!1,this._rawPrevTime=-1,!this._gc&&this.timeline||this._enabled(!0),this},a.isActive=function(){var t,e=this._timeline,i=this._startTime;return!e||!this._gc&&!this._paused&&e.isActive()&&(t=e.rawTime(!0))>=i&&t<i+this.totalDuration()/this._timeScale-1e-8},a._enabled=function(t,e){return l||o.wake(),this._gc=!t,this._active=this.isActive(),!0!==e&&(t&&!this.timeline?this._timeline.add(this,this._startTime-this._delay):!t&&this.timeline&&this._timeline._remove(this,!0)),!1},a._kill=function(t,e){return this._enabled(!1,!1)},a.kill=function(t,e){return this._kill(t,e),this},a._uncache=function(t){for(var e=t?this:this.timeline;e;)e._dirty=!0,e=e.timeline;return this},a._swapSelfInParams=function(t){for(var e=t.length,i=t.concat();--e>-1;)\"{self}\"===t[e]&&(i[e]=this);return i},a._callback=function(t){var e=this.vars,i=e[t],s=e[t+\"Params\"],n=e[t+\"Scope\"]||e.callbackScope||this;switch(s?s.length:0){case 0:i.call(n);break;case 1:i.call(n,s[0]);break;case 2:i.call(n,s[0],s[1]);break;default:i.apply(n,s)}},a.eventCallback=function(t,e,i,s){if(\"on\"===(t||\"\").substr(0,2)){var n=this.vars;if(1===arguments.length)return n[t];null==e?delete n[t]:(n[t]=e,n[t+\"Params\"]=m(i)&&-1!==i.join(\"\").indexOf(\"{self}\")?this._swapSelfInParams(i):i,n[t+\"Scope\"]=s),\"onUpdate\"===t&&(this._onUpdate=e)}return this},a.delay=function(t){return arguments.length?(this._timeline.smoothChildTiming&&this.startTime(this._startTime+t-this._delay),this._delay=t,this):this._delay},a.duration=function(t){return arguments.length?(this._duration=this._totalDuration=t,this._uncache(!0),this._timeline.smoothChildTiming&&this._time>0&&this._time<this._duration&&0!==t&&this.totalTime(this._totalTime*(t/this._duration),!0),this):(this._dirty=!1,this._duration)},a.totalDuration=function(t){return this._dirty=!1,arguments.length?this.duration(t):this._totalDuration},a.time=function(t,e){return arguments.length?(this._dirty&&this.totalDuration(),this.totalTime(t>this._duration?this._duration:t,e)):this._time},a.totalTime=function(t,e,i){if(l||o.wake(),!arguments.length)return this._totalTime;if(this._timeline){if(t<0&&!i&&(t+=this.totalDuration()),this._timeline.smoothChildTiming){this._dirty&&this.totalDuration();var s=this._totalDuration,n=this._timeline;if(t>s&&!i&&(t=s),this._startTime=(this._paused?this._pauseTime:n._time)-(this._reversed?s-t:t)/this._timeScale,n._dirty||this._uncache(!1),n._timeline)for(;n._timeline;)n._timeline._time!==(n._startTime+n._totalTime)/n._timeScale&&n.totalTime(n._totalTime,!0),n=n._timeline}this._gc&&this._enabled(!0,!1),this._totalTime===t&&0!==this._duration||(I.length&&W(),this.render(t,e,!1),I.length&&W())}return this},a.progress=a.totalProgress=function(t,e){var i=this.duration();return arguments.length?this.totalTime(i*t,e):i?this._time/i:this.ratio},a.startTime=function(t){return arguments.length?(t!==this._startTime&&(this._startTime=t,this.timeline&&this.timeline._sortChildren&&this.timeline.add(this,t-this._delay)),this):this._startTime},a.endTime=function(t){return this._startTime+(0!=t?this.totalDuration():this.duration())/this._timeScale},a.timeScale=function(t){if(!arguments.length)return this._timeScale;var e,i;for(t=t||1e-8,this._timeline&&this._timeline.smoothChildTiming&&(i=(e=this._pauseTime)||0===e?e:this._timeline.totalTime(),this._startTime=i-(i-this._startTime)*this._timeScale/t),this._timeScale=t,i=this.timeline;i&&i.timeline;)i._dirty=!0,i.totalDuration(),i=i.timeline;return this},a.reversed=function(t){return arguments.length?(t!=this._reversed&&(this._reversed=t,this.totalTime(this._timeline&&!this._timeline.smoothChildTiming?this.totalDuration()-this._totalTime:this._totalTime,!0)),this):this._reversed},a.paused=function(t){if(!arguments.length)return this._paused;var e,i,s=this._timeline;return t!=this._paused&&s&&(l||t||o.wake(),i=(e=s.rawTime())-this._pauseTime,!t&&s.smoothChildTiming&&(this._startTime+=i,this._uncache(!1)),this._pauseTime=t?e:null,this._paused=t,this._active=this.isActive(),!t&&0!==i&&this._initted&&this.duration()&&this.render(e=s.smoothChildTiming?this._totalTime:(e-this._startTime)/this._timeScale,e===this._totalTime,!0)),this._gc&&!t&&this._enabled(!0,!1),this};var E=T(\"core.SimpleTimeline\",function(t){R.call(this,0,t),this.autoRemoveChildren=this.smoothChildTiming=!0});(a=E.prototype=new R).constructor=E,a.kill()._gc=!1,a._first=a._last=a._recent=null,a._sortChildren=!1,a.add=a.insert=function(t,e,i,s){var n,r;if(t._startTime=Number(e||0)+t._delay,t._paused&&this!==t._timeline&&(t._pauseTime=this.rawTime()-(t._timeline.rawTime()-t._pauseTime)),t.timeline&&t.timeline._remove(t,!0),t.timeline=t._timeline=this,t._gc&&t._enabled(!0,!0),n=this._last,this._sortChildren)for(r=t._startTime;n&&n._startTime>r;)n=n._prev;return n?(t._next=n._next,n._next=t):(t._next=this._first,this._first=t),t._next?t._next._prev=t:this._last=t,t._prev=n,this._recent=t,this._timeline&&this._uncache(!0),this},a._remove=function(t,e){return t.timeline===this&&(e||t._enabled(!1,!0),t._prev?t._prev._next=t._next:this._first===t&&(this._first=t._next),t._next?t._next._prev=t._prev:this._last===t&&(this._last=t._prev),t._next=t._prev=t.timeline=null,t===this._recent&&(this._recent=this._last),this._timeline&&this._uncache(!0)),this},a.render=function(t,e,i){var s,n=this._first;for(this._totalTime=this._time=this._rawPrevTime=t;n;)s=n._next,(n._active||t>=n._startTime&&!n._paused&&!n._gc)&&n.render(n._reversed?(n._dirty?n.totalDuration():n._totalDuration)-(t-n._startTime)*n._timeScale:(t-n._startTime)*n._timeScale,e,i),n=s},a.rawTime=function(){return l||o.wake(),this._totalTime};var L=T(\"TweenLite\",function(e,i,s){if(R.call(this,i,s),this.render=L.prototype.render,null==e)throw\"Cannot tween a null target.\";this.target=e=\"string\"!=typeof e?e:L.selector(e)||e;var n,r,a,o=e.jquery||e.length&&e!==t&&e[0]&&(e[0]===t||e[0].nodeType&&e[0].style&&!e.nodeType),l=this.vars.overwrite;if(this._overwrite=l=null==l?Y[L.defaultOverwrite]:\"number\"==typeof l?l>>0:Y[l],(o||e instanceof Array||e.push&&m(e))&&\"number\"!=typeof e[0])for(this._targets=a=f(e),this._propLookup=[],this._siblings=[],n=0;n<a.length;n++)(r=a[n])?\"string\"!=typeof r?r.length&&r!==t&&r[0]&&(r[0]===t||r[0].nodeType&&r[0].style&&!r.nodeType)?(a.splice(n--,1),this._targets=a=a.concat(f(r))):(this._siblings[n]=X(r,this,!1),1===l&&this._siblings[n].length>1&&tt(r,this,null,1,this._siblings[n])):\"string\"==typeof(r=a[n--]=L.selector(r))&&a.splice(n+1,1):a.splice(n--,1);else this._propLookup={},this._siblings=X(e,this,!1),1===l&&this._siblings.length>1&&tt(e,this,null,1,this._siblings);(this.vars.immediateRender||0===i&&0===this._delay&&!1!==this.vars.immediateRender)&&(this._time=-1e-8,this.render(Math.min(0,-this._delay)))},!0),O=function(e){return e&&e.length&&e!==t&&e[0]&&(e[0]===t||e[0].nodeType&&e[0].style&&!e.nodeType)};(a=L.prototype=new R).constructor=L,a.kill()._gc=!1,a.ratio=0,a._firstPT=a._targets=a._overwrittenProps=a._startAt=null,a._notifyPluginsOfEnabled=a._lazy=!1,L.version=\"2.1.2\",L.defaultEase=a._ease=new w(null,null,1,1),L.defaultOverwrite=\"auto\",L.ticker=o,L.autoSleep=120,L.lagSmoothing=function(t,e){o.lagSmoothing(t,e)},L.selector=t.$||t.jQuery||function(e){var s=t.$||t.jQuery;return s?(L.selector=s,s(e)):(i||(i=t.document),i?i.querySelectorAll?i.querySelectorAll(e):i.getElementById(\"#\"===e.charAt(0)?e.substr(1):e):e)};var I=[],z={},F=/(?:(-|-=|\\+=)?\\d*\\.?\\d*(?:e[\\-+]?\\d+)?)[0-9]/gi,$=/[\\+-]=-?[\\.\\d]/,U=function(t){for(var e,i=this._firstPT;i;)e=i.blob?1===t&&null!=this.end?this.end:t?this.join(\"\"):this.start:i.c*t+i.s,i.m?e=i.m.call(this._tween,e,this._target||i.t,this._tween):e<1e-6&&e>-1e-6&&!i.blob&&(e=0),i.f?i.fp?i.t[i.p](i.fp,e):i.t[i.p](e):i.t[i.p]=e,i=i._next},N=function(t){return(1e3*t|0)/1e3+\"\"},j=function(t,e,i,s){var n,r,a,o,l,h,_,c=[],u=0,f=\"\",p=0;for(c.start=t,c.end=e,t=c[0]=t+\"\",e=c[1]=e+\"\",i&&(i(c),t=c[0],e=c[1]),c.length=0,n=t.match(F)||[],r=e.match(F)||[],s&&(s._next=null,s.blob=1,c._firstPT=c._applyPT=s),l=r.length,o=0;o<l;o++)f+=(h=e.substr(u,e.indexOf(_=r[o],u)-u))||!o?h:\",\",u+=h.length,p?p=(p+1)%5:\"rgba(\"===h.substr(-5)&&(p=1),_===n[o]||n.length<=o?f+=_:(f&&(c.push(f),f=\"\"),a=parseFloat(n[o]),c.push(a),c._firstPT={_next:c._firstPT,t:c,p:c.length-1,s:a,c:(\"=\"===_.charAt(1)?parseInt(_.charAt(0)+\"1\",10)*parseFloat(_.substr(2)):parseFloat(_)-a)||0,f:0,m:p&&p<4?Math.round:N}),u+=_.length;return(f+=e.substr(u))&&c.push(f),c.setRatio=U,$.test(e)&&(c.end=null),c},G=function(t,e,i,s,n,r,a,o,l){\"function\"==typeof s&&(s=s(l||0,t));var h=typeof t[e],_=\"function\"!==h?\"\":e.indexOf(\"set\")||\"function\"!=typeof t[\"get\"+e.substr(3)]?e:\"get\"+e.substr(3),c=\"get\"!==i?i:_?a?t[_](a):t[_]():t[e],u=\"string\"==typeof s&&\"=\"===s.charAt(1),f={t:t,p:e,s:c,f:\"function\"===h,pg:0,n:n||e,m:r?\"function\"==typeof r?r:Math.round:0,pr:0,c:u?parseInt(s.charAt(0)+\"1\",10)*parseFloat(s.substr(2)):parseFloat(s)-c||0};if((\"number\"!=typeof c||\"number\"!=typeof s&&!u)&&(a||isNaN(c)||!u&&isNaN(s)||\"boolean\"==typeof c||\"boolean\"==typeof s?(f.fp=a,f={t:j(c,u?parseFloat(f.s)+f.c+(f.s+\"\").replace(/[0-9\\-\\.]/g,\"\"):s,o||L.defaultStringFilter,f),p:\"setRatio\",s:0,c:1,f:2,pg:0,n:n||e,pr:0,m:0}):(f.s=parseFloat(c),u||(f.c=parseFloat(s)-f.s||0))),f.c)return(f._next=this._firstPT)&&(f._next._prev=f),this._firstPT=f,f},q=L._internals={isArray:m,isSelector:O,lazyTweens:I,blobDif:j},M=L._plugins={},Q=q.tweenLookup={},B=0,K=q.reservedProps={ease:1,delay:1,overwrite:1,onComplete:1,onCompleteParams:1,onCompleteScope:1,useFrames:1,runBackwards:1,startAt:1,onUpdate:1,onUpdateParams:1,onUpdateScope:1,onStart:1,onStartParams:1,onStartScope:1,onReverseComplete:1,onReverseCompleteParams:1,onReverseCompleteScope:1,onRepeat:1,onRepeatParams:1,onRepeatScope:1,easeParams:1,yoyo:1,immediateRender:1,repeat:1,repeatDelay:1,data:1,paused:1,reversed:1,autoCSS:1,lazy:1,onOverwrite:1,callbackScope:1,stringFilter:1,id:1,yoyoEase:1,stagger:1},Y={none:0,all:1,auto:2,concurrent:3,allOnStart:4,preexisting:5,true:1,false:0},H=R._rootFramesTimeline=new E,J=R._rootTimeline=new E,V=30,W=q.lazyRender=function(){var t,e,i=I.length;for(z={},t=0;t<i;t++)(e=I[t])&&!1!==e._lazy&&(e.render(e._lazy[0],e._lazy[1],!0),e._lazy=!1);I.length=0};J._startTime=o.time,H._startTime=o.frame,J._active=H._active=!0,setTimeout(W,1),R._updateRoot=L.render=function(){var t,e,i;if(I.length&&W(),J.render((o.time-J._startTime)*J._timeScale,!1,!1),H.render((o.frame-H._startTime)*H._timeScale,!1,!1),I.length&&W(),o.frame>=V){for(i in V=o.frame+(parseInt(L.autoSleep,10)||120),Q){for(t=(e=Q[i].tweens).length;--t>-1;)e[t]._gc&&e.splice(t,1);0===e.length&&delete Q[i]}if((!(i=J._first)||i._paused)&&L.autoSleep&&!H._first&&1===o._listeners.tick.length){for(;i&&i._paused;)i=i._next;i||o.sleep()}}},o.addEventListener(\"tick\",R._updateRoot);var X=function(t,e,i){var s,n,r=t._gsTweenID;if(Q[r||(t._gsTweenID=r=\"t\"+B++)]||(Q[r]={target:t,tweens:[]}),e&&((s=Q[r].tweens)[n=s.length]=e,i))for(;--n>-1;)s[n]===e&&s.splice(n,1);return Q[r].tweens},Z=function(t,e,i,s){var n,r,a=t.vars.onOverwrite;return a&&(n=a(t,e,i,s)),(a=L.onOverwrite)&&(r=a(t,e,i,s)),!1!==n&&!1!==r},tt=function(t,e,i,s,n){var r,a,o,l;if(1===s||s>=4){for(l=n.length,r=0;r<l;r++)if((o=n[r])!==e)o._gc||o._kill(null,t,e)&&(a=!0);else if(5===s)break;return a}var h,_=e._startTime+1e-8,c=[],u=0,f=0===e._duration;for(r=n.length;--r>-1;)(o=n[r])===e||o._gc||o._paused||(o._timeline!==e._timeline?(h=h||et(e,0,f),0===et(o,h,f)&&(c[u++]=o)):o._startTime<=_&&o._startTime+o.totalDuration()/o._timeScale>_&&((f||!o._initted)&&_-o._startTime<=2e-8||(c[u++]=o)));for(r=u;--r>-1;)if(l=(o=c[r])._firstPT,2===s&&o._kill(i,t,e)&&(a=!0),2!==s||!o._firstPT&&o._initted&&l){if(2!==s&&!Z(o,e))continue;o._enabled(!1,!1)&&(a=!0)}return a},et=function(t,e,i){for(var s=t._timeline,n=s._timeScale,r=t._startTime;s._timeline;){if(r+=s._startTime,n*=s._timeScale,s._paused)return-100;s=s._timeline}return(r/=n)>e?r-e:i&&r===e||!t._initted&&r-e<2e-8?1e-8:(r+=t.totalDuration()/t._timeScale/n)>e+1e-8?0:r-e-1e-8};a._init=function(){var t,e,i,s,n,r,a=this.vars,o=this._overwrittenProps,l=this._duration,h=!!a.immediateRender,_=a.ease,c=this._startAt;if(a.startAt){for(s in c&&(c.render(-1,!0),c.kill()),n={},a.startAt)n[s]=a.startAt[s];if(n.data=\"isStart\",n.overwrite=!1,n.immediateRender=!0,n.lazy=h&&!1!==a.lazy,n.startAt=n.delay=null,n.onUpdate=a.onUpdate,n.onUpdateParams=a.onUpdateParams,n.onUpdateScope=a.onUpdateScope||a.callbackScope||this,this._startAt=L.to(this.target||{},0,n),h)if(this._time>0)this._startAt=null;else if(0!==l)return}else if(a.runBackwards&&0!==l)if(c)c.render(-1,!0),c.kill(),this._startAt=null;else{for(s in 0!==this._time&&(h=!1),i={},a)K[s]&&\"autoCSS\"!==s||(i[s]=a[s]);if(i.overwrite=0,i.data=\"isFromStart\",i.lazy=h&&!1!==a.lazy,i.immediateRender=h,this._startAt=L.to(this.target,0,i),h){if(0===this._time)return}else this._startAt._init(),this._startAt._enabled(!1),this.vars.immediateRender&&(this._startAt=null)}if(this._ease=_=_?_ instanceof w?_:\"function\"==typeof _?new w(_,a.easeParams):P[_]||L.defaultEase:L.defaultEase,a.easeParams instanceof Array&&_.config&&(this._ease=_.config.apply(_,a.easeParams)),this._easeType=this._ease._type,this._easePower=this._ease._power,this._firstPT=null,this._targets)for(r=this._targets.length,t=0;t<r;t++)this._initProps(this._targets[t],this._propLookup[t]={},this._siblings[t],o?o[t]:null,t)&&(e=!0);else e=this._initProps(this.target,this._propLookup,this._siblings,o,0);if(e&&L._onPluginEvent(\"_onInitAllProps\",this),o&&(this._firstPT||\"function\"!=typeof this.target&&this._enabled(!1,!1)),a.runBackwards)for(i=this._firstPT;i;)i.s+=i.c,i.c=-i.c,i=i._next;this._onUpdate=a.onUpdate,this._initted=!0},a._initProps=function(e,i,s,n,r){var a,o,l,h,_,c;if(null==e)return!1;for(a in z[e._gsTweenID]&&W(),this.vars.css||e.style&&e!==t&&e.nodeType&&M.css&&!1!==this.vars.autoCSS&&function(t,e){var i,s={};for(i in t)K[i]||i in e&&\"transform\"!==i&&\"x\"!==i&&\"y\"!==i&&\"width\"!==i&&\"height\"!==i&&\"className\"!==i&&\"border\"!==i||!(!M[i]||M[i]&&M[i]._autoCSS)||(s[i]=t[i],delete t[i]);t.css=s}(this.vars,e),this.vars)if(c=this.vars[a],K[a])c&&(c instanceof Array||c.push&&m(c))&&-1!==c.join(\"\").indexOf(\"{self}\")&&(this.vars[a]=c=this._swapSelfInParams(c,this));else if(M[a]&&(h=new M[a])._onInitTween(e,this.vars[a],this,r)){for(this._firstPT=_={_next:this._firstPT,t:h,p:\"setRatio\",s:0,c:1,f:1,n:a,pg:1,pr:h._priority,m:0},o=h._overwriteProps.length;--o>-1;)i[h._overwriteProps[o]]=this._firstPT;(h._priority||h._onInitAllProps)&&(l=!0),(h._onDisable||h._onEnable)&&(this._notifyPluginsOfEnabled=!0),_._next&&(_._next._prev=_)}else i[a]=G.call(this,e,a,\"get\",c,a,0,null,this.vars.stringFilter,r);return n&&this._kill(n,e)?this._initProps(e,i,s,n,r):this._overwrite>1&&this._firstPT&&s.length>1&&tt(e,this,i,this._overwrite,s)?(this._kill(i,e),this._initProps(e,i,s,n,r)):(this._firstPT&&(!1!==this.vars.lazy&&this._duration||this.vars.lazy&&!this._duration)&&(z[e._gsTweenID]=!0),l)},a.render=function(t,e,i){var s,n,r,a,o=this._time,l=this._duration,h=this._rawPrevTime;if(t>=l-1e-8&&t>=0)this._totalTime=this._time=l,this.ratio=this._ease._calcEnd?this._ease.getRatio(1):1,this._reversed||(s=!0,n=\"onComplete\",i=i||this._timeline.autoRemoveChildren),0===l&&(this._initted||!this.vars.lazy||i)&&(this._startTime===this._timeline._duration&&(t=0),(h<0||t<=0&&t>=-1e-8||1e-8===h&&\"isPause\"!==this.data)&&h!==t&&(i=!0,h>1e-8&&(n=\"onReverseComplete\")),this._rawPrevTime=a=!e||t||h===t?t:1e-8);else if(t<1e-8)this._totalTime=this._time=0,this.ratio=this._ease._calcEnd?this._ease.getRatio(0):0,(0!==o||0===l&&h>0)&&(n=\"onReverseComplete\",s=this._reversed),t>-1e-8?t=0:t<0&&(this._active=!1,0===l&&(this._initted||!this.vars.lazy||i)&&(h>=0&&(1e-8!==h||\"isPause\"!==this.data)&&(i=!0),this._rawPrevTime=a=!e||t||h===t?t:1e-8)),(!this._initted||this._startAt&&this._startAt.progress())&&(i=!0);else if(this._totalTime=this._time=t,this._easeType){var _=t/l,c=this._easeType,u=this._easePower;(1===c||3===c&&_>=.5)&&(_=1-_),3===c&&(_*=2),1===u?_*=_:2===u?_*=_*_:3===u?_*=_*_*_:4===u&&(_*=_*_*_*_),this.ratio=1===c?1-_:2===c?_:t/l<.5?_/2:1-_/2}else this.ratio=this._ease.getRatio(t/l);if(this._time!==o||i){if(!this._initted){if(this._init(),!this._initted||this._gc)return;if(!i&&this._firstPT&&(!1!==this.vars.lazy&&this._duration||this.vars.lazy&&!this._duration))return this._time=this._totalTime=o,this._rawPrevTime=h,I.push(this),void(this._lazy=[t,e]);this._time&&!s?this.ratio=this._ease.getRatio(this._time/l):s&&this._ease._calcEnd&&(this.ratio=this._ease.getRatio(0===this._time?0:1))}for(!1!==this._lazy&&(this._lazy=!1),this._active||!this._paused&&this._time!==o&&t>=0&&(this._active=!0),0===o&&(this._startAt&&(t>=0?this._startAt.render(t,!0,i):n||(n=\"_dummyGS\")),this.vars.onStart&&(0===this._time&&0!==l||e||this._callback(\"onStart\"))),r=this._firstPT;r;)r.f?r.t[r.p](r.c*this.ratio+r.s):r.t[r.p]=r.c*this.ratio+r.s,r=r._next;this._onUpdate&&(t<0&&this._startAt&&-1e-4!==t&&this._startAt.render(t,!0,i),e||(this._time!==o||s||i)&&this._callback(\"onUpdate\")),n&&(this._gc&&!i||(t<0&&this._startAt&&!this._onUpdate&&-1e-4!==t&&this._startAt.render(t,!0,i),s&&(this._timeline.autoRemoveChildren&&this._enabled(!1,!1),this._active=!1),!e&&this.vars[n]&&this._callback(n),0===l&&1e-8===this._rawPrevTime&&1e-8!==a&&(this._rawPrevTime=0)))}},a._kill=function(t,e,i){if(\"all\"===t&&(t=null),null==t&&(null==e||e===this.target))return this._lazy=!1,this._enabled(!1,!1);e=\"string\"!=typeof e?e||this._targets||this.target:L.selector(e)||e;var s,n,r,a,o,l,h,_,c,u=i&&this._time&&i._startTime===this._startTime&&this._timeline===i._timeline,f=this._firstPT;if((m(e)||O(e))&&\"number\"!=typeof e[0])for(s=e.length;--s>-1;)this._kill(t,e[s],i)&&(l=!0);else{if(this._targets){for(s=this._targets.length;--s>-1;)if(e===this._targets[s]){o=this._propLookup[s]||{},this._overwrittenProps=this._overwrittenProps||[],n=this._overwrittenProps[s]=t?this._overwrittenProps[s]||{}:\"all\";break}}else{if(e!==this.target)return!1;o=this._propLookup,n=this._overwrittenProps=t?this._overwrittenProps||{}:\"all\"}if(o){if(h=t||o,_=t!==n&&\"all\"!==n&&t!==o&&(\"object\"!=typeof t||!t._tempKill),i&&(L.onOverwrite||this.vars.onOverwrite)){for(r in h)o[r]&&(c||(c=[]),c.push(r));if((c||!t)&&!Z(this,i,e,c))return!1}for(r in h)(a=o[r])&&(u&&(a.f?a.t[a.p](a.s):a.t[a.p]=a.s,l=!0),a.pg&&a.t._kill(h)&&(l=!0),a.pg&&0!==a.t._overwriteProps.length||(a._prev?a._prev._next=a._next:a===this._firstPT&&(this._firstPT=a._next),a._next&&(a._next._prev=a._prev),a._next=a._prev=null),delete o[r]),_&&(n[r]=1);!this._firstPT&&this._initted&&f&&this._enabled(!1,!1)}}return l},a.invalidate=function(){this._notifyPluginsOfEnabled&&L._onPluginEvent(\"_onDisable\",this);var t=this._time;return this._firstPT=this._overwrittenProps=this._startAt=this._onUpdate=null,this._notifyPluginsOfEnabled=this._active=this._lazy=!1,this._propLookup=this._targets?{}:[],R.prototype.invalidate.call(this),this.vars.immediateRender&&(this._time=-1e-8,this.render(t,!1,!1!==this.vars.lazy)),this},a._enabled=function(t,e){if(l||o.wake(),t&&this._gc){var i,s=this._targets;if(s)for(i=s.length;--i>-1;)this._siblings[i]=X(s[i],this,!0);else this._siblings=X(this.target,this,!0)}return R.prototype._enabled.call(this,t,e),!(!this._notifyPluginsOfEnabled||!this._firstPT)&&L._onPluginEvent(t?\"_onEnable\":\"_onDisable\",this)},L.to=function(t,e,i){return new L(t,e,i)},L.from=function(t,e,i){return i.runBackwards=!0,i.immediateRender=0!=i.immediateRender,new L(t,e,i)},L.fromTo=function(t,e,i,s){return s.startAt=i,s.immediateRender=0!=s.immediateRender&&0!=i.immediateRender,new L(t,e,s)},L.delayedCall=function(t,e,i,s,n){return new L(e,0,{delay:t,onComplete:e,onCompleteParams:i,callbackScope:s,onReverseComplete:e,onReverseCompleteParams:i,immediateRender:!1,lazy:!1,useFrames:n,overwrite:0})},L.set=function(t,e){return new L(t,0,e)},L.getTweensOf=function(t,e){if(null==t)return[];var i,s,n,r;if(t=\"string\"!=typeof t?t:L.selector(t)||t,(m(t)||O(t))&&\"number\"!=typeof t[0]){for(i=t.length,s=[];--i>-1;)s=s.concat(L.getTweensOf(t[i],e));for(i=s.length;--i>-1;)for(r=s[i],n=i;--n>-1;)r===s[n]&&s.splice(i,1)}else if(t._gsTweenID)for(i=(s=X(t).concat()).length;--i>-1;)(s[i]._gc||e&&!s[i].isActive())&&s.splice(i,1);return s||[]},L.killTweensOf=L.killDelayedCallsTo=function(t,e,i){\"object\"==typeof e&&(i=e,e=!1);for(var s=L.getTweensOf(t,e),n=s.length;--n>-1;)s[n]._kill(i,t)};var it=T(\"plugins.TweenPlugin\",function(t,e){this._overwriteProps=(t||\"\").split(\",\"),this._propName=this._overwriteProps[0],this._priority=e||0,this._super=it.prototype},!0);if(a=it.prototype,it.version=\"1.19.0\",it.API=2,a._firstPT=null,a._addTween=G,a.setRatio=U,a._kill=function(t){var e,i=this._overwriteProps,s=this._firstPT;if(null!=t[this._propName])this._overwriteProps=[];else for(e=i.length;--e>-1;)null!=t[i[e]]&&i.splice(e,1);for(;s;)null!=t[s.n]&&(s._next&&(s._next._prev=s._prev),s._prev?(s._prev._next=s._next,s._prev=null):this._firstPT===s&&(this._firstPT=s._next)),s=s._next;return!1},a._mod=a._roundProps=function(t){for(var e,i=this._firstPT;i;)(e=t[this._propName]||null!=i.n&&t[i.n.split(this._propName+\"_\").join(\"\")])&&\"function\"==typeof e&&(2===i.f?i.t._applyPT.m=e:i.m=e),i=i._next},L._onPluginEvent=function(t,e){var i,s,n,r,a,o=e._firstPT;if(\"_onInitAllProps\"===t){for(;o;){for(a=o._next,s=n;s&&s.pr>o.pr;)s=s._next;(o._prev=s?s._prev:r)?o._prev._next=o:n=o,(o._next=s)?s._prev=o:r=o,o=a}o=e._firstPT=n}for(;o;)o.pg&&\"function\"==typeof o.t[t]&&o.t[t]()&&(i=!0),o=o._next;return i},it.activate=function(t){for(var e=t.length;--e>-1;)t[e].API===it.API&&(M[(new t[e])._propName]=t[e]);return!0},g.plugin=function(t){if(!(t&&t.propName&&t.init&&t.API))throw\"illegal plugin definition.\";var e,i=t.propName,s=t.priority||0,n=t.overwriteProps,r={init:\"_onInitTween\",set:\"setRatio\",kill:\"_kill\",round:\"_mod\",mod:\"_mod\",initAll:\"_onInitAllProps\"},a=T(\"plugins.\"+i.charAt(0).toUpperCase()+i.substr(1)+\"Plugin\",function(){it.call(this,i,s),this._overwriteProps=n||[]},!0===t.global),o=a.prototype=new it(i);for(e in o.constructor=a,a.API=t.API,r)\"function\"==typeof t[e]&&(o[r[e]]=t[e]);return a.version=t.version,it.activate([a]),a},n=t._gsQueue){for(r=0;r<n.length;r++)n[r]();for(a in d)d[a].func||t.console.log(\"GSAP encountered missing dependency: \"+a)}return l=!1,L}(_gsScope),globals=_gsScope.GreenSockGlobals,nonGlobals=globals.com.greensock,SimpleTimeline=nonGlobals.core.SimpleTimeline,Animation=nonGlobals.core.Animation,Ease=globals.Ease,Linear=globals.Linear,Power1=globals.Power1,Power2=globals.Power2,Power3=globals.Power3,Power4=globals.Power4,TweenPlugin=globals.TweenPlugin,EventDispatcher=nonGlobals.events.EventDispatcher,IonicAppflowActivator=function(){function t(){this.$circles=[],this.$lis=[],this.screenshots=[],this.active=null,this.duration=6,this.quickDuration=.25,this.r=31,this.gsRefs=[],this.scrollPause=null,this.circumference=2*this.r*Math.PI,this.animationSelect=this.animationSelect.bind(this),this.animationStart=this.animationStart.bind(this)}return t.prototype.componentDidLoad=function(){var t=this;setTimeout(this.animationStart,2e3,0);var e=function(i,s){t.$lis[s]=i,t.$circles[s]=i.querySelector(\".progress-ring__circle\"),t.screenshots[s]=i.querySelector(\"a\").dataset.screenshot,i.nextElementSibling&&\"LI\"===i.nextElementSibling.nodeName&&e(i.nextElementSibling,s+1)};e(this.el.querySelector(\"li:nth-child(1)\"),0),this.active=0},t.prototype.animationStart=function(t){var e=this;if(console.log(\"starting\"),window.pageYOffset>1e3)return console.log(\"pausing\"),void(this.scrollPause=setTimeout(this.animationStart,5e3,0));this.active=t,this.$lis[t].classList.add(\"active\"),TweenLite.to(this.$circles[t],.4,{opacity:1}),TweenLite.to(this.$circles[t],this.duration,{strokeDashoffset:0,onCompleteScope:this,onComplete:function(){e.animationStart(t>=e.$circles.length-1?0:t+1),e.$lis[t].classList.remove(\"active\"),TweenLite.to(e.$circles[t],.2,{opacity:0,onCompleteScope:e,onComplete:function(){TweenLite.to(e.$circles[t],0,{strokeDashoffset:e.circumference,lazy:!0})}})}})},t.prototype.animationSelect=function(t){var e=this;this.$lis[t].classList.add(\"active\"),this.active=t,this.scrollPause&&clearTimeout(this.scrollPause),this.animationStopOthers(t),TweenLite.to(this.$circles[t],this.quickDuration,{strokeDashoffset:0,opacity:1,onCompleteScope:this,onComplete:function(){e.animationStopOthers(t)}})},t.prototype.animationRestart=function(t){var e=this;this.animationStopOthers(t),TweenLite.to(this.$circles[t],.5,{strokeDashoffset:-1*this.circumference,lazy:!0,onCompleteScope:this,onComplete:function(){TweenLite.to(e.$circles[t],0,{strokeDashoffset:e.circumference,opacity:0,lazy:!0,onCompleteScope:e,onComplete:function(){e.animationStart(t)}})}})},t.prototype.animationStopOthers=function(t){var e=this,i=[];this.$circles.forEach(function(s,n){n!=t&&(i.push(s),e.$lis[n].classList.remove(\"active\"))}),TweenLite.to(i,.2,{opacity:0,lazy:!0,onCompleteScope:this,onComplete:function(){TweenLite.to(i,0,{strokeDashoffset:e.circumference,opacity:0,lazy:!0})}})},t.prototype.circle=function(t){return void 0===t&&(t=0),h(\"svg\",{class:\"progress-ring\",height:\"64\",width:\"64\"},h(\"circle\",{class:\"progress-ring__circle\",stroke:\"#6C89F7\",\"stroke-width\":\"2\",fill:\"transparent\",r:this.r,cx:\"32\",cy:\"32\",style:{strokeDasharray:this.circumference+\" \"+this.circumference,strokeDashoffset:this.circumference-t/100*this.circumference}}))},t.prototype.render=function(){var t=this;return[h(\"div\",{class:\"app-screenshot\"},this.screenshots.map(function(e,i){return h(\"img\",{class:i===t.active?\"active\":\"inactive\",src:e})})),h(\"nav\",null,h(\"ul\",null,h(\"li\",{onMouseEnter:function(){return t.animationSelect(0)},onMouseLeave:function(){return t.animationRestart(0)}},this.circle(),h(\"slot\",{name:\"1\"})),h(\"li\",{onMouseEnter:function(){return t.animationSelect(1)},onMouseLeave:function(){return t.animationRestart(1)}},this.circle(),h(\"slot\",{name:\"2\"})),h(\"li\",{onMouseEnter:function(){return t.animationSelect(2)},onMouseLeave:function(){return t.animationRestart(2)}},this.circle(),h(\"slot\",{name:\"3\"}))))]},Object.defineProperty(t,\"is\",{get:function(){return\"ionic-appflow-activator\"},enumerable:!0,configurable:!0}),Object.defineProperty(t,\"properties\",{get:function(){return{$circles:{state:!0},$lis:{state:!0},active:{state:!0},el:{elementRef:!0},screenshots:{state:!0}}},enumerable:!0,configurable:!0}),Object.defineProperty(t,\"style\",{get:function(){return\"ionic-appflow-activator nav{background:#fff;position:-webkit-sticky;position:sticky;top:100px;width:100%;margin-top:100px}ionic-appflow-activator ul{display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between;max-width:100%;width:600px;padding-left:10px;padding-right:10px;margin-top:-44px;margin-right:auto;margin-left:auto}ionic-appflow-activator li{width:120px;position:relative;list-style:none}ionic-appflow-activator .progress-ring{position:absolute;top:0;left:calc(50% - 32px);pointer-events:none}ionic-appflow-activator .progress-ring__circle{opacity:0;-webkit-transform:rotate(-90deg);transform:rotate(-90deg);-webkit-transform-origin:50% 50%;transform-origin:50% 50%}ionic-appflow-activator a{text-align:center;display:block;padding-top:64px;cursor:pointer}ionic-appflow-activator a .icon,ionic-appflow-activator a .icon-active{position:absolute;border-radius:50%;height:56px;width:56px;top:4px;left:calc(50% - 28px);-webkit-transition:opacity .2s ease,transform .2s ease;transition:opacity .2s ease,transform .2s ease}ionic-appflow-activator a .icon-active{opacity:0;-webkit-transform:scale(1.1);transform:scale(1.1);-webkit-transition:opacity .2s ease,transform .2s ease;transition:opacity .2s ease,transform .2s ease}ionic-appflow-activator a span{font-size:14px;line-height:22px;text-align:center;letter-spacing:.06em;text-transform:uppercase;font-weight:600;color:#92a1b3;-webkit-transition:color .2s ease;transition:color .2s ease}ionic-appflow-activator .active .icon{-webkit-transform:scale(1.1);transform:scale(1.1);opacity:0}ionic-appflow-activator .active .icon-active{opacity:1;-webkit-transform:scale(1);transform:scale(1)}ionic-appflow-activator .active span{color:#6c89f7}ionic-appflow-activator .app-screenshot{position:relative}ionic-appflow-activator .app-screenshot img{position:absolute;top:0;right:0;bottom:0;left:0;opacity:0;-webkit-transform:scale(1.01);transform:scale(1.01);-webkit-transition:opacity .2s ease,transform .2s ease;transition:opacity .2s ease,transform .2s ease}ionic-appflow-activator .app-screenshot img.active{opacity:1;-webkit-transform:none;transform:none}\\@-webkit-keyframes full-circle{to{stroke-dashoffset:0}}\\@keyframes full-circle{to{stroke-dashoffset:0}}\"},enumerable:!0,configurable:!0}),t}();export{IonicAppflowActivator};"
  },
  {
    "path": "content/js/stencil/esm/es5/build/hclgi8iu.sc.entry.js",
    "content": "import{h}from\"../ionic-site-components.core.js\";var _gsScope=\"undefined\"!=typeof window?window:\"undefined\"!=typeof module&&module.exports&&\"undefined\"!=typeof global?global:{},TweenLite=function(t){var e={},i=t.document,s=t.GreenSockGlobals=t.GreenSockGlobals||t;if(s.TweenLite)return s.TweenLite;var n,r,a,o,l,h,_,c=function(t){var e,i=t.split(\".\"),n=s;for(e=0;e<i.length;e++)n[i[e]]=n=n[i[e]]||{};return n},u=c(\"com.greensock\"),f=function(t){var e,i=[],s=t.length;for(e=0;e!==s;i.push(t[e++]));return i},p=function(){},m=(h=Object.prototype.toString,_=h.call([]),function(t){return null!=t&&(t instanceof Array||\"object\"==typeof t&&!!t.push&&h.call(t)===_)}),d={},v=function(t,i,n,r){this.sc=d[t]?d[t].sc:[],d[t]=this,this.gsClass=null,this.func=n;var a=[];this.check=function(o){for(var l,h,_,u,f=i.length,p=f;--f>-1;)(l=d[i[f]]||new v(i[f],[])).gsClass?(a[f]=l.gsClass,p--):o&&l.sc.push(this);if(0===p&&n)for(_=(h=(\"com.greensock.\"+t).split(\".\")).pop(),u=c(h.join(\".\"))[_]=this.gsClass=n.apply(n,a),r&&(s[_]=e[_]=u),f=0;f<this.sc.length;f++)this.sc[f].check()},this.check(!0)},g=t._gsDefine=function(t,e,i,s){return new v(t,e,i,s)},T=u._class=function(t,e,i){return e=e||function(){},g(t,[],function(){return e},i),e};g.globals=s;var y=[0,0,1,1],w=T(\"easing.Ease\",function(t,e,i,s){this._func=t,this._type=i||0,this._power=s||0,this._params=e?y.concat(e):y},!0),P=w.map={},b=w.register=function(t,e,i,s){for(var n,r,a,o,l=e.split(\",\"),h=l.length,_=(i||\"easeIn,easeOut,easeInOut\").split(\",\");--h>-1;)for(r=l[h],n=s?T(\"easing.\"+r,null,!0):u.easing[r]||{},a=_.length;--a>-1;)P[r+\".\"+(o=_[a])]=P[o+r]=n[o]=t.getRatio?t:t[o]||new t};for((a=w.prototype)._calcEnd=!1,a.getRatio=function(t){if(this._func)return this._params[0]=t,this._func.apply(null,this._params);var e=this._type,i=this._power,s=1===e?1-t:2===e?t:t<.5?2*t:2*(1-t);return 1===i?s*=s:2===i?s*=s*s:3===i?s*=s*s*s:4===i&&(s*=s*s*s*s),1===e?1-s:2===e?s:t<.5?s/2:1-s/2},r=(n=[\"Linear\",\"Quad\",\"Cubic\",\"Quart\",\"Quint,Strong\"]).length;--r>-1;)a=n[r]+\",Power\"+r,b(new w(null,null,1,r),a,\"easeOut\",!0),b(new w(null,null,2,r),a,\"easeIn\"+(0===r?\",easeNone\":\"\")),b(new w(null,null,3,r),a,\"easeInOut\");P.linear=u.easing.Linear.easeIn,P.swing=u.easing.Quad.easeInOut;var S=T(\"events.EventDispatcher\",function(t){this._listeners={},this._eventTarget=t||this});(a=S.prototype).addEventListener=function(t,e,i,s,n){n=n||0;var r,a,h=this._listeners[t],_=0;for(this!==o||l||o.wake(),null==h&&(this._listeners[t]=h=[]),a=h.length;--a>-1;)(r=h[a]).c===e&&r.s===i?h.splice(a,1):0===_&&r.pr<n&&(_=a+1);h.splice(_,0,{c:e,s:i,up:s,pr:n})},a.removeEventListener=function(t,e){var i,s=this._listeners[t];if(s)for(i=s.length;--i>-1;)if(s[i].c===e)return void s.splice(i,1)},a.dispatchEvent=function(t){var e,i,s,n=this._listeners[t];if(n)for((e=n.length)>1&&(n=n.slice(0)),i=this._eventTarget;--e>-1;)(s=n[e])&&(s.up?s.c.call(s.s||i,{type:t,target:i}):s.c.call(s.s||i))};var k=t.requestAnimationFrame,A=t.cancelAnimationFrame,C=Date.now||function(){return(new Date).getTime()},x=C();for(r=(n=[\"ms\",\"moz\",\"webkit\",\"o\"]).length;--r>-1&&!k;)k=t[n[r]+\"RequestAnimationFrame\"],A=t[n[r]+\"CancelAnimationFrame\"]||t[n[r]+\"CancelRequestAnimationFrame\"];T(\"Ticker\",function(t,e){var s,n,r,a,h,_=this,c=C(),u=!(!1===e||!k)&&\"auto\",f=500,m=33,d=function(t){var e,i,o=C()-x;o>f&&(c+=o-m),_.time=((x+=o)-c)/1e3,e=_.time-h,(!s||e>0||!0===t)&&(_.frame++,h+=e+(e>=a?.004:a-e),i=!0),!0!==t&&(r=n(d)),i&&_.dispatchEvent(\"tick\")};S.call(_),_.time=_.frame=0,_.tick=function(){d(!0)},_.lagSmoothing=function(t,e){if(!arguments.length)return f<1e8;f=t||1e8,m=Math.min(e,f,0)},_.sleep=function(){null!=r&&(u&&A?A(r):clearTimeout(r),n=p,r=null,_===o&&(l=!1))},_.wake=function(t){null!==r?_.sleep():t?c+=-x+(x=C()):_.frame>10&&(x=C()-f+5),n=0===s?p:u&&k?k:function(t){return setTimeout(t,1e3*(h-_.time)+1|0)},_===o&&(l=!0),d(2)},_.fps=function(t){if(!arguments.length)return s;h=this.time+(a=1/((s=t)||60)),_.wake()},_.useRAF=function(t){if(!arguments.length)return u;_.sleep(),u=t,_.fps(s)},_.fps(t),setTimeout(function(){\"auto\"===u&&_.frame<5&&\"hidden\"!==(i||{}).visibilityState&&_.useRAF(!1)},1500)}),(a=u.Ticker.prototype=new u.events.EventDispatcher).constructor=u.Ticker;var R=T(\"core.Animation\",function(t,e){if(this.vars=e=e||{},this._duration=this._totalDuration=t||0,this._delay=Number(e.delay)||0,this._timeScale=1,this._active=!!e.immediateRender,this.data=e.data,this._reversed=!!e.reversed,J){l||o.wake();var i=this.vars.useFrames?H:J;i.add(this,i._time),this.vars.paused&&this.paused(!0)}});o=R.ticker=new u.Ticker,(a=R.prototype)._dirty=a._gc=a._initted=a._paused=!1,a._totalTime=a._time=0,a._rawPrevTime=-1,a._next=a._last=a._onUpdate=a._timeline=a.timeline=null,a._paused=!1;var D=function(){l&&C()-x>2e3&&(\"hidden\"!==(i||{}).visibilityState||!o.lagSmoothing())&&o.wake();var t=setTimeout(D,2e3);t.unref&&t.unref()};D(),a.play=function(t,e){return null!=t&&this.seek(t,e),this.reversed(!1).paused(!1)},a.pause=function(t,e){return null!=t&&this.seek(t,e),this.paused(!0)},a.resume=function(t,e){return null!=t&&this.seek(t,e),this.paused(!1)},a.seek=function(t,e){return this.totalTime(Number(t),!1!==e)},a.restart=function(t,e){return this.reversed(!1).paused(!1).totalTime(t?-this._delay:0,!1!==e,!0)},a.reverse=function(t,e){return null!=t&&this.seek(t||this.totalDuration(),e),this.reversed(!0).paused(!1)},a.render=function(t,e,i){},a.invalidate=function(){return this._time=this._totalTime=0,this._initted=this._gc=!1,this._rawPrevTime=-1,!this._gc&&this.timeline||this._enabled(!0),this},a.isActive=function(){var t,e=this._timeline,i=this._startTime;return!e||!this._gc&&!this._paused&&e.isActive()&&(t=e.rawTime(!0))>=i&&t<i+this.totalDuration()/this._timeScale-1e-8},a._enabled=function(t,e){return l||o.wake(),this._gc=!t,this._active=this.isActive(),!0!==e&&(t&&!this.timeline?this._timeline.add(this,this._startTime-this._delay):!t&&this.timeline&&this._timeline._remove(this,!0)),!1},a._kill=function(t,e){return this._enabled(!1,!1)},a.kill=function(t,e){return this._kill(t,e),this},a._uncache=function(t){for(var e=t?this:this.timeline;e;)e._dirty=!0,e=e.timeline;return this},a._swapSelfInParams=function(t){for(var e=t.length,i=t.concat();--e>-1;)\"{self}\"===t[e]&&(i[e]=this);return i},a._callback=function(t){var e=this.vars,i=e[t],s=e[t+\"Params\"],n=e[t+\"Scope\"]||e.callbackScope||this;switch(s?s.length:0){case 0:i.call(n);break;case 1:i.call(n,s[0]);break;case 2:i.call(n,s[0],s[1]);break;default:i.apply(n,s)}},a.eventCallback=function(t,e,i,s){if(\"on\"===(t||\"\").substr(0,2)){var n=this.vars;if(1===arguments.length)return n[t];null==e?delete n[t]:(n[t]=e,n[t+\"Params\"]=m(i)&&-1!==i.join(\"\").indexOf(\"{self}\")?this._swapSelfInParams(i):i,n[t+\"Scope\"]=s),\"onUpdate\"===t&&(this._onUpdate=e)}return this},a.delay=function(t){return arguments.length?(this._timeline.smoothChildTiming&&this.startTime(this._startTime+t-this._delay),this._delay=t,this):this._delay},a.duration=function(t){return arguments.length?(this._duration=this._totalDuration=t,this._uncache(!0),this._timeline.smoothChildTiming&&this._time>0&&this._time<this._duration&&0!==t&&this.totalTime(this._totalTime*(t/this._duration),!0),this):(this._dirty=!1,this._duration)},a.totalDuration=function(t){return this._dirty=!1,arguments.length?this.duration(t):this._totalDuration},a.time=function(t,e){return arguments.length?(this._dirty&&this.totalDuration(),this.totalTime(t>this._duration?this._duration:t,e)):this._time},a.totalTime=function(t,e,i){if(l||o.wake(),!arguments.length)return this._totalTime;if(this._timeline){if(t<0&&!i&&(t+=this.totalDuration()),this._timeline.smoothChildTiming){this._dirty&&this.totalDuration();var s=this._totalDuration,n=this._timeline;if(t>s&&!i&&(t=s),this._startTime=(this._paused?this._pauseTime:n._time)-(this._reversed?s-t:t)/this._timeScale,n._dirty||this._uncache(!1),n._timeline)for(;n._timeline;)n._timeline._time!==(n._startTime+n._totalTime)/n._timeScale&&n.totalTime(n._totalTime,!0),n=n._timeline}this._gc&&this._enabled(!0,!1),this._totalTime===t&&0!==this._duration||(I.length&&W(),this.render(t,e,!1),I.length&&W())}return this},a.progress=a.totalProgress=function(t,e){var i=this.duration();return arguments.length?this.totalTime(i*t,e):i?this._time/i:this.ratio},a.startTime=function(t){return arguments.length?(t!==this._startTime&&(this._startTime=t,this.timeline&&this.timeline._sortChildren&&this.timeline.add(this,t-this._delay)),this):this._startTime},a.endTime=function(t){return this._startTime+(0!=t?this.totalDuration():this.duration())/this._timeScale},a.timeScale=function(t){if(!arguments.length)return this._timeScale;var e,i;for(t=t||1e-8,this._timeline&&this._timeline.smoothChildTiming&&(i=(e=this._pauseTime)||0===e?e:this._timeline.totalTime(),this._startTime=i-(i-this._startTime)*this._timeScale/t),this._timeScale=t,i=this.timeline;i&&i.timeline;)i._dirty=!0,i.totalDuration(),i=i.timeline;return this},a.reversed=function(t){return arguments.length?(t!=this._reversed&&(this._reversed=t,this.totalTime(this._timeline&&!this._timeline.smoothChildTiming?this.totalDuration()-this._totalTime:this._totalTime,!0)),this):this._reversed},a.paused=function(t){if(!arguments.length)return this._paused;var e,i,s=this._timeline;return t!=this._paused&&s&&(l||t||o.wake(),i=(e=s.rawTime())-this._pauseTime,!t&&s.smoothChildTiming&&(this._startTime+=i,this._uncache(!1)),this._pauseTime=t?e:null,this._paused=t,this._active=this.isActive(),!t&&0!==i&&this._initted&&this.duration()&&this.render(e=s.smoothChildTiming?this._totalTime:(e-this._startTime)/this._timeScale,e===this._totalTime,!0)),this._gc&&!t&&this._enabled(!0,!1),this};var E=T(\"core.SimpleTimeline\",function(t){R.call(this,0,t),this.autoRemoveChildren=this.smoothChildTiming=!0});(a=E.prototype=new R).constructor=E,a.kill()._gc=!1,a._first=a._last=a._recent=null,a._sortChildren=!1,a.add=a.insert=function(t,e,i,s){var n,r;if(t._startTime=Number(e||0)+t._delay,t._paused&&this!==t._timeline&&(t._pauseTime=this.rawTime()-(t._timeline.rawTime()-t._pauseTime)),t.timeline&&t.timeline._remove(t,!0),t.timeline=t._timeline=this,t._gc&&t._enabled(!0,!0),n=this._last,this._sortChildren)for(r=t._startTime;n&&n._startTime>r;)n=n._prev;return n?(t._next=n._next,n._next=t):(t._next=this._first,this._first=t),t._next?t._next._prev=t:this._last=t,t._prev=n,this._recent=t,this._timeline&&this._uncache(!0),this},a._remove=function(t,e){return t.timeline===this&&(e||t._enabled(!1,!0),t._prev?t._prev._next=t._next:this._first===t&&(this._first=t._next),t._next?t._next._prev=t._prev:this._last===t&&(this._last=t._prev),t._next=t._prev=t.timeline=null,t===this._recent&&(this._recent=this._last),this._timeline&&this._uncache(!0)),this},a.render=function(t,e,i){var s,n=this._first;for(this._totalTime=this._time=this._rawPrevTime=t;n;)s=n._next,(n._active||t>=n._startTime&&!n._paused&&!n._gc)&&n.render(n._reversed?(n._dirty?n.totalDuration():n._totalDuration)-(t-n._startTime)*n._timeScale:(t-n._startTime)*n._timeScale,e,i),n=s},a.rawTime=function(){return l||o.wake(),this._totalTime};var L=T(\"TweenLite\",function(e,i,s){if(R.call(this,i,s),this.render=L.prototype.render,null==e)throw\"Cannot tween a null target.\";this.target=e=\"string\"!=typeof e?e:L.selector(e)||e;var n,r,a,o=e.jquery||e.length&&e!==t&&e[0]&&(e[0]===t||e[0].nodeType&&e[0].style&&!e.nodeType),l=this.vars.overwrite;if(this._overwrite=l=null==l?Y[L.defaultOverwrite]:\"number\"==typeof l?l>>0:Y[l],(o||e instanceof Array||e.push&&m(e))&&\"number\"!=typeof e[0])for(this._targets=a=f(e),this._propLookup=[],this._siblings=[],n=0;n<a.length;n++)(r=a[n])?\"string\"!=typeof r?r.length&&r!==t&&r[0]&&(r[0]===t||r[0].nodeType&&r[0].style&&!r.nodeType)?(a.splice(n--,1),this._targets=a=a.concat(f(r))):(this._siblings[n]=X(r,this,!1),1===l&&this._siblings[n].length>1&&tt(r,this,null,1,this._siblings[n])):\"string\"==typeof(r=a[n--]=L.selector(r))&&a.splice(n+1,1):a.splice(n--,1);else this._propLookup={},this._siblings=X(e,this,!1),1===l&&this._siblings.length>1&&tt(e,this,null,1,this._siblings);(this.vars.immediateRender||0===i&&0===this._delay&&!1!==this.vars.immediateRender)&&(this._time=-1e-8,this.render(Math.min(0,-this._delay)))},!0),O=function(e){return e&&e.length&&e!==t&&e[0]&&(e[0]===t||e[0].nodeType&&e[0].style&&!e.nodeType)};(a=L.prototype=new R).constructor=L,a.kill()._gc=!1,a.ratio=0,a._firstPT=a._targets=a._overwrittenProps=a._startAt=null,a._notifyPluginsOfEnabled=a._lazy=!1,L.version=\"2.1.2\",L.defaultEase=a._ease=new w(null,null,1,1),L.defaultOverwrite=\"auto\",L.ticker=o,L.autoSleep=120,L.lagSmoothing=function(t,e){o.lagSmoothing(t,e)},L.selector=t.$||t.jQuery||function(e){var s=t.$||t.jQuery;return s?(L.selector=s,s(e)):(i||(i=t.document),i?i.querySelectorAll?i.querySelectorAll(e):i.getElementById(\"#\"===e.charAt(0)?e.substr(1):e):e)};var I=[],z={},F=/(?:(-|-=|\\+=)?\\d*\\.?\\d*(?:e[\\-+]?\\d+)?)[0-9]/gi,$=/[\\+-]=-?[\\.\\d]/,U=function(t){for(var e,i=this._firstPT;i;)e=i.blob?1===t&&null!=this.end?this.end:t?this.join(\"\"):this.start:i.c*t+i.s,i.m?e=i.m.call(this._tween,e,this._target||i.t,this._tween):e<1e-6&&e>-1e-6&&!i.blob&&(e=0),i.f?i.fp?i.t[i.p](i.fp,e):i.t[i.p](e):i.t[i.p]=e,i=i._next},N=function(t){return(1e3*t|0)/1e3+\"\"},j=function(t,e,i,s){var n,r,a,o,l,h,_,c=[],u=0,f=\"\",p=0;for(c.start=t,c.end=e,t=c[0]=t+\"\",e=c[1]=e+\"\",i&&(i(c),t=c[0],e=c[1]),c.length=0,n=t.match(F)||[],r=e.match(F)||[],s&&(s._next=null,s.blob=1,c._firstPT=c._applyPT=s),l=r.length,o=0;o<l;o++)f+=(h=e.substr(u,e.indexOf(_=r[o],u)-u))||!o?h:\",\",u+=h.length,p?p=(p+1)%5:\"rgba(\"===h.substr(-5)&&(p=1),_===n[o]||n.length<=o?f+=_:(f&&(c.push(f),f=\"\"),a=parseFloat(n[o]),c.push(a),c._firstPT={_next:c._firstPT,t:c,p:c.length-1,s:a,c:(\"=\"===_.charAt(1)?parseInt(_.charAt(0)+\"1\",10)*parseFloat(_.substr(2)):parseFloat(_)-a)||0,f:0,m:p&&p<4?Math.round:N}),u+=_.length;return(f+=e.substr(u))&&c.push(f),c.setRatio=U,$.test(e)&&(c.end=null),c},G=function(t,e,i,s,n,r,a,o,l){\"function\"==typeof s&&(s=s(l||0,t));var h=typeof t[e],_=\"function\"!==h?\"\":e.indexOf(\"set\")||\"function\"!=typeof t[\"get\"+e.substr(3)]?e:\"get\"+e.substr(3),c=\"get\"!==i?i:_?a?t[_](a):t[_]():t[e],u=\"string\"==typeof s&&\"=\"===s.charAt(1),f={t:t,p:e,s:c,f:\"function\"===h,pg:0,n:n||e,m:r?\"function\"==typeof r?r:Math.round:0,pr:0,c:u?parseInt(s.charAt(0)+\"1\",10)*parseFloat(s.substr(2)):parseFloat(s)-c||0};if((\"number\"!=typeof c||\"number\"!=typeof s&&!u)&&(a||isNaN(c)||!u&&isNaN(s)||\"boolean\"==typeof c||\"boolean\"==typeof s?(f.fp=a,f={t:j(c,u?parseFloat(f.s)+f.c+(f.s+\"\").replace(/[0-9\\-\\.]/g,\"\"):s,o||L.defaultStringFilter,f),p:\"setRatio\",s:0,c:1,f:2,pg:0,n:n||e,pr:0,m:0}):(f.s=parseFloat(c),u||(f.c=parseFloat(s)-f.s||0))),f.c)return(f._next=this._firstPT)&&(f._next._prev=f),this._firstPT=f,f},q=L._internals={isArray:m,isSelector:O,lazyTweens:I,blobDif:j},M=L._plugins={},Q=q.tweenLookup={},B=0,K=q.reservedProps={ease:1,delay:1,overwrite:1,onComplete:1,onCompleteParams:1,onCompleteScope:1,useFrames:1,runBackwards:1,startAt:1,onUpdate:1,onUpdateParams:1,onUpdateScope:1,onStart:1,onStartParams:1,onStartScope:1,onReverseComplete:1,onReverseCompleteParams:1,onReverseCompleteScope:1,onRepeat:1,onRepeatParams:1,onRepeatScope:1,easeParams:1,yoyo:1,immediateRender:1,repeat:1,repeatDelay:1,data:1,paused:1,reversed:1,autoCSS:1,lazy:1,onOverwrite:1,callbackScope:1,stringFilter:1,id:1,yoyoEase:1,stagger:1},Y={none:0,all:1,auto:2,concurrent:3,allOnStart:4,preexisting:5,true:1,false:0},H=R._rootFramesTimeline=new E,J=R._rootTimeline=new E,V=30,W=q.lazyRender=function(){var t,e,i=I.length;for(z={},t=0;t<i;t++)(e=I[t])&&!1!==e._lazy&&(e.render(e._lazy[0],e._lazy[1],!0),e._lazy=!1);I.length=0};J._startTime=o.time,H._startTime=o.frame,J._active=H._active=!0,setTimeout(W,1),R._updateRoot=L.render=function(){var t,e,i;if(I.length&&W(),J.render((o.time-J._startTime)*J._timeScale,!1,!1),H.render((o.frame-H._startTime)*H._timeScale,!1,!1),I.length&&W(),o.frame>=V){for(i in V=o.frame+(parseInt(L.autoSleep,10)||120),Q){for(t=(e=Q[i].tweens).length;--t>-1;)e[t]._gc&&e.splice(t,1);0===e.length&&delete Q[i]}if((!(i=J._first)||i._paused)&&L.autoSleep&&!H._first&&1===o._listeners.tick.length){for(;i&&i._paused;)i=i._next;i||o.sleep()}}},o.addEventListener(\"tick\",R._updateRoot);var X=function(t,e,i){var s,n,r=t._gsTweenID;if(Q[r||(t._gsTweenID=r=\"t\"+B++)]||(Q[r]={target:t,tweens:[]}),e&&((s=Q[r].tweens)[n=s.length]=e,i))for(;--n>-1;)s[n]===e&&s.splice(n,1);return Q[r].tweens},Z=function(t,e,i,s){var n,r,a=t.vars.onOverwrite;return a&&(n=a(t,e,i,s)),(a=L.onOverwrite)&&(r=a(t,e,i,s)),!1!==n&&!1!==r},tt=function(t,e,i,s,n){var r,a,o,l;if(1===s||s>=4){for(l=n.length,r=0;r<l;r++)if((o=n[r])!==e)o._gc||o._kill(null,t,e)&&(a=!0);else if(5===s)break;return a}var h,_=e._startTime+1e-8,c=[],u=0,f=0===e._duration;for(r=n.length;--r>-1;)(o=n[r])===e||o._gc||o._paused||(o._timeline!==e._timeline?(h=h||et(e,0,f),0===et(o,h,f)&&(c[u++]=o)):o._startTime<=_&&o._startTime+o.totalDuration()/o._timeScale>_&&((f||!o._initted)&&_-o._startTime<=2e-8||(c[u++]=o)));for(r=u;--r>-1;)if(l=(o=c[r])._firstPT,2===s&&o._kill(i,t,e)&&(a=!0),2!==s||!o._firstPT&&o._initted&&l){if(2!==s&&!Z(o,e))continue;o._enabled(!1,!1)&&(a=!0)}return a},et=function(t,e,i){for(var s=t._timeline,n=s._timeScale,r=t._startTime;s._timeline;){if(r+=s._startTime,n*=s._timeScale,s._paused)return-100;s=s._timeline}return(r/=n)>e?r-e:i&&r===e||!t._initted&&r-e<2e-8?1e-8:(r+=t.totalDuration()/t._timeScale/n)>e+1e-8?0:r-e-1e-8};a._init=function(){var t,e,i,s,n,r,a=this.vars,o=this._overwrittenProps,l=this._duration,h=!!a.immediateRender,_=a.ease,c=this._startAt;if(a.startAt){for(s in c&&(c.render(-1,!0),c.kill()),n={},a.startAt)n[s]=a.startAt[s];if(n.data=\"isStart\",n.overwrite=!1,n.immediateRender=!0,n.lazy=h&&!1!==a.lazy,n.startAt=n.delay=null,n.onUpdate=a.onUpdate,n.onUpdateParams=a.onUpdateParams,n.onUpdateScope=a.onUpdateScope||a.callbackScope||this,this._startAt=L.to(this.target||{},0,n),h)if(this._time>0)this._startAt=null;else if(0!==l)return}else if(a.runBackwards&&0!==l)if(c)c.render(-1,!0),c.kill(),this._startAt=null;else{for(s in 0!==this._time&&(h=!1),i={},a)K[s]&&\"autoCSS\"!==s||(i[s]=a[s]);if(i.overwrite=0,i.data=\"isFromStart\",i.lazy=h&&!1!==a.lazy,i.immediateRender=h,this._startAt=L.to(this.target,0,i),h){if(0===this._time)return}else this._startAt._init(),this._startAt._enabled(!1),this.vars.immediateRender&&(this._startAt=null)}if(this._ease=_=_?_ instanceof w?_:\"function\"==typeof _?new w(_,a.easeParams):P[_]||L.defaultEase:L.defaultEase,a.easeParams instanceof Array&&_.config&&(this._ease=_.config.apply(_,a.easeParams)),this._easeType=this._ease._type,this._easePower=this._ease._power,this._firstPT=null,this._targets)for(r=this._targets.length,t=0;t<r;t++)this._initProps(this._targets[t],this._propLookup[t]={},this._siblings[t],o?o[t]:null,t)&&(e=!0);else e=this._initProps(this.target,this._propLookup,this._siblings,o,0);if(e&&L._onPluginEvent(\"_onInitAllProps\",this),o&&(this._firstPT||\"function\"!=typeof this.target&&this._enabled(!1,!1)),a.runBackwards)for(i=this._firstPT;i;)i.s+=i.c,i.c=-i.c,i=i._next;this._onUpdate=a.onUpdate,this._initted=!0},a._initProps=function(e,i,s,n,r){var a,o,l,h,_,c;if(null==e)return!1;for(a in z[e._gsTweenID]&&W(),this.vars.css||e.style&&e!==t&&e.nodeType&&M.css&&!1!==this.vars.autoCSS&&function(t,e){var i,s={};for(i in t)K[i]||i in e&&\"transform\"!==i&&\"x\"!==i&&\"y\"!==i&&\"width\"!==i&&\"height\"!==i&&\"className\"!==i&&\"border\"!==i||!(!M[i]||M[i]&&M[i]._autoCSS)||(s[i]=t[i],delete t[i]);t.css=s}(this.vars,e),this.vars)if(c=this.vars[a],K[a])c&&(c instanceof Array||c.push&&m(c))&&-1!==c.join(\"\").indexOf(\"{self}\")&&(this.vars[a]=c=this._swapSelfInParams(c,this));else if(M[a]&&(h=new M[a])._onInitTween(e,this.vars[a],this,r)){for(this._firstPT=_={_next:this._firstPT,t:h,p:\"setRatio\",s:0,c:1,f:1,n:a,pg:1,pr:h._priority,m:0},o=h._overwriteProps.length;--o>-1;)i[h._overwriteProps[o]]=this._firstPT;(h._priority||h._onInitAllProps)&&(l=!0),(h._onDisable||h._onEnable)&&(this._notifyPluginsOfEnabled=!0),_._next&&(_._next._prev=_)}else i[a]=G.call(this,e,a,\"get\",c,a,0,null,this.vars.stringFilter,r);return n&&this._kill(n,e)?this._initProps(e,i,s,n,r):this._overwrite>1&&this._firstPT&&s.length>1&&tt(e,this,i,this._overwrite,s)?(this._kill(i,e),this._initProps(e,i,s,n,r)):(this._firstPT&&(!1!==this.vars.lazy&&this._duration||this.vars.lazy&&!this._duration)&&(z[e._gsTweenID]=!0),l)},a.render=function(t,e,i){var s,n,r,a,o=this._time,l=this._duration,h=this._rawPrevTime;if(t>=l-1e-8&&t>=0)this._totalTime=this._time=l,this.ratio=this._ease._calcEnd?this._ease.getRatio(1):1,this._reversed||(s=!0,n=\"onComplete\",i=i||this._timeline.autoRemoveChildren),0===l&&(this._initted||!this.vars.lazy||i)&&(this._startTime===this._timeline._duration&&(t=0),(h<0||t<=0&&t>=-1e-8||1e-8===h&&\"isPause\"!==this.data)&&h!==t&&(i=!0,h>1e-8&&(n=\"onReverseComplete\")),this._rawPrevTime=a=!e||t||h===t?t:1e-8);else if(t<1e-8)this._totalTime=this._time=0,this.ratio=this._ease._calcEnd?this._ease.getRatio(0):0,(0!==o||0===l&&h>0)&&(n=\"onReverseComplete\",s=this._reversed),t>-1e-8?t=0:t<0&&(this._active=!1,0===l&&(this._initted||!this.vars.lazy||i)&&(h>=0&&(1e-8!==h||\"isPause\"!==this.data)&&(i=!0),this._rawPrevTime=a=!e||t||h===t?t:1e-8)),(!this._initted||this._startAt&&this._startAt.progress())&&(i=!0);else if(this._totalTime=this._time=t,this._easeType){var _=t/l,c=this._easeType,u=this._easePower;(1===c||3===c&&_>=.5)&&(_=1-_),3===c&&(_*=2),1===u?_*=_:2===u?_*=_*_:3===u?_*=_*_*_:4===u&&(_*=_*_*_*_),this.ratio=1===c?1-_:2===c?_:t/l<.5?_/2:1-_/2}else this.ratio=this._ease.getRatio(t/l);if(this._time!==o||i){if(!this._initted){if(this._init(),!this._initted||this._gc)return;if(!i&&this._firstPT&&(!1!==this.vars.lazy&&this._duration||this.vars.lazy&&!this._duration))return this._time=this._totalTime=o,this._rawPrevTime=h,I.push(this),void(this._lazy=[t,e]);this._time&&!s?this.ratio=this._ease.getRatio(this._time/l):s&&this._ease._calcEnd&&(this.ratio=this._ease.getRatio(0===this._time?0:1))}for(!1!==this._lazy&&(this._lazy=!1),this._active||!this._paused&&this._time!==o&&t>=0&&(this._active=!0),0===o&&(this._startAt&&(t>=0?this._startAt.render(t,!0,i):n||(n=\"_dummyGS\")),this.vars.onStart&&(0===this._time&&0!==l||e||this._callback(\"onStart\"))),r=this._firstPT;r;)r.f?r.t[r.p](r.c*this.ratio+r.s):r.t[r.p]=r.c*this.ratio+r.s,r=r._next;this._onUpdate&&(t<0&&this._startAt&&-1e-4!==t&&this._startAt.render(t,!0,i),e||(this._time!==o||s||i)&&this._callback(\"onUpdate\")),n&&(this._gc&&!i||(t<0&&this._startAt&&!this._onUpdate&&-1e-4!==t&&this._startAt.render(t,!0,i),s&&(this._timeline.autoRemoveChildren&&this._enabled(!1,!1),this._active=!1),!e&&this.vars[n]&&this._callback(n),0===l&&1e-8===this._rawPrevTime&&1e-8!==a&&(this._rawPrevTime=0)))}},a._kill=function(t,e,i){if(\"all\"===t&&(t=null),null==t&&(null==e||e===this.target))return this._lazy=!1,this._enabled(!1,!1);e=\"string\"!=typeof e?e||this._targets||this.target:L.selector(e)||e;var s,n,r,a,o,l,h,_,c,u=i&&this._time&&i._startTime===this._startTime&&this._timeline===i._timeline,f=this._firstPT;if((m(e)||O(e))&&\"number\"!=typeof e[0])for(s=e.length;--s>-1;)this._kill(t,e[s],i)&&(l=!0);else{if(this._targets){for(s=this._targets.length;--s>-1;)if(e===this._targets[s]){o=this._propLookup[s]||{},this._overwrittenProps=this._overwrittenProps||[],n=this._overwrittenProps[s]=t?this._overwrittenProps[s]||{}:\"all\";break}}else{if(e!==this.target)return!1;o=this._propLookup,n=this._overwrittenProps=t?this._overwrittenProps||{}:\"all\"}if(o){if(h=t||o,_=t!==n&&\"all\"!==n&&t!==o&&(\"object\"!=typeof t||!t._tempKill),i&&(L.onOverwrite||this.vars.onOverwrite)){for(r in h)o[r]&&(c||(c=[]),c.push(r));if((c||!t)&&!Z(this,i,e,c))return!1}for(r in h)(a=o[r])&&(u&&(a.f?a.t[a.p](a.s):a.t[a.p]=a.s,l=!0),a.pg&&a.t._kill(h)&&(l=!0),a.pg&&0!==a.t._overwriteProps.length||(a._prev?a._prev._next=a._next:a===this._firstPT&&(this._firstPT=a._next),a._next&&(a._next._prev=a._prev),a._next=a._prev=null),delete o[r]),_&&(n[r]=1);!this._firstPT&&this._initted&&f&&this._enabled(!1,!1)}}return l},a.invalidate=function(){this._notifyPluginsOfEnabled&&L._onPluginEvent(\"_onDisable\",this);var t=this._time;return this._firstPT=this._overwrittenProps=this._startAt=this._onUpdate=null,this._notifyPluginsOfEnabled=this._active=this._lazy=!1,this._propLookup=this._targets?{}:[],R.prototype.invalidate.call(this),this.vars.immediateRender&&(this._time=-1e-8,this.render(t,!1,!1!==this.vars.lazy)),this},a._enabled=function(t,e){if(l||o.wake(),t&&this._gc){var i,s=this._targets;if(s)for(i=s.length;--i>-1;)this._siblings[i]=X(s[i],this,!0);else this._siblings=X(this.target,this,!0)}return R.prototype._enabled.call(this,t,e),!(!this._notifyPluginsOfEnabled||!this._firstPT)&&L._onPluginEvent(t?\"_onEnable\":\"_onDisable\",this)},L.to=function(t,e,i){return new L(t,e,i)},L.from=function(t,e,i){return i.runBackwards=!0,i.immediateRender=0!=i.immediateRender,new L(t,e,i)},L.fromTo=function(t,e,i,s){return s.startAt=i,s.immediateRender=0!=s.immediateRender&&0!=i.immediateRender,new L(t,e,s)},L.delayedCall=function(t,e,i,s,n){return new L(e,0,{delay:t,onComplete:e,onCompleteParams:i,callbackScope:s,onReverseComplete:e,onReverseCompleteParams:i,immediateRender:!1,lazy:!1,useFrames:n,overwrite:0})},L.set=function(t,e){return new L(t,0,e)},L.getTweensOf=function(t,e){if(null==t)return[];var i,s,n,r;if(t=\"string\"!=typeof t?t:L.selector(t)||t,(m(t)||O(t))&&\"number\"!=typeof t[0]){for(i=t.length,s=[];--i>-1;)s=s.concat(L.getTweensOf(t[i],e));for(i=s.length;--i>-1;)for(r=s[i],n=i;--n>-1;)r===s[n]&&s.splice(i,1)}else if(t._gsTweenID)for(i=(s=X(t).concat()).length;--i>-1;)(s[i]._gc||e&&!s[i].isActive())&&s.splice(i,1);return s||[]},L.killTweensOf=L.killDelayedCallsTo=function(t,e,i){\"object\"==typeof e&&(i=e,e=!1);for(var s=L.getTweensOf(t,e),n=s.length;--n>-1;)s[n]._kill(i,t)};var it=T(\"plugins.TweenPlugin\",function(t,e){this._overwriteProps=(t||\"\").split(\",\"),this._propName=this._overwriteProps[0],this._priority=e||0,this._super=it.prototype},!0);if(a=it.prototype,it.version=\"1.19.0\",it.API=2,a._firstPT=null,a._addTween=G,a.setRatio=U,a._kill=function(t){var e,i=this._overwriteProps,s=this._firstPT;if(null!=t[this._propName])this._overwriteProps=[];else for(e=i.length;--e>-1;)null!=t[i[e]]&&i.splice(e,1);for(;s;)null!=t[s.n]&&(s._next&&(s._next._prev=s._prev),s._prev?(s._prev._next=s._next,s._prev=null):this._firstPT===s&&(this._firstPT=s._next)),s=s._next;return!1},a._mod=a._roundProps=function(t){for(var e,i=this._firstPT;i;)(e=t[this._propName]||null!=i.n&&t[i.n.split(this._propName+\"_\").join(\"\")])&&\"function\"==typeof e&&(2===i.f?i.t._applyPT.m=e:i.m=e),i=i._next},L._onPluginEvent=function(t,e){var i,s,n,r,a,o=e._firstPT;if(\"_onInitAllProps\"===t){for(;o;){for(a=o._next,s=n;s&&s.pr>o.pr;)s=s._next;(o._prev=s?s._prev:r)?o._prev._next=o:n=o,(o._next=s)?s._prev=o:r=o,o=a}o=e._firstPT=n}for(;o;)o.pg&&\"function\"==typeof o.t[t]&&o.t[t]()&&(i=!0),o=o._next;return i},it.activate=function(t){for(var e=t.length;--e>-1;)t[e].API===it.API&&(M[(new t[e])._propName]=t[e]);return!0},g.plugin=function(t){if(!(t&&t.propName&&t.init&&t.API))throw\"illegal plugin definition.\";var e,i=t.propName,s=t.priority||0,n=t.overwriteProps,r={init:\"_onInitTween\",set:\"setRatio\",kill:\"_kill\",round:\"_mod\",mod:\"_mod\",initAll:\"_onInitAllProps\"},a=T(\"plugins.\"+i.charAt(0).toUpperCase()+i.substr(1)+\"Plugin\",function(){it.call(this,i,s),this._overwriteProps=n||[]},!0===t.global),o=a.prototype=new it(i);for(e in o.constructor=a,a.API=t.API,r)\"function\"==typeof t[e]&&(o[r[e]]=t[e]);return a.version=t.version,it.activate([a]),a},n=t._gsQueue){for(r=0;r<n.length;r++)n[r]();for(a in d)d[a].func||t.console.log(\"GSAP encountered missing dependency: \"+a)}return l=!1,L}(_gsScope),globals=_gsScope.GreenSockGlobals,nonGlobals=globals.com.greensock,SimpleTimeline=nonGlobals.core.SimpleTimeline,Animation=nonGlobals.core.Animation,Ease=globals.Ease,Linear=globals.Linear,Power1=globals.Power1,Power2=globals.Power2,Power3=globals.Power3,Power4=globals.Power4,TweenPlugin=globals.TweenPlugin,EventDispatcher=nonGlobals.events.EventDispatcher,IonicAppflowActivator=function(){function t(){this.$circles=[],this.$lis=[],this.screenshots=[],this.active=null,this.duration=6,this.quickDuration=.25,this.r=31,this.gsRefs=[],this.scrollPause=null,this.circumference=2*this.r*Math.PI,this.animationSelect=this.animationSelect.bind(this),this.animationStart=this.animationStart.bind(this)}return t.prototype.componentDidLoad=function(){var t=this;setTimeout(this.animationStart,2e3,0);var e=function(i,s){t.$lis[s]=i,t.$circles[s]=i.querySelector(\".progress-ring__circle\"),t.screenshots[s]=i.querySelector(\"a\").dataset.screenshot,i.nextElementSibling&&\"LI\"===i.nextElementSibling.nodeName&&e(i.nextElementSibling,s+1)};e(this.el.querySelector(\"li:nth-child(1)\"),0),this.active=0},t.prototype.animationStart=function(t){var e=this;if(console.log(\"starting\"),window.pageYOffset>1e3)return console.log(\"pausing\"),void(this.scrollPause=setTimeout(this.animationStart,5e3,0));this.active=t,this.$lis[t].classList.add(\"active\"),TweenLite.to(this.$circles[t],.4,{opacity:1}),TweenLite.to(this.$circles[t],this.duration,{strokeDashoffset:0,onCompleteScope:this,onComplete:function(){e.animationStart(t>=e.$circles.length-1?0:t+1),e.$lis[t].classList.remove(\"active\"),TweenLite.to(e.$circles[t],.2,{opacity:0,onCompleteScope:e,onComplete:function(){TweenLite.to(e.$circles[t],0,{strokeDashoffset:e.circumference,lazy:!0})}})}})},t.prototype.animationSelect=function(t){var e=this;this.$lis[t].classList.add(\"active\"),this.active=t,this.scrollPause&&clearTimeout(this.scrollPause),this.animationStopOthers(t),TweenLite.to(this.$circles[t],this.quickDuration,{strokeDashoffset:0,opacity:1,onCompleteScope:this,onComplete:function(){e.animationStopOthers(t)}})},t.prototype.animationRestart=function(t){var e=this;this.animationStopOthers(t),TweenLite.to(this.$circles[t],.5,{strokeDashoffset:-1*this.circumference,lazy:!0,onCompleteScope:this,onComplete:function(){TweenLite.to(e.$circles[t],0,{strokeDashoffset:e.circumference,opacity:0,lazy:!0,onCompleteScope:e,onComplete:function(){e.animationStart(t)}})}})},t.prototype.animationStopOthers=function(t){var e=this,i=[];this.$circles.forEach(function(s,n){n!=t&&(i.push(s),e.$lis[n].classList.remove(\"active\"))}),TweenLite.to(i,.2,{opacity:0,lazy:!0,onCompleteScope:this,onComplete:function(){TweenLite.to(i,0,{strokeDashoffset:e.circumference,opacity:0,lazy:!0})}})},t.prototype.circle=function(t){return void 0===t&&(t=0),h(\"svg\",{class:\"progress-ring\",height:\"64\",width:\"64\"},h(\"circle\",{class:\"progress-ring__circle\",stroke:\"#6C89F7\",\"stroke-width\":\"2\",fill:\"transparent\",r:this.r,cx:\"32\",cy:\"32\",style:{strokeDasharray:this.circumference+\" \"+this.circumference,strokeDashoffset:this.circumference-t/100*this.circumference}}))},t.prototype.render=function(){var t=this;return[h(\"div\",{class:\"app-screenshot\"},this.screenshots.map(function(e,i){return h(\"img\",{class:i===t.active?\"active\":\"inactive\",src:e})})),h(\"nav\",null,h(\"ul\",null,h(\"li\",{onMouseEnter:function(){return t.animationSelect(0)},onMouseLeave:function(){return t.animationRestart(0)}},this.circle(),h(\"slot\",{name:\"1\"})),h(\"li\",{onMouseEnter:function(){return t.animationSelect(1)},onMouseLeave:function(){return t.animationRestart(1)}},this.circle(),h(\"slot\",{name:\"2\"})),h(\"li\",{onMouseEnter:function(){return t.animationSelect(2)},onMouseLeave:function(){return t.animationRestart(2)}},this.circle(),h(\"slot\",{name:\"3\"}))))]},Object.defineProperty(t,\"is\",{get:function(){return\"ionic-appflow-activator\"},enumerable:!0,configurable:!0}),Object.defineProperty(t,\"properties\",{get:function(){return{$circles:{state:!0},$lis:{state:!0},active:{state:!0},el:{elementRef:!0},screenshots:{state:!0}}},enumerable:!0,configurable:!0}),Object.defineProperty(t,\"style\",{get:function(){return\"ionic-appflow-activator nav{background:#fff;position:-webkit-sticky;position:sticky;top:100px;width:100%;margin-top:100px}ionic-appflow-activator ul{display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between;max-width:100%;width:600px;padding-left:10px;padding-right:10px;margin-top:-44px;margin-right:auto;margin-left:auto}ionic-appflow-activator li{width:120px;position:relative;list-style:none}ionic-appflow-activator .progress-ring{position:absolute;top:0;left:calc(50% - 32px);pointer-events:none}ionic-appflow-activator .progress-ring__circle{opacity:0;-webkit-transform:rotate(-90deg);transform:rotate(-90deg);-webkit-transform-origin:50% 50%;transform-origin:50% 50%}ionic-appflow-activator a{text-align:center;display:block;padding-top:64px;cursor:pointer}ionic-appflow-activator a .icon,ionic-appflow-activator a .icon-active{position:absolute;border-radius:50%;height:56px;width:56px;top:4px;left:calc(50% - 28px);-webkit-transition:opacity .2s ease,transform .2s ease;transition:opacity .2s ease,transform .2s ease}ionic-appflow-activator a .icon-active{opacity:0;-webkit-transform:scale(1.1);transform:scale(1.1);-webkit-transition:opacity .2s ease,transform .2s ease;transition:opacity .2s ease,transform .2s ease}ionic-appflow-activator a span{font-size:14px;line-height:22px;text-align:center;letter-spacing:.06em;text-transform:uppercase;font-weight:600;color:#92a1b3;-webkit-transition:color .2s ease;transition:color .2s ease}ionic-appflow-activator .active .icon{-webkit-transform:scale(1.1);transform:scale(1.1);opacity:0}ionic-appflow-activator .active .icon-active{opacity:1;-webkit-transform:scale(1);transform:scale(1)}ionic-appflow-activator .active span{color:#6c89f7}ionic-appflow-activator .app-screenshot{position:relative}ionic-appflow-activator .app-screenshot img{position:absolute;top:0;right:0;bottom:0;left:0;opacity:0;-webkit-transform:scale(1.01);transform:scale(1.01);-webkit-transition:opacity .2s ease,transform .2s ease;transition:opacity .2s ease,transform .2s ease}ionic-appflow-activator .app-screenshot img.active{opacity:1;-webkit-transform:none;transform:none}\\@-webkit-keyframes full-circle{to{stroke-dashoffset:0}}\\@keyframes full-circle{to{stroke-dashoffset:0}}\"},enumerable:!0,configurable:!0}),t}();export{IonicAppflowActivator};"
  },
  {
    "path": "content/js/stencil/esm/es5/build/index.js",
    "content": ""
  },
  {
    "path": "content/js/stencil/esm/es5/build/lo9utgpp.entry.js",
    "content": "import{h}from\"../ionic-site-components.core.js\";var IonicBarChart=function(){function t(){}return t.prototype.componentWillLoad=function(){},t.prototype.componentDidLoad=function(){},t.prototype.hexToRgb=function(t){t=t.replace(/^#?([a-f\\d])([a-f\\d])([a-f\\d])$/i,function(t,e,r,n){return e+e+r+r+n+n});var e=/^\\s?#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i.exec(t);return e?parseInt(e[1],16)+\", \"+parseInt(e[2],16)+\", \"+parseInt(e[3],16):null},t.prototype.prepareData=function(){var t=this,e=0,r=this.color?this.color.split(\",\"):[\"#92E1A7\",\"#51A7FF\"],n=JSON.parse(this.data.replace(/'/g,'\"'));return Object.keys(n).map(function(t){return e<n[t]&&(e=n[t]),{name:t,value:parseInt(n[t],10)}}).map(function(n,a){return Object.assign({},n,{styles:{bar:{width:Math.round(n.value/e*100)+\"%\",background:a>1?\"rgba(91,112,139) linear-gradient(to right, \"+r.map(function(e){return\"rgba(\"+t.hexToRgb(e)+\", .2)\"}).join(\", \")+\")\":\"linear-gradient(to right, \"+r.join(\", \")+\")\"},text:{color:a>1?\"#5B708B\":r[r.length-1]}}})})},t.prototype.render=function(){return[h(\"figure\",null,this.prepareData().map(function(t){return[h(\"div\",{class:\"bar-container\"},h(\"div\",{class:\"bar\",style:t.styles.bar},h(\"span\",{style:t.styles.text},t.value,\"%\"))),h(\"strong\",null,t.name)]}))]},Object.defineProperty(t,\"is\",{get:function(){return\"ionic-bar-chart\"},enumerable:!0,configurable:!0}),Object.defineProperty(t,\"properties\",{get:function(){return{color:{type:String,attr:\"color\"},data:{type:String,attr:\"data\"}}},enumerable:!0,configurable:!0}),Object.defineProperty(t,\"style\",{get:function(){return\"ionic-bar-chart{font-style:normal;font-weight:400;line-height:normal;font-size:16px;display:block;letter-spacing:-.04em}ionic-bar-chart .bar-container{width:100%;padding-right:50px;max-width:697px}ionic-bar-chart .bar{height:12px;position:relative;border-radius:2px}ionic-bar-chart .bar span{position:absolute;right:-40px;font-weight:500;top:-3px}ionic-bar-chart strong{margin-top:10px;display:block;font-weight:400;margin-bottom:34px}\"},enumerable:!0,configurable:!0}),t}();export{IonicBarChart};"
  },
  {
    "path": "content/js/stencil/esm/es5/build/lo9utgpp.sc.entry.js",
    "content": "import{h}from\"../ionic-site-components.core.js\";var IonicBarChart=function(){function t(){}return t.prototype.componentWillLoad=function(){},t.prototype.componentDidLoad=function(){},t.prototype.hexToRgb=function(t){t=t.replace(/^#?([a-f\\d])([a-f\\d])([a-f\\d])$/i,function(t,e,r,n){return e+e+r+r+n+n});var e=/^\\s?#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i.exec(t);return e?parseInt(e[1],16)+\", \"+parseInt(e[2],16)+\", \"+parseInt(e[3],16):null},t.prototype.prepareData=function(){var t=this,e=0,r=this.color?this.color.split(\",\"):[\"#92E1A7\",\"#51A7FF\"],n=JSON.parse(this.data.replace(/'/g,'\"'));return Object.keys(n).map(function(t){return e<n[t]&&(e=n[t]),{name:t,value:parseInt(n[t],10)}}).map(function(n,a){return Object.assign({},n,{styles:{bar:{width:Math.round(n.value/e*100)+\"%\",background:a>1?\"rgba(91,112,139) linear-gradient(to right, \"+r.map(function(e){return\"rgba(\"+t.hexToRgb(e)+\", .2)\"}).join(\", \")+\")\":\"linear-gradient(to right, \"+r.join(\", \")+\")\"},text:{color:a>1?\"#5B708B\":r[r.length-1]}}})})},t.prototype.render=function(){return[h(\"figure\",null,this.prepareData().map(function(t){return[h(\"div\",{class:\"bar-container\"},h(\"div\",{class:\"bar\",style:t.styles.bar},h(\"span\",{style:t.styles.text},t.value,\"%\"))),h(\"strong\",null,t.name)]}))]},Object.defineProperty(t,\"is\",{get:function(){return\"ionic-bar-chart\"},enumerable:!0,configurable:!0}),Object.defineProperty(t,\"properties\",{get:function(){return{color:{type:String,attr:\"color\"},data:{type:String,attr:\"data\"}}},enumerable:!0,configurable:!0}),Object.defineProperty(t,\"style\",{get:function(){return\"ionic-bar-chart{font-style:normal;font-weight:400;line-height:normal;font-size:16px;display:block;letter-spacing:-.04em}ionic-bar-chart .bar-container{width:100%;padding-right:50px;max-width:697px}ionic-bar-chart .bar{height:12px;position:relative;border-radius:2px}ionic-bar-chart .bar span{position:absolute;right:-40px;font-weight:500;top:-3px}ionic-bar-chart strong{margin-top:10px;display:block;font-weight:400;margin-bottom:34px}\"},enumerable:!0,configurable:!0}),t}();export{IonicBarChart};"
  },
  {
    "path": "content/js/stencil/esm/es5/build/m0trkizf.entry.js",
    "content": "import{h}from\"../ionic-site-components.core.js\";var IonicToggleButton=function(){function e(){this.selected=!1}return e.prototype.deselect=function(){this.selected=!1},e.prototype.select=function(){this.selected=!0},e.prototype.handleSelected=function(){this.toggleSelected.emit(this)},e.prototype.hostData=function(){return{class:{selected:this.selected}}},e.prototype.render=function(){var e=this;return h(\"div\",{onClick:function(t){return e.handleSelected()}},this.title)},Object.defineProperty(e,\"is\",{get:function(){return\"ionic-toggle-button\"},enumerable:!0,configurable:!0}),Object.defineProperty(e,\"encapsulation\",{get:function(){return\"shadow\"},enumerable:!0,configurable:!0}),Object.defineProperty(e,\"properties\",{get:function(){return{deselect:{method:!0},select:{method:!0},selected:{state:!0},tab:{type:String,attr:\"tab\"},title:{type:String,attr:\"title\"}}},enumerable:!0,configurable:!0}),Object.defineProperty(e,\"events\",{get:function(){return[{name:\"toggleSelected\",method:\"toggleSelected\",bubbles:!0,cancelable:!0,composed:!0}]},enumerable:!0,configurable:!0}),Object.defineProperty(e,\"style\",{get:function(){return\":host{display:-ms-flexbox;display:flex;text-decoration:none;cursor:pointer;border:1px solid #eee;text-align:center;font-size:14px}:host,div{-ms-flex:1;flex:1}div{padding:16px}:host(:last-child){border-left:none}:host(.selected){background-color:#4f8ef7;color:#fff;font-weight:700}\"},enumerable:!0,configurable:!0}),e}();export{IonicToggleButton};"
  },
  {
    "path": "content/js/stencil/esm/es5/build/m0trkizf.sc.entry.js",
    "content": "import{h}from\"../ionic-site-components.core.js\";var IonicToggleButton=function(){function e(){this.selected=!1}return e.prototype.deselect=function(){this.selected=!1},e.prototype.select=function(){this.selected=!0},e.prototype.handleSelected=function(){this.toggleSelected.emit(this)},e.prototype.hostData=function(){return{class:{selected:this.selected}}},e.prototype.render=function(){var e=this;return h(\"div\",{onClick:function(t){return e.handleSelected()}},this.title)},Object.defineProperty(e,\"is\",{get:function(){return\"ionic-toggle-button\"},enumerable:!0,configurable:!0}),Object.defineProperty(e,\"encapsulation\",{get:function(){return\"shadow\"},enumerable:!0,configurable:!0}),Object.defineProperty(e,\"properties\",{get:function(){return{deselect:{method:!0},select:{method:!0},selected:{state:!0},tab:{type:String,attr:\"tab\"},title:{type:String,attr:\"title\"}}},enumerable:!0,configurable:!0}),Object.defineProperty(e,\"events\",{get:function(){return[{name:\"toggleSelected\",method:\"toggleSelected\",bubbles:!0,cancelable:!0,composed:!0}]},enumerable:!0,configurable:!0}),Object.defineProperty(e,\"style\",{get:function(){return\".sc-ionic-toggle-button-h{display:-ms-flexbox;display:flex;text-decoration:none;cursor:pointer;border:1px solid #eee;text-align:center;font-size:14px}.sc-ionic-toggle-button-h, div.sc-ionic-toggle-button{-ms-flex:1;flex:1}div.sc-ionic-toggle-button{padding:16px}.sc-ionic-toggle-button-h:last-child{border-left:none}.selected.sc-ionic-toggle-button-h{background-color:#4f8ef7;color:#fff;font-weight:700}\"},enumerable:!0,configurable:!0}),e}();export{IonicToggleButton};"
  },
  {
    "path": "content/js/stencil/esm/es5/build/nrj8jyt7.entry.js",
    "content": "import{h}from\"../ionic-site-components.core.js\";var IonicToggleTab=function(){function e(){this.hidden=!0}return e.prototype.hide=function(){this.hidden=!0},e.prototype.show=function(){this.hidden=!1},e.prototype.hostData=function(){return{style:{display:this.hidden?\"none\":\"block\"}}},e.prototype.render=function(){return h(\"slot\",null)},Object.defineProperty(e,\"is\",{get:function(){return\"ionic-toggle-tab\"},enumerable:!0,configurable:!0}),Object.defineProperty(e,\"encapsulation\",{get:function(){return\"shadow\"},enumerable:!0,configurable:!0}),Object.defineProperty(e,\"properties\",{get:function(){return{hidden:{state:!0},hide:{method:!0},show:{method:!0},tab:{type:String,attr:\"tab\"}}},enumerable:!0,configurable:!0}),e}();export{IonicToggleTab};"
  },
  {
    "path": "content/js/stencil/esm/es5/build/nrj8jyt7.sc.entry.js",
    "content": "import{h}from\"../ionic-site-components.core.js\";var IonicToggleTab=function(){function e(){this.hidden=!0}return e.prototype.hide=function(){this.hidden=!0},e.prototype.show=function(){this.hidden=!1},e.prototype.hostData=function(){return{style:{display:this.hidden?\"none\":\"block\"}}},e.prototype.render=function(){return h(\"slot\",null)},Object.defineProperty(e,\"is\",{get:function(){return\"ionic-toggle-tab\"},enumerable:!0,configurable:!0}),Object.defineProperty(e,\"encapsulation\",{get:function(){return\"shadow\"},enumerable:!0,configurable:!0}),Object.defineProperty(e,\"properties\",{get:function(){return{hidden:{state:!0},hide:{method:!0},show:{method:!0},tab:{type:String,attr:\"tab\"}}},enumerable:!0,configurable:!0}),e}();export{IonicToggleTab};"
  },
  {
    "path": "content/js/stencil/esm/es5/build/raorzqti.entry.js",
    "content": "import{h}from\"../ionic-site-components.core.js\";var IonicQuickSignup=function(){function e(){this.showPricingNotice=!1,this.buttonColor=\"white\",this.transparentInput=!1}return e.prototype.handleSubmit=function(e){var t=window.getCookie(\"hubspotutk\");return this.hsidRef&&(this.hsidRef.value=t),!0},e.prototype.render=function(){var e=this;return h(\"form\",{class:\"form quick-signup-form \"+(this.transparentInput?\"transparent-input\":\"\"),role:\"form\",action:\"https://dashboard.ionicframework.com/signup\",method:\"GET\",onSubmit:function(t){return e.handleSubmit(t)}},h(\"input\",{type:\"hidden\",name:\"hsid\",ref:function(t){return e.hsidRef=t}}),h(\"input\",{type:\"hidden\",name:\"source\",value:\"homepage-quick\"}),h(\"div\",{class:\"form-group\",id:\"field-email\"},h(\"div\",{class:\"row\"},h(\"div\",{class:\"col-sm-8 input-col\"},h(\"input\",{class:\"form-control\",type:\"email\",placeholder:\"Enter your email address\",id:\"id_email\",name:\"email\",spellcheck:\"false\",required:!0})),h(\"div\",{class:\"col-sm-4\"},h(\"button\",{type:\"submit\",class:\"btn \"+this.buttonColor},\"Get started\")))),this.showPricingNotice?h(\"div\",{class:\"form-group\"},\"Ionic is free and open source for all developers. We also offer \",h(\"a\",{href:\"/pricing\"},\"enterprise options\"),\" for teams that need support and premium features.\"):null)},Object.defineProperty(e,\"is\",{get:function(){return\"ionic-quick-signup\"},enumerable:!0,configurable:!0}),Object.defineProperty(e,\"properties\",{get:function(){return{buttonColor:{type:String,attr:\"button-color\"},showPricingNotice:{type:Boolean,attr:\"show-pricing-notice\"},transparentInput:{type:Boolean,attr:\"transparent-input\"}}},enumerable:!0,configurable:!0}),Object.defineProperty(e,\"style\",{get:function(){return\"ionic-quick-signup{display:block}.quick-signup-form{width:100%;margin-bottom:-15px}.quick-signup-form .input-col{padding-right:0}.quick-signup-form.transparent-input input{background-color:hsla(0,0%,100%,.2);border:none;border-radius:8px;color:#fff}.quick-signup-form.transparent-input input:focus{border:none}.quick-signup-form.transparent-input input::-webkit-input-placeholder{color:hsla(0,0%,100%,.8);font-weight:400}.quick-signup-form.transparent-input input:-ms-input-placeholder{color:hsla(0,0%,100%,.8);font-weight:400}.quick-signup-form.transparent-input input::-ms-input-placeholder{color:hsla(0,0%,100%,.8);font-weight:400}.quick-signup-form.transparent-input input::placeholder{color:hsla(0,0%,100%,.8);font-weight:400}.quick-signup-form.transparent-input button.btn.white{font-family:Eina,Helvetica Neue,Helvetica,sans-serif;border-radius:8px;text-transform:none;font-weight:600;padding-left:15px;padding-right:15px}.quick-signup-form input{padding:0 14px;height:54px;background-color:#fff;-webkit-box-shadow:none;box-shadow:none;border:2px solid transparent;margin:0;width:100%}.quick-signup-form input::-webkit-input-placeholder{color:#757575;font-weight:700}.quick-signup-form input:-ms-input-placeholder{color:#757575;font-weight:700}.quick-signup-form input::-ms-input-placeholder{color:#757575;font-weight:700}.quick-signup-form input::placeholder{color:#757575;font-weight:700}.quick-signup-form input:focus{border:2px solid #757575}.quick-signup-form button{margin-top:0}\\@media (max-width:991px){.quick-signup-form{max-width:60%;margin:auto}}\\@media (max-width:767px){.quick-signup-form .btn{margin-top:20px}}\"},enumerable:!0,configurable:!0}),e}();export{IonicQuickSignup};"
  },
  {
    "path": "content/js/stencil/esm/es5/build/raorzqti.sc.entry.js",
    "content": "import{h}from\"../ionic-site-components.core.js\";var IonicQuickSignup=function(){function e(){this.showPricingNotice=!1,this.buttonColor=\"white\",this.transparentInput=!1}return e.prototype.handleSubmit=function(e){var t=window.getCookie(\"hubspotutk\");return this.hsidRef&&(this.hsidRef.value=t),!0},e.prototype.render=function(){var e=this;return h(\"form\",{class:\"form quick-signup-form \"+(this.transparentInput?\"transparent-input\":\"\"),role:\"form\",action:\"https://dashboard.ionicframework.com/signup\",method:\"GET\",onSubmit:function(t){return e.handleSubmit(t)}},h(\"input\",{type:\"hidden\",name:\"hsid\",ref:function(t){return e.hsidRef=t}}),h(\"input\",{type:\"hidden\",name:\"source\",value:\"homepage-quick\"}),h(\"div\",{class:\"form-group\",id:\"field-email\"},h(\"div\",{class:\"row\"},h(\"div\",{class:\"col-sm-8 input-col\"},h(\"input\",{class:\"form-control\",type:\"email\",placeholder:\"Enter your email address\",id:\"id_email\",name:\"email\",spellcheck:\"false\",required:!0})),h(\"div\",{class:\"col-sm-4\"},h(\"button\",{type:\"submit\",class:\"btn \"+this.buttonColor},\"Get started\")))),this.showPricingNotice?h(\"div\",{class:\"form-group\"},\"Ionic is free and open source for all developers. We also offer \",h(\"a\",{href:\"/pricing\"},\"enterprise options\"),\" for teams that need support and premium features.\"):null)},Object.defineProperty(e,\"is\",{get:function(){return\"ionic-quick-signup\"},enumerable:!0,configurable:!0}),Object.defineProperty(e,\"properties\",{get:function(){return{buttonColor:{type:String,attr:\"button-color\"},showPricingNotice:{type:Boolean,attr:\"show-pricing-notice\"},transparentInput:{type:Boolean,attr:\"transparent-input\"}}},enumerable:!0,configurable:!0}),Object.defineProperty(e,\"style\",{get:function(){return\"ionic-quick-signup{display:block}.quick-signup-form{width:100%;margin-bottom:-15px}.quick-signup-form .input-col{padding-right:0}.quick-signup-form.transparent-input input{background-color:hsla(0,0%,100%,.2);border:none;border-radius:8px;color:#fff}.quick-signup-form.transparent-input input:focus{border:none}.quick-signup-form.transparent-input input::-webkit-input-placeholder{color:hsla(0,0%,100%,.8);font-weight:400}.quick-signup-form.transparent-input input:-ms-input-placeholder{color:hsla(0,0%,100%,.8);font-weight:400}.quick-signup-form.transparent-input input::-ms-input-placeholder{color:hsla(0,0%,100%,.8);font-weight:400}.quick-signup-form.transparent-input input::placeholder{color:hsla(0,0%,100%,.8);font-weight:400}.quick-signup-form.transparent-input button.btn.white{font-family:Eina,Helvetica Neue,Helvetica,sans-serif;border-radius:8px;text-transform:none;font-weight:600;padding-left:15px;padding-right:15px}.quick-signup-form input{padding:0 14px;height:54px;background-color:#fff;-webkit-box-shadow:none;box-shadow:none;border:2px solid transparent;margin:0;width:100%}.quick-signup-form input::-webkit-input-placeholder{color:#757575;font-weight:700}.quick-signup-form input:-ms-input-placeholder{color:#757575;font-weight:700}.quick-signup-form input::-ms-input-placeholder{color:#757575;font-weight:700}.quick-signup-form input::placeholder{color:#757575;font-weight:700}.quick-signup-form input:focus{border:2px solid #757575}.quick-signup-form button{margin-top:0}\\@media (max-width:991px){.quick-signup-form{max-width:60%;margin:auto}}\\@media (max-width:767px){.quick-signup-form .btn{margin-top:20px}}\"},enumerable:!0,configurable:!0}),e}();export{IonicQuickSignup};"
  },
  {
    "path": "content/js/stencil/esm/es5/build/uy47nvwg.entry.js",
    "content": "import{h}from\"../ionic-site-components.core.js\";var IonicSlider=function(){function t(){var t=this;this.slideCount=1,this.timer=null,this.old=null,this.upcoming=null,this.slideDelay=1e4,this.current=0,this.status=[],this.ticker=0,this.next=function(){t.goTo(t.current>=t.slideCount-1?0:t.current+1)},this.goTo=function(e){t.status[e]&&(clearTimeout(t.timer),t.old=t.current,setTimeout(t.deactivate,1e3),t.upcoming=t.current=e,t.status[e].visible=!0,t.status[e].new=!0,setTimeout(t.activate,500),t.timer=setTimeout(t.next,t.slideDelay),t.ticker++)},this.deactivate=function(){t.status[t.old].active=!1,t.status[t.old].visible=!1,t.status[t.current].new=!1,t.ticker++},this.activate=function(){t.status[t.current].active=!0,t.ticker++},this.getClasses.bind(this),this.goTo.bind(this),this.activate.bind(this),this.deactivate.bind(this),this.next.bind(this);for(var e=0;e<this.slideCount;e++)this.status.push({visible:0===e,active:0===e,new:!1})}return t.prototype.componentDidLoad=function(){this.timer=setTimeout(this.next,this.slideDelay)},t.prototype.getClasses=function(t){return[this.status[t].visible?\"visible\":\"\",this.status[t].active?\"active\":\"\",this.status[t].new?\"new\":\"\"].join(\" \")},t.prototype.render=function(){return[h(\"div\",{class:this.getClasses(0)},h(\"slot\",{name:\"slide-0\"})),h(\"div\",{class:this.getClasses(1)},h(\"slot\",{name:\"slide-1\"})),h(\"ul\",{class:\"dots\"},h(\"li\",{class:0===this.current?\"active\":\"\",onClick:this.goTo.bind(this,0)}),h(\"li\",{class:1===this.current?\"active\":\"\",onClick:this.goTo.bind(this,1)}))]},Object.defineProperty(t,\"is\",{get:function(){return\"ionic-slider\"},enumerable:!0,configurable:!0}),Object.defineProperty(t,\"properties\",{get:function(){return{current:{state:!0},status:{state:!0},ticker:{state:!0}}},enumerable:!0,configurable:!0}),Object.defineProperty(t,\"style\",{get:function(){return\"ionic-slider{position:relative}ionic-slider>div,ionic-slider [slot^=slide-]{position:absolute;top:0;right:0;bottom:0;left:0;overflow:hidden}ionic-slider>div{display:none;-webkit-animation:fadeIn .5s ease;animation:fadeIn .5s ease}ionic-slider>div.visible{display:block}ionic-slider>div.visible.new{z-index:1}ionic-slider .dots{position:absolute;top:0;bottom:0;left:20px;padding:0;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;-ms-flex-pack:center;justify-content:center;-ms-flex-line-pack:center;align-content:center;z-index:2}ionic-slider .dots li{height:8px;width:8px;border-radius:50%;border:1px solid hsla(0,0%,100%,.5);margin-bottom:4px;list-style:none;cursor:pointer;-webkit-transition:background-color .5s ease,border-color .5s ease;transition:background-color .5s ease,border-color .5s ease}ionic-slider .dots li.active{background-color:#fff;border-color:#fff}\"},enumerable:!0,configurable:!0}),t}();export{IonicSlider};"
  },
  {
    "path": "content/js/stencil/esm/es5/build/uy47nvwg.sc.entry.js",
    "content": "import{h}from\"../ionic-site-components.core.js\";var IonicSlider=function(){function t(){var t=this;this.slideCount=1,this.timer=null,this.old=null,this.upcoming=null,this.slideDelay=1e4,this.current=0,this.status=[],this.ticker=0,this.next=function(){t.goTo(t.current>=t.slideCount-1?0:t.current+1)},this.goTo=function(e){t.status[e]&&(clearTimeout(t.timer),t.old=t.current,setTimeout(t.deactivate,1e3),t.upcoming=t.current=e,t.status[e].visible=!0,t.status[e].new=!0,setTimeout(t.activate,500),t.timer=setTimeout(t.next,t.slideDelay),t.ticker++)},this.deactivate=function(){t.status[t.old].active=!1,t.status[t.old].visible=!1,t.status[t.current].new=!1,t.ticker++},this.activate=function(){t.status[t.current].active=!0,t.ticker++},this.getClasses.bind(this),this.goTo.bind(this),this.activate.bind(this),this.deactivate.bind(this),this.next.bind(this);for(var e=0;e<this.slideCount;e++)this.status.push({visible:0===e,active:0===e,new:!1})}return t.prototype.componentDidLoad=function(){this.timer=setTimeout(this.next,this.slideDelay)},t.prototype.getClasses=function(t){return[this.status[t].visible?\"visible\":\"\",this.status[t].active?\"active\":\"\",this.status[t].new?\"new\":\"\"].join(\" \")},t.prototype.render=function(){return[h(\"div\",{class:this.getClasses(0)},h(\"slot\",{name:\"slide-0\"})),h(\"div\",{class:this.getClasses(1)},h(\"slot\",{name:\"slide-1\"})),h(\"ul\",{class:\"dots\"},h(\"li\",{class:0===this.current?\"active\":\"\",onClick:this.goTo.bind(this,0)}),h(\"li\",{class:1===this.current?\"active\":\"\",onClick:this.goTo.bind(this,1)}))]},Object.defineProperty(t,\"is\",{get:function(){return\"ionic-slider\"},enumerable:!0,configurable:!0}),Object.defineProperty(t,\"properties\",{get:function(){return{current:{state:!0},status:{state:!0},ticker:{state:!0}}},enumerable:!0,configurable:!0}),Object.defineProperty(t,\"style\",{get:function(){return\"ionic-slider{position:relative}ionic-slider>div,ionic-slider [slot^=slide-]{position:absolute;top:0;right:0;bottom:0;left:0;overflow:hidden}ionic-slider>div{display:none;-webkit-animation:fadeIn .5s ease;animation:fadeIn .5s ease}ionic-slider>div.visible{display:block}ionic-slider>div.visible.new{z-index:1}ionic-slider .dots{position:absolute;top:0;bottom:0;left:20px;padding:0;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;-ms-flex-pack:center;justify-content:center;-ms-flex-line-pack:center;align-content:center;z-index:2}ionic-slider .dots li{height:8px;width:8px;border-radius:50%;border:1px solid hsla(0,0%,100%,.5);margin-bottom:4px;list-style:none;cursor:pointer;-webkit-transition:background-color .5s ease,border-color .5s ease;transition:background-color .5s ease,border-color .5s ease}ionic-slider .dots li.active{background-color:#fff;border-color:#fff}\"},enumerable:!0,configurable:!0}),t}();export{IonicSlider};"
  },
  {
    "path": "content/js/stencil/esm/es5/build/uyiaiqzf.entry.js",
    "content": "import{h}from\"../ionic-site-components.core.js\";var IconExternal=function(){function e(){}return e.prototype.render=function(){return h(\"svg\",{class:\"new-tab\",viewBox:\"0 0 12 12\",\"data-ssrc\":\"59.1\"},h(\"g\",{transform:\"translate(0,1)\",\"data-ssrc\":\"59.0\"},h(\"rect\",{class:\"new-tab__box\",x:\"0\",y:\"2\",width:\"9\",height:\"9\",rx:\"1.5\",\"data-ssrc\":\"59.0.\"}),h(\"path\",{class:\"new-tab__arrow\",d:\"M9.18198052,1 L6.5,1 L6.5,0 L11,0 L11,1 L11,4.5 L10,4.5 L10,1.59619408 L4.02512627,7.57106781 L3.31801948,6.86396103 L9.18198052,1 Z\",\"data-ssrc\":\"59.1.\"})))},Object.defineProperty(e,\"is\",{get:function(){return\"icon-external\"},enumerable:!0,configurable:!0}),Object.defineProperty(e,\"style\",{get:function(){return\"icon-external{color:#a6b8d2;width:.8em;height:.8em;display:inline-block}icon-external svg{fill:currentColor}icon-external svg .new-tab__box{opacity:.5}icon-external svg .new-tab__arrow{-webkit-transition:transform .2s ease-out,fill .2s ease;transition:transform .2s ease-out,fill .2s ease;will-change:trasnform,fill}a:hover icon-external,icon-external:hover{color:#488aff}a:hover icon-external .new-tab__arrow,icon-external:hover .new-tab__arrow{-webkit-transform:translate(1px,-1px);transform:translate(1px,-1px)}\"},enumerable:!0,configurable:!0}),e}();export{IconExternal};"
  },
  {
    "path": "content/js/stencil/esm/es5/build/uyiaiqzf.sc.entry.js",
    "content": "import{h}from\"../ionic-site-components.core.js\";var IconExternal=function(){function e(){}return e.prototype.render=function(){return h(\"svg\",{class:\"new-tab\",viewBox:\"0 0 12 12\",\"data-ssrc\":\"59.1\"},h(\"g\",{transform:\"translate(0,1)\",\"data-ssrc\":\"59.0\"},h(\"rect\",{class:\"new-tab__box\",x:\"0\",y:\"2\",width:\"9\",height:\"9\",rx:\"1.5\",\"data-ssrc\":\"59.0.\"}),h(\"path\",{class:\"new-tab__arrow\",d:\"M9.18198052,1 L6.5,1 L6.5,0 L11,0 L11,1 L11,4.5 L10,4.5 L10,1.59619408 L4.02512627,7.57106781 L3.31801948,6.86396103 L9.18198052,1 Z\",\"data-ssrc\":\"59.1.\"})))},Object.defineProperty(e,\"is\",{get:function(){return\"icon-external\"},enumerable:!0,configurable:!0}),Object.defineProperty(e,\"style\",{get:function(){return\"icon-external{color:#a6b8d2;width:.8em;height:.8em;display:inline-block}icon-external svg{fill:currentColor}icon-external svg .new-tab__box{opacity:.5}icon-external svg .new-tab__arrow{-webkit-transition:transform .2s ease-out,fill .2s ease;transition:transform .2s ease-out,fill .2s ease;will-change:trasnform,fill}a:hover icon-external,icon-external:hover{color:#488aff}a:hover icon-external .new-tab__arrow,icon-external:hover .new-tab__arrow{-webkit-transform:translate(1px,-1px);transform:translate(1px,-1px)}\"},enumerable:!0,configurable:!0}),e}();export{IconExternal};"
  },
  {
    "path": "content/js/stencil/esm/es5/build/z7r5cewq.entry.js",
    "content": "import{h}from\"../ionic-site-components.core.js\";var IonicButton=function(){function e(){this.color=\"default\",this.type=\"button\",this.disabled=!1}return e.prototype.render=function(){return h(\"button\",this.disabled?{class:this.color,type:this.type,disabled:!0}:{class:this.color,type:this.type},h(\"slot\",null))},Object.defineProperty(e,\"is\",{get:function(){return\"ionic-button\"},enumerable:!0,configurable:!0}),Object.defineProperty(e,\"properties\",{get:function(){return{color:{type:String,attr:\"color\"},disabled:{type:Boolean,attr:\"disabled\"},type:{type:String,attr:\"type\"}}},enumerable:!0,configurable:!0}),Object.defineProperty(e,\"style\",{get:function(){return\"ionic-button button{border-radius:4px;padding:11px 15px 9px;font-size:16px;font-weight:500;-webkit-box-shadow:0 1px 3px rgba(0,0,0,.1);box-shadow:0 1px 3px rgba(0,0,0,.1);border:0;outline:none;height:100%;-webkit-transition:background-color .2s,border-color .3s,color .3s,-webkit-box-shadow .3s;transition:background-color .2s,border-color .3s,color .3s,-webkit-box-shadow .3s;transition:background-color .2s,border-color .3s,box-shadow .3s,color .3s;transition:background-color .2s,border-color .3s,box-shadow .3s,color .3s,-webkit-box-shadow .3s}ionic-button button.default{background:#488aff;color:#fff}ionic-button button.default:hover{background:#629aff}ionic-button button.default:active{background:#2f7aff}ionic-button button.white{background:#fff;border-color:#e8ebf1;color:#488aff}ionic-button button.white:active{background:#fafafa}ionic-button button:hover{-webkit-box-shadow:0 2px 5px rgba(0,0,0,.12);box-shadow:0 2px 5px rgba(0,0,0,.12)}ionic-button button:active{-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.1);box-shadow:inset 0 1px 2px rgba(0,0,0,.1)}ionic-button button:disabled{background:#e8ebf1;color:#fff;-webkit-box-shadow:none;box-shadow:none}\"},enumerable:!0,configurable:!0}),e}(),EmailIcon=function(){return h(\"svg\",{width:\"20\",height:\"14\",viewBox:\"0 0 20 14\",fill:\"none\",xmlns:\"http://www.w3.org/2000/svg\"},h(\"path\",{d:\"M19.8365 1.71514L14.6635 7.04323C14.625 7.08213 14.625 7.14046 14.6635 7.17935L18.2837 11.0782C18.5288 11.3261 18.5288 11.7248 18.2837 11.9727C18.1635 12.0942 18 12.1574 17.8413 12.1574C17.6827 12.1574 17.5192 12.0942 17.399 11.9727L13.7933 8.08844C13.7548 8.04954 13.6923 8.04954 13.6538 8.08844L12.774 8.99266C12.0385 9.74617 11.0625 10.1643 10.0144 10.1691C8.95192 10.174 7.94231 9.72187 7.19712 8.95863L6.35096 8.08844C6.3125 8.04954 6.25 8.04954 6.21154 8.08844L2.60577 11.9727C2.48558 12.0942 2.32212 12.1574 2.16346 12.1574C2.00481 12.1574 1.84135 12.0942 1.72115 11.9727C1.47596 11.7248 1.47596 11.3261 1.72115 11.0782L5.34135 7.17935C5.375 7.14046 5.375 7.08213 5.34135 7.04323L0.163462 1.71514C0.100962 1.65194 0 1.69569 0 1.7832V12.4443C0 13.2999 0.692308 13.9999 1.53846 13.9999H18.4615C19.3077 13.9999 20 13.2999 20 12.4443V1.7832C20 1.69569 19.8942 1.6568 19.8365 1.71514Z\",fill:\"#B2BECD\"}),h(\"path\",{d:\"M10.0013 8.90121C10.7128 8.90121 11.3811 8.61925 11.8811 8.10394L19.4244 0.340297C19.1599 0.126396 18.833 0 18.4724 0H1.53493C1.17435 0 0.842623 0.126396 0.583008 0.340297L8.12628 8.10394C8.62147 8.61438 9.28974 8.90121 10.0013 8.90121Z\",fill:\"#B2BECD\"}))},IonicNewsletterSignup=function(){function e(){this.placeholder=\"Email address\",this.buttonText=\"Subscribe\",this.darkMode=!1,this.homepageMode=!1,this.arrowMode=!1,this.lg=!1,this.kind=\"default\",this.isLoading=!1,this.hasSubmitted=!1,this.email=null,this.hsFormIds={default:\"76e5f69f-85fd-4579-afce-a1892d48bb32\",podcast:\"\"}}return e.prototype.handleEmailChange=function(e){this.email=e.target.value},e.prototype.handleSubmit=function(e){var t=this;e.preventDefault();var i=this.email;this.isLoading=!0;var o=new XMLHttpRequest;o.open(\"POST\",\"/api/v1/newsletter\"),o.setRequestHeader(\"Content-Type\",\"application/json;charset=UTF-8\"),o.onreadystatechange=function(){if(4===o.readyState&&200===o.status){t.isLoading=!1;var e=JSON.parse(o.responseText);t.hasSubmitted=e.ok,t.hubspotIdentify(i)}},o.send(JSON.stringify({email:this.email,podcast:\"podcast\"===this.kind}))},e.prototype.hubspotIdentify=function(e){var t=window._hsq=window._hsq||[];t.push([\"identify\",{email:e}]),t.push([\"trackEvent\",{id:\"Signed Up for Newsletter\",value:!0}]);var i=new XMLHttpRequest,o=[\"https://api.hsforms.com/submissions/v3/integration/submit\",\"3776657\",\"76e5f69f-85fd-4579-afce-a1892d48bb32\"].join(\"/\");i.open(\"POST\",o),i.setRequestHeader(\"Content-Type\",\"application/json;charset=UTF-8\"),i.onreadystatechange=function(){if(4===i.readyState&&200===i.status){var e=JSON.parse(i.responseText);console.log(e)}},i.send(JSON.stringify({fields:[{name:\"email\",value:this.email}],context:{hutk:document.cookie.match(/hubspotutk=(.*?);/)[1],pageUri:window.location.href,pageName:document.title}}))},e.prototype.getFormClass=function(){var e=this.darkMode?\"dark\":\"\";return this.arrowMode&&(e+=\" arrow\"),this.homepageMode&&(e+=\" homepage\"),this.lg&&(e+=\" lg\"),e},e.prototype.render=function(){var e=this;return h(\"form\",{onSubmit:function(t){return e.handleSubmit(t)},class:this.getFormClass()},this.homepageMode?h(EmailIcon,null):\"\",h(\"input\",{name:\"email\",type:\"email\",value:this.email,onInput:function(){return e.handleEmailChange(event)},disabled:this.isLoading,placeholder:this.placeholder,required:!0}),h(\"ionic-button\",{color:this.darkMode?\"white\":\"default\",type:\"submit\",disabled:this.isLoading||this.hasSubmitted},this.hasSubmitted?\"Added!\":this.arrowMode||this.homepageMode?h(\"ion-icon\",{name:\"md-arrow-forward\"}):this.buttonText))},Object.defineProperty(e,\"is\",{get:function(){return\"ionic-newsletter-signup\"},enumerable:!0,configurable:!0}),Object.defineProperty(e,\"properties\",{get:function(){return{arrowMode:{type:Boolean,attr:\"arrow-mode\"},buttonText:{type:String,attr:\"button-text\"},darkMode:{type:Boolean,attr:\"dark-mode\"},email:{state:!0},hasSubmitted:{state:!0},homepageMode:{type:Boolean,attr:\"homepage-mode\"},isLoading:{state:!0},kind:{type:String,attr:\"kind\"},lg:{type:Boolean,attr:\"lg\"},placeholder:{type:String,attr:\"placeholder\"}}},enumerable:!0,configurable:!0}),Object.defineProperty(e,\"style\",{get:function(){return\"ionic-newsletter-signup form{position:relative;display:-ms-flexbox;display:flex;border-collapse:separate;width:100%;height:40px}\\@media (max-width:991px){ionic-newsletter-signup form{max-width:calc(100% - 340px)}}\\@media (max-width:767px){ionic-newsletter-signup form{float:none;max-width:100%;margin-top:15px}}ionic-newsletter-signup form.dark input{color:#fff;-webkit-box-shadow:none;box-shadow:none}ionic-newsletter-signup form.dark input:hover{-webkit-box-shadow:0 1px 3px rgba(0,0,0,.15);box-shadow:0 1px 3px rgba(0,0,0,.15)}ionic-newsletter-signup form.dark input:focus{-webkit-box-shadow:0 1px 3px rgba(0,0,0,.1);box-shadow:0 1px 3px rgba(0,0,0,.1)}ionic-newsletter-signup form.dark input::-webkit-input-placeholder{color:#bbceef}ionic-newsletter-signup form.dark input:-ms-input-placeholder{color:#bbceef}ionic-newsletter-signup form.dark input::-ms-input-placeholder{color:#bbceef}ionic-newsletter-signup form.dark input::placeholder{color:#bbceef}ionic-newsletter-signup form.lg{height:48px}ionic-newsletter-signup form.lg input{padding:1px 17px 0;font-size:14px}ionic-newsletter-signup form.lg ionic-button button{padding:11px 12px}ionic-newsletter-signup form.arrow{border-radius:6px;-webkit-box-shadow:0 1px 3px rgba(0,16,44,.08),0 2px 4px rgba(0,16,44,.12);box-shadow:0 1px 3px rgba(0,16,44,.08),0 2px 4px rgba(0,16,44,.12);-webkit-transition:box-shadow .15s ease;transition:box-shadow .15s ease}ionic-newsletter-signup form.arrow:hover{-webkit-box-shadow:0 7px 14px rgba(0,16,44,.12),0 3px 6px rgba(0,16,44,.08);box-shadow:0 7px 14px rgba(0,16,44,.12),0 3px 6px rgba(0,16,44,.08)}ionic-newsletter-signup form.arrow input{border-radius:6px 0 0 6px;-webkit-box-shadow:none;box-shadow:none}ionic-newsletter-signup form.arrow input::-webkit-input-placeholder{color:#a8b0be;font-weight:400}ionic-newsletter-signup form.arrow input:-ms-input-placeholder{color:#a8b0be;font-weight:400}ionic-newsletter-signup form.arrow input::-ms-input-placeholder{color:#a8b0be;font-weight:400}ionic-newsletter-signup form.arrow input::placeholder{color:#a8b0be;font-weight:400}ionic-newsletter-signup form.arrow ionic-button button{background:#f0f5ff;color:#3880ff;font-size:23px;display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;border-radius:0 6px 6px 0}ionic-newsletter-signup form.arrow ionic-button button:hover{background:#ebf2ff}\\@media (max-width:991px){ionic-newsletter-signup form.arrow{max-width:100%}}ionic-newsletter-signup form.homepage{height:48px;border-radius:6px;background:#f8fafc;border:1px solid #e9edf3;-webkit-transition:border-color .2s,background-color .2s;transition:border-color .2s,background-color .2s}ionic-newsletter-signup form.homepage:hover{border-color:#73a6ff;background:#fff}ionic-newsletter-signup form.homepage svg{position:absolute;top:16px;left:16px}ionic-newsletter-signup form.homepage input{border-radius:6px 0 0 6px;-webkit-box-shadow:none;box-shadow:none;padding-left:46px}ionic-newsletter-signup form.homepage input::-webkit-input-placeholder{color:#a8b0be;font-weight:400}ionic-newsletter-signup form.homepage input:-ms-input-placeholder{color:#a8b0be;font-weight:400}ionic-newsletter-signup form.homepage input::-ms-input-placeholder{color:#a8b0be;font-weight:400}ionic-newsletter-signup form.homepage input::placeholder{color:#a8b0be;font-weight:400}ionic-newsletter-signup form.homepage ionic-button button{background:transparent;color:#7cabff;font-size:23px;display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-webkit-box-shadow:none;box-shadow:none;border-radius:0 6px 6px 0}ionic-newsletter-signup form.homepage ionic-button button:hover{color:#498aff;background:transparent}\\@media (max-width:991px){ionic-newsletter-signup form.homepage{max-width:100%}}ionic-newsletter-signup input{border:none;background:hsla(0,0%,100%,.2);border-radius:4px 0 0 4px;font-size:13px;color:#24282e;-webkit-box-shadow:none;box-shadow:none;font-weight:500;height:100%;outline:0;-ms-flex-positive:1;flex-grow:1;padding:0 16px 1px;-webkit-box-shadow:0 1px 3px rgba(0,0,0,.1);box-shadow:0 1px 3px rgba(0,0,0,.1);-webkit-transition:background .2s,box-shadow .2s;transition:background .2s,box-shadow .2s}ionic-newsletter-signup input:hover{-webkit-box-shadow:0 1px 3px rgba(0,0,0,.15);box-shadow:0 1px 3px rgba(0,0,0,.15)}ionic-newsletter-signup input:focus{-webkit-box-shadow:none;box-shadow:none;background:hsla(0,0%,100%,.25);-webkit-box-shadow:inset 0 0 2px rgba(0,0,0,.1);box-shadow:inset 0 0 2px rgba(0,0,0,.1)}ionic-newsletter-signup input::-webkit-input-placeholder{padding-left:0;color:#a1a9b6}ionic-newsletter-signup input:-ms-input-placeholder{padding-left:0;color:#a1a9b6}ionic-newsletter-signup input::-ms-input-placeholder{padding-left:0;color:#a1a9b6}ionic-newsletter-signup input::placeholder{padding-left:0;color:#a1a9b6}ionic-newsletter-signup ionic-button{height:100%}ionic-newsletter-signup ionic-button button{border-top-left-radius:0;border-bottom-left-radius:0;font-weight:500;font-size:14px;height:100%;padding:8px 9px 10px}\"},enumerable:!0,configurable:!0}),e}();export{IonicButton,IonicNewsletterSignup};"
  },
  {
    "path": "content/js/stencil/esm/es5/build/z7r5cewq.sc.entry.js",
    "content": "import{h}from\"../ionic-site-components.core.js\";var IonicButton=function(){function e(){this.color=\"default\",this.type=\"button\",this.disabled=!1}return e.prototype.render=function(){return h(\"button\",this.disabled?{class:this.color,type:this.type,disabled:!0}:{class:this.color,type:this.type},h(\"slot\",null))},Object.defineProperty(e,\"is\",{get:function(){return\"ionic-button\"},enumerable:!0,configurable:!0}),Object.defineProperty(e,\"properties\",{get:function(){return{color:{type:String,attr:\"color\"},disabled:{type:Boolean,attr:\"disabled\"},type:{type:String,attr:\"type\"}}},enumerable:!0,configurable:!0}),Object.defineProperty(e,\"style\",{get:function(){return\"ionic-button button{border-radius:4px;padding:11px 15px 9px;font-size:16px;font-weight:500;-webkit-box-shadow:0 1px 3px rgba(0,0,0,.1);box-shadow:0 1px 3px rgba(0,0,0,.1);border:0;outline:none;height:100%;-webkit-transition:background-color .2s,border-color .3s,color .3s,-webkit-box-shadow .3s;transition:background-color .2s,border-color .3s,color .3s,-webkit-box-shadow .3s;transition:background-color .2s,border-color .3s,box-shadow .3s,color .3s;transition:background-color .2s,border-color .3s,box-shadow .3s,color .3s,-webkit-box-shadow .3s}ionic-button button.default{background:#488aff;color:#fff}ionic-button button.default:hover{background:#629aff}ionic-button button.default:active{background:#2f7aff}ionic-button button.white{background:#fff;border-color:#e8ebf1;color:#488aff}ionic-button button.white:active{background:#fafafa}ionic-button button:hover{-webkit-box-shadow:0 2px 5px rgba(0,0,0,.12);box-shadow:0 2px 5px rgba(0,0,0,.12)}ionic-button button:active{-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.1);box-shadow:inset 0 1px 2px rgba(0,0,0,.1)}ionic-button button:disabled{background:#e8ebf1;color:#fff;-webkit-box-shadow:none;box-shadow:none}\"},enumerable:!0,configurable:!0}),e}(),EmailIcon=function(){return h(\"svg\",{width:\"20\",height:\"14\",viewBox:\"0 0 20 14\",fill:\"none\",xmlns:\"http://www.w3.org/2000/svg\"},h(\"path\",{d:\"M19.8365 1.71514L14.6635 7.04323C14.625 7.08213 14.625 7.14046 14.6635 7.17935L18.2837 11.0782C18.5288 11.3261 18.5288 11.7248 18.2837 11.9727C18.1635 12.0942 18 12.1574 17.8413 12.1574C17.6827 12.1574 17.5192 12.0942 17.399 11.9727L13.7933 8.08844C13.7548 8.04954 13.6923 8.04954 13.6538 8.08844L12.774 8.99266C12.0385 9.74617 11.0625 10.1643 10.0144 10.1691C8.95192 10.174 7.94231 9.72187 7.19712 8.95863L6.35096 8.08844C6.3125 8.04954 6.25 8.04954 6.21154 8.08844L2.60577 11.9727C2.48558 12.0942 2.32212 12.1574 2.16346 12.1574C2.00481 12.1574 1.84135 12.0942 1.72115 11.9727C1.47596 11.7248 1.47596 11.3261 1.72115 11.0782L5.34135 7.17935C5.375 7.14046 5.375 7.08213 5.34135 7.04323L0.163462 1.71514C0.100962 1.65194 0 1.69569 0 1.7832V12.4443C0 13.2999 0.692308 13.9999 1.53846 13.9999H18.4615C19.3077 13.9999 20 13.2999 20 12.4443V1.7832C20 1.69569 19.8942 1.6568 19.8365 1.71514Z\",fill:\"#B2BECD\"}),h(\"path\",{d:\"M10.0013 8.90121C10.7128 8.90121 11.3811 8.61925 11.8811 8.10394L19.4244 0.340297C19.1599 0.126396 18.833 0 18.4724 0H1.53493C1.17435 0 0.842623 0.126396 0.583008 0.340297L8.12628 8.10394C8.62147 8.61438 9.28974 8.90121 10.0013 8.90121Z\",fill:\"#B2BECD\"}))},IonicNewsletterSignup=function(){function e(){this.placeholder=\"Email address\",this.buttonText=\"Subscribe\",this.darkMode=!1,this.homepageMode=!1,this.arrowMode=!1,this.lg=!1,this.kind=\"default\",this.isLoading=!1,this.hasSubmitted=!1,this.email=null,this.hsFormIds={default:\"76e5f69f-85fd-4579-afce-a1892d48bb32\",podcast:\"\"}}return e.prototype.handleEmailChange=function(e){this.email=e.target.value},e.prototype.handleSubmit=function(e){var t=this;e.preventDefault();var i=this.email;this.isLoading=!0;var o=new XMLHttpRequest;o.open(\"POST\",\"/api/v1/newsletter\"),o.setRequestHeader(\"Content-Type\",\"application/json;charset=UTF-8\"),o.onreadystatechange=function(){if(4===o.readyState&&200===o.status){t.isLoading=!1;var e=JSON.parse(o.responseText);t.hasSubmitted=e.ok,t.hubspotIdentify(i)}},o.send(JSON.stringify({email:this.email,podcast:\"podcast\"===this.kind}))},e.prototype.hubspotIdentify=function(e){var t=window._hsq=window._hsq||[];t.push([\"identify\",{email:e}]),t.push([\"trackEvent\",{id:\"Signed Up for Newsletter\",value:!0}]);var i=new XMLHttpRequest,o=[\"https://api.hsforms.com/submissions/v3/integration/submit\",\"3776657\",\"76e5f69f-85fd-4579-afce-a1892d48bb32\"].join(\"/\");i.open(\"POST\",o),i.setRequestHeader(\"Content-Type\",\"application/json;charset=UTF-8\"),i.onreadystatechange=function(){if(4===i.readyState&&200===i.status){var e=JSON.parse(i.responseText);console.log(e)}},i.send(JSON.stringify({fields:[{name:\"email\",value:this.email}],context:{hutk:document.cookie.match(/hubspotutk=(.*?);/)[1],pageUri:window.location.href,pageName:document.title}}))},e.prototype.getFormClass=function(){var e=this.darkMode?\"dark\":\"\";return this.arrowMode&&(e+=\" arrow\"),this.homepageMode&&(e+=\" homepage\"),this.lg&&(e+=\" lg\"),e},e.prototype.render=function(){var e=this;return h(\"form\",{onSubmit:function(t){return e.handleSubmit(t)},class:this.getFormClass()},this.homepageMode?h(EmailIcon,null):\"\",h(\"input\",{name:\"email\",type:\"email\",value:this.email,onInput:function(){return e.handleEmailChange(event)},disabled:this.isLoading,placeholder:this.placeholder,required:!0}),h(\"ionic-button\",{color:this.darkMode?\"white\":\"default\",type:\"submit\",disabled:this.isLoading||this.hasSubmitted},this.hasSubmitted?\"Added!\":this.arrowMode||this.homepageMode?h(\"ion-icon\",{name:\"md-arrow-forward\"}):this.buttonText))},Object.defineProperty(e,\"is\",{get:function(){return\"ionic-newsletter-signup\"},enumerable:!0,configurable:!0}),Object.defineProperty(e,\"properties\",{get:function(){return{arrowMode:{type:Boolean,attr:\"arrow-mode\"},buttonText:{type:String,attr:\"button-text\"},darkMode:{type:Boolean,attr:\"dark-mode\"},email:{state:!0},hasSubmitted:{state:!0},homepageMode:{type:Boolean,attr:\"homepage-mode\"},isLoading:{state:!0},kind:{type:String,attr:\"kind\"},lg:{type:Boolean,attr:\"lg\"},placeholder:{type:String,attr:\"placeholder\"}}},enumerable:!0,configurable:!0}),Object.defineProperty(e,\"style\",{get:function(){return\"ionic-newsletter-signup form{position:relative;display:-ms-flexbox;display:flex;border-collapse:separate;width:100%;height:40px}\\@media (max-width:991px){ionic-newsletter-signup form{max-width:calc(100% - 340px)}}\\@media (max-width:767px){ionic-newsletter-signup form{float:none;max-width:100%;margin-top:15px}}ionic-newsletter-signup form.dark input{color:#fff;-webkit-box-shadow:none;box-shadow:none}ionic-newsletter-signup form.dark input:hover{-webkit-box-shadow:0 1px 3px rgba(0,0,0,.15);box-shadow:0 1px 3px rgba(0,0,0,.15)}ionic-newsletter-signup form.dark input:focus{-webkit-box-shadow:0 1px 3px rgba(0,0,0,.1);box-shadow:0 1px 3px rgba(0,0,0,.1)}ionic-newsletter-signup form.dark input::-webkit-input-placeholder{color:#bbceef}ionic-newsletter-signup form.dark input:-ms-input-placeholder{color:#bbceef}ionic-newsletter-signup form.dark input::-ms-input-placeholder{color:#bbceef}ionic-newsletter-signup form.dark input::placeholder{color:#bbceef}ionic-newsletter-signup form.lg{height:48px}ionic-newsletter-signup form.lg input{padding:1px 17px 0;font-size:14px}ionic-newsletter-signup form.lg ionic-button button{padding:11px 12px}ionic-newsletter-signup form.arrow{border-radius:6px;-webkit-box-shadow:0 1px 3px rgba(0,16,44,.08),0 2px 4px rgba(0,16,44,.12);box-shadow:0 1px 3px rgba(0,16,44,.08),0 2px 4px rgba(0,16,44,.12);-webkit-transition:box-shadow .15s ease;transition:box-shadow .15s ease}ionic-newsletter-signup form.arrow:hover{-webkit-box-shadow:0 7px 14px rgba(0,16,44,.12),0 3px 6px rgba(0,16,44,.08);box-shadow:0 7px 14px rgba(0,16,44,.12),0 3px 6px rgba(0,16,44,.08)}ionic-newsletter-signup form.arrow input{border-radius:6px 0 0 6px;-webkit-box-shadow:none;box-shadow:none}ionic-newsletter-signup form.arrow input::-webkit-input-placeholder{color:#a8b0be;font-weight:400}ionic-newsletter-signup form.arrow input:-ms-input-placeholder{color:#a8b0be;font-weight:400}ionic-newsletter-signup form.arrow input::-ms-input-placeholder{color:#a8b0be;font-weight:400}ionic-newsletter-signup form.arrow input::placeholder{color:#a8b0be;font-weight:400}ionic-newsletter-signup form.arrow ionic-button button{background:#f0f5ff;color:#3880ff;font-size:23px;display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;border-radius:0 6px 6px 0}ionic-newsletter-signup form.arrow ionic-button button:hover{background:#ebf2ff}\\@media (max-width:991px){ionic-newsletter-signup form.arrow{max-width:100%}}ionic-newsletter-signup form.homepage{height:48px;border-radius:6px;background:#f8fafc;border:1px solid #e9edf3;-webkit-transition:border-color .2s,background-color .2s;transition:border-color .2s,background-color .2s}ionic-newsletter-signup form.homepage:hover{border-color:#73a6ff;background:#fff}ionic-newsletter-signup form.homepage svg{position:absolute;top:16px;left:16px}ionic-newsletter-signup form.homepage input{border-radius:6px 0 0 6px;-webkit-box-shadow:none;box-shadow:none;padding-left:46px}ionic-newsletter-signup form.homepage input::-webkit-input-placeholder{color:#a8b0be;font-weight:400}ionic-newsletter-signup form.homepage input:-ms-input-placeholder{color:#a8b0be;font-weight:400}ionic-newsletter-signup form.homepage input::-ms-input-placeholder{color:#a8b0be;font-weight:400}ionic-newsletter-signup form.homepage input::placeholder{color:#a8b0be;font-weight:400}ionic-newsletter-signup form.homepage ionic-button button{background:transparent;color:#7cabff;font-size:23px;display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-webkit-box-shadow:none;box-shadow:none;border-radius:0 6px 6px 0}ionic-newsletter-signup form.homepage ionic-button button:hover{color:#498aff;background:transparent}\\@media (max-width:991px){ionic-newsletter-signup form.homepage{max-width:100%}}ionic-newsletter-signup input{border:none;background:hsla(0,0%,100%,.2);border-radius:4px 0 0 4px;font-size:13px;color:#24282e;-webkit-box-shadow:none;box-shadow:none;font-weight:500;height:100%;outline:0;-ms-flex-positive:1;flex-grow:1;padding:0 16px 1px;-webkit-box-shadow:0 1px 3px rgba(0,0,0,.1);box-shadow:0 1px 3px rgba(0,0,0,.1);-webkit-transition:background .2s,box-shadow .2s;transition:background .2s,box-shadow .2s}ionic-newsletter-signup input:hover{-webkit-box-shadow:0 1px 3px rgba(0,0,0,.15);box-shadow:0 1px 3px rgba(0,0,0,.15)}ionic-newsletter-signup input:focus{-webkit-box-shadow:none;box-shadow:none;background:hsla(0,0%,100%,.25);-webkit-box-shadow:inset 0 0 2px rgba(0,0,0,.1);box-shadow:inset 0 0 2px rgba(0,0,0,.1)}ionic-newsletter-signup input::-webkit-input-placeholder{padding-left:0;color:#a1a9b6}ionic-newsletter-signup input:-ms-input-placeholder{padding-left:0;color:#a1a9b6}ionic-newsletter-signup input::-ms-input-placeholder{padding-left:0;color:#a1a9b6}ionic-newsletter-signup input::placeholder{padding-left:0;color:#a1a9b6}ionic-newsletter-signup ionic-button{height:100%}ionic-newsletter-signup ionic-button button{border-top-left-radius:0;border-bottom-left-radius:0;font-weight:500;font-size:14px;height:100%;padding:8px 9px 10px}\"},enumerable:!0,configurable:!0}),e}();export{IonicButton,IonicNewsletterSignup};"
  },
  {
    "path": "content/js/stencil/esm/es5/index.js",
    "content": "// IonicSiteComponents: ES Module\nexport * from './build/index.js';"
  },
  {
    "path": "content/js/stencil/esm/es5/ionic-site-components.components.js",
    "content": "// IonicSiteComponents: Host Data, ES Module/es5 Target\nexport var COMPONENTS = [[\"icon-external\",\"uyiaiqzf\",1],[\"ion-icon\",\"bubpozqb\",1,[[\"ariaLabel\",2,1,\"aria-label\",2],[\"color\",1,0,1,2],[\"doc\",4,0,0,0,\"document\"],[\"el\",64],[\"flipRtl\",1,0,\"flip-rtl\",4],[\"icon\",1,0,1,2],[\"ios\",1,0,1,2],[\"isServer\",4,0,0,0,\"isServer\"],[\"isVisible\",16],[\"lazy\",1,0,1,4],[\"md\",1,0,1,2],[\"mode\",1,0,1,2],[\"name\",1,0,1,2],[\"resourcesUrl\",4,0,0,0,\"resourcesUrl\"],[\"size\",1,0,1,2],[\"src\",1,0,1,2],[\"svgContent\",16],[\"win\",4,0,0,0,\"window\"]],1],[\"ionic-appflow-activator\",\"hclgi8iu\",1,[[\"$circles\",16],[\"$lis\",16],[\"active\",16],[\"el\",64],[\"screenshots\",16]]],[\"ionic-bar-chart\",\"lo9utgpp\",1,[[\"color\",1,0,1,2],[\"data\",1,0,1,2]]],[\"ionic-button\",\"z7r5cewq\",1,[[\"color\",1,0,1,2],[\"disabled\",1,0,1,4],[\"type\",1,0,1,2]]],[\"ionic-newsletter-signup\",\"z7r5cewq\",1,[[\"arrowMode\",1,0,\"arrow-mode\",4],[\"buttonText\",1,0,\"button-text\",2],[\"darkMode\",1,0,\"dark-mode\",4],[\"email\",16],[\"hasSubmitted\",16],[\"homepageMode\",1,0,\"homepage-mode\",4],[\"isLoading\",16],[\"kind\",1,0,1,2],[\"lg\",1,0,1,4],[\"placeholder\",1,0,1,2]]],[\"ionic-quick-signup\",\"raorzqti\",1,[[\"buttonColor\",1,0,\"button-color\",2],[\"showPricingNotice\",1,0,\"show-pricing-notice\",4],[\"transparentInput\",1,0,\"transparent-input\",4]]],[\"ionic-search\",\"ehteibio\",1,[[\"active\",16],[\"dragStyles\",16],[\"el\",64],[\"mobile\",1,0,1,4],[\"pending\",16],[\"query\",16],[\"results\",16]]],[\"ionic-slider\",\"uy47nvwg\",1,[[\"current\",16],[\"status\",16],[\"ticker\",16]]],[\"ionic-snap-bar\",\"cetridhp\",1,[[\"active\",16]]],[\"ionic-toggle\",\"cz7vrrja\",1,[[\"el\",64]],1,[[\"toggleSelected\",\"selectionChanged\"]]],[\"ionic-toggle-button\",\"m0trkizf\",1,[[\"deselect\",32],[\"select\",32],[\"selected\",16],[\"tab\",1,0,1,2],[\"title\",1,0,1,2]],1],[\"ionic-toggle-tab\",\"nrj8jyt7\",0,[[\"hidden\",16],[\"hide\",32],[\"show\",32],[\"tab\",1,0,1,2]],1]]"
  },
  {
    "path": "content/js/stencil/esm/es5/ionic-site-components.core.js",
    "content": "/*!\n * IonicSiteComponents: Core, es5\n * Built with http://stenciljs.com\n */\nfunction n(n,t){return\"sc-\"+n.t+(t&&t!==c?\"-\"+t:\"\")}function t(n,t){return n+(t?\"-h\":\"-s\")}function e(n,t){for(var e,r,i=null,o=!1,u=!1,f=arguments.length;f-- >2;)A.push(arguments[f]);for(;A.length>0;){var c=A.pop();if(c&&void 0!==c.pop)for(f=c.length;f--;)A.push(c[f]);else\"boolean\"==typeof c&&(c=null),(u=\"function\"!=typeof n)&&(null==c?c=\"\":\"number\"==typeof c?c=String(c):\"string\"!=typeof c&&(u=!1)),u&&o?i[i.length-1].vtext+=c:null===i?i=[u?{vtext:c}:c]:i.push(u?{vtext:c}:c),o=u}if(null!=t){if(t.className&&(t.class=t.className),\"object\"==typeof t.class){for(f in t.class)t.class[f]&&A.push(f);t.class=A.join(\" \"),A.length=0}null!=t.key&&(e=t.key),null!=t.name&&(r=t.name)}return\"function\"==typeof n?n(t,i||[],E):{vtag:n,vchildren:i,vtext:void 0,vattrs:t,vkey:e,vname:r,i:void 0,o:!1}}function r(n,t,e){void 0===e&&(e={});var r=Array.isArray(t)?t:[t],i=n.document,o=e.hydratedCssClass||\"hydrated\",u=e.exclude;u&&(r=r.filter(function(n){return-1===u.indexOf(n[0])}));var c=r.map(function(n){return n[0]});if(c.length>0){var a=i.createElement(\"style\");a.innerHTML=c.join()+\"{visibility:hidden}.\"+o+\"{visibility:inherit}\",a.setAttribute(\"data-styles\",\"\"),i.head.insertBefore(a,i.head.firstChild)}var s=e.namespace||\"IonicSiteComponents\";return q||(q=!0,function l(n,t,e){(n[\"s-apps\"]=n[\"s-apps\"]||[]).push(t),e.componentOnReady||(e.componentOnReady=function t(){function e(t){if(r.nodeName.indexOf(\"-\")>0){for(var e=n[\"s-apps\"],i=0,o=0;o<e.length;o++)if(n[e[o]].componentOnReady){if(n[e[o]].componentOnReady(r,t))return;i++}if(i<e.length)return void(n[\"s-cr\"]=n[\"s-cr\"]||[]).push([r,t])}t(null)}var r=this;return n.Promise?new n.Promise(e):{then:e}})}(n,s,n.HTMLElement.prototype)),applyPolyfills(n).then(function(){function t(){r.forEach(function(t){var e;!function r(n){return/\\{\\s*\\[native code\\]\\s*\\}/.test(\"\"+n)}(n.customElements.define)?(e=function(t){return n.HTMLElement.call(this,t)}).prototype=Object.create(n.HTMLElement.prototype,{constructor:{value:e,configurable:!0}}):e=new Function(\"w\",\"return class extends w.HTMLElement{}\")(n),H[s].u(function i(n){var t=C(n),e=t.s,r=d(n[0]);return t.s=function(n){var t=n.mode,i=n.scoped;return function o(n,t,e){return import(\"./build/\"+n+(t?\".sc\":\"\")+\".entry.js\").then(function(n){return n[e]})}(\"string\"==typeof e?e:e[t],i,r)},t}(t),e)})}if(!H[s]){var u={},c=e.resourcesUrl||\"./\";f(s,u,n,i,c,o),H[s]=F(s,u,n,i,c,o,r)}if(window.customStyleShim)return H[s].l=window.customStyleShim,H[s].l.initShim().then(t);t()})}this&&this.v;var i=this&&this.p||function(n,t,e,r){return new(e||(e=Promise))(function(i,o){function u(n){try{c(r.next(n))}catch(n){o(n)}}function f(n){try{c(r.throw(n))}catch(n){o(n)}}function c(n){n.done?i(n.value):new e(function(t){t(n.value)}).then(u,f)}c((r=r.apply(n,t||[])).next())})},o=this&&this.m||function(n,t){function e(e){return function(u){return function c(e){if(r)throw new TypeError(\"Generator is already executing.\");for(;f;)try{if(r=1,i&&(o=2&e[0]?i.return:e[0]?i.throw||((o=i.return)&&o.call(i),0):i.next)&&!(o=o.call(i,e[1])).done)return o;switch(i=0,o&&(e=[2&e[0],o.value]),e[0]){case 0:case 1:o=e;break;case 4:return f.label++,{value:e[1],done:!1};case 5:f.label++,i=e[1],e=[0];continue;case 7:e=f.g.pop(),f.M.pop();continue;default:if(!(o=(o=f.M).length>0&&o[o.length-1])&&(6===e[0]||2===e[0])){f=0;continue}if(3===e[0]&&(!o||e[1]>o[0]&&e[1]<o[3])){f.label=e[1];break}if(6===e[0]&&f.label<o[1]){f.label=o[1],o=e;break}if(o&&f.label<o[2]){f.label=o[2],f.g.push(e);break}o[2]&&f.g.pop(),f.M.pop();continue}e=t.call(n,f)}catch(n){e=[6,n],i=0}finally{r=o=0}if(5&e[0])throw e[1];return{value:e[0]?e[1]:void 0,done:!0}}([e,u])}}var r,i,o,u,f={label:0,j:function(){if(1&o[0])throw o[1];return o[1]},M:[],g:[]};return u={next:e(0),throw:e(1),return:e(2)},\"function\"==typeof Symbol&&(u[Symbol.iterator]=function(){return this}),u},u=this,f=function(){};function applyPolyfills(n){n.k=function(){function t(){var n=setTimeout;return function(){return n(e,1)}}function e(){for(var n=0;n<b;n+=2)(0,O[n])(O[n+1]),O[n]=void 0,O[n+1]=void 0;b=0}function r(n,t){var e=this,r=new this.constructor(o);void 0===r[_]&&h(r);var i=e.A;if(i){var u=arguments[i-1];M(function(){return d(i,r,u,e.C)})}else v(e,r,n,t);return r}function i(n){if(n&&\"object\"==typeof n&&n.constructor===this)return n;var t=new this(o);return c(t,n),t}function o(){}function u(n){try{return n.then}catch(n){return P.error=n,P}}function f(n,t,e){t.constructor===n.constructor&&e===r&&t.constructor.resolve===i?function(n,t){t.A===W?s(n,t.C):t.A===x?l(n,t.C):v(t,void 0,function(t){return c(n,t)},function(t){return l(n,t)})}(n,t):e===P?(l(n,P.error),P.error=null):void 0===e?s(n,t):\"function\"==typeof e?function(n,t,e){M(function(n){var r=!1,i=function(n,t,e,r){try{n.call(t,e,r)}catch(n){return n}}(e,t,function(e){r||(r=!0,t!==e?c(n,e):s(n,e))},function(t){r||(r=!0,l(n,t))},n.O);!r&&i&&(r=!0,l(n,i))},n)}(n,t,e):s(n,t)}function c(n,t){if(n===t)l(n,new TypeError(\"cannot resolve promise w/ itself\"));else{var e=typeof t;null===t||\"object\"!==e&&\"function\"!==e?s(n,t):f(n,t,u(t))}}function a(n){n.S&&n.S(n.C),p(n)}function s(n,t){n.A===T&&(n.C=t,n.A=W,0!==n._.length&&M(p,n))}function l(n,t){n.A===T&&(n.A=x,n.C=t,M(a,n))}function v(n,t,e,r){var i=n._,o=i.length;n.S=null,i[o]=t,i[o+W]=e,i[o+x]=r,0===o&&n.A&&M(p,n)}function p(n){var t=n._,e=n.A;if(0!==t.length){for(var r,i,o=n.C,u=0;u<t.length;u+=3)r=t[u],i=t[u+e],r?d(e,r,i,o):i(o);n._.length=0}}function d(n,t,e,r){var i=\"function\"==typeof e,o=void 0,u=void 0,f=void 0,a=void 0;if(i){try{o=e(r)}catch(n){P.error=n,o=P}if(o===P?(a=!0,u=o.error,o.error=null):f=!0,t===o)return void l(t,new TypeError(\"Cannot return same promise\"))}else o=r,f=!0;t.A===T&&(i&&f?c(t,o):a?l(t,u):n===W?s(t,o):n===x&&l(t,o))}function h(n){n[_]=N++,n.A=void 0,n.C=void 0,n._=[]}var y,w=Array.isArray?Array.isArray:function(n){return\"[object Array]\"===Object.prototype.toString.call(n)},b=0,m=void 0,g=void 0,M=function(n,t){O[b]=n,O[b+1]=t,2===(b+=2)&&(g?g(e):S())},j=(y=void 0!==n?n:void 0)||{},k=j.MutationObserver||j.WebKitMutationObserver;j=\"undefined\"==typeof self;var $,A,E,C=\"undefined\"!=typeof Uint8ClampedArray&&\"undefined\"!=typeof importScripts&&\"undefined\"!=typeof MessageChannel,O=Array(1e3),S=void 0;S=k?($=0,A=new k(e),E=document.createTextNode(\"\"),A.observe(E,{characterData:!0}),function(){E.data=$=++$%2}):C?function(){var n=new MessageChannel;return n.port1.onmessage=e,function(){return n.port2.postMessage(0)}}():void 0===y&&\"function\"==typeof require?function(){try{var n=Function(\"return this\")().require(\"vertx\");return void 0!==(m=n.T||n.W)?function(){m(e)}:t()}catch(n){return t()}}():t();var _=Math.random().toString(36).substring(2),T=void 0,W=1,x=2,P={error:null},N=0,R=function(){function n(n,t){this.P=n,this.N=new n(o),this.N[_]||h(this.N),w(t)?(this.R=this.length=t.length,this.C=Array(this.length),0===this.length?s(this.N,this.C):(this.length=this.length||0,this.L(t),0===this.R&&s(this.N,this.C))):l(this.N,Error(\"Array Methods must be provided an Array\"))}return n.prototype.L=function(n){for(var t=0;this.A===T&&t<n.length;t++)this.D(n[t],t)},n.prototype.D=function(n,t){var e=this.P,c=e.resolve;c===i?(c=u(n))===r&&n.A!==T?this.F(n.A,t,n.C):\"function\"!=typeof c?(this.R--,this.C[t]=n):e===L?(f(e=new e(o),n,c),this.H(e,t)):this.H(new e(function(t){return t(n)}),t):this.H(c(n),t)},n.prototype.F=function(n,t,e){var r=this.N;r.A===T&&(this.R--,n===x?l(r,e):this.C[t]=e),0===this.R&&s(r,this.C)},n.prototype.H=function(n,t){var e=this;v(n,void 0,function(n){return e.F(W,t,n)},function(n){return e.F(x,t,n)})},n}(),L=function(){function n(t){if(this[_]=N++,this.C=this.A=void 0,this._=[],o!==t){if(\"function\"!=typeof t)throw new TypeError(\"Must pass a resolver fn as 1st arg\");if(!(this instanceof n))throw new TypeError(\"Failed to construct 'Promise': Use the 'new' operator.\");!function(n,t){try{t(function(t){c(n,t)},function(t){l(n,t)})}catch(t){l(n,t)}}(this,t)}}return n.prototype.catch=function(n){return this.then(null,n)},n.prototype.finally=function(n){var t=this.constructor;return this.then(function(e){return t.resolve(n()).then(function(){return e})},function(e){return t.resolve(n()).then(function(){throw e})})},n}();return L.prototype.then=r,L.all=function(n){return new R(this,n).N},L.race=function(n){var t=this;return w(n)?new t(function(e,r){for(var i=n.length,o=0;o<i;o++)t.resolve(n[o]).then(e,r)}):new t(function(n,t){return t(new TypeError(\"Must pass array to race\"))})},L.resolve=i,L.reject=function(n){var t=new this(o);return l(t,n),t},L.q=function(n){g=n},L.U=function(n){M=n},L.B=M,L.I=function(){var n=void 0;if(\"undefined\"!=typeof global)n=global;else if(\"undefined\"!=typeof self)n=self;else try{n=Function(\"return this\")()}catch(n){throw Error(\"polyfill failed\")}var t=n.Promise;if(t){var e=null;try{e=Object.prototype.toString.call(t.resolve())}catch(n){}if(\"[object Promise]\"===e&&!t.cast)return}n.Promise=L},L.Promise=L,L.I(),L}();var t=[];return n.customElements&&(!n.Element||n.Element.prototype.closest&&n.Element.prototype.matches&&n.Element.prototype.remove)||t.push(import(\"./polyfills/dom.js\")),\"function\"==typeof Object.assign&&Object.entries||t.push(import(\"./polyfills/object.js\")),Array.prototype.find&&Array.prototype.includes||t.push(import(\"./polyfills/array.js\")),String.prototype.startsWith&&String.prototype.endsWith||t.push(import(\"./polyfills/string.js\")),n.fetch||t.push(import(\"./polyfills/fetch.js\")),\"undefined\"!=typeof WeakMap&&n.CSS&&n.CSS.supports&&n.CSS.supports(\"color\",\"var(--c)\")||t.push(import(\"./polyfills/css-shim.js\")),function e(){try{var n=new URL(\"b\",\"http://a\");return n.pathname=\"c%20d\",\"http://a/c%20d\"===n.href&&n.searchParams}catch(n){return!1}}||t.push(import(\"./polyfills/url.js\")),Promise.all(t).then(function(t){t.forEach(function(t){try{t.applyPolyfill(n,n.document)}catch(n){console.error(n)}})})}var c=\"$\",a={},s={enter:13,escape:27,space:32,tab:9,left:37,up:38,right:39,down:40},l=function(t,e,r,i){var o=r.t+c,u=r[o];if((2===r.G||1===r.G&&!t.Z.Y)&&(i[\"s-sc\"]=u?n(r,i.mode):n(r)),u){var f=e.J.head;if(e.Y)if(1===r.G)f=i.shadowRoot;else{var a=i.getRootNode();a.host&&(f=a)}var s=t.K.get(f);if(s||t.K.set(f,s={}),!s[o]){var l=void 0;if(t.l?l=t.l.createHostStyle(i,o,u):((l=e.V(\"style\")).innerHTML=u,s[o]=!0),l){var v=f.querySelectorAll(\"[data-styles]\");e.X(f,l,v.length&&v[v.length-1].nextSibling||f.firstChild)}}}},v=function(n){return null!=n},p=function(n){return n.toLowerCase()},d=function(n){return p(n).split(\"-\").map(function(n){return n.charAt(0).toUpperCase()+n.slice(1)}).join(\"\")},h=function(){},y=function(n,t,e,r,i){void 0===r&&(r=\"boolean\"==typeof e),i=t!==(t=t.replace(/^xlink\\:?/,\"\")),null==e||r&&(!e||\"false\"===e)?i?n.removeAttributeNS(w,p(t)):n.removeAttribute(t):\"function\"!=typeof e&&(e=r?\"\":e.toString(),i?n.setAttributeNS(w,p(t),e):n.setAttribute(t,e))},w=\"http://www.w3.org/1999/xlink\",b=function(n,t,e,r,i,o,u){if(\"class\"!==e||o)if(\"style\"===e){for(var f in r)i&&null!=i[f]||(/-/.test(f)?t.style.removeProperty(f):t.style[f]=\"\");for(var f in i)r&&i[f]===r[f]||(/-/.test(f)?t.style.setProperty(f,i[f]):t.style[f]=i[f])}else if(\"o\"!==e[0]||\"n\"!==e[1]||!/[A-Z]/.test(e[2])||e in t)if(\"list\"!==e&&\"type\"!==e&&!o&&(e in t||-1!==[\"object\",\"function\"].indexOf(typeof i)&&null!==i)){var c=n.nn(t);c&&c.tn&&c.tn[e]?(g(t,e,i),u&&c.tn[e].en&&y(t,c.tn[e].rn,i,4===c.tn[e].in)):\"ref\"!==e&&(g(t,e,null==i?\"\":i),null!=i&&!1!==i||n.Z.on(t,e))}else null!=i&&\"key\"!==e?y(t,e,i):(o||n.Z.un(t,e)&&(null==i||!1===i))&&n.Z.on(t,e);else e=p(e)in t?p(e.substring(2)):p(e[2])+e.substring(3),i?i!==r&&n.Z.fn(t,e,i,0):n.Z.cn(t,e,0);else if(r!==i){var a=m(r),s=m(i),l=a.filter(function(n){return!s.includes(n)}),v=m(t.className).filter(function(n){return!l.includes(n)}),d=s.filter(function(n){return!a.includes(n)&&!v.includes(n)});v.push.apply(v,d),t.className=v.join(\" \")}},m=function(n){return null==n||\"\"===n?[]:n.trim().split(/\\s+/)},g=function(n,t,e){try{n[t]=e}catch(n){}},M=function(n,t,e,r,i){var o=11===e.i.nodeType&&e.i.host?e.i.host:e.i,u=t&&t.vattrs||a,f=e.vattrs||a;for(i in u)f&&null!=f[i]||null==u[i]||b(n,o,i,u[i],void 0,r,e.o);for(i in f)i in u&&f[i]===(\"value\"===i||\"checked\"===i?o[i]:u[i])||b(n,o,i,u[i],f[i],r,e.o)},j=!1,k=function(n,t){n&&(n.vattrs&&n.vattrs.ref&&n.vattrs.ref(t?null:n.i),n.vchildren&&n.vchildren.forEach(function(n){k(n,t)}))},$=function(n,t){var e=0,r=!1,i=function(){return t.performance.now()},o=!1!==n.asyncQueue,u=Promise.resolve(),f=[],c=[],a=[],s=[],l=function(t){return function(e){t.push(e),r||(r=!0,n.raf(d))}},v=function(n){for(var t=0;t<n.length;t++)try{n[t](i())}catch(n){console.error(n)}n.length=0},p=function(n,t){for(var e,r=0;r<n.length&&(e=i())<t;)try{n[r++](e)}catch(n){console.error(n)}r===n.length?n.length=0:0!==r&&n.splice(0,r)},d=function(){e++,v(c);var t=o?i()+7*Math.ceil(e*(1/22)):Infinity;p(a,t),p(s,t),a.length>0&&(s.push.apply(s,a),a.length=0),(r=c.length+a.length+s.length>0)?n.raf(d):e=0};return n.raf||(n.raf=t.requestAnimationFrame.bind(t)),{tick:function(n){f.push(n),1===f.length&&u.then(function(){return v(f)})},read:l(c),write:l(a)}},A=[],E={forEach:function(n,t){return n.forEach(t)},map:function(n,t){return n.map(t)}},C=function(n,t,e){var r=n[0],i=n[1],o=n[3],u=n[4],f=n[5],c={color:{rn:\"color\"}};if(o)for(t=0;t<o.length;t++)c[(e=o[t])[0]]={an:e[1],en:!!e[2],rn:\"string\"==typeof e[3]?e[3]:e[3]?e[0]:0,in:e[4]};return{t:r,s:i,tn:Object.assign({},c),G:u,sn:f?f.map(O):void 0}},O=function(n){return{ln:n[0],vn:n[1],pn:!!n[2],dn:!!n[3],hn:!!n[4]}},S=function(n,t){return v(t)&&\"object\"!=typeof t&&\"function\"!=typeof t?n===Boolean||4===n?\"false\"!==t&&(\"\"===t||!!t):n===Number||8===n?parseFloat(t):n===String||2===n?t.toString():t:t},_=function(n,t,e){n.yn.add(t),n.wn.has(t)||(n.wn.set(t,!0),n.bn?n.queue.write(function(){return T(n,t,e)}):n.queue.tick(function(){return T(n,t,e)}))},T=function(n,r,f,c,a,s){return i(u,void 0,void 0,function(){var i,u;return o(this,function(o){switch(o.label){case 0:if(n.wn.delete(r),n.mn.has(r))return[3,12];if(a=n.gn.get(r))return[3,6];if((s=n.Mn.get(r))&&!s[\"s-rn\"])return(s[\"s-rc\"]=s[\"s-rc\"]||[]).push(function(){T(n,r,f)}),[2];if(!(a=R(n,r,n.jn.get(r),f)))return[3,5];o.label=1;case 1:return o.M.push([1,4,,5]),a.componentWillLoad?[4,a.componentWillLoad()]:[3,3];case 2:o.j(),o.label=3;case 3:return[3,5];case 4:return i=o.j(),n.kn(i,3,r),[3,5];case 5:case 6:return[3,11];case 7:return o.M.push([7,10,,11]),a.componentWillUpdate?[4,a.componentWillUpdate()]:[3,9];case 8:o.j(),o.label=9;case 9:return[3,11];case 10:return u=o.j(),n.kn(u,5,r),[3,11];case 11:(function(n,r,i,o){try{var u,f=r.$n.host,c=r.$n.encapsulation,a=\"shadow\"===c&&n.Z.Y,s=i;if(u=function(n,t,e){return n&&Object.keys(n).forEach(function(r){n[r].reflectToAttr&&((e=e||{})[r]=t[r])}),e}(r.$n.properties,o),a&&(s=i.shadowRoot),!i[\"s-rn\"]){n.An(n,n.Z,r,i);var l=i[\"s-sc\"];l&&(n.Z.En(i,t(l,!0)),\"scoped\"===c&&n.Z.En(i,t(l)))}if(o.render||o.hostData||f||u){n.Cn=!0;var v=o.render&&o.render(),p=void 0;p=o.hostData&&o.hostData(),u&&(p=p?Object.assign(p,u):u),n.Cn=!1;var d=e(null,p,v),h=n.On.get(i)||{};h.i=s,d.o=!0,n.On.set(i,n.render(i,h,d,a,c))}n.l&&n.l.updateHost(i),i[\"s-rn\"]=!0,i[\"s-rc\"]&&(i[\"s-rc\"].forEach(function(n){return n()}),i[\"s-rc\"]=null)}catch(t){n.Cn=!1,n.kn(t,8,i,!0)}})(n,n.nn(r),r,a),r[\"s-init\"](),o.label=12;case 12:return[2]}})})},W=function(n,t,e,r,i,o,u){(u=n.Sn.get(t))||n.Sn.set(t,u={});var f=u[e];if(r!==f&&(u[e]=r,o=n.gn.get(t))){var c=u[N+e];if(c)for(var a=0;a<c.length;a++)try{o[c[a]].call(o,r,f,e)}catch(n){console.error(n)}!n.Cn&&t[\"s-rn\"]&&_(n,t,i)}},x=function(n,t,e){Object.defineProperty(n,t,{configurable:!0,value:e})},P=function(n,t,e,r){Object.defineProperty(n,t,{configurable:!0,get:e,set:r})},N=\"wc-\",R=function(n,t,e,r,i,o,u,f){try{i=new(o=n.nn(t).$n),function(n,t,e,r,i,o){n._n.set(r,e),n.Sn.has(e)||n.Sn.set(e,{}),Object.entries(Object.assign({color:{type:String}},t.properties,{mode:{type:String}})).forEach(function(t){var u=t[0],f=t[1];(function(n,t,e,r,i,o,u,f,c){if(t.type||t.state){var a=n.Sn.get(e);t.state||(!t.attr||void 0!==a[i]&&\"\"!==a[i]||(f=o&&o.Tn)&&v(c=f[t.attr])&&(a[i]=S(t.type,c)),e.hasOwnProperty(i)&&(void 0===a[i]&&(a[i]=S(t.type,e[i])),\"mode\"!==i&&delete e[i])),r.hasOwnProperty(i)&&void 0===a[i]&&(a[i]=r[i]),t.watchCallbacks&&(a[N+i]=t.watchCallbacks.slice()),P(r,i,function s(t){return(t=n.Sn.get(n._n.get(this)))&&t[i]},function l(e,r){(r=n._n.get(this))&&(t.state||t.mutable)&&W(n,r,i,e,u)})}else if(t.elementRef)x(r,i,e);else if(t.method)x(e,i,r[i].bind(r));else if(t.context){var p=n.Wn(t.context);void 0!==p&&x(r,i,p.getContext&&p.getContext(e)||p)}})(n,f,e,r,u,i,o)})}(n,o,t,i,e,r),function c(n,t,e){if(t){var r=n._n.get(e);t.forEach(function(t){e[t.method]={emit:function(e){return n.xn(r,t.name,{bubbles:t.bubbles,composed:t.composed,cancelable:t.cancelable,detail:e})}}})}}(n,o.events,i);try{if(u=n.Pn.get(t)){for(f=0;f<u.length;f+=2)i[u[f]](u[f+1]);n.Pn.delete(t)}}catch(e){n.kn(e,2,t)}}catch(e){i={},n.kn(e,7,t,!0)}return n.gn.set(t,i),i},L=function(n,t){for(var e=0;e<t.childNodes.length;e++){var r=t.childNodes[e];if(1===r.nodeType){if(n.nn(r)&&!n.Nn.has(r))return!1;if(!L(n,r))return!1}}return!0},D=function(n,t,e,r,i,o){if(n.yn.delete(t),(i=n.Mn.get(t))&&((r=i[\"s-ld\"])&&((e=r.indexOf(t))>-1&&r.splice(e,1),r.length||i[\"s-init\"]&&i[\"s-init\"]()),n.Mn.delete(t)),n.Rn.length&&!n.yn.size)for(;o=n.Rn.shift();)o()},F=function(n,t,r,i,o,u){var f=r.performance,a={html:{}},d=r[n]=r[n]||{},y=function(n,t,e){var r=new WeakMap,i={J:e,Y:!!e.documentElement.attachShadow,Ln:!1,Dn:function(n){return n.nodeType},V:function(n){return e.createElement(n)},Fn:function(n,t){return e.createElementNS(n,t)},Hn:function(n){return e.createTextNode(n)},qn:function(n){return e.createComment(n)},X:function(n,t,e){return n.insertBefore(t,e)},Un:function(n){return n.remove()},Bn:function(n,t){return n.appendChild(t)},En:function(n,t){if(n.classList)n.classList.add(t);else if(\"svg\"===n.nodeName.toLowerCase()){var e=n.getAttribute(\"class\")||\"\";e.split(\" \").includes(t)||(e+=\" \"+t),n.setAttribute(\"class\",e.trim())}},In:function(n){return n.childNodes},Gn:function(n){return n.parentNode},Qn:function(n){return n.nextSibling},Yn:function(n){return n.previousSibling},Zn:function(n){return p(n.nodeName)},zn:function(n){return n.textContent},Jn:function(n,t){return n.textContent=t},Kn:function(n,t){return n.getAttribute(t)},Vn:function(n,t,e){return n.setAttribute(t,e)},on:function(n,t){return n.removeAttribute(t)},un:function(n,t){return n.hasAttribute(t)},Xn:function(t){return t.getAttribute(\"mode\")||(n.Context||{}).mode},nt:function(n,r){return\"child\"===r?n.firstElementChild:\"parent\"===r?i.tt(n):\"body\"===r?e.body:\"document\"===r?e:\"window\"===r?t:n},fn:function(t,e,o,u,f,c,a,l,v,p){var d=t,h=o,y=r.get(t);p=e+u,y&&y[p]&&y[p](),\"string\"==typeof a?d=i.nt(t,a):\"object\"==typeof a?d=a:(v=e.split(\":\")).length>1&&(d=i.nt(t,v[0]),e=v[1]),d&&((v=e.split(\".\")).length>1&&(e=v[0],h=function(n){n.keyCode===s[v[1]]&&o(n)}),l=i.Ln?{capture:!!f,passive:!!c}:!!f,n.ael(d,e,h,l),y||r.set(t,y={}),y[p]=function(){d&&n.rel(d,e,h,l),y[p]=null})},cn:function(n,t,e,i){(i=r.get(n))&&(t?i[t+e]&&i[t+e]():Object.keys(i).forEach(function(n){i[n]&&i[n]()}))},et:function(n,e,r,i){return i=new t.CustomEvent(e,r),n&&n.dispatchEvent(i),i},tt:function(n,t){return(t=i.Gn(n))&&11===i.Dn(t)?t.host:t},rt:function(n,t,e,r){return n.setAttributeNS(t,e,r)},it:function(n,t){return n.attachShadow(t)}};\"function\"!=typeof t.CustomEvent&&(t.CustomEvent=function(n,t,r){return t=t||{},(r=e.createEvent(\"CustomEvent\")).initCustomEvent(n,t.bubbles,t.cancelable,t.detail),r},t.CustomEvent.prototype=t.Event.prototype),n.ael||(n.ael=function(n,t,e,r){return n.addEventListener(t,e,r)},n.rel=function(n,t,e,r){return n.removeEventListener(t,e,r)});try{t.addEventListener(\"e\",null,Object.defineProperty({},\"passive\",{get:function(){return i.Ln=!0}}))}catch(n){}return i}(d,r,i),w=y.J.documentElement,b=r[\"s-defined\"]=r[\"s-defined\"]||{},m={Z:y,u:function(n,t){r.customElements.get(n.t)||(function(n,t,e,r,i){if(e.connectedCallback=function(){(function(n,t,e){n.ot.has(e)||(n.ot.set(e,!0),function r(n,t){var e=n.nn(t);e.sn&&e.sn.forEach(function(e){e.pn||n.Z.fn(t,e.ln,function r(n,t,e,i){return function(r){(i=n.gn.get(t))?i[e](r):((i=n.Pn.get(t)||[]).push(e,r),n.Pn.set(t,i))}}(n,t,e.vn),1,e.hn,e.dn)})}(n,e)),n.mn.delete(e),n.Nn.has(e)||(n.ut=!0,n.yn.add(e),n.Nn.set(e,!0),function(n,t,e){for(e=t;e=n.Z.tt(e);)if(n.ft(e)){n.ct.has(t)||(n.Mn.set(t,e),(e[\"s-ld\"]=e[\"s-ld\"]||[]).push(t));break}}(n,e),n.queue.tick(function(){n.jn.set(e,function(n,t,e,r,i){if(e.mode||(e.mode=n.Xn(e)),e[\"s-cr\"]||n.Kn(e,\"ssrv\")||n.Y&&1===t.G||(e[\"s-cr\"]=n.Hn(\"\"),e[\"s-cr\"][\"s-cn\"]=!0,n.X(e,e[\"s-cr\"],n.In(e)[0])),!n.Y&&1===t.G)try{!window.HTMLElement||\"shadowRoot\"in window.HTMLElement.prototype||(e.shadowRoot=e)}catch(n){}return 1===t.G&&n.Y&&!e.shadowRoot&&n.it(e,{mode:\"open\"}),r={Tn:{}},t.tn&&Object.keys(t.tn).forEach(function(o){(i=t.tn[o].rn)&&(r.Tn[i]=n.Kn(e,i))}),r}(n.Z,t,e)),n.at(t,e)}))})(n,t,this)},e.disconnectedCallback=function(){(function(n,t){if(!n.st&&function(n,t){for(;t;){if(!n.Gn(t))return 9!==n.Dn(t);t=n.Gn(t)}}(n.Z,t)){n.mn.set(t,!0),D(n,t),k(n.On.get(t),!0);var e=n.gn.get(t);e&&e.componentDidUnload&&e.componentDidUnload(),n.Z.cn(t),n.ot.delete(t),n.l&&n.l.removeHost(t),[n.Mn,n.lt,n.jn].forEach(function(n){return n.delete(t)})}})(n,this)},e[\"s-init\"]=function(){(function(n,t,e,r,i,o,u){if(L(n,t)&&(i=n.gn.get(t))&&!n.mn.has(t)&&(!t[\"s-ld\"]||!t[\"s-ld\"].length)){n.ct.set(t,!0),(u=n.vt.has(t))||(n.vt.set(t,!0),t[\"s-ld\"]=void 0,n.Z.En(t,e));try{k(n.On.get(t)),(o=n.lt.get(t))&&(o.forEach(function(n){return n(t)}),n.lt.delete(t)),!u&&i.componentDidLoad&&i.componentDidLoad()}catch(e){n.kn(e,4,t)}D(n,t)}})(n,this,r)},e.forceUpdate=function(){_(n,this,i)},t.tn){var o=Object.entries(t.tn),u={};o.forEach(function(n){var t=n[0],e=n[1].rn;e&&(u[e]=t)}),u=Object.assign({},u),e.attributeChangedCallback=function(n,t,e){(function r(n,t,e,i){var o=n[p(e)];o&&(t[o]=(null!==i||\"boolean\"!=typeof t[o])&&i)})(u,this,n,e)},function(n,t,e,r){o.forEach(function(t){var i=t[0],o=t[1],u=o.an;3&u?P(e,i,function t(){return(n.Sn.get(this)||{})[i]},function t(e){W(n,this,i,S(o.in,e),r)}):32===u&&x(e,i,h)})}(n,0,e,i)}}(m,a[n.t]=n,t.prototype,u,f),t.observedAttributes=Object.values(n.tn).map(function(n){return n.rn}).filter(function(n){return!!n}),r.customElements.define(n.t,t))},nn:function(n){return a[y.Zn(n)]},Wn:function(n){return t[n]},isClient:!0,ft:function(n){return!(!b[y.Zn(n)]&&!m.nn(n))},kn:function(n,t,e){return console.error(n,t,e&&e.tagName)},queue:t.queue=$(d,r),at:function(n,t){var e=!y.Y,r={mode:t.mode,scoped:e};n.s(r).then(function(e){try{n.$n=e,function r(n,t,e,i,o){if(i){var u=t.t+(o||c);t[u]||(t[u]=i)}}(0,n,n.G,e.style,e.styleMode)}catch(t){console.error(t),n.$n=function i(){}}_(m,t,f)})},Cn:!1,bn:!1,st:!1,An:l,Mn:new WeakMap,K:new WeakMap,Nn:new WeakMap,ot:new WeakMap,vt:new WeakMap,ct:new WeakMap,_n:new WeakMap,jn:new WeakMap,gn:new WeakMap,mn:new WeakMap,wn:new WeakMap,lt:new WeakMap,Pn:new WeakMap,On:new WeakMap,Sn:new WeakMap,yn:new Set,Rn:[]};return t.isServer=t.isPrerender=!(t.isClient=!0),t.window=r,t.location=r.location,t.document=i,t.resourcesUrl=t.publicPath=o,t.enableListener=function(n,t,e,r,i){return function o(n,t,e,r,i,u){if(t){var f=n._n.get(t),c=n.nn(f);if(c&&c.sn)if(r){var a=c.sn.find(function(n){return n.ln===e});a&&n.Z.fn(f,e,function(n){return t[a.vn](n)},1,a.hn,void 0===u?a.dn:!!u,i)}else n.Z.cn(f,e,1)}}(m,n,t,e,r,i)},m.xn=t.emit=function(n,e,r){return y.et(n,t.eventNameFn?t.eventNameFn(e):e,r)},d.h=e,d.Context=t,d.onReady=function(){return new Promise(function(n){return m.queue.write(function(){return m.yn.size?m.Rn.push(n):n()})})},m.render=function(n,t){var e,r,i,o,u,f,c,a=function(i,l,p,d,h,y,w,b,m){if(b=l.vchildren[p],e||(o=!0,\"slot\"===b.vtag&&(r&&t.En(d,r+\"-s\"),b.vchildren?b.pt=!0:b.dt=!0)),v(b.vtext))b.i=t.Hn(b.vtext);else if(b.dt)b.i=t.Hn(\"\");else{if(y=b.i=j||\"svg\"===b.vtag?t.Fn(\"http://www.w3.org/2000/svg\",b.vtag):t.V(b.pt?\"slot-fb\":b.vtag),n.ft(y)&&n.ct.delete(c),j=\"svg\"===b.vtag||\"foreignObject\"!==b.vtag&&j,M(n,null,b,j),v(r)&&y[\"s-si\"]!==r&&t.En(y,y[\"s-si\"]=r),b.vchildren)for(h=0;h<b.vchildren.length;++h)(w=a(i,b,h,y))&&t.Bn(y,w);\"svg\"===b.vtag&&(j=!1)}return b.i[\"s-hn\"]=f,(b.pt||b.dt)&&(b.i[\"s-sr\"]=!0,b.i[\"s-cr\"]=u,b.i[\"s-sn\"]=b.vname||\"\",(m=i&&i.vchildren&&i.vchildren[p])&&m.vtag===b.vtag&&i.i&&s(i.i)),b.i},s=function(e,r,i,u){n.st=!0;var c=t.In(e);for(i=c.length-1;i>=0;i--)(u=c[i])[\"s-hn\"]!==f&&u[\"s-ol\"]&&(t.Un(u),t.X(y(u),u,h(u)),t.Un(u[\"s-ol\"]),u[\"s-ol\"]=null,o=!0),r&&s(u,r);n.st=!1},l=function(n,e,r,i,o,u,c,s){var l=n[\"s-cr\"];for((c=l&&t.Gn(l)||n).shadowRoot&&t.Zn(c)===f&&(c=c.shadowRoot);o<=u;++o)i[o]&&(s=v(i[o].vtext)?t.Hn(i[o].vtext):a(null,r,o,n))&&(i[o].i=s,t.X(c,s,h(e)))},p=function(n,e,r,o){for(;e<=r;++e)v(n[e])&&(o=n[e].i,i=!0,o[\"s-ol\"]?t.Un(o[\"s-ol\"]):s(o,!0),t.Un(o))},d=function(n,t){return n.vtag===t.vtag&&n.vkey===t.vkey&&(\"slot\"!==n.vtag||n.vname===t.vname)},h=function(n){return n&&n[\"s-ol\"]?n[\"s-ol\"]:n},y=function(n){return t.Gn(n[\"s-ol\"]?n[\"s-ol\"]:n)},w=function(e,r,i){var o=r.i=e.i,u=e.vchildren,f=r.vchildren;j=r.i&&v(t.tt(r.i))&&void 0!==r.i.ownerSVGElement,j=\"svg\"===r.vtag||\"foreignObject\"!==r.vtag&&j,v(r.vtext)?(i=o[\"s-cr\"])?t.Jn(t.Gn(i),r.vtext):e.vtext!==r.vtext&&t.Jn(o,r.vtext):(\"slot\"!==r.vtag&&M(n,e,r,j),v(u)&&v(f)?function(n,e,r,i,o,u,f,c){for(var b=0,m=0,g=e.length-1,M=e[0],j=e[g],k=i.length-1,$=i[0],A=i[k];b<=g&&m<=k;)if(null==M)M=e[++b];else if(null==j)j=e[--g];else if(null==$)$=i[++m];else if(null==A)A=i[--k];else if(d(M,$))w(M,$),M=e[++b],$=i[++m];else if(d(j,A))w(j,A),j=e[--g],A=i[--k];else if(d(M,A))\"slot\"!==M.vtag&&\"slot\"!==A.vtag||s(t.Gn(M.i)),w(M,A),t.X(n,M.i,t.Qn(j.i)),M=e[++b],A=i[--k];else if(d(j,$))\"slot\"!==M.vtag&&\"slot\"!==A.vtag||s(t.Gn(j.i)),w(j,$),t.X(n,j.i,M.i),j=e[--g],$=i[++m];else{for(o=null,u=b;u<=g;++u)if(e[u]&&v(e[u].vkey)&&e[u].vkey===$.vkey){o=u;break}v(o)?((c=e[o]).vtag!==$.vtag?f=a(e&&e[m],r,o,n):(w(c,$),e[o]=void 0,f=c.i),$=i[++m]):(f=a(e&&e[m],r,m,n),$=i[++m]),f&&t.X(y(M.i),f,h(M.i))}b>g?l(n,null==i[k+1]?null:i[k+1].i,r,i,m,k):m>k&&p(e,b,g)}(o,u,r,f):v(f)?(v(e.vtext)&&t.Jn(o,\"\"),l(o,null,r,f,0,f.length-1)):v(u)&&p(u,0,u.length-1)),j&&\"svg\"===r.vtag&&(j=!1)},b=function(n,e,r,i,o,u,f,c){for(i=0,o=(r=t.In(n)).length;i<o;i++)if(e=r[i],1===t.Dn(e)){if(e[\"s-sr\"])for(f=e[\"s-sn\"],e.hidden=!1,u=0;u<o;u++)if(r[u][\"s-hn\"]!==e[\"s-hn\"])if(c=t.Dn(r[u]),\"\"!==f){if(1===c&&f===t.Kn(r[u],\"slot\")){e.hidden=!0;break}}else if(1===c||3===c&&\"\"!==t.zn(r[u]).trim()){e.hidden=!0;break}b(e)}},m=[],g=function(n,e,r,o,u,f,c,a,s,l){for(u=0,f=(e=t.In(n)).length;u<f;u++){if((r=e[u])[\"s-sr\"]&&(o=r[\"s-cr\"]))for(a=t.In(t.Gn(o)),s=r[\"s-sn\"],c=a.length-1;c>=0;c--)(o=a[c])[\"s-cn\"]||o[\"s-nr\"]||o[\"s-hn\"]===r[\"s-hn\"]||((3===(l=t.Dn(o))||8===l)&&\"\"===s||1===l&&null===t.Kn(o,\"slot\")&&\"\"===s||1===l&&t.Kn(o,\"slot\")===s)&&(m.some(function(n){return n.ht===o})||(i=!0,o[\"s-sn\"]=s,m.push({yt:r,ht:o})));1===t.Dn(r)&&g(r)}};return function(a,s,l,v,p,d,h,y,M,j,k,$){if(c=a,f=t.Zn(c),u=c[\"s-cr\"],e=v,r=c[\"s-sc\"],o=i=!1,w(s,l),o){for(g(l.i),h=0;h<m.length;h++)(y=m[h]).ht[\"s-ol\"]||((M=t.Hn(\"\"))[\"s-nr\"]=y.ht,t.X(t.Gn(y.ht),y.ht[\"s-ol\"]=M,y.ht));for(n.st=!0,h=0;h<m.length;h++){for(y=m[h],k=t.Gn(y.yt),$=t.Qn(y.yt),M=y.ht[\"s-ol\"];M=t.Yn(M);)if((j=M[\"s-nr\"])&&j&&j[\"s-sn\"]===y.ht[\"s-sn\"]&&k===t.Gn(j)&&(j=t.Qn(j))&&j&&!j[\"s-nr\"]){$=j;break}(!$&&k!==t.Gn(y.ht)||t.Qn(y.ht)!==$)&&y.ht!==$&&(t.Un(y.ht),t.X(k,y.ht,$))}n.st=!1}return i&&b(l.i),m.length=0,l}}(m,y),w[\"s-ld\"]=[],w[\"s-rn\"]=!0,w[\"s-init\"]=function(){m.ct.set(w,d.loaded=m.bn=!0),y.et(r,\"appload\",{detail:{namespace:n}})},function(n,t,e,r,i,o){if(t.componentOnReady=function(t,e){if(!t.nodeName.includes(\"-\"))return e(null),!1;var r=n.nn(t);if(r)if(n.ct.has(t))e(t);else{var i=n.lt.get(t)||[];i.push(e),n.lt.set(t,i)}return!!r},i){for(o=i.length-1;o>=0;o--)t.componentOnReady(i[o][0],i[o][1])&&i.splice(o,1);for(o=0;o<r.length;o++)if(!e[r[o]].componentOnReady)return;for(o=0;o<i.length;o++)i[o][1](null);i.length=0}}(m,d,r,r[\"s-apps\"],r[\"s-cr\"]),d.initialized=!0,m},H={},q=!1;export{r as defineCustomElement,e as h};"
  },
  {
    "path": "content/js/stencil/esm/es5/ionic-site-components.define.js",
    "content": "\n// IonicSiteComponents: Custom Elements Define Library, ES Module/es5 Target\n\nimport { defineCustomElement } from './ionic-site-components.core.js';\nimport { COMPONENTS } from './ionic-site-components.components.js';\n\nexport function defineCustomElements(win, opts) {\n  return defineCustomElement(win, COMPONENTS, opts);\n}\n"
  },
  {
    "path": "content/js/stencil/esm/es5/polyfills/array.js",
    "content": "export function applyPolyfill(window, document) {/*!\nArray.prototype.fill\n*/\nArray.prototype.fill||Object.defineProperty(Array.prototype,\"fill\",{value:function(t){var r,e,i,n,o,a,l;if(null==this)throw new TypeError(\"this is null or not defined\");for(e=(r=Object(this)).length>>>0,n=(i=arguments[1]>>0)<0?Math.max(e+i,0):Math.min(i,e),l=(a=void 0===(o=arguments[2])?e:o>>0)<0?Math.max(e+a,0):Math.min(a,e);n<l;)r[n]=t,n++;return r}});\n\n/*!\nArray.prototype.find\n*/\nArray.prototype.find||Object.defineProperty(Array.prototype,\"find\",{writable:!0,configurable:!0,value:function(c,e){if(null==this)throw new TypeError('\"this\" is null or not defined');var b=Object(this),f=b.length>>>0;if(\"function\"!==typeof c)throw new TypeError(\"predicate must be a function\");for(var a=0;a<f;){var d=b[a];if(c.call(e,d,a,b))return d;a++}}});\n/*!\nArray.prototype.findIndex\n*/\nArray.prototype.findIndex||Object.defineProperty(Array.prototype,\"findIndex\",{value:function(c,d){if(null==this)throw new TypeError('\"this\" is null or not defined');var b=Object(this),e=b.length>>>0;if(\"function\"!==typeof c)throw new TypeError(\"predicate must be a function\");for(var a=0;a<e;){if(c.call(d,b[a],a,b))return a;a++}return-1},configurable:!0,writable:!0});\n/*!\nArray.from\n*/\nArray.from||(Array.from=function(){var l=Object.prototype.toString,h=function(c){return\"function\"===typeof c||\"[object Function]\"===l.call(c)},m=Math.pow(2,53)-1;return function(c){var k=Object(c);if(null==c)throw new TypeError(\"Array.from requires an array-like object - not null or undefined\");var d=1<arguments.length?arguments[1]:void 0,f;if(\"undefined\"!==typeof d){if(!h(d))throw new TypeError(\"Array.from: when provided, the second argument must be a function\");2<arguments.length&&(f=arguments[2])}var a=\nNumber(k.length);a=isNaN(a)?0:0!==a&&isFinite(a)?(0<a?1:-1)*Math.floor(Math.abs(a)):a;a=Math.min(Math.max(a,0),m);for(var g=h(this)?Object(new this(a)):Array(a),b=0,e;b<a;)e=k[b],g[b]=d?\"undefined\"===typeof f?d(e,b):d.call(f,e,b):e,b+=1;g.length=a;return g}}());\n/*!\nArray.prototype.includes\n*/\nArray.prototype.includes||Object.defineProperty(Array.prototype,\"includes\",{writable:!0,configurable:!0,value:function(r,e){if(null==this)throw new TypeError('\"this\" is null or not defined');var t=Object(this),n=t.length>>>0;if(0===n)return!1;var i,o,a=0|e,u=Math.max(0<=a?a:n-Math.abs(a),0);for(;u<n;){if((i=t[u])===(o=r)||\"number\"==typeof i&&\"number\"==typeof o&&isNaN(i)&&isNaN(o))return!0;u++}return!1}});\n}"
  },
  {
    "path": "content/js/stencil/esm/es5/polyfills/css-shim.js",
    "content": "export function applyPolyfill(window, document) {/*! https://github.com/WebReflection/es6-collections\n(C) Andrea Giammarchi - @WebReflection - Mit Style License */\n(function(e){function d(a,b){function c(a){if(!this||this.constructor!==c)return new c(a);this._keys=[];this._values=[];this._itp=[];this.objectOnly=b;a&&v.call(this,a)}b||w(a,\"size\",{get:x});a.constructor=c;c.prototype=a;return c}function v(a){this.add?a.forEach(this.add,this):a.forEach(function(a){this.set(a[0],a[1])},this)}function f(a){this.has(a)&&(this._keys.splice(c,1),this._values.splice(c,1),this._itp.forEach(function(a){c<a[0]&&a[0]--}));return-1<c}function m(a){return this.has(a)?this._values[c]:\n  void 0}function n(a,b){if(this.objectOnly&&b!==Object(b))throw new TypeError(\"Invalid value used as weak collection key\");if(b!=b||0===b)for(c=a.length;c--&&!y(a[c],b););else c=a.indexOf(b);return-1<c}function p(a){return n.call(this,this._values,a)}function q(a){return n.call(this,this._keys,a)}function r(a,b){this.has(a)?this._values[c]=b:this._values[this._keys.push(a)-1]=b;return this}function t(a){this.has(a)||this._values.push(a);return this}function h(){(this._keys||0).length=this._values.length=\n  0}function z(){return k(this._itp,this._keys)}function l(){return k(this._itp,this._values)}function A(){return k(this._itp,this._keys,this._values)}function B(){return k(this._itp,this._values,this._values)}function k(a,b,c){var g=[0],e=!1;a.push(g);return{next:function(){var d=g[0];if(!e&&d<b.length){var f=c?[b[d],c[d]]:b[d];g[0]++}else e=!0,a.splice(a.indexOf(g),1);return{done:e,value:f}}}}function x(){return this._values.length}function u(a,b){for(var c=this.entries();;){var d=c.next();if(d.done)break;\n  a.call(b,d.value[1],d.value[0],this)}}var c,w=Object.defineProperty,y=function(a,b){return a===b||a!==a&&b!==b};\"undefined\"==typeof WeakMap&&(e.WeakMap=d({\"delete\":f,clear:h,get:m,has:q,set:r},!0));\"undefined\"!=typeof Map&&\"function\"===typeof(new Map).values&&(new Map).values().next||(e.Map=d({\"delete\":f,has:q,get:m,set:r,keys:z,values:l,entries:A,forEach:u,clear:h}));\"undefined\"!=typeof Set&&\"function\"===typeof(new Set).values&&(new Set).values().next||(e.Set=d({has:p,add:t,\"delete\":f,clear:h,keys:l,\n  values:l,entries:B,forEach:u}));\"undefined\"==typeof WeakSet&&(e.WeakSet=d({\"delete\":f,add:t,clear:h,has:p},!0))})(window);\nvar StyleNode=function(){return function(){this.start=0,this.end=0,this.previous=null,this.parent=null,this.rules=null,this.parsedCssText=\"\",this.cssText=\"\",this.atRule=!1,this.type=0,this.keyframesName=\"\",this.selector=\"\",this.parsedSelector=\"\"}}();function parse(e){return parseCss(lex(e=clean(e)),e)}function clean(e){return e.replace(RX.comments,\"\").replace(RX.port,\"\")}function lex(e){var t=new StyleNode;t.start=0,t.end=e.length;for(var r=t,n=0,s=e.length;n<s;n++)if(e[n]===OPEN_BRACE){r.rules||(r.rules=[]);var a=r,o=a.rules[a.rules.length-1]||null;(r=new StyleNode).start=n+1,r.parent=a,r.previous=o,a.rules.push(r)}else e[n]===CLOSE_BRACE&&(r.end=n+1,r=r.parent||t);return t}function parseCss(e,t){var r=t.substring(e.start,e.end-1);if(e.parsedCssText=e.cssText=r.trim(),e.parent){var n=e.previous?e.previous.end:e.parent.start;r=(r=(r=_expandUnicodeEscapes(r=t.substring(n,e.start-1))).replace(RX.multipleSpaces,\" \")).substring(r.lastIndexOf(\";\")+1);var s=e.parsedSelector=e.selector=r.trim();e.atRule=0===s.indexOf(AT_START),e.atRule?0===s.indexOf(MEDIA_START)?e.type=types.MEDIA_RULE:s.match(RX.keyframesRule)&&(e.type=types.KEYFRAMES_RULE,e.keyframesName=e.selector.split(RX.multipleSpaces).pop()):0===s.indexOf(VAR_START)?e.type=types.MIXIN_RULE:e.type=types.STYLE_RULE}var a=e.rules;if(a)for(var o=0,i=a.length,l=void 0;o<i&&(l=a[o]);o++)parseCss(l,t);return e}function _expandUnicodeEscapes(e){return e.replace(/\\\\([0-9a-f]{1,6})\\s/gi,function(){for(var e=arguments[1],t=6-e.length;t--;)e=\"0\"+e;return\"\\\\\"+e})}var types={STYLE_RULE:1,KEYFRAMES_RULE:7,MEDIA_RULE:4,MIXIN_RULE:1e3},OPEN_BRACE=\"{\",CLOSE_BRACE=\"}\",RX={comments:/\\/\\*[^*]*\\*+([^\\/*][^*]*\\*+)*\\//gim,port:/@import[^;]*;/gim,customProp:/(?:^[^;\\-\\s}]+)?--[^;{}]*?:[^{};]*?(?:[;\\n]|$)/gim,mixinProp:/(?:^[^;\\-\\s}]+)?--[^;{}]*?:[^{};]*?{[^}]*?}(?:[;\\n]|$)?/gim,mixinApply:/@apply\\s*\\(?[^);]*\\)?\\s*(?:[;\\n]|$)?/gim,varApply:/[^;:]*?:[^;]*?var\\([^;]*\\)(?:[;\\n]|$)?/gim,keyframesRule:/^@[^\\s]*keyframes/,multipleSpaces:/\\s+/g},VAR_START=\"--\",MEDIA_START=\"@media\",AT_START=\"@\";function findRegex(e,t,r){e.lastIndex=0;var n=t.substring(r).match(e);if(n){var s=r+n.index;return{start:s,end:s+n[0].length}}return null}var VAR_USAGE_START=/\\bvar\\(/,VAR_ASSIGN_START=/\\B--[\\w-]+\\s*:/,COMMENTS=/\\/\\*[^*]*\\*+([^\\/*][^*]*\\*+)*\\//gim,TRAILING_LINES=/^[\\t ]+\\n/gm;function resolveVar(e,t,r){return e[t]?e[t]:r?executeTemplate(r,e):\"\"}function findVarEndIndex(e,t){for(var r=0,n=t;n<e.length;n++){var s=e[n];if(\"(\"===s)r++;else if(\")\"===s&&--r<=0)return n+1}return n}function parseVar(e,t){var r=findRegex(VAR_USAGE_START,e,t);if(!r)return null;var n=findVarEndIndex(e,r.start),s=e.substring(r.end,n-1).split(\",\"),a=s[0],o=s.slice(1);return{start:r.start,end:n,propName:a.trim(),fallback:o.length>0?o.join(\",\").trim():void 0}}function compileVar(e,t,r){var n=parseVar(e,r);if(!n)return t.push(e.substring(r,e.length)),e.length;var s=n.propName,a=null!=n.fallback?compileTemplate(n.fallback):void 0;return t.push(e.substring(r,n.start),function(e){return resolveVar(e,s,a)}),n.end}function executeTemplate(e,t){for(var r=\"\",n=0;n<e.length;n++){var s=e[n];r+=\"string\"==typeof s?s:s(t)}return r}function findEndValue(e,t){for(var r=!1,n=!1,s=t;s<e.length;s++){var a=e[s];if(r)n&&'\"'===a&&(r=!1),n||\"'\"!==a||(r=!1);else if('\"'===a)r=!0,n=!0;else if(\"'\"===a)r=!0,n=!1;else{if(\";\"===a)return s+1;if(\"}\"===a)return s}}return s}function removeCustomAssigns(e){for(var t=\"\",r=0;;){var n=findRegex(VAR_ASSIGN_START,e,r),s=n?n.start:e.length;if(t+=e.substring(r,s),!n)break;r=findEndValue(e,s)}return t}function compileTemplate(e){var t=0;e=removeCustomAssigns(e=e.replace(COMMENTS,\"\")).replace(TRAILING_LINES,\"\");for(var r=[];t<e.length;)t=compileVar(e,r,t);return r}function resolveValues(e){var t={};e.forEach(function(e){e.declarations.forEach(function(e){t[e.prop]=e.value})});for(var r={},n=Object.entries(t),s=function(e){var t=!1;if(n.forEach(function(e){var n=e[0],s=executeTemplate(e[1],r);s!==r[n]&&(r[n]=s,t=!0)}),!t)return\"break\"},a=0;a<10;a++){if(\"break\"===s())break}return r}function getSelectors(e,t){if(void 0===t&&(t=0),!e.rules)return[];var r=[];return e.rules.filter(function(e){return e.type===types.STYLE_RULE}).forEach(function(e){var n=getDeclarations(e.cssText);n.length>0&&e.parsedSelector.split(\",\").forEach(function(e){e=e.trim(),r.push({selector:e,declarations:n,specificity:computeSpecificity(e),nu:t})}),t++}),r}function computeSpecificity(e){return 1}var IMPORTANT=\"!important\",FIND_DECLARATIONS=/(?:^|[;\\s{]\\s*)(--[\\w-]*?)\\s*:\\s*(?:((?:'(?:\\\\'|.)*?'|\"(?:\\\\\"|.)*?\"|\\([^)]*?\\)|[^};{])+)|\\{([^}]*)\\}(?:(?=[;\\s}])|$))/gm;function getDeclarations(e){for(var t,r=[];t=FIND_DECLARATIONS.exec(e.trim());){var n=normalizeValue(t[2]),s=n.value,a=n.important;r.push({prop:t[1].trim(),value:compileTemplate(s),important:a})}return r}function normalizeValue(e){var t=(e=e.replace(/\\s+/gim,\" \").trim()).endsWith(IMPORTANT);return t&&(e=e.substr(0,e.length-IMPORTANT.length).trim()),{value:e,important:t}}function getActiveSelectors(e,t,r){return sortSelectors(getSelectorsForScopes(r.concat(getScopesForElement(t,e))).filter(function(t){return matches(e,t.selector)}))}function getScopesForElement(e,t){for(var r=[];t;){var n=e.get(t);n&&r.push(n),t=t.parentElement}return r}function getSelectorsForScopes(e){var t=[];return e.forEach(function(e){t.push.apply(t,e.selectors)}),t}function sortSelectors(e){return e.sort(function(e,t){return e.specificity===t.specificity?e.nu-t.nu:e.specificity-t.specificity}),e}function matches(e,t){return e.matches(t)}function parseCSS(e){var t=parse(e),r=compileTemplate(e);return{original:e,template:r,selectors:getSelectors(t),isDynamic:r.length>1}}function addGlobalStyle(e,t){var r=parseCSS(t.innerHTML);r.styleEl=t,e.push(r)}function updateGlobalScopes(e){var t=resolveValues(getSelectorsForScopes(e));e.forEach(function(e){e.isDynamic&&(e.styleEl.innerHTML=executeTemplate(e.template,t))})}function reScope(e,t){var r=e.template.map(function(r){return\"string\"==typeof r?replaceScope(r,e.cssScopeId,t):r}),n=e.selectors.map(function(r){return Object.assign({},r,{selector:replaceScope(r.selector,e.cssScopeId,t)})});return Object.assign({},e,{template:r,selectors:n,cssScopeId:t})}function replaceScope(e,t,r){return e=replaceAll(e,\"\\\\.\"+t,\".\"+r)}function replaceAll(e,t,r){return e.replace(new RegExp(t,\"g\"),r)}function loadDocument(e,t){return loadDocumentLinks(e,t).then(function(){loadDocumentStyles(e,t)})}function loadDocumentLinks(e,t){for(var r=[],n=e.querySelectorAll('link[rel=\"stylesheet\"][href]'),s=0;s<n.length;s++)r.push(addGlobalLink(e,t,n[s]));return Promise.all(r)}function loadDocumentStyles(e,t){for(var r=e.querySelectorAll(\"style\"),n=0;n<r.length;n++)addGlobalStyle(t,r[n])}function addGlobalLink(e,t,r){var n=r.href;return fetch(n).then(function(e){return e.text()}).then(function(s){if(hasCssVariables(s)&&r.parentNode){hasRelativeUrls(s)&&(s=fixRelativeUrls(s,n));var a=e.createElement(\"style\");a.innerHTML=s,addGlobalStyle(t,a),r.parentNode.insertBefore(a,r),r.remove()}}).catch(function(e){console.error(e)})}var CSS_VARIABLE_REGEXP=/[\\s;{]--[-a-zA-Z0-9]+\\s*:/m;function hasCssVariables(e){return e.indexOf(\"var(\")>-1||CSS_VARIABLE_REGEXP.test(e)}var CSS_URL_REGEXP=/url[\\s]*\\([\\s]*['\"]?(?![http|\\/])([^\\'\\\"\\)]*)[\\s]*['\"]?\\)[\\s]*/gim;function hasRelativeUrls(e){return CSS_URL_REGEXP.lastIndex=0,CSS_URL_REGEXP.test(e)}function fixRelativeUrls(e,t){var r=t.replace(/[^\\/]*$/,\"\");return e.replace(CSS_URL_REGEXP,function(e,t){var n=r+t;return e.replace(t,n)})}var CustomStyle=function(){function e(e,t){this.win=e,this.doc=t,this.count=0,this.hostStyleMap=new WeakMap,this.hostScopeMap=new WeakMap,this.globalScopes=[],this.scopesMap=new Map}return e.prototype.initShim=function(){var e=this;return new Promise(function(t){e.win.requestAnimationFrame(function(){loadDocument(e.doc,e.globalScopes).then(function(){return t()})})})},e.prototype.addLink=function(e){var t=this;return addGlobalLink(this.doc,this.globalScopes,e).then(function(){t.updateGlobal()})},e.prototype.addGlobalStyle=function(e){addGlobalStyle(this.globalScopes,e),this.updateGlobal()},e.prototype.createHostStyle=function(e,t,r){if(this.hostScopeMap.has(e))return null;var n=e[\"s-sc\"],s=this.registerHostTemplate(r,t,n),a=s.isDynamic&&s.cssScopeId;if(!(a||!s.styleEl))return null;var o=this.doc.createElement(\"style\");if(a){var i=s.cssScopeId+\"-\"+this.count;e[\"s-sc\"]=i,this.hostStyleMap.set(e,o),this.hostScopeMap.set(e,reScope(s,i)),this.count++}else s.styleEl=o,s.isDynamic||(o.innerHTML=executeTemplate(s.template,{})),this.globalScopes.push(s),this.updateGlobal(),this.hostScopeMap.set(e,s);return o},e.prototype.removeHost=function(e){var t=this.hostStyleMap.get(e);t&&t.remove(),this.hostStyleMap.delete(e),this.hostScopeMap.delete(e)},e.prototype.updateHost=function(e){var t=this.hostScopeMap.get(e);if(t&&t.isDynamic&&t.cssScopeId){var r=this.hostStyleMap.get(e);if(r){var n=resolveValues(getActiveSelectors(e,this.hostScopeMap,this.globalScopes));r.innerHTML=executeTemplate(t.template,n)}}},e.prototype.updateGlobal=function(){updateGlobalScopes(this.globalScopes)},e.prototype.registerHostTemplate=function(e,t,r){var n=this.scopesMap.get(t);return n||((n=parseCSS(e)).cssScopeId=r,this.scopesMap.set(t,n)),n},e}();window.customStyleShim=new CustomStyle(window,document);}"
  },
  {
    "path": "content/js/stencil/esm/es5/polyfills/dom.js",
    "content": "export function applyPolyfill(window, document) {/*! document-register-element, 1.7.0\nhttps://github.com/WebReflection/document-register-element\n(C) Andrea Giammarchi - @WebReflection - Mit Style License */\nif (!window['s-ce1']) {\nwindow['s-ce1'] = true;\n(function(e,t){\"use strict\";function Ht(){var e=wt.splice(0,wt.length);Et=0;while(e.length)e.shift().call(null,e.shift())}function Bt(e,t){for(var n=0,r=e.length;n<r;n++)Jt(e[n],t)}function jt(e){for(var t=0,n=e.length,r;t<n;t++)r=e[t],Pt(r,A[It(r)])}function Ft(e){return function(t){ut(t)&&(Jt(t,e),O.length&&Bt(t.querySelectorAll(O),e))}}function It(e){var t=ht.call(e,\"is\"),n=e.nodeName.toUpperCase(),r=_.call(L,t?N+t.toUpperCase():T+n);return t&&-1<r&&!qt(n,t)?-1:r}function qt(e,t){return-1<O.indexOf(e+'[is=\"'+t+'\"]')}function Rt(e){var t=e.currentTarget,n=e.attrChange,r=e.attrName,i=e.target,s=e[y]||2,o=e[w]||3;kt&&(!i||i===t)&&t[h]&&r!==\"style\"&&(e.prevValue!==e.newValue||e.newValue===\"\"&&(n===s||n===o))&&t[h](r,n===s?null:e.prevValue,n===o?null:e.newValue)}function Ut(e){var t=Ft(e);return function(e){wt.push(t,e.target),Et&&clearTimeout(Et),Et=setTimeout(Ht,1)}}function zt(e){Ct&&(Ct=!1,e.currentTarget.removeEventListener(S,zt)),O.length&&Bt((e.target||n).querySelectorAll(O),e.detail===l?l:a),st&&Vt()}function Wt(e,t){var n=this;vt.call(n,e,t),Lt.call(n,{target:n})}function Xt(e,t){nt(e,t),Mt?Mt.observe(e,yt):(Nt&&(e.setAttribute=Wt,e[o]=Ot(e),e[u](x,Lt)),e[u](E,Rt)),e[m]&&kt&&(e.created=!0,e[m](),e.created=!1)}function Vt(){for(var e,t=0,n=at.length;t<n;t++)e=at[t],M.contains(e)||(n--,at.splice(t--,1),Jt(e,l))}function $t(e){throw new Error(\"A \"+e+\" type is already registered\")}function Jt(e,t){var n,r=It(e),i;-1<r&&(Dt(e,A[r]),r=0,t===a&&!e[a]?(e[l]=!1,e[a]=!0,i=\"connected\",r=1,st&&_.call(at,e)<0&&at.push(e)):t===l&&!e[l]&&(e[a]=!1,e[l]=!0,i=\"disconnected\",r=1),r&&(n=e[t+f]||e[i+f])&&n.call(e))}function Kt(){}function Qt(e,t,r){var i=r&&r[c]||\"\",o=t.prototype,u=tt(o),a=t.observedAttributes||j,f={prototype:u};ot(u,m,{value:function(){if(Q)Q=!1;else if(!this[W]){this[W]=!0,new t(this),o[m]&&o[m].call(this);var e=G[Z.get(t)];(!V||e.create.length>1)&&Zt(this)}}}),ot(u,h,{value:function(e){-1<_.call(a,e)&&o[h].apply(this,arguments)}}),o[d]&&ot(u,p,{value:o[d]}),o[v]&&ot(u,g,{value:o[v]}),i&&(f[c]=i),e=e.toUpperCase(),G[e]={constructor:t,create:i?[i,et(e)]:[e]},Z.set(t,e),n[s](e.toLowerCase(),f),en(e),Y[e].r()}function Gt(e){var t=G[e.toUpperCase()];return t&&t.constructor}function Yt(e){return typeof e==\"string\"?e:e&&e.is||\"\"}function Zt(e){var t=e[h],n=t?e.attributes:j,r=n.length,i;while(r--)i=n[r],t.call(e,i.name||i.nodeName,null,i.value||i.nodeValue)}function en(e){return e=e.toUpperCase(),e in Y||(Y[e]={},Y[e].p=new K(function(t){Y[e].r=t})),Y[e].p}function tn(){X&&delete e.customElements,B(e,\"customElements\",{configurable:!0,value:new Kt}),B(e,\"CustomElementRegistry\",{configurable:!0,value:Kt});for(var t=function(t){var r=e[t];if(r){e[t]=function(t){var i,s;return t||(t=this),t[W]||(Q=!0,i=G[Z.get(t.constructor)],s=V&&i.create.length===1,t=s?Reflect.construct(r,j,i.constructor):n.createElement.apply(n,i.create),t[W]=!0,Q=!1,s||Zt(t)),t},e[t].prototype=r.prototype;try{r.prototype.constructor=e[t]}catch(i){z=!0,B(r,W,{value:e[t]})}}},r=i.get(/^HTML[A-Z]*[a-z]/),o=r.length;o--;t(r[o]));n.createElement=function(e,t){var n=Yt(t);return n?gt.call(this,e,et(n)):gt.call(this,e)},St||(Tt=!0,n[s](\"\"))}var n=e.document,r=e.Object,i=function(e){var t=/^[A-Z]+[a-z]/,n=function(e){var t=[],n;for(n in s)e.test(n)&&t.push(n);return t},i=function(e,t){t=t.toLowerCase(),t in s||(s[e]=(s[e]||[]).concat(t),s[t]=s[t.toUpperCase()]=e)},s=(r.create||r)(null),o={},u,a,f,l;for(a in e)for(l in e[a]){f=e[a][l],s[l]=f;for(u=0;u<f.length;u++)s[f[u].toLowerCase()]=s[f[u].toUpperCase()]=l}return o.get=function(r){return typeof r==\"string\"?s[r]||(t.test(r)?[]:\"\"):n(r)},o.set=function(n,r){return t.test(n)?i(n,r):i(r,n),o},o}({collections:{HTMLAllCollection:[\"all\"],HTMLCollection:[\"forms\"],HTMLFormControlsCollection:[\"elements\"],HTMLOptionsCollection:[\"options\"]},elements:{Element:[\"element\"],HTMLAnchorElement:[\"a\"],HTMLAppletElement:[\"applet\"],HTMLAreaElement:[\"area\"],HTMLAttachmentElement:[\"attachment\"],HTMLAudioElement:[\"audio\"],HTMLBRElement:[\"br\"],HTMLBaseElement:[\"base\"],HTMLBodyElement:[\"body\"],HTMLButtonElement:[\"button\"],HTMLCanvasElement:[\"canvas\"],HTMLContentElement:[\"content\"],HTMLDListElement:[\"dl\"],HTMLDataElement:[\"data\"],HTMLDataListElement:[\"datalist\"],HTMLDetailsElement:[\"details\"],HTMLDialogElement:[\"dialog\"],HTMLDirectoryElement:[\"dir\"],HTMLDivElement:[\"div\"],HTMLDocument:[\"document\"],HTMLElement:[\"element\",\"abbr\",\"address\",\"article\",\"aside\",\"b\",\"bdi\",\"bdo\",\"cite\",\"code\",\"command\",\"dd\",\"dfn\",\"dt\",\"em\",\"figcaption\",\"figure\",\"footer\",\"header\",\"i\",\"kbd\",\"mark\",\"nav\",\"noscript\",\"rp\",\"rt\",\"ruby\",\"s\",\"samp\",\"section\",\"small\",\"strong\",\"sub\",\"summary\",\"sup\",\"u\",\"var\",\"wbr\"],HTMLEmbedElement:[\"embed\"],HTMLFieldSetElement:[\"fieldset\"],HTMLFontElement:[\"font\"],HTMLFormElement:[\"form\"],HTMLFrameElement:[\"frame\"],HTMLFrameSetElement:[\"frameset\"],HTMLHRElement:[\"hr\"],HTMLHeadElement:[\"head\"],HTMLHeadingElement:[\"h1\",\"h2\",\"h3\",\"h4\",\"h5\",\"h6\"],HTMLHtmlElement:[\"html\"],HTMLIFrameElement:[\"iframe\"],HTMLImageElement:[\"img\"],HTMLInputElement:[\"input\"],HTMLKeygenElement:[\"keygen\"],HTMLLIElement:[\"li\"],HTMLLabelElement:[\"label\"],HTMLLegendElement:[\"legend\"],HTMLLinkElement:[\"link\"],HTMLMapElement:[\"map\"],HTMLMarqueeElement:[\"marquee\"],HTMLMediaElement:[\"media\"],HTMLMenuElement:[\"menu\"],HTMLMenuItemElement:[\"menuitem\"],HTMLMetaElement:[\"meta\"],HTMLMeterElement:[\"meter\"],HTMLModElement:[\"del\",\"ins\"],HTMLOListElement:[\"ol\"],HTMLObjectElement:[\"object\"],HTMLOptGroupElement:[\"optgroup\"],HTMLOptionElement:[\"option\"],HTMLOutputElement:[\"output\"],HTMLParagraphElement:[\"p\"],HTMLParamElement:[\"param\"],HTMLPictureElement:[\"picture\"],HTMLPreElement:[\"pre\"],HTMLProgressElement:[\"progress\"],HTMLQuoteElement:[\"blockquote\",\"q\",\"quote\"],HTMLScriptElement:[\"script\"],HTMLSelectElement:[\"select\"],HTMLShadowElement:[\"shadow\"],HTMLSlotElement:[\"slot\"],HTMLSourceElement:[\"source\"],HTMLSpanElement:[\"span\"],HTMLStyleElement:[\"style\"],HTMLTableCaptionElement:[\"caption\"],HTMLTableCellElement:[\"td\",\"th\"],HTMLTableColElement:[\"col\",\"colgroup\"],HTMLTableElement:[\"table\"],HTMLTableRowElement:[\"tr\"],HTMLTableSectionElement:[\"thead\",\"tbody\",\"tfoot\"],HTMLTemplateElement:[\"template\"],HTMLTextAreaElement:[\"textarea\"],HTMLTimeElement:[\"time\"],HTMLTitleElement:[\"title\"],HTMLTrackElement:[\"track\"],HTMLUListElement:[\"ul\"],HTMLUnknownElement:[\"unknown\",\"vhgroupv\",\"vkeygen\"],HTMLVideoElement:[\"video\"]},nodes:{Attr:[\"node\"],Audio:[\"audio\"],CDATASection:[\"node\"],CharacterData:[\"node\"],Comment:[\"#comment\"],Document:[\"#document\"],DocumentFragment:[\"#document-fragment\"],DocumentType:[\"node\"],HTMLDocument:[\"#document\"],Image:[\"img\"],Option:[\"option\"],ProcessingInstruction:[\"node\"],ShadowRoot:[\"#shadow-root\"],Text:[\"#text\"],XMLDocument:[\"xml\"]}});typeof t!=\"object\"&&(t={type:t||\"auto\"});var s=\"registerElement\",o=\"__\"+s+(e.Math.random()*1e5>>0),u=\"addEventListener\",a=\"attached\",f=\"Callback\",l=\"detached\",c=\"extends\",h=\"attributeChanged\"+f,p=a+f,d=\"connected\"+f,v=\"disconnected\"+f,m=\"created\"+f,g=l+f,y=\"ADDITION\",b=\"MODIFICATION\",w=\"REMOVAL\",E=\"DOMAttrModified\",S=\"DOMContentLoaded\",x=\"DOMSubtreeModified\",T=\"<\",N=\"=\",C=/^[A-Z][A-Z0-9]*(?:-[A-Z0-9]+)+$/,k=[\"ANNOTATION-XML\",\"COLOR-PROFILE\",\"FONT-FACE\",\"FONT-FACE-SRC\",\"FONT-FACE-URI\",\"FONT-FACE-FORMAT\",\"FONT-FACE-NAME\",\"MISSING-GLYPH\"],L=[],A=[],O=\"\",M=n.documentElement,_=L.indexOf||function(e){for(var t=this.length;t--&&this[t]!==e;);return t},D=r.prototype,P=D.hasOwnProperty,H=D.isPrototypeOf,B=r.defineProperty,j=[],F=r.getOwnPropertyDescriptor,I=r.getOwnPropertyNames,q=r.getPrototypeOf,R=r.setPrototypeOf,U=!!r.__proto__,z=!1,W=\"__dreCEv1\",X=e.customElements,V=!/^force/.test(t.type)&&!!(X&&X.define&&X.get&&X.whenDefined),$=r.create||r,J=e.Map||function(){var t=[],n=[],r;return{get:function(e){return n[_.call(t,e)]},set:function(e,i){r=_.call(t,e),r<0?n[t.push(e)-1]=i:n[r]=i}}},K=e.Promise||function(e){function i(e){n=!0;while(t.length)t.shift()(e)}var t=[],n=!1,r={\"catch\":function(){return r},then:function(e){return t.push(e),n&&setTimeout(i,1),r}};return e(i),r},Q=!1,G=$(null),Y=$(null),Z=new J,et=function(e){return e.toLowerCase()},tt=r.create||function sn(e){return e?(sn.prototype=e,new sn):this},nt=R||(U?function(e,t){return e.__proto__=t,e}:I&&F?function(){function e(e,t){for(var n,r=I(t),i=0,s=r.length;i<s;i++)n=r[i],P.call(e,n)||B(e,n,F(t,n))}return function(t,n){do e(t,n);while((n=q(n))&&!H.call(n,t));return t}}():function(e,t){for(var n in t)e[n]=t[n];return e}),rt=e.MutationObserver||e.WebKitMutationObserver,it=(e.HTMLElement||e.Element||e.Node).prototype,st=!H.call(it,M),ot=st?function(e,t,n){return e[t]=n.value,e}:B,ut=st?function(e){return e.nodeType===1}:function(e){return H.call(it,e)},at=st&&[],ft=it.attachShadow,lt=it.cloneNode,ct=it.dispatchEvent,ht=it.getAttribute,pt=it.hasAttribute,dt=it.removeAttribute,vt=it.setAttribute,mt=n.createElement,gt=mt,yt=rt&&{attributes:!0,characterData:!0,attributeOldValue:!0},bt=rt||function(e){Nt=!1,M.removeEventListener(E,bt)},wt,Et=0,St=s in n&&!/^force-all/.test(t.type),xt=!0,Tt=!1,Nt=!0,Ct=!0,kt=!0,Lt,At,Ot,Mt,_t,Dt,Pt;St||(R||U?(Dt=function(e,t){H.call(t,e)||Xt(e,t)},Pt=Xt):(Dt=function(e,t){e[o]||(e[o]=r(!0),Xt(e,t))},Pt=Dt),st?(Nt=!1,function(){var e=F(it,u),t=e.value,n=function(e){var t=new CustomEvent(E,{bubbles:!0});t.attrName=e,t.prevValue=ht.call(this,e),t.newValue=null,t[w]=t.attrChange=2,dt.call(this,e),ct.call(this,t)},r=function(e,t){var n=pt.call(this,e),r=n&&ht.call(this,e),i=new CustomEvent(E,{bubbles:!0});vt.call(this,e,t),i.attrName=e,i.prevValue=n?r:null,i.newValue=t,n?i[b]=i.attrChange=1:i[y]=i.attrChange=0,ct.call(this,i)},i=function(e){var t=e.currentTarget,n=t[o],r=e.propertyName,i;n.hasOwnProperty(r)&&(n=n[r],i=new CustomEvent(E,{bubbles:!0}),i.attrName=n.name,i.prevValue=n.value||null,i.newValue=n.value=t[r]||null,i.prevValue==null?i[y]=i.attrChange=0:i[b]=i.attrChange=1,ct.call(t,i))};e.value=function(e,s,u){e===E&&this[h]&&this.setAttribute!==r&&(this[o]={className:{name:\"class\",value:this.className}},this.setAttribute=r,this.removeAttribute=n,t.call(this,\"propertychange\",i)),t.call(this,e,s,u)},B(it,u,e)}()):rt||(M[u](E,bt),M.setAttribute(o,1),M.removeAttribute(o),Nt&&(Lt=function(e){var t=this,n,r,i;if(t===e.target){n=t[o],t[o]=r=Ot(t);for(i in r){if(!(i in n))return At(0,t,i,n[i],r[i],y);if(r[i]!==n[i])return At(1,t,i,n[i],r[i],b)}for(i in n)if(!(i in r))return At(2,t,i,n[i],r[i],w)}},At=function(e,t,n,r,i,s){var o={attrChange:e,currentTarget:t,attrName:n,prevValue:r,newValue:i};o[s]=e,Rt(o)},Ot=function(e){for(var t,n,r={},i=e.attributes,s=0,o=i.length;s<o;s++)t=i[s],n=t.name,n!==\"setAttribute\"&&(r[n]=t.value);return r})),n[s]=function(t,r){p=t.toUpperCase(),xt&&(xt=!1,rt?(Mt=function(e,t){function n(e,t){for(var n=0,r=e.length;n<r;t(e[n++]));}return new rt(function(r){for(var i,s,o,u=0,a=r.length;u<a;u++)i=r[u],i.type===\"childList\"?(n(i.addedNodes,e),n(i.removedNodes,t)):(s=i.target,kt&&s[h]&&i.attributeName!==\"style\"&&(o=ht.call(s,i.attributeName),o!==i.oldValue&&s[h](i.attributeName,i.oldValue,o)))})}(Ft(a),Ft(l)),_t=function(e){return Mt.observe(e,{childList:!0,subtree:!0}),e},_t(n),ft&&(it.attachShadow=function(){return _t(ft.apply(this,arguments))})):(wt=[],n[u](\"DOMNodeInserted\",Ut(a)),n[u](\"DOMNodeRemoved\",Ut(l))),n[u](S,zt),n[u](\"readystatechange\",zt),it.cloneNode=function(e){var t=lt.call(this,!!e),n=It(t);return-1<n&&Pt(t,A[n]),e&&O.length&&jt(t.querySelectorAll(O)),t});if(Tt)return Tt=!1;-2<_.call(L,N+p)+_.call(L,T+p)&&$t(t);if(!C.test(p)||-1<_.call(k,p))throw new Error(\"The type \"+t+\" is invalid\");var i=function(){return o?n.createElement(f,p):n.createElement(f)},s=r||D,o=P.call(s,c),f=o?r[c].toUpperCase():p,p,d;return o&&-1<_.call(L,T+f)&&$t(f),d=L.push((o?N:T)+p)-1,O=O.concat(O.length?\",\":\"\",o?f+'[is=\"'+t.toLowerCase()+'\"]':f),i.prototype=A[d]=P.call(s,\"prototype\")?s.prototype:tt(it),O.length&&Bt(n.querySelectorAll(O),a),i},n.createElement=gt=function(e,t){var r=Yt(t),i=r?mt.call(n,e,et(r)):mt.call(n,e),s=\"\"+e,o=_.call(L,(r?N:T)+(r||s).toUpperCase()),u=-1<o;return r&&(i.setAttribute(\"is\",r=r.toLowerCase()),u&&(u=qt(s.toUpperCase(),r))),kt=!n.createElement.innerHTMLHelper,u&&Pt(i,A[o]),i}),Kt.prototype={constructor:Kt,define:V?function(e,t,n){if(n)Qt(e,t,n);else{var r=e.toUpperCase();G[r]={constructor:t,create:[r]},Z.set(t,r),X.define(e,t)}}:Qt,get:V?function(e){return X.get(e)||Gt(e)}:Gt,whenDefined:V?function(e){return K.race([X.whenDefined(e),en(e)])}:en};if(!X||/^force/.test(t.type))tn();else if(!t.noBuiltIn)try{(function(t,r,i){r[c]=\"a\",t.prototype=tt(HTMLAnchorElement.prototype),t.prototype.constructor=t,e.customElements.define(i,t,r);if(ht.call(n.createElement(\"a\",{is:i}),\"is\")!==i||V&&ht.call(new t,\"is\")!==i)throw r})(function on(){return Reflect.construct(HTMLAnchorElement,[],on)},{},\"document-register-element-a\")}catch(nn){tn()}if(!t.noBuiltIn)try{mt.call(n,\"a\",\"a\")}catch(rn){et=function(e){return{is:e.toLowerCase()}}}})(window);\n}\n/*!\nElement.closest and Element.matches\nhttps://github.com/jonathantneal/closest\nCreative Commons Zero v1.0 Universal\n*/\n(function(a){\"function\"!==typeof a.matches&&(a.matches=a.msMatchesSelector||a.mozMatchesSelector||a.webkitMatchesSelector||function(a){a=(this.document||this.ownerDocument).querySelectorAll(a);for(var b=0;a[b]&&a[b]!==this;)++b;return!!a[b]});\"function\"!==typeof a.closest&&(a.closest=function(a){for(var b=this;b&&1===b.nodeType;){if(b.matches(a))return b;b=b.parentNode}return null})})(window.Element.prototype);\n/*!\nElement.getRootNode()\n*/\n(function(c){function d(a){a=b(a);return 11===a.nodeType?d(a.host):a}function b(a){return a.parentNode?b(a.parentNode):a}\"function\"!==typeof c.getRootNode&&(c.getRootNode=function(a){return a&&a.composed?d(this):b(this)})})(Element.prototype);\n/*!\nElement.remove()\n*/\n(function(b){b.forEach(function(a){a.hasOwnProperty(\"remove\")||Object.defineProperty(a,\"remove\",{configurable:!0,enumerable:!0,writable:!0,value:function(){null!==this.parentNode&&this.parentNode.removeChild(this)}})})})([Element.prototype,CharacterData.prototype,DocumentType.prototype]);\n}"
  },
  {
    "path": "content/js/stencil/esm/es5/polyfills/fetch.js",
    "content": "export function applyPolyfill(window, document) {/*!\nwhatwg-fetch, 2.0.3\nhttps://github.com/github/fetch\nCopyright (c) 2014-2016 GitHub, Inc. - MIT License\n*/\n(function(e){function l(a){\"string\"!==typeof a&&(a=String(a));if(/[^a-z0-9\\-#$%&'*+.\\^_`|~]/i.test(a))throw new TypeError(\"Invalid character in header field name\");return a.toLowerCase()}function q(a){\"string\"!==typeof a&&(a=String(a));return a}function n(a){var b={next:function(){var b=a.shift();return{done:void 0===b,value:b}}};g.iterable&&(b[Symbol.iterator]=function(){return b});return b}function d(a){this.map={};a instanceof d?a.forEach(function(a,c){this.append(c,a)},this):Array.isArray(a)?\na.forEach(function(a){this.append(a[0],a[1])},this):a&&Object.getOwnPropertyNames(a).forEach(function(b){this.append(b,a[b])},this)}function p(a){if(a.bodyUsed)return Promise.reject(new TypeError(\"Already read\"));a.bodyUsed=!0}function r(a){return new Promise(function(b,c){a.onload=function(){b(a.result)};a.onerror=function(){c(a.error)}})}function w(a){var b=new FileReader,c=r(b);b.readAsArrayBuffer(a);return c}function x(a){a=new Uint8Array(a);for(var b=Array(a.length),c=0;c<a.length;c++)b[c]=String.fromCharCode(a[c]);\nreturn b.join(\"\")}function t(a){if(a.slice)return a.slice(0);var b=new Uint8Array(a.byteLength);b.set(new Uint8Array(a));return b.buffer}function u(){this.bodyUsed=!1;this._initBody=function(a){if(this._bodyInit=a)if(\"string\"===typeof a)this._bodyText=a;else if(g.blob&&Blob.prototype.isPrototypeOf(a))this._bodyBlob=a;else if(g.formData&&FormData.prototype.isPrototypeOf(a))this._bodyFormData=a;else if(g.searchParams&&URLSearchParams.prototype.isPrototypeOf(a))this._bodyText=a.toString();else if(g.arrayBuffer&&\ng.blob&&y(a))this._bodyArrayBuffer=t(a.buffer),this._bodyInit=new Blob([this._bodyArrayBuffer]);else if(g.arrayBuffer&&(ArrayBuffer.prototype.isPrototypeOf(a)||z(a)))this._bodyArrayBuffer=t(a);else throw Error(\"unsupported BodyInit type\");else this._bodyText=\"\";this.headers.get(\"content-type\")||(\"string\"===typeof a?this.headers.set(\"content-type\",\"text/plain;charset=UTF-8\"):this._bodyBlob&&this._bodyBlob.type?this.headers.set(\"content-type\",this._bodyBlob.type):g.searchParams&&URLSearchParams.prototype.isPrototypeOf(a)&&\nthis.headers.set(\"content-type\",\"application/x-www-form-urlencoded;charset=UTF-8\"))};g.blob&&(this.blob=function(){var a=p(this);if(a)return a;if(this._bodyBlob)return Promise.resolve(this._bodyBlob);if(this._bodyArrayBuffer)return Promise.resolve(new Blob([this._bodyArrayBuffer]));if(this._bodyFormData)throw Error(\"could not read FormData body as blob\");return Promise.resolve(new Blob([this._bodyText]))},this.arrayBuffer=function(){return this._bodyArrayBuffer?p(this)||Promise.resolve(this._bodyArrayBuffer):\nthis.blob().then(w)});this.text=function(){var a=p(this);if(a)return a;if(this._bodyBlob){a=this._bodyBlob;var b=new FileReader,c=r(b);b.readAsText(a);return c}if(this._bodyArrayBuffer)return Promise.resolve(x(this._bodyArrayBuffer));if(this._bodyFormData)throw Error(\"could not read FormData body as text\");return Promise.resolve(this._bodyText)};g.formData&&(this.formData=function(){return this.text().then(A)});this.json=function(){return this.text().then(JSON.parse)};return this}function k(a,b){b=\nb||{};var c=b.body;if(a instanceof k){if(a.bodyUsed)throw new TypeError(\"Already read\");this.url=a.url;this.credentials=a.credentials;b.headers||(this.headers=new d(a.headers));this.method=a.method;this.mode=a.mode;c||null==a._bodyInit||(c=a._bodyInit,a.bodyUsed=!0)}else this.url=String(a);this.credentials=b.credentials||this.credentials||\"omit\";if(b.headers||!this.headers)this.headers=new d(b.headers);var v=b.method||this.method||\"GET\",g=v.toUpperCase();this.method=-1<B.indexOf(g)?g:v;this.mode=\nb.mode||this.mode||null;this.referrer=null;if((\"GET\"===this.method||\"HEAD\"===this.method)&&c)throw new TypeError(\"Body not allowed for GET or HEAD requests\");this._initBody(c)}function A(a){var b=new FormData;a.trim().split(\"&\").forEach(function(a){if(a){var c=a.split(\"=\");a=c.shift().replace(/\\+/g,\" \");c=c.join(\"=\").replace(/\\+/g,\" \");b.append(decodeURIComponent(a),decodeURIComponent(c))}});return b}function C(a){var b=new d;a.replace(/\\r?\\n[\\t ]+/g,\" \").split(/\\r?\\n/).forEach(function(a){var c=\na.split(\":\");if(a=c.shift().trim())c=c.join(\":\").trim(),b.append(a,c)});return b}function h(a,b){b||(b={});this.type=\"default\";this.status=void 0===b.status?200:b.status;this.ok=200<=this.status&&300>this.status;this.statusText=\"statusText\"in b?b.statusText:\"OK\";this.headers=new d(b.headers);this.url=b.url||\"\";this._initBody(a)}if(!e.fetch){var D=\"Symbol\"in e&&\"iterator\"in Symbol,m;if(m=\"FileReader\"in e&&\"Blob\"in e)try{new Blob,m=!0}catch(a){m=!1}var g={searchParams:\"URLSearchParams\"in e,iterable:D,\nblob:m,formData:\"FormData\"in e,arrayBuffer:\"ArrayBuffer\"in e};if(g.arrayBuffer){var E=\"[object Int8Array];[object Uint8Array];[object Uint8ClampedArray];[object Int16Array];[object Uint16Array];[object Int32Array];[object Uint32Array];[object Float32Array];[object Float64Array]\".split(\";\");var y=function(a){return a&&DataView.prototype.isPrototypeOf(a)};var z=ArrayBuffer.isView||function(a){return a&&-1<E.indexOf(Object.prototype.toString.call(a))}}d.prototype.append=function(a,b){a=l(a);b=q(b);var c=\nthis.map[a];this.map[a]=c?c+\",\"+b:b};d.prototype[\"delete\"]=function(a){delete this.map[l(a)]};d.prototype.get=function(a){a=l(a);return this.has(a)?this.map[a]:null};d.prototype.has=function(a){return this.map.hasOwnProperty(l(a))};d.prototype.set=function(a,b){this.map[l(a)]=q(b)};d.prototype.forEach=function(a,b){for(var c in this.map)this.map.hasOwnProperty(c)&&a.call(b,this.map[c],c,this)};d.prototype.keys=function(){var a=[];this.forEach(function(b,c){a.push(c)});return n(a)};d.prototype.values=\nfunction(){var a=[];this.forEach(function(b){a.push(b)});return n(a)};d.prototype.entries=function(){var a=[];this.forEach(function(b,c){a.push([c,b])});return n(a)};g.iterable&&(d.prototype[Symbol.iterator]=d.prototype.entries);var B=\"DELETE GET HEAD OPTIONS POST PUT\".split(\" \");k.prototype.clone=function(){return new k(this,{body:this._bodyInit})};u.call(k.prototype);u.call(h.prototype);h.prototype.clone=function(){return new h(this._bodyInit,{status:this.status,statusText:this.statusText,headers:new d(this.headers),\nurl:this.url})};h.error=function(){var a=new h(null,{status:0,statusText:\"\"});a.type=\"error\";return a};var F=[301,302,303,307,308];h.redirect=function(a,b){if(-1===F.indexOf(b))throw new RangeError(\"Invalid status code\");return new h(null,{status:b,headers:{location:a}})};e.Headers=d;e.Request=k;e.Response=h;e.fetch=function(a,b){return new Promise(function(c,d){var e=new k(a,b),f=new XMLHttpRequest;f.onload=function(){var a={status:f.status,statusText:f.statusText,headers:C(f.getAllResponseHeaders()||\n\"\")};a.url=\"responseURL\"in f?f.responseURL:a.headers.get(\"X-Request-URL\");c(new h(\"response\"in f?f.response:f.responseText,a))};f.onerror=function(){d(new TypeError(\"Network request failed\"))};f.ontimeout=function(){d(new TypeError(\"Network request failed\"))};f.open(e.method,e.url,!0);\"include\"===e.credentials?f.withCredentials=!0:\"omit\"===e.credentials&&(f.withCredentials=!1);\"responseType\"in f&&g.blob&&(f.responseType=\"blob\");e.headers.forEach(function(a,b){f.setRequestHeader(b,a)});f.send(\"undefined\"===\ntypeof e._bodyInit?null:e._bodyInit)})};e.fetch.polyfill=!0}})(\"undefined\"!==typeof self?self:window);}"
  },
  {
    "path": "content/js/stencil/esm/es5/polyfills/map.js",
    "content": "export function applyPolyfill(window, document) {/*! https://github.com/WebReflection/es6-collections\n(C) Andrea Giammarchi - @WebReflection - Mit Style License */\n(function(e){function d(a,b){function c(a){if(!this||this.constructor!==c)return new c(a);this._keys=[];this._values=[];this._itp=[];this.objectOnly=b;a&&v.call(this,a)}b||w(a,\"size\",{get:x});a.constructor=c;c.prototype=a;return c}function v(a){this.add?a.forEach(this.add,this):a.forEach(function(a){this.set(a[0],a[1])},this)}function f(a){this.has(a)&&(this._keys.splice(c,1),this._values.splice(c,1),this._itp.forEach(function(a){c<a[0]&&a[0]--}));return-1<c}function m(a){return this.has(a)?this._values[c]:\n  void 0}function n(a,b){if(this.objectOnly&&b!==Object(b))throw new TypeError(\"Invalid value used as weak collection key\");if(b!=b||0===b)for(c=a.length;c--&&!y(a[c],b););else c=a.indexOf(b);return-1<c}function p(a){return n.call(this,this._values,a)}function q(a){return n.call(this,this._keys,a)}function r(a,b){this.has(a)?this._values[c]=b:this._values[this._keys.push(a)-1]=b;return this}function t(a){this.has(a)||this._values.push(a);return this}function h(){(this._keys||0).length=this._values.length=\n  0}function z(){return k(this._itp,this._keys)}function l(){return k(this._itp,this._values)}function A(){return k(this._itp,this._keys,this._values)}function B(){return k(this._itp,this._values,this._values)}function k(a,b,c){var g=[0],e=!1;a.push(g);return{next:function(){var d=g[0];if(!e&&d<b.length){var f=c?[b[d],c[d]]:b[d];g[0]++}else e=!0,a.splice(a.indexOf(g),1);return{done:e,value:f}}}}function x(){return this._values.length}function u(a,b){for(var c=this.entries();;){var d=c.next();if(d.done)break;\n  a.call(b,d.value[1],d.value[0],this)}}var c,w=Object.defineProperty,y=function(a,b){return a===b||a!==a&&b!==b};\"undefined\"==typeof WeakMap&&(e.WeakMap=d({\"delete\":f,clear:h,get:m,has:q,set:r},!0));\"undefined\"!=typeof Map&&\"function\"===typeof(new Map).values&&(new Map).values().next||(e.Map=d({\"delete\":f,has:q,get:m,set:r,keys:z,values:l,entries:A,forEach:u,clear:h}));\"undefined\"!=typeof Set&&\"function\"===typeof(new Set).values&&(new Set).values().next||(e.Set=d({has:p,add:t,\"delete\":f,clear:h,keys:l,\n  values:l,entries:B,forEach:u}));\"undefined\"==typeof WeakSet&&(e.WeakSet=d({\"delete\":f,add:t,clear:h,has:p},!0))})(window);}"
  },
  {
    "path": "content/js/stencil/esm/es5/polyfills/object.js",
    "content": "export function applyPolyfill(window, document) {/*!\nObject.assign\n*/\n\"function\"!=typeof Object.assign&&Object.defineProperty(Object,\"assign\",{value:function(d,f){if(null==d)throw new TypeError(\"Cannot convert undefined or null to object\");for(var e=Object(d),b=1;b<arguments.length;b++){var a=arguments[b];if(null!=a)for(var c in a)Object.prototype.hasOwnProperty.call(a,c)&&(e[c]=a[c])}return e},writable:!0,configurable:!0});\n/*!\nObject.entries\n*/\nObject.entries||(Object.entries=function(c){for(var b=Object.keys(c),a=b.length,d=Array(a);a--;)d[a]=[b[a],c[b[a]]];return d});\n/*!\nObject.values\n*/\nObject.values||(Object.values=function(n){return Object.keys(n).map(function(r){return n[r]})});\n\n/*!\nNumber\n*/\nvoid 0===Number.isFinite&&(Number.isFinite=function(a){return\"number\"===typeof a&&isFinite(a)});\nNumber.isNaN=Number.isNaN||function(a){return a!==a};\nNumber.isInteger=Number.isInteger||function(a){return\"number\"===typeof a&&isFinite(a)&&Math.floor(a)===a};\n}"
  },
  {
    "path": "content/js/stencil/esm/es5/polyfills/promise.js",
    "content": "export function applyPolyfill(window, document) {/*!\nes6-promise - a tiny implementation of Promises/A+.\nCopyright (c) 2014 Yehuda Katz, Tom Dale, Stefan Penner and contributors (Conversion to ES6 API by Jake Archibald)\nLicensed under MIT license\nSee https://raw.githubusercontent.com/stefanpenner/es6-promise/master/LICENSE\nv4.2.4+314e4831\n*/\n(window.ES6Promise=function(){function t(){var t=setTimeout;return function(){return t(r,1)}}function r(){for(var t=0;t<y;t+=2)(0,C[t])(C[t+1]),C[t]=void 0,C[t+1]=void 0;y=0}function e(t,r){var e=this,n=new this.constructor(o);void 0===n[O]&&_(n);var i=e._state;if(i){var s=arguments[i-1];g(function(){return v(i,n,s,e._result)})}else l(e,n,t,r);return n}function n(t){if(t&&\"object\"==typeof t&&t.constructor===this)return t;var r=new this(o);return u(r,t),r}function o(){}function i(t){try{return t.then}catch(t){return q.error=t,q}}function s(t,r,o){r.constructor===t.constructor&&o===e&&r.constructor.resolve===n?function(t,r){r._state===x?a(t,r._result):r._state===F?f(t,r._result):l(r,void 0,function(r){return u(t,r)},function(r){return f(t,r)})}(t,r):o===q?(f(t,q.error),q.error=null):void 0===o?a(t,r):\"function\"==typeof o?function(t,r,e){g(function(t){var n=!1,o=function(t,r,e,n){try{t.call(r,e,n)}catch(t){return t}}(e,r,function(e){n||(n=!0,r!==e?u(t,e):a(t,e))},function(r){n||(n=!0,f(t,r))},t._label);!n&&o&&(n=!0,f(t,o))},t)}(t,r,o):a(t,r)}function u(t,r){if(t===r)f(t,new TypeError(\"cannot resolve promise w/ itself\"));else{var e=typeof r;null===r||\"object\"!==e&&\"function\"!==e?a(t,r):s(t,r,i(r))}}function c(t){t._onerror&&t._onerror(t._result),h(t)}function a(t,r){t._state===P&&(t._result=r,t._state=x,0!==t._subscribers.length&&g(h,t))}function f(t,r){t._state===P&&(t._state=F,t._result=r,g(c,t))}function l(t,r,e,n){var o=t._subscribers,i=o.length;t._onerror=null,o[i]=r,o[i+x]=e,o[i+F]=n,0===i&&t._state&&g(h,t)}function h(t){var r=t._subscribers,e=t._state;if(0!==r.length){for(var n,o,i=t._result,s=0;s<r.length;s+=3)n=r[s],o=r[s+e],n?v(e,n,o,i):o(i);t._subscribers.length=0}}function v(t,r,e,n){var o=\"function\"==typeof e,i=void 0,s=void 0,c=void 0,l=void 0;if(o){try{i=e(n)}catch(t){q.error=t,i=q}if(i===q?(l=!0,s=i.error,i.error=null):c=!0,r===i)return void f(r,new TypeError(\"Cannot return same promise\"))}else i=n,c=!0;r._state===P&&(o&&c?u(r,i):l?f(r,s):t===x?a(r,i):t===F&&f(r,i))}function _(t){t[O]=U++,t._state=void 0,t._result=void 0,t._subscribers=[]}var p,d=Array.isArray?Array.isArray:function(t){return\"[object Array]\"===Object.prototype.toString.call(t)},y=0,w=void 0,m=void 0,g=function(t,e){C[y]=t,C[y+1]=e,2===(y+=2)&&(m?m(r):T())},b=(p=\"undefined\"!=typeof window?window:void 0)||{},A=b.MutationObserver||b.WebKitMutationObserver;b=\"undefined\"==typeof self;var E,S,M,j=\"undefined\"!=typeof Uint8ClampedArray&&\"undefined\"!=typeof importScripts&&\"undefined\"!=typeof MessageChannel,C=Array(1e3),T=void 0;T=A?(E=0,S=new A(r),M=document.createTextNode(\"\"),S.observe(M,{characterData:!0}),function(){M.data=E=++E%2}):j?function(){var t=new MessageChannel;return t.port1.onmessage=r,function(){return t.port2.postMessage(0)}}():void 0===p&&\"function\"==typeof require?function(){try{var e=Function(\"return this\")().require(\"vertx\");return void 0!==(w=e.runOnLoop||e.runOnContext)?function(){w(r)}:t()}catch(r){return t()}}():t();var O=Math.random().toString(36).substring(2),P=void 0,x=1,F=2,q={error:null},U=0,D=function(){function t(t,r){this._instanceConstructor=t,this.promise=new t(o),this.promise[O]||_(this.promise),d(r)?(this._remaining=this.length=r.length,this._result=Array(this.length),0===this.length?a(this.promise,this._result):(this.length=this.length||0,this._enumerate(r),0===this._remaining&&a(this.promise,this._result))):f(this.promise,Error(\"Array Methods must be provided an Array\"))}return t.prototype._enumerate=function(t){for(var r=0;this._state===P&&r<t.length;r++)this._eachEntry(t[r],r)},t.prototype._eachEntry=function(t,r){var u=this._instanceConstructor,c=u.resolve;c===n?(c=i(t))===e&&t._state!==P?this._settledAt(t._state,r,t._result):\"function\"!=typeof c?(this._remaining--,this._result[r]=t):u===K?(s(u=new u(o),t,c),this._willSettleAt(u,r)):this._willSettleAt(new u(function(r){return r(t)}),r):this._willSettleAt(c(t),r)},t.prototype._settledAt=function(t,r,e){var n=this.promise;n._state===P&&(this._remaining--,t===F?f(n,e):this._result[r]=e),0===this._remaining&&a(n,this._result)},t.prototype._willSettleAt=function(t,r){var e=this;l(t,void 0,function(t){return e._settledAt(x,r,t)},function(t){return e._settledAt(F,r,t)})},t}(),K=function(){function t(r){if(this[O]=U++,this._result=this._state=void 0,this._subscribers=[],o!==r){if(\"function\"!=typeof r)throw new TypeError(\"Must pass a resolver fn as 1st arg\");if(!(this instanceof t))throw new TypeError(\"Failed to construct 'Promise': Use the 'new' operator.\");!function(t,r){try{r(function(r){u(t,r)},function(r){f(t,r)})}catch(r){f(t,r)}}(this,r)}}return t.prototype.catch=function(t){return this.then(null,t)},t.prototype.finally=function(t){var r=this.constructor;return this.then(function(e){return r.resolve(t()).then(function(){return e})},function(e){return r.resolve(t()).then(function(){throw e})})},t}();return K.prototype.then=e,K.all=function(t){return new D(this,t).promise},K.race=function(t){var r=this;return d(t)?new r(function(e,n){for(var o=t.length,i=0;i<o;i++)r.resolve(t[i]).then(e,n)}):new r(function(t,r){return r(new TypeError(\"Must pass array to race\"))})},K.resolve=n,K.reject=function(t){var r=new this(o);return f(r,t),r},K._setScheduler=function(t){m=t},K._setAsap=function(t){g=t},K._asap=g,K.polyfill=function(){var t=void 0;if(\"undefined\"!=typeof global)t=global;else if(\"undefined\"!=typeof self)t=self;else try{t=Function(\"return this\")()}catch(t){throw Error(\"polyfill failed\")}var r=t.Promise;if(r){var e=null;try{e=Object.prototype.toString.call(r.resolve())}catch(t){}if(\"[object Promise]\"===e&&!r.cast)return}t.Promise=K},K.Promise=K,K.polyfill(),K}());}"
  },
  {
    "path": "content/js/stencil/esm/es5/polyfills/string.js",
    "content": "export function applyPolyfill(window, document) {/*!\nString.prototype.endsWith\n*/\nString.prototype.endsWith||Object.defineProperty(String.prototype,\"endsWith\",{writable:!0,configurable:!0,value:function(b,a){if(void 0===a||a>this.length)a=this.length;return this.substring(a-b.length,a)===b}});\n/*!\nString.prototype.includes\n*/\nString.prototype.includes||(String.prototype.includes=function(b,a){\"number\"!==typeof a&&(a=0);return a+b.length>this.length?!1:-1!==this.indexOf(b,a)});\n/*!\nString.prototype.startsWith\n*/\nString.prototype.startsWith||Object.defineProperty(String.prototype,\"startsWith\",{writable:!0,configurable:!0,value:function(b,a){return this.substr(!a||0>a?0:+a,b.length)===b}});}"
  },
  {
    "path": "content/js/stencil/esm/es5/polyfills/tslib.js",
    "content": "// REV: 9dd9aa322c893e5e0b3f1609b1126314ccf37bbb\n\n/*! *****************************************************************************\nCopyright (c) Microsoft Corporation. All rights reserved.\nLicensed under the Apache License, Version 2.0 (the \"License\"); you may not use\nthis file except in compliance with the License. You may obtain a copy of the\nLicense at http://www.apache.org/licenses/LICENSE-2.0\nTHIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\nKIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED\nWARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,\nMERCHANTABLITY OR NON-INFRINGEMENT.\nSee the Apache Version 2.0 License for specific language governing permissions\nand limitations under the License.\n***************************************************************************** */\n/* global Reflect, Promise */\n\nvar extendStatics = function(d, b) {\n  extendStatics = Object.setPrototypeOf ||\n      ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n      function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n  return extendStatics(d, b);\n};\n\nexport function __extends(d, b) {\n  extendStatics(d, b);\n  function __() { this.constructor = d; }\n  d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n}\n\nexport var __assign = function() {\n  __assign = Object.assign || function __assign(t) {\n      for (var s, i = 1, n = arguments.length; i < n; i++) {\n          s = arguments[i];\n          for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\n      }\n      return t;\n  }\n  return __assign.apply(this, arguments);\n}\n\nexport function __rest(s, e) {\n  var t = {};\n  for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n      t[p] = s[p];\n  if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n      for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) if (e.indexOf(p[i]) < 0)\n          t[p[i]] = s[p[i]];\n  return t;\n}\n\nexport function __decorate(decorators, target, key, desc) {\n  var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n  if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n  else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n  return c > 3 && r && Object.defineProperty(target, key, r), r;\n}\n\nexport function __param(paramIndex, decorator) {\n  return function (target, key) { decorator(target, key, paramIndex); }\n}\n\nexport function __metadata(metadataKey, metadataValue) {\n  if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\n}\n\nexport function __awaiter(thisArg, _arguments, P, generator) {\n  return new (P || (P = Promise))(function (resolve, reject) {\n      function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n      function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n      function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }\n      step((generator = generator.apply(thisArg, _arguments || [])).next());\n  });\n}\n\nexport function __generator(thisArg, body) {\n  var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\n  return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n  function verb(n) { return function (v) { return step([n, v]); }; }\n  function step(op) {\n      if (f) throw new TypeError(\"Generator is already executing.\");\n      while (_) try {\n          if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n          if (y = 0, t) op = [op[0] & 2, t.value];\n          switch (op[0]) {\n              case 0: case 1: t = op; break;\n              case 4: _.label++; return { value: op[1], done: false };\n              case 5: _.label++; y = op[1]; op = [0]; continue;\n              case 7: op = _.ops.pop(); _.trys.pop(); continue;\n              default:\n                  if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n                  if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n                  if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n                  if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n                  if (t[2]) _.ops.pop();\n                  _.trys.pop(); continue;\n          }\n          op = body.call(thisArg, _);\n      } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n      if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n  }\n}\n\nexport function __exportStar(m, exports) {\n  for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];\n}\n\nexport function __values(o) {\n  var m = typeof Symbol === \"function\" && o[Symbol.iterator], i = 0;\n  if (m) return m.call(o);\n  return {\n      next: function () {\n          if (o && i >= o.length) o = void 0;\n          return { value: o && o[i++], done: !o };\n      }\n  };\n}\n\nexport function __read(o, n) {\n  var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n  if (!m) return o;\n  var i = m.call(o), r, ar = [], e;\n  try {\n      while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\n  }\n  catch (error) { e = { error: error }; }\n  finally {\n      try {\n          if (r && !r.done && (m = i[\"return\"])) m.call(i);\n      }\n      finally { if (e) throw e.error; }\n  }\n  return ar;\n}\n\nexport function __spread() {\n  for (var ar = [], i = 0; i < arguments.length; i++)\n      ar = ar.concat(__read(arguments[i]));\n  return ar;\n}\n\nexport function __await(v) {\n  return this instanceof __await ? (this.v = v, this) : new __await(v);\n}\n\nexport function __makeTemplateObject(cooked, raw) {\n  if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\n  return cooked;\n};\n\nexport function __importStar(mod) {\n  if (mod && mod.__esModule) return mod;\n  var result = {};\n  if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\n  result.default = mod;\n  return result;\n}\n\nexport function __importDefault(mod) {\n  return (mod && mod.__esModule) ? mod : { default: mod };\n}"
  },
  {
    "path": "content/js/stencil/esm/es5/polyfills/url.js",
    "content": "export function applyPolyfill(window, document) {/*!\nurl-polyfill, 1.0.14\nhttps://github.com/lifaon74/url-polyfill\nMIT Licensed\n*/\n(function(e){var t=function(){try{return!!Symbol.iterator}catch(e){return false}};var n=t();var r=function(e){var t={next:function(){var t=e.shift();return{done:t===void 0,value:t}}};if(n){t[Symbol.iterator]=function(){return t}}return t};var i=function(e){return encodeURIComponent(e).replace(/%20/g,\"+\")};var o=function(e){return decodeURIComponent(e).replace(/\\+/g,\" \")};var a=function(){var t=function(e){Object.defineProperty(this,\"_entries\",{value:{}});if(typeof e===\"string\"){if(e!==\"\"){e=e.replace(/^\\?/,\"\");var n=e.split(\"&\");var r;for(var i=0;i<n.length;i++){r=n[i].split(\"=\");this.append(o(r[0]),r.length>1?o(r[1]):\"\")}}}else if(e instanceof t){var a=this;e.forEach(function(e,t){a.append(e,t)})}};var a=t.prototype;a.append=function(e,t){if(e in this._entries){this._entries[e].push(t.toString())}else{this._entries[e]=[t.toString()]}};a.delete=function(e){delete this._entries[e]};a.get=function(e){return e in this._entries?this._entries[e][0]:null};a.getAll=function(e){return e in this._entries?this._entries[e].slice(0):[]};a.has=function(e){return e in this._entries};a.set=function(e,t){this._entries[e]=[t.toString()]};a.forEach=function(e,t){var n;for(var r in this._entries){if(this._entries.hasOwnProperty(r)){n=this._entries[r];for(var i=0;i<n.length;i++){e.call(t,n[i],r,this)}}}};a.keys=function(){var e=[];this.forEach(function(t,n){e.push(n)});return r(e)};a.values=function(){var e=[];this.forEach(function(t){e.push(t)});return r(e)};a.entries=function(){var e=[];this.forEach(function(t,n){e.push([n,t])});return r(e)};if(n){a[Symbol.iterator]=a.entries}a.toString=function(){var e=[];this.forEach(function(t,n){e.push(i(n)+\"=\"+i(t))});return e.join(\"&\")};e.URLSearchParams=t};if(!(\"URLSearchParams\"in e)||new URLSearchParams(\"?a=1\").toString()!==\"a=1\"){a()}})(typeof global!==\"undefined\"?global:typeof window!==\"undefined\"?window:typeof self!==\"undefined\"?self:this);(function(e){var t=function(){try{var e=new URL(\"b\",\"http://a\");e.pathname=\"c%20d\";return e.href===\"http://a/c%20d\"&&e.searchParams}catch(e){return false}};var n=function(){var t=e.URL;var n=function(e,t){if(typeof e!==\"string\")e=String(e);var n=document.implementation.createHTMLDocument(\"\");window.doc=n;if(t){var r=n.createElement(\"base\");r.href=t;n.head.appendChild(r)}var i=n.createElement(\"a\");i.href=e;n.body.appendChild(i);i.href=i.href;if(i.protocol===\":\"||!/:/.test(i.href)){throw new TypeError(\"Invalid URL\")}Object.defineProperty(this,\"_anchorElement\",{value:i})};var r=n.prototype;var i=function(e){Object.defineProperty(r,e,{get:function(){return this._anchorElement[e]},set:function(t){this._anchorElement[e]=t},enumerable:true})};[\"hash\",\"host\",\"hostname\",\"port\",\"protocol\",\"search\"].forEach(function(e){i(e)});Object.defineProperties(r,{toString:{get:function(){var e=this;return function(){return e.href}}},href:{get:function(){return this._anchorElement.href.replace(/\\?$/,\"\")},set:function(e){this._anchorElement.href=e},enumerable:true},pathname:{get:function(){return this._anchorElement.pathname.replace(/(^\\/?)/,\"/\")},set:function(e){this._anchorElement.pathname=e},enumerable:true},origin:{get:function(){var e={\"http:\":80,\"https:\":443,\"ftp:\":21}[this._anchorElement.protocol];var t=this._anchorElement.port!=e&&this._anchorElement.port!==\"\";return this._anchorElement.protocol+\"//\"+this._anchorElement.hostname+(t?\":\"+this._anchorElement.port:\"\")},enumerable:true},password:{get:function(){return\"\"},set:function(e){},enumerable:true},username:{get:function(){return\"\"},set:function(e){},enumerable:true},searchParams:{get:function(){var e=new URLSearchParams(this.search);var t=this;[\"append\",\"delete\",\"set\"].forEach(function(n){var r=e[n];e[n]=function(){r.apply(e,arguments);t.search=e.toString()}});return e},enumerable:true}});n.createObjectURL=function(e){return t.createObjectURL.apply(t,arguments)};n.revokeObjectURL=function(e){return t.revokeObjectURL.apply(t,arguments)};e.URL=n};if(!t()){n()}if(e.location!==void 0&&!(\"origin\"in e.location)){var r=function(){return e.location.protocol+\"//\"+e.location.hostname+(e.location.port?\":\"+e.location.port:\"\")};try{Object.defineProperty(e.location,\"origin\",{get:r,enumerable:true})}catch(t){setInterval(function(){e.location.origin=r()},100)}}})(typeof global!==\"undefined\"?global:typeof window!==\"undefined\"?window:typeof self!==\"undefined\"?self:this);\n}"
  },
  {
    "path": "content/js/stencil/esm/index.js",
    "content": "\"use strict\";\nfunction __export(m) {\n    for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];\n}\nObject.defineProperty(exports, \"__esModule\", { value: true });\n__export(require(\"./es5/index.js\"));\n"
  },
  {
    "path": "content/js/stencil/index.js",
    "content": "// IonicSiteComponents: CommonJS Main\nmodule.exports = require('../esm/index.js');"
  },
  {
    "path": "content/js/stencil/ionic-site-components/bubpozqb.entry.js",
    "content": "const t=window.IonicSiteComponents.h;let e;function i(t,e,i,n){return e=\"ios\"===(e=(e||\"md\").toLowerCase())?\"ios\":\"md\",i&&\"ios\"===e?t=i.toLowerCase():n&&\"md\"===e?t=n.toLowerCase():t&&(t=t.toLowerCase(),/^md-|^ios-|^logo-/.test(t)||(t=`${e}-${t}`)),\"string\"!=typeof t||\"\"===t.trim()?null:\"\"!==t.replace(/[a-z]|-|\\d/gi,\"\")?null:t}function n(t){return\"string\"==typeof t&&o(t=t.trim())?t:null}function o(t){return t.length>0&&/(\\/|\\.)/.test(t)}class s{constructor(){this.isVisible=!1,this.lazy=!1}componentWillLoad(){this.waitUntilVisible(this.el,\"50px\",()=>{this.isVisible=!0,this.loadIcon()})}componentDidUnload(){this.io&&(this.io.disconnect(),this.io=void 0)}waitUntilVisible(t,e,i){if(this.lazy&&this.win&&this.win.IntersectionObserver){const n=this.io=new this.win.IntersectionObserver(t=>{t[0].isIntersecting&&(n.disconnect(),this.io=void 0,i())},{rootMargin:e});n.observe(t)}else i()}loadIcon(){if(!this.isServer&&this.isVisible){const t=this.getUrl();t?function(t,e,i){let n=r.get(e);return n||(n=fetch(e,{cache:\"force-cache\"}).then(t=>!function(e){return t.status<=299}()?Promise.resolve(null):t.text()).then(e=>(function(t,e,i){if(e){const i=t.createDocumentFragment(),n=t.createElement(\"div\");n.innerHTML=e,i.appendChild(n);for(let t=n.childNodes.length-1;t>=0;t--)\"svg\"!==n.childNodes[t].nodeName.toLowerCase()&&n.removeChild(n.childNodes[t]);const o=n.firstElementChild;if(o&&\"svg\"===o.nodeName.toLowerCase()&&(o.setAttribute(\"class\",\"s-ion-icon\"),function t(e){if(1===e.nodeType){if(\"script\"===e.nodeName.toLowerCase())return!1;for(let t=0;t<e.attributes.length;t++){const i=e.attributes[t].value;if(\"string\"==typeof i&&0===i.toLowerCase().indexOf(\"on\"))return!1}for(let i=0;i<e.childNodes.length;i++)if(!t(e.childNodes[i]))return!1}return!0}(o)))return n.innerHTML}return\"\"})(t,e)),r.set(e,n)),n}(this.doc,t).then(t=>this.svgContent=t):console.error(\"icon was not resolved\")}if(!this.ariaLabel){const t=i(this.getName(),this.mode,this.ios,this.md);t&&(this.ariaLabel=t.replace(\"ios-\",\"\").replace(\"md-\",\"\").replace(/\\-/g,\" \"))}}getName(){return void 0!==this.name?this.name:this.icon&&!o(this.icon)?this.icon:void 0}getUrl(){let t=n(this.src);return t||((t=i(this.getName(),this.mode,this.ios,this.md))?this.getNamedUrl(t):(t=n(this.icon))||null)}getNamedUrl(t){return function(){if(!e){const t=window;t.Ionicons=t.Ionicons||{},e=t.Ionicons.map=t.Ionicons.map||new Map}return e}().get(t)||`${this.resourcesUrl}svg/${t}.svg`}hostData(){const t=this.flipRtl||this.ariaLabel&&this.ariaLabel.indexOf(\"arrow\")>-1&&!1!==this.flipRtl;return{role:\"img\",class:Object.assign({},(e=this.color,e?{\"ion-color\":!0,[`ion-color-${e}`]:!0}:null),{[`icon-${this.size}`]:!!this.size,\"flip-rtl\":t&&\"rtl\"===this.doc.dir})};var e}render(){return t(\"div\",!this.isServer&&this.svgContent?{class:\"icon-inner\",innerHTML:this.svgContent}:{class:\"icon-inner\"})}static get is(){return\"ion-icon\"}static get encapsulation(){return\"shadow\"}static get properties(){return{ariaLabel:{type:String,attr:\"aria-label\",reflectToAttr:!0,mutable:!0},color:{type:String,attr:\"color\"},doc:{context:\"document\"},el:{elementRef:!0},flipRtl:{type:Boolean,attr:\"flip-rtl\"},icon:{type:String,attr:\"icon\",watchCallbacks:[\"loadIcon\"]},ios:{type:String,attr:\"ios\"},isServer:{context:\"isServer\"},isVisible:{state:!0},lazy:{type:Boolean,attr:\"lazy\"},md:{type:String,attr:\"md\"},mode:{type:String,attr:\"mode\"},name:{type:String,attr:\"name\",watchCallbacks:[\"loadIcon\"]},resourcesUrl:{context:\"resourcesUrl\"},size:{type:String,attr:\"size\"},src:{type:String,attr:\"src\",watchCallbacks:[\"loadIcon\"]},svgContent:{state:!0},win:{context:\"window\"}}}static get style(){return\":host{display:inline-block;width:1em;height:1em;contain:strict;-webkit-box-sizing:content-box!important;box-sizing:content-box!important}.icon-inner,svg{display:block;fill:currentColor;stroke:currentColor;height:100%;width:100%}:host(.flip-rtl) .icon-inner{-webkit-transform:scaleX(-1);transform:scaleX(-1)}:host(.icon-small){font-size:18px!important}:host(.icon-large){font-size:32px!important}:host(.ion-color){color:var(--ion-color-base)!important}:host(.ion-color-primary){--ion-color-base:var(--ion-color-primary,#3880ff)}:host(.ion-color-secondary){--ion-color-base:var(--ion-color-secondary,#0cd1e8)}:host(.ion-color-tertiary){--ion-color-base:var(--ion-color-tertiary,#f4a942)}:host(.ion-color-success){--ion-color-base:var(--ion-color-success,#10dc60)}:host(.ion-color-warning){--ion-color-base:var(--ion-color-warning,#ffce00)}:host(.ion-color-danger){--ion-color-base:var(--ion-color-danger,#f14141)}:host(.ion-color-light){--ion-color-base:var(--ion-color-light,#f4f5f8)}:host(.ion-color-medium){--ion-color-base:var(--ion-color-medium,#989aa2)}:host(.ion-color-dark){--ion-color-base:var(--ion-color-dark,#222428)}\"}}const r=new Map;export{s as IonIcon};"
  },
  {
    "path": "content/js/stencil/ionic-site-components/bubpozqb.es5.entry.js",
    "content": "IonicSiteComponents.loadBundle(\"bubpozqb\",[\"exports\"],function(t){var e,i=window.IonicSiteComponents.h;function n(t,e,i,n){return e=\"ios\"===(e=(e||\"md\").toLowerCase())?\"ios\":\"md\",i&&\"ios\"===e?t=i.toLowerCase():n&&\"md\"===e?t=n.toLowerCase():t&&(t=t.toLowerCase(),/^md-|^ios-|^logo-/.test(t)||(t=e+\"-\"+t)),\"string\"!=typeof t||\"\"===t.trim()?null:\"\"!==t.replace(/[a-z]|-|\\d/gi,\"\")?null:t}function o(t){return\"string\"==typeof t&&r(t=t.trim())?t:null}function r(t){return t.length>0&&/(\\/|\\.)/.test(t)}var s=function(){function t(){this.isVisible=!1,this.lazy=!1}return t.prototype.componentWillLoad=function(){var t=this;this.waitUntilVisible(this.el,\"50px\",function(){t.isVisible=!0,t.loadIcon()})},t.prototype.componentDidUnload=function(){this.io&&(this.io.disconnect(),this.io=void 0)},t.prototype.waitUntilVisible=function(t,e,i){var n=this;if(this.lazy&&this.win&&this.win.IntersectionObserver){var o=this.io=new this.win.IntersectionObserver(function(t){t[0].isIntersecting&&(o.disconnect(),n.io=void 0,i())},{rootMargin:e});o.observe(t)}else i()},t.prototype.loadIcon=function(){var t=this;if(!this.isServer&&this.isVisible){var e=this.getUrl();e?function(t,e,i){var n=a.get(e);return n||(n=fetch(e,{cache:\"force-cache\"}).then(function(t){return t.status<=299?t.text():Promise.resolve(null)}).then(function(e){return function(t,e,i){if(e){var n=t.createDocumentFragment(),o=t.createElement(\"div\");o.innerHTML=e,n.appendChild(o);for(var r=o.childNodes.length-1;r>=0;r--)\"svg\"!==o.childNodes[r].nodeName.toLowerCase()&&o.removeChild(o.childNodes[r]);var s=o.firstElementChild;if(s&&\"svg\"===s.nodeName.toLowerCase()&&(s.setAttribute(\"class\",\"s-ion-icon\"),function t(e){if(1===e.nodeType){if(\"script\"===e.nodeName.toLowerCase())return!1;for(var i=0;i<e.attributes.length;i++){var n=e.attributes[i].value;if(\"string\"==typeof n&&0===n.toLowerCase().indexOf(\"on\"))return!1}for(i=0;i<e.childNodes.length;i++)if(!t(e.childNodes[i]))return!1}return!0}(s)))return o.innerHTML}return\"\"}(t,e)}),a.set(e,n)),n}(this.doc,e).then(function(e){return t.svgContent=e}):console.error(\"icon was not resolved\")}if(!this.ariaLabel){var i=n(this.getName(),this.mode,this.ios,this.md);i&&(this.ariaLabel=i.replace(\"ios-\",\"\").replace(\"md-\",\"\").replace(/\\-/g,\" \"))}},t.prototype.getName=function(){return void 0!==this.name?this.name:this.icon&&!r(this.icon)?this.icon:void 0},t.prototype.getUrl=function(){var t=o(this.src);return t||((t=n(this.getName(),this.mode,this.ios,this.md))?this.getNamedUrl(t):(t=o(this.icon))||null)},t.prototype.getNamedUrl=function(t){return function(){if(!e){var t=window;t.Ionicons=t.Ionicons||{},e=t.Ionicons.map=t.Ionicons.map||new Map}return e}().get(t)||this.resourcesUrl+\"svg/\"+t+\".svg\"},t.prototype.hostData=function(){var t,e=this.flipRtl||this.ariaLabel&&this.ariaLabel.indexOf(\"arrow\")>-1&&!1!==this.flipRtl;return{role:\"img\",class:Object.assign({},c(this.color),(t={},t[\"icon-\"+this.size]=!!this.size,t[\"flip-rtl\"]=e&&\"rtl\"===this.doc.dir,t))}},t.prototype.render=function(){return i(\"div\",!this.isServer&&this.svgContent?{class:\"icon-inner\",innerHTML:this.svgContent}:{class:\"icon-inner\"})},Object.defineProperty(t,\"is\",{get:function(){return\"ion-icon\"},enumerable:!0,configurable:!0}),Object.defineProperty(t,\"encapsulation\",{get:function(){return\"shadow\"},enumerable:!0,configurable:!0}),Object.defineProperty(t,\"properties\",{get:function(){return{ariaLabel:{type:String,attr:\"aria-label\",reflectToAttr:!0,mutable:!0},color:{type:String,attr:\"color\"},doc:{context:\"document\"},el:{elementRef:!0},flipRtl:{type:Boolean,attr:\"flip-rtl\"},icon:{type:String,attr:\"icon\",watchCallbacks:[\"loadIcon\"]},ios:{type:String,attr:\"ios\"},isServer:{context:\"isServer\"},isVisible:{state:!0},lazy:{type:Boolean,attr:\"lazy\"},md:{type:String,attr:\"md\"},mode:{type:String,attr:\"mode\"},name:{type:String,attr:\"name\",watchCallbacks:[\"loadIcon\"]},resourcesUrl:{context:\"resourcesUrl\"},size:{type:String,attr:\"size\"},src:{type:String,attr:\"src\",watchCallbacks:[\"loadIcon\"]},svgContent:{state:!0},win:{context:\"window\"}}},enumerable:!0,configurable:!0}),Object.defineProperty(t,\"style\",{get:function(){return\":host{display:inline-block;width:1em;height:1em;contain:strict;-webkit-box-sizing:content-box!important;box-sizing:content-box!important}.icon-inner,svg{display:block;fill:currentColor;stroke:currentColor;height:100%;width:100%}:host(.flip-rtl) .icon-inner{-webkit-transform:scaleX(-1);transform:scaleX(-1)}:host(.icon-small){font-size:18px!important}:host(.icon-large){font-size:32px!important}:host(.ion-color){color:var(--ion-color-base)!important}:host(.ion-color-primary){--ion-color-base:var(--ion-color-primary,#3880ff)}:host(.ion-color-secondary){--ion-color-base:var(--ion-color-secondary,#0cd1e8)}:host(.ion-color-tertiary){--ion-color-base:var(--ion-color-tertiary,#f4a942)}:host(.ion-color-success){--ion-color-base:var(--ion-color-success,#10dc60)}:host(.ion-color-warning){--ion-color-base:var(--ion-color-warning,#ffce00)}:host(.ion-color-danger){--ion-color-base:var(--ion-color-danger,#f14141)}:host(.ion-color-light){--ion-color-base:var(--ion-color-light,#f4f5f8)}:host(.ion-color-medium){--ion-color-base:var(--ion-color-medium,#989aa2)}:host(.ion-color-dark){--ion-color-base:var(--ion-color-dark,#222428)}\"},enumerable:!0,configurable:!0}),t}(),a=new Map;function c(t){var e;return t?((e={\"ion-color\":!0})[\"ion-color-\"+t]=!0,e):null}t.IonIcon=s,Object.defineProperty(t,\"__esModule\",{value:!0})});"
  },
  {
    "path": "content/js/stencil/ionic-site-components/bubpozqb.sc.entry.js",
    "content": "const t=window.IonicSiteComponents.h;let e;function i(t,e,i,n){return e=\"ios\"===(e=(e||\"md\").toLowerCase())?\"ios\":\"md\",i&&\"ios\"===e?t=i.toLowerCase():n&&\"md\"===e?t=n.toLowerCase():t&&(t=t.toLowerCase(),/^md-|^ios-|^logo-/.test(t)||(t=`${e}-${t}`)),\"string\"!=typeof t||\"\"===t.trim()?null:\"\"!==t.replace(/[a-z]|-|\\d/gi,\"\")?null:t}function n(t){return\"string\"==typeof t&&o(t=t.trim())?t:null}function o(t){return t.length>0&&/(\\/|\\.)/.test(t)}class s{constructor(){this.isVisible=!1,this.lazy=!1}componentWillLoad(){this.waitUntilVisible(this.el,\"50px\",()=>{this.isVisible=!0,this.loadIcon()})}componentDidUnload(){this.io&&(this.io.disconnect(),this.io=void 0)}waitUntilVisible(t,e,i){if(this.lazy&&this.win&&this.win.IntersectionObserver){const n=this.io=new this.win.IntersectionObserver(t=>{t[0].isIntersecting&&(n.disconnect(),this.io=void 0,i())},{rootMargin:e});n.observe(t)}else i()}loadIcon(){if(!this.isServer&&this.isVisible){const t=this.getUrl();t?function(t,e,i){let n=r.get(e);return n||(n=fetch(e,{cache:\"force-cache\"}).then(t=>!function(e){return t.status<=299}()?Promise.resolve(null):t.text()).then(e=>(function(t,e,i){if(e){const i=t.createDocumentFragment(),n=t.createElement(\"div\");n.innerHTML=e,i.appendChild(n);for(let t=n.childNodes.length-1;t>=0;t--)\"svg\"!==n.childNodes[t].nodeName.toLowerCase()&&n.removeChild(n.childNodes[t]);const o=n.firstElementChild;if(o&&\"svg\"===o.nodeName.toLowerCase()&&(o.setAttribute(\"class\",\"s-ion-icon\"),function t(e){if(1===e.nodeType){if(\"script\"===e.nodeName.toLowerCase())return!1;for(let t=0;t<e.attributes.length;t++){const i=e.attributes[t].value;if(\"string\"==typeof i&&0===i.toLowerCase().indexOf(\"on\"))return!1}for(let i=0;i<e.childNodes.length;i++)if(!t(e.childNodes[i]))return!1}return!0}(o)))return n.innerHTML}return\"\"})(t,e)),r.set(e,n)),n}(this.doc,t).then(t=>this.svgContent=t):console.error(\"icon was not resolved\")}if(!this.ariaLabel){const t=i(this.getName(),this.mode,this.ios,this.md);t&&(this.ariaLabel=t.replace(\"ios-\",\"\").replace(\"md-\",\"\").replace(/\\-/g,\" \"))}}getName(){return void 0!==this.name?this.name:this.icon&&!o(this.icon)?this.icon:void 0}getUrl(){let t=n(this.src);return t||((t=i(this.getName(),this.mode,this.ios,this.md))?this.getNamedUrl(t):(t=n(this.icon))||null)}getNamedUrl(t){return function(){if(!e){const t=window;t.Ionicons=t.Ionicons||{},e=t.Ionicons.map=t.Ionicons.map||new Map}return e}().get(t)||`${this.resourcesUrl}svg/${t}.svg`}hostData(){const t=this.flipRtl||this.ariaLabel&&this.ariaLabel.indexOf(\"arrow\")>-1&&!1!==this.flipRtl;return{role:\"img\",class:Object.assign({},(e=this.color,e?{\"ion-color\":!0,[`ion-color-${e}`]:!0}:null),{[`icon-${this.size}`]:!!this.size,\"flip-rtl\":t&&\"rtl\"===this.doc.dir})};var e}render(){return t(\"div\",!this.isServer&&this.svgContent?{class:\"icon-inner\",innerHTML:this.svgContent}:{class:\"icon-inner\"})}static get is(){return\"ion-icon\"}static get encapsulation(){return\"shadow\"}static get properties(){return{ariaLabel:{type:String,attr:\"aria-label\",reflectToAttr:!0,mutable:!0},color:{type:String,attr:\"color\"},doc:{context:\"document\"},el:{elementRef:!0},flipRtl:{type:Boolean,attr:\"flip-rtl\"},icon:{type:String,attr:\"icon\",watchCallbacks:[\"loadIcon\"]},ios:{type:String,attr:\"ios\"},isServer:{context:\"isServer\"},isVisible:{state:!0},lazy:{type:Boolean,attr:\"lazy\"},md:{type:String,attr:\"md\"},mode:{type:String,attr:\"mode\"},name:{type:String,attr:\"name\",watchCallbacks:[\"loadIcon\"]},resourcesUrl:{context:\"resourcesUrl\"},size:{type:String,attr:\"size\"},src:{type:String,attr:\"src\",watchCallbacks:[\"loadIcon\"]},svgContent:{state:!0},win:{context:\"window\"}}}static get style(){return\".sc-ion-icon-h{display:inline-block;width:1em;height:1em;contain:strict;-webkit-box-sizing:content-box!important;box-sizing:content-box!important}.icon-inner.sc-ion-icon, svg.sc-ion-icon{display:block;fill:currentColor;stroke:currentColor;height:100%;width:100%}.flip-rtl.sc-ion-icon-h   .icon-inner.sc-ion-icon{-webkit-transform:scaleX(-1);transform:scaleX(-1)}.icon-small.sc-ion-icon-h{font-size:18px!important}.icon-large.sc-ion-icon-h{font-size:32px!important}.ion-color.sc-ion-icon-h{color:var(--ion-color-base)!important}.ion-color-primary.sc-ion-icon-h{--ion-color-base:var(--ion-color-primary,#3880ff)}.ion-color-secondary.sc-ion-icon-h{--ion-color-base:var(--ion-color-secondary,#0cd1e8)}.ion-color-tertiary.sc-ion-icon-h{--ion-color-base:var(--ion-color-tertiary,#f4a942)}.ion-color-success.sc-ion-icon-h{--ion-color-base:var(--ion-color-success,#10dc60)}.ion-color-warning.sc-ion-icon-h{--ion-color-base:var(--ion-color-warning,#ffce00)}.ion-color-danger.sc-ion-icon-h{--ion-color-base:var(--ion-color-danger,#f14141)}.ion-color-light.sc-ion-icon-h{--ion-color-base:var(--ion-color-light,#f4f5f8)}.ion-color-medium.sc-ion-icon-h{--ion-color-base:var(--ion-color-medium,#989aa2)}.ion-color-dark.sc-ion-icon-h{--ion-color-base:var(--ion-color-dark,#222428)}\"}}const r=new Map;export{s as IonIcon};"
  },
  {
    "path": "content/js/stencil/ionic-site-components/bubpozqb.sc.es5.entry.js",
    "content": "IonicSiteComponents.loadBundle(\"bubpozqb\",[\"exports\"],function(t){var e,i=window.IonicSiteComponents.h;function n(t,e,i,n){return e=\"ios\"===(e=(e||\"md\").toLowerCase())?\"ios\":\"md\",i&&\"ios\"===e?t=i.toLowerCase():n&&\"md\"===e?t=n.toLowerCase():t&&(t=t.toLowerCase(),/^md-|^ios-|^logo-/.test(t)||(t=e+\"-\"+t)),\"string\"!=typeof t||\"\"===t.trim()?null:\"\"!==t.replace(/[a-z]|-|\\d/gi,\"\")?null:t}function o(t){return\"string\"==typeof t&&r(t=t.trim())?t:null}function r(t){return t.length>0&&/(\\/|\\.)/.test(t)}var s=function(){function t(){this.isVisible=!1,this.lazy=!1}return t.prototype.componentWillLoad=function(){var t=this;this.waitUntilVisible(this.el,\"50px\",function(){t.isVisible=!0,t.loadIcon()})},t.prototype.componentDidUnload=function(){this.io&&(this.io.disconnect(),this.io=void 0)},t.prototype.waitUntilVisible=function(t,e,i){var n=this;if(this.lazy&&this.win&&this.win.IntersectionObserver){var o=this.io=new this.win.IntersectionObserver(function(t){t[0].isIntersecting&&(o.disconnect(),n.io=void 0,i())},{rootMargin:e});o.observe(t)}else i()},t.prototype.loadIcon=function(){var t=this;if(!this.isServer&&this.isVisible){var e=this.getUrl();e?function(t,e,i){var n=a.get(e);return n||(n=fetch(e,{cache:\"force-cache\"}).then(function(t){return t.status<=299?t.text():Promise.resolve(null)}).then(function(e){return function(t,e,i){if(e){var n=t.createDocumentFragment(),o=t.createElement(\"div\");o.innerHTML=e,n.appendChild(o);for(var r=o.childNodes.length-1;r>=0;r--)\"svg\"!==o.childNodes[r].nodeName.toLowerCase()&&o.removeChild(o.childNodes[r]);var s=o.firstElementChild;if(s&&\"svg\"===s.nodeName.toLowerCase()&&(s.setAttribute(\"class\",\"s-ion-icon\"),function t(e){if(1===e.nodeType){if(\"script\"===e.nodeName.toLowerCase())return!1;for(var i=0;i<e.attributes.length;i++){var n=e.attributes[i].value;if(\"string\"==typeof n&&0===n.toLowerCase().indexOf(\"on\"))return!1}for(i=0;i<e.childNodes.length;i++)if(!t(e.childNodes[i]))return!1}return!0}(s)))return o.innerHTML}return\"\"}(t,e)}),a.set(e,n)),n}(this.doc,e).then(function(e){return t.svgContent=e}):console.error(\"icon was not resolved\")}if(!this.ariaLabel){var i=n(this.getName(),this.mode,this.ios,this.md);i&&(this.ariaLabel=i.replace(\"ios-\",\"\").replace(\"md-\",\"\").replace(/\\-/g,\" \"))}},t.prototype.getName=function(){return void 0!==this.name?this.name:this.icon&&!r(this.icon)?this.icon:void 0},t.prototype.getUrl=function(){var t=o(this.src);return t||((t=n(this.getName(),this.mode,this.ios,this.md))?this.getNamedUrl(t):(t=o(this.icon))||null)},t.prototype.getNamedUrl=function(t){return function(){if(!e){var t=window;t.Ionicons=t.Ionicons||{},e=t.Ionicons.map=t.Ionicons.map||new Map}return e}().get(t)||this.resourcesUrl+\"svg/\"+t+\".svg\"},t.prototype.hostData=function(){var t,e=this.flipRtl||this.ariaLabel&&this.ariaLabel.indexOf(\"arrow\")>-1&&!1!==this.flipRtl;return{role:\"img\",class:Object.assign({},c(this.color),(t={},t[\"icon-\"+this.size]=!!this.size,t[\"flip-rtl\"]=e&&\"rtl\"===this.doc.dir,t))}},t.prototype.render=function(){return i(\"div\",!this.isServer&&this.svgContent?{class:\"icon-inner\",innerHTML:this.svgContent}:{class:\"icon-inner\"})},Object.defineProperty(t,\"is\",{get:function(){return\"ion-icon\"},enumerable:!0,configurable:!0}),Object.defineProperty(t,\"encapsulation\",{get:function(){return\"shadow\"},enumerable:!0,configurable:!0}),Object.defineProperty(t,\"properties\",{get:function(){return{ariaLabel:{type:String,attr:\"aria-label\",reflectToAttr:!0,mutable:!0},color:{type:String,attr:\"color\"},doc:{context:\"document\"},el:{elementRef:!0},flipRtl:{type:Boolean,attr:\"flip-rtl\"},icon:{type:String,attr:\"icon\",watchCallbacks:[\"loadIcon\"]},ios:{type:String,attr:\"ios\"},isServer:{context:\"isServer\"},isVisible:{state:!0},lazy:{type:Boolean,attr:\"lazy\"},md:{type:String,attr:\"md\"},mode:{type:String,attr:\"mode\"},name:{type:String,attr:\"name\",watchCallbacks:[\"loadIcon\"]},resourcesUrl:{context:\"resourcesUrl\"},size:{type:String,attr:\"size\"},src:{type:String,attr:\"src\",watchCallbacks:[\"loadIcon\"]},svgContent:{state:!0},win:{context:\"window\"}}},enumerable:!0,configurable:!0}),Object.defineProperty(t,\"style\",{get:function(){return\".sc-ion-icon-h{display:inline-block;width:1em;height:1em;contain:strict;-webkit-box-sizing:content-box!important;box-sizing:content-box!important}.icon-inner.sc-ion-icon, svg.sc-ion-icon{display:block;fill:currentColor;stroke:currentColor;height:100%;width:100%}.flip-rtl.sc-ion-icon-h   .icon-inner.sc-ion-icon{-webkit-transform:scaleX(-1);transform:scaleX(-1)}.icon-small.sc-ion-icon-h{font-size:18px!important}.icon-large.sc-ion-icon-h{font-size:32px!important}.ion-color.sc-ion-icon-h{color:var(--ion-color-base)!important}.ion-color-primary.sc-ion-icon-h{--ion-color-base:var(--ion-color-primary,#3880ff)}.ion-color-secondary.sc-ion-icon-h{--ion-color-base:var(--ion-color-secondary,#0cd1e8)}.ion-color-tertiary.sc-ion-icon-h{--ion-color-base:var(--ion-color-tertiary,#f4a942)}.ion-color-success.sc-ion-icon-h{--ion-color-base:var(--ion-color-success,#10dc60)}.ion-color-warning.sc-ion-icon-h{--ion-color-base:var(--ion-color-warning,#ffce00)}.ion-color-danger.sc-ion-icon-h{--ion-color-base:var(--ion-color-danger,#f14141)}.ion-color-light.sc-ion-icon-h{--ion-color-base:var(--ion-color-light,#f4f5f8)}.ion-color-medium.sc-ion-icon-h{--ion-color-base:var(--ion-color-medium,#989aa2)}.ion-color-dark.sc-ion-icon-h{--ion-color-base:var(--ion-color-dark,#222428)}\"},enumerable:!0,configurable:!0}),t}(),a=new Map;function c(t){var e;return t?((e={\"ion-color\":!0})[\"ion-color-\"+t]=!0,e):null}t.IonIcon=s,Object.defineProperty(t,\"__esModule\",{value:!0})});"
  },
  {
    "path": "content/js/stencil/ionic-site-components/cetridhp.entry.js",
    "content": "const t=window.IonicSiteComponents.h;class e{constructor(){this.active=!1}componentDidLoad(){setTimeout(()=>{this.active=!0},2500)}close(){this.active=!1}render(){return[t(\"div\",{class:`wrapper ${this.active?\"active\":\"\"}`},t(\"slot\",null)),t(\"div\",{id:\"snap-bar-close\",class:\"close\",onClick:this.close.bind(this)},\"×\")]}static get is(){return\"ionic-snap-bar\"}static get properties(){return{active:{state:!0}}}static get style(){return\"ionic-snap-bar{background:-webkit-gradient(linear,left top,right top,from(#17203d),to(#1f2c53));background:linear-gradient(90deg,#17203d,#1f2c53);display:none;width:100%;position:relative;padding:0 24px;z-index:1;font-family:Eina,Helvetica Neue,Helvetica,sans-serif}ionic-snap-bar.hydrated{display:block}ionic-snap-bar .wrapper{padding:0 16px;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-align:center;align-items:center;-ms-flex-pack:distribute;justify-content:space-around;color:hsla(0,0%,100%,.6);margin:0 auto;max-width:586px;height:0;-webkit-transition:height .4s ease,padding .4s ease;transition:height .4s ease,padding .4s ease}ionic-snap-bar .wrapper.active{height:48px;padding-top:13px;padding-bottom:13px}ionic-snap-bar .wrapper.active>*{-webkit-transform:scaleY(1);transform:scaleY(1)}ionic-snap-bar .wrapper.active+.close{opacity:1;pointer-events:all}ionic-snap-bar .wrapper>*{font-size:1em;font-weight:600;display:inline-block;-webkit-transform:scaleY(0);transform:scaleY(0);-webkit-transition:transform .2s ease;transition:transform .2s ease}ionic-snap-bar .wrapper a{border-radius:1.8em;text-transform:uppercase;color:#fff;text-decoration:none;background:rgba(56,128,255,.28);display:inline-block;padding:6px 12px 4px;font-size:10px;letter-spacing:.1em;margin-bottom:2px;-webkit-transition:background .2s ease;transition:background .2s ease;font-weight:800}ionic-snap-bar .wrapper a:after{content:\\\"\\\";border:solid #fff;border-width:0 1px 1px 0;display:inline-block;padding:3px;margin-left:2px;vertical-align:1px;-webkit-transform:rotate(-45deg);transform:rotate(-45deg)}ionic-snap-bar .wrapper a:hover{background:rgba(56,128,255,.4)}ionic-snap-bar .wrapper h1,ionic-snap-bar .wrapper h2,ionic-snap-bar .wrapper h3,ionic-snap-bar .wrapper h4,ionic-snap-bar .wrapper strong{font-weight:700;color:#fff;letter-spacing:.01em}ionic-snap-bar .close{color:hsla(0,0%,100%,.3);position:absolute;font-size:24px;right:16px;top:5px;cursor:pointer;pointer-events:none;opacity:0;-webkit-transition:opacity .4s ease,color .2s ease;transition:opacity .4s ease,color .2s ease}ionic-snap-bar .close:hover{color:hsla(0,0%,100%,.5)}\"}}export{e as IonicSnapBar};"
  },
  {
    "path": "content/js/stencil/ionic-site-components/cetridhp.es5.entry.js",
    "content": "IonicSiteComponents.loadBundle(\"cetridhp\",[\"exports\"],function(e){var t=window.IonicSiteComponents.h,n=function(){function e(){this.active=!1}return e.prototype.componentDidLoad=function(){var e=this;setTimeout(function(){e.active=!0},2500)},e.prototype.close=function(){this.active=!1},e.prototype.render=function(){return[t(\"div\",{class:\"wrapper \"+(this.active?\"active\":\"\")},t(\"slot\",null)),t(\"div\",{id:\"snap-bar-close\",class:\"close\",onClick:this.close.bind(this)},\"×\")]},Object.defineProperty(e,\"is\",{get:function(){return\"ionic-snap-bar\"},enumerable:!0,configurable:!0}),Object.defineProperty(e,\"properties\",{get:function(){return{active:{state:!0}}},enumerable:!0,configurable:!0}),Object.defineProperty(e,\"style\",{get:function(){return\"ionic-snap-bar{background:-webkit-gradient(linear,left top,right top,from(#17203d),to(#1f2c53));background:linear-gradient(90deg,#17203d,#1f2c53);display:none;width:100%;position:relative;padding:0 24px;z-index:1;font-family:Eina,Helvetica Neue,Helvetica,sans-serif}ionic-snap-bar.hydrated{display:block}ionic-snap-bar .wrapper{padding:0 16px;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-align:center;align-items:center;-ms-flex-pack:distribute;justify-content:space-around;color:hsla(0,0%,100%,.6);margin:0 auto;max-width:586px;height:0;-webkit-transition:height .4s ease,padding .4s ease;transition:height .4s ease,padding .4s ease}ionic-snap-bar .wrapper.active{height:48px;padding-top:13px;padding-bottom:13px}ionic-snap-bar .wrapper.active>*{-webkit-transform:scaleY(1);transform:scaleY(1)}ionic-snap-bar .wrapper.active+.close{opacity:1;pointer-events:all}ionic-snap-bar .wrapper>*{font-size:1em;font-weight:600;display:inline-block;-webkit-transform:scaleY(0);transform:scaleY(0);-webkit-transition:transform .2s ease;transition:transform .2s ease}ionic-snap-bar .wrapper a{border-radius:1.8em;text-transform:uppercase;color:#fff;text-decoration:none;background:rgba(56,128,255,.28);display:inline-block;padding:6px 12px 4px;font-size:10px;letter-spacing:.1em;margin-bottom:2px;-webkit-transition:background .2s ease;transition:background .2s ease;font-weight:800}ionic-snap-bar .wrapper a:after{content:\\\"\\\";border:solid #fff;border-width:0 1px 1px 0;display:inline-block;padding:3px;margin-left:2px;vertical-align:1px;-webkit-transform:rotate(-45deg);transform:rotate(-45deg)}ionic-snap-bar .wrapper a:hover{background:rgba(56,128,255,.4)}ionic-snap-bar .wrapper h1,ionic-snap-bar .wrapper h2,ionic-snap-bar .wrapper h3,ionic-snap-bar .wrapper h4,ionic-snap-bar .wrapper strong{font-weight:700;color:#fff;letter-spacing:.01em}ionic-snap-bar .close{color:hsla(0,0%,100%,.3);position:absolute;font-size:24px;right:16px;top:5px;cursor:pointer;pointer-events:none;opacity:0;-webkit-transition:opacity .4s ease,color .2s ease;transition:opacity .4s ease,color .2s ease}ionic-snap-bar .close:hover{color:hsla(0,0%,100%,.5)}\"},enumerable:!0,configurable:!0}),e}();e.IonicSnapBar=n,Object.defineProperty(e,\"__esModule\",{value:!0})});"
  },
  {
    "path": "content/js/stencil/ionic-site-components/cetridhp.sc.entry.js",
    "content": "const t=window.IonicSiteComponents.h;class e{constructor(){this.active=!1}componentDidLoad(){setTimeout(()=>{this.active=!0},2500)}close(){this.active=!1}render(){return[t(\"div\",{class:`wrapper ${this.active?\"active\":\"\"}`},t(\"slot\",null)),t(\"div\",{id:\"snap-bar-close\",class:\"close\",onClick:this.close.bind(this)},\"×\")]}static get is(){return\"ionic-snap-bar\"}static get properties(){return{active:{state:!0}}}static get style(){return\"ionic-snap-bar{background:-webkit-gradient(linear,left top,right top,from(#17203d),to(#1f2c53));background:linear-gradient(90deg,#17203d,#1f2c53);display:none;width:100%;position:relative;padding:0 24px;z-index:1;font-family:Eina,Helvetica Neue,Helvetica,sans-serif}ionic-snap-bar.hydrated{display:block}ionic-snap-bar .wrapper{padding:0 16px;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-align:center;align-items:center;-ms-flex-pack:distribute;justify-content:space-around;color:hsla(0,0%,100%,.6);margin:0 auto;max-width:586px;height:0;-webkit-transition:height .4s ease,padding .4s ease;transition:height .4s ease,padding .4s ease}ionic-snap-bar .wrapper.active{height:48px;padding-top:13px;padding-bottom:13px}ionic-snap-bar .wrapper.active>*{-webkit-transform:scaleY(1);transform:scaleY(1)}ionic-snap-bar .wrapper.active+.close{opacity:1;pointer-events:all}ionic-snap-bar .wrapper>*{font-size:1em;font-weight:600;display:inline-block;-webkit-transform:scaleY(0);transform:scaleY(0);-webkit-transition:transform .2s ease;transition:transform .2s ease}ionic-snap-bar .wrapper a{border-radius:1.8em;text-transform:uppercase;color:#fff;text-decoration:none;background:rgba(56,128,255,.28);display:inline-block;padding:6px 12px 4px;font-size:10px;letter-spacing:.1em;margin-bottom:2px;-webkit-transition:background .2s ease;transition:background .2s ease;font-weight:800}ionic-snap-bar .wrapper a:after{content:\\\"\\\";border:solid #fff;border-width:0 1px 1px 0;display:inline-block;padding:3px;margin-left:2px;vertical-align:1px;-webkit-transform:rotate(-45deg);transform:rotate(-45deg)}ionic-snap-bar .wrapper a:hover{background:rgba(56,128,255,.4)}ionic-snap-bar .wrapper h1,ionic-snap-bar .wrapper h2,ionic-snap-bar .wrapper h3,ionic-snap-bar .wrapper h4,ionic-snap-bar .wrapper strong{font-weight:700;color:#fff;letter-spacing:.01em}ionic-snap-bar .close{color:hsla(0,0%,100%,.3);position:absolute;font-size:24px;right:16px;top:5px;cursor:pointer;pointer-events:none;opacity:0;-webkit-transition:opacity .4s ease,color .2s ease;transition:opacity .4s ease,color .2s ease}ionic-snap-bar .close:hover{color:hsla(0,0%,100%,.5)}\"}}export{e as IonicSnapBar};"
  },
  {
    "path": "content/js/stencil/ionic-site-components/cetridhp.sc.es5.entry.js",
    "content": "IonicSiteComponents.loadBundle(\"cetridhp\",[\"exports\"],function(e){var t=window.IonicSiteComponents.h,n=function(){function e(){this.active=!1}return e.prototype.componentDidLoad=function(){var e=this;setTimeout(function(){e.active=!0},2500)},e.prototype.close=function(){this.active=!1},e.prototype.render=function(){return[t(\"div\",{class:\"wrapper \"+(this.active?\"active\":\"\")},t(\"slot\",null)),t(\"div\",{id:\"snap-bar-close\",class:\"close\",onClick:this.close.bind(this)},\"×\")]},Object.defineProperty(e,\"is\",{get:function(){return\"ionic-snap-bar\"},enumerable:!0,configurable:!0}),Object.defineProperty(e,\"properties\",{get:function(){return{active:{state:!0}}},enumerable:!0,configurable:!0}),Object.defineProperty(e,\"style\",{get:function(){return\"ionic-snap-bar{background:-webkit-gradient(linear,left top,right top,from(#17203d),to(#1f2c53));background:linear-gradient(90deg,#17203d,#1f2c53);display:none;width:100%;position:relative;padding:0 24px;z-index:1;font-family:Eina,Helvetica Neue,Helvetica,sans-serif}ionic-snap-bar.hydrated{display:block}ionic-snap-bar .wrapper{padding:0 16px;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-align:center;align-items:center;-ms-flex-pack:distribute;justify-content:space-around;color:hsla(0,0%,100%,.6);margin:0 auto;max-width:586px;height:0;-webkit-transition:height .4s ease,padding .4s ease;transition:height .4s ease,padding .4s ease}ionic-snap-bar .wrapper.active{height:48px;padding-top:13px;padding-bottom:13px}ionic-snap-bar .wrapper.active>*{-webkit-transform:scaleY(1);transform:scaleY(1)}ionic-snap-bar .wrapper.active+.close{opacity:1;pointer-events:all}ionic-snap-bar .wrapper>*{font-size:1em;font-weight:600;display:inline-block;-webkit-transform:scaleY(0);transform:scaleY(0);-webkit-transition:transform .2s ease;transition:transform .2s ease}ionic-snap-bar .wrapper a{border-radius:1.8em;text-transform:uppercase;color:#fff;text-decoration:none;background:rgba(56,128,255,.28);display:inline-block;padding:6px 12px 4px;font-size:10px;letter-spacing:.1em;margin-bottom:2px;-webkit-transition:background .2s ease;transition:background .2s ease;font-weight:800}ionic-snap-bar .wrapper a:after{content:\\\"\\\";border:solid #fff;border-width:0 1px 1px 0;display:inline-block;padding:3px;margin-left:2px;vertical-align:1px;-webkit-transform:rotate(-45deg);transform:rotate(-45deg)}ionic-snap-bar .wrapper a:hover{background:rgba(56,128,255,.4)}ionic-snap-bar .wrapper h1,ionic-snap-bar .wrapper h2,ionic-snap-bar .wrapper h3,ionic-snap-bar .wrapper h4,ionic-snap-bar .wrapper strong{font-weight:700;color:#fff;letter-spacing:.01em}ionic-snap-bar .close{color:hsla(0,0%,100%,.3);position:absolute;font-size:24px;right:16px;top:5px;cursor:pointer;pointer-events:none;opacity:0;-webkit-transition:opacity .4s ease,color .2s ease;transition:opacity .4s ease,color .2s ease}ionic-snap-bar .close:hover{color:hsla(0,0%,100%,.5)}\"},enumerable:!0,configurable:!0}),e}();e.IonicSnapBar=n,Object.defineProperty(e,\"__esModule\",{value:!0})});"
  },
  {
    "path": "content/js/stencil/ionic-site-components/cz7vrrja.entry.js",
    "content": "const t=window.IonicSiteComponents.h;class e{componentDidLoad(){}selectionChanged(t){const e=t.detail,o=this.el.querySelectorAll(\"ionic-toggle-button\");Array.prototype.forEach.call(o,t=>{t.deselect()});const l=e.tab;e.select(),console.log(\"Selecting this one\",l,e);const s=this.el.querySelectorAll(\"ionic-toggle-tab\");console.log(\"Found tabs\",s),Array.prototype.forEach.call(s,t=>{t.hide(),t.tab===l&&t.show()})}render(){return t(\"div\",{class:\"toggle-content\"},t(\"div\",{class:\"toggle-buttons\"},t(\"slot\",{name:\"buttons\"})),t(\"div\",{class:\"toggle-tabs\"},t(\"slot\",{name:\"tabs\"})))}static get is(){return\"ionic-toggle\"}static get encapsulation(){return\"shadow\"}static get properties(){return{el:{elementRef:!0}}}static get listeners(){return[{name:\"toggleSelected\",method:\"selectionChanged\"}]}static get style(){return\":host{display:block}.toggle-buttons{display:-ms-flexbox;display:flex;-ms-flex-direction:row;flex-direction:row;-ms-flex-pack:center;justify-content:center}\"}}export{e as IonicToggle};"
  },
  {
    "path": "content/js/stencil/ionic-site-components/cz7vrrja.es5.entry.js",
    "content": "IonicSiteComponents.loadBundle(\"cz7vrrja\",[\"exports\"],function(e){var t=window.IonicSiteComponents.h,n=function(){function e(){}return e.prototype.componentDidLoad=function(){},e.prototype.selectionChanged=function(e){var t=e.detail,n=this.el.querySelectorAll(\"ionic-toggle-button\");Array.prototype.forEach.call(n,function(e){e.deselect()});var o=t.tab;t.select(),console.log(\"Selecting this one\",o,t);var r=this.el.querySelectorAll(\"ionic-toggle-tab\");console.log(\"Found tabs\",r),Array.prototype.forEach.call(r,function(e){e.hide(),e.tab===o&&e.show()})},e.prototype.render=function(){return t(\"div\",{class:\"toggle-content\"},t(\"div\",{class:\"toggle-buttons\"},t(\"slot\",{name:\"buttons\"})),t(\"div\",{class:\"toggle-tabs\"},t(\"slot\",{name:\"tabs\"})))},Object.defineProperty(e,\"is\",{get:function(){return\"ionic-toggle\"},enumerable:!0,configurable:!0}),Object.defineProperty(e,\"encapsulation\",{get:function(){return\"shadow\"},enumerable:!0,configurable:!0}),Object.defineProperty(e,\"properties\",{get:function(){return{el:{elementRef:!0}}},enumerable:!0,configurable:!0}),Object.defineProperty(e,\"listeners\",{get:function(){return[{name:\"toggleSelected\",method:\"selectionChanged\"}]},enumerable:!0,configurable:!0}),Object.defineProperty(e,\"style\",{get:function(){return\":host{display:block}.toggle-buttons{display:-ms-flexbox;display:flex;-ms-flex-direction:row;flex-direction:row;-ms-flex-pack:center;justify-content:center}\"},enumerable:!0,configurable:!0}),e}();e.IonicToggle=n,Object.defineProperty(e,\"__esModule\",{value:!0})});"
  },
  {
    "path": "content/js/stencil/ionic-site-components/cz7vrrja.sc.entry.js",
    "content": "const t=window.IonicSiteComponents.h;class e{componentDidLoad(){}selectionChanged(t){const e=t.detail,o=this.el.querySelectorAll(\"ionic-toggle-button\");Array.prototype.forEach.call(o,t=>{t.deselect()});const l=e.tab;e.select(),console.log(\"Selecting this one\",l,e);const s=this.el.querySelectorAll(\"ionic-toggle-tab\");console.log(\"Found tabs\",s),Array.prototype.forEach.call(s,t=>{t.hide(),t.tab===l&&t.show()})}render(){return t(\"div\",{class:\"toggle-content\"},t(\"div\",{class:\"toggle-buttons\"},t(\"slot\",{name:\"buttons\"})),t(\"div\",{class:\"toggle-tabs\"},t(\"slot\",{name:\"tabs\"})))}static get is(){return\"ionic-toggle\"}static get encapsulation(){return\"shadow\"}static get properties(){return{el:{elementRef:!0}}}static get listeners(){return[{name:\"toggleSelected\",method:\"selectionChanged\"}]}static get style(){return\".sc-ionic-toggle-h{display:block}.toggle-buttons.sc-ionic-toggle{display:-ms-flexbox;display:flex;-ms-flex-direction:row;flex-direction:row;-ms-flex-pack:center;justify-content:center}\"}}export{e as IonicToggle};"
  },
  {
    "path": "content/js/stencil/ionic-site-components/cz7vrrja.sc.es5.entry.js",
    "content": "IonicSiteComponents.loadBundle(\"cz7vrrja\",[\"exports\"],function(e){var t=window.IonicSiteComponents.h,n=function(){function e(){}return e.prototype.componentDidLoad=function(){},e.prototype.selectionChanged=function(e){var t=e.detail,n=this.el.querySelectorAll(\"ionic-toggle-button\");Array.prototype.forEach.call(n,function(e){e.deselect()});var o=t.tab;t.select(),console.log(\"Selecting this one\",o,t);var r=this.el.querySelectorAll(\"ionic-toggle-tab\");console.log(\"Found tabs\",r),Array.prototype.forEach.call(r,function(e){e.hide(),e.tab===o&&e.show()})},e.prototype.render=function(){return t(\"div\",{class:\"toggle-content\"},t(\"div\",{class:\"toggle-buttons\"},t(\"slot\",{name:\"buttons\"})),t(\"div\",{class:\"toggle-tabs\"},t(\"slot\",{name:\"tabs\"})))},Object.defineProperty(e,\"is\",{get:function(){return\"ionic-toggle\"},enumerable:!0,configurable:!0}),Object.defineProperty(e,\"encapsulation\",{get:function(){return\"shadow\"},enumerable:!0,configurable:!0}),Object.defineProperty(e,\"properties\",{get:function(){return{el:{elementRef:!0}}},enumerable:!0,configurable:!0}),Object.defineProperty(e,\"listeners\",{get:function(){return[{name:\"toggleSelected\",method:\"selectionChanged\"}]},enumerable:!0,configurable:!0}),Object.defineProperty(e,\"style\",{get:function(){return\".sc-ionic-toggle-h{display:block}.toggle-buttons.sc-ionic-toggle{display:-ms-flexbox;display:flex;-ms-flex-direction:row;flex-direction:row;-ms-flex-pack:center;justify-content:center}\"},enumerable:!0,configurable:!0}),e}();e.IonicToggle=n,Object.defineProperty(e,\"__esModule\",{value:!0})});"
  },
  {
    "path": "content/js/stencil/ionic-site-components/ehteibio.entry.js",
    "content": "const t=window.IonicSiteComponents.h,e=()=>t(\"svg\",{version:\"1.1\",xmlns:\"http://www.w3.org/2000/svg\",viewBox:\"0 0 512 512\",preserveAspectRatio:\"\",style:{\"enable-background\":\"new 0 0 512 512\"}},t(\"path\",{d:\"M256,307c-2.4,0-4.8-0.4-7-1.2L78.3,246.3c-11.1-3.9-17-16-13.1-27.1c3.9-11.1,16.1-16.9,27.2-13l157.9,55.1\\n\\tc3.7,1.3,7.7,1.3,11.3,0l157.9-55.1c11.1-3.9,23.3,2,27.2,13c3.9,11.1-2,23.2-13.1,27.1L263,305.8C260.8,306.6,258.4,307,256,307z\"}));class s{constructor(){this.active=!1,this.query=\"\",this.pending=0,this.results=null,this.dragY=null,this.startY=null,this.screenHeight=null,this.URLS=(()=>{const t=\"https://api.swiftype.com/api/v1/public/engines/\",e=\"9oVyaKGPzxoZAyUo9Sm8\";return{autocomplete:s=>`${t}suggest.json?q=${s}&engine_key=${e}`,search:s=>`${t}search.json?q=${s}&engine_key=${e}`}}),this.activate=this.activate.bind(this),this.close=this.close.bind(this),this.onKeyUp=this.onKeyUp.bind(this),this.touchStart=this.touchStart.bind(this),this.touchMove=this.touchMove.bind(this),this.touchEnd=this.touchEnd.bind(this),this.urls=this.URLS()}activate(){this.active=!0,this.el.classList.add(\"active\"),setTimeout(()=>{this.el.querySelector(\"input\").focus()},500,this)}close(){this.active=!1,this.el.classList.remove(\"active\"),this.el.querySelector(\"input\").blur(),setTimeout(()=>{this.el.querySelector(\"input\").value=\"\",this.results=null},500,this)}async onKeyUp(t){if(27===t.keyCode)return void this.close();if(t.target.value.length<3)return void(this.results=null);this.query=t.target.value,this.pending++;const e=await fetch(this.urls.autocomplete(this.query)),s=await e.json();this.pending--,this.results=s.records.page}touchStart(t){this.screenHeight=window.innerHeight||document.documentElement.clientHeight||document.body.clientHeight,this.startY=Math.round(t.touches.item(0).screenY)}touchMove(t){t.preventDefault(),this.dragY=Math.max(0,Math.round((t.touches.item(0).screenY-this.startY)/this.screenHeight*100)),this.dragStyles={transitionDuration:\".1s\",transform:`translate3d(0, ${this.dragY}%, 0)`}}isFirefox(){return-1!=navigator.userAgent.indexOf(\"Firefox\")}touchEnd(){this.dragY>30&&this.close(),this.dragY=null,this.startY=null,this.dragStyles={}}render(){return[t(\"div\",{class:`search-box${this.active?\" active\":\"\"}`,style:this.dragStyles,onTouchMove:t=>this.results&&this.results.length>5?null:t.preventDefault()},t(\"input\",{type:\"text\",onKeyUp:this.onKeyUp,placeholder:\"Search Ionic..\"}),t(\"ion-icon\",{class:`search-static ${this.active?\" active\":\"\"}`,name:\"md-search\"}),this.mobile&&!this.isFirefox()?t(\"div\",{class:\"mobile-close\",onClick:this.close,onTouchStart:this.touchStart,onTouchMove:this.touchMove,onTouchEnd:this.touchEnd},t(e,null)):t(\"ion-icon\",{class:`close ${this.active?\" active\":\"\"}`,name:\"md-close\",onClick:this.close}),null!==this.results?t(\"ul\",null,this.results.map(e=>t(\"li\",null,t(\"a\",{href:e.url,title:e.title},t(\"strong\",null,e.title),t(\"span\",{innerHTML:e.highlight.sections})))),0===this.results.length?t(\"li\",null,t(\"span\",{class:\"no-results\"},\"No results\")):null):null,t(\"div\",{class:`slot ${null===this.results?\"\":\"hidden\"}`},t(\"slot\",null)),this.pending>0?t(\"span\",{class:\"searching\"}):null),t(\"ion-icon\",{class:`search ${this.active?\" active\":\"\"}`,name:\"md-search\",onClick:this.active?null:this.activate}),t(\"div\",{class:`backdrop ${this.active?\"active\":null}`,onClick:this.close})]}static get is(){return\"ionic-search\"}static get properties(){return{active:{state:!0},dragStyles:{state:!0},el:{elementRef:!0},mobile:{type:Boolean,attr:\"mobile\"},pending:{state:!0},query:{state:!0},results:{state:!0}}}static get style(){return\"\\@-webkit-keyframes ionic-search-scan{0%{left:0}to{left:100%}}\\@keyframes ionic-search-scan{0%{left:0}to{left:100%}}\\@-webkit-keyframes ionic-search-scan-mobile{0%{left:calc(0% + 8px)}to{left:calc(100% - 16px)}}\\@keyframes ionic-search-scan-mobile{0%{left:calc(0% + 8px)}to{left:calc(100% - 16px)}}ionic-search{display:block;display:inline-block}ionic-search svg{fill:#727a87}ionic-search ion-icon{font-size:18px;cursor:pointer}ionic-search ion-icon:hover svg{fill:#3880ff}ionic-search .search{right:115px;font-size:18px;margin-top:7px;color:#fff;-webkit-transition:opacity .2s,-webkit-transform .4s cubic-bezier(.23,1,.32,1);transition:opacity .2s,-webkit-transform .4s cubic-bezier(.23,1,.32,1);transition:opacity .2s,transform .4s cubic-bezier(.23,1,.32,1);transition:opacity .2s,transform .4s cubic-bezier(.23,1,.32,1),-webkit-transform .4s cubic-bezier(.23,1,.32,1)}ionic-search .search.active{cursor:default;opacity:0;-webkit-transform:scale3d(0,0,1);transform:scale3d(0,0,1)}ionic-search .search svg{fill:#a8b0be;width:18px;height:18px}ionic-search .search-static{left:15px;z-index:2;opacity:0;-webkit-transform:translate3d(0,-25px,0);transform:translate3d(0,-25px,0);-webkit-transition:opacity .1s,-webkit-transform .4s cubic-bezier(.23,1,.32,1);transition:opacity .1s,-webkit-transform .4s cubic-bezier(.23,1,.32,1);transition:transform .4s cubic-bezier(.23,1,.32,1),opacity .1s;transition:transform .4s cubic-bezier(.23,1,.32,1),opacity .1s,-webkit-transform .4s cubic-bezier(.23,1,.32,1)}ionic-search .close{right:11px;z-index:2;opacity:0;pointer-events:none;-webkit-transition:opacity .3s;transition:opacity .3s}ionic-search .close.active{pointer-events:all;opacity:1;-webkit-transform:none;transform:none}ionic-search input{width:100%;margin-left:0;padding-left:40px;padding-right:40px;outline:none;border:none;z-index:2;background:#fff;border-radius:6px;padding:14px 30px 14px 41px;font-size:14px;letter-spacing:-.01em;position:relative;opacity:0;-webkit-transform:translate3d(0,-15px,0);transform:translate3d(0,-15px,0);-webkit-transition:opacity .2s,-webkit-transform .4s cubic-bezier(.23,1,.32,1);transition:opacity .2s,-webkit-transform .4s cubic-bezier(.23,1,.32,1);transition:opacity .2s,transform .4s cubic-bezier(.23,1,.32,1);transition:opacity .2s,transform .4s cubic-bezier(.23,1,.32,1),-webkit-transform .4s cubic-bezier(.23,1,.32,1)}ionic-search input::-webkit-input-placeholder{color:#a8b0be}ionic-search input:-ms-input-placeholder{color:#a8b0be}ionic-search input::-ms-input-placeholder{color:#a8b0be}ionic-search input::placeholder{color:#a8b0be}ionic-search .slot .hidden{display:none}ionic-search ul{position:relative;background:#fff;list-style:none;margin-top:4px;margin-bottom:0;border-radius:6px;text-align:left;padding:19px 3px;-webkit-box-shadow:0 8px 16px rgba(0,0,0,.08);box-shadow:0 8px 16px rgba(0,0,0,.08);opacity:0;-webkit-transform:translate3d(0,-50px,0);transform:translate3d(0,-50px,0);-webkit-transition:opacity .2s,-webkit-transform .5s cubic-bezier(.23,1,.32,1);transition:opacity .2s,-webkit-transform .5s cubic-bezier(.23,1,.32,1);transition:transform .5s cubic-bezier(.23,1,.32,1),opacity .2s;transition:transform .5s cubic-bezier(.23,1,.32,1),opacity .2s,-webkit-transform .5s cubic-bezier(.23,1,.32,1)}ionic-search ul strong{display:block;font-weight:600}ionic-search ul span{color:#767d88;font-size:12px}ionic-search ul span em{color:#727a87}ionic-search a,ionic-search ul .no-results{padding:8px 40px;color:#2a2f38}ionic-search a{display:inline-block;font-weight:600;width:100%;-webkit-transition:color .2s,background-color .2s;transition:color .2s,background-color .2s}ionic-search a:hover{color:#3880ff;background-color:#fafafa}ionic-search .searching{position:absolute;height:1px;width:8px;background:#3880ff;top:30px;left:0;-webkit-animation:ionic-search-scan 1s ease-in-out infinite;animation:ionic-search-scan 1s ease-in-out infinite}ionic-search .search-box{position:absolute;left:calc(50% - 330px);width:660px;top:10px;z-index:1;padding-top:2px;pointer-events:none;-webkit-transition:opacity .2s linear;transition:opacity .2s linear}ionic-search .search-box ion-icon{top:17px;font-size:17px;position:absolute}ionic-search .search-box.active{pointer-events:all}ionic-search .search-box.active ul{-webkit-transform:none;transform:none;opacity:1;-webkit-transition-delay:.2s;transition-delay:.2s}ionic-search .search-box.active input{-webkit-transition-delay:.1s;transition-delay:.1s}ionic-search .search-box.active .close,ionic-search .search-box.active .search-static,ionic-search .search-box.active input{-webkit-transform:none;transform:none;opacity:1}ionic-search .search-box.active .close{-webkit-transition-delay:.4s;transition-delay:.4s}ionic-search .backdrop{background:rgba(0,8,24,.4);position:fixed;top:0;right:0;bottom:0;left:0;opacity:0;pointer-events:none;-webkit-transition:all .4s ease;transition:all .4s ease}ionic-search .backdrop.active{opacity:1;pointer-events:all}ionic-search[mobile]{display:block}ionic-search[mobile] .search{color:#999;right:auto;left:0;bottom:0;font-size:28px;padding:22px;top:auto;z-index:3;position:fixed}ionic-search[mobile] .backdrop{top:0;background:rgba(0,0,0,.5);z-index:2}ionic-search[mobile] .search-box{width:auto;left:2px;right:2px;top:42px;bottom:0;padding:60px 12px 48px;position:fixed;z-index:3;background:#fff;border-top-left-radius:12px;border-top-right-radius:12px;-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0);-webkit-transition:-webkit-transform .4s cubic-bezier(.23,1,.32,1);transition:-webkit-transform .4s cubic-bezier(.23,1,.32,1);transition:transform .4s cubic-bezier(.23,1,.32,1);transition:transform .4s cubic-bezier(.23,1,.32,1),-webkit-transform .4s cubic-bezier(.23,1,.32,1)}ionic-search[mobile] .search-box.active{-webkit-transform:none;transform:none}ionic-search[mobile] .mobile-close{-webkit-transition-delay:0;transition-delay:0;left:calc(50% - 24px);top:0;left:0;right:0;position:absolute}ionic-search[mobile] .mobile-close svg{position:absolute;top:8px;width:40px;height:40px;left:calc(50% - 20px)}ionic-search[mobile] .searching{top:113px;z-index:3;-webkit-animation:ionic-search-scan-mobile 1s ease-in-out infinite;animation:ionic-search-scan-mobile 1s ease-in-out infinite}ionic-search[mobile] ul{opacity:1;-webkit-transform:none;transform:none;z-index:3;top:auto;-webkit-box-shadow:none;box-shadow:none;width:100%;max-height:calc(100vh - 154px);overflow:touch}ionic-search[mobile] .search-static{-webkit-transform:none;transform:none;opacity:1;z-index:3;top:71px;left:22px}ionic-search[mobile] a{padding-left:20px;padding-right:20px}ionic-search[mobile] input{margin:0 0 10px;padding:10px 40px 8px;background:#eceef2;border-radius:12px;width:100%}ionic-search[mobile]~.mobile-nav__pane{min-height:100%;background:#fff;-webkit-transition:transform .4s ease,border-radius .4s step-end;transition:transform .4s ease,border-radius .4s step-end}ionic-search[mobile].active~.mobile-nav__pane{border-radius:12px;-webkit-transform:scale3d(.97,.97,1);transform:scale3d(.97,.97,1);-webkit-transition:transform .4s ease;transition:transform .4s ease}.mobile-nav{background:#000!important}\"}}export{s as IonicSearch};"
  },
  {
    "path": "content/js/stencil/ionic-site-components/ehteibio.es5.entry.js",
    "content": "var __awaiter=this&&this.__awaiter||function(t,e,n,i){return new(n||(n=Promise))(function(s,r){function o(t){try{c(i.next(t))}catch(t){r(t)}}function l(t){try{c(i.throw(t))}catch(t){r(t)}}function c(t){t.done?s(t.value):new n(function(e){e(t.value)}).then(o,l)}c((i=i.apply(t,e||[])).next())})},__generator=this&&this.__generator||function(t,e){var n,i,s,r,o={label:0,sent:function(){if(1&s[0])throw s[1];return s[1]},trys:[],ops:[]};return r={next:l(0),throw:l(1),return:l(2)},\"function\"==typeof Symbol&&(r[Symbol.iterator]=function(){return this}),r;function l(r){return function(l){return function(r){if(n)throw new TypeError(\"Generator is already executing.\");for(;o;)try{if(n=1,i&&(s=2&r[0]?i.return:r[0]?i.throw||((s=i.return)&&s.call(i),0):i.next)&&!(s=s.call(i,r[1])).done)return s;switch(i=0,s&&(r=[2&r[0],s.value]),r[0]){case 0:case 1:s=r;break;case 4:return o.label++,{value:r[1],done:!1};case 5:o.label++,i=r[1],r=[0];continue;case 7:r=o.ops.pop(),o.trys.pop();continue;default:if(!(s=(s=o.trys).length>0&&s[s.length-1])&&(6===r[0]||2===r[0])){o=0;continue}if(3===r[0]&&(!s||r[1]>s[0]&&r[1]<s[3])){o.label=r[1];break}if(6===r[0]&&o.label<s[1]){o.label=s[1],s=r;break}if(s&&o.label<s[2]){o.label=s[2],o.ops.push(r);break}s[2]&&o.ops.pop(),o.trys.pop();continue}r=e.call(t,o)}catch(t){r=[6,t],i=0}finally{n=s=0}if(5&r[0])throw r[1];return{value:r[0]?r[1]:void 0,done:!0}}([r,l])}}};IonicSiteComponents.loadBundle(\"ehteibio\",[\"exports\"],function(t){var e=window.IonicSiteComponents.h,n=function(){return e(\"svg\",{version:\"1.1\",xmlns:\"http://www.w3.org/2000/svg\",viewBox:\"0 0 512 512\",preserveAspectRatio:\"\",style:{\"enable-background\":\"new 0 0 512 512\"}},e(\"path\",{d:\"M256,307c-2.4,0-4.8-0.4-7-1.2L78.3,246.3c-11.1-3.9-17-16-13.1-27.1c3.9-11.1,16.1-16.9,27.2-13l157.9,55.1\\n\\tc3.7,1.3,7.7,1.3,11.3,0l157.9-55.1c11.1-3.9,23.3,2,27.2,13c3.9,11.1-2,23.2-13.1,27.1L263,305.8C260.8,306.6,258.4,307,256,307z\"}))},i=function(){function t(){this.active=!1,this.query=\"\",this.pending=0,this.results=null,this.dragY=null,this.startY=null,this.screenHeight=null,this.URLS=function(){var t=\"https://api.swiftype.com/api/v1/public/engines/\",e=\"9oVyaKGPzxoZAyUo9Sm8\";return{autocomplete:function(n){return t+\"suggest.json?q=\"+n+\"&engine_key=\"+e},search:function(n){return t+\"search.json?q=\"+n+\"&engine_key=\"+e}}},this.activate=this.activate.bind(this),this.close=this.close.bind(this),this.onKeyUp=this.onKeyUp.bind(this),this.touchStart=this.touchStart.bind(this),this.touchMove=this.touchMove.bind(this),this.touchEnd=this.touchEnd.bind(this),this.urls=this.URLS()}return t.prototype.activate=function(){var t=this;this.active=!0,this.el.classList.add(\"active\"),setTimeout(function(){t.el.querySelector(\"input\").focus()},500,this)},t.prototype.close=function(){var t=this;this.active=!1,this.el.classList.remove(\"active\"),this.el.querySelector(\"input\").blur(),setTimeout(function(){t.el.querySelector(\"input\").value=\"\",t.results=null},500,this)},t.prototype.onKeyUp=function(t){return __awaiter(this,void 0,void 0,function(){var e;return __generator(this,function(n){switch(n.label){case 0:return 27===t.keyCode?(this.close(),[2]):t.target.value.length<3?(this.results=null,[2]):(this.query=t.target.value,this.pending++,[4,fetch(this.urls.autocomplete(this.query))]);case 1:return[4,n.sent().json()];case 2:return e=n.sent(),this.pending--,this.results=e.records.page,[2]}})})},t.prototype.touchStart=function(t){this.screenHeight=window.innerHeight||document.documentElement.clientHeight||document.body.clientHeight,this.startY=Math.round(t.touches.item(0).screenY)},t.prototype.touchMove=function(t){t.preventDefault(),this.dragY=Math.max(0,Math.round((t.touches.item(0).screenY-this.startY)/this.screenHeight*100)),this.dragStyles={transitionDuration:\".1s\",transform:\"translate3d(0, \"+this.dragY+\"%, 0)\"}},t.prototype.isFirefox=function(){return-1!=navigator.userAgent.indexOf(\"Firefox\")},t.prototype.touchEnd=function(){this.dragY>30&&this.close(),this.dragY=null,this.startY=null,this.dragStyles={}},t.prototype.render=function(){var t=this;return[e(\"div\",{class:\"search-box\"+(this.active?\" active\":\"\"),style:this.dragStyles,onTouchMove:function(e){return t.results&&t.results.length>5?null:e.preventDefault()}},e(\"input\",{type:\"text\",onKeyUp:this.onKeyUp,placeholder:\"Search Ionic..\"}),e(\"ion-icon\",{class:\"search-static \"+(this.active?\" active\":\"\"),name:\"md-search\"}),this.mobile&&!this.isFirefox()?e(\"div\",{class:\"mobile-close\",onClick:this.close,onTouchStart:this.touchStart,onTouchMove:this.touchMove,onTouchEnd:this.touchEnd},e(n,null)):e(\"ion-icon\",{class:\"close \"+(this.active?\" active\":\"\"),name:\"md-close\",onClick:this.close}),null!==this.results?e(\"ul\",null,this.results.map(function(t){return e(\"li\",null,e(\"a\",{href:t.url,title:t.title},e(\"strong\",null,t.title),e(\"span\",{innerHTML:t.highlight.sections})))}),0===this.results.length?e(\"li\",null,e(\"span\",{class:\"no-results\"},\"No results\")):null):null,e(\"div\",{class:\"slot \"+(null===this.results?\"\":\"hidden\")},e(\"slot\",null)),this.pending>0?e(\"span\",{class:\"searching\"}):null),e(\"ion-icon\",{class:\"search \"+(this.active?\" active\":\"\"),name:\"md-search\",onClick:this.active?null:this.activate}),e(\"div\",{class:\"backdrop \"+(this.active?\"active\":null),onClick:this.close})]},Object.defineProperty(t,\"is\",{get:function(){return\"ionic-search\"},enumerable:!0,configurable:!0}),Object.defineProperty(t,\"properties\",{get:function(){return{active:{state:!0},dragStyles:{state:!0},el:{elementRef:!0},mobile:{type:Boolean,attr:\"mobile\"},pending:{state:!0},query:{state:!0},results:{state:!0}}},enumerable:!0,configurable:!0}),Object.defineProperty(t,\"style\",{get:function(){return\"\\@-webkit-keyframes ionic-search-scan{0%{left:0}to{left:100%}}\\@keyframes ionic-search-scan{0%{left:0}to{left:100%}}\\@-webkit-keyframes ionic-search-scan-mobile{0%{left:calc(0% + 8px)}to{left:calc(100% - 16px)}}\\@keyframes ionic-search-scan-mobile{0%{left:calc(0% + 8px)}to{left:calc(100% - 16px)}}ionic-search{display:block;display:inline-block}ionic-search svg{fill:#727a87}ionic-search ion-icon{font-size:18px;cursor:pointer}ionic-search ion-icon:hover svg{fill:#3880ff}ionic-search .search{right:115px;font-size:18px;margin-top:7px;color:#fff;-webkit-transition:opacity .2s,-webkit-transform .4s cubic-bezier(.23,1,.32,1);transition:opacity .2s,-webkit-transform .4s cubic-bezier(.23,1,.32,1);transition:opacity .2s,transform .4s cubic-bezier(.23,1,.32,1);transition:opacity .2s,transform .4s cubic-bezier(.23,1,.32,1),-webkit-transform .4s cubic-bezier(.23,1,.32,1)}ionic-search .search.active{cursor:default;opacity:0;-webkit-transform:scale3d(0,0,1);transform:scale3d(0,0,1)}ionic-search .search svg{fill:#a8b0be;width:18px;height:18px}ionic-search .search-static{left:15px;z-index:2;opacity:0;-webkit-transform:translate3d(0,-25px,0);transform:translate3d(0,-25px,0);-webkit-transition:opacity .1s,-webkit-transform .4s cubic-bezier(.23,1,.32,1);transition:opacity .1s,-webkit-transform .4s cubic-bezier(.23,1,.32,1);transition:transform .4s cubic-bezier(.23,1,.32,1),opacity .1s;transition:transform .4s cubic-bezier(.23,1,.32,1),opacity .1s,-webkit-transform .4s cubic-bezier(.23,1,.32,1)}ionic-search .close{right:11px;z-index:2;opacity:0;pointer-events:none;-webkit-transition:opacity .3s;transition:opacity .3s}ionic-search .close.active{pointer-events:all;opacity:1;-webkit-transform:none;transform:none}ionic-search input{width:100%;margin-left:0;padding-left:40px;padding-right:40px;outline:none;border:none;z-index:2;background:#fff;border-radius:6px;padding:14px 30px 14px 41px;font-size:14px;letter-spacing:-.01em;position:relative;opacity:0;-webkit-transform:translate3d(0,-15px,0);transform:translate3d(0,-15px,0);-webkit-transition:opacity .2s,-webkit-transform .4s cubic-bezier(.23,1,.32,1);transition:opacity .2s,-webkit-transform .4s cubic-bezier(.23,1,.32,1);transition:opacity .2s,transform .4s cubic-bezier(.23,1,.32,1);transition:opacity .2s,transform .4s cubic-bezier(.23,1,.32,1),-webkit-transform .4s cubic-bezier(.23,1,.32,1)}ionic-search input::-webkit-input-placeholder{color:#a8b0be}ionic-search input:-ms-input-placeholder{color:#a8b0be}ionic-search input::-ms-input-placeholder{color:#a8b0be}ionic-search input::placeholder{color:#a8b0be}ionic-search .slot .hidden{display:none}ionic-search ul{position:relative;background:#fff;list-style:none;margin-top:4px;margin-bottom:0;border-radius:6px;text-align:left;padding:19px 3px;-webkit-box-shadow:0 8px 16px rgba(0,0,0,.08);box-shadow:0 8px 16px rgba(0,0,0,.08);opacity:0;-webkit-transform:translate3d(0,-50px,0);transform:translate3d(0,-50px,0);-webkit-transition:opacity .2s,-webkit-transform .5s cubic-bezier(.23,1,.32,1);transition:opacity .2s,-webkit-transform .5s cubic-bezier(.23,1,.32,1);transition:transform .5s cubic-bezier(.23,1,.32,1),opacity .2s;transition:transform .5s cubic-bezier(.23,1,.32,1),opacity .2s,-webkit-transform .5s cubic-bezier(.23,1,.32,1)}ionic-search ul strong{display:block;font-weight:600}ionic-search ul span{color:#767d88;font-size:12px}ionic-search ul span em{color:#727a87}ionic-search a,ionic-search ul .no-results{padding:8px 40px;color:#2a2f38}ionic-search a{display:inline-block;font-weight:600;width:100%;-webkit-transition:color .2s,background-color .2s;transition:color .2s,background-color .2s}ionic-search a:hover{color:#3880ff;background-color:#fafafa}ionic-search .searching{position:absolute;height:1px;width:8px;background:#3880ff;top:30px;left:0;-webkit-animation:ionic-search-scan 1s ease-in-out infinite;animation:ionic-search-scan 1s ease-in-out infinite}ionic-search .search-box{position:absolute;left:calc(50% - 330px);width:660px;top:10px;z-index:1;padding-top:2px;pointer-events:none;-webkit-transition:opacity .2s linear;transition:opacity .2s linear}ionic-search .search-box ion-icon{top:17px;font-size:17px;position:absolute}ionic-search .search-box.active{pointer-events:all}ionic-search .search-box.active ul{-webkit-transform:none;transform:none;opacity:1;-webkit-transition-delay:.2s;transition-delay:.2s}ionic-search .search-box.active input{-webkit-transition-delay:.1s;transition-delay:.1s}ionic-search .search-box.active .close,ionic-search .search-box.active .search-static,ionic-search .search-box.active input{-webkit-transform:none;transform:none;opacity:1}ionic-search .search-box.active .close{-webkit-transition-delay:.4s;transition-delay:.4s}ionic-search .backdrop{background:rgba(0,8,24,.4);position:fixed;top:0;right:0;bottom:0;left:0;opacity:0;pointer-events:none;-webkit-transition:all .4s ease;transition:all .4s ease}ionic-search .backdrop.active{opacity:1;pointer-events:all}ionic-search[mobile]{display:block}ionic-search[mobile] .search{color:#999;right:auto;left:0;bottom:0;font-size:28px;padding:22px;top:auto;z-index:3;position:fixed}ionic-search[mobile] .backdrop{top:0;background:rgba(0,0,0,.5);z-index:2}ionic-search[mobile] .search-box{width:auto;left:2px;right:2px;top:42px;bottom:0;padding:60px 12px 48px;position:fixed;z-index:3;background:#fff;border-top-left-radius:12px;border-top-right-radius:12px;-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0);-webkit-transition:-webkit-transform .4s cubic-bezier(.23,1,.32,1);transition:-webkit-transform .4s cubic-bezier(.23,1,.32,1);transition:transform .4s cubic-bezier(.23,1,.32,1);transition:transform .4s cubic-bezier(.23,1,.32,1),-webkit-transform .4s cubic-bezier(.23,1,.32,1)}ionic-search[mobile] .search-box.active{-webkit-transform:none;transform:none}ionic-search[mobile] .mobile-close{-webkit-transition-delay:0;transition-delay:0;left:calc(50% - 24px);top:0;left:0;right:0;position:absolute}ionic-search[mobile] .mobile-close svg{position:absolute;top:8px;width:40px;height:40px;left:calc(50% - 20px)}ionic-search[mobile] .searching{top:113px;z-index:3;-webkit-animation:ionic-search-scan-mobile 1s ease-in-out infinite;animation:ionic-search-scan-mobile 1s ease-in-out infinite}ionic-search[mobile] ul{opacity:1;-webkit-transform:none;transform:none;z-index:3;top:auto;-webkit-box-shadow:none;box-shadow:none;width:100%;max-height:calc(100vh - 154px);overflow:touch}ionic-search[mobile] .search-static{-webkit-transform:none;transform:none;opacity:1;z-index:3;top:71px;left:22px}ionic-search[mobile] a{padding-left:20px;padding-right:20px}ionic-search[mobile] input{margin:0 0 10px;padding:10px 40px 8px;background:#eceef2;border-radius:12px;width:100%}ionic-search[mobile]~.mobile-nav__pane{min-height:100%;background:#fff;-webkit-transition:transform .4s ease,border-radius .4s step-end;transition:transform .4s ease,border-radius .4s step-end}ionic-search[mobile].active~.mobile-nav__pane{border-radius:12px;-webkit-transform:scale3d(.97,.97,1);transform:scale3d(.97,.97,1);-webkit-transition:transform .4s ease;transition:transform .4s ease}.mobile-nav{background:#000!important}\"},enumerable:!0,configurable:!0}),t}();t.IonicSearch=i,Object.defineProperty(t,\"__esModule\",{value:!0})});"
  },
  {
    "path": "content/js/stencil/ionic-site-components/ehteibio.sc.entry.js",
    "content": "const t=window.IonicSiteComponents.h,e=()=>t(\"svg\",{version:\"1.1\",xmlns:\"http://www.w3.org/2000/svg\",viewBox:\"0 0 512 512\",preserveAspectRatio:\"\",style:{\"enable-background\":\"new 0 0 512 512\"}},t(\"path\",{d:\"M256,307c-2.4,0-4.8-0.4-7-1.2L78.3,246.3c-11.1-3.9-17-16-13.1-27.1c3.9-11.1,16.1-16.9,27.2-13l157.9,55.1\\n\\tc3.7,1.3,7.7,1.3,11.3,0l157.9-55.1c11.1-3.9,23.3,2,27.2,13c3.9,11.1-2,23.2-13.1,27.1L263,305.8C260.8,306.6,258.4,307,256,307z\"}));class s{constructor(){this.active=!1,this.query=\"\",this.pending=0,this.results=null,this.dragY=null,this.startY=null,this.screenHeight=null,this.URLS=(()=>{const t=\"https://api.swiftype.com/api/v1/public/engines/\",e=\"9oVyaKGPzxoZAyUo9Sm8\";return{autocomplete:s=>`${t}suggest.json?q=${s}&engine_key=${e}`,search:s=>`${t}search.json?q=${s}&engine_key=${e}`}}),this.activate=this.activate.bind(this),this.close=this.close.bind(this),this.onKeyUp=this.onKeyUp.bind(this),this.touchStart=this.touchStart.bind(this),this.touchMove=this.touchMove.bind(this),this.touchEnd=this.touchEnd.bind(this),this.urls=this.URLS()}activate(){this.active=!0,this.el.classList.add(\"active\"),setTimeout(()=>{this.el.querySelector(\"input\").focus()},500,this)}close(){this.active=!1,this.el.classList.remove(\"active\"),this.el.querySelector(\"input\").blur(),setTimeout(()=>{this.el.querySelector(\"input\").value=\"\",this.results=null},500,this)}async onKeyUp(t){if(27===t.keyCode)return void this.close();if(t.target.value.length<3)return void(this.results=null);this.query=t.target.value,this.pending++;const e=await fetch(this.urls.autocomplete(this.query)),s=await e.json();this.pending--,this.results=s.records.page}touchStart(t){this.screenHeight=window.innerHeight||document.documentElement.clientHeight||document.body.clientHeight,this.startY=Math.round(t.touches.item(0).screenY)}touchMove(t){t.preventDefault(),this.dragY=Math.max(0,Math.round((t.touches.item(0).screenY-this.startY)/this.screenHeight*100)),this.dragStyles={transitionDuration:\".1s\",transform:`translate3d(0, ${this.dragY}%, 0)`}}isFirefox(){return-1!=navigator.userAgent.indexOf(\"Firefox\")}touchEnd(){this.dragY>30&&this.close(),this.dragY=null,this.startY=null,this.dragStyles={}}render(){return[t(\"div\",{class:`search-box${this.active?\" active\":\"\"}`,style:this.dragStyles,onTouchMove:t=>this.results&&this.results.length>5?null:t.preventDefault()},t(\"input\",{type:\"text\",onKeyUp:this.onKeyUp,placeholder:\"Search Ionic..\"}),t(\"ion-icon\",{class:`search-static ${this.active?\" active\":\"\"}`,name:\"md-search\"}),this.mobile&&!this.isFirefox()?t(\"div\",{class:\"mobile-close\",onClick:this.close,onTouchStart:this.touchStart,onTouchMove:this.touchMove,onTouchEnd:this.touchEnd},t(e,null)):t(\"ion-icon\",{class:`close ${this.active?\" active\":\"\"}`,name:\"md-close\",onClick:this.close}),null!==this.results?t(\"ul\",null,this.results.map(e=>t(\"li\",null,t(\"a\",{href:e.url,title:e.title},t(\"strong\",null,e.title),t(\"span\",{innerHTML:e.highlight.sections})))),0===this.results.length?t(\"li\",null,t(\"span\",{class:\"no-results\"},\"No results\")):null):null,t(\"div\",{class:`slot ${null===this.results?\"\":\"hidden\"}`},t(\"slot\",null)),this.pending>0?t(\"span\",{class:\"searching\"}):null),t(\"ion-icon\",{class:`search ${this.active?\" active\":\"\"}`,name:\"md-search\",onClick:this.active?null:this.activate}),t(\"div\",{class:`backdrop ${this.active?\"active\":null}`,onClick:this.close})]}static get is(){return\"ionic-search\"}static get properties(){return{active:{state:!0},dragStyles:{state:!0},el:{elementRef:!0},mobile:{type:Boolean,attr:\"mobile\"},pending:{state:!0},query:{state:!0},results:{state:!0}}}static get style(){return\"\\@-webkit-keyframes ionic-search-scan{0%{left:0}to{left:100%}}\\@keyframes ionic-search-scan{0%{left:0}to{left:100%}}\\@-webkit-keyframes ionic-search-scan-mobile{0%{left:calc(0% + 8px)}to{left:calc(100% - 16px)}}\\@keyframes ionic-search-scan-mobile{0%{left:calc(0% + 8px)}to{left:calc(100% - 16px)}}ionic-search{display:block;display:inline-block}ionic-search svg{fill:#727a87}ionic-search ion-icon{font-size:18px;cursor:pointer}ionic-search ion-icon:hover svg{fill:#3880ff}ionic-search .search{right:115px;font-size:18px;margin-top:7px;color:#fff;-webkit-transition:opacity .2s,-webkit-transform .4s cubic-bezier(.23,1,.32,1);transition:opacity .2s,-webkit-transform .4s cubic-bezier(.23,1,.32,1);transition:opacity .2s,transform .4s cubic-bezier(.23,1,.32,1);transition:opacity .2s,transform .4s cubic-bezier(.23,1,.32,1),-webkit-transform .4s cubic-bezier(.23,1,.32,1)}ionic-search .search.active{cursor:default;opacity:0;-webkit-transform:scale3d(0,0,1);transform:scale3d(0,0,1)}ionic-search .search svg{fill:#a8b0be;width:18px;height:18px}ionic-search .search-static{left:15px;z-index:2;opacity:0;-webkit-transform:translate3d(0,-25px,0);transform:translate3d(0,-25px,0);-webkit-transition:opacity .1s,-webkit-transform .4s cubic-bezier(.23,1,.32,1);transition:opacity .1s,-webkit-transform .4s cubic-bezier(.23,1,.32,1);transition:transform .4s cubic-bezier(.23,1,.32,1),opacity .1s;transition:transform .4s cubic-bezier(.23,1,.32,1),opacity .1s,-webkit-transform .4s cubic-bezier(.23,1,.32,1)}ionic-search .close{right:11px;z-index:2;opacity:0;pointer-events:none;-webkit-transition:opacity .3s;transition:opacity .3s}ionic-search .close.active{pointer-events:all;opacity:1;-webkit-transform:none;transform:none}ionic-search input{width:100%;margin-left:0;padding-left:40px;padding-right:40px;outline:none;border:none;z-index:2;background:#fff;border-radius:6px;padding:14px 30px 14px 41px;font-size:14px;letter-spacing:-.01em;position:relative;opacity:0;-webkit-transform:translate3d(0,-15px,0);transform:translate3d(0,-15px,0);-webkit-transition:opacity .2s,-webkit-transform .4s cubic-bezier(.23,1,.32,1);transition:opacity .2s,-webkit-transform .4s cubic-bezier(.23,1,.32,1);transition:opacity .2s,transform .4s cubic-bezier(.23,1,.32,1);transition:opacity .2s,transform .4s cubic-bezier(.23,1,.32,1),-webkit-transform .4s cubic-bezier(.23,1,.32,1)}ionic-search input::-webkit-input-placeholder{color:#a8b0be}ionic-search input:-ms-input-placeholder{color:#a8b0be}ionic-search input::-ms-input-placeholder{color:#a8b0be}ionic-search input::placeholder{color:#a8b0be}ionic-search .slot .hidden{display:none}ionic-search ul{position:relative;background:#fff;list-style:none;margin-top:4px;margin-bottom:0;border-radius:6px;text-align:left;padding:19px 3px;-webkit-box-shadow:0 8px 16px rgba(0,0,0,.08);box-shadow:0 8px 16px rgba(0,0,0,.08);opacity:0;-webkit-transform:translate3d(0,-50px,0);transform:translate3d(0,-50px,0);-webkit-transition:opacity .2s,-webkit-transform .5s cubic-bezier(.23,1,.32,1);transition:opacity .2s,-webkit-transform .5s cubic-bezier(.23,1,.32,1);transition:transform .5s cubic-bezier(.23,1,.32,1),opacity .2s;transition:transform .5s cubic-bezier(.23,1,.32,1),opacity .2s,-webkit-transform .5s cubic-bezier(.23,1,.32,1)}ionic-search ul strong{display:block;font-weight:600}ionic-search ul span{color:#767d88;font-size:12px}ionic-search ul span em{color:#727a87}ionic-search a,ionic-search ul .no-results{padding:8px 40px;color:#2a2f38}ionic-search a{display:inline-block;font-weight:600;width:100%;-webkit-transition:color .2s,background-color .2s;transition:color .2s,background-color .2s}ionic-search a:hover{color:#3880ff;background-color:#fafafa}ionic-search .searching{position:absolute;height:1px;width:8px;background:#3880ff;top:30px;left:0;-webkit-animation:ionic-search-scan 1s ease-in-out infinite;animation:ionic-search-scan 1s ease-in-out infinite}ionic-search .search-box{position:absolute;left:calc(50% - 330px);width:660px;top:10px;z-index:1;padding-top:2px;pointer-events:none;-webkit-transition:opacity .2s linear;transition:opacity .2s linear}ionic-search .search-box ion-icon{top:17px;font-size:17px;position:absolute}ionic-search .search-box.active{pointer-events:all}ionic-search .search-box.active ul{-webkit-transform:none;transform:none;opacity:1;-webkit-transition-delay:.2s;transition-delay:.2s}ionic-search .search-box.active input{-webkit-transition-delay:.1s;transition-delay:.1s}ionic-search .search-box.active .close,ionic-search .search-box.active .search-static,ionic-search .search-box.active input{-webkit-transform:none;transform:none;opacity:1}ionic-search .search-box.active .close{-webkit-transition-delay:.4s;transition-delay:.4s}ionic-search .backdrop{background:rgba(0,8,24,.4);position:fixed;top:0;right:0;bottom:0;left:0;opacity:0;pointer-events:none;-webkit-transition:all .4s ease;transition:all .4s ease}ionic-search .backdrop.active{opacity:1;pointer-events:all}ionic-search[mobile]{display:block}ionic-search[mobile] .search{color:#999;right:auto;left:0;bottom:0;font-size:28px;padding:22px;top:auto;z-index:3;position:fixed}ionic-search[mobile] .backdrop{top:0;background:rgba(0,0,0,.5);z-index:2}ionic-search[mobile] .search-box{width:auto;left:2px;right:2px;top:42px;bottom:0;padding:60px 12px 48px;position:fixed;z-index:3;background:#fff;border-top-left-radius:12px;border-top-right-radius:12px;-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0);-webkit-transition:-webkit-transform .4s cubic-bezier(.23,1,.32,1);transition:-webkit-transform .4s cubic-bezier(.23,1,.32,1);transition:transform .4s cubic-bezier(.23,1,.32,1);transition:transform .4s cubic-bezier(.23,1,.32,1),-webkit-transform .4s cubic-bezier(.23,1,.32,1)}ionic-search[mobile] .search-box.active{-webkit-transform:none;transform:none}ionic-search[mobile] .mobile-close{-webkit-transition-delay:0;transition-delay:0;left:calc(50% - 24px);top:0;left:0;right:0;position:absolute}ionic-search[mobile] .mobile-close svg{position:absolute;top:8px;width:40px;height:40px;left:calc(50% - 20px)}ionic-search[mobile] .searching{top:113px;z-index:3;-webkit-animation:ionic-search-scan-mobile 1s ease-in-out infinite;animation:ionic-search-scan-mobile 1s ease-in-out infinite}ionic-search[mobile] ul{opacity:1;-webkit-transform:none;transform:none;z-index:3;top:auto;-webkit-box-shadow:none;box-shadow:none;width:100%;max-height:calc(100vh - 154px);overflow:touch}ionic-search[mobile] .search-static{-webkit-transform:none;transform:none;opacity:1;z-index:3;top:71px;left:22px}ionic-search[mobile] a{padding-left:20px;padding-right:20px}ionic-search[mobile] input{margin:0 0 10px;padding:10px 40px 8px;background:#eceef2;border-radius:12px;width:100%}ionic-search[mobile]~.mobile-nav__pane{min-height:100%;background:#fff;-webkit-transition:transform .4s ease,border-radius .4s step-end;transition:transform .4s ease,border-radius .4s step-end}ionic-search[mobile].active~.mobile-nav__pane{border-radius:12px;-webkit-transform:scale3d(.97,.97,1);transform:scale3d(.97,.97,1);-webkit-transition:transform .4s ease;transition:transform .4s ease}.mobile-nav{background:#000!important}\"}}export{s as IonicSearch};"
  },
  {
    "path": "content/js/stencil/ionic-site-components/ehteibio.sc.es5.entry.js",
    "content": "var __awaiter=this&&this.__awaiter||function(t,e,n,i){return new(n||(n=Promise))(function(s,r){function o(t){try{c(i.next(t))}catch(t){r(t)}}function l(t){try{c(i.throw(t))}catch(t){r(t)}}function c(t){t.done?s(t.value):new n(function(e){e(t.value)}).then(o,l)}c((i=i.apply(t,e||[])).next())})},__generator=this&&this.__generator||function(t,e){var n,i,s,r,o={label:0,sent:function(){if(1&s[0])throw s[1];return s[1]},trys:[],ops:[]};return r={next:l(0),throw:l(1),return:l(2)},\"function\"==typeof Symbol&&(r[Symbol.iterator]=function(){return this}),r;function l(r){return function(l){return function(r){if(n)throw new TypeError(\"Generator is already executing.\");for(;o;)try{if(n=1,i&&(s=2&r[0]?i.return:r[0]?i.throw||((s=i.return)&&s.call(i),0):i.next)&&!(s=s.call(i,r[1])).done)return s;switch(i=0,s&&(r=[2&r[0],s.value]),r[0]){case 0:case 1:s=r;break;case 4:return o.label++,{value:r[1],done:!1};case 5:o.label++,i=r[1],r=[0];continue;case 7:r=o.ops.pop(),o.trys.pop();continue;default:if(!(s=(s=o.trys).length>0&&s[s.length-1])&&(6===r[0]||2===r[0])){o=0;continue}if(3===r[0]&&(!s||r[1]>s[0]&&r[1]<s[3])){o.label=r[1];break}if(6===r[0]&&o.label<s[1]){o.label=s[1],s=r;break}if(s&&o.label<s[2]){o.label=s[2],o.ops.push(r);break}s[2]&&o.ops.pop(),o.trys.pop();continue}r=e.call(t,o)}catch(t){r=[6,t],i=0}finally{n=s=0}if(5&r[0])throw r[1];return{value:r[0]?r[1]:void 0,done:!0}}([r,l])}}};IonicSiteComponents.loadBundle(\"ehteibio\",[\"exports\"],function(t){var e=window.IonicSiteComponents.h,n=function(){return e(\"svg\",{version:\"1.1\",xmlns:\"http://www.w3.org/2000/svg\",viewBox:\"0 0 512 512\",preserveAspectRatio:\"\",style:{\"enable-background\":\"new 0 0 512 512\"}},e(\"path\",{d:\"M256,307c-2.4,0-4.8-0.4-7-1.2L78.3,246.3c-11.1-3.9-17-16-13.1-27.1c3.9-11.1,16.1-16.9,27.2-13l157.9,55.1\\n\\tc3.7,1.3,7.7,1.3,11.3,0l157.9-55.1c11.1-3.9,23.3,2,27.2,13c3.9,11.1-2,23.2-13.1,27.1L263,305.8C260.8,306.6,258.4,307,256,307z\"}))},i=function(){function t(){this.active=!1,this.query=\"\",this.pending=0,this.results=null,this.dragY=null,this.startY=null,this.screenHeight=null,this.URLS=function(){var t=\"https://api.swiftype.com/api/v1/public/engines/\",e=\"9oVyaKGPzxoZAyUo9Sm8\";return{autocomplete:function(n){return t+\"suggest.json?q=\"+n+\"&engine_key=\"+e},search:function(n){return t+\"search.json?q=\"+n+\"&engine_key=\"+e}}},this.activate=this.activate.bind(this),this.close=this.close.bind(this),this.onKeyUp=this.onKeyUp.bind(this),this.touchStart=this.touchStart.bind(this),this.touchMove=this.touchMove.bind(this),this.touchEnd=this.touchEnd.bind(this),this.urls=this.URLS()}return t.prototype.activate=function(){var t=this;this.active=!0,this.el.classList.add(\"active\"),setTimeout(function(){t.el.querySelector(\"input\").focus()},500,this)},t.prototype.close=function(){var t=this;this.active=!1,this.el.classList.remove(\"active\"),this.el.querySelector(\"input\").blur(),setTimeout(function(){t.el.querySelector(\"input\").value=\"\",t.results=null},500,this)},t.prototype.onKeyUp=function(t){return __awaiter(this,void 0,void 0,function(){var e;return __generator(this,function(n){switch(n.label){case 0:return 27===t.keyCode?(this.close(),[2]):t.target.value.length<3?(this.results=null,[2]):(this.query=t.target.value,this.pending++,[4,fetch(this.urls.autocomplete(this.query))]);case 1:return[4,n.sent().json()];case 2:return e=n.sent(),this.pending--,this.results=e.records.page,[2]}})})},t.prototype.touchStart=function(t){this.screenHeight=window.innerHeight||document.documentElement.clientHeight||document.body.clientHeight,this.startY=Math.round(t.touches.item(0).screenY)},t.prototype.touchMove=function(t){t.preventDefault(),this.dragY=Math.max(0,Math.round((t.touches.item(0).screenY-this.startY)/this.screenHeight*100)),this.dragStyles={transitionDuration:\".1s\",transform:\"translate3d(0, \"+this.dragY+\"%, 0)\"}},t.prototype.isFirefox=function(){return-1!=navigator.userAgent.indexOf(\"Firefox\")},t.prototype.touchEnd=function(){this.dragY>30&&this.close(),this.dragY=null,this.startY=null,this.dragStyles={}},t.prototype.render=function(){var t=this;return[e(\"div\",{class:\"search-box\"+(this.active?\" active\":\"\"),style:this.dragStyles,onTouchMove:function(e){return t.results&&t.results.length>5?null:e.preventDefault()}},e(\"input\",{type:\"text\",onKeyUp:this.onKeyUp,placeholder:\"Search Ionic..\"}),e(\"ion-icon\",{class:\"search-static \"+(this.active?\" active\":\"\"),name:\"md-search\"}),this.mobile&&!this.isFirefox()?e(\"div\",{class:\"mobile-close\",onClick:this.close,onTouchStart:this.touchStart,onTouchMove:this.touchMove,onTouchEnd:this.touchEnd},e(n,null)):e(\"ion-icon\",{class:\"close \"+(this.active?\" active\":\"\"),name:\"md-close\",onClick:this.close}),null!==this.results?e(\"ul\",null,this.results.map(function(t){return e(\"li\",null,e(\"a\",{href:t.url,title:t.title},e(\"strong\",null,t.title),e(\"span\",{innerHTML:t.highlight.sections})))}),0===this.results.length?e(\"li\",null,e(\"span\",{class:\"no-results\"},\"No results\")):null):null,e(\"div\",{class:\"slot \"+(null===this.results?\"\":\"hidden\")},e(\"slot\",null)),this.pending>0?e(\"span\",{class:\"searching\"}):null),e(\"ion-icon\",{class:\"search \"+(this.active?\" active\":\"\"),name:\"md-search\",onClick:this.active?null:this.activate}),e(\"div\",{class:\"backdrop \"+(this.active?\"active\":null),onClick:this.close})]},Object.defineProperty(t,\"is\",{get:function(){return\"ionic-search\"},enumerable:!0,configurable:!0}),Object.defineProperty(t,\"properties\",{get:function(){return{active:{state:!0},dragStyles:{state:!0},el:{elementRef:!0},mobile:{type:Boolean,attr:\"mobile\"},pending:{state:!0},query:{state:!0},results:{state:!0}}},enumerable:!0,configurable:!0}),Object.defineProperty(t,\"style\",{get:function(){return\"\\@-webkit-keyframes ionic-search-scan{0%{left:0}to{left:100%}}\\@keyframes ionic-search-scan{0%{left:0}to{left:100%}}\\@-webkit-keyframes ionic-search-scan-mobile{0%{left:calc(0% + 8px)}to{left:calc(100% - 16px)}}\\@keyframes ionic-search-scan-mobile{0%{left:calc(0% + 8px)}to{left:calc(100% - 16px)}}ionic-search{display:block;display:inline-block}ionic-search svg{fill:#727a87}ionic-search ion-icon{font-size:18px;cursor:pointer}ionic-search ion-icon:hover svg{fill:#3880ff}ionic-search .search{right:115px;font-size:18px;margin-top:7px;color:#fff;-webkit-transition:opacity .2s,-webkit-transform .4s cubic-bezier(.23,1,.32,1);transition:opacity .2s,-webkit-transform .4s cubic-bezier(.23,1,.32,1);transition:opacity .2s,transform .4s cubic-bezier(.23,1,.32,1);transition:opacity .2s,transform .4s cubic-bezier(.23,1,.32,1),-webkit-transform .4s cubic-bezier(.23,1,.32,1)}ionic-search .search.active{cursor:default;opacity:0;-webkit-transform:scale3d(0,0,1);transform:scale3d(0,0,1)}ionic-search .search svg{fill:#a8b0be;width:18px;height:18px}ionic-search .search-static{left:15px;z-index:2;opacity:0;-webkit-transform:translate3d(0,-25px,0);transform:translate3d(0,-25px,0);-webkit-transition:opacity .1s,-webkit-transform .4s cubic-bezier(.23,1,.32,1);transition:opacity .1s,-webkit-transform .4s cubic-bezier(.23,1,.32,1);transition:transform .4s cubic-bezier(.23,1,.32,1),opacity .1s;transition:transform .4s cubic-bezier(.23,1,.32,1),opacity .1s,-webkit-transform .4s cubic-bezier(.23,1,.32,1)}ionic-search .close{right:11px;z-index:2;opacity:0;pointer-events:none;-webkit-transition:opacity .3s;transition:opacity .3s}ionic-search .close.active{pointer-events:all;opacity:1;-webkit-transform:none;transform:none}ionic-search input{width:100%;margin-left:0;padding-left:40px;padding-right:40px;outline:none;border:none;z-index:2;background:#fff;border-radius:6px;padding:14px 30px 14px 41px;font-size:14px;letter-spacing:-.01em;position:relative;opacity:0;-webkit-transform:translate3d(0,-15px,0);transform:translate3d(0,-15px,0);-webkit-transition:opacity .2s,-webkit-transform .4s cubic-bezier(.23,1,.32,1);transition:opacity .2s,-webkit-transform .4s cubic-bezier(.23,1,.32,1);transition:opacity .2s,transform .4s cubic-bezier(.23,1,.32,1);transition:opacity .2s,transform .4s cubic-bezier(.23,1,.32,1),-webkit-transform .4s cubic-bezier(.23,1,.32,1)}ionic-search input::-webkit-input-placeholder{color:#a8b0be}ionic-search input:-ms-input-placeholder{color:#a8b0be}ionic-search input::-ms-input-placeholder{color:#a8b0be}ionic-search input::placeholder{color:#a8b0be}ionic-search .slot .hidden{display:none}ionic-search ul{position:relative;background:#fff;list-style:none;margin-top:4px;margin-bottom:0;border-radius:6px;text-align:left;padding:19px 3px;-webkit-box-shadow:0 8px 16px rgba(0,0,0,.08);box-shadow:0 8px 16px rgba(0,0,0,.08);opacity:0;-webkit-transform:translate3d(0,-50px,0);transform:translate3d(0,-50px,0);-webkit-transition:opacity .2s,-webkit-transform .5s cubic-bezier(.23,1,.32,1);transition:opacity .2s,-webkit-transform .5s cubic-bezier(.23,1,.32,1);transition:transform .5s cubic-bezier(.23,1,.32,1),opacity .2s;transition:transform .5s cubic-bezier(.23,1,.32,1),opacity .2s,-webkit-transform .5s cubic-bezier(.23,1,.32,1)}ionic-search ul strong{display:block;font-weight:600}ionic-search ul span{color:#767d88;font-size:12px}ionic-search ul span em{color:#727a87}ionic-search a,ionic-search ul .no-results{padding:8px 40px;color:#2a2f38}ionic-search a{display:inline-block;font-weight:600;width:100%;-webkit-transition:color .2s,background-color .2s;transition:color .2s,background-color .2s}ionic-search a:hover{color:#3880ff;background-color:#fafafa}ionic-search .searching{position:absolute;height:1px;width:8px;background:#3880ff;top:30px;left:0;-webkit-animation:ionic-search-scan 1s ease-in-out infinite;animation:ionic-search-scan 1s ease-in-out infinite}ionic-search .search-box{position:absolute;left:calc(50% - 330px);width:660px;top:10px;z-index:1;padding-top:2px;pointer-events:none;-webkit-transition:opacity .2s linear;transition:opacity .2s linear}ionic-search .search-box ion-icon{top:17px;font-size:17px;position:absolute}ionic-search .search-box.active{pointer-events:all}ionic-search .search-box.active ul{-webkit-transform:none;transform:none;opacity:1;-webkit-transition-delay:.2s;transition-delay:.2s}ionic-search .search-box.active input{-webkit-transition-delay:.1s;transition-delay:.1s}ionic-search .search-box.active .close,ionic-search .search-box.active .search-static,ionic-search .search-box.active input{-webkit-transform:none;transform:none;opacity:1}ionic-search .search-box.active .close{-webkit-transition-delay:.4s;transition-delay:.4s}ionic-search .backdrop{background:rgba(0,8,24,.4);position:fixed;top:0;right:0;bottom:0;left:0;opacity:0;pointer-events:none;-webkit-transition:all .4s ease;transition:all .4s ease}ionic-search .backdrop.active{opacity:1;pointer-events:all}ionic-search[mobile]{display:block}ionic-search[mobile] .search{color:#999;right:auto;left:0;bottom:0;font-size:28px;padding:22px;top:auto;z-index:3;position:fixed}ionic-search[mobile] .backdrop{top:0;background:rgba(0,0,0,.5);z-index:2}ionic-search[mobile] .search-box{width:auto;left:2px;right:2px;top:42px;bottom:0;padding:60px 12px 48px;position:fixed;z-index:3;background:#fff;border-top-left-radius:12px;border-top-right-radius:12px;-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0);-webkit-transition:-webkit-transform .4s cubic-bezier(.23,1,.32,1);transition:-webkit-transform .4s cubic-bezier(.23,1,.32,1);transition:transform .4s cubic-bezier(.23,1,.32,1);transition:transform .4s cubic-bezier(.23,1,.32,1),-webkit-transform .4s cubic-bezier(.23,1,.32,1)}ionic-search[mobile] .search-box.active{-webkit-transform:none;transform:none}ionic-search[mobile] .mobile-close{-webkit-transition-delay:0;transition-delay:0;left:calc(50% - 24px);top:0;left:0;right:0;position:absolute}ionic-search[mobile] .mobile-close svg{position:absolute;top:8px;width:40px;height:40px;left:calc(50% - 20px)}ionic-search[mobile] .searching{top:113px;z-index:3;-webkit-animation:ionic-search-scan-mobile 1s ease-in-out infinite;animation:ionic-search-scan-mobile 1s ease-in-out infinite}ionic-search[mobile] ul{opacity:1;-webkit-transform:none;transform:none;z-index:3;top:auto;-webkit-box-shadow:none;box-shadow:none;width:100%;max-height:calc(100vh - 154px);overflow:touch}ionic-search[mobile] .search-static{-webkit-transform:none;transform:none;opacity:1;z-index:3;top:71px;left:22px}ionic-search[mobile] a{padding-left:20px;padding-right:20px}ionic-search[mobile] input{margin:0 0 10px;padding:10px 40px 8px;background:#eceef2;border-radius:12px;width:100%}ionic-search[mobile]~.mobile-nav__pane{min-height:100%;background:#fff;-webkit-transition:transform .4s ease,border-radius .4s step-end;transition:transform .4s ease,border-radius .4s step-end}ionic-search[mobile].active~.mobile-nav__pane{border-radius:12px;-webkit-transform:scale3d(.97,.97,1);transform:scale3d(.97,.97,1);-webkit-transition:transform .4s ease;transition:transform .4s ease}.mobile-nav{background:#000!important}\"},enumerable:!0,configurable:!0}),t}();t.IonicSearch=i,Object.defineProperty(t,\"__esModule\",{value:!0})});"
  },
  {
    "path": "content/js/stencil/ionic-site-components/hclgi8iu.entry.js",
    "content": "const t=window.IonicSiteComponents.h;var e=function(t){var e={},i=t.document,s=t.GreenSockGlobals=t.GreenSockGlobals||t;if(s.TweenLite)return s.TweenLite;var n,r,a,o,l,h,_,c=function(t){var e,i=t.split(\".\"),n=s;for(e=0;e<i.length;e++)n[i[e]]=n=n[i[e]]||{};return n},u=c(\"com.greensock\"),m=function(t){var e,i=[],s=t.length;for(e=0;e!==s;i.push(t[e++]));return i},p=function(){},f=(h=Object.prototype.toString,_=h.call([]),function(t){return null!=t&&(t instanceof Array||\"object\"==typeof t&&!!t.push&&h.call(t)===_)}),d={},v=function(t,i,n,r){this.sc=d[t]?d[t].sc:[],d[t]=this,this.gsClass=null,this.func=n;var a=[];this.check=function(o){for(var l,h,_,u,m=i.length,p=m;--m>-1;)(l=d[i[m]]||new v(i[m],[])).gsClass?(a[m]=l.gsClass,p--):o&&l.sc.push(this);if(0===p&&n)for(_=(h=(\"com.greensock.\"+t).split(\".\")).pop(),u=c(h.join(\".\"))[_]=this.gsClass=n.apply(n,a),r&&(s[_]=e[_]=u),m=0;m<this.sc.length;m++)this.sc[m].check()},this.check(!0)},g=t._gsDefine=function(t,e,i,s){return new v(t,e,i,s)},T=u._class=function(t,e,i){return e=e||function(){},g(t,[],function(){return e},i),e};g.globals=s;var y=[0,0,1,1],w=T(\"easing.Ease\",function(t,e,i,s){this._func=t,this._type=i||0,this._power=s||0,this._params=e?y.concat(e):y},!0),P=w.map={},b=w.register=function(t,e,i,s){for(var n,r,a,o,l=e.split(\",\"),h=l.length,_=(i||\"easeIn,easeOut,easeInOut\").split(\",\");--h>-1;)for(r=l[h],n=s?T(\"easing.\"+r,null,!0):u.easing[r]||{},a=_.length;--a>-1;)P[r+\".\"+(o=_[a])]=P[o+r]=n[o]=t.getRatio?t:t[o]||new t};for((a=w.prototype)._calcEnd=!1,a.getRatio=function(t){if(this._func)return this._params[0]=t,this._func.apply(null,this._params);var e=this._type,i=this._power,s=1===e?1-t:2===e?t:t<.5?2*t:2*(1-t);return 1===i?s*=s:2===i?s*=s*s:3===i?s*=s*s*s:4===i&&(s*=s*s*s*s),1===e?1-s:2===e?s:t<.5?s/2:1-s/2},r=(n=[\"Linear\",\"Quad\",\"Cubic\",\"Quart\",\"Quint,Strong\"]).length;--r>-1;)a=n[r]+\",Power\"+r,b(new w(null,null,1,r),a,\"easeOut\",!0),b(new w(null,null,2,r),a,\"easeIn\"+(0===r?\",easeNone\":\"\")),b(new w(null,null,3,r),a,\"easeInOut\");P.linear=u.easing.Linear.easeIn,P.swing=u.easing.Quad.easeInOut;var S=T(\"events.EventDispatcher\",function(t){this._listeners={},this._eventTarget=t||this});(a=S.prototype).addEventListener=function(t,e,i,s,n){n=n||0;var r,a,h=this._listeners[t],_=0;for(this!==o||l||o.wake(),null==h&&(this._listeners[t]=h=[]),a=h.length;--a>-1;)(r=h[a]).c===e&&r.s===i?h.splice(a,1):0===_&&r.pr<n&&(_=a+1);h.splice(_,0,{c:e,s:i,up:s,pr:n})},a.removeEventListener=function(t,e){var i,s=this._listeners[t];if(s)for(i=s.length;--i>-1;)if(s[i].c===e)return void s.splice(i,1)},a.dispatchEvent=function(t){var e,i,s,n=this._listeners[t];if(n)for((e=n.length)>1&&(n=n.slice(0)),i=this._eventTarget;--e>-1;)(s=n[e])&&(s.up?s.c.call(s.s||i,{type:t,target:i}):s.c.call(s.s||i))};var k=t.requestAnimationFrame,A=t.cancelAnimationFrame,C=Date.now||function(){return(new Date).getTime()},x=C();for(r=(n=[\"ms\",\"moz\",\"webkit\",\"o\"]).length;--r>-1&&!k;)k=t[n[r]+\"RequestAnimationFrame\"],A=t[n[r]+\"CancelAnimationFrame\"]||t[n[r]+\"CancelRequestAnimationFrame\"];T(\"Ticker\",function(t,e){var s,n,r,a,h,_=this,c=C(),u=!(!1===e||!k)&&\"auto\",m=500,f=33,d=function(t){var e,i,o=C()-x;o>m&&(c+=o-f),_.time=((x+=o)-c)/1e3,e=_.time-h,(!s||e>0||!0===t)&&(_.frame++,h+=e+(e>=a?.004:a-e),i=!0),!0!==t&&(r=n(d)),i&&_.dispatchEvent(\"tick\")};S.call(_),_.time=_.frame=0,_.tick=function(){d(!0)},_.lagSmoothing=function(t,e){if(!arguments.length)return m<1e8;m=t||1e8,f=Math.min(e,m,0)},_.sleep=function(){null!=r&&(u&&A?A(r):clearTimeout(r),n=p,r=null,_===o&&(l=!1))},_.wake=function(t){null!==r?_.sleep():t?c+=-x+(x=C()):_.frame>10&&(x=C()-m+5),n=0===s?p:u&&k?k:function(t){return setTimeout(t,1e3*(h-_.time)+1|0)},_===o&&(l=!0),d(2)},_.fps=function(t){if(!arguments.length)return s;h=this.time+(a=1/((s=t)||60)),_.wake()},_.useRAF=function(t){if(!arguments.length)return u;_.sleep(),u=t,_.fps(s)},_.fps(t),setTimeout(function(){\"auto\"===u&&_.frame<5&&\"hidden\"!==(i||{}).visibilityState&&_.useRAF(!1)},1500)}),(a=u.Ticker.prototype=new u.events.EventDispatcher).constructor=u.Ticker;var R=T(\"core.Animation\",function(t,e){if(this.vars=e=e||{},this._duration=this._totalDuration=t||0,this._delay=Number(e.delay)||0,this._timeScale=1,this._active=!!e.immediateRender,this.data=e.data,this._reversed=!!e.reversed,J){l||o.wake();var i=this.vars.useFrames?H:J;i.add(this,i._time),this.vars.paused&&this.paused(!0)}});o=R.ticker=new u.Ticker,(a=R.prototype)._dirty=a._gc=a._initted=a._paused=!1,a._totalTime=a._time=0,a._rawPrevTime=-1,a._next=a._last=a._onUpdate=a._timeline=a.timeline=null,a._paused=!1;var D=function(){l&&C()-x>2e3&&(\"hidden\"!==(i||{}).visibilityState||!o.lagSmoothing())&&o.wake();var t=setTimeout(D,2e3);t.unref&&t.unref()};D(),a.play=function(t,e){return null!=t&&this.seek(t,e),this.reversed(!1).paused(!1)},a.pause=function(t,e){return null!=t&&this.seek(t,e),this.paused(!0)},a.resume=function(t,e){return null!=t&&this.seek(t,e),this.paused(!1)},a.seek=function(t,e){return this.totalTime(Number(t),!1!==e)},a.restart=function(t,e){return this.reversed(!1).paused(!1).totalTime(t?-this._delay:0,!1!==e,!0)},a.reverse=function(t,e){return null!=t&&this.seek(t||this.totalDuration(),e),this.reversed(!0).paused(!1)},a.render=function(t,e,i){},a.invalidate=function(){return this._time=this._totalTime=0,this._initted=this._gc=!1,this._rawPrevTime=-1,!this._gc&&this.timeline||this._enabled(!0),this},a.isActive=function(){var t,e=this._timeline,i=this._startTime;return!e||!this._gc&&!this._paused&&e.isActive()&&(t=e.rawTime(!0))>=i&&t<i+this.totalDuration()/this._timeScale-1e-8},a._enabled=function(t,e){return l||o.wake(),this._gc=!t,this._active=this.isActive(),!0!==e&&(t&&!this.timeline?this._timeline.add(this,this._startTime-this._delay):!t&&this.timeline&&this._timeline._remove(this,!0)),!1},a._kill=function(t,e){return this._enabled(!1,!1)},a.kill=function(t,e){return this._kill(t,e),this},a._uncache=function(t){for(var e=t?this:this.timeline;e;)e._dirty=!0,e=e.timeline;return this},a._swapSelfInParams=function(t){for(var e=t.length,i=t.concat();--e>-1;)\"{self}\"===t[e]&&(i[e]=this);return i},a._callback=function(t){var e=this.vars,i=e[t],s=e[t+\"Params\"],n=e[t+\"Scope\"]||e.callbackScope||this;switch(s?s.length:0){case 0:i.call(n);break;case 1:i.call(n,s[0]);break;case 2:i.call(n,s[0],s[1]);break;default:i.apply(n,s)}},a.eventCallback=function(t,e,i,s){if(\"on\"===(t||\"\").substr(0,2)){var n=this.vars;if(1===arguments.length)return n[t];null==e?delete n[t]:(n[t]=e,n[t+\"Params\"]=f(i)&&-1!==i.join(\"\").indexOf(\"{self}\")?this._swapSelfInParams(i):i,n[t+\"Scope\"]=s),\"onUpdate\"===t&&(this._onUpdate=e)}return this},a.delay=function(t){return arguments.length?(this._timeline.smoothChildTiming&&this.startTime(this._startTime+t-this._delay),this._delay=t,this):this._delay},a.duration=function(t){return arguments.length?(this._duration=this._totalDuration=t,this._uncache(!0),this._timeline.smoothChildTiming&&this._time>0&&this._time<this._duration&&0!==t&&this.totalTime(this._totalTime*(t/this._duration),!0),this):(this._dirty=!1,this._duration)},a.totalDuration=function(t){return this._dirty=!1,arguments.length?this.duration(t):this._totalDuration},a.time=function(t,e){return arguments.length?(this._dirty&&this.totalDuration(),this.totalTime(t>this._duration?this._duration:t,e)):this._time},a.totalTime=function(t,e,i){if(l||o.wake(),!arguments.length)return this._totalTime;if(this._timeline){if(t<0&&!i&&(t+=this.totalDuration()),this._timeline.smoothChildTiming){this._dirty&&this.totalDuration();var s=this._totalDuration,n=this._timeline;if(t>s&&!i&&(t=s),this._startTime=(this._paused?this._pauseTime:n._time)-(this._reversed?s-t:t)/this._timeScale,n._dirty||this._uncache(!1),n._timeline)for(;n._timeline;)n._timeline._time!==(n._startTime+n._totalTime)/n._timeScale&&n.totalTime(n._totalTime,!0),n=n._timeline}this._gc&&this._enabled(!0,!1),this._totalTime===t&&0!==this._duration||(z.length&&W(),this.render(t,e,!1),z.length&&W())}return this},a.progress=a.totalProgress=function(t,e){var i=this.duration();return arguments.length?this.totalTime(i*t,e):i?this._time/i:this.ratio},a.startTime=function(t){return arguments.length?(t!==this._startTime&&(this._startTime=t,this.timeline&&this.timeline._sortChildren&&this.timeline.add(this,t-this._delay)),this):this._startTime},a.endTime=function(t){return this._startTime+(0!=t?this.totalDuration():this.duration())/this._timeScale},a.timeScale=function(t){if(!arguments.length)return this._timeScale;var e,i;for(t=t||1e-8,this._timeline&&this._timeline.smoothChildTiming&&(i=(e=this._pauseTime)||0===e?e:this._timeline.totalTime(),this._startTime=i-(i-this._startTime)*this._timeScale/t),this._timeScale=t,i=this.timeline;i&&i.timeline;)i._dirty=!0,i.totalDuration(),i=i.timeline;return this},a.reversed=function(t){return arguments.length?(t!=this._reversed&&(this._reversed=t,this.totalTime(this._timeline&&!this._timeline.smoothChildTiming?this.totalDuration()-this._totalTime:this._totalTime,!0)),this):this._reversed},a.paused=function(t){if(!arguments.length)return this._paused;var e,i,s=this._timeline;return t!=this._paused&&s&&(l||t||o.wake(),i=(e=s.rawTime())-this._pauseTime,!t&&s.smoothChildTiming&&(this._startTime+=i,this._uncache(!1)),this._pauseTime=t?e:null,this._paused=t,this._active=this.isActive(),!t&&0!==i&&this._initted&&this.duration()&&this.render(e=s.smoothChildTiming?this._totalTime:(e-this._startTime)/this._timeScale,e===this._totalTime,!0)),this._gc&&!t&&this._enabled(!0,!1),this};var E=T(\"core.SimpleTimeline\",function(t){R.call(this,0,t),this.autoRemoveChildren=this.smoothChildTiming=!0});(a=E.prototype=new R).constructor=E,a.kill()._gc=!1,a._first=a._last=a._recent=null,a._sortChildren=!1,a.add=a.insert=function(t,e,i,s){var n,r;if(t._startTime=Number(e||0)+t._delay,t._paused&&this!==t._timeline&&(t._pauseTime=this.rawTime()-(t._timeline.rawTime()-t._pauseTime)),t.timeline&&t.timeline._remove(t,!0),t.timeline=t._timeline=this,t._gc&&t._enabled(!0,!0),n=this._last,this._sortChildren)for(r=t._startTime;n&&n._startTime>r;)n=n._prev;return n?(t._next=n._next,n._next=t):(t._next=this._first,this._first=t),t._next?t._next._prev=t:this._last=t,t._prev=n,this._recent=t,this._timeline&&this._uncache(!0),this},a._remove=function(t,e){return t.timeline===this&&(e||t._enabled(!1,!0),t._prev?t._prev._next=t._next:this._first===t&&(this._first=t._next),t._next?t._next._prev=t._prev:this._last===t&&(this._last=t._prev),t._next=t._prev=t.timeline=null,t===this._recent&&(this._recent=this._last),this._timeline&&this._uncache(!0)),this},a.render=function(t,e,i){var s,n=this._first;for(this._totalTime=this._time=this._rawPrevTime=t;n;)s=n._next,(n._active||t>=n._startTime&&!n._paused&&!n._gc)&&n.render(n._reversed?(n._dirty?n.totalDuration():n._totalDuration)-(t-n._startTime)*n._timeScale:(t-n._startTime)*n._timeScale,e,i),n=s},a.rawTime=function(){return l||o.wake(),this._totalTime};var I=T(\"TweenLite\",function(e,i,s){if(R.call(this,i,s),this.render=I.prototype.render,null==e)throw\"Cannot tween a null target.\";this.target=e=\"string\"!=typeof e?e:I.selector(e)||e;var n,r,a,o=e.jquery||e.length&&e!==t&&e[0]&&(e[0]===t||e[0].nodeType&&e[0].style&&!e.nodeType),l=this.vars.overwrite;if(this._overwrite=l=null==l?Y[I.defaultOverwrite]:\"number\"==typeof l?l>>0:Y[l],(o||e instanceof Array||e.push&&f(e))&&\"number\"!=typeof e[0])for(this._targets=a=m(e),this._propLookup=[],this._siblings=[],n=0;n<a.length;n++)(r=a[n])?\"string\"!=typeof r?r.length&&r!==t&&r[0]&&(r[0]===t||r[0].nodeType&&r[0].style&&!r.nodeType)?(a.splice(n--,1),this._targets=a=a.concat(m(r))):(this._siblings[n]=X(r,this,!1),1===l&&this._siblings[n].length>1&&tt(r,this,null,1,this._siblings[n])):\"string\"==typeof(r=a[n--]=I.selector(r))&&a.splice(n+1,1):a.splice(n--,1);else this._propLookup={},this._siblings=X(e,this,!1),1===l&&this._siblings.length>1&&tt(e,this,null,1,this._siblings);(this.vars.immediateRender||0===i&&0===this._delay&&!1!==this.vars.immediateRender)&&(this._time=-1e-8,this.render(Math.min(0,-this._delay)))},!0),O=function(e){return e&&e.length&&e!==t&&e[0]&&(e[0]===t||e[0].nodeType&&e[0].style&&!e.nodeType)};(a=I.prototype=new R).constructor=I,a.kill()._gc=!1,a.ratio=0,a._firstPT=a._targets=a._overwrittenProps=a._startAt=null,a._notifyPluginsOfEnabled=a._lazy=!1,I.version=\"2.1.2\",I.defaultEase=a._ease=new w(null,null,1,1),I.defaultOverwrite=\"auto\",I.ticker=o,I.autoSleep=120,I.lagSmoothing=function(t,e){o.lagSmoothing(t,e)},I.selector=t.$||t.jQuery||function(e){var s=t.$||t.jQuery;return s?(I.selector=s,s(e)):(i||(i=t.document),i?i.querySelectorAll?i.querySelectorAll(e):i.getElementById(\"#\"===e.charAt(0)?e.substr(1):e):e)};var z=[],L={},F=/(?:(-|-=|\\+=)?\\d*\\.?\\d*(?:e[\\-+]?\\d+)?)[0-9]/gi,$=/[\\+-]=-?[\\.\\d]/,U=function(t){for(var e,i=this._firstPT;i;)e=i.blob?1===t&&null!=this.end?this.end:t?this.join(\"\"):this.start:i.c*t+i.s,i.m?e=i.m.call(this._tween,e,this._target||i.t,this._tween):e<1e-6&&e>-1e-6&&!i.blob&&(e=0),i.f?i.fp?i.t[i.p](i.fp,e):i.t[i.p](e):i.t[i.p]=e,i=i._next},N=function(t){return(1e3*t|0)/1e3+\"\"},j=function(t,e,i,s){var n,r,a,o,l,h,_,c=[],u=0,m=\"\",p=0;for(c.start=t,c.end=e,t=c[0]=t+\"\",e=c[1]=e+\"\",i&&(i(c),t=c[0],e=c[1]),c.length=0,n=t.match(F)||[],r=e.match(F)||[],s&&(s._next=null,s.blob=1,c._firstPT=c._applyPT=s),l=r.length,o=0;o<l;o++)m+=(h=e.substr(u,e.indexOf(_=r[o],u)-u))||!o?h:\",\",u+=h.length,p?p=(p+1)%5:\"rgba(\"===h.substr(-5)&&(p=1),_===n[o]||n.length<=o?m+=_:(m&&(c.push(m),m=\"\"),a=parseFloat(n[o]),c.push(a),c._firstPT={_next:c._firstPT,t:c,p:c.length-1,s:a,c:(\"=\"===_.charAt(1)?parseInt(_.charAt(0)+\"1\",10)*parseFloat(_.substr(2)):parseFloat(_)-a)||0,f:0,m:p&&p<4?Math.round:N}),u+=_.length;return(m+=e.substr(u))&&c.push(m),c.setRatio=U,$.test(e)&&(c.end=null),c},q=function(t,e,i,s,n,r,a,o,l){\"function\"==typeof s&&(s=s(l||0,t));var h=typeof t[e],_=\"function\"!==h?\"\":e.indexOf(\"set\")||\"function\"!=typeof t[\"get\"+e.substr(3)]?e:\"get\"+e.substr(3),c=\"get\"!==i?i:_?a?t[_](a):t[_]():t[e],u=\"string\"==typeof s&&\"=\"===s.charAt(1),m={t,p:e,s:c,f:\"function\"===h,pg:0,n:n||e,m:r?\"function\"==typeof r?r:Math.round:0,pr:0,c:u?parseInt(s.charAt(0)+\"1\",10)*parseFloat(s.substr(2)):parseFloat(s)-c||0};if((\"number\"!=typeof c||\"number\"!=typeof s&&!u)&&(a||isNaN(c)||!u&&isNaN(s)||\"boolean\"==typeof c||\"boolean\"==typeof s?(m.fp=a,m={t:j(c,u?parseFloat(m.s)+m.c+(m.s+\"\").replace(/[0-9\\-\\.]/g,\"\"):s,o||I.defaultStringFilter,m),p:\"setRatio\",s:0,c:1,f:2,pg:0,n:n||e,pr:0,m:0}):(m.s=parseFloat(c),u||(m.c=parseFloat(s)-m.s||0))),m.c)return(m._next=this._firstPT)&&(m._next._prev=m),this._firstPT=m,m},M=I._internals={isArray:f,isSelector:O,lazyTweens:z,blobDif:j},Q=I._plugins={},G=M.tweenLookup={},B=0,K=M.reservedProps={ease:1,delay:1,overwrite:1,onComplete:1,onCompleteParams:1,onCompleteScope:1,useFrames:1,runBackwards:1,startAt:1,onUpdate:1,onUpdateParams:1,onUpdateScope:1,onStart:1,onStartParams:1,onStartScope:1,onReverseComplete:1,onReverseCompleteParams:1,onReverseCompleteScope:1,onRepeat:1,onRepeatParams:1,onRepeatScope:1,easeParams:1,yoyo:1,immediateRender:1,repeat:1,repeatDelay:1,data:1,paused:1,reversed:1,autoCSS:1,lazy:1,onOverwrite:1,callbackScope:1,stringFilter:1,id:1,yoyoEase:1,stagger:1},Y={none:0,all:1,auto:2,concurrent:3,allOnStart:4,preexisting:5,true:1,false:0},H=R._rootFramesTimeline=new E,J=R._rootTimeline=new E,V=30,W=M.lazyRender=function(){var t,e,i=z.length;for(L={},t=0;t<i;t++)(e=z[t])&&!1!==e._lazy&&(e.render(e._lazy[0],e._lazy[1],!0),e._lazy=!1);z.length=0};J._startTime=o.time,H._startTime=o.frame,J._active=H._active=!0,setTimeout(W,1),R._updateRoot=I.render=function(){var t,e,i;if(z.length&&W(),J.render((o.time-J._startTime)*J._timeScale,!1,!1),H.render((o.frame-H._startTime)*H._timeScale,!1,!1),z.length&&W(),o.frame>=V){for(i in V=o.frame+(parseInt(I.autoSleep,10)||120),G){for(t=(e=G[i].tweens).length;--t>-1;)e[t]._gc&&e.splice(t,1);0===e.length&&delete G[i]}if((!(i=J._first)||i._paused)&&I.autoSleep&&!H._first&&1===o._listeners.tick.length){for(;i&&i._paused;)i=i._next;i||o.sleep()}}},o.addEventListener(\"tick\",R._updateRoot);var X=function(t,e,i){var s,n,r=t._gsTweenID;if(G[r||(t._gsTweenID=r=\"t\"+B++)]||(G[r]={target:t,tweens:[]}),e&&((s=G[r].tweens)[n=s.length]=e,i))for(;--n>-1;)s[n]===e&&s.splice(n,1);return G[r].tweens},Z=function(t,e,i,s){var n,r,a=t.vars.onOverwrite;return a&&(n=a(t,e,i,s)),(a=I.onOverwrite)&&(r=a(t,e,i,s)),!1!==n&&!1!==r},tt=function(t,e,i,s,n){var r,a,o,l;if(1===s||s>=4){for(l=n.length,r=0;r<l;r++)if((o=n[r])!==e)o._gc||o._kill(null,t,e)&&(a=!0);else if(5===s)break;return a}var h,_=e._startTime+1e-8,c=[],u=0,m=0===e._duration;for(r=n.length;--r>-1;)(o=n[r])===e||o._gc||o._paused||(o._timeline!==e._timeline?(h=h||et(e,0,m),0===et(o,h,m)&&(c[u++]=o)):o._startTime<=_&&o._startTime+o.totalDuration()/o._timeScale>_&&((m||!o._initted)&&_-o._startTime<=2e-8||(c[u++]=o)));for(r=u;--r>-1;)if(l=(o=c[r])._firstPT,2===s&&o._kill(i,t,e)&&(a=!0),2!==s||!o._firstPT&&o._initted&&l){if(2!==s&&!Z(o,e))continue;o._enabled(!1,!1)&&(a=!0)}return a},et=function(t,e,i){for(var s=t._timeline,n=s._timeScale,r=t._startTime;s._timeline;){if(r+=s._startTime,n*=s._timeScale,s._paused)return-100;s=s._timeline}return(r/=n)>e?r-e:i&&r===e||!t._initted&&r-e<2e-8?1e-8:(r+=t.totalDuration()/t._timeScale/n)>e+1e-8?0:r-e-1e-8};a._init=function(){var t,e,i,s,n,r,a=this.vars,o=this._overwrittenProps,l=this._duration,h=!!a.immediateRender,_=a.ease,c=this._startAt;if(a.startAt){for(s in c&&(c.render(-1,!0),c.kill()),n={},a.startAt)n[s]=a.startAt[s];if(n.data=\"isStart\",n.overwrite=!1,n.immediateRender=!0,n.lazy=h&&!1!==a.lazy,n.startAt=n.delay=null,n.onUpdate=a.onUpdate,n.onUpdateParams=a.onUpdateParams,n.onUpdateScope=a.onUpdateScope||a.callbackScope||this,this._startAt=I.to(this.target||{},0,n),h)if(this._time>0)this._startAt=null;else if(0!==l)return}else if(a.runBackwards&&0!==l)if(c)c.render(-1,!0),c.kill(),this._startAt=null;else{for(s in 0!==this._time&&(h=!1),i={},a)K[s]&&\"autoCSS\"!==s||(i[s]=a[s]);if(i.overwrite=0,i.data=\"isFromStart\",i.lazy=h&&!1!==a.lazy,i.immediateRender=h,this._startAt=I.to(this.target,0,i),h){if(0===this._time)return}else this._startAt._init(),this._startAt._enabled(!1),this.vars.immediateRender&&(this._startAt=null)}if(this._ease=_=_?_ instanceof w?_:\"function\"==typeof _?new w(_,a.easeParams):P[_]||I.defaultEase:I.defaultEase,a.easeParams instanceof Array&&_.config&&(this._ease=_.config.apply(_,a.easeParams)),this._easeType=this._ease._type,this._easePower=this._ease._power,this._firstPT=null,this._targets)for(r=this._targets.length,t=0;t<r;t++)this._initProps(this._targets[t],this._propLookup[t]={},this._siblings[t],o?o[t]:null,t)&&(e=!0);else e=this._initProps(this.target,this._propLookup,this._siblings,o,0);if(e&&I._onPluginEvent(\"_onInitAllProps\",this),o&&(this._firstPT||\"function\"!=typeof this.target&&this._enabled(!1,!1)),a.runBackwards)for(i=this._firstPT;i;)i.s+=i.c,i.c=-i.c,i=i._next;this._onUpdate=a.onUpdate,this._initted=!0},a._initProps=function(e,i,s,n,r){var a,o,l,h,_,c;if(null==e)return!1;for(a in L[e._gsTweenID]&&W(),this.vars.css||e.style&&e!==t&&e.nodeType&&Q.css&&!1!==this.vars.autoCSS&&function(t,e){var i,s={};for(i in t)K[i]||i in e&&\"transform\"!==i&&\"x\"!==i&&\"y\"!==i&&\"width\"!==i&&\"height\"!==i&&\"className\"!==i&&\"border\"!==i||!(!Q[i]||Q[i]&&Q[i]._autoCSS)||(s[i]=t[i],delete t[i]);t.css=s}(this.vars,e),this.vars)if(c=this.vars[a],K[a])c&&(c instanceof Array||c.push&&f(c))&&-1!==c.join(\"\").indexOf(\"{self}\")&&(this.vars[a]=c=this._swapSelfInParams(c,this));else if(Q[a]&&(h=new Q[a])._onInitTween(e,this.vars[a],this,r)){for(this._firstPT=_={_next:this._firstPT,t:h,p:\"setRatio\",s:0,c:1,f:1,n:a,pg:1,pr:h._priority,m:0},o=h._overwriteProps.length;--o>-1;)i[h._overwriteProps[o]]=this._firstPT;(h._priority||h._onInitAllProps)&&(l=!0),(h._onDisable||h._onEnable)&&(this._notifyPluginsOfEnabled=!0),_._next&&(_._next._prev=_)}else i[a]=q.call(this,e,a,\"get\",c,a,0,null,this.vars.stringFilter,r);return n&&this._kill(n,e)?this._initProps(e,i,s,n,r):this._overwrite>1&&this._firstPT&&s.length>1&&tt(e,this,i,this._overwrite,s)?(this._kill(i,e),this._initProps(e,i,s,n,r)):(this._firstPT&&(!1!==this.vars.lazy&&this._duration||this.vars.lazy&&!this._duration)&&(L[e._gsTweenID]=!0),l)},a.render=function(t,e,i){var s,n,r,a,o=this._time,l=this._duration,h=this._rawPrevTime;if(t>=l-1e-8&&t>=0)this._totalTime=this._time=l,this.ratio=this._ease._calcEnd?this._ease.getRatio(1):1,this._reversed||(s=!0,n=\"onComplete\",i=i||this._timeline.autoRemoveChildren),0===l&&(this._initted||!this.vars.lazy||i)&&(this._startTime===this._timeline._duration&&(t=0),(h<0||t<=0&&t>=-1e-8||1e-8===h&&\"isPause\"!==this.data)&&h!==t&&(i=!0,h>1e-8&&(n=\"onReverseComplete\")),this._rawPrevTime=a=!e||t||h===t?t:1e-8);else if(t<1e-8)this._totalTime=this._time=0,this.ratio=this._ease._calcEnd?this._ease.getRatio(0):0,(0!==o||0===l&&h>0)&&(n=\"onReverseComplete\",s=this._reversed),t>-1e-8?t=0:t<0&&(this._active=!1,0===l&&(this._initted||!this.vars.lazy||i)&&(h>=0&&(1e-8!==h||\"isPause\"!==this.data)&&(i=!0),this._rawPrevTime=a=!e||t||h===t?t:1e-8)),(!this._initted||this._startAt&&this._startAt.progress())&&(i=!0);else if(this._totalTime=this._time=t,this._easeType){var _=t/l,c=this._easeType,u=this._easePower;(1===c||3===c&&_>=.5)&&(_=1-_),3===c&&(_*=2),1===u?_*=_:2===u?_*=_*_:3===u?_*=_*_*_:4===u&&(_*=_*_*_*_),this.ratio=1===c?1-_:2===c?_:t/l<.5?_/2:1-_/2}else this.ratio=this._ease.getRatio(t/l);if(this._time!==o||i){if(!this._initted){if(this._init(),!this._initted||this._gc)return;if(!i&&this._firstPT&&(!1!==this.vars.lazy&&this._duration||this.vars.lazy&&!this._duration))return this._time=this._totalTime=o,this._rawPrevTime=h,z.push(this),void(this._lazy=[t,e]);this._time&&!s?this.ratio=this._ease.getRatio(this._time/l):s&&this._ease._calcEnd&&(this.ratio=this._ease.getRatio(0===this._time?0:1))}for(!1!==this._lazy&&(this._lazy=!1),this._active||!this._paused&&this._time!==o&&t>=0&&(this._active=!0),0===o&&(this._startAt&&(t>=0?this._startAt.render(t,!0,i):n||(n=\"_dummyGS\")),this.vars.onStart&&(0===this._time&&0!==l||e||this._callback(\"onStart\"))),r=this._firstPT;r;)r.f?r.t[r.p](r.c*this.ratio+r.s):r.t[r.p]=r.c*this.ratio+r.s,r=r._next;this._onUpdate&&(t<0&&this._startAt&&-1e-4!==t&&this._startAt.render(t,!0,i),e||(this._time!==o||s||i)&&this._callback(\"onUpdate\")),n&&(this._gc&&!i||(t<0&&this._startAt&&!this._onUpdate&&-1e-4!==t&&this._startAt.render(t,!0,i),s&&(this._timeline.autoRemoveChildren&&this._enabled(!1,!1),this._active=!1),!e&&this.vars[n]&&this._callback(n),0===l&&1e-8===this._rawPrevTime&&1e-8!==a&&(this._rawPrevTime=0)))}},a._kill=function(t,e,i){if(\"all\"===t&&(t=null),null==t&&(null==e||e===this.target))return this._lazy=!1,this._enabled(!1,!1);e=\"string\"!=typeof e?e||this._targets||this.target:I.selector(e)||e;var s,n,r,a,o,l,h,_,c,u=i&&this._time&&i._startTime===this._startTime&&this._timeline===i._timeline,m=this._firstPT;if((f(e)||O(e))&&\"number\"!=typeof e[0])for(s=e.length;--s>-1;)this._kill(t,e[s],i)&&(l=!0);else{if(this._targets){for(s=this._targets.length;--s>-1;)if(e===this._targets[s]){o=this._propLookup[s]||{},this._overwrittenProps=this._overwrittenProps||[],n=this._overwrittenProps[s]=t?this._overwrittenProps[s]||{}:\"all\";break}}else{if(e!==this.target)return!1;o=this._propLookup,n=this._overwrittenProps=t?this._overwrittenProps||{}:\"all\"}if(o){if(h=t||o,_=t!==n&&\"all\"!==n&&t!==o&&(\"object\"!=typeof t||!t._tempKill),i&&(I.onOverwrite||this.vars.onOverwrite)){for(r in h)o[r]&&(c||(c=[]),c.push(r));if((c||!t)&&!Z(this,i,e,c))return!1}for(r in h)(a=o[r])&&(u&&(a.f?a.t[a.p](a.s):a.t[a.p]=a.s,l=!0),a.pg&&a.t._kill(h)&&(l=!0),a.pg&&0!==a.t._overwriteProps.length||(a._prev?a._prev._next=a._next:a===this._firstPT&&(this._firstPT=a._next),a._next&&(a._next._prev=a._prev),a._next=a._prev=null),delete o[r]),_&&(n[r]=1);!this._firstPT&&this._initted&&m&&this._enabled(!1,!1)}}return l},a.invalidate=function(){this._notifyPluginsOfEnabled&&I._onPluginEvent(\"_onDisable\",this);var t=this._time;return this._firstPT=this._overwrittenProps=this._startAt=this._onUpdate=null,this._notifyPluginsOfEnabled=this._active=this._lazy=!1,this._propLookup=this._targets?{}:[],R.prototype.invalidate.call(this),this.vars.immediateRender&&(this._time=-1e-8,this.render(t,!1,!1!==this.vars.lazy)),this},a._enabled=function(t,e){if(l||o.wake(),t&&this._gc){var i,s=this._targets;if(s)for(i=s.length;--i>-1;)this._siblings[i]=X(s[i],this,!0);else this._siblings=X(this.target,this,!0)}return R.prototype._enabled.call(this,t,e),!(!this._notifyPluginsOfEnabled||!this._firstPT)&&I._onPluginEvent(t?\"_onEnable\":\"_onDisable\",this)},I.to=function(t,e,i){return new I(t,e,i)},I.from=function(t,e,i){return i.runBackwards=!0,i.immediateRender=0!=i.immediateRender,new I(t,e,i)},I.fromTo=function(t,e,i,s){return s.startAt=i,s.immediateRender=0!=s.immediateRender&&0!=i.immediateRender,new I(t,e,s)},I.delayedCall=function(t,e,i,s,n){return new I(e,0,{delay:t,onComplete:e,onCompleteParams:i,callbackScope:s,onReverseComplete:e,onReverseCompleteParams:i,immediateRender:!1,lazy:!1,useFrames:n,overwrite:0})},I.set=function(t,e){return new I(t,0,e)},I.getTweensOf=function(t,e){if(null==t)return[];var i,s,n,r;if(t=\"string\"!=typeof t?t:I.selector(t)||t,(f(t)||O(t))&&\"number\"!=typeof t[0]){for(i=t.length,s=[];--i>-1;)s=s.concat(I.getTweensOf(t[i],e));for(i=s.length;--i>-1;)for(r=s[i],n=i;--n>-1;)r===s[n]&&s.splice(i,1)}else if(t._gsTweenID)for(i=(s=X(t).concat()).length;--i>-1;)(s[i]._gc||e&&!s[i].isActive())&&s.splice(i,1);return s||[]},I.killTweensOf=I.killDelayedCallsTo=function(t,e,i){\"object\"==typeof e&&(i=e,e=!1);for(var s=I.getTweensOf(t,e),n=s.length;--n>-1;)s[n]._kill(i,t)};var it=T(\"plugins.TweenPlugin\",function(t,e){this._overwriteProps=(t||\"\").split(\",\"),this._propName=this._overwriteProps[0],this._priority=e||0,this._super=it.prototype},!0);if(a=it.prototype,it.version=\"1.19.0\",it.API=2,a._firstPT=null,a._addTween=q,a.setRatio=U,a._kill=function(t){var e,i=this._overwriteProps,s=this._firstPT;if(null!=t[this._propName])this._overwriteProps=[];else for(e=i.length;--e>-1;)null!=t[i[e]]&&i.splice(e,1);for(;s;)null!=t[s.n]&&(s._next&&(s._next._prev=s._prev),s._prev?(s._prev._next=s._next,s._prev=null):this._firstPT===s&&(this._firstPT=s._next)),s=s._next;return!1},a._mod=a._roundProps=function(t){for(var e,i=this._firstPT;i;)(e=t[this._propName]||null!=i.n&&t[i.n.split(this._propName+\"_\").join(\"\")])&&\"function\"==typeof e&&(2===i.f?i.t._applyPT.m=e:i.m=e),i=i._next},I._onPluginEvent=function(t,e){var i,s,n,r,a,o=e._firstPT;if(\"_onInitAllProps\"===t){for(;o;){for(a=o._next,s=n;s&&s.pr>o.pr;)s=s._next;(o._prev=s?s._prev:r)?o._prev._next=o:n=o,(o._next=s)?s._prev=o:r=o,o=a}o=e._firstPT=n}for(;o;)o.pg&&\"function\"==typeof o.t[t]&&o.t[t]()&&(i=!0),o=o._next;return i},it.activate=function(t){for(var e=t.length;--e>-1;)t[e].API===it.API&&(Q[(new t[e])._propName]=t[e]);return!0},g.plugin=function(t){if(!(t&&t.propName&&t.init&&t.API))throw\"illegal plugin definition.\";var e,i=t.propName,s=t.priority||0,n=t.overwriteProps,r={init:\"_onInitTween\",set:\"setRatio\",kill:\"_kill\",round:\"_mod\",mod:\"_mod\",initAll:\"_onInitAllProps\"},a=T(\"plugins.\"+i.charAt(0).toUpperCase()+i.substr(1)+\"Plugin\",function(){it.call(this,i,s),this._overwriteProps=n||[]},!0===t.global),o=a.prototype=new it(i);for(e in o.constructor=a,a.API=t.API,r)\"function\"==typeof t[e]&&(o[r[e]]=t[e]);return a.version=t.version,it.activate([a]),a},n=t._gsQueue){for(r=0;r<n.length;r++)n[r]();for(a in d)d[a].func||t.console.log(\"GSAP encountered missing dependency: \"+a)}return l=!1,I}(\"undefined\"!=typeof window?window:\"undefined\"!=typeof module&&module.exports&&\"undefined\"!=typeof global?global:{});class i{constructor(){this.$circles=[],this.$lis=[],this.screenshots=[],this.active=null,this.duration=6,this.quickDuration=.25,this.r=31,this.gsRefs=[],this.scrollPause=null,this.circumference=2*this.r*Math.PI,this.animationSelect=this.animationSelect.bind(this),this.animationStart=this.animationStart.bind(this)}componentDidLoad(){setTimeout(this.animationStart,2e3,0);const t=(e,i)=>{this.$lis[i]=e,this.$circles[i]=e.querySelector(\".progress-ring__circle\"),this.screenshots[i]=e.querySelector(\"a\").dataset.screenshot,e.nextElementSibling&&\"LI\"===e.nextElementSibling.nodeName&&t(e.nextElementSibling,i+1)};t(this.el.querySelector(\"li:nth-child(1)\"),0),this.active=0}animationStart(t){if(console.log(\"starting\"),window.pageYOffset>1e3)return console.log(\"pausing\"),void(this.scrollPause=setTimeout(this.animationStart,5e3,0));this.active=t,this.$lis[t].classList.add(\"active\"),e.to(this.$circles[t],.4,{opacity:1}),e.to(this.$circles[t],this.duration,{strokeDashoffset:0,onCompleteScope:this,onComplete:()=>{this.animationStart(t>=this.$circles.length-1?0:t+1),this.$lis[t].classList.remove(\"active\"),e.to(this.$circles[t],.2,{opacity:0,onCompleteScope:this,onComplete:()=>{e.to(this.$circles[t],0,{strokeDashoffset:this.circumference,lazy:!0})}})}})}animationSelect(t){this.$lis[t].classList.add(\"active\"),this.active=t,this.scrollPause&&clearTimeout(this.scrollPause),this.animationStopOthers(t),e.to(this.$circles[t],this.quickDuration,{strokeDashoffset:0,opacity:1,onCompleteScope:this,onComplete:()=>{this.animationStopOthers(t)}})}animationRestart(t){this.animationStopOthers(t),e.to(this.$circles[t],.5,{strokeDashoffset:-1*this.circumference,lazy:!0,onCompleteScope:this,onComplete:()=>{e.to(this.$circles[t],0,{strokeDashoffset:this.circumference,opacity:0,lazy:!0,onCompleteScope:this,onComplete:()=>{this.animationStart(t)}})}})}animationStopOthers(t){const i=[];this.$circles.forEach((e,s)=>{s!=t&&(i.push(e),this.$lis[s].classList.remove(\"active\"))}),e.to(i,.2,{opacity:0,lazy:!0,onCompleteScope:this,onComplete:()=>{e.to(i,0,{strokeDashoffset:this.circumference,opacity:0,lazy:!0})}})}circle(e=0){return t(\"svg\",{class:\"progress-ring\",height:\"64\",width:\"64\"},t(\"circle\",{class:\"progress-ring__circle\",stroke:\"#6C89F7\",\"stroke-width\":\"2\",fill:\"transparent\",r:this.r,cx:\"32\",cy:\"32\",style:{strokeDasharray:`${this.circumference} ${this.circumference}`,strokeDashoffset:this.circumference-e/100*this.circumference}}))}render(){return[t(\"div\",{class:\"app-screenshot\"},this.screenshots.map((e,i)=>t(\"img\",{class:i===this.active?\"active\":\"inactive\",src:e}))),t(\"nav\",null,t(\"ul\",null,t(\"li\",{onMouseEnter:()=>this.animationSelect(0),onMouseLeave:()=>this.animationRestart(0)},this.circle(),t(\"slot\",{name:\"1\"})),t(\"li\",{onMouseEnter:()=>this.animationSelect(1),onMouseLeave:()=>this.animationRestart(1)},this.circle(),t(\"slot\",{name:\"2\"})),t(\"li\",{onMouseEnter:()=>this.animationSelect(2),onMouseLeave:()=>this.animationRestart(2)},this.circle(),t(\"slot\",{name:\"3\"}))))]}static get is(){return\"ionic-appflow-activator\"}static get properties(){return{$circles:{state:!0},$lis:{state:!0},active:{state:!0},el:{elementRef:!0},screenshots:{state:!0}}}static get style(){return\"ionic-appflow-activator nav{background:#fff;position:-webkit-sticky;position:sticky;top:100px;width:100%;margin-top:100px}ionic-appflow-activator ul{display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between;max-width:100%;width:600px;padding-left:10px;padding-right:10px;margin-top:-44px;margin-right:auto;margin-left:auto}ionic-appflow-activator li{width:120px;position:relative;list-style:none}ionic-appflow-activator .progress-ring{position:absolute;top:0;left:calc(50% - 32px);pointer-events:none}ionic-appflow-activator .progress-ring__circle{opacity:0;-webkit-transform:rotate(-90deg);transform:rotate(-90deg);-webkit-transform-origin:50% 50%;transform-origin:50% 50%}ionic-appflow-activator a{text-align:center;display:block;padding-top:64px;cursor:pointer}ionic-appflow-activator a .icon,ionic-appflow-activator a .icon-active{position:absolute;border-radius:50%;height:56px;width:56px;top:4px;left:calc(50% - 28px);-webkit-transition:opacity .2s ease,transform .2s ease;transition:opacity .2s ease,transform .2s ease}ionic-appflow-activator a .icon-active{opacity:0;-webkit-transform:scale(1.1);transform:scale(1.1);-webkit-transition:opacity .2s ease,transform .2s ease;transition:opacity .2s ease,transform .2s ease}ionic-appflow-activator a span{font-size:14px;line-height:22px;text-align:center;letter-spacing:.06em;text-transform:uppercase;font-weight:600;color:#92a1b3;-webkit-transition:color .2s ease;transition:color .2s ease}ionic-appflow-activator .active .icon{-webkit-transform:scale(1.1);transform:scale(1.1);opacity:0}ionic-appflow-activator .active .icon-active{opacity:1;-webkit-transform:scale(1);transform:scale(1)}ionic-appflow-activator .active span{color:#6c89f7}ionic-appflow-activator .app-screenshot{position:relative}ionic-appflow-activator .app-screenshot img{position:absolute;top:0;right:0;bottom:0;left:0;opacity:0;-webkit-transform:scale(1.01);transform:scale(1.01);-webkit-transition:opacity .2s ease,transform .2s ease;transition:opacity .2s ease,transform .2s ease}ionic-appflow-activator .app-screenshot img.active{opacity:1;-webkit-transform:none;transform:none}\\@-webkit-keyframes full-circle{to{stroke-dashoffset:0}}\\@keyframes full-circle{to{stroke-dashoffset:0}}\"}}export{i as IonicAppflowActivator};"
  },
  {
    "path": "content/js/stencil/ionic-site-components/hclgi8iu.es5.entry.js",
    "content": "IonicSiteComponents.loadBundle(\"hclgi8iu\",[\"exports\"],function(t){var e=window.IonicSiteComponents.h,i=function(t){var e={},i=t.document,s=t.GreenSockGlobals=t.GreenSockGlobals||t;if(s.TweenLite)return s.TweenLite;var n,r,a,o,l,h,_,u=function(t){var e,i=t.split(\".\"),n=s;for(e=0;e<i.length;e++)n[i[e]]=n=n[i[e]]||{};return n},c=u(\"com.greensock\"),f=function(t){var e,i=[],s=t.length;for(e=0;e!==s;i.push(t[e++]));return i},p=function(){},m=(h=Object.prototype.toString,_=h.call([]),function(t){return null!=t&&(t instanceof Array||\"object\"==typeof t&&!!t.push&&h.call(t)===_)}),d={},v=function(t,i,n,r){this.sc=d[t]?d[t].sc:[],d[t]=this,this.gsClass=null,this.func=n;var a=[];this.check=function(o){for(var l,h,_,c,f=i.length,p=f;--f>-1;)(l=d[i[f]]||new v(i[f],[])).gsClass?(a[f]=l.gsClass,p--):o&&l.sc.push(this);if(0===p&&n)for(_=(h=(\"com.greensock.\"+t).split(\".\")).pop(),c=u(h.join(\".\"))[_]=this.gsClass=n.apply(n,a),r&&(s[_]=e[_]=c),f=0;f<this.sc.length;f++)this.sc[f].check()},this.check(!0)},g=t._gsDefine=function(t,e,i,s){return new v(t,e,i,s)},y=c._class=function(t,e,i){return e=e||function(){},g(t,[],function(){return e},i),e};g.globals=s;var T=[0,0,1,1],w=y(\"easing.Ease\",function(t,e,i,s){this._func=t,this._type=i||0,this._power=s||0,this._params=e?T.concat(e):T},!0),P=w.map={},b=w.register=function(t,e,i,s){for(var n,r,a,o,l=e.split(\",\"),h=l.length,_=(i||\"easeIn,easeOut,easeInOut\").split(\",\");--h>-1;)for(r=l[h],n=s?y(\"easing.\"+r,null,!0):c.easing[r]||{},a=_.length;--a>-1;)P[r+\".\"+(o=_[a])]=P[o+r]=n[o]=t.getRatio?t:t[o]||new t};for((a=w.prototype)._calcEnd=!1,a.getRatio=function(t){if(this._func)return this._params[0]=t,this._func.apply(null,this._params);var e=this._type,i=this._power,s=1===e?1-t:2===e?t:t<.5?2*t:2*(1-t);return 1===i?s*=s:2===i?s*=s*s:3===i?s*=s*s*s:4===i&&(s*=s*s*s*s),1===e?1-s:2===e?s:t<.5?s/2:1-s/2},r=(n=[\"Linear\",\"Quad\",\"Cubic\",\"Quart\",\"Quint,Strong\"]).length;--r>-1;)a=n[r]+\",Power\"+r,b(new w(null,null,1,r),a,\"easeOut\",!0),b(new w(null,null,2,r),a,\"easeIn\"+(0===r?\",easeNone\":\"\")),b(new w(null,null,3,r),a,\"easeInOut\");P.linear=c.easing.Linear.easeIn,P.swing=c.easing.Quad.easeInOut;var S=y(\"events.EventDispatcher\",function(t){this._listeners={},this._eventTarget=t||this});(a=S.prototype).addEventListener=function(t,e,i,s,n){n=n||0;var r,a,h=this._listeners[t],_=0;for(this!==o||l||o.wake(),null==h&&(this._listeners[t]=h=[]),a=h.length;--a>-1;)(r=h[a]).c===e&&r.s===i?h.splice(a,1):0===_&&r.pr<n&&(_=a+1);h.splice(_,0,{c:e,s:i,up:s,pr:n})},a.removeEventListener=function(t,e){var i,s=this._listeners[t];if(s)for(i=s.length;--i>-1;)if(s[i].c===e)return void s.splice(i,1)},a.dispatchEvent=function(t){var e,i,s,n=this._listeners[t];if(n)for((e=n.length)>1&&(n=n.slice(0)),i=this._eventTarget;--e>-1;)(s=n[e])&&(s.up?s.c.call(s.s||i,{type:t,target:i}):s.c.call(s.s||i))};var k=t.requestAnimationFrame,A=t.cancelAnimationFrame,C=Date.now||function(){return(new Date).getTime()},x=C();for(r=(n=[\"ms\",\"moz\",\"webkit\",\"o\"]).length;--r>-1&&!k;)k=t[n[r]+\"RequestAnimationFrame\"],A=t[n[r]+\"CancelAnimationFrame\"]||t[n[r]+\"CancelRequestAnimationFrame\"];y(\"Ticker\",function(t,e){var s,n,r,a,h,_=this,u=C(),c=!(!1===e||!k)&&\"auto\",f=500,m=33,d=function(t){var e,i,o=C()-x;o>f&&(u+=o-m),_.time=((x+=o)-u)/1e3,e=_.time-h,(!s||e>0||!0===t)&&(_.frame++,h+=e+(e>=a?.004:a-e),i=!0),!0!==t&&(r=n(d)),i&&_.dispatchEvent(\"tick\")};S.call(_),_.time=_.frame=0,_.tick=function(){d(!0)},_.lagSmoothing=function(t,e){if(!arguments.length)return f<1e8;f=t||1e8,m=Math.min(e,f,0)},_.sleep=function(){null!=r&&(c&&A?A(r):clearTimeout(r),n=p,r=null,_===o&&(l=!1))},_.wake=function(t){null!==r?_.sleep():t?u+=-x+(x=C()):_.frame>10&&(x=C()-f+5),n=0===s?p:c&&k?k:function(t){return setTimeout(t,1e3*(h-_.time)+1|0)},_===o&&(l=!0),d(2)},_.fps=function(t){if(!arguments.length)return s;h=this.time+(a=1/((s=t)||60)),_.wake()},_.useRAF=function(t){if(!arguments.length)return c;_.sleep(),c=t,_.fps(s)},_.fps(t),setTimeout(function(){\"auto\"===c&&_.frame<5&&\"hidden\"!==(i||{}).visibilityState&&_.useRAF(!1)},1500)}),(a=c.Ticker.prototype=new c.events.EventDispatcher).constructor=c.Ticker;var R=y(\"core.Animation\",function(t,e){if(this.vars=e=e||{},this._duration=this._totalDuration=t||0,this._delay=Number(e.delay)||0,this._timeScale=1,this._active=!!e.immediateRender,this.data=e.data,this._reversed=!!e.reversed,J){l||o.wake();var i=this.vars.useFrames?H:J;i.add(this,i._time),this.vars.paused&&this.paused(!0)}});o=R.ticker=new c.Ticker,(a=R.prototype)._dirty=a._gc=a._initted=a._paused=!1,a._totalTime=a._time=0,a._rawPrevTime=-1,a._next=a._last=a._onUpdate=a._timeline=a.timeline=null,a._paused=!1;var D=function(){l&&C()-x>2e3&&(\"hidden\"!==(i||{}).visibilityState||!o.lagSmoothing())&&o.wake();var t=setTimeout(D,2e3);t.unref&&t.unref()};D(),a.play=function(t,e){return null!=t&&this.seek(t,e),this.reversed(!1).paused(!1)},a.pause=function(t,e){return null!=t&&this.seek(t,e),this.paused(!0)},a.resume=function(t,e){return null!=t&&this.seek(t,e),this.paused(!1)},a.seek=function(t,e){return this.totalTime(Number(t),!1!==e)},a.restart=function(t,e){return this.reversed(!1).paused(!1).totalTime(t?-this._delay:0,!1!==e,!0)},a.reverse=function(t,e){return null!=t&&this.seek(t||this.totalDuration(),e),this.reversed(!0).paused(!1)},a.render=function(t,e,i){},a.invalidate=function(){return this._time=this._totalTime=0,this._initted=this._gc=!1,this._rawPrevTime=-1,!this._gc&&this.timeline||this._enabled(!0),this},a.isActive=function(){var t,e=this._timeline,i=this._startTime;return!e||!this._gc&&!this._paused&&e.isActive()&&(t=e.rawTime(!0))>=i&&t<i+this.totalDuration()/this._timeScale-1e-8},a._enabled=function(t,e){return l||o.wake(),this._gc=!t,this._active=this.isActive(),!0!==e&&(t&&!this.timeline?this._timeline.add(this,this._startTime-this._delay):!t&&this.timeline&&this._timeline._remove(this,!0)),!1},a._kill=function(t,e){return this._enabled(!1,!1)},a.kill=function(t,e){return this._kill(t,e),this},a._uncache=function(t){for(var e=t?this:this.timeline;e;)e._dirty=!0,e=e.timeline;return this},a._swapSelfInParams=function(t){for(var e=t.length,i=t.concat();--e>-1;)\"{self}\"===t[e]&&(i[e]=this);return i},a._callback=function(t){var e=this.vars,i=e[t],s=e[t+\"Params\"],n=e[t+\"Scope\"]||e.callbackScope||this;switch(s?s.length:0){case 0:i.call(n);break;case 1:i.call(n,s[0]);break;case 2:i.call(n,s[0],s[1]);break;default:i.apply(n,s)}},a.eventCallback=function(t,e,i,s){if(\"on\"===(t||\"\").substr(0,2)){var n=this.vars;if(1===arguments.length)return n[t];null==e?delete n[t]:(n[t]=e,n[t+\"Params\"]=m(i)&&-1!==i.join(\"\").indexOf(\"{self}\")?this._swapSelfInParams(i):i,n[t+\"Scope\"]=s),\"onUpdate\"===t&&(this._onUpdate=e)}return this},a.delay=function(t){return arguments.length?(this._timeline.smoothChildTiming&&this.startTime(this._startTime+t-this._delay),this._delay=t,this):this._delay},a.duration=function(t){return arguments.length?(this._duration=this._totalDuration=t,this._uncache(!0),this._timeline.smoothChildTiming&&this._time>0&&this._time<this._duration&&0!==t&&this.totalTime(this._totalTime*(t/this._duration),!0),this):(this._dirty=!1,this._duration)},a.totalDuration=function(t){return this._dirty=!1,arguments.length?this.duration(t):this._totalDuration},a.time=function(t,e){return arguments.length?(this._dirty&&this.totalDuration(),this.totalTime(t>this._duration?this._duration:t,e)):this._time},a.totalTime=function(t,e,i){if(l||o.wake(),!arguments.length)return this._totalTime;if(this._timeline){if(t<0&&!i&&(t+=this.totalDuration()),this._timeline.smoothChildTiming){this._dirty&&this.totalDuration();var s=this._totalDuration,n=this._timeline;if(t>s&&!i&&(t=s),this._startTime=(this._paused?this._pauseTime:n._time)-(this._reversed?s-t:t)/this._timeScale,n._dirty||this._uncache(!1),n._timeline)for(;n._timeline;)n._timeline._time!==(n._startTime+n._totalTime)/n._timeScale&&n.totalTime(n._totalTime,!0),n=n._timeline}this._gc&&this._enabled(!0,!1),this._totalTime===t&&0!==this._duration||(z.length&&W(),this.render(t,e,!1),z.length&&W())}return this},a.progress=a.totalProgress=function(t,e){var i=this.duration();return arguments.length?this.totalTime(i*t,e):i?this._time/i:this.ratio},a.startTime=function(t){return arguments.length?(t!==this._startTime&&(this._startTime=t,this.timeline&&this.timeline._sortChildren&&this.timeline.add(this,t-this._delay)),this):this._startTime},a.endTime=function(t){return this._startTime+(0!=t?this.totalDuration():this.duration())/this._timeScale},a.timeScale=function(t){if(!arguments.length)return this._timeScale;var e,i;for(t=t||1e-8,this._timeline&&this._timeline.smoothChildTiming&&(i=(e=this._pauseTime)||0===e?e:this._timeline.totalTime(),this._startTime=i-(i-this._startTime)*this._timeScale/t),this._timeScale=t,i=this.timeline;i&&i.timeline;)i._dirty=!0,i.totalDuration(),i=i.timeline;return this},a.reversed=function(t){return arguments.length?(t!=this._reversed&&(this._reversed=t,this.totalTime(this._timeline&&!this._timeline.smoothChildTiming?this.totalDuration()-this._totalTime:this._totalTime,!0)),this):this._reversed},a.paused=function(t){if(!arguments.length)return this._paused;var e,i,s=this._timeline;return t!=this._paused&&s&&(l||t||o.wake(),i=(e=s.rawTime())-this._pauseTime,!t&&s.smoothChildTiming&&(this._startTime+=i,this._uncache(!1)),this._pauseTime=t?e:null,this._paused=t,this._active=this.isActive(),!t&&0!==i&&this._initted&&this.duration()&&this.render(e=s.smoothChildTiming?this._totalTime:(e-this._startTime)/this._timeScale,e===this._totalTime,!0)),this._gc&&!t&&this._enabled(!0,!1),this};var O=y(\"core.SimpleTimeline\",function(t){R.call(this,0,t),this.autoRemoveChildren=this.smoothChildTiming=!0});(a=O.prototype=new R).constructor=O,a.kill()._gc=!1,a._first=a._last=a._recent=null,a._sortChildren=!1,a.add=a.insert=function(t,e,i,s){var n,r;if(t._startTime=Number(e||0)+t._delay,t._paused&&this!==t._timeline&&(t._pauseTime=this.rawTime()-(t._timeline.rawTime()-t._pauseTime)),t.timeline&&t.timeline._remove(t,!0),t.timeline=t._timeline=this,t._gc&&t._enabled(!0,!0),n=this._last,this._sortChildren)for(r=t._startTime;n&&n._startTime>r;)n=n._prev;return n?(t._next=n._next,n._next=t):(t._next=this._first,this._first=t),t._next?t._next._prev=t:this._last=t,t._prev=n,this._recent=t,this._timeline&&this._uncache(!0),this},a._remove=function(t,e){return t.timeline===this&&(e||t._enabled(!1,!0),t._prev?t._prev._next=t._next:this._first===t&&(this._first=t._next),t._next?t._next._prev=t._prev:this._last===t&&(this._last=t._prev),t._next=t._prev=t.timeline=null,t===this._recent&&(this._recent=this._last),this._timeline&&this._uncache(!0)),this},a.render=function(t,e,i){var s,n=this._first;for(this._totalTime=this._time=this._rawPrevTime=t;n;)s=n._next,(n._active||t>=n._startTime&&!n._paused&&!n._gc)&&n.render(n._reversed?(n._dirty?n.totalDuration():n._totalDuration)-(t-n._startTime)*n._timeScale:(t-n._startTime)*n._timeScale,e,i),n=s},a.rawTime=function(){return l||o.wake(),this._totalTime};var E=y(\"TweenLite\",function(e,i,s){if(R.call(this,i,s),this.render=E.prototype.render,null==e)throw\"Cannot tween a null target.\";this.target=e=\"string\"!=typeof e?e:E.selector(e)||e;var n,r,a,o=e.jquery||e.length&&e!==t&&e[0]&&(e[0]===t||e[0].nodeType&&e[0].style&&!e.nodeType),l=this.vars.overwrite;if(this._overwrite=l=null==l?Y[E.defaultOverwrite]:\"number\"==typeof l?l>>0:Y[l],(o||e instanceof Array||e.push&&m(e))&&\"number\"!=typeof e[0])for(this._targets=a=f(e),this._propLookup=[],this._siblings=[],n=0;n<a.length;n++)(r=a[n])?\"string\"!=typeof r?r.length&&r!==t&&r[0]&&(r[0]===t||r[0].nodeType&&r[0].style&&!r.nodeType)?(a.splice(n--,1),this._targets=a=a.concat(f(r))):(this._siblings[n]=X(r,this,!1),1===l&&this._siblings[n].length>1&&tt(r,this,null,1,this._siblings[n])):\"string\"==typeof(r=a[n--]=E.selector(r))&&a.splice(n+1,1):a.splice(n--,1);else this._propLookup={},this._siblings=X(e,this,!1),1===l&&this._siblings.length>1&&tt(e,this,null,1,this._siblings);(this.vars.immediateRender||0===i&&0===this._delay&&!1!==this.vars.immediateRender)&&(this._time=-1e-8,this.render(Math.min(0,-this._delay)))},!0),I=function(e){return e&&e.length&&e!==t&&e[0]&&(e[0]===t||e[0].nodeType&&e[0].style&&!e.nodeType)};(a=E.prototype=new R).constructor=E,a.kill()._gc=!1,a.ratio=0,a._firstPT=a._targets=a._overwrittenProps=a._startAt=null,a._notifyPluginsOfEnabled=a._lazy=!1,E.version=\"2.1.2\",E.defaultEase=a._ease=new w(null,null,1,1),E.defaultOverwrite=\"auto\",E.ticker=o,E.autoSleep=120,E.lagSmoothing=function(t,e){o.lagSmoothing(t,e)},E.selector=t.$||t.jQuery||function(e){var s=t.$||t.jQuery;return s?(E.selector=s,s(e)):(i||(i=t.document),i?i.querySelectorAll?i.querySelectorAll(e):i.getElementById(\"#\"===e.charAt(0)?e.substr(1):e):e)};var z=[],L={},F=/(?:(-|-=|\\+=)?\\d*\\.?\\d*(?:e[\\-+]?\\d+)?)[0-9]/gi,$=/[\\+-]=-?[\\.\\d]/,U=function(t){for(var e,i=this._firstPT;i;)e=i.blob?1===t&&null!=this.end?this.end:t?this.join(\"\"):this.start:i.c*t+i.s,i.m?e=i.m.call(this._tween,e,this._target||i.t,this._tween):e<1e-6&&e>-1e-6&&!i.blob&&(e=0),i.f?i.fp?i.t[i.p](i.fp,e):i.t[i.p](e):i.t[i.p]=e,i=i._next},N=function(t){return(1e3*t|0)/1e3+\"\"},j=function(t,e,i,s){var n,r,a,o,l,h,_,u=[],c=0,f=\"\",p=0;for(u.start=t,u.end=e,t=u[0]=t+\"\",e=u[1]=e+\"\",i&&(i(u),t=u[0],e=u[1]),u.length=0,n=t.match(F)||[],r=e.match(F)||[],s&&(s._next=null,s.blob=1,u._firstPT=u._applyPT=s),l=r.length,o=0;o<l;o++)f+=(h=e.substr(c,e.indexOf(_=r[o],c)-c))||!o?h:\",\",c+=h.length,p?p=(p+1)%5:\"rgba(\"===h.substr(-5)&&(p=1),_===n[o]||n.length<=o?f+=_:(f&&(u.push(f),f=\"\"),a=parseFloat(n[o]),u.push(a),u._firstPT={_next:u._firstPT,t:u,p:u.length-1,s:a,c:(\"=\"===_.charAt(1)?parseInt(_.charAt(0)+\"1\",10)*parseFloat(_.substr(2)):parseFloat(_)-a)||0,f:0,m:p&&p<4?Math.round:N}),c+=_.length;return(f+=e.substr(c))&&u.push(f),u.setRatio=U,$.test(e)&&(u.end=null),u},M=function(t,e,i,s,n,r,a,o,l){\"function\"==typeof s&&(s=s(l||0,t));var h=typeof t[e],_=\"function\"!==h?\"\":e.indexOf(\"set\")||\"function\"!=typeof t[\"get\"+e.substr(3)]?e:\"get\"+e.substr(3),u=\"get\"!==i?i:_?a?t[_](a):t[_]():t[e],c=\"string\"==typeof s&&\"=\"===s.charAt(1),f={t:t,p:e,s:u,f:\"function\"===h,pg:0,n:n||e,m:r?\"function\"==typeof r?r:Math.round:0,pr:0,c:c?parseInt(s.charAt(0)+\"1\",10)*parseFloat(s.substr(2)):parseFloat(s)-u||0};if((\"number\"!=typeof u||\"number\"!=typeof s&&!c)&&(a||isNaN(u)||!c&&isNaN(s)||\"boolean\"==typeof u||\"boolean\"==typeof s?(f.fp=a,f={t:j(u,c?parseFloat(f.s)+f.c+(f.s+\"\").replace(/[0-9\\-\\.]/g,\"\"):s,o||E.defaultStringFilter,f),p:\"setRatio\",s:0,c:1,f:2,pg:0,n:n||e,pr:0,m:0}):(f.s=parseFloat(u),c||(f.c=parseFloat(s)-f.s||0))),f.c)return(f._next=this._firstPT)&&(f._next._prev=f),this._firstPT=f,f},q=E._internals={isArray:m,isSelector:I,lazyTweens:z,blobDif:j},Q=E._plugins={},B=q.tweenLookup={},G=0,K=q.reservedProps={ease:1,delay:1,overwrite:1,onComplete:1,onCompleteParams:1,onCompleteScope:1,useFrames:1,runBackwards:1,startAt:1,onUpdate:1,onUpdateParams:1,onUpdateScope:1,onStart:1,onStartParams:1,onStartScope:1,onReverseComplete:1,onReverseCompleteParams:1,onReverseCompleteScope:1,onRepeat:1,onRepeatParams:1,onRepeatScope:1,easeParams:1,yoyo:1,immediateRender:1,repeat:1,repeatDelay:1,data:1,paused:1,reversed:1,autoCSS:1,lazy:1,onOverwrite:1,callbackScope:1,stringFilter:1,id:1,yoyoEase:1,stagger:1},Y={none:0,all:1,auto:2,concurrent:3,allOnStart:4,preexisting:5,true:1,false:0},H=R._rootFramesTimeline=new O,J=R._rootTimeline=new O,V=30,W=q.lazyRender=function(){var t,e,i=z.length;for(L={},t=0;t<i;t++)(e=z[t])&&!1!==e._lazy&&(e.render(e._lazy[0],e._lazy[1],!0),e._lazy=!1);z.length=0};J._startTime=o.time,H._startTime=o.frame,J._active=H._active=!0,setTimeout(W,1),R._updateRoot=E.render=function(){var t,e,i;if(z.length&&W(),J.render((o.time-J._startTime)*J._timeScale,!1,!1),H.render((o.frame-H._startTime)*H._timeScale,!1,!1),z.length&&W(),o.frame>=V){for(i in V=o.frame+(parseInt(E.autoSleep,10)||120),B){for(t=(e=B[i].tweens).length;--t>-1;)e[t]._gc&&e.splice(t,1);0===e.length&&delete B[i]}if((!(i=J._first)||i._paused)&&E.autoSleep&&!H._first&&1===o._listeners.tick.length){for(;i&&i._paused;)i=i._next;i||o.sleep()}}},o.addEventListener(\"tick\",R._updateRoot);var X=function(t,e,i){var s,n,r=t._gsTweenID;if(B[r||(t._gsTweenID=r=\"t\"+G++)]||(B[r]={target:t,tweens:[]}),e&&((s=B[r].tweens)[n=s.length]=e,i))for(;--n>-1;)s[n]===e&&s.splice(n,1);return B[r].tweens},Z=function(t,e,i,s){var n,r,a=t.vars.onOverwrite;return a&&(n=a(t,e,i,s)),(a=E.onOverwrite)&&(r=a(t,e,i,s)),!1!==n&&!1!==r},tt=function(t,e,i,s,n){var r,a,o,l;if(1===s||s>=4){for(l=n.length,r=0;r<l;r++)if((o=n[r])!==e)o._gc||o._kill(null,t,e)&&(a=!0);else if(5===s)break;return a}var h,_=e._startTime+1e-8,u=[],c=0,f=0===e._duration;for(r=n.length;--r>-1;)(o=n[r])===e||o._gc||o._paused||(o._timeline!==e._timeline?(h=h||et(e,0,f),0===et(o,h,f)&&(u[c++]=o)):o._startTime<=_&&o._startTime+o.totalDuration()/o._timeScale>_&&((f||!o._initted)&&_-o._startTime<=2e-8||(u[c++]=o)));for(r=c;--r>-1;)if(l=(o=u[r])._firstPT,2===s&&o._kill(i,t,e)&&(a=!0),2!==s||!o._firstPT&&o._initted&&l){if(2!==s&&!Z(o,e))continue;o._enabled(!1,!1)&&(a=!0)}return a},et=function(t,e,i){for(var s=t._timeline,n=s._timeScale,r=t._startTime;s._timeline;){if(r+=s._startTime,n*=s._timeScale,s._paused)return-100;s=s._timeline}return(r/=n)>e?r-e:i&&r===e||!t._initted&&r-e<2e-8?1e-8:(r+=t.totalDuration()/t._timeScale/n)>e+1e-8?0:r-e-1e-8};a._init=function(){var t,e,i,s,n,r,a=this.vars,o=this._overwrittenProps,l=this._duration,h=!!a.immediateRender,_=a.ease,u=this._startAt;if(a.startAt){for(s in u&&(u.render(-1,!0),u.kill()),n={},a.startAt)n[s]=a.startAt[s];if(n.data=\"isStart\",n.overwrite=!1,n.immediateRender=!0,n.lazy=h&&!1!==a.lazy,n.startAt=n.delay=null,n.onUpdate=a.onUpdate,n.onUpdateParams=a.onUpdateParams,n.onUpdateScope=a.onUpdateScope||a.callbackScope||this,this._startAt=E.to(this.target||{},0,n),h)if(this._time>0)this._startAt=null;else if(0!==l)return}else if(a.runBackwards&&0!==l)if(u)u.render(-1,!0),u.kill(),this._startAt=null;else{for(s in 0!==this._time&&(h=!1),i={},a)K[s]&&\"autoCSS\"!==s||(i[s]=a[s]);if(i.overwrite=0,i.data=\"isFromStart\",i.lazy=h&&!1!==a.lazy,i.immediateRender=h,this._startAt=E.to(this.target,0,i),h){if(0===this._time)return}else this._startAt._init(),this._startAt._enabled(!1),this.vars.immediateRender&&(this._startAt=null)}if(this._ease=_=_?_ instanceof w?_:\"function\"==typeof _?new w(_,a.easeParams):P[_]||E.defaultEase:E.defaultEase,a.easeParams instanceof Array&&_.config&&(this._ease=_.config.apply(_,a.easeParams)),this._easeType=this._ease._type,this._easePower=this._ease._power,this._firstPT=null,this._targets)for(r=this._targets.length,t=0;t<r;t++)this._initProps(this._targets[t],this._propLookup[t]={},this._siblings[t],o?o[t]:null,t)&&(e=!0);else e=this._initProps(this.target,this._propLookup,this._siblings,o,0);if(e&&E._onPluginEvent(\"_onInitAllProps\",this),o&&(this._firstPT||\"function\"!=typeof this.target&&this._enabled(!1,!1)),a.runBackwards)for(i=this._firstPT;i;)i.s+=i.c,i.c=-i.c,i=i._next;this._onUpdate=a.onUpdate,this._initted=!0},a._initProps=function(e,i,s,n,r){var a,o,l,h,_,u;if(null==e)return!1;for(a in L[e._gsTweenID]&&W(),this.vars.css||e.style&&e!==t&&e.nodeType&&Q.css&&!1!==this.vars.autoCSS&&function(t,e){var i,s={};for(i in t)K[i]||i in e&&\"transform\"!==i&&\"x\"!==i&&\"y\"!==i&&\"width\"!==i&&\"height\"!==i&&\"className\"!==i&&\"border\"!==i||!(!Q[i]||Q[i]&&Q[i]._autoCSS)||(s[i]=t[i],delete t[i]);t.css=s}(this.vars,e),this.vars)if(u=this.vars[a],K[a])u&&(u instanceof Array||u.push&&m(u))&&-1!==u.join(\"\").indexOf(\"{self}\")&&(this.vars[a]=u=this._swapSelfInParams(u,this));else if(Q[a]&&(h=new Q[a])._onInitTween(e,this.vars[a],this,r)){for(this._firstPT=_={_next:this._firstPT,t:h,p:\"setRatio\",s:0,c:1,f:1,n:a,pg:1,pr:h._priority,m:0},o=h._overwriteProps.length;--o>-1;)i[h._overwriteProps[o]]=this._firstPT;(h._priority||h._onInitAllProps)&&(l=!0),(h._onDisable||h._onEnable)&&(this._notifyPluginsOfEnabled=!0),_._next&&(_._next._prev=_)}else i[a]=M.call(this,e,a,\"get\",u,a,0,null,this.vars.stringFilter,r);return n&&this._kill(n,e)?this._initProps(e,i,s,n,r):this._overwrite>1&&this._firstPT&&s.length>1&&tt(e,this,i,this._overwrite,s)?(this._kill(i,e),this._initProps(e,i,s,n,r)):(this._firstPT&&(!1!==this.vars.lazy&&this._duration||this.vars.lazy&&!this._duration)&&(L[e._gsTweenID]=!0),l)},a.render=function(t,e,i){var s,n,r,a,o=this._time,l=this._duration,h=this._rawPrevTime;if(t>=l-1e-8&&t>=0)this._totalTime=this._time=l,this.ratio=this._ease._calcEnd?this._ease.getRatio(1):1,this._reversed||(s=!0,n=\"onComplete\",i=i||this._timeline.autoRemoveChildren),0===l&&(this._initted||!this.vars.lazy||i)&&(this._startTime===this._timeline._duration&&(t=0),(h<0||t<=0&&t>=-1e-8||1e-8===h&&\"isPause\"!==this.data)&&h!==t&&(i=!0,h>1e-8&&(n=\"onReverseComplete\")),this._rawPrevTime=a=!e||t||h===t?t:1e-8);else if(t<1e-8)this._totalTime=this._time=0,this.ratio=this._ease._calcEnd?this._ease.getRatio(0):0,(0!==o||0===l&&h>0)&&(n=\"onReverseComplete\",s=this._reversed),t>-1e-8?t=0:t<0&&(this._active=!1,0===l&&(this._initted||!this.vars.lazy||i)&&(h>=0&&(1e-8!==h||\"isPause\"!==this.data)&&(i=!0),this._rawPrevTime=a=!e||t||h===t?t:1e-8)),(!this._initted||this._startAt&&this._startAt.progress())&&(i=!0);else if(this._totalTime=this._time=t,this._easeType){var _=t/l,u=this._easeType,c=this._easePower;(1===u||3===u&&_>=.5)&&(_=1-_),3===u&&(_*=2),1===c?_*=_:2===c?_*=_*_:3===c?_*=_*_*_:4===c&&(_*=_*_*_*_),this.ratio=1===u?1-_:2===u?_:t/l<.5?_/2:1-_/2}else this.ratio=this._ease.getRatio(t/l);if(this._time!==o||i){if(!this._initted){if(this._init(),!this._initted||this._gc)return;if(!i&&this._firstPT&&(!1!==this.vars.lazy&&this._duration||this.vars.lazy&&!this._duration))return this._time=this._totalTime=o,this._rawPrevTime=h,z.push(this),void(this._lazy=[t,e]);this._time&&!s?this.ratio=this._ease.getRatio(this._time/l):s&&this._ease._calcEnd&&(this.ratio=this._ease.getRatio(0===this._time?0:1))}for(!1!==this._lazy&&(this._lazy=!1),this._active||!this._paused&&this._time!==o&&t>=0&&(this._active=!0),0===o&&(this._startAt&&(t>=0?this._startAt.render(t,!0,i):n||(n=\"_dummyGS\")),this.vars.onStart&&(0===this._time&&0!==l||e||this._callback(\"onStart\"))),r=this._firstPT;r;)r.f?r.t[r.p](r.c*this.ratio+r.s):r.t[r.p]=r.c*this.ratio+r.s,r=r._next;this._onUpdate&&(t<0&&this._startAt&&-1e-4!==t&&this._startAt.render(t,!0,i),e||(this._time!==o||s||i)&&this._callback(\"onUpdate\")),n&&(this._gc&&!i||(t<0&&this._startAt&&!this._onUpdate&&-1e-4!==t&&this._startAt.render(t,!0,i),s&&(this._timeline.autoRemoveChildren&&this._enabled(!1,!1),this._active=!1),!e&&this.vars[n]&&this._callback(n),0===l&&1e-8===this._rawPrevTime&&1e-8!==a&&(this._rawPrevTime=0)))}},a._kill=function(t,e,i){if(\"all\"===t&&(t=null),null==t&&(null==e||e===this.target))return this._lazy=!1,this._enabled(!1,!1);e=\"string\"!=typeof e?e||this._targets||this.target:E.selector(e)||e;var s,n,r,a,o,l,h,_,u,c=i&&this._time&&i._startTime===this._startTime&&this._timeline===i._timeline,f=this._firstPT;if((m(e)||I(e))&&\"number\"!=typeof e[0])for(s=e.length;--s>-1;)this._kill(t,e[s],i)&&(l=!0);else{if(this._targets){for(s=this._targets.length;--s>-1;)if(e===this._targets[s]){o=this._propLookup[s]||{},this._overwrittenProps=this._overwrittenProps||[],n=this._overwrittenProps[s]=t?this._overwrittenProps[s]||{}:\"all\";break}}else{if(e!==this.target)return!1;o=this._propLookup,n=this._overwrittenProps=t?this._overwrittenProps||{}:\"all\"}if(o){if(h=t||o,_=t!==n&&\"all\"!==n&&t!==o&&(\"object\"!=typeof t||!t._tempKill),i&&(E.onOverwrite||this.vars.onOverwrite)){for(r in h)o[r]&&(u||(u=[]),u.push(r));if((u||!t)&&!Z(this,i,e,u))return!1}for(r in h)(a=o[r])&&(c&&(a.f?a.t[a.p](a.s):a.t[a.p]=a.s,l=!0),a.pg&&a.t._kill(h)&&(l=!0),a.pg&&0!==a.t._overwriteProps.length||(a._prev?a._prev._next=a._next:a===this._firstPT&&(this._firstPT=a._next),a._next&&(a._next._prev=a._prev),a._next=a._prev=null),delete o[r]),_&&(n[r]=1);!this._firstPT&&this._initted&&f&&this._enabled(!1,!1)}}return l},a.invalidate=function(){this._notifyPluginsOfEnabled&&E._onPluginEvent(\"_onDisable\",this);var t=this._time;return this._firstPT=this._overwrittenProps=this._startAt=this._onUpdate=null,this._notifyPluginsOfEnabled=this._active=this._lazy=!1,this._propLookup=this._targets?{}:[],R.prototype.invalidate.call(this),this.vars.immediateRender&&(this._time=-1e-8,this.render(t,!1,!1!==this.vars.lazy)),this},a._enabled=function(t,e){if(l||o.wake(),t&&this._gc){var i,s=this._targets;if(s)for(i=s.length;--i>-1;)this._siblings[i]=X(s[i],this,!0);else this._siblings=X(this.target,this,!0)}return R.prototype._enabled.call(this,t,e),!(!this._notifyPluginsOfEnabled||!this._firstPT)&&E._onPluginEvent(t?\"_onEnable\":\"_onDisable\",this)},E.to=function(t,e,i){return new E(t,e,i)},E.from=function(t,e,i){return i.runBackwards=!0,i.immediateRender=0!=i.immediateRender,new E(t,e,i)},E.fromTo=function(t,e,i,s){return s.startAt=i,s.immediateRender=0!=s.immediateRender&&0!=i.immediateRender,new E(t,e,s)},E.delayedCall=function(t,e,i,s,n){return new E(e,0,{delay:t,onComplete:e,onCompleteParams:i,callbackScope:s,onReverseComplete:e,onReverseCompleteParams:i,immediateRender:!1,lazy:!1,useFrames:n,overwrite:0})},E.set=function(t,e){return new E(t,0,e)},E.getTweensOf=function(t,e){if(null==t)return[];var i,s,n,r;if(t=\"string\"!=typeof t?t:E.selector(t)||t,(m(t)||I(t))&&\"number\"!=typeof t[0]){for(i=t.length,s=[];--i>-1;)s=s.concat(E.getTweensOf(t[i],e));for(i=s.length;--i>-1;)for(r=s[i],n=i;--n>-1;)r===s[n]&&s.splice(i,1)}else if(t._gsTweenID)for(i=(s=X(t).concat()).length;--i>-1;)(s[i]._gc||e&&!s[i].isActive())&&s.splice(i,1);return s||[]},E.killTweensOf=E.killDelayedCallsTo=function(t,e,i){\"object\"==typeof e&&(i=e,e=!1);for(var s=E.getTweensOf(t,e),n=s.length;--n>-1;)s[n]._kill(i,t)};var it=y(\"plugins.TweenPlugin\",function(t,e){this._overwriteProps=(t||\"\").split(\",\"),this._propName=this._overwriteProps[0],this._priority=e||0,this._super=it.prototype},!0);if(a=it.prototype,it.version=\"1.19.0\",it.API=2,a._firstPT=null,a._addTween=M,a.setRatio=U,a._kill=function(t){var e,i=this._overwriteProps,s=this._firstPT;if(null!=t[this._propName])this._overwriteProps=[];else for(e=i.length;--e>-1;)null!=t[i[e]]&&i.splice(e,1);for(;s;)null!=t[s.n]&&(s._next&&(s._next._prev=s._prev),s._prev?(s._prev._next=s._next,s._prev=null):this._firstPT===s&&(this._firstPT=s._next)),s=s._next;return!1},a._mod=a._roundProps=function(t){for(var e,i=this._firstPT;i;)(e=t[this._propName]||null!=i.n&&t[i.n.split(this._propName+\"_\").join(\"\")])&&\"function\"==typeof e&&(2===i.f?i.t._applyPT.m=e:i.m=e),i=i._next},E._onPluginEvent=function(t,e){var i,s,n,r,a,o=e._firstPT;if(\"_onInitAllProps\"===t){for(;o;){for(a=o._next,s=n;s&&s.pr>o.pr;)s=s._next;(o._prev=s?s._prev:r)?o._prev._next=o:n=o,(o._next=s)?s._prev=o:r=o,o=a}o=e._firstPT=n}for(;o;)o.pg&&\"function\"==typeof o.t[t]&&o.t[t]()&&(i=!0),o=o._next;return i},it.activate=function(t){for(var e=t.length;--e>-1;)t[e].API===it.API&&(Q[(new t[e])._propName]=t[e]);return!0},g.plugin=function(t){if(!(t&&t.propName&&t.init&&t.API))throw\"illegal plugin definition.\";var e,i=t.propName,s=t.priority||0,n=t.overwriteProps,r={init:\"_onInitTween\",set:\"setRatio\",kill:\"_kill\",round:\"_mod\",mod:\"_mod\",initAll:\"_onInitAllProps\"},a=y(\"plugins.\"+i.charAt(0).toUpperCase()+i.substr(1)+\"Plugin\",function(){it.call(this,i,s),this._overwriteProps=n||[]},!0===t.global),o=a.prototype=new it(i);for(e in o.constructor=a,a.API=t.API,r)\"function\"==typeof t[e]&&(o[r[e]]=t[e]);return a.version=t.version,it.activate([a]),a},n=t._gsQueue){for(r=0;r<n.length;r++)n[r]();for(a in d)d[a].func||t.console.log(\"GSAP encountered missing dependency: \"+a)}return l=!1,E}(\"undefined\"!=typeof window?window:\"undefined\"!=typeof module&&module.exports&&\"undefined\"!=typeof global?global:{}),s=function(){function t(){this.$circles=[],this.$lis=[],this.screenshots=[],this.active=null,this.duration=6,this.quickDuration=.25,this.r=31,this.gsRefs=[],this.scrollPause=null,this.circumference=2*this.r*Math.PI,this.animationSelect=this.animationSelect.bind(this),this.animationStart=this.animationStart.bind(this)}return t.prototype.componentDidLoad=function(){var t=this;setTimeout(this.animationStart,2e3,0);var e=function(i,s){t.$lis[s]=i,t.$circles[s]=i.querySelector(\".progress-ring__circle\"),t.screenshots[s]=i.querySelector(\"a\").dataset.screenshot,i.nextElementSibling&&\"LI\"===i.nextElementSibling.nodeName&&e(i.nextElementSibling,s+1)};e(this.el.querySelector(\"li:nth-child(1)\"),0),this.active=0},t.prototype.animationStart=function(t){var e=this;if(console.log(\"starting\"),window.pageYOffset>1e3)return console.log(\"pausing\"),void(this.scrollPause=setTimeout(this.animationStart,5e3,0));this.active=t,this.$lis[t].classList.add(\"active\"),i.to(this.$circles[t],.4,{opacity:1}),i.to(this.$circles[t],this.duration,{strokeDashoffset:0,onCompleteScope:this,onComplete:function(){e.animationStart(t>=e.$circles.length-1?0:t+1),e.$lis[t].classList.remove(\"active\"),i.to(e.$circles[t],.2,{opacity:0,onCompleteScope:e,onComplete:function(){i.to(e.$circles[t],0,{strokeDashoffset:e.circumference,lazy:!0})}})}})},t.prototype.animationSelect=function(t){var e=this;this.$lis[t].classList.add(\"active\"),this.active=t,this.scrollPause&&clearTimeout(this.scrollPause),this.animationStopOthers(t),i.to(this.$circles[t],this.quickDuration,{strokeDashoffset:0,opacity:1,onCompleteScope:this,onComplete:function(){e.animationStopOthers(t)}})},t.prototype.animationRestart=function(t){var e=this;this.animationStopOthers(t),i.to(this.$circles[t],.5,{strokeDashoffset:-1*this.circumference,lazy:!0,onCompleteScope:this,onComplete:function(){i.to(e.$circles[t],0,{strokeDashoffset:e.circumference,opacity:0,lazy:!0,onCompleteScope:e,onComplete:function(){e.animationStart(t)}})}})},t.prototype.animationStopOthers=function(t){var e=this,s=[];this.$circles.forEach(function(i,n){n!=t&&(s.push(i),e.$lis[n].classList.remove(\"active\"))}),i.to(s,.2,{opacity:0,lazy:!0,onCompleteScope:this,onComplete:function(){i.to(s,0,{strokeDashoffset:e.circumference,opacity:0,lazy:!0})}})},t.prototype.circle=function(t){return void 0===t&&(t=0),e(\"svg\",{class:\"progress-ring\",height:\"64\",width:\"64\"},e(\"circle\",{class:\"progress-ring__circle\",stroke:\"#6C89F7\",\"stroke-width\":\"2\",fill:\"transparent\",r:this.r,cx:\"32\",cy:\"32\",style:{strokeDasharray:this.circumference+\" \"+this.circumference,strokeDashoffset:this.circumference-t/100*this.circumference}}))},t.prototype.render=function(){var t=this;return[e(\"div\",{class:\"app-screenshot\"},this.screenshots.map(function(i,s){return e(\"img\",{class:s===t.active?\"active\":\"inactive\",src:i})})),e(\"nav\",null,e(\"ul\",null,e(\"li\",{onMouseEnter:function(){return t.animationSelect(0)},onMouseLeave:function(){return t.animationRestart(0)}},this.circle(),e(\"slot\",{name:\"1\"})),e(\"li\",{onMouseEnter:function(){return t.animationSelect(1)},onMouseLeave:function(){return t.animationRestart(1)}},this.circle(),e(\"slot\",{name:\"2\"})),e(\"li\",{onMouseEnter:function(){return t.animationSelect(2)},onMouseLeave:function(){return t.animationRestart(2)}},this.circle(),e(\"slot\",{name:\"3\"}))))]},Object.defineProperty(t,\"is\",{get:function(){return\"ionic-appflow-activator\"},enumerable:!0,configurable:!0}),Object.defineProperty(t,\"properties\",{get:function(){return{$circles:{state:!0},$lis:{state:!0},active:{state:!0},el:{elementRef:!0},screenshots:{state:!0}}},enumerable:!0,configurable:!0}),Object.defineProperty(t,\"style\",{get:function(){return\"ionic-appflow-activator nav{background:#fff;position:-webkit-sticky;position:sticky;top:100px;width:100%;margin-top:100px}ionic-appflow-activator ul{display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between;max-width:100%;width:600px;padding-left:10px;padding-right:10px;margin-top:-44px;margin-right:auto;margin-left:auto}ionic-appflow-activator li{width:120px;position:relative;list-style:none}ionic-appflow-activator .progress-ring{position:absolute;top:0;left:calc(50% - 32px);pointer-events:none}ionic-appflow-activator .progress-ring__circle{opacity:0;-webkit-transform:rotate(-90deg);transform:rotate(-90deg);-webkit-transform-origin:50% 50%;transform-origin:50% 50%}ionic-appflow-activator a{text-align:center;display:block;padding-top:64px;cursor:pointer}ionic-appflow-activator a .icon,ionic-appflow-activator a .icon-active{position:absolute;border-radius:50%;height:56px;width:56px;top:4px;left:calc(50% - 28px);-webkit-transition:opacity .2s ease,transform .2s ease;transition:opacity .2s ease,transform .2s ease}ionic-appflow-activator a .icon-active{opacity:0;-webkit-transform:scale(1.1);transform:scale(1.1);-webkit-transition:opacity .2s ease,transform .2s ease;transition:opacity .2s ease,transform .2s ease}ionic-appflow-activator a span{font-size:14px;line-height:22px;text-align:center;letter-spacing:.06em;text-transform:uppercase;font-weight:600;color:#92a1b3;-webkit-transition:color .2s ease;transition:color .2s ease}ionic-appflow-activator .active .icon{-webkit-transform:scale(1.1);transform:scale(1.1);opacity:0}ionic-appflow-activator .active .icon-active{opacity:1;-webkit-transform:scale(1);transform:scale(1)}ionic-appflow-activator .active span{color:#6c89f7}ionic-appflow-activator .app-screenshot{position:relative}ionic-appflow-activator .app-screenshot img{position:absolute;top:0;right:0;bottom:0;left:0;opacity:0;-webkit-transform:scale(1.01);transform:scale(1.01);-webkit-transition:opacity .2s ease,transform .2s ease;transition:opacity .2s ease,transform .2s ease}ionic-appflow-activator .app-screenshot img.active{opacity:1;-webkit-transform:none;transform:none}\\@-webkit-keyframes full-circle{to{stroke-dashoffset:0}}\\@keyframes full-circle{to{stroke-dashoffset:0}}\"},enumerable:!0,configurable:!0}),t}();t.IonicAppflowActivator=s,Object.defineProperty(t,\"__esModule\",{value:!0})});"
  },
  {
    "path": "content/js/stencil/ionic-site-components/hclgi8iu.sc.entry.js",
    "content": "const t=window.IonicSiteComponents.h;var e=function(t){var e={},i=t.document,s=t.GreenSockGlobals=t.GreenSockGlobals||t;if(s.TweenLite)return s.TweenLite;var n,r,a,o,l,h,_,c=function(t){var e,i=t.split(\".\"),n=s;for(e=0;e<i.length;e++)n[i[e]]=n=n[i[e]]||{};return n},u=c(\"com.greensock\"),m=function(t){var e,i=[],s=t.length;for(e=0;e!==s;i.push(t[e++]));return i},p=function(){},f=(h=Object.prototype.toString,_=h.call([]),function(t){return null!=t&&(t instanceof Array||\"object\"==typeof t&&!!t.push&&h.call(t)===_)}),d={},v=function(t,i,n,r){this.sc=d[t]?d[t].sc:[],d[t]=this,this.gsClass=null,this.func=n;var a=[];this.check=function(o){for(var l,h,_,u,m=i.length,p=m;--m>-1;)(l=d[i[m]]||new v(i[m],[])).gsClass?(a[m]=l.gsClass,p--):o&&l.sc.push(this);if(0===p&&n)for(_=(h=(\"com.greensock.\"+t).split(\".\")).pop(),u=c(h.join(\".\"))[_]=this.gsClass=n.apply(n,a),r&&(s[_]=e[_]=u),m=0;m<this.sc.length;m++)this.sc[m].check()},this.check(!0)},g=t._gsDefine=function(t,e,i,s){return new v(t,e,i,s)},T=u._class=function(t,e,i){return e=e||function(){},g(t,[],function(){return e},i),e};g.globals=s;var y=[0,0,1,1],w=T(\"easing.Ease\",function(t,e,i,s){this._func=t,this._type=i||0,this._power=s||0,this._params=e?y.concat(e):y},!0),P=w.map={},b=w.register=function(t,e,i,s){for(var n,r,a,o,l=e.split(\",\"),h=l.length,_=(i||\"easeIn,easeOut,easeInOut\").split(\",\");--h>-1;)for(r=l[h],n=s?T(\"easing.\"+r,null,!0):u.easing[r]||{},a=_.length;--a>-1;)P[r+\".\"+(o=_[a])]=P[o+r]=n[o]=t.getRatio?t:t[o]||new t};for((a=w.prototype)._calcEnd=!1,a.getRatio=function(t){if(this._func)return this._params[0]=t,this._func.apply(null,this._params);var e=this._type,i=this._power,s=1===e?1-t:2===e?t:t<.5?2*t:2*(1-t);return 1===i?s*=s:2===i?s*=s*s:3===i?s*=s*s*s:4===i&&(s*=s*s*s*s),1===e?1-s:2===e?s:t<.5?s/2:1-s/2},r=(n=[\"Linear\",\"Quad\",\"Cubic\",\"Quart\",\"Quint,Strong\"]).length;--r>-1;)a=n[r]+\",Power\"+r,b(new w(null,null,1,r),a,\"easeOut\",!0),b(new w(null,null,2,r),a,\"easeIn\"+(0===r?\",easeNone\":\"\")),b(new w(null,null,3,r),a,\"easeInOut\");P.linear=u.easing.Linear.easeIn,P.swing=u.easing.Quad.easeInOut;var S=T(\"events.EventDispatcher\",function(t){this._listeners={},this._eventTarget=t||this});(a=S.prototype).addEventListener=function(t,e,i,s,n){n=n||0;var r,a,h=this._listeners[t],_=0;for(this!==o||l||o.wake(),null==h&&(this._listeners[t]=h=[]),a=h.length;--a>-1;)(r=h[a]).c===e&&r.s===i?h.splice(a,1):0===_&&r.pr<n&&(_=a+1);h.splice(_,0,{c:e,s:i,up:s,pr:n})},a.removeEventListener=function(t,e){var i,s=this._listeners[t];if(s)for(i=s.length;--i>-1;)if(s[i].c===e)return void s.splice(i,1)},a.dispatchEvent=function(t){var e,i,s,n=this._listeners[t];if(n)for((e=n.length)>1&&(n=n.slice(0)),i=this._eventTarget;--e>-1;)(s=n[e])&&(s.up?s.c.call(s.s||i,{type:t,target:i}):s.c.call(s.s||i))};var k=t.requestAnimationFrame,A=t.cancelAnimationFrame,C=Date.now||function(){return(new Date).getTime()},x=C();for(r=(n=[\"ms\",\"moz\",\"webkit\",\"o\"]).length;--r>-1&&!k;)k=t[n[r]+\"RequestAnimationFrame\"],A=t[n[r]+\"CancelAnimationFrame\"]||t[n[r]+\"CancelRequestAnimationFrame\"];T(\"Ticker\",function(t,e){var s,n,r,a,h,_=this,c=C(),u=!(!1===e||!k)&&\"auto\",m=500,f=33,d=function(t){var e,i,o=C()-x;o>m&&(c+=o-f),_.time=((x+=o)-c)/1e3,e=_.time-h,(!s||e>0||!0===t)&&(_.frame++,h+=e+(e>=a?.004:a-e),i=!0),!0!==t&&(r=n(d)),i&&_.dispatchEvent(\"tick\")};S.call(_),_.time=_.frame=0,_.tick=function(){d(!0)},_.lagSmoothing=function(t,e){if(!arguments.length)return m<1e8;m=t||1e8,f=Math.min(e,m,0)},_.sleep=function(){null!=r&&(u&&A?A(r):clearTimeout(r),n=p,r=null,_===o&&(l=!1))},_.wake=function(t){null!==r?_.sleep():t?c+=-x+(x=C()):_.frame>10&&(x=C()-m+5),n=0===s?p:u&&k?k:function(t){return setTimeout(t,1e3*(h-_.time)+1|0)},_===o&&(l=!0),d(2)},_.fps=function(t){if(!arguments.length)return s;h=this.time+(a=1/((s=t)||60)),_.wake()},_.useRAF=function(t){if(!arguments.length)return u;_.sleep(),u=t,_.fps(s)},_.fps(t),setTimeout(function(){\"auto\"===u&&_.frame<5&&\"hidden\"!==(i||{}).visibilityState&&_.useRAF(!1)},1500)}),(a=u.Ticker.prototype=new u.events.EventDispatcher).constructor=u.Ticker;var R=T(\"core.Animation\",function(t,e){if(this.vars=e=e||{},this._duration=this._totalDuration=t||0,this._delay=Number(e.delay)||0,this._timeScale=1,this._active=!!e.immediateRender,this.data=e.data,this._reversed=!!e.reversed,J){l||o.wake();var i=this.vars.useFrames?H:J;i.add(this,i._time),this.vars.paused&&this.paused(!0)}});o=R.ticker=new u.Ticker,(a=R.prototype)._dirty=a._gc=a._initted=a._paused=!1,a._totalTime=a._time=0,a._rawPrevTime=-1,a._next=a._last=a._onUpdate=a._timeline=a.timeline=null,a._paused=!1;var D=function(){l&&C()-x>2e3&&(\"hidden\"!==(i||{}).visibilityState||!o.lagSmoothing())&&o.wake();var t=setTimeout(D,2e3);t.unref&&t.unref()};D(),a.play=function(t,e){return null!=t&&this.seek(t,e),this.reversed(!1).paused(!1)},a.pause=function(t,e){return null!=t&&this.seek(t,e),this.paused(!0)},a.resume=function(t,e){return null!=t&&this.seek(t,e),this.paused(!1)},a.seek=function(t,e){return this.totalTime(Number(t),!1!==e)},a.restart=function(t,e){return this.reversed(!1).paused(!1).totalTime(t?-this._delay:0,!1!==e,!0)},a.reverse=function(t,e){return null!=t&&this.seek(t||this.totalDuration(),e),this.reversed(!0).paused(!1)},a.render=function(t,e,i){},a.invalidate=function(){return this._time=this._totalTime=0,this._initted=this._gc=!1,this._rawPrevTime=-1,!this._gc&&this.timeline||this._enabled(!0),this},a.isActive=function(){var t,e=this._timeline,i=this._startTime;return!e||!this._gc&&!this._paused&&e.isActive()&&(t=e.rawTime(!0))>=i&&t<i+this.totalDuration()/this._timeScale-1e-8},a._enabled=function(t,e){return l||o.wake(),this._gc=!t,this._active=this.isActive(),!0!==e&&(t&&!this.timeline?this._timeline.add(this,this._startTime-this._delay):!t&&this.timeline&&this._timeline._remove(this,!0)),!1},a._kill=function(t,e){return this._enabled(!1,!1)},a.kill=function(t,e){return this._kill(t,e),this},a._uncache=function(t){for(var e=t?this:this.timeline;e;)e._dirty=!0,e=e.timeline;return this},a._swapSelfInParams=function(t){for(var e=t.length,i=t.concat();--e>-1;)\"{self}\"===t[e]&&(i[e]=this);return i},a._callback=function(t){var e=this.vars,i=e[t],s=e[t+\"Params\"],n=e[t+\"Scope\"]||e.callbackScope||this;switch(s?s.length:0){case 0:i.call(n);break;case 1:i.call(n,s[0]);break;case 2:i.call(n,s[0],s[1]);break;default:i.apply(n,s)}},a.eventCallback=function(t,e,i,s){if(\"on\"===(t||\"\").substr(0,2)){var n=this.vars;if(1===arguments.length)return n[t];null==e?delete n[t]:(n[t]=e,n[t+\"Params\"]=f(i)&&-1!==i.join(\"\").indexOf(\"{self}\")?this._swapSelfInParams(i):i,n[t+\"Scope\"]=s),\"onUpdate\"===t&&(this._onUpdate=e)}return this},a.delay=function(t){return arguments.length?(this._timeline.smoothChildTiming&&this.startTime(this._startTime+t-this._delay),this._delay=t,this):this._delay},a.duration=function(t){return arguments.length?(this._duration=this._totalDuration=t,this._uncache(!0),this._timeline.smoothChildTiming&&this._time>0&&this._time<this._duration&&0!==t&&this.totalTime(this._totalTime*(t/this._duration),!0),this):(this._dirty=!1,this._duration)},a.totalDuration=function(t){return this._dirty=!1,arguments.length?this.duration(t):this._totalDuration},a.time=function(t,e){return arguments.length?(this._dirty&&this.totalDuration(),this.totalTime(t>this._duration?this._duration:t,e)):this._time},a.totalTime=function(t,e,i){if(l||o.wake(),!arguments.length)return this._totalTime;if(this._timeline){if(t<0&&!i&&(t+=this.totalDuration()),this._timeline.smoothChildTiming){this._dirty&&this.totalDuration();var s=this._totalDuration,n=this._timeline;if(t>s&&!i&&(t=s),this._startTime=(this._paused?this._pauseTime:n._time)-(this._reversed?s-t:t)/this._timeScale,n._dirty||this._uncache(!1),n._timeline)for(;n._timeline;)n._timeline._time!==(n._startTime+n._totalTime)/n._timeScale&&n.totalTime(n._totalTime,!0),n=n._timeline}this._gc&&this._enabled(!0,!1),this._totalTime===t&&0!==this._duration||(z.length&&W(),this.render(t,e,!1),z.length&&W())}return this},a.progress=a.totalProgress=function(t,e){var i=this.duration();return arguments.length?this.totalTime(i*t,e):i?this._time/i:this.ratio},a.startTime=function(t){return arguments.length?(t!==this._startTime&&(this._startTime=t,this.timeline&&this.timeline._sortChildren&&this.timeline.add(this,t-this._delay)),this):this._startTime},a.endTime=function(t){return this._startTime+(0!=t?this.totalDuration():this.duration())/this._timeScale},a.timeScale=function(t){if(!arguments.length)return this._timeScale;var e,i;for(t=t||1e-8,this._timeline&&this._timeline.smoothChildTiming&&(i=(e=this._pauseTime)||0===e?e:this._timeline.totalTime(),this._startTime=i-(i-this._startTime)*this._timeScale/t),this._timeScale=t,i=this.timeline;i&&i.timeline;)i._dirty=!0,i.totalDuration(),i=i.timeline;return this},a.reversed=function(t){return arguments.length?(t!=this._reversed&&(this._reversed=t,this.totalTime(this._timeline&&!this._timeline.smoothChildTiming?this.totalDuration()-this._totalTime:this._totalTime,!0)),this):this._reversed},a.paused=function(t){if(!arguments.length)return this._paused;var e,i,s=this._timeline;return t!=this._paused&&s&&(l||t||o.wake(),i=(e=s.rawTime())-this._pauseTime,!t&&s.smoothChildTiming&&(this._startTime+=i,this._uncache(!1)),this._pauseTime=t?e:null,this._paused=t,this._active=this.isActive(),!t&&0!==i&&this._initted&&this.duration()&&this.render(e=s.smoothChildTiming?this._totalTime:(e-this._startTime)/this._timeScale,e===this._totalTime,!0)),this._gc&&!t&&this._enabled(!0,!1),this};var E=T(\"core.SimpleTimeline\",function(t){R.call(this,0,t),this.autoRemoveChildren=this.smoothChildTiming=!0});(a=E.prototype=new R).constructor=E,a.kill()._gc=!1,a._first=a._last=a._recent=null,a._sortChildren=!1,a.add=a.insert=function(t,e,i,s){var n,r;if(t._startTime=Number(e||0)+t._delay,t._paused&&this!==t._timeline&&(t._pauseTime=this.rawTime()-(t._timeline.rawTime()-t._pauseTime)),t.timeline&&t.timeline._remove(t,!0),t.timeline=t._timeline=this,t._gc&&t._enabled(!0,!0),n=this._last,this._sortChildren)for(r=t._startTime;n&&n._startTime>r;)n=n._prev;return n?(t._next=n._next,n._next=t):(t._next=this._first,this._first=t),t._next?t._next._prev=t:this._last=t,t._prev=n,this._recent=t,this._timeline&&this._uncache(!0),this},a._remove=function(t,e){return t.timeline===this&&(e||t._enabled(!1,!0),t._prev?t._prev._next=t._next:this._first===t&&(this._first=t._next),t._next?t._next._prev=t._prev:this._last===t&&(this._last=t._prev),t._next=t._prev=t.timeline=null,t===this._recent&&(this._recent=this._last),this._timeline&&this._uncache(!0)),this},a.render=function(t,e,i){var s,n=this._first;for(this._totalTime=this._time=this._rawPrevTime=t;n;)s=n._next,(n._active||t>=n._startTime&&!n._paused&&!n._gc)&&n.render(n._reversed?(n._dirty?n.totalDuration():n._totalDuration)-(t-n._startTime)*n._timeScale:(t-n._startTime)*n._timeScale,e,i),n=s},a.rawTime=function(){return l||o.wake(),this._totalTime};var I=T(\"TweenLite\",function(e,i,s){if(R.call(this,i,s),this.render=I.prototype.render,null==e)throw\"Cannot tween a null target.\";this.target=e=\"string\"!=typeof e?e:I.selector(e)||e;var n,r,a,o=e.jquery||e.length&&e!==t&&e[0]&&(e[0]===t||e[0].nodeType&&e[0].style&&!e.nodeType),l=this.vars.overwrite;if(this._overwrite=l=null==l?Y[I.defaultOverwrite]:\"number\"==typeof l?l>>0:Y[l],(o||e instanceof Array||e.push&&f(e))&&\"number\"!=typeof e[0])for(this._targets=a=m(e),this._propLookup=[],this._siblings=[],n=0;n<a.length;n++)(r=a[n])?\"string\"!=typeof r?r.length&&r!==t&&r[0]&&(r[0]===t||r[0].nodeType&&r[0].style&&!r.nodeType)?(a.splice(n--,1),this._targets=a=a.concat(m(r))):(this._siblings[n]=X(r,this,!1),1===l&&this._siblings[n].length>1&&tt(r,this,null,1,this._siblings[n])):\"string\"==typeof(r=a[n--]=I.selector(r))&&a.splice(n+1,1):a.splice(n--,1);else this._propLookup={},this._siblings=X(e,this,!1),1===l&&this._siblings.length>1&&tt(e,this,null,1,this._siblings);(this.vars.immediateRender||0===i&&0===this._delay&&!1!==this.vars.immediateRender)&&(this._time=-1e-8,this.render(Math.min(0,-this._delay)))},!0),O=function(e){return e&&e.length&&e!==t&&e[0]&&(e[0]===t||e[0].nodeType&&e[0].style&&!e.nodeType)};(a=I.prototype=new R).constructor=I,a.kill()._gc=!1,a.ratio=0,a._firstPT=a._targets=a._overwrittenProps=a._startAt=null,a._notifyPluginsOfEnabled=a._lazy=!1,I.version=\"2.1.2\",I.defaultEase=a._ease=new w(null,null,1,1),I.defaultOverwrite=\"auto\",I.ticker=o,I.autoSleep=120,I.lagSmoothing=function(t,e){o.lagSmoothing(t,e)},I.selector=t.$||t.jQuery||function(e){var s=t.$||t.jQuery;return s?(I.selector=s,s(e)):(i||(i=t.document),i?i.querySelectorAll?i.querySelectorAll(e):i.getElementById(\"#\"===e.charAt(0)?e.substr(1):e):e)};var z=[],L={},F=/(?:(-|-=|\\+=)?\\d*\\.?\\d*(?:e[\\-+]?\\d+)?)[0-9]/gi,$=/[\\+-]=-?[\\.\\d]/,U=function(t){for(var e,i=this._firstPT;i;)e=i.blob?1===t&&null!=this.end?this.end:t?this.join(\"\"):this.start:i.c*t+i.s,i.m?e=i.m.call(this._tween,e,this._target||i.t,this._tween):e<1e-6&&e>-1e-6&&!i.blob&&(e=0),i.f?i.fp?i.t[i.p](i.fp,e):i.t[i.p](e):i.t[i.p]=e,i=i._next},N=function(t){return(1e3*t|0)/1e3+\"\"},j=function(t,e,i,s){var n,r,a,o,l,h,_,c=[],u=0,m=\"\",p=0;for(c.start=t,c.end=e,t=c[0]=t+\"\",e=c[1]=e+\"\",i&&(i(c),t=c[0],e=c[1]),c.length=0,n=t.match(F)||[],r=e.match(F)||[],s&&(s._next=null,s.blob=1,c._firstPT=c._applyPT=s),l=r.length,o=0;o<l;o++)m+=(h=e.substr(u,e.indexOf(_=r[o],u)-u))||!o?h:\",\",u+=h.length,p?p=(p+1)%5:\"rgba(\"===h.substr(-5)&&(p=1),_===n[o]||n.length<=o?m+=_:(m&&(c.push(m),m=\"\"),a=parseFloat(n[o]),c.push(a),c._firstPT={_next:c._firstPT,t:c,p:c.length-1,s:a,c:(\"=\"===_.charAt(1)?parseInt(_.charAt(0)+\"1\",10)*parseFloat(_.substr(2)):parseFloat(_)-a)||0,f:0,m:p&&p<4?Math.round:N}),u+=_.length;return(m+=e.substr(u))&&c.push(m),c.setRatio=U,$.test(e)&&(c.end=null),c},q=function(t,e,i,s,n,r,a,o,l){\"function\"==typeof s&&(s=s(l||0,t));var h=typeof t[e],_=\"function\"!==h?\"\":e.indexOf(\"set\")||\"function\"!=typeof t[\"get\"+e.substr(3)]?e:\"get\"+e.substr(3),c=\"get\"!==i?i:_?a?t[_](a):t[_]():t[e],u=\"string\"==typeof s&&\"=\"===s.charAt(1),m={t,p:e,s:c,f:\"function\"===h,pg:0,n:n||e,m:r?\"function\"==typeof r?r:Math.round:0,pr:0,c:u?parseInt(s.charAt(0)+\"1\",10)*parseFloat(s.substr(2)):parseFloat(s)-c||0};if((\"number\"!=typeof c||\"number\"!=typeof s&&!u)&&(a||isNaN(c)||!u&&isNaN(s)||\"boolean\"==typeof c||\"boolean\"==typeof s?(m.fp=a,m={t:j(c,u?parseFloat(m.s)+m.c+(m.s+\"\").replace(/[0-9\\-\\.]/g,\"\"):s,o||I.defaultStringFilter,m),p:\"setRatio\",s:0,c:1,f:2,pg:0,n:n||e,pr:0,m:0}):(m.s=parseFloat(c),u||(m.c=parseFloat(s)-m.s||0))),m.c)return(m._next=this._firstPT)&&(m._next._prev=m),this._firstPT=m,m},M=I._internals={isArray:f,isSelector:O,lazyTweens:z,blobDif:j},Q=I._plugins={},G=M.tweenLookup={},B=0,K=M.reservedProps={ease:1,delay:1,overwrite:1,onComplete:1,onCompleteParams:1,onCompleteScope:1,useFrames:1,runBackwards:1,startAt:1,onUpdate:1,onUpdateParams:1,onUpdateScope:1,onStart:1,onStartParams:1,onStartScope:1,onReverseComplete:1,onReverseCompleteParams:1,onReverseCompleteScope:1,onRepeat:1,onRepeatParams:1,onRepeatScope:1,easeParams:1,yoyo:1,immediateRender:1,repeat:1,repeatDelay:1,data:1,paused:1,reversed:1,autoCSS:1,lazy:1,onOverwrite:1,callbackScope:1,stringFilter:1,id:1,yoyoEase:1,stagger:1},Y={none:0,all:1,auto:2,concurrent:3,allOnStart:4,preexisting:5,true:1,false:0},H=R._rootFramesTimeline=new E,J=R._rootTimeline=new E,V=30,W=M.lazyRender=function(){var t,e,i=z.length;for(L={},t=0;t<i;t++)(e=z[t])&&!1!==e._lazy&&(e.render(e._lazy[0],e._lazy[1],!0),e._lazy=!1);z.length=0};J._startTime=o.time,H._startTime=o.frame,J._active=H._active=!0,setTimeout(W,1),R._updateRoot=I.render=function(){var t,e,i;if(z.length&&W(),J.render((o.time-J._startTime)*J._timeScale,!1,!1),H.render((o.frame-H._startTime)*H._timeScale,!1,!1),z.length&&W(),o.frame>=V){for(i in V=o.frame+(parseInt(I.autoSleep,10)||120),G){for(t=(e=G[i].tweens).length;--t>-1;)e[t]._gc&&e.splice(t,1);0===e.length&&delete G[i]}if((!(i=J._first)||i._paused)&&I.autoSleep&&!H._first&&1===o._listeners.tick.length){for(;i&&i._paused;)i=i._next;i||o.sleep()}}},o.addEventListener(\"tick\",R._updateRoot);var X=function(t,e,i){var s,n,r=t._gsTweenID;if(G[r||(t._gsTweenID=r=\"t\"+B++)]||(G[r]={target:t,tweens:[]}),e&&((s=G[r].tweens)[n=s.length]=e,i))for(;--n>-1;)s[n]===e&&s.splice(n,1);return G[r].tweens},Z=function(t,e,i,s){var n,r,a=t.vars.onOverwrite;return a&&(n=a(t,e,i,s)),(a=I.onOverwrite)&&(r=a(t,e,i,s)),!1!==n&&!1!==r},tt=function(t,e,i,s,n){var r,a,o,l;if(1===s||s>=4){for(l=n.length,r=0;r<l;r++)if((o=n[r])!==e)o._gc||o._kill(null,t,e)&&(a=!0);else if(5===s)break;return a}var h,_=e._startTime+1e-8,c=[],u=0,m=0===e._duration;for(r=n.length;--r>-1;)(o=n[r])===e||o._gc||o._paused||(o._timeline!==e._timeline?(h=h||et(e,0,m),0===et(o,h,m)&&(c[u++]=o)):o._startTime<=_&&o._startTime+o.totalDuration()/o._timeScale>_&&((m||!o._initted)&&_-o._startTime<=2e-8||(c[u++]=o)));for(r=u;--r>-1;)if(l=(o=c[r])._firstPT,2===s&&o._kill(i,t,e)&&(a=!0),2!==s||!o._firstPT&&o._initted&&l){if(2!==s&&!Z(o,e))continue;o._enabled(!1,!1)&&(a=!0)}return a},et=function(t,e,i){for(var s=t._timeline,n=s._timeScale,r=t._startTime;s._timeline;){if(r+=s._startTime,n*=s._timeScale,s._paused)return-100;s=s._timeline}return(r/=n)>e?r-e:i&&r===e||!t._initted&&r-e<2e-8?1e-8:(r+=t.totalDuration()/t._timeScale/n)>e+1e-8?0:r-e-1e-8};a._init=function(){var t,e,i,s,n,r,a=this.vars,o=this._overwrittenProps,l=this._duration,h=!!a.immediateRender,_=a.ease,c=this._startAt;if(a.startAt){for(s in c&&(c.render(-1,!0),c.kill()),n={},a.startAt)n[s]=a.startAt[s];if(n.data=\"isStart\",n.overwrite=!1,n.immediateRender=!0,n.lazy=h&&!1!==a.lazy,n.startAt=n.delay=null,n.onUpdate=a.onUpdate,n.onUpdateParams=a.onUpdateParams,n.onUpdateScope=a.onUpdateScope||a.callbackScope||this,this._startAt=I.to(this.target||{},0,n),h)if(this._time>0)this._startAt=null;else if(0!==l)return}else if(a.runBackwards&&0!==l)if(c)c.render(-1,!0),c.kill(),this._startAt=null;else{for(s in 0!==this._time&&(h=!1),i={},a)K[s]&&\"autoCSS\"!==s||(i[s]=a[s]);if(i.overwrite=0,i.data=\"isFromStart\",i.lazy=h&&!1!==a.lazy,i.immediateRender=h,this._startAt=I.to(this.target,0,i),h){if(0===this._time)return}else this._startAt._init(),this._startAt._enabled(!1),this.vars.immediateRender&&(this._startAt=null)}if(this._ease=_=_?_ instanceof w?_:\"function\"==typeof _?new w(_,a.easeParams):P[_]||I.defaultEase:I.defaultEase,a.easeParams instanceof Array&&_.config&&(this._ease=_.config.apply(_,a.easeParams)),this._easeType=this._ease._type,this._easePower=this._ease._power,this._firstPT=null,this._targets)for(r=this._targets.length,t=0;t<r;t++)this._initProps(this._targets[t],this._propLookup[t]={},this._siblings[t],o?o[t]:null,t)&&(e=!0);else e=this._initProps(this.target,this._propLookup,this._siblings,o,0);if(e&&I._onPluginEvent(\"_onInitAllProps\",this),o&&(this._firstPT||\"function\"!=typeof this.target&&this._enabled(!1,!1)),a.runBackwards)for(i=this._firstPT;i;)i.s+=i.c,i.c=-i.c,i=i._next;this._onUpdate=a.onUpdate,this._initted=!0},a._initProps=function(e,i,s,n,r){var a,o,l,h,_,c;if(null==e)return!1;for(a in L[e._gsTweenID]&&W(),this.vars.css||e.style&&e!==t&&e.nodeType&&Q.css&&!1!==this.vars.autoCSS&&function(t,e){var i,s={};for(i in t)K[i]||i in e&&\"transform\"!==i&&\"x\"!==i&&\"y\"!==i&&\"width\"!==i&&\"height\"!==i&&\"className\"!==i&&\"border\"!==i||!(!Q[i]||Q[i]&&Q[i]._autoCSS)||(s[i]=t[i],delete t[i]);t.css=s}(this.vars,e),this.vars)if(c=this.vars[a],K[a])c&&(c instanceof Array||c.push&&f(c))&&-1!==c.join(\"\").indexOf(\"{self}\")&&(this.vars[a]=c=this._swapSelfInParams(c,this));else if(Q[a]&&(h=new Q[a])._onInitTween(e,this.vars[a],this,r)){for(this._firstPT=_={_next:this._firstPT,t:h,p:\"setRatio\",s:0,c:1,f:1,n:a,pg:1,pr:h._priority,m:0},o=h._overwriteProps.length;--o>-1;)i[h._overwriteProps[o]]=this._firstPT;(h._priority||h._onInitAllProps)&&(l=!0),(h._onDisable||h._onEnable)&&(this._notifyPluginsOfEnabled=!0),_._next&&(_._next._prev=_)}else i[a]=q.call(this,e,a,\"get\",c,a,0,null,this.vars.stringFilter,r);return n&&this._kill(n,e)?this._initProps(e,i,s,n,r):this._overwrite>1&&this._firstPT&&s.length>1&&tt(e,this,i,this._overwrite,s)?(this._kill(i,e),this._initProps(e,i,s,n,r)):(this._firstPT&&(!1!==this.vars.lazy&&this._duration||this.vars.lazy&&!this._duration)&&(L[e._gsTweenID]=!0),l)},a.render=function(t,e,i){var s,n,r,a,o=this._time,l=this._duration,h=this._rawPrevTime;if(t>=l-1e-8&&t>=0)this._totalTime=this._time=l,this.ratio=this._ease._calcEnd?this._ease.getRatio(1):1,this._reversed||(s=!0,n=\"onComplete\",i=i||this._timeline.autoRemoveChildren),0===l&&(this._initted||!this.vars.lazy||i)&&(this._startTime===this._timeline._duration&&(t=0),(h<0||t<=0&&t>=-1e-8||1e-8===h&&\"isPause\"!==this.data)&&h!==t&&(i=!0,h>1e-8&&(n=\"onReverseComplete\")),this._rawPrevTime=a=!e||t||h===t?t:1e-8);else if(t<1e-8)this._totalTime=this._time=0,this.ratio=this._ease._calcEnd?this._ease.getRatio(0):0,(0!==o||0===l&&h>0)&&(n=\"onReverseComplete\",s=this._reversed),t>-1e-8?t=0:t<0&&(this._active=!1,0===l&&(this._initted||!this.vars.lazy||i)&&(h>=0&&(1e-8!==h||\"isPause\"!==this.data)&&(i=!0),this._rawPrevTime=a=!e||t||h===t?t:1e-8)),(!this._initted||this._startAt&&this._startAt.progress())&&(i=!0);else if(this._totalTime=this._time=t,this._easeType){var _=t/l,c=this._easeType,u=this._easePower;(1===c||3===c&&_>=.5)&&(_=1-_),3===c&&(_*=2),1===u?_*=_:2===u?_*=_*_:3===u?_*=_*_*_:4===u&&(_*=_*_*_*_),this.ratio=1===c?1-_:2===c?_:t/l<.5?_/2:1-_/2}else this.ratio=this._ease.getRatio(t/l);if(this._time!==o||i){if(!this._initted){if(this._init(),!this._initted||this._gc)return;if(!i&&this._firstPT&&(!1!==this.vars.lazy&&this._duration||this.vars.lazy&&!this._duration))return this._time=this._totalTime=o,this._rawPrevTime=h,z.push(this),void(this._lazy=[t,e]);this._time&&!s?this.ratio=this._ease.getRatio(this._time/l):s&&this._ease._calcEnd&&(this.ratio=this._ease.getRatio(0===this._time?0:1))}for(!1!==this._lazy&&(this._lazy=!1),this._active||!this._paused&&this._time!==o&&t>=0&&(this._active=!0),0===o&&(this._startAt&&(t>=0?this._startAt.render(t,!0,i):n||(n=\"_dummyGS\")),this.vars.onStart&&(0===this._time&&0!==l||e||this._callback(\"onStart\"))),r=this._firstPT;r;)r.f?r.t[r.p](r.c*this.ratio+r.s):r.t[r.p]=r.c*this.ratio+r.s,r=r._next;this._onUpdate&&(t<0&&this._startAt&&-1e-4!==t&&this._startAt.render(t,!0,i),e||(this._time!==o||s||i)&&this._callback(\"onUpdate\")),n&&(this._gc&&!i||(t<0&&this._startAt&&!this._onUpdate&&-1e-4!==t&&this._startAt.render(t,!0,i),s&&(this._timeline.autoRemoveChildren&&this._enabled(!1,!1),this._active=!1),!e&&this.vars[n]&&this._callback(n),0===l&&1e-8===this._rawPrevTime&&1e-8!==a&&(this._rawPrevTime=0)))}},a._kill=function(t,e,i){if(\"all\"===t&&(t=null),null==t&&(null==e||e===this.target))return this._lazy=!1,this._enabled(!1,!1);e=\"string\"!=typeof e?e||this._targets||this.target:I.selector(e)||e;var s,n,r,a,o,l,h,_,c,u=i&&this._time&&i._startTime===this._startTime&&this._timeline===i._timeline,m=this._firstPT;if((f(e)||O(e))&&\"number\"!=typeof e[0])for(s=e.length;--s>-1;)this._kill(t,e[s],i)&&(l=!0);else{if(this._targets){for(s=this._targets.length;--s>-1;)if(e===this._targets[s]){o=this._propLookup[s]||{},this._overwrittenProps=this._overwrittenProps||[],n=this._overwrittenProps[s]=t?this._overwrittenProps[s]||{}:\"all\";break}}else{if(e!==this.target)return!1;o=this._propLookup,n=this._overwrittenProps=t?this._overwrittenProps||{}:\"all\"}if(o){if(h=t||o,_=t!==n&&\"all\"!==n&&t!==o&&(\"object\"!=typeof t||!t._tempKill),i&&(I.onOverwrite||this.vars.onOverwrite)){for(r in h)o[r]&&(c||(c=[]),c.push(r));if((c||!t)&&!Z(this,i,e,c))return!1}for(r in h)(a=o[r])&&(u&&(a.f?a.t[a.p](a.s):a.t[a.p]=a.s,l=!0),a.pg&&a.t._kill(h)&&(l=!0),a.pg&&0!==a.t._overwriteProps.length||(a._prev?a._prev._next=a._next:a===this._firstPT&&(this._firstPT=a._next),a._next&&(a._next._prev=a._prev),a._next=a._prev=null),delete o[r]),_&&(n[r]=1);!this._firstPT&&this._initted&&m&&this._enabled(!1,!1)}}return l},a.invalidate=function(){this._notifyPluginsOfEnabled&&I._onPluginEvent(\"_onDisable\",this);var t=this._time;return this._firstPT=this._overwrittenProps=this._startAt=this._onUpdate=null,this._notifyPluginsOfEnabled=this._active=this._lazy=!1,this._propLookup=this._targets?{}:[],R.prototype.invalidate.call(this),this.vars.immediateRender&&(this._time=-1e-8,this.render(t,!1,!1!==this.vars.lazy)),this},a._enabled=function(t,e){if(l||o.wake(),t&&this._gc){var i,s=this._targets;if(s)for(i=s.length;--i>-1;)this._siblings[i]=X(s[i],this,!0);else this._siblings=X(this.target,this,!0)}return R.prototype._enabled.call(this,t,e),!(!this._notifyPluginsOfEnabled||!this._firstPT)&&I._onPluginEvent(t?\"_onEnable\":\"_onDisable\",this)},I.to=function(t,e,i){return new I(t,e,i)},I.from=function(t,e,i){return i.runBackwards=!0,i.immediateRender=0!=i.immediateRender,new I(t,e,i)},I.fromTo=function(t,e,i,s){return s.startAt=i,s.immediateRender=0!=s.immediateRender&&0!=i.immediateRender,new I(t,e,s)},I.delayedCall=function(t,e,i,s,n){return new I(e,0,{delay:t,onComplete:e,onCompleteParams:i,callbackScope:s,onReverseComplete:e,onReverseCompleteParams:i,immediateRender:!1,lazy:!1,useFrames:n,overwrite:0})},I.set=function(t,e){return new I(t,0,e)},I.getTweensOf=function(t,e){if(null==t)return[];var i,s,n,r;if(t=\"string\"!=typeof t?t:I.selector(t)||t,(f(t)||O(t))&&\"number\"!=typeof t[0]){for(i=t.length,s=[];--i>-1;)s=s.concat(I.getTweensOf(t[i],e));for(i=s.length;--i>-1;)for(r=s[i],n=i;--n>-1;)r===s[n]&&s.splice(i,1)}else if(t._gsTweenID)for(i=(s=X(t).concat()).length;--i>-1;)(s[i]._gc||e&&!s[i].isActive())&&s.splice(i,1);return s||[]},I.killTweensOf=I.killDelayedCallsTo=function(t,e,i){\"object\"==typeof e&&(i=e,e=!1);for(var s=I.getTweensOf(t,e),n=s.length;--n>-1;)s[n]._kill(i,t)};var it=T(\"plugins.TweenPlugin\",function(t,e){this._overwriteProps=(t||\"\").split(\",\"),this._propName=this._overwriteProps[0],this._priority=e||0,this._super=it.prototype},!0);if(a=it.prototype,it.version=\"1.19.0\",it.API=2,a._firstPT=null,a._addTween=q,a.setRatio=U,a._kill=function(t){var e,i=this._overwriteProps,s=this._firstPT;if(null!=t[this._propName])this._overwriteProps=[];else for(e=i.length;--e>-1;)null!=t[i[e]]&&i.splice(e,1);for(;s;)null!=t[s.n]&&(s._next&&(s._next._prev=s._prev),s._prev?(s._prev._next=s._next,s._prev=null):this._firstPT===s&&(this._firstPT=s._next)),s=s._next;return!1},a._mod=a._roundProps=function(t){for(var e,i=this._firstPT;i;)(e=t[this._propName]||null!=i.n&&t[i.n.split(this._propName+\"_\").join(\"\")])&&\"function\"==typeof e&&(2===i.f?i.t._applyPT.m=e:i.m=e),i=i._next},I._onPluginEvent=function(t,e){var i,s,n,r,a,o=e._firstPT;if(\"_onInitAllProps\"===t){for(;o;){for(a=o._next,s=n;s&&s.pr>o.pr;)s=s._next;(o._prev=s?s._prev:r)?o._prev._next=o:n=o,(o._next=s)?s._prev=o:r=o,o=a}o=e._firstPT=n}for(;o;)o.pg&&\"function\"==typeof o.t[t]&&o.t[t]()&&(i=!0),o=o._next;return i},it.activate=function(t){for(var e=t.length;--e>-1;)t[e].API===it.API&&(Q[(new t[e])._propName]=t[e]);return!0},g.plugin=function(t){if(!(t&&t.propName&&t.init&&t.API))throw\"illegal plugin definition.\";var e,i=t.propName,s=t.priority||0,n=t.overwriteProps,r={init:\"_onInitTween\",set:\"setRatio\",kill:\"_kill\",round:\"_mod\",mod:\"_mod\",initAll:\"_onInitAllProps\"},a=T(\"plugins.\"+i.charAt(0).toUpperCase()+i.substr(1)+\"Plugin\",function(){it.call(this,i,s),this._overwriteProps=n||[]},!0===t.global),o=a.prototype=new it(i);for(e in o.constructor=a,a.API=t.API,r)\"function\"==typeof t[e]&&(o[r[e]]=t[e]);return a.version=t.version,it.activate([a]),a},n=t._gsQueue){for(r=0;r<n.length;r++)n[r]();for(a in d)d[a].func||t.console.log(\"GSAP encountered missing dependency: \"+a)}return l=!1,I}(\"undefined\"!=typeof window?window:\"undefined\"!=typeof module&&module.exports&&\"undefined\"!=typeof global?global:{});class i{constructor(){this.$circles=[],this.$lis=[],this.screenshots=[],this.active=null,this.duration=6,this.quickDuration=.25,this.r=31,this.gsRefs=[],this.scrollPause=null,this.circumference=2*this.r*Math.PI,this.animationSelect=this.animationSelect.bind(this),this.animationStart=this.animationStart.bind(this)}componentDidLoad(){setTimeout(this.animationStart,2e3,0);const t=(e,i)=>{this.$lis[i]=e,this.$circles[i]=e.querySelector(\".progress-ring__circle\"),this.screenshots[i]=e.querySelector(\"a\").dataset.screenshot,e.nextElementSibling&&\"LI\"===e.nextElementSibling.nodeName&&t(e.nextElementSibling,i+1)};t(this.el.querySelector(\"li:nth-child(1)\"),0),this.active=0}animationStart(t){if(console.log(\"starting\"),window.pageYOffset>1e3)return console.log(\"pausing\"),void(this.scrollPause=setTimeout(this.animationStart,5e3,0));this.active=t,this.$lis[t].classList.add(\"active\"),e.to(this.$circles[t],.4,{opacity:1}),e.to(this.$circles[t],this.duration,{strokeDashoffset:0,onCompleteScope:this,onComplete:()=>{this.animationStart(t>=this.$circles.length-1?0:t+1),this.$lis[t].classList.remove(\"active\"),e.to(this.$circles[t],.2,{opacity:0,onCompleteScope:this,onComplete:()=>{e.to(this.$circles[t],0,{strokeDashoffset:this.circumference,lazy:!0})}})}})}animationSelect(t){this.$lis[t].classList.add(\"active\"),this.active=t,this.scrollPause&&clearTimeout(this.scrollPause),this.animationStopOthers(t),e.to(this.$circles[t],this.quickDuration,{strokeDashoffset:0,opacity:1,onCompleteScope:this,onComplete:()=>{this.animationStopOthers(t)}})}animationRestart(t){this.animationStopOthers(t),e.to(this.$circles[t],.5,{strokeDashoffset:-1*this.circumference,lazy:!0,onCompleteScope:this,onComplete:()=>{e.to(this.$circles[t],0,{strokeDashoffset:this.circumference,opacity:0,lazy:!0,onCompleteScope:this,onComplete:()=>{this.animationStart(t)}})}})}animationStopOthers(t){const i=[];this.$circles.forEach((e,s)=>{s!=t&&(i.push(e),this.$lis[s].classList.remove(\"active\"))}),e.to(i,.2,{opacity:0,lazy:!0,onCompleteScope:this,onComplete:()=>{e.to(i,0,{strokeDashoffset:this.circumference,opacity:0,lazy:!0})}})}circle(e=0){return t(\"svg\",{class:\"progress-ring\",height:\"64\",width:\"64\"},t(\"circle\",{class:\"progress-ring__circle\",stroke:\"#6C89F7\",\"stroke-width\":\"2\",fill:\"transparent\",r:this.r,cx:\"32\",cy:\"32\",style:{strokeDasharray:`${this.circumference} ${this.circumference}`,strokeDashoffset:this.circumference-e/100*this.circumference}}))}render(){return[t(\"div\",{class:\"app-screenshot\"},this.screenshots.map((e,i)=>t(\"img\",{class:i===this.active?\"active\":\"inactive\",src:e}))),t(\"nav\",null,t(\"ul\",null,t(\"li\",{onMouseEnter:()=>this.animationSelect(0),onMouseLeave:()=>this.animationRestart(0)},this.circle(),t(\"slot\",{name:\"1\"})),t(\"li\",{onMouseEnter:()=>this.animationSelect(1),onMouseLeave:()=>this.animationRestart(1)},this.circle(),t(\"slot\",{name:\"2\"})),t(\"li\",{onMouseEnter:()=>this.animationSelect(2),onMouseLeave:()=>this.animationRestart(2)},this.circle(),t(\"slot\",{name:\"3\"}))))]}static get is(){return\"ionic-appflow-activator\"}static get properties(){return{$circles:{state:!0},$lis:{state:!0},active:{state:!0},el:{elementRef:!0},screenshots:{state:!0}}}static get style(){return\"ionic-appflow-activator nav{background:#fff;position:-webkit-sticky;position:sticky;top:100px;width:100%;margin-top:100px}ionic-appflow-activator ul{display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between;max-width:100%;width:600px;padding-left:10px;padding-right:10px;margin-top:-44px;margin-right:auto;margin-left:auto}ionic-appflow-activator li{width:120px;position:relative;list-style:none}ionic-appflow-activator .progress-ring{position:absolute;top:0;left:calc(50% - 32px);pointer-events:none}ionic-appflow-activator .progress-ring__circle{opacity:0;-webkit-transform:rotate(-90deg);transform:rotate(-90deg);-webkit-transform-origin:50% 50%;transform-origin:50% 50%}ionic-appflow-activator a{text-align:center;display:block;padding-top:64px;cursor:pointer}ionic-appflow-activator a .icon,ionic-appflow-activator a .icon-active{position:absolute;border-radius:50%;height:56px;width:56px;top:4px;left:calc(50% - 28px);-webkit-transition:opacity .2s ease,transform .2s ease;transition:opacity .2s ease,transform .2s ease}ionic-appflow-activator a .icon-active{opacity:0;-webkit-transform:scale(1.1);transform:scale(1.1);-webkit-transition:opacity .2s ease,transform .2s ease;transition:opacity .2s ease,transform .2s ease}ionic-appflow-activator a span{font-size:14px;line-height:22px;text-align:center;letter-spacing:.06em;text-transform:uppercase;font-weight:600;color:#92a1b3;-webkit-transition:color .2s ease;transition:color .2s ease}ionic-appflow-activator .active .icon{-webkit-transform:scale(1.1);transform:scale(1.1);opacity:0}ionic-appflow-activator .active .icon-active{opacity:1;-webkit-transform:scale(1);transform:scale(1)}ionic-appflow-activator .active span{color:#6c89f7}ionic-appflow-activator .app-screenshot{position:relative}ionic-appflow-activator .app-screenshot img{position:absolute;top:0;right:0;bottom:0;left:0;opacity:0;-webkit-transform:scale(1.01);transform:scale(1.01);-webkit-transition:opacity .2s ease,transform .2s ease;transition:opacity .2s ease,transform .2s ease}ionic-appflow-activator .app-screenshot img.active{opacity:1;-webkit-transform:none;transform:none}\\@-webkit-keyframes full-circle{to{stroke-dashoffset:0}}\\@keyframes full-circle{to{stroke-dashoffset:0}}\"}}export{i as IonicAppflowActivator};"
  },
  {
    "path": "content/js/stencil/ionic-site-components/hclgi8iu.sc.es5.entry.js",
    "content": "IonicSiteComponents.loadBundle(\"hclgi8iu\",[\"exports\"],function(t){var e=window.IonicSiteComponents.h,i=function(t){var e={},i=t.document,s=t.GreenSockGlobals=t.GreenSockGlobals||t;if(s.TweenLite)return s.TweenLite;var n,r,a,o,l,h,_,u=function(t){var e,i=t.split(\".\"),n=s;for(e=0;e<i.length;e++)n[i[e]]=n=n[i[e]]||{};return n},c=u(\"com.greensock\"),f=function(t){var e,i=[],s=t.length;for(e=0;e!==s;i.push(t[e++]));return i},p=function(){},m=(h=Object.prototype.toString,_=h.call([]),function(t){return null!=t&&(t instanceof Array||\"object\"==typeof t&&!!t.push&&h.call(t)===_)}),d={},v=function(t,i,n,r){this.sc=d[t]?d[t].sc:[],d[t]=this,this.gsClass=null,this.func=n;var a=[];this.check=function(o){for(var l,h,_,c,f=i.length,p=f;--f>-1;)(l=d[i[f]]||new v(i[f],[])).gsClass?(a[f]=l.gsClass,p--):o&&l.sc.push(this);if(0===p&&n)for(_=(h=(\"com.greensock.\"+t).split(\".\")).pop(),c=u(h.join(\".\"))[_]=this.gsClass=n.apply(n,a),r&&(s[_]=e[_]=c),f=0;f<this.sc.length;f++)this.sc[f].check()},this.check(!0)},g=t._gsDefine=function(t,e,i,s){return new v(t,e,i,s)},y=c._class=function(t,e,i){return e=e||function(){},g(t,[],function(){return e},i),e};g.globals=s;var T=[0,0,1,1],w=y(\"easing.Ease\",function(t,e,i,s){this._func=t,this._type=i||0,this._power=s||0,this._params=e?T.concat(e):T},!0),P=w.map={},b=w.register=function(t,e,i,s){for(var n,r,a,o,l=e.split(\",\"),h=l.length,_=(i||\"easeIn,easeOut,easeInOut\").split(\",\");--h>-1;)for(r=l[h],n=s?y(\"easing.\"+r,null,!0):c.easing[r]||{},a=_.length;--a>-1;)P[r+\".\"+(o=_[a])]=P[o+r]=n[o]=t.getRatio?t:t[o]||new t};for((a=w.prototype)._calcEnd=!1,a.getRatio=function(t){if(this._func)return this._params[0]=t,this._func.apply(null,this._params);var e=this._type,i=this._power,s=1===e?1-t:2===e?t:t<.5?2*t:2*(1-t);return 1===i?s*=s:2===i?s*=s*s:3===i?s*=s*s*s:4===i&&(s*=s*s*s*s),1===e?1-s:2===e?s:t<.5?s/2:1-s/2},r=(n=[\"Linear\",\"Quad\",\"Cubic\",\"Quart\",\"Quint,Strong\"]).length;--r>-1;)a=n[r]+\",Power\"+r,b(new w(null,null,1,r),a,\"easeOut\",!0),b(new w(null,null,2,r),a,\"easeIn\"+(0===r?\",easeNone\":\"\")),b(new w(null,null,3,r),a,\"easeInOut\");P.linear=c.easing.Linear.easeIn,P.swing=c.easing.Quad.easeInOut;var S=y(\"events.EventDispatcher\",function(t){this._listeners={},this._eventTarget=t||this});(a=S.prototype).addEventListener=function(t,e,i,s,n){n=n||0;var r,a,h=this._listeners[t],_=0;for(this!==o||l||o.wake(),null==h&&(this._listeners[t]=h=[]),a=h.length;--a>-1;)(r=h[a]).c===e&&r.s===i?h.splice(a,1):0===_&&r.pr<n&&(_=a+1);h.splice(_,0,{c:e,s:i,up:s,pr:n})},a.removeEventListener=function(t,e){var i,s=this._listeners[t];if(s)for(i=s.length;--i>-1;)if(s[i].c===e)return void s.splice(i,1)},a.dispatchEvent=function(t){var e,i,s,n=this._listeners[t];if(n)for((e=n.length)>1&&(n=n.slice(0)),i=this._eventTarget;--e>-1;)(s=n[e])&&(s.up?s.c.call(s.s||i,{type:t,target:i}):s.c.call(s.s||i))};var k=t.requestAnimationFrame,A=t.cancelAnimationFrame,C=Date.now||function(){return(new Date).getTime()},x=C();for(r=(n=[\"ms\",\"moz\",\"webkit\",\"o\"]).length;--r>-1&&!k;)k=t[n[r]+\"RequestAnimationFrame\"],A=t[n[r]+\"CancelAnimationFrame\"]||t[n[r]+\"CancelRequestAnimationFrame\"];y(\"Ticker\",function(t,e){var s,n,r,a,h,_=this,u=C(),c=!(!1===e||!k)&&\"auto\",f=500,m=33,d=function(t){var e,i,o=C()-x;o>f&&(u+=o-m),_.time=((x+=o)-u)/1e3,e=_.time-h,(!s||e>0||!0===t)&&(_.frame++,h+=e+(e>=a?.004:a-e),i=!0),!0!==t&&(r=n(d)),i&&_.dispatchEvent(\"tick\")};S.call(_),_.time=_.frame=0,_.tick=function(){d(!0)},_.lagSmoothing=function(t,e){if(!arguments.length)return f<1e8;f=t||1e8,m=Math.min(e,f,0)},_.sleep=function(){null!=r&&(c&&A?A(r):clearTimeout(r),n=p,r=null,_===o&&(l=!1))},_.wake=function(t){null!==r?_.sleep():t?u+=-x+(x=C()):_.frame>10&&(x=C()-f+5),n=0===s?p:c&&k?k:function(t){return setTimeout(t,1e3*(h-_.time)+1|0)},_===o&&(l=!0),d(2)},_.fps=function(t){if(!arguments.length)return s;h=this.time+(a=1/((s=t)||60)),_.wake()},_.useRAF=function(t){if(!arguments.length)return c;_.sleep(),c=t,_.fps(s)},_.fps(t),setTimeout(function(){\"auto\"===c&&_.frame<5&&\"hidden\"!==(i||{}).visibilityState&&_.useRAF(!1)},1500)}),(a=c.Ticker.prototype=new c.events.EventDispatcher).constructor=c.Ticker;var R=y(\"core.Animation\",function(t,e){if(this.vars=e=e||{},this._duration=this._totalDuration=t||0,this._delay=Number(e.delay)||0,this._timeScale=1,this._active=!!e.immediateRender,this.data=e.data,this._reversed=!!e.reversed,J){l||o.wake();var i=this.vars.useFrames?H:J;i.add(this,i._time),this.vars.paused&&this.paused(!0)}});o=R.ticker=new c.Ticker,(a=R.prototype)._dirty=a._gc=a._initted=a._paused=!1,a._totalTime=a._time=0,a._rawPrevTime=-1,a._next=a._last=a._onUpdate=a._timeline=a.timeline=null,a._paused=!1;var D=function(){l&&C()-x>2e3&&(\"hidden\"!==(i||{}).visibilityState||!o.lagSmoothing())&&o.wake();var t=setTimeout(D,2e3);t.unref&&t.unref()};D(),a.play=function(t,e){return null!=t&&this.seek(t,e),this.reversed(!1).paused(!1)},a.pause=function(t,e){return null!=t&&this.seek(t,e),this.paused(!0)},a.resume=function(t,e){return null!=t&&this.seek(t,e),this.paused(!1)},a.seek=function(t,e){return this.totalTime(Number(t),!1!==e)},a.restart=function(t,e){return this.reversed(!1).paused(!1).totalTime(t?-this._delay:0,!1!==e,!0)},a.reverse=function(t,e){return null!=t&&this.seek(t||this.totalDuration(),e),this.reversed(!0).paused(!1)},a.render=function(t,e,i){},a.invalidate=function(){return this._time=this._totalTime=0,this._initted=this._gc=!1,this._rawPrevTime=-1,!this._gc&&this.timeline||this._enabled(!0),this},a.isActive=function(){var t,e=this._timeline,i=this._startTime;return!e||!this._gc&&!this._paused&&e.isActive()&&(t=e.rawTime(!0))>=i&&t<i+this.totalDuration()/this._timeScale-1e-8},a._enabled=function(t,e){return l||o.wake(),this._gc=!t,this._active=this.isActive(),!0!==e&&(t&&!this.timeline?this._timeline.add(this,this._startTime-this._delay):!t&&this.timeline&&this._timeline._remove(this,!0)),!1},a._kill=function(t,e){return this._enabled(!1,!1)},a.kill=function(t,e){return this._kill(t,e),this},a._uncache=function(t){for(var e=t?this:this.timeline;e;)e._dirty=!0,e=e.timeline;return this},a._swapSelfInParams=function(t){for(var e=t.length,i=t.concat();--e>-1;)\"{self}\"===t[e]&&(i[e]=this);return i},a._callback=function(t){var e=this.vars,i=e[t],s=e[t+\"Params\"],n=e[t+\"Scope\"]||e.callbackScope||this;switch(s?s.length:0){case 0:i.call(n);break;case 1:i.call(n,s[0]);break;case 2:i.call(n,s[0],s[1]);break;default:i.apply(n,s)}},a.eventCallback=function(t,e,i,s){if(\"on\"===(t||\"\").substr(0,2)){var n=this.vars;if(1===arguments.length)return n[t];null==e?delete n[t]:(n[t]=e,n[t+\"Params\"]=m(i)&&-1!==i.join(\"\").indexOf(\"{self}\")?this._swapSelfInParams(i):i,n[t+\"Scope\"]=s),\"onUpdate\"===t&&(this._onUpdate=e)}return this},a.delay=function(t){return arguments.length?(this._timeline.smoothChildTiming&&this.startTime(this._startTime+t-this._delay),this._delay=t,this):this._delay},a.duration=function(t){return arguments.length?(this._duration=this._totalDuration=t,this._uncache(!0),this._timeline.smoothChildTiming&&this._time>0&&this._time<this._duration&&0!==t&&this.totalTime(this._totalTime*(t/this._duration),!0),this):(this._dirty=!1,this._duration)},a.totalDuration=function(t){return this._dirty=!1,arguments.length?this.duration(t):this._totalDuration},a.time=function(t,e){return arguments.length?(this._dirty&&this.totalDuration(),this.totalTime(t>this._duration?this._duration:t,e)):this._time},a.totalTime=function(t,e,i){if(l||o.wake(),!arguments.length)return this._totalTime;if(this._timeline){if(t<0&&!i&&(t+=this.totalDuration()),this._timeline.smoothChildTiming){this._dirty&&this.totalDuration();var s=this._totalDuration,n=this._timeline;if(t>s&&!i&&(t=s),this._startTime=(this._paused?this._pauseTime:n._time)-(this._reversed?s-t:t)/this._timeScale,n._dirty||this._uncache(!1),n._timeline)for(;n._timeline;)n._timeline._time!==(n._startTime+n._totalTime)/n._timeScale&&n.totalTime(n._totalTime,!0),n=n._timeline}this._gc&&this._enabled(!0,!1),this._totalTime===t&&0!==this._duration||(z.length&&W(),this.render(t,e,!1),z.length&&W())}return this},a.progress=a.totalProgress=function(t,e){var i=this.duration();return arguments.length?this.totalTime(i*t,e):i?this._time/i:this.ratio},a.startTime=function(t){return arguments.length?(t!==this._startTime&&(this._startTime=t,this.timeline&&this.timeline._sortChildren&&this.timeline.add(this,t-this._delay)),this):this._startTime},a.endTime=function(t){return this._startTime+(0!=t?this.totalDuration():this.duration())/this._timeScale},a.timeScale=function(t){if(!arguments.length)return this._timeScale;var e,i;for(t=t||1e-8,this._timeline&&this._timeline.smoothChildTiming&&(i=(e=this._pauseTime)||0===e?e:this._timeline.totalTime(),this._startTime=i-(i-this._startTime)*this._timeScale/t),this._timeScale=t,i=this.timeline;i&&i.timeline;)i._dirty=!0,i.totalDuration(),i=i.timeline;return this},a.reversed=function(t){return arguments.length?(t!=this._reversed&&(this._reversed=t,this.totalTime(this._timeline&&!this._timeline.smoothChildTiming?this.totalDuration()-this._totalTime:this._totalTime,!0)),this):this._reversed},a.paused=function(t){if(!arguments.length)return this._paused;var e,i,s=this._timeline;return t!=this._paused&&s&&(l||t||o.wake(),i=(e=s.rawTime())-this._pauseTime,!t&&s.smoothChildTiming&&(this._startTime+=i,this._uncache(!1)),this._pauseTime=t?e:null,this._paused=t,this._active=this.isActive(),!t&&0!==i&&this._initted&&this.duration()&&this.render(e=s.smoothChildTiming?this._totalTime:(e-this._startTime)/this._timeScale,e===this._totalTime,!0)),this._gc&&!t&&this._enabled(!0,!1),this};var O=y(\"core.SimpleTimeline\",function(t){R.call(this,0,t),this.autoRemoveChildren=this.smoothChildTiming=!0});(a=O.prototype=new R).constructor=O,a.kill()._gc=!1,a._first=a._last=a._recent=null,a._sortChildren=!1,a.add=a.insert=function(t,e,i,s){var n,r;if(t._startTime=Number(e||0)+t._delay,t._paused&&this!==t._timeline&&(t._pauseTime=this.rawTime()-(t._timeline.rawTime()-t._pauseTime)),t.timeline&&t.timeline._remove(t,!0),t.timeline=t._timeline=this,t._gc&&t._enabled(!0,!0),n=this._last,this._sortChildren)for(r=t._startTime;n&&n._startTime>r;)n=n._prev;return n?(t._next=n._next,n._next=t):(t._next=this._first,this._first=t),t._next?t._next._prev=t:this._last=t,t._prev=n,this._recent=t,this._timeline&&this._uncache(!0),this},a._remove=function(t,e){return t.timeline===this&&(e||t._enabled(!1,!0),t._prev?t._prev._next=t._next:this._first===t&&(this._first=t._next),t._next?t._next._prev=t._prev:this._last===t&&(this._last=t._prev),t._next=t._prev=t.timeline=null,t===this._recent&&(this._recent=this._last),this._timeline&&this._uncache(!0)),this},a.render=function(t,e,i){var s,n=this._first;for(this._totalTime=this._time=this._rawPrevTime=t;n;)s=n._next,(n._active||t>=n._startTime&&!n._paused&&!n._gc)&&n.render(n._reversed?(n._dirty?n.totalDuration():n._totalDuration)-(t-n._startTime)*n._timeScale:(t-n._startTime)*n._timeScale,e,i),n=s},a.rawTime=function(){return l||o.wake(),this._totalTime};var E=y(\"TweenLite\",function(e,i,s){if(R.call(this,i,s),this.render=E.prototype.render,null==e)throw\"Cannot tween a null target.\";this.target=e=\"string\"!=typeof e?e:E.selector(e)||e;var n,r,a,o=e.jquery||e.length&&e!==t&&e[0]&&(e[0]===t||e[0].nodeType&&e[0].style&&!e.nodeType),l=this.vars.overwrite;if(this._overwrite=l=null==l?Y[E.defaultOverwrite]:\"number\"==typeof l?l>>0:Y[l],(o||e instanceof Array||e.push&&m(e))&&\"number\"!=typeof e[0])for(this._targets=a=f(e),this._propLookup=[],this._siblings=[],n=0;n<a.length;n++)(r=a[n])?\"string\"!=typeof r?r.length&&r!==t&&r[0]&&(r[0]===t||r[0].nodeType&&r[0].style&&!r.nodeType)?(a.splice(n--,1),this._targets=a=a.concat(f(r))):(this._siblings[n]=X(r,this,!1),1===l&&this._siblings[n].length>1&&tt(r,this,null,1,this._siblings[n])):\"string\"==typeof(r=a[n--]=E.selector(r))&&a.splice(n+1,1):a.splice(n--,1);else this._propLookup={},this._siblings=X(e,this,!1),1===l&&this._siblings.length>1&&tt(e,this,null,1,this._siblings);(this.vars.immediateRender||0===i&&0===this._delay&&!1!==this.vars.immediateRender)&&(this._time=-1e-8,this.render(Math.min(0,-this._delay)))},!0),I=function(e){return e&&e.length&&e!==t&&e[0]&&(e[0]===t||e[0].nodeType&&e[0].style&&!e.nodeType)};(a=E.prototype=new R).constructor=E,a.kill()._gc=!1,a.ratio=0,a._firstPT=a._targets=a._overwrittenProps=a._startAt=null,a._notifyPluginsOfEnabled=a._lazy=!1,E.version=\"2.1.2\",E.defaultEase=a._ease=new w(null,null,1,1),E.defaultOverwrite=\"auto\",E.ticker=o,E.autoSleep=120,E.lagSmoothing=function(t,e){o.lagSmoothing(t,e)},E.selector=t.$||t.jQuery||function(e){var s=t.$||t.jQuery;return s?(E.selector=s,s(e)):(i||(i=t.document),i?i.querySelectorAll?i.querySelectorAll(e):i.getElementById(\"#\"===e.charAt(0)?e.substr(1):e):e)};var z=[],L={},F=/(?:(-|-=|\\+=)?\\d*\\.?\\d*(?:e[\\-+]?\\d+)?)[0-9]/gi,$=/[\\+-]=-?[\\.\\d]/,U=function(t){for(var e,i=this._firstPT;i;)e=i.blob?1===t&&null!=this.end?this.end:t?this.join(\"\"):this.start:i.c*t+i.s,i.m?e=i.m.call(this._tween,e,this._target||i.t,this._tween):e<1e-6&&e>-1e-6&&!i.blob&&(e=0),i.f?i.fp?i.t[i.p](i.fp,e):i.t[i.p](e):i.t[i.p]=e,i=i._next},N=function(t){return(1e3*t|0)/1e3+\"\"},j=function(t,e,i,s){var n,r,a,o,l,h,_,u=[],c=0,f=\"\",p=0;for(u.start=t,u.end=e,t=u[0]=t+\"\",e=u[1]=e+\"\",i&&(i(u),t=u[0],e=u[1]),u.length=0,n=t.match(F)||[],r=e.match(F)||[],s&&(s._next=null,s.blob=1,u._firstPT=u._applyPT=s),l=r.length,o=0;o<l;o++)f+=(h=e.substr(c,e.indexOf(_=r[o],c)-c))||!o?h:\",\",c+=h.length,p?p=(p+1)%5:\"rgba(\"===h.substr(-5)&&(p=1),_===n[o]||n.length<=o?f+=_:(f&&(u.push(f),f=\"\"),a=parseFloat(n[o]),u.push(a),u._firstPT={_next:u._firstPT,t:u,p:u.length-1,s:a,c:(\"=\"===_.charAt(1)?parseInt(_.charAt(0)+\"1\",10)*parseFloat(_.substr(2)):parseFloat(_)-a)||0,f:0,m:p&&p<4?Math.round:N}),c+=_.length;return(f+=e.substr(c))&&u.push(f),u.setRatio=U,$.test(e)&&(u.end=null),u},M=function(t,e,i,s,n,r,a,o,l){\"function\"==typeof s&&(s=s(l||0,t));var h=typeof t[e],_=\"function\"!==h?\"\":e.indexOf(\"set\")||\"function\"!=typeof t[\"get\"+e.substr(3)]?e:\"get\"+e.substr(3),u=\"get\"!==i?i:_?a?t[_](a):t[_]():t[e],c=\"string\"==typeof s&&\"=\"===s.charAt(1),f={t:t,p:e,s:u,f:\"function\"===h,pg:0,n:n||e,m:r?\"function\"==typeof r?r:Math.round:0,pr:0,c:c?parseInt(s.charAt(0)+\"1\",10)*parseFloat(s.substr(2)):parseFloat(s)-u||0};if((\"number\"!=typeof u||\"number\"!=typeof s&&!c)&&(a||isNaN(u)||!c&&isNaN(s)||\"boolean\"==typeof u||\"boolean\"==typeof s?(f.fp=a,f={t:j(u,c?parseFloat(f.s)+f.c+(f.s+\"\").replace(/[0-9\\-\\.]/g,\"\"):s,o||E.defaultStringFilter,f),p:\"setRatio\",s:0,c:1,f:2,pg:0,n:n||e,pr:0,m:0}):(f.s=parseFloat(u),c||(f.c=parseFloat(s)-f.s||0))),f.c)return(f._next=this._firstPT)&&(f._next._prev=f),this._firstPT=f,f},q=E._internals={isArray:m,isSelector:I,lazyTweens:z,blobDif:j},Q=E._plugins={},B=q.tweenLookup={},G=0,K=q.reservedProps={ease:1,delay:1,overwrite:1,onComplete:1,onCompleteParams:1,onCompleteScope:1,useFrames:1,runBackwards:1,startAt:1,onUpdate:1,onUpdateParams:1,onUpdateScope:1,onStart:1,onStartParams:1,onStartScope:1,onReverseComplete:1,onReverseCompleteParams:1,onReverseCompleteScope:1,onRepeat:1,onRepeatParams:1,onRepeatScope:1,easeParams:1,yoyo:1,immediateRender:1,repeat:1,repeatDelay:1,data:1,paused:1,reversed:1,autoCSS:1,lazy:1,onOverwrite:1,callbackScope:1,stringFilter:1,id:1,yoyoEase:1,stagger:1},Y={none:0,all:1,auto:2,concurrent:3,allOnStart:4,preexisting:5,true:1,false:0},H=R._rootFramesTimeline=new O,J=R._rootTimeline=new O,V=30,W=q.lazyRender=function(){var t,e,i=z.length;for(L={},t=0;t<i;t++)(e=z[t])&&!1!==e._lazy&&(e.render(e._lazy[0],e._lazy[1],!0),e._lazy=!1);z.length=0};J._startTime=o.time,H._startTime=o.frame,J._active=H._active=!0,setTimeout(W,1),R._updateRoot=E.render=function(){var t,e,i;if(z.length&&W(),J.render((o.time-J._startTime)*J._timeScale,!1,!1),H.render((o.frame-H._startTime)*H._timeScale,!1,!1),z.length&&W(),o.frame>=V){for(i in V=o.frame+(parseInt(E.autoSleep,10)||120),B){for(t=(e=B[i].tweens).length;--t>-1;)e[t]._gc&&e.splice(t,1);0===e.length&&delete B[i]}if((!(i=J._first)||i._paused)&&E.autoSleep&&!H._first&&1===o._listeners.tick.length){for(;i&&i._paused;)i=i._next;i||o.sleep()}}},o.addEventListener(\"tick\",R._updateRoot);var X=function(t,e,i){var s,n,r=t._gsTweenID;if(B[r||(t._gsTweenID=r=\"t\"+G++)]||(B[r]={target:t,tweens:[]}),e&&((s=B[r].tweens)[n=s.length]=e,i))for(;--n>-1;)s[n]===e&&s.splice(n,1);return B[r].tweens},Z=function(t,e,i,s){var n,r,a=t.vars.onOverwrite;return a&&(n=a(t,e,i,s)),(a=E.onOverwrite)&&(r=a(t,e,i,s)),!1!==n&&!1!==r},tt=function(t,e,i,s,n){var r,a,o,l;if(1===s||s>=4){for(l=n.length,r=0;r<l;r++)if((o=n[r])!==e)o._gc||o._kill(null,t,e)&&(a=!0);else if(5===s)break;return a}var h,_=e._startTime+1e-8,u=[],c=0,f=0===e._duration;for(r=n.length;--r>-1;)(o=n[r])===e||o._gc||o._paused||(o._timeline!==e._timeline?(h=h||et(e,0,f),0===et(o,h,f)&&(u[c++]=o)):o._startTime<=_&&o._startTime+o.totalDuration()/o._timeScale>_&&((f||!o._initted)&&_-o._startTime<=2e-8||(u[c++]=o)));for(r=c;--r>-1;)if(l=(o=u[r])._firstPT,2===s&&o._kill(i,t,e)&&(a=!0),2!==s||!o._firstPT&&o._initted&&l){if(2!==s&&!Z(o,e))continue;o._enabled(!1,!1)&&(a=!0)}return a},et=function(t,e,i){for(var s=t._timeline,n=s._timeScale,r=t._startTime;s._timeline;){if(r+=s._startTime,n*=s._timeScale,s._paused)return-100;s=s._timeline}return(r/=n)>e?r-e:i&&r===e||!t._initted&&r-e<2e-8?1e-8:(r+=t.totalDuration()/t._timeScale/n)>e+1e-8?0:r-e-1e-8};a._init=function(){var t,e,i,s,n,r,a=this.vars,o=this._overwrittenProps,l=this._duration,h=!!a.immediateRender,_=a.ease,u=this._startAt;if(a.startAt){for(s in u&&(u.render(-1,!0),u.kill()),n={},a.startAt)n[s]=a.startAt[s];if(n.data=\"isStart\",n.overwrite=!1,n.immediateRender=!0,n.lazy=h&&!1!==a.lazy,n.startAt=n.delay=null,n.onUpdate=a.onUpdate,n.onUpdateParams=a.onUpdateParams,n.onUpdateScope=a.onUpdateScope||a.callbackScope||this,this._startAt=E.to(this.target||{},0,n),h)if(this._time>0)this._startAt=null;else if(0!==l)return}else if(a.runBackwards&&0!==l)if(u)u.render(-1,!0),u.kill(),this._startAt=null;else{for(s in 0!==this._time&&(h=!1),i={},a)K[s]&&\"autoCSS\"!==s||(i[s]=a[s]);if(i.overwrite=0,i.data=\"isFromStart\",i.lazy=h&&!1!==a.lazy,i.immediateRender=h,this._startAt=E.to(this.target,0,i),h){if(0===this._time)return}else this._startAt._init(),this._startAt._enabled(!1),this.vars.immediateRender&&(this._startAt=null)}if(this._ease=_=_?_ instanceof w?_:\"function\"==typeof _?new w(_,a.easeParams):P[_]||E.defaultEase:E.defaultEase,a.easeParams instanceof Array&&_.config&&(this._ease=_.config.apply(_,a.easeParams)),this._easeType=this._ease._type,this._easePower=this._ease._power,this._firstPT=null,this._targets)for(r=this._targets.length,t=0;t<r;t++)this._initProps(this._targets[t],this._propLookup[t]={},this._siblings[t],o?o[t]:null,t)&&(e=!0);else e=this._initProps(this.target,this._propLookup,this._siblings,o,0);if(e&&E._onPluginEvent(\"_onInitAllProps\",this),o&&(this._firstPT||\"function\"!=typeof this.target&&this._enabled(!1,!1)),a.runBackwards)for(i=this._firstPT;i;)i.s+=i.c,i.c=-i.c,i=i._next;this._onUpdate=a.onUpdate,this._initted=!0},a._initProps=function(e,i,s,n,r){var a,o,l,h,_,u;if(null==e)return!1;for(a in L[e._gsTweenID]&&W(),this.vars.css||e.style&&e!==t&&e.nodeType&&Q.css&&!1!==this.vars.autoCSS&&function(t,e){var i,s={};for(i in t)K[i]||i in e&&\"transform\"!==i&&\"x\"!==i&&\"y\"!==i&&\"width\"!==i&&\"height\"!==i&&\"className\"!==i&&\"border\"!==i||!(!Q[i]||Q[i]&&Q[i]._autoCSS)||(s[i]=t[i],delete t[i]);t.css=s}(this.vars,e),this.vars)if(u=this.vars[a],K[a])u&&(u instanceof Array||u.push&&m(u))&&-1!==u.join(\"\").indexOf(\"{self}\")&&(this.vars[a]=u=this._swapSelfInParams(u,this));else if(Q[a]&&(h=new Q[a])._onInitTween(e,this.vars[a],this,r)){for(this._firstPT=_={_next:this._firstPT,t:h,p:\"setRatio\",s:0,c:1,f:1,n:a,pg:1,pr:h._priority,m:0},o=h._overwriteProps.length;--o>-1;)i[h._overwriteProps[o]]=this._firstPT;(h._priority||h._onInitAllProps)&&(l=!0),(h._onDisable||h._onEnable)&&(this._notifyPluginsOfEnabled=!0),_._next&&(_._next._prev=_)}else i[a]=M.call(this,e,a,\"get\",u,a,0,null,this.vars.stringFilter,r);return n&&this._kill(n,e)?this._initProps(e,i,s,n,r):this._overwrite>1&&this._firstPT&&s.length>1&&tt(e,this,i,this._overwrite,s)?(this._kill(i,e),this._initProps(e,i,s,n,r)):(this._firstPT&&(!1!==this.vars.lazy&&this._duration||this.vars.lazy&&!this._duration)&&(L[e._gsTweenID]=!0),l)},a.render=function(t,e,i){var s,n,r,a,o=this._time,l=this._duration,h=this._rawPrevTime;if(t>=l-1e-8&&t>=0)this._totalTime=this._time=l,this.ratio=this._ease._calcEnd?this._ease.getRatio(1):1,this._reversed||(s=!0,n=\"onComplete\",i=i||this._timeline.autoRemoveChildren),0===l&&(this._initted||!this.vars.lazy||i)&&(this._startTime===this._timeline._duration&&(t=0),(h<0||t<=0&&t>=-1e-8||1e-8===h&&\"isPause\"!==this.data)&&h!==t&&(i=!0,h>1e-8&&(n=\"onReverseComplete\")),this._rawPrevTime=a=!e||t||h===t?t:1e-8);else if(t<1e-8)this._totalTime=this._time=0,this.ratio=this._ease._calcEnd?this._ease.getRatio(0):0,(0!==o||0===l&&h>0)&&(n=\"onReverseComplete\",s=this._reversed),t>-1e-8?t=0:t<0&&(this._active=!1,0===l&&(this._initted||!this.vars.lazy||i)&&(h>=0&&(1e-8!==h||\"isPause\"!==this.data)&&(i=!0),this._rawPrevTime=a=!e||t||h===t?t:1e-8)),(!this._initted||this._startAt&&this._startAt.progress())&&(i=!0);else if(this._totalTime=this._time=t,this._easeType){var _=t/l,u=this._easeType,c=this._easePower;(1===u||3===u&&_>=.5)&&(_=1-_),3===u&&(_*=2),1===c?_*=_:2===c?_*=_*_:3===c?_*=_*_*_:4===c&&(_*=_*_*_*_),this.ratio=1===u?1-_:2===u?_:t/l<.5?_/2:1-_/2}else this.ratio=this._ease.getRatio(t/l);if(this._time!==o||i){if(!this._initted){if(this._init(),!this._initted||this._gc)return;if(!i&&this._firstPT&&(!1!==this.vars.lazy&&this._duration||this.vars.lazy&&!this._duration))return this._time=this._totalTime=o,this._rawPrevTime=h,z.push(this),void(this._lazy=[t,e]);this._time&&!s?this.ratio=this._ease.getRatio(this._time/l):s&&this._ease._calcEnd&&(this.ratio=this._ease.getRatio(0===this._time?0:1))}for(!1!==this._lazy&&(this._lazy=!1),this._active||!this._paused&&this._time!==o&&t>=0&&(this._active=!0),0===o&&(this._startAt&&(t>=0?this._startAt.render(t,!0,i):n||(n=\"_dummyGS\")),this.vars.onStart&&(0===this._time&&0!==l||e||this._callback(\"onStart\"))),r=this._firstPT;r;)r.f?r.t[r.p](r.c*this.ratio+r.s):r.t[r.p]=r.c*this.ratio+r.s,r=r._next;this._onUpdate&&(t<0&&this._startAt&&-1e-4!==t&&this._startAt.render(t,!0,i),e||(this._time!==o||s||i)&&this._callback(\"onUpdate\")),n&&(this._gc&&!i||(t<0&&this._startAt&&!this._onUpdate&&-1e-4!==t&&this._startAt.render(t,!0,i),s&&(this._timeline.autoRemoveChildren&&this._enabled(!1,!1),this._active=!1),!e&&this.vars[n]&&this._callback(n),0===l&&1e-8===this._rawPrevTime&&1e-8!==a&&(this._rawPrevTime=0)))}},a._kill=function(t,e,i){if(\"all\"===t&&(t=null),null==t&&(null==e||e===this.target))return this._lazy=!1,this._enabled(!1,!1);e=\"string\"!=typeof e?e||this._targets||this.target:E.selector(e)||e;var s,n,r,a,o,l,h,_,u,c=i&&this._time&&i._startTime===this._startTime&&this._timeline===i._timeline,f=this._firstPT;if((m(e)||I(e))&&\"number\"!=typeof e[0])for(s=e.length;--s>-1;)this._kill(t,e[s],i)&&(l=!0);else{if(this._targets){for(s=this._targets.length;--s>-1;)if(e===this._targets[s]){o=this._propLookup[s]||{},this._overwrittenProps=this._overwrittenProps||[],n=this._overwrittenProps[s]=t?this._overwrittenProps[s]||{}:\"all\";break}}else{if(e!==this.target)return!1;o=this._propLookup,n=this._overwrittenProps=t?this._overwrittenProps||{}:\"all\"}if(o){if(h=t||o,_=t!==n&&\"all\"!==n&&t!==o&&(\"object\"!=typeof t||!t._tempKill),i&&(E.onOverwrite||this.vars.onOverwrite)){for(r in h)o[r]&&(u||(u=[]),u.push(r));if((u||!t)&&!Z(this,i,e,u))return!1}for(r in h)(a=o[r])&&(c&&(a.f?a.t[a.p](a.s):a.t[a.p]=a.s,l=!0),a.pg&&a.t._kill(h)&&(l=!0),a.pg&&0!==a.t._overwriteProps.length||(a._prev?a._prev._next=a._next:a===this._firstPT&&(this._firstPT=a._next),a._next&&(a._next._prev=a._prev),a._next=a._prev=null),delete o[r]),_&&(n[r]=1);!this._firstPT&&this._initted&&f&&this._enabled(!1,!1)}}return l},a.invalidate=function(){this._notifyPluginsOfEnabled&&E._onPluginEvent(\"_onDisable\",this);var t=this._time;return this._firstPT=this._overwrittenProps=this._startAt=this._onUpdate=null,this._notifyPluginsOfEnabled=this._active=this._lazy=!1,this._propLookup=this._targets?{}:[],R.prototype.invalidate.call(this),this.vars.immediateRender&&(this._time=-1e-8,this.render(t,!1,!1!==this.vars.lazy)),this},a._enabled=function(t,e){if(l||o.wake(),t&&this._gc){var i,s=this._targets;if(s)for(i=s.length;--i>-1;)this._siblings[i]=X(s[i],this,!0);else this._siblings=X(this.target,this,!0)}return R.prototype._enabled.call(this,t,e),!(!this._notifyPluginsOfEnabled||!this._firstPT)&&E._onPluginEvent(t?\"_onEnable\":\"_onDisable\",this)},E.to=function(t,e,i){return new E(t,e,i)},E.from=function(t,e,i){return i.runBackwards=!0,i.immediateRender=0!=i.immediateRender,new E(t,e,i)},E.fromTo=function(t,e,i,s){return s.startAt=i,s.immediateRender=0!=s.immediateRender&&0!=i.immediateRender,new E(t,e,s)},E.delayedCall=function(t,e,i,s,n){return new E(e,0,{delay:t,onComplete:e,onCompleteParams:i,callbackScope:s,onReverseComplete:e,onReverseCompleteParams:i,immediateRender:!1,lazy:!1,useFrames:n,overwrite:0})},E.set=function(t,e){return new E(t,0,e)},E.getTweensOf=function(t,e){if(null==t)return[];var i,s,n,r;if(t=\"string\"!=typeof t?t:E.selector(t)||t,(m(t)||I(t))&&\"number\"!=typeof t[0]){for(i=t.length,s=[];--i>-1;)s=s.concat(E.getTweensOf(t[i],e));for(i=s.length;--i>-1;)for(r=s[i],n=i;--n>-1;)r===s[n]&&s.splice(i,1)}else if(t._gsTweenID)for(i=(s=X(t).concat()).length;--i>-1;)(s[i]._gc||e&&!s[i].isActive())&&s.splice(i,1);return s||[]},E.killTweensOf=E.killDelayedCallsTo=function(t,e,i){\"object\"==typeof e&&(i=e,e=!1);for(var s=E.getTweensOf(t,e),n=s.length;--n>-1;)s[n]._kill(i,t)};var it=y(\"plugins.TweenPlugin\",function(t,e){this._overwriteProps=(t||\"\").split(\",\"),this._propName=this._overwriteProps[0],this._priority=e||0,this._super=it.prototype},!0);if(a=it.prototype,it.version=\"1.19.0\",it.API=2,a._firstPT=null,a._addTween=M,a.setRatio=U,a._kill=function(t){var e,i=this._overwriteProps,s=this._firstPT;if(null!=t[this._propName])this._overwriteProps=[];else for(e=i.length;--e>-1;)null!=t[i[e]]&&i.splice(e,1);for(;s;)null!=t[s.n]&&(s._next&&(s._next._prev=s._prev),s._prev?(s._prev._next=s._next,s._prev=null):this._firstPT===s&&(this._firstPT=s._next)),s=s._next;return!1},a._mod=a._roundProps=function(t){for(var e,i=this._firstPT;i;)(e=t[this._propName]||null!=i.n&&t[i.n.split(this._propName+\"_\").join(\"\")])&&\"function\"==typeof e&&(2===i.f?i.t._applyPT.m=e:i.m=e),i=i._next},E._onPluginEvent=function(t,e){var i,s,n,r,a,o=e._firstPT;if(\"_onInitAllProps\"===t){for(;o;){for(a=o._next,s=n;s&&s.pr>o.pr;)s=s._next;(o._prev=s?s._prev:r)?o._prev._next=o:n=o,(o._next=s)?s._prev=o:r=o,o=a}o=e._firstPT=n}for(;o;)o.pg&&\"function\"==typeof o.t[t]&&o.t[t]()&&(i=!0),o=o._next;return i},it.activate=function(t){for(var e=t.length;--e>-1;)t[e].API===it.API&&(Q[(new t[e])._propName]=t[e]);return!0},g.plugin=function(t){if(!(t&&t.propName&&t.init&&t.API))throw\"illegal plugin definition.\";var e,i=t.propName,s=t.priority||0,n=t.overwriteProps,r={init:\"_onInitTween\",set:\"setRatio\",kill:\"_kill\",round:\"_mod\",mod:\"_mod\",initAll:\"_onInitAllProps\"},a=y(\"plugins.\"+i.charAt(0).toUpperCase()+i.substr(1)+\"Plugin\",function(){it.call(this,i,s),this._overwriteProps=n||[]},!0===t.global),o=a.prototype=new it(i);for(e in o.constructor=a,a.API=t.API,r)\"function\"==typeof t[e]&&(o[r[e]]=t[e]);return a.version=t.version,it.activate([a]),a},n=t._gsQueue){for(r=0;r<n.length;r++)n[r]();for(a in d)d[a].func||t.console.log(\"GSAP encountered missing dependency: \"+a)}return l=!1,E}(\"undefined\"!=typeof window?window:\"undefined\"!=typeof module&&module.exports&&\"undefined\"!=typeof global?global:{}),s=function(){function t(){this.$circles=[],this.$lis=[],this.screenshots=[],this.active=null,this.duration=6,this.quickDuration=.25,this.r=31,this.gsRefs=[],this.scrollPause=null,this.circumference=2*this.r*Math.PI,this.animationSelect=this.animationSelect.bind(this),this.animationStart=this.animationStart.bind(this)}return t.prototype.componentDidLoad=function(){var t=this;setTimeout(this.animationStart,2e3,0);var e=function(i,s){t.$lis[s]=i,t.$circles[s]=i.querySelector(\".progress-ring__circle\"),t.screenshots[s]=i.querySelector(\"a\").dataset.screenshot,i.nextElementSibling&&\"LI\"===i.nextElementSibling.nodeName&&e(i.nextElementSibling,s+1)};e(this.el.querySelector(\"li:nth-child(1)\"),0),this.active=0},t.prototype.animationStart=function(t){var e=this;if(console.log(\"starting\"),window.pageYOffset>1e3)return console.log(\"pausing\"),void(this.scrollPause=setTimeout(this.animationStart,5e3,0));this.active=t,this.$lis[t].classList.add(\"active\"),i.to(this.$circles[t],.4,{opacity:1}),i.to(this.$circles[t],this.duration,{strokeDashoffset:0,onCompleteScope:this,onComplete:function(){e.animationStart(t>=e.$circles.length-1?0:t+1),e.$lis[t].classList.remove(\"active\"),i.to(e.$circles[t],.2,{opacity:0,onCompleteScope:e,onComplete:function(){i.to(e.$circles[t],0,{strokeDashoffset:e.circumference,lazy:!0})}})}})},t.prototype.animationSelect=function(t){var e=this;this.$lis[t].classList.add(\"active\"),this.active=t,this.scrollPause&&clearTimeout(this.scrollPause),this.animationStopOthers(t),i.to(this.$circles[t],this.quickDuration,{strokeDashoffset:0,opacity:1,onCompleteScope:this,onComplete:function(){e.animationStopOthers(t)}})},t.prototype.animationRestart=function(t){var e=this;this.animationStopOthers(t),i.to(this.$circles[t],.5,{strokeDashoffset:-1*this.circumference,lazy:!0,onCompleteScope:this,onComplete:function(){i.to(e.$circles[t],0,{strokeDashoffset:e.circumference,opacity:0,lazy:!0,onCompleteScope:e,onComplete:function(){e.animationStart(t)}})}})},t.prototype.animationStopOthers=function(t){var e=this,s=[];this.$circles.forEach(function(i,n){n!=t&&(s.push(i),e.$lis[n].classList.remove(\"active\"))}),i.to(s,.2,{opacity:0,lazy:!0,onCompleteScope:this,onComplete:function(){i.to(s,0,{strokeDashoffset:e.circumference,opacity:0,lazy:!0})}})},t.prototype.circle=function(t){return void 0===t&&(t=0),e(\"svg\",{class:\"progress-ring\",height:\"64\",width:\"64\"},e(\"circle\",{class:\"progress-ring__circle\",stroke:\"#6C89F7\",\"stroke-width\":\"2\",fill:\"transparent\",r:this.r,cx:\"32\",cy:\"32\",style:{strokeDasharray:this.circumference+\" \"+this.circumference,strokeDashoffset:this.circumference-t/100*this.circumference}}))},t.prototype.render=function(){var t=this;return[e(\"div\",{class:\"app-screenshot\"},this.screenshots.map(function(i,s){return e(\"img\",{class:s===t.active?\"active\":\"inactive\",src:i})})),e(\"nav\",null,e(\"ul\",null,e(\"li\",{onMouseEnter:function(){return t.animationSelect(0)},onMouseLeave:function(){return t.animationRestart(0)}},this.circle(),e(\"slot\",{name:\"1\"})),e(\"li\",{onMouseEnter:function(){return t.animationSelect(1)},onMouseLeave:function(){return t.animationRestart(1)}},this.circle(),e(\"slot\",{name:\"2\"})),e(\"li\",{onMouseEnter:function(){return t.animationSelect(2)},onMouseLeave:function(){return t.animationRestart(2)}},this.circle(),e(\"slot\",{name:\"3\"}))))]},Object.defineProperty(t,\"is\",{get:function(){return\"ionic-appflow-activator\"},enumerable:!0,configurable:!0}),Object.defineProperty(t,\"properties\",{get:function(){return{$circles:{state:!0},$lis:{state:!0},active:{state:!0},el:{elementRef:!0},screenshots:{state:!0}}},enumerable:!0,configurable:!0}),Object.defineProperty(t,\"style\",{get:function(){return\"ionic-appflow-activator nav{background:#fff;position:-webkit-sticky;position:sticky;top:100px;width:100%;margin-top:100px}ionic-appflow-activator ul{display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between;max-width:100%;width:600px;padding-left:10px;padding-right:10px;margin-top:-44px;margin-right:auto;margin-left:auto}ionic-appflow-activator li{width:120px;position:relative;list-style:none}ionic-appflow-activator .progress-ring{position:absolute;top:0;left:calc(50% - 32px);pointer-events:none}ionic-appflow-activator .progress-ring__circle{opacity:0;-webkit-transform:rotate(-90deg);transform:rotate(-90deg);-webkit-transform-origin:50% 50%;transform-origin:50% 50%}ionic-appflow-activator a{text-align:center;display:block;padding-top:64px;cursor:pointer}ionic-appflow-activator a .icon,ionic-appflow-activator a .icon-active{position:absolute;border-radius:50%;height:56px;width:56px;top:4px;left:calc(50% - 28px);-webkit-transition:opacity .2s ease,transform .2s ease;transition:opacity .2s ease,transform .2s ease}ionic-appflow-activator a .icon-active{opacity:0;-webkit-transform:scale(1.1);transform:scale(1.1);-webkit-transition:opacity .2s ease,transform .2s ease;transition:opacity .2s ease,transform .2s ease}ionic-appflow-activator a span{font-size:14px;line-height:22px;text-align:center;letter-spacing:.06em;text-transform:uppercase;font-weight:600;color:#92a1b3;-webkit-transition:color .2s ease;transition:color .2s ease}ionic-appflow-activator .active .icon{-webkit-transform:scale(1.1);transform:scale(1.1);opacity:0}ionic-appflow-activator .active .icon-active{opacity:1;-webkit-transform:scale(1);transform:scale(1)}ionic-appflow-activator .active span{color:#6c89f7}ionic-appflow-activator .app-screenshot{position:relative}ionic-appflow-activator .app-screenshot img{position:absolute;top:0;right:0;bottom:0;left:0;opacity:0;-webkit-transform:scale(1.01);transform:scale(1.01);-webkit-transition:opacity .2s ease,transform .2s ease;transition:opacity .2s ease,transform .2s ease}ionic-appflow-activator .app-screenshot img.active{opacity:1;-webkit-transform:none;transform:none}\\@-webkit-keyframes full-circle{to{stroke-dashoffset:0}}\\@keyframes full-circle{to{stroke-dashoffset:0}}\"},enumerable:!0,configurable:!0}),t}();t.IonicAppflowActivator=s,Object.defineProperty(t,\"__esModule\",{value:!0})});"
  },
  {
    "path": "content/js/stencil/ionic-site-components/index.es5.js",
    "content": "IonicSiteComponents.loadBundle(\"index.js\",function(){});"
  },
  {
    "path": "content/js/stencil/ionic-site-components/index.js",
    "content": ""
  },
  {
    "path": "content/js/stencil/ionic-site-components/ionic-site-components.ftjdmnjq.js",
    "content": "/*! Built with http://stenciljs.com */\n((w,d,x,n,h,c,r)=>{((s)=>{s&&(r=s.getAttribute('data-resources-url'))})(d.querySelector(\"script[data-namespace='ionic-site-components']\"));\nfunction e(e,t){return\"sc-\"+e.t+(t&&t!==l?\"-\"+t:\"\")}function t(e,t){return e+(t?\"-h\":\"-s\")}function o(e,t){let n,o,l=null,i=!1,s=!1,r=arguments.length;for(;r-- >2;)C.push(arguments[r]);for(;C.length>0;){let t=C.pop();if(t&&void 0!==t.pop)for(r=t.length;r--;)C.push(t[r]);else\"boolean\"==typeof t&&(t=null),(s=\"function\"!=typeof e)&&(null==t?t=\"\":\"number\"==typeof t?t=String(t):\"string\"!=typeof t&&(s=!1)),s&&i?l[l.length-1].vtext+=t:null===l?l=[s?{vtext:t}:t]:l.push(s?{vtext:t}:t),i=s}if(null!=t){if(t.className&&(t.class=t.className),\"object\"==typeof t.class){for(r in t.class)t.class[r]&&C.push(r);t.class=C.join(\" \"),C.length=0}null!=t.key&&(n=t.key),null!=t.name&&(o=t.name)}return\"function\"==typeof e?e(t,l||[],O):{vtag:e,vchildren:l,vtext:void 0,vattrs:t,vkey:n,vname:o,o:void 0,l:!1}}const l=\"$\",i={},s={enter:13,escape:27,space:32,tab:9,left:37,up:38,right:39,down:40},a=(t,n,o,i)=>{let s=o.t+l,r=o[s];if((2===o.i||1===o.i&&!t.u.s)&&(i[\"s-sc\"]=r?e(o,i.mode):e(o)),r){let e=n.p.head;if(n.s)if(1===o.i)e=i.shadowRoot;else{const t=i.getRootNode();t.host&&(e=t)}let l=t.m.get(e);if(l||t.m.set(e,l={}),!l[s]){let t;{t=r.content.cloneNode(!0),l[s]=!0;const o=e.querySelectorAll(\"[data-styles]\");n.v(e,t,o.length&&o[o.length-1].nextSibling||e.firstChild)}}}},f=e=>null!=e,u=e=>e.toLowerCase(),p=()=>{},b=(e,t,n,o=\"boolean\"==typeof n,l)=>{l=t!==(t=t.replace(/^xlink\\:?/,\"\")),null==n||o&&(!n||\"false\"===n)?l?e.removeAttributeNS(m,u(t)):e.removeAttribute(t):\"function\"!=typeof n&&(n=o?\"\":n.toString(),l?e.setAttributeNS(m,u(t),n):e.setAttribute(t,n))},m=\"http://www.w3.org/1999/xlink\",v=(e,t,n,o,l,i,s)=>{if(\"class\"!==n||i)if(\"style\"===n){for(const e in o)l&&null!=l[e]||(/-/.test(e)?t.style.removeProperty(e):t.style[e]=\"\");for(const e in l)o&&l[e]===o[e]||(/-/.test(e)?t.style.setProperty(e,l[e]):t.style[e]=l[e])}else if(\"o\"!==n[0]||\"n\"!==n[1]||!/[A-Z]/.test(n[2])||n in t)if(\"list\"!==n&&\"type\"!==n&&!i&&(n in t||-1!==[\"object\",\"function\"].indexOf(typeof l)&&null!==l)){const o=e.M(t);o&&o.g&&o.g[n]?(M(t,n,l),s&&o.g[n].k&&b(t,o.g[n].j,l,4===o.g[n].C)):\"ref\"!==n&&(M(t,n,null==l?\"\":l),null!=l&&!1!==l||e.u.O(t,n))}else null!=l&&\"key\"!==n?b(t,n,l):(i||e.u.W(t,n)&&(null==l||!1===l))&&e.u.O(t,n);else n=u(n)in t?u(n.substring(2)):u(n[2])+n.substring(3),l?l!==o&&e.u.N(t,n,l,0):e.u.S(t,n,0);else if(o!==l){const e=y(o),n=y(l),i=e.filter(e=>!n.includes(e)),s=y(t.className).filter(e=>!i.includes(e)),r=n.filter(t=>!e.includes(t)&&!s.includes(t));s.push(...r),t.className=s.join(\" \")}},y=e=>null==e||\"\"===e?[]:e.trim().split(/\\s+/),M=(e,t,n)=>{try{e[t]=n}catch(e){}},$=(e,t,n,o,l)=>{const s=11===n.o.nodeType&&n.o.host?n.o.host:n.o,r=t&&t.vattrs||i,a=n.vattrs||i;for(l in r)a&&null!=a[l]||null==r[l]||v(e,s,l,r[l],void 0,o,n.l);for(l in a)l in r&&a[l]===(\"value\"===l||\"checked\"===l?s[l]:r[l])||v(e,s,l,r[l],a[l],o,n.l)};let g=!1;const k=(e,t)=>{e&&(e.vattrs&&e.vattrs.ref&&e.vattrs.ref(t?null:e.o),e.vchildren&&e.vchildren.forEach(e=>{k(e,t)}))},j=(e,t)=>{{let n=0,o=!1;const l=()=>t.performance.now(),i=!1!==e.asyncQueue,s=Promise.resolve(),r=[],a=[],c=[],f=[],u=t=>n=>{t.push(n),o||(o=!0,e.raf(b))},p=e=>{for(let t=0;t<e.length;t++)try{e[t](l())}catch(e){console.error(e)}e.length=0},d=(e,t)=>{let n,o=0;for(;o<e.length&&(n=l())<t;)try{e[o++](n)}catch(e){console.error(e)}o===e.length?e.length=0:0!==o&&e.splice(0,o)},b=()=>{n++,p(a);const t=i?l()+7*Math.ceil(n*(1/22)):Infinity;d(c,t),d(f,t),c.length>0&&(f.push(...c),c.length=0),(o=a.length+c.length+f.length>0)?e.raf(b):n=0};return e.raf||(e.raf=t.requestAnimationFrame.bind(t)),{tick(e){r.push(e),1===r.length&&s.then(()=>p(r))},read:u(a),write:u(c)}}},C=[],O={forEach:(e,t)=>e.forEach(t),map:(e,t)=>e.map(t)},W=(e,t,n)=>{const[o,l,,i,s,r]=e,a={color:{j:\"color\"}};if(i)for(t=0;t<i.length;t++)a[(n=i[t])[0]]={A:n[1],k:!!n[2],j:\"string\"==typeof n[3]?n[3]:n[3]?n[0]:0,C:n[4]};return{t:o,T:l,g:Object.assign({},a),i:s,R:r?r.map(N):void 0}},N=e=>({L:e[0],D:e[1],q:!!e[2],B:!!e[3],I:!!e[4]}),S=(e,t)=>f(t)&&\"object\"!=typeof t&&\"function\"!=typeof t?e===Boolean||4===e?\"false\"!==t&&(\"\"===t||!!t):e===Number||8===e?parseFloat(t):e===String||2===e?t.toString():t:t,E=(e,t,n)=>{e.P.add(t),e.F.has(t)||(e.F.set(t,!0),e.H?e.queue.write(()=>A(e,t,n)):e.queue.tick(()=>A(e,t,n)))},A=async(e,n,l,i,s,r)=>{if(e.F.delete(n),!e.U.has(n)){if(!(s=e.Z.get(n))){if((r=e.G.get(n))&&!r[\"s-rn\"])return void(r[\"s-rc\"]=r[\"s-rc\"]||[]).push(()=>{A(e,n,l)});if(s=B(e,n,e.J.get(n),l))try{s.componentWillLoad&&await s.componentWillLoad()}catch(t){e.K(t,3,n)}}((e,n,l,i)=>{try{const s=n.V.host,r=n.V.encapsulation,a=\"shadow\"===r&&e.u.s;let c,f=l;if(c=((e,t,n)=>(e&&Object.keys(e).forEach(o=>{e[o].reflectToAttr&&((n=n||{})[o]=t[o])}),n))(n.V.properties,i),a&&(f=l.shadowRoot),!l[\"s-rn\"]){e.X(e,e.u,n,l);const o=l[\"s-sc\"];o&&(e.u.Y(l,t(o,!0)),\"scoped\"===r&&e.u.Y(l,t(o)))}if(i.render||i.hostData||s||c){e._=!0;const t=i.render&&i.render();let n;n=i.hostData&&i.hostData(),c&&(n=n?Object.assign(n,c):c),e._=!1;const s=o(null,n,t),u=e.ee.get(l)||{};u.o=f,s.l=!0,e.ee.set(l,e.render(l,u,s,a,r))}l[\"s-rn\"]=!0,l[\"s-rc\"]&&(l[\"s-rc\"].forEach(e=>e()),l[\"s-rc\"]=null)}catch(t){e._=!1,e.K(t,8,l,!0)}})(e,e.M(n),n,s),n[\"s-init\"]()}},T=(e,t,n,o,l,i,s,r,a)=>{if(t.type||t.state){const c=e.te.get(n);t.state||(!t.attr||void 0!==c[l]&&\"\"!==c[l]||(r=i&&i.ne)&&f(a=r[t.attr])&&(c[l]=S(t.type,a)),n.hasOwnProperty(l)&&(void 0===c[l]&&(c[l]=S(t.type,n[l])),\"mode\"!==l&&delete n[l])),o.hasOwnProperty(l)&&void 0===c[l]&&(c[l]=o[l]),t.watchCallbacks&&(c[q+l]=t.watchCallbacks.slice()),D(o,l,function c(t){return(t=e.te.get(e.oe.get(this)))&&t[l]},function u(n,o){(o=e.oe.get(this))&&(t.state||t.mutable)&&R(e,o,l,n,s)})}else if(t.elementRef)L(o,l,n);else if(t.method)L(n,l,o[l].bind(o));else if(t.context){const i=e.le(t.context);void 0!==i&&L(o,l,i.getContext&&i.getContext(n)||i)}},R=(e,t,n,o,l,i,s)=>{(s=e.te.get(t))||e.te.set(t,s={});const r=s[n];if(o!==r&&(s[n]=o,i=e.Z.get(t))){{const e=s[q+n];if(e)for(let t=0;t<e.length;t++)try{i[e[t]].call(i,o,r,n)}catch(e){console.error(e)}}!e._&&t[\"s-rn\"]&&E(e,t,l)}},L=(e,t,n)=>{Object.defineProperty(e,t,{configurable:!0,value:n})},D=(e,t,n,o)=>{Object.defineProperty(e,t,{configurable:!0,get:n,set:o})},q=\"wc-\",B=(e,t,n,o,l,i,s,r)=>{try{l=new(i=e.M(t).V),((e,t,n,o,l,i)=>{e.oe.set(o,n),e.te.has(n)||e.te.set(n,{}),Object.entries(Object.assign({color:{type:String}},t.properties,{mode:{type:String}})).forEach(([t,s])=>{T(e,s,n,o,t,l,i)})})(e,i,t,l,n,o),function a(e,t,n){if(t){const o=e.oe.get(n);t.forEach(t=>{n[t.method]={emit:n=>e.ie(o,t.name,{bubbles:t.bubbles,composed:t.composed,cancelable:t.cancelable,detail:n})}})}}(e,i.events,l);try{if(s=e.se.get(t)){for(r=0;r<s.length;r+=2)l[s[r]](s[r+1]);e.se.delete(t)}}catch(n){e.K(n,2,t)}}catch(n){l={},e.K(n,7,t,!0)}return e.Z.set(t,l),l},I=(e,t,n,o,l,i)=>{if(e.P.delete(t),(l=e.G.get(t))&&((o=l[\"s-ld\"])&&((n=o.indexOf(t))>-1&&o.splice(n,1),o.length||l[\"s-init\"]&&l[\"s-init\"]()),e.G.delete(t)),e.re.length&&!e.P.size)for(;i=e.re.shift();)i()},P=(e,t,n,o)=>{t.forEach(([t,l])=>{const i=l.A;3&i?D(n,t,function n(){return(e.te.get(this)||{})[t]},function n(i){R(e,this,t,S(l.C,i),o)}):32===i&&L(n,t,p)})},F=(e,t,n,o,l)=>{if(n.connectedCallback=function(){((e,t,n)=>{e.ae.has(n)||(e.ae.set(n,!0),function o(e,t){const n=e.M(t);n.R&&n.R.forEach(n=>{n.q||e.u.N(t,n.L,function o(e,t,n,l){return o=>{(l=e.Z.get(t))?l[n](o):((l=e.se.get(t)||[]).push(n,o),e.se.set(t,l))}}(e,t,n.D),1,n.I,n.B)})}(e,n)),e.U.delete(n),e.ce.has(n)||(e.fe=!0,e.P.add(n),e.ce.set(n,!0),((e,t,n)=>{for(n=t;n=e.u.ue(n);)if(e.pe(n)){e.de.has(t)||(e.G.set(t,n),(n[\"s-ld\"]=n[\"s-ld\"]||[]).push(t));break}})(e,n),e.queue.tick(()=>{e.J.set(n,((e,t,n,o,l)=>(n.mode||(n.mode=e.be(n)),n[\"s-cr\"]||e.me(n,\"ssrv\")||e.s&&1===t.i||(n[\"s-cr\"]=e.ve(\"\"),n[\"s-cr\"][\"s-cn\"]=!0,e.v(n,n[\"s-cr\"],e.he(n)[0])),1===t.i&&e.s&&!n.shadowRoot&&e.ye(n,{mode:\"open\"}),o={ne:{}},t.g&&Object.keys(t.g).forEach(i=>{(l=t.g[i].j)&&(o.ne[l]=e.me(n,l))}),o))(e.u,t,n)),e.we(t,n)}))})(e,t,this)},n.disconnectedCallback=function(){((e,t)=>{if(!e.Me&&((e,t)=>{for(;t;){if(!e.$e(t))return 9!==e.ge(t);t=e.$e(t)}})(e.u,t)){e.U.set(t,!0),I(e,t),k(e.ee.get(t),!0);{const n=e.Z.get(t);n&&n.componentDidUnload&&n.componentDidUnload()}e.u.S(t),e.ae.delete(t),[e.G,e.ke,e.J].forEach(e=>e.delete(t))}})(e,this)},n[\"s-init\"]=function(){((e,t,n,o,l,i,s)=>{if((l=e.Z.get(t))&&!e.U.has(t)&&(!t[\"s-ld\"]||!t[\"s-ld\"].length)){e.de.set(t,!0),(s=e.je.has(t))||(e.je.set(t,!0),t[\"s-ld\"]=void 0,e.u.Y(t,n));try{k(e.ee.get(t)),(i=e.ke.get(t))&&(i.forEach(e=>e(t)),e.ke.delete(t)),!s&&l.componentDidLoad&&l.componentDidLoad()}catch(n){e.K(n,4,t)}I(e,t)}})(e,this,o)},n.forceUpdate=function(){E(e,this,l)},t.g){const o=Object.entries(t.g);{let e={};o.forEach(([t,{j:n}])=>{n&&(e[n]=t)}),e=Object.assign({},e),n.attributeChangedCallback=function(t,n,o){(function l(e,t,n,o){const l=e[u(n)];l&&(t[l]=(null!==o||\"boolean\"!=typeof t[l])&&o)})(e,this,t,o)}}P(e,o,n,l)}};((e,t,n,i,r,c,p)=>{const d=n.performance,b={html:{}},m=n[e]=n[e]||{},v=((e,t,n)=>{const o=new WeakMap,l={p:n,s:!!n.documentElement.attachShadow,Ce:!1,ge:e=>e.nodeType,Oe:e=>n.createElement(e),We:(e,t)=>n.createElementNS(e,t),ve:e=>n.createTextNode(e),Ne:e=>n.createComment(e),v:(e,t,n)=>e.insertBefore(t,n),Se:e=>e.remove(),Ee:(e,t)=>e.appendChild(t),Y:(e,t)=>{e.classList.add(t)},he:e=>e.childNodes,$e:e=>e.parentNode,xe:e=>e.nextSibling,Ae:e=>e.previousSibling,Te:e=>u(e.nodeName),Re:e=>e.textContent,Le:(e,t)=>e.textContent=t,me:(e,t)=>e.getAttribute(t),De:(e,t,n)=>e.setAttribute(t,n),O:(e,t)=>e.removeAttribute(t),W:(e,t)=>e.hasAttribute(t),be:t=>t.getAttribute(\"mode\")||(e.Context||{}).mode,qe:(e,o)=>\"child\"===o?e.firstElementChild:\"parent\"===o?l.ue(e):\"body\"===o?n.body:\"document\"===o?n:\"window\"===o?t:e,N:(t,n,i,r,a,c,f,u,p,d)=>{let b=t,m=i,v=o.get(t);d=n+r,v&&v[d]&&v[d](),\"string\"==typeof f?b=l.qe(t,f):\"object\"==typeof f?b=f:(p=n.split(\":\")).length>1&&(b=l.qe(t,p[0]),n=p[1]),b&&((p=n.split(\".\")).length>1&&(n=p[0],m=(e=>{e.keyCode===s[p[1]]&&i(e)})),u=l.Ce?{capture:!!a,passive:!!c}:!!a,e.ael(b,n,m,u),v||o.set(t,v={}),v[d]=(()=>{b&&e.rel(b,n,m,u),v[d]=null}))},S:(e,t,n,l)=>{(l=o.get(e))&&(t?l[t+n]&&l[t+n]():Object.keys(l).forEach(e=>{l[e]&&l[e]()}))},Be:(e,n,o,l)=>(l=new t.CustomEvent(n,o),e&&e.dispatchEvent(l),l),ue:(e,t)=>(t=l.$e(e))&&11===l.ge(t)?t.host:t,Ie:(e,t,n,o)=>e.setAttributeNS(t,n,o),ye:(e,t)=>e.attachShadow(t)};e.ael||(e.ael=((e,t,n,o)=>e.addEventListener(t,n,o)),e.rel=((e,t,n,o)=>e.removeEventListener(t,n,o)));try{t.addEventListener(\"e\",null,Object.defineProperty({},\"passive\",{get:()=>l.Ce=!0}))}catch(e){}return l})(m,n,i),h=v.p.documentElement,y=n[\"s-defined\"]=n[\"s-defined\"]||{},w=(e,t)=>{n.customElements.get(e.t)||(F(M,b[e.t]=e,t.prototype,c,d),t.observedAttributes=Object.values(e.g).map(e=>e.j).filter(e=>!!e),n.customElements.define(e.t,t))},M={u:v,Pe:w,M:e=>b[v.Te(e)],le:e=>t[e],isClient:!0,pe:e=>!(!y[v.Te(e)]&&!M.M(e)),K:(e,t,n)=>console.error(e,t,n&&n.tagName),queue:t.queue=j(m,n),we:(e,t)=>{{const n=e.T,o=!v.s;let i=r+n+(o?\".sc\":\"\")+\".entry.js\";import(i).then(n=>{try{e.V=n[(e=>u(e).split(\"-\").map(e=>e.charAt(0).toUpperCase()+e.slice(1)).join(\"\"))(e.t)],function o(e,t,n,i,s){if(i){const n=t.t+(s||l);if(!t[n]){const o=e.Oe(\"template\");t[n]=o,o.innerHTML=`<style>${i}</style>`,e.Ee(e.p.head,o)}}}(v,e,e.i,e.V.style,e.V.styleMode),E(M,t,d)}catch(t){console.error(t),e.V=class{}}},e=>console.error(e,i))}},_:!1,H:!1,Me:!1,X:a,G:new WeakMap,m:new WeakMap,ce:new WeakMap,ae:new WeakMap,je:new WeakMap,de:new WeakMap,oe:new WeakMap,J:new WeakMap,Z:new WeakMap,U:new WeakMap,F:new WeakMap,ke:new WeakMap,se:new WeakMap,ee:new WeakMap,te:new WeakMap,P:new Set,re:[]};return t.isServer=t.isPrerender=!(t.isClient=!0),t.window=n,t.location=n.location,t.document=i,t.resourcesUrl=t.publicPath=r,t.enableListener=((e,t,n,o,l)=>(function i(e,t,n,o,l,s){if(t){const i=e.oe.get(t),r=e.M(i);if(r&&r.R)if(o){const o=r.R.find(e=>e.L===n);o&&e.u.N(i,n,e=>t[o.D](e),1,o.I,void 0===s?o.B:!!s,l)}else e.u.S(i,n,1)}})(M,e,t,n,o,l)),M.ie=t.emit=((e,n,o)=>v.Be(e,t.eventNameFn?t.eventNameFn(n):n,o)),m.h=o,m.Context=t,m.onReady=(()=>new Promise(e=>M.queue.write(()=>M.P.size?M.re.push(e):e()))),M.render=((e,t)=>{let n,o,l,i,s,r,a;const c=(l,p,d,b,m,v,h,y,w)=>{if(y=p.vchildren[d],n||(i=!0,\"slot\"===y.vtag&&(o&&t.Y(b,o+\"-s\"),y.vchildren?y.Fe=!0:y.He=!0)),f(y.vtext))y.o=t.ve(y.vtext);else if(y.He)y.o=t.ve(\"\");else{if(v=y.o=g||\"svg\"===y.vtag?t.We(\"http://www.w3.org/2000/svg\",y.vtag):t.Oe(y.Fe?\"slot-fb\":y.vtag),e.pe(v)&&e.de.delete(a),g=\"svg\"===y.vtag||\"foreignObject\"!==y.vtag&&g,$(e,null,y,g),f(o)&&v[\"s-si\"]!==o&&t.Y(v,v[\"s-si\"]=o),y.vchildren)for(m=0;m<y.vchildren.length;++m)(h=c(l,y,m,v))&&t.Ee(v,h);\"svg\"===y.vtag&&(g=!1)}return y.o[\"s-hn\"]=r,(y.Fe||y.He)&&(y.o[\"s-sr\"]=!0,y.o[\"s-cr\"]=s,y.o[\"s-sn\"]=y.vname||\"\",(w=l&&l.vchildren&&l.vchildren[d])&&w.vtag===y.vtag&&l.o&&u(l.o)),y.o},u=(n,o,l,s)=>{e.Me=!0;const a=t.he(n);for(l=a.length-1;l>=0;l--)(s=a[l])[\"s-hn\"]!==r&&s[\"s-ol\"]&&(t.Se(s),t.v(v(s),s,m(s)),t.Se(s[\"s-ol\"]),s[\"s-ol\"]=null,i=!0),o&&u(s,o);e.Me=!1},p=(e,n,o,l,i,s,a,u)=>{const p=e[\"s-cr\"];for((a=p&&t.$e(p)||e).shadowRoot&&t.Te(a)===r&&(a=a.shadowRoot);i<=s;++i)l[i]&&(u=f(l[i].vtext)?t.ve(l[i].vtext):c(null,o,i,e))&&(l[i].o=u,t.v(a,u,m(n)))},d=(e,n,o,i)=>{for(;n<=o;++n)f(e[n])&&(i=e[n].o,l=!0,i[\"s-ol\"]?t.Se(i[\"s-ol\"]):u(i,!0),t.Se(i))},b=(e,t)=>e.vtag===t.vtag&&e.vkey===t.vkey&&(\"slot\"!==e.vtag||e.vname===t.vname),m=e=>e&&e[\"s-ol\"]?e[\"s-ol\"]:e,v=e=>t.$e(e[\"s-ol\"]?e[\"s-ol\"]:e),h=(n,o,l)=>{const i=o.o=n.o,s=n.vchildren,r=o.vchildren;g=o.o&&f(t.ue(o.o))&&void 0!==o.o.ownerSVGElement,g=\"svg\"===o.vtag||\"foreignObject\"!==o.vtag&&g,f(o.vtext)?(l=i[\"s-cr\"])?t.Le(t.$e(l),o.vtext):n.vtext!==o.vtext&&t.Le(i,o.vtext):(\"slot\"!==o.vtag&&$(e,n,o,g),f(s)&&f(r)?((e,n,o,l,i,s,r,a)=>{let y=0,w=0,M=n.length-1,$=n[0],g=n[M],k=l.length-1,j=l[0],C=l[k];for(;y<=M&&w<=k;)if(null==$)$=n[++y];else if(null==g)g=n[--M];else if(null==j)j=l[++w];else if(null==C)C=l[--k];else if(b($,j))h($,j),$=n[++y],j=l[++w];else if(b(g,C))h(g,C),g=n[--M],C=l[--k];else if(b($,C))\"slot\"!==$.vtag&&\"slot\"!==C.vtag||u(t.$e($.o)),h($,C),t.v(e,$.o,t.xe(g.o)),$=n[++y],C=l[--k];else if(b(g,j))\"slot\"!==$.vtag&&\"slot\"!==C.vtag||u(t.$e(g.o)),h(g,j),t.v(e,g.o,$.o),g=n[--M],j=l[++w];else{for(i=null,s=y;s<=M;++s)if(n[s]&&f(n[s].vkey)&&n[s].vkey===j.vkey){i=s;break}f(i)?((a=n[i]).vtag!==j.vtag?r=c(n&&n[w],o,i,e):(h(a,j),n[i]=void 0,r=a.o),j=l[++w]):(r=c(n&&n[w],o,w,e),j=l[++w]),r&&t.v(v($.o),r,m($.o))}y>M?p(e,null==l[k+1]?null:l[k+1].o,o,l,w,k):w>k&&d(n,y,M)})(i,s,o,r):f(r)?(f(n.vtext)&&t.Le(i,\"\"),p(i,null,o,r,0,r.length-1)):f(s)&&d(s,0,s.length-1)),g&&\"svg\"===o.vtag&&(g=!1)},y=(e,n,o,l,i,s,r,a)=>{for(l=0,i=(o=t.he(e)).length;l<i;l++)if(n=o[l],1===t.ge(n)){if(n[\"s-sr\"])for(r=n[\"s-sn\"],n.hidden=!1,s=0;s<i;s++)if(o[s][\"s-hn\"]!==n[\"s-hn\"])if(a=t.ge(o[s]),\"\"!==r){if(1===a&&r===t.me(o[s],\"slot\")){n.hidden=!0;break}}else if(1===a||3===a&&\"\"!==t.Re(o[s]).trim()){n.hidden=!0;break}y(n)}},w=[],M=(e,n,o,i,s,r,a,c,f,u)=>{for(s=0,r=(n=t.he(e)).length;s<r;s++){if((o=n[s])[\"s-sr\"]&&(i=o[\"s-cr\"]))for(c=t.he(t.$e(i)),f=o[\"s-sn\"],a=c.length-1;a>=0;a--)(i=c[a])[\"s-cn\"]||i[\"s-nr\"]||i[\"s-hn\"]===o[\"s-hn\"]||((3===(u=t.ge(i))||8===u)&&\"\"===f||1===u&&null===t.me(i,\"slot\")&&\"\"===f||1===u&&t.me(i,\"slot\")===f)&&(w.some(e=>e.Qe===i)||(l=!0,i[\"s-sn\"]=f,w.push({Ue:o,Qe:i})));1===t.ge(o)&&M(o)}};return(c,f,u,p,d,b,m,v,$,g,k,j)=>{if(a=c,r=t.Te(a),s=a[\"s-cr\"],n=p,o=a[\"s-sc\"],i=l=!1,h(f,u),i){for(M(u.o),m=0;m<w.length;m++)(v=w[m]).Qe[\"s-ol\"]||(($=t.ve(\"\"))[\"s-nr\"]=v.Qe,t.v(t.$e(v.Qe),v.Qe[\"s-ol\"]=$,v.Qe));for(e.Me=!0,m=0;m<w.length;m++){for(v=w[m],k=t.$e(v.Ue),j=t.xe(v.Ue),$=v.Qe[\"s-ol\"];$=t.Ae($);)if((g=$[\"s-nr\"])&&g&&g[\"s-sn\"]===v.Qe[\"s-sn\"]&&k===t.$e(g)&&(g=t.xe(g))&&g&&!g[\"s-nr\"]){j=g;break}(!j&&k!==t.$e(v.Qe)||t.xe(v.Qe)!==j)&&v.Qe!==j&&(t.Se(v.Qe),t.v(k,v.Qe,j))}e.Me=!1}return l&&y(u.o),w.length=0,u}})(M,v),h[\"s-ld\"]=[],h[\"s-rn\"]=!0,h[\"s-init\"]=(()=>{M.de.set(h,m.loaded=M.H=!0),v.Be(n,\"appload\",{detail:{namespace:e}})}),p.map(W).forEach(e=>w(e,class extends HTMLElement{})),M.fe||h[\"s-init\"](),((e,t,n,o,l,i)=>{if(t.componentOnReady=((t,n)=>{if(!t.nodeName.includes(\"-\"))return n(null),!1;const o=e.M(t);if(o)if(e.de.has(t))n(t);else{const o=e.ke.get(t)||[];o.push(n),e.ke.set(t,o)}return!!o}),l){for(i=l.length-1;i>=0;i--)t.componentOnReady(l[i][0],l[i][1])&&l.splice(i,1);for(i=0;i<o.length;i++)if(!n[o[i]].componentOnReady)return;for(i=0;i<l.length;i++)l[i][1](null);l.length=0}})(M,m,n,n[\"s-apps\"],n[\"s-cr\"]),m.initialized=!0,M})(n,x,w,d,r,h,c);\n})(window,document,{},\"IonicSiteComponents\",\"hydrated\",[[\"icon-external\",\"uyiaiqzf\",1],[\"ion-icon\",\"bubpozqb\",1,[[\"ariaLabel\",2,1,\"aria-label\",2],[\"color\",1,0,1,2],[\"doc\",4,0,0,0,\"document\"],[\"el\",64],[\"flipRtl\",1,0,\"flip-rtl\",4],[\"icon\",1,0,1,2],[\"ios\",1,0,1,2],[\"isServer\",4,0,0,0,\"isServer\"],[\"isVisible\",16],[\"lazy\",1,0,1,4],[\"md\",1,0,1,2],[\"mode\",1,0,1,2],[\"name\",1,0,1,2],[\"resourcesUrl\",4,0,0,0,\"resourcesUrl\"],[\"size\",1,0,1,2],[\"src\",1,0,1,2],[\"svgContent\",16],[\"win\",4,0,0,0,\"window\"]],1],[\"ionic-appflow-activator\",\"hclgi8iu\",1,[[\"$circles\",16],[\"$lis\",16],[\"active\",16],[\"el\",64],[\"screenshots\",16]]],[\"ionic-bar-chart\",\"lo9utgpp\",1,[[\"color\",1,0,1,2],[\"data\",1,0,1,2]]],[\"ionic-button\",\"z7r5cewq\",1,[[\"color\",1,0,1,2],[\"disabled\",1,0,1,4],[\"type\",1,0,1,2]]],[\"ionic-newsletter-signup\",\"z7r5cewq\",1,[[\"arrowMode\",1,0,\"arrow-mode\",4],[\"buttonText\",1,0,\"button-text\",2],[\"darkMode\",1,0,\"dark-mode\",4],[\"email\",16],[\"hasSubmitted\",16],[\"homepageMode\",1,0,\"homepage-mode\",4],[\"isLoading\",16],[\"kind\",1,0,1,2],[\"lg\",1,0,1,4],[\"placeholder\",1,0,1,2]]],[\"ionic-quick-signup\",\"raorzqti\",1,[[\"buttonColor\",1,0,\"button-color\",2],[\"showPricingNotice\",1,0,\"show-pricing-notice\",4],[\"transparentInput\",1,0,\"transparent-input\",4]]],[\"ionic-search\",\"ehteibio\",1,[[\"active\",16],[\"dragStyles\",16],[\"el\",64],[\"mobile\",1,0,1,4],[\"pending\",16],[\"query\",16],[\"results\",16]]],[\"ionic-slider\",\"uy47nvwg\",1,[[\"current\",16],[\"status\",16],[\"ticker\",16]]],[\"ionic-snap-bar\",\"cetridhp\",1,[[\"active\",16]]],[\"ionic-toggle\",\"cz7vrrja\",1,[[\"el\",64]],1,[[\"toggleSelected\",\"selectionChanged\"]]],[\"ionic-toggle-button\",\"m0trkizf\",1,[[\"deselect\",32],[\"select\",32],[\"selected\",16],[\"tab\",1,0,1,2],[\"title\",1,0,1,2]],1],[\"ionic-toggle-tab\",\"nrj8jyt7\",0,[[\"hidden\",16],[\"hide\",32],[\"show\",32],[\"tab\",1,0,1,2]],1]]);"
  },
  {
    "path": "content/js/stencil/ionic-site-components/ionic-site-components.guhwuz8o.js",
    "content": "/*! document-register-element, 1.7.0\nhttps://github.com/WebReflection/document-register-element\n(C) Andrea Giammarchi - @WebReflection - Mit Style License */\nif (!window['s-ce1']) {\nwindow['s-ce1'] = true;\n(function(e,t){\"use strict\";function Ht(){var e=wt.splice(0,wt.length);Et=0;while(e.length)e.shift().call(null,e.shift())}function Bt(e,t){for(var n=0,r=e.length;n<r;n++)Jt(e[n],t)}function jt(e){for(var t=0,n=e.length,r;t<n;t++)r=e[t],Pt(r,A[It(r)])}function Ft(e){return function(t){ut(t)&&(Jt(t,e),O.length&&Bt(t.querySelectorAll(O),e))}}function It(e){var t=ht.call(e,\"is\"),n=e.nodeName.toUpperCase(),r=_.call(L,t?N+t.toUpperCase():T+n);return t&&-1<r&&!qt(n,t)?-1:r}function qt(e,t){return-1<O.indexOf(e+'[is=\"'+t+'\"]')}function Rt(e){var t=e.currentTarget,n=e.attrChange,r=e.attrName,i=e.target,s=e[y]||2,o=e[w]||3;kt&&(!i||i===t)&&t[h]&&r!==\"style\"&&(e.prevValue!==e.newValue||e.newValue===\"\"&&(n===s||n===o))&&t[h](r,n===s?null:e.prevValue,n===o?null:e.newValue)}function Ut(e){var t=Ft(e);return function(e){wt.push(t,e.target),Et&&clearTimeout(Et),Et=setTimeout(Ht,1)}}function zt(e){Ct&&(Ct=!1,e.currentTarget.removeEventListener(S,zt)),O.length&&Bt((e.target||n).querySelectorAll(O),e.detail===l?l:a),st&&Vt()}function Wt(e,t){var n=this;vt.call(n,e,t),Lt.call(n,{target:n})}function Xt(e,t){nt(e,t),Mt?Mt.observe(e,yt):(Nt&&(e.setAttribute=Wt,e[o]=Ot(e),e[u](x,Lt)),e[u](E,Rt)),e[m]&&kt&&(e.created=!0,e[m](),e.created=!1)}function Vt(){for(var e,t=0,n=at.length;t<n;t++)e=at[t],M.contains(e)||(n--,at.splice(t--,1),Jt(e,l))}function $t(e){throw new Error(\"A \"+e+\" type is already registered\")}function Jt(e,t){var n,r=It(e),i;-1<r&&(Dt(e,A[r]),r=0,t===a&&!e[a]?(e[l]=!1,e[a]=!0,i=\"connected\",r=1,st&&_.call(at,e)<0&&at.push(e)):t===l&&!e[l]&&(e[a]=!1,e[l]=!0,i=\"disconnected\",r=1),r&&(n=e[t+f]||e[i+f])&&n.call(e))}function Kt(){}function Qt(e,t,r){var i=r&&r[c]||\"\",o=t.prototype,u=tt(o),a=t.observedAttributes||j,f={prototype:u};ot(u,m,{value:function(){if(Q)Q=!1;else if(!this[W]){this[W]=!0,new t(this),o[m]&&o[m].call(this);var e=G[Z.get(t)];(!V||e.create.length>1)&&Zt(this)}}}),ot(u,h,{value:function(e){-1<_.call(a,e)&&o[h].apply(this,arguments)}}),o[d]&&ot(u,p,{value:o[d]}),o[v]&&ot(u,g,{value:o[v]}),i&&(f[c]=i),e=e.toUpperCase(),G[e]={constructor:t,create:i?[i,et(e)]:[e]},Z.set(t,e),n[s](e.toLowerCase(),f),en(e),Y[e].r()}function Gt(e){var t=G[e.toUpperCase()];return t&&t.constructor}function Yt(e){return typeof e==\"string\"?e:e&&e.is||\"\"}function Zt(e){var t=e[h],n=t?e.attributes:j,r=n.length,i;while(r--)i=n[r],t.call(e,i.name||i.nodeName,null,i.value||i.nodeValue)}function en(e){return e=e.toUpperCase(),e in Y||(Y[e]={},Y[e].p=new K(function(t){Y[e].r=t})),Y[e].p}function tn(){X&&delete e.customElements,B(e,\"customElements\",{configurable:!0,value:new Kt}),B(e,\"CustomElementRegistry\",{configurable:!0,value:Kt});for(var t=function(t){var r=e[t];if(r){e[t]=function(t){var i,s;return t||(t=this),t[W]||(Q=!0,i=G[Z.get(t.constructor)],s=V&&i.create.length===1,t=s?Reflect.construct(r,j,i.constructor):n.createElement.apply(n,i.create),t[W]=!0,Q=!1,s||Zt(t)),t},e[t].prototype=r.prototype;try{r.prototype.constructor=e[t]}catch(i){z=!0,B(r,W,{value:e[t]})}}},r=i.get(/^HTML[A-Z]*[a-z]/),o=r.length;o--;t(r[o]));n.createElement=function(e,t){var n=Yt(t);return n?gt.call(this,e,et(n)):gt.call(this,e)},St||(Tt=!0,n[s](\"\"))}var n=e.document,r=e.Object,i=function(e){var t=/^[A-Z]+[a-z]/,n=function(e){var t=[],n;for(n in s)e.test(n)&&t.push(n);return t},i=function(e,t){t=t.toLowerCase(),t in s||(s[e]=(s[e]||[]).concat(t),s[t]=s[t.toUpperCase()]=e)},s=(r.create||r)(null),o={},u,a,f,l;for(a in e)for(l in e[a]){f=e[a][l],s[l]=f;for(u=0;u<f.length;u++)s[f[u].toLowerCase()]=s[f[u].toUpperCase()]=l}return o.get=function(r){return typeof r==\"string\"?s[r]||(t.test(r)?[]:\"\"):n(r)},o.set=function(n,r){return t.test(n)?i(n,r):i(r,n),o},o}({collections:{HTMLAllCollection:[\"all\"],HTMLCollection:[\"forms\"],HTMLFormControlsCollection:[\"elements\"],HTMLOptionsCollection:[\"options\"]},elements:{Element:[\"element\"],HTMLAnchorElement:[\"a\"],HTMLAppletElement:[\"applet\"],HTMLAreaElement:[\"area\"],HTMLAttachmentElement:[\"attachment\"],HTMLAudioElement:[\"audio\"],HTMLBRElement:[\"br\"],HTMLBaseElement:[\"base\"],HTMLBodyElement:[\"body\"],HTMLButtonElement:[\"button\"],HTMLCanvasElement:[\"canvas\"],HTMLContentElement:[\"content\"],HTMLDListElement:[\"dl\"],HTMLDataElement:[\"data\"],HTMLDataListElement:[\"datalist\"],HTMLDetailsElement:[\"details\"],HTMLDialogElement:[\"dialog\"],HTMLDirectoryElement:[\"dir\"],HTMLDivElement:[\"div\"],HTMLDocument:[\"document\"],HTMLElement:[\"element\",\"abbr\",\"address\",\"article\",\"aside\",\"b\",\"bdi\",\"bdo\",\"cite\",\"code\",\"command\",\"dd\",\"dfn\",\"dt\",\"em\",\"figcaption\",\"figure\",\"footer\",\"header\",\"i\",\"kbd\",\"mark\",\"nav\",\"noscript\",\"rp\",\"rt\",\"ruby\",\"s\",\"samp\",\"section\",\"small\",\"strong\",\"sub\",\"summary\",\"sup\",\"u\",\"var\",\"wbr\"],HTMLEmbedElement:[\"embed\"],HTMLFieldSetElement:[\"fieldset\"],HTMLFontElement:[\"font\"],HTMLFormElement:[\"form\"],HTMLFrameElement:[\"frame\"],HTMLFrameSetElement:[\"frameset\"],HTMLHRElement:[\"hr\"],HTMLHeadElement:[\"head\"],HTMLHeadingElement:[\"h1\",\"h2\",\"h3\",\"h4\",\"h5\",\"h6\"],HTMLHtmlElement:[\"html\"],HTMLIFrameElement:[\"iframe\"],HTMLImageElement:[\"img\"],HTMLInputElement:[\"input\"],HTMLKeygenElement:[\"keygen\"],HTMLLIElement:[\"li\"],HTMLLabelElement:[\"label\"],HTMLLegendElement:[\"legend\"],HTMLLinkElement:[\"link\"],HTMLMapElement:[\"map\"],HTMLMarqueeElement:[\"marquee\"],HTMLMediaElement:[\"media\"],HTMLMenuElement:[\"menu\"],HTMLMenuItemElement:[\"menuitem\"],HTMLMetaElement:[\"meta\"],HTMLMeterElement:[\"meter\"],HTMLModElement:[\"del\",\"ins\"],HTMLOListElement:[\"ol\"],HTMLObjectElement:[\"object\"],HTMLOptGroupElement:[\"optgroup\"],HTMLOptionElement:[\"option\"],HTMLOutputElement:[\"output\"],HTMLParagraphElement:[\"p\"],HTMLParamElement:[\"param\"],HTMLPictureElement:[\"picture\"],HTMLPreElement:[\"pre\"],HTMLProgressElement:[\"progress\"],HTMLQuoteElement:[\"blockquote\",\"q\",\"quote\"],HTMLScriptElement:[\"script\"],HTMLSelectElement:[\"select\"],HTMLShadowElement:[\"shadow\"],HTMLSlotElement:[\"slot\"],HTMLSourceElement:[\"source\"],HTMLSpanElement:[\"span\"],HTMLStyleElement:[\"style\"],HTMLTableCaptionElement:[\"caption\"],HTMLTableCellElement:[\"td\",\"th\"],HTMLTableColElement:[\"col\",\"colgroup\"],HTMLTableElement:[\"table\"],HTMLTableRowElement:[\"tr\"],HTMLTableSectionElement:[\"thead\",\"tbody\",\"tfoot\"],HTMLTemplateElement:[\"template\"],HTMLTextAreaElement:[\"textarea\"],HTMLTimeElement:[\"time\"],HTMLTitleElement:[\"title\"],HTMLTrackElement:[\"track\"],HTMLUListElement:[\"ul\"],HTMLUnknownElement:[\"unknown\",\"vhgroupv\",\"vkeygen\"],HTMLVideoElement:[\"video\"]},nodes:{Attr:[\"node\"],Audio:[\"audio\"],CDATASection:[\"node\"],CharacterData:[\"node\"],Comment:[\"#comment\"],Document:[\"#document\"],DocumentFragment:[\"#document-fragment\"],DocumentType:[\"node\"],HTMLDocument:[\"#document\"],Image:[\"img\"],Option:[\"option\"],ProcessingInstruction:[\"node\"],ShadowRoot:[\"#shadow-root\"],Text:[\"#text\"],XMLDocument:[\"xml\"]}});typeof t!=\"object\"&&(t={type:t||\"auto\"});var s=\"registerElement\",o=\"__\"+s+(e.Math.random()*1e5>>0),u=\"addEventListener\",a=\"attached\",f=\"Callback\",l=\"detached\",c=\"extends\",h=\"attributeChanged\"+f,p=a+f,d=\"connected\"+f,v=\"disconnected\"+f,m=\"created\"+f,g=l+f,y=\"ADDITION\",b=\"MODIFICATION\",w=\"REMOVAL\",E=\"DOMAttrModified\",S=\"DOMContentLoaded\",x=\"DOMSubtreeModified\",T=\"<\",N=\"=\",C=/^[A-Z][A-Z0-9]*(?:-[A-Z0-9]+)+$/,k=[\"ANNOTATION-XML\",\"COLOR-PROFILE\",\"FONT-FACE\",\"FONT-FACE-SRC\",\"FONT-FACE-URI\",\"FONT-FACE-FORMAT\",\"FONT-FACE-NAME\",\"MISSING-GLYPH\"],L=[],A=[],O=\"\",M=n.documentElement,_=L.indexOf||function(e){for(var t=this.length;t--&&this[t]!==e;);return t},D=r.prototype,P=D.hasOwnProperty,H=D.isPrototypeOf,B=r.defineProperty,j=[],F=r.getOwnPropertyDescriptor,I=r.getOwnPropertyNames,q=r.getPrototypeOf,R=r.setPrototypeOf,U=!!r.__proto__,z=!1,W=\"__dreCEv1\",X=e.customElements,V=!/^force/.test(t.type)&&!!(X&&X.define&&X.get&&X.whenDefined),$=r.create||r,J=e.Map||function(){var t=[],n=[],r;return{get:function(e){return n[_.call(t,e)]},set:function(e,i){r=_.call(t,e),r<0?n[t.push(e)-1]=i:n[r]=i}}},K=e.Promise||function(e){function i(e){n=!0;while(t.length)t.shift()(e)}var t=[],n=!1,r={\"catch\":function(){return r},then:function(e){return t.push(e),n&&setTimeout(i,1),r}};return e(i),r},Q=!1,G=$(null),Y=$(null),Z=new J,et=function(e){return e.toLowerCase()},tt=r.create||function sn(e){return e?(sn.prototype=e,new sn):this},nt=R||(U?function(e,t){return e.__proto__=t,e}:I&&F?function(){function e(e,t){for(var n,r=I(t),i=0,s=r.length;i<s;i++)n=r[i],P.call(e,n)||B(e,n,F(t,n))}return function(t,n){do e(t,n);while((n=q(n))&&!H.call(n,t));return t}}():function(e,t){for(var n in t)e[n]=t[n];return e}),rt=e.MutationObserver||e.WebKitMutationObserver,it=(e.HTMLElement||e.Element||e.Node).prototype,st=!H.call(it,M),ot=st?function(e,t,n){return e[t]=n.value,e}:B,ut=st?function(e){return e.nodeType===1}:function(e){return H.call(it,e)},at=st&&[],ft=it.attachShadow,lt=it.cloneNode,ct=it.dispatchEvent,ht=it.getAttribute,pt=it.hasAttribute,dt=it.removeAttribute,vt=it.setAttribute,mt=n.createElement,gt=mt,yt=rt&&{attributes:!0,characterData:!0,attributeOldValue:!0},bt=rt||function(e){Nt=!1,M.removeEventListener(E,bt)},wt,Et=0,St=s in n&&!/^force-all/.test(t.type),xt=!0,Tt=!1,Nt=!0,Ct=!0,kt=!0,Lt,At,Ot,Mt,_t,Dt,Pt;St||(R||U?(Dt=function(e,t){H.call(t,e)||Xt(e,t)},Pt=Xt):(Dt=function(e,t){e[o]||(e[o]=r(!0),Xt(e,t))},Pt=Dt),st?(Nt=!1,function(){var e=F(it,u),t=e.value,n=function(e){var t=new CustomEvent(E,{bubbles:!0});t.attrName=e,t.prevValue=ht.call(this,e),t.newValue=null,t[w]=t.attrChange=2,dt.call(this,e),ct.call(this,t)},r=function(e,t){var n=pt.call(this,e),r=n&&ht.call(this,e),i=new CustomEvent(E,{bubbles:!0});vt.call(this,e,t),i.attrName=e,i.prevValue=n?r:null,i.newValue=t,n?i[b]=i.attrChange=1:i[y]=i.attrChange=0,ct.call(this,i)},i=function(e){var t=e.currentTarget,n=t[o],r=e.propertyName,i;n.hasOwnProperty(r)&&(n=n[r],i=new CustomEvent(E,{bubbles:!0}),i.attrName=n.name,i.prevValue=n.value||null,i.newValue=n.value=t[r]||null,i.prevValue==null?i[y]=i.attrChange=0:i[b]=i.attrChange=1,ct.call(t,i))};e.value=function(e,s,u){e===E&&this[h]&&this.setAttribute!==r&&(this[o]={className:{name:\"class\",value:this.className}},this.setAttribute=r,this.removeAttribute=n,t.call(this,\"propertychange\",i)),t.call(this,e,s,u)},B(it,u,e)}()):rt||(M[u](E,bt),M.setAttribute(o,1),M.removeAttribute(o),Nt&&(Lt=function(e){var t=this,n,r,i;if(t===e.target){n=t[o],t[o]=r=Ot(t);for(i in r){if(!(i in n))return At(0,t,i,n[i],r[i],y);if(r[i]!==n[i])return At(1,t,i,n[i],r[i],b)}for(i in n)if(!(i in r))return At(2,t,i,n[i],r[i],w)}},At=function(e,t,n,r,i,s){var o={attrChange:e,currentTarget:t,attrName:n,prevValue:r,newValue:i};o[s]=e,Rt(o)},Ot=function(e){for(var t,n,r={},i=e.attributes,s=0,o=i.length;s<o;s++)t=i[s],n=t.name,n!==\"setAttribute\"&&(r[n]=t.value);return r})),n[s]=function(t,r){p=t.toUpperCase(),xt&&(xt=!1,rt?(Mt=function(e,t){function n(e,t){for(var n=0,r=e.length;n<r;t(e[n++]));}return new rt(function(r){for(var i,s,o,u=0,a=r.length;u<a;u++)i=r[u],i.type===\"childList\"?(n(i.addedNodes,e),n(i.removedNodes,t)):(s=i.target,kt&&s[h]&&i.attributeName!==\"style\"&&(o=ht.call(s,i.attributeName),o!==i.oldValue&&s[h](i.attributeName,i.oldValue,o)))})}(Ft(a),Ft(l)),_t=function(e){return Mt.observe(e,{childList:!0,subtree:!0}),e},_t(n),ft&&(it.attachShadow=function(){return _t(ft.apply(this,arguments))})):(wt=[],n[u](\"DOMNodeInserted\",Ut(a)),n[u](\"DOMNodeRemoved\",Ut(l))),n[u](S,zt),n[u](\"readystatechange\",zt),it.cloneNode=function(e){var t=lt.call(this,!!e),n=It(t);return-1<n&&Pt(t,A[n]),e&&O.length&&jt(t.querySelectorAll(O)),t});if(Tt)return Tt=!1;-2<_.call(L,N+p)+_.call(L,T+p)&&$t(t);if(!C.test(p)||-1<_.call(k,p))throw new Error(\"The type \"+t+\" is invalid\");var i=function(){return o?n.createElement(f,p):n.createElement(f)},s=r||D,o=P.call(s,c),f=o?r[c].toUpperCase():p,p,d;return o&&-1<_.call(L,T+f)&&$t(f),d=L.push((o?N:T)+p)-1,O=O.concat(O.length?\",\":\"\",o?f+'[is=\"'+t.toLowerCase()+'\"]':f),i.prototype=A[d]=P.call(s,\"prototype\")?s.prototype:tt(it),O.length&&Bt(n.querySelectorAll(O),a),i},n.createElement=gt=function(e,t){var r=Yt(t),i=r?mt.call(n,e,et(r)):mt.call(n,e),s=\"\"+e,o=_.call(L,(r?N:T)+(r||s).toUpperCase()),u=-1<o;return r&&(i.setAttribute(\"is\",r=r.toLowerCase()),u&&(u=qt(s.toUpperCase(),r))),kt=!n.createElement.innerHTMLHelper,u&&Pt(i,A[o]),i}),Kt.prototype={constructor:Kt,define:V?function(e,t,n){if(n)Qt(e,t,n);else{var r=e.toUpperCase();G[r]={constructor:t,create:[r]},Z.set(t,r),X.define(e,t)}}:Qt,get:V?function(e){return X.get(e)||Gt(e)}:Gt,whenDefined:V?function(e){return K.race([X.whenDefined(e),en(e)])}:en};if(!X||/^force/.test(t.type))tn();else if(!t.noBuiltIn)try{(function(t,r,i){r[c]=\"a\",t.prototype=tt(HTMLAnchorElement.prototype),t.prototype.constructor=t,e.customElements.define(i,t,r);if(ht.call(n.createElement(\"a\",{is:i}),\"is\")!==i||V&&ht.call(new t,\"is\")!==i)throw r})(function on(){return Reflect.construct(HTMLAnchorElement,[],on)},{},\"document-register-element-a\")}catch(nn){tn()}if(!t.noBuiltIn)try{mt.call(n,\"a\",\"a\")}catch(rn){et=function(e){return{is:e.toLowerCase()}}}})(window);\n}\n/*!\nElement.closest and Element.matches\nhttps://github.com/jonathantneal/closest\nCreative Commons Zero v1.0 Universal\n*/\n(function(a){\"function\"!==typeof a.matches&&(a.matches=a.msMatchesSelector||a.mozMatchesSelector||a.webkitMatchesSelector||function(a){a=(this.document||this.ownerDocument).querySelectorAll(a);for(var b=0;a[b]&&a[b]!==this;)++b;return!!a[b]});\"function\"!==typeof a.closest&&(a.closest=function(a){for(var b=this;b&&1===b.nodeType;){if(b.matches(a))return b;b=b.parentNode}return null})})(window.Element.prototype);\n/*!\nElement.getRootNode()\n*/\n(function(c){function d(a){a=b(a);return 11===a.nodeType?d(a.host):a}function b(a){return a.parentNode?b(a.parentNode):a}\"function\"!==typeof c.getRootNode&&(c.getRootNode=function(a){return a&&a.composed?d(this):b(this)})})(Element.prototype);\n/*!\nElement.remove()\n*/\n(function(b){b.forEach(function(a){a.hasOwnProperty(\"remove\")||Object.defineProperty(a,\"remove\",{configurable:!0,enumerable:!0,writable:!0,value:function(){null!==this.parentNode&&this.parentNode.removeChild(this)}})})})([Element.prototype,CharacterData.prototype,DocumentType.prototype]);\n\n/*!\nArray.prototype.fill\n*/\nArray.prototype.fill||Object.defineProperty(Array.prototype,\"fill\",{value:function(t){var r,e,i,n,o,a,l;if(null==this)throw new TypeError(\"this is null or not defined\");for(e=(r=Object(this)).length>>>0,n=(i=arguments[1]>>0)<0?Math.max(e+i,0):Math.min(i,e),l=(a=void 0===(o=arguments[2])?e:o>>0)<0?Math.max(e+a,0):Math.min(a,e);n<l;)r[n]=t,n++;return r}});\n\n/*!\nArray.prototype.find\n*/\nArray.prototype.find||Object.defineProperty(Array.prototype,\"find\",{writable:!0,configurable:!0,value:function(c,e){if(null==this)throw new TypeError('\"this\" is null or not defined');var b=Object(this),f=b.length>>>0;if(\"function\"!==typeof c)throw new TypeError(\"predicate must be a function\");for(var a=0;a<f;){var d=b[a];if(c.call(e,d,a,b))return d;a++}}});\n/*!\nArray.prototype.findIndex\n*/\nArray.prototype.findIndex||Object.defineProperty(Array.prototype,\"findIndex\",{value:function(c,d){if(null==this)throw new TypeError('\"this\" is null or not defined');var b=Object(this),e=b.length>>>0;if(\"function\"!==typeof c)throw new TypeError(\"predicate must be a function\");for(var a=0;a<e;){if(c.call(d,b[a],a,b))return a;a++}return-1},configurable:!0,writable:!0});\n/*!\nArray.from\n*/\nArray.from||(Array.from=function(){var l=Object.prototype.toString,h=function(c){return\"function\"===typeof c||\"[object Function]\"===l.call(c)},m=Math.pow(2,53)-1;return function(c){var k=Object(c);if(null==c)throw new TypeError(\"Array.from requires an array-like object - not null or undefined\");var d=1<arguments.length?arguments[1]:void 0,f;if(\"undefined\"!==typeof d){if(!h(d))throw new TypeError(\"Array.from: when provided, the second argument must be a function\");2<arguments.length&&(f=arguments[2])}var a=\nNumber(k.length);a=isNaN(a)?0:0!==a&&isFinite(a)?(0<a?1:-1)*Math.floor(Math.abs(a)):a;a=Math.min(Math.max(a,0),m);for(var g=h(this)?Object(new this(a)):Array(a),b=0,e;b<a;)e=k[b],g[b]=d?\"undefined\"===typeof f?d(e,b):d.call(f,e,b):e,b+=1;g.length=a;return g}}());\n/*!\nArray.prototype.includes\n*/\nArray.prototype.includes||Object.defineProperty(Array.prototype,\"includes\",{writable:!0,configurable:!0,value:function(r,e){if(null==this)throw new TypeError('\"this\" is null or not defined');var t=Object(this),n=t.length>>>0;if(0===n)return!1;var i,o,a=0|e,u=Math.max(0<=a?a:n-Math.abs(a),0);for(;u<n;){if((i=t[u])===(o=r)||\"number\"==typeof i&&\"number\"==typeof o&&isNaN(i)&&isNaN(o))return!0;u++}return!1}});\n\n/*!\nObject.assign\n*/\n\"function\"!=typeof Object.assign&&Object.defineProperty(Object,\"assign\",{value:function(d,f){if(null==d)throw new TypeError(\"Cannot convert undefined or null to object\");for(var e=Object(d),b=1;b<arguments.length;b++){var a=arguments[b];if(null!=a)for(var c in a)Object.prototype.hasOwnProperty.call(a,c)&&(e[c]=a[c])}return e},writable:!0,configurable:!0});\n/*!\nObject.entries\n*/\nObject.entries||(Object.entries=function(c){for(var b=Object.keys(c),a=b.length,d=Array(a);a--;)d[a]=[b[a],c[b[a]]];return d});\n/*!\nObject.values\n*/\nObject.values||(Object.values=function(n){return Object.keys(n).map(function(r){return n[r]})});\n\n/*!\nNumber\n*/\nvoid 0===Number.isFinite&&(Number.isFinite=function(a){return\"number\"===typeof a&&isFinite(a)});\nNumber.isNaN=Number.isNaN||function(a){return a!==a};\nNumber.isInteger=Number.isInteger||function(a){return\"number\"===typeof a&&isFinite(a)&&Math.floor(a)===a};\n\n/*!\nString.prototype.endsWith\n*/\nString.prototype.endsWith||Object.defineProperty(String.prototype,\"endsWith\",{writable:!0,configurable:!0,value:function(b,a){if(void 0===a||a>this.length)a=this.length;return this.substring(a-b.length,a)===b}});\n/*!\nString.prototype.includes\n*/\nString.prototype.includes||(String.prototype.includes=function(b,a){\"number\"!==typeof a&&(a=0);return a+b.length>this.length?!1:-1!==this.indexOf(b,a)});\n/*!\nString.prototype.startsWith\n*/\nString.prototype.startsWith||Object.defineProperty(String.prototype,\"startsWith\",{writable:!0,configurable:!0,value:function(b,a){return this.substr(!a||0>a?0:+a,b.length)===b}});\n/*!\nes6-promise - a tiny implementation of Promises/A+.\nCopyright (c) 2014 Yehuda Katz, Tom Dale, Stefan Penner and contributors (Conversion to ES6 API by Jake Archibald)\nLicensed under MIT license\nSee https://raw.githubusercontent.com/stefanpenner/es6-promise/master/LICENSE\nv4.2.4+314e4831\n*/\n(window.ES6Promise=function(){function t(){var t=setTimeout;return function(){return t(r,1)}}function r(){for(var t=0;t<y;t+=2)(0,C[t])(C[t+1]),C[t]=void 0,C[t+1]=void 0;y=0}function e(t,r){var e=this,n=new this.constructor(o);void 0===n[O]&&_(n);var i=e._state;if(i){var s=arguments[i-1];g(function(){return v(i,n,s,e._result)})}else l(e,n,t,r);return n}function n(t){if(t&&\"object\"==typeof t&&t.constructor===this)return t;var r=new this(o);return u(r,t),r}function o(){}function i(t){try{return t.then}catch(t){return q.error=t,q}}function s(t,r,o){r.constructor===t.constructor&&o===e&&r.constructor.resolve===n?function(t,r){r._state===x?a(t,r._result):r._state===F?f(t,r._result):l(r,void 0,function(r){return u(t,r)},function(r){return f(t,r)})}(t,r):o===q?(f(t,q.error),q.error=null):void 0===o?a(t,r):\"function\"==typeof o?function(t,r,e){g(function(t){var n=!1,o=function(t,r,e,n){try{t.call(r,e,n)}catch(t){return t}}(e,r,function(e){n||(n=!0,r!==e?u(t,e):a(t,e))},function(r){n||(n=!0,f(t,r))},t._label);!n&&o&&(n=!0,f(t,o))},t)}(t,r,o):a(t,r)}function u(t,r){if(t===r)f(t,new TypeError(\"cannot resolve promise w/ itself\"));else{var e=typeof r;null===r||\"object\"!==e&&\"function\"!==e?a(t,r):s(t,r,i(r))}}function c(t){t._onerror&&t._onerror(t._result),h(t)}function a(t,r){t._state===P&&(t._result=r,t._state=x,0!==t._subscribers.length&&g(h,t))}function f(t,r){t._state===P&&(t._state=F,t._result=r,g(c,t))}function l(t,r,e,n){var o=t._subscribers,i=o.length;t._onerror=null,o[i]=r,o[i+x]=e,o[i+F]=n,0===i&&t._state&&g(h,t)}function h(t){var r=t._subscribers,e=t._state;if(0!==r.length){for(var n,o,i=t._result,s=0;s<r.length;s+=3)n=r[s],o=r[s+e],n?v(e,n,o,i):o(i);t._subscribers.length=0}}function v(t,r,e,n){var o=\"function\"==typeof e,i=void 0,s=void 0,c=void 0,l=void 0;if(o){try{i=e(n)}catch(t){q.error=t,i=q}if(i===q?(l=!0,s=i.error,i.error=null):c=!0,r===i)return void f(r,new TypeError(\"Cannot return same promise\"))}else i=n,c=!0;r._state===P&&(o&&c?u(r,i):l?f(r,s):t===x?a(r,i):t===F&&f(r,i))}function _(t){t[O]=U++,t._state=void 0,t._result=void 0,t._subscribers=[]}var p,d=Array.isArray?Array.isArray:function(t){return\"[object Array]\"===Object.prototype.toString.call(t)},y=0,w=void 0,m=void 0,g=function(t,e){C[y]=t,C[y+1]=e,2===(y+=2)&&(m?m(r):T())},b=(p=\"undefined\"!=typeof window?window:void 0)||{},A=b.MutationObserver||b.WebKitMutationObserver;b=\"undefined\"==typeof self;var E,S,M,j=\"undefined\"!=typeof Uint8ClampedArray&&\"undefined\"!=typeof importScripts&&\"undefined\"!=typeof MessageChannel,C=Array(1e3),T=void 0;T=A?(E=0,S=new A(r),M=document.createTextNode(\"\"),S.observe(M,{characterData:!0}),function(){M.data=E=++E%2}):j?function(){var t=new MessageChannel;return t.port1.onmessage=r,function(){return t.port2.postMessage(0)}}():void 0===p&&\"function\"==typeof require?function(){try{var e=Function(\"return this\")().require(\"vertx\");return void 0!==(w=e.runOnLoop||e.runOnContext)?function(){w(r)}:t()}catch(r){return t()}}():t();var O=Math.random().toString(36).substring(2),P=void 0,x=1,F=2,q={error:null},U=0,D=function(){function t(t,r){this._instanceConstructor=t,this.promise=new t(o),this.promise[O]||_(this.promise),d(r)?(this._remaining=this.length=r.length,this._result=Array(this.length),0===this.length?a(this.promise,this._result):(this.length=this.length||0,this._enumerate(r),0===this._remaining&&a(this.promise,this._result))):f(this.promise,Error(\"Array Methods must be provided an Array\"))}return t.prototype._enumerate=function(t){for(var r=0;this._state===P&&r<t.length;r++)this._eachEntry(t[r],r)},t.prototype._eachEntry=function(t,r){var u=this._instanceConstructor,c=u.resolve;c===n?(c=i(t))===e&&t._state!==P?this._settledAt(t._state,r,t._result):\"function\"!=typeof c?(this._remaining--,this._result[r]=t):u===K?(s(u=new u(o),t,c),this._willSettleAt(u,r)):this._willSettleAt(new u(function(r){return r(t)}),r):this._willSettleAt(c(t),r)},t.prototype._settledAt=function(t,r,e){var n=this.promise;n._state===P&&(this._remaining--,t===F?f(n,e):this._result[r]=e),0===this._remaining&&a(n,this._result)},t.prototype._willSettleAt=function(t,r){var e=this;l(t,void 0,function(t){return e._settledAt(x,r,t)},function(t){return e._settledAt(F,r,t)})},t}(),K=function(){function t(r){if(this[O]=U++,this._result=this._state=void 0,this._subscribers=[],o!==r){if(\"function\"!=typeof r)throw new TypeError(\"Must pass a resolver fn as 1st arg\");if(!(this instanceof t))throw new TypeError(\"Failed to construct 'Promise': Use the 'new' operator.\");!function(t,r){try{r(function(r){u(t,r)},function(r){f(t,r)})}catch(r){f(t,r)}}(this,r)}}return t.prototype.catch=function(t){return this.then(null,t)},t.prototype.finally=function(t){var r=this.constructor;return this.then(function(e){return r.resolve(t()).then(function(){return e})},function(e){return r.resolve(t()).then(function(){throw e})})},t}();return K.prototype.then=e,K.all=function(t){return new D(this,t).promise},K.race=function(t){var r=this;return d(t)?new r(function(e,n){for(var o=t.length,i=0;i<o;i++)r.resolve(t[i]).then(e,n)}):new r(function(t,r){return r(new TypeError(\"Must pass array to race\"))})},K.resolve=n,K.reject=function(t){var r=new this(o);return f(r,t),r},K._setScheduler=function(t){m=t},K._setAsap=function(t){g=t},K._asap=g,K.polyfill=function(){var t=void 0;if(\"undefined\"!=typeof global)t=global;else if(\"undefined\"!=typeof self)t=self;else try{t=Function(\"return this\")()}catch(t){throw Error(\"polyfill failed\")}var r=t.Promise;if(r){var e=null;try{e=Object.prototype.toString.call(r.resolve())}catch(t){}if(\"[object Promise]\"===e&&!r.cast)return}t.Promise=K},K.Promise=K,K.polyfill(),K}());\n/*! https://github.com/WebReflection/es6-collections\n(C) Andrea Giammarchi - @WebReflection - Mit Style License */\n(function(e){function d(a,b){function c(a){if(!this||this.constructor!==c)return new c(a);this._keys=[];this._values=[];this._itp=[];this.objectOnly=b;a&&v.call(this,a)}b||w(a,\"size\",{get:x});a.constructor=c;c.prototype=a;return c}function v(a){this.add?a.forEach(this.add,this):a.forEach(function(a){this.set(a[0],a[1])},this)}function f(a){this.has(a)&&(this._keys.splice(c,1),this._values.splice(c,1),this._itp.forEach(function(a){c<a[0]&&a[0]--}));return-1<c}function m(a){return this.has(a)?this._values[c]:\n  void 0}function n(a,b){if(this.objectOnly&&b!==Object(b))throw new TypeError(\"Invalid value used as weak collection key\");if(b!=b||0===b)for(c=a.length;c--&&!y(a[c],b););else c=a.indexOf(b);return-1<c}function p(a){return n.call(this,this._values,a)}function q(a){return n.call(this,this._keys,a)}function r(a,b){this.has(a)?this._values[c]=b:this._values[this._keys.push(a)-1]=b;return this}function t(a){this.has(a)||this._values.push(a);return this}function h(){(this._keys||0).length=this._values.length=\n  0}function z(){return k(this._itp,this._keys)}function l(){return k(this._itp,this._values)}function A(){return k(this._itp,this._keys,this._values)}function B(){return k(this._itp,this._values,this._values)}function k(a,b,c){var g=[0],e=!1;a.push(g);return{next:function(){var d=g[0];if(!e&&d<b.length){var f=c?[b[d],c[d]]:b[d];g[0]++}else e=!0,a.splice(a.indexOf(g),1);return{done:e,value:f}}}}function x(){return this._values.length}function u(a,b){for(var c=this.entries();;){var d=c.next();if(d.done)break;\n  a.call(b,d.value[1],d.value[0],this)}}var c,w=Object.defineProperty,y=function(a,b){return a===b||a!==a&&b!==b};\"undefined\"==typeof WeakMap&&(e.WeakMap=d({\"delete\":f,clear:h,get:m,has:q,set:r},!0));\"undefined\"!=typeof Map&&\"function\"===typeof(new Map).values&&(new Map).values().next||(e.Map=d({\"delete\":f,has:q,get:m,set:r,keys:z,values:l,entries:A,forEach:u,clear:h}));\"undefined\"!=typeof Set&&\"function\"===typeof(new Set).values&&(new Set).values().next||(e.Set=d({has:p,add:t,\"delete\":f,clear:h,keys:l,\n  values:l,entries:B,forEach:u}));\"undefined\"==typeof WeakSet&&(e.WeakSet=d({\"delete\":f,add:t,clear:h,has:p},!0))})(window);\n/*!\nwhatwg-fetch, 2.0.3\nhttps://github.com/github/fetch\nCopyright (c) 2014-2016 GitHub, Inc. - MIT License\n*/\n(function(e){function l(a){\"string\"!==typeof a&&(a=String(a));if(/[^a-z0-9\\-#$%&'*+.\\^_`|~]/i.test(a))throw new TypeError(\"Invalid character in header field name\");return a.toLowerCase()}function q(a){\"string\"!==typeof a&&(a=String(a));return a}function n(a){var b={next:function(){var b=a.shift();return{done:void 0===b,value:b}}};g.iterable&&(b[Symbol.iterator]=function(){return b});return b}function d(a){this.map={};a instanceof d?a.forEach(function(a,c){this.append(c,a)},this):Array.isArray(a)?\na.forEach(function(a){this.append(a[0],a[1])},this):a&&Object.getOwnPropertyNames(a).forEach(function(b){this.append(b,a[b])},this)}function p(a){if(a.bodyUsed)return Promise.reject(new TypeError(\"Already read\"));a.bodyUsed=!0}function r(a){return new Promise(function(b,c){a.onload=function(){b(a.result)};a.onerror=function(){c(a.error)}})}function w(a){var b=new FileReader,c=r(b);b.readAsArrayBuffer(a);return c}function x(a){a=new Uint8Array(a);for(var b=Array(a.length),c=0;c<a.length;c++)b[c]=String.fromCharCode(a[c]);\nreturn b.join(\"\")}function t(a){if(a.slice)return a.slice(0);var b=new Uint8Array(a.byteLength);b.set(new Uint8Array(a));return b.buffer}function u(){this.bodyUsed=!1;this._initBody=function(a){if(this._bodyInit=a)if(\"string\"===typeof a)this._bodyText=a;else if(g.blob&&Blob.prototype.isPrototypeOf(a))this._bodyBlob=a;else if(g.formData&&FormData.prototype.isPrototypeOf(a))this._bodyFormData=a;else if(g.searchParams&&URLSearchParams.prototype.isPrototypeOf(a))this._bodyText=a.toString();else if(g.arrayBuffer&&\ng.blob&&y(a))this._bodyArrayBuffer=t(a.buffer),this._bodyInit=new Blob([this._bodyArrayBuffer]);else if(g.arrayBuffer&&(ArrayBuffer.prototype.isPrototypeOf(a)||z(a)))this._bodyArrayBuffer=t(a);else throw Error(\"unsupported BodyInit type\");else this._bodyText=\"\";this.headers.get(\"content-type\")||(\"string\"===typeof a?this.headers.set(\"content-type\",\"text/plain;charset=UTF-8\"):this._bodyBlob&&this._bodyBlob.type?this.headers.set(\"content-type\",this._bodyBlob.type):g.searchParams&&URLSearchParams.prototype.isPrototypeOf(a)&&\nthis.headers.set(\"content-type\",\"application/x-www-form-urlencoded;charset=UTF-8\"))};g.blob&&(this.blob=function(){var a=p(this);if(a)return a;if(this._bodyBlob)return Promise.resolve(this._bodyBlob);if(this._bodyArrayBuffer)return Promise.resolve(new Blob([this._bodyArrayBuffer]));if(this._bodyFormData)throw Error(\"could not read FormData body as blob\");return Promise.resolve(new Blob([this._bodyText]))},this.arrayBuffer=function(){return this._bodyArrayBuffer?p(this)||Promise.resolve(this._bodyArrayBuffer):\nthis.blob().then(w)});this.text=function(){var a=p(this);if(a)return a;if(this._bodyBlob){a=this._bodyBlob;var b=new FileReader,c=r(b);b.readAsText(a);return c}if(this._bodyArrayBuffer)return Promise.resolve(x(this._bodyArrayBuffer));if(this._bodyFormData)throw Error(\"could not read FormData body as text\");return Promise.resolve(this._bodyText)};g.formData&&(this.formData=function(){return this.text().then(A)});this.json=function(){return this.text().then(JSON.parse)};return this}function k(a,b){b=\nb||{};var c=b.body;if(a instanceof k){if(a.bodyUsed)throw new TypeError(\"Already read\");this.url=a.url;this.credentials=a.credentials;b.headers||(this.headers=new d(a.headers));this.method=a.method;this.mode=a.mode;c||null==a._bodyInit||(c=a._bodyInit,a.bodyUsed=!0)}else this.url=String(a);this.credentials=b.credentials||this.credentials||\"omit\";if(b.headers||!this.headers)this.headers=new d(b.headers);var v=b.method||this.method||\"GET\",g=v.toUpperCase();this.method=-1<B.indexOf(g)?g:v;this.mode=\nb.mode||this.mode||null;this.referrer=null;if((\"GET\"===this.method||\"HEAD\"===this.method)&&c)throw new TypeError(\"Body not allowed for GET or HEAD requests\");this._initBody(c)}function A(a){var b=new FormData;a.trim().split(\"&\").forEach(function(a){if(a){var c=a.split(\"=\");a=c.shift().replace(/\\+/g,\" \");c=c.join(\"=\").replace(/\\+/g,\" \");b.append(decodeURIComponent(a),decodeURIComponent(c))}});return b}function C(a){var b=new d;a.replace(/\\r?\\n[\\t ]+/g,\" \").split(/\\r?\\n/).forEach(function(a){var c=\na.split(\":\");if(a=c.shift().trim())c=c.join(\":\").trim(),b.append(a,c)});return b}function h(a,b){b||(b={});this.type=\"default\";this.status=void 0===b.status?200:b.status;this.ok=200<=this.status&&300>this.status;this.statusText=\"statusText\"in b?b.statusText:\"OK\";this.headers=new d(b.headers);this.url=b.url||\"\";this._initBody(a)}if(!e.fetch){var D=\"Symbol\"in e&&\"iterator\"in Symbol,m;if(m=\"FileReader\"in e&&\"Blob\"in e)try{new Blob,m=!0}catch(a){m=!1}var g={searchParams:\"URLSearchParams\"in e,iterable:D,\nblob:m,formData:\"FormData\"in e,arrayBuffer:\"ArrayBuffer\"in e};if(g.arrayBuffer){var E=\"[object Int8Array];[object Uint8Array];[object Uint8ClampedArray];[object Int16Array];[object Uint16Array];[object Int32Array];[object Uint32Array];[object Float32Array];[object Float64Array]\".split(\";\");var y=function(a){return a&&DataView.prototype.isPrototypeOf(a)};var z=ArrayBuffer.isView||function(a){return a&&-1<E.indexOf(Object.prototype.toString.call(a))}}d.prototype.append=function(a,b){a=l(a);b=q(b);var c=\nthis.map[a];this.map[a]=c?c+\",\"+b:b};d.prototype[\"delete\"]=function(a){delete this.map[l(a)]};d.prototype.get=function(a){a=l(a);return this.has(a)?this.map[a]:null};d.prototype.has=function(a){return this.map.hasOwnProperty(l(a))};d.prototype.set=function(a,b){this.map[l(a)]=q(b)};d.prototype.forEach=function(a,b){for(var c in this.map)this.map.hasOwnProperty(c)&&a.call(b,this.map[c],c,this)};d.prototype.keys=function(){var a=[];this.forEach(function(b,c){a.push(c)});return n(a)};d.prototype.values=\nfunction(){var a=[];this.forEach(function(b){a.push(b)});return n(a)};d.prototype.entries=function(){var a=[];this.forEach(function(b,c){a.push([c,b])});return n(a)};g.iterable&&(d.prototype[Symbol.iterator]=d.prototype.entries);var B=\"DELETE GET HEAD OPTIONS POST PUT\".split(\" \");k.prototype.clone=function(){return new k(this,{body:this._bodyInit})};u.call(k.prototype);u.call(h.prototype);h.prototype.clone=function(){return new h(this._bodyInit,{status:this.status,statusText:this.statusText,headers:new d(this.headers),\nurl:this.url})};h.error=function(){var a=new h(null,{status:0,statusText:\"\"});a.type=\"error\";return a};var F=[301,302,303,307,308];h.redirect=function(a,b){if(-1===F.indexOf(b))throw new RangeError(\"Invalid status code\");return new h(null,{status:b,headers:{location:a}})};e.Headers=d;e.Request=k;e.Response=h;e.fetch=function(a,b){return new Promise(function(c,d){var e=new k(a,b),f=new XMLHttpRequest;f.onload=function(){var a={status:f.status,statusText:f.statusText,headers:C(f.getAllResponseHeaders()||\n\"\")};a.url=\"responseURL\"in f?f.responseURL:a.headers.get(\"X-Request-URL\");c(new h(\"response\"in f?f.response:f.responseText,a))};f.onerror=function(){d(new TypeError(\"Network request failed\"))};f.ontimeout=function(){d(new TypeError(\"Network request failed\"))};f.open(e.method,e.url,!0);\"include\"===e.credentials?f.withCredentials=!0:\"omit\"===e.credentials&&(f.withCredentials=!1);\"responseType\"in f&&g.blob&&(f.responseType=\"blob\");e.headers.forEach(function(a,b){f.setRequestHeader(b,a)});f.send(\"undefined\"===\ntypeof e._bodyInit?null:e._bodyInit)})};e.fetch.polyfill=!0}})(\"undefined\"!==typeof self?self:window);\n/*!\nurl-polyfill, 1.0.14\nhttps://github.com/lifaon74/url-polyfill\nMIT Licensed\n*/\n(function(e){var t=function(){try{return!!Symbol.iterator}catch(e){return false}};var n=t();var r=function(e){var t={next:function(){var t=e.shift();return{done:t===void 0,value:t}}};if(n){t[Symbol.iterator]=function(){return t}}return t};var i=function(e){return encodeURIComponent(e).replace(/%20/g,\"+\")};var o=function(e){return decodeURIComponent(e).replace(/\\+/g,\" \")};var a=function(){var t=function(e){Object.defineProperty(this,\"_entries\",{value:{}});if(typeof e===\"string\"){if(e!==\"\"){e=e.replace(/^\\?/,\"\");var n=e.split(\"&\");var r;for(var i=0;i<n.length;i++){r=n[i].split(\"=\");this.append(o(r[0]),r.length>1?o(r[1]):\"\")}}}else if(e instanceof t){var a=this;e.forEach(function(e,t){a.append(e,t)})}};var a=t.prototype;a.append=function(e,t){if(e in this._entries){this._entries[e].push(t.toString())}else{this._entries[e]=[t.toString()]}};a.delete=function(e){delete this._entries[e]};a.get=function(e){return e in this._entries?this._entries[e][0]:null};a.getAll=function(e){return e in this._entries?this._entries[e].slice(0):[]};a.has=function(e){return e in this._entries};a.set=function(e,t){this._entries[e]=[t.toString()]};a.forEach=function(e,t){var n;for(var r in this._entries){if(this._entries.hasOwnProperty(r)){n=this._entries[r];for(var i=0;i<n.length;i++){e.call(t,n[i],r,this)}}}};a.keys=function(){var e=[];this.forEach(function(t,n){e.push(n)});return r(e)};a.values=function(){var e=[];this.forEach(function(t){e.push(t)});return r(e)};a.entries=function(){var e=[];this.forEach(function(t,n){e.push([n,t])});return r(e)};if(n){a[Symbol.iterator]=a.entries}a.toString=function(){var e=[];this.forEach(function(t,n){e.push(i(n)+\"=\"+i(t))});return e.join(\"&\")};e.URLSearchParams=t};if(!(\"URLSearchParams\"in e)||new URLSearchParams(\"?a=1\").toString()!==\"a=1\"){a()}})(typeof global!==\"undefined\"?global:typeof window!==\"undefined\"?window:typeof self!==\"undefined\"?self:this);(function(e){var t=function(){try{var e=new URL(\"b\",\"http://a\");e.pathname=\"c%20d\";return e.href===\"http://a/c%20d\"&&e.searchParams}catch(e){return false}};var n=function(){var t=e.URL;var n=function(e,t){if(typeof e!==\"string\")e=String(e);var n=document.implementation.createHTMLDocument(\"\");window.doc=n;if(t){var r=n.createElement(\"base\");r.href=t;n.head.appendChild(r)}var i=n.createElement(\"a\");i.href=e;n.body.appendChild(i);i.href=i.href;if(i.protocol===\":\"||!/:/.test(i.href)){throw new TypeError(\"Invalid URL\")}Object.defineProperty(this,\"_anchorElement\",{value:i})};var r=n.prototype;var i=function(e){Object.defineProperty(r,e,{get:function(){return this._anchorElement[e]},set:function(t){this._anchorElement[e]=t},enumerable:true})};[\"hash\",\"host\",\"hostname\",\"port\",\"protocol\",\"search\"].forEach(function(e){i(e)});Object.defineProperties(r,{toString:{get:function(){var e=this;return function(){return e.href}}},href:{get:function(){return this._anchorElement.href.replace(/\\?$/,\"\")},set:function(e){this._anchorElement.href=e},enumerable:true},pathname:{get:function(){return this._anchorElement.pathname.replace(/(^\\/?)/,\"/\")},set:function(e){this._anchorElement.pathname=e},enumerable:true},origin:{get:function(){var e={\"http:\":80,\"https:\":443,\"ftp:\":21}[this._anchorElement.protocol];var t=this._anchorElement.port!=e&&this._anchorElement.port!==\"\";return this._anchorElement.protocol+\"//\"+this._anchorElement.hostname+(t?\":\"+this._anchorElement.port:\"\")},enumerable:true},password:{get:function(){return\"\"},set:function(e){},enumerable:true},username:{get:function(){return\"\"},set:function(e){},enumerable:true},searchParams:{get:function(){var e=new URLSearchParams(this.search);var t=this;[\"append\",\"delete\",\"set\"].forEach(function(n){var r=e[n];e[n]=function(){r.apply(e,arguments);t.search=e.toString()}});return e},enumerable:true}});n.createObjectURL=function(e){return t.createObjectURL.apply(t,arguments)};n.revokeObjectURL=function(e){return t.revokeObjectURL.apply(t,arguments)};e.URL=n};if(!t()){n()}if(e.location!==void 0&&!(\"origin\"in e.location)){var r=function(){return e.location.protocol+\"//\"+e.location.hostname+(e.location.port?\":\"+e.location.port:\"\")};try{Object.defineProperty(e.location,\"origin\",{get:r,enumerable:true})}catch(t){setInterval(function(){e.location.origin=r()},100)}}})(typeof global!==\"undefined\"?global:typeof window!==\"undefined\"?window:typeof self!==\"undefined\"?self:this);\n/*! Built with http://stenciljs.com */\n(function(w,d,x,n,h,c,r){\"use strict\";\n(function(s){s&&(r=s.getAttribute('data-resources-url'))})(d.querySelector(\"script[data-namespace='ionic-site-components']\"));\nfunction t(n,t){return\"sc-\"+n.t+(t&&t!==S?\"-\"+t:\"\")}function e(n,t){return n+(t?\"-h\":\"-s\")}function i(n,t,r,e,i){if(e){var u=t.t+(i||S);t[u]||(t[u]=e)}}function u(n,t){for(var r,e,i=null,u=!1,o=!1,f=arguments.length;f-- >2;)F.push(arguments[f]);for(;F.length>0;){var c=F.pop();if(c&&void 0!==c.pop)for(f=c.length;f--;)F.push(c[f]);else\"boolean\"==typeof c&&(c=null),(o=\"function\"!=typeof n)&&(null==c?c=\"\":\"number\"==typeof c?c=String(c):\"string\"!=typeof c&&(o=!1)),o&&u?i[i.length-1].vtext+=c:null===i?i=[o?{vtext:c}:c]:i.push(o?{vtext:c}:c),u=o}if(null!=t){if(t.className&&(t.class=t.className),\"object\"==typeof t.class){for(f in t.class)t.class[f]&&F.push(f);t.class=F.join(\" \"),F.length=0}null!=t.key&&(r=t.key),null!=t.name&&(e=t.name)}return\"function\"==typeof n?n(t,i||[],H):{vtag:n,vchildren:i,vtext:void 0,vattrs:t,vkey:r,vname:e,i:void 0,u:!1}}function o(n,t,r){n.lastIndex=0;var e=t.substring(r).match(n);if(e){var i=r+e.index;return{start:i,end:i+e[0].length}}return null}function f(n,t,r){var e=function i(n,t){var r=o(hn,n,t);if(!r)return null;var e=function i(n,t){for(var r=0,e=t;e<n.length;e++){var i=n[e];if(\"(\"===i)r++;else if(\")\"===i&&--r<=0)return e+1}return e}(n,r.start),u=n.substring(r.end,e-1).split(\",\"),f=u[0],c=u.slice(1);return{start:r.start,end:e,o:f.trim(),fallback:c.length>0?c.join(\",\").trim():void 0}}(n,r);if(!e)return t.push(n.substring(r,n.length)),n.length;var u=e.o,f=null!=e.fallback?l(e.fallback):void 0;return t.push(n.substring(r,e.start),function(n){return function t(n,r,e){return n[r]?n[r]:e?a(e,n):\"\"}(n,u,f)}),e.end}function a(n,t){for(var r=\"\",e=0;e<n.length;e++){var i=n[e];r+=\"string\"==typeof i?i:i(t)}return r}function s(n,t){for(var r=!1,e=!1,i=t;i<n.length;i++){var u=n[i];if(r)e&&'\"'===u&&(r=!1),e||\"'\"!==u||(r=!1);else if('\"'===u)r=!0,e=!0;else if(\"'\"===u)r=!0,e=!1;else{if(\";\"===u)return i+1;if(\"}\"===u)return i}}return i}function l(n){var t=0;n=function r(n){for(var t=\"\",r=0;;){var e=o(dn,n,r),i=e?e.start:n.length;if(t+=n.substring(r,i),!e)break;r=s(n,i)}return t}(n=n.replace(mn,\"\")).replace(bn,\"\");for(var e=[];t<n.length;)t=f(n,e,t);return e}function v(n){var t={};n.forEach(function(n){n.s.forEach(function(n){t[n.l]=n.value})});for(var r={},e=Object.entries(t),i=function(){var n=!1;if(e.forEach(function(t){var e=t[0],i=a(t[1],r);i!==r[e]&&(r[e]=i,n=!0)}),!n)return\"break\"},u=0;u<10&&\"break\"!==i();u++);return r}function p(n,t){if(void 0===t&&(t=0),!n.rules)return[];var r=[];return n.rules.filter(function(n){return n.type===fn.STYLE_RULE}).forEach(function(n){var e=function i(n){for(var t,r=[];t=wn.exec(n.trim());){var e=m(t[2]),i=e.value,u=e.v;r.push({l:t[1].trim(),value:l(i),v:u})}return r}(n.cssText);e.length>0&&n.parsedSelector.split(\",\").forEach(function(n){n=n.trim(),r.push({selector:n,s:e,p:1,m:t})}),t++}),r}function m(n){var t=(n=n.replace(/\\s+/gim,\" \").trim()).endsWith(yn);return t&&(n=n.substr(0,n.length-yn.length).trim()),{value:n,v:t}}function b(n){var t=[];return n.forEach(function(n){t.push.apply(t,n.g)}),t}function y(n){var t=function r(n){return function n(t,r){var e=r.substring(t.start,t.end-1);if(t.parsedCssText=t.cssText=e.trim(),t.parent){var i=t.previous?t.previous.end:t.parent.start;e=(e=(e=function u(n){return n.replace(/\\\\([0-9a-f]{1,6})\\s/gi,function(){for(var n=arguments[1],t=6-n.length;t--;)n=\"0\"+n;return\"\\\\\"+n})}(e=r.substring(i,t.start-1))).replace(sn.k,\" \")).substring(e.lastIndexOf(\";\")+1);var o=t.parsedSelector=t.selector=e.trim();t.atRule=0===o.indexOf(pn),t.atRule?0===o.indexOf(vn)?t.type=fn.MEDIA_RULE:o.match(sn.M)&&(t.type=fn.KEYFRAMES_RULE,t.keyframesName=t.selector.split(sn.k).pop()):0===o.indexOf(ln)?t.type=fn.j:t.type=fn.STYLE_RULE}var f=t.rules;if(f)for(var c=0,a=f.length,s=void 0;c<a&&(s=f[c]);c++)n(s,r);return t}(function r(n){var t=new on;t.start=0,t.end=n.length;for(var r=t,e=0,i=n.length;e<i;e++)if(n[e]===cn){r.rules||(r.rules=[]);var u=r,o=u.rules[u.rules.length-1]||null;(r=new on).start=e+1,r.parent=u,r.previous=o,u.rules.push(r)}else n[e]===an&&(r.end=e+1,r=r.parent||t);return t}(n=function t(n){return n.replace(sn.O,\"\").replace(sn.port,\"\")}(n)),n)}(n),e=l(n);return{S:n,C:e,g:p(t),W:e.length>1}}function g(n,t){var r=y(t.innerHTML);r.A=t,n.push(r)}function k(n,t,r){return function e(n,t,r){return n.replace(new RegExp(t,\"g\"),r)}(n,\"\\\\.\"+t,\".\"+r)}function M(n,t,r){var e=r.href;return fetch(e).then(function(n){return n.text()}).then(function(i){if(function u(n){return n.indexOf(\"var(\")>-1||gn.test(n)}(i)&&r.parentNode){(function o(n){return kn.lastIndex=0,kn.test(n)})(i)&&(i=function f(n,t){var r=t.replace(/[^\\/]*$/,\"\");return n.replace(kn,function(n,t){var e=r+t;return n.replace(t,e)})}(i,e));var c=n.createElement(\"style\");c.innerHTML=i,g(t,c),r.parentNode.insertBefore(c,r),r.remove()}}).catch(function(n){console.error(n)})}var $,j=this&&this.R||function(n,t,r,e){return new(r||(r=Promise))(function(i,u){function o(n){try{c(e.next(n))}catch(n){u(n)}}function f(n){try{c(e.throw(n))}catch(n){u(n)}}function c(n){n.done?i(n.value):new r(function(t){t(n.value)}).then(o,f)}c((e=e.apply(n,t||[])).next())})},E=this&&this.N||function(n,t){function r(r){return function(o){return function c(r){if(e)throw new TypeError(\"Generator is already executing.\");for(;f;)try{if(e=1,i&&(u=2&r[0]?i.return:r[0]?i.throw||((u=i.return)&&u.call(i),0):i.next)&&!(u=u.call(i,r[1])).done)return u;switch(i=0,u&&(r=[2&r[0],u.value]),r[0]){case 0:case 1:u=r;break;case 4:return f.label++,{value:r[1],done:!1};case 5:f.label++,i=r[1],r=[0];continue;case 7:r=f.T.pop(),f.L.pop();continue;default:if(!(u=(u=f.L).length>0&&u[u.length-1])&&(6===r[0]||2===r[0])){f=0;continue}if(3===r[0]&&(!u||r[1]>u[0]&&r[1]<u[3])){f.label=r[1];break}if(6===r[0]&&f.label<u[1]){f.label=u[1],u=r;break}if(u&&f.label<u[2]){f.label=u[2],f.T.push(r);break}u[2]&&f.T.pop(),f.L.pop();continue}r=t.call(n,f)}catch(n){r=[6,n],i=0}finally{e=u=0}if(5&r[0])throw r[1];return{value:r[0]?r[1]:void 0,done:!0}}([r,o])}}var e,i,u,o,f={label:0,P:function(){if(1&u[0])throw u[1];return u[1]},L:[],T:[]};return o={next:r(0),throw:r(1),return:r(2)},\"function\"==typeof Symbol&&(o[Symbol.iterator]=function(){return this}),o},O=this,S=\"$\",C={},W={enter:13,escape:27,space:32,tab:9,left:37,up:38,right:39,down:40},A=function(n){return null!=n},R=function(n){return n.toLowerCase()},N=function(){},T=function(n,t,r,e,i){void 0===e&&(e=\"boolean\"==typeof r),i=t!==(t=t.replace(/^xlink\\:?/,\"\")),null==r||e&&(!r||\"false\"===r)?i?n.removeAttributeNS(L,R(t)):n.removeAttribute(t):\"function\"!=typeof r&&(r=e?\"\":r.toString(),i?n.setAttributeNS(L,R(t),r):n.setAttribute(t,r))},L=\"http://www.w3.org/1999/xlink\",P=function(n,t,r,e,i,u,o){if(\"class\"!==r||u)if(\"style\"===r){for(var f in e)i&&null!=i[f]||(/-/.test(f)?t.style.removeProperty(f):t.style[f]=\"\");for(var f in i)e&&i[f]===e[f]||(/-/.test(f)?t.style.setProperty(f,i[f]):t.style[f]=i[f])}else if(\"o\"!==r[0]||\"n\"!==r[1]||!/[A-Z]/.test(r[2])||r in t)if(\"list\"!==r&&\"type\"!==r&&!u&&(r in t||-1!==[\"object\",\"function\"].indexOf(typeof i)&&null!==i)){var c=n.I(t);c&&c.D&&c.D[r]?(D(t,r,i),o&&c.D[r].q&&T(t,c.D[r].U,i,4===c.D[r].B)):\"ref\"!==r&&(D(t,r,null==i?\"\":i),null!=i&&!1!==i||n.F._(t,r))}else null!=i&&\"key\"!==r?T(t,r,i):(u||n.F.H(t,r)&&(null==i||!1===i))&&n.F._(t,r);else r=R(r)in t?R(r.substring(2)):R(r[2])+r.substring(3),i?i!==e&&n.F.Y(t,r,i,0):n.F.Z(t,r,0);else if(e!==i){var a=I(e),s=I(i),l=a.filter(function(n){return!s.includes(n)}),v=I(t.className).filter(function(n){return!l.includes(n)}),p=s.filter(function(n){return!a.includes(n)&&!v.includes(n)});v.push.apply(v,p),t.className=v.join(\" \")}},I=function(n){return null==n||\"\"===n?[]:n.trim().split(/\\s+/)},D=function(n,t,r){try{n[t]=r}catch(n){}},q=function(n,t,r,e,i){var u=11===r.i.nodeType&&r.i.host?r.i.host:r.i,o=t&&t.vattrs||C,f=r.vattrs||C;for(i in o)f&&null!=f[i]||null==o[i]||P(n,u,i,o[i],void 0,e,r.u);for(i in f)i in o&&f[i]===(\"value\"===i||\"checked\"===i?u[i]:o[i])||P(n,u,i,o[i],f[i],e,r.u)},U=!1,B=function(n,t){n&&(n.vattrs&&n.vattrs.ref&&n.vattrs.ref(t?null:n.i),n.vchildren&&n.vchildren.forEach(function(n){B(n,t)}))},_=function(n,t){var r=0,e=!1,i=function(){return t.performance.now()},u=!1!==n.asyncQueue,o=Promise.resolve(),f=[],c=[],a=[],s=[],l=function(t){return function(r){t.push(r),e||(e=!0,n.raf(h))}},v=function(n){for(var t=0;t<n.length;t++)try{n[t](i())}catch(n){console.error(n)}n.length=0},p=function(n,t){for(var r,e=0;e<n.length&&(r=i())<t;)try{n[e++](r)}catch(n){console.error(n)}e===n.length?n.length=0:0!==e&&n.splice(0,e)},h=function(){r++,v(c);var t=u?i()+7*Math.ceil(r*(1/22)):Infinity;p(a,t),p(s,t),a.length>0&&(s.push.apply(s,a),a.length=0),(e=c.length+a.length+s.length>0)?n.raf(h):r=0};return n.raf||(n.raf=t.requestAnimationFrame.bind(t)),{tick:function(n){f.push(n),1===f.length&&o.then(function(){return v(f)})},read:l(c),write:l(a)}},F=[],H={forEach:function(n,t){return n.forEach(t)},map:function(n,t){return n.map(t)}},Y=function(n){return{G:n[0],K:n[1],X:!!n[2],J:!!n[3],V:!!n[4]}},Z=function(n,t){return A(t)&&\"object\"!=typeof t&&\"function\"!=typeof t?n===Boolean||4===n?\"false\"!==t&&(\"\"===t||!!t):n===Number||8===n?parseFloat(t):n===String||2===n?t.toString():t:t},z=function(n,t,r){n.nn.add(t),n.tn.has(t)||(n.tn.set(t,!0),n.rn?n.queue.write(function(){return G(n,t,r)}):n.queue.tick(function(){return G(n,t,r)}))},G=function(n,t,r,i,o,f){return j(O,void 0,void 0,function(){var i,c;return E(this,function(a){switch(a.label){case 0:if(n.tn.delete(t),n.en.has(t))return[3,12];if(o=n.in.get(t))return[3,6];if((f=n.un.get(t))&&!f[\"s-rn\"])return(f[\"s-rc\"]=f[\"s-rc\"]||[]).push(function(){G(n,t,r)}),[2];if(!(o=V(n,t,n.on.get(t),r)))return[3,5];a.label=1;case 1:return a.L.push([1,4,,5]),o.componentWillLoad?[4,o.componentWillLoad()]:[3,3];case 2:a.P(),a.label=3;case 3:return[3,5];case 4:return i=a.P(),n.fn(i,3,t),[3,5];case 5:case 6:return[3,11];case 7:return a.L.push([7,10,,11]),o.componentWillUpdate?[4,o.componentWillUpdate()]:[3,9];case 8:a.P(),a.label=9;case 9:return[3,11];case 10:return c=a.P(),n.fn(c,5,t),[3,11];case 11:(function(n,t,r,i){try{var o,f=t.cn.host,c=t.cn.encapsulation,a=\"shadow\"===c&&n.F.an,s=r;if(o=function(n,t,r){return n&&Object.keys(n).forEach(function(e){n[e].reflectToAttr&&((r=r||{})[e]=t[e])}),r}(t.cn.properties,i),a&&(s=r.shadowRoot),!r[\"s-rn\"]){n.sn(n,n.F,t,r);var l=r[\"s-sc\"];l&&(n.F.ln(r,e(l,!0)),\"scoped\"===c&&n.F.ln(r,e(l)))}if(i.render||i.hostData||f||o){n.vn=!0;var v=i.render&&i.render(),p=void 0;p=i.hostData&&i.hostData(),o&&(p=p?Object.assign(p,o):o),n.vn=!1;var h=u(null,p,v),d=n.pn.get(r)||{};d.i=s,h.u=!0,n.pn.set(r,n.render(r,d,h,a,c))}n.hn&&n.hn.updateHost(r),r[\"s-rn\"]=!0,r[\"s-rc\"]&&(r[\"s-rc\"].forEach(function(n){return n()}),r[\"s-rc\"]=null)}catch(t){n.vn=!1,n.fn(t,8,r,!0)}})(n,n.I(t),t,o),t[\"s-init\"](),a.label=12;case 12:return[2]}})})},K=function(n,t,r,e,i,u,o){(o=n.dn.get(t))||n.dn.set(t,o={});var f=o[r];if(e!==f&&(o[r]=e,u=n.in.get(t))){var c=o[J+r];if(c)for(var a=0;a<c.length;a++)try{u[c[a]].call(u,e,f,r)}catch(n){console.error(n)}!n.vn&&t[\"s-rn\"]&&z(n,t,i)}},Q=function(n,t,r){Object.defineProperty(n,t,{configurable:!0,value:r})},X=function(n,t,r,e){Object.defineProperty(n,t,{configurable:!0,get:r,set:e})},J=\"wc-\",V=function(n,t,r,e,i,u,o,f){try{i=new(u=n.I(t).cn),function(n,t,r,e,i,u){n.mn.set(e,r),n.dn.has(r)||n.dn.set(r,{}),Object.entries(Object.assign({color:{type:String}},t.properties,{mode:{type:String}})).forEach(function(t){var o=t[0],f=t[1];(function(n,t,r,e,i,u,o,f,c){if(t.type||t.state){var a=n.dn.get(r);t.state||(!t.attr||void 0!==a[i]&&\"\"!==a[i]||(f=u&&u.bn)&&A(c=f[t.attr])&&(a[i]=Z(t.type,c)),r.hasOwnProperty(i)&&(void 0===a[i]&&(a[i]=Z(t.type,r[i])),\"mode\"!==i&&delete r[i])),e.hasOwnProperty(i)&&void 0===a[i]&&(a[i]=e[i]),t.watchCallbacks&&(a[J+i]=t.watchCallbacks.slice()),X(e,i,function s(t){return(t=n.dn.get(n.mn.get(this)))&&t[i]},function l(r,e){(e=n.mn.get(this))&&(t.state||t.mutable)&&K(n,e,i,r,o)})}else if(t.elementRef)Q(e,i,r);else if(t.method)Q(r,i,e[i].bind(e));else if(t.context){var v=n.yn(t.context);void 0!==v&&Q(e,i,v.getContext&&v.getContext(r)||v)}})(n,f,r,e,o,i,u)})}(n,u,t,i,r,e),function c(n,t,r){if(t){var e=n.mn.get(r);t.forEach(function(t){r[t.method]={emit:function(r){return n.wn(e,t.name,{bubbles:t.bubbles,composed:t.composed,cancelable:t.cancelable,detail:r})}}})}}(n,u.events,i);try{if(o=n.gn.get(t)){for(f=0;f<o.length;f+=2)i[o[f]](o[f+1]);n.gn.delete(t)}}catch(r){n.fn(r,2,t)}}catch(r){i={},n.fn(r,7,t,!0)}return n.in.set(t,i),i},nn=function(n,t){for(var r=0;r<t.childNodes.length;r++){var e=t.childNodes[r];if(1===e.nodeType){if(n.I(e)&&!n.kn.has(e))return!1;if(!nn(n,e))return!1}}return!0},tn=function(n,t,r,e,i,u){if(n.nn.delete(t),(i=n.un.get(t))&&((e=i[\"s-ld\"])&&((r=e.indexOf(t))>-1&&e.splice(r,1),e.length||i[\"s-init\"]&&i[\"s-init\"]()),n.un.delete(t)),n.Mn.length&&!n.nn.size)for(;u=n.Mn.shift();)u()},rn=function(n,t,r,e,i){if(r.connectedCallback=function(){(function(n,t,r){n.$n.has(r)||(n.$n.set(r,!0),function e(n,t){var r=n.I(t);r.jn&&r.jn.forEach(function(r){r.X||n.F.Y(t,r.G,function e(n,t,r,i){return function(e){(i=n.in.get(t))?i[r](e):((i=n.gn.get(t)||[]).push(r,e),n.gn.set(t,i))}}(n,t,r.K),1,r.V,r.J)})}(n,r)),n.en.delete(r),n.kn.has(r)||(n.En=!0,n.nn.add(r),n.kn.set(r,!0),function(n,t,r){for(r=t;r=n.F.On(r);)if(n.Sn(r)){n.xn.has(t)||(n.un.set(t,r),(r[\"s-ld\"]=r[\"s-ld\"]||[]).push(t));break}}(n,r),n.queue.tick(function(){n.on.set(r,function(n,t,r,e,i){if(r.mode||(r.mode=n.Cn(r)),r[\"s-cr\"]||n.Wn(r,\"ssrv\")||n.an&&1===t.An||(r[\"s-cr\"]=n.Rn(\"\"),r[\"s-cr\"][\"s-cn\"]=!0,n.Nn(r,r[\"s-cr\"],n.Tn(r)[0])),!n.an&&1===t.An)try{!window.HTMLElement||\"shadowRoot\"in window.HTMLElement.prototype||(r.shadowRoot=r)}catch(n){}return 1===t.An&&n.an&&!r.shadowRoot&&n.Ln(r,{mode:\"open\"}),e={bn:{}},t.D&&Object.keys(t.D).forEach(function(u){(i=t.D[u].U)&&(e.bn[i]=n.Wn(r,i))}),e}(n.F,t,r)),n.Pn(t,r)}))})(n,t,this)},r.disconnectedCallback=function(){(function(n,t){if(!n.In&&function(n,t){for(;t;){if(!n.Dn(t))return 9!==n.qn(t);t=n.Dn(t)}}(n.F,t)){n.en.set(t,!0),tn(n,t),B(n.pn.get(t),!0);var r=n.in.get(t);r&&r.componentDidUnload&&r.componentDidUnload(),n.F.Z(t),n.$n.delete(t),n.hn&&n.hn.removeHost(t),[n.un,n.Un,n.on].forEach(function(n){return n.delete(t)})}})(n,this)},r[\"s-init\"]=function(){(function(n,t,r,e,i,u,o){if(nn(n,t)&&(i=n.in.get(t))&&!n.en.has(t)&&(!t[\"s-ld\"]||!t[\"s-ld\"].length)){n.xn.set(t,!0),(o=n.Bn.has(t))||(n.Bn.set(t,!0),t[\"s-ld\"]=void 0,n.F.ln(t,r));try{B(n.pn.get(t)),(u=n.Un.get(t))&&(u.forEach(function(n){return n(t)}),n.Un.delete(t)),!o&&i.componentDidLoad&&i.componentDidLoad()}catch(r){n.fn(r,4,t)}tn(n,t)}})(n,this,e)},r.forceUpdate=function(){z(n,this,i)},t.D){var u=Object.entries(t.D),o={};u.forEach(function(n){var t=n[0],r=n[1].U;r&&(o[r]=t)}),o=Object.assign({},o),r.attributeChangedCallback=function(n,t,r){(function e(n,t,r,i){var u=n[R(r)];u&&(t[u]=(null!==i||\"boolean\"!=typeof t[u])&&i)})(o,this,n,r)},function(n,t,r,e){u.forEach(function(t){var i=t[0],u=t[1],o=u._n;3&o?X(r,i,function t(){return(n.dn.get(this)||{})[i]},function t(r){K(n,this,i,Z(u.B,r),e)}):32===o&&Q(r,i,N)})}(n,0,r,i)}},en=function(n,t,r,e){return function(){var i=arguments;return un(n,t,r).then(function(n){return n[e].apply(n,i)})}},un=function(n,t,r,e,i){return e=t[r],(i=n.Fn.body)?(e||(e=i.querySelector(r)),e||(e=t[r]=n.Hn(r),n.Yn(i,e)),e.componentOnReady()):Promise.resolve()},on=function on(){this.start=0,this.end=0,this.previous=null,this.parent=null,this.rules=null,this.parsedCssText=\"\",this.cssText=\"\",this.atRule=!1,this.type=0,this.keyframesName=\"\",this.selector=\"\",this.parsedSelector=\"\"},fn={STYLE_RULE:1,KEYFRAMES_RULE:7,MEDIA_RULE:4,j:1e3},cn=\"{\",an=\"}\",sn={O:/\\/\\*[^*]*\\*+([^\\/*][^*]*\\*+)*\\//gim,port:/@import[^;]*;/gim,Zn:/(?:^[^;\\-\\s}]+)?--[^;{}]*?:[^{};]*?(?:[;\\n]|$)/gim,zn:/(?:^[^;\\-\\s}]+)?--[^;{}]*?:[^{};]*?{[^}]*?}(?:[;\\n]|$)?/gim,Gn:/@apply\\s*\\(?[^);]*\\)?\\s*(?:[;\\n]|$)?/gim,Kn:/[^;:]*?:[^;]*?var\\([^;]*\\)(?:[;\\n]|$)?/gim,M:/^@[^\\s]*keyframes/,k:/\\s+/g},ln=\"--\",vn=\"@media\",pn=\"@\",hn=/\\bvar\\(/,dn=/\\B--[\\w-]+\\s*:/,mn=/\\/\\*[^*]*\\*+([^\\/*][^*]*\\*+)*\\//gim,bn=/^[\\t ]+\\n/gm,yn=\"!important\",wn=/(?:^|[;\\s{]\\s*)(--[\\w-]*?)\\s*:\\s*(?:((?:'(?:\\\\'|.)*?'|\"(?:\\\\\"|.)*?\"|\\([^)]*?\\)|[^};{])+)|\\{([^}]*)\\}(?:(?=[;\\s}])|$))/gm,gn=/[\\s;{]--[-a-zA-Z0-9]+\\s*:/m,kn=/url[\\s]*\\([\\s]*['\"]?(?![http|\\/])([^\\'\\\"\\)]*)[\\s]*['\"]?\\)[\\s]*/gim,Mn=function(){function n(n,t){this.Qn=n,this.Xn=t,this.count=0,this.Jn=new WeakMap,this.Vn=new WeakMap,this.nt=[],this.tt=new Map}return n.prototype.initShim=function(){var n=this;return new Promise(function(t){n.Qn.requestAnimationFrame(function(){(function r(n,t){return function r(n,t){for(var r=[],e=n.querySelectorAll('link[rel=\"stylesheet\"][href]'),i=0;i<e.length;i++)r.push(M(n,t,e[i]));return Promise.all(r)}(n,t).then(function(){(function r(n,t){for(var r=n.querySelectorAll(\"style\"),e=0;e<r.length;e++)g(t,r[e])})(n,t)})})(n.Xn,n.nt).then(function(){return t()})})})},n.prototype.rt=function(n){var t=this;return M(this.Xn,this.nt,n).then(function(){t.updateGlobal()})},n.prototype.et=function(n){g(this.nt,n),this.updateGlobal()},n.prototype.createHostStyle=function(n,t,r){if(this.Vn.has(n))return null;var e=n[\"s-sc\"],i=this.it(r,t,e),u=i.W&&i.ut;if(!u&&i.A)return null;var o=this.Xn.createElement(\"style\");if(u){var f=i.ut+\"-\"+this.count;n[\"s-sc\"]=f,this.Jn.set(n,o),this.Vn.set(n,function c(n,t){var r=n.C.map(function(r){return\"string\"==typeof r?k(r,n.ut,t):r}),e=n.g.map(function(r){return Object.assign({},r,{selector:k(r.selector,n.ut,t)})});return Object.assign({},n,{C:r,g:e,ut:t})}(i,f)),this.count++}else i.A=o,i.W||(o.innerHTML=a(i.C,{})),this.nt.push(i),this.updateGlobal(),this.Vn.set(n,i);return o},n.prototype.removeHost=function(n){var t=this.Jn.get(n);t&&t.remove(),this.Jn.delete(n),this.Vn.delete(n)},n.prototype.updateHost=function(n){var t=this.Vn.get(n);if(t&&t.W&&t.ut){var r=this.Jn.get(n);if(r){var e=v(function i(n,t,r){return function i(n){return n.sort(function(n,t){return n.p===t.p?n.m-t.m:n.p-t.p}),n}(b(r.concat(function e(n,t){for(var r=[];t;){var e=n.get(t);e&&r.push(e),t=t.parentElement}return r}(t,n))).filter(function(t){return function r(n,t){return n.matches(t)}(n,t.selector)}))}(n,this.Vn,this.nt));r.innerHTML=a(t.C,e)}}},n.prototype.updateGlobal=function(){(function n(t){var r=v(b(t));t.forEach(function(n){n.W&&(n.A.innerHTML=a(n.C,r))})})(this.nt)},n.prototype.it=function(n,t,r){var e=this.tt.get(t);return e||((e=y(n)).ut=r,this.tt.set(t,e)),e},n}();!function $n(n){return!!(n.CSS&&n.CSS.supports&&n.CSS.supports(\"color\",\"var(--c)\"))}(window)&&($=new Mn(w,d)),function jn(n,r,e,o,f,c,a,s){function l(n,t){if(!e.customElements.get(n.t)){C[n.t]=!0,rn(T,k[n.t]=n,t.prototype,c,g);var r=[];for(var i in n.D)n.D[i].U&&r.push(n.D[i].U);t.observedAttributes=r,e.customElements.define(n.t,t)}}function v(n){return null==n?null:$.get(n.replace(/^\\.\\//,\"\"))}function p(n){return\"exports\"===n||\"require\"===n||!!v(n)}function h(n,t,r){var e={};try{r.apply(null,t.map(function(n){return\"exports\"===n?e:\"require\"===n?d:v(n)}))}catch(n){console.error(n)}void 0!==n&&($.set(n,e),n&&!n.endsWith(\".js\")&&Object.keys(e).forEach(function(n){for(var t=n.replace(/-/g,\"\").toLowerCase(),r=Object.keys(k),u=0;u<r.length;u++)if(r[u].replace(/-/g,\"\").toLowerCase()===t){var o=k[r[u]];o&&(o.cn=e[n],i(0,o,o.An,o.cn.style,o.cn.styleMode));break}}))}function d(n,t){b(void 0,n,t)}function m(){for(var n=M.length-1;n>=0;n--){var t=M[n],r=t[0],e=t[1],i=t[2];e.every(p)&&!p(r)&&(M.splice(n,1),h(r,e,i))}}function b(n,t,r){if(Array.isArray(t)){var e=t.filter(function(n){return!p(n)});e.forEach(function(n){w(f+n.replace(\".js\",\".es5.js\"))}),M.push([n,t,r]),0===e.length&&m()}else\"function\"==typeof t&&m()}function y(n){var t=!x.an;w(f+n+(t?\".sc\":\"\")+\".es5.entry.js\")}function w(n){function t(){clearTimeout(r),e.onerror=e.onload=null,x.ot(e),j.delete(n)}var r,e;j.has(n)||(j.add(n),(e=x.Hn(\"script\")).charset=\"utf-8\",e.async=!0,e.src=n,r=setTimeout(t,12e4),e.onerror=e.onload=t,x.Yn(x.Fn.head,e))}var g=e.performance,k={html:{}},M=[],$=new Map,j=new Set,E={},O=e[n]=e[n]||{},x=function(n,t,r){var e=new WeakMap,i={Fn:r,an:!!r.documentElement.attachShadow,ft:!1,qn:function(n){return n.nodeType},Hn:function(n){return r.createElement(n)},ct:function(n,t){return r.createElementNS(n,t)},Rn:function(n){return r.createTextNode(n)},at:function(n){return r.createComment(n)},Nn:function(n,t,r){return n.insertBefore(t,r)},ot:function(n){return n.remove()},Yn:function(n,t){return n.appendChild(t)},ln:function(n,t){if(n.classList)n.classList.add(t);else if(\"svg\"===n.nodeName.toLowerCase()){var r=n.getAttribute(\"class\")||\"\";r.split(\" \").includes(t)||(r+=\" \"+t),n.setAttribute(\"class\",r.trim())}},Tn:function(n){return n.childNodes},Dn:function(n){return n.parentNode},st:function(n){return n.nextSibling},lt:function(n){return n.previousSibling},vt:function(n){return R(n.nodeName)},pt:function(n){return n.textContent},ht:function(n,t){return n.textContent=t},Wn:function(n,t){return n.getAttribute(t)},dt:function(n,t,r){return n.setAttribute(t,r)},_:function(n,t){return n.removeAttribute(t)},H:function(n,t){return n.hasAttribute(t)},Cn:function(t){return t.getAttribute(\"mode\")||(n.Context||{}).mode},bt:function(n,e){return\"child\"===e?n.firstElementChild:\"parent\"===e?i.On(n):\"body\"===e?r.body:\"document\"===e?r:\"window\"===e?t:n},Y:function(t,r,u,o,f,c,a,s,l,v){var p=t,h=u,d=e.get(t);v=r+o,d&&d[v]&&d[v](),\"string\"==typeof a?p=i.bt(t,a):\"object\"==typeof a?p=a:(l=r.split(\":\")).length>1&&(p=i.bt(t,l[0]),r=l[1]),p&&((l=r.split(\".\")).length>1&&(r=l[0],h=function(n){n.keyCode===W[l[1]]&&u(n)}),s=i.ft?{capture:!!f,passive:!!c}:!!f,n.ael(p,r,h,s),d||e.set(t,d={}),d[v]=function(){p&&n.rel(p,r,h,s),d[v]=null})},Z:function(n,t,r,i){(i=e.get(n))&&(t?i[t+r]&&i[t+r]():Object.keys(i).forEach(function(n){i[n]&&i[n]()}))},yt:function(n,r,e,i){return i=new t.CustomEvent(r,e),n&&n.dispatchEvent(i),i},On:function(n,t){return(t=i.Dn(n))&&11===i.qn(t)?t.host:t},wt:function(n,t,r,e){return n.setAttributeNS(t,r,e)},Ln:function(n,t){return n.attachShadow(t)}};\"function\"!=typeof t.CustomEvent&&(t.CustomEvent=function(n,t,e){return t=t||{},(e=r.createEvent(\"CustomEvent\")).initCustomEvent(n,t.bubbles,t.cancelable,t.detail),e},t.CustomEvent.prototype=t.Event.prototype),n.ael||(n.ael=function(n,t,r,e){return n.addEventListener(t,r,e)},n.rel=function(n,t,r,e){return n.removeEventListener(t,r,e)});try{t.addEventListener(\"e\",null,Object.defineProperty({},\"passive\",{get:function(){return i.ft=!0}}))}catch(n){}return i}(O,e,o);r.isServer=r.isPrerender=!(r.isClient=!0),r.window=e,r.location=e.location,r.document=o,r.resourcesUrl=r.publicPath=f,r.enableListener=function(n,t,r,e,i){return function u(n,t,r,e,i,o){if(t){var f=n.mn.get(t),c=n.I(f);if(c&&c.jn)if(e){var a=c.jn.find(function(n){return n.G===r});a&&n.F.Y(f,r,function(n){return t[a.K](n)},1,a.V,void 0===o?a.J:!!o,i)}else n.F.Z(f,r,1)}}(T,n,t,r,e,i)},r.emit=function(n,t,e){return x.yt(n,r.eventNameFn?r.eventNameFn(t):t,e)},O.h=u,O.Context=r;var C=e[\"s-defined\"]=e[\"s-defined\"]||{},N=0,T={F:x,gt:l,wn:r.emit,hn:s,I:function(n){return k[x.vt(n)]},yn:function(n){return r[n]},isClient:!0,Sn:function(n){return!(!C[x.vt(n)]&&!T.I(n))},fn:function(n,t,r){return console.error(n,t,r&&r.tagName)},kt:function(){return n+N++},Mt:function(n){return function(n,t,r){return{create:en(n,t,r,\"create\"),componentOnReady:en(n,t,r,\"componentOnReady\")}}(x,E,n)},queue:r.queue=_(O,e),Pn:function L(n,t){var r=\"string\"==typeof n.$t?n.$t:n.$t[t.mode];v(r)?z(T,t,g):(M.push([void 0,[r],function(){z(T,t,g)}]),s&&I?I.push(function(){return y(r)}):y(r))},rn:!1,vn:!1,In:!1,un:new WeakMap,jt:new WeakMap,kn:new WeakMap,$n:new WeakMap,Bn:new WeakMap,xn:new WeakMap,mn:new WeakMap,on:new WeakMap,in:new WeakMap,en:new WeakMap,tn:new WeakMap,Un:new WeakMap,gn:new WeakMap,pn:new WeakMap,dn:new WeakMap,nn:new Set,Mn:[]};O.onReady=function(){return new Promise(function(n){return T.queue.write(function(){return T.nn.size?T.Mn.push(n):n()})})},T.render=function(n,t){var r,e,i,u,o,f,c,a=function(i,l,v,p,h,d,m,b,y){if(b=l.vchildren[v],r||(u=!0,\"slot\"===b.vtag&&(e&&t.ln(p,e+\"-s\"),b.vchildren?b.Et=!0:b.Ot=!0)),A(b.vtext))b.i=t.Rn(b.vtext);else if(b.Ot)b.i=t.Rn(\"\");else{if(d=b.i=U||\"svg\"===b.vtag?t.ct(\"http://www.w3.org/2000/svg\",b.vtag):t.Hn(b.Et?\"slot-fb\":b.vtag),n.Sn(d)&&n.xn.delete(c),U=\"svg\"===b.vtag||\"foreignObject\"!==b.vtag&&U,q(n,null,b,U),A(e)&&d[\"s-si\"]!==e&&t.ln(d,d[\"s-si\"]=e),b.vchildren)for(h=0;h<b.vchildren.length;++h)(m=a(i,b,h,d))&&t.Yn(d,m);\"svg\"===b.vtag&&(U=!1)}return b.i[\"s-hn\"]=f,(b.Et||b.Ot)&&(b.i[\"s-sr\"]=!0,b.i[\"s-cr\"]=o,b.i[\"s-sn\"]=b.vname||\"\",(y=i&&i.vchildren&&i.vchildren[v])&&y.vtag===b.vtag&&i.i&&s(i.i)),b.i},s=function(r,e,i,o){n.In=!0;var c=t.Tn(r);for(i=c.length-1;i>=0;i--)(o=c[i])[\"s-hn\"]!==f&&o[\"s-ol\"]&&(t.ot(o),t.Nn(d(o),o,h(o)),t.ot(o[\"s-ol\"]),o[\"s-ol\"]=null,u=!0),e&&s(o,e);n.In=!1},l=function(n,r,e,i,u,o,c,s){var l=n[\"s-cr\"];for((c=l&&t.Dn(l)||n).shadowRoot&&t.vt(c)===f&&(c=c.shadowRoot);u<=o;++u)i[u]&&(s=A(i[u].vtext)?t.Rn(i[u].vtext):a(null,e,u,n))&&(i[u].i=s,t.Nn(c,s,h(r)))},v=function(n,r,e,u){for(;r<=e;++r)A(n[r])&&(u=n[r].i,i=!0,u[\"s-ol\"]?t.ot(u[\"s-ol\"]):s(u,!0),t.ot(u))},p=function(n,t){return n.vtag===t.vtag&&n.vkey===t.vkey&&(\"slot\"!==n.vtag||n.vname===t.vname)},h=function(n){return n&&n[\"s-ol\"]?n[\"s-ol\"]:n},d=function(n){return t.Dn(n[\"s-ol\"]?n[\"s-ol\"]:n)},m=function(r,e,i){var u=e.i=r.i,o=r.vchildren,f=e.vchildren;U=e.i&&A(t.On(e.i))&&void 0!==e.i.ownerSVGElement,U=\"svg\"===e.vtag||\"foreignObject\"!==e.vtag&&U,A(e.vtext)?(i=u[\"s-cr\"])?t.ht(t.Dn(i),e.vtext):r.vtext!==e.vtext&&t.ht(u,e.vtext):(\"slot\"!==e.vtag&&q(n,r,e,U),A(o)&&A(f)?function(n,r,e,i,u,o,f,c){for(var b=0,y=0,w=r.length-1,g=r[0],k=r[w],M=i.length-1,$=i[0],j=i[M];b<=w&&y<=M;)if(null==g)g=r[++b];else if(null==k)k=r[--w];else if(null==$)$=i[++y];else if(null==j)j=i[--M];else if(p(g,$))m(g,$),g=r[++b],$=i[++y];else if(p(k,j))m(k,j),k=r[--w],j=i[--M];else if(p(g,j))\"slot\"!==g.vtag&&\"slot\"!==j.vtag||s(t.Dn(g.i)),m(g,j),t.Nn(n,g.i,t.st(k.i)),g=r[++b],j=i[--M];else if(p(k,$))\"slot\"!==g.vtag&&\"slot\"!==j.vtag||s(t.Dn(k.i)),m(k,$),t.Nn(n,k.i,g.i),k=r[--w],$=i[++y];else{for(u=null,o=b;o<=w;++o)if(r[o]&&A(r[o].vkey)&&r[o].vkey===$.vkey){u=o;break}A(u)?((c=r[u]).vtag!==$.vtag?f=a(r&&r[y],e,u,n):(m(c,$),r[u]=void 0,f=c.i),$=i[++y]):(f=a(r&&r[y],e,y,n),$=i[++y]),f&&t.Nn(d(g.i),f,h(g.i))}b>w?l(n,null==i[M+1]?null:i[M+1].i,e,i,y,M):y>M&&v(r,b,w)}(u,o,e,f):A(f)?(A(r.vtext)&&t.ht(u,\"\"),l(u,null,e,f,0,f.length-1)):A(o)&&v(o,0,o.length-1)),U&&\"svg\"===e.vtag&&(U=!1)},b=function(n,r,e,i,u,o,f,c){for(i=0,u=(e=t.Tn(n)).length;i<u;i++)if(r=e[i],1===t.qn(r)){if(r[\"s-sr\"])for(f=r[\"s-sn\"],r.hidden=!1,o=0;o<u;o++)if(e[o][\"s-hn\"]!==r[\"s-hn\"])if(c=t.qn(e[o]),\"\"!==f){if(1===c&&f===t.Wn(e[o],\"slot\")){r.hidden=!0;break}}else if(1===c||3===c&&\"\"!==t.pt(e[o]).trim()){r.hidden=!0;break}b(r)}},y=[],w=function(n,r,e,u,o,f,c,a,s,l){for(o=0,f=(r=t.Tn(n)).length;o<f;o++){if((e=r[o])[\"s-sr\"]&&(u=e[\"s-cr\"]))for(a=t.Tn(t.Dn(u)),s=e[\"s-sn\"],c=a.length-1;c>=0;c--)(u=a[c])[\"s-cn\"]||u[\"s-nr\"]||u[\"s-hn\"]===e[\"s-hn\"]||((3===(l=t.qn(u))||8===l)&&\"\"===s||1===l&&null===t.Wn(u,\"slot\")&&\"\"===s||1===l&&t.Wn(u,\"slot\")===s)&&(y.some(function(n){return n.St===u})||(i=!0,u[\"s-sn\"]=s,y.push({xt:e,St:u})));1===t.qn(e)&&w(e)}};return function(a,s,l,v,p,h,d,g,k,M,$,j){if(c=a,f=t.vt(c),o=c[\"s-cr\"],r=v,e=c[\"s-sc\"],u=i=!1,m(s,l),u){for(w(l.i),d=0;d<y.length;d++)(g=y[d]).St[\"s-ol\"]||((k=t.Rn(\"\"))[\"s-nr\"]=g.St,t.Nn(t.Dn(g.St),g.St[\"s-ol\"]=k,g.St));for(n.In=!0,d=0;d<y.length;d++){for(g=y[d],$=t.Dn(g.xt),j=t.st(g.xt),k=g.St[\"s-ol\"];k=t.lt(k);)if((M=k[\"s-nr\"])&&M&&M[\"s-sn\"]===g.St[\"s-sn\"]&&$===t.Dn(M)&&(M=t.st(M))&&M&&!M[\"s-nr\"]){j=M;break}(!j&&$!==t.Dn(g.St)||t.st(g.St)!==j)&&g.St!==j&&(t.ot(g.St),t.Nn($,g.St,j))}n.In=!1}return i&&b(l.i),y.length=0,l}}(T,x);var P=x.Fn.documentElement;P[\"s-ld\"]=[],P[\"s-rn\"]=!0,P[\"s-init\"]=function(){T.xn.set(P,O.loaded=T.rn=!0),x.yt(e,\"appload\",{detail:{namespace:n}})},O.loadBundle=b;var I=[];s&&s.initShim().then(function(){for(;I.length;)I.shift()();I=null}),T.sn=function(n,r,e,i){(function(n,r,e,i){var u=e.t+S,o=e[u];if((2===e.An||1===e.An&&!n.F.an)&&(i[\"s-sc\"]=o?t(e,i.mode):t(e)),o){var f=r.Fn.head;if(r.an)if(1===e.An)f=i.shadowRoot;else{var c=i.getRootNode();c.host&&(f=c)}var a=n.jt.get(f);if(a||n.jt.set(f,a={}),!a[u]){var s=void 0;if(n.hn?s=n.hn.createHostStyle(i,u,o):((s=r.Hn(\"style\")).innerHTML=o,a[u]=!0),s){var l=f.querySelectorAll(\"[data-styles]\");r.Nn(f,s,l.length&&l[l.length-1].nextSibling||f.firstChild)}}}})(n,r,e,i)},a.map(function(n){var t=function(n,t,r){var e=n[0],i=n[1],u=n[3],o=n[4],f=n[5],c={color:{U:\"color\"}};if(u)for(t=0;t<u.length;t++)c[(r=u[t])[0]]={_n:r[1],q:!!r[2],U:\"string\"==typeof r[3]?r[3]:r[3]?r[0]:0,B:r[4]};return{t:e,$t:i,D:Object.assign({},c),An:o,jn:f?f.map(Y):void 0}}(n);return k[t.t]=t}).forEach(function(n){function t(n){return HTMLElement.call(this,n)}t.prototype=Object.create(HTMLElement.prototype,{constructor:{value:t,configurable:!0}}),l(n,t)}),T.En||P[\"s-init\"](),function(n,t,r,e,i,u){if(t.componentOnReady=function(t,r){if(!t.nodeName.includes(\"-\"))return r(null),!1;var e=n.I(t);if(e)if(n.xn.has(t))r(t);else{var i=n.Un.get(t)||[];i.push(r),n.Un.set(t,i)}return!!e},i){for(u=i.length-1;u>=0;u--)t.componentOnReady(i[u][0],i[u][1])&&i.splice(u,1);for(u=0;u<e.length;u++)if(!r[e[u]].componentOnReady)return;for(u=0;u<i.length;u++)i[u][1](null);i.length=0}}(T,O,e,e[\"s-apps\"],e[\"s-cr\"]),O.initialized=!0}(n,x,w,d,r,h,c,$);\n})(window,document,{},\"IonicSiteComponents\",\"hydrated\",[[\"icon-external\",\"uyiaiqzf\",1],[\"ion-icon\",\"bubpozqb\",1,[[\"ariaLabel\",2,1,\"aria-label\",2],[\"color\",1,0,1,2],[\"doc\",4,0,0,0,\"document\"],[\"el\",64],[\"flipRtl\",1,0,\"flip-rtl\",4],[\"icon\",1,0,1,2],[\"ios\",1,0,1,2],[\"isServer\",4,0,0,0,\"isServer\"],[\"isVisible\",16],[\"lazy\",1,0,1,4],[\"md\",1,0,1,2],[\"mode\",1,0,1,2],[\"name\",1,0,1,2],[\"resourcesUrl\",4,0,0,0,\"resourcesUrl\"],[\"size\",1,0,1,2],[\"src\",1,0,1,2],[\"svgContent\",16],[\"win\",4,0,0,0,\"window\"]],1],[\"ionic-appflow-activator\",\"hclgi8iu\",1,[[\"$circles\",16],[\"$lis\",16],[\"active\",16],[\"el\",64],[\"screenshots\",16]]],[\"ionic-bar-chart\",\"lo9utgpp\",1,[[\"color\",1,0,1,2],[\"data\",1,0,1,2]]],[\"ionic-button\",\"z7r5cewq\",1,[[\"color\",1,0,1,2],[\"disabled\",1,0,1,4],[\"type\",1,0,1,2]]],[\"ionic-newsletter-signup\",\"z7r5cewq\",1,[[\"arrowMode\",1,0,\"arrow-mode\",4],[\"buttonText\",1,0,\"button-text\",2],[\"darkMode\",1,0,\"dark-mode\",4],[\"email\",16],[\"hasSubmitted\",16],[\"homepageMode\",1,0,\"homepage-mode\",4],[\"isLoading\",16],[\"kind\",1,0,1,2],[\"lg\",1,0,1,4],[\"placeholder\",1,0,1,2]]],[\"ionic-quick-signup\",\"raorzqti\",1,[[\"buttonColor\",1,0,\"button-color\",2],[\"showPricingNotice\",1,0,\"show-pricing-notice\",4],[\"transparentInput\",1,0,\"transparent-input\",4]]],[\"ionic-search\",\"ehteibio\",1,[[\"active\",16],[\"dragStyles\",16],[\"el\",64],[\"mobile\",1,0,1,4],[\"pending\",16],[\"query\",16],[\"results\",16]]],[\"ionic-slider\",\"uy47nvwg\",1,[[\"current\",16],[\"status\",16],[\"ticker\",16]]],[\"ionic-snap-bar\",\"cetridhp\",1,[[\"active\",16]]],[\"ionic-toggle\",\"cz7vrrja\",1,[[\"el\",64]],1,[[\"toggleSelected\",\"selectionChanged\"]]],[\"ionic-toggle-button\",\"m0trkizf\",1,[[\"deselect\",32],[\"select\",32],[\"selected\",16],[\"tab\",1,0,1,2],[\"title\",1,0,1,2]],1],[\"ionic-toggle-tab\",\"nrj8jyt7\",0,[[\"hidden\",16],[\"hide\",32],[\"show\",32],[\"tab\",1,0,1,2]],1]]);"
  },
  {
    "path": "content/js/stencil/ionic-site-components/lo9utgpp.entry.js",
    "content": "const t=window.IonicSiteComponents.h;class a{constructor(){}componentWillLoad(){}componentDidLoad(){}hexToRgb(t){t=t.replace(/^#?([a-f\\d])([a-f\\d])([a-f\\d])$/i,function(t,a,e,r){return a+a+e+e+r+r});var a=/^\\s?#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i.exec(t);return a?`${parseInt(a[1],16)}, ${parseInt(a[2],16)}, `+`${parseInt(a[3],16)}`:null}prepareData(){let t=0;const a=this.color?this.color.split(\",\"):[\"#92E1A7\",\"#51A7FF\"],e=JSON.parse(this.data.replace(/'/g,'\"'));return Object.keys(e).map(a=>(t<e[a]&&(t=e[a]),{name:a,value:parseInt(e[a],10)})).map((e,r)=>Object.assign({},e,{styles:{bar:{width:`${Math.round(e.value/t*100)}%`,background:r>1?`rgba(91,112,139) linear-gradient(to right, ${a.map(t=>`rgba(${this.hexToRgb(t)}, .2)`).join(\", \")})`:`linear-gradient(to right, ${a.join(\", \")})`},text:{color:r>1?\"#5B708B\":a[a.length-1]}}}))}render(){return[t(\"figure\",null,this.prepareData().map(a=>[t(\"div\",{class:\"bar-container\"},t(\"div\",{class:\"bar\",style:a.styles.bar},t(\"span\",{style:a.styles.text},a.value,\"%\"))),t(\"strong\",null,a.name)]))]}static get is(){return\"ionic-bar-chart\"}static get properties(){return{color:{type:String,attr:\"color\"},data:{type:String,attr:\"data\"}}}static get style(){return\"ionic-bar-chart{font-style:normal;font-weight:400;line-height:normal;font-size:16px;display:block;letter-spacing:-.04em}ionic-bar-chart .bar-container{width:100%;padding-right:50px;max-width:697px}ionic-bar-chart .bar{height:12px;position:relative;border-radius:2px}ionic-bar-chart .bar span{position:absolute;right:-40px;font-weight:500;top:-3px}ionic-bar-chart strong{margin-top:10px;display:block;font-weight:400;margin-bottom:34px}\"}}export{a as IonicBarChart};"
  },
  {
    "path": "content/js/stencil/ionic-site-components/lo9utgpp.es5.entry.js",
    "content": "IonicSiteComponents.loadBundle(\"lo9utgpp\",[\"exports\"],function(e){var t=window.IonicSiteComponents.h,n=function(){function e(){}return e.prototype.componentWillLoad=function(){},e.prototype.componentDidLoad=function(){},e.prototype.hexToRgb=function(e){e=e.replace(/^#?([a-f\\d])([a-f\\d])([a-f\\d])$/i,function(e,t,n,r){return t+t+n+n+r+r});var t=/^\\s?#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i.exec(e);return t?parseInt(t[1],16)+\", \"+parseInt(t[2],16)+\", \"+parseInt(t[3],16):null},e.prototype.prepareData=function(){var e=this,t=0,n=this.color?this.color.split(\",\"):[\"#92E1A7\",\"#51A7FF\"],r=JSON.parse(this.data.replace(/'/g,'\"'));return Object.keys(r).map(function(e){return t<r[e]&&(t=r[e]),{name:e,value:parseInt(r[e],10)}}).map(function(r,o){return Object.assign({},r,{styles:{bar:{width:Math.round(r.value/t*100)+\"%\",background:o>1?\"rgba(91,112,139) linear-gradient(to right, \"+n.map(function(t){return\"rgba(\"+e.hexToRgb(t)+\", .2)\"}).join(\", \")+\")\":\"linear-gradient(to right, \"+n.join(\", \")+\")\"},text:{color:o>1?\"#5B708B\":n[n.length-1]}}})})},e.prototype.render=function(){return[t(\"figure\",null,this.prepareData().map(function(e){return[t(\"div\",{class:\"bar-container\"},t(\"div\",{class:\"bar\",style:e.styles.bar},t(\"span\",{style:e.styles.text},e.value,\"%\"))),t(\"strong\",null,e.name)]}))]},Object.defineProperty(e,\"is\",{get:function(){return\"ionic-bar-chart\"},enumerable:!0,configurable:!0}),Object.defineProperty(e,\"properties\",{get:function(){return{color:{type:String,attr:\"color\"},data:{type:String,attr:\"data\"}}},enumerable:!0,configurable:!0}),Object.defineProperty(e,\"style\",{get:function(){return\"ionic-bar-chart{font-style:normal;font-weight:400;line-height:normal;font-size:16px;display:block;letter-spacing:-.04em}ionic-bar-chart .bar-container{width:100%;padding-right:50px;max-width:697px}ionic-bar-chart .bar{height:12px;position:relative;border-radius:2px}ionic-bar-chart .bar span{position:absolute;right:-40px;font-weight:500;top:-3px}ionic-bar-chart strong{margin-top:10px;display:block;font-weight:400;margin-bottom:34px}\"},enumerable:!0,configurable:!0}),e}();e.IonicBarChart=n,Object.defineProperty(e,\"__esModule\",{value:!0})});"
  },
  {
    "path": "content/js/stencil/ionic-site-components/lo9utgpp.sc.entry.js",
    "content": "const t=window.IonicSiteComponents.h;class a{constructor(){}componentWillLoad(){}componentDidLoad(){}hexToRgb(t){t=t.replace(/^#?([a-f\\d])([a-f\\d])([a-f\\d])$/i,function(t,a,e,r){return a+a+e+e+r+r});var a=/^\\s?#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i.exec(t);return a?`${parseInt(a[1],16)}, ${parseInt(a[2],16)}, `+`${parseInt(a[3],16)}`:null}prepareData(){let t=0;const a=this.color?this.color.split(\",\"):[\"#92E1A7\",\"#51A7FF\"],e=JSON.parse(this.data.replace(/'/g,'\"'));return Object.keys(e).map(a=>(t<e[a]&&(t=e[a]),{name:a,value:parseInt(e[a],10)})).map((e,r)=>Object.assign({},e,{styles:{bar:{width:`${Math.round(e.value/t*100)}%`,background:r>1?`rgba(91,112,139) linear-gradient(to right, ${a.map(t=>`rgba(${this.hexToRgb(t)}, .2)`).join(\", \")})`:`linear-gradient(to right, ${a.join(\", \")})`},text:{color:r>1?\"#5B708B\":a[a.length-1]}}}))}render(){return[t(\"figure\",null,this.prepareData().map(a=>[t(\"div\",{class:\"bar-container\"},t(\"div\",{class:\"bar\",style:a.styles.bar},t(\"span\",{style:a.styles.text},a.value,\"%\"))),t(\"strong\",null,a.name)]))]}static get is(){return\"ionic-bar-chart\"}static get properties(){return{color:{type:String,attr:\"color\"},data:{type:String,attr:\"data\"}}}static get style(){return\"ionic-bar-chart{font-style:normal;font-weight:400;line-height:normal;font-size:16px;display:block;letter-spacing:-.04em}ionic-bar-chart .bar-container{width:100%;padding-right:50px;max-width:697px}ionic-bar-chart .bar{height:12px;position:relative;border-radius:2px}ionic-bar-chart .bar span{position:absolute;right:-40px;font-weight:500;top:-3px}ionic-bar-chart strong{margin-top:10px;display:block;font-weight:400;margin-bottom:34px}\"}}export{a as IonicBarChart};"
  },
  {
    "path": "content/js/stencil/ionic-site-components/lo9utgpp.sc.es5.entry.js",
    "content": "IonicSiteComponents.loadBundle(\"lo9utgpp\",[\"exports\"],function(e){var t=window.IonicSiteComponents.h,n=function(){function e(){}return e.prototype.componentWillLoad=function(){},e.prototype.componentDidLoad=function(){},e.prototype.hexToRgb=function(e){e=e.replace(/^#?([a-f\\d])([a-f\\d])([a-f\\d])$/i,function(e,t,n,r){return t+t+n+n+r+r});var t=/^\\s?#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i.exec(e);return t?parseInt(t[1],16)+\", \"+parseInt(t[2],16)+\", \"+parseInt(t[3],16):null},e.prototype.prepareData=function(){var e=this,t=0,n=this.color?this.color.split(\",\"):[\"#92E1A7\",\"#51A7FF\"],r=JSON.parse(this.data.replace(/'/g,'\"'));return Object.keys(r).map(function(e){return t<r[e]&&(t=r[e]),{name:e,value:parseInt(r[e],10)}}).map(function(r,o){return Object.assign({},r,{styles:{bar:{width:Math.round(r.value/t*100)+\"%\",background:o>1?\"rgba(91,112,139) linear-gradient(to right, \"+n.map(function(t){return\"rgba(\"+e.hexToRgb(t)+\", .2)\"}).join(\", \")+\")\":\"linear-gradient(to right, \"+n.join(\", \")+\")\"},text:{color:o>1?\"#5B708B\":n[n.length-1]}}})})},e.prototype.render=function(){return[t(\"figure\",null,this.prepareData().map(function(e){return[t(\"div\",{class:\"bar-container\"},t(\"div\",{class:\"bar\",style:e.styles.bar},t(\"span\",{style:e.styles.text},e.value,\"%\"))),t(\"strong\",null,e.name)]}))]},Object.defineProperty(e,\"is\",{get:function(){return\"ionic-bar-chart\"},enumerable:!0,configurable:!0}),Object.defineProperty(e,\"properties\",{get:function(){return{color:{type:String,attr:\"color\"},data:{type:String,attr:\"data\"}}},enumerable:!0,configurable:!0}),Object.defineProperty(e,\"style\",{get:function(){return\"ionic-bar-chart{font-style:normal;font-weight:400;line-height:normal;font-size:16px;display:block;letter-spacing:-.04em}ionic-bar-chart .bar-container{width:100%;padding-right:50px;max-width:697px}ionic-bar-chart .bar{height:12px;position:relative;border-radius:2px}ionic-bar-chart .bar span{position:absolute;right:-40px;font-weight:500;top:-3px}ionic-bar-chart strong{margin-top:10px;display:block;font-weight:400;margin-bottom:34px}\"},enumerable:!0,configurable:!0}),e}();e.IonicBarChart=n,Object.defineProperty(e,\"__esModule\",{value:!0})});"
  },
  {
    "path": "content/js/stencil/ionic-site-components/m0trkizf.entry.js",
    "content": "const e=window.IonicSiteComponents.h;class t{constructor(){this.selected=!1}deselect(){this.selected=!1}select(){this.selected=!0}handleSelected(){this.toggleSelected.emit(this)}hostData(){return{class:{selected:this.selected}}}render(){return e(\"div\",{onClick:e=>this.handleSelected()},this.title)}static get is(){return\"ionic-toggle-button\"}static get encapsulation(){return\"shadow\"}static get properties(){return{deselect:{method:!0},select:{method:!0},selected:{state:!0},tab:{type:String,attr:\"tab\"},title:{type:String,attr:\"title\"}}}static get events(){return[{name:\"toggleSelected\",method:\"toggleSelected\",bubbles:!0,cancelable:!0,composed:!0}]}static get style(){return\":host{display:-ms-flexbox;display:flex;text-decoration:none;cursor:pointer;border:1px solid #eee;text-align:center;font-size:14px}:host,div{-ms-flex:1;flex:1}div{padding:16px}:host(:last-child){border-left:none}:host(.selected){background-color:#4f8ef7;color:#fff;font-weight:700}\"}}export{t as IonicToggleButton};"
  },
  {
    "path": "content/js/stencil/ionic-site-components/m0trkizf.es5.entry.js",
    "content": "IonicSiteComponents.loadBundle(\"m0trkizf\",[\"exports\"],function(e){var t=window.IonicSiteComponents.h,n=function(){function e(){this.selected=!1}return e.prototype.deselect=function(){this.selected=!1},e.prototype.select=function(){this.selected=!0},e.prototype.handleSelected=function(){this.toggleSelected.emit(this)},e.prototype.hostData=function(){return{class:{selected:this.selected}}},e.prototype.render=function(){var e=this;return t(\"div\",{onClick:function(t){return e.handleSelected()}},this.title)},Object.defineProperty(e,\"is\",{get:function(){return\"ionic-toggle-button\"},enumerable:!0,configurable:!0}),Object.defineProperty(e,\"encapsulation\",{get:function(){return\"shadow\"},enumerable:!0,configurable:!0}),Object.defineProperty(e,\"properties\",{get:function(){return{deselect:{method:!0},select:{method:!0},selected:{state:!0},tab:{type:String,attr:\"tab\"},title:{type:String,attr:\"title\"}}},enumerable:!0,configurable:!0}),Object.defineProperty(e,\"events\",{get:function(){return[{name:\"toggleSelected\",method:\"toggleSelected\",bubbles:!0,cancelable:!0,composed:!0}]},enumerable:!0,configurable:!0}),Object.defineProperty(e,\"style\",{get:function(){return\":host{display:-ms-flexbox;display:flex;text-decoration:none;cursor:pointer;border:1px solid #eee;text-align:center;font-size:14px}:host,div{-ms-flex:1;flex:1}div{padding:16px}:host(:last-child){border-left:none}:host(.selected){background-color:#4f8ef7;color:#fff;font-weight:700}\"},enumerable:!0,configurable:!0}),e}();e.IonicToggleButton=n,Object.defineProperty(e,\"__esModule\",{value:!0})});"
  },
  {
    "path": "content/js/stencil/ionic-site-components/m0trkizf.sc.entry.js",
    "content": "const e=window.IonicSiteComponents.h;class t{constructor(){this.selected=!1}deselect(){this.selected=!1}select(){this.selected=!0}handleSelected(){this.toggleSelected.emit(this)}hostData(){return{class:{selected:this.selected}}}render(){return e(\"div\",{onClick:e=>this.handleSelected()},this.title)}static get is(){return\"ionic-toggle-button\"}static get encapsulation(){return\"shadow\"}static get properties(){return{deselect:{method:!0},select:{method:!0},selected:{state:!0},tab:{type:String,attr:\"tab\"},title:{type:String,attr:\"title\"}}}static get events(){return[{name:\"toggleSelected\",method:\"toggleSelected\",bubbles:!0,cancelable:!0,composed:!0}]}static get style(){return\".sc-ionic-toggle-button-h{display:-ms-flexbox;display:flex;text-decoration:none;cursor:pointer;border:1px solid #eee;text-align:center;font-size:14px}.sc-ionic-toggle-button-h, div.sc-ionic-toggle-button{-ms-flex:1;flex:1}div.sc-ionic-toggle-button{padding:16px}.sc-ionic-toggle-button-h:last-child{border-left:none}.selected.sc-ionic-toggle-button-h{background-color:#4f8ef7;color:#fff;font-weight:700}\"}}export{t as IonicToggleButton};"
  },
  {
    "path": "content/js/stencil/ionic-site-components/m0trkizf.sc.es5.entry.js",
    "content": "IonicSiteComponents.loadBundle(\"m0trkizf\",[\"exports\"],function(e){var t=window.IonicSiteComponents.h,n=function(){function e(){this.selected=!1}return e.prototype.deselect=function(){this.selected=!1},e.prototype.select=function(){this.selected=!0},e.prototype.handleSelected=function(){this.toggleSelected.emit(this)},e.prototype.hostData=function(){return{class:{selected:this.selected}}},e.prototype.render=function(){var e=this;return t(\"div\",{onClick:function(t){return e.handleSelected()}},this.title)},Object.defineProperty(e,\"is\",{get:function(){return\"ionic-toggle-button\"},enumerable:!0,configurable:!0}),Object.defineProperty(e,\"encapsulation\",{get:function(){return\"shadow\"},enumerable:!0,configurable:!0}),Object.defineProperty(e,\"properties\",{get:function(){return{deselect:{method:!0},select:{method:!0},selected:{state:!0},tab:{type:String,attr:\"tab\"},title:{type:String,attr:\"title\"}}},enumerable:!0,configurable:!0}),Object.defineProperty(e,\"events\",{get:function(){return[{name:\"toggleSelected\",method:\"toggleSelected\",bubbles:!0,cancelable:!0,composed:!0}]},enumerable:!0,configurable:!0}),Object.defineProperty(e,\"style\",{get:function(){return\".sc-ionic-toggle-button-h{display:-ms-flexbox;display:flex;text-decoration:none;cursor:pointer;border:1px solid #eee;text-align:center;font-size:14px}.sc-ionic-toggle-button-h, div.sc-ionic-toggle-button{-ms-flex:1;flex:1}div.sc-ionic-toggle-button{padding:16px}.sc-ionic-toggle-button-h:last-child{border-left:none}.selected.sc-ionic-toggle-button-h{background-color:#4f8ef7;color:#fff;font-weight:700}\"},enumerable:!0,configurable:!0}),e}();e.IonicToggleButton=n,Object.defineProperty(e,\"__esModule\",{value:!0})});"
  },
  {
    "path": "content/js/stencil/ionic-site-components/nrj8jyt7.entry.js",
    "content": "const t=window.IonicSiteComponents.h;class e{constructor(){this.hidden=!0}hide(){this.hidden=!0}show(){this.hidden=!1}hostData(){return{style:{display:this.hidden?\"none\":\"block\"}}}render(){return t(\"slot\",null)}static get is(){return\"ionic-toggle-tab\"}static get encapsulation(){return\"shadow\"}static get properties(){return{hidden:{state:!0},hide:{method:!0},show:{method:!0},tab:{type:String,attr:\"tab\"}}}}export{e as IonicToggleTab};"
  },
  {
    "path": "content/js/stencil/ionic-site-components/nrj8jyt7.es5.entry.js",
    "content": "IonicSiteComponents.loadBundle(\"nrj8jyt7\",[\"exports\"],function(e){var t=window.IonicSiteComponents.h,n=function(){function e(){this.hidden=!0}return e.prototype.hide=function(){this.hidden=!0},e.prototype.show=function(){this.hidden=!1},e.prototype.hostData=function(){return{style:{display:this.hidden?\"none\":\"block\"}}},e.prototype.render=function(){return t(\"slot\",null)},Object.defineProperty(e,\"is\",{get:function(){return\"ionic-toggle-tab\"},enumerable:!0,configurable:!0}),Object.defineProperty(e,\"encapsulation\",{get:function(){return\"shadow\"},enumerable:!0,configurable:!0}),Object.defineProperty(e,\"properties\",{get:function(){return{hidden:{state:!0},hide:{method:!0},show:{method:!0},tab:{type:String,attr:\"tab\"}}},enumerable:!0,configurable:!0}),e}();e.IonicToggleTab=n,Object.defineProperty(e,\"__esModule\",{value:!0})});"
  },
  {
    "path": "content/js/stencil/ionic-site-components/nrj8jyt7.sc.entry.js",
    "content": "const t=window.IonicSiteComponents.h;class e{constructor(){this.hidden=!0}hide(){this.hidden=!0}show(){this.hidden=!1}hostData(){return{style:{display:this.hidden?\"none\":\"block\"}}}render(){return t(\"slot\",null)}static get is(){return\"ionic-toggle-tab\"}static get encapsulation(){return\"shadow\"}static get properties(){return{hidden:{state:!0},hide:{method:!0},show:{method:!0},tab:{type:String,attr:\"tab\"}}}}export{e as IonicToggleTab};"
  },
  {
    "path": "content/js/stencil/ionic-site-components/nrj8jyt7.sc.es5.entry.js",
    "content": "IonicSiteComponents.loadBundle(\"nrj8jyt7\",[\"exports\"],function(e){var t=window.IonicSiteComponents.h,n=function(){function e(){this.hidden=!0}return e.prototype.hide=function(){this.hidden=!0},e.prototype.show=function(){this.hidden=!1},e.prototype.hostData=function(){return{style:{display:this.hidden?\"none\":\"block\"}}},e.prototype.render=function(){return t(\"slot\",null)},Object.defineProperty(e,\"is\",{get:function(){return\"ionic-toggle-tab\"},enumerable:!0,configurable:!0}),Object.defineProperty(e,\"encapsulation\",{get:function(){return\"shadow\"},enumerable:!0,configurable:!0}),Object.defineProperty(e,\"properties\",{get:function(){return{hidden:{state:!0},hide:{method:!0},show:{method:!0},tab:{type:String,attr:\"tab\"}}},enumerable:!0,configurable:!0}),e}();e.IonicToggleTab=n,Object.defineProperty(e,\"__esModule\",{value:!0})});"
  },
  {
    "path": "content/js/stencil/ionic-site-components/raorzqti.entry.js",
    "content": "const t=window.IonicSiteComponents.h;class e{constructor(){this.showPricingNotice=!1,this.buttonColor=\"white\",this.transparentInput=!1}handleSubmit(t){var e=window.getCookie(\"hubspotutk\");return this.hsidRef&&(this.hsidRef.value=e),!0}render(){return t(\"form\",{class:`form quick-signup-form ${this.transparentInput?\"transparent-input\":\"\"}`,role:\"form\",action:\"https://dashboard.ionicframework.com/signup\",method:\"GET\",onSubmit:t=>this.handleSubmit(t)},t(\"input\",{type:\"hidden\",name:\"hsid\",ref:t=>this.hsidRef=t}),t(\"input\",{type:\"hidden\",name:\"source\",value:\"homepage-quick\"}),t(\"div\",{class:\"form-group\",id:\"field-email\"},t(\"div\",{class:\"row\"},t(\"div\",{class:\"col-sm-8 input-col\"},t(\"input\",{class:\"form-control\",type:\"email\",placeholder:\"Enter your email address\",id:\"id_email\",name:\"email\",spellcheck:\"false\",required:!0})),t(\"div\",{class:\"col-sm-4\"},t(\"button\",{type:\"submit\",class:`btn ${this.buttonColor}`},\"Get started\")))),this.showPricingNotice?t(\"div\",{class:\"form-group\"},\"Ionic is free and open source for all developers. We also offer \",t(\"a\",{href:\"/pricing\"},\"enterprise options\"),\" for teams that need support and premium features.\"):null)}static get is(){return\"ionic-quick-signup\"}static get properties(){return{buttonColor:{type:String,attr:\"button-color\"},showPricingNotice:{type:Boolean,attr:\"show-pricing-notice\"},transparentInput:{type:Boolean,attr:\"transparent-input\"}}}static get style(){return\"ionic-quick-signup{display:block}.quick-signup-form{width:100%;margin-bottom:-15px}.quick-signup-form .input-col{padding-right:0}.quick-signup-form.transparent-input input{background-color:hsla(0,0%,100%,.2);border:none;border-radius:8px;color:#fff}.quick-signup-form.transparent-input input:focus{border:none}.quick-signup-form.transparent-input input::-webkit-input-placeholder{color:hsla(0,0%,100%,.8);font-weight:400}.quick-signup-form.transparent-input input:-ms-input-placeholder{color:hsla(0,0%,100%,.8);font-weight:400}.quick-signup-form.transparent-input input::-ms-input-placeholder{color:hsla(0,0%,100%,.8);font-weight:400}.quick-signup-form.transparent-input input::placeholder{color:hsla(0,0%,100%,.8);font-weight:400}.quick-signup-form.transparent-input button.btn.white{font-family:Eina,Helvetica Neue,Helvetica,sans-serif;border-radius:8px;text-transform:none;font-weight:600;padding-left:15px;padding-right:15px}.quick-signup-form input{padding:0 14px;height:54px;background-color:#fff;-webkit-box-shadow:none;box-shadow:none;border:2px solid transparent;margin:0;width:100%}.quick-signup-form input::-webkit-input-placeholder{color:#757575;font-weight:700}.quick-signup-form input:-ms-input-placeholder{color:#757575;font-weight:700}.quick-signup-form input::-ms-input-placeholder{color:#757575;font-weight:700}.quick-signup-form input::placeholder{color:#757575;font-weight:700}.quick-signup-form input:focus{border:2px solid #757575}.quick-signup-form button{margin-top:0}\\@media (max-width:991px){.quick-signup-form{max-width:60%;margin:auto}}\\@media (max-width:767px){.quick-signup-form .btn{margin-top:20px}}\"}}export{e as IonicQuickSignup};"
  },
  {
    "path": "content/js/stencil/ionic-site-components/raorzqti.es5.entry.js",
    "content": "IonicSiteComponents.loadBundle(\"raorzqti\",[\"exports\"],function(e){var t=window.IonicSiteComponents.h,n=function(){function e(){this.showPricingNotice=!1,this.buttonColor=\"white\",this.transparentInput=!1}return e.prototype.handleSubmit=function(e){var t=window.getCookie(\"hubspotutk\");return this.hsidRef&&(this.hsidRef.value=t),!0},e.prototype.render=function(){var e=this;return t(\"form\",{class:\"form quick-signup-form \"+(this.transparentInput?\"transparent-input\":\"\"),role:\"form\",action:\"https://dashboard.ionicframework.com/signup\",method:\"GET\",onSubmit:function(t){return e.handleSubmit(t)}},t(\"input\",{type:\"hidden\",name:\"hsid\",ref:function(t){return e.hsidRef=t}}),t(\"input\",{type:\"hidden\",name:\"source\",value:\"homepage-quick\"}),t(\"div\",{class:\"form-group\",id:\"field-email\"},t(\"div\",{class:\"row\"},t(\"div\",{class:\"col-sm-8 input-col\"},t(\"input\",{class:\"form-control\",type:\"email\",placeholder:\"Enter your email address\",id:\"id_email\",name:\"email\",spellcheck:\"false\",required:!0})),t(\"div\",{class:\"col-sm-4\"},t(\"button\",{type:\"submit\",class:\"btn \"+this.buttonColor},\"Get started\")))),this.showPricingNotice?t(\"div\",{class:\"form-group\"},\"Ionic is free and open source for all developers. We also offer \",t(\"a\",{href:\"/pricing\"},\"enterprise options\"),\" for teams that need support and premium features.\"):null)},Object.defineProperty(e,\"is\",{get:function(){return\"ionic-quick-signup\"},enumerable:!0,configurable:!0}),Object.defineProperty(e,\"properties\",{get:function(){return{buttonColor:{type:String,attr:\"button-color\"},showPricingNotice:{type:Boolean,attr:\"show-pricing-notice\"},transparentInput:{type:Boolean,attr:\"transparent-input\"}}},enumerable:!0,configurable:!0}),Object.defineProperty(e,\"style\",{get:function(){return\"ionic-quick-signup{display:block}.quick-signup-form{width:100%;margin-bottom:-15px}.quick-signup-form .input-col{padding-right:0}.quick-signup-form.transparent-input input{background-color:hsla(0,0%,100%,.2);border:none;border-radius:8px;color:#fff}.quick-signup-form.transparent-input input:focus{border:none}.quick-signup-form.transparent-input input::-webkit-input-placeholder{color:hsla(0,0%,100%,.8);font-weight:400}.quick-signup-form.transparent-input input:-ms-input-placeholder{color:hsla(0,0%,100%,.8);font-weight:400}.quick-signup-form.transparent-input input::-ms-input-placeholder{color:hsla(0,0%,100%,.8);font-weight:400}.quick-signup-form.transparent-input input::placeholder{color:hsla(0,0%,100%,.8);font-weight:400}.quick-signup-form.transparent-input button.btn.white{font-family:Eina,Helvetica Neue,Helvetica,sans-serif;border-radius:8px;text-transform:none;font-weight:600;padding-left:15px;padding-right:15px}.quick-signup-form input{padding:0 14px;height:54px;background-color:#fff;-webkit-box-shadow:none;box-shadow:none;border:2px solid transparent;margin:0;width:100%}.quick-signup-form input::-webkit-input-placeholder{color:#757575;font-weight:700}.quick-signup-form input:-ms-input-placeholder{color:#757575;font-weight:700}.quick-signup-form input::-ms-input-placeholder{color:#757575;font-weight:700}.quick-signup-form input::placeholder{color:#757575;font-weight:700}.quick-signup-form input:focus{border:2px solid #757575}.quick-signup-form button{margin-top:0}\\@media (max-width:991px){.quick-signup-form{max-width:60%;margin:auto}}\\@media (max-width:767px){.quick-signup-form .btn{margin-top:20px}}\"},enumerable:!0,configurable:!0}),e}();e.IonicQuickSignup=n,Object.defineProperty(e,\"__esModule\",{value:!0})});"
  },
  {
    "path": "content/js/stencil/ionic-site-components/raorzqti.sc.entry.js",
    "content": "const t=window.IonicSiteComponents.h;class e{constructor(){this.showPricingNotice=!1,this.buttonColor=\"white\",this.transparentInput=!1}handleSubmit(t){var e=window.getCookie(\"hubspotutk\");return this.hsidRef&&(this.hsidRef.value=e),!0}render(){return t(\"form\",{class:`form quick-signup-form ${this.transparentInput?\"transparent-input\":\"\"}`,role:\"form\",action:\"https://dashboard.ionicframework.com/signup\",method:\"GET\",onSubmit:t=>this.handleSubmit(t)},t(\"input\",{type:\"hidden\",name:\"hsid\",ref:t=>this.hsidRef=t}),t(\"input\",{type:\"hidden\",name:\"source\",value:\"homepage-quick\"}),t(\"div\",{class:\"form-group\",id:\"field-email\"},t(\"div\",{class:\"row\"},t(\"div\",{class:\"col-sm-8 input-col\"},t(\"input\",{class:\"form-control\",type:\"email\",placeholder:\"Enter your email address\",id:\"id_email\",name:\"email\",spellcheck:\"false\",required:!0})),t(\"div\",{class:\"col-sm-4\"},t(\"button\",{type:\"submit\",class:`btn ${this.buttonColor}`},\"Get started\")))),this.showPricingNotice?t(\"div\",{class:\"form-group\"},\"Ionic is free and open source for all developers. We also offer \",t(\"a\",{href:\"/pricing\"},\"enterprise options\"),\" for teams that need support and premium features.\"):null)}static get is(){return\"ionic-quick-signup\"}static get properties(){return{buttonColor:{type:String,attr:\"button-color\"},showPricingNotice:{type:Boolean,attr:\"show-pricing-notice\"},transparentInput:{type:Boolean,attr:\"transparent-input\"}}}static get style(){return\"ionic-quick-signup{display:block}.quick-signup-form{width:100%;margin-bottom:-15px}.quick-signup-form .input-col{padding-right:0}.quick-signup-form.transparent-input input{background-color:hsla(0,0%,100%,.2);border:none;border-radius:8px;color:#fff}.quick-signup-form.transparent-input input:focus{border:none}.quick-signup-form.transparent-input input::-webkit-input-placeholder{color:hsla(0,0%,100%,.8);font-weight:400}.quick-signup-form.transparent-input input:-ms-input-placeholder{color:hsla(0,0%,100%,.8);font-weight:400}.quick-signup-form.transparent-input input::-ms-input-placeholder{color:hsla(0,0%,100%,.8);font-weight:400}.quick-signup-form.transparent-input input::placeholder{color:hsla(0,0%,100%,.8);font-weight:400}.quick-signup-form.transparent-input button.btn.white{font-family:Eina,Helvetica Neue,Helvetica,sans-serif;border-radius:8px;text-transform:none;font-weight:600;padding-left:15px;padding-right:15px}.quick-signup-form input{padding:0 14px;height:54px;background-color:#fff;-webkit-box-shadow:none;box-shadow:none;border:2px solid transparent;margin:0;width:100%}.quick-signup-form input::-webkit-input-placeholder{color:#757575;font-weight:700}.quick-signup-form input:-ms-input-placeholder{color:#757575;font-weight:700}.quick-signup-form input::-ms-input-placeholder{color:#757575;font-weight:700}.quick-signup-form input::placeholder{color:#757575;font-weight:700}.quick-signup-form input:focus{border:2px solid #757575}.quick-signup-form button{margin-top:0}\\@media (max-width:991px){.quick-signup-form{max-width:60%;margin:auto}}\\@media (max-width:767px){.quick-signup-form .btn{margin-top:20px}}\"}}export{e as IonicQuickSignup};"
  },
  {
    "path": "content/js/stencil/ionic-site-components/raorzqti.sc.es5.entry.js",
    "content": "IonicSiteComponents.loadBundle(\"raorzqti\",[\"exports\"],function(e){var t=window.IonicSiteComponents.h,n=function(){function e(){this.showPricingNotice=!1,this.buttonColor=\"white\",this.transparentInput=!1}return e.prototype.handleSubmit=function(e){var t=window.getCookie(\"hubspotutk\");return this.hsidRef&&(this.hsidRef.value=t),!0},e.prototype.render=function(){var e=this;return t(\"form\",{class:\"form quick-signup-form \"+(this.transparentInput?\"transparent-input\":\"\"),role:\"form\",action:\"https://dashboard.ionicframework.com/signup\",method:\"GET\",onSubmit:function(t){return e.handleSubmit(t)}},t(\"input\",{type:\"hidden\",name:\"hsid\",ref:function(t){return e.hsidRef=t}}),t(\"input\",{type:\"hidden\",name:\"source\",value:\"homepage-quick\"}),t(\"div\",{class:\"form-group\",id:\"field-email\"},t(\"div\",{class:\"row\"},t(\"div\",{class:\"col-sm-8 input-col\"},t(\"input\",{class:\"form-control\",type:\"email\",placeholder:\"Enter your email address\",id:\"id_email\",name:\"email\",spellcheck:\"false\",required:!0})),t(\"div\",{class:\"col-sm-4\"},t(\"button\",{type:\"submit\",class:\"btn \"+this.buttonColor},\"Get started\")))),this.showPricingNotice?t(\"div\",{class:\"form-group\"},\"Ionic is free and open source for all developers. We also offer \",t(\"a\",{href:\"/pricing\"},\"enterprise options\"),\" for teams that need support and premium features.\"):null)},Object.defineProperty(e,\"is\",{get:function(){return\"ionic-quick-signup\"},enumerable:!0,configurable:!0}),Object.defineProperty(e,\"properties\",{get:function(){return{buttonColor:{type:String,attr:\"button-color\"},showPricingNotice:{type:Boolean,attr:\"show-pricing-notice\"},transparentInput:{type:Boolean,attr:\"transparent-input\"}}},enumerable:!0,configurable:!0}),Object.defineProperty(e,\"style\",{get:function(){return\"ionic-quick-signup{display:block}.quick-signup-form{width:100%;margin-bottom:-15px}.quick-signup-form .input-col{padding-right:0}.quick-signup-form.transparent-input input{background-color:hsla(0,0%,100%,.2);border:none;border-radius:8px;color:#fff}.quick-signup-form.transparent-input input:focus{border:none}.quick-signup-form.transparent-input input::-webkit-input-placeholder{color:hsla(0,0%,100%,.8);font-weight:400}.quick-signup-form.transparent-input input:-ms-input-placeholder{color:hsla(0,0%,100%,.8);font-weight:400}.quick-signup-form.transparent-input input::-ms-input-placeholder{color:hsla(0,0%,100%,.8);font-weight:400}.quick-signup-form.transparent-input input::placeholder{color:hsla(0,0%,100%,.8);font-weight:400}.quick-signup-form.transparent-input button.btn.white{font-family:Eina,Helvetica Neue,Helvetica,sans-serif;border-radius:8px;text-transform:none;font-weight:600;padding-left:15px;padding-right:15px}.quick-signup-form input{padding:0 14px;height:54px;background-color:#fff;-webkit-box-shadow:none;box-shadow:none;border:2px solid transparent;margin:0;width:100%}.quick-signup-form input::-webkit-input-placeholder{color:#757575;font-weight:700}.quick-signup-form input:-ms-input-placeholder{color:#757575;font-weight:700}.quick-signup-form input::-ms-input-placeholder{color:#757575;font-weight:700}.quick-signup-form input::placeholder{color:#757575;font-weight:700}.quick-signup-form input:focus{border:2px solid #757575}.quick-signup-form button{margin-top:0}\\@media (max-width:991px){.quick-signup-form{max-width:60%;margin:auto}}\\@media (max-width:767px){.quick-signup-form .btn{margin-top:20px}}\"},enumerable:!0,configurable:!0}),e}();e.IonicQuickSignup=n,Object.defineProperty(e,\"__esModule\",{value:!0})});"
  },
  {
    "path": "content/js/stencil/ionic-site-components/svg/index.esm.d.ts",
    "content": "\nexport type IconMap = {\n  'ios-add-circle-outline': string;\n  'ios-add-circle': string;\n  'ios-add': string;\n  'ios-airplane': string;\n  'ios-alarm': string;\n  'ios-albums': string;\n  'ios-alert': string;\n  'ios-american-football': string;\n  'ios-analytics': string;\n  'ios-aperture': string;\n  'ios-apps': string;\n  'ios-appstore': string;\n  'ios-archive': string;\n  'ios-arrow-back': string;\n  'ios-arrow-down': string;\n  'ios-arrow-dropdown-circle': string;\n  'ios-arrow-dropdown': string;\n  'ios-arrow-dropleft-circle': string;\n  'ios-arrow-dropleft': string;\n  'ios-arrow-dropright-circle': string;\n  'ios-arrow-dropright': string;\n  'ios-arrow-dropup-circle': string;\n  'ios-arrow-dropup': string;\n  'ios-arrow-forward': string;\n  'ios-arrow-round-back': string;\n  'ios-arrow-round-down': string;\n  'ios-arrow-round-forward': string;\n  'ios-arrow-round-up': string;\n  'ios-arrow-up': string;\n  'ios-at': string;\n  'ios-attach': string;\n  'ios-backspace': string;\n  'ios-barcode': string;\n  'ios-baseball': string;\n  'ios-basket': string;\n  'ios-basketball': string;\n  'ios-battery-charging': string;\n  'ios-battery-dead': string;\n  'ios-battery-full': string;\n  'ios-beaker': string;\n  'ios-bed': string;\n  'ios-beer': string;\n  'ios-bicycle': string;\n  'ios-bluetooth': string;\n  'ios-boat': string;\n  'ios-body': string;\n  'ios-bonfire': string;\n  'ios-book': string;\n  'ios-bookmark': string;\n  'ios-bookmarks': string;\n  'ios-bowtie': string;\n  'ios-briefcase': string;\n  'ios-browsers': string;\n  'ios-brush': string;\n  'ios-bug': string;\n  'ios-build': string;\n  'ios-bulb': string;\n  'ios-bus': string;\n  'ios-business': string;\n  'ios-cafe': string;\n  'ios-calculator': string;\n  'ios-calendar': string;\n  'ios-call': string;\n  'ios-camera': string;\n  'ios-car': string;\n  'ios-card': string;\n  'ios-cart': string;\n  'ios-cash': string;\n  'ios-cellular': string;\n  'ios-chatboxes': string;\n  'ios-chatbubbles': string;\n  'ios-checkbox-outline': string;\n  'ios-checkbox': string;\n  'ios-checkmark-circle-outline': string;\n  'ios-checkmark-circle': string;\n  'ios-checkmark': string;\n  'ios-clipboard': string;\n  'ios-clock': string;\n  'ios-close-circle-outline': string;\n  'ios-close-circle': string;\n  'ios-close': string;\n  'ios-cloud-circle': string;\n  'ios-cloud-done': string;\n  'ios-cloud-download': string;\n  'ios-cloud-outline': string;\n  'ios-cloud-upload': string;\n  'ios-cloud': string;\n  'ios-cloudy-night': string;\n  'ios-cloudy': string;\n  'ios-code-download': string;\n  'ios-code-working': string;\n  'ios-code': string;\n  'ios-cog': string;\n  'ios-color-fill': string;\n  'ios-color-filter': string;\n  'ios-color-palette': string;\n  'ios-color-wand': string;\n  'ios-compass': string;\n  'ios-construct': string;\n  'ios-contact': string;\n  'ios-contacts': string;\n  'ios-contract': string;\n  'ios-contrast': string;\n  'ios-copy': string;\n  'ios-create': string;\n  'ios-crop': string;\n  'ios-cube': string;\n  'ios-cut': string;\n  'ios-desktop': string;\n  'ios-disc': string;\n  'ios-document': string;\n  'ios-done-all': string;\n  'ios-download': string;\n  'ios-easel': string;\n  'ios-egg': string;\n  'ios-exit': string;\n  'ios-expand': string;\n  'ios-eye-off': string;\n  'ios-eye': string;\n  'ios-fastforward': string;\n  'ios-female': string;\n  'ios-filing': string;\n  'ios-film': string;\n  'ios-finger-print': string;\n  'ios-fitness': string;\n  'ios-flag': string;\n  'ios-flame': string;\n  'ios-flash-off': string;\n  'ios-flash': string;\n  'ios-flashlight': string;\n  'ios-flask': string;\n  'ios-flower': string;\n  'ios-folder-open': string;\n  'ios-folder': string;\n  'ios-football': string;\n  'ios-funnel': string;\n  'ios-gift': string;\n  'ios-git-branch': string;\n  'ios-git-commit': string;\n  'ios-git-compare': string;\n  'ios-git-merge': string;\n  'ios-git-network': string;\n  'ios-git-pull-request': string;\n  'ios-glasses': string;\n  'ios-globe': string;\n  'ios-grid': string;\n  'ios-hammer': string;\n  'ios-hand': string;\n  'ios-happy': string;\n  'ios-headset': string;\n  'ios-heart-dislike': string;\n  'ios-heart-empty': string;\n  'ios-heart-half': string;\n  'ios-heart': string;\n  'ios-help-buoy': string;\n  'ios-help-circle-outline': string;\n  'ios-help-circle': string;\n  'ios-help': string;\n  'ios-home': string;\n  'ios-hourglass': string;\n  'ios-ice-cream': string;\n  'ios-image': string;\n  'ios-images': string;\n  'ios-infinite': string;\n  'ios-information-circle-outline': string;\n  'ios-information-circle': string;\n  'ios-information': string;\n  'ios-jet': string;\n  'ios-journal': string;\n  'ios-key': string;\n  'ios-keypad': string;\n  'ios-laptop': string;\n  'ios-leaf': string;\n  'ios-link': string;\n  'ios-list-box': string;\n  'ios-list': string;\n  'ios-locate': string;\n  'ios-lock': string;\n  'ios-log-in': string;\n  'ios-log-out': string;\n  'ios-magnet': string;\n  'ios-mail-open': string;\n  'ios-mail-unread': string;\n  'ios-mail': string;\n  'ios-male': string;\n  'ios-man': string;\n  'ios-map': string;\n  'ios-medal': string;\n  'ios-medical': string;\n  'ios-medkit': string;\n  'ios-megaphone': string;\n  'ios-menu': string;\n  'ios-mic-off': string;\n  'ios-mic': string;\n  'ios-microphone': string;\n  'ios-moon': string;\n  'ios-more': string;\n  'ios-move': string;\n  'ios-musical-note': string;\n  'ios-musical-notes': string;\n  'ios-navigate': string;\n  'ios-notifications-off': string;\n  'ios-notifications-outline': string;\n  'ios-notifications': string;\n  'ios-nuclear': string;\n  'ios-nutrition': string;\n  'ios-open': string;\n  'ios-options': string;\n  'ios-outlet': string;\n  'ios-paper-plane': string;\n  'ios-paper': string;\n  'ios-partly-sunny': string;\n  'ios-pause': string;\n  'ios-paw': string;\n  'ios-people': string;\n  'ios-person-add': string;\n  'ios-person': string;\n  'ios-phone-landscape': string;\n  'ios-phone-portrait': string;\n  'ios-photos': string;\n  'ios-pie': string;\n  'ios-pin': string;\n  'ios-pint': string;\n  'ios-pizza': string;\n  'ios-planet': string;\n  'ios-play-circle': string;\n  'ios-play': string;\n  'ios-podium': string;\n  'ios-power': string;\n  'ios-pricetag': string;\n  'ios-pricetags': string;\n  'ios-print': string;\n  'ios-pulse': string;\n  'ios-qr-scanner': string;\n  'ios-quote': string;\n  'ios-radio-button-off': string;\n  'ios-radio-button-on': string;\n  'ios-radio': string;\n  'ios-rainy': string;\n  'ios-recording': string;\n  'ios-redo': string;\n  'ios-refresh-circle': string;\n  'ios-refresh': string;\n  'ios-remove-circle-outline': string;\n  'ios-remove-circle': string;\n  'ios-remove': string;\n  'ios-reorder': string;\n  'ios-repeat': string;\n  'ios-resize': string;\n  'ios-restaurant': string;\n  'ios-return-left': string;\n  'ios-return-right': string;\n  'ios-reverse-camera': string;\n  'ios-rewind': string;\n  'ios-ribbon': string;\n  'ios-rocket': string;\n  'ios-rose': string;\n  'ios-sad': string;\n  'ios-save': string;\n  'ios-school': string;\n  'ios-search': string;\n  'ios-send': string;\n  'ios-settings': string;\n  'ios-share-alt': string;\n  'ios-share': string;\n  'ios-shirt': string;\n  'ios-shuffle': string;\n  'ios-skip-backward': string;\n  'ios-skip-forward': string;\n  'ios-snow': string;\n  'ios-speedometer': string;\n  'ios-square-outline': string;\n  'ios-square': string;\n  'ios-star-half': string;\n  'ios-star-outline': string;\n  'ios-star': string;\n  'ios-stats': string;\n  'ios-stopwatch': string;\n  'ios-subway': string;\n  'ios-sunny': string;\n  'ios-swap': string;\n  'ios-switch': string;\n  'ios-sync': string;\n  'ios-tablet-landscape': string;\n  'ios-tablet-portrait': string;\n  'ios-tennisball': string;\n  'ios-text': string;\n  'ios-thermometer': string;\n  'ios-thumbs-down': string;\n  'ios-thumbs-up': string;\n  'ios-thunderstorm': string;\n  'ios-time': string;\n  'ios-timer': string;\n  'ios-today': string;\n  'ios-train': string;\n  'ios-transgender': string;\n  'ios-trash': string;\n  'ios-trending-down': string;\n  'ios-trending-up': string;\n  'ios-trophy': string;\n  'ios-tv': string;\n  'ios-umbrella': string;\n  'ios-undo': string;\n  'ios-unlock': string;\n  'ios-videocam': string;\n  'ios-volume-high': string;\n  'ios-volume-low': string;\n  'ios-volume-mute': string;\n  'ios-volume-off': string;\n  'ios-walk': string;\n  'ios-wallet': string;\n  'ios-warning': string;\n  'ios-watch': string;\n  'ios-water': string;\n  'ios-wifi': string;\n  'ios-wine': string;\n  'ios-woman': string;\n  'logo-android': string;\n  'logo-angular': string;\n  'logo-apple': string;\n  'logo-bitbucket': string;\n  'logo-bitcoin': string;\n  'logo-buffer': string;\n  'logo-chrome': string;\n  'logo-closed-captioning': string;\n  'logo-codepen': string;\n  'logo-css3': string;\n  'logo-designernews': string;\n  'logo-dribbble': string;\n  'logo-dropbox': string;\n  'logo-euro': string;\n  'logo-facebook': string;\n  'logo-flickr': string;\n  'logo-foursquare': string;\n  'logo-freebsd-devil': string;\n  'logo-game-controller-a': string;\n  'logo-game-controller-b': string;\n  'logo-github': string;\n  'logo-google': string;\n  'logo-googleplus': string;\n  'logo-hackernews': string;\n  'logo-html5': string;\n  'logo-instagram': string;\n  'logo-ionic': string;\n  'logo-ionitron': string;\n  'logo-javascript': string;\n  'logo-linkedin': string;\n  'logo-markdown': string;\n  'logo-model-s': string;\n  'logo-no-smoking': string;\n  'logo-nodejs': string;\n  'logo-npm': string;\n  'logo-octocat': string;\n  'logo-pinterest': string;\n  'logo-playstation': string;\n  'logo-polymer': string;\n  'logo-python': string;\n  'logo-reddit': string;\n  'logo-rss': string;\n  'logo-sass': string;\n  'logo-skype': string;\n  'logo-slack': string;\n  'logo-snapchat': string;\n  'logo-steam': string;\n  'logo-tumblr': string;\n  'logo-tux': string;\n  'logo-twitch': string;\n  'logo-twitter': string;\n  'logo-usd': string;\n  'logo-vimeo': string;\n  'logo-vk': string;\n  'logo-whatsapp': string;\n  'logo-windows': string;\n  'logo-wordpress': string;\n  'logo-xbox': string;\n  'logo-xing': string;\n  'logo-yahoo': string;\n  'logo-yen': string;\n  'logo-youtube': string;\n  'md-add-circle-outline': string;\n  'md-add-circle': string;\n  'md-add': string;\n  'md-airplane': string;\n  'md-alarm': string;\n  'md-albums': string;\n  'md-alert': string;\n  'md-american-football': string;\n  'md-analytics': string;\n  'md-aperture': string;\n  'md-apps': string;\n  'md-appstore': string;\n  'md-archive': string;\n  'md-arrow-back': string;\n  'md-arrow-down': string;\n  'md-arrow-dropdown-circle': string;\n  'md-arrow-dropdown': string;\n  'md-arrow-dropleft-circle': string;\n  'md-arrow-dropleft': string;\n  'md-arrow-dropright-circle': string;\n  'md-arrow-dropright': string;\n  'md-arrow-dropup-circle': string;\n  'md-arrow-dropup': string;\n  'md-arrow-forward': string;\n  'md-arrow-round-back': string;\n  'md-arrow-round-down': string;\n  'md-arrow-round-forward': string;\n  'md-arrow-round-up': string;\n  'md-arrow-up': string;\n  'md-at': string;\n  'md-attach': string;\n  'md-backspace': string;\n  'md-barcode': string;\n  'md-baseball': string;\n  'md-basket': string;\n  'md-basketball': string;\n  'md-battery-charging': string;\n  'md-battery-dead': string;\n  'md-battery-full': string;\n  'md-beaker': string;\n  'md-bed': string;\n  'md-beer': string;\n  'md-bicycle': string;\n  'md-bluetooth': string;\n  'md-boat': string;\n  'md-body': string;\n  'md-bonfire': string;\n  'md-book': string;\n  'md-bookmark': string;\n  'md-bookmarks': string;\n  'md-bowtie': string;\n  'md-briefcase': string;\n  'md-browsers': string;\n  'md-brush': string;\n  'md-bug': string;\n  'md-build': string;\n  'md-bulb': string;\n  'md-bus': string;\n  'md-business': string;\n  'md-cafe': string;\n  'md-calculator': string;\n  'md-calendar': string;\n  'md-call': string;\n  'md-camera': string;\n  'md-car': string;\n  'md-card': string;\n  'md-cart': string;\n  'md-cash': string;\n  'md-cellular': string;\n  'md-chatboxes': string;\n  'md-chatbubbles': string;\n  'md-checkbox-outline': string;\n  'md-checkbox': string;\n  'md-checkmark-circle-outline': string;\n  'md-checkmark-circle': string;\n  'md-checkmark': string;\n  'md-clipboard': string;\n  'md-clock': string;\n  'md-close-circle-outline': string;\n  'md-close-circle': string;\n  'md-close': string;\n  'md-cloud-circle': string;\n  'md-cloud-done': string;\n  'md-cloud-download': string;\n  'md-cloud-outline': string;\n  'md-cloud-upload': string;\n  'md-cloud': string;\n  'md-cloudy-night': string;\n  'md-cloudy': string;\n  'md-code-download': string;\n  'md-code-working': string;\n  'md-code': string;\n  'md-cog': string;\n  'md-color-fill': string;\n  'md-color-filter': string;\n  'md-color-palette': string;\n  'md-color-wand': string;\n  'md-compass': string;\n  'md-construct': string;\n  'md-contact': string;\n  'md-contacts': string;\n  'md-contract': string;\n  'md-contrast': string;\n  'md-copy': string;\n  'md-create': string;\n  'md-crop': string;\n  'md-cube': string;\n  'md-cut': string;\n  'md-desktop': string;\n  'md-disc': string;\n  'md-document': string;\n  'md-done-all': string;\n  'md-download': string;\n  'md-easel': string;\n  'md-egg': string;\n  'md-exit': string;\n  'md-expand': string;\n  'md-eye-off': string;\n  'md-eye': string;\n  'md-fastforward': string;\n  'md-female': string;\n  'md-filing': string;\n  'md-film': string;\n  'md-finger-print': string;\n  'md-fitness': string;\n  'md-flag': string;\n  'md-flame': string;\n  'md-flash-off': string;\n  'md-flash': string;\n  'md-flashlight': string;\n  'md-flask': string;\n  'md-flower': string;\n  'md-folder-open': string;\n  'md-folder': string;\n  'md-football': string;\n  'md-funnel': string;\n  'md-gift': string;\n  'md-git-branch': string;\n  'md-git-commit': string;\n  'md-git-compare': string;\n  'md-git-merge': string;\n  'md-git-network': string;\n  'md-git-pull-request': string;\n  'md-glasses': string;\n  'md-globe': string;\n  'md-grid': string;\n  'md-hammer': string;\n  'md-hand': string;\n  'md-happy': string;\n  'md-headset': string;\n  'md-heart-dislike': string;\n  'md-heart-empty': string;\n  'md-heart-half': string;\n  'md-heart': string;\n  'md-help-buoy': string;\n  'md-help-circle-outline': string;\n  'md-help-circle': string;\n  'md-help': string;\n  'md-home': string;\n  'md-hourglass': string;\n  'md-ice-cream': string;\n  'md-image': string;\n  'md-images': string;\n  'md-infinite': string;\n  'md-information-circle-outline': string;\n  'md-information-circle': string;\n  'md-information': string;\n  'md-jet': string;\n  'md-journal': string;\n  'md-key': string;\n  'md-keypad': string;\n  'md-laptop': string;\n  'md-leaf': string;\n  'md-link': string;\n  'md-list-box': string;\n  'md-list': string;\n  'md-locate': string;\n  'md-lock': string;\n  'md-log-in': string;\n  'md-log-out': string;\n  'md-magnet': string;\n  'md-mail-open': string;\n  'md-mail-unread': string;\n  'md-mail': string;\n  'md-male': string;\n  'md-man': string;\n  'md-map': string;\n  'md-medal': string;\n  'md-medical': string;\n  'md-medkit': string;\n  'md-megaphone': string;\n  'md-menu': string;\n  'md-mic-off': string;\n  'md-mic': string;\n  'md-microphone': string;\n  'md-moon': string;\n  'md-more': string;\n  'md-move': string;\n  'md-musical-note': string;\n  'md-musical-notes': string;\n  'md-navigate': string;\n  'md-notifications-off': string;\n  'md-notifications-outline': string;\n  'md-notifications': string;\n  'md-nuclear': string;\n  'md-nutrition': string;\n  'md-open': string;\n  'md-options': string;\n  'md-outlet': string;\n  'md-paper-plane': string;\n  'md-paper': string;\n  'md-partly-sunny': string;\n  'md-pause': string;\n  'md-paw': string;\n  'md-people': string;\n  'md-person-add': string;\n  'md-person': string;\n  'md-phone-landscape': string;\n  'md-phone-portrait': string;\n  'md-photos': string;\n  'md-pie': string;\n  'md-pin': string;\n  'md-pint': string;\n  'md-pizza': string;\n  'md-planet': string;\n  'md-play-circle': string;\n  'md-play': string;\n  'md-podium': string;\n  'md-power': string;\n  'md-pricetag': string;\n  'md-pricetags': string;\n  'md-print': string;\n  'md-pulse': string;\n  'md-qr-scanner': string;\n  'md-quote': string;\n  'md-radio-button-off': string;\n  'md-radio-button-on': string;\n  'md-radio': string;\n  'md-rainy': string;\n  'md-recording': string;\n  'md-redo': string;\n  'md-refresh-circle': string;\n  'md-refresh': string;\n  'md-remove-circle-outline': string;\n  'md-remove-circle': string;\n  'md-remove': string;\n  'md-reorder': string;\n  'md-repeat': string;\n  'md-resize': string;\n  'md-restaurant': string;\n  'md-return-left': string;\n  'md-return-right': string;\n  'md-reverse-camera': string;\n  'md-rewind': string;\n  'md-ribbon': string;\n  'md-rocket': string;\n  'md-rose': string;\n  'md-sad': string;\n  'md-save': string;\n  'md-school': string;\n  'md-search': string;\n  'md-send': string;\n  'md-settings': string;\n  'md-share-alt': string;\n  'md-share': string;\n  'md-shirt': string;\n  'md-shuffle': string;\n  'md-skip-backward': string;\n  'md-skip-forward': string;\n  'md-snow': string;\n  'md-speedometer': string;\n  'md-square-outline': string;\n  'md-square': string;\n  'md-star-half': string;\n  'md-star-outline': string;\n  'md-star': string;\n  'md-stats': string;\n  'md-stopwatch': string;\n  'md-subway': string;\n  'md-sunny': string;\n  'md-swap': string;\n  'md-switch': string;\n  'md-sync': string;\n  'md-tablet-landscape': string;\n  'md-tablet-portrait': string;\n  'md-tennisball': string;\n  'md-text': string;\n  'md-thermometer': string;\n  'md-thumbs-down': string;\n  'md-thumbs-up': string;\n  'md-thunderstorm': string;\n  'md-time': string;\n  'md-timer': string;\n  'md-today': string;\n  'md-train': string;\n  'md-transgender': string;\n  'md-trash': string;\n  'md-trending-down': string;\n  'md-trending-up': string;\n  'md-trophy': string;\n  'md-tv': string;\n  'md-umbrella': string;\n  'md-undo': string;\n  'md-unlock': string;\n  'md-videocam': string;\n  'md-volume-high': string;\n  'md-volume-low': string;\n  'md-volume-mute': string;\n  'md-volume-off': string;\n  'md-walk': string;\n  'md-wallet': string;\n  'md-warning': string;\n  'md-watch': string;\n  'md-water': string;\n  'md-wifi': string;\n  'md-wine': string;\n  'md-woman': string;\n};\n\nexport type IconNames = keyof IconMap;\n\nexport declare const ICON_PATHS: IconMap;\n\nexport declare const iosAddCircleOutline: string;\nexport declare const iosAddCircle: string;\nexport declare const iosAdd: string;\nexport declare const iosAirplane: string;\nexport declare const iosAlarm: string;\nexport declare const iosAlbums: string;\nexport declare const iosAlert: string;\nexport declare const iosAmericanFootball: string;\nexport declare const iosAnalytics: string;\nexport declare const iosAperture: string;\nexport declare const iosApps: string;\nexport declare const iosAppstore: string;\nexport declare const iosArchive: string;\nexport declare const iosArrowBack: string;\nexport declare const iosArrowDown: string;\nexport declare const iosArrowDropdownCircle: string;\nexport declare const iosArrowDropdown: string;\nexport declare const iosArrowDropleftCircle: string;\nexport declare const iosArrowDropleft: string;\nexport declare const iosArrowDroprightCircle: string;\nexport declare const iosArrowDropright: string;\nexport declare const iosArrowDropupCircle: string;\nexport declare const iosArrowDropup: string;\nexport declare const iosArrowForward: string;\nexport declare const iosArrowRoundBack: string;\nexport declare const iosArrowRoundDown: string;\nexport declare const iosArrowRoundForward: string;\nexport declare const iosArrowRoundUp: string;\nexport declare const iosArrowUp: string;\nexport declare const iosAt: string;\nexport declare const iosAttach: string;\nexport declare const iosBackspace: string;\nexport declare const iosBarcode: string;\nexport declare const iosBaseball: string;\nexport declare const iosBasket: string;\nexport declare const iosBasketball: string;\nexport declare const iosBatteryCharging: string;\nexport declare const iosBatteryDead: string;\nexport declare const iosBatteryFull: string;\nexport declare const iosBeaker: string;\nexport declare const iosBed: string;\nexport declare const iosBeer: string;\nexport declare const iosBicycle: string;\nexport declare const iosBluetooth: string;\nexport declare const iosBoat: string;\nexport declare const iosBody: string;\nexport declare const iosBonfire: string;\nexport declare const iosBook: string;\nexport declare const iosBookmark: string;\nexport declare const iosBookmarks: string;\nexport declare const iosBowtie: string;\nexport declare const iosBriefcase: string;\nexport declare const iosBrowsers: string;\nexport declare const iosBrush: string;\nexport declare const iosBug: string;\nexport declare const iosBuild: string;\nexport declare const iosBulb: string;\nexport declare const iosBus: string;\nexport declare const iosBusiness: string;\nexport declare const iosCafe: string;\nexport declare const iosCalculator: string;\nexport declare const iosCalendar: string;\nexport declare const iosCall: string;\nexport declare const iosCamera: string;\nexport declare const iosCar: string;\nexport declare const iosCard: string;\nexport declare const iosCart: string;\nexport declare const iosCash: string;\nexport declare const iosCellular: string;\nexport declare const iosChatboxes: string;\nexport declare const iosChatbubbles: string;\nexport declare const iosCheckboxOutline: string;\nexport declare const iosCheckbox: string;\nexport declare const iosCheckmarkCircleOutline: string;\nexport declare const iosCheckmarkCircle: string;\nexport declare const iosCheckmark: string;\nexport declare const iosClipboard: string;\nexport declare const iosClock: string;\nexport declare const iosCloseCircleOutline: string;\nexport declare const iosCloseCircle: string;\nexport declare const iosClose: string;\nexport declare const iosCloudCircle: string;\nexport declare const iosCloudDone: string;\nexport declare const iosCloudDownload: string;\nexport declare const iosCloudOutline: string;\nexport declare const iosCloudUpload: string;\nexport declare const iosCloud: string;\nexport declare const iosCloudyNight: string;\nexport declare const iosCloudy: string;\nexport declare const iosCodeDownload: string;\nexport declare const iosCodeWorking: string;\nexport declare const iosCode: string;\nexport declare const iosCog: string;\nexport declare const iosColorFill: string;\nexport declare const iosColorFilter: string;\nexport declare const iosColorPalette: string;\nexport declare const iosColorWand: string;\nexport declare const iosCompass: string;\nexport declare const iosConstruct: string;\nexport declare const iosContact: string;\nexport declare const iosContacts: string;\nexport declare const iosContract: string;\nexport declare const iosContrast: string;\nexport declare const iosCopy: string;\nexport declare const iosCreate: string;\nexport declare const iosCrop: string;\nexport declare const iosCube: string;\nexport declare const iosCut: string;\nexport declare const iosDesktop: string;\nexport declare const iosDisc: string;\nexport declare const iosDocument: string;\nexport declare const iosDoneAll: string;\nexport declare const iosDownload: string;\nexport declare const iosEasel: string;\nexport declare const iosEgg: string;\nexport declare const iosExit: string;\nexport declare const iosExpand: string;\nexport declare const iosEyeOff: string;\nexport declare const iosEye: string;\nexport declare const iosFastforward: string;\nexport declare const iosFemale: string;\nexport declare const iosFiling: string;\nexport declare const iosFilm: string;\nexport declare const iosFingerPrint: string;\nexport declare const iosFitness: string;\nexport declare const iosFlag: string;\nexport declare const iosFlame: string;\nexport declare const iosFlashOff: string;\nexport declare const iosFlash: string;\nexport declare const iosFlashlight: string;\nexport declare const iosFlask: string;\nexport declare const iosFlower: string;\nexport declare const iosFolderOpen: string;\nexport declare const iosFolder: string;\nexport declare const iosFootball: string;\nexport declare const iosFunnel: string;\nexport declare const iosGift: string;\nexport declare const iosGitBranch: string;\nexport declare const iosGitCommit: string;\nexport declare const iosGitCompare: string;\nexport declare const iosGitMerge: string;\nexport declare const iosGitNetwork: string;\nexport declare const iosGitPullRequest: string;\nexport declare const iosGlasses: string;\nexport declare const iosGlobe: string;\nexport declare const iosGrid: string;\nexport declare const iosHammer: string;\nexport declare const iosHand: string;\nexport declare const iosHappy: string;\nexport declare const iosHeadset: string;\nexport declare const iosHeartDislike: string;\nexport declare const iosHeartEmpty: string;\nexport declare const iosHeartHalf: string;\nexport declare const iosHeart: string;\nexport declare const iosHelpBuoy: string;\nexport declare const iosHelpCircleOutline: string;\nexport declare const iosHelpCircle: string;\nexport declare const iosHelp: string;\nexport declare const iosHome: string;\nexport declare const iosHourglass: string;\nexport declare const iosIceCream: string;\nexport declare const iosImage: string;\nexport declare const iosImages: string;\nexport declare const iosInfinite: string;\nexport declare const iosInformationCircleOutline: string;\nexport declare const iosInformationCircle: string;\nexport declare const iosInformation: string;\nexport declare const iosJet: string;\nexport declare const iosJournal: string;\nexport declare const iosKey: string;\nexport declare const iosKeypad: string;\nexport declare const iosLaptop: string;\nexport declare const iosLeaf: string;\nexport declare const iosLink: string;\nexport declare const iosListBox: string;\nexport declare const iosList: string;\nexport declare const iosLocate: string;\nexport declare const iosLock: string;\nexport declare const iosLogIn: string;\nexport declare const iosLogOut: string;\nexport declare const iosMagnet: string;\nexport declare const iosMailOpen: string;\nexport declare const iosMailUnread: string;\nexport declare const iosMail: string;\nexport declare const iosMale: string;\nexport declare const iosMan: string;\nexport declare const iosMap: string;\nexport declare const iosMedal: string;\nexport declare const iosMedical: string;\nexport declare const iosMedkit: string;\nexport declare const iosMegaphone: string;\nexport declare const iosMenu: string;\nexport declare const iosMicOff: string;\nexport declare const iosMic: string;\nexport declare const iosMicrophone: string;\nexport declare const iosMoon: string;\nexport declare const iosMore: string;\nexport declare const iosMove: string;\nexport declare const iosMusicalNote: string;\nexport declare const iosMusicalNotes: string;\nexport declare const iosNavigate: string;\nexport declare const iosNotificationsOff: string;\nexport declare const iosNotificationsOutline: string;\nexport declare const iosNotifications: string;\nexport declare const iosNuclear: string;\nexport declare const iosNutrition: string;\nexport declare const iosOpen: string;\nexport declare const iosOptions: string;\nexport declare const iosOutlet: string;\nexport declare const iosPaperPlane: string;\nexport declare const iosPaper: string;\nexport declare const iosPartlySunny: string;\nexport declare const iosPause: string;\nexport declare const iosPaw: string;\nexport declare const iosPeople: string;\nexport declare const iosPersonAdd: string;\nexport declare const iosPerson: string;\nexport declare const iosPhoneLandscape: string;\nexport declare const iosPhonePortrait: string;\nexport declare const iosPhotos: string;\nexport declare const iosPie: string;\nexport declare const iosPin: string;\nexport declare const iosPint: string;\nexport declare const iosPizza: string;\nexport declare const iosPlanet: string;\nexport declare const iosPlayCircle: string;\nexport declare const iosPlay: string;\nexport declare const iosPodium: string;\nexport declare const iosPower: string;\nexport declare const iosPricetag: string;\nexport declare const iosPricetags: string;\nexport declare const iosPrint: string;\nexport declare const iosPulse: string;\nexport declare const iosQrScanner: string;\nexport declare const iosQuote: string;\nexport declare const iosRadioButtonOff: string;\nexport declare const iosRadioButtonOn: string;\nexport declare const iosRadio: string;\nexport declare const iosRainy: string;\nexport declare const iosRecording: string;\nexport declare const iosRedo: string;\nexport declare const iosRefreshCircle: string;\nexport declare const iosRefresh: string;\nexport declare const iosRemoveCircleOutline: string;\nexport declare const iosRemoveCircle: string;\nexport declare const iosRemove: string;\nexport declare const iosReorder: string;\nexport declare const iosRepeat: string;\nexport declare const iosResize: string;\nexport declare const iosRestaurant: string;\nexport declare const iosReturnLeft: string;\nexport declare const iosReturnRight: string;\nexport declare const iosReverseCamera: string;\nexport declare const iosRewind: string;\nexport declare const iosRibbon: string;\nexport declare const iosRocket: string;\nexport declare const iosRose: string;\nexport declare const iosSad: string;\nexport declare const iosSave: string;\nexport declare const iosSchool: string;\nexport declare const iosSearch: string;\nexport declare const iosSend: string;\nexport declare const iosSettings: string;\nexport declare const iosShareAlt: string;\nexport declare const iosShare: string;\nexport declare const iosShirt: string;\nexport declare const iosShuffle: string;\nexport declare const iosSkipBackward: string;\nexport declare const iosSkipForward: string;\nexport declare const iosSnow: string;\nexport declare const iosSpeedometer: string;\nexport declare const iosSquareOutline: string;\nexport declare const iosSquare: string;\nexport declare const iosStarHalf: string;\nexport declare const iosStarOutline: string;\nexport declare const iosStar: string;\nexport declare const iosStats: string;\nexport declare const iosStopwatch: string;\nexport declare const iosSubway: string;\nexport declare const iosSunny: string;\nexport declare const iosSwap: string;\nexport declare const iosSwitch: string;\nexport declare const iosSync: string;\nexport declare const iosTabletLandscape: string;\nexport declare const iosTabletPortrait: string;\nexport declare const iosTennisball: string;\nexport declare const iosText: string;\nexport declare const iosThermometer: string;\nexport declare const iosThumbsDown: string;\nexport declare const iosThumbsUp: string;\nexport declare const iosThunderstorm: string;\nexport declare const iosTime: string;\nexport declare const iosTimer: string;\nexport declare const iosToday: string;\nexport declare const iosTrain: string;\nexport declare const iosTransgender: string;\nexport declare const iosTrash: string;\nexport declare const iosTrendingDown: string;\nexport declare const iosTrendingUp: string;\nexport declare const iosTrophy: string;\nexport declare const iosTv: string;\nexport declare const iosUmbrella: string;\nexport declare const iosUndo: string;\nexport declare const iosUnlock: string;\nexport declare const iosVideocam: string;\nexport declare const iosVolumeHigh: string;\nexport declare const iosVolumeLow: string;\nexport declare const iosVolumeMute: string;\nexport declare const iosVolumeOff: string;\nexport declare const iosWalk: string;\nexport declare const iosWallet: string;\nexport declare const iosWarning: string;\nexport declare const iosWatch: string;\nexport declare const iosWater: string;\nexport declare const iosWifi: string;\nexport declare const iosWine: string;\nexport declare const iosWoman: string;\nexport declare const logoAndroid: string;\nexport declare const logoAngular: string;\nexport declare const logoApple: string;\nexport declare const logoBitbucket: string;\nexport declare const logoBitcoin: string;\nexport declare const logoBuffer: string;\nexport declare const logoChrome: string;\nexport declare const logoClosedCaptioning: string;\nexport declare const logoCodepen: string;\nexport declare const logoCss3: string;\nexport declare const logoDesignernews: string;\nexport declare const logoDribbble: string;\nexport declare const logoDropbox: string;\nexport declare const logoEuro: string;\nexport declare const logoFacebook: string;\nexport declare const logoFlickr: string;\nexport declare const logoFoursquare: string;\nexport declare const logoFreebsdDevil: string;\nexport declare const logoGameControllerA: string;\nexport declare const logoGameControllerB: string;\nexport declare const logoGithub: string;\nexport declare const logoGoogle: string;\nexport declare const logoGoogleplus: string;\nexport declare const logoHackernews: string;\nexport declare const logoHtml5: string;\nexport declare const logoInstagram: string;\nexport declare const logoIonic: string;\nexport declare const logoIonitron: string;\nexport declare const logoJavascript: string;\nexport declare const logoLinkedin: string;\nexport declare const logoMarkdown: string;\nexport declare const logoModelS: string;\nexport declare const logoNoSmoking: string;\nexport declare const logoNodejs: string;\nexport declare const logoNpm: string;\nexport declare const logoOctocat: string;\nexport declare const logoPinterest: string;\nexport declare const logoPlaystation: string;\nexport declare const logoPolymer: string;\nexport declare const logoPython: string;\nexport declare const logoReddit: string;\nexport declare const logoRss: string;\nexport declare const logoSass: string;\nexport declare const logoSkype: string;\nexport declare const logoSlack: string;\nexport declare const logoSnapchat: string;\nexport declare const logoSteam: string;\nexport declare const logoTumblr: string;\nexport declare const logoTux: string;\nexport declare const logoTwitch: string;\nexport declare const logoTwitter: string;\nexport declare const logoUsd: string;\nexport declare const logoVimeo: string;\nexport declare const logoVk: string;\nexport declare const logoWhatsapp: string;\nexport declare const logoWindows: string;\nexport declare const logoWordpress: string;\nexport declare const logoXbox: string;\nexport declare const logoXing: string;\nexport declare const logoYahoo: string;\nexport declare const logoYen: string;\nexport declare const logoYoutube: string;\nexport declare const mdAddCircleOutline: string;\nexport declare const mdAddCircle: string;\nexport declare const mdAdd: string;\nexport declare const mdAirplane: string;\nexport declare const mdAlarm: string;\nexport declare const mdAlbums: string;\nexport declare const mdAlert: string;\nexport declare const mdAmericanFootball: string;\nexport declare const mdAnalytics: string;\nexport declare const mdAperture: string;\nexport declare const mdApps: string;\nexport declare const mdAppstore: string;\nexport declare const mdArchive: string;\nexport declare const mdArrowBack: string;\nexport declare const mdArrowDown: string;\nexport declare const mdArrowDropdownCircle: string;\nexport declare const mdArrowDropdown: string;\nexport declare const mdArrowDropleftCircle: string;\nexport declare const mdArrowDropleft: string;\nexport declare const mdArrowDroprightCircle: string;\nexport declare const mdArrowDropright: string;\nexport declare const mdArrowDropupCircle: string;\nexport declare const mdArrowDropup: string;\nexport declare const mdArrowForward: string;\nexport declare const mdArrowRoundBack: string;\nexport declare const mdArrowRoundDown: string;\nexport declare const mdArrowRoundForward: string;\nexport declare const mdArrowRoundUp: string;\nexport declare const mdArrowUp: string;\nexport declare const mdAt: string;\nexport declare const mdAttach: string;\nexport declare const mdBackspace: string;\nexport declare const mdBarcode: string;\nexport declare const mdBaseball: string;\nexport declare const mdBasket: string;\nexport declare const mdBasketball: string;\nexport declare const mdBatteryCharging: string;\nexport declare const mdBatteryDead: string;\nexport declare const mdBatteryFull: string;\nexport declare const mdBeaker: string;\nexport declare const mdBed: string;\nexport declare const mdBeer: string;\nexport declare const mdBicycle: string;\nexport declare const mdBluetooth: string;\nexport declare const mdBoat: string;\nexport declare const mdBody: string;\nexport declare const mdBonfire: string;\nexport declare const mdBook: string;\nexport declare const mdBookmark: string;\nexport declare const mdBookmarks: string;\nexport declare const mdBowtie: string;\nexport declare const mdBriefcase: string;\nexport declare const mdBrowsers: string;\nexport declare const mdBrush: string;\nexport declare const mdBug: string;\nexport declare const mdBuild: string;\nexport declare const mdBulb: string;\nexport declare const mdBus: string;\nexport declare const mdBusiness: string;\nexport declare const mdCafe: string;\nexport declare const mdCalculator: string;\nexport declare const mdCalendar: string;\nexport declare const mdCall: string;\nexport declare const mdCamera: string;\nexport declare const mdCar: string;\nexport declare const mdCard: string;\nexport declare const mdCart: string;\nexport declare const mdCash: string;\nexport declare const mdCellular: string;\nexport declare const mdChatboxes: string;\nexport declare const mdChatbubbles: string;\nexport declare const mdCheckboxOutline: string;\nexport declare const mdCheckbox: string;\nexport declare const mdCheckmarkCircleOutline: string;\nexport declare const mdCheckmarkCircle: string;\nexport declare const mdCheckmark: string;\nexport declare const mdClipboard: string;\nexport declare const mdClock: string;\nexport declare const mdCloseCircleOutline: string;\nexport declare const mdCloseCircle: string;\nexport declare const mdClose: string;\nexport declare const mdCloudCircle: string;\nexport declare const mdCloudDone: string;\nexport declare const mdCloudDownload: string;\nexport declare const mdCloudOutline: string;\nexport declare const mdCloudUpload: string;\nexport declare const mdCloud: string;\nexport declare const mdCloudyNight: string;\nexport declare const mdCloudy: string;\nexport declare const mdCodeDownload: string;\nexport declare const mdCodeWorking: string;\nexport declare const mdCode: string;\nexport declare const mdCog: string;\nexport declare const mdColorFill: string;\nexport declare const mdColorFilter: string;\nexport declare const mdColorPalette: string;\nexport declare const mdColorWand: string;\nexport declare const mdCompass: string;\nexport declare const mdConstruct: string;\nexport declare const mdContact: string;\nexport declare const mdContacts: string;\nexport declare const mdContract: string;\nexport declare const mdContrast: string;\nexport declare const mdCopy: string;\nexport declare const mdCreate: string;\nexport declare const mdCrop: string;\nexport declare const mdCube: string;\nexport declare const mdCut: string;\nexport declare const mdDesktop: string;\nexport declare const mdDisc: string;\nexport declare const mdDocument: string;\nexport declare const mdDoneAll: string;\nexport declare const mdDownload: string;\nexport declare const mdEasel: string;\nexport declare const mdEgg: string;\nexport declare const mdExit: string;\nexport declare const mdExpand: string;\nexport declare const mdEyeOff: string;\nexport declare const mdEye: string;\nexport declare const mdFastforward: string;\nexport declare const mdFemale: string;\nexport declare const mdFiling: string;\nexport declare const mdFilm: string;\nexport declare const mdFingerPrint: string;\nexport declare const mdFitness: string;\nexport declare const mdFlag: string;\nexport declare const mdFlame: string;\nexport declare const mdFlashOff: string;\nexport declare const mdFlash: string;\nexport declare const mdFlashlight: string;\nexport declare const mdFlask: string;\nexport declare const mdFlower: string;\nexport declare const mdFolderOpen: string;\nexport declare const mdFolder: string;\nexport declare const mdFootball: string;\nexport declare const mdFunnel: string;\nexport declare const mdGift: string;\nexport declare const mdGitBranch: string;\nexport declare const mdGitCommit: string;\nexport declare const mdGitCompare: string;\nexport declare const mdGitMerge: string;\nexport declare const mdGitNetwork: string;\nexport declare const mdGitPullRequest: string;\nexport declare const mdGlasses: string;\nexport declare const mdGlobe: string;\nexport declare const mdGrid: string;\nexport declare const mdHammer: string;\nexport declare const mdHand: string;\nexport declare const mdHappy: string;\nexport declare const mdHeadset: string;\nexport declare const mdHeartDislike: string;\nexport declare const mdHeartEmpty: string;\nexport declare const mdHeartHalf: string;\nexport declare const mdHeart: string;\nexport declare const mdHelpBuoy: string;\nexport declare const mdHelpCircleOutline: string;\nexport declare const mdHelpCircle: string;\nexport declare const mdHelp: string;\nexport declare const mdHome: string;\nexport declare const mdHourglass: string;\nexport declare const mdIceCream: string;\nexport declare const mdImage: string;\nexport declare const mdImages: string;\nexport declare const mdInfinite: string;\nexport declare const mdInformationCircleOutline: string;\nexport declare const mdInformationCircle: string;\nexport declare const mdInformation: string;\nexport declare const mdJet: string;\nexport declare const mdJournal: string;\nexport declare const mdKey: string;\nexport declare const mdKeypad: string;\nexport declare const mdLaptop: string;\nexport declare const mdLeaf: string;\nexport declare const mdLink: string;\nexport declare const mdListBox: string;\nexport declare const mdList: string;\nexport declare const mdLocate: string;\nexport declare const mdLock: string;\nexport declare const mdLogIn: string;\nexport declare const mdLogOut: string;\nexport declare const mdMagnet: string;\nexport declare const mdMailOpen: string;\nexport declare const mdMailUnread: string;\nexport declare const mdMail: string;\nexport declare const mdMale: string;\nexport declare const mdMan: string;\nexport declare const mdMap: string;\nexport declare const mdMedal: string;\nexport declare const mdMedical: string;\nexport declare const mdMedkit: string;\nexport declare const mdMegaphone: string;\nexport declare const mdMenu: string;\nexport declare const mdMicOff: string;\nexport declare const mdMic: string;\nexport declare const mdMicrophone: string;\nexport declare const mdMoon: string;\nexport declare const mdMore: string;\nexport declare const mdMove: string;\nexport declare const mdMusicalNote: string;\nexport declare const mdMusicalNotes: string;\nexport declare const mdNavigate: string;\nexport declare const mdNotificationsOff: string;\nexport declare const mdNotificationsOutline: string;\nexport declare const mdNotifications: string;\nexport declare const mdNuclear: string;\nexport declare const mdNutrition: string;\nexport declare const mdOpen: string;\nexport declare const mdOptions: string;\nexport declare const mdOutlet: string;\nexport declare const mdPaperPlane: string;\nexport declare const mdPaper: string;\nexport declare const mdPartlySunny: string;\nexport declare const mdPause: string;\nexport declare const mdPaw: string;\nexport declare const mdPeople: string;\nexport declare const mdPersonAdd: string;\nexport declare const mdPerson: string;\nexport declare const mdPhoneLandscape: string;\nexport declare const mdPhonePortrait: string;\nexport declare const mdPhotos: string;\nexport declare const mdPie: string;\nexport declare const mdPin: string;\nexport declare const mdPint: string;\nexport declare const mdPizza: string;\nexport declare const mdPlanet: string;\nexport declare const mdPlayCircle: string;\nexport declare const mdPlay: string;\nexport declare const mdPodium: string;\nexport declare const mdPower: string;\nexport declare const mdPricetag: string;\nexport declare const mdPricetags: string;\nexport declare const mdPrint: string;\nexport declare const mdPulse: string;\nexport declare const mdQrScanner: string;\nexport declare const mdQuote: string;\nexport declare const mdRadioButtonOff: string;\nexport declare const mdRadioButtonOn: string;\nexport declare const mdRadio: string;\nexport declare const mdRainy: string;\nexport declare const mdRecording: string;\nexport declare const mdRedo: string;\nexport declare const mdRefreshCircle: string;\nexport declare const mdRefresh: string;\nexport declare const mdRemoveCircleOutline: string;\nexport declare const mdRemoveCircle: string;\nexport declare const mdRemove: string;\nexport declare const mdReorder: string;\nexport declare const mdRepeat: string;\nexport declare const mdResize: string;\nexport declare const mdRestaurant: string;\nexport declare const mdReturnLeft: string;\nexport declare const mdReturnRight: string;\nexport declare const mdReverseCamera: string;\nexport declare const mdRewind: string;\nexport declare const mdRibbon: string;\nexport declare const mdRocket: string;\nexport declare const mdRose: string;\nexport declare const mdSad: string;\nexport declare const mdSave: string;\nexport declare const mdSchool: string;\nexport declare const mdSearch: string;\nexport declare const mdSend: string;\nexport declare const mdSettings: string;\nexport declare const mdShareAlt: string;\nexport declare const mdShare: string;\nexport declare const mdShirt: string;\nexport declare const mdShuffle: string;\nexport declare const mdSkipBackward: string;\nexport declare const mdSkipForward: string;\nexport declare const mdSnow: string;\nexport declare const mdSpeedometer: string;\nexport declare const mdSquareOutline: string;\nexport declare const mdSquare: string;\nexport declare const mdStarHalf: string;\nexport declare const mdStarOutline: string;\nexport declare const mdStar: string;\nexport declare const mdStats: string;\nexport declare const mdStopwatch: string;\nexport declare const mdSubway: string;\nexport declare const mdSunny: string;\nexport declare const mdSwap: string;\nexport declare const mdSwitch: string;\nexport declare const mdSync: string;\nexport declare const mdTabletLandscape: string;\nexport declare const mdTabletPortrait: string;\nexport declare const mdTennisball: string;\nexport declare const mdText: string;\nexport declare const mdThermometer: string;\nexport declare const mdThumbsDown: string;\nexport declare const mdThumbsUp: string;\nexport declare const mdThunderstorm: string;\nexport declare const mdTime: string;\nexport declare const mdTimer: string;\nexport declare const mdToday: string;\nexport declare const mdTrain: string;\nexport declare const mdTransgender: string;\nexport declare const mdTrash: string;\nexport declare const mdTrendingDown: string;\nexport declare const mdTrendingUp: string;\nexport declare const mdTrophy: string;\nexport declare const mdTv: string;\nexport declare const mdUmbrella: string;\nexport declare const mdUndo: string;\nexport declare const mdUnlock: string;\nexport declare const mdVideocam: string;\nexport declare const mdVolumeHigh: string;\nexport declare const mdVolumeLow: string;\nexport declare const mdVolumeMute: string;\nexport declare const mdVolumeOff: string;\nexport declare const mdWalk: string;\nexport declare const mdWallet: string;\nexport declare const mdWarning: string;\nexport declare const mdWatch: string;\nexport declare const mdWater: string;\nexport declare const mdWifi: string;\nexport declare const mdWine: string;\nexport declare const mdWoman: string;\n"
  },
  {
    "path": "content/js/stencil/ionic-site-components/svg/index.esm.js",
    "content": "\nimport iosAddCircleOutline from './ios-add-circle-outline.svg';\nimport iosAddCircle from './ios-add-circle.svg';\nimport iosAdd from './ios-add.svg';\nimport iosAirplane from './ios-airplane.svg';\nimport iosAlarm from './ios-alarm.svg';\nimport iosAlbums from './ios-albums.svg';\nimport iosAlert from './ios-alert.svg';\nimport iosAmericanFootball from './ios-american-football.svg';\nimport iosAnalytics from './ios-analytics.svg';\nimport iosAperture from './ios-aperture.svg';\nimport iosApps from './ios-apps.svg';\nimport iosAppstore from './ios-appstore.svg';\nimport iosArchive from './ios-archive.svg';\nimport iosArrowBack from './ios-arrow-back.svg';\nimport iosArrowDown from './ios-arrow-down.svg';\nimport iosArrowDropdownCircle from './ios-arrow-dropdown-circle.svg';\nimport iosArrowDropdown from './ios-arrow-dropdown.svg';\nimport iosArrowDropleftCircle from './ios-arrow-dropleft-circle.svg';\nimport iosArrowDropleft from './ios-arrow-dropleft.svg';\nimport iosArrowDroprightCircle from './ios-arrow-dropright-circle.svg';\nimport iosArrowDropright from './ios-arrow-dropright.svg';\nimport iosArrowDropupCircle from './ios-arrow-dropup-circle.svg';\nimport iosArrowDropup from './ios-arrow-dropup.svg';\nimport iosArrowForward from './ios-arrow-forward.svg';\nimport iosArrowRoundBack from './ios-arrow-round-back.svg';\nimport iosArrowRoundDown from './ios-arrow-round-down.svg';\nimport iosArrowRoundForward from './ios-arrow-round-forward.svg';\nimport iosArrowRoundUp from './ios-arrow-round-up.svg';\nimport iosArrowUp from './ios-arrow-up.svg';\nimport iosAt from './ios-at.svg';\nimport iosAttach from './ios-attach.svg';\nimport iosBackspace from './ios-backspace.svg';\nimport iosBarcode from './ios-barcode.svg';\nimport iosBaseball from './ios-baseball.svg';\nimport iosBasket from './ios-basket.svg';\nimport iosBasketball from './ios-basketball.svg';\nimport iosBatteryCharging from './ios-battery-charging.svg';\nimport iosBatteryDead from './ios-battery-dead.svg';\nimport iosBatteryFull from './ios-battery-full.svg';\nimport iosBeaker from './ios-beaker.svg';\nimport iosBed from './ios-bed.svg';\nimport iosBeer from './ios-beer.svg';\nimport iosBicycle from './ios-bicycle.svg';\nimport iosBluetooth from './ios-bluetooth.svg';\nimport iosBoat from './ios-boat.svg';\nimport iosBody from './ios-body.svg';\nimport iosBonfire from './ios-bonfire.svg';\nimport iosBook from './ios-book.svg';\nimport iosBookmark from './ios-bookmark.svg';\nimport iosBookmarks from './ios-bookmarks.svg';\nimport iosBowtie from './ios-bowtie.svg';\nimport iosBriefcase from './ios-briefcase.svg';\nimport iosBrowsers from './ios-browsers.svg';\nimport iosBrush from './ios-brush.svg';\nimport iosBug from './ios-bug.svg';\nimport iosBuild from './ios-build.svg';\nimport iosBulb from './ios-bulb.svg';\nimport iosBus from './ios-bus.svg';\nimport iosBusiness from './ios-business.svg';\nimport iosCafe from './ios-cafe.svg';\nimport iosCalculator from './ios-calculator.svg';\nimport iosCalendar from './ios-calendar.svg';\nimport iosCall from './ios-call.svg';\nimport iosCamera from './ios-camera.svg';\nimport iosCar from './ios-car.svg';\nimport iosCard from './ios-card.svg';\nimport iosCart from './ios-cart.svg';\nimport iosCash from './ios-cash.svg';\nimport iosCellular from './ios-cellular.svg';\nimport iosChatboxes from './ios-chatboxes.svg';\nimport iosChatbubbles from './ios-chatbubbles.svg';\nimport iosCheckboxOutline from './ios-checkbox-outline.svg';\nimport iosCheckbox from './ios-checkbox.svg';\nimport iosCheckmarkCircleOutline from './ios-checkmark-circle-outline.svg';\nimport iosCheckmarkCircle from './ios-checkmark-circle.svg';\nimport iosCheckmark from './ios-checkmark.svg';\nimport iosClipboard from './ios-clipboard.svg';\nimport iosClock from './ios-clock.svg';\nimport iosCloseCircleOutline from './ios-close-circle-outline.svg';\nimport iosCloseCircle from './ios-close-circle.svg';\nimport iosClose from './ios-close.svg';\nimport iosCloudCircle from './ios-cloud-circle.svg';\nimport iosCloudDone from './ios-cloud-done.svg';\nimport iosCloudDownload from './ios-cloud-download.svg';\nimport iosCloudOutline from './ios-cloud-outline.svg';\nimport iosCloudUpload from './ios-cloud-upload.svg';\nimport iosCloud from './ios-cloud.svg';\nimport iosCloudyNight from './ios-cloudy-night.svg';\nimport iosCloudy from './ios-cloudy.svg';\nimport iosCodeDownload from './ios-code-download.svg';\nimport iosCodeWorking from './ios-code-working.svg';\nimport iosCode from './ios-code.svg';\nimport iosCog from './ios-cog.svg';\nimport iosColorFill from './ios-color-fill.svg';\nimport iosColorFilter from './ios-color-filter.svg';\nimport iosColorPalette from './ios-color-palette.svg';\nimport iosColorWand from './ios-color-wand.svg';\nimport iosCompass from './ios-compass.svg';\nimport iosConstruct from './ios-construct.svg';\nimport iosContact from './ios-contact.svg';\nimport iosContacts from './ios-contacts.svg';\nimport iosContract from './ios-contract.svg';\nimport iosContrast from './ios-contrast.svg';\nimport iosCopy from './ios-copy.svg';\nimport iosCreate from './ios-create.svg';\nimport iosCrop from './ios-crop.svg';\nimport iosCube from './ios-cube.svg';\nimport iosCut from './ios-cut.svg';\nimport iosDesktop from './ios-desktop.svg';\nimport iosDisc from './ios-disc.svg';\nimport iosDocument from './ios-document.svg';\nimport iosDoneAll from './ios-done-all.svg';\nimport iosDownload from './ios-download.svg';\nimport iosEasel from './ios-easel.svg';\nimport iosEgg from './ios-egg.svg';\nimport iosExit from './ios-exit.svg';\nimport iosExpand from './ios-expand.svg';\nimport iosEyeOff from './ios-eye-off.svg';\nimport iosEye from './ios-eye.svg';\nimport iosFastforward from './ios-fastforward.svg';\nimport iosFemale from './ios-female.svg';\nimport iosFiling from './ios-filing.svg';\nimport iosFilm from './ios-film.svg';\nimport iosFingerPrint from './ios-finger-print.svg';\nimport iosFitness from './ios-fitness.svg';\nimport iosFlag from './ios-flag.svg';\nimport iosFlame from './ios-flame.svg';\nimport iosFlashOff from './ios-flash-off.svg';\nimport iosFlash from './ios-flash.svg';\nimport iosFlashlight from './ios-flashlight.svg';\nimport iosFlask from './ios-flask.svg';\nimport iosFlower from './ios-flower.svg';\nimport iosFolderOpen from './ios-folder-open.svg';\nimport iosFolder from './ios-folder.svg';\nimport iosFootball from './ios-football.svg';\nimport iosFunnel from './ios-funnel.svg';\nimport iosGift from './ios-gift.svg';\nimport iosGitBranch from './ios-git-branch.svg';\nimport iosGitCommit from './ios-git-commit.svg';\nimport iosGitCompare from './ios-git-compare.svg';\nimport iosGitMerge from './ios-git-merge.svg';\nimport iosGitNetwork from './ios-git-network.svg';\nimport iosGitPullRequest from './ios-git-pull-request.svg';\nimport iosGlasses from './ios-glasses.svg';\nimport iosGlobe from './ios-globe.svg';\nimport iosGrid from './ios-grid.svg';\nimport iosHammer from './ios-hammer.svg';\nimport iosHand from './ios-hand.svg';\nimport iosHappy from './ios-happy.svg';\nimport iosHeadset from './ios-headset.svg';\nimport iosHeartDislike from './ios-heart-dislike.svg';\nimport iosHeartEmpty from './ios-heart-empty.svg';\nimport iosHeartHalf from './ios-heart-half.svg';\nimport iosHeart from './ios-heart.svg';\nimport iosHelpBuoy from './ios-help-buoy.svg';\nimport iosHelpCircleOutline from './ios-help-circle-outline.svg';\nimport iosHelpCircle from './ios-help-circle.svg';\nimport iosHelp from './ios-help.svg';\nimport iosHome from './ios-home.svg';\nimport iosHourglass from './ios-hourglass.svg';\nimport iosIceCream from './ios-ice-cream.svg';\nimport iosImage from './ios-image.svg';\nimport iosImages from './ios-images.svg';\nimport iosInfinite from './ios-infinite.svg';\nimport iosInformationCircleOutline from './ios-information-circle-outline.svg';\nimport iosInformationCircle from './ios-information-circle.svg';\nimport iosInformation from './ios-information.svg';\nimport iosJet from './ios-jet.svg';\nimport iosJournal from './ios-journal.svg';\nimport iosKey from './ios-key.svg';\nimport iosKeypad from './ios-keypad.svg';\nimport iosLaptop from './ios-laptop.svg';\nimport iosLeaf from './ios-leaf.svg';\nimport iosLink from './ios-link.svg';\nimport iosListBox from './ios-list-box.svg';\nimport iosList from './ios-list.svg';\nimport iosLocate from './ios-locate.svg';\nimport iosLock from './ios-lock.svg';\nimport iosLogIn from './ios-log-in.svg';\nimport iosLogOut from './ios-log-out.svg';\nimport iosMagnet from './ios-magnet.svg';\nimport iosMailOpen from './ios-mail-open.svg';\nimport iosMailUnread from './ios-mail-unread.svg';\nimport iosMail from './ios-mail.svg';\nimport iosMale from './ios-male.svg';\nimport iosMan from './ios-man.svg';\nimport iosMap from './ios-map.svg';\nimport iosMedal from './ios-medal.svg';\nimport iosMedical from './ios-medical.svg';\nimport iosMedkit from './ios-medkit.svg';\nimport iosMegaphone from './ios-megaphone.svg';\nimport iosMenu from './ios-menu.svg';\nimport iosMicOff from './ios-mic-off.svg';\nimport iosMic from './ios-mic.svg';\nimport iosMicrophone from './ios-microphone.svg';\nimport iosMoon from './ios-moon.svg';\nimport iosMore from './ios-more.svg';\nimport iosMove from './ios-move.svg';\nimport iosMusicalNote from './ios-musical-note.svg';\nimport iosMusicalNotes from './ios-musical-notes.svg';\nimport iosNavigate from './ios-navigate.svg';\nimport iosNotificationsOff from './ios-notifications-off.svg';\nimport iosNotificationsOutline from './ios-notifications-outline.svg';\nimport iosNotifications from './ios-notifications.svg';\nimport iosNuclear from './ios-nuclear.svg';\nimport iosNutrition from './ios-nutrition.svg';\nimport iosOpen from './ios-open.svg';\nimport iosOptions from './ios-options.svg';\nimport iosOutlet from './ios-outlet.svg';\nimport iosPaperPlane from './ios-paper-plane.svg';\nimport iosPaper from './ios-paper.svg';\nimport iosPartlySunny from './ios-partly-sunny.svg';\nimport iosPause from './ios-pause.svg';\nimport iosPaw from './ios-paw.svg';\nimport iosPeople from './ios-people.svg';\nimport iosPersonAdd from './ios-person-add.svg';\nimport iosPerson from './ios-person.svg';\nimport iosPhoneLandscape from './ios-phone-landscape.svg';\nimport iosPhonePortrait from './ios-phone-portrait.svg';\nimport iosPhotos from './ios-photos.svg';\nimport iosPie from './ios-pie.svg';\nimport iosPin from './ios-pin.svg';\nimport iosPint from './ios-pint.svg';\nimport iosPizza from './ios-pizza.svg';\nimport iosPlanet from './ios-planet.svg';\nimport iosPlayCircle from './ios-play-circle.svg';\nimport iosPlay from './ios-play.svg';\nimport iosPodium from './ios-podium.svg';\nimport iosPower from './ios-power.svg';\nimport iosPricetag from './ios-pricetag.svg';\nimport iosPricetags from './ios-pricetags.svg';\nimport iosPrint from './ios-print.svg';\nimport iosPulse from './ios-pulse.svg';\nimport iosQrScanner from './ios-qr-scanner.svg';\nimport iosQuote from './ios-quote.svg';\nimport iosRadioButtonOff from './ios-radio-button-off.svg';\nimport iosRadioButtonOn from './ios-radio-button-on.svg';\nimport iosRadio from './ios-radio.svg';\nimport iosRainy from './ios-rainy.svg';\nimport iosRecording from './ios-recording.svg';\nimport iosRedo from './ios-redo.svg';\nimport iosRefreshCircle from './ios-refresh-circle.svg';\nimport iosRefresh from './ios-refresh.svg';\nimport iosRemoveCircleOutline from './ios-remove-circle-outline.svg';\nimport iosRemoveCircle from './ios-remove-circle.svg';\nimport iosRemove from './ios-remove.svg';\nimport iosReorder from './ios-reorder.svg';\nimport iosRepeat from './ios-repeat.svg';\nimport iosResize from './ios-resize.svg';\nimport iosRestaurant from './ios-restaurant.svg';\nimport iosReturnLeft from './ios-return-left.svg';\nimport iosReturnRight from './ios-return-right.svg';\nimport iosReverseCamera from './ios-reverse-camera.svg';\nimport iosRewind from './ios-rewind.svg';\nimport iosRibbon from './ios-ribbon.svg';\nimport iosRocket from './ios-rocket.svg';\nimport iosRose from './ios-rose.svg';\nimport iosSad from './ios-sad.svg';\nimport iosSave from './ios-save.svg';\nimport iosSchool from './ios-school.svg';\nimport iosSearch from './ios-search.svg';\nimport iosSend from './ios-send.svg';\nimport iosSettings from './ios-settings.svg';\nimport iosShareAlt from './ios-share-alt.svg';\nimport iosShare from './ios-share.svg';\nimport iosShirt from './ios-shirt.svg';\nimport iosShuffle from './ios-shuffle.svg';\nimport iosSkipBackward from './ios-skip-backward.svg';\nimport iosSkipForward from './ios-skip-forward.svg';\nimport iosSnow from './ios-snow.svg';\nimport iosSpeedometer from './ios-speedometer.svg';\nimport iosSquareOutline from './ios-square-outline.svg';\nimport iosSquare from './ios-square.svg';\nimport iosStarHalf from './ios-star-half.svg';\nimport iosStarOutline from './ios-star-outline.svg';\nimport iosStar from './ios-star.svg';\nimport iosStats from './ios-stats.svg';\nimport iosStopwatch from './ios-stopwatch.svg';\nimport iosSubway from './ios-subway.svg';\nimport iosSunny from './ios-sunny.svg';\nimport iosSwap from './ios-swap.svg';\nimport iosSwitch from './ios-switch.svg';\nimport iosSync from './ios-sync.svg';\nimport iosTabletLandscape from './ios-tablet-landscape.svg';\nimport iosTabletPortrait from './ios-tablet-portrait.svg';\nimport iosTennisball from './ios-tennisball.svg';\nimport iosText from './ios-text.svg';\nimport iosThermometer from './ios-thermometer.svg';\nimport iosThumbsDown from './ios-thumbs-down.svg';\nimport iosThumbsUp from './ios-thumbs-up.svg';\nimport iosThunderstorm from './ios-thunderstorm.svg';\nimport iosTime from './ios-time.svg';\nimport iosTimer from './ios-timer.svg';\nimport iosToday from './ios-today.svg';\nimport iosTrain from './ios-train.svg';\nimport iosTransgender from './ios-transgender.svg';\nimport iosTrash from './ios-trash.svg';\nimport iosTrendingDown from './ios-trending-down.svg';\nimport iosTrendingUp from './ios-trending-up.svg';\nimport iosTrophy from './ios-trophy.svg';\nimport iosTv from './ios-tv.svg';\nimport iosUmbrella from './ios-umbrella.svg';\nimport iosUndo from './ios-undo.svg';\nimport iosUnlock from './ios-unlock.svg';\nimport iosVideocam from './ios-videocam.svg';\nimport iosVolumeHigh from './ios-volume-high.svg';\nimport iosVolumeLow from './ios-volume-low.svg';\nimport iosVolumeMute from './ios-volume-mute.svg';\nimport iosVolumeOff from './ios-volume-off.svg';\nimport iosWalk from './ios-walk.svg';\nimport iosWallet from './ios-wallet.svg';\nimport iosWarning from './ios-warning.svg';\nimport iosWatch from './ios-watch.svg';\nimport iosWater from './ios-water.svg';\nimport iosWifi from './ios-wifi.svg';\nimport iosWine from './ios-wine.svg';\nimport iosWoman from './ios-woman.svg';\nimport logoAndroid from './logo-android.svg';\nimport logoAngular from './logo-angular.svg';\nimport logoApple from './logo-apple.svg';\nimport logoBitbucket from './logo-bitbucket.svg';\nimport logoBitcoin from './logo-bitcoin.svg';\nimport logoBuffer from './logo-buffer.svg';\nimport logoChrome from './logo-chrome.svg';\nimport logoClosedCaptioning from './logo-closed-captioning.svg';\nimport logoCodepen from './logo-codepen.svg';\nimport logoCss3 from './logo-css3.svg';\nimport logoDesignernews from './logo-designernews.svg';\nimport logoDribbble from './logo-dribbble.svg';\nimport logoDropbox from './logo-dropbox.svg';\nimport logoEuro from './logo-euro.svg';\nimport logoFacebook from './logo-facebook.svg';\nimport logoFlickr from './logo-flickr.svg';\nimport logoFoursquare from './logo-foursquare.svg';\nimport logoFreebsdDevil from './logo-freebsd-devil.svg';\nimport logoGameControllerA from './logo-game-controller-a.svg';\nimport logoGameControllerB from './logo-game-controller-b.svg';\nimport logoGithub from './logo-github.svg';\nimport logoGoogle from './logo-google.svg';\nimport logoGoogleplus from './logo-googleplus.svg';\nimport logoHackernews from './logo-hackernews.svg';\nimport logoHtml5 from './logo-html5.svg';\nimport logoInstagram from './logo-instagram.svg';\nimport logoIonic from './logo-ionic.svg';\nimport logoIonitron from './logo-ionitron.svg';\nimport logoJavascript from './logo-javascript.svg';\nimport logoLinkedin from './logo-linkedin.svg';\nimport logoMarkdown from './logo-markdown.svg';\nimport logoModelS from './logo-model-s.svg';\nimport logoNoSmoking from './logo-no-smoking.svg';\nimport logoNodejs from './logo-nodejs.svg';\nimport logoNpm from './logo-npm.svg';\nimport logoOctocat from './logo-octocat.svg';\nimport logoPinterest from './logo-pinterest.svg';\nimport logoPlaystation from './logo-playstation.svg';\nimport logoPolymer from './logo-polymer.svg';\nimport logoPython from './logo-python.svg';\nimport logoReddit from './logo-reddit.svg';\nimport logoRss from './logo-rss.svg';\nimport logoSass from './logo-sass.svg';\nimport logoSkype from './logo-skype.svg';\nimport logoSlack from './logo-slack.svg';\nimport logoSnapchat from './logo-snapchat.svg';\nimport logoSteam from './logo-steam.svg';\nimport logoTumblr from './logo-tumblr.svg';\nimport logoTux from './logo-tux.svg';\nimport logoTwitch from './logo-twitch.svg';\nimport logoTwitter from './logo-twitter.svg';\nimport logoUsd from './logo-usd.svg';\nimport logoVimeo from './logo-vimeo.svg';\nimport logoVk from './logo-vk.svg';\nimport logoWhatsapp from './logo-whatsapp.svg';\nimport logoWindows from './logo-windows.svg';\nimport logoWordpress from './logo-wordpress.svg';\nimport logoXbox from './logo-xbox.svg';\nimport logoXing from './logo-xing.svg';\nimport logoYahoo from './logo-yahoo.svg';\nimport logoYen from './logo-yen.svg';\nimport logoYoutube from './logo-youtube.svg';\nimport mdAddCircleOutline from './md-add-circle-outline.svg';\nimport mdAddCircle from './md-add-circle.svg';\nimport mdAdd from './md-add.svg';\nimport mdAirplane from './md-airplane.svg';\nimport mdAlarm from './md-alarm.svg';\nimport mdAlbums from './md-albums.svg';\nimport mdAlert from './md-alert.svg';\nimport mdAmericanFootball from './md-american-football.svg';\nimport mdAnalytics from './md-analytics.svg';\nimport mdAperture from './md-aperture.svg';\nimport mdApps from './md-apps.svg';\nimport mdAppstore from './md-appstore.svg';\nimport mdArchive from './md-archive.svg';\nimport mdArrowBack from './md-arrow-back.svg';\nimport mdArrowDown from './md-arrow-down.svg';\nimport mdArrowDropdownCircle from './md-arrow-dropdown-circle.svg';\nimport mdArrowDropdown from './md-arrow-dropdown.svg';\nimport mdArrowDropleftCircle from './md-arrow-dropleft-circle.svg';\nimport mdArrowDropleft from './md-arrow-dropleft.svg';\nimport mdArrowDroprightCircle from './md-arrow-dropright-circle.svg';\nimport mdArrowDropright from './md-arrow-dropright.svg';\nimport mdArrowDropupCircle from './md-arrow-dropup-circle.svg';\nimport mdArrowDropup from './md-arrow-dropup.svg';\nimport mdArrowForward from './md-arrow-forward.svg';\nimport mdArrowRoundBack from './md-arrow-round-back.svg';\nimport mdArrowRoundDown from './md-arrow-round-down.svg';\nimport mdArrowRoundForward from './md-arrow-round-forward.svg';\nimport mdArrowRoundUp from './md-arrow-round-up.svg';\nimport mdArrowUp from './md-arrow-up.svg';\nimport mdAt from './md-at.svg';\nimport mdAttach from './md-attach.svg';\nimport mdBackspace from './md-backspace.svg';\nimport mdBarcode from './md-barcode.svg';\nimport mdBaseball from './md-baseball.svg';\nimport mdBasket from './md-basket.svg';\nimport mdBasketball from './md-basketball.svg';\nimport mdBatteryCharging from './md-battery-charging.svg';\nimport mdBatteryDead from './md-battery-dead.svg';\nimport mdBatteryFull from './md-battery-full.svg';\nimport mdBeaker from './md-beaker.svg';\nimport mdBed from './md-bed.svg';\nimport mdBeer from './md-beer.svg';\nimport mdBicycle from './md-bicycle.svg';\nimport mdBluetooth from './md-bluetooth.svg';\nimport mdBoat from './md-boat.svg';\nimport mdBody from './md-body.svg';\nimport mdBonfire from './md-bonfire.svg';\nimport mdBook from './md-book.svg';\nimport mdBookmark from './md-bookmark.svg';\nimport mdBookmarks from './md-bookmarks.svg';\nimport mdBowtie from './md-bowtie.svg';\nimport mdBriefcase from './md-briefcase.svg';\nimport mdBrowsers from './md-browsers.svg';\nimport mdBrush from './md-brush.svg';\nimport mdBug from './md-bug.svg';\nimport mdBuild from './md-build.svg';\nimport mdBulb from './md-bulb.svg';\nimport mdBus from './md-bus.svg';\nimport mdBusiness from './md-business.svg';\nimport mdCafe from './md-cafe.svg';\nimport mdCalculator from './md-calculator.svg';\nimport mdCalendar from './md-calendar.svg';\nimport mdCall from './md-call.svg';\nimport mdCamera from './md-camera.svg';\nimport mdCar from './md-car.svg';\nimport mdCard from './md-card.svg';\nimport mdCart from './md-cart.svg';\nimport mdCash from './md-cash.svg';\nimport mdCellular from './md-cellular.svg';\nimport mdChatboxes from './md-chatboxes.svg';\nimport mdChatbubbles from './md-chatbubbles.svg';\nimport mdCheckboxOutline from './md-checkbox-outline.svg';\nimport mdCheckbox from './md-checkbox.svg';\nimport mdCheckmarkCircleOutline from './md-checkmark-circle-outline.svg';\nimport mdCheckmarkCircle from './md-checkmark-circle.svg';\nimport mdCheckmark from './md-checkmark.svg';\nimport mdClipboard from './md-clipboard.svg';\nimport mdClock from './md-clock.svg';\nimport mdCloseCircleOutline from './md-close-circle-outline.svg';\nimport mdCloseCircle from './md-close-circle.svg';\nimport mdClose from './md-close.svg';\nimport mdCloudCircle from './md-cloud-circle.svg';\nimport mdCloudDone from './md-cloud-done.svg';\nimport mdCloudDownload from './md-cloud-download.svg';\nimport mdCloudOutline from './md-cloud-outline.svg';\nimport mdCloudUpload from './md-cloud-upload.svg';\nimport mdCloud from './md-cloud.svg';\nimport mdCloudyNight from './md-cloudy-night.svg';\nimport mdCloudy from './md-cloudy.svg';\nimport mdCodeDownload from './md-code-download.svg';\nimport mdCodeWorking from './md-code-working.svg';\nimport mdCode from './md-code.svg';\nimport mdCog from './md-cog.svg';\nimport mdColorFill from './md-color-fill.svg';\nimport mdColorFilter from './md-color-filter.svg';\nimport mdColorPalette from './md-color-palette.svg';\nimport mdColorWand from './md-color-wand.svg';\nimport mdCompass from './md-compass.svg';\nimport mdConstruct from './md-construct.svg';\nimport mdContact from './md-contact.svg';\nimport mdContacts from './md-contacts.svg';\nimport mdContract from './md-contract.svg';\nimport mdContrast from './md-contrast.svg';\nimport mdCopy from './md-copy.svg';\nimport mdCreate from './md-create.svg';\nimport mdCrop from './md-crop.svg';\nimport mdCube from './md-cube.svg';\nimport mdCut from './md-cut.svg';\nimport mdDesktop from './md-desktop.svg';\nimport mdDisc from './md-disc.svg';\nimport mdDocument from './md-document.svg';\nimport mdDoneAll from './md-done-all.svg';\nimport mdDownload from './md-download.svg';\nimport mdEasel from './md-easel.svg';\nimport mdEgg from './md-egg.svg';\nimport mdExit from './md-exit.svg';\nimport mdExpand from './md-expand.svg';\nimport mdEyeOff from './md-eye-off.svg';\nimport mdEye from './md-eye.svg';\nimport mdFastforward from './md-fastforward.svg';\nimport mdFemale from './md-female.svg';\nimport mdFiling from './md-filing.svg';\nimport mdFilm from './md-film.svg';\nimport mdFingerPrint from './md-finger-print.svg';\nimport mdFitness from './md-fitness.svg';\nimport mdFlag from './md-flag.svg';\nimport mdFlame from './md-flame.svg';\nimport mdFlashOff from './md-flash-off.svg';\nimport mdFlash from './md-flash.svg';\nimport mdFlashlight from './md-flashlight.svg';\nimport mdFlask from './md-flask.svg';\nimport mdFlower from './md-flower.svg';\nimport mdFolderOpen from './md-folder-open.svg';\nimport mdFolder from './md-folder.svg';\nimport mdFootball from './md-football.svg';\nimport mdFunnel from './md-funnel.svg';\nimport mdGift from './md-gift.svg';\nimport mdGitBranch from './md-git-branch.svg';\nimport mdGitCommit from './md-git-commit.svg';\nimport mdGitCompare from './md-git-compare.svg';\nimport mdGitMerge from './md-git-merge.svg';\nimport mdGitNetwork from './md-git-network.svg';\nimport mdGitPullRequest from './md-git-pull-request.svg';\nimport mdGlasses from './md-glasses.svg';\nimport mdGlobe from './md-globe.svg';\nimport mdGrid from './md-grid.svg';\nimport mdHammer from './md-hammer.svg';\nimport mdHand from './md-hand.svg';\nimport mdHappy from './md-happy.svg';\nimport mdHeadset from './md-headset.svg';\nimport mdHeartDislike from './md-heart-dislike.svg';\nimport mdHeartEmpty from './md-heart-empty.svg';\nimport mdHeartHalf from './md-heart-half.svg';\nimport mdHeart from './md-heart.svg';\nimport mdHelpBuoy from './md-help-buoy.svg';\nimport mdHelpCircleOutline from './md-help-circle-outline.svg';\nimport mdHelpCircle from './md-help-circle.svg';\nimport mdHelp from './md-help.svg';\nimport mdHome from './md-home.svg';\nimport mdHourglass from './md-hourglass.svg';\nimport mdIceCream from './md-ice-cream.svg';\nimport mdImage from './md-image.svg';\nimport mdImages from './md-images.svg';\nimport mdInfinite from './md-infinite.svg';\nimport mdInformationCircleOutline from './md-information-circle-outline.svg';\nimport mdInformationCircle from './md-information-circle.svg';\nimport mdInformation from './md-information.svg';\nimport mdJet from './md-jet.svg';\nimport mdJournal from './md-journal.svg';\nimport mdKey from './md-key.svg';\nimport mdKeypad from './md-keypad.svg';\nimport mdLaptop from './md-laptop.svg';\nimport mdLeaf from './md-leaf.svg';\nimport mdLink from './md-link.svg';\nimport mdListBox from './md-list-box.svg';\nimport mdList from './md-list.svg';\nimport mdLocate from './md-locate.svg';\nimport mdLock from './md-lock.svg';\nimport mdLogIn from './md-log-in.svg';\nimport mdLogOut from './md-log-out.svg';\nimport mdMagnet from './md-magnet.svg';\nimport mdMailOpen from './md-mail-open.svg';\nimport mdMailUnread from './md-mail-unread.svg';\nimport mdMail from './md-mail.svg';\nimport mdMale from './md-male.svg';\nimport mdMan from './md-man.svg';\nimport mdMap from './md-map.svg';\nimport mdMedal from './md-medal.svg';\nimport mdMedical from './md-medical.svg';\nimport mdMedkit from './md-medkit.svg';\nimport mdMegaphone from './md-megaphone.svg';\nimport mdMenu from './md-menu.svg';\nimport mdMicOff from './md-mic-off.svg';\nimport mdMic from './md-mic.svg';\nimport mdMicrophone from './md-microphone.svg';\nimport mdMoon from './md-moon.svg';\nimport mdMore from './md-more.svg';\nimport mdMove from './md-move.svg';\nimport mdMusicalNote from './md-musical-note.svg';\nimport mdMusicalNotes from './md-musical-notes.svg';\nimport mdNavigate from './md-navigate.svg';\nimport mdNotificationsOff from './md-notifications-off.svg';\nimport mdNotificationsOutline from './md-notifications-outline.svg';\nimport mdNotifications from './md-notifications.svg';\nimport mdNuclear from './md-nuclear.svg';\nimport mdNutrition from './md-nutrition.svg';\nimport mdOpen from './md-open.svg';\nimport mdOptions from './md-options.svg';\nimport mdOutlet from './md-outlet.svg';\nimport mdPaperPlane from './md-paper-plane.svg';\nimport mdPaper from './md-paper.svg';\nimport mdPartlySunny from './md-partly-sunny.svg';\nimport mdPause from './md-pause.svg';\nimport mdPaw from './md-paw.svg';\nimport mdPeople from './md-people.svg';\nimport mdPersonAdd from './md-person-add.svg';\nimport mdPerson from './md-person.svg';\nimport mdPhoneLandscape from './md-phone-landscape.svg';\nimport mdPhonePortrait from './md-phone-portrait.svg';\nimport mdPhotos from './md-photos.svg';\nimport mdPie from './md-pie.svg';\nimport mdPin from './md-pin.svg';\nimport mdPint from './md-pint.svg';\nimport mdPizza from './md-pizza.svg';\nimport mdPlanet from './md-planet.svg';\nimport mdPlayCircle from './md-play-circle.svg';\nimport mdPlay from './md-play.svg';\nimport mdPodium from './md-podium.svg';\nimport mdPower from './md-power.svg';\nimport mdPricetag from './md-pricetag.svg';\nimport mdPricetags from './md-pricetags.svg';\nimport mdPrint from './md-print.svg';\nimport mdPulse from './md-pulse.svg';\nimport mdQrScanner from './md-qr-scanner.svg';\nimport mdQuote from './md-quote.svg';\nimport mdRadioButtonOff from './md-radio-button-off.svg';\nimport mdRadioButtonOn from './md-radio-button-on.svg';\nimport mdRadio from './md-radio.svg';\nimport mdRainy from './md-rainy.svg';\nimport mdRecording from './md-recording.svg';\nimport mdRedo from './md-redo.svg';\nimport mdRefreshCircle from './md-refresh-circle.svg';\nimport mdRefresh from './md-refresh.svg';\nimport mdRemoveCircleOutline from './md-remove-circle-outline.svg';\nimport mdRemoveCircle from './md-remove-circle.svg';\nimport mdRemove from './md-remove.svg';\nimport mdReorder from './md-reorder.svg';\nimport mdRepeat from './md-repeat.svg';\nimport mdResize from './md-resize.svg';\nimport mdRestaurant from './md-restaurant.svg';\nimport mdReturnLeft from './md-return-left.svg';\nimport mdReturnRight from './md-return-right.svg';\nimport mdReverseCamera from './md-reverse-camera.svg';\nimport mdRewind from './md-rewind.svg';\nimport mdRibbon from './md-ribbon.svg';\nimport mdRocket from './md-rocket.svg';\nimport mdRose from './md-rose.svg';\nimport mdSad from './md-sad.svg';\nimport mdSave from './md-save.svg';\nimport mdSchool from './md-school.svg';\nimport mdSearch from './md-search.svg';\nimport mdSend from './md-send.svg';\nimport mdSettings from './md-settings.svg';\nimport mdShareAlt from './md-share-alt.svg';\nimport mdShare from './md-share.svg';\nimport mdShirt from './md-shirt.svg';\nimport mdShuffle from './md-shuffle.svg';\nimport mdSkipBackward from './md-skip-backward.svg';\nimport mdSkipForward from './md-skip-forward.svg';\nimport mdSnow from './md-snow.svg';\nimport mdSpeedometer from './md-speedometer.svg';\nimport mdSquareOutline from './md-square-outline.svg';\nimport mdSquare from './md-square.svg';\nimport mdStarHalf from './md-star-half.svg';\nimport mdStarOutline from './md-star-outline.svg';\nimport mdStar from './md-star.svg';\nimport mdStats from './md-stats.svg';\nimport mdStopwatch from './md-stopwatch.svg';\nimport mdSubway from './md-subway.svg';\nimport mdSunny from './md-sunny.svg';\nimport mdSwap from './md-swap.svg';\nimport mdSwitch from './md-switch.svg';\nimport mdSync from './md-sync.svg';\nimport mdTabletLandscape from './md-tablet-landscape.svg';\nimport mdTabletPortrait from './md-tablet-portrait.svg';\nimport mdTennisball from './md-tennisball.svg';\nimport mdText from './md-text.svg';\nimport mdThermometer from './md-thermometer.svg';\nimport mdThumbsDown from './md-thumbs-down.svg';\nimport mdThumbsUp from './md-thumbs-up.svg';\nimport mdThunderstorm from './md-thunderstorm.svg';\nimport mdTime from './md-time.svg';\nimport mdTimer from './md-timer.svg';\nimport mdToday from './md-today.svg';\nimport mdTrain from './md-train.svg';\nimport mdTransgender from './md-transgender.svg';\nimport mdTrash from './md-trash.svg';\nimport mdTrendingDown from './md-trending-down.svg';\nimport mdTrendingUp from './md-trending-up.svg';\nimport mdTrophy from './md-trophy.svg';\nimport mdTv from './md-tv.svg';\nimport mdUmbrella from './md-umbrella.svg';\nimport mdUndo from './md-undo.svg';\nimport mdUnlock from './md-unlock.svg';\nimport mdVideocam from './md-videocam.svg';\nimport mdVolumeHigh from './md-volume-high.svg';\nimport mdVolumeLow from './md-volume-low.svg';\nimport mdVolumeMute from './md-volume-mute.svg';\nimport mdVolumeOff from './md-volume-off.svg';\nimport mdWalk from './md-walk.svg';\nimport mdWallet from './md-wallet.svg';\nimport mdWarning from './md-warning.svg';\nimport mdWatch from './md-watch.svg';\nimport mdWater from './md-water.svg';\nimport mdWifi from './md-wifi.svg';\nimport mdWine from './md-wine.svg';\nimport mdWoman from './md-woman.svg';\n\nexport var ICON_PATHS = {\n  'ios-add-circle-outline': iosAddCircleOutline,\n  'ios-add-circle': iosAddCircle,\n  'ios-add': iosAdd,\n  'ios-airplane': iosAirplane,\n  'ios-alarm': iosAlarm,\n  'ios-albums': iosAlbums,\n  'ios-alert': iosAlert,\n  'ios-american-football': iosAmericanFootball,\n  'ios-analytics': iosAnalytics,\n  'ios-aperture': iosAperture,\n  'ios-apps': iosApps,\n  'ios-appstore': iosAppstore,\n  'ios-archive': iosArchive,\n  'ios-arrow-back': iosArrowBack,\n  'ios-arrow-down': iosArrowDown,\n  'ios-arrow-dropdown-circle': iosArrowDropdownCircle,\n  'ios-arrow-dropdown': iosArrowDropdown,\n  'ios-arrow-dropleft-circle': iosArrowDropleftCircle,\n  'ios-arrow-dropleft': iosArrowDropleft,\n  'ios-arrow-dropright-circle': iosArrowDroprightCircle,\n  'ios-arrow-dropright': iosArrowDropright,\n  'ios-arrow-dropup-circle': iosArrowDropupCircle,\n  'ios-arrow-dropup': iosArrowDropup,\n  'ios-arrow-forward': iosArrowForward,\n  'ios-arrow-round-back': iosArrowRoundBack,\n  'ios-arrow-round-down': iosArrowRoundDown,\n  'ios-arrow-round-forward': iosArrowRoundForward,\n  'ios-arrow-round-up': iosArrowRoundUp,\n  'ios-arrow-up': iosArrowUp,\n  'ios-at': iosAt,\n  'ios-attach': iosAttach,\n  'ios-backspace': iosBackspace,\n  'ios-barcode': iosBarcode,\n  'ios-baseball': iosBaseball,\n  'ios-basket': iosBasket,\n  'ios-basketball': iosBasketball,\n  'ios-battery-charging': iosBatteryCharging,\n  'ios-battery-dead': iosBatteryDead,\n  'ios-battery-full': iosBatteryFull,\n  'ios-beaker': iosBeaker,\n  'ios-bed': iosBed,\n  'ios-beer': iosBeer,\n  'ios-bicycle': iosBicycle,\n  'ios-bluetooth': iosBluetooth,\n  'ios-boat': iosBoat,\n  'ios-body': iosBody,\n  'ios-bonfire': iosBonfire,\n  'ios-book': iosBook,\n  'ios-bookmark': iosBookmark,\n  'ios-bookmarks': iosBookmarks,\n  'ios-bowtie': iosBowtie,\n  'ios-briefcase': iosBriefcase,\n  'ios-browsers': iosBrowsers,\n  'ios-brush': iosBrush,\n  'ios-bug': iosBug,\n  'ios-build': iosBuild,\n  'ios-bulb': iosBulb,\n  'ios-bus': iosBus,\n  'ios-business': iosBusiness,\n  'ios-cafe': iosCafe,\n  'ios-calculator': iosCalculator,\n  'ios-calendar': iosCalendar,\n  'ios-call': iosCall,\n  'ios-camera': iosCamera,\n  'ios-car': iosCar,\n  'ios-card': iosCard,\n  'ios-cart': iosCart,\n  'ios-cash': iosCash,\n  'ios-cellular': iosCellular,\n  'ios-chatboxes': iosChatboxes,\n  'ios-chatbubbles': iosChatbubbles,\n  'ios-checkbox-outline': iosCheckboxOutline,\n  'ios-checkbox': iosCheckbox,\n  'ios-checkmark-circle-outline': iosCheckmarkCircleOutline,\n  'ios-checkmark-circle': iosCheckmarkCircle,\n  'ios-checkmark': iosCheckmark,\n  'ios-clipboard': iosClipboard,\n  'ios-clock': iosClock,\n  'ios-close-circle-outline': iosCloseCircleOutline,\n  'ios-close-circle': iosCloseCircle,\n  'ios-close': iosClose,\n  'ios-cloud-circle': iosCloudCircle,\n  'ios-cloud-done': iosCloudDone,\n  'ios-cloud-download': iosCloudDownload,\n  'ios-cloud-outline': iosCloudOutline,\n  'ios-cloud-upload': iosCloudUpload,\n  'ios-cloud': iosCloud,\n  'ios-cloudy-night': iosCloudyNight,\n  'ios-cloudy': iosCloudy,\n  'ios-code-download': iosCodeDownload,\n  'ios-code-working': iosCodeWorking,\n  'ios-code': iosCode,\n  'ios-cog': iosCog,\n  'ios-color-fill': iosColorFill,\n  'ios-color-filter': iosColorFilter,\n  'ios-color-palette': iosColorPalette,\n  'ios-color-wand': iosColorWand,\n  'ios-compass': iosCompass,\n  'ios-construct': iosConstruct,\n  'ios-contact': iosContact,\n  'ios-contacts': iosContacts,\n  'ios-contract': iosContract,\n  'ios-contrast': iosContrast,\n  'ios-copy': iosCopy,\n  'ios-create': iosCreate,\n  'ios-crop': iosCrop,\n  'ios-cube': iosCube,\n  'ios-cut': iosCut,\n  'ios-desktop': iosDesktop,\n  'ios-disc': iosDisc,\n  'ios-document': iosDocument,\n  'ios-done-all': iosDoneAll,\n  'ios-download': iosDownload,\n  'ios-easel': iosEasel,\n  'ios-egg': iosEgg,\n  'ios-exit': iosExit,\n  'ios-expand': iosExpand,\n  'ios-eye-off': iosEyeOff,\n  'ios-eye': iosEye,\n  'ios-fastforward': iosFastforward,\n  'ios-female': iosFemale,\n  'ios-filing': iosFiling,\n  'ios-film': iosFilm,\n  'ios-finger-print': iosFingerPrint,\n  'ios-fitness': iosFitness,\n  'ios-flag': iosFlag,\n  'ios-flame': iosFlame,\n  'ios-flash-off': iosFlashOff,\n  'ios-flash': iosFlash,\n  'ios-flashlight': iosFlashlight,\n  'ios-flask': iosFlask,\n  'ios-flower': iosFlower,\n  'ios-folder-open': iosFolderOpen,\n  'ios-folder': iosFolder,\n  'ios-football': iosFootball,\n  'ios-funnel': iosFunnel,\n  'ios-gift': iosGift,\n  'ios-git-branch': iosGitBranch,\n  'ios-git-commit': iosGitCommit,\n  'ios-git-compare': iosGitCompare,\n  'ios-git-merge': iosGitMerge,\n  'ios-git-network': iosGitNetwork,\n  'ios-git-pull-request': iosGitPullRequest,\n  'ios-glasses': iosGlasses,\n  'ios-globe': iosGlobe,\n  'ios-grid': iosGrid,\n  'ios-hammer': iosHammer,\n  'ios-hand': iosHand,\n  'ios-happy': iosHappy,\n  'ios-headset': iosHeadset,\n  'ios-heart-dislike': iosHeartDislike,\n  'ios-heart-empty': iosHeartEmpty,\n  'ios-heart-half': iosHeartHalf,\n  'ios-heart': iosHeart,\n  'ios-help-buoy': iosHelpBuoy,\n  'ios-help-circle-outline': iosHelpCircleOutline,\n  'ios-help-circle': iosHelpCircle,\n  'ios-help': iosHelp,\n  'ios-home': iosHome,\n  'ios-hourglass': iosHourglass,\n  'ios-ice-cream': iosIceCream,\n  'ios-image': iosImage,\n  'ios-images': iosImages,\n  'ios-infinite': iosInfinite,\n  'ios-information-circle-outline': iosInformationCircleOutline,\n  'ios-information-circle': iosInformationCircle,\n  'ios-information': iosInformation,\n  'ios-jet': iosJet,\n  'ios-journal': iosJournal,\n  'ios-key': iosKey,\n  'ios-keypad': iosKeypad,\n  'ios-laptop': iosLaptop,\n  'ios-leaf': iosLeaf,\n  'ios-link': iosLink,\n  'ios-list-box': iosListBox,\n  'ios-list': iosList,\n  'ios-locate': iosLocate,\n  'ios-lock': iosLock,\n  'ios-log-in': iosLogIn,\n  'ios-log-out': iosLogOut,\n  'ios-magnet': iosMagnet,\n  'ios-mail-open': iosMailOpen,\n  'ios-mail-unread': iosMailUnread,\n  'ios-mail': iosMail,\n  'ios-male': iosMale,\n  'ios-man': iosMan,\n  'ios-map': iosMap,\n  'ios-medal': iosMedal,\n  'ios-medical': iosMedical,\n  'ios-medkit': iosMedkit,\n  'ios-megaphone': iosMegaphone,\n  'ios-menu': iosMenu,\n  'ios-mic-off': iosMicOff,\n  'ios-mic': iosMic,\n  'ios-microphone': iosMicrophone,\n  'ios-moon': iosMoon,\n  'ios-more': iosMore,\n  'ios-move': iosMove,\n  'ios-musical-note': iosMusicalNote,\n  'ios-musical-notes': iosMusicalNotes,\n  'ios-navigate': iosNavigate,\n  'ios-notifications-off': iosNotificationsOff,\n  'ios-notifications-outline': iosNotificationsOutline,\n  'ios-notifications': iosNotifications,\n  'ios-nuclear': iosNuclear,\n  'ios-nutrition': iosNutrition,\n  'ios-open': iosOpen,\n  'ios-options': iosOptions,\n  'ios-outlet': iosOutlet,\n  'ios-paper-plane': iosPaperPlane,\n  'ios-paper': iosPaper,\n  'ios-partly-sunny': iosPartlySunny,\n  'ios-pause': iosPause,\n  'ios-paw': iosPaw,\n  'ios-people': iosPeople,\n  'ios-person-add': iosPersonAdd,\n  'ios-person': iosPerson,\n  'ios-phone-landscape': iosPhoneLandscape,\n  'ios-phone-portrait': iosPhonePortrait,\n  'ios-photos': iosPhotos,\n  'ios-pie': iosPie,\n  'ios-pin': iosPin,\n  'ios-pint': iosPint,\n  'ios-pizza': iosPizza,\n  'ios-planet': iosPlanet,\n  'ios-play-circle': iosPlayCircle,\n  'ios-play': iosPlay,\n  'ios-podium': iosPodium,\n  'ios-power': iosPower,\n  'ios-pricetag': iosPricetag,\n  'ios-pricetags': iosPricetags,\n  'ios-print': iosPrint,\n  'ios-pulse': iosPulse,\n  'ios-qr-scanner': iosQrScanner,\n  'ios-quote': iosQuote,\n  'ios-radio-button-off': iosRadioButtonOff,\n  'ios-radio-button-on': iosRadioButtonOn,\n  'ios-radio': iosRadio,\n  'ios-rainy': iosRainy,\n  'ios-recording': iosRecording,\n  'ios-redo': iosRedo,\n  'ios-refresh-circle': iosRefreshCircle,\n  'ios-refresh': iosRefresh,\n  'ios-remove-circle-outline': iosRemoveCircleOutline,\n  'ios-remove-circle': iosRemoveCircle,\n  'ios-remove': iosRemove,\n  'ios-reorder': iosReorder,\n  'ios-repeat': iosRepeat,\n  'ios-resize': iosResize,\n  'ios-restaurant': iosRestaurant,\n  'ios-return-left': iosReturnLeft,\n  'ios-return-right': iosReturnRight,\n  'ios-reverse-camera': iosReverseCamera,\n  'ios-rewind': iosRewind,\n  'ios-ribbon': iosRibbon,\n  'ios-rocket': iosRocket,\n  'ios-rose': iosRose,\n  'ios-sad': iosSad,\n  'ios-save': iosSave,\n  'ios-school': iosSchool,\n  'ios-search': iosSearch,\n  'ios-send': iosSend,\n  'ios-settings': iosSettings,\n  'ios-share-alt': iosShareAlt,\n  'ios-share': iosShare,\n  'ios-shirt': iosShirt,\n  'ios-shuffle': iosShuffle,\n  'ios-skip-backward': iosSkipBackward,\n  'ios-skip-forward': iosSkipForward,\n  'ios-snow': iosSnow,\n  'ios-speedometer': iosSpeedometer,\n  'ios-square-outline': iosSquareOutline,\n  'ios-square': iosSquare,\n  'ios-star-half': iosStarHalf,\n  'ios-star-outline': iosStarOutline,\n  'ios-star': iosStar,\n  'ios-stats': iosStats,\n  'ios-stopwatch': iosStopwatch,\n  'ios-subway': iosSubway,\n  'ios-sunny': iosSunny,\n  'ios-swap': iosSwap,\n  'ios-switch': iosSwitch,\n  'ios-sync': iosSync,\n  'ios-tablet-landscape': iosTabletLandscape,\n  'ios-tablet-portrait': iosTabletPortrait,\n  'ios-tennisball': iosTennisball,\n  'ios-text': iosText,\n  'ios-thermometer': iosThermometer,\n  'ios-thumbs-down': iosThumbsDown,\n  'ios-thumbs-up': iosThumbsUp,\n  'ios-thunderstorm': iosThunderstorm,\n  'ios-time': iosTime,\n  'ios-timer': iosTimer,\n  'ios-today': iosToday,\n  'ios-train': iosTrain,\n  'ios-transgender': iosTransgender,\n  'ios-trash': iosTrash,\n  'ios-trending-down': iosTrendingDown,\n  'ios-trending-up': iosTrendingUp,\n  'ios-trophy': iosTrophy,\n  'ios-tv': iosTv,\n  'ios-umbrella': iosUmbrella,\n  'ios-undo': iosUndo,\n  'ios-unlock': iosUnlock,\n  'ios-videocam': iosVideocam,\n  'ios-volume-high': iosVolumeHigh,\n  'ios-volume-low': iosVolumeLow,\n  'ios-volume-mute': iosVolumeMute,\n  'ios-volume-off': iosVolumeOff,\n  'ios-walk': iosWalk,\n  'ios-wallet': iosWallet,\n  'ios-warning': iosWarning,\n  'ios-watch': iosWatch,\n  'ios-water': iosWater,\n  'ios-wifi': iosWifi,\n  'ios-wine': iosWine,\n  'ios-woman': iosWoman,\n  'logo-android': logoAndroid,\n  'logo-angular': logoAngular,\n  'logo-apple': logoApple,\n  'logo-bitbucket': logoBitbucket,\n  'logo-bitcoin': logoBitcoin,\n  'logo-buffer': logoBuffer,\n  'logo-chrome': logoChrome,\n  'logo-closed-captioning': logoClosedCaptioning,\n  'logo-codepen': logoCodepen,\n  'logo-css3': logoCss3,\n  'logo-designernews': logoDesignernews,\n  'logo-dribbble': logoDribbble,\n  'logo-dropbox': logoDropbox,\n  'logo-euro': logoEuro,\n  'logo-facebook': logoFacebook,\n  'logo-flickr': logoFlickr,\n  'logo-foursquare': logoFoursquare,\n  'logo-freebsd-devil': logoFreebsdDevil,\n  'logo-game-controller-a': logoGameControllerA,\n  'logo-game-controller-b': logoGameControllerB,\n  'logo-github': logoGithub,\n  'logo-google': logoGoogle,\n  'logo-googleplus': logoGoogleplus,\n  'logo-hackernews': logoHackernews,\n  'logo-html5': logoHtml5,\n  'logo-instagram': logoInstagram,\n  'logo-ionic': logoIonic,\n  'logo-ionitron': logoIonitron,\n  'logo-javascript': logoJavascript,\n  'logo-linkedin': logoLinkedin,\n  'logo-markdown': logoMarkdown,\n  'logo-model-s': logoModelS,\n  'logo-no-smoking': logoNoSmoking,\n  'logo-nodejs': logoNodejs,\n  'logo-npm': logoNpm,\n  'logo-octocat': logoOctocat,\n  'logo-pinterest': logoPinterest,\n  'logo-playstation': logoPlaystation,\n  'logo-polymer': logoPolymer,\n  'logo-python': logoPython,\n  'logo-reddit': logoReddit,\n  'logo-rss': logoRss,\n  'logo-sass': logoSass,\n  'logo-skype': logoSkype,\n  'logo-slack': logoSlack,\n  'logo-snapchat': logoSnapchat,\n  'logo-steam': logoSteam,\n  'logo-tumblr': logoTumblr,\n  'logo-tux': logoTux,\n  'logo-twitch': logoTwitch,\n  'logo-twitter': logoTwitter,\n  'logo-usd': logoUsd,\n  'logo-vimeo': logoVimeo,\n  'logo-vk': logoVk,\n  'logo-whatsapp': logoWhatsapp,\n  'logo-windows': logoWindows,\n  'logo-wordpress': logoWordpress,\n  'logo-xbox': logoXbox,\n  'logo-xing': logoXing,\n  'logo-yahoo': logoYahoo,\n  'logo-yen': logoYen,\n  'logo-youtube': logoYoutube,\n  'md-add-circle-outline': mdAddCircleOutline,\n  'md-add-circle': mdAddCircle,\n  'md-add': mdAdd,\n  'md-airplane': mdAirplane,\n  'md-alarm': mdAlarm,\n  'md-albums': mdAlbums,\n  'md-alert': mdAlert,\n  'md-american-football': mdAmericanFootball,\n  'md-analytics': mdAnalytics,\n  'md-aperture': mdAperture,\n  'md-apps': mdApps,\n  'md-appstore': mdAppstore,\n  'md-archive': mdArchive,\n  'md-arrow-back': mdArrowBack,\n  'md-arrow-down': mdArrowDown,\n  'md-arrow-dropdown-circle': mdArrowDropdownCircle,\n  'md-arrow-dropdown': mdArrowDropdown,\n  'md-arrow-dropleft-circle': mdArrowDropleftCircle,\n  'md-arrow-dropleft': mdArrowDropleft,\n  'md-arrow-dropright-circle': mdArrowDroprightCircle,\n  'md-arrow-dropright': mdArrowDropright,\n  'md-arrow-dropup-circle': mdArrowDropupCircle,\n  'md-arrow-dropup': mdArrowDropup,\n  'md-arrow-forward': mdArrowForward,\n  'md-arrow-round-back': mdArrowRoundBack,\n  'md-arrow-round-down': mdArrowRoundDown,\n  'md-arrow-round-forward': mdArrowRoundForward,\n  'md-arrow-round-up': mdArrowRoundUp,\n  'md-arrow-up': mdArrowUp,\n  'md-at': mdAt,\n  'md-attach': mdAttach,\n  'md-backspace': mdBackspace,\n  'md-barcode': mdBarcode,\n  'md-baseball': mdBaseball,\n  'md-basket': mdBasket,\n  'md-basketball': mdBasketball,\n  'md-battery-charging': mdBatteryCharging,\n  'md-battery-dead': mdBatteryDead,\n  'md-battery-full': mdBatteryFull,\n  'md-beaker': mdBeaker,\n  'md-bed': mdBed,\n  'md-beer': mdBeer,\n  'md-bicycle': mdBicycle,\n  'md-bluetooth': mdBluetooth,\n  'md-boat': mdBoat,\n  'md-body': mdBody,\n  'md-bonfire': mdBonfire,\n  'md-book': mdBook,\n  'md-bookmark': mdBookmark,\n  'md-bookmarks': mdBookmarks,\n  'md-bowtie': mdBowtie,\n  'md-briefcase': mdBriefcase,\n  'md-browsers': mdBrowsers,\n  'md-brush': mdBrush,\n  'md-bug': mdBug,\n  'md-build': mdBuild,\n  'md-bulb': mdBulb,\n  'md-bus': mdBus,\n  'md-business': mdBusiness,\n  'md-cafe': mdCafe,\n  'md-calculator': mdCalculator,\n  'md-calendar': mdCalendar,\n  'md-call': mdCall,\n  'md-camera': mdCamera,\n  'md-car': mdCar,\n  'md-card': mdCard,\n  'md-cart': mdCart,\n  'md-cash': mdCash,\n  'md-cellular': mdCellular,\n  'md-chatboxes': mdChatboxes,\n  'md-chatbubbles': mdChatbubbles,\n  'md-checkbox-outline': mdCheckboxOutline,\n  'md-checkbox': mdCheckbox,\n  'md-checkmark-circle-outline': mdCheckmarkCircleOutline,\n  'md-checkmark-circle': mdCheckmarkCircle,\n  'md-checkmark': mdCheckmark,\n  'md-clipboard': mdClipboard,\n  'md-clock': mdClock,\n  'md-close-circle-outline': mdCloseCircleOutline,\n  'md-close-circle': mdCloseCircle,\n  'md-close': mdClose,\n  'md-cloud-circle': mdCloudCircle,\n  'md-cloud-done': mdCloudDone,\n  'md-cloud-download': mdCloudDownload,\n  'md-cloud-outline': mdCloudOutline,\n  'md-cloud-upload': mdCloudUpload,\n  'md-cloud': mdCloud,\n  'md-cloudy-night': mdCloudyNight,\n  'md-cloudy': mdCloudy,\n  'md-code-download': mdCodeDownload,\n  'md-code-working': mdCodeWorking,\n  'md-code': mdCode,\n  'md-cog': mdCog,\n  'md-color-fill': mdColorFill,\n  'md-color-filter': mdColorFilter,\n  'md-color-palette': mdColorPalette,\n  'md-color-wand': mdColorWand,\n  'md-compass': mdCompass,\n  'md-construct': mdConstruct,\n  'md-contact': mdContact,\n  'md-contacts': mdContacts,\n  'md-contract': mdContract,\n  'md-contrast': mdContrast,\n  'md-copy': mdCopy,\n  'md-create': mdCreate,\n  'md-crop': mdCrop,\n  'md-cube': mdCube,\n  'md-cut': mdCut,\n  'md-desktop': mdDesktop,\n  'md-disc': mdDisc,\n  'md-document': mdDocument,\n  'md-done-all': mdDoneAll,\n  'md-download': mdDownload,\n  'md-easel': mdEasel,\n  'md-egg': mdEgg,\n  'md-exit': mdExit,\n  'md-expand': mdExpand,\n  'md-eye-off': mdEyeOff,\n  'md-eye': mdEye,\n  'md-fastforward': mdFastforward,\n  'md-female': mdFemale,\n  'md-filing': mdFiling,\n  'md-film': mdFilm,\n  'md-finger-print': mdFingerPrint,\n  'md-fitness': mdFitness,\n  'md-flag': mdFlag,\n  'md-flame': mdFlame,\n  'md-flash-off': mdFlashOff,\n  'md-flash': mdFlash,\n  'md-flashlight': mdFlashlight,\n  'md-flask': mdFlask,\n  'md-flower': mdFlower,\n  'md-folder-open': mdFolderOpen,\n  'md-folder': mdFolder,\n  'md-football': mdFootball,\n  'md-funnel': mdFunnel,\n  'md-gift': mdGift,\n  'md-git-branch': mdGitBranch,\n  'md-git-commit': mdGitCommit,\n  'md-git-compare': mdGitCompare,\n  'md-git-merge': mdGitMerge,\n  'md-git-network': mdGitNetwork,\n  'md-git-pull-request': mdGitPullRequest,\n  'md-glasses': mdGlasses,\n  'md-globe': mdGlobe,\n  'md-grid': mdGrid,\n  'md-hammer': mdHammer,\n  'md-hand': mdHand,\n  'md-happy': mdHappy,\n  'md-headset': mdHeadset,\n  'md-heart-dislike': mdHeartDislike,\n  'md-heart-empty': mdHeartEmpty,\n  'md-heart-half': mdHeartHalf,\n  'md-heart': mdHeart,\n  'md-help-buoy': mdHelpBuoy,\n  'md-help-circle-outline': mdHelpCircleOutline,\n  'md-help-circle': mdHelpCircle,\n  'md-help': mdHelp,\n  'md-home': mdHome,\n  'md-hourglass': mdHourglass,\n  'md-ice-cream': mdIceCream,\n  'md-image': mdImage,\n  'md-images': mdImages,\n  'md-infinite': mdInfinite,\n  'md-information-circle-outline': mdInformationCircleOutline,\n  'md-information-circle': mdInformationCircle,\n  'md-information': mdInformation,\n  'md-jet': mdJet,\n  'md-journal': mdJournal,\n  'md-key': mdKey,\n  'md-keypad': mdKeypad,\n  'md-laptop': mdLaptop,\n  'md-leaf': mdLeaf,\n  'md-link': mdLink,\n  'md-list-box': mdListBox,\n  'md-list': mdList,\n  'md-locate': mdLocate,\n  'md-lock': mdLock,\n  'md-log-in': mdLogIn,\n  'md-log-out': mdLogOut,\n  'md-magnet': mdMagnet,\n  'md-mail-open': mdMailOpen,\n  'md-mail-unread': mdMailUnread,\n  'md-mail': mdMail,\n  'md-male': mdMale,\n  'md-man': mdMan,\n  'md-map': mdMap,\n  'md-medal': mdMedal,\n  'md-medical': mdMedical,\n  'md-medkit': mdMedkit,\n  'md-megaphone': mdMegaphone,\n  'md-menu': mdMenu,\n  'md-mic-off': mdMicOff,\n  'md-mic': mdMic,\n  'md-microphone': mdMicrophone,\n  'md-moon': mdMoon,\n  'md-more': mdMore,\n  'md-move': mdMove,\n  'md-musical-note': mdMusicalNote,\n  'md-musical-notes': mdMusicalNotes,\n  'md-navigate': mdNavigate,\n  'md-notifications-off': mdNotificationsOff,\n  'md-notifications-outline': mdNotificationsOutline,\n  'md-notifications': mdNotifications,\n  'md-nuclear': mdNuclear,\n  'md-nutrition': mdNutrition,\n  'md-open': mdOpen,\n  'md-options': mdOptions,\n  'md-outlet': mdOutlet,\n  'md-paper-plane': mdPaperPlane,\n  'md-paper': mdPaper,\n  'md-partly-sunny': mdPartlySunny,\n  'md-pause': mdPause,\n  'md-paw': mdPaw,\n  'md-people': mdPeople,\n  'md-person-add': mdPersonAdd,\n  'md-person': mdPerson,\n  'md-phone-landscape': mdPhoneLandscape,\n  'md-phone-portrait': mdPhonePortrait,\n  'md-photos': mdPhotos,\n  'md-pie': mdPie,\n  'md-pin': mdPin,\n  'md-pint': mdPint,\n  'md-pizza': mdPizza,\n  'md-planet': mdPlanet,\n  'md-play-circle': mdPlayCircle,\n  'md-play': mdPlay,\n  'md-podium': mdPodium,\n  'md-power': mdPower,\n  'md-pricetag': mdPricetag,\n  'md-pricetags': mdPricetags,\n  'md-print': mdPrint,\n  'md-pulse': mdPulse,\n  'md-qr-scanner': mdQrScanner,\n  'md-quote': mdQuote,\n  'md-radio-button-off': mdRadioButtonOff,\n  'md-radio-button-on': mdRadioButtonOn,\n  'md-radio': mdRadio,\n  'md-rainy': mdRainy,\n  'md-recording': mdRecording,\n  'md-redo': mdRedo,\n  'md-refresh-circle': mdRefreshCircle,\n  'md-refresh': mdRefresh,\n  'md-remove-circle-outline': mdRemoveCircleOutline,\n  'md-remove-circle': mdRemoveCircle,\n  'md-remove': mdRemove,\n  'md-reorder': mdReorder,\n  'md-repeat': mdRepeat,\n  'md-resize': mdResize,\n  'md-restaurant': mdRestaurant,\n  'md-return-left': mdReturnLeft,\n  'md-return-right': mdReturnRight,\n  'md-reverse-camera': mdReverseCamera,\n  'md-rewind': mdRewind,\n  'md-ribbon': mdRibbon,\n  'md-rocket': mdRocket,\n  'md-rose': mdRose,\n  'md-sad': mdSad,\n  'md-save': mdSave,\n  'md-school': mdSchool,\n  'md-search': mdSearch,\n  'md-send': mdSend,\n  'md-settings': mdSettings,\n  'md-share-alt': mdShareAlt,\n  'md-share': mdShare,\n  'md-shirt': mdShirt,\n  'md-shuffle': mdShuffle,\n  'md-skip-backward': mdSkipBackward,\n  'md-skip-forward': mdSkipForward,\n  'md-snow': mdSnow,\n  'md-speedometer': mdSpeedometer,\n  'md-square-outline': mdSquareOutline,\n  'md-square': mdSquare,\n  'md-star-half': mdStarHalf,\n  'md-star-outline': mdStarOutline,\n  'md-star': mdStar,\n  'md-stats': mdStats,\n  'md-stopwatch': mdStopwatch,\n  'md-subway': mdSubway,\n  'md-sunny': mdSunny,\n  'md-swap': mdSwap,\n  'md-switch': mdSwitch,\n  'md-sync': mdSync,\n  'md-tablet-landscape': mdTabletLandscape,\n  'md-tablet-portrait': mdTabletPortrait,\n  'md-tennisball': mdTennisball,\n  'md-text': mdText,\n  'md-thermometer': mdThermometer,\n  'md-thumbs-down': mdThumbsDown,\n  'md-thumbs-up': mdThumbsUp,\n  'md-thunderstorm': mdThunderstorm,\n  'md-time': mdTime,\n  'md-timer': mdTimer,\n  'md-today': mdToday,\n  'md-train': mdTrain,\n  'md-transgender': mdTransgender,\n  'md-trash': mdTrash,\n  'md-trending-down': mdTrendingDown,\n  'md-trending-up': mdTrendingUp,\n  'md-trophy': mdTrophy,\n  'md-tv': mdTv,\n  'md-umbrella': mdUmbrella,\n  'md-undo': mdUndo,\n  'md-unlock': mdUnlock,\n  'md-videocam': mdVideocam,\n  'md-volume-high': mdVolumeHigh,\n  'md-volume-low': mdVolumeLow,\n  'md-volume-mute': mdVolumeMute,\n  'md-volume-off': mdVolumeOff,\n  'md-walk': mdWalk,\n  'md-wallet': mdWallet,\n  'md-warning': mdWarning,\n  'md-watch': mdWatch,\n  'md-water': mdWater,\n  'md-wifi': mdWifi,\n  'md-wine': mdWine,\n  'md-woman': mdWoman\n};\n\nexport { iosAddCircleOutline, iosAddCircle, iosAdd, iosAirplane, iosAlarm, iosAlbums, iosAlert, iosAmericanFootball, iosAnalytics, iosAperture, iosApps, iosAppstore, iosArchive, iosArrowBack, iosArrowDown, iosArrowDropdownCircle, iosArrowDropdown, iosArrowDropleftCircle, iosArrowDropleft, iosArrowDroprightCircle, iosArrowDropright, iosArrowDropupCircle, iosArrowDropup, iosArrowForward, iosArrowRoundBack, iosArrowRoundDown, iosArrowRoundForward, iosArrowRoundUp, iosArrowUp, iosAt, iosAttach, iosBackspace, iosBarcode, iosBaseball, iosBasket, iosBasketball, iosBatteryCharging, iosBatteryDead, iosBatteryFull, iosBeaker, iosBed, iosBeer, iosBicycle, iosBluetooth, iosBoat, iosBody, iosBonfire, iosBook, iosBookmark, iosBookmarks, iosBowtie, iosBriefcase, iosBrowsers, iosBrush, iosBug, iosBuild, iosBulb, iosBus, iosBusiness, iosCafe, iosCalculator, iosCalendar, iosCall, iosCamera, iosCar, iosCard, iosCart, iosCash, iosCellular, iosChatboxes, iosChatbubbles, iosCheckboxOutline, iosCheckbox, iosCheckmarkCircleOutline, iosCheckmarkCircle, iosCheckmark, iosClipboard, iosClock, iosCloseCircleOutline, iosCloseCircle, iosClose, iosCloudCircle, iosCloudDone, iosCloudDownload, iosCloudOutline, iosCloudUpload, iosCloud, iosCloudyNight, iosCloudy, iosCodeDownload, iosCodeWorking, iosCode, iosCog, iosColorFill, iosColorFilter, iosColorPalette, iosColorWand, iosCompass, iosConstruct, iosContact, iosContacts, iosContract, iosContrast, iosCopy, iosCreate, iosCrop, iosCube, iosCut, iosDesktop, iosDisc, iosDocument, iosDoneAll, iosDownload, iosEasel, iosEgg, iosExit, iosExpand, iosEyeOff, iosEye, iosFastforward, iosFemale, iosFiling, iosFilm, iosFingerPrint, iosFitness, iosFlag, iosFlame, iosFlashOff, iosFlash, iosFlashlight, iosFlask, iosFlower, iosFolderOpen, iosFolder, iosFootball, iosFunnel, iosGift, iosGitBranch, iosGitCommit, iosGitCompare, iosGitMerge, iosGitNetwork, iosGitPullRequest, iosGlasses, iosGlobe, iosGrid, iosHammer, iosHand, iosHappy, iosHeadset, iosHeartDislike, iosHeartEmpty, iosHeartHalf, iosHeart, iosHelpBuoy, iosHelpCircleOutline, iosHelpCircle, iosHelp, iosHome, iosHourglass, iosIceCream, iosImage, iosImages, iosInfinite, iosInformationCircleOutline, iosInformationCircle, iosInformation, iosJet, iosJournal, iosKey, iosKeypad, iosLaptop, iosLeaf, iosLink, iosListBox, iosList, iosLocate, iosLock, iosLogIn, iosLogOut, iosMagnet, iosMailOpen, iosMailUnread, iosMail, iosMale, iosMan, iosMap, iosMedal, iosMedical, iosMedkit, iosMegaphone, iosMenu, iosMicOff, iosMic, iosMicrophone, iosMoon, iosMore, iosMove, iosMusicalNote, iosMusicalNotes, iosNavigate, iosNotificationsOff, iosNotificationsOutline, iosNotifications, iosNuclear, iosNutrition, iosOpen, iosOptions, iosOutlet, iosPaperPlane, iosPaper, iosPartlySunny, iosPause, iosPaw, iosPeople, iosPersonAdd, iosPerson, iosPhoneLandscape, iosPhonePortrait, iosPhotos, iosPie, iosPin, iosPint, iosPizza, iosPlanet, iosPlayCircle, iosPlay, iosPodium, iosPower, iosPricetag, iosPricetags, iosPrint, iosPulse, iosQrScanner, iosQuote, iosRadioButtonOff, iosRadioButtonOn, iosRadio, iosRainy, iosRecording, iosRedo, iosRefreshCircle, iosRefresh, iosRemoveCircleOutline, iosRemoveCircle, iosRemove, iosReorder, iosRepeat, iosResize, iosRestaurant, iosReturnLeft, iosReturnRight, iosReverseCamera, iosRewind, iosRibbon, iosRocket, iosRose, iosSad, iosSave, iosSchool, iosSearch, iosSend, iosSettings, iosShareAlt, iosShare, iosShirt, iosShuffle, iosSkipBackward, iosSkipForward, iosSnow, iosSpeedometer, iosSquareOutline, iosSquare, iosStarHalf, iosStarOutline, iosStar, iosStats, iosStopwatch, iosSubway, iosSunny, iosSwap, iosSwitch, iosSync, iosTabletLandscape, iosTabletPortrait, iosTennisball, iosText, iosThermometer, iosThumbsDown, iosThumbsUp, iosThunderstorm, iosTime, iosTimer, iosToday, iosTrain, iosTransgender, iosTrash, iosTrendingDown, iosTrendingUp, iosTrophy, iosTv, iosUmbrella, iosUndo, iosUnlock, iosVideocam, iosVolumeHigh, iosVolumeLow, iosVolumeMute, iosVolumeOff, iosWalk, iosWallet, iosWarning, iosWatch, iosWater, iosWifi, iosWine, iosWoman, logoAndroid, logoAngular, logoApple, logoBitbucket, logoBitcoin, logoBuffer, logoChrome, logoClosedCaptioning, logoCodepen, logoCss3, logoDesignernews, logoDribbble, logoDropbox, logoEuro, logoFacebook, logoFlickr, logoFoursquare, logoFreebsdDevil, logoGameControllerA, logoGameControllerB, logoGithub, logoGoogle, logoGoogleplus, logoHackernews, logoHtml5, logoInstagram, logoIonic, logoIonitron, logoJavascript, logoLinkedin, logoMarkdown, logoModelS, logoNoSmoking, logoNodejs, logoNpm, logoOctocat, logoPinterest, logoPlaystation, logoPolymer, logoPython, logoReddit, logoRss, logoSass, logoSkype, logoSlack, logoSnapchat, logoSteam, logoTumblr, logoTux, logoTwitch, logoTwitter, logoUsd, logoVimeo, logoVk, logoWhatsapp, logoWindows, logoWordpress, logoXbox, logoXing, logoYahoo, logoYen, logoYoutube, mdAddCircleOutline, mdAddCircle, mdAdd, mdAirplane, mdAlarm, mdAlbums, mdAlert, mdAmericanFootball, mdAnalytics, mdAperture, mdApps, mdAppstore, mdArchive, mdArrowBack, mdArrowDown, mdArrowDropdownCircle, mdArrowDropdown, mdArrowDropleftCircle, mdArrowDropleft, mdArrowDroprightCircle, mdArrowDropright, mdArrowDropupCircle, mdArrowDropup, mdArrowForward, mdArrowRoundBack, mdArrowRoundDown, mdArrowRoundForward, mdArrowRoundUp, mdArrowUp, mdAt, mdAttach, mdBackspace, mdBarcode, mdBaseball, mdBasket, mdBasketball, mdBatteryCharging, mdBatteryDead, mdBatteryFull, mdBeaker, mdBed, mdBeer, mdBicycle, mdBluetooth, mdBoat, mdBody, mdBonfire, mdBook, mdBookmark, mdBookmarks, mdBowtie, mdBriefcase, mdBrowsers, mdBrush, mdBug, mdBuild, mdBulb, mdBus, mdBusiness, mdCafe, mdCalculator, mdCalendar, mdCall, mdCamera, mdCar, mdCard, mdCart, mdCash, mdCellular, mdChatboxes, mdChatbubbles, mdCheckboxOutline, mdCheckbox, mdCheckmarkCircleOutline, mdCheckmarkCircle, mdCheckmark, mdClipboard, mdClock, mdCloseCircleOutline, mdCloseCircle, mdClose, mdCloudCircle, mdCloudDone, mdCloudDownload, mdCloudOutline, mdCloudUpload, mdCloud, mdCloudyNight, mdCloudy, mdCodeDownload, mdCodeWorking, mdCode, mdCog, mdColorFill, mdColorFilter, mdColorPalette, mdColorWand, mdCompass, mdConstruct, mdContact, mdContacts, mdContract, mdContrast, mdCopy, mdCreate, mdCrop, mdCube, mdCut, mdDesktop, mdDisc, mdDocument, mdDoneAll, mdDownload, mdEasel, mdEgg, mdExit, mdExpand, mdEyeOff, mdEye, mdFastforward, mdFemale, mdFiling, mdFilm, mdFingerPrint, mdFitness, mdFlag, mdFlame, mdFlashOff, mdFlash, mdFlashlight, mdFlask, mdFlower, mdFolderOpen, mdFolder, mdFootball, mdFunnel, mdGift, mdGitBranch, mdGitCommit, mdGitCompare, mdGitMerge, mdGitNetwork, mdGitPullRequest, mdGlasses, mdGlobe, mdGrid, mdHammer, mdHand, mdHappy, mdHeadset, mdHeartDislike, mdHeartEmpty, mdHeartHalf, mdHeart, mdHelpBuoy, mdHelpCircleOutline, mdHelpCircle, mdHelp, mdHome, mdHourglass, mdIceCream, mdImage, mdImages, mdInfinite, mdInformationCircleOutline, mdInformationCircle, mdInformation, mdJet, mdJournal, mdKey, mdKeypad, mdLaptop, mdLeaf, mdLink, mdListBox, mdList, mdLocate, mdLock, mdLogIn, mdLogOut, mdMagnet, mdMailOpen, mdMailUnread, mdMail, mdMale, mdMan, mdMap, mdMedal, mdMedical, mdMedkit, mdMegaphone, mdMenu, mdMicOff, mdMic, mdMicrophone, mdMoon, mdMore, mdMove, mdMusicalNote, mdMusicalNotes, mdNavigate, mdNotificationsOff, mdNotificationsOutline, mdNotifications, mdNuclear, mdNutrition, mdOpen, mdOptions, mdOutlet, mdPaperPlane, mdPaper, mdPartlySunny, mdPause, mdPaw, mdPeople, mdPersonAdd, mdPerson, mdPhoneLandscape, mdPhonePortrait, mdPhotos, mdPie, mdPin, mdPint, mdPizza, mdPlanet, mdPlayCircle, mdPlay, mdPodium, mdPower, mdPricetag, mdPricetags, mdPrint, mdPulse, mdQrScanner, mdQuote, mdRadioButtonOff, mdRadioButtonOn, mdRadio, mdRainy, mdRecording, mdRedo, mdRefreshCircle, mdRefresh, mdRemoveCircleOutline, mdRemoveCircle, mdRemove, mdReorder, mdRepeat, mdResize, mdRestaurant, mdReturnLeft, mdReturnRight, mdReverseCamera, mdRewind, mdRibbon, mdRocket, mdRose, mdSad, mdSave, mdSchool, mdSearch, mdSend, mdSettings, mdShareAlt, mdShare, mdShirt, mdShuffle, mdSkipBackward, mdSkipForward, mdSnow, mdSpeedometer, mdSquareOutline, mdSquare, mdStarHalf, mdStarOutline, mdStar, mdStats, mdStopwatch, mdSubway, mdSunny, mdSwap, mdSwitch, mdSync, mdTabletLandscape, mdTabletPortrait, mdTennisball, mdText, mdThermometer, mdThumbsDown, mdThumbsUp, mdThunderstorm, mdTime, mdTimer, mdToday, mdTrain, mdTransgender, mdTrash, mdTrendingDown, mdTrendingUp, mdTrophy, mdTv, mdUmbrella, mdUndo, mdUnlock, mdVideocam, mdVolumeHigh, mdVolumeLow, mdVolumeMute, mdVolumeOff, mdWalk, mdWallet, mdWarning, mdWatch, mdWater, mdWifi, mdWine, mdWoman };\n"
  },
  {
    "path": "content/js/stencil/ionic-site-components/svg/index.js",
    "content": "\nrequire.context('!!file-loader?name=[name].[ext]&outputPath=svg!./', false, /.svg$/);\n"
  },
  {
    "path": "content/js/stencil/ionic-site-components/uy47nvwg.entry.js",
    "content": "const t=window.IonicSiteComponents.h;class s{constructor(){this.slideCount=1,this.timer=null,this.old=null,this.upcoming=null,this.slideDelay=1e4,this.current=0,this.status=[],this.ticker=0,this.next=(()=>{this.goTo(this.current>=this.slideCount-1?0:this.current+1)}),this.goTo=(t=>{this.status[t]&&(clearTimeout(this.timer),this.old=this.current,setTimeout(this.deactivate,1e3),this.upcoming=this.current=t,this.status[t].visible=!0,this.status[t].new=!0,setTimeout(this.activate,500),this.timer=setTimeout(this.next,this.slideDelay),this.ticker++)}),this.deactivate=(()=>{this.status[this.old].active=!1,this.status[this.old].visible=!1,this.status[this.current].new=!1,this.ticker++}),this.activate=(()=>{this.status[this.current].active=!0,this.ticker++}),this.getClasses.bind(this),this.goTo.bind(this),this.activate.bind(this),this.deactivate.bind(this),this.next.bind(this);for(let t=0;t<this.slideCount;t++)this.status.push({visible:0===t,active:0===t,new:!1})}componentDidLoad(){this.timer=setTimeout(this.next,this.slideDelay)}getClasses(t){return[this.status[t].visible?\"visible\":\"\",this.status[t].active?\"active\":\"\",this.status[t].new?\"new\":\"\"].join(\" \")}render(){return[t(\"div\",{class:this.getClasses(0)},t(\"slot\",{name:\"slide-0\"})),t(\"div\",{class:this.getClasses(1)},t(\"slot\",{name:\"slide-1\"})),t(\"ul\",{class:\"dots\"},t(\"li\",{class:0===this.current?\"active\":\"\",onClick:this.goTo.bind(this,0)}),t(\"li\",{class:1===this.current?\"active\":\"\",onClick:this.goTo.bind(this,1)}))]}static get is(){return\"ionic-slider\"}static get properties(){return{current:{state:!0},status:{state:!0},ticker:{state:!0}}}static get style(){return\"ionic-slider{position:relative}ionic-slider>div,ionic-slider [slot^=slide-]{position:absolute;top:0;right:0;bottom:0;left:0;overflow:hidden}ionic-slider>div{display:none;-webkit-animation:fadeIn .5s ease;animation:fadeIn .5s ease}ionic-slider>div.visible{display:block}ionic-slider>div.visible.new{z-index:1}ionic-slider .dots{position:absolute;top:0;bottom:0;left:20px;padding:0;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;-ms-flex-pack:center;justify-content:center;-ms-flex-line-pack:center;align-content:center;z-index:2}ionic-slider .dots li{height:8px;width:8px;border-radius:50%;border:1px solid hsla(0,0%,100%,.5);margin-bottom:4px;list-style:none;cursor:pointer;-webkit-transition:background-color .5s ease,border-color .5s ease;transition:background-color .5s ease,border-color .5s ease}ionic-slider .dots li.active{background-color:#fff;border-color:#fff}\"}}export{s as IonicSlider};"
  },
  {
    "path": "content/js/stencil/ionic-site-components/uy47nvwg.es5.entry.js",
    "content": "IonicSiteComponents.loadBundle(\"uy47nvwg\",[\"exports\"],function(t){var e=window.IonicSiteComponents.h,i=function(){function t(){var t=this;this.slideCount=1,this.timer=null,this.old=null,this.upcoming=null,this.slideDelay=1e4,this.current=0,this.status=[],this.ticker=0,this.next=function(){t.goTo(t.current>=t.slideCount-1?0:t.current+1)},this.goTo=function(e){t.status[e]&&(clearTimeout(t.timer),t.old=t.current,setTimeout(t.deactivate,1e3),t.upcoming=t.current=e,t.status[e].visible=!0,t.status[e].new=!0,setTimeout(t.activate,500),t.timer=setTimeout(t.next,t.slideDelay),t.ticker++)},this.deactivate=function(){t.status[t.old].active=!1,t.status[t.old].visible=!1,t.status[t.current].new=!1,t.ticker++},this.activate=function(){t.status[t.current].active=!0,t.ticker++},this.getClasses.bind(this),this.goTo.bind(this),this.activate.bind(this),this.deactivate.bind(this),this.next.bind(this);for(var e=0;e<this.slideCount;e++)this.status.push({visible:0===e,active:0===e,new:!1})}return t.prototype.componentDidLoad=function(){this.timer=setTimeout(this.next,this.slideDelay)},t.prototype.getClasses=function(t){return[this.status[t].visible?\"visible\":\"\",this.status[t].active?\"active\":\"\",this.status[t].new?\"new\":\"\"].join(\" \")},t.prototype.render=function(){return[e(\"div\",{class:this.getClasses(0)},e(\"slot\",{name:\"slide-0\"})),e(\"div\",{class:this.getClasses(1)},e(\"slot\",{name:\"slide-1\"})),e(\"ul\",{class:\"dots\"},e(\"li\",{class:0===this.current?\"active\":\"\",onClick:this.goTo.bind(this,0)}),e(\"li\",{class:1===this.current?\"active\":\"\",onClick:this.goTo.bind(this,1)}))]},Object.defineProperty(t,\"is\",{get:function(){return\"ionic-slider\"},enumerable:!0,configurable:!0}),Object.defineProperty(t,\"properties\",{get:function(){return{current:{state:!0},status:{state:!0},ticker:{state:!0}}},enumerable:!0,configurable:!0}),Object.defineProperty(t,\"style\",{get:function(){return\"ionic-slider{position:relative}ionic-slider>div,ionic-slider [slot^=slide-]{position:absolute;top:0;right:0;bottom:0;left:0;overflow:hidden}ionic-slider>div{display:none;-webkit-animation:fadeIn .5s ease;animation:fadeIn .5s ease}ionic-slider>div.visible{display:block}ionic-slider>div.visible.new{z-index:1}ionic-slider .dots{position:absolute;top:0;bottom:0;left:20px;padding:0;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;-ms-flex-pack:center;justify-content:center;-ms-flex-line-pack:center;align-content:center;z-index:2}ionic-slider .dots li{height:8px;width:8px;border-radius:50%;border:1px solid hsla(0,0%,100%,.5);margin-bottom:4px;list-style:none;cursor:pointer;-webkit-transition:background-color .5s ease,border-color .5s ease;transition:background-color .5s ease,border-color .5s ease}ionic-slider .dots li.active{background-color:#fff;border-color:#fff}\"},enumerable:!0,configurable:!0}),t}();t.IonicSlider=i,Object.defineProperty(t,\"__esModule\",{value:!0})});"
  },
  {
    "path": "content/js/stencil/ionic-site-components/uy47nvwg.sc.entry.js",
    "content": "const t=window.IonicSiteComponents.h;class s{constructor(){this.slideCount=1,this.timer=null,this.old=null,this.upcoming=null,this.slideDelay=1e4,this.current=0,this.status=[],this.ticker=0,this.next=(()=>{this.goTo(this.current>=this.slideCount-1?0:this.current+1)}),this.goTo=(t=>{this.status[t]&&(clearTimeout(this.timer),this.old=this.current,setTimeout(this.deactivate,1e3),this.upcoming=this.current=t,this.status[t].visible=!0,this.status[t].new=!0,setTimeout(this.activate,500),this.timer=setTimeout(this.next,this.slideDelay),this.ticker++)}),this.deactivate=(()=>{this.status[this.old].active=!1,this.status[this.old].visible=!1,this.status[this.current].new=!1,this.ticker++}),this.activate=(()=>{this.status[this.current].active=!0,this.ticker++}),this.getClasses.bind(this),this.goTo.bind(this),this.activate.bind(this),this.deactivate.bind(this),this.next.bind(this);for(let t=0;t<this.slideCount;t++)this.status.push({visible:0===t,active:0===t,new:!1})}componentDidLoad(){this.timer=setTimeout(this.next,this.slideDelay)}getClasses(t){return[this.status[t].visible?\"visible\":\"\",this.status[t].active?\"active\":\"\",this.status[t].new?\"new\":\"\"].join(\" \")}render(){return[t(\"div\",{class:this.getClasses(0)},t(\"slot\",{name:\"slide-0\"})),t(\"div\",{class:this.getClasses(1)},t(\"slot\",{name:\"slide-1\"})),t(\"ul\",{class:\"dots\"},t(\"li\",{class:0===this.current?\"active\":\"\",onClick:this.goTo.bind(this,0)}),t(\"li\",{class:1===this.current?\"active\":\"\",onClick:this.goTo.bind(this,1)}))]}static get is(){return\"ionic-slider\"}static get properties(){return{current:{state:!0},status:{state:!0},ticker:{state:!0}}}static get style(){return\"ionic-slider{position:relative}ionic-slider>div,ionic-slider [slot^=slide-]{position:absolute;top:0;right:0;bottom:0;left:0;overflow:hidden}ionic-slider>div{display:none;-webkit-animation:fadeIn .5s ease;animation:fadeIn .5s ease}ionic-slider>div.visible{display:block}ionic-slider>div.visible.new{z-index:1}ionic-slider .dots{position:absolute;top:0;bottom:0;left:20px;padding:0;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;-ms-flex-pack:center;justify-content:center;-ms-flex-line-pack:center;align-content:center;z-index:2}ionic-slider .dots li{height:8px;width:8px;border-radius:50%;border:1px solid hsla(0,0%,100%,.5);margin-bottom:4px;list-style:none;cursor:pointer;-webkit-transition:background-color .5s ease,border-color .5s ease;transition:background-color .5s ease,border-color .5s ease}ionic-slider .dots li.active{background-color:#fff;border-color:#fff}\"}}export{s as IonicSlider};"
  },
  {
    "path": "content/js/stencil/ionic-site-components/uy47nvwg.sc.es5.entry.js",
    "content": "IonicSiteComponents.loadBundle(\"uy47nvwg\",[\"exports\"],function(t){var e=window.IonicSiteComponents.h,i=function(){function t(){var t=this;this.slideCount=1,this.timer=null,this.old=null,this.upcoming=null,this.slideDelay=1e4,this.current=0,this.status=[],this.ticker=0,this.next=function(){t.goTo(t.current>=t.slideCount-1?0:t.current+1)},this.goTo=function(e){t.status[e]&&(clearTimeout(t.timer),t.old=t.current,setTimeout(t.deactivate,1e3),t.upcoming=t.current=e,t.status[e].visible=!0,t.status[e].new=!0,setTimeout(t.activate,500),t.timer=setTimeout(t.next,t.slideDelay),t.ticker++)},this.deactivate=function(){t.status[t.old].active=!1,t.status[t.old].visible=!1,t.status[t.current].new=!1,t.ticker++},this.activate=function(){t.status[t.current].active=!0,t.ticker++},this.getClasses.bind(this),this.goTo.bind(this),this.activate.bind(this),this.deactivate.bind(this),this.next.bind(this);for(var e=0;e<this.slideCount;e++)this.status.push({visible:0===e,active:0===e,new:!1})}return t.prototype.componentDidLoad=function(){this.timer=setTimeout(this.next,this.slideDelay)},t.prototype.getClasses=function(t){return[this.status[t].visible?\"visible\":\"\",this.status[t].active?\"active\":\"\",this.status[t].new?\"new\":\"\"].join(\" \")},t.prototype.render=function(){return[e(\"div\",{class:this.getClasses(0)},e(\"slot\",{name:\"slide-0\"})),e(\"div\",{class:this.getClasses(1)},e(\"slot\",{name:\"slide-1\"})),e(\"ul\",{class:\"dots\"},e(\"li\",{class:0===this.current?\"active\":\"\",onClick:this.goTo.bind(this,0)}),e(\"li\",{class:1===this.current?\"active\":\"\",onClick:this.goTo.bind(this,1)}))]},Object.defineProperty(t,\"is\",{get:function(){return\"ionic-slider\"},enumerable:!0,configurable:!0}),Object.defineProperty(t,\"properties\",{get:function(){return{current:{state:!0},status:{state:!0},ticker:{state:!0}}},enumerable:!0,configurable:!0}),Object.defineProperty(t,\"style\",{get:function(){return\"ionic-slider{position:relative}ionic-slider>div,ionic-slider [slot^=slide-]{position:absolute;top:0;right:0;bottom:0;left:0;overflow:hidden}ionic-slider>div{display:none;-webkit-animation:fadeIn .5s ease;animation:fadeIn .5s ease}ionic-slider>div.visible{display:block}ionic-slider>div.visible.new{z-index:1}ionic-slider .dots{position:absolute;top:0;bottom:0;left:20px;padding:0;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;-ms-flex-pack:center;justify-content:center;-ms-flex-line-pack:center;align-content:center;z-index:2}ionic-slider .dots li{height:8px;width:8px;border-radius:50%;border:1px solid hsla(0,0%,100%,.5);margin-bottom:4px;list-style:none;cursor:pointer;-webkit-transition:background-color .5s ease,border-color .5s ease;transition:background-color .5s ease,border-color .5s ease}ionic-slider .dots li.active{background-color:#fff;border-color:#fff}\"},enumerable:!0,configurable:!0}),t}();t.IonicSlider=i,Object.defineProperty(t,\"__esModule\",{value:!0})});"
  },
  {
    "path": "content/js/stencil/ionic-site-components/uyiaiqzf.entry.js",
    "content": "const t=window.IonicSiteComponents.h;class s{render(){return t(\"svg\",{class:\"new-tab\",viewBox:\"0 0 12 12\",\"data-ssrc\":\"59.1\"},t(\"g\",{transform:\"translate(0,1)\",\"data-ssrc\":\"59.0\"},t(\"rect\",{class:\"new-tab__box\",x:\"0\",y:\"2\",width:\"9\",height:\"9\",rx:\"1.5\",\"data-ssrc\":\"59.0.\"}),t(\"path\",{class:\"new-tab__arrow\",d:\"M9.18198052,1 L6.5,1 L6.5,0 L11,0 L11,1 L11,4.5 L10,4.5 L10,1.59619408 L4.02512627,7.57106781 L3.31801948,6.86396103 L9.18198052,1 Z\",\"data-ssrc\":\"59.1.\"})))}static get is(){return\"icon-external\"}static get style(){return\"icon-external{color:#a6b8d2;width:.8em;height:.8em;display:inline-block}icon-external svg{fill:currentColor}icon-external svg .new-tab__box{opacity:.5}icon-external svg .new-tab__arrow{-webkit-transition:transform .2s ease-out,fill .2s ease;transition:transform .2s ease-out,fill .2s ease;will-change:trasnform,fill}a:hover icon-external,icon-external:hover{color:#488aff}a:hover icon-external .new-tab__arrow,icon-external:hover .new-tab__arrow{-webkit-transform:translate(1px,-1px);transform:translate(1px,-1px)}\"}}export{s as IconExternal};"
  },
  {
    "path": "content/js/stencil/ionic-site-components/uyiaiqzf.es5.entry.js",
    "content": "IonicSiteComponents.loadBundle(\"uyiaiqzf\",[\"exports\"],function(e){var n=window.IonicSiteComponents.h,t=function(){function e(){}return e.prototype.render=function(){return n(\"svg\",{class:\"new-tab\",viewBox:\"0 0 12 12\",\"data-ssrc\":\"59.1\"},n(\"g\",{transform:\"translate(0,1)\",\"data-ssrc\":\"59.0\"},n(\"rect\",{class:\"new-tab__box\",x:\"0\",y:\"2\",width:\"9\",height:\"9\",rx:\"1.5\",\"data-ssrc\":\"59.0.\"}),n(\"path\",{class:\"new-tab__arrow\",d:\"M9.18198052,1 L6.5,1 L6.5,0 L11,0 L11,1 L11,4.5 L10,4.5 L10,1.59619408 L4.02512627,7.57106781 L3.31801948,6.86396103 L9.18198052,1 Z\",\"data-ssrc\":\"59.1.\"})))},Object.defineProperty(e,\"is\",{get:function(){return\"icon-external\"},enumerable:!0,configurable:!0}),Object.defineProperty(e,\"style\",{get:function(){return\"icon-external{color:#a6b8d2;width:.8em;height:.8em;display:inline-block}icon-external svg{fill:currentColor}icon-external svg .new-tab__box{opacity:.5}icon-external svg .new-tab__arrow{-webkit-transition:transform .2s ease-out,fill .2s ease;transition:transform .2s ease-out,fill .2s ease;will-change:trasnform,fill}a:hover icon-external,icon-external:hover{color:#488aff}a:hover icon-external .new-tab__arrow,icon-external:hover .new-tab__arrow{-webkit-transform:translate(1px,-1px);transform:translate(1px,-1px)}\"},enumerable:!0,configurable:!0}),e}();e.IconExternal=t,Object.defineProperty(e,\"__esModule\",{value:!0})});"
  },
  {
    "path": "content/js/stencil/ionic-site-components/uyiaiqzf.sc.entry.js",
    "content": "const t=window.IonicSiteComponents.h;class s{render(){return t(\"svg\",{class:\"new-tab\",viewBox:\"0 0 12 12\",\"data-ssrc\":\"59.1\"},t(\"g\",{transform:\"translate(0,1)\",\"data-ssrc\":\"59.0\"},t(\"rect\",{class:\"new-tab__box\",x:\"0\",y:\"2\",width:\"9\",height:\"9\",rx:\"1.5\",\"data-ssrc\":\"59.0.\"}),t(\"path\",{class:\"new-tab__arrow\",d:\"M9.18198052,1 L6.5,1 L6.5,0 L11,0 L11,1 L11,4.5 L10,4.5 L10,1.59619408 L4.02512627,7.57106781 L3.31801948,6.86396103 L9.18198052,1 Z\",\"data-ssrc\":\"59.1.\"})))}static get is(){return\"icon-external\"}static get style(){return\"icon-external{color:#a6b8d2;width:.8em;height:.8em;display:inline-block}icon-external svg{fill:currentColor}icon-external svg .new-tab__box{opacity:.5}icon-external svg .new-tab__arrow{-webkit-transition:transform .2s ease-out,fill .2s ease;transition:transform .2s ease-out,fill .2s ease;will-change:trasnform,fill}a:hover icon-external,icon-external:hover{color:#488aff}a:hover icon-external .new-tab__arrow,icon-external:hover .new-tab__arrow{-webkit-transform:translate(1px,-1px);transform:translate(1px,-1px)}\"}}export{s as IconExternal};"
  },
  {
    "path": "content/js/stencil/ionic-site-components/uyiaiqzf.sc.es5.entry.js",
    "content": "IonicSiteComponents.loadBundle(\"uyiaiqzf\",[\"exports\"],function(e){var n=window.IonicSiteComponents.h,t=function(){function e(){}return e.prototype.render=function(){return n(\"svg\",{class:\"new-tab\",viewBox:\"0 0 12 12\",\"data-ssrc\":\"59.1\"},n(\"g\",{transform:\"translate(0,1)\",\"data-ssrc\":\"59.0\"},n(\"rect\",{class:\"new-tab__box\",x:\"0\",y:\"2\",width:\"9\",height:\"9\",rx:\"1.5\",\"data-ssrc\":\"59.0.\"}),n(\"path\",{class:\"new-tab__arrow\",d:\"M9.18198052,1 L6.5,1 L6.5,0 L11,0 L11,1 L11,4.5 L10,4.5 L10,1.59619408 L4.02512627,7.57106781 L3.31801948,6.86396103 L9.18198052,1 Z\",\"data-ssrc\":\"59.1.\"})))},Object.defineProperty(e,\"is\",{get:function(){return\"icon-external\"},enumerable:!0,configurable:!0}),Object.defineProperty(e,\"style\",{get:function(){return\"icon-external{color:#a6b8d2;width:.8em;height:.8em;display:inline-block}icon-external svg{fill:currentColor}icon-external svg .new-tab__box{opacity:.5}icon-external svg .new-tab__arrow{-webkit-transition:transform .2s ease-out,fill .2s ease;transition:transform .2s ease-out,fill .2s ease;will-change:trasnform,fill}a:hover icon-external,icon-external:hover{color:#488aff}a:hover icon-external .new-tab__arrow,icon-external:hover .new-tab__arrow{-webkit-transform:translate(1px,-1px);transform:translate(1px,-1px)}\"},enumerable:!0,configurable:!0}),e}();e.IconExternal=t,Object.defineProperty(e,\"__esModule\",{value:!0})});"
  },
  {
    "path": "content/js/stencil/ionic-site-components/z7r5cewq.entry.js",
    "content": "const t=window.IonicSiteComponents.h;class e{constructor(){this.color=\"default\",this.type=\"button\",this.disabled=!1}render(){return t(\"button\",this.disabled?{class:this.color,type:this.type,disabled:!0}:{class:this.color,type:this.type},t(\"slot\",null))}static get is(){return\"ionic-button\"}static get properties(){return{color:{type:String,attr:\"color\"},disabled:{type:Boolean,attr:\"disabled\"},type:{type:String,attr:\"type\"}}}static get style(){return\"ionic-button button{border-radius:4px;padding:11px 15px 9px;font-size:16px;font-weight:500;-webkit-box-shadow:0 1px 3px rgba(0,0,0,.1);box-shadow:0 1px 3px rgba(0,0,0,.1);border:0;outline:none;height:100%;-webkit-transition:background-color .2s,border-color .3s,color .3s,-webkit-box-shadow .3s;transition:background-color .2s,border-color .3s,color .3s,-webkit-box-shadow .3s;transition:background-color .2s,border-color .3s,box-shadow .3s,color .3s;transition:background-color .2s,border-color .3s,box-shadow .3s,color .3s,-webkit-box-shadow .3s}ionic-button button.default{background:#488aff;color:#fff}ionic-button button.default:hover{background:#629aff}ionic-button button.default:active{background:#2f7aff}ionic-button button.white{background:#fff;border-color:#e8ebf1;color:#488aff}ionic-button button.white:active{background:#fafafa}ionic-button button:hover{-webkit-box-shadow:0 2px 5px rgba(0,0,0,.12);box-shadow:0 2px 5px rgba(0,0,0,.12)}ionic-button button:active{-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.1);box-shadow:inset 0 1px 2px rgba(0,0,0,.1)}ionic-button button:disabled{background:#e8ebf1;color:#fff;-webkit-box-shadow:none;box-shadow:none}\"}}const i=()=>t(\"svg\",{width:\"20\",height:\"14\",viewBox:\"0 0 20 14\",fill:\"none\",xmlns:\"http://www.w3.org/2000/svg\"},t(\"path\",{d:\"M19.8365 1.71514L14.6635 7.04323C14.625 7.08213 14.625 7.14046 14.6635 7.17935L18.2837 11.0782C18.5288 11.3261 18.5288 11.7248 18.2837 11.9727C18.1635 12.0942 18 12.1574 17.8413 12.1574C17.6827 12.1574 17.5192 12.0942 17.399 11.9727L13.7933 8.08844C13.7548 8.04954 13.6923 8.04954 13.6538 8.08844L12.774 8.99266C12.0385 9.74617 11.0625 10.1643 10.0144 10.1691C8.95192 10.174 7.94231 9.72187 7.19712 8.95863L6.35096 8.08844C6.3125 8.04954 6.25 8.04954 6.21154 8.08844L2.60577 11.9727C2.48558 12.0942 2.32212 12.1574 2.16346 12.1574C2.00481 12.1574 1.84135 12.0942 1.72115 11.9727C1.47596 11.7248 1.47596 11.3261 1.72115 11.0782L5.34135 7.17935C5.375 7.14046 5.375 7.08213 5.34135 7.04323L0.163462 1.71514C0.100962 1.65194 0 1.69569 0 1.7832V12.4443C0 13.2999 0.692308 13.9999 1.53846 13.9999H18.4615C19.3077 13.9999 20 13.2999 20 12.4443V1.7832C20 1.69569 19.8942 1.6568 19.8365 1.71514Z\",fill:\"#B2BECD\"}),t(\"path\",{d:\"M10.0013 8.90121C10.7128 8.90121 11.3811 8.61925 11.8811 8.10394L19.4244 0.340297C19.1599 0.126396 18.833 0 18.4724 0H1.53493C1.17435 0 0.842623 0.126396 0.583008 0.340297L8.12628 8.10394C8.62147 8.61438 9.28974 8.90121 10.0013 8.90121Z\",fill:\"#B2BECD\"}));class s{constructor(){this.placeholder=\"Email address\",this.buttonText=\"Subscribe\",this.darkMode=!1,this.homepageMode=!1,this.arrowMode=!1,this.lg=!1,this.kind=\"default\",this.isLoading=!1,this.hasSubmitted=!1,this.email=null,this.hsFormIds={default:\"76e5f69f-85fd-4579-afce-a1892d48bb32\",podcast:\"\"}}handleEmailChange(t){this.email=t.target.value}handleSubmit(t){t.preventDefault();const e=this.email;this.isLoading=!0;var i=new XMLHttpRequest;i.open(\"POST\",\"/api/v1/newsletter\"),i.setRequestHeader(\"Content-Type\",\"application/json;charset=UTF-8\"),i.onreadystatechange=(()=>{if(4===i.readyState&&200===i.status){this.isLoading=!1;var t=JSON.parse(i.responseText);this.hasSubmitted=t.ok,this.hubspotIdentify(e)}}),i.send(JSON.stringify({email:this.email,podcast:\"podcast\"===this.kind}))}hubspotIdentify(t){const e=window._hsq=window._hsq||[];e.push([\"identify\",{email:t}]),e.push([\"trackEvent\",{id:\"Signed Up for Newsletter\",value:!0}]);var i=new XMLHttpRequest,s=[\"https://api.hsforms.com/submissions/v3/integration/submit\",\"3776657\",\"76e5f69f-85fd-4579-afce-a1892d48bb32\"].join(\"/\");i.open(\"POST\",s),i.setRequestHeader(\"Content-Type\",\"application/json;charset=UTF-8\"),i.onreadystatechange=(()=>{if(4===i.readyState&&200===i.status){var t=JSON.parse(i.responseText);console.log(t)}}),i.send(JSON.stringify({fields:[{name:\"email\",value:this.email}],context:{hutk:document.cookie.match(/hubspotutk=(.*?);/)[1],pageUri:window.location.href,pageName:document.title}}))}getFormClass(){let t=this.darkMode?\"dark\":\"\";return this.arrowMode&&(t+=\" arrow\"),this.homepageMode&&(t+=\" homepage\"),this.lg&&(t+=\" lg\"),t}render(){return t(\"form\",{onSubmit:t=>this.handleSubmit(t),class:this.getFormClass()},this.homepageMode?t(i,null):\"\",t(\"input\",{name:\"email\",type:\"email\",value:this.email,onInput:()=>this.handleEmailChange(event),disabled:this.isLoading,placeholder:this.placeholder,required:!0}),t(\"ionic-button\",{color:this.darkMode?\"white\":\"default\",type:\"submit\",disabled:this.isLoading||this.hasSubmitted},this.hasSubmitted?\"Added!\":this.arrowMode||this.homepageMode?t(\"ion-icon\",{name:\"md-arrow-forward\"}):this.buttonText))}static get is(){return\"ionic-newsletter-signup\"}static get properties(){return{arrowMode:{type:Boolean,attr:\"arrow-mode\"},buttonText:{type:String,attr:\"button-text\"},darkMode:{type:Boolean,attr:\"dark-mode\"},email:{state:!0},hasSubmitted:{state:!0},homepageMode:{type:Boolean,attr:\"homepage-mode\"},isLoading:{state:!0},kind:{type:String,attr:\"kind\"},lg:{type:Boolean,attr:\"lg\"},placeholder:{type:String,attr:\"placeholder\"}}}static get style(){return\"ionic-newsletter-signup form{position:relative;display:-ms-flexbox;display:flex;border-collapse:separate;width:100%;height:40px}\\@media (max-width:991px){ionic-newsletter-signup form{max-width:calc(100% - 340px)}}\\@media (max-width:767px){ionic-newsletter-signup form{float:none;max-width:100%;margin-top:15px}}ionic-newsletter-signup form.dark input{color:#fff;-webkit-box-shadow:none;box-shadow:none}ionic-newsletter-signup form.dark input:hover{-webkit-box-shadow:0 1px 3px rgba(0,0,0,.15);box-shadow:0 1px 3px rgba(0,0,0,.15)}ionic-newsletter-signup form.dark input:focus{-webkit-box-shadow:0 1px 3px rgba(0,0,0,.1);box-shadow:0 1px 3px rgba(0,0,0,.1)}ionic-newsletter-signup form.dark input::-webkit-input-placeholder{color:#bbceef}ionic-newsletter-signup form.dark input:-ms-input-placeholder{color:#bbceef}ionic-newsletter-signup form.dark input::-ms-input-placeholder{color:#bbceef}ionic-newsletter-signup form.dark input::placeholder{color:#bbceef}ionic-newsletter-signup form.lg{height:48px}ionic-newsletter-signup form.lg input{padding:1px 17px 0;font-size:14px}ionic-newsletter-signup form.lg ionic-button button{padding:11px 12px}ionic-newsletter-signup form.arrow{border-radius:6px;-webkit-box-shadow:0 1px 3px rgba(0,16,44,.08),0 2px 4px rgba(0,16,44,.12);box-shadow:0 1px 3px rgba(0,16,44,.08),0 2px 4px rgba(0,16,44,.12);-webkit-transition:box-shadow .15s ease;transition:box-shadow .15s ease}ionic-newsletter-signup form.arrow:hover{-webkit-box-shadow:0 7px 14px rgba(0,16,44,.12),0 3px 6px rgba(0,16,44,.08);box-shadow:0 7px 14px rgba(0,16,44,.12),0 3px 6px rgba(0,16,44,.08)}ionic-newsletter-signup form.arrow input{border-radius:6px 0 0 6px;-webkit-box-shadow:none;box-shadow:none}ionic-newsletter-signup form.arrow input::-webkit-input-placeholder{color:#a8b0be;font-weight:400}ionic-newsletter-signup form.arrow input:-ms-input-placeholder{color:#a8b0be;font-weight:400}ionic-newsletter-signup form.arrow input::-ms-input-placeholder{color:#a8b0be;font-weight:400}ionic-newsletter-signup form.arrow input::placeholder{color:#a8b0be;font-weight:400}ionic-newsletter-signup form.arrow ionic-button button{background:#f0f5ff;color:#3880ff;font-size:23px;display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;border-radius:0 6px 6px 0}ionic-newsletter-signup form.arrow ionic-button button:hover{background:#ebf2ff}\\@media (max-width:991px){ionic-newsletter-signup form.arrow{max-width:100%}}ionic-newsletter-signup form.homepage{height:48px;border-radius:6px;background:#f8fafc;border:1px solid #e9edf3;-webkit-transition:border-color .2s,background-color .2s;transition:border-color .2s,background-color .2s}ionic-newsletter-signup form.homepage:hover{border-color:#73a6ff;background:#fff}ionic-newsletter-signup form.homepage svg{position:absolute;top:16px;left:16px}ionic-newsletter-signup form.homepage input{border-radius:6px 0 0 6px;-webkit-box-shadow:none;box-shadow:none;padding-left:46px}ionic-newsletter-signup form.homepage input::-webkit-input-placeholder{color:#a8b0be;font-weight:400}ionic-newsletter-signup form.homepage input:-ms-input-placeholder{color:#a8b0be;font-weight:400}ionic-newsletter-signup form.homepage input::-ms-input-placeholder{color:#a8b0be;font-weight:400}ionic-newsletter-signup form.homepage input::placeholder{color:#a8b0be;font-weight:400}ionic-newsletter-signup form.homepage ionic-button button{background:transparent;color:#7cabff;font-size:23px;display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-webkit-box-shadow:none;box-shadow:none;border-radius:0 6px 6px 0}ionic-newsletter-signup form.homepage ionic-button button:hover{color:#498aff;background:transparent}\\@media (max-width:991px){ionic-newsletter-signup form.homepage{max-width:100%}}ionic-newsletter-signup input{border:none;background:hsla(0,0%,100%,.2);border-radius:4px 0 0 4px;font-size:13px;color:#24282e;-webkit-box-shadow:none;box-shadow:none;font-weight:500;height:100%;outline:0;-ms-flex-positive:1;flex-grow:1;padding:0 16px 1px;-webkit-box-shadow:0 1px 3px rgba(0,0,0,.1);box-shadow:0 1px 3px rgba(0,0,0,.1);-webkit-transition:background .2s,box-shadow .2s;transition:background .2s,box-shadow .2s}ionic-newsletter-signup input:hover{-webkit-box-shadow:0 1px 3px rgba(0,0,0,.15);box-shadow:0 1px 3px rgba(0,0,0,.15)}ionic-newsletter-signup input:focus{-webkit-box-shadow:none;box-shadow:none;background:hsla(0,0%,100%,.25);-webkit-box-shadow:inset 0 0 2px rgba(0,0,0,.1);box-shadow:inset 0 0 2px rgba(0,0,0,.1)}ionic-newsletter-signup input::-webkit-input-placeholder{padding-left:0;color:#a1a9b6}ionic-newsletter-signup input:-ms-input-placeholder{padding-left:0;color:#a1a9b6}ionic-newsletter-signup input::-ms-input-placeholder{padding-left:0;color:#a1a9b6}ionic-newsletter-signup input::placeholder{padding-left:0;color:#a1a9b6}ionic-newsletter-signup ionic-button{height:100%}ionic-newsletter-signup ionic-button button{border-top-left-radius:0;border-bottom-left-radius:0;font-weight:500;font-size:14px;height:100%;padding:8px 9px 10px}\"}}export{e as IonicButton,s as IonicNewsletterSignup};"
  },
  {
    "path": "content/js/stencil/ionic-site-components/z7r5cewq.es5.entry.js",
    "content": "IonicSiteComponents.loadBundle(\"z7r5cewq\",[\"exports\"],function(e){var t=window.IonicSiteComponents.h,i=function(){function e(){this.color=\"default\",this.type=\"button\",this.disabled=!1}return e.prototype.render=function(){return t(\"button\",this.disabled?{class:this.color,type:this.type,disabled:!0}:{class:this.color,type:this.type},t(\"slot\",null))},Object.defineProperty(e,\"is\",{get:function(){return\"ionic-button\"},enumerable:!0,configurable:!0}),Object.defineProperty(e,\"properties\",{get:function(){return{color:{type:String,attr:\"color\"},disabled:{type:Boolean,attr:\"disabled\"},type:{type:String,attr:\"type\"}}},enumerable:!0,configurable:!0}),Object.defineProperty(e,\"style\",{get:function(){return\"ionic-button button{border-radius:4px;padding:11px 15px 9px;font-size:16px;font-weight:500;-webkit-box-shadow:0 1px 3px rgba(0,0,0,.1);box-shadow:0 1px 3px rgba(0,0,0,.1);border:0;outline:none;height:100%;-webkit-transition:background-color .2s,border-color .3s,color .3s,-webkit-box-shadow .3s;transition:background-color .2s,border-color .3s,color .3s,-webkit-box-shadow .3s;transition:background-color .2s,border-color .3s,box-shadow .3s,color .3s;transition:background-color .2s,border-color .3s,box-shadow .3s,color .3s,-webkit-box-shadow .3s}ionic-button button.default{background:#488aff;color:#fff}ionic-button button.default:hover{background:#629aff}ionic-button button.default:active{background:#2f7aff}ionic-button button.white{background:#fff;border-color:#e8ebf1;color:#488aff}ionic-button button.white:active{background:#fafafa}ionic-button button:hover{-webkit-box-shadow:0 2px 5px rgba(0,0,0,.12);box-shadow:0 2px 5px rgba(0,0,0,.12)}ionic-button button:active{-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.1);box-shadow:inset 0 1px 2px rgba(0,0,0,.1)}ionic-button button:disabled{background:#e8ebf1;color:#fff;-webkit-box-shadow:none;box-shadow:none}\"},enumerable:!0,configurable:!0}),e}(),n=function(){return t(\"svg\",{width:\"20\",height:\"14\",viewBox:\"0 0 20 14\",fill:\"none\",xmlns:\"http://www.w3.org/2000/svg\"},t(\"path\",{d:\"M19.8365 1.71514L14.6635 7.04323C14.625 7.08213 14.625 7.14046 14.6635 7.17935L18.2837 11.0782C18.5288 11.3261 18.5288 11.7248 18.2837 11.9727C18.1635 12.0942 18 12.1574 17.8413 12.1574C17.6827 12.1574 17.5192 12.0942 17.399 11.9727L13.7933 8.08844C13.7548 8.04954 13.6923 8.04954 13.6538 8.08844L12.774 8.99266C12.0385 9.74617 11.0625 10.1643 10.0144 10.1691C8.95192 10.174 7.94231 9.72187 7.19712 8.95863L6.35096 8.08844C6.3125 8.04954 6.25 8.04954 6.21154 8.08844L2.60577 11.9727C2.48558 12.0942 2.32212 12.1574 2.16346 12.1574C2.00481 12.1574 1.84135 12.0942 1.72115 11.9727C1.47596 11.7248 1.47596 11.3261 1.72115 11.0782L5.34135 7.17935C5.375 7.14046 5.375 7.08213 5.34135 7.04323L0.163462 1.71514C0.100962 1.65194 0 1.69569 0 1.7832V12.4443C0 13.2999 0.692308 13.9999 1.53846 13.9999H18.4615C19.3077 13.9999 20 13.2999 20 12.4443V1.7832C20 1.69569 19.8942 1.6568 19.8365 1.71514Z\",fill:\"#B2BECD\"}),t(\"path\",{d:\"M10.0013 8.90121C10.7128 8.90121 11.3811 8.61925 11.8811 8.10394L19.4244 0.340297C19.1599 0.126396 18.833 0 18.4724 0H1.53493C1.17435 0 0.842623 0.126396 0.583008 0.340297L8.12628 8.10394C8.62147 8.61438 9.28974 8.90121 10.0013 8.90121Z\",fill:\"#B2BECD\"}))},o=function(){function e(){this.placeholder=\"Email address\",this.buttonText=\"Subscribe\",this.darkMode=!1,this.homepageMode=!1,this.arrowMode=!1,this.lg=!1,this.kind=\"default\",this.isLoading=!1,this.hasSubmitted=!1,this.email=null,this.hsFormIds={default:\"76e5f69f-85fd-4579-afce-a1892d48bb32\",podcast:\"\"}}return e.prototype.handleEmailChange=function(e){this.email=e.target.value},e.prototype.handleSubmit=function(e){var t=this;e.preventDefault();var i=this.email;this.isLoading=!0;var n=new XMLHttpRequest;n.open(\"POST\",\"/api/v1/newsletter\"),n.setRequestHeader(\"Content-Type\",\"application/json;charset=UTF-8\"),n.onreadystatechange=function(){if(4===n.readyState&&200===n.status){t.isLoading=!1;var e=JSON.parse(n.responseText);t.hasSubmitted=e.ok,t.hubspotIdentify(i)}},n.send(JSON.stringify({email:this.email,podcast:\"podcast\"===this.kind}))},e.prototype.hubspotIdentify=function(e){var t=window._hsq=window._hsq||[];t.push([\"identify\",{email:e}]),t.push([\"trackEvent\",{id:\"Signed Up for Newsletter\",value:!0}]);var i=new XMLHttpRequest,n=[\"https://api.hsforms.com/submissions/v3/integration/submit\",\"3776657\",\"76e5f69f-85fd-4579-afce-a1892d48bb32\"].join(\"/\");i.open(\"POST\",n),i.setRequestHeader(\"Content-Type\",\"application/json;charset=UTF-8\"),i.onreadystatechange=function(){if(4===i.readyState&&200===i.status){var e=JSON.parse(i.responseText);console.log(e)}},i.send(JSON.stringify({fields:[{name:\"email\",value:this.email}],context:{hutk:document.cookie.match(/hubspotutk=(.*?);/)[1],pageUri:window.location.href,pageName:document.title}}))},e.prototype.getFormClass=function(){var e=this.darkMode?\"dark\":\"\";return this.arrowMode&&(e+=\" arrow\"),this.homepageMode&&(e+=\" homepage\"),this.lg&&(e+=\" lg\"),e},e.prototype.render=function(){var e=this;return t(\"form\",{onSubmit:function(t){return e.handleSubmit(t)},class:this.getFormClass()},this.homepageMode?t(n,null):\"\",t(\"input\",{name:\"email\",type:\"email\",value:this.email,onInput:function(){return e.handleEmailChange(event)},disabled:this.isLoading,placeholder:this.placeholder,required:!0}),t(\"ionic-button\",{color:this.darkMode?\"white\":\"default\",type:\"submit\",disabled:this.isLoading||this.hasSubmitted},this.hasSubmitted?\"Added!\":this.arrowMode||this.homepageMode?t(\"ion-icon\",{name:\"md-arrow-forward\"}):this.buttonText))},Object.defineProperty(e,\"is\",{get:function(){return\"ionic-newsletter-signup\"},enumerable:!0,configurable:!0}),Object.defineProperty(e,\"properties\",{get:function(){return{arrowMode:{type:Boolean,attr:\"arrow-mode\"},buttonText:{type:String,attr:\"button-text\"},darkMode:{type:Boolean,attr:\"dark-mode\"},email:{state:!0},hasSubmitted:{state:!0},homepageMode:{type:Boolean,attr:\"homepage-mode\"},isLoading:{state:!0},kind:{type:String,attr:\"kind\"},lg:{type:Boolean,attr:\"lg\"},placeholder:{type:String,attr:\"placeholder\"}}},enumerable:!0,configurable:!0}),Object.defineProperty(e,\"style\",{get:function(){return\"ionic-newsletter-signup form{position:relative;display:-ms-flexbox;display:flex;border-collapse:separate;width:100%;height:40px}\\@media (max-width:991px){ionic-newsletter-signup form{max-width:calc(100% - 340px)}}\\@media (max-width:767px){ionic-newsletter-signup form{float:none;max-width:100%;margin-top:15px}}ionic-newsletter-signup form.dark input{color:#fff;-webkit-box-shadow:none;box-shadow:none}ionic-newsletter-signup form.dark input:hover{-webkit-box-shadow:0 1px 3px rgba(0,0,0,.15);box-shadow:0 1px 3px rgba(0,0,0,.15)}ionic-newsletter-signup form.dark input:focus{-webkit-box-shadow:0 1px 3px rgba(0,0,0,.1);box-shadow:0 1px 3px rgba(0,0,0,.1)}ionic-newsletter-signup form.dark input::-webkit-input-placeholder{color:#bbceef}ionic-newsletter-signup form.dark input:-ms-input-placeholder{color:#bbceef}ionic-newsletter-signup form.dark input::-ms-input-placeholder{color:#bbceef}ionic-newsletter-signup form.dark input::placeholder{color:#bbceef}ionic-newsletter-signup form.lg{height:48px}ionic-newsletter-signup form.lg input{padding:1px 17px 0;font-size:14px}ionic-newsletter-signup form.lg ionic-button button{padding:11px 12px}ionic-newsletter-signup form.arrow{border-radius:6px;-webkit-box-shadow:0 1px 3px rgba(0,16,44,.08),0 2px 4px rgba(0,16,44,.12);box-shadow:0 1px 3px rgba(0,16,44,.08),0 2px 4px rgba(0,16,44,.12);-webkit-transition:box-shadow .15s ease;transition:box-shadow .15s ease}ionic-newsletter-signup form.arrow:hover{-webkit-box-shadow:0 7px 14px rgba(0,16,44,.12),0 3px 6px rgba(0,16,44,.08);box-shadow:0 7px 14px rgba(0,16,44,.12),0 3px 6px rgba(0,16,44,.08)}ionic-newsletter-signup form.arrow input{border-radius:6px 0 0 6px;-webkit-box-shadow:none;box-shadow:none}ionic-newsletter-signup form.arrow input::-webkit-input-placeholder{color:#a8b0be;font-weight:400}ionic-newsletter-signup form.arrow input:-ms-input-placeholder{color:#a8b0be;font-weight:400}ionic-newsletter-signup form.arrow input::-ms-input-placeholder{color:#a8b0be;font-weight:400}ionic-newsletter-signup form.arrow input::placeholder{color:#a8b0be;font-weight:400}ionic-newsletter-signup form.arrow ionic-button button{background:#f0f5ff;color:#3880ff;font-size:23px;display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;border-radius:0 6px 6px 0}ionic-newsletter-signup form.arrow ionic-button button:hover{background:#ebf2ff}\\@media (max-width:991px){ionic-newsletter-signup form.arrow{max-width:100%}}ionic-newsletter-signup form.homepage{height:48px;border-radius:6px;background:#f8fafc;border:1px solid #e9edf3;-webkit-transition:border-color .2s,background-color .2s;transition:border-color .2s,background-color .2s}ionic-newsletter-signup form.homepage:hover{border-color:#73a6ff;background:#fff}ionic-newsletter-signup form.homepage svg{position:absolute;top:16px;left:16px}ionic-newsletter-signup form.homepage input{border-radius:6px 0 0 6px;-webkit-box-shadow:none;box-shadow:none;padding-left:46px}ionic-newsletter-signup form.homepage input::-webkit-input-placeholder{color:#a8b0be;font-weight:400}ionic-newsletter-signup form.homepage input:-ms-input-placeholder{color:#a8b0be;font-weight:400}ionic-newsletter-signup form.homepage input::-ms-input-placeholder{color:#a8b0be;font-weight:400}ionic-newsletter-signup form.homepage input::placeholder{color:#a8b0be;font-weight:400}ionic-newsletter-signup form.homepage ionic-button button{background:transparent;color:#7cabff;font-size:23px;display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-webkit-box-shadow:none;box-shadow:none;border-radius:0 6px 6px 0}ionic-newsletter-signup form.homepage ionic-button button:hover{color:#498aff;background:transparent}\\@media (max-width:991px){ionic-newsletter-signup form.homepage{max-width:100%}}ionic-newsletter-signup input{border:none;background:hsla(0,0%,100%,.2);border-radius:4px 0 0 4px;font-size:13px;color:#24282e;-webkit-box-shadow:none;box-shadow:none;font-weight:500;height:100%;outline:0;-ms-flex-positive:1;flex-grow:1;padding:0 16px 1px;-webkit-box-shadow:0 1px 3px rgba(0,0,0,.1);box-shadow:0 1px 3px rgba(0,0,0,.1);-webkit-transition:background .2s,box-shadow .2s;transition:background .2s,box-shadow .2s}ionic-newsletter-signup input:hover{-webkit-box-shadow:0 1px 3px rgba(0,0,0,.15);box-shadow:0 1px 3px rgba(0,0,0,.15)}ionic-newsletter-signup input:focus{-webkit-box-shadow:none;box-shadow:none;background:hsla(0,0%,100%,.25);-webkit-box-shadow:inset 0 0 2px rgba(0,0,0,.1);box-shadow:inset 0 0 2px rgba(0,0,0,.1)}ionic-newsletter-signup input::-webkit-input-placeholder{padding-left:0;color:#a1a9b6}ionic-newsletter-signup input:-ms-input-placeholder{padding-left:0;color:#a1a9b6}ionic-newsletter-signup input::-ms-input-placeholder{padding-left:0;color:#a1a9b6}ionic-newsletter-signup input::placeholder{padding-left:0;color:#a1a9b6}ionic-newsletter-signup ionic-button{height:100%}ionic-newsletter-signup ionic-button button{border-top-left-radius:0;border-bottom-left-radius:0;font-weight:500;font-size:14px;height:100%;padding:8px 9px 10px}\"},enumerable:!0,configurable:!0}),e}();e.IonicButton=i,e.IonicNewsletterSignup=o,Object.defineProperty(e,\"__esModule\",{value:!0})});"
  },
  {
    "path": "content/js/stencil/ionic-site-components/z7r5cewq.sc.entry.js",
    "content": "const t=window.IonicSiteComponents.h;class e{constructor(){this.color=\"default\",this.type=\"button\",this.disabled=!1}render(){return t(\"button\",this.disabled?{class:this.color,type:this.type,disabled:!0}:{class:this.color,type:this.type},t(\"slot\",null))}static get is(){return\"ionic-button\"}static get properties(){return{color:{type:String,attr:\"color\"},disabled:{type:Boolean,attr:\"disabled\"},type:{type:String,attr:\"type\"}}}static get style(){return\"ionic-button button{border-radius:4px;padding:11px 15px 9px;font-size:16px;font-weight:500;-webkit-box-shadow:0 1px 3px rgba(0,0,0,.1);box-shadow:0 1px 3px rgba(0,0,0,.1);border:0;outline:none;height:100%;-webkit-transition:background-color .2s,border-color .3s,color .3s,-webkit-box-shadow .3s;transition:background-color .2s,border-color .3s,color .3s,-webkit-box-shadow .3s;transition:background-color .2s,border-color .3s,box-shadow .3s,color .3s;transition:background-color .2s,border-color .3s,box-shadow .3s,color .3s,-webkit-box-shadow .3s}ionic-button button.default{background:#488aff;color:#fff}ionic-button button.default:hover{background:#629aff}ionic-button button.default:active{background:#2f7aff}ionic-button button.white{background:#fff;border-color:#e8ebf1;color:#488aff}ionic-button button.white:active{background:#fafafa}ionic-button button:hover{-webkit-box-shadow:0 2px 5px rgba(0,0,0,.12);box-shadow:0 2px 5px rgba(0,0,0,.12)}ionic-button button:active{-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.1);box-shadow:inset 0 1px 2px rgba(0,0,0,.1)}ionic-button button:disabled{background:#e8ebf1;color:#fff;-webkit-box-shadow:none;box-shadow:none}\"}}const i=()=>t(\"svg\",{width:\"20\",height:\"14\",viewBox:\"0 0 20 14\",fill:\"none\",xmlns:\"http://www.w3.org/2000/svg\"},t(\"path\",{d:\"M19.8365 1.71514L14.6635 7.04323C14.625 7.08213 14.625 7.14046 14.6635 7.17935L18.2837 11.0782C18.5288 11.3261 18.5288 11.7248 18.2837 11.9727C18.1635 12.0942 18 12.1574 17.8413 12.1574C17.6827 12.1574 17.5192 12.0942 17.399 11.9727L13.7933 8.08844C13.7548 8.04954 13.6923 8.04954 13.6538 8.08844L12.774 8.99266C12.0385 9.74617 11.0625 10.1643 10.0144 10.1691C8.95192 10.174 7.94231 9.72187 7.19712 8.95863L6.35096 8.08844C6.3125 8.04954 6.25 8.04954 6.21154 8.08844L2.60577 11.9727C2.48558 12.0942 2.32212 12.1574 2.16346 12.1574C2.00481 12.1574 1.84135 12.0942 1.72115 11.9727C1.47596 11.7248 1.47596 11.3261 1.72115 11.0782L5.34135 7.17935C5.375 7.14046 5.375 7.08213 5.34135 7.04323L0.163462 1.71514C0.100962 1.65194 0 1.69569 0 1.7832V12.4443C0 13.2999 0.692308 13.9999 1.53846 13.9999H18.4615C19.3077 13.9999 20 13.2999 20 12.4443V1.7832C20 1.69569 19.8942 1.6568 19.8365 1.71514Z\",fill:\"#B2BECD\"}),t(\"path\",{d:\"M10.0013 8.90121C10.7128 8.90121 11.3811 8.61925 11.8811 8.10394L19.4244 0.340297C19.1599 0.126396 18.833 0 18.4724 0H1.53493C1.17435 0 0.842623 0.126396 0.583008 0.340297L8.12628 8.10394C8.62147 8.61438 9.28974 8.90121 10.0013 8.90121Z\",fill:\"#B2BECD\"}));class s{constructor(){this.placeholder=\"Email address\",this.buttonText=\"Subscribe\",this.darkMode=!1,this.homepageMode=!1,this.arrowMode=!1,this.lg=!1,this.kind=\"default\",this.isLoading=!1,this.hasSubmitted=!1,this.email=null,this.hsFormIds={default:\"76e5f69f-85fd-4579-afce-a1892d48bb32\",podcast:\"\"}}handleEmailChange(t){this.email=t.target.value}handleSubmit(t){t.preventDefault();const e=this.email;this.isLoading=!0;var i=new XMLHttpRequest;i.open(\"POST\",\"/api/v1/newsletter\"),i.setRequestHeader(\"Content-Type\",\"application/json;charset=UTF-8\"),i.onreadystatechange=(()=>{if(4===i.readyState&&200===i.status){this.isLoading=!1;var t=JSON.parse(i.responseText);this.hasSubmitted=t.ok,this.hubspotIdentify(e)}}),i.send(JSON.stringify({email:this.email,podcast:\"podcast\"===this.kind}))}hubspotIdentify(t){const e=window._hsq=window._hsq||[];e.push([\"identify\",{email:t}]),e.push([\"trackEvent\",{id:\"Signed Up for Newsletter\",value:!0}]);var i=new XMLHttpRequest,s=[\"https://api.hsforms.com/submissions/v3/integration/submit\",\"3776657\",\"76e5f69f-85fd-4579-afce-a1892d48bb32\"].join(\"/\");i.open(\"POST\",s),i.setRequestHeader(\"Content-Type\",\"application/json;charset=UTF-8\"),i.onreadystatechange=(()=>{if(4===i.readyState&&200===i.status){var t=JSON.parse(i.responseText);console.log(t)}}),i.send(JSON.stringify({fields:[{name:\"email\",value:this.email}],context:{hutk:document.cookie.match(/hubspotutk=(.*?);/)[1],pageUri:window.location.href,pageName:document.title}}))}getFormClass(){let t=this.darkMode?\"dark\":\"\";return this.arrowMode&&(t+=\" arrow\"),this.homepageMode&&(t+=\" homepage\"),this.lg&&(t+=\" lg\"),t}render(){return t(\"form\",{onSubmit:t=>this.handleSubmit(t),class:this.getFormClass()},this.homepageMode?t(i,null):\"\",t(\"input\",{name:\"email\",type:\"email\",value:this.email,onInput:()=>this.handleEmailChange(event),disabled:this.isLoading,placeholder:this.placeholder,required:!0}),t(\"ionic-button\",{color:this.darkMode?\"white\":\"default\",type:\"submit\",disabled:this.isLoading||this.hasSubmitted},this.hasSubmitted?\"Added!\":this.arrowMode||this.homepageMode?t(\"ion-icon\",{name:\"md-arrow-forward\"}):this.buttonText))}static get is(){return\"ionic-newsletter-signup\"}static get properties(){return{arrowMode:{type:Boolean,attr:\"arrow-mode\"},buttonText:{type:String,attr:\"button-text\"},darkMode:{type:Boolean,attr:\"dark-mode\"},email:{state:!0},hasSubmitted:{state:!0},homepageMode:{type:Boolean,attr:\"homepage-mode\"},isLoading:{state:!0},kind:{type:String,attr:\"kind\"},lg:{type:Boolean,attr:\"lg\"},placeholder:{type:String,attr:\"placeholder\"}}}static get style(){return\"ionic-newsletter-signup form{position:relative;display:-ms-flexbox;display:flex;border-collapse:separate;width:100%;height:40px}\\@media (max-width:991px){ionic-newsletter-signup form{max-width:calc(100% - 340px)}}\\@media (max-width:767px){ionic-newsletter-signup form{float:none;max-width:100%;margin-top:15px}}ionic-newsletter-signup form.dark input{color:#fff;-webkit-box-shadow:none;box-shadow:none}ionic-newsletter-signup form.dark input:hover{-webkit-box-shadow:0 1px 3px rgba(0,0,0,.15);box-shadow:0 1px 3px rgba(0,0,0,.15)}ionic-newsletter-signup form.dark input:focus{-webkit-box-shadow:0 1px 3px rgba(0,0,0,.1);box-shadow:0 1px 3px rgba(0,0,0,.1)}ionic-newsletter-signup form.dark input::-webkit-input-placeholder{color:#bbceef}ionic-newsletter-signup form.dark input:-ms-input-placeholder{color:#bbceef}ionic-newsletter-signup form.dark input::-ms-input-placeholder{color:#bbceef}ionic-newsletter-signup form.dark input::placeholder{color:#bbceef}ionic-newsletter-signup form.lg{height:48px}ionic-newsletter-signup form.lg input{padding:1px 17px 0;font-size:14px}ionic-newsletter-signup form.lg ionic-button button{padding:11px 12px}ionic-newsletter-signup form.arrow{border-radius:6px;-webkit-box-shadow:0 1px 3px rgba(0,16,44,.08),0 2px 4px rgba(0,16,44,.12);box-shadow:0 1px 3px rgba(0,16,44,.08),0 2px 4px rgba(0,16,44,.12);-webkit-transition:box-shadow .15s ease;transition:box-shadow .15s ease}ionic-newsletter-signup form.arrow:hover{-webkit-box-shadow:0 7px 14px rgba(0,16,44,.12),0 3px 6px rgba(0,16,44,.08);box-shadow:0 7px 14px rgba(0,16,44,.12),0 3px 6px rgba(0,16,44,.08)}ionic-newsletter-signup form.arrow input{border-radius:6px 0 0 6px;-webkit-box-shadow:none;box-shadow:none}ionic-newsletter-signup form.arrow input::-webkit-input-placeholder{color:#a8b0be;font-weight:400}ionic-newsletter-signup form.arrow input:-ms-input-placeholder{color:#a8b0be;font-weight:400}ionic-newsletter-signup form.arrow input::-ms-input-placeholder{color:#a8b0be;font-weight:400}ionic-newsletter-signup form.arrow input::placeholder{color:#a8b0be;font-weight:400}ionic-newsletter-signup form.arrow ionic-button button{background:#f0f5ff;color:#3880ff;font-size:23px;display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;border-radius:0 6px 6px 0}ionic-newsletter-signup form.arrow ionic-button button:hover{background:#ebf2ff}\\@media (max-width:991px){ionic-newsletter-signup form.arrow{max-width:100%}}ionic-newsletter-signup form.homepage{height:48px;border-radius:6px;background:#f8fafc;border:1px solid #e9edf3;-webkit-transition:border-color .2s,background-color .2s;transition:border-color .2s,background-color .2s}ionic-newsletter-signup form.homepage:hover{border-color:#73a6ff;background:#fff}ionic-newsletter-signup form.homepage svg{position:absolute;top:16px;left:16px}ionic-newsletter-signup form.homepage input{border-radius:6px 0 0 6px;-webkit-box-shadow:none;box-shadow:none;padding-left:46px}ionic-newsletter-signup form.homepage input::-webkit-input-placeholder{color:#a8b0be;font-weight:400}ionic-newsletter-signup form.homepage input:-ms-input-placeholder{color:#a8b0be;font-weight:400}ionic-newsletter-signup form.homepage input::-ms-input-placeholder{color:#a8b0be;font-weight:400}ionic-newsletter-signup form.homepage input::placeholder{color:#a8b0be;font-weight:400}ionic-newsletter-signup form.homepage ionic-button button{background:transparent;color:#7cabff;font-size:23px;display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-webkit-box-shadow:none;box-shadow:none;border-radius:0 6px 6px 0}ionic-newsletter-signup form.homepage ionic-button button:hover{color:#498aff;background:transparent}\\@media (max-width:991px){ionic-newsletter-signup form.homepage{max-width:100%}}ionic-newsletter-signup input{border:none;background:hsla(0,0%,100%,.2);border-radius:4px 0 0 4px;font-size:13px;color:#24282e;-webkit-box-shadow:none;box-shadow:none;font-weight:500;height:100%;outline:0;-ms-flex-positive:1;flex-grow:1;padding:0 16px 1px;-webkit-box-shadow:0 1px 3px rgba(0,0,0,.1);box-shadow:0 1px 3px rgba(0,0,0,.1);-webkit-transition:background .2s,box-shadow .2s;transition:background .2s,box-shadow .2s}ionic-newsletter-signup input:hover{-webkit-box-shadow:0 1px 3px rgba(0,0,0,.15);box-shadow:0 1px 3px rgba(0,0,0,.15)}ionic-newsletter-signup input:focus{-webkit-box-shadow:none;box-shadow:none;background:hsla(0,0%,100%,.25);-webkit-box-shadow:inset 0 0 2px rgba(0,0,0,.1);box-shadow:inset 0 0 2px rgba(0,0,0,.1)}ionic-newsletter-signup input::-webkit-input-placeholder{padding-left:0;color:#a1a9b6}ionic-newsletter-signup input:-ms-input-placeholder{padding-left:0;color:#a1a9b6}ionic-newsletter-signup input::-ms-input-placeholder{padding-left:0;color:#a1a9b6}ionic-newsletter-signup input::placeholder{padding-left:0;color:#a1a9b6}ionic-newsletter-signup ionic-button{height:100%}ionic-newsletter-signup ionic-button button{border-top-left-radius:0;border-bottom-left-radius:0;font-weight:500;font-size:14px;height:100%;padding:8px 9px 10px}\"}}export{e as IonicButton,s as IonicNewsletterSignup};"
  },
  {
    "path": "content/js/stencil/ionic-site-components/z7r5cewq.sc.es5.entry.js",
    "content": "IonicSiteComponents.loadBundle(\"z7r5cewq\",[\"exports\"],function(e){var t=window.IonicSiteComponents.h,i=function(){function e(){this.color=\"default\",this.type=\"button\",this.disabled=!1}return e.prototype.render=function(){return t(\"button\",this.disabled?{class:this.color,type:this.type,disabled:!0}:{class:this.color,type:this.type},t(\"slot\",null))},Object.defineProperty(e,\"is\",{get:function(){return\"ionic-button\"},enumerable:!0,configurable:!0}),Object.defineProperty(e,\"properties\",{get:function(){return{color:{type:String,attr:\"color\"},disabled:{type:Boolean,attr:\"disabled\"},type:{type:String,attr:\"type\"}}},enumerable:!0,configurable:!0}),Object.defineProperty(e,\"style\",{get:function(){return\"ionic-button button{border-radius:4px;padding:11px 15px 9px;font-size:16px;font-weight:500;-webkit-box-shadow:0 1px 3px rgba(0,0,0,.1);box-shadow:0 1px 3px rgba(0,0,0,.1);border:0;outline:none;height:100%;-webkit-transition:background-color .2s,border-color .3s,color .3s,-webkit-box-shadow .3s;transition:background-color .2s,border-color .3s,color .3s,-webkit-box-shadow .3s;transition:background-color .2s,border-color .3s,box-shadow .3s,color .3s;transition:background-color .2s,border-color .3s,box-shadow .3s,color .3s,-webkit-box-shadow .3s}ionic-button button.default{background:#488aff;color:#fff}ionic-button button.default:hover{background:#629aff}ionic-button button.default:active{background:#2f7aff}ionic-button button.white{background:#fff;border-color:#e8ebf1;color:#488aff}ionic-button button.white:active{background:#fafafa}ionic-button button:hover{-webkit-box-shadow:0 2px 5px rgba(0,0,0,.12);box-shadow:0 2px 5px rgba(0,0,0,.12)}ionic-button button:active{-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.1);box-shadow:inset 0 1px 2px rgba(0,0,0,.1)}ionic-button button:disabled{background:#e8ebf1;color:#fff;-webkit-box-shadow:none;box-shadow:none}\"},enumerable:!0,configurable:!0}),e}(),n=function(){return t(\"svg\",{width:\"20\",height:\"14\",viewBox:\"0 0 20 14\",fill:\"none\",xmlns:\"http://www.w3.org/2000/svg\"},t(\"path\",{d:\"M19.8365 1.71514L14.6635 7.04323C14.625 7.08213 14.625 7.14046 14.6635 7.17935L18.2837 11.0782C18.5288 11.3261 18.5288 11.7248 18.2837 11.9727C18.1635 12.0942 18 12.1574 17.8413 12.1574C17.6827 12.1574 17.5192 12.0942 17.399 11.9727L13.7933 8.08844C13.7548 8.04954 13.6923 8.04954 13.6538 8.08844L12.774 8.99266C12.0385 9.74617 11.0625 10.1643 10.0144 10.1691C8.95192 10.174 7.94231 9.72187 7.19712 8.95863L6.35096 8.08844C6.3125 8.04954 6.25 8.04954 6.21154 8.08844L2.60577 11.9727C2.48558 12.0942 2.32212 12.1574 2.16346 12.1574C2.00481 12.1574 1.84135 12.0942 1.72115 11.9727C1.47596 11.7248 1.47596 11.3261 1.72115 11.0782L5.34135 7.17935C5.375 7.14046 5.375 7.08213 5.34135 7.04323L0.163462 1.71514C0.100962 1.65194 0 1.69569 0 1.7832V12.4443C0 13.2999 0.692308 13.9999 1.53846 13.9999H18.4615C19.3077 13.9999 20 13.2999 20 12.4443V1.7832C20 1.69569 19.8942 1.6568 19.8365 1.71514Z\",fill:\"#B2BECD\"}),t(\"path\",{d:\"M10.0013 8.90121C10.7128 8.90121 11.3811 8.61925 11.8811 8.10394L19.4244 0.340297C19.1599 0.126396 18.833 0 18.4724 0H1.53493C1.17435 0 0.842623 0.126396 0.583008 0.340297L8.12628 8.10394C8.62147 8.61438 9.28974 8.90121 10.0013 8.90121Z\",fill:\"#B2BECD\"}))},o=function(){function e(){this.placeholder=\"Email address\",this.buttonText=\"Subscribe\",this.darkMode=!1,this.homepageMode=!1,this.arrowMode=!1,this.lg=!1,this.kind=\"default\",this.isLoading=!1,this.hasSubmitted=!1,this.email=null,this.hsFormIds={default:\"76e5f69f-85fd-4579-afce-a1892d48bb32\",podcast:\"\"}}return e.prototype.handleEmailChange=function(e){this.email=e.target.value},e.prototype.handleSubmit=function(e){var t=this;e.preventDefault();var i=this.email;this.isLoading=!0;var n=new XMLHttpRequest;n.open(\"POST\",\"/api/v1/newsletter\"),n.setRequestHeader(\"Content-Type\",\"application/json;charset=UTF-8\"),n.onreadystatechange=function(){if(4===n.readyState&&200===n.status){t.isLoading=!1;var e=JSON.parse(n.responseText);t.hasSubmitted=e.ok,t.hubspotIdentify(i)}},n.send(JSON.stringify({email:this.email,podcast:\"podcast\"===this.kind}))},e.prototype.hubspotIdentify=function(e){var t=window._hsq=window._hsq||[];t.push([\"identify\",{email:e}]),t.push([\"trackEvent\",{id:\"Signed Up for Newsletter\",value:!0}]);var i=new XMLHttpRequest,n=[\"https://api.hsforms.com/submissions/v3/integration/submit\",\"3776657\",\"76e5f69f-85fd-4579-afce-a1892d48bb32\"].join(\"/\");i.open(\"POST\",n),i.setRequestHeader(\"Content-Type\",\"application/json;charset=UTF-8\"),i.onreadystatechange=function(){if(4===i.readyState&&200===i.status){var e=JSON.parse(i.responseText);console.log(e)}},i.send(JSON.stringify({fields:[{name:\"email\",value:this.email}],context:{hutk:document.cookie.match(/hubspotutk=(.*?);/)[1],pageUri:window.location.href,pageName:document.title}}))},e.prototype.getFormClass=function(){var e=this.darkMode?\"dark\":\"\";return this.arrowMode&&(e+=\" arrow\"),this.homepageMode&&(e+=\" homepage\"),this.lg&&(e+=\" lg\"),e},e.prototype.render=function(){var e=this;return t(\"form\",{onSubmit:function(t){return e.handleSubmit(t)},class:this.getFormClass()},this.homepageMode?t(n,null):\"\",t(\"input\",{name:\"email\",type:\"email\",value:this.email,onInput:function(){return e.handleEmailChange(event)},disabled:this.isLoading,placeholder:this.placeholder,required:!0}),t(\"ionic-button\",{color:this.darkMode?\"white\":\"default\",type:\"submit\",disabled:this.isLoading||this.hasSubmitted},this.hasSubmitted?\"Added!\":this.arrowMode||this.homepageMode?t(\"ion-icon\",{name:\"md-arrow-forward\"}):this.buttonText))},Object.defineProperty(e,\"is\",{get:function(){return\"ionic-newsletter-signup\"},enumerable:!0,configurable:!0}),Object.defineProperty(e,\"properties\",{get:function(){return{arrowMode:{type:Boolean,attr:\"arrow-mode\"},buttonText:{type:String,attr:\"button-text\"},darkMode:{type:Boolean,attr:\"dark-mode\"},email:{state:!0},hasSubmitted:{state:!0},homepageMode:{type:Boolean,attr:\"homepage-mode\"},isLoading:{state:!0},kind:{type:String,attr:\"kind\"},lg:{type:Boolean,attr:\"lg\"},placeholder:{type:String,attr:\"placeholder\"}}},enumerable:!0,configurable:!0}),Object.defineProperty(e,\"style\",{get:function(){return\"ionic-newsletter-signup form{position:relative;display:-ms-flexbox;display:flex;border-collapse:separate;width:100%;height:40px}\\@media (max-width:991px){ionic-newsletter-signup form{max-width:calc(100% - 340px)}}\\@media (max-width:767px){ionic-newsletter-signup form{float:none;max-width:100%;margin-top:15px}}ionic-newsletter-signup form.dark input{color:#fff;-webkit-box-shadow:none;box-shadow:none}ionic-newsletter-signup form.dark input:hover{-webkit-box-shadow:0 1px 3px rgba(0,0,0,.15);box-shadow:0 1px 3px rgba(0,0,0,.15)}ionic-newsletter-signup form.dark input:focus{-webkit-box-shadow:0 1px 3px rgba(0,0,0,.1);box-shadow:0 1px 3px rgba(0,0,0,.1)}ionic-newsletter-signup form.dark input::-webkit-input-placeholder{color:#bbceef}ionic-newsletter-signup form.dark input:-ms-input-placeholder{color:#bbceef}ionic-newsletter-signup form.dark input::-ms-input-placeholder{color:#bbceef}ionic-newsletter-signup form.dark input::placeholder{color:#bbceef}ionic-newsletter-signup form.lg{height:48px}ionic-newsletter-signup form.lg input{padding:1px 17px 0;font-size:14px}ionic-newsletter-signup form.lg ionic-button button{padding:11px 12px}ionic-newsletter-signup form.arrow{border-radius:6px;-webkit-box-shadow:0 1px 3px rgba(0,16,44,.08),0 2px 4px rgba(0,16,44,.12);box-shadow:0 1px 3px rgba(0,16,44,.08),0 2px 4px rgba(0,16,44,.12);-webkit-transition:box-shadow .15s ease;transition:box-shadow .15s ease}ionic-newsletter-signup form.arrow:hover{-webkit-box-shadow:0 7px 14px rgba(0,16,44,.12),0 3px 6px rgba(0,16,44,.08);box-shadow:0 7px 14px rgba(0,16,44,.12),0 3px 6px rgba(0,16,44,.08)}ionic-newsletter-signup form.arrow input{border-radius:6px 0 0 6px;-webkit-box-shadow:none;box-shadow:none}ionic-newsletter-signup form.arrow input::-webkit-input-placeholder{color:#a8b0be;font-weight:400}ionic-newsletter-signup form.arrow input:-ms-input-placeholder{color:#a8b0be;font-weight:400}ionic-newsletter-signup form.arrow input::-ms-input-placeholder{color:#a8b0be;font-weight:400}ionic-newsletter-signup form.arrow input::placeholder{color:#a8b0be;font-weight:400}ionic-newsletter-signup form.arrow ionic-button button{background:#f0f5ff;color:#3880ff;font-size:23px;display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;border-radius:0 6px 6px 0}ionic-newsletter-signup form.arrow ionic-button button:hover{background:#ebf2ff}\\@media (max-width:991px){ionic-newsletter-signup form.arrow{max-width:100%}}ionic-newsletter-signup form.homepage{height:48px;border-radius:6px;background:#f8fafc;border:1px solid #e9edf3;-webkit-transition:border-color .2s,background-color .2s;transition:border-color .2s,background-color .2s}ionic-newsletter-signup form.homepage:hover{border-color:#73a6ff;background:#fff}ionic-newsletter-signup form.homepage svg{position:absolute;top:16px;left:16px}ionic-newsletter-signup form.homepage input{border-radius:6px 0 0 6px;-webkit-box-shadow:none;box-shadow:none;padding-left:46px}ionic-newsletter-signup form.homepage input::-webkit-input-placeholder{color:#a8b0be;font-weight:400}ionic-newsletter-signup form.homepage input:-ms-input-placeholder{color:#a8b0be;font-weight:400}ionic-newsletter-signup form.homepage input::-ms-input-placeholder{color:#a8b0be;font-weight:400}ionic-newsletter-signup form.homepage input::placeholder{color:#a8b0be;font-weight:400}ionic-newsletter-signup form.homepage ionic-button button{background:transparent;color:#7cabff;font-size:23px;display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-webkit-box-shadow:none;box-shadow:none;border-radius:0 6px 6px 0}ionic-newsletter-signup form.homepage ionic-button button:hover{color:#498aff;background:transparent}\\@media (max-width:991px){ionic-newsletter-signup form.homepage{max-width:100%}}ionic-newsletter-signup input{border:none;background:hsla(0,0%,100%,.2);border-radius:4px 0 0 4px;font-size:13px;color:#24282e;-webkit-box-shadow:none;box-shadow:none;font-weight:500;height:100%;outline:0;-ms-flex-positive:1;flex-grow:1;padding:0 16px 1px;-webkit-box-shadow:0 1px 3px rgba(0,0,0,.1);box-shadow:0 1px 3px rgba(0,0,0,.1);-webkit-transition:background .2s,box-shadow .2s;transition:background .2s,box-shadow .2s}ionic-newsletter-signup input:hover{-webkit-box-shadow:0 1px 3px rgba(0,0,0,.15);box-shadow:0 1px 3px rgba(0,0,0,.15)}ionic-newsletter-signup input:focus{-webkit-box-shadow:none;box-shadow:none;background:hsla(0,0%,100%,.25);-webkit-box-shadow:inset 0 0 2px rgba(0,0,0,.1);box-shadow:inset 0 0 2px rgba(0,0,0,.1)}ionic-newsletter-signup input::-webkit-input-placeholder{padding-left:0;color:#a1a9b6}ionic-newsletter-signup input:-ms-input-placeholder{padding-left:0;color:#a1a9b6}ionic-newsletter-signup input::-ms-input-placeholder{padding-left:0;color:#a1a9b6}ionic-newsletter-signup input::placeholder{padding-left:0;color:#a1a9b6}ionic-newsletter-signup ionic-button{height:100%}ionic-newsletter-signup ionic-button button{border-top-left-radius:0;border-bottom-left-radius:0;font-weight:500;font-size:14px;height:100%;padding:8px 9px 10px}\"},enumerable:!0,configurable:!0}),e}();e.IonicButton=i,e.IonicNewsletterSignup=o,Object.defineProperty(e,\"__esModule\",{value:!0})});"
  },
  {
    "path": "content/js/stencil/ionic-site-components.js",
    "content": "!function(e,t,n,i,o,r,s,c,a,u,l,p,d,m){for(l=e[n]=e[n]||{},(p=t.createElement(\"style\")).innerHTML=a+\"{visibility:hidden}.hydrated{visibility:inherit}\",p.setAttribute(\"data-styles\",\"\"),d=t.head.querySelector(\"meta[charset]\"),t.head.insertBefore(p,d?d.nextSibling:t.head.firstChild),function(e,t,n){(e[\"s-apps\"]=e[\"s-apps\"]||[]).push(\"IonicSiteComponents\"),n.componentOnReady||(n.componentOnReady=function(){var t=this;function n(n){if(t.nodeName.indexOf(\"-\")>0){for(var i=e[\"s-apps\"],o=0,r=0;r<i.length;r++)if(e[i[r]].componentOnReady){if(e[i[r]].componentOnReady(t,n))return;o++}if(o<i.length)return void(e[\"s-cr\"]=e[\"s-cr\"]||[]).push([t,n])}n(null)}return e.Promise?new e.Promise(n):{then:n}})}(e,0,u),o=o||l.resourcesUrl,p=(d=t.querySelectorAll(\"script\")).length-1;p>=0&&!(m=d[p]).src&&!m.hasAttribute(\"data-resources-url\");p--);d=m.getAttribute(\"data-resources-url\"),!o&&d&&(o=d),!o&&m.src&&(o=(d=m.src.split(\"/\").slice(0,-1)).join(\"/\")+(d.length?\"/\":\"\")+\"ionic-site-components/\"),p=t.createElement(\"script\"),function(e,t,n,i){return!(t.search.indexOf(\"core=esm\")>0)&&(!(!(t.search.indexOf(\"core=es5\")>0||\"file:\"===t.protocol)&&e.customElements&&e.customElements.define&&e.fetch&&e.CSS&&e.CSS.supports&&e.CSS.supports(\"color\",\"var(--c)\")&&\"noModule\"in n)||function(e){try{return new Function('import(\"\")'),!1}catch(e){}return!0}())}(e,e.location,p)?p.src=o+\"ionic-site-components.guhwuz8o.js\":(p.src=o+\"ionic-site-components.ftjdmnjq.js\",p.setAttribute(\"type\",\"module\"),p.setAttribute(\"crossorigin\",!0)),p.setAttribute(\"data-resources-url\",o),p.setAttribute(\"data-namespace\",\"ionic-site-components\"),t.head.appendChild(p)}(window,document,\"IonicSiteComponents\",0,0,0,0,0,\"icon-external,ion-icon,ionic-appflow-activator,ionic-bar-chart,ionic-button,ionic-newsletter-signup,ionic-quick-signup,ionic-search,ionic-slider,ionic-snap-bar,ionic-toggle,ionic-toggle-button,ionic-toggle-tab\",HTMLElement.prototype);"
  },
  {
    "path": "content/js/stencil/loader/index.cjs.js",
    "content": "module.exports = require('../cjs/es5/ionic-site-components.define.js');"
  },
  {
    "path": "content/js/stencil/loader/index.d.ts",
    "content": "export declare function defineCustomElements(win: any, opts?: any): Promise<void>;"
  },
  {
    "path": "content/js/stencil/loader/index.es2017.js",
    "content": "export * from '../esm/es2017/ionic-site-components.define.js';"
  },
  {
    "path": "content/js/stencil/loader/index.js",
    "content": "export * from '../esm/es5/ionic-site-components.define.js';"
  },
  {
    "path": "content/js/stencil/loader/package.json",
    "content": "{\n  \"name\": \"loader\",\n  \"typings\": \"./index.d.ts\",\n  \"module\": \"./index.js\",\n  \"main\": \"./index.cjs.js\",\n  \"jsnext:main\": \"./index.es2017.js\",\n  \"es2015\": \"./index.es2017.js\",\n  \"es2017\": \"./index.es2017.js\"\n}"
  },
  {
    "path": "content/js/stencil/svg/index.esm.d.ts",
    "content": "\nexport type IconMap = {\n  'ios-add-circle-outline': string;\n  'ios-add-circle': string;\n  'ios-add': string;\n  'ios-airplane': string;\n  'ios-alarm': string;\n  'ios-albums': string;\n  'ios-alert': string;\n  'ios-american-football': string;\n  'ios-analytics': string;\n  'ios-aperture': string;\n  'ios-apps': string;\n  'ios-appstore': string;\n  'ios-archive': string;\n  'ios-arrow-back': string;\n  'ios-arrow-down': string;\n  'ios-arrow-dropdown-circle': string;\n  'ios-arrow-dropdown': string;\n  'ios-arrow-dropleft-circle': string;\n  'ios-arrow-dropleft': string;\n  'ios-arrow-dropright-circle': string;\n  'ios-arrow-dropright': string;\n  'ios-arrow-dropup-circle': string;\n  'ios-arrow-dropup': string;\n  'ios-arrow-forward': string;\n  'ios-arrow-round-back': string;\n  'ios-arrow-round-down': string;\n  'ios-arrow-round-forward': string;\n  'ios-arrow-round-up': string;\n  'ios-arrow-up': string;\n  'ios-at': string;\n  'ios-attach': string;\n  'ios-backspace': string;\n  'ios-barcode': string;\n  'ios-baseball': string;\n  'ios-basket': string;\n  'ios-basketball': string;\n  'ios-battery-charging': string;\n  'ios-battery-dead': string;\n  'ios-battery-full': string;\n  'ios-beaker': string;\n  'ios-bed': string;\n  'ios-beer': string;\n  'ios-bicycle': string;\n  'ios-bluetooth': string;\n  'ios-boat': string;\n  'ios-body': string;\n  'ios-bonfire': string;\n  'ios-book': string;\n  'ios-bookmark': string;\n  'ios-bookmarks': string;\n  'ios-bowtie': string;\n  'ios-briefcase': string;\n  'ios-browsers': string;\n  'ios-brush': string;\n  'ios-bug': string;\n  'ios-build': string;\n  'ios-bulb': string;\n  'ios-bus': string;\n  'ios-business': string;\n  'ios-cafe': string;\n  'ios-calculator': string;\n  'ios-calendar': string;\n  'ios-call': string;\n  'ios-camera': string;\n  'ios-car': string;\n  'ios-card': string;\n  'ios-cart': string;\n  'ios-cash': string;\n  'ios-cellular': string;\n  'ios-chatboxes': string;\n  'ios-chatbubbles': string;\n  'ios-checkbox-outline': string;\n  'ios-checkbox': string;\n  'ios-checkmark-circle-outline': string;\n  'ios-checkmark-circle': string;\n  'ios-checkmark': string;\n  'ios-clipboard': string;\n  'ios-clock': string;\n  'ios-close-circle-outline': string;\n  'ios-close-circle': string;\n  'ios-close': string;\n  'ios-cloud-circle': string;\n  'ios-cloud-done': string;\n  'ios-cloud-download': string;\n  'ios-cloud-outline': string;\n  'ios-cloud-upload': string;\n  'ios-cloud': string;\n  'ios-cloudy-night': string;\n  'ios-cloudy': string;\n  'ios-code-download': string;\n  'ios-code-working': string;\n  'ios-code': string;\n  'ios-cog': string;\n  'ios-color-fill': string;\n  'ios-color-filter': string;\n  'ios-color-palette': string;\n  'ios-color-wand': string;\n  'ios-compass': string;\n  'ios-construct': string;\n  'ios-contact': string;\n  'ios-contacts': string;\n  'ios-contract': string;\n  'ios-contrast': string;\n  'ios-copy': string;\n  'ios-create': string;\n  'ios-crop': string;\n  'ios-cube': string;\n  'ios-cut': string;\n  'ios-desktop': string;\n  'ios-disc': string;\n  'ios-document': string;\n  'ios-done-all': string;\n  'ios-download': string;\n  'ios-easel': string;\n  'ios-egg': string;\n  'ios-exit': string;\n  'ios-expand': string;\n  'ios-eye-off': string;\n  'ios-eye': string;\n  'ios-fastforward': string;\n  'ios-female': string;\n  'ios-filing': string;\n  'ios-film': string;\n  'ios-finger-print': string;\n  'ios-fitness': string;\n  'ios-flag': string;\n  'ios-flame': string;\n  'ios-flash-off': string;\n  'ios-flash': string;\n  'ios-flashlight': string;\n  'ios-flask': string;\n  'ios-flower': string;\n  'ios-folder-open': string;\n  'ios-folder': string;\n  'ios-football': string;\n  'ios-funnel': string;\n  'ios-gift': string;\n  'ios-git-branch': string;\n  'ios-git-commit': string;\n  'ios-git-compare': string;\n  'ios-git-merge': string;\n  'ios-git-network': string;\n  'ios-git-pull-request': string;\n  'ios-glasses': string;\n  'ios-globe': string;\n  'ios-grid': string;\n  'ios-hammer': string;\n  'ios-hand': string;\n  'ios-happy': string;\n  'ios-headset': string;\n  'ios-heart-dislike': string;\n  'ios-heart-empty': string;\n  'ios-heart-half': string;\n  'ios-heart': string;\n  'ios-help-buoy': string;\n  'ios-help-circle-outline': string;\n  'ios-help-circle': string;\n  'ios-help': string;\n  'ios-home': string;\n  'ios-hourglass': string;\n  'ios-ice-cream': string;\n  'ios-image': string;\n  'ios-images': string;\n  'ios-infinite': string;\n  'ios-information-circle-outline': string;\n  'ios-information-circle': string;\n  'ios-information': string;\n  'ios-jet': string;\n  'ios-journal': string;\n  'ios-key': string;\n  'ios-keypad': string;\n  'ios-laptop': string;\n  'ios-leaf': string;\n  'ios-link': string;\n  'ios-list-box': string;\n  'ios-list': string;\n  'ios-locate': string;\n  'ios-lock': string;\n  'ios-log-in': string;\n  'ios-log-out': string;\n  'ios-magnet': string;\n  'ios-mail-open': string;\n  'ios-mail-unread': string;\n  'ios-mail': string;\n  'ios-male': string;\n  'ios-man': string;\n  'ios-map': string;\n  'ios-medal': string;\n  'ios-medical': string;\n  'ios-medkit': string;\n  'ios-megaphone': string;\n  'ios-menu': string;\n  'ios-mic-off': string;\n  'ios-mic': string;\n  'ios-microphone': string;\n  'ios-moon': string;\n  'ios-more': string;\n  'ios-move': string;\n  'ios-musical-note': string;\n  'ios-musical-notes': string;\n  'ios-navigate': string;\n  'ios-notifications-off': string;\n  'ios-notifications-outline': string;\n  'ios-notifications': string;\n  'ios-nuclear': string;\n  'ios-nutrition': string;\n  'ios-open': string;\n  'ios-options': string;\n  'ios-outlet': string;\n  'ios-paper-plane': string;\n  'ios-paper': string;\n  'ios-partly-sunny': string;\n  'ios-pause': string;\n  'ios-paw': string;\n  'ios-people': string;\n  'ios-person-add': string;\n  'ios-person': string;\n  'ios-phone-landscape': string;\n  'ios-phone-portrait': string;\n  'ios-photos': string;\n  'ios-pie': string;\n  'ios-pin': string;\n  'ios-pint': string;\n  'ios-pizza': string;\n  'ios-planet': string;\n  'ios-play-circle': string;\n  'ios-play': string;\n  'ios-podium': string;\n  'ios-power': string;\n  'ios-pricetag': string;\n  'ios-pricetags': string;\n  'ios-print': string;\n  'ios-pulse': string;\n  'ios-qr-scanner': string;\n  'ios-quote': string;\n  'ios-radio-button-off': string;\n  'ios-radio-button-on': string;\n  'ios-radio': string;\n  'ios-rainy': string;\n  'ios-recording': string;\n  'ios-redo': string;\n  'ios-refresh-circle': string;\n  'ios-refresh': string;\n  'ios-remove-circle-outline': string;\n  'ios-remove-circle': string;\n  'ios-remove': string;\n  'ios-reorder': string;\n  'ios-repeat': string;\n  'ios-resize': string;\n  'ios-restaurant': string;\n  'ios-return-left': string;\n  'ios-return-right': string;\n  'ios-reverse-camera': string;\n  'ios-rewind': string;\n  'ios-ribbon': string;\n  'ios-rocket': string;\n  'ios-rose': string;\n  'ios-sad': string;\n  'ios-save': string;\n  'ios-school': string;\n  'ios-search': string;\n  'ios-send': string;\n  'ios-settings': string;\n  'ios-share-alt': string;\n  'ios-share': string;\n  'ios-shirt': string;\n  'ios-shuffle': string;\n  'ios-skip-backward': string;\n  'ios-skip-forward': string;\n  'ios-snow': string;\n  'ios-speedometer': string;\n  'ios-square-outline': string;\n  'ios-square': string;\n  'ios-star-half': string;\n  'ios-star-outline': string;\n  'ios-star': string;\n  'ios-stats': string;\n  'ios-stopwatch': string;\n  'ios-subway': string;\n  'ios-sunny': string;\n  'ios-swap': string;\n  'ios-switch': string;\n  'ios-sync': string;\n  'ios-tablet-landscape': string;\n  'ios-tablet-portrait': string;\n  'ios-tennisball': string;\n  'ios-text': string;\n  'ios-thermometer': string;\n  'ios-thumbs-down': string;\n  'ios-thumbs-up': string;\n  'ios-thunderstorm': string;\n  'ios-time': string;\n  'ios-timer': string;\n  'ios-today': string;\n  'ios-train': string;\n  'ios-transgender': string;\n  'ios-trash': string;\n  'ios-trending-down': string;\n  'ios-trending-up': string;\n  'ios-trophy': string;\n  'ios-tv': string;\n  'ios-umbrella': string;\n  'ios-undo': string;\n  'ios-unlock': string;\n  'ios-videocam': string;\n  'ios-volume-high': string;\n  'ios-volume-low': string;\n  'ios-volume-mute': string;\n  'ios-volume-off': string;\n  'ios-walk': string;\n  'ios-wallet': string;\n  'ios-warning': string;\n  'ios-watch': string;\n  'ios-water': string;\n  'ios-wifi': string;\n  'ios-wine': string;\n  'ios-woman': string;\n  'logo-android': string;\n  'logo-angular': string;\n  'logo-apple': string;\n  'logo-bitbucket': string;\n  'logo-bitcoin': string;\n  'logo-buffer': string;\n  'logo-chrome': string;\n  'logo-closed-captioning': string;\n  'logo-codepen': string;\n  'logo-css3': string;\n  'logo-designernews': string;\n  'logo-dribbble': string;\n  'logo-dropbox': string;\n  'logo-euro': string;\n  'logo-facebook': string;\n  'logo-flickr': string;\n  'logo-foursquare': string;\n  'logo-freebsd-devil': string;\n  'logo-game-controller-a': string;\n  'logo-game-controller-b': string;\n  'logo-github': string;\n  'logo-google': string;\n  'logo-googleplus': string;\n  'logo-hackernews': string;\n  'logo-html5': string;\n  'logo-instagram': string;\n  'logo-ionic': string;\n  'logo-ionitron': string;\n  'logo-javascript': string;\n  'logo-linkedin': string;\n  'logo-markdown': string;\n  'logo-model-s': string;\n  'logo-no-smoking': string;\n  'logo-nodejs': string;\n  'logo-npm': string;\n  'logo-octocat': string;\n  'logo-pinterest': string;\n  'logo-playstation': string;\n  'logo-polymer': string;\n  'logo-python': string;\n  'logo-reddit': string;\n  'logo-rss': string;\n  'logo-sass': string;\n  'logo-skype': string;\n  'logo-slack': string;\n  'logo-snapchat': string;\n  'logo-steam': string;\n  'logo-tumblr': string;\n  'logo-tux': string;\n  'logo-twitch': string;\n  'logo-twitter': string;\n  'logo-usd': string;\n  'logo-vimeo': string;\n  'logo-vk': string;\n  'logo-whatsapp': string;\n  'logo-windows': string;\n  'logo-wordpress': string;\n  'logo-xbox': string;\n  'logo-xing': string;\n  'logo-yahoo': string;\n  'logo-yen': string;\n  'logo-youtube': string;\n  'md-add-circle-outline': string;\n  'md-add-circle': string;\n  'md-add': string;\n  'md-airplane': string;\n  'md-alarm': string;\n  'md-albums': string;\n  'md-alert': string;\n  'md-american-football': string;\n  'md-analytics': string;\n  'md-aperture': string;\n  'md-apps': string;\n  'md-appstore': string;\n  'md-archive': string;\n  'md-arrow-back': string;\n  'md-arrow-down': string;\n  'md-arrow-dropdown-circle': string;\n  'md-arrow-dropdown': string;\n  'md-arrow-dropleft-circle': string;\n  'md-arrow-dropleft': string;\n  'md-arrow-dropright-circle': string;\n  'md-arrow-dropright': string;\n  'md-arrow-dropup-circle': string;\n  'md-arrow-dropup': string;\n  'md-arrow-forward': string;\n  'md-arrow-round-back': string;\n  'md-arrow-round-down': string;\n  'md-arrow-round-forward': string;\n  'md-arrow-round-up': string;\n  'md-arrow-up': string;\n  'md-at': string;\n  'md-attach': string;\n  'md-backspace': string;\n  'md-barcode': string;\n  'md-baseball': string;\n  'md-basket': string;\n  'md-basketball': string;\n  'md-battery-charging': string;\n  'md-battery-dead': string;\n  'md-battery-full': string;\n  'md-beaker': string;\n  'md-bed': string;\n  'md-beer': string;\n  'md-bicycle': string;\n  'md-bluetooth': string;\n  'md-boat': string;\n  'md-body': string;\n  'md-bonfire': string;\n  'md-book': string;\n  'md-bookmark': string;\n  'md-bookmarks': string;\n  'md-bowtie': string;\n  'md-briefcase': string;\n  'md-browsers': string;\n  'md-brush': string;\n  'md-bug': string;\n  'md-build': string;\n  'md-bulb': string;\n  'md-bus': string;\n  'md-business': string;\n  'md-cafe': string;\n  'md-calculator': string;\n  'md-calendar': string;\n  'md-call': string;\n  'md-camera': string;\n  'md-car': string;\n  'md-card': string;\n  'md-cart': string;\n  'md-cash': string;\n  'md-cellular': string;\n  'md-chatboxes': string;\n  'md-chatbubbles': string;\n  'md-checkbox-outline': string;\n  'md-checkbox': string;\n  'md-checkmark-circle-outline': string;\n  'md-checkmark-circle': string;\n  'md-checkmark': string;\n  'md-clipboard': string;\n  'md-clock': string;\n  'md-close-circle-outline': string;\n  'md-close-circle': string;\n  'md-close': string;\n  'md-cloud-circle': string;\n  'md-cloud-done': string;\n  'md-cloud-download': string;\n  'md-cloud-outline': string;\n  'md-cloud-upload': string;\n  'md-cloud': string;\n  'md-cloudy-night': string;\n  'md-cloudy': string;\n  'md-code-download': string;\n  'md-code-working': string;\n  'md-code': string;\n  'md-cog': string;\n  'md-color-fill': string;\n  'md-color-filter': string;\n  'md-color-palette': string;\n  'md-color-wand': string;\n  'md-compass': string;\n  'md-construct': string;\n  'md-contact': string;\n  'md-contacts': string;\n  'md-contract': string;\n  'md-contrast': string;\n  'md-copy': string;\n  'md-create': string;\n  'md-crop': string;\n  'md-cube': string;\n  'md-cut': string;\n  'md-desktop': string;\n  'md-disc': string;\n  'md-document': string;\n  'md-done-all': string;\n  'md-download': string;\n  'md-easel': string;\n  'md-egg': string;\n  'md-exit': string;\n  'md-expand': string;\n  'md-eye-off': string;\n  'md-eye': string;\n  'md-fastforward': string;\n  'md-female': string;\n  'md-filing': string;\n  'md-film': string;\n  'md-finger-print': string;\n  'md-fitness': string;\n  'md-flag': string;\n  'md-flame': string;\n  'md-flash-off': string;\n  'md-flash': string;\n  'md-flashlight': string;\n  'md-flask': string;\n  'md-flower': string;\n  'md-folder-open': string;\n  'md-folder': string;\n  'md-football': string;\n  'md-funnel': string;\n  'md-gift': string;\n  'md-git-branch': string;\n  'md-git-commit': string;\n  'md-git-compare': string;\n  'md-git-merge': string;\n  'md-git-network': string;\n  'md-git-pull-request': string;\n  'md-glasses': string;\n  'md-globe': string;\n  'md-grid': string;\n  'md-hammer': string;\n  'md-hand': string;\n  'md-happy': string;\n  'md-headset': string;\n  'md-heart-dislike': string;\n  'md-heart-empty': string;\n  'md-heart-half': string;\n  'md-heart': string;\n  'md-help-buoy': string;\n  'md-help-circle-outline': string;\n  'md-help-circle': string;\n  'md-help': string;\n  'md-home': string;\n  'md-hourglass': string;\n  'md-ice-cream': string;\n  'md-image': string;\n  'md-images': string;\n  'md-infinite': string;\n  'md-information-circle-outline': string;\n  'md-information-circle': string;\n  'md-information': string;\n  'md-jet': string;\n  'md-journal': string;\n  'md-key': string;\n  'md-keypad': string;\n  'md-laptop': string;\n  'md-leaf': string;\n  'md-link': string;\n  'md-list-box': string;\n  'md-list': string;\n  'md-locate': string;\n  'md-lock': string;\n  'md-log-in': string;\n  'md-log-out': string;\n  'md-magnet': string;\n  'md-mail-open': string;\n  'md-mail-unread': string;\n  'md-mail': string;\n  'md-male': string;\n  'md-man': string;\n  'md-map': string;\n  'md-medal': string;\n  'md-medical': string;\n  'md-medkit': string;\n  'md-megaphone': string;\n  'md-menu': string;\n  'md-mic-off': string;\n  'md-mic': string;\n  'md-microphone': string;\n  'md-moon': string;\n  'md-more': string;\n  'md-move': string;\n  'md-musical-note': string;\n  'md-musical-notes': string;\n  'md-navigate': string;\n  'md-notifications-off': string;\n  'md-notifications-outline': string;\n  'md-notifications': string;\n  'md-nuclear': string;\n  'md-nutrition': string;\n  'md-open': string;\n  'md-options': string;\n  'md-outlet': string;\n  'md-paper-plane': string;\n  'md-paper': string;\n  'md-partly-sunny': string;\n  'md-pause': string;\n  'md-paw': string;\n  'md-people': string;\n  'md-person-add': string;\n  'md-person': string;\n  'md-phone-landscape': string;\n  'md-phone-portrait': string;\n  'md-photos': string;\n  'md-pie': string;\n  'md-pin': string;\n  'md-pint': string;\n  'md-pizza': string;\n  'md-planet': string;\n  'md-play-circle': string;\n  'md-play': string;\n  'md-podium': string;\n  'md-power': string;\n  'md-pricetag': string;\n  'md-pricetags': string;\n  'md-print': string;\n  'md-pulse': string;\n  'md-qr-scanner': string;\n  'md-quote': string;\n  'md-radio-button-off': string;\n  'md-radio-button-on': string;\n  'md-radio': string;\n  'md-rainy': string;\n  'md-recording': string;\n  'md-redo': string;\n  'md-refresh-circle': string;\n  'md-refresh': string;\n  'md-remove-circle-outline': string;\n  'md-remove-circle': string;\n  'md-remove': string;\n  'md-reorder': string;\n  'md-repeat': string;\n  'md-resize': string;\n  'md-restaurant': string;\n  'md-return-left': string;\n  'md-return-right': string;\n  'md-reverse-camera': string;\n  'md-rewind': string;\n  'md-ribbon': string;\n  'md-rocket': string;\n  'md-rose': string;\n  'md-sad': string;\n  'md-save': string;\n  'md-school': string;\n  'md-search': string;\n  'md-send': string;\n  'md-settings': string;\n  'md-share-alt': string;\n  'md-share': string;\n  'md-shirt': string;\n  'md-shuffle': string;\n  'md-skip-backward': string;\n  'md-skip-forward': string;\n  'md-snow': string;\n  'md-speedometer': string;\n  'md-square-outline': string;\n  'md-square': string;\n  'md-star-half': string;\n  'md-star-outline': string;\n  'md-star': string;\n  'md-stats': string;\n  'md-stopwatch': string;\n  'md-subway': string;\n  'md-sunny': string;\n  'md-swap': string;\n  'md-switch': string;\n  'md-sync': string;\n  'md-tablet-landscape': string;\n  'md-tablet-portrait': string;\n  'md-tennisball': string;\n  'md-text': string;\n  'md-thermometer': string;\n  'md-thumbs-down': string;\n  'md-thumbs-up': string;\n  'md-thunderstorm': string;\n  'md-time': string;\n  'md-timer': string;\n  'md-today': string;\n  'md-train': string;\n  'md-transgender': string;\n  'md-trash': string;\n  'md-trending-down': string;\n  'md-trending-up': string;\n  'md-trophy': string;\n  'md-tv': string;\n  'md-umbrella': string;\n  'md-undo': string;\n  'md-unlock': string;\n  'md-videocam': string;\n  'md-volume-high': string;\n  'md-volume-low': string;\n  'md-volume-mute': string;\n  'md-volume-off': string;\n  'md-walk': string;\n  'md-wallet': string;\n  'md-warning': string;\n  'md-watch': string;\n  'md-water': string;\n  'md-wifi': string;\n  'md-wine': string;\n  'md-woman': string;\n};\n\nexport type IconNames = keyof IconMap;\n\nexport declare const ICON_PATHS: IconMap;\n\nexport declare const iosAddCircleOutline: string;\nexport declare const iosAddCircle: string;\nexport declare const iosAdd: string;\nexport declare const iosAirplane: string;\nexport declare const iosAlarm: string;\nexport declare const iosAlbums: string;\nexport declare const iosAlert: string;\nexport declare const iosAmericanFootball: string;\nexport declare const iosAnalytics: string;\nexport declare const iosAperture: string;\nexport declare const iosApps: string;\nexport declare const iosAppstore: string;\nexport declare const iosArchive: string;\nexport declare const iosArrowBack: string;\nexport declare const iosArrowDown: string;\nexport declare const iosArrowDropdownCircle: string;\nexport declare const iosArrowDropdown: string;\nexport declare const iosArrowDropleftCircle: string;\nexport declare const iosArrowDropleft: string;\nexport declare const iosArrowDroprightCircle: string;\nexport declare const iosArrowDropright: string;\nexport declare const iosArrowDropupCircle: string;\nexport declare const iosArrowDropup: string;\nexport declare const iosArrowForward: string;\nexport declare const iosArrowRoundBack: string;\nexport declare const iosArrowRoundDown: string;\nexport declare const iosArrowRoundForward: string;\nexport declare const iosArrowRoundUp: string;\nexport declare const iosArrowUp: string;\nexport declare const iosAt: string;\nexport declare const iosAttach: string;\nexport declare const iosBackspace: string;\nexport declare const iosBarcode: string;\nexport declare const iosBaseball: string;\nexport declare const iosBasket: string;\nexport declare const iosBasketball: string;\nexport declare const iosBatteryCharging: string;\nexport declare const iosBatteryDead: string;\nexport declare const iosBatteryFull: string;\nexport declare const iosBeaker: string;\nexport declare const iosBed: string;\nexport declare const iosBeer: string;\nexport declare const iosBicycle: string;\nexport declare const iosBluetooth: string;\nexport declare const iosBoat: string;\nexport declare const iosBody: string;\nexport declare const iosBonfire: string;\nexport declare const iosBook: string;\nexport declare const iosBookmark: string;\nexport declare const iosBookmarks: string;\nexport declare const iosBowtie: string;\nexport declare const iosBriefcase: string;\nexport declare const iosBrowsers: string;\nexport declare const iosBrush: string;\nexport declare const iosBug: string;\nexport declare const iosBuild: string;\nexport declare const iosBulb: string;\nexport declare const iosBus: string;\nexport declare const iosBusiness: string;\nexport declare const iosCafe: string;\nexport declare const iosCalculator: string;\nexport declare const iosCalendar: string;\nexport declare const iosCall: string;\nexport declare const iosCamera: string;\nexport declare const iosCar: string;\nexport declare const iosCard: string;\nexport declare const iosCart: string;\nexport declare const iosCash: string;\nexport declare const iosCellular: string;\nexport declare const iosChatboxes: string;\nexport declare const iosChatbubbles: string;\nexport declare const iosCheckboxOutline: string;\nexport declare const iosCheckbox: string;\nexport declare const iosCheckmarkCircleOutline: string;\nexport declare const iosCheckmarkCircle: string;\nexport declare const iosCheckmark: string;\nexport declare const iosClipboard: string;\nexport declare const iosClock: string;\nexport declare const iosCloseCircleOutline: string;\nexport declare const iosCloseCircle: string;\nexport declare const iosClose: string;\nexport declare const iosCloudCircle: string;\nexport declare const iosCloudDone: string;\nexport declare const iosCloudDownload: string;\nexport declare const iosCloudOutline: string;\nexport declare const iosCloudUpload: string;\nexport declare const iosCloud: string;\nexport declare const iosCloudyNight: string;\nexport declare const iosCloudy: string;\nexport declare const iosCodeDownload: string;\nexport declare const iosCodeWorking: string;\nexport declare const iosCode: string;\nexport declare const iosCog: string;\nexport declare const iosColorFill: string;\nexport declare const iosColorFilter: string;\nexport declare const iosColorPalette: string;\nexport declare const iosColorWand: string;\nexport declare const iosCompass: string;\nexport declare const iosConstruct: string;\nexport declare const iosContact: string;\nexport declare const iosContacts: string;\nexport declare const iosContract: string;\nexport declare const iosContrast: string;\nexport declare const iosCopy: string;\nexport declare const iosCreate: string;\nexport declare const iosCrop: string;\nexport declare const iosCube: string;\nexport declare const iosCut: string;\nexport declare const iosDesktop: string;\nexport declare const iosDisc: string;\nexport declare const iosDocument: string;\nexport declare const iosDoneAll: string;\nexport declare const iosDownload: string;\nexport declare const iosEasel: string;\nexport declare const iosEgg: string;\nexport declare const iosExit: string;\nexport declare const iosExpand: string;\nexport declare const iosEyeOff: string;\nexport declare const iosEye: string;\nexport declare const iosFastforward: string;\nexport declare const iosFemale: string;\nexport declare const iosFiling: string;\nexport declare const iosFilm: string;\nexport declare const iosFingerPrint: string;\nexport declare const iosFitness: string;\nexport declare const iosFlag: string;\nexport declare const iosFlame: string;\nexport declare const iosFlashOff: string;\nexport declare const iosFlash: string;\nexport declare const iosFlashlight: string;\nexport declare const iosFlask: string;\nexport declare const iosFlower: string;\nexport declare const iosFolderOpen: string;\nexport declare const iosFolder: string;\nexport declare const iosFootball: string;\nexport declare const iosFunnel: string;\nexport declare const iosGift: string;\nexport declare const iosGitBranch: string;\nexport declare const iosGitCommit: string;\nexport declare const iosGitCompare: string;\nexport declare const iosGitMerge: string;\nexport declare const iosGitNetwork: string;\nexport declare const iosGitPullRequest: string;\nexport declare const iosGlasses: string;\nexport declare const iosGlobe: string;\nexport declare const iosGrid: string;\nexport declare const iosHammer: string;\nexport declare const iosHand: string;\nexport declare const iosHappy: string;\nexport declare const iosHeadset: string;\nexport declare const iosHeartDislike: string;\nexport declare const iosHeartEmpty: string;\nexport declare const iosHeartHalf: string;\nexport declare const iosHeart: string;\nexport declare const iosHelpBuoy: string;\nexport declare const iosHelpCircleOutline: string;\nexport declare const iosHelpCircle: string;\nexport declare const iosHelp: string;\nexport declare const iosHome: string;\nexport declare const iosHourglass: string;\nexport declare const iosIceCream: string;\nexport declare const iosImage: string;\nexport declare const iosImages: string;\nexport declare const iosInfinite: string;\nexport declare const iosInformationCircleOutline: string;\nexport declare const iosInformationCircle: string;\nexport declare const iosInformation: string;\nexport declare const iosJet: string;\nexport declare const iosJournal: string;\nexport declare const iosKey: string;\nexport declare const iosKeypad: string;\nexport declare const iosLaptop: string;\nexport declare const iosLeaf: string;\nexport declare const iosLink: string;\nexport declare const iosListBox: string;\nexport declare const iosList: string;\nexport declare const iosLocate: string;\nexport declare const iosLock: string;\nexport declare const iosLogIn: string;\nexport declare const iosLogOut: string;\nexport declare const iosMagnet: string;\nexport declare const iosMailOpen: string;\nexport declare const iosMailUnread: string;\nexport declare const iosMail: string;\nexport declare const iosMale: string;\nexport declare const iosMan: string;\nexport declare const iosMap: string;\nexport declare const iosMedal: string;\nexport declare const iosMedical: string;\nexport declare const iosMedkit: string;\nexport declare const iosMegaphone: string;\nexport declare const iosMenu: string;\nexport declare const iosMicOff: string;\nexport declare const iosMic: string;\nexport declare const iosMicrophone: string;\nexport declare const iosMoon: string;\nexport declare const iosMore: string;\nexport declare const iosMove: string;\nexport declare const iosMusicalNote: string;\nexport declare const iosMusicalNotes: string;\nexport declare const iosNavigate: string;\nexport declare const iosNotificationsOff: string;\nexport declare const iosNotificationsOutline: string;\nexport declare const iosNotifications: string;\nexport declare const iosNuclear: string;\nexport declare const iosNutrition: string;\nexport declare const iosOpen: string;\nexport declare const iosOptions: string;\nexport declare const iosOutlet: string;\nexport declare const iosPaperPlane: string;\nexport declare const iosPaper: string;\nexport declare const iosPartlySunny: string;\nexport declare const iosPause: string;\nexport declare const iosPaw: string;\nexport declare const iosPeople: string;\nexport declare const iosPersonAdd: string;\nexport declare const iosPerson: string;\nexport declare const iosPhoneLandscape: string;\nexport declare const iosPhonePortrait: string;\nexport declare const iosPhotos: string;\nexport declare const iosPie: string;\nexport declare const iosPin: string;\nexport declare const iosPint: string;\nexport declare const iosPizza: string;\nexport declare const iosPlanet: string;\nexport declare const iosPlayCircle: string;\nexport declare const iosPlay: string;\nexport declare const iosPodium: string;\nexport declare const iosPower: string;\nexport declare const iosPricetag: string;\nexport declare const iosPricetags: string;\nexport declare const iosPrint: string;\nexport declare const iosPulse: string;\nexport declare const iosQrScanner: string;\nexport declare const iosQuote: string;\nexport declare const iosRadioButtonOff: string;\nexport declare const iosRadioButtonOn: string;\nexport declare const iosRadio: string;\nexport declare const iosRainy: string;\nexport declare const iosRecording: string;\nexport declare const iosRedo: string;\nexport declare const iosRefreshCircle: string;\nexport declare const iosRefresh: string;\nexport declare const iosRemoveCircleOutline: string;\nexport declare const iosRemoveCircle: string;\nexport declare const iosRemove: string;\nexport declare const iosReorder: string;\nexport declare const iosRepeat: string;\nexport declare const iosResize: string;\nexport declare const iosRestaurant: string;\nexport declare const iosReturnLeft: string;\nexport declare const iosReturnRight: string;\nexport declare const iosReverseCamera: string;\nexport declare const iosRewind: string;\nexport declare const iosRibbon: string;\nexport declare const iosRocket: string;\nexport declare const iosRose: string;\nexport declare const iosSad: string;\nexport declare const iosSave: string;\nexport declare const iosSchool: string;\nexport declare const iosSearch: string;\nexport declare const iosSend: string;\nexport declare const iosSettings: string;\nexport declare const iosShareAlt: string;\nexport declare const iosShare: string;\nexport declare const iosShirt: string;\nexport declare const iosShuffle: string;\nexport declare const iosSkipBackward: string;\nexport declare const iosSkipForward: string;\nexport declare const iosSnow: string;\nexport declare const iosSpeedometer: string;\nexport declare const iosSquareOutline: string;\nexport declare const iosSquare: string;\nexport declare const iosStarHalf: string;\nexport declare const iosStarOutline: string;\nexport declare const iosStar: string;\nexport declare const iosStats: string;\nexport declare const iosStopwatch: string;\nexport declare const iosSubway: string;\nexport declare const iosSunny: string;\nexport declare const iosSwap: string;\nexport declare const iosSwitch: string;\nexport declare const iosSync: string;\nexport declare const iosTabletLandscape: string;\nexport declare const iosTabletPortrait: string;\nexport declare const iosTennisball: string;\nexport declare const iosText: string;\nexport declare const iosThermometer: string;\nexport declare const iosThumbsDown: string;\nexport declare const iosThumbsUp: string;\nexport declare const iosThunderstorm: string;\nexport declare const iosTime: string;\nexport declare const iosTimer: string;\nexport declare const iosToday: string;\nexport declare const iosTrain: string;\nexport declare const iosTransgender: string;\nexport declare const iosTrash: string;\nexport declare const iosTrendingDown: string;\nexport declare const iosTrendingUp: string;\nexport declare const iosTrophy: string;\nexport declare const iosTv: string;\nexport declare const iosUmbrella: string;\nexport declare const iosUndo: string;\nexport declare const iosUnlock: string;\nexport declare const iosVideocam: string;\nexport declare const iosVolumeHigh: string;\nexport declare const iosVolumeLow: string;\nexport declare const iosVolumeMute: string;\nexport declare const iosVolumeOff: string;\nexport declare const iosWalk: string;\nexport declare const iosWallet: string;\nexport declare const iosWarning: string;\nexport declare const iosWatch: string;\nexport declare const iosWater: string;\nexport declare const iosWifi: string;\nexport declare const iosWine: string;\nexport declare const iosWoman: string;\nexport declare const logoAndroid: string;\nexport declare const logoAngular: string;\nexport declare const logoApple: string;\nexport declare const logoBitbucket: string;\nexport declare const logoBitcoin: string;\nexport declare const logoBuffer: string;\nexport declare const logoChrome: string;\nexport declare const logoClosedCaptioning: string;\nexport declare const logoCodepen: string;\nexport declare const logoCss3: string;\nexport declare const logoDesignernews: string;\nexport declare const logoDribbble: string;\nexport declare const logoDropbox: string;\nexport declare const logoEuro: string;\nexport declare const logoFacebook: string;\nexport declare const logoFlickr: string;\nexport declare const logoFoursquare: string;\nexport declare const logoFreebsdDevil: string;\nexport declare const logoGameControllerA: string;\nexport declare const logoGameControllerB: string;\nexport declare const logoGithub: string;\nexport declare const logoGoogle: string;\nexport declare const logoGoogleplus: string;\nexport declare const logoHackernews: string;\nexport declare const logoHtml5: string;\nexport declare const logoInstagram: string;\nexport declare const logoIonic: string;\nexport declare const logoIonitron: string;\nexport declare const logoJavascript: string;\nexport declare const logoLinkedin: string;\nexport declare const logoMarkdown: string;\nexport declare const logoModelS: string;\nexport declare const logoNoSmoking: string;\nexport declare const logoNodejs: string;\nexport declare const logoNpm: string;\nexport declare const logoOctocat: string;\nexport declare const logoPinterest: string;\nexport declare const logoPlaystation: string;\nexport declare const logoPolymer: string;\nexport declare const logoPython: string;\nexport declare const logoReddit: string;\nexport declare const logoRss: string;\nexport declare const logoSass: string;\nexport declare const logoSkype: string;\nexport declare const logoSlack: string;\nexport declare const logoSnapchat: string;\nexport declare const logoSteam: string;\nexport declare const logoTumblr: string;\nexport declare const logoTux: string;\nexport declare const logoTwitch: string;\nexport declare const logoTwitter: string;\nexport declare const logoUsd: string;\nexport declare const logoVimeo: string;\nexport declare const logoVk: string;\nexport declare const logoWhatsapp: string;\nexport declare const logoWindows: string;\nexport declare const logoWordpress: string;\nexport declare const logoXbox: string;\nexport declare const logoXing: string;\nexport declare const logoYahoo: string;\nexport declare const logoYen: string;\nexport declare const logoYoutube: string;\nexport declare const mdAddCircleOutline: string;\nexport declare const mdAddCircle: string;\nexport declare const mdAdd: string;\nexport declare const mdAirplane: string;\nexport declare const mdAlarm: string;\nexport declare const mdAlbums: string;\nexport declare const mdAlert: string;\nexport declare const mdAmericanFootball: string;\nexport declare const mdAnalytics: string;\nexport declare const mdAperture: string;\nexport declare const mdApps: string;\nexport declare const mdAppstore: string;\nexport declare const mdArchive: string;\nexport declare const mdArrowBack: string;\nexport declare const mdArrowDown: string;\nexport declare const mdArrowDropdownCircle: string;\nexport declare const mdArrowDropdown: string;\nexport declare const mdArrowDropleftCircle: string;\nexport declare const mdArrowDropleft: string;\nexport declare const mdArrowDroprightCircle: string;\nexport declare const mdArrowDropright: string;\nexport declare const mdArrowDropupCircle: string;\nexport declare const mdArrowDropup: string;\nexport declare const mdArrowForward: string;\nexport declare const mdArrowRoundBack: string;\nexport declare const mdArrowRoundDown: string;\nexport declare const mdArrowRoundForward: string;\nexport declare const mdArrowRoundUp: string;\nexport declare const mdArrowUp: string;\nexport declare const mdAt: string;\nexport declare const mdAttach: string;\nexport declare const mdBackspace: string;\nexport declare const mdBarcode: string;\nexport declare const mdBaseball: string;\nexport declare const mdBasket: string;\nexport declare const mdBasketball: string;\nexport declare const mdBatteryCharging: string;\nexport declare const mdBatteryDead: string;\nexport declare const mdBatteryFull: string;\nexport declare const mdBeaker: string;\nexport declare const mdBed: string;\nexport declare const mdBeer: string;\nexport declare const mdBicycle: string;\nexport declare const mdBluetooth: string;\nexport declare const mdBoat: string;\nexport declare const mdBody: string;\nexport declare const mdBonfire: string;\nexport declare const mdBook: string;\nexport declare const mdBookmark: string;\nexport declare const mdBookmarks: string;\nexport declare const mdBowtie: string;\nexport declare const mdBriefcase: string;\nexport declare const mdBrowsers: string;\nexport declare const mdBrush: string;\nexport declare const mdBug: string;\nexport declare const mdBuild: string;\nexport declare const mdBulb: string;\nexport declare const mdBus: string;\nexport declare const mdBusiness: string;\nexport declare const mdCafe: string;\nexport declare const mdCalculator: string;\nexport declare const mdCalendar: string;\nexport declare const mdCall: string;\nexport declare const mdCamera: string;\nexport declare const mdCar: string;\nexport declare const mdCard: string;\nexport declare const mdCart: string;\nexport declare const mdCash: string;\nexport declare const mdCellular: string;\nexport declare const mdChatboxes: string;\nexport declare const mdChatbubbles: string;\nexport declare const mdCheckboxOutline: string;\nexport declare const mdCheckbox: string;\nexport declare const mdCheckmarkCircleOutline: string;\nexport declare const mdCheckmarkCircle: string;\nexport declare const mdCheckmark: string;\nexport declare const mdClipboard: string;\nexport declare const mdClock: string;\nexport declare const mdCloseCircleOutline: string;\nexport declare const mdCloseCircle: string;\nexport declare const mdClose: string;\nexport declare const mdCloudCircle: string;\nexport declare const mdCloudDone: string;\nexport declare const mdCloudDownload: string;\nexport declare const mdCloudOutline: string;\nexport declare const mdCloudUpload: string;\nexport declare const mdCloud: string;\nexport declare const mdCloudyNight: string;\nexport declare const mdCloudy: string;\nexport declare const mdCodeDownload: string;\nexport declare const mdCodeWorking: string;\nexport declare const mdCode: string;\nexport declare const mdCog: string;\nexport declare const mdColorFill: string;\nexport declare const mdColorFilter: string;\nexport declare const mdColorPalette: string;\nexport declare const mdColorWand: string;\nexport declare const mdCompass: string;\nexport declare const mdConstruct: string;\nexport declare const mdContact: string;\nexport declare const mdContacts: string;\nexport declare const mdContract: string;\nexport declare const mdContrast: string;\nexport declare const mdCopy: string;\nexport declare const mdCreate: string;\nexport declare const mdCrop: string;\nexport declare const mdCube: string;\nexport declare const mdCut: string;\nexport declare const mdDesktop: string;\nexport declare const mdDisc: string;\nexport declare const mdDocument: string;\nexport declare const mdDoneAll: string;\nexport declare const mdDownload: string;\nexport declare const mdEasel: string;\nexport declare const mdEgg: string;\nexport declare const mdExit: string;\nexport declare const mdExpand: string;\nexport declare const mdEyeOff: string;\nexport declare const mdEye: string;\nexport declare const mdFastforward: string;\nexport declare const mdFemale: string;\nexport declare const mdFiling: string;\nexport declare const mdFilm: string;\nexport declare const mdFingerPrint: string;\nexport declare const mdFitness: string;\nexport declare const mdFlag: string;\nexport declare const mdFlame: string;\nexport declare const mdFlashOff: string;\nexport declare const mdFlash: string;\nexport declare const mdFlashlight: string;\nexport declare const mdFlask: string;\nexport declare const mdFlower: string;\nexport declare const mdFolderOpen: string;\nexport declare const mdFolder: string;\nexport declare const mdFootball: string;\nexport declare const mdFunnel: string;\nexport declare const mdGift: string;\nexport declare const mdGitBranch: string;\nexport declare const mdGitCommit: string;\nexport declare const mdGitCompare: string;\nexport declare const mdGitMerge: string;\nexport declare const mdGitNetwork: string;\nexport declare const mdGitPullRequest: string;\nexport declare const mdGlasses: string;\nexport declare const mdGlobe: string;\nexport declare const mdGrid: string;\nexport declare const mdHammer: string;\nexport declare const mdHand: string;\nexport declare const mdHappy: string;\nexport declare const mdHeadset: string;\nexport declare const mdHeartDislike: string;\nexport declare const mdHeartEmpty: string;\nexport declare const mdHeartHalf: string;\nexport declare const mdHeart: string;\nexport declare const mdHelpBuoy: string;\nexport declare const mdHelpCircleOutline: string;\nexport declare const mdHelpCircle: string;\nexport declare const mdHelp: string;\nexport declare const mdHome: string;\nexport declare const mdHourglass: string;\nexport declare const mdIceCream: string;\nexport declare const mdImage: string;\nexport declare const mdImages: string;\nexport declare const mdInfinite: string;\nexport declare const mdInformationCircleOutline: string;\nexport declare const mdInformationCircle: string;\nexport declare const mdInformation: string;\nexport declare const mdJet: string;\nexport declare const mdJournal: string;\nexport declare const mdKey: string;\nexport declare const mdKeypad: string;\nexport declare const mdLaptop: string;\nexport declare const mdLeaf: string;\nexport declare const mdLink: string;\nexport declare const mdListBox: string;\nexport declare const mdList: string;\nexport declare const mdLocate: string;\nexport declare const mdLock: string;\nexport declare const mdLogIn: string;\nexport declare const mdLogOut: string;\nexport declare const mdMagnet: string;\nexport declare const mdMailOpen: string;\nexport declare const mdMailUnread: string;\nexport declare const mdMail: string;\nexport declare const mdMale: string;\nexport declare const mdMan: string;\nexport declare const mdMap: string;\nexport declare const mdMedal: string;\nexport declare const mdMedical: string;\nexport declare const mdMedkit: string;\nexport declare const mdMegaphone: string;\nexport declare const mdMenu: string;\nexport declare const mdMicOff: string;\nexport declare const mdMic: string;\nexport declare const mdMicrophone: string;\nexport declare const mdMoon: string;\nexport declare const mdMore: string;\nexport declare const mdMove: string;\nexport declare const mdMusicalNote: string;\nexport declare const mdMusicalNotes: string;\nexport declare const mdNavigate: string;\nexport declare const mdNotificationsOff: string;\nexport declare const mdNotificationsOutline: string;\nexport declare const mdNotifications: string;\nexport declare const mdNuclear: string;\nexport declare const mdNutrition: string;\nexport declare const mdOpen: string;\nexport declare const mdOptions: string;\nexport declare const mdOutlet: string;\nexport declare const mdPaperPlane: string;\nexport declare const mdPaper: string;\nexport declare const mdPartlySunny: string;\nexport declare const mdPause: string;\nexport declare const mdPaw: string;\nexport declare const mdPeople: string;\nexport declare const mdPersonAdd: string;\nexport declare const mdPerson: string;\nexport declare const mdPhoneLandscape: string;\nexport declare const mdPhonePortrait: string;\nexport declare const mdPhotos: string;\nexport declare const mdPie: string;\nexport declare const mdPin: string;\nexport declare const mdPint: string;\nexport declare const mdPizza: string;\nexport declare const mdPlanet: string;\nexport declare const mdPlayCircle: string;\nexport declare const mdPlay: string;\nexport declare const mdPodium: string;\nexport declare const mdPower: string;\nexport declare const mdPricetag: string;\nexport declare const mdPricetags: string;\nexport declare const mdPrint: string;\nexport declare const mdPulse: string;\nexport declare const mdQrScanner: string;\nexport declare const mdQuote: string;\nexport declare const mdRadioButtonOff: string;\nexport declare const mdRadioButtonOn: string;\nexport declare const mdRadio: string;\nexport declare const mdRainy: string;\nexport declare const mdRecording: string;\nexport declare const mdRedo: string;\nexport declare const mdRefreshCircle: string;\nexport declare const mdRefresh: string;\nexport declare const mdRemoveCircleOutline: string;\nexport declare const mdRemoveCircle: string;\nexport declare const mdRemove: string;\nexport declare const mdReorder: string;\nexport declare const mdRepeat: string;\nexport declare const mdResize: string;\nexport declare const mdRestaurant: string;\nexport declare const mdReturnLeft: string;\nexport declare const mdReturnRight: string;\nexport declare const mdReverseCamera: string;\nexport declare const mdRewind: string;\nexport declare const mdRibbon: string;\nexport declare const mdRocket: string;\nexport declare const mdRose: string;\nexport declare const mdSad: string;\nexport declare const mdSave: string;\nexport declare const mdSchool: string;\nexport declare const mdSearch: string;\nexport declare const mdSend: string;\nexport declare const mdSettings: string;\nexport declare const mdShareAlt: string;\nexport declare const mdShare: string;\nexport declare const mdShirt: string;\nexport declare const mdShuffle: string;\nexport declare const mdSkipBackward: string;\nexport declare const mdSkipForward: string;\nexport declare const mdSnow: string;\nexport declare const mdSpeedometer: string;\nexport declare const mdSquareOutline: string;\nexport declare const mdSquare: string;\nexport declare const mdStarHalf: string;\nexport declare const mdStarOutline: string;\nexport declare const mdStar: string;\nexport declare const mdStats: string;\nexport declare const mdStopwatch: string;\nexport declare const mdSubway: string;\nexport declare const mdSunny: string;\nexport declare const mdSwap: string;\nexport declare const mdSwitch: string;\nexport declare const mdSync: string;\nexport declare const mdTabletLandscape: string;\nexport declare const mdTabletPortrait: string;\nexport declare const mdTennisball: string;\nexport declare const mdText: string;\nexport declare const mdThermometer: string;\nexport declare const mdThumbsDown: string;\nexport declare const mdThumbsUp: string;\nexport declare const mdThunderstorm: string;\nexport declare const mdTime: string;\nexport declare const mdTimer: string;\nexport declare const mdToday: string;\nexport declare const mdTrain: string;\nexport declare const mdTransgender: string;\nexport declare const mdTrash: string;\nexport declare const mdTrendingDown: string;\nexport declare const mdTrendingUp: string;\nexport declare const mdTrophy: string;\nexport declare const mdTv: string;\nexport declare const mdUmbrella: string;\nexport declare const mdUndo: string;\nexport declare const mdUnlock: string;\nexport declare const mdVideocam: string;\nexport declare const mdVolumeHigh: string;\nexport declare const mdVolumeLow: string;\nexport declare const mdVolumeMute: string;\nexport declare const mdVolumeOff: string;\nexport declare const mdWalk: string;\nexport declare const mdWallet: string;\nexport declare const mdWarning: string;\nexport declare const mdWatch: string;\nexport declare const mdWater: string;\nexport declare const mdWifi: string;\nexport declare const mdWine: string;\nexport declare const mdWoman: string;\n"
  },
  {
    "path": "content/js/stencil/svg/index.esm.js",
    "content": "\nimport iosAddCircleOutline from './ios-add-circle-outline.svg';\nimport iosAddCircle from './ios-add-circle.svg';\nimport iosAdd from './ios-add.svg';\nimport iosAirplane from './ios-airplane.svg';\nimport iosAlarm from './ios-alarm.svg';\nimport iosAlbums from './ios-albums.svg';\nimport iosAlert from './ios-alert.svg';\nimport iosAmericanFootball from './ios-american-football.svg';\nimport iosAnalytics from './ios-analytics.svg';\nimport iosAperture from './ios-aperture.svg';\nimport iosApps from './ios-apps.svg';\nimport iosAppstore from './ios-appstore.svg';\nimport iosArchive from './ios-archive.svg';\nimport iosArrowBack from './ios-arrow-back.svg';\nimport iosArrowDown from './ios-arrow-down.svg';\nimport iosArrowDropdownCircle from './ios-arrow-dropdown-circle.svg';\nimport iosArrowDropdown from './ios-arrow-dropdown.svg';\nimport iosArrowDropleftCircle from './ios-arrow-dropleft-circle.svg';\nimport iosArrowDropleft from './ios-arrow-dropleft.svg';\nimport iosArrowDroprightCircle from './ios-arrow-dropright-circle.svg';\nimport iosArrowDropright from './ios-arrow-dropright.svg';\nimport iosArrowDropupCircle from './ios-arrow-dropup-circle.svg';\nimport iosArrowDropup from './ios-arrow-dropup.svg';\nimport iosArrowForward from './ios-arrow-forward.svg';\nimport iosArrowRoundBack from './ios-arrow-round-back.svg';\nimport iosArrowRoundDown from './ios-arrow-round-down.svg';\nimport iosArrowRoundForward from './ios-arrow-round-forward.svg';\nimport iosArrowRoundUp from './ios-arrow-round-up.svg';\nimport iosArrowUp from './ios-arrow-up.svg';\nimport iosAt from './ios-at.svg';\nimport iosAttach from './ios-attach.svg';\nimport iosBackspace from './ios-backspace.svg';\nimport iosBarcode from './ios-barcode.svg';\nimport iosBaseball from './ios-baseball.svg';\nimport iosBasket from './ios-basket.svg';\nimport iosBasketball from './ios-basketball.svg';\nimport iosBatteryCharging from './ios-battery-charging.svg';\nimport iosBatteryDead from './ios-battery-dead.svg';\nimport iosBatteryFull from './ios-battery-full.svg';\nimport iosBeaker from './ios-beaker.svg';\nimport iosBed from './ios-bed.svg';\nimport iosBeer from './ios-beer.svg';\nimport iosBicycle from './ios-bicycle.svg';\nimport iosBluetooth from './ios-bluetooth.svg';\nimport iosBoat from './ios-boat.svg';\nimport iosBody from './ios-body.svg';\nimport iosBonfire from './ios-bonfire.svg';\nimport iosBook from './ios-book.svg';\nimport iosBookmark from './ios-bookmark.svg';\nimport iosBookmarks from './ios-bookmarks.svg';\nimport iosBowtie from './ios-bowtie.svg';\nimport iosBriefcase from './ios-briefcase.svg';\nimport iosBrowsers from './ios-browsers.svg';\nimport iosBrush from './ios-brush.svg';\nimport iosBug from './ios-bug.svg';\nimport iosBuild from './ios-build.svg';\nimport iosBulb from './ios-bulb.svg';\nimport iosBus from './ios-bus.svg';\nimport iosBusiness from './ios-business.svg';\nimport iosCafe from './ios-cafe.svg';\nimport iosCalculator from './ios-calculator.svg';\nimport iosCalendar from './ios-calendar.svg';\nimport iosCall from './ios-call.svg';\nimport iosCamera from './ios-camera.svg';\nimport iosCar from './ios-car.svg';\nimport iosCard from './ios-card.svg';\nimport iosCart from './ios-cart.svg';\nimport iosCash from './ios-cash.svg';\nimport iosCellular from './ios-cellular.svg';\nimport iosChatboxes from './ios-chatboxes.svg';\nimport iosChatbubbles from './ios-chatbubbles.svg';\nimport iosCheckboxOutline from './ios-checkbox-outline.svg';\nimport iosCheckbox from './ios-checkbox.svg';\nimport iosCheckmarkCircleOutline from './ios-checkmark-circle-outline.svg';\nimport iosCheckmarkCircle from './ios-checkmark-circle.svg';\nimport iosCheckmark from './ios-checkmark.svg';\nimport iosClipboard from './ios-clipboard.svg';\nimport iosClock from './ios-clock.svg';\nimport iosCloseCircleOutline from './ios-close-circle-outline.svg';\nimport iosCloseCircle from './ios-close-circle.svg';\nimport iosClose from './ios-close.svg';\nimport iosCloudCircle from './ios-cloud-circle.svg';\nimport iosCloudDone from './ios-cloud-done.svg';\nimport iosCloudDownload from './ios-cloud-download.svg';\nimport iosCloudOutline from './ios-cloud-outline.svg';\nimport iosCloudUpload from './ios-cloud-upload.svg';\nimport iosCloud from './ios-cloud.svg';\nimport iosCloudyNight from './ios-cloudy-night.svg';\nimport iosCloudy from './ios-cloudy.svg';\nimport iosCodeDownload from './ios-code-download.svg';\nimport iosCodeWorking from './ios-code-working.svg';\nimport iosCode from './ios-code.svg';\nimport iosCog from './ios-cog.svg';\nimport iosColorFill from './ios-color-fill.svg';\nimport iosColorFilter from './ios-color-filter.svg';\nimport iosColorPalette from './ios-color-palette.svg';\nimport iosColorWand from './ios-color-wand.svg';\nimport iosCompass from './ios-compass.svg';\nimport iosConstruct from './ios-construct.svg';\nimport iosContact from './ios-contact.svg';\nimport iosContacts from './ios-contacts.svg';\nimport iosContract from './ios-contract.svg';\nimport iosContrast from './ios-contrast.svg';\nimport iosCopy from './ios-copy.svg';\nimport iosCreate from './ios-create.svg';\nimport iosCrop from './ios-crop.svg';\nimport iosCube from './ios-cube.svg';\nimport iosCut from './ios-cut.svg';\nimport iosDesktop from './ios-desktop.svg';\nimport iosDisc from './ios-disc.svg';\nimport iosDocument from './ios-document.svg';\nimport iosDoneAll from './ios-done-all.svg';\nimport iosDownload from './ios-download.svg';\nimport iosEasel from './ios-easel.svg';\nimport iosEgg from './ios-egg.svg';\nimport iosExit from './ios-exit.svg';\nimport iosExpand from './ios-expand.svg';\nimport iosEyeOff from './ios-eye-off.svg';\nimport iosEye from './ios-eye.svg';\nimport iosFastforward from './ios-fastforward.svg';\nimport iosFemale from './ios-female.svg';\nimport iosFiling from './ios-filing.svg';\nimport iosFilm from './ios-film.svg';\nimport iosFingerPrint from './ios-finger-print.svg';\nimport iosFitness from './ios-fitness.svg';\nimport iosFlag from './ios-flag.svg';\nimport iosFlame from './ios-flame.svg';\nimport iosFlashOff from './ios-flash-off.svg';\nimport iosFlash from './ios-flash.svg';\nimport iosFlashlight from './ios-flashlight.svg';\nimport iosFlask from './ios-flask.svg';\nimport iosFlower from './ios-flower.svg';\nimport iosFolderOpen from './ios-folder-open.svg';\nimport iosFolder from './ios-folder.svg';\nimport iosFootball from './ios-football.svg';\nimport iosFunnel from './ios-funnel.svg';\nimport iosGift from './ios-gift.svg';\nimport iosGitBranch from './ios-git-branch.svg';\nimport iosGitCommit from './ios-git-commit.svg';\nimport iosGitCompare from './ios-git-compare.svg';\nimport iosGitMerge from './ios-git-merge.svg';\nimport iosGitNetwork from './ios-git-network.svg';\nimport iosGitPullRequest from './ios-git-pull-request.svg';\nimport iosGlasses from './ios-glasses.svg';\nimport iosGlobe from './ios-globe.svg';\nimport iosGrid from './ios-grid.svg';\nimport iosHammer from './ios-hammer.svg';\nimport iosHand from './ios-hand.svg';\nimport iosHappy from './ios-happy.svg';\nimport iosHeadset from './ios-headset.svg';\nimport iosHeartDislike from './ios-heart-dislike.svg';\nimport iosHeartEmpty from './ios-heart-empty.svg';\nimport iosHeartHalf from './ios-heart-half.svg';\nimport iosHeart from './ios-heart.svg';\nimport iosHelpBuoy from './ios-help-buoy.svg';\nimport iosHelpCircleOutline from './ios-help-circle-outline.svg';\nimport iosHelpCircle from './ios-help-circle.svg';\nimport iosHelp from './ios-help.svg';\nimport iosHome from './ios-home.svg';\nimport iosHourglass from './ios-hourglass.svg';\nimport iosIceCream from './ios-ice-cream.svg';\nimport iosImage from './ios-image.svg';\nimport iosImages from './ios-images.svg';\nimport iosInfinite from './ios-infinite.svg';\nimport iosInformationCircleOutline from './ios-information-circle-outline.svg';\nimport iosInformationCircle from './ios-information-circle.svg';\nimport iosInformation from './ios-information.svg';\nimport iosJet from './ios-jet.svg';\nimport iosJournal from './ios-journal.svg';\nimport iosKey from './ios-key.svg';\nimport iosKeypad from './ios-keypad.svg';\nimport iosLaptop from './ios-laptop.svg';\nimport iosLeaf from './ios-leaf.svg';\nimport iosLink from './ios-link.svg';\nimport iosListBox from './ios-list-box.svg';\nimport iosList from './ios-list.svg';\nimport iosLocate from './ios-locate.svg';\nimport iosLock from './ios-lock.svg';\nimport iosLogIn from './ios-log-in.svg';\nimport iosLogOut from './ios-log-out.svg';\nimport iosMagnet from './ios-magnet.svg';\nimport iosMailOpen from './ios-mail-open.svg';\nimport iosMailUnread from './ios-mail-unread.svg';\nimport iosMail from './ios-mail.svg';\nimport iosMale from './ios-male.svg';\nimport iosMan from './ios-man.svg';\nimport iosMap from './ios-map.svg';\nimport iosMedal from './ios-medal.svg';\nimport iosMedical from './ios-medical.svg';\nimport iosMedkit from './ios-medkit.svg';\nimport iosMegaphone from './ios-megaphone.svg';\nimport iosMenu from './ios-menu.svg';\nimport iosMicOff from './ios-mic-off.svg';\nimport iosMic from './ios-mic.svg';\nimport iosMicrophone from './ios-microphone.svg';\nimport iosMoon from './ios-moon.svg';\nimport iosMore from './ios-more.svg';\nimport iosMove from './ios-move.svg';\nimport iosMusicalNote from './ios-musical-note.svg';\nimport iosMusicalNotes from './ios-musical-notes.svg';\nimport iosNavigate from './ios-navigate.svg';\nimport iosNotificationsOff from './ios-notifications-off.svg';\nimport iosNotificationsOutline from './ios-notifications-outline.svg';\nimport iosNotifications from './ios-notifications.svg';\nimport iosNuclear from './ios-nuclear.svg';\nimport iosNutrition from './ios-nutrition.svg';\nimport iosOpen from './ios-open.svg';\nimport iosOptions from './ios-options.svg';\nimport iosOutlet from './ios-outlet.svg';\nimport iosPaperPlane from './ios-paper-plane.svg';\nimport iosPaper from './ios-paper.svg';\nimport iosPartlySunny from './ios-partly-sunny.svg';\nimport iosPause from './ios-pause.svg';\nimport iosPaw from './ios-paw.svg';\nimport iosPeople from './ios-people.svg';\nimport iosPersonAdd from './ios-person-add.svg';\nimport iosPerson from './ios-person.svg';\nimport iosPhoneLandscape from './ios-phone-landscape.svg';\nimport iosPhonePortrait from './ios-phone-portrait.svg';\nimport iosPhotos from './ios-photos.svg';\nimport iosPie from './ios-pie.svg';\nimport iosPin from './ios-pin.svg';\nimport iosPint from './ios-pint.svg';\nimport iosPizza from './ios-pizza.svg';\nimport iosPlanet from './ios-planet.svg';\nimport iosPlayCircle from './ios-play-circle.svg';\nimport iosPlay from './ios-play.svg';\nimport iosPodium from './ios-podium.svg';\nimport iosPower from './ios-power.svg';\nimport iosPricetag from './ios-pricetag.svg';\nimport iosPricetags from './ios-pricetags.svg';\nimport iosPrint from './ios-print.svg';\nimport iosPulse from './ios-pulse.svg';\nimport iosQrScanner from './ios-qr-scanner.svg';\nimport iosQuote from './ios-quote.svg';\nimport iosRadioButtonOff from './ios-radio-button-off.svg';\nimport iosRadioButtonOn from './ios-radio-button-on.svg';\nimport iosRadio from './ios-radio.svg';\nimport iosRainy from './ios-rainy.svg';\nimport iosRecording from './ios-recording.svg';\nimport iosRedo from './ios-redo.svg';\nimport iosRefreshCircle from './ios-refresh-circle.svg';\nimport iosRefresh from './ios-refresh.svg';\nimport iosRemoveCircleOutline from './ios-remove-circle-outline.svg';\nimport iosRemoveCircle from './ios-remove-circle.svg';\nimport iosRemove from './ios-remove.svg';\nimport iosReorder from './ios-reorder.svg';\nimport iosRepeat from './ios-repeat.svg';\nimport iosResize from './ios-resize.svg';\nimport iosRestaurant from './ios-restaurant.svg';\nimport iosReturnLeft from './ios-return-left.svg';\nimport iosReturnRight from './ios-return-right.svg';\nimport iosReverseCamera from './ios-reverse-camera.svg';\nimport iosRewind from './ios-rewind.svg';\nimport iosRibbon from './ios-ribbon.svg';\nimport iosRocket from './ios-rocket.svg';\nimport iosRose from './ios-rose.svg';\nimport iosSad from './ios-sad.svg';\nimport iosSave from './ios-save.svg';\nimport iosSchool from './ios-school.svg';\nimport iosSearch from './ios-search.svg';\nimport iosSend from './ios-send.svg';\nimport iosSettings from './ios-settings.svg';\nimport iosShareAlt from './ios-share-alt.svg';\nimport iosShare from './ios-share.svg';\nimport iosShirt from './ios-shirt.svg';\nimport iosShuffle from './ios-shuffle.svg';\nimport iosSkipBackward from './ios-skip-backward.svg';\nimport iosSkipForward from './ios-skip-forward.svg';\nimport iosSnow from './ios-snow.svg';\nimport iosSpeedometer from './ios-speedometer.svg';\nimport iosSquareOutline from './ios-square-outline.svg';\nimport iosSquare from './ios-square.svg';\nimport iosStarHalf from './ios-star-half.svg';\nimport iosStarOutline from './ios-star-outline.svg';\nimport iosStar from './ios-star.svg';\nimport iosStats from './ios-stats.svg';\nimport iosStopwatch from './ios-stopwatch.svg';\nimport iosSubway from './ios-subway.svg';\nimport iosSunny from './ios-sunny.svg';\nimport iosSwap from './ios-swap.svg';\nimport iosSwitch from './ios-switch.svg';\nimport iosSync from './ios-sync.svg';\nimport iosTabletLandscape from './ios-tablet-landscape.svg';\nimport iosTabletPortrait from './ios-tablet-portrait.svg';\nimport iosTennisball from './ios-tennisball.svg';\nimport iosText from './ios-text.svg';\nimport iosThermometer from './ios-thermometer.svg';\nimport iosThumbsDown from './ios-thumbs-down.svg';\nimport iosThumbsUp from './ios-thumbs-up.svg';\nimport iosThunderstorm from './ios-thunderstorm.svg';\nimport iosTime from './ios-time.svg';\nimport iosTimer from './ios-timer.svg';\nimport iosToday from './ios-today.svg';\nimport iosTrain from './ios-train.svg';\nimport iosTransgender from './ios-transgender.svg';\nimport iosTrash from './ios-trash.svg';\nimport iosTrendingDown from './ios-trending-down.svg';\nimport iosTrendingUp from './ios-trending-up.svg';\nimport iosTrophy from './ios-trophy.svg';\nimport iosTv from './ios-tv.svg';\nimport iosUmbrella from './ios-umbrella.svg';\nimport iosUndo from './ios-undo.svg';\nimport iosUnlock from './ios-unlock.svg';\nimport iosVideocam from './ios-videocam.svg';\nimport iosVolumeHigh from './ios-volume-high.svg';\nimport iosVolumeLow from './ios-volume-low.svg';\nimport iosVolumeMute from './ios-volume-mute.svg';\nimport iosVolumeOff from './ios-volume-off.svg';\nimport iosWalk from './ios-walk.svg';\nimport iosWallet from './ios-wallet.svg';\nimport iosWarning from './ios-warning.svg';\nimport iosWatch from './ios-watch.svg';\nimport iosWater from './ios-water.svg';\nimport iosWifi from './ios-wifi.svg';\nimport iosWine from './ios-wine.svg';\nimport iosWoman from './ios-woman.svg';\nimport logoAndroid from './logo-android.svg';\nimport logoAngular from './logo-angular.svg';\nimport logoApple from './logo-apple.svg';\nimport logoBitbucket from './logo-bitbucket.svg';\nimport logoBitcoin from './logo-bitcoin.svg';\nimport logoBuffer from './logo-buffer.svg';\nimport logoChrome from './logo-chrome.svg';\nimport logoClosedCaptioning from './logo-closed-captioning.svg';\nimport logoCodepen from './logo-codepen.svg';\nimport logoCss3 from './logo-css3.svg';\nimport logoDesignernews from './logo-designernews.svg';\nimport logoDribbble from './logo-dribbble.svg';\nimport logoDropbox from './logo-dropbox.svg';\nimport logoEuro from './logo-euro.svg';\nimport logoFacebook from './logo-facebook.svg';\nimport logoFlickr from './logo-flickr.svg';\nimport logoFoursquare from './logo-foursquare.svg';\nimport logoFreebsdDevil from './logo-freebsd-devil.svg';\nimport logoGameControllerA from './logo-game-controller-a.svg';\nimport logoGameControllerB from './logo-game-controller-b.svg';\nimport logoGithub from './logo-github.svg';\nimport logoGoogle from './logo-google.svg';\nimport logoGoogleplus from './logo-googleplus.svg';\nimport logoHackernews from './logo-hackernews.svg';\nimport logoHtml5 from './logo-html5.svg';\nimport logoInstagram from './logo-instagram.svg';\nimport logoIonic from './logo-ionic.svg';\nimport logoIonitron from './logo-ionitron.svg';\nimport logoJavascript from './logo-javascript.svg';\nimport logoLinkedin from './logo-linkedin.svg';\nimport logoMarkdown from './logo-markdown.svg';\nimport logoModelS from './logo-model-s.svg';\nimport logoNoSmoking from './logo-no-smoking.svg';\nimport logoNodejs from './logo-nodejs.svg';\nimport logoNpm from './logo-npm.svg';\nimport logoOctocat from './logo-octocat.svg';\nimport logoPinterest from './logo-pinterest.svg';\nimport logoPlaystation from './logo-playstation.svg';\nimport logoPolymer from './logo-polymer.svg';\nimport logoPython from './logo-python.svg';\nimport logoReddit from './logo-reddit.svg';\nimport logoRss from './logo-rss.svg';\nimport logoSass from './logo-sass.svg';\nimport logoSkype from './logo-skype.svg';\nimport logoSlack from './logo-slack.svg';\nimport logoSnapchat from './logo-snapchat.svg';\nimport logoSteam from './logo-steam.svg';\nimport logoTumblr from './logo-tumblr.svg';\nimport logoTux from './logo-tux.svg';\nimport logoTwitch from './logo-twitch.svg';\nimport logoTwitter from './logo-twitter.svg';\nimport logoUsd from './logo-usd.svg';\nimport logoVimeo from './logo-vimeo.svg';\nimport logoVk from './logo-vk.svg';\nimport logoWhatsapp from './logo-whatsapp.svg';\nimport logoWindows from './logo-windows.svg';\nimport logoWordpress from './logo-wordpress.svg';\nimport logoXbox from './logo-xbox.svg';\nimport logoXing from './logo-xing.svg';\nimport logoYahoo from './logo-yahoo.svg';\nimport logoYen from './logo-yen.svg';\nimport logoYoutube from './logo-youtube.svg';\nimport mdAddCircleOutline from './md-add-circle-outline.svg';\nimport mdAddCircle from './md-add-circle.svg';\nimport mdAdd from './md-add.svg';\nimport mdAirplane from './md-airplane.svg';\nimport mdAlarm from './md-alarm.svg';\nimport mdAlbums from './md-albums.svg';\nimport mdAlert from './md-alert.svg';\nimport mdAmericanFootball from './md-american-football.svg';\nimport mdAnalytics from './md-analytics.svg';\nimport mdAperture from './md-aperture.svg';\nimport mdApps from './md-apps.svg';\nimport mdAppstore from './md-appstore.svg';\nimport mdArchive from './md-archive.svg';\nimport mdArrowBack from './md-arrow-back.svg';\nimport mdArrowDown from './md-arrow-down.svg';\nimport mdArrowDropdownCircle from './md-arrow-dropdown-circle.svg';\nimport mdArrowDropdown from './md-arrow-dropdown.svg';\nimport mdArrowDropleftCircle from './md-arrow-dropleft-circle.svg';\nimport mdArrowDropleft from './md-arrow-dropleft.svg';\nimport mdArrowDroprightCircle from './md-arrow-dropright-circle.svg';\nimport mdArrowDropright from './md-arrow-dropright.svg';\nimport mdArrowDropupCircle from './md-arrow-dropup-circle.svg';\nimport mdArrowDropup from './md-arrow-dropup.svg';\nimport mdArrowForward from './md-arrow-forward.svg';\nimport mdArrowRoundBack from './md-arrow-round-back.svg';\nimport mdArrowRoundDown from './md-arrow-round-down.svg';\nimport mdArrowRoundForward from './md-arrow-round-forward.svg';\nimport mdArrowRoundUp from './md-arrow-round-up.svg';\nimport mdArrowUp from './md-arrow-up.svg';\nimport mdAt from './md-at.svg';\nimport mdAttach from './md-attach.svg';\nimport mdBackspace from './md-backspace.svg';\nimport mdBarcode from './md-barcode.svg';\nimport mdBaseball from './md-baseball.svg';\nimport mdBasket from './md-basket.svg';\nimport mdBasketball from './md-basketball.svg';\nimport mdBatteryCharging from './md-battery-charging.svg';\nimport mdBatteryDead from './md-battery-dead.svg';\nimport mdBatteryFull from './md-battery-full.svg';\nimport mdBeaker from './md-beaker.svg';\nimport mdBed from './md-bed.svg';\nimport mdBeer from './md-beer.svg';\nimport mdBicycle from './md-bicycle.svg';\nimport mdBluetooth from './md-bluetooth.svg';\nimport mdBoat from './md-boat.svg';\nimport mdBody from './md-body.svg';\nimport mdBonfire from './md-bonfire.svg';\nimport mdBook from './md-book.svg';\nimport mdBookmark from './md-bookmark.svg';\nimport mdBookmarks from './md-bookmarks.svg';\nimport mdBowtie from './md-bowtie.svg';\nimport mdBriefcase from './md-briefcase.svg';\nimport mdBrowsers from './md-browsers.svg';\nimport mdBrush from './md-brush.svg';\nimport mdBug from './md-bug.svg';\nimport mdBuild from './md-build.svg';\nimport mdBulb from './md-bulb.svg';\nimport mdBus from './md-bus.svg';\nimport mdBusiness from './md-business.svg';\nimport mdCafe from './md-cafe.svg';\nimport mdCalculator from './md-calculator.svg';\nimport mdCalendar from './md-calendar.svg';\nimport mdCall from './md-call.svg';\nimport mdCamera from './md-camera.svg';\nimport mdCar from './md-car.svg';\nimport mdCard from './md-card.svg';\nimport mdCart from './md-cart.svg';\nimport mdCash from './md-cash.svg';\nimport mdCellular from './md-cellular.svg';\nimport mdChatboxes from './md-chatboxes.svg';\nimport mdChatbubbles from './md-chatbubbles.svg';\nimport mdCheckboxOutline from './md-checkbox-outline.svg';\nimport mdCheckbox from './md-checkbox.svg';\nimport mdCheckmarkCircleOutline from './md-checkmark-circle-outline.svg';\nimport mdCheckmarkCircle from './md-checkmark-circle.svg';\nimport mdCheckmark from './md-checkmark.svg';\nimport mdClipboard from './md-clipboard.svg';\nimport mdClock from './md-clock.svg';\nimport mdCloseCircleOutline from './md-close-circle-outline.svg';\nimport mdCloseCircle from './md-close-circle.svg';\nimport mdClose from './md-close.svg';\nimport mdCloudCircle from './md-cloud-circle.svg';\nimport mdCloudDone from './md-cloud-done.svg';\nimport mdCloudDownload from './md-cloud-download.svg';\nimport mdCloudOutline from './md-cloud-outline.svg';\nimport mdCloudUpload from './md-cloud-upload.svg';\nimport mdCloud from './md-cloud.svg';\nimport mdCloudyNight from './md-cloudy-night.svg';\nimport mdCloudy from './md-cloudy.svg';\nimport mdCodeDownload from './md-code-download.svg';\nimport mdCodeWorking from './md-code-working.svg';\nimport mdCode from './md-code.svg';\nimport mdCog from './md-cog.svg';\nimport mdColorFill from './md-color-fill.svg';\nimport mdColorFilter from './md-color-filter.svg';\nimport mdColorPalette from './md-color-palette.svg';\nimport mdColorWand from './md-color-wand.svg';\nimport mdCompass from './md-compass.svg';\nimport mdConstruct from './md-construct.svg';\nimport mdContact from './md-contact.svg';\nimport mdContacts from './md-contacts.svg';\nimport mdContract from './md-contract.svg';\nimport mdContrast from './md-contrast.svg';\nimport mdCopy from './md-copy.svg';\nimport mdCreate from './md-create.svg';\nimport mdCrop from './md-crop.svg';\nimport mdCube from './md-cube.svg';\nimport mdCut from './md-cut.svg';\nimport mdDesktop from './md-desktop.svg';\nimport mdDisc from './md-disc.svg';\nimport mdDocument from './md-document.svg';\nimport mdDoneAll from './md-done-all.svg';\nimport mdDownload from './md-download.svg';\nimport mdEasel from './md-easel.svg';\nimport mdEgg from './md-egg.svg';\nimport mdExit from './md-exit.svg';\nimport mdExpand from './md-expand.svg';\nimport mdEyeOff from './md-eye-off.svg';\nimport mdEye from './md-eye.svg';\nimport mdFastforward from './md-fastforward.svg';\nimport mdFemale from './md-female.svg';\nimport mdFiling from './md-filing.svg';\nimport mdFilm from './md-film.svg';\nimport mdFingerPrint from './md-finger-print.svg';\nimport mdFitness from './md-fitness.svg';\nimport mdFlag from './md-flag.svg';\nimport mdFlame from './md-flame.svg';\nimport mdFlashOff from './md-flash-off.svg';\nimport mdFlash from './md-flash.svg';\nimport mdFlashlight from './md-flashlight.svg';\nimport mdFlask from './md-flask.svg';\nimport mdFlower from './md-flower.svg';\nimport mdFolderOpen from './md-folder-open.svg';\nimport mdFolder from './md-folder.svg';\nimport mdFootball from './md-football.svg';\nimport mdFunnel from './md-funnel.svg';\nimport mdGift from './md-gift.svg';\nimport mdGitBranch from './md-git-branch.svg';\nimport mdGitCommit from './md-git-commit.svg';\nimport mdGitCompare from './md-git-compare.svg';\nimport mdGitMerge from './md-git-merge.svg';\nimport mdGitNetwork from './md-git-network.svg';\nimport mdGitPullRequest from './md-git-pull-request.svg';\nimport mdGlasses from './md-glasses.svg';\nimport mdGlobe from './md-globe.svg';\nimport mdGrid from './md-grid.svg';\nimport mdHammer from './md-hammer.svg';\nimport mdHand from './md-hand.svg';\nimport mdHappy from './md-happy.svg';\nimport mdHeadset from './md-headset.svg';\nimport mdHeartDislike from './md-heart-dislike.svg';\nimport mdHeartEmpty from './md-heart-empty.svg';\nimport mdHeartHalf from './md-heart-half.svg';\nimport mdHeart from './md-heart.svg';\nimport mdHelpBuoy from './md-help-buoy.svg';\nimport mdHelpCircleOutline from './md-help-circle-outline.svg';\nimport mdHelpCircle from './md-help-circle.svg';\nimport mdHelp from './md-help.svg';\nimport mdHome from './md-home.svg';\nimport mdHourglass from './md-hourglass.svg';\nimport mdIceCream from './md-ice-cream.svg';\nimport mdImage from './md-image.svg';\nimport mdImages from './md-images.svg';\nimport mdInfinite from './md-infinite.svg';\nimport mdInformationCircleOutline from './md-information-circle-outline.svg';\nimport mdInformationCircle from './md-information-circle.svg';\nimport mdInformation from './md-information.svg';\nimport mdJet from './md-jet.svg';\nimport mdJournal from './md-journal.svg';\nimport mdKey from './md-key.svg';\nimport mdKeypad from './md-keypad.svg';\nimport mdLaptop from './md-laptop.svg';\nimport mdLeaf from './md-leaf.svg';\nimport mdLink from './md-link.svg';\nimport mdListBox from './md-list-box.svg';\nimport mdList from './md-list.svg';\nimport mdLocate from './md-locate.svg';\nimport mdLock from './md-lock.svg';\nimport mdLogIn from './md-log-in.svg';\nimport mdLogOut from './md-log-out.svg';\nimport mdMagnet from './md-magnet.svg';\nimport mdMailOpen from './md-mail-open.svg';\nimport mdMailUnread from './md-mail-unread.svg';\nimport mdMail from './md-mail.svg';\nimport mdMale from './md-male.svg';\nimport mdMan from './md-man.svg';\nimport mdMap from './md-map.svg';\nimport mdMedal from './md-medal.svg';\nimport mdMedical from './md-medical.svg';\nimport mdMedkit from './md-medkit.svg';\nimport mdMegaphone from './md-megaphone.svg';\nimport mdMenu from './md-menu.svg';\nimport mdMicOff from './md-mic-off.svg';\nimport mdMic from './md-mic.svg';\nimport mdMicrophone from './md-microphone.svg';\nimport mdMoon from './md-moon.svg';\nimport mdMore from './md-more.svg';\nimport mdMove from './md-move.svg';\nimport mdMusicalNote from './md-musical-note.svg';\nimport mdMusicalNotes from './md-musical-notes.svg';\nimport mdNavigate from './md-navigate.svg';\nimport mdNotificationsOff from './md-notifications-off.svg';\nimport mdNotificationsOutline from './md-notifications-outline.svg';\nimport mdNotifications from './md-notifications.svg';\nimport mdNuclear from './md-nuclear.svg';\nimport mdNutrition from './md-nutrition.svg';\nimport mdOpen from './md-open.svg';\nimport mdOptions from './md-options.svg';\nimport mdOutlet from './md-outlet.svg';\nimport mdPaperPlane from './md-paper-plane.svg';\nimport mdPaper from './md-paper.svg';\nimport mdPartlySunny from './md-partly-sunny.svg';\nimport mdPause from './md-pause.svg';\nimport mdPaw from './md-paw.svg';\nimport mdPeople from './md-people.svg';\nimport mdPersonAdd from './md-person-add.svg';\nimport mdPerson from './md-person.svg';\nimport mdPhoneLandscape from './md-phone-landscape.svg';\nimport mdPhonePortrait from './md-phone-portrait.svg';\nimport mdPhotos from './md-photos.svg';\nimport mdPie from './md-pie.svg';\nimport mdPin from './md-pin.svg';\nimport mdPint from './md-pint.svg';\nimport mdPizza from './md-pizza.svg';\nimport mdPlanet from './md-planet.svg';\nimport mdPlayCircle from './md-play-circle.svg';\nimport mdPlay from './md-play.svg';\nimport mdPodium from './md-podium.svg';\nimport mdPower from './md-power.svg';\nimport mdPricetag from './md-pricetag.svg';\nimport mdPricetags from './md-pricetags.svg';\nimport mdPrint from './md-print.svg';\nimport mdPulse from './md-pulse.svg';\nimport mdQrScanner from './md-qr-scanner.svg';\nimport mdQuote from './md-quote.svg';\nimport mdRadioButtonOff from './md-radio-button-off.svg';\nimport mdRadioButtonOn from './md-radio-button-on.svg';\nimport mdRadio from './md-radio.svg';\nimport mdRainy from './md-rainy.svg';\nimport mdRecording from './md-recording.svg';\nimport mdRedo from './md-redo.svg';\nimport mdRefreshCircle from './md-refresh-circle.svg';\nimport mdRefresh from './md-refresh.svg';\nimport mdRemoveCircleOutline from './md-remove-circle-outline.svg';\nimport mdRemoveCircle from './md-remove-circle.svg';\nimport mdRemove from './md-remove.svg';\nimport mdReorder from './md-reorder.svg';\nimport mdRepeat from './md-repeat.svg';\nimport mdResize from './md-resize.svg';\nimport mdRestaurant from './md-restaurant.svg';\nimport mdReturnLeft from './md-return-left.svg';\nimport mdReturnRight from './md-return-right.svg';\nimport mdReverseCamera from './md-reverse-camera.svg';\nimport mdRewind from './md-rewind.svg';\nimport mdRibbon from './md-ribbon.svg';\nimport mdRocket from './md-rocket.svg';\nimport mdRose from './md-rose.svg';\nimport mdSad from './md-sad.svg';\nimport mdSave from './md-save.svg';\nimport mdSchool from './md-school.svg';\nimport mdSearch from './md-search.svg';\nimport mdSend from './md-send.svg';\nimport mdSettings from './md-settings.svg';\nimport mdShareAlt from './md-share-alt.svg';\nimport mdShare from './md-share.svg';\nimport mdShirt from './md-shirt.svg';\nimport mdShuffle from './md-shuffle.svg';\nimport mdSkipBackward from './md-skip-backward.svg';\nimport mdSkipForward from './md-skip-forward.svg';\nimport mdSnow from './md-snow.svg';\nimport mdSpeedometer from './md-speedometer.svg';\nimport mdSquareOutline from './md-square-outline.svg';\nimport mdSquare from './md-square.svg';\nimport mdStarHalf from './md-star-half.svg';\nimport mdStarOutline from './md-star-outline.svg';\nimport mdStar from './md-star.svg';\nimport mdStats from './md-stats.svg';\nimport mdStopwatch from './md-stopwatch.svg';\nimport mdSubway from './md-subway.svg';\nimport mdSunny from './md-sunny.svg';\nimport mdSwap from './md-swap.svg';\nimport mdSwitch from './md-switch.svg';\nimport mdSync from './md-sync.svg';\nimport mdTabletLandscape from './md-tablet-landscape.svg';\nimport mdTabletPortrait from './md-tablet-portrait.svg';\nimport mdTennisball from './md-tennisball.svg';\nimport mdText from './md-text.svg';\nimport mdThermometer from './md-thermometer.svg';\nimport mdThumbsDown from './md-thumbs-down.svg';\nimport mdThumbsUp from './md-thumbs-up.svg';\nimport mdThunderstorm from './md-thunderstorm.svg';\nimport mdTime from './md-time.svg';\nimport mdTimer from './md-timer.svg';\nimport mdToday from './md-today.svg';\nimport mdTrain from './md-train.svg';\nimport mdTransgender from './md-transgender.svg';\nimport mdTrash from './md-trash.svg';\nimport mdTrendingDown from './md-trending-down.svg';\nimport mdTrendingUp from './md-trending-up.svg';\nimport mdTrophy from './md-trophy.svg';\nimport mdTv from './md-tv.svg';\nimport mdUmbrella from './md-umbrella.svg';\nimport mdUndo from './md-undo.svg';\nimport mdUnlock from './md-unlock.svg';\nimport mdVideocam from './md-videocam.svg';\nimport mdVolumeHigh from './md-volume-high.svg';\nimport mdVolumeLow from './md-volume-low.svg';\nimport mdVolumeMute from './md-volume-mute.svg';\nimport mdVolumeOff from './md-volume-off.svg';\nimport mdWalk from './md-walk.svg';\nimport mdWallet from './md-wallet.svg';\nimport mdWarning from './md-warning.svg';\nimport mdWatch from './md-watch.svg';\nimport mdWater from './md-water.svg';\nimport mdWifi from './md-wifi.svg';\nimport mdWine from './md-wine.svg';\nimport mdWoman from './md-woman.svg';\n\nexport var ICON_PATHS = {\n  'ios-add-circle-outline': iosAddCircleOutline,\n  'ios-add-circle': iosAddCircle,\n  'ios-add': iosAdd,\n  'ios-airplane': iosAirplane,\n  'ios-alarm': iosAlarm,\n  'ios-albums': iosAlbums,\n  'ios-alert': iosAlert,\n  'ios-american-football': iosAmericanFootball,\n  'ios-analytics': iosAnalytics,\n  'ios-aperture': iosAperture,\n  'ios-apps': iosApps,\n  'ios-appstore': iosAppstore,\n  'ios-archive': iosArchive,\n  'ios-arrow-back': iosArrowBack,\n  'ios-arrow-down': iosArrowDown,\n  'ios-arrow-dropdown-circle': iosArrowDropdownCircle,\n  'ios-arrow-dropdown': iosArrowDropdown,\n  'ios-arrow-dropleft-circle': iosArrowDropleftCircle,\n  'ios-arrow-dropleft': iosArrowDropleft,\n  'ios-arrow-dropright-circle': iosArrowDroprightCircle,\n  'ios-arrow-dropright': iosArrowDropright,\n  'ios-arrow-dropup-circle': iosArrowDropupCircle,\n  'ios-arrow-dropup': iosArrowDropup,\n  'ios-arrow-forward': iosArrowForward,\n  'ios-arrow-round-back': iosArrowRoundBack,\n  'ios-arrow-round-down': iosArrowRoundDown,\n  'ios-arrow-round-forward': iosArrowRoundForward,\n  'ios-arrow-round-up': iosArrowRoundUp,\n  'ios-arrow-up': iosArrowUp,\n  'ios-at': iosAt,\n  'ios-attach': iosAttach,\n  'ios-backspace': iosBackspace,\n  'ios-barcode': iosBarcode,\n  'ios-baseball': iosBaseball,\n  'ios-basket': iosBasket,\n  'ios-basketball': iosBasketball,\n  'ios-battery-charging': iosBatteryCharging,\n  'ios-battery-dead': iosBatteryDead,\n  'ios-battery-full': iosBatteryFull,\n  'ios-beaker': iosBeaker,\n  'ios-bed': iosBed,\n  'ios-beer': iosBeer,\n  'ios-bicycle': iosBicycle,\n  'ios-bluetooth': iosBluetooth,\n  'ios-boat': iosBoat,\n  'ios-body': iosBody,\n  'ios-bonfire': iosBonfire,\n  'ios-book': iosBook,\n  'ios-bookmark': iosBookmark,\n  'ios-bookmarks': iosBookmarks,\n  'ios-bowtie': iosBowtie,\n  'ios-briefcase': iosBriefcase,\n  'ios-browsers': iosBrowsers,\n  'ios-brush': iosBrush,\n  'ios-bug': iosBug,\n  'ios-build': iosBuild,\n  'ios-bulb': iosBulb,\n  'ios-bus': iosBus,\n  'ios-business': iosBusiness,\n  'ios-cafe': iosCafe,\n  'ios-calculator': iosCalculator,\n  'ios-calendar': iosCalendar,\n  'ios-call': iosCall,\n  'ios-camera': iosCamera,\n  'ios-car': iosCar,\n  'ios-card': iosCard,\n  'ios-cart': iosCart,\n  'ios-cash': iosCash,\n  'ios-cellular': iosCellular,\n  'ios-chatboxes': iosChatboxes,\n  'ios-chatbubbles': iosChatbubbles,\n  'ios-checkbox-outline': iosCheckboxOutline,\n  'ios-checkbox': iosCheckbox,\n  'ios-checkmark-circle-outline': iosCheckmarkCircleOutline,\n  'ios-checkmark-circle': iosCheckmarkCircle,\n  'ios-checkmark': iosCheckmark,\n  'ios-clipboard': iosClipboard,\n  'ios-clock': iosClock,\n  'ios-close-circle-outline': iosCloseCircleOutline,\n  'ios-close-circle': iosCloseCircle,\n  'ios-close': iosClose,\n  'ios-cloud-circle': iosCloudCircle,\n  'ios-cloud-done': iosCloudDone,\n  'ios-cloud-download': iosCloudDownload,\n  'ios-cloud-outline': iosCloudOutline,\n  'ios-cloud-upload': iosCloudUpload,\n  'ios-cloud': iosCloud,\n  'ios-cloudy-night': iosCloudyNight,\n  'ios-cloudy': iosCloudy,\n  'ios-code-download': iosCodeDownload,\n  'ios-code-working': iosCodeWorking,\n  'ios-code': iosCode,\n  'ios-cog': iosCog,\n  'ios-color-fill': iosColorFill,\n  'ios-color-filter': iosColorFilter,\n  'ios-color-palette': iosColorPalette,\n  'ios-color-wand': iosColorWand,\n  'ios-compass': iosCompass,\n  'ios-construct': iosConstruct,\n  'ios-contact': iosContact,\n  'ios-contacts': iosContacts,\n  'ios-contract': iosContract,\n  'ios-contrast': iosContrast,\n  'ios-copy': iosCopy,\n  'ios-create': iosCreate,\n  'ios-crop': iosCrop,\n  'ios-cube': iosCube,\n  'ios-cut': iosCut,\n  'ios-desktop': iosDesktop,\n  'ios-disc': iosDisc,\n  'ios-document': iosDocument,\n  'ios-done-all': iosDoneAll,\n  'ios-download': iosDownload,\n  'ios-easel': iosEasel,\n  'ios-egg': iosEgg,\n  'ios-exit': iosExit,\n  'ios-expand': iosExpand,\n  'ios-eye-off': iosEyeOff,\n  'ios-eye': iosEye,\n  'ios-fastforward': iosFastforward,\n  'ios-female': iosFemale,\n  'ios-filing': iosFiling,\n  'ios-film': iosFilm,\n  'ios-finger-print': iosFingerPrint,\n  'ios-fitness': iosFitness,\n  'ios-flag': iosFlag,\n  'ios-flame': iosFlame,\n  'ios-flash-off': iosFlashOff,\n  'ios-flash': iosFlash,\n  'ios-flashlight': iosFlashlight,\n  'ios-flask': iosFlask,\n  'ios-flower': iosFlower,\n  'ios-folder-open': iosFolderOpen,\n  'ios-folder': iosFolder,\n  'ios-football': iosFootball,\n  'ios-funnel': iosFunnel,\n  'ios-gift': iosGift,\n  'ios-git-branch': iosGitBranch,\n  'ios-git-commit': iosGitCommit,\n  'ios-git-compare': iosGitCompare,\n  'ios-git-merge': iosGitMerge,\n  'ios-git-network': iosGitNetwork,\n  'ios-git-pull-request': iosGitPullRequest,\n  'ios-glasses': iosGlasses,\n  'ios-globe': iosGlobe,\n  'ios-grid': iosGrid,\n  'ios-hammer': iosHammer,\n  'ios-hand': iosHand,\n  'ios-happy': iosHappy,\n  'ios-headset': iosHeadset,\n  'ios-heart-dislike': iosHeartDislike,\n  'ios-heart-empty': iosHeartEmpty,\n  'ios-heart-half': iosHeartHalf,\n  'ios-heart': iosHeart,\n  'ios-help-buoy': iosHelpBuoy,\n  'ios-help-circle-outline': iosHelpCircleOutline,\n  'ios-help-circle': iosHelpCircle,\n  'ios-help': iosHelp,\n  'ios-home': iosHome,\n  'ios-hourglass': iosHourglass,\n  'ios-ice-cream': iosIceCream,\n  'ios-image': iosImage,\n  'ios-images': iosImages,\n  'ios-infinite': iosInfinite,\n  'ios-information-circle-outline': iosInformationCircleOutline,\n  'ios-information-circle': iosInformationCircle,\n  'ios-information': iosInformation,\n  'ios-jet': iosJet,\n  'ios-journal': iosJournal,\n  'ios-key': iosKey,\n  'ios-keypad': iosKeypad,\n  'ios-laptop': iosLaptop,\n  'ios-leaf': iosLeaf,\n  'ios-link': iosLink,\n  'ios-list-box': iosListBox,\n  'ios-list': iosList,\n  'ios-locate': iosLocate,\n  'ios-lock': iosLock,\n  'ios-log-in': iosLogIn,\n  'ios-log-out': iosLogOut,\n  'ios-magnet': iosMagnet,\n  'ios-mail-open': iosMailOpen,\n  'ios-mail-unread': iosMailUnread,\n  'ios-mail': iosMail,\n  'ios-male': iosMale,\n  'ios-man': iosMan,\n  'ios-map': iosMap,\n  'ios-medal': iosMedal,\n  'ios-medical': iosMedical,\n  'ios-medkit': iosMedkit,\n  'ios-megaphone': iosMegaphone,\n  'ios-menu': iosMenu,\n  'ios-mic-off': iosMicOff,\n  'ios-mic': iosMic,\n  'ios-microphone': iosMicrophone,\n  'ios-moon': iosMoon,\n  'ios-more': iosMore,\n  'ios-move': iosMove,\n  'ios-musical-note': iosMusicalNote,\n  'ios-musical-notes': iosMusicalNotes,\n  'ios-navigate': iosNavigate,\n  'ios-notifications-off': iosNotificationsOff,\n  'ios-notifications-outline': iosNotificationsOutline,\n  'ios-notifications': iosNotifications,\n  'ios-nuclear': iosNuclear,\n  'ios-nutrition': iosNutrition,\n  'ios-open': iosOpen,\n  'ios-options': iosOptions,\n  'ios-outlet': iosOutlet,\n  'ios-paper-plane': iosPaperPlane,\n  'ios-paper': iosPaper,\n  'ios-partly-sunny': iosPartlySunny,\n  'ios-pause': iosPause,\n  'ios-paw': iosPaw,\n  'ios-people': iosPeople,\n  'ios-person-add': iosPersonAdd,\n  'ios-person': iosPerson,\n  'ios-phone-landscape': iosPhoneLandscape,\n  'ios-phone-portrait': iosPhonePortrait,\n  'ios-photos': iosPhotos,\n  'ios-pie': iosPie,\n  'ios-pin': iosPin,\n  'ios-pint': iosPint,\n  'ios-pizza': iosPizza,\n  'ios-planet': iosPlanet,\n  'ios-play-circle': iosPlayCircle,\n  'ios-play': iosPlay,\n  'ios-podium': iosPodium,\n  'ios-power': iosPower,\n  'ios-pricetag': iosPricetag,\n  'ios-pricetags': iosPricetags,\n  'ios-print': iosPrint,\n  'ios-pulse': iosPulse,\n  'ios-qr-scanner': iosQrScanner,\n  'ios-quote': iosQuote,\n  'ios-radio-button-off': iosRadioButtonOff,\n  'ios-radio-button-on': iosRadioButtonOn,\n  'ios-radio': iosRadio,\n  'ios-rainy': iosRainy,\n  'ios-recording': iosRecording,\n  'ios-redo': iosRedo,\n  'ios-refresh-circle': iosRefreshCircle,\n  'ios-refresh': iosRefresh,\n  'ios-remove-circle-outline': iosRemoveCircleOutline,\n  'ios-remove-circle': iosRemoveCircle,\n  'ios-remove': iosRemove,\n  'ios-reorder': iosReorder,\n  'ios-repeat': iosRepeat,\n  'ios-resize': iosResize,\n  'ios-restaurant': iosRestaurant,\n  'ios-return-left': iosReturnLeft,\n  'ios-return-right': iosReturnRight,\n  'ios-reverse-camera': iosReverseCamera,\n  'ios-rewind': iosRewind,\n  'ios-ribbon': iosRibbon,\n  'ios-rocket': iosRocket,\n  'ios-rose': iosRose,\n  'ios-sad': iosSad,\n  'ios-save': iosSave,\n  'ios-school': iosSchool,\n  'ios-search': iosSearch,\n  'ios-send': iosSend,\n  'ios-settings': iosSettings,\n  'ios-share-alt': iosShareAlt,\n  'ios-share': iosShare,\n  'ios-shirt': iosShirt,\n  'ios-shuffle': iosShuffle,\n  'ios-skip-backward': iosSkipBackward,\n  'ios-skip-forward': iosSkipForward,\n  'ios-snow': iosSnow,\n  'ios-speedometer': iosSpeedometer,\n  'ios-square-outline': iosSquareOutline,\n  'ios-square': iosSquare,\n  'ios-star-half': iosStarHalf,\n  'ios-star-outline': iosStarOutline,\n  'ios-star': iosStar,\n  'ios-stats': iosStats,\n  'ios-stopwatch': iosStopwatch,\n  'ios-subway': iosSubway,\n  'ios-sunny': iosSunny,\n  'ios-swap': iosSwap,\n  'ios-switch': iosSwitch,\n  'ios-sync': iosSync,\n  'ios-tablet-landscape': iosTabletLandscape,\n  'ios-tablet-portrait': iosTabletPortrait,\n  'ios-tennisball': iosTennisball,\n  'ios-text': iosText,\n  'ios-thermometer': iosThermometer,\n  'ios-thumbs-down': iosThumbsDown,\n  'ios-thumbs-up': iosThumbsUp,\n  'ios-thunderstorm': iosThunderstorm,\n  'ios-time': iosTime,\n  'ios-timer': iosTimer,\n  'ios-today': iosToday,\n  'ios-train': iosTrain,\n  'ios-transgender': iosTransgender,\n  'ios-trash': iosTrash,\n  'ios-trending-down': iosTrendingDown,\n  'ios-trending-up': iosTrendingUp,\n  'ios-trophy': iosTrophy,\n  'ios-tv': iosTv,\n  'ios-umbrella': iosUmbrella,\n  'ios-undo': iosUndo,\n  'ios-unlock': iosUnlock,\n  'ios-videocam': iosVideocam,\n  'ios-volume-high': iosVolumeHigh,\n  'ios-volume-low': iosVolumeLow,\n  'ios-volume-mute': iosVolumeMute,\n  'ios-volume-off': iosVolumeOff,\n  'ios-walk': iosWalk,\n  'ios-wallet': iosWallet,\n  'ios-warning': iosWarning,\n  'ios-watch': iosWatch,\n  'ios-water': iosWater,\n  'ios-wifi': iosWifi,\n  'ios-wine': iosWine,\n  'ios-woman': iosWoman,\n  'logo-android': logoAndroid,\n  'logo-angular': logoAngular,\n  'logo-apple': logoApple,\n  'logo-bitbucket': logoBitbucket,\n  'logo-bitcoin': logoBitcoin,\n  'logo-buffer': logoBuffer,\n  'logo-chrome': logoChrome,\n  'logo-closed-captioning': logoClosedCaptioning,\n  'logo-codepen': logoCodepen,\n  'logo-css3': logoCss3,\n  'logo-designernews': logoDesignernews,\n  'logo-dribbble': logoDribbble,\n  'logo-dropbox': logoDropbox,\n  'logo-euro': logoEuro,\n  'logo-facebook': logoFacebook,\n  'logo-flickr': logoFlickr,\n  'logo-foursquare': logoFoursquare,\n  'logo-freebsd-devil': logoFreebsdDevil,\n  'logo-game-controller-a': logoGameControllerA,\n  'logo-game-controller-b': logoGameControllerB,\n  'logo-github': logoGithub,\n  'logo-google': logoGoogle,\n  'logo-googleplus': logoGoogleplus,\n  'logo-hackernews': logoHackernews,\n  'logo-html5': logoHtml5,\n  'logo-instagram': logoInstagram,\n  'logo-ionic': logoIonic,\n  'logo-ionitron': logoIonitron,\n  'logo-javascript': logoJavascript,\n  'logo-linkedin': logoLinkedin,\n  'logo-markdown': logoMarkdown,\n  'logo-model-s': logoModelS,\n  'logo-no-smoking': logoNoSmoking,\n  'logo-nodejs': logoNodejs,\n  'logo-npm': logoNpm,\n  'logo-octocat': logoOctocat,\n  'logo-pinterest': logoPinterest,\n  'logo-playstation': logoPlaystation,\n  'logo-polymer': logoPolymer,\n  'logo-python': logoPython,\n  'logo-reddit': logoReddit,\n  'logo-rss': logoRss,\n  'logo-sass': logoSass,\n  'logo-skype': logoSkype,\n  'logo-slack': logoSlack,\n  'logo-snapchat': logoSnapchat,\n  'logo-steam': logoSteam,\n  'logo-tumblr': logoTumblr,\n  'logo-tux': logoTux,\n  'logo-twitch': logoTwitch,\n  'logo-twitter': logoTwitter,\n  'logo-usd': logoUsd,\n  'logo-vimeo': logoVimeo,\n  'logo-vk': logoVk,\n  'logo-whatsapp': logoWhatsapp,\n  'logo-windows': logoWindows,\n  'logo-wordpress': logoWordpress,\n  'logo-xbox': logoXbox,\n  'logo-xing': logoXing,\n  'logo-yahoo': logoYahoo,\n  'logo-yen': logoYen,\n  'logo-youtube': logoYoutube,\n  'md-add-circle-outline': mdAddCircleOutline,\n  'md-add-circle': mdAddCircle,\n  'md-add': mdAdd,\n  'md-airplane': mdAirplane,\n  'md-alarm': mdAlarm,\n  'md-albums': mdAlbums,\n  'md-alert': mdAlert,\n  'md-american-football': mdAmericanFootball,\n  'md-analytics': mdAnalytics,\n  'md-aperture': mdAperture,\n  'md-apps': mdApps,\n  'md-appstore': mdAppstore,\n  'md-archive': mdArchive,\n  'md-arrow-back': mdArrowBack,\n  'md-arrow-down': mdArrowDown,\n  'md-arrow-dropdown-circle': mdArrowDropdownCircle,\n  'md-arrow-dropdown': mdArrowDropdown,\n  'md-arrow-dropleft-circle': mdArrowDropleftCircle,\n  'md-arrow-dropleft': mdArrowDropleft,\n  'md-arrow-dropright-circle': mdArrowDroprightCircle,\n  'md-arrow-dropright': mdArrowDropright,\n  'md-arrow-dropup-circle': mdArrowDropupCircle,\n  'md-arrow-dropup': mdArrowDropup,\n  'md-arrow-forward': mdArrowForward,\n  'md-arrow-round-back': mdArrowRoundBack,\n  'md-arrow-round-down': mdArrowRoundDown,\n  'md-arrow-round-forward': mdArrowRoundForward,\n  'md-arrow-round-up': mdArrowRoundUp,\n  'md-arrow-up': mdArrowUp,\n  'md-at': mdAt,\n  'md-attach': mdAttach,\n  'md-backspace': mdBackspace,\n  'md-barcode': mdBarcode,\n  'md-baseball': mdBaseball,\n  'md-basket': mdBasket,\n  'md-basketball': mdBasketball,\n  'md-battery-charging': mdBatteryCharging,\n  'md-battery-dead': mdBatteryDead,\n  'md-battery-full': mdBatteryFull,\n  'md-beaker': mdBeaker,\n  'md-bed': mdBed,\n  'md-beer': mdBeer,\n  'md-bicycle': mdBicycle,\n  'md-bluetooth': mdBluetooth,\n  'md-boat': mdBoat,\n  'md-body': mdBody,\n  'md-bonfire': mdBonfire,\n  'md-book': mdBook,\n  'md-bookmark': mdBookmark,\n  'md-bookmarks': mdBookmarks,\n  'md-bowtie': mdBowtie,\n  'md-briefcase': mdBriefcase,\n  'md-browsers': mdBrowsers,\n  'md-brush': mdBrush,\n  'md-bug': mdBug,\n  'md-build': mdBuild,\n  'md-bulb': mdBulb,\n  'md-bus': mdBus,\n  'md-business': mdBusiness,\n  'md-cafe': mdCafe,\n  'md-calculator': mdCalculator,\n  'md-calendar': mdCalendar,\n  'md-call': mdCall,\n  'md-camera': mdCamera,\n  'md-car': mdCar,\n  'md-card': mdCard,\n  'md-cart': mdCart,\n  'md-cash': mdCash,\n  'md-cellular': mdCellular,\n  'md-chatboxes': mdChatboxes,\n  'md-chatbubbles': mdChatbubbles,\n  'md-checkbox-outline': mdCheckboxOutline,\n  'md-checkbox': mdCheckbox,\n  'md-checkmark-circle-outline': mdCheckmarkCircleOutline,\n  'md-checkmark-circle': mdCheckmarkCircle,\n  'md-checkmark': mdCheckmark,\n  'md-clipboard': mdClipboard,\n  'md-clock': mdClock,\n  'md-close-circle-outline': mdCloseCircleOutline,\n  'md-close-circle': mdCloseCircle,\n  'md-close': mdClose,\n  'md-cloud-circle': mdCloudCircle,\n  'md-cloud-done': mdCloudDone,\n  'md-cloud-download': mdCloudDownload,\n  'md-cloud-outline': mdCloudOutline,\n  'md-cloud-upload': mdCloudUpload,\n  'md-cloud': mdCloud,\n  'md-cloudy-night': mdCloudyNight,\n  'md-cloudy': mdCloudy,\n  'md-code-download': mdCodeDownload,\n  'md-code-working': mdCodeWorking,\n  'md-code': mdCode,\n  'md-cog': mdCog,\n  'md-color-fill': mdColorFill,\n  'md-color-filter': mdColorFilter,\n  'md-color-palette': mdColorPalette,\n  'md-color-wand': mdColorWand,\n  'md-compass': mdCompass,\n  'md-construct': mdConstruct,\n  'md-contact': mdContact,\n  'md-contacts': mdContacts,\n  'md-contract': mdContract,\n  'md-contrast': mdContrast,\n  'md-copy': mdCopy,\n  'md-create': mdCreate,\n  'md-crop': mdCrop,\n  'md-cube': mdCube,\n  'md-cut': mdCut,\n  'md-desktop': mdDesktop,\n  'md-disc': mdDisc,\n  'md-document': mdDocument,\n  'md-done-all': mdDoneAll,\n  'md-download': mdDownload,\n  'md-easel': mdEasel,\n  'md-egg': mdEgg,\n  'md-exit': mdExit,\n  'md-expand': mdExpand,\n  'md-eye-off': mdEyeOff,\n  'md-eye': mdEye,\n  'md-fastforward': mdFastforward,\n  'md-female': mdFemale,\n  'md-filing': mdFiling,\n  'md-film': mdFilm,\n  'md-finger-print': mdFingerPrint,\n  'md-fitness': mdFitness,\n  'md-flag': mdFlag,\n  'md-flame': mdFlame,\n  'md-flash-off': mdFlashOff,\n  'md-flash': mdFlash,\n  'md-flashlight': mdFlashlight,\n  'md-flask': mdFlask,\n  'md-flower': mdFlower,\n  'md-folder-open': mdFolderOpen,\n  'md-folder': mdFolder,\n  'md-football': mdFootball,\n  'md-funnel': mdFunnel,\n  'md-gift': mdGift,\n  'md-git-branch': mdGitBranch,\n  'md-git-commit': mdGitCommit,\n  'md-git-compare': mdGitCompare,\n  'md-git-merge': mdGitMerge,\n  'md-git-network': mdGitNetwork,\n  'md-git-pull-request': mdGitPullRequest,\n  'md-glasses': mdGlasses,\n  'md-globe': mdGlobe,\n  'md-grid': mdGrid,\n  'md-hammer': mdHammer,\n  'md-hand': mdHand,\n  'md-happy': mdHappy,\n  'md-headset': mdHeadset,\n  'md-heart-dislike': mdHeartDislike,\n  'md-heart-empty': mdHeartEmpty,\n  'md-heart-half': mdHeartHalf,\n  'md-heart': mdHeart,\n  'md-help-buoy': mdHelpBuoy,\n  'md-help-circle-outline': mdHelpCircleOutline,\n  'md-help-circle': mdHelpCircle,\n  'md-help': mdHelp,\n  'md-home': mdHome,\n  'md-hourglass': mdHourglass,\n  'md-ice-cream': mdIceCream,\n  'md-image': mdImage,\n  'md-images': mdImages,\n  'md-infinite': mdInfinite,\n  'md-information-circle-outline': mdInformationCircleOutline,\n  'md-information-circle': mdInformationCircle,\n  'md-information': mdInformation,\n  'md-jet': mdJet,\n  'md-journal': mdJournal,\n  'md-key': mdKey,\n  'md-keypad': mdKeypad,\n  'md-laptop': mdLaptop,\n  'md-leaf': mdLeaf,\n  'md-link': mdLink,\n  'md-list-box': mdListBox,\n  'md-list': mdList,\n  'md-locate': mdLocate,\n  'md-lock': mdLock,\n  'md-log-in': mdLogIn,\n  'md-log-out': mdLogOut,\n  'md-magnet': mdMagnet,\n  'md-mail-open': mdMailOpen,\n  'md-mail-unread': mdMailUnread,\n  'md-mail': mdMail,\n  'md-male': mdMale,\n  'md-man': mdMan,\n  'md-map': mdMap,\n  'md-medal': mdMedal,\n  'md-medical': mdMedical,\n  'md-medkit': mdMedkit,\n  'md-megaphone': mdMegaphone,\n  'md-menu': mdMenu,\n  'md-mic-off': mdMicOff,\n  'md-mic': mdMic,\n  'md-microphone': mdMicrophone,\n  'md-moon': mdMoon,\n  'md-more': mdMore,\n  'md-move': mdMove,\n  'md-musical-note': mdMusicalNote,\n  'md-musical-notes': mdMusicalNotes,\n  'md-navigate': mdNavigate,\n  'md-notifications-off': mdNotificationsOff,\n  'md-notifications-outline': mdNotificationsOutline,\n  'md-notifications': mdNotifications,\n  'md-nuclear': mdNuclear,\n  'md-nutrition': mdNutrition,\n  'md-open': mdOpen,\n  'md-options': mdOptions,\n  'md-outlet': mdOutlet,\n  'md-paper-plane': mdPaperPlane,\n  'md-paper': mdPaper,\n  'md-partly-sunny': mdPartlySunny,\n  'md-pause': mdPause,\n  'md-paw': mdPaw,\n  'md-people': mdPeople,\n  'md-person-add': mdPersonAdd,\n  'md-person': mdPerson,\n  'md-phone-landscape': mdPhoneLandscape,\n  'md-phone-portrait': mdPhonePortrait,\n  'md-photos': mdPhotos,\n  'md-pie': mdPie,\n  'md-pin': mdPin,\n  'md-pint': mdPint,\n  'md-pizza': mdPizza,\n  'md-planet': mdPlanet,\n  'md-play-circle': mdPlayCircle,\n  'md-play': mdPlay,\n  'md-podium': mdPodium,\n  'md-power': mdPower,\n  'md-pricetag': mdPricetag,\n  'md-pricetags': mdPricetags,\n  'md-print': mdPrint,\n  'md-pulse': mdPulse,\n  'md-qr-scanner': mdQrScanner,\n  'md-quote': mdQuote,\n  'md-radio-button-off': mdRadioButtonOff,\n  'md-radio-button-on': mdRadioButtonOn,\n  'md-radio': mdRadio,\n  'md-rainy': mdRainy,\n  'md-recording': mdRecording,\n  'md-redo': mdRedo,\n  'md-refresh-circle': mdRefreshCircle,\n  'md-refresh': mdRefresh,\n  'md-remove-circle-outline': mdRemoveCircleOutline,\n  'md-remove-circle': mdRemoveCircle,\n  'md-remove': mdRemove,\n  'md-reorder': mdReorder,\n  'md-repeat': mdRepeat,\n  'md-resize': mdResize,\n  'md-restaurant': mdRestaurant,\n  'md-return-left': mdReturnLeft,\n  'md-return-right': mdReturnRight,\n  'md-reverse-camera': mdReverseCamera,\n  'md-rewind': mdRewind,\n  'md-ribbon': mdRibbon,\n  'md-rocket': mdRocket,\n  'md-rose': mdRose,\n  'md-sad': mdSad,\n  'md-save': mdSave,\n  'md-school': mdSchool,\n  'md-search': mdSearch,\n  'md-send': mdSend,\n  'md-settings': mdSettings,\n  'md-share-alt': mdShareAlt,\n  'md-share': mdShare,\n  'md-shirt': mdShirt,\n  'md-shuffle': mdShuffle,\n  'md-skip-backward': mdSkipBackward,\n  'md-skip-forward': mdSkipForward,\n  'md-snow': mdSnow,\n  'md-speedometer': mdSpeedometer,\n  'md-square-outline': mdSquareOutline,\n  'md-square': mdSquare,\n  'md-star-half': mdStarHalf,\n  'md-star-outline': mdStarOutline,\n  'md-star': mdStar,\n  'md-stats': mdStats,\n  'md-stopwatch': mdStopwatch,\n  'md-subway': mdSubway,\n  'md-sunny': mdSunny,\n  'md-swap': mdSwap,\n  'md-switch': mdSwitch,\n  'md-sync': mdSync,\n  'md-tablet-landscape': mdTabletLandscape,\n  'md-tablet-portrait': mdTabletPortrait,\n  'md-tennisball': mdTennisball,\n  'md-text': mdText,\n  'md-thermometer': mdThermometer,\n  'md-thumbs-down': mdThumbsDown,\n  'md-thumbs-up': mdThumbsUp,\n  'md-thunderstorm': mdThunderstorm,\n  'md-time': mdTime,\n  'md-timer': mdTimer,\n  'md-today': mdToday,\n  'md-train': mdTrain,\n  'md-transgender': mdTransgender,\n  'md-trash': mdTrash,\n  'md-trending-down': mdTrendingDown,\n  'md-trending-up': mdTrendingUp,\n  'md-trophy': mdTrophy,\n  'md-tv': mdTv,\n  'md-umbrella': mdUmbrella,\n  'md-undo': mdUndo,\n  'md-unlock': mdUnlock,\n  'md-videocam': mdVideocam,\n  'md-volume-high': mdVolumeHigh,\n  'md-volume-low': mdVolumeLow,\n  'md-volume-mute': mdVolumeMute,\n  'md-volume-off': mdVolumeOff,\n  'md-walk': mdWalk,\n  'md-wallet': mdWallet,\n  'md-warning': mdWarning,\n  'md-watch': mdWatch,\n  'md-water': mdWater,\n  'md-wifi': mdWifi,\n  'md-wine': mdWine,\n  'md-woman': mdWoman\n};\n\nexport { iosAddCircleOutline, iosAddCircle, iosAdd, iosAirplane, iosAlarm, iosAlbums, iosAlert, iosAmericanFootball, iosAnalytics, iosAperture, iosApps, iosAppstore, iosArchive, iosArrowBack, iosArrowDown, iosArrowDropdownCircle, iosArrowDropdown, iosArrowDropleftCircle, iosArrowDropleft, iosArrowDroprightCircle, iosArrowDropright, iosArrowDropupCircle, iosArrowDropup, iosArrowForward, iosArrowRoundBack, iosArrowRoundDown, iosArrowRoundForward, iosArrowRoundUp, iosArrowUp, iosAt, iosAttach, iosBackspace, iosBarcode, iosBaseball, iosBasket, iosBasketball, iosBatteryCharging, iosBatteryDead, iosBatteryFull, iosBeaker, iosBed, iosBeer, iosBicycle, iosBluetooth, iosBoat, iosBody, iosBonfire, iosBook, iosBookmark, iosBookmarks, iosBowtie, iosBriefcase, iosBrowsers, iosBrush, iosBug, iosBuild, iosBulb, iosBus, iosBusiness, iosCafe, iosCalculator, iosCalendar, iosCall, iosCamera, iosCar, iosCard, iosCart, iosCash, iosCellular, iosChatboxes, iosChatbubbles, iosCheckboxOutline, iosCheckbox, iosCheckmarkCircleOutline, iosCheckmarkCircle, iosCheckmark, iosClipboard, iosClock, iosCloseCircleOutline, iosCloseCircle, iosClose, iosCloudCircle, iosCloudDone, iosCloudDownload, iosCloudOutline, iosCloudUpload, iosCloud, iosCloudyNight, iosCloudy, iosCodeDownload, iosCodeWorking, iosCode, iosCog, iosColorFill, iosColorFilter, iosColorPalette, iosColorWand, iosCompass, iosConstruct, iosContact, iosContacts, iosContract, iosContrast, iosCopy, iosCreate, iosCrop, iosCube, iosCut, iosDesktop, iosDisc, iosDocument, iosDoneAll, iosDownload, iosEasel, iosEgg, iosExit, iosExpand, iosEyeOff, iosEye, iosFastforward, iosFemale, iosFiling, iosFilm, iosFingerPrint, iosFitness, iosFlag, iosFlame, iosFlashOff, iosFlash, iosFlashlight, iosFlask, iosFlower, iosFolderOpen, iosFolder, iosFootball, iosFunnel, iosGift, iosGitBranch, iosGitCommit, iosGitCompare, iosGitMerge, iosGitNetwork, iosGitPullRequest, iosGlasses, iosGlobe, iosGrid, iosHammer, iosHand, iosHappy, iosHeadset, iosHeartDislike, iosHeartEmpty, iosHeartHalf, iosHeart, iosHelpBuoy, iosHelpCircleOutline, iosHelpCircle, iosHelp, iosHome, iosHourglass, iosIceCream, iosImage, iosImages, iosInfinite, iosInformationCircleOutline, iosInformationCircle, iosInformation, iosJet, iosJournal, iosKey, iosKeypad, iosLaptop, iosLeaf, iosLink, iosListBox, iosList, iosLocate, iosLock, iosLogIn, iosLogOut, iosMagnet, iosMailOpen, iosMailUnread, iosMail, iosMale, iosMan, iosMap, iosMedal, iosMedical, iosMedkit, iosMegaphone, iosMenu, iosMicOff, iosMic, iosMicrophone, iosMoon, iosMore, iosMove, iosMusicalNote, iosMusicalNotes, iosNavigate, iosNotificationsOff, iosNotificationsOutline, iosNotifications, iosNuclear, iosNutrition, iosOpen, iosOptions, iosOutlet, iosPaperPlane, iosPaper, iosPartlySunny, iosPause, iosPaw, iosPeople, iosPersonAdd, iosPerson, iosPhoneLandscape, iosPhonePortrait, iosPhotos, iosPie, iosPin, iosPint, iosPizza, iosPlanet, iosPlayCircle, iosPlay, iosPodium, iosPower, iosPricetag, iosPricetags, iosPrint, iosPulse, iosQrScanner, iosQuote, iosRadioButtonOff, iosRadioButtonOn, iosRadio, iosRainy, iosRecording, iosRedo, iosRefreshCircle, iosRefresh, iosRemoveCircleOutline, iosRemoveCircle, iosRemove, iosReorder, iosRepeat, iosResize, iosRestaurant, iosReturnLeft, iosReturnRight, iosReverseCamera, iosRewind, iosRibbon, iosRocket, iosRose, iosSad, iosSave, iosSchool, iosSearch, iosSend, iosSettings, iosShareAlt, iosShare, iosShirt, iosShuffle, iosSkipBackward, iosSkipForward, iosSnow, iosSpeedometer, iosSquareOutline, iosSquare, iosStarHalf, iosStarOutline, iosStar, iosStats, iosStopwatch, iosSubway, iosSunny, iosSwap, iosSwitch, iosSync, iosTabletLandscape, iosTabletPortrait, iosTennisball, iosText, iosThermometer, iosThumbsDown, iosThumbsUp, iosThunderstorm, iosTime, iosTimer, iosToday, iosTrain, iosTransgender, iosTrash, iosTrendingDown, iosTrendingUp, iosTrophy, iosTv, iosUmbrella, iosUndo, iosUnlock, iosVideocam, iosVolumeHigh, iosVolumeLow, iosVolumeMute, iosVolumeOff, iosWalk, iosWallet, iosWarning, iosWatch, iosWater, iosWifi, iosWine, iosWoman, logoAndroid, logoAngular, logoApple, logoBitbucket, logoBitcoin, logoBuffer, logoChrome, logoClosedCaptioning, logoCodepen, logoCss3, logoDesignernews, logoDribbble, logoDropbox, logoEuro, logoFacebook, logoFlickr, logoFoursquare, logoFreebsdDevil, logoGameControllerA, logoGameControllerB, logoGithub, logoGoogle, logoGoogleplus, logoHackernews, logoHtml5, logoInstagram, logoIonic, logoIonitron, logoJavascript, logoLinkedin, logoMarkdown, logoModelS, logoNoSmoking, logoNodejs, logoNpm, logoOctocat, logoPinterest, logoPlaystation, logoPolymer, logoPython, logoReddit, logoRss, logoSass, logoSkype, logoSlack, logoSnapchat, logoSteam, logoTumblr, logoTux, logoTwitch, logoTwitter, logoUsd, logoVimeo, logoVk, logoWhatsapp, logoWindows, logoWordpress, logoXbox, logoXing, logoYahoo, logoYen, logoYoutube, mdAddCircleOutline, mdAddCircle, mdAdd, mdAirplane, mdAlarm, mdAlbums, mdAlert, mdAmericanFootball, mdAnalytics, mdAperture, mdApps, mdAppstore, mdArchive, mdArrowBack, mdArrowDown, mdArrowDropdownCircle, mdArrowDropdown, mdArrowDropleftCircle, mdArrowDropleft, mdArrowDroprightCircle, mdArrowDropright, mdArrowDropupCircle, mdArrowDropup, mdArrowForward, mdArrowRoundBack, mdArrowRoundDown, mdArrowRoundForward, mdArrowRoundUp, mdArrowUp, mdAt, mdAttach, mdBackspace, mdBarcode, mdBaseball, mdBasket, mdBasketball, mdBatteryCharging, mdBatteryDead, mdBatteryFull, mdBeaker, mdBed, mdBeer, mdBicycle, mdBluetooth, mdBoat, mdBody, mdBonfire, mdBook, mdBookmark, mdBookmarks, mdBowtie, mdBriefcase, mdBrowsers, mdBrush, mdBug, mdBuild, mdBulb, mdBus, mdBusiness, mdCafe, mdCalculator, mdCalendar, mdCall, mdCamera, mdCar, mdCard, mdCart, mdCash, mdCellular, mdChatboxes, mdChatbubbles, mdCheckboxOutline, mdCheckbox, mdCheckmarkCircleOutline, mdCheckmarkCircle, mdCheckmark, mdClipboard, mdClock, mdCloseCircleOutline, mdCloseCircle, mdClose, mdCloudCircle, mdCloudDone, mdCloudDownload, mdCloudOutline, mdCloudUpload, mdCloud, mdCloudyNight, mdCloudy, mdCodeDownload, mdCodeWorking, mdCode, mdCog, mdColorFill, mdColorFilter, mdColorPalette, mdColorWand, mdCompass, mdConstruct, mdContact, mdContacts, mdContract, mdContrast, mdCopy, mdCreate, mdCrop, mdCube, mdCut, mdDesktop, mdDisc, mdDocument, mdDoneAll, mdDownload, mdEasel, mdEgg, mdExit, mdExpand, mdEyeOff, mdEye, mdFastforward, mdFemale, mdFiling, mdFilm, mdFingerPrint, mdFitness, mdFlag, mdFlame, mdFlashOff, mdFlash, mdFlashlight, mdFlask, mdFlower, mdFolderOpen, mdFolder, mdFootball, mdFunnel, mdGift, mdGitBranch, mdGitCommit, mdGitCompare, mdGitMerge, mdGitNetwork, mdGitPullRequest, mdGlasses, mdGlobe, mdGrid, mdHammer, mdHand, mdHappy, mdHeadset, mdHeartDislike, mdHeartEmpty, mdHeartHalf, mdHeart, mdHelpBuoy, mdHelpCircleOutline, mdHelpCircle, mdHelp, mdHome, mdHourglass, mdIceCream, mdImage, mdImages, mdInfinite, mdInformationCircleOutline, mdInformationCircle, mdInformation, mdJet, mdJournal, mdKey, mdKeypad, mdLaptop, mdLeaf, mdLink, mdListBox, mdList, mdLocate, mdLock, mdLogIn, mdLogOut, mdMagnet, mdMailOpen, mdMailUnread, mdMail, mdMale, mdMan, mdMap, mdMedal, mdMedical, mdMedkit, mdMegaphone, mdMenu, mdMicOff, mdMic, mdMicrophone, mdMoon, mdMore, mdMove, mdMusicalNote, mdMusicalNotes, mdNavigate, mdNotificationsOff, mdNotificationsOutline, mdNotifications, mdNuclear, mdNutrition, mdOpen, mdOptions, mdOutlet, mdPaperPlane, mdPaper, mdPartlySunny, mdPause, mdPaw, mdPeople, mdPersonAdd, mdPerson, mdPhoneLandscape, mdPhonePortrait, mdPhotos, mdPie, mdPin, mdPint, mdPizza, mdPlanet, mdPlayCircle, mdPlay, mdPodium, mdPower, mdPricetag, mdPricetags, mdPrint, mdPulse, mdQrScanner, mdQuote, mdRadioButtonOff, mdRadioButtonOn, mdRadio, mdRainy, mdRecording, mdRedo, mdRefreshCircle, mdRefresh, mdRemoveCircleOutline, mdRemoveCircle, mdRemove, mdReorder, mdRepeat, mdResize, mdRestaurant, mdReturnLeft, mdReturnRight, mdReverseCamera, mdRewind, mdRibbon, mdRocket, mdRose, mdSad, mdSave, mdSchool, mdSearch, mdSend, mdSettings, mdShareAlt, mdShare, mdShirt, mdShuffle, mdSkipBackward, mdSkipForward, mdSnow, mdSpeedometer, mdSquareOutline, mdSquare, mdStarHalf, mdStarOutline, mdStar, mdStats, mdStopwatch, mdSubway, mdSunny, mdSwap, mdSwitch, mdSync, mdTabletLandscape, mdTabletPortrait, mdTennisball, mdText, mdThermometer, mdThumbsDown, mdThumbsUp, mdThunderstorm, mdTime, mdTimer, mdToday, mdTrain, mdTransgender, mdTrash, mdTrendingDown, mdTrendingUp, mdTrophy, mdTv, mdUmbrella, mdUndo, mdUnlock, mdVideocam, mdVolumeHigh, mdVolumeLow, mdVolumeMute, mdVolumeOff, mdWalk, mdWallet, mdWarning, mdWatch, mdWater, mdWifi, mdWine, mdWoman };\n"
  },
  {
    "path": "content/js/stencil/svg/index.js",
    "content": "\nrequire.context('!!file-loader?name=[name].[ext]&outputPath=svg!./', false, /.svg$/);\n"
  },
  {
    "path": "content/js/stencil/types/components/icon-external/icon-external.d.ts",
    "content": "import '../../stencil.core';\nexport declare class IconExternal {\n    render(): JSX.Element;\n}\n"
  },
  {
    "path": "content/js/stencil/types/components/ionic-appflow-activatior/ionic-appflow-activatior.d.ts",
    "content": "import '../../stencil.core';\nexport declare class IonicAppflowActivator {\n    $circles: any[];\n    $lis: any[];\n    screenshots: any[];\n    active: any;\n    el: any;\n    duration: number;\n    quickDuration: number;\n    r: number;\n    circumference: number;\n    gsRefs: any[];\n    scrollPause: any;\n    constructor();\n    componentDidLoad(): void;\n    animationStart(index: any): void;\n    animationSelect(index: any): void;\n    animationRestart(index: any): void;\n    animationStopOthers(index: any): void;\n    circle(percent?: number): JSX.Element;\n    render(): JSX.Element[];\n}\n"
  },
  {
    "path": "content/js/stencil/types/components/ionic-bar-chart/ionic-bar-chart.d.ts",
    "content": "import '../../stencil.core';\nexport declare class IonicBarChart {\n    data: string;\n    color: string;\n    constructor();\n    componentWillLoad(): void;\n    componentDidLoad(): void;\n    hexToRgb(hex: any): string;\n    prepareData(): {\n        styles: {\n            bar: {\n                width: string;\n                background: string;\n            };\n            text: {\n                color: string;\n            };\n        };\n        name: string;\n        value: number;\n    }[];\n    render(): JSX.Element[];\n}\n"
  },
  {
    "path": "content/js/stencil/types/components/ionic-button/ionic-button.d.ts",
    "content": "import '../../stencil.core';\nexport declare class IonicButton {\n    color: string;\n    type: string;\n    disabled: boolean;\n    render(): JSX.Element;\n}\n"
  },
  {
    "path": "content/js/stencil/types/components/ionic-newsletter-signup/ico-email.d.ts",
    "content": "import '../../stencil.core';\nexport declare const EmailIcon: () => JSX.Element;\n"
  },
  {
    "path": "content/js/stencil/types/components/ionic-newsletter-signup/ionic-newsletter-signup.d.ts",
    "content": "import '../../stencil.core';\nexport declare class IonicNewsletterSignup {\n    placeholder: string;\n    buttonText: string;\n    darkMode: boolean;\n    homepageMode: boolean;\n    arrowMode: boolean;\n    lg: boolean;\n    kind: string;\n    isLoading: boolean;\n    hasSubmitted: boolean;\n    email: string;\n    hsFormIds: {\n        default: string;\n        podcast: string;\n    };\n    handleEmailChange(event: any): void;\n    handleSubmit(e: any): void;\n    hubspotIdentify(email: string): void;\n    getFormClass(): string;\n    render(): JSX.Element;\n}\n"
  },
  {
    "path": "content/js/stencil/types/components/ionic-quick-signup/ionic-quick-signup.d.ts",
    "content": "import '../../stencil.core';\nimport 'ionicons';\nexport declare class IonicQuickSignup {\n    hsidRef: HTMLInputElement;\n    showPricingNotice: boolean;\n    buttonColor: string;\n    transparentInput: boolean;\n    handleSubmit(_: Event): boolean;\n    render(): JSX.Element;\n}\n"
  },
  {
    "path": "content/js/stencil/types/components/ionic-search/arrow.svg.d.ts",
    "content": "import '../../stencil.core';\nexport declare const Close: () => JSX.Element;\n"
  },
  {
    "path": "content/js/stencil/types/components/ionic-search/ionic-search.d.ts",
    "content": "import '../../stencil.core';\nimport 'ionicons';\nexport declare class IonicSearch {\n    active: boolean;\n    query: string;\n    pending: number;\n    results: Array<any>;\n    dragStyles: {};\n    mobile: boolean;\n    el: any;\n    dragY: number;\n    startY: number;\n    screenHeight: number;\n    urls: any;\n    URLS: () => {\n        autocomplete: (query: any) => string;\n        search: (query: any) => string;\n    };\n    constructor();\n    activate(): void;\n    close(): void;\n    onKeyUp(e: any): Promise<void>;\n    touchStart(e: any): void;\n    touchMove(e: any): void;\n    isFirefox(): boolean;\n    touchEnd(): void;\n    render(): JSX.Element[];\n}\n"
  },
  {
    "path": "content/js/stencil/types/components/ionic-slider/ionic-slider.d.ts",
    "content": "import '../../stencil.core';\nexport declare class IonicSlider {\n    slideCount: number;\n    timer: any;\n    old: any;\n    upcoming: any;\n    slideDelay: number;\n    current: number;\n    status: any[];\n    ticker: number;\n    constructor();\n    componentDidLoad(): void;\n    next: () => void;\n    goTo: (slide: number) => void;\n    deactivate: () => void;\n    activate: () => void;\n    getClasses(item: any): string;\n    render(): JSX.Element[];\n}\n"
  },
  {
    "path": "content/js/stencil/types/components/ionic-snap-bar/ionic-snap-bar.d.ts",
    "content": "import '../../stencil.core';\nexport declare class IonicSnapBar {\n    active: boolean;\n    componentDidLoad(): void;\n    close(): void;\n    render(): JSX.Element[];\n}\n"
  },
  {
    "path": "content/js/stencil/types/components/ionic-toggle/ionic-toggle-button.d.ts",
    "content": "import '../../stencil.core';\nimport { EventEmitter } from '../../stencil.core';\nexport declare class IonicToggleButton {\n    toggleSelected: EventEmitter;\n    title: string;\n    tab: string;\n    selected: boolean;\n    deselect(): void;\n    select(): void;\n    handleSelected(): void;\n    hostData(): {\n        class: {\n            selected: boolean;\n        };\n    };\n    render(): JSX.Element;\n}\n"
  },
  {
    "path": "content/js/stencil/types/components/ionic-toggle/ionic-toggle-tab.d.ts",
    "content": "import '../../stencil.core';\nexport declare class IonicToggleTab {\n    tab: string;\n    hidden: boolean;\n    hide(): void;\n    show(): void;\n    hostData(): {\n        style: {\n            display: string;\n        };\n    };\n    render(): JSX.Element;\n}\n"
  },
  {
    "path": "content/js/stencil/types/components/ionic-toggle/ionic-toggle.d.ts",
    "content": "import '../../stencil.core';\nexport declare class IonicToggle {\n    el: Element;\n    componentDidLoad(): void;\n    selectionChanged(e: any): void;\n    render(): JSX.Element;\n}\n"
  },
  {
    "path": "content/js/stencil/types/components.d.ts",
    "content": "/* tslint:disable */\n/**\n * This is an autogenerated file created by the Stencil compiler.\n * It contains typing information for all components that exist in this project.\n */\n\n\nimport './stencil.core';\n\nimport 'ionicons';\n\n\nexport namespace Components {\n\n  interface IconExternal {}\n  interface IconExternalAttributes extends StencilHTMLAttributes {}\n\n  interface IonicAppflowActivator {}\n  interface IonicAppflowActivatorAttributes extends StencilHTMLAttributes {}\n\n  interface IonicBarChart {\n    'color': string;\n    'data': string;\n  }\n  interface IonicBarChartAttributes extends StencilHTMLAttributes {\n    'color'?: string;\n    'data'?: string;\n  }\n\n  interface IonicButton {\n    'color': string;\n    'disabled': boolean;\n    'type': string;\n  }\n  interface IonicButtonAttributes extends StencilHTMLAttributes {\n    'color'?: string;\n    'disabled'?: boolean;\n    'type'?: string;\n  }\n\n  interface IonicNewsletterSignup {\n    'arrowMode': boolean;\n    'buttonText': string;\n    'darkMode': boolean;\n    'homepageMode': boolean;\n    'kind': string;\n    'lg': boolean;\n    'placeholder': string;\n  }\n  interface IonicNewsletterSignupAttributes extends StencilHTMLAttributes {\n    'arrowMode'?: boolean;\n    'buttonText'?: string;\n    'darkMode'?: boolean;\n    'homepageMode'?: boolean;\n    'kind'?: string;\n    'lg'?: boolean;\n    'placeholder'?: string;\n  }\n\n  interface IonicQuickSignup {\n    'buttonColor': string;\n    'showPricingNotice': boolean;\n    'transparentInput': boolean;\n  }\n  interface IonicQuickSignupAttributes extends StencilHTMLAttributes {\n    'buttonColor'?: string;\n    'showPricingNotice'?: boolean;\n    'transparentInput'?: boolean;\n  }\n\n  interface IonicSearch {\n    'mobile': boolean;\n  }\n  interface IonicSearchAttributes extends StencilHTMLAttributes {\n    'mobile'?: boolean;\n  }\n\n  interface IonicSlider {}\n  interface IonicSliderAttributes extends StencilHTMLAttributes {}\n\n  interface IonicSnapBar {}\n  interface IonicSnapBarAttributes extends StencilHTMLAttributes {}\n\n  interface IonicToggleButton {\n    'deselect': () => void;\n    'select': () => void;\n    'tab': string;\n    'title': string;\n  }\n  interface IonicToggleButtonAttributes extends StencilHTMLAttributes {\n    'onToggleSelected'?: (event: CustomEvent) => void;\n    'tab'?: string;\n    'title'?: string;\n  }\n\n  interface IonicToggleTab {\n    'hide': () => void;\n    'show': () => void;\n    'tab': string;\n  }\n  interface IonicToggleTabAttributes extends StencilHTMLAttributes {\n    'tab'?: string;\n  }\n\n  interface IonicToggle {}\n  interface IonicToggleAttributes extends StencilHTMLAttributes {}\n}\n\ndeclare global {\n  interface StencilElementInterfaces {\n    'IconExternal': Components.IconExternal;\n    'IonicAppflowActivator': Components.IonicAppflowActivator;\n    'IonicBarChart': Components.IonicBarChart;\n    'IonicButton': Components.IonicButton;\n    'IonicNewsletterSignup': Components.IonicNewsletterSignup;\n    'IonicQuickSignup': Components.IonicQuickSignup;\n    'IonicSearch': Components.IonicSearch;\n    'IonicSlider': Components.IonicSlider;\n    'IonicSnapBar': Components.IonicSnapBar;\n    'IonicToggleButton': Components.IonicToggleButton;\n    'IonicToggleTab': Components.IonicToggleTab;\n    'IonicToggle': Components.IonicToggle;\n  }\n\n  interface StencilIntrinsicElements {\n    'icon-external': Components.IconExternalAttributes;\n    'ionic-appflow-activator': Components.IonicAppflowActivatorAttributes;\n    'ionic-bar-chart': Components.IonicBarChartAttributes;\n    'ionic-button': Components.IonicButtonAttributes;\n    'ionic-newsletter-signup': Components.IonicNewsletterSignupAttributes;\n    'ionic-quick-signup': Components.IonicQuickSignupAttributes;\n    'ionic-search': Components.IonicSearchAttributes;\n    'ionic-slider': Components.IonicSliderAttributes;\n    'ionic-snap-bar': Components.IonicSnapBarAttributes;\n    'ionic-toggle-button': Components.IonicToggleButtonAttributes;\n    'ionic-toggle-tab': Components.IonicToggleTabAttributes;\n    'ionic-toggle': Components.IonicToggleAttributes;\n  }\n\n\n  interface HTMLIconExternalElement extends Components.IconExternal, HTMLStencilElement {}\n  var HTMLIconExternalElement: {\n    prototype: HTMLIconExternalElement;\n    new (): HTMLIconExternalElement;\n  };\n\n  interface HTMLIonicAppflowActivatorElement extends Components.IonicAppflowActivator, HTMLStencilElement {}\n  var HTMLIonicAppflowActivatorElement: {\n    prototype: HTMLIonicAppflowActivatorElement;\n    new (): HTMLIonicAppflowActivatorElement;\n  };\n\n  interface HTMLIonicBarChartElement extends Components.IonicBarChart, HTMLStencilElement {}\n  var HTMLIonicBarChartElement: {\n    prototype: HTMLIonicBarChartElement;\n    new (): HTMLIonicBarChartElement;\n  };\n\n  interface HTMLIonicButtonElement extends Components.IonicButton, HTMLStencilElement {}\n  var HTMLIonicButtonElement: {\n    prototype: HTMLIonicButtonElement;\n    new (): HTMLIonicButtonElement;\n  };\n\n  interface HTMLIonicNewsletterSignupElement extends Components.IonicNewsletterSignup, HTMLStencilElement {}\n  var HTMLIonicNewsletterSignupElement: {\n    prototype: HTMLIonicNewsletterSignupElement;\n    new (): HTMLIonicNewsletterSignupElement;\n  };\n\n  interface HTMLIonicQuickSignupElement extends Components.IonicQuickSignup, HTMLStencilElement {}\n  var HTMLIonicQuickSignupElement: {\n    prototype: HTMLIonicQuickSignupElement;\n    new (): HTMLIonicQuickSignupElement;\n  };\n\n  interface HTMLIonicSearchElement extends Components.IonicSearch, HTMLStencilElement {}\n  var HTMLIonicSearchElement: {\n    prototype: HTMLIonicSearchElement;\n    new (): HTMLIonicSearchElement;\n  };\n\n  interface HTMLIonicSliderElement extends Components.IonicSlider, HTMLStencilElement {}\n  var HTMLIonicSliderElement: {\n    prototype: HTMLIonicSliderElement;\n    new (): HTMLIonicSliderElement;\n  };\n\n  interface HTMLIonicSnapBarElement extends Components.IonicSnapBar, HTMLStencilElement {}\n  var HTMLIonicSnapBarElement: {\n    prototype: HTMLIonicSnapBarElement;\n    new (): HTMLIonicSnapBarElement;\n  };\n\n  interface HTMLIonicToggleButtonElement extends Components.IonicToggleButton, HTMLStencilElement {}\n  var HTMLIonicToggleButtonElement: {\n    prototype: HTMLIonicToggleButtonElement;\n    new (): HTMLIonicToggleButtonElement;\n  };\n\n  interface HTMLIonicToggleTabElement extends Components.IonicToggleTab, HTMLStencilElement {}\n  var HTMLIonicToggleTabElement: {\n    prototype: HTMLIonicToggleTabElement;\n    new (): HTMLIonicToggleTabElement;\n  };\n\n  interface HTMLIonicToggleElement extends Components.IonicToggle, HTMLStencilElement {}\n  var HTMLIonicToggleElement: {\n    prototype: HTMLIonicToggleElement;\n    new (): HTMLIonicToggleElement;\n  };\n\n  interface HTMLElementTagNameMap {\n    'icon-external': HTMLIconExternalElement\n    'ionic-appflow-activator': HTMLIonicAppflowActivatorElement\n    'ionic-bar-chart': HTMLIonicBarChartElement\n    'ionic-button': HTMLIonicButtonElement\n    'ionic-newsletter-signup': HTMLIonicNewsletterSignupElement\n    'ionic-quick-signup': HTMLIonicQuickSignupElement\n    'ionic-search': HTMLIonicSearchElement\n    'ionic-slider': HTMLIonicSliderElement\n    'ionic-snap-bar': HTMLIonicSnapBarElement\n    'ionic-toggle-button': HTMLIonicToggleButtonElement\n    'ionic-toggle-tab': HTMLIonicToggleTabElement\n    'ionic-toggle': HTMLIonicToggleElement\n  }\n\n  interface ElementTagNameMap {\n    'icon-external': HTMLIconExternalElement;\n    'ionic-appflow-activator': HTMLIonicAppflowActivatorElement;\n    'ionic-bar-chart': HTMLIonicBarChartElement;\n    'ionic-button': HTMLIonicButtonElement;\n    'ionic-newsletter-signup': HTMLIonicNewsletterSignupElement;\n    'ionic-quick-signup': HTMLIonicQuickSignupElement;\n    'ionic-search': HTMLIonicSearchElement;\n    'ionic-slider': HTMLIonicSliderElement;\n    'ionic-snap-bar': HTMLIonicSnapBarElement;\n    'ionic-toggle-button': HTMLIonicToggleButtonElement;\n    'ionic-toggle-tab': HTMLIonicToggleTabElement;\n    'ionic-toggle': HTMLIonicToggleElement;\n  }\n\n\n}\n"
  },
  {
    "path": "content/js/stencil/types/index.d.ts",
    "content": "// declare module \"*.svg\" {\n//   const content: any;\n//   export default content;\n// }"
  },
  {
    "path": "content/js/stencil/types/stencil.core.d.ts",
    "content": "/**\n * This file gets copied to all distributions of stencil component collections.\n * - no imports\n */\n\nexport interface ComponentWillLoad {\n  /**\n   * The component is about to load and it has not\n   * rendered yet.\n   *\n   * This is the best place to make any data updates\n   * before the first render.\n   *\n   * componentWillLoad will only be called once.\n   */\n  componentWillLoad: () => Promise<void> | void;\n}\n\nexport interface ComponentDidLoad {\n  /**\n   * The component has loaded and has already rendered.\n   *\n   * Updating data in this method will cause the\n   * component to re-render.\n   *\n   * componentDidLoad will only be called once.\n   */\n  componentDidLoad: () => void;\n}\n\nexport interface ComponentWillUpdate {\n  /**\n   * The component is about to update and re-render.\n   *\n   * Called multiple times throughout the life of\n   * the component as it updates.\n   *\n   * componentWillUpdate is not called on the first render.\n   */\n  componentWillUpdate: () => Promise<void> | void;\n}\n\nexport interface ComponentDidUpdate {\n  /**\n   * The component has just re-rendered.\n   *\n   * Called multiple times throughout the life of\n   * the component as it updates.\n   *\n   * componentWillUpdate is not called on the\n   * first render.\n   */\n  componentDidUpdate: () => void;\n}\n\nexport interface ComponentDidUnload {\n  /**\n   * The component did unload and the element\n   * will be destroyed.\n   */\n  componentDidUnload: () => void;\n}\n\nexport interface ComponentInstance {\n  /**\n   * The component is about to load and it has not\n   * rendered yet.\n   *\n   * This is the best place to make any data updates\n   * before the first render.\n   *\n   * componentWillLoad will only be called once.\n   */\n  componentWillLoad?: () => Promise<void> | void;\n\n  /**\n   * The component has loaded and has already rendered.\n   *\n   * Updating data in this method will cause the\n   * component to re-render.\n   *\n   * componentDidLoad will only be called once.\n   */\n  componentDidLoad?: () => void;\n\n  /**\n   * The component is about to update and re-render.\n   *\n   * Called multiple times throughout the life of\n   * the component as it updates.\n   *\n   * componentWillUpdate is not called on the first render.\n   */\n  componentWillUpdate?: () => Promise<void> | void;\n\n  /**\n   * The component has just re-rendered.\n   *\n   * Called multiple times throughout the life of\n   * the component as it updates.\n   *\n   * componentWillUpdate is not called on the\n   * first render.\n   */\n  componentDidUpdate?: () => void;\n\n  /**\n   * The component did unload and the element\n   * will be destroyed.\n   */\n  componentDidUnload?: () => void;\n\n  render?: () => any;\n\n  /**\n   * Used to dynamically set host element attributes.\n   * Should be placed directly above render()\n   */\n  hostData?: () => {\n    class?: {[className: string]: boolean};\n    style?: any;\n    [attrName: string]: any;\n  };\n\n  [memberName: string]: any;\n}\n\n\n/**\n * General types important to applications using stencil built components\n */\nexport interface EventEmitter<T= any> {\n  emit: (data?: T) => CustomEvent<T>;\n}\n\nexport interface EventListenerEnable {\n  (instance: any, eventName: string, enabled: boolean, attachTo?: string|Element, passive?: boolean): void;\n}\n\nexport interface QueueApi {\n  tick: (cb: RafCallback) => void;\n  read: (cb: RafCallback) => void;\n  write: (cb: RafCallback) => void;\n  clear?: () => void;\n  flush?: (cb?: () => void) => void;\n}\n\nexport interface RafCallback {\n  (timeStamp: number): void;\n}\n\n/**\n * This file gets copied to all distributions of stencil component collections.\n * - no imports\n */\n\ndeclare global {\n  interface HTMLStencilElement extends HTMLElement {\n    componentOnReady(): Promise<this>;\n    forceUpdate(): void;\n  }\n  interface StencilHTMLAttributes extends JSXElements.HTMLAttributes {}\n  interface StencilIntrinsicElements extends JSXElements.DefaultIntrinsicElements {}\n  interface StencilElementInterfaces {}\n  interface StencilGlobalHTMLAttributes {}\n}\n\nexport namespace JSXElements {\n  export interface DefaultIntrinsicElements {\n    // Stencil elements\n    slot: JSXElements.SlotAttributes;\n\n    // HTML\n    a: JSXElements.AnchorHTMLAttributes<HTMLAnchorElement>;\n    abbr: JSXElements.HTMLAttributes;\n    address: JSXElements.HTMLAttributes;\n    area: JSXElements.AreaHTMLAttributes<HTMLAreaElement>;\n    article: JSXElements.HTMLAttributes;\n    aside: JSXElements.HTMLAttributes;\n    audio: JSXElements.AudioHTMLAttributes<HTMLAudioElement>;\n    b: JSXElements.HTMLAttributes;\n    base: JSXElements.BaseHTMLAttributes<HTMLBaseElement>;\n    bdi: JSXElements.HTMLAttributes;\n    bdo: JSXElements.HTMLAttributes;\n    big: JSXElements.HTMLAttributes;\n    blockquote: JSXElements.BlockquoteHTMLAttributes<HTMLQuoteElement>;\n    body: JSXElements.HTMLAttributes<HTMLBodyElement>;\n    br: JSXElements.HTMLAttributes<HTMLBRElement>;\n    button: JSXElements.ButtonHTMLAttributes<HTMLButtonElement>;\n    canvas: JSXElements.CanvasHTMLAttributes<HTMLCanvasElement>;\n    caption: JSXElements.HTMLAttributes<HTMLTableCaptionElement>;\n    cite: JSXElements.HTMLAttributes;\n    code: JSXElements.HTMLAttributes;\n    col: JSXElements.ColHTMLAttributes<HTMLTableColElement>;\n    colgroup: JSXElements.ColgroupHTMLAttributes<HTMLTableColElement>;\n    data: JSXElements.HTMLAttributes<HTMLDataElement>;\n    datalist: JSXElements.HTMLAttributes<HTMLDataListElement>;\n    dd: JSXElements.HTMLAttributes;\n    del: JSXElements.DelHTMLAttributes<HTMLModElement>;\n    details: JSXElements.DetailsHTMLAttributes<HTMLElement>;\n    dfn: JSXElements.HTMLAttributes;\n    dialog: JSXElements.DialogHTMLAttributes<HTMLDialogElement>;\n    div: JSXElements.HTMLAttributes<HTMLDivElement>;\n    dl: JSXElements.HTMLAttributes<HTMLDListElement>;\n    dt: JSXElements.HTMLAttributes;\n    em: JSXElements.HTMLAttributes;\n    embed: JSXElements.EmbedHTMLAttributes<HTMLEmbedElement>;\n    fieldset: JSXElements.FieldsetHTMLAttributes<HTMLFieldSetElement>;\n    figcaption: JSXElements.HTMLAttributes;\n    figure: JSXElements.HTMLAttributes;\n    footer: JSXElements.HTMLAttributes;\n    form: JSXElements.FormHTMLAttributes<HTMLFormElement>;\n    h1: JSXElements.HTMLAttributes<HTMLHeadingElement>;\n    h2: JSXElements.HTMLAttributes<HTMLHeadingElement>;\n    h3: JSXElements.HTMLAttributes<HTMLHeadingElement>;\n    h4: JSXElements.HTMLAttributes<HTMLHeadingElement>;\n    h5: JSXElements.HTMLAttributes<HTMLHeadingElement>;\n    h6: JSXElements.HTMLAttributes<HTMLHeadingElement>;\n    head: JSXElements.HTMLAttributes<HTMLHeadElement>;\n    header: JSXElements.HTMLAttributes;\n    hgroup: JSXElements.HTMLAttributes;\n    hr: JSXElements.HTMLAttributes<HTMLHRElement>;\n    html: JSXElements.HTMLAttributes<HTMLHtmlElement>;\n    i: JSXElements.HTMLAttributes;\n    iframe: JSXElements.IframeHTMLAttributes<HTMLIFrameElement>;\n    img: JSXElements.ImgHTMLAttributes<HTMLImageElement>;\n    input: JSXElements.InputHTMLAttributes<HTMLInputElement>;\n    ins: JSXElements.InsHTMLAttributes<HTMLModElement>;\n    kbd: JSXElements.HTMLAttributes;\n    keygen: JSXElements.KeygenHTMLAttributes<HTMLElement>;\n    label: JSXElements.LabelHTMLAttributes<HTMLLabelElement>;\n    legend: JSXElements.HTMLAttributes<HTMLLegendElement>;\n    li: JSXElements.LiHTMLAttributes<HTMLLIElement>;\n    link: JSXElements.LinkHTMLAttributes<HTMLLinkElement>;\n    main: JSXElements.HTMLAttributes;\n    map: JSXElements.MapHTMLAttributes<HTMLMapElement>;\n    mark: JSXElements.HTMLAttributes;\n    menu: JSXElements.MenuHTMLAttributes<HTMLMenuElement>;\n    menuitem: JSXElements.HTMLAttributes;\n    meta: JSXElements.MetaHTMLAttributes<HTMLMetaElement>;\n    meter: JSXElements.MeterHTMLAttributes<HTMLMeterElement>;\n    nav: JSXElements.HTMLAttributes;\n    noscript: JSXElements.HTMLAttributes;\n    object: JSXElements.ObjectHTMLAttributes<HTMLObjectElement>;\n    ol: JSXElements.OlHTMLAttributes<HTMLOListElement>;\n    optgroup: JSXElements.OptgroupHTMLAttributes<HTMLOptGroupElement>;\n    option: JSXElements.OptionHTMLAttributes<HTMLOptionElement>;\n    output: JSXElements.OutputHTMLAttributes<HTMLOutputElement>;\n    p: JSXElements.HTMLAttributes<HTMLParagraphElement>;\n    param: JSXElements.ParamHTMLAttributes<HTMLParamElement>;\n    picture: JSXElements.HTMLAttributes<HTMLPictureElement>;\n    pre: JSXElements.HTMLAttributes<HTMLPreElement>;\n    progress: JSXElements.ProgressHTMLAttributes<HTMLProgressElement>;\n    q: JSXElements.QuoteHTMLAttributes<HTMLQuoteElement>;\n    rp: JSXElements.HTMLAttributes;\n    rt: JSXElements.HTMLAttributes;\n    ruby: JSXElements.HTMLAttributes;\n    s: JSXElements.HTMLAttributes;\n    samp: JSXElements.HTMLAttributes;\n    script: JSXElements.ScriptHTMLAttributes<HTMLScriptElement>;\n    section: JSXElements.HTMLAttributes;\n    select: JSXElements.SelectHTMLAttributes<HTMLSelectElement>;\n    small: JSXElements.HTMLAttributes;\n    source: JSXElements.SourceHTMLAttributes<HTMLSourceElement>;\n    span: JSXElements.HTMLAttributes<HTMLSpanElement>;\n    strong: JSXElements.HTMLAttributes;\n    style: JSXElements.StyleHTMLAttributes<HTMLStyleElement>;\n    sub: JSXElements.HTMLAttributes;\n    summary: JSXElements.HTMLAttributes;\n    sup: JSXElements.HTMLAttributes;\n    table: JSXElements.TableHTMLAttributes<HTMLTableElement>;\n    tbody: JSXElements.HTMLAttributes<HTMLTableSectionElement>;\n    td: JSXElements.TdHTMLAttributes<HTMLTableDataCellElement>;\n    textarea: JSXElements.TextareaHTMLAttributes<HTMLTextAreaElement>;\n    tfoot: JSXElements.HTMLAttributes<HTMLTableSectionElement>;\n    th: JSXElements.ThHTMLAttributes<HTMLTableHeaderCellElement>;\n    thead: JSXElements.HTMLAttributes<HTMLTableSectionElement>;\n    time: JSXElements.TimeHTMLAttributes<HTMLTimeElement>;\n    title: JSXElements.HTMLAttributes<HTMLTitleElement>;\n    tr: JSXElements.HTMLAttributes<HTMLTableRowElement>;\n    track: JSXElements.TrackHTMLAttributes<HTMLTrackElement>;\n    u: JSXElements.HTMLAttributes;\n    ul: JSXElements.HTMLAttributes<HTMLUListElement>;\n    'var': JSXElements.HTMLAttributes;\n    video: JSXElements.VideoHTMLAttributes<HTMLVideoElement>;\n    wbr: JSXElements.HTMLAttributes;\n  }\n\n  export interface SlotAttributes {\n    name?: string;\n    slot?: string;\n  }\n\n  export interface AnchorHTMLAttributes<T> extends HTMLAttributes<T> {\n    download?: any;\n    href?: string;\n    hrefLang?: string;\n    hreflang?: string;\n    media?: string;\n    rel?: string;\n    target?: string;\n  }\n\n  export interface AudioHTMLAttributes<T> extends MediaHTMLAttributes<T> {}\n\n  export interface AreaHTMLAttributes<T> extends HTMLAttributes<T> {\n    alt?: string;\n    coords?: string;\n    download?: any;\n    href?: string;\n    hrefLang?: string;\n    hreflang?: string;\n    media?: string;\n    rel?: string;\n    shape?: string;\n    target?: string;\n  }\n\n  export interface BaseHTMLAttributes<T> extends HTMLAttributes<T> {\n    href?: string;\n    target?: string;\n  }\n\n  export interface BlockquoteHTMLAttributes<T> extends HTMLAttributes<T> {\n    cite?: string;\n  }\n\n  export interface ButtonHTMLAttributes<T> extends HTMLAttributes<T> {\n    autoFocus?: boolean;\n    disabled?: boolean;\n    form?: string;\n    formAction?: string;\n    formaction?: string;\n    formEncType?: string;\n    formenctype?: string;\n    formMethod?: string;\n    formmethod?: string;\n    formNoValidate?: boolean;\n    formnovalidate?: boolean;\n    formTarget?: string;\n    formtarget?: string;\n    name?: string;\n    type?: string;\n    value?: string | string[] | number;\n  }\n\n  export interface CanvasHTMLAttributes<T> extends HTMLAttributes<T> {\n    height?: number | string;\n    width?: number | string;\n  }\n\n  export interface ColHTMLAttributes<T> extends HTMLAttributes<T> {\n    span?: number;\n  }\n\n  export interface ColgroupHTMLAttributes<T> extends HTMLAttributes<T> {\n    span?: number;\n  }\n\n  export interface DetailsHTMLAttributes<T> extends HTMLAttributes<T> {\n    open?: boolean;\n  }\n\n  export interface DelHTMLAttributes<T> extends HTMLAttributes<T> {\n    cite?: string;\n    dateTime?: string;\n    datetime?: string;\n  }\n\n  export interface DialogHTMLAttributes<T> extends HTMLAttributes<T> {\n    open?: boolean;\n    returnValue?: string;\n  }\n\n  export interface EmbedHTMLAttributes<T> extends HTMLAttributes<T> {\n    height?: number | string;\n    src?: string;\n    type?: string;\n    width?: number | string;\n  }\n\n  export interface FieldsetHTMLAttributes<T> extends HTMLAttributes<T> {\n    disabled?: boolean;\n    form?: string;\n    name?: string;\n  }\n\n  export interface FormHTMLAttributes<T> extends HTMLAttributes<T> {\n    acceptCharset?: string;\n    acceptcharset?: string;\n    action?: string;\n    autoComplete?: string;\n    autocomplete?: string;\n    encType?: string;\n    enctype?: string;\n    method?: string;\n    name?: string;\n    noValidate?: boolean;\n    novalidate?: boolean | string;\n    target?: string;\n  }\n\n  export interface HtmlHTMLAttributes<T> extends HTMLAttributes<T> {\n    manifest?: string;\n  }\n\n  export interface IframeHTMLAttributes<T> extends HTMLAttributes<T> {\n    allowFullScreen?: boolean;\n    allowfullScreen?: string | boolean;\n    allowTransparency?: boolean;\n    allowtransparency?: string | boolean;\n    frameBorder?: number | string;\n    frameborder?: number | string;\n    height?: number | string;\n    marginHeight?: number;\n    marginheight?: string | number;\n    marginWidth?: number;\n    marginwidth?: string | number;\n    name?: string;\n    sandbox?: string;\n    scrolling?: string;\n    seamless?: boolean;\n    src?: string;\n    srcDoc?: string;\n    srcdoc?: string;\n    width?: number | string;\n  }\n\n  export interface ImgHTMLAttributes<T> extends HTMLAttributes<T> {\n    alt?: string;\n    decoding?: 'async' | 'auto' | 'sync';\n    height?: number | string;\n    sizes?: string;\n    src?: string;\n    srcSet?: string;\n    srcset?: string;\n    useMap?: string;\n    usemap?: string;\n    width?: number | string;\n  }\n\n  export interface InsHTMLAttributes<T> extends HTMLAttributes<T> {\n    cite?: string;\n    dateTime?: string;\n    datetime?: string;\n  }\n\n  export interface InputHTMLAttributes<T> extends HTMLAttributes<T> {\n    accept?: string;\n    alt?: string;\n    autoComplete?: string;\n    autocomplete?: string;\n    autoFocus?: boolean;\n    autofocus?: boolean | string;\n    capture?: string; // https://www.w3.org/TR/html-media-capture/#the-capture-attribute\n    checked?: boolean;\n    crossOrigin?: string;\n    crossorigin?: string;\n    disabled?: boolean;\n    form?: string;\n    formAction?: string;\n    formaction?: string;\n    formEncType?: string;\n    formenctype?: string;\n    formMethod?: string;\n    formmethod?: string;\n    formNoValidate?: boolean;\n    formnovalidate?: boolean;\n    formTarget?: string;\n    formtarget?: string;\n    height?: number | string;\n    list?: string;\n    max?: number | string;\n    maxLength?: number;\n    maxlength?: number | string;\n    min?: number | string;\n    minLength?: number;\n    minlength?: number | string;\n    multiple?: boolean;\n    name?: string;\n    pattern?: string;\n    placeholder?: string;\n    readOnly?: boolean;\n    readonly?: boolean | string;\n    required?: boolean;\n    size?: number;\n    src?: string;\n    step?: number | string;\n    type?: string;\n    value?: string | string[] | number;\n    width?: number | string;\n  }\n\n  export interface KeygenHTMLAttributes<T> extends HTMLAttributes<T> {\n    autoFocus?: boolean;\n    autofocus?: boolean | string;\n    challenge?: string;\n    disabled?: boolean;\n    form?: string;\n    keyType?: string;\n    keytype?: string;\n    keyParams?: string;\n    keyparams?: string;\n    name?: string;\n  }\n\n  export interface LabelHTMLAttributes<T> extends HTMLAttributes<T> {\n    form?: string;\n    htmlFor?: string;\n    htmlfor?: string;\n  }\n\n  export interface LiHTMLAttributes<T> extends HTMLAttributes<T> {\n    value?: string | string[] | number;\n  }\n\n  export interface LinkHTMLAttributes<T> extends HTMLAttributes<T> {\n    href?: string;\n    hrefLang?: string;\n    hreflang?: string;\n    integrity?: string;\n    media?: string;\n    rel?: string;\n    sizes?: string;\n    type?: string;\n  }\n\n  export interface MapHTMLAttributes<T> extends HTMLAttributes<T> {\n    name?: string;\n  }\n\n  export interface MenuHTMLAttributes<T> extends HTMLAttributes<T> {\n    type?: string;\n  }\n\n  export interface MediaHTMLAttributes<T> extends HTMLAttributes<T> {\n    autoPlay?: boolean;\n    autoplay?: boolean | string;\n    controls?: boolean;\n    crossOrigin?: string;\n    crossorigin?: string;\n    loop?: boolean;\n    mediaGroup?: string;\n    mediagroup?: string;\n    muted?: boolean;\n    preload?: string;\n    src?: string;\n  }\n\n  export interface MetaHTMLAttributes<T> extends HTMLAttributes<T> {\n    charSet?: string;\n    charset?: string;\n    content?: string;\n    httpEquiv?: string;\n    httpequiv?: string;\n    name?: string;\n  }\n\n  export interface MeterHTMLAttributes<T> extends HTMLAttributes<T> {\n    form?: string;\n    high?: number;\n    low?: number;\n    max?: number | string;\n    min?: number | string;\n    optimum?: number;\n    value?: string | string[] | number;\n  }\n\n  export interface QuoteHTMLAttributes<T> extends HTMLAttributes<T> {\n    cite?: string;\n  }\n\n  export interface ObjectHTMLAttributes<T> extends HTMLAttributes<T> {\n    classID?: string;\n    classid?: string;\n    data?: string;\n    form?: string;\n    height?: number | string;\n    name?: string;\n    type?: string;\n    useMap?: string;\n    usemap?: string;\n    width?: number | string;\n    wmode?: string;\n  }\n\n  export interface OlHTMLAttributes<T> extends HTMLAttributes<T> {\n    reversed?: boolean;\n    start?: number;\n  }\n\n  export interface OptgroupHTMLAttributes<T> extends HTMLAttributes<T> {\n    disabled?: boolean;\n    label?: string;\n  }\n\n  export interface OptionHTMLAttributes<T> extends HTMLAttributes<T> {\n    disabled?: boolean;\n    label?: string;\n    selected?: boolean;\n    value?: string | string[] | number;\n  }\n\n  export interface OutputHTMLAttributes<T> extends HTMLAttributes<T> {\n    form?: string;\n    htmlFor?: string;\n    htmlfor?: string;\n    name?: string;\n  }\n\n  export interface ParamHTMLAttributes<T> extends HTMLAttributes<T> {\n    name?: string;\n    value?: string | string[] | number;\n  }\n\n  export interface ProgressHTMLAttributes<T> extends HTMLAttributes<T> {\n    max?: number | string;\n    value?: string | string[] | number;\n  }\n\n  export interface ScriptHTMLAttributes<T> extends HTMLAttributes<T> {\n    async?: boolean;\n    charSet?: string;\n    charset?: string;\n    crossOrigin?: string;\n    crossorigin?: string;\n    defer?: boolean;\n    integrity?: string;\n    nonce?: string;\n    src?: string;\n    type?: string;\n  }\n\n  export interface SelectHTMLAttributes<T> extends HTMLAttributes<T> {\n    autoFocus?: boolean;\n    disabled?: boolean;\n    form?: string;\n    multiple?: boolean;\n    name?: string;\n    required?: boolean;\n    size?: number;\n  }\n\n  export interface SourceHTMLAttributes<T> extends HTMLAttributes<T> {\n    media?: string;\n    sizes?: string;\n    src?: string;\n    srcSet?: string;\n    type?: string;\n  }\n\n  export interface StyleHTMLAttributes<T> extends HTMLAttributes<T> {\n    media?: string;\n    nonce?: string;\n    scoped?: boolean;\n    type?: string;\n  }\n\n  export interface TableHTMLAttributes<T> extends HTMLAttributes<T> {\n    cellPadding?: number | string;\n    cellpadding?: number | string;\n    cellSpacing?: number | string;\n    cellspacing?: number | string;\n    summary?: string;\n  }\n\n  export interface TextareaHTMLAttributes<T> extends HTMLAttributes<T> {\n    autoFocus?: boolean;\n    autofocus?: boolean | string;\n    cols?: number;\n    disabled?: boolean;\n    form?: string;\n    maxLength?: number;\n    maxlength?: number | string;\n    minLength?: number;\n    minlength?: number | string;\n    name?: string;\n    placeholder?: string;\n    readOnly?: boolean;\n    readonly?: boolean | string;\n    required?: boolean;\n    rows?: number;\n    value?: string | string[] | number;\n    wrap?: string;\n  }\n\n  export interface TdHTMLAttributes<T> extends HTMLAttributes<T> {\n    colSpan?: number;\n    headers?: string;\n    rowSpan?: number;\n  }\n\n  export interface ThHTMLAttributes<T> extends HTMLAttributes<T> {\n    colSpan?: number;\n    headers?: string;\n    rowSpan?: number;\n    rowspan?: number | string;\n    scope?: string;\n  }\n\n  export interface TimeHTMLAttributes<T> extends HTMLAttributes<T> {\n    dateTime?: string;\n  }\n\n  export interface TrackHTMLAttributes<T> extends HTMLAttributes<T> {\n    default?: boolean;\n    kind?: string;\n    label?: string;\n    src?: string;\n    srcLang?: string;\n    srclang?: string;\n  }\n\n  export interface VideoHTMLAttributes<T> extends MediaHTMLAttributes<T> {\n    height?: number | string;\n    playsInline?: boolean;\n    playsinline?: boolean | string;\n    poster?: string;\n    width?: number | string;\n  }\n\n  export interface HTMLAttributes<T = HTMLElement> extends StencilGlobalHTMLAttributes, DOMAttributes {\n    // vdom specific\n    innerHTML?: string;\n    ref?: (elm?: T) => void;\n    key?: string | number;\n\n    // Standard HTML Attributes\n    accessKey?: string;\n    class?: string |  { [className: string]: boolean };\n    contentEditable?: boolean | string;\n    contenteditable?: boolean | string;\n    contextMenu?: string;\n    contextmenu?: string;\n    dir?: string;\n    draggable?: boolean;\n    hidden?: boolean;\n    id?: string;\n    lang?: string;\n    slot?: string;\n    spellCheck?: boolean;\n    spellcheck?: boolean | string;\n    style?: { [key: string]: string };\n    tabIndex?: number;\n    tabindex?: number | string;\n    title?: string;\n\n    // Unknown\n    inputMode?: string;\n    inputmode?: string;\n    is?: string;\n    radioGroup?: string; // <command>, <menuitem>\n    radiogroup?: string;\n\n    // WAI-ARIA\n    role?: string;\n\n    // RDFa Attributes\n    about?: string;\n    datatype?: string;\n    inlist?: any;\n    prefix?: string;\n    property?: string;\n    resource?: string;\n    typeof?: string;\n    vocab?: string;\n\n    // Non-standard Attributes\n    autoCapitalize?: string;\n    autocapitalize?: string;\n    autoCorrect?: string;\n    autocorrect?: string;\n    autoSave?: string;\n    autosave?: string;\n    color?: string;\n    itemProp?: string;\n    itemprop?: string;\n    itemScope?: boolean;\n    itemscope?: boolean;\n    itemType?: string;\n    itemtype?: string;\n    itemID?: string;\n    itemid?: string;\n    itemRef?: string;\n    itemref?: string;\n    results?: number;\n    security?: string;\n    unselectable?: boolean;\n  }\n\n  export interface SVGAttributes extends StencilGlobalHTMLAttributes, DOMAttributes {\n    // Attributes which also defined in HTMLAttributes\n    // See comment in SVGDOMPropertyConfig.js\n    class?: string | { [className: string]: boolean };\n    color?: string;\n    height?: number | string;\n    id?: string;\n    lang?: string;\n    max?: number | string;\n    media?: string;\n    method?: string;\n    min?: number | string;\n    name?: string;\n    style?: { [key: string]: any; };\n    target?: string;\n    type?: string;\n    width?: number | string;\n\n    // Other HTML properties supported by SVG elements in browsers\n    role?: string;\n    tabIndex?: number;\n\n    // SVG Specific attributes\n    accentHeight?: number | string;\n    accumulate?: 'none' | 'sum';\n    additive?: 'replace' | 'sum';\n    alignmentBaseline?: 'auto' | 'baseline' | 'before-edge' | 'text-before-edge' | 'middle' | 'central' | 'after-edge' |\n    'text-after-edge' | 'ideographic' | 'alphabetic' | 'hanging' | 'mathematical' | 'inherit';\n    allowReorder?: 'no' | 'yes';\n    alphabetic?: number | string;\n    amplitude?: number | string;\n    arabicForm?: 'initial' | 'medial' | 'terminal' | 'isolated';\n    ascent?: number | string;\n    attributeName?: string;\n    attributeType?: string;\n    autoReverse?: number | string;\n    azimuth?: number | string;\n    baseFrequency?: number | string;\n    baselineShift?: number | string;\n    baseProfile?: number | string;\n    bbox?: number | string;\n    begin?: number | string;\n    bias?: number | string;\n    by?: number | string;\n    calcMode?: number | string;\n    capHeight?: number | string;\n    clip?: number | string;\n    clipPath?: string;\n    clipPathUnits?: number | string;\n    clipRule?: number | string;\n    colorInterpolation?: number | string;\n    colorInterpolationFilters?: 'auto' | 'sRGB' | 'linearRGB' | 'inherit';\n    colorProfile?: number | string;\n    colorRendering?: number | string;\n    contentScriptType?: number | string;\n    contentStyleType?: number | string;\n    cursor?: number | string;\n    cx?: number | string;\n    cy?: number | string;\n    d?: string;\n    decelerate?: number | string;\n    descent?: number | string;\n    diffuseConstant?: number | string;\n    direction?: number | string;\n    display?: number | string;\n    divisor?: number | string;\n    dominantBaseline?: number | string;\n    dur?: number | string;\n    dx?: number | string;\n    dy?: number | string;\n    edgeMode?: number | string;\n    elevation?: number | string;\n    enableBackground?: number | string;\n    end?: number | string;\n    exponent?: number | string;\n    externalResourcesRequired?: number | string;\n    fill?: string;\n    fillOpacity?: number | string;\n    fillRule?: 'nonzero' | 'evenodd' | 'inherit';\n    filter?: string;\n    filterRes?: number | string;\n    filterUnits?: number | string;\n    floodColor?: number | string;\n    floodOpacity?: number | string;\n    focusable?: number | string;\n    fontFamily?: string;\n    fontSize?: number | string;\n    fontSizeAdjust?: number | string;\n    fontStretch?: number | string;\n    fontStyle?: number | string;\n    fontVariant?: number | string;\n    fontWeight?: number | string;\n    format?: number | string;\n    from?: number | string;\n    fx?: number | string;\n    fy?: number | string;\n    g1?: number | string;\n    g2?: number | string;\n    glyphName?: number | string;\n    glyphOrientationHorizontal?: number | string;\n    glyphOrientationVertical?: number | string;\n    glyphRef?: number | string;\n    gradientTransform?: string;\n    gradientUnits?: string;\n    hanging?: number | string;\n    horizAdvX?: number | string;\n    horizOriginX?: number | string;\n    ideographic?: number | string;\n    imageRendering?: number | string;\n    in2?: number | string;\n    in?: string;\n    intercept?: number | string;\n    k1?: number | string;\n    k2?: number | string;\n    k3?: number | string;\n    k4?: number | string;\n    k?: number | string;\n    kernelMatrix?: number | string;\n    kernelUnitLength?: number | string;\n    kerning?: number | string;\n    keyPoints?: number | string;\n    keySplines?: number | string;\n    keyTimes?: number | string;\n    lengthAdjust?: number | string;\n    letterSpacing?: number | string;\n    lightingColor?: number | string;\n    limitingConeAngle?: number | string;\n    local?: number | string;\n    markerEnd?: string;\n    markerHeight?: number | string;\n    markerMid?: string;\n    markerStart?: string;\n    markerUnits?: number | string;\n    markerWidth?: number | string;\n    mask?: string;\n    maskContentUnits?: number | string;\n    maskUnits?: number | string;\n    mathematical?: number | string;\n    mode?: number | string;\n    numOctaves?: number | string;\n    offset?: number | string;\n    opacity?: number | string;\n    operator?: number | string;\n    order?: number | string;\n    orient?: number | string;\n    orientation?: number | string;\n    origin?: number | string;\n    overflow?: number | string;\n    overlinePosition?: number | string;\n    overlineThickness?: number | string;\n    paintOrder?: number | string;\n    panose1?: number | string;\n    pathLength?: number | string;\n    patternContentUnits?: string;\n    patternTransform?: number | string;\n    patternUnits?: string;\n    pointerEvents?: number | string;\n    points?: string;\n    pointsAtX?: number | string;\n    pointsAtY?: number | string;\n    pointsAtZ?: number | string;\n    preserveAlpha?: number | string;\n    preserveAspectRatio?: string;\n    primitiveUnits?: number | string;\n    r?: number | string;\n    radius?: number | string;\n    refX?: number | string;\n    refY?: number | string;\n    renderingIntent?: number | string;\n    repeatCount?: number | string;\n    repeatDur?: number | string;\n    requiredExtensions?: number | string;\n    requiredFeatures?: number | string;\n    restart?: number | string;\n    result?: string;\n    rotate?: number | string;\n    rx?: number | string;\n    ry?: number | string;\n    scale?: number | string;\n    seed?: number | string;\n    shapeRendering?: number | string;\n    slope?: number | string;\n    spacing?: number | string;\n    specularConstant?: number | string;\n    specularExponent?: number | string;\n    speed?: number | string;\n    spreadMethod?: string;\n    startOffset?: number | string;\n    stdDeviation?: number | string;\n    stemh?: number | string;\n    stemv?: number | string;\n    stitchTiles?: number | string;\n    stopColor?: string;\n    stopOpacity?: number | string;\n    strikethroughPosition?: number | string;\n    strikethroughThickness?: number | string;\n    string?: number | string;\n    stroke?: string;\n    strokeDasharray?: string | number;\n    strokeDashoffset?: string | number;\n    strokeLinecap?: 'butt' | 'round' | 'square' | 'inherit';\n    strokeLinejoin?: 'miter' | 'round' | 'bevel' | 'inherit';\n    strokeMiterlimit?: string;\n    strokeOpacity?: number | string;\n    strokeWidth?: number | string;\n    surfaceScale?: number | string;\n    systemLanguage?: number | string;\n    tableValues?: number | string;\n    targetX?: number | string;\n    targetY?: number | string;\n    textAnchor?: string;\n    textDecoration?: number | string;\n    textLength?: number | string;\n    textRendering?: number | string;\n    to?: number | string;\n    transform?: string;\n    u1?: number | string;\n    u2?: number | string;\n    underlinePosition?: number | string;\n    underlineThickness?: number | string;\n    unicode?: number | string;\n    unicodeBidi?: number | string;\n    unicodeRange?: number | string;\n    unitsPerEm?: number | string;\n    vAlphabetic?: number | string;\n    values?: string;\n    vectorEffect?: number | string;\n    version?: string;\n    vertAdvY?: number | string;\n    vertOriginX?: number | string;\n    vertOriginY?: number | string;\n    vHanging?: number | string;\n    vIdeographic?: number | string;\n    viewBox?: string;\n    viewTarget?: number | string;\n    visibility?: number | string;\n    vMathematical?: number | string;\n    widths?: number | string;\n    wordSpacing?: number | string;\n    writingMode?: number | string;\n    x1?: number | string;\n    x2?: number | string;\n    x?: number | string;\n    xChannelSelector?: string;\n    xHeight?: number | string;\n    xlinkActuate?: string;\n    xlinkArcrole?: string;\n    xlinkHref?: string;\n    xlinkRole?: string;\n    xlinkShow?: string;\n    xlinkTitle?: string;\n    xlinkType?: string;\n    xmlBase?: string;\n    xmlLang?: string;\n    xmlns?: string;\n    xmlnsXlink?: string;\n    xmlSpace?: string;\n    y1?: number | string;\n    y2?: number | string;\n    y?: number | string;\n    yChannelSelector?: string;\n    z?: number | string;\n    zoomAndPan?: string;\n  }\n\n  export interface DOMAttributes {\n    // Clipboard Events\n    onCopy?: (event: ClipboardEvent) => void;\n    onCopyCapture?: (event: ClipboardEvent) => void;\n    onCut?: (event: ClipboardEvent) => void;\n    onCutCapture?: (event: ClipboardEvent) => void;\n    onPaste?: (event: ClipboardEvent) => void;\n    onPasteCapture?: (event: ClipboardEvent) => void;\n\n    // Composition Events\n    onCompositionEnd?: (event: CompositionEvent) => void;\n    onCompositionEndCapture?: (event: CompositionEvent) => void;\n    onCompositionStart?: (event: CompositionEvent) => void;\n    onCompositionStartCapture?: (event: CompositionEvent) => void;\n    onCompositionUpdate?: (event: CompositionEvent) => void;\n    onCompositionUpdateCapture?: (event: CompositionEvent) => void;\n\n    // Focus Events\n    onFocus?: (event: FocusEvent) => void;\n    onFocusCapture?: (event: FocusEvent) => void;\n    onBlur?: (event: FocusEvent) => void;\n    onBlurCapture?: (event: FocusEvent) => void;\n\n    // Form Events\n    onChange?: (event: Event) => void;\n    onChangeCapture?: (event: Event) => void;\n    onInput?: (event: Event) => void;\n    onInputCapture?: (event: Event) => void;\n    onReset?: (event: Event) => void;\n    onResetCapture?: (event: Event) => void;\n    onSubmit?: (event: Event) => void;\n    onSubmitCapture?: (event: Event) => void;\n    onInvalid?: (event: Event) => void;\n    onInvalidCapture?: (event: Event) => void;\n\n    // Image Events\n    onLoad?: (event: Event) => void;\n    onLoadCapture?: (event: Event) => void;\n    onError?: (event: Event) => void; // also a Media Event\n    onErrorCapture?: (event: Event) => void; // also a Media Event\n\n    // Keyboard Events\n    onKeyDown?: (event: KeyboardEvent) => void;\n    onKeyDownCapture?: (event: KeyboardEvent) => void;\n    onKeyPress?: (event: KeyboardEvent) => void;\n    onKeyPressCapture?: (event: KeyboardEvent) => void;\n    onKeyUp?: (event: KeyboardEvent) => void;\n    onKeyUpCapture?: (event: KeyboardEvent) => void;\n\n    // MouseEvents\n    onAuxClick?: (event: MouseEvent) => void;\n    onClick?: (event: MouseEvent) => void;\n    onClickCapture?: (event: MouseEvent) => void;\n    onContextMenu?: (event: MouseEvent) => void;\n    onContextMenuCapture?: (event: MouseEvent) => void;\n    onDblClick?: (event: MouseEvent) => void;\n    onDblClickCapture?: (event: MouseEvent) => void;\n    onDrag?: (event: DragEvent) => void;\n    onDragCapture?: (event: DragEvent) => void;\n    onDragEnd?: (event: DragEvent) => void;\n    onDragEndCapture?: (event: DragEvent) => void;\n    onDragEnter?: (event: DragEvent) => void;\n    onDragEnterCapture?: (event: DragEvent) => void;\n    onDragExit?: (event: DragEvent) => void;\n    onDragExitCapture?: (event: DragEvent) => void;\n    onDragLeave?: (event: DragEvent) => void;\n    onDragLeaveCapture?: (event: DragEvent) => void;\n    onDragOver?: (event: DragEvent) => void;\n    onDragOverCapture?: (event: DragEvent) => void;\n    onDragStart?: (event: DragEvent) => void;\n    onDragStartCapture?: (event: DragEvent) => void;\n    onDrop?: (event: DragEvent) => void;\n    onDropCapture?: (event: DragEvent) => void;\n    onMouseDown?: (event: MouseEvent) => void;\n    onMouseDownCapture?: (event: MouseEvent) => void;\n    onMouseEnter?: (event: MouseEvent) => void;\n    onMouseLeave?: (event: MouseEvent) => void;\n    onMouseMove?: (event: MouseEvent) => void;\n    onMouseMoveCapture?: (event: MouseEvent) => void;\n    onMouseOut?: (event: MouseEvent) => void;\n    onMouseOutCapture?: (event: MouseEvent) => void;\n    onMouseOver?: (event: MouseEvent) => void;\n    onMouseOverCapture?: (event: MouseEvent) => void;\n    onMouseUp?: (event: MouseEvent) => void;\n    onMouseUpCapture?: (event: MouseEvent) => void;\n\n    // Touch Events\n    onTouchCancel?: (event: TouchEvent) => void;\n    onTouchCancelCapture?: (event: TouchEvent) => void;\n    onTouchEnd?: (event: TouchEvent) => void;\n    onTouchEndCapture?: (event: TouchEvent) => void;\n    onTouchMove?: (event: TouchEvent) => void;\n    onTouchMoveCapture?: (event: TouchEvent) => void;\n    onTouchStart?: (event: TouchEvent) => void;\n    onTouchStartCapture?: (event: TouchEvent) => void;\n\n    // UI Events\n    onScroll?: (event: UIEvent) => void;\n    onScrollCapture?: (event: UIEvent) => void;\n\n    // Wheel Events\n    onWheel?: (event: WheelEvent) => void;\n    onWheelCapture?: (event: WheelEvent) => void;\n\n    // Animation Events\n    onAnimationStart?: (event: AnimationEvent) => void;\n    onAnimationStartCapture?: (event: AnimationEvent) => void;\n    onAnimationEnd?: (event: AnimationEvent) => void;\n    onAnimationEndCapture?: (event: AnimationEvent) => void;\n    onAnimationIteration?: (event: AnimationEvent) => void;\n    onAnimationIterationCapture?: (event: AnimationEvent) => void;\n\n    // Transition Events\n    onTransitionEnd?: (event: TransitionEvent) => void;\n    onTransitionEndCapture?: (event: TransitionEvent) => void;\n  }\n}\n\nexport interface FunctionalUtilities {\n  forEach: (children: FVNode[], cb: (vnode: ChildNode, index: number, array: FVNode[]) => void) => void;\n  map: (children: FVNode[], cb: (vnode: ChildNode, index: number, array: FVNode[]) => ChildNode) => FVNode[];\n}\n\nexport interface FunctionalComponent<T = {}> {\n  (props: T, children: FVNode[], utils: FunctionalUtilities): FVNode | FVNode[];\n}\n\nexport interface FVNode {\n  // using v prefixes largely so closure has no issue property renaming\n  vtag?: string | number | Function;\n  vkey?: string | number;\n  vtext?: string;\n  vchildren?: FVNode[];\n  vattrs?: any;\n  vname?: string;\n  ishost?: boolean;\n  isSlotFallback?: boolean;\n  isSlotReference?: boolean;\n}\n\nexport interface ChildNode {\n  vtag?: string | number | Function;\n  vkey?: string | number;\n  vtext?: string;\n  vchildren?: ChildNode[];\n  vattrs?: any;\n  vname?: string;\n}\n"
  },
  {
    "path": "content/js/stencil/web-components.json",
    "content": "{\n  \"tags\": [\n    {\n      \"label\": \"icon-external\",\n      \"description\": \"\",\n      \"attributes\": []\n    },\n    {\n      \"label\": \"ionic-appflow-activator\",\n      \"description\": \"\",\n      \"attributes\": []\n    },\n    {\n      \"label\": \"ionic-bar-chart\",\n      \"description\": \"\",\n      \"attributes\": [\n        {\n          \"label\": \"color\",\n          \"description\": \"\",\n          \"required\": false\n        },\n        {\n          \"label\": \"data\",\n          \"description\": \"\",\n          \"required\": false\n        }\n      ]\n    },\n    {\n      \"label\": \"ionic-button\",\n      \"description\": \"\",\n      \"attributes\": [\n        {\n          \"label\": \"color\",\n          \"description\": \"\",\n          \"required\": false\n        },\n        {\n          \"label\": \"disabled\",\n          \"description\": \"\",\n          \"required\": false\n        },\n        {\n          \"label\": \"type\",\n          \"description\": \"\",\n          \"required\": false\n        }\n      ]\n    },\n    {\n      \"label\": \"ionic-newsletter-signup\",\n      \"description\": \"\",\n      \"attributes\": [\n        {\n          \"label\": \"arrow-mode\",\n          \"description\": \"\",\n          \"required\": false\n        },\n        {\n          \"label\": \"button-text\",\n          \"description\": \"\",\n          \"required\": false\n        },\n        {\n          \"label\": \"dark-mode\",\n          \"description\": \"\",\n          \"required\": false\n        },\n        {\n          \"label\": \"homepage-mode\",\n          \"description\": \"\",\n          \"required\": false\n        },\n        {\n          \"label\": \"kind\",\n          \"description\": \"\",\n          \"required\": false\n        },\n        {\n          \"label\": \"lg\",\n          \"description\": \"\",\n          \"required\": false\n        },\n        {\n          \"label\": \"placeholder\",\n          \"description\": \"\",\n          \"required\": false\n        }\n      ]\n    },\n    {\n      \"label\": \"ionic-quick-signup\",\n      \"description\": \"\",\n      \"attributes\": [\n        {\n          \"label\": \"button-color\",\n          \"description\": \"\",\n          \"required\": false\n        },\n        {\n          \"label\": \"show-pricing-notice\",\n          \"description\": \"\",\n          \"required\": false\n        },\n        {\n          \"label\": \"transparent-input\",\n          \"description\": \"\",\n          \"required\": false\n        }\n      ]\n    },\n    {\n      \"label\": \"ionic-search\",\n      \"description\": \"\",\n      \"attributes\": [\n        {\n          \"label\": \"mobile\",\n          \"description\": \"\",\n          \"required\": false\n        }\n      ]\n    },\n    {\n      \"label\": \"ionic-slider\",\n      \"description\": \"\",\n      \"attributes\": []\n    },\n    {\n      \"label\": \"ionic-snap-bar\",\n      \"description\": \"\",\n      \"attributes\": []\n    },\n    {\n      \"label\": \"ionic-toggle-button\",\n      \"description\": \"\",\n      \"attributes\": [\n        {\n          \"label\": \"tab\",\n          \"description\": \"\",\n          \"required\": false\n        },\n        {\n          \"label\": \"title\",\n          \"description\": \"\",\n          \"required\": false\n        }\n      ]\n    }\n  ]\n}"
  },
  {
    "path": "content/js/v2site.js",
    "content": "/*\n _             _\n(_)           (_)\n _  ___  _ __  _  ___\n| |/ _ \\| '_ \\| |/ __|\n| | (_) | | | | | (__\n|_|\\___/|_| |_|_|\\___|\n\n*/\n\nvar ionicSite = (function(){\n  var smoothScrollingTo,\n      fixedMenu,\n      winHeight = $(window).height(),\n      docContent = $('.main-content'),\n      devicePreview,\n      defaultScreen;\n\n  window.rAF = (function(){\n    return  window.requestAnimationFrame       ||\n            window.webkitRequestAnimationFrame ||\n            window.mozRequestAnimationFrame    ||\n            function( callback ){\n              window.setTimeout(callback, 16);\n            };\n  })();\n\n  /* Header menu toggle for mobile */\n  $(\"#menu-toggle\").click(function(e) {\n      e.preventDefault();\n      $(this).toggleClass(\"active\");\n  });\n\n  // smooth scroll\n  $('a[href*=#]:not([href=#])').click(function() {\n    if (location.pathname.replace(/^\\//,'') == this.pathname.replace(/^\\//,'') && location.hostname == this.hostname) {\n      var target = $(this.hash);\n      target = target.length ? target : $('[name=' + this.hash.slice(1) +']');\n      if (target.length) {\n        smoothScrollingTo = '#' + target.attr('id');\n        $('html,body').animate({ scrollTop: target.offset().top }, 100, 'swing',\n          function() {\n            if(docContent) {\n              previewSection(smoothScrollingTo);\n            }\n            smoothScrollingTo = undefined;\n          });\n        return false;\n      }\n    }\n  });\n\n  // left menu link highlight\n  var leftMenu = $('.left-menu');\n  var activeLink = leftMenu.find('[href=\"' + window.location.pathname + '\"]');\n  activeLink.parents('li').addClass(\"active\");\n\n  leftMenu.find('.api-section').click(function(){\n    if( $(this).attr('href') == '#' ) {\n      $(this).closest('.left-menu').find(\"li\").removeClass('active');\n      $(this).closest('li').toggleClass('active');\n      return false;\n    }\n  });\n\n\n  /* Fixed left menu */\n  (function() {\n    var activeId;\n    fixedMenu = $('.docked-menu');\n    if(fixedMenu.length) {\n\n      var targets = fixedMenu.find('.active-menu').find('a');\n      targets.each(function() {\n        var href = $(this).attr('href');\n        if(href && href.indexOf('#') > -1) {\n          href = href.split('#');\n          href = \"#\" + href[ href.length - 1 ];\n          $(this).attr('href', href);\n        }\n      });\n\n      var scrollSpyOffset = 40;\n      if( $(document.body).hasClass(\"device-preview-page\") ) {\n        scrollSpyOffset = 300;\n      }\n\n      $(document.body).scrollspy({ target: '.docked-menu', offset: scrollSpyOffset });\n\n      var fixedMenuTop = fixedMenu.offset().top;\n      var menuTopPadding = 20;\n      fixedMenu.css({\n        top: menuTopPadding + 'px'\n      });\n\n      function docScroll() {\n        var win = $(window);\n        var scrollTop = win.scrollTop();\n        var winWidth = win.width();\n        if(scrollTop + menuTopPadding > fixedMenuTop && winWidth >= 768) {\n          // middle of the page\n          if(!fixedMenu.hasClass(\"fixed-menu\")) {\n            fixedMenu\n              .css({\n                width: fixedMenu.width() + 'px',\n                top: '20px'\n              })\n              .addClass(\"fixed-menu\");\n          }\n        } else {\n          // top of page\n          if(fixedMenu.hasClass(\"fixed-menu\")) {\n            fixedMenu\n              .removeClass(\"fixed-menu\")\n              .css({\n                width: 'auto',\n                top: '20px'\n              });\n          }\n          if(scrollTop < 200) {\n            $('.active').removeClass(\".active\");\n          }\n        }\n      }\n      $(window).resize(function() {\n        //preFooterTop = $('.pre-footer').offset().top;\n        winHeight = $(window).height();\n        fixedMenu\n            .removeClass(\"fixed-menu\")\n            .css({\n              width: 'auto'\n            });\n        docScroll();\n      });\n      var docScrollGovernor;\n      function governDocScroll(){\n        clearTimeout(docScrollGovernor);\n        docScrollGovernor = setTimeout(docScroll, 15);\n      }\n      $(window).scroll(governDocScroll);\n\n      function scrollSpyChange(e) {\n        if(smoothScrollingTo || !docContent) {\n          window.history.replaceState && window.history.replaceState({}, smoothScrollingTo, smoothScrollingTo);\n          return;\n        }\n\n        var id;\n        if(e.target.children.length > 1) {\n          // this is a top level nav link\n          var activeSublinks = $(e.target).find('.active');\n          if(!activeSublinks.length) {\n            // no children are active for this top level link\n            id = e.target.children[0].hash;\n          }\n        } else if(e.target.children.length === 1) {\n          // this is a sub nav link\n          id = e.target.children[0].hash;\n        }\n\n        if(id) {\n          if(devicePreview) {\n            window.rAF(function(){\n              previewSection(id);\n            });\n          } else {\n            var activeSection = $(id);\n            if(activeSection.length) {\n              window.rAF(function(){\n                docContent.find('.active').removeClass('active');\n                activeSection.addClass(\"active\");\n              });\n            }\n          }\n          window.history.replaceState && window.history.replaceState({}, id, id);\n        }\n      }\n      fixedMenu.on('activate.bs.scrollspy', scrollSpyChange);\n    }\n  })();\n\n  // initDevicePreview\n  (function() {\n    /* Fixed device preview on the docs page */\n    devicePreview = $('.device-preview');\n    if(devicePreview.length) {\n      var orgDeviceTop = devicePreview.offset().top;\n\n      function onScroll() {\n        if($(window).scrollTop() > orgDeviceTop) {\n          if( !devicePreview.hasClass('fixed-preview') ) {\n            devicePreview\n              .css({\n                left: Math.round(devicePreview.offset().left) + 'px'\n              })\n              .addClass(\"fixed-preview\");\n            }\n        } else {\n          if( devicePreview.hasClass('fixed-preview') ) {\n            devicePreview\n              .removeClass(\"fixed-preview\")\n              .css({\n                left: 'auto'\n              });\n          }\n        }\n\n      }\n\n      var scrollGovernor;\n      function governScroll() {\n        clearTimeout(scrollGovernor);\n        scrollGovernor = setTimeout(onScroll, 15);\n      }\n\n      $(window).resize(function(){\n        devicePreview\n            .removeClass(\"fixed-preview\")\n            .css({\n              left: 'auto'\n            });\n        onScroll();\n      });\n      $(window).scroll(governScroll);\n\n      onScroll();\n\n      var firstSection = docContent.find('.docs-section').first();\n      if(firstSection.length) {\n        previewSection( '#' + firstSection[0].id, true );\n      }\n\n      // manually add the activated CSS like how ionic does it\n      devicePreview.on('mousedown', function(e){\n        if(e.target.classList && e.target.classList.contains('button')) {\n          e.target.classList.add('activated');\n        }\n      });\n\n      devicePreview.on('mouseup', function(e){\n        devicePreview.find('.activated').removeClass('activated');\n      });\n\n    }\n  })();\n\n\n  function previewSection(id) {\n    var activeSection = $(id);\n    if(!activeSection.length || !devicePreview) return;\n\n    var title = activeSection.find('h1,h2,h3').first();\n    var newTitle = \"Ionic Components\";\n    activeId = activeSection.attr('id');\n    if(title.length) {\n      newTitle = title.text() + \" - \" + newTitle;\n    }\n    document.title = newTitle;\n\n    docContent.find('.active:not(.tab-item)').removeClass('active');\n    activeSection.addClass(\"active\");\n\n    devicePreview.find('.active-preview').removeClass('active-preview');\n    var docExample = activeSection.find('.doc-example');\n    if( docExample.length ) {\n      // this\n      var exampleId = 'example-' + activeId;\n      var examplePreview = $('#' + exampleId);\n      if(examplePreview.length) {\n        // preview has already been added\n        window.rAF(function(){\n          examplePreview.addClass('active-preview');\n        });\n      } else if(devicePreview) {\n        // create a new example preview\n        devicePreview.append( '<div id=\"' + exampleId + '\" class=\"ionic-body\">' + docExample.html() + '</div>' );\n        window.rAF(function(){\n          $('#' + exampleId)\n            .addClass('active-preview')\n            .find('a').click(function(e){\n              // Activates tabs in tab CSS demo.\n              if ($(this).hasClass('tab-item')) {\n                $(this).siblings('.tab-item').removeClass('active');\n                $(this).addClass('active');\n              }\n              return false;\n            });\n        });\n      }\n\n    } else {\n      window.rAF(function(){\n        if(!defaultScreen) {\n          defaultScreen = devicePreview.find('.default-screen');\n        }\n        defaultScreen.addClass('active-preview');\n      });\n    }\n  }\n\n})();\n\n\n// yes I manually concatinated lunr.min.js into this file, deal with it\n\n/**\n * lunr - http://lunrjs.com - A bit like Solr, but much smaller and not as bright - 0.5.12\n * Copyright (C) 2015 Oliver Nightingale\n * MIT Licensed\n * @license\n */\n!function(){var t=function(e){var n=new t.Index;return n.pipeline.add(t.trimmer,t.stopWordFilter,t.stemmer),e&&e.call(n,n),n};t.version=\"0.5.12\",t.utils={},t.utils.warn=function(t){return function(e){t.console&&console.warn&&console.warn(e)}}(this),t.EventEmitter=function(){this.events={}},t.EventEmitter.prototype.addListener=function(){var t=Array.prototype.slice.call(arguments),e=t.pop(),n=t;if(\"function\"!=typeof e)throw new TypeError(\"last argument must be a function\");n.forEach(function(t){this.hasHandler(t)||(this.events[t]=[]),this.events[t].push(e)},this)},t.EventEmitter.prototype.removeListener=function(t,e){if(this.hasHandler(t)){var n=this.events[t].indexOf(e);this.events[t].splice(n,1),this.events[t].length||delete this.events[t]}},t.EventEmitter.prototype.emit=function(t){if(this.hasHandler(t)){var e=Array.prototype.slice.call(arguments,1);this.events[t].forEach(function(t){t.apply(void 0,e)})}},t.EventEmitter.prototype.hasHandler=function(t){return t in this.events},t.tokenizer=function(t){return arguments.length&&null!=t&&void 0!=t?Array.isArray(t)?t.map(function(t){return t.toLowerCase()}):t.toString().trim().toLowerCase().split(/[\\s\\-]+/):[]},t.Pipeline=function(){this._stack=[]},t.Pipeline.registeredFunctions={},t.Pipeline.registerFunction=function(e,n){n in this.registeredFunctions&&t.utils.warn(\"Overwriting existing registered function: \"+n),e.label=n,t.Pipeline.registeredFunctions[e.label]=e},t.Pipeline.warnIfFunctionNotRegistered=function(e){var n=e.label&&e.label in this.registeredFunctions;n||t.utils.warn(\"Function is not registered with pipeline. This may cause problems when serialising the index.\\n\",e)},t.Pipeline.load=function(e){var n=new t.Pipeline;return e.forEach(function(e){var i=t.Pipeline.registeredFunctions[e];if(!i)throw new Error(\"Cannot load un-registered function: \"+e);n.add(i)}),n},t.Pipeline.prototype.add=function(){var e=Array.prototype.slice.call(arguments);e.forEach(function(e){t.Pipeline.warnIfFunctionNotRegistered(e),this._stack.push(e)},this)},t.Pipeline.prototype.after=function(e,n){t.Pipeline.warnIfFunctionNotRegistered(n);var i=this._stack.indexOf(e);if(-1==i)throw new Error(\"Cannot find existingFn\");i+=1,this._stack.splice(i,0,n)},t.Pipeline.prototype.before=function(e,n){t.Pipeline.warnIfFunctionNotRegistered(n);var i=this._stack.indexOf(e);if(-1==i)throw new Error(\"Cannot find existingFn\");this._stack.splice(i,0,n)},t.Pipeline.prototype.remove=function(t){var e=this._stack.indexOf(t);-1!=e&&this._stack.splice(e,1)},t.Pipeline.prototype.run=function(t){for(var e=[],n=t.length,i=this._stack.length,o=0;n>o;o++){for(var r=t[o],s=0;i>s&&(r=this._stack[s](r,o,t),void 0!==r);s++);void 0!==r&&e.push(r)}return e},t.Pipeline.prototype.reset=function(){this._stack=[]},t.Pipeline.prototype.toJSON=function(){return this._stack.map(function(e){return t.Pipeline.warnIfFunctionNotRegistered(e),e.label})},t.Vector=function(){this._magnitude=null,this.list=void 0,this.length=0},t.Vector.Node=function(t,e,n){this.idx=t,this.val=e,this.next=n},t.Vector.prototype.insert=function(e,n){this._magnitude=void 0;var i=this.list;if(!i)return this.list=new t.Vector.Node(e,n,i),this.length++;if(e<i.idx)return this.list=new t.Vector.Node(e,n,i),this.length++;for(var o=i,r=i.next;void 0!=r;){if(e<r.idx)return o.next=new t.Vector.Node(e,n,r),this.length++;o=r,r=r.next}return o.next=new t.Vector.Node(e,n,r),this.length++},t.Vector.prototype.magnitude=function(){if(this._magnitude)return this._magnitude;for(var t,e=this.list,n=0;e;)t=e.val,n+=t*t,e=e.next;return this._magnitude=Math.sqrt(n)},t.Vector.prototype.dot=function(t){for(var e=this.list,n=t.list,i=0;e&&n;)e.idx<n.idx?e=e.next:e.idx>n.idx?n=n.next:(i+=e.val*n.val,e=e.next,n=n.next);return i},t.Vector.prototype.similarity=function(t){return this.dot(t)/(this.magnitude()*t.magnitude())},t.SortedSet=function(){this.length=0,this.elements=[]},t.SortedSet.load=function(t){var e=new this;return e.elements=t,e.length=t.length,e},t.SortedSet.prototype.add=function(){var t,e;for(t=0;t<arguments.length;t++)e=arguments[t],~this.indexOf(e)||this.elements.splice(this.locationFor(e),0,e);this.length=this.elements.length},t.SortedSet.prototype.toArray=function(){return this.elements.slice()},t.SortedSet.prototype.map=function(t,e){return this.elements.map(t,e)},t.SortedSet.prototype.forEach=function(t,e){return this.elements.forEach(t,e)},t.SortedSet.prototype.indexOf=function(t){for(var e=0,n=this.elements.length,i=n-e,o=e+Math.floor(i/2),r=this.elements[o];i>1;){if(r===t)return o;t>r&&(e=o),r>t&&(n=o),i=n-e,o=e+Math.floor(i/2),r=this.elements[o]}return r===t?o:-1},t.SortedSet.prototype.locationFor=function(t){for(var e=0,n=this.elements.length,i=n-e,o=e+Math.floor(i/2),r=this.elements[o];i>1;)t>r&&(e=o),r>t&&(n=o),i=n-e,o=e+Math.floor(i/2),r=this.elements[o];return r>t?o:t>r?o+1:void 0},t.SortedSet.prototype.intersect=function(e){for(var n=new t.SortedSet,i=0,o=0,r=this.length,s=e.length,a=this.elements,h=e.elements;;){if(i>r-1||o>s-1)break;a[i]!==h[o]?a[i]<h[o]?i++:a[i]>h[o]&&o++:(n.add(a[i]),i++,o++)}return n},t.SortedSet.prototype.clone=function(){var e=new t.SortedSet;return e.elements=this.toArray(),e.length=e.elements.length,e},t.SortedSet.prototype.union=function(t){var e,n,i;return this.length>=t.length?(e=this,n=t):(e=t,n=this),i=e.clone(),i.add.apply(i,n.toArray()),i},t.SortedSet.prototype.toJSON=function(){return this.toArray()},t.Index=function(){this._fields=[],this._ref=\"id\",this.pipeline=new t.Pipeline,this.documentStore=new t.Store,this.tokenStore=new t.TokenStore,this.corpusTokens=new t.SortedSet,this.eventEmitter=new t.EventEmitter,this._idfCache={},this.on(\"add\",\"remove\",\"update\",function(){this._idfCache={}}.bind(this))},t.Index.prototype.on=function(){var t=Array.prototype.slice.call(arguments);return this.eventEmitter.addListener.apply(this.eventEmitter,t)},t.Index.prototype.off=function(t,e){return this.eventEmitter.removeListener(t,e)},t.Index.load=function(e){e.version!==t.version&&t.utils.warn(\"version mismatch: current \"+t.version+\" importing \"+e.version);var n=new this;return n._fields=e.fields,n._ref=e.ref,n.documentStore=t.Store.load(e.documentStore),n.tokenStore=t.TokenStore.load(e.tokenStore),n.corpusTokens=t.SortedSet.load(e.corpusTokens),n.pipeline=t.Pipeline.load(e.pipeline),n},t.Index.prototype.field=function(t,e){var e=e||{},n={name:t,boost:e.boost||1};return this._fields.push(n),this},t.Index.prototype.ref=function(t){return this._ref=t,this},t.Index.prototype.add=function(e,n){var i={},o=new t.SortedSet,r=e[this._ref],n=void 0===n?!0:n;this._fields.forEach(function(n){var r=this.pipeline.run(t.tokenizer(e[n.name]));i[n.name]=r,t.SortedSet.prototype.add.apply(o,r)},this),this.documentStore.set(r,o),t.SortedSet.prototype.add.apply(this.corpusTokens,o.toArray());for(var s=0;s<o.length;s++){var a=o.elements[s],h=this._fields.reduce(function(t,e){var n=i[e.name].length;if(!n)return t;var o=i[e.name].filter(function(t){return t===a}).length;return t+o/n*e.boost},0);this.tokenStore.add(a,{ref:r,tf:h})}n&&this.eventEmitter.emit(\"add\",e,this)},t.Index.prototype.remove=function(t,e){var n=t[this._ref],e=void 0===e?!0:e;if(this.documentStore.has(n)){var i=this.documentStore.get(n);this.documentStore.remove(n),i.forEach(function(t){this.tokenStore.remove(t,n)},this),e&&this.eventEmitter.emit(\"remove\",t,this)}},t.Index.prototype.update=function(t,e){var e=void 0===e?!0:e;this.remove(t,!1),this.add(t,!1),e&&this.eventEmitter.emit(\"update\",t,this)},t.Index.prototype.idf=function(t){var e=\"@\"+t;if(Object.prototype.hasOwnProperty.call(this._idfCache,e))return this._idfCache[e];var n=this.tokenStore.count(t),i=1;return n>0&&(i=1+Math.log(this.documentStore.length/n)),this._idfCache[e]=i},t.Index.prototype.search=function(e){var n=this.pipeline.run(t.tokenizer(e)),i=new t.Vector,o=[],r=this._fields.reduce(function(t,e){return t+e.boost},0),s=n.some(function(t){return this.tokenStore.has(t)},this);if(!s)return[];n.forEach(function(e,n,s){var a=1/s.length*this._fields.length*r,h=this,l=this.tokenStore.expand(e).reduce(function(n,o){var r=h.corpusTokens.indexOf(o),s=h.idf(o),l=1,u=new t.SortedSet;if(o!==e){var c=Math.max(3,o.length-e.length);l=1/Math.log(c)}return r>-1&&i.insert(r,a*s*l),Object.keys(h.tokenStore.get(o)).forEach(function(t){u.add(t)}),n.union(u)},new t.SortedSet);o.push(l)},this);var a=o.reduce(function(t,e){return t.intersect(e)});return a.map(function(t){return{ref:t,score:i.similarity(this.documentVector(t))}},this).sort(function(t,e){return e.score-t.score})},t.Index.prototype.documentVector=function(e){for(var n=this.documentStore.get(e),i=n.length,o=new t.Vector,r=0;i>r;r++){var s=n.elements[r],a=this.tokenStore.get(s)[e].tf,h=this.idf(s);o.insert(this.corpusTokens.indexOf(s),a*h)}return o},t.Index.prototype.toJSON=function(){return{version:t.version,fields:this._fields,ref:this._ref,documentStore:this.documentStore.toJSON(),tokenStore:this.tokenStore.toJSON(),corpusTokens:this.corpusTokens.toJSON(),pipeline:this.pipeline.toJSON()}},t.Index.prototype.use=function(t){var e=Array.prototype.slice.call(arguments,1);e.unshift(this),t.apply(this,e)},t.Store=function(){this.store={},this.length=0},t.Store.load=function(e){var n=new this;return n.length=e.length,n.store=Object.keys(e.store).reduce(function(n,i){return n[i]=t.SortedSet.load(e.store[i]),n},{}),n},t.Store.prototype.set=function(t,e){this.has(t)||this.length++,this.store[t]=e},t.Store.prototype.get=function(t){return this.store[t]},t.Store.prototype.has=function(t){return t in this.store},t.Store.prototype.remove=function(t){this.has(t)&&(delete this.store[t],this.length--)},t.Store.prototype.toJSON=function(){return{store:this.store,length:this.length}},t.stemmer=function(){var t={ational:\"ate\",tional:\"tion\",enci:\"ence\",anci:\"ance\",izer:\"ize\",bli:\"ble\",alli:\"al\",entli:\"ent\",eli:\"e\",ousli:\"ous\",ization:\"ize\",ation:\"ate\",ator:\"ate\",alism:\"al\",iveness:\"ive\",fulness:\"ful\",ousness:\"ous\",aliti:\"al\",iviti:\"ive\",biliti:\"ble\",logi:\"log\"},e={icate:\"ic\",ative:\"\",alize:\"al\",iciti:\"ic\",ical:\"ic\",ful:\"\",ness:\"\"},n=\"[^aeiou]\",i=\"[aeiouy]\",o=n+\"[^aeiouy]*\",r=i+\"[aeiou]*\",s=\"^(\"+o+\")?\"+r+o,a=\"^(\"+o+\")?\"+r+o+\"(\"+r+\")?$\",h=\"^(\"+o+\")?\"+r+o+r+o,l=\"^(\"+o+\")?\"+i,u=new RegExp(s),c=new RegExp(h),f=new RegExp(a),d=new RegExp(l),p=/^(.+?)(ss|i)es$/,m=/^(.+?)([^s])s$/,v=/^(.+?)eed$/,y=/^(.+?)(ed|ing)$/,g=/.$/,S=/(at|bl|iz)$/,w=new RegExp(\"([^aeiouylsz])\\\\1$\"),x=new RegExp(\"^\"+o+i+\"[^aeiouwxy]$\"),k=/^(.+?[^aeiou])y$/,b=/^(.+?)(ational|tional|enci|anci|izer|bli|alli|entli|eli|ousli|ization|ation|ator|alism|iveness|fulness|ousness|aliti|iviti|biliti|logi)$/,E=/^(.+?)(icate|ative|alize|iciti|ical|ful|ness)$/,_=/^(.+?)(al|ance|ence|er|ic|able|ible|ant|ement|ment|ent|ou|ism|ate|iti|ous|ive|ize)$/,F=/^(.+?)(s|t)(ion)$/,O=/^(.+?)e$/,P=/ll$/,N=new RegExp(\"^\"+o+i+\"[^aeiouwxy]$\"),T=function(n){var i,o,r,s,a,h,l;if(n.length<3)return n;if(r=n.substr(0,1),\"y\"==r&&(n=r.toUpperCase()+n.substr(1)),s=p,a=m,s.test(n)?n=n.replace(s,\"$1$2\"):a.test(n)&&(n=n.replace(a,\"$1$2\")),s=v,a=y,s.test(n)){var T=s.exec(n);s=u,s.test(T[1])&&(s=g,n=n.replace(s,\"\"))}else if(a.test(n)){var T=a.exec(n);i=T[1],a=d,a.test(i)&&(n=i,a=S,h=w,l=x,a.test(n)?n+=\"e\":h.test(n)?(s=g,n=n.replace(s,\"\")):l.test(n)&&(n+=\"e\"))}if(s=k,s.test(n)){var T=s.exec(n);i=T[1],n=i+\"i\"}if(s=b,s.test(n)){var T=s.exec(n);i=T[1],o=T[2],s=u,s.test(i)&&(n=i+t[o])}if(s=E,s.test(n)){var T=s.exec(n);i=T[1],o=T[2],s=u,s.test(i)&&(n=i+e[o])}if(s=_,a=F,s.test(n)){var T=s.exec(n);i=T[1],s=c,s.test(i)&&(n=i)}else if(a.test(n)){var T=a.exec(n);i=T[1]+T[2],a=c,a.test(i)&&(n=i)}if(s=O,s.test(n)){var T=s.exec(n);i=T[1],s=c,a=f,h=N,(s.test(i)||a.test(i)&&!h.test(i))&&(n=i)}return s=P,a=c,s.test(n)&&a.test(n)&&(s=g,n=n.replace(s,\"\")),\"y\"==r&&(n=r.toLowerCase()+n.substr(1)),n};return T}(),t.Pipeline.registerFunction(t.stemmer,\"stemmer\"),t.stopWordFilter=function(e){return e&&t.stopWordFilter.stopWords[e]!==e?e:void 0},t.stopWordFilter.stopWords={a:\"a\",able:\"able\",about:\"about\",across:\"across\",after:\"after\",all:\"all\",almost:\"almost\",also:\"also\",am:\"am\",among:\"among\",an:\"an\",and:\"and\",any:\"any\",are:\"are\",as:\"as\",at:\"at\",be:\"be\",because:\"because\",been:\"been\",but:\"but\",by:\"by\",can:\"can\",cannot:\"cannot\",could:\"could\",dear:\"dear\",did:\"did\",\"do\":\"do\",does:\"does\",either:\"either\",\"else\":\"else\",ever:\"ever\",every:\"every\",\"for\":\"for\",from:\"from\",get:\"get\",got:\"got\",had:\"had\",has:\"has\",have:\"have\",he:\"he\",her:\"her\",hers:\"hers\",him:\"him\",his:\"his\",how:\"how\",however:\"however\",i:\"i\",\"if\":\"if\",\"in\":\"in\",into:\"into\",is:\"is\",it:\"it\",its:\"its\",just:\"just\",least:\"least\",let:\"let\",like:\"like\",likely:\"likely\",may:\"may\",me:\"me\",might:\"might\",most:\"most\",must:\"must\",my:\"my\",neither:\"neither\",no:\"no\",nor:\"nor\",not:\"not\",of:\"of\",off:\"off\",often:\"often\",on:\"on\",only:\"only\",or:\"or\",other:\"other\",our:\"our\",own:\"own\",rather:\"rather\",said:\"said\",say:\"say\",says:\"says\",she:\"she\",should:\"should\",since:\"since\",so:\"so\",some:\"some\",than:\"than\",that:\"that\",the:\"the\",their:\"their\",them:\"them\",then:\"then\",there:\"there\",these:\"these\",they:\"they\",\"this\":\"this\",tis:\"tis\",to:\"to\",too:\"too\",twas:\"twas\",us:\"us\",wants:\"wants\",was:\"was\",we:\"we\",were:\"were\",what:\"what\",when:\"when\",where:\"where\",which:\"which\",\"while\":\"while\",who:\"who\",whom:\"whom\",why:\"why\",will:\"will\",\"with\":\"with\",would:\"would\",yet:\"yet\",you:\"you\",your:\"your\"},t.Pipeline.registerFunction(t.stopWordFilter,\"stopWordFilter\"),t.trimmer=function(t){var e=t.replace(/^\\W+/,\"\").replace(/\\W+$/,\"\");return\"\"===e?void 0:e},t.Pipeline.registerFunction(t.trimmer,\"trimmer\"),t.TokenStore=function(){this.root={docs:{}},this.length=0},t.TokenStore.load=function(t){var e=new this;return e.root=t.root,e.length=t.length,e},t.TokenStore.prototype.add=function(t,e,n){var n=n||this.root,i=t[0],o=t.slice(1);return i in n||(n[i]={docs:{}}),0===o.length?(n[i].docs[e.ref]=e,void(this.length+=1)):this.add(o,e,n[i])},t.TokenStore.prototype.has=function(t){if(!t)return!1;for(var e=this.root,n=0;n<t.length;n++){if(!e[t[n]])return!1;e=e[t[n]]}return!0},t.TokenStore.prototype.getNode=function(t){if(!t)return{};for(var e=this.root,n=0;n<t.length;n++){if(!e[t[n]])return{};e=e[t[n]]}return e},t.TokenStore.prototype.get=function(t,e){return this.getNode(t,e).docs||{}},t.TokenStore.prototype.count=function(t,e){return Object.keys(this.get(t,e)).length},t.TokenStore.prototype.remove=function(t,e){if(t){for(var n=this.root,i=0;i<t.length;i++){if(!(t[i]in n))return;n=n[t[i]]}delete n.docs[e]}},t.TokenStore.prototype.expand=function(t,e){var n=this.getNode(t),i=n.docs||{},e=e||[];return Object.keys(i).length&&e.push(t),Object.keys(n).forEach(function(n){\"docs\"!==n&&e.concat(this.expand(t+n,e))},this),e},t.TokenStore.prototype.toJSON=function(){return{root:this.root,length:this.length}},function(t,e){\"function\"==typeof define&&define.amd?define(e):\"object\"==typeof exports?module.exports=e():t.lunr=e()}(this,function(){return t})}();\n\n$(document).ready(function () {\n\n  var searchInput = $('#search-input');\n\n  var searchResultsDiv = $('#search-results');\n\n  setTimeout(function(){\n    // check if there if there is recent search data in local storage\n    try {\n      var localData = JSON.parse(localStorage.getItem('v2search-index'));\n      if(localData && (localData.ts + 86400000) > Date.now()) {\n        searchReady(localData);\n        return;\n      }\n    } catch(e){}\n\n    $.getJSON('/docs/data/index.json', function (requestData) {\n      searchReady(requestData);\n      setTimeout(function(){\n        try{\n          requestData.ts = Date.now();\n          localStorage.setItem('v2search-index', JSON.stringify(requestData))\n        }catch(e){}\n      }, 100);\n    });\n\n  }, 5);\n\n  var debounce = function (fn) {\n    var timeout;\n    return function () {\n      var args = Array.prototype.slice.call(arguments),\n          ctx = this;\n\n      clearTimeout(timeout);\n      timeout = setTimeout(function () {\n        fn.apply(ctx, args);\n      }, 50);\n    }\n  }\n\n  function searchReady(data) {\n    if(!searchInput.length || $(window).width() < 768) return;\n\n    var idx = lunr.Index.load(data.index);\n\n    searchInput.closest('.search-bar').css({visibility: 'visible'});\n\n    searchInput.on('keyup', debounce(function () {\n      var query = $(this).val();\n\n      if (!query || query.length < 2 || query == 'Search') {\n        hideResults();\n        return;\n      }\n\n      var\n      results = {\n        api: {},\n        css: {},\n        content: {}\n      },\n      queryResult,\n      queryResultId,\n      queryData,\n      queryResults = idx.search(query);\n\n      for(queryResultId in queryResults) {\n        queryResult = queryResults[queryResultId];\n        queryData = data.ref[ queryResult.ref ];\n\n        if(queryData.l == 'v2/docs_api') {\n          results.api[ queryResult.ref ] = queryData;\n        } else {\n          results.content[ queryResult.ref ] = queryData;\n        }\n      }\n\n      showResults(results);\n    }));\n\n  }\n\n  function showResults(resultsData) {\n    addResults('#results-api', resultsData.api, 42);\n    addResults('#results-css', resultsData.css, 14);\n    addResults('#results-content', resultsData.content, 14);\n\n    clearTimeout(removeOverlay);\n    searchResultsDiv.show();\n\n    if( !$('#search-overlay').length ) {\n      $(document.body).append('<div id=\"search-overlay\"></div>');\n    }\n\n    setTimeout(function(){\n      $(document.body).addClass('search-open');\n    }, 16);\n  }\n\n  function addResults(sectionId, data, limit) {\n    var links = '';\n    var section = searchResultsDiv.find(sectionId);\n    var total = 0;\n\n    for(var i in data) {\n      links += '<li><a href=\"' + data[i].p + '\">' + data[i].t + '</a></li>';\n      total++;\n      if(total >= limit) break;\n    }\n\n    section.html(links);\n  }\n\n  var removeOverlay;\n  function hideResults(){\n    $(document.body).removeClass('search-open');\n    removeOverlay=setTimeout(function(){\n      $('#search-overlay').remove();\n      searchResultsDiv.hide();\n    }, 200);\n  }\n\n  $(document).keyup(function(e) {\n    if(e.keyCode == 27) {\n      searchInput.val('');\n      hideResults();\n    }\n  });\n\n  searchInput.focus(function(){\n    if( $(this).val() == 'Search' ) {\n      $(this).val('');\n    }\n    $(this).closest('.search-bar').addClass('active');\n  });\n\n  searchInput.blur(function(){\n    $(this).val('Search');\n    $(this).closest('.search-bar').removeClass('active');\n    setTimeout(function(){\n      hideResults();\n    }, 200);\n  });  \n});\n"
  },
  {
    "path": "content/manifest.json",
    "content": "{\n\t\"name\": \"Ionic Cloud\",\n\t\"icons\": [\n\t\t{\n\t\t\t\"src\": \"\\/img\\/meta\\/android-chrome-36x36.png\",\n\t\t\t\"sizes\": \"36x36\",\n\t\t\t\"type\": \"image\\/png\",\n\t\t\t\"density\": 0.75\n\t\t},\n\t\t{\n\t\t\t\"src\": \"\\/img\\/meta\\/android-chrome-48x48.png\",\n\t\t\t\"sizes\": \"48x48\",\n\t\t\t\"type\": \"image\\/png\",\n\t\t\t\"density\": 1\n\t\t},\n\t\t{\n\t\t\t\"src\": \"\\/img\\/meta\\/android-chrome-72x72.png\",\n\t\t\t\"sizes\": \"72x72\",\n\t\t\t\"type\": \"image\\/png\",\n\t\t\t\"density\": 1.5\n\t\t},\n\t\t{\n\t\t\t\"src\": \"\\/img\\/meta\\/android-chrome-96x96.png\",\n\t\t\t\"sizes\": \"96x96\",\n\t\t\t\"type\": \"image\\/png\",\n\t\t\t\"density\": 2\n\t\t},\n\t\t{\n\t\t\t\"src\": \"\\/img\\/meta\\/android-chrome-144x144.png\",\n\t\t\t\"sizes\": \"144x144\",\n\t\t\t\"type\": \"image\\/png\",\n\t\t\t\"density\": 3\n\t\t},\n\t\t{\n\t\t\t\"src\": \"\\/img\\/meta\\/android-chrome-192x192.png\",\n\t\t\t\"sizes\": \"192x192\",\n\t\t\t\"type\": \"image\\/png\",\n\t\t\t\"density\": 4\n\t\t}\n\t]\n}\n"
  },
  {
    "path": "content/present-ionic/animate.css",
    "content": "@charset \"UTF-8\";\n\n\n/*!\nAnimate.css - http://daneden.me/animate\nLicensed under the MIT license\n\nCopyright (c) 2013 Daniel Eden\n\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:\n\nThe above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\n\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*/\n\n.animated {\n  -webkit-animation-duration: 1s;\n  animation-duration: 1s;\n  -webkit-animation-fill-mode: both;\n  animation-fill-mode: both;\n}\n\n.animated.hinge {\n  -webkit-animation-duration: 2s;\n  animation-duration: 2s;\n}\n\n@-webkit-keyframes bounce {\n  0%, 20%, 50%, 80%, 100% {\n    -webkit-transform: translateY(0);\n    transform: translateY(0);\n  }\n\n  40% {\n    -webkit-transform: translateY(-30px);\n    transform: translateY(-30px);\n  }\n\n  60% {\n    -webkit-transform: translateY(-15px);\n    transform: translateY(-15px);\n  }\n}\n\n@keyframes bounce {\n  0%, 20%, 50%, 80%, 100% {\n    -webkit-transform: translateY(0);\n    -ms-transform: translateY(0);\n    transform: translateY(0);\n  }\n\n  40% {\n    -webkit-transform: translateY(-30px);\n    -ms-transform: translateY(-30px);\n    transform: translateY(-30px);\n  }\n\n  60% {\n    -webkit-transform: translateY(-15px);\n    -ms-transform: translateY(-15px);\n    transform: translateY(-15px);\n  }\n}\n\n.bounce {\n  -webkit-animation-name: bounce;\n  animation-name: bounce;\n}\n\n@-webkit-keyframes flash {\n  0%, 50%, 100% {\n    opacity: 1;\n  }\n\n  25%, 75% {\n    opacity: 0;\n  }\n}\n\n@keyframes flash {\n  0%, 50%, 100% {\n    opacity: 1;\n  }\n\n  25%, 75% {\n    opacity: 0;\n  }\n}\n\n.flash {\n  -webkit-animation-name: flash;\n  animation-name: flash;\n}\n\n/* originally authored by Nick Pettit - https://github.com/nickpettit/glide */\n\n@-webkit-keyframes pulse {\n  0% {\n    -webkit-transform: scale(1);\n    transform: scale(1);\n  }\n\n  50% {\n    -webkit-transform: scale(1.1);\n    transform: scale(1.1);\n  }\n\n  100% {\n    -webkit-transform: scale(1);\n    transform: scale(1);\n  }\n}\n\n@keyframes pulse {\n  0% {\n    -webkit-transform: scale(1);\n    -ms-transform: scale(1);\n    transform: scale(1);\n  }\n\n  50% {\n    -webkit-transform: scale(1.1);\n    -ms-transform: scale(1.1);\n    transform: scale(1.1);\n  }\n\n  100% {\n    -webkit-transform: scale(1);\n    -ms-transform: scale(1);\n    transform: scale(1);\n  }\n}\n\n.pulse {\n  -webkit-animation-name: pulse;\n  animation-name: pulse;\n}\n\n@-webkit-keyframes shake {\n  0%, 100% {\n    -webkit-transform: translateX(0);\n    transform: translateX(0);\n  }\n\n  10%, 30%, 50%, 70%, 90% {\n    -webkit-transform: translateX(-10px);\n    transform: translateX(-10px);\n  }\n\n  20%, 40%, 60%, 80% {\n    -webkit-transform: translateX(10px);\n    transform: translateX(10px);\n  }\n}\n\n@keyframes shake {\n  0%, 100% {\n    -webkit-transform: translateX(0);\n    -ms-transform: translateX(0);\n    transform: translateX(0);\n  }\n\n  10%, 30%, 50%, 70%, 90% {\n    -webkit-transform: translateX(-10px);\n    -ms-transform: translateX(-10px);\n    transform: translateX(-10px);\n  }\n\n  20%, 40%, 60%, 80% {\n    -webkit-transform: translateX(10px);\n    -ms-transform: translateX(10px);\n    transform: translateX(10px);\n  }\n}\n\n.shake {\n  -webkit-animation-name: shake;\n  animation-name: shake;\n}\n\n@-webkit-keyframes swing {\n  20% {\n    -webkit-transform: rotate(15deg);\n    transform: rotate(15deg);\n  }\n\n  40% {\n    -webkit-transform: rotate(-10deg);\n    transform: rotate(-10deg);\n  }\n\n  60% {\n    -webkit-transform: rotate(5deg);\n    transform: rotate(5deg);\n  }\n\n  80% {\n    -webkit-transform: rotate(-5deg);\n    transform: rotate(-5deg);\n  }\n\n  100% {\n    -webkit-transform: rotate(0deg);\n    transform: rotate(0deg);\n  }\n}\n\n@keyframes swing {\n  20% {\n    -webkit-transform: rotate(15deg);\n    -ms-transform: rotate(15deg);\n    transform: rotate(15deg);\n  }\n\n  40% {\n    -webkit-transform: rotate(-10deg);\n    -ms-transform: rotate(-10deg);\n    transform: rotate(-10deg);\n  }\n\n  60% {\n    -webkit-transform: rotate(5deg);\n    -ms-transform: rotate(5deg);\n    transform: rotate(5deg);\n  }\n\n  80% {\n    -webkit-transform: rotate(-5deg);\n    -ms-transform: rotate(-5deg);\n    transform: rotate(-5deg);\n  }\n\n  100% {\n    -webkit-transform: rotate(0deg);\n    -ms-transform: rotate(0deg);\n    transform: rotate(0deg);\n  }\n}\n\n.swing {\n  -webkit-transform-origin: top center;\n  -ms-transform-origin: top center;\n  transform-origin: top center;\n  -webkit-animation-name: swing;\n  animation-name: swing;\n}\n\n@-webkit-keyframes tada {\n  0% {\n    -webkit-transform: scale(1);\n    transform: scale(1);\n  }\n\n  10%, 20% {\n    -webkit-transform: scale(0.9) rotate(-3deg);\n    transform: scale(0.9) rotate(-3deg);\n  }\n\n  30%, 50%, 70%, 90% {\n    -webkit-transform: scale(1.1) rotate(3deg);\n    transform: scale(1.1) rotate(3deg);\n  }\n\n  40%, 60%, 80% {\n    -webkit-transform: scale(1.1) rotate(-3deg);\n    transform: scale(1.1) rotate(-3deg);\n  }\n\n  100% {\n    -webkit-transform: scale(1) rotate(0);\n    transform: scale(1) rotate(0);\n  }\n}\n\n@keyframes tada {\n  0% {\n    -webkit-transform: scale(1);\n    -ms-transform: scale(1);\n    transform: scale(1);\n  }\n\n  10%, 20% {\n    -webkit-transform: scale(0.9) rotate(-3deg);\n    -ms-transform: scale(0.9) rotate(-3deg);\n    transform: scale(0.9) rotate(-3deg);\n  }\n\n  30%, 50%, 70%, 90% {\n    -webkit-transform: scale(1.1) rotate(3deg);\n    -ms-transform: scale(1.1) rotate(3deg);\n    transform: scale(1.1) rotate(3deg);\n  }\n\n  40%, 60%, 80% {\n    -webkit-transform: scale(1.1) rotate(-3deg);\n    -ms-transform: scale(1.1) rotate(-3deg);\n    transform: scale(1.1) rotate(-3deg);\n  }\n\n  100% {\n    -webkit-transform: scale(1) rotate(0);\n    -ms-transform: scale(1) rotate(0);\n    transform: scale(1) rotate(0);\n  }\n}\n\n.tada {\n  -webkit-animation-name: tada;\n  animation-name: tada;\n}\n\n/* originally authored by Nick Pettit - https://github.com/nickpettit/glide */\n\n@-webkit-keyframes wobble {\n  0% {\n    -webkit-transform: translateX(0%);\n    transform: translateX(0%);\n  }\n\n  15% {\n    -webkit-transform: translateX(-25%) rotate(-5deg);\n    transform: translateX(-25%) rotate(-5deg);\n  }\n\n  30% {\n    -webkit-transform: translateX(20%) rotate(3deg);\n    transform: translateX(20%) rotate(3deg);\n  }\n\n  45% {\n    -webkit-transform: translateX(-15%) rotate(-3deg);\n    transform: translateX(-15%) rotate(-3deg);\n  }\n\n  60% {\n    -webkit-transform: translateX(10%) rotate(2deg);\n    transform: translateX(10%) rotate(2deg);\n  }\n\n  75% {\n    -webkit-transform: translateX(-5%) rotate(-1deg);\n    transform: translateX(-5%) rotate(-1deg);\n  }\n\n  100% {\n    -webkit-transform: translateX(0%);\n    transform: translateX(0%);\n  }\n}\n\n@keyframes wobble {\n  0% {\n    -webkit-transform: translateX(0%);\n    -ms-transform: translateX(0%);\n    transform: translateX(0%);\n  }\n\n  15% {\n    -webkit-transform: translateX(-25%) rotate(-5deg);\n    -ms-transform: translateX(-25%) rotate(-5deg);\n    transform: translateX(-25%) rotate(-5deg);\n  }\n\n  30% {\n    -webkit-transform: translateX(20%) rotate(3deg);\n    -ms-transform: translateX(20%) rotate(3deg);\n    transform: translateX(20%) rotate(3deg);\n  }\n\n  45% {\n    -webkit-transform: translateX(-15%) rotate(-3deg);\n    -ms-transform: translateX(-15%) rotate(-3deg);\n    transform: translateX(-15%) rotate(-3deg);\n  }\n\n  60% {\n    -webkit-transform: translateX(10%) rotate(2deg);\n    -ms-transform: translateX(10%) rotate(2deg);\n    transform: translateX(10%) rotate(2deg);\n  }\n\n  75% {\n    -webkit-transform: translateX(-5%) rotate(-1deg);\n    -ms-transform: translateX(-5%) rotate(-1deg);\n    transform: translateX(-5%) rotate(-1deg);\n  }\n\n  100% {\n    -webkit-transform: translateX(0%);\n    -ms-transform: translateX(0%);\n    transform: translateX(0%);\n  }\n}\n\n.wobble {\n  -webkit-animation-name: wobble;\n  animation-name: wobble;\n}\n\n@-webkit-keyframes bounceIn {\n  0% {\n    opacity: 0;\n    -webkit-transform: scale(.3);\n    transform: scale(.3);\n  }\n\n  50% {\n    opacity: 1;\n    -webkit-transform: scale(1.05);\n    transform: scale(1.05);\n  }\n\n  70% {\n    -webkit-transform: scale(.9);\n    transform: scale(.9);\n  }\n\n  100% {\n    -webkit-transform: scale(1);\n    transform: scale(1);\n  }\n}\n\n@keyframes bounceIn {\n  0% {\n    opacity: 0;\n    -webkit-transform: scale(.3);\n    -ms-transform: scale(.3);\n    transform: scale(.3);\n  }\n\n  50% {\n    opacity: 1;\n    -webkit-transform: scale(1.05);\n    -ms-transform: scale(1.05);\n    transform: scale(1.05);\n  }\n\n  70% {\n    -webkit-transform: scale(.9);\n    -ms-transform: scale(.9);\n    transform: scale(.9);\n  }\n\n  100% {\n    -webkit-transform: scale(1);\n    -ms-transform: scale(1);\n    transform: scale(1);\n  }\n}\n\n.bounceIn {\n  -webkit-animation-name: bounceIn;\n  animation-name: bounceIn;\n}\n\n@-webkit-keyframes bounceInDown {\n  0% {\n    opacity: 0;\n    -webkit-transform: translateY(-2000px);\n    transform: translateY(-2000px);\n  }\n\n  60% {\n    opacity: 1;\n    -webkit-transform: translateY(30px);\n    transform: translateY(30px);\n  }\n\n  80% {\n    -webkit-transform: translateY(-10px);\n    transform: translateY(-10px);\n  }\n\n  100% {\n    -webkit-transform: translateY(0);\n    transform: translateY(0);\n  }\n}\n\n@keyframes bounceInDown {\n  0% {\n    opacity: 0;\n    -webkit-transform: translateY(-2000px);\n    -ms-transform: translateY(-2000px);\n    transform: translateY(-2000px);\n  }\n\n  60% {\n    opacity: 1;\n    -webkit-transform: translateY(30px);\n    -ms-transform: translateY(30px);\n    transform: translateY(30px);\n  }\n\n  80% {\n    -webkit-transform: translateY(-10px);\n    -ms-transform: translateY(-10px);\n    transform: translateY(-10px);\n  }\n\n  100% {\n    -webkit-transform: translateY(0);\n    -ms-transform: translateY(0);\n    transform: translateY(0);\n  }\n}\n\n.bounceInDown {\n  -webkit-animation-name: bounceInDown;\n  animation-name: bounceInDown;\n}\n\n@-webkit-keyframes bounceInLeft {\n  0% {\n    opacity: 0;\n    -webkit-transform: translateX(-2000px);\n    transform: translateX(-2000px);\n  }\n\n  60% {\n    opacity: 1;\n    -webkit-transform: translateX(30px);\n    transform: translateX(30px);\n  }\n\n  80% {\n    -webkit-transform: translateX(-10px);\n    transform: translateX(-10px);\n  }\n\n  100% {\n    -webkit-transform: translateX(0);\n    transform: translateX(0);\n  }\n}\n\n@keyframes bounceInLeft {\n  0% {\n    opacity: 0;\n    -webkit-transform: translateX(-2000px);\n    -ms-transform: translateX(-2000px);\n    transform: translateX(-2000px);\n  }\n\n  60% {\n    opacity: 1;\n    -webkit-transform: translateX(30px);\n    -ms-transform: translateX(30px);\n    transform: translateX(30px);\n  }\n\n  80% {\n    -webkit-transform: translateX(-10px);\n    -ms-transform: translateX(-10px);\n    transform: translateX(-10px);\n  }\n\n  100% {\n    -webkit-transform: translateX(0);\n    -ms-transform: translateX(0);\n    transform: translateX(0);\n  }\n}\n\n.bounceInLeft {\n  -webkit-animation-name: bounceInLeft;\n  animation-name: bounceInLeft;\n}\n\n@-webkit-keyframes bounceInRight {\n  0% {\n    opacity: 0;\n    -webkit-transform: translateX(2000px);\n    transform: translateX(2000px);\n  }\n\n  60% {\n    opacity: 1;\n    -webkit-transform: translateX(-30px);\n    transform: translateX(-30px);\n  }\n\n  80% {\n    -webkit-transform: translateX(10px);\n    transform: translateX(10px);\n  }\n\n  100% {\n    -webkit-transform: translateX(0);\n    transform: translateX(0);\n  }\n}\n\n@keyframes bounceInRight {\n  0% {\n    opacity: 0;\n    -webkit-transform: translateX(2000px);\n    -ms-transform: translateX(2000px);\n    transform: translateX(2000px);\n  }\n\n  60% {\n    opacity: 1;\n    -webkit-transform: translateX(-30px);\n    -ms-transform: translateX(-30px);\n    transform: translateX(-30px);\n  }\n\n  80% {\n    -webkit-transform: translateX(10px);\n    -ms-transform: translateX(10px);\n    transform: translateX(10px);\n  }\n\n  100% {\n    -webkit-transform: translateX(0);\n    -ms-transform: translateX(0);\n    transform: translateX(0);\n  }\n}\n\n.bounceInRight {\n  -webkit-animation-name: bounceInRight;\n  animation-name: bounceInRight;\n}\n\n@-webkit-keyframes bounceInUp {\n  0% {\n    opacity: 0;\n    -webkit-transform: translateY(2000px);\n    transform: translateY(2000px);\n  }\n\n  60% {\n    opacity: 1;\n    -webkit-transform: translateY(-30px);\n    transform: translateY(-30px);\n  }\n\n  80% {\n    -webkit-transform: translateY(10px);\n    transform: translateY(10px);\n  }\n\n  100% {\n    -webkit-transform: translateY(0);\n    transform: translateY(0);\n  }\n}\n\n@keyframes bounceInUp {\n  0% {\n    opacity: 0;\n    -webkit-transform: translateY(2000px);\n    -ms-transform: translateY(2000px);\n    transform: translateY(2000px);\n  }\n\n  60% {\n    opacity: 1;\n    -webkit-transform: translateY(-30px);\n    -ms-transform: translateY(-30px);\n    transform: translateY(-30px);\n  }\n\n  80% {\n    -webkit-transform: translateY(10px);\n    -ms-transform: translateY(10px);\n    transform: translateY(10px);\n  }\n\n  100% {\n    -webkit-transform: translateY(0);\n    -ms-transform: translateY(0);\n    transform: translateY(0);\n  }\n}\n\n.bounceInUp {\n  -webkit-animation-name: bounceInUp;\n  animation-name: bounceInUp;\n}\n\n@-webkit-keyframes bounceOut {\n  0% {\n    -webkit-transform: scale(1);\n    transform: scale(1);\n  }\n\n  25% {\n    -webkit-transform: scale(.95);\n    transform: scale(.95);\n  }\n\n  50% {\n    opacity: 1;\n    -webkit-transform: scale(1.1);\n    transform: scale(1.1);\n  }\n\n  100% {\n    opacity: 0;\n    -webkit-transform: scale(.3);\n    transform: scale(.3);\n  }\n}\n\n@keyframes bounceOut {\n  0% {\n    -webkit-transform: scale(1);\n    -ms-transform: scale(1);\n    transform: scale(1);\n  }\n\n  25% {\n    -webkit-transform: scale(.95);\n    -ms-transform: scale(.95);\n    transform: scale(.95);\n  }\n\n  50% {\n    opacity: 1;\n    -webkit-transform: scale(1.1);\n    -ms-transform: scale(1.1);\n    transform: scale(1.1);\n  }\n\n  100% {\n    opacity: 0;\n    -webkit-transform: scale(.3);\n    -ms-transform: scale(.3);\n    transform: scale(.3);\n  }\n}\n\n.bounceOut {\n  -webkit-animation-name: bounceOut;\n  animation-name: bounceOut;\n}\n\n@-webkit-keyframes bounceOutDown {\n  0% {\n    -webkit-transform: translateY(0);\n    transform: translateY(0);\n  }\n\n  20% {\n    opacity: 1;\n    -webkit-transform: translateY(-20px);\n    transform: translateY(-20px);\n  }\n\n  100% {\n    opacity: 0;\n    -webkit-transform: translateY(2000px);\n    transform: translateY(2000px);\n  }\n}\n\n@keyframes bounceOutDown {\n  0% {\n    -webkit-transform: translateY(0);\n    -ms-transform: translateY(0);\n    transform: translateY(0);\n  }\n\n  20% {\n    opacity: 1;\n    -webkit-transform: translateY(-20px);\n    -ms-transform: translateY(-20px);\n    transform: translateY(-20px);\n  }\n\n  100% {\n    opacity: 0;\n    -webkit-transform: translateY(2000px);\n    -ms-transform: translateY(2000px);\n    transform: translateY(2000px);\n  }\n}\n\n.bounceOutDown {\n  -webkit-animation-name: bounceOutDown;\n  animation-name: bounceOutDown;\n}\n\n@-webkit-keyframes bounceOutLeft {\n  0% {\n    -webkit-transform: translateX(0);\n    transform: translateX(0);\n  }\n\n  20% {\n    opacity: 1;\n    -webkit-transform: translateX(20px);\n    transform: translateX(20px);\n  }\n\n  100% {\n    opacity: 0;\n    -webkit-transform: translateX(-2000px);\n    transform: translateX(-2000px);\n  }\n}\n\n@keyframes bounceOutLeft {\n  0% {\n    -webkit-transform: translateX(0);\n    -ms-transform: translateX(0);\n    transform: translateX(0);\n  }\n\n  20% {\n    opacity: 1;\n    -webkit-transform: translateX(20px);\n    -ms-transform: translateX(20px);\n    transform: translateX(20px);\n  }\n\n  100% {\n    opacity: 0;\n    -webkit-transform: translateX(-2000px);\n    -ms-transform: translateX(-2000px);\n    transform: translateX(-2000px);\n  }\n}\n\n.bounceOutLeft {\n  -webkit-animation-name: bounceOutLeft;\n  animation-name: bounceOutLeft;\n}\n\n@-webkit-keyframes bounceOutRight {\n  0% {\n    -webkit-transform: translateX(0);\n    transform: translateX(0);\n  }\n\n  20% {\n    opacity: 1;\n    -webkit-transform: translateX(-20px);\n    transform: translateX(-20px);\n  }\n\n  100% {\n    opacity: 0;\n    -webkit-transform: translateX(2000px);\n    transform: translateX(2000px);\n  }\n}\n\n@keyframes bounceOutRight {\n  0% {\n    -webkit-transform: translateX(0);\n    -ms-transform: translateX(0);\n    transform: translateX(0);\n  }\n\n  20% {\n    opacity: 1;\n    -webkit-transform: translateX(-20px);\n    -ms-transform: translateX(-20px);\n    transform: translateX(-20px);\n  }\n\n  100% {\n    opacity: 0;\n    -webkit-transform: translateX(2000px);\n    -ms-transform: translateX(2000px);\n    transform: translateX(2000px);\n  }\n}\n\n.bounceOutRight {\n  -webkit-animation-name: bounceOutRight;\n  animation-name: bounceOutRight;\n}\n\n@-webkit-keyframes bounceOutUp {\n  0% {\n    -webkit-transform: translateY(0);\n    transform: translateY(0);\n  }\n\n  20% {\n    opacity: 1;\n    -webkit-transform: translateY(20px);\n    transform: translateY(20px);\n  }\n\n  100% {\n    opacity: 0;\n    -webkit-transform: translateY(-2000px);\n    transform: translateY(-2000px);\n  }\n}\n\n@keyframes bounceOutUp {\n  0% {\n    -webkit-transform: translateY(0);\n    -ms-transform: translateY(0);\n    transform: translateY(0);\n  }\n\n  20% {\n    opacity: 1;\n    -webkit-transform: translateY(20px);\n    -ms-transform: translateY(20px);\n    transform: translateY(20px);\n  }\n\n  100% {\n    opacity: 0;\n    -webkit-transform: translateY(-2000px);\n    -ms-transform: translateY(-2000px);\n    transform: translateY(-2000px);\n  }\n}\n\n.bounceOutUp {\n  -webkit-animation-name: bounceOutUp;\n  animation-name: bounceOutUp;\n}\n\n@-webkit-keyframes fadeIn {\n  0% {\n    opacity: 0;\n  }\n\n  100% {\n    opacity: 1;\n  }\n}\n\n@keyframes fadeIn {\n  0% {\n    opacity: 0;\n  }\n\n  100% {\n    opacity: 1;\n  }\n}\n\n.fadeIn {\n  -webkit-animation-name: fadeIn;\n  animation-name: fadeIn;\n}\n\n@-webkit-keyframes fadeInDown {\n  0% {\n    opacity: 0;\n    -webkit-transform: translateY(-20px);\n    transform: translateY(-20px);\n  }\n\n  100% {\n    opacity: 1;\n    -webkit-transform: translateY(0);\n    transform: translateY(0);\n  }\n}\n\n@keyframes fadeInDown {\n  0% {\n    opacity: 0;\n    -webkit-transform: translateY(-20px);\n    -ms-transform: translateY(-20px);\n    transform: translateY(-20px);\n  }\n\n  100% {\n    opacity: 1;\n    -webkit-transform: translateY(0);\n    -ms-transform: translateY(0);\n    transform: translateY(0);\n  }\n}\n\n.fadeInDown {\n  -webkit-animation-name: fadeInDown;\n  animation-name: fadeInDown;\n}\n\n@-webkit-keyframes fadeInDownBig {\n  0% {\n    opacity: 0;\n    -webkit-transform: translateY(-2000px);\n    transform: translateY(-2000px);\n  }\n\n  100% {\n    opacity: 1;\n    -webkit-transform: translateY(0);\n    transform: translateY(0);\n  }\n}\n\n@keyframes fadeInDownBig {\n  0% {\n    opacity: 0;\n    -webkit-transform: translateY(-2000px);\n    -ms-transform: translateY(-2000px);\n    transform: translateY(-2000px);\n  }\n\n  100% {\n    opacity: 1;\n    -webkit-transform: translateY(0);\n    -ms-transform: translateY(0);\n    transform: translateY(0);\n  }\n}\n\n.fadeInDownBig {\n  -webkit-animation-name: fadeInDownBig;\n  animation-name: fadeInDownBig;\n}\n\n@-webkit-keyframes fadeInLeft {\n  0% {\n    opacity: 0;\n    -webkit-transform: translateX(-20px);\n    transform: translateX(-20px);\n  }\n\n  100% {\n    opacity: 1;\n    -webkit-transform: translateX(0);\n    transform: translateX(0);\n  }\n}\n\n@keyframes fadeInLeft {\n  0% {\n    opacity: 0;\n    -webkit-transform: translateX(-20px);\n    -ms-transform: translateX(-20px);\n    transform: translateX(-20px);\n  }\n\n  100% {\n    opacity: 1;\n    -webkit-transform: translateX(0);\n    -ms-transform: translateX(0);\n    transform: translateX(0);\n  }\n}\n\n.fadeInLeft {\n  -webkit-animation-name: fadeInLeft;\n  animation-name: fadeInLeft;\n}\n\n@-webkit-keyframes fadeInLeftBig {\n  0% {\n    opacity: 0;\n    -webkit-transform: translateX(-2000px);\n    transform: translateX(-2000px);\n  }\n\n  100% {\n    opacity: 1;\n    -webkit-transform: translateX(0);\n    transform: translateX(0);\n  }\n}\n\n@keyframes fadeInLeftBig {\n  0% {\n    opacity: 0;\n    -webkit-transform: translateX(-2000px);\n    -ms-transform: translateX(-2000px);\n    transform: translateX(-2000px);\n  }\n\n  100% {\n    opacity: 1;\n    -webkit-transform: translateX(0);\n    -ms-transform: translateX(0);\n    transform: translateX(0);\n  }\n}\n\n.fadeInLeftBig {\n  -webkit-animation-name: fadeInLeftBig;\n  animation-name: fadeInLeftBig;\n}\n\n@-webkit-keyframes fadeInRight {\n  0% {\n    opacity: 0;\n    -webkit-transform: translateX(20px);\n    transform: translateX(20px);\n  }\n\n  100% {\n    opacity: 1;\n    -webkit-transform: translateX(0);\n    transform: translateX(0);\n  }\n}\n\n@keyframes fadeInRight {\n  0% {\n    opacity: 0;\n    -webkit-transform: translateX(20px);\n    -ms-transform: translateX(20px);\n    transform: translateX(20px);\n  }\n\n  100% {\n    opacity: 1;\n    -webkit-transform: translateX(0);\n    -ms-transform: translateX(0);\n    transform: translateX(0);\n  }\n}\n\n.fadeInRight {\n  -webkit-animation-name: fadeInRight;\n  animation-name: fadeInRight;\n}\n\n@-webkit-keyframes fadeInRightBig {\n  0% {\n    opacity: 0;\n    -webkit-transform: translateX(2000px);\n    transform: translateX(2000px);\n  }\n\n  100% {\n    opacity: 1;\n    -webkit-transform: translateX(0);\n    transform: translateX(0);\n  }\n}\n\n@keyframes fadeInRightBig {\n  0% {\n    opacity: 0;\n    -webkit-transform: translateX(2000px);\n    -ms-transform: translateX(2000px);\n    transform: translateX(2000px);\n  }\n\n  100% {\n    opacity: 1;\n    -webkit-transform: translateX(0);\n    -ms-transform: translateX(0);\n    transform: translateX(0);\n  }\n}\n\n.fadeInRightBig {\n  -webkit-animation-name: fadeInRightBig;\n  animation-name: fadeInRightBig;\n}\n\n@-webkit-keyframes fadeInUp {\n  0% {\n    opacity: 0;\n    -webkit-transform: translateY(20px);\n    transform: translateY(20px);\n  }\n\n  100% {\n    opacity: 1;\n    -webkit-transform: translateY(0);\n    transform: translateY(0);\n  }\n}\n\n@keyframes fadeInUp {\n  0% {\n    opacity: 0;\n    -webkit-transform: translateY(20px);\n    -ms-transform: translateY(20px);\n    transform: translateY(20px);\n  }\n\n  100% {\n    opacity: 1;\n    -webkit-transform: translateY(0);\n    -ms-transform: translateY(0);\n    transform: translateY(0);\n  }\n}\n\n.fadeInUp {\n  -webkit-animation-name: fadeInUp;\n  animation-name: fadeInUp;\n}\n\n@-webkit-keyframes fadeInUpBig {\n  0% {\n    opacity: 0;\n    -webkit-transform: translateY(2000px);\n    transform: translateY(2000px);\n  }\n\n  100% {\n    opacity: 1;\n    -webkit-transform: translateY(0);\n    transform: translateY(0);\n  }\n}\n\n@keyframes fadeInUpBig {\n  0% {\n    opacity: 0;\n    -webkit-transform: translateY(2000px);\n    -ms-transform: translateY(2000px);\n    transform: translateY(2000px);\n  }\n\n  100% {\n    opacity: 1;\n    -webkit-transform: translateY(0);\n    -ms-transform: translateY(0);\n    transform: translateY(0);\n  }\n}\n\n.fadeInUpBig {\n  -webkit-animation-name: fadeInUpBig;\n  animation-name: fadeInUpBig;\n}\n\n@-webkit-keyframes fadeOut {\n  0% {\n    opacity: 1;\n  }\n\n  100% {\n    opacity: 0;\n  }\n}\n\n@keyframes fadeOut {\n  0% {\n    opacity: 1;\n  }\n\n  100% {\n    opacity: 0;\n  }\n}\n\n.fadeOut {\n  -webkit-animation-name: fadeOut;\n  animation-name: fadeOut;\n}\n\n@-webkit-keyframes fadeOutDown {\n  0% {\n    opacity: 1;\n    -webkit-transform: translateY(0);\n    transform: translateY(0);\n  }\n\n  100% {\n    opacity: 0;\n    -webkit-transform: translateY(20px);\n    transform: translateY(20px);\n  }\n}\n\n@keyframes fadeOutDown {\n  0% {\n    opacity: 1;\n    -webkit-transform: translateY(0);\n    -ms-transform: translateY(0);\n    transform: translateY(0);\n  }\n\n  100% {\n    opacity: 0;\n    -webkit-transform: translateY(20px);\n    -ms-transform: translateY(20px);\n    transform: translateY(20px);\n  }\n}\n\n.fadeOutDown {\n  -webkit-animation-name: fadeOutDown;\n  animation-name: fadeOutDown;\n}\n\n@-webkit-keyframes fadeOutDownBig {\n  0% {\n    opacity: 1;\n    -webkit-transform: translateY(0);\n    transform: translateY(0);\n  }\n\n  100% {\n    opacity: 0;\n    -webkit-transform: translateY(2000px);\n    transform: translateY(2000px);\n  }\n}\n\n@keyframes fadeOutDownBig {\n  0% {\n    opacity: 1;\n    -webkit-transform: translateY(0);\n    -ms-transform: translateY(0);\n    transform: translateY(0);\n  }\n\n  100% {\n    opacity: 0;\n    -webkit-transform: translateY(2000px);\n    -ms-transform: translateY(2000px);\n    transform: translateY(2000px);\n  }\n}\n\n.fadeOutDownBig {\n  -webkit-animation-name: fadeOutDownBig;\n  animation-name: fadeOutDownBig;\n}\n\n@-webkit-keyframes fadeOutLeft {\n  0% {\n    opacity: 1;\n    -webkit-transform: translateX(0);\n    transform: translateX(0);\n  }\n\n  100% {\n    opacity: 0;\n    -webkit-transform: translateX(-20px);\n    transform: translateX(-20px);\n  }\n}\n\n@keyframes fadeOutLeft {\n  0% {\n    opacity: 1;\n    -webkit-transform: translateX(0);\n    -ms-transform: translateX(0);\n    transform: translateX(0);\n  }\n\n  100% {\n    opacity: 0;\n    -webkit-transform: translateX(-20px);\n    -ms-transform: translateX(-20px);\n    transform: translateX(-20px);\n  }\n}\n\n.fadeOutLeft {\n  -webkit-animation-name: fadeOutLeft;\n  animation-name: fadeOutLeft;\n}\n\n@-webkit-keyframes fadeOutLeftBig {\n  0% {\n    opacity: 1;\n    -webkit-transform: translateX(0);\n    transform: translateX(0);\n  }\n\n  100% {\n    opacity: 0;\n    -webkit-transform: translateX(-2000px);\n    transform: translateX(-2000px);\n  }\n}\n\n@keyframes fadeOutLeftBig {\n  0% {\n    opacity: 1;\n    -webkit-transform: translateX(0);\n    -ms-transform: translateX(0);\n    transform: translateX(0);\n  }\n\n  100% {\n    opacity: 0;\n    -webkit-transform: translateX(-2000px);\n    -ms-transform: translateX(-2000px);\n    transform: translateX(-2000px);\n  }\n}\n\n.fadeOutLeftBig {\n  -webkit-animation-name: fadeOutLeftBig;\n  animation-name: fadeOutLeftBig;\n}\n\n@-webkit-keyframes fadeOutRight {\n  0% {\n    opacity: 1;\n    -webkit-transform: translateX(0);\n    transform: translateX(0);\n  }\n\n  100% {\n    opacity: 0;\n    -webkit-transform: translateX(20px);\n    transform: translateX(20px);\n  }\n}\n\n@keyframes fadeOutRight {\n  0% {\n    opacity: 1;\n    -webkit-transform: translateX(0);\n    -ms-transform: translateX(0);\n    transform: translateX(0);\n  }\n\n  100% {\n    opacity: 0;\n    -webkit-transform: translateX(20px);\n    -ms-transform: translateX(20px);\n    transform: translateX(20px);\n  }\n}\n\n.fadeOutRight {\n  -webkit-animation-name: fadeOutRight;\n  animation-name: fadeOutRight;\n}\n\n@-webkit-keyframes fadeOutRightBig {\n  0% {\n    opacity: 1;\n    -webkit-transform: translateX(0);\n    transform: translateX(0);\n  }\n\n  100% {\n    opacity: 0;\n    -webkit-transform: translateX(2000px);\n    transform: translateX(2000px);\n  }\n}\n\n@keyframes fadeOutRightBig {\n  0% {\n    opacity: 1;\n    -webkit-transform: translateX(0);\n    -ms-transform: translateX(0);\n    transform: translateX(0);\n  }\n\n  100% {\n    opacity: 0;\n    -webkit-transform: translateX(2000px);\n    -ms-transform: translateX(2000px);\n    transform: translateX(2000px);\n  }\n}\n\n.fadeOutRightBig {\n  -webkit-animation-name: fadeOutRightBig;\n  animation-name: fadeOutRightBig;\n}\n\n@-webkit-keyframes fadeOutUp {\n  0% {\n    opacity: 1;\n    -webkit-transform: translateY(0);\n    transform: translateY(0);\n  }\n\n  100% {\n    opacity: 0;\n    -webkit-transform: translateY(-20px);\n    transform: translateY(-20px);\n  }\n}\n\n@keyframes fadeOutUp {\n  0% {\n    opacity: 1;\n    -webkit-transform: translateY(0);\n    -ms-transform: translateY(0);\n    transform: translateY(0);\n  }\n\n  100% {\n    opacity: 0;\n    -webkit-transform: translateY(-20px);\n    -ms-transform: translateY(-20px);\n    transform: translateY(-20px);\n  }\n}\n\n.fadeOutUp {\n  -webkit-animation-name: fadeOutUp;\n  animation-name: fadeOutUp;\n}\n\n@-webkit-keyframes fadeOutUpBig {\n  0% {\n    opacity: 1;\n    -webkit-transform: translateY(0);\n    transform: translateY(0);\n  }\n\n  100% {\n    opacity: 0;\n    -webkit-transform: translateY(-2000px);\n    transform: translateY(-2000px);\n  }\n}\n\n@keyframes fadeOutUpBig {\n  0% {\n    opacity: 1;\n    -webkit-transform: translateY(0);\n    -ms-transform: translateY(0);\n    transform: translateY(0);\n  }\n\n  100% {\n    opacity: 0;\n    -webkit-transform: translateY(-2000px);\n    -ms-transform: translateY(-2000px);\n    transform: translateY(-2000px);\n  }\n}\n\n.fadeOutUpBig {\n  -webkit-animation-name: fadeOutUpBig;\n  animation-name: fadeOutUpBig;\n}\n\n@-webkit-keyframes flip {\n  0% {\n    -webkit-transform: perspective(400px) translateZ(0) rotateY(0) scale(1);\n    transform: perspective(400px) translateZ(0) rotateY(0) scale(1);\n    -webkit-animation-timing-function: ease-out;\n    animation-timing-function: ease-out;\n  }\n\n  40% {\n    -webkit-transform: perspective(400px) translateZ(150px) rotateY(170deg) scale(1);\n    transform: perspective(400px) translateZ(150px) rotateY(170deg) scale(1);\n    -webkit-animation-timing-function: ease-out;\n    animation-timing-function: ease-out;\n  }\n\n  50% {\n    -webkit-transform: perspective(400px) translateZ(150px) rotateY(190deg) scale(1);\n    transform: perspective(400px) translateZ(150px) rotateY(190deg) scale(1);\n    -webkit-animation-timing-function: ease-in;\n    animation-timing-function: ease-in;\n  }\n\n  80% {\n    -webkit-transform: perspective(400px) translateZ(0) rotateY(360deg) scale(.95);\n    transform: perspective(400px) translateZ(0) rotateY(360deg) scale(.95);\n    -webkit-animation-timing-function: ease-in;\n    animation-timing-function: ease-in;\n  }\n\n  100% {\n    -webkit-transform: perspective(400px) translateZ(0) rotateY(360deg) scale(1);\n    transform: perspective(400px) translateZ(0) rotateY(360deg) scale(1);\n    -webkit-animation-timing-function: ease-in;\n    animation-timing-function: ease-in;\n  }\n}\n\n@keyframes flip {\n  0% {\n    -webkit-transform: perspective(400px) translateZ(0) rotateY(0) scale(1);\n    -ms-transform: perspective(400px) translateZ(0) rotateY(0) scale(1);\n    transform: perspective(400px) translateZ(0) rotateY(0) scale(1);\n    -webkit-animation-timing-function: ease-out;\n    animation-timing-function: ease-out;\n  }\n\n  40% {\n    -webkit-transform: perspective(400px) translateZ(150px) rotateY(170deg) scale(1);\n    -ms-transform: perspective(400px) translateZ(150px) rotateY(170deg) scale(1);\n    transform: perspective(400px) translateZ(150px) rotateY(170deg) scale(1);\n    -webkit-animation-timing-function: ease-out;\n    animation-timing-function: ease-out;\n  }\n\n  50% {\n    -webkit-transform: perspective(400px) translateZ(150px) rotateY(190deg) scale(1);\n    -ms-transform: perspective(400px) translateZ(150px) rotateY(190deg) scale(1);\n    transform: perspective(400px) translateZ(150px) rotateY(190deg) scale(1);\n    -webkit-animation-timing-function: ease-in;\n    animation-timing-function: ease-in;\n  }\n\n  80% {\n    -webkit-transform: perspective(400px) translateZ(0) rotateY(360deg) scale(.95);\n    -ms-transform: perspective(400px) translateZ(0) rotateY(360deg) scale(.95);\n    transform: perspective(400px) translateZ(0) rotateY(360deg) scale(.95);\n    -webkit-animation-timing-function: ease-in;\n    animation-timing-function: ease-in;\n  }\n\n  100% {\n    -webkit-transform: perspective(400px) translateZ(0) rotateY(360deg) scale(1);\n    -ms-transform: perspective(400px) translateZ(0) rotateY(360deg) scale(1);\n    transform: perspective(400px) translateZ(0) rotateY(360deg) scale(1);\n    -webkit-animation-timing-function: ease-in;\n    animation-timing-function: ease-in;\n  }\n}\n\n.animated.flip {\n  -webkit-backface-visibility: visible;\n  -ms-backface-visibility: visible;\n  backface-visibility: visible;\n  -webkit-animation-name: flip;\n  animation-name: flip;\n}\n\n@-webkit-keyframes flipInX {\n  0% {\n    -webkit-transform: perspective(400px) rotateX(90deg);\n    transform: perspective(400px) rotateX(90deg);\n    opacity: 0;\n  }\n\n  40% {\n    -webkit-transform: perspective(400px) rotateX(-10deg);\n    transform: perspective(400px) rotateX(-10deg);\n  }\n\n  70% {\n    -webkit-transform: perspective(400px) rotateX(10deg);\n    transform: perspective(400px) rotateX(10deg);\n  }\n\n  100% {\n    -webkit-transform: perspective(400px) rotateX(0deg);\n    transform: perspective(400px) rotateX(0deg);\n    opacity: 1;\n  }\n}\n\n@keyframes flipInX {\n  0% {\n    -webkit-transform: perspective(400px) rotateX(90deg);\n    -ms-transform: perspective(400px) rotateX(90deg);\n    transform: perspective(400px) rotateX(90deg);\n    opacity: 0;\n  }\n\n  40% {\n    -webkit-transform: perspective(400px) rotateX(-10deg);\n    -ms-transform: perspective(400px) rotateX(-10deg);\n    transform: perspective(400px) rotateX(-10deg);\n  }\n\n  70% {\n    -webkit-transform: perspective(400px) rotateX(10deg);\n    -ms-transform: perspective(400px) rotateX(10deg);\n    transform: perspective(400px) rotateX(10deg);\n  }\n\n  100% {\n    -webkit-transform: perspective(400px) rotateX(0deg);\n    -ms-transform: perspective(400px) rotateX(0deg);\n    transform: perspective(400px) rotateX(0deg);\n    opacity: 1;\n  }\n}\n\n.flipInX {\n  -webkit-backface-visibility: visible !important;\n  -ms-backface-visibility: visible !important;\n  backface-visibility: visible !important;\n  -webkit-animation-name: flipInX;\n  animation-name: flipInX;\n}\n\n@-webkit-keyframes flipInY {\n  0% {\n    -webkit-transform: perspective(400px) rotateY(90deg);\n    transform: perspective(400px) rotateY(90deg);\n    opacity: 0;\n  }\n\n  40% {\n    -webkit-transform: perspective(400px) rotateY(-10deg);\n    transform: perspective(400px) rotateY(-10deg);\n  }\n\n  70% {\n    -webkit-transform: perspective(400px) rotateY(10deg);\n    transform: perspective(400px) rotateY(10deg);\n  }\n\n  100% {\n    -webkit-transform: perspective(400px) rotateY(0deg);\n    transform: perspective(400px) rotateY(0deg);\n    opacity: 1;\n  }\n}\n\n@keyframes flipInY {\n  0% {\n    -webkit-transform: perspective(400px) rotateY(90deg);\n    -ms-transform: perspective(400px) rotateY(90deg);\n    transform: perspective(400px) rotateY(90deg);\n    opacity: 0;\n  }\n\n  40% {\n    -webkit-transform: perspective(400px) rotateY(-10deg);\n    -ms-transform: perspective(400px) rotateY(-10deg);\n    transform: perspective(400px) rotateY(-10deg);\n  }\n\n  70% {\n    -webkit-transform: perspective(400px) rotateY(10deg);\n    -ms-transform: perspective(400px) rotateY(10deg);\n    transform: perspective(400px) rotateY(10deg);\n  }\n\n  100% {\n    -webkit-transform: perspective(400px) rotateY(0deg);\n    -ms-transform: perspective(400px) rotateY(0deg);\n    transform: perspective(400px) rotateY(0deg);\n    opacity: 1;\n  }\n}\n\n.flipInY {\n  -webkit-backface-visibility: visible !important;\n  -ms-backface-visibility: visible !important;\n  backface-visibility: visible !important;\n  -webkit-animation-name: flipInY;\n  animation-name: flipInY;\n}\n\n@-webkit-keyframes flipOutX {\n  0% {\n    -webkit-transform: perspective(400px) rotateX(0deg);\n    transform: perspective(400px) rotateX(0deg);\n    opacity: 1;\n  }\n\n  100% {\n    -webkit-transform: perspective(400px) rotateX(90deg);\n    transform: perspective(400px) rotateX(90deg);\n    opacity: 0;\n  }\n}\n\n@keyframes flipOutX {\n  0% {\n    -webkit-transform: perspective(400px) rotateX(0deg);\n    -ms-transform: perspective(400px) rotateX(0deg);\n    transform: perspective(400px) rotateX(0deg);\n    opacity: 1;\n  }\n\n  100% {\n    -webkit-transform: perspective(400px) rotateX(90deg);\n    -ms-transform: perspective(400px) rotateX(90deg);\n    transform: perspective(400px) rotateX(90deg);\n    opacity: 0;\n  }\n}\n\n.flipOutX {\n  -webkit-animation-name: flipOutX;\n  animation-name: flipOutX;\n  -webkit-backface-visibility: visible !important;\n  -ms-backface-visibility: visible !important;\n  backface-visibility: visible !important;\n}\n\n@-webkit-keyframes flipOutY {\n  0% {\n    -webkit-transform: perspective(400px) rotateY(0deg);\n    transform: perspective(400px) rotateY(0deg);\n    opacity: 1;\n  }\n\n  100% {\n    -webkit-transform: perspective(400px) rotateY(90deg);\n    transform: perspective(400px) rotateY(90deg);\n    opacity: 0;\n  }\n}\n\n@keyframes flipOutY {\n  0% {\n    -webkit-transform: perspective(400px) rotateY(0deg);\n    -ms-transform: perspective(400px) rotateY(0deg);\n    transform: perspective(400px) rotateY(0deg);\n    opacity: 1;\n  }\n\n  100% {\n    -webkit-transform: perspective(400px) rotateY(90deg);\n    -ms-transform: perspective(400px) rotateY(90deg);\n    transform: perspective(400px) rotateY(90deg);\n    opacity: 0;\n  }\n}\n\n.flipOutY {\n  -webkit-backface-visibility: visible !important;\n  -ms-backface-visibility: visible !important;\n  backface-visibility: visible !important;\n  -webkit-animation-name: flipOutY;\n  animation-name: flipOutY;\n}\n\n@-webkit-keyframes lightSpeedIn {\n  0% {\n    -webkit-transform: translateX(100%) skewX(-30deg);\n    transform: translateX(100%) skewX(-30deg);\n    opacity: 0;\n  }\n\n  60% {\n    -webkit-transform: translateX(-20%) skewX(30deg);\n    transform: translateX(-20%) skewX(30deg);\n    opacity: 1;\n  }\n\n  80% {\n    -webkit-transform: translateX(0%) skewX(-15deg);\n    transform: translateX(0%) skewX(-15deg);\n    opacity: 1;\n  }\n\n  100% {\n    -webkit-transform: translateX(0%) skewX(0deg);\n    transform: translateX(0%) skewX(0deg);\n    opacity: 1;\n  }\n}\n\n@keyframes lightSpeedIn {\n  0% {\n    -webkit-transform: translateX(100%) skewX(-30deg);\n    -ms-transform: translateX(100%) skewX(-30deg);\n    transform: translateX(100%) skewX(-30deg);\n    opacity: 0;\n  }\n\n  60% {\n    -webkit-transform: translateX(-20%) skewX(30deg);\n    -ms-transform: translateX(-20%) skewX(30deg);\n    transform: translateX(-20%) skewX(30deg);\n    opacity: 1;\n  }\n\n  80% {\n    -webkit-transform: translateX(0%) skewX(-15deg);\n    -ms-transform: translateX(0%) skewX(-15deg);\n    transform: translateX(0%) skewX(-15deg);\n    opacity: 1;\n  }\n\n  100% {\n    -webkit-transform: translateX(0%) skewX(0deg);\n    -ms-transform: translateX(0%) skewX(0deg);\n    transform: translateX(0%) skewX(0deg);\n    opacity: 1;\n  }\n}\n\n.lightSpeedIn {\n  -webkit-animation-name: lightSpeedIn;\n  animation-name: lightSpeedIn;\n  -webkit-animation-timing-function: ease-out;\n  animation-timing-function: ease-out;\n}\n\n@-webkit-keyframes lightSpeedOut {\n  0% {\n    -webkit-transform: translateX(0%) skewX(0deg);\n    transform: translateX(0%) skewX(0deg);\n    opacity: 1;\n  }\n\n  100% {\n    -webkit-transform: translateX(100%) skewX(-30deg);\n    transform: translateX(100%) skewX(-30deg);\n    opacity: 0;\n  }\n}\n\n@keyframes lightSpeedOut {\n  0% {\n    -webkit-transform: translateX(0%) skewX(0deg);\n    -ms-transform: translateX(0%) skewX(0deg);\n    transform: translateX(0%) skewX(0deg);\n    opacity: 1;\n  }\n\n  100% {\n    -webkit-transform: translateX(100%) skewX(-30deg);\n    -ms-transform: translateX(100%) skewX(-30deg);\n    transform: translateX(100%) skewX(-30deg);\n    opacity: 0;\n  }\n}\n\n.lightSpeedOut {\n  -webkit-animation-name: lightSpeedOut;\n  animation-name: lightSpeedOut;\n  -webkit-animation-timing-function: ease-in;\n  animation-timing-function: ease-in;\n}\n\n@-webkit-keyframes rotateIn {\n  0% {\n    -webkit-transform-origin: center center;\n    transform-origin: center center;\n    -webkit-transform: rotate(-200deg);\n    transform: rotate(-200deg);\n    opacity: 0;\n  }\n\n  100% {\n    -webkit-transform-origin: center center;\n    transform-origin: center center;\n    -webkit-transform: rotate(0);\n    transform: rotate(0);\n    opacity: 1;\n  }\n}\n\n@keyframes rotateIn {\n  0% {\n    -webkit-transform-origin: center center;\n    -ms-transform-origin: center center;\n    transform-origin: center center;\n    -webkit-transform: rotate(-200deg);\n    -ms-transform: rotate(-200deg);\n    transform: rotate(-200deg);\n    opacity: 0;\n  }\n\n  100% {\n    -webkit-transform-origin: center center;\n    -ms-transform-origin: center center;\n    transform-origin: center center;\n    -webkit-transform: rotate(0);\n    -ms-transform: rotate(0);\n    transform: rotate(0);\n    opacity: 1;\n  }\n}\n\n.rotateIn {\n  -webkit-animation-name: rotateIn;\n  animation-name: rotateIn;\n}\n\n@-webkit-keyframes rotateInDownLeft {\n  0% {\n    -webkit-transform-origin: left bottom;\n    transform-origin: left bottom;\n    -webkit-transform: rotate(-90deg);\n    transform: rotate(-90deg);\n    opacity: 0;\n  }\n\n  100% {\n    -webkit-transform-origin: left bottom;\n    transform-origin: left bottom;\n    -webkit-transform: rotate(0);\n    transform: rotate(0);\n    opacity: 1;\n  }\n}\n\n@keyframes rotateInDownLeft {\n  0% {\n    -webkit-transform-origin: left bottom;\n    -ms-transform-origin: left bottom;\n    transform-origin: left bottom;\n    -webkit-transform: rotate(-90deg);\n    -ms-transform: rotate(-90deg);\n    transform: rotate(-90deg);\n    opacity: 0;\n  }\n\n  100% {\n    -webkit-transform-origin: left bottom;\n    -ms-transform-origin: left bottom;\n    transform-origin: left bottom;\n    -webkit-transform: rotate(0);\n    -ms-transform: rotate(0);\n    transform: rotate(0);\n    opacity: 1;\n  }\n}\n\n.rotateInDownLeft {\n  -webkit-animation-name: rotateInDownLeft;\n  animation-name: rotateInDownLeft;\n}\n\n@-webkit-keyframes rotateInDownRight {\n  0% {\n    -webkit-transform-origin: right bottom;\n    transform-origin: right bottom;\n    -webkit-transform: rotate(90deg);\n    transform: rotate(90deg);\n    opacity: 0;\n  }\n\n  100% {\n    -webkit-transform-origin: right bottom;\n    transform-origin: right bottom;\n    -webkit-transform: rotate(0);\n    transform: rotate(0);\n    opacity: 1;\n  }\n}\n\n@keyframes rotateInDownRight {\n  0% {\n    -webkit-transform-origin: right bottom;\n    -ms-transform-origin: right bottom;\n    transform-origin: right bottom;\n    -webkit-transform: rotate(90deg);\n    -ms-transform: rotate(90deg);\n    transform: rotate(90deg);\n    opacity: 0;\n  }\n\n  100% {\n    -webkit-transform-origin: right bottom;\n    -ms-transform-origin: right bottom;\n    transform-origin: right bottom;\n    -webkit-transform: rotate(0);\n    -ms-transform: rotate(0);\n    transform: rotate(0);\n    opacity: 1;\n  }\n}\n\n.rotateInDownRight {\n  -webkit-animation-name: rotateInDownRight;\n  animation-name: rotateInDownRight;\n}\n\n@-webkit-keyframes rotateInUpLeft {\n  0% {\n    -webkit-transform-origin: left bottom;\n    transform-origin: left bottom;\n    -webkit-transform: rotate(90deg);\n    transform: rotate(90deg);\n    opacity: 0;\n  }\n\n  100% {\n    -webkit-transform-origin: left bottom;\n    transform-origin: left bottom;\n    -webkit-transform: rotate(0);\n    transform: rotate(0);\n    opacity: 1;\n  }\n}\n\n@keyframes rotateInUpLeft {\n  0% {\n    -webkit-transform-origin: left bottom;\n    -ms-transform-origin: left bottom;\n    transform-origin: left bottom;\n    -webkit-transform: rotate(90deg);\n    -ms-transform: rotate(90deg);\n    transform: rotate(90deg);\n    opacity: 0;\n  }\n\n  100% {\n    -webkit-transform-origin: left bottom;\n    -ms-transform-origin: left bottom;\n    transform-origin: left bottom;\n    -webkit-transform: rotate(0);\n    -ms-transform: rotate(0);\n    transform: rotate(0);\n    opacity: 1;\n  }\n}\n\n.rotateInUpLeft {\n  -webkit-animation-name: rotateInUpLeft;\n  animation-name: rotateInUpLeft;\n}\n\n@-webkit-keyframes rotateInUpRight {\n  0% {\n    -webkit-transform-origin: right bottom;\n    transform-origin: right bottom;\n    -webkit-transform: rotate(-90deg);\n    transform: rotate(-90deg);\n    opacity: 0;\n  }\n\n  100% {\n    -webkit-transform-origin: right bottom;\n    transform-origin: right bottom;\n    -webkit-transform: rotate(0);\n    transform: rotate(0);\n    opacity: 1;\n  }\n}\n\n@keyframes rotateInUpRight {\n  0% {\n    -webkit-transform-origin: right bottom;\n    -ms-transform-origin: right bottom;\n    transform-origin: right bottom;\n    -webkit-transform: rotate(-90deg);\n    -ms-transform: rotate(-90deg);\n    transform: rotate(-90deg);\n    opacity: 0;\n  }\n\n  100% {\n    -webkit-transform-origin: right bottom;\n    -ms-transform-origin: right bottom;\n    transform-origin: right bottom;\n    -webkit-transform: rotate(0);\n    -ms-transform: rotate(0);\n    transform: rotate(0);\n    opacity: 1;\n  }\n}\n\n.rotateInUpRight {\n  -webkit-animation-name: rotateInUpRight;\n  animation-name: rotateInUpRight;\n}\n\n@-webkit-keyframes rotateOut {\n  0% {\n    -webkit-transform-origin: center center;\n    transform-origin: center center;\n    -webkit-transform: rotate(0);\n    transform: rotate(0);\n    opacity: 1;\n  }\n\n  100% {\n    -webkit-transform-origin: center center;\n    transform-origin: center center;\n    -webkit-transform: rotate(200deg);\n    transform: rotate(200deg);\n    opacity: 0;\n  }\n}\n\n@keyframes rotateOut {\n  0% {\n    -webkit-transform-origin: center center;\n    -ms-transform-origin: center center;\n    transform-origin: center center;\n    -webkit-transform: rotate(0);\n    -ms-transform: rotate(0);\n    transform: rotate(0);\n    opacity: 1;\n  }\n\n  100% {\n    -webkit-transform-origin: center center;\n    -ms-transform-origin: center center;\n    transform-origin: center center;\n    -webkit-transform: rotate(200deg);\n    -ms-transform: rotate(200deg);\n    transform: rotate(200deg);\n    opacity: 0;\n  }\n}\n\n.rotateOut {\n  -webkit-animation-name: rotateOut;\n  animation-name: rotateOut;\n}\n\n@-webkit-keyframes rotateOutDownLeft {\n  0% {\n    -webkit-transform-origin: left bottom;\n    transform-origin: left bottom;\n    -webkit-transform: rotate(0);\n    transform: rotate(0);\n    opacity: 1;\n  }\n\n  100% {\n    -webkit-transform-origin: left bottom;\n    transform-origin: left bottom;\n    -webkit-transform: rotate(90deg);\n    transform: rotate(90deg);\n    opacity: 0;\n  }\n}\n\n@keyframes rotateOutDownLeft {\n  0% {\n    -webkit-transform-origin: left bottom;\n    -ms-transform-origin: left bottom;\n    transform-origin: left bottom;\n    -webkit-transform: rotate(0);\n    -ms-transform: rotate(0);\n    transform: rotate(0);\n    opacity: 1;\n  }\n\n  100% {\n    -webkit-transform-origin: left bottom;\n    -ms-transform-origin: left bottom;\n    transform-origin: left bottom;\n    -webkit-transform: rotate(90deg);\n    -ms-transform: rotate(90deg);\n    transform: rotate(90deg);\n    opacity: 0;\n  }\n}\n\n.rotateOutDownLeft {\n  -webkit-animation-name: rotateOutDownLeft;\n  animation-name: rotateOutDownLeft;\n}\n\n@-webkit-keyframes rotateOutDownRight {\n  0% {\n    -webkit-transform-origin: right bottom;\n    transform-origin: right bottom;\n    -webkit-transform: rotate(0);\n    transform: rotate(0);\n    opacity: 1;\n  }\n\n  100% {\n    -webkit-transform-origin: right bottom;\n    transform-origin: right bottom;\n    -webkit-transform: rotate(-90deg);\n    transform: rotate(-90deg);\n    opacity: 0;\n  }\n}\n\n@keyframes rotateOutDownRight {\n  0% {\n    -webkit-transform-origin: right bottom;\n    -ms-transform-origin: right bottom;\n    transform-origin: right bottom;\n    -webkit-transform: rotate(0);\n    -ms-transform: rotate(0);\n    transform: rotate(0);\n    opacity: 1;\n  }\n\n  100% {\n    -webkit-transform-origin: right bottom;\n    -ms-transform-origin: right bottom;\n    transform-origin: right bottom;\n    -webkit-transform: rotate(-90deg);\n    -ms-transform: rotate(-90deg);\n    transform: rotate(-90deg);\n    opacity: 0;\n  }\n}\n\n.rotateOutDownRight {\n  -webkit-animation-name: rotateOutDownRight;\n  animation-name: rotateOutDownRight;\n}\n\n@-webkit-keyframes rotateOutUpLeft {\n  0% {\n    -webkit-transform-origin: left bottom;\n    transform-origin: left bottom;\n    -webkit-transform: rotate(0);\n    transform: rotate(0);\n    opacity: 1;\n  }\n\n  100% {\n    -webkit-transform-origin: left bottom;\n    transform-origin: left bottom;\n    -webkit-transform: rotate(-90deg);\n    transform: rotate(-90deg);\n    opacity: 0;\n  }\n}\n\n@keyframes rotateOutUpLeft {\n  0% {\n    -webkit-transform-origin: left bottom;\n    -ms-transform-origin: left bottom;\n    transform-origin: left bottom;\n    -webkit-transform: rotate(0);\n    -ms-transform: rotate(0);\n    transform: rotate(0);\n    opacity: 1;\n  }\n\n  100% {\n    -webkit-transform-origin: left bottom;\n    -ms-transform-origin: left bottom;\n    transform-origin: left bottom;\n    -webkit-transform: rotate(-90deg);\n    -ms-transform: rotate(-90deg);\n    transform: rotate(-90deg);\n    opacity: 0;\n  }\n}\n\n.rotateOutUpLeft {\n  -webkit-animation-name: rotateOutUpLeft;\n  animation-name: rotateOutUpLeft;\n}\n\n@-webkit-keyframes rotateOutUpRight {\n  0% {\n    -webkit-transform-origin: right bottom;\n    transform-origin: right bottom;\n    -webkit-transform: rotate(0);\n    transform: rotate(0);\n    opacity: 1;\n  }\n\n  100% {\n    -webkit-transform-origin: right bottom;\n    transform-origin: right bottom;\n    -webkit-transform: rotate(90deg);\n    transform: rotate(90deg);\n    opacity: 0;\n  }\n}\n\n@keyframes rotateOutUpRight {\n  0% {\n    -webkit-transform-origin: right bottom;\n    -ms-transform-origin: right bottom;\n    transform-origin: right bottom;\n    -webkit-transform: rotate(0);\n    -ms-transform: rotate(0);\n    transform: rotate(0);\n    opacity: 1;\n  }\n\n  100% {\n    -webkit-transform-origin: right bottom;\n    -ms-transform-origin: right bottom;\n    transform-origin: right bottom;\n    -webkit-transform: rotate(90deg);\n    -ms-transform: rotate(90deg);\n    transform: rotate(90deg);\n    opacity: 0;\n  }\n}\n\n.rotateOutUpRight {\n  -webkit-animation-name: rotateOutUpRight;\n  animation-name: rotateOutUpRight;\n}\n\n@-webkit-keyframes slideInDown {\n  0% {\n    opacity: 0;\n    -webkit-transform: translateY(-2000px);\n    transform: translateY(-2000px);\n  }\n\n  100% {\n    -webkit-transform: translateY(0);\n    transform: translateY(0);\n  }\n}\n\n@keyframes slideInDown {\n  0% {\n    opacity: 0;\n    -webkit-transform: translateY(-2000px);\n    -ms-transform: translateY(-2000px);\n    transform: translateY(-2000px);\n  }\n\n  100% {\n    -webkit-transform: translateY(0);\n    -ms-transform: translateY(0);\n    transform: translateY(0);\n  }\n}\n\n.slideInDown {\n  -webkit-animation-name: slideInDown;\n  animation-name: slideInDown;\n}\n\n@-webkit-keyframes slideInLeft {\n  0% {\n    opacity: 0;\n    -webkit-transform: translateX(-2000px);\n    transform: translateX(-2000px);\n  }\n\n  100% {\n    -webkit-transform: translateX(0);\n    transform: translateX(0);\n  }\n}\n\n@keyframes slideInLeft {\n  0% {\n    opacity: 0;\n    -webkit-transform: translateX(-2000px);\n    -ms-transform: translateX(-2000px);\n    transform: translateX(-2000px);\n  }\n\n  100% {\n    -webkit-transform: translateX(0);\n    -ms-transform: translateX(0);\n    transform: translateX(0);\n  }\n}\n\n.slideInLeft {\n  -webkit-animation-name: slideInLeft;\n  animation-name: slideInLeft;\n}\n\n@-webkit-keyframes slideInRight {\n  0% {\n    opacity: 0;\n    -webkit-transform: translateX(2000px);\n    transform: translateX(2000px);\n  }\n\n  100% {\n    -webkit-transform: translateX(0);\n    transform: translateX(0);\n  }\n}\n\n@keyframes slideInRight {\n  0% {\n    opacity: 0;\n    -webkit-transform: translateX(2000px);\n    -ms-transform: translateX(2000px);\n    transform: translateX(2000px);\n  }\n\n  100% {\n    -webkit-transform: translateX(0);\n    -ms-transform: translateX(0);\n    transform: translateX(0);\n  }\n}\n\n.slideInRight {\n  -webkit-animation-name: slideInRight;\n  animation-name: slideInRight;\n}\n\n@-webkit-keyframes slideOutLeft {\n  0% {\n    -webkit-transform: translateX(0);\n    transform: translateX(0);\n  }\n\n  100% {\n    opacity: 0;\n    -webkit-transform: translateX(-2000px);\n    transform: translateX(-2000px);\n  }\n}\n\n@keyframes slideOutLeft {\n  0% {\n    -webkit-transform: translateX(0);\n    -ms-transform: translateX(0);\n    transform: translateX(0);\n  }\n\n  100% {\n    opacity: 0;\n    -webkit-transform: translateX(-2000px);\n    -ms-transform: translateX(-2000px);\n    transform: translateX(-2000px);\n  }\n}\n\n.slideOutLeft {\n  -webkit-animation-name: slideOutLeft;\n  animation-name: slideOutLeft;\n}\n\n@-webkit-keyframes slideOutRight {\n  0% {\n    -webkit-transform: translateX(0);\n    transform: translateX(0);\n  }\n\n  100% {\n    opacity: 0;\n    -webkit-transform: translateX(2000px);\n    transform: translateX(2000px);\n  }\n}\n\n@keyframes slideOutRight {\n  0% {\n    -webkit-transform: translateX(0);\n    -ms-transform: translateX(0);\n    transform: translateX(0);\n  }\n\n  100% {\n    opacity: 0;\n    -webkit-transform: translateX(2000px);\n    -ms-transform: translateX(2000px);\n    transform: translateX(2000px);\n  }\n}\n\n.slideOutRight {\n  -webkit-animation-name: slideOutRight;\n  animation-name: slideOutRight;\n}\n\n@-webkit-keyframes slideOutUp {\n  0% {\n    -webkit-transform: translateY(0);\n    transform: translateY(0);\n  }\n\n  100% {\n    opacity: 0;\n    -webkit-transform: translateY(-2000px);\n    transform: translateY(-2000px);\n  }\n}\n\n@keyframes slideOutUp {\n  0% {\n    -webkit-transform: translateY(0);\n    -ms-transform: translateY(0);\n    transform: translateY(0);\n  }\n\n  100% {\n    opacity: 0;\n    -webkit-transform: translateY(-2000px);\n    -ms-transform: translateY(-2000px);\n    transform: translateY(-2000px);\n  }\n}\n\n.slideOutUp {\n  -webkit-animation-name: slideOutUp;\n  animation-name: slideOutUp;\n}\n\n@-webkit-keyframes hinge {\n  0% {\n    -webkit-transform: rotate(0);\n    transform: rotate(0);\n    -webkit-transform-origin: top left;\n    transform-origin: top left;\n    -webkit-animation-timing-function: ease-in-out;\n    animation-timing-function: ease-in-out;\n  }\n\n  20%, 60% {\n    -webkit-transform: rotate(80deg);\n    transform: rotate(80deg);\n    -webkit-transform-origin: top left;\n    transform-origin: top left;\n    -webkit-animation-timing-function: ease-in-out;\n    animation-timing-function: ease-in-out;\n  }\n\n  40% {\n    -webkit-transform: rotate(60deg);\n    transform: rotate(60deg);\n    -webkit-transform-origin: top left;\n    transform-origin: top left;\n    -webkit-animation-timing-function: ease-in-out;\n    animation-timing-function: ease-in-out;\n  }\n\n  80% {\n    -webkit-transform: rotate(60deg) translateY(0);\n    transform: rotate(60deg) translateY(0);\n    opacity: 1;\n    -webkit-transform-origin: top left;\n    transform-origin: top left;\n    -webkit-animation-timing-function: ease-in-out;\n    animation-timing-function: ease-in-out;\n  }\n\n  100% {\n    -webkit-transform: translateY(700px);\n    transform: translateY(700px);\n    opacity: 0;\n  }\n}\n\n@keyframes hinge {\n  0% {\n    -webkit-transform: rotate(0);\n    -ms-transform: rotate(0);\n    transform: rotate(0);\n    -webkit-transform-origin: top left;\n    -ms-transform-origin: top left;\n    transform-origin: top left;\n    -webkit-animation-timing-function: ease-in-out;\n    animation-timing-function: ease-in-out;\n  }\n\n  20%, 60% {\n    -webkit-transform: rotate(80deg);\n    -ms-transform: rotate(80deg);\n    transform: rotate(80deg);\n    -webkit-transform-origin: top left;\n    -ms-transform-origin: top left;\n    transform-origin: top left;\n    -webkit-animation-timing-function: ease-in-out;\n    animation-timing-function: ease-in-out;\n  }\n\n  40% {\n    -webkit-transform: rotate(60deg);\n    -ms-transform: rotate(60deg);\n    transform: rotate(60deg);\n    -webkit-transform-origin: top left;\n    -ms-transform-origin: top left;\n    transform-origin: top left;\n    -webkit-animation-timing-function: ease-in-out;\n    animation-timing-function: ease-in-out;\n  }\n\n  80% {\n    -webkit-transform: rotate(60deg) translateY(0);\n    -ms-transform: rotate(60deg) translateY(0);\n    transform: rotate(60deg) translateY(0);\n    opacity: 1;\n    -webkit-transform-origin: top left;\n    -ms-transform-origin: top left;\n    transform-origin: top left;\n    -webkit-animation-timing-function: ease-in-out;\n    animation-timing-function: ease-in-out;\n  }\n\n  100% {\n    -webkit-transform: translateY(700px);\n    -ms-transform: translateY(700px);\n    transform: translateY(700px);\n    opacity: 0;\n  }\n}\n\n.hinge {\n  -webkit-animation-name: hinge;\n  animation-name: hinge;\n}\n\n/* originally authored by Nick Pettit - https://github.com/nickpettit/glide */\n\n@-webkit-keyframes rollIn {\n  0% {\n    opacity: 0;\n    -webkit-transform: translateX(-100%) rotate(-120deg);\n    transform: translateX(-100%) rotate(-120deg);\n  }\n\n  100% {\n    opacity: 1;\n    -webkit-transform: translateX(0px) rotate(0deg);\n    transform: translateX(0px) rotate(0deg);\n  }\n}\n\n@keyframes rollIn {\n  0% {\n    opacity: 0;\n    -webkit-transform: translateX(-100%) rotate(-120deg);\n    -ms-transform: translateX(-100%) rotate(-120deg);\n    transform: translateX(-100%) rotate(-120deg);\n  }\n\n  100% {\n    opacity: 1;\n    -webkit-transform: translateX(0px) rotate(0deg);\n    -ms-transform: translateX(0px) rotate(0deg);\n    transform: translateX(0px) rotate(0deg);\n  }\n}\n\n.rollIn {\n  -webkit-animation-name: rollIn;\n  animation-name: rollIn;\n}\n\n/* originally authored by Nick Pettit - https://github.com/nickpettit/glide */\n\n@-webkit-keyframes rollOut {\n  0% {\n    opacity: 1;\n    -webkit-transform: translateX(0px) rotate(0deg);\n    transform: translateX(0px) rotate(0deg);\n  }\n\n  100% {\n    opacity: 0;\n    -webkit-transform: translateX(100%) rotate(120deg);\n    transform: translateX(100%) rotate(120deg);\n  }\n}\n\n@keyframes rollOut {\n  0% {\n    opacity: 1;\n    -webkit-transform: translateX(0px) rotate(0deg);\n    -ms-transform: translateX(0px) rotate(0deg);\n    transform: translateX(0px) rotate(0deg);\n  }\n\n  100% {\n    opacity: 0;\n    -webkit-transform: translateX(100%) rotate(120deg);\n    -ms-transform: translateX(100%) rotate(120deg);\n    transform: translateX(100%) rotate(120deg);\n  }\n}\n\n.rollOut {\n  -webkit-animation-name: rollOut;\n  animation-name: rollOut;\n}"
  },
  {
    "path": "content/present-ionic/index.html",
    "content": "<!DOCTYPE HTML>\n\n<html lang=\"en\">\n<head>\n  <meta charset=\"utf-8\">\n\n  <title>Present Ionic Framework in Your Town</title>\n  <meta name=\"description\" content=\"Present Ionic Framework\">\n  <meta name=\"author\" content=\"Ionic Framework\">\n\n  <link rel=\"stylesheet\" href=\"style.css\">\n  <link rel=\"stylesheet\" href=\"animate.css\">\n\n  <script>\n    (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){\n    (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),\n    m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)\n    })(window,document,'script','//www.google-analytics.com/analytics.js','ga');\n\n    ga('create', 'UA-44023830-1', 'ionicframework.com');\n    ga('send', 'pageview');\n\n  </script>\n\n\n</head>\n\n<body>\n  <script src=\"js/scripts.js\"></script>\n\n\t<div class=\"wrapper\">\n\n\t\t<div class=\"logo-header\"></div>\n\n\t\t\t<div class=\"animated fadeInDown\">\n\t\t\t\t<h1>Share the new way to build mobile apps.<br>\n\t\t\t\tPresent Ionic Framework in your town.<br>\n\t\t\t\t<span>We'll provide everything you need.</span></h1>\n\n\t\t\t\t<p>Simply download or view our pre-designed presentation with slides and demos!</p>\n\t\t\t</div>\n\n      <div class=\"animated fadeInUp\">\n        <a href=\"/present-ionic/slides/\" class=\"btn\">Start Presenting</a>\n      </div>\n\n      <div class=\"animated fadeInUp\">\n        <a href=\"https://github.com/ionic-team/ionic-present\" class=\"own\">Or make it your own</a>\n      </div>\n\n\t\t<footer>\n\n\t\t\t<div id=\"twitter-share\" class=\"animated bounceInUp\">\n\t\t\t\t<a href=\"https://twitter.com/Ionicframework\" class=\"twitter-follow-button\" data-show-count=\"false\" data-size=\"large\" data-dnt=\"true\">Follow @Ionicframework</a>\n\t\t\t\t<script>!function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0],p=/^http:/.test(d.location)?'http':'https';if(!d.getElementById(id)){js=d.createElement(s);js.id=id;js.src=p+'://platform.twitter.com/widgets.js';fjs.parentNode.insertBefore(js,fjs);}}(document, 'script', 'twitter-wjs');</script>\n\n\t\t\t\t<a href=\"https://twitter.com/share\" class=\"twitter-share-button\" data-text=\"Present Ionic Framework in your town!\" data-via=\"Ionicframework\" data-size=\"large\" data-hashtags=\"presentionic\" data-dnt=\"true\" data-count=\"none\" data-related=\"maxlynch,adamdbradley,benjsperry,drifty\">Tweet</a>\n\t\t\t\t<script>!function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0],p=/^http:/.test(d.location)?'http':'https';if(!d.getElementById(id)){js=d.createElement(s);js.id=id;js.src=p+'://platform.twitter.com/widgets.js';fjs.parentNode.insertBefore(js,fjs);}}(document, 'script', 'twitter-wjs');</script>\n\t\t\t</div>\n\n\t\t</footer>\n\n\t</div>\n\n</body>\n</html>\n"
  },
  {
    "path": "content/present-ionic/slides/css/ionic.css",
    "content": "/**\n * Ionic theme for reveal.js.\n *\n * Copyright (C) 2011-2012 Hakim El Hattab, http://hakim.se\n */\n/*********************************************\n * GLOBAL STYLES\n *********************************************/\nbody {\n  background: #4D84E0;}\n\n.reveal {\n  color: #333333;\n  font-weight: normal;\n  font-size: 36px;\n  font-family: \"HelveticaNeue-Light\", \"Helvetica Neue Light\", \"Helvetica Neue\", Helvetica, Arial, \"Lucida Grande\", sans-serif;\n}\n\n::selection {\n  background: rgba(0, 0, 0, 0.99);\n  color: white;\n  text-shadow: none;\n}\n\n/*********************************************\n * Type\n *********************************************/\n.reveal h1,\n.reveal h2,\n.reveal h3,\n.reveal h4,\n.reveal h5,\n.reveal h6 {\n  margin: 0 0 20px 0;\n  color: white;\n  font-weight: 300;\n  font-family: \"Helvetica Neue\", Helvetica, Arial, \"Lucida Grande\", sans-serif;\n}\n\n.reveal h2 {\n  margin-bottom: 32px;\n}\n\n.reveal h4 {\n  font-size: 42px;\n  line-height: 52px;\n}\n\n.reveal p,\n.reveal li,\n.reveal th,\n.reveal td {\n  color: white;\n}\n\n.reveal table {\n  margin: 32px auto;\n}\n\n.reveal th,\n.reveal td {\n  padding: 4px 16px;\n}\n\n.reveal li {\n  padding-bottom: 12px;\n}\n\n.reveal pre {\n  width: 100%;\n}\n\n.reveal pre code {\n  max-height: 460px;\n  word-wrap: break-word;\n}\n\n.reveal blockquote {\n  padding: 25px;\n  color: white;\n  display: block;\n  position: relative;\n  width: 70%;\n  margin: 5px auto;\n  padding: 25px;\n  font-family: \"Georgia\", Cambria, \"Times New Roman\", Times, serif;\n  font-weight: normal;\n  font-style: italic;\n  background: none;\n  border: none;\n  box-shadow: none;\n}\n\n.reveal .light-text {\n  color: #dce9ff;\n}\n\n.reveal pre.ionic-blue {\n  box-shadow: none;\n}\n\n.reveal pre.ionic-blue code,\n.reveal pre.ionic-blue code span {\n  color: white;\n  background: transparent;\n  opacity: 1;\n}\n\n/*********************************************\n * LINKS\n *********************************************/\n\n.reveal a:not(.image) {\n  color: #fff;\n  text-decoration: none;\n  -webkit-transition: color .15s ease;\n  -moz-transition: color .15s ease;\n  -ms-transition: color .15s ease;\n  -o-transition: color .15s ease;\n  transition: color .15s ease;\n}\n\n.reveal a:not(.image):hover {\n  border: none;\n  text-shadow: none;\n  color: white;\n  text-decoration: underline;\n}\n\n.reveal .roll span:after {\n  background: #564826;\n  color: #fff;\n}\n\n/*********************************************\n * IMAGES\n *********************************************/\n\n.reveal section img {\n  margin: 15px 0px;\n  border: 4px solid #333333;\n  background: rgba(255, 255, 255, 0.12);\n  box-shadow: 0 0 10px rgba(0, 0, 0, 0.15);\n  -webkit-transition: all .2s linear;\n  -moz-transition: all .2s linear;\n  -ms-transition: all .2s linear;\n  -o-transition: all .2s linear;\n  transition: all .2s linear; }\n\n.reveal a:hover img {\n  border-color: #fff;\n  background: rgba(255, 255, 255, 0.2);\n  box-shadow: 0 0 20px rgba(0, 0, 0, 0.55); }\n\n/*********************************************\n * NAVIGATION CONTROLS\n *********************************************/\n.reveal .controls div.navigate-left,\n.reveal .controls div.navigate-left.enabled {\n  border-right-color: #fff; }\n\n.reveal .controls div.navigate-right,\n.reveal .controls div.navigate-right.enabled {\n  border-left-color: #fff; }\n\n.reveal .controls div.navigate-up,\n.reveal .controls div.navigate-up.enabled {\n  border-bottom-color: #fff; }\n\n.reveal .controls div.navigate-down,\n.reveal .controls div.navigate-down.enabled {\n  border-top-color: #fff; }\n\n.reveal .controls div.navigate-left.enabled:hover {\n  border-right-color: #ddd; }\n\n.reveal .controls div.navigate-right.enabled:hover {\n  border-left-color: #ddd; }\n\n.reveal .controls div.navigate-up.enabled:hover {\n  border-bottom-color: #ddd; }\n\n.reveal .controls div.navigate-down.enabled:hover {\n  border-top-color: #ddd; }\n\n/*********************************************\n * PROGRESS BAR\n *********************************************/\n.reveal .progress {\n  background: rgba(0, 0, 0, 0.2); }\n\n.reveal .progress span {\n  background: #fff;\n  -webkit-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985);\n  -moz-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985);\n  -ms-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985);\n  -o-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985);\n  transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985);\n}\n\n/*********************************************\n * SLIDE NUMBER\n *********************************************/\n.reveal .slide-number {\n  color: #fff; }\n\n\n.reveal section img.logo {\n  margin-bottom: 50px;\n  border: none;\n  background: none;\n  box-shadow: none;\n}\n\n.reveal h5.framework-url {\n  margin-top: 40px;\n  color: #ddeaff;\n  font-weight: 300;\n}\n\n.col {\n  float: left;\n  width: 50%;\n}\n.col.preview {\n  width: 35%;;\n}\n.col.code {\n  width: 65%;\n  text-align: left;\n}\n.col.code > * {\n  margin-left: 40px;\n}\n\n.reveal .stack {\n  background: #2F63B8;\n  padding: 5px;\n  margin: 10px auto;\n  width: 60%;\n  color: white;\n  opacity: .7;\n}\n\n.reveal code {\n  font-size: 18px;\n}\n\n.reveal .demo-frame {\n  background: url('../img/demo-bg.png') no-repeat;\n  background-size: 340px;\n  height: 820px;\n  margin-top: -20px;\n  margin-left: -15px;\n  min-width: 345px;\n}\n\n.reveal .demo-frame iframe {\n  position: absolute;\n  left: 13px;\n  top: 104px;\n  width: 287px;\n  height: 509px\n}\n"
  },
  {
    "path": "content/present-ionic/slides/css/print/paper.css",
    "content": "/* Default Print Stylesheet Template\n   by Rob Glazebrook of CSSnewbie.com\n   Last Updated: June 4, 2008\n\n   Feel free (nay, compelled) to edit, append, and\n   manipulate this file as you see fit. */\n\n\n/* SECTION 1: Set default width, margin, float, and\n   background. This prevents elements from extending\n   beyond the edge of the printed page, and prevents\n   unnecessary background images from printing */\nbody {\n\tbackground: #fff;\n\tfont-size: 13pt;\n\twidth: auto;\n\theight: auto;\n\tborder: 0;\n\tmargin: 0 5%;\n\tpadding: 0;\n\tfloat: none !important;\n\toverflow: visible;\n}\nhtml {\n\tbackground: #fff;\n\twidth: auto;\n\theight: auto;\n\toverflow: visible;\n}\n\n/* SECTION 2: Remove any elements not needed in print.\n   This would include navigation, ads, sidebars, etc. */\n.nestedarrow,\n.controls,\n.reveal .progress,\n.reveal.overview,\n.fork-reveal,\n.share-reveal,\n.state-background {\n\tdisplay: none !important;\n}\n\n/* SECTION 3: Set body font face, size, and color.\n   Consider using a serif font for readability. */\nbody, p, td, li, div, a {\n\tfont-size: 16pt!important;\n\tfont-family: Georgia, \"Times New Roman\", Times, serif !important;\n\tcolor: #000;\n}\n\n/* SECTION 4: Set heading font face, sizes, and color.\n   Differentiate your headings from your body text.\n   Perhaps use a large sans-serif for distinction. */\nh1,h2,h3,h4,h5,h6 {\n\tcolor: #000!important;\n\theight: auto;\n\tline-height: normal;\n\tfont-family: Georgia, \"Times New Roman\", Times, serif !important;\n\ttext-shadow: 0 0 0 #000 !important;\n\ttext-align: left;\n\tletter-spacing: normal;\n}\n/* Need to reduce the size of the fonts for printing */\nh1 { font-size: 26pt !important;  }\nh2 { font-size: 22pt !important; }\nh3 { font-size: 20pt !important; }\nh4 { font-size: 20pt !important; font-variant: small-caps; }\nh5 { font-size: 19pt !important; }\nh6 { font-size: 18pt !important; font-style: italic; }\n\n/* SECTION 5: Make hyperlinks more usable.\n   Ensure links are underlined, and consider appending\n   the URL to the end of the link for usability. */\na:link,\na:visited {\n\tcolor: #000 !important;\n\tfont-weight: bold;\n\ttext-decoration: underline;\n}\n/*\n.reveal a:link:after,\n.reveal a:visited:after {\n\tcontent: \" (\" attr(href) \") \";\n\tcolor: #222 !important;\n\tfont-size: 90%;\n}\n*/\n\n\n/* SECTION 6: more reveal.js specific additions by @skypanther */\nul, ol, div, p {\n\tvisibility: visible;\n\tposition: static;\n\twidth: auto;\n\theight: auto;\n\tdisplay: block;\n\toverflow: visible;\n\tmargin: auto;\n\ttext-align: left !important;\n}\n.reveal .slides {\n\tposition: static;\n\twidth: auto;\n\theight: auto;\n\n\tleft: auto;\n\ttop: auto;\n\tmargin-left: auto;\n\tmargin-top: auto;\n\tpadding: auto;\n\n\toverflow: visible;\n\tdisplay: block;\n\n\ttext-align: center;\n\t-webkit-perspective: none;\n\t   -moz-perspective: none;\n\t    -ms-perspective: none;\n\t        perspective: none;\n\n\t-webkit-perspective-origin: 50% 50%; /* there isn't a none/auto value but 50-50 is the default */\n\t   -moz-perspective-origin: 50% 50%;\n\t    -ms-perspective-origin: 50% 50%;\n\t        perspective-origin: 50% 50%;\n}\n.reveal .slides>section,\n.reveal .slides>section>section {\n\n\tvisibility: visible !important;\n\tposition: static !important;\n\twidth: 90% !important;\n\theight: auto !important;\n\tdisplay: block !important;\n\toverflow: visible !important;\n\n\tleft: 0% !important;\n\ttop: 0% !important;\n\tmargin-left: 0px !important;\n\tmargin-top: 0px !important;\n\tpadding: 20px 0px !important;\n\n\topacity: 1 !important;\n\n\t-webkit-transform-style: flat !important;\n\t   -moz-transform-style: flat !important;\n\t    -ms-transform-style: flat !important;\n\t        transform-style: flat !important;\n\n\t-webkit-transform: none !important;\n\t   -moz-transform: none !important;\n\t    -ms-transform: none !important;\n\t        transform: none !important;\n}\n.reveal section {\n\tpage-break-after: always !important;\n\tdisplay: block !important;\n}\n.reveal section .fragment {\n\topacity: 1 !important;\n\tvisibility: visible !important;\n\n\t-webkit-transform: none !important;\n\t   -moz-transform: none !important;\n\t    -ms-transform: none !important;\n\t        transform: none !important;\n}\n.reveal section:last-of-type {\n\tpage-break-after: avoid !important;\n}\n.reveal section img {\n\tdisplay: block;\n\tmargin: 15px 0px;\n\tbackground: rgba(255,255,255,1);\n\tborder: 1px solid #666;\n\tbox-shadow: none;\n}"
  },
  {
    "path": "content/present-ionic/slides/css/print/pdf.css",
    "content": "/* Default Print Stylesheet Template\n   by Rob Glazebrook of CSSnewbie.com\n   Last Updated: June 4, 2008\n\n   Feel free (nay, compelled) to edit, append, and\n   manipulate this file as you see fit. */\n\n\n/* SECTION 1: Set default width, margin, float, and\n   background. This prevents elements from extending\n   beyond the edge of the printed page, and prevents\n   unnecessary background images from printing */\n\n* {\n\t-webkit-print-color-adjust: exact;\n}\n\nbody {\n\tfont-size: 18pt;\n\twidth: 297mm;\n\theight: 229mm;\n\tmargin: 0 auto !important;\n\tborder: 0;\n\tpadding: 0;\n\tfloat: none !important;\n\toverflow: visible;\n}\n\nhtml {\n\twidth: 100%;\n\theight: 100%;\n\toverflow: visible;\n}\n\n@page {\n\tsize: letter landscape;\n\tmargin: 0;\n}\n\n/* SECTION 2: Remove any elements not needed in print.\n   This would include navigation, ads, sidebars, etc. */\n.nestedarrow,\n.controls,\n.reveal .progress,\n.reveal.overview,\n.fork-reveal,\n.share-reveal,\n.state-background {\n\tdisplay: none !important;\n}\n\n/* SECTION 3: Set body font face, size, and color.\n   Consider using a serif font for readability. */\nbody, p, td, li, div {\n\tfont-size: 18pt;\n}\n\n/* SECTION 4: Set heading font face, sizes, and color.\n   Differentiate your headings from your body text.\n   Perhaps use a large sans-serif for distinction. */\nh1,h2,h3,h4,h5,h6 {\n\ttext-shadow: 0 0 0 #000 !important;\n}\n\n/* SECTION 5: Make hyperlinks more usable.\n   Ensure links are underlined, and consider appending\n   the URL to the end of the link for usability. */\na:link,\na:visited {\n\tfont-weight: normal;\n\ttext-decoration: underline;\n}\n\n.reveal pre code {\n\toverflow: hidden !important;\n\tfont-family: monospace !important;\n}\n\n\n/* SECTION 6: more reveal.js specific additions by @skypanther */\nul, ol, div, p {\n\tvisibility: visible;\n\tposition: static;\n\twidth: auto;\n\theight: auto;\n\tdisplay: block;\n\toverflow: visible;\n\tmargin: auto;\n}\n.reveal {\n\twidth: auto !important;\n\theight: auto !important;\n\toverflow: hidden !important;\n}\n.reveal .slides {\n\tposition: static;\n\twidth: 100%;\n\theight: auto;\n\n\tleft: auto;\n\ttop: auto;\n\tmargin: 0 !important;\n\tpadding: 0 !important;\n\n\toverflow: visible;\n\tdisplay: block;\n\n\ttext-align: center;\n\n\t-webkit-perspective: none;\n\t   -moz-perspective: none;\n\t    -ms-perspective: none;\n\t        perspective: none;\n\n\t-webkit-perspective-origin: 50% 50%; /* there isn't a none/auto value but 50-50 is the default */\n\t   -moz-perspective-origin: 50% 50%;\n\t    -ms-perspective-origin: 50% 50%;\n\t        perspective-origin: 50% 50%;\n}\n.reveal .slides section {\n\n\tpage-break-after: always !important;\n\n\tvisibility: visible !important;\n\tposition: relative !important;\n\twidth: 100% !important;\n\theight: 229mm !important;\n\tmin-height: 229mm !important;\n\tdisplay: block !important;\n\toverflow: hidden !important;\n\n\tleft: 0 !important;\n\ttop: 0 !important;\n\tmargin: 0 !important;\n\tpadding: 2cm 2cm 0 2cm !important;\n\tbox-sizing: border-box !important;\n\n\topacity: 1 !important;\n\n\t-webkit-transform-style: flat !important;\n\t   -moz-transform-style: flat !important;\n\t    -ms-transform-style: flat !important;\n\t        transform-style: flat !important;\n\n\t-webkit-transform: none !important;\n\t   -moz-transform: none !important;\n\t    -ms-transform: none !important;\n\t        transform: none !important;\n}\n.reveal section.stack {\n\tmargin: 0 !important;\n\tpadding: 0 !important;\n\tpage-break-after: avoid !important;\n\theight: auto !important;\n\tmin-height: auto !important;\n}\n.reveal .absolute-element {\n\tmargin-left: 2.2cm;\n\tmargin-top: 1.8cm;\n}\n.reveal section .fragment {\n\topacity: 1 !important;\n\tvisibility: visible !important;\n\n\t-webkit-transform: none !important;\n\t   -moz-transform: none !important;\n\t    -ms-transform: none !important;\n\t        transform: none !important;\n}\n.reveal section .slide-background {\n\tposition: absolute;\n\ttop: 0;\n\tleft: 0;\n\twidth: 100%;\n\tz-index: 0;\n}\n.reveal section>* {\n\tposition: relative;\n\tz-index: 1;\n}\n.reveal img {\n\tbox-shadow: none;\n}\n.reveal .roll {\n\toverflow: visible;\n\tline-height: 1em;\n}\n.reveal small a {\n\tfont-size: 16pt !important;\n}\n"
  },
  {
    "path": "content/present-ionic/slides/demos/actionsheet/index.html",
    "content": "<!DOCTYPE html>\n<html ng-app=\"ionicApp\">\n<head>\n  <link href=\"../../ionic/css/ionic.css\" rel=\"stylesheet\">\n  <link href=\"style.css\" rel=\"stylesheet\">\n  <script src=\"../../ionic/js/ionic.bundle.js\"></script>\n  <script src=\"index.js\"></script>\n</head>\n\n<body ng-controller=\"MainCtrl\">\n\n  <ion-header-bar>\n    <h1 class=\"title\">Action Sheet</h1>\n  </ion-header-bar>\n\n  <ion-content class=\"padding\">\n\n    <button ng-click=\"showActionsheet()\" class=\"button\">Show Action Sheet</button>\n\n  </ion-content>\n\n</body>\n</html>\n"
  },
  {
    "path": "content/present-ionic/slides/demos/actionsheet/index.js",
    "content": "angular.module('ionicApp', ['ionic'])\n\n.controller('MainCtrl', function($scope, $ionicActionSheet) {\n\n  $scope.showActionsheet = function() {\n\n    $ionicActionSheet.show({\n      titleText: 'Action Sheet Example',\n      buttons: [\n        { text: 'Share' },\n        { text: 'Move' },\n      ],\n      destructiveText: 'Delete',\n      cancelText: 'Cancel',\n      cancel: function() {\n        console.log('CANCELLED');\n      },\n      buttonClicked: function(index) {\n        console.log('BUTTON CLICKED', index);\n        return true;\n      },\n      destructiveButtonClicked: function() {\n        console.log('DESTRUCT');\n        return true;\n      }\n    });\n  };\n\n});\n"
  },
  {
    "path": "content/present-ionic/slides/demos/actionsheet/style.css",
    "content": "body {\n  background: white;\n}\n"
  },
  {
    "path": "content/present-ionic/slides/demos/collection-repeat/index.html",
    "content": "<!DOCTYPE html>\n<html ng-app=\"ionicApp\">\n<head>\n  <link href=\"../../ionic/css/ionic.css\" rel=\"stylesheet\">\n  <link href=\"style.css\" rel=\"stylesheet\">\n  <script src=\"../../ionic/js/ionic.bundle.js\"></script>\n  <script src=\"index.js\"></script>\n</head>\n\n<body ng-controller=\"MainCtrl\">\n\n  <ion-header-bar class=\"bar-positive\">\n    <h1 class=\"title\">Collection Repeat: 3000 cats</h1>\n  </ion-header-bar>\n\n  <ion-content>\n\n    <div class=\"list\">\n      <a class=\"item\"\n        collection-repeat=\"item in getContacts()\"\n        collection-item-height=\"getItemHeight(item)\"\n        ng-href=\"https://www.google.com/#q={{item.first_name + '+' + item.last_name}}\"\n        ng-style=\"{'line-height': getItemHeight(item) + 'px'}\"\n        ng-class=\"{'item-divider': item.isLetter}\">\n        <img ng-if=\"!item.isLetter\" ng-src=\"img/{{1 + ($index % 6)}}.png\">\n        {{item.letter || (item.first_name+' '+item.last_name)}}\n      </a>\n    </div>\n\n  </ion-content>\n\n</body>\n</html>\n"
  },
  {
    "path": "content/present-ionic/slides/demos/collection-repeat/index.js",
    "content": "angular.module('ionicApp', ['ionic'])\n\n.controller('MainCtrl', function($scope, $ionicScrollDelegate, filterFilter) {\n  var letters = $scope.letters = [];\n  var contacts = $scope.contacts = [];\n  var currentCharCode = 'A'.charCodeAt(0) - 1;\n\n  //window.CONTACTS is defined below\n  window.CONTACTS\n    .sort(function(a, b) {\n      return a.last_name > b.last_name ? 1 : -1;\n    })\n    .forEach(function(person) {\n      //Get the first letter of the last name, and if the last name changes\n      //put the letter in the array\n      var personCharCode = person.last_name.toUpperCase().charCodeAt(0);\n      //We may jump two letters, be sure to put both in\n      //(eg if we jump from Adam Bradley to Bob Doe, add both C and D)\n      var difference = personCharCode - currentCharCode;\n      for (var i = 1; i <= difference; i++) {\n        addLetter(currentCharCode + i);\n      }\n      currentCharCode = personCharCode;\n      contacts.push(person);\n    });\n\n  //If names ended before Z, add everything up to Z\n  for (var i = currentCharCode + 1; i <= 'Z'.charCodeAt(0); i++) {\n    addLetter(i);\n  }\n\n  function addLetter(code) {\n    var letter = String.fromCharCode(code);\n    contacts.push({\n      isLetter: true,\n      letter: letter\n    });\n    letters.push(letter);\n  }\n\n  //Letters are shorter, everything else is 52 pixels\n  $scope.getItemHeight = function(item) {\n    return item.isLetter ? 40 : 100;\n  };\n  $scope.getItemWidth = function(item) {\n    return '100%';\n  };\n\n  $scope.scrollBottom = function() {\n    $ionicScrollDelegate.scrollBottom(true);\n  };\n\n  var letterHasMatch = {};\n  $scope.getContacts = function() {\n    letterHasMatch = {};\n    //Filter contacts by $scope.search.\n    //Additionally, filter letters so that they only show if there\n    //is one or more matching contact\n    return contacts.filter(function(item) {\n      var itemDoesMatch = !$scope.search || item.isLetter ||\n        item.first_name.toLowerCase().indexOf($scope.search.toLowerCase()) > -1 ||\n        item.last_name.toLowerCase().indexOf($scope.search.toLowerCase()) > -1;\n\n      //Mark this person's last name letter as 'has a match'\n      if (!item.isLetter && itemDoesMatch) {\n        var letter = item.last_name.charAt(0).toUpperCase();\n        letterHasMatch[letter] = true;\n      }\n\n      return itemDoesMatch;\n    }).filter(function(item) {\n      //Finally, re-filter all of the letters and take out ones that don't\n      //have a match\n      if (item.isLetter && !letterHasMatch[item.letter]) {\n        return false;\n      }\n      return true;\n    });\n  };\n\n  $scope.clearSearch = function() {\n    $scope.search = '';\n  };\n});\n\nwindow.CONTACTS = [{\"id\":1,\"first_name\":\"Patrick\",\"last_name\":\"Rogers\",\"country\":\"Cyprus\",\"ip_address\":\"153.88.89.148\",\"email\":\"progers@yata.net\"},\n{\"id\":2,\"first_name\":\"Janet\",\"last_name\":\"Gordon\",\"country\":\"Croatia\",\"ip_address\":\"209.73.121.212\",\"email\":\"jgordon@skivee.biz\"},\n{\"id\":3,\"first_name\":\"Kathy\",\"last_name\":\"Hamilton\",\"country\":\"Armenia\",\"ip_address\":\"164.214.217.162\",\"email\":\"khamilton@rhynyx.biz\"},\n{\"id\":4,\"first_name\":\"Stephanie\",\"last_name\":\"Johnson\",\"country\":\"Mauritius\",\"ip_address\":\"8.199.242.67\",\"email\":\"sjohnson@jabbertype.mil\"},\n{\"id\":5,\"first_name\":\"Jerry\",\"last_name\":\"Palmer\",\"country\":\"Thailand\",\"ip_address\":\"230.207.100.163\",\"email\":\"jpalmer@avamm.org\"},\n{\"id\":6,\"first_name\":\"Lillian\",\"last_name\":\"Franklin\",\"country\":\"Germany\",\"ip_address\":\"150.190.116.1\",\"email\":\"lfranklin@eare.mil\"},\n{\"id\":7,\"first_name\":\"Melissa\",\"last_name\":\"Gordon\",\"country\":\"Serbia\",\"ip_address\":\"162.156.29.99\",\"email\":\"mgordon@flashset.org\"},\n{\"id\":8,\"first_name\":\"Sarah\",\"last_name\":\"Burns\",\"country\":\"Grenada\",\"ip_address\":\"13.177.156.223\",\"email\":\"sburns@eimbee.info\"},\n{\"id\":9,\"first_name\":\"Willie\",\"last_name\":\"Burton\",\"country\":\"Croatia\",\"ip_address\":\"115.133.81.82\",\"email\":\"wburton@dynazzy.info\"},\n{\"id\":10,\"first_name\":\"Tina\",\"last_name\":\"Simmons\",\"country\":\"United States Virgin Islands\",\"ip_address\":\"113.49.63.18\",\"email\":\"tsimmons@devpulse.mil\"},\n{\"id\":11,\"first_name\":\"Kenneth\",\"last_name\":\"Larson\",\"country\":\"Mexico\",\"ip_address\":\"92.89.76.196\",\"email\":\"klarson@browseblab.info\"},\n{\"id\":12,\"first_name\":\"Philip\",\"last_name\":\"Welch\",\"country\":\"Cuba\",\"ip_address\":\"223.180.48.70\",\"email\":\"pwelch@skippad.edu\"},\n{\"id\":13,\"first_name\":\"Nicholas\",\"last_name\":\"Parker\",\"country\":\"British Indian Ocean Territory\",\"ip_address\":\"200.150.119.13\",\"email\":\"nparker@twitternation.net\"},\n{\"id\":14,\"first_name\":\"Nicole\",\"last_name\":\"Webb\",\"country\":\"Moldova\",\"ip_address\":\"47.66.237.205\",\"email\":\"nwebb@midel.biz\"},\n{\"id\":15,\"first_name\":\"Clarence\",\"last_name\":\"Schmidt\",\"country\":\"China\",\"ip_address\":\"134.84.246.67\",\"email\":\"cschmidt@dazzlesphere.net\"},\n{\"id\":16,\"first_name\":\"Jessica\",\"last_name\":\"Murray\",\"country\":\"Sao Tome and Principe\",\"ip_address\":\"211.30.32.109\",\"email\":\"jmurray@jumpxs.net\"},\n{\"id\":17,\"first_name\":\"Willie\",\"last_name\":\"Schmidt\",\"country\":\"US Minor Outlying Islands\",\"ip_address\":\"158.40.109.208\",\"email\":\"wschmidt@babbleset.edu\"},\n{\"id\":18,\"first_name\":\"Margaret\",\"last_name\":\"Evans\",\"country\":\"Bhutan\",\"ip_address\":\"252.123.77.101\",\"email\":\"mevans@voolia.info\"},\n{\"id\":19,\"first_name\":\"Arthur\",\"last_name\":\"Morales\",\"country\":\"Faroe Islands\",\"ip_address\":\"116.5.126.29\",\"email\":\"amorales@brainlounge.biz\"},\n{\"id\":20,\"first_name\":\"Charles\",\"last_name\":\"Perez\",\"country\":\"Italy\",\"ip_address\":\"10.43.255.4\",\"email\":\"cperez@avaveo.net\"},\n{\"id\":21,\"first_name\":\"Jeffrey\",\"last_name\":\"Webb\",\"country\":\"Liechtenstein\",\"ip_address\":\"55.140.114.8\",\"email\":\"jwebb@mynte.net\"},\n{\"id\":22,\"first_name\":\"Andrea\",\"last_name\":\"Simpson\",\"country\":\"Nauru\",\"ip_address\":\"22.243.12.86\",\"email\":\"asimpson@browsetype.mil\"},\n{\"id\":23,\"first_name\":\"Steve\",\"last_name\":\"Reynolds\",\"country\":\"Morocco\",\"ip_address\":\"21.166.38.112\",\"email\":\"sreynolds@topiclounge.biz\"},\n{\"id\":24,\"first_name\":\"Gerald\",\"last_name\":\"Reyes\",\"country\":\"Isle of Man\",\"ip_address\":\"235.115.15.46\",\"email\":\"greyes@voolith.biz\"},\n{\"id\":25,\"first_name\":\"Judy\",\"last_name\":\"Washington\",\"country\":\"Sweden\",\"ip_address\":\"39.120.240.182\",\"email\":\"jwashington@oyondu.net\"},\n{\"id\":26,\"first_name\":\"Brandon\",\"last_name\":\"Patterson\",\"country\":\"Vietnam\",\"ip_address\":\"18.176.165.38\",\"email\":\"bpatterson@skyba.org\"},\n{\"id\":27,\"first_name\":\"Jacqueline\",\"last_name\":\"Stephens\",\"country\":\"Cambodia\",\"ip_address\":\"207.226.109.97\",\"email\":\"jstephens@fivespan.net\"},\n{\"id\":28,\"first_name\":\"Carlos\",\"last_name\":\"Harrison\",\"country\":\"Burkina Faso\",\"ip_address\":\"130.22.96.6\",\"email\":\"charrison@yacero.gov\"},\n{\"id\":29,\"first_name\":\"Carol\",\"last_name\":\"Payne\",\"country\":\"Estonia\",\"ip_address\":\"194.1.83.133\",\"email\":\"cpayne@brightbean.com\"},\n{\"id\":30,\"first_name\":\"David\",\"last_name\":\"Baker\",\"country\":\"Montenegro\",\"ip_address\":\"39.212.209.46\",\"email\":\"dbaker@youspan.name\"},\n{\"id\":31,\"first_name\":\"Justin\",\"last_name\":\"Watkins\",\"country\":\"Timor-Leste\",\"ip_address\":\"8.56.161.224\",\"email\":\"jwatkins@centimia.net\"},\n{\"id\":32,\"first_name\":\"Roy\",\"last_name\":\"Meyer\",\"country\":\"Seychelles\",\"ip_address\":\"166.207.153.210\",\"email\":\"rmeyer@quire.com\"},\n{\"id\":33,\"first_name\":\"Kelly\",\"last_name\":\"Richardson\",\"country\":\"Central African Republic\",\"ip_address\":\"74.86.34.94\",\"email\":\"krichardson@agivu.net\"},\n{\"id\":34,\"first_name\":\"Howard\",\"last_name\":\"Mason\",\"country\":\"Portugal\",\"ip_address\":\"139.237.150.73\",\"email\":\"hmason@wikivu.info\"},\n{\"id\":35,\"first_name\":\"Karen\",\"last_name\":\"Jackson\",\"country\":\"Swaziland\",\"ip_address\":\"143.153.219.220\",\"email\":\"kjackson@kazio.net\"},\n{\"id\":36,\"first_name\":\"Christine\",\"last_name\":\"Bennett\",\"country\":\"France\",\"ip_address\":\"102.220.71.37\",\"email\":\"cbennett@pixoboo.edu\"},\n{\"id\":37,\"first_name\":\"Ashley\",\"last_name\":\"Jordan\",\"country\":\"Svalbard and Jan Mayen Islands\",\"ip_address\":\"217.38.155.41\",\"email\":\"ajordan@oba.edu\"},\n{\"id\":38,\"first_name\":\"David\",\"last_name\":\"Lopez\",\"country\":\"Mongolia\",\"ip_address\":\"87.83.224.164\",\"email\":\"dlopez@gevee.net\"},\n{\"id\":39,\"first_name\":\"Andrew\",\"last_name\":\"Pierce\",\"country\":\"Vatican City State (Holy See)\",\"ip_address\":\"107.33.80.251\",\"email\":\"apierce@einti.info\"},\n{\"id\":40,\"first_name\":\"Michael\",\"last_name\":\"Hughes\",\"country\":\"New Caledonia\",\"ip_address\":\"230.246.102.4\",\"email\":\"mhughes@roodel.name\"},\n{\"id\":41,\"first_name\":\"Earl\",\"last_name\":\"Henderson\",\"country\":\"Wallis and Futuna Islands\",\"ip_address\":\"209.198.245.189\",\"email\":\"ehenderson@youspan.name\"},\n{\"id\":42,\"first_name\":\"Frank\",\"last_name\":\"Simpson\",\"country\":\"Uruguay\",\"ip_address\":\"101.40.193.226\",\"email\":\"fsimpson@browseblab.edu\"},\n{\"id\":43,\"first_name\":\"Jane\",\"last_name\":\"Simpson\",\"country\":\"New Zealand\",\"ip_address\":\"232.49.15.188\",\"email\":\"jsimpson@jayo.net\"},\n{\"id\":44,\"first_name\":\"Sarah\",\"last_name\":\"Cook\",\"country\":\"Thailand\",\"ip_address\":\"91.41.176.224\",\"email\":\"scook@jumpxs.com\"},\n{\"id\":45,\"first_name\":\"Marilyn\",\"last_name\":\"Tucker\",\"country\":\"Western Sahara\",\"ip_address\":\"146.77.96.245\",\"email\":\"mtucker@zoomzone.mil\"},\n{\"id\":46,\"first_name\":\"Scott\",\"last_name\":\"Lewis\",\"country\":\"Spain\",\"ip_address\":\"119.197.8.105\",\"email\":\"slewis@kwilith.com\"},\n{\"id\":47,\"first_name\":\"Tammy\",\"last_name\":\"Mills\",\"country\":\"Spain\",\"ip_address\":\"48.52.175.97\",\"email\":\"tmills@dabz.gov\"},\n{\"id\":48,\"first_name\":\"Susan\",\"last_name\":\"Crawford\",\"country\":\"Slovenia\",\"ip_address\":\"23.120.101.112\",\"email\":\"scrawford@voonyx.biz\"},\n{\"id\":49,\"first_name\":\"Barbara\",\"last_name\":\"Palmer\",\"country\":\"Oman\",\"ip_address\":\"143.107.3.220\",\"email\":\"bpalmer@blogtag.org\"},\n{\"id\":50,\"first_name\":\"Stephanie\",\"last_name\":\"Diaz\",\"country\":\"Equatorial Guinea\",\"ip_address\":\"175.115.251.194\",\"email\":\"sdiaz@meevee.com\"},\n{\"id\":51,\"first_name\":\"Jeremy\",\"last_name\":\"Adams\",\"country\":\"Dominica\",\"ip_address\":\"241.55.31.83\",\"email\":\"jadams@photobug.net\"},\n{\"id\":52,\"first_name\":\"Sean\",\"last_name\":\"Hill\",\"country\":\"British Virgin Islands\",\"ip_address\":\"90.12.16.198\",\"email\":\"shill@zoonder.net\"},\n{\"id\":53,\"first_name\":\"Joseph\",\"last_name\":\"Evans\",\"country\":\"Honduras\",\"ip_address\":\"11.196.63.202\",\"email\":\"jevans@youtags.gov\"},\n{\"id\":54,\"first_name\":\"Carlos\",\"last_name\":\"Rice\",\"country\":\"Zimbabwe\",\"ip_address\":\"149.111.117.160\",\"email\":\"crice@jabbersphere.mil\"},\n{\"id\":55,\"first_name\":\"Beverly\",\"last_name\":\"Little\",\"country\":\"Turkmenistan\",\"ip_address\":\"3.207.62.33\",\"email\":\"blittle@realbuzz.net\"},\n{\"id\":56,\"first_name\":\"Craig\",\"last_name\":\"Jacobs\",\"country\":\"Saint Lucia\",\"ip_address\":\"5.35.113.171\",\"email\":\"cjacobs@oodoo.net\"},\n{\"id\":57,\"first_name\":\"Marilyn\",\"last_name\":\"Fowler\",\"country\":\"Guinea\",\"ip_address\":\"174.243.134.212\",\"email\":\"mfowler@skibox.info\"},\n{\"id\":58,\"first_name\":\"Henry\",\"last_name\":\"Rice\",\"country\":\"Antigua and Barbuda\",\"ip_address\":\"225.52.24.230\",\"email\":\"hrice@brainbox.mil\"},\n{\"id\":59,\"first_name\":\"Kathy\",\"last_name\":\"Wilson\",\"country\":\"Belarus\",\"ip_address\":\"130.145.74.55\",\"email\":\"kwilson@innojam.gov\"},\n{\"id\":60,\"first_name\":\"Arthur\",\"last_name\":\"Moore\",\"country\":\"Honduras\",\"ip_address\":\"111.109.31.249\",\"email\":\"amoore@camimbo.com\"},\n{\"id\":61,\"first_name\":\"Ralph\",\"last_name\":\"Palmer\",\"country\":\"\\u00c5land\",\"ip_address\":\"206.171.95.11\",\"email\":\"rpalmer@izio.mil\"},\n{\"id\":62,\"first_name\":\"Daniel\",\"last_name\":\"Welch\",\"country\":\"Estonia\",\"ip_address\":\"8.176.157.98\",\"email\":\"dwelch@brainsphere.net\"},\n{\"id\":63,\"first_name\":\"Carl\",\"last_name\":\"Young\",\"country\":\"Bahamas\",\"ip_address\":\"13.78.159.235\",\"email\":\"cyoung@skinte.edu\"},\n{\"id\":64,\"first_name\":\"Frank\",\"last_name\":\"Gordon\",\"country\":\"Aruba\",\"ip_address\":\"237.73.82.92\",\"email\":\"fgordon@myworks.com\"},\n{\"id\":65,\"first_name\":\"Louise\",\"last_name\":\"Gonzalez\",\"country\":\"Suriname\",\"ip_address\":\"126.51.181.207\",\"email\":\"lgonzalez@kimia.info\"},\n{\"id\":66,\"first_name\":\"Rebecca\",\"last_name\":\"Gibson\",\"country\":\"Romania\",\"ip_address\":\"116.158.158.141\",\"email\":\"rgibson@eabox.org\"},\n{\"id\":67,\"first_name\":\"Denise\",\"last_name\":\"Holmes\",\"country\":\"Korea, North\",\"ip_address\":\"93.176.44.109\",\"email\":\"dholmes@nlounge.gov\"},\n{\"id\":68,\"first_name\":\"Robert\",\"last_name\":\"Sanders\",\"country\":\"Saint Barthelemy\",\"ip_address\":\"189.26.144.238\",\"email\":\"rsanders@twimm.info\"},\n{\"id\":69,\"first_name\":\"Willie\",\"last_name\":\"Spencer\",\"country\":\"Nigeria\",\"ip_address\":\"91.75.186.243\",\"email\":\"wspencer@podcat.name\"},\n{\"id\":70,\"first_name\":\"Stephen\",\"last_name\":\"Carpenter\",\"country\":\"Nicaragua\",\"ip_address\":\"130.128.211.48\",\"email\":\"scarpenter@minyx.mil\"},\n{\"id\":71,\"first_name\":\"Fred\",\"last_name\":\"Ortiz\",\"country\":\"British Indian Ocean Territory\",\"ip_address\":\"120.159.251.238\",\"email\":\"fortiz@yodel.edu\"},\n{\"id\":72,\"first_name\":\"Wanda\",\"last_name\":\"Perkins\",\"country\":\"Laos\",\"ip_address\":\"253.202.205.247\",\"email\":\"wperkins@feedfire.org\"},\n{\"id\":73,\"first_name\":\"Annie\",\"last_name\":\"Martinez\",\"country\":\"Macau\",\"ip_address\":\"12.86.26.187\",\"email\":\"amartinez@janyx.edu\"},\n{\"id\":74,\"first_name\":\"Mildred\",\"last_name\":\"Riley\",\"country\":\"Jordan\",\"ip_address\":\"122.193.38.233\",\"email\":\"mriley@skyvu.mil\"},\n{\"id\":75,\"first_name\":\"Judy\",\"last_name\":\"Reyes\",\"country\":\"Montserrat\",\"ip_address\":\"90.53.38.131\",\"email\":\"jreyes@bubbletube.biz\"},\n{\"id\":76,\"first_name\":\"Frances\",\"last_name\":\"Garza\",\"country\":\"Sierra Leone\",\"ip_address\":\"225.91.134.230\",\"email\":\"fgarza@twinder.mil\"},\n{\"id\":77,\"first_name\":\"Henry\",\"last_name\":\"Martinez\",\"country\":\"Norway\",\"ip_address\":\"248.79.218.194\",\"email\":\"hmartinez@blogspan.org\"},\n{\"id\":78,\"first_name\":\"Louise\",\"last_name\":\"Walker\",\"country\":\"Guinea\",\"ip_address\":\"63.231.11.79\",\"email\":\"lwalker@ozu.info\"},\n{\"id\":79,\"first_name\":\"Scott\",\"last_name\":\"Reynolds\",\"country\":\"Armenia\",\"ip_address\":\"32.254.156.45\",\"email\":\"sreynolds@kayveo.com\"},\n{\"id\":80,\"first_name\":\"Lori\",\"last_name\":\"Graham\",\"country\":\"Guatemala\",\"ip_address\":\"224.124.51.229\",\"email\":\"lgraham@fliptune.biz\"},\n{\"id\":81,\"first_name\":\"Doris\",\"last_name\":\"Simpson\",\"country\":\"Angola\",\"ip_address\":\"97.41.220.195\",\"email\":\"dsimpson@zazio.biz\"},\n{\"id\":82,\"first_name\":\"Paul\",\"last_name\":\"Thompson\",\"country\":\"Senegal\",\"ip_address\":\"209.85.23.120\",\"email\":\"pthompson@ooba.biz\"},\n{\"id\":83,\"first_name\":\"Joyce\",\"last_name\":\"Peters\",\"country\":\"Burundi\",\"ip_address\":\"241.211.15.35\",\"email\":\"jpeters@mita.edu\"},\n{\"id\":84,\"first_name\":\"Frank\",\"last_name\":\"Lewis\",\"country\":\"Jamaica\",\"ip_address\":\"44.242.1.182\",\"email\":\"flewis@riffpedia.com\"},\n{\"id\":85,\"first_name\":\"Ann\",\"last_name\":\"Long\",\"country\":\"Sudan\",\"ip_address\":\"28.157.150.166\",\"email\":\"along@flipbug.org\"},\n{\"id\":86,\"first_name\":\"Christopher\",\"last_name\":\"Garrett\",\"country\":\"Tokelau\",\"ip_address\":\"33.1.139.145\",\"email\":\"cgarrett@youfeed.name\"},\n{\"id\":87,\"first_name\":\"Barbara\",\"last_name\":\"Thompson\",\"country\":\"Korea, South\",\"ip_address\":\"204.36.83.216\",\"email\":\"bthompson@wikizz.com\"},\n{\"id\":88,\"first_name\":\"Albert\",\"last_name\":\"Bennett\",\"country\":\"Colombia\",\"ip_address\":\"23.85.194.236\",\"email\":\"abennett@mycat.info\"},\n{\"id\":89,\"first_name\":\"Lillian\",\"last_name\":\"Powell\",\"country\":\"Belgium\",\"ip_address\":\"121.222.67.105\",\"email\":\"lpowell@rhynoodle.biz\"},\n{\"id\":90,\"first_name\":\"Mary\",\"last_name\":\"Sims\",\"country\":\"Spain\",\"ip_address\":\"128.140.40.39\",\"email\":\"msims@chatterpoint.mil\"},\n{\"id\":91,\"first_name\":\"Brian\",\"last_name\":\"Dunn\",\"country\":\"Togo\",\"ip_address\":\"55.154.79.45\",\"email\":\"bdunn@topicstorm.net\"},\n{\"id\":92,\"first_name\":\"Arthur\",\"last_name\":\"Young\",\"country\":\"Mali\",\"ip_address\":\"145.154.211.229\",\"email\":\"ayoung@feedbug.com\"},\n{\"id\":93,\"first_name\":\"Johnny\",\"last_name\":\"Hayes\",\"country\":\"Uruguay\",\"ip_address\":\"174.122.33.82\",\"email\":\"jhayes@dynabox.edu\"},\n{\"id\":94,\"first_name\":\"Ryan\",\"last_name\":\"Sanchez\",\"country\":\"United Kingdom\",\"ip_address\":\"198.130.111.182\",\"email\":\"rsanchez@plambee.biz\"},\n{\"id\":95,\"first_name\":\"Juan\",\"last_name\":\"Garrett\",\"country\":\"Malaysia\",\"ip_address\":\"125.254.68.198\",\"email\":\"jgarrett@oloo.name\"},\n{\"id\":96,\"first_name\":\"Christina\",\"last_name\":\"Matthews\",\"country\":\"Iran\",\"ip_address\":\"183.207.119.4\",\"email\":\"cmatthews@voonte.gov\"},\n{\"id\":97,\"first_name\":\"Timothy\",\"last_name\":\"Taylor\",\"country\":\"Bermuda\",\"ip_address\":\"152.64.69.240\",\"email\":\"ttaylor@jaxworks.edu\"},\n{\"id\":98,\"first_name\":\"Marie\",\"last_name\":\"Ramos\",\"country\":\"Netherlands\",\"ip_address\":\"189.22.125.214\",\"email\":\"mramos@snaptags.gov\"},\n{\"id\":99,\"first_name\":\"Jimmy\",\"last_name\":\"Adams\",\"country\":\"Armenia\",\"ip_address\":\"107.67.178.233\",\"email\":\"jadams@leexo.name\"},\n{\"id\":100,\"first_name\":\"Edward\",\"last_name\":\"Hill\",\"country\":\"Korea, North\",\"ip_address\":\"107.148.55.95\",\"email\":\"ehill@dabz.com\"},\n{\"id\":101,\"first_name\":\"Beverly\",\"last_name\":\"Hernandez\",\"country\":\"Kuwait\",\"ip_address\":\"44.16.39.87\",\"email\":\"bhernandez@twinder.name\"},\n{\"id\":102,\"first_name\":\"Rose\",\"last_name\":\"Lawrence\",\"country\":\"Uruguay\",\"ip_address\":\"71.145.158.88\",\"email\":\"rlawrence@skiba.org\"},\n{\"id\":103,\"first_name\":\"Clarence\",\"last_name\":\"Hudson\",\"country\":\"Guinea\",\"ip_address\":\"235.85.45.161\",\"email\":\"chudson@myworks.gov\"},\n{\"id\":104,\"first_name\":\"Louise\",\"last_name\":\"Rodriguez\",\"country\":\"Vanuatu\",\"ip_address\":\"220.105.132.71\",\"email\":\"lrodriguez@nlounge.biz\"},\n{\"id\":105,\"first_name\":\"Deborah\",\"last_name\":\"Payne\",\"country\":\"Eritrea\",\"ip_address\":\"49.63.134.50\",\"email\":\"dpayne@voolia.edu\"},\n{\"id\":106,\"first_name\":\"Victor\",\"last_name\":\"Morales\",\"country\":\"Mexico\",\"ip_address\":\"246.18.66.68\",\"email\":\"vmorales@youfeed.org\"},\n{\"id\":107,\"first_name\":\"Tina\",\"last_name\":\"Wheeler\",\"country\":\"France\",\"ip_address\":\"60.133.98.109\",\"email\":\"twheeler@camimbo.biz\"},\n{\"id\":108,\"first_name\":\"Christopher\",\"last_name\":\"Banks\",\"country\":\"Turkmenistan\",\"ip_address\":\"40.14.238.123\",\"email\":\"cbanks@meembee.info\"},\n{\"id\":109,\"first_name\":\"Ralph\",\"last_name\":\"Hunt\",\"country\":\"Israel\",\"ip_address\":\"113.233.241.111\",\"email\":\"rhunt@trunyx.gov\"},\n{\"id\":110,\"first_name\":\"Brenda\",\"last_name\":\"Fox\",\"country\":\"Israel\",\"ip_address\":\"114.241.198.161\",\"email\":\"bfox@twitterbridge.biz\"},\n{\"id\":111,\"first_name\":\"Helen\",\"last_name\":\"Wright\",\"country\":\"Czech Republic\",\"ip_address\":\"220.114.68.160\",\"email\":\"hwright@realcube.biz\"},\n{\"id\":112,\"first_name\":\"Maria\",\"last_name\":\"Wagner\",\"country\":\"Russia\",\"ip_address\":\"87.86.105.141\",\"email\":\"mwagner@innotype.net\"},\n{\"id\":113,\"first_name\":\"Roger\",\"last_name\":\"Smith\",\"country\":\"Serbia\",\"ip_address\":\"169.67.215.240\",\"email\":\"rsmith@yadel.edu\"},\n{\"id\":114,\"first_name\":\"Gregory\",\"last_name\":\"Hamilton\",\"country\":\"India\",\"ip_address\":\"220.7.175.184\",\"email\":\"ghamilton@tagcat.name\"},\n{\"id\":115,\"first_name\":\"Dorothy\",\"last_name\":\"Ramos\",\"country\":\"Jamaica\",\"ip_address\":\"52.184.196.106\",\"email\":\"dramos@kwilith.org\"},\n{\"id\":116,\"first_name\":\"Timothy\",\"last_name\":\"Lynch\",\"country\":\"Bouvet Island\",\"ip_address\":\"232.187.22.3\",\"email\":\"tlynch@thoughtstorm.name\"},\n{\"id\":117,\"first_name\":\"Heather\",\"last_name\":\"Nelson\",\"country\":\"Albania\",\"ip_address\":\"108.178.141.142\",\"email\":\"hnelson@dabshots.com\"},\n{\"id\":118,\"first_name\":\"Linda\",\"last_name\":\"Reynolds\",\"country\":\"Switzerland\",\"ip_address\":\"141.189.184.132\",\"email\":\"lreynolds@voonyx.net\"},\n{\"id\":119,\"first_name\":\"Ernest\",\"last_name\":\"Duncan\",\"country\":\"South Georgia and the South Sandwich Islands\",\"ip_address\":\"19.180.56.117\",\"email\":\"eduncan@tagtune.mil\"},\n{\"id\":120,\"first_name\":\"Jack\",\"last_name\":\"Hughes\",\"country\":\"Yugoslavia\",\"ip_address\":\"142.73.75.165\",\"email\":\"jhughes@fiveclub.biz\"},\n{\"id\":121,\"first_name\":\"Benjamin\",\"last_name\":\"Boyd\",\"country\":\"Tuvalu\",\"ip_address\":\"41.40.172.79\",\"email\":\"bboyd@devcast.org\"},\n{\"id\":122,\"first_name\":\"Justin\",\"last_name\":\"Cruz\",\"country\":\"Gambia\",\"ip_address\":\"143.185.152.49\",\"email\":\"jcruz@shufflester.org\"},\n{\"id\":123,\"first_name\":\"Susan\",\"last_name\":\"Smith\",\"country\":\"Cambodia\",\"ip_address\":\"100.89.128.222\",\"email\":\"ssmith@reallinks.info\"},\n{\"id\":124,\"first_name\":\"Keith\",\"last_name\":\"Harvey\",\"country\":\"Burundi\",\"ip_address\":\"122.199.164.91\",\"email\":\"kharvey@shufflester.name\"},\n{\"id\":125,\"first_name\":\"Catherine\",\"last_name\":\"Peterson\",\"country\":\"Laos\",\"ip_address\":\"234.124.235.80\",\"email\":\"cpeterson@zoonoodle.gov\"},\n{\"id\":126,\"first_name\":\"Jimmy\",\"last_name\":\"Hughes\",\"country\":\"Japan\",\"ip_address\":\"97.254.94.120\",\"email\":\"jhughes@yodel.name\"},\n{\"id\":127,\"first_name\":\"Willie\",\"last_name\":\"Cole\",\"country\":\"Slovenia\",\"ip_address\":\"107.155.132.42\",\"email\":\"wcole@fivebridge.mil\"},\n{\"id\":128,\"first_name\":\"Tina\",\"last_name\":\"Martinez\",\"country\":\"Montenegro\",\"ip_address\":\"36.212.183.255\",\"email\":\"tmartinez@skyndu.net\"},\n{\"id\":129,\"first_name\":\"Keith\",\"last_name\":\"Ellis\",\"country\":\"Svalbard and Jan Mayen Islands\",\"ip_address\":\"109.227.29.215\",\"email\":\"kellis@centimia.edu\"},\n{\"id\":130,\"first_name\":\"Adam\",\"last_name\":\"Stephens\",\"country\":\"Indonesia\",\"ip_address\":\"120.68.215.132\",\"email\":\"astephens@fanoodle.gov\"},\n{\"id\":131,\"first_name\":\"Anna\",\"last_name\":\"Evans\",\"country\":\"Heard and McDonald Islands\",\"ip_address\":\"95.87.172.162\",\"email\":\"aevans@devpulse.name\"},\n{\"id\":132,\"first_name\":\"Anna\",\"last_name\":\"Lawson\",\"country\":\"Sweden\",\"ip_address\":\"87.74.102.109\",\"email\":\"alawson@aimbo.net\"},\n{\"id\":133,\"first_name\":\"Paula\",\"last_name\":\"Mills\",\"country\":\"Cyprus\",\"ip_address\":\"114.237.97.212\",\"email\":\"pmills@katz.name\"},\n{\"id\":134,\"first_name\":\"Andrea\",\"last_name\":\"Garza\",\"country\":\"French Southern Territories\",\"ip_address\":\"200.47.122.66\",\"email\":\"agarza@trunyx.edu\"},\n{\"id\":135,\"first_name\":\"Scott\",\"last_name\":\"Ward\",\"country\":\"Bulgaria\",\"ip_address\":\"46.61.237.66\",\"email\":\"sward@eire.biz\"},\n{\"id\":136,\"first_name\":\"Deborah\",\"last_name\":\"Peterson\",\"country\":\"Mauritius\",\"ip_address\":\"105.120.249.51\",\"email\":\"dpeterson@linklinks.gov\"},\n{\"id\":137,\"first_name\":\"Nancy\",\"last_name\":\"Lewis\",\"country\":\"Bhutan\",\"ip_address\":\"238.176.22.202\",\"email\":\"nlewis@zooxo.info\"},\n{\"id\":138,\"first_name\":\"Christina\",\"last_name\":\"Gordon\",\"country\":\"Saudia Arabia\",\"ip_address\":\"81.246.85.179\",\"email\":\"cgordon@realcube.gov\"},\n{\"id\":139,\"first_name\":\"Edward\",\"last_name\":\"Armstrong\",\"country\":\"Martinique\",\"ip_address\":\"22.31.91.219\",\"email\":\"earmstrong@devshare.edu\"},\n{\"id\":140,\"first_name\":\"Joseph\",\"last_name\":\"Martin\",\"country\":\"Bhutan\",\"ip_address\":\"233.12.244.248\",\"email\":\"jmartin@youfeed.mil\"},\n{\"id\":141,\"first_name\":\"Kenneth\",\"last_name\":\"Morris\",\"country\":\"Tajikistan\",\"ip_address\":\"221.194.219.149\",\"email\":\"kmorris@ntags.mil\"},\n{\"id\":142,\"first_name\":\"Norma\",\"last_name\":\"Wagner\",\"country\":\"Jersey\",\"ip_address\":\"23.215.235.186\",\"email\":\"nwagner@kwinu.org\"},\n{\"id\":143,\"first_name\":\"Steven\",\"last_name\":\"Walker\",\"country\":\"American Samoa\",\"ip_address\":\"196.230.161.191\",\"email\":\"swalker@eare.gov\"},\n{\"id\":144,\"first_name\":\"Wayne\",\"last_name\":\"Gonzalez\",\"country\":\"Afghanistan\",\"ip_address\":\"125.185.14.148\",\"email\":\"wgonzalez@oyoyo.com\"},\n{\"id\":145,\"first_name\":\"Janet\",\"last_name\":\"Hicks\",\"country\":\"Montserrat\",\"ip_address\":\"157.235.116.76\",\"email\":\"jhicks@flipopia.mil\"},\n{\"id\":146,\"first_name\":\"Carolyn\",\"last_name\":\"Edwards\",\"country\":\"Estonia\",\"ip_address\":\"45.76.131.194\",\"email\":\"cedwards@zazio.gov\"},\n{\"id\":147,\"first_name\":\"Peter\",\"last_name\":\"Ferguson\",\"country\":\"Jersey\",\"ip_address\":\"211.243.169.245\",\"email\":\"pferguson@viva.gov\"},\n{\"id\":148,\"first_name\":\"Lois\",\"last_name\":\"Fernandez\",\"country\":\"Bahamas\",\"ip_address\":\"90.225.182.174\",\"email\":\"lfernandez@quinu.info\"},\n{\"id\":149,\"first_name\":\"Melissa\",\"last_name\":\"Hughes\",\"country\":\"Libya\",\"ip_address\":\"180.238.4.85\",\"email\":\"mhughes@jetpulse.name\"},\n{\"id\":150,\"first_name\":\"Jerry\",\"last_name\":\"Bailey\",\"country\":\"Timor-Leste\",\"ip_address\":\"112.212.255.87\",\"email\":\"jbailey@geba.net\"},\n{\"id\":151,\"first_name\":\"Janet\",\"last_name\":\"Ray\",\"country\":\"Kyrgyzstan\",\"ip_address\":\"251.87.216.14\",\"email\":\"jray@yacero.gov\"},\n{\"id\":152,\"first_name\":\"Arthur\",\"last_name\":\"Harvey\",\"country\":\"Saint Helena\",\"ip_address\":\"235.84.149.73\",\"email\":\"aharvey@wordify.gov\"},\n{\"id\":153,\"first_name\":\"Heather\",\"last_name\":\"Alvarez\",\"country\":\"India\",\"ip_address\":\"104.226.193.253\",\"email\":\"halvarez@skajo.edu\"},\n{\"id\":154,\"first_name\":\"Joyce\",\"last_name\":\"Hicks\",\"country\":\"Timor-Leste\",\"ip_address\":\"71.118.151.168\",\"email\":\"jhicks@demivee.edu\"},\n{\"id\":155,\"first_name\":\"Brandon\",\"last_name\":\"Hill\",\"country\":\"British Indian Ocean Territory\",\"ip_address\":\"125.138.25.111\",\"email\":\"bhill@innojam.gov\"},\n{\"id\":156,\"first_name\":\"Martin\",\"last_name\":\"Gonzales\",\"country\":\"Gibraltar\",\"ip_address\":\"156.132.44.34\",\"email\":\"mgonzales@realcube.org\"},\n{\"id\":157,\"first_name\":\"Matthew\",\"last_name\":\"Montgomery\",\"country\":\"Singapore\",\"ip_address\":\"7.208.74.164\",\"email\":\"mmontgomery@devshare.net\"},\n{\"id\":158,\"first_name\":\"Dennis\",\"last_name\":\"Phillips\",\"country\":\"Italy\",\"ip_address\":\"187.187.218.105\",\"email\":\"dphillips@fadeo.name\"},\n{\"id\":159,\"first_name\":\"Lillian\",\"last_name\":\"Bradley\",\"country\":\"Wallis and Futuna Islands\",\"ip_address\":\"12.168.149.72\",\"email\":\"lbradley@feedmix.org\"},\n{\"id\":160,\"first_name\":\"Louis\",\"last_name\":\"Long\",\"country\":\"Nicaragua\",\"ip_address\":\"78.184.140.134\",\"email\":\"llong@topicstorm.org\"},\n{\"id\":161,\"first_name\":\"Walter\",\"last_name\":\"Turner\",\"country\":\"Qatar\",\"ip_address\":\"144.95.3.32\",\"email\":\"wturner@oyonder.org\"},\n{\"id\":162,\"first_name\":\"Bonnie\",\"last_name\":\"Garcia\",\"country\":\"Switzerland\",\"ip_address\":\"216.97.171.69\",\"email\":\"bgarcia@devify.mil\"},\n{\"id\":163,\"first_name\":\"Gregory\",\"last_name\":\"Perez\",\"country\":\"Kiribati\",\"ip_address\":\"236.77.20.56\",\"email\":\"gperez@meejo.net\"},\n{\"id\":164,\"first_name\":\"George\",\"last_name\":\"Carr\",\"country\":\"Dominican Republic\",\"ip_address\":\"180.114.77.213\",\"email\":\"gcarr@fivechat.info\"},\n{\"id\":165,\"first_name\":\"Rebecca\",\"last_name\":\"Gibson\",\"country\":\"Ascension Island\",\"ip_address\":\"147.50.245.151\",\"email\":\"rgibson@tazz.biz\"},\n{\"id\":166,\"first_name\":\"Brenda\",\"last_name\":\"Vasquez\",\"country\":\"Botswana\",\"ip_address\":\"79.122.251.194\",\"email\":\"bvasquez@feednation.biz\"},\n{\"id\":167,\"first_name\":\"Patrick\",\"last_name\":\"Mason\",\"country\":\"Barbados\",\"ip_address\":\"29.86.160.0\",\"email\":\"pmason@izio.edu\"},\n{\"id\":168,\"first_name\":\"Gerald\",\"last_name\":\"Barnes\",\"country\":\"Bahrain\",\"ip_address\":\"7.222.66.132\",\"email\":\"gbarnes@gabvine.biz\"},\n{\"id\":169,\"first_name\":\"Mark\",\"last_name\":\"Ward\",\"country\":\"Jersey\",\"ip_address\":\"45.38.158.14\",\"email\":\"mward@mydeo.info\"},\n{\"id\":170,\"first_name\":\"Craig\",\"last_name\":\"Howard\",\"country\":\"Hong Kong\",\"ip_address\":\"130.185.7.149\",\"email\":\"choward@topiclounge.edu\"},\n{\"id\":171,\"first_name\":\"Ernest\",\"last_name\":\"Jacobs\",\"country\":\"United Arab Emirates\",\"ip_address\":\"74.162.33.118\",\"email\":\"ejacobs@demimbu.name\"},\n{\"id\":172,\"first_name\":\"Mary\",\"last_name\":\"Reid\",\"country\":\"Nicaragua\",\"ip_address\":\"245.194.179.34\",\"email\":\"mreid@snaptags.org\"},\n{\"id\":173,\"first_name\":\"Michelle\",\"last_name\":\"Gray\",\"country\":\"Zimbabwe\",\"ip_address\":\"80.138.83.10\",\"email\":\"mgray@dynazzy.org\"},\n{\"id\":174,\"first_name\":\"Christopher\",\"last_name\":\"Boyd\",\"country\":\"South Georgia and the South Sandwich Islands\",\"ip_address\":\"170.249.225.125\",\"email\":\"cboyd@edgeclub.net\"},\n{\"id\":175,\"first_name\":\"Deborah\",\"last_name\":\"Foster\",\"country\":\"Iran\",\"ip_address\":\"199.0.13.243\",\"email\":\"dfoster@kazio.com\"},\n{\"id\":176,\"first_name\":\"Ann\",\"last_name\":\"Hunter\",\"country\":\"Saint Martin\",\"ip_address\":\"40.233.158.205\",\"email\":\"ahunter@centizu.info\"},\n{\"id\":177,\"first_name\":\"Katherine\",\"last_name\":\"Hernandez\",\"country\":\"Burundi\",\"ip_address\":\"15.106.61.53\",\"email\":\"khernandez@avamm.name\"},\n{\"id\":178,\"first_name\":\"Frances\",\"last_name\":\"Scott\",\"country\":\"Jersey\",\"ip_address\":\"70.32.105.3\",\"email\":\"fscott@eare.edu\"},\n{\"id\":179,\"first_name\":\"Eric\",\"last_name\":\"Simpson\",\"country\":\"Moldova\",\"ip_address\":\"226.188.160.209\",\"email\":\"esimpson@trunyx.name\"},\n{\"id\":180,\"first_name\":\"Howard\",\"last_name\":\"Murphy\",\"country\":\"Bouvet Island\",\"ip_address\":\"245.173.27.170\",\"email\":\"hmurphy@photojam.edu\"},\n{\"id\":181,\"first_name\":\"Chris\",\"last_name\":\"Taylor\",\"country\":\"American Samoa\",\"ip_address\":\"185.246.86.45\",\"email\":\"ctaylor@myworks.biz\"},\n{\"id\":182,\"first_name\":\"Helen\",\"last_name\":\"Welch\",\"country\":\"Grenada\",\"ip_address\":\"90.253.209.214\",\"email\":\"hwelch@oyope.edu\"},\n{\"id\":183,\"first_name\":\"David\",\"last_name\":\"Bennett\",\"country\":\"Central African Republic\",\"ip_address\":\"75.8.249.248\",\"email\":\"dbennett@devshare.info\"},\n{\"id\":184,\"first_name\":\"Albert\",\"last_name\":\"Shaw\",\"country\":\"Libya\",\"ip_address\":\"32.54.150.57\",\"email\":\"ashaw@zoomdog.edu\"},\n{\"id\":185,\"first_name\":\"Joan\",\"last_name\":\"Stone\",\"country\":\"Barbados\",\"ip_address\":\"88.213.158.253\",\"email\":\"jstone@pixoboo.gov\"},\n{\"id\":186,\"first_name\":\"Helen\",\"last_name\":\"Barnes\",\"country\":\"Haiti\",\"ip_address\":\"200.74.252.166\",\"email\":\"hbarnes@eare.info\"},\n{\"id\":187,\"first_name\":\"Henry\",\"last_name\":\"Fowler\",\"country\":\"Kuwait\",\"ip_address\":\"242.45.57.25\",\"email\":\"hfowler@quinu.com\"},\n{\"id\":188,\"first_name\":\"Gloria\",\"last_name\":\"Bradley\",\"country\":\"Antarctica\",\"ip_address\":\"3.26.101.251\",\"email\":\"gbradley@omba.name\"},\n{\"id\":189,\"first_name\":\"Lawrence\",\"last_name\":\"Turner\",\"country\":\"Antarctica\",\"ip_address\":\"185.219.200.122\",\"email\":\"lturner@mydo.mil\"},\n{\"id\":190,\"first_name\":\"Bobby\",\"last_name\":\"Richardson\",\"country\":\"Syria\",\"ip_address\":\"77.119.66.183\",\"email\":\"brichardson@feedfish.org\"},\n{\"id\":191,\"first_name\":\"Evelyn\",\"last_name\":\"Bryant\",\"country\":\"Somalia\",\"ip_address\":\"35.134.188.168\",\"email\":\"ebryant@yambee.mil\"},\n{\"id\":192,\"first_name\":\"Harry\",\"last_name\":\"Frazier\",\"country\":\"\\u00c5land\",\"ip_address\":\"42.58.17.200\",\"email\":\"hfrazier@digitube.gov\"},\n{\"id\":193,\"first_name\":\"Brenda\",\"last_name\":\"Scott\",\"country\":\"Italy\",\"ip_address\":\"20.205.86.52\",\"email\":\"bscott@centimia.info\"},\n{\"id\":194,\"first_name\":\"Carlos\",\"last_name\":\"Boyd\",\"country\":\"Reunion\",\"ip_address\":\"47.136.168.32\",\"email\":\"cboyd@buzzster.com\"},\n{\"id\":195,\"first_name\":\"Jesse\",\"last_name\":\"Smith\",\"country\":\"Germany\",\"ip_address\":\"228.208.104.87\",\"email\":\"jsmith@bluejam.edu\"},\n{\"id\":196,\"first_name\":\"Anna\",\"last_name\":\"Montgomery\",\"country\":\"Mexico\",\"ip_address\":\"169.114.240.223\",\"email\":\"amontgomery@viva.edu\"},\n{\"id\":197,\"first_name\":\"Susan\",\"last_name\":\"Burton\",\"country\":\"Saint Pierre and Miquelon\",\"ip_address\":\"43.88.173.145\",\"email\":\"sburton@chatterpoint.gov\"},\n{\"id\":198,\"first_name\":\"Stephen\",\"last_name\":\"Garcia\",\"country\":\"Liechtenstein\",\"ip_address\":\"174.160.72.220\",\"email\":\"sgarcia@camido.org\"},\n{\"id\":199,\"first_name\":\"Carol\",\"last_name\":\"Hudson\",\"country\":\"Benin\",\"ip_address\":\"167.212.206.35\",\"email\":\"chudson@skilith.com\"},\n{\"id\":200,\"first_name\":\"Christopher\",\"last_name\":\"Matthews\",\"country\":\"Egypt\",\"ip_address\":\"184.152.240.61\",\"email\":\"cmatthews@lazzy.biz\"},\n{\"id\":201,\"first_name\":\"Albert\",\"last_name\":\"Walker\",\"country\":\"Albania\",\"ip_address\":\"10.223.222.221\",\"email\":\"awalker@leenti.name\"},\n{\"id\":202,\"first_name\":\"Jennifer\",\"last_name\":\"Brown\",\"country\":\"Madagascar\",\"ip_address\":\"196.76.22.211\",\"email\":\"jbrown@shuffletag.biz\"},\n{\"id\":203,\"first_name\":\"Jacqueline\",\"last_name\":\"Kim\",\"country\":\"Dominica\",\"ip_address\":\"55.146.79.108\",\"email\":\"jkim@roomm.edu\"},\n{\"id\":204,\"first_name\":\"Roger\",\"last_name\":\"Kelley\",\"country\":\"Gabon\",\"ip_address\":\"211.188.19.70\",\"email\":\"rkelley@gabspot.net\"},\n{\"id\":205,\"first_name\":\"Lori\",\"last_name\":\"Dunn\",\"country\":\"Zambia\",\"ip_address\":\"190.21.222.10\",\"email\":\"ldunn@realbridge.gov\"},\n{\"id\":206,\"first_name\":\"Matthew\",\"last_name\":\"Sullivan\",\"country\":\"China\",\"ip_address\":\"120.102.87.87\",\"email\":\"msullivan@dabfeed.biz\"},\n{\"id\":207,\"first_name\":\"Maria\",\"last_name\":\"Adams\",\"country\":\"Heard and McDonald Islands\",\"ip_address\":\"217.77.133.141\",\"email\":\"madams@jabbertype.net\"},\n{\"id\":208,\"first_name\":\"Kathy\",\"last_name\":\"Lawrence\",\"country\":\"Uganda\",\"ip_address\":\"72.209.161.235\",\"email\":\"klawrence@myworks.info\"},\n{\"id\":209,\"first_name\":\"Paul\",\"last_name\":\"Ross\",\"country\":\"Montserrat\",\"ip_address\":\"218.68.78.121\",\"email\":\"pross@tagtune.info\"},\n{\"id\":210,\"first_name\":\"Melissa\",\"last_name\":\"Frazier\",\"country\":\"Malawi\",\"ip_address\":\"33.89.195.167\",\"email\":\"mfrazier@twimbo.info\"},\n{\"id\":211,\"first_name\":\"Christopher\",\"last_name\":\"Fowler\",\"country\":\"Mexico\",\"ip_address\":\"213.147.3.84\",\"email\":\"cfowler@mudo.mil\"},\n{\"id\":212,\"first_name\":\"Mary\",\"last_name\":\"Clark\",\"country\":\"Indonesia\",\"ip_address\":\"10.200.120.33\",\"email\":\"mclark@linklinks.com\"},\n{\"id\":213,\"first_name\":\"Russell\",\"last_name\":\"Carpenter\",\"country\":\"Dominica\",\"ip_address\":\"189.10.218.182\",\"email\":\"rcarpenter@skinte.name\"},\n{\"id\":214,\"first_name\":\"Heather\",\"last_name\":\"Franklin\",\"country\":\"Norfolk Island\",\"ip_address\":\"155.153.135.171\",\"email\":\"hfranklin@meeveo.biz\"},\n{\"id\":215,\"first_name\":\"Henry\",\"last_name\":\"Carpenter\",\"country\":\"Martinique\",\"ip_address\":\"99.181.13.8\",\"email\":\"hcarpenter@zoombeat.biz\"},\n{\"id\":216,\"first_name\":\"Victor\",\"last_name\":\"Williams\",\"country\":\"Ghana\",\"ip_address\":\"33.1.185.231\",\"email\":\"vwilliams@gigazoom.edu\"},\n{\"id\":217,\"first_name\":\"Russell\",\"last_name\":\"Gardner\",\"country\":\"Bolivia\",\"ip_address\":\"109.209.250.210\",\"email\":\"rgardner@mymm.info\"},\n{\"id\":218,\"first_name\":\"Jean\",\"last_name\":\"Jones\",\"country\":\"Saint Martin\",\"ip_address\":\"79.196.168.20\",\"email\":\"jjones@voomm.com\"},\n{\"id\":219,\"first_name\":\"Robert\",\"last_name\":\"Stephens\",\"country\":\"Gabon\",\"ip_address\":\"94.135.177.184\",\"email\":\"rstephens@dabshots.info\"},\n{\"id\":220,\"first_name\":\"John\",\"last_name\":\"Jacobs\",\"country\":\"Italy\",\"ip_address\":\"19.102.92.219\",\"email\":\"jjacobs@youfeed.edu\"},\n{\"id\":221,\"first_name\":\"Sean\",\"last_name\":\"Black\",\"country\":\"Iran\",\"ip_address\":\"4.86.134.160\",\"email\":\"sblack@bubbletube.mil\"},\n{\"id\":222,\"first_name\":\"Diana\",\"last_name\":\"Cook\",\"country\":\"Myanmar\",\"ip_address\":\"183.89.82.197\",\"email\":\"dcook@avamba.org\"},\n{\"id\":223,\"first_name\":\"Frank\",\"last_name\":\"White\",\"country\":\"Singapore\",\"ip_address\":\"22.184.173.254\",\"email\":\"fwhite@jaxbean.info\"},\n{\"id\":224,\"first_name\":\"Edward\",\"last_name\":\"Warren\",\"country\":\"Guinea\",\"ip_address\":\"92.80.97.165\",\"email\":\"ewarren@trilia.info\"},\n{\"id\":225,\"first_name\":\"Jimmy\",\"last_name\":\"Clark\",\"country\":\"Myanmar\",\"ip_address\":\"202.61.242.117\",\"email\":\"jclark@zooxo.biz\"},\n{\"id\":226,\"first_name\":\"Shawn\",\"last_name\":\"Stewart\",\"country\":\"Jersey\",\"ip_address\":\"219.147.38.192\",\"email\":\"sstewart@quaxo.info\"},\n{\"id\":227,\"first_name\":\"Joan\",\"last_name\":\"Holmes\",\"country\":\"Burkina Faso\",\"ip_address\":\"183.254.203.154\",\"email\":\"jholmes@voolia.net\"},\n{\"id\":228,\"first_name\":\"Karen\",\"last_name\":\"Simpson\",\"country\":\"Macedonia\",\"ip_address\":\"61.1.125.247\",\"email\":\"ksimpson@feedmix.com\"},\n{\"id\":229,\"first_name\":\"Michelle\",\"last_name\":\"Shaw\",\"country\":\"Malaysia\",\"ip_address\":\"172.62.217.26\",\"email\":\"mshaw@quimba.biz\"},\n{\"id\":230,\"first_name\":\"Barbara\",\"last_name\":\"Snyder\",\"country\":\"Oman\",\"ip_address\":\"4.254.100.252\",\"email\":\"bsnyder@bubblemix.edu\"},\n{\"id\":231,\"first_name\":\"Susan\",\"last_name\":\"Harrison\",\"country\":\"Zimbabwe\",\"ip_address\":\"222.218.42.122\",\"email\":\"sharrison@blogtags.com\"},\n{\"id\":232,\"first_name\":\"Linda\",\"last_name\":\"Watkins\",\"country\":\"Congo, Republic of\",\"ip_address\":\"107.219.253.115\",\"email\":\"lwatkins@yacero.edu\"},\n{\"id\":233,\"first_name\":\"Earl\",\"last_name\":\"Edwards\",\"country\":\"Croatia\",\"ip_address\":\"130.159.184.220\",\"email\":\"eedwards@jabbersphere.edu\"},\n{\"id\":234,\"first_name\":\"Arthur\",\"last_name\":\"Phillips\",\"country\":\"Norway\",\"ip_address\":\"120.199.210.157\",\"email\":\"aphillips@mymm.name\"},\n{\"id\":235,\"first_name\":\"Linda\",\"last_name\":\"Ferguson\",\"country\":\"Iraq\",\"ip_address\":\"177.239.65.210\",\"email\":\"lferguson@fatz.org\"},\n{\"id\":236,\"first_name\":\"Norma\",\"last_name\":\"Chavez\",\"country\":\"Chile\",\"ip_address\":\"49.197.72.39\",\"email\":\"nchavez@yambee.org\"},\n{\"id\":237,\"first_name\":\"Justin\",\"last_name\":\"Porter\",\"country\":\"Moldova\",\"ip_address\":\"73.219.21.24\",\"email\":\"jporter@voomm.gov\"},\n{\"id\":238,\"first_name\":\"Nancy\",\"last_name\":\"Moreno\",\"country\":\"Kazakhstan\",\"ip_address\":\"137.164.166.228\",\"email\":\"nmoreno@gabtype.com\"},\n{\"id\":239,\"first_name\":\"Ernest\",\"last_name\":\"Wells\",\"country\":\"Israel\",\"ip_address\":\"64.104.252.155\",\"email\":\"ewells@photobug.info\"},\n{\"id\":240,\"first_name\":\"Lillian\",\"last_name\":\"Freeman\",\"country\":\"Paraguay\",\"ip_address\":\"32.60.38.75\",\"email\":\"lfreeman@bluejam.biz\"},\n{\"id\":241,\"first_name\":\"Paul\",\"last_name\":\"Hunter\",\"country\":\"Macedonia\",\"ip_address\":\"40.13.119.79\",\"email\":\"phunter@meejo.biz\"},\n{\"id\":242,\"first_name\":\"Clarence\",\"last_name\":\"Rivera\",\"country\":\"Gambia\",\"ip_address\":\"162.135.176.209\",\"email\":\"crivera@latz.gov\"},\n{\"id\":243,\"first_name\":\"Gregory\",\"last_name\":\"Medina\",\"country\":\"Samoa\",\"ip_address\":\"178.152.40.31\",\"email\":\"gmedina@rhyzio.gov\"},\n{\"id\":244,\"first_name\":\"Aaron\",\"last_name\":\"Hansen\",\"country\":\"Chile\",\"ip_address\":\"175.254.244.156\",\"email\":\"ahansen@eidel.gov\"},\n{\"id\":245,\"first_name\":\"Nicole\",\"last_name\":\"Day\",\"country\":\"Afghanistan\",\"ip_address\":\"96.226.13.136\",\"email\":\"nday@skyndu.com\"},\n{\"id\":246,\"first_name\":\"Bobby\",\"last_name\":\"Harvey\",\"country\":\"Monaco\",\"ip_address\":\"193.191.16.250\",\"email\":\"bharvey@meejo.name\"},\n{\"id\":247,\"first_name\":\"Gerald\",\"last_name\":\"Weaver\",\"country\":\"Cook Islands\",\"ip_address\":\"207.45.200.7\",\"email\":\"gweaver@myworks.net\"},\n{\"id\":248,\"first_name\":\"Sharon\",\"last_name\":\"Stewart\",\"country\":\"Liberia\",\"ip_address\":\"210.249.228.249\",\"email\":\"sstewart@wordify.org\"},\n{\"id\":249,\"first_name\":\"Judy\",\"last_name\":\"Berry\",\"country\":\"San Marino\",\"ip_address\":\"11.33.24.180\",\"email\":\"jberry@photojam.biz\"},\n{\"id\":250,\"first_name\":\"Willie\",\"last_name\":\"King\",\"country\":\"Guernsey\",\"ip_address\":\"114.151.52.235\",\"email\":\"wking@babbleset.name\"},\n{\"id\":251,\"first_name\":\"George\",\"last_name\":\"Kennedy\",\"country\":\"Mozambique\",\"ip_address\":\"11.26.199.71\",\"email\":\"gkennedy@linklinks.name\"},\n{\"id\":252,\"first_name\":\"Joan\",\"last_name\":\"Smith\",\"country\":\"Turks and Caicos Islands\",\"ip_address\":\"163.99.192.113\",\"email\":\"jsmith@minyx.mil\"},\n{\"id\":253,\"first_name\":\"Jane\",\"last_name\":\"Wheeler\",\"country\":\"Singapore\",\"ip_address\":\"216.61.90.76\",\"email\":\"jwheeler@zoomlounge.name\"},\n{\"id\":254,\"first_name\":\"Phyllis\",\"last_name\":\"Ford\",\"country\":\"Kiribati\",\"ip_address\":\"251.166.75.37\",\"email\":\"pford@eimbee.gov\"},\n{\"id\":255,\"first_name\":\"Sean\",\"last_name\":\"Garrett\",\"country\":\"Ethiopia\",\"ip_address\":\"8.116.252.165\",\"email\":\"sgarrett@youfeed.gov\"},\n{\"id\":256,\"first_name\":\"Gloria\",\"last_name\":\"Sanders\",\"country\":\"Cameroon\",\"ip_address\":\"183.31.73.35\",\"email\":\"gsanders@skipstorm.com\"},\n{\"id\":257,\"first_name\":\"Pamela\",\"last_name\":\"Brown\",\"country\":\"Bolivia\",\"ip_address\":\"43.200.237.152\",\"email\":\"pbrown@meevee.edu\"},\n{\"id\":258,\"first_name\":\"Brandon\",\"last_name\":\"Graham\",\"country\":\"Bolivia\",\"ip_address\":\"154.185.48.156\",\"email\":\"bgraham@bluezoom.name\"},\n{\"id\":259,\"first_name\":\"Linda\",\"last_name\":\"Nelson\",\"country\":\"Indonesia\",\"ip_address\":\"10.152.242.65\",\"email\":\"lnelson@vimbo.mil\"},\n{\"id\":260,\"first_name\":\"Margaret\",\"last_name\":\"Burns\",\"country\":\"Northern Mariana Islands\",\"ip_address\":\"59.188.100.193\",\"email\":\"mburns@shuffledrive.com\"},\n{\"id\":261,\"first_name\":\"Walter\",\"last_name\":\"Wallace\",\"country\":\"Hong Kong\",\"ip_address\":\"133.0.128.153\",\"email\":\"wwallace@thoughtbeat.org\"},\n{\"id\":262,\"first_name\":\"Kimberly\",\"last_name\":\"Cooper\",\"country\":\"China\",\"ip_address\":\"97.219.237.213\",\"email\":\"kcooper@realpoint.mil\"},\n{\"id\":263,\"first_name\":\"Jeremy\",\"last_name\":\"Price\",\"country\":\"Georgia\",\"ip_address\":\"194.193.245.104\",\"email\":\"jprice@quinu.gov\"},\n{\"id\":264,\"first_name\":\"Heather\",\"last_name\":\"Stanley\",\"country\":\"Benin\",\"ip_address\":\"14.151.139.206\",\"email\":\"hstanley@ailane.info\"},\n{\"id\":265,\"first_name\":\"Dorothy\",\"last_name\":\"Rodriguez\",\"country\":\"Lebanon\",\"ip_address\":\"190.233.97.222\",\"email\":\"drodriguez@devshare.gov\"},\n{\"id\":266,\"first_name\":\"Ryan\",\"last_name\":\"Arnold\",\"country\":\"Taiwan\",\"ip_address\":\"196.92.29.207\",\"email\":\"rarnold@fanoodle.mil\"},\n{\"id\":267,\"first_name\":\"Juan\",\"last_name\":\"Wright\",\"country\":\"Heard and McDonald Islands\",\"ip_address\":\"147.30.105.76\",\"email\":\"jwright@yoveo.info\"},\n{\"id\":268,\"first_name\":\"Helen\",\"last_name\":\"Lane\",\"country\":\"Greenland\",\"ip_address\":\"126.242.90.163\",\"email\":\"hlane@flipbug.mil\"},\n{\"id\":269,\"first_name\":\"Randy\",\"last_name\":\"Burton\",\"country\":\"Greece\",\"ip_address\":\"23.108.234.181\",\"email\":\"rburton@brainsphere.biz\"},\n{\"id\":270,\"first_name\":\"George\",\"last_name\":\"Foster\",\"country\":\"Singapore\",\"ip_address\":\"109.179.43.237\",\"email\":\"gfoster@topicblab.com\"},\n{\"id\":271,\"first_name\":\"Tina\",\"last_name\":\"James\",\"country\":\"Romania\",\"ip_address\":\"220.179.93.83\",\"email\":\"tjames@shufflester.info\"},\n{\"id\":272,\"first_name\":\"Peter\",\"last_name\":\"Perez\",\"country\":\"Denmark\",\"ip_address\":\"209.253.141.235\",\"email\":\"pperez@ailane.info\"},\n{\"id\":273,\"first_name\":\"Stephanie\",\"last_name\":\"Lee\",\"country\":\"Kyrgyzstan\",\"ip_address\":\"42.186.99.77\",\"email\":\"slee@realcube.edu\"},\n{\"id\":274,\"first_name\":\"Sharon\",\"last_name\":\"Coleman\",\"country\":\"Switzerland\",\"ip_address\":\"151.133.90.36\",\"email\":\"scoleman@flashdog.info\"},\n{\"id\":275,\"first_name\":\"Robert\",\"last_name\":\"Garza\",\"country\":\"Malta\",\"ip_address\":\"180.3.65.253\",\"email\":\"rgarza@dabshots.net\"},\n{\"id\":276,\"first_name\":\"Nicholas\",\"last_name\":\"Martin\",\"country\":\"US Minor Outlying Islands\",\"ip_address\":\"115.112.232.10\",\"email\":\"nmartin@meezzy.edu\"},\n{\"id\":277,\"first_name\":\"Ruby\",\"last_name\":\"Mcdonald\",\"country\":\"Puerto Rico\",\"ip_address\":\"122.185.183.175\",\"email\":\"rmcdonald@feedspan.name\"},\n{\"id\":278,\"first_name\":\"Betty\",\"last_name\":\"Willis\",\"country\":\"Burundi\",\"ip_address\":\"31.254.112.120\",\"email\":\"bwillis@kaymbo.gov\"},\n{\"id\":279,\"first_name\":\"Peter\",\"last_name\":\"Washington\",\"country\":\"San Marino\",\"ip_address\":\"215.123.241.41\",\"email\":\"pwashington@skaboo.net\"},\n{\"id\":280,\"first_name\":\"Debra\",\"last_name\":\"Rivera\",\"country\":\"Azerbaijan\",\"ip_address\":\"159.154.173.131\",\"email\":\"drivera@tagopia.edu\"},\n{\"id\":281,\"first_name\":\"Irene\",\"last_name\":\"James\",\"country\":\"Nicaragua\",\"ip_address\":\"100.185.128.213\",\"email\":\"ijames@quatz.com\"},\n{\"id\":282,\"first_name\":\"Daniel\",\"last_name\":\"Hicks\",\"country\":\"French Guiana\",\"ip_address\":\"95.157.183.150\",\"email\":\"dhicks@tagtune.edu\"},\n{\"id\":283,\"first_name\":\"Ann\",\"last_name\":\"Cook\",\"country\":\"Nicaragua\",\"ip_address\":\"180.238.255.208\",\"email\":\"acook@jaxbean.info\"},\n{\"id\":284,\"first_name\":\"Sara\",\"last_name\":\"Alvarez\",\"country\":\"Nepal\",\"ip_address\":\"37.218.112.174\",\"email\":\"salvarez@jazzy.name\"},\n{\"id\":285,\"first_name\":\"Frances\",\"last_name\":\"Austin\",\"country\":\"Canada\",\"ip_address\":\"235.235.61.134\",\"email\":\"faustin@feedfish.info\"},\n{\"id\":286,\"first_name\":\"Donna\",\"last_name\":\"Meyer\",\"country\":\"Armenia\",\"ip_address\":\"111.47.212.13\",\"email\":\"dmeyer@mynte.edu\"},\n{\"id\":287,\"first_name\":\"Irene\",\"last_name\":\"Hansen\",\"country\":\"Estonia\",\"ip_address\":\"125.210.150.155\",\"email\":\"ihansen@skivee.biz\"},\n{\"id\":288,\"first_name\":\"Denise\",\"last_name\":\"Bailey\",\"country\":\"British Virgin Islands\",\"ip_address\":\"85.104.120.26\",\"email\":\"dbailey@skyba.com\"},\n{\"id\":289,\"first_name\":\"Frank\",\"last_name\":\"Martinez\",\"country\":\"Namibia\",\"ip_address\":\"73.126.228.210\",\"email\":\"fmartinez@babbleblab.com\"},\n{\"id\":290,\"first_name\":\"Jack\",\"last_name\":\"Medina\",\"country\":\"Pitcairn Island\",\"ip_address\":\"45.82.55.156\",\"email\":\"jmedina@reallinks.org\"},\n{\"id\":291,\"first_name\":\"Paul\",\"last_name\":\"Burns\",\"country\":\"Suriname\",\"ip_address\":\"239.27.135.113\",\"email\":\"pburns@einti.net\"},\n{\"id\":292,\"first_name\":\"Eric\",\"last_name\":\"Kelly\",\"country\":\"Congo, Democratic Republic of\",\"ip_address\":\"237.217.111.147\",\"email\":\"ekelly@dynava.biz\"},\n{\"id\":293,\"first_name\":\"Roger\",\"last_name\":\"Ferguson\",\"country\":\"Seychelles\",\"ip_address\":\"148.130.4.207\",\"email\":\"rferguson@eidel.info\"},\n{\"id\":294,\"first_name\":\"Mary\",\"last_name\":\"Castillo\",\"country\":\"Guatemala\",\"ip_address\":\"25.56.200.161\",\"email\":\"mcastillo@kayveo.com\"},\n{\"id\":295,\"first_name\":\"Jason\",\"last_name\":\"Flores\",\"country\":\"Yemen\",\"ip_address\":\"87.3.4.227\",\"email\":\"jflores@ainyx.gov\"},\n{\"id\":296,\"first_name\":\"Robert\",\"last_name\":\"Gilbert\",\"country\":\"Saint Kitts and Nevis\",\"ip_address\":\"110.135.245.247\",\"email\":\"rgilbert@mybuzz.net\"},\n{\"id\":297,\"first_name\":\"Daniel\",\"last_name\":\"Lawrence\",\"country\":\"Jordan\",\"ip_address\":\"48.40.101.187\",\"email\":\"dlawrence@skiptube.com\"},\n{\"id\":298,\"first_name\":\"Phyllis\",\"last_name\":\"Peterson\",\"country\":\"Nigeria\",\"ip_address\":\"113.21.76.57\",\"email\":\"ppeterson@edgetag.org\"},\n{\"id\":299,\"first_name\":\"Gary\",\"last_name\":\"Gilbert\",\"country\":\"Peru\",\"ip_address\":\"20.56.237.105\",\"email\":\"ggilbert@livefish.info\"},\n{\"id\":300,\"first_name\":\"Nicole\",\"last_name\":\"Wallace\",\"country\":\"Cook Islands\",\"ip_address\":\"13.170.93.129\",\"email\":\"nwallace@mycat.biz\"},\n{\"id\":301,\"first_name\":\"Aaron\",\"last_name\":\"Hansen\",\"country\":\"Guatemala\",\"ip_address\":\"86.91.197.7\",\"email\":\"ahansen@vimbo.gov\"},\n{\"id\":302,\"first_name\":\"Frances\",\"last_name\":\"Garza\",\"country\":\"Pakistan\",\"ip_address\":\"117.223.43.196\",\"email\":\"fgarza@roombo.gov\"},\n{\"id\":303,\"first_name\":\"Steven\",\"last_name\":\"Lawrence\",\"country\":\"Madagascar\",\"ip_address\":\"163.166.114.239\",\"email\":\"slawrence@realmix.mil\"},\n{\"id\":304,\"first_name\":\"Paula\",\"last_name\":\"Montgomery\",\"country\":\"United States Virgin Islands\",\"ip_address\":\"176.116.173.140\",\"email\":\"pmontgomery@skinte.gov\"},\n{\"id\":305,\"first_name\":\"Jeffrey\",\"last_name\":\"Cole\",\"country\":\"Monaco\",\"ip_address\":\"246.226.58.169\",\"email\":\"jcole@centizu.biz\"},\n{\"id\":306,\"first_name\":\"Patricia\",\"last_name\":\"Wright\",\"country\":\"Ecuador\",\"ip_address\":\"170.8.70.167\",\"email\":\"pwright@jabbersphere.info\"},\n{\"id\":307,\"first_name\":\"Judith\",\"last_name\":\"Crawford\",\"country\":\"Ukraine\",\"ip_address\":\"179.121.207.174\",\"email\":\"jcrawford@zazio.com\"},\n{\"id\":308,\"first_name\":\"Donna\",\"last_name\":\"Freeman\",\"country\":\"Qatar\",\"ip_address\":\"120.51.106.20\",\"email\":\"dfreeman@linkbuzz.gov\"},\n{\"id\":309,\"first_name\":\"Gerald\",\"last_name\":\"Ford\",\"country\":\"Suriname\",\"ip_address\":\"159.78.60.29\",\"email\":\"gford@yadel.net\"},\n{\"id\":310,\"first_name\":\"Julia\",\"last_name\":\"Alvarez\",\"country\":\"Niger\",\"ip_address\":\"216.224.43.127\",\"email\":\"jalvarez@feedbug.net\"},\n{\"id\":311,\"first_name\":\"Cheryl\",\"last_name\":\"Lewis\",\"country\":\"Namibia\",\"ip_address\":\"45.66.144.238\",\"email\":\"clewis@yoveo.mil\"},\n{\"id\":312,\"first_name\":\"Jerry\",\"last_name\":\"Oliver\",\"country\":\"Venezuela\",\"ip_address\":\"231.235.13.87\",\"email\":\"joliver@bubblemix.biz\"},\n{\"id\":313,\"first_name\":\"Anna\",\"last_name\":\"Bowman\",\"country\":\"Cayman Islands\",\"ip_address\":\"11.172.84.213\",\"email\":\"abowman@mydo.org\"},\n{\"id\":314,\"first_name\":\"Gloria\",\"last_name\":\"Burton\",\"country\":\"French Southern Territories\",\"ip_address\":\"83.136.37.132\",\"email\":\"gburton@yombu.name\"},\n{\"id\":315,\"first_name\":\"Emily\",\"last_name\":\"Webb\",\"country\":\"Burkina Faso\",\"ip_address\":\"137.171.74.99\",\"email\":\"ewebb@yodoo.com\"},\n{\"id\":316,\"first_name\":\"Teresa\",\"last_name\":\"Snyder\",\"country\":\"Armenia\",\"ip_address\":\"227.204.122.104\",\"email\":\"tsnyder@zoombox.mil\"},\n{\"id\":317,\"first_name\":\"Brandon\",\"last_name\":\"Berry\",\"country\":\"Norfolk Island\",\"ip_address\":\"56.108.222.98\",\"email\":\"bberry@innoz.org\"},\n{\"id\":318,\"first_name\":\"Mark\",\"last_name\":\"Sullivan\",\"country\":\"Haiti\",\"ip_address\":\"192.210.76.74\",\"email\":\"msullivan@skynoodle.net\"},\n{\"id\":319,\"first_name\":\"Ronald\",\"last_name\":\"Brown\",\"country\":\"New Zealand\",\"ip_address\":\"25.105.234.110\",\"email\":\"rbrown@lazz.com\"},\n{\"id\":320,\"first_name\":\"Ryan\",\"last_name\":\"Fuller\",\"country\":\"Antarctica\",\"ip_address\":\"48.9.83.230\",\"email\":\"rfuller@tavu.net\"},\n{\"id\":321,\"first_name\":\"Harold\",\"last_name\":\"Schmidt\",\"country\":\"Pakistan\",\"ip_address\":\"117.86.29.195\",\"email\":\"hschmidt@eare.com\"},\n{\"id\":322,\"first_name\":\"Virginia\",\"last_name\":\"Meyer\",\"country\":\"Ukraine\",\"ip_address\":\"124.107.60.130\",\"email\":\"vmeyer@meeveo.name\"},\n{\"id\":323,\"first_name\":\"Brenda\",\"last_name\":\"Bowman\",\"country\":\"French Polynesia\",\"ip_address\":\"77.39.52.188\",\"email\":\"bbowman@linkbuzz.info\"},\n{\"id\":324,\"first_name\":\"Doris\",\"last_name\":\"Stewart\",\"country\":\"Mauritius\",\"ip_address\":\"121.212.169.233\",\"email\":\"dstewart@dabfeed.edu\"},\n{\"id\":325,\"first_name\":\"Annie\",\"last_name\":\"Edwards\",\"country\":\"Mauritius\",\"ip_address\":\"230.7.53.248\",\"email\":\"aedwards@ntag.mil\"},\n{\"id\":326,\"first_name\":\"Rachel\",\"last_name\":\"Freeman\",\"country\":\"Greenland\",\"ip_address\":\"8.235.246.165\",\"email\":\"rfreeman@blogspan.mil\"},\n{\"id\":327,\"first_name\":\"Janet\",\"last_name\":\"Cox\",\"country\":\"Belize\",\"ip_address\":\"116.117.208.169\",\"email\":\"jcox@yata.mil\"},\n{\"id\":328,\"first_name\":\"Maria\",\"last_name\":\"Lane\",\"country\":\"Brazil\",\"ip_address\":\"151.152.47.25\",\"email\":\"mlane@kazu.mil\"},\n{\"id\":329,\"first_name\":\"Janice\",\"last_name\":\"Ramirez\",\"country\":\"Mongolia\",\"ip_address\":\"7.152.221.81\",\"email\":\"jramirez@brainfire.net\"},\n{\"id\":330,\"first_name\":\"Annie\",\"last_name\":\"Patterson\",\"country\":\"Northern Mariana Islands\",\"ip_address\":\"64.198.174.176\",\"email\":\"apatterson@lazzy.net\"},\n{\"id\":331,\"first_name\":\"Shawn\",\"last_name\":\"Chavez\",\"country\":\"Mauritania\",\"ip_address\":\"6.203.107.95\",\"email\":\"schavez@mydeo.org\"},\n{\"id\":332,\"first_name\":\"Diana\",\"last_name\":\"Alexander\",\"country\":\"Suriname\",\"ip_address\":\"227.194.8.246\",\"email\":\"dalexander@photobug.com\"},\n{\"id\":333,\"first_name\":\"Lawrence\",\"last_name\":\"Little\",\"country\":\"Gibraltar\",\"ip_address\":\"200.157.14.131\",\"email\":\"llittle@midel.com\"},\n{\"id\":334,\"first_name\":\"Victor\",\"last_name\":\"Allen\",\"country\":\"Botswana\",\"ip_address\":\"252.144.92.149\",\"email\":\"vallen@voomm.com\"},\n{\"id\":335,\"first_name\":\"Lori\",\"last_name\":\"Rogers\",\"country\":\"Nepal\",\"ip_address\":\"172.29.125.182\",\"email\":\"lrogers@linkbridge.org\"},\n{\"id\":336,\"first_name\":\"Bruce\",\"last_name\":\"Martin\",\"country\":\"Saint Helena\",\"ip_address\":\"139.165.174.62\",\"email\":\"bmartin@miboo.org\"},\n{\"id\":337,\"first_name\":\"Alice\",\"last_name\":\"Gardner\",\"country\":\"Aruba\",\"ip_address\":\"136.40.165.148\",\"email\":\"agardner@bubblebox.name\"},\n{\"id\":338,\"first_name\":\"Jean\",\"last_name\":\"Clark\",\"country\":\"Maldives\",\"ip_address\":\"27.77.147.37\",\"email\":\"jclark@youspan.gov\"},\n{\"id\":339,\"first_name\":\"Ruby\",\"last_name\":\"Carroll\",\"country\":\"Montserrat\",\"ip_address\":\"145.210.123.219\",\"email\":\"rcarroll@skipstorm.mil\"},\n{\"id\":340,\"first_name\":\"Ashley\",\"last_name\":\"Gilbert\",\"country\":\"Isle of Man\",\"ip_address\":\"14.63.119.198\",\"email\":\"agilbert@buzzster.org\"},\n{\"id\":341,\"first_name\":\"Melissa\",\"last_name\":\"Thompson\",\"country\":\"Barbados\",\"ip_address\":\"220.19.14.39\",\"email\":\"mthompson@shuffledrive.info\"},\n{\"id\":342,\"first_name\":\"Anthony\",\"last_name\":\"Mccoy\",\"country\":\"Taiwan\",\"ip_address\":\"100.6.185.239\",\"email\":\"amccoy@skinix.org\"},\n{\"id\":343,\"first_name\":\"Terry\",\"last_name\":\"Smith\",\"country\":\"Indonesia\",\"ip_address\":\"104.224.177.213\",\"email\":\"tsmith@teklist.edu\"},\n{\"id\":344,\"first_name\":\"Marilyn\",\"last_name\":\"Moreno\",\"country\":\"Madagascar\",\"ip_address\":\"150.133.170.63\",\"email\":\"mmoreno@demizz.info\"},\n{\"id\":345,\"first_name\":\"Donna\",\"last_name\":\"Nguyen\",\"country\":\"Cuba\",\"ip_address\":\"174.4.236.88\",\"email\":\"dnguyen@jabberstorm.org\"},\n{\"id\":346,\"first_name\":\"Louis\",\"last_name\":\"Olson\",\"country\":\"Slovenia\",\"ip_address\":\"78.33.104.151\",\"email\":\"lolson@avavee.com\"},\n{\"id\":347,\"first_name\":\"Joyce\",\"last_name\":\"Dunn\",\"country\":\"Senegal\",\"ip_address\":\"233.170.71.77\",\"email\":\"jdunn@topicware.name\"},\n{\"id\":348,\"first_name\":\"Roy\",\"last_name\":\"Flores\",\"country\":\"British Indian Ocean Territory\",\"ip_address\":\"201.79.177.210\",\"email\":\"rflores@youbridge.com\"},\n{\"id\":349,\"first_name\":\"Christina\",\"last_name\":\"Carr\",\"country\":\"Benin\",\"ip_address\":\"72.226.7.195\",\"email\":\"ccarr@skipfire.net\"},\n{\"id\":350,\"first_name\":\"Ryan\",\"last_name\":\"Austin\",\"country\":\"Samoa\",\"ip_address\":\"66.163.73.173\",\"email\":\"raustin@tagchat.edu\"},\n{\"id\":351,\"first_name\":\"Wayne\",\"last_name\":\"Porter\",\"country\":\"Jersey\",\"ip_address\":\"41.87.59.111\",\"email\":\"wporter@tavu.gov\"},\n{\"id\":352,\"first_name\":\"Jean\",\"last_name\":\"Taylor\",\"country\":\"Antigua and Barbuda\",\"ip_address\":\"254.192.22.210\",\"email\":\"jtaylor@feedmix.info\"},\n{\"id\":353,\"first_name\":\"Denise\",\"last_name\":\"Foster\",\"country\":\"Ukraine\",\"ip_address\":\"24.187.171.29\",\"email\":\"dfoster@flashdog.edu\"},\n{\"id\":354,\"first_name\":\"Henry\",\"last_name\":\"Rogers\",\"country\":\"Croatia\",\"ip_address\":\"76.216.77.223\",\"email\":\"hrogers@skiba.info\"},\n{\"id\":355,\"first_name\":\"Kevin\",\"last_name\":\"White\",\"country\":\"Malaysia\",\"ip_address\":\"165.197.118.154\",\"email\":\"kwhite@skipfire.gov\"},\n{\"id\":356,\"first_name\":\"Terry\",\"last_name\":\"Hall\",\"country\":\"Anguilla\",\"ip_address\":\"204.7.102.205\",\"email\":\"thall@feednation.name\"},\n{\"id\":357,\"first_name\":\"Jeffrey\",\"last_name\":\"Black\",\"country\":\"Faroe Islands\",\"ip_address\":\"52.219.29.30\",\"email\":\"jblack@quatz.org\"},\n{\"id\":358,\"first_name\":\"Joyce\",\"last_name\":\"Bailey\",\"country\":\"United States of America\",\"ip_address\":\"89.79.140.82\",\"email\":\"jbailey@lazzy.gov\"},\n{\"id\":359,\"first_name\":\"Tammy\",\"last_name\":\"Castillo\",\"country\":\"Liechtenstein\",\"ip_address\":\"80.106.183.112\",\"email\":\"tcastillo@gigashots.com\"},\n{\"id\":360,\"first_name\":\"Doris\",\"last_name\":\"Wright\",\"country\":\"Isle of Man\",\"ip_address\":\"234.7.48.161\",\"email\":\"dwright@kaymbo.org\"},\n{\"id\":361,\"first_name\":\"Catherine\",\"last_name\":\"Stephens\",\"country\":\"Cambodia\",\"ip_address\":\"251.70.62.60\",\"email\":\"cstephens@zava.net\"},\n{\"id\":362,\"first_name\":\"Fred\",\"last_name\":\"Baker\",\"country\":\"Uruguay\",\"ip_address\":\"190.39.217.66\",\"email\":\"fbaker@skilith.org\"},\n{\"id\":363,\"first_name\":\"James\",\"last_name\":\"Knight\",\"country\":\"Slovakia\",\"ip_address\":\"17.207.37.90\",\"email\":\"jknight@realcube.org\"},\n{\"id\":364,\"first_name\":\"Kathleen\",\"last_name\":\"Weaver\",\"country\":\"Falkland Islands (Malvinas)\",\"ip_address\":\"235.189.173.139\",\"email\":\"kweaver@kwimbee.biz\"},\n{\"id\":365,\"first_name\":\"Janice\",\"last_name\":\"Gordon\",\"country\":\"Antigua and Barbuda\",\"ip_address\":\"87.122.254.99\",\"email\":\"jgordon@flashset.net\"},\n{\"id\":366,\"first_name\":\"Richard\",\"last_name\":\"Rivera\",\"country\":\"Denmark\",\"ip_address\":\"177.138.208.62\",\"email\":\"rrivera@oyoba.org\"},\n{\"id\":367,\"first_name\":\"Clarence\",\"last_name\":\"Hicks\",\"country\":\"Congo, Republic of\",\"ip_address\":\"196.153.92.153\",\"email\":\"chicks@buzzbean.biz\"},\n{\"id\":368,\"first_name\":\"Sharon\",\"last_name\":\"Parker\",\"country\":\"Oman\",\"ip_address\":\"154.75.52.18\",\"email\":\"sparker@avamm.name\"},\n{\"id\":369,\"first_name\":\"Henry\",\"last_name\":\"Richardson\",\"country\":\"Turks and Caicos Islands\",\"ip_address\":\"161.134.69.221\",\"email\":\"hrichardson@buzzbean.mil\"},\n{\"id\":370,\"first_name\":\"Carolyn\",\"last_name\":\"Adams\",\"country\":\"Lithuania\",\"ip_address\":\"161.208.111.218\",\"email\":\"cadams@zoovu.info\"},\n{\"id\":371,\"first_name\":\"Marilyn\",\"last_name\":\"Elliott\",\"country\":\"Congo, Democratic Republic of\",\"ip_address\":\"30.46.209.217\",\"email\":\"melliott@dazzlesphere.net\"},\n{\"id\":372,\"first_name\":\"Ralph\",\"last_name\":\"Baker\",\"country\":\"Puerto Rico\",\"ip_address\":\"48.223.140.234\",\"email\":\"rbaker@fanoodle.org\"},\n{\"id\":373,\"first_name\":\"Deborah\",\"last_name\":\"Taylor\",\"country\":\"Senegal\",\"ip_address\":\"198.108.97.91\",\"email\":\"dtaylor@yamia.gov\"},\n{\"id\":374,\"first_name\":\"Jonathan\",\"last_name\":\"Powell\",\"country\":\"Nepal\",\"ip_address\":\"39.234.71.128\",\"email\":\"jpowell@yodoo.biz\"},\n{\"id\":375,\"first_name\":\"Mildred\",\"last_name\":\"Ward\",\"country\":\"Wallis and Futuna Islands\",\"ip_address\":\"172.72.103.64\",\"email\":\"mward@zoomlounge.org\"},\n{\"id\":376,\"first_name\":\"Joyce\",\"last_name\":\"Green\",\"country\":\"Northern Mariana Islands\",\"ip_address\":\"45.188.58.141\",\"email\":\"jgreen@tazz.org\"},\n{\"id\":377,\"first_name\":\"Phillip\",\"last_name\":\"Schmidt\",\"country\":\"Japan\",\"ip_address\":\"136.83.154.163\",\"email\":\"pschmidt@topicblab.net\"},\n{\"id\":378,\"first_name\":\"Kevin\",\"last_name\":\"Ruiz\",\"country\":\"Russia\",\"ip_address\":\"248.86.25.142\",\"email\":\"kruiz@brightbean.name\"},\n{\"id\":379,\"first_name\":\"Ruby\",\"last_name\":\"Little\",\"country\":\"Ecuador\",\"ip_address\":\"150.13.61.211\",\"email\":\"rlittle@fliptune.name\"},\n{\"id\":380,\"first_name\":\"Arthur\",\"last_name\":\"Berry\",\"country\":\"Guadeloupe\",\"ip_address\":\"229.199.209.97\",\"email\":\"aberry@yakijo.com\"},\n{\"id\":381,\"first_name\":\"Gloria\",\"last_name\":\"Hart\",\"country\":\"Macau\",\"ip_address\":\"242.104.153.78\",\"email\":\"ghart@camimbo.name\"},\n{\"id\":382,\"first_name\":\"Jesse\",\"last_name\":\"Cole\",\"country\":\"Dominican Republic\",\"ip_address\":\"239.89.120.104\",\"email\":\"jcole@twinte.info\"},\n{\"id\":383,\"first_name\":\"Emily\",\"last_name\":\"Welch\",\"country\":\"Dominican Republic\",\"ip_address\":\"36.253.112.18\",\"email\":\"ewelch@bubblebox.info\"},\n{\"id\":384,\"first_name\":\"Sara\",\"last_name\":\"Lewis\",\"country\":\"New Zealand\",\"ip_address\":\"46.76.17.40\",\"email\":\"slewis@twitterbridge.edu\"},\n{\"id\":385,\"first_name\":\"Paula\",\"last_name\":\"Jacobs\",\"country\":\"Bouvet Island\",\"ip_address\":\"59.138.29.126\",\"email\":\"pjacobs@eamia.mil\"},\n{\"id\":386,\"first_name\":\"Anne\",\"last_name\":\"Gibson\",\"country\":\"Fiji\",\"ip_address\":\"231.114.135.67\",\"email\":\"agibson@skalith.org\"},\n{\"id\":387,\"first_name\":\"Ann\",\"last_name\":\"Russell\",\"country\":\"Mexico\",\"ip_address\":\"45.30.205.247\",\"email\":\"arussell@yacero.mil\"},\n{\"id\":388,\"first_name\":\"Timothy\",\"last_name\":\"Ortiz\",\"country\":\"\\u00c5land\",\"ip_address\":\"160.226.236.31\",\"email\":\"tortiz@yotz.edu\"},\n{\"id\":389,\"first_name\":\"Earl\",\"last_name\":\"Allen\",\"country\":\"Switzerland\",\"ip_address\":\"195.165.195.104\",\"email\":\"eallen@camido.biz\"},\n{\"id\":390,\"first_name\":\"Ruby\",\"last_name\":\"Butler\",\"country\":\"Bermuda\",\"ip_address\":\"212.26.135.110\",\"email\":\"rbutler@skippad.info\"},\n{\"id\":391,\"first_name\":\"Dorothy\",\"last_name\":\"Flores\",\"country\":\"Suriname\",\"ip_address\":\"224.168.6.122\",\"email\":\"dflores@jabbertype.mil\"},\n{\"id\":392,\"first_name\":\"Debra\",\"last_name\":\"Washington\",\"country\":\"Norway\",\"ip_address\":\"247.97.23.218\",\"email\":\"dwashington@babblestorm.gov\"},\n{\"id\":393,\"first_name\":\"Douglas\",\"last_name\":\"Green\",\"country\":\"French Guiana\",\"ip_address\":\"46.71.85.125\",\"email\":\"dgreen@jaxbean.com\"},\n{\"id\":394,\"first_name\":\"Carol\",\"last_name\":\"Matthews\",\"country\":\"Jamaica\",\"ip_address\":\"45.178.114.245\",\"email\":\"cmatthews@meemm.name\"},\n{\"id\":395,\"first_name\":\"Carl\",\"last_name\":\"Jordan\",\"country\":\"Netherlands Antilles\",\"ip_address\":\"114.132.183.128\",\"email\":\"cjordan@voomm.com\"},\n{\"id\":396,\"first_name\":\"Debra\",\"last_name\":\"Montgomery\",\"country\":\"Pakistan\",\"ip_address\":\"25.250.118.46\",\"email\":\"dmontgomery@skaboo.edu\"},\n{\"id\":397,\"first_name\":\"Chris\",\"last_name\":\"Burke\",\"country\":\"Mayotte\",\"ip_address\":\"139.218.102.227\",\"email\":\"cburke@edgeify.info\"},\n{\"id\":398,\"first_name\":\"Mildred\",\"last_name\":\"Williams\",\"country\":\"Jamaica\",\"ip_address\":\"85.5.189.196\",\"email\":\"mwilliams@jayo.com\"},\n{\"id\":399,\"first_name\":\"Howard\",\"last_name\":\"Robertson\",\"country\":\"Seychelles\",\"ip_address\":\"121.135.62.155\",\"email\":\"hrobertson@tagchat.org\"},\n{\"id\":400,\"first_name\":\"Alan\",\"last_name\":\"Perez\",\"country\":\"Wallis and Futuna Islands\",\"ip_address\":\"185.188.86.229\",\"email\":\"aperez@quatz.gov\"},\n{\"id\":401,\"first_name\":\"Samuel\",\"last_name\":\"Cole\",\"country\":\"United Kingdom\",\"ip_address\":\"208.23.215.218\",\"email\":\"scole@ooba.net\"},\n{\"id\":402,\"first_name\":\"Albert\",\"last_name\":\"Jones\",\"country\":\"\\u00c5land\",\"ip_address\":\"88.185.29.17\",\"email\":\"ajones@thoughtbridge.edu\"},\n{\"id\":403,\"first_name\":\"Judith\",\"last_name\":\"Morris\",\"country\":\"Lesotho\",\"ip_address\":\"186.21.159.208\",\"email\":\"jmorris@bluezoom.net\"},\n{\"id\":404,\"first_name\":\"George\",\"last_name\":\"Sullivan\",\"country\":\"Chile\",\"ip_address\":\"88.29.32.160\",\"email\":\"gsullivan@riffpath.net\"},\n{\"id\":405,\"first_name\":\"Pamela\",\"last_name\":\"Anderson\",\"country\":\"Portugal\",\"ip_address\":\"223.171.174.0\",\"email\":\"panderson@eimbee.com\"},\n{\"id\":406,\"first_name\":\"Harold\",\"last_name\":\"Rose\",\"country\":\"Saint Martin\",\"ip_address\":\"50.58.35.198\",\"email\":\"hrose@avaveo.gov\"},\n{\"id\":407,\"first_name\":\"Jennifer\",\"last_name\":\"Walker\",\"country\":\"Guadeloupe\",\"ip_address\":\"12.66.75.191\",\"email\":\"jwalker@fanoodle.com\"},\n{\"id\":408,\"first_name\":\"Brandon\",\"last_name\":\"Jones\",\"country\":\"Burkina Faso\",\"ip_address\":\"80.238.211.193\",\"email\":\"bjones@thoughtbeat.info\"},\n{\"id\":409,\"first_name\":\"Clarence\",\"last_name\":\"Bennett\",\"country\":\"Saint Lucia\",\"ip_address\":\"216.20.65.183\",\"email\":\"cbennett@realbridge.info\"},\n{\"id\":410,\"first_name\":\"Melissa\",\"last_name\":\"Jordan\",\"country\":\"Liberia\",\"ip_address\":\"140.13.213.7\",\"email\":\"mjordan@feednation.gov\"},\n{\"id\":411,\"first_name\":\"Brandon\",\"last_name\":\"Sullivan\",\"country\":\"Afghanistan\",\"ip_address\":\"191.212.8.19\",\"email\":\"bsullivan@linktype.name\"},\n{\"id\":412,\"first_name\":\"Elizabeth\",\"last_name\":\"Garcia\",\"country\":\"Jamaica\",\"ip_address\":\"47.71.15.24\",\"email\":\"egarcia@edgepulse.name\"},\n{\"id\":413,\"first_name\":\"Donna\",\"last_name\":\"Wells\",\"country\":\"Bosnia and Herzegovina\",\"ip_address\":\"94.1.55.6\",\"email\":\"dwells@edgewire.biz\"},\n{\"id\":414,\"first_name\":\"Jack\",\"last_name\":\"Perry\",\"country\":\"Brazil\",\"ip_address\":\"114.5.122.80\",\"email\":\"jperry@midel.gov\"},\n{\"id\":415,\"first_name\":\"Norma\",\"last_name\":\"Dunn\",\"country\":\"United Kingdom\",\"ip_address\":\"69.247.181.179\",\"email\":\"ndunn@bubblemix.com\"},\n{\"id\":416,\"first_name\":\"Evelyn\",\"last_name\":\"Dixon\",\"country\":\"Turkmenistan\",\"ip_address\":\"9.93.84.4\",\"email\":\"edixon@zooveo.biz\"},\n{\"id\":417,\"first_name\":\"Albert\",\"last_name\":\"Washington\",\"country\":\"Nigeria\",\"ip_address\":\"34.67.207.243\",\"email\":\"awashington@dabz.info\"},\n{\"id\":418,\"first_name\":\"Jessica\",\"last_name\":\"Nichols\",\"country\":\"Djibouti\",\"ip_address\":\"210.37.67.176\",\"email\":\"jnichols@devcast.biz\"},\n{\"id\":419,\"first_name\":\"Joan\",\"last_name\":\"Brown\",\"country\":\"Latvia\",\"ip_address\":\"85.94.242.130\",\"email\":\"jbrown@photojam.mil\"},\n{\"id\":420,\"first_name\":\"Wanda\",\"last_name\":\"Rivera\",\"country\":\"Uzbekistan\",\"ip_address\":\"66.104.206.44\",\"email\":\"wrivera@yozio.gov\"},\n{\"id\":421,\"first_name\":\"Philip\",\"last_name\":\"Porter\",\"country\":\"Greenland\",\"ip_address\":\"111.176.68.196\",\"email\":\"pporter@flashdog.com\"},\n{\"id\":422,\"first_name\":\"Robin\",\"last_name\":\"Elliott\",\"country\":\"Kuwait\",\"ip_address\":\"218.92.100.200\",\"email\":\"relliott@photobug.org\"},\n{\"id\":423,\"first_name\":\"Diana\",\"last_name\":\"George\",\"country\":\"Kazakhstan\",\"ip_address\":\"117.216.103.72\",\"email\":\"dgeorge@thoughtmix.net\"},\n{\"id\":424,\"first_name\":\"Martha\",\"last_name\":\"Hart\",\"country\":\"Mayotte\",\"ip_address\":\"221.147.29.239\",\"email\":\"mhart@roodel.gov\"},\n{\"id\":425,\"first_name\":\"Lori\",\"last_name\":\"Wood\",\"country\":\"Swaziland\",\"ip_address\":\"246.253.106.46\",\"email\":\"lwood@dabfeed.org\"},\n{\"id\":426,\"first_name\":\"Jack\",\"last_name\":\"Harper\",\"country\":\"Yemen\",\"ip_address\":\"21.158.202.108\",\"email\":\"jharper@voomm.info\"},\n{\"id\":427,\"first_name\":\"Walter\",\"last_name\":\"Elliott\",\"country\":\"Iceland\",\"ip_address\":\"228.101.172.254\",\"email\":\"welliott@shuffledrive.mil\"},\n{\"id\":428,\"first_name\":\"Thomas\",\"last_name\":\"Ford\",\"country\":\"Tajikistan\",\"ip_address\":\"77.17.185.132\",\"email\":\"tford@avamba.gov\"},\n{\"id\":429,\"first_name\":\"Lillian\",\"last_name\":\"Gordon\",\"country\":\"Mauritius\",\"ip_address\":\"235.213.35.31\",\"email\":\"lgordon@abata.info\"},\n{\"id\":430,\"first_name\":\"Edward\",\"last_name\":\"Weaver\",\"country\":\"Aruba\",\"ip_address\":\"246.157.23.83\",\"email\":\"eweaver@jayo.name\"},\n{\"id\":431,\"first_name\":\"Jonathan\",\"last_name\":\"Reed\",\"country\":\"United States of America\",\"ip_address\":\"50.167.66.116\",\"email\":\"jreed@edgetag.mil\"},\n{\"id\":432,\"first_name\":\"Shirley\",\"last_name\":\"Alvarez\",\"country\":\"Israel\",\"ip_address\":\"226.223.66.30\",\"email\":\"salvarez@eire.edu\"},\n{\"id\":433,\"first_name\":\"Betty\",\"last_name\":\"Edwards\",\"country\":\"Japan\",\"ip_address\":\"114.63.225.235\",\"email\":\"bedwards@yadel.biz\"},\n{\"id\":434,\"first_name\":\"Karen\",\"last_name\":\"Pierce\",\"country\":\"Kyrgyzstan\",\"ip_address\":\"96.205.195.23\",\"email\":\"kpierce@dablist.com\"},\n{\"id\":435,\"first_name\":\"Thomas\",\"last_name\":\"Chavez\",\"country\":\"Marshall Islands\",\"ip_address\":\"230.86.56.0\",\"email\":\"tchavez@topiczoom.net\"},\n{\"id\":436,\"first_name\":\"Kenneth\",\"last_name\":\"Torres\",\"country\":\"Falkland Islands (Malvinas)\",\"ip_address\":\"184.222.175.158\",\"email\":\"ktorres@tanoodle.mil\"},\n{\"id\":437,\"first_name\":\"Jason\",\"last_name\":\"Freeman\",\"country\":\"Djibouti\",\"ip_address\":\"24.92.10.184\",\"email\":\"jfreeman@rhyzio.edu\"},\n{\"id\":438,\"first_name\":\"Todd\",\"last_name\":\"Freeman\",\"country\":\"Kiribati\",\"ip_address\":\"3.178.29.224\",\"email\":\"tfreeman@photofeed.gov\"},\n{\"id\":439,\"first_name\":\"Jonathan\",\"last_name\":\"Porter\",\"country\":\"Paraguay\",\"ip_address\":\"176.69.151.8\",\"email\":\"jporter@twitterbeat.info\"},\n{\"id\":440,\"first_name\":\"Paula\",\"last_name\":\"Hayes\",\"country\":\"Barbados\",\"ip_address\":\"233.125.193.29\",\"email\":\"phayes@innoz.info\"},\n{\"id\":441,\"first_name\":\"Joseph\",\"last_name\":\"Perez\",\"country\":\"Faroe Islands\",\"ip_address\":\"220.222.155.212\",\"email\":\"jperez@abata.gov\"},\n{\"id\":442,\"first_name\":\"Roger\",\"last_name\":\"Flores\",\"country\":\"Iraq\",\"ip_address\":\"10.221.131.107\",\"email\":\"rflores@flipbug.name\"},\n{\"id\":443,\"first_name\":\"Laura\",\"last_name\":\"Smith\",\"country\":\"Mayotte\",\"ip_address\":\"49.183.105.172\",\"email\":\"lsmith@wordify.biz\"},\n{\"id\":444,\"first_name\":\"Anthony\",\"last_name\":\"Olson\",\"country\":\"Suriname\",\"ip_address\":\"144.37.134.24\",\"email\":\"aolson@leexo.mil\"},\n{\"id\":445,\"first_name\":\"Kevin\",\"last_name\":\"Mitchell\",\"country\":\"Congo, Republic of\",\"ip_address\":\"222.191.55.203\",\"email\":\"kmitchell@bubblemix.mil\"},\n{\"id\":446,\"first_name\":\"Christine\",\"last_name\":\"Mccoy\",\"country\":\"Palau\",\"ip_address\":\"23.100.144.79\",\"email\":\"cmccoy@youtags.name\"},\n{\"id\":447,\"first_name\":\"Christina\",\"last_name\":\"Robertson\",\"country\":\"Kyrgyzstan\",\"ip_address\":\"93.187.140.136\",\"email\":\"crobertson@katz.mil\"},\n{\"id\":448,\"first_name\":\"Sandra\",\"last_name\":\"Roberts\",\"country\":\"Mozambique\",\"ip_address\":\"168.115.102.110\",\"email\":\"sroberts@brainverse.org\"},\n{\"id\":449,\"first_name\":\"Kathryn\",\"last_name\":\"Sullivan\",\"country\":\"Algeria\",\"ip_address\":\"13.35.112.215\",\"email\":\"ksullivan@feedbug.info\"},\n{\"id\":450,\"first_name\":\"Stephanie\",\"last_name\":\"Reid\",\"country\":\"Macau\",\"ip_address\":\"77.106.149.103\",\"email\":\"sreid@gigazoom.edu\"},\n{\"id\":451,\"first_name\":\"Lisa\",\"last_name\":\"Franklin\",\"country\":\"Mauritius\",\"ip_address\":\"175.27.248.167\",\"email\":\"lfranklin@photospace.name\"},\n{\"id\":452,\"first_name\":\"Bobby\",\"last_name\":\"Gibson\",\"country\":\"Nigeria\",\"ip_address\":\"246.52.115.51\",\"email\":\"bgibson@zazio.gov\"},\n{\"id\":453,\"first_name\":\"Albert\",\"last_name\":\"Bradley\",\"country\":\"Togo\",\"ip_address\":\"65.182.234.66\",\"email\":\"abradley@ooba.mil\"},\n{\"id\":454,\"first_name\":\"Frances\",\"last_name\":\"Woods\",\"country\":\"Mauritius\",\"ip_address\":\"5.72.129.105\",\"email\":\"fwoods@innoz.net\"},\n{\"id\":455,\"first_name\":\"Matthew\",\"last_name\":\"Stephens\",\"country\":\"Pitcairn Island\",\"ip_address\":\"218.153.199.187\",\"email\":\"mstephens@quaxo.gov\"},\n{\"id\":456,\"first_name\":\"Anna\",\"last_name\":\"Scott\",\"country\":\"USSR\",\"ip_address\":\"54.93.244.185\",\"email\":\"ascott@jayo.org\"},\n{\"id\":457,\"first_name\":\"Katherine\",\"last_name\":\"Stone\",\"country\":\"Albania\",\"ip_address\":\"22.119.167.104\",\"email\":\"kstone@gevee.gov\"},\n{\"id\":458,\"first_name\":\"Nicole\",\"last_name\":\"Ferguson\",\"country\":\"Cote d'Ivoire\",\"ip_address\":\"76.24.174.132\",\"email\":\"nferguson@skidoo.com\"},\n{\"id\":459,\"first_name\":\"Steven\",\"last_name\":\"Rodriguez\",\"country\":\"Mayotte\",\"ip_address\":\"126.47.219.128\",\"email\":\"srodriguez@dazzlesphere.net\"},\n{\"id\":460,\"first_name\":\"Helen\",\"last_name\":\"Porter\",\"country\":\"Namibia\",\"ip_address\":\"47.17.31.17\",\"email\":\"hporter@twiyo.net\"},\n{\"id\":461,\"first_name\":\"Ernest\",\"last_name\":\"Robinson\",\"country\":\"Bosnia and Herzegovina\",\"ip_address\":\"84.106.14.73\",\"email\":\"erobinson@thoughtbridge.edu\"},\n{\"id\":462,\"first_name\":\"Robin\",\"last_name\":\"Hayes\",\"country\":\"Madagascar\",\"ip_address\":\"73.82.126.118\",\"email\":\"rhayes@yambee.edu\"},\n{\"id\":463,\"first_name\":\"Amy\",\"last_name\":\"Garcia\",\"country\":\"Bosnia and Herzegovina\",\"ip_address\":\"6.176.247.59\",\"email\":\"agarcia@flipbug.info\"},\n{\"id\":464,\"first_name\":\"Heather\",\"last_name\":\"Diaz\",\"country\":\"Canada\",\"ip_address\":\"50.252.16.120\",\"email\":\"hdiaz@lazzy.org\"},\n{\"id\":465,\"first_name\":\"Janet\",\"last_name\":\"Dixon\",\"country\":\"Papua New Guinea\",\"ip_address\":\"51.125.59.51\",\"email\":\"jdixon@fiveclub.org\"},\n{\"id\":466,\"first_name\":\"Emily\",\"last_name\":\"Peters\",\"country\":\"Ukraine\",\"ip_address\":\"205.235.240.77\",\"email\":\"epeters@brainsphere.info\"},\n{\"id\":467,\"first_name\":\"Maria\",\"last_name\":\"Boyd\",\"country\":\"Timor-Leste\",\"ip_address\":\"24.189.68.16\",\"email\":\"mboyd@midel.biz\"},\n{\"id\":468,\"first_name\":\"Russell\",\"last_name\":\"Chavez\",\"country\":\"Slovakia\",\"ip_address\":\"108.109.168.116\",\"email\":\"rchavez@shufflester.com\"},\n{\"id\":469,\"first_name\":\"Sean\",\"last_name\":\"Henry\",\"country\":\"Lesotho\",\"ip_address\":\"8.246.102.70\",\"email\":\"shenry@feedmix.org\"},\n{\"id\":470,\"first_name\":\"Walter\",\"last_name\":\"Campbell\",\"country\":\"Afghanistan\",\"ip_address\":\"151.142.119.207\",\"email\":\"wcampbell@youspan.org\"},\n{\"id\":471,\"first_name\":\"Janet\",\"last_name\":\"Howard\",\"country\":\"USSR\",\"ip_address\":\"86.20.154.1\",\"email\":\"jhoward@realblab.biz\"},\n{\"id\":472,\"first_name\":\"Judy\",\"last_name\":\"Robertson\",\"country\":\"Saint Kitts and Nevis\",\"ip_address\":\"99.15.24.65\",\"email\":\"jrobertson@topiczoom.edu\"},\n{\"id\":473,\"first_name\":\"Marie\",\"last_name\":\"Lawrence\",\"country\":\"Malta\",\"ip_address\":\"209.133.188.24\",\"email\":\"mlawrence@jaxspan.edu\"},\n{\"id\":474,\"first_name\":\"Roger\",\"last_name\":\"Boyd\",\"country\":\"Solomon Islands\",\"ip_address\":\"38.172.27.84\",\"email\":\"rboyd@edgeify.net\"},\n{\"id\":475,\"first_name\":\"Terry\",\"last_name\":\"Davis\",\"country\":\"Estonia\",\"ip_address\":\"50.153.22.77\",\"email\":\"tdavis@skidoo.gov\"},\n{\"id\":476,\"first_name\":\"Aaron\",\"last_name\":\"Wheeler\",\"country\":\"Kenya\",\"ip_address\":\"125.246.143.222\",\"email\":\"awheeler@skynoodle.edu\"},\n{\"id\":477,\"first_name\":\"Tammy\",\"last_name\":\"Lynch\",\"country\":\"Svalbard and Jan Mayen Islands\",\"ip_address\":\"7.133.58.115\",\"email\":\"tlynch@photobug.gov\"},\n{\"id\":478,\"first_name\":\"Julie\",\"last_name\":\"Gibson\",\"country\":\"Malta\",\"ip_address\":\"180.210.56.95\",\"email\":\"jgibson@bubblebox.edu\"},\n{\"id\":479,\"first_name\":\"Emily\",\"last_name\":\"Johnson\",\"country\":\"Kazakhstan\",\"ip_address\":\"120.199.34.32\",\"email\":\"ejohnson@izio.net\"},\n{\"id\":480,\"first_name\":\"Lois\",\"last_name\":\"Ryan\",\"country\":\"Estonia\",\"ip_address\":\"149.248.45.100\",\"email\":\"lryan@eimbee.gov\"},\n{\"id\":481,\"first_name\":\"David\",\"last_name\":\"Rogers\",\"country\":\"Lebanon\",\"ip_address\":\"161.187.219.237\",\"email\":\"drogers@skyba.mil\"},\n{\"id\":482,\"first_name\":\"Nancy\",\"last_name\":\"Hernandez\",\"country\":\"Liechtenstein\",\"ip_address\":\"96.219.131.45\",\"email\":\"nhernandez@bluezoom.name\"},\n{\"id\":483,\"first_name\":\"Jonathan\",\"last_name\":\"Price\",\"country\":\"Samoa\",\"ip_address\":\"188.229.7.16\",\"email\":\"jprice@gigabox.com\"},\n{\"id\":484,\"first_name\":\"Christina\",\"last_name\":\"West\",\"country\":\"Zimbabwe\",\"ip_address\":\"191.114.12.30\",\"email\":\"cwest@flipopia.gov\"},\n{\"id\":485,\"first_name\":\"Matthew\",\"last_name\":\"Wilson\",\"country\":\"Chad\",\"ip_address\":\"122.207.85.63\",\"email\":\"mwilson@aimbo.net\"},\n{\"id\":486,\"first_name\":\"Terry\",\"last_name\":\"White\",\"country\":\"Malawi\",\"ip_address\":\"51.130.212.227\",\"email\":\"twhite@riffpath.com\"},\n{\"id\":487,\"first_name\":\"Deborah\",\"last_name\":\"Peters\",\"country\":\"Tokelau\",\"ip_address\":\"158.132.140.183\",\"email\":\"dpeters@aibox.com\"},\n{\"id\":488,\"first_name\":\"Mary\",\"last_name\":\"Cook\",\"country\":\"Pakistan\",\"ip_address\":\"228.162.37.246\",\"email\":\"mcook@innojam.info\"},\n{\"id\":489,\"first_name\":\"Earl\",\"last_name\":\"Frazier\",\"country\":\"Egypt\",\"ip_address\":\"126.73.14.115\",\"email\":\"efrazier@demizz.net\"},\n{\"id\":490,\"first_name\":\"Ann\",\"last_name\":\"Nichols\",\"country\":\"Denmark\",\"ip_address\":\"126.179.157.238\",\"email\":\"anichols@leexo.com\"},\n{\"id\":491,\"first_name\":\"Janet\",\"last_name\":\"Mccoy\",\"country\":\"India\",\"ip_address\":\"174.169.177.9\",\"email\":\"jmccoy@jaxnation.com\"},\n{\"id\":492,\"first_name\":\"Amanda\",\"last_name\":\"Jones\",\"country\":\"Ecuador\",\"ip_address\":\"176.196.133.141\",\"email\":\"ajones@twitterbeat.edu\"},\n{\"id\":493,\"first_name\":\"Donald\",\"last_name\":\"Mitchell\",\"country\":\"British Virgin Islands\",\"ip_address\":\"214.171.215.243\",\"email\":\"dmitchell@dynabox.biz\"},\n{\"id\":494,\"first_name\":\"Heather\",\"last_name\":\"Russell\",\"country\":\"Senegal\",\"ip_address\":\"65.211.35.62\",\"email\":\"hrussell@eimbee.com\"},\n{\"id\":495,\"first_name\":\"Doris\",\"last_name\":\"Harrison\",\"country\":\"Seychelles\",\"ip_address\":\"84.61.243.214\",\"email\":\"dharrison@jumpxs.biz\"},\n{\"id\":496,\"first_name\":\"Jean\",\"last_name\":\"Martinez\",\"country\":\"Yemen\",\"ip_address\":\"249.151.131.109\",\"email\":\"jmartinez@tekfly.org\"},\n{\"id\":497,\"first_name\":\"Brandon\",\"last_name\":\"Gilbert\",\"country\":\"Bahamas\",\"ip_address\":\"198.80.138.40\",\"email\":\"bgilbert@kayveo.edu\"},\n{\"id\":498,\"first_name\":\"Cheryl\",\"last_name\":\"Wood\",\"country\":\"Madagascar\",\"ip_address\":\"127.213.239.212\",\"email\":\"cwood@skalith.gov\"},\n{\"id\":499,\"first_name\":\"Douglas\",\"last_name\":\"Romero\",\"country\":\"Rwanda\",\"ip_address\":\"143.146.90.219\",\"email\":\"dromero@mybuzz.com\"},\n{\"id\":500,\"first_name\":\"Steve\",\"last_name\":\"Grant\",\"country\":\"Vatican City State (Holy See)\",\"ip_address\":\"191.192.135.76\",\"email\":\"sgrant@zooxo.gov\"},\n{\"id\":501,\"first_name\":\"Shirley\",\"last_name\":\"Vasquez\",\"country\":\"Spain\",\"ip_address\":\"241.236.84.152\",\"email\":\"svasquez@nlounge.net\"},\n{\"id\":502,\"first_name\":\"Diane\",\"last_name\":\"Sanchez\",\"country\":\"Palestinian Territory, Occupied\",\"ip_address\":\"160.211.8.96\",\"email\":\"dsanchez@rhynyx.org\"},\n{\"id\":503,\"first_name\":\"Beverly\",\"last_name\":\"Holmes\",\"country\":\"Lithuania\",\"ip_address\":\"53.51.128.65\",\"email\":\"bholmes@livefish.info\"},\n{\"id\":504,\"first_name\":\"Kimberly\",\"last_name\":\"Ramirez\",\"country\":\"Saint Barthelemy\",\"ip_address\":\"76.157.230.122\",\"email\":\"kramirez@tavu.info\"},\n{\"id\":505,\"first_name\":\"Clarence\",\"last_name\":\"Mendoza\",\"country\":\"Solomon Islands\",\"ip_address\":\"255.160.149.60\",\"email\":\"cmendoza@skiptube.mil\"},\n{\"id\":506,\"first_name\":\"Jane\",\"last_name\":\"Spencer\",\"country\":\"United Kingdom\",\"ip_address\":\"239.229.200.82\",\"email\":\"jspencer@oyope.mil\"},\n{\"id\":507,\"first_name\":\"Shirley\",\"last_name\":\"Robinson\",\"country\":\"China\",\"ip_address\":\"210.43.93.102\",\"email\":\"srobinson@photofeed.org\"},\n{\"id\":508,\"first_name\":\"Emily\",\"last_name\":\"Lawrence\",\"country\":\"Libya\",\"ip_address\":\"29.57.71.93\",\"email\":\"elawrence@quatz.info\"},\n{\"id\":509,\"first_name\":\"Mildred\",\"last_name\":\"Perez\",\"country\":\"Cayman Islands\",\"ip_address\":\"90.242.125.102\",\"email\":\"mperez@zoombeat.org\"},\n{\"id\":510,\"first_name\":\"Judith\",\"last_name\":\"Sanchez\",\"country\":\"Thailand\",\"ip_address\":\"112.71.145.51\",\"email\":\"jsanchez@eadel.gov\"},\n{\"id\":511,\"first_name\":\"Scott\",\"last_name\":\"Russell\",\"country\":\"Norway\",\"ip_address\":\"179.58.249.254\",\"email\":\"srussell@realbuzz.com\"},\n{\"id\":512,\"first_name\":\"Evelyn\",\"last_name\":\"Ryan\",\"country\":\"Saint Kitts and Nevis\",\"ip_address\":\"122.232.115.123\",\"email\":\"eryan@jumpxs.name\"},\n{\"id\":513,\"first_name\":\"Marilyn\",\"last_name\":\"Thomas\",\"country\":\"Guyana\",\"ip_address\":\"82.129.6.31\",\"email\":\"mthomas@flashset.info\"},\n{\"id\":514,\"first_name\":\"Robin\",\"last_name\":\"Henry\",\"country\":\"Liberia\",\"ip_address\":\"252.164.177.200\",\"email\":\"rhenry@meevee.name\"},\n{\"id\":515,\"first_name\":\"Cynthia\",\"last_name\":\"West\",\"country\":\"Hungary\",\"ip_address\":\"93.196.69.253\",\"email\":\"cwest@edgeclub.biz\"},\n{\"id\":516,\"first_name\":\"Joyce\",\"last_name\":\"Montgomery\",\"country\":\"Luxembourg\",\"ip_address\":\"109.247.64.140\",\"email\":\"jmontgomery@ntag.org\"},\n{\"id\":517,\"first_name\":\"John\",\"last_name\":\"Gardner\",\"country\":\"Colombia\",\"ip_address\":\"184.147.196.225\",\"email\":\"jgardner@eayo.biz\"},\n{\"id\":518,\"first_name\":\"Martin\",\"last_name\":\"Rivera\",\"country\":\"Guinea-Bissau\",\"ip_address\":\"227.28.66.152\",\"email\":\"mrivera@tagfeed.info\"},\n{\"id\":519,\"first_name\":\"Sandra\",\"last_name\":\"Burke\",\"country\":\"Nepal\",\"ip_address\":\"42.122.217.132\",\"email\":\"sburke@eare.edu\"},\n{\"id\":520,\"first_name\":\"Ann\",\"last_name\":\"Rivera\",\"country\":\"Spain\",\"ip_address\":\"109.32.11.123\",\"email\":\"arivera@leexo.biz\"},\n{\"id\":521,\"first_name\":\"Gregory\",\"last_name\":\"Burke\",\"country\":\"Mozambique\",\"ip_address\":\"57.115.200.239\",\"email\":\"gburke@kare.info\"},\n{\"id\":522,\"first_name\":\"Carlos\",\"last_name\":\"Adams\",\"country\":\"Lebanon\",\"ip_address\":\"52.244.162.178\",\"email\":\"cadams@bluezoom.name\"},\n{\"id\":523,\"first_name\":\"Annie\",\"last_name\":\"Torres\",\"country\":\"United Arab Emirates\",\"ip_address\":\"165.233.64.138\",\"email\":\"atorres@linkbridge.net\"},\n{\"id\":524,\"first_name\":\"Timothy\",\"last_name\":\"Mcdonald\",\"country\":\"Gambia\",\"ip_address\":\"154.18.20.96\",\"email\":\"tmcdonald@npath.biz\"},\n{\"id\":525,\"first_name\":\"Nancy\",\"last_name\":\"Howard\",\"country\":\"Saint Pierre and Miquelon\",\"ip_address\":\"209.131.89.179\",\"email\":\"nhoward@rhynyx.net\"},\n{\"id\":526,\"first_name\":\"Anne\",\"last_name\":\"Duncan\",\"country\":\"Niger\",\"ip_address\":\"137.170.135.38\",\"email\":\"aduncan@myworks.mil\"},\n{\"id\":527,\"first_name\":\"Margaret\",\"last_name\":\"Wood\",\"country\":\"Estonia\",\"ip_address\":\"223.19.27.221\",\"email\":\"mwood@oloo.net\"},\n{\"id\":528,\"first_name\":\"Benjamin\",\"last_name\":\"Washington\",\"country\":\"United Arab Emirates\",\"ip_address\":\"233.145.160.31\",\"email\":\"bwashington@divape.gov\"},\n{\"id\":529,\"first_name\":\"Daniel\",\"last_name\":\"Murray\",\"country\":\"British Virgin Islands\",\"ip_address\":\"215.59.174.27\",\"email\":\"dmurray@kare.org\"},\n{\"id\":530,\"first_name\":\"Fred\",\"last_name\":\"Dean\",\"country\":\"Mali\",\"ip_address\":\"127.6.19.211\",\"email\":\"fdean@rhynoodle.net\"},\n{\"id\":531,\"first_name\":\"Michelle\",\"last_name\":\"Hanson\",\"country\":\"Kazakhstan\",\"ip_address\":\"81.112.239.154\",\"email\":\"mhanson@dynazzy.org\"},\n{\"id\":532,\"first_name\":\"Jean\",\"last_name\":\"Day\",\"country\":\"Dominica\",\"ip_address\":\"225.252.133.156\",\"email\":\"jday@wordify.edu\"},\n{\"id\":533,\"first_name\":\"Phyllis\",\"last_name\":\"Marshall\",\"country\":\"Czech Republic\",\"ip_address\":\"10.52.13.146\",\"email\":\"pmarshall@brainfire.net\"},\n{\"id\":534,\"first_name\":\"Eugene\",\"last_name\":\"Holmes\",\"country\":\"Falkland Islands (Malvinas)\",\"ip_address\":\"95.136.3.70\",\"email\":\"eholmes@kazio.com\"},\n{\"id\":535,\"first_name\":\"Jacqueline\",\"last_name\":\"Dunn\",\"country\":\"Philippines\",\"ip_address\":\"252.7.179.121\",\"email\":\"jdunn@quinu.biz\"},\n{\"id\":536,\"first_name\":\"Christina\",\"last_name\":\"Hill\",\"country\":\"Bosnia and Herzegovina\",\"ip_address\":\"184.165.136.1\",\"email\":\"chill@jabbertype.gov\"},\n{\"id\":537,\"first_name\":\"George\",\"last_name\":\"Simpson\",\"country\":\"Cook Islands\",\"ip_address\":\"26.237.155.78\",\"email\":\"gsimpson@photospace.name\"},\n{\"id\":538,\"first_name\":\"Jason\",\"last_name\":\"Spencer\",\"country\":\"Paraguay\",\"ip_address\":\"105.105.249.228\",\"email\":\"jspencer@npath.name\"},\n{\"id\":539,\"first_name\":\"Martin\",\"last_name\":\"Robertson\",\"country\":\"Zimbabwe\",\"ip_address\":\"240.86.108.4\",\"email\":\"mrobertson@skyndu.info\"},\n{\"id\":540,\"first_name\":\"Gary\",\"last_name\":\"Hart\",\"country\":\"French Southern Territories\",\"ip_address\":\"52.2.156.178\",\"email\":\"ghart@oloo.edu\"},\n{\"id\":541,\"first_name\":\"Benjamin\",\"last_name\":\"Carr\",\"country\":\"Northern Mariana Islands\",\"ip_address\":\"194.25.210.121\",\"email\":\"bcarr@wikizz.edu\"},\n{\"id\":542,\"first_name\":\"Patricia\",\"last_name\":\"Woods\",\"country\":\"South Africa\",\"ip_address\":\"204.146.195.105\",\"email\":\"pwoods@pixope.mil\"},\n{\"id\":543,\"first_name\":\"Cheryl\",\"last_name\":\"Bradley\",\"country\":\"Bouvet Island\",\"ip_address\":\"75.26.159.57\",\"email\":\"cbradley@divavu.mil\"},\n{\"id\":544,\"first_name\":\"Tina\",\"last_name\":\"Daniels\",\"country\":\"Antarctica\",\"ip_address\":\"147.36.230.82\",\"email\":\"tdaniels@aimbu.com\"},\n{\"id\":545,\"first_name\":\"Ruth\",\"last_name\":\"Price\",\"country\":\"Philippines\",\"ip_address\":\"109.72.28.213\",\"email\":\"rprice@gabspot.org\"},\n{\"id\":546,\"first_name\":\"Ryan\",\"last_name\":\"Cook\",\"country\":\"Liechtenstein\",\"ip_address\":\"148.227.174.169\",\"email\":\"rcook@skinder.gov\"},\n{\"id\":547,\"first_name\":\"Ashley\",\"last_name\":\"Hunter\",\"country\":\"Comoros\",\"ip_address\":\"226.90.252.77\",\"email\":\"ahunter@trunyx.org\"},\n{\"id\":548,\"first_name\":\"Deborah\",\"last_name\":\"Bradley\",\"country\":\"Benin\",\"ip_address\":\"129.65.85.21\",\"email\":\"dbradley@feedfish.net\"},\n{\"id\":549,\"first_name\":\"Matthew\",\"last_name\":\"Gray\",\"country\":\"Slovenia\",\"ip_address\":\"239.162.33.219\",\"email\":\"mgray@voomm.info\"},\n{\"id\":550,\"first_name\":\"Dorothy\",\"last_name\":\"Johnson\",\"country\":\"Lesotho\",\"ip_address\":\"24.103.201.194\",\"email\":\"djohnson@twitternation.info\"},\n{\"id\":551,\"first_name\":\"Ruby\",\"last_name\":\"Foster\",\"country\":\"Timor-Leste\",\"ip_address\":\"150.241.173.58\",\"email\":\"rfoster@skajo.info\"},\n{\"id\":552,\"first_name\":\"Steve\",\"last_name\":\"Ray\",\"country\":\"Turkmenistan\",\"ip_address\":\"247.147.53.114\",\"email\":\"sray@mita.mil\"},\n{\"id\":553,\"first_name\":\"Antonio\",\"last_name\":\"Dixon\",\"country\":\"Taiwan\",\"ip_address\":\"114.49.22.233\",\"email\":\"adixon@buzzshare.edu\"},\n{\"id\":554,\"first_name\":\"Diane\",\"last_name\":\"White\",\"country\":\"Iceland\",\"ip_address\":\"232.110.220.109\",\"email\":\"dwhite@yodel.edu\"},\n{\"id\":555,\"first_name\":\"Andrea\",\"last_name\":\"Mccoy\",\"country\":\"China\",\"ip_address\":\"140.205.229.186\",\"email\":\"amccoy@yacero.info\"},\n{\"id\":556,\"first_name\":\"Deborah\",\"last_name\":\"Gibson\",\"country\":\"Austria\",\"ip_address\":\"99.57.4.58\",\"email\":\"dgibson@kwideo.mil\"},\n{\"id\":557,\"first_name\":\"Shirley\",\"last_name\":\"Campbell\",\"country\":\"Jordan\",\"ip_address\":\"66.73.68.88\",\"email\":\"scampbell@linkbuzz.name\"},\n{\"id\":558,\"first_name\":\"Julia\",\"last_name\":\"Harper\",\"country\":\"Guadeloupe\",\"ip_address\":\"216.249.65.82\",\"email\":\"jharper@jabbersphere.com\"},\n{\"id\":559,\"first_name\":\"William\",\"last_name\":\"Matthews\",\"country\":\"Kyrgyzstan\",\"ip_address\":\"44.77.151.25\",\"email\":\"wmatthews@thoughtbeat.gov\"},\n{\"id\":560,\"first_name\":\"Gloria\",\"last_name\":\"Welch\",\"country\":\"Micronesia\",\"ip_address\":\"90.205.165.85\",\"email\":\"gwelch@meembee.edu\"},\n{\"id\":561,\"first_name\":\"George\",\"last_name\":\"Gutierrez\",\"country\":\"Mali\",\"ip_address\":\"112.53.4.160\",\"email\":\"ggutierrez@quimm.edu\"},\n{\"id\":562,\"first_name\":\"Gregory\",\"last_name\":\"Anderson\",\"country\":\"Bulgaria\",\"ip_address\":\"84.131.96.169\",\"email\":\"ganderson@buzzshare.info\"},\n{\"id\":563,\"first_name\":\"Alice\",\"last_name\":\"Evans\",\"country\":\"Faroe Islands\",\"ip_address\":\"21.240.154.208\",\"email\":\"aevans@yata.mil\"},\n{\"id\":564,\"first_name\":\"Phillip\",\"last_name\":\"West\",\"country\":\"Hungary\",\"ip_address\":\"95.95.45.239\",\"email\":\"pwest@fatz.net\"},\n{\"id\":565,\"first_name\":\"Sharon\",\"last_name\":\"Russell\",\"country\":\"Maldives\",\"ip_address\":\"180.104.228.81\",\"email\":\"srussell@flipstorm.mil\"},\n{\"id\":566,\"first_name\":\"Karen\",\"last_name\":\"Ray\",\"country\":\"Zambia\",\"ip_address\":\"9.25.241.121\",\"email\":\"kray@devpoint.org\"},\n{\"id\":567,\"first_name\":\"Henry\",\"last_name\":\"Murray\",\"country\":\"Ireland\",\"ip_address\":\"185.185.135.70\",\"email\":\"hmurray@yodo.gov\"},\n{\"id\":568,\"first_name\":\"Alice\",\"last_name\":\"Lopez\",\"country\":\"Senegal\",\"ip_address\":\"212.12.55.82\",\"email\":\"alopez@midel.info\"},\n{\"id\":569,\"first_name\":\"Gerald\",\"last_name\":\"Hansen\",\"country\":\"Papua New Guinea\",\"ip_address\":\"134.35.164.5\",\"email\":\"ghansen@eayo.biz\"},\n{\"id\":570,\"first_name\":\"Louise\",\"last_name\":\"Howard\",\"country\":\"Denmark\",\"ip_address\":\"99.44.36.43\",\"email\":\"lhoward@miboo.biz\"},\n{\"id\":571,\"first_name\":\"Russell\",\"last_name\":\"Ellis\",\"country\":\"Mexico\",\"ip_address\":\"221.13.197.183\",\"email\":\"rellis@trilia.org\"},\n{\"id\":572,\"first_name\":\"Steve\",\"last_name\":\"Turner\",\"country\":\"Liechtenstein\",\"ip_address\":\"242.149.164.176\",\"email\":\"sturner@voolia.net\"},\n{\"id\":573,\"first_name\":\"Martin\",\"last_name\":\"Edwards\",\"country\":\"Belize\",\"ip_address\":\"58.134.47.190\",\"email\":\"medwards@innojam.net\"},\n{\"id\":574,\"first_name\":\"Johnny\",\"last_name\":\"Robertson\",\"country\":\"Uruguay\",\"ip_address\":\"158.186.50.152\",\"email\":\"jrobertson@dynazzy.org\"},\n{\"id\":575,\"first_name\":\"Cynthia\",\"last_name\":\"Wells\",\"country\":\"Thailand\",\"ip_address\":\"135.213.177.97\",\"email\":\"cwells@youbridge.mil\"},\n{\"id\":576,\"first_name\":\"Jonathan\",\"last_name\":\"Campbell\",\"country\":\"American Samoa\",\"ip_address\":\"172.0.175.252\",\"email\":\"jcampbell@edgeblab.name\"},\n{\"id\":577,\"first_name\":\"Julie\",\"last_name\":\"Daniels\",\"country\":\"Antigua and Barbuda\",\"ip_address\":\"229.72.194.97\",\"email\":\"jdaniels@mymm.biz\"},\n{\"id\":578,\"first_name\":\"Joan\",\"last_name\":\"Jones\",\"country\":\"French Southern Territories\",\"ip_address\":\"159.107.158.11\",\"email\":\"jjones@vitz.biz\"},\n{\"id\":579,\"first_name\":\"Jessica\",\"last_name\":\"Henry\",\"country\":\"Eritrea\",\"ip_address\":\"158.58.120.36\",\"email\":\"jhenry@oyoloo.mil\"},\n{\"id\":580,\"first_name\":\"Shirley\",\"last_name\":\"Banks\",\"country\":\"Vanuatu\",\"ip_address\":\"157.187.144.150\",\"email\":\"sbanks@myworks.org\"},\n{\"id\":581,\"first_name\":\"Ronald\",\"last_name\":\"Stanley\",\"country\":\"Myanmar\",\"ip_address\":\"245.38.208.234\",\"email\":\"rstanley@skibox.edu\"},\n{\"id\":582,\"first_name\":\"Matthew\",\"last_name\":\"Hunt\",\"country\":\"Slovenia\",\"ip_address\":\"79.162.126.12\",\"email\":\"mhunt@blogpad.gov\"},\n{\"id\":583,\"first_name\":\"Thomas\",\"last_name\":\"White\",\"country\":\"Oman\",\"ip_address\":\"255.34.168.148\",\"email\":\"twhite@tagpad.net\"},\n{\"id\":584,\"first_name\":\"Howard\",\"last_name\":\"George\",\"country\":\"French Southern Territories\",\"ip_address\":\"189.10.35.26\",\"email\":\"hgeorge@bluezoom.gov\"},\n{\"id\":585,\"first_name\":\"Kevin\",\"last_name\":\"Hamilton\",\"country\":\"Slovenia\",\"ip_address\":\"4.93.178.22\",\"email\":\"khamilton@realfire.edu\"},\n{\"id\":586,\"first_name\":\"Elizabeth\",\"last_name\":\"Torres\",\"country\":\"Bhutan\",\"ip_address\":\"199.105.212.110\",\"email\":\"etorres@yodel.com\"},\n{\"id\":587,\"first_name\":\"Tammy\",\"last_name\":\"Wilson\",\"country\":\"Lebanon\",\"ip_address\":\"81.176.232.120\",\"email\":\"twilson@meeveo.edu\"},\n{\"id\":588,\"first_name\":\"Shawn\",\"last_name\":\"Spencer\",\"country\":\"Estonia\",\"ip_address\":\"156.42.202.62\",\"email\":\"sspencer@izio.mil\"},\n{\"id\":589,\"first_name\":\"Jack\",\"last_name\":\"Ferguson\",\"country\":\"Falkland Islands (Malvinas)\",\"ip_address\":\"54.35.211.138\",\"email\":\"jferguson@tagcat.name\"},\n{\"id\":590,\"first_name\":\"Keith\",\"last_name\":\"Bell\",\"country\":\"Yemen\",\"ip_address\":\"222.43.133.36\",\"email\":\"kbell@snaptags.info\"},\n{\"id\":591,\"first_name\":\"Henry\",\"last_name\":\"Hicks\",\"country\":\"Azerbaijan\",\"ip_address\":\"133.78.35.149\",\"email\":\"hhicks@dabz.info\"},\n{\"id\":592,\"first_name\":\"Keith\",\"last_name\":\"Ramos\",\"country\":\"Chad\",\"ip_address\":\"41.102.213.90\",\"email\":\"kramos@babbleblab.info\"},\n{\"id\":593,\"first_name\":\"Irene\",\"last_name\":\"Ortiz\",\"country\":\"French Polynesia\",\"ip_address\":\"207.114.231.4\",\"email\":\"iortiz@roodel.mil\"},\n{\"id\":594,\"first_name\":\"Charles\",\"last_name\":\"Tucker\",\"country\":\"Western Sahara\",\"ip_address\":\"128.16.183.8\",\"email\":\"ctucker@realfire.gov\"},\n{\"id\":595,\"first_name\":\"Phillip\",\"last_name\":\"Lynch\",\"country\":\"Saint Barthelemy\",\"ip_address\":\"168.156.133.210\",\"email\":\"plynch@mydeo.edu\"},\n{\"id\":596,\"first_name\":\"Frank\",\"last_name\":\"Mccoy\",\"country\":\"Cambodia\",\"ip_address\":\"21.246.155.49\",\"email\":\"fmccoy@tagfeed.info\"},\n{\"id\":597,\"first_name\":\"Jean\",\"last_name\":\"Lee\",\"country\":\"Bangladesh\",\"ip_address\":\"237.39.17.109\",\"email\":\"jlee@devpulse.org\"},\n{\"id\":598,\"first_name\":\"Eric\",\"last_name\":\"Gardner\",\"country\":\"Morocco\",\"ip_address\":\"27.92.207.213\",\"email\":\"egardner@topiczoom.edu\"},\n{\"id\":599,\"first_name\":\"Frances\",\"last_name\":\"Mccoy\",\"country\":\"Niger\",\"ip_address\":\"81.101.112.233\",\"email\":\"fmccoy@dablist.edu\"},\n{\"id\":600,\"first_name\":\"Amanda\",\"last_name\":\"Lynch\",\"country\":\"Saint Barthelemy\",\"ip_address\":\"112.221.146.148\",\"email\":\"alynch@mynte.info\"},\n{\"id\":601,\"first_name\":\"Tammy\",\"last_name\":\"Wood\",\"country\":\"Djibouti\",\"ip_address\":\"19.172.40.134\",\"email\":\"twood@zoomlounge.net\"},\n{\"id\":602,\"first_name\":\"Margaret\",\"last_name\":\"Lopez\",\"country\":\"\\u00c5land\",\"ip_address\":\"181.201.150.166\",\"email\":\"mlopez@lazzy.net\"},\n{\"id\":603,\"first_name\":\"Michael\",\"last_name\":\"Fisher\",\"country\":\"Cote d'Ivoire\",\"ip_address\":\"10.46.26.175\",\"email\":\"mfisher@kwimbee.edu\"},\n{\"id\":604,\"first_name\":\"Keith\",\"last_name\":\"Perez\",\"country\":\"Christmas Island\",\"ip_address\":\"43.25.58.150\",\"email\":\"kperez@skimia.name\"},\n{\"id\":605,\"first_name\":\"Charles\",\"last_name\":\"Hart\",\"country\":\"Philippines\",\"ip_address\":\"178.122.158.97\",\"email\":\"chart@roodel.com\"},\n{\"id\":606,\"first_name\":\"Eric\",\"last_name\":\"Crawford\",\"country\":\"India\",\"ip_address\":\"139.103.86.251\",\"email\":\"ecrawford@mudo.edu\"},\n{\"id\":607,\"first_name\":\"Victor\",\"last_name\":\"Vasquez\",\"country\":\"Mauritania\",\"ip_address\":\"55.37.16.241\",\"email\":\"vvasquez@zazio.gov\"},\n{\"id\":608,\"first_name\":\"Patricia\",\"last_name\":\"Ryan\",\"country\":\"Norway\",\"ip_address\":\"162.198.42.78\",\"email\":\"pryan@jabbertype.mil\"},\n{\"id\":609,\"first_name\":\"Martha\",\"last_name\":\"Morrison\",\"country\":\"Gibraltar\",\"ip_address\":\"64.232.13.151\",\"email\":\"mmorrison@edgepulse.com\"},\n{\"id\":610,\"first_name\":\"Emily\",\"last_name\":\"Welch\",\"country\":\"Turks and Caicos Islands\",\"ip_address\":\"22.157.174.176\",\"email\":\"ewelch@dynabox.mil\"},\n{\"id\":611,\"first_name\":\"Teresa\",\"last_name\":\"Gardner\",\"country\":\"Morocco\",\"ip_address\":\"165.187.205.236\",\"email\":\"tgardner@babbleopia.gov\"},\n{\"id\":612,\"first_name\":\"Pamela\",\"last_name\":\"Berry\",\"country\":\"Yugoslavia\",\"ip_address\":\"193.126.79.207\",\"email\":\"pberry@zazio.gov\"},\n{\"id\":613,\"first_name\":\"Jennifer\",\"last_name\":\"Morgan\",\"country\":\"Saint Martin\",\"ip_address\":\"235.204.61.24\",\"email\":\"jmorgan@eayo.org\"},\n{\"id\":614,\"first_name\":\"Margaret\",\"last_name\":\"Reynolds\",\"country\":\"Antigua and Barbuda\",\"ip_address\":\"45.146.130.28\",\"email\":\"mreynolds@rhynoodle.biz\"},\n{\"id\":615,\"first_name\":\"Edward\",\"last_name\":\"Harris\",\"country\":\"Vietnam\",\"ip_address\":\"219.196.133.46\",\"email\":\"eharris@kare.biz\"},\n{\"id\":616,\"first_name\":\"Randy\",\"last_name\":\"Lane\",\"country\":\"Bosnia and Herzegovina\",\"ip_address\":\"119.242.43.3\",\"email\":\"rlane@browsetype.mil\"},\n{\"id\":617,\"first_name\":\"Emily\",\"last_name\":\"Barnes\",\"country\":\"Haiti\",\"ip_address\":\"217.86.132.148\",\"email\":\"ebarnes@zoonoodle.com\"},\n{\"id\":618,\"first_name\":\"Alan\",\"last_name\":\"Taylor\",\"country\":\"Canada\",\"ip_address\":\"196.43.160.196\",\"email\":\"ataylor@yabox.mil\"},\n{\"id\":619,\"first_name\":\"Paul\",\"last_name\":\"Green\",\"country\":\"Libya\",\"ip_address\":\"191.191.242.241\",\"email\":\"pgreen@eabox.gov\"},\n{\"id\":620,\"first_name\":\"Tammy\",\"last_name\":\"King\",\"country\":\"Vanuatu\",\"ip_address\":\"142.72.164.77\",\"email\":\"tking@trilith.com\"},\n{\"id\":621,\"first_name\":\"Robin\",\"last_name\":\"Allen\",\"country\":\"Cyprus\",\"ip_address\":\"249.2.12.163\",\"email\":\"rallen@oodoo.org\"},\n{\"id\":622,\"first_name\":\"Teresa\",\"last_name\":\"Roberts\",\"country\":\"Oman\",\"ip_address\":\"184.144.200.100\",\"email\":\"troberts@dabvine.org\"},\n{\"id\":623,\"first_name\":\"Benjamin\",\"last_name\":\"Willis\",\"country\":\"Madagascar\",\"ip_address\":\"33.101.74.232\",\"email\":\"bwillis@trudeo.mil\"},\n{\"id\":624,\"first_name\":\"Jonathan\",\"last_name\":\"Carr\",\"country\":\"Niue\",\"ip_address\":\"68.67.168.170\",\"email\":\"jcarr@kwinu.biz\"},\n{\"id\":625,\"first_name\":\"Pamela\",\"last_name\":\"Sanchez\",\"country\":\"Italy\",\"ip_address\":\"230.169.55.184\",\"email\":\"psanchez@photobug.gov\"},\n{\"id\":626,\"first_name\":\"Phyllis\",\"last_name\":\"Davis\",\"country\":\"Cuba\",\"ip_address\":\"97.198.75.105\",\"email\":\"pdavis@talane.net\"},\n{\"id\":627,\"first_name\":\"Mark\",\"last_name\":\"Franklin\",\"country\":\"French Southern Territories\",\"ip_address\":\"243.121.238.3\",\"email\":\"mfranklin@edgetag.org\"},\n{\"id\":628,\"first_name\":\"Jason\",\"last_name\":\"Edwards\",\"country\":\"San Marino\",\"ip_address\":\"211.222.98.223\",\"email\":\"jedwards@brightbean.info\"},\n{\"id\":629,\"first_name\":\"Ruby\",\"last_name\":\"Jones\",\"country\":\"French Southern Territories\",\"ip_address\":\"161.221.31.108\",\"email\":\"rjones@topdrive.name\"},\n{\"id\":630,\"first_name\":\"Judith\",\"last_name\":\"Perkins\",\"country\":\"Brunei Darussalam\",\"ip_address\":\"139.12.111.50\",\"email\":\"jperkins@edgewire.biz\"},\n{\"id\":631,\"first_name\":\"Martha\",\"last_name\":\"Watson\",\"country\":\"Niger\",\"ip_address\":\"243.187.201.204\",\"email\":\"mwatson@linkbuzz.org\"},\n{\"id\":632,\"first_name\":\"Nicole\",\"last_name\":\"Simmons\",\"country\":\"Uruguay\",\"ip_address\":\"81.137.13.179\",\"email\":\"nsimmons@brainlounge.info\"},\n{\"id\":633,\"first_name\":\"Virginia\",\"last_name\":\"Gibson\",\"country\":\"Cayman Islands\",\"ip_address\":\"179.21.214.146\",\"email\":\"vgibson@abatz.info\"},\n{\"id\":634,\"first_name\":\"Heather\",\"last_name\":\"Shaw\",\"country\":\"Serbia\",\"ip_address\":\"44.136.198.226\",\"email\":\"hshaw@divanoodle.edu\"},\n{\"id\":635,\"first_name\":\"Pamela\",\"last_name\":\"Woods\",\"country\":\"Canada\",\"ip_address\":\"119.236.89.87\",\"email\":\"pwoods@blogspan.com\"},\n{\"id\":636,\"first_name\":\"Benjamin\",\"last_name\":\"Rodriguez\",\"country\":\"Uganda\",\"ip_address\":\"218.123.125.58\",\"email\":\"brodriguez@latz.info\"},\n{\"id\":637,\"first_name\":\"Nicole\",\"last_name\":\"Spencer\",\"country\":\"Kazakhstan\",\"ip_address\":\"164.203.97.183\",\"email\":\"nspencer@kazu.net\"},\n{\"id\":638,\"first_name\":\"Ernest\",\"last_name\":\"Turner\",\"country\":\"Korea, North\",\"ip_address\":\"53.123.56.170\",\"email\":\"eturner@kazio.name\"},\n{\"id\":639,\"first_name\":\"Paul\",\"last_name\":\"Perry\",\"country\":\"Togo\",\"ip_address\":\"148.167.99.81\",\"email\":\"pperry@wikizz.biz\"},\n{\"id\":640,\"first_name\":\"Teresa\",\"last_name\":\"Garrett\",\"country\":\"Guinea\",\"ip_address\":\"58.183.232.78\",\"email\":\"tgarrett@gabvine.mil\"},\n{\"id\":641,\"first_name\":\"Wayne\",\"last_name\":\"Reid\",\"country\":\"Afghanistan\",\"ip_address\":\"58.218.88.116\",\"email\":\"wreid@nlounge.net\"},\n{\"id\":642,\"first_name\":\"Joe\",\"last_name\":\"Reynolds\",\"country\":\"Tokelau\",\"ip_address\":\"94.230.105.14\",\"email\":\"jreynolds@innotype.edu\"},\n{\"id\":643,\"first_name\":\"Brenda\",\"last_name\":\"Stone\",\"country\":\"Denmark\",\"ip_address\":\"221.231.17.6\",\"email\":\"bstone@tagfeed.org\"},\n{\"id\":644,\"first_name\":\"Beverly\",\"last_name\":\"Washington\",\"country\":\"South Africa\",\"ip_address\":\"12.48.186.82\",\"email\":\"bwashington@feedfire.net\"},\n{\"id\":645,\"first_name\":\"Stephanie\",\"last_name\":\"Peters\",\"country\":\"French Guiana\",\"ip_address\":\"148.217.156.23\",\"email\":\"speters@twitterworks.edu\"},\n{\"id\":646,\"first_name\":\"Bonnie\",\"last_name\":\"Webb\",\"country\":\"Vietnam\",\"ip_address\":\"165.52.39.92\",\"email\":\"bwebb@mydeo.edu\"},\n{\"id\":647,\"first_name\":\"Ruby\",\"last_name\":\"Stewart\",\"country\":\"Lebanon\",\"ip_address\":\"197.228.146.116\",\"email\":\"rstewart@zoozzy.org\"},\n{\"id\":648,\"first_name\":\"Jason\",\"last_name\":\"Cruz\",\"country\":\"Mauritania\",\"ip_address\":\"169.139.14.182\",\"email\":\"jcruz@yakidoo.com\"},\n{\"id\":649,\"first_name\":\"Keith\",\"last_name\":\"Jenkins\",\"country\":\"Greenland\",\"ip_address\":\"131.150.191.181\",\"email\":\"kjenkins@ntag.mil\"},\n{\"id\":650,\"first_name\":\"Michelle\",\"last_name\":\"Robinson\",\"country\":\"Guadeloupe\",\"ip_address\":\"42.137.229.71\",\"email\":\"mrobinson@twinder.name\"},\n{\"id\":651,\"first_name\":\"Tina\",\"last_name\":\"Chavez\",\"country\":\"New Caledonia\",\"ip_address\":\"116.203.141.188\",\"email\":\"tchavez@browsebug.edu\"},\n{\"id\":652,\"first_name\":\"Juan\",\"last_name\":\"Sanchez\",\"country\":\"Colombia\",\"ip_address\":\"100.96.33.107\",\"email\":\"jsanchez@kamba.net\"},\n{\"id\":653,\"first_name\":\"Marie\",\"last_name\":\"Burton\",\"country\":\"Peru\",\"ip_address\":\"177.249.206.78\",\"email\":\"mburton@dablist.net\"},\n{\"id\":654,\"first_name\":\"Willie\",\"last_name\":\"Reynolds\",\"country\":\"Venezuela\",\"ip_address\":\"10.148.186.207\",\"email\":\"wreynolds@trunyx.gov\"},\n{\"id\":655,\"first_name\":\"Mildred\",\"last_name\":\"James\",\"country\":\"Trinidad and Tobago\",\"ip_address\":\"241.158.106.156\",\"email\":\"mjames@dazzlesphere.org\"},\n{\"id\":656,\"first_name\":\"Edward\",\"last_name\":\"Warren\",\"country\":\"British Indian Ocean Territory\",\"ip_address\":\"35.85.170.113\",\"email\":\"ewarren@brainfire.net\"},\n{\"id\":657,\"first_name\":\"Anne\",\"last_name\":\"Ortiz\",\"country\":\"Portugal\",\"ip_address\":\"191.230.102.36\",\"email\":\"aortiz@kare.gov\"},\n{\"id\":658,\"first_name\":\"Mildred\",\"last_name\":\"Phillips\",\"country\":\"Bouvet Island\",\"ip_address\":\"161.138.12.251\",\"email\":\"mphillips@tekfly.gov\"},\n{\"id\":659,\"first_name\":\"Jeremy\",\"last_name\":\"Duncan\",\"country\":\"Kyrgyzstan\",\"ip_address\":\"13.138.106.218\",\"email\":\"jduncan@innoz.net\"},\n{\"id\":660,\"first_name\":\"Kevin\",\"last_name\":\"Payne\",\"country\":\"Poland\",\"ip_address\":\"168.251.218.23\",\"email\":\"kpayne@oyoyo.mil\"},\n{\"id\":661,\"first_name\":\"Charles\",\"last_name\":\"Olson\",\"country\":\"British Virgin Islands\",\"ip_address\":\"28.174.117.74\",\"email\":\"colson@meejo.gov\"},\n{\"id\":662,\"first_name\":\"Joan\",\"last_name\":\"Hall\",\"country\":\"Chile\",\"ip_address\":\"4.6.206.90\",\"email\":\"jhall@blogxs.info\"},\n{\"id\":663,\"first_name\":\"Martin\",\"last_name\":\"Lopez\",\"country\":\"Argentina\",\"ip_address\":\"139.22.195.152\",\"email\":\"mlopez@gigashots.mil\"},\n{\"id\":664,\"first_name\":\"Steve\",\"last_name\":\"Brown\",\"country\":\"Croatia\",\"ip_address\":\"71.187.188.30\",\"email\":\"sbrown@realbuzz.info\"},\n{\"id\":665,\"first_name\":\"Elizabeth\",\"last_name\":\"Wright\",\"country\":\"Tajikistan\",\"ip_address\":\"166.174.17.131\",\"email\":\"ewright@eire.net\"},\n{\"id\":666,\"first_name\":\"Teresa\",\"last_name\":\"Williamson\",\"country\":\"Slovenia\",\"ip_address\":\"42.11.103.74\",\"email\":\"twilliamson@oyope.biz\"},\n{\"id\":667,\"first_name\":\"Norma\",\"last_name\":\"Wood\",\"country\":\"Uruguay\",\"ip_address\":\"144.185.195.254\",\"email\":\"nwood@eare.gov\"},\n{\"id\":668,\"first_name\":\"Brian\",\"last_name\":\"Howell\",\"country\":\"Poland\",\"ip_address\":\"5.19.17.147\",\"email\":\"bhowell@realmix.info\"},\n{\"id\":669,\"first_name\":\"Irene\",\"last_name\":\"Coleman\",\"country\":\"Philippines\",\"ip_address\":\"24.182.132.127\",\"email\":\"icoleman@ozu.org\"},\n{\"id\":670,\"first_name\":\"Brandon\",\"last_name\":\"Reid\",\"country\":\"Benin\",\"ip_address\":\"85.71.156.50\",\"email\":\"breid@yadel.name\"},\n{\"id\":671,\"first_name\":\"Billy\",\"last_name\":\"Gardner\",\"country\":\"British Virgin Islands\",\"ip_address\":\"108.146.97.46\",\"email\":\"bgardner@oozz.com\"},\n{\"id\":672,\"first_name\":\"Gary\",\"last_name\":\"Alvarez\",\"country\":\"China\",\"ip_address\":\"132.189.182.254\",\"email\":\"galvarez@jaxworks.mil\"},\n{\"id\":673,\"first_name\":\"Judith\",\"last_name\":\"Wheeler\",\"country\":\"Turks and Caicos Islands\",\"ip_address\":\"94.19.49.110\",\"email\":\"jwheeler@tanoodle.com\"},\n{\"id\":674,\"first_name\":\"Sean\",\"last_name\":\"Peterson\",\"country\":\"Cote d'Ivoire\",\"ip_address\":\"19.24.135.105\",\"email\":\"speterson@meeveo.com\"},\n{\"id\":675,\"first_name\":\"Walter\",\"last_name\":\"Peters\",\"country\":\"Saint Kitts and Nevis\",\"ip_address\":\"101.101.133.110\",\"email\":\"wpeters@twinte.com\"},\n{\"id\":676,\"first_name\":\"Willie\",\"last_name\":\"Kelly\",\"country\":\"Bangladesh\",\"ip_address\":\"29.167.216.149\",\"email\":\"wkelly@roodel.net\"},\n{\"id\":677,\"first_name\":\"Sharon\",\"last_name\":\"Alvarez\",\"country\":\"Bermuda\",\"ip_address\":\"36.161.118.128\",\"email\":\"salvarez@cogidoo.mil\"},\n{\"id\":678,\"first_name\":\"Aaron\",\"last_name\":\"Fowler\",\"country\":\"Morocco\",\"ip_address\":\"16.155.158.19\",\"email\":\"afowler@yakijo.info\"},\n{\"id\":679,\"first_name\":\"John\",\"last_name\":\"Hill\",\"country\":\"Bangladesh\",\"ip_address\":\"99.21.202.28\",\"email\":\"jhill@linktype.mil\"},\n{\"id\":680,\"first_name\":\"Wanda\",\"last_name\":\"Carroll\",\"country\":\"Cameroon\",\"ip_address\":\"251.5.247.16\",\"email\":\"wcarroll@wikizz.info\"},\n{\"id\":681,\"first_name\":\"Dennis\",\"last_name\":\"Cox\",\"country\":\"Martinique\",\"ip_address\":\"117.36.99.252\",\"email\":\"dcox@lajo.gov\"},\n{\"id\":682,\"first_name\":\"Earl\",\"last_name\":\"Ray\",\"country\":\"Eritrea\",\"ip_address\":\"87.160.159.48\",\"email\":\"eray@oozz.info\"},\n{\"id\":683,\"first_name\":\"Timothy\",\"last_name\":\"Ramirez\",\"country\":\"Bahamas\",\"ip_address\":\"209.225.8.125\",\"email\":\"tramirez@jamia.edu\"},\n{\"id\":684,\"first_name\":\"Robin\",\"last_name\":\"Brown\",\"country\":\"Australia\",\"ip_address\":\"252.145.26.26\",\"email\":\"rbrown@bubblebox.net\"},\n{\"id\":685,\"first_name\":\"Nicholas\",\"last_name\":\"Barnes\",\"country\":\"Georgia\",\"ip_address\":\"167.167.246.65\",\"email\":\"nbarnes@voomm.info\"},\n{\"id\":686,\"first_name\":\"Benjamin\",\"last_name\":\"Foster\",\"country\":\"Niger\",\"ip_address\":\"161.34.146.136\",\"email\":\"bfoster@youspan.org\"},\n{\"id\":687,\"first_name\":\"Melissa\",\"last_name\":\"Lane\",\"country\":\"Israel\",\"ip_address\":\"136.31.81.196\",\"email\":\"mlane@tambee.com\"},\n{\"id\":688,\"first_name\":\"Joan\",\"last_name\":\"Gilbert\",\"country\":\"Netherlands Antilles\",\"ip_address\":\"157.41.82.225\",\"email\":\"jgilbert@rhyloo.name\"},\n{\"id\":689,\"first_name\":\"Brandon\",\"last_name\":\"Austin\",\"country\":\"Antigua and Barbuda\",\"ip_address\":\"207.132.138.59\",\"email\":\"baustin@katz.net\"},\n{\"id\":690,\"first_name\":\"Antonio\",\"last_name\":\"Robinson\",\"country\":\"Saint Kitts and Nevis\",\"ip_address\":\"232.15.161.146\",\"email\":\"arobinson@gigaclub.com\"},\n{\"id\":691,\"first_name\":\"Mark\",\"last_name\":\"Jackson\",\"country\":\"Israel\",\"ip_address\":\"139.233.237.161\",\"email\":\"mjackson@brainverse.mil\"},\n{\"id\":692,\"first_name\":\"Scott\",\"last_name\":\"Lynch\",\"country\":\"Solomon Islands\",\"ip_address\":\"200.255.135.225\",\"email\":\"slynch@youopia.mil\"},\n{\"id\":693,\"first_name\":\"Judy\",\"last_name\":\"Lopez\",\"country\":\"Estonia\",\"ip_address\":\"183.216.59.117\",\"email\":\"jlopez@nlounge.biz\"},\n{\"id\":694,\"first_name\":\"Paul\",\"last_name\":\"Bailey\",\"country\":\"Morocco\",\"ip_address\":\"164.139.209.20\",\"email\":\"pbailey@agimba.name\"},\n{\"id\":695,\"first_name\":\"Ernest\",\"last_name\":\"Fowler\",\"country\":\"Western Sahara\",\"ip_address\":\"149.156.162.14\",\"email\":\"efowler@kwinu.org\"},\n{\"id\":696,\"first_name\":\"Marie\",\"last_name\":\"West\",\"country\":\"Finland\",\"ip_address\":\"3.251.71.64\",\"email\":\"mwest@jayo.name\"},\n{\"id\":697,\"first_name\":\"Christopher\",\"last_name\":\"Watkins\",\"country\":\"Sudan\",\"ip_address\":\"175.157.201.21\",\"email\":\"cwatkins@fanoodle.net\"},\n{\"id\":698,\"first_name\":\"Joan\",\"last_name\":\"Welch\",\"country\":\"Gambia\",\"ip_address\":\"123.56.172.133\",\"email\":\"jwelch@edgeify.info\"},\n{\"id\":699,\"first_name\":\"Nicole\",\"last_name\":\"Greene\",\"country\":\"Liechtenstein\",\"ip_address\":\"135.242.181.252\",\"email\":\"ngreene@edgewire.biz\"},\n{\"id\":700,\"first_name\":\"Randy\",\"last_name\":\"Hunter\",\"country\":\"Zambia\",\"ip_address\":\"34.101.42.99\",\"email\":\"rhunter@snaptags.biz\"},\n{\"id\":701,\"first_name\":\"Jeremy\",\"last_name\":\"Weaver\",\"country\":\"Nepal\",\"ip_address\":\"74.166.80.112\",\"email\":\"jweaver@jabberbean.gov\"},\n{\"id\":702,\"first_name\":\"Harry\",\"last_name\":\"Turner\",\"country\":\"Kyrgyzstan\",\"ip_address\":\"6.219.141.75\",\"email\":\"hturner@eadel.net\"},\n{\"id\":703,\"first_name\":\"Carlos\",\"last_name\":\"Romero\",\"country\":\"Dominica\",\"ip_address\":\"143.127.137.119\",\"email\":\"cromero@tagtune.org\"},\n{\"id\":704,\"first_name\":\"Christina\",\"last_name\":\"Phillips\",\"country\":\"Fiji\",\"ip_address\":\"188.189.55.37\",\"email\":\"cphillips@quamba.biz\"},\n{\"id\":705,\"first_name\":\"Stephen\",\"last_name\":\"Ross\",\"country\":\"Singapore\",\"ip_address\":\"72.25.216.140\",\"email\":\"sross@leexo.net\"},\n{\"id\":706,\"first_name\":\"Karen\",\"last_name\":\"Wallace\",\"country\":\"American Samoa\",\"ip_address\":\"60.244.5.167\",\"email\":\"kwallace@cogibox.net\"},\n{\"id\":707,\"first_name\":\"Gloria\",\"last_name\":\"Price\",\"country\":\"Antigua and Barbuda\",\"ip_address\":\"112.255.243.133\",\"email\":\"gprice@myworks.org\"},\n{\"id\":708,\"first_name\":\"Judy\",\"last_name\":\"Carter\",\"country\":\"Hungary\",\"ip_address\":\"204.81.97.88\",\"email\":\"jcarter@tekfly.biz\"},\n{\"id\":709,\"first_name\":\"Jennifer\",\"last_name\":\"Bell\",\"country\":\"Solomon Islands\",\"ip_address\":\"73.191.21.3\",\"email\":\"jbell@demizz.gov\"},\n{\"id\":710,\"first_name\":\"Helen\",\"last_name\":\"Carter\",\"country\":\"Turks and Caicos Islands\",\"ip_address\":\"107.68.251.67\",\"email\":\"hcarter@vipe.net\"},\n{\"id\":711,\"first_name\":\"Jerry\",\"last_name\":\"Harrison\",\"country\":\"Oman\",\"ip_address\":\"253.40.151.202\",\"email\":\"jharrison@photobean.com\"},\n{\"id\":712,\"first_name\":\"Deborah\",\"last_name\":\"Ford\",\"country\":\"Portugal\",\"ip_address\":\"220.12.157.139\",\"email\":\"dford@abata.edu\"},\n{\"id\":713,\"first_name\":\"Sean\",\"last_name\":\"Stewart\",\"country\":\"British Virgin Islands\",\"ip_address\":\"201.109.158.158\",\"email\":\"sstewart@quire.gov\"},\n{\"id\":714,\"first_name\":\"Kevin\",\"last_name\":\"Bailey\",\"country\":\"Germany\",\"ip_address\":\"253.169.23.31\",\"email\":\"kbailey@vinder.biz\"},\n{\"id\":715,\"first_name\":\"Nicole\",\"last_name\":\"Ross\",\"country\":\"Thailand\",\"ip_address\":\"192.234.80.109\",\"email\":\"nross@rhycero.name\"},\n{\"id\":716,\"first_name\":\"Aaron\",\"last_name\":\"Washington\",\"country\":\"Myanmar\",\"ip_address\":\"215.170.182.21\",\"email\":\"awashington@riffwire.gov\"},\n{\"id\":717,\"first_name\":\"Phillip\",\"last_name\":\"Taylor\",\"country\":\"Brazil\",\"ip_address\":\"99.253.115.233\",\"email\":\"ptaylor@rooxo.biz\"},\n{\"id\":718,\"first_name\":\"Judy\",\"last_name\":\"Griffin\",\"country\":\"Cocos (Keeling) Island\",\"ip_address\":\"219.231.42.234\",\"email\":\"jgriffin@dabtype.edu\"},\n{\"id\":719,\"first_name\":\"Rose\",\"last_name\":\"Wright\",\"country\":\"Bahamas\",\"ip_address\":\"253.125.38.95\",\"email\":\"rwright@feedspan.biz\"},\n{\"id\":720,\"first_name\":\"Benjamin\",\"last_name\":\"Gonzales\",\"country\":\"Iran\",\"ip_address\":\"154.86.177.171\",\"email\":\"bgonzales@devshare.net\"},\n{\"id\":721,\"first_name\":\"Stephanie\",\"last_name\":\"Lewis\",\"country\":\"Saint Pierre and Miquelon\",\"ip_address\":\"130.41.101.103\",\"email\":\"slewis@zoomcast.com\"},\n{\"id\":722,\"first_name\":\"Anna\",\"last_name\":\"Watkins\",\"country\":\"Tuvalu\",\"ip_address\":\"237.25.87.32\",\"email\":\"awatkins@mycat.mil\"},\n{\"id\":723,\"first_name\":\"Robert\",\"last_name\":\"Ortiz\",\"country\":\"Tunisia\",\"ip_address\":\"121.95.89.251\",\"email\":\"rortiz@centimia.edu\"},\n{\"id\":724,\"first_name\":\"Emily\",\"last_name\":\"Freeman\",\"country\":\"Norway\",\"ip_address\":\"205.208.84.1\",\"email\":\"efreeman@fliptune.com\"},\n{\"id\":725,\"first_name\":\"Rebecca\",\"last_name\":\"Nichols\",\"country\":\"Ghana\",\"ip_address\":\"223.69.138.224\",\"email\":\"rnichols@divanoodle.net\"},\n{\"id\":726,\"first_name\":\"Daniel\",\"last_name\":\"Duncan\",\"country\":\"Pakistan\",\"ip_address\":\"195.91.8.131\",\"email\":\"dduncan@minyx.biz\"},\n{\"id\":727,\"first_name\":\"Harry\",\"last_name\":\"Jordan\",\"country\":\"Monaco\",\"ip_address\":\"78.234.97.125\",\"email\":\"hjordan@mynte.gov\"},\n{\"id\":728,\"first_name\":\"Robert\",\"last_name\":\"Montgomery\",\"country\":\"British Virgin Islands\",\"ip_address\":\"230.32.202.120\",\"email\":\"rmontgomery@tagchat.com\"},\n{\"id\":729,\"first_name\":\"Gregory\",\"last_name\":\"Hill\",\"country\":\"Estonia\",\"ip_address\":\"172.8.244.23\",\"email\":\"ghill@rhynoodle.edu\"},\n{\"id\":730,\"first_name\":\"Janice\",\"last_name\":\"Graham\",\"country\":\"Belarus\",\"ip_address\":\"208.5.57.124\",\"email\":\"jgraham@photobug.edu\"},\n{\"id\":731,\"first_name\":\"Melissa\",\"last_name\":\"Russell\",\"country\":\"Greenland\",\"ip_address\":\"97.206.178.150\",\"email\":\"mrussell@quinu.edu\"},\n{\"id\":732,\"first_name\":\"Shawn\",\"last_name\":\"Gonzalez\",\"country\":\"Israel\",\"ip_address\":\"106.214.147.213\",\"email\":\"sgonzalez@fivechat.com\"},\n{\"id\":733,\"first_name\":\"Beverly\",\"last_name\":\"Hernandez\",\"country\":\"Saint Vincent and the Grenadines\",\"ip_address\":\"34.60.84.60\",\"email\":\"bhernandez@shufflester.biz\"},\n{\"id\":734,\"first_name\":\"Frank\",\"last_name\":\"Hansen\",\"country\":\"France\",\"ip_address\":\"193.39.47.188\",\"email\":\"fhansen@browsecat.name\"},\n{\"id\":735,\"first_name\":\"Sarah\",\"last_name\":\"Woods\",\"country\":\"Niger\",\"ip_address\":\"104.158.3.78\",\"email\":\"swoods@avamba.biz\"},\n{\"id\":736,\"first_name\":\"Benjamin\",\"last_name\":\"Cunningham\",\"country\":\"Bhutan\",\"ip_address\":\"164.66.74.173\",\"email\":\"bcunningham@skaboo.name\"},\n{\"id\":737,\"first_name\":\"Timothy\",\"last_name\":\"Spencer\",\"country\":\"Liechtenstein\",\"ip_address\":\"234.229.248.85\",\"email\":\"tspencer@dynazzy.net\"},\n{\"id\":738,\"first_name\":\"Judy\",\"last_name\":\"Rogers\",\"country\":\"Seychelles\",\"ip_address\":\"37.252.237.23\",\"email\":\"jrogers@youspan.com\"},\n{\"id\":739,\"first_name\":\"Anna\",\"last_name\":\"Dixon\",\"country\":\"Greece\",\"ip_address\":\"154.51.9.112\",\"email\":\"adixon@avavee.edu\"},\n{\"id\":740,\"first_name\":\"William\",\"last_name\":\"Hudson\",\"country\":\"Brazil\",\"ip_address\":\"107.189.243.231\",\"email\":\"whudson@edgetag.org\"},\n{\"id\":741,\"first_name\":\"Randy\",\"last_name\":\"Black\",\"country\":\"Antigua and Barbuda\",\"ip_address\":\"214.214.108.71\",\"email\":\"rblack@blogspan.info\"},\n{\"id\":742,\"first_name\":\"William\",\"last_name\":\"Willis\",\"country\":\"Jamaica\",\"ip_address\":\"16.124.225.3\",\"email\":\"wwillis@dynava.mil\"},\n{\"id\":743,\"first_name\":\"Evelyn\",\"last_name\":\"Peters\",\"country\":\"Anguilla\",\"ip_address\":\"207.5.114.58\",\"email\":\"epeters@gigashots.edu\"},\n{\"id\":744,\"first_name\":\"Andrea\",\"last_name\":\"Ortiz\",\"country\":\"Sierra Leone\",\"ip_address\":\"76.55.242.66\",\"email\":\"aortiz@oyondu.org\"},\n{\"id\":745,\"first_name\":\"Kimberly\",\"last_name\":\"Mills\",\"country\":\"Seychelles\",\"ip_address\":\"160.140.240.44\",\"email\":\"kmills@linkbuzz.name\"},\n{\"id\":746,\"first_name\":\"Diane\",\"last_name\":\"Arnold\",\"country\":\"Ukraine\",\"ip_address\":\"181.50.237.27\",\"email\":\"darnold@skynoodle.mil\"},\n{\"id\":747,\"first_name\":\"Cynthia\",\"last_name\":\"Hayes\",\"country\":\"Pitcairn Island\",\"ip_address\":\"158.18.178.154\",\"email\":\"chayes@thoughtbridge.biz\"},\n{\"id\":748,\"first_name\":\"Benjamin\",\"last_name\":\"Long\",\"country\":\"Papua New Guinea\",\"ip_address\":\"253.77.49.0\",\"email\":\"blong@gabtune.name\"},\n{\"id\":749,\"first_name\":\"Ashley\",\"last_name\":\"Duncan\",\"country\":\"Germany\",\"ip_address\":\"137.193.194.178\",\"email\":\"aduncan@ntag.edu\"},\n{\"id\":750,\"first_name\":\"Antonio\",\"last_name\":\"Spencer\",\"country\":\"Belarus\",\"ip_address\":\"101.32.229.27\",\"email\":\"aspencer@gabspot.info\"},\n{\"id\":751,\"first_name\":\"Anna\",\"last_name\":\"Bryant\",\"country\":\"Australia\",\"ip_address\":\"51.160.146.186\",\"email\":\"abryant@riffpath.mil\"},\n{\"id\":752,\"first_name\":\"Martha\",\"last_name\":\"Welch\",\"country\":\"Venezuela\",\"ip_address\":\"156.35.24.98\",\"email\":\"mwelch@wordtune.org\"},\n{\"id\":753,\"first_name\":\"Christopher\",\"last_name\":\"Gonzales\",\"country\":\"Guernsey\",\"ip_address\":\"60.159.125.105\",\"email\":\"cgonzales@feedfire.org\"},\n{\"id\":754,\"first_name\":\"Philip\",\"last_name\":\"Walker\",\"country\":\"Estonia\",\"ip_address\":\"103.152.239.65\",\"email\":\"pwalker@centimia.com\"},\n{\"id\":755,\"first_name\":\"Dorothy\",\"last_name\":\"Wallace\",\"country\":\"Bahamas\",\"ip_address\":\"55.76.177.11\",\"email\":\"dwallace@eire.com\"},\n{\"id\":756,\"first_name\":\"Roy\",\"last_name\":\"Williams\",\"country\":\"Poland\",\"ip_address\":\"60.123.157.196\",\"email\":\"rwilliams@edgepulse.net\"},\n{\"id\":757,\"first_name\":\"Rose\",\"last_name\":\"Anderson\",\"country\":\"Netherlands\",\"ip_address\":\"190.191.204.107\",\"email\":\"randerson@ozu.biz\"},\n{\"id\":758,\"first_name\":\"Bonnie\",\"last_name\":\"Edwards\",\"country\":\"Tunisia\",\"ip_address\":\"242.34.34.232\",\"email\":\"bedwards@gigashots.net\"},\n{\"id\":759,\"first_name\":\"Jeremy\",\"last_name\":\"Frazier\",\"country\":\"Aruba\",\"ip_address\":\"241.63.242.23\",\"email\":\"jfrazier@browseblab.biz\"},\n{\"id\":760,\"first_name\":\"Steven\",\"last_name\":\"Little\",\"country\":\"Philippines\",\"ip_address\":\"139.2.152.17\",\"email\":\"slittle@feedfish.biz\"},\n{\"id\":761,\"first_name\":\"Frank\",\"last_name\":\"Cox\",\"country\":\"Israel\",\"ip_address\":\"150.137.54.31\",\"email\":\"fcox@meetz.name\"},\n{\"id\":762,\"first_name\":\"Christine\",\"last_name\":\"Lawrence\",\"country\":\"Liechtenstein\",\"ip_address\":\"16.130.221.122\",\"email\":\"clawrence@linkbridge.mil\"},\n{\"id\":763,\"first_name\":\"Brenda\",\"last_name\":\"Thomas\",\"country\":\"Kuwait\",\"ip_address\":\"13.10.192.38\",\"email\":\"bthomas@flashpoint.biz\"},\n{\"id\":764,\"first_name\":\"Bonnie\",\"last_name\":\"Kennedy\",\"country\":\"Tuvalu\",\"ip_address\":\"255.216.7.189\",\"email\":\"bkennedy@eire.edu\"},\n{\"id\":765,\"first_name\":\"Dennis\",\"last_name\":\"Campbell\",\"country\":\"Guinea\",\"ip_address\":\"85.225.121.174\",\"email\":\"dcampbell@youopia.gov\"},\n{\"id\":766,\"first_name\":\"Janet\",\"last_name\":\"Reynolds\",\"country\":\"Austria\",\"ip_address\":\"39.159.117.79\",\"email\":\"jreynolds@topicware.biz\"},\n{\"id\":767,\"first_name\":\"Karen\",\"last_name\":\"Barnes\",\"country\":\"Mauritania\",\"ip_address\":\"161.231.131.54\",\"email\":\"kbarnes@trudoo.info\"},\n{\"id\":768,\"first_name\":\"David\",\"last_name\":\"Price\",\"country\":\"Bangladesh\",\"ip_address\":\"32.5.201.6\",\"email\":\"dprice@thoughtbeat.org\"},\n{\"id\":769,\"first_name\":\"Jane\",\"last_name\":\"Foster\",\"country\":\"France\",\"ip_address\":\"169.187.232.164\",\"email\":\"jfoster@skajo.info\"},\n{\"id\":770,\"first_name\":\"Harold\",\"last_name\":\"Moreno\",\"country\":\"Guyana\",\"ip_address\":\"104.106.178.50\",\"email\":\"hmoreno@edgewire.gov\"},\n{\"id\":771,\"first_name\":\"Emily\",\"last_name\":\"Richards\",\"country\":\"Saint Pierre and Miquelon\",\"ip_address\":\"183.91.63.224\",\"email\":\"erichards@brightdog.gov\"},\n{\"id\":772,\"first_name\":\"Kathryn\",\"last_name\":\"Bennett\",\"country\":\"Argentina\",\"ip_address\":\"46.16.132.159\",\"email\":\"kbennett@eamia.info\"},\n{\"id\":773,\"first_name\":\"Tammy\",\"last_name\":\"Burton\",\"country\":\"Bahrain\",\"ip_address\":\"205.59.172.113\",\"email\":\"tburton@dynabox.mil\"},\n{\"id\":774,\"first_name\":\"Ruby\",\"last_name\":\"Baker\",\"country\":\"Indonesia\",\"ip_address\":\"96.136.125.254\",\"email\":\"rbaker@snaptags.info\"},\n{\"id\":775,\"first_name\":\"Dorothy\",\"last_name\":\"Freeman\",\"country\":\"Cape Verde\",\"ip_address\":\"41.234.243.185\",\"email\":\"dfreeman@flashset.info\"},\n{\"id\":776,\"first_name\":\"Carolyn\",\"last_name\":\"Perez\",\"country\":\"Tuvalu\",\"ip_address\":\"71.112.39.253\",\"email\":\"cperez@buzzshare.org\"},\n{\"id\":777,\"first_name\":\"Elizabeth\",\"last_name\":\"Daniels\",\"country\":\"Tunisia\",\"ip_address\":\"105.38.25.255\",\"email\":\"edaniels@zoombox.gov\"},\n{\"id\":778,\"first_name\":\"Dorothy\",\"last_name\":\"Fields\",\"country\":\"Algeria\",\"ip_address\":\"75.2.4.121\",\"email\":\"dfields@photolist.com\"},\n{\"id\":779,\"first_name\":\"Kathleen\",\"last_name\":\"Hicks\",\"country\":\"Taiwan\",\"ip_address\":\"146.121.121.182\",\"email\":\"khicks@tagchat.org\"},\n{\"id\":780,\"first_name\":\"Jeffrey\",\"last_name\":\"Butler\",\"country\":\"Jersey\",\"ip_address\":\"12.88.218.194\",\"email\":\"jbutler@topicblab.biz\"},\n{\"id\":781,\"first_name\":\"Barbara\",\"last_name\":\"King\",\"country\":\"Syria\",\"ip_address\":\"99.205.82.217\",\"email\":\"bking@jaxworks.net\"},\n{\"id\":782,\"first_name\":\"Marie\",\"last_name\":\"Johnson\",\"country\":\"Belgium\",\"ip_address\":\"227.106.161.59\",\"email\":\"mjohnson@trilia.name\"},\n{\"id\":783,\"first_name\":\"Diana\",\"last_name\":\"Burke\",\"country\":\"Cote d'Ivoire\",\"ip_address\":\"254.199.236.144\",\"email\":\"dburke@edgeify.name\"},\n{\"id\":784,\"first_name\":\"Janice\",\"last_name\":\"King\",\"country\":\"Gibraltar\",\"ip_address\":\"121.3.224.61\",\"email\":\"jking@twitterbridge.net\"},\n{\"id\":785,\"first_name\":\"Craig\",\"last_name\":\"Lawson\",\"country\":\"Haiti\",\"ip_address\":\"89.121.230.17\",\"email\":\"clawson@lazz.mil\"},\n{\"id\":786,\"first_name\":\"Andrea\",\"last_name\":\"Richards\",\"country\":\"Albania\",\"ip_address\":\"218.182.214.159\",\"email\":\"arichards@skimia.edu\"},\n{\"id\":787,\"first_name\":\"Billy\",\"last_name\":\"Ryan\",\"country\":\"Guinea-Bissau\",\"ip_address\":\"66.100.49.233\",\"email\":\"bryan@katz.edu\"},\n{\"id\":788,\"first_name\":\"Terry\",\"last_name\":\"Baker\",\"country\":\"Antarctica\",\"ip_address\":\"184.15.81.183\",\"email\":\"tbaker@thoughtbeat.org\"},\n{\"id\":789,\"first_name\":\"Jason\",\"last_name\":\"Richards\",\"country\":\"Tunisia\",\"ip_address\":\"49.134.134.158\",\"email\":\"jrichards@nlounge.biz\"},\n{\"id\":790,\"first_name\":\"Peter\",\"last_name\":\"Garcia\",\"country\":\"Hungary\",\"ip_address\":\"84.107.193.155\",\"email\":\"pgarcia@voonix.net\"},\n{\"id\":791,\"first_name\":\"Jean\",\"last_name\":\"Ferguson\",\"country\":\"Faroe Islands\",\"ip_address\":\"123.191.44.15\",\"email\":\"jferguson@yoveo.net\"},\n{\"id\":792,\"first_name\":\"Victor\",\"last_name\":\"Wells\",\"country\":\"Jordan\",\"ip_address\":\"152.172.241.149\",\"email\":\"vwells@feedfire.mil\"},\n{\"id\":793,\"first_name\":\"Theresa\",\"last_name\":\"Mason\",\"country\":\"Brunei Darussalam\",\"ip_address\":\"19.201.92.174\",\"email\":\"tmason@kaymbo.net\"},\n{\"id\":794,\"first_name\":\"Arthur\",\"last_name\":\"Knight\",\"country\":\"Austria\",\"ip_address\":\"130.209.97.153\",\"email\":\"aknight@skipstorm.name\"},\n{\"id\":795,\"first_name\":\"Keith\",\"last_name\":\"Gilbert\",\"country\":\"Peru\",\"ip_address\":\"201.97.21.216\",\"email\":\"kgilbert@zoomlounge.mil\"},\n{\"id\":796,\"first_name\":\"Wanda\",\"last_name\":\"Robinson\",\"country\":\"Libya\",\"ip_address\":\"113.201.96.36\",\"email\":\"wrobinson@midel.com\"},\n{\"id\":797,\"first_name\":\"Jack\",\"last_name\":\"Carter\",\"country\":\"Micronesia\",\"ip_address\":\"80.59.224.219\",\"email\":\"jcarter@zooveo.biz\"},\n{\"id\":798,\"first_name\":\"Edward\",\"last_name\":\"Montgomery\",\"country\":\"Serbia\",\"ip_address\":\"179.16.128.4\",\"email\":\"emontgomery@twinte.edu\"},\n{\"id\":799,\"first_name\":\"Laura\",\"last_name\":\"Carter\",\"country\":\"Thailand\",\"ip_address\":\"215.219.210.212\",\"email\":\"lcarter@bluezoom.net\"},\n{\"id\":800,\"first_name\":\"Ashley\",\"last_name\":\"Jacobs\",\"country\":\"Bangladesh\",\"ip_address\":\"12.110.126.108\",\"email\":\"ajacobs@flashpoint.net\"},\n{\"id\":801,\"first_name\":\"Karen\",\"last_name\":\"Davis\",\"country\":\"Brunei Darussalam\",\"ip_address\":\"11.210.180.32\",\"email\":\"kdavis@dabtype.mil\"},\n{\"id\":802,\"first_name\":\"Dorothy\",\"last_name\":\"Barnes\",\"country\":\"Cocos (Keeling) Island\",\"ip_address\":\"240.144.32.137\",\"email\":\"dbarnes@skyvu.mil\"},\n{\"id\":803,\"first_name\":\"Christine\",\"last_name\":\"Day\",\"country\":\"Tuvalu\",\"ip_address\":\"31.71.209.9\",\"email\":\"cday@blogspan.mil\"},\n{\"id\":804,\"first_name\":\"Kimberly\",\"last_name\":\"Hayes\",\"country\":\"Lebanon\",\"ip_address\":\"16.85.238.190\",\"email\":\"khayes@zoomzone.mil\"},\n{\"id\":805,\"first_name\":\"Lawrence\",\"last_name\":\"Grant\",\"country\":\"Moldova\",\"ip_address\":\"143.105.159.166\",\"email\":\"lgrant@muxo.net\"},\n{\"id\":806,\"first_name\":\"Frances\",\"last_name\":\"Garcia\",\"country\":\"Cook Islands\",\"ip_address\":\"106.107.167.188\",\"email\":\"fgarcia@wordware.biz\"},\n{\"id\":807,\"first_name\":\"Irene\",\"last_name\":\"Ward\",\"country\":\"Suriname\",\"ip_address\":\"99.102.152.242\",\"email\":\"iward@katz.gov\"},\n{\"id\":808,\"first_name\":\"Evelyn\",\"last_name\":\"Dunn\",\"country\":\"Saint Lucia\",\"ip_address\":\"78.244.152.85\",\"email\":\"edunn@fivebridge.net\"},\n{\"id\":809,\"first_name\":\"Bobby\",\"last_name\":\"Young\",\"country\":\"Saint Martin\",\"ip_address\":\"117.134.149.2\",\"email\":\"byoung@skilith.edu\"},\n{\"id\":810,\"first_name\":\"Timothy\",\"last_name\":\"Peterson\",\"country\":\"Portugal\",\"ip_address\":\"197.125.139.217\",\"email\":\"tpeterson@flipopia.gov\"},\n{\"id\":811,\"first_name\":\"Martin\",\"last_name\":\"Romero\",\"country\":\"Ecuador\",\"ip_address\":\"4.105.46.121\",\"email\":\"mromero@photobug.info\"},\n{\"id\":812,\"first_name\":\"Arthur\",\"last_name\":\"Jones\",\"country\":\"Saint Vincent and the Grenadines\",\"ip_address\":\"85.120.239.240\",\"email\":\"ajones@realmix.mil\"},\n{\"id\":813,\"first_name\":\"Katherine\",\"last_name\":\"West\",\"country\":\"Myanmar\",\"ip_address\":\"37.23.143.226\",\"email\":\"kwest@babblestorm.mil\"},\n{\"id\":814,\"first_name\":\"Linda\",\"last_name\":\"Duncan\",\"country\":\"Libya\",\"ip_address\":\"187.169.85.58\",\"email\":\"lduncan@tazzy.net\"},\n{\"id\":815,\"first_name\":\"Lori\",\"last_name\":\"Allen\",\"country\":\"Philippines\",\"ip_address\":\"189.161.40.83\",\"email\":\"lallen@innotype.net\"},\n{\"id\":816,\"first_name\":\"Ruby\",\"last_name\":\"Wheeler\",\"country\":\"Guatemala\",\"ip_address\":\"113.221.112.161\",\"email\":\"rwheeler@twinder.name\"},\n{\"id\":817,\"first_name\":\"Patrick\",\"last_name\":\"Willis\",\"country\":\"Norfolk Island\",\"ip_address\":\"6.159.128.179\",\"email\":\"pwillis@geba.net\"},\n{\"id\":818,\"first_name\":\"Janice\",\"last_name\":\"Burns\",\"country\":\"Albania\",\"ip_address\":\"152.56.183.61\",\"email\":\"jburns@buzzster.org\"},\n{\"id\":819,\"first_name\":\"Antonio\",\"last_name\":\"Hawkins\",\"country\":\"Marshall Islands\",\"ip_address\":\"9.83.53.109\",\"email\":\"ahawkins@flashdog.biz\"},\n{\"id\":820,\"first_name\":\"Joshua\",\"last_name\":\"Martin\",\"country\":\"Swaziland\",\"ip_address\":\"82.119.189.226\",\"email\":\"jmartin@avaveo.edu\"},\n{\"id\":821,\"first_name\":\"Emily\",\"last_name\":\"Berry\",\"country\":\"Wallis and Futuna Islands\",\"ip_address\":\"161.253.92.172\",\"email\":\"eberry@jabberstorm.biz\"},\n{\"id\":822,\"first_name\":\"Marilyn\",\"last_name\":\"Mason\",\"country\":\"Christmas Island\",\"ip_address\":\"226.128.232.164\",\"email\":\"mmason@trilia.net\"},\n{\"id\":823,\"first_name\":\"Joseph\",\"last_name\":\"Morales\",\"country\":\"Singapore\",\"ip_address\":\"167.118.44.216\",\"email\":\"jmorales@katz.name\"},\n{\"id\":824,\"first_name\":\"Kevin\",\"last_name\":\"Hill\",\"country\":\"French Guiana\",\"ip_address\":\"128.84.116.198\",\"email\":\"khill@eamia.name\"},\n{\"id\":825,\"first_name\":\"Katherine\",\"last_name\":\"Hayes\",\"country\":\"Korea, South\",\"ip_address\":\"222.165.225.135\",\"email\":\"khayes@vinte.edu\"},\n{\"id\":826,\"first_name\":\"Brian\",\"last_name\":\"Clark\",\"country\":\"Nepal\",\"ip_address\":\"227.92.97.111\",\"email\":\"bclark@photobean.name\"},\n{\"id\":827,\"first_name\":\"John\",\"last_name\":\"Holmes\",\"country\":\"Dominican Republic\",\"ip_address\":\"244.30.91.14\",\"email\":\"jholmes@devshare.info\"},\n{\"id\":828,\"first_name\":\"Howard\",\"last_name\":\"Morales\",\"country\":\"Iran\",\"ip_address\":\"45.143.220.175\",\"email\":\"hmorales@kazio.com\"},\n{\"id\":829,\"first_name\":\"Kelly\",\"last_name\":\"Ramirez\",\"country\":\"Saint Vincent and the Grenadines\",\"ip_address\":\"183.12.170.31\",\"email\":\"kramirez@viva.net\"},\n{\"id\":830,\"first_name\":\"Dorothy\",\"last_name\":\"Phillips\",\"country\":\"Serbia\",\"ip_address\":\"160.55.253.180\",\"email\":\"dphillips@demimbu.net\"},\n{\"id\":831,\"first_name\":\"Clarence\",\"last_name\":\"Martinez\",\"country\":\"Cuba\",\"ip_address\":\"85.111.115.207\",\"email\":\"cmartinez@eamia.gov\"},\n{\"id\":832,\"first_name\":\"Peter\",\"last_name\":\"Kelly\",\"country\":\"Turkmenistan\",\"ip_address\":\"93.254.139.61\",\"email\":\"pkelly@jetwire.name\"},\n{\"id\":833,\"first_name\":\"Alice\",\"last_name\":\"Morgan\",\"country\":\"Guernsey\",\"ip_address\":\"138.74.235.135\",\"email\":\"amorgan@realbridge.net\"},\n{\"id\":834,\"first_name\":\"Steve\",\"last_name\":\"Cox\",\"country\":\"Luxembourg\",\"ip_address\":\"54.233.136.179\",\"email\":\"scox@divanoodle.biz\"},\n{\"id\":835,\"first_name\":\"Diana\",\"last_name\":\"Washington\",\"country\":\"United Kingdom\",\"ip_address\":\"223.90.177.158\",\"email\":\"dwashington@flashspan.name\"},\n{\"id\":836,\"first_name\":\"Douglas\",\"last_name\":\"Duncan\",\"country\":\"Jordan\",\"ip_address\":\"64.211.131.39\",\"email\":\"dduncan@reallinks.edu\"},\n{\"id\":837,\"first_name\":\"Willie\",\"last_name\":\"Fernandez\",\"country\":\"Netherlands\",\"ip_address\":\"3.159.232.19\",\"email\":\"wfernandez@yakidoo.net\"},\n{\"id\":838,\"first_name\":\"Philip\",\"last_name\":\"Robertson\",\"country\":\"Saudia Arabia\",\"ip_address\":\"138.55.117.5\",\"email\":\"probertson@mydo.com\"},\n{\"id\":839,\"first_name\":\"Sandra\",\"last_name\":\"Hawkins\",\"country\":\"El Salvador\",\"ip_address\":\"20.86.245.63\",\"email\":\"shawkins@photospace.net\"},\n{\"id\":840,\"first_name\":\"Kathleen\",\"last_name\":\"Dean\",\"country\":\"Cameroon\",\"ip_address\":\"252.8.53.74\",\"email\":\"kdean@reallinks.mil\"},\n{\"id\":841,\"first_name\":\"Joe\",\"last_name\":\"Moreno\",\"country\":\"Korea, South\",\"ip_address\":\"201.197.142.96\",\"email\":\"jmoreno@oyoloo.mil\"},\n{\"id\":842,\"first_name\":\"Kathryn\",\"last_name\":\"Gilbert\",\"country\":\"US Minor Outlying Islands\",\"ip_address\":\"77.229.120.204\",\"email\":\"kgilbert@realmix.edu\"},\n{\"id\":843,\"first_name\":\"Heather\",\"last_name\":\"Bryant\",\"country\":\"Iceland\",\"ip_address\":\"237.115.90.9\",\"email\":\"hbryant@yakidoo.gov\"},\n{\"id\":844,\"first_name\":\"Matthew\",\"last_name\":\"Hayes\",\"country\":\"Falkland Islands (Malvinas)\",\"ip_address\":\"222.229.179.254\",\"email\":\"mhayes@jabbertype.org\"},\n{\"id\":845,\"first_name\":\"Ralph\",\"last_name\":\"Martin\",\"country\":\"Nigeria\",\"ip_address\":\"82.87.40.234\",\"email\":\"rmartin@jabbercube.mil\"},\n{\"id\":846,\"first_name\":\"Katherine\",\"last_name\":\"Berry\",\"country\":\"Belgium\",\"ip_address\":\"125.112.61.175\",\"email\":\"kberry@realbuzz.net\"},\n{\"id\":847,\"first_name\":\"Patrick\",\"last_name\":\"Long\",\"country\":\"Faroe Islands\",\"ip_address\":\"235.121.46.10\",\"email\":\"plong@dabz.info\"},\n{\"id\":848,\"first_name\":\"Carol\",\"last_name\":\"Boyd\",\"country\":\"Peru\",\"ip_address\":\"52.242.226.229\",\"email\":\"cboyd@jetpulse.info\"},\n{\"id\":849,\"first_name\":\"George\",\"last_name\":\"Kelly\",\"country\":\"Ecuador\",\"ip_address\":\"91.221.104.167\",\"email\":\"gkelly@fivebridge.edu\"},\n{\"id\":850,\"first_name\":\"Michael\",\"last_name\":\"Lynch\",\"country\":\"Malta\",\"ip_address\":\"160.68.79.186\",\"email\":\"mlynch@ntags.edu\"},\n{\"id\":851,\"first_name\":\"Linda\",\"last_name\":\"Harris\",\"country\":\"Ascension Island\",\"ip_address\":\"245.97.57.63\",\"email\":\"lharris@jumpxs.mil\"},\n{\"id\":852,\"first_name\":\"Janet\",\"last_name\":\"Hart\",\"country\":\"Romania\",\"ip_address\":\"19.133.236.17\",\"email\":\"jhart@feedmix.edu\"},\n{\"id\":853,\"first_name\":\"Julia\",\"last_name\":\"Turner\",\"country\":\"South Georgia and the South Sandwich Islands\",\"ip_address\":\"133.189.223.63\",\"email\":\"jturner@zoozzy.info\"},\n{\"id\":854,\"first_name\":\"Terry\",\"last_name\":\"Parker\",\"country\":\"French Southern Territories\",\"ip_address\":\"152.229.86.255\",\"email\":\"tparker@yamia.org\"},\n{\"id\":855,\"first_name\":\"Raymond\",\"last_name\":\"Hansen\",\"country\":\"Mexico\",\"ip_address\":\"248.23.22.36\",\"email\":\"rhansen@browsedrive.com\"},\n{\"id\":856,\"first_name\":\"Lisa\",\"last_name\":\"Burke\",\"country\":\"Mexico\",\"ip_address\":\"176.153.69.144\",\"email\":\"lburke@buzzshare.gov\"},\n{\"id\":857,\"first_name\":\"Nancy\",\"last_name\":\"Wallace\",\"country\":\"Afghanistan\",\"ip_address\":\"82.173.57.99\",\"email\":\"nwallace@tagtune.biz\"},\n{\"id\":858,\"first_name\":\"Helen\",\"last_name\":\"Burke\",\"country\":\"Saint Pierre and Miquelon\",\"ip_address\":\"60.100.22.226\",\"email\":\"hburke@mydeo.edu\"},\n{\"id\":859,\"first_name\":\"Billy\",\"last_name\":\"Hunter\",\"country\":\"Montenegro\",\"ip_address\":\"58.17.37.2\",\"email\":\"bhunter@yoveo.mil\"},\n{\"id\":860,\"first_name\":\"Marilyn\",\"last_name\":\"Bailey\",\"country\":\"Iran\",\"ip_address\":\"119.226.47.76\",\"email\":\"mbailey@yoveo.com\"},\n{\"id\":861,\"first_name\":\"Timothy\",\"last_name\":\"Jenkins\",\"country\":\"Philippines\",\"ip_address\":\"81.150.31.249\",\"email\":\"tjenkins@wordpedia.com\"},\n{\"id\":862,\"first_name\":\"Amy\",\"last_name\":\"Jordan\",\"country\":\"Comoros\",\"ip_address\":\"46.12.185.234\",\"email\":\"ajordan@devify.net\"},\n{\"id\":863,\"first_name\":\"Donald\",\"last_name\":\"Reed\",\"country\":\"Togo\",\"ip_address\":\"211.118.54.105\",\"email\":\"dreed@gigabox.edu\"},\n{\"id\":864,\"first_name\":\"Sandra\",\"last_name\":\"Andrews\",\"country\":\"Reunion\",\"ip_address\":\"238.214.227.43\",\"email\":\"sandrews@jaxnation.name\"},\n{\"id\":865,\"first_name\":\"Earl\",\"last_name\":\"Kelly\",\"country\":\"Philippines\",\"ip_address\":\"114.221.103.56\",\"email\":\"ekelly@meevee.edu\"},\n{\"id\":866,\"first_name\":\"Bobby\",\"last_name\":\"Olson\",\"country\":\"Netherlands Antilles\",\"ip_address\":\"90.41.44.96\",\"email\":\"bolson@browsezoom.mil\"},\n{\"id\":867,\"first_name\":\"Ronald\",\"last_name\":\"Diaz\",\"country\":\"Martinique\",\"ip_address\":\"50.208.180.5\",\"email\":\"rdiaz@quimm.edu\"},\n{\"id\":868,\"first_name\":\"Brian\",\"last_name\":\"Reed\",\"country\":\"Slovakia\",\"ip_address\":\"131.80.107.161\",\"email\":\"breed@yata.org\"},\n{\"id\":869,\"first_name\":\"Jessica\",\"last_name\":\"Meyer\",\"country\":\"Kyrgyzstan\",\"ip_address\":\"235.223.68.177\",\"email\":\"jmeyer@fiveclub.info\"},\n{\"id\":870,\"first_name\":\"Doris\",\"last_name\":\"Gilbert\",\"country\":\"Cuba\",\"ip_address\":\"229.228.231.45\",\"email\":\"dgilbert@snaptags.com\"},\n{\"id\":871,\"first_name\":\"Judy\",\"last_name\":\"Jacobs\",\"country\":\"Finland\",\"ip_address\":\"192.213.243.28\",\"email\":\"jjacobs@oyope.name\"},\n{\"id\":872,\"first_name\":\"Marie\",\"last_name\":\"Turner\",\"country\":\"Bosnia and Herzegovina\",\"ip_address\":\"212.202.243.218\",\"email\":\"mturner@browsetype.net\"},\n{\"id\":873,\"first_name\":\"Lori\",\"last_name\":\"Hanson\",\"country\":\"Saint Vincent and the Grenadines\",\"ip_address\":\"78.185.185.121\",\"email\":\"lhanson@blogtag.org\"},\n{\"id\":874,\"first_name\":\"Jerry\",\"last_name\":\"Coleman\",\"country\":\"Marshall Islands\",\"ip_address\":\"228.252.177.23\",\"email\":\"jcoleman@miboo.biz\"},\n{\"id\":875,\"first_name\":\"Jeffrey\",\"last_name\":\"Foster\",\"country\":\"Greenland\",\"ip_address\":\"249.141.241.167\",\"email\":\"jfoster@oyonder.gov\"},\n{\"id\":876,\"first_name\":\"Jonathan\",\"last_name\":\"Lane\",\"country\":\"Uruguay\",\"ip_address\":\"150.139.23.231\",\"email\":\"jlane@kayveo.net\"},\n{\"id\":877,\"first_name\":\"Jimmy\",\"last_name\":\"Kelly\",\"country\":\"Korea, North\",\"ip_address\":\"241.166.71.148\",\"email\":\"jkelly@browsebug.org\"},\n{\"id\":878,\"first_name\":\"Judy\",\"last_name\":\"Gordon\",\"country\":\"Sudan\",\"ip_address\":\"70.114.204.153\",\"email\":\"jgordon@flashdog.gov\"},\n{\"id\":879,\"first_name\":\"Tina\",\"last_name\":\"Brooks\",\"country\":\"Togo\",\"ip_address\":\"130.221.221.50\",\"email\":\"tbrooks@thoughtstorm.info\"},\n{\"id\":880,\"first_name\":\"Kimberly\",\"last_name\":\"Cruz\",\"country\":\"Ethiopia\",\"ip_address\":\"140.152.90.255\",\"email\":\"kcruz@ozu.name\"},\n{\"id\":881,\"first_name\":\"Tina\",\"last_name\":\"Evans\",\"country\":\"Liechtenstein\",\"ip_address\":\"11.212.142.176\",\"email\":\"tevans@browsezoom.org\"},\n{\"id\":882,\"first_name\":\"Martha\",\"last_name\":\"Brooks\",\"country\":\"French Southern Territories\",\"ip_address\":\"108.204.143.88\",\"email\":\"mbrooks@zoonoodle.net\"},\n{\"id\":883,\"first_name\":\"Jonathan\",\"last_name\":\"Spencer\",\"country\":\"South Africa\",\"ip_address\":\"69.212.19.173\",\"email\":\"jspencer@gabspot.mil\"},\n{\"id\":884,\"first_name\":\"Heather\",\"last_name\":\"Marshall\",\"country\":\"Cayman Islands\",\"ip_address\":\"221.204.89.58\",\"email\":\"hmarshall@flashpoint.net\"},\n{\"id\":885,\"first_name\":\"Janice\",\"last_name\":\"Perkins\",\"country\":\"Mauritius\",\"ip_address\":\"212.255.79.252\",\"email\":\"jperkins@oyonder.info\"},\n{\"id\":886,\"first_name\":\"Melissa\",\"last_name\":\"Armstrong\",\"country\":\"Switzerland\",\"ip_address\":\"170.88.95.42\",\"email\":\"marmstrong@topicshots.net\"},\n{\"id\":887,\"first_name\":\"Nancy\",\"last_name\":\"Torres\",\"country\":\"British Virgin Islands\",\"ip_address\":\"33.21.101.38\",\"email\":\"ntorres@gabtune.info\"},\n{\"id\":888,\"first_name\":\"Sarah\",\"last_name\":\"Richards\",\"country\":\"Cocos (Keeling) Island\",\"ip_address\":\"4.234.252.190\",\"email\":\"srichards@meedoo.net\"},\n{\"id\":889,\"first_name\":\"Ronald\",\"last_name\":\"Henderson\",\"country\":\"Bouvet Island\",\"ip_address\":\"163.255.124.90\",\"email\":\"rhenderson@oozz.gov\"},\n{\"id\":890,\"first_name\":\"Kimberly\",\"last_name\":\"Patterson\",\"country\":\"Hungary\",\"ip_address\":\"156.50.203.98\",\"email\":\"kpatterson@kazio.edu\"},\n{\"id\":891,\"first_name\":\"Emily\",\"last_name\":\"Graham\",\"country\":\"Poland\",\"ip_address\":\"3.10.155.89\",\"email\":\"egraham@edgeify.net\"},\n{\"id\":892,\"first_name\":\"Paula\",\"last_name\":\"Powell\",\"country\":\"Norway\",\"ip_address\":\"135.109.94.39\",\"email\":\"ppowell@feedmix.biz\"},\n{\"id\":893,\"first_name\":\"Julia\",\"last_name\":\"George\",\"country\":\"USSR\",\"ip_address\":\"239.112.137.45\",\"email\":\"jgeorge@katz.name\"},\n{\"id\":894,\"first_name\":\"Rose\",\"last_name\":\"Olson\",\"country\":\"Marshall Islands\",\"ip_address\":\"67.158.199.152\",\"email\":\"rolson@dabtype.name\"},\n{\"id\":895,\"first_name\":\"Jimmy\",\"last_name\":\"Williamson\",\"country\":\"Turkmenistan\",\"ip_address\":\"48.138.177.36\",\"email\":\"jwilliamson@photospace.info\"},\n{\"id\":896,\"first_name\":\"Julie\",\"last_name\":\"Ellis\",\"country\":\"New Caledonia\",\"ip_address\":\"83.24.38.171\",\"email\":\"jellis@jaloo.net\"},\n{\"id\":897,\"first_name\":\"Judy\",\"last_name\":\"Gordon\",\"country\":\"Sierra Leone\",\"ip_address\":\"31.27.75.10\",\"email\":\"jgordon@meevee.com\"},\n{\"id\":898,\"first_name\":\"Johnny\",\"last_name\":\"Fields\",\"country\":\"Morocco\",\"ip_address\":\"80.73.175.102\",\"email\":\"jfields@realmix.mil\"},\n{\"id\":899,\"first_name\":\"Sarah\",\"last_name\":\"Franklin\",\"country\":\"Kiribati\",\"ip_address\":\"231.229.126.212\",\"email\":\"sfranklin@avaveo.mil\"},\n{\"id\":900,\"first_name\":\"Antonio\",\"last_name\":\"Diaz\",\"country\":\"USSR\",\"ip_address\":\"204.70.145.146\",\"email\":\"adiaz@riffpedia.gov\"},\n{\"id\":901,\"first_name\":\"Robert\",\"last_name\":\"Lynch\",\"country\":\"Burundi\",\"ip_address\":\"146.251.223.13\",\"email\":\"rlynch@voolia.gov\"},\n{\"id\":902,\"first_name\":\"Larry\",\"last_name\":\"Morgan\",\"country\":\"Malaysia\",\"ip_address\":\"27.38.230.138\",\"email\":\"lmorgan@zazio.mil\"},\n{\"id\":903,\"first_name\":\"Diana\",\"last_name\":\"Lawson\",\"country\":\"New Zealand\",\"ip_address\":\"51.141.170.208\",\"email\":\"dlawson@skajo.com\"},\n{\"id\":904,\"first_name\":\"Wayne\",\"last_name\":\"Woods\",\"country\":\"El Salvador\",\"ip_address\":\"170.47.96.22\",\"email\":\"wwoods@vitz.org\"},\n{\"id\":905,\"first_name\":\"Catherine\",\"last_name\":\"Baker\",\"country\":\"Nepal\",\"ip_address\":\"212.13.111.117\",\"email\":\"cbaker@innoz.net\"},\n{\"id\":906,\"first_name\":\"Theresa\",\"last_name\":\"Kennedy\",\"country\":\"Botswana\",\"ip_address\":\"230.149.42.140\",\"email\":\"tkennedy@snaptags.name\"},\n{\"id\":907,\"first_name\":\"Paul\",\"last_name\":\"Turner\",\"country\":\"Micronesia\",\"ip_address\":\"107.121.227.196\",\"email\":\"pturner@thoughtsphere.org\"},\n{\"id\":908,\"first_name\":\"Howard\",\"last_name\":\"Berry\",\"country\":\"Mozambique\",\"ip_address\":\"16.17.3.52\",\"email\":\"hberry@podcat.gov\"},\n{\"id\":909,\"first_name\":\"David\",\"last_name\":\"Simmons\",\"country\":\"Saint Lucia\",\"ip_address\":\"1.190.3.255\",\"email\":\"dsimmons@meejo.edu\"},\n{\"id\":910,\"first_name\":\"Juan\",\"last_name\":\"Thomas\",\"country\":\"Somalia\",\"ip_address\":\"45.236.122.102\",\"email\":\"jthomas@jumpxs.gov\"},\n{\"id\":911,\"first_name\":\"Larry\",\"last_name\":\"Cooper\",\"country\":\"Swaziland\",\"ip_address\":\"17.119.106.223\",\"email\":\"lcooper@brainfire.name\"},\n{\"id\":912,\"first_name\":\"Robin\",\"last_name\":\"Edwards\",\"country\":\"Somalia\",\"ip_address\":\"99.218.71.115\",\"email\":\"redwards@edgeblab.mil\"},\n{\"id\":913,\"first_name\":\"Laura\",\"last_name\":\"Miller\",\"country\":\"Solomon Islands\",\"ip_address\":\"245.216.176.84\",\"email\":\"lmiller@skipfire.edu\"},\n{\"id\":914,\"first_name\":\"Jack\",\"last_name\":\"Burton\",\"country\":\"Svalbard and Jan Mayen Islands\",\"ip_address\":\"114.105.114.146\",\"email\":\"jburton@skimia.com\"},\n{\"id\":915,\"first_name\":\"Thomas\",\"last_name\":\"Riley\",\"country\":\"Ireland\",\"ip_address\":\"98.101.54.175\",\"email\":\"triley@realbuzz.info\"},\n{\"id\":916,\"first_name\":\"Julie\",\"last_name\":\"Mendoza\",\"country\":\"Trinidad and Tobago\",\"ip_address\":\"63.193.131.109\",\"email\":\"jmendoza@brightdog.com\"},\n{\"id\":917,\"first_name\":\"Wayne\",\"last_name\":\"Flores\",\"country\":\"Iraq\",\"ip_address\":\"21.61.48.210\",\"email\":\"wflores@photobug.com\"},\n{\"id\":918,\"first_name\":\"Robert\",\"last_name\":\"Matthews\",\"country\":\"Russia\",\"ip_address\":\"154.170.172.77\",\"email\":\"rmatthews@abata.mil\"},\n{\"id\":919,\"first_name\":\"Frances\",\"last_name\":\"Nguyen\",\"country\":\"Ethiopia\",\"ip_address\":\"131.98.34.168\",\"email\":\"fnguyen@bubblemix.net\"},\n{\"id\":920,\"first_name\":\"Martha\",\"last_name\":\"Diaz\",\"country\":\"Syria\",\"ip_address\":\"55.201.72.174\",\"email\":\"mdiaz@linkbridge.edu\"},\n{\"id\":921,\"first_name\":\"Jeffrey\",\"last_name\":\"Dean\",\"country\":\"Niue\",\"ip_address\":\"35.64.217.180\",\"email\":\"jdean@mycat.com\"},\n{\"id\":922,\"first_name\":\"Sharon\",\"last_name\":\"Howard\",\"country\":\"Honduras\",\"ip_address\":\"201.184.209.194\",\"email\":\"showard@shufflester.name\"},\n{\"id\":923,\"first_name\":\"Jane\",\"last_name\":\"King\",\"country\":\"Guinea-Bissau\",\"ip_address\":\"115.226.14.36\",\"email\":\"jking@rhycero.org\"},\n{\"id\":924,\"first_name\":\"Laura\",\"last_name\":\"Adams\",\"country\":\"Germany\",\"ip_address\":\"248.144.114.157\",\"email\":\"ladams@skipstorm.org\"},\n{\"id\":925,\"first_name\":\"Jessica\",\"last_name\":\"Watkins\",\"country\":\"Belgium\",\"ip_address\":\"113.182.195.50\",\"email\":\"jwatkins@twitterlist.net\"},\n{\"id\":926,\"first_name\":\"Johnny\",\"last_name\":\"Young\",\"country\":\"Guinea-Bissau\",\"ip_address\":\"64.22.91.226\",\"email\":\"jyoung@ntag.name\"},\n{\"id\":927,\"first_name\":\"Patricia\",\"last_name\":\"Knight\",\"country\":\"Singapore\",\"ip_address\":\"64.135.46.26\",\"email\":\"pknight@topdrive.edu\"},\n{\"id\":928,\"first_name\":\"Douglas\",\"last_name\":\"Coleman\",\"country\":\"Saint Pierre and Miquelon\",\"ip_address\":\"156.240.43.9\",\"email\":\"dcoleman@topicstorm.net\"},\n{\"id\":929,\"first_name\":\"Judith\",\"last_name\":\"Gray\",\"country\":\"Tokelau\",\"ip_address\":\"54.21.114.7\",\"email\":\"jgray@zooveo.biz\"},\n{\"id\":930,\"first_name\":\"Harold\",\"last_name\":\"Sanders\",\"country\":\"Philippines\",\"ip_address\":\"198.74.218.181\",\"email\":\"hsanders@thoughtstorm.org\"},\n{\"id\":931,\"first_name\":\"Ralph\",\"last_name\":\"Rice\",\"country\":\"Cameroon\",\"ip_address\":\"187.206.190.229\",\"email\":\"rrice@reallinks.net\"},\n{\"id\":932,\"first_name\":\"Jacqueline\",\"last_name\":\"Gonzalez\",\"country\":\"Pitcairn Island\",\"ip_address\":\"228.175.102.2\",\"email\":\"jgonzalez@leexo.info\"},\n{\"id\":933,\"first_name\":\"Harry\",\"last_name\":\"Cook\",\"country\":\"Western Sahara\",\"ip_address\":\"181.36.249.67\",\"email\":\"hcook@kimia.info\"},\n{\"id\":934,\"first_name\":\"Lois\",\"last_name\":\"Simpson\",\"country\":\"Kyrgyzstan\",\"ip_address\":\"199.199.16.54\",\"email\":\"lsimpson@eadel.com\"},\n{\"id\":935,\"first_name\":\"Timothy\",\"last_name\":\"Thompson\",\"country\":\"Saint Helena\",\"ip_address\":\"130.14.235.94\",\"email\":\"tthompson@gigashots.edu\"},\n{\"id\":936,\"first_name\":\"Joyce\",\"last_name\":\"Simmons\",\"country\":\"Portugal\",\"ip_address\":\"122.218.210.17\",\"email\":\"jsimmons@topiclounge.mil\"},\n{\"id\":937,\"first_name\":\"Harry\",\"last_name\":\"Cooper\",\"country\":\"Mauritania\",\"ip_address\":\"249.250.199.197\",\"email\":\"hcooper@jetwire.net\"},\n{\"id\":938,\"first_name\":\"Andrew\",\"last_name\":\"Cooper\",\"country\":\"British Virgin Islands\",\"ip_address\":\"197.169.165.245\",\"email\":\"acooper@feedspan.mil\"},\n{\"id\":939,\"first_name\":\"Jacqueline\",\"last_name\":\"Graham\",\"country\":\"Svalbard and Jan Mayen Islands\",\"ip_address\":\"27.183.226.72\",\"email\":\"jgraham@mudo.edu\"},\n{\"id\":940,\"first_name\":\"Jeffrey\",\"last_name\":\"Dunn\",\"country\":\"South Georgia and the South Sandwich Islands\",\"ip_address\":\"205.190.157.3\",\"email\":\"jdunn@eimbee.gov\"},\n{\"id\":941,\"first_name\":\"Jacqueline\",\"last_name\":\"Cooper\",\"country\":\"Norway\",\"ip_address\":\"60.180.200.39\",\"email\":\"jcooper@kimia.gov\"},\n{\"id\":942,\"first_name\":\"Marie\",\"last_name\":\"Ford\",\"country\":\"New Zealand\",\"ip_address\":\"193.181.169.229\",\"email\":\"mford@mydeo.net\"},\n{\"id\":943,\"first_name\":\"Lillian\",\"last_name\":\"Palmer\",\"country\":\"Saint Pierre and Miquelon\",\"ip_address\":\"93.90.202.200\",\"email\":\"lpalmer@reallinks.edu\"},\n{\"id\":944,\"first_name\":\"Jeremy\",\"last_name\":\"Webb\",\"country\":\"US Minor Outlying Islands\",\"ip_address\":\"194.200.194.239\",\"email\":\"jwebb@flashset.edu\"},\n{\"id\":945,\"first_name\":\"Wanda\",\"last_name\":\"Baker\",\"country\":\"Russia\",\"ip_address\":\"5.37.5.85\",\"email\":\"wbaker@voolith.edu\"},\n{\"id\":946,\"first_name\":\"George\",\"last_name\":\"Mason\",\"country\":\"Angola\",\"ip_address\":\"6.71.243.91\",\"email\":\"gmason@rhyloo.org\"},\n{\"id\":947,\"first_name\":\"David\",\"last_name\":\"Holmes\",\"country\":\"Turks and Caicos Islands\",\"ip_address\":\"94.209.200.49\",\"email\":\"dholmes@eire.org\"},\n{\"id\":948,\"first_name\":\"Carolyn\",\"last_name\":\"Little\",\"country\":\"Laos\",\"ip_address\":\"237.6.247.109\",\"email\":\"clittle@demizz.mil\"},\n{\"id\":949,\"first_name\":\"Andrew\",\"last_name\":\"Cunningham\",\"country\":\"Saint Helena\",\"ip_address\":\"31.218.254.130\",\"email\":\"acunningham@bubblemix.org\"},\n{\"id\":950,\"first_name\":\"Diana\",\"last_name\":\"Duncan\",\"country\":\"Samoa\",\"ip_address\":\"159.194.99.197\",\"email\":\"dduncan@bubblebox.org\"},\n{\"id\":951,\"first_name\":\"Ryan\",\"last_name\":\"Mendoza\",\"country\":\"French Guiana\",\"ip_address\":\"33.99.7.121\",\"email\":\"rmendoza@brainbox.mil\"},\n{\"id\":952,\"first_name\":\"Maria\",\"last_name\":\"Brown\",\"country\":\"Eritrea\",\"ip_address\":\"49.138.173.27\",\"email\":\"mbrown@ntags.gov\"},\n{\"id\":953,\"first_name\":\"Marie\",\"last_name\":\"Ray\",\"country\":\"Bahrain\",\"ip_address\":\"232.174.154.54\",\"email\":\"mray@eimbee.com\"},\n{\"id\":954,\"first_name\":\"Scott\",\"last_name\":\"Pierce\",\"country\":\"Cocos (Keeling) Island\",\"ip_address\":\"123.248.17.232\",\"email\":\"spierce@tazz.net\"},\n{\"id\":955,\"first_name\":\"Catherine\",\"last_name\":\"Howard\",\"country\":\"Trinidad and Tobago\",\"ip_address\":\"89.151.94.95\",\"email\":\"choward@shuffledrive.org\"},\n{\"id\":956,\"first_name\":\"Steven\",\"last_name\":\"Howard\",\"country\":\"El Salvador\",\"ip_address\":\"61.174.46.252\",\"email\":\"showard@jatri.mil\"},\n{\"id\":957,\"first_name\":\"Bobby\",\"last_name\":\"Gray\",\"country\":\"Argentina\",\"ip_address\":\"94.170.235.35\",\"email\":\"bgray@skipstorm.info\"},\n{\"id\":958,\"first_name\":\"Ralph\",\"last_name\":\"Mcdonald\",\"country\":\"Liechtenstein\",\"ip_address\":\"62.0.193.131\",\"email\":\"rmcdonald@brainsphere.mil\"},\n{\"id\":959,\"first_name\":\"Scott\",\"last_name\":\"Lee\",\"country\":\"Saint Helena\",\"ip_address\":\"21.72.145.68\",\"email\":\"slee@chatterbridge.mil\"},\n{\"id\":960,\"first_name\":\"Judy\",\"last_name\":\"Sanchez\",\"country\":\"Gibraltar\",\"ip_address\":\"75.253.251.232\",\"email\":\"jsanchez@twitterworks.edu\"},\n{\"id\":961,\"first_name\":\"Andrea\",\"last_name\":\"Simmons\",\"country\":\"Andorra\",\"ip_address\":\"137.239.42.107\",\"email\":\"asimmons@fatz.gov\"},\n{\"id\":962,\"first_name\":\"Earl\",\"last_name\":\"Martin\",\"country\":\"Luxembourg\",\"ip_address\":\"133.132.202.168\",\"email\":\"emartin@livez.edu\"},\n{\"id\":963,\"first_name\":\"Kenneth\",\"last_name\":\"Cruz\",\"country\":\"Isle of Man\",\"ip_address\":\"118.124.122.64\",\"email\":\"kcruz@skyvu.edu\"},\n{\"id\":964,\"first_name\":\"Kathryn\",\"last_name\":\"Butler\",\"country\":\"Antigua and Barbuda\",\"ip_address\":\"164.137.170.206\",\"email\":\"kbutler@realpoint.edu\"},\n{\"id\":965,\"first_name\":\"Judy\",\"last_name\":\"Duncan\",\"country\":\"Bahrain\",\"ip_address\":\"44.214.141.234\",\"email\":\"jduncan@realmix.org\"},\n{\"id\":966,\"first_name\":\"Kathleen\",\"last_name\":\"Reid\",\"country\":\"Malta\",\"ip_address\":\"170.107.128.237\",\"email\":\"kreid@trilith.info\"},\n{\"id\":967,\"first_name\":\"Evelyn\",\"last_name\":\"George\",\"country\":\"Turkey\",\"ip_address\":\"25.167.7.132\",\"email\":\"egeorge@avamm.name\"},\n{\"id\":968,\"first_name\":\"Adam\",\"last_name\":\"Stephens\",\"country\":\"Belize\",\"ip_address\":\"145.213.49.100\",\"email\":\"astephens@thoughtstorm.name\"},\n{\"id\":969,\"first_name\":\"Johnny\",\"last_name\":\"Washington\",\"country\":\"Saint Pierre and Miquelon\",\"ip_address\":\"248.79.67.69\",\"email\":\"jwashington@photofeed.net\"},\n{\"id\":970,\"first_name\":\"Lisa\",\"last_name\":\"Cooper\",\"country\":\"Romania\",\"ip_address\":\"73.210.20.228\",\"email\":\"lcooper@yombu.edu\"},\n{\"id\":971,\"first_name\":\"Theresa\",\"last_name\":\"King\",\"country\":\"Guatemala\",\"ip_address\":\"12.250.174.158\",\"email\":\"tking@thoughtbridge.mil\"},\n{\"id\":972,\"first_name\":\"Judy\",\"last_name\":\"Reed\",\"country\":\"Norfolk Island\",\"ip_address\":\"178.4.129.135\",\"email\":\"jreed@dabvine.info\"},\n{\"id\":973,\"first_name\":\"Keith\",\"last_name\":\"Mcdonald\",\"country\":\"Guatemala\",\"ip_address\":\"12.180.80.205\",\"email\":\"kmcdonald@gigaclub.net\"},\n{\"id\":974,\"first_name\":\"Brandon\",\"last_name\":\"Collins\",\"country\":\"Kiribati\",\"ip_address\":\"228.46.37.167\",\"email\":\"bcollins@skibox.org\"},\n{\"id\":975,\"first_name\":\"Anna\",\"last_name\":\"Hunt\",\"country\":\"Finland\",\"ip_address\":\"15.201.29.175\",\"email\":\"ahunt@jamia.info\"},\n{\"id\":976,\"first_name\":\"Gary\",\"last_name\":\"Fernandez\",\"country\":\"Spain\",\"ip_address\":\"188.9.7.70\",\"email\":\"gfernandez@photolist.org\"},\n{\"id\":977,\"first_name\":\"Daniel\",\"last_name\":\"Bennett\",\"country\":\"Namibia\",\"ip_address\":\"82.213.201.179\",\"email\":\"dbennett@pixope.org\"},\n{\"id\":978,\"first_name\":\"Carolyn\",\"last_name\":\"Watkins\",\"country\":\"Burundi\",\"ip_address\":\"225.201.31.23\",\"email\":\"cwatkins@aimbu.mil\"},\n{\"id\":979,\"first_name\":\"Cynthia\",\"last_name\":\"Foster\",\"country\":\"Congo, Republic of\",\"ip_address\":\"202.253.251.236\",\"email\":\"cfoster@katz.com\"},\n{\"id\":980,\"first_name\":\"Louise\",\"last_name\":\"Fowler\",\"country\":\"Niger\",\"ip_address\":\"39.50.230.133\",\"email\":\"lfowler@mynte.biz\"},\n{\"id\":981,\"first_name\":\"Phillip\",\"last_name\":\"Gonzalez\",\"country\":\"South Georgia and the South Sandwich Islands\",\"ip_address\":\"58.113.235.164\",\"email\":\"pgonzalez@mydeo.mil\"},\n{\"id\":982,\"first_name\":\"Keith\",\"last_name\":\"Sanders\",\"country\":\"United Kingdom\",\"ip_address\":\"12.49.87.110\",\"email\":\"ksanders@quimba.info\"},\n{\"id\":983,\"first_name\":\"Juan\",\"last_name\":\"Perez\",\"country\":\"United States Virgin Islands\",\"ip_address\":\"65.90.182.154\",\"email\":\"jperez@skimia.net\"},\n{\"id\":984,\"first_name\":\"Dennis\",\"last_name\":\"Reyes\",\"country\":\"Northern Mariana Islands\",\"ip_address\":\"236.102.176.99\",\"email\":\"dreyes@meemm.gov\"},\n{\"id\":985,\"first_name\":\"Philip\",\"last_name\":\"Davis\",\"country\":\"Cape Verde\",\"ip_address\":\"35.167.61.93\",\"email\":\"pdavis@abatz.biz\"},\n{\"id\":986,\"first_name\":\"Andrew\",\"last_name\":\"Schmidt\",\"country\":\"Yemen\",\"ip_address\":\"80.93.18.210\",\"email\":\"aschmidt@ozu.org\"},\n{\"id\":987,\"first_name\":\"Dorothy\",\"last_name\":\"Morales\",\"country\":\"Austria\",\"ip_address\":\"241.55.241.211\",\"email\":\"dmorales@riffwire.name\"},\n{\"id\":988,\"first_name\":\"Jason\",\"last_name\":\"Stanley\",\"country\":\"Macau\",\"ip_address\":\"140.78.16.32\",\"email\":\"jstanley@gigaclub.name\"},\n{\"id\":989,\"first_name\":\"Joyce\",\"last_name\":\"Gibson\",\"country\":\"Lesotho\",\"ip_address\":\"210.226.62.131\",\"email\":\"jgibson@skyndu.gov\"},\n{\"id\":990,\"first_name\":\"Cynthia\",\"last_name\":\"Coleman\",\"country\":\"New Zealand\",\"ip_address\":\"13.236.209.57\",\"email\":\"ccoleman@eidel.org\"},\n{\"id\":991,\"first_name\":\"Jesse\",\"last_name\":\"Grant\",\"country\":\"Bulgaria\",\"ip_address\":\"52.29.106.22\",\"email\":\"jgrant@skyndu.gov\"},\n{\"id\":992,\"first_name\":\"Carlos\",\"last_name\":\"Nguyen\",\"country\":\"Paraguay\",\"ip_address\":\"134.42.93.143\",\"email\":\"cnguyen@skibox.org\"},\n{\"id\":993,\"first_name\":\"Donna\",\"last_name\":\"Little\",\"country\":\"France\",\"ip_address\":\"118.231.57.233\",\"email\":\"dlittle@zoomlounge.com\"},\n{\"id\":994,\"first_name\":\"Mary\",\"last_name\":\"Hudson\",\"country\":\"Saint Vincent and the Grenadines\",\"ip_address\":\"255.6.125.29\",\"email\":\"mhudson@twimm.net\"},\n{\"id\":995,\"first_name\":\"Anthony\",\"last_name\":\"Harrison\",\"country\":\"Myanmar\",\"ip_address\":\"112.38.15.16\",\"email\":\"aharrison@devpoint.info\"},\n{\"id\":996,\"first_name\":\"Albert\",\"last_name\":\"Garrett\",\"country\":\"Zimbabwe\",\"ip_address\":\"248.231.114.73\",\"email\":\"agarrett@chatterbridge.gov\"},\n{\"id\":997,\"first_name\":\"Edward\",\"last_name\":\"Walker\",\"country\":\"Ethiopia\",\"ip_address\":\"12.50.213.19\",\"email\":\"ewalker@ailane.mil\"},\n{\"id\":998,\"first_name\":\"Kevin\",\"last_name\":\"Moore\",\"country\":\"Togo\",\"ip_address\":\"217.223.107.31\",\"email\":\"kmoore@topiczoom.biz\"},\n{\"id\":999,\"first_name\":\"Patrick\",\"last_name\":\"Romero\",\"country\":\"Lithuania\",\"ip_address\":\"116.37.156.42\",\"email\":\"promero@feedfire.net\"},\n{\"id\":1000,\"first_name\":\"Annie\",\"last_name\":\"Reyes\",\"country\":\"Australia\",\"ip_address\":\"141.250.223.160\",\"email\":\"areyes@trilia.mil\"},\n{\"id\":1001,\"first_name\":\"Janet\",\"last_name\":\"Williamson\",\"country\":\"Poland\",\"ip_address\":\"106.37.228.162\",\"email\":\"jwilliamson@ozu.info\"},\n{\"id\":1002,\"first_name\":\"Frances\",\"last_name\":\"Fox\",\"country\":\"Lebanon\",\"ip_address\":\"175.160.202.111\",\"email\":\"ffox@babblestorm.info\"},\n{\"id\":1003,\"first_name\":\"Howard\",\"last_name\":\"Rice\",\"country\":\"Cape Verde\",\"ip_address\":\"11.157.248.143\",\"email\":\"hrice@aimbu.net\"},\n{\"id\":1004,\"first_name\":\"Mark\",\"last_name\":\"Stanley\",\"country\":\"Samoa\",\"ip_address\":\"97.83.214.55\",\"email\":\"mstanley@eayo.gov\"},\n{\"id\":1005,\"first_name\":\"Cynthia\",\"last_name\":\"King\",\"country\":\"Western Sahara\",\"ip_address\":\"58.141.45.237\",\"email\":\"cking@shufflester.biz\"},\n{\"id\":1006,\"first_name\":\"Russell\",\"last_name\":\"Lawson\",\"country\":\"Sierra Leone\",\"ip_address\":\"19.28.34.166\",\"email\":\"rlawson@gabspot.info\"},\n{\"id\":1007,\"first_name\":\"Joshua\",\"last_name\":\"Romero\",\"country\":\"Albania\",\"ip_address\":\"32.22.247.160\",\"email\":\"jromero@ntags.gov\"},\n{\"id\":1008,\"first_name\":\"Thomas\",\"last_name\":\"Campbell\",\"country\":\"American Samoa\",\"ip_address\":\"6.120.102.237\",\"email\":\"tcampbell@kazio.info\"},\n{\"id\":1009,\"first_name\":\"Douglas\",\"last_name\":\"Wheeler\",\"country\":\"Norfolk Island\",\"ip_address\":\"41.54.81.223\",\"email\":\"dwheeler@devbug.mil\"},\n{\"id\":1010,\"first_name\":\"Jean\",\"last_name\":\"Wells\",\"country\":\"Mali\",\"ip_address\":\"42.95.10.223\",\"email\":\"jwells@blognation.mil\"},\n{\"id\":1011,\"first_name\":\"Jimmy\",\"last_name\":\"Long\",\"country\":\"United Arab Emirates\",\"ip_address\":\"54.41.125.52\",\"email\":\"jlong@avamba.gov\"},\n{\"id\":1012,\"first_name\":\"Joseph\",\"last_name\":\"Young\",\"country\":\"Grenada\",\"ip_address\":\"214.163.113.155\",\"email\":\"jyoung@rhynoodle.info\"},\n{\"id\":1013,\"first_name\":\"Robert\",\"last_name\":\"Reynolds\",\"country\":\"Colombia\",\"ip_address\":\"190.10.255.57\",\"email\":\"rreynolds@dabjam.name\"},\n{\"id\":1014,\"first_name\":\"Antonio\",\"last_name\":\"Bailey\",\"country\":\"New Zealand\",\"ip_address\":\"86.81.65.81\",\"email\":\"abailey@youtags.gov\"},\n{\"id\":1015,\"first_name\":\"William\",\"last_name\":\"Hanson\",\"country\":\"Malaysia\",\"ip_address\":\"70.207.16.171\",\"email\":\"whanson@omba.gov\"},\n{\"id\":1016,\"first_name\":\"Diana\",\"last_name\":\"Ryan\",\"country\":\"Norway\",\"ip_address\":\"1.211.183.113\",\"email\":\"dryan@skimia.gov\"},\n{\"id\":1017,\"first_name\":\"Catherine\",\"last_name\":\"Adams\",\"country\":\"Bermuda\",\"ip_address\":\"188.165.52.93\",\"email\":\"cadams@rhycero.name\"},\n{\"id\":1018,\"first_name\":\"Deborah\",\"last_name\":\"Ruiz\",\"country\":\"Guyana\",\"ip_address\":\"62.253.142.81\",\"email\":\"druiz@ailane.mil\"},\n{\"id\":1019,\"first_name\":\"Paula\",\"last_name\":\"Black\",\"country\":\"Paraguay\",\"ip_address\":\"200.67.33.97\",\"email\":\"pblack@eire.edu\"},\n{\"id\":1020,\"first_name\":\"Michael\",\"last_name\":\"Collins\",\"country\":\"Iraq\",\"ip_address\":\"10.193.193.96\",\"email\":\"mcollins@livetube.net\"},\n{\"id\":1021,\"first_name\":\"Christina\",\"last_name\":\"Martinez\",\"country\":\"China\",\"ip_address\":\"88.37.237.159\",\"email\":\"cmartinez@quatz.name\"},\n{\"id\":1022,\"first_name\":\"Jennifer\",\"last_name\":\"Barnes\",\"country\":\"Vietnam\",\"ip_address\":\"122.113.59.253\",\"email\":\"jbarnes@trilia.org\"},\n{\"id\":1023,\"first_name\":\"Wayne\",\"last_name\":\"Long\",\"country\":\"Thailand\",\"ip_address\":\"254.186.208.150\",\"email\":\"wlong@skiptube.edu\"},\n{\"id\":1024,\"first_name\":\"Kelly\",\"last_name\":\"Flores\",\"country\":\"Netherlands Antilles\",\"ip_address\":\"194.88.212.215\",\"email\":\"kflores@zooxo.com\"},\n{\"id\":1025,\"first_name\":\"Walter\",\"last_name\":\"Anderson\",\"country\":\"Bolivia\",\"ip_address\":\"224.64.192.110\",\"email\":\"wanderson@babbleopia.edu\"},\n{\"id\":1026,\"first_name\":\"Lillian\",\"last_name\":\"Garrett\",\"country\":\"Greenland\",\"ip_address\":\"183.80.113.120\",\"email\":\"lgarrett@skippad.com\"},\n{\"id\":1027,\"first_name\":\"Laura\",\"last_name\":\"Gray\",\"country\":\"El Salvador\",\"ip_address\":\"155.57.75.108\",\"email\":\"lgray@miboo.com\"},\n{\"id\":1028,\"first_name\":\"Judy\",\"last_name\":\"Hansen\",\"country\":\"French Polynesia\",\"ip_address\":\"219.52.88.79\",\"email\":\"jhansen@jazzy.edu\"},\n{\"id\":1029,\"first_name\":\"Tammy\",\"last_name\":\"Adams\",\"country\":\"Cape Verde\",\"ip_address\":\"83.145.235.234\",\"email\":\"tadams@feednation.name\"},\n{\"id\":1030,\"first_name\":\"Donald\",\"last_name\":\"Nichols\",\"country\":\"Jersey\",\"ip_address\":\"157.93.33.25\",\"email\":\"dnichols@tagfeed.gov\"},\n{\"id\":1031,\"first_name\":\"Carol\",\"last_name\":\"Larson\",\"country\":\"Saint Pierre and Miquelon\",\"ip_address\":\"192.122.233.61\",\"email\":\"clarson@avamm.edu\"},\n{\"id\":1032,\"first_name\":\"Emily\",\"last_name\":\"Bailey\",\"country\":\"Costa Rica\",\"ip_address\":\"15.61.151.95\",\"email\":\"ebailey@zoonoodle.net\"},\n{\"id\":1033,\"first_name\":\"Jeremy\",\"last_name\":\"Banks\",\"country\":\"British Indian Ocean Territory\",\"ip_address\":\"137.93.70.38\",\"email\":\"jbanks@skibox.org\"},\n{\"id\":1034,\"first_name\":\"Michael\",\"last_name\":\"Evans\",\"country\":\"United Arab Emirates\",\"ip_address\":\"200.68.36.199\",\"email\":\"mevans@fivebridge.name\"},\n{\"id\":1035,\"first_name\":\"Heather\",\"last_name\":\"Howard\",\"country\":\"Sierra Leone\",\"ip_address\":\"147.48.245.102\",\"email\":\"hhoward@chatterbridge.com\"},\n{\"id\":1036,\"first_name\":\"Phillip\",\"last_name\":\"Williamson\",\"country\":\"Congo, Republic of\",\"ip_address\":\"179.9.222.52\",\"email\":\"pwilliamson@tagtune.info\"},\n{\"id\":1037,\"first_name\":\"Johnny\",\"last_name\":\"Butler\",\"country\":\"Finland\",\"ip_address\":\"24.48.217.88\",\"email\":\"jbutler@npath.gov\"},\n{\"id\":1038,\"first_name\":\"Jonathan\",\"last_name\":\"Lopez\",\"country\":\"French Polynesia\",\"ip_address\":\"199.176.127.162\",\"email\":\"jlopez@eabox.biz\"},\n{\"id\":1039,\"first_name\":\"Angela\",\"last_name\":\"Arnold\",\"country\":\"Saint Pierre and Miquelon\",\"ip_address\":\"147.243.5.205\",\"email\":\"aarnold@yamia.gov\"},\n{\"id\":1040,\"first_name\":\"Christopher\",\"last_name\":\"Phillips\",\"country\":\"Marshall Islands\",\"ip_address\":\"89.117.216.42\",\"email\":\"cphillips@quaxo.org\"},\n{\"id\":1041,\"first_name\":\"Laura\",\"last_name\":\"Bowman\",\"country\":\"Libya\",\"ip_address\":\"120.215.92.176\",\"email\":\"lbowman@youspan.biz\"},\n{\"id\":1042,\"first_name\":\"Sara\",\"last_name\":\"Rice\",\"country\":\"Paraguay\",\"ip_address\":\"180.44.162.181\",\"email\":\"srice@zoomdog.edu\"},\n{\"id\":1043,\"first_name\":\"Doris\",\"last_name\":\"Marshall\",\"country\":\"Cuba\",\"ip_address\":\"251.234.64.253\",\"email\":\"dmarshall@aibox.biz\"},\n{\"id\":1044,\"first_name\":\"Edward\",\"last_name\":\"Ross\",\"country\":\"Gabon\",\"ip_address\":\"103.141.254.64\",\"email\":\"eross@zazio.gov\"},\n{\"id\":1045,\"first_name\":\"Jason\",\"last_name\":\"Greene\",\"country\":\"Nicaragua\",\"ip_address\":\"27.89.27.29\",\"email\":\"jgreene@jayo.net\"},\n{\"id\":1046,\"first_name\":\"Justin\",\"last_name\":\"Williams\",\"country\":\"India\",\"ip_address\":\"19.139.20.192\",\"email\":\"jwilliams@devify.mil\"},\n{\"id\":1047,\"first_name\":\"Howard\",\"last_name\":\"Gordon\",\"country\":\"Vanuatu\",\"ip_address\":\"193.105.216.172\",\"email\":\"hgordon@aimbo.biz\"},\n{\"id\":1048,\"first_name\":\"Lawrence\",\"last_name\":\"Morales\",\"country\":\"Algeria\",\"ip_address\":\"231.190.98.214\",\"email\":\"lmorales@tagchat.edu\"},\n{\"id\":1049,\"first_name\":\"Janet\",\"last_name\":\"Morales\",\"country\":\"Nauru\",\"ip_address\":\"255.113.119.238\",\"email\":\"jmorales@brainbox.net\"},\n{\"id\":1050,\"first_name\":\"Kathryn\",\"last_name\":\"Russell\",\"country\":\"Andorra\",\"ip_address\":\"94.194.192.58\",\"email\":\"krussell@leenti.org\"},\n{\"id\":1051,\"first_name\":\"Patrick\",\"last_name\":\"Davis\",\"country\":\"France\",\"ip_address\":\"225.39.219.2\",\"email\":\"pdavis@divape.net\"},\n{\"id\":1052,\"first_name\":\"Dorothy\",\"last_name\":\"Reed\",\"country\":\"Lesotho\",\"ip_address\":\"145.51.95.48\",\"email\":\"dreed@edgeclub.net\"},\n{\"id\":1053,\"first_name\":\"Jonathan\",\"last_name\":\"Burke\",\"country\":\"Turks and Caicos Islands\",\"ip_address\":\"79.202.153.84\",\"email\":\"jburke@yozio.org\"},\n{\"id\":1054,\"first_name\":\"Jennifer\",\"last_name\":\"Murray\",\"country\":\"Laos\",\"ip_address\":\"19.110.255.93\",\"email\":\"jmurray@linkbuzz.mil\"},\n{\"id\":1055,\"first_name\":\"Rose\",\"last_name\":\"Stone\",\"country\":\"Belize\",\"ip_address\":\"46.205.236.7\",\"email\":\"rstone@linkbridge.name\"},\n{\"id\":1056,\"first_name\":\"Lori\",\"last_name\":\"Bryant\",\"country\":\"Cook Islands\",\"ip_address\":\"29.82.137.73\",\"email\":\"lbryant@roomm.biz\"},\n{\"id\":1057,\"first_name\":\"Teresa\",\"last_name\":\"Porter\",\"country\":\"Eritrea\",\"ip_address\":\"217.31.199.183\",\"email\":\"tporter@feedmix.edu\"},\n{\"id\":1058,\"first_name\":\"Kelly\",\"last_name\":\"Ellis\",\"country\":\"Slovenia\",\"ip_address\":\"254.181.193.104\",\"email\":\"kellis@voolia.gov\"},\n{\"id\":1059,\"first_name\":\"Robert\",\"last_name\":\"Roberts\",\"country\":\"Marshall Islands\",\"ip_address\":\"37.137.58.77\",\"email\":\"rroberts@brightdog.mil\"},\n{\"id\":1060,\"first_name\":\"Eric\",\"last_name\":\"Montgomery\",\"country\":\"Western Sahara\",\"ip_address\":\"25.82.69.97\",\"email\":\"emontgomery@fivebridge.edu\"},\n{\"id\":1061,\"first_name\":\"Deborah\",\"last_name\":\"Sullivan\",\"country\":\"Vanuatu\",\"ip_address\":\"4.242.103.179\",\"email\":\"dsullivan@photobug.org\"},\n{\"id\":1062,\"first_name\":\"Keith\",\"last_name\":\"Ellis\",\"country\":\"Poland\",\"ip_address\":\"92.97.207.106\",\"email\":\"kellis@devpoint.net\"},\n{\"id\":1063,\"first_name\":\"Jerry\",\"last_name\":\"Hunt\",\"country\":\"Sweden\",\"ip_address\":\"207.182.241.98\",\"email\":\"jhunt@yombu.name\"},\n{\"id\":1064,\"first_name\":\"Paula\",\"last_name\":\"Murray\",\"country\":\"Western Sahara\",\"ip_address\":\"165.138.12.215\",\"email\":\"pmurray@skaboo.net\"},\n{\"id\":1065,\"first_name\":\"Billy\",\"last_name\":\"Davis\",\"country\":\"Mauritius\",\"ip_address\":\"21.101.83.202\",\"email\":\"bdavis@mudo.biz\"},\n{\"id\":1066,\"first_name\":\"Eric\",\"last_name\":\"Welch\",\"country\":\"Greece\",\"ip_address\":\"27.234.4.72\",\"email\":\"ewelch@quatz.info\"},\n{\"id\":1067,\"first_name\":\"Samuel\",\"last_name\":\"Green\",\"country\":\"Hungary\",\"ip_address\":\"191.102.77.112\",\"email\":\"sgreen@demimbu.mil\"},\n{\"id\":1068,\"first_name\":\"Frances\",\"last_name\":\"Ferguson\",\"country\":\"Cuba\",\"ip_address\":\"228.117.138.30\",\"email\":\"fferguson@omba.name\"},\n{\"id\":1069,\"first_name\":\"Benjamin\",\"last_name\":\"Mccoy\",\"country\":\"Peru\",\"ip_address\":\"138.189.171.28\",\"email\":\"bmccoy@dabvine.gov\"},\n{\"id\":1070,\"first_name\":\"Jean\",\"last_name\":\"Harris\",\"country\":\"Grenada\",\"ip_address\":\"59.164.79.24\",\"email\":\"jharris@edgeclub.biz\"},\n{\"id\":1071,\"first_name\":\"Todd\",\"last_name\":\"Grant\",\"country\":\"Guadeloupe\",\"ip_address\":\"19.39.126.154\",\"email\":\"tgrant@photobug.gov\"},\n{\"id\":1072,\"first_name\":\"Joan\",\"last_name\":\"Green\",\"country\":\"Ascension Island\",\"ip_address\":\"193.251.69.157\",\"email\":\"jgreen@voonte.com\"},\n{\"id\":1073,\"first_name\":\"Terry\",\"last_name\":\"Miller\",\"country\":\"United Kingdom\",\"ip_address\":\"40.209.47.63\",\"email\":\"tmiller@skaboo.net\"},\n{\"id\":1074,\"first_name\":\"Teresa\",\"last_name\":\"Willis\",\"country\":\"Egypt\",\"ip_address\":\"55.58.95.240\",\"email\":\"twillis@dazzlesphere.com\"},\n{\"id\":1075,\"first_name\":\"Keith\",\"last_name\":\"Murray\",\"country\":\"Suriname\",\"ip_address\":\"46.29.216.194\",\"email\":\"kmurray@yambee.gov\"},\n{\"id\":1076,\"first_name\":\"Amanda\",\"last_name\":\"Griffin\",\"country\":\"Jersey\",\"ip_address\":\"121.38.232.177\",\"email\":\"agriffin@jetpulse.net\"},\n{\"id\":1077,\"first_name\":\"Eugene\",\"last_name\":\"Hansen\",\"country\":\"Philippines\",\"ip_address\":\"148.63.250.61\",\"email\":\"ehansen@zoombeat.mil\"},\n{\"id\":1078,\"first_name\":\"Doris\",\"last_name\":\"Hernandez\",\"country\":\"British Indian Ocean Territory\",\"ip_address\":\"8.159.184.133\",\"email\":\"dhernandez@izio.name\"},\n{\"id\":1079,\"first_name\":\"Arthur\",\"last_name\":\"Moreno\",\"country\":\"South Georgia and the South Sandwich Islands\",\"ip_address\":\"82.205.41.180\",\"email\":\"amoreno@photojam.name\"},\n{\"id\":1080,\"first_name\":\"Catherine\",\"last_name\":\"Fox\",\"country\":\"Reunion\",\"ip_address\":\"28.118.54.242\",\"email\":\"cfox@riffpath.com\"},\n{\"id\":1081,\"first_name\":\"Judy\",\"last_name\":\"Hawkins\",\"country\":\"Armenia\",\"ip_address\":\"113.85.115.26\",\"email\":\"jhawkins@eire.net\"},\n{\"id\":1082,\"first_name\":\"Dorothy\",\"last_name\":\"Wagner\",\"country\":\"Liechtenstein\",\"ip_address\":\"47.192.171.237\",\"email\":\"dwagner@eare.gov\"},\n{\"id\":1083,\"first_name\":\"Ryan\",\"last_name\":\"West\",\"country\":\"Georgia\",\"ip_address\":\"196.153.174.196\",\"email\":\"rwest@oyonder.name\"},\n{\"id\":1084,\"first_name\":\"Juan\",\"last_name\":\"Freeman\",\"country\":\"Georgia\",\"ip_address\":\"2.1.251.145\",\"email\":\"jfreeman@livetube.name\"},\n{\"id\":1085,\"first_name\":\"Deborah\",\"last_name\":\"Lane\",\"country\":\"Iraq\",\"ip_address\":\"66.167.46.241\",\"email\":\"dlane@topicblab.biz\"},\n{\"id\":1086,\"first_name\":\"Stephen\",\"last_name\":\"Carpenter\",\"country\":\"Taiwan\",\"ip_address\":\"208.223.11.21\",\"email\":\"scarpenter@kaymbo.com\"},\n{\"id\":1087,\"first_name\":\"Shirley\",\"last_name\":\"Sims\",\"country\":\"Papua New Guinea\",\"ip_address\":\"230.206.21.209\",\"email\":\"ssims@realbuzz.net\"},\n{\"id\":1088,\"first_name\":\"Teresa\",\"last_name\":\"Price\",\"country\":\"Niue\",\"ip_address\":\"67.61.42.166\",\"email\":\"tprice@voolith.org\"},\n{\"id\":1089,\"first_name\":\"Melissa\",\"last_name\":\"Sullivan\",\"country\":\"Cape Verde\",\"ip_address\":\"209.193.185.77\",\"email\":\"msullivan@yoveo.info\"},\n{\"id\":1090,\"first_name\":\"Martha\",\"last_name\":\"Williams\",\"country\":\"Mexico\",\"ip_address\":\"133.178.31.142\",\"email\":\"mwilliams@ntags.org\"},\n{\"id\":1091,\"first_name\":\"Jesse\",\"last_name\":\"Daniels\",\"country\":\"Liechtenstein\",\"ip_address\":\"211.239.107.50\",\"email\":\"jdaniels@topicshots.gov\"},\n{\"id\":1092,\"first_name\":\"Frank\",\"last_name\":\"Hawkins\",\"country\":\"Botswana\",\"ip_address\":\"225.17.211.212\",\"email\":\"fhawkins@zooxo.org\"},\n{\"id\":1093,\"first_name\":\"Margaret\",\"last_name\":\"Hunt\",\"country\":\"Pitcairn Island\",\"ip_address\":\"120.243.143.151\",\"email\":\"mhunt@quamba.info\"},\n{\"id\":1094,\"first_name\":\"Brandon\",\"last_name\":\"Hicks\",\"country\":\"Bhutan\",\"ip_address\":\"121.59.135.97\",\"email\":\"bhicks@wikizz.biz\"},\n{\"id\":1095,\"first_name\":\"Lori\",\"last_name\":\"Harrison\",\"country\":\"Swaziland\",\"ip_address\":\"89.104.197.182\",\"email\":\"lharrison@trudoo.info\"},\n{\"id\":1096,\"first_name\":\"Pamela\",\"last_name\":\"West\",\"country\":\"\\u00c5land\",\"ip_address\":\"112.87.101.248\",\"email\":\"pwest@skipfire.name\"},\n{\"id\":1097,\"first_name\":\"Barbara\",\"last_name\":\"Sanchez\",\"country\":\"Georgia\",\"ip_address\":\"49.167.131.161\",\"email\":\"bsanchez@meejo.org\"},\n{\"id\":1098,\"first_name\":\"Louis\",\"last_name\":\"Wheeler\",\"country\":\"French Guiana\",\"ip_address\":\"157.246.134.132\",\"email\":\"lwheeler@yoveo.org\"},\n{\"id\":1099,\"first_name\":\"Thomas\",\"last_name\":\"Patterson\",\"country\":\"Antigua and Barbuda\",\"ip_address\":\"157.134.49.166\",\"email\":\"tpatterson@twiyo.net\"},\n{\"id\":1100,\"first_name\":\"Kevin\",\"last_name\":\"Armstrong\",\"country\":\"Armenia\",\"ip_address\":\"244.224.49.250\",\"email\":\"karmstrong@wikibox.com\"},\n{\"id\":1101,\"first_name\":\"Sandra\",\"last_name\":\"Williams\",\"country\":\"Mali\",\"ip_address\":\"73.1.176.134\",\"email\":\"swilliams@latz.mil\"},\n{\"id\":1102,\"first_name\":\"Thomas\",\"last_name\":\"Boyd\",\"country\":\"Saint Barthelemy\",\"ip_address\":\"235.110.223.166\",\"email\":\"tboyd@gigazoom.info\"},\n{\"id\":1103,\"first_name\":\"Dennis\",\"last_name\":\"Perry\",\"country\":\"Netherlands Antilles\",\"ip_address\":\"215.101.124.5\",\"email\":\"dperry@eire.info\"},\n{\"id\":1104,\"first_name\":\"Ryan\",\"last_name\":\"Lopez\",\"country\":\"Faroe Islands\",\"ip_address\":\"129.48.135.140\",\"email\":\"rlopez@mynte.info\"},\n{\"id\":1105,\"first_name\":\"Rachel\",\"last_name\":\"Simpson\",\"country\":\"Aruba\",\"ip_address\":\"98.112.153.23\",\"email\":\"rsimpson@voonte.org\"},\n{\"id\":1106,\"first_name\":\"Juan\",\"last_name\":\"Adams\",\"country\":\"Uruguay\",\"ip_address\":\"47.197.53.184\",\"email\":\"jadams@twitternation.net\"},\n{\"id\":1107,\"first_name\":\"Willie\",\"last_name\":\"Owens\",\"country\":\"Cook Islands\",\"ip_address\":\"153.182.5.81\",\"email\":\"wowens@abatz.mil\"},\n{\"id\":1108,\"first_name\":\"Charles\",\"last_name\":\"Thompson\",\"country\":\"Palau\",\"ip_address\":\"207.14.109.143\",\"email\":\"cthompson@ntags.edu\"},\n{\"id\":1109,\"first_name\":\"Joan\",\"last_name\":\"Williams\",\"country\":\"Malaysia\",\"ip_address\":\"209.132.247.239\",\"email\":\"jwilliams@oyondu.edu\"},\n{\"id\":1110,\"first_name\":\"Fred\",\"last_name\":\"Spencer\",\"country\":\"Tunisia\",\"ip_address\":\"101.248.249.173\",\"email\":\"fspencer@twitterbridge.name\"},\n{\"id\":1111,\"first_name\":\"Thomas\",\"last_name\":\"Schmidt\",\"country\":\"Luxembourg\",\"ip_address\":\"242.241.41.225\",\"email\":\"tschmidt@thoughtbridge.biz\"},\n{\"id\":1112,\"first_name\":\"Angela\",\"last_name\":\"Mendoza\",\"country\":\"Turks and Caicos Islands\",\"ip_address\":\"144.64.249.29\",\"email\":\"amendoza@podcat.mil\"},\n{\"id\":1113,\"first_name\":\"Michelle\",\"last_name\":\"Ortiz\",\"country\":\"Vatican City State (Holy See)\",\"ip_address\":\"251.200.179.33\",\"email\":\"mortiz@yakitri.net\"},\n{\"id\":1114,\"first_name\":\"Pamela\",\"last_name\":\"Lawrence\",\"country\":\"Cook Islands\",\"ip_address\":\"72.142.3.137\",\"email\":\"plawrence@mudo.mil\"},\n{\"id\":1115,\"first_name\":\"Howard\",\"last_name\":\"Thompson\",\"country\":\"Argentina\",\"ip_address\":\"142.162.172.159\",\"email\":\"hthompson@eabox.info\"},\n{\"id\":1116,\"first_name\":\"Shirley\",\"last_name\":\"Gilbert\",\"country\":\"Belize\",\"ip_address\":\"74.232.81.137\",\"email\":\"sgilbert@gigazoom.gov\"},\n{\"id\":1117,\"first_name\":\"Scott\",\"last_name\":\"Williamson\",\"country\":\"Montserrat\",\"ip_address\":\"11.132.227.114\",\"email\":\"swilliamson@dabshots.biz\"},\n{\"id\":1118,\"first_name\":\"Annie\",\"last_name\":\"Holmes\",\"country\":\"Singapore\",\"ip_address\":\"118.60.121.146\",\"email\":\"aholmes@skivee.com\"},\n{\"id\":1119,\"first_name\":\"Wayne\",\"last_name\":\"Hall\",\"country\":\"Senegal\",\"ip_address\":\"178.238.238.157\",\"email\":\"whall@mymm.gov\"},\n{\"id\":1120,\"first_name\":\"William\",\"last_name\":\"Shaw\",\"country\":\"Sao Tome and Principe\",\"ip_address\":\"76.198.57.23\",\"email\":\"wshaw@rhybox.com\"},\n{\"id\":1121,\"first_name\":\"Diane\",\"last_name\":\"Richardson\",\"country\":\"Burkina Faso\",\"ip_address\":\"156.45.185.243\",\"email\":\"drichardson@tazzy.biz\"},\n{\"id\":1122,\"first_name\":\"Nicole\",\"last_name\":\"Jacobs\",\"country\":\"Cameroon\",\"ip_address\":\"62.208.220.52\",\"email\":\"njacobs@shuffledrive.edu\"},\n{\"id\":1123,\"first_name\":\"Ronald\",\"last_name\":\"Price\",\"country\":\"Iraq\",\"ip_address\":\"139.73.43.176\",\"email\":\"rprice@edgeclub.gov\"},\n{\"id\":1124,\"first_name\":\"Johnny\",\"last_name\":\"Greene\",\"country\":\"Gibraltar\",\"ip_address\":\"140.139.205.232\",\"email\":\"jgreene@jetwire.info\"},\n{\"id\":1125,\"first_name\":\"Paul\",\"last_name\":\"Hunter\",\"country\":\"Hungary\",\"ip_address\":\"150.17.246.206\",\"email\":\"phunter@eazzy.gov\"},\n{\"id\":1126,\"first_name\":\"Martha\",\"last_name\":\"Frazier\",\"country\":\"Belize\",\"ip_address\":\"254.191.208.39\",\"email\":\"mfrazier@teklist.info\"},\n{\"id\":1127,\"first_name\":\"Patrick\",\"last_name\":\"Young\",\"country\":\"Jersey\",\"ip_address\":\"44.25.76.172\",\"email\":\"pyoung@thoughtsphere.name\"},\n{\"id\":1128,\"first_name\":\"Joe\",\"last_name\":\"Garcia\",\"country\":\"Saint Lucia\",\"ip_address\":\"143.235.243.220\",\"email\":\"jgarcia@eire.gov\"},\n{\"id\":1129,\"first_name\":\"Nancy\",\"last_name\":\"Medina\",\"country\":\"Equatorial Guinea\",\"ip_address\":\"201.223.108.107\",\"email\":\"nmedina@tagpad.biz\"},\n{\"id\":1130,\"first_name\":\"Theresa\",\"last_name\":\"Boyd\",\"country\":\"American Samoa\",\"ip_address\":\"78.190.88.194\",\"email\":\"tboyd@rhyzio.org\"},\n{\"id\":1131,\"first_name\":\"Melissa\",\"last_name\":\"Hunt\",\"country\":\"Cameroon\",\"ip_address\":\"101.118.233.116\",\"email\":\"mhunt@wordify.mil\"},\n{\"id\":1132,\"first_name\":\"Lisa\",\"last_name\":\"Edwards\",\"country\":\"Zimbabwe\",\"ip_address\":\"174.118.156.78\",\"email\":\"ledwards@janyx.mil\"},\n{\"id\":1133,\"first_name\":\"Helen\",\"last_name\":\"Green\",\"country\":\"Bulgaria\",\"ip_address\":\"109.49.11.248\",\"email\":\"hgreen@fanoodle.biz\"},\n{\"id\":1134,\"first_name\":\"Eugene\",\"last_name\":\"Clark\",\"country\":\"Yugoslavia\",\"ip_address\":\"91.121.22.83\",\"email\":\"eclark@topdrive.edu\"},\n{\"id\":1135,\"first_name\":\"Kevin\",\"last_name\":\"Fox\",\"country\":\"Luxembourg\",\"ip_address\":\"172.136.76.175\",\"email\":\"kfox@oozz.info\"},\n{\"id\":1136,\"first_name\":\"Elizabeth\",\"last_name\":\"Montgomery\",\"country\":\"Chad\",\"ip_address\":\"248.106.98.57\",\"email\":\"emontgomery@plajo.gov\"},\n{\"id\":1137,\"first_name\":\"Raymond\",\"last_name\":\"Rogers\",\"country\":\"United States Virgin Islands\",\"ip_address\":\"45.8.33.145\",\"email\":\"rrogers@bluezoom.gov\"},\n{\"id\":1138,\"first_name\":\"Brian\",\"last_name\":\"Bailey\",\"country\":\"Palestinian Territory, Occupied\",\"ip_address\":\"156.214.26.69\",\"email\":\"bbailey@jaxworks.edu\"},\n{\"id\":1139,\"first_name\":\"Alan\",\"last_name\":\"Long\",\"country\":\"Montenegro\",\"ip_address\":\"92.220.185.3\",\"email\":\"along@jetwire.biz\"},\n{\"id\":1140,\"first_name\":\"Charles\",\"last_name\":\"Dunn\",\"country\":\"Dominica\",\"ip_address\":\"6.20.47.83\",\"email\":\"cdunn@trilith.org\"},\n{\"id\":1141,\"first_name\":\"Gregory\",\"last_name\":\"Gomez\",\"country\":\"Liberia\",\"ip_address\":\"10.17.244.176\",\"email\":\"ggomez@abata.org\"},\n{\"id\":1142,\"first_name\":\"Jesse\",\"last_name\":\"Hill\",\"country\":\"Jersey\",\"ip_address\":\"89.19.155.165\",\"email\":\"jhill@babblestorm.com\"},\n{\"id\":1143,\"first_name\":\"Cynthia\",\"last_name\":\"Rice\",\"country\":\"Romania\",\"ip_address\":\"242.201.86.184\",\"email\":\"crice@realfire.info\"},\n{\"id\":1144,\"first_name\":\"Jean\",\"last_name\":\"Scott\",\"country\":\"San Marino\",\"ip_address\":\"96.218.136.24\",\"email\":\"jscott@brainfire.org\"},\n{\"id\":1145,\"first_name\":\"Adam\",\"last_name\":\"Welch\",\"country\":\"Sao Tome and Principe\",\"ip_address\":\"93.197.180.190\",\"email\":\"awelch@skyndu.name\"},\n{\"id\":1146,\"first_name\":\"Timothy\",\"last_name\":\"Garza\",\"country\":\"Saint Martin\",\"ip_address\":\"247.139.59.69\",\"email\":\"tgarza@flipopia.mil\"},\n{\"id\":1147,\"first_name\":\"Gary\",\"last_name\":\"Hudson\",\"country\":\"Niger\",\"ip_address\":\"53.112.102.190\",\"email\":\"ghudson@dablist.edu\"},\n{\"id\":1148,\"first_name\":\"Debra\",\"last_name\":\"Vasquez\",\"country\":\"Turkey\",\"ip_address\":\"10.224.101.243\",\"email\":\"dvasquez@brainbox.gov\"},\n{\"id\":1149,\"first_name\":\"Diana\",\"last_name\":\"Matthews\",\"country\":\"Denmark\",\"ip_address\":\"47.128.116.214\",\"email\":\"dmatthews@gabvine.gov\"},\n{\"id\":1150,\"first_name\":\"Wanda\",\"last_name\":\"Rice\",\"country\":\"Brazil\",\"ip_address\":\"120.233.73.143\",\"email\":\"wrice@zooveo.gov\"},\n{\"id\":1151,\"first_name\":\"Scott\",\"last_name\":\"Berry\",\"country\":\"Mauritania\",\"ip_address\":\"97.2.67.199\",\"email\":\"sberry@tambee.edu\"},\n{\"id\":1152,\"first_name\":\"Phyllis\",\"last_name\":\"Cunningham\",\"country\":\"Liechtenstein\",\"ip_address\":\"199.75.166.106\",\"email\":\"pcunningham@quatz.com\"},\n{\"id\":1153,\"first_name\":\"Evelyn\",\"last_name\":\"Willis\",\"country\":\"Lithuania\",\"ip_address\":\"133.225.75.126\",\"email\":\"ewillis@centizu.edu\"},\n{\"id\":1154,\"first_name\":\"Bobby\",\"last_name\":\"Alvarez\",\"country\":\"Bahamas\",\"ip_address\":\"100.180.141.163\",\"email\":\"balvarez@ailane.biz\"},\n{\"id\":1155,\"first_name\":\"Gloria\",\"last_name\":\"Ramos\",\"country\":\"Ethiopia\",\"ip_address\":\"168.33.179.207\",\"email\":\"gramos@mita.net\"},\n{\"id\":1156,\"first_name\":\"Anthony\",\"last_name\":\"Gordon\",\"country\":\"Guadeloupe\",\"ip_address\":\"26.179.29.98\",\"email\":\"agordon@shuffletag.edu\"},\n{\"id\":1157,\"first_name\":\"Eric\",\"last_name\":\"Edwards\",\"country\":\"Myanmar\",\"ip_address\":\"214.182.108.98\",\"email\":\"eedwards@skiptube.net\"},\n{\"id\":1158,\"first_name\":\"Roger\",\"last_name\":\"Gardner\",\"country\":\"Christmas Island\",\"ip_address\":\"234.46.141.138\",\"email\":\"rgardner@dabfeed.net\"},\n{\"id\":1159,\"first_name\":\"Jimmy\",\"last_name\":\"Montgomery\",\"country\":\"Guyana\",\"ip_address\":\"129.132.99.52\",\"email\":\"jmontgomery@topicblab.name\"},\n{\"id\":1160,\"first_name\":\"Louis\",\"last_name\":\"Hawkins\",\"country\":\"Cayman Islands\",\"ip_address\":\"116.140.245.5\",\"email\":\"lhawkins@jabbercube.org\"},\n{\"id\":1161,\"first_name\":\"Jane\",\"last_name\":\"Romero\",\"country\":\"Saint Kitts and Nevis\",\"ip_address\":\"185.142.207.183\",\"email\":\"jromero@photojam.info\"},\n{\"id\":1162,\"first_name\":\"Beverly\",\"last_name\":\"Armstrong\",\"country\":\"Belgium\",\"ip_address\":\"74.127.0.114\",\"email\":\"barmstrong@vitz.org\"},\n{\"id\":1163,\"first_name\":\"Wayne\",\"last_name\":\"Jackson\",\"country\":\"Isle of Man\",\"ip_address\":\"125.31.15.135\",\"email\":\"wjackson@bubblebox.info\"},\n{\"id\":1164,\"first_name\":\"Jesse\",\"last_name\":\"Moore\",\"country\":\"Barbados\",\"ip_address\":\"71.222.14.220\",\"email\":\"jmoore@oyoyo.name\"},\n{\"id\":1165,\"first_name\":\"Christina\",\"last_name\":\"Ortiz\",\"country\":\"Algeria\",\"ip_address\":\"131.34.109.79\",\"email\":\"cortiz@avamba.net\"},\n{\"id\":1166,\"first_name\":\"Teresa\",\"last_name\":\"Moore\",\"country\":\"Mongolia\",\"ip_address\":\"209.68.157.70\",\"email\":\"tmoore@gabspot.org\"},\n{\"id\":1167,\"first_name\":\"Jonathan\",\"last_name\":\"Hunter\",\"country\":\"Montserrat\",\"ip_address\":\"119.152.231.34\",\"email\":\"jhunter@mita.mil\"},\n{\"id\":1168,\"first_name\":\"Louis\",\"last_name\":\"Marshall\",\"country\":\"Slovenia\",\"ip_address\":\"178.1.105.91\",\"email\":\"lmarshall@midel.name\"},\n{\"id\":1169,\"first_name\":\"Robert\",\"last_name\":\"Simpson\",\"country\":\"Burkina Faso\",\"ip_address\":\"46.227.4.196\",\"email\":\"rsimpson@kimia.mil\"},\n{\"id\":1170,\"first_name\":\"Albert\",\"last_name\":\"Washington\",\"country\":\"Montenegro\",\"ip_address\":\"34.245.119.173\",\"email\":\"awashington@vinte.com\"},\n{\"id\":1171,\"first_name\":\"Amanda\",\"last_name\":\"Rodriguez\",\"country\":\"Slovakia\",\"ip_address\":\"82.142.97.47\",\"email\":\"arodriguez@voomm.info\"},\n{\"id\":1172,\"first_name\":\"Louis\",\"last_name\":\"Torres\",\"country\":\"Saint Lucia\",\"ip_address\":\"239.73.127.12\",\"email\":\"ltorres@agivu.edu\"},\n{\"id\":1173,\"first_name\":\"Nicholas\",\"last_name\":\"Gilbert\",\"country\":\"Russia\",\"ip_address\":\"35.26.48.169\",\"email\":\"ngilbert@jetwire.name\"},\n{\"id\":1174,\"first_name\":\"Chris\",\"last_name\":\"Andrews\",\"country\":\"Seychelles\",\"ip_address\":\"192.209.168.156\",\"email\":\"candrews@kayveo.info\"},\n{\"id\":1175,\"first_name\":\"Wayne\",\"last_name\":\"Walker\",\"country\":\"China\",\"ip_address\":\"244.175.121.45\",\"email\":\"wwalker@yambee.com\"},\n{\"id\":1176,\"first_name\":\"Daniel\",\"last_name\":\"Ford\",\"country\":\"Dominica\",\"ip_address\":\"35.51.30.70\",\"email\":\"dford@dazzlesphere.edu\"},\n{\"id\":1177,\"first_name\":\"Lillian\",\"last_name\":\"Jordan\",\"country\":\"Gambia\",\"ip_address\":\"18.203.165.79\",\"email\":\"ljordan@aibox.mil\"},\n{\"id\":1178,\"first_name\":\"Douglas\",\"last_name\":\"Dean\",\"country\":\"Italy\",\"ip_address\":\"219.112.200.254\",\"email\":\"ddean@geba.gov\"},\n{\"id\":1179,\"first_name\":\"Douglas\",\"last_name\":\"Jordan\",\"country\":\"China\",\"ip_address\":\"31.43.37.55\",\"email\":\"djordan@meeveo.net\"},\n{\"id\":1180,\"first_name\":\"Mary\",\"last_name\":\"Little\",\"country\":\"Sri Lanka\",\"ip_address\":\"203.70.130.120\",\"email\":\"mlittle@yakijo.info\"},\n{\"id\":1181,\"first_name\":\"Ruby\",\"last_name\":\"Ellis\",\"country\":\"Paraguay\",\"ip_address\":\"66.123.177.69\",\"email\":\"rellis@tagfeed.com\"},\n{\"id\":1182,\"first_name\":\"Randy\",\"last_name\":\"Mcdonald\",\"country\":\"Malta\",\"ip_address\":\"58.10.250.16\",\"email\":\"rmcdonald@babblestorm.edu\"},\n{\"id\":1183,\"first_name\":\"Lisa\",\"last_name\":\"White\",\"country\":\"Maldives\",\"ip_address\":\"58.138.239.157\",\"email\":\"lwhite@skynoodle.org\"},\n{\"id\":1184,\"first_name\":\"Dorothy\",\"last_name\":\"Wright\",\"country\":\"Kenya\",\"ip_address\":\"149.29.122.230\",\"email\":\"dwright@twimbo.com\"},\n{\"id\":1185,\"first_name\":\"Laura\",\"last_name\":\"Henry\",\"country\":\"Togo\",\"ip_address\":\"28.206.137.69\",\"email\":\"lhenry@brainfire.info\"},\n{\"id\":1186,\"first_name\":\"Linda\",\"last_name\":\"Bishop\",\"country\":\"Nauru\",\"ip_address\":\"192.177.4.157\",\"email\":\"lbishop@mudo.edu\"},\n{\"id\":1187,\"first_name\":\"Jane\",\"last_name\":\"Butler\",\"country\":\"Burundi\",\"ip_address\":\"33.121.111.73\",\"email\":\"jbutler@geba.biz\"},\n{\"id\":1188,\"first_name\":\"Willie\",\"last_name\":\"Arnold\",\"country\":\"Saint Helena\",\"ip_address\":\"186.202.169.108\",\"email\":\"warnold@gabvine.org\"},\n{\"id\":1189,\"first_name\":\"Jack\",\"last_name\":\"Hill\",\"country\":\"Guernsey\",\"ip_address\":\"222.83.179.40\",\"email\":\"jhill@wikizz.edu\"},\n{\"id\":1190,\"first_name\":\"Cheryl\",\"last_name\":\"Powell\",\"country\":\"French Polynesia\",\"ip_address\":\"243.9.29.69\",\"email\":\"cpowell@kwideo.net\"},\n{\"id\":1191,\"first_name\":\"Barbara\",\"last_name\":\"Morris\",\"country\":\"Reunion\",\"ip_address\":\"111.181.122.120\",\"email\":\"bmorris@cogibox.name\"},\n{\"id\":1192,\"first_name\":\"Nancy\",\"last_name\":\"Palmer\",\"country\":\"Indonesia\",\"ip_address\":\"115.143.12.201\",\"email\":\"npalmer@feedfish.mil\"},\n{\"id\":1193,\"first_name\":\"Sandra\",\"last_name\":\"Bennett\",\"country\":\"Albania\",\"ip_address\":\"237.105.84.207\",\"email\":\"sbennett@kare.gov\"},\n{\"id\":1194,\"first_name\":\"Judy\",\"last_name\":\"Wood\",\"country\":\"Guatemala\",\"ip_address\":\"218.110.211.251\",\"email\":\"jwood@flashpoint.com\"},\n{\"id\":1195,\"first_name\":\"Marie\",\"last_name\":\"Griffin\",\"country\":\"San Marino\",\"ip_address\":\"55.16.14.78\",\"email\":\"mgriffin@dabz.net\"},\n{\"id\":1196,\"first_name\":\"Aaron\",\"last_name\":\"Mills\",\"country\":\"Dominica\",\"ip_address\":\"118.178.81.89\",\"email\":\"amills@vinder.name\"},\n{\"id\":1197,\"first_name\":\"Margaret\",\"last_name\":\"Carroll\",\"country\":\"Bouvet Island\",\"ip_address\":\"144.182.201.90\",\"email\":\"mcarroll@vinder.edu\"},\n{\"id\":1198,\"first_name\":\"Margaret\",\"last_name\":\"Simpson\",\"country\":\"Saint Helena\",\"ip_address\":\"46.142.124.221\",\"email\":\"msimpson@zoonder.name\"},\n{\"id\":1199,\"first_name\":\"Peter\",\"last_name\":\"Powell\",\"country\":\"Latvia\",\"ip_address\":\"17.168.4.170\",\"email\":\"ppowell@thoughtsphere.name\"},\n{\"id\":1200,\"first_name\":\"Paula\",\"last_name\":\"Cooper\",\"country\":\"Guinea-Bissau\",\"ip_address\":\"9.58.39.187\",\"email\":\"pcooper@zazio.info\"},\n{\"id\":1201,\"first_name\":\"Martin\",\"last_name\":\"Mitchell\",\"country\":\"Yugoslavia\",\"ip_address\":\"153.30.112.216\",\"email\":\"mmitchell@kare.biz\"},\n{\"id\":1202,\"first_name\":\"Sandra\",\"last_name\":\"Collins\",\"country\":\"French Guiana\",\"ip_address\":\"59.137.66.118\",\"email\":\"scollins@voolith.org\"},\n{\"id\":1203,\"first_name\":\"Jane\",\"last_name\":\"Davis\",\"country\":\"Comoros\",\"ip_address\":\"114.180.100.45\",\"email\":\"jdavis@quimba.edu\"},\n{\"id\":1204,\"first_name\":\"Stephen\",\"last_name\":\"Ellis\",\"country\":\"Liechtenstein\",\"ip_address\":\"171.141.65.60\",\"email\":\"sellis@zooxo.biz\"},\n{\"id\":1205,\"first_name\":\"Chris\",\"last_name\":\"Tucker\",\"country\":\"Papua New Guinea\",\"ip_address\":\"60.249.108.154\",\"email\":\"ctucker@demimbu.net\"},\n{\"id\":1206,\"first_name\":\"Annie\",\"last_name\":\"Perry\",\"country\":\"Cocos (Keeling) Island\",\"ip_address\":\"239.229.246.148\",\"email\":\"aperry@mita.gov\"},\n{\"id\":1207,\"first_name\":\"Martin\",\"last_name\":\"Ray\",\"country\":\"Luxembourg\",\"ip_address\":\"98.139.144.84\",\"email\":\"mray@brainbox.name\"},\n{\"id\":1208,\"first_name\":\"Christina\",\"last_name\":\"Marshall\",\"country\":\"Vanuatu\",\"ip_address\":\"165.72.118.39\",\"email\":\"cmarshall@agimba.biz\"},\n{\"id\":1209,\"first_name\":\"Katherine\",\"last_name\":\"Greene\",\"country\":\"Tokelau\",\"ip_address\":\"241.239.106.176\",\"email\":\"kgreene@oyondu.gov\"},\n{\"id\":1210,\"first_name\":\"Karen\",\"last_name\":\"Powell\",\"country\":\"Finland\",\"ip_address\":\"84.79.26.175\",\"email\":\"kpowell@devbug.net\"},\n{\"id\":1211,\"first_name\":\"Wayne\",\"last_name\":\"Watson\",\"country\":\"Namibia\",\"ip_address\":\"45.223.107.59\",\"email\":\"wwatson@flipstorm.org\"},\n{\"id\":1212,\"first_name\":\"Jeremy\",\"last_name\":\"Murphy\",\"country\":\"Norway\",\"ip_address\":\"122.207.47.142\",\"email\":\"jmurphy@twitterbeat.mil\"},\n{\"id\":1213,\"first_name\":\"Cynthia\",\"last_name\":\"Reid\",\"country\":\"Sudan\",\"ip_address\":\"4.21.226.170\",\"email\":\"creid@babbleblab.mil\"},\n{\"id\":1214,\"first_name\":\"Phyllis\",\"last_name\":\"Brooks\",\"country\":\"Marshall Islands\",\"ip_address\":\"24.151.208.42\",\"email\":\"pbrooks@browsetype.biz\"},\n{\"id\":1215,\"first_name\":\"Kathryn\",\"last_name\":\"Hart\",\"country\":\"United Arab Emirates\",\"ip_address\":\"131.244.1.13\",\"email\":\"khart@bubbletube.mil\"},\n{\"id\":1216,\"first_name\":\"Beverly\",\"last_name\":\"Gibson\",\"country\":\"Uruguay\",\"ip_address\":\"216.108.140.139\",\"email\":\"bgibson@yamia.edu\"},\n{\"id\":1217,\"first_name\":\"Jacqueline\",\"last_name\":\"Richardson\",\"country\":\"Argentina\",\"ip_address\":\"21.27.89.97\",\"email\":\"jrichardson@livetube.mil\"},\n{\"id\":1218,\"first_name\":\"Joan\",\"last_name\":\"Ramos\",\"country\":\"Bolivia\",\"ip_address\":\"230.238.234.115\",\"email\":\"jramos@tagpad.name\"},\n{\"id\":1219,\"first_name\":\"Tammy\",\"last_name\":\"Medina\",\"country\":\"Slovakia\",\"ip_address\":\"24.12.19.146\",\"email\":\"tmedina@omba.name\"},\n{\"id\":1220,\"first_name\":\"Matthew\",\"last_name\":\"Burton\",\"country\":\"Botswana\",\"ip_address\":\"127.107.121.235\",\"email\":\"mburton@innojam.info\"},\n{\"id\":1221,\"first_name\":\"Cheryl\",\"last_name\":\"Nguyen\",\"country\":\"Korea, North\",\"ip_address\":\"140.107.25.215\",\"email\":\"cnguyen@innotype.org\"},\n{\"id\":1222,\"first_name\":\"Matthew\",\"last_name\":\"Richards\",\"country\":\"Azerbaijan\",\"ip_address\":\"108.72.130.16\",\"email\":\"mrichards@skinder.net\"},\n{\"id\":1223,\"first_name\":\"Jacqueline\",\"last_name\":\"Henderson\",\"country\":\"Burkina Faso\",\"ip_address\":\"251.205.72.109\",\"email\":\"jhenderson@wordpedia.name\"},\n{\"id\":1224,\"first_name\":\"Sean\",\"last_name\":\"Perez\",\"country\":\"Guyana\",\"ip_address\":\"2.89.224.87\",\"email\":\"sperez@dazzlesphere.info\"},\n{\"id\":1225,\"first_name\":\"Joyce\",\"last_name\":\"Butler\",\"country\":\"France\",\"ip_address\":\"33.66.247.153\",\"email\":\"jbutler@blogpad.gov\"},\n{\"id\":1226,\"first_name\":\"Melissa\",\"last_name\":\"Taylor\",\"country\":\"New Zealand\",\"ip_address\":\"43.151.8.121\",\"email\":\"mtaylor@dabtype.name\"},\n{\"id\":1227,\"first_name\":\"Jacqueline\",\"last_name\":\"Peters\",\"country\":\"Sao Tome and Principe\",\"ip_address\":\"151.23.245.66\",\"email\":\"jpeters@jayo.com\"},\n{\"id\":1228,\"first_name\":\"Marilyn\",\"last_name\":\"Morris\",\"country\":\"Tunisia\",\"ip_address\":\"46.240.49.118\",\"email\":\"mmorris@thoughtsphere.mil\"},\n{\"id\":1229,\"first_name\":\"Deborah\",\"last_name\":\"Henry\",\"country\":\"Ghana\",\"ip_address\":\"28.86.59.23\",\"email\":\"dhenry@camimbo.edu\"},\n{\"id\":1230,\"first_name\":\"Susan\",\"last_name\":\"Long\",\"country\":\"Libya\",\"ip_address\":\"137.202.15.53\",\"email\":\"slong@skilith.info\"},\n{\"id\":1231,\"first_name\":\"Donna\",\"last_name\":\"Jenkins\",\"country\":\"Pakistan\",\"ip_address\":\"0.224.41.176\",\"email\":\"djenkins@browseblab.com\"},\n{\"id\":1232,\"first_name\":\"Louise\",\"last_name\":\"Wilson\",\"country\":\"Comoros\",\"ip_address\":\"254.162.124.192\",\"email\":\"lwilson@omba.info\"},\n{\"id\":1233,\"first_name\":\"Sara\",\"last_name\":\"Mitchell\",\"country\":\"Ethiopia\",\"ip_address\":\"97.201.29.21\",\"email\":\"smitchell@yabox.gov\"},\n{\"id\":1234,\"first_name\":\"Craig\",\"last_name\":\"Carr\",\"country\":\"Armenia\",\"ip_address\":\"199.67.149.84\",\"email\":\"ccarr@voolith.name\"},\n{\"id\":1235,\"first_name\":\"Wayne\",\"last_name\":\"Harrison\",\"country\":\"Wallis and Futuna Islands\",\"ip_address\":\"70.104.195.15\",\"email\":\"wharrison@flashspan.edu\"},\n{\"id\":1236,\"first_name\":\"Willie\",\"last_name\":\"Wright\",\"country\":\"Malaysia\",\"ip_address\":\"2.28.213.56\",\"email\":\"wwright@realfire.edu\"},\n{\"id\":1237,\"first_name\":\"Jack\",\"last_name\":\"Hernandez\",\"country\":\"Bermuda\",\"ip_address\":\"94.79.249.144\",\"email\":\"jhernandez@aibox.info\"},\n{\"id\":1238,\"first_name\":\"Teresa\",\"last_name\":\"Nguyen\",\"country\":\"Argentina\",\"ip_address\":\"207.96.0.246\",\"email\":\"tnguyen@wordify.name\"},\n{\"id\":1239,\"first_name\":\"Louise\",\"last_name\":\"Olson\",\"country\":\"Saint Lucia\",\"ip_address\":\"133.91.208.108\",\"email\":\"lolson@skynoodle.edu\"},\n{\"id\":1240,\"first_name\":\"Jose\",\"last_name\":\"Griffin\",\"country\":\"Turks and Caicos Islands\",\"ip_address\":\"143.121.111.203\",\"email\":\"jgriffin@tambee.org\"},\n{\"id\":1241,\"first_name\":\"Ann\",\"last_name\":\"Montgomery\",\"country\":\"Azerbaijan\",\"ip_address\":\"165.154.69.210\",\"email\":\"amontgomery@gabcube.info\"},\n{\"id\":1242,\"first_name\":\"Pamela\",\"last_name\":\"Clark\",\"country\":\"Saint Martin\",\"ip_address\":\"32.251.141.209\",\"email\":\"pclark@rhycero.name\"},\n{\"id\":1243,\"first_name\":\"Julia\",\"last_name\":\"Rice\",\"country\":\"Turkmenistan\",\"ip_address\":\"159.93.211.199\",\"email\":\"jrice@devshare.mil\"},\n{\"id\":1244,\"first_name\":\"Juan\",\"last_name\":\"Knight\",\"country\":\"French Polynesia\",\"ip_address\":\"38.168.202.79\",\"email\":\"jknight@feedfire.gov\"},\n{\"id\":1245,\"first_name\":\"Evelyn\",\"last_name\":\"Young\",\"country\":\"Tuvalu\",\"ip_address\":\"129.22.214.91\",\"email\":\"eyoung@voomm.gov\"},\n{\"id\":1246,\"first_name\":\"Howard\",\"last_name\":\"Welch\",\"country\":\"US Minor Outlying Islands\",\"ip_address\":\"254.151.128.212\",\"email\":\"hwelch@ntags.info\"},\n{\"id\":1247,\"first_name\":\"Craig\",\"last_name\":\"Arnold\",\"country\":\"Kyrgyzstan\",\"ip_address\":\"250.245.98.89\",\"email\":\"carnold@realfire.biz\"},\n{\"id\":1248,\"first_name\":\"Brian\",\"last_name\":\"Taylor\",\"country\":\"Nepal\",\"ip_address\":\"117.89.127.36\",\"email\":\"btaylor@agivu.net\"},\n{\"id\":1249,\"first_name\":\"Brenda\",\"last_name\":\"Dixon\",\"country\":\"China\",\"ip_address\":\"198.249.150.101\",\"email\":\"bdixon@rhyzio.com\"},\n{\"id\":1250,\"first_name\":\"Betty\",\"last_name\":\"Ramos\",\"country\":\"Burkina Faso\",\"ip_address\":\"139.178.47.165\",\"email\":\"bramos@mycat.org\"},\n{\"id\":1251,\"first_name\":\"Jose\",\"last_name\":\"Phillips\",\"country\":\"Belgium\",\"ip_address\":\"54.241.194.205\",\"email\":\"jphillips@quatz.info\"},\n{\"id\":1252,\"first_name\":\"Joseph\",\"last_name\":\"Williams\",\"country\":\"Turkey\",\"ip_address\":\"142.24.170.219\",\"email\":\"jwilliams@browsebug.edu\"},\n{\"id\":1253,\"first_name\":\"Alice\",\"last_name\":\"Weaver\",\"country\":\"Papua New Guinea\",\"ip_address\":\"149.247.192.226\",\"email\":\"aweaver@browsebug.org\"},\n{\"id\":1254,\"first_name\":\"Earl\",\"last_name\":\"Robinson\",\"country\":\"Guadeloupe\",\"ip_address\":\"80.133.35.32\",\"email\":\"erobinson@mudo.edu\"},\n{\"id\":1255,\"first_name\":\"Amanda\",\"last_name\":\"Fernandez\",\"country\":\"French Southern Territories\",\"ip_address\":\"52.224.151.239\",\"email\":\"afernandez@snaptags.com\"},\n{\"id\":1256,\"first_name\":\"Rebecca\",\"last_name\":\"Taylor\",\"country\":\"Cuba\",\"ip_address\":\"223.144.78.131\",\"email\":\"rtaylor@babbleset.name\"},\n{\"id\":1257,\"first_name\":\"Mary\",\"last_name\":\"Hawkins\",\"country\":\"Jersey\",\"ip_address\":\"82.165.228.116\",\"email\":\"mhawkins@ailane.gov\"},\n{\"id\":1258,\"first_name\":\"Nancy\",\"last_name\":\"Willis\",\"country\":\"Algeria\",\"ip_address\":\"159.195.155.254\",\"email\":\"nwillis@dazzlesphere.info\"},\n{\"id\":1259,\"first_name\":\"Marilyn\",\"last_name\":\"Perry\",\"country\":\"Vatican City State (Holy See)\",\"ip_address\":\"69.237.231.225\",\"email\":\"mperry@riffwire.edu\"},\n{\"id\":1260,\"first_name\":\"Kathryn\",\"last_name\":\"Dixon\",\"country\":\"Denmark\",\"ip_address\":\"15.251.200.243\",\"email\":\"kdixon@devpulse.net\"},\n{\"id\":1261,\"first_name\":\"Norma\",\"last_name\":\"Russell\",\"country\":\"Afghanistan\",\"ip_address\":\"14.82.6.41\",\"email\":\"nrussell@zoomlounge.gov\"},\n{\"id\":1262,\"first_name\":\"Johnny\",\"last_name\":\"Butler\",\"country\":\"Saint Helena\",\"ip_address\":\"151.166.133.166\",\"email\":\"jbutler@feedbug.net\"},\n{\"id\":1263,\"first_name\":\"Gary\",\"last_name\":\"Boyd\",\"country\":\"Hungary\",\"ip_address\":\"225.216.73.130\",\"email\":\"gboyd@dabjam.com\"},\n{\"id\":1264,\"first_name\":\"Rebecca\",\"last_name\":\"Gilbert\",\"country\":\"Romania\",\"ip_address\":\"223.253.245.120\",\"email\":\"rgilbert@riffpedia.name\"},\n{\"id\":1265,\"first_name\":\"Ryan\",\"last_name\":\"Richards\",\"country\":\"Azerbaijan\",\"ip_address\":\"80.255.53.230\",\"email\":\"rrichards@blogspan.biz\"},\n{\"id\":1266,\"first_name\":\"Lori\",\"last_name\":\"Andrews\",\"country\":\"Turks and Caicos Islands\",\"ip_address\":\"187.208.234.189\",\"email\":\"landrews@vinte.mil\"},\n{\"id\":1267,\"first_name\":\"Mildred\",\"last_name\":\"James\",\"country\":\"Burundi\",\"ip_address\":\"247.56.217.201\",\"email\":\"mjames@rhyloo.info\"},\n{\"id\":1268,\"first_name\":\"Billy\",\"last_name\":\"Black\",\"country\":\"Ethiopia\",\"ip_address\":\"170.13.17.108\",\"email\":\"bblack@edgeclub.net\"},\n{\"id\":1269,\"first_name\":\"Diane\",\"last_name\":\"Bryant\",\"country\":\"Andorra\",\"ip_address\":\"183.234.125.76\",\"email\":\"dbryant@babblestorm.edu\"},\n{\"id\":1270,\"first_name\":\"Katherine\",\"last_name\":\"Castillo\",\"country\":\"Benin\",\"ip_address\":\"131.156.118.24\",\"email\":\"kcastillo@vitz.com\"},\n{\"id\":1271,\"first_name\":\"Douglas\",\"last_name\":\"Arnold\",\"country\":\"Pitcairn Island\",\"ip_address\":\"144.62.20.220\",\"email\":\"darnold@eimbee.gov\"},\n{\"id\":1272,\"first_name\":\"Andrea\",\"last_name\":\"Knight\",\"country\":\"Serbia\",\"ip_address\":\"98.20.63.93\",\"email\":\"aknight@gigaclub.com\"},\n{\"id\":1273,\"first_name\":\"Steve\",\"last_name\":\"Nguyen\",\"country\":\"Saint Lucia\",\"ip_address\":\"164.82.137.112\",\"email\":\"snguyen@latz.com\"},\n{\"id\":1274,\"first_name\":\"Harry\",\"last_name\":\"Powell\",\"country\":\"Gabon\",\"ip_address\":\"255.104.190.234\",\"email\":\"hpowell@zoomcast.edu\"},\n{\"id\":1275,\"first_name\":\"Lois\",\"last_name\":\"Dean\",\"country\":\"Gambia\",\"ip_address\":\"217.86.238.96\",\"email\":\"ldean@shuffledrive.name\"},\n{\"id\":1276,\"first_name\":\"Arthur\",\"last_name\":\"Sanders\",\"country\":\"Hong Kong\",\"ip_address\":\"10.30.138.115\",\"email\":\"asanders@photofeed.org\"},\n{\"id\":1277,\"first_name\":\"Thomas\",\"last_name\":\"Palmer\",\"country\":\"Yemen\",\"ip_address\":\"139.4.204.70\",\"email\":\"tpalmer@yakitri.edu\"},\n{\"id\":1278,\"first_name\":\"Philip\",\"last_name\":\"Kelley\",\"country\":\"Faroe Islands\",\"ip_address\":\"229.147.244.206\",\"email\":\"pkelley@quimba.org\"},\n{\"id\":1279,\"first_name\":\"Margaret\",\"last_name\":\"Dunn\",\"country\":\"Armenia\",\"ip_address\":\"0.114.113.168\",\"email\":\"mdunn@jabberstorm.org\"},\n{\"id\":1280,\"first_name\":\"Julia\",\"last_name\":\"Bradley\",\"country\":\"Netherlands Antilles\",\"ip_address\":\"235.35.105.239\",\"email\":\"jbradley@blognation.edu\"},\n{\"id\":1281,\"first_name\":\"Steven\",\"last_name\":\"Knight\",\"country\":\"Czech Republic\",\"ip_address\":\"7.100.143.218\",\"email\":\"sknight@wikido.net\"},\n{\"id\":1282,\"first_name\":\"Albert\",\"last_name\":\"Reid\",\"country\":\"USSR\",\"ip_address\":\"38.227.242.122\",\"email\":\"areid@zoomzone.gov\"},\n{\"id\":1283,\"first_name\":\"Walter\",\"last_name\":\"Pierce\",\"country\":\"Rwanda\",\"ip_address\":\"199.254.108.15\",\"email\":\"wpierce@browsedrive.biz\"},\n{\"id\":1284,\"first_name\":\"Frank\",\"last_name\":\"Riley\",\"country\":\"Syria\",\"ip_address\":\"174.46.152.205\",\"email\":\"friley@divape.com\"},\n{\"id\":1285,\"first_name\":\"Jennifer\",\"last_name\":\"Reynolds\",\"country\":\"Togo\",\"ip_address\":\"42.206.155.245\",\"email\":\"jreynolds@skilith.edu\"},\n{\"id\":1286,\"first_name\":\"Nicholas\",\"last_name\":\"Montgomery\",\"country\":\"Iraq\",\"ip_address\":\"206.58.142.141\",\"email\":\"nmontgomery@shuffledrive.edu\"},\n{\"id\":1287,\"first_name\":\"Adam\",\"last_name\":\"Burke\",\"country\":\"Norway\",\"ip_address\":\"79.184.72.38\",\"email\":\"aburke@devpoint.mil\"},\n{\"id\":1288,\"first_name\":\"Debra\",\"last_name\":\"Morris\",\"country\":\"Germany\",\"ip_address\":\"236.4.199.133\",\"email\":\"dmorris@feedfish.mil\"},\n{\"id\":1289,\"first_name\":\"Jessica\",\"last_name\":\"Carroll\",\"country\":\"Bahamas\",\"ip_address\":\"241.20.166.172\",\"email\":\"jcarroll@trudeo.org\"},\n{\"id\":1290,\"first_name\":\"Matthew\",\"last_name\":\"Day\",\"country\":\"Central African Republic\",\"ip_address\":\"143.241.173.53\",\"email\":\"mday@tagtune.biz\"},\n{\"id\":1291,\"first_name\":\"Gloria\",\"last_name\":\"Mitchell\",\"country\":\"Cape Verde\",\"ip_address\":\"169.186.87.85\",\"email\":\"gmitchell@skipstorm.gov\"},\n{\"id\":1292,\"first_name\":\"Anna\",\"last_name\":\"Carpenter\",\"country\":\"Vatican City State (Holy See)\",\"ip_address\":\"0.194.221.17\",\"email\":\"acarpenter@mudo.info\"},\n{\"id\":1293,\"first_name\":\"Juan\",\"last_name\":\"Hanson\",\"country\":\"Italy\",\"ip_address\":\"236.10.104.155\",\"email\":\"jhanson@oyoba.org\"},\n{\"id\":1294,\"first_name\":\"Phillip\",\"last_name\":\"Gordon\",\"country\":\"Turkmenistan\",\"ip_address\":\"243.181.194.199\",\"email\":\"pgordon@demivee.name\"},\n{\"id\":1295,\"first_name\":\"Richard\",\"last_name\":\"Mills\",\"country\":\"Netherlands\",\"ip_address\":\"245.113.239.217\",\"email\":\"rmills@bluezoom.edu\"},\n{\"id\":1296,\"first_name\":\"Carolyn\",\"last_name\":\"Long\",\"country\":\"Uruguay\",\"ip_address\":\"96.10.231.64\",\"email\":\"clong@midel.gov\"},\n{\"id\":1297,\"first_name\":\"Jean\",\"last_name\":\"Kelly\",\"country\":\"Yugoslavia\",\"ip_address\":\"69.201.251.123\",\"email\":\"jkelly@skiptube.com\"},\n{\"id\":1298,\"first_name\":\"Joshua\",\"last_name\":\"Gutierrez\",\"country\":\"Slovakia\",\"ip_address\":\"180.27.143.47\",\"email\":\"jgutierrez@lajo.org\"},\n{\"id\":1299,\"first_name\":\"Melissa\",\"last_name\":\"Bishop\",\"country\":\"Malaysia\",\"ip_address\":\"120.106.191.130\",\"email\":\"mbishop@quinu.gov\"},\n{\"id\":1300,\"first_name\":\"Dennis\",\"last_name\":\"Alvarez\",\"country\":\"Yemen\",\"ip_address\":\"156.24.206.173\",\"email\":\"dalvarez@yamia.com\"},\n{\"id\":1301,\"first_name\":\"Amanda\",\"last_name\":\"Crawford\",\"country\":\"Tuvalu\",\"ip_address\":\"86.216.106.139\",\"email\":\"acrawford@oyoba.net\"},\n{\"id\":1302,\"first_name\":\"Denise\",\"last_name\":\"Carr\",\"country\":\"Malaysia\",\"ip_address\":\"28.80.59.148\",\"email\":\"dcarr@jetwire.biz\"},\n{\"id\":1303,\"first_name\":\"Tammy\",\"last_name\":\"Martinez\",\"country\":\"Venezuela\",\"ip_address\":\"3.244.120.217\",\"email\":\"tmartinez@topicstorm.mil\"},\n{\"id\":1304,\"first_name\":\"Anne\",\"last_name\":\"Cox\",\"country\":\"Nauru\",\"ip_address\":\"118.248.238.38\",\"email\":\"acox@rhyloo.name\"},\n{\"id\":1305,\"first_name\":\"Paula\",\"last_name\":\"Moore\",\"country\":\"Liechtenstein\",\"ip_address\":\"0.12.5.173\",\"email\":\"pmoore@leenti.info\"},\n{\"id\":1306,\"first_name\":\"Roger\",\"last_name\":\"Carroll\",\"country\":\"Bosnia and Herzegovina\",\"ip_address\":\"215.90.252.24\",\"email\":\"rcarroll@zoomdog.net\"},\n{\"id\":1307,\"first_name\":\"Matthew\",\"last_name\":\"Robertson\",\"country\":\"Turkmenistan\",\"ip_address\":\"225.194.231.28\",\"email\":\"mrobertson@twitterwire.biz\"},\n{\"id\":1308,\"first_name\":\"Terry\",\"last_name\":\"Perez\",\"country\":\"Pakistan\",\"ip_address\":\"2.167.224.203\",\"email\":\"tperez@latz.gov\"},\n{\"id\":1309,\"first_name\":\"Victor\",\"last_name\":\"Meyer\",\"country\":\"Taiwan\",\"ip_address\":\"240.167.50.154\",\"email\":\"vmeyer@trudeo.org\"},\n{\"id\":1310,\"first_name\":\"Keith\",\"last_name\":\"Lane\",\"country\":\"Palestinian Territory, Occupied\",\"ip_address\":\"32.86.225.226\",\"email\":\"klane@rhybox.net\"},\n{\"id\":1311,\"first_name\":\"Ruby\",\"last_name\":\"Fowler\",\"country\":\"Guinea-Bissau\",\"ip_address\":\"129.131.32.147\",\"email\":\"rfowler@rhynyx.org\"},\n{\"id\":1312,\"first_name\":\"Mildred\",\"last_name\":\"Sullivan\",\"country\":\"Romania\",\"ip_address\":\"92.177.152.149\",\"email\":\"msullivan@katz.org\"},\n{\"id\":1313,\"first_name\":\"Arthur\",\"last_name\":\"Hanson\",\"country\":\"India\",\"ip_address\":\"143.64.41.85\",\"email\":\"ahanson@zoonder.net\"},\n{\"id\":1314,\"first_name\":\"Rachel\",\"last_name\":\"Moreno\",\"country\":\"Zimbabwe\",\"ip_address\":\"213.105.128.170\",\"email\":\"rmoreno@trilith.org\"},\n{\"id\":1315,\"first_name\":\"John\",\"last_name\":\"Hughes\",\"country\":\"Lebanon\",\"ip_address\":\"244.45.65.56\",\"email\":\"jhughes@avaveo.gov\"},\n{\"id\":1316,\"first_name\":\"Carolyn\",\"last_name\":\"Barnes\",\"country\":\"British Virgin Islands\",\"ip_address\":\"26.210.56.125\",\"email\":\"cbarnes@ntags.com\"},\n{\"id\":1317,\"first_name\":\"Charles\",\"last_name\":\"Black\",\"country\":\"San Marino\",\"ip_address\":\"112.177.54.48\",\"email\":\"cblack@jaxworks.com\"},\n{\"id\":1318,\"first_name\":\"Jennifer\",\"last_name\":\"Harrison\",\"country\":\"Saint Barthelemy\",\"ip_address\":\"110.231.102.40\",\"email\":\"jharrison@yoveo.org\"},\n{\"id\":1319,\"first_name\":\"Paula\",\"last_name\":\"Mccoy\",\"country\":\"Armenia\",\"ip_address\":\"140.156.174.225\",\"email\":\"pmccoy@flashpoint.edu\"},\n{\"id\":1320,\"first_name\":\"Larry\",\"last_name\":\"Weaver\",\"country\":\"Malawi\",\"ip_address\":\"128.161.33.86\",\"email\":\"lweaver@kwilith.com\"},\n{\"id\":1321,\"first_name\":\"Dennis\",\"last_name\":\"Spencer\",\"country\":\"French Polynesia\",\"ip_address\":\"122.65.65.41\",\"email\":\"dspencer@oyoloo.org\"},\n{\"id\":1322,\"first_name\":\"Aaron\",\"last_name\":\"Evans\",\"country\":\"Aruba\",\"ip_address\":\"56.92.8.147\",\"email\":\"aevans@centimia.name\"},\n{\"id\":1323,\"first_name\":\"Bruce\",\"last_name\":\"Fowler\",\"country\":\"Laos\",\"ip_address\":\"149.107.112.140\",\"email\":\"bfowler@digitube.net\"},\n{\"id\":1324,\"first_name\":\"Adam\",\"last_name\":\"Freeman\",\"country\":\"Turkmenistan\",\"ip_address\":\"253.220.180.217\",\"email\":\"afreeman@divanoodle.gov\"},\n{\"id\":1325,\"first_name\":\"Marie\",\"last_name\":\"West\",\"country\":\"Netherlands Antilles\",\"ip_address\":\"118.7.88.227\",\"email\":\"mwest@fiveclub.mil\"},\n{\"id\":1326,\"first_name\":\"Russell\",\"last_name\":\"Riley\",\"country\":\"Cape Verde\",\"ip_address\":\"109.45.237.83\",\"email\":\"rriley@twitterlist.net\"},\n{\"id\":1327,\"first_name\":\"Gerald\",\"last_name\":\"Kelley\",\"country\":\"Cyprus\",\"ip_address\":\"176.135.105.223\",\"email\":\"gkelley@voomm.gov\"},\n{\"id\":1328,\"first_name\":\"Jerry\",\"last_name\":\"Price\",\"country\":\"Cape Verde\",\"ip_address\":\"135.220.12.137\",\"email\":\"jprice@trilia.name\"},\n{\"id\":1329,\"first_name\":\"Carlos\",\"last_name\":\"Mendoza\",\"country\":\"Saint Lucia\",\"ip_address\":\"228.55.190.254\",\"email\":\"cmendoza@photofeed.mil\"},\n{\"id\":1330,\"first_name\":\"Martin\",\"last_name\":\"Russell\",\"country\":\"Luxembourg\",\"ip_address\":\"24.144.40.2\",\"email\":\"mrussell@devpoint.name\"},\n{\"id\":1331,\"first_name\":\"Laura\",\"last_name\":\"Hanson\",\"country\":\"Nigeria\",\"ip_address\":\"207.187.85.172\",\"email\":\"lhanson@devbug.gov\"},\n{\"id\":1332,\"first_name\":\"Katherine\",\"last_name\":\"Myers\",\"country\":\"Greenland\",\"ip_address\":\"36.207.58.135\",\"email\":\"kmyers@mynte.name\"},\n{\"id\":1333,\"first_name\":\"Steve\",\"last_name\":\"Cruz\",\"country\":\"Turks and Caicos Islands\",\"ip_address\":\"107.97.160.176\",\"email\":\"scruz@topicblab.edu\"},\n{\"id\":1334,\"first_name\":\"Janet\",\"last_name\":\"Gomez\",\"country\":\"Mozambique\",\"ip_address\":\"156.132.75.65\",\"email\":\"jgomez@jabbersphere.gov\"},\n{\"id\":1335,\"first_name\":\"Justin\",\"last_name\":\"Marshall\",\"country\":\"Moldova\",\"ip_address\":\"26.96.8.183\",\"email\":\"jmarshall@flipopia.org\"},\n{\"id\":1336,\"first_name\":\"Amanda\",\"last_name\":\"Wright\",\"country\":\"Czech Republic\",\"ip_address\":\"107.29.210.20\",\"email\":\"awright@snaptags.net\"},\n{\"id\":1337,\"first_name\":\"Bobby\",\"last_name\":\"Griffin\",\"country\":\"Equatorial Guinea\",\"ip_address\":\"67.142.87.11\",\"email\":\"bgriffin@vidoo.edu\"},\n{\"id\":1338,\"first_name\":\"Ernest\",\"last_name\":\"Stewart\",\"country\":\"Micronesia\",\"ip_address\":\"182.31.32.172\",\"email\":\"estewart@jaxbean.biz\"},\n{\"id\":1339,\"first_name\":\"Stephanie\",\"last_name\":\"Stevens\",\"country\":\"Malawi\",\"ip_address\":\"152.188.2.224\",\"email\":\"sstevens@lazzy.com\"},\n{\"id\":1340,\"first_name\":\"Judith\",\"last_name\":\"Gonzales\",\"country\":\"Kazakhstan\",\"ip_address\":\"163.163.158.171\",\"email\":\"jgonzales@plajo.edu\"},\n{\"id\":1341,\"first_name\":\"Stephanie\",\"last_name\":\"Day\",\"country\":\"Indonesia\",\"ip_address\":\"197.49.108.225\",\"email\":\"sday@mybuzz.com\"},\n{\"id\":1342,\"first_name\":\"Louise\",\"last_name\":\"Clark\",\"country\":\"Papua New Guinea\",\"ip_address\":\"92.218.66.67\",\"email\":\"lclark@voonyx.name\"},\n{\"id\":1343,\"first_name\":\"Kevin\",\"last_name\":\"Jenkins\",\"country\":\"Guatemala\",\"ip_address\":\"244.154.167.35\",\"email\":\"kjenkins@divape.mil\"},\n{\"id\":1344,\"first_name\":\"Thomas\",\"last_name\":\"Carr\",\"country\":\"Israel\",\"ip_address\":\"134.74.32.46\",\"email\":\"tcarr@wikibox.edu\"},\n{\"id\":1345,\"first_name\":\"Thomas\",\"last_name\":\"Harper\",\"country\":\"South Georgia and the South Sandwich Islands\",\"ip_address\":\"25.182.142.37\",\"email\":\"tharper@quinu.mil\"},\n{\"id\":1346,\"first_name\":\"Todd\",\"last_name\":\"Hill\",\"country\":\"Anguilla\",\"ip_address\":\"109.151.169.205\",\"email\":\"thill@zoombox.info\"},\n{\"id\":1347,\"first_name\":\"Cynthia\",\"last_name\":\"Powell\",\"country\":\"Uganda\",\"ip_address\":\"98.79.199.143\",\"email\":\"cpowell@photolist.info\"},\n{\"id\":1348,\"first_name\":\"Harold\",\"last_name\":\"Peterson\",\"country\":\"Heard and McDonald Islands\",\"ip_address\":\"89.1.71.250\",\"email\":\"hpeterson@realcube.mil\"},\n{\"id\":1349,\"first_name\":\"Daniel\",\"last_name\":\"Elliott\",\"country\":\"Congo, Democratic Republic of\",\"ip_address\":\"234.173.195.73\",\"email\":\"delliott@realcube.com\"},\n{\"id\":1350,\"first_name\":\"Janet\",\"last_name\":\"Johnston\",\"country\":\"French Southern Territories\",\"ip_address\":\"181.112.51.127\",\"email\":\"jjohnston@trupe.edu\"},\n{\"id\":1351,\"first_name\":\"William\",\"last_name\":\"Chapman\",\"country\":\"Greenland\",\"ip_address\":\"84.243.41.205\",\"email\":\"wchapman@skinix.mil\"},\n{\"id\":1352,\"first_name\":\"Stephen\",\"last_name\":\"Collins\",\"country\":\"Cayman Islands\",\"ip_address\":\"225.233.2.29\",\"email\":\"scollins@livetube.mil\"},\n{\"id\":1353,\"first_name\":\"Frank\",\"last_name\":\"Carter\",\"country\":\"French Southern Territories\",\"ip_address\":\"243.27.229.44\",\"email\":\"fcarter@lazz.edu\"},\n{\"id\":1354,\"first_name\":\"Susan\",\"last_name\":\"Hunt\",\"country\":\"Israel\",\"ip_address\":\"159.122.233.234\",\"email\":\"shunt@blogxs.com\"},\n{\"id\":1355,\"first_name\":\"Sharon\",\"last_name\":\"Kim\",\"country\":\"Indonesia\",\"ip_address\":\"196.111.235.174\",\"email\":\"skim@photolist.mil\"},\n{\"id\":1356,\"first_name\":\"Aaron\",\"last_name\":\"Baker\",\"country\":\"Trinidad and Tobago\",\"ip_address\":\"139.141.172.204\",\"email\":\"abaker@yotz.info\"},\n{\"id\":1357,\"first_name\":\"Helen\",\"last_name\":\"Gardner\",\"country\":\"Sierra Leone\",\"ip_address\":\"116.175.72.48\",\"email\":\"hgardner@aimbo.mil\"},\n{\"id\":1358,\"first_name\":\"Aaron\",\"last_name\":\"Ray\",\"country\":\"Hungary\",\"ip_address\":\"169.31.100.30\",\"email\":\"aray@demivee.edu\"},\n{\"id\":1359,\"first_name\":\"Dennis\",\"last_name\":\"Wheeler\",\"country\":\"India\",\"ip_address\":\"70.139.153.65\",\"email\":\"dwheeler@pixoboo.org\"},\n{\"id\":1360,\"first_name\":\"Scott\",\"last_name\":\"Lewis\",\"country\":\"Portugal\",\"ip_address\":\"239.7.172.28\",\"email\":\"slewis@dabz.com\"},\n{\"id\":1361,\"first_name\":\"Annie\",\"last_name\":\"Adams\",\"country\":\"Rwanda\",\"ip_address\":\"164.31.61.236\",\"email\":\"aadams@ooba.name\"},\n{\"id\":1362,\"first_name\":\"Jerry\",\"last_name\":\"Torres\",\"country\":\"Azerbaijan\",\"ip_address\":\"81.211.83.243\",\"email\":\"jtorres@edgepulse.info\"},\n{\"id\":1363,\"first_name\":\"Maria\",\"last_name\":\"Cole\",\"country\":\"Saint Vincent and the Grenadines\",\"ip_address\":\"95.98.39.255\",\"email\":\"mcole@vimbo.net\"},\n{\"id\":1364,\"first_name\":\"Lawrence\",\"last_name\":\"Butler\",\"country\":\"Micronesia\",\"ip_address\":\"50.168.250.242\",\"email\":\"lbutler@fanoodle.edu\"},\n{\"id\":1365,\"first_name\":\"Diana\",\"last_name\":\"Evans\",\"country\":\"Dominican Republic\",\"ip_address\":\"59.154.145.56\",\"email\":\"devans@brainverse.gov\"},\n{\"id\":1366,\"first_name\":\"Rose\",\"last_name\":\"Sims\",\"country\":\"Bahrain\",\"ip_address\":\"127.37.60.64\",\"email\":\"rsims@jaxspan.com\"},\n{\"id\":1367,\"first_name\":\"Robert\",\"last_name\":\"Hanson\",\"country\":\"Netherlands Antilles\",\"ip_address\":\"234.37.203.235\",\"email\":\"rhanson@rhyzio.edu\"},\n{\"id\":1368,\"first_name\":\"Todd\",\"last_name\":\"Woods\",\"country\":\"Cote d'Ivoire\",\"ip_address\":\"163.235.217.111\",\"email\":\"twoods@tagpad.com\"},\n{\"id\":1369,\"first_name\":\"Jonathan\",\"last_name\":\"Holmes\",\"country\":\"Isle of Man\",\"ip_address\":\"155.68.36.36\",\"email\":\"jholmes@yata.name\"},\n{\"id\":1370,\"first_name\":\"Alice\",\"last_name\":\"Mills\",\"country\":\"Reunion\",\"ip_address\":\"194.62.135.43\",\"email\":\"amills@thoughtbeat.org\"},\n{\"id\":1371,\"first_name\":\"Ralph\",\"last_name\":\"Sanchez\",\"country\":\"Seychelles\",\"ip_address\":\"26.5.70.86\",\"email\":\"rsanchez@latz.net\"},\n{\"id\":1372,\"first_name\":\"Jesse\",\"last_name\":\"Green\",\"country\":\"Malaysia\",\"ip_address\":\"129.37.141.113\",\"email\":\"jgreen@kazio.org\"},\n{\"id\":1373,\"first_name\":\"Joshua\",\"last_name\":\"Fox\",\"country\":\"Martinique\",\"ip_address\":\"47.66.137.201\",\"email\":\"jfox@trilia.com\"},\n{\"id\":1374,\"first_name\":\"Christina\",\"last_name\":\"Gonzalez\",\"country\":\"Malta\",\"ip_address\":\"208.47.51.32\",\"email\":\"cgonzalez@jabberstorm.net\"},\n{\"id\":1375,\"first_name\":\"Jeffrey\",\"last_name\":\"Fields\",\"country\":\"French Southern Territories\",\"ip_address\":\"213.248.145.56\",\"email\":\"jfields@thoughtstorm.gov\"},\n{\"id\":1376,\"first_name\":\"Lillian\",\"last_name\":\"Taylor\",\"country\":\"Paraguay\",\"ip_address\":\"8.253.69.18\",\"email\":\"ltaylor@dabshots.mil\"},\n{\"id\":1377,\"first_name\":\"Paul\",\"last_name\":\"Gilbert\",\"country\":\"Vanuatu\",\"ip_address\":\"76.180.133.79\",\"email\":\"pgilbert@yotz.name\"},\n{\"id\":1378,\"first_name\":\"Irene\",\"last_name\":\"Murray\",\"country\":\"Moldova\",\"ip_address\":\"154.170.35.90\",\"email\":\"imurray@meejo.net\"},\n{\"id\":1379,\"first_name\":\"Lois\",\"last_name\":\"Brown\",\"country\":\"Cuba\",\"ip_address\":\"47.186.81.226\",\"email\":\"lbrown@kanoodle.org\"},\n{\"id\":1380,\"first_name\":\"Wanda\",\"last_name\":\"Watkins\",\"country\":\"Slovakia\",\"ip_address\":\"64.79.168.166\",\"email\":\"wwatkins@devpulse.name\"},\n{\"id\":1381,\"first_name\":\"Amy\",\"last_name\":\"Wilson\",\"country\":\"Jamaica\",\"ip_address\":\"174.223.237.66\",\"email\":\"awilson@skipstorm.info\"},\n{\"id\":1382,\"first_name\":\"Nicholas\",\"last_name\":\"Fields\",\"country\":\"Antigua and Barbuda\",\"ip_address\":\"185.11.31.139\",\"email\":\"nfields@skaboo.info\"},\n{\"id\":1383,\"first_name\":\"Craig\",\"last_name\":\"Robertson\",\"country\":\"Algeria\",\"ip_address\":\"54.162.119.144\",\"email\":\"crobertson@oyope.net\"},\n{\"id\":1384,\"first_name\":\"Phillip\",\"last_name\":\"Wilson\",\"country\":\"Myanmar\",\"ip_address\":\"33.247.59.172\",\"email\":\"pwilson@thoughtbeat.mil\"},\n{\"id\":1385,\"first_name\":\"Annie\",\"last_name\":\"Campbell\",\"country\":\"Mongolia\",\"ip_address\":\"166.30.192.147\",\"email\":\"acampbell@feedfire.biz\"},\n{\"id\":1386,\"first_name\":\"Chris\",\"last_name\":\"Howard\",\"country\":\"Mali\",\"ip_address\":\"107.140.11.129\",\"email\":\"choward@podcat.name\"},\n{\"id\":1387,\"first_name\":\"Jeremy\",\"last_name\":\"Matthews\",\"country\":\"Sri Lanka\",\"ip_address\":\"128.247.40.203\",\"email\":\"jmatthews@plambee.gov\"},\n{\"id\":1388,\"first_name\":\"Melissa\",\"last_name\":\"Allen\",\"country\":\"Cambodia\",\"ip_address\":\"45.103.88.204\",\"email\":\"mallen@oyope.net\"},\n{\"id\":1389,\"first_name\":\"Diana\",\"last_name\":\"Howell\",\"country\":\"Argentina\",\"ip_address\":\"121.70.238.251\",\"email\":\"dhowell@roodel.net\"},\n{\"id\":1390,\"first_name\":\"Sara\",\"last_name\":\"Thomas\",\"country\":\"Cote d'Ivoire\",\"ip_address\":\"19.189.244.176\",\"email\":\"sthomas@minyx.net\"},\n{\"id\":1391,\"first_name\":\"Maria\",\"last_name\":\"Shaw\",\"country\":\"Barbados\",\"ip_address\":\"74.239.21.149\",\"email\":\"mshaw@voolith.name\"},\n{\"id\":1392,\"first_name\":\"Keith\",\"last_name\":\"Clark\",\"country\":\"Algeria\",\"ip_address\":\"169.234.165.175\",\"email\":\"kclark@kwinu.com\"},\n{\"id\":1393,\"first_name\":\"Jeffrey\",\"last_name\":\"Lawson\",\"country\":\"Oman\",\"ip_address\":\"128.145.175.124\",\"email\":\"jlawson@photofeed.net\"},\n{\"id\":1394,\"first_name\":\"Charles\",\"last_name\":\"Nelson\",\"country\":\"Sierra Leone\",\"ip_address\":\"71.42.21.18\",\"email\":\"cnelson@quamba.info\"},\n{\"id\":1395,\"first_name\":\"Lori\",\"last_name\":\"Moore\",\"country\":\"Ireland\",\"ip_address\":\"117.152.247.172\",\"email\":\"lmoore@chatterpoint.name\"},\n{\"id\":1396,\"first_name\":\"Tammy\",\"last_name\":\"Anderson\",\"country\":\"Belize\",\"ip_address\":\"36.125.239.117\",\"email\":\"tanderson@riffwire.gov\"},\n{\"id\":1397,\"first_name\":\"Russell\",\"last_name\":\"Garcia\",\"country\":\"Andorra\",\"ip_address\":\"36.78.60.149\",\"email\":\"rgarcia@yadel.name\"},\n{\"id\":1398,\"first_name\":\"Margaret\",\"last_name\":\"Russell\",\"country\":\"Antarctica\",\"ip_address\":\"89.192.111.130\",\"email\":\"mrussell@vinder.com\"},\n{\"id\":1399,\"first_name\":\"Donald\",\"last_name\":\"Reynolds\",\"country\":\"Saint Lucia\",\"ip_address\":\"211.118.141.115\",\"email\":\"dreynolds@wordpedia.biz\"},\n{\"id\":1400,\"first_name\":\"Margaret\",\"last_name\":\"Ortiz\",\"country\":\"Argentina\",\"ip_address\":\"55.116.102.123\",\"email\":\"mortiz@topicshots.mil\"},\n{\"id\":1401,\"first_name\":\"Kenneth\",\"last_name\":\"Jordan\",\"country\":\"Saint Vincent and the Grenadines\",\"ip_address\":\"62.247.115.66\",\"email\":\"kjordan@wordtune.info\"},\n{\"id\":1402,\"first_name\":\"Randy\",\"last_name\":\"Rivera\",\"country\":\"Nepal\",\"ip_address\":\"196.87.189.56\",\"email\":\"rrivera@topiclounge.org\"},\n{\"id\":1403,\"first_name\":\"Craig\",\"last_name\":\"Fox\",\"country\":\"Sweden\",\"ip_address\":\"11.170.195.143\",\"email\":\"cfox@avamm.com\"},\n{\"id\":1404,\"first_name\":\"Margaret\",\"last_name\":\"Gonzales\",\"country\":\"Latvia\",\"ip_address\":\"1.125.54.54\",\"email\":\"mgonzales@geba.gov\"},\n{\"id\":1405,\"first_name\":\"Ruth\",\"last_name\":\"Jacobs\",\"country\":\"Mexico\",\"ip_address\":\"62.176.206.137\",\"email\":\"rjacobs@buzzster.edu\"},\n{\"id\":1406,\"first_name\":\"Sandra\",\"last_name\":\"Sanders\",\"country\":\"Djibouti\",\"ip_address\":\"40.29.163.208\",\"email\":\"ssanders@cogibox.gov\"},\n{\"id\":1407,\"first_name\":\"Lisa\",\"last_name\":\"Bailey\",\"country\":\"Faroe Islands\",\"ip_address\":\"150.84.245.0\",\"email\":\"lbailey@jamia.name\"},\n{\"id\":1408,\"first_name\":\"Patrick\",\"last_name\":\"Rose\",\"country\":\"Hungary\",\"ip_address\":\"250.202.153.208\",\"email\":\"prose@brainverse.mil\"},\n{\"id\":1409,\"first_name\":\"Jane\",\"last_name\":\"Vasquez\",\"country\":\"Tonga\",\"ip_address\":\"17.17.210.204\",\"email\":\"jvasquez@janyx.net\"},\n{\"id\":1410,\"first_name\":\"Doris\",\"last_name\":\"Butler\",\"country\":\"Gibraltar\",\"ip_address\":\"117.190.6.47\",\"email\":\"dbutler@wordify.gov\"},\n{\"id\":1411,\"first_name\":\"Virginia\",\"last_name\":\"Carr\",\"country\":\"Bhutan\",\"ip_address\":\"33.187.99.61\",\"email\":\"vcarr@yodel.net\"},\n{\"id\":1412,\"first_name\":\"Diane\",\"last_name\":\"Wagner\",\"country\":\"Jamaica\",\"ip_address\":\"230.126.72.110\",\"email\":\"dwagner@twitternation.net\"},\n{\"id\":1413,\"first_name\":\"Alice\",\"last_name\":\"Fuller\",\"country\":\"Madagascar\",\"ip_address\":\"154.125.247.175\",\"email\":\"afuller@latz.com\"},\n{\"id\":1414,\"first_name\":\"Cynthia\",\"last_name\":\"Flores\",\"country\":\"Serbia\",\"ip_address\":\"97.93.60.3\",\"email\":\"cflores@yodo.biz\"},\n{\"id\":1415,\"first_name\":\"Janice\",\"last_name\":\"Parker\",\"country\":\"Sudan\",\"ip_address\":\"94.184.9.60\",\"email\":\"jparker@brainverse.edu\"},\n{\"id\":1416,\"first_name\":\"Carol\",\"last_name\":\"Murphy\",\"country\":\"Belarus\",\"ip_address\":\"24.171.40.95\",\"email\":\"cmurphy@plambee.edu\"},\n{\"id\":1417,\"first_name\":\"Susan\",\"last_name\":\"Watson\",\"country\":\"Djibouti\",\"ip_address\":\"134.139.131.163\",\"email\":\"swatson@muxo.net\"},\n{\"id\":1418,\"first_name\":\"Sharon\",\"last_name\":\"Richards\",\"country\":\"Papua New Guinea\",\"ip_address\":\"78.83.121.179\",\"email\":\"srichards@livez.org\"},\n{\"id\":1419,\"first_name\":\"Christopher\",\"last_name\":\"Walker\",\"country\":\"Bahrain\",\"ip_address\":\"98.203.15.198\",\"email\":\"cwalker@rhycero.com\"},\n{\"id\":1420,\"first_name\":\"Adam\",\"last_name\":\"Howard\",\"country\":\"Bahrain\",\"ip_address\":\"136.10.147.49\",\"email\":\"ahoward@oozz.com\"},\n{\"id\":1421,\"first_name\":\"Sarah\",\"last_name\":\"Bradley\",\"country\":\"Nicaragua\",\"ip_address\":\"102.200.213.111\",\"email\":\"sbradley@mymm.com\"},\n{\"id\":1422,\"first_name\":\"Douglas\",\"last_name\":\"Franklin\",\"country\":\"Montenegro\",\"ip_address\":\"72.123.255.194\",\"email\":\"dfranklin@mynte.biz\"},\n{\"id\":1423,\"first_name\":\"Donna\",\"last_name\":\"Stanley\",\"country\":\"Albania\",\"ip_address\":\"240.183.63.238\",\"email\":\"dstanley@voolia.mil\"},\n{\"id\":1424,\"first_name\":\"Scott\",\"last_name\":\"Patterson\",\"country\":\"Cameroon\",\"ip_address\":\"15.37.160.211\",\"email\":\"spatterson@mynte.org\"},\n{\"id\":1425,\"first_name\":\"Roger\",\"last_name\":\"Russell\",\"country\":\"French Guiana\",\"ip_address\":\"110.91.127.2\",\"email\":\"rrussell@tagcat.biz\"},\n{\"id\":1426,\"first_name\":\"Sara\",\"last_name\":\"Fox\",\"country\":\"Maldives\",\"ip_address\":\"113.116.212.59\",\"email\":\"sfox@shuffletag.edu\"},\n{\"id\":1427,\"first_name\":\"Aaron\",\"last_name\":\"Perry\",\"country\":\"Montenegro\",\"ip_address\":\"243.214.232.114\",\"email\":\"aperry@avavee.org\"},\n{\"id\":1428,\"first_name\":\"Philip\",\"last_name\":\"Cole\",\"country\":\"Cambodia\",\"ip_address\":\"134.226.248.157\",\"email\":\"pcole@cogilith.info\"},\n{\"id\":1429,\"first_name\":\"Henry\",\"last_name\":\"Nelson\",\"country\":\"Bangladesh\",\"ip_address\":\"58.128.62.131\",\"email\":\"hnelson@ailane.mil\"},\n{\"id\":1430,\"first_name\":\"Judy\",\"last_name\":\"Hawkins\",\"country\":\"Djibouti\",\"ip_address\":\"34.206.251.82\",\"email\":\"jhawkins@layo.net\"},\n{\"id\":1431,\"first_name\":\"Beverly\",\"last_name\":\"Alvarez\",\"country\":\"Angola\",\"ip_address\":\"167.212.226.236\",\"email\":\"balvarez@innoz.com\"},\n{\"id\":1432,\"first_name\":\"Joshua\",\"last_name\":\"Kennedy\",\"country\":\"Brunei Darussalam\",\"ip_address\":\"220.5.122.8\",\"email\":\"jkennedy@skibox.com\"},\n{\"id\":1433,\"first_name\":\"Diana\",\"last_name\":\"Jenkins\",\"country\":\"Bhutan\",\"ip_address\":\"209.88.137.108\",\"email\":\"djenkins@livez.mil\"},\n{\"id\":1434,\"first_name\":\"Sharon\",\"last_name\":\"Alvarez\",\"country\":\"Kazakhstan\",\"ip_address\":\"152.114.242.112\",\"email\":\"salvarez@gigaclub.edu\"},\n{\"id\":1435,\"first_name\":\"Aaron\",\"last_name\":\"Flores\",\"country\":\"Yugoslavia\",\"ip_address\":\"29.128.137.54\",\"email\":\"aflores@linklinks.mil\"},\n{\"id\":1436,\"first_name\":\"Jerry\",\"last_name\":\"Larson\",\"country\":\"Nigeria\",\"ip_address\":\"40.92.95.152\",\"email\":\"jlarson@dabz.net\"},\n{\"id\":1437,\"first_name\":\"Diane\",\"last_name\":\"Parker\",\"country\":\"Gambia\",\"ip_address\":\"190.5.78.91\",\"email\":\"dparker@kwinu.net\"},\n{\"id\":1438,\"first_name\":\"Lillian\",\"last_name\":\"Flores\",\"country\":\"Slovenia\",\"ip_address\":\"37.228.254.252\",\"email\":\"lflores@feedspan.info\"},\n{\"id\":1439,\"first_name\":\"Bobby\",\"last_name\":\"Berry\",\"country\":\"Namibia\",\"ip_address\":\"151.156.108.113\",\"email\":\"bberry@oyoba.biz\"},\n{\"id\":1440,\"first_name\":\"Carlos\",\"last_name\":\"Morgan\",\"country\":\"American Samoa\",\"ip_address\":\"25.102.37.139\",\"email\":\"cmorgan@katz.org\"},\n{\"id\":1441,\"first_name\":\"Annie\",\"last_name\":\"King\",\"country\":\"Turks and Caicos Islands\",\"ip_address\":\"212.105.89.206\",\"email\":\"aking@skibox.com\"},\n{\"id\":1442,\"first_name\":\"Jessica\",\"last_name\":\"Taylor\",\"country\":\"Anguilla\",\"ip_address\":\"241.8.232.63\",\"email\":\"jtaylor@meedoo.biz\"},\n{\"id\":1443,\"first_name\":\"Debra\",\"last_name\":\"Duncan\",\"country\":\"Monaco\",\"ip_address\":\"126.201.60.197\",\"email\":\"dduncan@nlounge.edu\"},\n{\"id\":1444,\"first_name\":\"Shirley\",\"last_name\":\"Burns\",\"country\":\"Sao Tome and Principe\",\"ip_address\":\"115.138.212.187\",\"email\":\"sburns@aivee.info\"},\n{\"id\":1445,\"first_name\":\"Shirley\",\"last_name\":\"Johnson\",\"country\":\"Pakistan\",\"ip_address\":\"180.34.71.101\",\"email\":\"sjohnson@rhyzio.net\"},\n{\"id\":1446,\"first_name\":\"Kevin\",\"last_name\":\"Gray\",\"country\":\"Antarctica\",\"ip_address\":\"14.50.187.129\",\"email\":\"kgray@oloo.biz\"},\n{\"id\":1447,\"first_name\":\"Lois\",\"last_name\":\"Barnes\",\"country\":\"Spain\",\"ip_address\":\"234.29.59.219\",\"email\":\"lbarnes@aivee.net\"},\n{\"id\":1448,\"first_name\":\"Kevin\",\"last_name\":\"Austin\",\"country\":\"Botswana\",\"ip_address\":\"87.111.251.201\",\"email\":\"kaustin@topicshots.net\"},\n{\"id\":1449,\"first_name\":\"Jean\",\"last_name\":\"Robinson\",\"country\":\"Singapore\",\"ip_address\":\"97.89.38.130\",\"email\":\"jrobinson@mymm.edu\"},\n{\"id\":1450,\"first_name\":\"Diane\",\"last_name\":\"Jordan\",\"country\":\"Falkland Islands (Malvinas)\",\"ip_address\":\"250.213.229.84\",\"email\":\"djordan@skinix.org\"},\n{\"id\":1451,\"first_name\":\"Andrea\",\"last_name\":\"Hansen\",\"country\":\"Laos\",\"ip_address\":\"117.45.100.199\",\"email\":\"ahansen@jaxbean.mil\"},\n{\"id\":1452,\"first_name\":\"Ruth\",\"last_name\":\"Pierce\",\"country\":\"Montenegro\",\"ip_address\":\"23.142.16.110\",\"email\":\"rpierce@buzzster.mil\"},\n{\"id\":1453,\"first_name\":\"Carolyn\",\"last_name\":\"Ward\",\"country\":\"Rwanda\",\"ip_address\":\"147.247.62.26\",\"email\":\"cward@gabtype.name\"},\n{\"id\":1454,\"first_name\":\"Walter\",\"last_name\":\"Cunningham\",\"country\":\"Ireland\",\"ip_address\":\"43.62.46.147\",\"email\":\"wcunningham@innojam.com\"},\n{\"id\":1455,\"first_name\":\"Jonathan\",\"last_name\":\"Murphy\",\"country\":\"Saint Kitts and Nevis\",\"ip_address\":\"248.215.223.149\",\"email\":\"jmurphy@bubblemix.mil\"},\n{\"id\":1456,\"first_name\":\"Craig\",\"last_name\":\"Duncan\",\"country\":\"Grenada\",\"ip_address\":\"149.213.145.43\",\"email\":\"cduncan@shuffletag.gov\"},\n{\"id\":1457,\"first_name\":\"Jerry\",\"last_name\":\"Ramirez\",\"country\":\"Bouvet Island\",\"ip_address\":\"86.170.246.156\",\"email\":\"jramirez@blogspan.biz\"},\n{\"id\":1458,\"first_name\":\"Aaron\",\"last_name\":\"Young\",\"country\":\"United States Virgin Islands\",\"ip_address\":\"238.13.190.20\",\"email\":\"ayoung@devpulse.com\"},\n{\"id\":1459,\"first_name\":\"David\",\"last_name\":\"Kelly\",\"country\":\"Solomon Islands\",\"ip_address\":\"171.197.95.114\",\"email\":\"dkelly@dabjam.edu\"},\n{\"id\":1460,\"first_name\":\"Christopher\",\"last_name\":\"Richards\",\"country\":\"Grenada\",\"ip_address\":\"12.88.204.255\",\"email\":\"crichards@gigabox.gov\"},\n{\"id\":1461,\"first_name\":\"Elizabeth\",\"last_name\":\"Daniels\",\"country\":\"Oman\",\"ip_address\":\"242.107.237.9\",\"email\":\"edaniels@quire.net\"},\n{\"id\":1462,\"first_name\":\"Joseph\",\"last_name\":\"Cruz\",\"country\":\"Australia\",\"ip_address\":\"53.232.57.37\",\"email\":\"jcruz@layo.name\"},\n{\"id\":1463,\"first_name\":\"Margaret\",\"last_name\":\"Cole\",\"country\":\"Australia\",\"ip_address\":\"92.175.252.103\",\"email\":\"mcole@jetwire.name\"},\n{\"id\":1464,\"first_name\":\"Deborah\",\"last_name\":\"Chavez\",\"country\":\"Burkina Faso\",\"ip_address\":\"110.9.96.153\",\"email\":\"dchavez@thoughtworks.org\"},\n{\"id\":1465,\"first_name\":\"Sean\",\"last_name\":\"Hall\",\"country\":\"Zimbabwe\",\"ip_address\":\"81.177.174.65\",\"email\":\"shall@skajo.org\"},\n{\"id\":1466,\"first_name\":\"Stephen\",\"last_name\":\"Henry\",\"country\":\"Burundi\",\"ip_address\":\"230.65.44.212\",\"email\":\"shenry@bluejam.com\"},\n{\"id\":1467,\"first_name\":\"Elizabeth\",\"last_name\":\"Lopez\",\"country\":\"Belarus\",\"ip_address\":\"14.35.234.187\",\"email\":\"elopez@voonte.info\"},\n{\"id\":1468,\"first_name\":\"Antonio\",\"last_name\":\"Edwards\",\"country\":\"Hong Kong\",\"ip_address\":\"31.65.176.94\",\"email\":\"aedwards@yabox.edu\"},\n{\"id\":1469,\"first_name\":\"Todd\",\"last_name\":\"Stewart\",\"country\":\"Christmas Island\",\"ip_address\":\"218.34.167.182\",\"email\":\"tstewart@tagchat.mil\"},\n{\"id\":1470,\"first_name\":\"Rebecca\",\"last_name\":\"Russell\",\"country\":\"Jamaica\",\"ip_address\":\"164.61.155.137\",\"email\":\"rrussell@yodo.name\"},\n{\"id\":1471,\"first_name\":\"Melissa\",\"last_name\":\"Owens\",\"country\":\"Greenland\",\"ip_address\":\"198.202.148.103\",\"email\":\"mowens@tanoodle.com\"},\n{\"id\":1472,\"first_name\":\"Kimberly\",\"last_name\":\"Collins\",\"country\":\"Equatorial Guinea\",\"ip_address\":\"212.123.169.64\",\"email\":\"kcollins@flipbug.mil\"},\n{\"id\":1473,\"first_name\":\"Paul\",\"last_name\":\"Little\",\"country\":\"Angola\",\"ip_address\":\"164.131.240.79\",\"email\":\"plittle@yombu.net\"},\n{\"id\":1474,\"first_name\":\"Joseph\",\"last_name\":\"Brooks\",\"country\":\"Burkina Faso\",\"ip_address\":\"42.83.221.59\",\"email\":\"jbrooks@shuffledrive.org\"},\n{\"id\":1475,\"first_name\":\"Richard\",\"last_name\":\"Hughes\",\"country\":\"Niue\",\"ip_address\":\"102.56.231.196\",\"email\":\"rhughes@flashspan.gov\"},\n{\"id\":1476,\"first_name\":\"Douglas\",\"last_name\":\"Riley\",\"country\":\"Korea, North\",\"ip_address\":\"198.227.55.16\",\"email\":\"driley@tagcat.edu\"},\n{\"id\":1477,\"first_name\":\"Wayne\",\"last_name\":\"Griffin\",\"country\":\"Iraq\",\"ip_address\":\"66.43.14.212\",\"email\":\"wgriffin@rhyloo.org\"},\n{\"id\":1478,\"first_name\":\"Teresa\",\"last_name\":\"Hill\",\"country\":\"Nepal\",\"ip_address\":\"17.201.238.168\",\"email\":\"thill@brainlounge.org\"},\n{\"id\":1479,\"first_name\":\"Amy\",\"last_name\":\"Lopez\",\"country\":\"Hong Kong\",\"ip_address\":\"121.27.208.78\",\"email\":\"alopez@edgeclub.org\"},\n{\"id\":1480,\"first_name\":\"Marie\",\"last_name\":\"Mccoy\",\"country\":\"Egypt\",\"ip_address\":\"84.59.156.153\",\"email\":\"mmccoy@flashspan.biz\"},\n{\"id\":1481,\"first_name\":\"Catherine\",\"last_name\":\"Martin\",\"country\":\"Australia\",\"ip_address\":\"178.48.112.139\",\"email\":\"cmartin@lazz.name\"},\n{\"id\":1482,\"first_name\":\"Alan\",\"last_name\":\"Morris\",\"country\":\"Guadeloupe\",\"ip_address\":\"248.64.27.203\",\"email\":\"amorris@thoughtmix.net\"},\n{\"id\":1483,\"first_name\":\"Chris\",\"last_name\":\"Washington\",\"country\":\"Cook Islands\",\"ip_address\":\"38.104.4.44\",\"email\":\"cwashington@dabjam.com\"},\n{\"id\":1484,\"first_name\":\"Andrea\",\"last_name\":\"Holmes\",\"country\":\"Yugoslavia\",\"ip_address\":\"249.32.147.242\",\"email\":\"aholmes@yakidoo.net\"},\n{\"id\":1485,\"first_name\":\"Angela\",\"last_name\":\"Anderson\",\"country\":\"Sierra Leone\",\"ip_address\":\"159.54.181.215\",\"email\":\"aanderson@kamba.biz\"},\n{\"id\":1486,\"first_name\":\"Victor\",\"last_name\":\"Harvey\",\"country\":\"Ghana\",\"ip_address\":\"110.71.245.97\",\"email\":\"vharvey@devshare.mil\"},\n{\"id\":1487,\"first_name\":\"Douglas\",\"last_name\":\"Simmons\",\"country\":\"Macau\",\"ip_address\":\"21.74.69.67\",\"email\":\"dsimmons@jabbersphere.mil\"},\n{\"id\":1488,\"first_name\":\"Shirley\",\"last_name\":\"Torres\",\"country\":\"Northern Mariana Islands\",\"ip_address\":\"242.215.88.146\",\"email\":\"storres@photobean.mil\"},\n{\"id\":1489,\"first_name\":\"Steve\",\"last_name\":\"Ford\",\"country\":\"Gabon\",\"ip_address\":\"98.52.243.173\",\"email\":\"sford@riffpedia.org\"},\n{\"id\":1490,\"first_name\":\"Nicole\",\"last_name\":\"Willis\",\"country\":\"Taiwan\",\"ip_address\":\"186.89.135.118\",\"email\":\"nwillis@teklist.net\"},\n{\"id\":1491,\"first_name\":\"Eugene\",\"last_name\":\"Ray\",\"country\":\"Uzbekistan\",\"ip_address\":\"172.248.92.148\",\"email\":\"eray@avavee.gov\"},\n{\"id\":1492,\"first_name\":\"Karen\",\"last_name\":\"Stone\",\"country\":\"Rwanda\",\"ip_address\":\"202.124.14.183\",\"email\":\"kstone@jumpxs.org\"},\n{\"id\":1493,\"first_name\":\"Nicholas\",\"last_name\":\"Porter\",\"country\":\"Syria\",\"ip_address\":\"84.96.45.73\",\"email\":\"nporter@yadel.edu\"},\n{\"id\":1494,\"first_name\":\"Jane\",\"last_name\":\"Stephens\",\"country\":\"Montenegro\",\"ip_address\":\"81.82.60.192\",\"email\":\"jstephens@yoveo.name\"},\n{\"id\":1495,\"first_name\":\"Michael\",\"last_name\":\"Ray\",\"country\":\"Cameroon\",\"ip_address\":\"154.251.153.211\",\"email\":\"mray@trudeo.edu\"},\n{\"id\":1496,\"first_name\":\"Victor\",\"last_name\":\"Tucker\",\"country\":\"Indonesia\",\"ip_address\":\"38.102.41.248\",\"email\":\"vtucker@ainyx.edu\"},\n{\"id\":1497,\"first_name\":\"Kelly\",\"last_name\":\"Collins\",\"country\":\"Seychelles\",\"ip_address\":\"210.44.252.147\",\"email\":\"kcollins@browsebug.gov\"},\n{\"id\":1498,\"first_name\":\"Joseph\",\"last_name\":\"Murphy\",\"country\":\"Grenada\",\"ip_address\":\"6.49.250.63\",\"email\":\"jmurphy@ntags.org\"},\n{\"id\":1499,\"first_name\":\"Ruth\",\"last_name\":\"Jones\",\"country\":\"South Georgia and the South Sandwich Islands\",\"ip_address\":\"183.80.153.47\",\"email\":\"rjones@roomm.mil\"},\n{\"id\":1500,\"first_name\":\"Joshua\",\"last_name\":\"Martinez\",\"country\":\"Brazil\",\"ip_address\":\"197.254.89.188\",\"email\":\"jmartinez@jazzy.org\"},\n{\"id\":1501,\"first_name\":\"Jeffrey\",\"last_name\":\"Arnold\",\"country\":\"Pitcairn Island\",\"ip_address\":\"84.135.233.50\",\"email\":\"jarnold@skiba.net\"},\n{\"id\":1502,\"first_name\":\"Ralph\",\"last_name\":\"Stevens\",\"country\":\"Madagascar\",\"ip_address\":\"122.50.142.37\",\"email\":\"rstevens@jaxspan.name\"},\n{\"id\":1503,\"first_name\":\"Fred\",\"last_name\":\"Ray\",\"country\":\"Uganda\",\"ip_address\":\"235.187.120.160\",\"email\":\"fray@quaxo.com\"},\n{\"id\":1504,\"first_name\":\"Antonio\",\"last_name\":\"Scott\",\"country\":\"Papua New Guinea\",\"ip_address\":\"70.188.34.188\",\"email\":\"ascott@topiclounge.gov\"},\n{\"id\":1505,\"first_name\":\"Denise\",\"last_name\":\"Carroll\",\"country\":\"Solomon Islands\",\"ip_address\":\"155.189.220.22\",\"email\":\"dcarroll@buzzshare.com\"},\n{\"id\":1506,\"first_name\":\"Jeremy\",\"last_name\":\"Payne\",\"country\":\"Nepal\",\"ip_address\":\"220.194.219.144\",\"email\":\"jpayne@quaxo.info\"},\n{\"id\":1507,\"first_name\":\"Bonnie\",\"last_name\":\"Butler\",\"country\":\"Ascension Island\",\"ip_address\":\"169.157.248.214\",\"email\":\"bbutler@reallinks.net\"},\n{\"id\":1508,\"first_name\":\"Donna\",\"last_name\":\"Jordan\",\"country\":\"Palau\",\"ip_address\":\"145.254.179.177\",\"email\":\"djordan@edgewire.name\"},\n{\"id\":1509,\"first_name\":\"Maria\",\"last_name\":\"Griffin\",\"country\":\"Albania\",\"ip_address\":\"14.119.140.229\",\"email\":\"mgriffin@edgepulse.com\"},\n{\"id\":1510,\"first_name\":\"Raymond\",\"last_name\":\"Webb\",\"country\":\"French Polynesia\",\"ip_address\":\"50.76.11.228\",\"email\":\"rwebb@kwilith.com\"},\n{\"id\":1511,\"first_name\":\"Philip\",\"last_name\":\"Butler\",\"country\":\"Papua New Guinea\",\"ip_address\":\"121.146.70.211\",\"email\":\"pbutler@buzzshare.info\"},\n{\"id\":1512,\"first_name\":\"Richard\",\"last_name\":\"Jacobs\",\"country\":\"Tonga\",\"ip_address\":\"20.81.199.122\",\"email\":\"rjacobs@gabtype.gov\"},\n{\"id\":1513,\"first_name\":\"Joe\",\"last_name\":\"Elliott\",\"country\":\"Norway\",\"ip_address\":\"136.93.49.118\",\"email\":\"jelliott@kayveo.info\"},\n{\"id\":1514,\"first_name\":\"Jane\",\"last_name\":\"Marshall\",\"country\":\"Timor-Leste\",\"ip_address\":\"70.192.65.217\",\"email\":\"jmarshall@shuffledrive.biz\"},\n{\"id\":1515,\"first_name\":\"Jacqueline\",\"last_name\":\"Carter\",\"country\":\"Tunisia\",\"ip_address\":\"35.86.54.95\",\"email\":\"jcarter@avamba.name\"},\n{\"id\":1516,\"first_name\":\"Bonnie\",\"last_name\":\"Perez\",\"country\":\"Samoa\",\"ip_address\":\"255.42.42.47\",\"email\":\"bperez@youspan.edu\"},\n{\"id\":1517,\"first_name\":\"Lisa\",\"last_name\":\"Gutierrez\",\"country\":\"Poland\",\"ip_address\":\"206.132.59.158\",\"email\":\"lgutierrez@bubbletube.name\"},\n{\"id\":1518,\"first_name\":\"Kathy\",\"last_name\":\"Kennedy\",\"country\":\"Vatican City State (Holy See)\",\"ip_address\":\"186.154.2.3\",\"email\":\"kkennedy@wikivu.mil\"},\n{\"id\":1519,\"first_name\":\"Alice\",\"last_name\":\"Hart\",\"country\":\"Djibouti\",\"ip_address\":\"131.198.139.177\",\"email\":\"ahart@aimbu.org\"},\n{\"id\":1520,\"first_name\":\"Kimberly\",\"last_name\":\"Oliver\",\"country\":\"Sierra Leone\",\"ip_address\":\"204.252.240.255\",\"email\":\"koliver@topicshots.info\"},\n{\"id\":1521,\"first_name\":\"Johnny\",\"last_name\":\"Daniels\",\"country\":\"Liechtenstein\",\"ip_address\":\"199.33.99.126\",\"email\":\"jdaniels@realcube.mil\"},\n{\"id\":1522,\"first_name\":\"Diana\",\"last_name\":\"Richards\",\"country\":\"Hungary\",\"ip_address\":\"174.155.40.58\",\"email\":\"drichards@brainsphere.edu\"},\n{\"id\":1523,\"first_name\":\"Jean\",\"last_name\":\"Frazier\",\"country\":\"Solomon Islands\",\"ip_address\":\"245.239.153.58\",\"email\":\"jfrazier@zava.mil\"},\n{\"id\":1524,\"first_name\":\"Marilyn\",\"last_name\":\"Rose\",\"country\":\"Macedonia\",\"ip_address\":\"52.81.241.130\",\"email\":\"mrose@fivebridge.biz\"},\n{\"id\":1525,\"first_name\":\"Roger\",\"last_name\":\"Pierce\",\"country\":\"Chad\",\"ip_address\":\"18.55.7.106\",\"email\":\"rpierce@realcube.info\"},\n{\"id\":1526,\"first_name\":\"Dorothy\",\"last_name\":\"Lewis\",\"country\":\"Qatar\",\"ip_address\":\"190.116.175.44\",\"email\":\"dlewis@yombu.biz\"},\n{\"id\":1527,\"first_name\":\"Edward\",\"last_name\":\"Edwards\",\"country\":\"Iran\",\"ip_address\":\"62.50.115.23\",\"email\":\"eedwards@buzzshare.net\"},\n{\"id\":1528,\"first_name\":\"Ernest\",\"last_name\":\"Perez\",\"country\":\"Bahamas\",\"ip_address\":\"78.163.228.109\",\"email\":\"eperez@rhyloo.org\"},\n{\"id\":1529,\"first_name\":\"Mary\",\"last_name\":\"Andrews\",\"country\":\"\\u00c5land\",\"ip_address\":\"14.216.195.94\",\"email\":\"mandrews@fanoodle.net\"},\n{\"id\":1530,\"first_name\":\"Gloria\",\"last_name\":\"Bailey\",\"country\":\"Seychelles\",\"ip_address\":\"4.167.126.106\",\"email\":\"gbailey@kwideo.edu\"},\n{\"id\":1531,\"first_name\":\"Joyce\",\"last_name\":\"Bell\",\"country\":\"Western Sahara\",\"ip_address\":\"158.88.39.40\",\"email\":\"jbell@meevee.info\"},\n{\"id\":1532,\"first_name\":\"Kathryn\",\"last_name\":\"Clark\",\"country\":\"Spain\",\"ip_address\":\"179.62.195.69\",\"email\":\"kclark@katz.info\"},\n{\"id\":1533,\"first_name\":\"Thomas\",\"last_name\":\"Owens\",\"country\":\"Indonesia\",\"ip_address\":\"115.212.191.220\",\"email\":\"towens@linkbuzz.com\"},\n{\"id\":1534,\"first_name\":\"Gary\",\"last_name\":\"Fuller\",\"country\":\"USSR\",\"ip_address\":\"139.251.31.154\",\"email\":\"gfuller@ozu.edu\"},\n{\"id\":1535,\"first_name\":\"Shirley\",\"last_name\":\"Marshall\",\"country\":\"Bosnia and Herzegovina\",\"ip_address\":\"39.1.189.80\",\"email\":\"smarshall@twinte.gov\"},\n{\"id\":1536,\"first_name\":\"Timothy\",\"last_name\":\"Owens\",\"country\":\"Venezuela\",\"ip_address\":\"235.26.180.209\",\"email\":\"towens@flashpoint.edu\"},\n{\"id\":1537,\"first_name\":\"Jane\",\"last_name\":\"James\",\"country\":\"Togo\",\"ip_address\":\"220.182.29.192\",\"email\":\"jjames@tagpad.mil\"},\n{\"id\":1538,\"first_name\":\"Carol\",\"last_name\":\"Dean\",\"country\":\"Myanmar\",\"ip_address\":\"95.88.13.107\",\"email\":\"cdean@bubbletube.name\"},\n{\"id\":1539,\"first_name\":\"Dennis\",\"last_name\":\"Gonzales\",\"country\":\"Greenland\",\"ip_address\":\"220.4.197.162\",\"email\":\"dgonzales@kare.info\"},\n{\"id\":1540,\"first_name\":\"Nancy\",\"last_name\":\"Gilbert\",\"country\":\"Ecuador\",\"ip_address\":\"247.21.148.44\",\"email\":\"ngilbert@dynabox.mil\"},\n{\"id\":1541,\"first_name\":\"Roy\",\"last_name\":\"Tucker\",\"country\":\"Ethiopia\",\"ip_address\":\"223.174.151.7\",\"email\":\"rtucker@riffpath.com\"},\n{\"id\":1542,\"first_name\":\"Justin\",\"last_name\":\"Peters\",\"country\":\"French Polynesia\",\"ip_address\":\"62.205.131.236\",\"email\":\"jpeters@dynabox.mil\"},\n{\"id\":1543,\"first_name\":\"Frances\",\"last_name\":\"Kelly\",\"country\":\"Reunion\",\"ip_address\":\"159.19.114.99\",\"email\":\"fkelly@wordtune.gov\"},\n{\"id\":1544,\"first_name\":\"Lois\",\"last_name\":\"Welch\",\"country\":\"San Marino\",\"ip_address\":\"146.225.5.228\",\"email\":\"lwelch@wordware.mil\"},\n{\"id\":1545,\"first_name\":\"Beverly\",\"last_name\":\"Hudson\",\"country\":\"Faroe Islands\",\"ip_address\":\"183.243.84.161\",\"email\":\"bhudson@flashpoint.gov\"},\n{\"id\":1546,\"first_name\":\"Marie\",\"last_name\":\"Banks\",\"country\":\"Jordan\",\"ip_address\":\"190.164.117.4\",\"email\":\"mbanks@camimbo.mil\"},\n{\"id\":1547,\"first_name\":\"Janet\",\"last_name\":\"Henderson\",\"country\":\"French Southern Territories\",\"ip_address\":\"69.9.47.0\",\"email\":\"jhenderson@trunyx.biz\"},\n{\"id\":1548,\"first_name\":\"Raymond\",\"last_name\":\"Warren\",\"country\":\"Honduras\",\"ip_address\":\"133.125.6.54\",\"email\":\"rwarren@camimbo.name\"},\n{\"id\":1549,\"first_name\":\"Tammy\",\"last_name\":\"Peterson\",\"country\":\"Poland\",\"ip_address\":\"219.88.242.198\",\"email\":\"tpeterson@realbridge.edu\"},\n{\"id\":1550,\"first_name\":\"Samuel\",\"last_name\":\"Miller\",\"country\":\"Pitcairn Island\",\"ip_address\":\"113.62.52.58\",\"email\":\"smiller@quinu.net\"},\n{\"id\":1551,\"first_name\":\"Andrea\",\"last_name\":\"Gibson\",\"country\":\"Antigua and Barbuda\",\"ip_address\":\"221.134.56.119\",\"email\":\"agibson@rhyloo.name\"},\n{\"id\":1552,\"first_name\":\"Steven\",\"last_name\":\"Turner\",\"country\":\"El Salvador\",\"ip_address\":\"157.226.66.10\",\"email\":\"sturner@dynabox.net\"},\n{\"id\":1553,\"first_name\":\"Martha\",\"last_name\":\"Moore\",\"country\":\"Hungary\",\"ip_address\":\"84.161.185.162\",\"email\":\"mmoore@midel.net\"},\n{\"id\":1554,\"first_name\":\"Andrea\",\"last_name\":\"Ellis\",\"country\":\"Armenia\",\"ip_address\":\"161.50.211.140\",\"email\":\"aellis@yamia.mil\"},\n{\"id\":1555,\"first_name\":\"Willie\",\"last_name\":\"Dunn\",\"country\":\"Djibouti\",\"ip_address\":\"117.184.14.199\",\"email\":\"wdunn@zoomlounge.edu\"},\n{\"id\":1556,\"first_name\":\"Raymond\",\"last_name\":\"Dean\",\"country\":\"Netherlands Antilles\",\"ip_address\":\"66.246.214.26\",\"email\":\"rdean@tanoodle.biz\"},\n{\"id\":1557,\"first_name\":\"Jesse\",\"last_name\":\"Murray\",\"country\":\"Israel\",\"ip_address\":\"119.209.179.193\",\"email\":\"jmurray@skibox.net\"},\n{\"id\":1558,\"first_name\":\"Douglas\",\"last_name\":\"Austin\",\"country\":\"United States Virgin Islands\",\"ip_address\":\"174.13.26.100\",\"email\":\"daustin@eadel.edu\"},\n{\"id\":1559,\"first_name\":\"Cynthia\",\"last_name\":\"Fisher\",\"country\":\"Armenia\",\"ip_address\":\"222.25.86.71\",\"email\":\"cfisher@voolia.com\"},\n{\"id\":1560,\"first_name\":\"Samuel\",\"last_name\":\"Vasquez\",\"country\":\"\\u00c5land\",\"ip_address\":\"97.214.110.107\",\"email\":\"svasquez@rhynyx.gov\"},\n{\"id\":1561,\"first_name\":\"Katherine\",\"last_name\":\"Harrison\",\"country\":\"Guinea-Bissau\",\"ip_address\":\"201.131.138.226\",\"email\":\"kharrison@cogibox.net\"},\n{\"id\":1562,\"first_name\":\"Deborah\",\"last_name\":\"Stewart\",\"country\":\"Germany\",\"ip_address\":\"175.18.230.101\",\"email\":\"dstewart@youspan.net\"},\n{\"id\":1563,\"first_name\":\"Paul\",\"last_name\":\"Green\",\"country\":\"Bhutan\",\"ip_address\":\"24.92.25.62\",\"email\":\"pgreen@wikivu.com\"},\n{\"id\":1564,\"first_name\":\"Donna\",\"last_name\":\"Patterson\",\"country\":\"Tunisia\",\"ip_address\":\"185.64.156.125\",\"email\":\"dpatterson@voonix.org\"},\n{\"id\":1565,\"first_name\":\"Kathleen\",\"last_name\":\"Howard\",\"country\":\"Germany\",\"ip_address\":\"22.39.160.179\",\"email\":\"khoward@jazzy.mil\"},\n{\"id\":1566,\"first_name\":\"Robin\",\"last_name\":\"Barnes\",\"country\":\"Norfolk Island\",\"ip_address\":\"221.176.4.27\",\"email\":\"rbarnes@yabox.mil\"},\n{\"id\":1567,\"first_name\":\"Julie\",\"last_name\":\"Sanchez\",\"country\":\"British Virgin Islands\",\"ip_address\":\"103.40.46.229\",\"email\":\"jsanchez@brainlounge.gov\"},\n{\"id\":1568,\"first_name\":\"Gregory\",\"last_name\":\"Fernandez\",\"country\":\"Ghana\",\"ip_address\":\"29.21.46.69\",\"email\":\"gfernandez@thoughtstorm.org\"},\n{\"id\":1569,\"first_name\":\"Julie\",\"last_name\":\"Howard\",\"country\":\"Austria\",\"ip_address\":\"52.30.139.108\",\"email\":\"jhoward@yoveo.mil\"},\n{\"id\":1570,\"first_name\":\"Joyce\",\"last_name\":\"Johnson\",\"country\":\"Sudan\",\"ip_address\":\"11.160.73.189\",\"email\":\"jjohnson@skinder.org\"},\n{\"id\":1571,\"first_name\":\"Sarah\",\"last_name\":\"Hudson\",\"country\":\"Canada\",\"ip_address\":\"33.10.8.10\",\"email\":\"shudson@twitterworks.mil\"},\n{\"id\":1572,\"first_name\":\"Adam\",\"last_name\":\"Simmons\",\"country\":\"\\u00c5land\",\"ip_address\":\"79.208.244.181\",\"email\":\"asimmons@skyble.org\"},\n{\"id\":1573,\"first_name\":\"Tina\",\"last_name\":\"Simmons\",\"country\":\"Greece\",\"ip_address\":\"39.196.39.148\",\"email\":\"tsimmons@livetube.biz\"},\n{\"id\":1574,\"first_name\":\"David\",\"last_name\":\"Long\",\"country\":\"Bangladesh\",\"ip_address\":\"228.211.53.181\",\"email\":\"dlong@centidel.biz\"},\n{\"id\":1575,\"first_name\":\"Nancy\",\"last_name\":\"Crawford\",\"country\":\"Denmark\",\"ip_address\":\"164.181.56.225\",\"email\":\"ncrawford@jayo.com\"},\n{\"id\":1576,\"first_name\":\"Betty\",\"last_name\":\"Rice\",\"country\":\"Antarctica\",\"ip_address\":\"184.42.38.195\",\"email\":\"brice@thoughtmix.name\"},\n{\"id\":1577,\"first_name\":\"Jerry\",\"last_name\":\"Hughes\",\"country\":\"Saint Martin\",\"ip_address\":\"136.42.11.97\",\"email\":\"jhughes@quire.name\"},\n{\"id\":1578,\"first_name\":\"Melissa\",\"last_name\":\"Johnston\",\"country\":\"Namibia\",\"ip_address\":\"171.155.123.50\",\"email\":\"mjohnston@blogtags.name\"},\n{\"id\":1579,\"first_name\":\"Lisa\",\"last_name\":\"Hunt\",\"country\":\"Chad\",\"ip_address\":\"184.180.223.202\",\"email\":\"lhunt@yata.edu\"},\n{\"id\":1580,\"first_name\":\"Sarah\",\"last_name\":\"Foster\",\"country\":\"Cook Islands\",\"ip_address\":\"198.122.138.23\",\"email\":\"sfoster@eazzy.biz\"},\n{\"id\":1581,\"first_name\":\"Jeffrey\",\"last_name\":\"Willis\",\"country\":\"Poland\",\"ip_address\":\"0.156.22.4\",\"email\":\"jwillis@quamba.mil\"},\n{\"id\":1582,\"first_name\":\"Louis\",\"last_name\":\"Jacobs\",\"country\":\"Saint Barthelemy\",\"ip_address\":\"19.139.163.73\",\"email\":\"ljacobs@brightdog.name\"},\n{\"id\":1583,\"first_name\":\"Roy\",\"last_name\":\"Reynolds\",\"country\":\"Jersey\",\"ip_address\":\"35.100.10.251\",\"email\":\"rreynolds@thoughtsphere.net\"},\n{\"id\":1584,\"first_name\":\"Emily\",\"last_name\":\"Howard\",\"country\":\"Burkina Faso\",\"ip_address\":\"18.205.158.166\",\"email\":\"ehoward@tazz.edu\"},\n{\"id\":1585,\"first_name\":\"Adam\",\"last_name\":\"Holmes\",\"country\":\"Vanuatu\",\"ip_address\":\"171.106.251.213\",\"email\":\"aholmes@rhybox.com\"},\n{\"id\":1586,\"first_name\":\"Philip\",\"last_name\":\"Scott\",\"country\":\"Cambodia\",\"ip_address\":\"95.128.195.111\",\"email\":\"pscott@digitube.biz\"},\n{\"id\":1587,\"first_name\":\"Christina\",\"last_name\":\"Fox\",\"country\":\"Laos\",\"ip_address\":\"60.110.60.27\",\"email\":\"cfox@trilith.org\"},\n{\"id\":1588,\"first_name\":\"Jeremy\",\"last_name\":\"Hudson\",\"country\":\"Denmark\",\"ip_address\":\"97.252.253.108\",\"email\":\"jhudson@skippad.com\"},\n{\"id\":1589,\"first_name\":\"Russell\",\"last_name\":\"Green\",\"country\":\"Liberia\",\"ip_address\":\"199.60.212.25\",\"email\":\"rgreen@pixope.mil\"},\n{\"id\":1590,\"first_name\":\"Tammy\",\"last_name\":\"Stone\",\"country\":\"Turks and Caicos Islands\",\"ip_address\":\"171.78.111.235\",\"email\":\"tstone@divape.mil\"},\n{\"id\":1591,\"first_name\":\"Melissa\",\"last_name\":\"Olson\",\"country\":\"Korea, South\",\"ip_address\":\"83.15.221.162\",\"email\":\"molson@zooveo.org\"},\n{\"id\":1592,\"first_name\":\"Russell\",\"last_name\":\"Hudson\",\"country\":\"Saudia Arabia\",\"ip_address\":\"252.164.146.41\",\"email\":\"rhudson@livefish.name\"},\n{\"id\":1593,\"first_name\":\"Fred\",\"last_name\":\"Bell\",\"country\":\"Mali\",\"ip_address\":\"141.27.47.233\",\"email\":\"fbell@riffpath.gov\"},\n{\"id\":1594,\"first_name\":\"Kimberly\",\"last_name\":\"Robertson\",\"country\":\"Saudia Arabia\",\"ip_address\":\"72.3.248.211\",\"email\":\"krobertson@zoombox.gov\"},\n{\"id\":1595,\"first_name\":\"Ruby\",\"last_name\":\"Ruiz\",\"country\":\"Madagascar\",\"ip_address\":\"113.254.192.236\",\"email\":\"rruiz@oyondu.com\"},\n{\"id\":1596,\"first_name\":\"Randy\",\"last_name\":\"Mills\",\"country\":\"Niger\",\"ip_address\":\"169.224.2.150\",\"email\":\"rmills@linkbridge.com\"},\n{\"id\":1597,\"first_name\":\"Evelyn\",\"last_name\":\"Collins\",\"country\":\"Malta\",\"ip_address\":\"181.16.234.117\",\"email\":\"ecollins@linkbridge.net\"},\n{\"id\":1598,\"first_name\":\"Annie\",\"last_name\":\"Hansen\",\"country\":\"Pakistan\",\"ip_address\":\"121.110.83.166\",\"email\":\"ahansen@twimbo.org\"},\n{\"id\":1599,\"first_name\":\"Doris\",\"last_name\":\"Morrison\",\"country\":\"Colombia\",\"ip_address\":\"1.235.163.176\",\"email\":\"dmorrison@flashspan.gov\"},\n{\"id\":1600,\"first_name\":\"Samuel\",\"last_name\":\"Ramos\",\"country\":\"Mozambique\",\"ip_address\":\"187.82.241.91\",\"email\":\"sramos@flipstorm.net\"},\n{\"id\":1601,\"first_name\":\"Larry\",\"last_name\":\"Mitchell\",\"country\":\"Bolivia\",\"ip_address\":\"115.30.228.173\",\"email\":\"lmitchell@viva.com\"},\n{\"id\":1602,\"first_name\":\"Brandon\",\"last_name\":\"Taylor\",\"country\":\"Mauritius\",\"ip_address\":\"94.202.63.118\",\"email\":\"btaylor@gigashots.mil\"},\n{\"id\":1603,\"first_name\":\"Nicole\",\"last_name\":\"Day\",\"country\":\"United Kingdom\",\"ip_address\":\"232.147.226.78\",\"email\":\"nday@gabcube.edu\"},\n{\"id\":1604,\"first_name\":\"Annie\",\"last_name\":\"Andrews\",\"country\":\"Australia\",\"ip_address\":\"127.215.95.171\",\"email\":\"aandrews@youspan.biz\"},\n{\"id\":1605,\"first_name\":\"Willie\",\"last_name\":\"Martin\",\"country\":\"Ghana\",\"ip_address\":\"80.244.91.237\",\"email\":\"wmartin@quire.mil\"},\n{\"id\":1606,\"first_name\":\"Donna\",\"last_name\":\"Meyer\",\"country\":\"Guernsey\",\"ip_address\":\"135.182.25.202\",\"email\":\"dmeyer@oloo.edu\"},\n{\"id\":1607,\"first_name\":\"Lori\",\"last_name\":\"Matthews\",\"country\":\"Paraguay\",\"ip_address\":\"57.80.160.216\",\"email\":\"lmatthews@kaymbo.name\"},\n{\"id\":1608,\"first_name\":\"Rose\",\"last_name\":\"Fuller\",\"country\":\"Canada\",\"ip_address\":\"83.244.147.45\",\"email\":\"rfuller@fivechat.info\"},\n{\"id\":1609,\"first_name\":\"Victor\",\"last_name\":\"Hunt\",\"country\":\"Palau\",\"ip_address\":\"15.82.87.148\",\"email\":\"vhunt@blogtags.biz\"},\n{\"id\":1610,\"first_name\":\"Judith\",\"last_name\":\"Roberts\",\"country\":\"Grenada\",\"ip_address\":\"131.236.180.42\",\"email\":\"jroberts@edgetag.net\"},\n{\"id\":1611,\"first_name\":\"Julia\",\"last_name\":\"Bell\",\"country\":\"Azerbaijan\",\"ip_address\":\"181.43.37.2\",\"email\":\"jbell@jatri.name\"},\n{\"id\":1612,\"first_name\":\"Joyce\",\"last_name\":\"Porter\",\"country\":\"Bahamas\",\"ip_address\":\"122.52.242.123\",\"email\":\"jporter@photojam.info\"},\n{\"id\":1613,\"first_name\":\"Todd\",\"last_name\":\"Howard\",\"country\":\"Barbados\",\"ip_address\":\"217.131.58.30\",\"email\":\"thoward@flashdog.net\"},\n{\"id\":1614,\"first_name\":\"Brenda\",\"last_name\":\"Green\",\"country\":\"Seychelles\",\"ip_address\":\"5.176.96.75\",\"email\":\"bgreen@photobug.net\"},\n{\"id\":1615,\"first_name\":\"Richard\",\"last_name\":\"Willis\",\"country\":\"Saint Lucia\",\"ip_address\":\"23.49.221.75\",\"email\":\"rwillis@flipbug.net\"},\n{\"id\":1616,\"first_name\":\"Theresa\",\"last_name\":\"Phillips\",\"country\":\"USSR\",\"ip_address\":\"3.5.75.111\",\"email\":\"tphillips@jabbersphere.gov\"},\n{\"id\":1617,\"first_name\":\"Tina\",\"last_name\":\"Frazier\",\"country\":\"Haiti\",\"ip_address\":\"187.76.83.12\",\"email\":\"tfrazier@centimia.org\"},\n{\"id\":1618,\"first_name\":\"Craig\",\"last_name\":\"Coleman\",\"country\":\"Germany\",\"ip_address\":\"73.221.250.59\",\"email\":\"ccoleman@tekfly.info\"},\n{\"id\":1619,\"first_name\":\"Craig\",\"last_name\":\"Moore\",\"country\":\"Tuvalu\",\"ip_address\":\"175.186.29.4\",\"email\":\"cmoore@yamia.mil\"},\n{\"id\":1620,\"first_name\":\"Doris\",\"last_name\":\"Price\",\"country\":\"Saudia Arabia\",\"ip_address\":\"230.156.7.212\",\"email\":\"dprice@cogibox.com\"},\n{\"id\":1621,\"first_name\":\"Nicholas\",\"last_name\":\"Morris\",\"country\":\"Myanmar\",\"ip_address\":\"124.220.183.40\",\"email\":\"nmorris@fadeo.biz\"},\n{\"id\":1622,\"first_name\":\"Joe\",\"last_name\":\"Kelly\",\"country\":\"Philippines\",\"ip_address\":\"2.121.14.202\",\"email\":\"jkelly@realbuzz.biz\"},\n{\"id\":1623,\"first_name\":\"Linda\",\"last_name\":\"Campbell\",\"country\":\"Albania\",\"ip_address\":\"35.58.80.214\",\"email\":\"lcampbell@zoozzy.edu\"},\n{\"id\":1624,\"first_name\":\"Sharon\",\"last_name\":\"Porter\",\"country\":\"Montserrat\",\"ip_address\":\"143.134.175.58\",\"email\":\"sporter@flashspan.mil\"},\n{\"id\":1625,\"first_name\":\"Steven\",\"last_name\":\"Brown\",\"country\":\"Korea, South\",\"ip_address\":\"174.232.60.92\",\"email\":\"sbrown@brainfire.com\"},\n{\"id\":1626,\"first_name\":\"Emily\",\"last_name\":\"Thomas\",\"country\":\"Falkland Islands (Malvinas)\",\"ip_address\":\"99.130.139.203\",\"email\":\"ethomas@jabberbean.com\"},\n{\"id\":1627,\"first_name\":\"Laura\",\"last_name\":\"Harper\",\"country\":\"Thailand\",\"ip_address\":\"24.157.137.144\",\"email\":\"lharper@meeveo.edu\"},\n{\"id\":1628,\"first_name\":\"Paul\",\"last_name\":\"Crawford\",\"country\":\"Yemen\",\"ip_address\":\"151.28.211.179\",\"email\":\"pcrawford@dabtype.info\"},\n{\"id\":1629,\"first_name\":\"Nancy\",\"last_name\":\"Stanley\",\"country\":\"Nauru\",\"ip_address\":\"95.115.185.39\",\"email\":\"nstanley@twinder.com\"},\n{\"id\":1630,\"first_name\":\"Margaret\",\"last_name\":\"Brooks\",\"country\":\"American Samoa\",\"ip_address\":\"42.219.90.235\",\"email\":\"mbrooks@twitterbridge.name\"},\n{\"id\":1631,\"first_name\":\"Betty\",\"last_name\":\"Hicks\",\"country\":\"Norway\",\"ip_address\":\"142.104.231.14\",\"email\":\"bhicks@mudo.edu\"},\n{\"id\":1632,\"first_name\":\"Sean\",\"last_name\":\"Patterson\",\"country\":\"Bouvet Island\",\"ip_address\":\"139.67.145.119\",\"email\":\"spatterson@devshare.com\"},\n{\"id\":1633,\"first_name\":\"Andrew\",\"last_name\":\"Rogers\",\"country\":\"Cayman Islands\",\"ip_address\":\"21.100.158.6\",\"email\":\"arogers@feednation.org\"},\n{\"id\":1634,\"first_name\":\"Brandon\",\"last_name\":\"Scott\",\"country\":\"Argentina\",\"ip_address\":\"47.3.115.177\",\"email\":\"bscott@livetube.info\"},\n{\"id\":1635,\"first_name\":\"Willie\",\"last_name\":\"Gardner\",\"country\":\"Martinique\",\"ip_address\":\"29.230.127.226\",\"email\":\"wgardner@skipfire.net\"},\n{\"id\":1636,\"first_name\":\"Robin\",\"last_name\":\"Ford\",\"country\":\"Cocos (Keeling) Island\",\"ip_address\":\"201.87.150.75\",\"email\":\"rford@browsedrive.com\"},\n{\"id\":1637,\"first_name\":\"Melissa\",\"last_name\":\"Wright\",\"country\":\"Brunei Darussalam\",\"ip_address\":\"226.88.94.140\",\"email\":\"mwright@buzzshare.edu\"},\n{\"id\":1638,\"first_name\":\"Mildred\",\"last_name\":\"Willis\",\"country\":\"Belgium\",\"ip_address\":\"149.85.112.135\",\"email\":\"mwillis@linktype.gov\"},\n{\"id\":1639,\"first_name\":\"Randy\",\"last_name\":\"Alvarez\",\"country\":\"Greece\",\"ip_address\":\"152.39.58.158\",\"email\":\"ralvarez@buzzdog.info\"},\n{\"id\":1640,\"first_name\":\"Anna\",\"last_name\":\"Reyes\",\"country\":\"Guam\",\"ip_address\":\"130.21.179.168\",\"email\":\"areyes@vitz.mil\"},\n{\"id\":1641,\"first_name\":\"Steven\",\"last_name\":\"Turner\",\"country\":\"Cuba\",\"ip_address\":\"218.63.16.146\",\"email\":\"sturner@jetpulse.biz\"},\n{\"id\":1642,\"first_name\":\"Arthur\",\"last_name\":\"Jackson\",\"country\":\"Moldova\",\"ip_address\":\"169.197.221.93\",\"email\":\"ajackson@rhyloo.biz\"},\n{\"id\":1643,\"first_name\":\"Howard\",\"last_name\":\"Kim\",\"country\":\"French Guiana\",\"ip_address\":\"162.155.252.232\",\"email\":\"hkim@brightbean.com\"},\n{\"id\":1644,\"first_name\":\"Jeremy\",\"last_name\":\"Smith\",\"country\":\"Mauritius\",\"ip_address\":\"87.104.27.215\",\"email\":\"jsmith@topicblab.name\"},\n{\"id\":1645,\"first_name\":\"Bruce\",\"last_name\":\"Richards\",\"country\":\"Laos\",\"ip_address\":\"85.238.214.36\",\"email\":\"brichards@bubblemix.com\"},\n{\"id\":1646,\"first_name\":\"James\",\"last_name\":\"Graham\",\"country\":\"Vatican City State (Holy See)\",\"ip_address\":\"10.140.34.13\",\"email\":\"jgraham@edgeclub.mil\"},\n{\"id\":1647,\"first_name\":\"Kathy\",\"last_name\":\"Torres\",\"country\":\"Svalbard and Jan Mayen Islands\",\"ip_address\":\"53.190.162.163\",\"email\":\"ktorres@livetube.gov\"},\n{\"id\":1648,\"first_name\":\"Rose\",\"last_name\":\"Grant\",\"country\":\"Lesotho\",\"ip_address\":\"183.20.252.173\",\"email\":\"rgrant@meedoo.com\"},\n{\"id\":1649,\"first_name\":\"Carl\",\"last_name\":\"Ford\",\"country\":\"Papua New Guinea\",\"ip_address\":\"13.192.154.43\",\"email\":\"cford@flashspan.gov\"},\n{\"id\":1650,\"first_name\":\"Sandra\",\"last_name\":\"Hunt\",\"country\":\"Uzbekistan\",\"ip_address\":\"57.90.68.170\",\"email\":\"shunt@blogxs.org\"},\n{\"id\":1651,\"first_name\":\"Roger\",\"last_name\":\"Brooks\",\"country\":\"Mauritius\",\"ip_address\":\"88.154.220.249\",\"email\":\"rbrooks@chatterbridge.name\"},\n{\"id\":1652,\"first_name\":\"Ruby\",\"last_name\":\"Jenkins\",\"country\":\"Bhutan\",\"ip_address\":\"13.124.2.222\",\"email\":\"rjenkins@plambee.org\"},\n{\"id\":1653,\"first_name\":\"Jessica\",\"last_name\":\"Hunter\",\"country\":\"Mongolia\",\"ip_address\":\"217.19.221.109\",\"email\":\"jhunter@voonte.gov\"},\n{\"id\":1654,\"first_name\":\"Matthew\",\"last_name\":\"Hamilton\",\"country\":\"Portugal\",\"ip_address\":\"51.36.229.124\",\"email\":\"mhamilton@skidoo.gov\"},\n{\"id\":1655,\"first_name\":\"Samuel\",\"last_name\":\"Black\",\"country\":\"Zambia\",\"ip_address\":\"184.76.20.131\",\"email\":\"sblack@izio.gov\"},\n{\"id\":1656,\"first_name\":\"Cheryl\",\"last_name\":\"Harris\",\"country\":\"Poland\",\"ip_address\":\"251.151.254.101\",\"email\":\"charris@nlounge.mil\"},\n{\"id\":1657,\"first_name\":\"David\",\"last_name\":\"Lee\",\"country\":\"Taiwan\",\"ip_address\":\"123.60.62.240\",\"email\":\"dlee@rooxo.name\"},\n{\"id\":1658,\"first_name\":\"Sharon\",\"last_name\":\"Gardner\",\"country\":\"Dominica\",\"ip_address\":\"73.164.136.243\",\"email\":\"sgardner@skiptube.biz\"},\n{\"id\":1659,\"first_name\":\"Judith\",\"last_name\":\"Shaw\",\"country\":\"Ecuador\",\"ip_address\":\"185.157.146.230\",\"email\":\"jshaw@linkbuzz.net\"},\n{\"id\":1660,\"first_name\":\"Sarah\",\"last_name\":\"Shaw\",\"country\":\"Mauritania\",\"ip_address\":\"228.197.234.41\",\"email\":\"sshaw@kare.name\"},\n{\"id\":1661,\"first_name\":\"Larry\",\"last_name\":\"Duncan\",\"country\":\"Grenada\",\"ip_address\":\"42.195.147.98\",\"email\":\"lduncan@twinte.org\"},\n{\"id\":1662,\"first_name\":\"Lawrence\",\"last_name\":\"Ray\",\"country\":\"Paraguay\",\"ip_address\":\"217.173.11.67\",\"email\":\"lray@muxo.info\"},\n{\"id\":1663,\"first_name\":\"Howard\",\"last_name\":\"Nichols\",\"country\":\"Togo\",\"ip_address\":\"27.227.192.26\",\"email\":\"hnichols@mynte.gov\"},\n{\"id\":1664,\"first_name\":\"Gloria\",\"last_name\":\"Hunt\",\"country\":\"Gibraltar\",\"ip_address\":\"154.72.41.218\",\"email\":\"ghunt@bubbletube.mil\"},\n{\"id\":1665,\"first_name\":\"Jerry\",\"last_name\":\"Hughes\",\"country\":\"Netherlands Antilles\",\"ip_address\":\"79.134.209.15\",\"email\":\"jhughes@zazio.name\"},\n{\"id\":1666,\"first_name\":\"James\",\"last_name\":\"Webb\",\"country\":\"Argentina\",\"ip_address\":\"208.27.55.204\",\"email\":\"jwebb@leenti.net\"},\n{\"id\":1667,\"first_name\":\"Frances\",\"last_name\":\"Cunningham\",\"country\":\"Oman\",\"ip_address\":\"52.29.232.204\",\"email\":\"fcunningham@topdrive.org\"},\n{\"id\":1668,\"first_name\":\"Martha\",\"last_name\":\"Murray\",\"country\":\"Saint Lucia\",\"ip_address\":\"146.184.3.124\",\"email\":\"mmurray@twiyo.gov\"},\n{\"id\":1669,\"first_name\":\"Joshua\",\"last_name\":\"Nelson\",\"country\":\"Belgium\",\"ip_address\":\"36.212.38.46\",\"email\":\"jnelson@tambee.org\"},\n{\"id\":1670,\"first_name\":\"Shirley\",\"last_name\":\"Hayes\",\"country\":\"Switzerland\",\"ip_address\":\"5.125.20.130\",\"email\":\"shayes@tagpad.net\"},\n{\"id\":1671,\"first_name\":\"Carolyn\",\"last_name\":\"Chapman\",\"country\":\"Niger\",\"ip_address\":\"166.72.28.250\",\"email\":\"cchapman@mydeo.info\"},\n{\"id\":1672,\"first_name\":\"Dennis\",\"last_name\":\"Harvey\",\"country\":\"Morocco\",\"ip_address\":\"161.175.205.204\",\"email\":\"dharvey@brainfire.gov\"},\n{\"id\":1673,\"first_name\":\"Michael\",\"last_name\":\"Robertson\",\"country\":\"Norway\",\"ip_address\":\"140.105.97.11\",\"email\":\"mrobertson@teklist.biz\"},\n{\"id\":1674,\"first_name\":\"Raymond\",\"last_name\":\"Foster\",\"country\":\"Ireland\",\"ip_address\":\"243.182.116.83\",\"email\":\"rfoster@layo.biz\"},\n{\"id\":1675,\"first_name\":\"Keith\",\"last_name\":\"Palmer\",\"country\":\"Liechtenstein\",\"ip_address\":\"248.152.164.67\",\"email\":\"kpalmer@yambee.name\"},\n{\"id\":1676,\"first_name\":\"Bonnie\",\"last_name\":\"Gonzalez\",\"country\":\"New Caledonia\",\"ip_address\":\"247.206.106.181\",\"email\":\"bgonzalez@riffwire.edu\"},\n{\"id\":1677,\"first_name\":\"Christopher\",\"last_name\":\"Gomez\",\"country\":\"Ecuador\",\"ip_address\":\"62.42.147.77\",\"email\":\"cgomez@kazio.name\"},\n{\"id\":1678,\"first_name\":\"Steve\",\"last_name\":\"Morris\",\"country\":\"Suriname\",\"ip_address\":\"28.25.169.26\",\"email\":\"smorris@leexo.biz\"},\n{\"id\":1679,\"first_name\":\"Amy\",\"last_name\":\"Johnson\",\"country\":\"French Guiana\",\"ip_address\":\"113.16.163.141\",\"email\":\"ajohnson@flashset.net\"},\n{\"id\":1680,\"first_name\":\"Phyllis\",\"last_name\":\"Campbell\",\"country\":\"Kiribati\",\"ip_address\":\"145.247.108.52\",\"email\":\"pcampbell@lazz.mil\"},\n{\"id\":1681,\"first_name\":\"Albert\",\"last_name\":\"Murphy\",\"country\":\"Dominican Republic\",\"ip_address\":\"31.145.81.125\",\"email\":\"amurphy@eidel.biz\"},\n{\"id\":1682,\"first_name\":\"Albert\",\"last_name\":\"Wheeler\",\"country\":\"Seychelles\",\"ip_address\":\"64.137.30.207\",\"email\":\"awheeler@quinu.name\"},\n{\"id\":1683,\"first_name\":\"Lisa\",\"last_name\":\"Webb\",\"country\":\"Saint Martin\",\"ip_address\":\"222.97.99.169\",\"email\":\"lwebb@bubbletube.info\"},\n{\"id\":1684,\"first_name\":\"Victor\",\"last_name\":\"Gilbert\",\"country\":\"Svalbard and Jan Mayen Islands\",\"ip_address\":\"104.55.234.255\",\"email\":\"vgilbert@lajo.net\"},\n{\"id\":1685,\"first_name\":\"Lisa\",\"last_name\":\"Cruz\",\"country\":\"Qatar\",\"ip_address\":\"248.4.89.134\",\"email\":\"lcruz@geba.info\"},\n{\"id\":1686,\"first_name\":\"Rose\",\"last_name\":\"Gonzales\",\"country\":\"Guinea-Bissau\",\"ip_address\":\"36.248.12.212\",\"email\":\"rgonzales@abata.net\"},\n{\"id\":1687,\"first_name\":\"Andrea\",\"last_name\":\"Olson\",\"country\":\"El Salvador\",\"ip_address\":\"41.79.6.162\",\"email\":\"aolson@youopia.mil\"},\n{\"id\":1688,\"first_name\":\"Gloria\",\"last_name\":\"Rodriguez\",\"country\":\"Swaziland\",\"ip_address\":\"146.187.97.173\",\"email\":\"grodriguez@brainbox.edu\"},\n{\"id\":1689,\"first_name\":\"Evelyn\",\"last_name\":\"Hughes\",\"country\":\"Namibia\",\"ip_address\":\"108.196.21.123\",\"email\":\"ehughes@topicstorm.com\"},\n{\"id\":1690,\"first_name\":\"Justin\",\"last_name\":\"Brooks\",\"country\":\"Netherlands\",\"ip_address\":\"128.231.26.228\",\"email\":\"jbrooks@cogidoo.gov\"},\n{\"id\":1691,\"first_name\":\"Ryan\",\"last_name\":\"Wheeler\",\"country\":\"Isle of Man\",\"ip_address\":\"91.154.18.216\",\"email\":\"rwheeler@viva.name\"},\n{\"id\":1692,\"first_name\":\"Brandon\",\"last_name\":\"Gordon\",\"country\":\"Romania\",\"ip_address\":\"224.88.32.145\",\"email\":\"bgordon@zoomzone.info\"},\n{\"id\":1693,\"first_name\":\"Margaret\",\"last_name\":\"Ray\",\"country\":\"US Minor Outlying Islands\",\"ip_address\":\"41.232.109.209\",\"email\":\"mray@yozio.com\"},\n{\"id\":1694,\"first_name\":\"Nancy\",\"last_name\":\"Smith\",\"country\":\"French Guiana\",\"ip_address\":\"239.143.253.150\",\"email\":\"nsmith@gigazoom.com\"},\n{\"id\":1695,\"first_name\":\"Phyllis\",\"last_name\":\"Weaver\",\"country\":\"Pitcairn Island\",\"ip_address\":\"139.199.143.55\",\"email\":\"pweaver@jaxnation.biz\"},\n{\"id\":1696,\"first_name\":\"Bruce\",\"last_name\":\"Bradley\",\"country\":\"Madagascar\",\"ip_address\":\"148.76.205.142\",\"email\":\"bbradley@realfire.edu\"},\n{\"id\":1697,\"first_name\":\"Margaret\",\"last_name\":\"George\",\"country\":\"Cote d'Ivoire\",\"ip_address\":\"210.147.82.21\",\"email\":\"mgeorge@mita.name\"},\n{\"id\":1698,\"first_name\":\"Martha\",\"last_name\":\"Fisher\",\"country\":\"Timor-Leste\",\"ip_address\":\"97.5.194.118\",\"email\":\"mfisher@meedoo.edu\"},\n{\"id\":1699,\"first_name\":\"Jack\",\"last_name\":\"Ferguson\",\"country\":\"Bulgaria\",\"ip_address\":\"173.184.186.36\",\"email\":\"jferguson@linktype.info\"},\n{\"id\":1700,\"first_name\":\"Diana\",\"last_name\":\"Smith\",\"country\":\"Hong Kong\",\"ip_address\":\"90.93.204.244\",\"email\":\"dsmith@devcast.org\"},\n{\"id\":1701,\"first_name\":\"Carolyn\",\"last_name\":\"Johnson\",\"country\":\"Lesotho\",\"ip_address\":\"115.103.163.129\",\"email\":\"cjohnson@lazz.org\"},\n{\"id\":1702,\"first_name\":\"John\",\"last_name\":\"Young\",\"country\":\"Tanzania\",\"ip_address\":\"76.136.1.226\",\"email\":\"jyoung@oyoba.com\"},\n{\"id\":1703,\"first_name\":\"Aaron\",\"last_name\":\"Rodriguez\",\"country\":\"Denmark\",\"ip_address\":\"234.36.149.110\",\"email\":\"arodriguez@agivu.edu\"},\n{\"id\":1704,\"first_name\":\"Betty\",\"last_name\":\"Howard\",\"country\":\"Pakistan\",\"ip_address\":\"166.202.175.77\",\"email\":\"bhoward@dazzlesphere.name\"},\n{\"id\":1705,\"first_name\":\"Teresa\",\"last_name\":\"Hughes\",\"country\":\"Guinea\",\"ip_address\":\"43.109.158.229\",\"email\":\"thughes@mybuzz.com\"},\n{\"id\":1706,\"first_name\":\"Gary\",\"last_name\":\"Mendoza\",\"country\":\"Austria\",\"ip_address\":\"96.124.153.44\",\"email\":\"gmendoza@thoughtworks.com\"},\n{\"id\":1707,\"first_name\":\"Juan\",\"last_name\":\"Foster\",\"country\":\"Cambodia\",\"ip_address\":\"87.25.215.35\",\"email\":\"jfoster@katz.biz\"},\n{\"id\":1708,\"first_name\":\"Ann\",\"last_name\":\"Roberts\",\"country\":\"Kiribati\",\"ip_address\":\"26.56.82.60\",\"email\":\"aroberts@vinder.biz\"},\n{\"id\":1709,\"first_name\":\"Harold\",\"last_name\":\"Turner\",\"country\":\"Tajikistan\",\"ip_address\":\"14.216.219.92\",\"email\":\"hturner@dabfeed.net\"},\n{\"id\":1710,\"first_name\":\"Albert\",\"last_name\":\"Watkins\",\"country\":\"Taiwan\",\"ip_address\":\"0.78.49.43\",\"email\":\"awatkins@snaptags.gov\"},\n{\"id\":1711,\"first_name\":\"Janet\",\"last_name\":\"Phillips\",\"country\":\"Nauru\",\"ip_address\":\"146.91.44.75\",\"email\":\"jphillips@innojam.mil\"},\n{\"id\":1712,\"first_name\":\"Mildred\",\"last_name\":\"Fernandez\",\"country\":\"Croatia\",\"ip_address\":\"6.232.181.109\",\"email\":\"mfernandez@jamia.mil\"},\n{\"id\":1713,\"first_name\":\"Ernest\",\"last_name\":\"Morgan\",\"country\":\"Algeria\",\"ip_address\":\"142.162.189.101\",\"email\":\"emorgan@gevee.gov\"},\n{\"id\":1714,\"first_name\":\"Emily\",\"last_name\":\"Carroll\",\"country\":\"Sweden\",\"ip_address\":\"57.188.229.234\",\"email\":\"ecarroll@youopia.edu\"},\n{\"id\":1715,\"first_name\":\"Shirley\",\"last_name\":\"Hawkins\",\"country\":\"Barbados\",\"ip_address\":\"95.91.17.253\",\"email\":\"shawkins@yombu.mil\"},\n{\"id\":1716,\"first_name\":\"Eric\",\"last_name\":\"Johnston\",\"country\":\"Gabon\",\"ip_address\":\"108.209.222.27\",\"email\":\"ejohnston@snaptags.mil\"},\n{\"id\":1717,\"first_name\":\"Michael\",\"last_name\":\"Anderson\",\"country\":\"Northern Mariana Islands\",\"ip_address\":\"223.108.94.190\",\"email\":\"manderson@zooxo.net\"},\n{\"id\":1718,\"first_name\":\"Victor\",\"last_name\":\"Young\",\"country\":\"Jordan\",\"ip_address\":\"118.131.6.254\",\"email\":\"vyoung@skinte.edu\"},\n{\"id\":1719,\"first_name\":\"Jeremy\",\"last_name\":\"Johnston\",\"country\":\"Burundi\",\"ip_address\":\"255.82.148.217\",\"email\":\"jjohnston@gabcube.gov\"},\n{\"id\":1720,\"first_name\":\"Katherine\",\"last_name\":\"Carr\",\"country\":\"Aruba\",\"ip_address\":\"32.79.18.93\",\"email\":\"kcarr@thoughtworks.edu\"},\n{\"id\":1721,\"first_name\":\"Angela\",\"last_name\":\"Day\",\"country\":\"Saint Vincent and the Grenadines\",\"ip_address\":\"17.246.236.176\",\"email\":\"aday@voonyx.name\"},\n{\"id\":1722,\"first_name\":\"Steve\",\"last_name\":\"Warren\",\"country\":\"Marshall Islands\",\"ip_address\":\"169.30.10.159\",\"email\":\"swarren@yodoo.mil\"},\n{\"id\":1723,\"first_name\":\"Debra\",\"last_name\":\"Lopez\",\"country\":\"China\",\"ip_address\":\"110.5.242.199\",\"email\":\"dlopez@ooba.net\"},\n{\"id\":1724,\"first_name\":\"Betty\",\"last_name\":\"Martin\",\"country\":\"Mauritius\",\"ip_address\":\"132.147.123.32\",\"email\":\"bmartin@skimia.mil\"},\n{\"id\":1725,\"first_name\":\"Shirley\",\"last_name\":\"Franklin\",\"country\":\"Togo\",\"ip_address\":\"140.76.103.118\",\"email\":\"sfranklin@dynabox.com\"},\n{\"id\":1726,\"first_name\":\"Bobby\",\"last_name\":\"Williamson\",\"country\":\"Myanmar\",\"ip_address\":\"206.151.225.238\",\"email\":\"bwilliamson@rooxo.net\"},\n{\"id\":1727,\"first_name\":\"Timothy\",\"last_name\":\"Hughes\",\"country\":\"Brazil\",\"ip_address\":\"1.159.202.175\",\"email\":\"thughes@wordware.mil\"},\n{\"id\":1728,\"first_name\":\"Willie\",\"last_name\":\"Rose\",\"country\":\"Colombia\",\"ip_address\":\"3.103.193.98\",\"email\":\"wrose@jabbercube.biz\"},\n{\"id\":1729,\"first_name\":\"Karen\",\"last_name\":\"Payne\",\"country\":\"Uganda\",\"ip_address\":\"59.57.230.74\",\"email\":\"kpayne@zoombox.org\"},\n{\"id\":1730,\"first_name\":\"Margaret\",\"last_name\":\"Bradley\",\"country\":\"United Kingdom\",\"ip_address\":\"122.142.56.114\",\"email\":\"mbradley@topicshots.gov\"},\n{\"id\":1731,\"first_name\":\"Judith\",\"last_name\":\"Ryan\",\"country\":\"Aruba\",\"ip_address\":\"68.182.137.171\",\"email\":\"jryan@thoughtsphere.net\"},\n{\"id\":1732,\"first_name\":\"Maria\",\"last_name\":\"Nichols\",\"country\":\"Mongolia\",\"ip_address\":\"106.33.246.95\",\"email\":\"mnichols@realbridge.com\"},\n{\"id\":1733,\"first_name\":\"Kathy\",\"last_name\":\"Fisher\",\"country\":\"Tuvalu\",\"ip_address\":\"236.39.103.221\",\"email\":\"kfisher@rhynyx.org\"},\n{\"id\":1734,\"first_name\":\"Carolyn\",\"last_name\":\"Fisher\",\"country\":\"Macau\",\"ip_address\":\"80.75.121.199\",\"email\":\"cfisher@thoughtworks.name\"},\n{\"id\":1735,\"first_name\":\"Jeremy\",\"last_name\":\"Fernandez\",\"country\":\"Seychelles\",\"ip_address\":\"133.87.121.18\",\"email\":\"jfernandez@kwimbee.com\"},\n{\"id\":1736,\"first_name\":\"Gregory\",\"last_name\":\"Payne\",\"country\":\"Macedonia\",\"ip_address\":\"66.234.14.34\",\"email\":\"gpayne@vidoo.mil\"},\n{\"id\":1737,\"first_name\":\"Eugene\",\"last_name\":\"Lane\",\"country\":\"Romania\",\"ip_address\":\"79.235.27.180\",\"email\":\"elane@fanoodle.name\"},\n{\"id\":1738,\"first_name\":\"Stephanie\",\"last_name\":\"Washington\",\"country\":\"Guadeloupe\",\"ip_address\":\"19.155.149.96\",\"email\":\"swashington@pixope.gov\"},\n{\"id\":1739,\"first_name\":\"Louis\",\"last_name\":\"Gibson\",\"country\":\"Tajikistan\",\"ip_address\":\"211.227.220.233\",\"email\":\"lgibson@browsedrive.net\"},\n{\"id\":1740,\"first_name\":\"Thomas\",\"last_name\":\"Martinez\",\"country\":\"Northern Mariana Islands\",\"ip_address\":\"101.4.126.4\",\"email\":\"tmartinez@topicstorm.org\"},\n{\"id\":1741,\"first_name\":\"Patrick\",\"last_name\":\"Garcia\",\"country\":\"Nicaragua\",\"ip_address\":\"183.19.78.161\",\"email\":\"pgarcia@wikibox.biz\"},\n{\"id\":1742,\"first_name\":\"Gary\",\"last_name\":\"Morales\",\"country\":\"Romania\",\"ip_address\":\"177.149.12.15\",\"email\":\"gmorales@trilith.com\"},\n{\"id\":1743,\"first_name\":\"Kevin\",\"last_name\":\"Porter\",\"country\":\"Jamaica\",\"ip_address\":\"21.15.90.191\",\"email\":\"kporter@yakijo.biz\"},\n{\"id\":1744,\"first_name\":\"Gloria\",\"last_name\":\"Ellis\",\"country\":\"Nicaragua\",\"ip_address\":\"48.107.6.30\",\"email\":\"gellis@topdrive.edu\"},\n{\"id\":1745,\"first_name\":\"Patricia\",\"last_name\":\"Johnson\",\"country\":\"Singapore\",\"ip_address\":\"206.255.170.171\",\"email\":\"pjohnson@youspan.biz\"},\n{\"id\":1746,\"first_name\":\"Roger\",\"last_name\":\"Martin\",\"country\":\"Guatemala\",\"ip_address\":\"107.19.182.118\",\"email\":\"rmartin@topicware.mil\"},\n{\"id\":1747,\"first_name\":\"Louis\",\"last_name\":\"Alvarez\",\"country\":\"Norfolk Island\",\"ip_address\":\"147.223.140.145\",\"email\":\"lalvarez@youspan.net\"},\n{\"id\":1748,\"first_name\":\"Julie\",\"last_name\":\"Young\",\"country\":\"Gambia\",\"ip_address\":\"26.184.182.151\",\"email\":\"jyoung@twitterbeat.name\"},\n{\"id\":1749,\"first_name\":\"Karen\",\"last_name\":\"Lane\",\"country\":\"Yugoslavia\",\"ip_address\":\"72.29.160.254\",\"email\":\"klane@edgetag.com\"},\n{\"id\":1750,\"first_name\":\"Stephanie\",\"last_name\":\"Johnston\",\"country\":\"Norway\",\"ip_address\":\"169.117.82.111\",\"email\":\"sjohnston@skipfire.mil\"},\n{\"id\":1751,\"first_name\":\"Phillip\",\"last_name\":\"Spencer\",\"country\":\"Iraq\",\"ip_address\":\"238.118.122.219\",\"email\":\"pspencer@fanoodle.org\"},\n{\"id\":1752,\"first_name\":\"Dorothy\",\"last_name\":\"Perkins\",\"country\":\"Qatar\",\"ip_address\":\"173.174.37.20\",\"email\":\"dperkins@vinte.edu\"},\n{\"id\":1753,\"first_name\":\"Susan\",\"last_name\":\"Hunt\",\"country\":\"Guam\",\"ip_address\":\"125.158.233.205\",\"email\":\"shunt@quimm.gov\"},\n{\"id\":1754,\"first_name\":\"Frances\",\"last_name\":\"Morales\",\"country\":\"Heard and McDonald Islands\",\"ip_address\":\"102.205.165.210\",\"email\":\"fmorales@flashdog.mil\"},\n{\"id\":1755,\"first_name\":\"Douglas\",\"last_name\":\"Lawson\",\"country\":\"Cuba\",\"ip_address\":\"206.103.199.80\",\"email\":\"dlawson@quamba.com\"},\n{\"id\":1756,\"first_name\":\"Robert\",\"last_name\":\"White\",\"country\":\"Cameroon\",\"ip_address\":\"49.16.87.19\",\"email\":\"rwhite@reallinks.name\"},\n{\"id\":1757,\"first_name\":\"Richard\",\"last_name\":\"Wells\",\"country\":\"Libya\",\"ip_address\":\"174.202.135.83\",\"email\":\"rwells@avamm.org\"},\n{\"id\":1758,\"first_name\":\"Mark\",\"last_name\":\"Carroll\",\"country\":\"Georgia\",\"ip_address\":\"17.45.4.181\",\"email\":\"mcarroll@npath.gov\"},\n{\"id\":1759,\"first_name\":\"Marie\",\"last_name\":\"Ramirez\",\"country\":\"Western Sahara\",\"ip_address\":\"1.232.102.83\",\"email\":\"mramirez@gigazoom.gov\"},\n{\"id\":1760,\"first_name\":\"Timothy\",\"last_name\":\"Ramirez\",\"country\":\"United Arab Emirates\",\"ip_address\":\"21.22.206.179\",\"email\":\"tramirez@topicstorm.org\"},\n{\"id\":1761,\"first_name\":\"Julia\",\"last_name\":\"White\",\"country\":\"Pakistan\",\"ip_address\":\"252.31.168.137\",\"email\":\"jwhite@realmix.edu\"},\n{\"id\":1762,\"first_name\":\"Bonnie\",\"last_name\":\"Gutierrez\",\"country\":\"Haiti\",\"ip_address\":\"63.236.181.213\",\"email\":\"bgutierrez@zoomzone.mil\"},\n{\"id\":1763,\"first_name\":\"Helen\",\"last_name\":\"Sullivan\",\"country\":\"Pitcairn Island\",\"ip_address\":\"231.189.80.27\",\"email\":\"hsullivan@brainbox.biz\"},\n{\"id\":1764,\"first_name\":\"Phillip\",\"last_name\":\"Burke\",\"country\":\"Japan\",\"ip_address\":\"216.226.141.55\",\"email\":\"pburke@meetz.biz\"},\n{\"id\":1765,\"first_name\":\"Annie\",\"last_name\":\"Fuller\",\"country\":\"Lesotho\",\"ip_address\":\"26.0.243.158\",\"email\":\"afuller@meevee.info\"},\n{\"id\":1766,\"first_name\":\"Todd\",\"last_name\":\"Reid\",\"country\":\"Mongolia\",\"ip_address\":\"198.199.186.129\",\"email\":\"treid@feednation.info\"},\n{\"id\":1767,\"first_name\":\"Theresa\",\"last_name\":\"Morales\",\"country\":\"Chad\",\"ip_address\":\"153.128.254.252\",\"email\":\"tmorales@feedspan.gov\"},\n{\"id\":1768,\"first_name\":\"Gloria\",\"last_name\":\"Watson\",\"country\":\"Cuba\",\"ip_address\":\"50.150.154.38\",\"email\":\"gwatson@kare.edu\"},\n{\"id\":1769,\"first_name\":\"Walter\",\"last_name\":\"Mills\",\"country\":\"French Southern Territories\",\"ip_address\":\"190.236.93.241\",\"email\":\"wmills@yakidoo.net\"},\n{\"id\":1770,\"first_name\":\"Nicholas\",\"last_name\":\"Matthews\",\"country\":\"Morocco\",\"ip_address\":\"103.201.64.162\",\"email\":\"nmatthews@skimia.org\"},\n{\"id\":1771,\"first_name\":\"Roger\",\"last_name\":\"Gonzales\",\"country\":\"Ecuador\",\"ip_address\":\"217.202.204.51\",\"email\":\"rgonzales@eazzy.mil\"},\n{\"id\":1772,\"first_name\":\"Marilyn\",\"last_name\":\"Weaver\",\"country\":\"Germany\",\"ip_address\":\"142.189.130.9\",\"email\":\"mweaver@izio.net\"},\n{\"id\":1773,\"first_name\":\"Catherine\",\"last_name\":\"Perkins\",\"country\":\"Switzerland\",\"ip_address\":\"227.4.58.170\",\"email\":\"cperkins@kimia.mil\"},\n{\"id\":1774,\"first_name\":\"Christina\",\"last_name\":\"Perry\",\"country\":\"Mozambique\",\"ip_address\":\"170.145.108.180\",\"email\":\"cperry@voonyx.biz\"},\n{\"id\":1775,\"first_name\":\"Donald\",\"last_name\":\"Boyd\",\"country\":\"United Arab Emirates\",\"ip_address\":\"188.121.86.205\",\"email\":\"dboyd@jaxworks.mil\"},\n{\"id\":1776,\"first_name\":\"Diane\",\"last_name\":\"Morrison\",\"country\":\"Nauru\",\"ip_address\":\"115.158.236.194\",\"email\":\"dmorrison@geba.info\"},\n{\"id\":1777,\"first_name\":\"Cynthia\",\"last_name\":\"Oliver\",\"country\":\"Armenia\",\"ip_address\":\"246.46.95.66\",\"email\":\"coliver@devbug.edu\"},\n{\"id\":1778,\"first_name\":\"Sharon\",\"last_name\":\"Pierce\",\"country\":\"US Minor Outlying Islands\",\"ip_address\":\"120.0.28.238\",\"email\":\"spierce@dazzlesphere.edu\"},\n{\"id\":1779,\"first_name\":\"Gloria\",\"last_name\":\"Long\",\"country\":\"Martinique\",\"ip_address\":\"113.212.60.9\",\"email\":\"glong@ntag.org\"},\n{\"id\":1780,\"first_name\":\"Bobby\",\"last_name\":\"Henderson\",\"country\":\"Nigeria\",\"ip_address\":\"178.160.106.174\",\"email\":\"bhenderson@voolia.org\"},\n{\"id\":1781,\"first_name\":\"Martin\",\"last_name\":\"Lawson\",\"country\":\"United States Virgin Islands\",\"ip_address\":\"127.15.147.155\",\"email\":\"mlawson@brightbean.edu\"},\n{\"id\":1782,\"first_name\":\"Eric\",\"last_name\":\"Davis\",\"country\":\"Ghana\",\"ip_address\":\"185.32.105.8\",\"email\":\"edavis@linkbridge.biz\"},\n{\"id\":1783,\"first_name\":\"Karen\",\"last_name\":\"Phillips\",\"country\":\"Jamaica\",\"ip_address\":\"230.168.5.59\",\"email\":\"kphillips@dabfeed.org\"},\n{\"id\":1784,\"first_name\":\"Linda\",\"last_name\":\"Edwards\",\"country\":\"Tonga\",\"ip_address\":\"159.196.163.180\",\"email\":\"ledwards@edgepulse.gov\"},\n{\"id\":1785,\"first_name\":\"Teresa\",\"last_name\":\"Dunn\",\"country\":\"Morocco\",\"ip_address\":\"28.229.124.67\",\"email\":\"tdunn@miboo.net\"},\n{\"id\":1786,\"first_name\":\"Irene\",\"last_name\":\"Andrews\",\"country\":\"Armenia\",\"ip_address\":\"203.235.189.134\",\"email\":\"iandrews@buzzster.com\"},\n{\"id\":1787,\"first_name\":\"Phillip\",\"last_name\":\"Hernandez\",\"country\":\"Vanuatu\",\"ip_address\":\"76.170.9.163\",\"email\":\"phernandez@gabspot.info\"},\n{\"id\":1788,\"first_name\":\"Sean\",\"last_name\":\"Collins\",\"country\":\"Cook Islands\",\"ip_address\":\"39.250.218.6\",\"email\":\"scollins@leenti.biz\"},\n{\"id\":1789,\"first_name\":\"Helen\",\"last_name\":\"Watkins\",\"country\":\"Malaysia\",\"ip_address\":\"27.0.84.98\",\"email\":\"hwatkins@mynte.gov\"},\n{\"id\":1790,\"first_name\":\"Jonathan\",\"last_name\":\"Oliver\",\"country\":\"Ukraine\",\"ip_address\":\"199.120.205.10\",\"email\":\"joliver@dabjam.biz\"},\n{\"id\":1791,\"first_name\":\"Eric\",\"last_name\":\"Harris\",\"country\":\"India\",\"ip_address\":\"88.30.32.245\",\"email\":\"eharris@brainfire.biz\"},\n{\"id\":1792,\"first_name\":\"Jimmy\",\"last_name\":\"Lee\",\"country\":\"Turks and Caicos Islands\",\"ip_address\":\"94.81.87.53\",\"email\":\"jlee@avaveo.name\"},\n{\"id\":1793,\"first_name\":\"Aaron\",\"last_name\":\"Rivera\",\"country\":\"Bouvet Island\",\"ip_address\":\"116.155.132.64\",\"email\":\"arivera@thoughtstorm.name\"},\n{\"id\":1794,\"first_name\":\"Ruby\",\"last_name\":\"Collins\",\"country\":\"Canada\",\"ip_address\":\"178.255.197.198\",\"email\":\"rcollins@eayo.org\"},\n{\"id\":1795,\"first_name\":\"Phyllis\",\"last_name\":\"Simmons\",\"country\":\"Chad\",\"ip_address\":\"20.163.202.217\",\"email\":\"psimmons@jayo.mil\"},\n{\"id\":1796,\"first_name\":\"Richard\",\"last_name\":\"Spencer\",\"country\":\"Belarus\",\"ip_address\":\"107.2.65.96\",\"email\":\"rspencer@oyonder.mil\"},\n{\"id\":1797,\"first_name\":\"Jack\",\"last_name\":\"Bowman\",\"country\":\"Bulgaria\",\"ip_address\":\"5.139.100.75\",\"email\":\"jbowman@dazzlesphere.net\"},\n{\"id\":1798,\"first_name\":\"Andrew\",\"last_name\":\"Anderson\",\"country\":\"Korea, South\",\"ip_address\":\"254.226.33.97\",\"email\":\"aanderson@voonyx.gov\"},\n{\"id\":1799,\"first_name\":\"George\",\"last_name\":\"Dunn\",\"country\":\"Rwanda\",\"ip_address\":\"104.35.24.77\",\"email\":\"gdunn@vitz.biz\"},\n{\"id\":1800,\"first_name\":\"Diane\",\"last_name\":\"Dixon\",\"country\":\"Slovenia\",\"ip_address\":\"231.192.198.235\",\"email\":\"ddixon@skimia.com\"},\n{\"id\":1801,\"first_name\":\"Sharon\",\"last_name\":\"Burton\",\"country\":\"Vietnam\",\"ip_address\":\"228.190.218.86\",\"email\":\"sburton@muxo.edu\"},\n{\"id\":1802,\"first_name\":\"Roger\",\"last_name\":\"Thompson\",\"country\":\"Armenia\",\"ip_address\":\"217.70.206.148\",\"email\":\"rthompson@buzzdog.info\"},\n{\"id\":1803,\"first_name\":\"William\",\"last_name\":\"Flores\",\"country\":\"Christmas Island\",\"ip_address\":\"59.151.55.248\",\"email\":\"wflores@rhynyx.biz\"},\n{\"id\":1804,\"first_name\":\"Earl\",\"last_name\":\"Garza\",\"country\":\"Panama\",\"ip_address\":\"166.66.107.40\",\"email\":\"egarza@shuffletag.com\"},\n{\"id\":1805,\"first_name\":\"Janet\",\"last_name\":\"Gilbert\",\"country\":\"Suriname\",\"ip_address\":\"192.138.36.133\",\"email\":\"jgilbert@kazu.info\"},\n{\"id\":1806,\"first_name\":\"Jessica\",\"last_name\":\"Cruz\",\"country\":\"Iraq\",\"ip_address\":\"158.85.166.235\",\"email\":\"jcruz@yozio.edu\"},\n{\"id\":1807,\"first_name\":\"Earl\",\"last_name\":\"Bailey\",\"country\":\"Russia\",\"ip_address\":\"133.19.216.191\",\"email\":\"ebailey@oodoo.org\"},\n{\"id\":1808,\"first_name\":\"Norma\",\"last_name\":\"Perkins\",\"country\":\"United States of America\",\"ip_address\":\"236.223.176.35\",\"email\":\"nperkins@meeveo.mil\"},\n{\"id\":1809,\"first_name\":\"Shirley\",\"last_name\":\"Perez\",\"country\":\"Bahamas\",\"ip_address\":\"136.130.177.204\",\"email\":\"sperez@devpoint.info\"},\n{\"id\":1810,\"first_name\":\"Gregory\",\"last_name\":\"Freeman\",\"country\":\"Indonesia\",\"ip_address\":\"169.18.42.104\",\"email\":\"gfreeman@trilith.biz\"},\n{\"id\":1811,\"first_name\":\"Brian\",\"last_name\":\"Griffin\",\"country\":\"Algeria\",\"ip_address\":\"220.96.100.179\",\"email\":\"bgriffin@muxo.gov\"},\n{\"id\":1812,\"first_name\":\"Ruth\",\"last_name\":\"Johnson\",\"country\":\"Italy\",\"ip_address\":\"114.178.223.50\",\"email\":\"rjohnson@linkbridge.biz\"},\n{\"id\":1813,\"first_name\":\"Shirley\",\"last_name\":\"Austin\",\"country\":\"Netherlands\",\"ip_address\":\"128.78.225.66\",\"email\":\"saustin@skyba.name\"},\n{\"id\":1814,\"first_name\":\"Karen\",\"last_name\":\"Banks\",\"country\":\"Libya\",\"ip_address\":\"202.9.254.233\",\"email\":\"kbanks@skibox.mil\"},\n{\"id\":1815,\"first_name\":\"Anne\",\"last_name\":\"Ray\",\"country\":\"Anguilla\",\"ip_address\":\"49.2.123.106\",\"email\":\"aray@midel.info\"},\n{\"id\":1816,\"first_name\":\"Joshua\",\"last_name\":\"Austin\",\"country\":\"Suriname\",\"ip_address\":\"196.155.154.73\",\"email\":\"jaustin@aibox.gov\"},\n{\"id\":1817,\"first_name\":\"Virginia\",\"last_name\":\"Carroll\",\"country\":\"Libya\",\"ip_address\":\"104.101.12.160\",\"email\":\"vcarroll@voonyx.gov\"},\n{\"id\":1818,\"first_name\":\"Aaron\",\"last_name\":\"Hughes\",\"country\":\"Thailand\",\"ip_address\":\"227.105.238.96\",\"email\":\"ahughes@viva.edu\"},\n{\"id\":1819,\"first_name\":\"Shawn\",\"last_name\":\"Adams\",\"country\":\"Fiji\",\"ip_address\":\"174.52.244.32\",\"email\":\"sadams@voonte.edu\"},\n{\"id\":1820,\"first_name\":\"Janice\",\"last_name\":\"Murray\",\"country\":\"Gabon\",\"ip_address\":\"111.58.186.87\",\"email\":\"jmurray@jabberbean.name\"},\n{\"id\":1821,\"first_name\":\"Julia\",\"last_name\":\"Berry\",\"country\":\"Ukraine\",\"ip_address\":\"203.251.188.124\",\"email\":\"jberry@dabz.gov\"},\n{\"id\":1822,\"first_name\":\"Dorothy\",\"last_name\":\"Garza\",\"country\":\"Saint Pierre and Miquelon\",\"ip_address\":\"14.246.166.209\",\"email\":\"dgarza@youspan.edu\"},\n{\"id\":1823,\"first_name\":\"Barbara\",\"last_name\":\"Rogers\",\"country\":\"Indonesia\",\"ip_address\":\"45.191.14.197\",\"email\":\"brogers@photobug.net\"},\n{\"id\":1824,\"first_name\":\"Harry\",\"last_name\":\"Smith\",\"country\":\"French Southern Territories\",\"ip_address\":\"11.111.247.90\",\"email\":\"hsmith@realbuzz.gov\"},\n{\"id\":1825,\"first_name\":\"Bobby\",\"last_name\":\"Johnson\",\"country\":\"Vatican City State (Holy See)\",\"ip_address\":\"113.155.237.5\",\"email\":\"bjohnson@livepath.info\"},\n{\"id\":1826,\"first_name\":\"Sharon\",\"last_name\":\"Bailey\",\"country\":\"Jersey\",\"ip_address\":\"30.225.10.252\",\"email\":\"sbailey@tagcat.edu\"},\n{\"id\":1827,\"first_name\":\"James\",\"last_name\":\"Sanchez\",\"country\":\"Christmas Island\",\"ip_address\":\"166.17.196.149\",\"email\":\"jsanchez@tanoodle.edu\"},\n{\"id\":1828,\"first_name\":\"Fred\",\"last_name\":\"Washington\",\"country\":\"Ethiopia\",\"ip_address\":\"169.192.215.137\",\"email\":\"fwashington@skynoodle.edu\"},\n{\"id\":1829,\"first_name\":\"George\",\"last_name\":\"Rodriguez\",\"country\":\"Heard and McDonald Islands\",\"ip_address\":\"33.226.122.18\",\"email\":\"grodriguez@eadel.org\"},\n{\"id\":1830,\"first_name\":\"Gary\",\"last_name\":\"Bell\",\"country\":\"Papua New Guinea\",\"ip_address\":\"216.194.157.191\",\"email\":\"gbell@layo.org\"},\n{\"id\":1831,\"first_name\":\"Lois\",\"last_name\":\"Brown\",\"country\":\"Czech Republic\",\"ip_address\":\"170.83.187.216\",\"email\":\"lbrown@centidel.info\"},\n{\"id\":1832,\"first_name\":\"Jane\",\"last_name\":\"Hudson\",\"country\":\"Canada\",\"ip_address\":\"137.211.122.141\",\"email\":\"jhudson@wikido.name\"},\n{\"id\":1833,\"first_name\":\"Jimmy\",\"last_name\":\"Hanson\",\"country\":\"Korea, North\",\"ip_address\":\"210.16.239.121\",\"email\":\"jhanson@vimbo.name\"},\n{\"id\":1834,\"first_name\":\"Jeremy\",\"last_name\":\"Collins\",\"country\":\"Colombia\",\"ip_address\":\"19.145.76.151\",\"email\":\"jcollins@edgeblab.name\"},\n{\"id\":1835,\"first_name\":\"Walter\",\"last_name\":\"Wright\",\"country\":\"Nigeria\",\"ip_address\":\"73.56.254.119\",\"email\":\"wwright@realcube.name\"},\n{\"id\":1836,\"first_name\":\"Stephen\",\"last_name\":\"Lee\",\"country\":\"Honduras\",\"ip_address\":\"232.136.79.3\",\"email\":\"slee@devify.info\"},\n{\"id\":1837,\"first_name\":\"Jesse\",\"last_name\":\"Lynch\",\"country\":\"Philippines\",\"ip_address\":\"100.53.132.17\",\"email\":\"jlynch@kimia.gov\"},\n{\"id\":1838,\"first_name\":\"Clarence\",\"last_name\":\"Banks\",\"country\":\"Greece\",\"ip_address\":\"84.246.215.184\",\"email\":\"cbanks@fivespan.org\"},\n{\"id\":1839,\"first_name\":\"George\",\"last_name\":\"Ellis\",\"country\":\"Sweden\",\"ip_address\":\"65.132.181.140\",\"email\":\"gellis@voomm.mil\"},\n{\"id\":1840,\"first_name\":\"Christina\",\"last_name\":\"Morris\",\"country\":\"Korea, South\",\"ip_address\":\"109.136.253.185\",\"email\":\"cmorris@eidel.edu\"},\n{\"id\":1841,\"first_name\":\"Judith\",\"last_name\":\"Shaw\",\"country\":\"Norfolk Island\",\"ip_address\":\"72.76.246.197\",\"email\":\"jshaw@topicblab.edu\"},\n{\"id\":1842,\"first_name\":\"Emily\",\"last_name\":\"Shaw\",\"country\":\"Palestinian Territory, Occupied\",\"ip_address\":\"215.117.174.40\",\"email\":\"eshaw@yata.gov\"},\n{\"id\":1843,\"first_name\":\"Edward\",\"last_name\":\"Patterson\",\"country\":\"Korea, North\",\"ip_address\":\"192.38.111.209\",\"email\":\"epatterson@trilith.net\"},\n{\"id\":1844,\"first_name\":\"Martha\",\"last_name\":\"Garrett\",\"country\":\"New Caledonia\",\"ip_address\":\"35.237.143.135\",\"email\":\"mgarrett@mymm.info\"},\n{\"id\":1845,\"first_name\":\"Eric\",\"last_name\":\"Andrews\",\"country\":\"Heard and McDonald Islands\",\"ip_address\":\"42.77.30.190\",\"email\":\"eandrews@babbleset.com\"},\n{\"id\":1846,\"first_name\":\"Samuel\",\"last_name\":\"Barnes\",\"country\":\"Svalbard and Jan Mayen Islands\",\"ip_address\":\"109.204.228.240\",\"email\":\"sbarnes@kwimbee.edu\"},\n{\"id\":1847,\"first_name\":\"Phillip\",\"last_name\":\"Webb\",\"country\":\"Sri Lanka\",\"ip_address\":\"213.52.180.198\",\"email\":\"pwebb@skipfire.biz\"},\n{\"id\":1848,\"first_name\":\"Ann\",\"last_name\":\"Alvarez\",\"country\":\"Vatican City State (Holy See)\",\"ip_address\":\"24.178.204.251\",\"email\":\"aalvarez@zoomzone.edu\"},\n{\"id\":1849,\"first_name\":\"Theresa\",\"last_name\":\"Griffin\",\"country\":\"Cook Islands\",\"ip_address\":\"73.83.127.156\",\"email\":\"tgriffin@voomm.org\"},\n{\"id\":1850,\"first_name\":\"Matthew\",\"last_name\":\"Adams\",\"country\":\"\\u00c5land\",\"ip_address\":\"114.225.12.145\",\"email\":\"madams@jaxbean.net\"},\n{\"id\":1851,\"first_name\":\"Barbara\",\"last_name\":\"Ross\",\"country\":\"Equatorial Guinea\",\"ip_address\":\"64.130.37.43\",\"email\":\"bross@blogtags.info\"},\n{\"id\":1852,\"first_name\":\"Samuel\",\"last_name\":\"Lee\",\"country\":\"Trinidad and Tobago\",\"ip_address\":\"71.47.214.71\",\"email\":\"slee@babbleset.edu\"},\n{\"id\":1853,\"first_name\":\"Lois\",\"last_name\":\"Hicks\",\"country\":\"China\",\"ip_address\":\"250.254.118.183\",\"email\":\"lhicks@wordpedia.info\"},\n{\"id\":1854,\"first_name\":\"Antonio\",\"last_name\":\"George\",\"country\":\"Czech Republic\",\"ip_address\":\"213.76.190.100\",\"email\":\"ageorge@gigabox.name\"},\n{\"id\":1855,\"first_name\":\"Marilyn\",\"last_name\":\"Wallace\",\"country\":\"Palau\",\"ip_address\":\"170.209.57.28\",\"email\":\"mwallace@skipfire.biz\"},\n{\"id\":1856,\"first_name\":\"Heather\",\"last_name\":\"Jackson\",\"country\":\"Ascension Island\",\"ip_address\":\"13.127.167.246\",\"email\":\"hjackson@twitterbridge.info\"},\n{\"id\":1857,\"first_name\":\"Gerald\",\"last_name\":\"Garza\",\"country\":\"Fiji\",\"ip_address\":\"142.154.118.180\",\"email\":\"ggarza@skivee.com\"},\n{\"id\":1858,\"first_name\":\"Jane\",\"last_name\":\"Bryant\",\"country\":\"Venezuela\",\"ip_address\":\"93.202.42.188\",\"email\":\"jbryant@gabvine.net\"},\n{\"id\":1859,\"first_name\":\"Emily\",\"last_name\":\"Simmons\",\"country\":\"Montenegro\",\"ip_address\":\"124.58.0.217\",\"email\":\"esimmons@ailane.org\"},\n{\"id\":1860,\"first_name\":\"Carolyn\",\"last_name\":\"Bell\",\"country\":\"Guatemala\",\"ip_address\":\"27.19.126.132\",\"email\":\"cbell@linkbridge.com\"},\n{\"id\":1861,\"first_name\":\"Janet\",\"last_name\":\"Torres\",\"country\":\"Mexico\",\"ip_address\":\"180.116.84.192\",\"email\":\"jtorres@skyba.net\"},\n{\"id\":1862,\"first_name\":\"Adam\",\"last_name\":\"Campbell\",\"country\":\"Qatar\",\"ip_address\":\"60.119.244.119\",\"email\":\"acampbell@yozio.name\"},\n{\"id\":1863,\"first_name\":\"Carl\",\"last_name\":\"Robertson\",\"country\":\"United States of America\",\"ip_address\":\"126.206.114.141\",\"email\":\"crobertson@quimm.edu\"},\n{\"id\":1864,\"first_name\":\"Lisa\",\"last_name\":\"Duncan\",\"country\":\"Iran\",\"ip_address\":\"203.65.221.31\",\"email\":\"lduncan@jabbertype.net\"},\n{\"id\":1865,\"first_name\":\"Joseph\",\"last_name\":\"Perez\",\"country\":\"Anguilla\",\"ip_address\":\"73.78.143.185\",\"email\":\"jperez@zoonder.biz\"},\n{\"id\":1866,\"first_name\":\"Maria\",\"last_name\":\"Medina\",\"country\":\"Benin\",\"ip_address\":\"237.110.157.186\",\"email\":\"mmedina@dynazzy.name\"},\n{\"id\":1867,\"first_name\":\"Howard\",\"last_name\":\"Garza\",\"country\":\"Cook Islands\",\"ip_address\":\"208.51.233.36\",\"email\":\"hgarza@gigazoom.com\"},\n{\"id\":1868,\"first_name\":\"Laura\",\"last_name\":\"Morris\",\"country\":\"Anguilla\",\"ip_address\":\"164.234.239.16\",\"email\":\"lmorris@ntag.biz\"},\n{\"id\":1869,\"first_name\":\"Billy\",\"last_name\":\"Richards\",\"country\":\"Iceland\",\"ip_address\":\"4.148.243.87\",\"email\":\"brichards@edgeify.info\"},\n{\"id\":1870,\"first_name\":\"Stephen\",\"last_name\":\"Payne\",\"country\":\"Turkey\",\"ip_address\":\"198.151.197.197\",\"email\":\"spayne@yodel.edu\"},\n{\"id\":1871,\"first_name\":\"Harry\",\"last_name\":\"Garcia\",\"country\":\"Lebanon\",\"ip_address\":\"108.191.81.211\",\"email\":\"hgarcia@dynazzy.name\"},\n{\"id\":1872,\"first_name\":\"Judy\",\"last_name\":\"Morris\",\"country\":\"Kenya\",\"ip_address\":\"125.190.58.249\",\"email\":\"jmorris@jazzy.biz\"},\n{\"id\":1873,\"first_name\":\"Lillian\",\"last_name\":\"Howard\",\"country\":\"Sri Lanka\",\"ip_address\":\"181.137.201.40\",\"email\":\"lhoward@riffpath.biz\"},\n{\"id\":1874,\"first_name\":\"Susan\",\"last_name\":\"Larson\",\"country\":\"Malawi\",\"ip_address\":\"17.196.71.29\",\"email\":\"slarson@shufflester.mil\"},\n{\"id\":1875,\"first_name\":\"Jesse\",\"last_name\":\"Wright\",\"country\":\"Solomon Islands\",\"ip_address\":\"74.86.193.138\",\"email\":\"jwright@quinu.info\"},\n{\"id\":1876,\"first_name\":\"Denise\",\"last_name\":\"Morris\",\"country\":\"Belgium\",\"ip_address\":\"213.123.61.13\",\"email\":\"dmorris@dazzlesphere.net\"},\n{\"id\":1877,\"first_name\":\"Howard\",\"last_name\":\"Thomas\",\"country\":\"Morocco\",\"ip_address\":\"100.48.102.31\",\"email\":\"hthomas@teklist.com\"},\n{\"id\":1878,\"first_name\":\"Kathy\",\"last_name\":\"George\",\"country\":\"Iran\",\"ip_address\":\"247.9.223.43\",\"email\":\"kgeorge@zoozzy.gov\"},\n{\"id\":1879,\"first_name\":\"Frank\",\"last_name\":\"Owens\",\"country\":\"Kenya\",\"ip_address\":\"29.158.217.238\",\"email\":\"fowens@twitterbridge.org\"},\n{\"id\":1880,\"first_name\":\"Adam\",\"last_name\":\"Palmer\",\"country\":\"Samoa\",\"ip_address\":\"177.173.47.68\",\"email\":\"apalmer@meeveo.info\"},\n{\"id\":1881,\"first_name\":\"Phillip\",\"last_name\":\"Allen\",\"country\":\"Eritrea\",\"ip_address\":\"60.205.188.155\",\"email\":\"pallen@plambee.biz\"},\n{\"id\":1882,\"first_name\":\"Daniel\",\"last_name\":\"Webb\",\"country\":\"Bhutan\",\"ip_address\":\"65.117.201.82\",\"email\":\"dwebb@oyoloo.net\"},\n{\"id\":1883,\"first_name\":\"Evelyn\",\"last_name\":\"Wright\",\"country\":\"Swaziland\",\"ip_address\":\"102.227.105.220\",\"email\":\"ewright@linklinks.biz\"},\n{\"id\":1884,\"first_name\":\"Jean\",\"last_name\":\"Lee\",\"country\":\"San Marino\",\"ip_address\":\"171.152.246.171\",\"email\":\"jlee@wordtune.com\"},\n{\"id\":1885,\"first_name\":\"Jeremy\",\"last_name\":\"Rogers\",\"country\":\"Rwanda\",\"ip_address\":\"218.241.228.212\",\"email\":\"jrogers@livepath.name\"},\n{\"id\":1886,\"first_name\":\"Kelly\",\"last_name\":\"Price\",\"country\":\"United States of America\",\"ip_address\":\"34.107.111.14\",\"email\":\"kprice@topdrive.info\"},\n{\"id\":1887,\"first_name\":\"Kevin\",\"last_name\":\"Mason\",\"country\":\"Yemen\",\"ip_address\":\"89.183.24.134\",\"email\":\"kmason@yabox.name\"},\n{\"id\":1888,\"first_name\":\"Johnny\",\"last_name\":\"Wells\",\"country\":\"Uganda\",\"ip_address\":\"216.119.218.1\",\"email\":\"jwells@roodel.com\"},\n{\"id\":1889,\"first_name\":\"Laura\",\"last_name\":\"Stevens\",\"country\":\"Algeria\",\"ip_address\":\"246.120.207.132\",\"email\":\"lstevens@blogtags.gov\"},\n{\"id\":1890,\"first_name\":\"Deborah\",\"last_name\":\"Wood\",\"country\":\"Swaziland\",\"ip_address\":\"47.127.249.163\",\"email\":\"dwood@ozu.org\"},\n{\"id\":1891,\"first_name\":\"Diane\",\"last_name\":\"Wood\",\"country\":\"Austria\",\"ip_address\":\"182.16.90.67\",\"email\":\"dwood@geba.gov\"},\n{\"id\":1892,\"first_name\":\"Bruce\",\"last_name\":\"White\",\"country\":\"Saint Helena\",\"ip_address\":\"16.46.76.162\",\"email\":\"bwhite@topdrive.com\"},\n{\"id\":1893,\"first_name\":\"Anna\",\"last_name\":\"Gutierrez\",\"country\":\"Pitcairn Island\",\"ip_address\":\"75.191.123.233\",\"email\":\"agutierrez@bluejam.org\"},\n{\"id\":1894,\"first_name\":\"Martha\",\"last_name\":\"Ryan\",\"country\":\"Guyana\",\"ip_address\":\"61.205.13.205\",\"email\":\"mryan@geba.mil\"},\n{\"id\":1895,\"first_name\":\"Jose\",\"last_name\":\"Owens\",\"country\":\"Antigua and Barbuda\",\"ip_address\":\"155.130.135.229\",\"email\":\"jowens@jaxnation.mil\"},\n{\"id\":1896,\"first_name\":\"Nicholas\",\"last_name\":\"Reid\",\"country\":\"Slovakia\",\"ip_address\":\"76.30.59.120\",\"email\":\"nreid@jaxnation.name\"},\n{\"id\":1897,\"first_name\":\"Joyce\",\"last_name\":\"Fisher\",\"country\":\"Palau\",\"ip_address\":\"3.11.126.160\",\"email\":\"jfisher@divanoodle.mil\"},\n{\"id\":1898,\"first_name\":\"Bruce\",\"last_name\":\"Ward\",\"country\":\"Bangladesh\",\"ip_address\":\"43.141.128.4\",\"email\":\"bward@twimm.edu\"},\n{\"id\":1899,\"first_name\":\"Debra\",\"last_name\":\"Mcdonald\",\"country\":\"Montserrat\",\"ip_address\":\"230.75.47.82\",\"email\":\"dmcdonald@realbuzz.edu\"},\n{\"id\":1900,\"first_name\":\"Christina\",\"last_name\":\"Gilbert\",\"country\":\"Trinidad and Tobago\",\"ip_address\":\"253.51.87.76\",\"email\":\"cgilbert@eare.org\"},\n{\"id\":1901,\"first_name\":\"Jean\",\"last_name\":\"Morales\",\"country\":\"Eritrea\",\"ip_address\":\"54.218.3.182\",\"email\":\"jmorales@flipbug.biz\"},\n{\"id\":1902,\"first_name\":\"Roy\",\"last_name\":\"Hanson\",\"country\":\"Russia\",\"ip_address\":\"124.225.1.205\",\"email\":\"rhanson@lazz.edu\"},\n{\"id\":1903,\"first_name\":\"Thomas\",\"last_name\":\"Barnes\",\"country\":\"British Indian Ocean Territory\",\"ip_address\":\"197.27.38.120\",\"email\":\"tbarnes@mydeo.org\"},\n{\"id\":1904,\"first_name\":\"Bonnie\",\"last_name\":\"Freeman\",\"country\":\"Saint Martin\",\"ip_address\":\"105.208.47.202\",\"email\":\"bfreeman@zoonder.edu\"},\n{\"id\":1905,\"first_name\":\"Gloria\",\"last_name\":\"Burns\",\"country\":\"Vatican City State (Holy See)\",\"ip_address\":\"90.65.170.45\",\"email\":\"gburns@gabspot.info\"},\n{\"id\":1906,\"first_name\":\"Jessica\",\"last_name\":\"Lawrence\",\"country\":\"Georgia\",\"ip_address\":\"6.82.237.37\",\"email\":\"jlawrence@tambee.name\"},\n{\"id\":1907,\"first_name\":\"Thomas\",\"last_name\":\"Carter\",\"country\":\"Mexico\",\"ip_address\":\"78.220.100.173\",\"email\":\"tcarter@yodel.name\"},\n{\"id\":1908,\"first_name\":\"Rebecca\",\"last_name\":\"Dunn\",\"country\":\"New Caledonia\",\"ip_address\":\"44.227.255.23\",\"email\":\"rdunn@izio.info\"},\n{\"id\":1909,\"first_name\":\"Patrick\",\"last_name\":\"Richardson\",\"country\":\"Antarctica\",\"ip_address\":\"132.10.74.137\",\"email\":\"prichardson@katz.name\"},\n{\"id\":1910,\"first_name\":\"Denise\",\"last_name\":\"George\",\"country\":\"Mayotte\",\"ip_address\":\"217.18.216.58\",\"email\":\"dgeorge@trilith.biz\"},\n{\"id\":1911,\"first_name\":\"Nicole\",\"last_name\":\"Kennedy\",\"country\":\"Mozambique\",\"ip_address\":\"80.131.133.33\",\"email\":\"nkennedy@yata.gov\"},\n{\"id\":1912,\"first_name\":\"Earl\",\"last_name\":\"Perry\",\"country\":\"Saint Lucia\",\"ip_address\":\"76.43.114.180\",\"email\":\"eperry@viva.mil\"},\n{\"id\":1913,\"first_name\":\"Shawn\",\"last_name\":\"Robinson\",\"country\":\"Antarctica\",\"ip_address\":\"0.54.69.243\",\"email\":\"srobinson@meevee.mil\"},\n{\"id\":1914,\"first_name\":\"Ann\",\"last_name\":\"Stephens\",\"country\":\"French Polynesia\",\"ip_address\":\"80.84.10.8\",\"email\":\"astephens@wordtune.gov\"},\n{\"id\":1915,\"first_name\":\"Pamela\",\"last_name\":\"Henry\",\"country\":\"Dominica\",\"ip_address\":\"46.5.59.60\",\"email\":\"phenry@livez.org\"},\n{\"id\":1916,\"first_name\":\"Amy\",\"last_name\":\"Reynolds\",\"country\":\"Somalia\",\"ip_address\":\"242.134.175.176\",\"email\":\"areynolds@oodoo.org\"},\n{\"id\":1917,\"first_name\":\"Dorothy\",\"last_name\":\"Reynolds\",\"country\":\"Turks and Caicos Islands\",\"ip_address\":\"65.213.107.169\",\"email\":\"dreynolds@brainverse.net\"},\n{\"id\":1918,\"first_name\":\"Paula\",\"last_name\":\"Campbell\",\"country\":\"Papua New Guinea\",\"ip_address\":\"207.121.98.147\",\"email\":\"pcampbell@rhyloo.edu\"},\n{\"id\":1919,\"first_name\":\"Alice\",\"last_name\":\"Romero\",\"country\":\"Myanmar\",\"ip_address\":\"206.75.8.251\",\"email\":\"aromero@livetube.mil\"},\n{\"id\":1920,\"first_name\":\"Louis\",\"last_name\":\"Ramos\",\"country\":\"Macau\",\"ip_address\":\"125.84.191.221\",\"email\":\"lramos@meemm.biz\"},\n{\"id\":1921,\"first_name\":\"Donna\",\"last_name\":\"Weaver\",\"country\":\"Belarus\",\"ip_address\":\"92.34.158.171\",\"email\":\"dweaver@eadel.edu\"},\n{\"id\":1922,\"first_name\":\"Earl\",\"last_name\":\"Chapman\",\"country\":\"Guernsey\",\"ip_address\":\"164.241.206.199\",\"email\":\"echapman@flashdog.org\"},\n{\"id\":1923,\"first_name\":\"Brenda\",\"last_name\":\"Mccoy\",\"country\":\"Sweden\",\"ip_address\":\"206.238.215.206\",\"email\":\"bmccoy@trudoo.mil\"},\n{\"id\":1924,\"first_name\":\"Patrick\",\"last_name\":\"Hunt\",\"country\":\"Saint Martin\",\"ip_address\":\"44.229.186.161\",\"email\":\"phunt@topicstorm.gov\"},\n{\"id\":1925,\"first_name\":\"Annie\",\"last_name\":\"Ramos\",\"country\":\"Christmas Island\",\"ip_address\":\"205.109.112.147\",\"email\":\"aramos@skajo.com\"},\n{\"id\":1926,\"first_name\":\"Howard\",\"last_name\":\"Cox\",\"country\":\"Fiji\",\"ip_address\":\"111.90.146.225\",\"email\":\"hcox@jumpxs.biz\"},\n{\"id\":1927,\"first_name\":\"Norma\",\"last_name\":\"Hanson\",\"country\":\"Comoros\",\"ip_address\":\"83.87.116.77\",\"email\":\"nhanson@kaymbo.net\"},\n{\"id\":1928,\"first_name\":\"Carol\",\"last_name\":\"Perkins\",\"country\":\"Denmark\",\"ip_address\":\"38.17.145.164\",\"email\":\"cperkins@podcat.com\"},\n{\"id\":1929,\"first_name\":\"Harry\",\"last_name\":\"Fox\",\"country\":\"Guadeloupe\",\"ip_address\":\"42.247.79.4\",\"email\":\"hfox@yakijo.mil\"},\n{\"id\":1930,\"first_name\":\"Martha\",\"last_name\":\"Rice\",\"country\":\"Nepal\",\"ip_address\":\"232.121.74.16\",\"email\":\"mrice@zoomlounge.biz\"},\n{\"id\":1931,\"first_name\":\"Richard\",\"last_name\":\"Ward\",\"country\":\"Pitcairn Island\",\"ip_address\":\"138.1.59.236\",\"email\":\"rward@yodel.biz\"},\n{\"id\":1932,\"first_name\":\"Debra\",\"last_name\":\"Rogers\",\"country\":\"Central African Republic\",\"ip_address\":\"140.139.76.209\",\"email\":\"drogers@jabbertype.gov\"},\n{\"id\":1933,\"first_name\":\"Stephen\",\"last_name\":\"Rodriguez\",\"country\":\"South Africa\",\"ip_address\":\"242.98.125.51\",\"email\":\"srodriguez@youbridge.name\"},\n{\"id\":1934,\"first_name\":\"Joseph\",\"last_name\":\"Bishop\",\"country\":\"Vanuatu\",\"ip_address\":\"10.62.13.207\",\"email\":\"jbishop@ozu.org\"},\n{\"id\":1935,\"first_name\":\"Beverly\",\"last_name\":\"Torres\",\"country\":\"Montenegro\",\"ip_address\":\"75.42.163.68\",\"email\":\"btorres@trilia.mil\"},\n{\"id\":1936,\"first_name\":\"Thomas\",\"last_name\":\"Marshall\",\"country\":\"Jersey\",\"ip_address\":\"76.74.247.148\",\"email\":\"tmarshall@divavu.com\"},\n{\"id\":1937,\"first_name\":\"Louise\",\"last_name\":\"Martinez\",\"country\":\"Ukraine\",\"ip_address\":\"80.59.248.240\",\"email\":\"lmartinez@fanoodle.biz\"},\n{\"id\":1938,\"first_name\":\"Jane\",\"last_name\":\"Harvey\",\"country\":\"Cook Islands\",\"ip_address\":\"100.213.175.37\",\"email\":\"jharvey@miboo.name\"},\n{\"id\":1939,\"first_name\":\"Howard\",\"last_name\":\"Andrews\",\"country\":\"Dominica\",\"ip_address\":\"221.236.69.122\",\"email\":\"handrews@plambee.info\"},\n{\"id\":1940,\"first_name\":\"Arthur\",\"last_name\":\"Ruiz\",\"country\":\"Botswana\",\"ip_address\":\"177.32.94.4\",\"email\":\"aruiz@realpoint.org\"},\n{\"id\":1941,\"first_name\":\"Carl\",\"last_name\":\"Morrison\",\"country\":\"Isle of Man\",\"ip_address\":\"111.0.234.203\",\"email\":\"cmorrison@riffpath.mil\"},\n{\"id\":1942,\"first_name\":\"Irene\",\"last_name\":\"Williamson\",\"country\":\"Philippines\",\"ip_address\":\"72.60.31.104\",\"email\":\"iwilliamson@trunyx.biz\"},\n{\"id\":1943,\"first_name\":\"Frank\",\"last_name\":\"Collins\",\"country\":\"Armenia\",\"ip_address\":\"54.80.168.238\",\"email\":\"fcollins@gabspot.edu\"},\n{\"id\":1944,\"first_name\":\"Philip\",\"last_name\":\"Allen\",\"country\":\"Ascension Island\",\"ip_address\":\"118.255.106.45\",\"email\":\"pallen@jaloo.org\"},\n{\"id\":1945,\"first_name\":\"Julia\",\"last_name\":\"Mason\",\"country\":\"Georgia\",\"ip_address\":\"169.12.23.223\",\"email\":\"jmason@jabbersphere.mil\"},\n{\"id\":1946,\"first_name\":\"Andrew\",\"last_name\":\"Ross\",\"country\":\"Isle of Man\",\"ip_address\":\"204.115.126.12\",\"email\":\"aross@thoughtsphere.org\"},\n{\"id\":1947,\"first_name\":\"Rose\",\"last_name\":\"Peterson\",\"country\":\"American Samoa\",\"ip_address\":\"77.154.163.3\",\"email\":\"rpeterson@edgewire.name\"},\n{\"id\":1948,\"first_name\":\"Lisa\",\"last_name\":\"Sanchez\",\"country\":\"Isle of Man\",\"ip_address\":\"101.171.33.120\",\"email\":\"lsanchez@leexo.gov\"},\n{\"id\":1949,\"first_name\":\"Ralph\",\"last_name\":\"Ross\",\"country\":\"Nigeria\",\"ip_address\":\"47.76.244.19\",\"email\":\"rross@quimba.org\"},\n{\"id\":1950,\"first_name\":\"Brandon\",\"last_name\":\"Jenkins\",\"country\":\"Antarctica\",\"ip_address\":\"66.53.205.218\",\"email\":\"bjenkins@tavu.mil\"},\n{\"id\":1951,\"first_name\":\"Brandon\",\"last_name\":\"Mcdonald\",\"country\":\"Cuba\",\"ip_address\":\"33.68.43.219\",\"email\":\"bmcdonald@topiczoom.biz\"},\n{\"id\":1952,\"first_name\":\"James\",\"last_name\":\"Webb\",\"country\":\"Bangladesh\",\"ip_address\":\"25.148.206.79\",\"email\":\"jwebb@avaveo.name\"},\n{\"id\":1953,\"first_name\":\"Brandon\",\"last_name\":\"Lynch\",\"country\":\"Guinea\",\"ip_address\":\"189.37.218.13\",\"email\":\"blynch@jetwire.info\"},\n{\"id\":1954,\"first_name\":\"David\",\"last_name\":\"Henry\",\"country\":\"Tanzania\",\"ip_address\":\"57.39.242.1\",\"email\":\"dhenry@realbuzz.net\"},\n{\"id\":1955,\"first_name\":\"Ashley\",\"last_name\":\"James\",\"country\":\"Niger\",\"ip_address\":\"186.8.25.126\",\"email\":\"ajames@cogibox.name\"},\n{\"id\":1956,\"first_name\":\"Brandon\",\"last_name\":\"Carr\",\"country\":\"Costa Rica\",\"ip_address\":\"224.89.115.204\",\"email\":\"bcarr@fadeo.name\"},\n{\"id\":1957,\"first_name\":\"Michael\",\"last_name\":\"Gardner\",\"country\":\"Ukraine\",\"ip_address\":\"185.123.211.225\",\"email\":\"mgardner@flipopia.net\"},\n{\"id\":1958,\"first_name\":\"Gloria\",\"last_name\":\"Adams\",\"country\":\"Namibia\",\"ip_address\":\"88.51.26.95\",\"email\":\"gadams@vinte.com\"},\n{\"id\":1959,\"first_name\":\"Bobby\",\"last_name\":\"Hunt\",\"country\":\"Zimbabwe\",\"ip_address\":\"159.21.103.230\",\"email\":\"bhunt@fliptune.info\"},\n{\"id\":1960,\"first_name\":\"Melissa\",\"last_name\":\"Payne\",\"country\":\"Philippines\",\"ip_address\":\"31.31.200.121\",\"email\":\"mpayne@trilith.net\"},\n{\"id\":1961,\"first_name\":\"Rachel\",\"last_name\":\"Hernandez\",\"country\":\"Indonesia\",\"ip_address\":\"151.119.1.25\",\"email\":\"rhernandez@tagtune.org\"},\n{\"id\":1962,\"first_name\":\"Jeffrey\",\"last_name\":\"Kim\",\"country\":\"Kuwait\",\"ip_address\":\"9.224.65.114\",\"email\":\"jkim@shufflebeat.edu\"},\n{\"id\":1963,\"first_name\":\"Willie\",\"last_name\":\"Armstrong\",\"country\":\"Comoros\",\"ip_address\":\"167.121.36.220\",\"email\":\"warmstrong@digitube.info\"},\n{\"id\":1964,\"first_name\":\"John\",\"last_name\":\"Chapman\",\"country\":\"Kuwait\",\"ip_address\":\"77.35.67.106\",\"email\":\"jchapman@yakidoo.org\"},\n{\"id\":1965,\"first_name\":\"Tammy\",\"last_name\":\"Walker\",\"country\":\"Dominican Republic\",\"ip_address\":\"37.123.187.126\",\"email\":\"twalker@livepath.name\"},\n{\"id\":1966,\"first_name\":\"Shirley\",\"last_name\":\"Flores\",\"country\":\"Cape Verde\",\"ip_address\":\"72.95.136.59\",\"email\":\"sflores@tagpad.name\"},\n{\"id\":1967,\"first_name\":\"Jose\",\"last_name\":\"Reynolds\",\"country\":\"Slovenia\",\"ip_address\":\"19.98.130.150\",\"email\":\"jreynolds@demizz.com\"},\n{\"id\":1968,\"first_name\":\"Robert\",\"last_name\":\"Alvarez\",\"country\":\"Qatar\",\"ip_address\":\"222.244.122.211\",\"email\":\"ralvarez@realbridge.info\"},\n{\"id\":1969,\"first_name\":\"Jacqueline\",\"last_name\":\"Wright\",\"country\":\"Honduras\",\"ip_address\":\"96.13.201.218\",\"email\":\"jwright@voonyx.net\"},\n{\"id\":1970,\"first_name\":\"Tina\",\"last_name\":\"Jenkins\",\"country\":\"Nigeria\",\"ip_address\":\"220.106.126.45\",\"email\":\"tjenkins@dynazzy.gov\"},\n{\"id\":1971,\"first_name\":\"Mildred\",\"last_name\":\"Gonzalez\",\"country\":\"Central African Republic\",\"ip_address\":\"27.87.218.248\",\"email\":\"mgonzalez@skynoodle.com\"},\n{\"id\":1972,\"first_name\":\"Matthew\",\"last_name\":\"Thompson\",\"country\":\"Iran\",\"ip_address\":\"8.16.201.143\",\"email\":\"mthompson@trudoo.biz\"},\n{\"id\":1973,\"first_name\":\"Jose\",\"last_name\":\"Price\",\"country\":\"Lithuania\",\"ip_address\":\"13.192.94.159\",\"email\":\"jprice@voolia.net\"},\n{\"id\":1974,\"first_name\":\"Harold\",\"last_name\":\"Franklin\",\"country\":\"Cameroon\",\"ip_address\":\"47.130.2.105\",\"email\":\"hfranklin@dabshots.org\"},\n{\"id\":1975,\"first_name\":\"Ruth\",\"last_name\":\"Davis\",\"country\":\"Niue\",\"ip_address\":\"70.43.91.173\",\"email\":\"rdavis@janyx.edu\"},\n{\"id\":1976,\"first_name\":\"Amanda\",\"last_name\":\"Coleman\",\"country\":\"Kenya\",\"ip_address\":\"8.132.165.228\",\"email\":\"acoleman@photobean.org\"},\n{\"id\":1977,\"first_name\":\"Billy\",\"last_name\":\"Tucker\",\"country\":\"Tokelau\",\"ip_address\":\"13.93.21.200\",\"email\":\"btucker@voonyx.name\"},\n{\"id\":1978,\"first_name\":\"Patrick\",\"last_name\":\"Hunt\",\"country\":\"Latvia\",\"ip_address\":\"28.12.70.253\",\"email\":\"phunt@thoughtbridge.gov\"},\n{\"id\":1979,\"first_name\":\"Chris\",\"last_name\":\"Perkins\",\"country\":\"Albania\",\"ip_address\":\"46.122.231.179\",\"email\":\"cperkins@meezzy.net\"},\n{\"id\":1980,\"first_name\":\"Benjamin\",\"last_name\":\"Cooper\",\"country\":\"Colombia\",\"ip_address\":\"175.155.68.104\",\"email\":\"bcooper@fanoodle.name\"},\n{\"id\":1981,\"first_name\":\"Bruce\",\"last_name\":\"Riley\",\"country\":\"Nepal\",\"ip_address\":\"29.176.117.5\",\"email\":\"briley@yoveo.gov\"},\n{\"id\":1982,\"first_name\":\"Barbara\",\"last_name\":\"West\",\"country\":\"San Marino\",\"ip_address\":\"115.245.238.2\",\"email\":\"bwest@zava.gov\"},\n{\"id\":1983,\"first_name\":\"Heather\",\"last_name\":\"Hudson\",\"country\":\"Andorra\",\"ip_address\":\"75.67.219.52\",\"email\":\"hhudson@mynte.net\"},\n{\"id\":1984,\"first_name\":\"Susan\",\"last_name\":\"Hart\",\"country\":\"Dominica\",\"ip_address\":\"195.230.245.119\",\"email\":\"shart@jetpulse.edu\"},\n{\"id\":1985,\"first_name\":\"Margaret\",\"last_name\":\"Day\",\"country\":\"Grenada\",\"ip_address\":\"167.253.22.51\",\"email\":\"mday@twiyo.name\"},\n{\"id\":1986,\"first_name\":\"Sean\",\"last_name\":\"Burke\",\"country\":\"Kenya\",\"ip_address\":\"244.216.222.157\",\"email\":\"sburke@twitterbridge.info\"},\n{\"id\":1987,\"first_name\":\"Nicole\",\"last_name\":\"Morris\",\"country\":\"Ethiopia\",\"ip_address\":\"133.205.19.44\",\"email\":\"nmorris@rhynyx.mil\"},\n{\"id\":1988,\"first_name\":\"Bobby\",\"last_name\":\"Castillo\",\"country\":\"Cuba\",\"ip_address\":\"109.82.151.10\",\"email\":\"bcastillo@youspan.gov\"},\n{\"id\":1989,\"first_name\":\"Stephen\",\"last_name\":\"Hayes\",\"country\":\"Palau\",\"ip_address\":\"57.139.114.221\",\"email\":\"shayes@devbug.org\"},\n{\"id\":1990,\"first_name\":\"Louis\",\"last_name\":\"Roberts\",\"country\":\"Switzerland\",\"ip_address\":\"89.119.189.131\",\"email\":\"lroberts@tagopia.biz\"},\n{\"id\":1991,\"first_name\":\"David\",\"last_name\":\"Butler\",\"country\":\"Botswana\",\"ip_address\":\"111.156.4.147\",\"email\":\"dbutler@yambee.edu\"},\n{\"id\":1992,\"first_name\":\"Martin\",\"last_name\":\"Cook\",\"country\":\"Bulgaria\",\"ip_address\":\"19.19.32.11\",\"email\":\"mcook@zoovu.com\"},\n{\"id\":1993,\"first_name\":\"Barbara\",\"last_name\":\"Fowler\",\"country\":\"Guernsey\",\"ip_address\":\"197.65.58.9\",\"email\":\"bfowler@linkbuzz.org\"},\n{\"id\":1994,\"first_name\":\"Todd\",\"last_name\":\"Vasquez\",\"country\":\"Falkland Islands (Malvinas)\",\"ip_address\":\"150.24.235.128\",\"email\":\"tvasquez@meejo.net\"},\n{\"id\":1995,\"first_name\":\"Melissa\",\"last_name\":\"Hunter\",\"country\":\"American Samoa\",\"ip_address\":\"87.159.4.73\",\"email\":\"mhunter@quatz.net\"},\n{\"id\":1996,\"first_name\":\"Carlos\",\"last_name\":\"Franklin\",\"country\":\"Macau\",\"ip_address\":\"6.136.9.84\",\"email\":\"cfranklin@twitterlist.gov\"},\n{\"id\":1997,\"first_name\":\"Maria\",\"last_name\":\"Mcdonald\",\"country\":\"Saudia Arabia\",\"ip_address\":\"109.199.160.90\",\"email\":\"mmcdonald@blogtags.com\"},\n{\"id\":1998,\"first_name\":\"Julia\",\"last_name\":\"Powell\",\"country\":\"Australia\",\"ip_address\":\"160.205.175.217\",\"email\":\"jpowell@youfeed.gov\"},\n{\"id\":1999,\"first_name\":\"Marilyn\",\"last_name\":\"Hunter\",\"country\":\"Tajikistan\",\"ip_address\":\"76.219.141.133\",\"email\":\"mhunter@meezzy.com\"},\n{\"id\":2000,\"first_name\":\"Steve\",\"last_name\":\"Alvarez\",\"country\":\"Marshall Islands\",\"ip_address\":\"82.205.94.182\",\"email\":\"salvarez@tekfly.com\"},\n{\"id\":2001,\"first_name\":\"Jean\",\"last_name\":\"Gomez\",\"country\":\"Peru\",\"ip_address\":\"93.74.163.86\",\"email\":\"jgomez@oodoo.mil\"},\n{\"id\":2002,\"first_name\":\"Frank\",\"last_name\":\"Lawrence\",\"country\":\"Maldives\",\"ip_address\":\"115.192.107.158\",\"email\":\"flawrence@youspan.com\"},\n{\"id\":2003,\"first_name\":\"Brandon\",\"last_name\":\"Sanders\",\"country\":\"Romania\",\"ip_address\":\"229.167.235.105\",\"email\":\"bsanders@skiptube.com\"},\n{\"id\":2004,\"first_name\":\"Joyce\",\"last_name\":\"Jacobs\",\"country\":\"Korea, South\",\"ip_address\":\"186.84.79.228\",\"email\":\"jjacobs@bluejam.mil\"},\n{\"id\":2005,\"first_name\":\"Randy\",\"last_name\":\"Lawson\",\"country\":\"Guinea-Bissau\",\"ip_address\":\"141.170.48.183\",\"email\":\"rlawson@dablist.mil\"},\n{\"id\":2006,\"first_name\":\"Keith\",\"last_name\":\"Wheeler\",\"country\":\"Burundi\",\"ip_address\":\"38.210.76.108\",\"email\":\"kwheeler@avamba.org\"},\n{\"id\":2007,\"first_name\":\"Gregory\",\"last_name\":\"Jordan\",\"country\":\"Bolivia\",\"ip_address\":\"70.96.81.100\",\"email\":\"gjordan@fivespan.org\"},\n{\"id\":2008,\"first_name\":\"Theresa\",\"last_name\":\"Moreno\",\"country\":\"Estonia\",\"ip_address\":\"129.151.194.209\",\"email\":\"tmoreno@rooxo.net\"},\n{\"id\":2009,\"first_name\":\"Adam\",\"last_name\":\"Larson\",\"country\":\"Dominica\",\"ip_address\":\"43.94.11.106\",\"email\":\"alarson@dabfeed.mil\"},\n{\"id\":2010,\"first_name\":\"Andrew\",\"last_name\":\"Vasquez\",\"country\":\"Comoros\",\"ip_address\":\"37.181.119.247\",\"email\":\"avasquez@jetpulse.org\"},\n{\"id\":2011,\"first_name\":\"Phyllis\",\"last_name\":\"Stephens\",\"country\":\"Niue\",\"ip_address\":\"73.6.191.6\",\"email\":\"pstephens@photobug.gov\"},\n{\"id\":2012,\"first_name\":\"Chris\",\"last_name\":\"Burton\",\"country\":\"Ethiopia\",\"ip_address\":\"218.7.193.126\",\"email\":\"cburton@rhynyx.com\"},\n{\"id\":2013,\"first_name\":\"Ryan\",\"last_name\":\"Harris\",\"country\":\"Saint Pierre and Miquelon\",\"ip_address\":\"16.21.158.195\",\"email\":\"rharris@browseblab.name\"},\n{\"id\":2014,\"first_name\":\"Matthew\",\"last_name\":\"Nelson\",\"country\":\"Serbia\",\"ip_address\":\"220.148.77.84\",\"email\":\"mnelson@trunyx.com\"},\n{\"id\":2015,\"first_name\":\"Michael\",\"last_name\":\"Wright\",\"country\":\"Suriname\",\"ip_address\":\"198.163.221.255\",\"email\":\"mwright@trupe.net\"},\n{\"id\":2016,\"first_name\":\"Tammy\",\"last_name\":\"Weaver\",\"country\":\"Yemen\",\"ip_address\":\"139.155.225.167\",\"email\":\"tweaver@livez.org\"},\n{\"id\":2017,\"first_name\":\"Judith\",\"last_name\":\"Ray\",\"country\":\"Myanmar\",\"ip_address\":\"67.248.148.230\",\"email\":\"jray@flashset.org\"},\n{\"id\":2018,\"first_name\":\"Harold\",\"last_name\":\"Weaver\",\"country\":\"Saint Kitts and Nevis\",\"ip_address\":\"234.172.22.7\",\"email\":\"hweaver@npath.org\"},\n{\"id\":2019,\"first_name\":\"Russell\",\"last_name\":\"Marshall\",\"country\":\"Cocos (Keeling) Island\",\"ip_address\":\"46.233.202.15\",\"email\":\"rmarshall@edgetag.info\"},\n{\"id\":2020,\"first_name\":\"Jesse\",\"last_name\":\"Harrison\",\"country\":\"Kuwait\",\"ip_address\":\"72.166.65.144\",\"email\":\"jharrison@oyondu.edu\"},\n{\"id\":2021,\"first_name\":\"Jane\",\"last_name\":\"Griffin\",\"country\":\"Iran\",\"ip_address\":\"37.203.229.245\",\"email\":\"jgriffin@gigashots.biz\"},\n{\"id\":2022,\"first_name\":\"Craig\",\"last_name\":\"Brown\",\"country\":\"Anguilla\",\"ip_address\":\"162.172.148.163\",\"email\":\"cbrown@yodo.gov\"},\n{\"id\":2023,\"first_name\":\"Louise\",\"last_name\":\"Powell\",\"country\":\"Cape Verde\",\"ip_address\":\"68.159.174.104\",\"email\":\"lpowell@agivu.net\"},\n{\"id\":2024,\"first_name\":\"Susan\",\"last_name\":\"Weaver\",\"country\":\"Cape Verde\",\"ip_address\":\"3.229.228.149\",\"email\":\"sweaver@abata.mil\"},\n{\"id\":2025,\"first_name\":\"Paula\",\"last_name\":\"Cole\",\"country\":\"Burundi\",\"ip_address\":\"190.244.210.255\",\"email\":\"pcole@buzzbean.net\"},\n{\"id\":2026,\"first_name\":\"Ruby\",\"last_name\":\"Martinez\",\"country\":\"Ethiopia\",\"ip_address\":\"92.106.197.217\",\"email\":\"rmartinez@bluejam.gov\"},\n{\"id\":2027,\"first_name\":\"Robert\",\"last_name\":\"Fields\",\"country\":\"Montenegro\",\"ip_address\":\"86.38.142.113\",\"email\":\"rfields@rhybox.org\"},\n{\"id\":2028,\"first_name\":\"Katherine\",\"last_name\":\"Ward\",\"country\":\"Paraguay\",\"ip_address\":\"127.81.224.3\",\"email\":\"kward@realfire.name\"},\n{\"id\":2029,\"first_name\":\"John\",\"last_name\":\"Simmons\",\"country\":\"Rwanda\",\"ip_address\":\"76.67.69.191\",\"email\":\"jsimmons@yodel.biz\"},\n{\"id\":2030,\"first_name\":\"Maria\",\"last_name\":\"Coleman\",\"country\":\"Ghana\",\"ip_address\":\"150.69.3.171\",\"email\":\"mcoleman@zoozzy.gov\"},\n{\"id\":2031,\"first_name\":\"Roger\",\"last_name\":\"Matthews\",\"country\":\"Guatemala\",\"ip_address\":\"198.243.34.95\",\"email\":\"rmatthews@jayo.com\"},\n{\"id\":2032,\"first_name\":\"Beverly\",\"last_name\":\"Stevens\",\"country\":\"United Kingdom\",\"ip_address\":\"178.65.209.212\",\"email\":\"bstevens@realpoint.gov\"},\n{\"id\":2033,\"first_name\":\"Joseph\",\"last_name\":\"Cunningham\",\"country\":\"Qatar\",\"ip_address\":\"159.155.177.242\",\"email\":\"jcunningham@fliptune.biz\"},\n{\"id\":2034,\"first_name\":\"Paul\",\"last_name\":\"Austin\",\"country\":\"Indonesia\",\"ip_address\":\"98.5.173.54\",\"email\":\"paustin@youspan.name\"},\n{\"id\":2035,\"first_name\":\"Alan\",\"last_name\":\"Bennett\",\"country\":\"Uganda\",\"ip_address\":\"185.218.226.34\",\"email\":\"abennett@agimba.com\"},\n{\"id\":2036,\"first_name\":\"George\",\"last_name\":\"Vasquez\",\"country\":\"Isle of Man\",\"ip_address\":\"9.148.232.180\",\"email\":\"gvasquez@bubbletube.com\"},\n{\"id\":2037,\"first_name\":\"Arthur\",\"last_name\":\"Fowler\",\"country\":\"Cocos (Keeling) Island\",\"ip_address\":\"161.214.167.225\",\"email\":\"afowler@vimbo.info\"},\n{\"id\":2038,\"first_name\":\"Wanda\",\"last_name\":\"Montgomery\",\"country\":\"Tajikistan\",\"ip_address\":\"46.57.251.211\",\"email\":\"wmontgomery@yombu.name\"},\n{\"id\":2039,\"first_name\":\"Jane\",\"last_name\":\"Young\",\"country\":\"Heard and McDonald Islands\",\"ip_address\":\"219.245.156.127\",\"email\":\"jyoung@wordpedia.biz\"},\n{\"id\":2040,\"first_name\":\"Gerald\",\"last_name\":\"Marshall\",\"country\":\"Kazakhstan\",\"ip_address\":\"233.122.65.20\",\"email\":\"gmarshall@divanoodle.com\"},\n{\"id\":2041,\"first_name\":\"Eugene\",\"last_name\":\"Willis\",\"country\":\"Armenia\",\"ip_address\":\"15.23.174.28\",\"email\":\"ewillis@meevee.edu\"},\n{\"id\":2042,\"first_name\":\"Mark\",\"last_name\":\"Wells\",\"country\":\"Ecuador\",\"ip_address\":\"126.199.137.69\",\"email\":\"mwells@gabspot.name\"},\n{\"id\":2043,\"first_name\":\"Ernest\",\"last_name\":\"Griffin\",\"country\":\"Egypt\",\"ip_address\":\"89.251.168.96\",\"email\":\"egriffin@roomm.net\"},\n{\"id\":2044,\"first_name\":\"Betty\",\"last_name\":\"Cunningham\",\"country\":\"Hungary\",\"ip_address\":\"137.91.148.81\",\"email\":\"bcunningham@jatri.gov\"},\n{\"id\":2045,\"first_name\":\"Samuel\",\"last_name\":\"Perry\",\"country\":\"Cuba\",\"ip_address\":\"73.137.80.226\",\"email\":\"sperry@jayo.name\"},\n{\"id\":2046,\"first_name\":\"Diana\",\"last_name\":\"Arnold\",\"country\":\"Indonesia\",\"ip_address\":\"89.21.123.234\",\"email\":\"darnold@oyope.net\"},\n{\"id\":2047,\"first_name\":\"Ashley\",\"last_name\":\"Hall\",\"country\":\"Lesotho\",\"ip_address\":\"244.210.191.63\",\"email\":\"ahall@skyba.info\"},\n{\"id\":2048,\"first_name\":\"Lori\",\"last_name\":\"Powell\",\"country\":\"Brazil\",\"ip_address\":\"64.163.65.230\",\"email\":\"lpowell@wordpedia.gov\"},\n{\"id\":2049,\"first_name\":\"Victor\",\"last_name\":\"Hughes\",\"country\":\"Antigua and Barbuda\",\"ip_address\":\"143.162.175.129\",\"email\":\"vhughes@twitterbridge.com\"},\n{\"id\":2050,\"first_name\":\"Billy\",\"last_name\":\"Turner\",\"country\":\"Estonia\",\"ip_address\":\"80.38.44.124\",\"email\":\"bturner@oozz.info\"},\n{\"id\":2051,\"first_name\":\"Diane\",\"last_name\":\"Gilbert\",\"country\":\"France\",\"ip_address\":\"97.137.89.216\",\"email\":\"dgilbert@yakidoo.name\"},\n{\"id\":2052,\"first_name\":\"Bobby\",\"last_name\":\"Robertson\",\"country\":\"Equatorial Guinea\",\"ip_address\":\"197.198.95.108\",\"email\":\"brobertson@katz.edu\"},\n{\"id\":2053,\"first_name\":\"Brenda\",\"last_name\":\"Payne\",\"country\":\"Argentina\",\"ip_address\":\"43.202.37.45\",\"email\":\"bpayne@flipbug.info\"},\n{\"id\":2054,\"first_name\":\"Arthur\",\"last_name\":\"Garza\",\"country\":\"Saint Pierre and Miquelon\",\"ip_address\":\"136.95.37.222\",\"email\":\"agarza@ainyx.mil\"},\n{\"id\":2055,\"first_name\":\"Annie\",\"last_name\":\"Taylor\",\"country\":\"Australia\",\"ip_address\":\"222.214.72.8\",\"email\":\"ataylor@avavee.org\"},\n{\"id\":2056,\"first_name\":\"Alice\",\"last_name\":\"Payne\",\"country\":\"Greenland\",\"ip_address\":\"182.107.227.223\",\"email\":\"apayne@twiyo.org\"},\n{\"id\":2057,\"first_name\":\"Chris\",\"last_name\":\"Miller\",\"country\":\"Pitcairn Island\",\"ip_address\":\"24.249.16.7\",\"email\":\"cmiller@youopia.name\"},\n{\"id\":2058,\"first_name\":\"Alan\",\"last_name\":\"Ryan\",\"country\":\"Reunion\",\"ip_address\":\"117.240.213.54\",\"email\":\"aryan@dynava.biz\"},\n{\"id\":2059,\"first_name\":\"Carlos\",\"last_name\":\"Thompson\",\"country\":\"Gambia\",\"ip_address\":\"99.8.246.154\",\"email\":\"cthompson@edgewire.info\"},\n{\"id\":2060,\"first_name\":\"Theresa\",\"last_name\":\"Greene\",\"country\":\"Botswana\",\"ip_address\":\"210.44.142.6\",\"email\":\"tgreene@bubblemix.com\"},\n{\"id\":2061,\"first_name\":\"Gerald\",\"last_name\":\"Burke\",\"country\":\"New Zealand\",\"ip_address\":\"60.9.57.16\",\"email\":\"gburke@topicblab.net\"},\n{\"id\":2062,\"first_name\":\"Denise\",\"last_name\":\"Perkins\",\"country\":\"Denmark\",\"ip_address\":\"185.22.195.191\",\"email\":\"dperkins@flipbug.edu\"},\n{\"id\":2063,\"first_name\":\"Gloria\",\"last_name\":\"Dunn\",\"country\":\"Switzerland\",\"ip_address\":\"215.106.31.104\",\"email\":\"gdunn@agivu.gov\"},\n{\"id\":2064,\"first_name\":\"Heather\",\"last_name\":\"Alexander\",\"country\":\"Syria\",\"ip_address\":\"201.9.226.102\",\"email\":\"halexander@myworks.mil\"},\n{\"id\":2065,\"first_name\":\"Kathryn\",\"last_name\":\"Gonzalez\",\"country\":\"Tajikistan\",\"ip_address\":\"182.165.53.248\",\"email\":\"kgonzalez@youtags.info\"},\n{\"id\":2066,\"first_name\":\"Richard\",\"last_name\":\"Schmidt\",\"country\":\"Denmark\",\"ip_address\":\"96.188.86.126\",\"email\":\"rschmidt@zoomzone.mil\"},\n{\"id\":2067,\"first_name\":\"Diane\",\"last_name\":\"Stevens\",\"country\":\"Gibraltar\",\"ip_address\":\"54.165.90.56\",\"email\":\"dstevens@skipstorm.biz\"},\n{\"id\":2068,\"first_name\":\"Jean\",\"last_name\":\"Russell\",\"country\":\"Malawi\",\"ip_address\":\"126.181.99.139\",\"email\":\"jrussell@roodel.org\"},\n{\"id\":2069,\"first_name\":\"Jeremy\",\"last_name\":\"Crawford\",\"country\":\"Laos\",\"ip_address\":\"241.251.85.75\",\"email\":\"jcrawford@skiba.info\"},\n{\"id\":2070,\"first_name\":\"Elizabeth\",\"last_name\":\"Mccoy\",\"country\":\"Russia\",\"ip_address\":\"88.63.58.10\",\"email\":\"emccoy@topicware.org\"},\n{\"id\":2071,\"first_name\":\"Earl\",\"last_name\":\"Hayes\",\"country\":\"Solomon Islands\",\"ip_address\":\"123.25.153.94\",\"email\":\"ehayes@yambee.edu\"},\n{\"id\":2072,\"first_name\":\"Jeremy\",\"last_name\":\"Riley\",\"country\":\"Palestinian Territory, Occupied\",\"ip_address\":\"73.224.217.243\",\"email\":\"jriley@skinder.info\"},\n{\"id\":2073,\"first_name\":\"Anne\",\"last_name\":\"Nichols\",\"country\":\"Puerto Rico\",\"ip_address\":\"167.29.82.0\",\"email\":\"anichols@brightdog.net\"},\n{\"id\":2074,\"first_name\":\"Stephanie\",\"last_name\":\"Wheeler\",\"country\":\"Equatorial Guinea\",\"ip_address\":\"158.32.148.249\",\"email\":\"swheeler@linkbridge.mil\"},\n{\"id\":2075,\"first_name\":\"Patricia\",\"last_name\":\"Dunn\",\"country\":\"Palau\",\"ip_address\":\"172.188.130.132\",\"email\":\"pdunn@dabshots.mil\"},\n{\"id\":2076,\"first_name\":\"Irene\",\"last_name\":\"Stephens\",\"country\":\"Egypt\",\"ip_address\":\"174.57.227.101\",\"email\":\"istephens@avamm.biz\"},\n{\"id\":2077,\"first_name\":\"Anthony\",\"last_name\":\"Ray\",\"country\":\"Denmark\",\"ip_address\":\"167.169.184.144\",\"email\":\"aray@brightdog.com\"},\n{\"id\":2078,\"first_name\":\"Larry\",\"last_name\":\"Brooks\",\"country\":\"Saint Barthelemy\",\"ip_address\":\"38.4.233.28\",\"email\":\"lbrooks@bubbletube.biz\"},\n{\"id\":2079,\"first_name\":\"Brandon\",\"last_name\":\"Carter\",\"country\":\"Pitcairn Island\",\"ip_address\":\"190.39.5.4\",\"email\":\"bcarter@skajo.edu\"},\n{\"id\":2080,\"first_name\":\"Carolyn\",\"last_name\":\"Harris\",\"country\":\"Uruguay\",\"ip_address\":\"24.15.241.88\",\"email\":\"charris@tazz.org\"},\n{\"id\":2081,\"first_name\":\"Kenneth\",\"last_name\":\"Dixon\",\"country\":\"Colombia\",\"ip_address\":\"147.244.224.44\",\"email\":\"kdixon@dabshots.info\"},\n{\"id\":2082,\"first_name\":\"John\",\"last_name\":\"Cook\",\"country\":\"Philippines\",\"ip_address\":\"122.11.218.132\",\"email\":\"jcook@jabberstorm.name\"},\n{\"id\":2083,\"first_name\":\"Charles\",\"last_name\":\"Chapman\",\"country\":\"Canada\",\"ip_address\":\"222.74.62.248\",\"email\":\"cchapman@buzzster.name\"},\n{\"id\":2084,\"first_name\":\"Patrick\",\"last_name\":\"Jordan\",\"country\":\"Tuvalu\",\"ip_address\":\"152.171.251.194\",\"email\":\"pjordan@innotype.net\"},\n{\"id\":2085,\"first_name\":\"Jacqueline\",\"last_name\":\"Wright\",\"country\":\"Iraq\",\"ip_address\":\"21.144.30.12\",\"email\":\"jwright@tagchat.gov\"},\n{\"id\":2086,\"first_name\":\"Samuel\",\"last_name\":\"Perkins\",\"country\":\"Palestinian Territory, Occupied\",\"ip_address\":\"232.185.249.97\",\"email\":\"sperkins@wordpedia.com\"},\n{\"id\":2087,\"first_name\":\"Nicholas\",\"last_name\":\"Mitchell\",\"country\":\"Hungary\",\"ip_address\":\"6.216.166.249\",\"email\":\"nmitchell@realpoint.gov\"},\n{\"id\":2088,\"first_name\":\"Wanda\",\"last_name\":\"Schmidt\",\"country\":\"Mozambique\",\"ip_address\":\"233.123.60.98\",\"email\":\"wschmidt@youopia.org\"},\n{\"id\":2089,\"first_name\":\"Deborah\",\"last_name\":\"Cole\",\"country\":\"Bosnia and Herzegovina\",\"ip_address\":\"63.161.226.243\",\"email\":\"dcole@tagopia.biz\"},\n{\"id\":2090,\"first_name\":\"Todd\",\"last_name\":\"Peters\",\"country\":\"New Zealand\",\"ip_address\":\"152.97.220.64\",\"email\":\"tpeters@thoughtworks.info\"},\n{\"id\":2091,\"first_name\":\"Brandon\",\"last_name\":\"Palmer\",\"country\":\"Netherlands\",\"ip_address\":\"252.107.92.153\",\"email\":\"bpalmer@buzzster.mil\"},\n{\"id\":2092,\"first_name\":\"Timothy\",\"last_name\":\"Dean\",\"country\":\"\\u00c5land\",\"ip_address\":\"204.80.255.191\",\"email\":\"tdean@blogtag.net\"},\n{\"id\":2093,\"first_name\":\"Nancy\",\"last_name\":\"Martin\",\"country\":\"Nauru\",\"ip_address\":\"30.180.104.224\",\"email\":\"nmartin@ailane.name\"},\n{\"id\":2094,\"first_name\":\"Gary\",\"last_name\":\"Perez\",\"country\":\"Saint Helena\",\"ip_address\":\"160.136.130.179\",\"email\":\"gperez@jaxbean.name\"},\n{\"id\":2095,\"first_name\":\"Johnny\",\"last_name\":\"Franklin\",\"country\":\"Montserrat\",\"ip_address\":\"91.36.229.29\",\"email\":\"jfranklin@gigabox.gov\"},\n{\"id\":2096,\"first_name\":\"Aaron\",\"last_name\":\"Andrews\",\"country\":\"Solomon Islands\",\"ip_address\":\"63.33.178.117\",\"email\":\"aandrews@plambee.mil\"},\n{\"id\":2097,\"first_name\":\"Theresa\",\"last_name\":\"Cunningham\",\"country\":\"Bahamas\",\"ip_address\":\"26.48.150.176\",\"email\":\"tcunningham@twitterbeat.com\"},\n{\"id\":2098,\"first_name\":\"Ashley\",\"last_name\":\"Allen\",\"country\":\"Marshall Islands\",\"ip_address\":\"123.30.89.114\",\"email\":\"aallen@brainsphere.com\"},\n{\"id\":2099,\"first_name\":\"Beverly\",\"last_name\":\"Mills\",\"country\":\"USSR\",\"ip_address\":\"33.238.58.246\",\"email\":\"bmills@dynazzy.gov\"},\n{\"id\":2100,\"first_name\":\"Heather\",\"last_name\":\"Cooper\",\"country\":\"Zambia\",\"ip_address\":\"56.181.109.154\",\"email\":\"hcooper@yakitri.biz\"},\n{\"id\":2101,\"first_name\":\"Julia\",\"last_name\":\"Palmer\",\"country\":\"Marshall Islands\",\"ip_address\":\"101.73.1.255\",\"email\":\"jpalmer@twitterbridge.com\"},\n{\"id\":2102,\"first_name\":\"Carl\",\"last_name\":\"Palmer\",\"country\":\"San Marino\",\"ip_address\":\"41.97.44.43\",\"email\":\"cpalmer@meevee.com\"},\n{\"id\":2103,\"first_name\":\"Rebecca\",\"last_name\":\"Cox\",\"country\":\"Armenia\",\"ip_address\":\"39.59.41.108\",\"email\":\"rcox@skilith.name\"},\n{\"id\":2104,\"first_name\":\"Karen\",\"last_name\":\"Ramos\",\"country\":\"Sierra Leone\",\"ip_address\":\"153.117.39.174\",\"email\":\"kramos@voonder.mil\"},\n{\"id\":2105,\"first_name\":\"Carolyn\",\"last_name\":\"Banks\",\"country\":\"Sao Tome and Principe\",\"ip_address\":\"51.209.230.16\",\"email\":\"cbanks@yodel.name\"},\n{\"id\":2106,\"first_name\":\"Lori\",\"last_name\":\"Berry\",\"country\":\"Sao Tome and Principe\",\"ip_address\":\"248.96.106.188\",\"email\":\"lberry@minyx.edu\"},\n{\"id\":2107,\"first_name\":\"Ralph\",\"last_name\":\"Porter\",\"country\":\"Mongolia\",\"ip_address\":\"177.88.207.104\",\"email\":\"rporter@bluezoom.mil\"},\n{\"id\":2108,\"first_name\":\"Richard\",\"last_name\":\"Rivera\",\"country\":\"Spain\",\"ip_address\":\"219.240.123.185\",\"email\":\"rrivera@pixonyx.com\"},\n{\"id\":2109,\"first_name\":\"Christine\",\"last_name\":\"Day\",\"country\":\"Kazakhstan\",\"ip_address\":\"192.232.18.147\",\"email\":\"cday@rhyloo.gov\"},\n{\"id\":2110,\"first_name\":\"Philip\",\"last_name\":\"Fox\",\"country\":\"Zimbabwe\",\"ip_address\":\"36.28.207.75\",\"email\":\"pfox@yakijo.net\"},\n{\"id\":2111,\"first_name\":\"Larry\",\"last_name\":\"Garcia\",\"country\":\"Peru\",\"ip_address\":\"31.181.184.205\",\"email\":\"lgarcia@flipstorm.gov\"},\n{\"id\":2112,\"first_name\":\"Anne\",\"last_name\":\"Taylor\",\"country\":\"Serbia\",\"ip_address\":\"233.117.47.6\",\"email\":\"ataylor@thoughtbeat.com\"},\n{\"id\":2113,\"first_name\":\"Bruce\",\"last_name\":\"Harrison\",\"country\":\"Togo\",\"ip_address\":\"252.194.189.228\",\"email\":\"bharrison@twitterworks.org\"},\n{\"id\":2114,\"first_name\":\"Ann\",\"last_name\":\"Gonzales\",\"country\":\"Iran\",\"ip_address\":\"99.74.199.95\",\"email\":\"agonzales@jabbertype.gov\"},\n{\"id\":2115,\"first_name\":\"Alan\",\"last_name\":\"Patterson\",\"country\":\"Wallis and Futuna Islands\",\"ip_address\":\"84.241.171.150\",\"email\":\"apatterson@tagfeed.biz\"},\n{\"id\":2116,\"first_name\":\"Gerald\",\"last_name\":\"Murphy\",\"country\":\"France\",\"ip_address\":\"149.80.253.222\",\"email\":\"gmurphy@skivee.net\"},\n{\"id\":2117,\"first_name\":\"Rose\",\"last_name\":\"Barnes\",\"country\":\"Mauritania\",\"ip_address\":\"87.16.49.86\",\"email\":\"rbarnes@layo.org\"},\n{\"id\":2118,\"first_name\":\"Joshua\",\"last_name\":\"Dixon\",\"country\":\"Albania\",\"ip_address\":\"33.243.139.139\",\"email\":\"jdixon@topicware.name\"},\n{\"id\":2119,\"first_name\":\"Theresa\",\"last_name\":\"Robertson\",\"country\":\"Solomon Islands\",\"ip_address\":\"149.60.163.82\",\"email\":\"trobertson@topicblab.net\"},\n{\"id\":2120,\"first_name\":\"Sean\",\"last_name\":\"West\",\"country\":\"Antigua and Barbuda\",\"ip_address\":\"72.116.221.240\",\"email\":\"swest@cogidoo.edu\"},\n{\"id\":2121,\"first_name\":\"Alan\",\"last_name\":\"Wells\",\"country\":\"Gabon\",\"ip_address\":\"197.145.117.56\",\"email\":\"awells@devify.biz\"},\n{\"id\":2122,\"first_name\":\"Lawrence\",\"last_name\":\"Hamilton\",\"country\":\"Spain\",\"ip_address\":\"101.160.59.1\",\"email\":\"lhamilton@kwimbee.org\"},\n{\"id\":2123,\"first_name\":\"Wanda\",\"last_name\":\"Lane\",\"country\":\"Northern Mariana Islands\",\"ip_address\":\"147.158.27.197\",\"email\":\"wlane@yoveo.org\"},\n{\"id\":2124,\"first_name\":\"Lois\",\"last_name\":\"Torres\",\"country\":\"Gambia\",\"ip_address\":\"40.6.88.69\",\"email\":\"ltorres@livetube.com\"},\n{\"id\":2125,\"first_name\":\"Lois\",\"last_name\":\"Cruz\",\"country\":\"Cuba\",\"ip_address\":\"135.146.243.92\",\"email\":\"lcruz@twimm.info\"},\n{\"id\":2126,\"first_name\":\"Cynthia\",\"last_name\":\"Harvey\",\"country\":\"Iraq\",\"ip_address\":\"159.102.130.93\",\"email\":\"charvey@kwimbee.info\"},\n{\"id\":2127,\"first_name\":\"Linda\",\"last_name\":\"Payne\",\"country\":\"Tunisia\",\"ip_address\":\"142.115.102.104\",\"email\":\"lpayne@linktype.name\"},\n{\"id\":2128,\"first_name\":\"Janice\",\"last_name\":\"Stevens\",\"country\":\"Albania\",\"ip_address\":\"224.148.124.178\",\"email\":\"jstevens@mynte.org\"},\n{\"id\":2129,\"first_name\":\"Betty\",\"last_name\":\"Dixon\",\"country\":\"Bhutan\",\"ip_address\":\"134.135.225.230\",\"email\":\"bdixon@innoz.biz\"},\n{\"id\":2130,\"first_name\":\"Joan\",\"last_name\":\"Ferguson\",\"country\":\"French Guiana\",\"ip_address\":\"231.18.181.187\",\"email\":\"jferguson@katz.name\"},\n{\"id\":2131,\"first_name\":\"Julie\",\"last_name\":\"Griffin\",\"country\":\"Armenia\",\"ip_address\":\"34.183.241.200\",\"email\":\"jgriffin@vinte.com\"},\n{\"id\":2132,\"first_name\":\"Melissa\",\"last_name\":\"Simmons\",\"country\":\"Mauritius\",\"ip_address\":\"72.194.214.232\",\"email\":\"msimmons@omba.edu\"},\n{\"id\":2133,\"first_name\":\"Patrick\",\"last_name\":\"Reid\",\"country\":\"US Minor Outlying Islands\",\"ip_address\":\"229.36.90.210\",\"email\":\"preid@vidoo.mil\"},\n{\"id\":2134,\"first_name\":\"Frank\",\"last_name\":\"Rogers\",\"country\":\"Saint Helena\",\"ip_address\":\"109.205.130.173\",\"email\":\"frogers@yodel.name\"},\n{\"id\":2135,\"first_name\":\"Angela\",\"last_name\":\"Moore\",\"country\":\"New Caledonia\",\"ip_address\":\"184.189.111.146\",\"email\":\"amoore@tagpad.edu\"},\n{\"id\":2136,\"first_name\":\"Gloria\",\"last_name\":\"Long\",\"country\":\"Brunei Darussalam\",\"ip_address\":\"235.2.223.160\",\"email\":\"glong@camido.com\"},\n{\"id\":2137,\"first_name\":\"Jane\",\"last_name\":\"Diaz\",\"country\":\"Costa Rica\",\"ip_address\":\"251.46.125.148\",\"email\":\"jdiaz@gabvine.edu\"},\n{\"id\":2138,\"first_name\":\"Jennifer\",\"last_name\":\"Boyd\",\"country\":\"Netherlands\",\"ip_address\":\"177.162.194.60\",\"email\":\"jboyd@meezzy.name\"},\n{\"id\":2139,\"first_name\":\"Walter\",\"last_name\":\"Stephens\",\"country\":\"Morocco\",\"ip_address\":\"59.239.211.28\",\"email\":\"wstephens@skipfire.mil\"},\n{\"id\":2140,\"first_name\":\"Lillian\",\"last_name\":\"Brown\",\"country\":\"Monaco\",\"ip_address\":\"78.91.37.236\",\"email\":\"lbrown@brainsphere.com\"},\n{\"id\":2141,\"first_name\":\"William\",\"last_name\":\"Price\",\"country\":\"Macedonia\",\"ip_address\":\"208.73.139.120\",\"email\":\"wprice@ainyx.gov\"},\n{\"id\":2142,\"first_name\":\"Janice\",\"last_name\":\"Garcia\",\"country\":\"Heard and McDonald Islands\",\"ip_address\":\"85.226.219.157\",\"email\":\"jgarcia@avaveo.biz\"},\n{\"id\":2143,\"first_name\":\"Keith\",\"last_name\":\"Berry\",\"country\":\"Maldives\",\"ip_address\":\"206.14.129.103\",\"email\":\"kberry@twiyo.edu\"},\n{\"id\":2144,\"first_name\":\"Adam\",\"last_name\":\"Price\",\"country\":\"Ecuador\",\"ip_address\":\"155.144.116.64\",\"email\":\"aprice@jaloo.info\"},\n{\"id\":2145,\"first_name\":\"Larry\",\"last_name\":\"Snyder\",\"country\":\"Bosnia and Herzegovina\",\"ip_address\":\"86.206.69.105\",\"email\":\"lsnyder@centizu.org\"},\n{\"id\":2146,\"first_name\":\"Benjamin\",\"last_name\":\"Snyder\",\"country\":\"Svalbard and Jan Mayen Islands\",\"ip_address\":\"19.14.238.251\",\"email\":\"bsnyder@wikizz.com\"},\n{\"id\":2147,\"first_name\":\"Antonio\",\"last_name\":\"Martin\",\"country\":\"Martinique\",\"ip_address\":\"123.196.203.79\",\"email\":\"amartin@skidoo.name\"},\n{\"id\":2148,\"first_name\":\"Jack\",\"last_name\":\"Roberts\",\"country\":\"Azerbaijan\",\"ip_address\":\"193.88.115.230\",\"email\":\"jroberts@realcube.name\"},\n{\"id\":2149,\"first_name\":\"Pamela\",\"last_name\":\"Carter\",\"country\":\"Aruba\",\"ip_address\":\"211.184.230.157\",\"email\":\"pcarter@abatz.edu\"},\n{\"id\":2150,\"first_name\":\"Gary\",\"last_name\":\"Morgan\",\"country\":\"Nepal\",\"ip_address\":\"127.198.48.161\",\"email\":\"gmorgan@mybuzz.com\"},\n{\"id\":2151,\"first_name\":\"Ann\",\"last_name\":\"Shaw\",\"country\":\"Cote d'Ivoire\",\"ip_address\":\"171.167.225.143\",\"email\":\"ashaw@tavu.gov\"},\n{\"id\":2152,\"first_name\":\"Pamela\",\"last_name\":\"Alvarez\",\"country\":\"Botswana\",\"ip_address\":\"156.124.180.253\",\"email\":\"palvarez@myworks.info\"},\n{\"id\":2153,\"first_name\":\"Joyce\",\"last_name\":\"Fowler\",\"country\":\"New Zealand\",\"ip_address\":\"248.205.169.82\",\"email\":\"jfowler@skimia.com\"},\n{\"id\":2154,\"first_name\":\"Christina\",\"last_name\":\"Howard\",\"country\":\"Greece\",\"ip_address\":\"3.91.163.199\",\"email\":\"choward@skilith.com\"},\n{\"id\":2155,\"first_name\":\"Roy\",\"last_name\":\"Duncan\",\"country\":\"Somalia\",\"ip_address\":\"29.13.25.101\",\"email\":\"rduncan@voonder.mil\"},\n{\"id\":2156,\"first_name\":\"Frank\",\"last_name\":\"Gordon\",\"country\":\"Burundi\",\"ip_address\":\"157.212.231.64\",\"email\":\"fgordon@buzzster.biz\"},\n{\"id\":2157,\"first_name\":\"Adam\",\"last_name\":\"Webb\",\"country\":\"Fiji\",\"ip_address\":\"153.231.48.19\",\"email\":\"awebb@fatz.org\"},\n{\"id\":2158,\"first_name\":\"Diana\",\"last_name\":\"Stevens\",\"country\":\"Sweden\",\"ip_address\":\"241.118.158.128\",\"email\":\"dstevens@dabtype.biz\"},\n{\"id\":2159,\"first_name\":\"Sara\",\"last_name\":\"Arnold\",\"country\":\"Kuwait\",\"ip_address\":\"11.11.241.238\",\"email\":\"sarnold@buzzster.name\"},\n{\"id\":2160,\"first_name\":\"Paul\",\"last_name\":\"Powell\",\"country\":\"Mali\",\"ip_address\":\"107.94.97.10\",\"email\":\"ppowell@skipstorm.gov\"},\n{\"id\":2161,\"first_name\":\"Richard\",\"last_name\":\"Chapman\",\"country\":\"Ghana\",\"ip_address\":\"76.76.185.110\",\"email\":\"rchapman@roomm.info\"},\n{\"id\":2162,\"first_name\":\"Brian\",\"last_name\":\"Thompson\",\"country\":\"Niger\",\"ip_address\":\"186.91.143.27\",\"email\":\"bthompson@yambee.mil\"},\n{\"id\":2163,\"first_name\":\"Paul\",\"last_name\":\"Mitchell\",\"country\":\"Guinea\",\"ip_address\":\"73.144.89.44\",\"email\":\"pmitchell@realfire.biz\"},\n{\"id\":2164,\"first_name\":\"William\",\"last_name\":\"Lynch\",\"country\":\"Greenland\",\"ip_address\":\"185.217.219.91\",\"email\":\"wlynch@centidel.org\"},\n{\"id\":2165,\"first_name\":\"Marie\",\"last_name\":\"Cruz\",\"country\":\"Uruguay\",\"ip_address\":\"248.47.148.9\",\"email\":\"mcruz@brainbox.biz\"},\n{\"id\":2166,\"first_name\":\"Keith\",\"last_name\":\"Roberts\",\"country\":\"Eritrea\",\"ip_address\":\"34.186.156.244\",\"email\":\"kroberts@tavu.biz\"},\n{\"id\":2167,\"first_name\":\"David\",\"last_name\":\"Carr\",\"country\":\"Czech Republic\",\"ip_address\":\"84.61.76.103\",\"email\":\"dcarr@skinder.mil\"},\n{\"id\":2168,\"first_name\":\"Larry\",\"last_name\":\"Marshall\",\"country\":\"Central African Republic\",\"ip_address\":\"35.238.207.12\",\"email\":\"lmarshall@latz.com\"},\n{\"id\":2169,\"first_name\":\"Norma\",\"last_name\":\"Parker\",\"country\":\"Lesotho\",\"ip_address\":\"176.132.45.41\",\"email\":\"nparker@jumpxs.org\"},\n{\"id\":2170,\"first_name\":\"Scott\",\"last_name\":\"Garza\",\"country\":\"Palestinian Territory, Occupied\",\"ip_address\":\"52.43.225.29\",\"email\":\"sgarza@riffpedia.biz\"},\n{\"id\":2171,\"first_name\":\"Annie\",\"last_name\":\"Meyer\",\"country\":\"Cayman Islands\",\"ip_address\":\"231.85.232.69\",\"email\":\"ameyer@voomm.com\"},\n{\"id\":2172,\"first_name\":\"Kathy\",\"last_name\":\"Hudson\",\"country\":\"French Guiana\",\"ip_address\":\"198.224.14.4\",\"email\":\"khudson@yadel.info\"},\n{\"id\":2173,\"first_name\":\"Kevin\",\"last_name\":\"Matthews\",\"country\":\"Singapore\",\"ip_address\":\"67.102.167.96\",\"email\":\"kmatthews@yozio.mil\"},\n{\"id\":2174,\"first_name\":\"Jimmy\",\"last_name\":\"Larson\",\"country\":\"Suriname\",\"ip_address\":\"183.255.196.6\",\"email\":\"jlarson@topiczoom.info\"},\n{\"id\":2175,\"first_name\":\"Patricia\",\"last_name\":\"Alexander\",\"country\":\"Saint Pierre and Miquelon\",\"ip_address\":\"24.55.159.60\",\"email\":\"palexander@ozu.name\"},\n{\"id\":2176,\"first_name\":\"Rachel\",\"last_name\":\"Coleman\",\"country\":\"Marshall Islands\",\"ip_address\":\"102.252.125.200\",\"email\":\"rcoleman@jabberstorm.name\"},\n{\"id\":2177,\"first_name\":\"Joseph\",\"last_name\":\"Frazier\",\"country\":\"Malaysia\",\"ip_address\":\"159.222.158.218\",\"email\":\"jfrazier@mybuzz.com\"},\n{\"id\":2178,\"first_name\":\"Margaret\",\"last_name\":\"Smith\",\"country\":\"Timor-Leste\",\"ip_address\":\"44.191.16.57\",\"email\":\"msmith@jabberstorm.edu\"},\n{\"id\":2179,\"first_name\":\"Juan\",\"last_name\":\"Harvey\",\"country\":\"Guadeloupe\",\"ip_address\":\"14.243.9.62\",\"email\":\"jharvey@jayo.gov\"},\n{\"id\":2180,\"first_name\":\"Jimmy\",\"last_name\":\"Roberts\",\"country\":\"Gibraltar\",\"ip_address\":\"34.76.243.249\",\"email\":\"jroberts@skynoodle.com\"},\n{\"id\":2181,\"first_name\":\"James\",\"last_name\":\"Frazier\",\"country\":\"Monaco\",\"ip_address\":\"250.163.129.131\",\"email\":\"jfrazier@fivespan.info\"},\n{\"id\":2182,\"first_name\":\"Cheryl\",\"last_name\":\"Ruiz\",\"country\":\"Madagascar\",\"ip_address\":\"133.36.53.149\",\"email\":\"cruiz@leexo.gov\"},\n{\"id\":2183,\"first_name\":\"Jessica\",\"last_name\":\"Adams\",\"country\":\"Malaysia\",\"ip_address\":\"146.188.36.191\",\"email\":\"jadams@voolith.edu\"},\n{\"id\":2184,\"first_name\":\"Diana\",\"last_name\":\"Stephens\",\"country\":\"Haiti\",\"ip_address\":\"156.214.32.193\",\"email\":\"dstephens@twinte.net\"},\n{\"id\":2185,\"first_name\":\"Jimmy\",\"last_name\":\"Meyer\",\"country\":\"Saint Lucia\",\"ip_address\":\"233.121.181.159\",\"email\":\"jmeyer@meevee.info\"},\n{\"id\":2186,\"first_name\":\"Daniel\",\"last_name\":\"Perez\",\"country\":\"Indonesia\",\"ip_address\":\"16.249.102.59\",\"email\":\"dperez@quinu.com\"},\n{\"id\":2187,\"first_name\":\"Maria\",\"last_name\":\"Gardner\",\"country\":\"Netherlands\",\"ip_address\":\"223.147.109.216\",\"email\":\"mgardner@jabbertype.info\"},\n{\"id\":2188,\"first_name\":\"Julie\",\"last_name\":\"Wood\",\"country\":\"Vietnam\",\"ip_address\":\"76.81.223.238\",\"email\":\"jwood@tekfly.com\"},\n{\"id\":2189,\"first_name\":\"Jack\",\"last_name\":\"Lawson\",\"country\":\"British Virgin Islands\",\"ip_address\":\"250.249.55.74\",\"email\":\"jlawson@eire.biz\"},\n{\"id\":2190,\"first_name\":\"Rachel\",\"last_name\":\"Willis\",\"country\":\"Uruguay\",\"ip_address\":\"165.154.162.176\",\"email\":\"rwillis@voomm.mil\"},\n{\"id\":2191,\"first_name\":\"Linda\",\"last_name\":\"Welch\",\"country\":\"Heard and McDonald Islands\",\"ip_address\":\"1.161.206.67\",\"email\":\"lwelch@feedmix.net\"},\n{\"id\":2192,\"first_name\":\"Lois\",\"last_name\":\"Allen\",\"country\":\"Greece\",\"ip_address\":\"115.27.101.40\",\"email\":\"lallen@tambee.name\"},\n{\"id\":2193,\"first_name\":\"Michael\",\"last_name\":\"Ross\",\"country\":\"Thailand\",\"ip_address\":\"93.39.21.180\",\"email\":\"mross@brightdog.biz\"},\n{\"id\":2194,\"first_name\":\"Roger\",\"last_name\":\"Bradley\",\"country\":\"Jamaica\",\"ip_address\":\"20.66.59.16\",\"email\":\"rbradley@eidel.name\"},\n{\"id\":2195,\"first_name\":\"Sara\",\"last_name\":\"Wilson\",\"country\":\"Sri Lanka\",\"ip_address\":\"144.0.186.211\",\"email\":\"swilson@podcat.info\"},\n{\"id\":2196,\"first_name\":\"Arthur\",\"last_name\":\"Cox\",\"country\":\"Barbados\",\"ip_address\":\"212.44.136.107\",\"email\":\"acox@twitterbeat.info\"},\n{\"id\":2197,\"first_name\":\"Sean\",\"last_name\":\"Lewis\",\"country\":\"American Samoa\",\"ip_address\":\"221.118.138.80\",\"email\":\"slewis@camimbo.biz\"},\n{\"id\":2198,\"first_name\":\"Tina\",\"last_name\":\"Burns\",\"country\":\"Samoa\",\"ip_address\":\"2.96.193.122\",\"email\":\"tburns@roodel.net\"},\n{\"id\":2199,\"first_name\":\"Debra\",\"last_name\":\"Torres\",\"country\":\"Malaysia\",\"ip_address\":\"4.175.65.201\",\"email\":\"dtorres@talane.net\"},\n{\"id\":2200,\"first_name\":\"Rebecca\",\"last_name\":\"Moreno\",\"country\":\"Vietnam\",\"ip_address\":\"86.25.66.3\",\"email\":\"rmoreno@feedspan.com\"},\n{\"id\":2201,\"first_name\":\"Jimmy\",\"last_name\":\"Morrison\",\"country\":\"Cape Verde\",\"ip_address\":\"121.125.176.154\",\"email\":\"jmorrison@dablist.biz\"},\n{\"id\":2202,\"first_name\":\"Joe\",\"last_name\":\"Webb\",\"country\":\"Zambia\",\"ip_address\":\"16.123.242.21\",\"email\":\"jwebb@ooba.info\"},\n{\"id\":2203,\"first_name\":\"Peter\",\"last_name\":\"Meyer\",\"country\":\"Bulgaria\",\"ip_address\":\"140.75.147.181\",\"email\":\"pmeyer@oyope.biz\"},\n{\"id\":2204,\"first_name\":\"Tammy\",\"last_name\":\"Day\",\"country\":\"Tunisia\",\"ip_address\":\"23.244.251.213\",\"email\":\"tday@zazio.org\"},\n{\"id\":2205,\"first_name\":\"Carolyn\",\"last_name\":\"Morgan\",\"country\":\"Yemen\",\"ip_address\":\"228.160.161.32\",\"email\":\"cmorgan@flashspan.mil\"},\n{\"id\":2206,\"first_name\":\"Philip\",\"last_name\":\"Davis\",\"country\":\"Antarctica\",\"ip_address\":\"165.57.153.239\",\"email\":\"pdavis@wordify.edu\"},\n{\"id\":2207,\"first_name\":\"Andrea\",\"last_name\":\"Jacobs\",\"country\":\"Qatar\",\"ip_address\":\"236.60.37.63\",\"email\":\"ajacobs@eidel.net\"},\n{\"id\":2208,\"first_name\":\"Aaron\",\"last_name\":\"Ramirez\",\"country\":\"Kenya\",\"ip_address\":\"206.193.215.55\",\"email\":\"aramirez@lazz.com\"},\n{\"id\":2209,\"first_name\":\"Donald\",\"last_name\":\"Perry\",\"country\":\"France\",\"ip_address\":\"242.181.18.14\",\"email\":\"dperry@thoughtblab.org\"},\n{\"id\":2210,\"first_name\":\"Peter\",\"last_name\":\"Alexander\",\"country\":\"Saint Helena\",\"ip_address\":\"83.196.111.162\",\"email\":\"palexander@topicshots.biz\"},\n{\"id\":2211,\"first_name\":\"Mark\",\"last_name\":\"Reed\",\"country\":\"Guinea-Bissau\",\"ip_address\":\"241.246.90.103\",\"email\":\"mreed@npath.name\"},\n{\"id\":2212,\"first_name\":\"Billy\",\"last_name\":\"Torres\",\"country\":\"Mali\",\"ip_address\":\"43.255.76.79\",\"email\":\"btorres@rhynoodle.info\"},\n{\"id\":2213,\"first_name\":\"Ryan\",\"last_name\":\"Smith\",\"country\":\"Central African Republic\",\"ip_address\":\"244.12.128.115\",\"email\":\"rsmith@trudoo.edu\"},\n{\"id\":2214,\"first_name\":\"Walter\",\"last_name\":\"Cunningham\",\"country\":\"Algeria\",\"ip_address\":\"112.130.28.84\",\"email\":\"wcunningham@devpoint.com\"},\n{\"id\":2215,\"first_name\":\"Clarence\",\"last_name\":\"Palmer\",\"country\":\"Netherlands Antilles\",\"ip_address\":\"254.244.82.95\",\"email\":\"cpalmer@bubbletube.edu\"},\n{\"id\":2216,\"first_name\":\"Jeffrey\",\"last_name\":\"Lopez\",\"country\":\"Brunei Darussalam\",\"ip_address\":\"119.196.194.56\",\"email\":\"jlopez@katz.mil\"},\n{\"id\":2217,\"first_name\":\"Justin\",\"last_name\":\"Mitchell\",\"country\":\"Congo, Republic of\",\"ip_address\":\"102.46.220.32\",\"email\":\"jmitchell@tagopia.org\"},\n{\"id\":2218,\"first_name\":\"Gloria\",\"last_name\":\"Shaw\",\"country\":\"Monaco\",\"ip_address\":\"17.157.103.128\",\"email\":\"gshaw@babbleopia.mil\"},\n{\"id\":2219,\"first_name\":\"Roger\",\"last_name\":\"Moreno\",\"country\":\"Antarctica\",\"ip_address\":\"177.222.199.255\",\"email\":\"rmoreno@edgetag.biz\"},\n{\"id\":2220,\"first_name\":\"Edward\",\"last_name\":\"Stephens\",\"country\":\"American Samoa\",\"ip_address\":\"122.2.141.32\",\"email\":\"estephens@quimm.biz\"},\n{\"id\":2221,\"first_name\":\"Lois\",\"last_name\":\"Grant\",\"country\":\"Andorra\",\"ip_address\":\"110.201.34.135\",\"email\":\"lgrant@realfire.org\"},\n{\"id\":2222,\"first_name\":\"John\",\"last_name\":\"Nichols\",\"country\":\"South Africa\",\"ip_address\":\"91.11.186.84\",\"email\":\"jnichols@npath.com\"},\n{\"id\":2223,\"first_name\":\"Kimberly\",\"last_name\":\"Gutierrez\",\"country\":\"Senegal\",\"ip_address\":\"9.188.212.119\",\"email\":\"kgutierrez@trupe.net\"},\n{\"id\":2224,\"first_name\":\"Edward\",\"last_name\":\"Moore\",\"country\":\"Sierra Leone\",\"ip_address\":\"122.210.55.222\",\"email\":\"emoore@brightbean.biz\"},\n{\"id\":2225,\"first_name\":\"Charles\",\"last_name\":\"Jackson\",\"country\":\"Liechtenstein\",\"ip_address\":\"54.10.70.102\",\"email\":\"cjackson@plajo.net\"},\n{\"id\":2226,\"first_name\":\"Michael\",\"last_name\":\"George\",\"country\":\"Rwanda\",\"ip_address\":\"37.117.254.180\",\"email\":\"mgeorge@centidel.com\"},\n{\"id\":2227,\"first_name\":\"Roy\",\"last_name\":\"Hudson\",\"country\":\"Timor-Leste\",\"ip_address\":\"136.252.99.206\",\"email\":\"rhudson@dabfeed.info\"},\n{\"id\":2228,\"first_name\":\"Steve\",\"last_name\":\"Austin\",\"country\":\"Lebanon\",\"ip_address\":\"17.224.215.37\",\"email\":\"saustin@dynava.biz\"},\n{\"id\":2229,\"first_name\":\"Janet\",\"last_name\":\"Wells\",\"country\":\"Aruba\",\"ip_address\":\"43.15.88.131\",\"email\":\"jwells@buzzdog.name\"},\n{\"id\":2230,\"first_name\":\"Ashley\",\"last_name\":\"Hunter\",\"country\":\"Dominica\",\"ip_address\":\"78.238.117.184\",\"email\":\"ahunter@twitterlist.net\"},\n{\"id\":2231,\"first_name\":\"Jimmy\",\"last_name\":\"Burton\",\"country\":\"Korea, South\",\"ip_address\":\"28.130.199.236\",\"email\":\"jburton@yadel.com\"},\n{\"id\":2232,\"first_name\":\"Kathy\",\"last_name\":\"Porter\",\"country\":\"Kiribati\",\"ip_address\":\"243.189.245.203\",\"email\":\"kporter@jabbertype.org\"},\n{\"id\":2233,\"first_name\":\"Ann\",\"last_name\":\"Reid\",\"country\":\"Guam\",\"ip_address\":\"142.231.18.42\",\"email\":\"areid@zoovu.info\"},\n{\"id\":2234,\"first_name\":\"Rebecca\",\"last_name\":\"Stewart\",\"country\":\"Eritrea\",\"ip_address\":\"99.45.83.123\",\"email\":\"rstewart@wordtune.name\"},\n{\"id\":2235,\"first_name\":\"Johnny\",\"last_name\":\"Webb\",\"country\":\"Tanzania\",\"ip_address\":\"172.114.167.102\",\"email\":\"jwebb@kwinu.net\"},\n{\"id\":2236,\"first_name\":\"Joseph\",\"last_name\":\"Wright\",\"country\":\"Dominican Republic\",\"ip_address\":\"143.244.73.27\",\"email\":\"jwright@kwinu.gov\"},\n{\"id\":2237,\"first_name\":\"Jean\",\"last_name\":\"Wheeler\",\"country\":\"Svalbard and Jan Mayen Islands\",\"ip_address\":\"67.128.55.220\",\"email\":\"jwheeler@innotype.edu\"},\n{\"id\":2238,\"first_name\":\"Irene\",\"last_name\":\"Taylor\",\"country\":\"Cape Verde\",\"ip_address\":\"89.72.99.55\",\"email\":\"itaylor@ainyx.edu\"},\n{\"id\":2239,\"first_name\":\"Susan\",\"last_name\":\"Hudson\",\"country\":\"Jordan\",\"ip_address\":\"195.120.146.65\",\"email\":\"shudson@trudeo.name\"},\n{\"id\":2240,\"first_name\":\"Mark\",\"last_name\":\"Diaz\",\"country\":\"Montserrat\",\"ip_address\":\"34.129.218.157\",\"email\":\"mdiaz@jazzy.org\"},\n{\"id\":2241,\"first_name\":\"Laura\",\"last_name\":\"Diaz\",\"country\":\"Trinidad and Tobago\",\"ip_address\":\"231.76.236.123\",\"email\":\"ldiaz@shufflester.name\"},\n{\"id\":2242,\"first_name\":\"Brandon\",\"last_name\":\"Morgan\",\"country\":\"Zambia\",\"ip_address\":\"29.68.25.147\",\"email\":\"bmorgan@browsetype.name\"},\n{\"id\":2243,\"first_name\":\"Andrea\",\"last_name\":\"Rogers\",\"country\":\"French Southern Territories\",\"ip_address\":\"145.163.231.240\",\"email\":\"arogers@skipfire.net\"},\n{\"id\":2244,\"first_name\":\"Eugene\",\"last_name\":\"Banks\",\"country\":\"Barbados\",\"ip_address\":\"75.1.164.114\",\"email\":\"ebanks@leexo.biz\"},\n{\"id\":2245,\"first_name\":\"Jeffrey\",\"last_name\":\"Cruz\",\"country\":\"Dominican Republic\",\"ip_address\":\"245.164.173.95\",\"email\":\"jcruz@cogibox.edu\"},\n{\"id\":2246,\"first_name\":\"Amy\",\"last_name\":\"Hansen\",\"country\":\"Tuvalu\",\"ip_address\":\"135.89.166.126\",\"email\":\"ahansen@tagfeed.name\"},\n{\"id\":2247,\"first_name\":\"Jason\",\"last_name\":\"Burton\",\"country\":\"Montenegro\",\"ip_address\":\"113.98.102.27\",\"email\":\"jburton@linklinks.net\"},\n{\"id\":2248,\"first_name\":\"Ruth\",\"last_name\":\"Murphy\",\"country\":\"Egypt\",\"ip_address\":\"123.216.114.137\",\"email\":\"rmurphy@rhybox.gov\"},\n{\"id\":2249,\"first_name\":\"Frances\",\"last_name\":\"George\",\"country\":\"Oman\",\"ip_address\":\"162.70.19.208\",\"email\":\"fgeorge@mybuzz.net\"},\n{\"id\":2250,\"first_name\":\"Mildred\",\"last_name\":\"Carter\",\"country\":\"Mauritius\",\"ip_address\":\"189.226.129.53\",\"email\":\"mcarter@shufflebeat.edu\"},\n{\"id\":2251,\"first_name\":\"Linda\",\"last_name\":\"Schmidt\",\"country\":\"Vanuatu\",\"ip_address\":\"246.230.103.215\",\"email\":\"lschmidt@kayveo.biz\"},\n{\"id\":2252,\"first_name\":\"Anne\",\"last_name\":\"Simmons\",\"country\":\"Costa Rica\",\"ip_address\":\"201.190.121.76\",\"email\":\"asimmons@skaboo.com\"},\n{\"id\":2253,\"first_name\":\"Steven\",\"last_name\":\"Cox\",\"country\":\"Mozambique\",\"ip_address\":\"208.247.188.17\",\"email\":\"scox@kare.com\"},\n{\"id\":2254,\"first_name\":\"Karen\",\"last_name\":\"Carter\",\"country\":\"Slovenia\",\"ip_address\":\"37.217.109.102\",\"email\":\"kcarter@quinu.edu\"},\n{\"id\":2255,\"first_name\":\"Cynthia\",\"last_name\":\"Morris\",\"country\":\"Chad\",\"ip_address\":\"148.102.206.219\",\"email\":\"cmorris@mydeo.gov\"},\n{\"id\":2256,\"first_name\":\"James\",\"last_name\":\"Long\",\"country\":\"Botswana\",\"ip_address\":\"51.197.180.36\",\"email\":\"jlong@abatz.name\"},\n{\"id\":2257,\"first_name\":\"Lisa\",\"last_name\":\"Porter\",\"country\":\"Guatemala\",\"ip_address\":\"50.183.242.105\",\"email\":\"lporter@realblab.info\"},\n{\"id\":2258,\"first_name\":\"Peter\",\"last_name\":\"Nguyen\",\"country\":\"Guadeloupe\",\"ip_address\":\"187.0.167.151\",\"email\":\"pnguyen@izio.info\"},\n{\"id\":2259,\"first_name\":\"George\",\"last_name\":\"Wright\",\"country\":\"Croatia\",\"ip_address\":\"96.252.108.177\",\"email\":\"gwright@topiclounge.net\"},\n{\"id\":2260,\"first_name\":\"Bruce\",\"last_name\":\"Harris\",\"country\":\"Benin\",\"ip_address\":\"151.180.237.172\",\"email\":\"bharris@realmix.name\"},\n{\"id\":2261,\"first_name\":\"Adam\",\"last_name\":\"Harrison\",\"country\":\"USSR\",\"ip_address\":\"112.204.122.4\",\"email\":\"aharrison@gabvine.net\"},\n{\"id\":2262,\"first_name\":\"Albert\",\"last_name\":\"Harvey\",\"country\":\"Mali\",\"ip_address\":\"128.38.36.98\",\"email\":\"aharvey@trilith.com\"},\n{\"id\":2263,\"first_name\":\"Kathy\",\"last_name\":\"Elliott\",\"country\":\"United States Virgin Islands\",\"ip_address\":\"223.227.186.153\",\"email\":\"kelliott@tagtune.biz\"},\n{\"id\":2264,\"first_name\":\"Willie\",\"last_name\":\"Reyes\",\"country\":\"Myanmar\",\"ip_address\":\"26.46.162.214\",\"email\":\"wreyes@realfire.biz\"},\n{\"id\":2265,\"first_name\":\"Patricia\",\"last_name\":\"Castillo\",\"country\":\"Reunion\",\"ip_address\":\"209.121.90.219\",\"email\":\"pcastillo@einti.info\"},\n{\"id\":2266,\"first_name\":\"Nicole\",\"last_name\":\"Richardson\",\"country\":\"Hong Kong\",\"ip_address\":\"215.55.41.121\",\"email\":\"nrichardson@eare.gov\"},\n{\"id\":2267,\"first_name\":\"Barbara\",\"last_name\":\"Andrews\",\"country\":\"Sri Lanka\",\"ip_address\":\"170.187.65.53\",\"email\":\"bandrews@teklist.com\"},\n{\"id\":2268,\"first_name\":\"Andrew\",\"last_name\":\"Reynolds\",\"country\":\"Senegal\",\"ip_address\":\"244.32.183.206\",\"email\":\"areynolds@bubbletube.com\"},\n{\"id\":2269,\"first_name\":\"Janet\",\"last_name\":\"Kim\",\"country\":\"Colombia\",\"ip_address\":\"87.115.167.177\",\"email\":\"jkim@roodel.biz\"},\n{\"id\":2270,\"first_name\":\"Jimmy\",\"last_name\":\"Daniels\",\"country\":\"Hungary\",\"ip_address\":\"155.94.27.117\",\"email\":\"jdaniels@gevee.mil\"},\n{\"id\":2271,\"first_name\":\"Susan\",\"last_name\":\"Peters\",\"country\":\"Israel\",\"ip_address\":\"137.146.144.36\",\"email\":\"speters@voonte.org\"},\n{\"id\":2272,\"first_name\":\"Beverly\",\"last_name\":\"Perry\",\"country\":\"United Kingdom\",\"ip_address\":\"15.176.210.63\",\"email\":\"bperry@linktype.org\"},\n{\"id\":2273,\"first_name\":\"Roy\",\"last_name\":\"Barnes\",\"country\":\"Syria\",\"ip_address\":\"171.198.231.198\",\"email\":\"rbarnes@yacero.name\"},\n{\"id\":2274,\"first_name\":\"David\",\"last_name\":\"Brown\",\"country\":\"Mauritania\",\"ip_address\":\"132.48.39.149\",\"email\":\"dbrown@yodo.edu\"},\n{\"id\":2275,\"first_name\":\"Paula\",\"last_name\":\"Graham\",\"country\":\"Comoros\",\"ip_address\":\"238.243.47.31\",\"email\":\"pgraham@yodel.name\"},\n{\"id\":2276,\"first_name\":\"Annie\",\"last_name\":\"James\",\"country\":\"Moldova\",\"ip_address\":\"35.153.124.94\",\"email\":\"ajames@innoz.edu\"},\n{\"id\":2277,\"first_name\":\"Steve\",\"last_name\":\"Carter\",\"country\":\"Papua New Guinea\",\"ip_address\":\"165.66.46.19\",\"email\":\"scarter@fliptune.mil\"},\n{\"id\":2278,\"first_name\":\"Phyllis\",\"last_name\":\"Richards\",\"country\":\"Indonesia\",\"ip_address\":\"223.100.29.238\",\"email\":\"prichards@skyba.biz\"},\n{\"id\":2279,\"first_name\":\"Donna\",\"last_name\":\"Rodriguez\",\"country\":\"Oman\",\"ip_address\":\"140.110.76.128\",\"email\":\"drodriguez@yacero.edu\"},\n{\"id\":2280,\"first_name\":\"Philip\",\"last_name\":\"Tucker\",\"country\":\"Montserrat\",\"ip_address\":\"109.82.31.30\",\"email\":\"ptucker@teklist.com\"},\n{\"id\":2281,\"first_name\":\"William\",\"last_name\":\"Kennedy\",\"country\":\"Maldives\",\"ip_address\":\"128.145.19.142\",\"email\":\"wkennedy@rhynoodle.info\"},\n{\"id\":2282,\"first_name\":\"Ruby\",\"last_name\":\"Howard\",\"country\":\"Mongolia\",\"ip_address\":\"98.212.118.119\",\"email\":\"rhoward@agivu.mil\"},\n{\"id\":2283,\"first_name\":\"Nicholas\",\"last_name\":\"Burns\",\"country\":\"Estonia\",\"ip_address\":\"115.139.72.154\",\"email\":\"nburns@avaveo.name\"},\n{\"id\":2284,\"first_name\":\"Robin\",\"last_name\":\"Ross\",\"country\":\"Russia\",\"ip_address\":\"144.166.239.164\",\"email\":\"rross@topicshots.com\"},\n{\"id\":2285,\"first_name\":\"Melissa\",\"last_name\":\"Nguyen\",\"country\":\"Israel\",\"ip_address\":\"75.229.223.238\",\"email\":\"mnguyen@tagfeed.gov\"},\n{\"id\":2286,\"first_name\":\"Jane\",\"last_name\":\"Austin\",\"country\":\"Suriname\",\"ip_address\":\"95.63.202.218\",\"email\":\"jaustin@eayo.mil\"},\n{\"id\":2287,\"first_name\":\"Patrick\",\"last_name\":\"Dixon\",\"country\":\"Bahamas\",\"ip_address\":\"99.244.134.124\",\"email\":\"pdixon@dabvine.mil\"},\n{\"id\":2288,\"first_name\":\"Kimberly\",\"last_name\":\"Davis\",\"country\":\"Azerbaijan\",\"ip_address\":\"127.105.59.141\",\"email\":\"kdavis@flipstorm.biz\"},\n{\"id\":2289,\"first_name\":\"Wanda\",\"last_name\":\"Barnes\",\"country\":\"Montserrat\",\"ip_address\":\"107.164.36.150\",\"email\":\"wbarnes@jayo.net\"},\n{\"id\":2290,\"first_name\":\"Kevin\",\"last_name\":\"Simmons\",\"country\":\"Norfolk Island\",\"ip_address\":\"205.26.92.127\",\"email\":\"ksimmons@thoughtbeat.mil\"},\n{\"id\":2291,\"first_name\":\"Jean\",\"last_name\":\"Carter\",\"country\":\"American Samoa\",\"ip_address\":\"0.212.241.176\",\"email\":\"jcarter@skynoodle.info\"},\n{\"id\":2292,\"first_name\":\"Fred\",\"last_name\":\"Payne\",\"country\":\"Mauritius\",\"ip_address\":\"137.97.219.172\",\"email\":\"fpayne@photospace.org\"},\n{\"id\":2293,\"first_name\":\"Edward\",\"last_name\":\"Burton\",\"country\":\"Belgium\",\"ip_address\":\"144.245.195.151\",\"email\":\"eburton@skimia.gov\"},\n{\"id\":2294,\"first_name\":\"James\",\"last_name\":\"Lawson\",\"country\":\"Andorra\",\"ip_address\":\"144.189.250.93\",\"email\":\"jlawson@photolist.org\"},\n{\"id\":2295,\"first_name\":\"Emily\",\"last_name\":\"Garza\",\"country\":\"Morocco\",\"ip_address\":\"175.239.102.70\",\"email\":\"egarza@aimbo.org\"},\n{\"id\":2296,\"first_name\":\"Jesse\",\"last_name\":\"Harper\",\"country\":\"Guernsey\",\"ip_address\":\"81.178.127.7\",\"email\":\"jharper@roomm.name\"},\n{\"id\":2297,\"first_name\":\"Steve\",\"last_name\":\"Watson\",\"country\":\"Comoros\",\"ip_address\":\"27.234.132.77\",\"email\":\"swatson@janyx.net\"},\n{\"id\":2298,\"first_name\":\"Diane\",\"last_name\":\"Miller\",\"country\":\"Costa Rica\",\"ip_address\":\"88.129.135.115\",\"email\":\"dmiller@zoovu.name\"},\n{\"id\":2299,\"first_name\":\"Barbara\",\"last_name\":\"Gordon\",\"country\":\"Martinique\",\"ip_address\":\"254.236.127.185\",\"email\":\"bgordon@dynabox.org\"},\n{\"id\":2300,\"first_name\":\"Jean\",\"last_name\":\"Williamson\",\"country\":\"Saint Vincent and the Grenadines\",\"ip_address\":\"233.15.183.99\",\"email\":\"jwilliamson@skiptube.net\"},\n{\"id\":2301,\"first_name\":\"Mildred\",\"last_name\":\"Carroll\",\"country\":\"Monaco\",\"ip_address\":\"56.131.119.6\",\"email\":\"mcarroll@flashset.info\"},\n{\"id\":2302,\"first_name\":\"Martin\",\"last_name\":\"Sanders\",\"country\":\"South Georgia and the South Sandwich Islands\",\"ip_address\":\"203.177.27.147\",\"email\":\"msanders@linkbridge.biz\"},\n{\"id\":2303,\"first_name\":\"Debra\",\"last_name\":\"Castillo\",\"country\":\"Yugoslavia\",\"ip_address\":\"227.105.84.205\",\"email\":\"dcastillo@twitterworks.mil\"},\n{\"id\":2304,\"first_name\":\"Howard\",\"last_name\":\"Stanley\",\"country\":\"Saint Vincent and the Grenadines\",\"ip_address\":\"189.236.129.192\",\"email\":\"hstanley@ntag.com\"},\n{\"id\":2305,\"first_name\":\"Gerald\",\"last_name\":\"Foster\",\"country\":\"Malta\",\"ip_address\":\"39.150.162.92\",\"email\":\"gfoster@meeveo.net\"},\n{\"id\":2306,\"first_name\":\"Lawrence\",\"last_name\":\"Kelly\",\"country\":\"Bermuda\",\"ip_address\":\"67.16.43.179\",\"email\":\"lkelly@skippad.edu\"},\n{\"id\":2307,\"first_name\":\"Randy\",\"last_name\":\"Webb\",\"country\":\"Paraguay\",\"ip_address\":\"68.104.100.28\",\"email\":\"rwebb@devshare.com\"},\n{\"id\":2308,\"first_name\":\"Anne\",\"last_name\":\"Stephens\",\"country\":\"Micronesia\",\"ip_address\":\"192.191.120.29\",\"email\":\"astephens@mita.edu\"},\n{\"id\":2309,\"first_name\":\"Henry\",\"last_name\":\"Jackson\",\"country\":\"Nepal\",\"ip_address\":\"190.35.157.2\",\"email\":\"hjackson@yambee.edu\"},\n{\"id\":2310,\"first_name\":\"Jimmy\",\"last_name\":\"Williamson\",\"country\":\"Cuba\",\"ip_address\":\"176.96.98.32\",\"email\":\"jwilliamson@oozz.com\"},\n{\"id\":2311,\"first_name\":\"Debra\",\"last_name\":\"Graham\",\"country\":\"Indonesia\",\"ip_address\":\"232.16.196.13\",\"email\":\"dgraham@linkbridge.name\"},\n{\"id\":2312,\"first_name\":\"Christina\",\"last_name\":\"Rogers\",\"country\":\"Kuwait\",\"ip_address\":\"95.7.17.56\",\"email\":\"crogers@centidel.info\"},\n{\"id\":2313,\"first_name\":\"Matthew\",\"last_name\":\"Day\",\"country\":\"Malaysia\",\"ip_address\":\"209.174.83.246\",\"email\":\"mday@skimia.info\"},\n{\"id\":2314,\"first_name\":\"Ernest\",\"last_name\":\"Thomas\",\"country\":\"Slovenia\",\"ip_address\":\"59.120.249.209\",\"email\":\"ethomas@zoozzy.name\"},\n{\"id\":2315,\"first_name\":\"Wanda\",\"last_name\":\"Murray\",\"country\":\"Syria\",\"ip_address\":\"200.27.34.246\",\"email\":\"wmurray@realmix.com\"},\n{\"id\":2316,\"first_name\":\"Carol\",\"last_name\":\"Schmidt\",\"country\":\"Maldives\",\"ip_address\":\"179.47.0.63\",\"email\":\"cschmidt@kazio.biz\"},\n{\"id\":2317,\"first_name\":\"Clarence\",\"last_name\":\"Johnston\",\"country\":\"Saint Martin\",\"ip_address\":\"130.154.242.134\",\"email\":\"cjohnston@plambee.com\"},\n{\"id\":2318,\"first_name\":\"Chris\",\"last_name\":\"Cunningham\",\"country\":\"Cameroon\",\"ip_address\":\"77.85.39.184\",\"email\":\"ccunningham@zoombeat.com\"},\n{\"id\":2319,\"first_name\":\"Robert\",\"last_name\":\"Shaw\",\"country\":\"Cayman Islands\",\"ip_address\":\"139.7.197.94\",\"email\":\"rshaw@yoveo.name\"},\n{\"id\":2320,\"first_name\":\"Janet\",\"last_name\":\"Thompson\",\"country\":\"Uzbekistan\",\"ip_address\":\"53.0.217.246\",\"email\":\"jthompson@kazio.net\"},\n{\"id\":2321,\"first_name\":\"Carl\",\"last_name\":\"Walker\",\"country\":\"Malawi\",\"ip_address\":\"88.229.217.1\",\"email\":\"cwalker@voonyx.gov\"},\n{\"id\":2322,\"first_name\":\"Billy\",\"last_name\":\"Mills\",\"country\":\"Saudia Arabia\",\"ip_address\":\"211.160.15.1\",\"email\":\"bmills@twitternation.biz\"},\n{\"id\":2323,\"first_name\":\"Joe\",\"last_name\":\"Bradley\",\"country\":\"Slovakia\",\"ip_address\":\"161.218.201.200\",\"email\":\"jbradley@dabfeed.name\"},\n{\"id\":2324,\"first_name\":\"Bobby\",\"last_name\":\"Gonzales\",\"country\":\"Denmark\",\"ip_address\":\"47.22.35.81\",\"email\":\"bgonzales@zoozzy.info\"},\n{\"id\":2325,\"first_name\":\"Linda\",\"last_name\":\"White\",\"country\":\"Nicaragua\",\"ip_address\":\"74.253.71.130\",\"email\":\"lwhite@dazzlesphere.info\"},\n{\"id\":2326,\"first_name\":\"Judy\",\"last_name\":\"King\",\"country\":\"Korea, North\",\"ip_address\":\"187.117.215.121\",\"email\":\"jking@linklinks.net\"},\n{\"id\":2327,\"first_name\":\"Kelly\",\"last_name\":\"Mcdonald\",\"country\":\"Puerto Rico\",\"ip_address\":\"21.252.131.233\",\"email\":\"kmcdonald@flipopia.name\"},\n{\"id\":2328,\"first_name\":\"Wayne\",\"last_name\":\"Stone\",\"country\":\"Chile\",\"ip_address\":\"46.116.71.196\",\"email\":\"wstone@skajo.biz\"},\n{\"id\":2329,\"first_name\":\"Sandra\",\"last_name\":\"Kelly\",\"country\":\"Haiti\",\"ip_address\":\"120.83.100.106\",\"email\":\"skelly@aivee.mil\"},\n{\"id\":2330,\"first_name\":\"Janet\",\"last_name\":\"Knight\",\"country\":\"Papua New Guinea\",\"ip_address\":\"76.126.26.50\",\"email\":\"jknight@yodoo.com\"},\n{\"id\":2331,\"first_name\":\"Benjamin\",\"last_name\":\"Russell\",\"country\":\"Liechtenstein\",\"ip_address\":\"98.67.14.220\",\"email\":\"brussell@aivee.biz\"},\n{\"id\":2332,\"first_name\":\"Tina\",\"last_name\":\"Snyder\",\"country\":\"Cyprus\",\"ip_address\":\"138.57.64.47\",\"email\":\"tsnyder@shufflebeat.mil\"},\n{\"id\":2333,\"first_name\":\"Douglas\",\"last_name\":\"Powell\",\"country\":\"Kuwait\",\"ip_address\":\"133.220.146.102\",\"email\":\"dpowell@tanoodle.name\"},\n{\"id\":2334,\"first_name\":\"Anthony\",\"last_name\":\"Ryan\",\"country\":\"Saint Lucia\",\"ip_address\":\"139.129.249.203\",\"email\":\"aryan@eare.com\"},\n{\"id\":2335,\"first_name\":\"Craig\",\"last_name\":\"Wagner\",\"country\":\"Samoa\",\"ip_address\":\"148.81.70.15\",\"email\":\"cwagner@feedspan.edu\"},\n{\"id\":2336,\"first_name\":\"Todd\",\"last_name\":\"Thompson\",\"country\":\"US Minor Outlying Islands\",\"ip_address\":\"111.118.237.229\",\"email\":\"tthompson@blognation.edu\"},\n{\"id\":2337,\"first_name\":\"Jane\",\"last_name\":\"Meyer\",\"country\":\"Guernsey\",\"ip_address\":\"141.208.223.26\",\"email\":\"jmeyer@feedmix.org\"},\n{\"id\":2338,\"first_name\":\"Doris\",\"last_name\":\"Johnson\",\"country\":\"Guyana\",\"ip_address\":\"25.76.63.65\",\"email\":\"djohnson@mynte.net\"},\n{\"id\":2339,\"first_name\":\"Annie\",\"last_name\":\"Knight\",\"country\":\"Morocco\",\"ip_address\":\"203.210.143.190\",\"email\":\"aknight@oozz.net\"},\n{\"id\":2340,\"first_name\":\"Louise\",\"last_name\":\"Scott\",\"country\":\"Ethiopia\",\"ip_address\":\"30.102.64.56\",\"email\":\"lscott@demizz.biz\"},\n{\"id\":2341,\"first_name\":\"Joseph\",\"last_name\":\"Rogers\",\"country\":\"Zimbabwe\",\"ip_address\":\"172.240.140.187\",\"email\":\"jrogers@gabcube.name\"},\n{\"id\":2342,\"first_name\":\"Terry\",\"last_name\":\"Williamson\",\"country\":\"Italy\",\"ip_address\":\"203.235.123.250\",\"email\":\"twilliamson@jayo.gov\"},\n{\"id\":2343,\"first_name\":\"Jason\",\"last_name\":\"Reyes\",\"country\":\"Montserrat\",\"ip_address\":\"13.93.80.40\",\"email\":\"jreyes@skiba.edu\"},\n{\"id\":2344,\"first_name\":\"Laura\",\"last_name\":\"Hayes\",\"country\":\"Ascension Island\",\"ip_address\":\"112.37.207.46\",\"email\":\"lhayes@babbleopia.com\"},\n{\"id\":2345,\"first_name\":\"Jeffrey\",\"last_name\":\"Freeman\",\"country\":\"Tonga\",\"ip_address\":\"145.145.251.127\",\"email\":\"jfreeman@devshare.mil\"},\n{\"id\":2346,\"first_name\":\"Louise\",\"last_name\":\"Hansen\",\"country\":\"Mongolia\",\"ip_address\":\"228.208.214.215\",\"email\":\"lhansen@chatterbridge.edu\"},\n{\"id\":2347,\"first_name\":\"Carl\",\"last_name\":\"Hanson\",\"country\":\"Lebanon\",\"ip_address\":\"164.237.228.136\",\"email\":\"chanson@mita.mil\"},\n{\"id\":2348,\"first_name\":\"Matthew\",\"last_name\":\"Rodriguez\",\"country\":\"Ireland\",\"ip_address\":\"25.194.92.160\",\"email\":\"mrodriguez@quimm.edu\"},\n{\"id\":2349,\"first_name\":\"Albert\",\"last_name\":\"Wood\",\"country\":\"Kenya\",\"ip_address\":\"99.129.71.180\",\"email\":\"awood@oyoba.net\"},\n{\"id\":2350,\"first_name\":\"Phyllis\",\"last_name\":\"Hayes\",\"country\":\"Puerto Rico\",\"ip_address\":\"214.32.143.108\",\"email\":\"phayes@aimbo.info\"},\n{\"id\":2351,\"first_name\":\"Lillian\",\"last_name\":\"Taylor\",\"country\":\"Ascension Island\",\"ip_address\":\"96.123.23.72\",\"email\":\"ltaylor@roomm.info\"},\n{\"id\":2352,\"first_name\":\"Diana\",\"last_name\":\"Ray\",\"country\":\"Netherlands Antilles\",\"ip_address\":\"197.40.198.217\",\"email\":\"dray@tanoodle.name\"},\n{\"id\":2353,\"first_name\":\"Lillian\",\"last_name\":\"Armstrong\",\"country\":\"Swaziland\",\"ip_address\":\"206.57.11.219\",\"email\":\"larmstrong@skilith.biz\"},\n{\"id\":2354,\"first_name\":\"Laura\",\"last_name\":\"King\",\"country\":\"Turks and Caicos Islands\",\"ip_address\":\"93.124.115.183\",\"email\":\"lking@trunyx.name\"},\n{\"id\":2355,\"first_name\":\"Elizabeth\",\"last_name\":\"Hart\",\"country\":\"Korea, South\",\"ip_address\":\"253.192.21.138\",\"email\":\"ehart@gabvine.edu\"},\n{\"id\":2356,\"first_name\":\"Kenneth\",\"last_name\":\"Burke\",\"country\":\"Laos\",\"ip_address\":\"138.198.72.223\",\"email\":\"kburke@centizu.info\"},\n{\"id\":2357,\"first_name\":\"Johnny\",\"last_name\":\"Butler\",\"country\":\"Montenegro\",\"ip_address\":\"232.86.40.206\",\"email\":\"jbutler@agimba.mil\"},\n{\"id\":2358,\"first_name\":\"Jack\",\"last_name\":\"Campbell\",\"country\":\"Turkey\",\"ip_address\":\"164.57.50.53\",\"email\":\"jcampbell@demizz.info\"},\n{\"id\":2359,\"first_name\":\"Judith\",\"last_name\":\"Kim\",\"country\":\"Mozambique\",\"ip_address\":\"43.191.187.85\",\"email\":\"jkim@podcat.edu\"},\n{\"id\":2360,\"first_name\":\"Harold\",\"last_name\":\"Meyer\",\"country\":\"Fiji\",\"ip_address\":\"184.108.125.198\",\"email\":\"hmeyer@twinte.net\"},\n{\"id\":2361,\"first_name\":\"Emily\",\"last_name\":\"Black\",\"country\":\"Congo, Republic of\",\"ip_address\":\"104.58.245.240\",\"email\":\"eblack@dablist.org\"},\n{\"id\":2362,\"first_name\":\"Douglas\",\"last_name\":\"Johnson\",\"country\":\"Ireland\",\"ip_address\":\"74.86.237.39\",\"email\":\"djohnson@skalith.name\"},\n{\"id\":2363,\"first_name\":\"Judy\",\"last_name\":\"Adams\",\"country\":\"Guinea-Bissau\",\"ip_address\":\"153.79.37.32\",\"email\":\"jadams@lazzy.com\"},\n{\"id\":2364,\"first_name\":\"Antonio\",\"last_name\":\"Stevens\",\"country\":\"India\",\"ip_address\":\"80.63.223.70\",\"email\":\"astevens@rooxo.info\"},\n{\"id\":2365,\"first_name\":\"Lisa\",\"last_name\":\"Cruz\",\"country\":\"Uganda\",\"ip_address\":\"145.67.79.60\",\"email\":\"lcruz@voonte.gov\"},\n{\"id\":2366,\"first_name\":\"Mildred\",\"last_name\":\"Woods\",\"country\":\"South Africa\",\"ip_address\":\"82.248.63.1\",\"email\":\"mwoods@cogidoo.biz\"},\n{\"id\":2367,\"first_name\":\"Steve\",\"last_name\":\"Fisher\",\"country\":\"Bouvet Island\",\"ip_address\":\"72.38.237.62\",\"email\":\"sfisher@leexo.com\"},\n{\"id\":2368,\"first_name\":\"Amanda\",\"last_name\":\"Murphy\",\"country\":\"El Salvador\",\"ip_address\":\"31.29.14.206\",\"email\":\"amurphy@feedbug.net\"},\n{\"id\":2369,\"first_name\":\"Antonio\",\"last_name\":\"Castillo\",\"country\":\"Sierra Leone\",\"ip_address\":\"165.47.165.236\",\"email\":\"acastillo@brightdog.gov\"},\n{\"id\":2370,\"first_name\":\"Kathryn\",\"last_name\":\"Wagner\",\"country\":\"Antarctica\",\"ip_address\":\"99.169.166.110\",\"email\":\"kwagner@edgeclub.com\"},\n{\"id\":2371,\"first_name\":\"Brandon\",\"last_name\":\"Fisher\",\"country\":\"Comoros\",\"ip_address\":\"99.120.3.50\",\"email\":\"bfisher@fadeo.org\"},\n{\"id\":2372,\"first_name\":\"Benjamin\",\"last_name\":\"Green\",\"country\":\"Canada\",\"ip_address\":\"229.156.57.192\",\"email\":\"bgreen@brainsphere.com\"},\n{\"id\":2373,\"first_name\":\"Ernest\",\"last_name\":\"Lee\",\"country\":\"Niger\",\"ip_address\":\"27.184.157.23\",\"email\":\"elee@centimia.edu\"},\n{\"id\":2374,\"first_name\":\"Kathy\",\"last_name\":\"Coleman\",\"country\":\"Heard and McDonald Islands\",\"ip_address\":\"245.172.38.76\",\"email\":\"kcoleman@quire.info\"},\n{\"id\":2375,\"first_name\":\"Shawn\",\"last_name\":\"Arnold\",\"country\":\"Fiji\",\"ip_address\":\"109.107.169.226\",\"email\":\"sarnold@cogibox.gov\"},\n{\"id\":2376,\"first_name\":\"Paul\",\"last_name\":\"Reed\",\"country\":\"Slovenia\",\"ip_address\":\"59.130.44.191\",\"email\":\"preed@yozio.gov\"},\n{\"id\":2377,\"first_name\":\"Juan\",\"last_name\":\"Owens\",\"country\":\"Somalia\",\"ip_address\":\"180.66.18.194\",\"email\":\"jowens@pixope.info\"},\n{\"id\":2378,\"first_name\":\"Sean\",\"last_name\":\"Howard\",\"country\":\"Saint Pierre and Miquelon\",\"ip_address\":\"233.248.129.46\",\"email\":\"showard@twinte.net\"},\n{\"id\":2379,\"first_name\":\"Jeffrey\",\"last_name\":\"Miller\",\"country\":\"Thailand\",\"ip_address\":\"192.219.89.169\",\"email\":\"jmiller@photofeed.org\"},\n{\"id\":2380,\"first_name\":\"Virginia\",\"last_name\":\"Daniels\",\"country\":\"Switzerland\",\"ip_address\":\"55.117.113.253\",\"email\":\"vdaniels@twitterbeat.mil\"},\n{\"id\":2381,\"first_name\":\"Mary\",\"last_name\":\"Scott\",\"country\":\"Antarctica\",\"ip_address\":\"250.28.41.30\",\"email\":\"mscott@fadeo.biz\"},\n{\"id\":2382,\"first_name\":\"Anthony\",\"last_name\":\"Ryan\",\"country\":\"Malawi\",\"ip_address\":\"116.9.211.244\",\"email\":\"aryan@jayo.name\"},\n{\"id\":2383,\"first_name\":\"Daniel\",\"last_name\":\"Howard\",\"country\":\"Djibouti\",\"ip_address\":\"23.182.37.232\",\"email\":\"dhoward@gigaclub.name\"},\n{\"id\":2384,\"first_name\":\"Marilyn\",\"last_name\":\"Stevens\",\"country\":\"Ecuador\",\"ip_address\":\"96.13.38.73\",\"email\":\"mstevens@browsezoom.gov\"},\n{\"id\":2385,\"first_name\":\"Juan\",\"last_name\":\"Hanson\",\"country\":\"Armenia\",\"ip_address\":\"160.63.174.206\",\"email\":\"jhanson@eidel.org\"},\n{\"id\":2386,\"first_name\":\"Kathleen\",\"last_name\":\"Walker\",\"country\":\"Central African Republic\",\"ip_address\":\"162.180.11.89\",\"email\":\"kwalker@jumpxs.edu\"},\n{\"id\":2387,\"first_name\":\"Jeffrey\",\"last_name\":\"Hansen\",\"country\":\"New Caledonia\",\"ip_address\":\"162.6.156.168\",\"email\":\"jhansen@meejo.name\"},\n{\"id\":2388,\"first_name\":\"Irene\",\"last_name\":\"Miller\",\"country\":\"Mayotte\",\"ip_address\":\"195.245.0.105\",\"email\":\"imiller@teklist.net\"},\n{\"id\":2389,\"first_name\":\"Joseph\",\"last_name\":\"Arnold\",\"country\":\"Mongolia\",\"ip_address\":\"157.124.144.107\",\"email\":\"jarnold@avavee.edu\"},\n{\"id\":2390,\"first_name\":\"Shawn\",\"last_name\":\"Hall\",\"country\":\"Equatorial Guinea\",\"ip_address\":\"151.19.73.144\",\"email\":\"shall@blogtag.net\"},\n{\"id\":2391,\"first_name\":\"Ruth\",\"last_name\":\"Williamson\",\"country\":\"Costa Rica\",\"ip_address\":\"66.252.185.114\",\"email\":\"rwilliamson@dabvine.name\"},\n{\"id\":2392,\"first_name\":\"Nicole\",\"last_name\":\"Gardner\",\"country\":\"Argentina\",\"ip_address\":\"157.160.233.89\",\"email\":\"ngardner@yodoo.edu\"},\n{\"id\":2393,\"first_name\":\"George\",\"last_name\":\"Flores\",\"country\":\"Ukraine\",\"ip_address\":\"120.48.142.197\",\"email\":\"gflores@eadel.biz\"},\n{\"id\":2394,\"first_name\":\"Earl\",\"last_name\":\"Simpson\",\"country\":\"Faroe Islands\",\"ip_address\":\"156.27.176.65\",\"email\":\"esimpson@tagopia.gov\"},\n{\"id\":2395,\"first_name\":\"Philip\",\"last_name\":\"Greene\",\"country\":\"Saudia Arabia\",\"ip_address\":\"204.207.76.40\",\"email\":\"pgreene@voonte.edu\"},\n{\"id\":2396,\"first_name\":\"Brandon\",\"last_name\":\"Martinez\",\"country\":\"Latvia\",\"ip_address\":\"242.101.116.17\",\"email\":\"bmartinez@zoozzy.name\"},\n{\"id\":2397,\"first_name\":\"Dorothy\",\"last_name\":\"Oliver\",\"country\":\"Northern Mariana Islands\",\"ip_address\":\"104.126.110.53\",\"email\":\"doliver@blogxs.edu\"},\n{\"id\":2398,\"first_name\":\"Antonio\",\"last_name\":\"Morales\",\"country\":\"Afghanistan\",\"ip_address\":\"149.162.207.78\",\"email\":\"amorales@yotz.gov\"},\n{\"id\":2399,\"first_name\":\"Kenneth\",\"last_name\":\"Ward\",\"country\":\"Denmark\",\"ip_address\":\"124.162.12.213\",\"email\":\"kward@trudoo.net\"},\n{\"id\":2400,\"first_name\":\"Tammy\",\"last_name\":\"Harrison\",\"country\":\"Palau\",\"ip_address\":\"92.94.222.196\",\"email\":\"tharrison@fivechat.net\"},\n{\"id\":2401,\"first_name\":\"Peter\",\"last_name\":\"Hunt\",\"country\":\"Switzerland\",\"ip_address\":\"181.157.222.98\",\"email\":\"phunt@jabberstorm.org\"},\n{\"id\":2402,\"first_name\":\"Shirley\",\"last_name\":\"Wallace\",\"country\":\"Sierra Leone\",\"ip_address\":\"113.44.246.203\",\"email\":\"swallace@yotz.name\"},\n{\"id\":2403,\"first_name\":\"Alice\",\"last_name\":\"Hill\",\"country\":\"Lesotho\",\"ip_address\":\"140.57.106.219\",\"email\":\"ahill@mynte.net\"},\n{\"id\":2404,\"first_name\":\"Martha\",\"last_name\":\"Burns\",\"country\":\"New Zealand\",\"ip_address\":\"27.163.70.200\",\"email\":\"mburns@jabbertype.info\"},\n{\"id\":2405,\"first_name\":\"Denise\",\"last_name\":\"Jacobs\",\"country\":\"Andorra\",\"ip_address\":\"181.134.122.13\",\"email\":\"djacobs@meedoo.name\"},\n{\"id\":2406,\"first_name\":\"Victor\",\"last_name\":\"Wallace\",\"country\":\"Iceland\",\"ip_address\":\"138.248.97.61\",\"email\":\"vwallace@mydo.edu\"},\n{\"id\":2407,\"first_name\":\"Janet\",\"last_name\":\"Barnes\",\"country\":\"Dominican Republic\",\"ip_address\":\"29.230.57.240\",\"email\":\"jbarnes@jayo.biz\"},\n{\"id\":2408,\"first_name\":\"Bobby\",\"last_name\":\"Ford\",\"country\":\"Mexico\",\"ip_address\":\"49.37.74.65\",\"email\":\"bford@yakidoo.name\"},\n{\"id\":2409,\"first_name\":\"Tammy\",\"last_name\":\"Clark\",\"country\":\"Mongolia\",\"ip_address\":\"11.37.209.207\",\"email\":\"tclark@edgepulse.org\"},\n{\"id\":2410,\"first_name\":\"Jimmy\",\"last_name\":\"Russell\",\"country\":\"Sweden\",\"ip_address\":\"107.60.1.19\",\"email\":\"jrussell@roomm.net\"},\n{\"id\":2411,\"first_name\":\"Theresa\",\"last_name\":\"Gardner\",\"country\":\"Slovenia\",\"ip_address\":\"101.224.87.113\",\"email\":\"tgardner@yakitri.com\"},\n{\"id\":2412,\"first_name\":\"Stephen\",\"last_name\":\"Lee\",\"country\":\"Bolivia\",\"ip_address\":\"223.151.158.141\",\"email\":\"slee@jabbersphere.info\"},\n{\"id\":2413,\"first_name\":\"Shirley\",\"last_name\":\"Thompson\",\"country\":\"Yugoslavia\",\"ip_address\":\"109.79.163.107\",\"email\":\"sthompson@leexo.info\"},\n{\"id\":2414,\"first_name\":\"Daniel\",\"last_name\":\"Hanson\",\"country\":\"Saint Vincent and the Grenadines\",\"ip_address\":\"250.210.21.245\",\"email\":\"dhanson@buzzshare.com\"},\n{\"id\":2415,\"first_name\":\"Rose\",\"last_name\":\"Davis\",\"country\":\"Vanuatu\",\"ip_address\":\"35.236.152.223\",\"email\":\"rdavis@thoughtworks.com\"},\n{\"id\":2416,\"first_name\":\"Mary\",\"last_name\":\"Wagner\",\"country\":\"Haiti\",\"ip_address\":\"76.0.150.158\",\"email\":\"mwagner@oba.info\"},\n{\"id\":2417,\"first_name\":\"Rose\",\"last_name\":\"Washington\",\"country\":\"Bahamas\",\"ip_address\":\"112.28.7.68\",\"email\":\"rwashington@quinu.edu\"},\n{\"id\":2418,\"first_name\":\"Doris\",\"last_name\":\"Martin\",\"country\":\"Malaysia\",\"ip_address\":\"246.208.124.223\",\"email\":\"dmartin@demivee.gov\"},\n{\"id\":2419,\"first_name\":\"Beverly\",\"last_name\":\"Johnston\",\"country\":\"Bouvet Island\",\"ip_address\":\"150.175.64.155\",\"email\":\"bjohnston@riffpath.net\"},\n{\"id\":2420,\"first_name\":\"Harold\",\"last_name\":\"Jacobs\",\"country\":\"Bolivia\",\"ip_address\":\"219.88.243.88\",\"email\":\"hjacobs@jaxnation.name\"},\n{\"id\":2421,\"first_name\":\"Linda\",\"last_name\":\"Ryan\",\"country\":\"Guinea\",\"ip_address\":\"35.22.50.32\",\"email\":\"lryan@jetpulse.org\"},\n{\"id\":2422,\"first_name\":\"Brandon\",\"last_name\":\"Martinez\",\"country\":\"Trinidad and Tobago\",\"ip_address\":\"61.227.185.78\",\"email\":\"bmartinez@avamm.edu\"},\n{\"id\":2423,\"first_name\":\"Cynthia\",\"last_name\":\"Parker\",\"country\":\"Madagascar\",\"ip_address\":\"187.125.223.11\",\"email\":\"cparker@avavee.mil\"},\n{\"id\":2424,\"first_name\":\"Kathleen\",\"last_name\":\"Sims\",\"country\":\"Nicaragua\",\"ip_address\":\"179.104.164.208\",\"email\":\"ksims@wikivu.org\"},\n{\"id\":2425,\"first_name\":\"Edward\",\"last_name\":\"Fox\",\"country\":\"Solomon Islands\",\"ip_address\":\"120.114.94.204\",\"email\":\"efox@livefish.name\"},\n{\"id\":2426,\"first_name\":\"Steve\",\"last_name\":\"Marshall\",\"country\":\"Turkey\",\"ip_address\":\"203.50.219.46\",\"email\":\"smarshall@zooxo.info\"},\n{\"id\":2427,\"first_name\":\"James\",\"last_name\":\"Phillips\",\"country\":\"Saint Kitts and Nevis\",\"ip_address\":\"129.111.38.184\",\"email\":\"jphillips@abata.mil\"},\n{\"id\":2428,\"first_name\":\"Jack\",\"last_name\":\"Parker\",\"country\":\"Guinea-Bissau\",\"ip_address\":\"10.160.212.167\",\"email\":\"jparker@reallinks.net\"},\n{\"id\":2429,\"first_name\":\"Thomas\",\"last_name\":\"Romero\",\"country\":\"Venezuela\",\"ip_address\":\"181.71.51.146\",\"email\":\"tromero@zoonder.mil\"},\n{\"id\":2430,\"first_name\":\"Timothy\",\"last_name\":\"Cunningham\",\"country\":\"United Kingdom\",\"ip_address\":\"158.133.111.126\",\"email\":\"tcunningham@ainyx.mil\"},\n{\"id\":2431,\"first_name\":\"Denise\",\"last_name\":\"Armstrong\",\"country\":\"Saint Kitts and Nevis\",\"ip_address\":\"46.254.219.5\",\"email\":\"darmstrong@jabbersphere.com\"},\n{\"id\":2432,\"first_name\":\"Jean\",\"last_name\":\"Campbell\",\"country\":\"Barbados\",\"ip_address\":\"230.204.77.208\",\"email\":\"jcampbell@dynava.name\"},\n{\"id\":2433,\"first_name\":\"Paul\",\"last_name\":\"Rice\",\"country\":\"Maldives\",\"ip_address\":\"99.213.3.210\",\"email\":\"price@jayo.edu\"},\n{\"id\":2434,\"first_name\":\"Deborah\",\"last_name\":\"West\",\"country\":\"Panama\",\"ip_address\":\"245.236.245.16\",\"email\":\"dwest@zooveo.gov\"},\n{\"id\":2435,\"first_name\":\"Donna\",\"last_name\":\"Hicks\",\"country\":\"Samoa\",\"ip_address\":\"110.165.222.80\",\"email\":\"dhicks@jabbertype.mil\"},\n{\"id\":2436,\"first_name\":\"Willie\",\"last_name\":\"Gardner\",\"country\":\"Jersey\",\"ip_address\":\"174.54.250.29\",\"email\":\"wgardner@jaloo.net\"},\n{\"id\":2437,\"first_name\":\"Angela\",\"last_name\":\"Sanchez\",\"country\":\"Papua New Guinea\",\"ip_address\":\"183.218.62.82\",\"email\":\"asanchez@twimm.net\"},\n{\"id\":2438,\"first_name\":\"Charles\",\"last_name\":\"Fuller\",\"country\":\"Tuvalu\",\"ip_address\":\"248.29.225.125\",\"email\":\"cfuller@eabox.info\"},\n{\"id\":2439,\"first_name\":\"Emily\",\"last_name\":\"Lewis\",\"country\":\"Hungary\",\"ip_address\":\"193.33.249.89\",\"email\":\"elewis@jatri.com\"},\n{\"id\":2440,\"first_name\":\"Joyce\",\"last_name\":\"Hughes\",\"country\":\"Mauritius\",\"ip_address\":\"89.249.196.226\",\"email\":\"jhughes@flipbug.biz\"},\n{\"id\":2441,\"first_name\":\"Sara\",\"last_name\":\"Woods\",\"country\":\"Cocos (Keeling) Island\",\"ip_address\":\"195.193.110.64\",\"email\":\"swoods@realcube.edu\"},\n{\"id\":2442,\"first_name\":\"Brian\",\"last_name\":\"Hughes\",\"country\":\"Cook Islands\",\"ip_address\":\"201.113.120.233\",\"email\":\"bhughes@trupe.name\"},\n{\"id\":2443,\"first_name\":\"Brian\",\"last_name\":\"Owens\",\"country\":\"Marshall Islands\",\"ip_address\":\"27.104.212.51\",\"email\":\"bowens@quimba.gov\"},\n{\"id\":2444,\"first_name\":\"Theresa\",\"last_name\":\"Morrison\",\"country\":\"Kiribati\",\"ip_address\":\"111.108.97.56\",\"email\":\"tmorrison@dynava.com\"},\n{\"id\":2445,\"first_name\":\"Deborah\",\"last_name\":\"Foster\",\"country\":\"Ethiopia\",\"ip_address\":\"96.20.49.109\",\"email\":\"dfoster@riffpedia.edu\"},\n{\"id\":2446,\"first_name\":\"Rachel\",\"last_name\":\"Medina\",\"country\":\"Somalia\",\"ip_address\":\"34.219.129.38\",\"email\":\"rmedina@yakidoo.biz\"},\n{\"id\":2447,\"first_name\":\"Kathryn\",\"last_name\":\"Matthews\",\"country\":\"Nepal\",\"ip_address\":\"124.46.239.78\",\"email\":\"kmatthews@rhycero.com\"},\n{\"id\":2448,\"first_name\":\"Russell\",\"last_name\":\"Green\",\"country\":\"Liberia\",\"ip_address\":\"93.235.163.236\",\"email\":\"rgreen@skyvu.com\"},\n{\"id\":2449,\"first_name\":\"Angela\",\"last_name\":\"Banks\",\"country\":\"Wallis and Futuna Islands\",\"ip_address\":\"126.133.96.201\",\"email\":\"abanks@blogxs.name\"},\n{\"id\":2450,\"first_name\":\"Sandra\",\"last_name\":\"Thomas\",\"country\":\"Mexico\",\"ip_address\":\"47.39.128.169\",\"email\":\"sthomas@livepath.edu\"},\n{\"id\":2451,\"first_name\":\"Raymond\",\"last_name\":\"Weaver\",\"country\":\"Iran\",\"ip_address\":\"29.170.131.196\",\"email\":\"rweaver@trudoo.gov\"},\n{\"id\":2452,\"first_name\":\"Phyllis\",\"last_name\":\"Ruiz\",\"country\":\"Tajikistan\",\"ip_address\":\"69.172.198.190\",\"email\":\"pruiz@quinu.info\"},\n{\"id\":2453,\"first_name\":\"Clarence\",\"last_name\":\"Bryant\",\"country\":\"Eritrea\",\"ip_address\":\"2.190.185.12\",\"email\":\"cbryant@centimia.gov\"},\n{\"id\":2454,\"first_name\":\"Beverly\",\"last_name\":\"Garcia\",\"country\":\"Oman\",\"ip_address\":\"39.102.32.10\",\"email\":\"bgarcia@realbuzz.info\"},\n{\"id\":2455,\"first_name\":\"Douglas\",\"last_name\":\"Wright\",\"country\":\"Guinea-Bissau\",\"ip_address\":\"110.5.3.166\",\"email\":\"dwright@blogspan.name\"},\n{\"id\":2456,\"first_name\":\"Heather\",\"last_name\":\"Moore\",\"country\":\"Mozambique\",\"ip_address\":\"246.238.48.71\",\"email\":\"hmoore@jabbercube.com\"},\n{\"id\":2457,\"first_name\":\"Dorothy\",\"last_name\":\"Austin\",\"country\":\"Bahrain\",\"ip_address\":\"97.127.200.70\",\"email\":\"daustin@wordpedia.name\"},\n{\"id\":2458,\"first_name\":\"Catherine\",\"last_name\":\"Gonzales\",\"country\":\"Montserrat\",\"ip_address\":\"82.129.104.123\",\"email\":\"cgonzales@twitterbeat.mil\"},\n{\"id\":2459,\"first_name\":\"Matthew\",\"last_name\":\"Dunn\",\"country\":\"Belarus\",\"ip_address\":\"160.225.125.141\",\"email\":\"mdunn@nlounge.name\"},\n{\"id\":2460,\"first_name\":\"Jimmy\",\"last_name\":\"Bowman\",\"country\":\"Maldives\",\"ip_address\":\"185.183.101.116\",\"email\":\"jbowman@centidel.com\"},\n{\"id\":2461,\"first_name\":\"John\",\"last_name\":\"Nguyen\",\"country\":\"Algeria\",\"ip_address\":\"109.4.76.57\",\"email\":\"jnguyen@skidoo.biz\"},\n{\"id\":2462,\"first_name\":\"Marie\",\"last_name\":\"Harvey\",\"country\":\"Bahrain\",\"ip_address\":\"44.108.116.17\",\"email\":\"mharvey@skyvu.mil\"},\n{\"id\":2463,\"first_name\":\"Amanda\",\"last_name\":\"Knight\",\"country\":\"Dominica\",\"ip_address\":\"104.11.246.217\",\"email\":\"aknight@meemm.biz\"},\n{\"id\":2464,\"first_name\":\"Janet\",\"last_name\":\"Reid\",\"country\":\"Sudan\",\"ip_address\":\"79.1.243.193\",\"email\":\"jreid@photojam.biz\"},\n{\"id\":2465,\"first_name\":\"Andrew\",\"last_name\":\"Ross\",\"country\":\"Dominican Republic\",\"ip_address\":\"240.33.122.39\",\"email\":\"aross@quaxo.info\"},\n{\"id\":2466,\"first_name\":\"Jose\",\"last_name\":\"Torres\",\"country\":\"Svalbard and Jan Mayen Islands\",\"ip_address\":\"226.174.201.77\",\"email\":\"jtorres@babbleopia.net\"},\n{\"id\":2467,\"first_name\":\"Ruth\",\"last_name\":\"Baker\",\"country\":\"Tunisia\",\"ip_address\":\"54.68.148.151\",\"email\":\"rbaker@kare.org\"},\n{\"id\":2468,\"first_name\":\"Jerry\",\"last_name\":\"Edwards\",\"country\":\"Iran\",\"ip_address\":\"142.69.32.6\",\"email\":\"jedwards@topicware.edu\"},\n{\"id\":2469,\"first_name\":\"Maria\",\"last_name\":\"Harper\",\"country\":\"Belarus\",\"ip_address\":\"207.81.76.242\",\"email\":\"mharper@quaxo.gov\"},\n{\"id\":2470,\"first_name\":\"Earl\",\"last_name\":\"Reid\",\"country\":\"Cocos (Keeling) Island\",\"ip_address\":\"188.133.180.103\",\"email\":\"ereid@eayo.mil\"},\n{\"id\":2471,\"first_name\":\"Lois\",\"last_name\":\"Garza\",\"country\":\"Turkmenistan\",\"ip_address\":\"159.19.66.41\",\"email\":\"lgarza@oyoloo.info\"},\n{\"id\":2472,\"first_name\":\"Kathleen\",\"last_name\":\"Lawson\",\"country\":\"Turkmenistan\",\"ip_address\":\"63.171.39.211\",\"email\":\"klawson@livetube.gov\"},\n{\"id\":2473,\"first_name\":\"William\",\"last_name\":\"Hudson\",\"country\":\"Korea, North\",\"ip_address\":\"126.221.93.243\",\"email\":\"whudson@skyble.gov\"},\n{\"id\":2474,\"first_name\":\"Kathryn\",\"last_name\":\"Brooks\",\"country\":\"Sri Lanka\",\"ip_address\":\"151.26.110.122\",\"email\":\"kbrooks@realblab.com\"},\n{\"id\":2475,\"first_name\":\"Jennifer\",\"last_name\":\"Green\",\"country\":\"Luxembourg\",\"ip_address\":\"90.28.132.36\",\"email\":\"jgreen@trudeo.com\"},\n{\"id\":2476,\"first_name\":\"Jeremy\",\"last_name\":\"Meyer\",\"country\":\"Seychelles\",\"ip_address\":\"44.6.43.105\",\"email\":\"jmeyer@ozu.edu\"},\n{\"id\":2477,\"first_name\":\"Bruce\",\"last_name\":\"Lane\",\"country\":\"Myanmar\",\"ip_address\":\"22.80.96.13\",\"email\":\"blane@feedfire.mil\"},\n{\"id\":2478,\"first_name\":\"David\",\"last_name\":\"Greene\",\"country\":\"Samoa\",\"ip_address\":\"127.120.68.238\",\"email\":\"dgreene@avaveo.mil\"},\n{\"id\":2479,\"first_name\":\"Lois\",\"last_name\":\"Hanson\",\"country\":\"Iran\",\"ip_address\":\"60.57.152.230\",\"email\":\"lhanson@wordpedia.org\"},\n{\"id\":2480,\"first_name\":\"Albert\",\"last_name\":\"Mills\",\"country\":\"Cambodia\",\"ip_address\":\"164.138.204.33\",\"email\":\"amills@buzzshare.net\"},\n{\"id\":2481,\"first_name\":\"Tammy\",\"last_name\":\"Ward\",\"country\":\"Central African Republic\",\"ip_address\":\"15.119.88.11\",\"email\":\"tward@babbleset.biz\"},\n{\"id\":2482,\"first_name\":\"Marilyn\",\"last_name\":\"Collins\",\"country\":\"United States of America\",\"ip_address\":\"215.74.107.219\",\"email\":\"mcollins@zooveo.org\"},\n{\"id\":2483,\"first_name\":\"Steve\",\"last_name\":\"Watkins\",\"country\":\"Timor-Leste\",\"ip_address\":\"57.160.212.5\",\"email\":\"swatkins@meevee.org\"},\n{\"id\":2484,\"first_name\":\"Stephanie\",\"last_name\":\"Lawrence\",\"country\":\"Niue\",\"ip_address\":\"22.191.36.184\",\"email\":\"slawrence@yombu.gov\"},\n{\"id\":2485,\"first_name\":\"Betty\",\"last_name\":\"Payne\",\"country\":\"Benin\",\"ip_address\":\"40.6.51.176\",\"email\":\"bpayne@photofeed.com\"},\n{\"id\":2486,\"first_name\":\"Sandra\",\"last_name\":\"Kim\",\"country\":\"Netherlands Antilles\",\"ip_address\":\"75.177.162.214\",\"email\":\"skim@tagtune.info\"},\n{\"id\":2487,\"first_name\":\"Kathleen\",\"last_name\":\"Parker\",\"country\":\"Togo\",\"ip_address\":\"218.30.48.215\",\"email\":\"kparker@browsecat.info\"},\n{\"id\":2488,\"first_name\":\"Joan\",\"last_name\":\"Riley\",\"country\":\"Slovakia\",\"ip_address\":\"235.196.164.13\",\"email\":\"jriley@shufflester.net\"},\n{\"id\":2489,\"first_name\":\"Carlos\",\"last_name\":\"Garza\",\"country\":\"Liberia\",\"ip_address\":\"35.138.55.64\",\"email\":\"cgarza@yakitri.mil\"},\n{\"id\":2490,\"first_name\":\"Gregory\",\"last_name\":\"Fowler\",\"country\":\"Russia\",\"ip_address\":\"0.15.97.18\",\"email\":\"gfowler@lazz.info\"},\n{\"id\":2491,\"first_name\":\"Wanda\",\"last_name\":\"Richards\",\"country\":\"Turkey\",\"ip_address\":\"111.88.89.39\",\"email\":\"wrichards@innoz.com\"},\n{\"id\":2492,\"first_name\":\"Pamela\",\"last_name\":\"Rivera\",\"country\":\"Bahamas\",\"ip_address\":\"251.202.218.31\",\"email\":\"privera@ntag.mil\"},\n{\"id\":2493,\"first_name\":\"Debra\",\"last_name\":\"King\",\"country\":\"Serbia\",\"ip_address\":\"13.42.61.235\",\"email\":\"dking@trupe.gov\"},\n{\"id\":2494,\"first_name\":\"Sandra\",\"last_name\":\"Ortiz\",\"country\":\"Belize\",\"ip_address\":\"190.224.50.254\",\"email\":\"sortiz@trunyx.com\"},\n{\"id\":2495,\"first_name\":\"Patrick\",\"last_name\":\"Webb\",\"country\":\"Japan\",\"ip_address\":\"113.17.106.50\",\"email\":\"pwebb@divape.org\"},\n{\"id\":2496,\"first_name\":\"Maria\",\"last_name\":\"Ellis\",\"country\":\"Zambia\",\"ip_address\":\"114.12.162.40\",\"email\":\"mellis@ainyx.name\"},\n{\"id\":2497,\"first_name\":\"Henry\",\"last_name\":\"Ruiz\",\"country\":\"Mauritania\",\"ip_address\":\"70.243.59.138\",\"email\":\"hruiz@zoomcast.biz\"},\n{\"id\":2498,\"first_name\":\"Jerry\",\"last_name\":\"Arnold\",\"country\":\"USSR\",\"ip_address\":\"243.31.163.52\",\"email\":\"jarnold@demizz.com\"},\n{\"id\":2499,\"first_name\":\"Kelly\",\"last_name\":\"Mason\",\"country\":\"Japan\",\"ip_address\":\"103.181.162.90\",\"email\":\"kmason@buzzbean.com\"},\n{\"id\":2500,\"first_name\":\"Donna\",\"last_name\":\"Mitchell\",\"country\":\"Hungary\",\"ip_address\":\"164.245.111.167\",\"email\":\"dmitchell@zooxo.org\"},\n{\"id\":2501,\"first_name\":\"Mary\",\"last_name\":\"Kim\",\"country\":\"Angola\",\"ip_address\":\"113.155.249.57\",\"email\":\"mkim@dynabox.net\"},\n{\"id\":2502,\"first_name\":\"Barbara\",\"last_name\":\"Burton\",\"country\":\"Mauritius\",\"ip_address\":\"231.173.214.150\",\"email\":\"bburton@skilith.edu\"},\n{\"id\":2503,\"first_name\":\"Eric\",\"last_name\":\"Palmer\",\"country\":\"Iran\",\"ip_address\":\"25.19.7.20\",\"email\":\"epalmer@voolia.edu\"},\n{\"id\":2504,\"first_name\":\"Linda\",\"last_name\":\"Ortiz\",\"country\":\"Armenia\",\"ip_address\":\"223.183.32.109\",\"email\":\"lortiz@teklist.info\"},\n{\"id\":2505,\"first_name\":\"Teresa\",\"last_name\":\"Burton\",\"country\":\"Latvia\",\"ip_address\":\"3.3.137.138\",\"email\":\"tburton@voolith.gov\"},\n{\"id\":2506,\"first_name\":\"Victor\",\"last_name\":\"Carr\",\"country\":\"Ghana\",\"ip_address\":\"202.107.59.70\",\"email\":\"vcarr@zoonoodle.org\"},\n{\"id\":2507,\"first_name\":\"Kenneth\",\"last_name\":\"Reynolds\",\"country\":\"Djibouti\",\"ip_address\":\"94.156.56.230\",\"email\":\"kreynolds@trilia.org\"},\n{\"id\":2508,\"first_name\":\"Victor\",\"last_name\":\"Harrison\",\"country\":\"Czech Republic\",\"ip_address\":\"182.0.103.165\",\"email\":\"vharrison@oodoo.name\"},\n{\"id\":2509,\"first_name\":\"Larry\",\"last_name\":\"Freeman\",\"country\":\"Uganda\",\"ip_address\":\"11.58.111.66\",\"email\":\"lfreeman@zazio.name\"},\n{\"id\":2510,\"first_name\":\"Harry\",\"last_name\":\"Jenkins\",\"country\":\"India\",\"ip_address\":\"46.97.194.199\",\"email\":\"hjenkins@edgetag.org\"},\n{\"id\":2511,\"first_name\":\"Kenneth\",\"last_name\":\"Anderson\",\"country\":\"Lebanon\",\"ip_address\":\"147.136.120.235\",\"email\":\"kanderson@kazio.biz\"},\n{\"id\":2512,\"first_name\":\"Kathy\",\"last_name\":\"Duncan\",\"country\":\"French Southern Territories\",\"ip_address\":\"103.98.110.43\",\"email\":\"kduncan@kayveo.biz\"},\n{\"id\":2513,\"first_name\":\"Sarah\",\"last_name\":\"Alexander\",\"country\":\"Antigua and Barbuda\",\"ip_address\":\"253.193.226.229\",\"email\":\"salexander@shuffletag.info\"},\n{\"id\":2514,\"first_name\":\"Pamela\",\"last_name\":\"Rivera\",\"country\":\"Guinea\",\"ip_address\":\"76.145.1.164\",\"email\":\"privera@youspan.mil\"},\n{\"id\":2515,\"first_name\":\"Jeremy\",\"last_name\":\"Adams\",\"country\":\"Puerto Rico\",\"ip_address\":\"52.207.50.2\",\"email\":\"jadams@innotype.biz\"},\n{\"id\":2516,\"first_name\":\"Marie\",\"last_name\":\"Cooper\",\"country\":\"Saint Pierre and Miquelon\",\"ip_address\":\"214.251.198.22\",\"email\":\"mcooper@yambee.info\"},\n{\"id\":2517,\"first_name\":\"Janice\",\"last_name\":\"Little\",\"country\":\"Georgia\",\"ip_address\":\"201.11.62.179\",\"email\":\"jlittle@ntag.gov\"},\n{\"id\":2518,\"first_name\":\"Christopher\",\"last_name\":\"Riley\",\"country\":\"Bouvet Island\",\"ip_address\":\"48.241.51.220\",\"email\":\"criley@aimbo.biz\"},\n{\"id\":2519,\"first_name\":\"Justin\",\"last_name\":\"Ramirez\",\"country\":\"South Georgia and the South Sandwich Islands\",\"ip_address\":\"48.142.62.252\",\"email\":\"jramirez@flashdog.biz\"},\n{\"id\":2520,\"first_name\":\"Brenda\",\"last_name\":\"Richards\",\"country\":\"Saint Pierre and Miquelon\",\"ip_address\":\"92.48.174.118\",\"email\":\"brichards@mydeo.gov\"},\n{\"id\":2521,\"first_name\":\"Sean\",\"last_name\":\"Austin\",\"country\":\"Hong Kong\",\"ip_address\":\"186.138.131.254\",\"email\":\"saustin@gigazoom.mil\"},\n{\"id\":2522,\"first_name\":\"Frank\",\"last_name\":\"Ross\",\"country\":\"Timor-Leste\",\"ip_address\":\"109.157.131.19\",\"email\":\"fross@abata.name\"},\n{\"id\":2523,\"first_name\":\"Susan\",\"last_name\":\"Harvey\",\"country\":\"San Marino\",\"ip_address\":\"104.230.185.160\",\"email\":\"sharvey@fliptune.com\"},\n{\"id\":2524,\"first_name\":\"Steve\",\"last_name\":\"Riley\",\"country\":\"Papua New Guinea\",\"ip_address\":\"91.73.194.188\",\"email\":\"sriley@divavu.mil\"},\n{\"id\":2525,\"first_name\":\"Joe\",\"last_name\":\"Vasquez\",\"country\":\"Germany\",\"ip_address\":\"12.151.108.138\",\"email\":\"jvasquez@snaptags.net\"},\n{\"id\":2526,\"first_name\":\"Mildred\",\"last_name\":\"Marshall\",\"country\":\"Netherlands Antilles\",\"ip_address\":\"91.140.55.122\",\"email\":\"mmarshall@wikivu.name\"},\n{\"id\":2527,\"first_name\":\"Jacqueline\",\"last_name\":\"Pierce\",\"country\":\"Slovakia\",\"ip_address\":\"11.238.190.211\",\"email\":\"jpierce@trunyx.edu\"},\n{\"id\":2528,\"first_name\":\"Alice\",\"last_name\":\"Diaz\",\"country\":\"Micronesia\",\"ip_address\":\"87.240.138.184\",\"email\":\"adiaz@twiyo.biz\"},\n{\"id\":2529,\"first_name\":\"Ernest\",\"last_name\":\"Moreno\",\"country\":\"French Polynesia\",\"ip_address\":\"46.169.213.235\",\"email\":\"emoreno@aimbu.org\"},\n{\"id\":2530,\"first_name\":\"Nancy\",\"last_name\":\"Andrews\",\"country\":\"Pakistan\",\"ip_address\":\"94.56.127.151\",\"email\":\"nandrews@zooveo.com\"},\n{\"id\":2531,\"first_name\":\"Betty\",\"last_name\":\"Peterson\",\"country\":\"Cayman Islands\",\"ip_address\":\"82.72.91.95\",\"email\":\"bpeterson@twimbo.com\"},\n{\"id\":2532,\"first_name\":\"Helen\",\"last_name\":\"Warren\",\"country\":\"Somalia\",\"ip_address\":\"190.195.204.107\",\"email\":\"hwarren@skyble.info\"},\n{\"id\":2533,\"first_name\":\"Louise\",\"last_name\":\"Reed\",\"country\":\"Zambia\",\"ip_address\":\"152.248.59.70\",\"email\":\"lreed@realbuzz.biz\"},\n{\"id\":2534,\"first_name\":\"Mildred\",\"last_name\":\"Chapman\",\"country\":\"Egypt\",\"ip_address\":\"178.246.238.167\",\"email\":\"mchapman@livepath.edu\"},\n{\"id\":2535,\"first_name\":\"Brandon\",\"last_name\":\"Evans\",\"country\":\"Mauritius\",\"ip_address\":\"150.69.251.157\",\"email\":\"bevans@meetz.org\"},\n{\"id\":2536,\"first_name\":\"Douglas\",\"last_name\":\"Greene\",\"country\":\"Northern Mariana Islands\",\"ip_address\":\"149.93.77.106\",\"email\":\"dgreene@fiveclub.com\"},\n{\"id\":2537,\"first_name\":\"Joyce\",\"last_name\":\"Austin\",\"country\":\"French Guiana\",\"ip_address\":\"83.87.5.62\",\"email\":\"jaustin@meeveo.biz\"},\n{\"id\":2538,\"first_name\":\"Bobby\",\"last_name\":\"Howell\",\"country\":\"Nicaragua\",\"ip_address\":\"223.219.121.5\",\"email\":\"bhowell@ainyx.com\"},\n{\"id\":2539,\"first_name\":\"Heather\",\"last_name\":\"Matthews\",\"country\":\"Poland\",\"ip_address\":\"58.103.35.60\",\"email\":\"hmatthews@twimm.edu\"},\n{\"id\":2540,\"first_name\":\"Eugene\",\"last_name\":\"Mitchell\",\"country\":\"US Minor Outlying Islands\",\"ip_address\":\"82.48.128.199\",\"email\":\"emitchell@oodoo.edu\"},\n{\"id\":2541,\"first_name\":\"Debra\",\"last_name\":\"Hudson\",\"country\":\"Croatia\",\"ip_address\":\"250.101.9.2\",\"email\":\"dhudson@jamia.name\"},\n{\"id\":2542,\"first_name\":\"Christina\",\"last_name\":\"Sanders\",\"country\":\"Christmas Island\",\"ip_address\":\"161.187.202.145\",\"email\":\"csanders@eamia.info\"},\n{\"id\":2543,\"first_name\":\"Jerry\",\"last_name\":\"Knight\",\"country\":\"New Zealand\",\"ip_address\":\"28.253.26.97\",\"email\":\"jknight@trupe.name\"},\n{\"id\":2544,\"first_name\":\"Janice\",\"last_name\":\"Nelson\",\"country\":\"Venezuela\",\"ip_address\":\"157.171.181.174\",\"email\":\"jnelson@dabshots.mil\"},\n{\"id\":2545,\"first_name\":\"Brandon\",\"last_name\":\"Medina\",\"country\":\"Dominica\",\"ip_address\":\"181.39.119.148\",\"email\":\"bmedina@gabtune.net\"},\n{\"id\":2546,\"first_name\":\"Kathryn\",\"last_name\":\"Owens\",\"country\":\"Puerto Rico\",\"ip_address\":\"137.68.177.41\",\"email\":\"kowens@youbridge.mil\"},\n{\"id\":2547,\"first_name\":\"Eugene\",\"last_name\":\"Ferguson\",\"country\":\"Lithuania\",\"ip_address\":\"201.129.109.243\",\"email\":\"eferguson@tazz.com\"},\n{\"id\":2548,\"first_name\":\"Alan\",\"last_name\":\"Lopez\",\"country\":\"Kenya\",\"ip_address\":\"43.68.180.12\",\"email\":\"alopez@skyndu.info\"},\n{\"id\":2549,\"first_name\":\"Rose\",\"last_name\":\"Bryant\",\"country\":\"Saint Kitts and Nevis\",\"ip_address\":\"194.74.199.237\",\"email\":\"rbryant@kazu.org\"},\n{\"id\":2550,\"first_name\":\"Michael\",\"last_name\":\"Ferguson\",\"country\":\"Guyana\",\"ip_address\":\"71.123.104.177\",\"email\":\"mferguson@riffpath.mil\"},\n{\"id\":2551,\"first_name\":\"Henry\",\"last_name\":\"Allen\",\"country\":\"Guatemala\",\"ip_address\":\"43.98.60.6\",\"email\":\"hallen@demimbu.gov\"},\n{\"id\":2552,\"first_name\":\"Joseph\",\"last_name\":\"Hernandez\",\"country\":\"Pitcairn Island\",\"ip_address\":\"73.224.218.160\",\"email\":\"jhernandez@dabshots.info\"},\n{\"id\":2553,\"first_name\":\"Larry\",\"last_name\":\"Knight\",\"country\":\"Benin\",\"ip_address\":\"63.189.26.191\",\"email\":\"lknight@feedfire.name\"},\n{\"id\":2554,\"first_name\":\"Jonathan\",\"last_name\":\"Webb\",\"country\":\"Argentina\",\"ip_address\":\"190.124.221.190\",\"email\":\"jwebb@dynabox.net\"},\n{\"id\":2555,\"first_name\":\"Phillip\",\"last_name\":\"Lee\",\"country\":\"Myanmar\",\"ip_address\":\"31.34.152.134\",\"email\":\"plee@devshare.biz\"},\n{\"id\":2556,\"first_name\":\"Joyce\",\"last_name\":\"Burke\",\"country\":\"Switzerland\",\"ip_address\":\"230.224.67.31\",\"email\":\"jburke@katz.org\"},\n{\"id\":2557,\"first_name\":\"Theresa\",\"last_name\":\"Fisher\",\"country\":\"Tanzania\",\"ip_address\":\"167.64.87.116\",\"email\":\"tfisher@midel.biz\"},\n{\"id\":2558,\"first_name\":\"Antonio\",\"last_name\":\"Ford\",\"country\":\"China\",\"ip_address\":\"122.63.232.85\",\"email\":\"aford@skipstorm.edu\"},\n{\"id\":2559,\"first_name\":\"Charles\",\"last_name\":\"Bishop\",\"country\":\"British Virgin Islands\",\"ip_address\":\"26.225.125.124\",\"email\":\"cbishop@meevee.edu\"},\n{\"id\":2560,\"first_name\":\"Cheryl\",\"last_name\":\"Chavez\",\"country\":\"Zimbabwe\",\"ip_address\":\"86.77.149.110\",\"email\":\"cchavez@trunyx.biz\"},\n{\"id\":2561,\"first_name\":\"Nicole\",\"last_name\":\"Richards\",\"country\":\"South Georgia and the South Sandwich Islands\",\"ip_address\":\"35.71.247.75\",\"email\":\"nrichards@chatterpoint.com\"},\n{\"id\":2562,\"first_name\":\"Janet\",\"last_name\":\"Coleman\",\"country\":\"Somalia\",\"ip_address\":\"88.93.181.236\",\"email\":\"jcoleman@kanoodle.com\"},\n{\"id\":2563,\"first_name\":\"Arthur\",\"last_name\":\"Myers\",\"country\":\"Turkmenistan\",\"ip_address\":\"34.13.170.120\",\"email\":\"amyers@mynte.net\"},\n{\"id\":2564,\"first_name\":\"Emily\",\"last_name\":\"Foster\",\"country\":\"Indonesia\",\"ip_address\":\"188.204.25.116\",\"email\":\"efoster@meedoo.mil\"},\n{\"id\":2565,\"first_name\":\"Aaron\",\"last_name\":\"Foster\",\"country\":\"Saudia Arabia\",\"ip_address\":\"20.156.27.161\",\"email\":\"afoster@kazu.mil\"},\n{\"id\":2566,\"first_name\":\"Anthony\",\"last_name\":\"Holmes\",\"country\":\"San Marino\",\"ip_address\":\"81.243.188.94\",\"email\":\"aholmes@dabjam.com\"},\n{\"id\":2567,\"first_name\":\"Todd\",\"last_name\":\"Harper\",\"country\":\"Egypt\",\"ip_address\":\"18.190.142.213\",\"email\":\"tharper@fadeo.info\"},\n{\"id\":2568,\"first_name\":\"Norma\",\"last_name\":\"Frazier\",\"country\":\"Saint Lucia\",\"ip_address\":\"106.2.251.254\",\"email\":\"nfrazier@devpoint.biz\"},\n{\"id\":2569,\"first_name\":\"Jonathan\",\"last_name\":\"Stanley\",\"country\":\"Monaco\",\"ip_address\":\"250.28.177.171\",\"email\":\"jstanley@skajo.biz\"},\n{\"id\":2570,\"first_name\":\"Martha\",\"last_name\":\"Wright\",\"country\":\"Guyana\",\"ip_address\":\"241.50.215.28\",\"email\":\"mwright@buzzshare.net\"},\n{\"id\":2571,\"first_name\":\"Anne\",\"last_name\":\"Myers\",\"country\":\"Guam\",\"ip_address\":\"122.28.87.176\",\"email\":\"amyers@katz.gov\"},\n{\"id\":2572,\"first_name\":\"Jimmy\",\"last_name\":\"Warren\",\"country\":\"United States Virgin Islands\",\"ip_address\":\"235.219.124.232\",\"email\":\"jwarren@zava.net\"},\n{\"id\":2573,\"first_name\":\"Clarence\",\"last_name\":\"Richards\",\"country\":\"Togo\",\"ip_address\":\"240.1.54.196\",\"email\":\"crichards@ntags.info\"},\n{\"id\":2574,\"first_name\":\"Cheryl\",\"last_name\":\"Murphy\",\"country\":\"Tokelau\",\"ip_address\":\"52.125.232.198\",\"email\":\"cmurphy@browseblab.com\"},\n{\"id\":2575,\"first_name\":\"Justin\",\"last_name\":\"Wood\",\"country\":\"Laos\",\"ip_address\":\"73.108.204.93\",\"email\":\"jwood@jayo.name\"},\n{\"id\":2576,\"first_name\":\"Fred\",\"last_name\":\"Bishop\",\"country\":\"Netherlands Antilles\",\"ip_address\":\"24.79.138.116\",\"email\":\"fbishop@mybuzz.mil\"},\n{\"id\":2577,\"first_name\":\"Christine\",\"last_name\":\"Peters\",\"country\":\"Saint Kitts and Nevis\",\"ip_address\":\"185.143.70.214\",\"email\":\"cpeters@jaxnation.name\"},\n{\"id\":2578,\"first_name\":\"Kelly\",\"last_name\":\"Walker\",\"country\":\"Serbia\",\"ip_address\":\"89.123.63.145\",\"email\":\"kwalker@zoombox.biz\"},\n{\"id\":2579,\"first_name\":\"Gloria\",\"last_name\":\"Ferguson\",\"country\":\"Botswana\",\"ip_address\":\"7.195.28.131\",\"email\":\"gferguson@snaptags.edu\"},\n{\"id\":2580,\"first_name\":\"Jesse\",\"last_name\":\"Bradley\",\"country\":\"Saint Kitts and Nevis\",\"ip_address\":\"172.197.155.210\",\"email\":\"jbradley@camimbo.net\"},\n{\"id\":2581,\"first_name\":\"Adam\",\"last_name\":\"Tucker\",\"country\":\"Cuba\",\"ip_address\":\"94.68.84.156\",\"email\":\"atucker@shuffledrive.mil\"},\n{\"id\":2582,\"first_name\":\"Paula\",\"last_name\":\"Burke\",\"country\":\"Japan\",\"ip_address\":\"194.169.206.8\",\"email\":\"pburke@skalith.biz\"},\n{\"id\":2583,\"first_name\":\"Clarence\",\"last_name\":\"Ferguson\",\"country\":\"Netherlands\",\"ip_address\":\"134.97.248.237\",\"email\":\"cferguson@voonyx.name\"},\n{\"id\":2584,\"first_name\":\"Elizabeth\",\"last_name\":\"Moore\",\"country\":\"Angola\",\"ip_address\":\"74.55.73.30\",\"email\":\"emoore@brightdog.info\"},\n{\"id\":2585,\"first_name\":\"Jane\",\"last_name\":\"Mcdonald\",\"country\":\"Lithuania\",\"ip_address\":\"106.95.84.0\",\"email\":\"jmcdonald@layo.edu\"},\n{\"id\":2586,\"first_name\":\"Frances\",\"last_name\":\"Bowman\",\"country\":\"Gabon\",\"ip_address\":\"130.243.59.218\",\"email\":\"fbowman@dynazzy.com\"},\n{\"id\":2587,\"first_name\":\"Mildred\",\"last_name\":\"White\",\"country\":\"Kazakhstan\",\"ip_address\":\"119.205.24.119\",\"email\":\"mwhite@twitterworks.org\"},\n{\"id\":2588,\"first_name\":\"Joseph\",\"last_name\":\"Gutierrez\",\"country\":\"Suriname\",\"ip_address\":\"23.147.53.25\",\"email\":\"jgutierrez@quatz.org\"},\n{\"id\":2589,\"first_name\":\"Adam\",\"last_name\":\"Young\",\"country\":\"Eritrea\",\"ip_address\":\"2.128.47.204\",\"email\":\"ayoung@tazz.info\"},\n{\"id\":2590,\"first_name\":\"Alice\",\"last_name\":\"Moore\",\"country\":\"Netherlands Antilles\",\"ip_address\":\"66.6.104.54\",\"email\":\"amoore@twimbo.edu\"},\n{\"id\":2591,\"first_name\":\"Nancy\",\"last_name\":\"Hudson\",\"country\":\"Denmark\",\"ip_address\":\"27.199.196.141\",\"email\":\"nhudson@katz.info\"},\n{\"id\":2592,\"first_name\":\"Christopher\",\"last_name\":\"Rivera\",\"country\":\"Western Sahara\",\"ip_address\":\"184.146.10.87\",\"email\":\"crivera@skyvu.org\"},\n{\"id\":2593,\"first_name\":\"Dennis\",\"last_name\":\"Riley\",\"country\":\"Australia\",\"ip_address\":\"137.161.131.222\",\"email\":\"driley@leenti.mil\"},\n{\"id\":2594,\"first_name\":\"Ronald\",\"last_name\":\"Simmons\",\"country\":\"Zambia\",\"ip_address\":\"131.121.111.228\",\"email\":\"rsimmons@izio.gov\"},\n{\"id\":2595,\"first_name\":\"Larry\",\"last_name\":\"Warren\",\"country\":\"Estonia\",\"ip_address\":\"24.159.202.220\",\"email\":\"lwarren@linkbuzz.mil\"},\n{\"id\":2596,\"first_name\":\"Betty\",\"last_name\":\"Simpson\",\"country\":\"Monaco\",\"ip_address\":\"85.39.200.27\",\"email\":\"bsimpson@realfire.edu\"},\n{\"id\":2597,\"first_name\":\"Stephanie\",\"last_name\":\"Gibson\",\"country\":\"Canada\",\"ip_address\":\"165.97.184.218\",\"email\":\"sgibson@photobean.biz\"},\n{\"id\":2598,\"first_name\":\"Billy\",\"last_name\":\"Reed\",\"country\":\"Singapore\",\"ip_address\":\"179.207.252.166\",\"email\":\"breed@jayo.edu\"},\n{\"id\":2599,\"first_name\":\"Nicholas\",\"last_name\":\"Foster\",\"country\":\"Kuwait\",\"ip_address\":\"111.3.76.146\",\"email\":\"nfoster@kwimbee.gov\"},\n{\"id\":2600,\"first_name\":\"Andrea\",\"last_name\":\"Graham\",\"country\":\"Lebanon\",\"ip_address\":\"137.4.89.211\",\"email\":\"agraham@kamba.com\"},\n{\"id\":2601,\"first_name\":\"Diane\",\"last_name\":\"Rose\",\"country\":\"Falkland Islands (Malvinas)\",\"ip_address\":\"220.125.160.12\",\"email\":\"drose@ainyx.com\"},\n{\"id\":2602,\"first_name\":\"Sara\",\"last_name\":\"Peters\",\"country\":\"Belarus\",\"ip_address\":\"76.174.114.192\",\"email\":\"speters@tambee.gov\"},\n{\"id\":2603,\"first_name\":\"Jerry\",\"last_name\":\"Boyd\",\"country\":\"Azerbaijan\",\"ip_address\":\"161.113.98.237\",\"email\":\"jboyd@rhynyx.com\"},\n{\"id\":2604,\"first_name\":\"Catherine\",\"last_name\":\"Little\",\"country\":\"Uganda\",\"ip_address\":\"86.120.224.182\",\"email\":\"clittle@devify.name\"},\n{\"id\":2605,\"first_name\":\"Susan\",\"last_name\":\"Kelley\",\"country\":\"Vietnam\",\"ip_address\":\"152.198.20.222\",\"email\":\"skelley@chatterbridge.name\"},\n{\"id\":2606,\"first_name\":\"Peter\",\"last_name\":\"Ramos\",\"country\":\"Trinidad and Tobago\",\"ip_address\":\"167.171.191.245\",\"email\":\"pramos@thoughtmix.name\"},\n{\"id\":2607,\"first_name\":\"Billy\",\"last_name\":\"Mason\",\"country\":\"Maldives\",\"ip_address\":\"211.207.27.45\",\"email\":\"bmason@roomm.gov\"},\n{\"id\":2608,\"first_name\":\"Gloria\",\"last_name\":\"Barnes\",\"country\":\"Mali\",\"ip_address\":\"186.206.9.210\",\"email\":\"gbarnes@ooba.name\"},\n{\"id\":2609,\"first_name\":\"Edward\",\"last_name\":\"Watson\",\"country\":\"Kyrgyzstan\",\"ip_address\":\"100.171.177.83\",\"email\":\"ewatson@kwimbee.name\"},\n{\"id\":2610,\"first_name\":\"Deborah\",\"last_name\":\"Simpson\",\"country\":\"Chile\",\"ip_address\":\"80.200.80.19\",\"email\":\"dsimpson@yodel.biz\"},\n{\"id\":2611,\"first_name\":\"Frank\",\"last_name\":\"Myers\",\"country\":\"Kiribati\",\"ip_address\":\"81.236.131.37\",\"email\":\"fmyers@gabcube.info\"},\n{\"id\":2612,\"first_name\":\"Deborah\",\"last_name\":\"Burke\",\"country\":\"Honduras\",\"ip_address\":\"78.215.223.86\",\"email\":\"dburke@pixonyx.net\"},\n{\"id\":2613,\"first_name\":\"Jose\",\"last_name\":\"Rose\",\"country\":\"Indonesia\",\"ip_address\":\"65.47.31.201\",\"email\":\"jrose@layo.org\"},\n{\"id\":2614,\"first_name\":\"Edward\",\"last_name\":\"Nichols\",\"country\":\"Iceland\",\"ip_address\":\"14.243.178.43\",\"email\":\"enichols@flashset.org\"},\n{\"id\":2615,\"first_name\":\"Robin\",\"last_name\":\"Holmes\",\"country\":\"Jersey\",\"ip_address\":\"100.49.17.160\",\"email\":\"rholmes@layo.net\"},\n{\"id\":2616,\"first_name\":\"Jessica\",\"last_name\":\"Knight\",\"country\":\"Gibraltar\",\"ip_address\":\"181.234.23.212\",\"email\":\"jknight@babbleopia.mil\"},\n{\"id\":2617,\"first_name\":\"Karen\",\"last_name\":\"Mcdonald\",\"country\":\"Venezuela\",\"ip_address\":\"38.50.168.221\",\"email\":\"kmcdonald@feedfire.name\"},\n{\"id\":2618,\"first_name\":\"Frank\",\"last_name\":\"Day\",\"country\":\"Guatemala\",\"ip_address\":\"83.104.37.160\",\"email\":\"fday@zooxo.info\"},\n{\"id\":2619,\"first_name\":\"Kathy\",\"last_name\":\"Anderson\",\"country\":\"Serbia\",\"ip_address\":\"84.169.13.202\",\"email\":\"kanderson@midel.biz\"},\n{\"id\":2620,\"first_name\":\"Mary\",\"last_name\":\"Dunn\",\"country\":\"Vatican City State (Holy See)\",\"ip_address\":\"23.129.224.210\",\"email\":\"mdunn@skyvu.edu\"},\n{\"id\":2621,\"first_name\":\"Rachel\",\"last_name\":\"Crawford\",\"country\":\"Saint Lucia\",\"ip_address\":\"125.224.89.14\",\"email\":\"rcrawford@tagopia.org\"},\n{\"id\":2622,\"first_name\":\"Donald\",\"last_name\":\"Banks\",\"country\":\"Switzerland\",\"ip_address\":\"199.57.70.233\",\"email\":\"dbanks@browsebug.org\"},\n{\"id\":2623,\"first_name\":\"Susan\",\"last_name\":\"Burns\",\"country\":\"Isle of Man\",\"ip_address\":\"147.213.137.152\",\"email\":\"sburns@eayo.edu\"},\n{\"id\":2624,\"first_name\":\"Andrea\",\"last_name\":\"Ward\",\"country\":\"Nigeria\",\"ip_address\":\"70.137.209.129\",\"email\":\"award@realmix.mil\"},\n{\"id\":2625,\"first_name\":\"Antonio\",\"last_name\":\"Snyder\",\"country\":\"Zambia\",\"ip_address\":\"8.252.215.137\",\"email\":\"asnyder@jayo.info\"},\n{\"id\":2626,\"first_name\":\"Edward\",\"last_name\":\"Lawrence\",\"country\":\"Saint Pierre and Miquelon\",\"ip_address\":\"25.223.78.19\",\"email\":\"elawrence@thoughtbridge.net\"},\n{\"id\":2627,\"first_name\":\"Dennis\",\"last_name\":\"Owens\",\"country\":\"Ireland\",\"ip_address\":\"189.199.72.239\",\"email\":\"dowens@dabz.org\"},\n{\"id\":2628,\"first_name\":\"Edward\",\"last_name\":\"Tucker\",\"country\":\"Netherlands Antilles\",\"ip_address\":\"183.136.153.210\",\"email\":\"etucker@riffwire.info\"},\n{\"id\":2629,\"first_name\":\"Denise\",\"last_name\":\"Hart\",\"country\":\"France\",\"ip_address\":\"166.67.172.138\",\"email\":\"dhart@mudo.name\"},\n{\"id\":2630,\"first_name\":\"Judy\",\"last_name\":\"Thompson\",\"country\":\"Estonia\",\"ip_address\":\"229.130.101.95\",\"email\":\"jthompson@livetube.org\"},\n{\"id\":2631,\"first_name\":\"Robert\",\"last_name\":\"Hamilton\",\"country\":\"Sierra Leone\",\"ip_address\":\"89.6.199.151\",\"email\":\"rhamilton@zoonoodle.org\"},\n{\"id\":2632,\"first_name\":\"Jean\",\"last_name\":\"Henry\",\"country\":\"USSR\",\"ip_address\":\"186.67.205.44\",\"email\":\"jhenry@yambee.biz\"},\n{\"id\":2633,\"first_name\":\"Todd\",\"last_name\":\"Lawson\",\"country\":\"Guernsey\",\"ip_address\":\"70.167.198.251\",\"email\":\"tlawson@jaxworks.com\"},\n{\"id\":2634,\"first_name\":\"Jane\",\"last_name\":\"Brown\",\"country\":\"Bahrain\",\"ip_address\":\"143.250.240.205\",\"email\":\"jbrown@myworks.edu\"},\n{\"id\":2635,\"first_name\":\"Keith\",\"last_name\":\"Long\",\"country\":\"Zimbabwe\",\"ip_address\":\"4.42.88.201\",\"email\":\"klong@innotype.biz\"},\n{\"id\":2636,\"first_name\":\"Diane\",\"last_name\":\"Clark\",\"country\":\"Angola\",\"ip_address\":\"254.192.10.0\",\"email\":\"dclark@thoughtbeat.gov\"},\n{\"id\":2637,\"first_name\":\"Anthony\",\"last_name\":\"Gutierrez\",\"country\":\"Guinea-Bissau\",\"ip_address\":\"181.202.179.153\",\"email\":\"agutierrez@yacero.name\"},\n{\"id\":2638,\"first_name\":\"Doris\",\"last_name\":\"Green\",\"country\":\"Angola\",\"ip_address\":\"40.123.188.227\",\"email\":\"dgreen@gabtune.info\"},\n{\"id\":2639,\"first_name\":\"Patrick\",\"last_name\":\"Adams\",\"country\":\"Malaysia\",\"ip_address\":\"150.87.182.27\",\"email\":\"padams@photolist.org\"},\n{\"id\":2640,\"first_name\":\"Edward\",\"last_name\":\"Little\",\"country\":\"Cameroon\",\"ip_address\":\"249.25.126.239\",\"email\":\"elittle@geba.org\"},\n{\"id\":2641,\"first_name\":\"Samuel\",\"last_name\":\"Young\",\"country\":\"Faroe Islands\",\"ip_address\":\"252.105.241.42\",\"email\":\"syoung@oyondu.biz\"},\n{\"id\":2642,\"first_name\":\"Chris\",\"last_name\":\"Palmer\",\"country\":\"Botswana\",\"ip_address\":\"194.31.184.219\",\"email\":\"cpalmer@fivespan.com\"},\n{\"id\":2643,\"first_name\":\"Johnny\",\"last_name\":\"Elliott\",\"country\":\"Libya\",\"ip_address\":\"2.129.109.54\",\"email\":\"jelliott@katz.gov\"},\n{\"id\":2644,\"first_name\":\"Lori\",\"last_name\":\"Cox\",\"country\":\"Martinique\",\"ip_address\":\"135.134.101.65\",\"email\":\"lcox@eidel.name\"},\n{\"id\":2645,\"first_name\":\"Ryan\",\"last_name\":\"Hayes\",\"country\":\"Botswana\",\"ip_address\":\"63.76.24.209\",\"email\":\"rhayes@aimbu.com\"},\n{\"id\":2646,\"first_name\":\"Anne\",\"last_name\":\"Fox\",\"country\":\"Gabon\",\"ip_address\":\"190.229.250.27\",\"email\":\"afox@dazzlesphere.com\"},\n{\"id\":2647,\"first_name\":\"Janet\",\"last_name\":\"Ryan\",\"country\":\"Thailand\",\"ip_address\":\"7.194.23.153\",\"email\":\"jryan@zoombeat.gov\"},\n{\"id\":2648,\"first_name\":\"Anna\",\"last_name\":\"Hunter\",\"country\":\"Iceland\",\"ip_address\":\"10.254.103.92\",\"email\":\"ahunter@yoveo.info\"},\n{\"id\":2649,\"first_name\":\"Willie\",\"last_name\":\"Duncan\",\"country\":\"Kyrgyzstan\",\"ip_address\":\"218.127.85.181\",\"email\":\"wduncan@shuffletag.edu\"},\n{\"id\":2650,\"first_name\":\"Aaron\",\"last_name\":\"Fisher\",\"country\":\"United States of America\",\"ip_address\":\"174.68.108.21\",\"email\":\"afisher@leenti.info\"},\n{\"id\":2651,\"first_name\":\"Lillian\",\"last_name\":\"Schmidt\",\"country\":\"Benin\",\"ip_address\":\"234.156.125.57\",\"email\":\"lschmidt@skalith.com\"},\n{\"id\":2652,\"first_name\":\"Harry\",\"last_name\":\"Owens\",\"country\":\"Cameroon\",\"ip_address\":\"211.129.136.47\",\"email\":\"howens@oyoba.com\"},\n{\"id\":2653,\"first_name\":\"Arthur\",\"last_name\":\"Burns\",\"country\":\"Angola\",\"ip_address\":\"150.48.232.143\",\"email\":\"aburns@realcube.mil\"},\n{\"id\":2654,\"first_name\":\"Marilyn\",\"last_name\":\"Taylor\",\"country\":\"Cote d'Ivoire\",\"ip_address\":\"112.28.223.232\",\"email\":\"mtaylor@skipstorm.biz\"},\n{\"id\":2655,\"first_name\":\"Steven\",\"last_name\":\"Ferguson\",\"country\":\"Honduras\",\"ip_address\":\"122.96.36.230\",\"email\":\"sferguson@babbleopia.com\"},\n{\"id\":2656,\"first_name\":\"Dorothy\",\"last_name\":\"Ferguson\",\"country\":\"Saint Lucia\",\"ip_address\":\"108.63.99.52\",\"email\":\"dferguson@trilith.com\"},\n{\"id\":2657,\"first_name\":\"Robert\",\"last_name\":\"Cooper\",\"country\":\"Saint Lucia\",\"ip_address\":\"3.235.44.20\",\"email\":\"rcooper@yacero.biz\"},\n{\"id\":2658,\"first_name\":\"Scott\",\"last_name\":\"Hernandez\",\"country\":\"Mexico\",\"ip_address\":\"80.26.104.40\",\"email\":\"shernandez@aimbo.info\"},\n{\"id\":2659,\"first_name\":\"Charles\",\"last_name\":\"Warren\",\"country\":\"Saint Helena\",\"ip_address\":\"40.191.84.217\",\"email\":\"cwarren@mita.com\"},\n{\"id\":2660,\"first_name\":\"Carol\",\"last_name\":\"Rivera\",\"country\":\"Mauritius\",\"ip_address\":\"112.74.76.27\",\"email\":\"crivera@jumpxs.org\"},\n{\"id\":2661,\"first_name\":\"Dorothy\",\"last_name\":\"Boyd\",\"country\":\"Bermuda\",\"ip_address\":\"137.116.142.212\",\"email\":\"dboyd@rhyzio.edu\"},\n{\"id\":2662,\"first_name\":\"Timothy\",\"last_name\":\"Montgomery\",\"country\":\"Norway\",\"ip_address\":\"248.227.250.180\",\"email\":\"tmontgomery@tagcat.edu\"},\n{\"id\":2663,\"first_name\":\"Chris\",\"last_name\":\"Arnold\",\"country\":\"Spain\",\"ip_address\":\"163.119.65.202\",\"email\":\"carnold@devpoint.info\"},\n{\"id\":2664,\"first_name\":\"Ralph\",\"last_name\":\"Porter\",\"country\":\"Northern Mariana Islands\",\"ip_address\":\"54.103.40.175\",\"email\":\"rporter@leexo.net\"},\n{\"id\":2665,\"first_name\":\"Brian\",\"last_name\":\"Shaw\",\"country\":\"Mongolia\",\"ip_address\":\"30.185.133.248\",\"email\":\"bshaw@yadel.info\"},\n{\"id\":2666,\"first_name\":\"Jesse\",\"last_name\":\"Mason\",\"country\":\"Senegal\",\"ip_address\":\"41.193.89.10\",\"email\":\"jmason@jabbercube.mil\"},\n{\"id\":2667,\"first_name\":\"Anthony\",\"last_name\":\"Patterson\",\"country\":\"Namibia\",\"ip_address\":\"87.212.253.145\",\"email\":\"apatterson@meemm.net\"},\n{\"id\":2668,\"first_name\":\"Phillip\",\"last_name\":\"Scott\",\"country\":\"Qatar\",\"ip_address\":\"20.238.9.158\",\"email\":\"pscott@ntag.com\"},\n{\"id\":2669,\"first_name\":\"Joe\",\"last_name\":\"Reyes\",\"country\":\"Albania\",\"ip_address\":\"42.237.77.6\",\"email\":\"jreyes@linklinks.com\"},\n{\"id\":2670,\"first_name\":\"Susan\",\"last_name\":\"Gardner\",\"country\":\"Malta\",\"ip_address\":\"17.61.78.7\",\"email\":\"sgardner@aivee.net\"},\n{\"id\":2671,\"first_name\":\"Todd\",\"last_name\":\"Sullivan\",\"country\":\"Slovenia\",\"ip_address\":\"117.17.111.217\",\"email\":\"tsullivan@oloo.info\"},\n{\"id\":2672,\"first_name\":\"Cynthia\",\"last_name\":\"Hart\",\"country\":\"Niue\",\"ip_address\":\"204.246.62.30\",\"email\":\"chart@voomm.edu\"},\n{\"id\":2673,\"first_name\":\"Harold\",\"last_name\":\"Howell\",\"country\":\"Niue\",\"ip_address\":\"213.6.135.59\",\"email\":\"hhowell@skiptube.mil\"},\n{\"id\":2674,\"first_name\":\"Dorothy\",\"last_name\":\"Chapman\",\"country\":\"Hong Kong\",\"ip_address\":\"77.212.8.64\",\"email\":\"dchapman@flashspan.info\"},\n{\"id\":2675,\"first_name\":\"Jack\",\"last_name\":\"Medina\",\"country\":\"New Caledonia\",\"ip_address\":\"130.87.219.57\",\"email\":\"jmedina@talane.gov\"},\n{\"id\":2676,\"first_name\":\"Craig\",\"last_name\":\"Stewart\",\"country\":\"Cuba\",\"ip_address\":\"195.152.119.100\",\"email\":\"cstewart@pixonyx.gov\"},\n{\"id\":2677,\"first_name\":\"Johnny\",\"last_name\":\"Garcia\",\"country\":\"Lithuania\",\"ip_address\":\"105.233.244.26\",\"email\":\"jgarcia@devshare.gov\"},\n{\"id\":2678,\"first_name\":\"Jason\",\"last_name\":\"Cooper\",\"country\":\"Slovenia\",\"ip_address\":\"59.175.112.247\",\"email\":\"jcooper@feedbug.name\"},\n{\"id\":2679,\"first_name\":\"Benjamin\",\"last_name\":\"Richards\",\"country\":\"Colombia\",\"ip_address\":\"0.58.105.123\",\"email\":\"brichards@yodo.name\"},\n{\"id\":2680,\"first_name\":\"Harold\",\"last_name\":\"Dunn\",\"country\":\"Cape Verde\",\"ip_address\":\"231.152.225.128\",\"email\":\"hdunn@tambee.mil\"},\n{\"id\":2681,\"first_name\":\"Janet\",\"last_name\":\"Stanley\",\"country\":\"United Arab Emirates\",\"ip_address\":\"113.3.56.105\",\"email\":\"jstanley@jazzy.info\"},\n{\"id\":2682,\"first_name\":\"Stephen\",\"last_name\":\"Patterson\",\"country\":\"Svalbard and Jan Mayen Islands\",\"ip_address\":\"99.58.68.97\",\"email\":\"spatterson@divavu.net\"},\n{\"id\":2683,\"first_name\":\"Chris\",\"last_name\":\"Crawford\",\"country\":\"Chad\",\"ip_address\":\"174.144.201.150\",\"email\":\"ccrawford@photolist.net\"},\n{\"id\":2684,\"first_name\":\"Helen\",\"last_name\":\"Harvey\",\"country\":\"Mauritania\",\"ip_address\":\"109.149.101.14\",\"email\":\"hharvey@dabshots.net\"},\n{\"id\":2685,\"first_name\":\"Heather\",\"last_name\":\"Carter\",\"country\":\"Guam\",\"ip_address\":\"202.83.238.96\",\"email\":\"hcarter@brightbean.com\"},\n{\"id\":2686,\"first_name\":\"Raymond\",\"last_name\":\"Wilson\",\"country\":\"Djibouti\",\"ip_address\":\"88.185.160.181\",\"email\":\"rwilson@quire.gov\"},\n{\"id\":2687,\"first_name\":\"Michelle\",\"last_name\":\"Reyes\",\"country\":\"Central African Republic\",\"ip_address\":\"158.77.137.117\",\"email\":\"mreyes@jumpxs.com\"},\n{\"id\":2688,\"first_name\":\"Theresa\",\"last_name\":\"Snyder\",\"country\":\"Bosnia and Herzegovina\",\"ip_address\":\"37.193.65.112\",\"email\":\"tsnyder@yodoo.info\"},\n{\"id\":2689,\"first_name\":\"Amy\",\"last_name\":\"Wells\",\"country\":\"China\",\"ip_address\":\"247.115.186.38\",\"email\":\"awells@flipstorm.net\"},\n{\"id\":2690,\"first_name\":\"Edward\",\"last_name\":\"James\",\"country\":\"Guadeloupe\",\"ip_address\":\"141.67.193.44\",\"email\":\"ejames@meemm.info\"},\n{\"id\":2691,\"first_name\":\"Amanda\",\"last_name\":\"Smith\",\"country\":\"Turks and Caicos Islands\",\"ip_address\":\"136.171.63.21\",\"email\":\"asmith@divanoodle.com\"},\n{\"id\":2692,\"first_name\":\"Wayne\",\"last_name\":\"Black\",\"country\":\"Montserrat\",\"ip_address\":\"113.60.31.224\",\"email\":\"wblack@kimia.name\"},\n{\"id\":2693,\"first_name\":\"Brian\",\"last_name\":\"Morales\",\"country\":\"Bangladesh\",\"ip_address\":\"59.173.180.246\",\"email\":\"bmorales@twiyo.com\"},\n{\"id\":2694,\"first_name\":\"Frank\",\"last_name\":\"Tucker\",\"country\":\"Niue\",\"ip_address\":\"104.213.66.166\",\"email\":\"ftucker@mudo.net\"},\n{\"id\":2695,\"first_name\":\"Randy\",\"last_name\":\"Bennett\",\"country\":\"Antarctica\",\"ip_address\":\"231.0.69.39\",\"email\":\"rbennett@flipbug.name\"},\n{\"id\":2696,\"first_name\":\"Eugene\",\"last_name\":\"Phillips\",\"country\":\"Andorra\",\"ip_address\":\"80.221.106.113\",\"email\":\"ephillips@wikibox.mil\"},\n{\"id\":2697,\"first_name\":\"Martha\",\"last_name\":\"Ferguson\",\"country\":\"Japan\",\"ip_address\":\"161.197.107.226\",\"email\":\"mferguson@oba.mil\"},\n{\"id\":2698,\"first_name\":\"Annie\",\"last_name\":\"Jacobs\",\"country\":\"Bolivia\",\"ip_address\":\"186.28.174.191\",\"email\":\"ajacobs@realpoint.mil\"},\n{\"id\":2699,\"first_name\":\"Douglas\",\"last_name\":\"Brown\",\"country\":\"Congo, Republic of\",\"ip_address\":\"201.21.173.37\",\"email\":\"dbrown@gabcube.biz\"},\n{\"id\":2700,\"first_name\":\"Deborah\",\"last_name\":\"Howell\",\"country\":\"Colombia\",\"ip_address\":\"130.52.183.76\",\"email\":\"dhowell@tagcat.net\"},\n{\"id\":2701,\"first_name\":\"Nicole\",\"last_name\":\"Hunt\",\"country\":\"Togo\",\"ip_address\":\"188.72.251.98\",\"email\":\"nhunt@pixonyx.info\"},\n{\"id\":2702,\"first_name\":\"Jose\",\"last_name\":\"Boyd\",\"country\":\"Chad\",\"ip_address\":\"111.242.230.182\",\"email\":\"jboyd@shufflester.com\"},\n{\"id\":2703,\"first_name\":\"Jack\",\"last_name\":\"Romero\",\"country\":\"Wallis and Futuna Islands\",\"ip_address\":\"139.82.68.200\",\"email\":\"jromero@fanoodle.mil\"},\n{\"id\":2704,\"first_name\":\"Jason\",\"last_name\":\"Diaz\",\"country\":\"Hungary\",\"ip_address\":\"147.50.141.174\",\"email\":\"jdiaz@babbleset.mil\"},\n{\"id\":2705,\"first_name\":\"Samuel\",\"last_name\":\"Freeman\",\"country\":\"Ecuador\",\"ip_address\":\"24.119.39.19\",\"email\":\"sfreeman@twiyo.mil\"},\n{\"id\":2706,\"first_name\":\"Antonio\",\"last_name\":\"Rogers\",\"country\":\"Austria\",\"ip_address\":\"190.227.79.77\",\"email\":\"arogers@eayo.biz\"},\n{\"id\":2707,\"first_name\":\"Kathleen\",\"last_name\":\"Garcia\",\"country\":\"Tanzania\",\"ip_address\":\"235.87.62.188\",\"email\":\"kgarcia@browsedrive.edu\"},\n{\"id\":2708,\"first_name\":\"Charles\",\"last_name\":\"Gray\",\"country\":\"Greenland\",\"ip_address\":\"112.82.142.98\",\"email\":\"cgray@aimbo.mil\"},\n{\"id\":2709,\"first_name\":\"Robin\",\"last_name\":\"Dixon\",\"country\":\"Iceland\",\"ip_address\":\"136.246.82.18\",\"email\":\"rdixon@ainyx.biz\"},\n{\"id\":2710,\"first_name\":\"Harold\",\"last_name\":\"Carter\",\"country\":\"Monaco\",\"ip_address\":\"31.123.66.125\",\"email\":\"hcarter@camimbo.biz\"},\n{\"id\":2711,\"first_name\":\"Jeremy\",\"last_name\":\"Larson\",\"country\":\"Chad\",\"ip_address\":\"30.255.176.11\",\"email\":\"jlarson@skivee.com\"},\n{\"id\":2712,\"first_name\":\"Judy\",\"last_name\":\"Romero\",\"country\":\"Norway\",\"ip_address\":\"252.88.66.125\",\"email\":\"jromero@livetube.org\"},\n{\"id\":2713,\"first_name\":\"Frances\",\"last_name\":\"Butler\",\"country\":\"Egypt\",\"ip_address\":\"0.11.145.230\",\"email\":\"fbutler@realblab.net\"},\n{\"id\":2714,\"first_name\":\"Kelly\",\"last_name\":\"Hernandez\",\"country\":\"Cook Islands\",\"ip_address\":\"123.78.135.234\",\"email\":\"khernandez@browsetype.gov\"},\n{\"id\":2715,\"first_name\":\"Kathryn\",\"last_name\":\"Olson\",\"country\":\"Bosnia and Herzegovina\",\"ip_address\":\"245.139.170.238\",\"email\":\"kolson@tanoodle.org\"},\n{\"id\":2716,\"first_name\":\"Gregory\",\"last_name\":\"Boyd\",\"country\":\"Western Sahara\",\"ip_address\":\"218.223.222.86\",\"email\":\"gboyd@zooxo.org\"},\n{\"id\":2717,\"first_name\":\"Ralph\",\"last_name\":\"Mills\",\"country\":\"Brunei Darussalam\",\"ip_address\":\"108.207.164.198\",\"email\":\"rmills@plajo.org\"},\n{\"id\":2718,\"first_name\":\"Fred\",\"last_name\":\"Dixon\",\"country\":\"Swaziland\",\"ip_address\":\"58.74.220.10\",\"email\":\"fdixon@geba.mil\"},\n{\"id\":2719,\"first_name\":\"Ronald\",\"last_name\":\"Riley\",\"country\":\"Bhutan\",\"ip_address\":\"188.104.59.123\",\"email\":\"rriley@viva.org\"},\n{\"id\":2720,\"first_name\":\"Stephen\",\"last_name\":\"Cruz\",\"country\":\"United States of America\",\"ip_address\":\"205.95.119.135\",\"email\":\"scruz@fanoodle.biz\"},\n{\"id\":2721,\"first_name\":\"Kelly\",\"last_name\":\"Burns\",\"country\":\"Tajikistan\",\"ip_address\":\"179.197.48.100\",\"email\":\"kburns@tekfly.org\"},\n{\"id\":2722,\"first_name\":\"Judy\",\"last_name\":\"Bishop\",\"country\":\"Chile\",\"ip_address\":\"100.34.125.89\",\"email\":\"jbishop@eare.net\"},\n{\"id\":2723,\"first_name\":\"Rose\",\"last_name\":\"Ward\",\"country\":\"Honduras\",\"ip_address\":\"109.119.171.249\",\"email\":\"rward@topicware.info\"},\n{\"id\":2724,\"first_name\":\"Norma\",\"last_name\":\"Ramirez\",\"country\":\"Korea, North\",\"ip_address\":\"229.97.27.172\",\"email\":\"nramirez@rhyloo.org\"},\n{\"id\":2725,\"first_name\":\"Louise\",\"last_name\":\"Williamson\",\"country\":\"Tanzania\",\"ip_address\":\"152.32.139.199\",\"email\":\"lwilliamson@voonyx.mil\"},\n{\"id\":2726,\"first_name\":\"Andrew\",\"last_name\":\"Howell\",\"country\":\"Honduras\",\"ip_address\":\"82.217.7.173\",\"email\":\"ahowell@photobug.net\"},\n{\"id\":2727,\"first_name\":\"Anthony\",\"last_name\":\"Austin\",\"country\":\"Falkland Islands (Malvinas)\",\"ip_address\":\"28.82.39.221\",\"email\":\"aaustin@topicshots.biz\"},\n{\"id\":2728,\"first_name\":\"Raymond\",\"last_name\":\"Frazier\",\"country\":\"Denmark\",\"ip_address\":\"184.213.242.182\",\"email\":\"rfrazier@dablist.info\"},\n{\"id\":2729,\"first_name\":\"Steven\",\"last_name\":\"Thomas\",\"country\":\"Sierra Leone\",\"ip_address\":\"220.250.180.85\",\"email\":\"sthomas@kazu.org\"},\n{\"id\":2730,\"first_name\":\"Karen\",\"last_name\":\"Fields\",\"country\":\"Slovakia\",\"ip_address\":\"212.10.94.44\",\"email\":\"kfields@buzzbean.net\"},\n{\"id\":2731,\"first_name\":\"Janet\",\"last_name\":\"Howell\",\"country\":\"Yemen\",\"ip_address\":\"100.171.148.81\",\"email\":\"jhowell@brainsphere.info\"},\n{\"id\":2732,\"first_name\":\"Howard\",\"last_name\":\"Gibson\",\"country\":\"British Virgin Islands\",\"ip_address\":\"214.24.33.1\",\"email\":\"hgibson@jatri.edu\"},\n{\"id\":2733,\"first_name\":\"Andrea\",\"last_name\":\"Rice\",\"country\":\"Montserrat\",\"ip_address\":\"121.28.217.26\",\"email\":\"arice@kwilith.edu\"},\n{\"id\":2734,\"first_name\":\"Eugene\",\"last_name\":\"Sanders\",\"country\":\"Hungary\",\"ip_address\":\"111.102.212.70\",\"email\":\"esanders@riffwire.biz\"},\n{\"id\":2735,\"first_name\":\"Christopher\",\"last_name\":\"Kelly\",\"country\":\"Antarctica\",\"ip_address\":\"95.250.216.216\",\"email\":\"ckelly@eire.com\"},\n{\"id\":2736,\"first_name\":\"Margaret\",\"last_name\":\"Bradley\",\"country\":\"Niue\",\"ip_address\":\"82.227.162.203\",\"email\":\"mbradley@livetube.name\"},\n{\"id\":2737,\"first_name\":\"Ruby\",\"last_name\":\"Allen\",\"country\":\"Albania\",\"ip_address\":\"80.159.184.235\",\"email\":\"rallen@jazzy.mil\"},\n{\"id\":2738,\"first_name\":\"Harold\",\"last_name\":\"Gibson\",\"country\":\"French Guiana\",\"ip_address\":\"153.231.74.139\",\"email\":\"hgibson@livefish.org\"},\n{\"id\":2739,\"first_name\":\"Christopher\",\"last_name\":\"Foster\",\"country\":\"Bolivia\",\"ip_address\":\"182.166.131.147\",\"email\":\"cfoster@brainbox.gov\"},\n{\"id\":2740,\"first_name\":\"Gregory\",\"last_name\":\"Burke\",\"country\":\"Micronesia\",\"ip_address\":\"66.246.27.249\",\"email\":\"gburke@meevee.mil\"},\n{\"id\":2741,\"first_name\":\"Janice\",\"last_name\":\"Allen\",\"country\":\"Malawi\",\"ip_address\":\"4.21.36.128\",\"email\":\"jallen@fadeo.gov\"},\n{\"id\":2742,\"first_name\":\"Arthur\",\"last_name\":\"Morales\",\"country\":\"Laos\",\"ip_address\":\"247.132.213.101\",\"email\":\"amorales@gigashots.edu\"},\n{\"id\":2743,\"first_name\":\"Gloria\",\"last_name\":\"Freeman\",\"country\":\"Panama\",\"ip_address\":\"130.61.202.88\",\"email\":\"gfreeman@browsecat.name\"},\n{\"id\":2744,\"first_name\":\"Bruce\",\"last_name\":\"Harris\",\"country\":\"Eritrea\",\"ip_address\":\"180.25.178.179\",\"email\":\"bharris@chatterbridge.biz\"},\n{\"id\":2745,\"first_name\":\"Kathy\",\"last_name\":\"Torres\",\"country\":\"Guam\",\"ip_address\":\"73.140.208.115\",\"email\":\"ktorres@eidel.gov\"},\n{\"id\":2746,\"first_name\":\"Randy\",\"last_name\":\"Price\",\"country\":\"Libya\",\"ip_address\":\"114.23.235.101\",\"email\":\"rprice@dablist.mil\"},\n{\"id\":2747,\"first_name\":\"Richard\",\"last_name\":\"Holmes\",\"country\":\"Somalia\",\"ip_address\":\"123.185.48.187\",\"email\":\"rholmes@yabox.com\"},\n{\"id\":2748,\"first_name\":\"Maria\",\"last_name\":\"Nelson\",\"country\":\"Peru\",\"ip_address\":\"34.19.27.215\",\"email\":\"mnelson@thoughtstorm.gov\"},\n{\"id\":2749,\"first_name\":\"Joyce\",\"last_name\":\"Wood\",\"country\":\"Sweden\",\"ip_address\":\"242.38.179.221\",\"email\":\"jwood@brainsphere.info\"},\n{\"id\":2750,\"first_name\":\"Andrew\",\"last_name\":\"Gibson\",\"country\":\"Belarus\",\"ip_address\":\"175.170.193.166\",\"email\":\"agibson@edgetag.edu\"},\n{\"id\":2751,\"first_name\":\"Stephanie\",\"last_name\":\"Olson\",\"country\":\"Iran\",\"ip_address\":\"171.251.205.16\",\"email\":\"solson@blogpad.mil\"},\n{\"id\":2752,\"first_name\":\"Justin\",\"last_name\":\"Hansen\",\"country\":\"Barbados\",\"ip_address\":\"76.116.119.185\",\"email\":\"jhansen@roombo.mil\"},\n{\"id\":2753,\"first_name\":\"Roger\",\"last_name\":\"Hudson\",\"country\":\"United States Virgin Islands\",\"ip_address\":\"217.192.157.107\",\"email\":\"rhudson@voomm.edu\"},\n{\"id\":2754,\"first_name\":\"Ashley\",\"last_name\":\"Franklin\",\"country\":\"Turkmenistan\",\"ip_address\":\"76.156.150.204\",\"email\":\"afranklin@mydo.mil\"},\n{\"id\":2755,\"first_name\":\"Julia\",\"last_name\":\"Flores\",\"country\":\"Tonga\",\"ip_address\":\"162.5.131.18\",\"email\":\"jflores@skyba.biz\"},\n{\"id\":2756,\"first_name\":\"Paula\",\"last_name\":\"Arnold\",\"country\":\"US Minor Outlying Islands\",\"ip_address\":\"193.162.255.123\",\"email\":\"parnold@gabvine.net\"},\n{\"id\":2757,\"first_name\":\"Wayne\",\"last_name\":\"Hansen\",\"country\":\"Cote d'Ivoire\",\"ip_address\":\"168.135.146.232\",\"email\":\"whansen@leexo.edu\"},\n{\"id\":2758,\"first_name\":\"Marilyn\",\"last_name\":\"Little\",\"country\":\"Russia\",\"ip_address\":\"38.147.247.26\",\"email\":\"mlittle@tanoodle.com\"},\n{\"id\":2759,\"first_name\":\"Amanda\",\"last_name\":\"Gordon\",\"country\":\"US Minor Outlying Islands\",\"ip_address\":\"16.252.62.148\",\"email\":\"agordon@topicware.name\"},\n{\"id\":2760,\"first_name\":\"Earl\",\"last_name\":\"Richards\",\"country\":\"Saint Kitts and Nevis\",\"ip_address\":\"55.193.52.66\",\"email\":\"erichards@meemm.gov\"},\n{\"id\":2761,\"first_name\":\"Lawrence\",\"last_name\":\"Montgomery\",\"country\":\"Oman\",\"ip_address\":\"232.51.180.173\",\"email\":\"lmontgomery@feedspan.org\"},\n{\"id\":2762,\"first_name\":\"William\",\"last_name\":\"Fields\",\"country\":\"San Marino\",\"ip_address\":\"35.213.117.105\",\"email\":\"wfields@cogilith.mil\"},\n{\"id\":2763,\"first_name\":\"Shawn\",\"last_name\":\"Kelley\",\"country\":\"Thailand\",\"ip_address\":\"233.216.222.84\",\"email\":\"skelley@vipe.info\"},\n{\"id\":2764,\"first_name\":\"Melissa\",\"last_name\":\"Martinez\",\"country\":\"Norway\",\"ip_address\":\"2.4.48.128\",\"email\":\"mmartinez@skinder.mil\"},\n{\"id\":2765,\"first_name\":\"Ruby\",\"last_name\":\"Bowman\",\"country\":\"Angola\",\"ip_address\":\"125.193.191.228\",\"email\":\"rbowman@twitterworks.org\"},\n{\"id\":2766,\"first_name\":\"Harold\",\"last_name\":\"Alexander\",\"country\":\"Saint Lucia\",\"ip_address\":\"235.241.92.109\",\"email\":\"halexander@brainlounge.edu\"},\n{\"id\":2767,\"first_name\":\"Carol\",\"last_name\":\"Armstrong\",\"country\":\"Niger\",\"ip_address\":\"169.240.198.223\",\"email\":\"carmstrong@rooxo.gov\"},\n{\"id\":2768,\"first_name\":\"Craig\",\"last_name\":\"Austin\",\"country\":\"French Polynesia\",\"ip_address\":\"242.113.183.55\",\"email\":\"caustin@blogpad.org\"},\n{\"id\":2769,\"first_name\":\"Jason\",\"last_name\":\"Porter\",\"country\":\"Argentina\",\"ip_address\":\"11.134.47.78\",\"email\":\"jporter@eimbee.name\"},\n{\"id\":2770,\"first_name\":\"Barbara\",\"last_name\":\"Elliott\",\"country\":\"Uganda\",\"ip_address\":\"77.56.229.198\",\"email\":\"belliott@tazzy.gov\"},\n{\"id\":2771,\"first_name\":\"Helen\",\"last_name\":\"Gonzalez\",\"country\":\"Italy\",\"ip_address\":\"212.32.253.255\",\"email\":\"hgonzalez@kwinu.org\"},\n{\"id\":2772,\"first_name\":\"Doris\",\"last_name\":\"Chavez\",\"country\":\"Libya\",\"ip_address\":\"255.183.234.71\",\"email\":\"dchavez@camido.mil\"},\n{\"id\":2773,\"first_name\":\"Ryan\",\"last_name\":\"Ruiz\",\"country\":\"Cote d'Ivoire\",\"ip_address\":\"251.135.0.48\",\"email\":\"rruiz@aivee.mil\"},\n{\"id\":2774,\"first_name\":\"Lori\",\"last_name\":\"Burke\",\"country\":\"Liechtenstein\",\"ip_address\":\"105.161.73.32\",\"email\":\"lburke@kaymbo.info\"},\n{\"id\":2775,\"first_name\":\"Tammy\",\"last_name\":\"Stewart\",\"country\":\"Rwanda\",\"ip_address\":\"7.153.63.151\",\"email\":\"tstewart@buzzster.biz\"},\n{\"id\":2776,\"first_name\":\"Margaret\",\"last_name\":\"Hanson\",\"country\":\"Paraguay\",\"ip_address\":\"55.3.170.97\",\"email\":\"mhanson@vinte.com\"},\n{\"id\":2777,\"first_name\":\"James\",\"last_name\":\"Wagner\",\"country\":\"Senegal\",\"ip_address\":\"153.187.1.66\",\"email\":\"jwagner@gabcube.mil\"},\n{\"id\":2778,\"first_name\":\"Paul\",\"last_name\":\"Jenkins\",\"country\":\"Micronesia\",\"ip_address\":\"32.129.54.47\",\"email\":\"pjenkins@yodo.biz\"},\n{\"id\":2779,\"first_name\":\"Eric\",\"last_name\":\"Larson\",\"country\":\"Congo, Democratic Republic of\",\"ip_address\":\"218.156.150.25\",\"email\":\"elarson@trudeo.com\"},\n{\"id\":2780,\"first_name\":\"Peter\",\"last_name\":\"White\",\"country\":\"Djibouti\",\"ip_address\":\"4.53.165.96\",\"email\":\"pwhite@skalith.name\"},\n{\"id\":2781,\"first_name\":\"Teresa\",\"last_name\":\"Long\",\"country\":\"United Arab Emirates\",\"ip_address\":\"2.21.220.123\",\"email\":\"tlong@kaymbo.com\"},\n{\"id\":2782,\"first_name\":\"Debra\",\"last_name\":\"Reynolds\",\"country\":\"Cook Islands\",\"ip_address\":\"229.153.194.196\",\"email\":\"dreynolds@voonyx.mil\"},\n{\"id\":2783,\"first_name\":\"Edward\",\"last_name\":\"Morgan\",\"country\":\"Macau\",\"ip_address\":\"46.150.246.212\",\"email\":\"emorgan@innojam.net\"},\n{\"id\":2784,\"first_name\":\"Jeffrey\",\"last_name\":\"Morris\",\"country\":\"Chile\",\"ip_address\":\"129.18.45.199\",\"email\":\"jmorris@skivee.edu\"},\n{\"id\":2785,\"first_name\":\"Anne\",\"last_name\":\"Collins\",\"country\":\"Hungary\",\"ip_address\":\"110.140.31.120\",\"email\":\"acollins@innojam.edu\"},\n{\"id\":2786,\"first_name\":\"Joe\",\"last_name\":\"Ramirez\",\"country\":\"Croatia\",\"ip_address\":\"225.172.37.158\",\"email\":\"jramirez@flipbug.gov\"},\n{\"id\":2787,\"first_name\":\"Walter\",\"last_name\":\"Burns\",\"country\":\"Czech Republic\",\"ip_address\":\"74.4.86.255\",\"email\":\"wburns@dynabox.info\"},\n{\"id\":2788,\"first_name\":\"Maria\",\"last_name\":\"Murray\",\"country\":\"Cambodia\",\"ip_address\":\"142.128.251.73\",\"email\":\"mmurray@eamia.name\"},\n{\"id\":2789,\"first_name\":\"Samuel\",\"last_name\":\"Rice\",\"country\":\"Jamaica\",\"ip_address\":\"90.138.224.38\",\"email\":\"srice@demizz.info\"},\n{\"id\":2790,\"first_name\":\"James\",\"last_name\":\"Allen\",\"country\":\"Kyrgyzstan\",\"ip_address\":\"87.208.244.83\",\"email\":\"jallen@oyoloo.gov\"},\n{\"id\":2791,\"first_name\":\"Mildred\",\"last_name\":\"Cruz\",\"country\":\"Saint Lucia\",\"ip_address\":\"221.104.193.136\",\"email\":\"mcruz@oodoo.net\"},\n{\"id\":2792,\"first_name\":\"Harold\",\"last_name\":\"Nichols\",\"country\":\"Swaziland\",\"ip_address\":\"41.91.34.155\",\"email\":\"hnichols@dynava.com\"},\n{\"id\":2793,\"first_name\":\"Kathleen\",\"last_name\":\"Kelley\",\"country\":\"Dominica\",\"ip_address\":\"124.206.32.120\",\"email\":\"kkelley@tagcat.edu\"},\n{\"id\":2794,\"first_name\":\"Ann\",\"last_name\":\"Wells\",\"country\":\"Zambia\",\"ip_address\":\"14.2.127.253\",\"email\":\"awells@shufflester.org\"},\n{\"id\":2795,\"first_name\":\"Christopher\",\"last_name\":\"Rice\",\"country\":\"Saint Kitts and Nevis\",\"ip_address\":\"3.113.131.3\",\"email\":\"crice@rhyloo.org\"},\n{\"id\":2796,\"first_name\":\"Jack\",\"last_name\":\"Carr\",\"country\":\"Nicaragua\",\"ip_address\":\"137.45.169.126\",\"email\":\"jcarr@meemm.edu\"},\n{\"id\":2797,\"first_name\":\"Rebecca\",\"last_name\":\"Gonzales\",\"country\":\"Palestinian Territory, Occupied\",\"ip_address\":\"108.130.107.168\",\"email\":\"rgonzales@twinte.info\"},\n{\"id\":2798,\"first_name\":\"Pamela\",\"last_name\":\"Reyes\",\"country\":\"Belarus\",\"ip_address\":\"167.23.249.115\",\"email\":\"preyes@wikivu.net\"},\n{\"id\":2799,\"first_name\":\"Samuel\",\"last_name\":\"Morgan\",\"country\":\"Nicaragua\",\"ip_address\":\"209.201.113.67\",\"email\":\"smorgan@demivee.info\"},\n{\"id\":2800,\"first_name\":\"Dorothy\",\"last_name\":\"Bradley\",\"country\":\"Albania\",\"ip_address\":\"6.43.24.20\",\"email\":\"dbradley@jabbercube.mil\"},\n{\"id\":2801,\"first_name\":\"Christina\",\"last_name\":\"Scott\",\"country\":\"French Polynesia\",\"ip_address\":\"96.160.36.70\",\"email\":\"cscott@reallinks.net\"},\n{\"id\":2802,\"first_name\":\"Diana\",\"last_name\":\"Campbell\",\"country\":\"Trinidad and Tobago\",\"ip_address\":\"122.244.167.159\",\"email\":\"dcampbell@linkbuzz.com\"},\n{\"id\":2803,\"first_name\":\"Joe\",\"last_name\":\"Watson\",\"country\":\"Togo\",\"ip_address\":\"67.8.129.37\",\"email\":\"jwatson@trupe.info\"},\n{\"id\":2804,\"first_name\":\"Marie\",\"last_name\":\"Sanders\",\"country\":\"Mongolia\",\"ip_address\":\"101.253.6.159\",\"email\":\"msanders@bubbletube.org\"},\n{\"id\":2805,\"first_name\":\"Patrick\",\"last_name\":\"Bell\",\"country\":\"Seychelles\",\"ip_address\":\"75.111.63.151\",\"email\":\"pbell@wikido.info\"},\n{\"id\":2806,\"first_name\":\"Betty\",\"last_name\":\"Jackson\",\"country\":\"Trinidad and Tobago\",\"ip_address\":\"69.64.126.66\",\"email\":\"bjackson@zoomlounge.com\"},\n{\"id\":2807,\"first_name\":\"Willie\",\"last_name\":\"Lynch\",\"country\":\"India\",\"ip_address\":\"235.132.189.245\",\"email\":\"wlynch@dablist.org\"},\n{\"id\":2808,\"first_name\":\"Jane\",\"last_name\":\"Romero\",\"country\":\"Bermuda\",\"ip_address\":\"254.121.234.61\",\"email\":\"jromero@vitz.edu\"},\n{\"id\":2809,\"first_name\":\"Gerald\",\"last_name\":\"Hunt\",\"country\":\"Haiti\",\"ip_address\":\"203.150.223.137\",\"email\":\"ghunt@voomm.mil\"},\n{\"id\":2810,\"first_name\":\"Patricia\",\"last_name\":\"Fisher\",\"country\":\"Kiribati\",\"ip_address\":\"174.186.224.25\",\"email\":\"pfisher@ainyx.info\"},\n{\"id\":2811,\"first_name\":\"Lois\",\"last_name\":\"Sanchez\",\"country\":\"Belize\",\"ip_address\":\"141.49.211.33\",\"email\":\"lsanchez@devbug.gov\"},\n{\"id\":2812,\"first_name\":\"Alice\",\"last_name\":\"Jacobs\",\"country\":\"China\",\"ip_address\":\"65.186.241.23\",\"email\":\"ajacobs@eidel.edu\"},\n{\"id\":2813,\"first_name\":\"George\",\"last_name\":\"Kim\",\"country\":\"Guyana\",\"ip_address\":\"74.172.57.150\",\"email\":\"gkim@fliptune.edu\"},\n{\"id\":2814,\"first_name\":\"Judith\",\"last_name\":\"Torres\",\"country\":\"Guadeloupe\",\"ip_address\":\"250.115.197.51\",\"email\":\"jtorres@skaboo.mil\"},\n{\"id\":2815,\"first_name\":\"Louise\",\"last_name\":\"Hansen\",\"country\":\"Rwanda\",\"ip_address\":\"31.119.38.165\",\"email\":\"lhansen@oyoyo.biz\"},\n{\"id\":2816,\"first_name\":\"Patrick\",\"last_name\":\"Freeman\",\"country\":\"Russia\",\"ip_address\":\"101.189.36.38\",\"email\":\"pfreeman@innotype.info\"},\n{\"id\":2817,\"first_name\":\"Samuel\",\"last_name\":\"Foster\",\"country\":\"Saint Kitts and Nevis\",\"ip_address\":\"81.36.105.196\",\"email\":\"sfoster@rooxo.gov\"},\n{\"id\":2818,\"first_name\":\"Robert\",\"last_name\":\"Austin\",\"country\":\"Reunion\",\"ip_address\":\"62.148.54.84\",\"email\":\"raustin@riffpath.com\"},\n{\"id\":2819,\"first_name\":\"Raymond\",\"last_name\":\"Sanders\",\"country\":\"Netherlands\",\"ip_address\":\"68.176.227.132\",\"email\":\"rsanders@zooxo.com\"},\n{\"id\":2820,\"first_name\":\"Brenda\",\"last_name\":\"Washington\",\"country\":\"Guernsey\",\"ip_address\":\"166.216.46.51\",\"email\":\"bwashington@leexo.name\"},\n{\"id\":2821,\"first_name\":\"Robin\",\"last_name\":\"Diaz\",\"country\":\"United States Virgin Islands\",\"ip_address\":\"12.223.40.123\",\"email\":\"rdiaz@dynava.edu\"},\n{\"id\":2822,\"first_name\":\"Marilyn\",\"last_name\":\"Riley\",\"country\":\"Ghana\",\"ip_address\":\"125.202.117.179\",\"email\":\"mriley@ozu.net\"},\n{\"id\":2823,\"first_name\":\"James\",\"last_name\":\"Brown\",\"country\":\"Togo\",\"ip_address\":\"134.144.42.50\",\"email\":\"jbrown@jabbersphere.gov\"},\n{\"id\":2824,\"first_name\":\"Walter\",\"last_name\":\"Rogers\",\"country\":\"Czech Republic\",\"ip_address\":\"209.27.218.196\",\"email\":\"wrogers@gigazoom.info\"},\n{\"id\":2825,\"first_name\":\"Rebecca\",\"last_name\":\"Franklin\",\"country\":\"Andorra\",\"ip_address\":\"64.101.0.61\",\"email\":\"rfranklin@kazu.com\"},\n{\"id\":2826,\"first_name\":\"Jessica\",\"last_name\":\"Jones\",\"country\":\"Indonesia\",\"ip_address\":\"16.95.50.20\",\"email\":\"jjones@vitz.name\"},\n{\"id\":2827,\"first_name\":\"James\",\"last_name\":\"Watson\",\"country\":\"Switzerland\",\"ip_address\":\"249.58.114.226\",\"email\":\"jwatson@voonte.com\"},\n{\"id\":2828,\"first_name\":\"Ernest\",\"last_name\":\"Graham\",\"country\":\"Ukraine\",\"ip_address\":\"60.175.54.13\",\"email\":\"egraham@devshare.name\"},\n{\"id\":2829,\"first_name\":\"Janice\",\"last_name\":\"Sims\",\"country\":\"Singapore\",\"ip_address\":\"28.133.42.25\",\"email\":\"jsims@topiclounge.org\"},\n{\"id\":2830,\"first_name\":\"Eric\",\"last_name\":\"Freeman\",\"country\":\"New Caledonia\",\"ip_address\":\"254.229.185.89\",\"email\":\"efreeman@roodel.info\"},\n{\"id\":2831,\"first_name\":\"Joan\",\"last_name\":\"Alexander\",\"country\":\"Seychelles\",\"ip_address\":\"1.192.109.180\",\"email\":\"jalexander@roombo.mil\"},\n{\"id\":2832,\"first_name\":\"Aaron\",\"last_name\":\"Martinez\",\"country\":\"Sweden\",\"ip_address\":\"155.66.98.129\",\"email\":\"amartinez@blognation.gov\"},\n{\"id\":2833,\"first_name\":\"Alan\",\"last_name\":\"Sanchez\",\"country\":\"Bulgaria\",\"ip_address\":\"131.59.226.216\",\"email\":\"asanchez@kaymbo.com\"},\n{\"id\":2834,\"first_name\":\"Barbara\",\"last_name\":\"Carroll\",\"country\":\"Brunei Darussalam\",\"ip_address\":\"224.74.124.155\",\"email\":\"bcarroll@lajo.info\"},\n{\"id\":2835,\"first_name\":\"Lori\",\"last_name\":\"Wright\",\"country\":\"Aruba\",\"ip_address\":\"13.222.26.184\",\"email\":\"lwright@katz.biz\"},\n{\"id\":2836,\"first_name\":\"George\",\"last_name\":\"Willis\",\"country\":\"Mexico\",\"ip_address\":\"97.225.7.196\",\"email\":\"gwillis@quinu.edu\"},\n{\"id\":2837,\"first_name\":\"Betty\",\"last_name\":\"Gomez\",\"country\":\"Benin\",\"ip_address\":\"25.34.167.167\",\"email\":\"bgomez@skinix.edu\"},\n{\"id\":2838,\"first_name\":\"Nicole\",\"last_name\":\"Martinez\",\"country\":\"Moldova\",\"ip_address\":\"32.158.56.127\",\"email\":\"nmartinez@blogspan.biz\"},\n{\"id\":2839,\"first_name\":\"Louis\",\"last_name\":\"Perry\",\"country\":\"Belgium\",\"ip_address\":\"2.91.53.5\",\"email\":\"lperry@cogibox.net\"},\n{\"id\":2840,\"first_name\":\"Betty\",\"last_name\":\"Wheeler\",\"country\":\"Bouvet Island\",\"ip_address\":\"145.60.2.189\",\"email\":\"bwheeler@quimba.mil\"},\n{\"id\":2841,\"first_name\":\"Larry\",\"last_name\":\"Powell\",\"country\":\"Bangladesh\",\"ip_address\":\"235.163.53.59\",\"email\":\"lpowell@livetube.net\"},\n{\"id\":2842,\"first_name\":\"Melissa\",\"last_name\":\"Hayes\",\"country\":\"French Southern Territories\",\"ip_address\":\"119.145.12.102\",\"email\":\"mhayes@voonyx.edu\"},\n{\"id\":2843,\"first_name\":\"Thomas\",\"last_name\":\"Harper\",\"country\":\"Trinidad and Tobago\",\"ip_address\":\"69.139.170.41\",\"email\":\"tharper@teklist.name\"},\n{\"id\":2844,\"first_name\":\"William\",\"last_name\":\"Ryan\",\"country\":\"Burundi\",\"ip_address\":\"226.27.80.46\",\"email\":\"wryan@eadel.edu\"},\n{\"id\":2845,\"first_name\":\"Billy\",\"last_name\":\"Hicks\",\"country\":\"Saint Barthelemy\",\"ip_address\":\"88.8.240.43\",\"email\":\"bhicks@janyx.biz\"},\n{\"id\":2846,\"first_name\":\"Linda\",\"last_name\":\"Chapman\",\"country\":\"Liechtenstein\",\"ip_address\":\"74.135.183.246\",\"email\":\"lchapman@blogtag.name\"},\n{\"id\":2847,\"first_name\":\"Adam\",\"last_name\":\"Stewart\",\"country\":\"Cambodia\",\"ip_address\":\"191.57.19.231\",\"email\":\"astewart@vidoo.com\"},\n{\"id\":2848,\"first_name\":\"Jean\",\"last_name\":\"Patterson\",\"country\":\"Monaco\",\"ip_address\":\"135.208.48.72\",\"email\":\"jpatterson@skynoodle.info\"},\n{\"id\":2849,\"first_name\":\"James\",\"last_name\":\"Romero\",\"country\":\"Svalbard and Jan Mayen Islands\",\"ip_address\":\"78.232.238.200\",\"email\":\"jromero@twinder.edu\"},\n{\"id\":2850,\"first_name\":\"Ronald\",\"last_name\":\"Garrett\",\"country\":\"Comoros\",\"ip_address\":\"243.106.219.27\",\"email\":\"rgarrett@fanoodle.info\"},\n{\"id\":2851,\"first_name\":\"Joseph\",\"last_name\":\"Smith\",\"country\":\"Brazil\",\"ip_address\":\"181.66.30.232\",\"email\":\"jsmith@lajo.info\"},\n{\"id\":2852,\"first_name\":\"Aaron\",\"last_name\":\"Perry\",\"country\":\"Argentina\",\"ip_address\":\"229.190.162.154\",\"email\":\"aperry@twinder.name\"},\n{\"id\":2853,\"first_name\":\"Mildred\",\"last_name\":\"Hanson\",\"country\":\"US Minor Outlying Islands\",\"ip_address\":\"102.96.221.222\",\"email\":\"mhanson@talane.name\"},\n{\"id\":2854,\"first_name\":\"Victor\",\"last_name\":\"Mccoy\",\"country\":\"El Salvador\",\"ip_address\":\"192.86.153.76\",\"email\":\"vmccoy@katz.name\"},\n{\"id\":2855,\"first_name\":\"James\",\"last_name\":\"Morgan\",\"country\":\"Mexico\",\"ip_address\":\"13.166.57.88\",\"email\":\"jmorgan@livefish.biz\"},\n{\"id\":2856,\"first_name\":\"Roy\",\"last_name\":\"Lawson\",\"country\":\"Comoros\",\"ip_address\":\"72.64.92.227\",\"email\":\"rlawson@zooxo.net\"},\n{\"id\":2857,\"first_name\":\"Nancy\",\"last_name\":\"Franklin\",\"country\":\"Guernsey\",\"ip_address\":\"104.163.111.158\",\"email\":\"nfranklin@dabvine.mil\"},\n{\"id\":2858,\"first_name\":\"Timothy\",\"last_name\":\"Flores\",\"country\":\"Pitcairn Island\",\"ip_address\":\"123.210.46.58\",\"email\":\"tflores@yoveo.info\"},\n{\"id\":2859,\"first_name\":\"Roy\",\"last_name\":\"Snyder\",\"country\":\"Vanuatu\",\"ip_address\":\"248.231.53.190\",\"email\":\"rsnyder@buzzbean.org\"},\n{\"id\":2860,\"first_name\":\"Carolyn\",\"last_name\":\"Barnes\",\"country\":\"Saint Pierre and Miquelon\",\"ip_address\":\"134.95.113.101\",\"email\":\"cbarnes@tagcat.biz\"},\n{\"id\":2861,\"first_name\":\"Virginia\",\"last_name\":\"Perkins\",\"country\":\"Lithuania\",\"ip_address\":\"104.216.142.31\",\"email\":\"vperkins@dabz.biz\"},\n{\"id\":2862,\"first_name\":\"Rebecca\",\"last_name\":\"Palmer\",\"country\":\"Russia\",\"ip_address\":\"8.128.195.137\",\"email\":\"rpalmer@fivechat.edu\"},\n{\"id\":2863,\"first_name\":\"Jimmy\",\"last_name\":\"Young\",\"country\":\"New Caledonia\",\"ip_address\":\"150.102.114.111\",\"email\":\"jyoung@roodel.org\"},\n{\"id\":2864,\"first_name\":\"Judy\",\"last_name\":\"Russell\",\"country\":\"Saint Kitts and Nevis\",\"ip_address\":\"19.251.237.215\",\"email\":\"jrussell@cogilith.net\"},\n{\"id\":2865,\"first_name\":\"Helen\",\"last_name\":\"Johnston\",\"country\":\"United States Virgin Islands\",\"ip_address\":\"246.20.65.133\",\"email\":\"hjohnston@browsedrive.com\"},\n{\"id\":2866,\"first_name\":\"Betty\",\"last_name\":\"Bryant\",\"country\":\"Cameroon\",\"ip_address\":\"169.114.69.41\",\"email\":\"bbryant@aivee.info\"},\n{\"id\":2867,\"first_name\":\"Cheryl\",\"last_name\":\"Mills\",\"country\":\"Sudan\",\"ip_address\":\"91.47.145.146\",\"email\":\"cmills@flipopia.gov\"},\n{\"id\":2868,\"first_name\":\"Janice\",\"last_name\":\"Mitchell\",\"country\":\"Solomon Islands\",\"ip_address\":\"69.191.131.43\",\"email\":\"jmitchell@tekfly.net\"},\n{\"id\":2869,\"first_name\":\"Steven\",\"last_name\":\"Lynch\",\"country\":\"Tanzania\",\"ip_address\":\"61.137.30.229\",\"email\":\"slynch@meevee.edu\"},\n{\"id\":2870,\"first_name\":\"Carolyn\",\"last_name\":\"Ortiz\",\"country\":\"Iceland\",\"ip_address\":\"18.59.95.252\",\"email\":\"cortiz@youspan.info\"},\n{\"id\":2871,\"first_name\":\"Shawn\",\"last_name\":\"Armstrong\",\"country\":\"Thailand\",\"ip_address\":\"78.147.128.199\",\"email\":\"sarmstrong@katz.biz\"},\n{\"id\":2872,\"first_name\":\"Katherine\",\"last_name\":\"James\",\"country\":\"Ghana\",\"ip_address\":\"224.9.150.101\",\"email\":\"kjames@zoombox.biz\"},\n{\"id\":2873,\"first_name\":\"Brenda\",\"last_name\":\"Morgan\",\"country\":\"Fiji\",\"ip_address\":\"97.211.56.59\",\"email\":\"bmorgan@eire.mil\"},\n{\"id\":2874,\"first_name\":\"Patricia\",\"last_name\":\"Carter\",\"country\":\"Macedonia\",\"ip_address\":\"208.87.117.46\",\"email\":\"pcarter@zoomdog.biz\"},\n{\"id\":2875,\"first_name\":\"Mildred\",\"last_name\":\"Carpenter\",\"country\":\"Cambodia\",\"ip_address\":\"53.107.128.25\",\"email\":\"mcarpenter@mynte.biz\"},\n{\"id\":2876,\"first_name\":\"Victor\",\"last_name\":\"Welch\",\"country\":\"Congo, Democratic Republic of\",\"ip_address\":\"168.72.201.241\",\"email\":\"vwelch@rhyzio.net\"},\n{\"id\":2877,\"first_name\":\"Gregory\",\"last_name\":\"Bowman\",\"country\":\"Somalia\",\"ip_address\":\"86.208.110.136\",\"email\":\"gbowman@camimbo.edu\"},\n{\"id\":2878,\"first_name\":\"Antonio\",\"last_name\":\"Day\",\"country\":\"Monaco\",\"ip_address\":\"140.127.97.86\",\"email\":\"aday@buzzshare.org\"},\n{\"id\":2879,\"first_name\":\"Alan\",\"last_name\":\"Morgan\",\"country\":\"Russia\",\"ip_address\":\"117.160.28.201\",\"email\":\"amorgan@brainverse.org\"},\n{\"id\":2880,\"first_name\":\"Wanda\",\"last_name\":\"Cruz\",\"country\":\"Martinique\",\"ip_address\":\"35.235.246.13\",\"email\":\"wcruz@yombu.com\"},\n{\"id\":2881,\"first_name\":\"Keith\",\"last_name\":\"Fuller\",\"country\":\"Vatican City State (Holy See)\",\"ip_address\":\"171.192.62.27\",\"email\":\"kfuller@buzzdog.name\"},\n{\"id\":2882,\"first_name\":\"Gerald\",\"last_name\":\"Mcdonald\",\"country\":\"Reunion\",\"ip_address\":\"72.24.227.161\",\"email\":\"gmcdonald@photobean.gov\"},\n{\"id\":2883,\"first_name\":\"Fred\",\"last_name\":\"Lopez\",\"country\":\"Vietnam\",\"ip_address\":\"128.246.16.133\",\"email\":\"flopez@cogibox.mil\"},\n{\"id\":2884,\"first_name\":\"Kathleen\",\"last_name\":\"Payne\",\"country\":\"Macau\",\"ip_address\":\"201.250.65.186\",\"email\":\"kpayne@innoz.org\"},\n{\"id\":2885,\"first_name\":\"Christopher\",\"last_name\":\"Lawrence\",\"country\":\"Sri Lanka\",\"ip_address\":\"7.207.43.98\",\"email\":\"clawrence@buzzbean.biz\"},\n{\"id\":2886,\"first_name\":\"Juan\",\"last_name\":\"Wilson\",\"country\":\"Lithuania\",\"ip_address\":\"11.138.12.230\",\"email\":\"jwilson@cogilith.info\"},\n{\"id\":2887,\"first_name\":\"Bonnie\",\"last_name\":\"Scott\",\"country\":\"Albania\",\"ip_address\":\"192.235.107.181\",\"email\":\"bscott@twitterbridge.gov\"},\n{\"id\":2888,\"first_name\":\"Denise\",\"last_name\":\"Thompson\",\"country\":\"Martinique\",\"ip_address\":\"187.37.29.58\",\"email\":\"dthompson@yozio.info\"},\n{\"id\":2889,\"first_name\":\"Annie\",\"last_name\":\"Rivera\",\"country\":\"Namibia\",\"ip_address\":\"225.9.23.113\",\"email\":\"arivera@mydeo.biz\"},\n{\"id\":2890,\"first_name\":\"Douglas\",\"last_name\":\"Gordon\",\"country\":\"Egypt\",\"ip_address\":\"19.185.10.58\",\"email\":\"dgordon@rhybox.gov\"},\n{\"id\":2891,\"first_name\":\"Emily\",\"last_name\":\"Williamson\",\"country\":\"France\",\"ip_address\":\"64.75.240.180\",\"email\":\"ewilliamson@tanoodle.net\"},\n{\"id\":2892,\"first_name\":\"Rose\",\"last_name\":\"Watkins\",\"country\":\"Mayotte\",\"ip_address\":\"26.246.74.94\",\"email\":\"rwatkins@skiba.name\"},\n{\"id\":2893,\"first_name\":\"Matthew\",\"last_name\":\"Williamson\",\"country\":\"Costa Rica\",\"ip_address\":\"206.190.132.40\",\"email\":\"mwilliamson@jamia.edu\"},\n{\"id\":2894,\"first_name\":\"Douglas\",\"last_name\":\"Garza\",\"country\":\"Tajikistan\",\"ip_address\":\"246.83.210.254\",\"email\":\"dgarza@fliptune.net\"},\n{\"id\":2895,\"first_name\":\"Louise\",\"last_name\":\"Parker\",\"country\":\"Lithuania\",\"ip_address\":\"199.156.120.190\",\"email\":\"lparker@meetz.edu\"},\n{\"id\":2896,\"first_name\":\"Diana\",\"last_name\":\"Kelley\",\"country\":\"Puerto Rico\",\"ip_address\":\"72.146.148.5\",\"email\":\"dkelley@avaveo.mil\"},\n{\"id\":2897,\"first_name\":\"Carol\",\"last_name\":\"Chavez\",\"country\":\"Falkland Islands (Malvinas)\",\"ip_address\":\"248.193.215.63\",\"email\":\"cchavez@skivee.net\"},\n{\"id\":2898,\"first_name\":\"Sharon\",\"last_name\":\"Gordon\",\"country\":\"American Samoa\",\"ip_address\":\"170.215.116.205\",\"email\":\"sgordon@npath.gov\"},\n{\"id\":2899,\"first_name\":\"Dorothy\",\"last_name\":\"Austin\",\"country\":\"Poland\",\"ip_address\":\"48.54.36.246\",\"email\":\"daustin@talane.net\"},\n{\"id\":2900,\"first_name\":\"Maria\",\"last_name\":\"Dunn\",\"country\":\"Bhutan\",\"ip_address\":\"71.171.191.40\",\"email\":\"mdunn@yozio.name\"},\n{\"id\":2901,\"first_name\":\"Anne\",\"last_name\":\"Romero\",\"country\":\"Equatorial Guinea\",\"ip_address\":\"6.127.175.67\",\"email\":\"aromero@thoughtbridge.edu\"},\n{\"id\":2902,\"first_name\":\"Diane\",\"last_name\":\"Kim\",\"country\":\"Nigeria\",\"ip_address\":\"160.141.58.144\",\"email\":\"dkim@wordtune.edu\"},\n{\"id\":2903,\"first_name\":\"Adam\",\"last_name\":\"Webb\",\"country\":\"Croatia\",\"ip_address\":\"183.250.22.104\",\"email\":\"awebb@fivebridge.edu\"},\n{\"id\":2904,\"first_name\":\"Donald\",\"last_name\":\"Long\",\"country\":\"Iraq\",\"ip_address\":\"92.54.108.226\",\"email\":\"dlong@twitternation.info\"},\n{\"id\":2905,\"first_name\":\"Aaron\",\"last_name\":\"Roberts\",\"country\":\"Cyprus\",\"ip_address\":\"58.28.140.146\",\"email\":\"aroberts@topiczoom.biz\"},\n{\"id\":2906,\"first_name\":\"Charles\",\"last_name\":\"Welch\",\"country\":\"Cambodia\",\"ip_address\":\"223.104.148.214\",\"email\":\"cwelch@ainyx.info\"},\n{\"id\":2907,\"first_name\":\"Betty\",\"last_name\":\"Moore\",\"country\":\"Samoa\",\"ip_address\":\"70.158.87.130\",\"email\":\"bmoore@livepath.gov\"},\n{\"id\":2908,\"first_name\":\"Edward\",\"last_name\":\"Rivera\",\"country\":\"Laos\",\"ip_address\":\"93.56.236.176\",\"email\":\"erivera@meevee.name\"},\n{\"id\":2909,\"first_name\":\"Anne\",\"last_name\":\"Wright\",\"country\":\"Egypt\",\"ip_address\":\"163.132.41.40\",\"email\":\"awright@buzzster.gov\"},\n{\"id\":2910,\"first_name\":\"Charles\",\"last_name\":\"Perez\",\"country\":\"Martinique\",\"ip_address\":\"149.142.118.25\",\"email\":\"cperez@tagopia.mil\"},\n{\"id\":2911,\"first_name\":\"Earl\",\"last_name\":\"Garza\",\"country\":\"Egypt\",\"ip_address\":\"249.27.192.155\",\"email\":\"egarza@yakitri.edu\"},\n{\"id\":2912,\"first_name\":\"Jeffrey\",\"last_name\":\"Holmes\",\"country\":\"Cayman Islands\",\"ip_address\":\"113.69.215.84\",\"email\":\"jholmes@jamia.info\"},\n{\"id\":2913,\"first_name\":\"Ernest\",\"last_name\":\"West\",\"country\":\"Svalbard and Jan Mayen Islands\",\"ip_address\":\"60.47.142.204\",\"email\":\"ewest@centimia.net\"},\n{\"id\":2914,\"first_name\":\"Victor\",\"last_name\":\"Foster\",\"country\":\"Burkina Faso\",\"ip_address\":\"111.63.130.0\",\"email\":\"vfoster@babbleset.com\"},\n{\"id\":2915,\"first_name\":\"Lisa\",\"last_name\":\"Berry\",\"country\":\"Ethiopia\",\"ip_address\":\"59.143.250.40\",\"email\":\"lberry@ozu.mil\"},\n{\"id\":2916,\"first_name\":\"Carol\",\"last_name\":\"Hawkins\",\"country\":\"Sweden\",\"ip_address\":\"69.15.153.6\",\"email\":\"chawkins@wordpedia.edu\"},\n{\"id\":2917,\"first_name\":\"Johnny\",\"last_name\":\"Simmons\",\"country\":\"Ascension Island\",\"ip_address\":\"199.246.142.231\",\"email\":\"jsimmons@muxo.gov\"},\n{\"id\":2918,\"first_name\":\"Brenda\",\"last_name\":\"Jenkins\",\"country\":\"Djibouti\",\"ip_address\":\"214.134.28.114\",\"email\":\"bjenkins@npath.com\"},\n{\"id\":2919,\"first_name\":\"Craig\",\"last_name\":\"Andrews\",\"country\":\"Denmark\",\"ip_address\":\"38.74.2.89\",\"email\":\"candrews@rhycero.name\"},\n{\"id\":2920,\"first_name\":\"Scott\",\"last_name\":\"Dean\",\"country\":\"Mauritius\",\"ip_address\":\"111.105.117.175\",\"email\":\"sdean@jamia.mil\"},\n{\"id\":2921,\"first_name\":\"Arthur\",\"last_name\":\"Anderson\",\"country\":\"Afghanistan\",\"ip_address\":\"160.162.208.63\",\"email\":\"aanderson@zoomlounge.com\"},\n{\"id\":2922,\"first_name\":\"Doris\",\"last_name\":\"Fowler\",\"country\":\"Bahamas\",\"ip_address\":\"26.129.219.40\",\"email\":\"dfowler@thoughtbeat.org\"},\n{\"id\":2923,\"first_name\":\"Lawrence\",\"last_name\":\"Brooks\",\"country\":\"Papua New Guinea\",\"ip_address\":\"142.51.165.191\",\"email\":\"lbrooks@quimm.net\"},\n{\"id\":2924,\"first_name\":\"Ann\",\"last_name\":\"Sims\",\"country\":\"Bhutan\",\"ip_address\":\"64.236.64.241\",\"email\":\"asims@pixope.com\"},\n{\"id\":2925,\"first_name\":\"Willie\",\"last_name\":\"Scott\",\"country\":\"United Arab Emirates\",\"ip_address\":\"36.50.135.29\",\"email\":\"wscott@skippad.org\"},\n{\"id\":2926,\"first_name\":\"Diana\",\"last_name\":\"Mccoy\",\"country\":\"Barbados\",\"ip_address\":\"231.7.128.232\",\"email\":\"dmccoy@feedmix.edu\"},\n{\"id\":2927,\"first_name\":\"Marie\",\"last_name\":\"Myers\",\"country\":\"Central African Republic\",\"ip_address\":\"101.137.109.35\",\"email\":\"mmyers@yodo.info\"},\n{\"id\":2928,\"first_name\":\"Brandon\",\"last_name\":\"Cox\",\"country\":\"Germany\",\"ip_address\":\"80.123.246.5\",\"email\":\"bcox@yozio.net\"},\n{\"id\":2929,\"first_name\":\"Roger\",\"last_name\":\"Carr\",\"country\":\"United Kingdom\",\"ip_address\":\"110.10.204.224\",\"email\":\"rcarr@wikivu.com\"},\n{\"id\":2930,\"first_name\":\"Gregory\",\"last_name\":\"Fields\",\"country\":\"Argentina\",\"ip_address\":\"196.140.235.45\",\"email\":\"gfields@oloo.info\"},\n{\"id\":2931,\"first_name\":\"Carl\",\"last_name\":\"Holmes\",\"country\":\"Bahamas\",\"ip_address\":\"135.9.240.3\",\"email\":\"cholmes@ntags.gov\"},\n{\"id\":2932,\"first_name\":\"Joe\",\"last_name\":\"Freeman\",\"country\":\"Greece\",\"ip_address\":\"119.229.237.154\",\"email\":\"jfreeman@wikizz.org\"},\n{\"id\":2933,\"first_name\":\"Matthew\",\"last_name\":\"Meyer\",\"country\":\"Kuwait\",\"ip_address\":\"218.199.254.23\",\"email\":\"mmeyer@gevee.com\"},\n{\"id\":2934,\"first_name\":\"Jean\",\"last_name\":\"Sullivan\",\"country\":\"Algeria\",\"ip_address\":\"59.32.205.61\",\"email\":\"jsullivan@meemm.mil\"},\n{\"id\":2935,\"first_name\":\"Lillian\",\"last_name\":\"Thomas\",\"country\":\"Hungary\",\"ip_address\":\"115.85.129.246\",\"email\":\"lthomas@thoughtsphere.name\"},\n{\"id\":2936,\"first_name\":\"Johnny\",\"last_name\":\"Warren\",\"country\":\"Central African Republic\",\"ip_address\":\"14.18.49.171\",\"email\":\"jwarren@yombu.info\"},\n{\"id\":2937,\"first_name\":\"Brian\",\"last_name\":\"Welch\",\"country\":\"Portugal\",\"ip_address\":\"88.118.214.70\",\"email\":\"bwelch@fivebridge.info\"},\n{\"id\":2938,\"first_name\":\"Cynthia\",\"last_name\":\"Hunter\",\"country\":\"Ukraine\",\"ip_address\":\"193.77.78.250\",\"email\":\"chunter@meembee.biz\"},\n{\"id\":2939,\"first_name\":\"Michael\",\"last_name\":\"Patterson\",\"country\":\"Saudia Arabia\",\"ip_address\":\"166.4.31.139\",\"email\":\"mpatterson@rhyzio.info\"},\n{\"id\":2940,\"first_name\":\"Jennifer\",\"last_name\":\"Hayes\",\"country\":\"Jersey\",\"ip_address\":\"209.102.39.115\",\"email\":\"jhayes@rhynyx.biz\"},\n{\"id\":2941,\"first_name\":\"Stephanie\",\"last_name\":\"Phillips\",\"country\":\"Antarctica\",\"ip_address\":\"175.143.217.152\",\"email\":\"sphillips@quimm.biz\"},\n{\"id\":2942,\"first_name\":\"Gregory\",\"last_name\":\"Mendoza\",\"country\":\"Cameroon\",\"ip_address\":\"219.169.59.221\",\"email\":\"gmendoza@jaloo.gov\"},\n{\"id\":2943,\"first_name\":\"Antonio\",\"last_name\":\"Bennett\",\"country\":\"Romania\",\"ip_address\":\"27.164.143.187\",\"email\":\"abennett@katz.info\"},\n{\"id\":2944,\"first_name\":\"Anne\",\"last_name\":\"Kelley\",\"country\":\"Lesotho\",\"ip_address\":\"101.93.239.144\",\"email\":\"akelley@topicblab.org\"},\n{\"id\":2945,\"first_name\":\"Marie\",\"last_name\":\"Hanson\",\"country\":\"Anguilla\",\"ip_address\":\"45.111.46.44\",\"email\":\"mhanson@jayo.info\"},\n{\"id\":2946,\"first_name\":\"Dorothy\",\"last_name\":\"Stevens\",\"country\":\"Rwanda\",\"ip_address\":\"35.39.169.201\",\"email\":\"dstevens@quimba.biz\"},\n{\"id\":2947,\"first_name\":\"Teresa\",\"last_name\":\"Greene\",\"country\":\"Guatemala\",\"ip_address\":\"153.128.76.154\",\"email\":\"tgreene@trilith.edu\"},\n{\"id\":2948,\"first_name\":\"Willie\",\"last_name\":\"Boyd\",\"country\":\"Portugal\",\"ip_address\":\"254.114.227.90\",\"email\":\"wboyd@aimbo.net\"},\n{\"id\":2949,\"first_name\":\"Mark\",\"last_name\":\"Olson\",\"country\":\"Netherlands Antilles\",\"ip_address\":\"118.90.244.50\",\"email\":\"molson@jaxspan.mil\"},\n{\"id\":2950,\"first_name\":\"Justin\",\"last_name\":\"Daniels\",\"country\":\"Jersey\",\"ip_address\":\"12.27.136.168\",\"email\":\"jdaniels@podcat.biz\"},\n{\"id\":2951,\"first_name\":\"Ruth\",\"last_name\":\"Wells\",\"country\":\"Sudan\",\"ip_address\":\"217.112.251.166\",\"email\":\"rwells@wordware.com\"},\n{\"id\":2952,\"first_name\":\"Diana\",\"last_name\":\"Perry\",\"country\":\"Antarctica\",\"ip_address\":\"117.162.61.156\",\"email\":\"dperry@zazio.mil\"},\n{\"id\":2953,\"first_name\":\"Catherine\",\"last_name\":\"Matthews\",\"country\":\"French Guiana\",\"ip_address\":\"38.153.29.250\",\"email\":\"cmatthews@linkbuzz.org\"},\n{\"id\":2954,\"first_name\":\"Roy\",\"last_name\":\"Davis\",\"country\":\"Greenland\",\"ip_address\":\"223.68.147.30\",\"email\":\"rdavis@vinder.info\"},\n{\"id\":2955,\"first_name\":\"Amy\",\"last_name\":\"Morris\",\"country\":\"Guernsey\",\"ip_address\":\"203.105.187.53\",\"email\":\"amorris@voomm.edu\"},\n{\"id\":2956,\"first_name\":\"Irene\",\"last_name\":\"Reid\",\"country\":\"Romania\",\"ip_address\":\"213.201.73.170\",\"email\":\"ireid@ooba.info\"},\n{\"id\":2957,\"first_name\":\"Pamela\",\"last_name\":\"Ramirez\",\"country\":\"Mali\",\"ip_address\":\"48.102.157.58\",\"email\":\"pramirez@ozu.name\"},\n{\"id\":2958,\"first_name\":\"Ann\",\"last_name\":\"Powell\",\"country\":\"Cape Verde\",\"ip_address\":\"191.1.121.234\",\"email\":\"apowell@jumpxs.biz\"},\n{\"id\":2959,\"first_name\":\"Robert\",\"last_name\":\"Patterson\",\"country\":\"Armenia\",\"ip_address\":\"136.26.215.38\",\"email\":\"rpatterson@plambee.name\"},\n{\"id\":2960,\"first_name\":\"Clarence\",\"last_name\":\"Mills\",\"country\":\"Slovakia\",\"ip_address\":\"229.29.57.93\",\"email\":\"cmills@fivespan.name\"},\n{\"id\":2961,\"first_name\":\"Amanda\",\"last_name\":\"Bishop\",\"country\":\"Martinique\",\"ip_address\":\"96.237.209.16\",\"email\":\"abishop@plajo.com\"},\n{\"id\":2962,\"first_name\":\"Mildred\",\"last_name\":\"Hayes\",\"country\":\"Botswana\",\"ip_address\":\"133.131.110.9\",\"email\":\"mhayes@jaxnation.name\"},\n{\"id\":2963,\"first_name\":\"Deborah\",\"last_name\":\"Kelley\",\"country\":\"Georgia\",\"ip_address\":\"24.214.213.126\",\"email\":\"dkelley@tagtune.net\"},\n{\"id\":2964,\"first_name\":\"Nicole\",\"last_name\":\"Bradley\",\"country\":\"Mauritius\",\"ip_address\":\"34.52.167.255\",\"email\":\"nbradley@yadel.com\"},\n{\"id\":2965,\"first_name\":\"Shawn\",\"last_name\":\"Woods\",\"country\":\"France\",\"ip_address\":\"213.180.236.113\",\"email\":\"swoods@voolia.name\"},\n{\"id\":2966,\"first_name\":\"Jose\",\"last_name\":\"Lawson\",\"country\":\"Namibia\",\"ip_address\":\"228.245.85.249\",\"email\":\"jlawson@jumpxs.name\"},\n{\"id\":2967,\"first_name\":\"Susan\",\"last_name\":\"Martinez\",\"country\":\"Norfolk Island\",\"ip_address\":\"190.24.97.30\",\"email\":\"smartinez@lazzy.mil\"},\n{\"id\":2968,\"first_name\":\"Charles\",\"last_name\":\"Riley\",\"country\":\"Albania\",\"ip_address\":\"38.9.82.94\",\"email\":\"criley@kazu.com\"},\n{\"id\":2969,\"first_name\":\"Teresa\",\"last_name\":\"Arnold\",\"country\":\"Tajikistan\",\"ip_address\":\"0.121.239.60\",\"email\":\"tarnold@cogilith.mil\"},\n{\"id\":2970,\"first_name\":\"Kimberly\",\"last_name\":\"Harris\",\"country\":\"Korea, North\",\"ip_address\":\"229.40.88.164\",\"email\":\"kharris@zoonder.info\"},\n{\"id\":2971,\"first_name\":\"Martin\",\"last_name\":\"Burns\",\"country\":\"Mali\",\"ip_address\":\"242.44.33.124\",\"email\":\"mburns@gigaclub.mil\"},\n{\"id\":2972,\"first_name\":\"Carl\",\"last_name\":\"Stone\",\"country\":\"Malaysia\",\"ip_address\":\"222.240.124.222\",\"email\":\"cstone@oyoyo.edu\"},\n{\"id\":2973,\"first_name\":\"Debra\",\"last_name\":\"Berry\",\"country\":\"Lebanon\",\"ip_address\":\"250.196.96.126\",\"email\":\"dberry@shuffledrive.org\"},\n{\"id\":2974,\"first_name\":\"Philip\",\"last_name\":\"Montgomery\",\"country\":\"Tunisia\",\"ip_address\":\"47.217.217.5\",\"email\":\"pmontgomery@tagpad.name\"},\n{\"id\":2975,\"first_name\":\"Patrick\",\"last_name\":\"Kennedy\",\"country\":\"Greece\",\"ip_address\":\"166.52.98.223\",\"email\":\"pkennedy@youopia.net\"},\n{\"id\":2976,\"first_name\":\"Joyce\",\"last_name\":\"Carpenter\",\"country\":\"Korea, South\",\"ip_address\":\"102.160.74.169\",\"email\":\"jcarpenter@thoughtbeat.name\"},\n{\"id\":2977,\"first_name\":\"Craig\",\"last_name\":\"Ferguson\",\"country\":\"Monaco\",\"ip_address\":\"74.9.70.201\",\"email\":\"cferguson@photobug.org\"},\n{\"id\":2978,\"first_name\":\"Joe\",\"last_name\":\"Wells\",\"country\":\"Bulgaria\",\"ip_address\":\"16.2.135.59\",\"email\":\"jwells@yakitri.gov\"},\n{\"id\":2979,\"first_name\":\"Brandon\",\"last_name\":\"Ellis\",\"country\":\"Bahrain\",\"ip_address\":\"22.6.106.95\",\"email\":\"bellis@photojam.biz\"},\n{\"id\":2980,\"first_name\":\"Gerald\",\"last_name\":\"Sanchez\",\"country\":\"Papua New Guinea\",\"ip_address\":\"2.191.102.121\",\"email\":\"gsanchez@dynazzy.mil\"},\n{\"id\":2981,\"first_name\":\"John\",\"last_name\":\"Reid\",\"country\":\"Latvia\",\"ip_address\":\"36.199.188.60\",\"email\":\"jreid@blogtag.org\"},\n{\"id\":2982,\"first_name\":\"Brenda\",\"last_name\":\"Nichols\",\"country\":\"Christmas Island\",\"ip_address\":\"142.252.129.213\",\"email\":\"bnichols@skyndu.mil\"},\n{\"id\":2983,\"first_name\":\"Wanda\",\"last_name\":\"Snyder\",\"country\":\"Cuba\",\"ip_address\":\"136.112.70.133\",\"email\":\"wsnyder@mudo.info\"},\n{\"id\":2984,\"first_name\":\"James\",\"last_name\":\"Weaver\",\"country\":\"Latvia\",\"ip_address\":\"159.169.158.141\",\"email\":\"jweaver@rhynyx.name\"},\n{\"id\":2985,\"first_name\":\"Howard\",\"last_name\":\"Hill\",\"country\":\"Saint Vincent and the Grenadines\",\"ip_address\":\"14.109.19.65\",\"email\":\"hhill@quaxo.info\"},\n{\"id\":2986,\"first_name\":\"Stephen\",\"last_name\":\"Sanchez\",\"country\":\"Saint Kitts and Nevis\",\"ip_address\":\"33.124.120.235\",\"email\":\"ssanchez@aimbo.org\"},\n{\"id\":2987,\"first_name\":\"Andrew\",\"last_name\":\"Gutierrez\",\"country\":\"Grenada\",\"ip_address\":\"235.200.5.32\",\"email\":\"agutierrez@kaymbo.info\"},\n{\"id\":2988,\"first_name\":\"Timothy\",\"last_name\":\"Rodriguez\",\"country\":\"Puerto Rico\",\"ip_address\":\"100.99.9.155\",\"email\":\"trodriguez@zoombox.info\"},\n{\"id\":2989,\"first_name\":\"Helen\",\"last_name\":\"Schmidt\",\"country\":\"Faroe Islands\",\"ip_address\":\"54.8.84.196\",\"email\":\"hschmidt@izio.mil\"},\n{\"id\":2990,\"first_name\":\"Charles\",\"last_name\":\"Miller\",\"country\":\"Saint Martin\",\"ip_address\":\"53.78.233.79\",\"email\":\"cmiller@agivu.info\"},\n{\"id\":2991,\"first_name\":\"Norma\",\"last_name\":\"Jenkins\",\"country\":\"Qatar\",\"ip_address\":\"73.84.28.21\",\"email\":\"njenkins@gabvine.biz\"},\n{\"id\":2992,\"first_name\":\"Christine\",\"last_name\":\"Mason\",\"country\":\"Zimbabwe\",\"ip_address\":\"139.130.207.191\",\"email\":\"cmason@skinix.edu\"},\n{\"id\":2993,\"first_name\":\"Fred\",\"last_name\":\"Crawford\",\"country\":\"Japan\",\"ip_address\":\"79.115.221.4\",\"email\":\"fcrawford@devshare.org\"},\n{\"id\":2994,\"first_name\":\"Anne\",\"last_name\":\"Kelly\",\"country\":\"British Indian Ocean Territory\",\"ip_address\":\"161.186.249.189\",\"email\":\"akelly@lazz.gov\"},\n{\"id\":2995,\"first_name\":\"Tammy\",\"last_name\":\"Coleman\",\"country\":\"Dominica\",\"ip_address\":\"200.134.97.162\",\"email\":\"tcoleman@wikido.mil\"},\n{\"id\":2996,\"first_name\":\"Shawn\",\"last_name\":\"Gutierrez\",\"country\":\"Costa Rica\",\"ip_address\":\"218.177.203.97\",\"email\":\"sgutierrez@mydeo.biz\"},\n{\"id\":2997,\"first_name\":\"Lillian\",\"last_name\":\"Hall\",\"country\":\"French Polynesia\",\"ip_address\":\"115.153.6.105\",\"email\":\"lhall@kayveo.gov\"},\n{\"id\":2998,\"first_name\":\"Chris\",\"last_name\":\"King\",\"country\":\"Saint Helena\",\"ip_address\":\"107.66.156.24\",\"email\":\"cking@divanoodle.biz\"},\n{\"id\":2999,\"first_name\":\"Eugene\",\"last_name\":\"Rodriguez\",\"country\":\"Lesotho\",\"ip_address\":\"57.18.175.196\",\"email\":\"erodriguez@centimia.net\"},\n{\"id\":3000,\"first_name\":\"Julie\",\"last_name\":\"Morgan\",\"country\":\"Singapore\",\"ip_address\":\"234.38.26.193\",\"email\":\"jmorgan@oyondu.mil\"}];\n\n"
  },
  {
    "path": "content/present-ionic/slides/demos/collection-repeat/style.css",
    "content": ".item img {\n  height: 60px;\n  width: 60px;\n  float: left;\n  margin-top: 20px;\n  margin-right: 10px;\n}\n\n.list .item {\n  left: 0;\n  right: 0;\n  padding-top: 0;\n  padding-bottom: 0;\n}\n"
  },
  {
    "path": "content/present-ionic/slides/demos/list/index.html",
    "content": "<!DOCTYPE html>\n<html ng-app=\"ionicApp\">\n<head>\n  <link href=\"../../ionic/css/ionic.css\" rel=\"stylesheet\">\n  <script src=\"../../ionic/js/ionic.bundle.js\"></script>\n  <script src=\"index.js\"></script>\n</head>\n\n<body ng-controller=\"MyCtrl\">\n\n  <ion-header-bar class=\"bar-positive\">\n    <div class=\"buttons\">\n      <button class=\"button button-icon icon ion-ios7-minus-outline\"\n        ng-click=\"data.showDelete = !data.showDelete; data.showReorder = false\"></button>\n    <h1 class=\"title\">Lists</h1>\n    <button class=\"button\"\n        ng-click=\"data.showDelete = false; data.showReorder = !data.showReorder\">\n          Reorder\n        </button>\n    </div>\n  </ion-header-bar>\n\n  <ion-content>\n\n    <ion-list show-delete=\"data.showDelete\" show-reorder=\"data.showReorder\">\n\n      <ion-item ng-repeat=\"item in items\"\n                item=\"item\"\n                href=\"#/item/{{item.id}}\">\n        List Item {{ item.id }}\n        <ion-delete-button class=\"ion-minus-circled\"\n                           ng-click=\"onItemDelete(item)\">\n        </ion-delete-button>\n        <ion-option-button class=\"button-assertive\"\n                           ng-click=\"edit(item)\">\n          Edit\n        </ion-option-button>\n        <ion-option-button class=\"button-calm\"\n                           ng-click=\"share(item)\">\n          Share\n        </ion-option-button>\n        <ion-reorder-button class=\"ion-navicon\" on-reorder=\"moveItem(item, $fromIndex, $toIndex)\"></ion-reorder-button>\n      </ion-item>\n\n    </ion-list>\n\n  </ion-content>\n\n</body>\n</html>\n"
  },
  {
    "path": "content/present-ionic/slides/demos/list/index.js",
    "content": "angular.module('ionicApp', ['ionic'])\n\n.controller('MyCtrl', function($scope) {\n  \n  $scope.data = {\n    showDelete: false\n  };\n  \n  $scope.edit = function(item) {\n    alert('Edit Item: ' + item.id);\n  };\n  $scope.share = function(item) {\n    alert('Share Item: ' + item.id);\n  };\n  \n  $scope.moveItem = function(item, fromIndex, toIndex) {\n    $scope.items.splice(fromIndex, 1);\n    $scope.items.splice(toIndex, 0, item);\n  };\n  \n  $scope.onItemDelete = function(item) {\n    $scope.items.splice($scope.items.indexOf(item), 1);\n  };\n  \n  $scope.items = [\n    { id: 0 },\n    { id: 1 },\n    { id: 2 },\n    { id: 3 },\n    { id: 4 },\n    { id: 5 },\n    { id: 6 },\n    { id: 7 },\n    { id: 8 },\n    { id: 9 },\n    { id: 10 },\n    { id: 11 },\n    { id: 12 },\n    { id: 13 },\n    { id: 14 },\n    { id: 15 },\n    { id: 16 },\n    { id: 17 },\n    { id: 18 },\n    { id: 19 },\n    { id: 20 },\n    { id: 21 },\n    { id: 22 },\n    { id: 23 },\n    { id: 24 },\n    { id: 25 },\n    { id: 26 },\n    { id: 27 },\n    { id: 28 },\n    { id: 29 },\n    { id: 30 },\n    { id: 31 },\n    { id: 32 },\n    { id: 33 },\n    { id: 34 },\n    { id: 35 },\n    { id: 36 },\n    { id: 37 },\n    { id: 38 },\n    { id: 39 },\n    { id: 40 },\n    { id: 41 },\n    { id: 42 },\n    { id: 43 },\n    { id: 44 },\n    { id: 45 },\n    { id: 46 },\n    { id: 47 },\n    { id: 48 },\n    { id: 49 },\n    { id: 50 }\n  ];\n  \n});"
  },
  {
    "path": "content/present-ionic/slides/demos/modal/index.html",
    "content": "<!DOCTYPE html>\n<html ng-app=\"ionicApp\">\n<head>\n  <link href=\"../../ionic/css/ionic.css\" rel=\"stylesheet\">\n  <link href=\"style.css\" rel=\"stylesheet\">\n  <script src=\"../../ionic/js/ionic.bundle.js\"></script>\n  <script src=\"index.js\"></script>\n</head>\n\n<body ng-controller=\"MainCtrl\">\n\n  <ion-header-bar>\n    <h1 class=\"title\">Modal</h1>\n    <button ng-click=\"modal.show()\" class=\"button button-icon ion-navicon\"></button>\n  </ion-header-bar>\n\n  <ion-content class=\"padding\">\n\n    {{ userData }}\n\n  </ion-content>\n\n  <script id=\"modal.html\" type=\"text/ng-template\">\n\n    <ion-modal-view>\n      <ion-header-bar class=\"bar bar-header bar-positive\">\n        <h1 class=\"title\">New Contact</h1>\n        <button class=\"button button-clear button-primary\" ng-click=\"modal.hide()\">Cancel</button>\n      </ion-header-bar>\n      <ion-content class=\"padding\">\n        <div class=\"list\">\n          <label class=\"item item-input\">\n            <span class=\"input-label\">First Name</span>\n            <input ng-model=\"newUser.firstName\" type=\"text\">\n          </label>\n          <label class=\"item item-input\">\n            <span class=\"input-label\">Last Name</span>\n            <input ng-model=\"newUser.lastName\" type=\"text\">\n          </label>\n          <label class=\"item item-input\">\n            <span class=\"input-label\">Twitter</span>\n            <input ng-model=\"newUser.email\" type=\"text\">\n          </label>\n          <button class=\"button button-full button-positive\" ng-click=\"submitData(newUser)\">Create</button>\n        </div>\n      </ion-content>\n    </ion-modal-view>\n\n  </script>\n\n</body>\n</html>\n"
  },
  {
    "path": "content/present-ionic/slides/demos/modal/index.js",
    "content": "angular.module('ionicApp', ['ionic'])\n\n.controller('MainCtrl', function($scope, $ionicModal) {\n\n  $ionicModal.fromTemplateUrl('modal.html', {\n    scope: $scope\n  }).then(function(modal) {\n    $scope.modal = modal;\n  });\n\n  $scope.submitData = function(d) {\n    $scope.modal.hide();\n    $scope.userData = d;\n  }\n\n});\n"
  },
  {
    "path": "content/present-ionic/slides/demos/modal/style.css",
    "content": "body {\n  background: white;\n}\n"
  },
  {
    "path": "content/present-ionic/slides/demos/navigation/index.html",
    "content": "<!DOCTYPE html>\n<html ng-app=\"ionicApp\">\n<head>\n  <link href=\"../../ionic/css/ionic.css\" rel=\"stylesheet\">\n  <link href=\"style.css\" rel=\"stylesheet\">\n  <script src=\"../../ionic/js/ionic.bundle.js\"></script>\n  <script src=\"index.js\"></script>\n</head>\n\n<body>\n\n  <ion-nav-bar>\n    <ion-nav-back-button class=\"button-clear button-dark\">\n      Back\n    </ion-nav-back-button>\n  </ion-nav-bar>\n\n  <ion-nav-view></ion-nav-view>\n\n</body>\n</html>\n"
  },
  {
    "path": "content/present-ionic/slides/demos/navigation/index.js",
    "content": "angular.module('ionicApp', ['ionic'])\n\n.config(function($stateProvider, $urlRouterProvider){\n\n $stateProvider\n\n  .state('index', {\n    url: '/',\n    templateUrl: 'templates/page1.html'\n  })\n\n  .state('page2', {\n    url: '/page2',\n    templateUrl: 'templates/page2.html'\n  })\n\n  .state('page3', {\n    url: '/page3',\n    templateUrl: 'templates/page3.html'\n  });\n\n  $urlRouterProvider.otherwise(\"/\");\n\n});\n\n"
  },
  {
    "path": "content/present-ionic/slides/demos/navigation/style.css",
    "content": "body {\n  background: white;\n}\n"
  },
  {
    "path": "content/present-ionic/slides/demos/navigation/templates/page1.html",
    "content": "<ion-view title=\"Page 1\">\n\n  <ion-content class=\"padding\">\n\n    <a href=\"#/page2\" class=\"button\">Page 2</a>\n\n  </ion-content>\n\n</ion-view>\n"
  },
  {
    "path": "content/present-ionic/slides/demos/navigation/templates/page2.html",
    "content": "<ion-view title=\"Page 2\">\n\n  <ion-content class=\"padding\">\n\n    <a href=\"#/page3\" class=\"button\">Page 3</a>\n\n  </ion-content>\n\n</ion-view>\n"
  },
  {
    "path": "content/present-ionic/slides/demos/navigation/templates/page3.html",
    "content": "<ion-view title=\"Page 3\">\n\n  <ion-content>\n\n    <div class=\"list\">\n\n      <a href=\"#/\" class=\"item\">Homepage</a>\n      <a href=\"#/page2\" class=\"item\">Page 2</a>\n      <a href=\"#/page3\" class=\"item\">Page 3</a>\n\n    </div>\n\n  </ion-content>\n\n</ion-view>\n"
  },
  {
    "path": "content/present-ionic/slides/demos/popover/index.html",
    "content": "<!DOCTYPE html>\n<html ng-app=\"ionicApp\">\n<head>\n  <link href=\"../../ionic/css/ionic.css\" rel=\"stylesheet\">\n  <link href=\"style.css\" rel=\"stylesheet\">\n  <script src=\"../../ionic/js/ionic.bundle.js\"></script>\n  <script src=\"index.js\"></script>\n</head>\n\n<body class=\"platform-ios\" ng-controller=\"MainCtrl\">\n\n  <ion-header-bar>\n    <h1 class=\"title\">Popover</h1>\n    <button ng-click=\"popover.show($event)\" class=\"button button-icon ion-more\"></button>\n  </ion-header-bar>\n\n  <script id=\"popover.html\" type=\"text/ng-template\">\n\n    <ion-popover-view>\n      <ion-header-bar>\n        <h1 class=\"title\">My Popover Title</h1>\n      </ion-header-bar>\n      <ion-content class=\"padding\">\n        Hello!\n      </ion-content>\n    </ion-popover-view>\n\n  </script>\n\n</body>\n</html>\n"
  },
  {
    "path": "content/present-ionic/slides/demos/popover/index.js",
    "content": "angular.module('ionicApp', ['ionic'])\n\n.controller('MainCtrl', function($scope, $ionicPopover) {\n\n  $ionicPopover.fromTemplateUrl('popover.html', function(popover) {\n    $scope.popover = popover;\n  });\n\n});\n"
  },
  {
    "path": "content/present-ionic/slides/demos/popover/style.css",
    "content": "body {\n  background: white;\n}\n"
  },
  {
    "path": "content/present-ionic/slides/demos/pull-to-refresh/index.html",
    "content": "<!DOCTYPE html>\n<html ng-app=\"ionicApp\">\n<head>\n  <link href=\"../../ionic/css/ionic.css\" rel=\"stylesheet\">\n  <link href=\"style.css\" rel=\"stylesheet\">\n  <script src=\"../../ionic/js/ionic.bundle.js\"></script>\n  <script src=\"index.js\"></script>\n</head>\n\n<body ng-controller=\"MyCtrl\">\n\n  <ion-header-bar class=\"bar-positive\">\n    <h1 class=\"title\">Pull To Refresh</h1>\n  </ion-header-bar>\n\n  <ion-content>\n    <ion-refresher on-refresh=\"doRefresh()\"\n                   pulling-text=\"Pull to refresh...\"\n                   refreshing-text=\"Refreshing!\"\n                   refreshing-icon=\"ion-loading-c\">\n\n    </ion-refresher>\n    <ion-list>\n      <ion-item ng-repeat=\"item in items\">{{item}}</ion-item>\n    </ion-list>\n  </ion-content>\n\n</body>\n</html>\n"
  },
  {
    "path": "content/present-ionic/slides/demos/pull-to-refresh/index.js",
    "content": "angular.module('ionicApp', ['ionic'])\n\n.controller('MyCtrl', function($scope, $timeout) {\n\n  $scope.items = ['Item 1', 'Item 2', 'Item 3'];\n\n  $scope.doRefresh = function() {\n\n    $timeout( function() {\n      //simulate async response\n      $scope.items.push('New Item ' + Math.floor(Math.random() * 1000) + 4);\n\n      //Stop the ion-refresher from spinning\n      $scope.$broadcast('scroll.refreshComplete');\n\n    }, 1000);\n\n  };\n\n});\n"
  },
  {
    "path": "content/present-ionic/slides/demos/pull-to-refresh/style.css",
    "content": "body {\n  background: white;\n}\n"
  },
  {
    "path": "content/present-ionic/slides/demos/sidemenu/index.html",
    "content": "<!DOCTYPE html>\n<html ng-app=\"ionicApp\">\n<head>\n  <link href=\"../../ionic/css/ionic.css\" rel=\"stylesheet\">\n  <script src=\"../../ionic/js/ionic.bundle.js\"></script>\n  <script src=\"index.js\"></script>\n</head>\n\n<body ng-controller=\"MainCtrl\">\n\n  <ion-nav-view></ion-nav-view>\n\n</body>\n</html>\n"
  },
  {
    "path": "content/present-ionic/slides/demos/sidemenu/index.js",
    "content": "angular.module('ionicApp', ['ionic'])\n\n.config(function($stateProvider, $urlRouterProvider) {\n\n  $stateProvider\n    .state('eventmenu', {\n      url: \"/event\",\n      abstract: true,\n      templateUrl: \"templates/event-menu.html\"\n    })\n    .state('eventmenu.home', {\n      url: \"/home\",\n      views: {\n        'menuContent' :{\n          templateUrl: \"templates/home.html\"\n        }\n      }\n    })\n    .state('eventmenu.checkin', {\n      url: \"/check-in\",\n      views: {\n        'menuContent' :{\n          templateUrl: \"templates/check-in.html\",\n          controller: \"CheckinCtrl\"\n        }\n      }\n    })\n    .state('eventmenu.attendees', {\n      url: \"/attendees\",\n      views: {\n        'menuContent' :{\n          templateUrl: \"templates/attendees.html\",\n          controller: \"AttendeesCtrl\"\n        }\n      }\n    })\n\n  $urlRouterProvider.otherwise(\"/event/home\");\n})\n\n.controller('MainCtrl', function($scope, $ionicSideMenuDelegate) {\n  $scope.attendees = [\n    { firstname: 'Nicolas', lastname: 'Cage' },\n    { firstname: 'Jean-Claude', lastname: 'Van Damme' },\n    { firstname: 'Keanu', lastname: 'Reeves' },\n    { firstname: 'Steven', lastname: 'Seagal' }\n  ];\n\n  $scope.toggleLeft = function() {\n    $ionicSideMenuDelegate.toggleLeft();\n  };\n})\n\n.controller('CheckinCtrl', function($scope) {\n  $scope.showForm = true;\n\n  $scope.shirtSizes = [\n    { text: 'Large', value: 'L' },\n    { text: 'Medium', value: 'M' },\n    { text: 'Small', value: 'S' }\n  ];\n\n  $scope.attendee = {};\n  $scope.submit = function() {\n    if(!$scope.attendee.firstname) {\n      alert('Info required');\n      return;\n    }\n    $scope.showForm = false;\n    $scope.attendees.push($scope.attendee);\n  };\n\n})\n\n.controller('AttendeesCtrl', function($scope) {\n\n  $scope.activity = [];\n  $scope.arrivedChange = function(attendee) {\n    var msg = attendee.firstname + ' ' + attendee.lastname;\n    msg += (!attendee.arrived ? ' has arrived, ' : ' just left, ');\n    msg += new Date().getMilliseconds();\n    $scope.activity.push(msg);\n    if($scope.activity.length > 3) {\n      $scope.activity.splice(0, 1);\n    }\n  };\n\n});\n"
  },
  {
    "path": "content/present-ionic/slides/demos/sidemenu/templates/attendees.html",
    "content": "<ion-view title=\"Event Attendees\" left-buttons=\"leftButtons\">\n  <ion-content>\n    <div class=\"list\">\n      <ion-toggle ng-repeat=\"attendee in attendees | orderBy:'firstname' | orderBy:'lastname'\"\n                  ng-model=\"attendee.arrived\"\n                  ng-change=\"arrivedChange(attendee)\">\n        {{ attendee.firstname }}\n        {{ attendee.lastname }}\n      </ion-toggle>\n      <div class=\"item item-divider\">\n        Activity\n      </div>\n      <div class=\"item\" ng-repeat=\"msg in activity\">\n        {{ msg }}\n      </div>\n    </div>\n  </ion-content>\n</ion-view>\n"
  },
  {
    "path": "content/present-ionic/slides/demos/sidemenu/templates/check-in.html",
    "content": "<ion-view title=\"Event Check-in\">\n  <ion-content>\n    <form class=\"list\" ng-show=\"showForm\">\n      <div class=\"item item-divider\">\n        Attendee Info\n      </div>\n      <label class=\"item item-input\">\n        <input type=\"text\" placeholder=\"First Name\" ng-model=\"attendee.firstname\">\n      </label>\n      <label class=\"item item-input\">\n        <input type=\"text\" placeholder=\"Last Name\" ng-model=\"attendee.lastname\">\n      </label>\n      <div class=\"item item-divider\">\n        Shirt Size\n      </div>\n      <ion-radio ng-repeat=\"shirtSize in shirtSizes\"\n                 ng-value=\"shirtSize.value\"\n                 ng-model=\"attendee.shirtSize\">\n        {{ shirtSize.text }}\n      </ion-radio>\n      <div class=\"item item-divider\">\n        Lunch\n      </div>\n      <ion-toggle ng-model=\"attendee.vegetarian\">\n        Vegetarian\n      </ion-toggle>\n      <div class=\"padding\">\n        <button class=\"button button-block\" ng-click=\"submit()\">Checkin</button>\n      </div>\n    </form>\n\n    <div ng-hide=\"showForm\">\n      <pre ng-bind=\"attendee | json\"></pre>\n      <a href=\"#/event/attendees\">View attendees</a>\n    </div>\n  </ion-content>\n</ion-view>\n"
  },
  {
    "path": "content/present-ionic/slides/demos/sidemenu/templates/event-menu.html",
    "content": "<ion-side-menus>\n\n  <ion-side-menu-content>\n\n    <ion-nav-bar class=\"bar-positive\">\n      <ion-nav-back-button class=\"button-icon ion-arrow-left-c\">\n      </ion-nav-back-button>\n    </ion-nav-bar>\n\n    <ion-nav-buttons side=\"left\">\n      <button class=\"button button-icon button-clear ion-navicon\" ng-click=\"toggleLeft()\">\n      </button>\n    </ion-nav-buttons>\n\n    <ion-nav-view animation=\"no-animation\" name=\"menuContent\"></ion-nav-view>\n\n  </ion-side-menu-content>\n\n\n  <ion-side-menu side=\"left\">\n\n    <ion-header-bar class=\"bar-assertive\">\n      <h1 class=\"title\">Left Menu</h1>\n    </ion-header-bar>\n\n    <ion-content>\n      <ul class=\"list\">\n        <!-- Note each link has the 'menu-close' attribute so the menu auto closes when clicking on one of these links -->\n        <a href=\"#/event/check-in\" class=\"item\" menu-close>Check-in</a>\n        <a href=\"#/event/attendees\" class=\"item\" menu-close>Attendees</a>\n      </ul>\n    </ion-content>\n\n  </ion-side-menu>\n\n\n</ion-side-menus>\n"
  },
  {
    "path": "content/present-ionic/slides/demos/sidemenu/templates/home.html",
    "content": "<ion-view title=\"Welcome\">\n  <ion-content padding=\"true\">\n    <p>Swipe to the right to reveal the left menu.</p>\n  </ion-content>\n</ion-view>\n"
  },
  {
    "path": "content/present-ionic/slides/demos/slidebox/index.html",
    "content": "<!DOCTYPE html>\n<html ng-app=\"ionic\">\n<head>\n  <link href=\"../../ionic/css/ionic.css\" rel=\"stylesheet\">\n  <link href=\"style.css\" rel=\"stylesheet\">\n  <script src=\"../../ionic/js/ionic.bundle.js\"></script>\n</head>\n\n<body>\n\n  <ion-slide-box>\n\n    <ion-slide>\n      <div class=\"box blue\"><h1>BLUE</h1></div>\n    </ion-slide>\n\n    <ion-slide>\n      <div class=\"box yellow\"><h1>YELLOW</h1></div>\n    </ion-slide>\n\n    <ion-slide>\n      <div class=\"box pink\"><h1>PINK</h1></div>\n    </ion-slide>\n\n  </ion-slide-box>\n\n</body>\n</html>\n"
  },
  {
    "path": "content/present-ionic/slides/demos/slidebox/style.css",
    "content": "body {\n  background: white;\n}\n\n.slider {\n  height: 100vh;\n}\n\n.box {\n  height: 100vh;\n  text-align: center;\n  padding: 100px 0;\n}\n\n.blue {\n  background: blue;\n}\n\n.yellow {\n  background: yellow;\n}\n\n.pink {\n  background: pink;\n}\n"
  },
  {
    "path": "content/present-ionic/slides/demos/tabs/index.html",
    "content": "<!DOCTYPE html>\n<html ng-app=\"ionicApp\">\n<head>\n  <link href=\"../../ionic/css/ionic.css\" rel=\"stylesheet\">\n  <script src=\"../../ionic/js/ionic.bundle.js\"></script>\n  <script src=\"index.js\"></script>\n</head>\n\n<body>\n\n  <ion-nav-bar class=\"nav-title-slide-ios7 bar-positive\">\n    <ion-nav-back-button class=\"button-icon ion-arrow-left-c\">\n    </ion-nav-back-button>\n  </ion-nav-bar>\n\n  <ion-nav-view animation=\"slide-left-right\"></ion-nav-view>\n\n  <script id=\"tabs.html\" type=\"text/ng-template\">\n    <ion-tabs class=\"tabs-icon-top tabs-positive\">\n\n      <ion-tab title=\"Home\" icon=\"ion-home\" href=\"#/tab/home\">\n        <ion-nav-view name=\"home-tab\"></ion-nav-view>\n      </ion-tab>\n\n      <ion-tab title=\"About\" icon=\"ion-ios7-information\" href=\"#/tab/about\">\n        <ion-nav-view name=\"about-tab\"></ion-nav-view>\n      </ion-tab>\n\n      <ion-tab title=\"Contact\" icon=\"ion-ios7-world\" ui-sref=\"tabs.contact\">\n        <ion-nav-view name=\"contact-tab\"></ion-nav-view>\n      </ion-tab>\n\n    </ion-tabs>\n  </script>\n\n</body>\n</html>\n"
  },
  {
    "path": "content/present-ionic/slides/demos/tabs/index.js",
    "content": "angular.module('ionicApp', ['ionic'])\n\n.config(function($stateProvider, $urlRouterProvider) {\n\n  $stateProvider\n    .state('tabs', {\n      url: \"/tab\",\n      abstract: true,\n      templateUrl: \"tabs.html\"\n    })\n    .state('tabs.home', {\n      url: \"/home\",\n      views: {\n        'home-tab': {\n          templateUrl: \"templates/home.html\",\n          controller: 'HomeTabCtrl'\n        }\n      }\n    })\n    .state('tabs.facts', {\n      url: \"/facts\",\n      views: {\n        'home-tab': {\n          templateUrl: \"templates/facts.html\"\n        }\n      }\n    })\n    .state('tabs.facts2', {\n      url: \"/facts2\",\n      views: {\n        'home-tab': {\n          templateUrl: \"templates/facts2.html\"\n        }\n      }\n    })\n    .state('tabs.about', {\n      url: \"/about\",\n      views: {\n        'about-tab': {\n          templateUrl: \"templates/about.html\"\n        }\n      }\n    })\n    .state('tabs.navstack', {\n      url: \"/navstack\",\n      views: {\n        'about-tab': {\n          templateUrl: \"templates/nav-stack.html\"\n        }\n      }\n    })\n    .state('tabs.contact', {\n      url: \"/contact\",\n      views: {\n        'contact-tab': {\n          templateUrl: \"templates/contact.html\"\n        }\n      }\n    });\n\n\n   $urlRouterProvider.otherwise(\"/tab/home\");\n\n})\n\n.controller('HomeTabCtrl', function($scope) {\n  console.log('HomeTabCtrl');\n});\n"
  },
  {
    "path": "content/present-ionic/slides/demos/tabs/templates/about.html",
    "content": "<ion-view title=\"About\">\n  <ion-content class=\"padding\">\n    <h3>Create hybrid mobile apps with the web technologies you love.</h3>\n    <p>Free and open source, Ionic offers a library of mobile-optimized HTML, CSS and JS components for building highly interactive apps.</p>\n    <p>Built with Sass and optimized for AngularJS.</p>\n    <p>\n      <a class=\"button icon icon-right ion-chevron-right\" href=\"#/tab/navstack\">Tabs Nav Stack</a>\n    </p>\n  </ion-content>\n</ion-view>\n"
  },
  {
    "path": "content/present-ionic/slides/demos/tabs/templates/contact.html",
    "content": "<ion-view title=\"Contact\">\n  <ion-content>\n    <div class=\"list\">\n      <div class=\"item\">\n        @IonicFramework\n      </div>\n      <div class=\"item\">\n        @DriftyTeam\n      </div>\n    </div>\n  </ion-content>\n</ion-view>\n"
  },
  {
    "path": "content/present-ionic/slides/demos/tabs/templates/facts.html",
    "content": "<ion-view title=\"Facts\">\n  <ion-content class=\"padding\">\n    <p>Banging your head against a wall uses 150 calories an hour.</p>\n    <p>Dogs have four toes on their hind feet, and five on their front feet.</p>\n    <p>The ant can lift 50 times its own weight, can pull 30 times its own weight and always falls over on its right side when intoxicated.</p>\n    <p>A cockroach will live nine days without it's head, before it starves to death.</p>\n    <p>Polar bears are left handed.</p>\n    <p>\n      <a class=\"button icon ion-home\" href=\"#/tab/home\"> Home</a>\n      <a class=\"button icon icon-right ion-chevron-right\" href=\"#/tab/facts2\">More Facts</a>\n    </p>\n  </ion-content>\n</ion-view>\n"
  },
  {
    "path": "content/present-ionic/slides/demos/tabs/templates/facts2.html",
    "content": "<ion-view title=\"Also Factual\">\n  <ion-content class=\"padding\">\n    <p>111,111,111 x 111,111,111 = 12,345,678,987,654,321</p>\n    <p>1 in every 4 Americans has appeared on T.V.</p>\n    <p>11% of the world is left-handed.</p>\n    <p>1 in 8 Americans has worked at a McDonalds restaurant.</p>\n    <p>$283,200 is the absolute highest amount of money you can win on Jeopardy.</p>\n    <p>101 Dalmatians, Peter Pan, Lady and the Tramp, and Mulan are the only Disney cartoons where both parents are present and don't die throughout the movie.</p>\n    <p>\n      <a class=\"button icon ion-home\" href=\"#/tab/home\"> Home</a>\n      <a class=\"button icon ion-chevron-left\" href=\"#/tab/facts\"> Scientific Facts</a>\n    </p>\n  </ion-content>\n</ion-view>\n"
  },
  {
    "path": "content/present-ionic/slides/demos/tabs/templates/home.html",
    "content": "<ion-view title=\"Home\">\n  <ion-content class=\"padding\">\n    <p>Example of Ionic tabs. Navigate to each tab, and\n    navigate to child views of each tab and notice how\n    each tab has its own navigation history.</p>\n    <p>\n      <a class=\"button icon icon-right ion-chevron-right\" href=\"#/tab/facts\">Scientific Facts</a>\n    </p>\n  </ion-content>\n</ion-view>\n"
  },
  {
    "path": "content/present-ionic/slides/demos/tabs/templates/nav-stack.html",
    "content": "<ion-view title=\"Tab Nav Stack\">\n  <ion-content class=\"padding\">\n    <p><img src=\"https://ionicframework.com/img/diagrams/tabs-nav-stack.png\" style=\"width:100%\"></p>\n  </ion-content>\n</ion-view>\n"
  },
  {
    "path": "content/present-ionic/slides/index.html",
    "content": "<!doctype html>\n<html lang=\"en\">\n  <head>\n    <meta charset=\"utf-8\">\n    <!-- Presentation created using reveal.js: https://github.com/hakimel/reveal.js -->\n    <!-- Copyright (C) 2011-2012 Hakim El Hattab, http://hakim.se -->\n\n    <title>Building Hybrid Apps with AngularJS and Ionic</title>\n\n    <meta name=\"description\" content=\"Ionic Framework Presentation: The beautiful, open source framework for developing hybrid mobile apps with HTML5.\">\n    <meta name=\"author\" content=\"https://twitter.com/adamdbradley\">\n    <meta name=\"author\" content=\"https://twitter.com/benjsperry\">\n    <link rel=\"shortcut icon\" href=\"favicon.ico\">\n    <meta name=\"apple-mobile-web-app-capable\" content=\"yes\" />\n    <meta name=\"apple-mobile-web-app-status-bar-style\" content=\"black-translucent\" />\n\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no\">\n\n    <link rel=\"stylesheet\" href=\"css/reveal.min.css\">\n    <link rel=\"stylesheet\" href=\"css/ionic.css\" id=\"theme\">\n\n    <!-- For syntax highlighting -->\n    <link rel=\"stylesheet\" href=\"lib/css/zenburn.css\">\n\n    <!-- If the query includes 'print-pdf', use the PDF print sheet -->\n    <script>\n      document.write( '<link rel=\"stylesheet\" href=\"css/print/' + ( window.location.search.match( /print-pdf/gi ) ? 'pdf' : 'paper' ) + '.css\" type=\"text/css\" media=\"print\">' );\n    </script>\n  </head>\n\n  <body>\n\n    <div class=\"reveal\">\n\n      <div class=\"slides\">\n\n\n        <section>\n          <img src=\"img/ionic-logo.png\" class=\"logo\" width=\"296\" height=\"331\">\n          <h4>Building Hybrid Apps with AngularJS and Ionic</h4>\n        </section>\n\n\n        <section>\n          <img src=\"img/me.png\" style=\"position: absolute; top:0; left:0; max-width: 260px; max-height: 260px; border-radius: 30px\">\n          <ul style=\"position: absolute; top:0; left:300px;\">\n            <li>Ionitron</li>\n            <li>Ionic Framework Developer</li>\n            <li>Drifty Co, Madison, Wisconsin</li>\n            <li><a href=\"https://twitter.com/ionitron\">@ionitron</a></li>\n            <li><a href=\"https://github.com/ionitron\">github.com/ionitron</a></li>\n          </ul>\n        </section>\n\n\n        <section>\n          <h2>Overview</h2>\n          <ol>\n            <li>Native vs Hybrid Apps</li>\n            <li>Intro Ionic</li>\n            <li>UI Components</li>\n            <li>Ionic CLI</li>\n            <li>Demos</li>\n          </ol>\n        </section>\n\n\n        <section>\n          <blockquote>\n            &ldquo;I want a native app!&rdquo;\n          </blockquote>\n        </section>\n\n\n        <section>\n          <h2>The Downsides of Native</h2>\n          <ul>\n            <li>Proficiency in each platform required</li>\n            <li>Entirely separate code bases</li>\n            <li>Timely &amp; expensive development</li>\n            <li>Diminishing returns</li>\n          </ul>\n        </section>\n\n\n        <section>\n          <h3>More Platforms. More Problems.</h3>\n          <p style=\"margin-top: 60px\">\n            <img src=\"img/apple.png\" class=\"logo\" width=\"200\" height=\"200\" style=\"margin-right: 10px\">\n            <img src=\"img/android.png\" class=\"logo\" width=\"200\" height=\"200\" style=\"margin-left: 10px; margin-right: 10px\">\n            <img src=\"img/windows.png\" class=\"logo\" width=\"200\" height=\"200\" style=\"margin-left: 10px; margin-right: 10px\">\n            <img src=\"img/blackberry.png\" class=\"logo\" width=\"200\" height=\"200\" style=\"margin-left: 10px;\">\n          </p>\n          <p><span class=\"light-text\">\n            Why are we still coding for multiple platforms?\n          </span></p>\n        </section>\n\n\n        <section>\n          <blockquote>\n            &ldquo;Is there an alternative?&rdquo;\n          </blockquote>\n        </section>\n\n\n        <section>\n          <img src=\"img/cordova.png\" class=\"logo\" style=\"margin-bottom: 0;\">\n          <ul>\n            <li>Hybrid Apps: HTML5 that acts like native</li>\n            <li>Phonegap renamed to Cordova</li>\n            <li>Web wrapped in native layer</li>\n            <li>Direct access to native APIs</li>\n            <li>Familiar web dev environment</li>\n            <li>Develop a single code base (web platform)</li>\n          </ul>\n        </section>\n\n\n        <section>\n          <blockquote>\n            &ldquo;Oh No! The Zuck has spoken!&rdquo;\n          </blockquote>\n          <img src=\"img/tech-crunch.png\">\n          <p style=\"font-size:10px\">\n            http://techcrunch.com/2012/09/11/mark-zuckerberg-our-biggest-mistake-with-mobile-was-betting-too-much-on-html5/\n          </p>\n        </section>\n\n\n        <section style=\"background:url(img/fb.png) no-repeat; background-size: 200px 200px;\">\n          <h2 style=\"margin-left: 150px;\">Are You Building the Facebook app?</h2>\n          <ul>\n            <li>Have a multi-million dollar budget?</li>\n            <li>Have a large team of experienced native developers?</li>\n            <li>Does your billion-dollar revenue depend on this app?</li>\n            <li>If so...do native</li>\n            <li class=\"fragment\">...but today it's not so black and white</liv>\n          </ul>\n        </section>\n\n\n        <section>\n          <blockquote>\n            &ldquo;Hybrid apps are slow!&rdquo;\n          </blockquote>\n          <blockquote class=\"fragment\">\n            &ldquo;The Times They Are a-Changin'&rdquo;\n          </blockquote>\n        </section>\n\n\n        <section>\n          <h3>Mobile devices have rapidly improved!</h3>\n          <table>\n            <tr>\n              <th>Year</th>\n              <th>Device</th>\n              <th>Processor</th>\n              <th>RAM</th>\n            </tr>\n            <tr>\n              <td>2007</td>\n              <td>iPhone</td>\n              <td>620 MHz</td>\n              <td>128 MB</td>\n            </tr>\n            <tr>\n              <td>2010</td>\n              <td>iPhone 4</td>\n              <td>1 GHz</td>\n              <td>512 MB</td>\n            </tr>\n            <tr>\n              <td>2015</td>\n              <td>iPhone 6</td>\n              <td>1.4 GHz dual-core</td>\n              <td>1 GB</td>\n            </tr>\n          </table>\n        </section>\n\n\n        <section>\n          <h3>Web-standards have rapidly improved!</h3>\n          <ul style=\"float:left; width: 75%;\">\n            <li>caniuse.com is lookin' pretty good nowadays</li>\n            <li>Android is now Chromium-based</li>\n            <li>iOS users keep their devices up-to-date</li>\n          </ul>\n          <img src=\"img/caniuse.png\" width=200 class=\"logo\">\n        </section>\n\n\n        <section>\n          <img src=\"img/ios8-adoption.png\">\n          <p style=\"font-size:10px\">https://mixpanel.com/trends/#report/ios_8/from_date:-141,report_unit:day,to_date:0</p>\n        </section>\n\n\n        <section>\n          <img src=\"img/android-adoption.png\">\n          <p style=\"font-size:10px\">https://mixpanel.com/trends/#report/android_os_adoption</p>\n        </section>\n\n\n        <section>\n          <h2>Native SDKs Are Great</h2>\n          <ul>\n            <li>Common UI</li>\n            <li>Views</li>\n            <li>Navigation and stack history</li>\n            <li>Transitions</li>\n            <li>Gestures</li>\n          </ul>\n        </section>\n\n\n        <section>\n          <h2>There's No Web SDK</h2>\n          <ul>\n            <li>It's the wild-west for hybrid apps</li>\n            <li>We need to bridge the gap between web and native</li>\n            <li>We need rich, native-style UI components and interactions</li>\n            <li>We need UI APIs, not just jQuery widgets</li>\n          </ul>\n        </section>\n\n\n        <section>\n          <img src=\"img/ionic-logo.png\" class=\"logo\" width=\"296\" height=\"331\">\n          <blockquote>\n            &ldquo;Hello.&rdquo;\n          </blockquote>\n        </section>\n\n\n        <section>\n          <h2>Web Technologies You Already Know and Love</h2>\n          <div style=\"margin-top: 70px\">\n            <img src=\"img/html.png\" class=\"logo\" width=\"185\" height=\"260\">\n            <img src=\"img/css.png\" class=\"logo\" width=\"185\" height=\"260\" style=\"margin-left: 80px; margin-right: 80px;\">\n            <img src=\"img/js.png\" class=\"logo\" width=\"185\" height=\"260\">\n          </div>\n          <p style=\"margin-top: 30px\"><span class=\"light-text\">\n            (You'll feel right at home)\n          </span></p>\n        </section>\n\n\n        <section>\n          <img src=\"img/trends.png\">\n          <p style=\"font-size:10px\">http://www.google.com/trends/explore#q=angularjs%2C%20ember.js%2C%20knockoutjs%2C%20backbonejs&date=8%2F2011%2037m&cmpt=q</p>\n        </section>\n\n\n        <section>\n          <img src=\"img/angular-icon.png\" class=\"logo\" width=\"210\" height=\"210\" style=\"margin-bottom: 0px\">\n          <h3>Standing on the Shoulders of AngularJS</h3>\n          <ul>\n            <li>Proven for large-scale webapp development</li>\n            <li>Extends the HTML vocabulary</li>\n            <li>UI Components using Directives and Services</li>\n          </ul>\n        </section>\n\n\n        <section>\n          <img src=\"img/native-icon.png\" class=\"logo\" width=\"210\" height=\"210\" style=\"margin-bottom: 0px\">\n          <h2>Native Focused</h2>\n          <ul>\n            <li>Modeled off of native SDKs</li>\n            <li>Built to work with Cordova</li>\n          </ul>\n        </section>\n\n\n        <section>\n          <img src=\"img/performance-icon.png\" class=\"logo\" width=\"210\" height=\"210\" style=\"margin-bottom: 0px\">\n          <h2>Performance Obsessed</h2>\n            <ul>\n              <li>Hardware accelerated animations</li>\n              <li>Minimal DOM Manipulation</li>\n              <li>Remove 300ms tap delay</li>\n            </ul>\n        </section>\n\n\n        <section>\n          <img src=\"img/design-icon.png\" class=\"logo\" width=\"210\" height=\"210\" style=\"margin-bottom: 0px\">\n          <h2>Plain ol' CSS</h2>\n          <ul>\n            <li>Cohesive visual system</li>\n            <li>Clean and simple</li>\n            <li>Easy to customize</li>\n            <li>Stand-alone CSS (independent of Ionic's JavaScript)</li>\n            <li><a href=\"https://ionicframework.com/docs/v1/components/\" target=\"_blank\">ionicframework.com/docs/v1/components</a></li>\n          </ul>\n        </section>\n\n\n        <section>\n          <p>\n            <img src=\"img/sass-icon.png\" class=\"logo\" width=\"210\" height=\"210\" style=\"margin-bottom: 0px\">\n          </p>\n          <ul>\n            <li>CSS generated from the Sass preprocessor</li>\n            <li>Quickly give your app its own look and feel</li>\n            <li>CSS designed to be easily overridden</li>\n            <li>Variables based with default settings</li>\n            <li>80+ reusable and useful mixins</li>\n          </ul>\n        </section>\n\n\n        <section>\n          <h2>Ionicons</h2>\n          <img src=\"img/ionicons.png\" class=\"logo\" width=\"655\" height=\"436\">\n          <p>Over 700 MIT licensed font-icons included</p>\n          <p><a href=\"https://ionic.io/ionicons/\" target=\"_blank\">ionic.io/ionicons</a></p>\n        </section>\n\n\n        <section>\n          <blockquote>\n            &ldquo;How does it all come together?&rdquo;\n          </blockquote>\n          <div class=\"stack\">Your App</div>\n          <div class=\"stack\">Ionic</div>\n          <div class=\"stack\">AngularJS</div>\n          <div class=\"stack\">WebView (Cordova)</div>\n          <div class=\"stack\">Native SDK</div>\n        </section>\n\n\n        <section>\n          <h2>Ionic's Adoption</h2>\n          <ul>\n            <li>26,000+ Github Stars</li>\n            <li>Top 50 most starred Github repos</li>\n            <li>Installed over 200,000 times every month</li>\n            <li>3M Ionic apps have been created since 2014</li>\n            <li>Hundreds of thousands of active community members</li>\n          </ul>\n        </section>\n\n\n        <section>\n          <blockquote>\n            UI Component Overview\n          </blockquote>\n        </section>\n\n\n        <section>\n          <div class=\"col preview\">\n            <img src=\"img/list-example.png\" class=\"logo\" width=\"380\" height=\"800\">\n          </div>\n          <div class=\"col code\">\n            <h2>Lists</h2>\n          <pre><code data-trim contenteditable class=\"xml\">\n<div class=\"list\">\n\n  <div class=\"item item-divider\">\n    Candy Bars\n  </div>\n\n  <a class=\"item\" href=\"#\">\n    Butterfinger\n  </a>\n\n  <a class=\"item\" href=\"#\">\n    Kit Kat\n  </a>\n\n  ...\n\n</div></code></pre>\n          </div>\n        </section>\n\n        <section>\n          <div class=\"col preview demo-frame\">\n            <iframe src=\"demos/list/index.html\"></iframe>\n          </div>\n          <div class=\"col code\">\n            <h2>Complex Lists</h2>\n            <ul style=\"margin-left: 70px\">\n              <li>AngularJS Directive</li>\n              <li>Buttons exposed by swiping</li>\n              <li>Reorder</li>\n              <li>Delete</li>\n            </ul>\n            <pre><code data-trim contenteditable class=\"xml\">\n<ion-list>\n\n  <ion-item ng-repeat=\"item in items\" item=\"item\">\n    List Item {{ item.id }}\n  </ion-item>\n\n</ion-list></code></pre>\n          </div>\n        </section>\n\n        <section>\n          <div class=\"col preview demo-frame\">\n            <iframe src=\"demos/collection-repeat/index.html\"></iframe>\n          </div>\n          <div class=\"col code\">\n            <h2>Collection Repeat</h2>\n            <ul style=\"margin-left: 70px\">\n              <li>Similar to Angular's <code>ng-repeat</code></li>\n              <li>Inspired by iOS’s UICollectionView</li>\n              <li>Scroll through thousands of items</li>\n              <li>Only renders the viewable items</li>\n              <li>Smooth jank-free scrolling</li>\n            </ul>\n            <pre><code data-trim contenteditable class=\"xml\">\n<div class=\"list\">\n  <div collection-repeat=\"c in contacts\">\n    <h2>{{ c.name }}</h2>\n    <p>{{ c.email }}</p>\n  </div>\n</div></code></pre>\n          </div>\n        </section>\n\n\n        <section>\n          <div class=\"col preview demo-frame\">\n            <iframe src=\"demos/navigation/index.html\"></iframe>\n          </div>\n          <div class=\"col code\">\n            <h2>Navigation</h2>\n            <ul style=\"margin-left: 70px\">\n              <li>Uses AngularUI Router</li>\n              <li>Shows back button when possible</li>\n              <li>Transitions follow direction of nav</li>\n              <li>Works with Android's back button</li>\n            </ul>\n          <pre><code data-trim contenteditable class=\"xml\">\n<ion-nav-bar>\n  <ion-nav-back-button>\n    Back\n  </ion-nav-back-button>\n</ion-nav-bar>\n\n<ion-nav-view></ion-nav-view>\n</code></pre>\n          </div>\n        </section>\n\n        <section>\n          <div class=\"col preview demo-frame\">\n            <iframe src=\"demos/tabs/index.html\"></iframe>\n          </div>\n          <div class=\"col code\">\n            <h2>Tabs</h2>\n            <ul style=\"margin-left: 70px\">\n              <li>Nested views</li>\n              <li>Each tab has its own nav history</li>\n              <li>Abstract states in AngularUI Router</li>\n            </ul>\n            <pre><code data-trim contenteditable class=\"xml\">\n<ion-tabs>\n\n  <ion-tab title=\"Home\" icon=\"ion-home\">\n    <ion-nav-view name=\"home\"></ion-nav-view>\n  </ion-tab>\n\n  <ion-tab title=\"About\" icon=\"ion-information\">\n    <ion-nav-view name=\"about\"></ion-nav-view>\n  </ion-tab>\n\n  <ion-tab title=\"Contact\" icon=\"ion-ios7-world\">\n    <ion-nav-view name=\"contact\"></ion-nav-view>\n  </ion-tab>\n\n</ion-tabs></code></pre>\n          </div>\n        </section>\n\n\n        <section>\n          <div class=\"col preview demo-frame\">\n            <iframe src=\"demos/sidemenu/index.html\"></iframe>\n          </div>\n          <div class=\"col code\">\n            <h2>Side Menu</h2>\n          <pre><code data-trim contenteditable class=\"xml\">\n<ion-side-menus>\n\n  <ion-side-menu-content>\n\n    <ion-nav-view name=\"menuContent\"></ion-nav-view>\n\n  </ion-side-menu-content>\n\n  <ion-side-menu side=\"left\">\n\n    <ion-header-bar class=\"bar-assertive\">\n      <h1 class=\"title\">Left Menu</h1>\n    </ion-header-bar>\n\n    <ion-content>\n      ...\n    </ion-content>\n\n  </ion-side-menu>\n\n</ion-side-menus>\n</code></pre>\n          </div>\n        </section>\n\n\n        <section>\n          <div class=\"col preview demo-frame\">\n            <iframe src=\"demos/slidebox/index.html\"></iframe>\n          </div>\n          <div class=\"col code\">\n            <h2>Slide Box</h2>\n          <pre><code data-trim contenteditable class=\"xml\">\n<ion-slide-box on-slide-changed=\"change(index)\">\n  <ion-slide>\n    Slide 1\n  </ion-slide>\n  <ion-slide>\n    Slide 2\n  </ion-slide>\n  <ion-slide>\n    Slide 3\n  </ion-slide>\n</ion-slide-box></code></pre>\n          </div>\n        </section>\n\n\n        <section>\n          <div class=\"col preview demo-frame\">\n            <iframe src=\"demos/actionsheet/index.html\"></iframe>\n          </div>\n          <div class=\"col code\">\n            <h2>Action Sheet</h2>\n            <ul style=\"margin-left: 70px\">\n              <li>AngularJS Service</li>\n              <li>Inject into controllers</li>\n            </ul>\n          <pre><code data-trim contenteditable class=\"js\">\n$ionicActionSheet.show({\n  titleText: 'Action Sheet Example',\n  buttons: [\n    { text: 'Share' },\n    { text: 'Move' },\n  ],\n  destructiveText: 'Delete',\n  cancelText: 'Cancel',\n  buttonClicked: function(index) {\n    console.log('BUTTON CLICKED', index);\n    return true;\n  }\n});</code></pre>\n          </div>\n        </section>\n\n\n        <section>\n          <div class=\"col preview demo-frame\">\n            <iframe src=\"demos/popover/index.html\"></iframe>\n          </div>\n          <div class=\"col code\">\n            <h2>Popover</h2>\n            <ul style=\"margin-left: 70px\">\n              <li>AngularJS Service</li>\n              <li>Inline or external template</li>\n            </ul>\n          <pre><code data-trim contenteditable class=\"js\">\n$ionicPopover.fromTemplateUrl('popover.html',\n  function(popover) {\n    $scope.popover = popover;\n  }\n);</code></pre>\n          <pre><code data-trim contenteditable class=\"xml\">\n<ion-popover-view>\n  <ion-header-bar>\n    <h1 class=\"title\">My Popover Title</h1>\n  </ion-header-bar>\n  <ion-content class=\"padding\">\n    Hello!\n  </ion-content>\n</ion-popover-view></code></pre>\n          </div>\n        </section>\n\n\n        <section>\n          <div class=\"col preview demo-frame\">\n            <iframe src=\"demos/modal/index.html\"></iframe>\n          </div>\n          <div class=\"col code\">\n            <h2>Modal</h2>\n            <ul style=\"margin-left: 70px\">\n              <li>AngularJS Service</li>\n              <li>Inline or external template</li>\n            </ul>\n          <pre><code data-trim contenteditable class=\"js\">\n$ionicModal.fromTemplateUrl('modal.html', {\n  scope: $scope\n}).then(function(modal) {\n  $scope.modal = modal;\n});</code></pre>\n          </div>\n        </section>\n\n\n        <section>\n          <div class=\"col preview demo-frame\">\n            <iframe src=\"demos/pull-to-refresh/index.html\"></iframe>\n          </div>\n          <div class=\"col code\">\n            <h2>Pull to Refresh</h2>\n          <pre><code data-trim contenteditable class=\"xml\">\n<ion-refresher on-refresh=\"doRefresh()\"\n               pulling-text=\"Pull to refresh...\"\n               refreshing-text=\"Refreshing!\"\n               refreshing-icon=\"ion-loading-c\">\n</ion-refresher></code></pre>\n          </div>\n        </section>\n\n        <section>\n          <h2>Ionic Creator</h2>\n          <img src=\"img/creator-preview.png\" style=\"border:none;\"/>\n        </section>\n\n        <section>\n          <h2>Ionic View App</h2>\n          <img src=\"img/ionic-view-preview-right.png\" style=\"border:none;box-shadow:none;background:none;\"/>\n        </section>\n\n        <section>\n<pre class=\"ionic-blue\"><code>\n                          $ npm install -g ionic\n\n                           _             _\n                          (_)           (_)\n                           _  ___  _ __  _  ___\n                          | |/ _ \\| '_ \\| |/ __|\n                          | | (_) | | | | | (__\n                          |_|\\___/|_| |_|_|\\___|  CLI\n</code></pre>\n          <ul>\n            <li>Quickly create a project with starter templates</li>\n            <li>Boilerplate app structure ready for customization</li>\n            <li>Preconfigured tools: Gulp, Sass, Bower, etc.</li>\n            <li>Start a local dev server with LiveReload</li>\n            <li>Update Ionic Framework library files</li>\n            <li>Build and run native apps</li>\n          </ul>\n        </section>\n\n\n        <section>\n          <h2>Ionic CLI</h2>\n<pre class=\"ionic-blue\">\n<code class=\"fragment\">$ npm install -g ionic cordova</code>\n<code class=\"fragment\">$ ionic start myapp sidemenu</code>\n<code class=\"fragment\">$ cd myapp</code>\n<code class=\"fragment\">$ ionic serve</code>\n</pre>\n        </section>\n\n\n        <section>\n          <h2><strong>Demo Time!</strong></h2>\n          <h6 class=\"light-text\">May the demo gods be with us</h6>\n        </section>\n\n\n        <section>\n          <h2><span style=\"text-decoration:line-through\">Ionic</span> Angular Testing</h2>\n          <ul>\n            <li>It's just an AngularJS app!</li>\n            <li>Setup with a great separation of concerns</li>\n            <li>Karma unit tests</li>\n            <li>Protractor e2e tests</li>\n          </ul>\n        </section>\n\n\n        <section>\n          <h2>Ionic Showcase</h2>\n          <img src=\"img/showcase.png\" height=\"300\">\n          <p>\n            <a href=\"http://showcase.ionicframework.com/\" target=\"_blank\">showcase.ionicframework.com</a>\n          </p>\n        </section>\n\n\n        <section>\n          <h2><strong>MIT LICENSED</strong></h2>\n          <h6 class=\"light-text\">Free to use (even commercially)</h6>\n        </section>\n\n\n        <section>\n          <h2><strong>COMMUNITY POWERED</strong></h2>\n          <h6 class=\"light-text\">Active developer forum, IRC and GitHub repo</h6>\n        </section>\n\n\n        <section>\n          <h2>Get Started with Ionic!</h2>\n          <br />\n          <p><strong>Getting started guide</strong><br />\n          <a href=\"hhttps://ionicframework.com/getting-started/\" target=\"_blank\"><span class=\"light-text\">ionicframework.com/getting-started</span></a></p>\n          <br />\n          <p><strong>Documentation</strong><br />\n            <a href=\"https://ionicframework.com/docs/\" target=\"_blank\"><span class=\"light-text\">ionicframework.com/docs</span></a></p>\n          <br />\n          <p><strong>Visit the Community Forum</strong><br />\n          <a href=\"http://forum.ionicframework.com/\" target=\"_blank\"><span class=\"light-text\">forum.ionicframework.com</span></a></p>\n          <br />\n          <p><strong>Contribute on GitHub</strong><br />\n          <a href=\"https://github.com/ionic-team/ionic\" target=\"_blank\"><span class=\"light-text\">github.com/ionic-team/ionic</span></a></p>\n        </section>\n\n\n        <section>\n          <h2><code style=\"font-size:60px\">&lt;/html&gt;</code></h2>\n          <h3><a href=\"https://twitter.com/ionicframework\" target=\"_blank\">@ionicframework</a></h3>\n          <h4><a href=\"https://ionicframework.github.io/ionic-present/#/\">https://ionicframework.github.io/ionic-present</a></h4>\n        </section>\n\n\n      </div>\n\n    </div>\n\n    <script src=\"lib/js/head.min.js\"></script>\n    <script src=\"js/reveal.min.js\"></script>\n\n    <script>\n      // Full list of configuration options available here:\n      // https://github.com/hakimel/reveal.js#configuration\n      Reveal.initialize({\n        controls: true,\n        progress: true,\n        history: true,\n        center: true,\n\n        theme: Reveal.getQueryHash().theme, // available themes are in /css/theme\n        transition: Reveal.getQueryHash().transition || 'fade', // default/cube/page/concave/zoom/linear/fade/none\n\n        // Optional libraries used to extend on reveal.js\n        dependencies: [\n          { src: 'lib/js/classList.js', condition: function() { return !document.body.classList; } },\n          { src: 'plugin/highlight/highlight.js', async: true, callback: function() { hljs.initHighlightingOnLoad(); } }\n        ]\n      });\n\n      if(location.protocol == 'file:') {\n        alert('This presentation must be hosted be a web server for the demos to work, such as python -m SimpleHTTPServer')\n      }\n    </script>\n\n  </body>\n</html>\n"
  },
  {
    "path": "content/present-ionic/slides/ionic/css/ionic.css",
    "content": "/*!\n * Copyright 2014 Drifty Co.\n * http://drifty.com/\n *\n * Ionic, v1.0.0-beta.11\n * A powerful HTML5 mobile app framework.\n * https://ionicframework.com/\n *\n * By @maxlynch, @benjsperry, @adamdbradley <3\n *\n * Licensed under the MIT license. Please see LICENSE for more information.\n *\n */\n/*!\n  Ionicons, v1.5.2\n  Created by Ben Sperry for the Ionic Framework, https://ionicons.com/\n  https://twitter.com/benjsperry  https://twitter.com/ionicframework\n  MIT License: https://github.com/ionic-team/ionicons\n*/\n@font-face {\n  font-family: \"Ionicons\";\n  src: url(\"../fonts/ionicons.eot?v=1.5.2\");\n  src: url(\"../fonts/ionicons.eot?v=1.5.2#iefix\") format(\"embedded-opentype\"), url(\"../fonts/ionicons.ttf?v=1.5.2\") format(\"truetype\"), url(\"../fonts/ionicons.woff?v=1.5.2\") format(\"woff\"), url(\"../fonts/ionicons.svg?v=1.5.2#Ionicons\") format(\"svg\");\n  font-weight: normal;\n  font-style: normal; }\n\n.ion, .ion-loading-a, .ion-loading-b, .ion-loading-c, .ion-loading-d, .ion-looping, .ion-refreshing, .ion-ios7-reloading, .ionicons, .ion-alert:before, .ion-alert-circled:before, .ion-android-add:before, .ion-android-add-contact:before, .ion-android-alarm:before, .ion-android-archive:before, .ion-android-arrow-back:before, .ion-android-arrow-down-left:before, .ion-android-arrow-down-right:before, .ion-android-arrow-forward:before, .ion-android-arrow-up-left:before, .ion-android-arrow-up-right:before, .ion-android-battery:before, .ion-android-book:before, .ion-android-calendar:before, .ion-android-call:before, .ion-android-camera:before, .ion-android-chat:before, .ion-android-checkmark:before, .ion-android-clock:before, .ion-android-close:before, .ion-android-contact:before, .ion-android-contacts:before, .ion-android-data:before, .ion-android-developer:before, .ion-android-display:before, .ion-android-download:before, .ion-android-drawer:before, .ion-android-dropdown:before, .ion-android-earth:before, .ion-android-folder:before, .ion-android-forums:before, .ion-android-friends:before, .ion-android-hand:before, .ion-android-image:before, .ion-android-inbox:before, .ion-android-information:before, .ion-android-keypad:before, .ion-android-lightbulb:before, .ion-android-locate:before, .ion-android-location:before, .ion-android-mail:before, .ion-android-microphone:before, .ion-android-mixer:before, .ion-android-more:before, .ion-android-note:before, .ion-android-playstore:before, .ion-android-printer:before, .ion-android-promotion:before, .ion-android-reminder:before, .ion-android-remove:before, .ion-android-search:before, .ion-android-send:before, .ion-android-settings:before, .ion-android-share:before, .ion-android-social:before, .ion-android-social-user:before, .ion-android-sort:before, .ion-android-stair-drawer:before, .ion-android-star:before, .ion-android-stopwatch:before, .ion-android-storage:before, .ion-android-system-back:before, .ion-android-system-home:before, .ion-android-system-windows:before, .ion-android-timer:before, .ion-android-trash:before, .ion-android-user-menu:before, .ion-android-volume:before, .ion-android-wifi:before, .ion-aperture:before, .ion-archive:before, .ion-arrow-down-a:before, .ion-arrow-down-b:before, .ion-arrow-down-c:before, .ion-arrow-expand:before, .ion-arrow-graph-down-left:before, .ion-arrow-graph-down-right:before, .ion-arrow-graph-up-left:before, .ion-arrow-graph-up-right:before, .ion-arrow-left-a:before, .ion-arrow-left-b:before, .ion-arrow-left-c:before, .ion-arrow-move:before, .ion-arrow-resize:before, .ion-arrow-return-left:before, .ion-arrow-return-right:before, .ion-arrow-right-a:before, .ion-arrow-right-b:before, .ion-arrow-right-c:before, .ion-arrow-shrink:before, .ion-arrow-swap:before, .ion-arrow-up-a:before, .ion-arrow-up-b:before, .ion-arrow-up-c:before, .ion-asterisk:before, .ion-at:before, .ion-bag:before, .ion-battery-charging:before, .ion-battery-empty:before, .ion-battery-full:before, .ion-battery-half:before, .ion-battery-low:before, .ion-beaker:before, .ion-beer:before, .ion-bluetooth:before, .ion-bonfire:before, .ion-bookmark:before, .ion-briefcase:before, .ion-bug:before, .ion-calculator:before, .ion-calendar:before, .ion-camera:before, .ion-card:before, .ion-cash:before, .ion-chatbox:before, .ion-chatbox-working:before, .ion-chatboxes:before, .ion-chatbubble:before, .ion-chatbubble-working:before, .ion-chatbubbles:before, .ion-checkmark:before, .ion-checkmark-circled:before, .ion-checkmark-round:before, .ion-chevron-down:before, .ion-chevron-left:before, .ion-chevron-right:before, .ion-chevron-up:before, .ion-clipboard:before, .ion-clock:before, .ion-close:before, .ion-close-circled:before, .ion-close-round:before, .ion-closed-captioning:before, .ion-cloud:before, .ion-code:before, .ion-code-download:before, .ion-code-working:before, .ion-coffee:before, .ion-compass:before, .ion-compose:before, .ion-connection-bars:before, .ion-contrast:before, .ion-cube:before, .ion-disc:before, .ion-document:before, .ion-document-text:before, .ion-drag:before, .ion-earth:before, .ion-edit:before, .ion-egg:before, .ion-eject:before, .ion-email:before, .ion-eye:before, .ion-eye-disabled:before, .ion-female:before, .ion-filing:before, .ion-film-marker:before, .ion-fireball:before, .ion-flag:before, .ion-flame:before, .ion-flash:before, .ion-flash-off:before, .ion-flask:before, .ion-folder:before, .ion-fork:before, .ion-fork-repo:before, .ion-forward:before, .ion-funnel:before, .ion-game-controller-a:before, .ion-game-controller-b:before, .ion-gear-a:before, .ion-gear-b:before, .ion-grid:before, .ion-hammer:before, .ion-happy:before, .ion-headphone:before, .ion-heart:before, .ion-heart-broken:before, .ion-help:before, .ion-help-buoy:before, .ion-help-circled:before, .ion-home:before, .ion-icecream:before, .ion-icon-social-google-plus:before, .ion-icon-social-google-plus-outline:before, .ion-image:before, .ion-images:before, .ion-information:before, .ion-information-circled:before, .ion-ionic:before, .ion-ios7-alarm:before, .ion-ios7-alarm-outline:before, .ion-ios7-albums:before, .ion-ios7-albums-outline:before, .ion-ios7-americanfootball:before, .ion-ios7-americanfootball-outline:before, .ion-ios7-analytics:before, .ion-ios7-analytics-outline:before, .ion-ios7-arrow-back:before, .ion-ios7-arrow-down:before, .ion-ios7-arrow-forward:before, .ion-ios7-arrow-left:before, .ion-ios7-arrow-right:before, .ion-ios7-arrow-thin-down:before, .ion-ios7-arrow-thin-left:before, .ion-ios7-arrow-thin-right:before, .ion-ios7-arrow-thin-up:before, .ion-ios7-arrow-up:before, .ion-ios7-at:before, .ion-ios7-at-outline:before, .ion-ios7-barcode:before, .ion-ios7-barcode-outline:before, .ion-ios7-baseball:before, .ion-ios7-baseball-outline:before, .ion-ios7-basketball:before, .ion-ios7-basketball-outline:before, .ion-ios7-bell:before, .ion-ios7-bell-outline:before, .ion-ios7-bolt:before, .ion-ios7-bolt-outline:before, .ion-ios7-bookmarks:before, .ion-ios7-bookmarks-outline:before, .ion-ios7-box:before, .ion-ios7-box-outline:before, .ion-ios7-briefcase:before, .ion-ios7-briefcase-outline:before, .ion-ios7-browsers:before, .ion-ios7-browsers-outline:before, .ion-ios7-calculator:before, .ion-ios7-calculator-outline:before, .ion-ios7-calendar:before, .ion-ios7-calendar-outline:before, .ion-ios7-camera:before, .ion-ios7-camera-outline:before, .ion-ios7-cart:before, .ion-ios7-cart-outline:before, .ion-ios7-chatboxes:before, .ion-ios7-chatboxes-outline:before, .ion-ios7-chatbubble:before, .ion-ios7-chatbubble-outline:before, .ion-ios7-checkmark:before, .ion-ios7-checkmark-empty:before, .ion-ios7-checkmark-outline:before, .ion-ios7-circle-filled:before, .ion-ios7-circle-outline:before, .ion-ios7-clock:before, .ion-ios7-clock-outline:before, .ion-ios7-close:before, .ion-ios7-close-empty:before, .ion-ios7-close-outline:before, .ion-ios7-cloud:before, .ion-ios7-cloud-download:before, .ion-ios7-cloud-download-outline:before, .ion-ios7-cloud-outline:before, .ion-ios7-cloud-upload:before, .ion-ios7-cloud-upload-outline:before, .ion-ios7-cloudy:before, .ion-ios7-cloudy-night:before, .ion-ios7-cloudy-night-outline:before, .ion-ios7-cloudy-outline:before, .ion-ios7-cog:before, .ion-ios7-cog-outline:before, .ion-ios7-compose:before, .ion-ios7-compose-outline:before, .ion-ios7-contact:before, .ion-ios7-contact-outline:before, .ion-ios7-copy:before, .ion-ios7-copy-outline:before, .ion-ios7-download:before, .ion-ios7-download-outline:before, .ion-ios7-drag:before, .ion-ios7-email:before, .ion-ios7-email-outline:before, .ion-ios7-expand:before, .ion-ios7-eye:before, .ion-ios7-eye-outline:before, .ion-ios7-fastforward:before, .ion-ios7-fastforward-outline:before, .ion-ios7-filing:before, .ion-ios7-filing-outline:before, .ion-ios7-film:before, .ion-ios7-film-outline:before, .ion-ios7-flag:before, .ion-ios7-flag-outline:before, .ion-ios7-folder:before, .ion-ios7-folder-outline:before, .ion-ios7-football:before, .ion-ios7-football-outline:before, .ion-ios7-gear:before, .ion-ios7-gear-outline:before, .ion-ios7-glasses:before, .ion-ios7-glasses-outline:before, .ion-ios7-heart:before, .ion-ios7-heart-outline:before, .ion-ios7-help:before, .ion-ios7-help-empty:before, .ion-ios7-help-outline:before, .ion-ios7-home:before, .ion-ios7-home-outline:before, .ion-ios7-infinite:before, .ion-ios7-infinite-outline:before, .ion-ios7-information:before, .ion-ios7-information-empty:before, .ion-ios7-information-outline:before, .ion-ios7-ionic-outline:before, .ion-ios7-keypad:before, .ion-ios7-keypad-outline:before, .ion-ios7-lightbulb:before, .ion-ios7-lightbulb-outline:before, .ion-ios7-location:before, .ion-ios7-location-outline:before, .ion-ios7-locked:before, .ion-ios7-locked-outline:before, .ion-ios7-loop:before, .ion-ios7-loop-strong:before, .ion-ios7-medkit:before, .ion-ios7-medkit-outline:before, .ion-ios7-mic:before, .ion-ios7-mic-off:before, .ion-ios7-mic-outline:before, .ion-ios7-minus:before, .ion-ios7-minus-empty:before, .ion-ios7-minus-outline:before, .ion-ios7-monitor:before, .ion-ios7-monitor-outline:before, .ion-ios7-moon:before, .ion-ios7-moon-outline:before, .ion-ios7-more:before, .ion-ios7-more-outline:before, .ion-ios7-musical-note:before, .ion-ios7-musical-notes:before, .ion-ios7-navigate:before, .ion-ios7-navigate-outline:before, .ion-ios7-paper:before, .ion-ios7-paper-outline:before, .ion-ios7-paperplane:before, .ion-ios7-paperplane-outline:before, .ion-ios7-partlysunny:before, .ion-ios7-partlysunny-outline:before, .ion-ios7-pause:before, .ion-ios7-pause-outline:before, .ion-ios7-paw:before, .ion-ios7-paw-outline:before, .ion-ios7-people:before, .ion-ios7-people-outline:before, .ion-ios7-person:before, .ion-ios7-person-outline:before, .ion-ios7-personadd:before, .ion-ios7-personadd-outline:before, .ion-ios7-photos:before, .ion-ios7-photos-outline:before, .ion-ios7-pie:before, .ion-ios7-pie-outline:before, .ion-ios7-play:before, .ion-ios7-play-outline:before, .ion-ios7-plus:before, .ion-ios7-plus-empty:before, .ion-ios7-plus-outline:before, .ion-ios7-pricetag:before, .ion-ios7-pricetag-outline:before, .ion-ios7-pricetags:before, .ion-ios7-pricetags-outline:before, .ion-ios7-printer:before, .ion-ios7-printer-outline:before, .ion-ios7-pulse:before, .ion-ios7-pulse-strong:before, .ion-ios7-rainy:before, .ion-ios7-rainy-outline:before, .ion-ios7-recording:before, .ion-ios7-recording-outline:before, .ion-ios7-redo:before, .ion-ios7-redo-outline:before, .ion-ios7-refresh:before, .ion-ios7-refresh-empty:before, .ion-ios7-refresh-outline:before, .ion-ios7-reload:before, .ion-ios7-reloading:before, .ion-ios7-reverse-camera:before, .ion-ios7-reverse-camera-outline:before, .ion-ios7-rewind:before, .ion-ios7-rewind-outline:before, .ion-ios7-search:before, .ion-ios7-search-strong:before, .ion-ios7-settings:before, .ion-ios7-settings-strong:before, .ion-ios7-shrink:before, .ion-ios7-skipbackward:before, .ion-ios7-skipbackward-outline:before, .ion-ios7-skipforward:before, .ion-ios7-skipforward-outline:before, .ion-ios7-snowy:before, .ion-ios7-speedometer:before, .ion-ios7-speedometer-outline:before, .ion-ios7-star:before, .ion-ios7-star-half:before, .ion-ios7-star-outline:before, .ion-ios7-stopwatch:before, .ion-ios7-stopwatch-outline:before, .ion-ios7-sunny:before, .ion-ios7-sunny-outline:before, .ion-ios7-telephone:before, .ion-ios7-telephone-outline:before, .ion-ios7-tennisball:before, .ion-ios7-tennisball-outline:before, .ion-ios7-thunderstorm:before, .ion-ios7-thunderstorm-outline:before, .ion-ios7-time:before, .ion-ios7-time-outline:before, .ion-ios7-timer:before, .ion-ios7-timer-outline:before, .ion-ios7-toggle:before, .ion-ios7-toggle-outline:before, .ion-ios7-trash:before, .ion-ios7-trash-outline:before, .ion-ios7-undo:before, .ion-ios7-undo-outline:before, .ion-ios7-unlocked:before, .ion-ios7-unlocked-outline:before, .ion-ios7-upload:before, .ion-ios7-upload-outline:before, .ion-ios7-videocam:before, .ion-ios7-videocam-outline:before, .ion-ios7-volume-high:before, .ion-ios7-volume-low:before, .ion-ios7-wineglass:before, .ion-ios7-wineglass-outline:before, .ion-ios7-world:before, .ion-ios7-world-outline:before, .ion-ipad:before, .ion-iphone:before, .ion-ipod:before, .ion-jet:before, .ion-key:before, .ion-knife:before, .ion-laptop:before, .ion-leaf:before, .ion-levels:before, .ion-lightbulb:before, .ion-link:before, .ion-load-a:before, .ion-loading-a:before, .ion-load-b:before, .ion-loading-b:before, .ion-load-c:before, .ion-loading-c:before, .ion-load-d:before, .ion-loading-d:before, .ion-location:before, .ion-locked:before, .ion-log-in:before, .ion-log-out:before, .ion-loop:before, .ion-looping:before, .ion-magnet:before, .ion-male:before, .ion-man:before, .ion-map:before, .ion-medkit:before, .ion-merge:before, .ion-mic-a:before, .ion-mic-b:before, .ion-mic-c:before, .ion-minus:before, .ion-minus-circled:before, .ion-minus-round:before, .ion-model-s:before, .ion-monitor:before, .ion-more:before, .ion-mouse:before, .ion-music-note:before, .ion-navicon:before, .ion-navicon-round:before, .ion-navigate:before, .ion-network:before, .ion-no-smoking:before, .ion-nuclear:before, .ion-outlet:before, .ion-paper-airplane:before, .ion-paperclip:before, .ion-pause:before, .ion-person:before, .ion-person-add:before, .ion-person-stalker:before, .ion-pie-graph:before, .ion-pin:before, .ion-pinpoint:before, .ion-pizza:before, .ion-plane:before, .ion-planet:before, .ion-play:before, .ion-playstation:before, .ion-plus:before, .ion-plus-circled:before, .ion-plus-round:before, .ion-podium:before, .ion-pound:before, .ion-power:before, .ion-pricetag:before, .ion-pricetags:before, .ion-printer:before, .ion-pull-request:before, .ion-qr-scanner:before, .ion-quote:before, .ion-radio-waves:before, .ion-record:before, .ion-refresh:before, .ion-refreshing:before, .ion-reply:before, .ion-reply-all:before, .ion-ribbon-a:before, .ion-ribbon-b:before, .ion-sad:before, .ion-scissors:before, .ion-search:before, .ion-settings:before, .ion-share:before, .ion-shuffle:before, .ion-skip-backward:before, .ion-skip-forward:before, .ion-social-android:before, .ion-social-android-outline:before, .ion-social-apple:before, .ion-social-apple-outline:before, .ion-social-bitcoin:before, .ion-social-bitcoin-outline:before, .ion-social-buffer:before, .ion-social-buffer-outline:before, .ion-social-designernews:before, .ion-social-designernews-outline:before, .ion-social-dribbble:before, .ion-social-dribbble-outline:before, .ion-social-dropbox:before, .ion-social-dropbox-outline:before, .ion-social-facebook:before, .ion-social-facebook-outline:before, .ion-social-foursquare:before, .ion-social-foursquare-outline:before, .ion-social-freebsd-devil:before, .ion-social-github:before, .ion-social-github-outline:before, .ion-social-google:before, .ion-social-google-outline:before, .ion-social-googleplus:before, .ion-social-googleplus-outline:before, .ion-social-hackernews:before, .ion-social-hackernews-outline:before, .ion-social-instagram:before, .ion-social-instagram-outline:before, .ion-social-linkedin:before, .ion-social-linkedin-outline:before, .ion-social-pinterest:before, .ion-social-pinterest-outline:before, .ion-social-reddit:before, .ion-social-reddit-outline:before, .ion-social-rss:before, .ion-social-rss-outline:before, .ion-social-skype:before, .ion-social-skype-outline:before, .ion-social-tumblr:before, .ion-social-tumblr-outline:before, .ion-social-tux:before, .ion-social-twitter:before, .ion-social-twitter-outline:before, .ion-social-usd:before, .ion-social-usd-outline:before, .ion-social-vimeo:before, .ion-social-vimeo-outline:before, .ion-social-windows:before, .ion-social-windows-outline:before, .ion-social-wordpress:before, .ion-social-wordpress-outline:before, .ion-social-yahoo:before, .ion-social-yahoo-outline:before, .ion-social-youtube:before, .ion-social-youtube-outline:before, .ion-speakerphone:before, .ion-speedometer:before, .ion-spoon:before, .ion-star:before, .ion-stats-bars:before, .ion-steam:before, .ion-stop:before, .ion-thermometer:before, .ion-thumbsdown:before, .ion-thumbsup:before, .ion-toggle:before, .ion-toggle-filled:before, .ion-trash-a:before, .ion-trash-b:before, .ion-trophy:before, .ion-umbrella:before, .ion-university:before, .ion-unlocked:before, .ion-upload:before, .ion-usb:before, .ion-videocamera:before, .ion-volume-high:before, .ion-volume-low:before, .ion-volume-medium:before, .ion-volume-mute:before, .ion-wand:before, .ion-waterdrop:before, .ion-wifi:before, .ion-wineglass:before, .ion-woman:before, .ion-wrench:before, .ion-xbox:before {\n  display: inline-block;\n  font-family: \"Ionicons\";\n  speak: none;\n  font-style: normal;\n  font-weight: normal;\n  font-variant: normal;\n  text-transform: none;\n  text-rendering: auto;\n  line-height: 1;\n  -webkit-font-smoothing: antialiased;\n  -moz-osx-font-smoothing: grayscale; }\n\n.ion-spin, .ion-loading-a, .ion-loading-b, .ion-loading-c, .ion-loading-d, .ion-looping, .ion-refreshing, .ion-ios7-reloading {\n  -webkit-animation: spin 1s infinite linear;\n  -moz-animation: spin 1s infinite linear;\n  -o-animation: spin 1s infinite linear;\n  animation: spin 1s infinite linear; }\n\n@-moz-keyframes spin {\n  0% {\n    -moz-transform: rotate(0deg); }\n\n  100% {\n    -moz-transform: rotate(359deg); } }\n\n@-webkit-keyframes spin {\n  0% {\n    -webkit-transform: rotate(0deg); }\n\n  100% {\n    -webkit-transform: rotate(359deg); } }\n\n@-o-keyframes spin {\n  0% {\n    -o-transform: rotate(0deg); }\n\n  100% {\n    -o-transform: rotate(359deg); } }\n\n@-ms-keyframes spin {\n  0% {\n    -ms-transform: rotate(0deg); }\n\n  100% {\n    -ms-transform: rotate(359deg); } }\n\n@keyframes spin {\n  0% {\n    transform: rotate(0deg); }\n\n  100% {\n    transform: rotate(359deg); } }\n\n.ion-loading-a {\n  -webkit-animation-timing-function: steps(8, start);\n  -moz-animation-timing-function: steps(8, start);\n  animation-timing-function: steps(8, start); }\n\n.ion-alert:before {\n  content: \"\\f101\"; }\n\n.ion-alert-circled:before {\n  content: \"\\f100\"; }\n\n.ion-android-add:before {\n  content: \"\\f2c7\"; }\n\n.ion-android-add-contact:before {\n  content: \"\\f2c6\"; }\n\n.ion-android-alarm:before {\n  content: \"\\f2c8\"; }\n\n.ion-android-archive:before {\n  content: \"\\f2c9\"; }\n\n.ion-android-arrow-back:before {\n  content: \"\\f2ca\"; }\n\n.ion-android-arrow-down-left:before {\n  content: \"\\f2cb\"; }\n\n.ion-android-arrow-down-right:before {\n  content: \"\\f2cc\"; }\n\n.ion-android-arrow-forward:before {\n  content: \"\\f30f\"; }\n\n.ion-android-arrow-up-left:before {\n  content: \"\\f2cd\"; }\n\n.ion-android-arrow-up-right:before {\n  content: \"\\f2ce\"; }\n\n.ion-android-battery:before {\n  content: \"\\f2cf\"; }\n\n.ion-android-book:before {\n  content: \"\\f2d0\"; }\n\n.ion-android-calendar:before {\n  content: \"\\f2d1\"; }\n\n.ion-android-call:before {\n  content: \"\\f2d2\"; }\n\n.ion-android-camera:before {\n  content: \"\\f2d3\"; }\n\n.ion-android-chat:before {\n  content: \"\\f2d4\"; }\n\n.ion-android-checkmark:before {\n  content: \"\\f2d5\"; }\n\n.ion-android-clock:before {\n  content: \"\\f2d6\"; }\n\n.ion-android-close:before {\n  content: \"\\f2d7\"; }\n\n.ion-android-contact:before {\n  content: \"\\f2d8\"; }\n\n.ion-android-contacts:before {\n  content: \"\\f2d9\"; }\n\n.ion-android-data:before {\n  content: \"\\f2da\"; }\n\n.ion-android-developer:before {\n  content: \"\\f2db\"; }\n\n.ion-android-display:before {\n  content: \"\\f2dc\"; }\n\n.ion-android-download:before {\n  content: \"\\f2dd\"; }\n\n.ion-android-drawer:before {\n  content: \"\\f310\"; }\n\n.ion-android-dropdown:before {\n  content: \"\\f2de\"; }\n\n.ion-android-earth:before {\n  content: \"\\f2df\"; }\n\n.ion-android-folder:before {\n  content: \"\\f2e0\"; }\n\n.ion-android-forums:before {\n  content: \"\\f2e1\"; }\n\n.ion-android-friends:before {\n  content: \"\\f2e2\"; }\n\n.ion-android-hand:before {\n  content: \"\\f2e3\"; }\n\n.ion-android-image:before {\n  content: \"\\f2e4\"; }\n\n.ion-android-inbox:before {\n  content: \"\\f2e5\"; }\n\n.ion-android-information:before {\n  content: \"\\f2e6\"; }\n\n.ion-android-keypad:before {\n  content: \"\\f2e7\"; }\n\n.ion-android-lightbulb:before {\n  content: \"\\f2e8\"; }\n\n.ion-android-locate:before {\n  content: \"\\f2e9\"; }\n\n.ion-android-location:before {\n  content: \"\\f2ea\"; }\n\n.ion-android-mail:before {\n  content: \"\\f2eb\"; }\n\n.ion-android-microphone:before {\n  content: \"\\f2ec\"; }\n\n.ion-android-mixer:before {\n  content: \"\\f2ed\"; }\n\n.ion-android-more:before {\n  content: \"\\f2ee\"; }\n\n.ion-android-note:before {\n  content: \"\\f2ef\"; }\n\n.ion-android-playstore:before {\n  content: \"\\f2f0\"; }\n\n.ion-android-printer:before {\n  content: \"\\f2f1\"; }\n\n.ion-android-promotion:before {\n  content: \"\\f2f2\"; }\n\n.ion-android-reminder:before {\n  content: \"\\f2f3\"; }\n\n.ion-android-remove:before {\n  content: \"\\f2f4\"; }\n\n.ion-android-search:before {\n  content: \"\\f2f5\"; }\n\n.ion-android-send:before {\n  content: \"\\f2f6\"; }\n\n.ion-android-settings:before {\n  content: \"\\f2f7\"; }\n\n.ion-android-share:before {\n  content: \"\\f2f8\"; }\n\n.ion-android-social:before {\n  content: \"\\f2fa\"; }\n\n.ion-android-social-user:before {\n  content: \"\\f2f9\"; }\n\n.ion-android-sort:before {\n  content: \"\\f2fb\"; }\n\n.ion-android-stair-drawer:before {\n  content: \"\\f311\"; }\n\n.ion-android-star:before {\n  content: \"\\f2fc\"; }\n\n.ion-android-stopwatch:before {\n  content: \"\\f2fd\"; }\n\n.ion-android-storage:before {\n  content: \"\\f2fe\"; }\n\n.ion-android-system-back:before {\n  content: \"\\f2ff\"; }\n\n.ion-android-system-home:before {\n  content: \"\\f300\"; }\n\n.ion-android-system-windows:before {\n  content: \"\\f301\"; }\n\n.ion-android-timer:before {\n  content: \"\\f302\"; }\n\n.ion-android-trash:before {\n  content: \"\\f303\"; }\n\n.ion-android-user-menu:before {\n  content: \"\\f312\"; }\n\n.ion-android-volume:before {\n  content: \"\\f304\"; }\n\n.ion-android-wifi:before {\n  content: \"\\f305\"; }\n\n.ion-aperture:before {\n  content: \"\\f313\"; }\n\n.ion-archive:before {\n  content: \"\\f102\"; }\n\n.ion-arrow-down-a:before {\n  content: \"\\f103\"; }\n\n.ion-arrow-down-b:before {\n  content: \"\\f104\"; }\n\n.ion-arrow-down-c:before {\n  content: \"\\f105\"; }\n\n.ion-arrow-expand:before {\n  content: \"\\f25e\"; }\n\n.ion-arrow-graph-down-left:before {\n  content: \"\\f25f\"; }\n\n.ion-arrow-graph-down-right:before {\n  content: \"\\f260\"; }\n\n.ion-arrow-graph-up-left:before {\n  content: \"\\f261\"; }\n\n.ion-arrow-graph-up-right:before {\n  content: \"\\f262\"; }\n\n.ion-arrow-left-a:before {\n  content: \"\\f106\"; }\n\n.ion-arrow-left-b:before {\n  content: \"\\f107\"; }\n\n.ion-arrow-left-c:before {\n  content: \"\\f108\"; }\n\n.ion-arrow-move:before {\n  content: \"\\f263\"; }\n\n.ion-arrow-resize:before {\n  content: \"\\f264\"; }\n\n.ion-arrow-return-left:before {\n  content: \"\\f265\"; }\n\n.ion-arrow-return-right:before {\n  content: \"\\f266\"; }\n\n.ion-arrow-right-a:before {\n  content: \"\\f109\"; }\n\n.ion-arrow-right-b:before {\n  content: \"\\f10a\"; }\n\n.ion-arrow-right-c:before {\n  content: \"\\f10b\"; }\n\n.ion-arrow-shrink:before {\n  content: \"\\f267\"; }\n\n.ion-arrow-swap:before {\n  content: \"\\f268\"; }\n\n.ion-arrow-up-a:before {\n  content: \"\\f10c\"; }\n\n.ion-arrow-up-b:before {\n  content: \"\\f10d\"; }\n\n.ion-arrow-up-c:before {\n  content: \"\\f10e\"; }\n\n.ion-asterisk:before {\n  content: \"\\f314\"; }\n\n.ion-at:before {\n  content: \"\\f10f\"; }\n\n.ion-bag:before {\n  content: \"\\f110\"; }\n\n.ion-battery-charging:before {\n  content: \"\\f111\"; }\n\n.ion-battery-empty:before {\n  content: \"\\f112\"; }\n\n.ion-battery-full:before {\n  content: \"\\f113\"; }\n\n.ion-battery-half:before {\n  content: \"\\f114\"; }\n\n.ion-battery-low:before {\n  content: \"\\f115\"; }\n\n.ion-beaker:before {\n  content: \"\\f269\"; }\n\n.ion-beer:before {\n  content: \"\\f26a\"; }\n\n.ion-bluetooth:before {\n  content: \"\\f116\"; }\n\n.ion-bonfire:before {\n  content: \"\\f315\"; }\n\n.ion-bookmark:before {\n  content: \"\\f26b\"; }\n\n.ion-briefcase:before {\n  content: \"\\f26c\"; }\n\n.ion-bug:before {\n  content: \"\\f2be\"; }\n\n.ion-calculator:before {\n  content: \"\\f26d\"; }\n\n.ion-calendar:before {\n  content: \"\\f117\"; }\n\n.ion-camera:before {\n  content: \"\\f118\"; }\n\n.ion-card:before {\n  content: \"\\f119\"; }\n\n.ion-cash:before {\n  content: \"\\f316\"; }\n\n.ion-chatbox:before {\n  content: \"\\f11b\"; }\n\n.ion-chatbox-working:before {\n  content: \"\\f11a\"; }\n\n.ion-chatboxes:before {\n  content: \"\\f11c\"; }\n\n.ion-chatbubble:before {\n  content: \"\\f11e\"; }\n\n.ion-chatbubble-working:before {\n  content: \"\\f11d\"; }\n\n.ion-chatbubbles:before {\n  content: \"\\f11f\"; }\n\n.ion-checkmark:before {\n  content: \"\\f122\"; }\n\n.ion-checkmark-circled:before {\n  content: \"\\f120\"; }\n\n.ion-checkmark-round:before {\n  content: \"\\f121\"; }\n\n.ion-chevron-down:before {\n  content: \"\\f123\"; }\n\n.ion-chevron-left:before {\n  content: \"\\f124\"; }\n\n.ion-chevron-right:before {\n  content: \"\\f125\"; }\n\n.ion-chevron-up:before {\n  content: \"\\f126\"; }\n\n.ion-clipboard:before {\n  content: \"\\f127\"; }\n\n.ion-clock:before {\n  content: \"\\f26e\"; }\n\n.ion-close:before {\n  content: \"\\f12a\"; }\n\n.ion-close-circled:before {\n  content: \"\\f128\"; }\n\n.ion-close-round:before {\n  content: \"\\f129\"; }\n\n.ion-closed-captioning:before {\n  content: \"\\f317\"; }\n\n.ion-cloud:before {\n  content: \"\\f12b\"; }\n\n.ion-code:before {\n  content: \"\\f271\"; }\n\n.ion-code-download:before {\n  content: \"\\f26f\"; }\n\n.ion-code-working:before {\n  content: \"\\f270\"; }\n\n.ion-coffee:before {\n  content: \"\\f272\"; }\n\n.ion-compass:before {\n  content: \"\\f273\"; }\n\n.ion-compose:before {\n  content: \"\\f12c\"; }\n\n.ion-connection-bars:before {\n  content: \"\\f274\"; }\n\n.ion-contrast:before {\n  content: \"\\f275\"; }\n\n.ion-cube:before {\n  content: \"\\f318\"; }\n\n.ion-disc:before {\n  content: \"\\f12d\"; }\n\n.ion-document:before {\n  content: \"\\f12f\"; }\n\n.ion-document-text:before {\n  content: \"\\f12e\"; }\n\n.ion-drag:before {\n  content: \"\\f130\"; }\n\n.ion-earth:before {\n  content: \"\\f276\"; }\n\n.ion-edit:before {\n  content: \"\\f2bf\"; }\n\n.ion-egg:before {\n  content: \"\\f277\"; }\n\n.ion-eject:before {\n  content: \"\\f131\"; }\n\n.ion-email:before {\n  content: \"\\f132\"; }\n\n.ion-eye:before {\n  content: \"\\f133\"; }\n\n.ion-eye-disabled:before {\n  content: \"\\f306\"; }\n\n.ion-female:before {\n  content: \"\\f278\"; }\n\n.ion-filing:before {\n  content: \"\\f134\"; }\n\n.ion-film-marker:before {\n  content: \"\\f135\"; }\n\n.ion-fireball:before {\n  content: \"\\f319\"; }\n\n.ion-flag:before {\n  content: \"\\f279\"; }\n\n.ion-flame:before {\n  content: \"\\f31a\"; }\n\n.ion-flash:before {\n  content: \"\\f137\"; }\n\n.ion-flash-off:before {\n  content: \"\\f136\"; }\n\n.ion-flask:before {\n  content: \"\\f138\"; }\n\n.ion-folder:before {\n  content: \"\\f139\"; }\n\n.ion-fork:before {\n  content: \"\\f27a\"; }\n\n.ion-fork-repo:before {\n  content: \"\\f2c0\"; }\n\n.ion-forward:before {\n  content: \"\\f13a\"; }\n\n.ion-funnel:before {\n  content: \"\\f31b\"; }\n\n.ion-game-controller-a:before {\n  content: \"\\f13b\"; }\n\n.ion-game-controller-b:before {\n  content: \"\\f13c\"; }\n\n.ion-gear-a:before {\n  content: \"\\f13d\"; }\n\n.ion-gear-b:before {\n  content: \"\\f13e\"; }\n\n.ion-grid:before {\n  content: \"\\f13f\"; }\n\n.ion-hammer:before {\n  content: \"\\f27b\"; }\n\n.ion-happy:before {\n  content: \"\\f31c\"; }\n\n.ion-headphone:before {\n  content: \"\\f140\"; }\n\n.ion-heart:before {\n  content: \"\\f141\"; }\n\n.ion-heart-broken:before {\n  content: \"\\f31d\"; }\n\n.ion-help:before {\n  content: \"\\f143\"; }\n\n.ion-help-buoy:before {\n  content: \"\\f27c\"; }\n\n.ion-help-circled:before {\n  content: \"\\f142\"; }\n\n.ion-home:before {\n  content: \"\\f144\"; }\n\n.ion-icecream:before {\n  content: \"\\f27d\"; }\n\n.ion-icon-social-google-plus:before {\n  content: \"\\f146\"; }\n\n.ion-icon-social-google-plus-outline:before {\n  content: \"\\f145\"; }\n\n.ion-image:before {\n  content: \"\\f147\"; }\n\n.ion-images:before {\n  content: \"\\f148\"; }\n\n.ion-information:before {\n  content: \"\\f14a\"; }\n\n.ion-information-circled:before {\n  content: \"\\f149\"; }\n\n.ion-ionic:before {\n  content: \"\\f14b\"; }\n\n.ion-ios7-alarm:before {\n  content: \"\\f14d\"; }\n\n.ion-ios7-alarm-outline:before {\n  content: \"\\f14c\"; }\n\n.ion-ios7-albums:before {\n  content: \"\\f14f\"; }\n\n.ion-ios7-albums-outline:before {\n  content: \"\\f14e\"; }\n\n.ion-ios7-americanfootball:before {\n  content: \"\\f31f\"; }\n\n.ion-ios7-americanfootball-outline:before {\n  content: \"\\f31e\"; }\n\n.ion-ios7-analytics:before {\n  content: \"\\f321\"; }\n\n.ion-ios7-analytics-outline:before {\n  content: \"\\f320\"; }\n\n.ion-ios7-arrow-back:before {\n  content: \"\\f150\"; }\n\n.ion-ios7-arrow-down:before {\n  content: \"\\f151\"; }\n\n.ion-ios7-arrow-forward:before {\n  content: \"\\f152\"; }\n\n.ion-ios7-arrow-left:before {\n  content: \"\\f153\"; }\n\n.ion-ios7-arrow-right:before {\n  content: \"\\f154\"; }\n\n.ion-ios7-arrow-thin-down:before {\n  content: \"\\f27e\"; }\n\n.ion-ios7-arrow-thin-left:before {\n  content: \"\\f27f\"; }\n\n.ion-ios7-arrow-thin-right:before {\n  content: \"\\f280\"; }\n\n.ion-ios7-arrow-thin-up:before {\n  content: \"\\f281\"; }\n\n.ion-ios7-arrow-up:before {\n  content: \"\\f155\"; }\n\n.ion-ios7-at:before {\n  content: \"\\f157\"; }\n\n.ion-ios7-at-outline:before {\n  content: \"\\f156\"; }\n\n.ion-ios7-barcode:before {\n  content: \"\\f323\"; }\n\n.ion-ios7-barcode-outline:before {\n  content: \"\\f322\"; }\n\n.ion-ios7-baseball:before {\n  content: \"\\f325\"; }\n\n.ion-ios7-baseball-outline:before {\n  content: \"\\f324\"; }\n\n.ion-ios7-basketball:before {\n  content: \"\\f327\"; }\n\n.ion-ios7-basketball-outline:before {\n  content: \"\\f326\"; }\n\n.ion-ios7-bell:before {\n  content: \"\\f159\"; }\n\n.ion-ios7-bell-outline:before {\n  content: \"\\f158\"; }\n\n.ion-ios7-bolt:before {\n  content: \"\\f15b\"; }\n\n.ion-ios7-bolt-outline:before {\n  content: \"\\f15a\"; }\n\n.ion-ios7-bookmarks:before {\n  content: \"\\f15d\"; }\n\n.ion-ios7-bookmarks-outline:before {\n  content: \"\\f15c\"; }\n\n.ion-ios7-box:before {\n  content: \"\\f15f\"; }\n\n.ion-ios7-box-outline:before {\n  content: \"\\f15e\"; }\n\n.ion-ios7-briefcase:before {\n  content: \"\\f283\"; }\n\n.ion-ios7-briefcase-outline:before {\n  content: \"\\f282\"; }\n\n.ion-ios7-browsers:before {\n  content: \"\\f161\"; }\n\n.ion-ios7-browsers-outline:before {\n  content: \"\\f160\"; }\n\n.ion-ios7-calculator:before {\n  content: \"\\f285\"; }\n\n.ion-ios7-calculator-outline:before {\n  content: \"\\f284\"; }\n\n.ion-ios7-calendar:before {\n  content: \"\\f163\"; }\n\n.ion-ios7-calendar-outline:before {\n  content: \"\\f162\"; }\n\n.ion-ios7-camera:before {\n  content: \"\\f165\"; }\n\n.ion-ios7-camera-outline:before {\n  content: \"\\f164\"; }\n\n.ion-ios7-cart:before {\n  content: \"\\f167\"; }\n\n.ion-ios7-cart-outline:before {\n  content: \"\\f166\"; }\n\n.ion-ios7-chatboxes:before {\n  content: \"\\f169\"; }\n\n.ion-ios7-chatboxes-outline:before {\n  content: \"\\f168\"; }\n\n.ion-ios7-chatbubble:before {\n  content: \"\\f16b\"; }\n\n.ion-ios7-chatbubble-outline:before {\n  content: \"\\f16a\"; }\n\n.ion-ios7-checkmark:before {\n  content: \"\\f16e\"; }\n\n.ion-ios7-checkmark-empty:before {\n  content: \"\\f16c\"; }\n\n.ion-ios7-checkmark-outline:before {\n  content: \"\\f16d\"; }\n\n.ion-ios7-circle-filled:before {\n  content: \"\\f16f\"; }\n\n.ion-ios7-circle-outline:before {\n  content: \"\\f170\"; }\n\n.ion-ios7-clock:before {\n  content: \"\\f172\"; }\n\n.ion-ios7-clock-outline:before {\n  content: \"\\f171\"; }\n\n.ion-ios7-close:before {\n  content: \"\\f2bc\"; }\n\n.ion-ios7-close-empty:before {\n  content: \"\\f2bd\"; }\n\n.ion-ios7-close-outline:before {\n  content: \"\\f2bb\"; }\n\n.ion-ios7-cloud:before {\n  content: \"\\f178\"; }\n\n.ion-ios7-cloud-download:before {\n  content: \"\\f174\"; }\n\n.ion-ios7-cloud-download-outline:before {\n  content: \"\\f173\"; }\n\n.ion-ios7-cloud-outline:before {\n  content: \"\\f175\"; }\n\n.ion-ios7-cloud-upload:before {\n  content: \"\\f177\"; }\n\n.ion-ios7-cloud-upload-outline:before {\n  content: \"\\f176\"; }\n\n.ion-ios7-cloudy:before {\n  content: \"\\f17a\"; }\n\n.ion-ios7-cloudy-night:before {\n  content: \"\\f308\"; }\n\n.ion-ios7-cloudy-night-outline:before {\n  content: \"\\f307\"; }\n\n.ion-ios7-cloudy-outline:before {\n  content: \"\\f179\"; }\n\n.ion-ios7-cog:before {\n  content: \"\\f17c\"; }\n\n.ion-ios7-cog-outline:before {\n  content: \"\\f17b\"; }\n\n.ion-ios7-compose:before {\n  content: \"\\f17e\"; }\n\n.ion-ios7-compose-outline:before {\n  content: \"\\f17d\"; }\n\n.ion-ios7-contact:before {\n  content: \"\\f180\"; }\n\n.ion-ios7-contact-outline:before {\n  content: \"\\f17f\"; }\n\n.ion-ios7-copy:before {\n  content: \"\\f182\"; }\n\n.ion-ios7-copy-outline:before {\n  content: \"\\f181\"; }\n\n.ion-ios7-download:before {\n  content: \"\\f184\"; }\n\n.ion-ios7-download-outline:before {\n  content: \"\\f183\"; }\n\n.ion-ios7-drag:before {\n  content: \"\\f185\"; }\n\n.ion-ios7-email:before {\n  content: \"\\f187\"; }\n\n.ion-ios7-email-outline:before {\n  content: \"\\f186\"; }\n\n.ion-ios7-expand:before {\n  content: \"\\f30d\"; }\n\n.ion-ios7-eye:before {\n  content: \"\\f189\"; }\n\n.ion-ios7-eye-outline:before {\n  content: \"\\f188\"; }\n\n.ion-ios7-fastforward:before {\n  content: \"\\f18b\"; }\n\n.ion-ios7-fastforward-outline:before {\n  content: \"\\f18a\"; }\n\n.ion-ios7-filing:before {\n  content: \"\\f18d\"; }\n\n.ion-ios7-filing-outline:before {\n  content: \"\\f18c\"; }\n\n.ion-ios7-film:before {\n  content: \"\\f18f\"; }\n\n.ion-ios7-film-outline:before {\n  content: \"\\f18e\"; }\n\n.ion-ios7-flag:before {\n  content: \"\\f191\"; }\n\n.ion-ios7-flag-outline:before {\n  content: \"\\f190\"; }\n\n.ion-ios7-folder:before {\n  content: \"\\f193\"; }\n\n.ion-ios7-folder-outline:before {\n  content: \"\\f192\"; }\n\n.ion-ios7-football:before {\n  content: \"\\f329\"; }\n\n.ion-ios7-football-outline:before {\n  content: \"\\f328\"; }\n\n.ion-ios7-gear:before {\n  content: \"\\f195\"; }\n\n.ion-ios7-gear-outline:before {\n  content: \"\\f194\"; }\n\n.ion-ios7-glasses:before {\n  content: \"\\f197\"; }\n\n.ion-ios7-glasses-outline:before {\n  content: \"\\f196\"; }\n\n.ion-ios7-heart:before {\n  content: \"\\f199\"; }\n\n.ion-ios7-heart-outline:before {\n  content: \"\\f198\"; }\n\n.ion-ios7-help:before {\n  content: \"\\f19c\"; }\n\n.ion-ios7-help-empty:before {\n  content: \"\\f19a\"; }\n\n.ion-ios7-help-outline:before {\n  content: \"\\f19b\"; }\n\n.ion-ios7-home:before {\n  content: \"\\f32b\"; }\n\n.ion-ios7-home-outline:before {\n  content: \"\\f32a\"; }\n\n.ion-ios7-infinite:before {\n  content: \"\\f19e\"; }\n\n.ion-ios7-infinite-outline:before {\n  content: \"\\f19d\"; }\n\n.ion-ios7-information:before {\n  content: \"\\f1a1\"; }\n\n.ion-ios7-information-empty:before {\n  content: \"\\f19f\"; }\n\n.ion-ios7-information-outline:before {\n  content: \"\\f1a0\"; }\n\n.ion-ios7-ionic-outline:before {\n  content: \"\\f1a2\"; }\n\n.ion-ios7-keypad:before {\n  content: \"\\f1a4\"; }\n\n.ion-ios7-keypad-outline:before {\n  content: \"\\f1a3\"; }\n\n.ion-ios7-lightbulb:before {\n  content: \"\\f287\"; }\n\n.ion-ios7-lightbulb-outline:before {\n  content: \"\\f286\"; }\n\n.ion-ios7-location:before {\n  content: \"\\f1a6\"; }\n\n.ion-ios7-location-outline:before {\n  content: \"\\f1a5\"; }\n\n.ion-ios7-locked:before {\n  content: \"\\f1a8\"; }\n\n.ion-ios7-locked-outline:before {\n  content: \"\\f1a7\"; }\n\n.ion-ios7-loop:before {\n  content: \"\\f32d\"; }\n\n.ion-ios7-loop-strong:before {\n  content: \"\\f32c\"; }\n\n.ion-ios7-medkit:before {\n  content: \"\\f289\"; }\n\n.ion-ios7-medkit-outline:before {\n  content: \"\\f288\"; }\n\n.ion-ios7-mic:before {\n  content: \"\\f1ab\"; }\n\n.ion-ios7-mic-off:before {\n  content: \"\\f1a9\"; }\n\n.ion-ios7-mic-outline:before {\n  content: \"\\f1aa\"; }\n\n.ion-ios7-minus:before {\n  content: \"\\f1ae\"; }\n\n.ion-ios7-minus-empty:before {\n  content: \"\\f1ac\"; }\n\n.ion-ios7-minus-outline:before {\n  content: \"\\f1ad\"; }\n\n.ion-ios7-monitor:before {\n  content: \"\\f1b0\"; }\n\n.ion-ios7-monitor-outline:before {\n  content: \"\\f1af\"; }\n\n.ion-ios7-moon:before {\n  content: \"\\f1b2\"; }\n\n.ion-ios7-moon-outline:before {\n  content: \"\\f1b1\"; }\n\n.ion-ios7-more:before {\n  content: \"\\f1b4\"; }\n\n.ion-ios7-more-outline:before {\n  content: \"\\f1b3\"; }\n\n.ion-ios7-musical-note:before {\n  content: \"\\f1b5\"; }\n\n.ion-ios7-musical-notes:before {\n  content: \"\\f1b6\"; }\n\n.ion-ios7-navigate:before {\n  content: \"\\f1b8\"; }\n\n.ion-ios7-navigate-outline:before {\n  content: \"\\f1b7\"; }\n\n.ion-ios7-paper:before {\n  content: \"\\f32f\"; }\n\n.ion-ios7-paper-outline:before {\n  content: \"\\f32e\"; }\n\n.ion-ios7-paperplane:before {\n  content: \"\\f1ba\"; }\n\n.ion-ios7-paperplane-outline:before {\n  content: \"\\f1b9\"; }\n\n.ion-ios7-partlysunny:before {\n  content: \"\\f1bc\"; }\n\n.ion-ios7-partlysunny-outline:before {\n  content: \"\\f1bb\"; }\n\n.ion-ios7-pause:before {\n  content: \"\\f1be\"; }\n\n.ion-ios7-pause-outline:before {\n  content: \"\\f1bd\"; }\n\n.ion-ios7-paw:before {\n  content: \"\\f331\"; }\n\n.ion-ios7-paw-outline:before {\n  content: \"\\f330\"; }\n\n.ion-ios7-people:before {\n  content: \"\\f1c0\"; }\n\n.ion-ios7-people-outline:before {\n  content: \"\\f1bf\"; }\n\n.ion-ios7-person:before {\n  content: \"\\f1c2\"; }\n\n.ion-ios7-person-outline:before {\n  content: \"\\f1c1\"; }\n\n.ion-ios7-personadd:before {\n  content: \"\\f1c4\"; }\n\n.ion-ios7-personadd-outline:before {\n  content: \"\\f1c3\"; }\n\n.ion-ios7-photos:before {\n  content: \"\\f1c6\"; }\n\n.ion-ios7-photos-outline:before {\n  content: \"\\f1c5\"; }\n\n.ion-ios7-pie:before {\n  content: \"\\f28b\"; }\n\n.ion-ios7-pie-outline:before {\n  content: \"\\f28a\"; }\n\n.ion-ios7-play:before {\n  content: \"\\f1c8\"; }\n\n.ion-ios7-play-outline:before {\n  content: \"\\f1c7\"; }\n\n.ion-ios7-plus:before {\n  content: \"\\f1cb\"; }\n\n.ion-ios7-plus-empty:before {\n  content: \"\\f1c9\"; }\n\n.ion-ios7-plus-outline:before {\n  content: \"\\f1ca\"; }\n\n.ion-ios7-pricetag:before {\n  content: \"\\f28d\"; }\n\n.ion-ios7-pricetag-outline:before {\n  content: \"\\f28c\"; }\n\n.ion-ios7-pricetags:before {\n  content: \"\\f333\"; }\n\n.ion-ios7-pricetags-outline:before {\n  content: \"\\f332\"; }\n\n.ion-ios7-printer:before {\n  content: \"\\f1cd\"; }\n\n.ion-ios7-printer-outline:before {\n  content: \"\\f1cc\"; }\n\n.ion-ios7-pulse:before {\n  content: \"\\f335\"; }\n\n.ion-ios7-pulse-strong:before {\n  content: \"\\f334\"; }\n\n.ion-ios7-rainy:before {\n  content: \"\\f1cf\"; }\n\n.ion-ios7-rainy-outline:before {\n  content: \"\\f1ce\"; }\n\n.ion-ios7-recording:before {\n  content: \"\\f1d1\"; }\n\n.ion-ios7-recording-outline:before {\n  content: \"\\f1d0\"; }\n\n.ion-ios7-redo:before {\n  content: \"\\f1d3\"; }\n\n.ion-ios7-redo-outline:before {\n  content: \"\\f1d2\"; }\n\n.ion-ios7-refresh:before {\n  content: \"\\f1d6\"; }\n\n.ion-ios7-refresh-empty:before {\n  content: \"\\f1d4\"; }\n\n.ion-ios7-refresh-outline:before {\n  content: \"\\f1d5\"; }\n\n.ion-ios7-reload:before, .ion-ios7-reloading:before {\n  content: \"\\f28e\"; }\n\n.ion-ios7-reverse-camera:before {\n  content: \"\\f337\"; }\n\n.ion-ios7-reverse-camera-outline:before {\n  content: \"\\f336\"; }\n\n.ion-ios7-rewind:before {\n  content: \"\\f1d8\"; }\n\n.ion-ios7-rewind-outline:before {\n  content: \"\\f1d7\"; }\n\n.ion-ios7-search:before {\n  content: \"\\f1da\"; }\n\n.ion-ios7-search-strong:before {\n  content: \"\\f1d9\"; }\n\n.ion-ios7-settings:before {\n  content: \"\\f339\"; }\n\n.ion-ios7-settings-strong:before {\n  content: \"\\f338\"; }\n\n.ion-ios7-shrink:before {\n  content: \"\\f30e\"; }\n\n.ion-ios7-skipbackward:before {\n  content: \"\\f1dc\"; }\n\n.ion-ios7-skipbackward-outline:before {\n  content: \"\\f1db\"; }\n\n.ion-ios7-skipforward:before {\n  content: \"\\f1de\"; }\n\n.ion-ios7-skipforward-outline:before {\n  content: \"\\f1dd\"; }\n\n.ion-ios7-snowy:before {\n  content: \"\\f309\"; }\n\n.ion-ios7-speedometer:before {\n  content: \"\\f290\"; }\n\n.ion-ios7-speedometer-outline:before {\n  content: \"\\f28f\"; }\n\n.ion-ios7-star:before {\n  content: \"\\f1e0\"; }\n\n.ion-ios7-star-half:before {\n  content: \"\\f33a\"; }\n\n.ion-ios7-star-outline:before {\n  content: \"\\f1df\"; }\n\n.ion-ios7-stopwatch:before {\n  content: \"\\f1e2\"; }\n\n.ion-ios7-stopwatch-outline:before {\n  content: \"\\f1e1\"; }\n\n.ion-ios7-sunny:before {\n  content: \"\\f1e4\"; }\n\n.ion-ios7-sunny-outline:before {\n  content: \"\\f1e3\"; }\n\n.ion-ios7-telephone:before {\n  content: \"\\f1e6\"; }\n\n.ion-ios7-telephone-outline:before {\n  content: \"\\f1e5\"; }\n\n.ion-ios7-tennisball:before {\n  content: \"\\f33c\"; }\n\n.ion-ios7-tennisball-outline:before {\n  content: \"\\f33b\"; }\n\n.ion-ios7-thunderstorm:before {\n  content: \"\\f1e8\"; }\n\n.ion-ios7-thunderstorm-outline:before {\n  content: \"\\f1e7\"; }\n\n.ion-ios7-time:before {\n  content: \"\\f292\"; }\n\n.ion-ios7-time-outline:before {\n  content: \"\\f291\"; }\n\n.ion-ios7-timer:before {\n  content: \"\\f1ea\"; }\n\n.ion-ios7-timer-outline:before {\n  content: \"\\f1e9\"; }\n\n.ion-ios7-toggle:before {\n  content: \"\\f33e\"; }\n\n.ion-ios7-toggle-outline:before {\n  content: \"\\f33d\"; }\n\n.ion-ios7-trash:before {\n  content: \"\\f1ec\"; }\n\n.ion-ios7-trash-outline:before {\n  content: \"\\f1eb\"; }\n\n.ion-ios7-undo:before {\n  content: \"\\f1ee\"; }\n\n.ion-ios7-undo-outline:before {\n  content: \"\\f1ed\"; }\n\n.ion-ios7-unlocked:before {\n  content: \"\\f1f0\"; }\n\n.ion-ios7-unlocked-outline:before {\n  content: \"\\f1ef\"; }\n\n.ion-ios7-upload:before {\n  content: \"\\f1f2\"; }\n\n.ion-ios7-upload-outline:before {\n  content: \"\\f1f1\"; }\n\n.ion-ios7-videocam:before {\n  content: \"\\f1f4\"; }\n\n.ion-ios7-videocam-outline:before {\n  content: \"\\f1f3\"; }\n\n.ion-ios7-volume-high:before {\n  content: \"\\f1f5\"; }\n\n.ion-ios7-volume-low:before {\n  content: \"\\f1f6\"; }\n\n.ion-ios7-wineglass:before {\n  content: \"\\f294\"; }\n\n.ion-ios7-wineglass-outline:before {\n  content: \"\\f293\"; }\n\n.ion-ios7-world:before {\n  content: \"\\f1f8\"; }\n\n.ion-ios7-world-outline:before {\n  content: \"\\f1f7\"; }\n\n.ion-ipad:before {\n  content: \"\\f1f9\"; }\n\n.ion-iphone:before {\n  content: \"\\f1fa\"; }\n\n.ion-ipod:before {\n  content: \"\\f1fb\"; }\n\n.ion-jet:before {\n  content: \"\\f295\"; }\n\n.ion-key:before {\n  content: \"\\f296\"; }\n\n.ion-knife:before {\n  content: \"\\f297\"; }\n\n.ion-laptop:before {\n  content: \"\\f1fc\"; }\n\n.ion-leaf:before {\n  content: \"\\f1fd\"; }\n\n.ion-levels:before {\n  content: \"\\f298\"; }\n\n.ion-lightbulb:before {\n  content: \"\\f299\"; }\n\n.ion-link:before {\n  content: \"\\f1fe\"; }\n\n.ion-load-a:before, .ion-loading-a:before {\n  content: \"\\f29a\"; }\n\n.ion-load-b:before, .ion-loading-b:before {\n  content: \"\\f29b\"; }\n\n.ion-load-c:before, .ion-loading-c:before {\n  content: \"\\f29c\"; }\n\n.ion-load-d:before, .ion-loading-d:before {\n  content: \"\\f29d\"; }\n\n.ion-location:before {\n  content: \"\\f1ff\"; }\n\n.ion-locked:before {\n  content: \"\\f200\"; }\n\n.ion-log-in:before {\n  content: \"\\f29e\"; }\n\n.ion-log-out:before {\n  content: \"\\f29f\"; }\n\n.ion-loop:before, .ion-looping:before {\n  content: \"\\f201\"; }\n\n.ion-magnet:before {\n  content: \"\\f2a0\"; }\n\n.ion-male:before {\n  content: \"\\f2a1\"; }\n\n.ion-man:before {\n  content: \"\\f202\"; }\n\n.ion-map:before {\n  content: \"\\f203\"; }\n\n.ion-medkit:before {\n  content: \"\\f2a2\"; }\n\n.ion-merge:before {\n  content: \"\\f33f\"; }\n\n.ion-mic-a:before {\n  content: \"\\f204\"; }\n\n.ion-mic-b:before {\n  content: \"\\f205\"; }\n\n.ion-mic-c:before {\n  content: \"\\f206\"; }\n\n.ion-minus:before {\n  content: \"\\f209\"; }\n\n.ion-minus-circled:before {\n  content: \"\\f207\"; }\n\n.ion-minus-round:before {\n  content: \"\\f208\"; }\n\n.ion-model-s:before {\n  content: \"\\f2c1\"; }\n\n.ion-monitor:before {\n  content: \"\\f20a\"; }\n\n.ion-more:before {\n  content: \"\\f20b\"; }\n\n.ion-mouse:before {\n  content: \"\\f340\"; }\n\n.ion-music-note:before {\n  content: \"\\f20c\"; }\n\n.ion-navicon:before {\n  content: \"\\f20e\"; }\n\n.ion-navicon-round:before {\n  content: \"\\f20d\"; }\n\n.ion-navigate:before {\n  content: \"\\f2a3\"; }\n\n.ion-network:before {\n  content: \"\\f341\"; }\n\n.ion-no-smoking:before {\n  content: \"\\f2c2\"; }\n\n.ion-nuclear:before {\n  content: \"\\f2a4\"; }\n\n.ion-outlet:before {\n  content: \"\\f342\"; }\n\n.ion-paper-airplane:before {\n  content: \"\\f2c3\"; }\n\n.ion-paperclip:before {\n  content: \"\\f20f\"; }\n\n.ion-pause:before {\n  content: \"\\f210\"; }\n\n.ion-person:before {\n  content: \"\\f213\"; }\n\n.ion-person-add:before {\n  content: \"\\f211\"; }\n\n.ion-person-stalker:before {\n  content: \"\\f212\"; }\n\n.ion-pie-graph:before {\n  content: \"\\f2a5\"; }\n\n.ion-pin:before {\n  content: \"\\f2a6\"; }\n\n.ion-pinpoint:before {\n  content: \"\\f2a7\"; }\n\n.ion-pizza:before {\n  content: \"\\f2a8\"; }\n\n.ion-plane:before {\n  content: \"\\f214\"; }\n\n.ion-planet:before {\n  content: \"\\f343\"; }\n\n.ion-play:before {\n  content: \"\\f215\"; }\n\n.ion-playstation:before {\n  content: \"\\f30a\"; }\n\n.ion-plus:before {\n  content: \"\\f218\"; }\n\n.ion-plus-circled:before {\n  content: \"\\f216\"; }\n\n.ion-plus-round:before {\n  content: \"\\f217\"; }\n\n.ion-podium:before {\n  content: \"\\f344\"; }\n\n.ion-pound:before {\n  content: \"\\f219\"; }\n\n.ion-power:before {\n  content: \"\\f2a9\"; }\n\n.ion-pricetag:before {\n  content: \"\\f2aa\"; }\n\n.ion-pricetags:before {\n  content: \"\\f2ab\"; }\n\n.ion-printer:before {\n  content: \"\\f21a\"; }\n\n.ion-pull-request:before {\n  content: \"\\f345\"; }\n\n.ion-qr-scanner:before {\n  content: \"\\f346\"; }\n\n.ion-quote:before {\n  content: \"\\f347\"; }\n\n.ion-radio-waves:before {\n  content: \"\\f2ac\"; }\n\n.ion-record:before {\n  content: \"\\f21b\"; }\n\n.ion-refresh:before, .ion-refreshing:before {\n  content: \"\\f21c\"; }\n\n.ion-reply:before {\n  content: \"\\f21e\"; }\n\n.ion-reply-all:before {\n  content: \"\\f21d\"; }\n\n.ion-ribbon-a:before {\n  content: \"\\f348\"; }\n\n.ion-ribbon-b:before {\n  content: \"\\f349\"; }\n\n.ion-sad:before {\n  content: \"\\f34a\"; }\n\n.ion-scissors:before {\n  content: \"\\f34b\"; }\n\n.ion-search:before {\n  content: \"\\f21f\"; }\n\n.ion-settings:before {\n  content: \"\\f2ad\"; }\n\n.ion-share:before {\n  content: \"\\f220\"; }\n\n.ion-shuffle:before {\n  content: \"\\f221\"; }\n\n.ion-skip-backward:before {\n  content: \"\\f222\"; }\n\n.ion-skip-forward:before {\n  content: \"\\f223\"; }\n\n.ion-social-android:before {\n  content: \"\\f225\"; }\n\n.ion-social-android-outline:before {\n  content: \"\\f224\"; }\n\n.ion-social-apple:before {\n  content: \"\\f227\"; }\n\n.ion-social-apple-outline:before {\n  content: \"\\f226\"; }\n\n.ion-social-bitcoin:before {\n  content: \"\\f2af\"; }\n\n.ion-social-bitcoin-outline:before {\n  content: \"\\f2ae\"; }\n\n.ion-social-buffer:before {\n  content: \"\\f229\"; }\n\n.ion-social-buffer-outline:before {\n  content: \"\\f228\"; }\n\n.ion-social-designernews:before {\n  content: \"\\f22b\"; }\n\n.ion-social-designernews-outline:before {\n  content: \"\\f22a\"; }\n\n.ion-social-dribbble:before {\n  content: \"\\f22d\"; }\n\n.ion-social-dribbble-outline:before {\n  content: \"\\f22c\"; }\n\n.ion-social-dropbox:before {\n  content: \"\\f22f\"; }\n\n.ion-social-dropbox-outline:before {\n  content: \"\\f22e\"; }\n\n.ion-social-facebook:before {\n  content: \"\\f231\"; }\n\n.ion-social-facebook-outline:before {\n  content: \"\\f230\"; }\n\n.ion-social-foursquare:before {\n  content: \"\\f34d\"; }\n\n.ion-social-foursquare-outline:before {\n  content: \"\\f34c\"; }\n\n.ion-social-freebsd-devil:before {\n  content: \"\\f2c4\"; }\n\n.ion-social-github:before {\n  content: \"\\f233\"; }\n\n.ion-social-github-outline:before {\n  content: \"\\f232\"; }\n\n.ion-social-google:before {\n  content: \"\\f34f\"; }\n\n.ion-social-google-outline:before {\n  content: \"\\f34e\"; }\n\n.ion-social-googleplus:before {\n  content: \"\\f235\"; }\n\n.ion-social-googleplus-outline:before {\n  content: \"\\f234\"; }\n\n.ion-social-hackernews:before {\n  content: \"\\f237\"; }\n\n.ion-social-hackernews-outline:before {\n  content: \"\\f236\"; }\n\n.ion-social-instagram:before {\n  content: \"\\f351\"; }\n\n.ion-social-instagram-outline:before {\n  content: \"\\f350\"; }\n\n.ion-social-linkedin:before {\n  content: \"\\f239\"; }\n\n.ion-social-linkedin-outline:before {\n  content: \"\\f238\"; }\n\n.ion-social-pinterest:before {\n  content: \"\\f2b1\"; }\n\n.ion-social-pinterest-outline:before {\n  content: \"\\f2b0\"; }\n\n.ion-social-reddit:before {\n  content: \"\\f23b\"; }\n\n.ion-social-reddit-outline:before {\n  content: \"\\f23a\"; }\n\n.ion-social-rss:before {\n  content: \"\\f23d\"; }\n\n.ion-social-rss-outline:before {\n  content: \"\\f23c\"; }\n\n.ion-social-skype:before {\n  content: \"\\f23f\"; }\n\n.ion-social-skype-outline:before {\n  content: \"\\f23e\"; }\n\n.ion-social-tumblr:before {\n  content: \"\\f241\"; }\n\n.ion-social-tumblr-outline:before {\n  content: \"\\f240\"; }\n\n.ion-social-tux:before {\n  content: \"\\f2c5\"; }\n\n.ion-social-twitter:before {\n  content: \"\\f243\"; }\n\n.ion-social-twitter-outline:before {\n  content: \"\\f242\"; }\n\n.ion-social-usd:before {\n  content: \"\\f353\"; }\n\n.ion-social-usd-outline:before {\n  content: \"\\f352\"; }\n\n.ion-social-vimeo:before {\n  content: \"\\f245\"; }\n\n.ion-social-vimeo-outline:before {\n  content: \"\\f244\"; }\n\n.ion-social-windows:before {\n  content: \"\\f247\"; }\n\n.ion-social-windows-outline:before {\n  content: \"\\f246\"; }\n\n.ion-social-wordpress:before {\n  content: \"\\f249\"; }\n\n.ion-social-wordpress-outline:before {\n  content: \"\\f248\"; }\n\n.ion-social-yahoo:before {\n  content: \"\\f24b\"; }\n\n.ion-social-yahoo-outline:before {\n  content: \"\\f24a\"; }\n\n.ion-social-youtube:before {\n  content: \"\\f24d\"; }\n\n.ion-social-youtube-outline:before {\n  content: \"\\f24c\"; }\n\n.ion-speakerphone:before {\n  content: \"\\f2b2\"; }\n\n.ion-speedometer:before {\n  content: \"\\f2b3\"; }\n\n.ion-spoon:before {\n  content: \"\\f2b4\"; }\n\n.ion-star:before {\n  content: \"\\f24e\"; }\n\n.ion-stats-bars:before {\n  content: \"\\f2b5\"; }\n\n.ion-steam:before {\n  content: \"\\f30b\"; }\n\n.ion-stop:before {\n  content: \"\\f24f\"; }\n\n.ion-thermometer:before {\n  content: \"\\f2b6\"; }\n\n.ion-thumbsdown:before {\n  content: \"\\f250\"; }\n\n.ion-thumbsup:before {\n  content: \"\\f251\"; }\n\n.ion-toggle:before {\n  content: \"\\f355\"; }\n\n.ion-toggle-filled:before {\n  content: \"\\f354\"; }\n\n.ion-trash-a:before {\n  content: \"\\f252\"; }\n\n.ion-trash-b:before {\n  content: \"\\f253\"; }\n\n.ion-trophy:before {\n  content: \"\\f356\"; }\n\n.ion-umbrella:before {\n  content: \"\\f2b7\"; }\n\n.ion-university:before {\n  content: \"\\f357\"; }\n\n.ion-unlocked:before {\n  content: \"\\f254\"; }\n\n.ion-upload:before {\n  content: \"\\f255\"; }\n\n.ion-usb:before {\n  content: \"\\f2b8\"; }\n\n.ion-videocamera:before {\n  content: \"\\f256\"; }\n\n.ion-volume-high:before {\n  content: \"\\f257\"; }\n\n.ion-volume-low:before {\n  content: \"\\f258\"; }\n\n.ion-volume-medium:before {\n  content: \"\\f259\"; }\n\n.ion-volume-mute:before {\n  content: \"\\f25a\"; }\n\n.ion-wand:before {\n  content: \"\\f358\"; }\n\n.ion-waterdrop:before {\n  content: \"\\f25b\"; }\n\n.ion-wifi:before {\n  content: \"\\f25c\"; }\n\n.ion-wineglass:before {\n  content: \"\\f2b9\"; }\n\n.ion-woman:before {\n  content: \"\\f25d\"; }\n\n.ion-wrench:before {\n  content: \"\\f2ba\"; }\n\n.ion-xbox:before {\n  content: \"\\f30c\"; }\n\n/**\n * Resets\n * --------------------------------------------------\n * Adapted from normalize.css and some reset.css. We don't care even one\n * bit about old IE, so we don't need any hacks for that in here.\n *\n * There are probably other things we could remove here, as well.\n *\n * normalize.css v2.1.2 | MIT License | git.io/normalize\n\n * Eric Meyer's Reset CSS v2.0 (http://meyerweb.com/eric/tools/css/reset/)\n * http://cssreset.com\n */\nhtml, body, div, span, applet, object, iframe, h1, h2, h3, h4, h5, h6, p, blockquote, pre, a, abbr, acronym, address, big, cite, code, del, dfn, em, img, ins, kbd, q, s, samp, small, strike, strong, sub, sup, tt, var, b, i, u, center, dl, dt, dd, ol, ul, li, fieldset, form, label, legend, table, caption, tbody, tfoot, thead, tr, th, td, article, aside, canvas, details, embed, fieldset, figure, figcaption, footer, header, hgroup, menu, nav, output, ruby, section, summary, time, mark, audio, video {\n  margin: 0;\n  padding: 0;\n  border: 0;\n  vertical-align: baseline;\n  font: inherit;\n  font-size: 100%; }\n\nol, ul {\n  list-style: none; }\n\nblockquote, q {\n  quotes: none; }\n\nblockquote:before, blockquote:after, q:before, q:after {\n  content: '';\n  content: none; }\n\n/**\n * Prevent modern browsers from displaying `audio` without controls.\n * Remove excess height in iOS 5 devices.\n */\naudio:not([controls]) {\n  display: none;\n  height: 0; }\n\n/**\n * Hide the `template` element in IE, Safari, and Firefox < 22.\n */\n[hidden], template {\n  display: none; }\n\nscript {\n  display: none !important; }\n\n/* ==========================================================================\n   Base\n   ========================================================================== */\n/**\n * 1. Set default font family to sans-serif.\n * 2. Prevent iOS text size adjust after orientation change, without disabling\n *  user zoom.\n */\nhtml {\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  -ms-user-select: none;\n  user-select: none;\n  font-family: sans-serif;\n  /* 1 */\n  -webkit-text-size-adjust: 100%;\n  -ms-text-size-adjust: 100%;\n  /* 2 */\n  -webkit-text-size-adjust: 100%;\n  /* 2 */ }\n\n/**\n * Remove default margin.\n */\nbody {\n  margin: 0;\n  line-height: 1; }\n\n/**\n * Remove default outlines.\n */\na, button, :focus, a:focus, button:focus, a:active, a:hover {\n  outline: 0; }\n\n/* *\n * Remove tap highlight color\n */\na {\n  -webkit-user-drag: none;\n  -webkit-tap-highlight-color: rgba(0, 0, 0, 0);\n  -webkit-tap-highlight-color: transparent; }\n  a[href]:hover {\n    cursor: pointer; }\n\n/* ==========================================================================\n   Typography\n   ========================================================================== */\n/**\n * Address style set to `bolder` in Firefox 4+, Safari 5, and Chrome.\n */\nb, strong {\n  font-weight: bold; }\n\n/**\n * Address styling not present in Safari 5 and Chrome.\n */\ndfn {\n  font-style: italic; }\n\n/**\n * Address differences between Firefox and other browsers.\n */\nhr {\n  -moz-box-sizing: content-box;\n  box-sizing: content-box;\n  height: 0; }\n\n/**\n * Correct font family set oddly in Safari 5 and Chrome.\n */\ncode, kbd, pre, samp {\n  font-size: 1em;\n  font-family: monospace, serif; }\n\n/**\n * Improve readability of pre-formatted text in all browsers.\n */\npre {\n  white-space: pre-wrap; }\n\n/**\n * Set consistent quote types.\n */\nq {\n  quotes: \"\\201C\" \"\\201D\" \"\\2018\" \"\\2019\"; }\n\n/**\n * Address inconsistent and variable font size in all browsers.\n */\nsmall {\n  font-size: 80%; }\n\n/**\n * Prevent `sub` and `sup` affecting `line-height` in all browsers.\n */\nsub, sup {\n  position: relative;\n  vertical-align: baseline;\n  font-size: 75%;\n  line-height: 0; }\n\nsup {\n  top: -0.5em; }\n\nsub {\n  bottom: -0.25em; }\n\n/**\n * Define consistent border, margin, and padding.\n */\nfieldset {\n  margin: 0 2px;\n  padding: 0.35em 0.625em 0.75em;\n  border: 1px solid #c0c0c0; }\n\n/**\n * 1. Correct `color` not being inherited in IE 8/9.\n * 2. Remove padding so people aren't caught out if they zero out fieldsets.\n */\nlegend {\n  padding: 0;\n  /* 2 */\n  border: 0;\n  /* 1 */ }\n\n/**\n * 1. Correct font family not being inherited in all browsers.\n * 2. Correct font size not being inherited in all browsers.\n * 3. Address margins set differently in Firefox 4+, Safari 5, and Chrome.\n * 4. Remove any default :focus styles\n * 5. Make sure webkit font smoothing is being inherited\n * 6. Remove default gradient in Android Firefox / FirefoxOS\n */\nbutton, input, select, textarea {\n  margin: 0;\n  /* 3 */\n  font-size: 100%;\n  /* 2 */\n  font-family: inherit;\n  /* 1 */\n  outline-offset: 0;\n  /* 4 */\n  outline-style: none;\n  /* 4 */\n  outline-width: 0;\n  /* 4 */\n  -webkit-font-smoothing: inherit;\n  /* 5 */\n  background-image: none;\n  /* 6 */ }\n\n/**\n * Address Firefox 4+ setting `line-height` on `input` using `importnt` in\n * the UA stylesheet.\n */\nbutton, input {\n  line-height: normal; }\n\n/**\n * Address inconsistent `text-transform` inheritance for `button` and `select`.\n * All other form control elements do not inherit `text-transform` values.\n * Correct `button` style inheritance in Chrome, Safari 5+, and IE 8+.\n * Correct `select` style inheritance in Firefox 4+ and Opera.\n */\nbutton, select {\n  text-transform: none; }\n\n/**\n * 1. Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio`\n *  and `video` controls.\n * 2. Correct inability to style clickable `input` types in iOS.\n * 3. Improve usability and consistency of cursor style between image-type\n *  `input` and others.\n */\nbutton, html input[type=\"button\"], input[type=\"reset\"], input[type=\"submit\"] {\n  cursor: pointer;\n  /* 3 */\n  -webkit-appearance: button;\n  /* 2 */ }\n\n/**\n * Re-set default cursor for disabled elements.\n */\nbutton[disabled], html input[disabled] {\n  cursor: default; }\n\n/**\n * 1. Address `appearance` set to `searchfield` in Safari 5 and Chrome.\n * 2. Address `box-sizing` set to `border-box` in Safari 5 and Chrome\n *  (include `-moz` to future-proof).\n */\ninput[type=\"search\"] {\n  -webkit-box-sizing: content-box;\n  /* 2 */\n  -moz-box-sizing: content-box;\n  box-sizing: content-box;\n  -webkit-appearance: textfield;\n  /* 1 */ }\n\n/**\n * Remove inner padding and search cancel button in Safari 5 and Chrome\n * on OS X.\n */\ninput[type=\"search\"]::-webkit-search-cancel-button, input[type=\"search\"]::-webkit-search-decoration {\n  -webkit-appearance: none; }\n\n/**\n * Remove inner padding and border in Firefox 4+.\n */\nbutton::-moz-focus-inner, input::-moz-focus-inner {\n  padding: 0;\n  border: 0; }\n\n/**\n * 1. Remove default vertical scrollbar in IE 8/9.\n * 2. Improve readability and alignment in all browsers.\n */\ntextarea {\n  overflow: auto;\n  /* 1 */\n  vertical-align: top;\n  /* 2 */ }\n\nimg {\n  -webkit-user-drag: none; }\n\n/* ==========================================================================\n   Tables\n   ========================================================================== */\n/**\n * Remove most spacing between table cells.\n */\ntable {\n  border-spacing: 0;\n  border-collapse: collapse; }\n\n/**\n * Scaffolding\n * --------------------------------------------------\n */\n*, *:before, *:after {\n  -webkit-box-sizing: border-box;\n  -moz-box-sizing: border-box;\n  box-sizing: border-box; }\n\nhtml {\n  overflow: hidden;\n  -ms-touch-action: pan-y;\n  touch-action: pan-y; }\n\nbody, .ionic-body {\n  -webkit-touch-callout: none;\n  -webkit-font-smoothing: antialiased;\n  font-smoothing: antialiased;\n  -webkit-text-size-adjust: none;\n  -moz-text-size-adjust: none;\n  text-size-adjust: none;\n  -webkit-tap-highlight-color: rgba(0, 0, 0, 0);\n  -webkit-tap-highlight-color: transparent;\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  -ms-user-select: none;\n  user-select: none;\n  top: 0;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  overflow: hidden;\n  margin: 0;\n  padding: 0;\n  color: #000;\n  word-wrap: break-word;\n  font-size: 14px;\n  font-family: \"Helvetica Neue\", Helvetica, Arial, \"Lucida Grande\", sans-serif;\n  line-height: 20px;\n  text-rendering: optimizeLegibility;\n  -webkit-backface-visibility: hidden;\n  -webkit-user-drag: none; }\n\nbody.grade-b, body.grade-c {\n  text-rendering: auto; }\n\n.content {\n  position: relative; }\n\n.scroll-content {\n  position: absolute;\n  top: 0;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  overflow: hidden;\n  margin-top: -1px;\n  width: auto;\n  height: auto; }\n\n.scroll-content-false, .menu .scroll-content.scroll-content-false {\n  z-index: 11; }\n\n.scroll-view {\n  position: relative;\n  display: block;\n  overflow: hidden;\n  margin-top: -1px; }\n\n/**\n * Scroll is the scroll view component available for complex and custom\n * scroll view functionality.\n */\n.scroll {\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  -ms-user-select: none;\n  user-select: none;\n  -webkit-touch-callout: none;\n  -webkit-text-size-adjust: none;\n  -moz-text-size-adjust: none;\n  text-size-adjust: none;\n  -webkit-transform-origin: left top;\n  -moz-transform-origin: left top;\n  transform-origin: left top; }\n\n::-webkit-scrollbar {\n  display: none; }\n\n.scroll-bar {\n  position: absolute;\n  z-index: 9999; }\n\n.ng-animate .scroll-bar {\n  visibility: hidden; }\n\n.scroll-bar-h {\n  right: 2px;\n  bottom: 3px;\n  left: 2px;\n  height: 3px; }\n  .scroll-bar-h .scroll-bar-indicator {\n    height: 100%; }\n\n.scroll-bar-v {\n  top: 2px;\n  right: 3px;\n  bottom: 2px;\n  width: 3px; }\n  .scroll-bar-v .scroll-bar-indicator {\n    width: 100%; }\n\n.scroll-bar-indicator {\n  position: absolute;\n  border-radius: 4px;\n  background: rgba(0, 0, 0, 0.3);\n  opacity: 1; }\n  .scroll-bar-indicator.scroll-bar-fade-out {\n    -webkit-transition: opacity 0.3s linear;\n    -moz-transition: opacity 0.3s linear;\n    transition: opacity 0.3s linear;\n    opacity: 0; }\n\n.grade-b .scroll-bar-indicator, .grade-c .scroll-bar-indicator {\n  border-radius: 0;\n  background: #aaa; }\n  .grade-b .scroll-bar-indicator.scroll-bar-fade-out, .grade-c .scroll-bar-indicator.scroll-bar-fade-out {\n    -webkit-transition: none;\n    -moz-transition: none;\n    transition: none; }\n\n@keyframes refresh-spin {\n  0% {\n    transform: translate3d(0, 0, 0) rotate(0); }\n\n  100% {\n    transform: translate3d(0, 0, 0) rotate(-180deg); } }\n\n@-webkit-keyframes refresh-spin {\n  0% {\n    -webkit-transform: translate3d(0, 0, 0) rotate(0); }\n\n  100% {\n    -webkit-transform: translate3d(0, 0, 0) rotate(-180deg); } }\n\n@keyframes refresh-spin-back {\n  0% {\n    transform: translate3d(0, 0, 0) rotate(-180deg); }\n\n  100% {\n    transform: translate3d(0, 0, 0) rotate(0); } }\n\n@-webkit-keyframes refresh-spin-back {\n  0% {\n    -webkit-transform: translate3d(0, 0, 0) rotate(-180deg); }\n\n  100% {\n    -webkit-transform: translate3d(0, 0, 0) rotate(0); } }\n\n.scroll-refresher {\n  position: absolute;\n  top: -60px;\n  right: 0;\n  left: 0;\n  overflow: hidden;\n  margin: auto;\n  height: 60px; }\n  .scroll-refresher .ionic-refresher-content {\n    position: absolute;\n    bottom: 15px;\n    left: 0;\n    width: 100%;\n    color: #666666;\n    text-align: center;\n    font-size: 30px; }\n    .scroll-refresher .ionic-refresher-content .text-refreshing, .scroll-refresher .ionic-refresher-content .text-pulling {\n      font-size: 16px;\n      line-height: 16px; }\n    .scroll-refresher .ionic-refresher-content.ionic-refresher-with-text {\n      bottom: 10px; }\n  .scroll-refresher .icon-refreshing, .scroll-refresher .icon-pulling {\n    width: 100%;\n    -webkit-backface-visibility: hidden;\n    -webkit-transform-style: preserve-3d;\n    backface-visibility: hidden;\n    transform-style: preserve-3d; }\n  .scroll-refresher .icon-pulling {\n    -webkit-animation-name: refresh-spin-back;\n    -moz-animation-name: refresh-spin-back;\n    animation-name: refresh-spin-back;\n    -webkit-animation-duration: 200ms;\n    -moz-animation-duration: 200ms;\n    animation-duration: 200ms;\n    -webkit-animation-timing-function: linear;\n    -moz-animation-timing-function: linear;\n    animation-timing-function: linear;\n    -webkit-animation-fill-mode: none;\n    -moz-animation-fill-mode: none;\n    animation-fill-mode: none;\n    -webkit-transform: translate3d(0, 0, 0) rotate(0deg);\n    transform: translate3d(0, 0, 0) rotate(0deg); }\n  .scroll-refresher .icon-refreshing, .scroll-refresher .text-refreshing {\n    display: none; }\n  .scroll-refresher .icon-refreshing {\n    -webkit-animation-duration: 1.5s;\n    -moz-animation-duration: 1.5s;\n    animation-duration: 1.5s; }\n  .scroll-refresher.active .icon-pulling {\n    -webkit-animation-name: refresh-spin;\n    -moz-animation-name: refresh-spin;\n    animation-name: refresh-spin;\n    -webkit-transform: translate3d(0, 0, 0) rotate(-180deg);\n    transform: translate3d(0, 0, 0) rotate(-180deg); }\n  .scroll-refresher.active.refreshing .icon-pulling, .scroll-refresher.active.refreshing .text-pulling {\n    display: none; }\n  .scroll-refresher.active.refreshing .icon-refreshing, .scroll-refresher.active.refreshing .text-refreshing {\n    display: block; }\n\nion-infinite-scroll {\n  height: 60px;\n  width: 100%;\n  opacity: 0;\n  display: block;\n  -webkit-transition: opacity 0.25s;\n  -moz-transition: opacity 0.25s;\n  transition: opacity 0.25s;\n  display: -webkit-box;\n  display: -webkit-flex;\n  display: -moz-box;\n  display: -moz-flex;\n  display: -ms-flexbox;\n  display: flex;\n  -webkit-box-direction: normal;\n  -webkit-box-orient: horizontal;\n  -webkit-flex-direction: row;\n  -moz-flex-direction: row;\n  -ms-flex-direction: row;\n  flex-direction: row;\n  -webkit-box-pack: center;\n  -ms-flex-pack: center;\n  -webkit-justify-content: center;\n  -moz-justify-content: center;\n  justify-content: center;\n  -webkit-box-align: center;\n  -ms-flex-align: center;\n  -webkit-align-items: center;\n  -moz-align-items: center;\n  align-items: center; }\n  ion-infinite-scroll .icon {\n    color: #666666;\n    font-size: 30px;\n    color: #666666; }\n  ion-infinite-scroll.active {\n    opacity: 1; }\n\n.overflow-scroll {\n  overflow-x: hidden;\n  overflow-y: scroll;\n  -webkit-overflow-scrolling: touch; }\n  .overflow-scroll .scroll {\n    position: static;\n    height: 100%;\n    -webkit-transform: translate3d(0, 0, 0); }\n\n/* If you change these, change platform.scss as well */\n.has-header {\n  top: 44px; }\n\n.no-header {\n  top: 0; }\n\n.has-subheader {\n  top: 88px; }\n\n.has-tabs-top {\n  top: 93px; }\n\n.has-header.has-subheader.has-tabs-top {\n  top: 137px; }\n\n.has-footer {\n  bottom: 44px; }\n\n.has-subfooter {\n  bottom: 88px; }\n\n.has-tabs, .bar-footer.has-tabs {\n  bottom: 49px; }\n\n.has-footer.has-tabs {\n  bottom: 93px; }\n\n.pane {\n  -webkit-transform: translate3d(0, 0, 0);\n  -moz-transform: translate3d(0, 0, 0);\n  transform: translate3d(0, 0, 0);\n  z-index: 1; }\n\n.view {\n  z-index: 1; }\n\n.pane, .view {\n  position: absolute;\n  top: 0;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  width: 100%;\n  height: 100%;\n  background-color: #fff;\n  overflow: hidden; }\n\n/**\n * Typography\n * --------------------------------------------------\n */\np {\n  margin: 0 0 10px; }\n\nsmall {\n  font-size: 85%; }\n\ncite {\n  font-style: normal; }\n\n.text-left {\n  text-align: left; }\n\n.text-right {\n  text-align: right; }\n\n.text-center {\n  text-align: center; }\n\nh1, h2, h3, h4, h5, h6, .h1, .h2, .h3, .h4, .h5, .h6 {\n  color: #000;\n  font-weight: 500;\n  font-family: \"Helvetica Neue\", Helvetica, Arial, \"Lucida Grande\", sans-serif;\n  line-height: 1.2; }\n  h1 small, h2 small, h3 small, h4 small, h5 small, h6 small, .h1 small, .h2 small, .h3 small, .h4 small, .h5 small, .h6 small {\n    font-weight: normal;\n    line-height: 1; }\n\nh1, .h1, h2, .h2, h3, .h3 {\n  margin-top: 20px;\n  margin-bottom: 10px; }\n  h1:first-child, .h1:first-child, h2:first-child, .h2:first-child, h3:first-child, .h3:first-child {\n    margin-top: 0; }\n  h1 + h1, h1 + .h1, h1 + h2, h1 + .h2, h1 + h3, h1 + .h3, .h1 + h1, .h1 + .h1, .h1 + h2, .h1 + .h2, .h1 + h3, .h1 + .h3, h2 + h1, h2 + .h1, h2 + h2, h2 + .h2, h2 + h3, h2 + .h3, .h2 + h1, .h2 + .h1, .h2 + h2, .h2 + .h2, .h2 + h3, .h2 + .h3, h3 + h1, h3 + .h1, h3 + h2, h3 + .h2, h3 + h3, h3 + .h3, .h3 + h1, .h3 + .h1, .h3 + h2, .h3 + .h2, .h3 + h3, .h3 + .h3 {\n    margin-top: 10px; }\n\nh4, .h4, h5, .h5, h6, .h6 {\n  margin-top: 10px;\n  margin-bottom: 10px; }\n\nh1, .h1 {\n  font-size: 36px; }\n\nh2, .h2 {\n  font-size: 30px; }\n\nh3, .h3 {\n  font-size: 24px; }\n\nh4, .h4 {\n  font-size: 18px; }\n\nh5, .h5 {\n  font-size: 14px; }\n\nh6, .h6 {\n  font-size: 12px; }\n\nh1 small, .h1 small {\n  font-size: 24px; }\n\nh2 small, .h2 small {\n  font-size: 18px; }\n\nh3 small, .h3 small, h4 small, .h4 small {\n  font-size: 14px; }\n\ndl {\n  margin-bottom: 20px; }\n\ndt, dd {\n  line-height: 1.42857; }\n\ndt {\n  font-weight: bold; }\n\nblockquote {\n  margin: 0 0 20px;\n  padding: 10px 20px;\n  border-left: 5px solid gray; }\n  blockquote p {\n    font-weight: 300;\n    font-size: 17.5px;\n    line-height: 1.25; }\n  blockquote p:last-child {\n    margin-bottom: 0; }\n  blockquote small {\n    display: block;\n    line-height: 1.42857; }\n    blockquote small:before {\n      content: '\\2014 \\00A0'; }\n\nq:before, q:after, blockquote:before, blockquote:after {\n  content: \"\"; }\n\naddress {\n  display: block;\n  margin-bottom: 20px;\n  font-style: normal;\n  line-height: 1.42857; }\n\na.subdued {\n  padding-right: 10px;\n  color: #888;\n  text-decoration: none; }\n  a.subdued:hover {\n    text-decoration: none; }\n  a.subdued:last-child {\n    padding-right: 0; }\n\n/**\n * Action Sheets\n * --------------------------------------------------\n */\n.action-sheet-backdrop {\n  -webkit-transition: background-color 300ms ease-in-out;\n  -moz-transition: background-color 300ms ease-in-out;\n  transition: background-color 300ms ease-in-out;\n  position: fixed;\n  top: 0;\n  left: 0;\n  z-index: 11;\n  width: 100%;\n  height: 100%;\n  background-color: rgba(0, 0, 0, 0); }\n  .action-sheet-backdrop.active {\n    background-color: rgba(0, 0, 0, 0.5); }\n\n.action-sheet-wrapper {\n  -webkit-transform: translate3d(0, 100%, 0);\n  -moz-transform: translate3d(0, 100%, 0);\n  transform: translate3d(0, 100%, 0);\n  -webkit-transition: all ease-in-out 300ms;\n  -moz-transition: all ease-in-out 300ms;\n  transition: all ease-in-out 300ms;\n  position: absolute;\n  bottom: 0;\n  width: 100%; }\n\n.action-sheet-up {\n  -webkit-transform: translate3d(0, 0, 0);\n  -moz-transform: translate3d(0, 0, 0);\n  transform: translate3d(0, 0, 0); }\n\n.action-sheet {\n  margin-left: 15px;\n  margin-right: 15px;\n  width: auto;\n  z-index: 11;\n  overflow: hidden; }\n  .action-sheet .button {\n    display: block;\n    padding: 1px;\n    width: 100%;\n    border-radius: 0;\n    background-color: transparent;\n    color: #4a87ee;\n    font-size: 18px; }\n    .action-sheet .button.destructive {\n      color: #ef4e3a; }\n\n.action-sheet-title {\n  padding: 10px;\n  color: #666666;\n  text-align: center;\n  font-size: 12px; }\n\n.action-sheet-group {\n  margin-bottom: 5px;\n  border-radius: 3px 3px 3px 3px;\n  background-color: #fff; }\n  .action-sheet-group .button {\n    border-width: 1px 0px 0px 0px;\n    border-radius: 0; }\n    .action-sheet-group .button.active {\n      background-color: transparent;\n      color: inherit; }\n  .action-sheet-group .button:first-child:last-child {\n    border-width: 0; }\n\n.action-sheet-open {\n  pointer-events: none; }\n  .action-sheet-open.modal-open .modal {\n    pointer-events: none; }\n  .action-sheet-open .action-sheet-backdrop {\n    pointer-events: auto; }\n\n.backdrop {\n  position: fixed;\n  top: 0;\n  left: 0;\n  z-index: 11;\n  width: 100%;\n  height: 100%;\n  background-color: rgba(0, 0, 0, 0.4);\n  visibility: hidden;\n  opacity: 0;\n  -webkit-transition: 0.1s opacity linear;\n  -moz-transition: 0.1s opacity linear;\n  transition: 0.1s opacity linear; }\n  .backdrop.visible {\n    visibility: visible; }\n  .backdrop.active {\n    opacity: 1; }\n\n/**\n * Bar (Headers and Footers)\n * --------------------------------------------------\n */\n.bar {\n  display: -webkit-box;\n  display: -webkit-flex;\n  display: -moz-box;\n  display: -moz-flex;\n  display: -ms-flexbox;\n  display: flex;\n  -webkit-transform: translate3d(0, 0, 0);\n  -moz-transform: translate3d(0, 0, 0);\n  transform: translate3d(0, 0, 0);\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  -ms-user-select: none;\n  user-select: none;\n  position: absolute;\n  right: 0;\n  left: 0;\n  z-index: 10;\n  box-sizing: border-box;\n  padding: 5px;\n  width: 100%;\n  height: 44px;\n  border-width: 0;\n  border-style: solid;\n  border-top: 1px solid transparent;\n  border-bottom: 1px solid #ddd;\n  background-color: white;\n  /* border-width: 1px will actually create 2 device pixels on retina */\n  /* this nifty trick sets an actual 1px border on hi-res displays */\n  background-size: 0; }\n  @media (min--moz-device-pixel-ratio: 1.5), (-webkit-min-device-pixel-ratio: 1.5), (min-device-pixel-ratio: 1.5), (min-resolution: 144dpi), (min-resolution: 1.5dppx) {\n    .bar {\n      border: none;\n      background-image: linear-gradient(0deg, #ddd, #ddd 50%, transparent 50%);\n      background-position: bottom;\n      background-size: 100% 1px;\n      background-repeat: no-repeat; } }\n  .bar.bar-clear {\n    border: none;\n    background: none;\n    color: #fff; }\n    .bar.bar-clear .button {\n      color: #fff; }\n    .bar.bar-clear .title {\n      color: #fff; }\n  .bar.item-input-inset .item-input-wrapper {\n    margin-top: -1px; }\n    .bar.item-input-inset .item-input-wrapper input {\n      padding-left: 8px;\n      width: 94%;\n      height: 28px;\n      background: transparent; }\n  .bar.bar-light {\n    border-color: #ddd;\n    background-color: white;\n    background-image: linear-gradient(0deg, #ddd, #ddd 50%, transparent 50%);\n    color: #444; }\n    .bar.bar-light .title {\n      color: #444; }\n    .bar.bar-light.bar-footer {\n      background-image: linear-gradient(180deg, #ddd, #ddd 50%, transparent 50%); }\n  .bar.bar-stable {\n    border-color: #b2b2b2;\n    background-color: #f8f8f8;\n    background-image: linear-gradient(0deg, #b2b2b2, #b2b2b2 50%, transparent 50%);\n    color: #444; }\n    .bar.bar-stable .title {\n      color: #444; }\n    .bar.bar-stable.bar-footer {\n      background-image: linear-gradient(180deg, #b2b2b2, #b2b2b2 50%, transparent 50%); }\n  .bar.bar-positive {\n    border-color: #145fd7;\n    background-color: #4a87ee;\n    background-image: linear-gradient(0deg, #145fd7, #145fd7 50%, transparent 50%);\n    color: #fff; }\n    .bar.bar-positive .title {\n      color: #fff; }\n    .bar.bar-positive.bar-footer {\n      background-image: linear-gradient(180deg, #145fd7, #145fd7 50%, transparent 50%); }\n  .bar.bar-calm {\n    border-color: #1aacc3;\n    background-color: #43cee6;\n    background-image: linear-gradient(0deg, #1aacc3, #1aacc3 50%, transparent 50%);\n    color: #fff; }\n    .bar.bar-calm .title {\n      color: #fff; }\n    .bar.bar-calm.bar-footer {\n      background-image: linear-gradient(180deg, #1aacc3, #1aacc3 50%, transparent 50%); }\n  .bar.bar-assertive {\n    border-color: #cc2311;\n    background-color: #ef4e3a;\n    background-image: linear-gradient(0deg, #cc2311, #cc2311 50%, transparent 50%);\n    color: #fff; }\n    .bar.bar-assertive .title {\n      color: #fff; }\n    .bar.bar-assertive.bar-footer {\n      background-image: linear-gradient(180deg, #cc2311, #cc2311 50%, transparent 50%); }\n  .bar.bar-balanced {\n    border-color: #498f24;\n    background-color: #66cc33;\n    background-image: linear-gradient(0deg, #498f24, #498f24 50%, transparent 50%);\n    color: #fff; }\n    .bar.bar-balanced .title {\n      color: #fff; }\n    .bar.bar-balanced.bar-footer {\n      background-image: linear-gradient(180deg, #498f24, #145fd7 50%, transparent 50%); }\n  .bar.bar-energized {\n    border-color: #d39211;\n    background-color: #f0b840;\n    background-image: linear-gradient(0deg, #d39211, #d39211 50%, transparent 50%);\n    color: #fff; }\n    .bar.bar-energized .title {\n      color: #fff; }\n    .bar.bar-energized.bar-footer {\n      background-image: linear-gradient(180deg, #d39211, #d39211 50%, transparent 50%); }\n  .bar.bar-royal {\n    border-color: #552bdf;\n    background-color: #8a6de9;\n    background-image: linear-gradient(0deg, #552bdf, #552bdf 50%, transparent 50%);\n    color: #fff; }\n    .bar.bar-royal .title {\n      color: #fff; }\n    .bar.bar-royal.bar-footer {\n      background-image: linear-gradient(180deg, #552bdf, #552bdf 50%, transparent 50%); }\n  .bar.bar-dark {\n    border-color: #111;\n    background-color: #444444;\n    background-image: linear-gradient(0deg, #111, #111 50%, transparent 50%);\n    color: #fff; }\n    .bar.bar-dark .title {\n      color: #fff; }\n    .bar.bar-dark.bar-footer {\n      background-image: linear-gradient(180deg, #111, #111 50%, transparent 50%); }\n  .bar .title {\n    position: absolute;\n    top: 0;\n    right: 0;\n    left: 0;\n    z-index: 0;\n    overflow: hidden;\n    margin: 0 10px;\n    min-width: 30px;\n    height: 43px;\n    text-align: center;\n    text-overflow: ellipsis;\n    white-space: nowrap;\n    font-size: 17px;\n    line-height: 44px; }\n    .bar .title.title-left {\n      text-align: left; }\n    .bar .title.title-right {\n      text-align: right; }\n  .bar .title a {\n    color: inherit; }\n  .bar .button {\n    z-index: 1;\n    padding: 0 8px;\n    min-width: initial;\n    min-height: 31px;\n    font-weight: 400;\n    font-size: 13px;\n    line-height: 32px; }\n    .bar .button.button-icon:before, .bar .button .icon:before, .bar .button.icon:before, .bar .button.icon-left:before, .bar .button.icon-right:before {\n      padding-right: 2px;\n      padding-left: 2px;\n      font-size: 20px;\n      line-height: 32px; }\n    .bar .button.button-icon {\n      font-size: 17px; }\n      .bar .button.button-icon .icon:before, .bar .button.button-icon:before, .bar .button.button-icon.icon-left:before, .bar .button.button-icon.icon-right:before {\n        vertical-align: top;\n        font-size: 32px;\n        line-height: 32px; }\n    .bar .button.button-clear {\n      padding-right: 2px;\n      padding-left: 2px;\n      font-weight: 300;\n      font-size: 17px; }\n      .bar .button.button-clear .icon:before, .bar .button.button-clear.icon:before, .bar .button.button-clear.icon-left:before, .bar .button.button-clear.icon-right:before {\n        font-size: 32px;\n        line-height: 32px; }\n    .bar .button.back-button {\n      padding: 0;\n      opacity: 0.8; }\n      .bar .button.back-button .back-button-title {\n        display: inline-block;\n        vertical-align: middle;\n        margin-left: 4px; }\n    .bar .button.back-button.active, .bar .button.back-button.activated {\n      opacity: 1; }\n  .bar .button-bar > .button, .bar .buttons > .button {\n    min-height: 31px;\n    line-height: 32px; }\n  .bar .button-bar + .button, .bar .button + .button-bar {\n    margin-left: 5px; }\n  .bar .buttons, .bar .buttons.left-buttons, .bar .buttons.right-buttons {\n    display: inherit; }\n  .bar .buttons span {\n    display: inline-flex; }\n  .bar .title + .button:last-child, .bar > .button + .button:last-child, .bar > .button.pull-right, .bar .buttons.pull-right, .bar .title + .buttons {\n    position: absolute;\n    top: 5px;\n    right: 5px;\n    bottom: 5px; }\n\n.bar-light .button {\n  border-color: #ddd;\n  background-color: white;\n  color: #444; }\n  .bar-light .button:hover {\n    color: #444;\n    text-decoration: none; }\n  .bar-light .button.active, .bar-light .button.activated {\n    border-color: #ccc;\n    background-color: #fafafa;\n    box-shadow: inset 0px 1px 3px rgba(0, 0, 0, 0.15); }\n  .bar-light .button.button-clear {\n    border-color: transparent;\n    background: none;\n    box-shadow: none;\n    color: #444;\n    font-size: 17px; }\n  .bar-light .button.button-icon {\n    border-color: transparent;\n    background: none; }\n\n.bar-stable .button {\n  border-color: #b2b2b2;\n  background-color: #f8f8f8;\n  color: #444; }\n  .bar-stable .button:hover {\n    color: #444;\n    text-decoration: none; }\n  .bar-stable .button.active, .bar-stable .button.activated {\n    border-color: #a2a2a2;\n    background-color: #e5e5e5;\n    box-shadow: inset 0px 1px 3px rgba(0, 0, 0, 0.15); }\n  .bar-stable .button.button-clear {\n    border-color: transparent;\n    background: none;\n    box-shadow: none;\n    color: #444;\n    font-size: 17px; }\n  .bar-stable .button.button-icon {\n    border-color: transparent;\n    background: none; }\n\n.bar-positive .button {\n  border-color: #145fd7;\n  background-color: #4a87ee;\n  color: #fff; }\n  .bar-positive .button:hover {\n    color: #fff;\n    text-decoration: none; }\n  .bar-positive .button.active, .bar-positive .button.activated {\n    border-color: #145fd7;\n    background-color: #145fd7;\n    box-shadow: inset 0px 1px 3px rgba(0, 0, 0, 0.15); }\n  .bar-positive .button.button-clear {\n    border-color: transparent;\n    background: none;\n    box-shadow: none;\n    color: #fff;\n    font-size: 17px; }\n  .bar-positive .button.button-icon {\n    border-color: transparent;\n    background: none; }\n\n.bar-calm .button {\n  border-color: #1aacc3;\n  background-color: #43cee6;\n  color: #fff; }\n  .bar-calm .button:hover {\n    color: #fff;\n    text-decoration: none; }\n  .bar-calm .button.active, .bar-calm .button.activated {\n    border-color: #1aacc3;\n    background-color: #1aacc3;\n    box-shadow: inset 0px 1px 3px rgba(0, 0, 0, 0.15); }\n  .bar-calm .button.button-clear {\n    border-color: transparent;\n    background: none;\n    box-shadow: none;\n    color: #fff;\n    font-size: 17px; }\n  .bar-calm .button.button-icon {\n    border-color: transparent;\n    background: none; }\n\n.bar-assertive .button {\n  border-color: #cc2311;\n  background-color: #ef4e3a;\n  color: #fff; }\n  .bar-assertive .button:hover {\n    color: #fff;\n    text-decoration: none; }\n  .bar-assertive .button.active, .bar-assertive .button.activated {\n    border-color: #cc2311;\n    background-color: #cc2311;\n    box-shadow: inset 0px 1px 3px rgba(0, 0, 0, 0.15); }\n  .bar-assertive .button.button-clear {\n    border-color: transparent;\n    background: none;\n    box-shadow: none;\n    color: #fff;\n    font-size: 17px; }\n  .bar-assertive .button.button-icon {\n    border-color: transparent;\n    background: none; }\n\n.bar-balanced .button {\n  border-color: #498f24;\n  background-color: #66cc33;\n  color: #fff; }\n  .bar-balanced .button:hover {\n    color: #fff;\n    text-decoration: none; }\n  .bar-balanced .button.active, .bar-balanced .button.activated {\n    border-color: #498f24;\n    background-color: #498f24;\n    box-shadow: inset 0px 1px 3px rgba(0, 0, 0, 0.15); }\n  .bar-balanced .button.button-clear {\n    border-color: transparent;\n    background: none;\n    box-shadow: none;\n    color: #fff;\n    font-size: 17px; }\n  .bar-balanced .button.button-icon {\n    border-color: transparent;\n    background: none; }\n\n.bar-energized .button {\n  border-color: #d39211;\n  background-color: #f0b840;\n  color: #fff; }\n  .bar-energized .button:hover {\n    color: #fff;\n    text-decoration: none; }\n  .bar-energized .button.active, .bar-energized .button.activated {\n    border-color: #d39211;\n    background-color: #d39211;\n    box-shadow: inset 0px 1px 3px rgba(0, 0, 0, 0.15); }\n  .bar-energized .button.button-clear {\n    border-color: transparent;\n    background: none;\n    box-shadow: none;\n    color: #fff;\n    font-size: 17px; }\n  .bar-energized .button.button-icon {\n    border-color: transparent;\n    background: none; }\n\n.bar-royal .button {\n  border-color: #552bdf;\n  background-color: #8a6de9;\n  color: #fff; }\n  .bar-royal .button:hover {\n    color: #fff;\n    text-decoration: none; }\n  .bar-royal .button.active, .bar-royal .button.activated {\n    border-color: #552bdf;\n    background-color: #552bdf;\n    box-shadow: inset 0px 1px 3px rgba(0, 0, 0, 0.15); }\n  .bar-royal .button.button-clear {\n    border-color: transparent;\n    background: none;\n    box-shadow: none;\n    color: #fff;\n    font-size: 17px; }\n  .bar-royal .button.button-icon {\n    border-color: transparent;\n    background: none; }\n\n.bar-dark .button {\n  border-color: #111;\n  background-color: #444444;\n  color: #fff; }\n  .bar-dark .button:hover {\n    color: #fff;\n    text-decoration: none; }\n  .bar-dark .button.active, .bar-dark .button.activated {\n    border-color: #000;\n    background-color: #262626;\n    box-shadow: inset 0px 1px 3px rgba(0, 0, 0, 0.15); }\n  .bar-dark .button.button-clear {\n    border-color: transparent;\n    background: none;\n    box-shadow: none;\n    color: #fff;\n    font-size: 17px; }\n  .bar-dark .button.button-icon {\n    border-color: transparent;\n    background: none; }\n\n.bar-header {\n  top: 0;\n  border-top-width: 0;\n  border-bottom-width: 1px; }\n  .bar-header.has-tabs-top {\n    border-bottom-width: 0px; }\n\n.bar-footer {\n  bottom: 0;\n  border-top-width: 1px;\n  border-bottom-width: 0;\n  background-position: top; }\n  .bar-footer.item-input-inset {\n    position: absolute; }\n\n.bar-tabs {\n  padding: 0; }\n\n.bar-subheader {\n  top: 44px;\n  display: block; }\n\n.bar-subfooter {\n  bottom: 44px;\n  display: block; }\n\n/**\n * Tabs\n * --------------------------------------------------\n * A navigation bar with any number of tab items supported.\n */\n.tabs {\n  display: -webkit-box;\n  display: -webkit-flex;\n  display: -moz-box;\n  display: -moz-flex;\n  display: -ms-flexbox;\n  display: flex;\n  -webkit-box-direction: normal;\n  -webkit-box-orient: horizontal;\n  -webkit-flex-direction: horizontal;\n  -moz-flex-direction: horizontal;\n  -ms-flex-direction: horizontal;\n  flex-direction: horizontal;\n  -webkit-box-pack: center;\n  -ms-flex-pack: center;\n  -webkit-justify-content: center;\n  -moz-justify-content: center;\n  justify-content: center;\n  -webkit-transform: translate3d(0, 0, 0);\n  -moz-transform: translate3d(0, 0, 0);\n  transform: translate3d(0, 0, 0);\n  border-color: #b2b2b2;\n  background-color: #f8f8f8;\n  background-image: linear-gradient(0deg, #b2b2b2, #b2b2b2 50%, transparent 50%);\n  color: #444;\n  position: absolute;\n  bottom: 0;\n  z-index: 5;\n  width: 100%;\n  height: 49px;\n  border-style: solid;\n  border-top-width: 1px;\n  background-size: 0;\n  line-height: 49px; }\n  .tabs .tab-item .badge {\n    background-color: #444;\n    color: #f8f8f8; }\n  @media (min--moz-device-pixel-ratio: 1.5), (-webkit-min-device-pixel-ratio: 1.5), (min-device-pixel-ratio: 1.5), (min-resolution: 144dpi), (min-resolution: 1.5dppx) {\n    .tabs {\n      padding-top: 2px;\n      border-top: none !important;\n      border-bottom: none;\n      background-position: top;\n      background-size: 100% 1px;\n      background-repeat: no-repeat; } }\n\n/* Allow parent element of tabs to define color, or just the tab itself */\n.tabs-light > .tabs, .tabs.tabs-light {\n  border-color: #ddd;\n  background-color: #fff;\n  background-image: linear-gradient(0deg, #ddd, #ddd 50%, transparent 50%);\n  color: #444; }\n  .tabs-light > .tabs .tab-item .badge, .tabs.tabs-light .tab-item .badge {\n    background-color: #444;\n    color: #fff; }\n\n.tabs-stable > .tabs, .tabs.tabs-stable {\n  border-color: #b2b2b2;\n  background-color: #f8f8f8;\n  background-image: linear-gradient(0deg, #b2b2b2, #b2b2b2 50%, transparent 50%);\n  color: #444; }\n  .tabs-stable > .tabs .tab-item .badge, .tabs.tabs-stable .tab-item .badge {\n    background-color: #444;\n    color: #f8f8f8; }\n\n.tabs-positive > .tabs, .tabs.tabs-positive {\n  border-color: #145fd7;\n  background-color: #4a87ee;\n  background-image: linear-gradient(0deg, #145fd7, #145fd7 50%, transparent 50%);\n  color: #fff; }\n  .tabs-positive > .tabs .tab-item .badge, .tabs.tabs-positive .tab-item .badge {\n    background-color: #fff;\n    color: #4a87ee; }\n\n.tabs-calm > .tabs, .tabs.tabs-calm {\n  border-color: #1aacc3;\n  background-color: #43cee6;\n  background-image: linear-gradient(0deg, #1aacc3, #1aacc3 50%, transparent 50%);\n  color: #fff; }\n  .tabs-calm > .tabs .tab-item .badge, .tabs.tabs-calm .tab-item .badge {\n    background-color: #fff;\n    color: #43cee6; }\n\n.tabs-assertive > .tabs, .tabs.tabs-assertive {\n  border-color: #cc2311;\n  background-color: #ef4e3a;\n  background-image: linear-gradient(0deg, #cc2311, #cc2311 50%, transparent 50%);\n  color: #fff; }\n  .tabs-assertive > .tabs .tab-item .badge, .tabs.tabs-assertive .tab-item .badge {\n    background-color: #fff;\n    color: #ef4e3a; }\n\n.tabs-balanced > .tabs, .tabs.tabs-balanced {\n  border-color: #498f24;\n  background-color: #66cc33;\n  background-image: linear-gradient(0deg, #498f24, #498f24 50%, transparent 50%);\n  color: #fff; }\n  .tabs-balanced > .tabs .tab-item .badge, .tabs.tabs-balanced .tab-item .badge {\n    background-color: #fff;\n    color: #66cc33; }\n\n.tabs-energized > .tabs, .tabs.tabs-energized {\n  border-color: #d39211;\n  background-color: #f0b840;\n  background-image: linear-gradient(0deg, #d39211, #d39211 50%, transparent 50%);\n  color: #fff; }\n  .tabs-energized > .tabs .tab-item .badge, .tabs.tabs-energized .tab-item .badge {\n    background-color: #fff;\n    color: #f0b840; }\n\n.tabs-royal > .tabs, .tabs.tabs-royal {\n  border-color: #552bdf;\n  background-color: #8a6de9;\n  background-image: linear-gradient(0deg, #552bdf, #552bdf 50%, transparent 50%);\n  color: #fff; }\n  .tabs-royal > .tabs .tab-item .badge, .tabs.tabs-royal .tab-item .badge {\n    background-color: #fff;\n    color: #8a6de9; }\n\n.tabs-dark > .tabs, .tabs.tabs-dark {\n  border-color: #111;\n  background-color: #444;\n  background-image: linear-gradient(0deg, #111, #111 50%, transparent 50%);\n  color: #fff; }\n  .tabs-dark > .tabs .tab-item .badge, .tabs.tabs-dark .tab-item .badge {\n    background-color: #fff;\n    color: #444; }\n\n.tabs-striped .tabs {\n  background-color: white;\n  background-image: none;\n  border: none;\n  box-shadow: 0 2px 3px rgba(0, 0, 0, 0.15);\n  padding-top: 2px; }\n.tabs-striped.tabs-light .tabs {\n  background-color: #444; }\n.tabs-striped.tabs-light .tab-item {\n  color: rgba(255, 255, 255, 0.4);\n  opacity: 1; }\n  .tabs-striped.tabs-light .tab-item .badge {\n    opacity: 0.4; }\n  .tabs-striped.tabs-light .tab-item.tab-item-active, .tabs-striped.tabs-light .tab-item.active, .tabs-striped.tabs-light .tab-item.activated {\n    margin-top: -2px;\n    color: #fff;\n    border-style: solid;\n    border-width: 2px 0 0 0;\n    border-color: #fff; }\n    .tabs-striped.tabs-light .tab-item.tab-item-active .badge, .tabs-striped.tabs-light .tab-item.active .badge, .tabs-striped.tabs-light .tab-item.activated .badge {\n      top: 2px;\n      opacity: 1; }\n.tabs-striped.tabs-top .tab-item.tab-item-active .badge, .tabs-striped.tabs-top .tab-item.active .badge, .tabs-striped.tabs-top .tab-item.activated .badge {\n  top: 4%; }\n.tabs-striped.tabs-stable .tabs {\n  background-color: #444; }\n.tabs-striped.tabs-stable .tab-item {\n  color: rgba(248, 248, 248, 0.4);\n  opacity: 1; }\n  .tabs-striped.tabs-stable .tab-item .badge {\n    opacity: 0.4; }\n  .tabs-striped.tabs-stable .tab-item.tab-item-active, .tabs-striped.tabs-stable .tab-item.active, .tabs-striped.tabs-stable .tab-item.activated {\n    margin-top: -2px;\n    color: #f8f8f8;\n    border-style: solid;\n    border-width: 2px 0 0 0;\n    border-color: #f8f8f8; }\n    .tabs-striped.tabs-stable .tab-item.tab-item-active .badge, .tabs-striped.tabs-stable .tab-item.active .badge, .tabs-striped.tabs-stable .tab-item.activated .badge {\n      top: 2px;\n      opacity: 1; }\n.tabs-striped.tabs-top .tab-item.tab-item-active .badge, .tabs-striped.tabs-top .tab-item.active .badge, .tabs-striped.tabs-top .tab-item.activated .badge {\n  top: 4%; }\n.tabs-striped.tabs-positive .tabs {\n  background-color: #fff; }\n.tabs-striped.tabs-positive .tab-item {\n  color: rgba(74, 135, 238, 0.4);\n  opacity: 1; }\n  .tabs-striped.tabs-positive .tab-item .badge {\n    opacity: 0.4; }\n  .tabs-striped.tabs-positive .tab-item.tab-item-active, .tabs-striped.tabs-positive .tab-item.active, .tabs-striped.tabs-positive .tab-item.activated {\n    margin-top: -2px;\n    color: #4a87ee;\n    border-style: solid;\n    border-width: 2px 0 0 0;\n    border-color: #4a87ee; }\n    .tabs-striped.tabs-positive .tab-item.tab-item-active .badge, .tabs-striped.tabs-positive .tab-item.active .badge, .tabs-striped.tabs-positive .tab-item.activated .badge {\n      top: 2px;\n      opacity: 1; }\n.tabs-striped.tabs-top .tab-item.tab-item-active .badge, .tabs-striped.tabs-top .tab-item.active .badge, .tabs-striped.tabs-top .tab-item.activated .badge {\n  top: 4%; }\n.tabs-striped.tabs-calm .tabs {\n  background-color: #fff; }\n.tabs-striped.tabs-calm .tab-item {\n  color: rgba(67, 206, 230, 0.4);\n  opacity: 1; }\n  .tabs-striped.tabs-calm .tab-item .badge {\n    opacity: 0.4; }\n  .tabs-striped.tabs-calm .tab-item.tab-item-active, .tabs-striped.tabs-calm .tab-item.active, .tabs-striped.tabs-calm .tab-item.activated {\n    margin-top: -2px;\n    color: #43cee6;\n    border-style: solid;\n    border-width: 2px 0 0 0;\n    border-color: #43cee6; }\n    .tabs-striped.tabs-calm .tab-item.tab-item-active .badge, .tabs-striped.tabs-calm .tab-item.active .badge, .tabs-striped.tabs-calm .tab-item.activated .badge {\n      top: 2px;\n      opacity: 1; }\n.tabs-striped.tabs-top .tab-item.tab-item-active .badge, .tabs-striped.tabs-top .tab-item.active .badge, .tabs-striped.tabs-top .tab-item.activated .badge {\n  top: 4%; }\n.tabs-striped.tabs-assertive .tabs {\n  background-color: #fff; }\n.tabs-striped.tabs-assertive .tab-item {\n  color: rgba(239, 78, 58, 0.4);\n  opacity: 1; }\n  .tabs-striped.tabs-assertive .tab-item .badge {\n    opacity: 0.4; }\n  .tabs-striped.tabs-assertive .tab-item.tab-item-active, .tabs-striped.tabs-assertive .tab-item.active, .tabs-striped.tabs-assertive .tab-item.activated {\n    margin-top: -2px;\n    color: #ef4e3a;\n    border-style: solid;\n    border-width: 2px 0 0 0;\n    border-color: #ef4e3a; }\n    .tabs-striped.tabs-assertive .tab-item.tab-item-active .badge, .tabs-striped.tabs-assertive .tab-item.active .badge, .tabs-striped.tabs-assertive .tab-item.activated .badge {\n      top: 2px;\n      opacity: 1; }\n.tabs-striped.tabs-top .tab-item.tab-item-active .badge, .tabs-striped.tabs-top .tab-item.active .badge, .tabs-striped.tabs-top .tab-item.activated .badge {\n  top: 4%; }\n.tabs-striped.tabs-balanced .tabs {\n  background-color: #fff; }\n.tabs-striped.tabs-balanced .tab-item {\n  color: rgba(102, 204, 51, 0.4);\n  opacity: 1; }\n  .tabs-striped.tabs-balanced .tab-item .badge {\n    opacity: 0.4; }\n  .tabs-striped.tabs-balanced .tab-item.tab-item-active, .tabs-striped.tabs-balanced .tab-item.active, .tabs-striped.tabs-balanced .tab-item.activated {\n    margin-top: -2px;\n    color: #66cc33;\n    border-style: solid;\n    border-width: 2px 0 0 0;\n    border-color: #66cc33; }\n    .tabs-striped.tabs-balanced .tab-item.tab-item-active .badge, .tabs-striped.tabs-balanced .tab-item.active .badge, .tabs-striped.tabs-balanced .tab-item.activated .badge {\n      top: 2px;\n      opacity: 1; }\n.tabs-striped.tabs-top .tab-item.tab-item-active .badge, .tabs-striped.tabs-top .tab-item.active .badge, .tabs-striped.tabs-top .tab-item.activated .badge {\n  top: 4%; }\n.tabs-striped.tabs-energized .tabs {\n  background-color: #fff; }\n.tabs-striped.tabs-energized .tab-item {\n  color: rgba(240, 184, 64, 0.4);\n  opacity: 1; }\n  .tabs-striped.tabs-energized .tab-item .badge {\n    opacity: 0.4; }\n  .tabs-striped.tabs-energized .tab-item.tab-item-active, .tabs-striped.tabs-energized .tab-item.active, .tabs-striped.tabs-energized .tab-item.activated {\n    margin-top: -2px;\n    color: #f0b840;\n    border-style: solid;\n    border-width: 2px 0 0 0;\n    border-color: #f0b840; }\n    .tabs-striped.tabs-energized .tab-item.tab-item-active .badge, .tabs-striped.tabs-energized .tab-item.active .badge, .tabs-striped.tabs-energized .tab-item.activated .badge {\n      top: 2px;\n      opacity: 1; }\n.tabs-striped.tabs-top .tab-item.tab-item-active .badge, .tabs-striped.tabs-top .tab-item.active .badge, .tabs-striped.tabs-top .tab-item.activated .badge {\n  top: 4%; }\n.tabs-striped.tabs-royal .tabs {\n  background-color: #fff; }\n.tabs-striped.tabs-royal .tab-item {\n  color: rgba(138, 109, 233, 0.4);\n  opacity: 1; }\n  .tabs-striped.tabs-royal .tab-item .badge {\n    opacity: 0.4; }\n  .tabs-striped.tabs-royal .tab-item.tab-item-active, .tabs-striped.tabs-royal .tab-item.active, .tabs-striped.tabs-royal .tab-item.activated {\n    margin-top: -2px;\n    color: #8a6de9;\n    border-style: solid;\n    border-width: 2px 0 0 0;\n    border-color: #8a6de9; }\n    .tabs-striped.tabs-royal .tab-item.tab-item-active .badge, .tabs-striped.tabs-royal .tab-item.active .badge, .tabs-striped.tabs-royal .tab-item.activated .badge {\n      top: 2px;\n      opacity: 1; }\n.tabs-striped.tabs-top .tab-item.tab-item-active .badge, .tabs-striped.tabs-top .tab-item.active .badge, .tabs-striped.tabs-top .tab-item.activated .badge {\n  top: 4%; }\n.tabs-striped.tabs-dark .tabs {\n  background-color: #fff; }\n.tabs-striped.tabs-dark .tab-item {\n  color: rgba(68, 68, 68, 0.4);\n  opacity: 1; }\n  .tabs-striped.tabs-dark .tab-item .badge {\n    opacity: 0.4; }\n  .tabs-striped.tabs-dark .tab-item.tab-item-active, .tabs-striped.tabs-dark .tab-item.active, .tabs-striped.tabs-dark .tab-item.activated {\n    margin-top: -2px;\n    color: #444;\n    border-style: solid;\n    border-width: 2px 0 0 0;\n    border-color: #444; }\n    .tabs-striped.tabs-dark .tab-item.tab-item-active .badge, .tabs-striped.tabs-dark .tab-item.active .badge, .tabs-striped.tabs-dark .tab-item.activated .badge {\n      top: 2px;\n      opacity: 1; }\n.tabs-striped.tabs-top .tab-item.tab-item-active .badge, .tabs-striped.tabs-top .tab-item.active .badge, .tabs-striped.tabs-top .tab-item.activated .badge {\n  top: 4%; }\n.tabs-striped.tabs-background-light .tabs {\n  background-color: #fff; }\n.tabs-striped.tabs-background-stable .tabs {\n  background-color: #f8f8f8; }\n.tabs-striped.tabs-background-positive .tabs {\n  background-color: #4a87ee; }\n.tabs-striped.tabs-background-calm .tabs {\n  background-color: #43cee6; }\n.tabs-striped.tabs-background-assertive .tabs {\n  background-color: #ef4e3a; }\n.tabs-striped.tabs-background-balanced .tabs {\n  background-color: #66cc33; }\n.tabs-striped.tabs-background-energized .tabs {\n  background-color: #f0b840; }\n.tabs-striped.tabs-background-royal .tabs {\n  background-color: #8a6de9; }\n.tabs-striped.tabs-background-dark .tabs {\n  background-color: #444; }\n.tabs-striped.tabs-color-light .tab-item {\n  color: rgba(255, 255, 255, 0.4);\n  opacity: 1; }\n  .tabs-striped.tabs-color-light .tab-item .badge {\n    opacity: 0.4; }\n  .tabs-striped.tabs-color-light .tab-item.tab-item-active, .tabs-striped.tabs-color-light .tab-item.active, .tabs-striped.tabs-color-light .tab-item.activated {\n    margin-top: -2px;\n    color: #fff;\n    border: 0 solid #fff;\n    border-top-width: 2px; }\n    .tabs-striped.tabs-color-light .tab-item.tab-item-active .badge, .tabs-striped.tabs-color-light .tab-item.active .badge, .tabs-striped.tabs-color-light .tab-item.activated .badge {\n      top: 2px;\n      opacity: 1; }\n.tabs-striped.tabs-color-stable .tab-item {\n  color: rgba(248, 248, 248, 0.4);\n  opacity: 1; }\n  .tabs-striped.tabs-color-stable .tab-item .badge {\n    opacity: 0.4; }\n  .tabs-striped.tabs-color-stable .tab-item.tab-item-active, .tabs-striped.tabs-color-stable .tab-item.active, .tabs-striped.tabs-color-stable .tab-item.activated {\n    margin-top: -2px;\n    color: #f8f8f8;\n    border: 0 solid #f8f8f8;\n    border-top-width: 2px; }\n    .tabs-striped.tabs-color-stable .tab-item.tab-item-active .badge, .tabs-striped.tabs-color-stable .tab-item.active .badge, .tabs-striped.tabs-color-stable .tab-item.activated .badge {\n      top: 2px;\n      opacity: 1; }\n.tabs-striped.tabs-color-positive .tab-item {\n  color: rgba(74, 135, 238, 0.4);\n  opacity: 1; }\n  .tabs-striped.tabs-color-positive .tab-item .badge {\n    opacity: 0.4; }\n  .tabs-striped.tabs-color-positive .tab-item.tab-item-active, .tabs-striped.tabs-color-positive .tab-item.active, .tabs-striped.tabs-color-positive .tab-item.activated {\n    margin-top: -2px;\n    color: #4a87ee;\n    border: 0 solid #4a87ee;\n    border-top-width: 2px; }\n    .tabs-striped.tabs-color-positive .tab-item.tab-item-active .badge, .tabs-striped.tabs-color-positive .tab-item.active .badge, .tabs-striped.tabs-color-positive .tab-item.activated .badge {\n      top: 2px;\n      opacity: 1; }\n.tabs-striped.tabs-color-calm .tab-item {\n  color: rgba(67, 206, 230, 0.4);\n  opacity: 1; }\n  .tabs-striped.tabs-color-calm .tab-item .badge {\n    opacity: 0.4; }\n  .tabs-striped.tabs-color-calm .tab-item.tab-item-active, .tabs-striped.tabs-color-calm .tab-item.active, .tabs-striped.tabs-color-calm .tab-item.activated {\n    margin-top: -2px;\n    color: #43cee6;\n    border: 0 solid #43cee6;\n    border-top-width: 2px; }\n    .tabs-striped.tabs-color-calm .tab-item.tab-item-active .badge, .tabs-striped.tabs-color-calm .tab-item.active .badge, .tabs-striped.tabs-color-calm .tab-item.activated .badge {\n      top: 2px;\n      opacity: 1; }\n.tabs-striped.tabs-color-assertive .tab-item {\n  color: rgba(239, 78, 58, 0.4);\n  opacity: 1; }\n  .tabs-striped.tabs-color-assertive .tab-item .badge {\n    opacity: 0.4; }\n  .tabs-striped.tabs-color-assertive .tab-item.tab-item-active, .tabs-striped.tabs-color-assertive .tab-item.active, .tabs-striped.tabs-color-assertive .tab-item.activated {\n    margin-top: -2px;\n    color: #ef4e3a;\n    border: 0 solid #ef4e3a;\n    border-top-width: 2px; }\n    .tabs-striped.tabs-color-assertive .tab-item.tab-item-active .badge, .tabs-striped.tabs-color-assertive .tab-item.active .badge, .tabs-striped.tabs-color-assertive .tab-item.activated .badge {\n      top: 2px;\n      opacity: 1; }\n.tabs-striped.tabs-color-balanced .tab-item {\n  color: rgba(102, 204, 51, 0.4);\n  opacity: 1; }\n  .tabs-striped.tabs-color-balanced .tab-item .badge {\n    opacity: 0.4; }\n  .tabs-striped.tabs-color-balanced .tab-item.tab-item-active, .tabs-striped.tabs-color-balanced .tab-item.active, .tabs-striped.tabs-color-balanced .tab-item.activated {\n    margin-top: -2px;\n    color: #66cc33;\n    border: 0 solid #66cc33;\n    border-top-width: 2px; }\n    .tabs-striped.tabs-color-balanced .tab-item.tab-item-active .badge, .tabs-striped.tabs-color-balanced .tab-item.active .badge, .tabs-striped.tabs-color-balanced .tab-item.activated .badge {\n      top: 2px;\n      opacity: 1; }\n.tabs-striped.tabs-color-energized .tab-item {\n  color: rgba(240, 184, 64, 0.4);\n  opacity: 1; }\n  .tabs-striped.tabs-color-energized .tab-item .badge {\n    opacity: 0.4; }\n  .tabs-striped.tabs-color-energized .tab-item.tab-item-active, .tabs-striped.tabs-color-energized .tab-item.active, .tabs-striped.tabs-color-energized .tab-item.activated {\n    margin-top: -2px;\n    color: #f0b840;\n    border: 0 solid #f0b840;\n    border-top-width: 2px; }\n    .tabs-striped.tabs-color-energized .tab-item.tab-item-active .badge, .tabs-striped.tabs-color-energized .tab-item.active .badge, .tabs-striped.tabs-color-energized .tab-item.activated .badge {\n      top: 2px;\n      opacity: 1; }\n.tabs-striped.tabs-color-royal .tab-item {\n  color: rgba(138, 109, 233, 0.4);\n  opacity: 1; }\n  .tabs-striped.tabs-color-royal .tab-item .badge {\n    opacity: 0.4; }\n  .tabs-striped.tabs-color-royal .tab-item.tab-item-active, .tabs-striped.tabs-color-royal .tab-item.active, .tabs-striped.tabs-color-royal .tab-item.activated {\n    margin-top: -2px;\n    color: #8a6de9;\n    border: 0 solid #8a6de9;\n    border-top-width: 2px; }\n    .tabs-striped.tabs-color-royal .tab-item.tab-item-active .badge, .tabs-striped.tabs-color-royal .tab-item.active .badge, .tabs-striped.tabs-color-royal .tab-item.activated .badge {\n      top: 2px;\n      opacity: 1; }\n.tabs-striped.tabs-color-dark .tab-item {\n  color: rgba(68, 68, 68, 0.4);\n  opacity: 1; }\n  .tabs-striped.tabs-color-dark .tab-item .badge {\n    opacity: 0.4; }\n  .tabs-striped.tabs-color-dark .tab-item.tab-item-active, .tabs-striped.tabs-color-dark .tab-item.active, .tabs-striped.tabs-color-dark .tab-item.activated {\n    margin-top: -2px;\n    color: #444;\n    border: 0 solid #444;\n    border-top-width: 2px; }\n    .tabs-striped.tabs-color-dark .tab-item.tab-item-active .badge, .tabs-striped.tabs-color-dark .tab-item.active .badge, .tabs-striped.tabs-color-dark .tab-item.activated .badge {\n      top: 2px;\n      opacity: 1; }\n\n.tabs-top.tabs-striped {\n  padding-bottom: 0; }\n  .tabs-top.tabs-striped .tab-item {\n    background: transparent;\n    -webkit-transition: all 0.1s ease;\n    -moz-transition: all 0.1s ease;\n    -ms-transition: all 0.1s ease;\n    -o-transition: all 0.1s ease;\n    transition: all 0.1s ease; }\n    .tabs-top.tabs-striped .tab-item.tab-item-active, .tabs-top.tabs-striped .tab-item.active, .tabs-top.tabs-striped .tab-item.activated {\n      margin-top: 0;\n      margin-bottom: -2px;\n      border-width: 0px 0px 2px 0px !important;\n      border-style: solid; }\n    .tabs-top.tabs-striped .tab-item .badge {\n      -webkit-transition: all 0.2s ease;\n      -moz-transition: all 0.2s ease;\n      -ms-transition: all 0.2s ease;\n      -o-transition: all 0.2s ease;\n      transition: all 0.2s ease; }\n\n/* Allow parent element to have tabs-top */\n/* If you change this, change platform.scss as well */\n.tabs-top > .tabs, .tabs.tabs-top {\n  top: 44px;\n  padding-top: 0;\n  background-position: bottom; }\n  .tabs-top > .tabs .tab-item.tab-item-active .badge, .tabs-top > .tabs .tab-item.active .badge, .tabs-top > .tabs .tab-item.activated .badge, .tabs.tabs-top .tab-item.tab-item-active .badge, .tabs.tabs-top .tab-item.active .badge, .tabs.tabs-top .tab-item.activated .badge {\n    top: 4%; }\n\n.tabs-top ~ .bar-header {\n  border-bottom-width: 0; }\n\n.tab-item {\n  -webkit-box-flex: 1;\n  -webkit-flex: 1;\n  -moz-box-flex: 1;\n  -moz-flex: 1;\n  -ms-flex: 1;\n  flex: 1;\n  display: block;\n  overflow: hidden;\n  max-width: 150px;\n  height: 100%;\n  color: inherit;\n  text-align: center;\n  text-decoration: none;\n  text-overflow: ellipsis;\n  white-space: nowrap;\n  font-weight: 400;\n  font-size: 14px;\n  font-family: \"Helvetica Neue-Light\", \"Helvetica Neue Light\", \"Helvetica Neue\", Helvetica, Arial, \"Lucida Grande\", sans-serif;\n  opacity: 0.7; }\n  .tab-item:hover {\n    cursor: pointer; }\n  .tab-item.tab-hidden {\n    display: none; }\n\n.tabs-item-hide > .tabs, .tabs.tabs-item-hide {\n  display: none; }\n\n.tabs-icon-top > .tabs .tab-item, .tabs-icon-top.tabs .tab-item, .tabs-icon-bottom > .tabs .tab-item, .tabs-icon-bottom.tabs .tab-item {\n  font-size: 12px;\n  line-height: 14px; }\n\n.tab-item .icon {\n  display: block;\n  margin: 0 auto;\n  height: 32px;\n  font-size: 32px; }\n\n.tabs-icon-left.tabs .tab-item, .tabs-icon-left > .tabs .tab-item, .tabs-icon-right.tabs .tab-item, .tabs-icon-right > .tabs .tab-item {\n  font-size: 12px; }\n  .tabs-icon-left.tabs .tab-item .icon, .tabs-icon-left > .tabs .tab-item .icon, .tabs-icon-right.tabs .tab-item .icon, .tabs-icon-right > .tabs .tab-item .icon {\n    display: inline-block;\n    vertical-align: top;\n    margin-top: -0.1em; }\n    .tabs-icon-left.tabs .tab-item .icon:before, .tabs-icon-left > .tabs .tab-item .icon:before, .tabs-icon-right.tabs .tab-item .icon:before, .tabs-icon-right > .tabs .tab-item .icon:before {\n      font-size: 24px;\n      line-height: 49px; }\n\n.tabs-icon-left > .tabs .tab-item .icon, .tabs-icon-left.tabs .tab-item .icon {\n  padding-right: 3px; }\n\n.tabs-icon-right > .tabs .tab-item .icon, .tabs-icon-right.tabs .tab-item .icon {\n  padding-left: 3px; }\n\n.tabs-icon-only > .tabs .icon, .tabs-icon-only.tabs .icon {\n  line-height: inherit; }\n\n.tab-item.has-badge {\n  position: relative; }\n\n.tab-item .badge {\n  position: absolute;\n  top: 4%;\n  right: 33%;\n  right: calc(50% - 26px);\n  padding: 1px 6px;\n  height: auto;\n  font-size: 12px;\n  line-height: 16px; }\n\n/* Navigational tab */\n/* Active state for tab */\n.tab-item.tab-item-active, .tab-item.active, .tab-item.activated {\n  opacity: 1; }\n  .tab-item.tab-item-active.tab-item-light, .tab-item.active.tab-item-light, .tab-item.activated.tab-item-light {\n    color: #fff; }\n  .tab-item.tab-item-active.tab-item-stable, .tab-item.active.tab-item-stable, .tab-item.activated.tab-item-stable {\n    color: #f8f8f8; }\n  .tab-item.tab-item-active.tab-item-positive, .tab-item.active.tab-item-positive, .tab-item.activated.tab-item-positive {\n    color: #4a87ee; }\n  .tab-item.tab-item-active.tab-item-calm, .tab-item.active.tab-item-calm, .tab-item.activated.tab-item-calm {\n    color: #43cee6; }\n  .tab-item.tab-item-active.tab-item-assertive, .tab-item.active.tab-item-assertive, .tab-item.activated.tab-item-assertive {\n    color: #ef4e3a; }\n  .tab-item.tab-item-active.tab-item-balanced, .tab-item.active.tab-item-balanced, .tab-item.activated.tab-item-balanced {\n    color: #66cc33; }\n  .tab-item.tab-item-active.tab-item-energized, .tab-item.active.tab-item-energized, .tab-item.activated.tab-item-energized {\n    color: #f0b840; }\n  .tab-item.tab-item-active.tab-item-royal, .tab-item.active.tab-item-royal, .tab-item.activated.tab-item-royal {\n    color: #8a6de9; }\n  .tab-item.tab-item-active.tab-item-dark, .tab-item.active.tab-item-dark, .tab-item.activated.tab-item-dark {\n    color: #444; }\n\n.item.tabs {\n  display: -webkit-box;\n  display: -webkit-flex;\n  display: -moz-box;\n  display: -moz-flex;\n  display: -ms-flexbox;\n  display: flex;\n  padding: 0; }\n  .item.tabs .icon:before {\n    position: relative; }\n\n.tab-item.disabled, .tab-item[disabled] {\n  opacity: 0.4;\n  cursor: default;\n  pointer-events: none; }\n\n/** Platform styles **/\n.tab-item.tab-item-android {\n  border-top: 2px solid inherit; }\n\n/**\n * Menus\n * --------------------------------------------------\n * Side panel structure\n */\n.menu {\n  position: absolute;\n  top: 0;\n  bottom: 0;\n  z-index: 0;\n  overflow: hidden;\n  min-height: 100%;\n  max-height: 100%;\n  width: 275px;\n  background-color: #fff; }\n  .menu .scroll-content {\n    z-index: 10; }\n  .menu .bar-header {\n    z-index: 11; }\n\n.menu-content {\n  -webkit-transform: none;\n  -moz-transform: none;\n  transform: none;\n  box-shadow: -1px 0px 2px rgba(0, 0, 0, 0.2), 1px 0px 2px rgba(0, 0, 0, 0.2); }\n\n.menu-open .menu-content .pane, .menu-open .menu-content .scroll-content {\n  pointer-events: none; }\n\n.grade-b .menu-content, .grade-c .menu-content {\n  -webkit-box-sizing: content-box;\n  -moz-box-sizing: content-box;\n  box-sizing: content-box;\n  right: -1px;\n  left: -1px;\n  border-right: 1px solid #ccc;\n  border-left: 1px solid #ccc;\n  box-shadow: none; }\n\n.menu-left {\n  left: 0; }\n\n.menu-right {\n  right: 0; }\n\n.menu-animated {\n  -webkit-transition: -webkit-transform 200ms ease;\n  -moz-transition: -moz-transform 200ms ease;\n  transition: transform 200ms ease; }\n\n/**\n * Modals\n * --------------------------------------------------\n * Modals are independent windows that slide in from off-screen.\n */\n.modal-backdrop {\n  -webkit-transition: background-color 300ms ease-in-out;\n  -moz-transition: background-color 300ms ease-in-out;\n  transition: background-color 300ms ease-in-out;\n  position: fixed;\n  top: 0;\n  left: 0;\n  z-index: 10;\n  width: 100%;\n  height: 100%;\n  background-color: rgba(0, 0, 0, 0); }\n  .modal-backdrop.active {\n    background-color: rgba(0, 0, 0, 0.5); }\n\n.modal {\n  display: block;\n  position: absolute;\n  top: 0;\n  z-index: 10;\n  overflow: hidden;\n  min-height: 100%;\n  width: 100%;\n  background-color: #fff; }\n\n@media (min-width: 680px) {\n  .modal {\n    top: 20%;\n    right: 20%;\n    bottom: 20%;\n    left: 20%;\n    overflow: visible;\n    min-height: 240px;\n    width: 60%; }\n  .modal.ng-leave-active {\n    bottom: 0; }\n  .platform-ios.platform-cordova .modal-wrapper .modal .bar-header:not(.bar-subheader) {\n    height: 44px; }\n    .platform-ios.platform-cordova .modal-wrapper .modal .bar-header:not(.bar-subheader) > * {\n      margin-top: 0; }\n  .platform-ios.platform-cordova .modal-wrapper .modal .tabs-top > .tabs, .platform-ios.platform-cordova .modal-wrapper .modal .tabs.tabs-top {\n    top: 44px; }\n  .platform-ios.platform-cordova .modal-wrapper .modal .has-header, .platform-ios.platform-cordova .modal-wrapper .modal .bar-subheader {\n    top: 44px; }\n  .platform-ios.platform-cordova .modal-wrapper .modal .has-subheader {\n    top: 88px; }\n  .platform-ios.platform-cordova .modal-wrapper .modal .has-tabs-top {\n    top: 93px; }\n  .platform-ios.platform-cordova .modal-wrapper .modal .has-header.has-subheader.has-tabs-top {\n    top: 137px; } }\n\n.modal-open {\n  pointer-events: none; }\n  .modal-open .modal, .modal-open .modal-backdrop {\n    pointer-events: auto; }\n  .modal-open.loading-active .modal, .modal-open.loading-active .modal-backdrop {\n    pointer-events: none; }\n\n/**\n * Popovers\n * --------------------------------------------------\n * Popovers are independent views which float over content\n */\n.popover-backdrop {\n  position: fixed;\n  top: 0;\n  left: 0;\n  z-index: 10;\n  width: 100%;\n  height: 100%;\n  background-color: rgba(0, 0, 0, 0); }\n  .popover-backdrop.active {\n    background-color: rgba(0, 0, 0, 0.1); }\n\n.popover {\n  position: absolute;\n  top: 25%;\n  left: 50%;\n  z-index: 10;\n  display: block;\n  margin-left: -110px;\n  margin-top: 12px;\n  height: 280px;\n  width: 220px;\n  background-color: #fff;\n  box-shadow: 0 1px 3px rgba(0, 0, 0, 0.4);\n  opacity: 0; }\n  .popover .item:first-child {\n    border-top: 0; }\n  .popover .item:last-child {\n    border-bottom: 0; }\n\n.popover, .popover .bar-header {\n  border-radius: 2px; }\n\n.popover .scroll-content {\n  z-index: 1;\n  margin: 2px 0; }\n\n.popover .bar-header {\n  border-bottom-right-radius: 0;\n  border-bottom-left-radius: 0; }\n\n.popover .has-header {\n  border-top-right-radius: 0;\n  border-top-left-radius: 0; }\n\n.popover-arrow {\n  display: none; }\n\n.platform-ios .popover {\n  box-shadow: 0 0 40px rgba(0, 0, 0, 0.08); }\n.platform-ios .popover, .platform-ios .popover .bar-header {\n  border-radius: 10px; }\n.platform-ios .popover .scroll-content {\n  margin: 8px 0;\n  border-radius: 10px; }\n.platform-ios .popover .scroll-content.has-header {\n  margin-top: 0; }\n.platform-ios .popover-arrow {\n  position: absolute;\n  top: -17px;\n  left: 43%;\n  display: block;\n  width: 30px;\n  height: 19px;\n  overflow: hidden; }\n  .platform-ios .popover-arrow:after {\n    position: absolute;\n    top: 12px;\n    left: 5px;\n    width: 20px;\n    height: 20px;\n    background-color: #fff;\n    border-radius: 3px;\n    content: '';\n    -webkit-transform: rotate(-45deg);\n    -moz-transform: rotate(-45deg);\n    transform: rotate(-45deg); }\n\n.platform-android .popover {\n  background-color: #fafafa;\n  box-shadow: 0 2px 6px rgba(0, 0, 0, 0.35);\n  margin-top: -32px; }\n  .platform-android .popover .item {\n    border-color: #fafafa;\n    background-color: #fafafa;\n    color: #4d4d4d; }\n.platform-android .popover-backdrop, .platform-android .popover-backdrop.active {\n  background-color: transparent; }\n\n.popover-open {\n  pointer-events: none; }\n  .popover-open .popover, .popover-open .popover-backdrop {\n    pointer-events: auto; }\n  .popover-open.loading-active .popover, .popover-open.loading-active .popover-backdrop {\n    pointer-events: none; }\n\n@media (min-width: 680px) {\n  .popover {\n    width: 360px; } }\n\n/**\n * Popups\n * --------------------------------------------------\n */\n.popup {\n  position: fixed;\n  top: 50%;\n  left: 50%;\n  z-index: 12;\n  visibility: hidden;\n  width: 250px;\n  max-width: 100%;\n  border-radius: 0px;\n  background-color: rgba(255, 255, 255, 0.9); }\n  .popup.popup-hidden {\n    -webkit-animation-name: scaleOut;\n    -moz-animation-name: scaleOut;\n    animation-name: scaleOut;\n    -webkit-animation-duration: 0.1s;\n    -moz-animation-duration: 0.1s;\n    animation-duration: 0.1s;\n    -webkit-animation-timing-function: ease-in-out;\n    -moz-animation-timing-function: ease-in-out;\n    animation-timing-function: ease-in-out;\n    -webkit-animation-fill-mode: both;\n    -moz-animation-fill-mode: both;\n    animation-fill-mode: both; }\n  .popup.popup-showing {\n    visibility: visible; }\n  .popup.active {\n    -webkit-animation-name: superScaleIn;\n    -moz-animation-name: superScaleIn;\n    animation-name: superScaleIn;\n    -webkit-animation-duration: 0.2s;\n    -moz-animation-duration: 0.2s;\n    animation-duration: 0.2s;\n    -webkit-animation-timing-function: ease-in-out;\n    -moz-animation-timing-function: ease-in-out;\n    animation-timing-function: ease-in-out;\n    -webkit-animation-fill-mode: both;\n    -moz-animation-fill-mode: both;\n    animation-fill-mode: both; }\n  .popup.popup-tall {\n    overflow: hidden; }\n    .popup.popup-tall .popup-body {\n      overflow: auto; }\n\n.popup-head {\n  padding: 15px 0px;\n  border-bottom: 1px solid #eee;\n  text-align: center; }\n\n.popup-title {\n  margin: 0;\n  padding: 0;\n  font-size: 15px; }\n\n.popup-sub-title {\n  margin: 5px 0 0 0;\n  padding: 0;\n  font-weight: normal;\n  font-size: 11px; }\n\n.popup-body {\n  padding: 10px; }\n\n.popup-buttons.row {\n  padding: 10px 10px; }\n.popup-buttons .button {\n  margin: 0px 5px;\n  min-height: 45px;\n  border-radius: 2px;\n  line-height: 20px; }\n  .popup-buttons .button:first-child {\n    margin-left: 0px; }\n  .popup-buttons .button:last-child {\n    margin-right: 0px; }\n\n.popup-open {\n  pointer-events: none; }\n  .popup-open.modal-open .modal {\n    pointer-events: none; }\n  .popup-open .popup-backdrop, .popup-open .popup {\n    pointer-events: auto; }\n\n/**\n * Loading\n * --------------------------------------------------\n */\n.loading-container {\n  position: absolute;\n  left: 0;\n  top: 0;\n  right: 0;\n  bottom: 0;\n  z-index: 13;\n  display: -webkit-box;\n  display: -webkit-flex;\n  display: -moz-box;\n  display: -moz-flex;\n  display: -ms-flexbox;\n  display: flex;\n  -webkit-box-pack: center;\n  -ms-flex-pack: center;\n  -webkit-justify-content: center;\n  -moz-justify-content: center;\n  justify-content: center;\n  -webkit-box-align: center;\n  -ms-flex-align: center;\n  -webkit-align-items: center;\n  -moz-align-items: center;\n  align-items: center;\n  -webkit-transition: 0.2s opacity linear;\n  -moz-transition: 0.2s opacity linear;\n  transition: 0.2s opacity linear;\n  visibility: hidden;\n  opacity: 0; }\n  .loading-container.visible {\n    visibility: visible; }\n  .loading-container.active {\n    opacity: 1; }\n  .loading-container .loading {\n    padding: 20px;\n    border-radius: 5px;\n    background-color: rgba(0, 0, 0, 0.7);\n    color: #fff;\n    text-align: center;\n    text-overflow: ellipsis;\n    font-size: 15px; }\n    .loading-container .loading h1, .loading-container .loading h2, .loading-container .loading h3, .loading-container .loading h4, .loading-container .loading h5, .loading-container .loading h6 {\n      color: #fff; }\n\n/**\n * Items\n * --------------------------------------------------\n */\n.item {\n  border-color: #ddd;\n  background-color: #fff;\n  color: #444;\n  position: relative;\n  z-index: 2;\n  display: block;\n  margin: -1px;\n  padding: 16px;\n  border-width: 1px;\n  border-style: solid;\n  font-size: 16px; }\n  .item h2 {\n    margin: 0 0 4px 0;\n    font-size: 16px; }\n  .item h3 {\n    margin: 0 0 4px 0;\n    font-size: 14px; }\n  .item h4 {\n    margin: 0 0 4px 0;\n    font-size: 12px; }\n  .item h5, .item h6 {\n    margin: 0 0 3px 0;\n    font-size: 10px; }\n  .item p {\n    color: #666;\n    font-size: 14px; }\n  .item h1:last-child, .item h2:last-child, .item h3:last-child, .item h4:last-child, .item h5:last-child, .item h6:last-child, .item p:last-child {\n    margin-bottom: 0; }\n  .item .badge {\n    display: -webkit-box;\n    display: -webkit-flex;\n    display: -moz-box;\n    display: -moz-flex;\n    display: -ms-flexbox;\n    display: flex;\n    position: absolute;\n    top: 16px;\n    right: 32px; }\n  .item.item-button-right .badge {\n    right: 67px; }\n  .item.item-divider .badge {\n    top: 8px; }\n  .item .badge + .badge {\n    margin-right: 5px; }\n  .item.item-light {\n    border-color: #ddd;\n    background-color: #fff;\n    color: #444; }\n  .item.item-stable {\n    border-color: #b2b2b2;\n    background-color: #f8f8f8;\n    color: #444; }\n  .item.item-positive {\n    border-color: #145fd7;\n    background-color: #4a87ee;\n    color: #fff; }\n  .item.item-calm {\n    border-color: #1aacc3;\n    background-color: #43cee6;\n    color: #fff; }\n  .item.item-assertive {\n    border-color: #cc2311;\n    background-color: #ef4e3a;\n    color: #fff; }\n  .item.item-balanced {\n    border-color: #498f24;\n    background-color: #66cc33;\n    color: #fff; }\n  .item.item-energized {\n    border-color: #d39211;\n    background-color: #f0b840;\n    color: #fff; }\n  .item.item-royal {\n    border-color: #552bdf;\n    background-color: #8a6de9;\n    color: #fff; }\n  .item.item-dark {\n    border-color: #111;\n    background-color: #444;\n    color: #fff; }\n  .item[ng-click]:hover {\n    cursor: pointer; }\n\n.item.active, .item.activated, .item-complex.active .item-content, .item-complex.activated .item-content, .item .item-content.active, .item .item-content.activated {\n  border-color: #ccc;\n  background-color: #D9D9D9; }\n  .item.active.item-light, .item.activated.item-light, .item-complex.active .item-content.item-light, .item-complex.activated .item-content.item-light, .item .item-content.active.item-light, .item .item-content.activated.item-light {\n    border-color: #ccc;\n    background-color: #fafafa; }\n  .item.active.item-stable, .item.activated.item-stable, .item-complex.active .item-content.item-stable, .item-complex.activated .item-content.item-stable, .item .item-content.active.item-stable, .item .item-content.activated.item-stable {\n    border-color: #a2a2a2;\n    background-color: #e5e5e5; }\n  .item.active.item-positive, .item.activated.item-positive, .item-complex.active .item-content.item-positive, .item-complex.activated .item-content.item-positive, .item .item-content.active.item-positive, .item .item-content.activated.item-positive {\n    border-color: #145fd7;\n    background-color: #145fd7; }\n  .item.active.item-calm, .item.activated.item-calm, .item-complex.active .item-content.item-calm, .item-complex.activated .item-content.item-calm, .item .item-content.active.item-calm, .item .item-content.activated.item-calm {\n    border-color: #1aacc3;\n    background-color: #1aacc3; }\n  .item.active.item-assertive, .item.activated.item-assertive, .item-complex.active .item-content.item-assertive, .item-complex.activated .item-content.item-assertive, .item .item-content.active.item-assertive, .item .item-content.activated.item-assertive {\n    border-color: #cc2311;\n    background-color: #cc2311; }\n  .item.active.item-balanced, .item.activated.item-balanced, .item-complex.active .item-content.item-balanced, .item-complex.activated .item-content.item-balanced, .item .item-content.active.item-balanced, .item .item-content.activated.item-balanced {\n    border-color: #498f24;\n    background-color: #498f24; }\n  .item.active.item-energized, .item.activated.item-energized, .item-complex.active .item-content.item-energized, .item-complex.activated .item-content.item-energized, .item .item-content.active.item-energized, .item .item-content.activated.item-energized {\n    border-color: #d39211;\n    background-color: #d39211; }\n  .item.active.item-royal, .item.activated.item-royal, .item-complex.active .item-content.item-royal, .item-complex.activated .item-content.item-royal, .item .item-content.active.item-royal, .item .item-content.activated.item-royal {\n    border-color: #552bdf;\n    background-color: #552bdf; }\n  .item.active.item-dark, .item.activated.item-dark, .item-complex.active .item-content.item-dark, .item-complex.activated .item-content.item-dark, .item .item-content.active.item-dark, .item .item-content.activated.item-dark {\n    border-color: #000;\n    background-color: #262626; }\n\n.item, .item h1, .item h2, .item h3, .item h4, .item h5, .item h6, .item p, .item-content, .item-content h1, .item-content h2, .item-content h3, .item-content h4, .item-content h5, .item-content h6, .item-content p {\n  overflow: hidden;\n  text-overflow: ellipsis;\n  white-space: nowrap; }\n\na.item {\n  color: inherit;\n  text-decoration: none; }\n  a.item:hover, a.item:focus {\n    text-decoration: none; }\n\n/**\n * Complex Items\n * --------------------------------------------------\n * Adding .item-complex allows the .item to be slidable and\n * have options underneath the button, but also requires an\n * additional .item-content element inside .item.\n * Basically .item-complex removes any default settings which\n * .item added, so that .item-content looks them as just .item.\n */\n.item-complex, a.item.item-complex, button.item.item-complex {\n  padding: 0; }\n\n.item-complex .item-content, .item-radio .item-content {\n  position: relative;\n  z-index: 2;\n  padding: 16px 49px 16px 16px;\n  border: none;\n  background-color: white; }\n\na.item-content {\n  display: block;\n  color: inherit;\n  text-decoration: none; }\n\n.item-text-wrap .item, .item-text-wrap .item-content, .item-text-wrap, .item-text-wrap h1, .item-text-wrap h2, .item-text-wrap h3, .item-text-wrap h4, .item-text-wrap h5, .item-text-wrap h6, .item-text-wrap p, .item-complex.item-text-wrap .item-content, .item-body h1, .item-body h2, .item-body h3, .item-body h4, .item-body h5, .item-body h6, .item-body p {\n  overflow: visible;\n  white-space: normal; }\n\n.item-complex.item-text-wrap, .item-complex.item-text-wrap h1, .item-complex.item-text-wrap h2, .item-complex.item-text-wrap h3, .item-complex.item-text-wrap h4, .item-complex.item-text-wrap h5, .item-complex.item-text-wrap h6, .item-complex.item-text-wrap p {\n  overflow: visible;\n  white-space: normal; }\n\n.item-complex.item-light > .item-content {\n  border-color: #ddd;\n  background-color: #fff;\n  color: #444; }\n  .item-complex.item-light > .item-content.active, .item-complex.item-light > .item-content:active {\n    border-color: #ccc;\n    background-color: #fafafa; }\n.item-complex.item-stable > .item-content {\n  border-color: #b2b2b2;\n  background-color: #f8f8f8;\n  color: #444; }\n  .item-complex.item-stable > .item-content.active, .item-complex.item-stable > .item-content:active {\n    border-color: #a2a2a2;\n    background-color: #e5e5e5; }\n.item-complex.item-positive > .item-content {\n  border-color: #145fd7;\n  background-color: #4a87ee;\n  color: #fff; }\n  .item-complex.item-positive > .item-content.active, .item-complex.item-positive > .item-content:active {\n    border-color: #145fd7;\n    background-color: #145fd7; }\n.item-complex.item-calm > .item-content {\n  border-color: #1aacc3;\n  background-color: #43cee6;\n  color: #fff; }\n  .item-complex.item-calm > .item-content.active, .item-complex.item-calm > .item-content:active {\n    border-color: #1aacc3;\n    background-color: #1aacc3; }\n.item-complex.item-assertive > .item-content {\n  border-color: #cc2311;\n  background-color: #ef4e3a;\n  color: #fff; }\n  .item-complex.item-assertive > .item-content.active, .item-complex.item-assertive > .item-content:active {\n    border-color: #cc2311;\n    background-color: #cc2311; }\n.item-complex.item-balanced > .item-content {\n  border-color: #498f24;\n  background-color: #66cc33;\n  color: #fff; }\n  .item-complex.item-balanced > .item-content.active, .item-complex.item-balanced > .item-content:active {\n    border-color: #498f24;\n    background-color: #498f24; }\n.item-complex.item-energized > .item-content {\n  border-color: #d39211;\n  background-color: #f0b840;\n  color: #fff; }\n  .item-complex.item-energized > .item-content.active, .item-complex.item-energized > .item-content:active {\n    border-color: #d39211;\n    background-color: #d39211; }\n.item-complex.item-royal > .item-content {\n  border-color: #552bdf;\n  background-color: #8a6de9;\n  color: #fff; }\n  .item-complex.item-royal > .item-content.active, .item-complex.item-royal > .item-content:active {\n    border-color: #552bdf;\n    background-color: #552bdf; }\n.item-complex.item-dark > .item-content {\n  border-color: #111;\n  background-color: #444;\n  color: #fff; }\n  .item-complex.item-dark > .item-content.active, .item-complex.item-dark > .item-content:active {\n    border-color: #000;\n    background-color: #262626; }\n\n/**\n * Item Icons\n * --------------------------------------------------\n */\n.item-icon-left .icon, .item-icon-right .icon {\n  display: -webkit-box;\n  display: -webkit-flex;\n  display: -moz-box;\n  display: -moz-flex;\n  display: -ms-flexbox;\n  display: flex;\n  -webkit-box-align: center;\n  -ms-flex-align: center;\n  -webkit-align-items: center;\n  -moz-align-items: center;\n  align-items: center;\n  position: absolute;\n  top: 0;\n  height: 100%;\n  font-size: 32px; }\n  .item-icon-left .icon:before, .item-icon-right .icon:before {\n    display: block;\n    width: 32px;\n    text-align: center; }\n\n.item .fill-icon {\n  min-width: 30px;\n  min-height: 30px;\n  font-size: 28px; }\n\n.item-icon-left {\n  padding-left: 54px; }\n  .item-icon-left .icon {\n    left: 11px; }\n\n.item-complex.item-icon-left {\n  padding-left: 0; }\n  .item-complex.item-icon-left .item-content {\n    padding-left: 54px; }\n\n.item-icon-right {\n  padding-right: 54px; }\n  .item-icon-right .icon {\n    right: 11px; }\n\n.item-complex.item-icon-right {\n  padding-right: 0; }\n  .item-complex.item-icon-right .item-content {\n    padding-right: 54px; }\n\n.item-icon-left.item-icon-right .icon:first-child {\n  right: auto; }\n\n.item-icon-left.item-icon-right .icon:last-child, .item-icon-left .item-delete .icon {\n  left: auto; }\n\n.item-icon-left .icon-accessory, .item-icon-right .icon-accessory {\n  color: #ccc;\n  font-size: 16px; }\n\n.item-icon-left .icon-accessory {\n  left: 3px; }\n\n.item-icon-right .icon-accessory {\n  right: 3px; }\n\n/**\n * Item Button\n * --------------------------------------------------\n * An item button is a child button inside an .item (not the entire .item)\n */\n.item-button-left {\n  padding-left: 72px; }\n\n.item-button-left > .button, .item-button-left .item-content > .button {\n  display: -webkit-box;\n  display: -webkit-flex;\n  display: -moz-box;\n  display: -moz-flex;\n  display: -ms-flexbox;\n  display: flex;\n  -webkit-box-align: center;\n  -ms-flex-align: center;\n  -webkit-align-items: center;\n  -moz-align-items: center;\n  align-items: center;\n  position: absolute;\n  top: 8px;\n  left: 11px;\n  min-width: 34px;\n  min-height: 34px;\n  font-size: 18px;\n  line-height: 32px; }\n  .item-button-left > .button .icon:before, .item-button-left .item-content > .button .icon:before {\n    position: relative;\n    left: auto;\n    width: auto;\n    line-height: 31px; }\n  .item-button-left > .button > .button, .item-button-left .item-content > .button > .button {\n    margin: 0px 2px;\n    min-height: 34px;\n    font-size: 18px;\n    line-height: 32px; }\n\n.item-button-right, a.item.item-button-right, button.item.item-button-right {\n  padding-right: 80px; }\n\n.item-button-right > .button, .item-button-right .item-content > .button, .item-button-right > .buttons, .item-button-right .item-content > .buttons {\n  display: -webkit-box;\n  display: -webkit-flex;\n  display: -moz-box;\n  display: -moz-flex;\n  display: -ms-flexbox;\n  display: flex;\n  -webkit-box-align: center;\n  -ms-flex-align: center;\n  -webkit-align-items: center;\n  -moz-align-items: center;\n  align-items: center;\n  position: absolute;\n  top: 8px;\n  right: 16px;\n  min-width: 34px;\n  min-height: 34px;\n  font-size: 18px;\n  line-height: 32px; }\n  .item-button-right > .button .icon:before, .item-button-right .item-content > .button .icon:before, .item-button-right > .buttons .icon:before, .item-button-right .item-content > .buttons .icon:before {\n    position: relative;\n    left: auto;\n    width: auto;\n    line-height: 31px; }\n  .item-button-right > .button > .button, .item-button-right .item-content > .button > .button, .item-button-right > .buttons > .button, .item-button-right .item-content > .buttons > .button {\n    margin: 0px 2px;\n    min-width: 34px;\n    min-height: 34px;\n    font-size: 18px;\n    line-height: 32px; }\n\n.item-avatar, .item-avatar .item-content, .item-avatar-left, .item-avatar-left .item-content {\n  padding-left: 72px;\n  min-height: 72px; }\n  .item-avatar > img:first-child, .item-avatar .item-image, .item-avatar .item-content > img:first-child, .item-avatar .item-content .item-image, .item-avatar-left > img:first-child, .item-avatar-left .item-image, .item-avatar-left .item-content > img:first-child, .item-avatar-left .item-content .item-image {\n    position: absolute;\n    top: 16px;\n    left: 16px;\n    max-width: 40px;\n    max-height: 40px;\n    width: 100%;\n    border-radius: 4px; }\n\n.item-avatar-right, .item-avatar-right .item-content {\n  padding-right: 72px;\n  min-height: 72px; }\n  .item-avatar-right > img:first-child, .item-avatar-right .item-image, .item-avatar-right .item-content > img:first-child, .item-avatar-right .item-content .item-image {\n    position: absolute;\n    top: 16px;\n    right: 16px;\n    max-width: 40px;\n    max-height: 40px;\n    width: 100%;\n    border-radius: 4px; }\n\n.item-thumbnail-left, .item-thumbnail-left .item-content {\n  padding-left: 106px;\n  min-height: 100px; }\n  .item-thumbnail-left > img:first-child, .item-thumbnail-left .item-image, .item-thumbnail-left .item-content > img:first-child, .item-thumbnail-left .item-content .item-image {\n    position: absolute;\n    top: 10px;\n    left: 10px;\n    max-width: 80px;\n    max-height: 80px;\n    width: 100%; }\n\n.item-avatar.item-complex, .item-avatar-left.item-complex, .item-thumbnail-left.item-complex {\n  padding-left: 0; }\n\n.item-thumbnail-right, .item-thumbnail-right .item-content {\n  padding-right: 106px;\n  min-height: 100px; }\n  .item-thumbnail-right > img:first-child, .item-thumbnail-right .item-image, .item-thumbnail-right .item-content > img:first-child, .item-thumbnail-right .item-content .item-image {\n    position: absolute;\n    top: 10px;\n    right: 10px;\n    max-width: 80px;\n    max-height: 80px;\n    width: 100%; }\n\n.item-avatar-right.item-complex, .item-thumbnail-right.item-complex {\n  padding-right: 0; }\n\n.item-image {\n  padding: 0;\n  text-align: center; }\n  .item-image img:first-child, .item-image .list-img {\n    width: 100%;\n    vertical-align: middle; }\n\n.item-body {\n  overflow: auto;\n  padding: 16px;\n  text-overflow: inherit;\n  white-space: normal; }\n  .item-body h1, .item-body h2, .item-body h3, .item-body h4, .item-body h5, .item-body h6, .item-body p {\n    margin-top: 16px;\n    margin-bottom: 16px; }\n\n.item-divider {\n  padding-top: 8px;\n  padding-bottom: 8px;\n  min-height: 30px;\n  background-color: #f5f5f5;\n  color: #222;\n  font-weight: bold; }\n\n.item-note {\n  float: right;\n  color: #aaa;\n  font-size: 14px; }\n\n.item-left-editable .item-content, .item-right-editable .item-content {\n  -webkit-transition-duration: 250ms;\n  -moz-transition-duration: 250ms;\n  transition-duration: 250ms;\n  -webkit-transition-timing-function: ease-in-out;\n  -moz-transition-timing-function: ease-in-out;\n  transition-timing-function: ease-in-out;\n  -webkit-transition-property: -webkit-transform;\n  -moz-transition-property: -moz-transform;\n  transition-property: transform; }\n\n.list-left-editing .item-left-editable .item-content, .item-left-editing.item-left-editable .item-content {\n  -webkit-transform: translate3d(50px, 0, 0);\n  -moz-transform: translate3d(50px, 0, 0);\n  transform: translate3d(50px, 0, 0); }\n\n.list-right-editing .item-right-editable .item-content, .item-right-editing.item-right-editable .item-content {\n  -webkit-transform: translate3d(-50px, 0, 0);\n  -moz-transform: translate3d(-50px, 0, 0);\n  transform: translate3d(-50px, 0, 0); }\n\n.item-left-edit {\n  -webkit-transition: all ease-in-out 125ms;\n  -moz-transition: all ease-in-out 125ms;\n  transition: all ease-in-out 125ms;\n  position: absolute;\n  top: 0;\n  left: 0;\n  z-index: 0;\n  width: 50px;\n  height: 100%;\n  line-height: 100%;\n  display: none;\n  opacity: 0;\n  -webkit-transform: translate3d(-21px, 0, 0);\n  -moz-transform: translate3d(-21px, 0, 0);\n  transform: translate3d(-21px, 0, 0); }\n  .item-left-edit .button {\n    height: 100%; }\n    .item-left-edit .button.icon {\n      display: -webkit-box;\n      display: -webkit-flex;\n      display: -moz-box;\n      display: -moz-flex;\n      display: -ms-flexbox;\n      display: flex;\n      -webkit-box-align: center;\n      -ms-flex-align: center;\n      -webkit-align-items: center;\n      -moz-align-items: center;\n      align-items: center;\n      position: absolute;\n      top: 0;\n      height: 100%; }\n  .item-left-edit.visible {\n    display: block; }\n    .item-left-edit.visible.active {\n      opacity: 1;\n      -webkit-transform: translate3d(8px, 0, 0);\n      -moz-transform: translate3d(8px, 0, 0);\n      transform: translate3d(8px, 0, 0); }\n\n.list-left-editing .item-left-edit {\n  -webkit-transition-delay: 125ms;\n  -moz-transition-delay: 125ms;\n  transition-delay: 125ms; }\n\n.item-delete .button.icon {\n  color: #ef4e3a;\n  font-size: 24px; }\n  .item-delete .button.icon:hover {\n    opacity: 0.7; }\n\n.item-right-edit {\n  -webkit-transition: all ease-in-out 125ms;\n  -moz-transition: all ease-in-out 125ms;\n  transition: all ease-in-out 125ms;\n  position: absolute;\n  top: 0;\n  right: 0;\n  z-index: 0;\n  width: 75px;\n  height: 100%;\n  background: inherit;\n  padding-left: 20px;\n  display: none;\n  opacity: 0;\n  -webkit-transform: translate3d(25px, 0, 0);\n  -moz-transform: translate3d(25px, 0, 0);\n  transform: translate3d(25px, 0, 0); }\n  .item-right-edit .button {\n    min-width: 50px;\n    height: 100%; }\n    .item-right-edit .button.icon {\n      display: -webkit-box;\n      display: -webkit-flex;\n      display: -moz-box;\n      display: -moz-flex;\n      display: -ms-flexbox;\n      display: flex;\n      -webkit-box-align: center;\n      -ms-flex-align: center;\n      -webkit-align-items: center;\n      -moz-align-items: center;\n      align-items: center;\n      position: absolute;\n      top: 0;\n      height: 100%;\n      font-size: 32px; }\n  .item-right-edit.visible {\n    display: block;\n    z-index: 3; }\n    .item-right-edit.visible.active {\n      opacity: 1;\n      -webkit-transform: translate3d(0, 0, 0);\n      -moz-transform: translate3d(0, 0, 0);\n      transform: translate3d(0, 0, 0); }\n\n.list-right-editing .item-right-edit {\n  -webkit-transition-delay: 125ms;\n  -moz-transition-delay: 125ms;\n  transition-delay: 125ms; }\n\n.item-reorder .button.icon {\n  color: #444;\n  font-size: 32px; }\n\n.item-reordering {\n  position: absolute;\n  left: 0;\n  top: 0;\n  z-index: 9;\n  width: 100%;\n  box-shadow: 0px 0px 10px 0px #aaa; }\n  .item-reordering .item-reorder {\n    z-index: 1; }\n\n.item-placeholder {\n  opacity: 0.7; }\n\n/**\n * The hidden right-side buttons that can be exposed under a list item\n * with dragging.\n */\n.item-options {\n  position: absolute;\n  top: 0;\n  right: 0;\n  z-index: 1;\n  height: 100%; }\n  .item-options .button {\n    height: 100%;\n    border: none;\n    border-radius: 0; }\n\n/**\n * Lists\n * --------------------------------------------------\n */\n.list {\n  position: relative;\n  padding-top: 1px;\n  padding-bottom: 1px;\n  padding-left: 0;\n  margin-bottom: 20px; }\n\n.list:last-child {\n  margin-bottom: 0px; }\n  .list:last-child.card {\n    margin-bottom: 40px; }\n\n/**\n * List Header\n * --------------------------------------------------\n */\n.list-header {\n  margin-top: 20px;\n  padding: 5px 15px;\n  background-color: transparent;\n  color: #222;\n  font-weight: bold; }\n\n.card.list .list-item {\n  padding-right: 1px;\n  padding-left: 1px; }\n\n/**\n * Cards and Inset Lists\n * --------------------------------------------------\n * A card and list-inset are close to the same thing, except a card as a box shadow.\n */\n.card, .list-inset {\n  overflow: hidden;\n  margin: 20px 10px;\n  border-radius: 2px;\n  background-color: #fff; }\n\n.card {\n  padding-top: 1px;\n  padding-bottom: 1px;\n  box-shadow: 0 1px 4px rgba(0, 0, 0, 0.25); }\n\n.padding .card, .padding .list-inset {\n  margin-left: 0;\n  margin-right: 0; }\n\n.card .item:first-child, .list-inset .item:first-child, .padding > .list .item:first-child {\n  border-top-left-radius: 2px;\n  border-top-right-radius: 2px; }\n  .card .item:first-child .item-content, .list-inset .item:first-child .item-content, .padding > .list .item:first-child .item-content {\n    border-top-left-radius: 2px;\n    border-top-right-radius: 2px; }\n.card .item:last-child, .list-inset .item:last-child, .padding > .list .item:last-child {\n  border-bottom-right-radius: 2px;\n  border-bottom-left-radius: 2px; }\n  .card .item:last-child .item-content, .list-inset .item:last-child .item-content, .padding > .list .item:last-child .item-content {\n    border-bottom-right-radius: 2px;\n    border-bottom-left-radius: 2px; }\n\n.card .item:last-child, .list-inset .item:last-child {\n  margin-bottom: -1px; }\n\n.card .item, .list-inset .item, .padding > .list .item, .padding-horizontal > .list .item {\n  margin-right: 0;\n  margin-left: 0; }\n  .card .item.item-input input, .list-inset .item.item-input input, .padding > .list .item.item-input input, .padding-horizontal > .list .item.item-input input {\n    padding-right: 44px; }\n\n.padding-left > .list .item {\n  margin-left: 0; }\n\n.padding-right > .list .item {\n  margin-right: 0; }\n\n/**\n * Badges\n * --------------------------------------------------\n */\n.badge {\n  background-color: transparent;\n  color: #AAAAAA;\n  z-index: 1;\n  display: inline-block;\n  padding: 3px 8px;\n  min-width: 10px;\n  border-radius: 10px;\n  vertical-align: baseline;\n  text-align: center;\n  white-space: nowrap;\n  font-weight: bold;\n  font-size: 14px;\n  line-height: 16px; }\n  .badge:empty {\n    display: none; }\n\n.tabs .tab-item .badge.badge-light, .badge.badge-light {\n  background-color: #fff;\n  color: #444; }\n.tabs .tab-item .badge.badge-stable, .badge.badge-stable {\n  background-color: #f8f8f8;\n  color: #444; }\n.tabs .tab-item .badge.badge-positive, .badge.badge-positive {\n  background-color: #4a87ee;\n  color: #fff; }\n.tabs .tab-item .badge.badge-calm, .badge.badge-calm {\n  background-color: #43cee6;\n  color: #fff; }\n.tabs .tab-item .badge.badge-assertive, .badge.badge-assertive {\n  background-color: #ef4e3a;\n  color: #fff; }\n.tabs .tab-item .badge.badge-balanced, .badge.badge-balanced {\n  background-color: #66cc33;\n  color: #fff; }\n.tabs .tab-item .badge.badge-energized, .badge.badge-energized {\n  background-color: #f0b840;\n  color: #fff; }\n.tabs .tab-item .badge.badge-royal, .badge.badge-royal {\n  background-color: #8a6de9;\n  color: #fff; }\n.tabs .tab-item .badge.badge-dark, .badge.badge-dark {\n  background-color: #444;\n  color: #fff; }\n\n.button .badge {\n  position: relative;\n  top: -1px; }\n\n/**\n * Slide Box\n * --------------------------------------------------\n */\n.slider {\n  position: relative;\n  visibility: hidden;\n  overflow: hidden; }\n\n.slider-slides {\n  position: relative;\n  height: 100%; }\n\n.slider-slide {\n  position: relative;\n  display: block;\n  float: left;\n  width: 100%;\n  height: 100%;\n  vertical-align: top; }\n\n.slider-slide-image > img {\n  width: 100%; }\n\n.slider-pager {\n  position: absolute;\n  bottom: 20px;\n  z-index: 1;\n  width: 100%;\n  height: 15px;\n  text-align: center; }\n  .slider-pager .slider-pager-page {\n    display: inline-block;\n    margin: 0px 3px;\n    width: 15px;\n    color: #000;\n    text-decoration: none;\n    opacity: 0.3; }\n    .slider-pager .slider-pager-page.active {\n      -webkit-transition: opacity 0.4s ease-in;\n      -moz-transition: opacity 0.4s ease-in;\n      transition: opacity 0.4s ease-in;\n      opacity: 1; }\n\n/**\n * Split Pane\n * --------------------------------------------------\n */\n.split-pane {\n  display: -webkit-box;\n  display: -webkit-flex;\n  display: -moz-box;\n  display: -moz-flex;\n  display: -ms-flexbox;\n  display: flex;\n  -webkit-box-align: stretch;\n  -ms-flex-align: stretch;\n  -webkit-align-items: stretch;\n  -moz-align-items: stretch;\n  align-items: stretch;\n  width: 100%;\n  height: 100%; }\n\n.split-pane-menu {\n  -webkit-box-flex: 0;\n  -webkit-flex: 0 0 320px;\n  -moz-box-flex: 0;\n  -moz-flex: 0 0 320px;\n  -ms-flex: 0 0 320px;\n  flex: 0 0 320px;\n  overflow-y: auto;\n  width: 320px;\n  height: 100%;\n  border-right: 1px solid #eee; }\n  @media all and (max-width: 568px) {\n    .split-pane-menu {\n      border-right: none; } }\n\n.split-pane-content {\n  -webkit-box-flex: 1;\n  -webkit-flex: 1 0 auto;\n  -moz-box-flex: 1;\n  -moz-flex: 1 0 auto;\n  -ms-flex: 1 0 auto;\n  flex: 1 0 auto; }\n\n/**\n * Forms\n * --------------------------------------------------\n */\nform {\n  margin: 0 0 1.42857; }\n\nlegend {\n  display: block;\n  margin-bottom: 1.42857;\n  padding: 0;\n  width: 100%;\n  border: 1px solid #ddd;\n  color: #444;\n  font-size: 21px;\n  line-height: 2.85714; }\n  legend small {\n    color: #f8f8f8;\n    font-size: 1.07143; }\n\nlabel, input, button, select, textarea {\n  font-weight: normal;\n  font-size: 14px;\n  line-height: 1.42857; }\n\ninput, button, select, textarea {\n  font-family: \"Helvetica Neue\", Helvetica, Arial, \"Lucida Grande\", sans-serif; }\n\n.item-input {\n  display: -webkit-box;\n  display: -webkit-flex;\n  display: -moz-box;\n  display: -moz-flex;\n  display: -ms-flexbox;\n  display: flex;\n  -webkit-box-align: center;\n  -ms-flex-align: center;\n  -webkit-align-items: center;\n  -moz-align-items: center;\n  align-items: center;\n  position: relative;\n  overflow: hidden;\n  padding: 6px 0 5px 16px; }\n  .item-input input {\n    -webkit-border-radius: 0;\n    -moz-border-radius: 0;\n    border-radius: 0;\n    -webkit-box-flex: 1;\n    -webkit-flex: 1 0 220px;\n    -moz-box-flex: 1;\n    -moz-flex: 1 0 220px;\n    -ms-flex: 1 0 220px;\n    flex: 1 0 220px;\n    -webkit-appearance: none;\n    -moz-appearance: none;\n    appearance: none;\n    margin: 0;\n    padding-right: 24px;\n    background-color: transparent; }\n  .item-input .button .icon {\n    -webkit-box-flex: 0;\n    -webkit-flex: 0 0 24px;\n    -moz-box-flex: 0;\n    -moz-flex: 0 0 24px;\n    -ms-flex: 0 0 24px;\n    flex: 0 0 24px;\n    position: static;\n    display: inline-block;\n    height: auto;\n    text-align: center;\n    font-size: 16px; }\n  .item-input .button-bar {\n    -webkit-border-radius: 0;\n    -moz-border-radius: 0;\n    border-radius: 0;\n    -webkit-box-flex: 1;\n    -webkit-flex: 1 0 220px;\n    -moz-box-flex: 1;\n    -moz-flex: 1 0 220px;\n    -ms-flex: 1 0 220px;\n    flex: 1 0 220px;\n    -webkit-appearance: none;\n    -moz-appearance: none;\n    appearance: none; }\n  .item-input .icon {\n    min-width: 14px; }\n\n.item-input-inset {\n  display: -webkit-box;\n  display: -webkit-flex;\n  display: -moz-box;\n  display: -moz-flex;\n  display: -ms-flexbox;\n  display: flex;\n  -webkit-box-align: center;\n  -ms-flex-align: center;\n  -webkit-align-items: center;\n  -moz-align-items: center;\n  align-items: center;\n  position: relative;\n  overflow: hidden;\n  padding: 10.66667px; }\n\n.item-input-wrapper {\n  display: -webkit-box;\n  display: -webkit-flex;\n  display: -moz-box;\n  display: -moz-flex;\n  display: -ms-flexbox;\n  display: flex;\n  -webkit-box-flex: 1;\n  -webkit-flex: 1 0;\n  -moz-box-flex: 1;\n  -moz-flex: 1 0;\n  -ms-flex: 1 0;\n  flex: 1 0;\n  -webkit-box-align: center;\n  -ms-flex-align: center;\n  -webkit-align-items: center;\n  -moz-align-items: center;\n  align-items: center;\n  -webkit-border-radius: 4px;\n  -moz-border-radius: 4px;\n  border-radius: 4px;\n  padding-right: 8px;\n  padding-left: 8px;\n  background: #eee; }\n\n.item-input-inset .item-input-wrapper input {\n  padding-left: 4px;\n  height: 29px;\n  background: transparent;\n  line-height: 18px; }\n\n.item-input-wrapper ~ .button {\n  margin-left: 10.66667px; }\n\n.input-label {\n  -webkit-box-flex: 1;\n  -webkit-flex: 1 0 100px;\n  -moz-box-flex: 1;\n  -moz-flex: 1 0 100px;\n  -ms-flex: 1 0 100px;\n  flex: 1 0 100px;\n  display: table;\n  padding: 7px 10px 7px 0px;\n  max-width: 200px;\n  width: 35%;\n  color: #444;\n  font-size: 16px; }\n\n.placeholder-icon {\n  color: #aaa; }\n  .placeholder-icon:first-child {\n    padding-right: 6px; }\n  .placeholder-icon:last-child {\n    padding-left: 6px; }\n\n.item-stacked-label {\n  display: block;\n  background-color: transparent;\n  box-shadow: none; }\n  .item-stacked-label .input-label, .item-stacked-label .icon {\n    display: inline-block;\n    padding: 4px 0 0 0px;\n    vertical-align: middle; }\n\n.item-stacked-label input, .item-stacked-label textarea {\n  -webkit-border-radius: 2px;\n  -moz-border-radius: 2px;\n  border-radius: 2px;\n  padding: 4px 8px 3px 0;\n  border: none;\n  background-color: #fff; }\n\n.item-stacked-label input {\n  overflow: hidden;\n  height: 46px; }\n\n.item-floating-label {\n  display: block;\n  background-color: transparent;\n  box-shadow: none; }\n  .item-floating-label .input-label {\n    position: relative;\n    padding: 5px 0 0 0;\n    opacity: 0;\n    top: 10px;\n    -webkit-transition: opacity 0.15s ease-in, top 0.2s linear;\n    -moz-transition: opacity 0.15s ease-in, top 0.2s linear;\n    transition: opacity 0.15s ease-in, top 0.2s linear; }\n    .item-floating-label .input-label.has-input {\n      opacity: 1;\n      top: 0;\n      -webkit-transition: opacity 0.15s ease-in, top 0.2s linear;\n      -moz-transition: opacity 0.15s ease-in, top 0.2s linear;\n      transition: opacity 0.15s ease-in, top 0.2s linear; }\n\ntextarea, input[type=\"text\"], input[type=\"password\"], input[type=\"datetime\"], input[type=\"datetime-local\"], input[type=\"date\"], input[type=\"month\"], input[type=\"time\"], input[type=\"week\"], input[type=\"number\"], input[type=\"email\"], input[type=\"url\"], input[type=\"search\"], input[type=\"tel\"], input[type=\"color\"] {\n  display: block;\n  padding-top: 2px;\n  padding-left: 0;\n  height: 34px;\n  color: #111;\n  vertical-align: middle;\n  font-size: 14px;\n  line-height: 16px; }\n\n.platform-ios input[type=\"datetime-local\"], .platform-ios input[type=\"date\"], .platform-ios input[type=\"month\"], .platform-ios input[type=\"time\"], .platform-ios input[type=\"week\"], .platform-android input[type=\"datetime-local\"], .platform-android input[type=\"date\"], .platform-android input[type=\"month\"], .platform-android input[type=\"time\"], .platform-android input[type=\"week\"] {\n  padding-top: 8px; }\n\ninput, textarea {\n  width: 100%; }\n\ntextarea {\n  padding-left: 0; }\n  textarea::-moz-placeholder {\n    /* Firefox 19+ */\n    color: #aaaaaa; }\n  textarea:-ms-input-placeholder {\n    color: #aaaaaa; }\n  textarea::-webkit-input-placeholder {\n    color: #aaaaaa;\n    text-indent: -3px; }\n\ntextarea {\n  height: auto; }\n\ntextarea, input[type=\"text\"], input[type=\"password\"], input[type=\"datetime\"], input[type=\"datetime-local\"], input[type=\"date\"], input[type=\"month\"], input[type=\"time\"], input[type=\"week\"], input[type=\"number\"], input[type=\"email\"], input[type=\"url\"], input[type=\"search\"], input[type=\"tel\"], input[type=\"color\"] {\n  border: 0; }\n\ninput[type=\"radio\"], input[type=\"checkbox\"] {\n  margin: 0;\n  line-height: normal; }\n\ninput[type=\"file\"], input[type=\"image\"], input[type=\"submit\"], input[type=\"reset\"], input[type=\"button\"], input[type=\"radio\"], input[type=\"checkbox\"] {\n  width: auto; }\n\ninput[type=\"file\"] {\n  line-height: 34px; }\n\n.previous-input-focus, .cloned-text-input + input, .cloned-text-input + textarea {\n  position: absolute !important;\n  left: -9999px;\n  width: 200px; }\n\ninput::-moz-placeholder, textarea::-moz-placeholder {\n  /* Firefox 19+ */\n  color: #aaaaaa; }\ninput:-ms-input-placeholder, textarea:-ms-input-placeholder {\n  color: #aaaaaa; }\ninput::-webkit-input-placeholder, textarea::-webkit-input-placeholder {\n  color: #aaaaaa;\n  text-indent: 0; }\n\ninput[disabled], select[disabled], textarea[disabled], input[readonly]:not(.cloned-text-input), textarea[readonly]:not(.cloned-text-input), select[readonly] {\n  background-color: #f8f8f8;\n  cursor: not-allowed; }\n\ninput[type=\"radio\"][disabled], input[type=\"checkbox\"][disabled], input[type=\"radio\"][readonly], input[type=\"checkbox\"][readonly] {\n  background-color: transparent; }\n\n/**\n * Checkbox\n * --------------------------------------------------\n */\n.checkbox {\n  position: relative;\n  display: inline-block;\n  padding: 7px 7px;\n  cursor: pointer; }\n  .checkbox input:before, .checkbox .checkbox-icon:before {\n    border-color: #4a87ee; }\n  .checkbox input:checked:before, .checkbox input:checked + .checkbox-icon:before {\n    background: #4a87ee; }\n\n.checkbox-light input:before, .checkbox-light .checkbox-icon:before {\n  border-color: #ddd; }\n.checkbox-light input:checked:before, .checkbox-light input:checked + .checkbox-icon:before {\n  background: #ddd; }\n\n.checkbox-stable input:before, .checkbox-stable .checkbox-icon:before {\n  border-color: #b2b2b2; }\n.checkbox-stable input:checked:before, .checkbox-stable input:checked + .checkbox-icon:before {\n  background: #b2b2b2; }\n\n.checkbox-positive input:before, .checkbox-positive .checkbox-icon:before {\n  border-color: #4a87ee; }\n.checkbox-positive input:checked:before, .checkbox-positive input:checked + .checkbox-icon:before {\n  background: #4a87ee; }\n\n.checkbox-calm input:before, .checkbox-calm .checkbox-icon:before {\n  border-color: #43cee6; }\n.checkbox-calm input:checked:before, .checkbox-calm input:checked + .checkbox-icon:before {\n  background: #43cee6; }\n\n.checkbox-assertive input:before, .checkbox-assertive .checkbox-icon:before {\n  border-color: #ef4e3a; }\n.checkbox-assertive input:checked:before, .checkbox-assertive input:checked + .checkbox-icon:before {\n  background: #ef4e3a; }\n\n.checkbox-balanced input:before, .checkbox-balanced .checkbox-icon:before {\n  border-color: #66cc33; }\n.checkbox-balanced input:checked:before, .checkbox-balanced input:checked + .checkbox-icon:before {\n  background: #66cc33; }\n\n.checkbox-energized input:before, .checkbox-energized .checkbox-icon:before {\n  border-color: #f0b840; }\n.checkbox-energized input:checked:before, .checkbox-energized input:checked + .checkbox-icon:before {\n  background: #f0b840; }\n\n.checkbox-royal input:before, .checkbox-royal .checkbox-icon:before {\n  border-color: #8a6de9; }\n.checkbox-royal input:checked:before, .checkbox-royal input:checked + .checkbox-icon:before {\n  background: #8a6de9; }\n\n.checkbox-dark input:before, .checkbox-dark .checkbox-icon:before {\n  border-color: #444; }\n.checkbox-dark input:checked:before, .checkbox-dark input:checked + .checkbox-icon:before {\n  background: #444; }\n\n.checkbox input:disabled:before, .checkbox input:disabled + .checkbox-icon:before {\n  border-color: #ddd; }\n\n.checkbox input:disabled:checked:before, .checkbox input:disabled:checked + .checkbox-icon:before {\n  background: #ddd; }\n\n.checkbox.checkbox-input-hidden input {\n  display: none !important; }\n\n.checkbox input, .checkbox-icon {\n  position: relative;\n  width: 28px;\n  height: 28px;\n  display: block;\n  border: 0;\n  background: transparent;\n  cursor: pointer;\n  -webkit-appearance: none; }\n  .checkbox input:before, .checkbox-icon:before {\n    display: table;\n    width: 100%;\n    height: 100%;\n    border-width: 1px;\n    border-style: solid;\n    border-radius: 28px;\n    background: #fff;\n    content: ' ';\n    transition: background-color 20ms ease-in-out; }\n\n.checkbox input:checked:before, input:checked + .checkbox-icon:before {\n  border-width: 2px; }\n\n.checkbox input:after, .checkbox-icon:after {\n  -webkit-transition: opacity 0.05s ease-in-out;\n  -moz-transition: opacity 0.05s ease-in-out;\n  transition: opacity 0.05s ease-in-out;\n  -webkit-transform: rotate(-45deg);\n  -moz-transform: rotate(-45deg);\n  transform: rotate(-45deg);\n  position: absolute;\n  top: 30%;\n  left: 26%;\n  display: table;\n  width: 15px;\n  height: 10.33333px;\n  border: 3px solid #fff;\n  border-top: 0;\n  border-right: 0;\n  content: ' ';\n  opacity: 0; }\n\n.grade-c .checkbox input:after, .grade-c .checkbox-icon:after {\n  -webkit-transform: rotate(0);\n  -moz-transform: rotate(0);\n  transform: rotate(0);\n  top: 3px;\n  left: 4px;\n  border: none;\n  color: #fff;\n  content: '\\2713';\n  font-weight: bold;\n  font-size: 20px; }\n\n.checkbox input:checked:after, input:checked + .checkbox-icon:after {\n  opacity: 1; }\n\n.item-checkbox {\n  padding-left: 60px; }\n  .item-checkbox.active {\n    box-shadow: none; }\n\n.item-checkbox .checkbox {\n  position: absolute;\n  top: 50%;\n  right: 8px;\n  left: 8px;\n  z-index: 3;\n  margin-top: -21px; }\n\n.item-checkbox.item-checkbox-right {\n  padding-right: 60px;\n  padding-left: 16px; }\n\n.item-checkbox-right .checkbox input, .item-checkbox-right .checkbox-icon {\n  float: right; }\n\n/**\n * Toggle\n * --------------------------------------------------\n */\n.item-toggle {\n  pointer-events: none; }\n\n.toggle {\n  position: relative;\n  display: inline-block;\n  pointer-events: auto;\n  margin: -5px;\n  padding: 5px; }\n  .toggle input:checked + .track {\n    border-color: #4a87ee;\n    background-color: #4a87ee; }\n  .toggle.dragging .handle {\n    background-color: #f2f2f2 !important; }\n  .toggle.toggle-light input:checked + .track {\n    border-color: #ddd;\n    background-color: #ddd; }\n  .toggle.toggle-stable input:checked + .track {\n    border-color: #b2b2b2;\n    background-color: #b2b2b2; }\n  .toggle.toggle-positive input:checked + .track {\n    border-color: #4a87ee;\n    background-color: #4a87ee; }\n  .toggle.toggle-calm input:checked + .track {\n    border-color: #43cee6;\n    background-color: #43cee6; }\n  .toggle.toggle-assertive input:checked + .track {\n    border-color: #ef4e3a;\n    background-color: #ef4e3a; }\n  .toggle.toggle-balanced input:checked + .track {\n    border-color: #66cc33;\n    background-color: #66cc33; }\n  .toggle.toggle-energized input:checked + .track {\n    border-color: #f0b840;\n    background-color: #f0b840; }\n  .toggle.toggle-royal input:checked + .track {\n    border-color: #8a6de9;\n    background-color: #8a6de9; }\n  .toggle.toggle-dark input:checked + .track {\n    border-color: #444;\n    background-color: #444; }\n\n.toggle input {\n  display: none; }\n\n/* the track appearance when the toggle is \"off\" */\n.toggle .track {\n  -webkit-transition-timing-function: ease-in-out;\n  -moz-transition-timing-function: ease-in-out;\n  transition-timing-function: ease-in-out;\n  -webkit-transition-duration: 0.2s;\n  -moz-transition-duration: 0.2s;\n  transition-duration: 0.2s;\n  -webkit-transition-property: background-color, border;\n  -moz-transition-property: background-color, border;\n  transition-property: background-color, border;\n  display: inline-block;\n  box-sizing: border-box;\n  width: 54px;\n  height: 32px;\n  border: solid 2px #E5E5E5;\n  border-radius: 20px;\n  background-color: #E5E5E5;\n  content: ' ';\n  cursor: pointer;\n  pointer-events: none; }\n\n/* Fix to avoid background color bleeding */\n/* (occured on (at least) Android 4.2, Asus MeMO Pad HD7 ME173X) */\n.platform-android4_2 .toggle .track {\n  -webkit-background-clip: padding-box; }\n\n/* the handle (circle) thats inside the toggle's track area */\n/* also the handle's appearance when it is \"off\" */\n.toggle .handle {\n  -webkit-transition: 0.2s ease-in-out;\n  -moz-transition: 0.2s ease-in-out;\n  transition: 0.2s ease-in-out;\n  position: absolute;\n  display: block;\n  width: 28px;\n  height: 28px;\n  border-radius: 28px;\n  background-color: #fff;\n  top: 7px;\n  left: 7px; }\n  .toggle .handle:before {\n    position: absolute;\n    top: -4px;\n    left: -22px;\n    padding: 19px 35px;\n    content: \" \"; }\n\n.toggle input:checked + .track .handle {\n  -webkit-transform: translate3d(22px, 0, 0);\n  -moz-transform: translate3d(22px, 0, 0);\n  transform: translate3d(22px, 0, 0);\n  background-color: #fff; }\n\n.item-toggle.active {\n  box-shadow: none; }\n\n.item-toggle, .item-toggle.item-complex .item-content {\n  padding-right: 102px; }\n\n.item-toggle.item-complex {\n  padding-right: 0; }\n\n.item-toggle .toggle {\n  position: absolute;\n  top: 8px;\n  right: 16px;\n  z-index: 3; }\n\n.toggle input:disabled + .track {\n  opacity: 0.6; }\n\n/**\n * Radio Button Inputs\n * --------------------------------------------------\n */\n.item-radio {\n  padding: 0; }\n  .item-radio:hover {\n    cursor: pointer; }\n\n.item-radio .item-content {\n  /* give some room to the right for the checkmark icon */\n  padding-right: 64px; }\n\n.item-radio .radio-icon {\n  /* checkmark icon will be hidden by default */\n  position: absolute;\n  top: 0;\n  right: 0;\n  z-index: 3;\n  visibility: hidden;\n  padding: 14px;\n  height: 100%;\n  font-size: 24px; }\n\n.item-radio input {\n  /* hide any radio button inputs elements (the ugly circles) */\n  position: absolute;\n  left: -9999px; }\n  .item-radio input:checked ~ .item-content {\n    /* style the item content when its checked */\n    background: #f7f7f7; }\n  .item-radio input:checked ~ .radio-icon {\n    /* show the checkmark icon when its checked */\n    visibility: visible; }\n\n.platform-android.grade-b .item-radio, .platform-android.grade-c .item-radio {\n  -webkit-animation: androidCheckedbugfix infinite 1s; }\n\n@-webkit-keyframes androidCheckedbugfix {\n  from {\n    padding: 0; }\n\n  to {\n    padding: 0; } }\n\n/**\n * Range\n * --------------------------------------------------\n */\ninput[type=\"range\"] {\n  display: inline-block;\n  overflow: hidden;\n  margin-top: 5px;\n  margin-bottom: 5px;\n  padding-right: 2px;\n  padding-left: 1px;\n  width: auto;\n  height: 35px;\n  outline: none;\n  background: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #ccc), color-stop(100%, #ccc));\n  background: linear-gradient(to right, #ccc 0%, #ccc 100%);\n  background-position: center;\n  background-size: 99% 4px;\n  background-repeat: no-repeat;\n  -webkit-appearance: none; }\n  input[type=\"range\"]::-webkit-slider-thumb {\n    position: relative;\n    width: 20px;\n    height: 20px;\n    border-radius: 10px;\n    background-color: #fff;\n    box-shadow: 0 0 2px rgba(0, 0, 0, 0.5), 1px 3px 5px rgba(0, 0, 0, 0.25);\n    cursor: pointer;\n    -webkit-appearance: none; }\n  input[type=\"range\"]::-webkit-slider-thumb:before {\n    /* what creates the colorful line on the left side of the slider */\n    position: absolute;\n    top: 8px;\n    left: -2001px;\n    width: 2000px;\n    height: 4px;\n    background: #444;\n    content: ' '; }\n  input[type=\"range\"]::-webkit-slider-thumb:after {\n    /* create a larger (but hidden) hit area */\n    position: absolute;\n    top: -20px;\n    left: -20px;\n    padding: 30px;\n    content: ' '; }\n\n.range {\n  display: -webkit-box;\n  display: -webkit-flex;\n  display: -moz-box;\n  display: -moz-flex;\n  display: -ms-flexbox;\n  display: flex;\n  -webkit-box-align: center;\n  -ms-flex-align: center;\n  -webkit-align-items: center;\n  -moz-align-items: center;\n  align-items: center;\n  padding: 2px 11px; }\n  .range.range-light input::-webkit-slider-thumb:before {\n    background: #ddd; }\n  .range.range-stable input::-webkit-slider-thumb:before {\n    background: #b2b2b2; }\n  .range.range-positive input::-webkit-slider-thumb:before {\n    background: #4a87ee; }\n  .range.range-calm input::-webkit-slider-thumb:before {\n    background: #43cee6; }\n  .range.range-balanced input::-webkit-slider-thumb:before {\n    background: #66cc33; }\n  .range.range-assertive input::-webkit-slider-thumb:before {\n    background: #ef4e3a; }\n  .range.range-energized input::-webkit-slider-thumb:before {\n    background: #f0b840; }\n  .range.range-royal input::-webkit-slider-thumb:before {\n    background: #8a6de9; }\n  .range.range-dark input::-webkit-slider-thumb:before {\n    background: #444; }\n\n.range .icon {\n  -webkit-box-flex: 0;\n  -webkit-flex: 0;\n  -moz-box-flex: 0;\n  -moz-flex: 0;\n  -ms-flex: 0;\n  flex: 0;\n  display: block;\n  min-width: 24px;\n  text-align: center;\n  font-size: 24px; }\n\n.range input {\n  -webkit-box-flex: 1;\n  -webkit-flex: 1;\n  -moz-box-flex: 1;\n  -moz-flex: 1;\n  -ms-flex: 1;\n  flex: 1;\n  display: block;\n  margin-right: 10px;\n  margin-left: 10px; }\n\n.range-label {\n  -webkit-box-flex: 0;\n  -webkit-flex: 0 0 auto;\n  -moz-box-flex: 0;\n  -moz-flex: 0 0 auto;\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  display: block;\n  white-space: nowrap; }\n\n.range-label:first-child {\n  padding-left: 5px; }\n\n.range input + .range-label {\n  padding-right: 5px;\n  padding-left: 0; }\n\n/**\n * Select\n * --------------------------------------------------\n */\n.item-select {\n  position: relative; }\n  .item-select select {\n    -webkit-appearance: none;\n    -moz-appearance: none;\n    appearance: none;\n    position: absolute;\n    top: 0;\n    right: 0;\n    padding: 14px 48px 16px 16px;\n    max-width: 65%;\n    border: none;\n    background: #fff;\n    color: #333;\n    text-indent: 0.01px;\n    text-overflow: '';\n    white-space: nowrap;\n    font-size: 14px;\n    cursor: pointer;\n    direction: rtl; }\n  .item-select select::-ms-expand {\n    display: none; }\n  .item-select option {\n    direction: ltr; }\n  .item-select:after {\n    position: absolute;\n    top: 50%;\n    right: 16px;\n    margin-top: -3px;\n    width: 0;\n    height: 0;\n    border-top: 5px solid;\n    border-right: 5px solid rgba(0, 0, 0, 0);\n    border-left: 5px solid rgba(0, 0, 0, 0);\n    color: #999;\n    content: \"\";\n    pointer-events: none; }\n  .item-select.item-light select {\n    background: #fff;\n    color: #444; }\n  .item-select.item-stable select {\n    background: #f8f8f8;\n    color: #444; }\n  .item-select.item-stable:after, .item-select.item-stable .input-label {\n    color: #656565; }\n  .item-select.item-positive select {\n    background: #4a87ee;\n    color: #fff; }\n  .item-select.item-positive:after, .item-select.item-positive .input-label {\n    color: #fff; }\n  .item-select.item-calm select {\n    background: #43cee6;\n    color: #fff; }\n  .item-select.item-calm:after, .item-select.item-calm .input-label {\n    color: #fff; }\n  .item-select.item-assertive select {\n    background: #ef4e3a;\n    color: #fff; }\n  .item-select.item-assertive:after, .item-select.item-assertive .input-label {\n    color: #fff; }\n  .item-select.item-balanced select {\n    background: #66cc33;\n    color: #fff; }\n  .item-select.item-balanced:after, .item-select.item-balanced .input-label {\n    color: #fff; }\n  .item-select.item-energized select {\n    background: #f0b840;\n    color: #fff; }\n  .item-select.item-energized:after, .item-select.item-energized .input-label {\n    color: #fff; }\n  .item-select.item-royal select {\n    background: #8a6de9;\n    color: #fff; }\n  .item-select.item-royal:after, .item-select.item-royal .input-label {\n    color: #fff; }\n  .item-select.item-dark select {\n    background: #444;\n    color: #fff; }\n  .item-select.item-dark:after, .item-select.item-dark .input-label {\n    color: #fff; }\n\nselect[multiple], select[size] {\n  height: auto; }\n\n/**\n * Progress\n * --------------------------------------------------\n */\nprogress {\n  display: block;\n  margin: 15px auto;\n  width: 100%; }\n\n/**\n * Buttons\n * --------------------------------------------------\n */\n.button {\n  border-color: #b2b2b2;\n  background-color: #f8f8f8;\n  color: #444;\n  position: relative;\n  display: inline-block;\n  margin: 0;\n  padding: 0 12px;\n  min-width: 52px;\n  min-height: 47px;\n  border-width: 1px;\n  border-style: solid;\n  border-radius: 2px;\n  vertical-align: top;\n  text-align: center;\n  text-overflow: ellipsis;\n  font-size: 16px;\n  line-height: 42px;\n  cursor: pointer; }\n  .button:hover {\n    color: #444;\n    text-decoration: none; }\n  .button.active, .button.activated {\n    border-color: #a2a2a2;\n    background-color: #e5e5e5;\n    box-shadow: inset 0px 1px 3px rgba(0, 0, 0, 0.15); }\n  .button:after {\n    position: absolute;\n    top: -6px;\n    right: -6px;\n    bottom: -6px;\n    left: -6px;\n    content: ' '; }\n  .button .icon {\n    vertical-align: top;\n    pointer-events: none; }\n  .button .icon:before, .button.icon:before, .button.icon-left:before, .button.icon-right:before {\n    display: inline-block;\n    padding: 0 0 1px 0;\n    vertical-align: inherit;\n    font-size: 24px;\n    line-height: 41px;\n    pointer-events: none; }\n  .button.icon-left:before {\n    float: left;\n    padding-right: 0.2em;\n    padding-left: 0; }\n  .button.icon-right:before {\n    float: right;\n    padding-right: 0;\n    padding-left: 0.2em; }\n  .button.button-block, .button.button-full {\n    margin-top: 10px;\n    margin-bottom: 10px; }\n  .button.button-light {\n    border-color: #ddd;\n    background-color: #fff;\n    color: #444; }\n    .button.button-light:hover {\n      color: #444;\n      text-decoration: none; }\n    .button.button-light.active, .button.button-light.activated {\n      border-color: #ccc;\n      background-color: #fafafa;\n      box-shadow: inset 0px 1px 3px rgba(0, 0, 0, 0.15); }\n    .button.button-light.button-clear {\n      border-color: transparent;\n      background: none;\n      box-shadow: none;\n      color: #ddd; }\n    .button.button-light.button-icon {\n      border-color: transparent;\n      background: none; }\n    .button.button-light.button-outline {\n      border-color: #ddd;\n      background: transparent;\n      color: #ddd; }\n      .button.button-light.button-outline.active, .button.button-light.button-outline.activated {\n        background-color: #ddd;\n        box-shadow: none;\n        color: #fff; }\n  .button.button-stable {\n    border-color: #b2b2b2;\n    background-color: #f8f8f8;\n    color: #444; }\n    .button.button-stable:hover {\n      color: #444;\n      text-decoration: none; }\n    .button.button-stable.active, .button.button-stable.activated {\n      border-color: #a2a2a2;\n      background-color: #e5e5e5;\n      box-shadow: inset 0px 1px 3px rgba(0, 0, 0, 0.15); }\n    .button.button-stable.button-clear {\n      border-color: transparent;\n      background: none;\n      box-shadow: none;\n      color: #b2b2b2; }\n    .button.button-stable.button-icon {\n      border-color: transparent;\n      background: none; }\n    .button.button-stable.button-outline {\n      border-color: #b2b2b2;\n      background: transparent;\n      color: #b2b2b2; }\n      .button.button-stable.button-outline.active, .button.button-stable.button-outline.activated {\n        background-color: #b2b2b2;\n        box-shadow: none;\n        color: #fff; }\n  .button.button-positive {\n    border-color: #145fd7;\n    background-color: #4a87ee;\n    color: #fff; }\n    .button.button-positive:hover {\n      color: #fff;\n      text-decoration: none; }\n    .button.button-positive.active, .button.button-positive.activated {\n      border-color: #145fd7;\n      background-color: #145fd7;\n      box-shadow: inset 0px 1px 3px rgba(0, 0, 0, 0.15); }\n    .button.button-positive.button-clear {\n      border-color: transparent;\n      background: none;\n      box-shadow: none;\n      color: #4a87ee; }\n    .button.button-positive.button-icon {\n      border-color: transparent;\n      background: none; }\n    .button.button-positive.button-outline {\n      border-color: #4a87ee;\n      background: transparent;\n      color: #4a87ee; }\n      .button.button-positive.button-outline.active, .button.button-positive.button-outline.activated {\n        background-color: #4a87ee;\n        box-shadow: none;\n        color: #fff; }\n  .button.button-calm {\n    border-color: #1aacc3;\n    background-color: #43cee6;\n    color: #fff; }\n    .button.button-calm:hover {\n      color: #fff;\n      text-decoration: none; }\n    .button.button-calm.active, .button.button-calm.activated {\n      border-color: #1aacc3;\n      background-color: #1aacc3;\n      box-shadow: inset 0px 1px 3px rgba(0, 0, 0, 0.15); }\n    .button.button-calm.button-clear {\n      border-color: transparent;\n      background: none;\n      box-shadow: none;\n      color: #43cee6; }\n    .button.button-calm.button-icon {\n      border-color: transparent;\n      background: none; }\n    .button.button-calm.button-outline {\n      border-color: #43cee6;\n      background: transparent;\n      color: #43cee6; }\n      .button.button-calm.button-outline.active, .button.button-calm.button-outline.activated {\n        background-color: #43cee6;\n        box-shadow: none;\n        color: #fff; }\n  .button.button-assertive {\n    border-color: #cc2311;\n    background-color: #ef4e3a;\n    color: #fff; }\n    .button.button-assertive:hover {\n      color: #fff;\n      text-decoration: none; }\n    .button.button-assertive.active, .button.button-assertive.activated {\n      border-color: #cc2311;\n      background-color: #cc2311;\n      box-shadow: inset 0px 1px 3px rgba(0, 0, 0, 0.15); }\n    .button.button-assertive.button-clear {\n      border-color: transparent;\n      background: none;\n      box-shadow: none;\n      color: #ef4e3a; }\n    .button.button-assertive.button-icon {\n      border-color: transparent;\n      background: none; }\n    .button.button-assertive.button-outline {\n      border-color: #ef4e3a;\n      background: transparent;\n      color: #ef4e3a; }\n      .button.button-assertive.button-outline.active, .button.button-assertive.button-outline.activated {\n        background-color: #ef4e3a;\n        box-shadow: none;\n        color: #fff; }\n  .button.button-balanced {\n    border-color: #498f24;\n    background-color: #66cc33;\n    color: #fff; }\n    .button.button-balanced:hover {\n      color: #fff;\n      text-decoration: none; }\n    .button.button-balanced.active, .button.button-balanced.activated {\n      border-color: #498f24;\n      background-color: #498f24;\n      box-shadow: inset 0px 1px 3px rgba(0, 0, 0, 0.15); }\n    .button.button-balanced.button-clear {\n      border-color: transparent;\n      background: none;\n      box-shadow: none;\n      color: #66cc33; }\n    .button.button-balanced.button-icon {\n      border-color: transparent;\n      background: none; }\n    .button.button-balanced.button-outline {\n      border-color: #66cc33;\n      background: transparent;\n      color: #66cc33; }\n      .button.button-balanced.button-outline.active, .button.button-balanced.button-outline.activated {\n        background-color: #66cc33;\n        box-shadow: none;\n        color: #fff; }\n  .button.button-energized {\n    border-color: #d39211;\n    background-color: #f0b840;\n    color: #fff; }\n    .button.button-energized:hover {\n      color: #fff;\n      text-decoration: none; }\n    .button.button-energized.active, .button.button-energized.activated {\n      border-color: #d39211;\n      background-color: #d39211;\n      box-shadow: inset 0px 1px 3px rgba(0, 0, 0, 0.15); }\n    .button.button-energized.button-clear {\n      border-color: transparent;\n      background: none;\n      box-shadow: none;\n      color: #f0b840; }\n    .button.button-energized.button-icon {\n      border-color: transparent;\n      background: none; }\n    .button.button-energized.button-outline {\n      border-color: #f0b840;\n      background: transparent;\n      color: #f0b840; }\n      .button.button-energized.button-outline.active, .button.button-energized.button-outline.activated {\n        background-color: #f0b840;\n        box-shadow: none;\n        color: #fff; }\n  .button.button-royal {\n    border-color: #552bdf;\n    background-color: #8a6de9;\n    color: #fff; }\n    .button.button-royal:hover {\n      color: #fff;\n      text-decoration: none; }\n    .button.button-royal.active, .button.button-royal.activated {\n      border-color: #552bdf;\n      background-color: #552bdf;\n      box-shadow: inset 0px 1px 3px rgba(0, 0, 0, 0.15); }\n    .button.button-royal.button-clear {\n      border-color: transparent;\n      background: none;\n      box-shadow: none;\n      color: #8a6de9; }\n    .button.button-royal.button-icon {\n      border-color: transparent;\n      background: none; }\n    .button.button-royal.button-outline {\n      border-color: #8a6de9;\n      background: transparent;\n      color: #8a6de9; }\n      .button.button-royal.button-outline.active, .button.button-royal.button-outline.activated {\n        background-color: #8a6de9;\n        box-shadow: none;\n        color: #fff; }\n  .button.button-dark {\n    border-color: #111;\n    background-color: #444;\n    color: #fff; }\n    .button.button-dark:hover {\n      color: #fff;\n      text-decoration: none; }\n    .button.button-dark.active, .button.button-dark.activated {\n      border-color: #000;\n      background-color: #262626;\n      box-shadow: inset 0px 1px 3px rgba(0, 0, 0, 0.15); }\n    .button.button-dark.button-clear {\n      border-color: transparent;\n      background: none;\n      box-shadow: none;\n      color: #444; }\n    .button.button-dark.button-icon {\n      border-color: transparent;\n      background: none; }\n    .button.button-dark.button-outline {\n      border-color: #444;\n      background: transparent;\n      color: #444; }\n      .button.button-dark.button-outline.active, .button.button-dark.button-outline.activated {\n        background-color: #444;\n        box-shadow: none;\n        color: #fff; }\n\n.button-small {\n  padding: 2px 4px 1px;\n  min-width: 28px;\n  min-height: 30px;\n  font-size: 12px;\n  line-height: 26px; }\n  .button-small .icon:before, .button-small.icon:before, .button-small.icon-left:before, .button-small.icon-right:before {\n    font-size: 16px;\n    line-height: 19px;\n    margin-top: 3px; }\n\n.button-large {\n  padding: 0 16px;\n  min-width: 68px;\n  min-height: 59px;\n  font-size: 20px;\n  line-height: 53px; }\n  .button-large .icon:before, .button-large.icon:before, .button-large.icon-left:before, .button-large.icon-right:before {\n    padding-bottom: 2px;\n    font-size: 32px;\n    line-height: 51px; }\n\n.button-icon {\n  -webkit-transition: opacity 0.1s;\n  -moz-transition: opacity 0.1s;\n  transition: opacity 0.1s;\n  padding: 0 6px;\n  min-width: initial;\n  border-color: transparent;\n  background: none; }\n  .button-icon.button.active, .button-icon.button.activated {\n    border-color: transparent;\n    background: none;\n    box-shadow: none;\n    opacity: 0.3; }\n  .button-icon .icon:before, .button-icon.icon:before {\n    font-size: 32px; }\n\n.button-clear {\n  -webkit-transition: opacity 0.1s;\n  -moz-transition: opacity 0.1s;\n  transition: opacity 0.1s;\n  padding: 0 6px;\n  max-height: 42px;\n  border-color: transparent;\n  background: none;\n  box-shadow: none; }\n  .button-clear.button-clear {\n    border-color: transparent;\n    background: none;\n    box-shadow: none;\n    color: #b2b2b2; }\n  .button-clear.button-icon {\n    border-color: transparent;\n    background: none; }\n  .button-clear.active, .button-clear.activated {\n    opacity: 0.3; }\n\n.button-outline {\n  -webkit-transition: opacity 0.1s;\n  -moz-transition: opacity 0.1s;\n  transition: opacity 0.1s;\n  background: none;\n  box-shadow: none; }\n  .button-outline.button-outline {\n    border-color: #b2b2b2;\n    background: transparent;\n    color: #b2b2b2; }\n    .button-outline.button-outline.active, .button-outline.button-outline.activated {\n      background-color: #b2b2b2;\n      box-shadow: none;\n      color: #fff; }\n\n.padding > .button.button-block:first-child {\n  margin-top: 0; }\n\n.button-block {\n  display: block;\n  clear: both; }\n  .button-block:after {\n    clear: both; }\n\n.button-full, .button-full > .button {\n  display: block;\n  margin-right: 0;\n  margin-left: 0;\n  border-right-width: 0;\n  border-left-width: 0;\n  border-radius: 0; }\n\nbutton.button-block, button.button-full, .button-full > button.button, input.button.button-block {\n  width: 100%; }\n\na.button {\n  text-decoration: none; }\n\n.button.disabled, .button[disabled] {\n  opacity: 0.4;\n  cursor: default !important;\n  pointer-events: none; }\n\n/**\n * Button Bar\n * --------------------------------------------------\n */\n.button-bar {\n  display: -webkit-box;\n  display: -webkit-flex;\n  display: -moz-box;\n  display: -moz-flex;\n  display: -ms-flexbox;\n  display: flex;\n  -webkit-box-flex: 1;\n  -webkit-flex: 1;\n  -moz-box-flex: 1;\n  -moz-flex: 1;\n  -ms-flex: 1;\n  flex: 1;\n  width: 100%; }\n  .button-bar.button-bar-inline {\n    display: block;\n    width: auto;\n    *zoom: 1; }\n    .button-bar.button-bar-inline:before, .button-bar.button-bar-inline:after {\n      display: table;\n      content: \"\";\n      line-height: 0; }\n    .button-bar.button-bar-inline:after {\n      clear: both; }\n    .button-bar.button-bar-inline > .button {\n      width: auto;\n      display: inline-block;\n      float: left; }\n\n.button-bar > .button {\n  -webkit-box-flex: 1;\n  -webkit-flex: 1;\n  -moz-box-flex: 1;\n  -moz-flex: 1;\n  -ms-flex: 1;\n  flex: 1;\n  display: block;\n  overflow: hidden;\n  padding: 0 16px;\n  width: 0;\n  border-width: 1px 0px 1px 1px;\n  border-radius: 0;\n  text-align: center;\n  text-overflow: ellipsis;\n  white-space: nowrap; }\n  .button-bar > .button:before, .button-bar > .button .icon:before {\n    line-height: 44px; }\n  .button-bar > .button:first-child {\n    border-radius: 2px 0px 0px 2px; }\n  .button-bar > .button:last-child {\n    border-right-width: 1px;\n    border-radius: 0px 2px 2px 0px; }\n\n/**\n * Animations\n * --------------------------------------------------\n * The animations in this file are \"simple\" - not too complex\n * and pretty easy on performance. They can be overidden\n * and enhanced easily.\n */\n/**\n * Keyframes\n * --------------------------------------------------\n */\n@-webkit-keyframes slideInUp {\n  0% {\n    -webkit-transform: translate3d(0, 100%, 0); }\n\n  100% {\n    -webkit-transform: translate3d(0, 0, 0); } }\n\n@-moz-keyframes slideInUp {\n  0% {\n    -moz-transform: translate3d(0, 100%, 0); }\n\n  100% {\n    -moz-transform: translate3d(0, 0, 0); } }\n\n@keyframes slideInUp {\n  0% {\n    transform: translate3d(0, 100%, 0); }\n\n  100% {\n    transform: translate3d(0, 0, 0); } }\n\n@-webkit-keyframes slideOutUp {\n  0% {\n    -webkit-transform: translate3d(0, 0, 0); }\n\n  100% {\n    -webkit-transform: translate3d(0, 100%, 0); } }\n\n@-moz-keyframes slideOutUp {\n  0% {\n    -moz-transform: translate3d(0, 0, 0); }\n\n  100% {\n    -moz-transform: translate3d(0, 100%, 0); } }\n\n@keyframes slideOutUp {\n  0% {\n    transform: translate3d(0, 0, 0); }\n\n  100% {\n    transform: translate3d(0, 100%, 0); } }\n\n@-webkit-keyframes slideInFromLeft {\n  from {\n    -webkit-transform: translate3d(-100%, 0, 0); }\n\n  to {\n    -webkit-transform: translate3d(0, 0, 0); } }\n\n@-moz-keyframes slideInFromLeft {\n  from {\n    -moz-transform: translateX(-100%); }\n\n  to {\n    -moz-transform: translateX(0); } }\n\n@keyframes slideInFromLeft {\n  from {\n    transform: translateX(-100%); }\n\n  to {\n    transform: translateX(0); } }\n\n@-webkit-keyframes slideInFromRight {\n  from {\n    -webkit-transform: translate3d(100%, 0, 0); }\n\n  to {\n    -webkit-transform: translate3d(0, 0, 0); } }\n\n@-moz-keyframes slideInFromRight {\n  from {\n    -moz-transform: translateX(100%); }\n\n  to {\n    -moz-transform: translateX(0); } }\n\n@keyframes slideInFromRight {\n  from {\n    transform: translateX(100%); }\n\n  to {\n    transform: translateX(0); } }\n\n@-webkit-keyframes slideOutToLeft {\n  from {\n    -webkit-transform: translate3d(0, 0, 0); }\n\n  to {\n    -webkit-transform: translate3d(-100%, 0, 0); } }\n\n@-moz-keyframes slideOutToLeft {\n  from {\n    -moz-transform: translateX(0); }\n\n  to {\n    -moz-transform: translateX(-100%); } }\n\n@keyframes slideOutToLeft {\n  from {\n    transform: translateX(0); }\n\n  to {\n    transform: translateX(-100%); } }\n\n@-webkit-keyframes slideOutToRight {\n  from {\n    -webkit-transform: translate3d(0, 0, 0); }\n\n  to {\n    -webkit-transform: translate3d(100%, 0, 0); } }\n\n@-moz-keyframes slideOutToRight {\n  from {\n    -moz-transform: translateX(0); }\n\n  to {\n    -moz-transform: translateX(100%); } }\n\n@keyframes slideOutToRight {\n  from {\n    transform: translateX(0); }\n\n  to {\n    transform: translateX(100%); } }\n\n@-webkit-keyframes fadeOut {\n  from {\n    opacity: 1; }\n\n  to {\n    opacity: 0; } }\n\n@-moz-keyframes fadeOut {\n  from {\n    opacity: 1; }\n\n  to {\n    opacity: 0; } }\n\n@keyframes fadeOut {\n  from {\n    opacity: 1; }\n\n  to {\n    opacity: 0; } }\n\n@-webkit-keyframes fadeIn {\n  from {\n    opacity: 0; }\n\n  to {\n    opacity: 1; } }\n\n@-moz-keyframes fadeIn {\n  from {\n    opacity: 0; }\n\n  to {\n    opacity: 1; } }\n\n@keyframes fadeIn {\n  from {\n    opacity: 0; }\n\n  to {\n    opacity: 1; } }\n\n@-webkit-keyframes fadeInHalf {\n  from {\n    background-color: rgba(0, 0, 0, 0); }\n\n  to {\n    background-color: rgba(0, 0, 0, 0.5); } }\n\n@-moz-keyframes fadeInHalf {\n  from {\n    background-color: rgba(0, 0, 0, 0); }\n\n  to {\n    background-color: rgba(0, 0, 0, 0.5); } }\n\n@keyframes fadeInHalf {\n  from {\n    background-color: rgba(0, 0, 0, 0); }\n\n  to {\n    background-color: rgba(0, 0, 0, 0.5); } }\n\n@-webkit-keyframes fadeOutHalf {\n  from {\n    background-color: rgba(0, 0, 0, 0.5); }\n\n  to {\n    background-color: rgba(0, 0, 0, 0); } }\n\n@-moz-keyframes fadeOutHalf {\n  from {\n    background-color: rgba(0, 0, 0, 0.5); }\n\n  to {\n    background-color: rgba(0, 0, 0, 0); } }\n\n@keyframes fadeOutHalf {\n  from {\n    background-color: rgba(0, 0, 0, 0.5); }\n\n  to {\n    background-color: rgba(0, 0, 0, 0); } }\n\n@-webkit-keyframes scaleOut {\n  from {\n    -webkit-transform: scale(1);\n    opacity: 1; }\n\n  to {\n    -webkit-transform: scale(0.8);\n    opacity: 0; } }\n\n@-moz-keyframes scaleOut {\n  from {\n    -moz-transform: scale(1);\n    opacity: 1; }\n\n  to {\n    -moz-transform: scale(0.8);\n    opacity: 0; } }\n\n@keyframes scaleOut {\n  from {\n    transform: scale(1);\n    opacity: 1; }\n\n  to {\n    transform: scale(0.8);\n    opacity: 0; } }\n\n@-webkit-keyframes scaleIn {\n  from {\n    -webkit-transform: scale(0); }\n\n  to {\n    -webkit-transform: scale(1); } }\n\n@-moz-keyframes scaleIn {\n  from {\n    -moz-transform: scale(0); }\n\n  to {\n    -moz-transform: scale(1); } }\n\n@keyframes scaleIn {\n  from {\n    transform: scale(0); }\n\n  to {\n    transform: scale(1); } }\n\n@-webkit-keyframes superScaleIn {\n  from {\n    -webkit-transform: scale(1.2);\n    opacity: 0; }\n\n  to {\n    -webkit-transform: scale(1);\n    opacity: 1; } }\n\n@-moz-keyframes superScaleIn {\n  from {\n    -moz-transform: scale(1.2);\n    opacity: 0; }\n\n  to {\n    -moz-transform: scale(1);\n    opacity: 1; } }\n\n@keyframes superScaleIn {\n  from {\n    transform: scale(1.2);\n    opacity: 0; }\n\n  to {\n    transform: scale(1);\n    opacity: 1; } }\n\n@-webkit-keyframes spin {\n  100% {\n    -webkit-transform: rotate(360deg); } }\n\n@-moz-keyframes spin {\n  100% {\n    -moz-transform: rotate(360deg); } }\n\n@keyframes spin {\n  100% {\n    transform: rotate(360deg); } }\n\n.no-animation > .ng-enter, .no-animation.ng-enter, .no-animation > .ng-leave, .no-animation.ng-leave {\n  -webkit-transition: none;\n  -moz-transition: none;\n  transition: none; }\n\n.noop-animation > .ng-enter, .noop-animation.ng-enter, .noop-animation > .ng-leave, .noop-animation.ng-leave {\n  -webkit-transition: all cubic-bezier(0.25, 0.46, 0.45, 0.94) 250ms;\n  -moz-transition: all cubic-bezier(0.25, 0.46, 0.45, 0.94) 250ms;\n  transition: all cubic-bezier(0.25, 0.46, 0.45, 0.94) 250ms;\n  position: absolute;\n  top: 0;\n  right: 0;\n  bottom: 0;\n  left: 0; }\n\n.ng-animate .pane {\n  position: absolute; }\n\n/**\n * Slide Left-Right, and Right-Left, each with the reserve\n * --------------------------------------------------\n * NEW content slides IN from the RIGHT, OLD slides OUT to the LEFT\n * Reverse: NEW content slides IN from the LEFT, OLD slides OUT to the RIGHT\n */\n.slide-left-right > .ng-enter, .slide-left-right.ng-enter, .slide-left-right > .ng-leave, .slide-left-right.ng-leave, .slide-right-left.reverse > .ng-enter, .slide-right-left.reverse.ng-enter, .slide-right-left.reverse > .ng-leave, .slide-right-left.reverse.ng-leave {\n  -webkit-transition: all ease-in-out 250ms;\n  -moz-transition: all ease-in-out 250ms;\n  transition: all ease-in-out 250ms;\n  position: absolute;\n  top: 0;\n  right: 0;\n  bottom: 0;\n  left: 0; }\n.slide-left-right > .ng-enter, .slide-left-right.ng-enter, .slide-right-left.reverse > .ng-enter, .slide-right-left.reverse.ng-enter {\n  /* NEW content placed far RIGHT BEFORE it slides IN from the RIGHT */\n  -webkit-transform: translate3d(100%, 0, 0);\n  -moz-transform: translate3d(100%, 0, 0);\n  transform: translate3d(100%, 0, 0); }\n.slide-left-right > .ng-enter.ng-enter-active, .slide-left-right.ng-enter.ng-enter-active, .slide-right-left.reverse > .ng-enter.ng-enter-active, .slide-right-left.reverse.ng-enter.ng-enter-active {\n  /* NEW content ACTIVELY sliding IN from the RIGHT */\n  -webkit-transform: translate3d(0, 0, 0);\n  -moz-transform: translate3d(0, 0, 0);\n  transform: translate3d(0, 0, 0); }\n.slide-left-right > .ng-leave.ng-leave-active, .slide-left-right.ng-leave.ng-leave-active, .slide-right-left.reverse > .ng-leave.ng-leave-active, .slide-right-left.reverse.ng-leave.ng-leave-active {\n  /* OLD content ACTIVELY sliding OUT to the LEFT */\n  -webkit-transform: translate3d(-100%, 0, 0);\n  -moz-transform: translate3d(-100%, 0, 0);\n  transform: translate3d(-100%, 0, 0); }\n\n.slide-left-right.reverse > .ng-enter, .slide-left-right.reverse.ng-enter, .slide-left-right.reverse > .ng-leave, .slide-left-right.reverse.ng-leave, .slide-right-left > .ng-enter, .slide-right-left.ng-enter, .slide-right-left > .ng-leave, .slide-right-left.ng-leave {\n  -webkit-transition: all ease-in-out 250ms;\n  -moz-transition: all ease-in-out 250ms;\n  transition: all ease-in-out 250ms;\n  position: absolute;\n  top: 0;\n  right: 0;\n  bottom: 0;\n  left: 0; }\n.slide-left-right.reverse > .ng-enter, .slide-left-right.reverse.ng-enter, .slide-right-left > .ng-enter, .slide-right-left.ng-enter {\n  /* NEW content placed far LEFT BEFORE it slides IN from the LEFT */\n  -webkit-transform: translate3d(-100%, 0, 0);\n  -moz-transform: translate3d(-100%, 0, 0);\n  transform: translate3d(-100%, 0, 0); }\n.slide-left-right.reverse > .ng-enter.ng-enter-active, .slide-left-right.reverse.ng-enter.ng-enter-active, .slide-right-left > .ng-enter.ng-enter-active, .slide-right-left.ng-enter.ng-enter-active {\n  /* NEW content ACTIVELY sliding IN from the LEFT */\n  -webkit-transform: translate3d(0, 0, 0);\n  -moz-transform: translate3d(0, 0, 0);\n  transform: translate3d(0, 0, 0); }\n.slide-left-right.reverse > .ng-leave.ng-leave-active, .slide-left-right.reverse.ng-leave.ng-leave-active, .slide-right-left > .ng-leave.ng-leave-active, .slide-right-left.ng-leave.ng-leave-active {\n  /* OLD content ACTIVELY sliding OUT to the RIGHT */\n  -webkit-transform: translate3d(100%, 0, 0);\n  -moz-transform: translate3d(100%, 0, 0);\n  transform: translate3d(100%, 0, 0); }\n\n/**\n * iOS7 style slide left to right\n * --------------------------------------------------\n */\n.slide-left-right-ios7 > .ng-enter, .slide-left-right-ios7.ng-enter, .slide-left-right-ios7 > .ng-leave, .slide-left-right-ios7.ng-leave, .slide-right-left-ios7.reverse > .ng-enter, .slide-right-left-ios7.reverse.ng-enter, .slide-right-left-ios7.reverse > .ng-leave, .slide-right-left-ios7.reverse.ng-leave {\n  -webkit-transition: all cubic-bezier(0.4, 0.6, 0.2, 1) 340ms;\n  -moz-transition: all cubic-bezier(0.4, 0.6, 0.2, 1) 340ms;\n  transition: all cubic-bezier(0.4, 0.6, 0.2, 1) 340ms;\n  position: absolute;\n  top: 0;\n  right: -1px;\n  bottom: 0;\n  left: -1px;\n  width: auto;\n  border-right: none;\n  border-left: none; }\n  .slide-left-right-ios7 > .ng-enter:not(.bar), .slide-left-right-ios7.ng-enter:not(.bar), .slide-left-right-ios7 > .ng-leave:not(.bar), .slide-left-right-ios7.ng-leave:not(.bar), .slide-right-left-ios7.reverse > .ng-enter:not(.bar), .slide-right-left-ios7.reverse.ng-enter:not(.bar), .slide-right-left-ios7.reverse > .ng-leave:not(.bar), .slide-right-left-ios7.reverse.ng-leave:not(.bar) {\n    border-right: none;\n    border-left: none; }\n.slide-left-right-ios7 > .ng-enter, .slide-left-right-ios7.ng-enter, .slide-right-left-ios7.reverse > .ng-enter, .slide-right-left-ios7.reverse.ng-enter {\n  /* NEW content placed far RIGHT BEFORE it slides IN from the RIGHT */\n  -webkit-transform: translate3d(100%, 0, 0);\n  -moz-transform: translate3d(100%, 0, 0);\n  transform: translate3d(100%, 0, 0); }\n.slide-left-right-ios7 > .ng-leave, .slide-left-right-ios7.ng-leave, .slide-right-left-ios7.reverse > .ng-leave, .slide-right-left-ios7.reverse.ng-leave {\n  z-index: 1; }\n.slide-left-right-ios7 > .ng-enter.ng-enter-active, .slide-left-right-ios7.ng-enter.ng-enter-active, .slide-right-left-ios7.reverse > .ng-enter.ng-enter-active, .slide-right-left-ios7.reverse.ng-enter.ng-enter-active {\n  /* NEW content ACTIVELY sliding IN from the RIGHT */\n  -webkit-transform: translate3d(0, 0, 0);\n  -moz-transform: translate3d(0, 0, 0);\n  transform: translate3d(0, 0, 0); }\n.slide-left-right-ios7 > .ng-leave.ng-leave-active, .slide-left-right-ios7.ng-leave.ng-leave-active, .slide-right-left-ios7.reverse > .ng-leave.ng-leave-active, .slide-right-left-ios7.reverse.ng-leave.ng-leave-active {\n  /* OLD content ACTIVELY sliding OUT to the LEFT */\n  -webkit-transform: translate3d(-15%, 0, 0);\n  -moz-transform: translate3d(-15%, 0, 0);\n  transform: translate3d(-15%, 0, 0); }\n\n.slide-left-right-ios7.reverse > .ng-enter, .slide-left-right-ios7.reverse.ng-enter, .slide-left-right-ios7.reverse > .ng-leave, .slide-left-right-ios7.reverse.ng-leave, .slide-right-left-ios7 > .ng-enter, .slide-right-left-ios7.ng-enter, .slide-right-left-ios7 > .ng-leave, .slide-right-left-ios7.ng-leave {\n  -webkit-transition: all cubic-bezier(0.4, 0.6, 0.2, 1) 340ms;\n  -moz-transition: all cubic-bezier(0.4, 0.6, 0.2, 1) 340ms;\n  transition: all cubic-bezier(0.4, 0.6, 0.2, 1) 340ms;\n  position: absolute;\n  top: 0;\n  right: -1px;\n  bottom: 0;\n  left: -1px;\n  width: auto;\n  border-right: none;\n  border-left: none; }\n.slide-left-right-ios7.reverse > .ng-enter, .slide-left-right-ios7.reverse.ng-enter, .slide-right-left-ios7 > .ng-enter, .slide-right-left-ios7.ng-enter {\n  /* NEW content placed far LEFT BEFORE it slides IN from the LEFT */\n  -webkit-transform: translate3d(-15%, 0, 0);\n  -moz-transform: translate3d(-15%, 0, 0);\n  transform: translate3d(-15%, 0, 0); }\n.slide-left-right-ios7.reverse > .ng-leave, .slide-left-right-ios7.reverse.ng-leave, .slide-right-left-ios7 > .ng-leave, .slide-right-left-ios7.ng-leave {\n  z-index: 2; }\n.slide-left-right-ios7.reverse > .ng-enter.ng-enter-active, .slide-left-right-ios7.reverse.ng-enter.ng-enter-active, .slide-right-left-ios7 > .ng-enter.ng-enter-active, .slide-right-left-ios7.ng-enter.ng-enter-active {\n  /* NEW content ACTIVELY sliding IN from the LEFT */\n  -webkit-transform: translate3d(0, 0, 0);\n  -moz-transform: translate3d(0, 0, 0);\n  transform: translate3d(0, 0, 0); }\n.slide-left-right-ios7.reverse > .ng-leave.ng-leave-active, .slide-left-right-ios7.reverse.ng-leave.ng-leave-active, .slide-right-left-ios7 > .ng-leave.ng-leave-active, .slide-right-left-ios7.ng-leave.ng-leave-active {\n  /* OLD content ACTIVELY sliding OUT to the RIGHT */\n  -webkit-transform: translate3d(100%, 0, 0);\n  -moz-transform: translate3d(100%, 0, 0);\n  transform: translate3d(100%, 0, 0); }\n\n/**\n * iPad doesn't like box shadows\n */\n/*\n.grade-a:not(.platform-ipad) {\n  .slide-left-right-ios7, .slide-right-left-ios7.reverse {\n    > .ng-enter, &.ng-enter {\n      box-shadow: $ios-transition-box-shadow-start;\n    }\n    > .ng-enter.ng-enter-active, &.ng-enter.ng-enter-active {\n      box-shadow: $ios-transition-box-shadow-end;\n    }\n  }\n  .slide-left-right-ios7.reverse, .slide-right-left-ios7 {\n    > .ng-leave, &.ng-leave {\n      //box-shadow: $ios-transition-box-shadow-end;\n    }\n    > .ng-leave.ng-leave-active, &.ng-leave.ng-leave-active {\n      //box-shadow: $ios-transition-box-shadow-start;\n    }\n  }\n}\n*/\n.grade-a.platform-ipad .slide-left-right-ios7 > .ng-enter, .grade-a.platform-ipad .slide-left-right-ios7.ng-enter, .grade-a.platform-ipad .slide-right-left-ios7.reverse > .ng-enter, .grade-a.platform-ipad .slide-right-left-ios7.reverse.ng-enter {\n  border-left: 1px solid #ddd; }\n.grade-a.platform-ipad .slide-left-right-ios7.reverse > .ng-leave, .grade-a.platform-ipad .slide-left-right-ios7.reverse.ng-leave, .grade-a.platform-ipad .slide-right-left-ios7 > .ng-leave, .grade-a.platform-ipad .slide-right-left-ios7.ng-leave {\n  border-left: 1px solid #ddd; }\n\n/**\n * Android style \"pop in\" with fade and scale\n */\n.fade-explode > .ng-enter, .fade-explode.ng-enter, .fade-explode > .ng-leave, .fade-explode.ng-leave {\n  -webkit-transition: all ease-out 300ms;\n  -moz-transition: all ease-out 300ms;\n  transition: all ease-out 300ms;\n  position: absolute;\n  top: 0;\n  right: -1px;\n  bottom: 0;\n  left: -1px;\n  width: auto; }\n  .fade-explode > .ng-enter:not(.bar), .fade-explode.ng-enter:not(.bar), .fade-explode > .ng-leave:not(.bar), .fade-explode.ng-leave:not(.bar) {\n    border-right: 1px solid #ddd;\n    border-left: 1px solid #ddd; }\n.fade-explode > .ng-enter, .fade-explode.ng-enter {\n  /* NEW content placed far RIGHT BEFORE it slides IN from the RIGHT */\n  -webkit-transform: scale(1.6);\n  -moz-transform: scale(1.6);\n  transform: scale(1.6);\n  opacity: 0;\n  z-index: 2; }\n.fade-explode > .ng-leave, .fade-explode.ng-leave {\n  z-index: 1; }\n.fade-explode > .ng-enter.ng-enter-active, .fade-explode.ng-enter.ng-enter-active {\n  /* NEW content ACTIVELY sliding IN from the RIGHT */\n  -webkit-transform: scale(1);\n  -moz-transform: scale(1);\n  transform: scale(1);\n  opacity: 1; }\n.fade-explode > .ng-leave.ng-leave-active, .fade-explode.ng-leave.ng-leave-active {\n  /* OLD content ACTIVELY sliding OUT to the LEFT */\n  -webkit-transform: scale(0.95);\n  -moz-transform: scale(0.95);\n  transform: scale(0.95); }\n\n.fade-explode.reverse > .ng-enter, .fade-explode.reverse.ng-enter, .fade-explode.reverse > .ng-leave, .fade-explode.reverse.ng-leave {\n  -webkit-transition: all ease-out 300ms;\n  -moz-transition: all ease-out 300ms;\n  transition: all ease-out 300ms;\n  position: absolute;\n  top: 0;\n  right: -1px;\n  bottom: 0;\n  left: -1px;\n  width: auto; }\n  .fade-explode.reverse > .ng-enter:not(.bar), .fade-explode.reverse.ng-enter:not(.bar), .fade-explode.reverse > .ng-leave:not(.bar), .fade-explode.reverse.ng-leave:not(.bar) {\n    border-right: 1px solid #ddd;\n    border-left: 1px solid #ddd; }\n.fade-explode.reverse > .ng-enter, .fade-explode.reverse.ng-enter {\n  /* NEW content placed far LEFT BEFORE it slides IN from the LEFT */\n  -webkit-transform: scale(0.95);\n  -moz-transform: scale(0.95);\n  transform: scale(0.95);\n  opacity: 0;\n  z-index: 1; }\n.fade-explode.reverse > .ng-leave, .fade-explode.reverse.ng-leave {\n  -webkit-transform: scale(1);\n  -moz-transform: scale(1);\n  transform: scale(1);\n  opacity: 1;\n  z-index: 2; }\n.fade-explode.reverse > .ng-enter.ng-enter-active, .fade-explode.reverse.ng-enter.ng-enter-active {\n  -webkit-transform: scale(1);\n  -moz-transform: scale(1);\n  transform: scale(1);\n  opacity: 1; }\n.fade-explode.reverse > .ng-leave.ng-leave-active, .fade-explode.reverse.ng-leave.ng-leave-active {\n  -webkit-transform: scale(1.6);\n  -moz-transform: scale(1.6);\n  transform: scale(1.6);\n  opacity: 0; }\n\n/**\n * Android style \"pop in\" with fade and scale\n */\n.fade-implode > .ng-enter, .fade-implode.ng-enter, .fade-implode > .ng-leave, .fade-implode.ng-leave {\n  -webkit-transition: all ease-out 200ms;\n  -moz-transition: all ease-out 200ms;\n  transition: all ease-out 200ms;\n  position: absolute;\n  top: 0;\n  right: -1px;\n  bottom: 0;\n  left: -1px;\n  width: auto; }\n  .fade-implode > .ng-enter:not(.bar), .fade-implode.ng-enter:not(.bar), .fade-implode > .ng-leave:not(.bar), .fade-implode.ng-leave:not(.bar) {\n    border-right: 1px solid #ddd;\n    border-left: 1px solid #ddd; }\n.fade-implode > .ng-enter, .fade-implode.ng-enter {\n  /* NEW content placed far RIGHT BEFORE it slides IN from the RIGHT */\n  -webkit-transform: scale(0.8);\n  -moz-transform: scale(0.8);\n  transform: scale(0.8);\n  opacity: 0;\n  z-index: 2; }\n.fade-implode > .ng-leave, .fade-implode.ng-leave {\n  z-index: 1; }\n.fade-implode > .ng-enter.ng-enter-active, .fade-implode.ng-enter.ng-enter-active {\n  /* NEW content */\n  -webkit-transform: scale(1);\n  -moz-transform: scale(1);\n  transform: scale(1);\n  opacity: 1; }\n\n.fade-implode.reverse > .ng-enter, .fade-implode.reverse.ng-enter, .fade-implode.reverse > .ng-leave, .fade-implode.reverse.ng-leave {\n  -webkit-transition: all ease-out 200ms;\n  -moz-transition: all ease-out 200ms;\n  transition: all ease-out 200ms;\n  position: absolute;\n  top: 0;\n  right: -1px;\n  bottom: 0;\n  left: -1px;\n  width: auto;\n  border-right: 1px solid #ddd;\n  border-left: 1px solid #ddd; }\n.fade-implode.reverse > .ng-enter, .fade-implode.reverse.ng-enter {\n  -webkit-transform: scale(1);\n  -moz-transform: scale(1);\n  transform: scale(1);\n  opacity: 1;\n  z-index: 1; }\n.fade-implode.reverse > .ng-leave, .fade-implode.reverse.ng-leave {\n  -webkit-transform: scale(1);\n  -moz-transform: scale(1);\n  transform: scale(1);\n  opacity: 1;\n  z-index: 2; }\n.fade-implode.reverse > .ng-enter.ng-enter-active, .fade-implode.reverse.ng-enter.ng-enter-active {\n  opacity: 1; }\n.fade-implode.reverse > .ng-leave.ng-leave-active, .fade-implode.reverse.ng-leave.ng-leave-active {\n  -webkit-transform: scale(0.8);\n  -moz-transform: scale(0.8);\n  transform: scale(0.8);\n  opacity: 0; }\n\n/**\n * Simple slide-in animation\n */\n.slide-in-left {\n  -webkit-transform: translate3d(0%, 0, 0);\n  -moz-transform: translate3d(0%, 0, 0);\n  transform: translate3d(0%, 0, 0); }\n  .slide-in-left.ng-enter, .slide-in-left > .ng-enter {\n    -webkit-animation-name: slideInFromLeft;\n    -moz-animation-name: slideInFromLeft;\n    animation-name: slideInFromLeft;\n    -webkit-animation-duration: 250ms;\n    -moz-animation-duration: 250ms;\n    animation-duration: 250ms;\n    -webkit-animation-timing-function: ease-in-out;\n    -moz-animation-timing-function: ease-in-out;\n    animation-timing-function: ease-in-out;\n    -webkit-animation-fill-mode: both;\n    -moz-animation-fill-mode: both;\n    animation-fill-mode: both; }\n  .slide-in-left.ng-leave, .slide-in-left > .ng-leave {\n    -webkit-animation-name: slideOutToLeft;\n    -moz-animation-name: slideOutToLeft;\n    animation-name: slideOutToLeft;\n    -webkit-animation-duration: 250ms;\n    -moz-animation-duration: 250ms;\n    animation-duration: 250ms;\n    -webkit-animation-timing-function: ease-in-out;\n    -moz-animation-timing-function: ease-in-out;\n    animation-timing-function: ease-in-out;\n    -webkit-animation-fill-mode: both;\n    -moz-animation-fill-mode: both;\n    animation-fill-mode: both; }\n\n.slide-in-left-add {\n  -webkit-transform: translate3d(100%, 0, 0);\n  -moz-transform: translate3d(100%, 0, 0);\n  transform: translate3d(100%, 0, 0);\n  -webkit-animation-duration: 250ms;\n  -moz-animation-duration: 250ms;\n  animation-duration: 250ms;\n  -webkit-animation-timing-function: ease-in-out;\n  -moz-animation-timing-function: ease-in-out;\n  animation-timing-function: ease-in-out;\n  -webkit-animation-fill-mode: both;\n  -moz-animation-fill-mode: both;\n  animation-fill-mode: both; }\n\n.slide-in-left-add-active {\n  -webkit-animation-name: slideInFromLeft;\n  -moz-animation-name: slideInFromLeft;\n  animation-name: slideInFromLeft; }\n\n.slide-out-left {\n  -webkit-transform: translate3d(-100%, 0, 0);\n  -moz-transform: translate3d(-100%, 0, 0);\n  transform: translate3d(-100%, 0, 0); }\n  .slide-out-left.ng-enter, .slide-out-left > .ng-enter {\n    -webkit-animation-name: slideOutToLeft;\n    -moz-animation-name: slideOutToLeft;\n    animation-name: slideOutToLeft;\n    -webkit-animation-duration: 250ms;\n    -moz-animation-duration: 250ms;\n    animation-duration: 250ms;\n    -webkit-animation-timing-function: ease-in-out;\n    -moz-animation-timing-function: ease-in-out;\n    animation-timing-function: ease-in-out;\n    -webkit-animation-fill-mode: both;\n    -moz-animation-fill-mode: both;\n    animation-fill-mode: both; }\n  .slide-out-left.ng-leave, .slide-out-left > .ng-leave {\n    -webkit-animation-name: slideOutToLeft;\n    -moz-animation-name: slideOutToLeft;\n    animation-name: slideOutToLeft;\n    -webkit-animation-duration: 250ms;\n    -moz-animation-duration: 250ms;\n    animation-duration: 250ms;\n    -webkit-animation-timing-function: ease-in-out;\n    -moz-animation-timing-function: ease-in-out;\n    animation-timing-function: ease-in-out;\n    -webkit-animation-fill-mode: both;\n    -moz-animation-fill-mode: both;\n    animation-fill-mode: both; }\n\n.slide-out-left-add {\n  -webkit-transform: translate3d(0, 0, 0);\n  -moz-transform: translate3d(0, 0, 0);\n  transform: translate3d(0, 0, 0);\n  -webkit-animation-duration: 250ms;\n  -moz-animation-duration: 250ms;\n  animation-duration: 250ms;\n  -webkit-animation-timing-function: ease-in-out;\n  -moz-animation-timing-function: ease-in-out;\n  animation-timing-function: ease-in-out;\n  -webkit-animation-fill-mode: both;\n  -moz-animation-fill-mode: both;\n  animation-fill-mode: both; }\n\n.slide-out-left-add-active {\n  -webkit-animation-name: slideOutToLeft;\n  -moz-animation-name: slideOutToLeft;\n  animation-name: slideOutToLeft; }\n\n.slide-in-right {\n  -webkit-transform: translate3d(0%, 0, 0);\n  -moz-transform: translate3d(0%, 0, 0);\n  transform: translate3d(0%, 0, 0); }\n  .slide-in-right.ng-enter, .slide-in-right > .ng-enter {\n    -webkit-animation-name: slideInFromRight;\n    -moz-animation-name: slideInFromRight;\n    animation-name: slideInFromRight;\n    -webkit-animation-duration: 250ms;\n    -moz-animation-duration: 250ms;\n    animation-duration: 250ms;\n    -webkit-animation-timing-function: ease-in-out;\n    -moz-animation-timing-function: ease-in-out;\n    animation-timing-function: ease-in-out;\n    -webkit-animation-fill-mode: both;\n    -moz-animation-fill-mode: both;\n    animation-fill-mode: both; }\n  .slide-in-right.ng-leave, .slide-in-right > .ng-leave {\n    -webkit-animation-name: slideOutToRight;\n    -moz-animation-name: slideOutToRight;\n    animation-name: slideOutToRight;\n    -webkit-animation-duration: 250ms;\n    -moz-animation-duration: 250ms;\n    animation-duration: 250ms;\n    -webkit-animation-timing-function: ease-in-out;\n    -moz-animation-timing-function: ease-in-out;\n    animation-timing-function: ease-in-out;\n    -webkit-animation-fill-mode: both;\n    -moz-animation-fill-mode: both;\n    animation-fill-mode: both; }\n\n.slide-in-right-add {\n  -webkit-transform: translate3d(-100%, 0, 0);\n  -moz-transform: translate3d(-100%, 0, 0);\n  transform: translate3d(-100%, 0, 0);\n  -webkit-animation-duration: 250ms;\n  -moz-animation-duration: 250ms;\n  animation-duration: 250ms;\n  -webkit-animation-timing-function: ease-in-out;\n  -moz-animation-timing-function: ease-in-out;\n  animation-timing-function: ease-in-out;\n  -webkit-animation-fill-mode: both;\n  -moz-animation-fill-mode: both;\n  animation-fill-mode: both; }\n\n.slide-in-right-add-active {\n  -webkit-animation-name: slideInFromRight;\n  -moz-animation-name: slideInFromRight;\n  animation-name: slideInFromRight; }\n\n.slide-out-right {\n  -webkit-transform: translate3d(100%, 0, 0);\n  -moz-transform: translate3d(100%, 0, 0);\n  transform: translate3d(100%, 0, 0); }\n  .slide-out-right.ng-enter, .slide-out-right > .ng-enter {\n    -webkit-animation-name: slideOutToRight;\n    -moz-animation-name: slideOutToRight;\n    animation-name: slideOutToRight;\n    -webkit-animation-duration: 250ms;\n    -moz-animation-duration: 250ms;\n    animation-duration: 250ms;\n    -webkit-animation-timing-function: ease-in-out;\n    -moz-animation-timing-function: ease-in-out;\n    animation-timing-function: ease-in-out;\n    -webkit-animation-fill-mode: both;\n    -moz-animation-fill-mode: both;\n    animation-fill-mode: both; }\n  .slide-out-right.ng-leave, .slide-out-right > .ng-leave {\n    -webkit-animation-name: slideOutToRight;\n    -moz-animation-name: slideOutToRight;\n    animation-name: slideOutToRight;\n    -webkit-animation-duration: 250ms;\n    -moz-animation-duration: 250ms;\n    animation-duration: 250ms;\n    -webkit-animation-timing-function: ease-in-out;\n    -moz-animation-timing-function: ease-in-out;\n    animation-timing-function: ease-in-out;\n    -webkit-animation-fill-mode: both;\n    -moz-animation-fill-mode: both;\n    animation-fill-mode: both; }\n\n.slide-out-right-add {\n  -webkit-transform: translate3d(0, 0, 0);\n  -moz-transform: translate3d(0, 0, 0);\n  transform: translate3d(0, 0, 0);\n  -webkit-animation-duration: 250ms;\n  -moz-animation-duration: 250ms;\n  animation-duration: 250ms;\n  -webkit-animation-timing-function: ease-in-out;\n  -moz-animation-timing-function: ease-in-out;\n  animation-timing-function: ease-in-out;\n  -webkit-animation-fill-mode: both;\n  -moz-animation-fill-mode: both;\n  animation-fill-mode: both; }\n\n.slide-out-right-add-active {\n  -webkit-animation-name: slideOutToRight;\n  -moz-animation-name: slideOutToRight;\n  animation-name: slideOutToRight; }\n\n/**\n * Slide up from the bottom, used for modals\n * --------------------------------------------------\n */\n.slide-in-up {\n  -webkit-transform: translate3d(0, 100%, 0);\n  -moz-transform: translate3d(0, 100%, 0);\n  transform: translate3d(0, 100%, 0); }\n\n.slide-in-up.ng-enter, .slide-in-up > .ng-enter {\n  -webkit-transition: all cubic-bezier(0.1, 0.7, 0.1, 1) 400ms;\n  -moz-transition: all cubic-bezier(0.1, 0.7, 0.1, 1) 400ms;\n  transition: all cubic-bezier(0.1, 0.7, 0.1, 1) 400ms; }\n\n.slide-in-up.ng-enter-active, .slide-in-up > .ng-enter-active {\n  -webkit-transform: translate3d(0, 0, 0);\n  -moz-transform: translate3d(0, 0, 0);\n  transform: translate3d(0, 0, 0); }\n\n.slide-in-up.ng-leave, .slide-in-up > .ng-leave {\n  -webkit-transition: all ease-in-out 250ms;\n  -moz-transition: all ease-in-out 250ms;\n  transition: all ease-in-out 250ms; }\n\n.fade-in {\n  -webkit-animation: fadeOut 0.3s;\n  -moz-animation: fadeOut 0.3s;\n  animation: fadeOut 0.3s; }\n  .fade-in.active {\n    -webkit-animation: fadeIn 0.3s;\n    -moz-animation: fadeIn 0.3s;\n    animation: fadeIn 0.3s; }\n\n.fade-in-not-out.ng-enter, .fade-in-not-out .ng-enter {\n  -webkit-animation: fadeIn 0.3s;\n  -moz-animation: fadeIn 0.3s;\n  animation: fadeIn 0.3s;\n  position: relative; }\n.fade-in-not-out.ng-leave, .fade-in-not-out .ng-leave {\n  display: none; }\n\n/**\n * Some component specific animations\n */\n.nav-title-slide-ios7:not(.no-animation) .button.back-button {\n  -webkit-transition: all 340ms;\n  -moz-transition: all 340ms;\n  transition: all 340ms;\n  -webkit-transition-timing-function: cubic-bezier(0.4, 0.6, 0.2, 1);\n  -moz-transition-timing-function: cubic-bezier(0.4, 0.6, 0.2, 1);\n  transition-timing-function: cubic-bezier(0.4, 0.6, 0.2, 1);\n  -webkit-transform: translate3d(0%, 0, 0);\n  -moz-transform: translate3d(0%, 0, 0);\n  transform: translate3d(0%, 0, 0);\n  opacity: 1; }\n  .nav-title-slide-ios7:not(.no-animation) .button.back-button.active, .nav-title-slide-ios7:not(.no-animation) .button.back-button.activated {\n    opacity: 0.5; }\n  .nav-title-slide-ios7:not(.no-animation) .button.back-button.ng-hide {\n    opacity: 0;\n    -webkit-transform: translate3d(30%, 0, 0);\n    -moz-transform: translate3d(30%, 0, 0);\n    transform: translate3d(30%, 0, 0); }\n  .nav-title-slide-ios7:not(.no-animation) .button.back-button.ng-hide-add, .nav-title-slide-ios7:not(.no-animation) .button.back-button.ng-hide-remove {\n    display: block !important; }\n  .nav-title-slide-ios7:not(.no-animation) .button.back-button.ng-hide-add {\n    position: absolute; }\n.nav-title-slide-ios7 > .ng-enter, .nav-title-slide-ios7.ng-enter, .nav-title-slide-ios7 > .ng-leave, .nav-title-slide-ios7.ng-leave {\n  -webkit-transition: all 340ms;\n  -moz-transition: all 340ms;\n  transition: all 340ms;\n  -webkit-transition-timing-function: cubic-bezier(0.4, 0.6, 0.2, 1);\n  -moz-transition-timing-function: cubic-bezier(0.4, 0.6, 0.2, 1);\n  transition-timing-function: cubic-bezier(0.4, 0.6, 0.2, 1);\n  opacity: 1; }\n.nav-title-slide-ios7 > .ng-enter, .nav-title-slide-ios7.ng-enter {\n  -webkit-transform: translate3d(30%, 0, 0);\n  -moz-transform: translate3d(30%, 0, 0);\n  transform: translate3d(30%, 0, 0);\n  opacity: 0; }\n  .nav-title-slide-ios7 > .ng-enter.title, .nav-title-slide-ios7.ng-enter.title {\n    -webkit-transform: translate3d(100%, 0, 0);\n    -moz-transform: translate3d(100%, 0, 0);\n    transform: translate3d(100%, 0, 0); }\n.nav-title-slide-ios7 > .ng-enter.ng-enter-active, .nav-title-slide-ios7.ng-enter.ng-enter-active {\n  -webkit-transform: translate3d(0, 0, 0);\n  -moz-transform: translate3d(0, 0, 0);\n  transform: translate3d(0, 0, 0);\n  opacity: 1; }\n.nav-title-slide-ios7 > .ng-leave.ng-leave-active, .nav-title-slide-ios7.ng-leave.ng-leave-active {\n  -webkit-transform: translate3d(-30%, 0, 0);\n  -moz-transform: translate3d(-30%, 0, 0);\n  transform: translate3d(-30%, 0, 0);\n  opacity: 0; }\n.nav-title-slide-ios7.reverse > .ng-enter, .nav-title-slide-ios7.reverse.ng-enter, .nav-title-slide-ios7.reverse > .ng-leave, .nav-title-slide-ios7.reverse.ng-leave {\n  -webkit-transition: all 340ms;\n  -moz-transition: all 340ms;\n  transition: all 340ms;\n  -webkit-transition-timing-function: cubic-bezier(0.4, 0.6, 0.2, 1);\n  -moz-transition-timing-function: cubic-bezier(0.4, 0.6, 0.2, 1);\n  transition-timing-function: cubic-bezier(0.4, 0.6, 0.2, 1);\n  opacity: 1; }\n.nav-title-slide-ios7.reverse > .ng-enter, .nav-title-slide-ios7.reverse.ng-enter {\n  -webkit-transform: translate3d(-30%, 0, 0);\n  -moz-transform: translate3d(-30%, 0, 0);\n  transform: translate3d(-30%, 0, 0);\n  opacity: 0; }\n.nav-title-slide-ios7.reverse > .ng-enter.ng-enter-active, .nav-title-slide-ios7.reverse.ng-enter.ng-enter-active {\n  -webkit-transform: translate3d(0, 0, 0);\n  -moz-transform: translate3d(0, 0, 0);\n  transform: translate3d(0, 0, 0);\n  opacity: 1; }\n.nav-title-slide-ios7.reverse > .ng-leave.ng-leave-active, .nav-title-slide-ios7.reverse.ng-leave.ng-leave-active {\n  -webkit-transform: translate3d(100%, 0, 0);\n  -moz-transform: translate3d(100%, 0, 0);\n  transform: translate3d(100%, 0, 0);\n  opacity: 0; }\n\n.nav-title-android:not(.no-animation) .button.back-button {\n  -webkit-transition: all 200ms;\n  -moz-transition: all 200ms;\n  transition: all 200ms;\n  -webkit-transition-timing-function: linear;\n  -moz-transition-timing-function: linear;\n  transition-timing-function: linear;\n  opacity: 1; }\n  .nav-title-android:not(.no-animation) .button.back-button.ng-hide {\n    opacity: 0; }\n  .nav-title-android:not(.no-animation) .button.back-button.ng-hide-add, .nav-title-android:not(.no-animation) .button.back-button.ng-hide-remove {\n    display: block !important; }\n  .nav-title-android:not(.no-animation) .button.back-button.ng-hide-add {\n    position: absolute; }\n.nav-title-android > .ng-enter, .nav-title-android.ng-enter, .nav-title-android > .ng-leave, .nav-title-android.ng-leave {\n  -webkit-transition: all 200ms;\n  -moz-transition: all 200ms;\n  transition: all 200ms;\n  -webkit-transition-timing-function: linear;\n  -moz-transition-timing-function: linear;\n  transition-timing-function: linear; }\n.nav-title-android > .ng-enter, .nav-title-android.ng-enter {\n  opacity: 0; }\n.nav-title-android > .ng-enter.ng-enter-active, .nav-title-android.ng-enter.ng-enter-active {\n  opacity: 1; }\n.nav-title-android > .ng-leave.ng-leave-active, .nav-title-android.ng-leave.ng-leave-active {\n  opacity: 0; }\n\n/**\n * Grid\n * --------------------------------------------------\n * Using flexbox for the grid, inspired by Philip Walton:\n * http://philipwalton.github.io/solved-by-flexbox/demos/grids/\n * By default each .col within a .row will evenly take up\n * available width, and the height of each .col with take\n * up the height of the tallest .col in the same .row.\n */\n.row {\n  display: -webkit-box;\n  display: -webkit-flex;\n  display: -moz-box;\n  display: -moz-flex;\n  display: -ms-flexbox;\n  display: flex;\n  padding: 5px;\n  width: 100%; }\n\n.row + .row {\n  margin-top: -5px;\n  padding-top: 0; }\n\n.col {\n  -webkit-box-flex: 1;\n  -webkit-flex: 1;\n  -moz-box-flex: 1;\n  -moz-flex: 1;\n  -ms-flex: 1;\n  flex: 1;\n  display: block;\n  padding: 5px;\n  width: 100%; }\n\n/* Vertically Align Columns */\n/* .row-* vertically aligns every .col in the .row */\n.row-top {\n  -webkit-box-align: start;\n  -ms-flex-align: start;\n  -webkit-align-items: flex-start;\n  -moz-align-items: flex-start;\n  align-items: flex-start; }\n\n.row-bottom {\n  -webkit-box-align: end;\n  -ms-flex-align: end;\n  -webkit-align-items: flex-end;\n  -moz-align-items: flex-end;\n  align-items: flex-end; }\n\n.row-center {\n  -webkit-box-align: center;\n  -ms-flex-align: center;\n  -webkit-align-items: center;\n  -moz-align-items: center;\n  align-items: center; }\n\n.row-stretch {\n  -webkit-box-align: stretch;\n  -ms-flex-align: stretch;\n  -webkit-align-items: stretch;\n  -moz-align-items: stretch;\n  align-items: stretch; }\n\n.row-baseline {\n  -webkit-box-align: baseline;\n  -ms-flex-align: baseline;\n  -webkit-align-items: baseline;\n  -moz-align-items: baseline;\n  align-items: baseline; }\n\n/* .col-* vertically aligns an individual .col */\n.col-top {\n  -webkit-align-self: flex-start;\n  -moz-align-self: flex-start;\n  -ms-flex-item-align: start;\n  align-self: flex-start; }\n\n.col-bottom {\n  -webkit-align-self: flex-end;\n  -moz-align-self: flex-end;\n  -ms-flex-item-align: end;\n  align-self: flex-end; }\n\n.col-center {\n  -webkit-align-self: center;\n  -moz-align-self: center;\n  -ms-flex-item-align: center;\n  align-self: center; }\n\n/* Column Offsets */\n.col-offset-10 {\n  margin-left: 10%; }\n\n.col-offset-20 {\n  margin-left: 20%; }\n\n.col-offset-25 {\n  margin-left: 25%; }\n\n.col-offset-33, .col-offset-34 {\n  margin-left: 33.3333%; }\n\n.col-offset-50 {\n  margin-left: 50%; }\n\n.col-offset-66, .col-offset-67 {\n  margin-left: 66.6666%; }\n\n.col-offset-75 {\n  margin-left: 75%; }\n\n.col-offset-80 {\n  margin-left: 80%; }\n\n.col-offset-90 {\n  margin-left: 90%; }\n\n/* Explicit Column Percent Sizes */\n/* By default each grid column will evenly distribute */\n/* across the grid. However, you can specify individual */\n/* columns to take up a certain size of the available area */\n.col-10 {\n  -webkit-box-flex: 0;\n  -webkit-flex: 0 0 10%;\n  -moz-box-flex: 0;\n  -moz-flex: 0 0 10%;\n  -ms-flex: 0 0 10%;\n  flex: 0 0 10%;\n  max-width: 10%; }\n\n.col-20 {\n  -webkit-box-flex: 0;\n  -webkit-flex: 0 0 20%;\n  -moz-box-flex: 0;\n  -moz-flex: 0 0 20%;\n  -ms-flex: 0 0 20%;\n  flex: 0 0 20%;\n  max-width: 20%; }\n\n.col-25 {\n  -webkit-box-flex: 0;\n  -webkit-flex: 0 0 25%;\n  -moz-box-flex: 0;\n  -moz-flex: 0 0 25%;\n  -ms-flex: 0 0 25%;\n  flex: 0 0 25%;\n  max-width: 25%; }\n\n.col-33, .col-34 {\n  -webkit-box-flex: 0;\n  -webkit-flex: 0 0 33.3333%;\n  -moz-box-flex: 0;\n  -moz-flex: 0 0 33.3333%;\n  -ms-flex: 0 0 33.3333%;\n  flex: 0 0 33.3333%;\n  max-width: 33.3333%; }\n\n.col-50 {\n  -webkit-box-flex: 0;\n  -webkit-flex: 0 0 50%;\n  -moz-box-flex: 0;\n  -moz-flex: 0 0 50%;\n  -ms-flex: 0 0 50%;\n  flex: 0 0 50%;\n  max-width: 50%; }\n\n.col-66, .col-67 {\n  -webkit-box-flex: 0;\n  -webkit-flex: 0 0 66.6666%;\n  -moz-box-flex: 0;\n  -moz-flex: 0 0 66.6666%;\n  -ms-flex: 0 0 66.6666%;\n  flex: 0 0 66.6666%;\n  max-width: 66.6666%; }\n\n.col-75 {\n  -webkit-box-flex: 0;\n  -webkit-flex: 0 0 75%;\n  -moz-box-flex: 0;\n  -moz-flex: 0 0 75%;\n  -ms-flex: 0 0 75%;\n  flex: 0 0 75%;\n  max-width: 75%; }\n\n.col-80 {\n  -webkit-box-flex: 0;\n  -webkit-flex: 0 0 80%;\n  -moz-box-flex: 0;\n  -moz-flex: 0 0 80%;\n  -ms-flex: 0 0 80%;\n  flex: 0 0 80%;\n  max-width: 80%; }\n\n.col-90 {\n  -webkit-box-flex: 0;\n  -webkit-flex: 0 0 90%;\n  -moz-box-flex: 0;\n  -moz-flex: 0 0 90%;\n  -ms-flex: 0 0 90%;\n  flex: 0 0 90%;\n  max-width: 90%; }\n\n/* Responsive Grid Classes */\n/* Adding a class of responsive-X to a row */\n/* will trigger the flex-direction to */\n/* change to column and add some margin */\n/* to any columns in the row for clearity */\n@media (max-width: 567px) {\n  .responsive-sm {\n    -webkit-box-direction: normal;\n    -moz-box-direction: normal;\n    -webkit-box-orient: vertical;\n    -moz-box-orient: vertical;\n    -webkit-flex-direction: column;\n    -ms-flex-direction: column;\n    flex-direction: column; }\n    .responsive-sm .col, .responsive-sm .col-10, .responsive-sm .col-20, .responsive-sm .col-25, .responsive-sm .col-33, .responsive-sm .col-34, .responsive-sm .col-50, .responsive-sm .col-66, .responsive-sm .col-67, .responsive-sm .col-75, .responsive-sm .col-80, .responsive-sm .col-90 {\n      -webkit-box-flex: 1;\n      -webkit-flex: 1;\n      -moz-box-flex: 1;\n      -moz-flex: 1;\n      -ms-flex: 1;\n      flex: 1;\n      margin-bottom: 15px;\n      margin-left: 0;\n      max-width: 100%;\n      width: 100%; } }\n\n@media (max-width: 767px) {\n  .responsive-md {\n    -webkit-box-direction: normal;\n    -moz-box-direction: normal;\n    -webkit-box-orient: vertical;\n    -moz-box-orient: vertical;\n    -webkit-flex-direction: column;\n    -ms-flex-direction: column;\n    flex-direction: column; }\n    .responsive-md .col, .responsive-md .col-10, .responsive-md .col-20, .responsive-md .col-25, .responsive-md .col-33, .responsive-md .col-34, .responsive-md .col-50, .responsive-md .col-66, .responsive-md .col-67, .responsive-md .col-75, .responsive-md .col-80, .responsive-md .col-90 {\n      -webkit-box-flex: 1;\n      -webkit-flex: 1;\n      -moz-box-flex: 1;\n      -moz-flex: 1;\n      -ms-flex: 1;\n      flex: 1;\n      margin-bottom: 15px;\n      margin-left: 0;\n      max-width: 100%;\n      width: 100%; } }\n\n@media (max-width: 1023px) {\n  .responsive-lg {\n    -webkit-box-direction: normal;\n    -moz-box-direction: normal;\n    -webkit-box-orient: vertical;\n    -moz-box-orient: vertical;\n    -webkit-flex-direction: column;\n    -ms-flex-direction: column;\n    flex-direction: column; }\n    .responsive-lg .col, .responsive-lg .col-10, .responsive-lg .col-20, .responsive-lg .col-25, .responsive-lg .col-33, .responsive-lg .col-34, .responsive-lg .col-50, .responsive-lg .col-66, .responsive-lg .col-67, .responsive-lg .col-75, .responsive-lg .col-80, .responsive-lg .col-90 {\n      -webkit-box-flex: 1;\n      -webkit-flex: 1;\n      -moz-box-flex: 1;\n      -moz-flex: 1;\n      -ms-flex: 1;\n      flex: 1;\n      margin-bottom: 15px;\n      margin-left: 0;\n      max-width: 100%;\n      width: 100%; } }\n\n/**\n * Utility Classes\n * --------------------------------------------------\n */\n.hide {\n  display: none; }\n\n.opacity-hide {\n  opacity: 0; }\n\n.grade-b .opacity-hide, .grade-c .opacity-hide {\n  opacity: 1;\n  display: none; }\n\n.show {\n  display: block; }\n\n.opacity-show {\n  opacity: 1; }\n\n.invisible {\n  visibility: hidden; }\n\n.keyboard-open .hide-on-keyboard-open {\n  display: none; }\n\n.keyboard-open .tabs.hide-on-keyboard-open + .pane .has-tabs, .keyboard-open .bar-footer.hide-on-keyboard-open + .pane .has-footer {\n  bottom: 0; }\n\n.inline {\n  display: inline-block; }\n\n.disable-pointer-events {\n  pointer-events: none; }\n\n.enable-pointer-events {\n  pointer-events: auto; }\n\n.disable-user-behavior {\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  -ms-user-select: none;\n  user-select: none;\n  -webkit-touch-callout: none;\n  -webkit-tap-highlight-color: rgba(0, 0, 0, 0);\n  -webkit-tap-highlight-color: transparent;\n  -webkit-user-drag: none;\n  -ms-touch-action: none;\n  -ms-content-zooming: none; }\n\n.no-resize {\n  resize: none; }\n\n.block {\n  display: block;\n  clear: both; }\n  .block:after {\n    display: block;\n    visibility: hidden;\n    clear: both;\n    height: 0;\n    content: \".\"; }\n\n.full-image {\n  width: 100%; }\n\n.clearfix {\n  *zoom: 1; }\n  .clearfix:before, .clearfix:after {\n    display: table;\n    content: \"\";\n    line-height: 0; }\n  .clearfix:after {\n    clear: both; }\n\n/**\n * Content Padding\n * --------------------------------------------------\n */\n.padding {\n  padding: 10px; }\n\n.padding-top, .padding-vertical {\n  padding-top: 10px; }\n\n.padding-right, .padding-horizontal {\n  padding-right: 10px; }\n\n.padding-bottom, .padding-vertical {\n  padding-bottom: 10px; }\n\n.padding-left, .padding-horizontal {\n  padding-left: 10px; }\n\n/**\n * Rounded\n * --------------------------------------------------\n */\n.rounded {\n  border-radius: 4px; }\n\n/**\n * Utility Colors\n * --------------------------------------------------\n * Utility colors are added to help set a naming convention. You'll\n * notice we purposely do not use words like \"red\" or \"blue\", but\n * instead have colors which represent an emotion or generic theme.\n */\n.light, a.light {\n  color: #fff; }\n\n.light-bg {\n  background-color: #fff; }\n\n.light-border {\n  border-color: #ddd; }\n\n.stable, a.stable {\n  color: #f8f8f8; }\n\n.stable-bg {\n  background-color: #f8f8f8; }\n\n.stable-border {\n  border-color: #b2b2b2; }\n\n.positive, a.positive {\n  color: #4a87ee; }\n\n.positive-bg {\n  background-color: #4a87ee; }\n\n.positive-border {\n  border-color: #145fd7; }\n\n.calm, a.calm {\n  color: #43cee6; }\n\n.calm-bg {\n  background-color: #43cee6; }\n\n.calm-border {\n  border-color: #1aacc3; }\n\n.assertive, a.assertive {\n  color: #ef4e3a; }\n\n.assertive-bg {\n  background-color: #ef4e3a; }\n\n.assertive-border {\n  border-color: #cc2311; }\n\n.balanced, a.balanced {\n  color: #66cc33; }\n\n.balanced-bg {\n  background-color: #66cc33; }\n\n.balanced-border {\n  border-color: #498f24; }\n\n.energized, a.energized {\n  color: #f0b840; }\n\n.energized-bg {\n  background-color: #f0b840; }\n\n.energized-border {\n  border-color: #d39211; }\n\n.royal, a.royal {\n  color: #8a6de9; }\n\n.royal-bg {\n  background-color: #8a6de9; }\n\n.royal-border {\n  border-color: #552bdf; }\n\n.dark, a.dark {\n  color: #444; }\n\n.dark-bg {\n  background-color: #444; }\n\n.dark-border {\n  border-color: #111; }\n\n/**\n * Platform\n * --------------------------------------------------\n * Platform specific tweaks\n */\n/**\n * Apply roboto font\n */\n.roboto {\n  font-family: \"Roboto\", \"Helvetica Neue\", Helvetica, Arial, \"Lucida Grande\", sans-serif; }\n  .roboto input {\n    font-family: \"Roboto\", \"Helvetica Neue\", Helvetica, Arial, \"Lucida Grande\", sans-serif; }\n\n/*\n.platform-android {\n\n\n  .bar {\n    padding: 0;\n\n    line-height: 40px;\n\n    .button {\n      line-height: 40px;\n    }\n\n    .button-icon:before {\n      font-size: 24px;\n    }\n  }\n\n  .back-button {\n    &.button-icon:before {\n      line-height: 40px;\n    }\n    margin-left: -3px;\n    padding: 0px 2px !important;\n    &.ion-android-arrow-back:before {\n      font-size: 12px;\n    }\n\n    &.back-button.active,\n    &.back-button.activated {\n      background-color: rgba(0,0,0,0.1);\n    }\n  }\n\n  .item-divider {\n    background: none;\n    border-top-width: 0;\n    border-bottom-width: 2px;\n    text-transform: uppercase;\n    margin-top: 10px;\n    font-size: 14px;\n  }\n  .item {\n    border-left-width: 0;\n    border-right-width: 0;\n  }\n\n  .item-divider ~ .item:not(.item-divider) {\n    border-bottom-width: 0;\n  }\n\n  .back-button:not(.ng-hide) + .left-buttons + .title {\n    // Don't allow normal titles in this mode\n    display: none;\n  }\n\n  .bar .title {\n    text-align: left;\n    font-weight: normal;\n  }\n\n  font-family: 'Roboto';\n\n  h1, h2, h3, h4, h5 {\n    font-family: 'Roboto', $font-family-base;\n  }\n\n  .tab-item {\n    font-family: 'Roboto', $font-family-base;\n  }\n\n\n  input, button, select, textarea {\n    font-family: 'Roboto', $font-family-base;\n  }\n  */\n.platform-ios.platform-cordova:not(.fullscreen) .bar-header:not(.bar-subheader) {\n  height: 64px; }\n  .platform-ios.platform-cordova:not(.fullscreen) .bar-header:not(.bar-subheader).item-input-inset .item-input-wrapper {\n    margin-top: 19px !important; }\n  .platform-ios.platform-cordova:not(.fullscreen) .bar-header:not(.bar-subheader) > * {\n    margin-top: 20px; }\n.platform-ios.platform-cordova:not(.fullscreen) .tabs-top > .tabs, .platform-ios.platform-cordova:not(.fullscreen) .tabs.tabs-top {\n  top: 64px; }\n.platform-ios.platform-cordova:not(.fullscreen) .has-header, .platform-ios.platform-cordova:not(.fullscreen) .bar-subheader {\n  top: 64px; }\n.platform-ios.platform-cordova:not(.fullscreen) .has-subheader {\n  top: 108px; }\n.platform-ios.platform-cordova:not(.fullscreen) .has-tabs-top {\n  top: 113px; }\n.platform-ios.platform-cordova:not(.fullscreen) .has-header.has-subheader.has-tabs-top {\n  top: 157px; }\n.platform-ios.platform-cordova.status-bar-hide {\n  margin-bottom: 20px; }\n\n@media (orientation: landscape) {\n  .platform-ios.platform-browser.platform-ipad {\n    position: fixed; } }\n\n.platform-c:not(.enable-transitions) * {\n  -webkit-transition: none !important;\n  transition: none !important; }\n"
  },
  {
    "path": "content/present-ionic/slides/ionic/js/angular/angular-animate.js",
    "content": "/**\n * @license AngularJS v1.2.17\n * (c) 2010-2014 Google, Inc. http://angularjs.org\n * License: MIT\n */\n(function(window, angular, undefined) {'use strict';\n\n/* jshint maxlen: false */\n\n/**\n * @ngdoc module\n * @name ngAnimate\n * @description\n *\n * # ngAnimate\n *\n * The `ngAnimate` module provides support for JavaScript, CSS3 transition and CSS3 keyframe animation hooks within existing core and custom directives.\n *\n *\n * <div doc-module-components=\"ngAnimate\"></div>\n *\n * # Usage\n *\n * To see animations in action, all that is required is to define the appropriate CSS classes\n * or to register a JavaScript animation via the myModule.animation() function. The directives that support animation automatically are:\n * `ngRepeat`, `ngInclude`, `ngIf`, `ngSwitch`, `ngShow`, `ngHide`, `ngView` and `ngClass`. Custom directives can take advantage of animation\n * by using the `$animate` service.\n *\n * Below is a more detailed breakdown of the supported animation events provided by pre-existing ng directives:\n *\n * | Directive                                                 | Supported Animations                               |\n * |---------------------------------------------------------- |----------------------------------------------------|\n * | {@link ng.directive:ngRepeat#usage_animations ngRepeat}         | enter, leave and move                              |\n * | {@link ngRoute.directive:ngView#usage_animations ngView}        | enter and leave                                    |\n * | {@link ng.directive:ngInclude#usage_animations ngInclude}       | enter and leave                                    |\n * | {@link ng.directive:ngSwitch#usage_animations ngSwitch}         | enter and leave                                    |\n * | {@link ng.directive:ngIf#usage_animations ngIf}                 | enter and leave                                    |\n * | {@link ng.directive:ngClass#usage_animations ngClass}           | add and remove                                     |\n * | {@link ng.directive:ngShow#usage_animations ngShow & ngHide}    | add and remove (the ng-hide class value)           |\n * | {@link ng.directive:form#usage_animations form}                 | add and remove (dirty, pristine, valid, invalid & all other validations)                |\n * | {@link ng.directive:ngModel#usage_animations ngModel}           | add and remove (dirty, pristine, valid, invalid & all other validations)                |\n *\n * You can find out more information about animations upon visiting each directive page.\n *\n * Below is an example of how to apply animations to a directive that supports animation hooks:\n *\n * ```html\n * <style type=\"text/css\">\n * .slide.ng-enter, .slide.ng-leave {\n *   -webkit-transition:0.5s linear all;\n *   transition:0.5s linear all;\n * }\n *\n * .slide.ng-enter { }        /&#42; starting animations for enter &#42;/\n * .slide.ng-enter-active { } /&#42; terminal animations for enter &#42;/\n * .slide.ng-leave { }        /&#42; starting animations for leave &#42;/\n * .slide.ng-leave-active { } /&#42; terminal animations for leave &#42;/\n * </style>\n *\n * <!--\n * the animate service will automatically add .ng-enter and .ng-leave to the element\n * to trigger the CSS transition/animations\n * -->\n * <ANY class=\"slide\" ng-include=\"...\"></ANY>\n * ```\n *\n * Keep in mind that if an animation is running, any child elements cannot be animated until the parent element's\n * animation has completed.\n *\n * <h2>CSS-defined Animations</h2>\n * The animate service will automatically apply two CSS classes to the animated element and these two CSS classes\n * are designed to contain the start and end CSS styling. Both CSS transitions and keyframe animations are supported\n * and can be used to play along with this naming structure.\n *\n * The following code below demonstrates how to perform animations using **CSS transitions** with Angular:\n *\n * ```html\n * <style type=\"text/css\">\n * /&#42;\n *  The animate class is apart of the element and the ng-enter class\n *  is attached to the element once the enter animation event is triggered\n * &#42;/\n * .reveal-animation.ng-enter {\n *  -webkit-transition: 1s linear all; /&#42; Safari/Chrome &#42;/\n *  transition: 1s linear all; /&#42; All other modern browsers and IE10+ &#42;/\n *\n *  /&#42; The animation preparation code &#42;/\n *  opacity: 0;\n * }\n *\n * /&#42;\n *  Keep in mind that you want to combine both CSS\n *  classes together to avoid any CSS-specificity\n *  conflicts\n * &#42;/\n * .reveal-animation.ng-enter.ng-enter-active {\n *  /&#42; The animation code itself &#42;/\n *  opacity: 1;\n * }\n * </style>\n *\n * <div class=\"view-container\">\n *   <div ng-view class=\"reveal-animation\"></div>\n * </div>\n * ```\n *\n * The following code below demonstrates how to perform animations using **CSS animations** with Angular:\n *\n * ```html\n * <style type=\"text/css\">\n * .reveal-animation.ng-enter {\n *   -webkit-animation: enter_sequence 1s linear; /&#42; Safari/Chrome &#42;/\n *   animation: enter_sequence 1s linear; /&#42; IE10+ and Future Browsers &#42;/\n * }\n * @-webkit-keyframes enter_sequence {\n *   from { opacity:0; }\n *   to { opacity:1; }\n * }\n * @keyframes enter_sequence {\n *   from { opacity:0; }\n *   to { opacity:1; }\n * }\n * </style>\n *\n * <div class=\"view-container\">\n *   <div ng-view class=\"reveal-animation\"></div>\n * </div>\n * ```\n *\n * Both CSS3 animations and transitions can be used together and the animate service will figure out the correct duration and delay timing.\n *\n * Upon DOM mutation, the event class is added first (something like `ng-enter`), then the browser prepares itself to add\n * the active class (in this case `ng-enter-active`) which then triggers the animation. The animation module will automatically\n * detect the CSS code to determine when the animation ends. Once the animation is over then both CSS classes will be\n * removed from the DOM. If a browser does not support CSS transitions or CSS animations then the animation will start and end\n * immediately resulting in a DOM element that is at its final state. This final state is when the DOM element\n * has no CSS transition/animation classes applied to it.\n *\n * <h3>CSS Staggering Animations</h3>\n * A Staggering animation is a collection of animations that are issued with a slight delay in between each successive operation resulting in a\n * curtain-like effect. The ngAnimate module, as of 1.2.0, supports staggering animations and the stagger effect can be\n * performed by creating a **ng-EVENT-stagger** CSS class and attaching that class to the base CSS class used for\n * the animation. The style property expected within the stagger class can either be a **transition-delay** or an\n * **animation-delay** property (or both if your animation contains both transitions and keyframe animations).\n *\n * ```css\n * .my-animation.ng-enter {\n *   /&#42; standard transition code &#42;/\n *   -webkit-transition: 1s linear all;\n *   transition: 1s linear all;\n *   opacity:0;\n * }\n * .my-animation.ng-enter-stagger {\n *   /&#42; this will have a 100ms delay between each successive leave animation &#42;/\n *   -webkit-transition-delay: 0.1s;\n *   transition-delay: 0.1s;\n *\n *   /&#42; in case the stagger doesn't work then these two values\n *    must be set to 0 to avoid an accidental CSS inheritance &#42;/\n *   -webkit-transition-duration: 0s;\n *   transition-duration: 0s;\n * }\n * .my-animation.ng-enter.ng-enter-active {\n *   /&#42; standard transition styles &#42;/\n *   opacity:1;\n * }\n * ```\n *\n * Staggering animations work by default in ngRepeat (so long as the CSS class is defined). Outside of ngRepeat, to use staggering animations\n * on your own, they can be triggered by firing multiple calls to the same event on $animate. However, the restrictions surrounding this\n * are that each of the elements must have the same CSS className value as well as the same parent element. A stagger operation\n * will also be reset if more than 10ms has passed after the last animation has been fired.\n *\n * The following code will issue the **ng-leave-stagger** event on the element provided:\n *\n * ```js\n * var kids = parent.children();\n *\n * $animate.leave(kids[0]); //stagger index=0\n * $animate.leave(kids[1]); //stagger index=1\n * $animate.leave(kids[2]); //stagger index=2\n * $animate.leave(kids[3]); //stagger index=3\n * $animate.leave(kids[4]); //stagger index=4\n *\n * $timeout(function() {\n *   //stagger has reset itself\n *   $animate.leave(kids[5]); //stagger index=0\n *   $animate.leave(kids[6]); //stagger index=1\n * }, 100, false);\n * ```\n *\n * Stagger animations are currently only supported within CSS-defined animations.\n *\n * <h2>JavaScript-defined Animations</h2>\n * In the event that you do not want to use CSS3 transitions or CSS3 animations or if you wish to offer animations on browsers that do not\n * yet support CSS transitions/animations, then you can make use of JavaScript animations defined inside of your AngularJS module.\n *\n * ```js\n * //!annotate=\"YourApp\" Your AngularJS Module|Replace this or ngModule with the module that you used to define your application.\n * var ngModule = angular.module('YourApp', ['ngAnimate']);\n * ngModule.animation('.my-crazy-animation', function() {\n *   return {\n *     enter: function(element, done) {\n *       //run the animation here and call done when the animation is complete\n *       return function(cancelled) {\n *         //this (optional) function will be called when the animation\n *         //completes or when the animation is cancelled (the cancelled\n *         //flag will be set to true if cancelled).\n *       };\n *     },\n *     leave: function(element, done) { },\n *     move: function(element, done) { },\n *\n *     //animation that can be triggered before the class is added\n *     beforeAddClass: function(element, className, done) { },\n *\n *     //animation that can be triggered after the class is added\n *     addClass: function(element, className, done) { },\n *\n *     //animation that can be triggered before the class is removed\n *     beforeRemoveClass: function(element, className, done) { },\n *\n *     //animation that can be triggered after the class is removed\n *     removeClass: function(element, className, done) { }\n *   };\n * });\n * ```\n *\n * JavaScript-defined animations are created with a CSS-like class selector and a collection of events which are set to run\n * a javascript callback function. When an animation is triggered, $animate will look for a matching animation which fits\n * the element's CSS class attribute value and then run the matching animation event function (if found).\n * In other words, if the CSS classes present on the animated element match any of the JavaScript animations then the callback function will\n * be executed. It should be also noted that only simple, single class selectors are allowed (compound class selectors are not supported).\n *\n * Within a JavaScript animation, an object containing various event callback animation functions is expected to be returned.\n * As explained above, these callbacks are triggered based on the animation event. Therefore if an enter animation is run,\n * and the JavaScript animation is found, then the enter callback will handle that animation (in addition to the CSS keyframe animation\n * or transition code that is defined via a stylesheet).\n *\n */\n\nangular.module('ngAnimate', ['ng'])\n\n  /**\n   * @ngdoc provider\n   * @name $animateProvider\n   * @description\n   *\n   * The `$animateProvider` allows developers to register JavaScript animation event handlers directly inside of a module.\n   * When an animation is triggered, the $animate service will query the $animate service to find any animations that match\n   * the provided name value.\n   *\n   * Requires the {@link ngAnimate `ngAnimate`} module to be installed.\n   *\n   * Please visit the {@link ngAnimate `ngAnimate`} module overview page learn more about how to use animations in your application.\n   *\n   */\n\n  //this private service is only used within CSS-enabled animations\n  //IE8 + IE9 do not support rAF natively, but that is fine since they\n  //also don't support transitions and keyframes which means that the code\n  //below will never be used by the two browsers.\n  .factory('$$animateReflow', ['$$rAF', '$document', function($$rAF, $document) {\n    var bod = $document[0].body;\n    return function(fn) {\n      //the returned function acts as the cancellation function\n      return $$rAF(function() {\n        //the line below will force the browser to perform a repaint\n        //so that all the animated elements within the animation frame\n        //will be properly updated and drawn on screen. This is\n        //required to perform multi-class CSS based animations with\n        //Firefox. DO NOT REMOVE THIS LINE.\n        var a = bod.offsetWidth + 1;\n        fn();\n      });\n    };\n  }])\n\n  .config(['$provide', '$animateProvider', function($provide, $animateProvider) {\n    var noop = angular.noop;\n    var forEach = angular.forEach;\n    var selectors = $animateProvider.$$selectors;\n\n    var ELEMENT_NODE = 1;\n    var NG_ANIMATE_STATE = '$$ngAnimateState';\n    var NG_ANIMATE_CLASS_NAME = 'ng-animate';\n    var rootAnimateState = {running: true};\n\n    function extractElementNode(element) {\n      for(var i = 0; i < element.length; i++) {\n        var elm = element[i];\n        if(elm.nodeType == ELEMENT_NODE) {\n          return elm;\n        }\n      }\n    }\n\n    function prepareElement(element) {\n      return element && angular.element(element);\n    }\n\n    function stripCommentsFromElement(element) {\n      return angular.element(extractElementNode(element));\n    }\n\n    function isMatchingElement(elm1, elm2) {\n      return extractElementNode(elm1) == extractElementNode(elm2);\n    }\n\n    $provide.decorator('$animate', ['$delegate', '$injector', '$sniffer', '$rootElement', '$$asyncCallback', '$rootScope', '$document',\n                            function($delegate,   $injector,   $sniffer,   $rootElement,   $$asyncCallback,    $rootScope,   $document) {\n\n      var globalAnimationCounter = 0;\n      $rootElement.data(NG_ANIMATE_STATE, rootAnimateState);\n\n      // disable animations during bootstrap, but once we bootstrapped, wait again\n      // for another digest until enabling animations. The reason why we digest twice\n      // is because all structural animations (enter, leave and move) all perform a\n      // post digest operation before animating. If we only wait for a single digest\n      // to pass then the structural animation would render its animation on page load.\n      // (which is what we're trying to avoid when the application first boots up.)\n      $rootScope.$$postDigest(function() {\n        $rootScope.$$postDigest(function() {\n          rootAnimateState.running = false;\n        });\n      });\n\n      var classNameFilter = $animateProvider.classNameFilter();\n      var isAnimatableClassName = !classNameFilter\n              ? function() { return true; }\n              : function(className) {\n                return classNameFilter.test(className);\n              };\n\n      function lookup(name) {\n        if (name) {\n          var matches = [],\n              flagMap = {},\n              classes = name.substr(1).split('.');\n\n          //the empty string value is the default animation\n          //operation which performs CSS transition and keyframe\n          //animations sniffing. This is always included for each\n          //element animation procedure if the browser supports\n          //transitions and/or keyframe animations. The default\n          //animation is added to the top of the list to prevent\n          //any previous animations from affecting the element styling\n          //prior to the element being animated.\n          if ($sniffer.transitions || $sniffer.animations) {\n            matches.push($injector.get(selectors['']));\n          }\n\n          for(var i=0; i < classes.length; i++) {\n            var klass = classes[i],\n                selectorFactoryName = selectors[klass];\n            if(selectorFactoryName && !flagMap[klass]) {\n              matches.push($injector.get(selectorFactoryName));\n              flagMap[klass] = true;\n            }\n          }\n          return matches;\n        }\n      }\n\n      function animationRunner(element, animationEvent, className) {\n        //transcluded directives may sometimes fire an animation using only comment nodes\n        //best to catch this early on to prevent any animation operations from occurring\n        var node = element[0];\n        if(!node) {\n          return;\n        }\n\n        var isSetClassOperation = animationEvent == 'setClass';\n        var isClassBased = isSetClassOperation ||\n                           animationEvent == 'addClass' ||\n                           animationEvent == 'removeClass';\n\n        var classNameAdd, classNameRemove;\n        if(angular.isArray(className)) {\n          classNameAdd = className[0];\n          classNameRemove = className[1];\n          className = classNameAdd + ' ' + classNameRemove;\n        }\n\n        var currentClassName = element.attr('class');\n        var classes = currentClassName + ' ' + className;\n        if(!isAnimatableClassName(classes)) {\n          return;\n        }\n\n        var beforeComplete = noop,\n            beforeCancel = [],\n            before = [],\n            afterComplete = noop,\n            afterCancel = [],\n            after = [];\n\n        var animationLookup = (' ' + classes).replace(/\\s+/g,'.');\n        forEach(lookup(animationLookup), function(animationFactory) {\n          var created = registerAnimation(animationFactory, animationEvent);\n          if(!created && isSetClassOperation) {\n            registerAnimation(animationFactory, 'addClass');\n            registerAnimation(animationFactory, 'removeClass');\n          }\n        });\n\n        function registerAnimation(animationFactory, event) {\n          var afterFn = animationFactory[event];\n          var beforeFn = animationFactory['before' + event.charAt(0).toUpperCase() + event.substr(1)];\n          if(afterFn || beforeFn) {\n            if(event == 'leave') {\n              beforeFn = afterFn;\n              //when set as null then animation knows to skip this phase\n              afterFn = null;\n            }\n            after.push({\n              event : event, fn : afterFn\n            });\n            before.push({\n              event : event, fn : beforeFn\n            });\n            return true;\n          }\n        }\n\n        function run(fns, cancellations, allCompleteFn) {\n          var animations = [];\n          forEach(fns, function(animation) {\n            animation.fn && animations.push(animation);\n          });\n\n          var count = 0;\n          function afterAnimationComplete(index) {\n            if(cancellations) {\n              (cancellations[index] || noop)();\n              if(++count < animations.length) return;\n              cancellations = null;\n            }\n            allCompleteFn();\n          }\n\n          //The code below adds directly to the array in order to work with\n          //both sync and async animations. Sync animations are when the done()\n          //operation is called right away. DO NOT REFACTOR!\n          forEach(animations, function(animation, index) {\n            var progress = function() {\n              afterAnimationComplete(index);\n            };\n            switch(animation.event) {\n              case 'setClass':\n                cancellations.push(animation.fn(element, classNameAdd, classNameRemove, progress));\n                break;\n              case 'addClass':\n                cancellations.push(animation.fn(element, classNameAdd || className,     progress));\n                break;\n              case 'removeClass':\n                cancellations.push(animation.fn(element, classNameRemove || className,  progress));\n                break;\n              default:\n                cancellations.push(animation.fn(element, progress));\n                break;\n            }\n          });\n\n          if(cancellations && cancellations.length === 0) {\n            allCompleteFn();\n          }\n        }\n\n        return {\n          node : node,\n          event : animationEvent,\n          className : className,\n          isClassBased : isClassBased,\n          isSetClassOperation : isSetClassOperation,\n          before : function(allCompleteFn) {\n            beforeComplete = allCompleteFn;\n            run(before, beforeCancel, function() {\n              beforeComplete = noop;\n              allCompleteFn();\n            });\n          },\n          after : function(allCompleteFn) {\n            afterComplete = allCompleteFn;\n            run(after, afterCancel, function() {\n              afterComplete = noop;\n              allCompleteFn();\n            });\n          },\n          cancel : function() {\n            if(beforeCancel) {\n              forEach(beforeCancel, function(cancelFn) {\n                (cancelFn || noop)(true);\n              });\n              beforeComplete(true);\n            }\n            if(afterCancel) {\n              forEach(afterCancel, function(cancelFn) {\n                (cancelFn || noop)(true);\n              });\n              afterComplete(true);\n            }\n          }\n        };\n      }\n\n      /**\n       * @ngdoc service\n       * @name $animate\n       * @kind function\n       *\n       * @description\n       * The `$animate` service provides animation detection support while performing DOM operations (enter, leave and move) as well as during addClass and removeClass operations.\n       * When any of these operations are run, the $animate service\n       * will examine any JavaScript-defined animations (which are defined by using the $animateProvider provider object)\n       * as well as any CSS-defined animations against the CSS classes present on the element once the DOM operation is run.\n       *\n       * The `$animate` service is used behind the scenes with pre-existing directives and animation with these directives\n       * will work out of the box without any extra configuration.\n       *\n       * Requires the {@link ngAnimate `ngAnimate`} module to be installed.\n       *\n       * Please visit the {@link ngAnimate `ngAnimate`} module overview page learn more about how to use animations in your application.\n       *\n       */\n      return {\n        /**\n         * @ngdoc method\n         * @name $animate#enter\n         * @kind function\n         *\n         * @description\n         * Appends the element to the parentElement element that resides in the document and then runs the enter animation. Once\n         * the animation is started, the following CSS classes will be present on the element for the duration of the animation:\n         *\n         * Below is a breakdown of each step that occurs during enter animation:\n         *\n         * | Animation Step                                                                               | What the element class attribute looks like |\n         * |----------------------------------------------------------------------------------------------|---------------------------------------------|\n         * | 1. $animate.enter(...) is called                                                             | class=\"my-animation\"                        |\n         * | 2. element is inserted into the parentElement element or beside the afterElement element     | class=\"my-animation\"                        |\n         * | 3. $animate runs any JavaScript-defined animations on the element                            | class=\"my-animation ng-animate\"             |\n         * | 4. the .ng-enter class is added to the element                                               | class=\"my-animation ng-animate ng-enter\"    |\n         * | 5. $animate scans the element styles to get the CSS transition/animation duration and delay  | class=\"my-animation ng-animate ng-enter\"    |\n         * | 6. $animate waits for 10ms (this performs a reflow)                                          | class=\"my-animation ng-animate ng-enter\"    |\n         * | 7. the .ng-enter-active and .ng-animate-active classes are added (this triggers the CSS transition/animation) | class=\"my-animation ng-animate ng-animate-active ng-enter ng-enter-active\" |\n         * | 8. $animate waits for X milliseconds for the animation to complete                           | class=\"my-animation ng-animate ng-animate-active ng-enter ng-enter-active\" |\n         * | 9. The animation ends and all generated CSS classes are removed from the element             | class=\"my-animation\"                        |\n         * | 10. The doneCallback() callback is fired (if provided)                                       | class=\"my-animation\"                        |\n         *\n         * @param {DOMElement} element the element that will be the focus of the enter animation\n         * @param {DOMElement} parentElement the parent element of the element that will be the focus of the enter animation\n         * @param {DOMElement} afterElement the sibling element (which is the previous element) of the element that will be the focus of the enter animation\n         * @param {function()=} doneCallback the callback function that will be called once the animation is complete\n        */\n        enter : function(element, parentElement, afterElement, doneCallback) {\n          element = angular.element(element);\n          parentElement = prepareElement(parentElement);\n          afterElement = prepareElement(afterElement);\n\n          this.enabled(false, element);\n          $delegate.enter(element, parentElement, afterElement);\n          $rootScope.$$postDigest(function() {\n            element = stripCommentsFromElement(element);\n            performAnimation('enter', 'ng-enter', element, parentElement, afterElement, noop, doneCallback);\n          });\n        },\n\n        /**\n         * @ngdoc method\n         * @name $animate#leave\n         * @kind function\n         *\n         * @description\n         * Runs the leave animation operation and, upon completion, removes the element from the DOM. Once\n         * the animation is started, the following CSS classes will be added for the duration of the animation:\n         *\n         * Below is a breakdown of each step that occurs during leave animation:\n         *\n         * | Animation Step                                                                               | What the element class attribute looks like |\n         * |----------------------------------------------------------------------------------------------|---------------------------------------------|\n         * | 1. $animate.leave(...) is called                                                             | class=\"my-animation\"                        |\n         * | 2. $animate runs any JavaScript-defined animations on the element                            | class=\"my-animation ng-animate\"             |\n         * | 3. the .ng-leave class is added to the element                                               | class=\"my-animation ng-animate ng-leave\"    |\n         * | 4. $animate scans the element styles to get the CSS transition/animation duration and delay  | class=\"my-animation ng-animate ng-leave\"    |\n         * | 5. $animate waits for 10ms (this performs a reflow)                                          | class=\"my-animation ng-animate ng-leave\"    |\n         * | 6. the .ng-leave-active and .ng-animate-active classes is added (this triggers the CSS transition/animation) | class=\"my-animation ng-animate ng-animate-active ng-leave ng-leave-active\" |\n         * | 7. $animate waits for X milliseconds for the animation to complete                           | class=\"my-animation ng-animate ng-animate-active ng-leave ng-leave-active\" |\n         * | 8. The animation ends and all generated CSS classes are removed from the element             | class=\"my-animation\"                        |\n         * | 9. The element is removed from the DOM                                                       | ...                                         |\n         * | 10. The doneCallback() callback is fired (if provided)                                       | ...                                         |\n         *\n         * @param {DOMElement} element the element that will be the focus of the leave animation\n         * @param {function()=} doneCallback the callback function that will be called once the animation is complete\n        */\n        leave : function(element, doneCallback) {\n          element = angular.element(element);\n          cancelChildAnimations(element);\n          this.enabled(false, element);\n          $rootScope.$$postDigest(function() {\n            performAnimation('leave', 'ng-leave', stripCommentsFromElement(element), null, null, function() {\n              $delegate.leave(element);\n            }, doneCallback);\n          });\n        },\n\n        /**\n         * @ngdoc method\n         * @name $animate#move\n         * @kind function\n         *\n         * @description\n         * Fires the move DOM operation. Just before the animation starts, the animate service will either append it into the parentElement container or\n         * add the element directly after the afterElement element if present. Then the move animation will be run. Once\n         * the animation is started, the following CSS classes will be added for the duration of the animation:\n         *\n         * Below is a breakdown of each step that occurs during move animation:\n         *\n         * | Animation Step                                                                               | What the element class attribute looks like |\n         * |----------------------------------------------------------------------------------------------|---------------------------------------------|\n         * | 1. $animate.move(...) is called                                                              | class=\"my-animation\"                        |\n         * | 2. element is moved into the parentElement element or beside the afterElement element        | class=\"my-animation\"                        |\n         * | 3. $animate runs any JavaScript-defined animations on the element                            | class=\"my-animation ng-animate\"             |\n         * | 4. the .ng-move class is added to the element                                                | class=\"my-animation ng-animate ng-move\"     |\n         * | 5. $animate scans the element styles to get the CSS transition/animation duration and delay  | class=\"my-animation ng-animate ng-move\"     |\n         * | 6. $animate waits for 10ms (this performs a reflow)                                          | class=\"my-animation ng-animate ng-move\"     |\n         * | 7. the .ng-move-active and .ng-animate-active classes is added (this triggers the CSS transition/animation) | class=\"my-animation ng-animate ng-animate-active ng-move ng-move-active\" |\n         * | 8. $animate waits for X milliseconds for the animation to complete                           | class=\"my-animation ng-animate ng-animate-active ng-move ng-move-active\" |\n         * | 9. The animation ends and all generated CSS classes are removed from the element             | class=\"my-animation\"                        |\n         * | 10. The doneCallback() callback is fired (if provided)                                       | class=\"my-animation\"                        |\n         *\n         * @param {DOMElement} element the element that will be the focus of the move animation\n         * @param {DOMElement} parentElement the parentElement element of the element that will be the focus of the move animation\n         * @param {DOMElement} afterElement the sibling element (which is the previous element) of the element that will be the focus of the move animation\n         * @param {function()=} doneCallback the callback function that will be called once the animation is complete\n        */\n        move : function(element, parentElement, afterElement, doneCallback) {\n          element = angular.element(element);\n          parentElement = prepareElement(parentElement);\n          afterElement = prepareElement(afterElement);\n\n          cancelChildAnimations(element);\n          this.enabled(false, element);\n          $delegate.move(element, parentElement, afterElement);\n          $rootScope.$$postDigest(function() {\n            element = stripCommentsFromElement(element);\n            performAnimation('move', 'ng-move', element, parentElement, afterElement, noop, doneCallback);\n          });\n        },\n\n        /**\n         * @ngdoc method\n         * @name $animate#addClass\n         *\n         * @description\n         * Triggers a custom animation event based off the className variable and then attaches the className value to the element as a CSS class.\n         * Unlike the other animation methods, the animate service will suffix the className value with {@type -add} in order to provide\n         * the animate service the setup and active CSS classes in order to trigger the animation (this will be skipped if no CSS transitions\n         * or keyframes are defined on the -add or base CSS class).\n         *\n         * Below is a breakdown of each step that occurs during addClass animation:\n         *\n         * | Animation Step                                                                                 | What the element class attribute looks like |\n         * |------------------------------------------------------------------------------------------------|---------------------------------------------|\n         * | 1. $animate.addClass(element, 'super') is called                                               | class=\"my-animation\"                        |\n         * | 2. $animate runs any JavaScript-defined animations on the element                              | class=\"my-animation ng-animate\"             |\n         * | 3. the .super-add class are added to the element                                               | class=\"my-animation ng-animate super-add\"   |\n         * | 4. $animate scans the element styles to get the CSS transition/animation duration and delay    | class=\"my-animation ng-animate super-add\"   |\n         * | 5. $animate waits for 10ms (this performs a reflow)                                            | class=\"my-animation ng-animate super-add\"   |\n         * | 6. the .super, .super-add-active and .ng-animate-active classes are added (this triggers the CSS transition/animation) | class=\"my-animation ng-animate ng-animate-active super super-add super-add-active\"          |\n         * | 7. $animate waits for X milliseconds for the animation to complete                             | class=\"my-animation super super-add super-add-active\"  |\n         * | 8. The animation ends and all generated CSS classes are removed from the element               | class=\"my-animation super\"                  |\n         * | 9. The super class is kept on the element                                                      | class=\"my-animation super\"                  |\n         * | 10. The doneCallback() callback is fired (if provided)                                         | class=\"my-animation super\"                  |\n         *\n         * @param {DOMElement} element the element that will be animated\n         * @param {string} className the CSS class that will be added to the element and then animated\n         * @param {function()=} doneCallback the callback function that will be called once the animation is complete\n        */\n        addClass : function(element, className, doneCallback) {\n          element = angular.element(element);\n          element = stripCommentsFromElement(element);\n          performAnimation('addClass', className, element, null, null, function() {\n            $delegate.addClass(element, className);\n          }, doneCallback);\n        },\n\n        /**\n         * @ngdoc method\n         * @name $animate#removeClass\n         *\n         * @description\n         * Triggers a custom animation event based off the className variable and then removes the CSS class provided by the className value\n         * from the element. Unlike the other animation methods, the animate service will suffix the className value with {@type -remove} in\n         * order to provide the animate service the setup and active CSS classes in order to trigger the animation (this will be skipped if\n         * no CSS transitions or keyframes are defined on the -remove or base CSS classes).\n         *\n         * Below is a breakdown of each step that occurs during removeClass animation:\n         *\n         * | Animation Step                                                                                | What the element class attribute looks like     |\n         * |-----------------------------------------------------------------------------------------------|---------------------------------------------|\n         * | 1. $animate.removeClass(element, 'super') is called                                           | class=\"my-animation super\"                  |\n         * | 2. $animate runs any JavaScript-defined animations on the element                             | class=\"my-animation super ng-animate\"       |\n         * | 3. the .super-remove class are added to the element                                           | class=\"my-animation super ng-animate super-remove\"|\n         * | 4. $animate scans the element styles to get the CSS transition/animation duration and delay   | class=\"my-animation super ng-animate super-remove\"   |\n         * | 5. $animate waits for 10ms (this performs a reflow)                                           | class=\"my-animation super ng-animate super-remove\"   |\n         * | 6. the .super-remove-active and .ng-animate-active classes are added and .super is removed (this triggers the CSS transition/animation) | class=\"my-animation ng-animate ng-animate-active super-remove super-remove-active\"          |\n         * | 7. $animate waits for X milliseconds for the animation to complete                            | class=\"my-animation ng-animate ng-animate-active super-remove super-remove-active\"   |\n         * | 8. The animation ends and all generated CSS classes are removed from the element              | class=\"my-animation\"                        |\n         * | 9. The doneCallback() callback is fired (if provided)                                         | class=\"my-animation\"                        |\n         *\n         *\n         * @param {DOMElement} element the element that will be animated\n         * @param {string} className the CSS class that will be animated and then removed from the element\n         * @param {function()=} doneCallback the callback function that will be called once the animation is complete\n        */\n        removeClass : function(element, className, doneCallback) {\n          element = angular.element(element);\n          element = stripCommentsFromElement(element);\n          performAnimation('removeClass', className, element, null, null, function() {\n            $delegate.removeClass(element, className);\n          }, doneCallback);\n        },\n\n          /**\n           *\n           * @ngdoc function\n           * @name $animate#setClass\n           * @function\n           * @description Adds and/or removes the given CSS classes to and from the element.\n           * Once complete, the done() callback will be fired (if provided).\n           * @param {DOMElement} element the element which will its CSS classes changed\n           *   removed from it\n           * @param {string} add the CSS classes which will be added to the element\n           * @param {string} remove the CSS class which will be removed from the element\n           * @param {Function=} done the callback function (if provided) that will be fired after the\n           *   CSS classes have been set on the element\n           */\n        setClass : function(element, add, remove, doneCallback) {\n          element = angular.element(element);\n          element = stripCommentsFromElement(element);\n          performAnimation('setClass', [add, remove], element, null, null, function() {\n            $delegate.setClass(element, add, remove);\n          }, doneCallback);\n        },\n\n        /**\n         * @ngdoc method\n         * @name $animate#enabled\n         * @kind function\n         *\n         * @param {boolean=} value If provided then set the animation on or off.\n         * @param {DOMElement} element If provided then the element will be used to represent the enable/disable operation\n         * @return {boolean} Current animation state.\n         *\n         * @description\n         * Globally enables/disables animations.\n         *\n        */\n        enabled : function(value, element) {\n          switch(arguments.length) {\n            case 2:\n              if(value) {\n                cleanup(element);\n              } else {\n                var data = element.data(NG_ANIMATE_STATE) || {};\n                data.disabled = true;\n                element.data(NG_ANIMATE_STATE, data);\n              }\n            break;\n\n            case 1:\n              rootAnimateState.disabled = !value;\n            break;\n\n            default:\n              value = !rootAnimateState.disabled;\n            break;\n          }\n          return !!value;\n         }\n      };\n\n      /*\n        all animations call this shared animation triggering function internally.\n        The animationEvent variable refers to the JavaScript animation event that will be triggered\n        and the className value is the name of the animation that will be applied within the\n        CSS code. Element, parentElement and afterElement are provided DOM elements for the animation\n        and the onComplete callback will be fired once the animation is fully complete.\n      */\n      function performAnimation(animationEvent, className, element, parentElement, afterElement, domOperation, doneCallback) {\n\n        var runner = animationRunner(element, animationEvent, className);\n        if(!runner) {\n          fireDOMOperation();\n          fireBeforeCallbackAsync();\n          fireAfterCallbackAsync();\n          closeAnimation();\n          return;\n        }\n\n        className = runner.className;\n        var elementEvents = angular.element._data(runner.node);\n        elementEvents = elementEvents && elementEvents.events;\n\n        if (!parentElement) {\n          parentElement = afterElement ? afterElement.parent() : element.parent();\n        }\n\n        var ngAnimateState  = element.data(NG_ANIMATE_STATE) || {};\n        var runningAnimations     = ngAnimateState.active || {};\n        var totalActiveAnimations = ngAnimateState.totalActive || 0;\n        var lastAnimation         = ngAnimateState.last;\n\n        //only allow animations if the currently running animation is not structural\n        //or if there is no animation running at all\n        var skipAnimations = runner.isClassBased ?\n          ngAnimateState.disabled || (lastAnimation && !lastAnimation.isClassBased) :\n          false;\n\n        //skip the animation if animations are disabled, a parent is already being animated,\n        //the element is not currently attached to the document body or then completely close\n        //the animation if any matching animations are not found at all.\n        //NOTE: IE8 + IE9 should close properly (run closeAnimation()) in case an animation was found.\n        if (skipAnimations || animationsDisabled(element, parentElement)) {\n          fireDOMOperation();\n          fireBeforeCallbackAsync();\n          fireAfterCallbackAsync();\n          closeAnimation();\n          return;\n        }\n\n        var skipAnimation = false;\n        if(totalActiveAnimations > 0) {\n          var animationsToCancel = [];\n          if(!runner.isClassBased) {\n            if(animationEvent == 'leave' && runningAnimations['ng-leave']) {\n              skipAnimation = true;\n            } else {\n              //cancel all animations when a structural animation takes place\n              for(var klass in runningAnimations) {\n                animationsToCancel.push(runningAnimations[klass]);\n                cleanup(element, klass);\n              }\n              runningAnimations = {};\n              totalActiveAnimations = 0;\n            }\n          } else if(lastAnimation.event == 'setClass') {\n            animationsToCancel.push(lastAnimation);\n            cleanup(element, className);\n          }\n          else if(runningAnimations[className]) {\n            var current = runningAnimations[className];\n            if(current.event == animationEvent) {\n              skipAnimation = true;\n            } else {\n              animationsToCancel.push(current);\n              cleanup(element, className);\n            }\n          }\n\n          if(animationsToCancel.length > 0) {\n            forEach(animationsToCancel, function(operation) {\n              operation.cancel();\n            });\n          }\n        }\n\n        if(runner.isClassBased && !runner.isSetClassOperation && !skipAnimation) {\n          skipAnimation = (animationEvent == 'addClass') == element.hasClass(className); //opposite of XOR\n        }\n\n        if(skipAnimation) {\n          fireDOMOperation();\n          fireBeforeCallbackAsync();\n          fireAfterCallbackAsync();\n          fireDoneCallbackAsync();\n          return;\n        }\n\n        if(animationEvent == 'leave') {\n          //there's no need to ever remove the listener since the element\n          //will be removed (destroyed) after the leave animation ends or\n          //is cancelled midway\n          element.one('$destroy', function(e) {\n            var element = angular.element(this);\n            var state = element.data(NG_ANIMATE_STATE);\n            if(state) {\n              var activeLeaveAnimation = state.active['ng-leave'];\n              if(activeLeaveAnimation) {\n                activeLeaveAnimation.cancel();\n                cleanup(element, 'ng-leave');\n              }\n            }\n          });\n        }\n\n        //the ng-animate class does nothing, but it's here to allow for\n        //parent animations to find and cancel child animations when needed\n        element.addClass(NG_ANIMATE_CLASS_NAME);\n\n        var localAnimationCount = globalAnimationCounter++;\n        totalActiveAnimations++;\n        runningAnimations[className] = runner;\n\n        element.data(NG_ANIMATE_STATE, {\n          last : runner,\n          active : runningAnimations,\n          index : localAnimationCount,\n          totalActive : totalActiveAnimations\n        });\n\n        //first we run the before animations and when all of those are complete\n        //then we perform the DOM operation and run the next set of animations\n        fireBeforeCallbackAsync();\n        runner.before(function(cancelled) {\n          var data = element.data(NG_ANIMATE_STATE);\n          cancelled = cancelled ||\n                        !data || !data.active[className] ||\n                        (runner.isClassBased && data.active[className].event != animationEvent);\n\n          fireDOMOperation();\n          if(cancelled === true) {\n            closeAnimation();\n          } else {\n            fireAfterCallbackAsync();\n            runner.after(closeAnimation);\n          }\n        });\n\n        function fireDOMCallback(animationPhase) {\n          var eventName = '$animate:' + animationPhase;\n          if(elementEvents && elementEvents[eventName] && elementEvents[eventName].length > 0) {\n            $$asyncCallback(function() {\n              element.triggerHandler(eventName, {\n                event : animationEvent,\n                className : className\n              });\n            });\n          }\n        }\n\n        function fireBeforeCallbackAsync() {\n          fireDOMCallback('before');\n        }\n\n        function fireAfterCallbackAsync() {\n          fireDOMCallback('after');\n        }\n\n        function fireDoneCallbackAsync() {\n          fireDOMCallback('close');\n          if(doneCallback) {\n            $$asyncCallback(function() {\n              doneCallback();\n            });\n          }\n        }\n\n        //it is less complicated to use a flag than managing and canceling\n        //timeouts containing multiple callbacks.\n        function fireDOMOperation() {\n          if(!fireDOMOperation.hasBeenRun) {\n            fireDOMOperation.hasBeenRun = true;\n            domOperation();\n          }\n        }\n\n        function closeAnimation() {\n          if(!closeAnimation.hasBeenRun) {\n            closeAnimation.hasBeenRun = true;\n            var data = element.data(NG_ANIMATE_STATE);\n            if(data) {\n              /* only structural animations wait for reflow before removing an\n                 animation, but class-based animations don't. An example of this\n                 failing would be when a parent HTML tag has a ng-class attribute\n                 causing ALL directives below to skip animations during the digest */\n              if(runner && runner.isClassBased) {\n                cleanup(element, className);\n              } else {\n                $$asyncCallback(function() {\n                  var data = element.data(NG_ANIMATE_STATE) || {};\n                  if(localAnimationCount == data.index) {\n                    cleanup(element, className, animationEvent);\n                  }\n                });\n                element.data(NG_ANIMATE_STATE, data);\n              }\n            }\n            fireDoneCallbackAsync();\n          }\n        }\n      }\n\n      function cancelChildAnimations(element) {\n        var node = extractElementNode(element);\n        if (node) {\n          var nodes = angular.isFunction(node.getElementsByClassName) ?\n            node.getElementsByClassName(NG_ANIMATE_CLASS_NAME) :\n            node.querySelectorAll('.' + NG_ANIMATE_CLASS_NAME);\n          forEach(nodes, function(element) {\n            element = angular.element(element);\n            var data = element.data(NG_ANIMATE_STATE);\n            if(data && data.active) {\n              forEach(data.active, function(runner) {\n                runner.cancel();\n              });\n            }\n          });\n        }\n      }\n\n      function cleanup(element, className) {\n        if(isMatchingElement(element, $rootElement)) {\n          if(!rootAnimateState.disabled) {\n            rootAnimateState.running = false;\n            rootAnimateState.structural = false;\n          }\n        } else if(className) {\n          var data = element.data(NG_ANIMATE_STATE) || {};\n\n          var removeAnimations = className === true;\n          if(!removeAnimations && data.active && data.active[className]) {\n            data.totalActive--;\n            delete data.active[className];\n          }\n\n          if(removeAnimations || !data.totalActive) {\n            element.removeClass(NG_ANIMATE_CLASS_NAME);\n            element.removeData(NG_ANIMATE_STATE);\n          }\n        }\n      }\n\n      function animationsDisabled(element, parentElement) {\n        if (rootAnimateState.disabled) return true;\n\n        if(isMatchingElement(element, $rootElement)) {\n          return rootAnimateState.disabled || rootAnimateState.running;\n        }\n\n        do {\n          //the element did not reach the root element which means that it\n          //is not apart of the DOM. Therefore there is no reason to do\n          //any animations on it\n          if(parentElement.length === 0) break;\n\n          var isRoot = isMatchingElement(parentElement, $rootElement);\n          var state = isRoot ? rootAnimateState : parentElement.data(NG_ANIMATE_STATE);\n          var result = state && (!!state.disabled || state.running || state.totalActive > 0);\n          if(isRoot || result) {\n            return result;\n          }\n\n          if(isRoot) return true;\n        }\n        while(parentElement = parentElement.parent());\n\n        return true;\n      }\n    }]);\n\n    $animateProvider.register('', ['$window', '$sniffer', '$timeout', '$$animateReflow',\n                           function($window,   $sniffer,   $timeout,   $$animateReflow) {\n      // Detect proper transitionend/animationend event names.\n      var CSS_PREFIX = '', TRANSITION_PROP, TRANSITIONEND_EVENT, ANIMATION_PROP, ANIMATIONEND_EVENT;\n\n      // If unprefixed events are not supported but webkit-prefixed are, use the latter.\n      // Otherwise, just use W3C names, browsers not supporting them at all will just ignore them.\n      // Note: Chrome implements `window.onwebkitanimationend` and doesn't implement `window.onanimationend`\n      // but at the same time dispatches the `animationend` event and not `webkitAnimationEnd`.\n      // Register both events in case `window.onanimationend` is not supported because of that,\n      // do the same for `transitionend` as Safari is likely to exhibit similar behavior.\n      // Also, the only modern browser that uses vendor prefixes for transitions/keyframes is webkit\n      // therefore there is no reason to test anymore for other vendor prefixes: http://caniuse.com/#search=transition\n      if (window.ontransitionend === undefined && window.onwebkittransitionend !== undefined) {\n        CSS_PREFIX = '-webkit-';\n        TRANSITION_PROP = 'WebkitTransition';\n        TRANSITIONEND_EVENT = 'webkitTransitionEnd transitionend';\n      } else {\n        TRANSITION_PROP = 'transition';\n        TRANSITIONEND_EVENT = 'transitionend';\n      }\n\n      if (window.onanimationend === undefined && window.onwebkitanimationend !== undefined) {\n        CSS_PREFIX = '-webkit-';\n        ANIMATION_PROP = 'WebkitAnimation';\n        ANIMATIONEND_EVENT = 'webkitAnimationEnd animationend';\n      } else {\n        ANIMATION_PROP = 'animation';\n        ANIMATIONEND_EVENT = 'animationend';\n      }\n\n      var DURATION_KEY = 'Duration';\n      var PROPERTY_KEY = 'Property';\n      var DELAY_KEY = 'Delay';\n      var ANIMATION_ITERATION_COUNT_KEY = 'IterationCount';\n      var NG_ANIMATE_PARENT_KEY = '$$ngAnimateKey';\n      var NG_ANIMATE_CSS_DATA_KEY = '$$ngAnimateCSS3Data';\n      var NG_ANIMATE_BLOCK_CLASS_NAME = 'ng-animate-block-transitions';\n      var ELAPSED_TIME_MAX_DECIMAL_PLACES = 3;\n      var CLOSING_TIME_BUFFER = 1.5;\n      var ONE_SECOND = 1000;\n\n      var lookupCache = {};\n      var parentCounter = 0;\n      var animationReflowQueue = [];\n      var cancelAnimationReflow;\n      function afterReflow(element, callback) {\n        if(cancelAnimationReflow) {\n          cancelAnimationReflow();\n        }\n        animationReflowQueue.push(callback);\n        cancelAnimationReflow = $$animateReflow(function() {\n          forEach(animationReflowQueue, function(fn) {\n            fn();\n          });\n\n          animationReflowQueue = [];\n          cancelAnimationReflow = null;\n          lookupCache = {};\n        });\n      }\n\n      var closingTimer = null;\n      var closingTimestamp = 0;\n      var animationElementQueue = [];\n      function animationCloseHandler(element, totalTime) {\n        var node = extractElementNode(element);\n        element = angular.element(node);\n\n        //this item will be garbage collected by the closing\n        //animation timeout\n        animationElementQueue.push(element);\n\n        //but it may not need to cancel out the existing timeout\n        //if the timestamp is less than the previous one\n        var futureTimestamp = Date.now() + totalTime;\n        if(futureTimestamp <= closingTimestamp) {\n          return;\n        }\n\n        $timeout.cancel(closingTimer);\n\n        closingTimestamp = futureTimestamp;\n        closingTimer = $timeout(function() {\n          closeAllAnimations(animationElementQueue);\n          animationElementQueue = [];\n        }, totalTime, false);\n      }\n\n      function closeAllAnimations(elements) {\n        forEach(elements, function(element) {\n          var elementData = element.data(NG_ANIMATE_CSS_DATA_KEY);\n          if(elementData) {\n            (elementData.closeAnimationFn || noop)();\n          }\n        });\n      }\n\n      function getElementAnimationDetails(element, cacheKey) {\n        var data = cacheKey ? lookupCache[cacheKey] : null;\n        if(!data) {\n          var transitionDuration = 0;\n          var transitionDelay = 0;\n          var animationDuration = 0;\n          var animationDelay = 0;\n          var transitionDelayStyle;\n          var animationDelayStyle;\n          var transitionDurationStyle;\n          var transitionPropertyStyle;\n\n          //we want all the styles defined before and after\n          forEach(element, function(element) {\n            if (element.nodeType == ELEMENT_NODE) {\n              var elementStyles = $window.getComputedStyle(element) || {};\n\n              transitionDurationStyle = elementStyles[TRANSITION_PROP + DURATION_KEY];\n\n              transitionDuration = Math.max(parseMaxTime(transitionDurationStyle), transitionDuration);\n\n              transitionPropertyStyle = elementStyles[TRANSITION_PROP + PROPERTY_KEY];\n\n              transitionDelayStyle = elementStyles[TRANSITION_PROP + DELAY_KEY];\n\n              transitionDelay  = Math.max(parseMaxTime(transitionDelayStyle), transitionDelay);\n\n              animationDelayStyle = elementStyles[ANIMATION_PROP + DELAY_KEY];\n\n              animationDelay   = Math.max(parseMaxTime(animationDelayStyle), animationDelay);\n\n              var aDuration  = parseMaxTime(elementStyles[ANIMATION_PROP + DURATION_KEY]);\n\n              if(aDuration > 0) {\n                aDuration *= parseInt(elementStyles[ANIMATION_PROP + ANIMATION_ITERATION_COUNT_KEY], 10) || 1;\n              }\n\n              animationDuration = Math.max(aDuration, animationDuration);\n            }\n          });\n          data = {\n            total : 0,\n            transitionPropertyStyle: transitionPropertyStyle,\n            transitionDurationStyle: transitionDurationStyle,\n            transitionDelayStyle: transitionDelayStyle,\n            transitionDelay: transitionDelay,\n            transitionDuration: transitionDuration,\n            animationDelayStyle: animationDelayStyle,\n            animationDelay: animationDelay,\n            animationDuration: animationDuration\n          };\n          if(cacheKey) {\n            lookupCache[cacheKey] = data;\n          }\n        }\n        return data;\n      }\n\n      function parseMaxTime(str) {\n        var maxValue = 0;\n        var values = angular.isString(str) ?\n          str.split(/\\s*,\\s*/) :\n          [];\n        forEach(values, function(value) {\n          maxValue = Math.max(parseFloat(value) || 0, maxValue);\n        });\n        return maxValue;\n      }\n\n      function getCacheKey(element) {\n        var parentElement = element.parent();\n        var parentID = parentElement.data(NG_ANIMATE_PARENT_KEY);\n        if(!parentID) {\n          parentElement.data(NG_ANIMATE_PARENT_KEY, ++parentCounter);\n          parentID = parentCounter;\n        }\n        return parentID + '-' + extractElementNode(element).getAttribute('class');\n      }\n\n      function animateSetup(animationEvent, element, className, calculationDecorator) {\n        var cacheKey = getCacheKey(element);\n        var eventCacheKey = cacheKey + ' ' + className;\n        var itemIndex = lookupCache[eventCacheKey] ? ++lookupCache[eventCacheKey].total : 0;\n\n        var stagger = {};\n        if(itemIndex > 0) {\n          var staggerClassName = className + '-stagger';\n          var staggerCacheKey = cacheKey + ' ' + staggerClassName;\n          var applyClasses = !lookupCache[staggerCacheKey];\n\n          applyClasses && element.addClass(staggerClassName);\n\n          stagger = getElementAnimationDetails(element, staggerCacheKey);\n\n          applyClasses && element.removeClass(staggerClassName);\n        }\n\n        /* the animation itself may need to add/remove special CSS classes\n         * before calculating the anmation styles */\n        calculationDecorator = calculationDecorator ||\n                               function(fn) { return fn(); };\n\n        element.addClass(className);\n\n        var formerData = element.data(NG_ANIMATE_CSS_DATA_KEY) || {};\n\n        var timings = calculationDecorator(function() {\n          return getElementAnimationDetails(element, eventCacheKey);\n        });\n\n        var transitionDuration = timings.transitionDuration;\n        var animationDuration = timings.animationDuration;\n        if(transitionDuration === 0 && animationDuration === 0) {\n          element.removeClass(className);\n          return false;\n        }\n\n        element.data(NG_ANIMATE_CSS_DATA_KEY, {\n          running : formerData.running || 0,\n          itemIndex : itemIndex,\n          stagger : stagger,\n          timings : timings,\n          closeAnimationFn : noop\n        });\n\n        //temporarily disable the transition so that the enter styles\n        //don't animate twice (this is here to avoid a bug in Chrome/FF).\n        var isCurrentlyAnimating = formerData.running > 0 || animationEvent == 'setClass';\n        if(transitionDuration > 0) {\n          blockTransitions(element, className, isCurrentlyAnimating);\n        }\n\n        //staggering keyframe animations work by adjusting the `animation-delay` CSS property\n        //on the given element, however, the delay value can only calculated after the reflow\n        //since by that time $animate knows how many elements are being animated. Therefore,\n        //until the reflow occurs the element needs to be blocked (where the keyframe animation\n        //is set to `none 0s`). This blocking mechanism should only be set for when a stagger\n        //animation is detected and when the element item index is greater than 0.\n        if(animationDuration > 0 && stagger.animationDelay > 0 && stagger.animationDuration === 0) {\n          blockKeyframeAnimations(element);\n        }\n\n        return true;\n      }\n\n      function isStructuralAnimation(className) {\n        return className == 'ng-enter' || className == 'ng-move' || className == 'ng-leave';\n      }\n\n      function blockTransitions(element, className, isAnimating) {\n        if(isStructuralAnimation(className) || !isAnimating) {\n          extractElementNode(element).style[TRANSITION_PROP + PROPERTY_KEY] = 'none';\n        } else {\n          element.addClass(NG_ANIMATE_BLOCK_CLASS_NAME);\n        }\n      }\n\n      function blockKeyframeAnimations(element) {\n        extractElementNode(element).style[ANIMATION_PROP] = 'none 0s';\n      }\n\n      function unblockTransitions(element, className) {\n        var prop = TRANSITION_PROP + PROPERTY_KEY;\n        var node = extractElementNode(element);\n        if(node.style[prop] && node.style[prop].length > 0) {\n          node.style[prop] = '';\n        }\n        element.removeClass(NG_ANIMATE_BLOCK_CLASS_NAME);\n      }\n\n      function unblockKeyframeAnimations(element) {\n        var prop = ANIMATION_PROP;\n        var node = extractElementNode(element);\n        if(node.style[prop] && node.style[prop].length > 0) {\n          node.style[prop] = '';\n        }\n      }\n\n      function animateRun(animationEvent, element, className, activeAnimationComplete) {\n        var node = extractElementNode(element);\n        var elementData = element.data(NG_ANIMATE_CSS_DATA_KEY);\n        if(node.getAttribute('class').indexOf(className) == -1 || !elementData) {\n          activeAnimationComplete();\n          return;\n        }\n\n        var activeClassName = '';\n        forEach(className.split(' '), function(klass, i) {\n          activeClassName += (i > 0 ? ' ' : '') + klass + '-active';\n        });\n\n        var stagger = elementData.stagger;\n        var timings = elementData.timings;\n        var itemIndex = elementData.itemIndex;\n        var maxDuration = Math.max(timings.transitionDuration, timings.animationDuration);\n        var maxDelay = Math.max(timings.transitionDelay, timings.animationDelay);\n        var maxDelayTime = maxDelay * ONE_SECOND;\n\n        var startTime = Date.now();\n        var css3AnimationEvents = ANIMATIONEND_EVENT + ' ' + TRANSITIONEND_EVENT;\n\n        var style = '', appliedStyles = [];\n        if(timings.transitionDuration > 0) {\n          var propertyStyle = timings.transitionPropertyStyle;\n          if(propertyStyle.indexOf('all') == -1) {\n            style += CSS_PREFIX + 'transition-property: ' + propertyStyle + ';';\n            style += CSS_PREFIX + 'transition-duration: ' + timings.transitionDurationStyle + ';';\n            appliedStyles.push(CSS_PREFIX + 'transition-property');\n            appliedStyles.push(CSS_PREFIX + 'transition-duration');\n          }\n        }\n\n        if(itemIndex > 0) {\n          if(stagger.transitionDelay > 0 && stagger.transitionDuration === 0) {\n            var delayStyle = timings.transitionDelayStyle;\n            style += CSS_PREFIX + 'transition-delay: ' +\n                     prepareStaggerDelay(delayStyle, stagger.transitionDelay, itemIndex) + '; ';\n            appliedStyles.push(CSS_PREFIX + 'transition-delay');\n          }\n\n          if(stagger.animationDelay > 0 && stagger.animationDuration === 0) {\n            style += CSS_PREFIX + 'animation-delay: ' +\n                     prepareStaggerDelay(timings.animationDelayStyle, stagger.animationDelay, itemIndex) + '; ';\n            appliedStyles.push(CSS_PREFIX + 'animation-delay');\n          }\n        }\n\n        if(appliedStyles.length > 0) {\n          //the element being animated may sometimes contain comment nodes in\n          //the jqLite object, so we're safe to use a single variable to house\n          //the styles since there is always only one element being animated\n          var oldStyle = node.getAttribute('style') || '';\n          node.setAttribute('style', oldStyle + '; ' + style);\n        }\n\n        element.on(css3AnimationEvents, onAnimationProgress);\n        element.addClass(activeClassName);\n        elementData.closeAnimationFn = function() {\n          onEnd();\n          activeAnimationComplete();\n        };\n\n        var staggerTime       = itemIndex * (Math.max(stagger.animationDelay, stagger.transitionDelay) || 0);\n        var animationTime     = (maxDelay + maxDuration) * CLOSING_TIME_BUFFER;\n        var totalTime         = (staggerTime + animationTime) * ONE_SECOND;\n\n        elementData.running++;\n        animationCloseHandler(element, totalTime);\n        return onEnd;\n\n        // This will automatically be called by $animate so\n        // there is no need to attach this internally to the\n        // timeout done method.\n        function onEnd(cancelled) {\n          element.off(css3AnimationEvents, onAnimationProgress);\n          element.removeClass(activeClassName);\n          animateClose(element, className);\n          var node = extractElementNode(element);\n          for (var i in appliedStyles) {\n            node.style.removeProperty(appliedStyles[i]);\n          }\n        }\n\n        function onAnimationProgress(event) {\n          event.stopPropagation();\n          var ev = event.originalEvent || event;\n          var timeStamp = ev.$manualTimeStamp || ev.timeStamp || Date.now();\n\n          /* Firefox (or possibly just Gecko) likes to not round values up\n           * when a ms measurement is used for the animation */\n          var elapsedTime = parseFloat(ev.elapsedTime.toFixed(ELAPSED_TIME_MAX_DECIMAL_PLACES));\n\n          /* $manualTimeStamp is a mocked timeStamp value which is set\n           * within browserTrigger(). This is only here so that tests can\n           * mock animations properly. Real events fallback to event.timeStamp,\n           * or, if they don't, then a timeStamp is automatically created for them.\n           * We're checking to see if the timeStamp surpasses the expected delay,\n           * but we're using elapsedTime instead of the timeStamp on the 2nd\n           * pre-condition since animations sometimes close off early */\n          if(Math.max(timeStamp - startTime, 0) >= maxDelayTime && elapsedTime >= maxDuration) {\n            activeAnimationComplete();\n          }\n        }\n      }\n\n      function prepareStaggerDelay(delayStyle, staggerDelay, index) {\n        var style = '';\n        forEach(delayStyle.split(','), function(val, i) {\n          style += (i > 0 ? ',' : '') +\n                   (index * staggerDelay + parseInt(val, 10)) + 's';\n        });\n        return style;\n      }\n\n      function animateBefore(animationEvent, element, className, calculationDecorator) {\n        if(animateSetup(animationEvent, element, className, calculationDecorator)) {\n          return function(cancelled) {\n            cancelled && animateClose(element, className);\n          };\n        }\n      }\n\n      function animateAfter(animationEvent, element, className, afterAnimationComplete) {\n        if(element.data(NG_ANIMATE_CSS_DATA_KEY)) {\n          return animateRun(animationEvent, element, className, afterAnimationComplete);\n        } else {\n          animateClose(element, className);\n          afterAnimationComplete();\n        }\n      }\n\n      function animate(animationEvent, element, className, animationComplete) {\n        //If the animateSetup function doesn't bother returning a\n        //cancellation function then it means that there is no animation\n        //to perform at all\n        var preReflowCancellation = animateBefore(animationEvent, element, className);\n        if(!preReflowCancellation) {\n          animationComplete();\n          return;\n        }\n\n        //There are two cancellation functions: one is before the first\n        //reflow animation and the second is during the active state\n        //animation. The first function will take care of removing the\n        //data from the element which will not make the 2nd animation\n        //happen in the first place\n        var cancel = preReflowCancellation;\n        afterReflow(element, function() {\n          unblockTransitions(element, className);\n          unblockKeyframeAnimations(element);\n          //once the reflow is complete then we point cancel to\n          //the new cancellation function which will remove all of the\n          //animation properties from the active animation\n          cancel = animateAfter(animationEvent, element, className, animationComplete);\n        });\n\n        return function(cancelled) {\n          (cancel || noop)(cancelled);\n        };\n      }\n\n      function animateClose(element, className) {\n        element.removeClass(className);\n        var data = element.data(NG_ANIMATE_CSS_DATA_KEY);\n        if(data) {\n          if(data.running) {\n            data.running--;\n          }\n          if(!data.running || data.running === 0) {\n            element.removeData(NG_ANIMATE_CSS_DATA_KEY);\n          }\n        }\n      }\n\n      return {\n        enter : function(element, animationCompleted) {\n          return animate('enter', element, 'ng-enter', animationCompleted);\n        },\n\n        leave : function(element, animationCompleted) {\n          return animate('leave', element, 'ng-leave', animationCompleted);\n        },\n\n        move : function(element, animationCompleted) {\n          return animate('move', element, 'ng-move', animationCompleted);\n        },\n\n        beforeSetClass : function(element, add, remove, animationCompleted) {\n          var className = suffixClasses(remove, '-remove') + ' ' +\n                          suffixClasses(add, '-add');\n          var cancellationMethod = animateBefore('setClass', element, className, function(fn) {\n            /* when classes are removed from an element then the transition style\n             * that is applied is the transition defined on the element without the\n             * CSS class being there. This is how CSS3 functions outside of ngAnimate.\n             * http://plnkr.co/edit/j8OzgTNxHTb4n3zLyjGW?p=preview */\n            var klass = element.attr('class');\n            element.removeClass(remove);\n            element.addClass(add);\n            var timings = fn();\n            element.attr('class', klass);\n            return timings;\n          });\n\n          if(cancellationMethod) {\n            afterReflow(element, function() {\n              unblockTransitions(element, className);\n              unblockKeyframeAnimations(element);\n              animationCompleted();\n            });\n            return cancellationMethod;\n          }\n          animationCompleted();\n        },\n\n        beforeAddClass : function(element, className, animationCompleted) {\n          var cancellationMethod = animateBefore('addClass', element, suffixClasses(className, '-add'), function(fn) {\n\n            /* when a CSS class is added to an element then the transition style that\n             * is applied is the transition defined on the element when the CSS class\n             * is added at the time of the animation. This is how CSS3 functions\n             * outside of ngAnimate. */\n            element.addClass(className);\n            var timings = fn();\n            element.removeClass(className);\n            return timings;\n          });\n\n          if(cancellationMethod) {\n            afterReflow(element, function() {\n              unblockTransitions(element, className);\n              unblockKeyframeAnimations(element);\n              animationCompleted();\n            });\n            return cancellationMethod;\n          }\n          animationCompleted();\n        },\n\n        setClass : function(element, add, remove, animationCompleted) {\n          remove = suffixClasses(remove, '-remove');\n          add = suffixClasses(add, '-add');\n          var className = remove + ' ' + add;\n          return animateAfter('setClass', element, className, animationCompleted);\n        },\n\n        addClass : function(element, className, animationCompleted) {\n          return animateAfter('addClass', element, suffixClasses(className, '-add'), animationCompleted);\n        },\n\n        beforeRemoveClass : function(element, className, animationCompleted) {\n          var cancellationMethod = animateBefore('removeClass', element, suffixClasses(className, '-remove'), function(fn) {\n            /* when classes are removed from an element then the transition style\n             * that is applied is the transition defined on the element without the\n             * CSS class being there. This is how CSS3 functions outside of ngAnimate.\n             * http://plnkr.co/edit/j8OzgTNxHTb4n3zLyjGW?p=preview */\n            var klass = element.attr('class');\n            element.removeClass(className);\n            var timings = fn();\n            element.attr('class', klass);\n            return timings;\n          });\n\n          if(cancellationMethod) {\n            afterReflow(element, function() {\n              unblockTransitions(element, className);\n              unblockKeyframeAnimations(element);\n              animationCompleted();\n            });\n            return cancellationMethod;\n          }\n          animationCompleted();\n        },\n\n        removeClass : function(element, className, animationCompleted) {\n          return animateAfter('removeClass', element, suffixClasses(className, '-remove'), animationCompleted);\n        }\n      };\n\n      function suffixClasses(classes, suffix) {\n        var className = '';\n        classes = angular.isArray(classes) ? classes : classes.split(/\\s+/);\n        forEach(classes, function(klass, i) {\n          if(klass && klass.length > 0) {\n            className += (i > 0 ? ' ' : '') + klass + suffix;\n          }\n        });\n        return className;\n      }\n    }]);\n  }]);\n\n\n})(window, window.angular);\n"
  },
  {
    "path": "content/present-ionic/slides/ionic/js/angular/angular-resource.js",
    "content": "/**\n * @license AngularJS v1.2.17\n * (c) 2010-2014 Google, Inc. http://angularjs.org\n * License: MIT\n */\n(function(window, angular, undefined) {'use strict';\n\nvar $resourceMinErr = angular.$$minErr('$resource');\n\n// Helper functions and regex to lookup a dotted path on an object\n// stopping at undefined/null.  The path must be composed of ASCII\n// identifiers (just like $parse)\nvar MEMBER_NAME_REGEX = /^(\\.[a-zA-Z_$][0-9a-zA-Z_$]*)+$/;\n\nfunction isValidDottedPath(path) {\n  return (path != null && path !== '' && path !== 'hasOwnProperty' &&\n      MEMBER_NAME_REGEX.test('.' + path));\n}\n\nfunction lookupDottedPath(obj, path) {\n  if (!isValidDottedPath(path)) {\n    throw $resourceMinErr('badmember', 'Dotted member path \"@{0}\" is invalid.', path);\n  }\n  var keys = path.split('.');\n  for (var i = 0, ii = keys.length; i < ii && obj !== undefined; i++) {\n    var key = keys[i];\n    obj = (obj !== null) ? obj[key] : undefined;\n  }\n  return obj;\n}\n\n/**\n * Create a shallow copy of an object and clear other fields from the destination\n */\nfunction shallowClearAndCopy(src, dst) {\n  dst = dst || {};\n\n  angular.forEach(dst, function(value, key){\n    delete dst[key];\n  });\n\n  for (var key in src) {\n    if (src.hasOwnProperty(key) && !(key.charAt(0) === '$' && key.charAt(1) === '$')) {\n      dst[key] = src[key];\n    }\n  }\n\n  return dst;\n}\n\n/**\n * @ngdoc module\n * @name ngResource\n * @description\n *\n * # ngResource\n *\n * The `ngResource` module provides interaction support with RESTful services\n * via the $resource service.\n *\n *\n * <div doc-module-components=\"ngResource\"></div>\n *\n * See {@link ngResource.$resource `$resource`} for usage.\n */\n\n/**\n * @ngdoc service\n * @name $resource\n * @requires $http\n *\n * @description\n * A factory which creates a resource object that lets you interact with\n * [RESTful](http://en.wikipedia.org/wiki/Representational_State_Transfer) server-side data sources.\n *\n * The returned resource object has action methods which provide high-level behaviors without\n * the need to interact with the low level {@link ng.$http $http} service.\n *\n * Requires the {@link ngResource `ngResource`} module to be installed.\n *\n * @param {string} url A parametrized URL template with parameters prefixed by `:` as in\n *   `/user/:username`. If you are using a URL with a port number (e.g.\n *   `http://example.com:8080/api`), it will be respected.\n *\n *   If you are using a url with a suffix, just add the suffix, like this:\n *   `$resource('http://example.com/resource.json')` or `$resource('http://example.com/:id.json')`\n *   or even `$resource('http://example.com/resource/:resource_id.:format')`\n *   If the parameter before the suffix is empty, :resource_id in this case, then the `/.` will be\n *   collapsed down to a single `.`.  If you need this sequence to appear and not collapse then you\n *   can escape it with `/\\.`.\n *\n * @param {Object=} paramDefaults Default values for `url` parameters. These can be overridden in\n *   `actions` methods. If any of the parameter value is a function, it will be executed every time\n *   when a param value needs to be obtained for a request (unless the param was overridden).\n *\n *   Each key value in the parameter object is first bound to url template if present and then any\n *   excess keys are appended to the url search query after the `?`.\n *\n *   Given a template `/path/:verb` and parameter `{verb:'greet', salutation:'Hello'}` results in\n *   URL `/path/greet?salutation=Hello`.\n *\n *   If the parameter value is prefixed with `@` then the value of that parameter will be taken\n *   from the corresponding key on the data object (useful for non-GET operations).\n *\n * @param {Object.<Object>=} actions Hash with declaration of custom action that should extend\n *   the default set of resource actions. The declaration should be created in the format of {@link\n *   ng.$http#usage_parameters $http.config}:\n *\n *       {action1: {method:?, params:?, isArray:?, headers:?, ...},\n *        action2: {method:?, params:?, isArray:?, headers:?, ...},\n *        ...}\n *\n *   Where:\n *\n *   - **`action`** – {string} – The name of action. This name becomes the name of the method on\n *     your resource object.\n *   - **`method`** – {string} – HTTP request method. Valid methods are: `GET`, `POST`, `PUT`,\n *     `DELETE`, and `JSONP`.\n *   - **`params`** – {Object=} – Optional set of pre-bound parameters for this action. If any of\n *     the parameter value is a function, it will be executed every time when a param value needs to\n *     be obtained for a request (unless the param was overridden).\n *   - **`url`** – {string} – action specific `url` override. The url templating is supported just\n *     like for the resource-level urls.\n *   - **`isArray`** – {boolean=} – If true then the returned object for this action is an array,\n *     see `returns` section.\n *   - **`transformRequest`** –\n *     `{function(data, headersGetter)|Array.<function(data, headersGetter)>}` –\n *     transform function or an array of such functions. The transform function takes the http\n *     request body and headers and returns its transformed (typically serialized) version.\n *   - **`transformResponse`** –\n *     `{function(data, headersGetter)|Array.<function(data, headersGetter)>}` –\n *     transform function or an array of such functions. The transform function takes the http\n *     response body and headers and returns its transformed (typically deserialized) version.\n *   - **`cache`** – `{boolean|Cache}` – If true, a default $http cache will be used to cache the\n *     GET request, otherwise if a cache instance built with\n *     {@link ng.$cacheFactory $cacheFactory}, this cache will be used for\n *     caching.\n *   - **`timeout`** – `{number|Promise}` – timeout in milliseconds, or {@link ng.$q promise} that\n *     should abort the request when resolved.\n *   - **`withCredentials`** - `{boolean}` - whether to set the `withCredentials` flag on the\n *     XHR object. See\n *     [requests with credentials](https://developer.mozilla.org/en/http_access_control#section_5)\n *     for more information.\n *   - **`responseType`** - `{string}` - see\n *     [requestType](https://developer.mozilla.org/en-US/docs/DOM/XMLHttpRequest#responseType).\n *   - **`interceptor`** - `{Object=}` - The interceptor object has two optional methods -\n *     `response` and `responseError`. Both `response` and `responseError` interceptors get called\n *     with `http response` object. See {@link ng.$http $http interceptors}.\n *\n * @returns {Object} A resource \"class\" object with methods for the default set of resource actions\n *   optionally extended with custom `actions`. The default set contains these actions:\n *   ```js\n *   { 'get':    {method:'GET'},\n *     'save':   {method:'POST'},\n *     'query':  {method:'GET', isArray:true},\n *     'remove': {method:'DELETE'},\n *     'delete': {method:'DELETE'} };\n *   ```\n *\n *   Calling these methods invoke an {@link ng.$http} with the specified http method,\n *   destination and parameters. When the data is returned from the server then the object is an\n *   instance of the resource class. The actions `save`, `remove` and `delete` are available on it\n *   as  methods with the `$` prefix. This allows you to easily perform CRUD operations (create,\n *   read, update, delete) on server-side data like this:\n *   ```js\n *   var User = $resource('/user/:userId', {userId:'@id'});\n *   var user = User.get({userId:123}, function() {\n *     user.abc = true;\n *     user.$save();\n *   });\n *   ```\n *\n *   It is important to realize that invoking a $resource object method immediately returns an\n *   empty reference (object or array depending on `isArray`). Once the data is returned from the\n *   server the existing reference is populated with the actual data. This is a useful trick since\n *   usually the resource is assigned to a model which is then rendered by the view. Having an empty\n *   object results in no rendering, once the data arrives from the server then the object is\n *   populated with the data and the view automatically re-renders itself showing the new data. This\n *   means that in most cases one never has to write a callback function for the action methods.\n *\n *   The action methods on the class object or instance object can be invoked with the following\n *   parameters:\n *\n *   - HTTP GET \"class\" actions: `Resource.action([parameters], [success], [error])`\n *   - non-GET \"class\" actions: `Resource.action([parameters], postData, [success], [error])`\n *   - non-GET instance actions:  `instance.$action([parameters], [success], [error])`\n *\n *   Success callback is called with (value, responseHeaders) arguments. Error callback is called\n *   with (httpResponse) argument.\n *\n *   Class actions return empty instance (with additional properties below).\n *   Instance actions return promise of the action.\n *\n *   The Resource instances and collection have these additional properties:\n *\n *   - `$promise`: the {@link ng.$q promise} of the original server interaction that created this\n *     instance or collection.\n *\n *     On success, the promise is resolved with the same resource instance or collection object,\n *     updated with data from server. This makes it easy to use in\n *     {@link ngRoute.$routeProvider resolve section of $routeProvider.when()} to defer view\n *     rendering until the resource(s) are loaded.\n *\n *     On failure, the promise is resolved with the {@link ng.$http http response} object, without\n *     the `resource` property.\n *\n *     If an interceptor object was provided, the promise will instead be resolved with the value\n *     returned by the interceptor.\n *\n *   - `$resolved`: `true` after first server interaction is completed (either with success or\n *      rejection), `false` before that. Knowing if the Resource has been resolved is useful in\n *      data-binding.\n *\n * @example\n *\n * # Credit card resource\n *\n * ```js\n     // Define CreditCard class\n     var CreditCard = $resource('/user/:userId/card/:cardId',\n      {userId:123, cardId:'@id'}, {\n       charge: {method:'POST', params:{charge:true}}\n      });\n\n     // We can retrieve a collection from the server\n     var cards = CreditCard.query(function() {\n       // GET: /user/123/card\n       // server returns: [ {id:456, number:'1234', name:'Smith'} ];\n\n       var card = cards[0];\n       // each item is an instance of CreditCard\n       expect(card instanceof CreditCard).toEqual(true);\n       card.name = \"J. Smith\";\n       // non GET methods are mapped onto the instances\n       card.$save();\n       // POST: /user/123/card/456 {id:456, number:'1234', name:'J. Smith'}\n       // server returns: {id:456, number:'1234', name: 'J. Smith'};\n\n       // our custom method is mapped as well.\n       card.$charge({amount:9.99});\n       // POST: /user/123/card/456?amount=9.99&charge=true {id:456, number:'1234', name:'J. Smith'}\n     });\n\n     // we can create an instance as well\n     var newCard = new CreditCard({number:'0123'});\n     newCard.name = \"Mike Smith\";\n     newCard.$save();\n     // POST: /user/123/card {number:'0123', name:'Mike Smith'}\n     // server returns: {id:789, number:'0123', name: 'Mike Smith'};\n     expect(newCard.id).toEqual(789);\n * ```\n *\n * The object returned from this function execution is a resource \"class\" which has \"static\" method\n * for each action in the definition.\n *\n * Calling these methods invoke `$http` on the `url` template with the given `method`, `params` and\n * `headers`.\n * When the data is returned from the server then the object is an instance of the resource type and\n * all of the non-GET methods are available with `$` prefix. This allows you to easily support CRUD\n * operations (create, read, update, delete) on server-side data.\n\n   ```js\n     var User = $resource('/user/:userId', {userId:'@id'});\n     User.get({userId:123}, function(user) {\n       user.abc = true;\n       user.$save();\n     });\n   ```\n *\n * It's worth noting that the success callback for `get`, `query` and other methods gets passed\n * in the response that came from the server as well as $http header getter function, so one\n * could rewrite the above example and get access to http headers as:\n *\n   ```js\n     var User = $resource('/user/:userId', {userId:'@id'});\n     User.get({userId:123}, function(u, getResponseHeaders){\n       u.abc = true;\n       u.$save(function(u, putResponseHeaders) {\n         //u => saved user object\n         //putResponseHeaders => $http header getter\n       });\n     });\n   ```\n *\n * You can also access the raw `$http` promise via the `$promise` property on the object returned\n *\n   ```\n     var User = $resource('/user/:userId', {userId:'@id'});\n     User.get({userId:123})\n         .$promise.then(function(user) {\n           $scope.user = user;\n         });\n   ```\n\n * # Creating a custom 'PUT' request\n * In this example we create a custom method on our resource to make a PUT request\n * ```js\n *\t\tvar app = angular.module('app', ['ngResource', 'ngRoute']);\n *\n *\t\t// Some APIs expect a PUT request in the format URL/object/ID\n *\t\t// Here we are creating an 'update' method\n *\t\tapp.factory('Notes', ['$resource', function($resource) {\n *    return $resource('/notes/:id', null,\n *        {\n *            'update': { method:'PUT' }\n *        });\n *\t\t}]);\n *\n *\t\t// In our controller we get the ID from the URL using ngRoute and $routeParams\n *\t\t// We pass in $routeParams and our Notes factory along with $scope\n *\t\tapp.controller('NotesCtrl', ['$scope', '$routeParams', 'Notes',\n                                      function($scope, $routeParams, Notes) {\n *    // First get a note object from the factory\n *    var note = Notes.get({ id:$routeParams.id });\n *    $id = note.id;\n *\n *    // Now call update passing in the ID first then the object you are updating\n *    Notes.update({ id:$id }, note);\n *\n *    // This will PUT /notes/ID with the note object in the request payload\n *\t\t}]);\n * ```\n */\nangular.module('ngResource', ['ng']).\n  factory('$resource', ['$http', '$q', function($http, $q) {\n\n    var DEFAULT_ACTIONS = {\n      'get':    {method:'GET'},\n      'save':   {method:'POST'},\n      'query':  {method:'GET', isArray:true},\n      'remove': {method:'DELETE'},\n      'delete': {method:'DELETE'}\n    };\n    var noop = angular.noop,\n        forEach = angular.forEach,\n        extend = angular.extend,\n        copy = angular.copy,\n        isFunction = angular.isFunction;\n\n    /**\n     * We need our custom method because encodeURIComponent is too aggressive and doesn't follow\n     * http://www.ietf.org/rfc/rfc3986.txt with regards to the character set (pchar) allowed in path\n     * segments:\n     *    segment       = *pchar\n     *    pchar         = unreserved / pct-encoded / sub-delims / \":\" / \"@\"\n     *    pct-encoded   = \"%\" HEXDIG HEXDIG\n     *    unreserved    = ALPHA / DIGIT / \"-\" / \".\" / \"_\" / \"~\"\n     *    sub-delims    = \"!\" / \"$\" / \"&\" / \"'\" / \"(\" / \")\"\n     *                     / \"*\" / \"+\" / \",\" / \";\" / \"=\"\n     */\n    function encodeUriSegment(val) {\n      return encodeUriQuery(val, true).\n        replace(/%26/gi, '&').\n        replace(/%3D/gi, '=').\n        replace(/%2B/gi, '+');\n    }\n\n\n    /**\n     * This method is intended for encoding *key* or *value* parts of query component. We need a\n     * custom method because encodeURIComponent is too aggressive and encodes stuff that doesn't\n     * have to be encoded per http://tools.ietf.org/html/rfc3986:\n     *    query       = *( pchar / \"/\" / \"?\" )\n     *    pchar         = unreserved / pct-encoded / sub-delims / \":\" / \"@\"\n     *    unreserved    = ALPHA / DIGIT / \"-\" / \".\" / \"_\" / \"~\"\n     *    pct-encoded   = \"%\" HEXDIG HEXDIG\n     *    sub-delims    = \"!\" / \"$\" / \"&\" / \"'\" / \"(\" / \")\"\n     *                     / \"*\" / \"+\" / \",\" / \";\" / \"=\"\n     */\n    function encodeUriQuery(val, pctEncodeSpaces) {\n      return encodeURIComponent(val).\n        replace(/%40/gi, '@').\n        replace(/%3A/gi, ':').\n        replace(/%24/g, '$').\n        replace(/%2C/gi, ',').\n        replace(/%20/g, (pctEncodeSpaces ? '%20' : '+'));\n    }\n\n    function Route(template, defaults) {\n      this.template = template;\n      this.defaults = defaults || {};\n      this.urlParams = {};\n    }\n\n    Route.prototype = {\n      setUrlParams: function(config, params, actionUrl) {\n        var self = this,\n            url = actionUrl || self.template,\n            val,\n            encodedVal;\n\n        var urlParams = self.urlParams = {};\n        forEach(url.split(/\\W/), function(param){\n          if (param === 'hasOwnProperty') {\n            throw $resourceMinErr('badname', \"hasOwnProperty is not a valid parameter name.\");\n          }\n          if (!(new RegExp(\"^\\\\d+$\").test(param)) && param &&\n               (new RegExp(\"(^|[^\\\\\\\\]):\" + param + \"(\\\\W|$)\").test(url))) {\n            urlParams[param] = true;\n          }\n        });\n        url = url.replace(/\\\\:/g, ':');\n\n        params = params || {};\n        forEach(self.urlParams, function(_, urlParam){\n          val = params.hasOwnProperty(urlParam) ? params[urlParam] : self.defaults[urlParam];\n          if (angular.isDefined(val) && val !== null) {\n            encodedVal = encodeUriSegment(val);\n            url = url.replace(new RegExp(\":\" + urlParam + \"(\\\\W|$)\", \"g\"), function(match, p1) {\n              return encodedVal + p1;\n            });\n          } else {\n            url = url.replace(new RegExp(\"(\\/?):\" + urlParam + \"(\\\\W|$)\", \"g\"), function(match,\n                leadingSlashes, tail) {\n              if (tail.charAt(0) == '/') {\n                return tail;\n              } else {\n                return leadingSlashes + tail;\n              }\n            });\n          }\n        });\n\n        // strip trailing slashes and set the url\n        url = url.replace(/\\/+$/, '') || '/';\n        // then replace collapse `/.` if found in the last URL path segment before the query\n        // E.g. `http://url.com/id./format?q=x` becomes `http://url.com/id.format?q=x`\n        url = url.replace(/\\/\\.(?=\\w+($|\\?))/, '.');\n        // replace escaped `/\\.` with `/.`\n        config.url = url.replace(/\\/\\\\\\./, '/.');\n\n\n        // set params - delegate param encoding to $http\n        forEach(params, function(value, key){\n          if (!self.urlParams[key]) {\n            config.params = config.params || {};\n            config.params[key] = value;\n          }\n        });\n      }\n    };\n\n\n    function resourceFactory(url, paramDefaults, actions) {\n      var route = new Route(url);\n\n      actions = extend({}, DEFAULT_ACTIONS, actions);\n\n      function extractParams(data, actionParams){\n        var ids = {};\n        actionParams = extend({}, paramDefaults, actionParams);\n        forEach(actionParams, function(value, key){\n          if (isFunction(value)) { value = value(); }\n          ids[key] = value && value.charAt && value.charAt(0) == '@' ?\n            lookupDottedPath(data, value.substr(1)) : value;\n        });\n        return ids;\n      }\n\n      function defaultResponseInterceptor(response) {\n        return response.resource;\n      }\n\n      function Resource(value){\n        shallowClearAndCopy(value || {}, this);\n      }\n\n      forEach(actions, function(action, name) {\n        var hasBody = /^(POST|PUT|PATCH)$/i.test(action.method);\n\n        Resource[name] = function(a1, a2, a3, a4) {\n          var params = {}, data, success, error;\n\n          /* jshint -W086 */ /* (purposefully fall through case statements) */\n          switch(arguments.length) {\n          case 4:\n            error = a4;\n            success = a3;\n            //fallthrough\n          case 3:\n          case 2:\n            if (isFunction(a2)) {\n              if (isFunction(a1)) {\n                success = a1;\n                error = a2;\n                break;\n              }\n\n              success = a2;\n              error = a3;\n              //fallthrough\n            } else {\n              params = a1;\n              data = a2;\n              success = a3;\n              break;\n            }\n          case 1:\n            if (isFunction(a1)) success = a1;\n            else if (hasBody) data = a1;\n            else params = a1;\n            break;\n          case 0: break;\n          default:\n            throw $resourceMinErr('badargs',\n              \"Expected up to 4 arguments [params, data, success, error], got {0} arguments\",\n              arguments.length);\n          }\n          /* jshint +W086 */ /* (purposefully fall through case statements) */\n\n          var isInstanceCall = this instanceof Resource;\n          var value = isInstanceCall ? data : (action.isArray ? [] : new Resource(data));\n          var httpConfig = {};\n          var responseInterceptor = action.interceptor && action.interceptor.response ||\n                                    defaultResponseInterceptor;\n          var responseErrorInterceptor = action.interceptor && action.interceptor.responseError ||\n                                    undefined;\n\n          forEach(action, function(value, key) {\n            if (key != 'params' && key != 'isArray' && key != 'interceptor') {\n              httpConfig[key] = copy(value);\n            }\n          });\n\n          if (hasBody) httpConfig.data = data;\n          route.setUrlParams(httpConfig,\n                             extend({}, extractParams(data, action.params || {}), params),\n                             action.url);\n\n          var promise = $http(httpConfig).then(function(response) {\n            var data = response.data,\n                promise = value.$promise;\n\n            if (data) {\n              // Need to convert action.isArray to boolean in case it is undefined\n              // jshint -W018\n              if (angular.isArray(data) !== (!!action.isArray)) {\n                throw $resourceMinErr('badcfg', 'Error in resource configuration. Expected ' +\n                  'response to contain an {0} but got an {1}',\n                  action.isArray?'array':'object', angular.isArray(data)?'array':'object');\n              }\n              // jshint +W018\n              if (action.isArray) {\n                value.length = 0;\n                forEach(data, function(item) {\n                  value.push(new Resource(item));\n                });\n              } else {\n                shallowClearAndCopy(data, value);\n                value.$promise = promise;\n              }\n            }\n\n            value.$resolved = true;\n\n            response.resource = value;\n\n            return response;\n          }, function(response) {\n            value.$resolved = true;\n\n            (error||noop)(response);\n\n            return $q.reject(response);\n          });\n\n          promise = promise.then(\n              function(response) {\n                var value = responseInterceptor(response);\n                (success||noop)(value, response.headers);\n                return value;\n              },\n              responseErrorInterceptor);\n\n          if (!isInstanceCall) {\n            // we are creating instance / collection\n            // - set the initial promise\n            // - return the instance / collection\n            value.$promise = promise;\n            value.$resolved = false;\n\n            return value;\n          }\n\n          // instance call\n          return promise;\n        };\n\n\n        Resource.prototype['$' + name] = function(params, success, error) {\n          if (isFunction(params)) {\n            error = success; success = params; params = {};\n          }\n          var result = Resource[name].call(this, params, this, success, error);\n          return result.$promise || result;\n        };\n      });\n\n      Resource.bind = function(additionalParamDefaults){\n        return resourceFactory(url, extend({}, paramDefaults, additionalParamDefaults), actions);\n      };\n\n      return Resource;\n    }\n\n    return resourceFactory;\n  }]);\n\n\n})(window, window.angular);\n"
  },
  {
    "path": "content/present-ionic/slides/ionic/js/angular/angular-sanitize.js",
    "content": "/**\n * @license AngularJS v1.2.17\n * (c) 2010-2014 Google, Inc. http://angularjs.org\n * License: MIT\n */\n(function(window, angular, undefined) {'use strict';\n\nvar $sanitizeMinErr = angular.$$minErr('$sanitize');\n\n/**\n * @ngdoc module\n * @name ngSanitize\n * @description\n *\n * # ngSanitize\n *\n * The `ngSanitize` module provides functionality to sanitize HTML.\n *\n *\n * <div doc-module-components=\"ngSanitize\"></div>\n *\n * See {@link ngSanitize.$sanitize `$sanitize`} for usage.\n */\n\n/*\n * HTML Parser By Misko Hevery (misko@hevery.com)\n * based on:  HTML Parser By John Resig (ejohn.org)\n * Original code by Erik Arvidsson, Mozilla Public License\n * http://erik.eae.net/simplehtmlparser/simplehtmlparser.js\n *\n * // Use like so:\n * htmlParser(htmlString, {\n *     start: function(tag, attrs, unary) {},\n *     end: function(tag) {},\n *     chars: function(text) {},\n *     comment: function(text) {}\n * });\n *\n */\n\n\n/**\n * @ngdoc service\n * @name $sanitize\n * @kind function\n *\n * @description\n *   The input is sanitized by parsing the html into tokens. All safe tokens (from a whitelist) are\n *   then serialized back to properly escaped html string. This means that no unsafe input can make\n *   it into the returned string, however, since our parser is more strict than a typical browser\n *   parser, it's possible that some obscure input, which would be recognized as valid HTML by a\n *   browser, won't make it through the sanitizer.\n *   The whitelist is configured using the functions `aHrefSanitizationWhitelist` and\n *   `imgSrcSanitizationWhitelist` of {@link ng.$compileProvider `$compileProvider`}.\n *\n * @param {string} html Html input.\n * @returns {string} Sanitized html.\n *\n * @example\n   <example module=\"ngSanitize\" deps=\"angular-sanitize.js\">\n   <file name=\"index.html\">\n     <script>\n       function Ctrl($scope, $sce) {\n         $scope.snippet =\n           '<p style=\"color:blue\">an html\\n' +\n           '<em onmouseover=\"this.textContent=\\'PWN3D!\\'\">click here</em>\\n' +\n           'snippet</p>';\n         $scope.deliberatelyTrustDangerousSnippet = function() {\n           return $sce.trustAsHtml($scope.snippet);\n         };\n       }\n     </script>\n     <div ng-controller=\"Ctrl\">\n        Snippet: <textarea ng-model=\"snippet\" cols=\"60\" rows=\"3\"></textarea>\n       <table>\n         <tr>\n           <td>Directive</td>\n           <td>How</td>\n           <td>Source</td>\n           <td>Rendered</td>\n         </tr>\n         <tr id=\"bind-html-with-sanitize\">\n           <td>ng-bind-html</td>\n           <td>Automatically uses $sanitize</td>\n           <td><pre>&lt;div ng-bind-html=\"snippet\"&gt;<br/>&lt;/div&gt;</pre></td>\n           <td><div ng-bind-html=\"snippet\"></div></td>\n         </tr>\n         <tr id=\"bind-html-with-trust\">\n           <td>ng-bind-html</td>\n           <td>Bypass $sanitize by explicitly trusting the dangerous value</td>\n           <td>\n           <pre>&lt;div ng-bind-html=\"deliberatelyTrustDangerousSnippet()\"&gt;\n&lt;/div&gt;</pre>\n           </td>\n           <td><div ng-bind-html=\"deliberatelyTrustDangerousSnippet()\"></div></td>\n         </tr>\n         <tr id=\"bind-default\">\n           <td>ng-bind</td>\n           <td>Automatically escapes</td>\n           <td><pre>&lt;div ng-bind=\"snippet\"&gt;<br/>&lt;/div&gt;</pre></td>\n           <td><div ng-bind=\"snippet\"></div></td>\n         </tr>\n       </table>\n       </div>\n   </file>\n   <file name=\"protractor.js\" type=\"protractor\">\n     it('should sanitize the html snippet by default', function() {\n       expect(element(by.css('#bind-html-with-sanitize div')).getInnerHtml()).\n         toBe('<p>an html\\n<em>click here</em>\\nsnippet</p>');\n     });\n\n     it('should inline raw snippet if bound to a trusted value', function() {\n       expect(element(by.css('#bind-html-with-trust div')).getInnerHtml()).\n         toBe(\"<p style=\\\"color:blue\\\">an html\\n\" +\n              \"<em onmouseover=\\\"this.textContent='PWN3D!'\\\">click here</em>\\n\" +\n              \"snippet</p>\");\n     });\n\n     it('should escape snippet without any filter', function() {\n       expect(element(by.css('#bind-default div')).getInnerHtml()).\n         toBe(\"&lt;p style=\\\"color:blue\\\"&gt;an html\\n\" +\n              \"&lt;em onmouseover=\\\"this.textContent='PWN3D!'\\\"&gt;click here&lt;/em&gt;\\n\" +\n              \"snippet&lt;/p&gt;\");\n     });\n\n     it('should update', function() {\n       element(by.model('snippet')).clear();\n       element(by.model('snippet')).sendKeys('new <b onclick=\"alert(1)\">text</b>');\n       expect(element(by.css('#bind-html-with-sanitize div')).getInnerHtml()).\n         toBe('new <b>text</b>');\n       expect(element(by.css('#bind-html-with-trust div')).getInnerHtml()).toBe(\n         'new <b onclick=\"alert(1)\">text</b>');\n       expect(element(by.css('#bind-default div')).getInnerHtml()).toBe(\n         \"new &lt;b onclick=\\\"alert(1)\\\"&gt;text&lt;/b&gt;\");\n     });\n   </file>\n   </example>\n */\nfunction $SanitizeProvider() {\n  this.$get = ['$$sanitizeUri', function($$sanitizeUri) {\n    return function(html) {\n      var buf = [];\n      htmlParser(html, htmlSanitizeWriter(buf, function(uri, isImage) {\n        return !/^unsafe/.test($$sanitizeUri(uri, isImage));\n      }));\n      return buf.join('');\n    };\n  }];\n}\n\nfunction sanitizeText(chars) {\n  var buf = [];\n  var writer = htmlSanitizeWriter(buf, angular.noop);\n  writer.chars(chars);\n  return buf.join('');\n}\n\n\n// Regular Expressions for parsing tags and attributes\nvar START_TAG_REGEXP =\n       /^<\\s*([\\w:-]+)((?:\\s+[\\w:-]+(?:\\s*=\\s*(?:(?:\"[^\"]*\")|(?:'[^']*')|[^>\\s]+))?)*)\\s*(\\/?)\\s*>/,\n  END_TAG_REGEXP = /^<\\s*\\/\\s*([\\w:-]+)[^>]*>/,\n  ATTR_REGEXP = /([\\w:-]+)(?:\\s*=\\s*(?:(?:\"((?:[^\"])*)\")|(?:'((?:[^'])*)')|([^>\\s]+)))?/g,\n  BEGIN_TAG_REGEXP = /^</,\n  BEGING_END_TAGE_REGEXP = /^<\\s*\\//,\n  COMMENT_REGEXP = /<!--(.*?)-->/g,\n  DOCTYPE_REGEXP = /<!DOCTYPE([^>]*?)>/i,\n  CDATA_REGEXP = /<!\\[CDATA\\[(.*?)]]>/g,\n  SURROGATE_PAIR_REGEXP = /[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]/g,\n  // Match everything outside of normal chars and \" (quote character)\n  NON_ALPHANUMERIC_REGEXP = /([^\\#-~| |!])/g;\n\n\n// Good source of info about elements and attributes\n// http://dev.w3.org/html5/spec/Overview.html#semantics\n// http://simon.html5.org/html-elements\n\n// Safe Void Elements - HTML5\n// http://dev.w3.org/html5/spec/Overview.html#void-elements\nvar voidElements = makeMap(\"area,br,col,hr,img,wbr\");\n\n// Elements that you can, intentionally, leave open (and which close themselves)\n// http://dev.w3.org/html5/spec/Overview.html#optional-tags\nvar optionalEndTagBlockElements = makeMap(\"colgroup,dd,dt,li,p,tbody,td,tfoot,th,thead,tr\"),\n    optionalEndTagInlineElements = makeMap(\"rp,rt\"),\n    optionalEndTagElements = angular.extend({},\n                                            optionalEndTagInlineElements,\n                                            optionalEndTagBlockElements);\n\n// Safe Block Elements - HTML5\nvar blockElements = angular.extend({}, optionalEndTagBlockElements, makeMap(\"address,article,\" +\n        \"aside,blockquote,caption,center,del,dir,div,dl,figure,figcaption,footer,h1,h2,h3,h4,h5,\" +\n        \"h6,header,hgroup,hr,ins,map,menu,nav,ol,pre,script,section,table,ul\"));\n\n// Inline Elements - HTML5\nvar inlineElements = angular.extend({}, optionalEndTagInlineElements, makeMap(\"a,abbr,acronym,b,\" +\n        \"bdi,bdo,big,br,cite,code,del,dfn,em,font,i,img,ins,kbd,label,map,mark,q,ruby,rp,rt,s,\" +\n        \"samp,small,span,strike,strong,sub,sup,time,tt,u,var\"));\n\n\n// Special Elements (can contain anything)\nvar specialElements = makeMap(\"script,style\");\n\nvar validElements = angular.extend({},\n                                   voidElements,\n                                   blockElements,\n                                   inlineElements,\n                                   optionalEndTagElements);\n\n//Attributes that have href and hence need to be sanitized\nvar uriAttrs = makeMap(\"background,cite,href,longdesc,src,usemap\");\nvar validAttrs = angular.extend({}, uriAttrs, makeMap(\n    'abbr,align,alt,axis,bgcolor,border,cellpadding,cellspacing,class,clear,'+\n    'color,cols,colspan,compact,coords,dir,face,headers,height,hreflang,hspace,'+\n    'ismap,lang,language,nohref,nowrap,rel,rev,rows,rowspan,rules,'+\n    'scope,scrolling,shape,size,span,start,summary,target,title,type,'+\n    'valign,value,vspace,width'));\n\nfunction makeMap(str) {\n  var obj = {}, items = str.split(','), i;\n  for (i = 0; i < items.length; i++) obj[items[i]] = true;\n  return obj;\n}\n\n\n/**\n * @example\n * htmlParser(htmlString, {\n *     start: function(tag, attrs, unary) {},\n *     end: function(tag) {},\n *     chars: function(text) {},\n *     comment: function(text) {}\n * });\n *\n * @param {string} html string\n * @param {object} handler\n */\nfunction htmlParser( html, handler ) {\n  var index, chars, match, stack = [], last = html;\n  stack.last = function() { return stack[ stack.length - 1 ]; };\n\n  while ( html ) {\n    chars = true;\n\n    // Make sure we're not in a script or style element\n    if ( !stack.last() || !specialElements[ stack.last() ] ) {\n\n      // Comment\n      if ( html.indexOf(\"<!--\") === 0 ) {\n        // comments containing -- are not allowed unless they terminate the comment\n        index = html.indexOf(\"--\", 4);\n\n        if ( index >= 0 && html.lastIndexOf(\"-->\", index) === index) {\n          if (handler.comment) handler.comment( html.substring( 4, index ) );\n          html = html.substring( index + 3 );\n          chars = false;\n        }\n      // DOCTYPE\n      } else if ( DOCTYPE_REGEXP.test(html) ) {\n        match = html.match( DOCTYPE_REGEXP );\n\n        if ( match ) {\n          html = html.replace( match[0], '');\n          chars = false;\n        }\n      // end tag\n      } else if ( BEGING_END_TAGE_REGEXP.test(html) ) {\n        match = html.match( END_TAG_REGEXP );\n\n        if ( match ) {\n          html = html.substring( match[0].length );\n          match[0].replace( END_TAG_REGEXP, parseEndTag );\n          chars = false;\n        }\n\n      // start tag\n      } else if ( BEGIN_TAG_REGEXP.test(html) ) {\n        match = html.match( START_TAG_REGEXP );\n\n        if ( match ) {\n          html = html.substring( match[0].length );\n          match[0].replace( START_TAG_REGEXP, parseStartTag );\n          chars = false;\n        }\n      }\n\n      if ( chars ) {\n        index = html.indexOf(\"<\");\n\n        var text = index < 0 ? html : html.substring( 0, index );\n        html = index < 0 ? \"\" : html.substring( index );\n\n        if (handler.chars) handler.chars( decodeEntities(text) );\n      }\n\n    } else {\n      html = html.replace(new RegExp(\"(.*)<\\\\s*\\\\/\\\\s*\" + stack.last() + \"[^>]*>\", 'i'),\n        function(all, text){\n          text = text.replace(COMMENT_REGEXP, \"$1\").replace(CDATA_REGEXP, \"$1\");\n\n          if (handler.chars) handler.chars( decodeEntities(text) );\n\n          return \"\";\n      });\n\n      parseEndTag( \"\", stack.last() );\n    }\n\n    if ( html == last ) {\n      throw $sanitizeMinErr('badparse', \"The sanitizer was unable to parse the following block \" +\n                                        \"of html: {0}\", html);\n    }\n    last = html;\n  }\n\n  // Clean up any remaining tags\n  parseEndTag();\n\n  function parseStartTag( tag, tagName, rest, unary ) {\n    tagName = angular.lowercase(tagName);\n    if ( blockElements[ tagName ] ) {\n      while ( stack.last() && inlineElements[ stack.last() ] ) {\n        parseEndTag( \"\", stack.last() );\n      }\n    }\n\n    if ( optionalEndTagElements[ tagName ] && stack.last() == tagName ) {\n      parseEndTag( \"\", tagName );\n    }\n\n    unary = voidElements[ tagName ] || !!unary;\n\n    if ( !unary )\n      stack.push( tagName );\n\n    var attrs = {};\n\n    rest.replace(ATTR_REGEXP,\n      function(match, name, doubleQuotedValue, singleQuotedValue, unquotedValue) {\n        var value = doubleQuotedValue\n          || singleQuotedValue\n          || unquotedValue\n          || '';\n\n        attrs[name] = decodeEntities(value);\n    });\n    if (handler.start) handler.start( tagName, attrs, unary );\n  }\n\n  function parseEndTag( tag, tagName ) {\n    var pos = 0, i;\n    tagName = angular.lowercase(tagName);\n    if ( tagName )\n      // Find the closest opened tag of the same type\n      for ( pos = stack.length - 1; pos >= 0; pos-- )\n        if ( stack[ pos ] == tagName )\n          break;\n\n    if ( pos >= 0 ) {\n      // Close all the open elements, up the stack\n      for ( i = stack.length - 1; i >= pos; i-- )\n        if (handler.end) handler.end( stack[ i ] );\n\n      // Remove the open elements from the stack\n      stack.length = pos;\n    }\n  }\n}\n\nvar hiddenPre=document.createElement(\"pre\");\nvar spaceRe = /^(\\s*)([\\s\\S]*?)(\\s*)$/;\n/**\n * decodes all entities into regular string\n * @param value\n * @returns {string} A string with decoded entities.\n */\nfunction decodeEntities(value) {\n  if (!value) { return ''; }\n\n  // Note: IE8 does not preserve spaces at the start/end of innerHTML\n  // so we must capture them and reattach them afterward\n  var parts = spaceRe.exec(value);\n  var spaceBefore = parts[1];\n  var spaceAfter = parts[3];\n  var content = parts[2];\n  if (content) {\n    hiddenPre.innerHTML=content.replace(/</g,\"&lt;\");\n    // innerText depends on styling as it doesn't display hidden elements.\n    // Therefore, it's better to use textContent not to cause unnecessary\n    // reflows. However, IE<9 don't support textContent so the innerText\n    // fallback is necessary.\n    content = 'textContent' in hiddenPre ?\n      hiddenPre.textContent : hiddenPre.innerText;\n  }\n  return spaceBefore + content + spaceAfter;\n}\n\n/**\n * Escapes all potentially dangerous characters, so that the\n * resulting string can be safely inserted into attribute or\n * element text.\n * @param value\n * @returns {string} escaped text\n */\nfunction encodeEntities(value) {\n  return value.\n    replace(/&/g, '&amp;').\n    replace(SURROGATE_PAIR_REGEXP, function (value) {\n      var hi = value.charCodeAt(0);\n      var low = value.charCodeAt(1);\n      return '&#' + (((hi - 0xD800) * 0x400) + (low - 0xDC00) + 0x10000) + ';';\n    }).\n    replace(NON_ALPHANUMERIC_REGEXP, function(value){\n      return '&#' + value.charCodeAt(0) + ';';\n    }).\n    replace(/</g, '&lt;').\n    replace(/>/g, '&gt;');\n}\n\n/**\n * create an HTML/XML writer which writes to buffer\n * @param {Array} buf use buf.jain('') to get out sanitized html string\n * @returns {object} in the form of {\n *     start: function(tag, attrs, unary) {},\n *     end: function(tag) {},\n *     chars: function(text) {},\n *     comment: function(text) {}\n * }\n */\nfunction htmlSanitizeWriter(buf, uriValidator){\n  var ignore = false;\n  var out = angular.bind(buf, buf.push);\n  return {\n    start: function(tag, attrs, unary){\n      tag = angular.lowercase(tag);\n      if (!ignore && specialElements[tag]) {\n        ignore = tag;\n      }\n      if (!ignore && validElements[tag] === true) {\n        out('<');\n        out(tag);\n        angular.forEach(attrs, function(value, key){\n          var lkey=angular.lowercase(key);\n          var isImage = (tag === 'img' && lkey === 'src') || (lkey === 'background');\n          if (validAttrs[lkey] === true &&\n            (uriAttrs[lkey] !== true || uriValidator(value, isImage))) {\n            out(' ');\n            out(key);\n            out('=\"');\n            out(encodeEntities(value));\n            out('\"');\n          }\n        });\n        out(unary ? '/>' : '>');\n      }\n    },\n    end: function(tag){\n        tag = angular.lowercase(tag);\n        if (!ignore && validElements[tag] === true) {\n          out('</');\n          out(tag);\n          out('>');\n        }\n        if (tag == ignore) {\n          ignore = false;\n        }\n      },\n    chars: function(chars){\n        if (!ignore) {\n          out(encodeEntities(chars));\n        }\n      }\n  };\n}\n\n\n// define ngSanitize module and register $sanitize service\nangular.module('ngSanitize', []).provider('$sanitize', $SanitizeProvider);\n\n/* global sanitizeText: false */\n\n/**\n * @ngdoc filter\n * @name linky\n * @kind function\n *\n * @description\n * Finds links in text input and turns them into html links. Supports http/https/ftp/mailto and\n * plain email address links.\n *\n * Requires the {@link ngSanitize `ngSanitize`} module to be installed.\n *\n * @param {string} text Input text.\n * @param {string} target Window (_blank|_self|_parent|_top) or named frame to open links in.\n * @returns {string} Html-linkified text.\n *\n * @usage\n   <span ng-bind-html=\"linky_expression | linky\"></span>\n *\n * @example\n   <example module=\"ngSanitize\" deps=\"angular-sanitize.js\">\n     <file name=\"index.html\">\n       <script>\n         function Ctrl($scope) {\n           $scope.snippet =\n             'Pretty text with some links:\\n'+\n             'http://angularjs.org/,\\n'+\n             'mailto:us@somewhere.org,\\n'+\n             'another@somewhere.org,\\n'+\n             'and one more: ftp://127.0.0.1/.';\n           $scope.snippetWithTarget = 'http://angularjs.org/';\n         }\n       </script>\n       <div ng-controller=\"Ctrl\">\n       Snippet: <textarea ng-model=\"snippet\" cols=\"60\" rows=\"3\"></textarea>\n       <table>\n         <tr>\n           <td>Filter</td>\n           <td>Source</td>\n           <td>Rendered</td>\n         </tr>\n         <tr id=\"linky-filter\">\n           <td>linky filter</td>\n           <td>\n             <pre>&lt;div ng-bind-html=\"snippet | linky\"&gt;<br>&lt;/div&gt;</pre>\n           </td>\n           <td>\n             <div ng-bind-html=\"snippet | linky\"></div>\n           </td>\n         </tr>\n         <tr id=\"linky-target\">\n          <td>linky target</td>\n          <td>\n            <pre>&lt;div ng-bind-html=\"snippetWithTarget | linky:'_blank'\"&gt;<br>&lt;/div&gt;</pre>\n          </td>\n          <td>\n            <div ng-bind-html=\"snippetWithTarget | linky:'_blank'\"></div>\n          </td>\n         </tr>\n         <tr id=\"escaped-html\">\n           <td>no filter</td>\n           <td><pre>&lt;div ng-bind=\"snippet\"&gt;<br>&lt;/div&gt;</pre></td>\n           <td><div ng-bind=\"snippet\"></div></td>\n         </tr>\n       </table>\n     </file>\n     <file name=\"protractor.js\" type=\"protractor\">\n       it('should linkify the snippet with urls', function() {\n         expect(element(by.id('linky-filter')).element(by.binding('snippet | linky')).getText()).\n             toBe('Pretty text with some links: http://angularjs.org/, us@somewhere.org, ' +\n                  'another@somewhere.org, and one more: ftp://127.0.0.1/.');\n         expect(element.all(by.css('#linky-filter a')).count()).toEqual(4);\n       });\n\n       it('should not linkify snippet without the linky filter', function() {\n         expect(element(by.id('escaped-html')).element(by.binding('snippet')).getText()).\n             toBe('Pretty text with some links: http://angularjs.org/, mailto:us@somewhere.org, ' +\n                  'another@somewhere.org, and one more: ftp://127.0.0.1/.');\n         expect(element.all(by.css('#escaped-html a')).count()).toEqual(0);\n       });\n\n       it('should update', function() {\n         element(by.model('snippet')).clear();\n         element(by.model('snippet')).sendKeys('new http://link.');\n         expect(element(by.id('linky-filter')).element(by.binding('snippet | linky')).getText()).\n             toBe('new http://link.');\n         expect(element.all(by.css('#linky-filter a')).count()).toEqual(1);\n         expect(element(by.id('escaped-html')).element(by.binding('snippet')).getText())\n             .toBe('new http://link.');\n       });\n\n       it('should work with the target property', function() {\n        expect(element(by.id('linky-target')).\n            element(by.binding(\"snippetWithTarget | linky:'_blank'\")).getText()).\n            toBe('http://angularjs.org/');\n        expect(element(by.css('#linky-target a')).getAttribute('target')).toEqual('_blank');\n       });\n     </file>\n   </example>\n */\nangular.module('ngSanitize').filter('linky', ['$sanitize', function($sanitize) {\n  var LINKY_URL_REGEXP =\n        /((ftp|https?):\\/\\/|(mailto:)?[A-Za-z0-9._%+-]+@)\\S*[^\\s.;,(){}<>]/,\n      MAILTO_REGEXP = /^mailto:/;\n\n  return function(text, target) {\n    if (!text) return text;\n    var match;\n    var raw = text;\n    var html = [];\n    var url;\n    var i;\n    while ((match = raw.match(LINKY_URL_REGEXP))) {\n      // We can not end in these as they are sometimes found at the end of the sentence\n      url = match[0];\n      // if we did not match ftp/http/mailto then assume mailto\n      if (match[2] == match[3]) url = 'mailto:' + url;\n      i = match.index;\n      addText(raw.substr(0, i));\n      addLink(url, match[0].replace(MAILTO_REGEXP, ''));\n      raw = raw.substring(i + match[0].length);\n    }\n    addText(raw);\n    return $sanitize(html.join(''));\n\n    function addText(text) {\n      if (!text) {\n        return;\n      }\n      html.push(sanitizeText(text));\n    }\n\n    function addLink(url, text) {\n      html.push('<a ');\n      if (angular.isDefined(target)) {\n        html.push('target=\"');\n        html.push(target);\n        html.push('\" ');\n      }\n      html.push('href=\"');\n      html.push(url);\n      html.push('\">');\n      addText(text);\n      html.push('</a>');\n    }\n  };\n}]);\n\n\n})(window, window.angular);\n"
  },
  {
    "path": "content/present-ionic/slides/ionic/js/angular/angular.js",
    "content": "/**\n * @license AngularJS v1.2.17\n * (c) 2010-2014 Google, Inc. http://angularjs.org\n * License: MIT\n */\n(function(window, document, undefined) {'use strict';\n\n/**\n * @description\n *\n * This object provides a utility for producing rich Error messages within\n * Angular. It can be called as follows:\n *\n * var exampleMinErr = minErr('example');\n * throw exampleMinErr('one', 'This {0} is {1}', foo, bar);\n *\n * The above creates an instance of minErr in the example namespace. The\n * resulting error will have a namespaced error code of example.one.  The\n * resulting error will replace {0} with the value of foo, and {1} with the\n * value of bar. The object is not restricted in the number of arguments it can\n * take.\n *\n * If fewer arguments are specified than necessary for interpolation, the extra\n * interpolation markers will be preserved in the final string.\n *\n * Since data will be parsed statically during a build step, some restrictions\n * are applied with respect to how minErr instances are created and called.\n * Instances should have names of the form namespaceMinErr for a minErr created\n * using minErr('namespace') . Error codes, namespaces and template strings\n * should all be static strings, not variables or general expressions.\n *\n * @param {string} module The namespace to use for the new minErr instance.\n * @returns {function(code:string, template:string, ...templateArgs): Error} minErr instance\n */\n\nfunction minErr(module) {\n  return function () {\n    var code = arguments[0],\n      prefix = '[' + (module ? module + ':' : '') + code + '] ',\n      template = arguments[1],\n      templateArgs = arguments,\n      stringify = function (obj) {\n        if (typeof obj === 'function') {\n          return obj.toString().replace(/ \\{[\\s\\S]*$/, '');\n        } else if (typeof obj === 'undefined') {\n          return 'undefined';\n        } else if (typeof obj !== 'string') {\n          return JSON.stringify(obj);\n        }\n        return obj;\n      },\n      message, i;\n\n    message = prefix + template.replace(/\\{\\d+\\}/g, function (match) {\n      var index = +match.slice(1, -1), arg;\n\n      if (index + 2 < templateArgs.length) {\n        arg = templateArgs[index + 2];\n        if (typeof arg === 'function') {\n          return arg.toString().replace(/ ?\\{[\\s\\S]*$/, '');\n        } else if (typeof arg === 'undefined') {\n          return 'undefined';\n        } else if (typeof arg !== 'string') {\n          return toJson(arg);\n        }\n        return arg;\n      }\n      return match;\n    });\n\n    message = message + '\\nhttp://errors.angularjs.org/1.2.17/' +\n      (module ? module + '/' : '') + code;\n    for (i = 2; i < arguments.length; i++) {\n      message = message + (i == 2 ? '?' : '&') + 'p' + (i-2) + '=' +\n        encodeURIComponent(stringify(arguments[i]));\n    }\n\n    return new Error(message);\n  };\n}\n\n/* We need to tell jshint what variables are being exported */\n/* global\n    -angular,\n    -msie,\n    -jqLite,\n    -jQuery,\n    -slice,\n    -push,\n    -toString,\n    -ngMinErr,\n    -angularModule,\n    -nodeName_,\n    -uid,\n\n    -lowercase,\n    -uppercase,\n    -manualLowercase,\n    -manualUppercase,\n    -nodeName_,\n    -isArrayLike,\n    -forEach,\n    -sortedKeys,\n    -forEachSorted,\n    -reverseParams,\n    -nextUid,\n    -setHashKey,\n    -extend,\n    -int,\n    -inherit,\n    -noop,\n    -identity,\n    -valueFn,\n    -isUndefined,\n    -isDefined,\n    -isObject,\n    -isString,\n    -isNumber,\n    -isDate,\n    -isArray,\n    -isFunction,\n    -isRegExp,\n    -isWindow,\n    -isScope,\n    -isFile,\n    -isBlob,\n    -isBoolean,\n    -trim,\n    -isElement,\n    -makeMap,\n    -map,\n    -size,\n    -includes,\n    -indexOf,\n    -arrayRemove,\n    -isLeafNode,\n    -copy,\n    -shallowCopy,\n    -equals,\n    -csp,\n    -concat,\n    -sliceArgs,\n    -bind,\n    -toJsonReplacer,\n    -toJson,\n    -fromJson,\n    -toBoolean,\n    -startingTag,\n    -tryDecodeURIComponent,\n    -parseKeyValue,\n    -toKeyValue,\n    -encodeUriSegment,\n    -encodeUriQuery,\n    -angularInit,\n    -bootstrap,\n    -snake_case,\n    -bindJQuery,\n    -assertArg,\n    -assertArgFn,\n    -assertNotHasOwnProperty,\n    -getter,\n    -getBlockElements,\n    -hasOwnProperty,\n\n*/\n\n////////////////////////////////////\n\n/**\n * @ngdoc module\n * @name ng\n * @module ng\n * @description\n *\n * # ng (core module)\n * The ng module is loaded by default when an AngularJS application is started. The module itself\n * contains the essential components for an AngularJS application to function. The table below\n * lists a high level breakdown of each of the services/factories, filters, directives and testing\n * components available within this core module.\n *\n * <div doc-module-components=\"ng\"></div>\n */\n\n/**\n * @ngdoc function\n * @name angular.lowercase\n * @module ng\n * @kind function\n *\n * @description Converts the specified string to lowercase.\n * @param {string} string String to be converted to lowercase.\n * @returns {string} Lowercased string.\n */\nvar lowercase = function(string){return isString(string) ? string.toLowerCase() : string;};\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\n\n/**\n * @ngdoc function\n * @name angular.uppercase\n * @module ng\n * @kind function\n *\n * @description Converts the specified string to uppercase.\n * @param {string} string String to be converted to uppercase.\n * @returns {string} Uppercased string.\n */\nvar uppercase = function(string){return isString(string) ? string.toUpperCase() : string;};\n\n\nvar manualLowercase = function(s) {\n  /* jshint bitwise: false */\n  return isString(s)\n      ? s.replace(/[A-Z]/g, function(ch) {return String.fromCharCode(ch.charCodeAt(0) | 32);})\n      : s;\n};\nvar manualUppercase = function(s) {\n  /* jshint bitwise: false */\n  return isString(s)\n      ? s.replace(/[a-z]/g, function(ch) {return String.fromCharCode(ch.charCodeAt(0) & ~32);})\n      : s;\n};\n\n\n// String#toLowerCase and String#toUpperCase don't produce correct results in browsers with Turkish\n// locale, for this reason we need to detect this case and redefine lowercase/uppercase methods\n// with correct but slower alternatives.\nif ('i' !== 'I'.toLowerCase()) {\n  lowercase = manualLowercase;\n  uppercase = manualUppercase;\n}\n\n\nvar /** holds major version number for IE or NaN for real browsers */\n    msie,\n    jqLite,           // delay binding since jQuery could be loaded after us.\n    jQuery,           // delay binding\n    slice             = [].slice,\n    push              = [].push,\n    toString          = Object.prototype.toString,\n    ngMinErr          = minErr('ng'),\n\n    /** @name angular */\n    angular           = window.angular || (window.angular = {}),\n    angularModule,\n    nodeName_,\n    uid               = ['0', '0', '0'];\n\n/**\n * IE 11 changed the format of the UserAgent string.\n * See http://msdn.microsoft.com/en-us/library/ms537503.aspx\n */\nmsie = int((/msie (\\d+)/.exec(lowercase(navigator.userAgent)) || [])[1]);\nif (isNaN(msie)) {\n  msie = int((/trident\\/.*; rv:(\\d+)/.exec(lowercase(navigator.userAgent)) || [])[1]);\n}\n\n\n/**\n * @private\n * @param {*} obj\n * @return {boolean} Returns true if `obj` is an array or array-like object (NodeList, Arguments,\n *                   String ...)\n */\nfunction isArrayLike(obj) {\n  if (obj == null || isWindow(obj)) {\n    return false;\n  }\n\n  var length = obj.length;\n\n  if (obj.nodeType === 1 && length) {\n    return true;\n  }\n\n  return isString(obj) || isArray(obj) || length === 0 ||\n         typeof length === 'number' && length > 0 && (length - 1) in obj;\n}\n\n/**\n * @ngdoc function\n * @name angular.forEach\n * @module ng\n * @kind function\n *\n * @description\n * Invokes the `iterator` function once for each item in `obj` collection, which can be either an\n * object or an array. The `iterator` function is invoked with `iterator(value, key)`, where `value`\n * is the value of an object property or an array element and `key` is the object property key or\n * array element index. Specifying a `context` for the function is optional.\n *\n * It is worth noting that `.forEach` does not iterate over inherited properties because it filters\n * using the `hasOwnProperty` method.\n *\n   ```js\n     var values = {name: 'misko', gender: 'male'};\n     var log = [];\n     angular.forEach(values, function(value, key) {\n       this.push(key + ': ' + value);\n     }, log);\n     expect(log).toEqual(['name: misko', 'gender: male']);\n   ```\n *\n * @param {Object|Array} obj Object to iterate over.\n * @param {Function} iterator Iterator function.\n * @param {Object=} context Object to become context (`this`) for the iterator function.\n * @returns {Object|Array} Reference to `obj`.\n */\nfunction forEach(obj, iterator, context) {\n  var key;\n  if (obj) {\n    if (isFunction(obj)) {\n      for (key in obj) {\n        // Need to check if hasOwnProperty exists,\n        // as on IE8 the result of querySelectorAll is an object without a hasOwnProperty function\n        if (key != 'prototype' && key != 'length' && key != 'name' && (!obj.hasOwnProperty || obj.hasOwnProperty(key))) {\n          iterator.call(context, obj[key], key);\n        }\n      }\n    } else if (obj.forEach && obj.forEach !== forEach) {\n      obj.forEach(iterator, context);\n    } else if (isArrayLike(obj)) {\n      for (key = 0; key < obj.length; key++)\n        iterator.call(context, obj[key], key);\n    } else {\n      for (key in obj) {\n        if (obj.hasOwnProperty(key)) {\n          iterator.call(context, obj[key], key);\n        }\n      }\n    }\n  }\n  return obj;\n}\n\nfunction sortedKeys(obj) {\n  var keys = [];\n  for (var key in obj) {\n    if (obj.hasOwnProperty(key)) {\n      keys.push(key);\n    }\n  }\n  return keys.sort();\n}\n\nfunction forEachSorted(obj, iterator, context) {\n  var keys = sortedKeys(obj);\n  for ( var i = 0; i < keys.length; i++) {\n    iterator.call(context, obj[keys[i]], keys[i]);\n  }\n  return keys;\n}\n\n\n/**\n * when using forEach the params are value, key, but it is often useful to have key, value.\n * @param {function(string, *)} iteratorFn\n * @returns {function(*, string)}\n */\nfunction reverseParams(iteratorFn) {\n  return function(value, key) { iteratorFn(key, value); };\n}\n\n/**\n * A consistent way of creating unique IDs in angular. The ID is a sequence of alpha numeric\n * characters such as '012ABC'. The reason why we are not using simply a number counter is that\n * the number string gets longer over time, and it can also overflow, where as the nextId\n * will grow much slower, it is a string, and it will never overflow.\n *\n * @returns {string} an unique alpha-numeric string\n */\nfunction nextUid() {\n  var index = uid.length;\n  var digit;\n\n  while(index) {\n    index--;\n    digit = uid[index].charCodeAt(0);\n    if (digit == 57 /*'9'*/) {\n      uid[index] = 'A';\n      return uid.join('');\n    }\n    if (digit == 90  /*'Z'*/) {\n      uid[index] = '0';\n    } else {\n      uid[index] = String.fromCharCode(digit + 1);\n      return uid.join('');\n    }\n  }\n  uid.unshift('0');\n  return uid.join('');\n}\n\n\n/**\n * Set or clear the hashkey for an object.\n * @param obj object\n * @param h the hashkey (!truthy to delete the hashkey)\n */\nfunction setHashKey(obj, h) {\n  if (h) {\n    obj.$$hashKey = h;\n  }\n  else {\n    delete obj.$$hashKey;\n  }\n}\n\n/**\n * @ngdoc function\n * @name angular.extend\n * @module ng\n * @kind function\n *\n * @description\n * Extends the destination object `dst` by copying all of the properties from the `src` object(s)\n * to `dst`. You can specify multiple `src` objects.\n *\n * @param {Object} dst Destination object.\n * @param {...Object} src Source object(s).\n * @returns {Object} Reference to `dst`.\n */\nfunction extend(dst) {\n  var h = dst.$$hashKey;\n  forEach(arguments, function(obj) {\n    if (obj !== dst) {\n      forEach(obj, function(value, key) {\n        dst[key] = value;\n      });\n    }\n  });\n\n  setHashKey(dst,h);\n  return dst;\n}\n\nfunction int(str) {\n  return parseInt(str, 10);\n}\n\n\nfunction inherit(parent, extra) {\n  return extend(new (extend(function() {}, {prototype:parent}))(), extra);\n}\n\n/**\n * @ngdoc function\n * @name angular.noop\n * @module ng\n * @kind function\n *\n * @description\n * A function that performs no operations. This function can be useful when writing code in the\n * functional style.\n   ```js\n     function foo(callback) {\n       var result = calculateResult();\n       (callback || angular.noop)(result);\n     }\n   ```\n */\nfunction noop() {}\nnoop.$inject = [];\n\n\n/**\n * @ngdoc function\n * @name angular.identity\n * @module ng\n * @kind function\n *\n * @description\n * A function that returns its first argument. This function is useful when writing code in the\n * functional style.\n *\n   ```js\n     function transformer(transformationFn, value) {\n       return (transformationFn || angular.identity)(value);\n     };\n   ```\n */\nfunction identity($) {return $;}\nidentity.$inject = [];\n\n\nfunction valueFn(value) {return function() {return value;};}\n\n/**\n * @ngdoc function\n * @name angular.isUndefined\n * @module ng\n * @kind function\n *\n * @description\n * Determines if a reference is undefined.\n *\n * @param {*} value Reference to check.\n * @returns {boolean} True if `value` is undefined.\n */\nfunction isUndefined(value){return typeof value === 'undefined';}\n\n\n/**\n * @ngdoc function\n * @name angular.isDefined\n * @module ng\n * @kind function\n *\n * @description\n * Determines if a reference is defined.\n *\n * @param {*} value Reference to check.\n * @returns {boolean} True if `value` is defined.\n */\nfunction isDefined(value){return typeof value !== 'undefined';}\n\n\n/**\n * @ngdoc function\n * @name angular.isObject\n * @module ng\n * @kind function\n *\n * @description\n * Determines if a reference is an `Object`. Unlike `typeof` in JavaScript, `null`s are not\n * considered to be objects. Note that JavaScript arrays are objects.\n *\n * @param {*} value Reference to check.\n * @returns {boolean} True if `value` is an `Object` but not `null`.\n */\nfunction isObject(value){return value != null && typeof value === 'object';}\n\n\n/**\n * @ngdoc function\n * @name angular.isString\n * @module ng\n * @kind function\n *\n * @description\n * Determines if a reference is a `String`.\n *\n * @param {*} value Reference to check.\n * @returns {boolean} True if `value` is a `String`.\n */\nfunction isString(value){return typeof value === 'string';}\n\n\n/**\n * @ngdoc function\n * @name angular.isNumber\n * @module ng\n * @kind function\n *\n * @description\n * Determines if a reference is a `Number`.\n *\n * @param {*} value Reference to check.\n * @returns {boolean} True if `value` is a `Number`.\n */\nfunction isNumber(value){return typeof value === 'number';}\n\n\n/**\n * @ngdoc function\n * @name angular.isDate\n * @module ng\n * @kind function\n *\n * @description\n * Determines if a value is a date.\n *\n * @param {*} value Reference to check.\n * @returns {boolean} True if `value` is a `Date`.\n */\nfunction isDate(value) {\n  return toString.call(value) === '[object Date]';\n}\n\n\n/**\n * @ngdoc function\n * @name angular.isArray\n * @module ng\n * @kind function\n *\n * @description\n * Determines if a reference is an `Array`.\n *\n * @param {*} value Reference to check.\n * @returns {boolean} True if `value` is an `Array`.\n */\nfunction isArray(value) {\n  return toString.call(value) === '[object Array]';\n}\n\n\n/**\n * @ngdoc function\n * @name angular.isFunction\n * @module ng\n * @kind function\n *\n * @description\n * Determines if a reference is a `Function`.\n *\n * @param {*} value Reference to check.\n * @returns {boolean} True if `value` is a `Function`.\n */\nfunction isFunction(value){return typeof value === 'function';}\n\n\n/**\n * Determines if a value is a regular expression object.\n *\n * @private\n * @param {*} value Reference to check.\n * @returns {boolean} True if `value` is a `RegExp`.\n */\nfunction isRegExp(value) {\n  return toString.call(value) === '[object RegExp]';\n}\n\n\n/**\n * Checks if `obj` is a window object.\n *\n * @private\n * @param {*} obj Object to check\n * @returns {boolean} True if `obj` is a window obj.\n */\nfunction isWindow(obj) {\n  return obj && obj.document && obj.location && obj.alert && obj.setInterval;\n}\n\n\nfunction isScope(obj) {\n  return obj && obj.$evalAsync && obj.$watch;\n}\n\n\nfunction isFile(obj) {\n  return toString.call(obj) === '[object File]';\n}\n\n\nfunction isBlob(obj) {\n  return toString.call(obj) === '[object Blob]';\n}\n\n\nfunction isBoolean(value) {\n  return typeof value === 'boolean';\n}\n\n\nvar trim = (function() {\n  // native trim is way faster: http://jsperf.com/angular-trim-test\n  // but IE doesn't have it... :-(\n  // TODO: we should move this into IE/ES5 polyfill\n  if (!String.prototype.trim) {\n    return function(value) {\n      return isString(value) ? value.replace(/^\\s\\s*/, '').replace(/\\s\\s*$/, '') : value;\n    };\n  }\n  return function(value) {\n    return isString(value) ? value.trim() : value;\n  };\n})();\n\n\n/**\n * @ngdoc function\n * @name angular.isElement\n * @module ng\n * @kind function\n *\n * @description\n * Determines if a reference is a DOM element (or wrapped jQuery element).\n *\n * @param {*} value Reference to check.\n * @returns {boolean} True if `value` is a DOM element (or wrapped jQuery element).\n */\nfunction isElement(node) {\n  return !!(node &&\n    (node.nodeName  // we are a direct element\n    || (node.prop && node.attr && node.find)));  // we have an on and find method part of jQuery API\n}\n\n/**\n * @param str 'key1,key2,...'\n * @returns {object} in the form of {key1:true, key2:true, ...}\n */\nfunction makeMap(str) {\n  var obj = {}, items = str.split(\",\"), i;\n  for ( i = 0; i < items.length; i++ )\n    obj[ items[i] ] = true;\n  return obj;\n}\n\n\nif (msie < 9) {\n  nodeName_ = function(element) {\n    element = element.nodeName ? element : element[0];\n    return (element.scopeName && element.scopeName != 'HTML')\n      ? uppercase(element.scopeName + ':' + element.nodeName) : element.nodeName;\n  };\n} else {\n  nodeName_ = function(element) {\n    return element.nodeName ? element.nodeName : element[0].nodeName;\n  };\n}\n\n\nfunction map(obj, iterator, context) {\n  var results = [];\n  forEach(obj, function(value, index, list) {\n    results.push(iterator.call(context, value, index, list));\n  });\n  return results;\n}\n\n\n/**\n * @description\n * Determines the number of elements in an array, the number of properties an object has, or\n * the length of a string.\n *\n * Note: This function is used to augment the Object type in Angular expressions. See\n * {@link angular.Object} for more information about Angular arrays.\n *\n * @param {Object|Array|string} obj Object, array, or string to inspect.\n * @param {boolean} [ownPropsOnly=false] Count only \"own\" properties in an object\n * @returns {number} The size of `obj` or `0` if `obj` is neither an object nor an array.\n */\nfunction size(obj, ownPropsOnly) {\n  var count = 0, key;\n\n  if (isArray(obj) || isString(obj)) {\n    return obj.length;\n  } else if (isObject(obj)) {\n    for (key in obj)\n      if (!ownPropsOnly || obj.hasOwnProperty(key))\n        count++;\n  }\n\n  return count;\n}\n\n\nfunction includes(array, obj) {\n  return indexOf(array, obj) != -1;\n}\n\nfunction indexOf(array, obj) {\n  if (array.indexOf) return array.indexOf(obj);\n\n  for (var i = 0; i < array.length; i++) {\n    if (obj === array[i]) return i;\n  }\n  return -1;\n}\n\nfunction arrayRemove(array, value) {\n  var index = indexOf(array, value);\n  if (index >=0)\n    array.splice(index, 1);\n  return value;\n}\n\nfunction isLeafNode (node) {\n  if (node) {\n    switch (node.nodeName) {\n    case \"OPTION\":\n    case \"PRE\":\n    case \"TITLE\":\n      return true;\n    }\n  }\n  return false;\n}\n\n/**\n * @ngdoc function\n * @name angular.copy\n * @module ng\n * @kind function\n *\n * @description\n * Creates a deep copy of `source`, which should be an object or an array.\n *\n * * If no destination is supplied, a copy of the object or array is created.\n * * If a destination is provided, all of its elements (for array) or properties (for objects)\n *   are deleted and then all elements/properties from the source are copied to it.\n * * If `source` is not an object or array (inc. `null` and `undefined`), `source` is returned.\n * * If `source` is identical to 'destination' an exception will be thrown.\n *\n * @param {*} source The source that will be used to make a copy.\n *                   Can be any type, including primitives, `null`, and `undefined`.\n * @param {(Object|Array)=} destination Destination into which the source is copied. If\n *     provided, must be of the same type as `source`.\n * @returns {*} The copy or updated `destination`, if `destination` was specified.\n *\n * @example\n <example>\n <file name=\"index.html\">\n <div ng-controller=\"Controller\">\n <form novalidate class=\"simple-form\">\n Name: <input type=\"text\" ng-model=\"user.name\" /><br />\n E-mail: <input type=\"email\" ng-model=\"user.email\" /><br />\n Gender: <input type=\"radio\" ng-model=\"user.gender\" value=\"male\" />male\n <input type=\"radio\" ng-model=\"user.gender\" value=\"female\" />female<br />\n <button ng-click=\"reset()\">RESET</button>\n <button ng-click=\"update(user)\">SAVE</button>\n </form>\n <pre>form = {{user | json}}</pre>\n <pre>master = {{master | json}}</pre>\n </div>\n\n <script>\n function Controller($scope) {\n    $scope.master= {};\n\n    $scope.update = function(user) {\n      // Example with 1 argument\n      $scope.master= angular.copy(user);\n    };\n\n    $scope.reset = function() {\n      // Example with 2 arguments\n      angular.copy($scope.master, $scope.user);\n    };\n\n    $scope.reset();\n  }\n </script>\n </file>\n </example>\n */\nfunction copy(source, destination, stackSource, stackDest) {\n  if (isWindow(source) || isScope(source)) {\n    throw ngMinErr('cpws',\n      \"Can't copy! Making copies of Window or Scope instances is not supported.\");\n  }\n\n  if (!destination) {\n    destination = source;\n    if (source) {\n      if (isArray(source)) {\n        destination = copy(source, [], stackSource, stackDest);\n      } else if (isDate(source)) {\n        destination = new Date(source.getTime());\n      } else if (isRegExp(source)) {\n        destination = new RegExp(source.source);\n      } else if (isObject(source)) {\n        destination = copy(source, {}, stackSource, stackDest);\n      }\n    }\n  } else {\n    if (source === destination) throw ngMinErr('cpi',\n      \"Can't copy! Source and destination are identical.\");\n\n    stackSource = stackSource || [];\n    stackDest = stackDest || [];\n\n    if (isObject(source)) {\n      var index = indexOf(stackSource, source);\n      if (index !== -1) return stackDest[index];\n\n      stackSource.push(source);\n      stackDest.push(destination);\n    }\n\n    var result;\n    if (isArray(source)) {\n      destination.length = 0;\n      for ( var i = 0; i < source.length; i++) {\n        result = copy(source[i], null, stackSource, stackDest);\n        if (isObject(source[i])) {\n          stackSource.push(source[i]);\n          stackDest.push(result);\n        }\n        destination.push(result);\n      }\n    } else {\n      var h = destination.$$hashKey;\n      forEach(destination, function(value, key) {\n        delete destination[key];\n      });\n      for ( var key in source) {\n        result = copy(source[key], null, stackSource, stackDest);\n        if (isObject(source[key])) {\n          stackSource.push(source[key]);\n          stackDest.push(result);\n        }\n        destination[key] = result;\n      }\n      setHashKey(destination,h);\n    }\n\n  }\n  return destination;\n}\n\n/**\n * Creates a shallow copy of an object, an array or a primitive\n */\nfunction shallowCopy(src, dst) {\n  if (isArray(src)) {\n    dst = dst || [];\n\n    for ( var i = 0; i < src.length; i++) {\n      dst[i] = src[i];\n    }\n  } else if (isObject(src)) {\n    dst = dst || {};\n\n    for (var key in src) {\n      if (hasOwnProperty.call(src, key) && !(key.charAt(0) === '$' && key.charAt(1) === '$')) {\n        dst[key] = src[key];\n      }\n    }\n  }\n\n  return dst || src;\n}\n\n\n/**\n * @ngdoc function\n * @name angular.equals\n * @module ng\n * @kind function\n *\n * @description\n * Determines if two objects or two values are equivalent. Supports value types, regular\n * expressions, arrays and objects.\n *\n * Two objects or values are considered equivalent if at least one of the following is true:\n *\n * * Both objects or values pass `===` comparison.\n * * Both objects or values are of the same type and all of their properties are equal by\n *   comparing them with `angular.equals`.\n * * Both values are NaN. (In JavaScript, NaN == NaN => false. But we consider two NaN as equal)\n * * Both values represent the same regular expression (In JavaScript,\n *   /abc/ == /abc/ => false. But we consider two regular expressions as equal when their textual\n *   representation matches).\n *\n * During a property comparison, properties of `function` type and properties with names\n * that begin with `$` are ignored.\n *\n * Scope and DOMWindow objects are being compared only by identify (`===`).\n *\n * @param {*} o1 Object or value to compare.\n * @param {*} o2 Object or value to compare.\n * @returns {boolean} True if arguments are equal.\n */\nfunction equals(o1, o2) {\n  if (o1 === o2) return true;\n  if (o1 === null || o2 === null) return false;\n  if (o1 !== o1 && o2 !== o2) return true; // NaN === NaN\n  var t1 = typeof o1, t2 = typeof o2, length, key, keySet;\n  if (t1 == t2) {\n    if (t1 == 'object') {\n      if (isArray(o1)) {\n        if (!isArray(o2)) return false;\n        if ((length = o1.length) == o2.length) {\n          for(key=0; key<length; key++) {\n            if (!equals(o1[key], o2[key])) return false;\n          }\n          return true;\n        }\n      } else if (isDate(o1)) {\n        return isDate(o2) && o1.getTime() == o2.getTime();\n      } else if (isRegExp(o1) && isRegExp(o2)) {\n        return o1.toString() == o2.toString();\n      } else {\n        if (isScope(o1) || isScope(o2) || isWindow(o1) || isWindow(o2) || isArray(o2)) return false;\n        keySet = {};\n        for(key in o1) {\n          if (key.charAt(0) === '$' || isFunction(o1[key])) continue;\n          if (!equals(o1[key], o2[key])) return false;\n          keySet[key] = true;\n        }\n        for(key in o2) {\n          if (!keySet.hasOwnProperty(key) &&\n              key.charAt(0) !== '$' &&\n              o2[key] !== undefined &&\n              !isFunction(o2[key])) return false;\n        }\n        return true;\n      }\n    }\n  }\n  return false;\n}\n\n\nfunction csp() {\n  return (document.securityPolicy && document.securityPolicy.isActive) ||\n      (document.querySelector &&\n      !!(document.querySelector('[ng-csp]') || document.querySelector('[data-ng-csp]')));\n}\n\n\nfunction concat(array1, array2, index) {\n  return array1.concat(slice.call(array2, index));\n}\n\nfunction sliceArgs(args, startIndex) {\n  return slice.call(args, startIndex || 0);\n}\n\n\n/* jshint -W101 */\n/**\n * @ngdoc function\n * @name angular.bind\n * @module ng\n * @kind function\n *\n * @description\n * Returns a function which calls function `fn` bound to `self` (`self` becomes the `this` for\n * `fn`). You can supply optional `args` that are prebound to the function. This feature is also\n * known as [partial application](http://en.wikipedia.org/wiki/Partial_application), as\n * distinguished from [function currying](http://en.wikipedia.org/wiki/Currying#Contrast_with_partial_function_application).\n *\n * @param {Object} self Context which `fn` should be evaluated in.\n * @param {function()} fn Function to be bound.\n * @param {...*} args Optional arguments to be prebound to the `fn` function call.\n * @returns {function()} Function that wraps the `fn` with all the specified bindings.\n */\n/* jshint +W101 */\nfunction bind(self, fn) {\n  var curryArgs = arguments.length > 2 ? sliceArgs(arguments, 2) : [];\n  if (isFunction(fn) && !(fn instanceof RegExp)) {\n    return curryArgs.length\n      ? function() {\n          return arguments.length\n            ? fn.apply(self, curryArgs.concat(slice.call(arguments, 0)))\n            : fn.apply(self, curryArgs);\n        }\n      : function() {\n          return arguments.length\n            ? fn.apply(self, arguments)\n            : fn.call(self);\n        };\n  } else {\n    // in IE, native methods are not functions so they cannot be bound (note: they don't need to be)\n    return fn;\n  }\n}\n\n\nfunction toJsonReplacer(key, value) {\n  var val = value;\n\n  if (typeof key === 'string' && key.charAt(0) === '$') {\n    val = undefined;\n  } else if (isWindow(value)) {\n    val = '$WINDOW';\n  } else if (value &&  document === value) {\n    val = '$DOCUMENT';\n  } else if (isScope(value)) {\n    val = '$SCOPE';\n  }\n\n  return val;\n}\n\n\n/**\n * @ngdoc function\n * @name angular.toJson\n * @module ng\n * @kind function\n *\n * @description\n * Serializes input into a JSON-formatted string. Properties with leading $ characters will be\n * stripped since angular uses this notation internally.\n *\n * @param {Object|Array|Date|string|number} obj Input to be serialized into JSON.\n * @param {boolean=} pretty If set to true, the JSON output will contain newlines and whitespace.\n * @returns {string|undefined} JSON-ified string representing `obj`.\n */\nfunction toJson(obj, pretty) {\n  if (typeof obj === 'undefined') return undefined;\n  return JSON.stringify(obj, toJsonReplacer, pretty ? '  ' : null);\n}\n\n\n/**\n * @ngdoc function\n * @name angular.fromJson\n * @module ng\n * @kind function\n *\n * @description\n * Deserializes a JSON string.\n *\n * @param {string} json JSON string to deserialize.\n * @returns {Object|Array|string|number} Deserialized thingy.\n */\nfunction fromJson(json) {\n  return isString(json)\n      ? JSON.parse(json)\n      : json;\n}\n\n\nfunction toBoolean(value) {\n  if (typeof value === 'function') {\n    value = true;\n  } else if (value && value.length !== 0) {\n    var v = lowercase(\"\" + value);\n    value = !(v == 'f' || v == '0' || v == 'false' || v == 'no' || v == 'n' || v == '[]');\n  } else {\n    value = false;\n  }\n  return value;\n}\n\n/**\n * @returns {string} Returns the string representation of the element.\n */\nfunction startingTag(element) {\n  element = jqLite(element).clone();\n  try {\n    // turns out IE does not let you set .html() on elements which\n    // are not allowed to have children. So we just ignore it.\n    element.empty();\n  } catch(e) {}\n  // As Per DOM Standards\n  var TEXT_NODE = 3;\n  var elemHtml = jqLite('<div>').append(element).html();\n  try {\n    return element[0].nodeType === TEXT_NODE ? lowercase(elemHtml) :\n        elemHtml.\n          match(/^(<[^>]+>)/)[1].\n          replace(/^<([\\w\\-]+)/, function(match, nodeName) { return '<' + lowercase(nodeName); });\n  } catch(e) {\n    return lowercase(elemHtml);\n  }\n\n}\n\n\n/////////////////////////////////////////////////\n\n/**\n * Tries to decode the URI component without throwing an exception.\n *\n * @private\n * @param str value potential URI component to check.\n * @returns {boolean} True if `value` can be decoded\n * with the decodeURIComponent function.\n */\nfunction tryDecodeURIComponent(value) {\n  try {\n    return decodeURIComponent(value);\n  } catch(e) {\n    // Ignore any invalid uri component\n  }\n}\n\n\n/**\n * Parses an escaped url query string into key-value pairs.\n * @returns {Object.<string,boolean|Array>}\n */\nfunction parseKeyValue(/**string*/keyValue) {\n  var obj = {}, key_value, key;\n  forEach((keyValue || \"\").split('&'), function(keyValue) {\n    if ( keyValue ) {\n      key_value = keyValue.split('=');\n      key = tryDecodeURIComponent(key_value[0]);\n      if ( isDefined(key) ) {\n        var val = isDefined(key_value[1]) ? tryDecodeURIComponent(key_value[1]) : true;\n        if (!obj[key]) {\n          obj[key] = val;\n        } else if(isArray(obj[key])) {\n          obj[key].push(val);\n        } else {\n          obj[key] = [obj[key],val];\n        }\n      }\n    }\n  });\n  return obj;\n}\n\nfunction toKeyValue(obj) {\n  var parts = [];\n  forEach(obj, function(value, key) {\n    if (isArray(value)) {\n      forEach(value, function(arrayValue) {\n        parts.push(encodeUriQuery(key, true) +\n                   (arrayValue === true ? '' : '=' + encodeUriQuery(arrayValue, true)));\n      });\n    } else {\n    parts.push(encodeUriQuery(key, true) +\n               (value === true ? '' : '=' + encodeUriQuery(value, true)));\n    }\n  });\n  return parts.length ? parts.join('&') : '';\n}\n\n\n/**\n * We need our custom method because encodeURIComponent is too aggressive and doesn't follow\n * http://www.ietf.org/rfc/rfc3986.txt with regards to the character set (pchar) allowed in path\n * segments:\n *    segment       = *pchar\n *    pchar         = unreserved / pct-encoded / sub-delims / \":\" / \"@\"\n *    pct-encoded   = \"%\" HEXDIG HEXDIG\n *    unreserved    = ALPHA / DIGIT / \"-\" / \".\" / \"_\" / \"~\"\n *    sub-delims    = \"!\" / \"$\" / \"&\" / \"'\" / \"(\" / \")\"\n *                     / \"*\" / \"+\" / \",\" / \";\" / \"=\"\n */\nfunction encodeUriSegment(val) {\n  return encodeUriQuery(val, true).\n             replace(/%26/gi, '&').\n             replace(/%3D/gi, '=').\n             replace(/%2B/gi, '+');\n}\n\n\n/**\n * This method is intended for encoding *key* or *value* parts of query component. We need a custom\n * method because encodeURIComponent is too aggressive and encodes stuff that doesn't have to be\n * encoded per http://tools.ietf.org/html/rfc3986:\n *    query       = *( pchar / \"/\" / \"?\" )\n *    pchar         = unreserved / pct-encoded / sub-delims / \":\" / \"@\"\n *    unreserved    = ALPHA / DIGIT / \"-\" / \".\" / \"_\" / \"~\"\n *    pct-encoded   = \"%\" HEXDIG HEXDIG\n *    sub-delims    = \"!\" / \"$\" / \"&\" / \"'\" / \"(\" / \")\"\n *                     / \"*\" / \"+\" / \",\" / \";\" / \"=\"\n */\nfunction encodeUriQuery(val, pctEncodeSpaces) {\n  return encodeURIComponent(val).\n             replace(/%40/gi, '@').\n             replace(/%3A/gi, ':').\n             replace(/%24/g, '$').\n             replace(/%2C/gi, ',').\n             replace(/%20/g, (pctEncodeSpaces ? '%20' : '+'));\n}\n\n\n/**\n * @ngdoc directive\n * @name ngApp\n * @module ng\n *\n * @element ANY\n * @param {angular.Module} ngApp an optional application\n *   {@link angular.module module} name to load.\n *\n * @description\n *\n * Use this directive to **auto-bootstrap** an AngularJS application. The `ngApp` directive\n * designates the **root element** of the application and is typically placed near the root element\n * of the page - e.g. on the `<body>` or `<html>` tags.\n *\n * Only one AngularJS application can be auto-bootstrapped per HTML document. The first `ngApp`\n * found in the document will be used to define the root element to auto-bootstrap as an\n * application. To run multiple applications in an HTML document you must manually bootstrap them using\n * {@link angular.bootstrap} instead. AngularJS applications cannot be nested within each other.\n *\n * You can specify an **AngularJS module** to be used as the root module for the application.  This\n * module will be loaded into the {@link auto.$injector} when the application is bootstrapped and\n * should contain the application code needed or have dependencies on other modules that will\n * contain the code. See {@link angular.module} for more information.\n *\n * In the example below if the `ngApp` directive were not placed on the `html` element then the\n * document would not be compiled, the `AppController` would not be instantiated and the `{{ a+b }}`\n * would not be resolved to `3`.\n *\n * `ngApp` is the easiest, and most common, way to bootstrap an application.\n *\n <example module=\"ngAppDemo\">\n   <file name=\"index.html\">\n   <div ng-controller=\"ngAppDemoController\">\n     I can add: {{a}} + {{b}} =  {{ a+b }}\n   </div>\n   </file>\n   <file name=\"script.js\">\n   angular.module('ngAppDemo', []).controller('ngAppDemoController', function($scope) {\n     $scope.a = 1;\n     $scope.b = 2;\n   });\n   </file>\n </example>\n *\n */\nfunction angularInit(element, bootstrap) {\n  var elements = [element],\n      appElement,\n      module,\n      names = ['ng:app', 'ng-app', 'x-ng-app', 'data-ng-app'],\n      NG_APP_CLASS_REGEXP = /\\sng[:\\-]app(:\\s*([\\w\\d_]+);?)?\\s/;\n\n  function append(element) {\n    element && elements.push(element);\n  }\n\n  forEach(names, function(name) {\n    names[name] = true;\n    append(document.getElementById(name));\n    name = name.replace(':', '\\\\:');\n    if (element.querySelectorAll) {\n      forEach(element.querySelectorAll('.' + name), append);\n      forEach(element.querySelectorAll('.' + name + '\\\\:'), append);\n      forEach(element.querySelectorAll('[' + name + ']'), append);\n    }\n  });\n\n  forEach(elements, function(element) {\n    if (!appElement) {\n      var className = ' ' + element.className + ' ';\n      var match = NG_APP_CLASS_REGEXP.exec(className);\n      if (match) {\n        appElement = element;\n        module = (match[2] || '').replace(/\\s+/g, ',');\n      } else {\n        forEach(element.attributes, function(attr) {\n          if (!appElement && names[attr.name]) {\n            appElement = element;\n            module = attr.value;\n          }\n        });\n      }\n    }\n  });\n  if (appElement) {\n    bootstrap(appElement, module ? [module] : []);\n  }\n}\n\n/**\n * @ngdoc function\n * @name angular.bootstrap\n * @module ng\n * @description\n * Use this function to manually start up angular application.\n *\n * See: {@link guide/bootstrap Bootstrap}\n *\n * Note that ngScenario-based end-to-end tests cannot use this function to bootstrap manually.\n * They must use {@link ng.directive:ngApp ngApp}.\n *\n * Angular will detect if it has been loaded into the browser more than once and only allow the\n * first loaded script to be bootstrapped and will report a warning to the browser console for\n * each of the subsequent scripts.   This prevents strange results in applications, where otherwise\n * multiple instances of Angular try to work on the DOM.\n *\n * <example name=\"multi-bootstrap\" module=\"multi-bootstrap\">\n * <file name=\"index.html\">\n * <script src=\"../../../angular.js\"></script>\n * <div ng-controller=\"BrokenTable\">\n *   <table>\n *   <tr>\n *     <th ng-repeat=\"heading in headings\">{{heading}}</th>\n *   </tr>\n *   <tr ng-repeat=\"filling in fillings\">\n *     <td ng-repeat=\"fill in filling\">{{fill}}</td>\n *   </tr>\n * </table>\n * </div>\n * </file>\n * <file name=\"controller.js\">\n * var app = angular.module('multi-bootstrap', [])\n *\n * .controller('BrokenTable', function($scope) {\n *     $scope.headings = ['One', 'Two', 'Three'];\n *     $scope.fillings = [[1, 2, 3], ['A', 'B', 'C'], [7, 8, 9]];\n * });\n * </file>\n * <file name=\"protractor.js\" type=\"protractor\">\n * it('should only insert one table cell for each item in $scope.fillings', function() {\n *  expect(element.all(by.css('td')).count())\n *      .toBe(9);\n * });\n * </file>\n * </example>\n *\n * @param {DOMElement} element DOM element which is the root of angular application.\n * @param {Array<String|Function|Array>=} modules an array of modules to load into the application.\n *     Each item in the array should be the name of a predefined module or a (DI annotated)\n *     function that will be invoked by the injector as a run block.\n *     See: {@link angular.module modules}\n * @returns {auto.$injector} Returns the newly created injector for this app.\n */\nfunction bootstrap(element, modules) {\n  var doBootstrap = function() {\n    element = jqLite(element);\n\n    if (element.injector()) {\n      var tag = (element[0] === document) ? 'document' : startingTag(element);\n      throw ngMinErr('btstrpd', \"App Already Bootstrapped with this Element '{0}'\", tag);\n    }\n\n    modules = modules || [];\n    modules.unshift(['$provide', function($provide) {\n      $provide.value('$rootElement', element);\n    }]);\n    modules.unshift('ng');\n    var injector = createInjector(modules);\n    injector.invoke(['$rootScope', '$rootElement', '$compile', '$injector', '$animate',\n       function(scope, element, compile, injector, animate) {\n        scope.$apply(function() {\n          element.data('$injector', injector);\n          compile(element)(scope);\n        });\n      }]\n    );\n    return injector;\n  };\n\n  var NG_DEFER_BOOTSTRAP = /^NG_DEFER_BOOTSTRAP!/;\n\n  if (window && !NG_DEFER_BOOTSTRAP.test(window.name)) {\n    return doBootstrap();\n  }\n\n  window.name = window.name.replace(NG_DEFER_BOOTSTRAP, '');\n  angular.resumeBootstrap = function(extraModules) {\n    forEach(extraModules, function(module) {\n      modules.push(module);\n    });\n    doBootstrap();\n  };\n}\n\nvar SNAKE_CASE_REGEXP = /[A-Z]/g;\nfunction snake_case(name, separator) {\n  separator = separator || '_';\n  return name.replace(SNAKE_CASE_REGEXP, function(letter, pos) {\n    return (pos ? separator : '') + letter.toLowerCase();\n  });\n}\n\nfunction bindJQuery() {\n  // bind to jQuery if present;\n  jQuery = window.jQuery;\n  // Use jQuery if it exists with proper functionality, otherwise default to us.\n  // Angular 1.2+ requires jQuery 1.7.1+ for on()/off() support.\n  if (jQuery && jQuery.fn.on) {\n    jqLite = jQuery;\n    extend(jQuery.fn, {\n      scope: JQLitePrototype.scope,\n      isolateScope: JQLitePrototype.isolateScope,\n      controller: JQLitePrototype.controller,\n      injector: JQLitePrototype.injector,\n      inheritedData: JQLitePrototype.inheritedData\n    });\n    // Method signature:\n    //     jqLitePatchJQueryRemove(name, dispatchThis, filterElems, getterIfNoArguments)\n    jqLitePatchJQueryRemove('remove', true, true, false);\n    jqLitePatchJQueryRemove('empty', false, false, false);\n    jqLitePatchJQueryRemove('html', false, false, true);\n  } else {\n    jqLite = JQLite;\n  }\n  angular.element = jqLite;\n}\n\n/**\n * throw error if the argument is falsy.\n */\nfunction assertArg(arg, name, reason) {\n  if (!arg) {\n    throw ngMinErr('areq', \"Argument '{0}' is {1}\", (name || '?'), (reason || \"required\"));\n  }\n  return arg;\n}\n\nfunction assertArgFn(arg, name, acceptArrayAnnotation) {\n  if (acceptArrayAnnotation && isArray(arg)) {\n      arg = arg[arg.length - 1];\n  }\n\n  assertArg(isFunction(arg), name, 'not a function, got ' +\n      (arg && typeof arg == 'object' ? arg.constructor.name || 'Object' : typeof arg));\n  return arg;\n}\n\n/**\n * throw error if the name given is hasOwnProperty\n * @param  {String} name    the name to test\n * @param  {String} context the context in which the name is used, such as module or directive\n */\nfunction assertNotHasOwnProperty(name, context) {\n  if (name === 'hasOwnProperty') {\n    throw ngMinErr('badname', \"hasOwnProperty is not a valid {0} name\", context);\n  }\n}\n\n/**\n * Return the value accessible from the object by path. Any undefined traversals are ignored\n * @param {Object} obj starting object\n * @param {String} path path to traverse\n * @param {boolean} [bindFnToScope=true]\n * @returns {Object} value as accessible by path\n */\n//TODO(misko): this function needs to be removed\nfunction getter(obj, path, bindFnToScope) {\n  if (!path) return obj;\n  var keys = path.split('.');\n  var key;\n  var lastInstance = obj;\n  var len = keys.length;\n\n  for (var i = 0; i < len; i++) {\n    key = keys[i];\n    if (obj) {\n      obj = (lastInstance = obj)[key];\n    }\n  }\n  if (!bindFnToScope && isFunction(obj)) {\n    return bind(lastInstance, obj);\n  }\n  return obj;\n}\n\n/**\n * Return the DOM siblings between the first and last node in the given array.\n * @param {Array} array like object\n * @returns {DOMElement} object containing the elements\n */\nfunction getBlockElements(nodes) {\n  var startNode = nodes[0],\n      endNode = nodes[nodes.length - 1];\n  if (startNode === endNode) {\n    return jqLite(startNode);\n  }\n\n  var element = startNode;\n  var elements = [element];\n\n  do {\n    element = element.nextSibling;\n    if (!element) break;\n    elements.push(element);\n  } while (element !== endNode);\n\n  return jqLite(elements);\n}\n\n/**\n * @ngdoc type\n * @name angular.Module\n * @module ng\n * @description\n *\n * Interface for configuring angular {@link angular.module modules}.\n */\n\nfunction setupModuleLoader(window) {\n\n  var $injectorMinErr = minErr('$injector');\n  var ngMinErr = minErr('ng');\n\n  function ensure(obj, name, factory) {\n    return obj[name] || (obj[name] = factory());\n  }\n\n  var angular = ensure(window, 'angular', Object);\n\n  // We need to expose `angular.$$minErr` to modules such as `ngResource` that reference it during bootstrap\n  angular.$$minErr = angular.$$minErr || minErr;\n\n  return ensure(angular, 'module', function() {\n    /** @type {Object.<string, angular.Module>} */\n    var modules = {};\n\n    /**\n     * @ngdoc function\n     * @name angular.module\n     * @module ng\n     * @description\n     *\n     * The `angular.module` is a global place for creating, registering and retrieving Angular\n     * modules.\n     * All modules (angular core or 3rd party) that should be available to an application must be\n     * registered using this mechanism.\n     *\n     * When passed two or more arguments, a new module is created.  If passed only one argument, an\n     * existing module (the name passed as the first argument to `module`) is retrieved.\n     *\n     *\n     * # Module\n     *\n     * A module is a collection of services, directives, filters, and configuration information.\n     * `angular.module` is used to configure the {@link auto.$injector $injector}.\n     *\n     * ```js\n     * // Create a new module\n     * var myModule = angular.module('myModule', []);\n     *\n     * // register a new service\n     * myModule.value('appName', 'MyCoolApp');\n     *\n     * // configure existing services inside initialization blocks.\n     * myModule.config(['$locationProvider', function($locationProvider) {\n     *   // Configure existing providers\n     *   $locationProvider.hashPrefix('!');\n     * }]);\n     * ```\n     *\n     * Then you can create an injector and load your modules like this:\n     *\n     * ```js\n     * var injector = angular.injector(['ng', 'myModule'])\n     * ```\n     *\n     * However it's more likely that you'll just use\n     * {@link ng.directive:ngApp ngApp} or\n     * {@link angular.bootstrap} to simplify this process for you.\n     *\n     * @param {!string} name The name of the module to create or retrieve.\n<<<<<* @param {!Array.<string>=} requires If specified then new module is being created. If\n>>>>>*        unspecified then the module is being retrieved for further configuration.\n     * @param {Function} configFn Optional configuration function for the module. Same as\n     *        {@link angular.Module#config Module#config()}.\n     * @returns {module} new module with the {@link angular.Module} api.\n     */\n    return function module(name, requires, configFn) {\n      var assertNotHasOwnProperty = function(name, context) {\n        if (name === 'hasOwnProperty') {\n          throw ngMinErr('badname', 'hasOwnProperty is not a valid {0} name', context);\n        }\n      };\n\n      assertNotHasOwnProperty(name, 'module');\n      if (requires && modules.hasOwnProperty(name)) {\n        modules[name] = null;\n      }\n      return ensure(modules, name, function() {\n        if (!requires) {\n          throw $injectorMinErr('nomod', \"Module '{0}' is not available! You either misspelled \" +\n             \"the module name or forgot to load it. If registering a module ensure that you \" +\n             \"specify the dependencies as the second argument.\", name);\n        }\n\n        /** @type {!Array.<Array.<*>>} */\n        var invokeQueue = [];\n\n        /** @type {!Array.<Function>} */\n        var runBlocks = [];\n\n        var config = invokeLater('$injector', 'invoke');\n\n        /** @type {angular.Module} */\n        var moduleInstance = {\n          // Private state\n          _invokeQueue: invokeQueue,\n          _runBlocks: runBlocks,\n\n          /**\n           * @ngdoc property\n           * @name angular.Module#requires\n           * @module ng\n           * @returns {Array.<string>} List of module names which must be loaded before this module.\n           * @description\n           * Holds the list of modules which the injector will load before the current module is\n           * loaded.\n           */\n          requires: requires,\n\n          /**\n           * @ngdoc property\n           * @name angular.Module#name\n           * @module ng\n           * @returns {string} Name of the module.\n           * @description\n           */\n          name: name,\n\n\n          /**\n           * @ngdoc method\n           * @name angular.Module#provider\n           * @module ng\n           * @param {string} name service name\n           * @param {Function} providerType Construction function for creating new instance of the\n           *                                service.\n           * @description\n           * See {@link auto.$provide#provider $provide.provider()}.\n           */\n          provider: invokeLater('$provide', 'provider'),\n\n          /**\n           * @ngdoc method\n           * @name angular.Module#factory\n           * @module ng\n           * @param {string} name service name\n           * @param {Function} providerFunction Function for creating new instance of the service.\n           * @description\n           * See {@link auto.$provide#factory $provide.factory()}.\n           */\n          factory: invokeLater('$provide', 'factory'),\n\n          /**\n           * @ngdoc method\n           * @name angular.Module#service\n           * @module ng\n           * @param {string} name service name\n           * @param {Function} constructor A constructor function that will be instantiated.\n           * @description\n           * See {@link auto.$provide#service $provide.service()}.\n           */\n          service: invokeLater('$provide', 'service'),\n\n          /**\n           * @ngdoc method\n           * @name angular.Module#value\n           * @module ng\n           * @param {string} name service name\n           * @param {*} object Service instance object.\n           * @description\n           * See {@link auto.$provide#value $provide.value()}.\n           */\n          value: invokeLater('$provide', 'value'),\n\n          /**\n           * @ngdoc method\n           * @name angular.Module#constant\n           * @module ng\n           * @param {string} name constant name\n           * @param {*} object Constant value.\n           * @description\n           * Because the constant are fixed, they get applied before other provide methods.\n           * See {@link auto.$provide#constant $provide.constant()}.\n           */\n          constant: invokeLater('$provide', 'constant', 'unshift'),\n\n          /**\n           * @ngdoc method\n           * @name angular.Module#animation\n           * @module ng\n           * @param {string} name animation name\n           * @param {Function} animationFactory Factory function for creating new instance of an\n           *                                    animation.\n           * @description\n           *\n           * **NOTE**: animations take effect only if the **ngAnimate** module is loaded.\n           *\n           *\n           * Defines an animation hook that can be later used with\n           * {@link ngAnimate.$animate $animate} service and directives that use this service.\n           *\n           * ```js\n           * module.animation('.animation-name', function($inject1, $inject2) {\n           *   return {\n           *     eventName : function(element, done) {\n           *       //code to run the animation\n           *       //once complete, then run done()\n           *       return function cancellationFunction(element) {\n           *         //code to cancel the animation\n           *       }\n           *     }\n           *   }\n           * })\n           * ```\n           *\n           * See {@link ngAnimate.$animateProvider#register $animateProvider.register()} and\n           * {@link ngAnimate ngAnimate module} for more information.\n           */\n          animation: invokeLater('$animateProvider', 'register'),\n\n          /**\n           * @ngdoc method\n           * @name angular.Module#filter\n           * @module ng\n           * @param {string} name Filter name.\n           * @param {Function} filterFactory Factory function for creating new instance of filter.\n           * @description\n           * See {@link ng.$filterProvider#register $filterProvider.register()}.\n           */\n          filter: invokeLater('$filterProvider', 'register'),\n\n          /**\n           * @ngdoc method\n           * @name angular.Module#controller\n           * @module ng\n           * @param {string|Object} name Controller name, or an object map of controllers where the\n           *    keys are the names and the values are the constructors.\n           * @param {Function} constructor Controller constructor function.\n           * @description\n           * See {@link ng.$controllerProvider#register $controllerProvider.register()}.\n           */\n          controller: invokeLater('$controllerProvider', 'register'),\n\n          /**\n           * @ngdoc method\n           * @name angular.Module#directive\n           * @module ng\n           * @param {string|Object} name Directive name, or an object map of directives where the\n           *    keys are the names and the values are the factories.\n           * @param {Function} directiveFactory Factory function for creating new instance of\n           * directives.\n           * @description\n           * See {@link ng.$compileProvider#directive $compileProvider.directive()}.\n           */\n          directive: invokeLater('$compileProvider', 'directive'),\n\n          /**\n           * @ngdoc method\n           * @name angular.Module#config\n           * @module ng\n           * @param {Function} configFn Execute this function on module load. Useful for service\n           *    configuration.\n           * @description\n           * Use this method to register work which needs to be performed on module loading.\n           * For more about how to configure services, see\n           * {@link providers#providers_provider-recipe Provider Recipe}.\n           */\n          config: config,\n\n          /**\n           * @ngdoc method\n           * @name angular.Module#run\n           * @module ng\n           * @param {Function} initializationFn Execute this function after injector creation.\n           *    Useful for application initialization.\n           * @description\n           * Use this method to register work which should be performed when the injector is done\n           * loading all modules.\n           */\n          run: function(block) {\n            runBlocks.push(block);\n            return this;\n          }\n        };\n\n        if (configFn) {\n          config(configFn);\n        }\n\n        return  moduleInstance;\n\n        /**\n         * @param {string} provider\n         * @param {string} method\n         * @param {String=} insertMethod\n         * @returns {angular.Module}\n         */\n        function invokeLater(provider, method, insertMethod) {\n          return function() {\n            invokeQueue[insertMethod || 'push']([provider, method, arguments]);\n            return moduleInstance;\n          };\n        }\n      });\n    };\n  });\n\n}\n\n/* global\n    angularModule: true,\n    version: true,\n\n    $LocaleProvider,\n    $CompileProvider,\n\n    htmlAnchorDirective,\n    inputDirective,\n    inputDirective,\n    formDirective,\n    scriptDirective,\n    selectDirective,\n    styleDirective,\n    optionDirective,\n    ngBindDirective,\n    ngBindHtmlDirective,\n    ngBindTemplateDirective,\n    ngClassDirective,\n    ngClassEvenDirective,\n    ngClassOddDirective,\n    ngCspDirective,\n    ngCloakDirective,\n    ngControllerDirective,\n    ngFormDirective,\n    ngHideDirective,\n    ngIfDirective,\n    ngIncludeDirective,\n    ngIncludeFillContentDirective,\n    ngInitDirective,\n    ngNonBindableDirective,\n    ngPluralizeDirective,\n    ngRepeatDirective,\n    ngShowDirective,\n    ngStyleDirective,\n    ngSwitchDirective,\n    ngSwitchWhenDirective,\n    ngSwitchDefaultDirective,\n    ngOptionsDirective,\n    ngTranscludeDirective,\n    ngModelDirective,\n    ngListDirective,\n    ngChangeDirective,\n    requiredDirective,\n    requiredDirective,\n    ngValueDirective,\n    ngAttributeAliasDirectives,\n    ngEventDirectives,\n\n    $AnchorScrollProvider,\n    $AnimateProvider,\n    $BrowserProvider,\n    $CacheFactoryProvider,\n    $ControllerProvider,\n    $DocumentProvider,\n    $ExceptionHandlerProvider,\n    $FilterProvider,\n    $InterpolateProvider,\n    $IntervalProvider,\n    $HttpProvider,\n    $HttpBackendProvider,\n    $LocationProvider,\n    $LogProvider,\n    $ParseProvider,\n    $RootScopeProvider,\n    $QProvider,\n    $$SanitizeUriProvider,\n    $SceProvider,\n    $SceDelegateProvider,\n    $SnifferProvider,\n    $TemplateCacheProvider,\n    $TimeoutProvider,\n    $$RAFProvider,\n    $$AsyncCallbackProvider,\n    $WindowProvider\n*/\n\n\n/**\n * @ngdoc object\n * @name angular.version\n * @module ng\n * @description\n * An object that contains information about the current AngularJS version. This object has the\n * following properties:\n *\n * - `full` – `{string}` – Full version string, such as \"0.9.18\".\n * - `major` – `{number}` – Major version number, such as \"0\".\n * - `minor` – `{number}` – Minor version number, such as \"9\".\n * - `dot` – `{number}` – Dot version number, such as \"18\".\n * - `codeName` – `{string}` – Code name of the release, such as \"jiggling-armfat\".\n */\nvar version = {\n  full: '1.2.17',    // all of these placeholder strings will be replaced by grunt's\n  major: 1,    // package task\n  minor: 2,\n  dot: 17,\n  codeName: 'quantum-disentanglement'\n};\n\n\nfunction publishExternalAPI(angular){\n  extend(angular, {\n    'bootstrap': bootstrap,\n    'copy': copy,\n    'extend': extend,\n    'equals': equals,\n    'element': jqLite,\n    'forEach': forEach,\n    'injector': createInjector,\n    'noop':noop,\n    'bind':bind,\n    'toJson': toJson,\n    'fromJson': fromJson,\n    'identity':identity,\n    'isUndefined': isUndefined,\n    'isDefined': isDefined,\n    'isString': isString,\n    'isFunction': isFunction,\n    'isObject': isObject,\n    'isNumber': isNumber,\n    'isElement': isElement,\n    'isArray': isArray,\n    'version': version,\n    'isDate': isDate,\n    'lowercase': lowercase,\n    'uppercase': uppercase,\n    'callbacks': {counter: 0},\n    '$$minErr': minErr,\n    '$$csp': csp\n  });\n\n  angularModule = setupModuleLoader(window);\n  try {\n    angularModule('ngLocale');\n  } catch (e) {\n    angularModule('ngLocale', []).provider('$locale', $LocaleProvider);\n  }\n\n  angularModule('ng', ['ngLocale'], ['$provide',\n    function ngModule($provide) {\n      // $$sanitizeUriProvider needs to be before $compileProvider as it is used by it.\n      $provide.provider({\n        $$sanitizeUri: $$SanitizeUriProvider\n      });\n      $provide.provider('$compile', $CompileProvider).\n        directive({\n            a: htmlAnchorDirective,\n            input: inputDirective,\n            textarea: inputDirective,\n            form: formDirective,\n            script: scriptDirective,\n            select: selectDirective,\n            style: styleDirective,\n            option: optionDirective,\n            ngBind: ngBindDirective,\n            ngBindHtml: ngBindHtmlDirective,\n            ngBindTemplate: ngBindTemplateDirective,\n            ngClass: ngClassDirective,\n            ngClassEven: ngClassEvenDirective,\n            ngClassOdd: ngClassOddDirective,\n            ngCloak: ngCloakDirective,\n            ngController: ngControllerDirective,\n            ngForm: ngFormDirective,\n            ngHide: ngHideDirective,\n            ngIf: ngIfDirective,\n            ngInclude: ngIncludeDirective,\n            ngInit: ngInitDirective,\n            ngNonBindable: ngNonBindableDirective,\n            ngPluralize: ngPluralizeDirective,\n            ngRepeat: ngRepeatDirective,\n            ngShow: ngShowDirective,\n            ngStyle: ngStyleDirective,\n            ngSwitch: ngSwitchDirective,\n            ngSwitchWhen: ngSwitchWhenDirective,\n            ngSwitchDefault: ngSwitchDefaultDirective,\n            ngOptions: ngOptionsDirective,\n            ngTransclude: ngTranscludeDirective,\n            ngModel: ngModelDirective,\n            ngList: ngListDirective,\n            ngChange: ngChangeDirective,\n            required: requiredDirective,\n            ngRequired: requiredDirective,\n            ngValue: ngValueDirective\n        }).\n        directive({\n          ngInclude: ngIncludeFillContentDirective\n        }).\n        directive(ngAttributeAliasDirectives).\n        directive(ngEventDirectives);\n      $provide.provider({\n        $anchorScroll: $AnchorScrollProvider,\n        $animate: $AnimateProvider,\n        $browser: $BrowserProvider,\n        $cacheFactory: $CacheFactoryProvider,\n        $controller: $ControllerProvider,\n        $document: $DocumentProvider,\n        $exceptionHandler: $ExceptionHandlerProvider,\n        $filter: $FilterProvider,\n        $interpolate: $InterpolateProvider,\n        $interval: $IntervalProvider,\n        $http: $HttpProvider,\n        $httpBackend: $HttpBackendProvider,\n        $location: $LocationProvider,\n        $log: $LogProvider,\n        $parse: $ParseProvider,\n        $rootScope: $RootScopeProvider,\n        $q: $QProvider,\n        $sce: $SceProvider,\n        $sceDelegate: $SceDelegateProvider,\n        $sniffer: $SnifferProvider,\n        $templateCache: $TemplateCacheProvider,\n        $timeout: $TimeoutProvider,\n        $window: $WindowProvider,\n        $$rAF: $$RAFProvider,\n        $$asyncCallback : $$AsyncCallbackProvider\n      });\n    }\n  ]);\n}\n\n/* global\n\n  -JQLitePrototype,\n  -addEventListenerFn,\n  -removeEventListenerFn,\n  -BOOLEAN_ATTR\n*/\n\n//////////////////////////////////\n//JQLite\n//////////////////////////////////\n\n/**\n * @ngdoc function\n * @name angular.element\n * @module ng\n * @kind function\n *\n * @description\n * Wraps a raw DOM element or HTML string as a [jQuery](http://jquery.com) element.\n *\n * If jQuery is available, `angular.element` is an alias for the\n * [jQuery](http://api.jquery.com/jQuery/) function. If jQuery is not available, `angular.element`\n * delegates to Angular's built-in subset of jQuery, called \"jQuery lite\" or \"jqLite.\"\n *\n * <div class=\"alert alert-success\">jqLite is a tiny, API-compatible subset of jQuery that allows\n * Angular to manipulate the DOM in a cross-browser compatible way. **jqLite** implements only the most\n * commonly needed functionality with the goal of having a very small footprint.</div>\n *\n * To use jQuery, simply load it before `DOMContentLoaded` event fired.\n *\n * <div class=\"alert\">**Note:** all element references in Angular are always wrapped with jQuery or\n * jqLite; they are never raw DOM references.</div>\n *\n * ## Angular's jqLite\n * jqLite provides only the following jQuery methods:\n *\n * - [`addClass()`](http://api.jquery.com/addClass/)\n * - [`after()`](http://api.jquery.com/after/)\n * - [`append()`](http://api.jquery.com/append/)\n * - [`attr()`](http://api.jquery.com/attr/)\n * - [`bind()`](http://api.jquery.com/bind/) - Does not support namespaces, selectors or eventData\n * - [`children()`](http://api.jquery.com/children/) - Does not support selectors\n * - [`clone()`](http://api.jquery.com/clone/)\n * - [`contents()`](http://api.jquery.com/contents/)\n * - [`css()`](http://api.jquery.com/css/)\n * - [`data()`](http://api.jquery.com/data/)\n * - [`empty()`](http://api.jquery.com/empty/)\n * - [`eq()`](http://api.jquery.com/eq/)\n * - [`find()`](http://api.jquery.com/find/) - Limited to lookups by tag name\n * - [`hasClass()`](http://api.jquery.com/hasClass/)\n * - [`html()`](http://api.jquery.com/html/)\n * - [`next()`](http://api.jquery.com/next/) - Does not support selectors\n * - [`on()`](http://api.jquery.com/on/) - Does not support namespaces, selectors or eventData\n * - [`off()`](http://api.jquery.com/off/) - Does not support namespaces or selectors\n * - [`one()`](http://api.jquery.com/one/) - Does not support namespaces or selectors\n * - [`parent()`](http://api.jquery.com/parent/) - Does not support selectors\n * - [`prepend()`](http://api.jquery.com/prepend/)\n * - [`prop()`](http://api.jquery.com/prop/)\n * - [`ready()`](http://api.jquery.com/ready/)\n * - [`remove()`](http://api.jquery.com/remove/)\n * - [`removeAttr()`](http://api.jquery.com/removeAttr/)\n * - [`removeClass()`](http://api.jquery.com/removeClass/)\n * - [`removeData()`](http://api.jquery.com/removeData/)\n * - [`replaceWith()`](http://api.jquery.com/replaceWith/)\n * - [`text()`](http://api.jquery.com/text/)\n * - [`toggleClass()`](http://api.jquery.com/toggleClass/)\n * - [`triggerHandler()`](http://api.jquery.com/triggerHandler/) - Passes a dummy event object to handlers.\n * - [`unbind()`](http://api.jquery.com/unbind/) - Does not support namespaces\n * - [`val()`](http://api.jquery.com/val/)\n * - [`wrap()`](http://api.jquery.com/wrap/)\n *\n * ## jQuery/jqLite Extras\n * Angular also provides the following additional methods and events to both jQuery and jqLite:\n *\n * ### Events\n * - `$destroy` - AngularJS intercepts all jqLite/jQuery's DOM destruction apis and fires this event\n *    on all DOM nodes being removed.  This can be used to clean up any 3rd party bindings to the DOM\n *    element before it is removed.\n *\n * ### Methods\n * - `controller(name)` - retrieves the controller of the current element or its parent. By default\n *   retrieves controller associated with the `ngController` directive. If `name` is provided as\n *   camelCase directive name, then the controller for this directive will be retrieved (e.g.\n *   `'ngModel'`).\n * - `injector()` - retrieves the injector of the current element or its parent.\n * - `scope()` - retrieves the {@link ng.$rootScope.Scope scope} of the current\n *   element or its parent.\n * - `isolateScope()` - retrieves an isolate {@link ng.$rootScope.Scope scope} if one is attached directly to the\n *   current element. This getter should be used only on elements that contain a directive which starts a new isolate\n *   scope. Calling `scope()` on this element always returns the original non-isolate scope.\n * - `inheritedData()` - same as `data()`, but walks up the DOM until a value is found or the top\n *   parent element is reached.\n *\n * @param {string|DOMElement} element HTML string or DOMElement to be wrapped into jQuery.\n * @returns {Object} jQuery object.\n */\n\nvar jqCache = JQLite.cache = {},\n    jqName = JQLite.expando = 'ng' + new Date().getTime(),\n    jqId = 1,\n    addEventListenerFn = (window.document.addEventListener\n      ? function(element, type, fn) {element.addEventListener(type, fn, false);}\n      : function(element, type, fn) {element.attachEvent('on' + type, fn);}),\n    removeEventListenerFn = (window.document.removeEventListener\n      ? function(element, type, fn) {element.removeEventListener(type, fn, false); }\n      : function(element, type, fn) {element.detachEvent('on' + type, fn); });\n\n/*\n * !!! This is an undocumented \"private\" function !!!\n */\nvar jqData = JQLite._data = function(node) {\n  //jQuery always returns an object on cache miss\n  return this.cache[node[this.expando]] || {};\n};\n\nfunction jqNextId() { return ++jqId; }\n\n\nvar SPECIAL_CHARS_REGEXP = /([\\:\\-\\_]+(.))/g;\nvar MOZ_HACK_REGEXP = /^moz([A-Z])/;\nvar jqLiteMinErr = minErr('jqLite');\n\n/**\n * Converts snake_case to camelCase.\n * Also there is special case for Moz prefix starting with upper case letter.\n * @param name Name to normalize\n */\nfunction camelCase(name) {\n  return name.\n    replace(SPECIAL_CHARS_REGEXP, function(_, separator, letter, offset) {\n      return offset ? letter.toUpperCase() : letter;\n    }).\n    replace(MOZ_HACK_REGEXP, 'Moz$1');\n}\n\n/////////////////////////////////////////////\n// jQuery mutation patch\n//\n// In conjunction with bindJQuery intercepts all jQuery's DOM destruction apis and fires a\n// $destroy event on all DOM nodes being removed.\n//\n/////////////////////////////////////////////\n\nfunction jqLitePatchJQueryRemove(name, dispatchThis, filterElems, getterIfNoArguments) {\n  var originalJqFn = jQuery.fn[name];\n  originalJqFn = originalJqFn.$original || originalJqFn;\n  removePatch.$original = originalJqFn;\n  jQuery.fn[name] = removePatch;\n\n  function removePatch(param) {\n    // jshint -W040\n    var list = filterElems && param ? [this.filter(param)] : [this],\n        fireEvent = dispatchThis,\n        set, setIndex, setLength,\n        element, childIndex, childLength, children;\n\n    if (!getterIfNoArguments || param != null) {\n      while(list.length) {\n        set = list.shift();\n        for(setIndex = 0, setLength = set.length; setIndex < setLength; setIndex++) {\n          element = jqLite(set[setIndex]);\n          if (fireEvent) {\n            element.triggerHandler('$destroy');\n          } else {\n            fireEvent = !fireEvent;\n          }\n          for(childIndex = 0, childLength = (children = element.children()).length;\n              childIndex < childLength;\n              childIndex++) {\n            list.push(jQuery(children[childIndex]));\n          }\n        }\n      }\n    }\n    return originalJqFn.apply(this, arguments);\n  }\n}\n\nvar SINGLE_TAG_REGEXP = /^<(\\w+)\\s*\\/?>(?:<\\/\\1>|)$/;\nvar HTML_REGEXP = /<|&#?\\w+;/;\nvar TAG_NAME_REGEXP = /<([\\w:]+)/;\nvar XHTML_TAG_REGEXP = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\\w:]+)[^>]*)\\/>/gi;\n\nvar wrapMap = {\n  'option': [1, '<select multiple=\"multiple\">', '</select>'],\n\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\nwrapMap.optgroup = wrapMap.option;\nwrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;\nwrapMap.th = wrapMap.td;\n\nfunction jqLiteIsTextNode(html) {\n  return !HTML_REGEXP.test(html);\n}\n\nfunction jqLiteBuildFragment(html, context) {\n  var elem, tmp, tag, wrap,\n      fragment = context.createDocumentFragment(),\n      nodes = [], i, j, jj;\n\n  if (jqLiteIsTextNode(html)) {\n    // Convert non-html into a text node\n    nodes.push(context.createTextNode(html));\n  } else {\n    tmp = fragment.appendChild(context.createElement('div'));\n    // Convert html into DOM nodes\n    tag = (TAG_NAME_REGEXP.exec(html) || [\"\", \"\"])[1].toLowerCase();\n    wrap = wrapMap[tag] || wrapMap._default;\n    tmp.innerHTML = '<div>&#160;</div>' +\n      wrap[1] + html.replace(XHTML_TAG_REGEXP, \"<$1></$2>\") + wrap[2];\n    tmp.removeChild(tmp.firstChild);\n\n    // Descend through wrappers to the right content\n    i = wrap[0];\n    while (i--) {\n      tmp = tmp.lastChild;\n    }\n\n    for (j=0, jj=tmp.childNodes.length; j<jj; ++j) nodes.push(tmp.childNodes[j]);\n\n    tmp = fragment.firstChild;\n    tmp.textContent = \"\";\n  }\n\n  // Remove wrapper from fragment\n  fragment.textContent = \"\";\n  fragment.innerHTML = \"\"; // Clear inner HTML\n  return nodes;\n}\n\nfunction jqLiteParseHTML(html, context) {\n  context = context || document;\n  var parsed;\n\n  if ((parsed = SINGLE_TAG_REGEXP.exec(html))) {\n    return [context.createElement(parsed[1])];\n  }\n\n  return jqLiteBuildFragment(html, context);\n}\n\n/////////////////////////////////////////////\nfunction JQLite(element) {\n  if (element instanceof JQLite) {\n    return element;\n  }\n  if (isString(element)) {\n    element = trim(element);\n  }\n  if (!(this instanceof JQLite)) {\n    if (isString(element) && element.charAt(0) != '<') {\n      throw jqLiteMinErr('nosel', 'Looking up elements via selectors is not supported by jqLite! See: http://docs.angularjs.org/api/angular.element');\n    }\n    return new JQLite(element);\n  }\n\n  if (isString(element)) {\n    jqLiteAddNodes(this, jqLiteParseHTML(element));\n    var fragment = jqLite(document.createDocumentFragment());\n    fragment.append(this);\n  } else {\n    jqLiteAddNodes(this, element);\n  }\n}\n\nfunction jqLiteClone(element) {\n  return element.cloneNode(true);\n}\n\nfunction jqLiteDealoc(element){\n  jqLiteRemoveData(element);\n  for ( var i = 0, children = element.childNodes || []; i < children.length; i++) {\n    jqLiteDealoc(children[i]);\n  }\n}\n\nfunction jqLiteOff(element, type, fn, unsupported) {\n  if (isDefined(unsupported)) throw jqLiteMinErr('offargs', 'jqLite#off() does not support the `selector` argument');\n\n  var events = jqLiteExpandoStore(element, 'events'),\n      handle = jqLiteExpandoStore(element, 'handle');\n\n  if (!handle) return; //no listeners registered\n\n  if (isUndefined(type)) {\n    forEach(events, function(eventHandler, type) {\n      removeEventListenerFn(element, type, eventHandler);\n      delete events[type];\n    });\n  } else {\n    forEach(type.split(' '), function(type) {\n      if (isUndefined(fn)) {\n        removeEventListenerFn(element, type, events[type]);\n        delete events[type];\n      } else {\n        arrayRemove(events[type] || [], fn);\n      }\n    });\n  }\n}\n\nfunction jqLiteRemoveData(element, name) {\n  var expandoId = element[jqName],\n      expandoStore = jqCache[expandoId];\n\n  if (expandoStore) {\n    if (name) {\n      delete jqCache[expandoId].data[name];\n      return;\n    }\n\n    if (expandoStore.handle) {\n      expandoStore.events.$destroy && expandoStore.handle({}, '$destroy');\n      jqLiteOff(element);\n    }\n    delete jqCache[expandoId];\n    element[jqName] = undefined; // ie does not allow deletion of attributes on elements.\n  }\n}\n\nfunction jqLiteExpandoStore(element, key, value) {\n  var expandoId = element[jqName],\n      expandoStore = jqCache[expandoId || -1];\n\n  if (isDefined(value)) {\n    if (!expandoStore) {\n      element[jqName] = expandoId = jqNextId();\n      expandoStore = jqCache[expandoId] = {};\n    }\n    expandoStore[key] = value;\n  } else {\n    return expandoStore && expandoStore[key];\n  }\n}\n\nfunction jqLiteData(element, key, value) {\n  var data = jqLiteExpandoStore(element, 'data'),\n      isSetter = isDefined(value),\n      keyDefined = !isSetter && isDefined(key),\n      isSimpleGetter = keyDefined && !isObject(key);\n\n  if (!data && !isSimpleGetter) {\n    jqLiteExpandoStore(element, 'data', data = {});\n  }\n\n  if (isSetter) {\n    data[key] = value;\n  } else {\n    if (keyDefined) {\n      if (isSimpleGetter) {\n        // don't create data in this case.\n        return data && data[key];\n      } else {\n        extend(data, key);\n      }\n    } else {\n      return data;\n    }\n  }\n}\n\nfunction jqLiteHasClass(element, selector) {\n  if (!element.getAttribute) return false;\n  return ((\" \" + (element.getAttribute('class') || '') + \" \").replace(/[\\n\\t]/g, \" \").\n      indexOf( \" \" + selector + \" \" ) > -1);\n}\n\nfunction jqLiteRemoveClass(element, cssClasses) {\n  if (cssClasses && element.setAttribute) {\n    forEach(cssClasses.split(' '), function(cssClass) {\n      element.setAttribute('class', trim(\n          (\" \" + (element.getAttribute('class') || '') + \" \")\n          .replace(/[\\n\\t]/g, \" \")\n          .replace(\" \" + trim(cssClass) + \" \", \" \"))\n      );\n    });\n  }\n}\n\nfunction jqLiteAddClass(element, cssClasses) {\n  if (cssClasses && element.setAttribute) {\n    var existingClasses = (' ' + (element.getAttribute('class') || '') + ' ')\n                            .replace(/[\\n\\t]/g, \" \");\n\n    forEach(cssClasses.split(' '), function(cssClass) {\n      cssClass = trim(cssClass);\n      if (existingClasses.indexOf(' ' + cssClass + ' ') === -1) {\n        existingClasses += cssClass + ' ';\n      }\n    });\n\n    element.setAttribute('class', trim(existingClasses));\n  }\n}\n\nfunction jqLiteAddNodes(root, elements) {\n  if (elements) {\n    elements = (!elements.nodeName && isDefined(elements.length) && !isWindow(elements))\n      ? elements\n      : [ elements ];\n    for(var i=0; i < elements.length; i++) {\n      root.push(elements[i]);\n    }\n  }\n}\n\nfunction jqLiteController(element, name) {\n  return jqLiteInheritedData(element, '$' + (name || 'ngController' ) + 'Controller');\n}\n\nfunction jqLiteInheritedData(element, name, value) {\n  element = jqLite(element);\n\n  // if element is the document object work with the html element instead\n  // this makes $(document).scope() possible\n  if(element[0].nodeType == 9) {\n    element = element.find('html');\n  }\n  var names = isArray(name) ? name : [name];\n\n  while (element.length) {\n    var node = element[0];\n    for (var i = 0, ii = names.length; i < ii; i++) {\n      if ((value = element.data(names[i])) !== undefined) return value;\n    }\n\n    // If dealing with a document fragment node with a host element, and no parent, use the host\n    // element as the parent. This enables directives within a Shadow DOM or polyfilled Shadow DOM\n    // to lookup parent controllers.\n    element = jqLite(node.parentNode || (node.nodeType === 11 && node.host));\n  }\n}\n\nfunction jqLiteEmpty(element) {\n  for (var i = 0, childNodes = element.childNodes; i < childNodes.length; i++) {\n    jqLiteDealoc(childNodes[i]);\n  }\n  while (element.firstChild) {\n    element.removeChild(element.firstChild);\n  }\n}\n\n//////////////////////////////////////////\n// Functions which are declared directly.\n//////////////////////////////////////////\nvar JQLitePrototype = JQLite.prototype = {\n  ready: function(fn) {\n    var fired = false;\n\n    function trigger() {\n      if (fired) return;\n      fired = true;\n      fn();\n    }\n\n    // check if document already is loaded\n    if (document.readyState === 'complete'){\n      setTimeout(trigger);\n    } else {\n      this.on('DOMContentLoaded', trigger); // works for modern browsers and IE9\n      // we can not use jqLite since we are not done loading and jQuery could be loaded later.\n      // jshint -W064\n      JQLite(window).on('load', trigger); // fallback to window.onload for others\n      // jshint +W064\n    }\n  },\n  toString: function() {\n    var value = [];\n    forEach(this, function(e){ value.push('' + e);});\n    return '[' + value.join(', ') + ']';\n  },\n\n  eq: function(index) {\n      return (index >= 0) ? jqLite(this[index]) : jqLite(this[this.length + index]);\n  },\n\n  length: 0,\n  push: push,\n  sort: [].sort,\n  splice: [].splice\n};\n\n//////////////////////////////////////////\n// Functions iterating getter/setters.\n// these functions return self on setter and\n// value on get.\n//////////////////////////////////////////\nvar BOOLEAN_ATTR = {};\nforEach('multiple,selected,checked,disabled,readOnly,required,open'.split(','), function(value) {\n  BOOLEAN_ATTR[lowercase(value)] = value;\n});\nvar BOOLEAN_ELEMENTS = {};\nforEach('input,select,option,textarea,button,form,details'.split(','), function(value) {\n  BOOLEAN_ELEMENTS[uppercase(value)] = true;\n});\n\nfunction getBooleanAttrName(element, name) {\n  // check dom last since we will most likely fail on name\n  var booleanAttr = BOOLEAN_ATTR[name.toLowerCase()];\n\n  // booleanAttr is here twice to minimize DOM access\n  return booleanAttr && BOOLEAN_ELEMENTS[element.nodeName] && booleanAttr;\n}\n\nforEach({\n  data: jqLiteData,\n  inheritedData: jqLiteInheritedData,\n\n  scope: function(element) {\n    // Can't use jqLiteData here directly so we stay compatible with jQuery!\n    return jqLite(element).data('$scope') || jqLiteInheritedData(element.parentNode || element, ['$isolateScope', '$scope']);\n  },\n\n  isolateScope: function(element) {\n    // Can't use jqLiteData here directly so we stay compatible with jQuery!\n    return jqLite(element).data('$isolateScope') || jqLite(element).data('$isolateScopeNoTemplate');\n  },\n\n  controller: jqLiteController,\n\n  injector: function(element) {\n    return jqLiteInheritedData(element, '$injector');\n  },\n\n  removeAttr: function(element,name) {\n    element.removeAttribute(name);\n  },\n\n  hasClass: jqLiteHasClass,\n\n  css: function(element, name, value) {\n    name = camelCase(name);\n\n    if (isDefined(value)) {\n      element.style[name] = value;\n    } else {\n      var val;\n\n      if (msie <= 8) {\n        // this is some IE specific weirdness that jQuery 1.6.4 does not sure why\n        val = element.currentStyle && element.currentStyle[name];\n        if (val === '') val = 'auto';\n      }\n\n      val = val || element.style[name];\n\n      if (msie <= 8) {\n        // jquery weirdness :-/\n        val = (val === '') ? undefined : val;\n      }\n\n      return  val;\n    }\n  },\n\n  attr: function(element, name, value){\n    var lowercasedName = lowercase(name);\n    if (BOOLEAN_ATTR[lowercasedName]) {\n      if (isDefined(value)) {\n        if (!!value) {\n          element[name] = true;\n          element.setAttribute(name, lowercasedName);\n        } else {\n          element[name] = false;\n          element.removeAttribute(lowercasedName);\n        }\n      } else {\n        return (element[name] ||\n                 (element.attributes.getNamedItem(name)|| noop).specified)\n               ? lowercasedName\n               : undefined;\n      }\n    } else if (isDefined(value)) {\n      element.setAttribute(name, value);\n    } else if (element.getAttribute) {\n      // the extra argument \"2\" is to get the right thing for a.href in IE, see jQuery code\n      // some elements (e.g. Document) don't have get attribute, so return undefined\n      var ret = element.getAttribute(name, 2);\n      // normalize non-existing attributes to undefined (as jQuery)\n      return ret === null ? undefined : ret;\n    }\n  },\n\n  prop: function(element, name, value) {\n    if (isDefined(value)) {\n      element[name] = value;\n    } else {\n      return element[name];\n    }\n  },\n\n  text: (function() {\n    var NODE_TYPE_TEXT_PROPERTY = [];\n    if (msie < 9) {\n      NODE_TYPE_TEXT_PROPERTY[1] = 'innerText';    /** Element **/\n      NODE_TYPE_TEXT_PROPERTY[3] = 'nodeValue';    /** Text **/\n    } else {\n      NODE_TYPE_TEXT_PROPERTY[1] =                 /** Element **/\n      NODE_TYPE_TEXT_PROPERTY[3] = 'textContent';  /** Text **/\n    }\n    getText.$dv = '';\n    return getText;\n\n    function getText(element, value) {\n      var textProp = NODE_TYPE_TEXT_PROPERTY[element.nodeType];\n      if (isUndefined(value)) {\n        return textProp ? element[textProp] : '';\n      }\n      element[textProp] = value;\n    }\n  })(),\n\n  val: function(element, value) {\n    if (isUndefined(value)) {\n      if (nodeName_(element) === 'SELECT' && element.multiple) {\n        var result = [];\n        forEach(element.options, function (option) {\n          if (option.selected) {\n            result.push(option.value || option.text);\n          }\n        });\n        return result.length === 0 ? null : result;\n      }\n      return element.value;\n    }\n    element.value = value;\n  },\n\n  html: function(element, value) {\n    if (isUndefined(value)) {\n      return element.innerHTML;\n    }\n    for (var i = 0, childNodes = element.childNodes; i < childNodes.length; i++) {\n      jqLiteDealoc(childNodes[i]);\n    }\n    element.innerHTML = value;\n  },\n\n  empty: jqLiteEmpty\n}, function(fn, name){\n  /**\n   * Properties: writes return selection, reads return first value\n   */\n  JQLite.prototype[name] = function(arg1, arg2) {\n    var i, key;\n\n    // jqLiteHasClass has only two arguments, but is a getter-only fn, so we need to special-case it\n    // in a way that survives minification.\n    // jqLiteEmpty takes no arguments but is a setter.\n    if (fn !== jqLiteEmpty &&\n        (((fn.length == 2 && (fn !== jqLiteHasClass && fn !== jqLiteController)) ? arg1 : arg2) === undefined)) {\n      if (isObject(arg1)) {\n\n        // we are a write, but the object properties are the key/values\n        for (i = 0; i < this.length; i++) {\n          if (fn === jqLiteData) {\n            // data() takes the whole object in jQuery\n            fn(this[i], arg1);\n          } else {\n            for (key in arg1) {\n              fn(this[i], key, arg1[key]);\n            }\n          }\n        }\n        // return self for chaining\n        return this;\n      } else {\n        // we are a read, so read the first child.\n        var value = fn.$dv;\n        // Only if we have $dv do we iterate over all, otherwise it is just the first element.\n        var jj = (value === undefined) ? Math.min(this.length, 1) : this.length;\n        for (var j = 0; j < jj; j++) {\n          var nodeValue = fn(this[j], arg1, arg2);\n          value = value ? value + nodeValue : nodeValue;\n        }\n        return value;\n      }\n    } else {\n      // we are a write, so apply to all children\n      for (i = 0; i < this.length; i++) {\n        fn(this[i], arg1, arg2);\n      }\n      // return self for chaining\n      return this;\n    }\n  };\n});\n\nfunction createEventHandler(element, events) {\n  var eventHandler = function (event, type) {\n    if (!event.preventDefault) {\n      event.preventDefault = function() {\n        event.returnValue = false; //ie\n      };\n    }\n\n    if (!event.stopPropagation) {\n      event.stopPropagation = function() {\n        event.cancelBubble = true; //ie\n      };\n    }\n\n    if (!event.target) {\n      event.target = event.srcElement || document;\n    }\n\n    if (isUndefined(event.defaultPrevented)) {\n      var prevent = event.preventDefault;\n      event.preventDefault = function() {\n        event.defaultPrevented = true;\n        prevent.call(event);\n      };\n      event.defaultPrevented = false;\n    }\n\n    event.isDefaultPrevented = function() {\n      return event.defaultPrevented || event.returnValue === false;\n    };\n\n    // Copy event handlers in case event handlers array is modified during execution.\n    var eventHandlersCopy = shallowCopy(events[type || event.type] || []);\n\n    forEach(eventHandlersCopy, function(fn) {\n      fn.call(element, event);\n    });\n\n    // Remove monkey-patched methods (IE),\n    // as they would cause memory leaks in IE8.\n    if (msie <= 8) {\n      // IE7/8 does not allow to delete property on native object\n      event.preventDefault = null;\n      event.stopPropagation = null;\n      event.isDefaultPrevented = null;\n    } else {\n      // It shouldn't affect normal browsers (native methods are defined on prototype).\n      delete event.preventDefault;\n      delete event.stopPropagation;\n      delete event.isDefaultPrevented;\n    }\n  };\n  eventHandler.elem = element;\n  return eventHandler;\n}\n\n//////////////////////////////////////////\n// Functions iterating traversal.\n// These functions chain results into a single\n// selector.\n//////////////////////////////////////////\nforEach({\n  removeData: jqLiteRemoveData,\n\n  dealoc: jqLiteDealoc,\n\n  on: function onFn(element, type, fn, unsupported){\n    if (isDefined(unsupported)) throw jqLiteMinErr('onargs', 'jqLite#on() does not support the `selector` or `eventData` parameters');\n\n    var events = jqLiteExpandoStore(element, 'events'),\n        handle = jqLiteExpandoStore(element, 'handle');\n\n    if (!events) jqLiteExpandoStore(element, 'events', events = {});\n    if (!handle) jqLiteExpandoStore(element, 'handle', handle = createEventHandler(element, events));\n\n    forEach(type.split(' '), function(type){\n      var eventFns = events[type];\n\n      if (!eventFns) {\n        if (type == 'mouseenter' || type == 'mouseleave') {\n          var contains = document.body.contains || document.body.compareDocumentPosition ?\n          function( a, b ) {\n            // jshint bitwise: false\n            var adown = a.nodeType === 9 ? a.documentElement : a,\n            bup = b && b.parentNode;\n            return a === bup || !!( bup && bup.nodeType === 1 && (\n              adown.contains ?\n              adown.contains( bup ) :\n              a.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16\n              ));\n            } :\n            function( a, b ) {\n              if ( b ) {\n                while ( (b = b.parentNode) ) {\n                  if ( b === a ) {\n                    return true;\n                  }\n                }\n              }\n              return false;\n            };\n\n          events[type] = [];\n\n          // Refer to jQuery's implementation of mouseenter & mouseleave\n          // Read about mouseenter and mouseleave:\n          // http://www.quirksmode.org/js/events_mouse.html#link8\n          var eventmap = { mouseleave : \"mouseout\", mouseenter : \"mouseover\"};\n\n          onFn(element, eventmap[type], function(event) {\n            var target = this, related = event.relatedTarget;\n            // For mousenter/leave call the handler if related is outside the target.\n            // NB: No relatedTarget if the mouse left/entered the browser window\n            if ( !related || (related !== target && !contains(target, related)) ){\n              handle(event, type);\n            }\n          });\n\n        } else {\n          addEventListenerFn(element, type, handle);\n          events[type] = [];\n        }\n        eventFns = events[type];\n      }\n      eventFns.push(fn);\n    });\n  },\n\n  off: jqLiteOff,\n\n  one: function(element, type, fn) {\n    element = jqLite(element);\n\n    //add the listener twice so that when it is called\n    //you can remove the original function and still be\n    //able to call element.off(ev, fn) normally\n    element.on(type, function onFn() {\n      element.off(type, fn);\n      element.off(type, onFn);\n    });\n    element.on(type, fn);\n  },\n\n  replaceWith: function(element, replaceNode) {\n    var index, parent = element.parentNode;\n    jqLiteDealoc(element);\n    forEach(new JQLite(replaceNode), function(node){\n      if (index) {\n        parent.insertBefore(node, index.nextSibling);\n      } else {\n        parent.replaceChild(node, element);\n      }\n      index = node;\n    });\n  },\n\n  children: function(element) {\n    var children = [];\n    forEach(element.childNodes, function(element){\n      if (element.nodeType === 1)\n        children.push(element);\n    });\n    return children;\n  },\n\n  contents: function(element) {\n    return element.contentDocument || element.childNodes || [];\n  },\n\n  append: function(element, node) {\n    forEach(new JQLite(node), function(child){\n      if (element.nodeType === 1 || element.nodeType === 11) {\n        element.appendChild(child);\n      }\n    });\n  },\n\n  prepend: function(element, node) {\n    if (element.nodeType === 1) {\n      var index = element.firstChild;\n      forEach(new JQLite(node), function(child){\n        element.insertBefore(child, index);\n      });\n    }\n  },\n\n  wrap: function(element, wrapNode) {\n    wrapNode = jqLite(wrapNode)[0];\n    var parent = element.parentNode;\n    if (parent) {\n      parent.replaceChild(wrapNode, element);\n    }\n    wrapNode.appendChild(element);\n  },\n\n  remove: function(element) {\n    jqLiteDealoc(element);\n    var parent = element.parentNode;\n    if (parent) parent.removeChild(element);\n  },\n\n  after: function(element, newElement) {\n    var index = element, parent = element.parentNode;\n    forEach(new JQLite(newElement), function(node){\n      parent.insertBefore(node, index.nextSibling);\n      index = node;\n    });\n  },\n\n  addClass: jqLiteAddClass,\n  removeClass: jqLiteRemoveClass,\n\n  toggleClass: function(element, selector, condition) {\n    if (selector) {\n      forEach(selector.split(' '), function(className){\n        var classCondition = condition;\n        if (isUndefined(classCondition)) {\n          classCondition = !jqLiteHasClass(element, className);\n        }\n        (classCondition ? jqLiteAddClass : jqLiteRemoveClass)(element, className);\n      });\n    }\n  },\n\n  parent: function(element) {\n    var parent = element.parentNode;\n    return parent && parent.nodeType !== 11 ? parent : null;\n  },\n\n  next: function(element) {\n    if (element.nextElementSibling) {\n      return element.nextElementSibling;\n    }\n\n    // IE8 doesn't have nextElementSibling\n    var elm = element.nextSibling;\n    while (elm != null && elm.nodeType !== 1) {\n      elm = elm.nextSibling;\n    }\n    return elm;\n  },\n\n  find: function(element, selector) {\n    if (element.getElementsByTagName) {\n      return element.getElementsByTagName(selector);\n    } else {\n      return [];\n    }\n  },\n\n  clone: jqLiteClone,\n\n  triggerHandler: function(element, eventName, eventData) {\n    var eventFns = (jqLiteExpandoStore(element, 'events') || {})[eventName];\n\n    eventData = eventData || [];\n\n    var event = [{\n      preventDefault: noop,\n      stopPropagation: noop\n    }];\n\n    forEach(eventFns, function(fn) {\n      fn.apply(element, event.concat(eventData));\n    });\n  }\n}, function(fn, name){\n  /**\n   * chaining functions\n   */\n  JQLite.prototype[name] = function(arg1, arg2, arg3) {\n    var value;\n    for(var i=0; i < this.length; i++) {\n      if (isUndefined(value)) {\n        value = fn(this[i], arg1, arg2, arg3);\n        if (isDefined(value)) {\n          // any function which returns a value needs to be wrapped\n          value = jqLite(value);\n        }\n      } else {\n        jqLiteAddNodes(value, fn(this[i], arg1, arg2, arg3));\n      }\n    }\n    return isDefined(value) ? value : this;\n  };\n\n  // bind legacy bind/unbind to on/off\n  JQLite.prototype.bind = JQLite.prototype.on;\n  JQLite.prototype.unbind = JQLite.prototype.off;\n});\n\n/**\n * Computes a hash of an 'obj'.\n * Hash of a:\n *  string is string\n *  number is number as string\n *  object is either result of calling $$hashKey function on the object or uniquely generated id,\n *         that is also assigned to the $$hashKey property of the object.\n *\n * @param obj\n * @returns {string} hash string such that the same input will have the same hash string.\n *         The resulting string key is in 'type:hashKey' format.\n */\nfunction hashKey(obj) {\n  var objType = typeof obj,\n      key;\n\n  if (objType == 'object' && obj !== null) {\n    if (typeof (key = obj.$$hashKey) == 'function') {\n      // must invoke on object to keep the right this\n      key = obj.$$hashKey();\n    } else if (key === undefined) {\n      key = obj.$$hashKey = nextUid();\n    }\n  } else {\n    key = obj;\n  }\n\n  return objType + ':' + key;\n}\n\n/**\n * HashMap which can use objects as keys\n */\nfunction HashMap(array){\n  forEach(array, this.put, this);\n}\nHashMap.prototype = {\n  /**\n   * Store key value pair\n   * @param key key to store can be any type\n   * @param value value to store can be any type\n   */\n  put: function(key, value) {\n    this[hashKey(key)] = value;\n  },\n\n  /**\n   * @param key\n   * @returns {Object} the value for the key\n   */\n  get: function(key) {\n    return this[hashKey(key)];\n  },\n\n  /**\n   * Remove the key/value pair\n   * @param key\n   */\n  remove: function(key) {\n    var value = this[key = hashKey(key)];\n    delete this[key];\n    return value;\n  }\n};\n\n/**\n * @ngdoc function\n * @module ng\n * @name angular.injector\n * @kind function\n *\n * @description\n * Creates an injector function that can be used for retrieving services as well as for\n * dependency injection (see {@link guide/di dependency injection}).\n *\n\n * @param {Array.<string|Function>} modules A list of module functions or their aliases. See\n *        {@link angular.module}. The `ng` module must be explicitly added.\n * @returns {function()} Injector function. See {@link auto.$injector $injector}.\n *\n * @example\n * Typical usage\n * ```js\n *   // create an injector\n *   var $injector = angular.injector(['ng']);\n *\n *   // use the injector to kick off your application\n *   // use the type inference to auto inject arguments, or use implicit injection\n *   $injector.invoke(function($rootScope, $compile, $document){\n *     $compile($document)($rootScope);\n *     $rootScope.$digest();\n *   });\n * ```\n *\n * Sometimes you want to get access to the injector of a currently running Angular app\n * from outside Angular. Perhaps, you want to inject and compile some markup after the\n * application has been bootstrapped. You can do this using the extra `injector()` added\n * to JQuery/jqLite elements. See {@link angular.element}.\n *\n * *This is fairly rare but could be the case if a third party library is injecting the\n * markup.*\n *\n * In the following example a new block of HTML containing a `ng-controller`\n * directive is added to the end of the document body by JQuery. We then compile and link\n * it into the current AngularJS scope.\n *\n * ```js\n * var $div = $('<div ng-controller=\"MyCtrl\">{{content.label}}</div>');\n * $(document.body).append($div);\n *\n * angular.element(document).injector().invoke(function($compile) {\n *   var scope = angular.element($div).scope();\n *   $compile($div)(scope);\n * });\n * ```\n */\n\n\n/**\n * @ngdoc module\n * @name auto\n * @description\n *\n * Implicit module which gets automatically added to each {@link auto.$injector $injector}.\n */\n\nvar FN_ARGS = /^function\\s*[^\\(]*\\(\\s*([^\\)]*)\\)/m;\nvar FN_ARG_SPLIT = /,/;\nvar FN_ARG = /^\\s*(_?)(\\S+?)\\1\\s*$/;\nvar STRIP_COMMENTS = /((\\/\\/.*$)|(\\/\\*[\\s\\S]*?\\*\\/))/mg;\nvar $injectorMinErr = minErr('$injector');\nfunction annotate(fn) {\n  var $inject,\n      fnText,\n      argDecl,\n      last;\n\n  if (typeof fn == 'function') {\n    if (!($inject = fn.$inject)) {\n      $inject = [];\n      if (fn.length) {\n        fnText = fn.toString().replace(STRIP_COMMENTS, '');\n        argDecl = fnText.match(FN_ARGS);\n        forEach(argDecl[1].split(FN_ARG_SPLIT), function(arg){\n          arg.replace(FN_ARG, function(all, underscore, name){\n            $inject.push(name);\n          });\n        });\n      }\n      fn.$inject = $inject;\n    }\n  } else if (isArray(fn)) {\n    last = fn.length - 1;\n    assertArgFn(fn[last], 'fn');\n    $inject = fn.slice(0, last);\n  } else {\n    assertArgFn(fn, 'fn', true);\n  }\n  return $inject;\n}\n\n///////////////////////////////////////\n\n/**\n * @ngdoc service\n * @name $injector\n * @kind function\n *\n * @description\n *\n * `$injector` is used to retrieve object instances as defined by\n * {@link auto.$provide provider}, instantiate types, invoke methods,\n * and load modules.\n *\n * The following always holds true:\n *\n * ```js\n *   var $injector = angular.injector();\n *   expect($injector.get('$injector')).toBe($injector);\n *   expect($injector.invoke(function($injector){\n *     return $injector;\n *   }).toBe($injector);\n * ```\n *\n * # Injection Function Annotation\n *\n * JavaScript does not have annotations, and annotations are needed for dependency injection. The\n * following are all valid ways of annotating function with injection arguments and are equivalent.\n *\n * ```js\n *   // inferred (only works if code not minified/obfuscated)\n *   $injector.invoke(function(serviceA){});\n *\n *   // annotated\n *   function explicit(serviceA) {};\n *   explicit.$inject = ['serviceA'];\n *   $injector.invoke(explicit);\n *\n *   // inline\n *   $injector.invoke(['serviceA', function(serviceA){}]);\n * ```\n *\n * ## Inference\n *\n * In JavaScript calling `toString()` on a function returns the function definition. The definition\n * can then be parsed and the function arguments can be extracted. *NOTE:* This does not work with\n * minification, and obfuscation tools since these tools change the argument names.\n *\n * ## `$inject` Annotation\n * By adding an `$inject` property onto a function the injection parameters can be specified.\n *\n * ## Inline\n * As an array of injection names, where the last item in the array is the function to call.\n */\n\n/**\n * @ngdoc method\n * @name $injector#get\n *\n * @description\n * Return an instance of the service.\n *\n * @param {string} name The name of the instance to retrieve.\n * @return {*} The instance.\n */\n\n/**\n * @ngdoc method\n * @name $injector#invoke\n *\n * @description\n * Invoke the method and supply the method arguments from the `$injector`.\n *\n * @param {!Function} fn The function to invoke. Function parameters are injected according to the\n *   {@link guide/di $inject Annotation} rules.\n * @param {Object=} self The `this` for the invoked method.\n * @param {Object=} locals Optional object. If preset then any argument names are read from this\n *                         object first, before the `$injector` is consulted.\n * @returns {*} the value returned by the invoked `fn` function.\n */\n\n/**\n * @ngdoc method\n * @name $injector#has\n *\n * @description\n * Allows the user to query if the particular service exists.\n *\n * @param {string} Name of the service to query.\n * @returns {boolean} returns true if injector has given service.\n */\n\n/**\n * @ngdoc method\n * @name $injector#instantiate\n * @description\n * Create a new instance of JS type. The method takes a constructor function, invokes the new\n * operator, and supplies all of the arguments to the constructor function as specified by the\n * constructor annotation.\n *\n * @param {Function} Type Annotated constructor function.\n * @param {Object=} locals Optional object. If preset then any argument names are read from this\n * object first, before the `$injector` is consulted.\n * @returns {Object} new instance of `Type`.\n */\n\n/**\n * @ngdoc method\n * @name $injector#annotate\n *\n * @description\n * Returns an array of service names which the function is requesting for injection. This API is\n * used by the injector to determine which services need to be injected into the function when the\n * function is invoked. There are three ways in which the function can be annotated with the needed\n * dependencies.\n *\n * # Argument names\n *\n * The simplest form is to extract the dependencies from the arguments of the function. This is done\n * by converting the function into a string using `toString()` method and extracting the argument\n * names.\n * ```js\n *   // Given\n *   function MyController($scope, $route) {\n *     // ...\n *   }\n *\n *   // Then\n *   expect(injector.annotate(MyController)).toEqual(['$scope', '$route']);\n * ```\n *\n * This method does not work with code minification / obfuscation. For this reason the following\n * annotation strategies are supported.\n *\n * # The `$inject` property\n *\n * If a function has an `$inject` property and its value is an array of strings, then the strings\n * represent names of services to be injected into the function.\n * ```js\n *   // Given\n *   var MyController = function(obfuscatedScope, obfuscatedRoute) {\n *     // ...\n *   }\n *   // Define function dependencies\n *   MyController['$inject'] = ['$scope', '$route'];\n *\n *   // Then\n *   expect(injector.annotate(MyController)).toEqual(['$scope', '$route']);\n * ```\n *\n * # The array notation\n *\n * It is often desirable to inline Injected functions and that's when setting the `$inject` property\n * is very inconvenient. In these situations using the array notation to specify the dependencies in\n * a way that survives minification is a better choice:\n *\n * ```js\n *   // We wish to write this (not minification / obfuscation safe)\n *   injector.invoke(function($compile, $rootScope) {\n *     // ...\n *   });\n *\n *   // We are forced to write break inlining\n *   var tmpFn = function(obfuscatedCompile, obfuscatedRootScope) {\n *     // ...\n *   };\n *   tmpFn.$inject = ['$compile', '$rootScope'];\n *   injector.invoke(tmpFn);\n *\n *   // To better support inline function the inline annotation is supported\n *   injector.invoke(['$compile', '$rootScope', function(obfCompile, obfRootScope) {\n *     // ...\n *   }]);\n *\n *   // Therefore\n *   expect(injector.annotate(\n *      ['$compile', '$rootScope', function(obfus_$compile, obfus_$rootScope) {}])\n *    ).toEqual(['$compile', '$rootScope']);\n * ```\n *\n * @param {Function|Array.<string|Function>} fn Function for which dependent service names need to\n * be retrieved as described above.\n *\n * @returns {Array.<string>} The names of the services which the function requires.\n */\n\n\n\n\n/**\n * @ngdoc object\n * @name $provide\n *\n * @description\n *\n * The {@link auto.$provide $provide} service has a number of methods for registering components\n * with the {@link auto.$injector $injector}. Many of these functions are also exposed on\n * {@link angular.Module}.\n *\n * An Angular **service** is a singleton object created by a **service factory**.  These **service\n * factories** are functions which, in turn, are created by a **service provider**.\n * The **service providers** are constructor functions. When instantiated they must contain a\n * property called `$get`, which holds the **service factory** function.\n *\n * When you request a service, the {@link auto.$injector $injector} is responsible for finding the\n * correct **service provider**, instantiating it and then calling its `$get` **service factory**\n * function to get the instance of the **service**.\n *\n * Often services have no configuration options and there is no need to add methods to the service\n * provider.  The provider will be no more than a constructor function with a `$get` property. For\n * these cases the {@link auto.$provide $provide} service has additional helper methods to register\n * services without specifying a provider.\n *\n * * {@link auto.$provide#provider provider(provider)} - registers a **service provider** with the\n *     {@link auto.$injector $injector}\n * * {@link auto.$provide#constant constant(obj)} - registers a value/object that can be accessed by\n *     providers and services.\n * * {@link auto.$provide#value value(obj)} - registers a value/object that can only be accessed by\n *     services, not providers.\n * * {@link auto.$provide#factory factory(fn)} - registers a service **factory function**, `fn`,\n *     that will be wrapped in a **service provider** object, whose `$get` property will contain the\n *     given factory function.\n * * {@link auto.$provide#service service(class)} - registers a **constructor function**, `class`\n *     that will be wrapped in a **service provider** object, whose `$get` property will instantiate\n *      a new object using the given constructor function.\n *\n * See the individual methods for more information and examples.\n */\n\n/**\n * @ngdoc method\n * @name $provide#provider\n * @description\n *\n * Register a **provider function** with the {@link auto.$injector $injector}. Provider functions\n * are constructor functions, whose instances are responsible for \"providing\" a factory for a\n * service.\n *\n * Service provider names start with the name of the service they provide followed by `Provider`.\n * For example, the {@link ng.$log $log} service has a provider called\n * {@link ng.$logProvider $logProvider}.\n *\n * Service provider objects can have additional methods which allow configuration of the provider\n * and its service. Importantly, you can configure what kind of service is created by the `$get`\n * method, or how that service will act. For example, the {@link ng.$logProvider $logProvider} has a\n * method {@link ng.$logProvider#debugEnabled debugEnabled}\n * which lets you specify whether the {@link ng.$log $log} service will log debug messages to the\n * console or not.\n *\n * @param {string} name The name of the instance. NOTE: the provider will be available under `name +\n                        'Provider'` key.\n * @param {(Object|function())} provider If the provider is:\n *\n *   - `Object`: then it should have a `$get` method. The `$get` method will be invoked using\n *     {@link auto.$injector#invoke $injector.invoke()} when an instance needs to be created.\n *   - `Constructor`: a new instance of the provider will be created using\n *     {@link auto.$injector#instantiate $injector.instantiate()}, then treated as `object`.\n *\n * @returns {Object} registered provider instance\n\n * @example\n *\n * The following example shows how to create a simple event tracking service and register it using\n * {@link auto.$provide#provider $provide.provider()}.\n *\n * ```js\n *  // Define the eventTracker provider\n *  function EventTrackerProvider() {\n *    var trackingUrl = '/track';\n *\n *    // A provider method for configuring where the tracked events should been saved\n *    this.setTrackingUrl = function(url) {\n *      trackingUrl = url;\n *    };\n *\n *    // The service factory function\n *    this.$get = ['$http', function($http) {\n *      var trackedEvents = {};\n *      return {\n *        // Call this to track an event\n *        event: function(event) {\n *          var count = trackedEvents[event] || 0;\n *          count += 1;\n *          trackedEvents[event] = count;\n *          return count;\n *        },\n *        // Call this to save the tracked events to the trackingUrl\n *        save: function() {\n *          $http.post(trackingUrl, trackedEvents);\n *        }\n *      };\n *    }];\n *  }\n *\n *  describe('eventTracker', function() {\n *    var postSpy;\n *\n *    beforeEach(module(function($provide) {\n *      // Register the eventTracker provider\n *      $provide.provider('eventTracker', EventTrackerProvider);\n *    }));\n *\n *    beforeEach(module(function(eventTrackerProvider) {\n *      // Configure eventTracker provider\n *      eventTrackerProvider.setTrackingUrl('/custom-track');\n *    }));\n *\n *    it('tracks events', inject(function(eventTracker) {\n *      expect(eventTracker.event('login')).toEqual(1);\n *      expect(eventTracker.event('login')).toEqual(2);\n *    }));\n *\n *    it('saves to the tracking url', inject(function(eventTracker, $http) {\n *      postSpy = spyOn($http, 'post');\n *      eventTracker.event('login');\n *      eventTracker.save();\n *      expect(postSpy).toHaveBeenCalled();\n *      expect(postSpy.mostRecentCall.args[0]).not.toEqual('/track');\n *      expect(postSpy.mostRecentCall.args[0]).toEqual('/custom-track');\n *      expect(postSpy.mostRecentCall.args[1]).toEqual({ 'login': 1 });\n *    }));\n *  });\n * ```\n */\n\n/**\n * @ngdoc method\n * @name $provide#factory\n * @description\n *\n * Register a **service factory**, which will be called to return the service instance.\n * This is short for registering a service where its provider consists of only a `$get` property,\n * which is the given service factory function.\n * You should use {@link auto.$provide#factory $provide.factory(getFn)} if you do not need to\n * configure your service in a provider.\n *\n * @param {string} name The name of the instance.\n * @param {function()} $getFn The $getFn for the instance creation. Internally this is a short hand\n *                            for `$provide.provider(name, {$get: $getFn})`.\n * @returns {Object} registered provider instance\n *\n * @example\n * Here is an example of registering a service\n * ```js\n *   $provide.factory('ping', ['$http', function($http) {\n *     return function ping() {\n *       return $http.send('/ping');\n *     };\n *   }]);\n * ```\n * You would then inject and use this service like this:\n * ```js\n *   someModule.controller('Ctrl', ['ping', function(ping) {\n *     ping();\n *   }]);\n * ```\n */\n\n\n/**\n * @ngdoc method\n * @name $provide#service\n * @description\n *\n * Register a **service constructor**, which will be invoked with `new` to create the service\n * instance.\n * This is short for registering a service where its provider's `$get` property is the service\n * constructor function that will be used to instantiate the service instance.\n *\n * You should use {@link auto.$provide#service $provide.service(class)} if you define your service\n * as a type/class.\n *\n * @param {string} name The name of the instance.\n * @param {Function} constructor A class (constructor function) that will be instantiated.\n * @returns {Object} registered provider instance\n *\n * @example\n * Here is an example of registering a service using\n * {@link auto.$provide#service $provide.service(class)}.\n * ```js\n *   var Ping = function($http) {\n *     this.$http = $http;\n *   };\n *\n *   Ping.$inject = ['$http'];\n *\n *   Ping.prototype.send = function() {\n *     return this.$http.get('/ping');\n *   };\n *   $provide.service('ping', Ping);\n * ```\n * You would then inject and use this service like this:\n * ```js\n *   someModule.controller('Ctrl', ['ping', function(ping) {\n *     ping.send();\n *   }]);\n * ```\n */\n\n\n/**\n * @ngdoc method\n * @name $provide#value\n * @description\n *\n * Register a **value service** with the {@link auto.$injector $injector}, such as a string, a\n * number, an array, an object or a function.  This is short for registering a service where its\n * provider's `$get` property is a factory function that takes no arguments and returns the **value\n * service**.\n *\n * Value services are similar to constant services, except that they cannot be injected into a\n * module configuration function (see {@link angular.Module#config}) but they can be overridden by\n * an Angular\n * {@link auto.$provide#decorator decorator}.\n *\n * @param {string} name The name of the instance.\n * @param {*} value The value.\n * @returns {Object} registered provider instance\n *\n * @example\n * Here are some examples of creating value services.\n * ```js\n *   $provide.value('ADMIN_USER', 'admin');\n *\n *   $provide.value('RoleLookup', { admin: 0, writer: 1, reader: 2 });\n *\n *   $provide.value('halfOf', function(value) {\n *     return value / 2;\n *   });\n * ```\n */\n\n\n/**\n * @ngdoc method\n * @name $provide#constant\n * @description\n *\n * Register a **constant service**, such as a string, a number, an array, an object or a function,\n * with the {@link auto.$injector $injector}. Unlike {@link auto.$provide#value value} it can be\n * injected into a module configuration function (see {@link angular.Module#config}) and it cannot\n * be overridden by an Angular {@link auto.$provide#decorator decorator}.\n *\n * @param {string} name The name of the constant.\n * @param {*} value The constant value.\n * @returns {Object} registered instance\n *\n * @example\n * Here a some examples of creating constants:\n * ```js\n *   $provide.constant('SHARD_HEIGHT', 306);\n *\n *   $provide.constant('MY_COLOURS', ['red', 'blue', 'grey']);\n *\n *   $provide.constant('double', function(value) {\n *     return value * 2;\n *   });\n * ```\n */\n\n\n/**\n * @ngdoc method\n * @name $provide#decorator\n * @description\n *\n * Register a **service decorator** with the {@link auto.$injector $injector}. A service decorator\n * intercepts the creation of a service, allowing it to override or modify the behaviour of the\n * service. The object returned by the decorator may be the original service, or a new service\n * object which replaces or wraps and delegates to the original service.\n *\n * @param {string} name The name of the service to decorate.\n * @param {function()} decorator This function will be invoked when the service needs to be\n *    instantiated and should return the decorated service instance. The function is called using\n *    the {@link auto.$injector#invoke injector.invoke} method and is therefore fully injectable.\n *    Local injection arguments:\n *\n *    * `$delegate` - The original service instance, which can be monkey patched, configured,\n *      decorated or delegated to.\n *\n * @example\n * Here we decorate the {@link ng.$log $log} service to convert warnings to errors by intercepting\n * calls to {@link ng.$log#error $log.warn()}.\n * ```js\n *   $provide.decorator('$log', ['$delegate', function($delegate) {\n *     $delegate.warn = $delegate.error;\n *     return $delegate;\n *   }]);\n * ```\n */\n\n\nfunction createInjector(modulesToLoad) {\n  var INSTANTIATING = {},\n      providerSuffix = 'Provider',\n      path = [],\n      loadedModules = new HashMap(),\n      providerCache = {\n        $provide: {\n            provider: supportObject(provider),\n            factory: supportObject(factory),\n            service: supportObject(service),\n            value: supportObject(value),\n            constant: supportObject(constant),\n            decorator: decorator\n          }\n      },\n      providerInjector = (providerCache.$injector =\n          createInternalInjector(providerCache, function() {\n            throw $injectorMinErr('unpr', \"Unknown provider: {0}\", path.join(' <- '));\n          })),\n      instanceCache = {},\n      instanceInjector = (instanceCache.$injector =\n          createInternalInjector(instanceCache, function(servicename) {\n            var provider = providerInjector.get(servicename + providerSuffix);\n            return instanceInjector.invoke(provider.$get, provider);\n          }));\n\n\n  forEach(loadModules(modulesToLoad), function(fn) { instanceInjector.invoke(fn || noop); });\n\n  return instanceInjector;\n\n  ////////////////////////////////////\n  // $provider\n  ////////////////////////////////////\n\n  function supportObject(delegate) {\n    return function(key, value) {\n      if (isObject(key)) {\n        forEach(key, reverseParams(delegate));\n      } else {\n        return delegate(key, value);\n      }\n    };\n  }\n\n  function provider(name, provider_) {\n    assertNotHasOwnProperty(name, 'service');\n    if (isFunction(provider_) || isArray(provider_)) {\n      provider_ = providerInjector.instantiate(provider_);\n    }\n    if (!provider_.$get) {\n      throw $injectorMinErr('pget', \"Provider '{0}' must define $get factory method.\", name);\n    }\n    return providerCache[name + providerSuffix] = provider_;\n  }\n\n  function factory(name, factoryFn) { return provider(name, { $get: factoryFn }); }\n\n  function service(name, constructor) {\n    return factory(name, ['$injector', function($injector) {\n      return $injector.instantiate(constructor);\n    }]);\n  }\n\n  function value(name, val) { return factory(name, valueFn(val)); }\n\n  function constant(name, value) {\n    assertNotHasOwnProperty(name, 'constant');\n    providerCache[name] = value;\n    instanceCache[name] = value;\n  }\n\n  function decorator(serviceName, decorFn) {\n    var origProvider = providerInjector.get(serviceName + providerSuffix),\n        orig$get = origProvider.$get;\n\n    origProvider.$get = function() {\n      var origInstance = instanceInjector.invoke(orig$get, origProvider);\n      return instanceInjector.invoke(decorFn, null, {$delegate: origInstance});\n    };\n  }\n\n  ////////////////////////////////////\n  // Module Loading\n  ////////////////////////////////////\n  function loadModules(modulesToLoad){\n    var runBlocks = [], moduleFn, invokeQueue, i, ii;\n    forEach(modulesToLoad, function(module) {\n      if (loadedModules.get(module)) return;\n      loadedModules.put(module, true);\n\n      try {\n        if (isString(module)) {\n          moduleFn = angularModule(module);\n          runBlocks = runBlocks.concat(loadModules(moduleFn.requires)).concat(moduleFn._runBlocks);\n\n          for(invokeQueue = moduleFn._invokeQueue, i = 0, ii = invokeQueue.length; i < ii; i++) {\n            var invokeArgs = invokeQueue[i],\n                provider = providerInjector.get(invokeArgs[0]);\n\n            provider[invokeArgs[1]].apply(provider, invokeArgs[2]);\n          }\n        } else if (isFunction(module)) {\n            runBlocks.push(providerInjector.invoke(module));\n        } else if (isArray(module)) {\n            runBlocks.push(providerInjector.invoke(module));\n        } else {\n          assertArgFn(module, 'module');\n        }\n      } catch (e) {\n        if (isArray(module)) {\n          module = module[module.length - 1];\n        }\n        if (e.message && e.stack && e.stack.indexOf(e.message) == -1) {\n          // Safari & FF's stack traces don't contain error.message content\n          // unlike those of Chrome and IE\n          // So if stack doesn't contain message, we create a new string that contains both.\n          // Since error.stack is read-only in Safari, I'm overriding e and not e.stack here.\n          /* jshint -W022 */\n          e = e.message + '\\n' + e.stack;\n        }\n        throw $injectorMinErr('modulerr', \"Failed to instantiate module {0} due to:\\n{1}\",\n                  module, e.stack || e.message || e);\n      }\n    });\n    return runBlocks;\n  }\n\n  ////////////////////////////////////\n  // internal Injector\n  ////////////////////////////////////\n\n  function createInternalInjector(cache, factory) {\n\n    function getService(serviceName) {\n      if (cache.hasOwnProperty(serviceName)) {\n        if (cache[serviceName] === INSTANTIATING) {\n          throw $injectorMinErr('cdep', 'Circular dependency found: {0}', path.join(' <- '));\n        }\n        return cache[serviceName];\n      } else {\n        try {\n          path.unshift(serviceName);\n          cache[serviceName] = INSTANTIATING;\n          return cache[serviceName] = factory(serviceName);\n        } catch (err) {\n          if (cache[serviceName] === INSTANTIATING) {\n            delete cache[serviceName];\n          }\n          throw err;\n        } finally {\n          path.shift();\n        }\n      }\n    }\n\n    function invoke(fn, self, locals){\n      var args = [],\n          $inject = annotate(fn),\n          length, i,\n          key;\n\n      for(i = 0, length = $inject.length; i < length; i++) {\n        key = $inject[i];\n        if (typeof key !== 'string') {\n          throw $injectorMinErr('itkn',\n                  'Incorrect injection token! Expected service name as string, got {0}', key);\n        }\n        args.push(\n          locals && locals.hasOwnProperty(key)\n          ? locals[key]\n          : getService(key)\n        );\n      }\n      if (!fn.$inject) {\n        // this means that we must be an array.\n        fn = fn[length];\n      }\n\n      // http://jsperf.com/angularjs-invoke-apply-vs-switch\n      // #5388\n      return fn.apply(self, args);\n    }\n\n    function instantiate(Type, locals) {\n      var Constructor = function() {},\n          instance, returnedValue;\n\n      // Check if Type is annotated and use just the given function at n-1 as parameter\n      // e.g. someModule.factory('greeter', ['$window', function(renamed$window) {}]);\n      Constructor.prototype = (isArray(Type) ? Type[Type.length - 1] : Type).prototype;\n      instance = new Constructor();\n      returnedValue = invoke(Type, instance, locals);\n\n      return isObject(returnedValue) || isFunction(returnedValue) ? returnedValue : instance;\n    }\n\n    return {\n      invoke: invoke,\n      instantiate: instantiate,\n      get: getService,\n      annotate: annotate,\n      has: function(name) {\n        return providerCache.hasOwnProperty(name + providerSuffix) || cache.hasOwnProperty(name);\n      }\n    };\n  }\n}\n\n/**\n * @ngdoc service\n * @name $anchorScroll\n * @kind function\n * @requires $window\n * @requires $location\n * @requires $rootScope\n *\n * @description\n * When called, it checks current value of `$location.hash()` and scrolls to the related element,\n * according to rules specified in\n * [Html5 spec](http://dev.w3.org/html5/spec/Overview.html#the-indicated-part-of-the-document).\n *\n * It also watches the `$location.hash()` and scrolls whenever it changes to match any anchor.\n * This can be disabled by calling `$anchorScrollProvider.disableAutoScrolling()`.\n *\n * @example\n   <example>\n     <file name=\"index.html\">\n       <div id=\"scrollArea\" ng-controller=\"ScrollCtrl\">\n         <a ng-click=\"gotoBottom()\">Go to bottom</a>\n         <a id=\"bottom\"></a> You're at the bottom!\n       </div>\n     </file>\n     <file name=\"script.js\">\n       function ScrollCtrl($scope, $location, $anchorScroll) {\n         $scope.gotoBottom = function (){\n           // set the location.hash to the id of\n           // the element you wish to scroll to.\n           $location.hash('bottom');\n\n           // call $anchorScroll()\n           $anchorScroll();\n         };\n       }\n     </file>\n     <file name=\"style.css\">\n       #scrollArea {\n         height: 350px;\n         overflow: auto;\n       }\n\n       #bottom {\n         display: block;\n         margin-top: 2000px;\n       }\n     </file>\n   </example>\n */\nfunction $AnchorScrollProvider() {\n\n  var autoScrollingEnabled = true;\n\n  this.disableAutoScrolling = function() {\n    autoScrollingEnabled = false;\n  };\n\n  this.$get = ['$window', '$location', '$rootScope', function($window, $location, $rootScope) {\n    var document = $window.document;\n\n    // helper function to get first anchor from a NodeList\n    // can't use filter.filter, as it accepts only instances of Array\n    // and IE can't convert NodeList to an array using [].slice\n    // TODO(vojta): use filter if we change it to accept lists as well\n    function getFirstAnchor(list) {\n      var result = null;\n      forEach(list, function(element) {\n        if (!result && lowercase(element.nodeName) === 'a') result = element;\n      });\n      return result;\n    }\n\n    function scroll() {\n      var hash = $location.hash(), elm;\n\n      // empty hash, scroll to the top of the page\n      if (!hash) $window.scrollTo(0, 0);\n\n      // element with given id\n      else if ((elm = document.getElementById(hash))) elm.scrollIntoView();\n\n      // first anchor with given name :-D\n      else if ((elm = getFirstAnchor(document.getElementsByName(hash)))) elm.scrollIntoView();\n\n      // no element and hash == 'top', scroll to the top of the page\n      else if (hash === 'top') $window.scrollTo(0, 0);\n    }\n\n    // does not scroll when user clicks on anchor link that is currently on\n    // (no url change, no $location.hash() change), browser native does scroll\n    if (autoScrollingEnabled) {\n      $rootScope.$watch(function autoScrollWatch() {return $location.hash();},\n        function autoScrollWatchAction() {\n          $rootScope.$evalAsync(scroll);\n        });\n    }\n\n    return scroll;\n  }];\n}\n\nvar $animateMinErr = minErr('$animate');\n\n/**\n * @ngdoc provider\n * @name $animateProvider\n *\n * @description\n * Default implementation of $animate that doesn't perform any animations, instead just\n * synchronously performs DOM\n * updates and calls done() callbacks.\n *\n * In order to enable animations the ngAnimate module has to be loaded.\n *\n * To see the functional implementation check out src/ngAnimate/animate.js\n */\nvar $AnimateProvider = ['$provide', function($provide) {\n\n\n  this.$$selectors = {};\n\n\n  /**\n   * @ngdoc method\n   * @name $animateProvider#register\n   *\n   * @description\n   * Registers a new injectable animation factory function. The factory function produces the\n   * animation object which contains callback functions for each event that is expected to be\n   * animated.\n   *\n   *   * `eventFn`: `function(Element, doneFunction)` The element to animate, the `doneFunction`\n   *   must be called once the element animation is complete. If a function is returned then the\n   *   animation service will use this function to cancel the animation whenever a cancel event is\n   *   triggered.\n   *\n   *\n   * ```js\n   *   return {\n     *     eventFn : function(element, done) {\n     *       //code to run the animation\n     *       //once complete, then run done()\n     *       return function cancellationFunction() {\n     *         //code to cancel the animation\n     *       }\n     *     }\n     *   }\n   * ```\n   *\n   * @param {string} name The name of the animation.\n   * @param {Function} factory The factory function that will be executed to return the animation\n   *                           object.\n   */\n  this.register = function(name, factory) {\n    var key = name + '-animation';\n    if (name && name.charAt(0) != '.') throw $animateMinErr('notcsel',\n        \"Expecting class selector starting with '.' got '{0}'.\", name);\n    this.$$selectors[name.substr(1)] = key;\n    $provide.factory(key, factory);\n  };\n\n  /**\n   * @ngdoc method\n   * @name $animateProvider#classNameFilter\n   *\n   * @description\n   * Sets and/or returns the CSS class regular expression that is checked when performing\n   * an animation. Upon bootstrap the classNameFilter value is not set at all and will\n   * therefore enable $animate to attempt to perform an animation on any element.\n   * When setting the classNameFilter value, animations will only be performed on elements\n   * that successfully match the filter expression. This in turn can boost performance\n   * for low-powered devices as well as applications containing a lot of structural operations.\n   * @param {RegExp=} expression The className expression which will be checked against all animations\n   * @return {RegExp} The current CSS className expression value. If null then there is no expression value\n   */\n  this.classNameFilter = function(expression) {\n    if(arguments.length === 1) {\n      this.$$classNameFilter = (expression instanceof RegExp) ? expression : null;\n    }\n    return this.$$classNameFilter;\n  };\n\n  this.$get = ['$timeout', '$$asyncCallback', function($timeout, $$asyncCallback) {\n\n    function async(fn) {\n      fn && $$asyncCallback(fn);\n    }\n\n    /**\n     *\n     * @ngdoc service\n     * @name $animate\n     * @description The $animate service provides rudimentary DOM manipulation functions to\n     * insert, remove and move elements within the DOM, as well as adding and removing classes.\n     * This service is the core service used by the ngAnimate $animator service which provides\n     * high-level animation hooks for CSS and JavaScript.\n     *\n     * $animate is available in the AngularJS core, however, the ngAnimate module must be included\n     * to enable full out animation support. Otherwise, $animate will only perform simple DOM\n     * manipulation operations.\n     *\n     * To learn more about enabling animation support, click here to visit the {@link ngAnimate\n     * ngAnimate module page} as well as the {@link ngAnimate.$animate ngAnimate $animate service\n     * page}.\n     */\n    return {\n\n      /**\n       *\n       * @ngdoc method\n       * @name $animate#enter\n       * @kind function\n       * @description Inserts the element into the DOM either after the `after` element or within\n       *   the `parent` element. Once complete, the done() callback will be fired (if provided).\n       * @param {DOMElement} element the element which will be inserted into the DOM\n       * @param {DOMElement} parent the parent element which will append the element as\n       *   a child (if the after element is not present)\n       * @param {DOMElement} after the sibling element which will append the element\n       *   after itself\n       * @param {Function=} done callback function that will be called after the element has been\n       *   inserted into the DOM\n       */\n      enter : function(element, parent, after, done) {\n        if (after) {\n          after.after(element);\n        } else {\n          if (!parent || !parent[0]) {\n            parent = after.parent();\n          }\n          parent.append(element);\n        }\n        async(done);\n      },\n\n      /**\n       *\n       * @ngdoc method\n       * @name $animate#leave\n       * @kind function\n       * @description Removes the element from the DOM. Once complete, the done() callback will be\n       *   fired (if provided).\n       * @param {DOMElement} element the element which will be removed from the DOM\n       * @param {Function=} done callback function that will be called after the element has been\n       *   removed from the DOM\n       */\n      leave : function(element, done) {\n        element.remove();\n        async(done);\n      },\n\n      /**\n       *\n       * @ngdoc method\n       * @name $animate#move\n       * @kind function\n       * @description Moves the position of the provided element within the DOM to be placed\n       * either after the `after` element or inside of the `parent` element. Once complete, the\n       * done() callback will be fired (if provided).\n       *\n       * @param {DOMElement} element the element which will be moved around within the\n       *   DOM\n       * @param {DOMElement} parent the parent element where the element will be\n       *   inserted into (if the after element is not present)\n       * @param {DOMElement} after the sibling element where the element will be\n       *   positioned next to\n       * @param {Function=} done the callback function (if provided) that will be fired after the\n       *   element has been moved to its new position\n       */\n      move : function(element, parent, after, done) {\n        // Do not remove element before insert. Removing will cause data associated with the\n        // element to be dropped. Insert will implicitly do the remove.\n        this.enter(element, parent, after, done);\n      },\n\n      /**\n       *\n       * @ngdoc method\n       * @name $animate#addClass\n       * @kind function\n       * @description Adds the provided className CSS class value to the provided element. Once\n       * complete, the done() callback will be fired (if provided).\n       * @param {DOMElement} element the element which will have the className value\n       *   added to it\n       * @param {string} className the CSS class which will be added to the element\n       * @param {Function=} done the callback function (if provided) that will be fired after the\n       *   className value has been added to the element\n       */\n      addClass : function(element, className, done) {\n        className = isString(className) ?\n                      className :\n                      isArray(className) ? className.join(' ') : '';\n        forEach(element, function (element) {\n          jqLiteAddClass(element, className);\n        });\n        async(done);\n      },\n\n      /**\n       *\n       * @ngdoc method\n       * @name $animate#removeClass\n       * @kind function\n       * @description Removes the provided className CSS class value from the provided element.\n       * Once complete, the done() callback will be fired (if provided).\n       * @param {DOMElement} element the element which will have the className value\n       *   removed from it\n       * @param {string} className the CSS class which will be removed from the element\n       * @param {Function=} done the callback function (if provided) that will be fired after the\n       *   className value has been removed from the element\n       */\n      removeClass : function(element, className, done) {\n        className = isString(className) ?\n                      className :\n                      isArray(className) ? className.join(' ') : '';\n        forEach(element, function (element) {\n          jqLiteRemoveClass(element, className);\n        });\n        async(done);\n      },\n\n      /**\n       *\n       * @ngdoc method\n       * @name $animate#setClass\n       * @kind function\n       * @description Adds and/or removes the given CSS classes to and from the element.\n       * Once complete, the done() callback will be fired (if provided).\n       * @param {DOMElement} element the element which will have its CSS classes changed\n       *   removed from it\n       * @param {string} add the CSS classes which will be added to the element\n       * @param {string} remove the CSS class which will be removed from the element\n       * @param {Function=} done the callback function (if provided) that will be fired after the\n       *   CSS classes have been set on the element\n       */\n      setClass : function(element, add, remove, done) {\n        forEach(element, function (element) {\n          jqLiteAddClass(element, add);\n          jqLiteRemoveClass(element, remove);\n        });\n        async(done);\n      },\n\n      enabled : noop\n    };\n  }];\n}];\n\nfunction $$AsyncCallbackProvider(){\n  this.$get = ['$$rAF', '$timeout', function($$rAF, $timeout) {\n    return $$rAF.supported\n      ? function(fn) { return $$rAF(fn); }\n      : function(fn) {\n        return $timeout(fn, 0, false);\n      };\n  }];\n}\n\n/**\n * ! This is a private undocumented service !\n *\n * @name $browser\n * @requires $log\n * @description\n * This object has two goals:\n *\n * - hide all the global state in the browser caused by the window object\n * - abstract away all the browser specific features and inconsistencies\n *\n * For tests we provide {@link ngMock.$browser mock implementation} of the `$browser`\n * service, which can be used for convenient testing of the application without the interaction with\n * the real browser apis.\n */\n/**\n * @param {object} window The global window object.\n * @param {object} document jQuery wrapped document.\n * @param {function()} XHR XMLHttpRequest constructor.\n * @param {object} $log console.log or an object with the same interface.\n * @param {object} $sniffer $sniffer service\n */\nfunction Browser(window, document, $log, $sniffer) {\n  var self = this,\n      rawDocument = document[0],\n      location = window.location,\n      history = window.history,\n      setTimeout = window.setTimeout,\n      clearTimeout = window.clearTimeout,\n      pendingDeferIds = {};\n\n  self.isMock = false;\n\n  var outstandingRequestCount = 0;\n  var outstandingRequestCallbacks = [];\n\n  // TODO(vojta): remove this temporary api\n  self.$$completeOutstandingRequest = completeOutstandingRequest;\n  self.$$incOutstandingRequestCount = function() { outstandingRequestCount++; };\n\n  /**\n   * Executes the `fn` function(supports currying) and decrements the `outstandingRequestCallbacks`\n   * counter. If the counter reaches 0, all the `outstandingRequestCallbacks` are executed.\n   */\n  function completeOutstandingRequest(fn) {\n    try {\n      fn.apply(null, sliceArgs(arguments, 1));\n    } finally {\n      outstandingRequestCount--;\n      if (outstandingRequestCount === 0) {\n        while(outstandingRequestCallbacks.length) {\n          try {\n            outstandingRequestCallbacks.pop()();\n          } catch (e) {\n            $log.error(e);\n          }\n        }\n      }\n    }\n  }\n\n  /**\n   * @private\n   * Note: this method is used only by scenario runner\n   * TODO(vojta): prefix this method with $$ ?\n   * @param {function()} callback Function that will be called when no outstanding request\n   */\n  self.notifyWhenNoOutstandingRequests = function(callback) {\n    // force browser to execute all pollFns - this is needed so that cookies and other pollers fire\n    // at some deterministic time in respect to the test runner's actions. Leaving things up to the\n    // regular poller would result in flaky tests.\n    forEach(pollFns, function(pollFn){ pollFn(); });\n\n    if (outstandingRequestCount === 0) {\n      callback();\n    } else {\n      outstandingRequestCallbacks.push(callback);\n    }\n  };\n\n  //////////////////////////////////////////////////////////////\n  // Poll Watcher API\n  //////////////////////////////////////////////////////////////\n  var pollFns = [],\n      pollTimeout;\n\n  /**\n   * @name $browser#addPollFn\n   *\n   * @param {function()} fn Poll function to add\n   *\n   * @description\n   * Adds a function to the list of functions that poller periodically executes,\n   * and starts polling if not started yet.\n   *\n   * @returns {function()} the added function\n   */\n  self.addPollFn = function(fn) {\n    if (isUndefined(pollTimeout)) startPoller(100, setTimeout);\n    pollFns.push(fn);\n    return fn;\n  };\n\n  /**\n   * @param {number} interval How often should browser call poll functions (ms)\n   * @param {function()} setTimeout Reference to a real or fake `setTimeout` function.\n   *\n   * @description\n   * Configures the poller to run in the specified intervals, using the specified\n   * setTimeout fn and kicks it off.\n   */\n  function startPoller(interval, setTimeout) {\n    (function check() {\n      forEach(pollFns, function(pollFn){ pollFn(); });\n      pollTimeout = setTimeout(check, interval);\n    })();\n  }\n\n  //////////////////////////////////////////////////////////////\n  // URL API\n  //////////////////////////////////////////////////////////////\n\n  var lastBrowserUrl = location.href,\n      baseElement = document.find('base'),\n      newLocation = null;\n\n  /**\n   * @name $browser#url\n   *\n   * @description\n   * GETTER:\n   * Without any argument, this method just returns current value of location.href.\n   *\n   * SETTER:\n   * With at least one argument, this method sets url to new value.\n   * If html5 history api supported, pushState/replaceState is used, otherwise\n   * location.href/location.replace is used.\n   * Returns its own instance to allow chaining\n   *\n   * NOTE: this api is intended for use only by the $location service. Please use the\n   * {@link ng.$location $location service} to change url.\n   *\n   * @param {string} url New url (when used as setter)\n   * @param {boolean=} replace Should new url replace current history record ?\n   */\n  self.url = function(url, replace) {\n    // Android Browser BFCache causes location, history reference to become stale.\n    if (location !== window.location) location = window.location;\n    if (history !== window.history) history = window.history;\n\n    // setter\n    if (url) {\n      if (lastBrowserUrl == url) return;\n      lastBrowserUrl = url;\n      if ($sniffer.history) {\n        if (replace) history.replaceState(null, '', url);\n        else {\n          history.pushState(null, '', url);\n          // Crazy Opera Bug: http://my.opera.com/community/forums/topic.dml?id=1185462\n          baseElement.attr('href', baseElement.attr('href'));\n        }\n      } else {\n        newLocation = url;\n        if (replace) {\n          location.replace(url);\n        } else {\n          location.href = url;\n        }\n      }\n      return self;\n    // getter\n    } else {\n      // - newLocation is a workaround for an IE7-9 issue with location.replace and location.href\n      //   methods not updating location.href synchronously.\n      // - the replacement is a workaround for https://bugzilla.mozilla.org/show_bug.cgi?id=407172\n      return newLocation || location.href.replace(/%27/g,\"'\");\n    }\n  };\n\n  var urlChangeListeners = [],\n      urlChangeInit = false;\n\n  function fireUrlChange() {\n    newLocation = null;\n    if (lastBrowserUrl == self.url()) return;\n\n    lastBrowserUrl = self.url();\n    forEach(urlChangeListeners, function(listener) {\n      listener(self.url());\n    });\n  }\n\n  /**\n   * @name $browser#onUrlChange\n   *\n   * @description\n   * Register callback function that will be called, when url changes.\n   *\n   * It's only called when the url is changed from outside of angular:\n   * - user types different url into address bar\n   * - user clicks on history (forward/back) button\n   * - user clicks on a link\n   *\n   * It's not called when url is changed by $browser.url() method\n   *\n   * The listener gets called with new url as parameter.\n   *\n   * NOTE: this api is intended for use only by the $location service. Please use the\n   * {@link ng.$location $location service} to monitor url changes in angular apps.\n   *\n   * @param {function(string)} listener Listener function to be called when url changes.\n   * @return {function(string)} Returns the registered listener fn - handy if the fn is anonymous.\n   */\n  self.onUrlChange = function(callback) {\n    // TODO(vojta): refactor to use node's syntax for events\n    if (!urlChangeInit) {\n      // We listen on both (hashchange/popstate) when available, as some browsers (e.g. Opera)\n      // don't fire popstate when user change the address bar and don't fire hashchange when url\n      // changed by push/replaceState\n\n      // html5 history api - popstate event\n      if ($sniffer.history) jqLite(window).on('popstate', fireUrlChange);\n      // hashchange event\n      if ($sniffer.hashchange) jqLite(window).on('hashchange', fireUrlChange);\n      // polling\n      else self.addPollFn(fireUrlChange);\n\n      urlChangeInit = true;\n    }\n\n    urlChangeListeners.push(callback);\n    return callback;\n  };\n\n  //////////////////////////////////////////////////////////////\n  // Misc API\n  //////////////////////////////////////////////////////////////\n\n  /**\n   * @name $browser#baseHref\n   *\n   * @description\n   * Returns current <base href>\n   * (always relative - without domain)\n   *\n   * @returns {string} The current base href\n   */\n  self.baseHref = function() {\n    var href = baseElement.attr('href');\n    return href ? href.replace(/^(https?\\:)?\\/\\/[^\\/]*/, '') : '';\n  };\n\n  //////////////////////////////////////////////////////////////\n  // Cookies API\n  //////////////////////////////////////////////////////////////\n  var lastCookies = {};\n  var lastCookieString = '';\n  var cookiePath = self.baseHref();\n\n  /**\n   * @name $browser#cookies\n   *\n   * @param {string=} name Cookie name\n   * @param {string=} value Cookie value\n   *\n   * @description\n   * The cookies method provides a 'private' low level access to browser cookies.\n   * It is not meant to be used directly, use the $cookie service instead.\n   *\n   * The return values vary depending on the arguments that the method was called with as follows:\n   *\n   * - cookies() -> hash of all cookies, this is NOT a copy of the internal state, so do not modify\n   *   it\n   * - cookies(name, value) -> set name to value, if value is undefined delete the cookie\n   * - cookies(name) -> the same as (name, undefined) == DELETES (no one calls it right now that\n   *   way)\n   *\n   * @returns {Object} Hash of all cookies (if called without any parameter)\n   */\n  self.cookies = function(name, value) {\n    /* global escape: false, unescape: false */\n    var cookieLength, cookieArray, cookie, i, index;\n\n    if (name) {\n      if (value === undefined) {\n        rawDocument.cookie = escape(name) + \"=;path=\" + cookiePath +\n                                \";expires=Thu, 01 Jan 1970 00:00:00 GMT\";\n      } else {\n        if (isString(value)) {\n          cookieLength = (rawDocument.cookie = escape(name) + '=' + escape(value) +\n                                ';path=' + cookiePath).length + 1;\n\n          // per http://www.ietf.org/rfc/rfc2109.txt browser must allow at minimum:\n          // - 300 cookies\n          // - 20 cookies per unique domain\n          // - 4096 bytes per cookie\n          if (cookieLength > 4096) {\n            $log.warn(\"Cookie '\"+ name +\n              \"' possibly not set or overflowed because it was too large (\"+\n              cookieLength + \" > 4096 bytes)!\");\n          }\n        }\n      }\n    } else {\n      if (rawDocument.cookie !== lastCookieString) {\n        lastCookieString = rawDocument.cookie;\n        cookieArray = lastCookieString.split(\"; \");\n        lastCookies = {};\n\n        for (i = 0; i < cookieArray.length; i++) {\n          cookie = cookieArray[i];\n          index = cookie.indexOf('=');\n          if (index > 0) { //ignore nameless cookies\n            name = unescape(cookie.substring(0, index));\n            // the first value that is seen for a cookie is the most\n            // specific one.  values for the same cookie name that\n            // follow are for less specific paths.\n            if (lastCookies[name] === undefined) {\n              lastCookies[name] = unescape(cookie.substring(index + 1));\n            }\n          }\n        }\n      }\n      return lastCookies;\n    }\n  };\n\n\n  /**\n   * @name $browser#defer\n   * @param {function()} fn A function, who's execution should be deferred.\n   * @param {number=} [delay=0] of milliseconds to defer the function execution.\n   * @returns {*} DeferId that can be used to cancel the task via `$browser.defer.cancel()`.\n   *\n   * @description\n   * Executes a fn asynchronously via `setTimeout(fn, delay)`.\n   *\n   * Unlike when calling `setTimeout` directly, in test this function is mocked and instead of using\n   * `setTimeout` in tests, the fns are queued in an array, which can be programmatically flushed\n   * via `$browser.defer.flush()`.\n   *\n   */\n  self.defer = function(fn, delay) {\n    var timeoutId;\n    outstandingRequestCount++;\n    timeoutId = setTimeout(function() {\n      delete pendingDeferIds[timeoutId];\n      completeOutstandingRequest(fn);\n    }, delay || 0);\n    pendingDeferIds[timeoutId] = true;\n    return timeoutId;\n  };\n\n\n  /**\n   * @name $browser#defer.cancel\n   *\n   * @description\n   * Cancels a deferred task identified with `deferId`.\n   *\n   * @param {*} deferId Token returned by the `$browser.defer` function.\n   * @returns {boolean} Returns `true` if the task hasn't executed yet and was successfully\n   *                    canceled.\n   */\n  self.defer.cancel = function(deferId) {\n    if (pendingDeferIds[deferId]) {\n      delete pendingDeferIds[deferId];\n      clearTimeout(deferId);\n      completeOutstandingRequest(noop);\n      return true;\n    }\n    return false;\n  };\n\n}\n\nfunction $BrowserProvider(){\n  this.$get = ['$window', '$log', '$sniffer', '$document',\n      function( $window,   $log,   $sniffer,   $document){\n        return new Browser($window, $document, $log, $sniffer);\n      }];\n}\n\n/**\n * @ngdoc service\n * @name $cacheFactory\n *\n * @description\n * Factory that constructs {@link $cacheFactory.Cache Cache} objects and gives access to\n * them.\n *\n * ```js\n *\n *  var cache = $cacheFactory('cacheId');\n *  expect($cacheFactory.get('cacheId')).toBe(cache);\n *  expect($cacheFactory.get('noSuchCacheId')).not.toBeDefined();\n *\n *  cache.put(\"key\", \"value\");\n *  cache.put(\"another key\", \"another value\");\n *\n *  // We've specified no options on creation\n *  expect(cache.info()).toEqual({id: 'cacheId', size: 2});\n *\n * ```\n *\n *\n * @param {string} cacheId Name or id of the newly created cache.\n * @param {object=} options Options object that specifies the cache behavior. Properties:\n *\n *   - `{number=}` `capacity` — turns the cache into LRU cache.\n *\n * @returns {object} Newly created cache object with the following set of methods:\n *\n * - `{object}` `info()` — Returns id, size, and options of cache.\n * - `{{*}}` `put({string} key, {*} value)` — Puts a new key-value pair into the cache and returns\n *   it.\n * - `{{*}}` `get({string} key)` — Returns cached value for `key` or undefined for cache miss.\n * - `{void}` `remove({string} key)` — Removes a key-value pair from the cache.\n * - `{void}` `removeAll()` — Removes all cached values.\n * - `{void}` `destroy()` — Removes references to this cache from $cacheFactory.\n *\n * @example\n   <example module=\"cacheExampleApp\">\n     <file name=\"index.html\">\n       <div ng-controller=\"CacheController\">\n         <input ng-model=\"newCacheKey\" placeholder=\"Key\">\n         <input ng-model=\"newCacheValue\" placeholder=\"Value\">\n         <button ng-click=\"put(newCacheKey, newCacheValue)\">Cache</button>\n\n         <p ng-if=\"keys.length\">Cached Values</p>\n         <div ng-repeat=\"key in keys\">\n           <span ng-bind=\"key\"></span>\n           <span>: </span>\n           <b ng-bind=\"cache.get(key)\"></b>\n         </div>\n\n         <p>Cache Info</p>\n         <div ng-repeat=\"(key, value) in cache.info()\">\n           <span ng-bind=\"key\"></span>\n           <span>: </span>\n           <b ng-bind=\"value\"></b>\n         </div>\n       </div>\n     </file>\n     <file name=\"script.js\">\n       angular.module('cacheExampleApp', []).\n         controller('CacheController', ['$scope', '$cacheFactory', function($scope, $cacheFactory) {\n           $scope.keys = [];\n           $scope.cache = $cacheFactory('cacheId');\n           $scope.put = function(key, value) {\n             $scope.cache.put(key, value);\n             $scope.keys.push(key);\n           };\n         }]);\n     </file>\n     <file name=\"style.css\">\n       p {\n         margin: 10px 0 3px;\n       }\n     </file>\n   </example>\n */\nfunction $CacheFactoryProvider() {\n\n  this.$get = function() {\n    var caches = {};\n\n    function cacheFactory(cacheId, options) {\n      if (cacheId in caches) {\n        throw minErr('$cacheFactory')('iid', \"CacheId '{0}' is already taken!\", cacheId);\n      }\n\n      var size = 0,\n          stats = extend({}, options, {id: cacheId}),\n          data = {},\n          capacity = (options && options.capacity) || Number.MAX_VALUE,\n          lruHash = {},\n          freshEnd = null,\n          staleEnd = null;\n\n      /**\n       * @ngdoc type\n       * @name $cacheFactory.Cache\n       *\n       * @description\n       * A cache object used to store and retrieve data, primarily used by\n       * {@link $http $http} and the {@link ng.directive:script script} directive to cache\n       * templates and other data.\n       *\n       * ```js\n       *  angular.module('superCache')\n       *    .factory('superCache', ['$cacheFactory', function($cacheFactory) {\n       *      return $cacheFactory('super-cache');\n       *    }]);\n       * ```\n       *\n       * Example test:\n       *\n       * ```js\n       *  it('should behave like a cache', inject(function(superCache) {\n       *    superCache.put('key', 'value');\n       *    superCache.put('another key', 'another value');\n       *\n       *    expect(superCache.info()).toEqual({\n       *      id: 'super-cache',\n       *      size: 2\n       *    });\n       *\n       *    superCache.remove('another key');\n       *    expect(superCache.get('another key')).toBeUndefined();\n       *\n       *    superCache.removeAll();\n       *    expect(superCache.info()).toEqual({\n       *      id: 'super-cache',\n       *      size: 0\n       *    });\n       *  }));\n       * ```\n       */\n      return caches[cacheId] = {\n\n        /**\n         * @ngdoc method\n         * @name $cacheFactory.Cache#put\n         * @kind function\n         *\n         * @description\n         * Inserts a named entry into the {@link $cacheFactory.Cache Cache} object to be\n         * retrieved later, and incrementing the size of the cache if the key was not already\n         * present in the cache. If behaving like an LRU cache, it will also remove stale\n         * entries from the set.\n         *\n         * It will not insert undefined values into the cache.\n         *\n         * @param {string} key the key under which the cached data is stored.\n         * @param {*} value the value to store alongside the key. If it is undefined, the key\n         *    will not be stored.\n         * @returns {*} the value stored.\n         */\n        put: function(key, value) {\n          if (capacity < Number.MAX_VALUE) {\n            var lruEntry = lruHash[key] || (lruHash[key] = {key: key});\n\n            refresh(lruEntry);\n          }\n\n          if (isUndefined(value)) return;\n          if (!(key in data)) size++;\n          data[key] = value;\n\n          if (size > capacity) {\n            this.remove(staleEnd.key);\n          }\n\n          return value;\n        },\n\n        /**\n         * @ngdoc method\n         * @name $cacheFactory.Cache#get\n         * @kind function\n         *\n         * @description\n         * Retrieves named data stored in the {@link $cacheFactory.Cache Cache} object.\n         *\n         * @param {string} key the key of the data to be retrieved\n         * @returns {*} the value stored.\n         */\n        get: function(key) {\n          if (capacity < Number.MAX_VALUE) {\n            var lruEntry = lruHash[key];\n\n            if (!lruEntry) return;\n\n            refresh(lruEntry);\n          }\n\n          return data[key];\n        },\n\n\n        /**\n         * @ngdoc method\n         * @name $cacheFactory.Cache#remove\n         * @kind function\n         *\n         * @description\n         * Removes an entry from the {@link $cacheFactory.Cache Cache} object.\n         *\n         * @param {string} key the key of the entry to be removed\n         */\n        remove: function(key) {\n          if (capacity < Number.MAX_VALUE) {\n            var lruEntry = lruHash[key];\n\n            if (!lruEntry) return;\n\n            if (lruEntry == freshEnd) freshEnd = lruEntry.p;\n            if (lruEntry == staleEnd) staleEnd = lruEntry.n;\n            link(lruEntry.n,lruEntry.p);\n\n            delete lruHash[key];\n          }\n\n          delete data[key];\n          size--;\n        },\n\n\n        /**\n         * @ngdoc method\n         * @name $cacheFactory.Cache#removeAll\n         * @kind function\n         *\n         * @description\n         * Clears the cache object of any entries.\n         */\n        removeAll: function() {\n          data = {};\n          size = 0;\n          lruHash = {};\n          freshEnd = staleEnd = null;\n        },\n\n\n        /**\n         * @ngdoc method\n         * @name $cacheFactory.Cache#destroy\n         * @kind function\n         *\n         * @description\n         * Destroys the {@link $cacheFactory.Cache Cache} object entirely,\n         * removing it from the {@link $cacheFactory $cacheFactory} set.\n         */\n        destroy: function() {\n          data = null;\n          stats = null;\n          lruHash = null;\n          delete caches[cacheId];\n        },\n\n\n        /**\n         * @ngdoc method\n         * @name $cacheFactory.Cache#info\n         * @kind function\n         *\n         * @description\n         * Retrieve information regarding a particular {@link $cacheFactory.Cache Cache}.\n         *\n         * @returns {object} an object with the following properties:\n         *   <ul>\n         *     <li>**id**: the id of the cache instance</li>\n         *     <li>**size**: the number of entries kept in the cache instance</li>\n         *     <li>**...**: any additional properties from the options object when creating the\n         *       cache.</li>\n         *   </ul>\n         */\n        info: function() {\n          return extend({}, stats, {size: size});\n        }\n      };\n\n\n      /**\n       * makes the `entry` the freshEnd of the LRU linked list\n       */\n      function refresh(entry) {\n        if (entry != freshEnd) {\n          if (!staleEnd) {\n            staleEnd = entry;\n          } else if (staleEnd == entry) {\n            staleEnd = entry.n;\n          }\n\n          link(entry.n, entry.p);\n          link(entry, freshEnd);\n          freshEnd = entry;\n          freshEnd.n = null;\n        }\n      }\n\n\n      /**\n       * bidirectionally links two entries of the LRU linked list\n       */\n      function link(nextEntry, prevEntry) {\n        if (nextEntry != prevEntry) {\n          if (nextEntry) nextEntry.p = prevEntry; //p stands for previous, 'prev' didn't minify\n          if (prevEntry) prevEntry.n = nextEntry; //n stands for next, 'next' didn't minify\n        }\n      }\n    }\n\n\n  /**\n   * @ngdoc method\n   * @name $cacheFactory#info\n   *\n   * @description\n   * Get information about all the caches that have been created\n   *\n   * @returns {Object} - key-value map of `cacheId` to the result of calling `cache#info`\n   */\n    cacheFactory.info = function() {\n      var info = {};\n      forEach(caches, function(cache, cacheId) {\n        info[cacheId] = cache.info();\n      });\n      return info;\n    };\n\n\n  /**\n   * @ngdoc method\n   * @name $cacheFactory#get\n   *\n   * @description\n   * Get access to a cache object by the `cacheId` used when it was created.\n   *\n   * @param {string} cacheId Name or id of a cache to access.\n   * @returns {object} Cache object identified by the cacheId or undefined if no such cache.\n   */\n    cacheFactory.get = function(cacheId) {\n      return caches[cacheId];\n    };\n\n\n    return cacheFactory;\n  };\n}\n\n/**\n * @ngdoc service\n * @name $templateCache\n *\n * @description\n * The first time a template is used, it is loaded in the template cache for quick retrieval. You\n * can load templates directly into the cache in a `script` tag, or by consuming the\n * `$templateCache` service directly.\n *\n * Adding via the `script` tag:\n *\n * ```html\n *   <script type=\"text/ng-template\" id=\"templateId.html\">\n *     <p>This is the content of the template</p>\n *   </script>\n * ```\n *\n * **Note:** the `script` tag containing the template does not need to be included in the `head` of\n * the document, but it must be below the `ng-app` definition.\n *\n * Adding via the $templateCache service:\n *\n * ```js\n * var myApp = angular.module('myApp', []);\n * myApp.run(function($templateCache) {\n *   $templateCache.put('templateId.html', 'This is the content of the template');\n * });\n * ```\n *\n * To retrieve the template later, simply use it in your HTML:\n * ```html\n * <div ng-include=\" 'templateId.html' \"></div>\n * ```\n *\n * or get it via Javascript:\n * ```js\n * $templateCache.get('templateId.html')\n * ```\n *\n * See {@link ng.$cacheFactory $cacheFactory}.\n *\n */\nfunction $TemplateCacheProvider() {\n  this.$get = ['$cacheFactory', function($cacheFactory) {\n    return $cacheFactory('templates');\n  }];\n}\n\n/* ! VARIABLE/FUNCTION NAMING CONVENTIONS THAT APPLY TO THIS FILE!\n *\n * DOM-related variables:\n *\n * - \"node\" - DOM Node\n * - \"element\" - DOM Element or Node\n * - \"$node\" or \"$element\" - jqLite-wrapped node or element\n *\n *\n * Compiler related stuff:\n *\n * - \"linkFn\" - linking fn of a single directive\n * - \"nodeLinkFn\" - function that aggregates all linking fns for a particular node\n * - \"childLinkFn\" -  function that aggregates all linking fns for child nodes of a particular node\n * - \"compositeLinkFn\" - function that aggregates all linking fns for a compilation root (nodeList)\n */\n\n\n/**\n * @ngdoc service\n * @name $compile\n * @kind function\n *\n * @description\n * Compiles an HTML string or DOM into a template and produces a template function, which\n * can then be used to link {@link ng.$rootScope.Scope `scope`} and the template together.\n *\n * The compilation is a process of walking the DOM tree and matching DOM elements to\n * {@link ng.$compileProvider#directive directives}.\n *\n * <div class=\"alert alert-warning\">\n * **Note:** This document is an in-depth reference of all directive options.\n * For a gentle introduction to directives with examples of common use cases,\n * see the {@link guide/directive directive guide}.\n * </div>\n *\n * ## Comprehensive Directive API\n *\n * There are many different options for a directive.\n *\n * The difference resides in the return value of the factory function.\n * You can either return a \"Directive Definition Object\" (see below) that defines the directive properties,\n * or just the `postLink` function (all other properties will have the default values).\n *\n * <div class=\"alert alert-success\">\n * **Best Practice:** It's recommended to use the \"directive definition object\" form.\n * </div>\n *\n * Here's an example directive declared with a Directive Definition Object:\n *\n * ```js\n *   var myModule = angular.module(...);\n *\n *   myModule.directive('directiveName', function factory(injectables) {\n *     var directiveDefinitionObject = {\n *       priority: 0,\n *       template: '<div></div>', // or // function(tElement, tAttrs) { ... },\n *       // or\n *       // templateUrl: 'directive.html', // or // function(tElement, tAttrs) { ... },\n *       transclude: false,\n *       restrict: 'A',\n *       scope: false,\n *       controller: function($scope, $element, $attrs, $transclude, otherInjectables) { ... },\n *       controllerAs: 'stringAlias',\n *       require: 'siblingDirectiveName', // or // ['^parentDirectiveName', '?optionalDirectiveName', '?^optionalParent'],\n *       compile: function compile(tElement, tAttrs, transclude) {\n *         return {\n *           pre: function preLink(scope, iElement, iAttrs, controller) { ... },\n *           post: function postLink(scope, iElement, iAttrs, controller) { ... }\n *         }\n *         // or\n *         // return function postLink( ... ) { ... }\n *       },\n *       // or\n *       // link: {\n *       //  pre: function preLink(scope, iElement, iAttrs, controller) { ... },\n *       //  post: function postLink(scope, iElement, iAttrs, controller) { ... }\n *       // }\n *       // or\n *       // link: function postLink( ... ) { ... }\n *     };\n *     return directiveDefinitionObject;\n *   });\n * ```\n *\n * <div class=\"alert alert-warning\">\n * **Note:** Any unspecified options will use the default value. You can see the default values below.\n * </div>\n *\n * Therefore the above can be simplified as:\n *\n * ```js\n *   var myModule = angular.module(...);\n *\n *   myModule.directive('directiveName', function factory(injectables) {\n *     var directiveDefinitionObject = {\n *       link: function postLink(scope, iElement, iAttrs) { ... }\n *     };\n *     return directiveDefinitionObject;\n *     // or\n *     // return function postLink(scope, iElement, iAttrs) { ... }\n *   });\n * ```\n *\n *\n *\n * ### Directive Definition Object\n *\n * The directive definition object provides instructions to the {@link ng.$compile\n * compiler}. The attributes are:\n *\n * #### `priority`\n * When there are multiple directives defined on a single DOM element, sometimes it\n * is necessary to specify the order in which the directives are applied. The `priority` is used\n * to sort the directives before their `compile` functions get called. Priority is defined as a\n * number. Directives with greater numerical `priority` are compiled first. Pre-link functions\n * are also run in priority order, but post-link functions are run in reverse order. The order\n * of directives with the same priority is undefined. The default priority is `0`.\n *\n * #### `terminal`\n * If set to true then the current `priority` will be the last set of directives\n * which will execute (any directives at the current priority will still execute\n * as the order of execution on same `priority` is undefined).\n *\n * #### `scope`\n * **If set to `true`,** then a new scope will be created for this directive. If multiple directives on the\n * same element request a new scope, only one new scope is created. The new scope rule does not\n * apply for the root of the template since the root of the template always gets a new scope.\n *\n * **If set to `{}` (object hash),** then a new \"isolate\" scope is created. The 'isolate' scope differs from\n * normal scope in that it does not prototypically inherit from the parent scope. This is useful\n * when creating reusable components, which should not accidentally read or modify data in the\n * parent scope.\n *\n * The 'isolate' scope takes an object hash which defines a set of local scope properties\n * derived from the parent scope. These local properties are useful for aliasing values for\n * templates. Locals definition is a hash of local scope property to its source:\n *\n * * `@` or `@attr` - bind a local scope property to the value of DOM attribute. The result is\n *   always a string since DOM attributes are strings. If no `attr` name is specified  then the\n *   attribute name is assumed to be the same as the local name.\n *   Given `<widget my-attr=\"hello {{name}}\">` and widget definition\n *   of `scope: { localName:'@myAttr' }`, then widget scope property `localName` will reflect\n *   the interpolated value of `hello {{name}}`. As the `name` attribute changes so will the\n *   `localName` property on the widget scope. The `name` is read from the parent scope (not\n *   component scope).\n *\n * * `=` or `=attr` - set up bi-directional binding between a local scope property and the\n *   parent scope property of name defined via the value of the `attr` attribute. If no `attr`\n *   name is specified then the attribute name is assumed to be the same as the local name.\n *   Given `<widget my-attr=\"parentModel\">` and widget definition of\n *   `scope: { localModel:'=myAttr' }`, then widget scope property `localModel` will reflect the\n *   value of `parentModel` on the parent scope. Any changes to `parentModel` will be reflected\n *   in `localModel` and any changes in `localModel` will reflect in `parentModel`. If the parent\n *   scope property doesn't exist, it will throw a NON_ASSIGNABLE_MODEL_EXPRESSION exception. You\n *   can avoid this behavior using `=?` or `=?attr` in order to flag the property as optional.\n *\n * * `&` or `&attr` - provides a way to execute an expression in the context of the parent scope.\n *   If no `attr` name is specified then the attribute name is assumed to be the same as the\n *   local name. Given `<widget my-attr=\"count = count + value\">` and widget definition of\n *   `scope: { localFn:'&myAttr' }`, then isolate scope property `localFn` will point to\n *   a function wrapper for the `count = count + value` expression. Often it's desirable to\n *   pass data from the isolated scope via an expression and to the parent scope, this can be\n *   done by passing a map of local variable names and values into the expression wrapper fn.\n *   For example, if the expression is `increment(amount)` then we can specify the amount value\n *   by calling the `localFn` as `localFn({amount: 22})`.\n *\n *\n *\n * #### `controller`\n * Controller constructor function. The controller is instantiated before the\n * pre-linking phase and it is shared with other directives (see\n * `require` attribute). This allows the directives to communicate with each other and augment\n * each other's behavior. The controller is injectable (and supports bracket notation) with the following locals:\n *\n * * `$scope` - Current scope associated with the element\n * * `$element` - Current element\n * * `$attrs` - Current attributes object for the element\n * * `$transclude` - A transclude linking function pre-bound to the correct transclusion scope.\n *    The scope can be overridden by an optional first argument.\n *   `function([scope], cloneLinkingFn)`.\n *\n *\n * #### `require`\n * Require another directive and inject its controller as the fourth argument to the linking function. The\n * `require` takes a string name (or array of strings) of the directive(s) to pass in. If an array is used, the\n * injected argument will be an array in corresponding order. If no such directive can be\n * found, or if the directive does not have a controller, then an error is raised. The name can be prefixed with:\n *\n * * (no prefix) - Locate the required controller on the current element. Throw an error if not found.\n * * `?` - Attempt to locate the required controller or pass `null` to the `link` fn if not found.\n * * `^` - Locate the required controller by searching the element's parents. Throw an error if not found.\n * * `?^` - Attempt to locate the required controller by searching the element's parents or pass `null` to the\n *   `link` fn if not found.\n *\n *\n * #### `controllerAs`\n * Controller alias at the directive scope. An alias for the controller so it\n * can be referenced at the directive template. The directive needs to define a scope for this\n * configuration to be used. Useful in the case when directive is used as component.\n *\n *\n * #### `restrict`\n * String of subset of `EACM` which restricts the directive to a specific directive\n * declaration style. If omitted, the default (attributes only) is used.\n *\n * * `E` - Element name: `<my-directive></my-directive>`\n * * `A` - Attribute (default): `<div my-directive=\"exp\"></div>`\n * * `C` - Class: `<div class=\"my-directive: exp;\"></div>`\n * * `M` - Comment: `<!-- directive: my-directive exp -->`\n *\n *\n * #### `template`\n * replace the current element with the contents of the HTML. The replacement process\n * migrates all of the attributes / classes from the old element to the new one. See the\n * {@link guide/directive#creating-custom-directives_creating-directives_template-expanding-directive\n * Directives Guide} for an example.\n *\n * You can specify `template` as a string representing the template or as a function which takes\n * two arguments `tElement` and `tAttrs` (described in the `compile` function api below) and\n * returns a string value representing the template.\n *\n *\n * #### `templateUrl`\n * Same as `template` but the template is loaded from the specified URL. Because\n * the template loading is asynchronous the compilation/linking is suspended until the template\n * is loaded.\n *\n * You can specify `templateUrl` as a string representing the URL or as a function which takes two\n * arguments `tElement` and `tAttrs` (described in the `compile` function api below) and returns\n * a string value representing the url.  In either case, the template URL is passed through {@link\n * api/ng.$sce#getTrustedResourceUrl $sce.getTrustedResourceUrl}.\n *\n *\n * #### `replace` ([*DEPRECATED*!], will be removed in next major release)\n * specify where the template should be inserted. Defaults to `false`.\n *\n * * `true` - the template will replace the current element.\n * * `false` - the template will replace the contents of the current element.\n *\n *\n * #### `transclude`\n * compile the content of the element and make it available to the directive.\n * Typically used with {@link ng.directive:ngTransclude\n * ngTransclude}. The advantage of transclusion is that the linking function receives a\n * transclusion function which is pre-bound to the correct scope. In a typical setup the widget\n * creates an `isolate` scope, but the transclusion is not a child, but a sibling of the `isolate`\n * scope. This makes it possible for the widget to have private state, and the transclusion to\n * be bound to the parent (pre-`isolate`) scope.\n *\n * * `true` - transclude the content of the directive.\n * * `'element'` - transclude the whole element including any directives defined at lower priority.\n *\n *\n * #### `compile`\n *\n * ```js\n *   function compile(tElement, tAttrs, transclude) { ... }\n * ```\n *\n * The compile function deals with transforming the template DOM. Since most directives do not do\n * template transformation, it is not used often. The compile function takes the following arguments:\n *\n *   * `tElement` - template element - The element where the directive has been declared. It is\n *     safe to do template transformation on the element and child elements only.\n *\n *   * `tAttrs` - template attributes - Normalized list of attributes declared on this element shared\n *     between all directive compile functions.\n *\n *   * `transclude` -  [*DEPRECATED*!] A transclude linking function: `function(scope, cloneLinkingFn)`\n *\n * <div class=\"alert alert-warning\">\n * **Note:** The template instance and the link instance may be different objects if the template has\n * been cloned. For this reason it is **not** safe to do anything other than DOM transformations that\n * apply to all cloned DOM nodes within the compile function. Specifically, DOM listener registration\n * should be done in a linking function rather than in a compile function.\n * </div>\n\n * <div class=\"alert alert-warning\">\n * **Note:** The compile function cannot handle directives that recursively use themselves in their\n * own templates or compile functions. Compiling these directives results in an infinite loop and a\n * stack overflow errors.\n *\n * This can be avoided by manually using $compile in the postLink function to imperatively compile\n * a directive's template instead of relying on automatic template compilation via `template` or\n * `templateUrl` declaration or manual compilation inside the compile function.\n * </div>\n *\n * <div class=\"alert alert-error\">\n * **Note:** The `transclude` function that is passed to the compile function is deprecated, as it\n *   e.g. does not know about the right outer scope. Please use the transclude function that is passed\n *   to the link function instead.\n * </div>\n\n * A compile function can have a return value which can be either a function or an object.\n *\n * * returning a (post-link) function - is equivalent to registering the linking function via the\n *   `link` property of the config object when the compile function is empty.\n *\n * * returning an object with function(s) registered via `pre` and `post` properties - allows you to\n *   control when a linking function should be called during the linking phase. See info about\n *   pre-linking and post-linking functions below.\n *\n *\n * #### `link`\n * This property is used only if the `compile` property is not defined.\n *\n * ```js\n *   function link(scope, iElement, iAttrs, controller, transcludeFn) { ... }\n * ```\n *\n * The link function is responsible for registering DOM listeners as well as updating the DOM. It is\n * executed after the template has been cloned. This is where most of the directive logic will be\n * put.\n *\n *   * `scope` - {@link ng.$rootScope.Scope Scope} - The scope to be used by the\n *     directive for registering {@link ng.$rootScope.Scope#$watch watches}.\n *\n *   * `iElement` - instance element - The element where the directive is to be used. It is safe to\n *     manipulate the children of the element only in `postLink` function since the children have\n *     already been linked.\n *\n *   * `iAttrs` - instance attributes - Normalized list of attributes declared on this element shared\n *     between all directive linking functions.\n *\n *   * `controller` - a controller instance - A controller instance if at least one directive on the\n *     element defines a controller. The controller is shared among all the directives, which allows\n *     the directives to use the controllers as a communication channel.\n *\n *   * `transcludeFn` - A transclude linking function pre-bound to the correct transclusion scope.\n *     The scope can be overridden by an optional first argument. This is the same as the `$transclude`\n *     parameter of directive controllers.\n *     `function([scope], cloneLinkingFn)`.\n *\n *\n * #### Pre-linking function\n *\n * Executed before the child elements are linked. Not safe to do DOM transformation since the\n * compiler linking function will fail to locate the correct elements for linking.\n *\n * #### Post-linking function\n *\n * Executed after the child elements are linked. It is safe to do DOM transformation in the post-linking function.\n *\n * <a name=\"Attributes\"></a>\n * ### Attributes\n *\n * The {@link ng.$compile.directive.Attributes Attributes} object - passed as a parameter in the\n * `link()` or `compile()` functions. It has a variety of uses.\n *\n * accessing *Normalized attribute names:*\n * Directives like 'ngBind' can be expressed in many ways: 'ng:bind', `data-ng-bind`, or 'x-ng-bind'.\n * the attributes object allows for normalized access to\n *   the attributes.\n *\n * * *Directive inter-communication:* All directives share the same instance of the attributes\n *   object which allows the directives to use the attributes object as inter directive\n *   communication.\n *\n * * *Supports interpolation:* Interpolation attributes are assigned to the attribute object\n *   allowing other directives to read the interpolated value.\n *\n * * *Observing interpolated attributes:* Use `$observe` to observe the value changes of attributes\n *   that contain interpolation (e.g. `src=\"{{bar}}\"`). Not only is this very efficient but it's also\n *   the only way to easily get the actual value because during the linking phase the interpolation\n *   hasn't been evaluated yet and so the value is at this time set to `undefined`.\n *\n * ```js\n * function linkingFn(scope, elm, attrs, ctrl) {\n *   // get the attribute value\n *   console.log(attrs.ngModel);\n *\n *   // change the attribute\n *   attrs.$set('ngModel', 'new value');\n *\n *   // observe changes to interpolated attribute\n *   attrs.$observe('ngModel', function(value) {\n *     console.log('ngModel has changed value to ' + value);\n *   });\n * }\n * ```\n *\n * Below is an example using `$compileProvider`.\n *\n * <div class=\"alert alert-warning\">\n * **Note**: Typically directives are registered with `module.directive`. The example below is\n * to illustrate how `$compile` works.\n * </div>\n *\n <example module=\"compile\">\n   <file name=\"index.html\">\n    <script>\n      angular.module('compile', [], function($compileProvider) {\n        // configure new 'compile' directive by passing a directive\n        // factory function. The factory function injects the '$compile'\n        $compileProvider.directive('compile', function($compile) {\n          // directive factory creates a link function\n          return function(scope, element, attrs) {\n            scope.$watch(\n              function(scope) {\n                 // watch the 'compile' expression for changes\n                return scope.$eval(attrs.compile);\n              },\n              function(value) {\n                // when the 'compile' expression changes\n                // assign it into the current DOM\n                element.html(value);\n\n                // compile the new DOM and link it to the current\n                // scope.\n                // NOTE: we only compile .childNodes so that\n                // we don't get into infinite loop compiling ourselves\n                $compile(element.contents())(scope);\n              }\n            );\n          };\n        })\n      });\n\n      function Ctrl($scope) {\n        $scope.name = 'Angular';\n        $scope.html = 'Hello {{name}}';\n      }\n    </script>\n    <div ng-controller=\"Ctrl\">\n      <input ng-model=\"name\"> <br>\n      <textarea ng-model=\"html\"></textarea> <br>\n      <div compile=\"html\"></div>\n    </div>\n   </file>\n   <file name=\"protractor.js\" type=\"protractor\">\n     it('should auto compile', function() {\n       var textarea = $('textarea');\n       var output = $('div[compile]');\n       // The initial state reads 'Hello Angular'.\n       expect(output.getText()).toBe('Hello Angular');\n       textarea.clear();\n       textarea.sendKeys('{{name}}!');\n       expect(output.getText()).toBe('Angular!');\n     });\n   </file>\n </example>\n\n *\n *\n * @param {string|DOMElement} element Element or HTML string to compile into a template function.\n * @param {function(angular.Scope, cloneAttachFn=)} transclude function available to directives.\n * @param {number} maxPriority only apply directives lower than given priority (Only effects the\n *                 root element(s), not their children)\n * @returns {function(scope, cloneAttachFn=)} a link function which is used to bind template\n * (a DOM element/tree) to a scope. Where:\n *\n *  * `scope` - A {@link ng.$rootScope.Scope Scope} to bind to.\n *  * `cloneAttachFn` - If `cloneAttachFn` is provided, then the link function will clone the\n *  `template` and call the `cloneAttachFn` function allowing the caller to attach the\n *  cloned elements to the DOM document at the appropriate place. The `cloneAttachFn` is\n *  called as: <br> `cloneAttachFn(clonedElement, scope)` where:\n *\n *      * `clonedElement` - is a clone of the original `element` passed into the compiler.\n *      * `scope` - is the current scope with which the linking function is working with.\n *\n * Calling the linking function returns the element of the template. It is either the original\n * element passed in, or the clone of the element if the `cloneAttachFn` is provided.\n *\n * After linking the view is not updated until after a call to $digest which typically is done by\n * Angular automatically.\n *\n * If you need access to the bound view, there are two ways to do it:\n *\n * - If you are not asking the linking function to clone the template, create the DOM element(s)\n *   before you send them to the compiler and keep this reference around.\n *   ```js\n *     var element = $compile('<p>{{total}}</p>')(scope);\n *   ```\n *\n * - if on the other hand, you need the element to be cloned, the view reference from the original\n *   example would not point to the clone, but rather to the original template that was cloned. In\n *   this case, you can access the clone via the cloneAttachFn:\n *   ```js\n *     var templateElement = angular.element('<p>{{total}}</p>'),\n *         scope = ....;\n *\n *     var clonedElement = $compile(templateElement)(scope, function(clonedElement, scope) {\n *       //attach the clone to DOM document at the right place\n *     });\n *\n *     //now we have reference to the cloned DOM via `clonedElement`\n *   ```\n *\n *\n * For information on how the compiler works, see the\n * {@link guide/compiler Angular HTML Compiler} section of the Developer Guide.\n */\n\nvar $compileMinErr = minErr('$compile');\n\n/**\n * @ngdoc provider\n * @name $compileProvider\n * @kind function\n *\n * @description\n */\n$CompileProvider.$inject = ['$provide', '$$sanitizeUriProvider'];\nfunction $CompileProvider($provide, $$sanitizeUriProvider) {\n  var hasDirectives = {},\n      Suffix = 'Directive',\n      COMMENT_DIRECTIVE_REGEXP = /^\\s*directive\\:\\s*([\\d\\w_\\-]+)\\s+(.*)$/,\n      CLASS_DIRECTIVE_REGEXP = /(([\\d\\w_\\-]+)(?:\\:([^;]+))?;?)/;\n\n  // Ref: http://developers.whatwg.org/webappapis.html#event-handler-idl-attributes\n  // The assumption is that future DOM event attribute names will begin with\n  // 'on' and be composed of only English letters.\n  var EVENT_HANDLER_ATTR_REGEXP = /^(on[a-z]+|formaction)$/;\n\n  /**\n   * @ngdoc method\n   * @name $compileProvider#directive\n   * @kind function\n   *\n   * @description\n   * Register a new directive with the compiler.\n   *\n   * @param {string|Object} name Name of the directive in camel-case (i.e. <code>ngBind</code> which\n   *    will match as <code>ng-bind</code>), or an object map of directives where the keys are the\n   *    names and the values are the factories.\n   * @param {Function|Array} directiveFactory An injectable directive factory function. See\n   *    {@link guide/directive} for more info.\n   * @returns {ng.$compileProvider} Self for chaining.\n   */\n   this.directive = function registerDirective(name, directiveFactory) {\n    assertNotHasOwnProperty(name, 'directive');\n    if (isString(name)) {\n      assertArg(directiveFactory, 'directiveFactory');\n      if (!hasDirectives.hasOwnProperty(name)) {\n        hasDirectives[name] = [];\n        $provide.factory(name + Suffix, ['$injector', '$exceptionHandler',\n          function($injector, $exceptionHandler) {\n            var directives = [];\n            forEach(hasDirectives[name], function(directiveFactory, index) {\n              try {\n                var directive = $injector.invoke(directiveFactory);\n                if (isFunction(directive)) {\n                  directive = { compile: valueFn(directive) };\n                } else if (!directive.compile && directive.link) {\n                  directive.compile = valueFn(directive.link);\n                }\n                directive.priority = directive.priority || 0;\n                directive.index = index;\n                directive.name = directive.name || name;\n                directive.require = directive.require || (directive.controller && directive.name);\n                directive.restrict = directive.restrict || 'A';\n                directives.push(directive);\n              } catch (e) {\n                $exceptionHandler(e);\n              }\n            });\n            return directives;\n          }]);\n      }\n      hasDirectives[name].push(directiveFactory);\n    } else {\n      forEach(name, reverseParams(registerDirective));\n    }\n    return this;\n  };\n\n\n  /**\n   * @ngdoc method\n   * @name $compileProvider#aHrefSanitizationWhitelist\n   * @kind function\n   *\n   * @description\n   * Retrieves or overrides the default regular expression that is used for whitelisting of safe\n   * urls during a[href] sanitization.\n   *\n   * The sanitization is a security measure aimed at prevent XSS attacks via html links.\n   *\n   * Any url about to be assigned to a[href] via data-binding is first normalized and turned into\n   * an absolute url. Afterwards, the url is matched against the `aHrefSanitizationWhitelist`\n   * regular expression. If a match is found, the original url is written into the dom. Otherwise,\n   * the absolute url is prefixed with `'unsafe:'` string and only then is it written into the DOM.\n   *\n   * @param {RegExp=} regexp New regexp to whitelist urls with.\n   * @returns {RegExp|ng.$compileProvider} Current RegExp if called without value or self for\n   *    chaining otherwise.\n   */\n  this.aHrefSanitizationWhitelist = function(regexp) {\n    if (isDefined(regexp)) {\n      $$sanitizeUriProvider.aHrefSanitizationWhitelist(regexp);\n      return this;\n    } else {\n      return $$sanitizeUriProvider.aHrefSanitizationWhitelist();\n    }\n  };\n\n\n  /**\n   * @ngdoc method\n   * @name $compileProvider#imgSrcSanitizationWhitelist\n   * @kind function\n   *\n   * @description\n   * Retrieves or overrides the default regular expression that is used for whitelisting of safe\n   * urls during img[src] sanitization.\n   *\n   * The sanitization is a security measure aimed at prevent XSS attacks via html links.\n   *\n   * Any url about to be assigned to img[src] via data-binding is first normalized and turned into\n   * an absolute url. Afterwards, the url is matched against the `imgSrcSanitizationWhitelist`\n   * regular expression. If a match is found, the original url is written into the dom. Otherwise,\n   * the absolute url is prefixed with `'unsafe:'` string and only then is it written into the DOM.\n   *\n   * @param {RegExp=} regexp New regexp to whitelist urls with.\n   * @returns {RegExp|ng.$compileProvider} Current RegExp if called without value or self for\n   *    chaining otherwise.\n   */\n  this.imgSrcSanitizationWhitelist = function(regexp) {\n    if (isDefined(regexp)) {\n      $$sanitizeUriProvider.imgSrcSanitizationWhitelist(regexp);\n      return this;\n    } else {\n      return $$sanitizeUriProvider.imgSrcSanitizationWhitelist();\n    }\n  };\n\n  this.$get = [\n            '$injector', '$interpolate', '$exceptionHandler', '$http', '$templateCache', '$parse',\n            '$controller', '$rootScope', '$document', '$sce', '$animate', '$$sanitizeUri',\n    function($injector,   $interpolate,   $exceptionHandler,   $http,   $templateCache,   $parse,\n             $controller,   $rootScope,   $document,   $sce,   $animate,   $$sanitizeUri) {\n\n    var Attributes = function(element, attr) {\n      this.$$element = element;\n      this.$attr = attr || {};\n    };\n\n    Attributes.prototype = {\n      $normalize: directiveNormalize,\n\n\n      /**\n       * @ngdoc method\n       * @name $compile.directive.Attributes#$addClass\n       * @kind function\n       *\n       * @description\n       * Adds the CSS class value specified by the classVal parameter to the element. If animations\n       * are enabled then an animation will be triggered for the class addition.\n       *\n       * @param {string} classVal The className value that will be added to the element\n       */\n      $addClass : function(classVal) {\n        if(classVal && classVal.length > 0) {\n          $animate.addClass(this.$$element, classVal);\n        }\n      },\n\n      /**\n       * @ngdoc method\n       * @name $compile.directive.Attributes#$removeClass\n       * @kind function\n       *\n       * @description\n       * Removes the CSS class value specified by the classVal parameter from the element. If\n       * animations are enabled then an animation will be triggered for the class removal.\n       *\n       * @param {string} classVal The className value that will be removed from the element\n       */\n      $removeClass : function(classVal) {\n        if(classVal && classVal.length > 0) {\n          $animate.removeClass(this.$$element, classVal);\n        }\n      },\n\n      /**\n       * @ngdoc method\n       * @name $compile.directive.Attributes#$updateClass\n       * @kind function\n       *\n       * @description\n       * Adds and removes the appropriate CSS class values to the element based on the difference\n       * between the new and old CSS class values (specified as newClasses and oldClasses).\n       *\n       * @param {string} newClasses The current CSS className value\n       * @param {string} oldClasses The former CSS className value\n       */\n      $updateClass : function(newClasses, oldClasses) {\n        var toAdd = tokenDifference(newClasses, oldClasses);\n        var toRemove = tokenDifference(oldClasses, newClasses);\n\n        if(toAdd.length === 0) {\n          $animate.removeClass(this.$$element, toRemove);\n        } else if(toRemove.length === 0) {\n          $animate.addClass(this.$$element, toAdd);\n        } else {\n          $animate.setClass(this.$$element, toAdd, toRemove);\n        }\n      },\n\n      /**\n       * Set a normalized attribute on the element in a way such that all directives\n       * can share the attribute. This function properly handles boolean attributes.\n       * @param {string} key Normalized key. (ie ngAttribute)\n       * @param {string|boolean} value The value to set. If `null` attribute will be deleted.\n       * @param {boolean=} writeAttr If false, does not write the value to DOM element attribute.\n       *     Defaults to true.\n       * @param {string=} attrName Optional none normalized name. Defaults to key.\n       */\n      $set: function(key, value, writeAttr, attrName) {\n        // TODO: decide whether or not to throw an error if \"class\"\n        //is set through this function since it may cause $updateClass to\n        //become unstable.\n\n        var booleanKey = getBooleanAttrName(this.$$element[0], key),\n            normalizedVal,\n            nodeName;\n\n        if (booleanKey) {\n          this.$$element.prop(key, value);\n          attrName = booleanKey;\n        }\n\n        this[key] = value;\n\n        // translate normalized key to actual key\n        if (attrName) {\n          this.$attr[key] = attrName;\n        } else {\n          attrName = this.$attr[key];\n          if (!attrName) {\n            this.$attr[key] = attrName = snake_case(key, '-');\n          }\n        }\n\n        nodeName = nodeName_(this.$$element);\n\n        // sanitize a[href] and img[src] values\n        if ((nodeName === 'A' && key === 'href') ||\n            (nodeName === 'IMG' && key === 'src')) {\n          this[key] = value = $$sanitizeUri(value, key === 'src');\n        }\n\n        if (writeAttr !== false) {\n          if (value === null || value === undefined) {\n            this.$$element.removeAttr(attrName);\n          } else {\n            this.$$element.attr(attrName, value);\n          }\n        }\n\n        // fire observers\n        var $$observers = this.$$observers;\n        $$observers && forEach($$observers[key], function(fn) {\n          try {\n            fn(value);\n          } catch (e) {\n            $exceptionHandler(e);\n          }\n        });\n      },\n\n\n      /**\n       * @ngdoc method\n       * @name $compile.directive.Attributes#$observe\n       * @kind function\n       *\n       * @description\n       * Observes an interpolated attribute.\n       *\n       * The observer function will be invoked once during the next `$digest` following\n       * compilation. The observer is then invoked whenever the interpolated value\n       * changes.\n       *\n       * @param {string} key Normalized key. (ie ngAttribute) .\n       * @param {function(interpolatedValue)} fn Function that will be called whenever\n                the interpolated value of the attribute changes.\n       *        See the {@link guide/directive#Attributes Directives} guide for more info.\n       * @returns {function()} the `fn` parameter.\n       */\n      $observe: function(key, fn) {\n        var attrs = this,\n            $$observers = (attrs.$$observers || (attrs.$$observers = {})),\n            listeners = ($$observers[key] || ($$observers[key] = []));\n\n        listeners.push(fn);\n        $rootScope.$evalAsync(function() {\n          if (!listeners.$$inter) {\n            // no one registered attribute interpolation function, so lets call it manually\n            fn(attrs[key]);\n          }\n        });\n        return fn;\n      }\n    };\n\n    var startSymbol = $interpolate.startSymbol(),\n        endSymbol = $interpolate.endSymbol(),\n        denormalizeTemplate = (startSymbol == '{{' || endSymbol  == '}}')\n            ? identity\n            : function denormalizeTemplate(template) {\n              return template.replace(/\\{\\{/g, startSymbol).replace(/}}/g, endSymbol);\n        },\n        NG_ATTR_BINDING = /^ngAttr[A-Z]/;\n\n\n    return compile;\n\n    //================================\n\n    function compile($compileNodes, transcludeFn, maxPriority, ignoreDirective,\n                        previousCompileContext) {\n      if (!($compileNodes instanceof jqLite)) {\n        // jquery always rewraps, whereas we need to preserve the original selector so that we can\n        // modify it.\n        $compileNodes = jqLite($compileNodes);\n      }\n      // We can not compile top level text elements since text nodes can be merged and we will\n      // not be able to attach scope data to them, so we will wrap them in <span>\n      forEach($compileNodes, function(node, index){\n        if (node.nodeType == 3 /* text node */ && node.nodeValue.match(/\\S+/) /* non-empty */ ) {\n          $compileNodes[index] = node = jqLite(node).wrap('<span></span>').parent()[0];\n        }\n      });\n      var compositeLinkFn =\n              compileNodes($compileNodes, transcludeFn, $compileNodes,\n                           maxPriority, ignoreDirective, previousCompileContext);\n      safeAddClass($compileNodes, 'ng-scope');\n      return function publicLinkFn(scope, cloneConnectFn, transcludeControllers){\n        assertArg(scope, 'scope');\n        // important!!: we must call our jqLite.clone() since the jQuery one is trying to be smart\n        // and sometimes changes the structure of the DOM.\n        var $linkNode = cloneConnectFn\n          ? JQLitePrototype.clone.call($compileNodes) // IMPORTANT!!!\n          : $compileNodes;\n\n        forEach(transcludeControllers, function(instance, name) {\n          $linkNode.data('$' + name + 'Controller', instance);\n        });\n\n        // Attach scope only to non-text nodes.\n        for(var i = 0, ii = $linkNode.length; i<ii; i++) {\n          var node = $linkNode[i],\n              nodeType = node.nodeType;\n          if (nodeType === 1 /* element */ || nodeType === 9 /* document */) {\n            $linkNode.eq(i).data('$scope', scope);\n          }\n        }\n\n        if (cloneConnectFn) cloneConnectFn($linkNode, scope);\n        if (compositeLinkFn) compositeLinkFn(scope, $linkNode, $linkNode);\n        return $linkNode;\n      };\n    }\n\n    function safeAddClass($element, className) {\n      try {\n        $element.addClass(className);\n      } catch(e) {\n        // ignore, since it means that we are trying to set class on\n        // SVG element, where class name is read-only.\n      }\n    }\n\n    /**\n     * Compile function matches each node in nodeList against the directives. Once all directives\n     * for a particular node are collected their compile functions are executed. The compile\n     * functions return values - the linking functions - are combined into a composite linking\n     * function, which is the a linking function for the node.\n     *\n     * @param {NodeList} nodeList an array of nodes or NodeList to compile\n     * @param {function(angular.Scope, cloneAttachFn=)} transcludeFn A linking function, where the\n     *        scope argument is auto-generated to the new child of the transcluded parent scope.\n     * @param {DOMElement=} $rootElement If the nodeList is the root of the compilation tree then\n     *        the rootElement must be set the jqLite collection of the compile root. This is\n     *        needed so that the jqLite collection items can be replaced with widgets.\n     * @param {number=} maxPriority Max directive priority.\n     * @returns {Function} A composite linking function of all of the matched directives or null.\n     */\n    function compileNodes(nodeList, transcludeFn, $rootElement, maxPriority, ignoreDirective,\n                            previousCompileContext) {\n      var linkFns = [],\n          attrs, directives, nodeLinkFn, childNodes, childLinkFn, linkFnFound;\n\n      for (var i = 0; i < nodeList.length; i++) {\n        attrs = new Attributes();\n\n        // we must always refer to nodeList[i] since the nodes can be replaced underneath us.\n        directives = collectDirectives(nodeList[i], [], attrs, i === 0 ? maxPriority : undefined,\n                                        ignoreDirective);\n\n        nodeLinkFn = (directives.length)\n            ? applyDirectivesToNode(directives, nodeList[i], attrs, transcludeFn, $rootElement,\n                                      null, [], [], previousCompileContext)\n            : null;\n\n        if (nodeLinkFn && nodeLinkFn.scope) {\n          safeAddClass(jqLite(nodeList[i]), 'ng-scope');\n        }\n\n        childLinkFn = (nodeLinkFn && nodeLinkFn.terminal ||\n                      !(childNodes = nodeList[i].childNodes) ||\n                      !childNodes.length)\n            ? null\n            : compileNodes(childNodes,\n                 nodeLinkFn ? nodeLinkFn.transclude : transcludeFn);\n\n        linkFns.push(nodeLinkFn, childLinkFn);\n        linkFnFound = linkFnFound || nodeLinkFn || childLinkFn;\n        //use the previous context only for the first element in the virtual group\n        previousCompileContext = null;\n      }\n\n      // return a linking function if we have found anything, null otherwise\n      return linkFnFound ? compositeLinkFn : null;\n\n      function compositeLinkFn(scope, nodeList, $rootElement, boundTranscludeFn) {\n        var nodeLinkFn, childLinkFn, node, $node, childScope, childTranscludeFn, i, ii, n;\n\n        // copy nodeList so that linking doesn't break due to live list updates.\n        var nodeListLength = nodeList.length,\n            stableNodeList = new Array(nodeListLength);\n        for (i = 0; i < nodeListLength; i++) {\n          stableNodeList[i] = nodeList[i];\n        }\n\n        for(i = 0, n = 0, ii = linkFns.length; i < ii; n++) {\n          node = stableNodeList[n];\n          nodeLinkFn = linkFns[i++];\n          childLinkFn = linkFns[i++];\n          $node = jqLite(node);\n\n          if (nodeLinkFn) {\n            if (nodeLinkFn.scope) {\n              childScope = scope.$new();\n              $node.data('$scope', childScope);\n            } else {\n              childScope = scope;\n            }\n            childTranscludeFn = nodeLinkFn.transclude;\n            if (childTranscludeFn || (!boundTranscludeFn && transcludeFn)) {\n              nodeLinkFn(childLinkFn, childScope, node, $rootElement,\n                createBoundTranscludeFn(scope, childTranscludeFn || transcludeFn)\n              );\n            } else {\n              nodeLinkFn(childLinkFn, childScope, node, $rootElement, boundTranscludeFn);\n            }\n          } else if (childLinkFn) {\n            childLinkFn(scope, node.childNodes, undefined, boundTranscludeFn);\n          }\n        }\n      }\n    }\n\n    function createBoundTranscludeFn(scope, transcludeFn) {\n      return function boundTranscludeFn(transcludedScope, cloneFn, controllers) {\n        var scopeCreated = false;\n\n        if (!transcludedScope) {\n          transcludedScope = scope.$new();\n          transcludedScope.$$transcluded = true;\n          scopeCreated = true;\n        }\n\n        var clone = transcludeFn(transcludedScope, cloneFn, controllers);\n        if (scopeCreated) {\n          clone.on('$destroy', bind(transcludedScope, transcludedScope.$destroy));\n        }\n        return clone;\n      };\n    }\n\n    /**\n     * Looks for directives on the given node and adds them to the directive collection which is\n     * sorted.\n     *\n     * @param node Node to search.\n     * @param directives An array to which the directives are added to. This array is sorted before\n     *        the function returns.\n     * @param attrs The shared attrs object which is used to populate the normalized attributes.\n     * @param {number=} maxPriority Max directive priority.\n     */\n    function collectDirectives(node, directives, attrs, maxPriority, ignoreDirective) {\n      var nodeType = node.nodeType,\n          attrsMap = attrs.$attr,\n          match,\n          className;\n\n      switch(nodeType) {\n        case 1: /* Element */\n          // use the node name: <directive>\n          addDirective(directives,\n              directiveNormalize(nodeName_(node).toLowerCase()), 'E', maxPriority, ignoreDirective);\n\n          // iterate over the attributes\n          for (var attr, name, nName, ngAttrName, value, nAttrs = node.attributes,\n                   j = 0, jj = nAttrs && nAttrs.length; j < jj; j++) {\n            var attrStartName = false;\n            var attrEndName = false;\n\n            attr = nAttrs[j];\n            if (!msie || msie >= 8 || attr.specified) {\n              name = attr.name;\n              // support ngAttr attribute binding\n              ngAttrName = directiveNormalize(name);\n              if (NG_ATTR_BINDING.test(ngAttrName)) {\n                name = snake_case(ngAttrName.substr(6), '-');\n              }\n\n              var directiveNName = ngAttrName.replace(/(Start|End)$/, '');\n              if (ngAttrName === directiveNName + 'Start') {\n                attrStartName = name;\n                attrEndName = name.substr(0, name.length - 5) + 'end';\n                name = name.substr(0, name.length - 6);\n              }\n\n              nName = directiveNormalize(name.toLowerCase());\n              attrsMap[nName] = name;\n              attrs[nName] = value = trim(attr.value);\n              if (getBooleanAttrName(node, nName)) {\n                attrs[nName] = true; // presence means true\n              }\n              addAttrInterpolateDirective(node, directives, value, nName);\n              addDirective(directives, nName, 'A', maxPriority, ignoreDirective, attrStartName,\n                            attrEndName);\n            }\n          }\n\n          // use class as directive\n          className = node.className;\n          if (isString(className) && className !== '') {\n            while (match = CLASS_DIRECTIVE_REGEXP.exec(className)) {\n              nName = directiveNormalize(match[2]);\n              if (addDirective(directives, nName, 'C', maxPriority, ignoreDirective)) {\n                attrs[nName] = trim(match[3]);\n              }\n              className = className.substr(match.index + match[0].length);\n            }\n          }\n          break;\n        case 3: /* Text Node */\n          addTextInterpolateDirective(directives, node.nodeValue);\n          break;\n        case 8: /* Comment */\n          try {\n            match = COMMENT_DIRECTIVE_REGEXP.exec(node.nodeValue);\n            if (match) {\n              nName = directiveNormalize(match[1]);\n              if (addDirective(directives, nName, 'M', maxPriority, ignoreDirective)) {\n                attrs[nName] = trim(match[2]);\n              }\n            }\n          } catch (e) {\n            // turns out that under some circumstances IE9 throws errors when one attempts to read\n            // comment's node value.\n            // Just ignore it and continue. (Can't seem to reproduce in test case.)\n          }\n          break;\n      }\n\n      directives.sort(byPriority);\n      return directives;\n    }\n\n    /**\n     * Given a node with an directive-start it collects all of the siblings until it finds\n     * directive-end.\n     * @param node\n     * @param attrStart\n     * @param attrEnd\n     * @returns {*}\n     */\n    function groupScan(node, attrStart, attrEnd) {\n      var nodes = [];\n      var depth = 0;\n      if (attrStart && node.hasAttribute && node.hasAttribute(attrStart)) {\n        var startNode = node;\n        do {\n          if (!node) {\n            throw $compileMinErr('uterdir',\n                      \"Unterminated attribute, found '{0}' but no matching '{1}' found.\",\n                      attrStart, attrEnd);\n          }\n          if (node.nodeType == 1 /** Element **/) {\n            if (node.hasAttribute(attrStart)) depth++;\n            if (node.hasAttribute(attrEnd)) depth--;\n          }\n          nodes.push(node);\n          node = node.nextSibling;\n        } while (depth > 0);\n      } else {\n        nodes.push(node);\n      }\n\n      return jqLite(nodes);\n    }\n\n    /**\n     * Wrapper for linking function which converts normal linking function into a grouped\n     * linking function.\n     * @param linkFn\n     * @param attrStart\n     * @param attrEnd\n     * @returns {Function}\n     */\n    function groupElementsLinkFnWrapper(linkFn, attrStart, attrEnd) {\n      return function(scope, element, attrs, controllers, transcludeFn) {\n        element = groupScan(element[0], attrStart, attrEnd);\n        return linkFn(scope, element, attrs, controllers, transcludeFn);\n      };\n    }\n\n    /**\n     * Once the directives have been collected, their compile functions are executed. This method\n     * is responsible for inlining directive templates as well as terminating the application\n     * of the directives if the terminal directive has been reached.\n     *\n     * @param {Array} directives Array of collected directives to execute their compile function.\n     *        this needs to be pre-sorted by priority order.\n     * @param {Node} compileNode The raw DOM node to apply the compile functions to\n     * @param {Object} templateAttrs The shared attribute function\n     * @param {function(angular.Scope, cloneAttachFn=)} transcludeFn A linking function, where the\n     *                                                  scope argument is auto-generated to the new\n     *                                                  child of the transcluded parent scope.\n     * @param {JQLite} jqCollection If we are working on the root of the compile tree then this\n     *                              argument has the root jqLite array so that we can replace nodes\n     *                              on it.\n     * @param {Object=} originalReplaceDirective An optional directive that will be ignored when\n     *                                           compiling the transclusion.\n     * @param {Array.<Function>} preLinkFns\n     * @param {Array.<Function>} postLinkFns\n     * @param {Object} previousCompileContext Context used for previous compilation of the current\n     *                                        node\n     * @returns {Function} linkFn\n     */\n    function applyDirectivesToNode(directives, compileNode, templateAttrs, transcludeFn,\n                                   jqCollection, originalReplaceDirective, preLinkFns, postLinkFns,\n                                   previousCompileContext) {\n      previousCompileContext = previousCompileContext || {};\n\n      var terminalPriority = -Number.MAX_VALUE,\n          newScopeDirective,\n          controllerDirectives = previousCompileContext.controllerDirectives,\n          newIsolateScopeDirective = previousCompileContext.newIsolateScopeDirective,\n          templateDirective = previousCompileContext.templateDirective,\n          nonTlbTranscludeDirective = previousCompileContext.nonTlbTranscludeDirective,\n          hasTranscludeDirective = false,\n          hasElementTranscludeDirective = previousCompileContext.hasElementTranscludeDirective,\n          $compileNode = templateAttrs.$$element = jqLite(compileNode),\n          directive,\n          directiveName,\n          $template,\n          replaceDirective = originalReplaceDirective,\n          childTranscludeFn = transcludeFn,\n          linkFn,\n          directiveValue;\n\n      // executes all directives on the current element\n      for(var i = 0, ii = directives.length; i < ii; i++) {\n        directive = directives[i];\n        var attrStart = directive.$$start;\n        var attrEnd = directive.$$end;\n\n        // collect multiblock sections\n        if (attrStart) {\n          $compileNode = groupScan(compileNode, attrStart, attrEnd);\n        }\n        $template = undefined;\n\n        if (terminalPriority > directive.priority) {\n          break; // prevent further processing of directives\n        }\n\n        if (directiveValue = directive.scope) {\n          newScopeDirective = newScopeDirective || directive;\n\n          // skip the check for directives with async templates, we'll check the derived sync\n          // directive when the template arrives\n          if (!directive.templateUrl) {\n            assertNoDuplicate('new/isolated scope', newIsolateScopeDirective, directive,\n                              $compileNode);\n            if (isObject(directiveValue)) {\n              newIsolateScopeDirective = directive;\n            }\n          }\n        }\n\n        directiveName = directive.name;\n\n        if (!directive.templateUrl && directive.controller) {\n          directiveValue = directive.controller;\n          controllerDirectives = controllerDirectives || {};\n          assertNoDuplicate(\"'\" + directiveName + \"' controller\",\n              controllerDirectives[directiveName], directive, $compileNode);\n          controllerDirectives[directiveName] = directive;\n        }\n\n        if (directiveValue = directive.transclude) {\n          hasTranscludeDirective = true;\n\n          // Special case ngIf and ngRepeat so that we don't complain about duplicate transclusion.\n          // This option should only be used by directives that know how to safely handle element transclusion,\n          // where the transcluded nodes are added or replaced after linking.\n          if (!directive.$$tlb) {\n            assertNoDuplicate('transclusion', nonTlbTranscludeDirective, directive, $compileNode);\n            nonTlbTranscludeDirective = directive;\n          }\n\n          if (directiveValue == 'element') {\n            hasElementTranscludeDirective = true;\n            terminalPriority = directive.priority;\n            $template = groupScan(compileNode, attrStart, attrEnd);\n            $compileNode = templateAttrs.$$element =\n                jqLite(document.createComment(' ' + directiveName + ': ' +\n                                              templateAttrs[directiveName] + ' '));\n            compileNode = $compileNode[0];\n            replaceWith(jqCollection, jqLite(sliceArgs($template)), compileNode);\n\n            childTranscludeFn = compile($template, transcludeFn, terminalPriority,\n                                        replaceDirective && replaceDirective.name, {\n                                          // Don't pass in:\n                                          // - controllerDirectives - otherwise we'll create duplicates controllers\n                                          // - newIsolateScopeDirective or templateDirective - combining templates with\n                                          //   element transclusion doesn't make sense.\n                                          //\n                                          // We need only nonTlbTranscludeDirective so that we prevent putting transclusion\n                                          // on the same element more than once.\n                                          nonTlbTranscludeDirective: nonTlbTranscludeDirective\n                                        });\n          } else {\n            $template = jqLite(jqLiteClone(compileNode)).contents();\n            $compileNode.empty(); // clear contents\n            childTranscludeFn = compile($template, transcludeFn);\n          }\n        }\n\n        if (directive.template) {\n          assertNoDuplicate('template', templateDirective, directive, $compileNode);\n          templateDirective = directive;\n\n          directiveValue = (isFunction(directive.template))\n              ? directive.template($compileNode, templateAttrs)\n              : directive.template;\n\n          directiveValue = denormalizeTemplate(directiveValue);\n\n          if (directive.replace) {\n            replaceDirective = directive;\n            if (jqLiteIsTextNode(directiveValue)) {\n              $template = [];\n            } else {\n              $template = jqLite(trim(directiveValue));\n            }\n            compileNode = $template[0];\n\n            if ($template.length != 1 || compileNode.nodeType !== 1) {\n              throw $compileMinErr('tplrt',\n                  \"Template for directive '{0}' must have exactly one root element. {1}\",\n                  directiveName, '');\n            }\n\n            replaceWith(jqCollection, $compileNode, compileNode);\n\n            var newTemplateAttrs = {$attr: {}};\n\n            // combine directives from the original node and from the template:\n            // - take the array of directives for this element\n            // - split it into two parts, those that already applied (processed) and those that weren't (unprocessed)\n            // - collect directives from the template and sort them by priority\n            // - combine directives as: processed + template + unprocessed\n            var templateDirectives = collectDirectives(compileNode, [], newTemplateAttrs);\n            var unprocessedDirectives = directives.splice(i + 1, directives.length - (i + 1));\n\n            if (newIsolateScopeDirective) {\n              markDirectivesAsIsolate(templateDirectives);\n            }\n            directives = directives.concat(templateDirectives).concat(unprocessedDirectives);\n            mergeTemplateAttributes(templateAttrs, newTemplateAttrs);\n\n            ii = directives.length;\n          } else {\n            $compileNode.html(directiveValue);\n          }\n        }\n\n        if (directive.templateUrl) {\n          assertNoDuplicate('template', templateDirective, directive, $compileNode);\n          templateDirective = directive;\n\n          if (directive.replace) {\n            replaceDirective = directive;\n          }\n\n          nodeLinkFn = compileTemplateUrl(directives.splice(i, directives.length - i), $compileNode,\n              templateAttrs, jqCollection, childTranscludeFn, preLinkFns, postLinkFns, {\n                controllerDirectives: controllerDirectives,\n                newIsolateScopeDirective: newIsolateScopeDirective,\n                templateDirective: templateDirective,\n                nonTlbTranscludeDirective: nonTlbTranscludeDirective\n              });\n          ii = directives.length;\n        } else if (directive.compile) {\n          try {\n            linkFn = directive.compile($compileNode, templateAttrs, childTranscludeFn);\n            if (isFunction(linkFn)) {\n              addLinkFns(null, linkFn, attrStart, attrEnd);\n            } else if (linkFn) {\n              addLinkFns(linkFn.pre, linkFn.post, attrStart, attrEnd);\n            }\n          } catch (e) {\n            $exceptionHandler(e, startingTag($compileNode));\n          }\n        }\n\n        if (directive.terminal) {\n          nodeLinkFn.terminal = true;\n          terminalPriority = Math.max(terminalPriority, directive.priority);\n        }\n\n      }\n\n      nodeLinkFn.scope = newScopeDirective && newScopeDirective.scope === true;\n      nodeLinkFn.transclude = hasTranscludeDirective && childTranscludeFn;\n      previousCompileContext.hasElementTranscludeDirective = hasElementTranscludeDirective;\n\n      // might be normal or delayed nodeLinkFn depending on if templateUrl is present\n      return nodeLinkFn;\n\n      ////////////////////\n\n      function addLinkFns(pre, post, attrStart, attrEnd) {\n        if (pre) {\n          if (attrStart) pre = groupElementsLinkFnWrapper(pre, attrStart, attrEnd);\n          pre.require = directive.require;\n          pre.directiveName = directiveName;\n          if (newIsolateScopeDirective === directive || directive.$$isolateScope) {\n            pre = cloneAndAnnotateFn(pre, {isolateScope: true});\n          }\n          preLinkFns.push(pre);\n        }\n        if (post) {\n          if (attrStart) post = groupElementsLinkFnWrapper(post, attrStart, attrEnd);\n          post.require = directive.require;\n          post.directiveName = directiveName;\n          if (newIsolateScopeDirective === directive || directive.$$isolateScope) {\n            post = cloneAndAnnotateFn(post, {isolateScope: true});\n          }\n          postLinkFns.push(post);\n        }\n      }\n\n\n      function getControllers(directiveName, require, $element, elementControllers) {\n        var value, retrievalMethod = 'data', optional = false;\n        if (isString(require)) {\n          while((value = require.charAt(0)) == '^' || value == '?') {\n            require = require.substr(1);\n            if (value == '^') {\n              retrievalMethod = 'inheritedData';\n            }\n            optional = optional || value == '?';\n          }\n          value = null;\n\n          if (elementControllers && retrievalMethod === 'data') {\n            value = elementControllers[require];\n          }\n          value = value || $element[retrievalMethod]('$' + require + 'Controller');\n\n          if (!value && !optional) {\n            throw $compileMinErr('ctreq',\n                \"Controller '{0}', required by directive '{1}', can't be found!\",\n                require, directiveName);\n          }\n          return value;\n        } else if (isArray(require)) {\n          value = [];\n          forEach(require, function(require) {\n            value.push(getControllers(directiveName, require, $element, elementControllers));\n          });\n        }\n        return value;\n      }\n\n\n      function nodeLinkFn(childLinkFn, scope, linkNode, $rootElement, boundTranscludeFn) {\n        var attrs, $element, i, ii, linkFn, controller, isolateScope, elementControllers = {}, transcludeFn;\n\n        if (compileNode === linkNode) {\n          attrs = templateAttrs;\n        } else {\n          attrs = shallowCopy(templateAttrs, new Attributes(jqLite(linkNode), templateAttrs.$attr));\n        }\n        $element = attrs.$$element;\n\n        if (newIsolateScopeDirective) {\n          var LOCAL_REGEXP = /^\\s*([@=&])(\\??)\\s*(\\w*)\\s*$/;\n          var $linkNode = jqLite(linkNode);\n\n          isolateScope = scope.$new(true);\n\n          if (templateDirective && (templateDirective === newIsolateScopeDirective ||\n              templateDirective === newIsolateScopeDirective.$$originalDirective)) {\n            $linkNode.data('$isolateScope', isolateScope) ;\n          } else {\n            $linkNode.data('$isolateScopeNoTemplate', isolateScope);\n          }\n\n\n\n          safeAddClass($linkNode, 'ng-isolate-scope');\n\n          forEach(newIsolateScopeDirective.scope, function(definition, scopeName) {\n            var match = definition.match(LOCAL_REGEXP) || [],\n                attrName = match[3] || scopeName,\n                optional = (match[2] == '?'),\n                mode = match[1], // @, =, or &\n                lastValue,\n                parentGet, parentSet, compare;\n\n            isolateScope.$$isolateBindings[scopeName] = mode + attrName;\n\n            switch (mode) {\n\n              case '@':\n                attrs.$observe(attrName, function(value) {\n                  isolateScope[scopeName] = value;\n                });\n                attrs.$$observers[attrName].$$scope = scope;\n                if( attrs[attrName] ) {\n                  // If the attribute has been provided then we trigger an interpolation to ensure\n                  // the value is there for use in the link fn\n                  isolateScope[scopeName] = $interpolate(attrs[attrName])(scope);\n                }\n                break;\n\n              case '=':\n                if (optional && !attrs[attrName]) {\n                  return;\n                }\n                parentGet = $parse(attrs[attrName]);\n                if (parentGet.literal) {\n                  compare = equals;\n                } else {\n                  compare = function(a,b) { return a === b; };\n                }\n                parentSet = parentGet.assign || function() {\n                  // reset the change, or we will throw this exception on every $digest\n                  lastValue = isolateScope[scopeName] = parentGet(scope);\n                  throw $compileMinErr('nonassign',\n                      \"Expression '{0}' used with directive '{1}' is non-assignable!\",\n                      attrs[attrName], newIsolateScopeDirective.name);\n                };\n                lastValue = isolateScope[scopeName] = parentGet(scope);\n                isolateScope.$watch(function parentValueWatch() {\n                  var parentValue = parentGet(scope);\n                  if (!compare(parentValue, isolateScope[scopeName])) {\n                    // we are out of sync and need to copy\n                    if (!compare(parentValue, lastValue)) {\n                      // parent changed and it has precedence\n                      isolateScope[scopeName] = parentValue;\n                    } else {\n                      // if the parent can be assigned then do so\n                      parentSet(scope, parentValue = isolateScope[scopeName]);\n                    }\n                  }\n                  return lastValue = parentValue;\n                }, null, parentGet.literal);\n                break;\n\n              case '&':\n                parentGet = $parse(attrs[attrName]);\n                isolateScope[scopeName] = function(locals) {\n                  return parentGet(scope, locals);\n                };\n                break;\n\n              default:\n                throw $compileMinErr('iscp',\n                    \"Invalid isolate scope definition for directive '{0}'.\" +\n                    \" Definition: {... {1}: '{2}' ...}\",\n                    newIsolateScopeDirective.name, scopeName, definition);\n            }\n          });\n        }\n        transcludeFn = boundTranscludeFn && controllersBoundTransclude;\n        if (controllerDirectives) {\n          forEach(controllerDirectives, function(directive) {\n            var locals = {\n              $scope: directive === newIsolateScopeDirective || directive.$$isolateScope ? isolateScope : scope,\n              $element: $element,\n              $attrs: attrs,\n              $transclude: transcludeFn\n            }, controllerInstance;\n\n            controller = directive.controller;\n            if (controller == '@') {\n              controller = attrs[directive.name];\n            }\n\n            controllerInstance = $controller(controller, locals);\n            // For directives with element transclusion the element is a comment,\n            // but jQuery .data doesn't support attaching data to comment nodes as it's hard to\n            // clean up (http://bugs.jquery.com/ticket/8335).\n            // Instead, we save the controllers for the element in a local hash and attach to .data\n            // later, once we have the actual element.\n            elementControllers[directive.name] = controllerInstance;\n            if (!hasElementTranscludeDirective) {\n              $element.data('$' + directive.name + 'Controller', controllerInstance);\n            }\n\n            if (directive.controllerAs) {\n              locals.$scope[directive.controllerAs] = controllerInstance;\n            }\n          });\n        }\n\n        // PRELINKING\n        for(i = 0, ii = preLinkFns.length; i < ii; i++) {\n          try {\n            linkFn = preLinkFns[i];\n            linkFn(linkFn.isolateScope ? isolateScope : scope, $element, attrs,\n                linkFn.require && getControllers(linkFn.directiveName, linkFn.require, $element, elementControllers), transcludeFn);\n          } catch (e) {\n            $exceptionHandler(e, startingTag($element));\n          }\n        }\n\n        // RECURSION\n        // We only pass the isolate scope, if the isolate directive has a template,\n        // otherwise the child elements do not belong to the isolate directive.\n        var scopeToChild = scope;\n        if (newIsolateScopeDirective && (newIsolateScopeDirective.template || newIsolateScopeDirective.templateUrl === null)) {\n          scopeToChild = isolateScope;\n        }\n        childLinkFn && childLinkFn(scopeToChild, linkNode.childNodes, undefined, boundTranscludeFn);\n\n        // POSTLINKING\n        for(i = postLinkFns.length - 1; i >= 0; i--) {\n          try {\n            linkFn = postLinkFns[i];\n            linkFn(linkFn.isolateScope ? isolateScope : scope, $element, attrs,\n                linkFn.require && getControllers(linkFn.directiveName, linkFn.require, $element, elementControllers), transcludeFn);\n          } catch (e) {\n            $exceptionHandler(e, startingTag($element));\n          }\n        }\n\n        // This is the function that is injected as `$transclude`.\n        function controllersBoundTransclude(scope, cloneAttachFn) {\n          var transcludeControllers;\n\n          // no scope passed\n          if (arguments.length < 2) {\n            cloneAttachFn = scope;\n            scope = undefined;\n          }\n\n          if (hasElementTranscludeDirective) {\n            transcludeControllers = elementControllers;\n          }\n\n          return boundTranscludeFn(scope, cloneAttachFn, transcludeControllers);\n        }\n      }\n    }\n\n    function markDirectivesAsIsolate(directives) {\n      // mark all directives as needing isolate scope.\n      for (var j = 0, jj = directives.length; j < jj; j++) {\n        directives[j] = inherit(directives[j], {$$isolateScope: true});\n      }\n    }\n\n    /**\n     * looks up the directive and decorates it with exception handling and proper parameters. We\n     * call this the boundDirective.\n     *\n     * @param {string} name name of the directive to look up.\n     * @param {string} location The directive must be found in specific format.\n     *   String containing any of theses characters:\n     *\n     *   * `E`: element name\n     *   * `A': attribute\n     *   * `C`: class\n     *   * `M`: comment\n     * @returns {boolean} true if directive was added.\n     */\n    function addDirective(tDirectives, name, location, maxPriority, ignoreDirective, startAttrName,\n                          endAttrName) {\n      if (name === ignoreDirective) return null;\n      var match = null;\n      if (hasDirectives.hasOwnProperty(name)) {\n        for(var directive, directives = $injector.get(name + Suffix),\n            i = 0, ii = directives.length; i<ii; i++) {\n          try {\n            directive = directives[i];\n            if ( (maxPriority === undefined || maxPriority > directive.priority) &&\n                 directive.restrict.indexOf(location) != -1) {\n              if (startAttrName) {\n                directive = inherit(directive, {$$start: startAttrName, $$end: endAttrName});\n              }\n              tDirectives.push(directive);\n              match = directive;\n            }\n          } catch(e) { $exceptionHandler(e); }\n        }\n      }\n      return match;\n    }\n\n\n    /**\n     * When the element is replaced with HTML template then the new attributes\n     * on the template need to be merged with the existing attributes in the DOM.\n     * The desired effect is to have both of the attributes present.\n     *\n     * @param {object} dst destination attributes (original DOM)\n     * @param {object} src source attributes (from the directive template)\n     */\n    function mergeTemplateAttributes(dst, src) {\n      var srcAttr = src.$attr,\n          dstAttr = dst.$attr,\n          $element = dst.$$element;\n\n      // reapply the old attributes to the new element\n      forEach(dst, function(value, key) {\n        if (key.charAt(0) != '$') {\n          if (src[key] && src[key] !== value) {\n            value += (key === 'style' ? ';' : ' ') + src[key];\n          }\n          dst.$set(key, value, true, srcAttr[key]);\n        }\n      });\n\n      // copy the new attributes on the old attrs object\n      forEach(src, function(value, key) {\n        if (key == 'class') {\n          safeAddClass($element, value);\n          dst['class'] = (dst['class'] ? dst['class'] + ' ' : '') + value;\n        } else if (key == 'style') {\n          $element.attr('style', $element.attr('style') + ';' + value);\n          dst['style'] = (dst['style'] ? dst['style'] + ';' : '') + value;\n          // `dst` will never contain hasOwnProperty as DOM parser won't let it.\n          // You will get an \"InvalidCharacterError: DOM Exception 5\" error if you\n          // have an attribute like \"has-own-property\" or \"data-has-own-property\", etc.\n        } else if (key.charAt(0) != '$' && !dst.hasOwnProperty(key)) {\n          dst[key] = value;\n          dstAttr[key] = srcAttr[key];\n        }\n      });\n    }\n\n\n    function compileTemplateUrl(directives, $compileNode, tAttrs,\n        $rootElement, childTranscludeFn, preLinkFns, postLinkFns, previousCompileContext) {\n      var linkQueue = [],\n          afterTemplateNodeLinkFn,\n          afterTemplateChildLinkFn,\n          beforeTemplateCompileNode = $compileNode[0],\n          origAsyncDirective = directives.shift(),\n          // The fact that we have to copy and patch the directive seems wrong!\n          derivedSyncDirective = extend({}, origAsyncDirective, {\n            templateUrl: null, transclude: null, replace: null, $$originalDirective: origAsyncDirective\n          }),\n          templateUrl = (isFunction(origAsyncDirective.templateUrl))\n              ? origAsyncDirective.templateUrl($compileNode, tAttrs)\n              : origAsyncDirective.templateUrl;\n\n      $compileNode.empty();\n\n      $http.get($sce.getTrustedResourceUrl(templateUrl), {cache: $templateCache}).\n        success(function(content) {\n          var compileNode, tempTemplateAttrs, $template, childBoundTranscludeFn;\n\n          content = denormalizeTemplate(content);\n\n          if (origAsyncDirective.replace) {\n            if (jqLiteIsTextNode(content)) {\n              $template = [];\n            } else {\n              $template = jqLite(trim(content));\n            }\n            compileNode = $template[0];\n\n            if ($template.length != 1 || compileNode.nodeType !== 1) {\n              throw $compileMinErr('tplrt',\n                  \"Template for directive '{0}' must have exactly one root element. {1}\",\n                  origAsyncDirective.name, templateUrl);\n            }\n\n            tempTemplateAttrs = {$attr: {}};\n            replaceWith($rootElement, $compileNode, compileNode);\n            var templateDirectives = collectDirectives(compileNode, [], tempTemplateAttrs);\n\n            if (isObject(origAsyncDirective.scope)) {\n              markDirectivesAsIsolate(templateDirectives);\n            }\n            directives = templateDirectives.concat(directives);\n            mergeTemplateAttributes(tAttrs, tempTemplateAttrs);\n          } else {\n            compileNode = beforeTemplateCompileNode;\n            $compileNode.html(content);\n          }\n\n          directives.unshift(derivedSyncDirective);\n\n          afterTemplateNodeLinkFn = applyDirectivesToNode(directives, compileNode, tAttrs,\n              childTranscludeFn, $compileNode, origAsyncDirective, preLinkFns, postLinkFns,\n              previousCompileContext);\n          forEach($rootElement, function(node, i) {\n            if (node == compileNode) {\n              $rootElement[i] = $compileNode[0];\n            }\n          });\n          afterTemplateChildLinkFn = compileNodes($compileNode[0].childNodes, childTranscludeFn);\n\n\n          while(linkQueue.length) {\n            var scope = linkQueue.shift(),\n                beforeTemplateLinkNode = linkQueue.shift(),\n                linkRootElement = linkQueue.shift(),\n                boundTranscludeFn = linkQueue.shift(),\n                linkNode = $compileNode[0];\n\n            if (beforeTemplateLinkNode !== beforeTemplateCompileNode) {\n              var oldClasses = beforeTemplateLinkNode.className;\n\n              if (!(previousCompileContext.hasElementTranscludeDirective &&\n                  origAsyncDirective.replace)) {\n                // it was cloned therefore we have to clone as well.\n                linkNode = jqLiteClone(compileNode);\n              }\n\n              replaceWith(linkRootElement, jqLite(beforeTemplateLinkNode), linkNode);\n\n              // Copy in CSS classes from original node\n              safeAddClass(jqLite(linkNode), oldClasses);\n            }\n            if (afterTemplateNodeLinkFn.transclude) {\n              childBoundTranscludeFn = createBoundTranscludeFn(scope, afterTemplateNodeLinkFn.transclude);\n            } else {\n              childBoundTranscludeFn = boundTranscludeFn;\n            }\n            afterTemplateNodeLinkFn(afterTemplateChildLinkFn, scope, linkNode, $rootElement,\n              childBoundTranscludeFn);\n          }\n          linkQueue = null;\n        }).\n        error(function(response, code, headers, config) {\n          throw $compileMinErr('tpload', 'Failed to load template: {0}', config.url);\n        });\n\n      return function delayedNodeLinkFn(ignoreChildLinkFn, scope, node, rootElement, boundTranscludeFn) {\n        if (linkQueue) {\n          linkQueue.push(scope);\n          linkQueue.push(node);\n          linkQueue.push(rootElement);\n          linkQueue.push(boundTranscludeFn);\n        } else {\n          afterTemplateNodeLinkFn(afterTemplateChildLinkFn, scope, node, rootElement, boundTranscludeFn);\n        }\n      };\n    }\n\n\n    /**\n     * Sorting function for bound directives.\n     */\n    function byPriority(a, b) {\n      var diff = b.priority - a.priority;\n      if (diff !== 0) return diff;\n      if (a.name !== b.name) return (a.name < b.name) ? -1 : 1;\n      return a.index - b.index;\n    }\n\n\n    function assertNoDuplicate(what, previousDirective, directive, element) {\n      if (previousDirective) {\n        throw $compileMinErr('multidir', 'Multiple directives [{0}, {1}] asking for {2} on: {3}',\n            previousDirective.name, directive.name, what, startingTag(element));\n      }\n    }\n\n\n    function addTextInterpolateDirective(directives, text) {\n      var interpolateFn = $interpolate(text, true);\n      if (interpolateFn) {\n        directives.push({\n          priority: 0,\n          compile: valueFn(function textInterpolateLinkFn(scope, node) {\n            var parent = node.parent(),\n                bindings = parent.data('$binding') || [];\n            bindings.push(interpolateFn);\n            safeAddClass(parent.data('$binding', bindings), 'ng-binding');\n            scope.$watch(interpolateFn, function interpolateFnWatchAction(value) {\n              node[0].nodeValue = value;\n            });\n          })\n        });\n      }\n    }\n\n\n    function getTrustedContext(node, attrNormalizedName) {\n      if (attrNormalizedName == \"srcdoc\") {\n        return $sce.HTML;\n      }\n      var tag = nodeName_(node);\n      // maction[xlink:href] can source SVG.  It's not limited to <maction>.\n      if (attrNormalizedName == \"xlinkHref\" ||\n          (tag == \"FORM\" && attrNormalizedName == \"action\") ||\n          (tag != \"IMG\" && (attrNormalizedName == \"src\" ||\n                            attrNormalizedName == \"ngSrc\"))) {\n        return $sce.RESOURCE_URL;\n      }\n    }\n\n\n    function addAttrInterpolateDirective(node, directives, value, name) {\n      var interpolateFn = $interpolate(value, true);\n\n      // no interpolation found -> ignore\n      if (!interpolateFn) return;\n\n\n      if (name === \"multiple\" && nodeName_(node) === \"SELECT\") {\n        throw $compileMinErr(\"selmulti\",\n            \"Binding to the 'multiple' attribute is not supported. Element: {0}\",\n            startingTag(node));\n      }\n\n      directives.push({\n        priority: 100,\n        compile: function() {\n            return {\n              pre: function attrInterpolatePreLinkFn(scope, element, attr) {\n                var $$observers = (attr.$$observers || (attr.$$observers = {}));\n\n                if (EVENT_HANDLER_ATTR_REGEXP.test(name)) {\n                  throw $compileMinErr('nodomevents',\n                      \"Interpolations for HTML DOM event attributes are disallowed.  Please use the \" +\n                          \"ng- versions (such as ng-click instead of onclick) instead.\");\n                }\n\n                // we need to interpolate again, in case the attribute value has been updated\n                // (e.g. by another directive's compile function)\n                interpolateFn = $interpolate(attr[name], true, getTrustedContext(node, name));\n\n                // if attribute was updated so that there is no interpolation going on we don't want to\n                // register any observers\n                if (!interpolateFn) return;\n\n                // TODO(i): this should likely be attr.$set(name, iterpolateFn(scope) so that we reset the\n                // actual attr value\n                attr[name] = interpolateFn(scope);\n                ($$observers[name] || ($$observers[name] = [])).$$inter = true;\n                (attr.$$observers && attr.$$observers[name].$$scope || scope).\n                  $watch(interpolateFn, function interpolateFnWatchAction(newValue, oldValue) {\n                    //special case for class attribute addition + removal\n                    //so that class changes can tap into the animation\n                    //hooks provided by the $animate service. Be sure to\n                    //skip animations when the first digest occurs (when\n                    //both the new and the old values are the same) since\n                    //the CSS classes are the non-interpolated values\n                    if(name === 'class' && newValue != oldValue) {\n                      attr.$updateClass(newValue, oldValue);\n                    } else {\n                      attr.$set(name, newValue);\n                    }\n                  });\n              }\n            };\n          }\n      });\n    }\n\n\n    /**\n     * This is a special jqLite.replaceWith, which can replace items which\n     * have no parents, provided that the containing jqLite collection is provided.\n     *\n     * @param {JqLite=} $rootElement The root of the compile tree. Used so that we can replace nodes\n     *                               in the root of the tree.\n     * @param {JqLite} elementsToRemove The jqLite element which we are going to replace. We keep\n     *                                  the shell, but replace its DOM node reference.\n     * @param {Node} newNode The new DOM node.\n     */\n    function replaceWith($rootElement, elementsToRemove, newNode) {\n      var firstElementToRemove = elementsToRemove[0],\n          removeCount = elementsToRemove.length,\n          parent = firstElementToRemove.parentNode,\n          i, ii;\n\n      if ($rootElement) {\n        for(i = 0, ii = $rootElement.length; i < ii; i++) {\n          if ($rootElement[i] == firstElementToRemove) {\n            $rootElement[i++] = newNode;\n            for (var j = i, j2 = j + removeCount - 1,\n                     jj = $rootElement.length;\n                 j < jj; j++, j2++) {\n              if (j2 < jj) {\n                $rootElement[j] = $rootElement[j2];\n              } else {\n                delete $rootElement[j];\n              }\n            }\n            $rootElement.length -= removeCount - 1;\n            break;\n          }\n        }\n      }\n\n      if (parent) {\n        parent.replaceChild(newNode, firstElementToRemove);\n      }\n      var fragment = document.createDocumentFragment();\n      fragment.appendChild(firstElementToRemove);\n      newNode[jqLite.expando] = firstElementToRemove[jqLite.expando];\n      for (var k = 1, kk = elementsToRemove.length; k < kk; k++) {\n        var element = elementsToRemove[k];\n        jqLite(element).remove(); // must do this way to clean up expando\n        fragment.appendChild(element);\n        delete elementsToRemove[k];\n      }\n\n      elementsToRemove[0] = newNode;\n      elementsToRemove.length = 1;\n    }\n\n\n    function cloneAndAnnotateFn(fn, annotation) {\n      return extend(function() { return fn.apply(null, arguments); }, fn, annotation);\n    }\n  }];\n}\n\nvar PREFIX_REGEXP = /^(x[\\:\\-_]|data[\\:\\-_])/i;\n/**\n * Converts all accepted directives format into proper directive name.\n * All of these will become 'myDirective':\n *   my:Directive\n *   my-directive\n *   x-my-directive\n *   data-my:directive\n *\n * Also there is special case for Moz prefix starting with upper case letter.\n * @param name Name to normalize\n */\nfunction directiveNormalize(name) {\n  return camelCase(name.replace(PREFIX_REGEXP, ''));\n}\n\n/**\n * @ngdoc type\n * @name $compile.directive.Attributes\n *\n * @description\n * A shared object between directive compile / linking functions which contains normalized DOM\n * element attributes. The values reflect current binding state `{{ }}`. The normalization is\n * needed since all of these are treated as equivalent in Angular:\n *\n * ```\n *    <span ng:bind=\"a\" ng-bind=\"a\" data-ng-bind=\"a\" x-ng-bind=\"a\">\n * ```\n */\n\n/**\n * @ngdoc property\n * @name $compile.directive.Attributes#$attr\n * @returns {object} A map of DOM element attribute names to the normalized name. This is\n *                   needed to do reverse lookup from normalized name back to actual name.\n */\n\n\n/**\n * @ngdoc method\n * @name $compile.directive.Attributes#$set\n * @kind function\n *\n * @description\n * Set DOM element attribute value.\n *\n *\n * @param {string} name Normalized element attribute name of the property to modify. The name is\n *          reverse-translated using the {@link ng.$compile.directive.Attributes#$attr $attr}\n *          property to the original name.\n * @param {string} value Value to set the attribute to. The value can be an interpolated string.\n */\n\n\n\n/**\n * Closure compiler type information\n */\n\nfunction nodesetLinkingFn(\n  /* angular.Scope */ scope,\n  /* NodeList */ nodeList,\n  /* Element */ rootElement,\n  /* function(Function) */ boundTranscludeFn\n){}\n\nfunction directiveLinkingFn(\n  /* nodesetLinkingFn */ nodesetLinkingFn,\n  /* angular.Scope */ scope,\n  /* Node */ node,\n  /* Element */ rootElement,\n  /* function(Function) */ boundTranscludeFn\n){}\n\nfunction tokenDifference(str1, str2) {\n  var values = '',\n      tokens1 = str1.split(/\\s+/),\n      tokens2 = str2.split(/\\s+/);\n\n  outer:\n  for(var i = 0; i < tokens1.length; i++) {\n    var token = tokens1[i];\n    for(var j = 0; j < tokens2.length; j++) {\n      if(token == tokens2[j]) continue outer;\n    }\n    values += (values.length > 0 ? ' ' : '') + token;\n  }\n  return values;\n}\n\n/**\n * @ngdoc provider\n * @name $controllerProvider\n * @description\n * The {@link ng.$controller $controller service} is used by Angular to create new\n * controllers.\n *\n * This provider allows controller registration via the\n * {@link ng.$controllerProvider#register register} method.\n */\nfunction $ControllerProvider() {\n  var controllers = {},\n      CNTRL_REG = /^(\\S+)(\\s+as\\s+(\\w+))?$/;\n\n\n  /**\n   * @ngdoc method\n   * @name $controllerProvider#register\n   * @param {string|Object} name Controller name, or an object map of controllers where the keys are\n   *    the names and the values are the constructors.\n   * @param {Function|Array} constructor Controller constructor fn (optionally decorated with DI\n   *    annotations in the array notation).\n   */\n  this.register = function(name, constructor) {\n    assertNotHasOwnProperty(name, 'controller');\n    if (isObject(name)) {\n      extend(controllers, name);\n    } else {\n      controllers[name] = constructor;\n    }\n  };\n\n\n  this.$get = ['$injector', '$window', function($injector, $window) {\n\n    /**\n     * @ngdoc service\n     * @name $controller\n     * @requires $injector\n     *\n     * @param {Function|string} constructor If called with a function then it's considered to be the\n     *    controller constructor function. Otherwise it's considered to be a string which is used\n     *    to retrieve the controller constructor using the following steps:\n     *\n     *    * check if a controller with given name is registered via `$controllerProvider`\n     *    * check if evaluating the string on the current scope returns a constructor\n     *    * check `window[constructor]` on the global `window` object\n     *\n     * @param {Object} locals Injection locals for Controller.\n     * @return {Object} Instance of given controller.\n     *\n     * @description\n     * `$controller` service is responsible for instantiating controllers.\n     *\n     * It's just a simple call to {@link auto.$injector $injector}, but extracted into\n     * a service, so that one can override this service with [BC version](https://gist.github.com/1649788).\n     */\n    return function(expression, locals) {\n      var instance, match, constructor, identifier;\n\n      if(isString(expression)) {\n        match = expression.match(CNTRL_REG),\n        constructor = match[1],\n        identifier = match[3];\n        expression = controllers.hasOwnProperty(constructor)\n            ? controllers[constructor]\n            : getter(locals.$scope, constructor, true) || getter($window, constructor, true);\n\n        assertArgFn(expression, constructor, true);\n      }\n\n      instance = $injector.instantiate(expression, locals);\n\n      if (identifier) {\n        if (!(locals && typeof locals.$scope == 'object')) {\n          throw minErr('$controller')('noscp',\n              \"Cannot export controller '{0}' as '{1}'! No $scope object provided via `locals`.\",\n              constructor || expression.name, identifier);\n        }\n\n        locals.$scope[identifier] = instance;\n      }\n\n      return instance;\n    };\n  }];\n}\n\n/**\n * @ngdoc service\n * @name $document\n * @requires $window\n *\n * @description\n * A {@link angular.element jQuery or jqLite} wrapper for the browser's `window.document` object.\n *\n * @example\n   <example>\n     <file name=\"index.html\">\n       <div ng-controller=\"MainCtrl\">\n         <p>$document title: <b ng-bind=\"title\"></b></p>\n         <p>window.document title: <b ng-bind=\"windowTitle\"></b></p>\n       </div>\n     </file>\n     <file name=\"script.js\">\n       function MainCtrl($scope, $document) {\n         $scope.title = $document[0].title;\n         $scope.windowTitle = angular.element(window.document)[0].title;\n       }\n     </file>\n   </example>\n */\nfunction $DocumentProvider(){\n  this.$get = ['$window', function(window){\n    return jqLite(window.document);\n  }];\n}\n\n/**\n * @ngdoc service\n * @name $exceptionHandler\n * @requires ng.$log\n *\n * @description\n * Any uncaught exception in angular expressions is delegated to this service.\n * The default implementation simply delegates to `$log.error` which logs it into\n * the browser console.\n *\n * In unit tests, if `angular-mocks.js` is loaded, this service is overridden by\n * {@link ngMock.$exceptionHandler mock $exceptionHandler} which aids in testing.\n *\n * ## Example:\n *\n * ```js\n *   angular.module('exceptionOverride', []).factory('$exceptionHandler', function () {\n *     return function (exception, cause) {\n *       exception.message += ' (caused by \"' + cause + '\")';\n *       throw exception;\n *     };\n *   });\n * ```\n *\n * This example will override the normal action of `$exceptionHandler`, to make angular\n * exceptions fail hard when they happen, instead of just logging to the console.\n *\n * @param {Error} exception Exception associated with the error.\n * @param {string=} cause optional information about the context in which\n *       the error was thrown.\n *\n */\nfunction $ExceptionHandlerProvider() {\n  this.$get = ['$log', function($log) {\n    return function(exception, cause) {\n      $log.error.apply($log, arguments);\n    };\n  }];\n}\n\n/**\n * Parse headers into key value object\n *\n * @param {string} headers Raw headers as a string\n * @returns {Object} Parsed headers as key value object\n */\nfunction parseHeaders(headers) {\n  var parsed = {}, key, val, i;\n\n  if (!headers) return parsed;\n\n  forEach(headers.split('\\n'), function(line) {\n    i = line.indexOf(':');\n    key = lowercase(trim(line.substr(0, i)));\n    val = trim(line.substr(i + 1));\n\n    if (key) {\n      if (parsed[key]) {\n        parsed[key] += ', ' + val;\n      } else {\n        parsed[key] = val;\n      }\n    }\n  });\n\n  return parsed;\n}\n\n\n/**\n * Returns a function that provides access to parsed headers.\n *\n * Headers are lazy parsed when first requested.\n * @see parseHeaders\n *\n * @param {(string|Object)} headers Headers to provide access to.\n * @returns {function(string=)} Returns a getter function which if called with:\n *\n *   - if called with single an argument returns a single header value or null\n *   - if called with no arguments returns an object containing all headers.\n */\nfunction headersGetter(headers) {\n  var headersObj = isObject(headers) ? headers : undefined;\n\n  return function(name) {\n    if (!headersObj) headersObj =  parseHeaders(headers);\n\n    if (name) {\n      return headersObj[lowercase(name)] || null;\n    }\n\n    return headersObj;\n  };\n}\n\n\n/**\n * Chain all given functions\n *\n * This function is used for both request and response transforming\n *\n * @param {*} data Data to transform.\n * @param {function(string=)} headers Http headers getter fn.\n * @param {(Function|Array.<Function>)} fns Function or an array of functions.\n * @returns {*} Transformed data.\n */\nfunction transformData(data, headers, fns) {\n  if (isFunction(fns))\n    return fns(data, headers);\n\n  forEach(fns, function(fn) {\n    data = fn(data, headers);\n  });\n\n  return data;\n}\n\n\nfunction isSuccess(status) {\n  return 200 <= status && status < 300;\n}\n\n\nfunction $HttpProvider() {\n  var JSON_START = /^\\s*(\\[|\\{[^\\{])/,\n      JSON_END = /[\\}\\]]\\s*$/,\n      PROTECTION_PREFIX = /^\\)\\]\\}',?\\n/,\n      CONTENT_TYPE_APPLICATION_JSON = {'Content-Type': 'application/json;charset=utf-8'};\n\n  var defaults = this.defaults = {\n    // transform incoming response data\n    transformResponse: [function(data) {\n      if (isString(data)) {\n        // strip json vulnerability protection prefix\n        data = data.replace(PROTECTION_PREFIX, '');\n        if (JSON_START.test(data) && JSON_END.test(data))\n          data = fromJson(data);\n      }\n      return data;\n    }],\n\n    // transform outgoing request data\n    transformRequest: [function(d) {\n      return isObject(d) && !isFile(d) && !isBlob(d) ? toJson(d) : d;\n    }],\n\n    // default headers\n    headers: {\n      common: {\n        'Accept': 'application/json, text/plain, */*'\n      },\n      post:   shallowCopy(CONTENT_TYPE_APPLICATION_JSON),\n      put:    shallowCopy(CONTENT_TYPE_APPLICATION_JSON),\n      patch:  shallowCopy(CONTENT_TYPE_APPLICATION_JSON)\n    },\n\n    xsrfCookieName: 'XSRF-TOKEN',\n    xsrfHeaderName: 'X-XSRF-TOKEN'\n  };\n\n  /**\n   * Are ordered by request, i.e. they are applied in the same order as the\n   * array, on request, but reverse order, on response.\n   */\n  var interceptorFactories = this.interceptors = [];\n\n  /**\n   * For historical reasons, response interceptors are ordered by the order in which\n   * they are applied to the response. (This is the opposite of interceptorFactories)\n   */\n  var responseInterceptorFactories = this.responseInterceptors = [];\n\n  this.$get = ['$httpBackend', '$browser', '$cacheFactory', '$rootScope', '$q', '$injector',\n      function($httpBackend, $browser, $cacheFactory, $rootScope, $q, $injector) {\n\n    var defaultCache = $cacheFactory('$http');\n\n    /**\n     * Interceptors stored in reverse order. Inner interceptors before outer interceptors.\n     * The reversal is needed so that we can build up the interception chain around the\n     * server request.\n     */\n    var reversedInterceptors = [];\n\n    forEach(interceptorFactories, function(interceptorFactory) {\n      reversedInterceptors.unshift(isString(interceptorFactory)\n          ? $injector.get(interceptorFactory) : $injector.invoke(interceptorFactory));\n    });\n\n    forEach(responseInterceptorFactories, function(interceptorFactory, index) {\n      var responseFn = isString(interceptorFactory)\n          ? $injector.get(interceptorFactory)\n          : $injector.invoke(interceptorFactory);\n\n      /**\n       * Response interceptors go before \"around\" interceptors (no real reason, just\n       * had to pick one.) But they are already reversed, so we can't use unshift, hence\n       * the splice.\n       */\n      reversedInterceptors.splice(index, 0, {\n        response: function(response) {\n          return responseFn($q.when(response));\n        },\n        responseError: function(response) {\n          return responseFn($q.reject(response));\n        }\n      });\n    });\n\n\n    /**\n     * @ngdoc service\n     * @kind function\n     * @name $http\n     * @requires ng.$httpBackend\n     * @requires $cacheFactory\n     * @requires $rootScope\n     * @requires $q\n     * @requires $injector\n     *\n     * @description\n     * The `$http` service is a core Angular service that facilitates communication with the remote\n     * HTTP servers via the browser's [XMLHttpRequest](https://developer.mozilla.org/en/xmlhttprequest)\n     * object or via [JSONP](http://en.wikipedia.org/wiki/JSONP).\n     *\n     * For unit testing applications that use `$http` service, see\n     * {@link ngMock.$httpBackend $httpBackend mock}.\n     *\n     * For a higher level of abstraction, please check out the {@link ngResource.$resource\n     * $resource} service.\n     *\n     * The $http API is based on the {@link ng.$q deferred/promise APIs} exposed by\n     * the $q service. While for simple usage patterns this doesn't matter much, for advanced usage\n     * it is important to familiarize yourself with these APIs and the guarantees they provide.\n     *\n     *\n     * # General usage\n     * The `$http` service is a function which takes a single argument — a configuration object —\n     * that is used to generate an HTTP request and returns  a {@link ng.$q promise}\n     * with two $http specific methods: `success` and `error`.\n     *\n     * ```js\n     *   $http({method: 'GET', url: '/someUrl'}).\n     *     success(function(data, status, headers, config) {\n     *       // this callback will be called asynchronously\n     *       // when the response is available\n     *     }).\n     *     error(function(data, status, headers, config) {\n     *       // called asynchronously if an error occurs\n     *       // or server returns response with an error status.\n     *     });\n     * ```\n     *\n     * Since the returned value of calling the $http function is a `promise`, you can also use\n     * the `then` method to register callbacks, and these callbacks will receive a single argument –\n     * an object representing the response. See the API signature and type info below for more\n     * details.\n     *\n     * A response status code between 200 and 299 is considered a success status and\n     * will result in the success callback being called. Note that if the response is a redirect,\n     * XMLHttpRequest will transparently follow it, meaning that the error callback will not be\n     * called for such responses.\n     *\n     * # Writing Unit Tests that use $http\n     * When unit testing (using {@link ngMock ngMock}), it is necessary to call\n     * {@link ngMock.$httpBackend#flush $httpBackend.flush()} to flush each pending\n     * request using trained responses.\n     *\n     * ```\n     * $httpBackend.expectGET(...);\n     * $http.get(...);\n     * $httpBackend.flush();\n     * ```\n     *\n     * # Shortcut methods\n     *\n     * Shortcut methods are also available. All shortcut methods require passing in the URL, and\n     * request data must be passed in for POST/PUT requests.\n     *\n     * ```js\n     *   $http.get('/someUrl').success(successCallback);\n     *   $http.post('/someUrl', data).success(successCallback);\n     * ```\n     *\n     * Complete list of shortcut methods:\n     *\n     * - {@link ng.$http#get $http.get}\n     * - {@link ng.$http#head $http.head}\n     * - {@link ng.$http#post $http.post}\n     * - {@link ng.$http#put $http.put}\n     * - {@link ng.$http#delete $http.delete}\n     * - {@link ng.$http#jsonp $http.jsonp}\n     *\n     *\n     * # Setting HTTP Headers\n     *\n     * The $http service will automatically add certain HTTP headers to all requests. These defaults\n     * can be fully configured by accessing the `$httpProvider.defaults.headers` configuration\n     * object, which currently contains this default configuration:\n     *\n     * - `$httpProvider.defaults.headers.common` (headers that are common for all requests):\n     *   - `Accept: application/json, text/plain, * / *`\n     * - `$httpProvider.defaults.headers.post`: (header defaults for POST requests)\n     *   - `Content-Type: application/json`\n     * - `$httpProvider.defaults.headers.put` (header defaults for PUT requests)\n     *   - `Content-Type: application/json`\n     *\n     * To add or overwrite these defaults, simply add or remove a property from these configuration\n     * objects. To add headers for an HTTP method other than POST or PUT, simply add a new object\n     * with the lowercased HTTP method name as the key, e.g.\n     * `$httpProvider.defaults.headers.get = { 'My-Header' : 'value' }.\n     *\n     * The defaults can also be set at runtime via the `$http.defaults` object in the same\n     * fashion. For example:\n     *\n     * ```\n     * module.run(function($http) {\n     *   $http.defaults.headers.common.Authorization = 'Basic YmVlcDpib29w'\n     * });\n     * ```\n     *\n     * In addition, you can supply a `headers` property in the config object passed when\n     * calling `$http(config)`, which overrides the defaults without changing them globally.\n     *\n     *\n     * # Transforming Requests and Responses\n     *\n     * Both requests and responses can be transformed using transform functions. By default, Angular\n     * applies these transformations:\n     *\n     * Request transformations:\n     *\n     * - If the `data` property of the request configuration object contains an object, serialize it\n     *   into JSON format.\n     *\n     * Response transformations:\n     *\n     *  - If XSRF prefix is detected, strip it (see Security Considerations section below).\n     *  - If JSON response is detected, deserialize it using a JSON parser.\n     *\n     * To globally augment or override the default transforms, modify the\n     * `$httpProvider.defaults.transformRequest` and `$httpProvider.defaults.transformResponse`\n     * properties. These properties are by default an array of transform functions, which allows you\n     * to `push` or `unshift` a new transformation function into the transformation chain. You can\n     * also decide to completely override any default transformations by assigning your\n     * transformation functions to these properties directly without the array wrapper.  These defaults\n     * are again available on the $http factory at run-time, which may be useful if you have run-time\n     * services you wish to be involved in your transformations.\n     *\n     * Similarly, to locally override the request/response transforms, augment the\n     * `transformRequest` and/or `transformResponse` properties of the configuration object passed\n     * into `$http`.\n     *\n     *\n     * # Caching\n     *\n     * To enable caching, set the request configuration `cache` property to `true` (to use default\n     * cache) or to a custom cache object (built with {@link ng.$cacheFactory `$cacheFactory`}).\n     * When the cache is enabled, `$http` stores the response from the server in the specified\n     * cache. The next time the same request is made, the response is served from the cache without\n     * sending a request to the server.\n     *\n     * Note that even if the response is served from cache, delivery of the data is asynchronous in\n     * the same way that real requests are.\n     *\n     * If there are multiple GET requests for the same URL that should be cached using the same\n     * cache, but the cache is not populated yet, only one request to the server will be made and\n     * the remaining requests will be fulfilled using the response from the first request.\n     *\n     * You can change the default cache to a new object (built with\n     * {@link ng.$cacheFactory `$cacheFactory`}) by updating the\n     * {@link ng.$http#properties_defaults `$http.defaults.cache`} property. All requests who set\n     * their `cache` property to `true` will now use this cache object.\n     *\n     * If you set the default cache to `false` then only requests that specify their own custom\n     * cache object will be cached.\n     *\n     * # Interceptors\n     *\n     * Before you start creating interceptors, be sure to understand the\n     * {@link ng.$q $q and deferred/promise APIs}.\n     *\n     * For purposes of global error handling, authentication, or any kind of synchronous or\n     * asynchronous pre-processing of request or postprocessing of responses, it is desirable to be\n     * able to intercept requests before they are handed to the server and\n     * responses before they are handed over to the application code that\n     * initiated these requests. The interceptors leverage the {@link ng.$q\n     * promise APIs} to fulfill this need for both synchronous and asynchronous pre-processing.\n     *\n     * The interceptors are service factories that are registered with the `$httpProvider` by\n     * adding them to the `$httpProvider.interceptors` array. The factory is called and\n     * injected with dependencies (if specified) and returns the interceptor.\n     *\n     * There are two kinds of interceptors (and two kinds of rejection interceptors):\n     *\n     *   * `request`: interceptors get called with a http `config` object. The function is free to\n     *     modify the `config` object or create a new one. The function needs to return the `config`\n     *     object directly, or a promise containing the `config` or a new `config` object.\n     *   * `requestError`: interceptor gets called when a previous interceptor threw an error or\n     *     resolved with a rejection.\n     *   * `response`: interceptors get called with http `response` object. The function is free to\n     *     modify the `response` object or create a new one. The function needs to return the `response`\n     *     object directly, or as a promise containing the `response` or a new `response` object.\n     *   * `responseError`: interceptor gets called when a previous interceptor threw an error or\n     *     resolved with a rejection.\n     *\n     *\n     * ```js\n     *   // register the interceptor as a service\n     *   $provide.factory('myHttpInterceptor', function($q, dependency1, dependency2) {\n     *     return {\n     *       // optional method\n     *       'request': function(config) {\n     *         // do something on success\n     *         return config;\n     *       },\n     *\n     *       // optional method\n     *      'requestError': function(rejection) {\n     *         // do something on error\n     *         if (canRecover(rejection)) {\n     *           return responseOrNewPromise\n     *         }\n     *         return $q.reject(rejection);\n     *       },\n     *\n     *\n     *\n     *       // optional method\n     *       'response': function(response) {\n     *         // do something on success\n     *         return response;\n     *       },\n     *\n     *       // optional method\n     *      'responseError': function(rejection) {\n     *         // do something on error\n     *         if (canRecover(rejection)) {\n     *           return responseOrNewPromise\n     *         }\n     *         return $q.reject(rejection);\n     *       }\n     *     };\n     *   });\n     *\n     *   $httpProvider.interceptors.push('myHttpInterceptor');\n     *\n     *\n     *   // alternatively, register the interceptor via an anonymous factory\n     *   $httpProvider.interceptors.push(function($q, dependency1, dependency2) {\n     *     return {\n     *      'request': function(config) {\n     *          // same as above\n     *       },\n     *\n     *       'response': function(response) {\n     *          // same as above\n     *       }\n     *     };\n     *   });\n     * ```\n     *\n     * # Response interceptors (DEPRECATED)\n     *\n     * Before you start creating interceptors, be sure to understand the\n     * {@link ng.$q $q and deferred/promise APIs}.\n     *\n     * For purposes of global error handling, authentication or any kind of synchronous or\n     * asynchronous preprocessing of received responses, it is desirable to be able to intercept\n     * responses for http requests before they are handed over to the application code that\n     * initiated these requests. The response interceptors leverage the {@link ng.$q\n     * promise apis} to fulfil this need for both synchronous and asynchronous preprocessing.\n     *\n     * The interceptors are service factories that are registered with the $httpProvider by\n     * adding them to the `$httpProvider.responseInterceptors` array. The factory is called and\n     * injected with dependencies (if specified) and returns the interceptor  — a function that\n     * takes a {@link ng.$q promise} and returns the original or a new promise.\n     *\n     * ```js\n     *   // register the interceptor as a service\n     *   $provide.factory('myHttpInterceptor', function($q, dependency1, dependency2) {\n     *     return function(promise) {\n     *       return promise.then(function(response) {\n     *         // do something on success\n     *         return response;\n     *       }, function(response) {\n     *         // do something on error\n     *         if (canRecover(response)) {\n     *           return responseOrNewPromise\n     *         }\n     *         return $q.reject(response);\n     *       });\n     *     }\n     *   });\n     *\n     *   $httpProvider.responseInterceptors.push('myHttpInterceptor');\n     *\n     *\n     *   // register the interceptor via an anonymous factory\n     *   $httpProvider.responseInterceptors.push(function($q, dependency1, dependency2) {\n     *     return function(promise) {\n     *       // same as above\n     *     }\n     *   });\n     * ```\n     *\n     *\n     * # Security Considerations\n     *\n     * When designing web applications, consider security threats from:\n     *\n     * - [JSON vulnerability](http://haacked.com/archive/2008/11/20/anatomy-of-a-subtle-json-vulnerability.aspx)\n     * - [XSRF](http://en.wikipedia.org/wiki/Cross-site_request_forgery)\n     *\n     * Both server and the client must cooperate in order to eliminate these threats. Angular comes\n     * pre-configured with strategies that address these issues, but for this to work backend server\n     * cooperation is required.\n     *\n     * ## JSON Vulnerability Protection\n     *\n     * A [JSON vulnerability](http://haacked.com/archive/2008/11/20/anatomy-of-a-subtle-json-vulnerability.aspx)\n     * allows third party website to turn your JSON resource URL into\n     * [JSONP](http://en.wikipedia.org/wiki/JSONP) request under some conditions. To\n     * counter this your server can prefix all JSON requests with following string `\")]}',\\n\"`.\n     * Angular will automatically strip the prefix before processing it as JSON.\n     *\n     * For example if your server needs to return:\n     * ```js\n     * ['one','two']\n     * ```\n     *\n     * which is vulnerable to attack, your server can return:\n     * ```js\n     * )]}',\n     * ['one','two']\n     * ```\n     *\n     * Angular will strip the prefix, before processing the JSON.\n     *\n     *\n     * ## Cross Site Request Forgery (XSRF) Protection\n     *\n     * [XSRF](http://en.wikipedia.org/wiki/Cross-site_request_forgery) is a technique by which\n     * an unauthorized site can gain your user's private data. Angular provides a mechanism\n     * to counter XSRF. When performing XHR requests, the $http service reads a token from a cookie\n     * (by default, `XSRF-TOKEN`) and sets it as an HTTP header (`X-XSRF-TOKEN`). Since only\n     * JavaScript that runs on your domain could read the cookie, your server can be assured that\n     * the XHR came from JavaScript running on your domain. The header will not be set for\n     * cross-domain requests.\n     *\n     * To take advantage of this, your server needs to set a token in a JavaScript readable session\n     * cookie called `XSRF-TOKEN` on the first HTTP GET request. On subsequent XHR requests the\n     * server can verify that the cookie matches `X-XSRF-TOKEN` HTTP header, and therefore be sure\n     * that only JavaScript running on your domain could have sent the request. The token must be\n     * unique for each user and must be verifiable by the server (to prevent the JavaScript from\n     * making up its own tokens). We recommend that the token is a digest of your site's\n     * authentication cookie with a [salt](https://en.wikipedia.org/wiki/Salt_(cryptography))\n     * for added security.\n     *\n     * The name of the headers can be specified using the xsrfHeaderName and xsrfCookieName\n     * properties of either $httpProvider.defaults at config-time, $http.defaults at run-time,\n     * or the per-request config object.\n     *\n     *\n     * @param {object} config Object describing the request to be made and how it should be\n     *    processed. The object has following properties:\n     *\n     *    - **method** – `{string}` – HTTP method (e.g. 'GET', 'POST', etc)\n     *    - **url** – `{string}` – Absolute or relative URL of the resource that is being requested.\n     *    - **params** – `{Object.<string|Object>}` – Map of strings or objects which will be turned\n     *      to `?key1=value1&key2=value2` after the url. If the value is not a string, it will be\n     *      JSONified.\n     *    - **data** – `{string|Object}` – Data to be sent as the request message data.\n     *    - **headers** – `{Object}` – Map of strings or functions which return strings representing\n     *      HTTP headers to send to the server. If the return value of a function is null, the\n     *      header will not be sent.\n     *    - **xsrfHeaderName** – `{string}` – Name of HTTP header to populate with the XSRF token.\n     *    - **xsrfCookieName** – `{string}` – Name of cookie containing the XSRF token.\n     *    - **transformRequest** –\n     *      `{function(data, headersGetter)|Array.<function(data, headersGetter)>}` –\n     *      transform function or an array of such functions. The transform function takes the http\n     *      request body and headers and returns its transformed (typically serialized) version.\n     *    - **transformResponse** –\n     *      `{function(data, headersGetter)|Array.<function(data, headersGetter)>}` –\n     *      transform function or an array of such functions. The transform function takes the http\n     *      response body and headers and returns its transformed (typically deserialized) version.\n     *    - **cache** – `{boolean|Cache}` – If true, a default $http cache will be used to cache the\n     *      GET request, otherwise if a cache instance built with\n     *      {@link ng.$cacheFactory $cacheFactory}, this cache will be used for\n     *      caching.\n     *    - **timeout** – `{number|Promise}` – timeout in milliseconds, or {@link ng.$q promise}\n     *      that should abort the request when resolved.\n     *    - **withCredentials** - `{boolean}` - whether to set the `withCredentials` flag on the\n     *      XHR object. See [requests with credentials]https://developer.mozilla.org/en/http_access_control#section_5\n     *      for more information.\n     *    - **responseType** - `{string}` - see\n     *      [requestType](https://developer.mozilla.org/en-US/docs/DOM/XMLHttpRequest#responseType).\n     *\n     * @returns {HttpPromise} Returns a {@link ng.$q promise} object with the\n     *   standard `then` method and two http specific methods: `success` and `error`. The `then`\n     *   method takes two arguments a success and an error callback which will be called with a\n     *   response object. The `success` and `error` methods take a single argument - a function that\n     *   will be called when the request succeeds or fails respectively. The arguments passed into\n     *   these functions are destructured representation of the response object passed into the\n     *   `then` method. The response object has these properties:\n     *\n     *   - **data** – `{string|Object}` – The response body transformed with the transform\n     *     functions.\n     *   - **status** – `{number}` – HTTP status code of the response.\n     *   - **headers** – `{function([headerName])}` – Header getter function.\n     *   - **config** – `{Object}` – The configuration object that was used to generate the request.\n     *   - **statusText** – `{string}` – HTTP status text of the response.\n     *\n     * @property {Array.<Object>} pendingRequests Array of config objects for currently pending\n     *   requests. This is primarily meant to be used for debugging purposes.\n     *\n     *\n     * @example\n<example>\n<file name=\"index.html\">\n  <div ng-controller=\"FetchCtrl\">\n    <select ng-model=\"method\">\n      <option>GET</option>\n      <option>JSONP</option>\n    </select>\n    <input type=\"text\" ng-model=\"url\" size=\"80\"/>\n    <button id=\"fetchbtn\" ng-click=\"fetch()\">fetch</button><br>\n    <button id=\"samplegetbtn\" ng-click=\"updateModel('GET', 'http-hello.html')\">Sample GET</button>\n    <button id=\"samplejsonpbtn\"\n      ng-click=\"updateModel('JSONP',\n                    'https://angularjs.org/greet.php?callback=JSON_CALLBACK&name=Super%20Hero')\">\n      Sample JSONP\n    </button>\n    <button id=\"invalidjsonpbtn\"\n      ng-click=\"updateModel('JSONP', 'https://angularjs.org/doesntexist&callback=JSON_CALLBACK')\">\n        Invalid JSONP\n      </button>\n    <pre>http status code: {{status}}</pre>\n    <pre>http response data: {{data}}</pre>\n  </div>\n</file>\n<file name=\"script.js\">\n  function FetchCtrl($scope, $http, $templateCache) {\n    $scope.method = 'GET';\n    $scope.url = 'http-hello.html';\n\n    $scope.fetch = function() {\n      $scope.code = null;\n      $scope.response = null;\n\n      $http({method: $scope.method, url: $scope.url, cache: $templateCache}).\n        success(function(data, status) {\n          $scope.status = status;\n          $scope.data = data;\n        }).\n        error(function(data, status) {\n          $scope.data = data || \"Request failed\";\n          $scope.status = status;\n      });\n    };\n\n    $scope.updateModel = function(method, url) {\n      $scope.method = method;\n      $scope.url = url;\n    };\n  }\n</file>\n<file name=\"http-hello.html\">\n  Hello, $http!\n</file>\n<file name=\"protractor.js\" type=\"protractor\">\n  var status = element(by.binding('status'));\n  var data = element(by.binding('data'));\n  var fetchBtn = element(by.id('fetchbtn'));\n  var sampleGetBtn = element(by.id('samplegetbtn'));\n  var sampleJsonpBtn = element(by.id('samplejsonpbtn'));\n  var invalidJsonpBtn = element(by.id('invalidjsonpbtn'));\n\n  it('should make an xhr GET request', function() {\n    sampleGetBtn.click();\n    fetchBtn.click();\n    expect(status.getText()).toMatch('200');\n    expect(data.getText()).toMatch(/Hello, \\$http!/);\n  });\n\n  it('should make a JSONP request to angularjs.org', function() {\n    sampleJsonpBtn.click();\n    fetchBtn.click();\n    expect(status.getText()).toMatch('200');\n    expect(data.getText()).toMatch(/Super Hero!/);\n  });\n\n  it('should make JSONP request to invalid URL and invoke the error handler',\n      function() {\n    invalidJsonpBtn.click();\n    fetchBtn.click();\n    expect(status.getText()).toMatch('0');\n    expect(data.getText()).toMatch('Request failed');\n  });\n</file>\n</example>\n     */\n    function $http(requestConfig) {\n      var config = {\n        method: 'get',\n        transformRequest: defaults.transformRequest,\n        transformResponse: defaults.transformResponse\n      };\n      var headers = mergeHeaders(requestConfig);\n\n      extend(config, requestConfig);\n      config.headers = headers;\n      config.method = uppercase(config.method);\n\n      var xsrfValue = urlIsSameOrigin(config.url)\n          ? $browser.cookies()[config.xsrfCookieName || defaults.xsrfCookieName]\n          : undefined;\n      if (xsrfValue) {\n        headers[(config.xsrfHeaderName || defaults.xsrfHeaderName)] = xsrfValue;\n      }\n\n\n      var serverRequest = function(config) {\n        headers = config.headers;\n        var reqData = transformData(config.data, headersGetter(headers), config.transformRequest);\n\n        // strip content-type if data is undefined\n        if (isUndefined(config.data)) {\n          forEach(headers, function(value, header) {\n            if (lowercase(header) === 'content-type') {\n                delete headers[header];\n            }\n          });\n        }\n\n        if (isUndefined(config.withCredentials) && !isUndefined(defaults.withCredentials)) {\n          config.withCredentials = defaults.withCredentials;\n        }\n\n        // send request\n        return sendReq(config, reqData, headers).then(transformResponse, transformResponse);\n      };\n\n      var chain = [serverRequest, undefined];\n      var promise = $q.when(config);\n\n      // apply interceptors\n      forEach(reversedInterceptors, function(interceptor) {\n        if (interceptor.request || interceptor.requestError) {\n          chain.unshift(interceptor.request, interceptor.requestError);\n        }\n        if (interceptor.response || interceptor.responseError) {\n          chain.push(interceptor.response, interceptor.responseError);\n        }\n      });\n\n      while(chain.length) {\n        var thenFn = chain.shift();\n        var rejectFn = chain.shift();\n\n        promise = promise.then(thenFn, rejectFn);\n      }\n\n      promise.success = function(fn) {\n        promise.then(function(response) {\n          fn(response.data, response.status, response.headers, config);\n        });\n        return promise;\n      };\n\n      promise.error = function(fn) {\n        promise.then(null, function(response) {\n          fn(response.data, response.status, response.headers, config);\n        });\n        return promise;\n      };\n\n      return promise;\n\n      function transformResponse(response) {\n        // make a copy since the response must be cacheable\n        var resp = extend({}, response, {\n          data: transformData(response.data, response.headers, config.transformResponse)\n        });\n        return (isSuccess(response.status))\n          ? resp\n          : $q.reject(resp);\n      }\n\n      function mergeHeaders(config) {\n        var defHeaders = defaults.headers,\n            reqHeaders = extend({}, config.headers),\n            defHeaderName, lowercaseDefHeaderName, reqHeaderName;\n\n        defHeaders = extend({}, defHeaders.common, defHeaders[lowercase(config.method)]);\n\n        // execute if header value is function\n        execHeaders(defHeaders);\n        execHeaders(reqHeaders);\n\n        // using for-in instead of forEach to avoid unecessary iteration after header has been found\n        defaultHeadersIteration:\n        for (defHeaderName in defHeaders) {\n          lowercaseDefHeaderName = lowercase(defHeaderName);\n\n          for (reqHeaderName in reqHeaders) {\n            if (lowercase(reqHeaderName) === lowercaseDefHeaderName) {\n              continue defaultHeadersIteration;\n            }\n          }\n\n          reqHeaders[defHeaderName] = defHeaders[defHeaderName];\n        }\n\n        return reqHeaders;\n\n        function execHeaders(headers) {\n          var headerContent;\n\n          forEach(headers, function(headerFn, header) {\n            if (isFunction(headerFn)) {\n              headerContent = headerFn();\n              if (headerContent != null) {\n                headers[header] = headerContent;\n              } else {\n                delete headers[header];\n              }\n            }\n          });\n        }\n      }\n    }\n\n    $http.pendingRequests = [];\n\n    /**\n     * @ngdoc method\n     * @name $http#get\n     *\n     * @description\n     * Shortcut method to perform `GET` request.\n     *\n     * @param {string} url Relative or absolute URL specifying the destination of the request\n     * @param {Object=} config Optional configuration object\n     * @returns {HttpPromise} Future object\n     */\n\n    /**\n     * @ngdoc method\n     * @name $http#delete\n     *\n     * @description\n     * Shortcut method to perform `DELETE` request.\n     *\n     * @param {string} url Relative or absolute URL specifying the destination of the request\n     * @param {Object=} config Optional configuration object\n     * @returns {HttpPromise} Future object\n     */\n\n    /**\n     * @ngdoc method\n     * @name $http#head\n     *\n     * @description\n     * Shortcut method to perform `HEAD` request.\n     *\n     * @param {string} url Relative or absolute URL specifying the destination of the request\n     * @param {Object=} config Optional configuration object\n     * @returns {HttpPromise} Future object\n     */\n\n    /**\n     * @ngdoc method\n     * @name $http#jsonp\n     *\n     * @description\n     * Shortcut method to perform `JSONP` request.\n     *\n     * @param {string} url Relative or absolute URL specifying the destination of the request.\n     *                     Should contain `JSON_CALLBACK` string.\n     * @param {Object=} config Optional configuration object\n     * @returns {HttpPromise} Future object\n     */\n    createShortMethods('get', 'delete', 'head', 'jsonp');\n\n    /**\n     * @ngdoc method\n     * @name $http#post\n     *\n     * @description\n     * Shortcut method to perform `POST` request.\n     *\n     * @param {string} url Relative or absolute URL specifying the destination of the request\n     * @param {*} data Request content\n     * @param {Object=} config Optional configuration object\n     * @returns {HttpPromise} Future object\n     */\n\n    /**\n     * @ngdoc method\n     * @name $http#put\n     *\n     * @description\n     * Shortcut method to perform `PUT` request.\n     *\n     * @param {string} url Relative or absolute URL specifying the destination of the request\n     * @param {*} data Request content\n     * @param {Object=} config Optional configuration object\n     * @returns {HttpPromise} Future object\n     */\n    createShortMethodsWithData('post', 'put');\n\n        /**\n         * @ngdoc property\n         * @name $http#defaults\n         *\n         * @description\n         * Runtime equivalent of the `$httpProvider.defaults` property. Allows configuration of\n         * default headers, withCredentials as well as request and response transformations.\n         *\n         * See \"Setting HTTP Headers\" and \"Transforming Requests and Responses\" sections above.\n         */\n    $http.defaults = defaults;\n\n\n    return $http;\n\n\n    function createShortMethods(names) {\n      forEach(arguments, function(name) {\n        $http[name] = function(url, config) {\n          return $http(extend(config || {}, {\n            method: name,\n            url: url\n          }));\n        };\n      });\n    }\n\n\n    function createShortMethodsWithData(name) {\n      forEach(arguments, function(name) {\n        $http[name] = function(url, data, config) {\n          return $http(extend(config || {}, {\n            method: name,\n            url: url,\n            data: data\n          }));\n        };\n      });\n    }\n\n\n    /**\n     * Makes the request.\n     *\n     * !!! ACCESSES CLOSURE VARS:\n     * $httpBackend, defaults, $log, $rootScope, defaultCache, $http.pendingRequests\n     */\n    function sendReq(config, reqData, reqHeaders) {\n      var deferred = $q.defer(),\n          promise = deferred.promise,\n          cache,\n          cachedResp,\n          url = buildUrl(config.url, config.params);\n\n      $http.pendingRequests.push(config);\n      promise.then(removePendingReq, removePendingReq);\n\n\n      if ((config.cache || defaults.cache) && config.cache !== false && config.method == 'GET') {\n        cache = isObject(config.cache) ? config.cache\n              : isObject(defaults.cache) ? defaults.cache\n              : defaultCache;\n      }\n\n      if (cache) {\n        cachedResp = cache.get(url);\n        if (isDefined(cachedResp)) {\n          if (cachedResp.then) {\n            // cached request has already been sent, but there is no response yet\n            cachedResp.then(removePendingReq, removePendingReq);\n            return cachedResp;\n          } else {\n            // serving from cache\n            if (isArray(cachedResp)) {\n              resolvePromise(cachedResp[1], cachedResp[0], shallowCopy(cachedResp[2]), cachedResp[3]);\n            } else {\n              resolvePromise(cachedResp, 200, {}, 'OK');\n            }\n          }\n        } else {\n          // put the promise for the non-transformed response into cache as a placeholder\n          cache.put(url, promise);\n        }\n      }\n\n      // if we won't have the response in cache, send the request to the backend\n      if (isUndefined(cachedResp)) {\n        $httpBackend(config.method, url, reqData, done, reqHeaders, config.timeout,\n            config.withCredentials, config.responseType);\n      }\n\n      return promise;\n\n\n      /**\n       * Callback registered to $httpBackend():\n       *  - caches the response if desired\n       *  - resolves the raw $http promise\n       *  - calls $apply\n       */\n      function done(status, response, headersString, statusText) {\n        if (cache) {\n          if (isSuccess(status)) {\n            cache.put(url, [status, response, parseHeaders(headersString), statusText]);\n          } else {\n            // remove promise from the cache\n            cache.remove(url);\n          }\n        }\n\n        resolvePromise(response, status, headersString, statusText);\n        if (!$rootScope.$$phase) $rootScope.$apply();\n      }\n\n\n      /**\n       * Resolves the raw $http promise.\n       */\n      function resolvePromise(response, status, headers, statusText) {\n        // normalize internal statuses to 0\n        status = Math.max(status, 0);\n\n        (isSuccess(status) ? deferred.resolve : deferred.reject)({\n          data: response,\n          status: status,\n          headers: headersGetter(headers),\n          config: config,\n          statusText : statusText\n        });\n      }\n\n\n      function removePendingReq() {\n        var idx = indexOf($http.pendingRequests, config);\n        if (idx !== -1) $http.pendingRequests.splice(idx, 1);\n      }\n    }\n\n\n    function buildUrl(url, params) {\n          if (!params) return url;\n          var parts = [];\n          forEachSorted(params, function(value, key) {\n            if (value === null || isUndefined(value)) return;\n            if (!isArray(value)) value = [value];\n\n            forEach(value, function(v) {\n              if (isObject(v)) {\n                v = toJson(v);\n              }\n              parts.push(encodeUriQuery(key) + '=' +\n                         encodeUriQuery(v));\n            });\n          });\n          if(parts.length > 0) {\n            url += ((url.indexOf('?') == -1) ? '?' : '&') + parts.join('&');\n          }\n          return url;\n        }\n\n\n  }];\n}\n\nfunction createXhr(method) {\n    //if IE and the method is not RFC2616 compliant, or if XMLHttpRequest\n    //is not available, try getting an ActiveXObject. Otherwise, use XMLHttpRequest\n    //if it is available\n    if (msie <= 8 && (!method.match(/^(get|post|head|put|delete|options)$/i) ||\n      !window.XMLHttpRequest)) {\n      return new window.ActiveXObject(\"Microsoft.XMLHTTP\");\n    } else if (window.XMLHttpRequest) {\n      return new window.XMLHttpRequest();\n    }\n\n    throw minErr('$httpBackend')('noxhr', \"This browser does not support XMLHttpRequest.\");\n}\n\n/**\n * @ngdoc service\n * @name $httpBackend\n * @requires $window\n * @requires $document\n *\n * @description\n * HTTP backend used by the {@link ng.$http service} that delegates to\n * XMLHttpRequest object or JSONP and deals with browser incompatibilities.\n *\n * You should never need to use this service directly, instead use the higher-level abstractions:\n * {@link ng.$http $http} or {@link ngResource.$resource $resource}.\n *\n * During testing this implementation is swapped with {@link ngMock.$httpBackend mock\n * $httpBackend} which can be trained with responses.\n */\nfunction $HttpBackendProvider() {\n  this.$get = ['$browser', '$window', '$document', function($browser, $window, $document) {\n    return createHttpBackend($browser, createXhr, $browser.defer, $window.angular.callbacks, $document[0]);\n  }];\n}\n\nfunction createHttpBackend($browser, createXhr, $browserDefer, callbacks, rawDocument) {\n  var ABORTED = -1;\n\n  // TODO(vojta): fix the signature\n  return function(method, url, post, callback, headers, timeout, withCredentials, responseType) {\n    var status;\n    $browser.$$incOutstandingRequestCount();\n    url = url || $browser.url();\n\n    if (lowercase(method) == 'jsonp') {\n      var callbackId = '_' + (callbacks.counter++).toString(36);\n      callbacks[callbackId] = function(data) {\n        callbacks[callbackId].data = data;\n        callbacks[callbackId].called = true;\n      };\n\n      var jsonpDone = jsonpReq(url.replace('JSON_CALLBACK', 'angular.callbacks.' + callbackId),\n          callbackId, function(status, text) {\n        completeRequest(callback, status, callbacks[callbackId].data, \"\", text);\n        callbacks[callbackId] = noop;\n      });\n    } else {\n\n      var xhr = createXhr(method);\n\n      xhr.open(method, url, true);\n      forEach(headers, function(value, key) {\n        if (isDefined(value)) {\n            xhr.setRequestHeader(key, value);\n        }\n      });\n\n      // In IE6 and 7, this might be called synchronously when xhr.send below is called and the\n      // response is in the cache. the promise api will ensure that to the app code the api is\n      // always async\n      xhr.onreadystatechange = function() {\n        // onreadystatechange might get called multiple times with readyState === 4 on mobile webkit caused by\n        // xhrs that are resolved while the app is in the background (see #5426).\n        // since calling completeRequest sets the `xhr` variable to null, we just check if it's not null before\n        // continuing\n        //\n        // we can't set xhr.onreadystatechange to undefined or delete it because that breaks IE8 (method=PATCH) and\n        // Safari respectively.\n        if (xhr && xhr.readyState == 4) {\n          var responseHeaders = null,\n              response = null;\n\n          if(status !== ABORTED) {\n            responseHeaders = xhr.getAllResponseHeaders();\n\n            // responseText is the old-school way of retrieving response (supported by IE8 & 9)\n            // response/responseType properties were introduced in XHR Level2 spec (supported by IE10)\n            response = ('response' in xhr) ? xhr.response : xhr.responseText;\n          }\n\n          completeRequest(callback,\n              status || xhr.status,\n              response,\n              responseHeaders,\n              xhr.statusText || '');\n        }\n      };\n\n      if (withCredentials) {\n        xhr.withCredentials = true;\n      }\n\n      if (responseType) {\n        try {\n          xhr.responseType = responseType;\n        } catch (e) {\n          // WebKit added support for the json responseType value on 09/03/2013\n          // https://bugs.webkit.org/show_bug.cgi?id=73648. Versions of Safari prior to 7 are\n          // known to throw when setting the value \"json\" as the response type. Other older\n          // browsers implementing the responseType\n          //\n          // The json response type can be ignored if not supported, because JSON payloads are\n          // parsed on the client-side regardless.\n          if (responseType !== 'json') {\n            throw e;\n          }\n        }\n      }\n\n      xhr.send(post || null);\n    }\n\n    if (timeout > 0) {\n      var timeoutId = $browserDefer(timeoutRequest, timeout);\n    } else if (timeout && timeout.then) {\n      timeout.then(timeoutRequest);\n    }\n\n\n    function timeoutRequest() {\n      status = ABORTED;\n      jsonpDone && jsonpDone();\n      xhr && xhr.abort();\n    }\n\n    function completeRequest(callback, status, response, headersString, statusText) {\n      // cancel timeout and subsequent timeout promise resolution\n      timeoutId && $browserDefer.cancel(timeoutId);\n      jsonpDone = xhr = null;\n\n      // fix status code when it is 0 (0 status is undocumented).\n      // Occurs when accessing file resources or on Android 4.1 stock browser\n      // while retrieving files from application cache.\n      if (status === 0) {\n        status = response ? 200 : urlResolve(url).protocol == 'file' ? 404 : 0;\n      }\n\n      // normalize IE bug (http://bugs.jquery.com/ticket/1450)\n      status = status === 1223 ? 204 : status;\n      statusText = statusText || '';\n\n      callback(status, response, headersString, statusText);\n      $browser.$$completeOutstandingRequest(noop);\n    }\n  };\n\n  function jsonpReq(url, callbackId, done) {\n    // we can't use jQuery/jqLite here because jQuery does crazy shit with script elements, e.g.:\n    // - fetches local scripts via XHR and evals them\n    // - adds and immediately removes script elements from the document\n    var script = rawDocument.createElement('script'), callback = null;\n    script.type = \"text/javascript\";\n    script.src = url;\n    script.async = true;\n\n    callback = function(event) {\n      removeEventListenerFn(script, \"load\", callback);\n      removeEventListenerFn(script, \"error\", callback);\n      rawDocument.body.removeChild(script);\n      script = null;\n      var status = -1;\n      var text = \"unknown\";\n\n      if (event) {\n        if (event.type === \"load\" && !callbacks[callbackId].called) {\n          event = { type: \"error\" };\n        }\n        text = event.type;\n        status = event.type === \"error\" ? 404 : 200;\n      }\n\n      if (done) {\n        done(status, text);\n      }\n    };\n\n    addEventListenerFn(script, \"load\", callback);\n    addEventListenerFn(script, \"error\", callback);\n\n    if (msie <= 8) {\n      script.onreadystatechange = function() {\n        if (isString(script.readyState) && /loaded|complete/.test(script.readyState)) {\n          script.onreadystatechange = null;\n          callback({\n            type: 'load'\n          });\n        }\n      };\n    }\n\n    rawDocument.body.appendChild(script);\n    return callback;\n  }\n}\n\nvar $interpolateMinErr = minErr('$interpolate');\n\n/**\n * @ngdoc provider\n * @name $interpolateProvider\n * @kind function\n *\n * @description\n *\n * Used for configuring the interpolation markup. Defaults to `{{` and `}}`.\n *\n * @example\n<example module=\"customInterpolationApp\">\n<file name=\"index.html\">\n<script>\n  var customInterpolationApp = angular.module('customInterpolationApp', []);\n\n  customInterpolationApp.config(function($interpolateProvider) {\n    $interpolateProvider.startSymbol('//');\n    $interpolateProvider.endSymbol('//');\n  });\n\n\n  customInterpolationApp.controller('DemoController', function() {\n      this.label = \"This binding is brought you by // interpolation symbols.\";\n  });\n</script>\n<div ng-app=\"App\" ng-controller=\"DemoController as demo\">\n    //demo.label//\n</div>\n</file>\n<file name=\"protractor.js\" type=\"protractor\">\n  it('should interpolate binding with custom symbols', function() {\n    expect(element(by.binding('demo.label')).getText()).toBe('This binding is brought you by // interpolation symbols.');\n  });\n</file>\n</example>\n */\nfunction $InterpolateProvider() {\n  var startSymbol = '{{';\n  var endSymbol = '}}';\n\n  /**\n   * @ngdoc method\n   * @name $interpolateProvider#startSymbol\n   * @description\n   * Symbol to denote start of expression in the interpolated string. Defaults to `{{`.\n   *\n   * @param {string=} value new value to set the starting symbol to.\n   * @returns {string|self} Returns the symbol when used as getter and self if used as setter.\n   */\n  this.startSymbol = function(value){\n    if (value) {\n      startSymbol = value;\n      return this;\n    } else {\n      return startSymbol;\n    }\n  };\n\n  /**\n   * @ngdoc method\n   * @name $interpolateProvider#endSymbol\n   * @description\n   * Symbol to denote the end of expression in the interpolated string. Defaults to `}}`.\n   *\n   * @param {string=} value new value to set the ending symbol to.\n   * @returns {string|self} Returns the symbol when used as getter and self if used as setter.\n   */\n  this.endSymbol = function(value){\n    if (value) {\n      endSymbol = value;\n      return this;\n    } else {\n      return endSymbol;\n    }\n  };\n\n\n  this.$get = ['$parse', '$exceptionHandler', '$sce', function($parse, $exceptionHandler, $sce) {\n    var startSymbolLength = startSymbol.length,\n        endSymbolLength = endSymbol.length;\n\n    /**\n     * @ngdoc service\n     * @name $interpolate\n     * @kind function\n     *\n     * @requires $parse\n     * @requires $sce\n     *\n     * @description\n     *\n     * Compiles a string with markup into an interpolation function. This service is used by the\n     * HTML {@link ng.$compile $compile} service for data binding. See\n     * {@link ng.$interpolateProvider $interpolateProvider} for configuring the\n     * interpolation markup.\n     *\n     *\n     * ```js\n     *   var $interpolate = ...; // injected\n     *   var exp = $interpolate('Hello {{name | uppercase}}!');\n     *   expect(exp({name:'Angular'}).toEqual('Hello ANGULAR!');\n     * ```\n     *\n     *\n     * @param {string} text The text with markup to interpolate.\n     * @param {boolean=} mustHaveExpression if set to true then the interpolation string must have\n     *    embedded expression in order to return an interpolation function. Strings with no\n     *    embedded expression will return null for the interpolation function.\n     * @param {string=} trustedContext when provided, the returned function passes the interpolated\n     *    result through {@link ng.$sce#getTrusted $sce.getTrusted(interpolatedResult,\n     *    trustedContext)} before returning it.  Refer to the {@link ng.$sce $sce} service that\n     *    provides Strict Contextual Escaping for details.\n     * @returns {function(context)} an interpolation function which is used to compute the\n     *    interpolated string. The function has these parameters:\n     *\n     *    * `context`: an object against which any expressions embedded in the strings are evaluated\n     *      against.\n     *\n     */\n    function $interpolate(text, mustHaveExpression, trustedContext) {\n      var startIndex,\n          endIndex,\n          index = 0,\n          parts = [],\n          length = text.length,\n          hasInterpolation = false,\n          fn,\n          exp,\n          concat = [];\n\n      while(index < length) {\n        if ( ((startIndex = text.indexOf(startSymbol, index)) != -1) &&\n             ((endIndex = text.indexOf(endSymbol, startIndex + startSymbolLength)) != -1) ) {\n          (index != startIndex) && parts.push(text.substring(index, startIndex));\n          parts.push(fn = $parse(exp = text.substring(startIndex + startSymbolLength, endIndex)));\n          fn.exp = exp;\n          index = endIndex + endSymbolLength;\n          hasInterpolation = true;\n        } else {\n          // we did not find anything, so we have to add the remainder to the parts array\n          (index != length) && parts.push(text.substring(index));\n          index = length;\n        }\n      }\n\n      if (!(length = parts.length)) {\n        // we added, nothing, must have been an empty string.\n        parts.push('');\n        length = 1;\n      }\n\n      // Concatenating expressions makes it hard to reason about whether some combination of\n      // concatenated values are unsafe to use and could easily lead to XSS.  By requiring that a\n      // single expression be used for iframe[src], object[src], etc., we ensure that the value\n      // that's used is assigned or constructed by some JS code somewhere that is more testable or\n      // make it obvious that you bound the value to some user controlled value.  This helps reduce\n      // the load when auditing for XSS issues.\n      if (trustedContext && parts.length > 1) {\n          throw $interpolateMinErr('noconcat',\n              \"Error while interpolating: {0}\\nStrict Contextual Escaping disallows \" +\n              \"interpolations that concatenate multiple expressions when a trusted value is \" +\n              \"required.  See http://docs.angularjs.org/api/ng.$sce\", text);\n      }\n\n      if (!mustHaveExpression  || hasInterpolation) {\n        concat.length = length;\n        fn = function(context) {\n          try {\n            for(var i = 0, ii = length, part; i<ii; i++) {\n              if (typeof (part = parts[i]) == 'function') {\n                part = part(context);\n                if (trustedContext) {\n                  part = $sce.getTrusted(trustedContext, part);\n                } else {\n                  part = $sce.valueOf(part);\n                }\n                if (part == null) { // null || undefined\n                  part = '';\n                } else {\n                  switch (typeof part) {\n                    case 'string':\n                    {\n                      break;\n                    }\n                    case 'number':\n                    {\n                      part = '' + part;\n                      break;\n                    }\n                    default:\n                    {\n                      part = toJson(part);\n                    }\n                  }\n                }\n              }\n              concat[i] = part;\n            }\n            return concat.join('');\n          }\n          catch(err) {\n            var newErr = $interpolateMinErr('interr', \"Can't interpolate: {0}\\n{1}\", text,\n                err.toString());\n            $exceptionHandler(newErr);\n          }\n        };\n        fn.exp = text;\n        fn.parts = parts;\n        return fn;\n      }\n    }\n\n\n    /**\n     * @ngdoc method\n     * @name $interpolate#startSymbol\n     * @description\n     * Symbol to denote the start of expression in the interpolated string. Defaults to `{{`.\n     *\n     * Use {@link ng.$interpolateProvider#startSymbol $interpolateProvider#startSymbol} to change\n     * the symbol.\n     *\n     * @returns {string} start symbol.\n     */\n    $interpolate.startSymbol = function() {\n      return startSymbol;\n    };\n\n\n    /**\n     * @ngdoc method\n     * @name $interpolate#endSymbol\n     * @description\n     * Symbol to denote the end of expression in the interpolated string. Defaults to `}}`.\n     *\n     * Use {@link ng.$interpolateProvider#endSymbol $interpolateProvider#endSymbol} to change\n     * the symbol.\n     *\n     * @returns {string} end symbol.\n     */\n    $interpolate.endSymbol = function() {\n      return endSymbol;\n    };\n\n    return $interpolate;\n  }];\n}\n\nfunction $IntervalProvider() {\n  this.$get = ['$rootScope', '$window', '$q',\n       function($rootScope,   $window,   $q) {\n    var intervals = {};\n\n\n     /**\n      * @ngdoc service\n      * @name $interval\n      *\n      * @description\n      * Angular's wrapper for `window.setInterval`. The `fn` function is executed every `delay`\n      * milliseconds.\n      *\n      * The return value of registering an interval function is a promise. This promise will be\n      * notified upon each tick of the interval, and will be resolved after `count` iterations, or\n      * run indefinitely if `count` is not defined. The value of the notification will be the\n      * number of iterations that have run.\n      * To cancel an interval, call `$interval.cancel(promise)`.\n      *\n      * In tests you can use {@link ngMock.$interval#flush `$interval.flush(millis)`} to\n      * move forward by `millis` milliseconds and trigger any functions scheduled to run in that\n      * time.\n      *\n      * <div class=\"alert alert-warning\">\n      * **Note**: Intervals created by this service must be explicitly destroyed when you are finished\n      * with them.  In particular they are not automatically destroyed when a controller's scope or a\n      * directive's element are destroyed.\n      * You should take this into consideration and make sure to always cancel the interval at the\n      * appropriate moment.  See the example below for more details on how and when to do this.\n      * </div>\n      *\n      * @param {function()} fn A function that should be called repeatedly.\n      * @param {number} delay Number of milliseconds between each function call.\n      * @param {number=} [count=0] Number of times to repeat. If not set, or 0, will repeat\n      *   indefinitely.\n      * @param {boolean=} [invokeApply=true] If set to `false` skips model dirty checking, otherwise\n      *   will invoke `fn` within the {@link ng.$rootScope.Scope#$apply $apply} block.\n      * @returns {promise} A promise which will be notified on each iteration.\n      *\n      * @example\n      * <example module=\"time\">\n      *   <file name=\"index.html\">\n      *     <script>\n      *       function Ctrl2($scope,$interval) {\n      *         $scope.format = 'M/d/yy h:mm:ss a';\n      *         $scope.blood_1 = 100;\n      *         $scope.blood_2 = 120;\n      *\n      *         var stop;\n      *         $scope.fight = function() {\n      *           // Don't start a new fight if we are already fighting\n      *           if ( angular.isDefined(stop) ) return;\n      *\n      *           stop = $interval(function() {\n      *             if ($scope.blood_1 > 0 && $scope.blood_2 > 0) {\n      *                 $scope.blood_1 = $scope.blood_1 - 3;\n      *                 $scope.blood_2 = $scope.blood_2 - 4;\n      *             } else {\n      *                 $scope.stopFight();\n      *             }\n      *           }, 100);\n      *         };\n      *\n      *         $scope.stopFight = function() {\n      *           if (angular.isDefined(stop)) {\n      *             $interval.cancel(stop);\n      *             stop = undefined;\n      *           }\n      *         };\n      *\n      *         $scope.resetFight = function() {\n      *           $scope.blood_1 = 100;\n      *           $scope.blood_2 = 120;\n      *         }\n      *\n      *         $scope.$on('$destroy', function() {\n      *           // Make sure that the interval is destroyed too\n      *           $scope.stopFight();\n      *         });\n      *       }\n      *\n      *       angular.module('time', [])\n      *         // Register the 'myCurrentTime' directive factory method.\n      *         // We inject $interval and dateFilter service since the factory method is DI.\n      *         .directive('myCurrentTime', function($interval, dateFilter) {\n      *           // return the directive link function. (compile function not needed)\n      *           return function(scope, element, attrs) {\n      *             var format,  // date format\n      *             stopTime; // so that we can cancel the time updates\n      *\n      *             // used to update the UI\n      *             function updateTime() {\n      *               element.text(dateFilter(new Date(), format));\n      *             }\n      *\n      *             // watch the expression, and update the UI on change.\n      *             scope.$watch(attrs.myCurrentTime, function(value) {\n      *               format = value;\n      *               updateTime();\n      *             });\n      *\n      *             stopTime = $interval(updateTime, 1000);\n      *\n      *             // listen on DOM destroy (removal) event, and cancel the next UI update\n      *             // to prevent updating time ofter the DOM element was removed.\n      *             element.bind('$destroy', function() {\n      *               $interval.cancel(stopTime);\n      *             });\n      *           }\n      *         });\n      *     </script>\n      *\n      *     <div>\n      *       <div ng-controller=\"Ctrl2\">\n      *         Date format: <input ng-model=\"format\"> <hr/>\n      *         Current time is: <span my-current-time=\"format\"></span>\n      *         <hr/>\n      *         Blood 1 : <font color='red'>{{blood_1}}</font>\n      *         Blood 2 : <font color='red'>{{blood_2}}</font>\n      *         <button type=\"button\" data-ng-click=\"fight()\">Fight</button>\n      *         <button type=\"button\" data-ng-click=\"stopFight()\">StopFight</button>\n      *         <button type=\"button\" data-ng-click=\"resetFight()\">resetFight</button>\n      *       </div>\n      *     </div>\n      *\n      *   </file>\n      * </example>\n      */\n    function interval(fn, delay, count, invokeApply) {\n      var setInterval = $window.setInterval,\n          clearInterval = $window.clearInterval,\n          deferred = $q.defer(),\n          promise = deferred.promise,\n          iteration = 0,\n          skipApply = (isDefined(invokeApply) && !invokeApply);\n\n      count = isDefined(count) ? count : 0;\n\n      promise.then(null, null, fn);\n\n      promise.$$intervalId = setInterval(function tick() {\n        deferred.notify(iteration++);\n\n        if (count > 0 && iteration >= count) {\n          deferred.resolve(iteration);\n          clearInterval(promise.$$intervalId);\n          delete intervals[promise.$$intervalId];\n        }\n\n        if (!skipApply) $rootScope.$apply();\n\n      }, delay);\n\n      intervals[promise.$$intervalId] = deferred;\n\n      return promise;\n    }\n\n\n     /**\n      * @ngdoc method\n      * @name $interval#cancel\n      *\n      * @description\n      * Cancels a task associated with the `promise`.\n      *\n      * @param {promise} promise returned by the `$interval` function.\n      * @returns {boolean} Returns `true` if the task was successfully canceled.\n      */\n    interval.cancel = function(promise) {\n      if (promise && promise.$$intervalId in intervals) {\n        intervals[promise.$$intervalId].reject('canceled');\n        clearInterval(promise.$$intervalId);\n        delete intervals[promise.$$intervalId];\n        return true;\n      }\n      return false;\n    };\n\n    return interval;\n  }];\n}\n\n/**\n * @ngdoc service\n * @name $locale\n *\n * @description\n * $locale service provides localization rules for various Angular components. As of right now the\n * only public api is:\n *\n * * `id` – `{string}` – locale id formatted as `languageId-countryId` (e.g. `en-us`)\n */\nfunction $LocaleProvider(){\n  this.$get = function() {\n    return {\n      id: 'en-us',\n\n      NUMBER_FORMATS: {\n        DECIMAL_SEP: '.',\n        GROUP_SEP: ',',\n        PATTERNS: [\n          { // Decimal Pattern\n            minInt: 1,\n            minFrac: 0,\n            maxFrac: 3,\n            posPre: '',\n            posSuf: '',\n            negPre: '-',\n            negSuf: '',\n            gSize: 3,\n            lgSize: 3\n          },{ //Currency Pattern\n            minInt: 1,\n            minFrac: 2,\n            maxFrac: 2,\n            posPre: '\\u00A4',\n            posSuf: '',\n            negPre: '(\\u00A4',\n            negSuf: ')',\n            gSize: 3,\n            lgSize: 3\n          }\n        ],\n        CURRENCY_SYM: '$'\n      },\n\n      DATETIME_FORMATS: {\n        MONTH:\n            'January,February,March,April,May,June,July,August,September,October,November,December'\n            .split(','),\n        SHORTMONTH:  'Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec'.split(','),\n        DAY: 'Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday'.split(','),\n        SHORTDAY: 'Sun,Mon,Tue,Wed,Thu,Fri,Sat'.split(','),\n        AMPMS: ['AM','PM'],\n        medium: 'MMM d, y h:mm:ss a',\n        short: 'M/d/yy h:mm a',\n        fullDate: 'EEEE, MMMM d, y',\n        longDate: 'MMMM d, y',\n        mediumDate: 'MMM d, y',\n        shortDate: 'M/d/yy',\n        mediumTime: 'h:mm:ss a',\n        shortTime: 'h:mm a'\n      },\n\n      pluralCat: function(num) {\n        if (num === 1) {\n          return 'one';\n        }\n        return 'other';\n      }\n    };\n  };\n}\n\nvar PATH_MATCH = /^([^\\?#]*)(\\?([^#]*))?(#(.*))?$/,\n    DEFAULT_PORTS = {'http': 80, 'https': 443, 'ftp': 21};\nvar $locationMinErr = minErr('$location');\n\n\n/**\n * Encode path using encodeUriSegment, ignoring forward slashes\n *\n * @param {string} path Path to encode\n * @returns {string}\n */\nfunction encodePath(path) {\n  var segments = path.split('/'),\n      i = segments.length;\n\n  while (i--) {\n    segments[i] = encodeUriSegment(segments[i]);\n  }\n\n  return segments.join('/');\n}\n\nfunction parseAbsoluteUrl(absoluteUrl, locationObj, appBase) {\n  var parsedUrl = urlResolve(absoluteUrl, appBase);\n\n  locationObj.$$protocol = parsedUrl.protocol;\n  locationObj.$$host = parsedUrl.hostname;\n  locationObj.$$port = int(parsedUrl.port) || DEFAULT_PORTS[parsedUrl.protocol] || null;\n}\n\n\nfunction parseAppUrl(relativeUrl, locationObj, appBase) {\n  var prefixed = (relativeUrl.charAt(0) !== '/');\n  if (prefixed) {\n    relativeUrl = '/' + relativeUrl;\n  }\n  var match = urlResolve(relativeUrl, appBase);\n  locationObj.$$path = decodeURIComponent(prefixed && match.pathname.charAt(0) === '/' ?\n      match.pathname.substring(1) : match.pathname);\n  locationObj.$$search = parseKeyValue(match.search);\n  locationObj.$$hash = decodeURIComponent(match.hash);\n\n  // make sure path starts with '/';\n  if (locationObj.$$path && locationObj.$$path.charAt(0) != '/') {\n    locationObj.$$path = '/' + locationObj.$$path;\n  }\n}\n\n\n/**\n *\n * @param {string} begin\n * @param {string} whole\n * @returns {string} returns text from whole after begin or undefined if it does not begin with\n *                   expected string.\n */\nfunction beginsWith(begin, whole) {\n  if (whole.indexOf(begin) === 0) {\n    return whole.substr(begin.length);\n  }\n}\n\n\nfunction stripHash(url) {\n  var index = url.indexOf('#');\n  return index == -1 ? url : url.substr(0, index);\n}\n\n\nfunction stripFile(url) {\n  return url.substr(0, stripHash(url).lastIndexOf('/') + 1);\n}\n\n/* return the server only (scheme://host:port) */\nfunction serverBase(url) {\n  return url.substring(0, url.indexOf('/', url.indexOf('//') + 2));\n}\n\n\n/**\n * LocationHtml5Url represents an url\n * This object is exposed as $location service when HTML5 mode is enabled and supported\n *\n * @constructor\n * @param {string} appBase application base URL\n * @param {string} basePrefix url path prefix\n */\nfunction LocationHtml5Url(appBase, basePrefix) {\n  this.$$html5 = true;\n  basePrefix = basePrefix || '';\n  var appBaseNoFile = stripFile(appBase);\n  parseAbsoluteUrl(appBase, this, appBase);\n\n\n  /**\n   * Parse given html5 (regular) url string into properties\n   * @param {string} newAbsoluteUrl HTML5 url\n   * @private\n   */\n  this.$$parse = function(url) {\n    var pathUrl = beginsWith(appBaseNoFile, url);\n    if (!isString(pathUrl)) {\n      throw $locationMinErr('ipthprfx', 'Invalid url \"{0}\", missing path prefix \"{1}\".', url,\n          appBaseNoFile);\n    }\n\n    parseAppUrl(pathUrl, this, appBase);\n\n    if (!this.$$path) {\n      this.$$path = '/';\n    }\n\n    this.$$compose();\n  };\n\n  /**\n   * Compose url and update `absUrl` property\n   * @private\n   */\n  this.$$compose = function() {\n    var search = toKeyValue(this.$$search),\n        hash = this.$$hash ? '#' + encodeUriSegment(this.$$hash) : '';\n\n    this.$$url = encodePath(this.$$path) + (search ? '?' + search : '') + hash;\n    this.$$absUrl = appBaseNoFile + this.$$url.substr(1); // first char is always '/'\n  };\n\n  this.$$rewrite = function(url) {\n    var appUrl, prevAppUrl;\n\n    if ( (appUrl = beginsWith(appBase, url)) !== undefined ) {\n      prevAppUrl = appUrl;\n      if ( (appUrl = beginsWith(basePrefix, appUrl)) !== undefined ) {\n        return appBaseNoFile + (beginsWith('/', appUrl) || appUrl);\n      } else {\n        return appBase + prevAppUrl;\n      }\n    } else if ( (appUrl = beginsWith(appBaseNoFile, url)) !== undefined ) {\n      return appBaseNoFile + appUrl;\n    } else if (appBaseNoFile == url + '/') {\n      return appBaseNoFile;\n    }\n  };\n}\n\n\n/**\n * LocationHashbangUrl represents url\n * This object is exposed as $location service when developer doesn't opt into html5 mode.\n * It also serves as the base class for html5 mode fallback on legacy browsers.\n *\n * @constructor\n * @param {string} appBase application base URL\n * @param {string} hashPrefix hashbang prefix\n */\nfunction LocationHashbangUrl(appBase, hashPrefix) {\n  var appBaseNoFile = stripFile(appBase);\n\n  parseAbsoluteUrl(appBase, this, appBase);\n\n\n  /**\n   * Parse given hashbang url into properties\n   * @param {string} url Hashbang url\n   * @private\n   */\n  this.$$parse = function(url) {\n    var withoutBaseUrl = beginsWith(appBase, url) || beginsWith(appBaseNoFile, url);\n    var withoutHashUrl = withoutBaseUrl.charAt(0) == '#'\n        ? beginsWith(hashPrefix, withoutBaseUrl)\n        : (this.$$html5)\n          ? withoutBaseUrl\n          : '';\n\n    if (!isString(withoutHashUrl)) {\n      throw $locationMinErr('ihshprfx', 'Invalid url \"{0}\", missing hash prefix \"{1}\".', url,\n          hashPrefix);\n    }\n    parseAppUrl(withoutHashUrl, this, appBase);\n\n    this.$$path = removeWindowsDriveName(this.$$path, withoutHashUrl, appBase);\n\n    this.$$compose();\n\n    /*\n     * In Windows, on an anchor node on documents loaded from\n     * the filesystem, the browser will return a pathname\n     * prefixed with the drive name ('/C:/path') when a\n     * pathname without a drive is set:\n     *  * a.setAttribute('href', '/foo')\n     *   * a.pathname === '/C:/foo' //true\n     *\n     * Inside of Angular, we're always using pathnames that\n     * do not include drive names for routing.\n     */\n    function removeWindowsDriveName (path, url, base) {\n      /*\n      Matches paths for file protocol on windows,\n      such as /C:/foo/bar, and captures only /foo/bar.\n      */\n      var windowsFilePathExp = /^\\/[A-Z]:(\\/.*)/;\n\n      var firstPathSegmentMatch;\n\n      //Get the relative path from the input URL.\n      if (url.indexOf(base) === 0) {\n        url = url.replace(base, '');\n      }\n\n      // The input URL intentionally contains a first path segment that ends with a colon.\n      if (windowsFilePathExp.exec(url)) {\n        return path;\n      }\n\n      firstPathSegmentMatch = windowsFilePathExp.exec(path);\n      return firstPathSegmentMatch ? firstPathSegmentMatch[1] : path;\n    }\n  };\n\n  /**\n   * Compose hashbang url and update `absUrl` property\n   * @private\n   */\n  this.$$compose = function() {\n    var search = toKeyValue(this.$$search),\n        hash = this.$$hash ? '#' + encodeUriSegment(this.$$hash) : '';\n\n    this.$$url = encodePath(this.$$path) + (search ? '?' + search : '') + hash;\n    this.$$absUrl = appBase + (this.$$url ? hashPrefix + this.$$url : '');\n  };\n\n  this.$$rewrite = function(url) {\n    if(stripHash(appBase) == stripHash(url)) {\n      return url;\n    }\n  };\n}\n\n\n/**\n * LocationHashbangUrl represents url\n * This object is exposed as $location service when html5 history api is enabled but the browser\n * does not support it.\n *\n * @constructor\n * @param {string} appBase application base URL\n * @param {string} hashPrefix hashbang prefix\n */\nfunction LocationHashbangInHtml5Url(appBase, hashPrefix) {\n  this.$$html5 = true;\n  LocationHashbangUrl.apply(this, arguments);\n\n  var appBaseNoFile = stripFile(appBase);\n\n  this.$$rewrite = function(url) {\n    var appUrl;\n\n    if ( appBase == stripHash(url) ) {\n      return url;\n    } else if ( (appUrl = beginsWith(appBaseNoFile, url)) ) {\n      return appBase + hashPrefix + appUrl;\n    } else if ( appBaseNoFile === url + '/') {\n      return appBaseNoFile;\n    }\n  };\n\n  this.$$compose = function() {\n    var search = toKeyValue(this.$$search),\n        hash = this.$$hash ? '#' + encodeUriSegment(this.$$hash) : '';\n\n    this.$$url = encodePath(this.$$path) + (search ? '?' + search : '') + hash;\n    // include hashPrefix in $$absUrl when $$url is empty so IE8 & 9 do not reload page because of removal of '#'\n    this.$$absUrl = appBase + hashPrefix + this.$$url;\n  };\n\n}\n\n\nLocationHashbangInHtml5Url.prototype =\n  LocationHashbangUrl.prototype =\n  LocationHtml5Url.prototype = {\n\n  /**\n   * Are we in html5 mode?\n   * @private\n   */\n  $$html5: false,\n\n  /**\n   * Has any change been replacing ?\n   * @private\n   */\n  $$replace: false,\n\n  /**\n   * @ngdoc method\n   * @name $location#absUrl\n   *\n   * @description\n   * This method is getter only.\n   *\n   * Return full url representation with all segments encoded according to rules specified in\n   * [RFC 3986](http://www.ietf.org/rfc/rfc3986.txt).\n   *\n   * @return {string} full url\n   */\n  absUrl: locationGetter('$$absUrl'),\n\n  /**\n   * @ngdoc method\n   * @name $location#url\n   *\n   * @description\n   * This method is getter / setter.\n   *\n   * Return url (e.g. `/path?a=b#hash`) when called without any parameter.\n   *\n   * Change path, search and hash, when called with parameter and return `$location`.\n   *\n   * @param {string=} url New url without base prefix (e.g. `/path?a=b#hash`)\n   * @param {string=} replace The path that will be changed\n   * @return {string} url\n   */\n  url: function(url, replace) {\n    if (isUndefined(url))\n      return this.$$url;\n\n    var match = PATH_MATCH.exec(url);\n    if (match[1]) this.path(decodeURIComponent(match[1]));\n    if (match[2] || match[1]) this.search(match[3] || '');\n    this.hash(match[5] || '', replace);\n\n    return this;\n  },\n\n  /**\n   * @ngdoc method\n   * @name $location#protocol\n   *\n   * @description\n   * This method is getter only.\n   *\n   * Return protocol of current url.\n   *\n   * @return {string} protocol of current url\n   */\n  protocol: locationGetter('$$protocol'),\n\n  /**\n   * @ngdoc method\n   * @name $location#host\n   *\n   * @description\n   * This method is getter only.\n   *\n   * Return host of current url.\n   *\n   * @return {string} host of current url.\n   */\n  host: locationGetter('$$host'),\n\n  /**\n   * @ngdoc method\n   * @name $location#port\n   *\n   * @description\n   * This method is getter only.\n   *\n   * Return port of current url.\n   *\n   * @return {Number} port\n   */\n  port: locationGetter('$$port'),\n\n  /**\n   * @ngdoc method\n   * @name $location#path\n   *\n   * @description\n   * This method is getter / setter.\n   *\n   * Return path of current url when called without any parameter.\n   *\n   * Change path when called with parameter and return `$location`.\n   *\n   * Note: Path should always begin with forward slash (/), this method will add the forward slash\n   * if it is missing.\n   *\n   * @param {string=} path New path\n   * @return {string} path\n   */\n  path: locationGetterSetter('$$path', function(path) {\n    return path.charAt(0) == '/' ? path : '/' + path;\n  }),\n\n  /**\n   * @ngdoc method\n   * @name $location#search\n   *\n   * @description\n   * This method is getter / setter.\n   *\n   * Return search part (as object) of current url when called without any parameter.\n   *\n   * Change search part when called with parameter and return `$location`.\n   *\n   *\n   * ```js\n   * // given url http://example.com/#/some/path?foo=bar&baz=xoxo\n   * var searchObject = $location.search();\n   * // => {foo: 'bar', baz: 'xoxo'}\n   *\n   *\n   * // set foo to 'yipee'\n   * $location.search('foo', 'yipee');\n   * // => $location\n   * ```\n   *\n   * @param {string|Object.<string>|Object.<Array.<string>>} search New search params - string or\n   * hash object.\n   *\n   * When called with a single argument the method acts as a setter, setting the `search` component\n   * of `$location` to the specified value.\n   *\n   * If the argument is a hash object containing an array of values, these values will be encoded\n   * as duplicate search parameters in the url.\n   *\n   * @param {(string|Array<string>)=} paramValue If `search` is a string, then `paramValue` will\n   * override only a single search property.\n   *\n   * If `paramValue` is an array, it will override the property of the `search` component of\n   * `$location` specified via the first argument.\n   *\n   * If `paramValue` is `null`, the property specified via the first argument will be deleted.\n   *\n   * @return {Object} If called with no arguments returns the parsed `search` object. If called with\n   * one or more arguments returns `$location` object itself.\n   */\n  search: function(search, paramValue) {\n    switch (arguments.length) {\n      case 0:\n        return this.$$search;\n      case 1:\n        if (isString(search)) {\n          this.$$search = parseKeyValue(search);\n        } else if (isObject(search)) {\n          this.$$search = search;\n        } else {\n          throw $locationMinErr('isrcharg',\n              'The first argument of the `$location#search()` call must be a string or an object.');\n        }\n        break;\n      default:\n        if (isUndefined(paramValue) || paramValue === null) {\n          delete this.$$search[search];\n        } else {\n          this.$$search[search] = paramValue;\n        }\n    }\n\n    this.$$compose();\n    return this;\n  },\n\n  /**\n   * @ngdoc method\n   * @name $location#hash\n   *\n   * @description\n   * This method is getter / setter.\n   *\n   * Return hash fragment when called without any parameter.\n   *\n   * Change hash fragment when called with parameter and return `$location`.\n   *\n   * @param {string=} hash New hash fragment\n   * @return {string} hash\n   */\n  hash: locationGetterSetter('$$hash', identity),\n\n  /**\n   * @ngdoc method\n   * @name $location#replace\n   *\n   * @description\n   * If called, all changes to $location during current `$digest` will be replacing current history\n   * record, instead of adding new one.\n   */\n  replace: function() {\n    this.$$replace = true;\n    return this;\n  }\n};\n\nfunction locationGetter(property) {\n  return function() {\n    return this[property];\n  };\n}\n\n\nfunction locationGetterSetter(property, preprocess) {\n  return function(value) {\n    if (isUndefined(value))\n      return this[property];\n\n    this[property] = preprocess(value);\n    this.$$compose();\n\n    return this;\n  };\n}\n\n\n/**\n * @ngdoc service\n * @name $location\n *\n * @requires $rootElement\n *\n * @description\n * The $location service parses the URL in the browser address bar (based on the\n * [window.location](https://developer.mozilla.org/en/window.location)) and makes the URL\n * available to your application. Changes to the URL in the address bar are reflected into\n * $location service and changes to $location are reflected into the browser address bar.\n *\n * **The $location service:**\n *\n * - Exposes the current URL in the browser address bar, so you can\n *   - Watch and observe the URL.\n *   - Change the URL.\n * - Synchronizes the URL with the browser when the user\n *   - Changes the address bar.\n *   - Clicks the back or forward button (or clicks a History link).\n *   - Clicks on a link.\n * - Represents the URL object as a set of methods (protocol, host, port, path, search, hash).\n *\n * For more information see {@link guide/$location Developer Guide: Using $location}\n */\n\n/**\n * @ngdoc provider\n * @name $locationProvider\n * @description\n * Use the `$locationProvider` to configure how the application deep linking paths are stored.\n */\nfunction $LocationProvider(){\n  var hashPrefix = '',\n      html5Mode = false;\n\n  /**\n   * @ngdoc property\n   * @name $locationProvider#hashPrefix\n   * @description\n   * @param {string=} prefix Prefix for hash part (containing path and search)\n   * @returns {*} current value if used as getter or itself (chaining) if used as setter\n   */\n  this.hashPrefix = function(prefix) {\n    if (isDefined(prefix)) {\n      hashPrefix = prefix;\n      return this;\n    } else {\n      return hashPrefix;\n    }\n  };\n\n  /**\n   * @ngdoc property\n   * @name $locationProvider#html5Mode\n   * @description\n   * @param {boolean=} mode Use HTML5 strategy if available.\n   * @returns {*} current value if used as getter or itself (chaining) if used as setter\n   */\n  this.html5Mode = function(mode) {\n    if (isDefined(mode)) {\n      html5Mode = mode;\n      return this;\n    } else {\n      return html5Mode;\n    }\n  };\n\n  /**\n   * @ngdoc event\n   * @name $location#$locationChangeStart\n   * @eventType broadcast on root scope\n   * @description\n   * Broadcasted before a URL will change. This change can be prevented by calling\n   * `preventDefault` method of the event. See {@link ng.$rootScope.Scope#$on} for more\n   * details about event object. Upon successful change\n   * {@link ng.$location#events_$locationChangeSuccess $locationChangeSuccess} is fired.\n   *\n   * @param {Object} angularEvent Synthetic event object.\n   * @param {string} newUrl New URL\n   * @param {string=} oldUrl URL that was before it was changed.\n   */\n\n  /**\n   * @ngdoc event\n   * @name $location#$locationChangeSuccess\n   * @eventType broadcast on root scope\n   * @description\n   * Broadcasted after a URL was changed.\n   *\n   * @param {Object} angularEvent Synthetic event object.\n   * @param {string} newUrl New URL\n   * @param {string=} oldUrl URL that was before it was changed.\n   */\n\n  this.$get = ['$rootScope', '$browser', '$sniffer', '$rootElement',\n      function( $rootScope,   $browser,   $sniffer,   $rootElement) {\n    var $location,\n        LocationMode,\n        baseHref = $browser.baseHref(), // if base[href] is undefined, it defaults to ''\n        initialUrl = $browser.url(),\n        appBase;\n\n    if (html5Mode) {\n      appBase = serverBase(initialUrl) + (baseHref || '/');\n      LocationMode = $sniffer.history ? LocationHtml5Url : LocationHashbangInHtml5Url;\n    } else {\n      appBase = stripHash(initialUrl);\n      LocationMode = LocationHashbangUrl;\n    }\n    $location = new LocationMode(appBase, '#' + hashPrefix);\n    $location.$$parse($location.$$rewrite(initialUrl));\n\n    $rootElement.on('click', function(event) {\n      // TODO(vojta): rewrite link when opening in new tab/window (in legacy browser)\n      // currently we open nice url link and redirect then\n\n      if (event.ctrlKey || event.metaKey || event.which == 2) return;\n\n      var elm = jqLite(event.target);\n\n      // traverse the DOM up to find first A tag\n      while (lowercase(elm[0].nodeName) !== 'a') {\n        // ignore rewriting if no A tag (reached root element, or no parent - removed from document)\n        if (elm[0] === $rootElement[0] || !(elm = elm.parent())[0]) return;\n      }\n\n      var absHref = elm.prop('href');\n\n      if (isObject(absHref) && absHref.toString() === '[object SVGAnimatedString]') {\n        // SVGAnimatedString.animVal should be identical to SVGAnimatedString.baseVal, unless during\n        // an animation.\n        absHref = urlResolve(absHref.animVal).href;\n      }\n\n      // Make relative links work in HTML5 mode for legacy browsers (or at least IE8 & 9)\n      // The href should be a regular url e.g. /link/somewhere or link/somewhere or ../somewhere or\n      // somewhere#anchor or http://example.com/somewhere\n      if (LocationMode === LocationHashbangInHtml5Url) {\n        // get the actual href attribute - see\n        // http://msdn.microsoft.com/en-us/library/ie/dd347148(v=vs.85).aspx\n        var href = elm.attr('href') || elm.attr('xlink:href');\n\n        if (href.indexOf('://') < 0) {         // Ignore absolute URLs\n          var prefix = '#' + hashPrefix;\n          if (href[0] == '/') {\n            // absolute path - replace old path\n            absHref = appBase + prefix + href;\n          } else if (href[0] == '#') {\n            // local anchor\n            absHref = appBase + prefix + ($location.path() || '/') + href;\n          } else {\n            // relative path - join with current path\n            var stack = $location.path().split(\"/\"),\n              parts = href.split(\"/\");\n            for (var i=0; i<parts.length; i++) {\n              if (parts[i] == \".\")\n                continue;\n              else if (parts[i] == \"..\")\n                stack.pop();\n              else if (parts[i].length)\n                stack.push(parts[i]);\n            }\n            absHref = appBase + prefix + stack.join('/');\n          }\n        }\n      }\n\n      var rewrittenUrl = $location.$$rewrite(absHref);\n\n      if (absHref && !elm.attr('target') && rewrittenUrl && !event.isDefaultPrevented()) {\n        event.preventDefault();\n        if (rewrittenUrl != $browser.url()) {\n          // update location manually\n          $location.$$parse(rewrittenUrl);\n          $rootScope.$apply();\n          // hack to work around FF6 bug 684208 when scenario runner clicks on links\n          window.angular['ff-684208-preventDefault'] = true;\n        }\n      }\n    });\n\n\n    // rewrite hashbang url <> html5 url\n    if ($location.absUrl() != initialUrl) {\n      $browser.url($location.absUrl(), true);\n    }\n\n    // update $location when $browser url changes\n    $browser.onUrlChange(function(newUrl) {\n      if ($location.absUrl() != newUrl) {\n        $rootScope.$evalAsync(function() {\n          var oldUrl = $location.absUrl();\n\n          $location.$$parse(newUrl);\n          if ($rootScope.$broadcast('$locationChangeStart', newUrl,\n                                    oldUrl).defaultPrevented) {\n            $location.$$parse(oldUrl);\n            $browser.url(oldUrl);\n          } else {\n            afterLocationChange(oldUrl);\n          }\n        });\n        if (!$rootScope.$$phase) $rootScope.$digest();\n      }\n    });\n\n    // update browser\n    var changeCounter = 0;\n    $rootScope.$watch(function $locationWatch() {\n      var oldUrl = $browser.url();\n      var currentReplace = $location.$$replace;\n\n      if (!changeCounter || oldUrl != $location.absUrl()) {\n        changeCounter++;\n        $rootScope.$evalAsync(function() {\n          if ($rootScope.$broadcast('$locationChangeStart', $location.absUrl(), oldUrl).\n              defaultPrevented) {\n            $location.$$parse(oldUrl);\n          } else {\n            $browser.url($location.absUrl(), currentReplace);\n            afterLocationChange(oldUrl);\n          }\n        });\n      }\n      $location.$$replace = false;\n\n      return changeCounter;\n    });\n\n    return $location;\n\n    function afterLocationChange(oldUrl) {\n      $rootScope.$broadcast('$locationChangeSuccess', $location.absUrl(), oldUrl);\n    }\n}];\n}\n\n/**\n * @ngdoc service\n * @name $log\n * @requires $window\n *\n * @description\n * Simple service for logging. Default implementation safely writes the message\n * into the browser's console (if present).\n *\n * The main purpose of this service is to simplify debugging and troubleshooting.\n *\n * The default is to log `debug` messages. You can use\n * {@link ng.$logProvider ng.$logProvider#debugEnabled} to change this.\n *\n * @example\n   <example>\n     <file name=\"script.js\">\n       function LogCtrl($scope, $log) {\n         $scope.$log = $log;\n         $scope.message = 'Hello World!';\n       }\n     </file>\n     <file name=\"index.html\">\n       <div ng-controller=\"LogCtrl\">\n         <p>Reload this page with open console, enter text and hit the log button...</p>\n         Message:\n         <input type=\"text\" ng-model=\"message\"/>\n         <button ng-click=\"$log.log(message)\">log</button>\n         <button ng-click=\"$log.warn(message)\">warn</button>\n         <button ng-click=\"$log.info(message)\">info</button>\n         <button ng-click=\"$log.error(message)\">error</button>\n       </div>\n     </file>\n   </example>\n */\n\n/**\n * @ngdoc provider\n * @name $logProvider\n * @description\n * Use the `$logProvider` to configure how the application logs messages\n */\nfunction $LogProvider(){\n  var debug = true,\n      self = this;\n\n  /**\n   * @ngdoc property\n   * @name $logProvider#debugEnabled\n   * @description\n   * @param {boolean=} flag enable or disable debug level messages\n   * @returns {*} current value if used as getter or itself (chaining) if used as setter\n   */\n  this.debugEnabled = function(flag) {\n    if (isDefined(flag)) {\n      debug = flag;\n    return this;\n    } else {\n      return debug;\n    }\n  };\n\n  this.$get = ['$window', function($window){\n    return {\n      /**\n       * @ngdoc method\n       * @name $log#log\n       *\n       * @description\n       * Write a log message\n       */\n      log: consoleLog('log'),\n\n      /**\n       * @ngdoc method\n       * @name $log#info\n       *\n       * @description\n       * Write an information message\n       */\n      info: consoleLog('info'),\n\n      /**\n       * @ngdoc method\n       * @name $log#warn\n       *\n       * @description\n       * Write a warning message\n       */\n      warn: consoleLog('warn'),\n\n      /**\n       * @ngdoc method\n       * @name $log#error\n       *\n       * @description\n       * Write an error message\n       */\n      error: consoleLog('error'),\n\n      /**\n       * @ngdoc method\n       * @name $log#debug\n       *\n       * @description\n       * Write a debug message\n       */\n      debug: (function () {\n        var fn = consoleLog('debug');\n\n        return function() {\n          if (debug) {\n            fn.apply(self, arguments);\n          }\n        };\n      }())\n    };\n\n    function formatError(arg) {\n      if (arg instanceof Error) {\n        if (arg.stack) {\n          arg = (arg.message && arg.stack.indexOf(arg.message) === -1)\n              ? 'Error: ' + arg.message + '\\n' + arg.stack\n              : arg.stack;\n        } else if (arg.sourceURL) {\n          arg = arg.message + '\\n' + arg.sourceURL + ':' + arg.line;\n        }\n      }\n      return arg;\n    }\n\n    function consoleLog(type) {\n      var console = $window.console || {},\n          logFn = console[type] || console.log || noop,\n          hasApply = false;\n\n      // Note: reading logFn.apply throws an error in IE11 in IE8 document mode.\n      // The reason behind this is that console.log has type \"object\" in IE8...\n      try {\n        hasApply = !!logFn.apply;\n      } catch (e) {}\n\n      if (hasApply) {\n        return function() {\n          var args = [];\n          forEach(arguments, function(arg) {\n            args.push(formatError(arg));\n          });\n          return logFn.apply(console, args);\n        };\n      }\n\n      // we are IE which either doesn't have window.console => this is noop and we do nothing,\n      // or we are IE where console.log doesn't have apply so we log at least first 2 args\n      return function(arg1, arg2) {\n        logFn(arg1, arg2 == null ? '' : arg2);\n      };\n    }\n  }];\n}\n\nvar $parseMinErr = minErr('$parse');\nvar promiseWarningCache = {};\nvar promiseWarning;\n\n// Sandboxing Angular Expressions\n// ------------------------------\n// Angular expressions are generally considered safe because these expressions only have direct\n// access to $scope and locals. However, one can obtain the ability to execute arbitrary JS code by\n// obtaining a reference to native JS functions such as the Function constructor.\n//\n// As an example, consider the following Angular expression:\n//\n//   {}.toString.constructor(alert(\"evil JS code\"))\n//\n// We want to prevent this type of access. For the sake of performance, during the lexing phase we\n// disallow any \"dotted\" access to any member named \"constructor\".\n//\n// For reflective calls (a[b]) we check that the value of the lookup is not the Function constructor\n// while evaluating the expression, which is a stronger but more expensive test. Since reflective\n// calls are expensive anyway, this is not such a big deal compared to static dereferencing.\n//\n// This sandboxing technique is not perfect and doesn't aim to be. The goal is to prevent exploits\n// against the expression language, but not to prevent exploits that were enabled by exposing\n// sensitive JavaScript or browser apis on Scope. Exposing such objects on a Scope is never a good\n// practice and therefore we are not even trying to protect against interaction with an object\n// explicitly exposed in this way.\n//\n// A developer could foil the name check by aliasing the Function constructor under a different\n// name on the scope.\n//\n// In general, it is not possible to access a Window object from an angular expression unless a\n// window or some DOM object that has a reference to window is published onto a Scope.\n\nfunction ensureSafeMemberName(name, fullExpression) {\n  if (name === \"constructor\") {\n    throw $parseMinErr('isecfld',\n        'Referencing \"constructor\" field in Angular expressions is disallowed! Expression: {0}',\n        fullExpression);\n  }\n  return name;\n}\n\nfunction ensureSafeObject(obj, fullExpression) {\n  // nifty check if obj is Function that is fast and works across iframes and other contexts\n  if (obj) {\n    if (obj.constructor === obj) {\n      throw $parseMinErr('isecfn',\n          'Referencing Function in Angular expressions is disallowed! Expression: {0}',\n          fullExpression);\n    } else if (// isWindow(obj)\n        obj.document && obj.location && obj.alert && obj.setInterval) {\n      throw $parseMinErr('isecwindow',\n          'Referencing the Window in Angular expressions is disallowed! Expression: {0}',\n          fullExpression);\n    } else if (// isElement(obj)\n        obj.children && (obj.nodeName || (obj.prop && obj.attr && obj.find))) {\n      throw $parseMinErr('isecdom',\n          'Referencing DOM nodes in Angular expressions is disallowed! Expression: {0}',\n          fullExpression);\n    }\n  }\n  return obj;\n}\n\nvar OPERATORS = {\n    /* jshint bitwise : false */\n    'null':function(){return null;},\n    'true':function(){return true;},\n    'false':function(){return false;},\n    undefined:noop,\n    '+':function(self, locals, a,b){\n      a=a(self, locals); b=b(self, locals);\n      if (isDefined(a)) {\n        if (isDefined(b)) {\n          return a + b;\n        }\n        return a;\n      }\n      return isDefined(b)?b:undefined;},\n    '-':function(self, locals, a,b){\n          a=a(self, locals); b=b(self, locals);\n          return (isDefined(a)?a:0)-(isDefined(b)?b:0);\n        },\n    '*':function(self, locals, a,b){return a(self, locals)*b(self, locals);},\n    '/':function(self, locals, a,b){return a(self, locals)/b(self, locals);},\n    '%':function(self, locals, a,b){return a(self, locals)%b(self, locals);},\n    '^':function(self, locals, a,b){return a(self, locals)^b(self, locals);},\n    '=':noop,\n    '===':function(self, locals, a, b){return a(self, locals)===b(self, locals);},\n    '!==':function(self, locals, a, b){return a(self, locals)!==b(self, locals);},\n    '==':function(self, locals, a,b){return a(self, locals)==b(self, locals);},\n    '!=':function(self, locals, a,b){return a(self, locals)!=b(self, locals);},\n    '<':function(self, locals, a,b){return a(self, locals)<b(self, locals);},\n    '>':function(self, locals, a,b){return a(self, locals)>b(self, locals);},\n    '<=':function(self, locals, a,b){return a(self, locals)<=b(self, locals);},\n    '>=':function(self, locals, a,b){return a(self, locals)>=b(self, locals);},\n    '&&':function(self, locals, a,b){return a(self, locals)&&b(self, locals);},\n    '||':function(self, locals, a,b){return a(self, locals)||b(self, locals);},\n    '&':function(self, locals, a,b){return a(self, locals)&b(self, locals);},\n//    '|':function(self, locals, a,b){return a|b;},\n    '|':function(self, locals, a,b){return b(self, locals)(self, locals, a(self, locals));},\n    '!':function(self, locals, a){return !a(self, locals);}\n};\n/* jshint bitwise: true */\nvar ESCAPE = {\"n\":\"\\n\", \"f\":\"\\f\", \"r\":\"\\r\", \"t\":\"\\t\", \"v\":\"\\v\", \"'\":\"'\", '\"':'\"'};\n\n\n/////////////////////////////////////////\n\n\n/**\n * @constructor\n */\nvar Lexer = function (options) {\n  this.options = options;\n};\n\nLexer.prototype = {\n  constructor: Lexer,\n\n  lex: function (text) {\n    this.text = text;\n\n    this.index = 0;\n    this.ch = undefined;\n    this.lastCh = ':'; // can start regexp\n\n    this.tokens = [];\n\n    while (this.index < this.text.length) {\n      this.ch = this.text.charAt(this.index);\n      if (this.is('\"\\'')) {\n        this.readString(this.ch);\n      } else if (this.isNumber(this.ch) || this.is('.') && this.isNumber(this.peek())) {\n        this.readNumber();\n      } else if (this.isIdent(this.ch)) {\n        this.readIdent();\n      } else if (this.is('(){}[].,;:?')) {\n        this.tokens.push({\n          index: this.index,\n          text: this.ch\n        });\n        this.index++;\n      } else if (this.isWhitespace(this.ch)) {\n        this.index++;\n        continue;\n      } else {\n        var ch2 = this.ch + this.peek();\n        var ch3 = ch2 + this.peek(2);\n        var fn = OPERATORS[this.ch];\n        var fn2 = OPERATORS[ch2];\n        var fn3 = OPERATORS[ch3];\n        if (fn3) {\n          this.tokens.push({index: this.index, text: ch3, fn: fn3});\n          this.index += 3;\n        } else if (fn2) {\n          this.tokens.push({index: this.index, text: ch2, fn: fn2});\n          this.index += 2;\n        } else if (fn) {\n          this.tokens.push({\n            index: this.index,\n            text: this.ch,\n            fn: fn\n          });\n          this.index += 1;\n        } else {\n          this.throwError('Unexpected next character ', this.index, this.index + 1);\n        }\n      }\n      this.lastCh = this.ch;\n    }\n    return this.tokens;\n  },\n\n  is: function(chars) {\n    return chars.indexOf(this.ch) !== -1;\n  },\n\n  was: function(chars) {\n    return chars.indexOf(this.lastCh) !== -1;\n  },\n\n  peek: function(i) {\n    var num = i || 1;\n    return (this.index + num < this.text.length) ? this.text.charAt(this.index + num) : false;\n  },\n\n  isNumber: function(ch) {\n    return ('0' <= ch && ch <= '9');\n  },\n\n  isWhitespace: function(ch) {\n    // IE treats non-breaking space as \\u00A0\n    return (ch === ' ' || ch === '\\r' || ch === '\\t' ||\n            ch === '\\n' || ch === '\\v' || ch === '\\u00A0');\n  },\n\n  isIdent: function(ch) {\n    return ('a' <= ch && ch <= 'z' ||\n            'A' <= ch && ch <= 'Z' ||\n            '_' === ch || ch === '$');\n  },\n\n  isExpOperator: function(ch) {\n    return (ch === '-' || ch === '+' || this.isNumber(ch));\n  },\n\n  throwError: function(error, start, end) {\n    end = end || this.index;\n    var colStr = (isDefined(start)\n            ? 's ' + start +  '-' + this.index + ' [' + this.text.substring(start, end) + ']'\n            : ' ' + end);\n    throw $parseMinErr('lexerr', 'Lexer Error: {0} at column{1} in expression [{2}].',\n        error, colStr, this.text);\n  },\n\n  readNumber: function() {\n    var number = '';\n    var start = this.index;\n    while (this.index < this.text.length) {\n      var ch = lowercase(this.text.charAt(this.index));\n      if (ch == '.' || this.isNumber(ch)) {\n        number += ch;\n      } else {\n        var peekCh = this.peek();\n        if (ch == 'e' && this.isExpOperator(peekCh)) {\n          number += ch;\n        } else if (this.isExpOperator(ch) &&\n            peekCh && this.isNumber(peekCh) &&\n            number.charAt(number.length - 1) == 'e') {\n          number += ch;\n        } else if (this.isExpOperator(ch) &&\n            (!peekCh || !this.isNumber(peekCh)) &&\n            number.charAt(number.length - 1) == 'e') {\n          this.throwError('Invalid exponent');\n        } else {\n          break;\n        }\n      }\n      this.index++;\n    }\n    number = 1 * number;\n    this.tokens.push({\n      index: start,\n      text: number,\n      literal: true,\n      constant: true,\n      fn: function() { return number; }\n    });\n  },\n\n  readIdent: function() {\n    var parser = this;\n\n    var ident = '';\n    var start = this.index;\n\n    var lastDot, peekIndex, methodName, ch;\n\n    while (this.index < this.text.length) {\n      ch = this.text.charAt(this.index);\n      if (ch === '.' || this.isIdent(ch) || this.isNumber(ch)) {\n        if (ch === '.') lastDot = this.index;\n        ident += ch;\n      } else {\n        break;\n      }\n      this.index++;\n    }\n\n    //check if this is not a method invocation and if it is back out to last dot\n    if (lastDot) {\n      peekIndex = this.index;\n      while (peekIndex < this.text.length) {\n        ch = this.text.charAt(peekIndex);\n        if (ch === '(') {\n          methodName = ident.substr(lastDot - start + 1);\n          ident = ident.substr(0, lastDot - start);\n          this.index = peekIndex;\n          break;\n        }\n        if (this.isWhitespace(ch)) {\n          peekIndex++;\n        } else {\n          break;\n        }\n      }\n    }\n\n\n    var token = {\n      index: start,\n      text: ident\n    };\n\n    // OPERATORS is our own object so we don't need to use special hasOwnPropertyFn\n    if (OPERATORS.hasOwnProperty(ident)) {\n      token.fn = OPERATORS[ident];\n      token.literal = true;\n      token.constant = true;\n    } else {\n      var getter = getterFn(ident, this.options, this.text);\n      token.fn = extend(function(self, locals) {\n        return (getter(self, locals));\n      }, {\n        assign: function(self, value) {\n          return setter(self, ident, value, parser.text, parser.options);\n        }\n      });\n    }\n\n    this.tokens.push(token);\n\n    if (methodName) {\n      this.tokens.push({\n        index:lastDot,\n        text: '.'\n      });\n      this.tokens.push({\n        index: lastDot + 1,\n        text: methodName\n      });\n    }\n  },\n\n  readString: function(quote) {\n    var start = this.index;\n    this.index++;\n    var string = '';\n    var rawString = quote;\n    var escape = false;\n    while (this.index < this.text.length) {\n      var ch = this.text.charAt(this.index);\n      rawString += ch;\n      if (escape) {\n        if (ch === 'u') {\n          var hex = this.text.substring(this.index + 1, this.index + 5);\n          if (!hex.match(/[\\da-f]{4}/i))\n            this.throwError('Invalid unicode escape [\\\\u' + hex + ']');\n          this.index += 4;\n          string += String.fromCharCode(parseInt(hex, 16));\n        } else {\n          var rep = ESCAPE[ch];\n          if (rep) {\n            string += rep;\n          } else {\n            string += ch;\n          }\n        }\n        escape = false;\n      } else if (ch === '\\\\') {\n        escape = true;\n      } else if (ch === quote) {\n        this.index++;\n        this.tokens.push({\n          index: start,\n          text: rawString,\n          string: string,\n          literal: true,\n          constant: true,\n          fn: function() { return string; }\n        });\n        return;\n      } else {\n        string += ch;\n      }\n      this.index++;\n    }\n    this.throwError('Unterminated quote', start);\n  }\n};\n\n\n/**\n * @constructor\n */\nvar Parser = function (lexer, $filter, options) {\n  this.lexer = lexer;\n  this.$filter = $filter;\n  this.options = options;\n};\n\nParser.ZERO = extend(function () {\n  return 0;\n}, {\n  constant: true\n});\n\nParser.prototype = {\n  constructor: Parser,\n\n  parse: function (text) {\n    this.text = text;\n\n    this.tokens = this.lexer.lex(text);\n\n    var value = this.statements();\n\n    if (this.tokens.length !== 0) {\n      this.throwError('is an unexpected token', this.tokens[0]);\n    }\n\n    value.literal = !!value.literal;\n    value.constant = !!value.constant;\n\n    return value;\n  },\n\n  primary: function () {\n    var primary;\n    if (this.expect('(')) {\n      primary = this.filterChain();\n      this.consume(')');\n    } else if (this.expect('[')) {\n      primary = this.arrayDeclaration();\n    } else if (this.expect('{')) {\n      primary = this.object();\n    } else {\n      var token = this.expect();\n      primary = token.fn;\n      if (!primary) {\n        this.throwError('not a primary expression', token);\n      }\n      primary.literal = !!token.literal;\n      primary.constant = !!token.constant;\n    }\n\n    var next, context;\n    while ((next = this.expect('(', '[', '.'))) {\n      if (next.text === '(') {\n        primary = this.functionCall(primary, context);\n        context = null;\n      } else if (next.text === '[') {\n        context = primary;\n        primary = this.objectIndex(primary);\n      } else if (next.text === '.') {\n        context = primary;\n        primary = this.fieldAccess(primary);\n      } else {\n        this.throwError('IMPOSSIBLE');\n      }\n    }\n    return primary;\n  },\n\n  throwError: function(msg, token) {\n    throw $parseMinErr('syntax',\n        'Syntax Error: Token \\'{0}\\' {1} at column {2} of the expression [{3}] starting at [{4}].',\n          token.text, msg, (token.index + 1), this.text, this.text.substring(token.index));\n  },\n\n  peekToken: function() {\n    if (this.tokens.length === 0)\n      throw $parseMinErr('ueoe', 'Unexpected end of expression: {0}', this.text);\n    return this.tokens[0];\n  },\n\n  peek: function(e1, e2, e3, e4) {\n    if (this.tokens.length > 0) {\n      var token = this.tokens[0];\n      var t = token.text;\n      if (t === e1 || t === e2 || t === e3 || t === e4 ||\n          (!e1 && !e2 && !e3 && !e4)) {\n        return token;\n      }\n    }\n    return false;\n  },\n\n  expect: function(e1, e2, e3, e4){\n    var token = this.peek(e1, e2, e3, e4);\n    if (token) {\n      this.tokens.shift();\n      return token;\n    }\n    return false;\n  },\n\n  consume: function(e1){\n    if (!this.expect(e1)) {\n      this.throwError('is unexpected, expecting [' + e1 + ']', this.peek());\n    }\n  },\n\n  unaryFn: function(fn, right) {\n    return extend(function(self, locals) {\n      return fn(self, locals, right);\n    }, {\n      constant:right.constant\n    });\n  },\n\n  ternaryFn: function(left, middle, right){\n    return extend(function(self, locals){\n      return left(self, locals) ? middle(self, locals) : right(self, locals);\n    }, {\n      constant: left.constant && middle.constant && right.constant\n    });\n  },\n\n  binaryFn: function(left, fn, right) {\n    return extend(function(self, locals) {\n      return fn(self, locals, left, right);\n    }, {\n      constant:left.constant && right.constant\n    });\n  },\n\n  statements: function() {\n    var statements = [];\n    while (true) {\n      if (this.tokens.length > 0 && !this.peek('}', ')', ';', ']'))\n        statements.push(this.filterChain());\n      if (!this.expect(';')) {\n        // optimize for the common case where there is only one statement.\n        // TODO(size): maybe we should not support multiple statements?\n        return (statements.length === 1)\n            ? statements[0]\n            : function(self, locals) {\n                var value;\n                for (var i = 0; i < statements.length; i++) {\n                  var statement = statements[i];\n                  if (statement) {\n                    value = statement(self, locals);\n                  }\n                }\n                return value;\n              };\n      }\n    }\n  },\n\n  filterChain: function() {\n    var left = this.expression();\n    var token;\n    while (true) {\n      if ((token = this.expect('|'))) {\n        left = this.binaryFn(left, token.fn, this.filter());\n      } else {\n        return left;\n      }\n    }\n  },\n\n  filter: function() {\n    var token = this.expect();\n    var fn = this.$filter(token.text);\n    var argsFn = [];\n    while (true) {\n      if ((token = this.expect(':'))) {\n        argsFn.push(this.expression());\n      } else {\n        var fnInvoke = function(self, locals, input) {\n          var args = [input];\n          for (var i = 0; i < argsFn.length; i++) {\n            args.push(argsFn[i](self, locals));\n          }\n          return fn.apply(self, args);\n        };\n        return function() {\n          return fnInvoke;\n        };\n      }\n    }\n  },\n\n  expression: function() {\n    return this.assignment();\n  },\n\n  assignment: function() {\n    var left = this.ternary();\n    var right;\n    var token;\n    if ((token = this.expect('='))) {\n      if (!left.assign) {\n        this.throwError('implies assignment but [' +\n            this.text.substring(0, token.index) + '] can not be assigned to', token);\n      }\n      right = this.ternary();\n      return function(scope, locals) {\n        return left.assign(scope, right(scope, locals), locals);\n      };\n    }\n    return left;\n  },\n\n  ternary: function() {\n    var left = this.logicalOR();\n    var middle;\n    var token;\n    if ((token = this.expect('?'))) {\n      middle = this.ternary();\n      if ((token = this.expect(':'))) {\n        return this.ternaryFn(left, middle, this.ternary());\n      } else {\n        this.throwError('expected :', token);\n      }\n    } else {\n      return left;\n    }\n  },\n\n  logicalOR: function() {\n    var left = this.logicalAND();\n    var token;\n    while (true) {\n      if ((token = this.expect('||'))) {\n        left = this.binaryFn(left, token.fn, this.logicalAND());\n      } else {\n        return left;\n      }\n    }\n  },\n\n  logicalAND: function() {\n    var left = this.equality();\n    var token;\n    if ((token = this.expect('&&'))) {\n      left = this.binaryFn(left, token.fn, this.logicalAND());\n    }\n    return left;\n  },\n\n  equality: function() {\n    var left = this.relational();\n    var token;\n    if ((token = this.expect('==','!=','===','!=='))) {\n      left = this.binaryFn(left, token.fn, this.equality());\n    }\n    return left;\n  },\n\n  relational: function() {\n    var left = this.additive();\n    var token;\n    if ((token = this.expect('<', '>', '<=', '>='))) {\n      left = this.binaryFn(left, token.fn, this.relational());\n    }\n    return left;\n  },\n\n  additive: function() {\n    var left = this.multiplicative();\n    var token;\n    while ((token = this.expect('+','-'))) {\n      left = this.binaryFn(left, token.fn, this.multiplicative());\n    }\n    return left;\n  },\n\n  multiplicative: function() {\n    var left = this.unary();\n    var token;\n    while ((token = this.expect('*','/','%'))) {\n      left = this.binaryFn(left, token.fn, this.unary());\n    }\n    return left;\n  },\n\n  unary: function() {\n    var token;\n    if (this.expect('+')) {\n      return this.primary();\n    } else if ((token = this.expect('-'))) {\n      return this.binaryFn(Parser.ZERO, token.fn, this.unary());\n    } else if ((token = this.expect('!'))) {\n      return this.unaryFn(token.fn, this.unary());\n    } else {\n      return this.primary();\n    }\n  },\n\n  fieldAccess: function(object) {\n    var parser = this;\n    var field = this.expect().text;\n    var getter = getterFn(field, this.options, this.text);\n\n    return extend(function(scope, locals, self) {\n      return getter(self || object(scope, locals));\n    }, {\n      assign: function(scope, value, locals) {\n        return setter(object(scope, locals), field, value, parser.text, parser.options);\n      }\n    });\n  },\n\n  objectIndex: function(obj) {\n    var parser = this;\n\n    var indexFn = this.expression();\n    this.consume(']');\n\n    return extend(function(self, locals) {\n      var o = obj(self, locals),\n          i = indexFn(self, locals),\n          v, p;\n\n      if (!o) return undefined;\n      v = ensureSafeObject(o[i], parser.text);\n      if (v && v.then && parser.options.unwrapPromises) {\n        p = v;\n        if (!('$$v' in v)) {\n          p.$$v = undefined;\n          p.then(function(val) { p.$$v = val; });\n        }\n        v = v.$$v;\n      }\n      return v;\n    }, {\n      assign: function(self, value, locals) {\n        var key = indexFn(self, locals);\n        // prevent overwriting of Function.constructor which would break ensureSafeObject check\n        var safe = ensureSafeObject(obj(self, locals), parser.text);\n        return safe[key] = value;\n      }\n    });\n  },\n\n  functionCall: function(fn, contextGetter) {\n    var argsFn = [];\n    if (this.peekToken().text !== ')') {\n      do {\n        argsFn.push(this.expression());\n      } while (this.expect(','));\n    }\n    this.consume(')');\n\n    var parser = this;\n\n    return function(scope, locals) {\n      var args = [];\n      var context = contextGetter ? contextGetter(scope, locals) : scope;\n\n      for (var i = 0; i < argsFn.length; i++) {\n        args.push(argsFn[i](scope, locals));\n      }\n      var fnPtr = fn(scope, locals, context) || noop;\n\n      ensureSafeObject(context, parser.text);\n      ensureSafeObject(fnPtr, parser.text);\n\n      // IE stupidity! (IE doesn't have apply for some native functions)\n      var v = fnPtr.apply\n            ? fnPtr.apply(context, args)\n            : fnPtr(args[0], args[1], args[2], args[3], args[4]);\n\n      return ensureSafeObject(v, parser.text);\n    };\n  },\n\n  // This is used with json array declaration\n  arrayDeclaration: function () {\n    var elementFns = [];\n    var allConstant = true;\n    if (this.peekToken().text !== ']') {\n      do {\n        if (this.peek(']')) {\n          // Support trailing commas per ES5.1.\n          break;\n        }\n        var elementFn = this.expression();\n        elementFns.push(elementFn);\n        if (!elementFn.constant) {\n          allConstant = false;\n        }\n      } while (this.expect(','));\n    }\n    this.consume(']');\n\n    return extend(function(self, locals) {\n      var array = [];\n      for (var i = 0; i < elementFns.length; i++) {\n        array.push(elementFns[i](self, locals));\n      }\n      return array;\n    }, {\n      literal: true,\n      constant: allConstant\n    });\n  },\n\n  object: function () {\n    var keyValues = [];\n    var allConstant = true;\n    if (this.peekToken().text !== '}') {\n      do {\n        if (this.peek('}')) {\n          // Support trailing commas per ES5.1.\n          break;\n        }\n        var token = this.expect(),\n        key = token.string || token.text;\n        this.consume(':');\n        var value = this.expression();\n        keyValues.push({key: key, value: value});\n        if (!value.constant) {\n          allConstant = false;\n        }\n      } while (this.expect(','));\n    }\n    this.consume('}');\n\n    return extend(function(self, locals) {\n      var object = {};\n      for (var i = 0; i < keyValues.length; i++) {\n        var keyValue = keyValues[i];\n        object[keyValue.key] = keyValue.value(self, locals);\n      }\n      return object;\n    }, {\n      literal: true,\n      constant: allConstant\n    });\n  }\n};\n\n\n//////////////////////////////////////////////////\n// Parser helper functions\n//////////////////////////////////////////////////\n\nfunction setter(obj, path, setValue, fullExp, options) {\n  //needed?\n  options = options || {};\n\n  var element = path.split('.'), key;\n  for (var i = 0; element.length > 1; i++) {\n    key = ensureSafeMemberName(element.shift(), fullExp);\n    var propertyObj = obj[key];\n    if (!propertyObj) {\n      propertyObj = {};\n      obj[key] = propertyObj;\n    }\n    obj = propertyObj;\n    if (obj.then && options.unwrapPromises) {\n      promiseWarning(fullExp);\n      if (!(\"$$v\" in obj)) {\n        (function(promise) {\n          promise.then(function(val) { promise.$$v = val; }); }\n        )(obj);\n      }\n      if (obj.$$v === undefined) {\n        obj.$$v = {};\n      }\n      obj = obj.$$v;\n    }\n  }\n  key = ensureSafeMemberName(element.shift(), fullExp);\n  obj[key] = setValue;\n  return setValue;\n}\n\nvar getterFnCache = {};\n\n/**\n * Implementation of the \"Black Hole\" variant from:\n * - http://jsperf.com/angularjs-parse-getter/4\n * - http://jsperf.com/path-evaluation-simplified/7\n */\nfunction cspSafeGetterFn(key0, key1, key2, key3, key4, fullExp, options) {\n  ensureSafeMemberName(key0, fullExp);\n  ensureSafeMemberName(key1, fullExp);\n  ensureSafeMemberName(key2, fullExp);\n  ensureSafeMemberName(key3, fullExp);\n  ensureSafeMemberName(key4, fullExp);\n\n  return !options.unwrapPromises\n      ? function cspSafeGetter(scope, locals) {\n          var pathVal = (locals && locals.hasOwnProperty(key0)) ? locals : scope;\n\n          if (pathVal == null) return pathVal;\n          pathVal = pathVal[key0];\n\n          if (!key1) return pathVal;\n          if (pathVal == null) return undefined;\n          pathVal = pathVal[key1];\n\n          if (!key2) return pathVal;\n          if (pathVal == null) return undefined;\n          pathVal = pathVal[key2];\n\n          if (!key3) return pathVal;\n          if (pathVal == null) return undefined;\n          pathVal = pathVal[key3];\n\n          if (!key4) return pathVal;\n          if (pathVal == null) return undefined;\n          pathVal = pathVal[key4];\n\n          return pathVal;\n        }\n      : function cspSafePromiseEnabledGetter(scope, locals) {\n          var pathVal = (locals && locals.hasOwnProperty(key0)) ? locals : scope,\n              promise;\n\n          if (pathVal == null) return pathVal;\n\n          pathVal = pathVal[key0];\n          if (pathVal && pathVal.then) {\n            promiseWarning(fullExp);\n            if (!(\"$$v\" in pathVal)) {\n              promise = pathVal;\n              promise.$$v = undefined;\n              promise.then(function(val) { promise.$$v = val; });\n            }\n            pathVal = pathVal.$$v;\n          }\n\n          if (!key1) return pathVal;\n          if (pathVal == null) return undefined;\n          pathVal = pathVal[key1];\n          if (pathVal && pathVal.then) {\n            promiseWarning(fullExp);\n            if (!(\"$$v\" in pathVal)) {\n              promise = pathVal;\n              promise.$$v = undefined;\n              promise.then(function(val) { promise.$$v = val; });\n            }\n            pathVal = pathVal.$$v;\n          }\n\n          if (!key2) return pathVal;\n          if (pathVal == null) return undefined;\n          pathVal = pathVal[key2];\n          if (pathVal && pathVal.then) {\n            promiseWarning(fullExp);\n            if (!(\"$$v\" in pathVal)) {\n              promise = pathVal;\n              promise.$$v = undefined;\n              promise.then(function(val) { promise.$$v = val; });\n            }\n            pathVal = pathVal.$$v;\n          }\n\n          if (!key3) return pathVal;\n          if (pathVal == null) return undefined;\n          pathVal = pathVal[key3];\n          if (pathVal && pathVal.then) {\n            promiseWarning(fullExp);\n            if (!(\"$$v\" in pathVal)) {\n              promise = pathVal;\n              promise.$$v = undefined;\n              promise.then(function(val) { promise.$$v = val; });\n            }\n            pathVal = pathVal.$$v;\n          }\n\n          if (!key4) return pathVal;\n          if (pathVal == null) return undefined;\n          pathVal = pathVal[key4];\n          if (pathVal && pathVal.then) {\n            promiseWarning(fullExp);\n            if (!(\"$$v\" in pathVal)) {\n              promise = pathVal;\n              promise.$$v = undefined;\n              promise.then(function(val) { promise.$$v = val; });\n            }\n            pathVal = pathVal.$$v;\n          }\n          return pathVal;\n        };\n}\n\nfunction simpleGetterFn1(key0, fullExp) {\n  ensureSafeMemberName(key0, fullExp);\n\n  return function simpleGetterFn1(scope, locals) {\n    if (scope == null) return undefined;\n    return ((locals && locals.hasOwnProperty(key0)) ? locals : scope)[key0];\n  };\n}\n\nfunction simpleGetterFn2(key0, key1, fullExp) {\n  ensureSafeMemberName(key0, fullExp);\n  ensureSafeMemberName(key1, fullExp);\n\n  return function simpleGetterFn2(scope, locals) {\n    if (scope == null) return undefined;\n    scope = ((locals && locals.hasOwnProperty(key0)) ? locals : scope)[key0];\n    return scope == null ? undefined : scope[key1];\n  };\n}\n\nfunction getterFn(path, options, fullExp) {\n  // Check whether the cache has this getter already.\n  // We can use hasOwnProperty directly on the cache because we ensure,\n  // see below, that the cache never stores a path called 'hasOwnProperty'\n  if (getterFnCache.hasOwnProperty(path)) {\n    return getterFnCache[path];\n  }\n\n  var pathKeys = path.split('.'),\n      pathKeysLength = pathKeys.length,\n      fn;\n\n  // When we have only 1 or 2 tokens, use optimized special case closures.\n  // http://jsperf.com/angularjs-parse-getter/6\n  if (!options.unwrapPromises && pathKeysLength === 1) {\n    fn = simpleGetterFn1(pathKeys[0], fullExp);\n  } else if (!options.unwrapPromises && pathKeysLength === 2) {\n    fn = simpleGetterFn2(pathKeys[0], pathKeys[1], fullExp);\n  } else if (options.csp) {\n    if (pathKeysLength < 6) {\n      fn = cspSafeGetterFn(pathKeys[0], pathKeys[1], pathKeys[2], pathKeys[3], pathKeys[4], fullExp,\n                          options);\n    } else {\n      fn = function(scope, locals) {\n        var i = 0, val;\n        do {\n          val = cspSafeGetterFn(pathKeys[i++], pathKeys[i++], pathKeys[i++], pathKeys[i++],\n                                pathKeys[i++], fullExp, options)(scope, locals);\n\n          locals = undefined; // clear after first iteration\n          scope = val;\n        } while (i < pathKeysLength);\n        return val;\n      };\n    }\n  } else {\n    var code = 'var p;\\n';\n    forEach(pathKeys, function(key, index) {\n      ensureSafeMemberName(key, fullExp);\n      code += 'if(s == null) return undefined;\\n' +\n              's='+ (index\n                      // we simply dereference 's' on any .dot notation\n                      ? 's'\n                      // but if we are first then we check locals first, and if so read it first\n                      : '((k&&k.hasOwnProperty(\"' + key + '\"))?k:s)') + '[\"' + key + '\"]' + ';\\n' +\n              (options.unwrapPromises\n                ? 'if (s && s.then) {\\n' +\n                  ' pw(\"' + fullExp.replace(/([\"\\r\\n])/g, '\\\\$1') + '\");\\n' +\n                  ' if (!(\"$$v\" in s)) {\\n' +\n                    ' p=s;\\n' +\n                    ' p.$$v = undefined;\\n' +\n                    ' p.then(function(v) {p.$$v=v;});\\n' +\n                    '}\\n' +\n                  ' s=s.$$v\\n' +\n                '}\\n'\n                : '');\n    });\n    code += 'return s;';\n\n    /* jshint -W054 */\n    var evaledFnGetter = new Function('s', 'k', 'pw', code); // s=scope, k=locals, pw=promiseWarning\n    /* jshint +W054 */\n    evaledFnGetter.toString = valueFn(code);\n    fn = options.unwrapPromises ? function(scope, locals) {\n      return evaledFnGetter(scope, locals, promiseWarning);\n    } : evaledFnGetter;\n  }\n\n  // Only cache the value if it's not going to mess up the cache object\n  // This is more performant that using Object.prototype.hasOwnProperty.call\n  if (path !== 'hasOwnProperty') {\n    getterFnCache[path] = fn;\n  }\n  return fn;\n}\n\n///////////////////////////////////\n\n/**\n * @ngdoc service\n * @name $parse\n * @kind function\n *\n * @description\n *\n * Converts Angular {@link guide/expression expression} into a function.\n *\n * ```js\n *   var getter = $parse('user.name');\n *   var setter = getter.assign;\n *   var context = {user:{name:'angular'}};\n *   var locals = {user:{name:'local'}};\n *\n *   expect(getter(context)).toEqual('angular');\n *   setter(context, 'newValue');\n *   expect(context.user.name).toEqual('newValue');\n *   expect(getter(context, locals)).toEqual('local');\n * ```\n *\n *\n * @param {string} expression String expression to compile.\n * @returns {function(context, locals)} a function which represents the compiled expression:\n *\n *    * `context` – `{object}` – an object against which any expressions embedded in the strings\n *      are evaluated against (typically a scope object).\n *    * `locals` – `{object=}` – local variables context object, useful for overriding values in\n *      `context`.\n *\n *    The returned function also has the following properties:\n *      * `literal` – `{boolean}` – whether the expression's top-level node is a JavaScript\n *        literal.\n *      * `constant` – `{boolean}` – whether the expression is made entirely of JavaScript\n *        constant literals.\n *      * `assign` – `{?function(context, value)}` – if the expression is assignable, this will be\n *        set to a function to change its value on the given context.\n *\n */\n\n\n/**\n * @ngdoc provider\n * @name $parseProvider\n * @kind function\n *\n * @description\n * `$parseProvider` can be used for configuring the default behavior of the {@link ng.$parse $parse}\n *  service.\n */\nfunction $ParseProvider() {\n  var cache = {};\n\n  var $parseOptions = {\n    csp: false,\n    unwrapPromises: false,\n    logPromiseWarnings: true\n  };\n\n\n  /**\n   * @deprecated Promise unwrapping via $parse is deprecated and will be removed in the future.\n   *\n   * @ngdoc method\n   * @name $parseProvider#unwrapPromises\n   * @description\n   *\n   * **This feature is deprecated, see deprecation notes below for more info**\n   *\n   * If set to true (default is false), $parse will unwrap promises automatically when a promise is\n   * found at any part of the expression. In other words, if set to true, the expression will always\n   * result in a non-promise value.\n   *\n   * While the promise is unresolved, it's treated as undefined, but once resolved and fulfilled,\n   * the fulfillment value is used in place of the promise while evaluating the expression.\n   *\n   * **Deprecation notice**\n   *\n   * This is a feature that didn't prove to be wildly useful or popular, primarily because of the\n   * dichotomy between data access in templates (accessed as raw values) and controller code\n   * (accessed as promises).\n   *\n   * In most code we ended up resolving promises manually in controllers anyway and thus unifying\n   * the model access there.\n   *\n   * Other downsides of automatic promise unwrapping:\n   *\n   * - when building components it's often desirable to receive the raw promises\n   * - adds complexity and slows down expression evaluation\n   * - makes expression code pre-generation unattractive due to the amount of code that needs to be\n   *   generated\n   * - makes IDE auto-completion and tool support hard\n   *\n   * **Warning Logs**\n   *\n   * If the unwrapping is enabled, Angular will log a warning about each expression that unwraps a\n   * promise (to reduce the noise, each expression is logged only once). To disable this logging use\n   * `$parseProvider.logPromiseWarnings(false)` api.\n   *\n   *\n   * @param {boolean=} value New value.\n   * @returns {boolean|self} Returns the current setting when used as getter and self if used as\n   *                         setter.\n   */\n  this.unwrapPromises = function(value) {\n    if (isDefined(value)) {\n      $parseOptions.unwrapPromises = !!value;\n      return this;\n    } else {\n      return $parseOptions.unwrapPromises;\n    }\n  };\n\n\n  /**\n   * @deprecated Promise unwrapping via $parse is deprecated and will be removed in the future.\n   *\n   * @ngdoc method\n   * @name $parseProvider#logPromiseWarnings\n   * @description\n   *\n   * Controls whether Angular should log a warning on any encounter of a promise in an expression.\n   *\n   * The default is set to `true`.\n   *\n   * This setting applies only if `$parseProvider.unwrapPromises` setting is set to true as well.\n   *\n   * @param {boolean=} value New value.\n   * @returns {boolean|self} Returns the current setting when used as getter and self if used as\n   *                         setter.\n   */\n this.logPromiseWarnings = function(value) {\n    if (isDefined(value)) {\n      $parseOptions.logPromiseWarnings = value;\n      return this;\n    } else {\n      return $parseOptions.logPromiseWarnings;\n    }\n  };\n\n\n  this.$get = ['$filter', '$sniffer', '$log', function($filter, $sniffer, $log) {\n    $parseOptions.csp = $sniffer.csp;\n\n    promiseWarning = function promiseWarningFn(fullExp) {\n      if (!$parseOptions.logPromiseWarnings || promiseWarningCache.hasOwnProperty(fullExp)) return;\n      promiseWarningCache[fullExp] = true;\n      $log.warn('[$parse] Promise found in the expression `' + fullExp + '`. ' +\n          'Automatic unwrapping of promises in Angular expressions is deprecated.');\n    };\n\n    return function(exp) {\n      var parsedExpression;\n\n      switch (typeof exp) {\n        case 'string':\n\n          if (cache.hasOwnProperty(exp)) {\n            return cache[exp];\n          }\n\n          var lexer = new Lexer($parseOptions);\n          var parser = new Parser(lexer, $filter, $parseOptions);\n          parsedExpression = parser.parse(exp);\n\n          if (exp !== 'hasOwnProperty') {\n            // Only cache the value if it's not going to mess up the cache object\n            // This is more performant that using Object.prototype.hasOwnProperty.call\n            cache[exp] = parsedExpression;\n          }\n\n          return parsedExpression;\n\n        case 'function':\n          return exp;\n\n        default:\n          return noop;\n      }\n    };\n  }];\n}\n\n/**\n * @ngdoc service\n * @name $q\n * @requires $rootScope\n *\n * @description\n * A promise/deferred implementation inspired by [Kris Kowal's Q](https://github.com/kriskowal/q).\n *\n * [The CommonJS Promise proposal](http://wiki.commonjs.org/wiki/Promises) describes a promise as an\n * interface for interacting with an object that represents the result of an action that is\n * performed asynchronously, and may or may not be finished at any given point in time.\n *\n * From the perspective of dealing with error handling, deferred and promise APIs are to\n * asynchronous programming what `try`, `catch` and `throw` keywords are to synchronous programming.\n *\n * ```js\n *   // for the purpose of this example let's assume that variables `$q`, `scope` and `okToGreet`\n *   // are available in the current lexical scope (they could have been injected or passed in).\n *\n *   function asyncGreet(name) {\n *     var deferred = $q.defer();\n *\n *     setTimeout(function() {\n *       // since this fn executes async in a future turn of the event loop, we need to wrap\n *       // our code into an $apply call so that the model changes are properly observed.\n *       scope.$apply(function() {\n *         deferred.notify('About to greet ' + name + '.');\n *\n *         if (okToGreet(name)) {\n *           deferred.resolve('Hello, ' + name + '!');\n *         } else {\n *           deferred.reject('Greeting ' + name + ' is not allowed.');\n *         }\n *       });\n *     }, 1000);\n *\n *     return deferred.promise;\n *   }\n *\n *   var promise = asyncGreet('Robin Hood');\n *   promise.then(function(greeting) {\n *     alert('Success: ' + greeting);\n *   }, function(reason) {\n *     alert('Failed: ' + reason);\n *   }, function(update) {\n *     alert('Got notification: ' + update);\n *   });\n * ```\n *\n * At first it might not be obvious why this extra complexity is worth the trouble. The payoff\n * comes in the way of guarantees that promise and deferred APIs make, see\n * https://github.com/kriskowal/uncommonjs/blob/master/promises/specification.md.\n *\n * Additionally the promise api allows for composition that is very hard to do with the\n * traditional callback ([CPS](http://en.wikipedia.org/wiki/Continuation-passing_style)) approach.\n * For more on this please see the [Q documentation](https://github.com/kriskowal/q) especially the\n * section on serial or parallel joining of promises.\n *\n *\n * # The Deferred API\n *\n * A new instance of deferred is constructed by calling `$q.defer()`.\n *\n * The purpose of the deferred object is to expose the associated Promise instance as well as APIs\n * that can be used for signaling the successful or unsuccessful completion, as well as the status\n * of the task.\n *\n * **Methods**\n *\n * - `resolve(value)` – resolves the derived promise with the `value`. If the value is a rejection\n *   constructed via `$q.reject`, the promise will be rejected instead.\n * - `reject(reason)` – rejects the derived promise with the `reason`. This is equivalent to\n *   resolving it with a rejection constructed via `$q.reject`.\n * - `notify(value)` - provides updates on the status of the promise's execution. This may be called\n *   multiple times before the promise is either resolved or rejected.\n *\n * **Properties**\n *\n * - promise – `{Promise}` – promise object associated with this deferred.\n *\n *\n * # The Promise API\n *\n * A new promise instance is created when a deferred instance is created and can be retrieved by\n * calling `deferred.promise`.\n *\n * The purpose of the promise object is to allow for interested parties to get access to the result\n * of the deferred task when it completes.\n *\n * **Methods**\n *\n * - `then(successCallback, errorCallback, notifyCallback)` – regardless of when the promise was or\n *   will be resolved or rejected, `then` calls one of the success or error callbacks asynchronously\n *   as soon as the result is available. The callbacks are called with a single argument: the result\n *   or rejection reason. Additionally, the notify callback may be called zero or more times to\n *   provide a progress indication, before the promise is resolved or rejected.\n *\n *   This method *returns a new promise* which is resolved or rejected via the return value of the\n *   `successCallback`, `errorCallback`. It also notifies via the return value of the\n *   `notifyCallback` method. The promise can not be resolved or rejected from the notifyCallback\n *   method.\n *\n * - `catch(errorCallback)` – shorthand for `promise.then(null, errorCallback)`\n *\n * - `finally(callback)` – allows you to observe either the fulfillment or rejection of a promise,\n *   but to do so without modifying the final value. This is useful to release resources or do some\n *   clean-up that needs to be done whether the promise was rejected or resolved. See the [full\n *   specification](https://github.com/kriskowal/q/wiki/API-Reference#promisefinallycallback) for\n *   more information.\n *\n *   Because `finally` is a reserved word in JavaScript and reserved keywords are not supported as\n *   property names by ES3, you'll need to invoke the method like `promise['finally'](callback)` to\n *   make your code IE8 and Android 2.x compatible.\n *\n * # Chaining promises\n *\n * Because calling the `then` method of a promise returns a new derived promise, it is easily\n * possible to create a chain of promises:\n *\n * ```js\n *   promiseB = promiseA.then(function(result) {\n *     return result + 1;\n *   });\n *\n *   // promiseB will be resolved immediately after promiseA is resolved and its value\n *   // will be the result of promiseA incremented by 1\n * ```\n *\n * It is possible to create chains of any length and since a promise can be resolved with another\n * promise (which will defer its resolution further), it is possible to pause/defer resolution of\n * the promises at any point in the chain. This makes it possible to implement powerful APIs like\n * $http's response interceptors.\n *\n *\n * # Differences between Kris Kowal's Q and $q\n *\n *  There are two main differences:\n *\n * - $q is integrated with the {@link ng.$rootScope.Scope} Scope model observation\n *   mechanism in angular, which means faster propagation of resolution or rejection into your\n *   models and avoiding unnecessary browser repaints, which would result in flickering UI.\n * - Q has many more features than $q, but that comes at a cost of bytes. $q is tiny, but contains\n *   all the important functionality needed for common async tasks.\n *\n *  # Testing\n *\n *  ```js\n *    it('should simulate promise', inject(function($q, $rootScope) {\n *      var deferred = $q.defer();\n *      var promise = deferred.promise;\n *      var resolvedValue;\n *\n *      promise.then(function(value) { resolvedValue = value; });\n *      expect(resolvedValue).toBeUndefined();\n *\n *      // Simulate resolving of promise\n *      deferred.resolve(123);\n *      // Note that the 'then' function does not get called synchronously.\n *      // This is because we want the promise API to always be async, whether or not\n *      // it got called synchronously or asynchronously.\n *      expect(resolvedValue).toBeUndefined();\n *\n *      // Propagate promise resolution to 'then' functions using $apply().\n *      $rootScope.$apply();\n *      expect(resolvedValue).toEqual(123);\n *    }));\n *  ```\n */\nfunction $QProvider() {\n\n  this.$get = ['$rootScope', '$exceptionHandler', function($rootScope, $exceptionHandler) {\n    return qFactory(function(callback) {\n      $rootScope.$evalAsync(callback);\n    }, $exceptionHandler);\n  }];\n}\n\n\n/**\n * Constructs a promise manager.\n *\n * @param {function(Function)} nextTick Function for executing functions in the next turn.\n * @param {function(...*)} exceptionHandler Function into which unexpected exceptions are passed for\n *     debugging purposes.\n * @returns {object} Promise manager.\n */\nfunction qFactory(nextTick, exceptionHandler) {\n\n  /**\n   * @ngdoc method\n   * @name $q#defer\n   * @kind function\n   *\n   * @description\n   * Creates a `Deferred` object which represents a task which will finish in the future.\n   *\n   * @returns {Deferred} Returns a new instance of deferred.\n   */\n  var defer = function() {\n    var pending = [],\n        value, deferred;\n\n    deferred = {\n\n      resolve: function(val) {\n        if (pending) {\n          var callbacks = pending;\n          pending = undefined;\n          value = ref(val);\n\n          if (callbacks.length) {\n            nextTick(function() {\n              var callback;\n              for (var i = 0, ii = callbacks.length; i < ii; i++) {\n                callback = callbacks[i];\n                value.then(callback[0], callback[1], callback[2]);\n              }\n            });\n          }\n        }\n      },\n\n\n      reject: function(reason) {\n        deferred.resolve(createInternalRejectedPromise(reason));\n      },\n\n\n      notify: function(progress) {\n        if (pending) {\n          var callbacks = pending;\n\n          if (pending.length) {\n            nextTick(function() {\n              var callback;\n              for (var i = 0, ii = callbacks.length; i < ii; i++) {\n                callback = callbacks[i];\n                callback[2](progress);\n              }\n            });\n          }\n        }\n      },\n\n\n      promise: {\n        then: function(callback, errback, progressback) {\n          var result = defer();\n\n          var wrappedCallback = function(value) {\n            try {\n              result.resolve((isFunction(callback) ? callback : defaultCallback)(value));\n            } catch(e) {\n              result.reject(e);\n              exceptionHandler(e);\n            }\n          };\n\n          var wrappedErrback = function(reason) {\n            try {\n              result.resolve((isFunction(errback) ? errback : defaultErrback)(reason));\n            } catch(e) {\n              result.reject(e);\n              exceptionHandler(e);\n            }\n          };\n\n          var wrappedProgressback = function(progress) {\n            try {\n              result.notify((isFunction(progressback) ? progressback : defaultCallback)(progress));\n            } catch(e) {\n              exceptionHandler(e);\n            }\n          };\n\n          if (pending) {\n            pending.push([wrappedCallback, wrappedErrback, wrappedProgressback]);\n          } else {\n            value.then(wrappedCallback, wrappedErrback, wrappedProgressback);\n          }\n\n          return result.promise;\n        },\n\n        \"catch\": function(callback) {\n          return this.then(null, callback);\n        },\n\n        \"finally\": function(callback) {\n\n          function makePromise(value, resolved) {\n            var result = defer();\n            if (resolved) {\n              result.resolve(value);\n            } else {\n              result.reject(value);\n            }\n            return result.promise;\n          }\n\n          function handleCallback(value, isResolved) {\n            var callbackOutput = null;\n            try {\n              callbackOutput = (callback ||defaultCallback)();\n            } catch(e) {\n              return makePromise(e, false);\n            }\n            if (callbackOutput && isFunction(callbackOutput.then)) {\n              return callbackOutput.then(function() {\n                return makePromise(value, isResolved);\n              }, function(error) {\n                return makePromise(error, false);\n              });\n            } else {\n              return makePromise(value, isResolved);\n            }\n          }\n\n          return this.then(function(value) {\n            return handleCallback(value, true);\n          }, function(error) {\n            return handleCallback(error, false);\n          });\n        }\n      }\n    };\n\n    return deferred;\n  };\n\n\n  var ref = function(value) {\n    if (value && isFunction(value.then)) return value;\n    return {\n      then: function(callback) {\n        var result = defer();\n        nextTick(function() {\n          result.resolve(callback(value));\n        });\n        return result.promise;\n      }\n    };\n  };\n\n\n  /**\n   * @ngdoc method\n   * @name $q#reject\n   * @kind function\n   *\n   * @description\n   * Creates a promise that is resolved as rejected with the specified `reason`. This api should be\n   * used to forward rejection in a chain of promises. If you are dealing with the last promise in\n   * a promise chain, you don't need to worry about it.\n   *\n   * When comparing deferreds/promises to the familiar behavior of try/catch/throw, think of\n   * `reject` as the `throw` keyword in JavaScript. This also means that if you \"catch\" an error via\n   * a promise error callback and you want to forward the error to the promise derived from the\n   * current promise, you have to \"rethrow\" the error by returning a rejection constructed via\n   * `reject`.\n   *\n   * ```js\n   *   promiseB = promiseA.then(function(result) {\n   *     // success: do something and resolve promiseB\n   *     //          with the old or a new result\n   *     return result;\n   *   }, function(reason) {\n   *     // error: handle the error if possible and\n   *     //        resolve promiseB with newPromiseOrValue,\n   *     //        otherwise forward the rejection to promiseB\n   *     if (canHandle(reason)) {\n   *      // handle the error and recover\n   *      return newPromiseOrValue;\n   *     }\n   *     return $q.reject(reason);\n   *   });\n   * ```\n   *\n   * @param {*} reason Constant, message, exception or an object representing the rejection reason.\n   * @returns {Promise} Returns a promise that was already resolved as rejected with the `reason`.\n   */\n  var reject = function(reason) {\n    var result = defer();\n    result.reject(reason);\n    return result.promise;\n  };\n\n  var createInternalRejectedPromise = function(reason) {\n    return {\n      then: function(callback, errback) {\n        var result = defer();\n        nextTick(function() {\n          try {\n            result.resolve((isFunction(errback) ? errback : defaultErrback)(reason));\n          } catch(e) {\n            result.reject(e);\n            exceptionHandler(e);\n          }\n        });\n        return result.promise;\n      }\n    };\n  };\n\n\n  /**\n   * @ngdoc method\n   * @name $q#when\n   * @kind function\n   *\n   * @description\n   * Wraps an object that might be a value or a (3rd party) then-able promise into a $q promise.\n   * This is useful when you are dealing with an object that might or might not be a promise, or if\n   * the promise comes from a source that can't be trusted.\n   *\n   * @param {*} value Value or a promise\n   * @returns {Promise} Returns a promise of the passed value or promise\n   */\n  var when = function(value, callback, errback, progressback) {\n    var result = defer(),\n        done;\n\n    var wrappedCallback = function(value) {\n      try {\n        return (isFunction(callback) ? callback : defaultCallback)(value);\n      } catch (e) {\n        exceptionHandler(e);\n        return reject(e);\n      }\n    };\n\n    var wrappedErrback = function(reason) {\n      try {\n        return (isFunction(errback) ? errback : defaultErrback)(reason);\n      } catch (e) {\n        exceptionHandler(e);\n        return reject(e);\n      }\n    };\n\n    var wrappedProgressback = function(progress) {\n      try {\n        return (isFunction(progressback) ? progressback : defaultCallback)(progress);\n      } catch (e) {\n        exceptionHandler(e);\n      }\n    };\n\n    nextTick(function() {\n      ref(value).then(function(value) {\n        if (done) return;\n        done = true;\n        result.resolve(ref(value).then(wrappedCallback, wrappedErrback, wrappedProgressback));\n      }, function(reason) {\n        if (done) return;\n        done = true;\n        result.resolve(wrappedErrback(reason));\n      }, function(progress) {\n        if (done) return;\n        result.notify(wrappedProgressback(progress));\n      });\n    });\n\n    return result.promise;\n  };\n\n\n  function defaultCallback(value) {\n    return value;\n  }\n\n\n  function defaultErrback(reason) {\n    return reject(reason);\n  }\n\n\n  /**\n   * @ngdoc method\n   * @name $q#all\n   * @kind function\n   *\n   * @description\n   * Combines multiple promises into a single promise that is resolved when all of the input\n   * promises are resolved.\n   *\n   * @param {Array.<Promise>|Object.<Promise>} promises An array or hash of promises.\n   * @returns {Promise} Returns a single promise that will be resolved with an array/hash of values,\n   *   each value corresponding to the promise at the same index/key in the `promises` array/hash.\n   *   If any of the promises is resolved with a rejection, this resulting promise will be rejected\n   *   with the same rejection value.\n   */\n  function all(promises) {\n    var deferred = defer(),\n        counter = 0,\n        results = isArray(promises) ? [] : {};\n\n    forEach(promises, function(promise, key) {\n      counter++;\n      ref(promise).then(function(value) {\n        if (results.hasOwnProperty(key)) return;\n        results[key] = value;\n        if (!(--counter)) deferred.resolve(results);\n      }, function(reason) {\n        if (results.hasOwnProperty(key)) return;\n        deferred.reject(reason);\n      });\n    });\n\n    if (counter === 0) {\n      deferred.resolve(results);\n    }\n\n    return deferred.promise;\n  }\n\n  return {\n    defer: defer,\n    reject: reject,\n    when: when,\n    all: all\n  };\n}\n\nfunction $$RAFProvider(){ //rAF\n  this.$get = ['$window', '$timeout', function($window, $timeout) {\n    var requestAnimationFrame = $window.requestAnimationFrame ||\n                                $window.webkitRequestAnimationFrame ||\n                                $window.mozRequestAnimationFrame;\n\n    var cancelAnimationFrame = $window.cancelAnimationFrame ||\n                               $window.webkitCancelAnimationFrame ||\n                               $window.mozCancelAnimationFrame ||\n                               $window.webkitCancelRequestAnimationFrame;\n\n    var rafSupported = !!requestAnimationFrame;\n    var raf = rafSupported\n      ? function(fn) {\n          var id = requestAnimationFrame(fn);\n          return function() {\n            cancelAnimationFrame(id);\n          };\n        }\n      : function(fn) {\n          var timer = $timeout(fn, 16.66, false); // 1000 / 60 = 16.666\n          return function() {\n            $timeout.cancel(timer);\n          };\n        };\n\n    raf.supported = rafSupported;\n\n    return raf;\n  }];\n}\n\n/**\n * DESIGN NOTES\n *\n * The design decisions behind the scope are heavily favored for speed and memory consumption.\n *\n * The typical use of scope is to watch the expressions, which most of the time return the same\n * value as last time so we optimize the operation.\n *\n * Closures construction is expensive in terms of speed as well as memory:\n *   - No closures, instead use prototypical inheritance for API\n *   - Internal state needs to be stored on scope directly, which means that private state is\n *     exposed as $$____ properties\n *\n * Loop operations are optimized by using while(count--) { ... }\n *   - this means that in order to keep the same order of execution as addition we have to add\n *     items to the array at the beginning (unshift) instead of at the end (push)\n *\n * Child scopes are created and removed often\n *   - Using an array would be slow since inserts in middle are expensive so we use linked list\n *\n * There are few watches then a lot of observers. This is why you don't want the observer to be\n * implemented in the same way as watch. Watch requires return of initialization function which\n * are expensive to construct.\n */\n\n\n/**\n * @ngdoc provider\n * @name $rootScopeProvider\n * @description\n *\n * Provider for the $rootScope service.\n */\n\n/**\n * @ngdoc method\n * @name $rootScopeProvider#digestTtl\n * @description\n *\n * Sets the number of `$digest` iterations the scope should attempt to execute before giving up and\n * assuming that the model is unstable.\n *\n * The current default is 10 iterations.\n *\n * In complex applications it's possible that the dependencies between `$watch`s will result in\n * several digest iterations. However if an application needs more than the default 10 digest\n * iterations for its model to stabilize then you should investigate what is causing the model to\n * continuously change during the digest.\n *\n * Increasing the TTL could have performance implications, so you should not change it without\n * proper justification.\n *\n * @param {number} limit The number of digest iterations.\n */\n\n\n/**\n * @ngdoc service\n * @name $rootScope\n * @description\n *\n * Every application has a single root {@link ng.$rootScope.Scope scope}.\n * All other scopes are descendant scopes of the root scope. Scopes provide separation\n * between the model and the view, via a mechanism for watching the model for changes.\n * They also provide an event emission/broadcast and subscription facility. See the\n * {@link guide/scope developer guide on scopes}.\n */\nfunction $RootScopeProvider(){\n  var TTL = 10;\n  var $rootScopeMinErr = minErr('$rootScope');\n  var lastDirtyWatch = null;\n\n  this.digestTtl = function(value) {\n    if (arguments.length) {\n      TTL = value;\n    }\n    return TTL;\n  };\n\n  this.$get = ['$injector', '$exceptionHandler', '$parse', '$browser',\n      function( $injector,   $exceptionHandler,   $parse,   $browser) {\n\n    /**\n     * @ngdoc type\n     * @name $rootScope.Scope\n     *\n     * @description\n     * A root scope can be retrieved using the {@link ng.$rootScope $rootScope} key from the\n     * {@link auto.$injector $injector}. Child scopes are created using the\n     * {@link ng.$rootScope.Scope#$new $new()} method. (Most scopes are created automatically when\n     * compiled HTML template is executed.)\n     *\n     * Here is a simple scope snippet to show how you can interact with the scope.\n     * ```html\n     * <file src=\"./test/ng/rootScopeSpec.js\" tag=\"docs1\" />\n     * ```\n     *\n     * # Inheritance\n     * A scope can inherit from a parent scope, as in this example:\n     * ```js\n         var parent = $rootScope;\n         var child = parent.$new();\n\n         parent.salutation = \"Hello\";\n         child.name = \"World\";\n         expect(child.salutation).toEqual('Hello');\n\n         child.salutation = \"Welcome\";\n         expect(child.salutation).toEqual('Welcome');\n         expect(parent.salutation).toEqual('Hello');\n     * ```\n     *\n     *\n     * @param {Object.<string, function()>=} providers Map of service factory which need to be\n     *                                       provided for the current scope. Defaults to {@link ng}.\n     * @param {Object.<string, *>=} instanceCache Provides pre-instantiated services which should\n     *                              append/override services provided by `providers`. This is handy\n     *                              when unit-testing and having the need to override a default\n     *                              service.\n     * @returns {Object} Newly created scope.\n     *\n     */\n    function Scope() {\n      this.$id = nextUid();\n      this.$$phase = this.$parent = this.$$watchers =\n                     this.$$nextSibling = this.$$prevSibling =\n                     this.$$childHead = this.$$childTail = null;\n      this['this'] = this.$root =  this;\n      this.$$destroyed = false;\n      this.$$asyncQueue = [];\n      this.$$postDigestQueue = [];\n      this.$$listeners = {};\n      this.$$listenerCount = {};\n      this.$$isolateBindings = {};\n    }\n\n    /**\n     * @ngdoc property\n     * @name $rootScope.Scope#$id\n     * @returns {number} Unique scope ID (monotonically increasing alphanumeric sequence) useful for\n     *   debugging.\n     */\n\n\n    Scope.prototype = {\n      constructor: Scope,\n      /**\n       * @ngdoc method\n       * @name $rootScope.Scope#$new\n       * @kind function\n       *\n       * @description\n       * Creates a new child {@link ng.$rootScope.Scope scope}.\n       *\n       * The parent scope will propagate the {@link ng.$rootScope.Scope#$digest $digest()} and\n       * {@link ng.$rootScope.Scope#$digest $digest()} events. The scope can be removed from the\n       * scope hierarchy using {@link ng.$rootScope.Scope#$destroy $destroy()}.\n       *\n       * {@link ng.$rootScope.Scope#$destroy $destroy()} must be called on a scope when it is\n       * desired for the scope and its child scopes to be permanently detached from the parent and\n       * thus stop participating in model change detection and listener notification by invoking.\n       *\n       * @param {boolean} isolate If true, then the scope does not prototypically inherit from the\n       *         parent scope. The scope is isolated, as it can not see parent scope properties.\n       *         When creating widgets, it is useful for the widget to not accidentally read parent\n       *         state.\n       *\n       * @returns {Object} The newly created child scope.\n       *\n       */\n      $new: function(isolate) {\n        var ChildScope,\n            child;\n\n        if (isolate) {\n          child = new Scope();\n          child.$root = this.$root;\n          // ensure that there is just one async queue per $rootScope and its children\n          child.$$asyncQueue = this.$$asyncQueue;\n          child.$$postDigestQueue = this.$$postDigestQueue;\n        } else {\n          // Only create a child scope class if somebody asks for one,\n          // but cache it to allow the VM to optimize lookups.\n          if (!this.$$childScopeClass) {\n            this.$$childScopeClass = function() {\n              this.$$watchers = this.$$nextSibling =\n                  this.$$childHead = this.$$childTail = null;\n              this.$$listeners = {};\n              this.$$listenerCount = {};\n              this.$id = nextUid();\n              this.$$childScopeClass = null;\n            };\n            this.$$childScopeClass.prototype = this;\n          }\n          child = new this.$$childScopeClass();\n        }\n        child['this'] = child;\n        child.$parent = this;\n        child.$$prevSibling = this.$$childTail;\n        if (this.$$childHead) {\n          this.$$childTail.$$nextSibling = child;\n          this.$$childTail = child;\n        } else {\n          this.$$childHead = this.$$childTail = child;\n        }\n        return child;\n      },\n\n      /**\n       * @ngdoc method\n       * @name $rootScope.Scope#$watch\n       * @kind function\n       *\n       * @description\n       * Registers a `listener` callback to be executed whenever the `watchExpression` changes.\n       *\n       * - The `watchExpression` is called on every call to {@link ng.$rootScope.Scope#$digest\n       *   $digest()} and should return the value that will be watched. (Since\n       *   {@link ng.$rootScope.Scope#$digest $digest()} reruns when it detects changes the\n       *   `watchExpression` can execute multiple times per\n       *   {@link ng.$rootScope.Scope#$digest $digest()} and should be idempotent.)\n       * - The `listener` is called only when the value from the current `watchExpression` and the\n       *   previous call to `watchExpression` are not equal (with the exception of the initial run,\n       *   see below). Inequality is determined according to reference inequality,\n       *   [strict comparison](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Comparison_Operators)\n       *    via the `!==` Javascript operator, unless `objectEquality == true`\n       *   (see next point)\n       * - When `objectEquality == true`, inequality of the `watchExpression` is determined\n       *   according to the {@link angular.equals} function. To save the value of the object for\n       *   later comparison, the {@link angular.copy} function is used. This therefore means that\n       *   watching complex objects will have adverse memory and performance implications.\n       * - The watch `listener` may change the model, which may trigger other `listener`s to fire.\n       *   This is achieved by rerunning the watchers until no changes are detected. The rerun\n       *   iteration limit is 10 to prevent an infinite loop deadlock.\n       *\n       *\n       * If you want to be notified whenever {@link ng.$rootScope.Scope#$digest $digest} is called,\n       * you can register a `watchExpression` function with no `listener`. (Since `watchExpression`\n       * can execute multiple times per {@link ng.$rootScope.Scope#$digest $digest} cycle when a\n       * change is detected, be prepared for multiple calls to your listener.)\n       *\n       * After a watcher is registered with the scope, the `listener` fn is called asynchronously\n       * (via {@link ng.$rootScope.Scope#$evalAsync $evalAsync}) to initialize the\n       * watcher. In rare cases, this is undesirable because the listener is called when the result\n       * of `watchExpression` didn't change. To detect this scenario within the `listener` fn, you\n       * can compare the `newVal` and `oldVal`. If these two values are identical (`===`) then the\n       * listener was called due to initialization.\n       *\n       * The example below contains an illustration of using a function as your $watch listener\n       *\n       *\n       * # Example\n       * ```js\n           // let's assume that scope was dependency injected as the $rootScope\n           var scope = $rootScope;\n           scope.name = 'misko';\n           scope.counter = 0;\n\n           expect(scope.counter).toEqual(0);\n           scope.$watch('name', function(newValue, oldValue) {\n             scope.counter = scope.counter + 1;\n           });\n           expect(scope.counter).toEqual(0);\n\n           scope.$digest();\n           // the listener is always called during the first $digest loop after it was registered\n           expect(scope.counter).toEqual(1);\n\n           scope.$digest();\n           // but now it will not be called unless the value changes\n           expect(scope.counter).toEqual(1);\n\n           scope.name = 'adam';\n           scope.$digest();\n           expect(scope.counter).toEqual(2);\n\n\n\n           // Using a listener function\n           var food;\n           scope.foodCounter = 0;\n           expect(scope.foodCounter).toEqual(0);\n           scope.$watch(\n             // This is the listener function\n             function() { return food; },\n             // This is the change handler\n             function(newValue, oldValue) {\n               if ( newValue !== oldValue ) {\n                 // Only increment the counter if the value changed\n                 scope.foodCounter = scope.foodCounter + 1;\n               }\n             }\n           );\n           // No digest has been run so the counter will be zero\n           expect(scope.foodCounter).toEqual(0);\n\n           // Run the digest but since food has not changed count will still be zero\n           scope.$digest();\n           expect(scope.foodCounter).toEqual(0);\n\n           // Update food and run digest.  Now the counter will increment\n           food = 'cheeseburger';\n           scope.$digest();\n           expect(scope.foodCounter).toEqual(1);\n\n       * ```\n       *\n       *\n       *\n       * @param {(function()|string)} watchExpression Expression that is evaluated on each\n       *    {@link ng.$rootScope.Scope#$digest $digest} cycle. A change in the return value triggers\n       *    a call to the `listener`.\n       *\n       *    - `string`: Evaluated as {@link guide/expression expression}\n       *    - `function(scope)`: called with current `scope` as a parameter.\n       * @param {(function()|string)=} listener Callback called whenever the return value of\n       *   the `watchExpression` changes.\n       *\n       *    - `string`: Evaluated as {@link guide/expression expression}\n       *    - `function(newValue, oldValue, scope)`: called with current and previous values as\n       *      parameters.\n       *\n       * @param {boolean=} objectEquality Compare for object equality using {@link angular.equals} instead of\n       *     comparing for reference equality.\n       * @returns {function()} Returns a deregistration function for this listener.\n       */\n      $watch: function(watchExp, listener, objectEquality) {\n        var scope = this,\n            get = compileToFn(watchExp, 'watch'),\n            array = scope.$$watchers,\n            watcher = {\n              fn: listener,\n              last: initWatchVal,\n              get: get,\n              exp: watchExp,\n              eq: !!objectEquality\n            };\n\n        lastDirtyWatch = null;\n\n        // in the case user pass string, we need to compile it, do we really need this ?\n        if (!isFunction(listener)) {\n          var listenFn = compileToFn(listener || noop, 'listener');\n          watcher.fn = function(newVal, oldVal, scope) {listenFn(scope);};\n        }\n\n        if (typeof watchExp == 'string' && get.constant) {\n          var originalFn = watcher.fn;\n          watcher.fn = function(newVal, oldVal, scope) {\n            originalFn.call(this, newVal, oldVal, scope);\n            arrayRemove(array, watcher);\n          };\n        }\n\n        if (!array) {\n          array = scope.$$watchers = [];\n        }\n        // we use unshift since we use a while loop in $digest for speed.\n        // the while loop reads in reverse order.\n        array.unshift(watcher);\n\n        return function deregisterWatch() {\n          arrayRemove(array, watcher);\n          lastDirtyWatch = null;\n        };\n      },\n\n\n      /**\n       * @ngdoc method\n       * @name $rootScope.Scope#$watchCollection\n       * @kind function\n       *\n       * @description\n       * Shallow watches the properties of an object and fires whenever any of the properties change\n       * (for arrays, this implies watching the array items; for object maps, this implies watching\n       * the properties). If a change is detected, the `listener` callback is fired.\n       *\n       * - The `obj` collection is observed via standard $watch operation and is examined on every\n       *   call to $digest() to see if any items have been added, removed, or moved.\n       * - The `listener` is called whenever anything within the `obj` has changed. Examples include\n       *   adding, removing, and moving items belonging to an object or array.\n       *\n       *\n       * # Example\n       * ```js\n          $scope.names = ['igor', 'matias', 'misko', 'james'];\n          $scope.dataCount = 4;\n\n          $scope.$watchCollection('names', function(newNames, oldNames) {\n            $scope.dataCount = newNames.length;\n          });\n\n          expect($scope.dataCount).toEqual(4);\n          $scope.$digest();\n\n          //still at 4 ... no changes\n          expect($scope.dataCount).toEqual(4);\n\n          $scope.names.pop();\n          $scope.$digest();\n\n          //now there's been a change\n          expect($scope.dataCount).toEqual(3);\n       * ```\n       *\n       *\n       * @param {string|function(scope)} obj Evaluated as {@link guide/expression expression}. The\n       *    expression value should evaluate to an object or an array which is observed on each\n       *    {@link ng.$rootScope.Scope#$digest $digest} cycle. Any shallow change within the\n       *    collection will trigger a call to the `listener`.\n       *\n       * @param {function(newCollection, oldCollection, scope)} listener a callback function called\n       *    when a change is detected.\n       *    - The `newCollection` object is the newly modified data obtained from the `obj` expression\n       *    - The `oldCollection` object is a copy of the former collection data.\n       *      Due to performance considerations, the`oldCollection` value is computed only if the\n       *      `listener` function declares two or more arguments.\n       *    - The `scope` argument refers to the current scope.\n       *\n       * @returns {function()} Returns a de-registration function for this listener. When the\n       *    de-registration function is executed, the internal watch operation is terminated.\n       */\n      $watchCollection: function(obj, listener) {\n        var self = this;\n        // the current value, updated on each dirty-check run\n        var newValue;\n        // a shallow copy of the newValue from the last dirty-check run,\n        // updated to match newValue during dirty-check run\n        var oldValue;\n        // a shallow copy of the newValue from when the last change happened\n        var veryOldValue;\n        // only track veryOldValue if the listener is asking for it\n        var trackVeryOldValue = (listener.length > 1);\n        var changeDetected = 0;\n        var objGetter = $parse(obj);\n        var internalArray = [];\n        var internalObject = {};\n        var initRun = true;\n        var oldLength = 0;\n\n        function $watchCollectionWatch() {\n          newValue = objGetter(self);\n          var newLength, key;\n\n          if (!isObject(newValue)) { // if primitive\n            if (oldValue !== newValue) {\n              oldValue = newValue;\n              changeDetected++;\n            }\n          } else if (isArrayLike(newValue)) {\n            if (oldValue !== internalArray) {\n              // we are transitioning from something which was not an array into array.\n              oldValue = internalArray;\n              oldLength = oldValue.length = 0;\n              changeDetected++;\n            }\n\n            newLength = newValue.length;\n\n            if (oldLength !== newLength) {\n              // if lengths do not match we need to trigger change notification\n              changeDetected++;\n              oldValue.length = oldLength = newLength;\n            }\n            // copy the items to oldValue and look for changes.\n            for (var i = 0; i < newLength; i++) {\n              var bothNaN = (oldValue[i] !== oldValue[i]) &&\n                  (newValue[i] !== newValue[i]);\n              if (!bothNaN && (oldValue[i] !== newValue[i])) {\n                changeDetected++;\n                oldValue[i] = newValue[i];\n              }\n            }\n          } else {\n            if (oldValue !== internalObject) {\n              // we are transitioning from something which was not an object into object.\n              oldValue = internalObject = {};\n              oldLength = 0;\n              changeDetected++;\n            }\n            // copy the items to oldValue and look for changes.\n            newLength = 0;\n            for (key in newValue) {\n              if (newValue.hasOwnProperty(key)) {\n                newLength++;\n                if (oldValue.hasOwnProperty(key)) {\n                  if (oldValue[key] !== newValue[key]) {\n                    changeDetected++;\n                    oldValue[key] = newValue[key];\n                  }\n                } else {\n                  oldLength++;\n                  oldValue[key] = newValue[key];\n                  changeDetected++;\n                }\n              }\n            }\n            if (oldLength > newLength) {\n              // we used to have more keys, need to find them and destroy them.\n              changeDetected++;\n              for(key in oldValue) {\n                if (oldValue.hasOwnProperty(key) && !newValue.hasOwnProperty(key)) {\n                  oldLength--;\n                  delete oldValue[key];\n                }\n              }\n            }\n          }\n          return changeDetected;\n        }\n\n        function $watchCollectionAction() {\n          if (initRun) {\n            initRun = false;\n            listener(newValue, newValue, self);\n          } else {\n            listener(newValue, veryOldValue, self);\n          }\n\n          // make a copy for the next time a collection is changed\n          if (trackVeryOldValue) {\n            if (!isObject(newValue)) {\n              //primitive\n              veryOldValue = newValue;\n            } else if (isArrayLike(newValue)) {\n              veryOldValue = new Array(newValue.length);\n              for (var i = 0; i < newValue.length; i++) {\n                veryOldValue[i] = newValue[i];\n              }\n            } else { // if object\n              veryOldValue = {};\n              for (var key in newValue) {\n                if (hasOwnProperty.call(newValue, key)) {\n                  veryOldValue[key] = newValue[key];\n                }\n              }\n            }\n          }\n        }\n\n        return this.$watch($watchCollectionWatch, $watchCollectionAction);\n      },\n\n      /**\n       * @ngdoc method\n       * @name $rootScope.Scope#$digest\n       * @kind function\n       *\n       * @description\n       * Processes all of the {@link ng.$rootScope.Scope#$watch watchers} of the current scope and\n       * its children. Because a {@link ng.$rootScope.Scope#$watch watcher}'s listener can change\n       * the model, the `$digest()` keeps calling the {@link ng.$rootScope.Scope#$watch watchers}\n       * until no more listeners are firing. This means that it is possible to get into an infinite\n       * loop. This function will throw `'Maximum iteration limit exceeded.'` if the number of\n       * iterations exceeds 10.\n       *\n       * Usually, you don't call `$digest()` directly in\n       * {@link ng.directive:ngController controllers} or in\n       * {@link ng.$compileProvider#directive directives}.\n       * Instead, you should call {@link ng.$rootScope.Scope#$apply $apply()} (typically from within\n       * a {@link ng.$compileProvider#directive directives}), which will force a `$digest()`.\n       *\n       * If you want to be notified whenever `$digest()` is called,\n       * you can register a `watchExpression` function with\n       * {@link ng.$rootScope.Scope#$watch $watch()} with no `listener`.\n       *\n       * In unit tests, you may need to call `$digest()` to simulate the scope life cycle.\n       *\n       * # Example\n       * ```js\n           var scope = ...;\n           scope.name = 'misko';\n           scope.counter = 0;\n\n           expect(scope.counter).toEqual(0);\n           scope.$watch('name', function(newValue, oldValue) {\n             scope.counter = scope.counter + 1;\n           });\n           expect(scope.counter).toEqual(0);\n\n           scope.$digest();\n           // the listener is always called during the first $digest loop after it was registered\n           expect(scope.counter).toEqual(1);\n\n           scope.$digest();\n           // but now it will not be called unless the value changes\n           expect(scope.counter).toEqual(1);\n\n           scope.name = 'adam';\n           scope.$digest();\n           expect(scope.counter).toEqual(2);\n       * ```\n       *\n       */\n      $digest: function() {\n        var watch, value, last,\n            watchers,\n            asyncQueue = this.$$asyncQueue,\n            postDigestQueue = this.$$postDigestQueue,\n            length,\n            dirty, ttl = TTL,\n            next, current, target = this,\n            watchLog = [],\n            logIdx, logMsg, asyncTask;\n\n        beginPhase('$digest');\n\n        lastDirtyWatch = null;\n\n        do { // \"while dirty\" loop\n          dirty = false;\n          current = target;\n\n          while(asyncQueue.length) {\n            try {\n              asyncTask = asyncQueue.shift();\n              asyncTask.scope.$eval(asyncTask.expression);\n            } catch (e) {\n              clearPhase();\n              $exceptionHandler(e);\n            }\n            lastDirtyWatch = null;\n          }\n\n          traverseScopesLoop:\n          do { // \"traverse the scopes\" loop\n            if ((watchers = current.$$watchers)) {\n              // process our watches\n              length = watchers.length;\n              while (length--) {\n                try {\n                  watch = watchers[length];\n                  // Most common watches are on primitives, in which case we can short\n                  // circuit it with === operator, only when === fails do we use .equals\n                  if (watch) {\n                    if ((value = watch.get(current)) !== (last = watch.last) &&\n                        !(watch.eq\n                            ? equals(value, last)\n                            : (typeof value == 'number' && typeof last == 'number'\n                               && isNaN(value) && isNaN(last)))) {\n                      dirty = true;\n                      lastDirtyWatch = watch;\n                      watch.last = watch.eq ? copy(value, null) : value;\n                      watch.fn(value, ((last === initWatchVal) ? value : last), current);\n                      if (ttl < 5) {\n                        logIdx = 4 - ttl;\n                        if (!watchLog[logIdx]) watchLog[logIdx] = [];\n                        logMsg = (isFunction(watch.exp))\n                            ? 'fn: ' + (watch.exp.name || watch.exp.toString())\n                            : watch.exp;\n                        logMsg += '; newVal: ' + toJson(value) + '; oldVal: ' + toJson(last);\n                        watchLog[logIdx].push(logMsg);\n                      }\n                    } else if (watch === lastDirtyWatch) {\n                      // If the most recently dirty watcher is now clean, short circuit since the remaining watchers\n                      // have already been tested.\n                      dirty = false;\n                      break traverseScopesLoop;\n                    }\n                  }\n                } catch (e) {\n                  clearPhase();\n                  $exceptionHandler(e);\n                }\n              }\n            }\n\n            // Insanity Warning: scope depth-first traversal\n            // yes, this code is a bit crazy, but it works and we have tests to prove it!\n            // this piece should be kept in sync with the traversal in $broadcast\n            if (!(next = (current.$$childHead ||\n                (current !== target && current.$$nextSibling)))) {\n              while(current !== target && !(next = current.$$nextSibling)) {\n                current = current.$parent;\n              }\n            }\n          } while ((current = next));\n\n          // `break traverseScopesLoop;` takes us to here\n\n          if((dirty || asyncQueue.length) && !(ttl--)) {\n            clearPhase();\n            throw $rootScopeMinErr('infdig',\n                '{0} $digest() iterations reached. Aborting!\\n' +\n                'Watchers fired in the last 5 iterations: {1}',\n                TTL, toJson(watchLog));\n          }\n\n        } while (dirty || asyncQueue.length);\n\n        clearPhase();\n\n        while(postDigestQueue.length) {\n          try {\n            postDigestQueue.shift()();\n          } catch (e) {\n            $exceptionHandler(e);\n          }\n        }\n      },\n\n\n      /**\n       * @ngdoc event\n       * @name $rootScope.Scope#$destroy\n       * @eventType broadcast on scope being destroyed\n       *\n       * @description\n       * Broadcasted when a scope and its children are being destroyed.\n       *\n       * Note that, in AngularJS, there is also a `$destroy` jQuery event, which can be used to\n       * clean up DOM bindings before an element is removed from the DOM.\n       */\n\n      /**\n       * @ngdoc method\n       * @name $rootScope.Scope#$destroy\n       * @kind function\n       *\n       * @description\n       * Removes the current scope (and all of its children) from the parent scope. Removal implies\n       * that calls to {@link ng.$rootScope.Scope#$digest $digest()} will no longer\n       * propagate to the current scope and its children. Removal also implies that the current\n       * scope is eligible for garbage collection.\n       *\n       * The `$destroy()` is usually used by directives such as\n       * {@link ng.directive:ngRepeat ngRepeat} for managing the\n       * unrolling of the loop.\n       *\n       * Just before a scope is destroyed, a `$destroy` event is broadcasted on this scope.\n       * Application code can register a `$destroy` event handler that will give it a chance to\n       * perform any necessary cleanup.\n       *\n       * Note that, in AngularJS, there is also a `$destroy` jQuery event, which can be used to\n       * clean up DOM bindings before an element is removed from the DOM.\n       */\n      $destroy: function() {\n        // we can't destroy the root scope or a scope that has been already destroyed\n        if (this.$$destroyed) return;\n        var parent = this.$parent;\n\n        this.$broadcast('$destroy');\n        this.$$destroyed = true;\n        if (this === $rootScope) return;\n\n        forEach(this.$$listenerCount, bind(null, decrementListenerCount, this));\n\n        // sever all the references to parent scopes (after this cleanup, the current scope should\n        // not be retained by any of our references and should be eligible for garbage collection)\n        if (parent.$$childHead == this) parent.$$childHead = this.$$nextSibling;\n        if (parent.$$childTail == this) parent.$$childTail = this.$$prevSibling;\n        if (this.$$prevSibling) this.$$prevSibling.$$nextSibling = this.$$nextSibling;\n        if (this.$$nextSibling) this.$$nextSibling.$$prevSibling = this.$$prevSibling;\n\n\n        // All of the code below is bogus code that works around V8's memory leak via optimized code\n        // and inline caches.\n        //\n        // see:\n        // - https://code.google.com/p/v8/issues/detail?id=2073#c26\n        // - https://github.com/angular/angular.js/issues/6794#issuecomment-38648909\n        // - https://github.com/angular/angular.js/issues/1313#issuecomment-10378451\n\n        this.$parent = this.$$nextSibling = this.$$prevSibling = this.$$childHead =\n            this.$$childTail = this.$root = null;\n\n        // don't reset these to null in case some async task tries to register a listener/watch/task\n        this.$$listeners = {};\n        this.$$watchers = this.$$asyncQueue = this.$$postDigestQueue = [];\n\n        // prevent NPEs since these methods have references to properties we nulled out\n        this.$destroy = this.$digest = this.$apply = noop;\n        this.$on = this.$watch = function() { return noop; };\n      },\n\n      /**\n       * @ngdoc method\n       * @name $rootScope.Scope#$eval\n       * @kind function\n       *\n       * @description\n       * Executes the `expression` on the current scope and returns the result. Any exceptions in\n       * the expression are propagated (uncaught). This is useful when evaluating Angular\n       * expressions.\n       *\n       * # Example\n       * ```js\n           var scope = ng.$rootScope.Scope();\n           scope.a = 1;\n           scope.b = 2;\n\n           expect(scope.$eval('a+b')).toEqual(3);\n           expect(scope.$eval(function(scope){ return scope.a + scope.b; })).toEqual(3);\n       * ```\n       *\n       * @param {(string|function())=} expression An angular expression to be executed.\n       *\n       *    - `string`: execute using the rules as defined in  {@link guide/expression expression}.\n       *    - `function(scope)`: execute the function with the current `scope` parameter.\n       *\n       * @param {(object)=} locals Local variables object, useful for overriding values in scope.\n       * @returns {*} The result of evaluating the expression.\n       */\n      $eval: function(expr, locals) {\n        return $parse(expr)(this, locals);\n      },\n\n      /**\n       * @ngdoc method\n       * @name $rootScope.Scope#$evalAsync\n       * @kind function\n       *\n       * @description\n       * Executes the expression on the current scope at a later point in time.\n       *\n       * The `$evalAsync` makes no guarantees as to when the `expression` will be executed, only\n       * that:\n       *\n       *   - it will execute after the function that scheduled the evaluation (preferably before DOM\n       *     rendering).\n       *   - at least one {@link ng.$rootScope.Scope#$digest $digest cycle} will be performed after\n       *     `expression` execution.\n       *\n       * Any exceptions from the execution of the expression are forwarded to the\n       * {@link ng.$exceptionHandler $exceptionHandler} service.\n       *\n       * __Note:__ if this function is called outside of a `$digest` cycle, a new `$digest` cycle\n       * will be scheduled. However, it is encouraged to always call code that changes the model\n       * from within an `$apply` call. That includes code evaluated via `$evalAsync`.\n       *\n       * @param {(string|function())=} expression An angular expression to be executed.\n       *\n       *    - `string`: execute using the rules as defined in {@link guide/expression expression}.\n       *    - `function(scope)`: execute the function with the current `scope` parameter.\n       *\n       */\n      $evalAsync: function(expr) {\n        // if we are outside of an $digest loop and this is the first time we are scheduling async\n        // task also schedule async auto-flush\n        if (!$rootScope.$$phase && !$rootScope.$$asyncQueue.length) {\n          $browser.defer(function() {\n            if ($rootScope.$$asyncQueue.length) {\n              $rootScope.$digest();\n            }\n          });\n        }\n\n        this.$$asyncQueue.push({scope: this, expression: expr});\n      },\n\n      $$postDigest : function(fn) {\n        this.$$postDigestQueue.push(fn);\n      },\n\n      /**\n       * @ngdoc method\n       * @name $rootScope.Scope#$apply\n       * @kind function\n       *\n       * @description\n       * `$apply()` is used to execute an expression in angular from outside of the angular\n       * framework. (For example from browser DOM events, setTimeout, XHR or third party libraries).\n       * Because we are calling into the angular framework we need to perform proper scope life\n       * cycle of {@link ng.$exceptionHandler exception handling},\n       * {@link ng.$rootScope.Scope#$digest executing watches}.\n       *\n       * ## Life cycle\n       *\n       * # Pseudo-Code of `$apply()`\n       * ```js\n           function $apply(expr) {\n             try {\n               return $eval(expr);\n             } catch (e) {\n               $exceptionHandler(e);\n             } finally {\n               $root.$digest();\n             }\n           }\n       * ```\n       *\n       *\n       * Scope's `$apply()` method transitions through the following stages:\n       *\n       * 1. The {@link guide/expression expression} is executed using the\n       *    {@link ng.$rootScope.Scope#$eval $eval()} method.\n       * 2. Any exceptions from the execution of the expression are forwarded to the\n       *    {@link ng.$exceptionHandler $exceptionHandler} service.\n       * 3. The {@link ng.$rootScope.Scope#$watch watch} listeners are fired immediately after the\n       *    expression was executed using the {@link ng.$rootScope.Scope#$digest $digest()} method.\n       *\n       *\n       * @param {(string|function())=} exp An angular expression to be executed.\n       *\n       *    - `string`: execute using the rules as defined in {@link guide/expression expression}.\n       *    - `function(scope)`: execute the function with current `scope` parameter.\n       *\n       * @returns {*} The result of evaluating the expression.\n       */\n      $apply: function(expr) {\n        try {\n          beginPhase('$apply');\n          return this.$eval(expr);\n        } catch (e) {\n          $exceptionHandler(e);\n        } finally {\n          clearPhase();\n          try {\n            $rootScope.$digest();\n          } catch (e) {\n            $exceptionHandler(e);\n            throw e;\n          }\n        }\n      },\n\n      /**\n       * @ngdoc method\n       * @name $rootScope.Scope#$on\n       * @kind function\n       *\n       * @description\n       * Listens on events of a given type. See {@link ng.$rootScope.Scope#$emit $emit} for\n       * discussion of event life cycle.\n       *\n       * The event listener function format is: `function(event, args...)`. The `event` object\n       * passed into the listener has the following attributes:\n       *\n       *   - `targetScope` - `{Scope}`: the scope on which the event was `$emit`-ed or\n       *     `$broadcast`-ed.\n       *   - `currentScope` - `{Scope}`: the current scope which is handling the event.\n       *   - `name` - `{string}`: name of the event.\n       *   - `stopPropagation` - `{function=}`: calling `stopPropagation` function will cancel\n       *     further event propagation (available only for events that were `$emit`-ed).\n       *   - `preventDefault` - `{function}`: calling `preventDefault` sets `defaultPrevented` flag\n       *     to true.\n       *   - `defaultPrevented` - `{boolean}`: true if `preventDefault` was called.\n       *\n       * @param {string} name Event name to listen on.\n       * @param {function(event, ...args)} listener Function to call when the event is emitted.\n       * @returns {function()} Returns a deregistration function for this listener.\n       */\n      $on: function(name, listener) {\n        var namedListeners = this.$$listeners[name];\n        if (!namedListeners) {\n          this.$$listeners[name] = namedListeners = [];\n        }\n        namedListeners.push(listener);\n\n        var current = this;\n        do {\n          if (!current.$$listenerCount[name]) {\n            current.$$listenerCount[name] = 0;\n          }\n          current.$$listenerCount[name]++;\n        } while ((current = current.$parent));\n\n        var self = this;\n        return function() {\n          namedListeners[indexOf(namedListeners, listener)] = null;\n          decrementListenerCount(self, 1, name);\n        };\n      },\n\n\n      /**\n       * @ngdoc method\n       * @name $rootScope.Scope#$emit\n       * @kind function\n       *\n       * @description\n       * Dispatches an event `name` upwards through the scope hierarchy notifying the\n       * registered {@link ng.$rootScope.Scope#$on} listeners.\n       *\n       * The event life cycle starts at the scope on which `$emit` was called. All\n       * {@link ng.$rootScope.Scope#$on listeners} listening for `name` event on this scope get\n       * notified. Afterwards, the event traverses upwards toward the root scope and calls all\n       * registered listeners along the way. The event will stop propagating if one of the listeners\n       * cancels it.\n       *\n       * Any exception emitted from the {@link ng.$rootScope.Scope#$on listeners} will be passed\n       * onto the {@link ng.$exceptionHandler $exceptionHandler} service.\n       *\n       * @param {string} name Event name to emit.\n       * @param {...*} args Optional one or more arguments which will be passed onto the event listeners.\n       * @return {Object} Event object (see {@link ng.$rootScope.Scope#$on}).\n       */\n      $emit: function(name, args) {\n        var empty = [],\n            namedListeners,\n            scope = this,\n            stopPropagation = false,\n            event = {\n              name: name,\n              targetScope: scope,\n              stopPropagation: function() {stopPropagation = true;},\n              preventDefault: function() {\n                event.defaultPrevented = true;\n              },\n              defaultPrevented: false\n            },\n            listenerArgs = concat([event], arguments, 1),\n            i, length;\n\n        do {\n          namedListeners = scope.$$listeners[name] || empty;\n          event.currentScope = scope;\n          for (i=0, length=namedListeners.length; i<length; i++) {\n\n            // if listeners were deregistered, defragment the array\n            if (!namedListeners[i]) {\n              namedListeners.splice(i, 1);\n              i--;\n              length--;\n              continue;\n            }\n            try {\n              //allow all listeners attached to the current scope to run\n              namedListeners[i].apply(null, listenerArgs);\n            } catch (e) {\n              $exceptionHandler(e);\n            }\n          }\n          //if any listener on the current scope stops propagation, prevent bubbling\n          if (stopPropagation) return event;\n          //traverse upwards\n          scope = scope.$parent;\n        } while (scope);\n\n        return event;\n      },\n\n\n      /**\n       * @ngdoc method\n       * @name $rootScope.Scope#$broadcast\n       * @kind function\n       *\n       * @description\n       * Dispatches an event `name` downwards to all child scopes (and their children) notifying the\n       * registered {@link ng.$rootScope.Scope#$on} listeners.\n       *\n       * The event life cycle starts at the scope on which `$broadcast` was called. All\n       * {@link ng.$rootScope.Scope#$on listeners} listening for `name` event on this scope get\n       * notified. Afterwards, the event propagates to all direct and indirect scopes of the current\n       * scope and calls all registered listeners along the way. The event cannot be canceled.\n       *\n       * Any exception emitted from the {@link ng.$rootScope.Scope#$on listeners} will be passed\n       * onto the {@link ng.$exceptionHandler $exceptionHandler} service.\n       *\n       * @param {string} name Event name to broadcast.\n       * @param {...*} args Optional one or more arguments which will be passed onto the event listeners.\n       * @return {Object} Event object, see {@link ng.$rootScope.Scope#$on}\n       */\n      $broadcast: function(name, args) {\n        var target = this,\n            current = target,\n            next = target,\n            event = {\n              name: name,\n              targetScope: target,\n              preventDefault: function() {\n                event.defaultPrevented = true;\n              },\n              defaultPrevented: false\n            },\n            listenerArgs = concat([event], arguments, 1),\n            listeners, i, length;\n\n        //down while you can, then up and next sibling or up and next sibling until back at root\n        while ((current = next)) {\n          event.currentScope = current;\n          listeners = current.$$listeners[name] || [];\n          for (i=0, length = listeners.length; i<length; i++) {\n            // if listeners were deregistered, defragment the array\n            if (!listeners[i]) {\n              listeners.splice(i, 1);\n              i--;\n              length--;\n              continue;\n            }\n\n            try {\n              listeners[i].apply(null, listenerArgs);\n            } catch(e) {\n              $exceptionHandler(e);\n            }\n          }\n\n          // Insanity Warning: scope depth-first traversal\n          // yes, this code is a bit crazy, but it works and we have tests to prove it!\n          // this piece should be kept in sync with the traversal in $digest\n          // (though it differs due to having the extra check for $$listenerCount)\n          if (!(next = ((current.$$listenerCount[name] && current.$$childHead) ||\n              (current !== target && current.$$nextSibling)))) {\n            while(current !== target && !(next = current.$$nextSibling)) {\n              current = current.$parent;\n            }\n          }\n        }\n\n        return event;\n      }\n    };\n\n    var $rootScope = new Scope();\n\n    return $rootScope;\n\n\n    function beginPhase(phase) {\n      if ($rootScope.$$phase) {\n        throw $rootScopeMinErr('inprog', '{0} already in progress', $rootScope.$$phase);\n      }\n\n      $rootScope.$$phase = phase;\n    }\n\n    function clearPhase() {\n      $rootScope.$$phase = null;\n    }\n\n    function compileToFn(exp, name) {\n      var fn = $parse(exp);\n      assertArgFn(fn, name);\n      return fn;\n    }\n\n    function decrementListenerCount(current, count, name) {\n      do {\n        current.$$listenerCount[name] -= count;\n\n        if (current.$$listenerCount[name] === 0) {\n          delete current.$$listenerCount[name];\n        }\n      } while ((current = current.$parent));\n    }\n\n    /**\n     * function used as an initial value for watchers.\n     * because it's unique we can easily tell it apart from other values\n     */\n    function initWatchVal() {}\n  }];\n}\n\n/**\n * @description\n * Private service to sanitize uris for links and images. Used by $compile and $sanitize.\n */\nfunction $$SanitizeUriProvider() {\n  var aHrefSanitizationWhitelist = /^\\s*(https?|ftp|mailto|tel|file):/,\n    imgSrcSanitizationWhitelist = /^\\s*(https?|ftp|file):|data:image\\//;\n\n  /**\n   * @description\n   * Retrieves or overrides the default regular expression that is used for whitelisting of safe\n   * urls during a[href] sanitization.\n   *\n   * The sanitization is a security measure aimed at prevent XSS attacks via html links.\n   *\n   * Any url about to be assigned to a[href] via data-binding is first normalized and turned into\n   * an absolute url. Afterwards, the url is matched against the `aHrefSanitizationWhitelist`\n   * regular expression. If a match is found, the original url is written into the dom. Otherwise,\n   * the absolute url is prefixed with `'unsafe:'` string and only then is it written into the DOM.\n   *\n   * @param {RegExp=} regexp New regexp to whitelist urls with.\n   * @returns {RegExp|ng.$compileProvider} Current RegExp if called without value or self for\n   *    chaining otherwise.\n   */\n  this.aHrefSanitizationWhitelist = function(regexp) {\n    if (isDefined(regexp)) {\n      aHrefSanitizationWhitelist = regexp;\n      return this;\n    }\n    return aHrefSanitizationWhitelist;\n  };\n\n\n  /**\n   * @description\n   * Retrieves or overrides the default regular expression that is used for whitelisting of safe\n   * urls during img[src] sanitization.\n   *\n   * The sanitization is a security measure aimed at prevent XSS attacks via html links.\n   *\n   * Any url about to be assigned to img[src] via data-binding is first normalized and turned into\n   * an absolute url. Afterwards, the url is matched against the `imgSrcSanitizationWhitelist`\n   * regular expression. If a match is found, the original url is written into the dom. Otherwise,\n   * the absolute url is prefixed with `'unsafe:'` string and only then is it written into the DOM.\n   *\n   * @param {RegExp=} regexp New regexp to whitelist urls with.\n   * @returns {RegExp|ng.$compileProvider} Current RegExp if called without value or self for\n   *    chaining otherwise.\n   */\n  this.imgSrcSanitizationWhitelist = function(regexp) {\n    if (isDefined(regexp)) {\n      imgSrcSanitizationWhitelist = regexp;\n      return this;\n    }\n    return imgSrcSanitizationWhitelist;\n  };\n\n  this.$get = function() {\n    return function sanitizeUri(uri, isImage) {\n      var regex = isImage ? imgSrcSanitizationWhitelist : aHrefSanitizationWhitelist;\n      var normalizedVal;\n      // NOTE: urlResolve() doesn't support IE < 8 so we don't sanitize for that case.\n      if (!msie || msie >= 8 ) {\n        normalizedVal = urlResolve(uri).href;\n        if (normalizedVal !== '' && !normalizedVal.match(regex)) {\n          return 'unsafe:'+normalizedVal;\n        }\n      }\n      return uri;\n    };\n  };\n}\n\nvar $sceMinErr = minErr('$sce');\n\nvar SCE_CONTEXTS = {\n  HTML: 'html',\n  CSS: 'css',\n  URL: 'url',\n  // RESOURCE_URL is a subtype of URL used in contexts where a privileged resource is sourced from a\n  // url.  (e.g. ng-include, script src, templateUrl)\n  RESOURCE_URL: 'resourceUrl',\n  JS: 'js'\n};\n\n// Helper functions follow.\n\n// Copied from:\n// http://docs.closure-library.googlecode.com/git/closure_goog_string_string.js.source.html#line962\n// Prereq: s is a string.\nfunction escapeForRegexp(s) {\n  return s.replace(/([-()\\[\\]{}+?*.$\\^|,:#<!\\\\])/g, '\\\\$1').\n           replace(/\\x08/g, '\\\\x08');\n}\n\n\nfunction adjustMatcher(matcher) {\n  if (matcher === 'self') {\n    return matcher;\n  } else if (isString(matcher)) {\n    // Strings match exactly except for 2 wildcards - '*' and '**'.\n    // '*' matches any character except those from the set ':/.?&'.\n    // '**' matches any character (like .* in a RegExp).\n    // More than 2 *'s raises an error as it's ill defined.\n    if (matcher.indexOf('***') > -1) {\n      throw $sceMinErr('iwcard',\n          'Illegal sequence *** in string matcher.  String: {0}', matcher);\n    }\n    matcher = escapeForRegexp(matcher).\n                  replace('\\\\*\\\\*', '.*').\n                  replace('\\\\*', '[^:/.?&;]*');\n    return new RegExp('^' + matcher + '$');\n  } else if (isRegExp(matcher)) {\n    // The only other type of matcher allowed is a Regexp.\n    // Match entire URL / disallow partial matches.\n    // Flags are reset (i.e. no global, ignoreCase or multiline)\n    return new RegExp('^' + matcher.source + '$');\n  } else {\n    throw $sceMinErr('imatcher',\n        'Matchers may only be \"self\", string patterns or RegExp objects');\n  }\n}\n\n\nfunction adjustMatchers(matchers) {\n  var adjustedMatchers = [];\n  if (isDefined(matchers)) {\n    forEach(matchers, function(matcher) {\n      adjustedMatchers.push(adjustMatcher(matcher));\n    });\n  }\n  return adjustedMatchers;\n}\n\n\n/**\n * @ngdoc service\n * @name $sceDelegate\n * @kind function\n *\n * @description\n *\n * `$sceDelegate` is a service that is used by the `$sce` service to provide {@link ng.$sce Strict\n * Contextual Escaping (SCE)} services to AngularJS.\n *\n * Typically, you would configure or override the {@link ng.$sceDelegate $sceDelegate} instead of\n * the `$sce` service to customize the way Strict Contextual Escaping works in AngularJS.  This is\n * because, while the `$sce` provides numerous shorthand methods, etc., you really only need to\n * override 3 core functions (`trustAs`, `getTrusted` and `valueOf`) to replace the way things\n * work because `$sce` delegates to `$sceDelegate` for these operations.\n *\n * Refer {@link ng.$sceDelegateProvider $sceDelegateProvider} to configure this service.\n *\n * The default instance of `$sceDelegate` should work out of the box with little pain.  While you\n * can override it completely to change the behavior of `$sce`, the common case would\n * involve configuring the {@link ng.$sceDelegateProvider $sceDelegateProvider} instead by setting\n * your own whitelists and blacklists for trusting URLs used for loading AngularJS resources such as\n * templates.  Refer {@link ng.$sceDelegateProvider#resourceUrlWhitelist\n * $sceDelegateProvider.resourceUrlWhitelist} and {@link\n * ng.$sceDelegateProvider#resourceUrlBlacklist $sceDelegateProvider.resourceUrlBlacklist}\n */\n\n/**\n * @ngdoc provider\n * @name $sceDelegateProvider\n * @description\n *\n * The `$sceDelegateProvider` provider allows developers to configure the {@link ng.$sceDelegate\n * $sceDelegate} service.  This allows one to get/set the whitelists and blacklists used to ensure\n * that the URLs used for sourcing Angular templates are safe.  Refer {@link\n * ng.$sceDelegateProvider#resourceUrlWhitelist $sceDelegateProvider.resourceUrlWhitelist} and\n * {@link ng.$sceDelegateProvider#resourceUrlBlacklist $sceDelegateProvider.resourceUrlBlacklist}\n *\n * For the general details about this service in Angular, read the main page for {@link ng.$sce\n * Strict Contextual Escaping (SCE)}.\n *\n * **Example**:  Consider the following case. <a name=\"example\"></a>\n *\n * - your app is hosted at url `http://myapp.example.com/`\n * - but some of your templates are hosted on other domains you control such as\n *   `http://srv01.assets.example.com/`,  `http://srv02.assets.example.com/`, etc.\n * - and you have an open redirect at `http://myapp.example.com/clickThru?...`.\n *\n * Here is what a secure configuration for this scenario might look like:\n *\n * <pre class=\"prettyprint\">\n *    angular.module('myApp', []).config(function($sceDelegateProvider) {\n *      $sceDelegateProvider.resourceUrlWhitelist([\n *        // Allow same origin resource loads.\n *        'self',\n *        // Allow loading from our assets domain.  Notice the difference between * and **.\n *        'http://srv*.assets.example.com/**']);\n *\n *      // The blacklist overrides the whitelist so the open redirect here is blocked.\n *      $sceDelegateProvider.resourceUrlBlacklist([\n *        'http://myapp.example.com/clickThru**']);\n *      });\n * </pre>\n */\n\nfunction $SceDelegateProvider() {\n  this.SCE_CONTEXTS = SCE_CONTEXTS;\n\n  // Resource URLs can also be trusted by policy.\n  var resourceUrlWhitelist = ['self'],\n      resourceUrlBlacklist = [];\n\n  /**\n   * @ngdoc method\n   * @name $sceDelegateProvider#resourceUrlWhitelist\n   * @kind function\n   *\n   * @param {Array=} whitelist When provided, replaces the resourceUrlWhitelist with the value\n   *     provided.  This must be an array or null.  A snapshot of this array is used so further\n   *     changes to the array are ignored.\n   *\n   *     Follow {@link ng.$sce#resourceUrlPatternItem this link} for a description of the items\n   *     allowed in this array.\n   *\n   *     Note: **an empty whitelist array will block all URLs**!\n   *\n   * @return {Array} the currently set whitelist array.\n   *\n   * The **default value** when no whitelist has been explicitly set is `['self']` allowing only\n   * same origin resource requests.\n   *\n   * @description\n   * Sets/Gets the whitelist of trusted resource URLs.\n   */\n  this.resourceUrlWhitelist = function (value) {\n    if (arguments.length) {\n      resourceUrlWhitelist = adjustMatchers(value);\n    }\n    return resourceUrlWhitelist;\n  };\n\n  /**\n   * @ngdoc method\n   * @name $sceDelegateProvider#resourceUrlBlacklist\n   * @kind function\n   *\n   * @param {Array=} blacklist When provided, replaces the resourceUrlBlacklist with the value\n   *     provided.  This must be an array or null.  A snapshot of this array is used so further\n   *     changes to the array are ignored.\n   *\n   *     Follow {@link ng.$sce#resourceUrlPatternItem this link} for a description of the items\n   *     allowed in this array.\n   *\n   *     The typical usage for the blacklist is to **block\n   *     [open redirects](http://cwe.mitre.org/data/definitions/601.html)** served by your domain as\n   *     these would otherwise be trusted but actually return content from the redirected domain.\n   *\n   *     Finally, **the blacklist overrides the whitelist** and has the final say.\n   *\n   * @return {Array} the currently set blacklist array.\n   *\n   * The **default value** when no whitelist has been explicitly set is the empty array (i.e. there\n   * is no blacklist.)\n   *\n   * @description\n   * Sets/Gets the blacklist of trusted resource URLs.\n   */\n\n  this.resourceUrlBlacklist = function (value) {\n    if (arguments.length) {\n      resourceUrlBlacklist = adjustMatchers(value);\n    }\n    return resourceUrlBlacklist;\n  };\n\n  this.$get = ['$injector', function($injector) {\n\n    var htmlSanitizer = function htmlSanitizer(html) {\n      throw $sceMinErr('unsafe', 'Attempting to use an unsafe value in a safe context.');\n    };\n\n    if ($injector.has('$sanitize')) {\n      htmlSanitizer = $injector.get('$sanitize');\n    }\n\n\n    function matchUrl(matcher, parsedUrl) {\n      if (matcher === 'self') {\n        return urlIsSameOrigin(parsedUrl);\n      } else {\n        // definitely a regex.  See adjustMatchers()\n        return !!matcher.exec(parsedUrl.href);\n      }\n    }\n\n    function isResourceUrlAllowedByPolicy(url) {\n      var parsedUrl = urlResolve(url.toString());\n      var i, n, allowed = false;\n      // Ensure that at least one item from the whitelist allows this url.\n      for (i = 0, n = resourceUrlWhitelist.length; i < n; i++) {\n        if (matchUrl(resourceUrlWhitelist[i], parsedUrl)) {\n          allowed = true;\n          break;\n        }\n      }\n      if (allowed) {\n        // Ensure that no item from the blacklist blocked this url.\n        for (i = 0, n = resourceUrlBlacklist.length; i < n; i++) {\n          if (matchUrl(resourceUrlBlacklist[i], parsedUrl)) {\n            allowed = false;\n            break;\n          }\n        }\n      }\n      return allowed;\n    }\n\n    function generateHolderType(Base) {\n      var holderType = function TrustedValueHolderType(trustedValue) {\n        this.$$unwrapTrustedValue = function() {\n          return trustedValue;\n        };\n      };\n      if (Base) {\n        holderType.prototype = new Base();\n      }\n      holderType.prototype.valueOf = function sceValueOf() {\n        return this.$$unwrapTrustedValue();\n      };\n      holderType.prototype.toString = function sceToString() {\n        return this.$$unwrapTrustedValue().toString();\n      };\n      return holderType;\n    }\n\n    var trustedValueHolderBase = generateHolderType(),\n        byType = {};\n\n    byType[SCE_CONTEXTS.HTML] = generateHolderType(trustedValueHolderBase);\n    byType[SCE_CONTEXTS.CSS] = generateHolderType(trustedValueHolderBase);\n    byType[SCE_CONTEXTS.URL] = generateHolderType(trustedValueHolderBase);\n    byType[SCE_CONTEXTS.JS] = generateHolderType(trustedValueHolderBase);\n    byType[SCE_CONTEXTS.RESOURCE_URL] = generateHolderType(byType[SCE_CONTEXTS.URL]);\n\n    /**\n     * @ngdoc method\n     * @name $sceDelegate#trustAs\n     *\n     * @description\n     * Returns an object that is trusted by angular for use in specified strict\n     * contextual escaping contexts (such as ng-bind-html, ng-include, any src\n     * attribute interpolation, any dom event binding attribute interpolation\n     * such as for onclick,  etc.) that uses the provided value.\n     * See {@link ng.$sce $sce} for enabling strict contextual escaping.\n     *\n     * @param {string} type The kind of context in which this value is safe for use.  e.g. url,\n     *   resourceUrl, html, js and css.\n     * @param {*} value The value that that should be considered trusted/safe.\n     * @returns {*} A value that can be used to stand in for the provided `value` in places\n     * where Angular expects a $sce.trustAs() return value.\n     */\n    function trustAs(type, trustedValue) {\n      var Constructor = (byType.hasOwnProperty(type) ? byType[type] : null);\n      if (!Constructor) {\n        throw $sceMinErr('icontext',\n            'Attempted to trust a value in invalid context. Context: {0}; Value: {1}',\n            type, trustedValue);\n      }\n      if (trustedValue === null || trustedValue === undefined || trustedValue === '') {\n        return trustedValue;\n      }\n      // All the current contexts in SCE_CONTEXTS happen to be strings.  In order to avoid trusting\n      // mutable objects, we ensure here that the value passed in is actually a string.\n      if (typeof trustedValue !== 'string') {\n        throw $sceMinErr('itype',\n            'Attempted to trust a non-string value in a content requiring a string: Context: {0}',\n            type);\n      }\n      return new Constructor(trustedValue);\n    }\n\n    /**\n     * @ngdoc method\n     * @name $sceDelegate#valueOf\n     *\n     * @description\n     * If the passed parameter had been returned by a prior call to {@link ng.$sceDelegate#trustAs\n     * `$sceDelegate.trustAs`}, returns the value that had been passed to {@link\n     * ng.$sceDelegate#trustAs `$sceDelegate.trustAs`}.\n     *\n     * If the passed parameter is not a value that had been returned by {@link\n     * ng.$sceDelegate#trustAs `$sceDelegate.trustAs`}, returns it as-is.\n     *\n     * @param {*} value The result of a prior {@link ng.$sceDelegate#trustAs `$sceDelegate.trustAs`}\n     *      call or anything else.\n     * @returns {*} The `value` that was originally provided to {@link ng.$sceDelegate#trustAs\n     *     `$sceDelegate.trustAs`} if `value` is the result of such a call.  Otherwise, returns\n     *     `value` unchanged.\n     */\n    function valueOf(maybeTrusted) {\n      if (maybeTrusted instanceof trustedValueHolderBase) {\n        return maybeTrusted.$$unwrapTrustedValue();\n      } else {\n        return maybeTrusted;\n      }\n    }\n\n    /**\n     * @ngdoc method\n     * @name $sceDelegate#getTrusted\n     *\n     * @description\n     * Takes the result of a {@link ng.$sceDelegate#trustAs `$sceDelegate.trustAs`} call and\n     * returns the originally supplied value if the queried context type is a supertype of the\n     * created type.  If this condition isn't satisfied, throws an exception.\n     *\n     * @param {string} type The kind of context in which this value is to be used.\n     * @param {*} maybeTrusted The result of a prior {@link ng.$sceDelegate#trustAs\n     *     `$sceDelegate.trustAs`} call.\n     * @returns {*} The value the was originally provided to {@link ng.$sceDelegate#trustAs\n     *     `$sceDelegate.trustAs`} if valid in this context.  Otherwise, throws an exception.\n     */\n    function getTrusted(type, maybeTrusted) {\n      if (maybeTrusted === null || maybeTrusted === undefined || maybeTrusted === '') {\n        return maybeTrusted;\n      }\n      var constructor = (byType.hasOwnProperty(type) ? byType[type] : null);\n      if (constructor && maybeTrusted instanceof constructor) {\n        return maybeTrusted.$$unwrapTrustedValue();\n      }\n      // If we get here, then we may only take one of two actions.\n      // 1. sanitize the value for the requested type, or\n      // 2. throw an exception.\n      if (type === SCE_CONTEXTS.RESOURCE_URL) {\n        if (isResourceUrlAllowedByPolicy(maybeTrusted)) {\n          return maybeTrusted;\n        } else {\n          throw $sceMinErr('insecurl',\n              'Blocked loading resource from url not allowed by $sceDelegate policy.  URL: {0}',\n              maybeTrusted.toString());\n        }\n      } else if (type === SCE_CONTEXTS.HTML) {\n        return htmlSanitizer(maybeTrusted);\n      }\n      throw $sceMinErr('unsafe', 'Attempting to use an unsafe value in a safe context.');\n    }\n\n    return { trustAs: trustAs,\n             getTrusted: getTrusted,\n             valueOf: valueOf };\n  }];\n}\n\n\n/**\n * @ngdoc provider\n * @name $sceProvider\n * @description\n *\n * The $sceProvider provider allows developers to configure the {@link ng.$sce $sce} service.\n * -   enable/disable Strict Contextual Escaping (SCE) in a module\n * -   override the default implementation with a custom delegate\n *\n * Read more about {@link ng.$sce Strict Contextual Escaping (SCE)}.\n */\n\n/* jshint maxlen: false*/\n\n/**\n * @ngdoc service\n * @name $sce\n * @kind function\n *\n * @description\n *\n * `$sce` is a service that provides Strict Contextual Escaping services to AngularJS.\n *\n * # Strict Contextual Escaping\n *\n * Strict Contextual Escaping (SCE) is a mode in which AngularJS requires bindings in certain\n * contexts to result in a value that is marked as safe to use for that context.  One example of\n * such a context is binding arbitrary html controlled by the user via `ng-bind-html`.  We refer\n * to these contexts as privileged or SCE contexts.\n *\n * As of version 1.2, Angular ships with SCE enabled by default.\n *\n * Note:  When enabled (the default), IE8 in quirks mode is not supported.  In this mode, IE8 allows\n * one to execute arbitrary javascript by the use of the expression() syntax.  Refer\n * <http://blogs.msdn.com/b/ie/archive/2008/10/16/ending-expressions.aspx> to learn more about them.\n * You can ensure your document is in standards mode and not quirks mode by adding `<!doctype html>`\n * to the top of your HTML document.\n *\n * SCE assists in writing code in way that (a) is secure by default and (b) makes auditing for\n * security vulnerabilities such as XSS, clickjacking, etc. a lot easier.\n *\n * Here's an example of a binding in a privileged context:\n *\n * <pre class=\"prettyprint\">\n *     <input ng-model=\"userHtml\">\n *     <div ng-bind-html=\"userHtml\">\n * </pre>\n *\n * Notice that `ng-bind-html` is bound to `userHtml` controlled by the user.  With SCE\n * disabled, this application allows the user to render arbitrary HTML into the DIV.\n * In a more realistic example, one may be rendering user comments, blog articles, etc. via\n * bindings.  (HTML is just one example of a context where rendering user controlled input creates\n * security vulnerabilities.)\n *\n * For the case of HTML, you might use a library, either on the client side, or on the server side,\n * to sanitize unsafe HTML before binding to the value and rendering it in the document.\n *\n * How would you ensure that every place that used these types of bindings was bound to a value that\n * was sanitized by your library (or returned as safe for rendering by your server?)  How can you\n * ensure that you didn't accidentally delete the line that sanitized the value, or renamed some\n * properties/fields and forgot to update the binding to the sanitized value?\n *\n * To be secure by default, you want to ensure that any such bindings are disallowed unless you can\n * determine that something explicitly says it's safe to use a value for binding in that\n * context.  You can then audit your code (a simple grep would do) to ensure that this is only done\n * for those values that you can easily tell are safe - because they were received from your server,\n * sanitized by your library, etc.  You can organize your codebase to help with this - perhaps\n * allowing only the files in a specific directory to do this.  Ensuring that the internal API\n * exposed by that code doesn't markup arbitrary values as safe then becomes a more manageable task.\n *\n * In the case of AngularJS' SCE service, one uses {@link ng.$sce#trustAs $sce.trustAs}\n * (and shorthand methods such as {@link ng.$sce#trustAsHtml $sce.trustAsHtml}, etc.) to\n * obtain values that will be accepted by SCE / privileged contexts.\n *\n *\n * ## How does it work?\n *\n * In privileged contexts, directives and code will bind to the result of {@link ng.$sce#getTrusted\n * $sce.getTrusted(context, value)} rather than to the value directly.  Directives use {@link\n * ng.$sce#parse $sce.parseAs} rather than `$parse` to watch attribute bindings, which performs the\n * {@link ng.$sce#getTrusted $sce.getTrusted} behind the scenes on non-constant literals.\n *\n * As an example, {@link ng.directive:ngBindHtml ngBindHtml} uses {@link\n * ng.$sce#parseAsHtml $sce.parseAsHtml(binding expression)}.  Here's the actual code (slightly\n * simplified):\n *\n * <pre class=\"prettyprint\">\n *   var ngBindHtmlDirective = ['$sce', function($sce) {\n *     return function(scope, element, attr) {\n *       scope.$watch($sce.parseAsHtml(attr.ngBindHtml), function(value) {\n *         element.html(value || '');\n *       });\n *     };\n *   }];\n * </pre>\n *\n * ## Impact on loading templates\n *\n * This applies both to the {@link ng.directive:ngInclude `ng-include`} directive as well as\n * `templateUrl`'s specified by {@link guide/directive directives}.\n *\n * By default, Angular only loads templates from the same domain and protocol as the application\n * document.  This is done by calling {@link ng.$sce#getTrustedResourceUrl\n * $sce.getTrustedResourceUrl} on the template URL.  To load templates from other domains and/or\n * protocols, you may either either {@link ng.$sceDelegateProvider#resourceUrlWhitelist whitelist\n * them} or {@link ng.$sce#trustAsResourceUrl wrap it} into a trusted value.\n *\n * *Please note*:\n * The browser's\n * [Same Origin Policy](https://code.google.com/p/browsersec/wiki/Part2#Same-origin_policy_for_XMLHttpRequest)\n * and [Cross-Origin Resource Sharing (CORS)](http://www.w3.org/TR/cors/)\n * policy apply in addition to this and may further restrict whether the template is successfully\n * loaded.  This means that without the right CORS policy, loading templates from a different domain\n * won't work on all browsers.  Also, loading templates from `file://` URL does not work on some\n * browsers.\n *\n * ## This feels like too much overhead for the developer?\n *\n * It's important to remember that SCE only applies to interpolation expressions.\n *\n * If your expressions are constant literals, they're automatically trusted and you don't need to\n * call `$sce.trustAs` on them (remember to include the `ngSanitize` module) (e.g.\n * `<div ng-bind-html=\"'<b>implicitly trusted</b>'\"></div>`) just works.\n *\n * Additionally, `a[href]` and `img[src]` automatically sanitize their URLs and do not pass them\n * through {@link ng.$sce#getTrusted $sce.getTrusted}.  SCE doesn't play a role here.\n *\n * The included {@link ng.$sceDelegate $sceDelegate} comes with sane defaults to allow you to load\n * templates in `ng-include` from your application's domain without having to even know about SCE.\n * It blocks loading templates from other domains or loading templates over http from an https\n * served document.  You can change these by setting your own custom {@link\n * ng.$sceDelegateProvider#resourceUrlWhitelist whitelists} and {@link\n * ng.$sceDelegateProvider#resourceUrlBlacklist blacklists} for matching such URLs.\n *\n * This significantly reduces the overhead.  It is far easier to pay the small overhead and have an\n * application that's secure and can be audited to verify that with much more ease than bolting\n * security onto an application later.\n *\n * <a name=\"contexts\"></a>\n * ## What trusted context types are supported?\n *\n * | Context             | Notes          |\n * |---------------------|----------------|\n * | `$sce.HTML`         | For HTML that's safe to source into the application.  The {@link ng.directive:ngBindHtml ngBindHtml} directive uses this context for bindings. If an unsafe value is encountered and the {@link ngSanitize $sanitize} module is present this will sanitize the value instead of throwing an error. |\n * | `$sce.CSS`          | For CSS that's safe to source into the application.  Currently unused.  Feel free to use it in your own directives. |\n * | `$sce.URL`          | For URLs that are safe to follow as links.  Currently unused (`<a href=` and `<img src=` sanitize their urls and don't constitute an SCE context. |\n * | `$sce.RESOURCE_URL` | For URLs that are not only safe to follow as links, but whose contents are also safe to include in your application.  Examples include `ng-include`, `src` / `ngSrc` bindings for tags other than `IMG` (e.g. `IFRAME`, `OBJECT`, etc.)  <br><br>Note that `$sce.RESOURCE_URL` makes a stronger statement about the URL than `$sce.URL` does and therefore contexts requiring values trusted for `$sce.RESOURCE_URL` can be used anywhere that values trusted for `$sce.URL` are required. |\n * | `$sce.JS`           | For JavaScript that is safe to execute in your application's context.  Currently unused.  Feel free to use it in your own directives. |\n *\n * ## Format of items in {@link ng.$sceDelegateProvider#resourceUrlWhitelist resourceUrlWhitelist}/{@link ng.$sceDelegateProvider#resourceUrlBlacklist Blacklist} <a name=\"resourceUrlPatternItem\"></a>\n *\n *  Each element in these arrays must be one of the following:\n *\n *  - **'self'**\n *    - The special **string**, `'self'`, can be used to match against all URLs of the **same\n *      domain** as the application document using the **same protocol**.\n *  - **String** (except the special value `'self'`)\n *    - The string is matched against the full *normalized / absolute URL* of the resource\n *      being tested (substring matches are not good enough.)\n *    - There are exactly **two wildcard sequences** - `*` and `**`.  All other characters\n *      match themselves.\n *    - `*`: matches zero or more occurrences of any character other than one of the following 6\n *      characters: '`:`', '`/`', '`.`', '`?`', '`&`' and ';'.  It's a useful wildcard for use\n *      in a whitelist.\n *    - `**`: matches zero or more occurrences of *any* character.  As such, it's not\n *      not appropriate to use in for a scheme, domain, etc. as it would match too much.  (e.g.\n *      http://**.example.com/ would match http://evil.com/?ignore=.example.com/ and that might\n *      not have been the intention.)  Its usage at the very end of the path is ok.  (e.g.\n *      http://foo.example.com/templates/**).\n *  - **RegExp** (*see caveat below*)\n *    - *Caveat*:  While regular expressions are powerful and offer great flexibility,  their syntax\n *      (and all the inevitable escaping) makes them *harder to maintain*.  It's easy to\n *      accidentally introduce a bug when one updates a complex expression (imho, all regexes should\n *      have good test coverage.).  For instance, the use of `.` in the regex is correct only in a\n *      small number of cases.  A `.` character in the regex used when matching the scheme or a\n *      subdomain could be matched against a `:` or literal `.` that was likely not intended.   It\n *      is highly recommended to use the string patterns and only fall back to regular expressions\n *      if they as a last resort.\n *    - The regular expression must be an instance of RegExp (i.e. not a string.)  It is\n *      matched against the **entire** *normalized / absolute URL* of the resource being tested\n *      (even when the RegExp did not have the `^` and `$` codes.)  In addition, any flags\n *      present on the RegExp (such as multiline, global, ignoreCase) are ignored.\n *    - If you are generating your JavaScript from some other templating engine (not\n *      recommended, e.g. in issue [#4006](https://github.com/angular/angular.js/issues/4006)),\n *      remember to escape your regular expression (and be aware that you might need more than\n *      one level of escaping depending on your templating engine and the way you interpolated\n *      the value.)  Do make use of your platform's escaping mechanism as it might be good\n *      enough before coding your own.  e.g. Ruby has\n *      [Regexp.escape(str)](http://www.ruby-doc.org/core-2.0.0/Regexp.html#method-c-escape)\n *      and Python has [re.escape](http://docs.python.org/library/re.html#re.escape).\n *      Javascript lacks a similar built in function for escaping.  Take a look at Google\n *      Closure library's [goog.string.regExpEscape(s)](\n *      http://docs.closure-library.googlecode.com/git/closure_goog_string_string.js.source.html#line962).\n *\n * Refer {@link ng.$sceDelegateProvider $sceDelegateProvider} for an example.\n *\n * ## Show me an example using SCE.\n *\n * @example\n<example module=\"mySceApp\" deps=\"angular-sanitize.js\">\n<file name=\"index.html\">\n  <div ng-controller=\"myAppController as myCtrl\">\n    <i ng-bind-html=\"myCtrl.explicitlyTrustedHtml\" id=\"explicitlyTrustedHtml\"></i><br><br>\n    <b>User comments</b><br>\n    By default, HTML that isn't explicitly trusted (e.g. Alice's comment) is sanitized when\n    $sanitize is available.  If $sanitize isn't available, this results in an error instead of an\n    exploit.\n    <div class=\"well\">\n      <div ng-repeat=\"userComment in myCtrl.userComments\">\n        <b>{{userComment.name}}</b>:\n        <span ng-bind-html=\"userComment.htmlComment\" class=\"htmlComment\"></span>\n        <br>\n      </div>\n    </div>\n  </div>\n</file>\n\n<file name=\"script.js\">\n  var mySceApp = angular.module('mySceApp', ['ngSanitize']);\n\n  mySceApp.controller(\"myAppController\", function myAppController($http, $templateCache, $sce) {\n    var self = this;\n    $http.get(\"test_data.json\", {cache: $templateCache}).success(function(userComments) {\n      self.userComments = userComments;\n    });\n    self.explicitlyTrustedHtml = $sce.trustAsHtml(\n        '<span onmouseover=\"this.textContent=&quot;Explicitly trusted HTML bypasses ' +\n        'sanitization.&quot;\">Hover over this text.</span>');\n  });\n</file>\n\n<file name=\"test_data.json\">\n[\n  { \"name\": \"Alice\",\n    \"htmlComment\":\n        \"<span onmouseover='this.textContent=\\\"PWN3D!\\\"'>Is <i>anyone</i> reading this?</span>\"\n  },\n  { \"name\": \"Bob\",\n    \"htmlComment\": \"<i>Yes!</i>  Am I the only other one?\"\n  }\n]\n</file>\n\n<file name=\"protractor.js\" type=\"protractor\">\n  describe('SCE doc demo', function() {\n    it('should sanitize untrusted values', function() {\n      expect(element(by.css('.htmlComment')).getInnerHtml())\n          .toBe('<span>Is <i>anyone</i> reading this?</span>');\n    });\n\n    it('should NOT sanitize explicitly trusted values', function() {\n      expect(element(by.id('explicitlyTrustedHtml')).getInnerHtml()).toBe(\n          '<span onmouseover=\"this.textContent=&quot;Explicitly trusted HTML bypasses ' +\n          'sanitization.&quot;\">Hover over this text.</span>');\n    });\n  });\n</file>\n</example>\n *\n *\n *\n * ## Can I disable SCE completely?\n *\n * Yes, you can.  However, this is strongly discouraged.  SCE gives you a lot of security benefits\n * for little coding overhead.  It will be much harder to take an SCE disabled application and\n * either secure it on your own or enable SCE at a later stage.  It might make sense to disable SCE\n * for cases where you have a lot of existing code that was written before SCE was introduced and\n * you're migrating them a module at a time.\n *\n * That said, here's how you can completely disable SCE:\n *\n * <pre class=\"prettyprint\">\n *   angular.module('myAppWithSceDisabledmyApp', []).config(function($sceProvider) {\n *     // Completely disable SCE.  For demonstration purposes only!\n *     // Do not use in new projects.\n *     $sceProvider.enabled(false);\n *   });\n * </pre>\n *\n */\n/* jshint maxlen: 100 */\n\nfunction $SceProvider() {\n  var enabled = true;\n\n  /**\n   * @ngdoc method\n   * @name $sceProvider#enabled\n   * @kind function\n   *\n   * @param {boolean=} value If provided, then enables/disables SCE.\n   * @return {boolean} true if SCE is enabled, false otherwise.\n   *\n   * @description\n   * Enables/disables SCE and returns the current value.\n   */\n  this.enabled = function (value) {\n    if (arguments.length) {\n      enabled = !!value;\n    }\n    return enabled;\n  };\n\n\n  /* Design notes on the default implementation for SCE.\n   *\n   * The API contract for the SCE delegate\n   * -------------------------------------\n   * The SCE delegate object must provide the following 3 methods:\n   *\n   * - trustAs(contextEnum, value)\n   *     This method is used to tell the SCE service that the provided value is OK to use in the\n   *     contexts specified by contextEnum.  It must return an object that will be accepted by\n   *     getTrusted() for a compatible contextEnum and return this value.\n   *\n   * - valueOf(value)\n   *     For values that were not produced by trustAs(), return them as is.  For values that were\n   *     produced by trustAs(), return the corresponding input value to trustAs.  Basically, if\n   *     trustAs is wrapping the given values into some type, this operation unwraps it when given\n   *     such a value.\n   *\n   * - getTrusted(contextEnum, value)\n   *     This function should return the a value that is safe to use in the context specified by\n   *     contextEnum or throw and exception otherwise.\n   *\n   * NOTE: This contract deliberately does NOT state that values returned by trustAs() must be\n   * opaque or wrapped in some holder object.  That happens to be an implementation detail.  For\n   * instance, an implementation could maintain a registry of all trusted objects by context.  In\n   * such a case, trustAs() would return the same object that was passed in.  getTrusted() would\n   * return the same object passed in if it was found in the registry under a compatible context or\n   * throw an exception otherwise.  An implementation might only wrap values some of the time based\n   * on some criteria.  getTrusted() might return a value and not throw an exception for special\n   * constants or objects even if not wrapped.  All such implementations fulfill this contract.\n   *\n   *\n   * A note on the inheritance model for SCE contexts\n   * ------------------------------------------------\n   * I've used inheritance and made RESOURCE_URL wrapped types a subtype of URL wrapped types.  This\n   * is purely an implementation details.\n   *\n   * The contract is simply this:\n   *\n   *     getTrusted($sce.RESOURCE_URL, value) succeeding implies that getTrusted($sce.URL, value)\n   *     will also succeed.\n   *\n   * Inheritance happens to capture this in a natural way.  In some future, we\n   * may not use inheritance anymore.  That is OK because no code outside of\n   * sce.js and sceSpecs.js would need to be aware of this detail.\n   */\n\n  this.$get = ['$parse', '$sniffer', '$sceDelegate', function(\n                $parse,   $sniffer,   $sceDelegate) {\n    // Prereq: Ensure that we're not running in IE8 quirks mode.  In that mode, IE allows\n    // the \"expression(javascript expression)\" syntax which is insecure.\n    if (enabled && $sniffer.msie && $sniffer.msieDocumentMode < 8) {\n      throw $sceMinErr('iequirks',\n        'Strict Contextual Escaping does not support Internet Explorer version < 9 in quirks ' +\n        'mode.  You can fix this by adding the text <!doctype html> to the top of your HTML ' +\n        'document.  See http://docs.angularjs.org/api/ng.$sce for more information.');\n    }\n\n    var sce = shallowCopy(SCE_CONTEXTS);\n\n    /**\n     * @ngdoc method\n     * @name $sce#isEnabled\n     * @kind function\n     *\n     * @return {Boolean} true if SCE is enabled, false otherwise.  If you want to set the value, you\n     * have to do it at module config time on {@link ng.$sceProvider $sceProvider}.\n     *\n     * @description\n     * Returns a boolean indicating if SCE is enabled.\n     */\n    sce.isEnabled = function () {\n      return enabled;\n    };\n    sce.trustAs = $sceDelegate.trustAs;\n    sce.getTrusted = $sceDelegate.getTrusted;\n    sce.valueOf = $sceDelegate.valueOf;\n\n    if (!enabled) {\n      sce.trustAs = sce.getTrusted = function(type, value) { return value; };\n      sce.valueOf = identity;\n    }\n\n    /**\n     * @ngdoc method\n     * @name $sce#parse\n     *\n     * @description\n     * Converts Angular {@link guide/expression expression} into a function.  This is like {@link\n     * ng.$parse $parse} and is identical when the expression is a literal constant.  Otherwise, it\n     * wraps the expression in a call to {@link ng.$sce#getTrusted $sce.getTrusted(*type*,\n     * *result*)}\n     *\n     * @param {string} type The kind of SCE context in which this result will be used.\n     * @param {string} expression String expression to compile.\n     * @returns {function(context, locals)} a function which represents the compiled expression:\n     *\n     *    * `context` – `{object}` – an object against which any expressions embedded in the strings\n     *      are evaluated against (typically a scope object).\n     *    * `locals` – `{object=}` – local variables context object, useful for overriding values in\n     *      `context`.\n     */\n    sce.parseAs = function sceParseAs(type, expr) {\n      var parsed = $parse(expr);\n      if (parsed.literal && parsed.constant) {\n        return parsed;\n      } else {\n        return function sceParseAsTrusted(self, locals) {\n          return sce.getTrusted(type, parsed(self, locals));\n        };\n      }\n    };\n\n    /**\n     * @ngdoc method\n     * @name $sce#trustAs\n     *\n     * @description\n     * Delegates to {@link ng.$sceDelegate#trustAs `$sceDelegate.trustAs`}.  As such,\n     * returns an object that is trusted by angular for use in specified strict contextual\n     * escaping contexts (such as ng-bind-html, ng-include, any src attribute\n     * interpolation, any dom event binding attribute interpolation such as for onclick,  etc.)\n     * that uses the provided value.  See * {@link ng.$sce $sce} for enabling strict contextual\n     * escaping.\n     *\n     * @param {string} type The kind of context in which this value is safe for use.  e.g. url,\n     *   resource_url, html, js and css.\n     * @param {*} value The value that that should be considered trusted/safe.\n     * @returns {*} A value that can be used to stand in for the provided `value` in places\n     * where Angular expects a $sce.trustAs() return value.\n     */\n\n    /**\n     * @ngdoc method\n     * @name $sce#trustAsHtml\n     *\n     * @description\n     * Shorthand method.  `$sce.trustAsHtml(value)` →\n     *     {@link ng.$sceDelegate#trustAs `$sceDelegate.trustAs($sce.HTML, value)`}\n     *\n     * @param {*} value The value to trustAs.\n     * @returns {*} An object that can be passed to {@link ng.$sce#getTrustedHtml\n     *     $sce.getTrustedHtml(value)} to obtain the original value.  (privileged directives\n     *     only accept expressions that are either literal constants or are the\n     *     return value of {@link ng.$sce#trustAs $sce.trustAs}.)\n     */\n\n    /**\n     * @ngdoc method\n     * @name $sce#trustAsUrl\n     *\n     * @description\n     * Shorthand method.  `$sce.trustAsUrl(value)` →\n     *     {@link ng.$sceDelegate#trustAs `$sceDelegate.trustAs($sce.URL, value)`}\n     *\n     * @param {*} value The value to trustAs.\n     * @returns {*} An object that can be passed to {@link ng.$sce#getTrustedUrl\n     *     $sce.getTrustedUrl(value)} to obtain the original value.  (privileged directives\n     *     only accept expressions that are either literal constants or are the\n     *     return value of {@link ng.$sce#trustAs $sce.trustAs}.)\n     */\n\n    /**\n     * @ngdoc method\n     * @name $sce#trustAsResourceUrl\n     *\n     * @description\n     * Shorthand method.  `$sce.trustAsResourceUrl(value)` →\n     *     {@link ng.$sceDelegate#trustAs `$sceDelegate.trustAs($sce.RESOURCE_URL, value)`}\n     *\n     * @param {*} value The value to trustAs.\n     * @returns {*} An object that can be passed to {@link ng.$sce#getTrustedResourceUrl\n     *     $sce.getTrustedResourceUrl(value)} to obtain the original value.  (privileged directives\n     *     only accept expressions that are either literal constants or are the return\n     *     value of {@link ng.$sce#trustAs $sce.trustAs}.)\n     */\n\n    /**\n     * @ngdoc method\n     * @name $sce#trustAsJs\n     *\n     * @description\n     * Shorthand method.  `$sce.trustAsJs(value)` →\n     *     {@link ng.$sceDelegate#trustAs `$sceDelegate.trustAs($sce.JS, value)`}\n     *\n     * @param {*} value The value to trustAs.\n     * @returns {*} An object that can be passed to {@link ng.$sce#getTrustedJs\n     *     $sce.getTrustedJs(value)} to obtain the original value.  (privileged directives\n     *     only accept expressions that are either literal constants or are the\n     *     return value of {@link ng.$sce#trustAs $sce.trustAs}.)\n     */\n\n    /**\n     * @ngdoc method\n     * @name $sce#getTrusted\n     *\n     * @description\n     * Delegates to {@link ng.$sceDelegate#getTrusted `$sceDelegate.getTrusted`}.  As such,\n     * takes the result of a {@link ng.$sce#trustAs `$sce.trustAs`}() call and returns the\n     * originally supplied value if the queried context type is a supertype of the created type.\n     * If this condition isn't satisfied, throws an exception.\n     *\n     * @param {string} type The kind of context in which this value is to be used.\n     * @param {*} maybeTrusted The result of a prior {@link ng.$sce#trustAs `$sce.trustAs`}\n     *                         call.\n     * @returns {*} The value the was originally provided to\n     *              {@link ng.$sce#trustAs `$sce.trustAs`} if valid in this context.\n     *              Otherwise, throws an exception.\n     */\n\n    /**\n     * @ngdoc method\n     * @name $sce#getTrustedHtml\n     *\n     * @description\n     * Shorthand method.  `$sce.getTrustedHtml(value)` →\n     *     {@link ng.$sceDelegate#getTrusted `$sceDelegate.getTrusted($sce.HTML, value)`}\n     *\n     * @param {*} value The value to pass to `$sce.getTrusted`.\n     * @returns {*} The return value of `$sce.getTrusted($sce.HTML, value)`\n     */\n\n    /**\n     * @ngdoc method\n     * @name $sce#getTrustedCss\n     *\n     * @description\n     * Shorthand method.  `$sce.getTrustedCss(value)` →\n     *     {@link ng.$sceDelegate#getTrusted `$sceDelegate.getTrusted($sce.CSS, value)`}\n     *\n     * @param {*} value The value to pass to `$sce.getTrusted`.\n     * @returns {*} The return value of `$sce.getTrusted($sce.CSS, value)`\n     */\n\n    /**\n     * @ngdoc method\n     * @name $sce#getTrustedUrl\n     *\n     * @description\n     * Shorthand method.  `$sce.getTrustedUrl(value)` →\n     *     {@link ng.$sceDelegate#getTrusted `$sceDelegate.getTrusted($sce.URL, value)`}\n     *\n     * @param {*} value The value to pass to `$sce.getTrusted`.\n     * @returns {*} The return value of `$sce.getTrusted($sce.URL, value)`\n     */\n\n    /**\n     * @ngdoc method\n     * @name $sce#getTrustedResourceUrl\n     *\n     * @description\n     * Shorthand method.  `$sce.getTrustedResourceUrl(value)` →\n     *     {@link ng.$sceDelegate#getTrusted `$sceDelegate.getTrusted($sce.RESOURCE_URL, value)`}\n     *\n     * @param {*} value The value to pass to `$sceDelegate.getTrusted`.\n     * @returns {*} The return value of `$sce.getTrusted($sce.RESOURCE_URL, value)`\n     */\n\n    /**\n     * @ngdoc method\n     * @name $sce#getTrustedJs\n     *\n     * @description\n     * Shorthand method.  `$sce.getTrustedJs(value)` →\n     *     {@link ng.$sceDelegate#getTrusted `$sceDelegate.getTrusted($sce.JS, value)`}\n     *\n     * @param {*} value The value to pass to `$sce.getTrusted`.\n     * @returns {*} The return value of `$sce.getTrusted($sce.JS, value)`\n     */\n\n    /**\n     * @ngdoc method\n     * @name $sce#parseAsHtml\n     *\n     * @description\n     * Shorthand method.  `$sce.parseAsHtml(expression string)` →\n     *     {@link ng.$sce#parse `$sce.parseAs($sce.HTML, value)`}\n     *\n     * @param {string} expression String expression to compile.\n     * @returns {function(context, locals)} a function which represents the compiled expression:\n     *\n     *    * `context` – `{object}` – an object against which any expressions embedded in the strings\n     *      are evaluated against (typically a scope object).\n     *    * `locals` – `{object=}` – local variables context object, useful for overriding values in\n     *      `context`.\n     */\n\n    /**\n     * @ngdoc method\n     * @name $sce#parseAsCss\n     *\n     * @description\n     * Shorthand method.  `$sce.parseAsCss(value)` →\n     *     {@link ng.$sce#parse `$sce.parseAs($sce.CSS, value)`}\n     *\n     * @param {string} expression String expression to compile.\n     * @returns {function(context, locals)} a function which represents the compiled expression:\n     *\n     *    * `context` – `{object}` – an object against which any expressions embedded in the strings\n     *      are evaluated against (typically a scope object).\n     *    * `locals` – `{object=}` – local variables context object, useful for overriding values in\n     *      `context`.\n     */\n\n    /**\n     * @ngdoc method\n     * @name $sce#parseAsUrl\n     *\n     * @description\n     * Shorthand method.  `$sce.parseAsUrl(value)` →\n     *     {@link ng.$sce#parse `$sce.parseAs($sce.URL, value)`}\n     *\n     * @param {string} expression String expression to compile.\n     * @returns {function(context, locals)} a function which represents the compiled expression:\n     *\n     *    * `context` – `{object}` – an object against which any expressions embedded in the strings\n     *      are evaluated against (typically a scope object).\n     *    * `locals` – `{object=}` – local variables context object, useful for overriding values in\n     *      `context`.\n     */\n\n    /**\n     * @ngdoc method\n     * @name $sce#parseAsResourceUrl\n     *\n     * @description\n     * Shorthand method.  `$sce.parseAsResourceUrl(value)` →\n     *     {@link ng.$sce#parse `$sce.parseAs($sce.RESOURCE_URL, value)`}\n     *\n     * @param {string} expression String expression to compile.\n     * @returns {function(context, locals)} a function which represents the compiled expression:\n     *\n     *    * `context` – `{object}` – an object against which any expressions embedded in the strings\n     *      are evaluated against (typically a scope object).\n     *    * `locals` – `{object=}` – local variables context object, useful for overriding values in\n     *      `context`.\n     */\n\n    /**\n     * @ngdoc method\n     * @name $sce#parseAsJs\n     *\n     * @description\n     * Shorthand method.  `$sce.parseAsJs(value)` →\n     *     {@link ng.$sce#parse `$sce.parseAs($sce.JS, value)`}\n     *\n     * @param {string} expression String expression to compile.\n     * @returns {function(context, locals)} a function which represents the compiled expression:\n     *\n     *    * `context` – `{object}` – an object against which any expressions embedded in the strings\n     *      are evaluated against (typically a scope object).\n     *    * `locals` – `{object=}` – local variables context object, useful for overriding values in\n     *      `context`.\n     */\n\n    // Shorthand delegations.\n    var parse = sce.parseAs,\n        getTrusted = sce.getTrusted,\n        trustAs = sce.trustAs;\n\n    forEach(SCE_CONTEXTS, function (enumValue, name) {\n      var lName = lowercase(name);\n      sce[camelCase(\"parse_as_\" + lName)] = function (expr) {\n        return parse(enumValue, expr);\n      };\n      sce[camelCase(\"get_trusted_\" + lName)] = function (value) {\n        return getTrusted(enumValue, value);\n      };\n      sce[camelCase(\"trust_as_\" + lName)] = function (value) {\n        return trustAs(enumValue, value);\n      };\n    });\n\n    return sce;\n  }];\n}\n\n/**\n * !!! This is an undocumented \"private\" service !!!\n *\n * @name $sniffer\n * @requires $window\n * @requires $document\n *\n * @property {boolean} history Does the browser support html5 history api ?\n * @property {boolean} hashchange Does the browser support hashchange event ?\n * @property {boolean} transitions Does the browser support CSS transition events ?\n * @property {boolean} animations Does the browser support CSS animation events ?\n *\n * @description\n * This is very simple implementation of testing browser's features.\n */\nfunction $SnifferProvider() {\n  this.$get = ['$window', '$document', function($window, $document) {\n    var eventSupport = {},\n        android =\n          int((/android (\\d+)/.exec(lowercase(($window.navigator || {}).userAgent)) || [])[1]),\n        boxee = /Boxee/i.test(($window.navigator || {}).userAgent),\n        document = $document[0] || {},\n        documentMode = document.documentMode,\n        vendorPrefix,\n        vendorRegex = /^(Moz|webkit|O|ms)(?=[A-Z])/,\n        bodyStyle = document.body && document.body.style,\n        transitions = false,\n        animations = false,\n        match;\n\n    if (bodyStyle) {\n      for(var prop in bodyStyle) {\n        if(match = vendorRegex.exec(prop)) {\n          vendorPrefix = match[0];\n          vendorPrefix = vendorPrefix.substr(0, 1).toUpperCase() + vendorPrefix.substr(1);\n          break;\n        }\n      }\n\n      if(!vendorPrefix) {\n        vendorPrefix = ('WebkitOpacity' in bodyStyle) && 'webkit';\n      }\n\n      transitions = !!(('transition' in bodyStyle) || (vendorPrefix + 'Transition' in bodyStyle));\n      animations  = !!(('animation' in bodyStyle) || (vendorPrefix + 'Animation' in bodyStyle));\n\n      if (android && (!transitions||!animations)) {\n        transitions = isString(document.body.style.webkitTransition);\n        animations = isString(document.body.style.webkitAnimation);\n      }\n    }\n\n\n    return {\n      // Android has history.pushState, but it does not update location correctly\n      // so let's not use the history API at all.\n      // http://code.google.com/p/android/issues/detail?id=17471\n      // https://github.com/angular/angular.js/issues/904\n\n      // older webkit browser (533.9) on Boxee box has exactly the same problem as Android has\n      // so let's not use the history API also\n      // We are purposefully using `!(android < 4)` to cover the case when `android` is undefined\n      // jshint -W018\n      history: !!($window.history && $window.history.pushState && !(android < 4) && !boxee),\n      // jshint +W018\n      hashchange: 'onhashchange' in $window &&\n                  // IE8 compatible mode lies\n                  (!documentMode || documentMode > 7),\n      hasEvent: function(event) {\n        // IE9 implements 'input' event it's so fubared that we rather pretend that it doesn't have\n        // it. In particular the event is not fired when backspace or delete key are pressed or\n        // when cut operation is performed.\n        if (event == 'input' && msie == 9) return false;\n\n        if (isUndefined(eventSupport[event])) {\n          var divElm = document.createElement('div');\n          eventSupport[event] = 'on' + event in divElm;\n        }\n\n        return eventSupport[event];\n      },\n      csp: csp(),\n      vendorPrefix: vendorPrefix,\n      transitions : transitions,\n      animations : animations,\n      android: android,\n      msie : msie,\n      msieDocumentMode: documentMode\n    };\n  }];\n}\n\nfunction $TimeoutProvider() {\n  this.$get = ['$rootScope', '$browser', '$q', '$exceptionHandler',\n       function($rootScope,   $browser,   $q,   $exceptionHandler) {\n    var deferreds = {};\n\n\n     /**\n      * @ngdoc service\n      * @name $timeout\n      *\n      * @description\n      * Angular's wrapper for `window.setTimeout`. The `fn` function is wrapped into a try/catch\n      * block and delegates any exceptions to\n      * {@link ng.$exceptionHandler $exceptionHandler} service.\n      *\n      * The return value of registering a timeout function is a promise, which will be resolved when\n      * the timeout is reached and the timeout function is executed.\n      *\n      * To cancel a timeout request, call `$timeout.cancel(promise)`.\n      *\n      * In tests you can use {@link ngMock.$timeout `$timeout.flush()`} to\n      * synchronously flush the queue of deferred functions.\n      *\n      * @param {function()} fn A function, whose execution should be delayed.\n      * @param {number=} [delay=0] Delay in milliseconds.\n      * @param {boolean=} [invokeApply=true] If set to `false` skips model dirty checking, otherwise\n      *   will invoke `fn` within the {@link ng.$rootScope.Scope#$apply $apply} block.\n      * @returns {Promise} Promise that will be resolved when the timeout is reached. The value this\n      *   promise will be resolved with is the return value of the `fn` function.\n      *\n      */\n    function timeout(fn, delay, invokeApply) {\n      var deferred = $q.defer(),\n          promise = deferred.promise,\n          skipApply = (isDefined(invokeApply) && !invokeApply),\n          timeoutId;\n\n      timeoutId = $browser.defer(function() {\n        try {\n          deferred.resolve(fn());\n        } catch(e) {\n          deferred.reject(e);\n          $exceptionHandler(e);\n        }\n        finally {\n          delete deferreds[promise.$$timeoutId];\n        }\n\n        if (!skipApply) $rootScope.$apply();\n      }, delay);\n\n      promise.$$timeoutId = timeoutId;\n      deferreds[timeoutId] = deferred;\n\n      return promise;\n    }\n\n\n     /**\n      * @ngdoc method\n      * @name $timeout#cancel\n      *\n      * @description\n      * Cancels a task associated with the `promise`. As a result of this, the promise will be\n      * resolved with a rejection.\n      *\n      * @param {Promise=} promise Promise returned by the `$timeout` function.\n      * @returns {boolean} Returns `true` if the task hasn't executed yet and was successfully\n      *   canceled.\n      */\n    timeout.cancel = function(promise) {\n      if (promise && promise.$$timeoutId in deferreds) {\n        deferreds[promise.$$timeoutId].reject('canceled');\n        delete deferreds[promise.$$timeoutId];\n        return $browser.defer.cancel(promise.$$timeoutId);\n      }\n      return false;\n    };\n\n    return timeout;\n  }];\n}\n\n// NOTE:  The usage of window and document instead of $window and $document here is\n// deliberate.  This service depends on the specific behavior of anchor nodes created by the\n// browser (resolving and parsing URLs) that is unlikely to be provided by mock objects and\n// cause us to break tests.  In addition, when the browser resolves a URL for XHR, it\n// doesn't know about mocked locations and resolves URLs to the real document - which is\n// exactly the behavior needed here.  There is little value is mocking these out for this\n// service.\nvar urlParsingNode = document.createElement(\"a\");\nvar originUrl = urlResolve(window.location.href, true);\n\n\n/**\n *\n * Implementation Notes for non-IE browsers\n * ----------------------------------------\n * Assigning a URL to the href property of an anchor DOM node, even one attached to the DOM,\n * results both in the normalizing and parsing of the URL.  Normalizing means that a relative\n * URL will be resolved into an absolute URL in the context of the application document.\n * Parsing means that the anchor node's host, hostname, protocol, port, pathname and related\n * properties are all populated to reflect the normalized URL.  This approach has wide\n * compatibility - Safari 1+, Mozilla 1+, Opera 7+,e etc.  See\n * http://www.aptana.com/reference/html/api/HTMLAnchorElement.html\n *\n * Implementation Notes for IE\n * ---------------------------\n * IE >= 8 and <= 10 normalizes the URL when assigned to the anchor node similar to the other\n * browsers.  However, the parsed components will not be set if the URL assigned did not specify\n * them.  (e.g. if you assign a.href = \"foo\", then a.protocol, a.host, etc. will be empty.)  We\n * work around that by performing the parsing in a 2nd step by taking a previously normalized\n * URL (e.g. by assigning to a.href) and assigning it a.href again.  This correctly populates the\n * properties such as protocol, hostname, port, etc.\n *\n * IE7 does not normalize the URL when assigned to an anchor node.  (Apparently, it does, if one\n * uses the inner HTML approach to assign the URL as part of an HTML snippet -\n * http://stackoverflow.com/a/472729)  However, setting img[src] does normalize the URL.\n * Unfortunately, setting img[src] to something like \"javascript:foo\" on IE throws an exception.\n * Since the primary usage for normalizing URLs is to sanitize such URLs, we can't use that\n * method and IE < 8 is unsupported.\n *\n * References:\n *   http://developer.mozilla.org/en-US/docs/Web/API/HTMLAnchorElement\n *   http://www.aptana.com/reference/html/api/HTMLAnchorElement.html\n *   http://url.spec.whatwg.org/#urlutils\n *   https://github.com/angular/angular.js/pull/2902\n *   http://james.padolsey.com/javascript/parsing-urls-with-the-dom/\n *\n * @kind function\n * @param {string} url The URL to be parsed.\n * @description Normalizes and parses a URL.\n * @returns {object} Returns the normalized URL as a dictionary.\n *\n *   | member name   | Description    |\n *   |---------------|----------------|\n *   | href          | A normalized version of the provided URL if it was not an absolute URL |\n *   | protocol      | The protocol including the trailing colon                              |\n *   | host          | The host and port (if the port is non-default) of the normalizedUrl    |\n *   | search        | The search params, minus the question mark                             |\n *   | hash          | The hash string, minus the hash symbol\n *   | hostname      | The hostname\n *   | port          | The port, without \":\"\n *   | pathname      | The pathname, beginning with \"/\"\n *\n */\nfunction urlResolve(url, base) {\n  var href = url;\n\n  if (msie) {\n    // Normalize before parse.  Refer Implementation Notes on why this is\n    // done in two steps on IE.\n    urlParsingNode.setAttribute(\"href\", href);\n    href = urlParsingNode.href;\n  }\n\n  urlParsingNode.setAttribute('href', href);\n\n  // urlParsingNode provides the UrlUtils interface - http://url.spec.whatwg.org/#urlutils\n  return {\n    href: urlParsingNode.href,\n    protocol: urlParsingNode.protocol ? urlParsingNode.protocol.replace(/:$/, '') : '',\n    host: urlParsingNode.host,\n    search: urlParsingNode.search ? urlParsingNode.search.replace(/^\\?/, '') : '',\n    hash: urlParsingNode.hash ? urlParsingNode.hash.replace(/^#/, '') : '',\n    hostname: urlParsingNode.hostname,\n    port: urlParsingNode.port,\n    pathname: (urlParsingNode.pathname.charAt(0) === '/')\n      ? urlParsingNode.pathname\n      : '/' + urlParsingNode.pathname\n  };\n}\n\n/**\n * Parse a request URL and determine whether this is a same-origin request as the application document.\n *\n * @param {string|object} requestUrl The url of the request as a string that will be resolved\n * or a parsed URL object.\n * @returns {boolean} Whether the request is for the same origin as the application document.\n */\nfunction urlIsSameOrigin(requestUrl) {\n  var parsed = (isString(requestUrl)) ? urlResolve(requestUrl) : requestUrl;\n  return (parsed.protocol === originUrl.protocol &&\n          parsed.host === originUrl.host);\n}\n\n/**\n * @ngdoc service\n * @name $window\n *\n * @description\n * A reference to the browser's `window` object. While `window`\n * is globally available in JavaScript, it causes testability problems, because\n * it is a global variable. In angular we always refer to it through the\n * `$window` service, so it may be overridden, removed or mocked for testing.\n *\n * Expressions, like the one defined for the `ngClick` directive in the example\n * below, are evaluated with respect to the current scope.  Therefore, there is\n * no risk of inadvertently coding in a dependency on a global value in such an\n * expression.\n *\n * @example\n   <example>\n     <file name=\"index.html\">\n       <script>\n         function Ctrl($scope, $window) {\n           $scope.greeting = 'Hello, World!';\n           $scope.doGreeting = function(greeting) {\n               $window.alert(greeting);\n           };\n         }\n       </script>\n       <div ng-controller=\"Ctrl\">\n         <input type=\"text\" ng-model=\"greeting\" />\n         <button ng-click=\"doGreeting(greeting)\">ALERT</button>\n       </div>\n     </file>\n     <file name=\"protractor.js\" type=\"protractor\">\n      it('should display the greeting in the input box', function() {\n       element(by.model('greeting')).sendKeys('Hello, E2E Tests');\n       // If we click the button it will block the test runner\n       // element(':button').click();\n      });\n     </file>\n   </example>\n */\nfunction $WindowProvider(){\n  this.$get = valueFn(window);\n}\n\n/**\n * @ngdoc provider\n * @name $filterProvider\n * @description\n *\n * Filters are just functions which transform input to an output. However filters need to be\n * Dependency Injected. To achieve this a filter definition consists of a factory function which is\n * annotated with dependencies and is responsible for creating a filter function.\n *\n * ```js\n *   // Filter registration\n *   function MyModule($provide, $filterProvider) {\n *     // create a service to demonstrate injection (not always needed)\n *     $provide.value('greet', function(name){\n *       return 'Hello ' + name + '!';\n *     });\n *\n *     // register a filter factory which uses the\n *     // greet service to demonstrate DI.\n *     $filterProvider.register('greet', function(greet){\n *       // return the filter function which uses the greet service\n *       // to generate salutation\n *       return function(text) {\n *         // filters need to be forgiving so check input validity\n *         return text && greet(text) || text;\n *       };\n *     });\n *   }\n * ```\n *\n * The filter function is registered with the `$injector` under the filter name suffix with\n * `Filter`.\n *\n * ```js\n *   it('should be the same instance', inject(\n *     function($filterProvider) {\n *       $filterProvider.register('reverse', function(){\n *         return ...;\n *       });\n *     },\n *     function($filter, reverseFilter) {\n *       expect($filter('reverse')).toBe(reverseFilter);\n *     });\n * ```\n *\n *\n * For more information about how angular filters work, and how to create your own filters, see\n * {@link guide/filter Filters} in the Angular Developer Guide.\n */\n/**\n * @ngdoc method\n * @name $filterProvider#register\n * @description\n * Register filter factory function.\n *\n * @param {String} name Name of the filter.\n * @param {Function} fn The filter factory function which is injectable.\n */\n\n\n/**\n * @ngdoc service\n * @name $filter\n * @kind function\n * @description\n * Filters are used for formatting data displayed to the user.\n *\n * The general syntax in templates is as follows:\n *\n *         {{ expression [| filter_name[:parameter_value] ... ] }}\n *\n * @param {String} name Name of the filter function to retrieve\n * @return {Function} the filter function\n * @example\n   <example name=\"$filter\" module=\"filterExample\">\n     <file name=\"index.html\">\n       <div ng-controller=\"MainCtrl\">\n        <h3>{{ originalText }}</h3>\n        <h3>{{ filteredText }}</h3>\n       </div>\n     </file>\n\n     <file name=\"script.js\">\n      angular.module('filterExample', [])\n      .controller('MainCtrl', function($scope, $filter) {\n        $scope.originalText = 'hello';\n        $scope.filteredText = $filter('uppercase')($scope.originalText);\n      });\n     </file>\n   </example>\n  */\n$FilterProvider.$inject = ['$provide'];\nfunction $FilterProvider($provide) {\n  var suffix = 'Filter';\n\n  /**\n   * @ngdoc method\n   * @name $controllerProvider#register\n   * @param {string|Object} name Name of the filter function, or an object map of filters where\n   *    the keys are the filter names and the values are the filter factories.\n   * @returns {Object} Registered filter instance, or if a map of filters was provided then a map\n   *    of the registered filter instances.\n   */\n  function register(name, factory) {\n    if(isObject(name)) {\n      var filters = {};\n      forEach(name, function(filter, key) {\n        filters[key] = register(key, filter);\n      });\n      return filters;\n    } else {\n      return $provide.factory(name + suffix, factory);\n    }\n  }\n  this.register = register;\n\n  this.$get = ['$injector', function($injector) {\n    return function(name) {\n      return $injector.get(name + suffix);\n    };\n  }];\n\n  ////////////////////////////////////////\n\n  /* global\n    currencyFilter: false,\n    dateFilter: false,\n    filterFilter: false,\n    jsonFilter: false,\n    limitToFilter: false,\n    lowercaseFilter: false,\n    numberFilter: false,\n    orderByFilter: false,\n    uppercaseFilter: false,\n  */\n\n  register('currency', currencyFilter);\n  register('date', dateFilter);\n  register('filter', filterFilter);\n  register('json', jsonFilter);\n  register('limitTo', limitToFilter);\n  register('lowercase', lowercaseFilter);\n  register('number', numberFilter);\n  register('orderBy', orderByFilter);\n  register('uppercase', uppercaseFilter);\n}\n\n/**\n * @ngdoc filter\n * @name filter\n * @kind function\n *\n * @description\n * Selects a subset of items from `array` and returns it as a new array.\n *\n * @param {Array} array The source array.\n * @param {string|Object|function()} expression The predicate to be used for selecting items from\n *   `array`.\n *\n *   Can be one of:\n *\n *   - `string`: The string is evaluated as an expression and the resulting value is used for substring match against\n *     the contents of the `array`. All strings or objects with string properties in `array` that contain this string\n *     will be returned. The predicate can be negated by prefixing the string with `!`.\n *\n *   - `Object`: A pattern object can be used to filter specific properties on objects contained\n *     by `array`. For example `{name:\"M\", phone:\"1\"}` predicate will return an array of items\n *     which have property `name` containing \"M\" and property `phone` containing \"1\". A special\n *     property name `$` can be used (as in `{$:\"text\"}`) to accept a match against any\n *     property of the object. That's equivalent to the simple substring match with a `string`\n *     as described above.\n *\n *   - `function(value)`: A predicate function can be used to write arbitrary filters. The function is\n *     called for each element of `array`. The final result is an array of those elements that\n *     the predicate returned true for.\n *\n * @param {function(actual, expected)|true|undefined} comparator Comparator which is used in\n *     determining if the expected value (from the filter expression) and actual value (from\n *     the object in the array) should be considered a match.\n *\n *   Can be one of:\n *\n *   - `function(actual, expected)`:\n *     The function will be given the object value and the predicate value to compare and\n *     should return true if the item should be included in filtered result.\n *\n *   - `true`: A shorthand for `function(actual, expected) { return angular.equals(expected, actual)}`.\n *     this is essentially strict comparison of expected and actual.\n *\n *   - `false|undefined`: A short hand for a function which will look for a substring match in case\n *     insensitive way.\n *\n * @example\n   <example>\n     <file name=\"index.html\">\n       <div ng-init=\"friends = [{name:'John', phone:'555-1276'},\n                                {name:'Mary', phone:'800-BIG-MARY'},\n                                {name:'Mike', phone:'555-4321'},\n                                {name:'Adam', phone:'555-5678'},\n                                {name:'Julie', phone:'555-8765'},\n                                {name:'Juliette', phone:'555-5678'}]\"></div>\n\n       Search: <input ng-model=\"searchText\">\n       <table id=\"searchTextResults\">\n         <tr><th>Name</th><th>Phone</th></tr>\n         <tr ng-repeat=\"friend in friends | filter:searchText\">\n           <td>{{friend.name}}</td>\n           <td>{{friend.phone}}</td>\n         </tr>\n       </table>\n       <hr>\n       Any: <input ng-model=\"search.$\"> <br>\n       Name only <input ng-model=\"search.name\"><br>\n       Phone only <input ng-model=\"search.phone\"><br>\n       Equality <input type=\"checkbox\" ng-model=\"strict\"><br>\n       <table id=\"searchObjResults\">\n         <tr><th>Name</th><th>Phone</th></tr>\n         <tr ng-repeat=\"friendObj in friends | filter:search:strict\">\n           <td>{{friendObj.name}}</td>\n           <td>{{friendObj.phone}}</td>\n         </tr>\n       </table>\n     </file>\n     <file name=\"protractor.js\" type=\"protractor\">\n       var expectFriendNames = function(expectedNames, key) {\n         element.all(by.repeater(key + ' in friends').column(key + '.name')).then(function(arr) {\n           arr.forEach(function(wd, i) {\n             expect(wd.getText()).toMatch(expectedNames[i]);\n           });\n         });\n       };\n\n       it('should search across all fields when filtering with a string', function() {\n         var searchText = element(by.model('searchText'));\n         searchText.clear();\n         searchText.sendKeys('m');\n         expectFriendNames(['Mary', 'Mike', 'Adam'], 'friend');\n\n         searchText.clear();\n         searchText.sendKeys('76');\n         expectFriendNames(['John', 'Julie'], 'friend');\n       });\n\n       it('should search in specific fields when filtering with a predicate object', function() {\n         var searchAny = element(by.model('search.$'));\n         searchAny.clear();\n         searchAny.sendKeys('i');\n         expectFriendNames(['Mary', 'Mike', 'Julie', 'Juliette'], 'friendObj');\n       });\n       it('should use a equal comparison when comparator is true', function() {\n         var searchName = element(by.model('search.name'));\n         var strict = element(by.model('strict'));\n         searchName.clear();\n         searchName.sendKeys('Julie');\n         strict.click();\n         expectFriendNames(['Julie'], 'friendObj');\n       });\n     </file>\n   </example>\n */\nfunction filterFilter() {\n  return function(array, expression, comparator) {\n    if (!isArray(array)) return array;\n\n    var comparatorType = typeof(comparator),\n        predicates = [];\n\n    predicates.check = function(value) {\n      for (var j = 0; j < predicates.length; j++) {\n        if(!predicates[j](value)) {\n          return false;\n        }\n      }\n      return true;\n    };\n\n    if (comparatorType !== 'function') {\n      if (comparatorType === 'boolean' && comparator) {\n        comparator = function(obj, text) {\n          return angular.equals(obj, text);\n        };\n      } else {\n        comparator = function(obj, text) {\n          if (obj && text && typeof obj === 'object' && typeof text === 'object') {\n            for (var objKey in obj) {\n              if (objKey.charAt(0) !== '$' && hasOwnProperty.call(obj, objKey) &&\n                  comparator(obj[objKey], text[objKey])) {\n                return true;\n              }\n            }\n            return false;\n          }\n          text = (''+text).toLowerCase();\n          return (''+obj).toLowerCase().indexOf(text) > -1;\n        };\n      }\n    }\n\n    var search = function(obj, text){\n      if (typeof text == 'string' && text.charAt(0) === '!') {\n        return !search(obj, text.substr(1));\n      }\n      switch (typeof obj) {\n        case \"boolean\":\n        case \"number\":\n        case \"string\":\n          return comparator(obj, text);\n        case \"object\":\n          switch (typeof text) {\n            case \"object\":\n              return comparator(obj, text);\n            default:\n              for ( var objKey in obj) {\n                if (objKey.charAt(0) !== '$' && search(obj[objKey], text)) {\n                  return true;\n                }\n              }\n              break;\n          }\n          return false;\n        case \"array\":\n          for ( var i = 0; i < obj.length; i++) {\n            if (search(obj[i], text)) {\n              return true;\n            }\n          }\n          return false;\n        default:\n          return false;\n      }\n    };\n    switch (typeof expression) {\n      case \"boolean\":\n      case \"number\":\n      case \"string\":\n        // Set up expression object and fall through\n        expression = {$:expression};\n        // jshint -W086\n      case \"object\":\n        // jshint +W086\n        for (var key in expression) {\n          (function(path) {\n            if (typeof expression[path] == 'undefined') return;\n            predicates.push(function(value) {\n              return search(path == '$' ? value : (value && value[path]), expression[path]);\n            });\n          })(key);\n        }\n        break;\n      case 'function':\n        predicates.push(expression);\n        break;\n      default:\n        return array;\n    }\n    var filtered = [];\n    for ( var j = 0; j < array.length; j++) {\n      var value = array[j];\n      if (predicates.check(value)) {\n        filtered.push(value);\n      }\n    }\n    return filtered;\n  };\n}\n\n/**\n * @ngdoc filter\n * @name currency\n * @kind function\n *\n * @description\n * Formats a number as a currency (ie $1,234.56). When no currency symbol is provided, default\n * symbol for current locale is used.\n *\n * @param {number} amount Input to filter.\n * @param {string=} symbol Currency symbol or identifier to be displayed.\n * @returns {string} Formatted number.\n *\n *\n * @example\n   <example>\n     <file name=\"index.html\">\n       <script>\n         function Ctrl($scope) {\n           $scope.amount = 1234.56;\n         }\n       </script>\n       <div ng-controller=\"Ctrl\">\n         <input type=\"number\" ng-model=\"amount\"> <br>\n         default currency symbol ($): <span id=\"currency-default\">{{amount | currency}}</span><br>\n         custom currency identifier (USD$): <span>{{amount | currency:\"USD$\"}}</span>\n       </div>\n     </file>\n     <file name=\"protractor.js\" type=\"protractor\">\n       it('should init with 1234.56', function() {\n         expect(element(by.id('currency-default')).getText()).toBe('$1,234.56');\n         expect(element(by.binding('amount | currency:\"USD$\"')).getText()).toBe('USD$1,234.56');\n       });\n       it('should update', function() {\n         if (browser.params.browser == 'safari') {\n           // Safari does not understand the minus key. See\n           // https://github.com/angular/protractor/issues/481\n           return;\n         }\n         element(by.model('amount')).clear();\n         element(by.model('amount')).sendKeys('-1234');\n         expect(element(by.id('currency-default')).getText()).toBe('($1,234.00)');\n         expect(element(by.binding('amount | currency:\"USD$\"')).getText()).toBe('(USD$1,234.00)');\n       });\n     </file>\n   </example>\n */\ncurrencyFilter.$inject = ['$locale'];\nfunction currencyFilter($locale) {\n  var formats = $locale.NUMBER_FORMATS;\n  return function(amount, currencySymbol){\n    if (isUndefined(currencySymbol)) currencySymbol = formats.CURRENCY_SYM;\n    return formatNumber(amount, formats.PATTERNS[1], formats.GROUP_SEP, formats.DECIMAL_SEP, 2).\n                replace(/\\u00A4/g, currencySymbol);\n  };\n}\n\n/**\n * @ngdoc filter\n * @name number\n * @kind function\n *\n * @description\n * Formats a number as text.\n *\n * If the input is not a number an empty string is returned.\n *\n * @param {number|string} number Number to format.\n * @param {(number|string)=} fractionSize Number of decimal places to round the number to.\n * If this is not provided then the fraction size is computed from the current locale's number\n * formatting pattern. In the case of the default locale, it will be 3.\n * @returns {string} Number rounded to decimalPlaces and places a “,” after each third digit.\n *\n * @example\n   <example>\n     <file name=\"index.html\">\n       <script>\n         function Ctrl($scope) {\n           $scope.val = 1234.56789;\n         }\n       </script>\n       <div ng-controller=\"Ctrl\">\n         Enter number: <input ng-model='val'><br>\n         Default formatting: <span id='number-default'>{{val | number}}</span><br>\n         No fractions: <span>{{val | number:0}}</span><br>\n         Negative number: <span>{{-val | number:4}}</span>\n       </div>\n     </file>\n     <file name=\"protractor.js\" type=\"protractor\">\n       it('should format numbers', function() {\n         expect(element(by.id('number-default')).getText()).toBe('1,234.568');\n         expect(element(by.binding('val | number:0')).getText()).toBe('1,235');\n         expect(element(by.binding('-val | number:4')).getText()).toBe('-1,234.5679');\n       });\n\n       it('should update', function() {\n         element(by.model('val')).clear();\n         element(by.model('val')).sendKeys('3374.333');\n         expect(element(by.id('number-default')).getText()).toBe('3,374.333');\n         expect(element(by.binding('val | number:0')).getText()).toBe('3,374');\n         expect(element(by.binding('-val | number:4')).getText()).toBe('-3,374.3330');\n      });\n     </file>\n   </example>\n */\n\n\nnumberFilter.$inject = ['$locale'];\nfunction numberFilter($locale) {\n  var formats = $locale.NUMBER_FORMATS;\n  return function(number, fractionSize) {\n    return formatNumber(number, formats.PATTERNS[0], formats.GROUP_SEP, formats.DECIMAL_SEP,\n      fractionSize);\n  };\n}\n\nvar DECIMAL_SEP = '.';\nfunction formatNumber(number, pattern, groupSep, decimalSep, fractionSize) {\n  if (number == null || !isFinite(number) || isObject(number)) return '';\n\n  var isNegative = number < 0;\n  number = Math.abs(number);\n  var numStr = number + '',\n      formatedText = '',\n      parts = [];\n\n  var hasExponent = false;\n  if (numStr.indexOf('e') !== -1) {\n    var match = numStr.match(/([\\d\\.]+)e(-?)(\\d+)/);\n    if (match && match[2] == '-' && match[3] > fractionSize + 1) {\n      numStr = '0';\n    } else {\n      formatedText = numStr;\n      hasExponent = true;\n    }\n  }\n\n  if (!hasExponent) {\n    var fractionLen = (numStr.split(DECIMAL_SEP)[1] || '').length;\n\n    // determine fractionSize if it is not specified\n    if (isUndefined(fractionSize)) {\n      fractionSize = Math.min(Math.max(pattern.minFrac, fractionLen), pattern.maxFrac);\n    }\n\n    var pow = Math.pow(10, fractionSize + 1);\n    number = Math.floor(number * pow + 5) / pow;\n    var fraction = ('' + number).split(DECIMAL_SEP);\n    var whole = fraction[0];\n    fraction = fraction[1] || '';\n\n    var i, pos = 0,\n        lgroup = pattern.lgSize,\n        group = pattern.gSize;\n\n    if (whole.length >= (lgroup + group)) {\n      pos = whole.length - lgroup;\n      for (i = 0; i < pos; i++) {\n        if ((pos - i)%group === 0 && i !== 0) {\n          formatedText += groupSep;\n        }\n        formatedText += whole.charAt(i);\n      }\n    }\n\n    for (i = pos; i < whole.length; i++) {\n      if ((whole.length - i)%lgroup === 0 && i !== 0) {\n        formatedText += groupSep;\n      }\n      formatedText += whole.charAt(i);\n    }\n\n    // format fraction part.\n    while(fraction.length < fractionSize) {\n      fraction += '0';\n    }\n\n    if (fractionSize && fractionSize !== \"0\") formatedText += decimalSep + fraction.substr(0, fractionSize);\n  } else {\n\n    if (fractionSize > 0 && number > -1 && number < 1) {\n      formatedText = number.toFixed(fractionSize);\n    }\n  }\n\n  parts.push(isNegative ? pattern.negPre : pattern.posPre);\n  parts.push(formatedText);\n  parts.push(isNegative ? pattern.negSuf : pattern.posSuf);\n  return parts.join('');\n}\n\nfunction padNumber(num, digits, trim) {\n  var neg = '';\n  if (num < 0) {\n    neg =  '-';\n    num = -num;\n  }\n  num = '' + num;\n  while(num.length < digits) num = '0' + num;\n  if (trim)\n    num = num.substr(num.length - digits);\n  return neg + num;\n}\n\n\nfunction dateGetter(name, size, offset, trim) {\n  offset = offset || 0;\n  return function(date) {\n    var value = date['get' + name]();\n    if (offset > 0 || value > -offset)\n      value += offset;\n    if (value === 0 && offset == -12 ) value = 12;\n    return padNumber(value, size, trim);\n  };\n}\n\nfunction dateStrGetter(name, shortForm) {\n  return function(date, formats) {\n    var value = date['get' + name]();\n    var get = uppercase(shortForm ? ('SHORT' + name) : name);\n\n    return formats[get][value];\n  };\n}\n\nfunction timeZoneGetter(date) {\n  var zone = -1 * date.getTimezoneOffset();\n  var paddedZone = (zone >= 0) ? \"+\" : \"\";\n\n  paddedZone += padNumber(Math[zone > 0 ? 'floor' : 'ceil'](zone / 60), 2) +\n                padNumber(Math.abs(zone % 60), 2);\n\n  return paddedZone;\n}\n\nfunction ampmGetter(date, formats) {\n  return date.getHours() < 12 ? formats.AMPMS[0] : formats.AMPMS[1];\n}\n\nvar DATE_FORMATS = {\n  yyyy: dateGetter('FullYear', 4),\n    yy: dateGetter('FullYear', 2, 0, true),\n     y: dateGetter('FullYear', 1),\n  MMMM: dateStrGetter('Month'),\n   MMM: dateStrGetter('Month', true),\n    MM: dateGetter('Month', 2, 1),\n     M: dateGetter('Month', 1, 1),\n    dd: dateGetter('Date', 2),\n     d: dateGetter('Date', 1),\n    HH: dateGetter('Hours', 2),\n     H: dateGetter('Hours', 1),\n    hh: dateGetter('Hours', 2, -12),\n     h: dateGetter('Hours', 1, -12),\n    mm: dateGetter('Minutes', 2),\n     m: dateGetter('Minutes', 1),\n    ss: dateGetter('Seconds', 2),\n     s: dateGetter('Seconds', 1),\n     // while ISO 8601 requires fractions to be prefixed with `.` or `,`\n     // we can be just safely rely on using `sss` since we currently don't support single or two digit fractions\n   sss: dateGetter('Milliseconds', 3),\n  EEEE: dateStrGetter('Day'),\n   EEE: dateStrGetter('Day', true),\n     a: ampmGetter,\n     Z: timeZoneGetter\n};\n\nvar DATE_FORMATS_SPLIT = /((?:[^yMdHhmsaZE']+)|(?:'(?:[^']|'')*')|(?:E+|y+|M+|d+|H+|h+|m+|s+|a|Z))(.*)/,\n    NUMBER_STRING = /^\\-?\\d+$/;\n\n/**\n * @ngdoc filter\n * @name date\n * @kind function\n *\n * @description\n *   Formats `date` to a string based on the requested `format`.\n *\n *   `format` string can be composed of the following elements:\n *\n *   * `'yyyy'`: 4 digit representation of year (e.g. AD 1 => 0001, AD 2010 => 2010)\n *   * `'yy'`: 2 digit representation of year, padded (00-99). (e.g. AD 2001 => 01, AD 2010 => 10)\n *   * `'y'`: 1 digit representation of year, e.g. (AD 1 => 1, AD 199 => 199)\n *   * `'MMMM'`: Month in year (January-December)\n *   * `'MMM'`: Month in year (Jan-Dec)\n *   * `'MM'`: Month in year, padded (01-12)\n *   * `'M'`: Month in year (1-12)\n *   * `'dd'`: Day in month, padded (01-31)\n *   * `'d'`: Day in month (1-31)\n *   * `'EEEE'`: Day in Week,(Sunday-Saturday)\n *   * `'EEE'`: Day in Week, (Sun-Sat)\n *   * `'HH'`: Hour in day, padded (00-23)\n *   * `'H'`: Hour in day (0-23)\n *   * `'hh'`: Hour in am/pm, padded (01-12)\n *   * `'h'`: Hour in am/pm, (1-12)\n *   * `'mm'`: Minute in hour, padded (00-59)\n *   * `'m'`: Minute in hour (0-59)\n *   * `'ss'`: Second in minute, padded (00-59)\n *   * `'s'`: Second in minute (0-59)\n *   * `'.sss' or ',sss'`: Millisecond in second, padded (000-999)\n *   * `'a'`: am/pm marker\n *   * `'Z'`: 4 digit (+sign) representation of the timezone offset (-1200-+1200)\n *\n *   `format` string can also be one of the following predefined\n *   {@link guide/i18n localizable formats}:\n *\n *   * `'medium'`: equivalent to `'MMM d, y h:mm:ss a'` for en_US locale\n *     (e.g. Sep 3, 2010 12:05:08 pm)\n *   * `'short'`: equivalent to `'M/d/yy h:mm a'` for en_US  locale (e.g. 9/3/10 12:05 pm)\n *   * `'fullDate'`: equivalent to `'EEEE, MMMM d,y'` for en_US  locale\n *     (e.g. Friday, September 3, 2010)\n *   * `'longDate'`: equivalent to `'MMMM d, y'` for en_US  locale (e.g. September 3, 2010)\n *   * `'mediumDate'`: equivalent to `'MMM d, y'` for en_US  locale (e.g. Sep 3, 2010)\n *   * `'shortDate'`: equivalent to `'M/d/yy'` for en_US locale (e.g. 9/3/10)\n *   * `'mediumTime'`: equivalent to `'h:mm:ss a'` for en_US locale (e.g. 12:05:08 pm)\n *   * `'shortTime'`: equivalent to `'h:mm a'` for en_US locale (e.g. 12:05 pm)\n *\n *   `format` string can contain literal values. These need to be quoted with single quotes (e.g.\n *   `\"h 'in the morning'\"`). In order to output single quote, use two single quotes in a sequence\n *   (e.g. `\"h 'o''clock'\"`).\n *\n * @param {(Date|number|string)} date Date to format either as Date object, milliseconds (string or\n *    number) or various ISO 8601 datetime string formats (e.g. yyyy-MM-ddTHH:mm:ss.SSSZ and its\n *    shorter versions like yyyy-MM-ddTHH:mmZ, yyyy-MM-dd or yyyyMMddTHHmmssZ). If no timezone is\n *    specified in the string input, the time is considered to be in the local timezone.\n * @param {string=} format Formatting rules (see Description). If not specified,\n *    `mediumDate` is used.\n * @returns {string} Formatted string or the input if input is not recognized as date/millis.\n *\n * @example\n   <example>\n     <file name=\"index.html\">\n       <span ng-non-bindable>{{1288323623006 | date:'medium'}}</span>:\n           <span>{{1288323623006 | date:'medium'}}</span><br>\n       <span ng-non-bindable>{{1288323623006 | date:'yyyy-MM-dd HH:mm:ss Z'}}</span>:\n          <span>{{1288323623006 | date:'yyyy-MM-dd HH:mm:ss Z'}}</span><br>\n       <span ng-non-bindable>{{1288323623006 | date:'MM/dd/yyyy @ h:mma'}}</span>:\n          <span>{{'1288323623006' | date:'MM/dd/yyyy @ h:mma'}}</span><br>\n     </file>\n     <file name=\"protractor.js\" type=\"protractor\">\n       it('should format date', function() {\n         expect(element(by.binding(\"1288323623006 | date:'medium'\")).getText()).\n            toMatch(/Oct 2\\d, 2010 \\d{1,2}:\\d{2}:\\d{2} (AM|PM)/);\n         expect(element(by.binding(\"1288323623006 | date:'yyyy-MM-dd HH:mm:ss Z'\")).getText()).\n            toMatch(/2010\\-10\\-2\\d \\d{2}:\\d{2}:\\d{2} (\\-|\\+)?\\d{4}/);\n         expect(element(by.binding(\"'1288323623006' | date:'MM/dd/yyyy @ h:mma'\")).getText()).\n            toMatch(/10\\/2\\d\\/2010 @ \\d{1,2}:\\d{2}(AM|PM)/);\n       });\n     </file>\n   </example>\n */\ndateFilter.$inject = ['$locale'];\nfunction dateFilter($locale) {\n\n\n  var R_ISO8601_STR = /^(\\d{4})-?(\\d\\d)-?(\\d\\d)(?:T(\\d\\d)(?::?(\\d\\d)(?::?(\\d\\d)(?:\\.(\\d+))?)?)?(Z|([+-])(\\d\\d):?(\\d\\d))?)?$/;\n                     // 1        2       3         4          5          6          7          8  9     10      11\n  function jsonStringToDate(string) {\n    var match;\n    if (match = string.match(R_ISO8601_STR)) {\n      var date = new Date(0),\n          tzHour = 0,\n          tzMin  = 0,\n          dateSetter = match[8] ? date.setUTCFullYear : date.setFullYear,\n          timeSetter = match[8] ? date.setUTCHours : date.setHours;\n\n      if (match[9]) {\n        tzHour = int(match[9] + match[10]);\n        tzMin = int(match[9] + match[11]);\n      }\n      dateSetter.call(date, int(match[1]), int(match[2]) - 1, int(match[3]));\n      var h = int(match[4]||0) - tzHour;\n      var m = int(match[5]||0) - tzMin;\n      var s = int(match[6]||0);\n      var ms = Math.round(parseFloat('0.' + (match[7]||0)) * 1000);\n      timeSetter.call(date, h, m, s, ms);\n      return date;\n    }\n    return string;\n  }\n\n\n  return function(date, format) {\n    var text = '',\n        parts = [],\n        fn, match;\n\n    format = format || 'mediumDate';\n    format = $locale.DATETIME_FORMATS[format] || format;\n    if (isString(date)) {\n      if (NUMBER_STRING.test(date)) {\n        date = int(date);\n      } else {\n        date = jsonStringToDate(date);\n      }\n    }\n\n    if (isNumber(date)) {\n      date = new Date(date);\n    }\n\n    if (!isDate(date)) {\n      return date;\n    }\n\n    while(format) {\n      match = DATE_FORMATS_SPLIT.exec(format);\n      if (match) {\n        parts = concat(parts, match, 1);\n        format = parts.pop();\n      } else {\n        parts.push(format);\n        format = null;\n      }\n    }\n\n    forEach(parts, function(value){\n      fn = DATE_FORMATS[value];\n      text += fn ? fn(date, $locale.DATETIME_FORMATS)\n                 : value.replace(/(^'|'$)/g, '').replace(/''/g, \"'\");\n    });\n\n    return text;\n  };\n}\n\n\n/**\n * @ngdoc filter\n * @name json\n * @kind function\n *\n * @description\n *   Allows you to convert a JavaScript object into JSON string.\n *\n *   This filter is mostly useful for debugging. When using the double curly {{value}} notation\n *   the binding is automatically converted to JSON.\n *\n * @param {*} object Any JavaScript object (including arrays and primitive types) to filter.\n * @returns {string} JSON string.\n *\n *\n * @example\n   <example>\n     <file name=\"index.html\">\n       <pre>{{ {'name':'value'} | json }}</pre>\n     </file>\n     <file name=\"protractor.js\" type=\"protractor\">\n       it('should jsonify filtered objects', function() {\n         expect(element(by.binding(\"{'name':'value'}\")).getText()).toMatch(/\\{\\n  \"name\": ?\"value\"\\n}/);\n       });\n     </file>\n   </example>\n *\n */\nfunction jsonFilter() {\n  return function(object) {\n    return toJson(object, true);\n  };\n}\n\n\n/**\n * @ngdoc filter\n * @name lowercase\n * @kind function\n * @description\n * Converts string to lowercase.\n * @see angular.lowercase\n */\nvar lowercaseFilter = valueFn(lowercase);\n\n\n/**\n * @ngdoc filter\n * @name uppercase\n * @kind function\n * @description\n * Converts string to uppercase.\n * @see angular.uppercase\n */\nvar uppercaseFilter = valueFn(uppercase);\n\n/**\n * @ngdoc filter\n * @name limitTo\n * @kind function\n *\n * @description\n * Creates a new array or string containing only a specified number of elements. The elements\n * are taken from either the beginning or the end of the source array or string, as specified by\n * the value and sign (positive or negative) of `limit`.\n *\n * @param {Array|string} input Source array or string to be limited.\n * @param {string|number} limit The length of the returned array or string. If the `limit` number\n *     is positive, `limit` number of items from the beginning of the source array/string are copied.\n *     If the number is negative, `limit` number  of items from the end of the source array/string\n *     are copied. The `limit` will be trimmed if it exceeds `array.length`\n * @returns {Array|string} A new sub-array or substring of length `limit` or less if input array\n *     had less than `limit` elements.\n *\n * @example\n   <example>\n     <file name=\"index.html\">\n       <script>\n         function Ctrl($scope) {\n           $scope.numbers = [1,2,3,4,5,6,7,8,9];\n           $scope.letters = \"abcdefghi\";\n           $scope.numLimit = 3;\n           $scope.letterLimit = 3;\n         }\n       </script>\n       <div ng-controller=\"Ctrl\">\n         Limit {{numbers}} to: <input type=\"integer\" ng-model=\"numLimit\">\n         <p>Output numbers: {{ numbers | limitTo:numLimit }}</p>\n         Limit {{letters}} to: <input type=\"integer\" ng-model=\"letterLimit\">\n         <p>Output letters: {{ letters | limitTo:letterLimit }}</p>\n       </div>\n     </file>\n     <file name=\"protractor.js\" type=\"protractor\">\n       var numLimitInput = element(by.model('numLimit'));\n       var letterLimitInput = element(by.model('letterLimit'));\n       var limitedNumbers = element(by.binding('numbers | limitTo:numLimit'));\n       var limitedLetters = element(by.binding('letters | limitTo:letterLimit'));\n\n       it('should limit the number array to first three items', function() {\n         expect(numLimitInput.getAttribute('value')).toBe('3');\n         expect(letterLimitInput.getAttribute('value')).toBe('3');\n         expect(limitedNumbers.getText()).toEqual('Output numbers: [1,2,3]');\n         expect(limitedLetters.getText()).toEqual('Output letters: abc');\n       });\n\n       it('should update the output when -3 is entered', function() {\n         numLimitInput.clear();\n         numLimitInput.sendKeys('-3');\n         letterLimitInput.clear();\n         letterLimitInput.sendKeys('-3');\n         expect(limitedNumbers.getText()).toEqual('Output numbers: [7,8,9]');\n         expect(limitedLetters.getText()).toEqual('Output letters: ghi');\n       });\n\n       it('should not exceed the maximum size of input array', function() {\n         numLimitInput.clear();\n         numLimitInput.sendKeys('100');\n         letterLimitInput.clear();\n         letterLimitInput.sendKeys('100');\n         expect(limitedNumbers.getText()).toEqual('Output numbers: [1,2,3,4,5,6,7,8,9]');\n         expect(limitedLetters.getText()).toEqual('Output letters: abcdefghi');\n       });\n     </file>\n   </example>\n */\nfunction limitToFilter(){\n  return function(input, limit) {\n    if (!isArray(input) && !isString(input)) return input;\n\n    if (Math.abs(Number(limit)) === Infinity) {\n      limit = Number(limit);\n    } else {\n      limit = int(limit);\n    }\n\n    if (isString(input)) {\n      //NaN check on limit\n      if (limit) {\n        return limit >= 0 ? input.slice(0, limit) : input.slice(limit, input.length);\n      } else {\n        return \"\";\n      }\n    }\n\n    var out = [],\n      i, n;\n\n    // if abs(limit) exceeds maximum length, trim it\n    if (limit > input.length)\n      limit = input.length;\n    else if (limit < -input.length)\n      limit = -input.length;\n\n    if (limit > 0) {\n      i = 0;\n      n = limit;\n    } else {\n      i = input.length + limit;\n      n = input.length;\n    }\n\n    for (; i<n; i++) {\n      out.push(input[i]);\n    }\n\n    return out;\n  };\n}\n\n/**\n * @ngdoc filter\n * @name orderBy\n * @kind function\n *\n * @description\n * Orders a specified `array` by the `expression` predicate. It is ordered alphabetically\n * for strings and numerically for numbers. Note: if you notice numbers are not being sorted\n * correctly, make sure they are actually being saved as numbers and not strings.\n *\n * @param {Array} array The array to sort.\n * @param {function(*)|string|Array.<(function(*)|string)>} expression A predicate to be\n *    used by the comparator to determine the order of elements.\n *\n *    Can be one of:\n *\n *    - `function`: Getter function. The result of this function will be sorted using the\n *      `<`, `=`, `>` operator.\n *    - `string`: An Angular expression which evaluates to an object to order by, such as 'name'\n *      to sort by a property called 'name'. Optionally prefixed with `+` or `-` to control\n *      ascending or descending sort order (for example, +name or -name).\n *    - `Array`: An array of function or string predicates. The first predicate in the array\n *      is used for sorting, but when two items are equivalent, the next predicate is used.\n *\n * @param {boolean=} reverse Reverse the order of the array.\n * @returns {Array} Sorted copy of the source array.\n *\n * @example\n   <example>\n     <file name=\"index.html\">\n       <script>\n         function Ctrl($scope) {\n           $scope.friends =\n               [{name:'John', phone:'555-1212', age:10},\n                {name:'Mary', phone:'555-9876', age:19},\n                {name:'Mike', phone:'555-4321', age:21},\n                {name:'Adam', phone:'555-5678', age:35},\n                {name:'Julie', phone:'555-8765', age:29}]\n           $scope.predicate = '-age';\n         }\n       </script>\n       <div ng-controller=\"Ctrl\">\n         <pre>Sorting predicate = {{predicate}}; reverse = {{reverse}}</pre>\n         <hr/>\n         [ <a href=\"\" ng-click=\"predicate=''\">unsorted</a> ]\n         <table class=\"friend\">\n           <tr>\n             <th><a href=\"\" ng-click=\"predicate = 'name'; reverse=false\">Name</a>\n                 (<a href=\"\" ng-click=\"predicate = '-name'; reverse=false\">^</a>)</th>\n             <th><a href=\"\" ng-click=\"predicate = 'phone'; reverse=!reverse\">Phone Number</a></th>\n             <th><a href=\"\" ng-click=\"predicate = 'age'; reverse=!reverse\">Age</a></th>\n           </tr>\n           <tr ng-repeat=\"friend in friends | orderBy:predicate:reverse\">\n             <td>{{friend.name}}</td>\n             <td>{{friend.phone}}</td>\n             <td>{{friend.age}}</td>\n           </tr>\n         </table>\n       </div>\n     </file>\n   </example>\n *\n * It's also possible to call the orderBy filter manually, by injecting `$filter`, retrieving the\n * filter routine with `$filter('orderBy')`, and calling the returned filter routine with the\n * desired parameters.\n *\n * Example:\n *\n * @example\n  <example>\n    <file name=\"index.html\">\n      <div ng-controller=\"Ctrl\">\n        <table class=\"friend\">\n          <tr>\n            <th><a href=\"\" ng-click=\"reverse=false;order('name', false)\">Name</a>\n              (<a href=\"\" ng-click=\"order('-name',false)\">^</a>)</th>\n            <th><a href=\"\" ng-click=\"reverse=!reverse;order('phone', reverse)\">Phone Number</a></th>\n            <th><a href=\"\" ng-click=\"reverse=!reverse;order('age',reverse)\">Age</a></th>\n          </tr>\n          <tr ng-repeat=\"friend in friends\">\n            <td>{{friend.name}}</td>\n            <td>{{friend.phone}}</td>\n            <td>{{friend.age}}</td>\n          </tr>\n        </table>\n      </div>\n    </file>\n\n    <file name=\"script.js\">\n      function Ctrl($scope, $filter) {\n        var orderBy = $filter('orderBy');\n        $scope.friends = [\n          { name: 'John',    phone: '555-1212',    age: 10 },\n          { name: 'Mary',    phone: '555-9876',    age: 19 },\n          { name: 'Mike',    phone: '555-4321',    age: 21 },\n          { name: 'Adam',    phone: '555-5678',    age: 35 },\n          { name: 'Julie',   phone: '555-8765',    age: 29 }\n        ];\n\n        $scope.order = function(predicate, reverse) {\n          $scope.friends = orderBy($scope.friends, predicate, reverse);\n        };\n        $scope.order('-age',false);\n      }\n    </file>\n</example>\n */\norderByFilter.$inject = ['$parse'];\nfunction orderByFilter($parse){\n  return function(array, sortPredicate, reverseOrder) {\n    if (!isArray(array)) return array;\n    if (!sortPredicate) return array;\n    sortPredicate = isArray(sortPredicate) ? sortPredicate: [sortPredicate];\n    sortPredicate = map(sortPredicate, function(predicate){\n      var descending = false, get = predicate || identity;\n      if (isString(predicate)) {\n        if ((predicate.charAt(0) == '+' || predicate.charAt(0) == '-')) {\n          descending = predicate.charAt(0) == '-';\n          predicate = predicate.substring(1);\n        }\n        get = $parse(predicate);\n        if (get.constant) {\n          var key = get();\n          return reverseComparator(function(a,b) {\n            return compare(a[key], b[key]);\n          }, descending);\n        }\n      }\n      return reverseComparator(function(a,b){\n        return compare(get(a),get(b));\n      }, descending);\n    });\n    var arrayCopy = [];\n    for ( var i = 0; i < array.length; i++) { arrayCopy.push(array[i]); }\n    return arrayCopy.sort(reverseComparator(comparator, reverseOrder));\n\n    function comparator(o1, o2){\n      for ( var i = 0; i < sortPredicate.length; i++) {\n        var comp = sortPredicate[i](o1, o2);\n        if (comp !== 0) return comp;\n      }\n      return 0;\n    }\n    function reverseComparator(comp, descending) {\n      return toBoolean(descending)\n          ? function(a,b){return comp(b,a);}\n          : comp;\n    }\n    function compare(v1, v2){\n      var t1 = typeof v1;\n      var t2 = typeof v2;\n      if (t1 == t2) {\n        if (t1 == \"string\") {\n           v1 = v1.toLowerCase();\n           v2 = v2.toLowerCase();\n        }\n        if (v1 === v2) return 0;\n        return v1 < v2 ? -1 : 1;\n      } else {\n        return t1 < t2 ? -1 : 1;\n      }\n    }\n  };\n}\n\nfunction ngDirective(directive) {\n  if (isFunction(directive)) {\n    directive = {\n      link: directive\n    };\n  }\n  directive.restrict = directive.restrict || 'AC';\n  return valueFn(directive);\n}\n\n/**\n * @ngdoc directive\n * @name a\n * @restrict E\n *\n * @description\n * Modifies the default behavior of the html A tag so that the default action is prevented when\n * the href attribute is empty.\n *\n * This change permits the easy creation of action links with the `ngClick` directive\n * without changing the location or causing page reloads, e.g.:\n * `<a href=\"\" ng-click=\"list.addItem()\">Add Item</a>`\n */\nvar htmlAnchorDirective = valueFn({\n  restrict: 'E',\n  compile: function(element, attr) {\n\n    if (msie <= 8) {\n\n      // turn <a href ng-click=\"..\">link</a> into a stylable link in IE\n      // but only if it doesn't have name attribute, in which case it's an anchor\n      if (!attr.href && !attr.name) {\n        attr.$set('href', '');\n      }\n\n      // add a comment node to anchors to workaround IE bug that causes element content to be reset\n      // to new attribute content if attribute is updated with value containing @ and element also\n      // contains value with @\n      // see issue #1949\n      element.append(document.createComment('IE fix'));\n    }\n\n    if (!attr.href && !attr.xlinkHref && !attr.name) {\n      return function(scope, element) {\n        // SVGAElement does not use the href attribute, but rather the 'xlinkHref' attribute.\n        var href = toString.call(element.prop('href')) === '[object SVGAnimatedString]' ?\n                   'xlink:href' : 'href';\n        element.on('click', function(event){\n          // if we have no href url, then don't navigate anywhere.\n          if (!element.attr(href)) {\n            event.preventDefault();\n          }\n        });\n      };\n    }\n  }\n});\n\n/**\n * @ngdoc directive\n * @name ngHref\n * @restrict A\n * @priority 99\n *\n * @description\n * Using Angular markup like `{{hash}}` in an href attribute will\n * make the link go to the wrong URL if the user clicks it before\n * Angular has a chance to replace the `{{hash}}` markup with its\n * value. Until Angular replaces the markup the link will be broken\n * and will most likely return a 404 error.\n *\n * The `ngHref` directive solves this problem.\n *\n * The wrong way to write it:\n * ```html\n * <a href=\"http://www.gravatar.com/avatar/{{hash}}\"/>\n * ```\n *\n * The correct way to write it:\n * ```html\n * <a ng-href=\"http://www.gravatar.com/avatar/{{hash}}\"/>\n * ```\n *\n * @element A\n * @param {template} ngHref any string which can contain `{{}}` markup.\n *\n * @example\n * This example shows various combinations of `href`, `ng-href` and `ng-click` attributes\n * in links and their different behaviors:\n    <example>\n      <file name=\"index.html\">\n        <input ng-model=\"value\" /><br />\n        <a id=\"link-1\" href ng-click=\"value = 1\">link 1</a> (link, don't reload)<br />\n        <a id=\"link-2\" href=\"\" ng-click=\"value = 2\">link 2</a> (link, don't reload)<br />\n        <a id=\"link-3\" ng-href=\"/{{'123'}}\">link 3</a> (link, reload!)<br />\n        <a id=\"link-4\" href=\"\" name=\"xx\" ng-click=\"value = 4\">anchor</a> (link, don't reload)<br />\n        <a id=\"link-5\" name=\"xxx\" ng-click=\"value = 5\">anchor</a> (no link)<br />\n        <a id=\"link-6\" ng-href=\"{{value}}\">link</a> (link, change location)\n      </file>\n      <file name=\"protractor.js\" type=\"protractor\">\n        it('should execute ng-click but not reload when href without value', function() {\n          element(by.id('link-1')).click();\n          expect(element(by.model('value')).getAttribute('value')).toEqual('1');\n          expect(element(by.id('link-1')).getAttribute('href')).toBe('');\n        });\n\n        it('should execute ng-click but not reload when href empty string', function() {\n          element(by.id('link-2')).click();\n          expect(element(by.model('value')).getAttribute('value')).toEqual('2');\n          expect(element(by.id('link-2')).getAttribute('href')).toBe('');\n        });\n\n        it('should execute ng-click and change url when ng-href specified', function() {\n          expect(element(by.id('link-3')).getAttribute('href')).toMatch(/\\/123$/);\n\n          element(by.id('link-3')).click();\n\n          // At this point, we navigate away from an Angular page, so we need\n          // to use browser.driver to get the base webdriver.\n\n          browser.wait(function() {\n            return browser.driver.getCurrentUrl().then(function(url) {\n              return url.match(/\\/123$/);\n            });\n          }, 1000, 'page should navigate to /123');\n        });\n\n        xit('should execute ng-click but not reload when href empty string and name specified', function() {\n          element(by.id('link-4')).click();\n          expect(element(by.model('value')).getAttribute('value')).toEqual('4');\n          expect(element(by.id('link-4')).getAttribute('href')).toBe('');\n        });\n\n        it('should execute ng-click but not reload when no href but name specified', function() {\n          element(by.id('link-5')).click();\n          expect(element(by.model('value')).getAttribute('value')).toEqual('5');\n          expect(element(by.id('link-5')).getAttribute('href')).toBe(null);\n        });\n\n        it('should only change url when only ng-href', function() {\n          element(by.model('value')).clear();\n          element(by.model('value')).sendKeys('6');\n          expect(element(by.id('link-6')).getAttribute('href')).toMatch(/\\/6$/);\n\n          element(by.id('link-6')).click();\n\n          // At this point, we navigate away from an Angular page, so we need\n          // to use browser.driver to get the base webdriver.\n          browser.wait(function() {\n            return browser.driver.getCurrentUrl().then(function(url) {\n              return url.match(/\\/6$/);\n            });\n          }, 1000, 'page should navigate to /6');\n        });\n      </file>\n    </example>\n */\n\n/**\n * @ngdoc directive\n * @name ngSrc\n * @restrict A\n * @priority 99\n *\n * @description\n * Using Angular markup like `{{hash}}` in a `src` attribute doesn't\n * work right: The browser will fetch from the URL with the literal\n * text `{{hash}}` until Angular replaces the expression inside\n * `{{hash}}`. The `ngSrc` directive solves this problem.\n *\n * The buggy way to write it:\n * ```html\n * <img src=\"http://www.gravatar.com/avatar/{{hash}}\"/>\n * ```\n *\n * The correct way to write it:\n * ```html\n * <img ng-src=\"http://www.gravatar.com/avatar/{{hash}}\"/>\n * ```\n *\n * @element IMG\n * @param {template} ngSrc any string which can contain `{{}}` markup.\n */\n\n/**\n * @ngdoc directive\n * @name ngSrcset\n * @restrict A\n * @priority 99\n *\n * @description\n * Using Angular markup like `{{hash}}` in a `srcset` attribute doesn't\n * work right: The browser will fetch from the URL with the literal\n * text `{{hash}}` until Angular replaces the expression inside\n * `{{hash}}`. The `ngSrcset` directive solves this problem.\n *\n * The buggy way to write it:\n * ```html\n * <img srcset=\"http://www.gravatar.com/avatar/{{hash}} 2x\"/>\n * ```\n *\n * The correct way to write it:\n * ```html\n * <img ng-srcset=\"http://www.gravatar.com/avatar/{{hash}} 2x\"/>\n * ```\n *\n * @element IMG\n * @param {template} ngSrcset any string which can contain `{{}}` markup.\n */\n\n/**\n * @ngdoc directive\n * @name ngDisabled\n * @restrict A\n * @priority 100\n *\n * @description\n *\n * The following markup will make the button enabled on Chrome/Firefox but not on IE8 and older IEs:\n * ```html\n * <div ng-init=\"scope = { isDisabled: false }\">\n *  <button disabled=\"{{scope.isDisabled}}\">Disabled</button>\n * </div>\n * ```\n *\n * The HTML specification does not require browsers to preserve the values of boolean attributes\n * such as disabled. (Their presence means true and their absence means false.)\n * If we put an Angular interpolation expression into such an attribute then the\n * binding information would be lost when the browser removes the attribute.\n * The `ngDisabled` directive solves this problem for the `disabled` attribute.\n * This complementary directive is not removed by the browser and so provides\n * a permanent reliable place to store the binding information.\n *\n * @example\n    <example>\n      <file name=\"index.html\">\n        Click me to toggle: <input type=\"checkbox\" ng-model=\"checked\"><br/>\n        <button ng-model=\"button\" ng-disabled=\"checked\">Button</button>\n      </file>\n      <file name=\"protractor.js\" type=\"protractor\">\n        it('should toggle button', function() {\n          expect(element(by.css('button')).getAttribute('disabled')).toBeFalsy();\n          element(by.model('checked')).click();\n          expect(element(by.css('button')).getAttribute('disabled')).toBeTruthy();\n        });\n      </file>\n    </example>\n *\n * @element INPUT\n * @param {expression} ngDisabled If the {@link guide/expression expression} is truthy,\n *     then special attribute \"disabled\" will be set on the element\n */\n\n\n/**\n * @ngdoc directive\n * @name ngChecked\n * @restrict A\n * @priority 100\n *\n * @description\n * The HTML specification does not require browsers to preserve the values of boolean attributes\n * such as checked. (Their presence means true and their absence means false.)\n * If we put an Angular interpolation expression into such an attribute then the\n * binding information would be lost when the browser removes the attribute.\n * The `ngChecked` directive solves this problem for the `checked` attribute.\n * This complementary directive is not removed by the browser and so provides\n * a permanent reliable place to store the binding information.\n * @example\n    <example>\n      <file name=\"index.html\">\n        Check me to check both: <input type=\"checkbox\" ng-model=\"master\"><br/>\n        <input id=\"checkSlave\" type=\"checkbox\" ng-checked=\"master\">\n      </file>\n      <file name=\"protractor.js\" type=\"protractor\">\n        it('should check both checkBoxes', function() {\n          expect(element(by.id('checkSlave')).getAttribute('checked')).toBeFalsy();\n          element(by.model('master')).click();\n          expect(element(by.id('checkSlave')).getAttribute('checked')).toBeTruthy();\n        });\n      </file>\n    </example>\n *\n * @element INPUT\n * @param {expression} ngChecked If the {@link guide/expression expression} is truthy,\n *     then special attribute \"checked\" will be set on the element\n */\n\n\n/**\n * @ngdoc directive\n * @name ngReadonly\n * @restrict A\n * @priority 100\n *\n * @description\n * The HTML specification does not require browsers to preserve the values of boolean attributes\n * such as readonly. (Their presence means true and their absence means false.)\n * If we put an Angular interpolation expression into such an attribute then the\n * binding information would be lost when the browser removes the attribute.\n * The `ngReadonly` directive solves this problem for the `readonly` attribute.\n * This complementary directive is not removed by the browser and so provides\n * a permanent reliable place to store the binding information.\n * @example\n    <example>\n      <file name=\"index.html\">\n        Check me to make text readonly: <input type=\"checkbox\" ng-model=\"checked\"><br/>\n        <input type=\"text\" ng-readonly=\"checked\" value=\"I'm Angular\"/>\n      </file>\n      <file name=\"protractor.js\" type=\"protractor\">\n        it('should toggle readonly attr', function() {\n          expect(element(by.css('[type=\"text\"]')).getAttribute('readonly')).toBeFalsy();\n          element(by.model('checked')).click();\n          expect(element(by.css('[type=\"text\"]')).getAttribute('readonly')).toBeTruthy();\n        });\n      </file>\n    </example>\n *\n * @element INPUT\n * @param {expression} ngReadonly If the {@link guide/expression expression} is truthy,\n *     then special attribute \"readonly\" will be set on the element\n */\n\n\n/**\n * @ngdoc directive\n * @name ngSelected\n * @restrict A\n * @priority 100\n *\n * @description\n * The HTML specification does not require browsers to preserve the values of boolean attributes\n * such as selected. (Their presence means true and their absence means false.)\n * If we put an Angular interpolation expression into such an attribute then the\n * binding information would be lost when the browser removes the attribute.\n * The `ngSelected` directive solves this problem for the `selected` attribute.\n * This complementary directive is not removed by the browser and so provides\n * a permanent reliable place to store the binding information.\n *\n * @example\n    <example>\n      <file name=\"index.html\">\n        Check me to select: <input type=\"checkbox\" ng-model=\"selected\"><br/>\n        <select>\n          <option>Hello!</option>\n          <option id=\"greet\" ng-selected=\"selected\">Greetings!</option>\n        </select>\n      </file>\n      <file name=\"protractor.js\" type=\"protractor\">\n        it('should select Greetings!', function() {\n          expect(element(by.id('greet')).getAttribute('selected')).toBeFalsy();\n          element(by.model('selected')).click();\n          expect(element(by.id('greet')).getAttribute('selected')).toBeTruthy();\n        });\n      </file>\n    </example>\n *\n * @element OPTION\n * @param {expression} ngSelected If the {@link guide/expression expression} is truthy,\n *     then special attribute \"selected\" will be set on the element\n */\n\n/**\n * @ngdoc directive\n * @name ngOpen\n * @restrict A\n * @priority 100\n *\n * @description\n * The HTML specification does not require browsers to preserve the values of boolean attributes\n * such as open. (Their presence means true and their absence means false.)\n * If we put an Angular interpolation expression into such an attribute then the\n * binding information would be lost when the browser removes the attribute.\n * The `ngOpen` directive solves this problem for the `open` attribute.\n * This complementary directive is not removed by the browser and so provides\n * a permanent reliable place to store the binding information.\n * @example\n     <example>\n       <file name=\"index.html\">\n         Check me check multiple: <input type=\"checkbox\" ng-model=\"open\"><br/>\n         <details id=\"details\" ng-open=\"open\">\n            <summary>Show/Hide me</summary>\n         </details>\n       </file>\n       <file name=\"protractor.js\" type=\"protractor\">\n         it('should toggle open', function() {\n           expect(element(by.id('details')).getAttribute('open')).toBeFalsy();\n           element(by.model('open')).click();\n           expect(element(by.id('details')).getAttribute('open')).toBeTruthy();\n         });\n       </file>\n     </example>\n *\n * @element DETAILS\n * @param {expression} ngOpen If the {@link guide/expression expression} is truthy,\n *     then special attribute \"open\" will be set on the element\n */\n\nvar ngAttributeAliasDirectives = {};\n\n\n// boolean attrs are evaluated\nforEach(BOOLEAN_ATTR, function(propName, attrName) {\n  // binding to multiple is not supported\n  if (propName == \"multiple\") return;\n\n  var normalized = directiveNormalize('ng-' + attrName);\n  ngAttributeAliasDirectives[normalized] = function() {\n    return {\n      priority: 100,\n      link: function(scope, element, attr) {\n        scope.$watch(attr[normalized], function ngBooleanAttrWatchAction(value) {\n          attr.$set(attrName, !!value);\n        });\n      }\n    };\n  };\n});\n\n\n// ng-src, ng-srcset, ng-href are interpolated\nforEach(['src', 'srcset', 'href'], function(attrName) {\n  var normalized = directiveNormalize('ng-' + attrName);\n  ngAttributeAliasDirectives[normalized] = function() {\n    return {\n      priority: 99, // it needs to run after the attributes are interpolated\n      link: function(scope, element, attr) {\n        var propName = attrName,\n            name = attrName;\n\n        if (attrName === 'href' &&\n            toString.call(element.prop('href')) === '[object SVGAnimatedString]') {\n          name = 'xlinkHref';\n          attr.$attr[name] = 'xlink:href';\n          propName = null;\n        }\n\n        attr.$observe(normalized, function(value) {\n          if (!value)\n             return;\n\n          attr.$set(name, value);\n\n          // on IE, if \"ng:src\" directive declaration is used and \"src\" attribute doesn't exist\n          // then calling element.setAttribute('src', 'foo') doesn't do anything, so we need\n          // to set the property as well to achieve the desired effect.\n          // we use attr[attrName] value since $set can sanitize the url.\n          if (msie && propName) element.prop(propName, attr[name]);\n        });\n      }\n    };\n  };\n});\n\n/* global -nullFormCtrl */\nvar nullFormCtrl = {\n  $addControl: noop,\n  $removeControl: noop,\n  $setValidity: noop,\n  $setDirty: noop,\n  $setPristine: noop\n};\n\n/**\n * @ngdoc type\n * @name form.FormController\n *\n * @property {boolean} $pristine True if user has not interacted with the form yet.\n * @property {boolean} $dirty True if user has already interacted with the form.\n * @property {boolean} $valid True if all of the containing forms and controls are valid.\n * @property {boolean} $invalid True if at least one containing control or form is invalid.\n *\n * @property {Object} $error Is an object hash, containing references to all invalid controls or\n *  forms, where:\n *\n *  - keys are validation tokens (error names),\n *  - values are arrays of controls or forms that are invalid for given error name.\n *\n *\n *  Built-in validation tokens:\n *\n *  - `email`\n *  - `max`\n *  - `maxlength`\n *  - `min`\n *  - `minlength`\n *  - `number`\n *  - `pattern`\n *  - `required`\n *  - `url`\n *\n * @description\n * `FormController` keeps track of all its controls and nested forms as well as the state of them,\n * such as being valid/invalid or dirty/pristine.\n *\n * Each {@link ng.directive:form form} directive creates an instance\n * of `FormController`.\n *\n */\n//asks for $scope to fool the BC controller module\nFormController.$inject = ['$element', '$attrs', '$scope', '$animate'];\nfunction FormController(element, attrs, $scope, $animate) {\n  var form = this,\n      parentForm = element.parent().controller('form') || nullFormCtrl,\n      invalidCount = 0, // used to easily determine if we are valid\n      errors = form.$error = {},\n      controls = [];\n\n  // init state\n  form.$name = attrs.name || attrs.ngForm;\n  form.$dirty = false;\n  form.$pristine = true;\n  form.$valid = true;\n  form.$invalid = false;\n\n  parentForm.$addControl(form);\n\n  // Setup initial state of the control\n  element.addClass(PRISTINE_CLASS);\n  toggleValidCss(true);\n\n  // convenience method for easy toggling of classes\n  function toggleValidCss(isValid, validationErrorKey) {\n    validationErrorKey = validationErrorKey ? '-' + snake_case(validationErrorKey, '-') : '';\n    $animate.removeClass(element, (isValid ? INVALID_CLASS : VALID_CLASS) + validationErrorKey);\n    $animate.addClass(element, (isValid ? VALID_CLASS : INVALID_CLASS) + validationErrorKey);\n  }\n\n  /**\n   * @ngdoc method\n   * @name form.FormController#$addControl\n   *\n   * @description\n   * Register a control with the form.\n   *\n   * Input elements using ngModelController do this automatically when they are linked.\n   */\n  form.$addControl = function(control) {\n    // Breaking change - before, inputs whose name was \"hasOwnProperty\" were quietly ignored\n    // and not added to the scope.  Now we throw an error.\n    assertNotHasOwnProperty(control.$name, 'input');\n    controls.push(control);\n\n    if (control.$name) {\n      form[control.$name] = control;\n    }\n  };\n\n  /**\n   * @ngdoc method\n   * @name form.FormController#$removeControl\n   *\n   * @description\n   * Deregister a control from the form.\n   *\n   * Input elements using ngModelController do this automatically when they are destroyed.\n   */\n  form.$removeControl = function(control) {\n    if (control.$name && form[control.$name] === control) {\n      delete form[control.$name];\n    }\n    forEach(errors, function(queue, validationToken) {\n      form.$setValidity(validationToken, true, control);\n    });\n\n    arrayRemove(controls, control);\n  };\n\n  /**\n   * @ngdoc method\n   * @name form.FormController#$setValidity\n   *\n   * @description\n   * Sets the validity of a form control.\n   *\n   * This method will also propagate to parent forms.\n   */\n  form.$setValidity = function(validationToken, isValid, control) {\n    var queue = errors[validationToken];\n\n    if (isValid) {\n      if (queue) {\n        arrayRemove(queue, control);\n        if (!queue.length) {\n          invalidCount--;\n          if (!invalidCount) {\n            toggleValidCss(isValid);\n            form.$valid = true;\n            form.$invalid = false;\n          }\n          errors[validationToken] = false;\n          toggleValidCss(true, validationToken);\n          parentForm.$setValidity(validationToken, true, form);\n        }\n      }\n\n    } else {\n      if (!invalidCount) {\n        toggleValidCss(isValid);\n      }\n      if (queue) {\n        if (includes(queue, control)) return;\n      } else {\n        errors[validationToken] = queue = [];\n        invalidCount++;\n        toggleValidCss(false, validationToken);\n        parentForm.$setValidity(validationToken, false, form);\n      }\n      queue.push(control);\n\n      form.$valid = false;\n      form.$invalid = true;\n    }\n  };\n\n  /**\n   * @ngdoc method\n   * @name form.FormController#$setDirty\n   *\n   * @description\n   * Sets the form to a dirty state.\n   *\n   * This method can be called to add the 'ng-dirty' class and set the form to a dirty\n   * state (ng-dirty class). This method will also propagate to parent forms.\n   */\n  form.$setDirty = function() {\n    $animate.removeClass(element, PRISTINE_CLASS);\n    $animate.addClass(element, DIRTY_CLASS);\n    form.$dirty = true;\n    form.$pristine = false;\n    parentForm.$setDirty();\n  };\n\n  /**\n   * @ngdoc method\n   * @name form.FormController#$setPristine\n   *\n   * @description\n   * Sets the form to its pristine state.\n   *\n   * This method can be called to remove the 'ng-dirty' class and set the form to its pristine\n   * state (ng-pristine class). This method will also propagate to all the controls contained\n   * in this form.\n   *\n   * Setting a form back to a pristine state is often useful when we want to 'reuse' a form after\n   * saving or resetting it.\n   */\n  form.$setPristine = function () {\n    $animate.removeClass(element, DIRTY_CLASS);\n    $animate.addClass(element, PRISTINE_CLASS);\n    form.$dirty = false;\n    form.$pristine = true;\n    forEach(controls, function(control) {\n      control.$setPristine();\n    });\n  };\n}\n\n\n/**\n * @ngdoc directive\n * @name ngForm\n * @restrict EAC\n *\n * @description\n * Nestable alias of {@link ng.directive:form `form`} directive. HTML\n * does not allow nesting of form elements. It is useful to nest forms, for example if the validity of a\n * sub-group of controls needs to be determined.\n *\n * Note: the purpose of `ngForm` is to group controls,\n * but not to be a replacement for the `<form>` tag with all of its capabilities\n * (e.g. posting to the server, ...).\n *\n * @param {string=} ngForm|name Name of the form. If specified, the form controller will be published into\n *                       related scope, under this name.\n *\n */\n\n /**\n * @ngdoc directive\n * @name form\n * @restrict E\n *\n * @description\n * Directive that instantiates\n * {@link form.FormController FormController}.\n *\n * If the `name` attribute is specified, the form controller is published onto the current scope under\n * this name.\n *\n * # Alias: {@link ng.directive:ngForm `ngForm`}\n *\n * In Angular forms can be nested. This means that the outer form is valid when all of the child\n * forms are valid as well. However, browsers do not allow nesting of `<form>` elements, so\n * Angular provides the {@link ng.directive:ngForm `ngForm`} directive which behaves identically to\n * `<form>` but can be nested.  This allows you to have nested forms, which is very useful when\n * using Angular validation directives in forms that are dynamically generated using the\n * {@link ng.directive:ngRepeat `ngRepeat`} directive. Since you cannot dynamically generate the `name`\n * attribute of input elements using interpolation, you have to wrap each set of repeated inputs in an\n * `ngForm` directive and nest these in an outer `form` element.\n *\n *\n * # CSS classes\n *  - `ng-valid` is set if the form is valid.\n *  - `ng-invalid` is set if the form is invalid.\n *  - `ng-pristine` is set if the form is pristine.\n *  - `ng-dirty` is set if the form is dirty.\n *\n * Keep in mind that ngAnimate can detect each of these classes when added and removed.\n *\n *\n * # Submitting a form and preventing the default action\n *\n * Since the role of forms in client-side Angular applications is different than in classical\n * roundtrip apps, it is desirable for the browser not to translate the form submission into a full\n * page reload that sends the data to the server. Instead some javascript logic should be triggered\n * to handle the form submission in an application-specific way.\n *\n * For this reason, Angular prevents the default action (form submission to the server) unless the\n * `<form>` element has an `action` attribute specified.\n *\n * You can use one of the following two ways to specify what javascript method should be called when\n * a form is submitted:\n *\n * - {@link ng.directive:ngSubmit ngSubmit} directive on the form element\n * - {@link ng.directive:ngClick ngClick} directive on the first\n  *  button or input field of type submit (input[type=submit])\n *\n * To prevent double execution of the handler, use only one of the {@link ng.directive:ngSubmit ngSubmit}\n * or {@link ng.directive:ngClick ngClick} directives.\n * This is because of the following form submission rules in the HTML specification:\n *\n * - If a form has only one input field then hitting enter in this field triggers form submit\n * (`ngSubmit`)\n * - if a form has 2+ input fields and no buttons or input[type=submit] then hitting enter\n * doesn't trigger submit\n * - if a form has one or more input fields and one or more buttons or input[type=submit] then\n * hitting enter in any of the input fields will trigger the click handler on the *first* button or\n * input[type=submit] (`ngClick`) *and* a submit handler on the enclosing form (`ngSubmit`)\n *\n * @param {string=} name Name of the form. If specified, the form controller will be published into\n *                       related scope, under this name.\n *\n * ## Animation Hooks\n *\n * Animations in ngForm are triggered when any of the associated CSS classes are added and removed.\n * These classes are: `.ng-pristine`, `.ng-dirty`, `.ng-invalid` and `.ng-valid` as well as any\n * other validations that are performed within the form. Animations in ngForm are similar to how\n * they work in ngClass and animations can be hooked into using CSS transitions, keyframes as well\n * as JS animations.\n *\n * The following example shows a simple way to utilize CSS transitions to style a form element\n * that has been rendered as invalid after it has been validated:\n *\n * <pre>\n * //be sure to include ngAnimate as a module to hook into more\n * //advanced animations\n * .my-form {\n *   transition:0.5s linear all;\n *   background: white;\n * }\n * .my-form.ng-invalid {\n *   background: red;\n *   color:white;\n * }\n * </pre>\n *\n * @example\n    <example deps=\"angular-animate.js\" animations=\"true\" fixBase=\"true\">\n      <file name=\"index.html\">\n       <script>\n         function Ctrl($scope) {\n           $scope.userType = 'guest';\n         }\n       </script>\n       <style>\n        .my-form {\n          -webkit-transition:all linear 0.5s;\n          transition:all linear 0.5s;\n          background: transparent;\n        }\n        .my-form.ng-invalid {\n          background: red;\n        }\n       </style>\n       <form name=\"myForm\" ng-controller=\"Ctrl\" class=\"my-form\">\n         userType: <input name=\"input\" ng-model=\"userType\" required>\n         <span class=\"error\" ng-show=\"myForm.input.$error.required\">Required!</span><br>\n         <tt>userType = {{userType}}</tt><br>\n         <tt>myForm.input.$valid = {{myForm.input.$valid}}</tt><br>\n         <tt>myForm.input.$error = {{myForm.input.$error}}</tt><br>\n         <tt>myForm.$valid = {{myForm.$valid}}</tt><br>\n         <tt>myForm.$error.required = {{!!myForm.$error.required}}</tt><br>\n        </form>\n      </file>\n      <file name=\"protractor.js\" type=\"protractor\">\n        it('should initialize to model', function() {\n          var userType = element(by.binding('userType'));\n          var valid = element(by.binding('myForm.input.$valid'));\n\n          expect(userType.getText()).toContain('guest');\n          expect(valid.getText()).toContain('true');\n        });\n\n        it('should be invalid if empty', function() {\n          var userType = element(by.binding('userType'));\n          var valid = element(by.binding('myForm.input.$valid'));\n          var userInput = element(by.model('userType'));\n\n          userInput.clear();\n          userInput.sendKeys('');\n\n          expect(userType.getText()).toEqual('userType =');\n          expect(valid.getText()).toContain('false');\n        });\n      </file>\n    </example>\n *\n */\nvar formDirectiveFactory = function(isNgForm) {\n  return ['$timeout', function($timeout) {\n    var formDirective = {\n      name: 'form',\n      restrict: isNgForm ? 'EAC' : 'E',\n      controller: FormController,\n      compile: function() {\n        return {\n          pre: function(scope, formElement, attr, controller) {\n            if (!attr.action) {\n              // we can't use jq events because if a form is destroyed during submission the default\n              // action is not prevented. see #1238\n              //\n              // IE 9 is not affected because it doesn't fire a submit event and try to do a full\n              // page reload if the form was destroyed by submission of the form via a click handler\n              // on a button in the form. Looks like an IE9 specific bug.\n              var preventDefaultListener = function(event) {\n                event.preventDefault\n                  ? event.preventDefault()\n                  : event.returnValue = false; // IE\n              };\n\n              addEventListenerFn(formElement[0], 'submit', preventDefaultListener);\n\n              // unregister the preventDefault listener so that we don't not leak memory but in a\n              // way that will achieve the prevention of the default action.\n              formElement.on('$destroy', function() {\n                $timeout(function() {\n                  removeEventListenerFn(formElement[0], 'submit', preventDefaultListener);\n                }, 0, false);\n              });\n            }\n\n            var parentFormCtrl = formElement.parent().controller('form'),\n                alias = attr.name || attr.ngForm;\n\n            if (alias) {\n              setter(scope, alias, controller, alias);\n            }\n            if (parentFormCtrl) {\n              formElement.on('$destroy', function() {\n                parentFormCtrl.$removeControl(controller);\n                if (alias) {\n                  setter(scope, alias, undefined, alias);\n                }\n                extend(controller, nullFormCtrl); //stop propagating child destruction handlers upwards\n              });\n            }\n          }\n        };\n      }\n    };\n\n    return formDirective;\n  }];\n};\n\nvar formDirective = formDirectiveFactory();\nvar ngFormDirective = formDirectiveFactory(true);\n\n/* global\n\n    -VALID_CLASS,\n    -INVALID_CLASS,\n    -PRISTINE_CLASS,\n    -DIRTY_CLASS\n*/\n\nvar URL_REGEXP = /^(ftp|http|https):\\/\\/(\\w+:{0,1}\\w*@)?(\\S+)(:[0-9]+)?(\\/|\\/([\\w#!:.?+=&%@!\\-\\/]))?$/;\nvar EMAIL_REGEXP = /^[a-z0-9!#$%&'*+/=?^_`{|}~.-]+@[a-z0-9-]+(\\.[a-z0-9-]+)*$/i;\nvar NUMBER_REGEXP = /^\\s*(\\-|\\+)?(\\d+|(\\d*(\\.\\d*)))\\s*$/;\n\nvar inputType = {\n\n  /**\n   * @ngdoc input\n   * @name input[text]\n   *\n   * @description\n   * Standard HTML text input with angular data binding.\n   *\n   * @param {string} ngModel Assignable angular expression to data-bind to.\n   * @param {string=} name Property name of the form under which the control is published.\n   * @param {string=} required Adds `required` validation error key if the value is not entered.\n   * @param {string=} ngRequired Adds `required` attribute and `required` validation constraint to\n   *    the element when the ngRequired expression evaluates to true. Use `ngRequired` instead of\n   *    `required` when you want to data-bind to the `required` attribute.\n   * @param {number=} ngMinlength Sets `minlength` validation error key if the value is shorter than\n   *    minlength.\n   * @param {number=} ngMaxlength Sets `maxlength` validation error key if the value is longer than\n   *    maxlength.\n   * @param {string=} ngPattern Sets `pattern` validation error key if the value does not match the\n   *    RegExp pattern expression. Expected value is `/regexp/` for inline patterns or `regexp` for\n   *    patterns defined as scope expressions.\n   * @param {string=} ngChange Angular expression to be executed when input changes due to user\n   *    interaction with the input element.\n   * @param {boolean=} [ngTrim=true] If set to false Angular will not automatically trim the input.\n   *\n   * @example\n      <example name=\"text-input-directive\">\n        <file name=\"index.html\">\n         <script>\n           function Ctrl($scope) {\n             $scope.text = 'guest';\n             $scope.word = /^\\s*\\w*\\s*$/;\n           }\n         </script>\n         <form name=\"myForm\" ng-controller=\"Ctrl\">\n           Single word: <input type=\"text\" name=\"input\" ng-model=\"text\"\n                               ng-pattern=\"word\" required ng-trim=\"false\">\n           <span class=\"error\" ng-show=\"myForm.input.$error.required\">\n             Required!</span>\n           <span class=\"error\" ng-show=\"myForm.input.$error.pattern\">\n             Single word only!</span>\n\n           <tt>text = {{text}}</tt><br/>\n           <tt>myForm.input.$valid = {{myForm.input.$valid}}</tt><br/>\n           <tt>myForm.input.$error = {{myForm.input.$error}}</tt><br/>\n           <tt>myForm.$valid = {{myForm.$valid}}</tt><br/>\n           <tt>myForm.$error.required = {{!!myForm.$error.required}}</tt><br/>\n          </form>\n        </file>\n        <file name=\"protractor.js\" type=\"protractor\">\n          var text = element(by.binding('text'));\n          var valid = element(by.binding('myForm.input.$valid'));\n          var input = element(by.model('text'));\n\n          it('should initialize to model', function() {\n            expect(text.getText()).toContain('guest');\n            expect(valid.getText()).toContain('true');\n          });\n\n          it('should be invalid if empty', function() {\n            input.clear();\n            input.sendKeys('');\n\n            expect(text.getText()).toEqual('text =');\n            expect(valid.getText()).toContain('false');\n          });\n\n          it('should be invalid if multi word', function() {\n            input.clear();\n            input.sendKeys('hello world');\n\n            expect(valid.getText()).toContain('false');\n          });\n        </file>\n      </example>\n   */\n  'text': textInputType,\n\n\n  /**\n   * @ngdoc input\n   * @name input[number]\n   *\n   * @description\n   * Text input with number validation and transformation. Sets the `number` validation\n   * error if not a valid number.\n   *\n   * @param {string} ngModel Assignable angular expression to data-bind to.\n   * @param {string=} name Property name of the form under which the control is published.\n   * @param {string=} min Sets the `min` validation error key if the value entered is less than `min`.\n   * @param {string=} max Sets the `max` validation error key if the value entered is greater than `max`.\n   * @param {string=} required Sets `required` validation error key if the value is not entered.\n   * @param {string=} ngRequired Adds `required` attribute and `required` validation constraint to\n   *    the element when the ngRequired expression evaluates to true. Use `ngRequired` instead of\n   *    `required` when you want to data-bind to the `required` attribute.\n   * @param {number=} ngMinlength Sets `minlength` validation error key if the value is shorter than\n   *    minlength.\n   * @param {number=} ngMaxlength Sets `maxlength` validation error key if the value is longer than\n   *    maxlength.\n   * @param {string=} ngPattern Sets `pattern` validation error key if the value does not match the\n   *    RegExp pattern expression. Expected value is `/regexp/` for inline patterns or `regexp` for\n   *    patterns defined as scope expressions.\n   * @param {string=} ngChange Angular expression to be executed when input changes due to user\n   *    interaction with the input element.\n   *\n   * @example\n      <example name=\"number-input-directive\">\n        <file name=\"index.html\">\n         <script>\n           function Ctrl($scope) {\n             $scope.value = 12;\n           }\n         </script>\n         <form name=\"myForm\" ng-controller=\"Ctrl\">\n           Number: <input type=\"number\" name=\"input\" ng-model=\"value\"\n                          min=\"0\" max=\"99\" required>\n           <span class=\"error\" ng-show=\"myForm.input.$error.required\">\n             Required!</span>\n           <span class=\"error\" ng-show=\"myForm.input.$error.number\">\n             Not valid number!</span>\n           <tt>value = {{value}}</tt><br/>\n           <tt>myForm.input.$valid = {{myForm.input.$valid}}</tt><br/>\n           <tt>myForm.input.$error = {{myForm.input.$error}}</tt><br/>\n           <tt>myForm.$valid = {{myForm.$valid}}</tt><br/>\n           <tt>myForm.$error.required = {{!!myForm.$error.required}}</tt><br/>\n          </form>\n        </file>\n        <file name=\"protractor.js\" type=\"protractor\">\n          var value = element(by.binding('value'));\n          var valid = element(by.binding('myForm.input.$valid'));\n          var input = element(by.model('value'));\n\n          it('should initialize to model', function() {\n            expect(value.getText()).toContain('12');\n            expect(valid.getText()).toContain('true');\n          });\n\n          it('should be invalid if empty', function() {\n            input.clear();\n            input.sendKeys('');\n            expect(value.getText()).toEqual('value =');\n            expect(valid.getText()).toContain('false');\n          });\n\n          it('should be invalid if over max', function() {\n            input.clear();\n            input.sendKeys('123');\n            expect(value.getText()).toEqual('value =');\n            expect(valid.getText()).toContain('false');\n          });\n        </file>\n      </example>\n   */\n  'number': numberInputType,\n\n\n  /**\n   * @ngdoc input\n   * @name input[url]\n   *\n   * @description\n   * Text input with URL validation. Sets the `url` validation error key if the content is not a\n   * valid URL.\n   *\n   * @param {string} ngModel Assignable angular expression to data-bind to.\n   * @param {string=} name Property name of the form under which the control is published.\n   * @param {string=} required Sets `required` validation error key if the value is not entered.\n   * @param {string=} ngRequired Adds `required` attribute and `required` validation constraint to\n   *    the element when the ngRequired expression evaluates to true. Use `ngRequired` instead of\n   *    `required` when you want to data-bind to the `required` attribute.\n   * @param {number=} ngMinlength Sets `minlength` validation error key if the value is shorter than\n   *    minlength.\n   * @param {number=} ngMaxlength Sets `maxlength` validation error key if the value is longer than\n   *    maxlength.\n   * @param {string=} ngPattern Sets `pattern` validation error key if the value does not match the\n   *    RegExp pattern expression. Expected value is `/regexp/` for inline patterns or `regexp` for\n   *    patterns defined as scope expressions.\n   * @param {string=} ngChange Angular expression to be executed when input changes due to user\n   *    interaction with the input element.\n   *\n   * @example\n      <example name=\"url-input-directive\">\n        <file name=\"index.html\">\n         <script>\n           function Ctrl($scope) {\n             $scope.text = 'http://google.com';\n           }\n         </script>\n         <form name=\"myForm\" ng-controller=\"Ctrl\">\n           URL: <input type=\"url\" name=\"input\" ng-model=\"text\" required>\n           <span class=\"error\" ng-show=\"myForm.input.$error.required\">\n             Required!</span>\n           <span class=\"error\" ng-show=\"myForm.input.$error.url\">\n             Not valid url!</span>\n           <tt>text = {{text}}</tt><br/>\n           <tt>myForm.input.$valid = {{myForm.input.$valid}}</tt><br/>\n           <tt>myForm.input.$error = {{myForm.input.$error}}</tt><br/>\n           <tt>myForm.$valid = {{myForm.$valid}}</tt><br/>\n           <tt>myForm.$error.required = {{!!myForm.$error.required}}</tt><br/>\n           <tt>myForm.$error.url = {{!!myForm.$error.url}}</tt><br/>\n          </form>\n        </file>\n        <file name=\"protractor.js\" type=\"protractor\">\n          var text = element(by.binding('text'));\n          var valid = element(by.binding('myForm.input.$valid'));\n          var input = element(by.model('text'));\n\n          it('should initialize to model', function() {\n            expect(text.getText()).toContain('http://google.com');\n            expect(valid.getText()).toContain('true');\n          });\n\n          it('should be invalid if empty', function() {\n            input.clear();\n            input.sendKeys('');\n\n            expect(text.getText()).toEqual('text =');\n            expect(valid.getText()).toContain('false');\n          });\n\n          it('should be invalid if not url', function() {\n            input.clear();\n            input.sendKeys('box');\n\n            expect(valid.getText()).toContain('false');\n          });\n        </file>\n      </example>\n   */\n  'url': urlInputType,\n\n\n  /**\n   * @ngdoc input\n   * @name input[email]\n   *\n   * @description\n   * Text input with email validation. Sets the `email` validation error key if not a valid email\n   * address.\n   *\n   * @param {string} ngModel Assignable angular expression to data-bind to.\n   * @param {string=} name Property name of the form under which the control is published.\n   * @param {string=} required Sets `required` validation error key if the value is not entered.\n   * @param {string=} ngRequired Adds `required` attribute and `required` validation constraint to\n   *    the element when the ngRequired expression evaluates to true. Use `ngRequired` instead of\n   *    `required` when you want to data-bind to the `required` attribute.\n   * @param {number=} ngMinlength Sets `minlength` validation error key if the value is shorter than\n   *    minlength.\n   * @param {number=} ngMaxlength Sets `maxlength` validation error key if the value is longer than\n   *    maxlength.\n   * @param {string=} ngPattern Sets `pattern` validation error key if the value does not match the\n   *    RegExp pattern expression. Expected value is `/regexp/` for inline patterns or `regexp` for\n   *    patterns defined as scope expressions.\n   * @param {string=} ngChange Angular expression to be executed when input changes due to user\n   *    interaction with the input element.\n   *\n   * @example\n      <example name=\"email-input-directive\">\n        <file name=\"index.html\">\n         <script>\n           function Ctrl($scope) {\n             $scope.text = 'me@example.com';\n           }\n         </script>\n           <form name=\"myForm\" ng-controller=\"Ctrl\">\n             Email: <input type=\"email\" name=\"input\" ng-model=\"text\" required>\n             <span class=\"error\" ng-show=\"myForm.input.$error.required\">\n               Required!</span>\n             <span class=\"error\" ng-show=\"myForm.input.$error.email\">\n               Not valid email!</span>\n             <tt>text = {{text}}</tt><br/>\n             <tt>myForm.input.$valid = {{myForm.input.$valid}}</tt><br/>\n             <tt>myForm.input.$error = {{myForm.input.$error}}</tt><br/>\n             <tt>myForm.$valid = {{myForm.$valid}}</tt><br/>\n             <tt>myForm.$error.required = {{!!myForm.$error.required}}</tt><br/>\n             <tt>myForm.$error.email = {{!!myForm.$error.email}}</tt><br/>\n           </form>\n         </file>\n        <file name=\"protractor.js\" type=\"protractor\">\n          var text = element(by.binding('text'));\n          var valid = element(by.binding('myForm.input.$valid'));\n          var input = element(by.model('text'));\n\n          it('should initialize to model', function() {\n            expect(text.getText()).toContain('me@example.com');\n            expect(valid.getText()).toContain('true');\n          });\n\n          it('should be invalid if empty', function() {\n            input.clear();\n            input.sendKeys('');\n            expect(text.getText()).toEqual('text =');\n            expect(valid.getText()).toContain('false');\n          });\n\n          it('should be invalid if not email', function() {\n            input.clear();\n            input.sendKeys('xxx');\n\n            expect(valid.getText()).toContain('false');\n          });\n        </file>\n      </example>\n   */\n  'email': emailInputType,\n\n\n  /**\n   * @ngdoc input\n   * @name input[radio]\n   *\n   * @description\n   * HTML radio button.\n   *\n   * @param {string} ngModel Assignable angular expression to data-bind to.\n   * @param {string} value The value to which the expression should be set when selected.\n   * @param {string=} name Property name of the form under which the control is published.\n   * @param {string=} ngChange Angular expression to be executed when input changes due to user\n   *    interaction with the input element.\n   * @param {string} ngValue Angular expression which sets the value to which the expression should\n   *    be set when selected.\n   *\n   * @example\n      <example name=\"radio-input-directive\">\n        <file name=\"index.html\">\n         <script>\n           function Ctrl($scope) {\n             $scope.color = 'blue';\n             $scope.specialValue = {\n               \"id\": \"12345\",\n               \"value\": \"green\"\n             };\n           }\n         </script>\n         <form name=\"myForm\" ng-controller=\"Ctrl\">\n           <input type=\"radio\" ng-model=\"color\" value=\"red\">  Red <br/>\n           <input type=\"radio\" ng-model=\"color\" ng-value=\"specialValue\"> Green <br/>\n           <input type=\"radio\" ng-model=\"color\" value=\"blue\"> Blue <br/>\n           <tt>color = {{color | json}}</tt><br/>\n          </form>\n          Note that `ng-value=\"specialValue\"` sets radio item's value to be the value of `$scope.specialValue`.\n        </file>\n        <file name=\"protractor.js\" type=\"protractor\">\n          it('should change state', function() {\n            var color = element(by.binding('color'));\n\n            expect(color.getText()).toContain('blue');\n\n            element.all(by.model('color')).get(0).click();\n\n            expect(color.getText()).toContain('red');\n          });\n        </file>\n      </example>\n   */\n  'radio': radioInputType,\n\n\n  /**\n   * @ngdoc input\n   * @name input[checkbox]\n   *\n   * @description\n   * HTML checkbox.\n   *\n   * @param {string} ngModel Assignable angular expression to data-bind to.\n   * @param {string=} name Property name of the form under which the control is published.\n   * @param {string=} ngTrueValue The value to which the expression should be set when selected.\n   * @param {string=} ngFalseValue The value to which the expression should be set when not selected.\n   * @param {string=} ngChange Angular expression to be executed when input changes due to user\n   *    interaction with the input element.\n   *\n   * @example\n      <example name=\"checkbox-input-directive\">\n        <file name=\"index.html\">\n         <script>\n           function Ctrl($scope) {\n             $scope.value1 = true;\n             $scope.value2 = 'YES'\n           }\n         </script>\n         <form name=\"myForm\" ng-controller=\"Ctrl\">\n           Value1: <input type=\"checkbox\" ng-model=\"value1\"> <br/>\n           Value2: <input type=\"checkbox\" ng-model=\"value2\"\n                          ng-true-value=\"YES\" ng-false-value=\"NO\"> <br/>\n           <tt>value1 = {{value1}}</tt><br/>\n           <tt>value2 = {{value2}}</tt><br/>\n          </form>\n        </file>\n        <file name=\"protractor.js\" type=\"protractor\">\n          it('should change state', function() {\n            var value1 = element(by.binding('value1'));\n            var value2 = element(by.binding('value2'));\n\n            expect(value1.getText()).toContain('true');\n            expect(value2.getText()).toContain('YES');\n\n            element(by.model('value1')).click();\n            element(by.model('value2')).click();\n\n            expect(value1.getText()).toContain('false');\n            expect(value2.getText()).toContain('NO');\n          });\n        </file>\n      </example>\n   */\n  'checkbox': checkboxInputType,\n\n  'hidden': noop,\n  'button': noop,\n  'submit': noop,\n  'reset': noop,\n  'file': noop\n};\n\n// A helper function to call $setValidity and return the value / undefined,\n// a pattern that is repeated a lot in the input validation logic.\nfunction validate(ctrl, validatorName, validity, value){\n  ctrl.$setValidity(validatorName, validity);\n  return validity ? value : undefined;\n}\n\n\nfunction addNativeHtml5Validators(ctrl, validatorName, element) {\n  var validity = element.prop('validity');\n  if (isObject(validity)) {\n    var validator = function(value) {\n      // Don't overwrite previous validation, don't consider valueMissing to apply (ng-required can\n      // perform the required validation)\n      if (!ctrl.$error[validatorName] && (validity.badInput || validity.customError ||\n          validity.typeMismatch) && !validity.valueMissing) {\n        ctrl.$setValidity(validatorName, false);\n        return;\n      }\n      return value;\n    };\n    ctrl.$parsers.push(validator);\n  }\n}\n\nfunction textInputType(scope, element, attr, ctrl, $sniffer, $browser) {\n  var validity = element.prop('validity');\n  var placeholder = element[0].placeholder, noevent = {};\n\n  // In composition mode, users are still inputing intermediate text buffer,\n  // hold the listener until composition is done.\n  // More about composition events: https://developer.mozilla.org/en-US/docs/Web/API/CompositionEvent\n  if (!$sniffer.android) {\n    var composing = false;\n\n    element.on('compositionstart', function(data) {\n      composing = true;\n    });\n\n    element.on('compositionend', function() {\n      composing = false;\n      listener();\n    });\n  }\n\n  var listener = function(ev) {\n    if (composing) return;\n    var value = element.val();\n\n    // IE (11 and under) seem to emit an 'input' event if the placeholder value changes.\n    // We don't want to dirty the value when this happens, so we abort here. Unfortunately,\n    // IE also sends input events for other non-input-related things, (such as focusing on a\n    // form control), so this change is not entirely enough to solve this.\n    if (msie && (ev || noevent).type === 'input' && element[0].placeholder !== placeholder) {\n      placeholder = element[0].placeholder;\n      return;\n    }\n\n    // By default we will trim the value\n    // If the attribute ng-trim exists we will avoid trimming\n    // e.g. <input ng-model=\"foo\" ng-trim=\"false\">\n    if (toBoolean(attr.ngTrim || 'T')) {\n      value = trim(value);\n    }\n\n    if (ctrl.$viewValue !== value ||\n        // If the value is still empty/falsy, and there is no `required` error, run validators\n        // again. This enables HTML5 constraint validation errors to affect Angular validation\n        // even when the first character entered causes an error.\n        (validity && value === '' && !validity.valueMissing)) {\n      if (scope.$$phase) {\n        ctrl.$setViewValue(value);\n      } else {\n        scope.$apply(function() {\n          ctrl.$setViewValue(value);\n        });\n      }\n    }\n  };\n\n  // if the browser does support \"input\" event, we are fine - except on IE9 which doesn't fire the\n  // input event on backspace, delete or cut\n  if ($sniffer.hasEvent('input')) {\n    element.on('input', listener);\n  } else {\n    var timeout;\n\n    var deferListener = function() {\n      if (!timeout) {\n        timeout = $browser.defer(function() {\n          listener();\n          timeout = null;\n        });\n      }\n    };\n\n    element.on('keydown', function(event) {\n      var key = event.keyCode;\n\n      // ignore\n      //    command            modifiers                   arrows\n      if (key === 91 || (15 < key && key < 19) || (37 <= key && key <= 40)) return;\n\n      deferListener();\n    });\n\n    // if user modifies input value using context menu in IE, we need \"paste\" and \"cut\" events to catch it\n    if ($sniffer.hasEvent('paste')) {\n      element.on('paste cut', deferListener);\n    }\n  }\n\n  // if user paste into input using mouse on older browser\n  // or form autocomplete on newer browser, we need \"change\" event to catch it\n  element.on('change', listener);\n\n  ctrl.$render = function() {\n    element.val(ctrl.$isEmpty(ctrl.$viewValue) ? '' : ctrl.$viewValue);\n  };\n\n  // pattern validator\n  var pattern = attr.ngPattern,\n      patternValidator,\n      match;\n\n  if (pattern) {\n    var validateRegex = function(regexp, value) {\n      return validate(ctrl, 'pattern', ctrl.$isEmpty(value) || regexp.test(value), value);\n    };\n    match = pattern.match(/^\\/(.*)\\/([gim]*)$/);\n    if (match) {\n      pattern = new RegExp(match[1], match[2]);\n      patternValidator = function(value) {\n        return validateRegex(pattern, value);\n      };\n    } else {\n      patternValidator = function(value) {\n        var patternObj = scope.$eval(pattern);\n\n        if (!patternObj || !patternObj.test) {\n          throw minErr('ngPattern')('noregexp',\n            'Expected {0} to be a RegExp but was {1}. Element: {2}', pattern,\n            patternObj, startingTag(element));\n        }\n        return validateRegex(patternObj, value);\n      };\n    }\n\n    ctrl.$formatters.push(patternValidator);\n    ctrl.$parsers.push(patternValidator);\n  }\n\n  // min length validator\n  if (attr.ngMinlength) {\n    var minlength = int(attr.ngMinlength);\n    var minLengthValidator = function(value) {\n      return validate(ctrl, 'minlength', ctrl.$isEmpty(value) || value.length >= minlength, value);\n    };\n\n    ctrl.$parsers.push(minLengthValidator);\n    ctrl.$formatters.push(minLengthValidator);\n  }\n\n  // max length validator\n  if (attr.ngMaxlength) {\n    var maxlength = int(attr.ngMaxlength);\n    var maxLengthValidator = function(value) {\n      return validate(ctrl, 'maxlength', ctrl.$isEmpty(value) || value.length <= maxlength, value);\n    };\n\n    ctrl.$parsers.push(maxLengthValidator);\n    ctrl.$formatters.push(maxLengthValidator);\n  }\n}\n\nfunction numberInputType(scope, element, attr, ctrl, $sniffer, $browser) {\n  textInputType(scope, element, attr, ctrl, $sniffer, $browser);\n\n  ctrl.$parsers.push(function(value) {\n    var empty = ctrl.$isEmpty(value);\n    if (empty || NUMBER_REGEXP.test(value)) {\n      ctrl.$setValidity('number', true);\n      return value === '' ? null : (empty ? value : parseFloat(value));\n    } else {\n      ctrl.$setValidity('number', false);\n      return undefined;\n    }\n  });\n\n  addNativeHtml5Validators(ctrl, 'number', element);\n\n  ctrl.$formatters.push(function(value) {\n    return ctrl.$isEmpty(value) ? '' : '' + value;\n  });\n\n  if (attr.min) {\n    var minValidator = function(value) {\n      var min = parseFloat(attr.min);\n      return validate(ctrl, 'min', ctrl.$isEmpty(value) || value >= min, value);\n    };\n\n    ctrl.$parsers.push(minValidator);\n    ctrl.$formatters.push(minValidator);\n  }\n\n  if (attr.max) {\n    var maxValidator = function(value) {\n      var max = parseFloat(attr.max);\n      return validate(ctrl, 'max', ctrl.$isEmpty(value) || value <= max, value);\n    };\n\n    ctrl.$parsers.push(maxValidator);\n    ctrl.$formatters.push(maxValidator);\n  }\n\n  ctrl.$formatters.push(function(value) {\n    return validate(ctrl, 'number', ctrl.$isEmpty(value) || isNumber(value), value);\n  });\n}\n\nfunction urlInputType(scope, element, attr, ctrl, $sniffer, $browser) {\n  textInputType(scope, element, attr, ctrl, $sniffer, $browser);\n\n  var urlValidator = function(value) {\n    return validate(ctrl, 'url', ctrl.$isEmpty(value) || URL_REGEXP.test(value), value);\n  };\n\n  ctrl.$formatters.push(urlValidator);\n  ctrl.$parsers.push(urlValidator);\n}\n\nfunction emailInputType(scope, element, attr, ctrl, $sniffer, $browser) {\n  textInputType(scope, element, attr, ctrl, $sniffer, $browser);\n\n  var emailValidator = function(value) {\n    return validate(ctrl, 'email', ctrl.$isEmpty(value) || EMAIL_REGEXP.test(value), value);\n  };\n\n  ctrl.$formatters.push(emailValidator);\n  ctrl.$parsers.push(emailValidator);\n}\n\nfunction radioInputType(scope, element, attr, ctrl) {\n  // make the name unique, if not defined\n  if (isUndefined(attr.name)) {\n    element.attr('name', nextUid());\n  }\n\n  element.on('click', function() {\n    if (element[0].checked) {\n      scope.$apply(function() {\n        ctrl.$setViewValue(attr.value);\n      });\n    }\n  });\n\n  ctrl.$render = function() {\n    var value = attr.value;\n    element[0].checked = (value == ctrl.$viewValue);\n  };\n\n  attr.$observe('value', ctrl.$render);\n}\n\nfunction checkboxInputType(scope, element, attr, ctrl) {\n  var trueValue = attr.ngTrueValue,\n      falseValue = attr.ngFalseValue;\n\n  if (!isString(trueValue)) trueValue = true;\n  if (!isString(falseValue)) falseValue = false;\n\n  element.on('click', function() {\n    scope.$apply(function() {\n      ctrl.$setViewValue(element[0].checked);\n    });\n  });\n\n  ctrl.$render = function() {\n    element[0].checked = ctrl.$viewValue;\n  };\n\n  // Override the standard `$isEmpty` because a value of `false` means empty in a checkbox.\n  ctrl.$isEmpty = function(value) {\n    return value !== trueValue;\n  };\n\n  ctrl.$formatters.push(function(value) {\n    return value === trueValue;\n  });\n\n  ctrl.$parsers.push(function(value) {\n    return value ? trueValue : falseValue;\n  });\n}\n\n\n/**\n * @ngdoc directive\n * @name textarea\n * @restrict E\n *\n * @description\n * HTML textarea element control with angular data-binding. The data-binding and validation\n * properties of this element are exactly the same as those of the\n * {@link ng.directive:input input element}.\n *\n * @param {string} ngModel Assignable angular expression to data-bind to.\n * @param {string=} name Property name of the form under which the control is published.\n * @param {string=} required Sets `required` validation error key if the value is not entered.\n * @param {string=} ngRequired Adds `required` attribute and `required` validation constraint to\n *    the element when the ngRequired expression evaluates to true. Use `ngRequired` instead of\n *    `required` when you want to data-bind to the `required` attribute.\n * @param {number=} ngMinlength Sets `minlength` validation error key if the value is shorter than\n *    minlength.\n * @param {number=} ngMaxlength Sets `maxlength` validation error key if the value is longer than\n *    maxlength.\n * @param {string=} ngPattern Sets `pattern` validation error key if the value does not match the\n *    RegExp pattern expression. Expected value is `/regexp/` for inline patterns or `regexp` for\n *    patterns defined as scope expressions.\n * @param {string=} ngChange Angular expression to be executed when input changes due to user\n *    interaction with the input element.\n */\n\n\n/**\n * @ngdoc directive\n * @name input\n * @restrict E\n *\n * @description\n * HTML input element control with angular data-binding. Input control follows HTML5 input types\n * and polyfills the HTML5 validation behavior for older browsers.\n *\n * @param {string} ngModel Assignable angular expression to data-bind to.\n * @param {string=} name Property name of the form under which the control is published.\n * @param {string=} required Sets `required` validation error key if the value is not entered.\n * @param {boolean=} ngRequired Sets `required` attribute if set to true\n * @param {number=} ngMinlength Sets `minlength` validation error key if the value is shorter than\n *    minlength.\n * @param {number=} ngMaxlength Sets `maxlength` validation error key if the value is longer than\n *    maxlength.\n * @param {string=} ngPattern Sets `pattern` validation error key if the value does not match the\n *    RegExp pattern expression. Expected value is `/regexp/` for inline patterns or `regexp` for\n *    patterns defined as scope expressions.\n * @param {string=} ngChange Angular expression to be executed when input changes due to user\n *    interaction with the input element.\n *\n * @example\n    <example name=\"input-directive\">\n      <file name=\"index.html\">\n       <script>\n         function Ctrl($scope) {\n           $scope.user = {name: 'guest', last: 'visitor'};\n         }\n       </script>\n       <div ng-controller=\"Ctrl\">\n         <form name=\"myForm\">\n           User name: <input type=\"text\" name=\"userName\" ng-model=\"user.name\" required>\n           <span class=\"error\" ng-show=\"myForm.userName.$error.required\">\n             Required!</span><br>\n           Last name: <input type=\"text\" name=\"lastName\" ng-model=\"user.last\"\n             ng-minlength=\"3\" ng-maxlength=\"10\">\n           <span class=\"error\" ng-show=\"myForm.lastName.$error.minlength\">\n             Too short!</span>\n           <span class=\"error\" ng-show=\"myForm.lastName.$error.maxlength\">\n             Too long!</span><br>\n         </form>\n         <hr>\n         <tt>user = {{user}}</tt><br/>\n         <tt>myForm.userName.$valid = {{myForm.userName.$valid}}</tt><br>\n         <tt>myForm.userName.$error = {{myForm.userName.$error}}</tt><br>\n         <tt>myForm.lastName.$valid = {{myForm.lastName.$valid}}</tt><br>\n         <tt>myForm.lastName.$error = {{myForm.lastName.$error}}</tt><br>\n         <tt>myForm.$valid = {{myForm.$valid}}</tt><br>\n         <tt>myForm.$error.required = {{!!myForm.$error.required}}</tt><br>\n         <tt>myForm.$error.minlength = {{!!myForm.$error.minlength}}</tt><br>\n         <tt>myForm.$error.maxlength = {{!!myForm.$error.maxlength}}</tt><br>\n       </div>\n      </file>\n      <file name=\"protractor.js\" type=\"protractor\">\n        var user = element(by.binding('{{user}}'));\n        var userNameValid = element(by.binding('myForm.userName.$valid'));\n        var lastNameValid = element(by.binding('myForm.lastName.$valid'));\n        var lastNameError = element(by.binding('myForm.lastName.$error'));\n        var formValid = element(by.binding('myForm.$valid'));\n        var userNameInput = element(by.model('user.name'));\n        var userLastInput = element(by.model('user.last'));\n\n        it('should initialize to model', function() {\n          expect(user.getText()).toContain('{\"name\":\"guest\",\"last\":\"visitor\"}');\n          expect(userNameValid.getText()).toContain('true');\n          expect(formValid.getText()).toContain('true');\n        });\n\n        it('should be invalid if empty when required', function() {\n          userNameInput.clear();\n          userNameInput.sendKeys('');\n\n          expect(user.getText()).toContain('{\"last\":\"visitor\"}');\n          expect(userNameValid.getText()).toContain('false');\n          expect(formValid.getText()).toContain('false');\n        });\n\n        it('should be valid if empty when min length is set', function() {\n          userLastInput.clear();\n          userLastInput.sendKeys('');\n\n          expect(user.getText()).toContain('{\"name\":\"guest\",\"last\":\"\"}');\n          expect(lastNameValid.getText()).toContain('true');\n          expect(formValid.getText()).toContain('true');\n        });\n\n        it('should be invalid if less than required min length', function() {\n          userLastInput.clear();\n          userLastInput.sendKeys('xx');\n\n          expect(user.getText()).toContain('{\"name\":\"guest\"}');\n          expect(lastNameValid.getText()).toContain('false');\n          expect(lastNameError.getText()).toContain('minlength');\n          expect(formValid.getText()).toContain('false');\n        });\n\n        it('should be invalid if longer than max length', function() {\n          userLastInput.clear();\n          userLastInput.sendKeys('some ridiculously long name');\n\n          expect(user.getText()).toContain('{\"name\":\"guest\"}');\n          expect(lastNameValid.getText()).toContain('false');\n          expect(lastNameError.getText()).toContain('maxlength');\n          expect(formValid.getText()).toContain('false');\n        });\n      </file>\n    </example>\n */\nvar inputDirective = ['$browser', '$sniffer', function($browser, $sniffer) {\n  return {\n    restrict: 'E',\n    require: '?ngModel',\n    link: function(scope, element, attr, ctrl) {\n      if (ctrl) {\n        (inputType[lowercase(attr.type)] || inputType.text)(scope, element, attr, ctrl, $sniffer,\n                                                            $browser);\n      }\n    }\n  };\n}];\n\nvar VALID_CLASS = 'ng-valid',\n    INVALID_CLASS = 'ng-invalid',\n    PRISTINE_CLASS = 'ng-pristine',\n    DIRTY_CLASS = 'ng-dirty';\n\n/**\n * @ngdoc type\n * @name ngModel.NgModelController\n *\n * @property {string} $viewValue Actual string value in the view.\n * @property {*} $modelValue The value in the model, that the control is bound to.\n * @property {Array.<Function>} $parsers Array of functions to execute, as a pipeline, whenever\n       the control reads value from the DOM.  Each function is called, in turn, passing the value\n       through to the next. The last return value is used to populate the model.\n       Used to sanitize / convert the value as well as validation. For validation,\n       the parsers should update the validity state using\n       {@link ngModel.NgModelController#$setValidity $setValidity()},\n       and return `undefined` for invalid values.\n\n *\n * @property {Array.<Function>} $formatters Array of functions to execute, as a pipeline, whenever\n       the model value changes. Each function is called, in turn, passing the value through to the\n       next. Used to format / convert values for display in the control and validation.\n * ```js\n * function formatter(value) {\n *   if (value) {\n *     return value.toUpperCase();\n *   }\n * }\n * ngModel.$formatters.push(formatter);\n * ```\n *\n * @property {Array.<Function>} $viewChangeListeners Array of functions to execute whenever the\n *     view value has changed. It is called with no arguments, and its return value is ignored.\n *     This can be used in place of additional $watches against the model value.\n *\n * @property {Object} $error An object hash with all errors as keys.\n *\n * @property {boolean} $pristine True if user has not interacted with the control yet.\n * @property {boolean} $dirty True if user has already interacted with the control.\n * @property {boolean} $valid True if there is no error.\n * @property {boolean} $invalid True if at least one error on the control.\n *\n * @description\n *\n * `NgModelController` provides API for the `ng-model` directive. The controller contains\n * services for data-binding, validation, CSS updates, and value formatting and parsing. It\n * purposefully does not contain any logic which deals with DOM rendering or listening to\n * DOM events. Such DOM related logic should be provided by other directives which make use of\n * `NgModelController` for data-binding.\n *\n * ## Custom Control Example\n * This example shows how to use `NgModelController` with a custom control to achieve\n * data-binding. Notice how different directives (`contenteditable`, `ng-model`, and `required`)\n * collaborate together to achieve the desired result.\n *\n * Note that `contenteditable` is an HTML5 attribute, which tells the browser to let the element\n * contents be edited in place by the user.  This will not work on older browsers.\n *\n * We are using the {@link ng.service:$sce $sce} service here and include the {@link ngSanitize $sanitize}\n * module to automatically remove \"bad\" content like inline event listener (e.g. `<span onclick=\"...\">`).\n * However, as we are using `$sce` the model can still decide to to provide unsafe content if it marks\n * that content using the `$sce` service.\n *\n * <example name=\"NgModelController\" module=\"customControl\" deps=\"angular-sanitize.js\">\n    <file name=\"style.css\">\n      [contenteditable] {\n        border: 1px solid black;\n        background-color: white;\n        min-height: 20px;\n      }\n\n      .ng-invalid {\n        border: 1px solid red;\n      }\n\n    </file>\n    <file name=\"script.js\">\n      angular.module('customControl', ['ngSanitize']).\n        directive('contenteditable', ['$sce', function($sce) {\n          return {\n            restrict: 'A', // only activate on element attribute\n            require: '?ngModel', // get a hold of NgModelController\n            link: function(scope, element, attrs, ngModel) {\n              if(!ngModel) return; // do nothing if no ng-model\n\n              // Specify how UI should be updated\n              ngModel.$render = function() {\n                element.html($sce.getTrustedHtml(ngModel.$viewValue || ''));\n              };\n\n              // Listen for change events to enable binding\n              element.on('blur keyup change', function() {\n                scope.$apply(read);\n              });\n              read(); // initialize\n\n              // Write data to the model\n              function read() {\n                var html = element.html();\n                // When we clear the content editable the browser leaves a <br> behind\n                // If strip-br attribute is provided then we strip this out\n                if( attrs.stripBr && html == '<br>' ) {\n                  html = '';\n                }\n                ngModel.$setViewValue(html);\n              }\n            }\n          };\n        }]);\n    </file>\n    <file name=\"index.html\">\n      <form name=\"myForm\">\n       <div contenteditable\n            name=\"myWidget\" ng-model=\"userContent\"\n            strip-br=\"true\"\n            required>Change me!</div>\n        <span ng-show=\"myForm.myWidget.$error.required\">Required!</span>\n       <hr>\n       <textarea ng-model=\"userContent\"></textarea>\n      </form>\n    </file>\n    <file name=\"protractor.js\" type=\"protractor\">\n    it('should data-bind and become invalid', function() {\n      if (browser.params.browser == 'safari' || browser.params.browser == 'firefox') {\n        // SafariDriver can't handle contenteditable\n        // and Firefox driver can't clear contenteditables very well\n        return;\n      }\n      var contentEditable = element(by.css('[contenteditable]'));\n      var content = 'Change me!';\n\n      expect(contentEditable.getText()).toEqual(content);\n\n      contentEditable.clear();\n      contentEditable.sendKeys(protractor.Key.BACK_SPACE);\n      expect(contentEditable.getText()).toEqual('');\n      expect(contentEditable.getAttribute('class')).toMatch(/ng-invalid-required/);\n    });\n    </file>\n * </example>\n *\n *\n */\nvar NgModelController = ['$scope', '$exceptionHandler', '$attrs', '$element', '$parse', '$animate',\n    function($scope, $exceptionHandler, $attr, $element, $parse, $animate) {\n  this.$viewValue = Number.NaN;\n  this.$modelValue = Number.NaN;\n  this.$parsers = [];\n  this.$formatters = [];\n  this.$viewChangeListeners = [];\n  this.$pristine = true;\n  this.$dirty = false;\n  this.$valid = true;\n  this.$invalid = false;\n  this.$name = $attr.name;\n\n  var ngModelGet = $parse($attr.ngModel),\n      ngModelSet = ngModelGet.assign;\n\n  if (!ngModelSet) {\n    throw minErr('ngModel')('nonassign', \"Expression '{0}' is non-assignable. Element: {1}\",\n        $attr.ngModel, startingTag($element));\n  }\n\n  /**\n   * @ngdoc method\n   * @name ngModel.NgModelController#$render\n   *\n   * @description\n   * Called when the view needs to be updated. It is expected that the user of the ng-model\n   * directive will implement this method.\n   */\n  this.$render = noop;\n\n  /**\n   * @ngdoc method\n   * @name ngModel.NgModelController#$isEmpty\n   *\n   * @description\n   * This is called when we need to determine if the value of the input is empty.\n   *\n   * For instance, the required directive does this to work out if the input has data or not.\n   * The default `$isEmpty` function checks whether the value is `undefined`, `''`, `null` or `NaN`.\n   *\n   * You can override this for input directives whose concept of being empty is different to the\n   * default. The `checkboxInputType` directive does this because in its case a value of `false`\n   * implies empty.\n   *\n   * @param {*} value Reference to check.\n   * @returns {boolean} True if `value` is empty.\n   */\n  this.$isEmpty = function(value) {\n    return isUndefined(value) || value === '' || value === null || value !== value;\n  };\n\n  var parentForm = $element.inheritedData('$formController') || nullFormCtrl,\n      invalidCount = 0, // used to easily determine if we are valid\n      $error = this.$error = {}; // keep invalid keys here\n\n\n  // Setup initial state of the control\n  $element.addClass(PRISTINE_CLASS);\n  toggleValidCss(true);\n\n  // convenience method for easy toggling of classes\n  function toggleValidCss(isValid, validationErrorKey) {\n    validationErrorKey = validationErrorKey ? '-' + snake_case(validationErrorKey, '-') : '';\n    $animate.removeClass($element, (isValid ? INVALID_CLASS : VALID_CLASS) + validationErrorKey);\n    $animate.addClass($element, (isValid ? VALID_CLASS : INVALID_CLASS) + validationErrorKey);\n  }\n\n  /**\n   * @ngdoc method\n   * @name ngModel.NgModelController#$setValidity\n   *\n   * @description\n   * Change the validity state, and notifies the form when the control changes validity. (i.e. it\n   * does not notify form if given validator is already marked as invalid).\n   *\n   * This method should be called by validators - i.e. the parser or formatter functions.\n   *\n   * @param {string} validationErrorKey Name of the validator. the `validationErrorKey` will assign\n   *        to `$error[validationErrorKey]=isValid` so that it is available for data-binding.\n   *        The `validationErrorKey` should be in camelCase and will get converted into dash-case\n   *        for class name. Example: `myError` will result in `ng-valid-my-error` and `ng-invalid-my-error`\n   *        class and can be bound to as  `{{someForm.someControl.$error.myError}}` .\n   * @param {boolean} isValid Whether the current state is valid (true) or invalid (false).\n   */\n  this.$setValidity = function(validationErrorKey, isValid) {\n    // Purposeful use of ! here to cast isValid to boolean in case it is undefined\n    // jshint -W018\n    if ($error[validationErrorKey] === !isValid) return;\n    // jshint +W018\n\n    if (isValid) {\n      if ($error[validationErrorKey]) invalidCount--;\n      if (!invalidCount) {\n        toggleValidCss(true);\n        this.$valid = true;\n        this.$invalid = false;\n      }\n    } else {\n      toggleValidCss(false);\n      this.$invalid = true;\n      this.$valid = false;\n      invalidCount++;\n    }\n\n    $error[validationErrorKey] = !isValid;\n    toggleValidCss(isValid, validationErrorKey);\n\n    parentForm.$setValidity(validationErrorKey, isValid, this);\n  };\n\n  /**\n   * @ngdoc method\n   * @name ngModel.NgModelController#$setPristine\n   *\n   * @description\n   * Sets the control to its pristine state.\n   *\n   * This method can be called to remove the 'ng-dirty' class and set the control to its pristine\n   * state (ng-pristine class).\n   */\n  this.$setPristine = function () {\n    this.$dirty = false;\n    this.$pristine = true;\n    $animate.removeClass($element, DIRTY_CLASS);\n    $animate.addClass($element, PRISTINE_CLASS);\n  };\n\n  /**\n   * @ngdoc method\n   * @name ngModel.NgModelController#$setViewValue\n   *\n   * @description\n   * Update the view value.\n   *\n   * This method should be called when the view value changes, typically from within a DOM event handler.\n   * For example {@link ng.directive:input input} and\n   * {@link ng.directive:select select} directives call it.\n   *\n   * It will update the $viewValue, then pass this value through each of the functions in `$parsers`,\n   * which includes any validators. The value that comes out of this `$parsers` pipeline, be applied to\n   * `$modelValue` and the **expression** specified in the `ng-model` attribute.\n   *\n   * Lastly, all the registered change listeners, in the `$viewChangeListeners` list, are called.\n   *\n   * Note that calling this function does not trigger a `$digest`.\n   *\n   * @param {string} value Value from the view.\n   */\n  this.$setViewValue = function(value) {\n    this.$viewValue = value;\n\n    // change to dirty\n    if (this.$pristine) {\n      this.$dirty = true;\n      this.$pristine = false;\n      $animate.removeClass($element, PRISTINE_CLASS);\n      $animate.addClass($element, DIRTY_CLASS);\n      parentForm.$setDirty();\n    }\n\n    forEach(this.$parsers, function(fn) {\n      value = fn(value);\n    });\n\n    if (this.$modelValue !== value) {\n      this.$modelValue = value;\n      ngModelSet($scope, value);\n      forEach(this.$viewChangeListeners, function(listener) {\n        try {\n          listener();\n        } catch(e) {\n          $exceptionHandler(e);\n        }\n      });\n    }\n  };\n\n  // model -> value\n  var ctrl = this;\n\n  $scope.$watch(function ngModelWatch() {\n    var value = ngModelGet($scope);\n\n    // if scope model value and ngModel value are out of sync\n    if (ctrl.$modelValue !== value) {\n\n      var formatters = ctrl.$formatters,\n          idx = formatters.length;\n\n      ctrl.$modelValue = value;\n      while(idx--) {\n        value = formatters[idx](value);\n      }\n\n      if (ctrl.$viewValue !== value) {\n        ctrl.$viewValue = value;\n        ctrl.$render();\n      }\n    }\n\n    return value;\n  });\n}];\n\n\n/**\n * @ngdoc directive\n * @name ngModel\n *\n * @element input\n *\n * @description\n * The `ngModel` directive binds an `input`,`select`, `textarea` (or custom form control) to a\n * property on the scope using {@link ngModel.NgModelController NgModelController},\n * which is created and exposed by this directive.\n *\n * `ngModel` is responsible for:\n *\n * - Binding the view into the model, which other directives such as `input`, `textarea` or `select`\n *   require.\n * - Providing validation behavior (i.e. required, number, email, url).\n * - Keeping the state of the control (valid/invalid, dirty/pristine, validation errors).\n * - Setting related css classes on the element (`ng-valid`, `ng-invalid`, `ng-dirty`, `ng-pristine`) including animations.\n * - Registering the control with its parent {@link ng.directive:form form}.\n *\n * Note: `ngModel` will try to bind to the property given by evaluating the expression on the\n * current scope. If the property doesn't already exist on this scope, it will be created\n * implicitly and added to the scope.\n *\n * For best practices on using `ngModel`, see:\n *\n *  - [https://github.com/angular/angular.js/wiki/Understanding-Scopes]\n *\n * For basic examples, how to use `ngModel`, see:\n *\n *  - {@link ng.directive:input input}\n *    - {@link input[text] text}\n *    - {@link input[checkbox] checkbox}\n *    - {@link input[radio] radio}\n *    - {@link input[number] number}\n *    - {@link input[email] email}\n *    - {@link input[url] url}\n *  - {@link ng.directive:select select}\n *  - {@link ng.directive:textarea textarea}\n *\n * # CSS classes\n * The following CSS classes are added and removed on the associated input/select/textarea element\n * depending on the validity of the model.\n *\n *  - `ng-valid` is set if the model is valid.\n *  - `ng-invalid` is set if the model is invalid.\n *  - `ng-pristine` is set if the model is pristine.\n *  - `ng-dirty` is set if the model is dirty.\n *\n * Keep in mind that ngAnimate can detect each of these classes when added and removed.\n *\n * ## Animation Hooks\n *\n * Animations within models are triggered when any of the associated CSS classes are added and removed\n * on the input element which is attached to the model. These classes are: `.ng-pristine`, `.ng-dirty`,\n * `.ng-invalid` and `.ng-valid` as well as any other validations that are performed on the model itself.\n * The animations that are triggered within ngModel are similar to how they work in ngClass and\n * animations can be hooked into using CSS transitions, keyframes as well as JS animations.\n *\n * The following example shows a simple way to utilize CSS transitions to style an input element\n * that has been rendered as invalid after it has been validated:\n *\n * <pre>\n * //be sure to include ngAnimate as a module to hook into more\n * //advanced animations\n * .my-input {\n *   transition:0.5s linear all;\n *   background: white;\n * }\n * .my-input.ng-invalid {\n *   background: red;\n *   color:white;\n * }\n * </pre>\n *\n * @example\n * <example deps=\"angular-animate.js\" animations=\"true\" fixBase=\"true\">\n     <file name=\"index.html\">\n       <script>\n        function Ctrl($scope) {\n          $scope.val = '1';\n        }\n       </script>\n       <style>\n         .my-input {\n           -webkit-transition:all linear 0.5s;\n           transition:all linear 0.5s;\n           background: transparent;\n         }\n         .my-input.ng-invalid {\n           color:white;\n           background: red;\n         }\n       </style>\n       Update input to see transitions when valid/invalid.\n       Integer is a valid value.\n       <form name=\"testForm\" ng-controller=\"Ctrl\">\n         <input ng-model=\"val\" ng-pattern=\"/^\\d+$/\" name=\"anim\" class=\"my-input\" />\n       </form>\n     </file>\n * </example>\n */\nvar ngModelDirective = function() {\n  return {\n    require: ['ngModel', '^?form'],\n    controller: NgModelController,\n    link: function(scope, element, attr, ctrls) {\n      // notify others, especially parent forms\n\n      var modelCtrl = ctrls[0],\n          formCtrl = ctrls[1] || nullFormCtrl;\n\n      formCtrl.$addControl(modelCtrl);\n\n      scope.$on('$destroy', function() {\n        formCtrl.$removeControl(modelCtrl);\n      });\n    }\n  };\n};\n\n\n/**\n * @ngdoc directive\n * @name ngChange\n *\n * @description\n * Evaluate the given expression when the user changes the input.\n * The expression is evaluated immediately, unlike the JavaScript onchange event\n * which only triggers at the end of a change (usually, when the user leaves the\n * form element or presses the return key).\n * The expression is not evaluated when the value change is coming from the model.\n *\n * Note, this directive requires `ngModel` to be present.\n *\n * @element input\n * @param {expression} ngChange {@link guide/expression Expression} to evaluate upon change\n * in input value.\n *\n * @example\n * <example name=\"ngChange-directive\">\n *   <file name=\"index.html\">\n *     <script>\n *       function Controller($scope) {\n *         $scope.counter = 0;\n *         $scope.change = function() {\n *           $scope.counter++;\n *         };\n *       }\n *     </script>\n *     <div ng-controller=\"Controller\">\n *       <input type=\"checkbox\" ng-model=\"confirmed\" ng-change=\"change()\" id=\"ng-change-example1\" />\n *       <input type=\"checkbox\" ng-model=\"confirmed\" id=\"ng-change-example2\" />\n *       <label for=\"ng-change-example2\">Confirmed</label><br />\n *       <tt>debug = {{confirmed}}</tt><br/>\n *       <tt>counter = {{counter}}</tt><br/>\n *     </div>\n *   </file>\n *   <file name=\"protractor.js\" type=\"protractor\">\n *     var counter = element(by.binding('counter'));\n *     var debug = element(by.binding('confirmed'));\n *\n *     it('should evaluate the expression if changing from view', function() {\n *       expect(counter.getText()).toContain('0');\n *\n *       element(by.id('ng-change-example1')).click();\n *\n *       expect(counter.getText()).toContain('1');\n *       expect(debug.getText()).toContain('true');\n *     });\n *\n *     it('should not evaluate the expression if changing from model', function() {\n *       element(by.id('ng-change-example2')).click();\n\n *       expect(counter.getText()).toContain('0');\n *       expect(debug.getText()).toContain('true');\n *     });\n *   </file>\n * </example>\n */\nvar ngChangeDirective = valueFn({\n  require: 'ngModel',\n  link: function(scope, element, attr, ctrl) {\n    ctrl.$viewChangeListeners.push(function() {\n      scope.$eval(attr.ngChange);\n    });\n  }\n});\n\n\nvar requiredDirective = function() {\n  return {\n    require: '?ngModel',\n    link: function(scope, elm, attr, ctrl) {\n      if (!ctrl) return;\n      attr.required = true; // force truthy in case we are on non input element\n\n      var validator = function(value) {\n        if (attr.required && ctrl.$isEmpty(value)) {\n          ctrl.$setValidity('required', false);\n          return;\n        } else {\n          ctrl.$setValidity('required', true);\n          return value;\n        }\n      };\n\n      ctrl.$formatters.push(validator);\n      ctrl.$parsers.unshift(validator);\n\n      attr.$observe('required', function() {\n        validator(ctrl.$viewValue);\n      });\n    }\n  };\n};\n\n\n/**\n * @ngdoc directive\n * @name ngList\n *\n * @description\n * Text input that converts between a delimited string and an array of strings. The delimiter\n * can be a fixed string (by default a comma) or a regular expression.\n *\n * @element input\n * @param {string=} ngList optional delimiter that should be used to split the value. If\n *   specified in form `/something/` then the value will be converted into a regular expression.\n *\n * @example\n    <example name=\"ngList-directive\">\n      <file name=\"index.html\">\n       <script>\n         function Ctrl($scope) {\n           $scope.names = ['igor', 'misko', 'vojta'];\n         }\n       </script>\n       <form name=\"myForm\" ng-controller=\"Ctrl\">\n         List: <input name=\"namesInput\" ng-model=\"names\" ng-list required>\n         <span class=\"error\" ng-show=\"myForm.namesInput.$error.required\">\n           Required!</span>\n         <br>\n         <tt>names = {{names}}</tt><br/>\n         <tt>myForm.namesInput.$valid = {{myForm.namesInput.$valid}}</tt><br/>\n         <tt>myForm.namesInput.$error = {{myForm.namesInput.$error}}</tt><br/>\n         <tt>myForm.$valid = {{myForm.$valid}}</tt><br/>\n         <tt>myForm.$error.required = {{!!myForm.$error.required}}</tt><br/>\n        </form>\n      </file>\n      <file name=\"protractor.js\" type=\"protractor\">\n        var listInput = element(by.model('names'));\n        var names = element(by.binding('{{names}}'));\n        var valid = element(by.binding('myForm.namesInput.$valid'));\n        var error = element(by.css('span.error'));\n\n        it('should initialize to model', function() {\n          expect(names.getText()).toContain('[\"igor\",\"misko\",\"vojta\"]');\n          expect(valid.getText()).toContain('true');\n          expect(error.getCssValue('display')).toBe('none');\n        });\n\n        it('should be invalid if empty', function() {\n          listInput.clear();\n          listInput.sendKeys('');\n\n          expect(names.getText()).toContain('');\n          expect(valid.getText()).toContain('false');\n          expect(error.getCssValue('display')).not.toBe('none');        });\n      </file>\n    </example>\n */\nvar ngListDirective = function() {\n  return {\n    require: 'ngModel',\n    link: function(scope, element, attr, ctrl) {\n      var match = /\\/(.*)\\//.exec(attr.ngList),\n          separator = match && new RegExp(match[1]) || attr.ngList || ',';\n\n      var parse = function(viewValue) {\n        // If the viewValue is invalid (say required but empty) it will be `undefined`\n        if (isUndefined(viewValue)) return;\n\n        var list = [];\n\n        if (viewValue) {\n          forEach(viewValue.split(separator), function(value) {\n            if (value) list.push(trim(value));\n          });\n        }\n\n        return list;\n      };\n\n      ctrl.$parsers.push(parse);\n      ctrl.$formatters.push(function(value) {\n        if (isArray(value)) {\n          return value.join(', ');\n        }\n\n        return undefined;\n      });\n\n      // Override the standard $isEmpty because an empty array means the input is empty.\n      ctrl.$isEmpty = function(value) {\n        return !value || !value.length;\n      };\n    }\n  };\n};\n\n\nvar CONSTANT_VALUE_REGEXP = /^(true|false|\\d+)$/;\n/**\n * @ngdoc directive\n * @name ngValue\n *\n * @description\n * Binds the given expression to the value of `input[select]` or `input[radio]`, so\n * that when the element is selected, the `ngModel` of that element is set to the\n * bound value.\n *\n * `ngValue` is useful when dynamically generating lists of radio buttons using `ng-repeat`, as\n * shown below.\n *\n * @element input\n * @param {string=} ngValue angular expression, whose value will be bound to the `value` attribute\n *   of the `input` element\n *\n * @example\n    <example name=\"ngValue-directive\">\n      <file name=\"index.html\">\n       <script>\n          function Ctrl($scope) {\n            $scope.names = ['pizza', 'unicorns', 'robots'];\n            $scope.my = { favorite: 'unicorns' };\n          }\n       </script>\n        <form ng-controller=\"Ctrl\">\n          <h2>Which is your favorite?</h2>\n            <label ng-repeat=\"name in names\" for=\"{{name}}\">\n              {{name}}\n              <input type=\"radio\"\n                     ng-model=\"my.favorite\"\n                     ng-value=\"name\"\n                     id=\"{{name}}\"\n                     name=\"favorite\">\n            </label>\n          <div>You chose {{my.favorite}}</div>\n        </form>\n      </file>\n      <file name=\"protractor.js\" type=\"protractor\">\n        var favorite = element(by.binding('my.favorite'));\n\n        it('should initialize to model', function() {\n          expect(favorite.getText()).toContain('unicorns');\n        });\n        it('should bind the values to the inputs', function() {\n          element.all(by.model('my.favorite')).get(0).click();\n          expect(favorite.getText()).toContain('pizza');\n        });\n      </file>\n    </example>\n */\nvar ngValueDirective = function() {\n  return {\n    priority: 100,\n    compile: function(tpl, tplAttr) {\n      if (CONSTANT_VALUE_REGEXP.test(tplAttr.ngValue)) {\n        return function ngValueConstantLink(scope, elm, attr) {\n          attr.$set('value', scope.$eval(attr.ngValue));\n        };\n      } else {\n        return function ngValueLink(scope, elm, attr) {\n          scope.$watch(attr.ngValue, function valueWatchAction(value) {\n            attr.$set('value', value);\n          });\n        };\n      }\n    }\n  };\n};\n\n/**\n * @ngdoc directive\n * @name ngBind\n * @restrict AC\n *\n * @description\n * The `ngBind` attribute tells Angular to replace the text content of the specified HTML element\n * with the value of a given expression, and to update the text content when the value of that\n * expression changes.\n *\n * Typically, you don't use `ngBind` directly, but instead you use the double curly markup like\n * `{{ expression }}` which is similar but less verbose.\n *\n * It is preferable to use `ngBind` instead of `{{ expression }}` when a template is momentarily\n * displayed by the browser in its raw state before Angular compiles it. Since `ngBind` is an\n * element attribute, it makes the bindings invisible to the user while the page is loading.\n *\n * An alternative solution to this problem would be using the\n * {@link ng.directive:ngCloak ngCloak} directive.\n *\n *\n * @element ANY\n * @param {expression} ngBind {@link guide/expression Expression} to evaluate.\n *\n * @example\n * Enter a name in the Live Preview text box; the greeting below the text box changes instantly.\n   <example>\n     <file name=\"index.html\">\n       <script>\n         function Ctrl($scope) {\n           $scope.name = 'Whirled';\n         }\n       </script>\n       <div ng-controller=\"Ctrl\">\n         Enter name: <input type=\"text\" ng-model=\"name\"><br>\n         Hello <span ng-bind=\"name\"></span>!\n       </div>\n     </file>\n     <file name=\"protractor.js\" type=\"protractor\">\n       it('should check ng-bind', function() {\n         var nameInput = element(by.model('name'));\n\n         expect(element(by.binding('name')).getText()).toBe('Whirled');\n         nameInput.clear();\n         nameInput.sendKeys('world');\n         expect(element(by.binding('name')).getText()).toBe('world');\n       });\n     </file>\n   </example>\n */\nvar ngBindDirective = ngDirective(function(scope, element, attr) {\n  element.addClass('ng-binding').data('$binding', attr.ngBind);\n  scope.$watch(attr.ngBind, function ngBindWatchAction(value) {\n    // We are purposefully using == here rather than === because we want to\n    // catch when value is \"null or undefined\"\n    // jshint -W041\n    element.text(value == undefined ? '' : value);\n  });\n});\n\n\n/**\n * @ngdoc directive\n * @name ngBindTemplate\n *\n * @description\n * The `ngBindTemplate` directive specifies that the element\n * text content should be replaced with the interpolation of the template\n * in the `ngBindTemplate` attribute.\n * Unlike `ngBind`, the `ngBindTemplate` can contain multiple `{{` `}}`\n * expressions. This directive is needed since some HTML elements\n * (such as TITLE and OPTION) cannot contain SPAN elements.\n *\n * @element ANY\n * @param {string} ngBindTemplate template of form\n *   <tt>{{</tt> <tt>expression</tt> <tt>}}</tt> to eval.\n *\n * @example\n * Try it here: enter text in text box and watch the greeting change.\n   <example>\n     <file name=\"index.html\">\n       <script>\n         function Ctrl($scope) {\n           $scope.salutation = 'Hello';\n           $scope.name = 'World';\n         }\n       </script>\n       <div ng-controller=\"Ctrl\">\n        Salutation: <input type=\"text\" ng-model=\"salutation\"><br>\n        Name: <input type=\"text\" ng-model=\"name\"><br>\n        <pre ng-bind-template=\"{{salutation}} {{name}}!\"></pre>\n       </div>\n     </file>\n     <file name=\"protractor.js\" type=\"protractor\">\n       it('should check ng-bind', function() {\n         var salutationElem = element(by.binding('salutation'));\n         var salutationInput = element(by.model('salutation'));\n         var nameInput = element(by.model('name'));\n\n         expect(salutationElem.getText()).toBe('Hello World!');\n\n         salutationInput.clear();\n         salutationInput.sendKeys('Greetings');\n         nameInput.clear();\n         nameInput.sendKeys('user');\n\n         expect(salutationElem.getText()).toBe('Greetings user!');\n       });\n     </file>\n   </example>\n */\nvar ngBindTemplateDirective = ['$interpolate', function($interpolate) {\n  return function(scope, element, attr) {\n    // TODO: move this to scenario runner\n    var interpolateFn = $interpolate(element.attr(attr.$attr.ngBindTemplate));\n    element.addClass('ng-binding').data('$binding', interpolateFn);\n    attr.$observe('ngBindTemplate', function(value) {\n      element.text(value);\n    });\n  };\n}];\n\n\n/**\n * @ngdoc directive\n * @name ngBindHtml\n *\n * @description\n * Creates a binding that will innerHTML the result of evaluating the `expression` into the current\n * element in a secure way.  By default, the innerHTML-ed content will be sanitized using the {@link\n * ngSanitize.$sanitize $sanitize} service.  To utilize this functionality, ensure that `$sanitize`\n * is available, for example, by including {@link ngSanitize} in your module's dependencies (not in\n * core Angular.)  You may also bypass sanitization for values you know are safe. To do so, bind to\n * an explicitly trusted value via {@link ng.$sce#trustAsHtml $sce.trustAsHtml}.  See the example\n * under {@link ng.$sce#Example Strict Contextual Escaping (SCE)}.\n *\n * Note: If a `$sanitize` service is unavailable and the bound value isn't explicitly trusted, you\n * will have an exception (instead of an exploit.)\n *\n * @element ANY\n * @param {expression} ngBindHtml {@link guide/expression Expression} to evaluate.\n *\n * @example\n   Try it here: enter text in text box and watch the greeting change.\n\n   <example module=\"ngBindHtmlExample\" deps=\"angular-sanitize.js\">\n     <file name=\"index.html\">\n       <div ng-controller=\"ngBindHtmlCtrl\">\n        <p ng-bind-html=\"myHTML\"></p>\n       </div>\n     </file>\n\n     <file name=\"script.js\">\n       angular.module('ngBindHtmlExample', ['ngSanitize'])\n\n       .controller('ngBindHtmlCtrl', ['$scope', function ngBindHtmlCtrl($scope) {\n         $scope.myHTML =\n            'I am an <code>HTML</code>string with <a href=\"#\">links!</a> and other <em>stuff</em>';\n       }]);\n     </file>\n\n     <file name=\"protractor.js\" type=\"protractor\">\n       it('should check ng-bind-html', function() {\n         expect(element(by.binding('myHTML')).getText()).toBe(\n             'I am an HTMLstring with links! and other stuff');\n       });\n     </file>\n   </example>\n */\nvar ngBindHtmlDirective = ['$sce', '$parse', function($sce, $parse) {\n  return function(scope, element, attr) {\n    element.addClass('ng-binding').data('$binding', attr.ngBindHtml);\n\n    var parsed = $parse(attr.ngBindHtml);\n    function getStringValue() { return (parsed(scope) || '').toString(); }\n\n    scope.$watch(getStringValue, function ngBindHtmlWatchAction(value) {\n      element.html($sce.getTrustedHtml(parsed(scope)) || '');\n    });\n  };\n}];\n\nfunction classDirective(name, selector) {\n  name = 'ngClass' + name;\n  return ['$animate', function($animate) {\n    return {\n      restrict: 'AC',\n      link: function(scope, element, attr) {\n        var oldVal;\n\n        scope.$watch(attr[name], ngClassWatchAction, true);\n\n        attr.$observe('class', function(value) {\n          ngClassWatchAction(scope.$eval(attr[name]));\n        });\n\n\n        if (name !== 'ngClass') {\n          scope.$watch('$index', function($index, old$index) {\n            // jshint bitwise: false\n            var mod = $index & 1;\n            if (mod !== (old$index & 1)) {\n              var classes = arrayClasses(scope.$eval(attr[name]));\n              mod === selector ?\n                addClasses(classes) :\n                removeClasses(classes);\n            }\n          });\n        }\n\n        function addClasses(classes) {\n          var newClasses = digestClassCounts(classes, 1);\n          attr.$addClass(newClasses);\n        }\n\n        function removeClasses(classes) {\n          var newClasses = digestClassCounts(classes, -1);\n          attr.$removeClass(newClasses);\n        }\n\n        function digestClassCounts (classes, count) {\n          var classCounts = element.data('$classCounts') || {};\n          var classesToUpdate = [];\n          forEach(classes, function (className) {\n            if (count > 0 || classCounts[className]) {\n              classCounts[className] = (classCounts[className] || 0) + count;\n              if (classCounts[className] === +(count > 0)) {\n                classesToUpdate.push(className);\n              }\n            }\n          });\n          element.data('$classCounts', classCounts);\n          return classesToUpdate.join(' ');\n        }\n\n        function updateClasses (oldClasses, newClasses) {\n          var toAdd = arrayDifference(newClasses, oldClasses);\n          var toRemove = arrayDifference(oldClasses, newClasses);\n          toRemove = digestClassCounts(toRemove, -1);\n          toAdd = digestClassCounts(toAdd, 1);\n\n          if (toAdd.length === 0) {\n            $animate.removeClass(element, toRemove);\n          } else if (toRemove.length === 0) {\n            $animate.addClass(element, toAdd);\n          } else {\n            $animate.setClass(element, toAdd, toRemove);\n          }\n        }\n\n        function ngClassWatchAction(newVal) {\n          if (selector === true || scope.$index % 2 === selector) {\n            var newClasses = arrayClasses(newVal || []);\n            if (!oldVal) {\n              addClasses(newClasses);\n            } else if (!equals(newVal,oldVal)) {\n              var oldClasses = arrayClasses(oldVal);\n              updateClasses(oldClasses, newClasses);\n            }\n          }\n          oldVal = shallowCopy(newVal);\n        }\n      }\n    };\n\n    function arrayDifference(tokens1, tokens2) {\n      var values = [];\n\n      outer:\n      for(var i = 0; i < tokens1.length; i++) {\n        var token = tokens1[i];\n        for(var j = 0; j < tokens2.length; j++) {\n          if(token == tokens2[j]) continue outer;\n        }\n        values.push(token);\n      }\n      return values;\n    }\n\n    function arrayClasses (classVal) {\n      if (isArray(classVal)) {\n        return classVal;\n      } else if (isString(classVal)) {\n        return classVal.split(' ');\n      } else if (isObject(classVal)) {\n        var classes = [], i = 0;\n        forEach(classVal, function(v, k) {\n          if (v) {\n            classes = classes.concat(k.split(' '));\n          }\n        });\n        return classes;\n      }\n      return classVal;\n    }\n  }];\n}\n\n/**\n * @ngdoc directive\n * @name ngClass\n * @restrict AC\n *\n * @description\n * The `ngClass` directive allows you to dynamically set CSS classes on an HTML element by databinding\n * an expression that represents all classes to be added.\n *\n * The directive operates in three different ways, depending on which of three types the expression\n * evaluates to:\n *\n * 1. If the expression evaluates to a string, the string should be one or more space-delimited class\n * names.\n *\n * 2. If the expression evaluates to an array, each element of the array should be a string that is\n * one or more space-delimited class names.\n *\n * 3. If the expression evaluates to an object, then for each key-value pair of the\n * object with a truthy value the corresponding key is used as a class name.\n *\n * The directive won't add duplicate classes if a particular class was already set.\n *\n * When the expression changes, the previously added classes are removed and only then the\n * new classes are added.\n *\n * @animations\n * add - happens just before the class is applied to the element\n * remove - happens just before the class is removed from the element\n *\n * @element ANY\n * @param {expression} ngClass {@link guide/expression Expression} to eval. The result\n *   of the evaluation can be a string representing space delimited class\n *   names, an array, or a map of class names to boolean values. In the case of a map, the\n *   names of the properties whose values are truthy will be added as css classes to the\n *   element.\n *\n * @example Example that demonstrates basic bindings via ngClass directive.\n   <example>\n     <file name=\"index.html\">\n       <p ng-class=\"{strike: deleted, bold: important, red: error}\">Map Syntax Example</p>\n       <input type=\"checkbox\" ng-model=\"deleted\"> deleted (apply \"strike\" class)<br>\n       <input type=\"checkbox\" ng-model=\"important\"> important (apply \"bold\" class)<br>\n       <input type=\"checkbox\" ng-model=\"error\"> error (apply \"red\" class)\n       <hr>\n       <p ng-class=\"style\">Using String Syntax</p>\n       <input type=\"text\" ng-model=\"style\" placeholder=\"Type: bold strike red\">\n       <hr>\n       <p ng-class=\"[style1, style2, style3]\">Using Array Syntax</p>\n       <input ng-model=\"style1\" placeholder=\"Type: bold, strike or red\"><br>\n       <input ng-model=\"style2\" placeholder=\"Type: bold, strike or red\"><br>\n       <input ng-model=\"style3\" placeholder=\"Type: bold, strike or red\"><br>\n     </file>\n     <file name=\"style.css\">\n       .strike {\n         text-decoration: line-through;\n       }\n       .bold {\n           font-weight: bold;\n       }\n       .red {\n           color: red;\n       }\n     </file>\n     <file name=\"protractor.js\" type=\"protractor\">\n       var ps = element.all(by.css('p'));\n\n       it('should let you toggle the class', function() {\n\n         expect(ps.first().getAttribute('class')).not.toMatch(/bold/);\n         expect(ps.first().getAttribute('class')).not.toMatch(/red/);\n\n         element(by.model('important')).click();\n         expect(ps.first().getAttribute('class')).toMatch(/bold/);\n\n         element(by.model('error')).click();\n         expect(ps.first().getAttribute('class')).toMatch(/red/);\n       });\n\n       it('should let you toggle string example', function() {\n         expect(ps.get(1).getAttribute('class')).toBe('');\n         element(by.model('style')).clear();\n         element(by.model('style')).sendKeys('red');\n         expect(ps.get(1).getAttribute('class')).toBe('red');\n       });\n\n       it('array example should have 3 classes', function() {\n         expect(ps.last().getAttribute('class')).toBe('');\n         element(by.model('style1')).sendKeys('bold');\n         element(by.model('style2')).sendKeys('strike');\n         element(by.model('style3')).sendKeys('red');\n         expect(ps.last().getAttribute('class')).toBe('bold strike red');\n       });\n     </file>\n   </example>\n\n   ## Animations\n\n   The example below demonstrates how to perform animations using ngClass.\n\n   <example module=\"ngAnimate\" deps=\"angular-animate.js\" animations=\"true\">\n     <file name=\"index.html\">\n      <input id=\"setbtn\" type=\"button\" value=\"set\" ng-click=\"myVar='my-class'\">\n      <input id=\"clearbtn\" type=\"button\" value=\"clear\" ng-click=\"myVar=''\">\n      <br>\n      <span class=\"base-class\" ng-class=\"myVar\">Sample Text</span>\n     </file>\n     <file name=\"style.css\">\n       .base-class {\n         -webkit-transition:all cubic-bezier(0.250, 0.460, 0.450, 0.940) 0.5s;\n         transition:all cubic-bezier(0.250, 0.460, 0.450, 0.940) 0.5s;\n       }\n\n       .base-class.my-class {\n         color: red;\n         font-size:3em;\n       }\n     </file>\n     <file name=\"protractor.js\" type=\"protractor\">\n       it('should check ng-class', function() {\n         expect(element(by.css('.base-class')).getAttribute('class')).not.\n           toMatch(/my-class/);\n\n         element(by.id('setbtn')).click();\n\n         expect(element(by.css('.base-class')).getAttribute('class')).\n           toMatch(/my-class/);\n\n         element(by.id('clearbtn')).click();\n\n         expect(element(by.css('.base-class')).getAttribute('class')).not.\n           toMatch(/my-class/);\n       });\n     </file>\n   </example>\n\n\n   ## ngClass and pre-existing CSS3 Transitions/Animations\n   The ngClass directive still supports CSS3 Transitions/Animations even if they do not follow the ngAnimate CSS naming structure.\n   Upon animation ngAnimate will apply supplementary CSS classes to track the start and end of an animation, but this will not hinder\n   any pre-existing CSS transitions already on the element. To get an idea of what happens during a class-based animation, be sure\n   to view the step by step details of {@link ngAnimate.$animate#addclass $animate.addClass} and\n   {@link ngAnimate.$animate#removeclass $animate.removeClass}.\n */\nvar ngClassDirective = classDirective('', true);\n\n/**\n * @ngdoc directive\n * @name ngClassOdd\n * @restrict AC\n *\n * @description\n * The `ngClassOdd` and `ngClassEven` directives work exactly as\n * {@link ng.directive:ngClass ngClass}, except they work in\n * conjunction with `ngRepeat` and take effect only on odd (even) rows.\n *\n * This directive can be applied only within the scope of an\n * {@link ng.directive:ngRepeat ngRepeat}.\n *\n * @element ANY\n * @param {expression} ngClassOdd {@link guide/expression Expression} to eval. The result\n *   of the evaluation can be a string representing space delimited class names or an array.\n *\n * @example\n   <example>\n     <file name=\"index.html\">\n        <ol ng-init=\"names=['John', 'Mary', 'Cate', 'Suz']\">\n          <li ng-repeat=\"name in names\">\n           <span ng-class-odd=\"'odd'\" ng-class-even=\"'even'\">\n             {{name}}\n           </span>\n          </li>\n        </ol>\n     </file>\n     <file name=\"style.css\">\n       .odd {\n         color: red;\n       }\n       .even {\n         color: blue;\n       }\n     </file>\n     <file name=\"protractor.js\" type=\"protractor\">\n       it('should check ng-class-odd and ng-class-even', function() {\n         expect(element(by.repeater('name in names').row(0).column('name')).getAttribute('class')).\n           toMatch(/odd/);\n         expect(element(by.repeater('name in names').row(1).column('name')).getAttribute('class')).\n           toMatch(/even/);\n       });\n     </file>\n   </example>\n */\nvar ngClassOddDirective = classDirective('Odd', 0);\n\n/**\n * @ngdoc directive\n * @name ngClassEven\n * @restrict AC\n *\n * @description\n * The `ngClassOdd` and `ngClassEven` directives work exactly as\n * {@link ng.directive:ngClass ngClass}, except they work in\n * conjunction with `ngRepeat` and take effect only on odd (even) rows.\n *\n * This directive can be applied only within the scope of an\n * {@link ng.directive:ngRepeat ngRepeat}.\n *\n * @element ANY\n * @param {expression} ngClassEven {@link guide/expression Expression} to eval. The\n *   result of the evaluation can be a string representing space delimited class names or an array.\n *\n * @example\n   <example>\n     <file name=\"index.html\">\n        <ol ng-init=\"names=['John', 'Mary', 'Cate', 'Suz']\">\n          <li ng-repeat=\"name in names\">\n           <span ng-class-odd=\"'odd'\" ng-class-even=\"'even'\">\n             {{name}} &nbsp; &nbsp; &nbsp;\n           </span>\n          </li>\n        </ol>\n     </file>\n     <file name=\"style.css\">\n       .odd {\n         color: red;\n       }\n       .even {\n         color: blue;\n       }\n     </file>\n     <file name=\"protractor.js\" type=\"protractor\">\n       it('should check ng-class-odd and ng-class-even', function() {\n         expect(element(by.repeater('name in names').row(0).column('name')).getAttribute('class')).\n           toMatch(/odd/);\n         expect(element(by.repeater('name in names').row(1).column('name')).getAttribute('class')).\n           toMatch(/even/);\n       });\n     </file>\n   </example>\n */\nvar ngClassEvenDirective = classDirective('Even', 1);\n\n/**\n * @ngdoc directive\n * @name ngCloak\n * @restrict AC\n *\n * @description\n * The `ngCloak` directive is used to prevent the Angular html template from being briefly\n * displayed by the browser in its raw (uncompiled) form while your application is loading. Use this\n * directive to avoid the undesirable flicker effect caused by the html template display.\n *\n * The directive can be applied to the `<body>` element, but the preferred usage is to apply\n * multiple `ngCloak` directives to small portions of the page to permit progressive rendering\n * of the browser view.\n *\n * `ngCloak` works in cooperation with the following css rule embedded within `angular.js` and\n * `angular.min.js`.\n * For CSP mode please add `angular-csp.css` to your html file (see {@link ng.directive:ngCsp ngCsp}).\n *\n * ```css\n * [ng\\:cloak], [ng-cloak], [data-ng-cloak], [x-ng-cloak], .ng-cloak, .x-ng-cloak {\n *   display: none !important;\n * }\n * ```\n *\n * When this css rule is loaded by the browser, all html elements (including their children) that\n * are tagged with the `ngCloak` directive are hidden. When Angular encounters this directive\n * during the compilation of the template it deletes the `ngCloak` element attribute, making\n * the compiled element visible.\n *\n * For the best result, the `angular.js` script must be loaded in the head section of the html\n * document; alternatively, the css rule above must be included in the external stylesheet of the\n * application.\n *\n * Legacy browsers, like IE7, do not provide attribute selector support (added in CSS 2.1) so they\n * cannot match the `[ng\\:cloak]` selector. To work around this limitation, you must add the css\n * class `ng-cloak` in addition to the `ngCloak` directive as shown in the example below.\n *\n * @element ANY\n *\n * @example\n   <example>\n     <file name=\"index.html\">\n        <div id=\"template1\" ng-cloak>{{ 'hello' }}</div>\n        <div id=\"template2\" ng-cloak class=\"ng-cloak\">{{ 'hello IE7' }}</div>\n     </file>\n     <file name=\"protractor.js\" type=\"protractor\">\n       it('should remove the template directive and css class', function() {\n         expect($('#template1').getAttribute('ng-cloak')).\n           toBeNull();\n         expect($('#template2').getAttribute('ng-cloak')).\n           toBeNull();\n       });\n     </file>\n   </example>\n *\n */\nvar ngCloakDirective = ngDirective({\n  compile: function(element, attr) {\n    attr.$set('ngCloak', undefined);\n    element.removeClass('ng-cloak');\n  }\n});\n\n/**\n * @ngdoc directive\n * @name ngController\n *\n * @description\n * The `ngController` directive attaches a controller class to the view. This is a key aspect of how angular\n * supports the principles behind the Model-View-Controller design pattern.\n *\n * MVC components in angular:\n *\n * * Model — The Model is scope properties; scopes are attached to the DOM where scope properties\n *   are accessed through bindings.\n * * View — The template (HTML with data bindings) that is rendered into the View.\n * * Controller — The `ngController` directive specifies a Controller class; the class contains business\n *   logic behind the application to decorate the scope with functions and values\n *\n * Note that you can also attach controllers to the DOM by declaring it in a route definition\n * via the {@link ngRoute.$route $route} service. A common mistake is to declare the controller\n * again using `ng-controller` in the template itself.  This will cause the controller to be attached\n * and executed twice.\n *\n * @element ANY\n * @scope\n * @param {expression} ngController Name of a globally accessible constructor function or an\n *     {@link guide/expression expression} that on the current scope evaluates to a\n *     constructor function. The controller instance can be published into a scope property\n *     by specifying `as propertyName`.\n *\n * @example\n * Here is a simple form for editing user contact information. Adding, removing, clearing, and\n * greeting are methods declared on the controller (see source tab). These methods can\n * easily be called from the angular markup. Any changes to the data are automatically reflected\n * in the View without the need for a manual update.\n *\n * Two different declaration styles are included below:\n *\n * * one binds methods and properties directly onto the controller using `this`:\n * `ng-controller=\"SettingsController1 as settings\"`\n * * one injects `$scope` into the controller:\n * `ng-controller=\"SettingsController2\"`\n *\n * The second option is more common in the Angular community, and is generally used in boilerplates\n * and in this guide. However, there are advantages to binding properties directly to the controller\n * and avoiding scope.\n *\n * * Using `controller as` makes it obvious which controller you are accessing in the template when\n * multiple controllers apply to an element.\n * * If you are writing your controllers as classes you have easier access to the properties and\n * methods, which will appear on the scope, from inside the controller code.\n * * Since there is always a `.` in the bindings, you don't have to worry about prototypal\n * inheritance masking primitives.\n *\n * This example demonstrates the `controller as` syntax.\n *\n * <example name=\"ngControllerAs\">\n *   <file name=\"index.html\">\n *    <div id=\"ctrl-as-exmpl\" ng-controller=\"SettingsController1 as settings\">\n *      Name: <input type=\"text\" ng-model=\"settings.name\"/>\n *      [ <a href=\"\" ng-click=\"settings.greet()\">greet</a> ]<br/>\n *      Contact:\n *      <ul>\n *        <li ng-repeat=\"contact in settings.contacts\">\n *          <select ng-model=\"contact.type\">\n *             <option>phone</option>\n *             <option>email</option>\n *          </select>\n *          <input type=\"text\" ng-model=\"contact.value\"/>\n *          [ <a href=\"\" ng-click=\"settings.clearContact(contact)\">clear</a>\n *          | <a href=\"\" ng-click=\"settings.removeContact(contact)\">X</a> ]\n *        </li>\n *        <li>[ <a href=\"\" ng-click=\"settings.addContact()\">add</a> ]</li>\n *     </ul>\n *    </div>\n *   </file>\n *   <file name=\"app.js\">\n *    function SettingsController1() {\n *      this.name = \"John Smith\";\n *      this.contacts = [\n *        {type: 'phone', value: '408 555 1212'},\n *        {type: 'email', value: 'john.smith@example.org'} ];\n *    }\n *\n *    SettingsController1.prototype.greet = function() {\n *      alert(this.name);\n *    };\n *\n *    SettingsController1.prototype.addContact = function() {\n *      this.contacts.push({type: 'email', value: 'yourname@example.org'});\n *    };\n *\n *    SettingsController1.prototype.removeContact = function(contactToRemove) {\n *     var index = this.contacts.indexOf(contactToRemove);\n *      this.contacts.splice(index, 1);\n *    };\n *\n *    SettingsController1.prototype.clearContact = function(contact) {\n *      contact.type = 'phone';\n *      contact.value = '';\n *    };\n *   </file>\n *   <file name=\"protractor.js\" type=\"protractor\">\n *     it('should check controller as', function() {\n *       var container = element(by.id('ctrl-as-exmpl'));\n *         expect(container.findElement(by.model('settings.name'))\n *           .getAttribute('value')).toBe('John Smith');\n *\n *       var firstRepeat =\n *           container.findElement(by.repeater('contact in settings.contacts').row(0));\n *       var secondRepeat =\n *           container.findElement(by.repeater('contact in settings.contacts').row(1));\n *\n *       expect(firstRepeat.findElement(by.model('contact.value')).getAttribute('value'))\n *           .toBe('408 555 1212');\n *\n *       expect(secondRepeat.findElement(by.model('contact.value')).getAttribute('value'))\n *           .toBe('john.smith@example.org');\n *\n *       firstRepeat.findElement(by.linkText('clear')).click();\n *\n *       expect(firstRepeat.findElement(by.model('contact.value')).getAttribute('value'))\n *           .toBe('');\n *\n *       container.findElement(by.linkText('add')).click();\n *\n *       expect(container.findElement(by.repeater('contact in settings.contacts').row(2))\n *           .findElement(by.model('contact.value'))\n *           .getAttribute('value'))\n *           .toBe('yourname@example.org');\n *     });\n *   </file>\n * </example>\n *\n * This example demonstrates the \"attach to `$scope`\" style of controller.\n *\n * <example name=\"ngController\">\n *  <file name=\"index.html\">\n *   <div id=\"ctrl-exmpl\" ng-controller=\"SettingsController2\">\n *     Name: <input type=\"text\" ng-model=\"name\"/>\n *     [ <a href=\"\" ng-click=\"greet()\">greet</a> ]<br/>\n *     Contact:\n *     <ul>\n *       <li ng-repeat=\"contact in contacts\">\n *         <select ng-model=\"contact.type\">\n *            <option>phone</option>\n *            <option>email</option>\n *         </select>\n *         <input type=\"text\" ng-model=\"contact.value\"/>\n *         [ <a href=\"\" ng-click=\"clearContact(contact)\">clear</a>\n *         | <a href=\"\" ng-click=\"removeContact(contact)\">X</a> ]\n *       </li>\n *       <li>[ <a href=\"\" ng-click=\"addContact()\">add</a> ]</li>\n *    </ul>\n *   </div>\n *  </file>\n *  <file name=\"app.js\">\n *   function SettingsController2($scope) {\n *     $scope.name = \"John Smith\";\n *     $scope.contacts = [\n *       {type:'phone', value:'408 555 1212'},\n *       {type:'email', value:'john.smith@example.org'} ];\n *\n *     $scope.greet = function() {\n *       alert($scope.name);\n *     };\n *\n *     $scope.addContact = function() {\n *       $scope.contacts.push({type:'email', value:'yourname@example.org'});\n *     };\n *\n *     $scope.removeContact = function(contactToRemove) {\n *       var index = $scope.contacts.indexOf(contactToRemove);\n *       $scope.contacts.splice(index, 1);\n *     };\n *\n *     $scope.clearContact = function(contact) {\n *       contact.type = 'phone';\n *       contact.value = '';\n *     };\n *   }\n *  </file>\n *  <file name=\"protractor.js\" type=\"protractor\">\n *    it('should check controller', function() {\n *      var container = element(by.id('ctrl-exmpl'));\n *\n *      expect(container.findElement(by.model('name'))\n *          .getAttribute('value')).toBe('John Smith');\n *\n *      var firstRepeat =\n *          container.findElement(by.repeater('contact in contacts').row(0));\n *      var secondRepeat =\n *          container.findElement(by.repeater('contact in contacts').row(1));\n *\n *      expect(firstRepeat.findElement(by.model('contact.value')).getAttribute('value'))\n *          .toBe('408 555 1212');\n *      expect(secondRepeat.findElement(by.model('contact.value')).getAttribute('value'))\n *          .toBe('john.smith@example.org');\n *\n *      firstRepeat.findElement(by.linkText('clear')).click();\n *\n *      expect(firstRepeat.findElement(by.model('contact.value')).getAttribute('value'))\n *          .toBe('');\n *\n *      container.findElement(by.linkText('add')).click();\n *\n *      expect(container.findElement(by.repeater('contact in contacts').row(2))\n *          .findElement(by.model('contact.value'))\n *          .getAttribute('value'))\n *          .toBe('yourname@example.org');\n *    });\n *  </file>\n *</example>\n\n */\nvar ngControllerDirective = [function() {\n  return {\n    scope: true,\n    controller: '@',\n    priority: 500\n  };\n}];\n\n/**\n * @ngdoc directive\n * @name ngCsp\n *\n * @element html\n * @description\n * Enables [CSP (Content Security Policy)](https://developer.mozilla.org/en/Security/CSP) support.\n *\n * This is necessary when developing things like Google Chrome Extensions.\n *\n * CSP forbids apps to use `eval` or `Function(string)` generated functions (among other things).\n * For us to be compatible, we just need to implement the \"getterFn\" in $parse without violating\n * any of these restrictions.\n *\n * AngularJS uses `Function(string)` generated functions as a speed optimization. Applying the `ngCsp`\n * directive will cause Angular to use CSP compatibility mode. When this mode is on AngularJS will\n * evaluate all expressions up to 30% slower than in non-CSP mode, but no security violations will\n * be raised.\n *\n * CSP forbids JavaScript to inline stylesheet rules. In non CSP mode Angular automatically\n * includes some CSS rules (e.g. {@link ng.directive:ngCloak ngCloak}).\n * To make those directives work in CSP mode, include the `angular-csp.css` manually.\n *\n * In order to use this feature put the `ngCsp` directive on the root element of the application.\n *\n * *Note: This directive is only available in the `ng-csp` and `data-ng-csp` attribute form.*\n *\n * @example\n * This example shows how to apply the `ngCsp` directive to the `html` tag.\n   ```html\n     <!doctype html>\n     <html ng-app ng-csp>\n     ...\n     ...\n     </html>\n   ```\n */\n\n// ngCsp is not implemented as a proper directive any more, because we need it be processed while we bootstrap\n// the system (before $parse is instantiated), for this reason we just have a csp() fn that looks for ng-csp attribute\n// anywhere in the current doc\n\n/**\n * @ngdoc directive\n * @name ngClick\n *\n * @description\n * The ngClick directive allows you to specify custom behavior when\n * an element is clicked.\n *\n * @element ANY\n * @priority 0\n * @param {expression} ngClick {@link guide/expression Expression} to evaluate upon\n * click. ({@link guide/expression#-event- Event object is available as `$event`})\n *\n * @example\n   <example>\n     <file name=\"index.html\">\n      <button ng-click=\"count = count + 1\" ng-init=\"count=0\">\n        Increment\n      </button>\n      count: {{count}}\n     </file>\n     <file name=\"protractor.js\" type=\"protractor\">\n       it('should check ng-click', function() {\n         expect(element(by.binding('count')).getText()).toMatch('0');\n         element(by.css('button')).click();\n         expect(element(by.binding('count')).getText()).toMatch('1');\n       });\n     </file>\n   </example>\n */\n/*\n * A directive that allows creation of custom onclick handlers that are defined as angular\n * expressions and are compiled and executed within the current scope.\n *\n * Events that are handled via these handler are always configured not to propagate further.\n */\nvar ngEventDirectives = {};\nforEach(\n  'click dblclick mousedown mouseup mouseover mouseout mousemove mouseenter mouseleave keydown keyup keypress submit focus blur copy cut paste'.split(' '),\n  function(name) {\n    var directiveName = directiveNormalize('ng-' + name);\n    ngEventDirectives[directiveName] = ['$parse', function($parse) {\n      return {\n        compile: function($element, attr) {\n          var fn = $parse(attr[directiveName]);\n          return function(scope, element, attr) {\n            element.on(lowercase(name), function(event) {\n              scope.$apply(function() {\n                fn(scope, {$event:event});\n              });\n            });\n          };\n        }\n      };\n    }];\n  }\n);\n\n/**\n * @ngdoc directive\n * @name ngDblclick\n *\n * @description\n * The `ngDblclick` directive allows you to specify custom behavior on a dblclick event.\n *\n * @element ANY\n * @priority 0\n * @param {expression} ngDblclick {@link guide/expression Expression} to evaluate upon\n * a dblclick. (The Event object is available as `$event`)\n *\n * @example\n   <example>\n     <file name=\"index.html\">\n      <button ng-dblclick=\"count = count + 1\" ng-init=\"count=0\">\n        Increment (on double click)\n      </button>\n      count: {{count}}\n     </file>\n   </example>\n */\n\n\n/**\n * @ngdoc directive\n * @name ngMousedown\n *\n * @description\n * The ngMousedown directive allows you to specify custom behavior on mousedown event.\n *\n * @element ANY\n * @priority 0\n * @param {expression} ngMousedown {@link guide/expression Expression} to evaluate upon\n * mousedown. ({@link guide/expression#-event- Event object is available as `$event`})\n *\n * @example\n   <example>\n     <file name=\"index.html\">\n      <button ng-mousedown=\"count = count + 1\" ng-init=\"count=0\">\n        Increment (on mouse down)\n      </button>\n      count: {{count}}\n     </file>\n   </example>\n */\n\n\n/**\n * @ngdoc directive\n * @name ngMouseup\n *\n * @description\n * Specify custom behavior on mouseup event.\n *\n * @element ANY\n * @priority 0\n * @param {expression} ngMouseup {@link guide/expression Expression} to evaluate upon\n * mouseup. ({@link guide/expression#-event- Event object is available as `$event`})\n *\n * @example\n   <example>\n     <file name=\"index.html\">\n      <button ng-mouseup=\"count = count + 1\" ng-init=\"count=0\">\n        Increment (on mouse up)\n      </button>\n      count: {{count}}\n     </file>\n   </example>\n */\n\n/**\n * @ngdoc directive\n * @name ngMouseover\n *\n * @description\n * Specify custom behavior on mouseover event.\n *\n * @element ANY\n * @priority 0\n * @param {expression} ngMouseover {@link guide/expression Expression} to evaluate upon\n * mouseover. ({@link guide/expression#-event- Event object is available as `$event`})\n *\n * @example\n   <example>\n     <file name=\"index.html\">\n      <button ng-mouseover=\"count = count + 1\" ng-init=\"count=0\">\n        Increment (when mouse is over)\n      </button>\n      count: {{count}}\n     </file>\n   </example>\n */\n\n\n/**\n * @ngdoc directive\n * @name ngMouseenter\n *\n * @description\n * Specify custom behavior on mouseenter event.\n *\n * @element ANY\n * @priority 0\n * @param {expression} ngMouseenter {@link guide/expression Expression} to evaluate upon\n * mouseenter. ({@link guide/expression#-event- Event object is available as `$event`})\n *\n * @example\n   <example>\n     <file name=\"index.html\">\n      <button ng-mouseenter=\"count = count + 1\" ng-init=\"count=0\">\n        Increment (when mouse enters)\n      </button>\n      count: {{count}}\n     </file>\n   </example>\n */\n\n\n/**\n * @ngdoc directive\n * @name ngMouseleave\n *\n * @description\n * Specify custom behavior on mouseleave event.\n *\n * @element ANY\n * @priority 0\n * @param {expression} ngMouseleave {@link guide/expression Expression} to evaluate upon\n * mouseleave. ({@link guide/expression#-event- Event object is available as `$event`})\n *\n * @example\n   <example>\n     <file name=\"index.html\">\n      <button ng-mouseleave=\"count = count + 1\" ng-init=\"count=0\">\n        Increment (when mouse leaves)\n      </button>\n      count: {{count}}\n     </file>\n   </example>\n */\n\n\n/**\n * @ngdoc directive\n * @name ngMousemove\n *\n * @description\n * Specify custom behavior on mousemove event.\n *\n * @element ANY\n * @priority 0\n * @param {expression} ngMousemove {@link guide/expression Expression} to evaluate upon\n * mousemove. ({@link guide/expression#-event- Event object is available as `$event`})\n *\n * @example\n   <example>\n     <file name=\"index.html\">\n      <button ng-mousemove=\"count = count + 1\" ng-init=\"count=0\">\n        Increment (when mouse moves)\n      </button>\n      count: {{count}}\n     </file>\n   </example>\n */\n\n\n/**\n * @ngdoc directive\n * @name ngKeydown\n *\n * @description\n * Specify custom behavior on keydown event.\n *\n * @element ANY\n * @priority 0\n * @param {expression} ngKeydown {@link guide/expression Expression} to evaluate upon\n * keydown. (Event object is available as `$event` and can be interrogated for keyCode, altKey, etc.)\n *\n * @example\n   <example>\n     <file name=\"index.html\">\n      <input ng-keydown=\"count = count + 1\" ng-init=\"count=0\">\n      key down count: {{count}}\n     </file>\n   </example>\n */\n\n\n/**\n * @ngdoc directive\n * @name ngKeyup\n *\n * @description\n * Specify custom behavior on keyup event.\n *\n * @element ANY\n * @priority 0\n * @param {expression} ngKeyup {@link guide/expression Expression} to evaluate upon\n * keyup. (Event object is available as `$event` and can be interrogated for keyCode, altKey, etc.)\n *\n * @example\n   <example>\n     <file name=\"index.html\">\n       <p>Typing in the input box below updates the key count</p>\n       <input ng-keyup=\"count = count + 1\" ng-init=\"count=0\"> key up count: {{count}}\n\n       <p>Typing in the input box below updates the keycode</p>\n       <input ng-keyup=\"event=$event\">\n       <p>event keyCode: {{ event.keyCode }}</p>\n       <p>event altKey: {{ event.altKey }}</p>\n     </file>\n   </example>\n */\n\n\n/**\n * @ngdoc directive\n * @name ngKeypress\n *\n * @description\n * Specify custom behavior on keypress event.\n *\n * @element ANY\n * @param {expression} ngKeypress {@link guide/expression Expression} to evaluate upon\n * keypress. ({@link guide/expression#-event- Event object is available as `$event`}\n * and can be interrogated for keyCode, altKey, etc.)\n *\n * @example\n   <example>\n     <file name=\"index.html\">\n      <input ng-keypress=\"count = count + 1\" ng-init=\"count=0\">\n      key press count: {{count}}\n     </file>\n   </example>\n */\n\n\n/**\n * @ngdoc directive\n * @name ngSubmit\n *\n * @description\n * Enables binding angular expressions to onsubmit events.\n *\n * Additionally it prevents the default action (which for form means sending the request to the\n * server and reloading the current page), but only if the form does not contain `action`,\n * `data-action`, or `x-action` attributes.\n *\n * @element form\n * @priority 0\n * @param {expression} ngSubmit {@link guide/expression Expression} to eval.\n * ({@link guide/expression#-event- Event object is available as `$event`})\n *\n * @example\n   <example>\n     <file name=\"index.html\">\n      <script>\n        function Ctrl($scope) {\n          $scope.list = [];\n          $scope.text = 'hello';\n          $scope.submit = function() {\n            if ($scope.text) {\n              $scope.list.push(this.text);\n              $scope.text = '';\n            }\n          };\n        }\n      </script>\n      <form ng-submit=\"submit()\" ng-controller=\"Ctrl\">\n        Enter text and hit enter:\n        <input type=\"text\" ng-model=\"text\" name=\"text\" />\n        <input type=\"submit\" id=\"submit\" value=\"Submit\" />\n        <pre>list={{list}}</pre>\n      </form>\n     </file>\n     <file name=\"protractor.js\" type=\"protractor\">\n       it('should check ng-submit', function() {\n         expect(element(by.binding('list')).getText()).toBe('list=[]');\n         element(by.css('#submit')).click();\n         expect(element(by.binding('list')).getText()).toContain('hello');\n         expect(element(by.input('text')).getAttribute('value')).toBe('');\n       });\n       it('should ignore empty strings', function() {\n         expect(element(by.binding('list')).getText()).toBe('list=[]');\n         element(by.css('#submit')).click();\n         element(by.css('#submit')).click();\n         expect(element(by.binding('list')).getText()).toContain('hello');\n        });\n     </file>\n   </example>\n */\n\n/**\n * @ngdoc directive\n * @name ngFocus\n *\n * @description\n * Specify custom behavior on focus event.\n *\n * @element window, input, select, textarea, a\n * @priority 0\n * @param {expression} ngFocus {@link guide/expression Expression} to evaluate upon\n * focus. ({@link guide/expression#-event- Event object is available as `$event`})\n *\n * @example\n * See {@link ng.directive:ngClick ngClick}\n */\n\n/**\n * @ngdoc directive\n * @name ngBlur\n *\n * @description\n * Specify custom behavior on blur event.\n *\n * @element window, input, select, textarea, a\n * @priority 0\n * @param {expression} ngBlur {@link guide/expression Expression} to evaluate upon\n * blur. ({@link guide/expression#-event- Event object is available as `$event`})\n *\n * @example\n * See {@link ng.directive:ngClick ngClick}\n */\n\n/**\n * @ngdoc directive\n * @name ngCopy\n *\n * @description\n * Specify custom behavior on copy event.\n *\n * @element window, input, select, textarea, a\n * @priority 0\n * @param {expression} ngCopy {@link guide/expression Expression} to evaluate upon\n * copy. ({@link guide/expression#-event- Event object is available as `$event`})\n *\n * @example\n   <example>\n     <file name=\"index.html\">\n      <input ng-copy=\"copied=true\" ng-init=\"copied=false; value='copy me'\" ng-model=\"value\">\n      copied: {{copied}}\n     </file>\n   </example>\n */\n\n/**\n * @ngdoc directive\n * @name ngCut\n *\n * @description\n * Specify custom behavior on cut event.\n *\n * @element window, input, select, textarea, a\n * @priority 0\n * @param {expression} ngCut {@link guide/expression Expression} to evaluate upon\n * cut. ({@link guide/expression#-event- Event object is available as `$event`})\n *\n * @example\n   <example>\n     <file name=\"index.html\">\n      <input ng-cut=\"cut=true\" ng-init=\"cut=false; value='cut me'\" ng-model=\"value\">\n      cut: {{cut}}\n     </file>\n   </example>\n */\n\n/**\n * @ngdoc directive\n * @name ngPaste\n *\n * @description\n * Specify custom behavior on paste event.\n *\n * @element window, input, select, textarea, a\n * @priority 0\n * @param {expression} ngPaste {@link guide/expression Expression} to evaluate upon\n * paste. ({@link guide/expression#-event- Event object is available as `$event`})\n *\n * @example\n   <example>\n     <file name=\"index.html\">\n      <input ng-paste=\"paste=true\" ng-init=\"paste=false\" placeholder='paste here'>\n      pasted: {{paste}}\n     </file>\n   </example>\n */\n\n/**\n * @ngdoc directive\n * @name ngIf\n * @restrict A\n *\n * @description\n * The `ngIf` directive removes or recreates a portion of the DOM tree based on an\n * {expression}. If the expression assigned to `ngIf` evaluates to a false\n * value then the element is removed from the DOM, otherwise a clone of the\n * element is reinserted into the DOM.\n *\n * `ngIf` differs from `ngShow` and `ngHide` in that `ngIf` completely removes and recreates the\n * element in the DOM rather than changing its visibility via the `display` css property.  A common\n * case when this difference is significant is when using css selectors that rely on an element's\n * position within the DOM, such as the `:first-child` or `:last-child` pseudo-classes.\n *\n * Note that when an element is removed using `ngIf` its scope is destroyed and a new scope\n * is created when the element is restored.  The scope created within `ngIf` inherits from\n * its parent scope using\n * [prototypal inheritance](https://github.com/angular/angular.js/wiki/The-Nuances-of-Scope-Prototypal-Inheritance).\n * An important implication of this is if `ngModel` is used within `ngIf` to bind to\n * a javascript primitive defined in the parent scope. In this case any modifications made to the\n * variable within the child scope will override (hide) the value in the parent scope.\n *\n * Also, `ngIf` recreates elements using their compiled state. An example of this behavior\n * is if an element's class attribute is directly modified after it's compiled, using something like\n * jQuery's `.addClass()` method, and the element is later removed. When `ngIf` recreates the element\n * the added class will be lost because the original compiled state is used to regenerate the element.\n *\n * Additionally, you can provide animations via the `ngAnimate` module to animate the `enter`\n * and `leave` effects.\n *\n * @animations\n * enter - happens just after the ngIf contents change and a new DOM element is created and injected into the ngIf container\n * leave - happens just before the ngIf contents are removed from the DOM\n *\n * @element ANY\n * @scope\n * @priority 600\n * @param {expression} ngIf If the {@link guide/expression expression} is falsy then\n *     the element is removed from the DOM tree. If it is truthy a copy of the compiled\n *     element is added to the DOM tree.\n *\n * @example\n  <example module=\"ngAnimate\" deps=\"angular-animate.js\" animations=\"true\">\n    <file name=\"index.html\">\n      Click me: <input type=\"checkbox\" ng-model=\"checked\" ng-init=\"checked=true\" /><br/>\n      Show when checked:\n      <span ng-if=\"checked\" class=\"animate-if\">\n        I'm removed when the checkbox is unchecked.\n      </span>\n    </file>\n    <file name=\"animations.css\">\n      .animate-if {\n        background:white;\n        border:1px solid black;\n        padding:10px;\n      }\n\n      .animate-if.ng-enter, .animate-if.ng-leave {\n        -webkit-transition:all cubic-bezier(0.250, 0.460, 0.450, 0.940) 0.5s;\n        transition:all cubic-bezier(0.250, 0.460, 0.450, 0.940) 0.5s;\n      }\n\n      .animate-if.ng-enter,\n      .animate-if.ng-leave.ng-leave-active {\n        opacity:0;\n      }\n\n      .animate-if.ng-leave,\n      .animate-if.ng-enter.ng-enter-active {\n        opacity:1;\n      }\n    </file>\n  </example>\n */\nvar ngIfDirective = ['$animate', function($animate) {\n  return {\n    transclude: 'element',\n    priority: 600,\n    terminal: true,\n    restrict: 'A',\n    $$tlb: true,\n    link: function ($scope, $element, $attr, ctrl, $transclude) {\n        var block, childScope, previousElements;\n        $scope.$watch($attr.ngIf, function ngIfWatchAction(value) {\n\n          if (toBoolean(value)) {\n            if (!childScope) {\n              childScope = $scope.$new();\n              $transclude(childScope, function (clone) {\n                clone[clone.length++] = document.createComment(' end ngIf: ' + $attr.ngIf + ' ');\n                // Note: We only need the first/last node of the cloned nodes.\n                // However, we need to keep the reference to the jqlite wrapper as it might be changed later\n                // by a directive with templateUrl when its template arrives.\n                block = {\n                  clone: clone\n                };\n                $animate.enter(clone, $element.parent(), $element);\n              });\n            }\n          } else {\n            if(previousElements) {\n              previousElements.remove();\n              previousElements = null;\n            }\n            if(childScope) {\n              childScope.$destroy();\n              childScope = null;\n            }\n            if(block) {\n              previousElements = getBlockElements(block.clone);\n              $animate.leave(previousElements, function() {\n                previousElements = null;\n              });\n              block = null;\n            }\n          }\n        });\n    }\n  };\n}];\n\n/**\n * @ngdoc directive\n * @name ngInclude\n * @restrict ECA\n *\n * @description\n * Fetches, compiles and includes an external HTML fragment.\n *\n * By default, the template URL is restricted to the same domain and protocol as the\n * application document. This is done by calling {@link ng.$sce#getTrustedResourceUrl\n * $sce.getTrustedResourceUrl} on it. To load templates from other domains or protocols\n * you may either {@link ng.$sceDelegateProvider#resourceUrlWhitelist whitelist them} or\n * [wrap them](ng.$sce#trustAsResourceUrl) as trusted values. Refer to Angular's {@link\n * ng.$sce Strict Contextual Escaping}.\n *\n * In addition, the browser's\n * [Same Origin Policy](https://code.google.com/p/browsersec/wiki/Part2#Same-origin_policy_for_XMLHttpRequest)\n * and [Cross-Origin Resource Sharing (CORS)](http://www.w3.org/TR/cors/)\n * policy may further restrict whether the template is successfully loaded.\n * For example, `ngInclude` won't work for cross-domain requests on all browsers and for `file://`\n * access on some browsers.\n *\n * @animations\n * enter - animation is used to bring new content into the browser.\n * leave - animation is used to animate existing content away.\n *\n * The enter and leave animation occur concurrently.\n *\n * @scope\n * @priority 400\n *\n * @param {string} ngInclude|src angular expression evaluating to URL. If the source is a string constant,\n *                 make sure you wrap it in **single** quotes, e.g. `src=\"'myPartialTemplate.html'\"`.\n * @param {string=} onload Expression to evaluate when a new partial is loaded.\n *\n * @param {string=} autoscroll Whether `ngInclude` should call {@link ng.$anchorScroll\n *                  $anchorScroll} to scroll the viewport after the content is loaded.\n *\n *                  - If the attribute is not set, disable scrolling.\n *                  - If the attribute is set without value, enable scrolling.\n *                  - Otherwise enable scrolling only if the expression evaluates to truthy value.\n *\n * @example\n  <example module=\"ngAnimate\" deps=\"angular-animate.js\" animations=\"true\">\n    <file name=\"index.html\">\n     <div ng-controller=\"Ctrl\">\n       <select ng-model=\"template\" ng-options=\"t.name for t in templates\">\n        <option value=\"\">(blank)</option>\n       </select>\n       url of the template: <tt>{{template.url}}</tt>\n       <hr/>\n       <div class=\"slide-animate-container\">\n         <div class=\"slide-animate\" ng-include=\"template.url\"></div>\n       </div>\n     </div>\n    </file>\n    <file name=\"script.js\">\n      function Ctrl($scope) {\n        $scope.templates =\n          [ { name: 'template1.html', url: 'template1.html'},\n            { name: 'template2.html', url: 'template2.html'} ];\n        $scope.template = $scope.templates[0];\n      }\n     </file>\n    <file name=\"template1.html\">\n      Content of template1.html\n    </file>\n    <file name=\"template2.html\">\n      Content of template2.html\n    </file>\n    <file name=\"animations.css\">\n      .slide-animate-container {\n        position:relative;\n        background:white;\n        border:1px solid black;\n        height:40px;\n        overflow:hidden;\n      }\n\n      .slide-animate {\n        padding:10px;\n      }\n\n      .slide-animate.ng-enter, .slide-animate.ng-leave {\n        -webkit-transition:all cubic-bezier(0.250, 0.460, 0.450, 0.940) 0.5s;\n        transition:all cubic-bezier(0.250, 0.460, 0.450, 0.940) 0.5s;\n\n        position:absolute;\n        top:0;\n        left:0;\n        right:0;\n        bottom:0;\n        display:block;\n        padding:10px;\n      }\n\n      .slide-animate.ng-enter {\n        top:-50px;\n      }\n      .slide-animate.ng-enter.ng-enter-active {\n        top:0;\n      }\n\n      .slide-animate.ng-leave {\n        top:0;\n      }\n      .slide-animate.ng-leave.ng-leave-active {\n        top:50px;\n      }\n    </file>\n    <file name=\"protractor.js\" type=\"protractor\">\n      var templateSelect = element(by.model('template'));\n      var includeElem = element(by.css('[ng-include]'));\n\n      it('should load template1.html', function() {\n        expect(includeElem.getText()).toMatch(/Content of template1.html/);\n      });\n\n      it('should load template2.html', function() {\n        if (browser.params.browser == 'firefox') {\n          // Firefox can't handle using selects\n          // See https://github.com/angular/protractor/issues/480\n          return;\n        }\n        templateSelect.click();\n        templateSelect.element.all(by.css('option')).get(2).click();\n        expect(includeElem.getText()).toMatch(/Content of template2.html/);\n      });\n\n      it('should change to blank', function() {\n        if (browser.params.browser == 'firefox') {\n          // Firefox can't handle using selects\n          return;\n        }\n        templateSelect.click();\n        templateSelect.element.all(by.css('option')).get(0).click();\n        expect(includeElem.isPresent()).toBe(false);\n      });\n    </file>\n  </example>\n */\n\n\n/**\n * @ngdoc event\n * @name ngInclude#$includeContentRequested\n * @eventType emit on the scope ngInclude was declared in\n * @description\n * Emitted every time the ngInclude content is requested.\n */\n\n\n/**\n * @ngdoc event\n * @name ngInclude#$includeContentLoaded\n * @eventType emit on the current ngInclude scope\n * @description\n * Emitted every time the ngInclude content is reloaded.\n */\nvar ngIncludeDirective = ['$http', '$templateCache', '$anchorScroll', '$animate', '$sce',\n                  function($http,   $templateCache,   $anchorScroll,   $animate,   $sce) {\n  return {\n    restrict: 'ECA',\n    priority: 400,\n    terminal: true,\n    transclude: 'element',\n    controller: angular.noop,\n    compile: function(element, attr) {\n      var srcExp = attr.ngInclude || attr.src,\n          onloadExp = attr.onload || '',\n          autoScrollExp = attr.autoscroll;\n\n      return function(scope, $element, $attr, ctrl, $transclude) {\n        var changeCounter = 0,\n            currentScope,\n            previousElement,\n            currentElement;\n\n        var cleanupLastIncludeContent = function() {\n          if(previousElement) {\n            previousElement.remove();\n            previousElement = null;\n          }\n          if(currentScope) {\n            currentScope.$destroy();\n            currentScope = null;\n          }\n          if(currentElement) {\n            $animate.leave(currentElement, function() {\n              previousElement = null;\n            });\n            previousElement = currentElement;\n            currentElement = null;\n          }\n        };\n\n        scope.$watch($sce.parseAsResourceUrl(srcExp), function ngIncludeWatchAction(src) {\n          var afterAnimation = function() {\n            if (isDefined(autoScrollExp) && (!autoScrollExp || scope.$eval(autoScrollExp))) {\n              $anchorScroll();\n            }\n          };\n          var thisChangeId = ++changeCounter;\n\n          if (src) {\n            $http.get(src, {cache: $templateCache}).success(function(response) {\n              if (thisChangeId !== changeCounter) return;\n              var newScope = scope.$new();\n              ctrl.template = response;\n\n              // Note: This will also link all children of ng-include that were contained in the original\n              // html. If that content contains controllers, ... they could pollute/change the scope.\n              // However, using ng-include on an element with additional content does not make sense...\n              // Note: We can't remove them in the cloneAttchFn of $transclude as that\n              // function is called before linking the content, which would apply child\n              // directives to non existing elements.\n              var clone = $transclude(newScope, function(clone) {\n                cleanupLastIncludeContent();\n                $animate.enter(clone, null, $element, afterAnimation);\n              });\n\n              currentScope = newScope;\n              currentElement = clone;\n\n              currentScope.$emit('$includeContentLoaded');\n              scope.$eval(onloadExp);\n            }).error(function() {\n              if (thisChangeId === changeCounter) cleanupLastIncludeContent();\n            });\n            scope.$emit('$includeContentRequested');\n          } else {\n            cleanupLastIncludeContent();\n            ctrl.template = null;\n          }\n        });\n      };\n    }\n  };\n}];\n\n// This directive is called during the $transclude call of the first `ngInclude` directive.\n// It will replace and compile the content of the element with the loaded template.\n// We need this directive so that the element content is already filled when\n// the link function of another directive on the same element as ngInclude\n// is called.\nvar ngIncludeFillContentDirective = ['$compile',\n  function($compile) {\n    return {\n      restrict: 'ECA',\n      priority: -400,\n      require: 'ngInclude',\n      link: function(scope, $element, $attr, ctrl) {\n        $element.html(ctrl.template);\n        $compile($element.contents())(scope);\n      }\n    };\n  }];\n\n/**\n * @ngdoc directive\n * @name ngInit\n * @restrict AC\n *\n * @description\n * The `ngInit` directive allows you to evaluate an expression in the\n * current scope.\n *\n * <div class=\"alert alert-error\">\n * The only appropriate use of `ngInit` is for aliasing special properties of\n * {@link ng.directive:ngRepeat `ngRepeat`}, as seen in the demo below. Besides this case, you\n * should use {@link guide/controller controllers} rather than `ngInit`\n * to initialize values on a scope.\n * </div>\n * <div class=\"alert alert-warning\">\n * **Note**: If you have assignment in `ngInit` along with {@link ng.$filter `$filter`}, make\n * sure you have parenthesis for correct precedence:\n * <pre class=\"prettyprint\">\n *   <div ng-init=\"test1 = (data | orderBy:'name')\"></div>\n * </pre>\n * </div>\n *\n * @priority 450\n *\n * @element ANY\n * @param {expression} ngInit {@link guide/expression Expression} to eval.\n *\n * @example\n   <example>\n     <file name=\"index.html\">\n   <script>\n     function Ctrl($scope) {\n       $scope.list = [['a', 'b'], ['c', 'd']];\n     }\n   </script>\n   <div ng-controller=\"Ctrl\">\n     <div ng-repeat=\"innerList in list\" ng-init=\"outerIndex = $index\">\n       <div ng-repeat=\"value in innerList\" ng-init=\"innerIndex = $index\">\n          <span class=\"example-init\">list[ {{outerIndex}} ][ {{innerIndex}} ] = {{value}};</span>\n       </div>\n     </div>\n   </div>\n     </file>\n     <file name=\"protractor.js\" type=\"protractor\">\n       it('should alias index positions', function() {\n         var elements = element.all(by.css('.example-init'));\n         expect(elements.get(0).getText()).toBe('list[ 0 ][ 0 ] = a;');\n         expect(elements.get(1).getText()).toBe('list[ 0 ][ 1 ] = b;');\n         expect(elements.get(2).getText()).toBe('list[ 1 ][ 0 ] = c;');\n         expect(elements.get(3).getText()).toBe('list[ 1 ][ 1 ] = d;');\n       });\n     </file>\n   </example>\n */\nvar ngInitDirective = ngDirective({\n  priority: 450,\n  compile: function() {\n    return {\n      pre: function(scope, element, attrs) {\n        scope.$eval(attrs.ngInit);\n      }\n    };\n  }\n});\n\n/**\n * @ngdoc directive\n * @name ngNonBindable\n * @restrict AC\n * @priority 1000\n *\n * @description\n * The `ngNonBindable` directive tells Angular not to compile or bind the contents of the current\n * DOM element. This is useful if the element contains what appears to be Angular directives and\n * bindings but which should be ignored by Angular. This could be the case if you have a site that\n * displays snippets of code, for instance.\n *\n * @element ANY\n *\n * @example\n * In this example there are two locations where a simple interpolation binding (`{{}}`) is present,\n * but the one wrapped in `ngNonBindable` is left alone.\n *\n * @example\n    <example>\n      <file name=\"index.html\">\n        <div>Normal: {{1 + 2}}</div>\n        <div ng-non-bindable>Ignored: {{1 + 2}}</div>\n      </file>\n      <file name=\"protractor.js\" type=\"protractor\">\n       it('should check ng-non-bindable', function() {\n         expect(element(by.binding('1 + 2')).getText()).toContain('3');\n         expect(element.all(by.css('div')).last().getText()).toMatch(/1 \\+ 2/);\n       });\n      </file>\n    </example>\n */\nvar ngNonBindableDirective = ngDirective({ terminal: true, priority: 1000 });\n\n/**\n * @ngdoc directive\n * @name ngPluralize\n * @restrict EA\n *\n * @description\n * `ngPluralize` is a directive that displays messages according to en-US localization rules.\n * These rules are bundled with angular.js, but can be overridden\n * (see {@link guide/i18n Angular i18n} dev guide). You configure ngPluralize directive\n * by specifying the mappings between\n * [plural categories](http://unicode.org/repos/cldr-tmp/trunk/diff/supplemental/language_plural_rules.html)\n * and the strings to be displayed.\n *\n * # Plural categories and explicit number rules\n * There are two\n * [plural categories](http://unicode.org/repos/cldr-tmp/trunk/diff/supplemental/language_plural_rules.html)\n * in Angular's default en-US locale: \"one\" and \"other\".\n *\n * While a plural category may match many numbers (for example, in en-US locale, \"other\" can match\n * any number that is not 1), an explicit number rule can only match one number. For example, the\n * explicit number rule for \"3\" matches the number 3. There are examples of plural categories\n * and explicit number rules throughout the rest of this documentation.\n *\n * # Configuring ngPluralize\n * You configure ngPluralize by providing 2 attributes: `count` and `when`.\n * You can also provide an optional attribute, `offset`.\n *\n * The value of the `count` attribute can be either a string or an {@link guide/expression\n * Angular expression}; these are evaluated on the current scope for its bound value.\n *\n * The `when` attribute specifies the mappings between plural categories and the actual\n * string to be displayed. The value of the attribute should be a JSON object.\n *\n * The following example shows how to configure ngPluralize:\n *\n * ```html\n * <ng-pluralize count=\"personCount\"\n                 when=\"{'0': 'Nobody is viewing.',\n *                      'one': '1 person is viewing.',\n *                      'other': '{} people are viewing.'}\">\n * </ng-pluralize>\n *```\n *\n * In the example, `\"0: Nobody is viewing.\"` is an explicit number rule. If you did not\n * specify this rule, 0 would be matched to the \"other\" category and \"0 people are viewing\"\n * would be shown instead of \"Nobody is viewing\". You can specify an explicit number rule for\n * other numbers, for example 12, so that instead of showing \"12 people are viewing\", you can\n * show \"a dozen people are viewing\".\n *\n * You can use a set of closed braces (`{}`) as a placeholder for the number that you want substituted\n * into pluralized strings. In the previous example, Angular will replace `{}` with\n * <span ng-non-bindable>`{{personCount}}`</span>. The closed braces `{}` is a placeholder\n * for <span ng-non-bindable>{{numberExpression}}</span>.\n *\n * # Configuring ngPluralize with offset\n * The `offset` attribute allows further customization of pluralized text, which can result in\n * a better user experience. For example, instead of the message \"4 people are viewing this document\",\n * you might display \"John, Kate and 2 others are viewing this document\".\n * The offset attribute allows you to offset a number by any desired value.\n * Let's take a look at an example:\n *\n * ```html\n * <ng-pluralize count=\"personCount\" offset=2\n *               when=\"{'0': 'Nobody is viewing.',\n *                      '1': '{{person1}} is viewing.',\n *                      '2': '{{person1}} and {{person2}} are viewing.',\n *                      'one': '{{person1}}, {{person2}} and one other person are viewing.',\n *                      'other': '{{person1}}, {{person2}} and {} other people are viewing.'}\">\n * </ng-pluralize>\n * ```\n *\n * Notice that we are still using two plural categories(one, other), but we added\n * three explicit number rules 0, 1 and 2.\n * When one person, perhaps John, views the document, \"John is viewing\" will be shown.\n * When three people view the document, no explicit number rule is found, so\n * an offset of 2 is taken off 3, and Angular uses 1 to decide the plural category.\n * In this case, plural category 'one' is matched and \"John, Marry and one other person are viewing\"\n * is shown.\n *\n * Note that when you specify offsets, you must provide explicit number rules for\n * numbers from 0 up to and including the offset. If you use an offset of 3, for example,\n * you must provide explicit number rules for 0, 1, 2 and 3. You must also provide plural strings for\n * plural categories \"one\" and \"other\".\n *\n * @param {string|expression} count The variable to be bound to.\n * @param {string} when The mapping between plural category to its corresponding strings.\n * @param {number=} offset Offset to deduct from the total number.\n *\n * @example\n    <example>\n      <file name=\"index.html\">\n        <script>\n          function Ctrl($scope) {\n            $scope.person1 = 'Igor';\n            $scope.person2 = 'Misko';\n            $scope.personCount = 1;\n          }\n        </script>\n        <div ng-controller=\"Ctrl\">\n          Person 1:<input type=\"text\" ng-model=\"person1\" value=\"Igor\" /><br/>\n          Person 2:<input type=\"text\" ng-model=\"person2\" value=\"Misko\" /><br/>\n          Number of People:<input type=\"text\" ng-model=\"personCount\" value=\"1\" /><br/>\n\n          <!--- Example with simple pluralization rules for en locale --->\n          Without Offset:\n          <ng-pluralize count=\"personCount\"\n                        when=\"{'0': 'Nobody is viewing.',\n                               'one': '1 person is viewing.',\n                               'other': '{} people are viewing.'}\">\n          </ng-pluralize><br>\n\n          <!--- Example with offset --->\n          With Offset(2):\n          <ng-pluralize count=\"personCount\" offset=2\n                        when=\"{'0': 'Nobody is viewing.',\n                               '1': '{{person1}} is viewing.',\n                               '2': '{{person1}} and {{person2}} are viewing.',\n                               'one': '{{person1}}, {{person2}} and one other person are viewing.',\n                               'other': '{{person1}}, {{person2}} and {} other people are viewing.'}\">\n          </ng-pluralize>\n        </div>\n      </file>\n      <file name=\"protractor.js\" type=\"protractor\">\n        it('should show correct pluralized string', function() {\n          var withoutOffset = element.all(by.css('ng-pluralize')).get(0);\n          var withOffset = element.all(by.css('ng-pluralize')).get(1);\n          var countInput = element(by.model('personCount'));\n\n          expect(withoutOffset.getText()).toEqual('1 person is viewing.');\n          expect(withOffset.getText()).toEqual('Igor is viewing.');\n\n          countInput.clear();\n          countInput.sendKeys('0');\n\n          expect(withoutOffset.getText()).toEqual('Nobody is viewing.');\n          expect(withOffset.getText()).toEqual('Nobody is viewing.');\n\n          countInput.clear();\n          countInput.sendKeys('2');\n\n          expect(withoutOffset.getText()).toEqual('2 people are viewing.');\n          expect(withOffset.getText()).toEqual('Igor and Misko are viewing.');\n\n          countInput.clear();\n          countInput.sendKeys('3');\n\n          expect(withoutOffset.getText()).toEqual('3 people are viewing.');\n          expect(withOffset.getText()).toEqual('Igor, Misko and one other person are viewing.');\n\n          countInput.clear();\n          countInput.sendKeys('4');\n\n          expect(withoutOffset.getText()).toEqual('4 people are viewing.');\n          expect(withOffset.getText()).toEqual('Igor, Misko and 2 other people are viewing.');\n        });\n        it('should show data-bound names', function() {\n          var withOffset = element.all(by.css('ng-pluralize')).get(1);\n          var personCount = element(by.model('personCount'));\n          var person1 = element(by.model('person1'));\n          var person2 = element(by.model('person2'));\n          personCount.clear();\n          personCount.sendKeys('4');\n          person1.clear();\n          person1.sendKeys('Di');\n          person2.clear();\n          person2.sendKeys('Vojta');\n          expect(withOffset.getText()).toEqual('Di, Vojta and 2 other people are viewing.');\n        });\n      </file>\n    </example>\n */\nvar ngPluralizeDirective = ['$locale', '$interpolate', function($locale, $interpolate) {\n  var BRACE = /{}/g;\n  return {\n    restrict: 'EA',\n    link: function(scope, element, attr) {\n      var numberExp = attr.count,\n          whenExp = attr.$attr.when && element.attr(attr.$attr.when), // we have {{}} in attrs\n          offset = attr.offset || 0,\n          whens = scope.$eval(whenExp) || {},\n          whensExpFns = {},\n          startSymbol = $interpolate.startSymbol(),\n          endSymbol = $interpolate.endSymbol(),\n          isWhen = /^when(Minus)?(.+)$/;\n\n      forEach(attr, function(expression, attributeName) {\n        if (isWhen.test(attributeName)) {\n          whens[lowercase(attributeName.replace('when', '').replace('Minus', '-'))] =\n            element.attr(attr.$attr[attributeName]);\n        }\n      });\n      forEach(whens, function(expression, key) {\n        whensExpFns[key] =\n          $interpolate(expression.replace(BRACE, startSymbol + numberExp + '-' +\n            offset + endSymbol));\n      });\n\n      scope.$watch(function ngPluralizeWatch() {\n        var value = parseFloat(scope.$eval(numberExp));\n\n        if (!isNaN(value)) {\n          //if explicit number rule such as 1, 2, 3... is defined, just use it. Otherwise,\n          //check it against pluralization rules in $locale service\n          if (!(value in whens)) value = $locale.pluralCat(value - offset);\n           return whensExpFns[value](scope, element, true);\n        } else {\n          return '';\n        }\n      }, function ngPluralizeWatchAction(newVal) {\n        element.text(newVal);\n      });\n    }\n  };\n}];\n\n/**\n * @ngdoc directive\n * @name ngRepeat\n *\n * @description\n * The `ngRepeat` directive instantiates a template once per item from a collection. Each template\n * instance gets its own scope, where the given loop variable is set to the current collection item,\n * and `$index` is set to the item index or key.\n *\n * Special properties are exposed on the local scope of each template instance, including:\n *\n * | Variable  | Type            | Details                                                                     |\n * |-----------|-----------------|-----------------------------------------------------------------------------|\n * | `$index`  | {@type number}  | iterator offset of the repeated element (0..length-1)                       |\n * | `$first`  | {@type boolean} | true if the repeated element is first in the iterator.                      |\n * | `$middle` | {@type boolean} | true if the repeated element is between the first and last in the iterator. |\n * | `$last`   | {@type boolean} | true if the repeated element is last in the iterator.                       |\n * | `$even`   | {@type boolean} | true if the iterator position `$index` is even (otherwise false).           |\n * | `$odd`    | {@type boolean} | true if the iterator position `$index` is odd (otherwise false).            |\n *\n * Creating aliases for these properties is possible with {@link ng.directive:ngInit `ngInit`}.\n * This may be useful when, for instance, nesting ngRepeats.\n *\n * # Special repeat start and end points\n * To repeat a series of elements instead of just one parent element, ngRepeat (as well as other ng directives) supports extending\n * the range of the repeater by defining explicit start and end points by using **ng-repeat-start** and **ng-repeat-end** respectively.\n * The **ng-repeat-start** directive works the same as **ng-repeat**, but will repeat all the HTML code (including the tag it's defined on)\n * up to and including the ending HTML tag where **ng-repeat-end** is placed.\n *\n * The example below makes use of this feature:\n * ```html\n *   <header ng-repeat-start=\"item in items\">\n *     Header {{ item }}\n *   </header>\n *   <div class=\"body\">\n *     Body {{ item }}\n *   </div>\n *   <footer ng-repeat-end>\n *     Footer {{ item }}\n *   </footer>\n * ```\n *\n * And with an input of {@type ['A','B']} for the items variable in the example above, the output will evaluate to:\n * ```html\n *   <header>\n *     Header A\n *   </header>\n *   <div class=\"body\">\n *     Body A\n *   </div>\n *   <footer>\n *     Footer A\n *   </footer>\n *   <header>\n *     Header B\n *   </header>\n *   <div class=\"body\">\n *     Body B\n *   </div>\n *   <footer>\n *     Footer B\n *   </footer>\n * ```\n *\n * The custom start and end points for ngRepeat also support all other HTML directive syntax flavors provided in AngularJS (such\n * as **data-ng-repeat-start**, **x-ng-repeat-start** and **ng:repeat-start**).\n *\n * @animations\n * **.enter** - when a new item is added to the list or when an item is revealed after a filter\n *\n * **.leave** - when an item is removed from the list or when an item is filtered out\n *\n * **.move** - when an adjacent item is filtered out causing a reorder or when the item contents are reordered\n *\n * @element ANY\n * @scope\n * @priority 1000\n * @param {repeat_expression} ngRepeat The expression indicating how to enumerate a collection. These\n *   formats are currently supported:\n *\n *   * `variable in expression` – where variable is the user defined loop variable and `expression`\n *     is a scope expression giving the collection to enumerate.\n *\n *     For example: `album in artist.albums`.\n *\n *   * `(key, value) in expression` – where `key` and `value` can be any user defined identifiers,\n *     and `expression` is the scope expression giving the collection to enumerate.\n *\n *     For example: `(name, age) in {'adam':10, 'amalie':12}`.\n *\n *   * `variable in expression track by tracking_expression` – You can also provide an optional tracking function\n *     which can be used to associate the objects in the collection with the DOM elements. If no tracking function\n *     is specified the ng-repeat associates elements by identity in the collection. It is an error to have\n *     more than one tracking function to resolve to the same key. (This would mean that two distinct objects are\n *     mapped to the same DOM element, which is not possible.)  Filters should be applied to the expression,\n *     before specifying a tracking expression.\n *\n *     For example: `item in items` is equivalent to `item in items track by $id(item)`. This implies that the DOM elements\n *     will be associated by item identity in the array.\n *\n *     For example: `item in items track by $id(item)`. A built in `$id()` function can be used to assign a unique\n *     `$$hashKey` property to each item in the array. This property is then used as a key to associated DOM elements\n *     with the corresponding item in the array by identity. Moving the same object in array would move the DOM\n *     element in the same way in the DOM.\n *\n *     For example: `item in items track by item.id` is a typical pattern when the items come from the database. In this\n *     case the object identity does not matter. Two objects are considered equivalent as long as their `id`\n *     property is same.\n *\n *     For example: `item in items | filter:searchText track by item.id` is a pattern that might be used to apply a filter\n *     to items in conjunction with a tracking expression.\n *\n * @example\n * This example initializes the scope to a list of names and\n * then uses `ngRepeat` to display every person:\n  <example module=\"ngAnimate\" deps=\"angular-animate.js\" animations=\"true\">\n    <file name=\"index.html\">\n      <div ng-init=\"friends = [\n        {name:'John', age:25, gender:'boy'},\n        {name:'Jessie', age:30, gender:'girl'},\n        {name:'Johanna', age:28, gender:'girl'},\n        {name:'Joy', age:15, gender:'girl'},\n        {name:'Mary', age:28, gender:'girl'},\n        {name:'Peter', age:95, gender:'boy'},\n        {name:'Sebastian', age:50, gender:'boy'},\n        {name:'Erika', age:27, gender:'girl'},\n        {name:'Patrick', age:40, gender:'boy'},\n        {name:'Samantha', age:60, gender:'girl'}\n      ]\">\n        I have {{friends.length}} friends. They are:\n        <input type=\"search\" ng-model=\"q\" placeholder=\"filter friends...\" />\n        <ul class=\"example-animate-container\">\n          <li class=\"animate-repeat\" ng-repeat=\"friend in friends | filter:q\">\n            [{{$index + 1}}] {{friend.name}} who is {{friend.age}} years old.\n          </li>\n        </ul>\n      </div>\n    </file>\n    <file name=\"animations.css\">\n      .example-animate-container {\n        background:white;\n        border:1px solid black;\n        list-style:none;\n        margin:0;\n        padding:0 10px;\n      }\n\n      .animate-repeat {\n        line-height:40px;\n        list-style:none;\n        box-sizing:border-box;\n      }\n\n      .animate-repeat.ng-move,\n      .animate-repeat.ng-enter,\n      .animate-repeat.ng-leave {\n        -webkit-transition:all linear 0.5s;\n        transition:all linear 0.5s;\n      }\n\n      .animate-repeat.ng-leave.ng-leave-active,\n      .animate-repeat.ng-move,\n      .animate-repeat.ng-enter {\n        opacity:0;\n        max-height:0;\n      }\n\n      .animate-repeat.ng-leave,\n      .animate-repeat.ng-move.ng-move-active,\n      .animate-repeat.ng-enter.ng-enter-active {\n        opacity:1;\n        max-height:40px;\n      }\n    </file>\n    <file name=\"protractor.js\" type=\"protractor\">\n      var friends = element.all(by.repeater('friend in friends'));\n\n      it('should render initial data set', function() {\n        expect(friends.count()).toBe(10);\n        expect(friends.get(0).getText()).toEqual('[1] John who is 25 years old.');\n        expect(friends.get(1).getText()).toEqual('[2] Jessie who is 30 years old.');\n        expect(friends.last().getText()).toEqual('[10] Samantha who is 60 years old.');\n        expect(element(by.binding('friends.length')).getText())\n            .toMatch(\"I have 10 friends. They are:\");\n      });\n\n       it('should update repeater when filter predicate changes', function() {\n         expect(friends.count()).toBe(10);\n\n         element(by.model('q')).sendKeys('ma');\n\n         expect(friends.count()).toBe(2);\n         expect(friends.get(0).getText()).toEqual('[1] Mary who is 28 years old.');\n         expect(friends.last().getText()).toEqual('[2] Samantha who is 60 years old.');\n       });\n      </file>\n    </example>\n */\nvar ngRepeatDirective = ['$parse', '$animate', function($parse, $animate) {\n  var NG_REMOVED = '$$NG_REMOVED';\n  var ngRepeatMinErr = minErr('ngRepeat');\n  return {\n    transclude: 'element',\n    priority: 1000,\n    terminal: true,\n    $$tlb: true,\n    link: function($scope, $element, $attr, ctrl, $transclude){\n        var expression = $attr.ngRepeat;\n        var match = expression.match(/^\\s*([\\s\\S]+?)\\s+in\\s+([\\s\\S]+?)(?:\\s+track\\s+by\\s+([\\s\\S]+?))?\\s*$/),\n          trackByExp, trackByExpGetter, trackByIdExpFn, trackByIdArrayFn, trackByIdObjFn,\n          lhs, rhs, valueIdentifier, keyIdentifier,\n          hashFnLocals = {$id: hashKey};\n\n        if (!match) {\n          throw ngRepeatMinErr('iexp', \"Expected expression in form of '_item_ in _collection_[ track by _id_]' but got '{0}'.\",\n            expression);\n        }\n\n        lhs = match[1];\n        rhs = match[2];\n        trackByExp = match[3];\n\n        if (trackByExp) {\n          trackByExpGetter = $parse(trackByExp);\n          trackByIdExpFn = function(key, value, index) {\n            // assign key, value, and $index to the locals so that they can be used in hash functions\n            if (keyIdentifier) hashFnLocals[keyIdentifier] = key;\n            hashFnLocals[valueIdentifier] = value;\n            hashFnLocals.$index = index;\n            return trackByExpGetter($scope, hashFnLocals);\n          };\n        } else {\n          trackByIdArrayFn = function(key, value) {\n            return hashKey(value);\n          };\n          trackByIdObjFn = function(key) {\n            return key;\n          };\n        }\n\n        match = lhs.match(/^(?:([\\$\\w]+)|\\(([\\$\\w]+)\\s*,\\s*([\\$\\w]+)\\))$/);\n        if (!match) {\n          throw ngRepeatMinErr('iidexp', \"'_item_' in '_item_ in _collection_' should be an identifier or '(_key_, _value_)' expression, but got '{0}'.\",\n                                                                    lhs);\n        }\n        valueIdentifier = match[3] || match[1];\n        keyIdentifier = match[2];\n\n        // Store a list of elements from previous run. This is a hash where key is the item from the\n        // iterator, and the value is objects with following properties.\n        //   - scope: bound scope\n        //   - element: previous element.\n        //   - index: position\n        var lastBlockMap = {};\n\n        //watch props\n        $scope.$watchCollection(rhs, function ngRepeatAction(collection){\n          var index, length,\n              previousNode = $element[0],     // current position of the node\n              nextNode,\n              // Same as lastBlockMap but it has the current state. It will become the\n              // lastBlockMap on the next iteration.\n              nextBlockMap = {},\n              arrayLength,\n              childScope,\n              key, value, // key/value of iteration\n              trackById,\n              trackByIdFn,\n              collectionKeys,\n              block,       // last object information {scope, element, id}\n              nextBlockOrder = [],\n              elementsToRemove;\n\n\n          if (isArrayLike(collection)) {\n            collectionKeys = collection;\n            trackByIdFn = trackByIdExpFn || trackByIdArrayFn;\n          } else {\n            trackByIdFn = trackByIdExpFn || trackByIdObjFn;\n            // if object, extract keys, sort them and use to determine order of iteration over obj props\n            collectionKeys = [];\n            for (key in collection) {\n              if (collection.hasOwnProperty(key) && key.charAt(0) != '$') {\n                collectionKeys.push(key);\n              }\n            }\n            collectionKeys.sort();\n          }\n\n          arrayLength = collectionKeys.length;\n\n          // locate existing items\n          length = nextBlockOrder.length = collectionKeys.length;\n          for(index = 0; index < length; index++) {\n           key = (collection === collectionKeys) ? index : collectionKeys[index];\n           value = collection[key];\n           trackById = trackByIdFn(key, value, index);\n           assertNotHasOwnProperty(trackById, '`track by` id');\n           if(lastBlockMap.hasOwnProperty(trackById)) {\n             block = lastBlockMap[trackById];\n             delete lastBlockMap[trackById];\n             nextBlockMap[trackById] = block;\n             nextBlockOrder[index] = block;\n           } else if (nextBlockMap.hasOwnProperty(trackById)) {\n             // restore lastBlockMap\n             forEach(nextBlockOrder, function(block) {\n               if (block && block.scope) lastBlockMap[block.id] = block;\n             });\n             // This is a duplicate and we need to throw an error\n             throw ngRepeatMinErr('dupes', \"Duplicates in a repeater are not allowed. Use 'track by' expression to specify unique keys. Repeater: {0}, Duplicate key: {1}\",\n                                                                                                                                                    expression,       trackById);\n           } else {\n             // new never before seen block\n             nextBlockOrder[index] = { id: trackById };\n             nextBlockMap[trackById] = false;\n           }\n         }\n\n          // remove existing items\n          for (key in lastBlockMap) {\n            // lastBlockMap is our own object so we don't need to use special hasOwnPropertyFn\n            if (lastBlockMap.hasOwnProperty(key)) {\n              block = lastBlockMap[key];\n              elementsToRemove = getBlockElements(block.clone);\n              $animate.leave(elementsToRemove);\n              forEach(elementsToRemove, function(element) { element[NG_REMOVED] = true; });\n              block.scope.$destroy();\n            }\n          }\n\n          // we are not using forEach for perf reasons (trying to avoid #call)\n          for (index = 0, length = collectionKeys.length; index < length; index++) {\n            key = (collection === collectionKeys) ? index : collectionKeys[index];\n            value = collection[key];\n            block = nextBlockOrder[index];\n            if (nextBlockOrder[index - 1]) previousNode = getBlockEnd(nextBlockOrder[index - 1]);\n\n            if (block.scope) {\n              // if we have already seen this object, then we need to reuse the\n              // associated scope/element\n              childScope = block.scope;\n\n              nextNode = previousNode;\n              do {\n                nextNode = nextNode.nextSibling;\n              } while(nextNode && nextNode[NG_REMOVED]);\n\n              if (getBlockStart(block) != nextNode) {\n                // existing item which got moved\n                $animate.move(getBlockElements(block.clone), null, jqLite(previousNode));\n              }\n              previousNode = getBlockEnd(block);\n            } else {\n              // new item which we don't know about\n              childScope = $scope.$new();\n            }\n\n            childScope[valueIdentifier] = value;\n            if (keyIdentifier) childScope[keyIdentifier] = key;\n            childScope.$index = index;\n            childScope.$first = (index === 0);\n            childScope.$last = (index === (arrayLength - 1));\n            childScope.$middle = !(childScope.$first || childScope.$last);\n            // jshint bitwise: false\n            childScope.$odd = !(childScope.$even = (index&1) === 0);\n            // jshint bitwise: true\n\n            if (!block.scope) {\n              $transclude(childScope, function(clone) {\n                clone[clone.length++] = document.createComment(' end ngRepeat: ' + expression + ' ');\n                $animate.enter(clone, null, jqLite(previousNode));\n                previousNode = clone;\n                block.scope = childScope;\n                // Note: We only need the first/last node of the cloned nodes.\n                // However, we need to keep the reference to the jqlite wrapper as it might be changed later\n                // by a directive with templateUrl when its template arrives.\n                block.clone = clone;\n                nextBlockMap[block.id] = block;\n              });\n            }\n          }\n          lastBlockMap = nextBlockMap;\n        });\n    }\n  };\n\n  function getBlockStart(block) {\n    return block.clone[0];\n  }\n\n  function getBlockEnd(block) {\n    return block.clone[block.clone.length - 1];\n  }\n}];\n\n/**\n * @ngdoc directive\n * @name ngShow\n *\n * @description\n * The `ngShow` directive shows or hides the given HTML element based on the expression\n * provided to the ngShow attribute. The element is shown or hidden by removing or adding\n * the `ng-hide` CSS class onto the element. The `.ng-hide` CSS class is predefined\n * in AngularJS and sets the display style to none (using an !important flag).\n * For CSP mode please add `angular-csp.css` to your html file (see {@link ng.directive:ngCsp ngCsp}).\n *\n * ```html\n * <!-- when $scope.myValue is truthy (element is visible) -->\n * <div ng-show=\"myValue\"></div>\n *\n * <!-- when $scope.myValue is falsy (element is hidden) -->\n * <div ng-show=\"myValue\" class=\"ng-hide\"></div>\n * ```\n *\n * When the ngShow expression evaluates to false then the ng-hide CSS class is added to the class attribute\n * on the element causing it to become hidden. When true, the ng-hide CSS class is removed\n * from the element causing the element not to appear hidden.\n *\n * <div class=\"alert alert-warning\">\n * **Note:** Here is a list of values that ngShow will consider as a falsy value (case insensitive):<br />\n * \"f\" / \"0\" / \"false\" / \"no\" / \"n\" / \"[]\"\n * </div>\n *\n * ## Why is !important used?\n *\n * You may be wondering why !important is used for the .ng-hide CSS class. This is because the `.ng-hide` selector\n * can be easily overridden by heavier selectors. For example, something as simple\n * as changing the display style on a HTML list item would make hidden elements appear visible.\n * This also becomes a bigger issue when dealing with CSS frameworks.\n *\n * By using !important, the show and hide behavior will work as expected despite any clash between CSS selector\n * specificity (when !important isn't used with any conflicting styles). If a developer chooses to override the\n * styling to change how to hide an element then it is just a matter of using !important in their own CSS code.\n *\n * ### Overriding .ng-hide\n *\n * By default, the `.ng-hide` class will style the element with `display:none!important`. If you wish to change\n * the hide behavior with ngShow/ngHide then this can be achieved by restating the styles for the `.ng-hide`\n * class in CSS:\n *\n * ```css\n * .ng-hide {\n *   //this is just another form of hiding an element\n *   display:block!important;\n *   position:absolute;\n *   top:-9999px;\n *   left:-9999px;\n * }\n * ```\n *\n * By default you don't need to override in CSS anything and the animations will work around the display style.\n *\n * ## A note about animations with ngShow\n *\n * Animations in ngShow/ngHide work with the show and hide events that are triggered when the directive expression\n * is true and false. This system works like the animation system present with ngClass except that\n * you must also include the !important flag to override the display property\n * so that you can perform an animation when the element is hidden during the time of the animation.\n *\n * ```css\n * //\n * //a working example can be found at the bottom of this page\n * //\n * .my-element.ng-hide-add, .my-element.ng-hide-remove {\n *   transition:0.5s linear all;\n * }\n *\n * .my-element.ng-hide-add { ... }\n * .my-element.ng-hide-add.ng-hide-add-active { ... }\n * .my-element.ng-hide-remove { ... }\n * .my-element.ng-hide-remove.ng-hide-remove-active { ... }\n * ```\n *\n * Keep in mind that, as of AngularJS version 1.2.17 (and 1.3.0-beta.11), there is no need to change the display\n * property to block during animation states--ngAnimate will handle the style toggling automatically for you.\n *\n * @animations\n * addClass: .ng-hide - happens after the ngShow expression evaluates to a truthy value and the just before contents are set to visible\n * removeClass: .ng-hide - happens after the ngShow expression evaluates to a non truthy value and just before the contents are set to hidden\n *\n * @element ANY\n * @param {expression} ngShow If the {@link guide/expression expression} is truthy\n *     then the element is shown or hidden respectively.\n *\n * @example\n  <example module=\"ngAnimate\" deps=\"angular-animate.js\" animations=\"true\">\n    <file name=\"index.html\">\n      Click me: <input type=\"checkbox\" ng-model=\"checked\"><br/>\n      <div>\n        Show:\n        <div class=\"check-element animate-show\" ng-show=\"checked\">\n          <span class=\"glyphicon glyphicon-thumbs-up\"></span> I show up when your checkbox is checked.\n        </div>\n      </div>\n      <div>\n        Hide:\n        <div class=\"check-element animate-show\" ng-hide=\"checked\">\n          <span class=\"glyphicon glyphicon-thumbs-down\"></span> I hide when your checkbox is checked.\n        </div>\n      </div>\n    </file>\n    <file name=\"glyphicons.css\">\n      @import url(//netdna.bootstrapcdn.com/bootstrap/3.0.0/css/bootstrap-glyphicons.css);\n    </file>\n    <file name=\"animations.css\">\n      .animate-show {\n        -webkit-transition:all linear 0.5s;\n        transition:all linear 0.5s;\n        line-height:20px;\n        opacity:1;\n        padding:10px;\n        border:1px solid black;\n        background:white;\n      }\n\n      .animate-show.ng-hide {\n        line-height:0;\n        opacity:0;\n        padding:0 10px;\n      }\n\n      .check-element {\n        padding:10px;\n        border:1px solid black;\n        background:white;\n      }\n    </file>\n    <file name=\"protractor.js\" type=\"protractor\">\n      var thumbsUp = element(by.css('span.glyphicon-thumbs-up'));\n      var thumbsDown = element(by.css('span.glyphicon-thumbs-down'));\n\n      it('should check ng-show / ng-hide', function() {\n        expect(thumbsUp.isDisplayed()).toBeFalsy();\n        expect(thumbsDown.isDisplayed()).toBeTruthy();\n\n        element(by.model('checked')).click();\n\n        expect(thumbsUp.isDisplayed()).toBeTruthy();\n        expect(thumbsDown.isDisplayed()).toBeFalsy();\n      });\n    </file>\n  </example>\n */\nvar ngShowDirective = ['$animate', function($animate) {\n  return function(scope, element, attr) {\n    scope.$watch(attr.ngShow, function ngShowWatchAction(value){\n      $animate[toBoolean(value) ? 'removeClass' : 'addClass'](element, 'ng-hide');\n    });\n  };\n}];\n\n\n/**\n * @ngdoc directive\n * @name ngHide\n *\n * @description\n * The `ngHide` directive shows or hides the given HTML element based on the expression\n * provided to the ngHide attribute. The element is shown or hidden by removing or adding\n * the `ng-hide` CSS class onto the element. The `.ng-hide` CSS class is predefined\n * in AngularJS and sets the display style to none (using an !important flag).\n * For CSP mode please add `angular-csp.css` to your html file (see {@link ng.directive:ngCsp ngCsp}).\n *\n * ```html\n * <!-- when $scope.myValue is truthy (element is hidden) -->\n * <div ng-hide=\"myValue\" class=\"ng-hide\"></div>\n *\n * <!-- when $scope.myValue is falsy (element is visible) -->\n * <div ng-hide=\"myValue\"></div>\n * ```\n *\n * When the ngHide expression evaluates to true then the .ng-hide CSS class is added to the class attribute\n * on the element causing it to become hidden. When false, the ng-hide CSS class is removed\n * from the element causing the element not to appear hidden.\n *\n * <div class=\"alert alert-warning\">\n * **Note:** Here is a list of values that ngHide will consider as a falsy value (case insensitive):<br />\n * \"f\" / \"0\" / \"false\" / \"no\" / \"n\" / \"[]\"\n * </div>\n *\n * ## Why is !important used?\n *\n * You may be wondering why !important is used for the .ng-hide CSS class. This is because the `.ng-hide` selector\n * can be easily overridden by heavier selectors. For example, something as simple\n * as changing the display style on a HTML list item would make hidden elements appear visible.\n * This also becomes a bigger issue when dealing with CSS frameworks.\n *\n * By using !important, the show and hide behavior will work as expected despite any clash between CSS selector\n * specificity (when !important isn't used with any conflicting styles). If a developer chooses to override the\n * styling to change how to hide an element then it is just a matter of using !important in their own CSS code.\n *\n * ### Overriding .ng-hide\n *\n * By default, the `.ng-hide` class will style the element with `display:none!important`. If you wish to change\n * the hide behavior with ngShow/ngHide then this can be achieved by restating the styles for the `.ng-hide`\n * class in CSS:\n *\n * ```css\n * .ng-hide {\n *   //this is just another form of hiding an element\n *   display:block!important;\n *   position:absolute;\n *   top:-9999px;\n *   left:-9999px;\n * }\n * ```\n *\n * By default you don't need to override in CSS anything and the animations will work around the display style.\n *\n * ## A note about animations with ngHide\n *\n * Animations in ngShow/ngHide work with the show and hide events that are triggered when the directive expression\n * is true and false. This system works like the animation system present with ngClass, except that the `.ng-hide`\n * CSS class is added and removed for you instead of your own CSS class.\n *\n * ```css\n * //\n * //a working example can be found at the bottom of this page\n * //\n * .my-element.ng-hide-add, .my-element.ng-hide-remove {\n *   transition:0.5s linear all;\n * }\n *\n * .my-element.ng-hide-add { ... }\n * .my-element.ng-hide-add.ng-hide-add-active { ... }\n * .my-element.ng-hide-remove { ... }\n * .my-element.ng-hide-remove.ng-hide-remove-active { ... }\n * ```\n *\n * Keep in mind that, as of AngularJS version 1.2.17 (and 1.3.0-beta.11), there is no need to change the display\n * property to block during animation states--ngAnimate will handle the style toggling automatically for you.\n *\n * @animations\n * removeClass: .ng-hide - happens after the ngHide expression evaluates to a truthy value and just before the contents are set to hidden\n * addClass: .ng-hide - happens after the ngHide expression evaluates to a non truthy value and just before the contents are set to visible\n *\n * @element ANY\n * @param {expression} ngHide If the {@link guide/expression expression} is truthy then\n *     the element is shown or hidden respectively.\n *\n * @example\n  <example module=\"ngAnimate\" deps=\"angular-animate.js\" animations=\"true\">\n    <file name=\"index.html\">\n      Click me: <input type=\"checkbox\" ng-model=\"checked\"><br/>\n      <div>\n        Show:\n        <div class=\"check-element animate-hide\" ng-show=\"checked\">\n          <span class=\"glyphicon glyphicon-thumbs-up\"></span> I show up when your checkbox is checked.\n        </div>\n      </div>\n      <div>\n        Hide:\n        <div class=\"check-element animate-hide\" ng-hide=\"checked\">\n          <span class=\"glyphicon glyphicon-thumbs-down\"></span> I hide when your checkbox is checked.\n        </div>\n      </div>\n    </file>\n    <file name=\"glyphicons.css\">\n      @import url(//netdna.bootstrapcdn.com/bootstrap/3.0.0/css/bootstrap-glyphicons.css);\n    </file>\n    <file name=\"animations.css\">\n      .animate-hide {\n        -webkit-transition:all linear 0.5s;\n        transition:all linear 0.5s;\n        line-height:20px;\n        opacity:1;\n        padding:10px;\n        border:1px solid black;\n        background:white;\n      }\n\n      .animate-hide.ng-hide {\n        line-height:0;\n        opacity:0;\n        padding:0 10px;\n      }\n\n      .check-element {\n        padding:10px;\n        border:1px solid black;\n        background:white;\n      }\n    </file>\n    <file name=\"protractor.js\" type=\"protractor\">\n      var thumbsUp = element(by.css('span.glyphicon-thumbs-up'));\n      var thumbsDown = element(by.css('span.glyphicon-thumbs-down'));\n\n      it('should check ng-show / ng-hide', function() {\n        expect(thumbsUp.isDisplayed()).toBeFalsy();\n        expect(thumbsDown.isDisplayed()).toBeTruthy();\n\n        element(by.model('checked')).click();\n\n        expect(thumbsUp.isDisplayed()).toBeTruthy();\n        expect(thumbsDown.isDisplayed()).toBeFalsy();\n      });\n    </file>\n  </example>\n */\nvar ngHideDirective = ['$animate', function($animate) {\n  return function(scope, element, attr) {\n    scope.$watch(attr.ngHide, function ngHideWatchAction(value){\n      $animate[toBoolean(value) ? 'addClass' : 'removeClass'](element, 'ng-hide');\n    });\n  };\n}];\n\n/**\n * @ngdoc directive\n * @name ngStyle\n * @restrict AC\n *\n * @description\n * The `ngStyle` directive allows you to set CSS style on an HTML element conditionally.\n *\n * @element ANY\n * @param {expression} ngStyle\n *\n * {@link guide/expression Expression} which evals to an\n * object whose keys are CSS style names and values are corresponding values for those CSS\n * keys.\n *\n * Since some CSS style names are not valid keys for an object, they must be quoted.\n * See the 'background-color' style in the example below.\n *\n * @example\n   <example>\n     <file name=\"index.html\">\n        <input type=\"button\" value=\"set color\" ng-click=\"myStyle={color:'red'}\">\n        <input type=\"button\" value=\"set background\" ng-click=\"myStyle={'background-color':'blue'}\">\n        <input type=\"button\" value=\"clear\" ng-click=\"myStyle={}\">\n        <br/>\n        <span ng-style=\"myStyle\">Sample Text</span>\n        <pre>myStyle={{myStyle}}</pre>\n     </file>\n     <file name=\"style.css\">\n       span {\n         color: black;\n       }\n     </file>\n     <file name=\"protractor.js\" type=\"protractor\">\n       var colorSpan = element(by.css('span'));\n\n       iit('should check ng-style', function() {\n         expect(colorSpan.getCssValue('color')).toBe('rgba(0, 0, 0, 1)');\n         element(by.css('input[value=\\'set color\\']')).click();\n         expect(colorSpan.getCssValue('color')).toBe('rgba(255, 0, 0, 1)');\n         element(by.css('input[value=clear]')).click();\n         expect(colorSpan.getCssValue('color')).toBe('rgba(0, 0, 0, 1)');\n       });\n     </file>\n   </example>\n */\nvar ngStyleDirective = ngDirective(function(scope, element, attr) {\n  scope.$watch(attr.ngStyle, function ngStyleWatchAction(newStyles, oldStyles) {\n    if (oldStyles && (newStyles !== oldStyles)) {\n      forEach(oldStyles, function(val, style) { element.css(style, '');});\n    }\n    if (newStyles) element.css(newStyles);\n  }, true);\n});\n\n/**\n * @ngdoc directive\n * @name ngSwitch\n * @restrict EA\n *\n * @description\n * The `ngSwitch` directive is used to conditionally swap DOM structure on your template based on a scope expression.\n * Elements within `ngSwitch` but without `ngSwitchWhen` or `ngSwitchDefault` directives will be preserved at the location\n * as specified in the template.\n *\n * The directive itself works similar to ngInclude, however, instead of downloading template code (or loading it\n * from the template cache), `ngSwitch` simply chooses one of the nested elements and makes it visible based on which element\n * matches the value obtained from the evaluated expression. In other words, you define a container element\n * (where you place the directive), place an expression on the **`on=\"...\"` attribute**\n * (or the **`ng-switch=\"...\"` attribute**), define any inner elements inside of the directive and place\n * a when attribute per element. The when attribute is used to inform ngSwitch which element to display when the on\n * expression is evaluated. If a matching expression is not found via a when attribute then an element with the default\n * attribute is displayed.\n *\n * <div class=\"alert alert-info\">\n * Be aware that the attribute values to match against cannot be expressions. They are interpreted\n * as literal string values to match against.\n * For example, **`ng-switch-when=\"someVal\"`** will match against the string `\"someVal\"` not against the\n * value of the expression `$scope.someVal`.\n * </div>\n\n * @animations\n * enter - happens after the ngSwitch contents change and the matched child element is placed inside the container\n * leave - happens just after the ngSwitch contents change and just before the former contents are removed from the DOM\n *\n * @usage\n *\n * ```\n * <ANY ng-switch=\"expression\">\n *   <ANY ng-switch-when=\"matchValue1\">...</ANY>\n *   <ANY ng-switch-when=\"matchValue2\">...</ANY>\n *   <ANY ng-switch-default>...</ANY>\n * </ANY>\n * ```\n *\n *\n * @scope\n * @priority 800\n * @param {*} ngSwitch|on expression to match against <tt>ng-switch-when</tt>.\n * On child elements add:\n *\n * * `ngSwitchWhen`: the case statement to match against. If match then this\n *   case will be displayed. If the same match appears multiple times, all the\n *   elements will be displayed.\n * * `ngSwitchDefault`: the default case when no other case match. If there\n *   are multiple default cases, all of them will be displayed when no other\n *   case match.\n *\n *\n * @example\n  <example module=\"ngAnimate\" deps=\"angular-animate.js\" animations=\"true\">\n    <file name=\"index.html\">\n      <div ng-controller=\"Ctrl\">\n        <select ng-model=\"selection\" ng-options=\"item for item in items\">\n        </select>\n        <tt>selection={{selection}}</tt>\n        <hr/>\n        <div class=\"animate-switch-container\"\n          ng-switch on=\"selection\">\n            <div class=\"animate-switch\" ng-switch-when=\"settings\">Settings Div</div>\n            <div class=\"animate-switch\" ng-switch-when=\"home\">Home Span</div>\n            <div class=\"animate-switch\" ng-switch-default>default</div>\n        </div>\n      </div>\n    </file>\n    <file name=\"script.js\">\n      function Ctrl($scope) {\n        $scope.items = ['settings', 'home', 'other'];\n        $scope.selection = $scope.items[0];\n      }\n    </file>\n    <file name=\"animations.css\">\n      .animate-switch-container {\n        position:relative;\n        background:white;\n        border:1px solid black;\n        height:40px;\n        overflow:hidden;\n      }\n\n      .animate-switch {\n        padding:10px;\n      }\n\n      .animate-switch.ng-animate {\n        -webkit-transition:all cubic-bezier(0.250, 0.460, 0.450, 0.940) 0.5s;\n        transition:all cubic-bezier(0.250, 0.460, 0.450, 0.940) 0.5s;\n\n        position:absolute;\n        top:0;\n        left:0;\n        right:0;\n        bottom:0;\n      }\n\n      .animate-switch.ng-leave.ng-leave-active,\n      .animate-switch.ng-enter {\n        top:-50px;\n      }\n      .animate-switch.ng-leave,\n      .animate-switch.ng-enter.ng-enter-active {\n        top:0;\n      }\n    </file>\n    <file name=\"protractor.js\" type=\"protractor\">\n      var switchElem = element(by.css('[ng-switch]'));\n      var select = element(by.model('selection'));\n\n      it('should start in settings', function() {\n        expect(switchElem.getText()).toMatch(/Settings Div/);\n      });\n      it('should change to home', function() {\n        select.element.all(by.css('option')).get(1).click();\n        expect(switchElem.getText()).toMatch(/Home Span/);\n      });\n      it('should select default', function() {\n        select.element.all(by.css('option')).get(2).click();\n        expect(switchElem.getText()).toMatch(/default/);\n      });\n    </file>\n  </example>\n */\nvar ngSwitchDirective = ['$animate', function($animate) {\n  return {\n    restrict: 'EA',\n    require: 'ngSwitch',\n\n    // asks for $scope to fool the BC controller module\n    controller: ['$scope', function ngSwitchController() {\n     this.cases = {};\n    }],\n    link: function(scope, element, attr, ngSwitchController) {\n      var watchExpr = attr.ngSwitch || attr.on,\n          selectedTranscludes = [],\n          selectedElements = [],\n          previousElements = [],\n          selectedScopes = [];\n\n      scope.$watch(watchExpr, function ngSwitchWatchAction(value) {\n        var i, ii;\n        for (i = 0, ii = previousElements.length; i < ii; ++i) {\n          previousElements[i].remove();\n        }\n        previousElements.length = 0;\n\n        for (i = 0, ii = selectedScopes.length; i < ii; ++i) {\n          var selected = selectedElements[i];\n          selectedScopes[i].$destroy();\n          previousElements[i] = selected;\n          $animate.leave(selected, function() {\n            previousElements.splice(i, 1);\n          });\n        }\n\n        selectedElements.length = 0;\n        selectedScopes.length = 0;\n\n        if ((selectedTranscludes = ngSwitchController.cases['!' + value] || ngSwitchController.cases['?'])) {\n          scope.$eval(attr.change);\n          forEach(selectedTranscludes, function(selectedTransclude) {\n            var selectedScope = scope.$new();\n            selectedScopes.push(selectedScope);\n            selectedTransclude.transclude(selectedScope, function(caseElement) {\n              var anchor = selectedTransclude.element;\n\n              selectedElements.push(caseElement);\n              $animate.enter(caseElement, anchor.parent(), anchor);\n            });\n          });\n        }\n      });\n    }\n  };\n}];\n\nvar ngSwitchWhenDirective = ngDirective({\n  transclude: 'element',\n  priority: 800,\n  require: '^ngSwitch',\n  link: function(scope, element, attrs, ctrl, $transclude) {\n    ctrl.cases['!' + attrs.ngSwitchWhen] = (ctrl.cases['!' + attrs.ngSwitchWhen] || []);\n    ctrl.cases['!' + attrs.ngSwitchWhen].push({ transclude: $transclude, element: element });\n  }\n});\n\nvar ngSwitchDefaultDirective = ngDirective({\n  transclude: 'element',\n  priority: 800,\n  require: '^ngSwitch',\n  link: function(scope, element, attr, ctrl, $transclude) {\n    ctrl.cases['?'] = (ctrl.cases['?'] || []);\n    ctrl.cases['?'].push({ transclude: $transclude, element: element });\n   }\n});\n\n/**\n * @ngdoc directive\n * @name ngTransclude\n * @restrict AC\n *\n * @description\n * Directive that marks the insertion point for the transcluded DOM of the nearest parent directive that uses transclusion.\n *\n * Any existing content of the element that this directive is placed on will be removed before the transcluded content is inserted.\n *\n * @element ANY\n *\n * @example\n   <example module=\"transclude\">\n     <file name=\"index.html\">\n       <script>\n         function Ctrl($scope) {\n           $scope.title = 'Lorem Ipsum';\n           $scope.text = 'Neque porro quisquam est qui dolorem ipsum quia dolor...';\n         }\n\n         angular.module('transclude', [])\n          .directive('pane', function(){\n             return {\n               restrict: 'E',\n               transclude: true,\n               scope: { title:'@' },\n               template: '<div style=\"border: 1px solid black;\">' +\n                           '<div style=\"background-color: gray\">{{title}}</div>' +\n                           '<div ng-transclude></div>' +\n                         '</div>'\n             };\n         });\n       </script>\n       <div ng-controller=\"Ctrl\">\n         <input ng-model=\"title\"><br>\n         <textarea ng-model=\"text\"></textarea> <br/>\n         <pane title=\"{{title}}\">{{text}}</pane>\n       </div>\n     </file>\n     <file name=\"protractor.js\" type=\"protractor\">\n        it('should have transcluded', function() {\n          var titleElement = element(by.model('title'));\n          titleElement.clear();\n          titleElement.sendKeys('TITLE');\n          var textElement = element(by.model('text'));\n          textElement.clear();\n          textElement.sendKeys('TEXT');\n          expect(element(by.binding('title')).getText()).toEqual('TITLE');\n          expect(element(by.binding('text')).getText()).toEqual('TEXT');\n        });\n     </file>\n   </example>\n *\n */\nvar ngTranscludeDirective = ngDirective({\n  link: function($scope, $element, $attrs, controller, $transclude) {\n    if (!$transclude) {\n      throw minErr('ngTransclude')('orphan',\n       'Illegal use of ngTransclude directive in the template! ' +\n       'No parent directive that requires a transclusion found. ' +\n       'Element: {0}',\n       startingTag($element));\n    }\n\n    $transclude(function(clone) {\n      $element.empty();\n      $element.append(clone);\n    });\n  }\n});\n\n/**\n * @ngdoc directive\n * @name script\n * @restrict E\n *\n * @description\n * Load the content of a `<script>` element into {@link ng.$templateCache `$templateCache`}, so that the\n * template can be used by {@link ng.directive:ngInclude `ngInclude`},\n * {@link ngRoute.directive:ngView `ngView`}, or {@link guide/directive directives}. The type of the\n * `<script>` element must be specified as `text/ng-template`, and a cache name for the template must be\n * assigned through the element's `id`, which can then be used as a directive's `templateUrl`.\n *\n * @param {string} type Must be set to `'text/ng-template'`.\n * @param {string} id Cache name of the template.\n *\n * @example\n  <example>\n    <file name=\"index.html\">\n      <script type=\"text/ng-template\" id=\"/tpl.html\">\n        Content of the template.\n      </script>\n\n      <a ng-click=\"currentTpl='/tpl.html'\" id=\"tpl-link\">Load inlined template</a>\n      <div id=\"tpl-content\" ng-include src=\"currentTpl\"></div>\n    </file>\n    <file name=\"protractor.js\" type=\"protractor\">\n      it('should load template defined inside script tag', function() {\n        element(by.css('#tpl-link')).click();\n        expect(element(by.css('#tpl-content')).getText()).toMatch(/Content of the template/);\n      });\n    </file>\n  </example>\n */\nvar scriptDirective = ['$templateCache', function($templateCache) {\n  return {\n    restrict: 'E',\n    terminal: true,\n    compile: function(element, attr) {\n      if (attr.type == 'text/ng-template') {\n        var templateUrl = attr.id,\n            // IE is not consistent, in scripts we have to read .text but in other nodes we have to read .textContent\n            text = element[0].text;\n\n        $templateCache.put(templateUrl, text);\n      }\n    }\n  };\n}];\n\nvar ngOptionsMinErr = minErr('ngOptions');\n/**\n * @ngdoc directive\n * @name select\n * @restrict E\n *\n * @description\n * HTML `SELECT` element with angular data-binding.\n *\n * # `ngOptions`\n *\n * The `ngOptions` attribute can be used to dynamically generate a list of `<option>`\n * elements for the `<select>` element using the array or object obtained by evaluating the\n * `ngOptions` comprehension_expression.\n *\n * When an item in the `<select>` menu is selected, the array element or object property\n * represented by the selected option will be bound to the model identified by the `ngModel`\n * directive.\n *\n * <div class=\"alert alert-warning\">\n * **Note:** `ngModel` compares by reference, not value. This is important when binding to an\n * array of objects. See an example [in this jsfiddle](http://jsfiddle.net/qWzTb/).\n * </div>\n *\n * Optionally, a single hard-coded `<option>` element, with the value set to an empty string, can\n * be nested into the `<select>` element. This element will then represent the `null` or \"not selected\"\n * option. See example below for demonstration.\n *\n * <div class=\"alert alert-warning\">\n * **Note:** `ngOptions` provides an iterator facility for the `<option>` element which should be used instead\n * of {@link ng.directive:ngRepeat ngRepeat} when you want the\n * `select` model to be bound to a non-string value. This is because an option element can only\n * be bound to string values at present.\n * </div>\n *\n * @param {string} ngModel Assignable angular expression to data-bind to.\n * @param {string=} name Property name of the form under which the control is published.\n * @param {string=} required The control is considered valid only if value is entered.\n * @param {string=} ngRequired Adds `required` attribute and `required` validation constraint to\n *    the element when the ngRequired expression evaluates to true. Use `ngRequired` instead of\n *    `required` when you want to data-bind to the `required` attribute.\n * @param {comprehension_expression=} ngOptions in one of the following forms:\n *\n *   * for array data sources:\n *     * `label` **`for`** `value` **`in`** `array`\n *     * `select` **`as`** `label` **`for`** `value` **`in`** `array`\n *     * `label`  **`group by`** `group` **`for`** `value` **`in`** `array`\n *     * `select` **`as`** `label` **`group by`** `group` **`for`** `value` **`in`** `array` **`track by`** `trackexpr`\n *   * for object data sources:\n *     * `label` **`for (`**`key` **`,`** `value`**`) in`** `object`\n *     * `select` **`as`** `label` **`for (`**`key` **`,`** `value`**`) in`** `object`\n *     * `label` **`group by`** `group` **`for (`**`key`**`,`** `value`**`) in`** `object`\n *     * `select` **`as`** `label` **`group by`** `group`\n *         **`for` `(`**`key`**`,`** `value`**`) in`** `object`\n *\n * Where:\n *\n *   * `array` / `object`: an expression which evaluates to an array / object to iterate over.\n *   * `value`: local variable which will refer to each item in the `array` or each property value\n *      of `object` during iteration.\n *   * `key`: local variable which will refer to a property name in `object` during iteration.\n *   * `label`: The result of this expression will be the label for `<option>` element. The\n *     `expression` will most likely refer to the `value` variable (e.g. `value.propertyName`).\n *   * `select`: The result of this expression will be bound to the model of the parent `<select>`\n *      element. If not specified, `select` expression will default to `value`.\n *   * `group`: The result of this expression will be used to group options using the `<optgroup>`\n *      DOM element.\n *   * `trackexpr`: Used when working with an array of objects. The result of this expression will be\n *      used to identify the objects in the array. The `trackexpr` will most likely refer to the\n *     `value` variable (e.g. `value.propertyName`).\n *\n * @example\n    <example>\n      <file name=\"index.html\">\n        <script>\n        function MyCntrl($scope) {\n          $scope.colors = [\n            {name:'black', shade:'dark'},\n            {name:'white', shade:'light'},\n            {name:'red', shade:'dark'},\n            {name:'blue', shade:'dark'},\n            {name:'yellow', shade:'light'}\n          ];\n          $scope.myColor = $scope.colors[2]; // red\n        }\n        </script>\n        <div ng-controller=\"MyCntrl\">\n          <ul>\n            <li ng-repeat=\"color in colors\">\n              Name: <input ng-model=\"color.name\">\n              [<a href ng-click=\"colors.splice($index, 1)\">X</a>]\n            </li>\n            <li>\n              [<a href ng-click=\"colors.push({})\">add</a>]\n            </li>\n          </ul>\n          <hr/>\n          Color (null not allowed):\n          <select ng-model=\"myColor\" ng-options=\"color.name for color in colors\"></select><br>\n\n          Color (null allowed):\n          <span  class=\"nullable\">\n            <select ng-model=\"myColor\" ng-options=\"color.name for color in colors\">\n              <option value=\"\">-- choose color --</option>\n            </select>\n          </span><br/>\n\n          Color grouped by shade:\n          <select ng-model=\"myColor\" ng-options=\"color.name group by color.shade for color in colors\">\n          </select><br/>\n\n\n          Select <a href ng-click=\"myColor = { name:'not in list', shade: 'other' }\">bogus</a>.<br>\n          <hr/>\n          Currently selected: {{ {selected_color:myColor}  }}\n          <div style=\"border:solid 1px black; height:20px\"\n               ng-style=\"{'background-color':myColor.name}\">\n          </div>\n        </div>\n      </file>\n      <file name=\"protractor.js\" type=\"protractor\">\n         it('should check ng-options', function() {\n           expect(element(by.binding('{selected_color:myColor}')).getText()).toMatch('red');\n           element.all(by.select('myColor')).first().click();\n           element.all(by.css('select[ng-model=\"myColor\"] option')).first().click();\n           expect(element(by.binding('{selected_color:myColor}')).getText()).toMatch('black');\n           element(by.css('.nullable select[ng-model=\"myColor\"]')).click();\n           element.all(by.css('.nullable select[ng-model=\"myColor\"] option')).first().click();\n           expect(element(by.binding('{selected_color:myColor}')).getText()).toMatch('null');\n         });\n      </file>\n    </example>\n */\n\nvar ngOptionsDirective = valueFn({ terminal: true });\n// jshint maxlen: false\nvar selectDirective = ['$compile', '$parse', function($compile,   $parse) {\n                         //000011111111110000000000022222222220000000000000000000003333333333000000000000004444444444444440000000005555555555555550000000666666666666666000000000000000777777777700000000000000000008888888888\n  var NG_OPTIONS_REGEXP = /^\\s*([\\s\\S]+?)(?:\\s+as\\s+([\\s\\S]+?))?(?:\\s+group\\s+by\\s+([\\s\\S]+?))?\\s+for\\s+(?:([\\$\\w][\\$\\w]*)|(?:\\(\\s*([\\$\\w][\\$\\w]*)\\s*,\\s*([\\$\\w][\\$\\w]*)\\s*\\)))\\s+in\\s+([\\s\\S]+?)(?:\\s+track\\s+by\\s+([\\s\\S]+?))?$/,\n      nullModelCtrl = {$setViewValue: noop};\n// jshint maxlen: 100\n\n  return {\n    restrict: 'E',\n    require: ['select', '?ngModel'],\n    controller: ['$element', '$scope', '$attrs', function($element, $scope, $attrs) {\n      var self = this,\n          optionsMap = {},\n          ngModelCtrl = nullModelCtrl,\n          nullOption,\n          unknownOption;\n\n\n      self.databound = $attrs.ngModel;\n\n\n      self.init = function(ngModelCtrl_, nullOption_, unknownOption_) {\n        ngModelCtrl = ngModelCtrl_;\n        nullOption = nullOption_;\n        unknownOption = unknownOption_;\n      };\n\n\n      self.addOption = function(value) {\n        assertNotHasOwnProperty(value, '\"option value\"');\n        optionsMap[value] = true;\n\n        if (ngModelCtrl.$viewValue == value) {\n          $element.val(value);\n          if (unknownOption.parent()) unknownOption.remove();\n        }\n      };\n\n\n      self.removeOption = function(value) {\n        if (this.hasOption(value)) {\n          delete optionsMap[value];\n          if (ngModelCtrl.$viewValue == value) {\n            this.renderUnknownOption(value);\n          }\n        }\n      };\n\n\n      self.renderUnknownOption = function(val) {\n        var unknownVal = '? ' + hashKey(val) + ' ?';\n        unknownOption.val(unknownVal);\n        $element.prepend(unknownOption);\n        $element.val(unknownVal);\n        unknownOption.prop('selected', true); // needed for IE\n      };\n\n\n      self.hasOption = function(value) {\n        return optionsMap.hasOwnProperty(value);\n      };\n\n      $scope.$on('$destroy', function() {\n        // disable unknown option so that we don't do work when the whole select is being destroyed\n        self.renderUnknownOption = noop;\n      });\n    }],\n\n    link: function(scope, element, attr, ctrls) {\n      // if ngModel is not defined, we don't need to do anything\n      if (!ctrls[1]) return;\n\n      var selectCtrl = ctrls[0],\n          ngModelCtrl = ctrls[1],\n          multiple = attr.multiple,\n          optionsExp = attr.ngOptions,\n          nullOption = false, // if false, user will not be able to select it (used by ngOptions)\n          emptyOption,\n          // we can't just jqLite('<option>') since jqLite is not smart enough\n          // to create it in <select> and IE barfs otherwise.\n          optionTemplate = jqLite(document.createElement('option')),\n          optGroupTemplate =jqLite(document.createElement('optgroup')),\n          unknownOption = optionTemplate.clone();\n\n      // find \"null\" option\n      for(var i = 0, children = element.children(), ii = children.length; i < ii; i++) {\n        if (children[i].value === '') {\n          emptyOption = nullOption = children.eq(i);\n          break;\n        }\n      }\n\n      selectCtrl.init(ngModelCtrl, nullOption, unknownOption);\n\n      // required validator\n      if (multiple) {\n        ngModelCtrl.$isEmpty = function(value) {\n          return !value || value.length === 0;\n        };\n      }\n\n      if (optionsExp) setupAsOptions(scope, element, ngModelCtrl);\n      else if (multiple) setupAsMultiple(scope, element, ngModelCtrl);\n      else setupAsSingle(scope, element, ngModelCtrl, selectCtrl);\n\n\n      ////////////////////////////\n\n\n\n      function setupAsSingle(scope, selectElement, ngModelCtrl, selectCtrl) {\n        ngModelCtrl.$render = function() {\n          var viewValue = ngModelCtrl.$viewValue;\n\n          if (selectCtrl.hasOption(viewValue)) {\n            if (unknownOption.parent()) unknownOption.remove();\n            selectElement.val(viewValue);\n            if (viewValue === '') emptyOption.prop('selected', true); // to make IE9 happy\n          } else {\n            if (isUndefined(viewValue) && emptyOption) {\n              selectElement.val('');\n            } else {\n              selectCtrl.renderUnknownOption(viewValue);\n            }\n          }\n        };\n\n        selectElement.on('change', function() {\n          scope.$apply(function() {\n            if (unknownOption.parent()) unknownOption.remove();\n            ngModelCtrl.$setViewValue(selectElement.val());\n          });\n        });\n      }\n\n      function setupAsMultiple(scope, selectElement, ctrl) {\n        var lastView;\n        ctrl.$render = function() {\n          var items = new HashMap(ctrl.$viewValue);\n          forEach(selectElement.find('option'), function(option) {\n            option.selected = isDefined(items.get(option.value));\n          });\n        };\n\n        // we have to do it on each watch since ngModel watches reference, but\n        // we need to work of an array, so we need to see if anything was inserted/removed\n        scope.$watch(function selectMultipleWatch() {\n          if (!equals(lastView, ctrl.$viewValue)) {\n            lastView = shallowCopy(ctrl.$viewValue);\n            ctrl.$render();\n          }\n        });\n\n        selectElement.on('change', function() {\n          scope.$apply(function() {\n            var array = [];\n            forEach(selectElement.find('option'), function(option) {\n              if (option.selected) {\n                array.push(option.value);\n              }\n            });\n            ctrl.$setViewValue(array);\n          });\n        });\n      }\n\n      function setupAsOptions(scope, selectElement, ctrl) {\n        var match;\n\n        if (!(match = optionsExp.match(NG_OPTIONS_REGEXP))) {\n          throw ngOptionsMinErr('iexp',\n            \"Expected expression in form of \" +\n            \"'_select_ (as _label_)? for (_key_,)?_value_ in _collection_'\" +\n            \" but got '{0}'. Element: {1}\",\n            optionsExp, startingTag(selectElement));\n        }\n\n        var displayFn = $parse(match[2] || match[1]),\n            valueName = match[4] || match[6],\n            keyName = match[5],\n            groupByFn = $parse(match[3] || ''),\n            valueFn = $parse(match[2] ? match[1] : valueName),\n            valuesFn = $parse(match[7]),\n            track = match[8],\n            trackFn = track ? $parse(match[8]) : null,\n            // This is an array of array of existing option groups in DOM.\n            // We try to reuse these if possible\n            // - optionGroupsCache[0] is the options with no option group\n            // - optionGroupsCache[?][0] is the parent: either the SELECT or OPTGROUP element\n            optionGroupsCache = [[{element: selectElement, label:''}]];\n\n        if (nullOption) {\n          // compile the element since there might be bindings in it\n          $compile(nullOption)(scope);\n\n          // remove the class, which is added automatically because we recompile the element and it\n          // becomes the compilation root\n          nullOption.removeClass('ng-scope');\n\n          // we need to remove it before calling selectElement.empty() because otherwise IE will\n          // remove the label from the element. wtf?\n          nullOption.remove();\n        }\n\n        // clear contents, we'll add what's needed based on the model\n        selectElement.empty();\n\n        selectElement.on('change', function() {\n          scope.$apply(function() {\n            var optionGroup,\n                collection = valuesFn(scope) || [],\n                locals = {},\n                key, value, optionElement, index, groupIndex, length, groupLength, trackIndex;\n\n            if (multiple) {\n              value = [];\n              for (groupIndex = 0, groupLength = optionGroupsCache.length;\n                   groupIndex < groupLength;\n                   groupIndex++) {\n                // list of options for that group. (first item has the parent)\n                optionGroup = optionGroupsCache[groupIndex];\n\n                for(index = 1, length = optionGroup.length; index < length; index++) {\n                  if ((optionElement = optionGroup[index].element)[0].selected) {\n                    key = optionElement.val();\n                    if (keyName) locals[keyName] = key;\n                    if (trackFn) {\n                      for (trackIndex = 0; trackIndex < collection.length; trackIndex++) {\n                        locals[valueName] = collection[trackIndex];\n                        if (trackFn(scope, locals) == key) break;\n                      }\n                    } else {\n                      locals[valueName] = collection[key];\n                    }\n                    value.push(valueFn(scope, locals));\n                  }\n                }\n              }\n            } else {\n              key = selectElement.val();\n              if (key == '?') {\n                value = undefined;\n              } else if (key === ''){\n                value = null;\n              } else {\n                if (trackFn) {\n                  for (trackIndex = 0; trackIndex < collection.length; trackIndex++) {\n                    locals[valueName] = collection[trackIndex];\n                    if (trackFn(scope, locals) == key) {\n                      value = valueFn(scope, locals);\n                      break;\n                    }\n                  }\n                } else {\n                  locals[valueName] = collection[key];\n                  if (keyName) locals[keyName] = key;\n                  value = valueFn(scope, locals);\n                }\n              }\n              // Update the null option's selected property here so $render cleans it up correctly\n              if (optionGroupsCache[0].length > 1) {\n                if (optionGroupsCache[0][1].id !== key) {\n                  optionGroupsCache[0][1].selected = false;\n                }\n              }\n            }\n            ctrl.$setViewValue(value);\n          });\n        });\n\n        ctrl.$render = render;\n\n        // TODO(vojta): can't we optimize this ?\n        scope.$watch(render);\n\n        function render() {\n              // Temporary location for the option groups before we render them\n          var optionGroups = {'':[]},\n              optionGroupNames = [''],\n              optionGroupName,\n              optionGroup,\n              option,\n              existingParent, existingOptions, existingOption,\n              modelValue = ctrl.$modelValue,\n              values = valuesFn(scope) || [],\n              keys = keyName ? sortedKeys(values) : values,\n              key,\n              groupLength, length,\n              groupIndex, index,\n              locals = {},\n              selected,\n              selectedSet = false, // nothing is selected yet\n              lastElement,\n              element,\n              label;\n\n          if (multiple) {\n            if (trackFn && isArray(modelValue)) {\n              selectedSet = new HashMap([]);\n              for (var trackIndex = 0; trackIndex < modelValue.length; trackIndex++) {\n                locals[valueName] = modelValue[trackIndex];\n                selectedSet.put(trackFn(scope, locals), modelValue[trackIndex]);\n              }\n            } else {\n              selectedSet = new HashMap(modelValue);\n            }\n          }\n\n          // We now build up the list of options we need (we merge later)\n          for (index = 0; length = keys.length, index < length; index++) {\n\n            key = index;\n            if (keyName) {\n              key = keys[index];\n              if ( key.charAt(0) === '$' ) continue;\n              locals[keyName] = key;\n            }\n\n            locals[valueName] = values[key];\n\n            optionGroupName = groupByFn(scope, locals) || '';\n            if (!(optionGroup = optionGroups[optionGroupName])) {\n              optionGroup = optionGroups[optionGroupName] = [];\n              optionGroupNames.push(optionGroupName);\n            }\n            if (multiple) {\n              selected = isDefined(\n                selectedSet.remove(trackFn ? trackFn(scope, locals) : valueFn(scope, locals))\n              );\n            } else {\n              if (trackFn) {\n                var modelCast = {};\n                modelCast[valueName] = modelValue;\n                selected = trackFn(scope, modelCast) === trackFn(scope, locals);\n              } else {\n                selected = modelValue === valueFn(scope, locals);\n              }\n              selectedSet = selectedSet || selected; // see if at least one item is selected\n            }\n            label = displayFn(scope, locals); // what will be seen by the user\n\n            // doing displayFn(scope, locals) || '' overwrites zero values\n            label = isDefined(label) ? label : '';\n            optionGroup.push({\n              // either the index into array or key from object\n              id: trackFn ? trackFn(scope, locals) : (keyName ? keys[index] : index),\n              label: label,\n              selected: selected                   // determine if we should be selected\n            });\n          }\n          if (!multiple) {\n            if (nullOption || modelValue === null) {\n              // insert null option if we have a placeholder, or the model is null\n              optionGroups[''].unshift({id:'', label:'', selected:!selectedSet});\n            } else if (!selectedSet) {\n              // option could not be found, we have to insert the undefined item\n              optionGroups[''].unshift({id:'?', label:'', selected:true});\n            }\n          }\n\n          // Now we need to update the list of DOM nodes to match the optionGroups we computed above\n          for (groupIndex = 0, groupLength = optionGroupNames.length;\n               groupIndex < groupLength;\n               groupIndex++) {\n            // current option group name or '' if no group\n            optionGroupName = optionGroupNames[groupIndex];\n\n            // list of options for that group. (first item has the parent)\n            optionGroup = optionGroups[optionGroupName];\n\n            if (optionGroupsCache.length <= groupIndex) {\n              // we need to grow the optionGroups\n              existingParent = {\n                element: optGroupTemplate.clone().attr('label', optionGroupName),\n                label: optionGroup.label\n              };\n              existingOptions = [existingParent];\n              optionGroupsCache.push(existingOptions);\n              selectElement.append(existingParent.element);\n            } else {\n              existingOptions = optionGroupsCache[groupIndex];\n              existingParent = existingOptions[0];  // either SELECT (no group) or OPTGROUP element\n\n              // update the OPTGROUP label if not the same.\n              if (existingParent.label != optionGroupName) {\n                existingParent.element.attr('label', existingParent.label = optionGroupName);\n              }\n            }\n\n            lastElement = null;  // start at the beginning\n            for(index = 0, length = optionGroup.length; index < length; index++) {\n              option = optionGroup[index];\n              if ((existingOption = existingOptions[index+1])) {\n                // reuse elements\n                lastElement = existingOption.element;\n                if (existingOption.label !== option.label) {\n                  lastElement.text(existingOption.label = option.label);\n                }\n                if (existingOption.id !== option.id) {\n                  lastElement.val(existingOption.id = option.id);\n                }\n                // lastElement.prop('selected') provided by jQuery has side-effects\n                if (existingOption.selected !== option.selected) {\n                  lastElement.prop('selected', (existingOption.selected = option.selected));\n                }\n              } else {\n                // grow elements\n\n                // if it's a null option\n                if (option.id === '' && nullOption) {\n                  // put back the pre-compiled element\n                  element = nullOption;\n                } else {\n                  // jQuery(v1.4.2) Bug: We should be able to chain the method calls, but\n                  // in this version of jQuery on some browser the .text() returns a string\n                  // rather then the element.\n                  (element = optionTemplate.clone())\n                      .val(option.id)\n                      .attr('selected', option.selected)\n                      .text(option.label);\n                }\n\n                existingOptions.push(existingOption = {\n                    element: element,\n                    label: option.label,\n                    id: option.id,\n                    selected: option.selected\n                });\n                if (lastElement) {\n                  lastElement.after(element);\n                } else {\n                  existingParent.element.append(element);\n                }\n                lastElement = element;\n              }\n            }\n            // remove any excessive OPTIONs in a group\n            index++; // increment since the existingOptions[0] is parent element not OPTION\n            while(existingOptions.length > index) {\n              existingOptions.pop().element.remove();\n            }\n          }\n          // remove any excessive OPTGROUPs from select\n          while(optionGroupsCache.length > groupIndex) {\n            optionGroupsCache.pop()[0].element.remove();\n          }\n        }\n      }\n    }\n  };\n}];\n\nvar optionDirective = ['$interpolate', function($interpolate) {\n  var nullSelectCtrl = {\n    addOption: noop,\n    removeOption: noop\n  };\n\n  return {\n    restrict: 'E',\n    priority: 100,\n    compile: function(element, attr) {\n      if (isUndefined(attr.value)) {\n        var interpolateFn = $interpolate(element.text(), true);\n        if (!interpolateFn) {\n          attr.$set('value', element.text());\n        }\n      }\n\n      return function (scope, element, attr) {\n        var selectCtrlName = '$selectController',\n            parent = element.parent(),\n            selectCtrl = parent.data(selectCtrlName) ||\n              parent.parent().data(selectCtrlName); // in case we are in optgroup\n\n        if (selectCtrl && selectCtrl.databound) {\n          // For some reason Opera defaults to true and if not overridden this messes up the repeater.\n          // We don't want the view to drive the initialization of the model anyway.\n          element.prop('selected', false);\n        } else {\n          selectCtrl = nullSelectCtrl;\n        }\n\n        if (interpolateFn) {\n          scope.$watch(interpolateFn, function interpolateWatchAction(newVal, oldVal) {\n            attr.$set('value', newVal);\n            if (newVal !== oldVal) selectCtrl.removeOption(oldVal);\n            selectCtrl.addOption(newVal);\n          });\n        } else {\n          selectCtrl.addOption(attr.value);\n        }\n\n        element.on('$destroy', function() {\n          selectCtrl.removeOption(attr.value);\n        });\n      };\n    }\n  };\n}];\n\nvar styleDirective = valueFn({\n  restrict: 'E',\n  terminal: true\n});\n\n  if (window.angular.bootstrap) {\n    //AngularJS is already loaded, so we can return here...\n    console.log('WARNING: Tried to load angular more than once.');\n    return;\n  }\n\n  //try to bind to jquery now so that one can write angular.element().read()\n  //but we will rebind on bootstrap again.\n  bindJQuery();\n\n  publishExternalAPI(angular);\n\n  jqLite(document).ready(function() {\n    angularInit(document, bootstrap);\n  });\n\n})(window, document);\n\n!window.angular.$$csp() && window.angular.element(document).find('head').prepend('<style type=\"text/css\">@charset \"UTF-8\";[ng\\\\:cloak],[ng-cloak],[data-ng-cloak],[x-ng-cloak],.ng-cloak,.x-ng-cloak,.ng-hide{display:none !important;}ng\\\\:form{display:block;}.ng-animate-block-transitions{transition:0s all!important;-webkit-transition:0s all!important;}.ng-hide-add-active,.ng-hide-remove{display:block!important;}</style>');"
  },
  {
    "path": "content/present-ionic/slides/ionic/js/angular-ui/angular-ui-router.js",
    "content": "/**\n * State-based routing for AngularJS\n * @version v0.2.10\n * @link http://angular-ui.github.com/\n * @license MIT License, http://www.opensource.org/licenses/MIT\n */\n\n/* commonjs package manager support (eg componentjs) */\nif (typeof module !== \"undefined\" && typeof exports !== \"undefined\" && module.exports === exports){\n  module.exports = 'ui.router';\n}\n\n(function (window, angular, undefined) {\n/*jshint globalstrict:true*/\n/*global angular:false*/\n'use strict';\n\nvar isDefined = angular.isDefined,\n    isFunction = angular.isFunction,\n    isString = angular.isString,\n    isObject = angular.isObject,\n    isArray = angular.isArray,\n    forEach = angular.forEach,\n    extend = angular.extend,\n    copy = angular.copy;\n\nfunction inherit(parent, extra) {\n  return extend(new (extend(function() {}, { prototype: parent }))(), extra);\n}\n\nfunction merge(dst) {\n  forEach(arguments, function(obj) {\n    if (obj !== dst) {\n      forEach(obj, function(value, key) {\n        if (!dst.hasOwnProperty(key)) dst[key] = value;\n      });\n    }\n  });\n  return dst;\n}\n\n/**\n * Finds the common ancestor path between two states.\n *\n * @param {Object} first The first state.\n * @param {Object} second The second state.\n * @return {Array} Returns an array of state names in descending order, not including the root.\n */\nfunction ancestors(first, second) {\n  var path = [];\n\n  for (var n in first.path) {\n    if (first.path[n] !== second.path[n]) break;\n    path.push(first.path[n]);\n  }\n  return path;\n}\n\n/**\n * IE8-safe wrapper for `Object.keys()`.\n *\n * @param {Object} object A JavaScript object.\n * @return {Array} Returns the keys of the object as an array.\n */\nfunction keys(object) {\n  if (Object.keys) {\n    return Object.keys(object);\n  }\n  var result = [];\n\n  angular.forEach(object, function(val, key) {\n    result.push(key);\n  });\n  return result;\n}\n\n/**\n * IE8-safe wrapper for `Array.prototype.indexOf()`.\n *\n * @param {Array} array A JavaScript array.\n * @param {*} value A value to search the array for.\n * @return {Number} Returns the array index value of `value`, or `-1` if not present.\n */\nfunction arraySearch(array, value) {\n  if (Array.prototype.indexOf) {\n    return array.indexOf(value, Number(arguments[2]) || 0);\n  }\n  var len = array.length >>> 0, from = Number(arguments[2]) || 0;\n  from = (from < 0) ? Math.ceil(from) : Math.floor(from);\n\n  if (from < 0) from += len;\n\n  for (; from < len; from++) {\n    if (from in array && array[from] === value) return from;\n  }\n  return -1;\n}\n\n/**\n * Merges a set of parameters with all parameters inherited between the common parents of the\n * current state and a given destination state.\n *\n * @param {Object} currentParams The value of the current state parameters ($stateParams).\n * @param {Object} newParams The set of parameters which will be composited with inherited params.\n * @param {Object} $current Internal definition of object representing the current state.\n * @param {Object} $to Internal definition of object representing state to transition to.\n */\nfunction inheritParams(currentParams, newParams, $current, $to) {\n  var parents = ancestors($current, $to), parentParams, inherited = {}, inheritList = [];\n\n  for (var i in parents) {\n    if (!parents[i].params || !parents[i].params.length) continue;\n    parentParams = parents[i].params;\n\n    for (var j in parentParams) {\n      if (arraySearch(inheritList, parentParams[j]) >= 0) continue;\n      inheritList.push(parentParams[j]);\n      inherited[parentParams[j]] = currentParams[parentParams[j]];\n    }\n  }\n  return extend({}, inherited, newParams);\n}\n\n/**\n * Normalizes a set of values to string or `null`, filtering them by a list of keys.\n *\n * @param {Array} keys The list of keys to normalize/return.\n * @param {Object} values An object hash of values to normalize.\n * @return {Object} Returns an object hash of normalized string values.\n */\nfunction normalize(keys, values) {\n  var normalized = {};\n\n  forEach(keys, function (name) {\n    var value = values[name];\n    normalized[name] = (value != null) ? String(value) : null;\n  });\n  return normalized;\n}\n\n/**\n * Performs a non-strict comparison of the subset of two objects, defined by a list of keys.\n *\n * @param {Object} a The first object.\n * @param {Object} b The second object.\n * @param {Array} keys The list of keys within each object to compare. If the list is empty or not specified,\n *                     it defaults to the list of keys in `a`.\n * @return {Boolean} Returns `true` if the keys match, otherwise `false`.\n */\nfunction equalForKeys(a, b, keys) {\n  if (!keys) {\n    keys = [];\n    for (var n in a) keys.push(n); // Used instead of Object.keys() for IE8 compatibility\n  }\n\n  for (var i=0; i<keys.length; i++) {\n    var k = keys[i];\n    if (a[k] != b[k]) return false; // Not '===', values aren't necessarily normalized\n  }\n  return true;\n}\n\n/**\n * Returns the subset of an object, based on a list of keys.\n *\n * @param {Array} keys\n * @param {Object} values\n * @return {Boolean} Returns a subset of `values`.\n */\nfunction filterByKeys(keys, values) {\n  var filtered = {};\n\n  forEach(keys, function (name) {\n    filtered[name] = values[name];\n  });\n  return filtered;\n}\n/**\n * @ngdoc overview\n * @name ui.router.util\n *\n * @description\n * # ui.router.util sub-module\n *\n * This module is a dependency of other sub-modules. Do not include this module as a dependency\n * in your angular app (use {@link ui.router} module instead).\n *\n */\nangular.module('ui.router.util', ['ng']);\n\n/**\n * @ngdoc overview\n * @name ui.router.router\n * \n * @requires ui.router.util\n *\n * @description\n * # ui.router.router sub-module\n *\n * This module is a dependency of other sub-modules. Do not include this module as a dependency\n * in your angular app (use {@link ui.router} module instead).\n */\nangular.module('ui.router.router', ['ui.router.util']);\n\n/**\n * @ngdoc overview\n * @name ui.router.state\n * \n * @requires ui.router.router\n * @requires ui.router.util\n *\n * @description\n * # ui.router.state sub-module\n *\n * This module is a dependency of the main ui.router module. Do not include this module as a dependency\n * in your angular app (use {@link ui.router} module instead).\n * \n */\nangular.module('ui.router.state', ['ui.router.router', 'ui.router.util']);\n\n/**\n * @ngdoc overview\n * @name ui.router\n *\n * @requires ui.router.state\n *\n * @description\n * # ui.router\n * \n * ## The main module for ui.router \n * There are several sub-modules included with the ui.router module, however only this module is needed\n * as a dependency within your angular app. The other modules are for organization purposes. \n *\n * The modules are:\n * * ui.router - the main \"umbrella\" module\n * * ui.router.router - \n * \n * *You'll need to include **only** this module as the dependency within your angular app.*\n * \n * <pre>\n * <!doctype html>\n * <html ng-app=\"myApp\">\n * <head>\n *   <script src=\"js/angular.js\"></script>\n *   <!-- Include the ui-router script -->\n *   <script src=\"js/angular-ui-router.min.js\"></script>\n *   <script>\n *     // ...and add 'ui.router' as a dependency\n *     var myApp = angular.module('myApp', ['ui.router']);\n *   </script>\n * </head>\n * <body>\n * </body>\n * </html>\n * </pre>\n */\nangular.module('ui.router', ['ui.router.state']);\n\nangular.module('ui.router.compat', ['ui.router']);\n\n/**\n * @ngdoc object\n * @name ui.router.util.$resolve\n *\n * @requires $q\n * @requires $injector\n *\n * @description\n * Manages resolution of (acyclic) graphs of promises.\n */\n$Resolve.$inject = ['$q', '$injector'];\nfunction $Resolve(  $q,    $injector) {\n  \n  var VISIT_IN_PROGRESS = 1,\n      VISIT_DONE = 2,\n      NOTHING = {},\n      NO_DEPENDENCIES = [],\n      NO_LOCALS = NOTHING,\n      NO_PARENT = extend($q.when(NOTHING), { $$promises: NOTHING, $$values: NOTHING });\n  \n\n  /**\n   * @ngdoc function\n   * @name ui.router.util.$resolve#study\n   * @methodOf ui.router.util.$resolve\n   *\n   * @description\n   * Studies a set of invocables that are likely to be used multiple times.\n   * <pre>\n   * $resolve.study(invocables)(locals, parent, self)\n   * </pre>\n   * is equivalent to\n   * <pre>\n   * $resolve.resolve(invocables, locals, parent, self)\n   * </pre>\n   * but the former is more efficient (in fact `resolve` just calls `study` \n   * internally).\n   *\n   * @param {object} invocables Invocable objects\n   * @return {function} a function to pass in locals, parent and self\n   */\n  this.study = function (invocables) {\n    if (!isObject(invocables)) throw new Error(\"'invocables' must be an object\");\n    \n    // Perform a topological sort of invocables to build an ordered plan\n    var plan = [], cycle = [], visited = {};\n    function visit(value, key) {\n      if (visited[key] === VISIT_DONE) return;\n      \n      cycle.push(key);\n      if (visited[key] === VISIT_IN_PROGRESS) {\n        cycle.splice(0, cycle.indexOf(key));\n        throw new Error(\"Cyclic dependency: \" + cycle.join(\" -> \"));\n      }\n      visited[key] = VISIT_IN_PROGRESS;\n      \n      if (isString(value)) {\n        plan.push(key, [ function() { return $injector.get(value); }], NO_DEPENDENCIES);\n      } else {\n        var params = $injector.annotate(value);\n        forEach(params, function (param) {\n          if (param !== key && invocables.hasOwnProperty(param)) visit(invocables[param], param);\n        });\n        plan.push(key, value, params);\n      }\n      \n      cycle.pop();\n      visited[key] = VISIT_DONE;\n    }\n    forEach(invocables, visit);\n    invocables = cycle = visited = null; // plan is all that's required\n    \n    function isResolve(value) {\n      return isObject(value) && value.then && value.$$promises;\n    }\n    \n    return function (locals, parent, self) {\n      if (isResolve(locals) && self === undefined) {\n        self = parent; parent = locals; locals = null;\n      }\n      if (!locals) locals = NO_LOCALS;\n      else if (!isObject(locals)) {\n        throw new Error(\"'locals' must be an object\");\n      }       \n      if (!parent) parent = NO_PARENT;\n      else if (!isResolve(parent)) {\n        throw new Error(\"'parent' must be a promise returned by $resolve.resolve()\");\n      }\n      \n      // To complete the overall resolution, we have to wait for the parent\n      // promise and for the promise for each invokable in our plan.\n      var resolution = $q.defer(),\n          result = resolution.promise,\n          promises = result.$$promises = {},\n          values = extend({}, locals),\n          wait = 1 + plan.length/3,\n          merged = false;\n          \n      function done() {\n        // Merge parent values we haven't got yet and publish our own $$values\n        if (!--wait) {\n          if (!merged) merge(values, parent.$$values); \n          result.$$values = values;\n          result.$$promises = true; // keep for isResolve()\n          resolution.resolve(values);\n        }\n      }\n      \n      function fail(reason) {\n        result.$$failure = reason;\n        resolution.reject(reason);\n      }\n      \n      // Short-circuit if parent has already failed\n      if (isDefined(parent.$$failure)) {\n        fail(parent.$$failure);\n        return result;\n      }\n      \n      // Merge parent values if the parent has already resolved, or merge\n      // parent promises and wait if the parent resolve is still in progress.\n      if (parent.$$values) {\n        merged = merge(values, parent.$$values);\n        done();\n      } else {\n        extend(promises, parent.$$promises);\n        parent.then(done, fail);\n      }\n      \n      // Process each invocable in the plan, but ignore any where a local of the same name exists.\n      for (var i=0, ii=plan.length; i<ii; i+=3) {\n        if (locals.hasOwnProperty(plan[i])) done();\n        else invoke(plan[i], plan[i+1], plan[i+2]);\n      }\n      \n      function invoke(key, invocable, params) {\n        // Create a deferred for this invocation. Failures will propagate to the resolution as well.\n        var invocation = $q.defer(), waitParams = 0;\n        function onfailure(reason) {\n          invocation.reject(reason);\n          fail(reason);\n        }\n        // Wait for any parameter that we have a promise for (either from parent or from this\n        // resolve; in that case study() will have made sure it's ordered before us in the plan).\n        forEach(params, function (dep) {\n          if (promises.hasOwnProperty(dep) && !locals.hasOwnProperty(dep)) {\n            waitParams++;\n            promises[dep].then(function (result) {\n              values[dep] = result;\n              if (!(--waitParams)) proceed();\n            }, onfailure);\n          }\n        });\n        if (!waitParams) proceed();\n        function proceed() {\n          if (isDefined(result.$$failure)) return;\n          try {\n            invocation.resolve($injector.invoke(invocable, self, values));\n            invocation.promise.then(function (result) {\n              values[key] = result;\n              done();\n            }, onfailure);\n          } catch (e) {\n            onfailure(e);\n          }\n        }\n        // Publish promise synchronously; invocations further down in the plan may depend on it.\n        promises[key] = invocation.promise;\n      }\n      \n      return result;\n    };\n  };\n  \n  /**\n   * @ngdoc function\n   * @name ui.router.util.$resolve#resolve\n   * @methodOf ui.router.util.$resolve\n   *\n   * @description\n   * Resolves a set of invocables. An invocable is a function to be invoked via \n   * `$injector.invoke()`, and can have an arbitrary number of dependencies. \n   * An invocable can either return a value directly,\n   * or a `$q` promise. If a promise is returned it will be resolved and the \n   * resulting value will be used instead. Dependencies of invocables are resolved \n   * (in this order of precedence)\n   *\n   * - from the specified `locals`\n   * - from another invocable that is part of this `$resolve` call\n   * - from an invocable that is inherited from a `parent` call to `$resolve` \n   *   (or recursively\n   * - from any ancestor `$resolve` of that parent).\n   *\n   * The return value of `$resolve` is a promise for an object that contains \n   * (in this order of precedence)\n   *\n   * - any `locals` (if specified)\n   * - the resolved return values of all injectables\n   * - any values inherited from a `parent` call to `$resolve` (if specified)\n   *\n   * The promise will resolve after the `parent` promise (if any) and all promises \n   * returned by injectables have been resolved. If any invocable \n   * (or `$injector.invoke`) throws an exception, or if a promise returned by an \n   * invocable is rejected, the `$resolve` promise is immediately rejected with the \n   * same error. A rejection of a `parent` promise (if specified) will likewise be \n   * propagated immediately. Once the `$resolve` promise has been rejected, no \n   * further invocables will be called.\n   * \n   * Cyclic dependencies between invocables are not permitted and will caues `$resolve`\n   * to throw an error. As a special case, an injectable can depend on a parameter \n   * with the same name as the injectable, which will be fulfilled from the `parent` \n   * injectable of the same name. This allows inherited values to be decorated. \n   * Note that in this case any other injectable in the same `$resolve` with the same\n   * dependency would see the decorated value, not the inherited value.\n   *\n   * Note that missing dependencies -- unlike cyclic dependencies -- will cause an \n   * (asynchronous) rejection of the `$resolve` promise rather than a (synchronous) \n   * exception.\n   *\n   * Invocables are invoked eagerly as soon as all dependencies are available. \n   * This is true even for dependencies inherited from a `parent` call to `$resolve`.\n   *\n   * As a special case, an invocable can be a string, in which case it is taken to \n   * be a service name to be passed to `$injector.get()`. This is supported primarily \n   * for backwards-compatibility with the `resolve` property of `$routeProvider` \n   * routes.\n   *\n   * @param {object} invocables functions to invoke or \n   * `$injector` services to fetch.\n   * @param {object} locals  values to make available to the injectables\n   * @param {object} parent  a promise returned by another call to `$resolve`.\n   * @param {object} self  the `this` for the invoked methods\n   * @return {object} Promise for an object that contains the resolved return value\n   * of all invocables, as well as any inherited and local values.\n   */\n  this.resolve = function (invocables, locals, parent, self) {\n    return this.study(invocables)(locals, parent, self);\n  };\n}\n\nangular.module('ui.router.util').service('$resolve', $Resolve);\n\n\n/**\n * @ngdoc object\n * @name ui.router.util.$templateFactory\n *\n * @requires $http\n * @requires $templateCache\n * @requires $injector\n *\n * @description\n * Service. Manages loading of templates.\n */\n$TemplateFactory.$inject = ['$http', '$templateCache', '$injector'];\nfunction $TemplateFactory(  $http,   $templateCache,   $injector) {\n\n  /**\n   * @ngdoc function\n   * @name ui.router.util.$templateFactory#fromConfig\n   * @methodOf ui.router.util.$templateFactory\n   *\n   * @description\n   * Creates a template from a configuration object. \n   *\n   * @param {object} config Configuration object for which to load a template. \n   * The following properties are search in the specified order, and the first one \n   * that is defined is used to create the template:\n   *\n   * @param {string|object} config.template html string template or function to \n   * load via {@link ui.router.util.$templateFactory#fromString fromString}.\n   * @param {string|object} config.templateUrl url to load or a function returning \n   * the url to load via {@link ui.router.util.$templateFactory#fromUrl fromUrl}.\n   * @param {Function} config.templateProvider function to invoke via \n   * {@link ui.router.util.$templateFactory#fromProvider fromProvider}.\n   * @param {object} params  Parameters to pass to the template function.\n   * @param {object} locals Locals to pass to `invoke` if the template is loaded \n   * via a `templateProvider`. Defaults to `{ params: params }`.\n   *\n   * @return {string|object}  The template html as a string, or a promise for \n   * that string,or `null` if no template is configured.\n   */\n  this.fromConfig = function (config, params, locals) {\n    return (\n      isDefined(config.template) ? this.fromString(config.template, params) :\n      isDefined(config.templateUrl) ? this.fromUrl(config.templateUrl, params) :\n      isDefined(config.templateProvider) ? this.fromProvider(config.templateProvider, params, locals) :\n      null\n    );\n  };\n\n  /**\n   * @ngdoc function\n   * @name ui.router.util.$templateFactory#fromString\n   * @methodOf ui.router.util.$templateFactory\n   *\n   * @description\n   * Creates a template from a string or a function returning a string.\n   *\n   * @param {string|object} template html template as a string or function that \n   * returns an html template as a string.\n   * @param {object} params Parameters to pass to the template function.\n   *\n   * @return {string|object} The template html as a string, or a promise for that \n   * string.\n   */\n  this.fromString = function (template, params) {\n    return isFunction(template) ? template(params) : template;\n  };\n\n  /**\n   * @ngdoc function\n   * @name ui.router.util.$templateFactory#fromUrl\n   * @methodOf ui.router.util.$templateFactory\n   * \n   * @description\n   * Loads a template from the a URL via `$http` and `$templateCache`.\n   *\n   * @param {string|Function} url url of the template to load, or a function \n   * that returns a url.\n   * @param {Object} params Parameters to pass to the url function.\n   * @return {string|Promise.<string>} The template html as a string, or a promise \n   * for that string.\n   */\n  this.fromUrl = function (url, params) {\n    if (isFunction(url)) url = url(params);\n    if (url == null) return null;\n    else return $http\n        .get(url, { cache: $templateCache })\n        .then(function(response) { return response.data; });\n  };\n\n  /**\n   * @ngdoc function\n   * @name ui.router.util.$templateFactory#fromUrl\n   * @methodOf ui.router.util.$templateFactory\n   *\n   * @description\n   * Creates a template by invoking an injectable provider function.\n   *\n   * @param {Function} provider Function to invoke via `$injector.invoke`\n   * @param {Object} params Parameters for the template.\n   * @param {Object} locals Locals to pass to `invoke`. Defaults to \n   * `{ params: params }`.\n   * @return {string|Promise.<string>} The template html as a string, or a promise \n   * for that string.\n   */\n  this.fromProvider = function (provider, params, locals) {\n    return $injector.invoke(provider, null, locals || { params: params });\n  };\n}\n\nangular.module('ui.router.util').service('$templateFactory', $TemplateFactory);\n\n/**\n * @ngdoc object\n * @name ui.router.util.type:UrlMatcher\n *\n * @description\n * Matches URLs against patterns and extracts named parameters from the path or the search\n * part of the URL. A URL pattern consists of a path pattern, optionally followed by '?' and a list\n * of search parameters. Multiple search parameter names are separated by '&'. Search parameters\n * do not influence whether or not a URL is matched, but their values are passed through into\n * the matched parameters returned by {@link ui.router.util.type:UrlMatcher#methods_exec exec}.\n * \n * Path parameter placeholders can be specified using simple colon/catch-all syntax or curly brace\n * syntax, which optionally allows a regular expression for the parameter to be specified:\n *\n * * `':'` name - colon placeholder\n * * `'*'` name - catch-all placeholder\n * * `'{' name '}'` - curly placeholder\n * * `'{' name ':' regexp '}'` - curly placeholder with regexp. Should the regexp itself contain\n *   curly braces, they must be in matched pairs or escaped with a backslash.\n *\n * Parameter names may contain only word characters (latin letters, digits, and underscore) and\n * must be unique within the pattern (across both path and search parameters). For colon \n * placeholders or curly placeholders without an explicit regexp, a path parameter matches any\n * number of characters other than '/'. For catch-all placeholders the path parameter matches\n * any number of characters.\n * \n * Examples:\n * \n * * `'/hello/'` - Matches only if the path is exactly '/hello/'. There is no special treatment for\n *   trailing slashes, and patterns have to match the entire path, not just a prefix.\n * * `'/user/:id'` - Matches '/user/bob' or '/user/1234!!!' or even '/user/' but not '/user' or\n *   '/user/bob/details'. The second path segment will be captured as the parameter 'id'.\n * * `'/user/{id}'` - Same as the previous example, but using curly brace syntax.\n * * `'/user/{id:[^/]*}'` - Same as the previous example.\n * * `'/user/{id:[0-9a-fA-F]{1,8}}'` - Similar to the previous example, but only matches if the id\n *   parameter consists of 1 to 8 hex digits.\n * * `'/files/{path:.*}'` - Matches any URL starting with '/files/' and captures the rest of the\n *   path into the parameter 'path'.\n * * `'/files/*path'` - ditto.\n *\n * @param {string} pattern  the pattern to compile into a matcher.\n *\n * @property {string} prefix  A static prefix of this pattern. The matcher guarantees that any\n *   URL matching this matcher (i.e. any string for which {@link ui.router.util.type:UrlMatcher#methods_exec exec()} returns\n *   non-null) will start with this prefix.\n *\n * @property {string} source  The pattern that was passed into the contructor\n *\n * @property {string} sourcePath  The path portion of the source property\n *\n * @property {string} sourceSearch  The search portion of the source property\n *\n * @property {string} regex  The constructed regex that will be used to match against the url when \n *   it is time to determine which url will match.\n *\n * @returns {Object}  New UrlMatcher object\n */\nfunction UrlMatcher(pattern) {\n\n  // Find all placeholders and create a compiled pattern, using either classic or curly syntax:\n  //   '*' name\n  //   ':' name\n  //   '{' name '}'\n  //   '{' name ':' regexp '}'\n  // The regular expression is somewhat complicated due to the need to allow curly braces\n  // inside the regular expression. The placeholder regexp breaks down as follows:\n  //    ([:*])(\\w+)               classic placeholder ($1 / $2)\n  //    \\{(\\w+)(?:\\:( ... ))?\\}   curly brace placeholder ($3) with optional regexp ... ($4)\n  //    (?: ... | ... | ... )+    the regexp consists of any number of atoms, an atom being either\n  //    [^{}\\\\]+                  - anything other than curly braces or backslash\n  //    \\\\.                       - a backslash escape\n  //    \\{(?:[^{}\\\\]+|\\\\.)*\\}     - a matched set of curly braces containing other atoms\n  var placeholder = /([:*])(\\w+)|\\{(\\w+)(?:\\:((?:[^{}\\\\]+|\\\\.|\\{(?:[^{}\\\\]+|\\\\.)*\\})+))?\\}/g,\n      names = {}, compiled = '^', last = 0, m,\n      segments = this.segments = [],\n      params = this.params = [];\n\n  function addParameter(id) {\n    if (!/^\\w+(-+\\w+)*$/.test(id)) throw new Error(\"Invalid parameter name '\" + id + \"' in pattern '\" + pattern + \"'\");\n    if (names[id]) throw new Error(\"Duplicate parameter name '\" + id + \"' in pattern '\" + pattern + \"'\");\n    names[id] = true;\n    params.push(id);\n  }\n\n  function quoteRegExp(string) {\n    return string.replace(/[\\\\\\[\\]\\^$*+?.()|{}]/g, \"\\\\$&\");\n  }\n\n  this.source = pattern;\n\n  // Split into static segments separated by path parameter placeholders.\n  // The number of segments is always 1 more than the number of parameters.\n  var id, regexp, segment;\n  while ((m = placeholder.exec(pattern))) {\n    id = m[2] || m[3]; // IE[78] returns '' for unmatched groups instead of null\n    regexp = m[4] || (m[1] == '*' ? '.*' : '[^/]*');\n    segment = pattern.substring(last, m.index);\n    if (segment.indexOf('?') >= 0) break; // we're into the search part\n    compiled += quoteRegExp(segment) + '(' + regexp + ')';\n    addParameter(id);\n    segments.push(segment);\n    last = placeholder.lastIndex;\n  }\n  segment = pattern.substring(last);\n\n  // Find any search parameter names and remove them from the last segment\n  var i = segment.indexOf('?');\n  if (i >= 0) {\n    var search = this.sourceSearch = segment.substring(i);\n    segment = segment.substring(0, i);\n    this.sourcePath = pattern.substring(0, last+i);\n\n    // Allow parameters to be separated by '?' as well as '&' to make concat() easier\n    forEach(search.substring(1).split(/[&?]/), addParameter);\n  } else {\n    this.sourcePath = pattern;\n    this.sourceSearch = '';\n  }\n\n  compiled += quoteRegExp(segment) + '$';\n  segments.push(segment);\n  this.regexp = new RegExp(compiled);\n  this.prefix = segments[0];\n}\n\n/**\n * @ngdoc function\n * @name ui.router.util.type:UrlMatcher#concat\n * @methodOf ui.router.util.type:UrlMatcher\n *\n * @description\n * Returns a new matcher for a pattern constructed by appending the path part and adding the\n * search parameters of the specified pattern to this pattern. The current pattern is not\n * modified. This can be understood as creating a pattern for URLs that are relative to (or\n * suffixes of) the current pattern.\n *\n * @example\n * The following two matchers are equivalent:\n * ```\n * new UrlMatcher('/user/{id}?q').concat('/details?date');\n * new UrlMatcher('/user/{id}/details?q&date');\n * ```\n *\n * @param {string} pattern  The pattern to append.\n * @returns {ui.router.util.type:UrlMatcher}  A matcher for the concatenated pattern.\n */\nUrlMatcher.prototype.concat = function (pattern) {\n  // Because order of search parameters is irrelevant, we can add our own search\n  // parameters to the end of the new pattern. Parse the new pattern by itself\n  // and then join the bits together, but it's much easier to do this on a string level.\n  return new UrlMatcher(this.sourcePath + pattern + this.sourceSearch);\n};\n\nUrlMatcher.prototype.toString = function () {\n  return this.source;\n};\n\n/**\n * @ngdoc function\n * @name ui.router.util.type:UrlMatcher#exec\n * @methodOf ui.router.util.type:UrlMatcher\n *\n * @description\n * Tests the specified path against this matcher, and returns an object containing the captured\n * parameter values, or null if the path does not match. The returned object contains the values\n * of any search parameters that are mentioned in the pattern, but their value may be null if\n * they are not present in `searchParams`. This means that search parameters are always treated\n * as optional.\n *\n * @example\n * ```\n * new UrlMatcher('/user/{id}?q&r').exec('/user/bob', { x:'1', q:'hello' });\n * // returns { id:'bob', q:'hello', r:null }\n * ```\n *\n * @param {string} path  The URL path to match, e.g. `$location.path()`.\n * @param {Object} searchParams  URL search parameters, e.g. `$location.search()`.\n * @returns {Object}  The captured parameter values.\n */\nUrlMatcher.prototype.exec = function (path, searchParams) {\n  var m = this.regexp.exec(path);\n  if (!m) return null;\n\n  var params = this.params, nTotal = params.length,\n    nPath = this.segments.length-1,\n    values = {}, i;\n\n  if (nPath !== m.length - 1) throw new Error(\"Unbalanced capture group in route '\" + this.source + \"'\");\n\n  for (i=0; i<nPath; i++) values[params[i]] = m[i+1];\n  for (/**/; i<nTotal; i++) values[params[i]] = searchParams[params[i]];\n\n  return values;\n};\n\n/**\n * @ngdoc function\n * @name ui.router.util.type:UrlMatcher#parameters\n * @methodOf ui.router.util.type:UrlMatcher\n *\n * @description\n * Returns the names of all path and search parameters of this pattern in an unspecified order.\n * \n * @returns {Array.<string>}  An array of parameter names. Must be treated as read-only. If the\n *    pattern has no parameters, an empty array is returned.\n */\nUrlMatcher.prototype.parameters = function () {\n  return this.params;\n};\n\n/**\n * @ngdoc function\n * @name ui.router.util.type:UrlMatcher#format\n * @methodOf ui.router.util.type:UrlMatcher\n *\n * @description\n * Creates a URL that matches this pattern by substituting the specified values\n * for the path and search parameters. Null values for path parameters are\n * treated as empty strings.\n *\n * @example\n * ```\n * new UrlMatcher('/user/{id}?q').format({ id:'bob', q:'yes' });\n * // returns '/user/bob?q=yes'\n * ```\n *\n * @param {Object} values  the values to substitute for the parameters in this pattern.\n * @returns {string}  the formatted URL (path and optionally search part).\n */\nUrlMatcher.prototype.format = function (values) {\n  var segments = this.segments, params = this.params;\n  if (!values) return segments.join('');\n\n  var nPath = segments.length-1, nTotal = params.length,\n    result = segments[0], i, search, value;\n\n  for (i=0; i<nPath; i++) {\n    value = values[params[i]];\n    // TODO: Maybe we should throw on null here? It's not really good style to use '' and null interchangeabley\n    if (value != null) result += encodeURIComponent(value);\n    result += segments[i+1];\n  }\n  for (/**/; i<nTotal; i++) {\n    value = values[params[i]];\n    if (value != null) {\n      result += (search ? '&' : '?') + params[i] + '=' + encodeURIComponent(value);\n      search = true;\n    }\n  }\n\n  return result;\n};\n\n\n\n/**\n * @ngdoc object\n * @name ui.router.util.$urlMatcherFactory\n *\n * @description\n * Factory for {@link ui.router.util.type:UrlMatcher} instances. The factory is also available to providers\n * under the name `$urlMatcherFactoryProvider`.\n */\nfunction $UrlMatcherFactory() {\n\n  /**\n   * @ngdoc function\n   * @name ui.router.util.$urlMatcherFactory#compile\n   * @methodOf ui.router.util.$urlMatcherFactory\n   *\n   * @description\n   * Creates a {@link ui.router.util.type:UrlMatcher} for the specified pattern.\n   *   \n   * @param {string} pattern  The URL pattern.\n   * @returns {ui.router.util.type:UrlMatcher}  The UrlMatcher.\n   */\n  this.compile = function (pattern) {\n    return new UrlMatcher(pattern);\n  };\n\n  /**\n   * @ngdoc function\n   * @name ui.router.util.$urlMatcherFactory#isMatcher\n   * @methodOf ui.router.util.$urlMatcherFactory\n   *\n   * @description\n   * Returns true if the specified object is a UrlMatcher, or false otherwise.\n   *\n   * @param {Object} object  The object to perform the type check against.\n   * @returns {Boolean}  Returns `true` if the object has the following functions: `exec`, `format`, and `concat`.\n   */\n  this.isMatcher = function (o) {\n    return isObject(o) && isFunction(o.exec) && isFunction(o.format) && isFunction(o.concat);\n  };\n  \n  /* No need to document $get, since it returns this */\n  this.$get = function () {\n    return this;\n  };\n}\n\n// Register as a provider so it's available to other providers\nangular.module('ui.router.util').provider('$urlMatcherFactory', $UrlMatcherFactory);\n\n/**\n * @ngdoc object\n * @name ui.router.router.$urlRouterProvider\n *\n * @requires ui.router.util.$urlMatcherFactoryProvider\n *\n * @description\n * `$urlRouterProvider` has the responsibility of watching `$location`. \n * When `$location` changes it runs through a list of rules one by one until a \n * match is found. `$urlRouterProvider` is used behind the scenes anytime you specify \n * a url in a state configuration. All urls are compiled into a UrlMatcher object.\n *\n * There are several methods on `$urlRouterProvider` that make it useful to use directly\n * in your module config.\n */\n$UrlRouterProvider.$inject = ['$urlMatcherFactoryProvider'];\nfunction $UrlRouterProvider(  $urlMatcherFactory) {\n  var rules = [], \n      otherwise = null;\n\n  // Returns a string that is a prefix of all strings matching the RegExp\n  function regExpPrefix(re) {\n    var prefix = /^\\^((?:\\\\[^a-zA-Z0-9]|[^\\\\\\[\\]\\^$*+?.()|{}]+)*)/.exec(re.source);\n    return (prefix != null) ? prefix[1].replace(/\\\\(.)/g, \"$1\") : '';\n  }\n\n  // Interpolates matched values into a String.replace()-style pattern\n  function interpolate(pattern, match) {\n    return pattern.replace(/\\$(\\$|\\d{1,2})/, function (m, what) {\n      return match[what === '$' ? 0 : Number(what)];\n    });\n  }\n\n  /**\n   * @ngdoc function\n   * @name ui.router.router.$urlRouterProvider#rule\n   * @methodOf ui.router.router.$urlRouterProvider\n   *\n   * @description\n   * Defines rules that are used by `$urlRouterProvider to find matches for\n   * specific URLs.\n   *\n   * @example\n   * <pre>\n   * var app = angular.module('app', ['ui.router.router']);\n   *\n   * app.config(function ($urlRouterProvider) {\n   *   // Here's an example of how you might allow case insensitive urls\n   *   $urlRouterProvider.rule(function ($injector, $location) {\n   *     var path = $location.path(),\n   *         normalized = path.toLowerCase();\n   *\n   *     if (path !== normalized) {\n   *       return normalized;\n   *     }\n   *   });\n   * });\n   * </pre>\n   *\n   * @param {object} rule Handler function that takes `$injector` and `$location`\n   * services as arguments. You can use them to return a valid path as a string.\n   *\n   * @return {object} $urlRouterProvider - $urlRouterProvider instance\n   */\n  this.rule =\n    function (rule) {\n      if (!isFunction(rule)) throw new Error(\"'rule' must be a function\");\n      rules.push(rule);\n      return this;\n    };\n\n  /**\n   * @ngdoc object\n   * @name ui.router.router.$urlRouterProvider#otherwise\n   * @methodOf ui.router.router.$urlRouterProvider\n   *\n   * @description\n   * Defines a path that is used when an invalied route is requested.\n   *\n   * @example\n   * <pre>\n   * var app = angular.module('app', ['ui.router.router']);\n   *\n   * app.config(function ($urlRouterProvider) {\n   *   // if the path doesn't match any of the urls you configured\n   *   // otherwise will take care of routing the user to the\n   *   // specified url\n   *   $urlRouterProvider.otherwise('/index');\n   *\n   *   // Example of using function rule as param\n   *   $urlRouterProvider.otherwise(function ($injector, $location) {\n   *     ...\n   *   });\n   * });\n   * </pre>\n   *\n   * @param {string|object} rule The url path you want to redirect to or a function \n   * rule that returns the url path. The function version is passed two params: \n   * `$injector` and `$location` services.\n   *\n   * @return {object} $urlRouterProvider - $urlRouterProvider instance\n   */\n  this.otherwise =\n    function (rule) {\n      if (isString(rule)) {\n        var redirect = rule;\n        rule = function () { return redirect; };\n      }\n      else if (!isFunction(rule)) throw new Error(\"'rule' must be a function\");\n      otherwise = rule;\n      return this;\n    };\n\n\n  function handleIfMatch($injector, handler, match) {\n    if (!match) return false;\n    var result = $injector.invoke(handler, handler, { $match: match });\n    return isDefined(result) ? result : true;\n  }\n\n  /**\n   * @ngdoc function\n   * @name ui.router.router.$urlRouterProvider#when\n   * @methodOf ui.router.router.$urlRouterProvider\n   *\n   * @description\n   * Registers a handler for a given url matching. if handle is a string, it is\n   * treated as a redirect, and is interpolated according to the syyntax of match\n   * (i.e. like String.replace() for RegExp, or like a UrlMatcher pattern otherwise).\n   *\n   * If the handler is a function, it is injectable. It gets invoked if `$location`\n   * matches. You have the option of inject the match object as `$match`.\n   *\n   * The handler can return\n   *\n   * - **falsy** to indicate that the rule didn't match after all, then `$urlRouter`\n   *   will continue trying to find another one that matches.\n   * - **string** which is treated as a redirect and passed to `$location.url()`\n   * - **void** or any **truthy** value tells `$urlRouter` that the url was handled.\n   *\n   * @example\n   * <pre>\n   * var app = angular.module('app', ['ui.router.router']);\n   *\n   * app.config(function ($urlRouterProvider) {\n   *   $urlRouterProvider.when($state.url, function ($match, $stateParams) {\n   *     if ($state.$current.navigable !== state ||\n   *         !equalForKeys($match, $stateParams) {\n   *      $state.transitionTo(state, $match, false);\n   *     }\n   *   });\n   * });\n   * </pre>\n   *\n   * @param {string|object} what The incoming path that you want to redirect.\n   * @param {string|object} handler The path you want to redirect your user to.\n   */\n  this.when =\n    function (what, handler) {\n      var redirect, handlerIsString = isString(handler);\n      if (isString(what)) what = $urlMatcherFactory.compile(what);\n\n      if (!handlerIsString && !isFunction(handler) && !isArray(handler))\n        throw new Error(\"invalid 'handler' in when()\");\n\n      var strategies = {\n        matcher: function (what, handler) {\n          if (handlerIsString) {\n            redirect = $urlMatcherFactory.compile(handler);\n            handler = ['$match', function ($match) { return redirect.format($match); }];\n          }\n          return extend(function ($injector, $location) {\n            return handleIfMatch($injector, handler, what.exec($location.path(), $location.search()));\n          }, {\n            prefix: isString(what.prefix) ? what.prefix : ''\n          });\n        },\n        regex: function (what, handler) {\n          if (what.global || what.sticky) throw new Error(\"when() RegExp must not be global or sticky\");\n\n          if (handlerIsString) {\n            redirect = handler;\n            handler = ['$match', function ($match) { return interpolate(redirect, $match); }];\n          }\n          return extend(function ($injector, $location) {\n            return handleIfMatch($injector, handler, what.exec($location.path()));\n          }, {\n            prefix: regExpPrefix(what)\n          });\n        }\n      };\n\n      var check = { matcher: $urlMatcherFactory.isMatcher(what), regex: what instanceof RegExp };\n\n      for (var n in check) {\n        if (check[n]) {\n          return this.rule(strategies[n](what, handler));\n        }\n      }\n\n      throw new Error(\"invalid 'what' in when()\");\n    };\n\n  /**\n   * @ngdoc object\n   * @name ui.router.router.$urlRouter\n   *\n   * @requires $location\n   * @requires $rootScope\n   * @requires $injector\n   *\n   * @description\n   *\n   */\n  this.$get =\n    [        '$location', '$rootScope', '$injector',\n    function ($location,   $rootScope,   $injector) {\n      // TODO: Optimize groups of rules with non-empty prefix into some sort of decision tree\n      function update(evt) {\n        if (evt && evt.defaultPrevented) return;\n        function check(rule) {\n          var handled = rule($injector, $location);\n          if (handled) {\n            if (isString(handled)) $location.replace().url(handled);\n            return true;\n          }\n          return false;\n        }\n        var n=rules.length, i;\n        for (i=0; i<n; i++) {\n          if (check(rules[i])) return;\n        }\n        // always check otherwise last to allow dynamic updates to the set of rules\n        if (otherwise) check(otherwise);\n      }\n\n      $rootScope.$on('$locationChangeSuccess', update);\n\n      return {\n        /**\n         * @ngdoc function\n         * @name ui.router.router.$urlRouter#sync\n         * @methodOf ui.router.router.$urlRouter\n         *\n         * @description\n         * Triggers an update; the same update that happens when the address bar url changes, aka `$locationChangeSuccess`.\n         * This method is useful when you need to use `preventDefault()` on the `$locationChangeSuccess` event, \n         * perform some custom logic (route protection, auth, config, redirection, etc) and then finally proceed \n         * with the transition by calling `$urlRouter.sync()`.\n         *\n         * @example\n         * <pre>\n         * angular.module('app', ['ui.router']);\n         *   .run(function($rootScope, $urlRouter) {\n         *     $rootScope.$on('$locationChangeSuccess', function(evt) {\n         *       // Halt state change from even starting\n         *       evt.preventDefault();\n         *       // Perform custom logic\n         *       var meetsRequirement = ...\n         *       // Continue with the update and state transition if logic allows\n         *       if (meetsRequirement) $urlRouter.sync();\n         *     });\n         * });\n         * </pre>\n         */\n        sync: function () {\n          update();\n        }\n      };\n    }];\n}\n\nangular.module('ui.router.router').provider('$urlRouter', $UrlRouterProvider);\n\n/**\n * @ngdoc object\n * @name ui.router.state.$stateProvider\n *\n * @requires ui.router.router.$urlRouterProvider\n * @requires ui.router.util.$urlMatcherFactoryProvider\n * @requires $locationProvider\n *\n * @description\n * The new `$stateProvider` works similar to Angular's v1 router, but it focuses purely\n * on state.\n *\n * A state corresponds to a \"place\" in the application in terms of the overall UI and\n * navigation. A state describes (via the controller / template / view properties) what\n * the UI looks like and does at that place.\n *\n * States often have things in common, and the primary way of factoring out these\n * commonalities in this model is via the state hierarchy, i.e. parent/child states aka\n * nested states.\n *\n * The `$stateProvider` provides interfaces to declare these states for your app.\n */\n$StateProvider.$inject = ['$urlRouterProvider', '$urlMatcherFactoryProvider', '$locationProvider'];\nfunction $StateProvider(   $urlRouterProvider,   $urlMatcherFactory,           $locationProvider) {\n\n  var root, states = {}, $state, queue = {}, abstractKey = 'abstract';\n\n  // Builds state properties from definition passed to registerState()\n  var stateBuilder = {\n\n    // Derive parent state from a hierarchical name only if 'parent' is not explicitly defined.\n    // state.children = [];\n    // if (parent) parent.children.push(state);\n    parent: function(state) {\n      if (isDefined(state.parent) && state.parent) return findState(state.parent);\n      // regex matches any valid composite state name\n      // would match \"contact.list\" but not \"contacts\"\n      var compositeName = /^(.+)\\.[^.]+$/.exec(state.name);\n      return compositeName ? findState(compositeName[1]) : root;\n    },\n\n    // inherit 'data' from parent and override by own values (if any)\n    data: function(state) {\n      if (state.parent && state.parent.data) {\n        state.data = state.self.data = extend({}, state.parent.data, state.data);\n      }\n      return state.data;\n    },\n\n    // Build a URLMatcher if necessary, either via a relative or absolute URL\n    url: function(state) {\n      var url = state.url;\n\n      if (isString(url)) {\n        if (url.charAt(0) == '^') {\n          return $urlMatcherFactory.compile(url.substring(1));\n        }\n        return (state.parent.navigable || root).url.concat(url);\n      }\n\n      if ($urlMatcherFactory.isMatcher(url) || url == null) {\n        return url;\n      }\n      throw new Error(\"Invalid url '\" + url + \"' in state '\" + state + \"'\");\n    },\n\n    // Keep track of the closest ancestor state that has a URL (i.e. is navigable)\n    navigable: function(state) {\n      return state.url ? state : (state.parent ? state.parent.navigable : null);\n    },\n\n    // Derive parameters for this state and ensure they're a super-set of parent's parameters\n    params: function(state) {\n      if (!state.params) {\n        return state.url ? state.url.parameters() : state.parent.params;\n      }\n      if (!isArray(state.params)) throw new Error(\"Invalid params in state '\" + state + \"'\");\n      if (state.url) throw new Error(\"Both params and url specicified in state '\" + state + \"'\");\n      return state.params;\n    },\n\n    // If there is no explicit multi-view configuration, make one up so we don't have\n    // to handle both cases in the view directive later. Note that having an explicit\n    // 'views' property will mean the default unnamed view properties are ignored. This\n    // is also a good time to resolve view names to absolute names, so everything is a\n    // straight lookup at link time.\n    views: function(state) {\n      var views = {};\n\n      forEach(isDefined(state.views) ? state.views : { '': state }, function (view, name) {\n        if (name.indexOf('@') < 0) name += '@' + state.parent.name;\n        views[name] = view;\n      });\n      return views;\n    },\n\n    ownParams: function(state) {\n      if (!state.parent) {\n        return state.params;\n      }\n      var paramNames = {}; forEach(state.params, function (p) { paramNames[p] = true; });\n\n      forEach(state.parent.params, function (p) {\n        if (!paramNames[p]) {\n          throw new Error(\"Missing required parameter '\" + p + \"' in state '\" + state.name + \"'\");\n        }\n        paramNames[p] = false;\n      });\n      var ownParams = [];\n\n      forEach(paramNames, function (own, p) {\n        if (own) ownParams.push(p);\n      });\n      return ownParams;\n    },\n\n    // Keep a full path from the root down to this state as this is needed for state activation.\n    path: function(state) {\n      return state.parent ? state.parent.path.concat(state) : []; // exclude root from path\n    },\n\n    // Speed up $state.contains() as it's used a lot\n    includes: function(state) {\n      var includes = state.parent ? extend({}, state.parent.includes) : {};\n      includes[state.name] = true;\n      return includes;\n    },\n\n    $delegates: {}\n  };\n\n  function isRelative(stateName) {\n    return stateName.indexOf(\".\") === 0 || stateName.indexOf(\"^\") === 0;\n  }\n\n  function findState(stateOrName, base) {\n    var isStr = isString(stateOrName),\n        name  = isStr ? stateOrName : stateOrName.name,\n        path  = isRelative(name);\n\n    if (path) {\n      if (!base) throw new Error(\"No reference point given for path '\"  + name + \"'\");\n      var rel = name.split(\".\"), i = 0, pathLength = rel.length, current = base;\n\n      for (; i < pathLength; i++) {\n        if (rel[i] === \"\" && i === 0) {\n          current = base;\n          continue;\n        }\n        if (rel[i] === \"^\") {\n          if (!current.parent) throw new Error(\"Path '\" + name + \"' not valid for state '\" + base.name + \"'\");\n          current = current.parent;\n          continue;\n        }\n        break;\n      }\n      rel = rel.slice(i).join(\".\");\n      name = current.name + (current.name && rel ? \".\" : \"\") + rel;\n    }\n    var state = states[name];\n\n    if (state && (isStr || (!isStr && (state === stateOrName || state.self === stateOrName)))) {\n      return state;\n    }\n    return undefined;\n  }\n\n  function queueState(parentName, state) {\n    if (!queue[parentName]) {\n      queue[parentName] = [];\n    }\n    queue[parentName].push(state);\n  }\n\n  function registerState(state) {\n    // Wrap a new object around the state so we can store our private details easily.\n    state = inherit(state, {\n      self: state,\n      resolve: state.resolve || {},\n      toString: function() { return this.name; }\n    });\n\n    var name = state.name;\n    if (!isString(name) || name.indexOf('@') >= 0) throw new Error(\"State must have a valid name\");\n    if (states.hasOwnProperty(name)) throw new Error(\"State '\" + name + \"'' is already defined\");\n\n    // Get parent name\n    var parentName = (name.indexOf('.') !== -1) ? name.substring(0, name.lastIndexOf('.'))\n        : (isString(state.parent)) ? state.parent\n        : '';\n\n    // If parent is not registered yet, add state to queue and register later\n    if (parentName && !states[parentName]) {\n      return queueState(parentName, state.self);\n    }\n\n    for (var key in stateBuilder) {\n      if (isFunction(stateBuilder[key])) state[key] = stateBuilder[key](state, stateBuilder.$delegates[key]);\n    }\n    states[name] = state;\n\n    // Register the state in the global state list and with $urlRouter if necessary.\n    if (!state[abstractKey] && state.url) {\n      $urlRouterProvider.when(state.url, ['$match', '$stateParams', function ($match, $stateParams) {\n        if ($state.$current.navigable != state || !equalForKeys($match, $stateParams)) {\n          $state.transitionTo(state, $match, { location: false });\n        }\n      }]);\n    }\n\n    // Register any queued children\n    if (queue[name]) {\n      for (var i = 0; i < queue[name].length; i++) {\n        registerState(queue[name][i]);\n      }\n    }\n\n    return state;\n  }\n\n  // Checks text to see if it looks like a glob.\n  function isGlob (text) {\n    return text.indexOf('*') > -1;\n  }\n\n  // Returns true if glob matches current $state name.\n  function doesStateMatchGlob (glob) {\n    var globSegments = glob.split('.'),\n        segments = $state.$current.name.split('.');\n\n    //match greedy starts\n    if (globSegments[0] === '**') {\n       segments = segments.slice(segments.indexOf(globSegments[1]));\n       segments.unshift('**');\n    }\n    //match greedy ends\n    if (globSegments[globSegments.length - 1] === '**') {\n       segments.splice(segments.indexOf(globSegments[globSegments.length - 2]) + 1, Number.MAX_VALUE);\n       segments.push('**');\n    }\n\n    if (globSegments.length != segments.length) {\n      return false;\n    }\n\n    //match single stars\n    for (var i = 0, l = globSegments.length; i < l; i++) {\n      if (globSegments[i] === '*') {\n        segments[i] = '*';\n      }\n    }\n\n    return segments.join('') === globSegments.join('');\n  }\n\n\n  // Implicit root state that is always active\n  root = registerState({\n    name: '',\n    url: '^',\n    views: null,\n    'abstract': true\n  });\n  root.navigable = null;\n\n\n  /**\n   * @ngdoc function\n   * @name ui.router.state.$stateProvider#decorator\n   * @methodOf ui.router.state.$stateProvider\n   *\n   * @description\n   * Allows you to extend (carefully) or override (at your own peril) the \n   * `stateBuilder` object used internally by `$stateProvider`. This can be used \n   * to add custom functionality to ui-router, for example inferring templateUrl \n   * based on the state name.\n   *\n   * When passing only a name, it returns the current (original or decorated) builder\n   * function that matches `name`.\n   *\n   * The builder functions that can be decorated are listed below. Though not all\n   * necessarily have a good use case for decoration, that is up to you to decide.\n   *\n   * In addition, users can attach custom decorators, which will generate new \n   * properties within the state's internal definition. There is currently no clear \n   * use-case for this beyond accessing internal states (i.e. $state.$current), \n   * however, expect this to become increasingly relevant as we introduce additional \n   * meta-programming features.\n   *\n   * **Warning**: Decorators should not be interdependent because the order of \n   * execution of the builder functions in non-deterministic. Builder functions \n   * should only be dependent on the state definition object and super function.\n   *\n   *\n   * Existing builder functions and current return values:\n   *\n   * - **parent** `{object}` - returns the parent state object.\n   * - **data** `{object}` - returns state data, including any inherited data that is not\n   *   overridden by own values (if any).\n   * - **url** `{object}` - returns a {link ui.router.util.type:UrlMatcher} or null.\n   * - **navigable** `{object}` - returns closest ancestor state that has a URL (aka is \n   *   navigable).\n   * - **params** `{object}` - returns an array of state params that are ensured to \n   *   be a super-set of parent's params.\n   * - **views** `{object}` - returns a views object where each key is an absolute view \n   *   name (i.e. \"viewName@stateName\") and each value is the config object \n   *   (template, controller) for the view. Even when you don't use the views object \n   *   explicitly on a state config, one is still created for you internally.\n   *   So by decorating this builder function you have access to decorating template \n   *   and controller properties.\n   * - **ownParams** `{object}` - returns an array of params that belong to the state, \n   *   not including any params defined by ancestor states.\n   * - **path** `{string}` - returns the full path from the root down to this state. \n   *   Needed for state activation.\n   * - **includes** `{object}` - returns an object that includes every state that \n   *   would pass a '$state.includes()' test.\n   *\n   * @example\n   * <pre>\n   * // Override the internal 'views' builder with a function that takes the state\n   * // definition, and a reference to the internal function being overridden:\n   * $stateProvider.decorator('views', function ($state, parent) {\n   *   var result = {},\n   *       views = parent(state);\n   *\n   *   angular.forEach(view, function (config, name) {\n   *     var autoName = (state.name + '.' + name).replace('.', '/');\n   *     config.templateUrl = config.templateUrl || '/partials/' + autoName + '.html';\n   *     result[name] = config;\n   *   });\n   *   return result;\n   * });\n   *\n   * $stateProvider.state('home', {\n   *   views: {\n   *     'contact.list': { controller: 'ListController' },\n   *     'contact.item': { controller: 'ItemController' }\n   *   }\n   * });\n   *\n   * // ...\n   *\n   * $state.go('home');\n   * // Auto-populates list and item views with /partials/home/contact/list.html,\n   * // and /partials/home/contact/item.html, respectively.\n   * </pre>\n   *\n   * @param {string} name The name of the builder function to decorate. \n   * @param {object} func A function that is responsible for decorating the original \n   * builder function. The function receives two parameters:\n   *\n   *   - `{object}` - state - The state config object.\n   *   - `{object}` - super - The original builder function.\n   *\n   * @return {object} $stateProvider - $stateProvider instance\n   */\n  this.decorator = decorator;\n  function decorator(name, func) {\n    /*jshint validthis: true */\n    if (isString(name) && !isDefined(func)) {\n      return stateBuilder[name];\n    }\n    if (!isFunction(func) || !isString(name)) {\n      return this;\n    }\n    if (stateBuilder[name] && !stateBuilder.$delegates[name]) {\n      stateBuilder.$delegates[name] = stateBuilder[name];\n    }\n    stateBuilder[name] = func;\n    return this;\n  }\n\n  /**\n   * @ngdoc function\n   * @name ui.router.state.$stateProvider#state\n   * @methodOf ui.router.state.$stateProvider\n   *\n   * @description\n   * Registers a state configuration under a given state name. The stateConfig object\n   * has the following acceptable properties.\n   *\n   * <a id='template'></a>\n   *\n   * - **`template`** - {string|function=} - html template as a string or a function that returns\n   *   an html template as a string which should be used by the uiView directives. This property \n   *   takes precedence over templateUrl.\n   *   \n   *   If `template` is a function, it will be called with the following parameters:\n   *\n   *   - {array.&lt;object&gt;} - state parameters extracted from the current $location.path() by\n   *     applying the current state\n   *\n   * <a id='templateUrl'></a>\n   *\n   * - **`templateUrl`** - {string|function=} - path or function that returns a path to an html \n   *   template that should be used by uiView.\n   *   \n   *   If `templateUrl` is a function, it will be called with the following parameters:\n   *\n   *   - {array.&lt;object&gt;} - state parameters extracted from the current $location.path() by \n   *     applying the current state\n   *\n   * <a id='templateProvider'></a>\n   *\n   * - **`templateProvider`** - {function=} - Provider function that returns HTML content\n   *   string.\n   *\n   * <a id='controller'></a>\n   *\n   * - **`controller`** - {string|function=} -  Controller fn that should be associated with newly \n   *   related scope or the name of a registered controller if passed as a string.\n   *\n   * <a id='controllerProvider'></a>\n   *\n   * - **`controllerProvider`** - {function=} - Injectable provider function that returns\n   *   the actual controller or string.\n   *\n   * <a id='controllerAs'></a>\n   * \n   * - **`controllerAs`** – {string=} – A controller alias name. If present the controller will be \n   *   published to scope under the controllerAs name.\n   *\n   * <a id='resolve'></a>\n   *\n   * - **`resolve`** - {object.&lt;string, function&gt;=} - An optional map of dependencies which \n   *   should be injected into the controller. If any of these dependencies are promises, \n   *   the router will wait for them all to be resolved or one to be rejected before the \n   *   controller is instantiated. If all the promises are resolved successfully, the values \n   *   of the resolved promises are injected and $stateChangeSuccess event is fired. If any \n   *   of the promises are rejected the $stateChangeError event is fired. The map object is:\n   *   \n   *   - key - {string}: name of dependency to be injected into controller\n   *   - factory - {string|function}: If string then it is alias for service. Otherwise if function, \n   *     it is injected and return value it treated as dependency. If result is a promise, it is \n   *     resolved before its value is injected into controller.\n   *\n   * <a id='url'></a>\n   *\n   * - **`url`** - {string=} - A url with optional parameters. When a state is navigated or\n   *   transitioned to, the `$stateParams` service will be populated with any \n   *   parameters that were passed.\n   *\n   * <a id='params'></a>\n   *\n   * - **`params`** - {object=} - An array of parameter names or regular expressions. Only \n   *   use this within a state if you are not using url. Otherwise you can specify your\n   *   parameters within the url. When a state is navigated or transitioned to, the \n   *   $stateParams service will be populated with any parameters that were passed.\n   *\n   * <a id='views'></a>\n   *\n   * - **`views`** - {object=} - Use the views property to set up multiple views or to target views\n   *   manually/explicitly.\n   *\n   * <a id='abstract'></a>\n   *\n   * - **`abstract`** - {boolean=} - An abstract state will never be directly activated, \n   *   but can provide inherited properties to its common children states.\n   *\n   * <a id='onEnter'></a>\n   *\n   * - **`onEnter`** - {object=} - Callback function for when a state is entered. Good way\n   *   to trigger an action or dispatch an event, such as opening a dialog.\n   *\n   * <a id='onExit'></a>\n   *\n   * - **`onExit`** - {object=} - Callback function for when a state is exited. Good way to\n   *   trigger an action or dispatch an event, such as opening a dialog.\n   *\n   * <a id='reloadOnSearch'></a>\n   *\n   * - **`reloadOnSearch = true`** - {boolean=} - If `false`, will not retrigger the same state \n   *   just because a search/query parameter has changed (via $location.search() or $location.hash()). \n   *   Useful for when you'd like to modify $location.search() without triggering a reload.\n   *\n   * <a id='data'></a>\n   *\n   * - **`data`** - {object=} - Arbitrary data object, useful for custom configuration.\n   *\n   * @example\n   * <pre>\n   * // Some state name examples\n   *\n   * // stateName can be a single top-level name (must be unique).\n   * $stateProvider.state(\"home\", {});\n   *\n   * // Or it can be a nested state name. This state is a child of the \n   * // above \"home\" state.\n   * $stateProvider.state(\"home.newest\", {});\n   *\n   * // Nest states as deeply as needed.\n   * $stateProvider.state(\"home.newest.abc.xyz.inception\", {});\n   *\n   * // state() returns $stateProvider, so you can chain state declarations.\n   * $stateProvider\n   *   .state(\"home\", {})\n   *   .state(\"about\", {})\n   *   .state(\"contacts\", {});\n   * </pre>\n   *\n   * @param {string} name A unique state name, e.g. \"home\", \"about\", \"contacts\". \n   * To create a parent/child state use a dot, e.g. \"about.sales\", \"home.newest\".\n   * @param {object} definition State configuration object.\n   */\n  this.state = state;\n  function state(name, definition) {\n    /*jshint validthis: true */\n    if (isObject(name)) definition = name;\n    else definition.name = name;\n    registerState(definition);\n    return this;\n  }\n\n  /**\n   * @ngdoc object\n   * @name ui.router.state.$state\n   *\n   * @requires $rootScope\n   * @requires $q\n   * @requires ui.router.state.$view\n   * @requires $injector\n   * @requires ui.router.util.$resolve\n   * @requires ui.router.state.$stateParams\n   *\n   * @property {object} params A param object, e.g. {sectionId: section.id)}, that \n   * you'd like to test against the current active state.\n   * @property {object} current A reference to the state's config object. However \n   * you passed it in. Useful for accessing custom data.\n   * @property {object} transition Currently pending transition. A promise that'll \n   * resolve or reject.\n   *\n   * @description\n   * `$state` service is responsible for representing states as well as transitioning\n   * between them. It also provides interfaces to ask for current state or even states\n   * you're coming from.\n   */\n  // $urlRouter is injected just to ensure it gets instantiated\n  this.$get = $get;\n  $get.$inject = ['$rootScope', '$q', '$view', '$injector', '$resolve', '$stateParams', '$location', '$urlRouter', '$browser'];\n  function $get(   $rootScope,   $q,   $view,   $injector,   $resolve,   $stateParams,   $location,   $urlRouter,   $browser) {\n\n    var TransitionSuperseded = $q.reject(new Error('transition superseded'));\n    var TransitionPrevented = $q.reject(new Error('transition prevented'));\n    var TransitionAborted = $q.reject(new Error('transition aborted'));\n    var TransitionFailed = $q.reject(new Error('transition failed'));\n    var currentLocation = $location.url();\n    var baseHref = $browser.baseHref();\n\n    function syncUrl() {\n      if ($location.url() !== currentLocation) {\n        $location.url(currentLocation);\n        $location.replace();\n      }\n    }\n\n    root.locals = { resolve: null, globals: { $stateParams: {} } };\n    $state = {\n      params: {},\n      current: root.self,\n      $current: root,\n      transition: null\n    };\n\n    /**\n     * @ngdoc function\n     * @name ui.router.state.$state#reload\n     * @methodOf ui.router.state.$state\n     *\n     * @description\n     * A method that force reloads the current state. All resolves are re-resolved, events are not re-fired, \n     * and controllers reinstantiated (bug with controllers reinstantiating right now, fixing soon).\n     *\n     * @example\n     * <pre>\n     * var app angular.module('app', ['ui.router']);\n     *\n     * app.controller('ctrl', function ($scope, $state) {\n     *   $scope.reload = function(){\n     *     $state.reload();\n     *   }\n     * });\n     * </pre>\n     *\n     * `reload()` is just an alias for:\n     * <pre>\n     * $state.transitionTo($state.current, $stateParams, { \n     *   reload: true, inherit: false, notify: false \n     * });\n     * </pre>\n     */\n    $state.reload = function reload() {\n      $state.transitionTo($state.current, $stateParams, { reload: true, inherit: false, notify: false });\n    };\n\n    /**\n     * @ngdoc function\n     * @name ui.router.state.$state#go\n     * @methodOf ui.router.state.$state\n     *\n     * @description\n     * Convenience method for transitioning to a new state. `$state.go` calls \n     * `$state.transitionTo` internally but automatically sets options to \n     * `{ location: true, inherit: true, relative: $state.$current, notify: true }`. \n     * This allows you to easily use an absolute or relative to path and specify \n     * only the parameters you'd like to update (while letting unspecified parameters \n     * inherit from the currently active ancestor states).\n     *\n     * @example\n     * <pre>\n     * var app = angular.module('app', ['ui.router']);\n     *\n     * app.controller('ctrl', function ($scope, $state) {\n     *   $scope.changeState = function () {\n     *     $state.go('contact.detail');\n     *   };\n     * });\n     * </pre>\n     * <img src='../ngdoc_assets/StateGoExamples.png'/>\n     *\n     * @param {string} to Absolute state name or relative state path. Some examples:\n     *\n     * - `$state.go('contact.detail')` - will go to the `contact.detail` state\n     * - `$state.go('^')` - will go to a parent state\n     * - `$state.go('^.sibling')` - will go to a sibling state\n     * - `$state.go('.child.grandchild')` - will go to grandchild state\n     *\n     * @param {object=} params A map of the parameters that will be sent to the state, \n     * will populate $stateParams. Any parameters that are not specified will be inherited from currently \n     * defined parameters. This allows, for example, going to a sibling state that shares parameters\n     * specified in a parent state. Parameter inheritance only works between common ancestor states, I.e.\n     * transitioning to a sibling will get you the parameters for all parents, transitioning to a child\n     * will get you all current parameters, etc.\n     * @param {object=} options Options object. The options are:\n     *\n     * - **`location`** - {boolean=true|string=} - If `true` will update the url in the location bar, if `false`\n     *    will not. If string, must be `\"replace\"`, which will update url and also replace last history record.\n     * - **`inherit`** - {boolean=true}, If `true` will inherit url parameters from current url.\n     * - **`relative`** - {object=$state.$current}, When transitioning with relative path (e.g '^'), \n     *    defines which state to be relative from.\n     * - **`notify`** - {boolean=true}, If `true` will broadcast $stateChangeStart and $stateChangeSuccess events.\n     * - **`reload`** (v0.2.5) - {boolean=false}, If `true` will force transition even if the state or params \n     *    have not changed, aka a reload of the same state. It differs from reloadOnSearch because you'd\n     *    use this when you want to force a reload when *everything* is the same, including search params.\n     *\n     * @returns {promise} A promise representing the state of the new transition.\n     *\n     * Possible success values:\n     *\n     * - $state.current\n     *\n     * <br/>Possible rejection values:\n     *\n     * - 'transition superseded' - when a newer transition has been started after this one\n     * - 'transition prevented' - when `event.preventDefault()` has been called in a `$stateChangeStart` listener\n     * - 'transition aborted' - when `event.preventDefault()` has been called in a `$stateNotFound` listener or\n     *   when a `$stateNotFound` `event.retry` promise errors.\n     * - 'transition failed' - when a state has been unsuccessfully found after 2 tries.\n     * - *resolve error* - when an error has occurred with a `resolve`\n     *\n     */\n    $state.go = function go(to, params, options) {\n      return this.transitionTo(to, params, extend({ inherit: true, relative: $state.$current }, options));\n    };\n\n    /**\n     * @ngdoc function\n     * @name ui.router.state.$state#transitionTo\n     * @methodOf ui.router.state.$state\n     *\n     * @description\n     * Low-level method for transitioning to a new state. {@link ui.router.state.$state#methods_go $state.go}\n     * uses `transitionTo` internally. `$state.go` is recommended in most situations.\n     *\n     * @example\n     * <pre>\n     * var app = angular.module('app', ['ui.router']);\n     *\n     * app.controller('ctrl', function ($scope, $state) {\n     *   $scope.changeState = function () {\n     *     $state.transitionTo('contact.detail');\n     *   };\n     * });\n     * </pre>\n     *\n     * @param {string} to State name.\n     * @param {object=} toParams A map of the parameters that will be sent to the state,\n     * will populate $stateParams.\n     * @param {object=} options Options object. The options are:\n     *\n     * - **`location`** - {boolean=true|string=} - If `true` will update the url in the location bar, if `false`\n     *    will not. If string, must be `\"replace\"`, which will update url and also replace last history record.\n     * - **`inherit`** - {boolean=false}, If `true` will inherit url parameters from current url.\n     * - **`relative`** - {object=}, When transitioning with relative path (e.g '^'), \n     *    defines which state to be relative from.\n     * - **`notify`** - {boolean=true}, If `true` will broadcast $stateChangeStart and $stateChangeSuccess events.\n     * - **`reload`** (v0.2.5) - {boolean=false}, If `true` will force transition even if the state or params \n     *    have not changed, aka a reload of the same state. It differs from reloadOnSearch because you'd\n     *    use this when you want to force a reload when *everything* is the same, including search params.\n     *\n     * @returns {promise} A promise representing the state of the new transition. See\n     * {@link ui.router.state.$state#methods_go $state.go}.\n     */\n    $state.transitionTo = function transitionTo(to, toParams, options) {\n      toParams = toParams || {};\n      options = extend({\n        location: true, inherit: false, relative: null, notify: true, reload: false, $retry: false\n      }, options || {});\n\n      var from = $state.$current, fromParams = $state.params, fromPath = from.path;\n      var evt, toState = findState(to, options.relative);\n\n      if (!isDefined(toState)) {\n        // Broadcast not found event and abort the transition if prevented\n        var redirect = { to: to, toParams: toParams, options: options };\n\n        /**\n         * @ngdoc event\n         * @name ui.router.state.$state#$stateNotFound\n         * @eventOf ui.router.state.$state\n         * @eventType broadcast on root scope\n         * @description\n         * Fired when a requested state **cannot be found** using the provided state name during transition.\n         * The event is broadcast allowing any handlers a single chance to deal with the error (usually by\n         * lazy-loading the unfound state). A special `unfoundState` object is passed to the listener handler,\n         * you can see its three properties in the example. You can use `event.preventDefault()` to abort the\n         * transition and the promise returned from `go` will be rejected with a `'transition aborted'` value.\n         *\n         * @param {Object} event Event object.\n         * @param {Object} unfoundState Unfound State information. Contains: `to, toParams, options` properties.\n         * @param {State} fromState Current state object.\n         * @param {Object} fromParams Current state params.\n         *\n         * @example\n         *\n         * <pre>\n         * // somewhere, assume lazy.state has not been defined\n         * $state.go(\"lazy.state\", {a:1, b:2}, {inherit:false});\n         *\n         * // somewhere else\n         * $scope.$on('$stateNotFound',\n         * function(event, unfoundState, fromState, fromParams){\n         *     console.log(unfoundState.to); // \"lazy.state\"\n         *     console.log(unfoundState.toParams); // {a:1, b:2}\n         *     console.log(unfoundState.options); // {inherit:false} + default options\n         * })\n         * </pre>\n         */\n        evt = $rootScope.$broadcast('$stateNotFound', redirect, from.self, fromParams);\n        if (evt.defaultPrevented) {\n          syncUrl();\n          return TransitionAborted;\n        }\n\n        // Allow the handler to return a promise to defer state lookup retry\n        if (evt.retry) {\n          if (options.$retry) {\n            syncUrl();\n            return TransitionFailed;\n          }\n          var retryTransition = $state.transition = $q.when(evt.retry);\n          retryTransition.then(function() {\n            if (retryTransition !== $state.transition) return TransitionSuperseded;\n            redirect.options.$retry = true;\n            return $state.transitionTo(redirect.to, redirect.toParams, redirect.options);\n          }, function() {\n            return TransitionAborted;\n          });\n          syncUrl();\n          return retryTransition;\n        }\n\n        // Always retry once if the $stateNotFound was not prevented\n        // (handles either redirect changed or state lazy-definition)\n        to = redirect.to;\n        toParams = redirect.toParams;\n        options = redirect.options;\n        toState = findState(to, options.relative);\n        if (!isDefined(toState)) {\n          if (options.relative) throw new Error(\"Could not resolve '\" + to + \"' from state '\" + options.relative + \"'\");\n          throw new Error(\"No such state '\" + to + \"'\");\n        }\n      }\n      if (toState[abstractKey]) throw new Error(\"Cannot transition to abstract state '\" + to + \"'\");\n      if (options.inherit) toParams = inheritParams($stateParams, toParams || {}, $state.$current, toState);\n      to = toState;\n\n      var toPath = to.path;\n\n      // Starting from the root of the path, keep all levels that haven't changed\n      var keep, state, locals = root.locals, toLocals = [];\n      for (keep = 0, state = toPath[keep];\n           state && state === fromPath[keep] && equalForKeys(toParams, fromParams, state.ownParams) && !options.reload;\n           keep++, state = toPath[keep]) {\n        locals = toLocals[keep] = state.locals;\n      }\n\n      // If we're going to the same state and all locals are kept, we've got nothing to do.\n      // But clear 'transition', as we still want to cancel any other pending transitions.\n      // TODO: We may not want to bump 'transition' if we're called from a location change that we've initiated ourselves,\n      // because we might accidentally abort a legitimate transition initiated from code?\n      if (shouldTriggerReload(to, from, locals, options) ) {\n        if ( to.self.reloadOnSearch !== false )\n          syncUrl();\n        $state.transition = null;\n        return $q.when($state.current);\n      }\n\n      // Normalize/filter parameters before we pass them to event handlers etc.\n      toParams = normalize(to.params, toParams || {});\n\n      // Broadcast start event and cancel the transition if requested\n      if (options.notify) {\n        /**\n         * @ngdoc event\n         * @name ui.router.state.$state#$stateChangeStart\n         * @eventOf ui.router.state.$state\n         * @eventType broadcast on root scope\n         * @description\n         * Fired when the state transition **begins**. You can use `event.preventDefault()`\n         * to prevent the transition from happening and then the transition promise will be\n         * rejected with a `'transition prevented'` value.\n         *\n         * @param {Object} event Event object.\n         * @param {State} toState The state being transitioned to.\n         * @param {Object} toParams The params supplied to the `toState`.\n         * @param {State} fromState The current state, pre-transition.\n         * @param {Object} fromParams The params supplied to the `fromState`.\n         *\n         * @example\n         *\n         * <pre>\n         * $rootScope.$on('$stateChangeStart',\n         * function(event, toState, toParams, fromState, fromParams){\n         *     event.preventDefault();\n         *     // transitionTo() promise will be rejected with\n         *     // a 'transition prevented' error\n         * })\n         * </pre>\n         */\n        evt = $rootScope.$broadcast('$stateChangeStart', to.self, toParams, from.self, fromParams);\n        if (evt.defaultPrevented) {\n          syncUrl();\n          return TransitionPrevented;\n        }\n      }\n\n      // Resolve locals for the remaining states, but don't update any global state just\n      // yet -- if anything fails to resolve the current state needs to remain untouched.\n      // We also set up an inheritance chain for the locals here. This allows the view directive\n      // to quickly look up the correct definition for each view in the current state. Even\n      // though we create the locals object itself outside resolveState(), it is initially\n      // empty and gets filled asynchronously. We need to keep track of the promise for the\n      // (fully resolved) current locals, and pass this down the chain.\n      var resolved = $q.when(locals);\n      for (var l=keep; l<toPath.length; l++, state=toPath[l]) {\n        locals = toLocals[l] = inherit(locals);\n        resolved = resolveState(state, toParams, state===to, resolved, locals);\n      }\n\n      // Once everything is resolved, we are ready to perform the actual transition\n      // and return a promise for the new state. We also keep track of what the\n      // current promise is, so that we can detect overlapping transitions and\n      // keep only the outcome of the last transition.\n      var transition = $state.transition = resolved.then(function () {\n        var l, entering, exiting;\n\n        if ($state.transition !== transition) return TransitionSuperseded;\n\n        // Exit 'from' states not kept\n        for (l=fromPath.length-1; l>=keep; l--) {\n          exiting = fromPath[l];\n          if (exiting.self.onExit) {\n            $injector.invoke(exiting.self.onExit, exiting.self, exiting.locals.globals);\n          }\n          exiting.locals = null;\n        }\n\n        // Enter 'to' states not kept\n        for (l=keep; l<toPath.length; l++) {\n          entering = toPath[l];\n          entering.locals = toLocals[l];\n          if (entering.self.onEnter) {\n            $injector.invoke(entering.self.onEnter, entering.self, entering.locals.globals);\n          }\n        }\n\n        // Run it again, to catch any transitions in callbacks\n        if ($state.transition !== transition) return TransitionSuperseded;\n\n        // Update globals in $state\n        $state.$current = to;\n        $state.current = to.self;\n        $state.params = toParams;\n        copy($state.params, $stateParams);\n        $state.transition = null;\n\n        // Update $location\n        var toNav = to.navigable;\n        if (options.location && toNav) {\n          $location.url(toNav.url.format(toNav.locals.globals.$stateParams));\n\n          if (options.location === 'replace') {\n            $location.replace();\n          }\n        }\n\n        if (options.notify) {\n        /**\n         * @ngdoc event\n         * @name ui.router.state.$state#$stateChangeSuccess\n         * @eventOf ui.router.state.$state\n         * @eventType broadcast on root scope\n         * @description\n         * Fired once the state transition is **complete**.\n         *\n         * @param {Object} event Event object.\n         * @param {State} toState The state being transitioned to.\n         * @param {Object} toParams The params supplied to the `toState`.\n         * @param {State} fromState The current state, pre-transition.\n         * @param {Object} fromParams The params supplied to the `fromState`.\n         */\n          $rootScope.$broadcast('$stateChangeSuccess', to.self, toParams, from.self, fromParams);\n        }\n        currentLocation = $location.url();\n\n        return $state.current;\n      }, function (error) {\n        if ($state.transition !== transition) return TransitionSuperseded;\n\n        $state.transition = null;\n        /**\n         * @ngdoc event\n         * @name ui.router.state.$state#$stateChangeError\n         * @eventOf ui.router.state.$state\n         * @eventType broadcast on root scope\n         * @description\n         * Fired when an **error occurs** during transition. It's important to note that if you\n         * have any errors in your resolve functions (javascript errors, non-existent services, etc)\n         * they will not throw traditionally. You must listen for this $stateChangeError event to\n         * catch **ALL** errors.\n         *\n         * @param {Object} event Event object.\n         * @param {State} toState The state being transitioned to.\n         * @param {Object} toParams The params supplied to the `toState`.\n         * @param {State} fromState The current state, pre-transition.\n         * @param {Object} fromParams The params supplied to the `fromState`.\n         * @param {Error} error The resolve error object.\n         */\n        $rootScope.$broadcast('$stateChangeError', to.self, toParams, from.self, fromParams, error);\n        syncUrl();\n\n        return $q.reject(error);\n      });\n\n      return transition;\n    };\n\n    /**\n     * @ngdoc function\n     * @name ui.router.state.$state#is\n     * @methodOf ui.router.state.$state\n     *\n     * @description\n     * Similar to {@link ui.router.state.$state#methods_includes $state.includes},\n     * but only checks for the full state name. If params is supplied then it will be \n     * tested for strict equality against the current active params object, so all params \n     * must match with none missing and no extras.\n     *\n     * @example\n     * <pre>\n     * $state.is('contact.details.item'); // returns true\n     * $state.is(contactDetailItemStateObject); // returns true\n     *\n     * // everything else would return false\n     * </pre>\n     *\n     * @param {string|object} stateName The state name or state object you'd like to check.\n     * @param {object=} params A param object, e.g. `{sectionId: section.id}`, that you'd like \n     * to test against the current active state.\n     * @returns {boolean} Returns true if it is the state.\n     */\n    $state.is = function is(stateOrName, params) {\n      var state = findState(stateOrName);\n\n      if (!isDefined(state)) {\n        return undefined;\n      }\n\n      if ($state.$current !== state) {\n        return false;\n      }\n\n      return isDefined(params) && params !== null ? angular.equals($stateParams, params) : true;\n    };\n\n    /**\n     * @ngdoc function\n     * @name ui.router.state.$state#includes\n     * @methodOf ui.router.state.$state\n     *\n     * @description\n     * A method to determine if the current active state is equal to or is the child of the \n     * state stateName. If any params are passed then they will be tested for a match as well.\n     * Not all the parameters need to be passed, just the ones you'd like to test for equality.\n     *\n     * @example\n     * <pre>\n     * $state.$current.name = 'contacts.details.item';\n     *\n     * $state.includes(\"contacts\"); // returns true\n     * $state.includes(\"contacts.details\"); // returns true\n     * $state.includes(\"contacts.details.item\"); // returns true\n     * $state.includes(\"contacts.list\"); // returns false\n     * $state.includes(\"about\"); // returns false\n     * </pre>\n     *\n     * @description\n     * Basic globing patterns will also work.\n     *\n     * @example\n     * <pre>\n     * $state.$current.name = 'contacts.details.item.url';\n     *\n     * $state.includes(\"*.details.*.*\"); // returns true\n     * $state.includes(\"*.details.**\"); // returns true\n     * $state.includes(\"**.item.**\"); // returns true\n     * $state.includes(\"*.details.item.url\"); // returns true\n     * $state.includes(\"*.details.*.url\"); // returns true\n     * $state.includes(\"*.details.*\"); // returns false\n     * $state.includes(\"item.**\"); // returns false\n     * </pre>\n     *\n     * @param {string} stateOrName A partial name to be searched for within the current state name.\n     * @param {object} params A param object, e.g. `{sectionId: section.id}`, \n     * that you'd like to test against the current active state.\n     * @returns {boolean} Returns true if it does include the state\n     */\n\n    $state.includes = function includes(stateOrName, params) {\n      if (isString(stateOrName) && isGlob(stateOrName)) {\n        if (doesStateMatchGlob(stateOrName)) {\n          stateOrName = $state.$current.name;\n        } else {\n          return false;\n        }\n      }\n\n      var state = findState(stateOrName);\n      if (!isDefined(state)) {\n        return undefined;\n      }\n\n      if (!isDefined($state.$current.includes[state.name])) {\n        return false;\n      }\n\n      var validParams = true;\n      angular.forEach(params, function(value, key) {\n        if (!isDefined($stateParams[key]) || $stateParams[key] !== value) {\n          validParams = false;\n        }\n      });\n      return validParams;\n    };\n\n\n    /**\n     * @ngdoc function\n     * @name ui.router.state.$state#href\n     * @methodOf ui.router.state.$state\n     *\n     * @description\n     * A url generation method that returns the compiled url for the given state populated with the given params.\n     *\n     * @example\n     * <pre>\n     * expect($state.href(\"about.person\", { person: \"bob\" })).toEqual(\"/about/bob\");\n     * </pre>\n     *\n     * @param {string|object} stateOrName The state name or state object you'd like to generate a url from.\n     * @param {object=} params An object of parameter values to fill the state's required parameters.\n     * @param {object=} options Options object. The options are:\n     *\n     * - **`lossy`** - {boolean=true} -  If true, and if there is no url associated with the state provided in the\n     *    first parameter, then the constructed href url will be built from the first navigable ancestor (aka\n     *    ancestor with a valid url).\n     * - **`inherit`** - {boolean=false}, If `true` will inherit url parameters from current url.\n     * - **`relative`** - {object=$state.$current}, When transitioning with relative path (e.g '^'), \n     *    defines which state to be relative from.\n     * - **`absolute`** - {boolean=false},  If true will generate an absolute url, e.g. \"http://www.example.com/fullurl\".\n     * \n     * @returns {string} compiled state url\n     */\n    $state.href = function href(stateOrName, params, options) {\n      options = extend({ lossy: true, inherit: false, absolute: false, relative: $state.$current }, options || {});\n      var state = findState(stateOrName, options.relative);\n      if (!isDefined(state)) return null;\n\n      params = inheritParams($stateParams, params || {}, $state.$current, state);\n      var nav = (state && options.lossy) ? state.navigable : state;\n      var url = (nav && nav.url) ? nav.url.format(normalize(state.params, params || {})) : null;\n      if (!$locationProvider.html5Mode() && url) {\n        url = \"#\" + $locationProvider.hashPrefix() + url;\n      }\n\n      if (baseHref !== '/') {\n        if ($locationProvider.html5Mode()) {\n          url = baseHref.slice(0, -1) + url;\n        } else if (options.absolute){\n          url = baseHref.slice(1) + url;\n        }\n      }\n\n      if (options.absolute && url) {\n        url = $location.protocol() + '://' + \n              $location.host() + \n              ($location.port() == 80 || $location.port() == 443 ? '' : ':' + $location.port()) + \n              (!$locationProvider.html5Mode() && url ? '/' : '') + \n              url;\n      }\n      return url;\n    };\n\n    /**\n     * @ngdoc function\n     * @name ui.router.state.$state#get\n     * @methodOf ui.router.state.$state\n     *\n     * @description\n     * Returns the state configuration object for any specific state or all states.\n     *\n     * @param {string|object=} stateOrName If provided, will only get the config for\n     * the requested state. If not provided, returns an array of ALL state configs.\n     * @returns {object|array} State configuration object or array of all objects.\n     */\n    $state.get = function (stateOrName, context) {\n      if (!isDefined(stateOrName)) {\n        var list = [];\n        forEach(states, function(state) { list.push(state.self); });\n        return list;\n      }\n      var state = findState(stateOrName, context);\n      return (state && state.self) ? state.self : null;\n    };\n\n    function resolveState(state, params, paramsAreFiltered, inherited, dst) {\n      // Make a restricted $stateParams with only the parameters that apply to this state if\n      // necessary. In addition to being available to the controller and onEnter/onExit callbacks,\n      // we also need $stateParams to be available for any $injector calls we make during the\n      // dependency resolution process.\n      var $stateParams = (paramsAreFiltered) ? params : filterByKeys(state.params, params);\n      var locals = { $stateParams: $stateParams };\n\n      // Resolve 'global' dependencies for the state, i.e. those not specific to a view.\n      // We're also including $stateParams in this; that way the parameters are restricted\n      // to the set that should be visible to the state, and are independent of when we update\n      // the global $state and $stateParams values.\n      dst.resolve = $resolve.resolve(state.resolve, locals, dst.resolve, state);\n      var promises = [ dst.resolve.then(function (globals) {\n        dst.globals = globals;\n      }) ];\n      if (inherited) promises.push(inherited);\n\n      // Resolve template and dependencies for all views.\n      forEach(state.views, function (view, name) {\n        var injectables = (view.resolve && view.resolve !== state.resolve ? view.resolve : {});\n        injectables.$template = [ function () {\n          return $view.load(name, { view: view, locals: locals, params: $stateParams, notify: false }) || '';\n        }];\n\n        promises.push($resolve.resolve(injectables, locals, dst.resolve, state).then(function (result) {\n          // References to the controller (only instantiated at link time)\n          if (isFunction(view.controllerProvider) || isArray(view.controllerProvider)) {\n            var injectLocals = angular.extend({}, injectables, locals);\n            result.$$controller = $injector.invoke(view.controllerProvider, null, injectLocals);\n          } else {\n            result.$$controller = view.controller;\n          }\n          // Provide access to the state itself for internal use\n          result.$$state = state;\n          result.$$controllerAs = view.controllerAs;\n          dst[name] = result;\n        }));\n      });\n\n      // Wait for all the promises and then return the activation object\n      return $q.all(promises).then(function (values) {\n        return dst;\n      });\n    }\n\n    return $state;\n  }\n\n  function shouldTriggerReload(to, from, locals, options) {\n    if ( to === from && ((locals === from.locals && !options.reload) || (to.self.reloadOnSearch === false)) ) {\n      return true;\n    }\n  }\n}\n\nangular.module('ui.router.state')\n  .value('$stateParams', {})\n  .provider('$state', $StateProvider);\n\n\n$ViewProvider.$inject = [];\nfunction $ViewProvider() {\n\n  this.$get = $get;\n  /**\n   * @ngdoc object\n   * @name ui.router.state.$view\n   *\n   * @requires ui.router.util.$templateFactory\n   * @requires $rootScope\n   *\n   * @description\n   *\n   */\n  $get.$inject = ['$rootScope', '$templateFactory'];\n  function $get(   $rootScope,   $templateFactory) {\n    return {\n      // $view.load('full.viewName', { template: ..., controller: ..., resolve: ..., async: false, params: ... })\n      /**\n       * @ngdoc function\n       * @name ui.router.state.$view#load\n       * @methodOf ui.router.state.$view\n       *\n       * @description\n       *\n       * @param {string} name name\n       * @param {object} options option object.\n       */\n      load: function load(name, options) {\n        var result, defaults = {\n          template: null, controller: null, view: null, locals: null, notify: true, async: true, params: {}\n        };\n        options = extend(defaults, options);\n\n        if (options.view) {\n          result = $templateFactory.fromConfig(options.view, options.params, options.locals);\n        }\n        if (result && options.notify) {\n        /**\n         * @ngdoc event\n         * @name ui.router.state.$state#$viewContentLoading\n         * @eventOf ui.router.state.$view\n         * @eventType broadcast on root scope\n         * @description\n         *\n         * Fired once the view **begins loading**, *before* the DOM is rendered.\n         *\n         * @param {Object} event Event object.\n         * @param {Object} viewConfig The view config properties (template, controller, etc).\n         *\n         * @example\n         *\n         * <pre>\n         * $scope.$on('$viewContentLoading',\n         * function(event, viewConfig){\n         *     // Access to all the view config properties.\n         *     // and one special property 'targetView'\n         *     // viewConfig.targetView\n         * });\n         * </pre>\n         */\n          $rootScope.$broadcast('$viewContentLoading', options);\n        }\n        return result;\n      }\n    };\n  }\n}\n\nangular.module('ui.router.state').provider('$view', $ViewProvider);\n\n/**\n * @ngdoc object\n * @name ui.router.state.$uiViewScrollProvider\n *\n * @description\n * Provider that returns the {@link ui.router.state.$uiViewScroll} service function.\n */\nfunction $ViewScrollProvider() {\n\n  var useAnchorScroll = false;\n\n  /**\n   * @ngdoc function\n   * @name ui.router.state.$uiViewScrollProvider#useAnchorScroll\n   * @methodOf ui.router.state.$uiViewScrollProvider\n   *\n   * @description\n   * Reverts back to using the core [`$anchorScroll`](http://docs.angularjs.org/api/ng.$anchorScroll) service for\n   * scrolling based on the url anchor.\n   */\n  this.useAnchorScroll = function () {\n    useAnchorScroll = true;\n  };\n\n  /**\n   * @ngdoc object\n   * @name ui.router.state.$uiViewScroll\n   *\n   * @requires $anchorScroll\n   * @requires $timeout\n   *\n   * @description\n   * When called with a jqLite element, it scrolls the element into view (after a\n   * `$timeout` so the DOM has time to refresh).\n   *\n   * If you prefer to rely on `$anchorScroll` to scroll the view to the anchor,\n   * this can be enabled by calling {@link ui.router.state.$uiViewScrollProvider#methods_useAnchorScroll `$uiViewScrollProvider.useAnchorScroll()`}.\n   */\n  this.$get = ['$anchorScroll', '$timeout', function ($anchorScroll, $timeout) {\n    if (useAnchorScroll) {\n      return $anchorScroll;\n    }\n\n    return function ($element) {\n      $timeout(function () {\n        $element[0].scrollIntoView();\n      }, 0, false);\n    };\n  }];\n}\n\nangular.module('ui.router.state').provider('$uiViewScroll', $ViewScrollProvider);\n\n/**\n * @ngdoc directive\n * @name ui.router.state.directive:ui-view\n *\n * @requires ui.router.state.$state\n * @requires $compile\n * @requires $controller\n * @requires $injector\n * @requires ui.router.state.$uiViewScroll\n * @requires $document\n *\n * @restrict ECA\n *\n * @description\n * The ui-view directive tells $state where to place your templates.\n *\n * @param {string=} ui-view A view name. The name should be unique amongst the other views in the\n * same state. You can have views of the same name that live in different states.\n *\n * @param {string=} autoscroll It allows you to set the scroll behavior of the browser window\n * when a view is populated. By default, $anchorScroll is overridden by ui-router's custom scroll\n * service, {@link ui.router.state.$uiViewScroll}. This custom service let's you\n * scroll ui-view elements into view when they are populated during a state activation.\n *\n * *Note: To revert back to old [`$anchorScroll`](http://docs.angularjs.org/api/ng.$anchorScroll)\n * functionality, call `$uiViewScrollProvider.useAnchorScroll()`.*\n *\n * @param {string=} onload Expression to evaluate whenever the view updates.\n * \n * @example\n * A view can be unnamed or named. \n * <pre>\n * <!-- Unnamed -->\n * <div ui-view></div> \n * \n * <!-- Named -->\n * <div ui-view=\"viewName\"></div>\n * </pre>\n *\n * You can only have one unnamed view within any template (or root html). If you are only using a \n * single view and it is unnamed then you can populate it like so:\n * <pre>\n * <div ui-view></div> \n * $stateProvider.state(\"home\", {\n *   template: \"<h1>HELLO!</h1>\"\n * })\n * </pre>\n * \n * The above is a convenient shortcut equivalent to specifying your view explicitly with the {@link ui.router.state.$stateProvider#views `views`}\n * config property, by name, in this case an empty name:\n * <pre>\n * $stateProvider.state(\"home\", {\n *   views: {\n *     \"\": {\n *       template: \"<h1>HELLO!</h1>\"\n *     }\n *   }    \n * })\n * </pre>\n * \n * But typically you'll only use the views property if you name your view or have more than one view \n * in the same template. There's not really a compelling reason to name a view if its the only one, \n * but you could if you wanted, like so:\n * <pre>\n * <div ui-view=\"main\"></div>\n * </pre> \n * <pre>\n * $stateProvider.state(\"home\", {\n *   views: {\n *     \"main\": {\n *       template: \"<h1>HELLO!</h1>\"\n *     }\n *   }    \n * })\n * </pre>\n * \n * Really though, you'll use views to set up multiple views:\n * <pre>\n * <div ui-view></div>\n * <div ui-view=\"chart\"></div> \n * <div ui-view=\"data\"></div> \n * </pre>\n * \n * <pre>\n * $stateProvider.state(\"home\", {\n *   views: {\n *     \"\": {\n *       template: \"<h1>HELLO!</h1>\"\n *     },\n *     \"chart\": {\n *       template: \"<chart_thing/>\"\n *     },\n *     \"data\": {\n *       template: \"<data_thing/>\"\n *     }\n *   }    \n * })\n * </pre>\n *\n * Examples for `autoscroll`:\n *\n * <pre>\n * <!-- If autoscroll present with no expression,\n *      then scroll ui-view into view -->\n * <ui-view autoscroll/>\n *\n * <!-- If autoscroll present with valid expression,\n *      then scroll ui-view into view if expression evaluates to true -->\n * <ui-view autoscroll='true'/>\n * <ui-view autoscroll='false'/>\n * <ui-view autoscroll='scopeVariable'/>\n * </pre>\n */\n$ViewDirective.$inject = ['$state', '$injector', '$uiViewScroll'];\nfunction $ViewDirective(   $state,   $injector,   $uiViewScroll) {\n\n  function getService() {\n    return ($injector.has) ? function(service) {\n      return $injector.has(service) ? $injector.get(service) : null;\n    } : function(service) {\n      try {\n        return $injector.get(service);\n      } catch (e) {\n        return null;\n      }\n    };\n  }\n\n  var service = getService(),\n      $animator = service('$animator'),\n      $animate = service('$animate');\n\n  // Returns a set of DOM manipulation functions based on which Angular version\n  // it should use\n  function getRenderer(attrs, scope) {\n    var statics = function() {\n      return {\n        enter: function (element, target, cb) { target.after(element); cb(); },\n        leave: function (element, cb) { element.remove(); cb(); }\n      };\n    };\n\n    if ($animate) {\n      return {\n        enter: function(element, target, cb) { $animate.enter(element, null, target, cb); },\n        leave: function(element, cb) { $animate.leave(element, cb); }\n      };\n    }\n\n    if ($animator) {\n      var animate = $animator && $animator(scope, attrs);\n\n      return {\n        enter: function(element, target, cb) {animate.enter(element, null, target); cb(); },\n        leave: function(element, cb) { animate.leave(element); cb(); }\n      };\n    }\n\n    return statics();\n  }\n\n  var directive = {\n    restrict: 'ECA',\n    terminal: true,\n    priority: 400,\n    transclude: 'element',\n    compile: function (tElement, tAttrs, $transclude) {\n      return function (scope, $element, attrs) {\n        var previousEl, currentEl, currentScope, latestLocals,\n            onloadExp     = attrs.onload || '',\n            autoScrollExp = attrs.autoscroll,\n            renderer      = getRenderer(attrs, scope);\n\n        scope.$on('$stateChangeSuccess', function() {\n          updateView(false);\n        });\n        scope.$on('$viewContentLoading', function() {\n          updateView(false);\n        });\n\n        updateView(true);\n\n        function cleanupLastView() {\n          if (previousEl) {\n            previousEl.remove();\n            previousEl = null;\n          }\n\n          if (currentScope) {\n            currentScope.$destroy();\n            currentScope = null;\n          }\n\n          if (currentEl) {\n            renderer.leave(currentEl, function() {\n              previousEl = null;\n            });\n\n            previousEl = currentEl;\n            currentEl = null;\n          }\n        }\n\n        function updateView(firstTime) {\n          var newScope        = scope.$new(),\n              name            = currentEl && currentEl.data('$uiViewName'),\n              previousLocals  = name && $state.$current && $state.$current.locals[name];\n\n          if (!firstTime && previousLocals === latestLocals) return; // nothing to do\n\n          var clone = $transclude(newScope, function(clone) {\n            renderer.enter(clone, $element, function onUiViewEnter() {\n              if (angular.isDefined(autoScrollExp) && !autoScrollExp || scope.$eval(autoScrollExp)) {\n                $uiViewScroll(clone);\n              }\n            });\n            cleanupLastView();\n          });\n\n          latestLocals = $state.$current.locals[clone.data('$uiViewName')];\n\n          currentEl = clone;\n          currentScope = newScope;\n          /**\n           * @ngdoc event\n           * @name ui.router.state.directive:ui-view#$viewContentLoaded\n           * @eventOf ui.router.state.directive:ui-view\n           * @eventType emits on ui-view directive scope\n           * @description           *\n           * Fired once the view is **loaded**, *after* the DOM is rendered.\n           *\n           * @param {Object} event Event object.\n           */\n          currentScope.$emit('$viewContentLoaded');\n          currentScope.$eval(onloadExp);\n        }\n      };\n    }\n  };\n\n  return directive;\n}\n\n$ViewDirectiveFill.$inject = ['$compile', '$controller', '$state'];\nfunction $ViewDirectiveFill ($compile, $controller, $state) {\n  return {\n    restrict: 'ECA',\n    priority: -400,\n    compile: function (tElement) {\n      var initial = tElement.html();\n      return function (scope, $element, attrs) {\n        var name      = attrs.uiView || attrs.name || '',\n            inherited = $element.inheritedData('$uiView');\n\n        if (name.indexOf('@') < 0) {\n          name = name + '@' + (inherited ? inherited.state.name : '');\n        }\n\n        $element.data('$uiViewName', name);\n\n        var current = $state.$current,\n            locals  = current && current.locals[name];\n\n        if (! locals) {\n          return;\n        }\n\n        $element.data('$uiView', { name: name, state: locals.$$state });\n        $element.html(locals.$template ? locals.$template : initial);\n\n        var link = $compile($element.contents());\n\n        if (locals.$$controller) {\n          locals.$scope = scope;\n          var controller = $controller(locals.$$controller, locals);\n          if (locals.$$controllerAs) {\n            scope[locals.$$controllerAs] = controller;\n          }\n          $element.data('$ngControllerController', controller);\n          $element.children().data('$ngControllerController', controller);\n        }\n\n        link(scope);\n      };\n    }\n  };\n}\n\nangular.module('ui.router.state').directive('uiView', $ViewDirective);\nangular.module('ui.router.state').directive('uiView', $ViewDirectiveFill);\n\nfunction parseStateRef(ref) {\n  var parsed = ref.replace(/\\n/g, \" \").match(/^([^(]+?)\\s*(\\((.*)\\))?$/);\n  if (!parsed || parsed.length !== 4) throw new Error(\"Invalid state ref '\" + ref + \"'\");\n  return { state: parsed[1], paramExpr: parsed[3] || null };\n}\n\nfunction stateContext(el) {\n  var stateData = el.parent().inheritedData('$uiView');\n\n  if (stateData && stateData.state && stateData.state.name) {\n    return stateData.state;\n  }\n}\n\n/**\n * @ngdoc directive\n * @name ui.router.state.directive:ui-sref\n *\n * @requires ui.router.state.$state\n * @requires $timeout\n *\n * @restrict A\n *\n * @description\n * A directive that binds a link (`<a>` tag) to a state. If the state has an associated \n * URL, the directive will automatically generate & update the `href` attribute via \n * the {@link ui.router.state.$state#methods_href $state.href()} method. Clicking \n * the link will trigger a state transition with optional parameters. \n *\n * Also middle-clicking, right-clicking, and ctrl-clicking on the link will be \n * handled natively by the browser.\n *\n * You can also use relative state paths within ui-sref, just like the relative \n * paths passed to `$state.go()`. You just need to be aware that the path is relative\n * to the state that the link lives in, in other words the state that loaded the \n * template containing the link.\n *\n * You can specify options to pass to {@link ui.router.state.$state#go $state.go()}\n * using the `ui-sref-opts` attribute. Options are restricted to `location`, `inherit`,\n * and `reload`.\n *\n * @example\n * Here's an example of how you'd use ui-sref and how it would compile. If you have the \n * following template:\n * <pre>\n * <a ui-sref=\"home\">Home</a> | <a ui-sref=\"about\">About</a>\n * \n * <ul>\n *     <li ng-repeat=\"contact in contacts\">\n *         <a ui-sref=\"contacts.detail({ id: contact.id })\">{{ contact.name }}</a>\n *     </li>\n * </ul>\n * </pre>\n * \n * Then the compiled html would be (assuming Html5Mode is off):\n * <pre>\n * <a href=\"#/home\" ui-sref=\"home\">Home</a> | <a href=\"#/about\" ui-sref=\"about\">About</a>\n * \n * <ul>\n *     <li ng-repeat=\"contact in contacts\">\n *         <a href=\"#/contacts/1\" ui-sref=\"contacts.detail({ id: contact.id })\">Joe</a>\n *     </li>\n *     <li ng-repeat=\"contact in contacts\">\n *         <a href=\"#/contacts/2\" ui-sref=\"contacts.detail({ id: contact.id })\">Alice</a>\n *     </li>\n *     <li ng-repeat=\"contact in contacts\">\n *         <a href=\"#/contacts/3\" ui-sref=\"contacts.detail({ id: contact.id })\">Bob</a>\n *     </li>\n * </ul>\n *\n * <a ui-sref=\"home\" ui-sref-opts=\"{reload: true}\">Home</a>\n * </pre>\n *\n * @param {string} ui-sref 'stateName' can be any valid absolute or relative state\n * @param {Object} ui-sref-opts options to pass to {@link ui.router.state.$state#go $state.go()}\n */\n$StateRefDirective.$inject = ['$state', '$timeout'];\nfunction $StateRefDirective($state, $timeout) {\n  var allowedOptions = ['location', 'inherit', 'reload'];\n\n  return {\n    restrict: 'A',\n    require: '?^uiSrefActive',\n    link: function(scope, element, attrs, uiSrefActive) {\n      var ref = parseStateRef(attrs.uiSref);\n      var params = null, url = null, base = stateContext(element) || $state.$current;\n      var isForm = element[0].nodeName === \"FORM\";\n      var attr = isForm ? \"action\" : \"href\", nav = true;\n\n      var options = {\n        relative: base\n      };\n      var optionsOverride = scope.$eval(attrs.uiSrefOpts) || {};\n      angular.forEach(allowedOptions, function(option) {\n        if (option in optionsOverride) {\n          options[option] = optionsOverride[option];\n        }\n      });\n\n      var update = function(newVal) {\n        if (newVal) params = newVal;\n        if (!nav) return;\n\n        var newHref = $state.href(ref.state, params, options);\n\n        if (uiSrefActive) {\n          uiSrefActive.$$setStateInfo(ref.state, params);\n        }\n        if (!newHref) {\n          nav = false;\n          return false;\n        }\n        element[0][attr] = newHref;\n      };\n\n      if (ref.paramExpr) {\n        scope.$watch(ref.paramExpr, function(newVal, oldVal) {\n          if (newVal !== params) update(newVal);\n        }, true);\n        params = scope.$eval(ref.paramExpr);\n      }\n      update();\n\n      if (isForm) return;\n\n      element.bind(\"click\", function(e) {\n        var button = e.which || e.button;\n        if ( !(button > 1 || e.ctrlKey || e.metaKey || e.shiftKey || element.attr('target')) ) {\n          // HACK: This is to allow ng-clicks to be processed before the transition is initiated:\n          $timeout(function() {\n            $state.go(ref.state, params, options);\n          });\n          e.preventDefault();\n        }\n      });\n    }\n  };\n}\n\n/**\n * @ngdoc directive\n * @name ui.router.state.directive:ui-sref-active\n *\n * @requires ui.router.state.$state\n * @requires ui.router.state.$stateParams\n * @requires $interpolate\n *\n * @restrict A\n *\n * @description\n * A directive working alongside ui-sref to add classes to an element when the \n * related ui-sref directive's state is active, and removing them when it is inactive.\n * The primary use-case is to simplify the special appearance of navigation menus \n * relying on `ui-sref`, by having the \"active\" state's menu button appear different,\n * distinguishing it from the inactive menu items.\n *\n * @example\n * Given the following template:\n * <pre>\n * <ul>\n *   <li ui-sref-active=\"active\" class=\"item\">\n *     <a href ui-sref=\"app.user({user: 'bilbobaggins'})\">@bilbobaggins</a>\n *   </li>\n * </ul>\n * </pre>\n * \n * When the app state is \"app.user\", and contains the state parameter \"user\" with value \"bilbobaggins\", \n * the resulting HTML will appear as (note the 'active' class):\n * <pre>\n * <ul>\n *   <li ui-sref-active=\"active\" class=\"item active\">\n *     <a ui-sref=\"app.user({user: 'bilbobaggins'})\" href=\"/users/bilbobaggins\">@bilbobaggins</a>\n *   </li>\n * </ul>\n * </pre>\n * \n * The class name is interpolated **once** during the directives link time (any further changes to the \n * interpolated value are ignored). \n * \n * Multiple classes may be specified in a space-separated format:\n * <pre>\n * <ul>\n *   <li ui-sref-active='class1 class2 class3'>\n *     <a ui-sref=\"app.user\">link</a>\n *   </li>\n * </ul>\n * </pre>\n */\n$StateActiveDirective.$inject = ['$state', '$stateParams', '$interpolate'];\nfunction $StateActiveDirective($state, $stateParams, $interpolate) {\n  return {\n    restrict: \"A\",\n    controller: ['$scope', '$element', '$attrs', function($scope, $element, $attrs) {\n      var state, params, activeClass;\n\n      // There probably isn't much point in $observing this\n      activeClass = $interpolate($attrs.uiSrefActive || '', false)($scope);\n\n      // Allow uiSref to communicate with uiSrefActive\n      this.$$setStateInfo = function(newState, newParams) {\n        state = $state.get(newState, stateContext($element));\n        params = newParams;\n        update();\n      };\n\n      $scope.$on('$stateChangeSuccess', update);\n\n      // Update route state\n      function update() {\n        if ($state.$current.self === state && matchesParams()) {\n          $element.addClass(activeClass);\n        } else {\n          $element.removeClass(activeClass);\n        }\n      }\n\n      function matchesParams() {\n        return !params || equalForKeys(params, $stateParams);\n      }\n    }]\n  };\n}\n\nangular.module('ui.router.state')\n  .directive('uiSref', $StateRefDirective)\n  .directive('uiSrefActive', $StateActiveDirective);\n\n/**\n * @ngdoc filter\n * @name ui.router.state.filter:isState\n *\n * @requires ui.router.state.$state\n *\n * @description\n * Translates to {@link ui.router.state.$state#methods_is $state.is(\"stateName\")}.\n */\n$IsStateFilter.$inject = ['$state'];\nfunction $IsStateFilter($state) {\n  return function(state) {\n    return $state.is(state);\n  };\n}\n\n/**\n * @ngdoc filter\n * @name ui.router.state.filter:includedByState\n *\n * @requires ui.router.state.$state\n *\n * @description\n * Translates to {@link ui.router.state.$state#methods_includes $state.includes('fullOrPartialStateName')}.\n */\n$IncludedByStateFilter.$inject = ['$state'];\nfunction $IncludedByStateFilter($state) {\n  return function(state) {\n    return $state.includes(state);\n  };\n}\n\nangular.module('ui.router.state')\n  .filter('isState', $IsStateFilter)\n  .filter('includedByState', $IncludedByStateFilter);\n\n/*\n * @ngdoc object\n * @name ui.router.compat.$routeProvider\n *\n * @requires ui.router.state.$stateProvider\n * @requires ui.router.router.$urlRouterProvider\n *\n * @description\n * `$routeProvider` of the `ui.router.compat` module overwrites the existing\n * `routeProvider` from the core. This is done to provide compatibility between\n * the UI Router and the core router.\n *\n * It also provides a `when()` method to register routes that map to certain urls.\n * Behind the scenes it actually delegates either to \n * {@link ui.router.router.$urlRouterProvider $urlRouterProvider} or to the \n * {@link ui.router.state.$stateProvider $stateProvider} to postprocess the given \n * router definition object.\n */\n$RouteProvider.$inject = ['$stateProvider', '$urlRouterProvider'];\nfunction $RouteProvider(  $stateProvider,    $urlRouterProvider) {\n\n  var routes = [];\n\n  onEnterRoute.$inject = ['$$state'];\n  function onEnterRoute(   $$state) {\n    /*jshint validthis: true */\n    this.locals = $$state.locals.globals;\n    this.params = this.locals.$stateParams;\n  }\n\n  function onExitRoute() {\n    /*jshint validthis: true */\n    this.locals = null;\n    this.params = null;\n  }\n\n  this.when = when;\n  /*\n   * @ngdoc function\n   * @name ui.router.compat.$routeProvider#when\n   * @methodOf ui.router.compat.$routeProvider\n   *\n   * @description\n   * Registers a route with a given route definition object. The route definition\n   * object has the same interface the angular core route definition object has.\n   * \n   * @example\n   * <pre>\n   * var app = angular.module('app', ['ui.router.compat']);\n   *\n   * app.config(function ($routeProvider) {\n   *   $routeProvider.when('home', {\n   *     controller: function () { ... },\n   *     templateUrl: 'path/to/template'\n   *   });\n   * });\n   * </pre>\n   *\n   * @param {string} url URL as string\n   * @param {object} route Route definition object\n   *\n   * @return {object} $routeProvider - $routeProvider instance\n   */\n  function when(url, route) {\n    /*jshint validthis: true */\n    if (route.redirectTo != null) {\n      // Redirect, configure directly on $urlRouterProvider\n      var redirect = route.redirectTo, handler;\n      if (isString(redirect)) {\n        handler = redirect; // leave $urlRouterProvider to handle\n      } else if (isFunction(redirect)) {\n        // Adapt to $urlRouterProvider API\n        handler = function (params, $location) {\n          return redirect(params, $location.path(), $location.search());\n        };\n      } else {\n        throw new Error(\"Invalid 'redirectTo' in when()\");\n      }\n      $urlRouterProvider.when(url, handler);\n    } else {\n      // Regular route, configure as state\n      $stateProvider.state(inherit(route, {\n        parent: null,\n        name: 'route:' + encodeURIComponent(url),\n        url: url,\n        onEnter: onEnterRoute,\n        onExit: onExitRoute\n      }));\n    }\n    routes.push(route);\n    return this;\n  }\n\n  /*\n   * @ngdoc object\n   * @name ui.router.compat.$route\n   *\n   * @requires ui.router.state.$state\n   * @requires $rootScope\n   * @requires $routeParams\n   *\n   * @property {object} routes - Array of registered routes.\n   * @property {object} params - Current route params as object.\n   * @property {string} current - Name of the current route.\n   *\n   * @description\n   * The `$route` service provides interfaces to access defined routes. It also let's\n   * you access route params through `$routeParams` service, so you have fully\n   * control over all the stuff you would actually get from angular's core `$route`\n   * service.\n   */\n  this.$get = $get;\n  $get.$inject = ['$state', '$rootScope', '$routeParams'];\n  function $get(   $state,   $rootScope,   $routeParams) {\n\n    var $route = {\n      routes: routes,\n      params: $routeParams,\n      current: undefined\n    };\n\n    function stateAsRoute(state) {\n      return (state.name !== '') ? state : undefined;\n    }\n\n    $rootScope.$on('$stateChangeStart', function (ev, to, toParams, from, fromParams) {\n      $rootScope.$broadcast('$routeChangeStart', stateAsRoute(to), stateAsRoute(from));\n    });\n\n    $rootScope.$on('$stateChangeSuccess', function (ev, to, toParams, from, fromParams) {\n      $route.current = stateAsRoute(to);\n      $rootScope.$broadcast('$routeChangeSuccess', stateAsRoute(to), stateAsRoute(from));\n      copy(toParams, $route.params);\n    });\n\n    $rootScope.$on('$stateChangeError', function (ev, to, toParams, from, fromParams, error) {\n      $rootScope.$broadcast('$routeChangeError', stateAsRoute(to), stateAsRoute(from), error);\n    });\n\n    return $route;\n  }\n}\n\nangular.module('ui.router.compat')\n  .provider('$route', $RouteProvider)\n  .directive('ngView', $ViewDirective);\n})(window, window.angular);"
  },
  {
    "path": "content/present-ionic/slides/ionic/js/ionic-angular.js",
    "content": "/*!\n * Copyright 2014 Drifty Co.\n * http://drifty.com/\n *\n * Ionic, v1.0.0-beta.11\n * A powerful HTML5 mobile app framework.\n * https://ionicframework.com/\n *\n * By @maxlynch, @benjsperry, @adamdbradley <3\n *\n * Licensed under the MIT license. Please see LICENSE for more information.\n *\n */\n\n(function() {\n/*\n * deprecated.js\n * https://github.com/wearefractal/deprecated/\n * Copyright (c) 2014 Fractal <contact@wearefractal.com>\n * License MIT\n */\n//Interval object\nvar deprecated = {\n  method: function(msg, log, fn) {\n    var called = false;\n    return function deprecatedMethod(){\n      if (!called) {\n        called = true;\n        log(msg);\n      }\n      return fn.apply(this, arguments);\n    };\n  },\n\n  field: function(msg, log, parent, field, val) {\n    var called = false;\n    var getter = function(){\n      if (!called) {\n        called = true;\n        log(msg);\n      }\n      return val;\n    };\n    var setter = function(v) {\n      if (!called) {\n        called = true;\n        log(msg);\n      }\n      val = v;\n      return v;\n    };\n    Object.defineProperty(parent, field, {\n      get: getter,\n      set: setter,\n      enumerable: true\n    });\n    return;\n  }\n};\n\n\nvar IonicModule = angular.module('ionic', ['ngAnimate', 'ngSanitize', 'ui.router']),\n  extend = angular.extend,\n  forEach = angular.forEach,\n  isDefined = angular.isDefined,\n  isString = angular.isString,\n  jqLite = angular.element;\n\n\n/**\n * @ngdoc service\n * @name $ionicActionSheet\n * @module ionic\n * @description\n * The Action Sheet is a slide-up pane that lets the user choose from a set of options.\n * Dangerous options are highlighted in red and made obvious.\n *\n * There are easy ways to cancel out of the action sheet, such as tapping the backdrop or even\n * hitting escape on the keyboard for desktop testing.\n *\n * ![Action Sheet](https://s3.amazonaws.com/ionicframework.com/docs/v1/controllers/actionSheet.gif)\n *\n * @usage\n * To trigger an Action Sheet in your code, use the $ionicActionSheet service in your angular controllers:\n *\n * ```js\n * angular.module('mySuperApp', ['ionic'])\n * .controller(function($scope, $ionicActionSheet, $timeout) {\n *\n *  // Triggered on a button click, or some other target\n *  $scope.show = function() {\n *\n *    // Show the action sheet\n *    var hideSheet = $ionicActionSheet.show({\n *      buttons: [\n *        { text: '<b>Share</b> This' },\n *        { text: 'Move' }\n *      ],\n *      destructiveText: 'Delete',\n *      titleText: 'Modify your album',\n *      cancelText: 'Cancel',\n *      cancel: function() {\n          // add cancel code..\n        },\n *      buttonClicked: function(index) {\n *        return true;\n *      }\n *    });\n *\n *    // For example's sake, hide the sheet after two seconds\n *    $timeout(function() {\n *      hideSheet();\n *    }, 2000);\n *\n *  };\n * });\n * ```\n *\n */\nIonicModule\n.factory('$ionicActionSheet', [\n  '$rootScope',\n  '$document',\n  '$compile',\n  '$animate',\n  '$timeout',\n  '$ionicTemplateLoader',\n  '$ionicPlatform',\nfunction($rootScope, $document, $compile, $animate, $timeout, $ionicTemplateLoader, $ionicPlatform) {\n\n  return {\n    show: actionSheet\n  };\n\n  /**\n   * @ngdoc method\n   * @name $ionicActionSheet#show\n   * @description\n   * Load and return a new action sheet.\n   *\n   * A new isolated scope will be created for the\n   * action sheet and the new element will be appended into the body.\n   *\n   * @param {object} options The options for this ActionSheet. Properties:\n   *\n   *  - `[Object]` `buttons` Which buttons to show.  Each button is an object with a `text` field.\n   *  - `{string}` `titleText` The title to show on the action sheet.\n   *  - `{string=}` `cancelText` the text for a 'cancel' button on the action sheet.\n   *  - `{string=}` `destructiveText` The text for a 'danger' on the action sheet.\n   *  - `{function=}` `cancel` Called if the cancel button is pressed, the backdrop is tapped or\n   *     the hardware back button is pressed.\n   *  - `{function=}` `buttonClicked` Called when one of the non-destructive buttons is clicked,\n   *     with the index of the button that was clicked and the button object. Return true to close\n   *     the action sheet, or false to keep it opened.\n   *  - `{function=}` `destructiveButtonClicked` Called when the destructive button is clicked.\n   *     Return true to close the action sheet, or false to keep it opened.\n   *  -  `{boolean=}` `cancelOnStateChange` Whether to cancel the actionSheet when navigating\n   *     to a new state.  Default true.\n   *\n   * @returns {function} `hideSheet` A function which, when called, hides & cancels the action sheet.\n   */\n  function actionSheet(opts) {\n    var scope = $rootScope.$new(true);\n\n    angular.extend(scope, {\n      cancel: angular.noop,\n      destructiveButtonClicked: angular.noop,\n      buttonClicked: angular.noop,\n      $deregisterBackButton: angular.noop,\n      buttons: [],\n      cancelOnStateChange: true\n    }, opts || {});\n\n\n    // Compile the template\n    var element = scope.element = $compile('<ion-action-sheet buttons=\"buttons\"></ion-action-sheet>')(scope);\n\n    // Grab the sheet element for animation\n    var sheetEl = jqLite(element[0].querySelector('.action-sheet-wrapper'));\n\n    var stateChangeListenDone = scope.cancelOnStateChange ?\n      $rootScope.$on('$stateChangeSuccess', function() { scope.cancel(); }) :\n      angular.noop;\n\n    // removes the actionSheet from the screen\n    scope.removeSheet = function(done) {\n      if (scope.removed) return;\n\n      scope.removed = true;\n      sheetEl.removeClass('action-sheet-up');\n      $document[0].body.classList.remove('action-sheet-open');\n      scope.$deregisterBackButton();\n      stateChangeListenDone();\n\n      $animate.removeClass(element, 'active', function() {\n        scope.$destroy();\n        element.remove();\n        // scope.cancel.$scope is defined near the bottom\n        scope.cancel.$scope = null;\n        (done || angular.noop)();\n      });\n    };\n\n    scope.showSheet = function(done) {\n      if (scope.removed) return;\n\n      $document[0].body.appendChild(element[0]);\n      $document[0].body.classList.add('action-sheet-open');\n\n      $animate.addClass(element, 'active', function() {\n        if (scope.removed) return;\n        (done || angular.noop)();\n      });\n      $timeout(function(){\n        if (scope.removed) return;\n        sheetEl.addClass('action-sheet-up');\n      }, 20, false);\n    };\n\n    // registerBackButtonAction returns a callback to deregister the action\n    scope.$deregisterBackButton = $ionicPlatform.registerBackButtonAction(\n      function() {\n        $timeout(scope.cancel);\n      },\n      PLATFORM_BACK_BUTTON_PRIORITY_ACTION_SHEET\n    );\n\n    // called when the user presses the cancel button\n    scope.cancel = function() {\n      // after the animation is out, call the cancel callback\n      scope.removeSheet(opts.cancel);\n    };\n\n    scope.buttonClicked = function(index) {\n      // Check if the button click event returned true, which means\n      // we can close the action sheet\n      if (opts.buttonClicked(index, opts.buttons[index]) === true) {\n        scope.removeSheet();\n      }\n    };\n\n    scope.destructiveButtonClicked = function() {\n      // Check if the destructive button click event returned true, which means\n      // we can close the action sheet\n      if (opts.destructiveButtonClicked() === true) {\n        scope.removeSheet();\n      }\n    };\n\n    scope.showSheet();\n\n    // Expose the scope on $ionicActionSheet's return value for the sake\n    // of testing it.\n    scope.cancel.$scope = scope;\n\n    return scope.cancel;\n  }\n}]);\n\n\njqLite.prototype.addClass = function(cssClasses) {\n  var x, y, cssClass, el, splitClasses, existingClasses;\n  if (cssClasses && cssClasses != 'ng-scope' && cssClasses != 'ng-isolate-scope') {\n    for(x=0; x<this.length; x++) {\n      el = this[x];\n      if(el.setAttribute) {\n\n        if(cssClasses.indexOf(' ') < 0) {\n          el.classList.add(cssClasses);\n        } else {\n          existingClasses = (' ' + (el.getAttribute('class') || '') + ' ')\n            .replace(/[\\n\\t]/g, \" \");\n          splitClasses = cssClasses.split(' ');\n\n          for (y=0; y<splitClasses.length; y++) {\n            cssClass = splitClasses[y].trim();\n            if (existingClasses.indexOf(' ' + cssClass + ' ') === -1) {\n              existingClasses += cssClass + ' ';\n            }\n          }\n          el.setAttribute('class', existingClasses.trim());\n        }\n      }\n    }\n  }\n  return this;\n};\n\njqLite.prototype.removeClass = function(cssClasses) {\n  var x, y, splitClasses, cssClass, el;\n  if (cssClasses) {\n    for(x=0; x<this.length; x++) {\n      el = this[x];\n      if(el.getAttribute) {\n        if(cssClasses.indexOf(' ') < 0) {\n          el.classList.remove(cssClasses);\n        } else {\n          splitClasses = cssClasses.split(' ');\n\n          for (y=0; y<splitClasses.length; y++) {\n            cssClass = splitClasses[y];\n            el.setAttribute('class', (\n                (\" \" + (el.getAttribute('class') || '') + \" \")\n                .replace(/[\\n\\t]/g, \" \")\n                .replace(\" \" + cssClass.trim() + \" \", \" \")).trim()\n            );\n          }\n        }\n      }\n    }\n  }\n  return this;\n};\n\n/**\n * @ngdoc service\n * @name $ionicBackdrop\n * @module ionic\n * @description\n * Shows and hides a backdrop over the UI.  Appears behind popups, loading,\n * and other overlays.\n *\n * Often, multiple UI components require a backdrop, but only one backdrop is\n * ever needed in the DOM at a time.\n *\n * Therefore, each component that requires the backdrop to be shown calls\n * `$ionicBackdrop.retain()` when it wants the backdrop, then `$ionicBackdrop.release()`\n * when it is done with the backdrop.\n *\n * For each time `retain` is called, the backdrop will be shown until `release` is called.\n *\n * For example, if `retain` is called three times, the backdrop will be shown until `release`\n * is called three times.\n *\n * @usage\n *\n * ```js\n * function MyController($scope, $ionicBackdrop, $timeout) {\n *   //Show a backdrop for one second\n *   $scope.action = function() {\n *     $ionicBackdrop.retain();\n *     $timeout(function() {\n *       $ionicBackdrop.release();\n *     }, 1000);\n *   };\n * }\n * ```\n */\nIonicModule\n.factory('$ionicBackdrop', [\n  '$document', '$timeout',\nfunction($document, $timeout) {\n\n  var el = jqLite('<div class=\"backdrop\">');\n  var backdropHolds = 0;\n\n  $document[0].body.appendChild(el[0]);\n\n  return {\n    /**\n     * @ngdoc method\n     * @name $ionicBackdrop#retain\n     * @description Retains the backdrop.\n     */\n    retain: retain,\n    /**\n     * @ngdoc method\n     * @name $ionicBackdrop#release\n     * @description\n     * Releases the backdrop.\n     */\n    release: release,\n\n    getElement: getElement,\n\n    // exposed for testing\n    _element: el\n  };\n\n  function retain() {\n    if ( (++backdropHolds) === 1 ) {\n      el.addClass('visible');\n      ionic.requestAnimationFrame(function() {\n        backdropHolds && el.addClass('active');\n      });\n    }\n  }\n  function release() {\n    if ( (--backdropHolds) === 0 ) {\n      el.removeClass('active');\n      $timeout(function() {\n        !backdropHolds && el.removeClass('visible');\n      }, 400, false);\n    }\n  }\n\n  function getElement() {\n    return el;\n  }\n\n}]);\n\n/**\n * @private\n */\nIonicModule\n.factory('$ionicBind', ['$parse', '$interpolate', function($parse, $interpolate) {\n  var LOCAL_REGEXP = /^\\s*([@=&])(\\??)\\s*(\\w*)\\s*$/;\n  return function(scope, attrs, bindDefinition) {\n    forEach(bindDefinition || {}, function (definition, scopeName) {\n      //Adapted from angular.js $compile\n      var match = definition.match(LOCAL_REGEXP) || [],\n        attrName = match[3] || scopeName,\n        mode = match[1], // @, =, or &\n        parentGet,\n        unwatch;\n\n      switch(mode) {\n        case '@':\n          if (!attrs[attrName]) {\n            return;\n          }\n          attrs.$observe(attrName, function(value) {\n            scope[scopeName] = value;\n          });\n          // we trigger an interpolation to ensure\n          // the value is there for use immediately\n          if (attrs[attrName]) {\n            scope[scopeName] = $interpolate(attrs[attrName])(scope);\n          }\n          break;\n\n        case '=':\n          if (!attrs[attrName]) {\n            return;\n          }\n          unwatch = scope.$watch(attrs[attrName], function(value) {\n            scope[scopeName] = value;\n          });\n          //Destroy parent scope watcher when this scope is destroyed\n          scope.$on('$destroy', unwatch);\n          break;\n\n        case '&':\n          /* jshint -W044 */\n          if (attrs[attrName] && attrs[attrName].match(RegExp(scopeName + '\\(.*?\\)'))) {\n            throw new Error('& expression binding \"' + scopeName + '\" looks like it will recursively call \"' +\n                          attrs[attrName] + '\" and cause a stack overflow! Please choose a different scopeName.');\n          }\n          parentGet = $parse(attrs[attrName]);\n          scope[scopeName] = function(locals) {\n            return parentGet(scope, locals);\n          };\n          break;\n      }\n    });\n  };\n}]);\n\nIonicModule\n.factory('$collectionDataSource', [\n  '$cacheFactory',\n  '$parse',\n  '$rootScope',\nfunction($cacheFactory, $parse, $rootScope) {\n  function hideWithTransform(element) {\n    element.css(ionic.CSS.TRANSFORM, 'translate3d(-2000px,-2000px,0)');\n  }\n\n  function CollectionRepeatDataSource(options) {\n    var self = this;\n    this.scope = options.scope;\n    this.transcludeFn = options.transcludeFn;\n    this.transcludeParent = options.transcludeParent;\n    this.element = options.element;\n\n    this.keyExpr = options.keyExpr;\n    this.listExpr = options.listExpr;\n    this.trackByExpr = options.trackByExpr;\n\n    this.heightGetter = options.heightGetter;\n    this.widthGetter = options.widthGetter;\n\n    this.dimensions = [];\n    this.data = [];\n\n    if (this.trackByExpr) {\n      var trackByGetter = $parse(this.trackByExpr);\n      var hashFnLocals = {$id: hashKey};\n      this.itemHashGetter = function(index, value) {\n        hashFnLocals[self.keyExpr] = value;\n        hashFnLocals.$index = index;\n        return trackByGetter(self.scope, hashFnLocals);\n      };\n    } else {\n      this.itemHashGetter = function(index, value) {\n        return hashKey(value);\n      };\n    }\n\n    this.attachedItems = {};\n    this.BACKUP_ITEMS_LENGTH = 10;\n    this.backupItemsArray = [];\n  }\n  CollectionRepeatDataSource.prototype = {\n    setup: function() {\n      for (var i = 0; i < this.BACKUP_ITEMS_LENGTH; i++) {\n        this.detachItem(this.createItem());\n      }\n    },\n    destroy: function() {\n      this.dimensions.length = 0;\n      this.data = null;\n      this.backupItemsArray.length = 0;\n      this.attachedItems = {};\n    },\n    calculateDataDimensions: function() {\n      var locals = {};\n      this.dimensions = this.data.map(function(value, index) {\n        locals[this.keyExpr] = value;\n        locals.$index = index;\n        return {\n          width: this.widthGetter(this.scope, locals),\n          height: this.heightGetter(this.scope, locals)\n        };\n      }, this);\n      this.dimensions = this.beforeSiblings.concat(this.dimensions).concat(this.afterSiblings);\n      this.dataStartIndex = this.beforeSiblings.length;\n    },\n    createItem: function() {\n      var item = {};\n      item.scope = this.scope.$new();\n\n      this.transcludeFn(item.scope, function(clone) {\n        clone.css('position', 'absolute');\n        item.element = clone;\n      });\n\n      this.transcludeParent.append(item.element);\n\n      return item;\n    },\n    getItem: function(hash) {\n      if ( (item = this.attachedItems[hash]) ) {\n        //do nothing, the item is good\n      } else if ( (item = this.backupItemsArray.pop()) ) {\n        reconnectScope(item.scope);\n      } else {\n        item = this.createItem();\n      }\n      return item;\n    },\n    attachItemAtIndex: function(index) {\n      var value = this.data[index];\n\n      if (index < this.dataStartIndex) {\n        return this.beforeSiblings[index];\n      } else if (index > this.data.length) {\n        return this.afterSiblings[index - this.data.length - this.dataStartIndex];\n      }\n\n      var hash = this.itemHashGetter(index, value);\n      var item = this.getItem(hash);\n\n      if (item.scope.$index !== index || item.scope[this.keyExpr] !== value) {\n        item.scope[this.keyExpr] = value;\n        item.scope.$index = index;\n        item.scope.$first = (index === 0);\n        item.scope.$last = (index === (this.getLength() - 1));\n        item.scope.$middle = !(item.scope.$first || item.scope.$last);\n        item.scope.$odd = !(item.scope.$even = (index&1) === 0);\n\n        //We changed the scope, so digest if needed\n        if (!$rootScope.$$phase) {\n          item.scope.$digest();\n        }\n      }\n\n      item.hash = hash;\n      this.attachedItems[hash] = item;\n\n      return item;\n    },\n    destroyItem: function(item) {\n      item.element.remove();\n      item.scope.$destroy();\n      item.scope = null;\n      item.element = null;\n    },\n    detachItem: function(item) {\n      delete this.attachedItems[item.hash];\n\n      //If it's an outside item, only hide it. These items aren't part of collection\n      //repeat's list, only sit outside\n      if (item.isOutside) {\n        hideWithTransform(item.element);\n\n      // If we are at the limit of backup items, just get rid of the this element\n      } else if (this.backupItemsArray.length >= this.BACKUP_ITEMS_LENGTH) {\n        this.destroyItem(item);\n      // Otherwise, add it to our backup items\n      } else {\n        this.backupItemsArray.push(item);\n        hideWithTransform(item.element);\n        //Don't .$destroy(), just stop watchers and events firing\n        disconnectScope(item.scope);\n      }\n\n    },\n    getLength: function() {\n      return this.dimensions && this.dimensions.length || 0;\n    },\n    setData: function(value, beforeSiblings, afterSiblings) {\n      this.data = value || [];\n      this.beforeSiblings = beforeSiblings || [];\n      this.afterSiblings = afterSiblings || [];\n      this.calculateDataDimensions();\n\n      this.afterSiblings.forEach(function(item) {\n        item.element.css({position: 'absolute', top: '0', left: '0' });\n        hideWithTransform(item.element);\n      });\n    },\n  };\n\n  return CollectionRepeatDataSource;\n}]);\n\n/**\n* Computes a hash of an 'obj'.\n * Hash of a:\n *  string is string\n *  number is number as string\n *  object is either result of calling $$hashKey function on the object or uniquely generated id,\n *         that is also assigned to the $$hashKey property of the object.\n *\n * @param obj\n * @returns {string} hash string such that the same input will have the same hash string.\n *         The resulting string key is in 'type:hashKey' format.\n */\nfunction hashKey(obj) {\n  var objType = typeof obj,\n      key;\n\n  if (objType == 'object' && obj !== null) {\n    if (typeof (key = obj.$$hashKey) == 'function') {\n      // must invoke on object to keep the right this\n      key = obj.$$hashKey();\n    } else if (key === undefined) {\n      key = obj.$$hashKey = ionic.Utils.nextUid();\n    }\n  } else {\n    key = obj;\n  }\n\n  return objType + ':' + key;\n}\n\nfunction disconnectScope(scope) {\n  if (scope.$root === scope) {\n    return; // we can't disconnect the root node;\n  }\n  var parent = scope.$parent;\n  scope.$$disconnected = true;\n  // See Scope.$destroy\n  if (parent.$$childHead === scope) {\n    parent.$$childHead = scope.$$nextSibling;\n  }\n  if (parent.$$childTail === scope) {\n    parent.$$childTail = scope.$$prevSibling;\n  }\n  if (scope.$$prevSibling) {\n    scope.$$prevSibling.$$nextSibling = scope.$$nextSibling;\n  }\n  if (scope.$$nextSibling) {\n    scope.$$nextSibling.$$prevSibling = scope.$$prevSibling;\n  }\n  scope.$$nextSibling = scope.$$prevSibling = null;\n}\n\nfunction reconnectScope(scope) {\n  if (scope.$root === scope) {\n    return; // we can't disconnect the root node;\n  }\n  if (!scope.$$disconnected) {\n    return;\n  }\n  var parent = scope.$parent;\n  scope.$$disconnected = false;\n  // See Scope.$new for this logic...\n  scope.$$prevSibling = parent.$$childTail;\n  if (parent.$$childHead) {\n    parent.$$childTail.$$nextSibling = scope;\n    parent.$$childTail = scope;\n  } else {\n    parent.$$childHead = parent.$$childTail = scope;\n  }\n}\n\n\nIonicModule\n.factory('$collectionRepeatManager', [\n  '$rootScope',\n  '$timeout',\nfunction($rootScope, $timeout) {\n  /**\n   * Vocabulary: \"primary\" and \"secondary\" size/direction/position mean\n   * \"y\" and \"x\" for vertical scrolling, or \"x\" and \"y\" for horizontal scrolling.\n   */\n  function CollectionRepeatManager(options) {\n    var self = this;\n    this.dataSource = options.dataSource;\n    this.element = options.element;\n    this.scrollView = options.scrollView;\n\n    this.isVertical = !!this.scrollView.options.scrollingY;\n    this.renderedItems = {};\n    this.dimensions = [];\n    this.setCurrentIndex(0);\n\n    //Override scrollview's render callback\n    this.scrollView.__$callback = this.scrollView.__callback;\n    this.scrollView.__callback = angular.bind(this, this.renderScroll);\n\n    function getViewportSize() { return self.viewportSize; }\n    //Set getters and setters to match whether this scrollview is vertical or not\n    if (this.isVertical) {\n      this.scrollView.options.getContentHeight = getViewportSize;\n\n      this.scrollValue = function() {\n        return this.scrollView.__scrollTop;\n      };\n      this.scrollMaxValue = function() {\n        return this.scrollView.__maxScrollTop;\n      };\n      this.scrollSize = function() {\n        return this.scrollView.__clientHeight;\n      };\n      this.secondaryScrollSize = function() {\n        return this.scrollView.__clientWidth;\n      };\n      this.transformString = function(y, x) {\n        return 'translate3d('+x+'px,'+y+'px,0)';\n      };\n      this.primaryDimension = function(dim) {\n        return dim.height;\n      };\n      this.secondaryDimension = function(dim) {\n        return dim.width;\n      };\n    } else {\n      this.scrollView.options.getContentWidth = getViewportSize;\n\n      this.scrollValue = function() {\n        return this.scrollView.__scrollLeft;\n      };\n      this.scrollMaxValue = function() {\n        return this.scrollView.__maxScrollLeft;\n      };\n      this.scrollSize = function() {\n        return this.scrollView.__clientWidth;\n      };\n      this.secondaryScrollSize = function() {\n        return this.scrollView.__clientHeight;\n      };\n      this.transformString = function(x, y) {\n        return 'translate3d('+x+'px,'+y+'px,0)';\n      };\n      this.primaryDimension = function(dim) {\n        return dim.width;\n      };\n      this.secondaryDimension = function(dim) {\n        return dim.height;\n      };\n    }\n  }\n\n  CollectionRepeatManager.prototype = {\n    destroy: function() {\n      this.renderedItems = {};\n      this.render = angular.noop;\n      this.calculateDimensions = angular.noop;\n      this.dimensions = [];\n    },\n\n    /*\n     * Pre-calculate the position of all items in the data list.\n     * Do this using the provided width and height (primarySize and secondarySize)\n     * provided by the dataSource.\n     */\n    calculateDimensions: function() {\n      /*\n       * For the sake of explanations below, we're going to pretend we are scrolling\n       * vertically: Items are laid out with primarySize being height,\n       * secondarySize being width.\n       */\n      var primaryPos = 0;\n      var secondaryPos = 0;\n      var secondaryScrollSize = this.secondaryScrollSize();\n      var previousItem;\n\n      this.dataSource.beforeSiblings && this.dataSource.beforeSiblings.forEach(calculateSize, this);\n      var beforeSize = primaryPos + (previousItem ? previousItem.primarySize : 0);\n\n      primaryPos = secondaryPos = 0;\n      previousItem = null;\n\n\n      var dimensions = this.dataSource.dimensions.map(calculateSize, this);\n      var totalSize = primaryPos + (previousItem ? previousItem.primarySize : 0);\n\n      return {\n        beforeSize: beforeSize,\n        totalSize: totalSize,\n        dimensions: dimensions\n      };\n\n      function calculateSize(dim) {\n\n        //Each dimension is an object {width: Number, height: Number} provided by\n        //the dataSource\n        var rect = {\n          //Get the height out of the dimension object\n          primarySize: this.primaryDimension(dim),\n          //Max out the item's width to the width of the scrollview\n          secondarySize: Math.min(this.secondaryDimension(dim), secondaryScrollSize)\n        };\n\n        //If this isn't the first item\n        if (previousItem) {\n          //Move the item's x position over by the width of the previous item\n          secondaryPos += previousItem.secondarySize;\n          //If the y position is the same as the previous item and\n          //the x position is bigger than the scroller's width\n          if (previousItem.primaryPos === primaryPos &&\n              secondaryPos + rect.secondarySize > secondaryScrollSize) {\n            //Then go to the next row, with x position 0\n            secondaryPos = 0;\n            primaryPos += previousItem.primarySize;\n          }\n        }\n\n        rect.primaryPos = primaryPos;\n        rect.secondaryPos = secondaryPos;\n\n        previousItem = rect;\n        return rect;\n      }\n    },\n    resize: function() {\n      var result = this.calculateDimensions();\n      this.dimensions = result.dimensions;\n      this.viewportSize = result.totalSize;\n      this.beforeSize = result.beforeSize;\n      this.setCurrentIndex(0);\n      this.render(true);\n      if (!this.dataSource.backupItemsArray.length) {\n        this.dataSource.setup();\n      }\n    },\n    /*\n     * setCurrentIndex sets the index in the list that matches the scroller's position.\n     * Also save the position in the scroller for next and previous items (if they exist)\n     */\n    setCurrentIndex: function(index, height) {\n      var currentPos = (this.dimensions[index] || {}).primaryPos || 0;\n      this.currentIndex = index;\n\n      this.hasPrevIndex = index > 0;\n      if (this.hasPrevIndex) {\n        this.previousPos = Math.max(\n          currentPos - this.dimensions[index - 1].primarySize,\n          this.dimensions[index - 1].primaryPos\n        );\n      }\n      this.hasNextIndex = index + 1 < this.dataSource.getLength();\n      if (this.hasNextIndex) {\n        this.nextPos = Math.min(\n          currentPos + this.dimensions[index + 1].primarySize,\n          this.dimensions[index + 1].primaryPos\n        );\n      }\n    },\n    /**\n     * override the scroller's render callback to check if we need to\n     * re-render our collection\n     */\n    renderScroll: ionic.animationFrameThrottle(function(transformLeft, transformTop, zoom, wasResize) {\n      if (this.isVertical) {\n        this.renderIfNeeded(transformTop);\n      } else {\n        this.renderIfNeeded(transformLeft);\n      }\n      return this.scrollView.__$callback(transformLeft, transformTop, zoom, wasResize);\n    }),\n    renderIfNeeded: function(scrollPos) {\n      if ((this.hasNextIndex && scrollPos >= this.nextPos) ||\n          (this.hasPrevIndex && scrollPos < this.previousPos)) {\n           // Math.abs(transformPos - this.lastRenderScrollValue) > 100) {\n        this.render();\n      }\n    },\n    /*\n     * getIndexForScrollValue: Given the most recent data index and a new scrollValue,\n     * find the data index that matches that scrollValue.\n     *\n     * Strategy (if we are scrolling down): keep going forward in the dimensions list,\n     * starting at the given index, until an item with height matching the new scrollValue\n     * is found.\n     *\n     * This is a while loop. In the worst case it will have to go through the whole list\n     * (eg to scroll from top to bottom).  The most common case is to scroll\n     * down 1-3 items at a time.\n     *\n     * While this is not as efficient as it could be, optimizing it gives no noticeable\n     * benefit.  We would have to use a new memory-intensive data structure for dimensions\n     * to fully optimize it.\n     */\n    getIndexForScrollValue: function(i, scrollValue) {\n      var rect;\n      //Scrolling up\n      if (scrollValue <= this.dimensions[i].primaryPos) {\n        while ( (rect = this.dimensions[i - 1]) && rect.primaryPos > scrollValue) {\n          i--;\n        }\n      //Scrolling down\n      } else {\n        while ( (rect = this.dimensions[i + 1]) && rect.primaryPos < scrollValue) {\n          i++;\n        }\n      }\n      return i;\n    },\n    /*\n     * render: Figure out the scroll position, the index matching it, and then tell\n     * the data source to render the correct items into the DOM.\n     */\n    render: function(shouldRedrawAll) {\n      var self = this;\n      var i;\n      var isOutOfBounds = ( this.currentIndex >= this.dataSource.getLength() );\n      // We want to remove all the items and redraw everything if we're out of bounds\n      // or a flag is passed in.\n      if (isOutOfBounds || shouldRedrawAll) {\n        for (i in this.renderedItems) {\n          this.removeItem(i);\n        }\n        // Just don't render anything if we're out of bounds\n        if (isOutOfBounds) return;\n      }\n\n      var rect;\n      var scrollValue = this.scrollValue();\n      // Scroll size = how many pixels are visible in the scroller at one time\n      var scrollSize = this.scrollSize();\n      // We take the current scroll value and add it to the scrollSize to get\n      // what scrollValue the current visible scroll area ends at.\n      var scrollSizeEnd = scrollSize + scrollValue;\n      // Get the new start index for scrolling, based on the current scrollValue and\n      // the most recent known index\n      var startIndex = this.getIndexForScrollValue(this.currentIndex, scrollValue);\n\n      // If we aren't on the first item, add one row of items before so that when the user is\n      // scrolling up he sees the previous item\n      var renderStartIndex = Math.max(startIndex - 1, 0);\n      // Keep adding items to the 'extra row above' until we get to a new row.\n      // This is for the case where there are multiple items on one row above\n      // the current item; we want to keep adding items above until\n      // a new row is reached.\n      while (renderStartIndex > 0 &&\n         (rect = this.dimensions[renderStartIndex]) &&\n         rect.primaryPos === this.dimensions[startIndex - 1].primaryPos) {\n        renderStartIndex--;\n      }\n\n      // Keep rendering items, adding them until we are past the end of the visible scroll area\n      i = renderStartIndex;\n      while ((rect = this.dimensions[i]) && (rect.primaryPos - rect.primarySize < scrollSizeEnd)) {\n        doRender(i++);\n      }\n      //Add two more items at the end\n      doRender(i++);\n      doRender(i);\n      var renderEndIndex = i;\n\n      // Remove any items that were rendered and aren't visible anymore\n      for (i in this.renderedItems) {\n        if (i < renderStartIndex || i > renderEndIndex) {\n          this.removeItem(i);\n        }\n      }\n\n      this.setCurrentIndex(startIndex);\n\n      function doRender(dataIndex) {\n        var rect = self.dimensions[dataIndex];\n        if (!rect) {\n\n        }else if (dataIndex < self.dataSource.dataStartIndex) {\n          // do nothing\n        } else {\n          self.renderItem(dataIndex, rect.primaryPos - self.beforeSize, rect.secondaryPos);\n        }\n      }\n    },\n    renderItem: function(dataIndex, primaryPos, secondaryPos) {\n      // Attach an item, and set its transform position to the required value\n      var item = this.dataSource.attachItemAtIndex(dataIndex);\n      if (item && item.element) {\n        if (item.primaryPos !== primaryPos || item.secondaryPos !== secondaryPos) {\n          item.element.css(ionic.CSS.TRANSFORM, this.transformString(\n            primaryPos, secondaryPos\n          ));\n          item.primaryPos = primaryPos;\n          item.secondaryPos = secondaryPos;\n        }\n        // Save the item in rendered items\n        this.renderedItems[dataIndex] = item;\n      } else {\n        // If an item at this index doesn't exist anymore, be sure to delete\n        // it from rendered items\n        delete this.renderedItems[dataIndex];\n      }\n    },\n    removeItem: function(dataIndex) {\n      // Detach a given item\n      var item = this.renderedItems[dataIndex];\n      if (item) {\n        item.primaryPos = item.secondaryPos = null;\n        this.dataSource.detachItem(item);\n        delete this.renderedItems[dataIndex];\n      }\n    }\n  };\n\n  var exceptions = {'renderScroll':1, 'renderIfNeeded':1};\n  forEach(CollectionRepeatManager.prototype, function(method, key) {\n    if (exceptions[key]) return;\n    CollectionRepeatManager.prototype[key] = function() {\n      void 0;\n      return method.apply(this, arguments);\n    };\n  });\n\n  return CollectionRepeatManager;\n}]);\n\n\nfunction delegateService(methodNames) {\n  return ['$log', function($log) {\n    var delegate = this;\n\n    var instances = this._instances = [];\n    this._registerInstance = function(instance, handle) {\n      instance.$$delegateHandle = handle;\n      instances.push(instance);\n\n      return function deregister() {\n        var index = instances.indexOf(instance);\n        if (index !== -1) {\n          instances.splice(index, 1);\n        }\n      };\n    };\n\n    this.$getByHandle = function(handle) {\n      if (!handle) {\n        return delegate;\n      }\n      return new InstanceForHandle(handle);\n    };\n\n    /*\n     * Creates a new object that will have all the methodNames given,\n     * and call them on the given the controller instance matching given\n     * handle.\n     * The reason we don't just let $getByHandle return the controller instance\n     * itself is that the controller instance might not exist yet.\n     *\n     * We want people to be able to do\n     * `var instance = $ionicScrollDelegate.$getByHandle('foo')` on controller\n     * instantiation, but on controller instantiation a child directive\n     * may not have been compiled yet!\n     *\n     * So this is our way of solving this problem: we create an object\n     * that will only try to fetch the controller with given handle\n     * once the methods are actually called.\n     */\n    function InstanceForHandle(handle) {\n      this.handle = handle;\n    }\n    methodNames.forEach(function(methodName) {\n      InstanceForHandle.prototype[methodName] = function() {\n        var handle = this.handle;\n        var args = arguments;\n        var matchingInstancesFound = 0;\n        var finalResult;\n        var result;\n\n        //This logic is repeated below; we could factor some of it out to a function\n        //but don't because it lets this method be more performant (one loop versus 2)\n        instances.forEach(function(instance) {\n          if (instance.$$delegateHandle === handle) {\n            matchingInstancesFound++;\n            result = instance[methodName].apply(instance, args);\n            //Only return the value from the first call\n            if (matchingInstancesFound === 1) {\n              finalResult = result;\n            }\n          }\n        });\n\n        if (!matchingInstancesFound) {\n          return $log.warn(\n            'Delegate for handle \"'+this.handle+'\" could not find a ' +\n            'corresponding element with delegate-handle=\"'+this.handle+'\"! ' +\n            methodName + '() was not called!\\n' +\n            'Possible cause: If you are calling ' + methodName + '() immediately, and ' +\n            'your element with delegate-handle=\"' + this.handle + '\" is a child of your ' +\n            'controller, then your element may not be compiled yet. Put a $timeout ' +\n            'around your call to ' + methodName + '() and try again.'\n          );\n        }\n\n        return finalResult;\n      };\n      delegate[methodName] = function() {\n        var args = arguments;\n        var finalResult;\n        var result;\n\n        //This logic is repeated above\n        instances.forEach(function(instance, index) {\n          result = instance[methodName].apply(instance, args);\n          //Only return the value from the first call\n          if (index === 0) {\n            finalResult = result;\n          }\n        });\n\n        return finalResult;\n      };\n\n      function callMethod(instancesToUse, methodName, args) {\n        var finalResult;\n        var result;\n        instancesToUse.forEach(function(instance, index) {\n          result = instance[methodName].apply(instance, args);\n          //Make it so the first result is the one returned\n          if (index === 0) {\n            finalResult = result;\n          }\n        });\n        return finalResult;\n      }\n    });\n  }];\n}\n\n/**\n * @ngdoc service\n * @name $ionicGesture\n * @module ionic\n * @description An angular service exposing ionic\n * {@link ionic.utility:ionic.EventController}'s gestures.\n */\nIonicModule\n.factory('$ionicGesture', [function() {\n  return {\n    /**\n     * @ngdoc method\n     * @name $ionicGesture#on\n     * @description Add an event listener for a gesture on an element. See {@link ionic.utility:ionic.EventController#onGesture}.\n     * @param {string} eventType The gesture event to listen for.\n     * @param {function(e)} callback The function to call when the gesture\n     * happens.\n     * @param {element} $element The angular element to listen for the event on.\n     * @returns {ionic.Gesture} The gesture object (use this to remove the gesture later on).\n     */\n    on: function(eventType, cb, $element) {\n      return window.ionic.onGesture(eventType, cb, $element[0]);\n    },\n    /**\n     * @ngdoc method\n     * @name $ionicGesture#off\n     * @description Remove an event listener for a gesture on an element. See {@link ionic.utility:ionic.EventController#offGesture}.\n     * @param {ionic.Gesture} gesture The gesture that should be removed.\n     * @param {string} eventType The gesture event to remove the listener for.\n     * @param {function(e)} callback The listener to remove.\n     */\n    off: function(gesture, eventType, cb) {\n      return window.ionic.offGesture(gesture, eventType, cb);\n    }\n  };\n}]);\n\n\nvar LOADING_TPL =\n  '<div class=\"loading-container\">' +\n    '<div class=\"loading\">' +\n    '</div>' +\n  '</div>';\n\nvar LOADING_HIDE_DEPRECATED = '$ionicLoading instance.hide() has been deprecated. Use $ionicLoading.hide().';\nvar LOADING_SHOW_DEPRECATED = '$ionicLoading instance.show() has been deprecated. Use $ionicLoading.show().';\nvar LOADING_SET_DEPRECATED = '$ionicLoading instance.setContent() has been deprecated. Use $ionicLoading.show({ template: \\'my content\\' }).';\n\n/**\n * @ngdoc service\n * @name $ionicLoading\n * @module ionic\n * @description\n * An overlay that can be used to indicate activity while blocking user\n * interaction.\n *\n * @usage\n * ```js\n * angular.module('LoadingApp', ['ionic'])\n * .controller('LoadingCtrl', function($scope, $ionicLoading) {\n *   $scope.show = function() {\n *     $ionicLoading.show({\n *       template: 'Loading...'\n *     });\n *   };\n *   $scope.hide = function(){\n *     $ionicLoading.hide();\n *   };\n * });\n * ```\n */\n/**\n * @ngdoc object\n * @name $ionicLoadingConfig\n * @module ionic\n * @description\n * Set the default options to be passed to the {@link ionic.service:$ionicLoading} service.\n *\n * @usage\n * ```js\n * var app = angular.module('myApp', ['ionic'])\n * app.constant('$ionicLoadingConfig', {\n *   template: 'Default Loading Template...'\n * });\n * app.controller('AppCtrl', function($scope, $ionicLoading) {\n *   $scope.showLoading = function() {\n *     $ionicLoading.show(); //options default to values in $ionicLoadingConfig\n *   };\n * });\n * ```\n */\nIonicModule\n.constant('$ionicLoadingConfig', {\n  template: '<i class=\"ion-loading-d\"></i>'\n})\n.factory('$ionicLoading', [\n  '$ionicLoadingConfig',\n  '$document',\n  '$ionicTemplateLoader',\n  '$ionicBackdrop',\n  '$timeout',\n  '$q',\n  '$log',\n  '$compile',\n  '$ionicPlatform',\nfunction($ionicLoadingConfig, $document, $ionicTemplateLoader, $ionicBackdrop, $timeout, $q, $log, $compile, $ionicPlatform) {\n\n  var loaderInstance;\n  //default values\n  var deregisterBackAction = angular.noop;\n  var loadingShowDelay = $q.when();\n\n  return {\n    /**\n     * @ngdoc method\n     * @name $ionicLoading#show\n     * @description Shows a loading indicator. If the indicator is already shown,\n     * it will set the options given and keep the indicator shown.\n     * @param {object} opts The options for the loading indicator. Available properties:\n     *  - `{string=}` `template` The html content of the indicator.\n     *  - `{string=}` `templateUrl` The url of an html template to load as the content of the indicator.\n     *  - `{boolean=}` `noBackdrop` Whether to hide the backdrop. By default it will be shown.\n     *  - `{number=}` `delay` How many milliseconds to delay showing the indicator. By default there is no delay.\n     *  - `{number=}` `duration` How many milliseconds to wait until automatically\n     *  hiding the indicator. By default, the indicator will be shown until `.hide()` is called.\n     */\n    show: showLoader,\n    /**\n     * @ngdoc method\n     * @name $ionicLoading#hide\n     * @description Hides the loading indicator, if shown.\n     */\n    hide: hideLoader,\n    /**\n     * @private for testing\n     */\n    _getLoader: getLoader\n  };\n\n  function getLoader() {\n    if (!loaderInstance) {\n      loaderInstance = $ionicTemplateLoader.compile({\n        template: LOADING_TPL,\n        appendTo: $document[0].body\n      })\n      .then(function(loader) {\n        var self = loader;\n\n        loader.show = function(options) {\n          var templatePromise = options.templateUrl ?\n            $ionicTemplateLoader.load(options.templateUrl) :\n            //options.content: deprecated\n            $q.when(options.template || options.content || '');\n\n\n          if (!this.isShown) {\n            //options.showBackdrop: deprecated\n            this.hasBackdrop = !options.noBackdrop && options.showBackdrop !== false;\n            if (this.hasBackdrop) {\n              $ionicBackdrop.retain();\n              $ionicBackdrop.getElement().addClass('backdrop-loading');\n            }\n          }\n\n          if (options.duration) {\n            $timeout.cancel(this.durationTimeout);\n            this.durationTimeout = $timeout(\n              angular.bind(this, this.hide),\n              +options.duration\n            );\n          }\n\n          templatePromise.then(function(html) {\n            if (html) {\n              var loading = self.element.children();\n              loading.html(html);\n              $compile(loading.contents())(self.scope);\n            }\n\n            //Don't show until template changes\n            if (self.isShown) {\n              self.element.addClass('visible');\n              ionic.requestAnimationFrame(function() {\n                self.isShown && self.element.addClass('active');\n                $document[0].body.classList.add('loading-active');\n              });\n            }\n          });\n\n          this.isShown = true;\n        };\n        loader.hide = function() {\n          if (this.isShown) {\n            if (this.hasBackdrop) {\n              $ionicBackdrop.release();\n              $ionicBackdrop.getElement().removeClass('backdrop-loading');\n            }\n            self.element.removeClass('active');\n            $document[0].body.classList.remove('loading-active');\n            setTimeout(function() {\n              !self.isShown && self.element.removeClass('visible');\n            }, 200);\n          }\n          $timeout.cancel(this.durationTimeout);\n          this.isShown = false;\n        };\n\n        return loader;\n      });\n    }\n    return loaderInstance;\n  }\n\n  function showLoader(options) {\n    options = extend($ionicLoadingConfig || {}, options || {});\n    var delay = options.delay || options.showDelay || 0;\n\n    //If loading.show() was called previously, cancel it and show with our new options\n    loadingShowDelay && $timeout.cancel(loadingShowDelay);\n    loadingShowDelay = $timeout(angular.noop, delay);\n\n    loadingShowDelay.then(getLoader).then(function(loader) {\n      deregisterBackAction();\n      //Disable hardware back button while loading\n      deregisterBackAction = $ionicPlatform.registerBackButtonAction(\n        angular.noop,\n        PLATFORM_BACK_BUTTON_PRIORITY_LOADING\n      );\n      return loader.show(options);\n    });\n\n    return {\n      hide: deprecated.method(LOADING_HIDE_DEPRECATED, $log.error, hideLoader),\n      show: deprecated.method(LOADING_SHOW_DEPRECATED, $log.error, function() {\n        showLoader(options);\n      }),\n      setContent: deprecated.method(LOADING_SET_DEPRECATED, $log.error, function(content) {\n        getLoader().then(function(loader) {\n          loader.show({ template: content });\n        });\n      })\n    };\n  }\n\n  function hideLoader() {\n    deregisterBackAction();\n    $timeout.cancel(loadingShowDelay);\n    getLoader().then(function(loader) {\n      loader.hide();\n    });\n  }\n}]);\n\n/**\n * @ngdoc service\n * @name $ionicModal\n * @module ionic\n * @description\n *\n * Related: {@link ionic.controller:ionicModal ionicModal controller}.\n *\n * The Modal is a content pane that can go over the user's main view\n * temporarily.  Usually used for making a choice or editing an item.\n *\n * Put the content of the modal inside of an `<ion-modal-view>` element.\n *\n * Note: a modal will broadcast 'modal.shown', 'modal.hidden', and 'modal.removed' events from its originating\n * scope, passing in itself as an event argument. Both the modal.removed and modal.hidden events are\n * called when the modal is removed.\n *\n * @usage\n * ```html\n * <script id=\"my-modal.html\" type=\"text/ng-template\">\n *   <ion-modal-view>\n *     <ion-header-bar>\n *       <h1 class=\"title\">My Modal title</h1>\n *     </ion-header-bar>\n *     <ion-content>\n *       Hello!\n *     </ion-content>\n *   </ion-modal-view>\n * </script>\n * ```\n * ```js\n * angular.module('testApp', ['ionic'])\n * .controller('MyController', function($scope, $ionicModal) {\n *   $ionicModal.fromTemplateUrl('my-modal.html', {\n *     scope: $scope,\n *     animation: 'slide-in-up'\n *   }).then(function(modal) {\n *     $scope.modal = modal;\n *   });\n *   $scope.openModal = function() {\n *     $scope.modal.show();\n *   };\n *   $scope.closeModal = function() {\n *     $scope.modal.hide();\n *   };\n *   //Cleanup the modal when we're done with it!\n *   $scope.$on('$destroy', function() {\n *     $scope.modal.remove();\n *   });\n *   // Execute action on hide modal\n *   $scope.$on('modal.hidden', function() {\n *     // Execute action\n *   });\n *   // Execute action on remove modal\n *   $scope.$on('modal.removed', function() {\n *     // Execute action\n *   });\n * });\n * ```\n */\nIonicModule\n.factory('$ionicModal', [\n  '$rootScope',\n  '$document',\n  '$compile',\n  '$timeout',\n  '$ionicPlatform',\n  '$ionicTemplateLoader',\n  '$q',\n  '$log',\nfunction($rootScope, $document, $compile, $timeout, $ionicPlatform, $ionicTemplateLoader, $q, $log) {\n\n  /**\n   * @ngdoc controller\n   * @name ionicModal\n   * @module ionic\n   * @description\n   * Instantiated by the {@link ionic.service:$ionicModal} service.\n   *\n   * Be sure to call [remove()](#remove) when you are done with each modal\n   * to clean it up and avoid memory leaks.\n   *\n   * Note: a modal will broadcast 'modal.shown', 'modal.hidden', and 'modal.removed' events from its originating\n   * scope, passing in itself as an event argument. Note: both modal.removed and modal.hidden are\n   * called when the modal is removed.\n   */\n  var ModalView = ionic.views.Modal.inherit({\n    /**\n     * @ngdoc method\n     * @name ionicModal#initialize\n     * @description Creates a new modal controller instance.\n     * @param {object} options An options object with the following properties:\n     *  - `{object=}` `scope` The scope to be a child of.\n     *    Default: creates a child of $rootScope.\n     *  - `{string=}` `animation` The animation to show & hide with.\n     *    Default: 'slide-in-up'\n     *  - `{boolean=}` `focusFirstInput` Whether to autofocus the first input of\n     *    the modal when shown.  Default: false.\n     *  - `{boolean=}` `backdropClickToClose` Whether to close the modal on clicking the backdrop.\n     *    Default: true.\n     *  - `{boolean=}` `hardwareBackButtonClose` Whether the modal can be closed using the hardware\n     *    back button on Android and similar devices.  Default: true.\n     */\n    initialize: function(opts) {\n      ionic.views.Modal.prototype.initialize.call(this, opts);\n      this.animation = opts.animation || 'slide-in-up';\n    },\n\n    /**\n     * @ngdoc method\n     * @name ionicModal#show\n     * @description Show this modal instance.\n     * @returns {promise} A promise which is resolved when the modal is finished animating in.\n     */\n    show: function(target) {\n      var self = this;\n\n      if(self.scope.$$destroyed) {\n        $log.error('Cannot call ' +  self.viewType + '.show() after remove(). Please create a new ' +  self.viewType + ' instance.');\n        return;\n      }\n\n      var modalEl = jqLite(self.modalEl);\n\n      self.el.classList.remove('hide');\n      $timeout(function(){\n        $document[0].body.classList.add(self.viewType + '-open');\n      }, 400);\n\n      if(!self.el.parentElement) {\n        modalEl.addClass(self.animation);\n        $document[0].body.appendChild(self.el);\n      }\n\n      if(target && self.positionView) {\n        self.positionView(target, modalEl);\n      }\n\n      modalEl.addClass('ng-enter active')\n             .removeClass('ng-leave ng-leave-active');\n\n      self._isShown = true;\n      self._deregisterBackButton = $ionicPlatform.registerBackButtonAction(\n        self.hardwareBackButtonClose ? angular.bind(self, self.hide) : angular.noop,\n        PLATFORM_BACK_BUTTON_PRIORITY_MODAL\n      );\n\n      self._isOpenPromise = $q.defer();\n\n      ionic.views.Modal.prototype.show.call(self);\n\n      $timeout(function(){\n        modalEl.addClass('ng-enter-active');\n        ionic.trigger('resize');\n        self.scope.$parent && self.scope.$parent.$broadcast(self.viewType + '.shown', self);\n        self.el.classList.add('active');\n      }, 20);\n\n      return $timeout(function() {\n        //After animating in, allow hide on backdrop click\n        self.$el.on('click', function(e) {\n          if (self.backdropClickToClose && e.target === self.el) {\n            self.hide();\n          }\n        });\n      }, 400);\n    },\n\n    /**\n     * @ngdoc method\n     * @name ionicModal#hide\n     * @description Hide this modal instance.\n     * @returns {promise} A promise which is resolved when the modal is finished animating out.\n     */\n    hide: function() {\n      var self = this;\n      var modalEl = jqLite(self.modalEl);\n\n      self.el.classList.remove('active');\n      modalEl.addClass('ng-leave');\n\n      $timeout(function(){\n        modalEl.addClass('ng-leave-active')\n               .removeClass('ng-enter ng-enter-active active');\n      }, 20);\n\n      self.$el.off('click');\n      self._isShown = false;\n      self.scope.$parent && self.scope.$parent.$broadcast(self.viewType + '.hidden', self);\n      self._deregisterBackButton && self._deregisterBackButton();\n\n      ionic.views.Modal.prototype.hide.call(self);\n\n      return $timeout(function(){\n        $document[0].body.classList.remove(self.viewType + '-open');\n        self.el.classList.add('hide');\n      }, self.hideDelay || 500);\n    },\n\n    /**\n     * @ngdoc method\n     * @name ionicModal#remove\n     * @description Remove this modal instance from the DOM and clean up.\n     * @returns {promise} A promise which is resolved when the modal is finished animating out.\n     */\n    remove: function() {\n      var self = this;\n      self.scope.$parent && self.scope.$parent.$broadcast(self.viewType + '.removed', self);\n\n      return self.hide().then(function() {\n        self.scope.$destroy();\n        self.$el.remove();\n      });\n    },\n\n    /**\n     * @ngdoc method\n     * @name ionicModal#isShown\n     * @returns boolean Whether this modal is currently shown.\n     */\n    isShown: function() {\n      return !!this._isShown;\n    }\n  });\n\n  var createModal = function(templateString, options) {\n    // Create a new scope for the modal\n    var scope = options.scope && options.scope.$new() || $rootScope.$new(true);\n\n    options.viewType = options.viewType || 'modal';\n\n    extend(scope, {\n      $hasHeader: false,\n      $hasSubheader: false,\n      $hasFooter: false,\n      $hasSubfooter: false,\n      $hasTabs: false,\n      $hasTabsTop: false\n    });\n\n    // Compile the template\n    var element = $compile('<ion-' + options.viewType + '>' + templateString + '</ion-' + options.viewType + '>')(scope);\n\n    options.$el = element;\n    options.el = element[0];\n    options.modalEl = options.el.querySelector('.' + options.viewType);\n    var modal = new ModalView(options);\n\n    modal.scope = scope;\n\n    // If this wasn't a defined scope, we can assign the viewType to the isolated scope\n    // we created\n    if(!options.scope) {\n      scope[ options.viewType ] = modal;\n    }\n\n    return modal;\n  };\n\n  return {\n    /**\n     * @ngdoc method\n     * @name $ionicModal#fromTemplate\n     * @param {string} templateString The template string to use as the modal's\n     * content.\n     * @param {object} options Options to be passed {@link ionic.controller:ionicModal#initialize ionicModal#initialize} method.\n     * @returns {object} An instance of an {@link ionic.controller:ionicModal}\n     * controller.\n     */\n    fromTemplate: function(templateString, options) {\n      var modal = createModal(templateString, options || {});\n      return modal;\n    },\n    /**\n     * @ngdoc method\n     * @name $ionicModal#fromTemplateUrl\n     * @param {string} templateUrl The url to load the template from.\n     * @param {object} options Options to be passed {@link ionic.controller:ionicModal#initialize ionicModal#initialize} method.\n     * options object.\n     * @returns {promise} A promise that will be resolved with an instance of\n     * an {@link ionic.controller:ionicModal} controller.\n     */\n    fromTemplateUrl: function(url, options, _) {\n      var cb;\n      //Deprecated: allow a callback as second parameter. Now we return a promise.\n      if (angular.isFunction(options)) {\n        cb = options;\n        options = _;\n      }\n      return $ionicTemplateLoader.load(url).then(function(templateString) {\n        var modal = createModal(templateString, options || {});\n        cb && cb(modal);\n        return modal;\n      });\n    }\n  };\n}]);\n\n\n/**\n * @ngdoc service\n * @name $ionicNavBarDelegate\n * @module ionic\n * @description\n * Delegate for controlling the {@link ionic.directive:ionNavBar} directive.\n *\n * @usage\n *\n * ```html\n * <body ng-controller=\"MyCtrl\">\n *   <ion-nav-bar>\n *     <button ng-click=\"setNavTitle('banana')\">\n *       Set title to banana!\n *     </button>\n *   </ion-nav-bar>\n * </body>\n * ```\n * ```js\n * function MyCtrl($scope, $ionicNavBarDelegate) {\n *   $scope.setNavTitle = function(title) {\n *     $ionicNavBarDelegate.setTitle(title);\n *   }\n * }\n * ```\n */\nIonicModule\n.service('$ionicNavBarDelegate', delegateService([\n  /**\n   * @ngdoc method\n   * @name $ionicNavBarDelegate#back\n   * @description Goes back in the view history.\n   * @param {DOMEvent=} event The event object (eg from a tap event)\n   */\n  'back',\n  /**\n   * @ngdoc method\n   * @name $ionicNavBarDelegate#align\n   * @description Aligns the title with the buttons in a given direction.\n   * @param {string=} direction The direction to the align the title text towards.\n   * Available: 'left', 'right', 'center'. Default: 'center'.\n   */\n  'align',\n  /**\n   * @ngdoc method\n   * @name $ionicNavBarDelegate#showBackButton\n   * @description\n   * Set/get whether the {@link ionic.directive:ionNavBackButton} is shown\n   * (if it exists).\n   * @param {boolean=} show Whether to show the back button.\n   * @returns {boolean} Whether the back button is shown.\n   */\n  'showBackButton',\n  /**\n   * @ngdoc method\n   * @name $ionicNavBarDelegate#showBar\n   * @description\n   * Set/get whether the {@link ionic.directive:ionNavBar} is shown.\n   * @param {boolean} show Whether to show the bar.\n   * @returns {boolean} Whether the bar is shown.\n   */\n  'showBar',\n  /**\n   * @ngdoc method\n   * @name $ionicNavBarDelegate#setTitle\n   * @description\n   * Set the title for the {@link ionic.directive:ionNavBar}.\n   * @param {string} title The new title to show.\n   */\n  'setTitle',\n  /**\n   * @ngdoc method\n   * @name $ionicNavBarDelegate#changeTitle\n   * @description\n   * Change the title, transitioning the new title in and the old one out in a given direction.\n   * @param {string} title The new title to show.\n   * @param {string} direction The direction to transition the new title in.\n   * Available: 'forward', 'back'.\n   */\n  'changeTitle',\n  /**\n   * @ngdoc method\n   * @name $ionicNavBarDelegate#getTitle\n   * @returns {string} The current title of the navbar.\n   */\n  'getTitle',\n  /**\n   * @ngdoc method\n   * @name $ionicNavBarDelegate#getPreviousTitle\n   * @returns {string} The previous title of the navbar.\n   */\n  'getPreviousTitle'\n  /**\n   * @ngdoc method\n   * @name $ionicNavBarDelegate#$getByHandle\n   * @param {string} handle\n   * @returns `delegateInstance` A delegate instance that controls only the\n   * navBars with delegate-handle matching the given handle.\n   *\n   * Example: `$ionicNavBarDelegate.$getByHandle('myHandle').setTitle('newTitle')`\n   */\n]));\n\nvar PLATFORM_BACK_BUTTON_PRIORITY_VIEW = 100;\nvar PLATFORM_BACK_BUTTON_PRIORITY_SIDE_MENU = 150;\nvar PLATFORM_BACK_BUTTON_PRIORITY_MODAL = 200;\nvar PLATFORM_BACK_BUTTON_PRIORITY_ACTION_SHEET = 300;\nvar PLATFORM_BACK_BUTTON_PRIORITY_POPUP = 400;\nvar PLATFORM_BACK_BUTTON_PRIORITY_LOADING = 500;\n\nfunction componentConfig(defaults) {\n  defaults.$get = function() { return defaults; };\n  return defaults;\n}\n\nIonicModule\n.constant('$ionicPlatformDefaults', {\n  'ios': {\n    '$ionicNavBarConfig': {\n      transition: 'nav-title-slide-ios7',\n      alignTitle: 'center',\n      backButtonIcon: 'ion-ios7-arrow-back'\n    },\n    '$ionicNavViewConfig': {\n      transition: 'slide-left-right-ios7'\n    },\n    '$ionicTabsConfig': {\n      type: '',\n      position: ''\n    }\n  },\n  'android': {\n    '$ionicNavBarConfig': {\n      transition: 'nav-title-slide-ios7',\n      alignTitle: 'center',\n      backButtonIcon: 'ion-ios7-arrow-back'\n    },\n    '$ionicNavViewConfig': {\n      transition: 'slide-left-right-ios7'\n    },\n    '$ionicTabsConfig': {\n      type: 'tabs-striped',\n      position: ''\n    }\n  }\n});\n\n\nIonicModule.config([\n  '$ionicPlatformDefaults',\n\n  '$injector',\n\nfunction($ionicPlatformDefaults, $injector) {\n  var platform = ionic.Platform.platform();\n\n  var applyConfig = function(platformDefaults) {\n    forEach(platformDefaults, function(defaults, constantName) {\n      extend($injector.get(constantName), defaults);\n    });\n  };\n\n  switch(platform) {\n    case 'ios':\n      applyConfig($ionicPlatformDefaults.ios);\n      break;\n    case 'android':\n      applyConfig($ionicPlatformDefaults.android);\n      break;\n  }\n}]);\n\n/**\n * @ngdoc service\n * @name $ionicPlatform\n * @module ionic\n * @description\n * An angular abstraction of {@link ionic.utility:ionic.Platform}.\n *\n * Used to detect the current platform, as well as do things like override the\n * Android back button in PhoneGap/Cordova.\n */\nIonicModule\n.provider('$ionicPlatform', function() {\n  return {\n    $get: ['$q', '$rootScope', function($q, $rootScope) {\n      var self = {\n\n        /**\n         * @ngdoc method\n         * @name $ionicPlatform#onHardwareBackButton\n         * @description\n         * Some platforms have a hardware back button, so this is one way to\n         * bind to it.\n         * @param {function} callback the callback to trigger when this event occurs\n         */\n        onHardwareBackButton: function(cb) {\n          ionic.Platform.ready(function() {\n            document.addEventListener('backbutton', cb, false);\n          });\n        },\n\n        /**\n         * @ngdoc method\n         * @name $ionicPlatform#offHardwareBackButton\n         * @description\n         * Remove an event listener for the backbutton.\n         * @param {function} callback The listener function that was\n         * originally bound.\n         */\n        offHardwareBackButton: function(fn) {\n          ionic.Platform.ready(function() {\n            document.removeEventListener('backbutton', fn);\n          });\n        },\n\n        /**\n         * @ngdoc method\n         * @name $ionicPlatform#registerBackButtonAction\n         * @description\n         * Register a hardware back button action. Only one action will execute\n         * when the back button is clicked, so this method decides which of\n         * the registered back button actions has the highest priority.\n         *\n         * For example, if an actionsheet is showing, the back button should\n         * close the actionsheet, but it should not also go back a page view\n         * or close a modal which may be open.\n         *\n         * @param {function} callback Called when the back button is pressed,\n         * if this listener is the highest priority.\n         * @param {number} priority Only the highest priority will execute.\n         * @param {*=} actionId The id to assign this action. Default: a\n         * random unique id.\n         * @returns {function} A function that, when called, will deregister\n         * this backButtonAction.\n         */\n        $backButtonActions: {},\n        registerBackButtonAction: function(fn, priority, actionId) {\n\n          if(!self._hasBackButtonHandler) {\n            // add a back button listener if one hasn't been setup yet\n            self.$backButtonActions = {};\n            self.onHardwareBackButton(self.hardwareBackButtonClick);\n            self._hasBackButtonHandler = true;\n          }\n\n          var action = {\n            id: (actionId ? actionId : ionic.Utils.nextUid()),\n            priority: (priority ? priority : 0),\n            fn: fn\n          };\n          self.$backButtonActions[action.id] = action;\n\n          // return a function to de-register this back button action\n          return function() {\n            delete self.$backButtonActions[action.id];\n          };\n        },\n\n        /**\n         * @private\n         */\n        hardwareBackButtonClick: function(e){\n          // loop through all the registered back button actions\n          // and only run the last one of the highest priority\n          var priorityAction, actionId;\n          for(actionId in self.$backButtonActions) {\n            if(!priorityAction || self.$backButtonActions[actionId].priority >= priorityAction.priority) {\n              priorityAction = self.$backButtonActions[actionId];\n            }\n          }\n          if(priorityAction) {\n            priorityAction.fn(e);\n            return priorityAction;\n          }\n        },\n\n        is: function(type) {\n          return ionic.Platform.is(type);\n        },\n\n        /**\n         * @ngdoc method\n         * @name $ionicPlatform#ready\n         * @description\n         * Trigger a callback once the device is ready,\n         * or immediately if the device is already ready.\n         * @param {function=} callback The function to call.\n         * @returns {promise} A promise which is resolved when the device is ready.\n         */\n        ready: function(cb) {\n          var q = $q.defer();\n\n          ionic.Platform.ready(function(){\n            q.resolve();\n            cb && cb();\n          });\n\n          return q.promise;\n        }\n      };\n      return self;\n    }]\n  };\n\n});\n\n\n/**\n * @ngdoc service\n * @name $ionicPopover\n * @module ionic\n * @description\n *\n * Related: {@link ionic.controller:ionicPopover ionicPopover controller}.\n *\n * The Popover is a view that floats above an app’s content. Popovers provide an\n * easy way to present or gather information from the user and are\n * commonly used in the following situations:\n *\n * - Show more info about the current view\n * - Select a commonly used tool or configuration\n * - Present a list of actions to perform inside one of your views\n *\n * Put the content of the popover inside of an `<ion-popover-view>` element.\n *\n * @usage\n * ```html\n * <p>\n *   <button ng-click=\"openPopover($event)\">Open Popover</button>\n * </p>\n *\n * <script id=\"my-popover.html\" type=\"text/ng-template\">\n *   <ion-popover-view>\n *     <ion-header-bar>\n *       <h1 class=\"title\">My Popover Title</h1>\n *     </ion-header-bar>\n *     <ion-content>\n *       Hello!\n *     </ion-content>\n *   </ion-popover-view>\n * </script>\n * ```\n * ```js\n * angular.module('testApp', ['ionic'])\n * .controller('MyController', function($scope, $ionicPopover) {\n *   $ionicPopover.fromTemplateUrl('my-popover.html', {\n *     scope: $scope,\n *   }).then(function(popover) {\n *     $scope.popover = popover;\n *   });\n *   $scope.openPopover = function($event) {\n *     $scope.popover.show($event);\n *   };\n *   $scope.closePopover = function() {\n *     $scope.popover.hide();\n *   };\n *   //Cleanup the popover when we're done with it!\n *   $scope.$on('$destroy', function() {\n *     $scope.popover.remove();\n *   });\n *   // Execute action on hide popover\n *   $scope.$on('popover.hidden', function() {\n *     // Execute action\n *   });\n *   // Execute action on remove popover\n *   $scope.$on('popover.removed', function() {\n *     // Execute action\n *   });\n * });\n * ```\n */\n\n\nIonicModule\n.factory('$ionicPopover', ['$ionicModal', '$ionicPosition', '$document',\nfunction($ionicModal, $ionicPosition, $document) {\n\n  var POPOVER_BODY_PADDING = 6;\n\n  var POPOVER_OPTIONS = {\n    viewType: 'popover',\n    hideDelay: 1,\n    animation: 'none',\n    positionView: positionView\n  };\n\n  function positionView(target, popoverEle) {\n    var targetEle = angular.element(target.target || target);\n    var buttonOffset = $ionicPosition.offset( targetEle );\n    var popoverWidth = popoverEle.prop('offsetWidth');\n    var bodyWidth = $document[0].body.clientWidth;\n    var bodyHeight = $document[0].body.clientHeight;\n\n    var popoverCSS = {\n      top: buttonOffset.top + buttonOffset.height,\n      left: buttonOffset.left + buttonOffset.width / 2 - popoverWidth / 2\n    };\n\n    if(popoverCSS.left < POPOVER_BODY_PADDING) {\n      popoverCSS.left = POPOVER_BODY_PADDING;\n    } else if(popoverCSS.left + popoverWidth + POPOVER_BODY_PADDING > bodyWidth) {\n      popoverCSS.left = bodyWidth - popoverWidth - POPOVER_BODY_PADDING;\n    }\n\n    var arrowEle = popoverEle[0].querySelector('.popover-arrow');\n    angular.element(arrowEle).css({\n      left: (buttonOffset.left - popoverCSS.left) + (buttonOffset.width / 2) - (arrowEle.offsetWidth / 2) + 'px'\n    });\n\n    popoverEle.css({\n      top: popoverCSS.top + 'px',\n      left: popoverCSS.left + 'px',\n      marginLeft: '0',\n      opacity: '1'\n    });\n\n  }\n\n  /**\n   * @ngdoc controller\n   * @name ionicPopover\n   * @module ionic\n   * @description\n   * Instantiated by the {@link ionic.service:$ionicPopover} service.\n   *\n   * Be sure to call [remove()](#remove) when you are done with each popover\n   * to clean it up and avoid memory leaks.\n   *\n   * Note: a popover will broadcast 'popover.shown', 'popover.hidden', and 'popover.removed' events from its originating\n   * scope, passing in itself as an event argument. Both the popover.removed and popover.hidden events are\n   * called when the popover is removed.\n   */\n\n  /**\n   * @ngdoc method\n   * @name ionicPopover#initialize\n   * @description Creates a new popover controller instance.\n   * @param {object} options An options object with the following properties:\n   *  - `{object=}` `scope` The scope to be a child of.\n   *    Default: creates a child of $rootScope.\n   *  - `{boolean=}` `focusFirstInput` Whether to autofocus the first input of\n   *    the popover when shown.  Default: false.\n   *  - `{boolean=}` `backdropClickToClose` Whether to close the popover on clicking the backdrop.\n   *    Default: true.\n   *  - `{boolean=}` `hardwareBackButtonClose` Whether the popover can be closed using the hardware\n   *    back button on Android and similar devices.  Default: true.\n   */\n\n  /**\n   * @ngdoc method\n   * @name ionicPopover#show\n   * @description Show this popover instance.\n   * @param {$event} $event The $event or target element which the popover should align\n   * itself next to.\n   * @returns {promise} A promise which is resolved when the popover is finished animating in.\n   */\n\n  /**\n   * @ngdoc method\n   * @name ionicPopover#hide\n   * @description Hide this popover instance.\n   * @returns {promise} A promise which is resolved when the popover is finished animating out.\n   */\n\n  /**\n   * @ngdoc method\n   * @name ionicPopover#remove\n   * @description Remove this popover instance from the DOM and clean up.\n   * @returns {promise} A promise which is resolved when the popover is finished animating out.\n   */\n\n  /**\n   * @ngdoc method\n   * @name ionicPopover#isShown\n   * @returns boolean Whether this popover is currently shown.\n   */\n\n  return {\n    /**\n     * @ngdoc method\n     * @name $ionicPopover#fromTemplate\n     * @param {string} templateString The template string to use as the popovers's\n     * content.\n     * @param {object} options Options to be passed to the initialize method.\n     * @returns {object} An instance of an {@link ionic.controller:ionicPopover}\n     * controller ($ionicPopover is built on top of $ionicPopover).\n     */\n    fromTemplate: function(templateString, options) {\n      return $ionicModal.fromTemplate(templateString, ionic.Utils.extend(options || {}, POPOVER_OPTIONS) );\n    },\n    /**\n     * @ngdoc method\n     * @name $ionicPopover#fromTemplateUrl\n     * @param {string} templateUrl The url to load the template from.\n     * @param {object} options Options to be passed to the initialize method.\n     * @returns {promise} A promise that will be resolved with an instance of\n     * an {@link ionic.controller:ionicPopover} controller ($ionicPopover is built on top of $ionicPopover).\n     */\n    fromTemplateUrl: function(url, options, _) {\n      return $ionicModal.fromTemplateUrl(url, options, ionic.Utils.extend(options || {}, POPOVER_OPTIONS) );\n    }\n  };\n\n}]);\n\n\nvar POPUP_TPL =\n  '<div class=\"popup\">' +\n    '<div class=\"popup-head\">' +\n      '<h3 class=\"popup-title\" ng-bind-html=\"title\"></h3>' +\n      '<h5 class=\"popup-sub-title\" ng-bind-html=\"subTitle\" ng-if=\"subTitle\"></h5>' +\n    '</div>' +\n    '<div class=\"popup-body\">' +\n    '</div>' +\n    '<div class=\"popup-buttons row\">' +\n      '<button ng-repeat=\"button in buttons\" ng-click=\"$buttonTapped(button, $event)\" class=\"button col\" ng-class=\"button.type || \\'button-default\\'\" ng-bind-html=\"button.text\"></button>' +\n    '</div>' +\n  '</div>';\n\n/**\n * @ngdoc service\n * @name $ionicPopup\n * @module ionic\n * @restrict E\n * @codepen zkmhJ\n * @description\n *\n * The Ionic Popup service allows programmatically creating and showing popup\n * windows that require the user to respond in order to continue.\n *\n * The popup system has support for more flexible versions of the built in `alert()`, `prompt()`,\n * and `confirm()` functions that users are used to, in addition to allowing popups with completely\n * custom content and look.\n *\n * An input can be given an `autofocus` attribute so it automatically receives focus when\n * the popup first shows. However, depending on certain use-cases this can cause issues with\n * the tap/click system, which is why Ionic prefers using the `autofocus` attribute as\n * an opt-in feature and not the default.\n *\n * @usage\n * A few basic examples, see below for details about all of the options available.\n *\n * ```js\n *angular.module('mySuperApp', ['ionic'])\n *.controller('PopupCtrl',function($scope, $ionicPopup, $timeout) {\n *\n * // Triggered on a button click, or some other target\n * $scope.showPopup = function() {\n *   $scope.data = {}\n *\n *   // An elaborate, custom popup\n *   var myPopup = $ionicPopup.show({\n *     template: '<input type=\"password\" ng-model=\"data.wifi\">',\n *     title: 'Enter Wi-Fi Password',\n *     subTitle: 'Please use normal things',\n *     scope: $scope,\n *     buttons: [\n *       { text: 'Cancel' },\n *       {\n *         text: '<b>Save</b>',\n *         type: 'button-positive',\n *         onTap: function(e) {\n *           if (!$scope.data.wifi) {\n *             //don't allow the user to close unless he enters wifi password\n *             e.preventDefault();\n *           } else {\n *             return $scope.data.wifi;\n *           }\n *         }\n *       },\n *     ]\n *   });\n *   myPopup.then(function(res) {\n *     console.log('Tapped!', res);\n *   });\n *   $timeout(function() {\n *      myPopup.close(); //close the popup after 3 seconds for some reason\n *   }, 3000);\n *  };\n *  // A confirm dialog\n *  $scope.showConfirm = function() {\n *    var confirmPopup = $ionicPopup.confirm({\n *      title: 'Consume Ice Cream',\n *      template: 'Are you sure you want to eat this ice cream?'\n *    });\n *    confirmPopup.then(function(res) {\n *      if(res) {\n *        console.log('You are sure');\n *      } else {\n *        console.log('You are not sure');\n *      }\n *    });\n *  };\n *\n *  // An alert dialog\n *  $scope.showAlert = function() {\n *    var alertPopup = $ionicPopup.alert({\n *      title: 'Don\\'t eat that!',\n *      template: 'It might taste good'\n *    });\n *    alertPopup.then(function(res) {\n *      console.log('Thank you for not eating my delicious ice cream cone');\n *    });\n *  };\n *});\n *```\n */\n\nIonicModule\n.factory('$ionicPopup', [\n  '$ionicTemplateLoader',\n  '$ionicBackdrop',\n  '$q',\n  '$timeout',\n  '$rootScope',\n  '$document',\n  '$compile',\n  '$ionicPlatform',\nfunction($ionicTemplateLoader, $ionicBackdrop, $q, $timeout, $rootScope, $document, $compile, $ionicPlatform) {\n  //TODO allow this to be configured\n  var config = {\n    stackPushDelay: 50\n  };\n  var popupStack = [];\n  var $ionicPopup = {\n    /**\n     * @ngdoc method\n     * @description\n     * Show a complex popup. This is the master show function for all popups.\n     *\n     * A complex popup has a `buttons` array, with each button having a `text` and `type`\n     * field, in addition to an `onTap` function.  The `onTap` function, called when\n     * the correspondingbutton on the popup is tapped, will by default close the popup\n     * and resolve the popup promise with its return value.  If you wish to prevent the\n     * default and keep the popup open on button tap, call `event.preventDefault()` on the\n     * passed in tap event.  Details below.\n     *\n     * @name $ionicPopup#show\n     * @param {object} options The options for the new popup, of the form:\n     *\n     * ```\n     * {\n     *   title: '', // String. The title of the popup.\n     *   subTitle: '', // String (optional). The sub-title of the popup.\n     *   template: '', // String (optional). The html template to place in the popup body.\n     *   templateUrl: '', // String (optional). The URL of an html template to place in the popup   body.\n     *   scope: null, // Scope (optional). A scope to link to the popup content.\n     *   buttons: [{ //Array[Object] (optional). Buttons to place in the popup footer.\n     *     text: 'Cancel',\n     *     type: 'button-default',\n     *     onTap: function(e) {\n     *       // e.preventDefault() will stop the popup from closing when tapped.\n     *       e.preventDefault();\n     *     }\n     *   }, {\n     *     text: 'OK',\n     *     type: 'button-positive',\n     *     onTap: function(e) {\n     *       // Returning a value will cause the promise to resolve with the given value.\n     *       return scope.data.response;\n     *     }\n     *   }]\n     * }\n     * ```\n     *\n     * @returns {object} A promise which is resolved when the popup is closed. Has an additional\n     * `close` function, which can be used to programmatically close the popup.\n     */\n    show: showPopup,\n\n    /**\n     * @ngdoc method\n     * @name $ionicPopup#alert\n     * @description Show a simple alert popup with a message and one button that the user can\n     * tap to close the popup.\n     *\n     * @param {object} options The options for showing the alert, of the form:\n     *\n     * ```\n     * {\n     *   title: '', // String. The title of the popup.\n     *   subTitle: '', // String (optional). The sub-title of the popup.\n     *   template: '', // String (optional). The html template to place in the popup body.\n     *   templateUrl: '', // String (optional). The URL of an html template to place in the popup   body.\n     *   okText: '', // String (default: 'OK'). The text of the OK button.\n     *   okType: '', // String (default: 'button-positive'). The type of the OK button.\n     * }\n     * ```\n     *\n     * @returns {object} A promise which is resolved when the popup is closed. Has one additional\n     * function `close`, which can be called with any value to programmatically close the popup\n     * with the given value.\n     */\n    alert: showAlert,\n\n    /**\n     * @ngdoc method\n     * @name $ionicPopup#confirm\n     * @description\n     * Show a simple confirm popup with a Cancel and OK button.\n     *\n     * Resolves the promise with true if the user presses the OK button, and false if the\n     * user presses the Cancel button.\n     *\n     * @param {object} options The options for showing the confirm popup, of the form:\n     *\n     * ```\n     * {\n     *   title: '', // String. The title of the popup.\n     *   subTitle: '', // String (optional). The sub-title of the popup.\n     *   template: '', // String (optional). The html template to place in the popup body.\n     *   templateUrl: '', // String (optional). The URL of an html template to place in the popup   body.\n     *   cancelText: '', // String (default: 'Cancel'). The text of the Cancel button.\n     *   cancelType: '', // String (default: 'button-default'). The type of the Cancel button.\n     *   okText: '', // String (default: 'OK'). The text of the OK button.\n     *   okType: '', // String (default: 'button-positive'). The type of the OK button.\n     * }\n     * ```\n     *\n     * @returns {object} A promise which is resolved when the popup is closed. Has one additional\n     * function `close`, which can be called with any value to programmatically close the popup\n     * with the given value.\n     */\n    confirm: showConfirm,\n\n    /**\n     * @ngdoc method\n     * @name $ionicPopup#prompt\n     * @description Show a simple prompt popup, which has an input, OK button, and Cancel button.\n     * Resolves the promise with the value of the input if the user presses OK, and with undefined\n     * if the user presses Cancel.\n     *\n     * ```javascript\n     *  $ionicPopup.prompt({\n     *    title: 'Password Check',\n     *    template: 'Enter your secret password',\n     *    inputType: 'password',\n     *    inputPlaceholder: 'Your password'\n     *  }).then(function(res) {\n     *    console.log('Your password is', res);\n     *  });\n     * ```\n     * @param {object} options The options for showing the prompt popup, of the form:\n     *\n     * ```\n     * {\n     *   title: '', // String. The title of the popup.\n     *   subTitle: '', // String (optional). The sub-title of the popup.\n     *   template: '', // String (optional). The html template to place in the popup body.\n     *   templateUrl: '', // String (optional). The URL of an html template to place in the popup   body.\n     *   inputType: // String (default: 'text'). The type of input to use\n     *   inputPlaceholder: // String (default: ''). A placeholder to use for the input.\n     *   cancelText: // String (default: 'Cancel'. The text of the Cancel button.\n     *   cancelType: // String (default: 'button-default'). The type of the Cancel button.\n     *   okText: // String (default: 'OK'). The text of the OK button.\n     *   okType: // String (default: 'button-positive'). The type of the OK button.\n     * }\n     * ```\n     *\n     * @returns {object} A promise which is resolved when the popup is closed. Has one additional\n     * function `close`, which can be called with any value to programmatically close the popup\n     * with the given value.\n     */\n    prompt: showPrompt,\n    /**\n     * @private for testing\n     */\n    _createPopup: createPopup,\n    _popupStack: popupStack\n  };\n\n  return $ionicPopup;\n\n  function createPopup(options) {\n    options = extend({\n      scope: null,\n      title: '',\n      buttons: [],\n    }, options || {});\n\n    var popupPromise = $ionicTemplateLoader.compile({\n      template: POPUP_TPL,\n      scope: options.scope && options.scope.$new(),\n      appendTo: $document[0].body\n    });\n    var contentPromise = options.templateUrl ?\n      $ionicTemplateLoader.load(options.templateUrl) :\n      $q.when(options.template || options.content || '');\n\n    return $q.all([popupPromise, contentPromise])\n    .then(function(results) {\n      var self = results[0];\n      var content = results[1];\n      var responseDeferred = $q.defer();\n\n      self.responseDeferred = responseDeferred;\n\n      //Can't ng-bind-html for popup-body because it can be insecure html\n      //(eg an input in case of prompt)\n      var body = jqLite(self.element[0].querySelector('.popup-body'));\n      if (content) {\n        body.html(content);\n        $compile(body.contents())(self.scope);\n      } else {\n        body.remove();\n      }\n\n      extend(self.scope, {\n        title: options.title,\n        buttons: options.buttons,\n        subTitle: options.subTitle,\n        $buttonTapped: function(button, event) {\n          var result = (button.onTap || angular.noop)(event);\n          event = event.originalEvent || event; //jquery events\n\n          if (!event.defaultPrevented) {\n            responseDeferred.resolve(result);\n          }\n        }\n      });\n\n      self.show = function() {\n        if (self.isShown) return;\n\n        self.isShown = true;\n        ionic.requestAnimationFrame(function() {\n          //if hidden while waiting for raf, don't show\n          if (!self.isShown) return;\n\n          //if the popup is taller than the window, make the popup body scrollable\n          if(self.element[0].offsetHeight > window.innerHeight - 20){\n            self.element[0].style.height = window.innerHeight - 20+'px';\n            popupBody = self.element[0].querySelectorAll('.popup-body');\n            popupHead = self.element[0].querySelectorAll('.popup-head');\n            popupButtons = self.element[0].querySelectorAll('.popup-buttons');\n            self.element.addClass('popup-tall');\n            newHeight = window.innerHeight - popupHead[0].offsetHeight - popupButtons[0].offsetHeight -20;\n            popupBody[0].style.height =  newHeight + 'px';\n          }\n\n          self.element.removeClass('popup-hidden');\n          self.element.addClass('popup-showing active');\n          ionic.DomUtil.centerElementByMarginTwice(self.element[0]);\n          focusInput(self.element);\n        });\n      };\n      self.hide = function(callback) {\n        callback = callback || angular.noop;\n        if (!self.isShown) return callback();\n\n        self.isShown = false;\n        self.element.removeClass('active');\n        self.element.addClass('popup-hidden');\n        $timeout(callback, 250);\n      };\n      self.remove = function() {\n        if (self.removed) return;\n\n        self.hide(function() {\n          self.element.remove();\n          self.scope.$destroy();\n        });\n\n        self.removed = true;\n      };\n\n      return self;\n    });\n  }\n\n  function onHardwareBackButton(e) {\n    popupStack[0] && popupStack[0].responseDeferred.resolve();\n  }\n\n  function showPopup(options) {\n    var popupPromise = $ionicPopup._createPopup(options);\n    var previousPopup = popupStack[0];\n\n    if (previousPopup) {\n      previousPopup.hide();\n    }\n\n    var resultPromise = $timeout(angular.noop, previousPopup ? config.stackPushDelay : 0)\n    .then(function() { return popupPromise; })\n    .then(function(popup) {\n      if (!previousPopup) {\n        //Add popup-open & backdrop if this is first popup\n        document.body.classList.add('popup-open');\n        $ionicBackdrop.retain();\n        $ionicPopup._backButtonActionDone = $ionicPlatform.registerBackButtonAction(\n          onHardwareBackButton,\n          PLATFORM_BACK_BUTTON_PRIORITY_POPUP\n        );\n      }\n      popupStack.unshift(popup);\n      popup.show();\n\n      //DEPRECATED: notify the promise with an object with a close method\n      popup.responseDeferred.notify({\n        close: resultPromise.close\n      });\n\n      return popup.responseDeferred.promise.then(function(result) {\n        var index = popupStack.indexOf(popup);\n        if (index !== -1) {\n          popupStack.splice(index, 1);\n        }\n        popup.remove();\n\n        var previousPopup = popupStack[0];\n        if (previousPopup) {\n          previousPopup.show();\n        } else {\n          //Remove popup-open & backdrop if this is last popup\n          document.body.classList.remove('popup-open');\n          ($ionicPopup._backButtonActionDone || angular.noop)();\n        }\n        // always release the backdrop since it has an internal backdrop counter\n        $ionicBackdrop.release();\n        return result;\n      });\n    });\n\n    function close(result) {\n      popupPromise.then(function(popup) {\n        if (!popup.removed) {\n          popup.responseDeferred.resolve(result);\n        }\n      });\n    }\n    resultPromise.close = close;\n\n    return resultPromise;\n  }\n\n  function focusInput(element) {\n    var focusOn = element[0].querySelector('[autofocus]');\n    if (focusOn) {\n      focusOn.focus();\n    }\n  }\n\n  function showAlert(opts) {\n    return showPopup( extend({\n      buttons: [{\n        text: opts.okText || 'OK',\n        type: opts.okType || 'button-positive',\n        onTap: function(e) {\n          return true;\n        }\n      }]\n    }, opts || {}) );\n  }\n\n  function showConfirm(opts) {\n    return showPopup( extend({\n      buttons: [{\n        text: opts.cancelText || 'Cancel' ,\n        type: opts.cancelType || 'button-default',\n        onTap: function(e) { return false; }\n      }, {\n        text: opts.okText || 'OK',\n        type: opts.okType || 'button-positive',\n        onTap: function(e) { return true; }\n      }]\n    }, opts || {}) );\n  }\n\n  function showPrompt(opts) {\n    var scope = $rootScope.$new(true);\n    scope.data = {};\n    return showPopup( extend({\n      template: '<input ng-model=\"data.response\" type=\"' + (opts.inputType || 'text') +\n        '\" placeholder=\"' + (opts.inputPlaceholder || '') + '\">',\n      scope: scope,\n      buttons: [{\n        text: opts.cancelText || 'Cancel',\n        type: opts.cancelType|| 'button-default',\n        onTap: function(e) {}\n      }, {\n        text: opts.okText || 'OK',\n        type: opts.okType || 'button-positive',\n        onTap: function(e) {\n          return scope.data.response || '';\n        }\n      }]\n    }, opts || {}) );\n  }\n}]);\n\n\n/**\n * @ngdoc service\n * @name $ionicPosition\n * @module ionic\n * @description\n * A set of utility methods that can be use to retrieve position of DOM elements.\n * It is meant to be used where we need to absolute-position DOM elements in\n * relation to other, existing elements (this is the case for tooltips, popovers, etc.).\n *\n * Adapted from [AngularUI Bootstrap](https://github.com/angular-ui/bootstrap/blob/master/src/position/position.js),\n * ([license](https://github.com/angular-ui/bootstrap/blob/master/LICENSE))\n */\nIonicModule\n.factory('$ionicPosition', ['$document', '$window', function ($document, $window) {\n\n  function getStyle(el, cssprop) {\n    if (el.currentStyle) { //IE\n      return el.currentStyle[cssprop];\n    } else if ($window.getComputedStyle) {\n      return $window.getComputedStyle(el)[cssprop];\n    }\n    // finally try and get inline style\n    return el.style[cssprop];\n  }\n\n  /**\n   * Checks if a given element is statically positioned\n   * @param element - raw DOM element\n   */\n  function isStaticPositioned(element) {\n    return (getStyle(element, 'position') || 'static' ) === 'static';\n  }\n\n  /**\n   * returns the closest, non-statically positioned parentOffset of a given element\n   * @param element\n   */\n  var parentOffsetEl = function (element) {\n    var docDomEl = $document[0];\n    var offsetParent = element.offsetParent || docDomEl;\n    while (offsetParent && offsetParent !== docDomEl && isStaticPositioned(offsetParent) ) {\n      offsetParent = offsetParent.offsetParent;\n    }\n    return offsetParent || docDomEl;\n  };\n\n  return {\n    /**\n     * @ngdoc method\n     * @name $ionicPosition#position\n     * @description Get the current coordinates of the element, relative to the offset parent.\n     * Read-only equivalent of [jQuery's position function](http://api.jquery.com/position/).\n     * @param {element} element The element to get the position of.\n     * @returns {object} Returns an object containing the properties top, left, width and height.\n     */\n    position: function (element) {\n      var elBCR = this.offset(element);\n      var offsetParentBCR = { top: 0, left: 0 };\n      var offsetParentEl = parentOffsetEl(element[0]);\n      if (offsetParentEl != $document[0]) {\n        offsetParentBCR = this.offset(angular.element(offsetParentEl));\n        offsetParentBCR.top += offsetParentEl.clientTop - offsetParentEl.scrollTop;\n        offsetParentBCR.left += offsetParentEl.clientLeft - offsetParentEl.scrollLeft;\n      }\n\n      var boundingClientRect = element[0].getBoundingClientRect();\n      return {\n        width: boundingClientRect.width || element.prop('offsetWidth'),\n        height: boundingClientRect.height || element.prop('offsetHeight'),\n        top: elBCR.top - offsetParentBCR.top,\n        left: elBCR.left - offsetParentBCR.left\n      };\n    },\n\n    /**\n     * @ngdoc method\n     * @name $ionicPosition#offset\n     * @description Get the current coordinates of the element, relative to the document.\n     * Read-only equivalent of [jQuery's offset function](http://api.jquery.com/offset/).\n     * @param {element} element The element to get the offset of.\n     * @returns {object} Returns an object containing the properties top, left, width and height.\n     */\n    offset: function (element) {\n      var boundingClientRect = element[0].getBoundingClientRect();\n      return {\n        width: boundingClientRect.width || element.prop('offsetWidth'),\n        height: boundingClientRect.height || element.prop('offsetHeight'),\n        top: boundingClientRect.top + ($window.pageYOffset || $document[0].documentElement.scrollTop),\n        left: boundingClientRect.left + ($window.pageXOffset || $document[0].documentElement.scrollLeft)\n      };\n    }\n\n  };\n}]);\n\n\n/**\n * @ngdoc service\n * @name $ionicScrollDelegate\n * @module ionic\n * @description\n * Delegate for controlling scrollViews (created by\n * {@link ionic.directive:ionContent} and\n * {@link ionic.directive:ionScroll} directives).\n *\n * Methods called directly on the $ionicScrollDelegate service will control all scroll\n * views.  Use the {@link ionic.service:$ionicScrollDelegate#$getByHandle $getByHandle}\n * method to control specific scrollViews.\n *\n * @usage\n *\n * ```html\n * <body ng-controller=\"MainCtrl\">\n *   <ion-content>\n *     <button ng-click=\"scrollTop()\">Scroll to Top!</button>\n *   </ion-content>\n * </body>\n * ```\n * ```js\n * function MainCtrl($scope, $ionicScrollDelegate) {\n *   $scope.scrollTop = function() {\n *     $ionicScrollDelegate.scrollTop();\n *   };\n * }\n * ```\n *\n * Example of advanced usage, with two scroll areas using `delegate-handle`\n * for fine control.\n *\n * ```html\n * <body ng-controller=\"MainCtrl\">\n *   <ion-content delegate-handle=\"mainScroll\">\n *     <button ng-click=\"scrollMainToTop()\">\n *       Scroll content to top!\n *     </button>\n *     <ion-scroll delegate-handle=\"small\" style=\"height: 100px;\">\n *       <button ng-click=\"scrollSmallToTop()\">\n *         Scroll small area to top!\n *       </button>\n *     </ion-scroll>\n *   </ion-content>\n * </body>\n * ```\n * ```js\n * function MainCtrl($scope, $ionicScrollDelegate) {\n *   $scope.scrollMainToTop = function() {\n *     $ionicScrollDelegate.$getByHandle('mainScroll').scrollTop();\n *   };\n *   $scope.scrollSmallToTop = function() {\n *     $ionicScrollDelegate.$getByHandle('small').scrollTop();\n *   };\n * }\n * ```\n */\nIonicModule\n.service('$ionicScrollDelegate', delegateService([\n  /**\n   * @ngdoc method\n   * @name $ionicScrollDelegate#resize\n   * @description Tell the scrollView to recalculate the size of its container.\n   */\n  'resize',\n  /**\n   * @ngdoc method\n   * @name $ionicScrollDelegate#scrollTop\n   * @param {boolean=} shouldAnimate Whether the scroll should animate.\n   */\n  'scrollTop',\n  /**\n   * @ngdoc method\n   * @name $ionicScrollDelegate#scrollBottom\n   * @param {boolean=} shouldAnimate Whether the scroll should animate.\n   */\n  'scrollBottom',\n  /**\n   * @ngdoc method\n   * @name $ionicScrollDelegate#scrollTo\n   * @param {number} left The x-value to scroll to.\n   * @param {number} top The y-value to scroll to.\n   * @param {boolean=} shouldAnimate Whether the scroll should animate.\n   */\n  'scrollTo',\n  /**\n   * @ngdoc method\n   * @name $ionicScrollDelegate#scrollBy\n   * @param {number} left The x-offset to scroll by.\n   * @param {number} top The y-offset to scroll by.\n   * @param {boolean=} shouldAnimate Whether the scroll should animate.\n   */\n  'scrollBy',\n  /**\n   * @ngdoc method\n   * @name $ionicScrollDelegate#getScrollPosition\n   * @returns {object} The scroll position of this view, with the following properties:\n   *  - `{number}` `left` The distance the user has scrolled from the left (starts at 0).\n   *  - `{number}` `top` The distance the user has scrolled from the top (starts at 0).\n   */\n  'getScrollPosition',\n  /**\n   * @ngdoc method\n   * @name $ionicScrollDelegate#anchorScroll\n   * @description Tell the scrollView to scroll to the element with an id\n   * matching window.location.hash.\n   *\n   * If no matching element is found, it will scroll to top.\n   *\n   * @param {boolean=} shouldAnimate Whether the scroll should animate.\n   */\n  'anchorScroll',\n  /**\n   * @ngdoc method\n   * @name $ionicScrollDelegate#getScrollView\n   * @returns {object} The scrollView associated with this delegate.\n   */\n  'getScrollView',\n  /**\n   * @ngdoc method\n   * @name $ionicScrollDelegate#rememberScrollPosition\n   * @description\n   * Will make it so, when this scrollView is destroyed (user leaves the page),\n   * the last scroll position the page was on will be saved, indexed by the\n   * given id.\n   *\n   * Note: for pages associated with a view under an ion-nav-view,\n   * rememberScrollPosition automatically saves their scroll.\n   *\n   * Related methods: scrollToRememberedPosition, forgetScrollPosition (below).\n   *\n   * In the following example, the scroll position of the ion-scroll element\n   * will persist, even when the user changes the toggle switch.\n   *\n   * ```html\n   * <ion-toggle ng-model=\"shouldShowScrollView\"></ion-toggle>\n   * <ion-scroll delegate-handle=\"myScroll\" ng-if=\"shouldShowScrollView\">\n   *   <div ng-controller=\"ScrollCtrl\">\n   *     <ion-list>\n   *       {% raw %}<ion-item ng-repeat=\"i in items\">{{i}}</ion-item>{% endraw %}\n   *     </ion-list>\n   *   </div>\n   * </ion-scroll>\n   * ```\n   * ```js\n   * function ScrollCtrl($scope, $ionicScrollDelegate) {\n   *   var delegate = $ionicScrollDelegate.$getByHandle('myScroll');\n   *\n   *   // Put any unique ID here.  The point of this is: every time the controller is recreated\n   *   // we want to load the correct remembered scroll values.\n   *   delegate.rememberScrollPosition('my-scroll-id');\n   *   delegate.scrollToRememberedPosition();\n   *   $scope.items = [];\n   *   for (var i=0; i<100; i++) {\n   *     $scope.items.push(i);\n   *   }\n   * }\n   * ```\n   *\n   * @param {string} id The id to remember the scroll position of this\n   * scrollView by.\n   */\n  'rememberScrollPosition',\n  /**\n   * @ngdoc method\n   * @name $ionicScrollDelegate#forgetScrollPosition\n   * @description\n   * Stop remembering the scroll position for this scrollView.\n   */\n  'forgetScrollPosition',\n  /**\n   * @ngdoc method\n   * @name $ionicScrollDelegate#scrollToRememberedPosition\n   * @description\n   * If this scrollView has an id associated with its scroll position,\n   * (through calling rememberScrollPosition), and that position is remembered,\n   * load the position and scroll to it.\n   * @param {boolean=} shouldAnimate Whether to animate the scroll.\n   */\n  'scrollToRememberedPosition'\n  /**\n   * @ngdoc method\n   * @name $ionicScrollDelegate#$getByHandle\n   * @param {string} handle\n   * @returns `delegateInstance` A delegate instance that controls only the\n   * scrollViews with `delegate-handle` matching the given handle.\n   *\n   * Example: `$ionicScrollDelegate.$getByHandle('my-handle').scrollTop();`\n   */\n]));\n\n\n/**\n * @ngdoc service\n * @name $ionicSideMenuDelegate\n * @module ionic\n *\n * @description\n * Delegate for controlling the {@link ionic.directive:ionSideMenus} directive.\n *\n * Methods called directly on the $ionicSideMenuDelegate service will control all side\n * menus.  Use the {@link ionic.service:$ionicSideMenuDelegate#$getByHandle $getByHandle}\n * method to control specific ionSideMenus instances.\n *\n * @usage\n *\n * ```html\n * <body ng-controller=\"MainCtrl\">\n *   <ion-side-menus>\n *     <ion-side-menu-content>\n *       Content!\n *       <button ng-click=\"toggleLeftSideMenu()\">\n *         Toggle Left Side Menu\n *       </button>\n *     </ion-side-menu-content>\n *     <ion-side-menu side=\"left\">\n *       Left Menu!\n *     <ion-side-menu>\n *   </ion-side-menus>\n * </body>\n * ```\n * ```js\n * function MainCtrl($scope, $ionicSideMenuDelegate) {\n *   $scope.toggleLeftSideMenu = function() {\n *     $ionicSideMenuDelegate.toggleLeft();\n *   };\n * }\n * ```\n */\nIonicModule\n.service('$ionicSideMenuDelegate', delegateService([\n  /**\n   * @ngdoc method\n   * @name $ionicSideMenuDelegate#toggleLeft\n   * @description Toggle the left side menu (if it exists).\n   * @param {boolean=} isOpen Whether to open or close the menu.\n   * Default: Toggles the menu.\n   */\n  'toggleLeft',\n  /**\n   * @ngdoc method\n   * @name $ionicSideMenuDelegate#toggleRight\n   * @description Toggle the right side menu (if it exists).\n   * @param {boolean=} isOpen Whether to open or close the menu.\n   * Default: Toggles the menu.\n   */\n  'toggleRight',\n  /**\n   * @ngdoc method\n   * @name $ionicSideMenuDelegate#getOpenRatio\n   * @description Gets the ratio of open amount over menu width. For example, a\n   * menu of width 100 that is opened by 50 pixels is 50% opened, and would return\n   * a ratio of 0.5.\n   *\n   * @returns {float} 0 if nothing is open, between 0 and 1 if left menu is\n   * opened/opening, and between 0 and -1 if right menu is opened/opening.\n   */\n  'getOpenRatio',\n  /**\n   * @ngdoc method\n   * @name $ionicSideMenuDelegate#isOpen\n   * @returns {boolean} Whether either the left or right menu is currently opened.\n   */\n  'isOpen',\n  /**\n   * @ngdoc method\n   * @name $ionicSideMenuDelegate#isOpenLeft\n   * @returns {boolean} Whether the left menu is currently opened.\n   */\n  'isOpenLeft',\n  /**\n   * @ngdoc method\n   * @name $ionicSideMenuDelegate#isOpenRight\n   * @returns {boolean} Whether the right menu is currently opened.\n   */\n  'isOpenRight',\n  /**\n   * @ngdoc method\n   * @name $ionicSideMenuDelegate#canDragContent\n   * @param {boolean=} canDrag Set whether the content can or cannot be dragged to open\n   * side menus.\n   * @returns {boolean} Whether the content can be dragged to open side menus.\n   */\n  'canDragContent',\n  /**\n   * @ngdoc method\n   * @name $ionicSideMenuDelegate#edgeDragThreshold\n   * @param {boolean|number=} value Set whether the content drag can only start if it is below a certain threshold distance from the edge of the screen. Accepts three different values:\n   *  - If a non-zero number is given, that many pixels is used as the maximum allowed distance from the edge that starts dragging the side menu.\n   *  - If true is given, the default number of pixels (25) is used as the maximum allowed distance.\n   *  - If false or 0 is given, the edge drag threshold is disabled, and dragging from anywhere on the content is allowed.\n   * @returns {boolean} Whether the drag can start only from within the edge of screen threshold.\n   */\n  'edgeDragThreshold',\n  /**\n   * @ngdoc method\n   * @name $ionicSideMenuDelegate#$getByHandle\n   * @param {string} handle\n   * @returns `delegateInstance` A delegate instance that controls only the\n   * {@link ionic.directive:ionSideMenus} directives with `delegate-handle` matching\n   * the given handle.\n   *\n   * Example: `$ionicSideMenuDelegate.$getByHandle('my-handle').toggleLeft();`\n   */\n]));\n\n\n/**\n * @ngdoc service\n * @name $ionicSlideBoxDelegate\n * @module ionic\n * @description\n * Delegate that controls the {@link ionic.directive:ionSlideBox} directive.\n *\n * Methods called directly on the $ionicSlideBoxDelegate service will control all slide boxes.  Use the {@link ionic.service:$ionicSlideBoxDelegate#$getByHandle $getByHandle}\n * method to control specific slide box instances.\n *\n * @usage\n *\n * ```html\n * <body ng-controller=\"MyCtrl\">\n *   <ion-slide-box>\n *     <ion-slide>\n *       <div class=\"box blue\">\n *         <button ng-click=\"nextSlide()\">Next slide!</button>\n *       </div>\n *     </ion-slide>\n *     <ion-slide>\n *       <div class=\"box red\">\n *         Slide 2!\n *       </div>\n *     </ion-slide>\n *   </ion-slide-box>\n * </body>\n * ```\n * ```js\n * function MyCtrl($scope, $ionicSlideBoxDelegate) {\n *   $scope.nextSlide = function() {\n *     $ionicSlideBoxDelegate.next();\n *   }\n * }\n * ```\n */\nIonicModule\n.service('$ionicSlideBoxDelegate', delegateService([\n  /**\n   * @ngdoc method\n   * @name $ionicSlideBoxDelegate#update\n   * @description\n   * Update the slidebox (for example if using Angular with ng-repeat,\n   * resize it for the elements inside).\n   */\n  'update',\n  /**\n   * @ngdoc method\n   * @name $ionicSlideBoxDelegate#slide\n   * @param {number} to The index to slide to.\n   * @param {number=} speed The number of milliseconds for the change to take.\n   */\n  'slide',\n  /**\n   * @ngdoc method\n   * @name $ionicSlideBoxDelegate#enableSlide\n   * @param {boolean=} shouldEnable Whether to enable sliding the slidebox.\n   * @returns {boolean} Whether sliding is enabled.\n   */\n  'enableSlide',\n  /**\n   * @ngdoc method\n   * @name $ionicSlideBoxDelegate#previous\n   * @description Go to the previous slide. Wraps around if at the beginning.\n   */\n  'previous',\n  /**\n   * @ngdoc method\n   * @name $ionicSlideBoxDelegate#next\n   * @description Go to the next slide. Wraps around if at the end.\n   */\n  'next',\n  /**\n   * @ngdoc method\n   * @name $ionicSlideBoxDelegate#stop\n   * @description Stop sliding. The slideBox will not move again until\n   * explicitly told to do so.\n   */\n  'stop',\n  /**\n   * @ngdoc method\n   * @name $ionicSlideBoxDelegate#start\n   * @description Start sliding again if the slideBox was stopped. \n   */\n  'start',\n  /**\n   * @ngdoc method\n   * @name $ionicSlideBoxDelegate#currentIndex\n   * @returns number The index of the current slide.\n   */\n  'currentIndex',\n  /**\n   * @ngdoc method\n   * @name $ionicSlideBoxDelegate#slidesCount\n   * @returns number The number of slides there are currently.\n   */\n  'slidesCount'\n  /**\n   * @ngdoc method\n   * @name $ionicSlideBoxDelegate#$getByHandle\n   * @param {string} handle\n   * @returns `delegateInstance` A delegate instance that controls only the\n   * {@link ionic.directive:ionSlideBox} directives with `delegate-handle` matching\n   * the given handle.\n   *\n   * Example: `$ionicSlideBoxDelegate.$getByHandle('my-handle').stop();`\n   */\n]));\n\n\n/**\n * @ngdoc service\n * @name $ionicTabsDelegate\n * @module ionic\n *\n * @description\n * Delegate for controlling the {@link ionic.directive:ionTabs} directive.\n *\n * Methods called directly on the $ionicTabsDelegate service will control all ionTabs\n * directives. Use the {@link ionic.service:$ionicTabsDelegate#$getByHandle $getByHandle}\n * method to control specific ionTabs instances.\n *\n * @usage\n *\n * ```html\n * <body ng-controller=\"MyCtrl\">\n *   <ion-tabs>\n *\n *     <ion-tab title=\"Tab 1\">\n *       Hello tab 1!\n *       <button ng-click=\"selectTabWithIndex(1)\">Select tab 2!</button>\n *     </ion-tab>\n *     <ion-tab title=\"Tab 2\">Hello tab 2!</ion-tab>\n *\n *   </ion-tabs>\n * </body>\n * ```\n * ```js\n * function MyCtrl($scope, $ionicTabsDelegate) {\n *   $scope.selectTabWithIndex = function(index) {\n *     $ionicTabsDelegate.select(index);\n *   }\n * }\n * ```\n */\nIonicModule\n.service('$ionicTabsDelegate', delegateService([\n  /**\n   * @ngdoc method\n   * @name $ionicTabsDelegate#select\n   * @description Select the tab matching the given index.\n   *\n   * @param {number} index Index of the tab to select.\n   * @param {boolean=} shouldChangeHistory Whether this selection should load this tab's\n   * view history (if it exists) and use it, or just load the default page.\n   * Default false.\n   * Hint: you probably want this to be true if you have an\n   * {@link ionic.directive:ionNavView} inside your tab.\n   */\n  'select',\n  /**\n   * @ngdoc method\n   * @name $ionicTabsDelegate#selectedIndex\n   * @returns `number` The index of the selected tab, or -1.\n   */\n  'selectedIndex'\n  /**\n   * @ngdoc method\n   * @name $ionicTabsDelegate#$getByHandle\n   * @param {string} handle\n   * @returns `delegateInstance` A delegate instance that controls only the\n   * {@link ionic.directive:ionTabs} directives with `delegate-handle` matching\n   * the given handle.\n   *\n   * Example: `$ionicTabsDelegate.$getByHandle('my-handle').select(0);`\n   */\n]));\n\n\nIonicModule\n.factory('$ionicTemplateLoader', [\n  '$compile',\n  '$controller',\n  '$http',\n  '$q',\n  '$rootScope',\n  '$templateCache',\nfunction($compile, $controller, $http, $q, $rootScope, $templateCache) {\n\n  return {\n    load: fetchTemplate,\n    compile: loadAndCompile\n  };\n\n  function fetchTemplate(url) {\n    return $http.get(url, {cache: $templateCache})\n    .then(function(response) {\n      return response.data && response.data.trim();\n    });\n  }\n\n  function loadAndCompile(options) {\n    options = extend({\n      template: '',\n      templateUrl: '',\n      scope: null,\n      controller: null,\n      locals: {},\n      appendTo: null\n    }, options || {});\n\n    var templatePromise = options.templateUrl ?\n      this.load(options.templateUrl) :\n      $q.when(options.template);\n\n    return templatePromise.then(function(template) {\n      var controller;\n      var scope = options.scope || $rootScope.$new();\n\n      //Incase template doesn't have just one root element, do this\n      var element = jqLite('<div>').html(template).contents();\n\n      if (options.controller) {\n        controller = $controller(\n          options.controller,\n          extend(options.locals, {\n            $scope: scope\n          })\n        );\n        element.children().data('$ngControllerController', controller);\n      }\n      if (options.appendTo) {\n        jqLite(options.appendTo).append(element);\n      }\n\n      $compile(element)(scope);\n\n      return {\n        element: element,\n        scope: scope\n      };\n    });\n  }\n\n}]);\n\n/**\n * @private\n * TODO document\n */\nIonicModule\n.run([\n  '$rootScope',\n  '$state',\n  '$location',\n  '$document',\n  '$animate',\n  '$ionicPlatform',\n  '$ionicViewService',\nfunction($rootScope, $state, $location, $document, $animate, $ionicPlatform, $ionicViewService) {\n\n  // init the variables that keep track of the view history\n  $rootScope.$viewHistory = {\n    histories: { root: { historyId: 'root', parentHistoryId: null, stack: [], cursor: -1 } },\n    views: {},\n    backView: null,\n    forwardView: null,\n    currentView: null,\n    disabledRegistrableTagNames: []\n  };\n\n  // set that these directives should not animate when transitioning\n  // to it. Instead, the children <tab> directives would animate\n  if ($ionicViewService.disableRegisterByTagName) {\n    $ionicViewService.disableRegisterByTagName('ion-tabs');\n    $ionicViewService.disableRegisterByTagName('ion-side-menus');\n  }\n\n  $rootScope.$on('viewState.changeHistory', function(e, data) {\n    if(!data) return;\n\n    var hist = (data.historyId ? $rootScope.$viewHistory.histories[ data.historyId ] : null );\n    if(hist && hist.cursor > -1 && hist.cursor < hist.stack.length) {\n      // the history they're going to already exists\n      // go to it's last view in its stack\n      var view = hist.stack[ hist.cursor ];\n      return view.go(data);\n    }\n\n    // this history does not have a URL, but it does have a uiSref\n    // figure out its URL from the uiSref\n    if(!data.url && data.uiSref) {\n      data.url = $state.href(data.uiSref);\n    }\n\n    if(data.url) {\n      // don't let it start with a #, messes with $location.url()\n      if(data.url.indexOf('#') === 0) {\n        data.url = data.url.replace('#', '');\n      }\n      if(data.url !== $location.url()) {\n        // we've got a good URL, ready GO!\n        $location.url(data.url);\n      }\n    }\n  });\n\n  // Set the document title when a new view is shown\n  $rootScope.$on('viewState.viewEnter', function(e, data) {\n    if(data && data.title) {\n      $document[0].title = data.title;\n    }\n  });\n\n  // Triggered when devices with a hardware back button (Android) is clicked by the user\n  // This is a Cordova/Phonegap platform specifc method\n  function onHardwareBackButton(e) {\n    if($rootScope.$viewHistory.backView) {\n      // there is a back view, go to it\n      $rootScope.$viewHistory.backView.go();\n    } else {\n      // there is no back view, so close the app instead\n      ionic.Platform.exitApp();\n    }\n    e.preventDefault();\n    return false;\n  }\n  $ionicPlatform.registerBackButtonAction(\n    onHardwareBackButton,\n    PLATFORM_BACK_BUTTON_PRIORITY_VIEW\n  );\n\n}])\n\n.factory('$ionicViewService', [\n  '$rootScope',\n  '$state',\n  '$location',\n  '$window',\n  '$injector',\n  '$animate',\n  '$ionicNavViewConfig',\nfunction($rootScope, $state, $location, $window, $injector, $animate, $ionicNavViewConfig) {\n\n  var View = function(){};\n  View.prototype.initialize = function(data) {\n    if(data) {\n      for(var name in data) this[name] = data[name];\n      return this;\n    }\n    return null;\n  };\n  View.prototype.go = function() {\n\n    if(this.stateName) {\n      return $state.go(this.stateName, this.stateParams);\n    }\n\n    if(this.url && this.url !== $location.url()) {\n\n      if($rootScope.$viewHistory.backView === this) {\n        return $window.history.go(-1);\n      } else if($rootScope.$viewHistory.forwardView === this) {\n        return $window.history.go(1);\n      }\n\n      $location.url(this.url);\n      return;\n    }\n\n    return null;\n  };\n  View.prototype.destroy = function() {\n    if(this.scope) {\n      this.scope.$destroy && this.scope.$destroy();\n      this.scope = null;\n    }\n  };\n\n  function createViewId(stateId) {\n    return ionic.Utils.nextUid();\n  }\n\n  return {\n\n    register: function(containerScope, element) {\n\n      var viewHistory = $rootScope.$viewHistory,\n          currentStateId = this.getCurrentStateId(),\n          hist = this._getHistory(containerScope),\n          currentView = viewHistory.currentView,\n          backView = viewHistory.backView,\n          forwardView = viewHistory.forwardView,\n          nextViewOptions = this.nextViewOptions(),\n          rsp = {\n            viewId: null,\n            navAction: null,\n            navDirection: null,\n            historyId: hist.historyId\n          };\n\n      if(element && !this.isTagNameRegistrable(element)) {\n        // first check to see if this element can even be registered as a view.\n        // Certain tags are only containers for views, but are not views themselves.\n        // For example, the <ion-tabs> directive contains a <ion-tab> and the <ion-tab> is the\n        // view, but the <ion-tabs> directive itself should not be registered as a view.\n        rsp.navAction = 'disabledByTagName';\n        return rsp;\n      }\n\n      if(currentView &&\n         currentView.stateId === currentStateId &&\n         currentView.historyId === hist.historyId) {\n        // do nothing if its the same stateId in the same history\n        rsp.navAction = 'noChange';\n        return rsp;\n      }\n\n      if(viewHistory.forcedNav) {\n        // we've previously set exactly what to do\n        ionic.Utils.extend(rsp, viewHistory.forcedNav);\n        $rootScope.$viewHistory.forcedNav = null;\n\n      } else if(backView && backView.stateId === currentStateId) {\n        // they went back one, set the old current view as a forward view\n        rsp.viewId = backView.viewId;\n        rsp.navAction = 'moveBack';\n        rsp.viewId = backView.viewId;\n        if(backView.historyId === currentView.historyId) {\n          // went back in the same history\n          rsp.navDirection = 'back';\n        }\n\n      } else if(forwardView && forwardView.stateId === currentStateId) {\n        // they went to the forward one, set the forward view to no longer a forward view\n        rsp.viewId = forwardView.viewId;\n        rsp.navAction = 'moveForward';\n        if(forwardView.historyId === currentView.historyId) {\n          rsp.navDirection = 'forward';\n        }\n\n        var parentHistory = this._getParentHistoryObj(containerScope);\n        if(forwardView.historyId && parentHistory.scope) {\n          // if a history has already been created by the forward view then make sure it stays the same\n          parentHistory.scope.$historyId = forwardView.historyId;\n          rsp.historyId = forwardView.historyId;\n        }\n\n      } else if(currentView && currentView.historyId !== hist.historyId &&\n                hist.cursor > -1 && hist.stack.length > 0 && hist.cursor < hist.stack.length &&\n                hist.stack[hist.cursor].stateId === currentStateId) {\n        // they just changed to a different history and the history already has views in it\n        rsp.viewId = hist.stack[hist.cursor].viewId;\n        rsp.navAction = 'moveBack';\n\n      } else {\n\n        // set a new unique viewId\n        rsp.viewId = createViewId(currentStateId);\n\n        if(currentView) {\n          // set the forward view if there is a current view (ie: if its not the first view)\n          currentView.forwardViewId = rsp.viewId;\n\n          // its only moving forward if its in the same history\n          if(hist.historyId === currentView.historyId) {\n            rsp.navDirection = 'forward';\n          }\n          rsp.navAction = 'newView';\n\n          // check if there is a new forward view\n          if(forwardView && currentView.stateId !== forwardView.stateId) {\n            // they navigated to a new view but the stack already has a forward view\n            // since its a new view remove any forwards that existed\n            var forwardsHistory = this._getHistoryById(forwardView.historyId);\n            if(forwardsHistory) {\n              // the forward has a history\n              for(var x=forwardsHistory.stack.length - 1; x >= forwardView.index; x--) {\n                // starting from the end destroy all forwards in this history from this point\n                forwardsHistory.stack[x].destroy();\n                forwardsHistory.stack.splice(x);\n              }\n            }\n          }\n\n        } else {\n          // there's no current view, so this must be the initial view\n          rsp.navAction = 'initialView';\n        }\n\n        // add the new view\n        viewHistory.views[rsp.viewId] = this.createView({\n          viewId: rsp.viewId,\n          index: hist.stack.length,\n          historyId: hist.historyId,\n          backViewId: (currentView && currentView.viewId ? currentView.viewId : null),\n          forwardViewId: null,\n          stateId: currentStateId,\n          stateName: this.getCurrentStateName(),\n          stateParams: this.getCurrentStateParams(),\n          url: $location.url(),\n        });\n\n        if (rsp.navAction == 'moveBack') {\n          //moveBack(from, to);\n          $rootScope.$emit('$viewHistory.viewBack', currentView.viewId, rsp.viewId);\n        }\n\n        // add the new view to this history's stack\n        hist.stack.push(viewHistory.views[rsp.viewId]);\n      }\n\n      if(nextViewOptions) {\n        if(nextViewOptions.disableAnimate) rsp.navDirection = null;\n        if(nextViewOptions.disableBack) viewHistory.views[rsp.viewId].backViewId = null;\n        this.nextViewOptions(null);\n      }\n\n      this.setNavViews(rsp.viewId);\n\n      hist.cursor = viewHistory.currentView.index;\n\n      return rsp;\n    },\n\n    setNavViews: function(viewId) {\n      var viewHistory = $rootScope.$viewHistory;\n\n      viewHistory.currentView = this._getViewById(viewId);\n      viewHistory.backView = this._getBackView(viewHistory.currentView);\n      viewHistory.forwardView = this._getForwardView(viewHistory.currentView);\n\n      $rootScope.$broadcast('$viewHistory.historyChange', {\n        showBack: (viewHistory.backView && viewHistory.backView.historyId === viewHistory.currentView.historyId)\n      });\n    },\n\n    registerHistory: function(scope) {\n      scope.$historyId = ionic.Utils.nextUid();\n    },\n\n    createView: function(data) {\n      var newView = new View();\n      return newView.initialize(data);\n    },\n\n    getCurrentView: function() {\n      return $rootScope.$viewHistory.currentView;\n    },\n\n    getBackView: function() {\n      return $rootScope.$viewHistory.backView;\n    },\n\n    getForwardView: function() {\n      return $rootScope.$viewHistory.forwardView;\n    },\n\n    getNavDirection: function() {\n      return $rootScope.$viewHistory.navDirection;\n    },\n\n    getCurrentStateName: function() {\n      return ($state && $state.current ? $state.current.name : null);\n    },\n\n    isCurrentStateNavView: function(navView) {\n      return ($state &&\n              $state.current &&\n              $state.current.views &&\n              $state.current.views[navView] ? true : false);\n    },\n\n    getCurrentStateParams: function() {\n      var rtn;\n      if ($state && $state.params) {\n        for(var key in $state.params) {\n          if($state.params.hasOwnProperty(key)) {\n            rtn = rtn || {};\n            rtn[key] = $state.params[key];\n          }\n        }\n      }\n      return rtn;\n    },\n\n    getCurrentStateId: function() {\n      var id;\n      if($state && $state.current && $state.current.name) {\n        id = $state.current.name;\n        if($state.params) {\n          for(var key in $state.params) {\n            if($state.params.hasOwnProperty(key) && $state.params[key]) {\n              id += \"_\" + key + \"=\" + $state.params[key];\n            }\n          }\n        }\n        return id;\n      }\n      // if something goes wrong make sure its got a unique stateId\n      return ionic.Utils.nextUid();\n    },\n\n    goToHistoryRoot: function(historyId) {\n      if(historyId) {\n        var hist = $rootScope.$viewHistory.histories[ historyId ];\n        if(hist && hist.stack.length) {\n          if($rootScope.$viewHistory.currentView && $rootScope.$viewHistory.currentView.viewId === hist.stack[0].viewId) {\n            return;\n          }\n          $rootScope.$viewHistory.forcedNav = {\n            viewId: hist.stack[0].viewId,\n            navAction: 'moveBack',\n            navDirection: 'back'\n          };\n          hist.stack[0].go();\n        }\n      }\n    },\n\n    _getViewById: function(viewId) {\n      return (viewId ? $rootScope.$viewHistory.views[ viewId ] : null );\n    },\n\n    _getBackView: function(view) {\n      return (view ? this._getViewById(view.backViewId) : null );\n    },\n\n    _getForwardView: function(view) {\n      return (view ? this._getViewById(view.forwardViewId) : null );\n    },\n\n    _getHistoryById: function(historyId) {\n      return (historyId ? $rootScope.$viewHistory.histories[ historyId ] : null );\n    },\n\n    _getHistory: function(scope) {\n      var histObj = this._getParentHistoryObj(scope);\n\n      if( !$rootScope.$viewHistory.histories[ histObj.historyId ] ) {\n        // this history object exists in parent scope, but doesn't\n        // exist in the history data yet\n        $rootScope.$viewHistory.histories[ histObj.historyId ] = {\n          historyId: histObj.historyId,\n          parentHistoryId: this._getParentHistoryObj(histObj.scope.$parent).historyId,\n          stack: [],\n          cursor: -1\n        };\n      }\n\n      return $rootScope.$viewHistory.histories[ histObj.historyId ];\n    },\n\n    _getParentHistoryObj: function(scope) {\n      var parentScope = scope;\n      while(parentScope) {\n        if(parentScope.hasOwnProperty('$historyId')) {\n          // this parent scope has a historyId\n          return { historyId: parentScope.$historyId, scope: parentScope };\n        }\n        // nothing found keep climbing up\n        parentScope = parentScope.$parent;\n      }\n      // no history for for the parent, use the root\n      return { historyId: 'root', scope: $rootScope };\n    },\n\n    nextViewOptions: function(opts) {\n      if(arguments.length) {\n        this._nextOpts = opts;\n      } else {\n        return this._nextOpts;\n      }\n    },\n\n    getRenderer: function(navViewElement, navViewAttrs, navViewScope) {\n      var service = this;\n      var registerData;\n      var doAnimation;\n\n      // climb up the DOM and see which animation classname to use, if any\n      var animationClass = getParentAnimationClass(navViewElement[0]);\n\n      function getParentAnimationClass(el) {\n        var className = '';\n        while(!className && el) {\n          className = el.getAttribute('animation');\n          el = el.parentElement;\n        }\n\n        // If they don't have an animation set explicitly, use the value in the config\n        if(!className) {\n          return $ionicNavViewConfig.transition;\n        }\n\n        return className;\n      }\n\n      function setAnimationClass() {\n        // add the animation CSS class we're gonna use to transition between views\n        if (animationClass) {\n          navViewElement[0].classList.add(animationClass);\n        }\n\n        if(registerData.navDirection === 'back') {\n          // animate like we're moving backward\n          navViewElement[0].classList.add('reverse');\n        } else {\n          // defaults to animate forward\n          // make sure the reverse class isn't already added\n          navViewElement[0].classList.remove('reverse');\n        }\n      }\n\n      return function(shouldAnimate) {\n\n        return {\n\n          enter: function(element) {\n\n            if(doAnimation && shouldAnimate) {\n              // enter with an animation\n              setAnimationClass();\n\n              element.addClass('ng-enter');\n              document.body.classList.add('disable-pointer-events');\n\n              $animate.enter(element, navViewElement, null, function() {\n                document.body.classList.remove('disable-pointer-events');\n                if (animationClass) {\n                  navViewElement[0].classList.remove(animationClass);\n                }\n              });\n              return;\n            } else if(!doAnimation) {\n              document.body.classList.remove('disable-pointer-events');\n            }\n\n            // no animation\n            navViewElement.append(element);\n          },\n\n          leave: function() {\n            var element = navViewElement.contents();\n\n            if(doAnimation && shouldAnimate) {\n              // leave with an animation\n              setAnimationClass();\n\n              $animate.leave(element, function() {\n                element.remove();\n              });\n              return;\n            }\n\n            // no animation\n            element.remove();\n          },\n\n          register: function(element) {\n            // register a new view\n            registerData = service.register(navViewScope, element);\n            doAnimation = (animationClass !== null && registerData.navDirection !== null);\n            return registerData;\n          }\n\n        };\n      };\n    },\n\n    disableRegisterByTagName: function(tagName) {\n      // not every element should animate betwee transitions\n      // For example, the <ion-tabs> directive should not animate when it enters,\n      // but instead the <ion-tabs> directve would just show, and its children\n      // <ion-tab> directives would do the animating, but <ion-tabs> itself is not a view\n      $rootScope.$viewHistory.disabledRegistrableTagNames.push(tagName.toUpperCase());\n    },\n\n    isTagNameRegistrable: function(element) {\n      // check if this element has a tagName (at its root, not recursively)\n      // that shouldn't be animated, like <ion-tabs> or <ion-side-menu>\n      var x, y, disabledTags = $rootScope.$viewHistory.disabledRegistrableTagNames;\n      for(x=0; x<element.length; x++) {\n        if(element[x].nodeType !== 1) continue;\n        for(y=0; y<disabledTags.length; y++) {\n          if(element[x].tagName === disabledTags[y]) {\n            return false;\n          }\n        }\n      }\n      return true;\n    },\n\n    clearHistory: function() {\n      var\n      histories = $rootScope.$viewHistory.histories,\n      currentView = $rootScope.$viewHistory.currentView;\n\n      if(histories) {\n        for(var historyId in histories) {\n\n          if(histories[historyId].stack) {\n            histories[historyId].stack = [];\n            histories[historyId].cursor = -1;\n          }\n\n          if(currentView && currentView.historyId === historyId) {\n            currentView.backViewId = null;\n            currentView.forwardViewId = null;\n            histories[historyId].stack.push(currentView);\n          } else if(histories[historyId].destroy) {\n            histories[historyId].destroy();\n          }\n\n        }\n      }\n\n      for(var viewId in $rootScope.$viewHistory.views) {\n        if(viewId !== currentView.viewId) {\n          delete $rootScope.$viewHistory.views[viewId];\n        }\n      }\n\n      if(currentView) {\n        this.setNavViews(currentView.viewId);\n      }\n    }\n\n  };\n\n}]);\n\n/**\n * @private\n */\nIonicModule.config([\n  '$provide',\nfunction($provide) {\n  function $LocationDecorator($location, $timeout) {\n\n    $location.__hash = $location.hash;\n    //Fix: when window.location.hash is set, the scrollable area\n    //found nearest to body's scrollTop is set to scroll to an element\n    //with that ID.\n    $location.hash = function(value) {\n      if (angular.isDefined(value)) {\n        $timeout(function() {\n          var scroll = document.querySelector('.scroll-content');\n          if (scroll)\n            scroll.scrollTop = 0;\n        }, 0, false);\n      }\n      return $location.__hash(value);\n    };\n\n    return $location;\n  }\n\n  $provide.decorator('$location', ['$delegate', '$timeout', $LocationDecorator]);\n}]);\n\n\n/**\n * @ngdoc service\n * @name $ionicListDelegate\n * @module ionic\n *\n * @description\n * Delegate for controlling the {@link ionic.directive:ionList} directive.\n *\n * Methods called directly on the $ionicListDelegate service will control all lists.\n * Use the {@link ionic.service:$ionicListDelegate#$getByHandle $getByHandle}\n * method to control specific ionList instances.\n *\n * @usage\n *\n * ````html\n * <ion-content ng-controller=\"MyCtrl\">\n *   <button class=\"button\" ng-click=\"showDeleteButtons()\"></button>\n *   <ion-list>\n *     <ion-item ng-repeat=\"i in items\">>\n *       {% raw %}Hello, {{i}}!{% endraw %}\n *       <ion-delete-button class=\"ion-minus-circled\"></ion-delete-button>\n *     </ion-item>\n *   </ion-list>\n * </ion-content>\n * ```\n * ```js\n * function MyCtrl($scope, $ionicListDelegate) {\n *   $scope.showDeleteButtons = function() {\n *     $ionicListDelegate.showDelete(true);\n *   };\n * }\n * ```\n */\nIonicModule\n.service('$ionicListDelegate', delegateService([\n  /**\n   * @ngdoc method\n   * @name $ionicListDelegate#showReorder\n   * @param {boolean=} showReorder Set whether or not this list is showing its reorder buttons.\n   * @returns {boolean} Whether the reorder buttons are shown.\n   */\n  'showReorder',\n  /**\n   * @ngdoc method\n   * @name $ionicListDelegate#showDelete\n   * @param {boolean=} showReorder Set whether or not this list is showing its delete buttons.\n   * @returns {boolean} Whether the delete buttons are shown.\n   */\n  'showDelete',\n  /**\n   * @ngdoc method\n   * @name $ionicListDelegate#canSwipeItems\n   * @param {boolean=} showReorder Set whether or not this list is able to swipe to show\n   * option buttons.\n   * @returns {boolean} Whether the list is able to swipe to show option buttons.\n   */\n  'canSwipeItems',\n  /**\n   * @ngdoc method\n   * @name $ionicListDelegate#closeOptionButtons\n   * @description Closes any option buttons on the list that are swiped open.\n   */\n  'closeOptionButtons',\n  /**\n   * @ngdoc method\n   * @name $ionicListDelegate#$getByHandle\n   * @param {string} handle\n   * @returns `delegateInstance` A delegate instance that controls only the\n   * {@link ionic.directive:ionList} directives with `delegate-handle` matching\n   * the given handle.\n   *\n   * Example: `$ionicListDelegate.$getByHandle('my-handle').showReorder(true);`\n   */\n]))\n\n.controller('$ionicList', [\n  '$scope',\n  '$attrs',\n  '$parse',\n  '$ionicListDelegate',\nfunction($scope, $attrs, $parse, $ionicListDelegate) {\n\n  var isSwipeable = true;\n  var isReorderShown = false;\n  var isDeleteShown = false;\n\n  var deregisterInstance = $ionicListDelegate._registerInstance(this, $attrs.delegateHandle);\n  $scope.$on('$destroy', deregisterInstance);\n\n  this.showReorder = function(show) {\n    if (arguments.length) {\n      isReorderShown = !!show;\n    }\n    return isReorderShown;\n  };\n\n  this.showDelete = function(show) {\n    if (arguments.length) {\n      isDeleteShown = !!show;\n    }\n    return isDeleteShown;\n  };\n\n  this.canSwipeItems = function(can) {\n    if (arguments.length) {\n      isSwipeable = !!can;\n    }\n    return isSwipeable;\n  };\n\n  this.closeOptionButtons = function() {\n    this.listView && this.listView.clearDragEffects();\n  };\n}]);\n\nIonicModule\n.controller('$ionicNavBar', [\n  '$scope',\n  '$element',\n  '$attrs',\n  '$ionicViewService',\n  '$animate',\n  '$compile',\n  '$ionicNavBarDelegate',\nfunction($scope, $element, $attrs, $ionicViewService, $animate, $compile, $ionicNavBarDelegate) {\n  //Let the parent know about our controller too so that children of\n  //sibling content elements can know about us\n  $element.parent().data('$ionNavBarController', this);\n\n  var deregisterInstance = $ionicNavBarDelegate._registerInstance(this, $attrs.delegateHandle);\n\n  $scope.$on('$destroy', deregisterInstance);\n\n  var self = this;\n\n  this.leftButtonsElement = jqLite(\n    $element[0].querySelector('.buttons.left-buttons')\n  );\n  this.rightButtonsElement = jqLite(\n    $element[0].querySelector('.buttons.right-buttons')\n  );\n\n  this.back = function() {\n    var backView = $ionicViewService.getBackView();\n    backView && backView.go();\n    return false;\n  };\n\n  this.align = function(direction) {\n    this._headerBarView.align(direction);\n  };\n\n  this.showBackButton = function(show) {\n    if (arguments.length) {\n      $scope.backButtonShown = !!show;\n    }\n    return !!($scope.hasBackButton && $scope.backButtonShown);\n  };\n\n  this.showBar = function(show) {\n    if (arguments.length) {\n      $scope.isInvisible = !show;\n      $scope.$parent.$hasHeader = !!show;\n    }\n    return !$scope.isInvisible;\n  };\n\n  this.setTitle = function(title) {\n    if ($scope.title === title) {\n      return;\n    }\n    $scope.oldTitle = $scope.title;\n    $scope.title = title || '';\n  };\n\n  this.changeTitle = function(title, direction) {\n    if ($scope.title === title) {\n      return false;\n    }\n    this.setTitle(title);\n    $scope.isReverse = direction == 'back';\n    $scope.shouldAnimate = !!direction;\n\n    if (!$scope.shouldAnimate) {\n      //We're done!\n      this._headerBarView.align();\n    } else {\n      this._animateTitles();\n    }\n    return true;\n  };\n\n  this.getTitle = function() {\n    return $scope.title || '';\n  };\n\n  this.getPreviousTitle = function() {\n    return $scope.oldTitle || '';\n  };\n\n  /**\n   * Exposed for testing\n   */\n  this._animateTitles = function() {\n    var oldTitleEl, newTitleEl, currentTitles;\n\n    //If we have any title right now\n    //(or more than one, they could be transitioning on switch),\n    //replace the first one with an oldTitle element\n    currentTitles = $element[0].querySelectorAll('.title');\n    if (currentTitles.length) {\n      oldTitleEl = $compile('<h1 class=\"title\" ng-bind-html=\"oldTitle\"></h1>')($scope);\n      jqLite(currentTitles[0]).replaceWith(oldTitleEl);\n    }\n    //Compile new title\n    newTitleEl = $compile('<h1 class=\"title invisible\" ng-bind-html=\"title\"></h1>')($scope);\n\n    //Animate in on next frame\n    ionic.requestAnimationFrame(function() {\n\n      oldTitleEl && $animate.leave(jqLite(oldTitleEl));\n\n      var insert = oldTitleEl && jqLite(oldTitleEl) || null;\n      $animate.enter(newTitleEl, $element, insert, function() {\n        self._headerBarView.align();\n      });\n\n      //Cleanup any old titles leftover (besides the one we already did replaceWith on)\n      forEach(currentTitles, function(el) {\n        if (el && el.parentNode) {\n          //Use .remove() to cleanup things like .data()\n          jqLite(el).remove();\n        }\n      });\n\n      //$apply so bindings fire\n      $scope.$digest();\n\n      //Stop flicker of new title on ios7\n      ionic.requestAnimationFrame(function() {\n        newTitleEl[0].classList.remove('invisible');\n      });\n    });\n  };\n}]);\n\n\n/**\n * @private\n */\nIonicModule\n\n.factory('$$scrollValueCache', function() {\n  return {};\n})\n\n.controller('$ionicScroll', [\n  '$scope',\n  'scrollViewOptions',\n  '$timeout',\n  '$window',\n  '$$scrollValueCache',\n  '$location',\n  '$rootScope',\n  '$document',\n  '$ionicScrollDelegate',\nfunction($scope, scrollViewOptions, $timeout, $window, $$scrollValueCache, $location, $rootScope, $document, $ionicScrollDelegate) {\n\n  var self = this;\n\n  this._scrollViewOptions = scrollViewOptions; //for testing\n\n  var element = this.element = scrollViewOptions.el;\n  var $element = this.$element = jqLite(element);\n  var scrollView = this.scrollView = new ionic.views.Scroll(scrollViewOptions);\n\n  //Attach self to element as a controller so other directives can require this controller\n  //through `require: '$ionicScroll'\n  //Also attach to parent so that sibling elements can require this\n  ($element.parent().length ? $element.parent() : $element)\n    .data('$$ionicScrollController', this);\n\n  var deregisterInstance = $ionicScrollDelegate._registerInstance(\n    this, scrollViewOptions.delegateHandle\n  );\n\n  if (!angular.isDefined(scrollViewOptions.bouncing)) {\n    ionic.Platform.ready(function() {\n      scrollView.options.bouncing = true;\n\n      if(ionic.Platform.isAndroid()) {\n        // No bouncing by default on Android\n        scrollView.options.bouncing = false;\n        // Faster scroll decel\n        scrollView.options.deceleration = 0.95;\n      } else {\n      }\n    });\n  }\n\n  var resize = angular.bind(scrollView, scrollView.resize);\n  ionic.on('resize', resize, $window);\n\n  // set by rootScope listener if needed\n  var backListenDone = angular.noop;\n\n  $scope.$on('$destroy', function() {\n    deregisterInstance();\n    scrollView.__removeEventHandlers();\n    ionic.off('resize', resize, $window);\n    $window.removeEventListener('resize', resize);\n    backListenDone();\n    if (self._rememberScrollId) {\n      $$scrollValueCache[self._rememberScrollId] = scrollView.getValues();\n    }\n  });\n\n  $element.on('scroll', function(e) {\n    var detail = (e.originalEvent || e).detail || {};\n    $scope.$onScroll && $scope.$onScroll({\n      event: e,\n      scrollTop: detail.scrollTop || 0,\n      scrollLeft: detail.scrollLeft || 0\n    });\n  });\n\n  $scope.$on('$viewContentLoaded', function(e, historyData) {\n    //only the top-most scroll area under a view should remember that view's\n    //scroll position\n    if (e.defaultPrevented) { return; }\n    e.preventDefault();\n\n    var viewId = historyData && historyData.viewId || $scope.$historyId;\n    if (viewId) {\n      $timeout(function() {\n        self.rememberScrollPosition(viewId);\n        self.scrollToRememberedPosition();\n\n        backListenDone = $rootScope.$on('$viewHistory.viewBack', function(e, fromViewId, toViewId) {\n          //When going back from this view, forget its saved scroll position\n          if (viewId === fromViewId) {\n            self.forgetScrollPosition();\n          }\n        });\n      }, 0, false);\n    }\n  });\n\n  $timeout(function() {\n    scrollView.run();\n  });\n\n  this._rememberScrollId = null;\n\n  this.getScrollView = function() {\n    return this.scrollView;\n  };\n\n  this.getScrollPosition = function() {\n    return this.scrollView.getValues();\n  };\n\n  this.resize = function() {\n    return $timeout(resize);\n  };\n\n  this.scrollTop = function(shouldAnimate) {\n    this.resize().then(function() {\n      scrollView.scrollTo(0, 0, !!shouldAnimate);\n    });\n  };\n\n  this.scrollBottom = function(shouldAnimate) {\n    this.resize().then(function() {\n      var max = scrollView.getScrollMax();\n      scrollView.scrollTo(max.left, max.top, !!shouldAnimate);\n    });\n  };\n\n  this.scrollTo = function(left, top, shouldAnimate) {\n    this.resize().then(function() {\n      scrollView.scrollTo(left, top, !!shouldAnimate);\n    });\n  };\n\n  this.scrollBy = function(left, top, shouldAnimate) {\n    this.resize().then(function() {\n      scrollView.scrollBy(left, top, !!shouldAnimate);\n    });\n  };\n\n  this.anchorScroll = function(shouldAnimate) {\n    this.resize().then(function() {\n      var hash = $location.hash();\n      var elm = hash && $document[0].getElementById(hash);\n      if (!(hash && elm)) {\n        scrollView.scrollTo(0,0, !!shouldAnimate);\n        return;\n      }\n      var curElm = elm;\n      var scrollLeft = 0, scrollTop = 0, levelsClimbed = 0;\n      do {\n        if(curElm !== null)scrollLeft += curElm.offsetLeft;\n        if(curElm !== null)scrollTop += curElm.offsetTop;\n        curElm = curElm.offsetParent;\n        levelsClimbed++;\n      } while (curElm.attributes != self.element.attributes && curElm.offsetParent);\n      scrollView.scrollTo(scrollLeft, scrollTop, !!shouldAnimate);\n    });\n  };\n\n  this.rememberScrollPosition = function(id) {\n    if (!id) {\n      throw new Error(\"Must supply an id to remember the scroll by!\");\n    }\n    this._rememberScrollId = id;\n  };\n  this.forgetScrollPosition = function() {\n    delete $$scrollValueCache[this._rememberScrollId];\n    this._rememberScrollId = null;\n  };\n  this.scrollToRememberedPosition = function(shouldAnimate) {\n    var values = $$scrollValueCache[this._rememberScrollId];\n    if (values) {\n      this.resize().then(function() {\n        scrollView.scrollTo(+values.left, +values.top, shouldAnimate);\n      });\n    }\n  };\n\n  /**\n   * @private\n   */\n  this._setRefresher = function(refresherScope, refresherElement) {\n    var refresher = this.refresher = refresherElement;\n    var refresherHeight = self.refresher.clientHeight || 0;\n    scrollView.activatePullToRefresh(refresherHeight, function() {\n      refresher.classList.add('active');\n      refresherScope.$onPulling();\n    }, function() {\n      refresher.classList.remove('refreshing');\n      refresher.classList.remove('active');\n    }, function() {\n      refresher.classList.add('refreshing');\n      refresherScope.$onRefresh();\n    });\n  };\n}]);\n\n\nIonicModule\n.controller('$ionicSideMenus', [\n  '$scope',\n  '$attrs',\n  '$ionicSideMenuDelegate',\n  '$ionicPlatform',\nfunction($scope, $attrs, $ionicSideMenuDelegate, $ionicPlatform) {\n  var self = this;\n  extend(this, ionic.controllers.SideMenuController.prototype);\n\n  this.$scope = $scope;\n\n  ionic.controllers.SideMenuController.call(this, {\n    left: { width: 275 },\n    right: { width: 275 }\n  });\n\n  this.canDragContent = function(canDrag) {\n    if (arguments.length) {\n      $scope.dragContent = !!canDrag;\n    }\n    return $scope.dragContent;\n  };\n\n  this.edgeThreshold = 25;\n  this.edgeThresholdEnabled = false;\n  this.edgeDragThreshold = function(value) {\n    if (arguments.length) {\n      if (angular.isNumber(value) && value > 0) {\n        this.edgeThreshold = value;\n        this.edgeThresholdEnabled = true;\n      } else {\n        this.edgeThresholdEnabled = !!value;\n      }\n    }\n    return this.edgeThresholdEnabled;\n  };\n\n  this.isDraggableTarget = function(e) {\n    //Only restrict edge when sidemenu is closed and restriction is enabled\n    var shouldOnlyAllowEdgeDrag = self.edgeThresholdEnabled && !self.isOpen();\n    var startX = e.gesture.startEvent && e.gesture.startEvent.center &&\n      e.gesture.startEvent.center.pageX;\n\n    var dragIsWithinBounds = !shouldOnlyAllowEdgeDrag ||\n      startX <= self.edgeThreshold ||\n      startX >= self.content.offsetWidth - self.edgeThreshold;\n\n    return ($scope.dragContent || self.isOpen()) &&\n           dragIsWithinBounds &&\n           !e.gesture.srcEvent.defaultPrevented &&\n           !e.target.tagName.match(/input|textarea|select|object|embed/i) &&\n           !e.target.isContentEditable &&\n           !(e.target.dataset ? e.target.dataset.preventScroll : e.target.getAttribute('data-prevent-default') == 'true');\n  };\n\n  $scope.sideMenuContentTranslateX = 0;\n\n\n  var deregisterBackButtonAction = angular.noop;\n  var closeSideMenu = angular.bind(this, this.close);\n  $scope.$watch(function() {\n    return self.getOpenAmount() !== 0;\n  }, function(isOpen) {\n    deregisterBackButtonAction();\n    if (isOpen) {\n      deregisterBackButtonAction = $ionicPlatform.registerBackButtonAction(\n        closeSideMenu,\n        PLATFORM_BACK_BUTTON_PRIORITY_SIDE_MENU\n      );\n    }\n  });\n\n  var deregisterInstance = $ionicSideMenuDelegate._registerInstance(\n    this, $attrs.delegateHandle\n  );\n  $scope.$on('$destroy', function() {\n    deregisterInstance();\n    deregisterBackButtonAction();\n  });\n}]);\n\nIonicModule\n.controller('$ionicTab', [\n  '$scope',\n  '$ionicViewService',\n  '$attrs',\n  '$location',\n  '$state',\nfunction($scope, $ionicViewService, $attrs, $location, $state) {\n  this.$scope = $scope;\n\n  //All of these exposed for testing\n  this.hrefMatchesState = function() {\n    return $attrs.href && $location.path().indexOf(\n      $attrs.href.replace(/^#/, '').replace(/\\/$/, '')\n    ) === 0;\n  };\n  this.srefMatchesState = function() {\n    return $attrs.uiSref && $state.includes( $attrs.uiSref.split('(')[0] );\n  };\n  this.navNameMatchesState = function() {\n    return this.navViewName && $ionicViewService.isCurrentStateNavView(this.navViewName);\n  };\n\n  this.tabMatchesState = function() {\n    return this.hrefMatchesState() || this.srefMatchesState() || this.navNameMatchesState();\n  };\n}]);\n\nIonicModule\n.controller('$ionicTabs', [\n  '$scope', \n  '$ionicViewService', \n  '$element', \nfunction($scope, $ionicViewService, $element) {\n  var _selectedTab = null;\n  var self = this;\n  self.tabs = [];\n\n  self.selectedIndex = function() {\n    return self.tabs.indexOf(_selectedTab);\n  };\n  self.selectedTab = function() {\n    return _selectedTab;\n  };\n\n  self.add = function(tab) {\n    $ionicViewService.registerHistory(tab);\n    self.tabs.push(tab);\n    if(self.tabs.length === 1) {\n      self.select(tab);\n    }\n  };\n\n  self.remove = function(tab) {\n    var tabIndex = self.tabs.indexOf(tab);\n    if (tabIndex === -1) {\n      return;\n    }\n    //Use a field like '$tabSelected' so developers won't accidentally set it in controllers etc\n    if (tab.$tabSelected) {\n      self.deselect(tab);\n      //Try to select a new tab if we're removing a tab\n      if (self.tabs.length === 1) {\n        //do nothing if there are no other tabs to select\n      } else {\n        //Select previous tab if it's the last tab, else select next tab\n        var newTabIndex = tabIndex === self.tabs.length - 1 ? tabIndex - 1 : tabIndex + 1;\n        self.select(self.tabs[newTabIndex]);\n      }\n    }\n    self.tabs.splice(tabIndex, 1);\n  };\n\n  self.deselect = function(tab) {\n    if (tab.$tabSelected) {\n      _selectedTab = null;\n      tab.$tabSelected = false;\n      (tab.onDeselect || angular.noop)();\n    }\n  };\n\n  self.select = function(tab, shouldEmitEvent) {\n    var tabIndex;\n    if (angular.isNumber(tab)) {\n      tabIndex = tab;\n      tab = self.tabs[tabIndex];\n    } else {\n      tabIndex = self.tabs.indexOf(tab);\n    }\n    if (!tab || tabIndex == -1) {\n      throw new Error('Cannot select tab \"' + tabIndex + '\"!');\n    }\n\n    if (_selectedTab && _selectedTab.$historyId == tab.$historyId) {\n      if (shouldEmitEvent) {\n        $ionicViewService.goToHistoryRoot(tab.$historyId);\n      }\n    } else {\n      forEach(self.tabs, function(tab) {\n        self.deselect(tab);\n      });\n\n      _selectedTab = tab;\n      //Use a funny name like $tabSelected so the developer doesn't overwrite the var in a child scope\n      tab.$tabSelected = true;\n      (tab.onSelect || angular.noop)();\n\n      if (shouldEmitEvent) {\n        var viewData = {\n          type: 'tab',\n          tabIndex: tabIndex,\n          historyId: tab.$historyId,\n          navViewName: tab.navViewName,\n          hasNavView: !!tab.navViewName,\n          title: tab.title,\n          //Skip the first character of href if it's #\n          url: tab.href,\n          uiSref: tab.uiSref\n        };\n        $scope.$emit('viewState.changeHistory', viewData);\n      }\n    }\n  };\n}]);\n\n\n/*\n * We don't document the ionActionSheet directive, we instead document\n * the $ionicActionSheet service\n */\nIonicModule\n.directive('ionActionSheet', ['$document', function($document) {\n  return {\n    restrict: 'E',\n    scope: true,\n    replace: true,\n    link: function($scope, $element){\n      var keyUp = function(e) {\n        if(e.which == 27) {\n          $scope.cancel();\n          $scope.$apply();\n        }\n      };\n\n      var backdropClick = function(e) {\n        if(e.target == $element[0]) {\n          $scope.cancel();\n          $scope.$apply();\n        }\n      };\n      $scope.$on('$destroy', function() {\n        $element.remove();\n        $document.unbind('keyup', keyUp);\n      });\n\n      $document.bind('keyup', keyUp);\n      $element.bind('click', backdropClick);\n    },\n    template: '<div class=\"action-sheet-backdrop\">' +\n                '<div class=\"action-sheet-wrapper\">' +\n                  '<div class=\"action-sheet\">' +\n                    '<div class=\"action-sheet-group\">' +\n                      '<div class=\"action-sheet-title\" ng-if=\"titleText\" ng-bind-html=\"titleText\"></div>' +\n                      '<button class=\"button\" ng-click=\"buttonClicked($index)\" ng-repeat=\"button in buttons\" ng-bind-html=\"button.text\"></button>' +\n                    '</div>' +\n                    '<div class=\"action-sheet-group\" ng-if=\"destructiveText\">' +\n                      '<button class=\"button destructive\" ng-click=\"destructiveButtonClicked()\" ng-bind-html=\"destructiveText\"></button>' +\n                    '</div>' +\n                    '<div class=\"action-sheet-group\" ng-if=\"cancelText\">' +\n                      '<button class=\"button\" ng-click=\"cancel()\" ng-bind-html=\"cancelText\"></button>' +\n                    '</div>' +\n                  '</div>' +\n                '</div>' +\n              '</div>'\n  };\n}]);\n\n\n/**\n * @ngdoc directive\n * @name ionCheckbox\n * @module ionic\n * @restrict E\n * @codepen hqcju\n * @description\n * The checkbox is no different than the HTML checkbox input, except it's styled differently.\n *\n * The checkbox behaves like any [AngularJS checkbox](http://docs.angularjs.org/api/ng/input/input[checkbox]).\n *\n * @usage\n * ```html\n * <ion-checkbox ng-model=\"isChecked\">Checkbox Label</ion-checkbox>\n * ```\n */\n\nIonicModule\n.directive('ionCheckbox', function() {\n  return {\n    restrict: 'E',\n    replace: true,\n    require: '?ngModel',\n    transclude: true,\n    template:\n      '<label class=\"item item-checkbox\">' +\n        '<div class=\"checkbox checkbox-input-hidden disable-pointer-events\">' +\n          '<input type=\"checkbox\">' +\n          '<i class=\"checkbox-icon\"></i>' +\n        '</div>' +\n        '<div class=\"item-content disable-pointer-events\" ng-transclude></div>' +\n      '</label>',\n    compile: function(element, attr) {\n      var input = element.find('input');\n      forEach({\n        'name': attr.name,\n        'ng-value': attr.ngValue,\n        'ng-model': attr.ngModel,\n        'ng-checked': attr.ngChecked,\n        'ng-disabled': attr.ngDisabled,\n        'ng-true-value': attr.ngTrueValue,\n        'ng-false-value': attr.ngFalseValue,\n        'ng-change': attr.ngChange\n      }, function(value, name) {\n        if (isDefined(value)) {\n          input.attr(name, value);\n        }\n      });\n    }\n\n  };\n});\n\n/**\n * @ngdoc directive\n * @module ionic\n * @name collectionRepeat\n * @restrict A\n * @codepen mFygh\n * @description\n * `collection-repeat` is a directive that allows you to render lists with\n * thousands of items in them, and experience little to no performance penalty.\n *\n * Demo:\n *\n * The directive renders onto the screen only the items that should be currently visible.\n * So if you have 1,000 items in your list but only ten fit on your screen,\n * collection-repeat will only render into the DOM the ten that are in the current\n * scroll position.\n *\n * Here are a few things to keep in mind while using collection-repeat:\n *\n * 1. The data supplied to collection-repeat must be an array.\n * 2. You must explicitly tell the directive what size your items will be in the DOM, using directive attributes.\n * Pixel amounts or percentages are allowed (see below).\n * 3. The elements rendered will be absolutely positioned: be sure to let your CSS work with\n * this (see below).\n * 4. Each collection-repeat list will take up all of its parent scrollView's space.\n * If you wish to have multiple lists on one page, put each list within its own\n * {@link ionic.directive:ionScroll ionScroll} container.\n * 5. You should not use the ng-show and ng-hide directives on your ion-content/ion-scroll elements that\n * have a collection-repeat inside.  ng-show and ng-hide apply the `display: none` css rule to the content's\n * style, causing the scrollView to read the width and height of the content as 0.  Resultingly,\n * collection-repeat will render elements that have just been un-hidden incorrectly.\n *\n *\n * @usage\n *\n * #### Basic Usage (single rows of items)\n *\n * Notice two things here: we use ng-style to set the height of the item to match\n * what the repeater thinks our item height is.  Additionally, we add a css rule\n * to make our item stretch to fit the full screen (since it will be absolutely\n * positioned).\n *\n * ```html\n * <ion-content ng-controller=\"ContentCtrl\">\n *   <div class=\"list\">\n *     <div class=\"item my-item\"\n *       collection-repeat=\"item in items\"\n *       collection-item-width=\"'100%'\"\n *       collection-item-height=\"getItemHeight(item, $index)\"\n *       ng-style=\"{height: getItemHeight(item, $index)}\">\n *       {% raw %}{{item}}{% endraw %}\n *     </div>\n *   </div>\n * </div>\n * ```\n * ```js\n * function ContentCtrl($scope) {\n *   $scope.items = [];\n *   for (var i = 0; i < 1000; i++) {\n *     $scope.items.push('Item ' + i);\n *   }\n *\n *   $scope.getItemHeight = function(item, index) {\n *     //Make evenly indexed items be 10px taller, for the sake of example\n *     return (index % 2) === 0 ? 50 : 60;\n *   };\n * }\n * ```\n * ```css\n * .my-item {\n *   left: 0;\n *   right: 0;\n * }\n * ```\n *\n * #### Grid Usage (three items per row)\n *\n * ```html\n * <ion-content>\n *   <div class=\"item item-avatar my-image-item\"\n *     collection-repeat=\"image in images\"\n *     collection-item-width=\"'33%'\"\n *     collection-item-height=\"'33%'\">\n *     <img ng-src=\"{{image.src}}\">\n *   </div>\n * </ion-content>\n * ```\n * Percentage of total visible list dimensions. This example shows a 3 by 3 matrix that fits on the screen (3 rows and 3 colums). Note that dimensions are used in the creation of the element and therefore a measurement of the item cannnot be used as an input dimension.\n * ```css\n * .my-image-item img {\n *   height: 33%;\n *   width: 33%;\n * }\n * ```\n *\n * @param {expression} collection-repeat The expression indicating how to enumerate a collection. These\n *   formats are currently supported:\n *\n *   * `variable in expression` – where variable is the user defined loop variable and `expression`\n *     is a scope expression giving the collection to enumerate.\n *\n *     For example: `album in artist.albums`.\n *\n *   * `variable in expression track by tracking_expression` – You can also provide an optional tracking function\n *     which can be used to associate the objects in the collection with the DOM elements. If no tracking function\n *     is specified the collection-repeat associates elements by identity in the collection. It is an error to have\n *     more than one tracking function to resolve to the same key. (This would mean that two distinct objects are\n *     mapped to the same DOM element, which is not possible.)  Filters should be applied to the expression,\n *     before specifying a tracking expression.\n *\n *     For example: `item in items` is equivalent to `item in items track by $id(item)'. This implies that the DOM elements\n *     will be associated by item identity in the array.\n *\n *     For example: `item in items track by $id(item)`. A built in `$id()` function can be used to assign a unique\n *     `$$hashKey` property to each item in the array. This property is then used as a key to associated DOM elements\n *     with the corresponding item in the array by identity. Moving the same object in array would move the DOM\n *     element in the same way in the DOM.\n *\n *     For example: `item in items track by item.id` is a typical pattern when the items come from the database. In this\n *     case the object identity does not matter. Two objects are considered equivalent as long as their `id`\n *     property is same.\n *\n *     For example: `item in items | filter:searchText track by item.id` is a pattern that might be used to apply a filter\n *     to items in conjunction with a tracking expression.\n *\n * @param {expression} collection-item-width The width of the repeated element.  Can be a number (in pixels) or a percentage.\n * @param {expression} collection-item-height The height of the repeated element.  Can be a number (in pixels), or a percentage.\n *\n */\nvar COLLECTION_REPEAT_SCROLLVIEW_XY_ERROR = \"Cannot create a collection-repeat within a scrollView that is scrollable on both x and y axis.  Choose either x direction or y direction.\";\nvar COLLECTION_REPEAT_ATTR_HEIGHT_ERROR = \"collection-repeat expected attribute collection-item-height to be a an expression that returns a number (in pixels) or percentage.\";\nvar COLLECTION_REPEAT_ATTR_WIDTH_ERROR = \"collection-repeat expected attribute collection-item-width to be a an expression that returns a number (in pixels) or percentage.\";\nvar COLLECTION_REPEAT_ATTR_REPEAT_ERROR = \"collection-repeat expected expression in form of '_item_ in _collection_[ track by _id_]' but got '%'\";\n\nIonicModule\n.directive({\n  ngSrc: collectionRepeatSrcDirective('ngSrc', 'src'),\n  ngSrcset: collectionRepeatSrcDirective('ngSrcset', 'srcset'),\n  ngHref: collectionRepeatSrcDirective('ngHref', 'href')\n})\n.directive('collectionRepeat', [\n  '$collectionRepeatManager',\n  '$collectionDataSource',\n  '$parse',\nfunction($collectionRepeatManager, $collectionDataSource, $parse) {\n  return {\n    priority: 1000,\n    transclude: 'element',\n    terminal: true,\n    $$tlb: true,\n    require: '^$ionicScroll',\n    controller: [function(){}],\n    link: function($scope, $element, $attr, scrollCtrl, $transclude) {\n      var wrap = jqLite('<div style=\"position:relative;\">');\n      $element.parent()[0].insertBefore(wrap[0], $element[0]);\n      wrap.append($element);\n\n      var scrollView = scrollCtrl.scrollView;\n      if (scrollView.options.scrollingX && scrollView.options.scrollingY) {\n        throw new Error(COLLECTION_REPEAT_SCROLLVIEW_XY_ERROR);\n      }\n\n      var isVertical = !!scrollView.options.scrollingY;\n      if (isVertical && !$attr.collectionItemHeight) {\n        throw new Error(COLLECTION_REPEAT_ATTR_HEIGHT_ERROR);\n      } else if (!isVertical && !$attr.collectionItemWidth) {\n        throw new Error(COLLECTION_REPEAT_ATTR_WIDTH_ERROR);\n      }\n\n      var heightParsed = $parse($attr.collectionItemHeight || '\"100%\"');\n      var widthParsed = $parse($attr.collectionItemWidth || '\"100%\"');\n\n      var heightGetter = function(scope, locals) {\n        var result = heightParsed(scope, locals);\n        if (isString(result) && result.indexOf('%') > -1) {\n          return Math.floor(parseInt(result, 10) / 100 * scrollView.__clientHeight);\n        }\n        return result;\n      };\n      var widthGetter = function(scope, locals) {\n        var result = widthParsed(scope, locals);\n        if (isString(result) && result.indexOf('%') > -1) {\n          return Math.floor(parseInt(result, 10) / 100 * scrollView.__clientWidth);\n        }\n        return result;\n      };\n\n      var match = $attr.collectionRepeat.match(/^\\s*([\\s\\S]+?)\\s+in\\s+([\\s\\S]+?)(?:\\s+track\\s+by\\s+([\\s\\S]+?))?\\s*$/);\n      if (!match) {\n        throw new Error(COLLECTION_REPEAT_ATTR_REPEAT_ERROR\n                        .replace('%', $attr.collectionRepeat));\n      }\n      var keyExpr = match[1];\n      var listExpr = match[2];\n      var trackByExpr = match[3];\n\n      var dataSource = new $collectionDataSource({\n        scope: $scope,\n        transcludeFn: $transclude,\n        transcludeParent: $element.parent(),\n        keyExpr: keyExpr,\n        listExpr: listExpr,\n        trackByExpr: trackByExpr,\n        heightGetter: heightGetter,\n        widthGetter: widthGetter\n      });\n      var collectionRepeatManager = new $collectionRepeatManager({\n        dataSource: dataSource,\n        element: scrollCtrl.$element,\n        scrollView: scrollCtrl.scrollView,\n      });\n\n      $scope.$watchCollection(listExpr, function(value) {\n        if (value && !angular.isArray(value)) {\n          throw new Error(\"collection-repeat expects an array to repeat over, but instead got '\" + typeof value + \"'.\");\n        }\n        rerender(value);\n      });\n\n      var scrollViewContent = scrollCtrl.scrollView.__content;\n      function rerender(value) {\n        var beforeSiblings = [];\n        var afterSiblings = [];\n        var before = true;\n        forEach(scrollViewContent.children, function(node, i) {\n          if ( ionic.DomUtil.elementIsDescendant($element[0], node, scrollViewContent) ) {\n            before = false;\n          } else {\n            var width = node.offsetWidth;\n            var height = node.offsetHeight;\n            if (width && height) {\n              var element = jqLite(node);\n              (before ? beforeSiblings : afterSiblings).push({\n                width: node.offsetWidth,\n                height: node.offsetHeight,\n                element: element,\n                scope: element.isolateScope() || element.scope(),\n                isOutside: true\n              });\n            }\n          }\n        });\n\n        scrollView.resize();\n        dataSource.setData(value, beforeSiblings, afterSiblings);\n        collectionRepeatManager.resize();\n      }\n      function onWindowResize() {\n        rerender($scope.$eval(listExpr));\n      }\n\n      ionic.on('resize', onWindowResize, window);\n\n      $scope.$on('$destroy', function() {\n        collectionRepeatManager.destroy();\n        dataSource.destroy();\n        ionic.off('resize', onWindowResize, window);\n      });\n    }\n  };\n}]);\n\n// Fix for #1674\n// Problem: if an ngSrc or ngHref expression evaluates to a falsy value, it will\n// not erase the previous truthy value of the href.\n// In collectionRepeat, we re-use elements from before. So if the ngHref expression\n// evaluates to truthy for item 1 and then falsy for item 2, if an element changes\n// from representing item 1 to representing item 2, item 2 will still have\n// item 1's href value.\n// Solution:  erase the href or src attribute if ngHref/ngSrc are falsy.\nfunction collectionRepeatSrcDirective(ngAttrName, attrName) {\n  return [function() {\n    return {\n      priority: '99', // it needs to run after the attributes are interpolated\n      link: function(scope, element, attr, collectionRepeatCtrl) {\n        if (!collectionRepeatCtrl) return;\n        attr.$observe(ngAttrName, function(value) {\n          element[0][attr] = '';\n          setTimeout(function() {\n            element[0][attr] = value;\n          });\n        });\n      }\n    };\n  }];\n}\n\n/**\n * @ngdoc directive\n * @name ionContent\n * @module ionic\n * @delegate ionic.service:$ionicScrollDelegate\n * @restrict E\n *\n * @description\n * The ionContent directive provides an easy to use content area that can be configured\n * to use Ionic's custom Scroll View, or the built in overflow scrolling of the browser.\n *\n * While we recommend using the custom Scroll features in Ionic in most cases, sometimes\n * (for performance reasons) only the browser's native overflow scrolling will suffice,\n * and so we've made it easy to toggle between the Ionic scroll implementation and\n * overflow scrolling.\n *\n * You can implement pull-to-refresh with the {@link ionic.directive:ionRefresher}\n * directive, and infinite scrolling with the {@link ionic.directive:ionInfiniteScroll}\n * directive.\n *\n * Be aware that this directive gets its own child scope. If you do not understand why this\n * is important, you can read [https://docs.angularjs.org/guide/scope](https://docs.angularjs.org/guide/scope).\n *\n * @param {string=} delegate-handle The handle used to identify this scrollView\n * with {@link ionic.service:$ionicScrollDelegate}.\n * @param {string=} direction Which way to scroll. 'x' or 'y' or 'xy'. Default 'y'.\n * @param {boolean=} padding Whether to add padding to the content.\n * of the content.  Defaults to true on iOS, false on Android.\n * @param {boolean=} scroll Whether to allow scrolling of content.  Defaults to true.\n * @param {boolean=} overflow-scroll Whether to use overflow-scrolling instead of\n * Ionic scroll.\n * @param {boolean=} scrollbar-x Whether to show the horizontal scrollbar. Default true.\n * @param {boolean=} scrollbar-y Whether to show the vertical scrollbar. Default true.\n * @param {string=} start-y Initial vertical scroll position. Default 0.\n * of the content.  Defaults to true on iOS, false on Android.\n * @param {expression=} on-scroll Expression to evaluate when the content is scrolled.\n * @param {expression=} on-scroll-complete Expression to evaluate when a scroll action completes.\n * @param {boolean=} has-bouncing Whether to allow scrolling to bounce past the edges\n * of the content.  Defaults to true on iOS, false on Android.\n */\nIonicModule\n.directive('ionContent', [\n  '$timeout',\n  '$controller',\n  '$ionicBind',\nfunction($timeout, $controller, $ionicBind) {\n  return {\n    restrict: 'E',\n    require: '^?ionNavView',\n    scope: true,\n    priority: 800,\n    compile: function(element, attr) {\n      var innerElement;\n\n      element.addClass('scroll-content ionic-scroll');\n\n      if (attr.scroll != 'false') {\n        //We cannot use normal transclude here because it breaks element.data()\n        //inheritance on compile\n        innerElement = jqLite('<div class=\"scroll\"></div>');\n        innerElement.append(element.contents());\n        element.append(innerElement);\n      } else {\n        element.addClass('scroll-content-false');\n      }\n\n      return { pre: prelink };\n      function prelink($scope, $element, $attr, navViewCtrl) {\n        var parentScope = $scope.$parent;\n        $scope.$watch(function() {\n          return (parentScope.$hasHeader ? ' has-header' : '')  +\n            (parentScope.$hasSubheader ? ' has-subheader' : '') +\n            (parentScope.$hasFooter ? ' has-footer' : '') +\n            (parentScope.$hasSubfooter ? ' has-subfooter' : '') +\n            (parentScope.$hasTabs ? ' has-tabs' : '') +\n            (parentScope.$hasTabsTop ? ' has-tabs-top' : '');\n        }, function(className, oldClassName) {\n          $element.removeClass(oldClassName);\n          $element.addClass(className);\n        });\n\n        //Only this ionContent should use these variables from parent scopes\n        $scope.$hasHeader = $scope.$hasSubheader =\n          $scope.$hasFooter = $scope.$hasSubfooter =\n          $scope.$hasTabs = $scope.$hasTabsTop =\n          false;\n        $ionicBind($scope, $attr, {\n          $onScroll: '&onScroll',\n          $onScrollComplete: '&onScrollComplete',\n          hasBouncing: '@',\n          padding: '@',\n          direction: '@',\n          scrollbarX: '@',\n          scrollbarY: '@',\n          startX: '@',\n          startY: '@',\n          scrollEventInterval: '@'\n        });\n        $scope.direction = $scope.direction || 'y';\n\n        if (angular.isDefined($attr.padding)) {\n          $scope.$watch($attr.padding, function(newVal) {\n              (innerElement || $element).toggleClass('padding', !!newVal);\n          });\n        }\n\n        if ($attr.scroll === \"false\") {\n          //do nothing\n        } else if(attr.overflowScroll === \"true\") {\n          $element.addClass('overflow-scroll');\n        } else {\n          $controller('$ionicScroll', {\n            $scope: $scope,\n            scrollViewOptions: {\n              el: $element[0],\n              delegateHandle: attr.delegateHandle,\n              bouncing: $scope.$eval($scope.hasBouncing),\n              startX: $scope.$eval($scope.startX) || 0,\n              startY: $scope.$eval($scope.startY) || 0,\n              scrollbarX: $scope.$eval($scope.scrollbarX) !== false,\n              scrollbarY: $scope.$eval($scope.scrollbarY) !== false,\n              scrollingX: $scope.direction.indexOf('x') >= 0,\n              scrollingY: $scope.direction.indexOf('y') >= 0,\n              scrollEventInterval: parseInt($scope.scrollEventInterval, 10) || 10,\n              scrollingComplete: function() {\n                $scope.$onScrollComplete({\n                  scrollTop: this.__scrollTop,\n                  scrollLeft: this.__scrollLeft\n                });\n              }\n            }\n          });\n        }\n\n      }\n    }\n  };\n}]);\n\nvar GESTURE_DIRECTIVES = 'onHold onTap onTouch onRelease onDrag onDragUp onDragRight onDragDown onDragLeft onSwipe onSwipeUp onSwipeRight onSwipeDown onSwipeLeft'.split(' ');\n\nGESTURE_DIRECTIVES.forEach(function(name) {\n  IonicModule.directive(name, gestureDirective(name));\n});\n\n\n/**\n * @ngdoc directive\n * @name onHold\n * @module ionic\n * @restrict A\n *\n * @description\n * Touch stays at the same location for 500ms.\n *\n * @usage\n * ```html\n * <button on-hold=\"onHold()\" class=\"button\">Test</button>\n * ```\n */\n\n\n/**\n * @ngdoc directive\n * @name onTap\n * @module ionic\n * @restrict A\n *\n * @description\n * Quick touch at a location. If the duration of the touch goes\n * longer than 250ms it is no longer a tap gesture.\n *\n * @usage\n * ```html\n * <button on-tap=\"onTap()\" class=\"button\">Test</button>\n * ```\n */\n\n\n/**\n * @ngdoc directive\n * @name onTouch\n * @module ionic\n * @restrict A\n *\n * @description\n * Called immediately when the user first begins a touch. This\n * gesture does not wait for a touchend/mouseup.\n *\n * @usage\n * ```html\n * <button on-touch=\"onTouch()\" class=\"button\">Test</button>\n * ```\n */\n\n\n/**\n * @ngdoc directive\n * @name onRelease\n * @module ionic\n * @restrict A\n *\n * @description\n * Called when the user ends a touch.\n *\n * @usage\n * ```html\n * <button on-release=\"onRelease()\" class=\"button\">Test</button>\n * ```\n */\n\n\n/**\n * @ngdoc directive\n * @name onDrag\n * @module ionic\n * @restrict A\n *\n * @description\n * Move with one touch around on the page. Blocking the scrolling when\n * moving left and right is a good practice. When all the drag events are\n * blocking you disable scrolling on that area.\n *\n * @usage\n * ```html\n * <button on-drag=\"onDrag()\" class=\"button\">Test</button>\n * ```\n */\n\n\n/**\n * @ngdoc directive\n * @name onDragUp\n * @module ionic\n * @restrict A\n *\n * @description\n * Called when the element is dragged up.\n *\n * @usage\n * ```html\n * <button on-drag-up=\"onDragUp()\" class=\"button\">Test</button>\n * ```\n */\n\n\n/**\n * @ngdoc directive\n * @name onDragRight\n * @module ionic\n * @restrict A\n *\n * @description\n * Called when the element is dragged to the right.\n *\n * @usage\n * ```html\n * <button on-drag-right=\"onDragRight()\" class=\"button\">Test</button>\n * ```\n */\n\n\n/**\n * @ngdoc directive\n * @name onDragDown\n * @module ionic\n * @restrict A\n *\n * @description\n * Called when the element is dragged down.\n *\n * @usage\n * ```html\n * <button on-drag-down=\"onDragDown()\" class=\"button\">Test</button>\n * ```\n */\n\n\n/**\n * @ngdoc directive\n * @name onDragLeft\n * @module ionic\n * @restrict A\n *\n * @description\n * Called when the element is dragged to the left.\n *\n * @usage\n * ```html\n * <button on-drag-left=\"onDragLeft()\" class=\"button\">Test</button>\n * ```\n */\n\n\n/**\n * @ngdoc directive\n * @name onSwipe\n * @module ionic\n * @restrict A\n *\n * @description\n * Called when a moving touch has a high velocity in any direction.\n *\n * @usage\n * ```html\n * <button on-swipe=\"onSwipe()\" class=\"button\">Test</button>\n * ```\n */\n\n\n/**\n * @ngdoc directive\n * @name onSwipeUp\n * @module ionic\n * @restrict A\n *\n * @description\n * Called when a moving touch has a high velocity moving up.\n *\n * @usage\n * ```html\n * <button on-swipe-up=\"onSwipeUp()\" class=\"button\">Test</button>\n * ```\n */\n\n\n/**\n * @ngdoc directive\n * @name onSwipeRight\n * @module ionic\n * @restrict A\n *\n * @description\n * Called when a moving touch has a high velocity moving to the right.\n *\n * @usage\n * ```html\n * <button on-swipe-right=\"onSwipeRight()\" class=\"button\">Test</button>\n * ```\n */\n\n\n/**\n * @ngdoc directive\n * @name onSwipeDown\n * @module ionic\n * @restrict A\n *\n * @description\n * Called when a moving touch has a high velocity moving down.\n *\n * @usage\n * ```html\n * <button on-swipe-down=\"onSwipeDown()\" class=\"button\">Test</button>\n * ```\n */\n\n\n/**\n * @ngdoc directive\n * @name onSwipeLeft\n * @module ionic\n * @restrict A\n *\n * @description\n * Called when a moving touch has a high velocity moving to the left.\n *\n * @usage\n * ```html\n * <button on-swipe-left=\"onSwipeLeft()\" class=\"button\">Test</button>\n * ```\n */\n\n\nfunction gestureDirective(directiveName) {\n  return ['$ionicGesture', '$parse', function($ionicGesture, $parse) {\n    var eventType = directiveName.substr(2).toLowerCase();\n\n    return function(scope, element, attr) {\n      var fn = $parse( attr[directiveName] );\n\n      var listener = function(ev) {\n        scope.$apply(function() {\n          fn(scope, {\n            $event: ev\n          });\n        });\n      };\n\n      var gesture = $ionicGesture.on(eventType, listener, element);\n\n      scope.$on('$destroy', function() {\n        $ionicGesture.off(gesture, eventType, listener);\n      });\n    };\n  }];\n}\n\n\nIonicModule\n.directive('ionNavBar', tapScrollToTopDirective())\n.directive('ionHeaderBar', tapScrollToTopDirective())\n\n/**\n * @ngdoc directive\n * @name ionHeaderBar\n * @module ionic\n * @restrict E\n *\n * @description\n * Adds a fixed header bar above some content.\n *\n * Can also be a subheader (lower down) if the 'bar-subheader' class is applied.\n * See [the header CSS docs](/docs/v1/components/#subheader).\n *\n * Note: If you use ionHeaderBar in combination with ng-if, the surrounding content\n * will not align correctly.  This will be fixed soon.\n *\n * @param {string=} align-title Where to align the title. \n * Available: 'left', 'right', or 'center'.  Defaults to 'center'.\n * @param {boolean=} no-tap-scroll By default, the header bar will scroll the\n * content to the top when tapped.  Set no-tap-scroll to true to disable this \n * behavior.\n * Available: true or false.  Defaults to false.\n *\n * @usage\n * ```html\n * <ion-header-bar align-title=\"left\" class=\"bar-positive\">\n *   <div class=\"buttons\">\n *     <button class=\"button\" ng-click=\"doSomething()\">Left Button</button>\n *   </div>\n *   <h1 class=\"title\">Title!</h1>\n *   <div class=\"buttons\">\n *     <button class=\"button\">Right Button</button>\n *   </div>\n * </ion-header-bar>\n * <ion-content>\n *   Some content!\n * </ion-content>\n * ```\n */\n.directive('ionHeaderBar', headerFooterBarDirective(true))\n\n/**\n * @ngdoc directive\n * @name ionFooterBar\n * @module ionic\n * @restrict E\n *\n * @description\n * Adds a fixed footer bar below some content.\n *\n * Can also be a subfooter (higher up) if the 'bar-subfooter' class is applied.\n * See [the footer CSS docs](/docs/v1/components/#footer).\n *\n * Note: If you use ionFooterBar in combination with ng-if, the surrounding content\n * will not align correctly.  This will be fixed soon.\n *\n * @param {string=} align-title Where to align the title.\n * Available: 'left', 'right', or 'center'.  Defaults to 'center'.\n *\n * @usage\n * ```html\n * <ion-content>\n *   Some content!\n * </ion-content>\n * <ion-footer-bar align-title=\"left\" class=\"bar-assertive\">\n *   <div class=\"buttons\">\n *     <button class=\"button\">Left Button</button>\n *   </div>\n *   <h1 class=\"title\">Title!</h1>\n *   <div class=\"buttons\" ng-click=\"doSomething()\">\n *     <button class=\"button\">Right Button</button>\n *   </div>\n * </ion-footer-bar>\n * ```\n */\n.directive('ionFooterBar', headerFooterBarDirective(false));\n\nfunction tapScrollToTopDirective() {\n  return ['$ionicScrollDelegate', function($ionicScrollDelegate) {\n    return {\n      restrict: 'E',\n      link: function($scope, $element, $attr) {\n        if ($attr.noTapScroll == 'true') {\n          return;\n        }\n        ionic.on('tap', onTap, $element[0]);\n        $scope.$on('$destroy', function() {\n          ionic.off('tap', onTap, $element[0]);\n        });\n\n        function onTap(e) {\n          var depth = 3;\n          var current = e.target;\n          //Don't scroll to top in certain cases\n          while (depth-- && current) {\n            if (current.classList.contains('button') ||\n                current.tagName.match(/input|textarea|select/i) ||\n                current.isContentEditable) {\n              return;\n            }\n            current = current.parentNode;\n          }\n          var touch = e.gesture && e.gesture.touches[0] || e.detail.touches[0];\n          var bounds = $element[0].getBoundingClientRect();\n          if (ionic.DomUtil.rectContains(\n            touch.pageX, touch.pageY,\n            bounds.left, bounds.top - 20,\n            bounds.left + bounds.width, bounds.top + bounds.height\n          )) {\n            $ionicScrollDelegate.scrollTop(true);\n          }\n        }\n      }\n    };\n  }];\n}\n\nfunction headerFooterBarDirective(isHeader) {\n  return [function() {\n    return {\n      restrict: 'E',\n      compile: function($element, $attr) {\n        $element.addClass(isHeader ? 'bar bar-header' : 'bar bar-footer');\n        var parent = $element[0].parentNode;\n        if(parent.querySelector('.tabs-top'))$element.addClass('has-tabs-top');\n        return { pre: prelink };\n        function prelink($scope, $element, $attr) {\n          var hb = new ionic.views.HeaderBar({\n            el: $element[0],\n            alignTitle: $attr.alignTitle || 'center'\n          });\n\n          var el = $element[0];\n\n          if (isHeader) {\n            $scope.$watch(function() { return el.className; }, function(value) {\n              var isShown = value.indexOf('ng-hide') === -1;\n              var isSubheader = value.indexOf('bar-subheader') !== -1;\n              $scope.$hasHeader = isShown && !isSubheader;\n              $scope.$hasSubheader = isShown && isSubheader;\n            });\n            $scope.$on('$destroy', function() {\n              delete $scope.$hasHeader;\n              delete $scope.$hasSubheader;\n            });\n          } else {\n            $scope.$watch(function() { return el.className; }, function(value) {\n              var isShown = value.indexOf('ng-hide') === -1;\n              var isSubfooter = value.indexOf('bar-subfooter') !== -1;\n              $scope.$hasFooter = isShown && !isSubfooter;\n              $scope.$hasSubfooter = isShown && isSubfooter;\n            });\n            $scope.$on('$destroy', function() {\n              delete $scope.$hasFooter;\n              delete $scope.$hasSubfooter;\n            });\n            $scope.$watch('$hasTabs', function(val) {\n              $element.toggleClass('has-tabs', !!val);\n            });\n          }\n        }\n      }\n    };\n  }];\n}\n\n/**\n * @ngdoc directive\n * @name ionInfiniteScroll\n * @module ionic\n * @parent ionic.directive:ionContent, ionic.directive:ionScroll\n * @restrict E\n *\n * @description\n * The ionInfiniteScroll directive allows you to call a function whenever\n * the user gets to the bottom of the page or near the bottom of the page.\n *\n * The expression you pass in for `on-infinite` is called when the user scrolls\n * greater than `distance` away from the bottom of the content.  Once `on-infinite`\n * is done loading new data, it should broadcast the `scroll.infiniteScrollComplete`\n * event from your controller (see below example).\n *\n * @param {expression} on-infinite What to call when the scroller reaches the\n * bottom.\n * @param {string=} distance The distance from the bottom that the scroll must\n * reach to trigger the on-infinite expression. Default: 1%.\n * @param {string=} icon The icon to show while loading. Default: 'ion-loading-d'.\n *\n * @usage\n * ```html\n * <ion-content ng-controller=\"MyController\">\n *   <ion-infinite-scroll\n *     on-infinite=\"loadMore()\"\n *     distance=\"1%\">\n *   </ion-infinite-scroll>\n * </ion-content>\n * ```\n * ```js\n * function MyController($scope, $http) {\n *   $scope.items = [];\n *   $scope.loadMore = function() {\n *     $http.get('/more-items').success(function(items) {\n *       useItems(items);\n *       $scope.$broadcast('scroll.infiniteScrollComplete');\n *     });\n *   };\n *\n *   $scope.$on('stateChangeSuccess', function() {\n *     $scope.loadMore();\n *   });\n * }\n * ```\n *\n * An easy to way to stop infinite scroll once there is no more data to load\n * is to use angular's `ng-if` directive:\n *\n * ```html\n * <ion-infinite-scroll\n *   ng-if=\"moreDataCanBeLoaded()\"\n *   icon=\"ion-loading-c\"\n *   on-infinite=\"loadMoreData()\">\n * </ion-infinite-scroll>\n * ```\n */\nIonicModule\n.directive('ionInfiniteScroll', ['$timeout', function($timeout) {\n  function calculateMaxValue(distance, maximum, isPercent) {\n    return isPercent ?\n      maximum * (1 - parseFloat(distance,10) / 100) :\n      maximum - parseFloat(distance, 10);\n  }\n  return {\n    restrict: 'E',\n    require: ['^$ionicScroll', 'ionInfiniteScroll'],\n    template: '<i class=\"icon {{icon()}} icon-refreshing\"></i>',\n    scope: true,\n    controller: ['$scope', '$attrs', function($scope, $attrs) {\n      this.isLoading = false;\n      this.scrollView = null; //given by link function\n      this.getMaxScroll = function() {\n        var distance = ($attrs.distance || '2.5%').trim();\n        var isPercent = distance.indexOf('%') !== -1;\n        var maxValues = this.scrollView.getScrollMax();\n        return {\n          left: this.scrollView.options.scrollingX ?\n            calculateMaxValue(distance, maxValues.left, isPercent) :\n            -1,\n          top: this.scrollView.options.scrollingY ?\n            calculateMaxValue(distance, maxValues.top, isPercent) :\n            -1\n        };\n      };\n    }],\n    link: function($scope, $element, $attrs, ctrls) {\n      var scrollCtrl = ctrls[0];\n      var infiniteScrollCtrl = ctrls[1];\n      var scrollView = infiniteScrollCtrl.scrollView = scrollCtrl.scrollView;\n\n      $scope.icon = function() {\n        return angular.isDefined($attrs.icon) ? $attrs.icon : 'ion-loading-d';\n      };\n\n      var onInfinite = function() {\n        $element[0].classList.add('active');\n        infiniteScrollCtrl.isLoading = true;\n        $scope.$parent && $scope.$parent.$apply($attrs.onInfinite || '');\n      };\n\n      var finishInfiniteScroll = function() {\n        $element[0].classList.remove('active');\n        $timeout(function() {\n          scrollView.resize();\n          checkBounds();\n        }, 0, false);\n        infiniteScrollCtrl.isLoading = false;\n      };\n\n      $scope.$on('scroll.infiniteScrollComplete', function() {\n        finishInfiniteScroll();\n      });\n\n      $scope.$on('$destroy', function() {\n        scrollCtrl.$element.off('scroll', checkBounds);\n      });\n\n      var checkBounds = ionic.animationFrameThrottle(checkInfiniteBounds);\n\n      //Check bounds on start, after scrollView is fully rendered\n      setTimeout(checkBounds);\n      scrollCtrl.$element.on('scroll', checkBounds);\n\n      function checkInfiniteBounds() {\n        if (infiniteScrollCtrl.isLoading) return;\n\n        var scrollValues = scrollView.getValues();\n        var maxScroll = infiniteScrollCtrl.getMaxScroll();\n\n        if ((maxScroll.left !== -1 && scrollValues.left >= maxScroll.left) ||\n            (maxScroll.top !== -1 && scrollValues.top >= maxScroll.top)) {\n          onInfinite();\n        }\n      }\n    }\n  };\n}]);\n\nvar ITEM_TPL_CONTENT_ANCHOR =\n  '<a class=\"item-content\" ng-href=\"{{$href()}}\" target=\"{{$target()}}\"></a>';\nvar ITEM_TPL_CONTENT =\n  '<div class=\"item-content\"></div>';\n/**\n* @ngdoc directive\n* @name ionItem\n* @parent ionic.directive:ionList\n* @module ionic\n* @restrict E\n* Creates a list-item that can easily be swiped,\n* deleted, reordered, edited, and more.\n*\n* See {@link ionic.directive:ionList} for a complete example & explanation.\n*\n* Can be assigned any item class name. See the\n* [list CSS documentation](/docs/v1/components/#list).\n*\n* @usage\n*\n* ```html\n* <ion-list>\n*   <ion-item>Hello!</ion-item>\n* </ion-list>\n* ```\n*/\nIonicModule\n.directive('ionItem', [\n  '$animate',\n  '$compile',\nfunction($animate, $compile) {\n  return {\n    restrict: 'E',\n    controller: ['$scope', '$element', function($scope, $element) {\n      this.$scope = $scope;\n      this.$element = $element;\n    }],\n    scope: true,\n    compile: function($element, $attrs) {\n      var isAnchor = angular.isDefined($attrs.href) ||\n        angular.isDefined($attrs.ngHref) ||\n        angular.isDefined($attrs.uiSref);\n      var isComplexItem = isAnchor ||\n        //Lame way of testing, but we have to know at compile what to do with the element\n        /ion-(delete|option|reorder)-button/i.test($element.html());\n\n        if (isComplexItem) {\n          var innerElement = jqLite(isAnchor ? ITEM_TPL_CONTENT_ANCHOR : ITEM_TPL_CONTENT);\n          innerElement.append($element.contents());\n\n          $element.append(innerElement);\n          $element.addClass('item item-complex');\n        } else {\n          $element.addClass('item');\n        }\n\n        return function link($scope, $element, $attrs) {\n          $scope.$href = function() {\n            return $attrs.href || $attrs.ngHref;\n          };\n          $scope.$target = function() {\n            return $attrs.target || '_self';\n          };\n        };\n    }\n  };\n}]);\n\n\nvar ITEM_TPL_DELETE_BUTTON =\n  '<div class=\"item-left-edit item-delete enable-pointer-events\">' +\n  '</div>';\n/**\n* @ngdoc directive\n* @name ionDeleteButton\n* @parent ionic.directive:ionItem\n* @module ionic\n* @restrict E\n* Creates a delete button inside a list item, that is visible when the\n* {@link ionic.directive:ionList ionList parent's} `show-delete` evaluates to true or\n* `$ionicListDelegate.showDelete(true)` is called.\n*\n* Takes any ionicon as a class.\n*\n* See {@link ionic.directive:ionList} for a complete example & explanation.\n*\n* @usage\n*\n* ```html\n* <ion-list show-delete=\"shouldShowDelete\">\n*   <ion-item>\n*     <ion-delete-button class=\"ion-minus-circled\"></ion-delete-button>\n*     Hello, list item!\n*   </ion-item>\n* </ion-list>\n* <ion-toggle ng-model=\"shouldShowDelete\">\n*   Show Delete?\n* </ion-toggle>\n* ```\n*/\nIonicModule\n.directive('ionDeleteButton', ['$animate', function($animate) {\n  return {\n    restrict: 'E',\n    require: ['^ionItem', '^?ionList'],\n    //Run before anything else, so we can move it before other directives process\n    //its location (eg ngIf relies on the location of the directive in the dom)\n    priority: Number.MAX_VALUE,\n    compile: function($element, $attr) {\n      //Add the classes we need during the compile phase, so that they stay\n      //even if something else like ngIf removes the element and re-addss it\n      $attr.$set('class', ($attr['class'] || '') + ' button icon button-icon', true);\n      return function($scope, $element, $attr, ctrls) {\n        var itemCtrl = ctrls[0];\n        var listCtrl = ctrls[1];\n        var container = jqLite(ITEM_TPL_DELETE_BUTTON);\n        container.append($element);\n        itemCtrl.$element.append(container).addClass('item-left-editable');\n\n        if (listCtrl && listCtrl.showDelete()) {\n          container.addClass('visible active');\n        }\n      };\n    }\n  };\n}]);\n\n\nIonicModule\n.directive('itemFloatingLabel', function() {\n  return {\n    restrict: 'C',\n    link: function(scope, element) {\n      var el = element[0];\n      var input = el.querySelector('input, textarea');\n      var inputLabel = el.querySelector('.input-label');\n\n      if ( !input || !inputLabel ) return;\n\n      var onInput = function() {\n        if ( input.value ) {\n          inputLabel.classList.add('has-input');\n        } else {\n          inputLabel.classList.remove('has-input');\n        }\n      };\n\n      input.addEventListener('input', onInput);\n\n      var ngModelCtrl = angular.element(input).controller('ngModel');\n      if ( ngModelCtrl ) {\n        ngModelCtrl.$render = function() {\n          input.value = ngModelCtrl.$viewValue || '';\n          onInput();\n        };\n      }\n\n      scope.$on('$destroy', function() {\n        input.removeEventListener('input', onInput);\n      });\n    }\n  };\n});\n\nvar ITEM_TPL_OPTION_BUTTONS =\n  '<div class=\"item-options invisible\">' +\n  '</div>';\n/**\n* @ngdoc directive\n* @name ionOptionButton\n* @parent ionic.directive:ionItem\n* @module ionic\n* @restrict E\n* Creates an option button inside a list item, that is visible when the item is swiped\n* to the left by the user.  Swiped open option buttons can be hidden with\n* {@link ionic.service:$ionicListDelegate#closeOptionButtons $ionicListDelegate#closeOptionButtons}.\n*\n* Can be assigned any button class.\n*\n* See {@link ionic.directive:ionList} for a complete example & explanation.\n*\n* @usage\n*\n* ```html\n* <ion-list>\n*   <ion-item>\n*     I love kittens!\n*     <ion-option-button class=\"button-positive\">Share</ion-option-button>\n*     <ion-option-button class=\"button-assertive\">Edit</ion-option-button>\n*   </ion-item>\n* </ion-list>\n* ```\n*/\nIonicModule\n.directive('ionOptionButton', ['$compile', function($compile) {\n  function stopPropagation(e) {\n    e.stopPropagation();\n  }\n  return {\n    restrict: 'E',\n    require: '^ionItem',\n    priority: Number.MAX_VALUE,\n    compile: function($element, $attr) {\n      $attr.$set('class', ($attr['class'] || '') + ' button', true);\n      return function($scope, $element, $attr, itemCtrl) {\n        if (!itemCtrl.optionsContainer) {\n          itemCtrl.optionsContainer = jqLite(ITEM_TPL_OPTION_BUTTONS);\n          itemCtrl.$element.append(itemCtrl.optionsContainer);\n        }\n        itemCtrl.optionsContainer.append($element);\n\n        //Don't bubble click up to main .item\n        $element.on('click', stopPropagation);\n      };\n    }\n  };\n}]);\n\nvar ITEM_TPL_REORDER_BUTTON =\n  '<div data-prevent-scroll=\"true\" class=\"item-right-edit item-reorder enable-pointer-events\">' +\n  '</div>';\n\n/**\n* @ngdoc directive\n* @name ionReorderButton\n* @parent ionic.directive:ionItem\n* @module ionic\n* @restrict E\n* Creates a reorder button inside a list item, that is visible when the\n* {@link ionic.directive:ionList ionList parent's} `show-reorder` evaluates to true or\n* `$ionicListDelegate.showReorder(true)` is called.\n*\n* Can be dragged to reorder items in the list. Takes any ionicon class.\n*\n* Note: Reordering works best when used with `ng-repeat`.  Be sure that all `ion-item` children of an `ion-list` are part of the same `ng-repeat` expression.\n*\n* When an item reorder is complete, the expression given in the `on-reorder` attribute is called. The `on-reorder` expression is given two locals that can be used: `$fromIndex` and `$toIndex`.  See below for an example.\n*\n* Look at {@link ionic.directive:ionList} for more examples.\n*\n* @usage\n*\n* ```html\n* <ion-list ng-controller=\"MyCtrl\">\n*   <ion-item ng-repeat=\"item in items\">\n*     Item {{item}}\n*     <ion-reorder-button class=\"ion-navicon\"\n*                         on-reorder=\"moveItem(item, $fromIndex, $toIndex)\">\n*     </ion-reorder>\n*   </ion-item>\n* </ion-list>\n* ```\n* ```js\n* function MyCtrl($scope) {\n*   $scope.items = [1, 2, 3, 4];\n*   $scope.moveItem = function(item, fromIndex, toIndex) {\n*     //Move the item in the array\n*     $scope.items.splice(fromIndex, 1);\n*     $scope.items.splice(toIndex, 0, item);\n*   };\n* }\n* ```\n*\n* @param {expression=} on-reorder Expression to call when an item is reordered.\n* Parameters given: $fromIndex, $toIndex.\n*/\nIonicModule\n.directive('ionReorderButton', ['$animate', '$parse', function($animate, $parse) {\n  return {\n    restrict: 'E',\n    require: ['^ionItem', '^?ionList'],\n    priority: Number.MAX_VALUE,\n    compile: function($element, $attr) {\n      $attr.$set('class', ($attr['class'] || '') + ' button icon button-icon', true);\n      $element[0].setAttribute('data-prevent-scroll', true);\n      return function($scope, $element, $attr, ctrls) {\n        var itemCtrl = ctrls[0];\n        var listCtrl = ctrls[1];\n        var onReorderFn = $parse($attr.onReorder);\n\n        $scope.$onReorder = function(oldIndex, newIndex) {\n          onReorderFn($scope, {\n            $fromIndex: oldIndex,\n            $toIndex: newIndex\n          });\n        };\n\n        var container = jqLite(ITEM_TPL_REORDER_BUTTON);\n        container.append($element);\n        itemCtrl.$element.append(container).addClass('item-right-editable');\n\n        if (listCtrl && listCtrl.showReorder()) {\n          container.addClass('visible active');\n        }\n      };\n    }\n  };\n}]);\n\n/**\n * @ngdoc directive\n * @name keyboardAttach\n * @module ionic\n * @restrict A\n *\n * @description\n * keyboard-attach is an attribute directive which will cause an element to float above\n * the keyboard when the keyboard shows. Currently only supports the\n * [ion-footer-bar](/docs/v1/{{ page.versionHref }}/api/directive/ionFooterBar/) directive.\n *\n * ### Notes\n * - This directive requires the\n * [Ionic Keyboard Plugin](https://github.com/ionic-team/ionic-plugins-keyboard).\n * - On Android not in fullscreen mode, i.e. you have\n *   `<preference name=\"Fullscreen\" value=\"false\" />` or no preference in your `config.xml` file,\n *   this directive is unnecessary since it is the default behavior.\n * - On iOS, if there is an input in your footer, you will need to set\n *   `cordova.plugins.Keyboard.disableScroll(true)`.\n *\n * @usage\n *\n * ```html\n *  <ion-footer-bar align-title=\"left\" keyboard-attach class=\"bar-assertive\">\n *    <h1 class=\"title\">Title!</h1>\n *  </ion-footer-bar>\n * ```\n */\n\nIonicModule\n.directive('keyboardAttach', function() {\n  return function(scope, element, attrs) {\n    ionic.on('native.keyboardshow', onShow, window);\n    ionic.on('native.keyboardhide', onHide, window);\n\n    //deprecated\n    ionic.on('native.showkeyboard', onShow, window);\n    ionic.on('native.hidekeyboard', onHide, window);\n\n\n    var scrollCtrl;\n\n    function onShow(e) {\n      if (ionic.Platform.isAndroid() && !ionic.Platform.isFullScreen) {\n        return;\n      }\n\n      //for testing\n      var keyboardHeight = e.keyboardHeight || e.detail.keyboardHeight;\n      element.css('bottom', keyboardHeight + \"px\");\n      scrollCtrl = element.controller('$ionicScroll');\n      if ( scrollCtrl ) {\n        scrollCtrl.scrollView.__container.style.bottom = keyboardHeight + keyboardAttachGetClientHeight(element[0]) + \"px\";\n      }\n    }\n\n    function onHide() {\n      if (ionic.Platform.isAndroid() && !ionic.Platform.isFullScreen) {\n        return;\n      }\n\n      element.css('bottom', '');\n      if ( scrollCtrl ) {\n        scrollCtrl.scrollView.__container.style.bottom = '';\n      }\n    }\n\n    scope.$on('$destroy', function() {\n      ionic.off('native.keyboardshow', onShow, window);\n      ionic.off('native.keyboardhide', onHide, window);\n\n      //deprecated\n      ionic.off('native.showkeyboard', onShow, window);\n      ionic.off('native.hidekeyboard', onHide, window);\n    });\n  };\n});\n\nfunction keyboardAttachGetClientHeight(element) {\n  return element.clientHeight;\n}\n\n/**\n* @ngdoc directive\n* @name ionList\n* @module ionic\n* @delegate ionic.service:$ionicListDelegate\n* @codepen JsHjf\n* @restrict E\n* @description\n* The List is a widely used interface element in almost any mobile app, and can include\n* content ranging from basic text all the way to buttons, toggles, icons, and thumbnails.\n*\n* Both the list, which contains items, and the list items themselves can be any HTML\n* element. The containing element requires the `list` class and each list item requires\n* the `item` class.\n*\n* However, using the ionList and ionItem directives make it easy to support various\n* interaction modes such as swipe to edit, drag to reorder, and removing items.\n*\n* Related: {@link ionic.directive:ionItem}, {@link ionic.directive:ionOptionButton}\n* {@link ionic.directive:ionReorderButton}, {@link ionic.directive:ionDeleteButton}, [`list CSS documentation`](/docs/v1/components/#list).\n*\n* @usage\n*\n* Basic Usage:\n*\n* ```html\n* <ion-list>\n*   <ion-item ng-repeat=\"item in items\">\n*     {% raw %}Hello, {{item}}!{% endraw %}\n*   </ion-item>\n* </ion-list>\n* ```\n*\n* Advanced Usage: Thumbnails, Delete buttons, Reordering, Swiping\n*\n* ```html\n* <ion-list ng-controller=\"MyCtrl\"\n*           show-delete=\"shouldShowDelete\"\n*           show-reorder=\"shouldShowReorder\"\n*           can-swipe=\"listCanSwipe\">\n*   <ion-item ng-repeat=\"item in items\"\n*             class=\"item-thumbnail-left\">\n*\n*     {% raw %}<img ng-src=\"{{item.img}}\">\n*     <h2>{{item.title}}</h2>\n*     <p>{{item.description}}</p>{% endraw %}\n*     <ion-option-button class=\"button-positive\"\n*                        ng-click=\"share(item)\">\n*       Share\n*     </ion-option-button>\n*     <ion-option-button class=\"button-info\"\n*                        ng-click=\"edit(item)\">\n*       Edit\n*     </ion-option-button>\n*     <ion-delete-button class=\"ion-minus-circled\"\n*                        ng-click=\"items.splice($index, 1)\">\n*     </ion-delete-button>\n*     <ion-reorder-button class=\"ion-navicon\"\n*                         on-reorder=\"reorderItem(item, $fromIndex, $toIndex)\">\n*     </ion-reorder-button>\n*\n*   </ion-item>\n* </ion-list>\n* ```\n*\n* @param {string=} delegate-handle The handle used to identify this list with\n* {@link ionic.service:$ionicListDelegate}.\n* @param type {string=} The type of list to use (for example, list-inset for an inset list)\n* @param show-delete {boolean=} Whether the delete buttons for the items in the list are\n* currently shown or hidden.\n* @param show-reorder {boolean=} Whether the reorder buttons for the items in the list are\n* currently shown or hidden.\n* @param can-swipe {boolean=} Whether the items in the list are allowed to be swiped to reveal\n* option buttons. Default: true.\n*/\nIonicModule\n.directive('ionList', [\n  '$animate',\n  '$timeout',\nfunction($animate, $timeout) {\n  return {\n    restrict: 'E',\n    require: ['ionList', '^?$ionicScroll'],\n    controller: '$ionicList',\n    compile: function($element, $attr) {\n      var listEl = jqLite('<div class=\"list\">')\n      .append( $element.contents() )\n      .addClass($attr.type);\n      $element.append(listEl);\n\n      return function($scope, $element, $attrs, ctrls) {\n        var listCtrl = ctrls[0];\n        var scrollCtrl = ctrls[1];\n\n        //Wait for child elements to render...\n        $timeout(init);\n\n        function init() {\n          var listView = listCtrl.listView = new ionic.views.ListView({\n            el: $element[0],\n            listEl: $element.children()[0],\n            scrollEl: scrollCtrl && scrollCtrl.element,\n            scrollView: scrollCtrl && scrollCtrl.scrollView,\n            onReorder: function(el, oldIndex, newIndex) {\n              var itemScope = jqLite(el).scope();\n              if (itemScope && itemScope.$onReorder) {\n                //Make sure onReorder is called in apply cycle,\n                //but also make sure it has no conflicts by doing\n                //$evalAsync\n                $timeout(function() {\n                  itemScope.$onReorder(oldIndex, newIndex);\n                });\n              }\n            },\n            canSwipe: function() {\n              return listCtrl.canSwipeItems();\n            }\n          });\n\n          if (isDefined($attr.canSwipe)) {\n            $scope.$watch('!!(' + $attr.canSwipe + ')', function(value) {\n              listCtrl.canSwipeItems(value);\n            });\n          }\n          if (isDefined($attr.showDelete)) {\n            $scope.$watch('!!(' + $attr.showDelete + ')', function(value) {\n              listCtrl.showDelete(value);\n            });\n          }\n          if (isDefined($attr.showReorder)) {\n            $scope.$watch('!!(' + $attr.showReorder + ')', function(value) {\n              listCtrl.showReorder(value);\n            });\n          }\n\n          $scope.$watch(function() {\n            return listCtrl.showDelete();\n          }, function(isShown, wasShown) {\n            //Only use isShown=false if it was already shown\n            if (!isShown && !wasShown) { return; }\n\n            if (isShown) listCtrl.closeOptionButtons();\n            listCtrl.canSwipeItems(!isShown);\n\n            $element.children().toggleClass('list-left-editing', isShown);\n            $element.toggleClass('disable-pointer-events', isShown);\n\n            var deleteButton = jqLite($element[0].getElementsByClassName('item-delete'));\n            setButtonShown(deleteButton, listCtrl.showDelete);\n          });\n\n          $scope.$watch(function() {\n            return listCtrl.showReorder();\n          }, function(isShown, wasShown) {\n            //Only use isShown=false if it was already shown\n            if (!isShown && !wasShown) { return; }\n\n            if (isShown) listCtrl.closeOptionButtons();\n            listCtrl.canSwipeItems(!isShown);\n\n            $element.children().toggleClass('list-right-editing', isShown);\n            $element.toggleClass('disable-pointer-events', isShown);\n\n            var reorderButton = jqLite($element[0].getElementsByClassName('item-reorder'));\n            setButtonShown(reorderButton, listCtrl.showReorder);\n          });\n\n          function setButtonShown(el, shown) {\n            shown() && el.addClass('visible') || el.removeClass('active');\n            ionic.requestAnimationFrame(function() {\n              shown() && el.addClass('active') || el.removeClass('invisible');\n            });\n          }\n        }\n\n      };\n    }\n  };\n}]);\n\n/**\n * @ngdoc directive\n * @name menuClose\n * @module ionic\n * @restrict AC\n *\n * @description\n * Closes a side menu which is currently opened.\n *\n * @usage\n * Below is an example of a link within a side menu. Tapping this link would\n * automatically close the currently opened menu.\n *\n * ```html\n * <a menu-close href=\"#/home\" class=\"item\">Home</a>\n * ```\n */\nIonicModule\n.directive('menuClose', ['$ionicViewService', function($ionicViewService) {\n  return {\n    restrict: 'AC',\n    require: '^ionSideMenus',\n    link: function($scope, $element, $attr, sideMenuCtrl) {\n      $element.bind('click', function(){\n        sideMenuCtrl.close();\n      });\n    }\n  };\n}]);\n\n/**\n * @ngdoc directive\n * @name menuToggle\n * @module ionic\n * @restrict AC\n *\n * @description\n * Toggle a side menu on the given side\n *\n * @usage\n * Below is an example of a link within a nav bar. Tapping this link would\n * automatically open the given side menu\n *\n * ```html\n * <ion-view>\n *   <ion-nav-buttons side=\"left\">\n *    <button menu-toggle=\"left\" class=\"button button-icon icon ion-navicon\"></button>\n *   </ion-nav-buttons>\n *  ...\n * </ion-view>\n * ```\n */\nIonicModule\n.directive('menuToggle', ['$ionicViewService', function($ionicViewService) {\n  return {\n    restrict: 'AC',\n    require: '^ionSideMenus',\n    link: function($scope, $element, $attr, sideMenuCtrl) {\n      var side = $attr.menuToggle || 'left';\n      $element.bind('click', function(){\n        if(side === 'left') {\n          sideMenuCtrl.toggleLeft();\n        } else if(side === 'right') {\n          sideMenuCtrl.toggleRight();\n        }\n      });\n    }\n  };\n}]);\n\n\n/*\n * We don't document the ionModal directive, we instead document\n * the $ionicModal service\n */\nIonicModule\n.directive('ionModal', [function() {\n  return {\n    restrict: 'E',\n    transclude: true,\n    replace: true,\n    controller: [function(){}],\n    template: '<div class=\"modal-backdrop\">' +\n                '<div class=\"modal-wrapper\" ng-transclude></div>' +\n                '</div>'\n  };\n}]);\n\nIonicModule\n.directive('ionModalView', function() {\n  return {\n    restrict: 'E',\n    compile: function(element, attr) {\n      element.addClass('modal');\n    }\n  };\n});\n\n/**\n * @ngdoc directive\n * @name ionNavBackButton\n * @module ionic\n * @restrict E\n * @parent ionNavBar\n * @description\n * Creates a back button inside an {@link ionic.directive:ionNavBar}.\n *\n * Will show up when the user is able to go back in the current navigation stack.\n *\n * By default, will go back when clicked.  If you wish for more advanced behavior, see the\n * examples below.\n *\n * @usage\n *\n * With default click action:\n *\n * ```html\n * <ion-nav-bar>\n *   <ion-nav-back-button class=\"button-clear\">\n *     <i class=\"ion-arrow-left-c\"></i> Back\n *   </ion-nav-back-button>\n * </ion-nav-bar>\n * ```\n *\n * With custom click action, using {@link ionic.service:$ionicNavBarDelegate}:\n *\n * ```html\n * <ion-nav-bar ng-controller=\"MyCtrl\">\n *   <ion-nav-back-button class=\"button-clear\"\n *     ng-click=\"goBack()\">\n *     <i class=\"ion-arrow-left-c\"></i> Back\n *   </ion-nav-back-button>\n * </ion-nav-bar>\n * ```\n * ```js\n * function MyCtrl($scope, $ionicNavBarDelegate) {\n *   $scope.goBack = function() {\n *     $ionicNavBarDelegate.back();\n *   };\n * }\n * ```\n *\n * Displaying the previous title on the back button, again using\n * {@link ionic.service:$ionicNavBarDelegate}.\n *\n * ```html\n * <ion-nav-bar ng-controller=\"MyCtrl\">\n *   <ion-nav-back-button class=\"button-icon\">\n *     <i class=\"icon ion-arrow-left-c\"></i>{% raw %}{{getPreviousTitle() || 'Back'}}{% endraw %}\n *   </ion-nav-back-button>\n * </ion-nav-bar>\n * ```\n * ```js\n * function MyCtrl($scope, $ionicNavBarDelegate) {\n *   $scope.getPreviousTitle = function() {\n *     return $ionicNavBarDelegate.getPreviousTitle();\n *   };\n * }\n * ```\n */\nIonicModule\n.directive('ionNavBackButton', [\n  '$animate',\n  '$rootScope',\n  '$sanitize',\n  '$ionicNavBarConfig',\n  '$ionicNgClick',\nfunction($animate, $rootScope, $sanitize, $ionicNavBarConfig, $ionicNgClick) {\n  var backIsShown = false;\n  //If the current viewstate does not allow a back button,\n  //always hide it.\n  $rootScope.$on('$viewHistory.historyChange', function(e, data) {\n    backIsShown = !!data.showBack;\n  });\n  return {\n    restrict: 'E',\n    require: '^ionNavBar',\n    compile: function(tElement, tAttrs) {\n      tElement.addClass('button back-button ng-hide');\n\n      var hasIconChild = !!(tElement.html() || '').match(/class=.*?ion-/);\n\n      return function($scope, $element, $attr, navBarCtrl) {\n\n        // Add a default back button icon based on the nav config, unless one is set\n        if (!hasIconChild && $element[0].className.indexOf('ion-') === -1) {\n          $element.addClass($ionicNavBarConfig.backButtonIcon);\n        }\n\n        //Default to ngClick going back, but don't override a custom one\n        if (!isDefined($attr.ngClick)) {\n          $ionicNgClick($scope, $element, navBarCtrl.back);\n        }\n\n        //Make sure both that a backButton is allowed in the first place,\n        //and that it is shown by the current view.\n        $scope.$watch(function() {\n          if(isDefined($attr.fromTitle)) {\n            $element[0].innerHTML = '<span class=\"back-button-title\">' + $sanitize($scope.oldTitle) + '</span>';\n          }\n          return !!(backIsShown && $scope.backButtonShown);\n        }, ionic.animationFrameThrottle(function(show) {\n          if (show) $animate.removeClass($element, 'ng-hide');\n          else $animate.addClass($element, 'ng-hide');\n        }));\n      };\n    }\n  };\n}]);\n\n\nIonicModule.constant('$ionicNavBarConfig', {\n  transition: 'nav-title-slide-ios7',\n  alignTitle: 'center',\n  backButtonIcon: 'ion-ios7-arrow-back'\n});\n\n/**\n * @ngdoc directive\n * @name ionNavBar\n * @module ionic\n * @delegate ionic.service:$ionicNavBarDelegate\n * @restrict E\n *\n * @description\n * If we have an {@link ionic.directive:ionNavView} directive, we can also create an\n * `<ion-nav-bar>`, which will create a topbar that updates as the application state changes.\n *\n * We can add a back button by putting an {@link ionic.directive:ionNavBackButton} inside.\n *\n * We can add buttons depending on the currently visible view using\n * {@link ionic.directive:ionNavButtons}.\n *\n * Add an [animation class](/docs/v1/components#animations) to the element via the\n * `animation` attribute to enable animated changing of titles \n * (recommended: 'nav-title-slide-ios7').\n *\n * Note that the ion-nav-bar element will only work correctly if your content has an\n * ionView around it.\n *\n * @usage\n *\n * ```html\n * <body ng-app=\"starter\">\n *   <!-- The nav bar that will be updated as we navigate -->\n *   <ion-nav-bar class=\"bar-positive\" animation=\"nav-title-slide-ios7\">\n *   </ion-nav-bar>\n *\n *   <!-- where the initial view template will be rendered -->\n *   <ion-nav-view>\n *     <ion-view>\n *       <ion-content>Hello!</ion-content>\n *     </ion-view>\n *   </ion-nav-view>\n * </body>\n * ```\n *\n * @param {string=} delegate-handle The handle used to identify this navBar\n * with {@link ionic.service:$ionicNavBarDelegate}.\n * @param align-title {string=} Where to align the title of the navbar.\n * Available: 'left', 'right', 'center'. Defaults to 'center'.\n * @param {boolean=} no-tap-scroll By default, the navbar will scroll the content\n * to the top when tapped.  Set no-tap-scroll to true to disable this behavior.\n *\n * </table><br/>\n *\n * ### Alternative Usage\n *\n * Alternatively, you may put ion-nav-bar inside of each individual view's ion-view element.\n * This will allow you to have the whole navbar, not just its contents, transition every view change.\n *\n * This is similar to using a header bar inside your ion-view, except it will have all the power of a navbar.\n *\n * If you do this, simply put nav buttons inside the navbar itself; do not use `<ion-nav-buttons>`.\n *\n *\n * ```html\n * <ion-view title=\"myTitle\">\n *   <ion-nav-bar class=\"bar-positive\">\n *     <ion-nav-back-button>\n *       Back\n *     </ion-nav-back-button>\n *     <div class=\"buttons right-buttons\">\n *       <button class=\"button\">\n *         Right Button\n *       </button>\n *     </div>\n *   </ion-nav-bar>\n * </ion-view>\n * ```\n */\nIonicModule\n.directive('ionNavBar', [\n  '$ionicViewService',\n  '$rootScope',\n  '$animate',\n  '$compile',\n  '$ionicNavBarConfig',\nfunction($ionicViewService, $rootScope, $animate, $compile, $ionicNavBarConfig) {\n\n  return {\n    restrict: 'E',\n    controller: '$ionicNavBar',\n    scope: true,\n    compile: function(tElement, tAttrs) {\n      //We cannot transclude here because it breaks element.data() inheritance on compile\n      tElement\n        .addClass('bar bar-header nav-bar')\n        .append(\n          '<div class=\"buttons left-buttons\"> ' +\n          '</div>' +\n          '<h1 ng-bind-html=\"title\" class=\"title\"></h1>' +\n          '<div class=\"buttons right-buttons\"> ' +\n          '</div>'\n        );\n\n      if (isDefined(tAttrs.animation)) {\n        tElement.addClass(tAttrs.animation);\n      } else {\n        tElement.addClass($ionicNavBarConfig.transition);\n      }\n\n      return { pre: prelink };\n      function prelink($scope, $element, $attr, navBarCtrl) {\n        navBarCtrl._headerBarView = new ionic.views.HeaderBar({\n          el: $element[0],\n          alignTitle: $attr.alignTitle || $ionicNavBarConfig.alignTitle || 'center'\n        });\n\n        //defaults\n        $scope.backButtonShown = false;\n        $scope.shouldAnimate = true;\n        $scope.isReverse = false;\n        $scope.isInvisible = true;\n\n        $scope.$on('$destroy', function() {\n          $scope.$parent.$hasHeader = false;\n        });\n\n        $scope.$watch(function() {\n          return ($scope.isReverse ? ' reverse' : '') +\n            ($scope.isInvisible ? ' invisible' : '') +\n            (!$scope.shouldAnimate ? ' no-animation' : '');\n        }, function(className, oldClassName) {\n          $element.removeClass(oldClassName);\n          $element.addClass(className);\n        });\n\n      }\n    }\n  };\n}]);\n\n\n/**\n * @ngdoc directive\n * @name ionNavButtons\n * @module ionic\n * @restrict E\n * @parent ionNavView\n *\n * @description\n * Use ionNavButtons to set the buttons on your {@link ionic.directive:ionNavBar}\n * from within an {@link ionic.directive:ionView}.\n *\n * Any buttons you declare will be placed onto the navbar's corresponding side,\n * and then destroyed when the user leaves their parent view.\n *\n * @usage\n * ```html\n * <ion-nav-bar>\n * </ion-nav-bar>\n * <ion-nav-view>\n *   <ion-view>\n *     <ion-nav-buttons side=\"left\">\n *       <button class=\"button\" ng-click=\"doSomething()\">\n *         I'm a button on the left of the navbar!\n *       </button>\n *     </ion-nav-buttons>\n *     <ion-content>\n *       Some super content here!\n *     </ion-content>\n *   </ion-view>\n * </ion-nav-view>\n * ```\n *\n * @param {string} side The side to place the buttons on in the parent\n * {@link ionic.directive:ionNavBar}. Available: 'left' or 'right'.\n */\nIonicModule\n.directive('ionNavButtons', ['$compile', '$animate', function($compile, $animate) {\n  return {\n    require: '^ionNavBar',\n    restrict: 'E',\n    compile: function($element, $attrs) {\n      var content = $element.contents().remove();\n      return function($scope, $element, $attrs, navBarCtrl) {\n        var navElement = $attrs.side === 'right' ?\n          navBarCtrl.rightButtonsElement :\n          navBarCtrl.leftButtonsElement;\n\n        //Put all of our inside buttons into their own span,\n        //so we can remove them all when this element dies -\n        //even if the buttons have changed through an ng-repeat or the like,\n        //we just remove their div parent and they are gone.\n        var buttons = jqLite('<span>').append(content);\n\n        //Compile buttons inside content so they have access to everything\n        //something inside content does (eg parent ionicScroll)\n        $element.append(buttons);\n        $compile(buttons)($scope);\n\n        //Append buttons to navbar\n        ionic.requestAnimationFrame(function() {\n          //If the scope is destroyed before raf runs, be sure not to enter\n          if (!$scope.$$destroyed) {\n            $animate.enter(buttons, navElement);\n          }\n        });\n\n        //When our ion-nav-buttons container is destroyed,\n        //destroy everything in the navbar\n        $scope.$on('$destroy', function() {\n          $animate.leave(buttons);\n        });\n\n        // The original element is just a completely empty <ion-nav-buttons> element.\n        // make it invisible just to be sure it doesn't change any layout\n        $element.css('display', 'none');\n      };\n    }\n  };\n}]);\n\n\n/**\n * @ngdoc directive\n * @name navClear\n * @module ionic\n * @restrict AC\n *\n * @description\n * nav-clear is an attribute directive which should be used with an element that changes\n * the view on click, for example an `<a href>` or a `<button ui-sref>`.\n *\n * nav-clear will cause the given element, when clicked, to disable the next view transition.\n * This directive is useful, for example, for links within a sideMenu.\n *\n * @usage\n * Below is a link in a side menu, with the nav-clear directive added to it.\n * Tapping this link will disable any animations that would normally occur\n * between views.\n *\n * ```html\n * <a nav-clear menu-close href=\"#/home\" class=\"item\">Home</a>\n * ```\n */\nIonicModule\n.directive('navClear', [\n  '$ionicViewService',\n  '$state',\n  '$location',\n  '$window',\n  '$rootScope',\nfunction($ionicViewService, $location, $state, $window, $rootScope) {\n  $rootScope.$on('$stateChangeError', function() {\n    $ionicViewService.nextViewOptions(null);\n  });\n  return {\n    priority: 100,\n    restrict: 'AC',\n    compile: function($element) {\n      return { pre: prelink };\n      function prelink($scope, $element, $attrs) {\n        var unregisterListener;\n        function listenForStateChange() {\n          unregisterListener = $scope.$on('$stateChangeStart', function() {\n            $ionicViewService.nextViewOptions({\n              disableAnimate: true,\n              disableBack: true\n            });\n            unregisterListener();\n          });\n          $window.setTimeout(unregisterListener, 300);\n        }\n\n        $element.on('click', listenForStateChange);\n      }\n    }\n  };\n}]);\n\nIonicModule.constant('$ionicNavViewConfig', {\n  transition: 'slide-left-right-ios7'\n});\n\n/**\n * @ngdoc directive\n * @name ionNavView\n * @module ionic\n * @restrict E\n * @codepen odqCz\n *\n * @description\n * As a user navigates throughout your app, Ionic is able to keep track of their\n * navigation history. By knowing their history, transitions between views\n * correctly slide either left or right, or no transition at all. An additional\n * benefit to Ionic's navigation system is its ability to manage multiple\n * histories.\n *\n * Ionic uses the AngularUI Router module so app interfaces can be organized\n * into various \"states\". Like Angular's core $route service, URLs can be used\n * to control the views. However, the AngularUI Router provides a more powerful\n * state manager in that states are bound to named, nested, and parallel views,\n * allowing more than one template to be rendered on the same page.\n * Additionally, each state is not required to be bound to a URL, and data can\n * be pushed to each state which allows much flexibility.\n *\n * The ionNavView directive is used to render templates in your application. Each template\n * is part of a state. States are usually mapped to a url, and are defined programatically\n * using angular-ui-router (see [their docs](https://github.com/angular-ui/ui-router/wiki),\n * and remember to replace ui-view with ion-nav-view in examples).\n *\n * @usage\n * In this example, we will create a navigation view that contains our different states for the app.\n *\n * To do this, in our markup we use ionNavView top level directive. To display a header bar we use\n * the {@link ionic.directive:ionNavBar} directive that updates as we navigate through the\n * navigation stack.\n *\n * You can use any [animation class](/docs/v1/components#animation) on the navView's `animation` attribute\n * to have its pages animate.\n *\n * Recommended for page transitions: 'slide-left-right', 'slide-left-right-ios7', 'slide-in-up'.\n *\n * ```html\n * <ion-nav-bar></ion-nav-bar>\n * <ion-nav-view animation=\"slide-left-right\">\n *   <!-- Center content -->\n * </ion-nav-view>\n * ```\n *\n * Next, we need to setup our states that will be rendered.\n *\n * ```js\n * var app = angular.module('myApp', ['ionic']);\n * app.config(function($stateProvider) {\n *   $stateProvider\n *   .state('index', {\n *     url: '/',\n *     templateUrl: 'home.html'\n *   })\n *   .state('music', {\n *     url: '/music',\n *     templateUrl: 'music.html'\n *   });\n * });\n * ```\n * Then on app start, $stateProvider will look at the url, see it matches the index state,\n * and then try to load home.html into the `<ion-nav-view>`.\n *\n * Pages are loaded by the URLs given. One simple way to create templates in Angular is to put\n * them directly into your HTML file and use the `<script type=\"text/ng-template\">` syntax.\n * So here is one way to put home.html into our app:\n *\n * ```html\n * <script id=\"home\" type=\"text/ng-template\">\n *   <!-- The title of the ion-view will be shown on the navbar -->\n *   <ion-view title=\"'Home'\">\n *     <ion-content ng-controller=\"HomeCtrl\">\n *       <!-- The content of the page -->\n *       <a href=\"#/music\">Go to music page!</a>\n *     </ion-content>\n *   </ion-view>\n * </script>\n * ```\n *\n * This is good to do because the template will be cached for very fast loading, instead of\n * having to fetch them from the network.\n *\n * Please visit [AngularUI Router's docs](https://github.com/angular-ui/ui-router/wiki) for\n * more info. Below is a great video by the AngularUI Router guys that may help to explain\n * how it all works:\n *\n * <iframe width=\"560\" height=\"315\" src=\"//www.youtube.com/embed/dqJRoh8MnBo\"\n * frameborder=\"0\" allowfullscreen></iframe>\n *\n * @param {string=} name A view name. The name should be unique amongst the other views in the\n * same state. You can have views of the same name that live in different states. For more\n * information, see ui-router's [ui-view documentation](http://angular-ui.github.io/ui-router/site/#/api/ui.router.state.directive:ui-view).\n */\nIonicModule\n.directive('ionNavView', [\n  '$ionicViewService',\n  '$state',\n  '$compile',\n  '$controller',\n  '$animate',\nfunction( $ionicViewService,   $state,   $compile,   $controller,   $animate) {\n  // IONIC's fork of Angular UI Router, v0.2.7\n  // the navView handles registering views in the history, which animation to use, and which\n  var viewIsUpdating = false;\n\n  var directive = {\n    restrict: 'E',\n    terminal: true,\n    priority: 2000,\n    transclude: true,\n    controller: function(){},\n    compile: function (element, attr, transclude) {\n      return function(scope, element, attr, navViewCtrl) {\n        var viewScope, viewLocals,\n          name = attr[directive.name] || attr.name || '',\n          onloadExp = attr.onload || '',\n          initialView = transclude(scope);\n\n        // Put back the compiled initial view\n        element.append(initialView);\n\n        // Find the details of the parent view directive (if any) and use it\n        // to derive our own qualified view name, then hang our own details\n        // off the DOM so child directives can find it.\n        var parent = element.parent().inheritedData('$uiView');\n        if (name.indexOf('@') < 0) name  = name + '@' + ((parent && parent.state) ? parent.state.name : '');\n        var view = { name: name, state: null };\n        element.data('$uiView', view);\n\n        var eventHook = function() {\n          if (viewIsUpdating) return;\n          viewIsUpdating = true;\n\n          try { updateView(true); } catch (e) {\n            viewIsUpdating = false;\n            throw e;\n          }\n          viewIsUpdating = false;\n        };\n\n        scope.$on('$stateChangeSuccess', eventHook);\n        // scope.$on('$viewContentLoading', eventHook);\n        updateView(false);\n\n        function updateView(doAnimate) {\n          //===false because $animate.enabled() is a noop without angular-animate included\n          if ($animate.enabled() === false) {\n            doAnimate = false;\n          }\n\n          var locals = $state.$current && $state.$current.locals[name];\n          if (locals === viewLocals) return; // nothing to do\n          var renderer = $ionicViewService.getRenderer(element, attr, scope);\n\n          // Destroy previous view scope\n          if (viewScope) {\n            viewScope.$destroy();\n            viewScope = null;\n          }\n\n          if (!locals) {\n            viewLocals = null;\n            view.state = null;\n\n            // Restore the initial view\n            return element.append(initialView);\n          }\n\n          var newElement = jqLite('<div></div>').html(locals.$template).contents();\n          var viewRegisterData = renderer().register(newElement);\n\n          // Remove existing content\n          renderer(doAnimate).leave();\n\n          viewLocals = locals;\n          view.state = locals.$$state;\n\n          renderer(doAnimate).enter(newElement);\n\n          var link = $compile(newElement);\n          viewScope = scope.$new();\n\n          viewScope.$navDirection = viewRegisterData.navDirection;\n\n          if (locals.$$controller) {\n            locals.$scope = viewScope;\n            var controller = $controller(locals.$$controller, locals);\n            element.children().data('$ngControllerController', controller);\n          }\n          link(viewScope);\n\n          var viewHistoryData = $ionicViewService._getViewById(viewRegisterData.viewId) || {};\n          viewScope.$broadcast('$viewContentLoaded', viewHistoryData);\n\n          if (onloadExp) viewScope.$eval(onloadExp);\n\n          newElement = null;\n        }\n      };\n    }\n  };\n  return directive;\n}]);\n\n\nIonicModule\n\n.config(['$provide', function($provide) {\n  $provide.decorator('ngClickDirective', ['$delegate', function($delegate) {\n    // drop the default ngClick directive\n    $delegate.shift();\n    return $delegate;\n  }]);\n}])\n\n/**\n * @private\n */\n.factory('$ionicNgClick', ['$parse', function($parse) {\n  return function(scope, element, clickExpr) {\n    var clickHandler = angular.isFunction(clickExpr) ?\n      clickExpr :\n      $parse(clickExpr);\n\n    element.on('click', function(event) {\n      scope.$apply(function() {\n        clickHandler(scope, {$event: (event)});\n      });\n    });\n\n    // Hack for iOS Safari's benefit. It goes searching for onclick handlers and is liable to click\n    // something else nearby.\n    element.onclick = function(event) { };\n  };\n}])\n\n.directive('ngClick', ['$ionicNgClick', function($ionicNgClick) {\n  return function(scope, element, attr) {\n    $ionicNgClick(scope, element, attr.ngClick);\n  };\n}])\n\n.directive('ionStopEvent', function () {\n  return {\n    restrict: 'A',\n    link: function (scope, element, attr) {\n      element.bind(attr.ionStopEvent, eventStopPropagation);\n    }\n  };\n});\nfunction eventStopPropagation(e) {\n  e.stopPropagation();\n}\n\n\n/**\n * @ngdoc directive\n * @name ionPane\n * @module ionic\n * @restrict E\n *\n * @description A simple container that fits content, with no side effects.  Adds the 'pane' class to the element.\n */\nIonicModule\n.directive('ionPane', function() {\n  return {\n    restrict: 'E',\n    link: function(scope, element, attr) {\n      element.addClass('pane');\n    }\n  };\n});\n\n/*\n * We don't document the ionPopover directive, we instead document\n * the $ionicPopover service\n */\nIonicModule\n.directive('ionPopover', [function() {\n  return {\n    restrict: 'E',\n    transclude: true,\n    replace: true,\n    controller: [function(){}],\n    template: '<div class=\"popover-backdrop\">' +\n                '<div class=\"popover-wrapper\" ng-transclude></div>' +\n              '</div>'\n  };\n}]);\n\nIonicModule\n.directive('ionPopoverView', function() {\n  return {\n    restrict: 'E',\n    compile: function(element) {\n      element.append( angular.element('<div class=\"popover-arrow\"></div>') );\n      element.addClass('popover');\n    }\n  };\n});\n\n/**\n * @ngdoc directive\n * @name ionRadio\n * @module ionic\n * @restrict E\n * @codepen saoBG\n * @description\n * The radio directive is no different than the HTML radio input, except it's styled differently.\n *\n * Radio behaves like any [AngularJS radio](http://docs.angularjs.org/api/ng/input/input[radio]).\n *\n * @usage\n * ```html\n * <ion-radio ng-model=\"choice\" ng-value=\"'A'\">Choose A</ion-radio>\n * <ion-radio ng-model=\"choice\" ng-value=\"'B'\">Choose B</ion-radio>\n * <ion-radio ng-model=\"choice\" ng-value=\"'C'\">Choose C</ion-radio>\n * ```\n */\nIonicModule\n.directive('ionRadio', function() {\n  return {\n    restrict: 'E',\n    replace: true,\n    require: '?ngModel',\n    transclude: true,\n    template:\n      '<label class=\"item item-radio\">' +\n        '<input type=\"radio\" name=\"radio-group\">' +\n        '<div class=\"item-content disable-pointer-events\" ng-transclude></div>' +\n        '<i class=\"radio-icon disable-pointer-events icon ion-checkmark\"></i>' +\n      '</label>',\n\n    compile: function(element, attr) {\n      if(attr.icon) element.children().eq(2).removeClass('ion-checkmark').addClass(attr.icon);\n      var input = element.find('input');\n      forEach({\n          'name': attr.name,\n          'value': attr.value,\n          'disabled': attr.disabled,\n          'ng-value': attr.ngValue,\n          'ng-model': attr.ngModel,\n          'ng-disabled': attr.ngDisabled,\n          'ng-change': attr.ngChange\n      }, function(value, name) {\n        if (isDefined(value)) {\n            input.attr(name, value);\n          }\n      });\n\n      return function(scope, element, attr) {\n        scope.getValue = function() {\n          return scope.ngValue || attr.value;\n        };\n      };\n    }\n  };\n});\n\n\n/**\n * @ngdoc directive\n * @name ionRefresher\n * @module ionic\n * @restrict E\n * @parent ionic.directive:ionContent, ionic.directive:ionScroll\n * @description\n * Allows you to add pull-to-refresh to a scrollView.\n *\n * Place it as the first child of your {@link ionic.directive:ionContent} or\n * {@link ionic.directive:ionScroll} element.\n *\n * When refreshing is complete, $broadcast the 'scroll.refreshComplete' event\n * from your controller.\n *\n * @usage\n *\n * ```html\n * <ion-content ng-controller=\"MyController\">\n *   <ion-refresher\n *     pulling-text=\"Pull to refresh...\"\n *     on-refresh=\"doRefresh()\">\n *   </ion-refresher>\n *   <ion-list>\n *     <ion-item ng-repeat=\"item in items\"></ion-item>\n *   </ion-list>\n * </ion-content>\n * ```\n * ```js\n * angular.module('testApp', ['ionic'])\n * .controller('MyController', function($scope, $http) {\n *   $scope.items = [1,2,3];\n *   $scope.doRefresh = function() {\n *     $http.get('/new-items')\n *      .success(function(newItems) {\n *        $scope.items = newItems;\n *      })\n *      .finally(function() {\n *        // Stop the ion-refresher from spinning\n *        $scope.$broadcast('scroll.refreshComplete');\n *      });\n *   };\n * });\n * ```\n *\n * @param {expression=} on-refresh Called when the user pulls down enough and lets go\n * of the refresher.\n * @param {expression=} on-pulling Called when the user starts to pull down\n * on the refresher.\n * @param {string=} pulling-icon The icon to display while the user is pulling down.\n * Default: 'ion-arrow-down-c'.\n * @param {string=} pulling-text The text to display while the user is pulling down.\n * @param {string=} refreshing-icon The icon to display after user lets go of the\n * refresher.\n * @param {string=} refreshing-text The text to display after the user lets go of\n * the refresher.\n *\n */\nIonicModule\n.directive('ionRefresher', ['$ionicBind', function($ionicBind) {\n  return {\n    restrict: 'E',\n    replace: true,\n    require: '^$ionicScroll',\n    template:\n    '<div class=\"scroll-refresher\">' +\n      '<div class=\"ionic-refresher-content\" ' +\n      'ng-class=\"{\\'ionic-refresher-with-text\\': pullingText || refreshingText}\">' +\n        '<div class=\"icon-pulling\">' +\n          '<i class=\"icon {{pullingIcon}}\"></i>' +\n        '</div>' +\n        '<div class=\"text-pulling\" ng-bind-html=\"pullingText\"></div>' +\n        '<i class=\"icon {{refreshingIcon}} icon-refreshing\"></i>' +\n        '<div class=\"text-refreshing\" ng-bind-html=\"refreshingText\"></div>' +\n      '</div>' +\n    '</div>',\n    compile: function($element, $attrs) {\n      if (angular.isUndefined($attrs.pullingIcon)) {\n        $attrs.$set('pullingIcon', 'ion-arrow-down-c');\n      }\n      if (angular.isUndefined($attrs.refreshingIcon)) {\n        $attrs.$set('refreshingIcon', 'ion-loading-d');\n      }\n      return function($scope, $element, $attrs, scrollCtrl) {\n        $ionicBind($scope, $attrs, {\n          pullingIcon: '@',\n          pullingText: '@',\n          refreshingIcon: '@',\n          refreshingText: '@',\n          $onRefresh: '&onRefresh',\n          $onPulling: '&onPulling'\n        });\n\n        scrollCtrl._setRefresher($scope, $element[0]);\n        $scope.$on('scroll.refreshComplete', function() {\n          $scope.$evalAsync(function() {\n            $element[0].classList.remove('active');\n            scrollCtrl.scrollView.finishPullToRefresh();\n          });\n        });\n      };\n    }\n  };\n}]);\n\n/**\n * @ngdoc directive\n * @name ionScroll\n * @module ionic\n * @delegate ionic.service:$ionicScrollDelegate\n * @codepen mwFuh\n * @restrict E\n *\n * @description\n * Creates a scrollable container for all content inside.\n * \n * @usage\n *\n * Basic usage:\n *\n * ```html\n * <ion-scroll zooming=\"true\" direction=\"xy\" style=\"width: 500px; height: 500px\">\n *   <div style=\"width: 5000px; height: 5000px; background: url('https://upload.wikimedia.org/wikipedia/commons/a/ad/Europe_geological_map-en.jpg') repeat\"></div>\n *  </ion-scroll>\n * ```\n * \n * Note that it's important to set the height of the scroll box as well as the height of the inner\n * content to enable scrolling. This makes it possible to have full control over scrollable areas.\n * \n * If you'd just like to have a center content scrolling area, use {@link ionic.directive:ionContent} instead.\n *\n * @param {string=} delegate-handle The handle used to identify this scrollView\n * with {@link ionic.service:$ionicScrollDelegate}.\n * @param {string=} direction Which way to scroll. 'x' or 'y' or 'xy'. Default 'y'.\n * @param {boolean=} paging Whether to scroll with paging.\n * @param {expression=} on-refresh Called on pull-to-refresh, triggered by an {@link ionic.directive:ionRefresher}.\n * @param {expression=} on-scroll Called whenever the user scrolls.\n * @param {boolean=} scrollbar-x Whether to show the horizontal scrollbar. Default true.\n * @param {boolean=} scrollbar-y Whether to show the vertical scrollbar. Default true.\n * @param {boolean=} zooming Whether to support pinch-to-zoom\n * @param {integer=} min-zoom The smallest zoom amount allowed (default is 0.5)\n * @param {integer=} max-zoom The largest zoom amount allowed (default is 3)\n * @param {boolean=} has-bouncing Whether to allow scrolling to bounce past the edges\n * of the content.  Defaults to true on iOS, false on Android.\n */\nIonicModule\n.directive('ionScroll', [\n  '$timeout',\n  '$controller',\n  '$ionicBind',\nfunction($timeout, $controller, $ionicBind) {\n  return {\n    restrict: 'E',\n    scope: true,\n    controller: function() {},\n    compile: function(element, attr) {\n      element.addClass('scroll-view ionic-scroll');\n\n      //We cannot transclude here because it breaks element.data() inheritance on compile\n      var innerElement = jqLite('<div class=\"scroll\"></div>');\n      innerElement.append(element.contents());\n      element.append(innerElement);\n\n      return { pre: prelink };\n      function prelink($scope, $element, $attr) {\n        var scrollView, scrollCtrl;\n\n        $ionicBind($scope, $attr, {\n          direction: '@',\n          paging: '@',\n          $onScroll: '&onScroll',\n          scroll: '@',\n          scrollbarX: '@',\n          scrollbarY: '@',\n          zooming: '@',\n          minZoom: '@',\n          maxZoom: '@'\n        });\n        $scope.direction = $scope.direction || 'y';\n\n        if (angular.isDefined($attr.padding)) {\n          $scope.$watch($attr.padding, function(newVal) {\n            innerElement.toggleClass('padding', !!newVal);\n          });\n        }\n        if($scope.$eval($scope.paging) === true) {\n          innerElement.addClass('scroll-paging');\n        }\n\n        if(!$scope.direction) { $scope.direction = 'y'; }\n        var isPaging = $scope.$eval($scope.paging) === true;\n\n        var scrollViewOptions= {\n          el: $element[0],\n          delegateHandle: $attr.delegateHandle,\n          bouncing: $scope.$eval($attr.hasBouncing),\n          paging: isPaging,\n          scrollbarX: $scope.$eval($scope.scrollbarX) !== false,\n          scrollbarY: $scope.$eval($scope.scrollbarY) !== false,\n          scrollingX: $scope.direction.indexOf('x') >= 0,\n          scrollingY: $scope.direction.indexOf('y') >= 0,\n          zooming: $scope.$eval($scope.zooming) === true,\n          maxZoom: $scope.$eval($scope.maxZoom) || 3,\n          minZoom: $scope.$eval($scope.minZoom) || 0.5\n        };\n        if (isPaging) {\n          scrollViewOptions.speedMultiplier = 0.8;\n          scrollViewOptions.bouncing = false;\n        }\n\n        scrollCtrl = $controller('$ionicScroll', {\n          $scope: $scope,\n          scrollViewOptions: scrollViewOptions\n        });\n        scrollView = $scope.$parent.scrollView = scrollCtrl.scrollView;\n      }\n    }\n  };\n}]);\n\n/**\n * @ngdoc directive\n * @name ionSideMenu\n * @module ionic\n * @restrict E\n * @parent ionic.directive:ionSideMenus\n *\n * @description\n * A container for a side menu, sibling to an {@link ionic.directive:ionSideMenuContent} directive.\n *\n * @usage\n * ```html\n * <ion-side-menu\n *   side=\"left\"\n *   width=\"myWidthValue + 20\"\n *   is-enabled=\"shouldLeftSideMenuBeEnabled()\">\n * </ion-side-menu>\n * ```\n * For a complete side menu example, see the\n * {@link ionic.directive:ionSideMenus} documentation.\n *\n * @param {string} side Which side the side menu is currently on.  Allowed values: 'left' or 'right'.\n * @param {boolean=} is-enabled Whether this side menu is enabled.\n * @param {number=} width How many pixels wide the side menu should be.  Defaults to 275.\n */\nIonicModule\n.directive('ionSideMenu', function() {\n  return {\n    restrict: 'E',\n    require: '^ionSideMenus',\n    scope: true,\n    compile: function(element, attr) {\n      angular.isUndefined(attr.isEnabled) && attr.$set('isEnabled', 'true');\n      angular.isUndefined(attr.width) && attr.$set('width', '275');\n\n      element.addClass('menu menu-' + attr.side);\n\n      return function($scope, $element, $attr, sideMenuCtrl) {\n        $scope.side = $attr.side || 'left';\n\n        var sideMenu = sideMenuCtrl[$scope.side] = new ionic.views.SideMenu({\n          width: 275,\n          el: $element[0],\n          isEnabled: true\n        });\n\n        $scope.$watch($attr.width, function(val) {\n          var numberVal = +val;\n          if (numberVal && numberVal == val) {\n            sideMenu.setWidth(+val);\n          }\n        });\n        $scope.$watch($attr.isEnabled, function(val) {\n          sideMenu.setIsEnabled(!!val);\n        });\n      };\n    }\n  };\n});\n\n\n/**\n * @ngdoc directive\n * @name ionSideMenuContent\n * @module ionic\n * @restrict E\n * @parent ionic.directive:ionSideMenus\n *\n * @description\n * A container for the main visible content, sibling to one or more\n * {@link ionic.directive:ionSideMenu} directives.\n *\n * @usage\n * ```html\n * <ion-side-menu-content\n *   edge-drag-threshold=\"true\"\n *   drag-content=\"true\">\n * </ion-side-menu-content>\n * ```\n * For a complete side menu example, see the\n * {@link ionic.directive:ionSideMenus} documentation.\n *\n * @param {boolean=} drag-content Whether the content can be dragged. Default true.\n * @param {boolean|number=} edge-drag-threshold Whether the content drag can only start if it is below a certain threshold distance from the edge of the screen.  Default false. Accepts three types of values:\n   *  - If a non-zero number is given, that many pixels is used as the maximum allowed distance from the edge that starts dragging the side menu.\n   *  - If true is given, the default number of pixels (25) is used as the maximum allowed distance.\n   *  - If false or 0 is given, the edge drag threshold is disabled, and dragging from anywhere on the content is allowed.\n *\n */\nIonicModule\n.directive('ionSideMenuContent', [\n  '$timeout',\n  '$ionicGesture',\nfunction($timeout, $ionicGesture) {\n\n  return {\n    restrict: 'EA', //DEPRECATED 'A'\n    require: '^ionSideMenus',\n    scope: true,\n    compile: function(element, attr) {\n      return { pre: prelink };\n      function prelink($scope, $element, $attr, sideMenuCtrl) {\n\n        $element.addClass('menu-content pane');\n\n        if (isDefined(attr.dragContent)) {\n          $scope.$watch(attr.dragContent, function(value) {\n            sideMenuCtrl.canDragContent(value);\n          });\n        } else {\n          sideMenuCtrl.canDragContent(true);\n        }\n\n        if (isDefined(attr.edgeDragThreshold)) {\n          $scope.$watch(attr.edgeDragThreshold, function(value) {\n            sideMenuCtrl.edgeDragThreshold(value);\n          });\n         }\n\n        var defaultPrevented = false;\n        var isDragging = false;\n\n        // Listen for taps on the content to close the menu\n        function contentTap(e) {\n          if(sideMenuCtrl.getOpenAmount() !== 0) {\n            sideMenuCtrl.close();\n            e.gesture.srcEvent.preventDefault();\n          }\n        }\n        ionic.on('tap', contentTap, $element[0]);\n\n        var dragFn = function(e) {\n          if(defaultPrevented || !sideMenuCtrl.isDraggableTarget(e)) return;\n          isDragging = true;\n          sideMenuCtrl._handleDrag(e);\n          e.gesture.srcEvent.preventDefault();\n        };\n\n        var dragVertFn = function(e) {\n          if(isDragging) {\n            e.gesture.srcEvent.preventDefault();\n          }\n        };\n\n        //var dragGesture = Gesture.on('drag', dragFn, $element);\n        var dragRightGesture = $ionicGesture.on('dragright', dragFn, $element);\n        var dragLeftGesture = $ionicGesture.on('dragleft', dragFn, $element);\n        var dragUpGesture = $ionicGesture.on('dragup', dragVertFn, $element);\n        var dragDownGesture = $ionicGesture.on('dragdown', dragVertFn, $element);\n\n        var dragReleaseFn = function(e) {\n          isDragging = false;\n          if(!defaultPrevented) {\n            sideMenuCtrl._endDrag(e);\n          }\n          defaultPrevented = false;\n        };\n\n        var releaseGesture = $ionicGesture.on('release', dragReleaseFn, $element);\n\n        sideMenuCtrl.setContent({\n          element: element[0],\n          onDrag: function(e) {},\n          endDrag: function(e) {},\n          getTranslateX: function() {\n            return $scope.sideMenuContentTranslateX || 0;\n          },\n          setTranslateX: ionic.animationFrameThrottle(function(amount) {\n            $element[0].style[ionic.CSS.TRANSFORM] = 'translate3d(' + amount + 'px, 0, 0)';\n            $timeout(function() {\n              $scope.sideMenuContentTranslateX = amount;\n            });\n          }),\n          enableAnimation: function() {\n            //this.el.classList.add(this.animateClass);\n            $scope.animationEnabled = true;\n            $element[0].classList.add('menu-animated');\n          },\n          disableAnimation: function() {\n            //this.el.classList.remove(this.animateClass);\n            $scope.animationEnabled = false;\n            $element[0].classList.remove('menu-animated');\n          }\n        });\n\n        // Cleanup\n        $scope.$on('$destroy', function() {\n          $ionicGesture.off(dragLeftGesture, 'dragleft', dragFn);\n          $ionicGesture.off(dragRightGesture, 'dragright', dragFn);\n          $ionicGesture.off(dragUpGesture, 'dragup', dragFn);\n          $ionicGesture.off(dragDownGesture, 'dragdown', dragFn);\n          $ionicGesture.off(releaseGesture, 'release', dragReleaseFn);\n          ionic.off('tap', contentTap, $element[0]);\n        });\n      }\n    }\n  };\n}]);\n\nIonicModule\n\n/**\n * @ngdoc directive\n * @name ionSideMenus\n * @module ionic\n * @delegate ionic.service:$ionicSideMenuDelegate\n * @restrict E\n *\n * @description\n * A container element for side menu(s) and the main content. Allows the left\n * and/or right side menu to be toggled by dragging the main content area side\n * to side.\n *\n * To automatically close an opened menu you can add the {@link ionic.directive:menuClose}\n * attribute directive. Including the `menu-close` attribute is usually added to\n * links and buttons within `ion-side-menu` content, so that when the element is\n * clicked then the opened side menu will automatically close.\n *\n * ![Side Menu](https://s3.amazonaws.com/ionicframework.com/docs/v1/controllers/sidemenu.gif)\n *\n * For more information on side menus, check out:\n *\n * - {@link ionic.directive:ionSideMenuContent}\n * - {@link ionic.directive:ionSideMenu}\n * - {@link ionic.directive:menuClose}\n *\n * @usage\n * To use side menus, add an `<ion-side-menus>` parent element,\n * an `<ion-side-menu-content>` for the center content,\n * and one or more `<ion-side-menu>` directives.\n *\n * ```html\n * <ion-side-menus>\n *   <!-- Center content -->\n *   <ion-side-menu-content ng-controller=\"ContentController\">\n *   </ion-side-menu-content>\n *\n *   <!-- Left menu -->\n *   <ion-side-menu side=\"left\">\n *   </ion-side-menu>\n *\n *   <!-- Right menu -->\n *   <ion-side-menu side=\"right\">\n *   </ion-side-menu>\n * </ion-side-menus>\n * ```\n * ```js\n * function ContentController($scope, $ionicSideMenuDelegate) {\n *   $scope.toggleLeft = function() {\n *     $ionicSideMenuDelegate.toggleLeft();\n *   };\n * }\n * ```\n *\n * @param {string=} delegate-handle The handle used to identify this side menu\n * with {@link ionic.service:$ionicSideMenuDelegate}.\n *\n */\n.directive('ionSideMenus', ['$document', function($document) {\n  return {\n    restrict: 'ECA',\n    controller: '$ionicSideMenus',\n    compile: function(element, attr) {\n      attr.$set('class', (attr['class'] || '') + ' view');\n\n      return function($scope) {\n        $scope.$on('$destroy', function(){\n          $document[0].body.classList.remove('menu-open');\n        });\n\n      };\n    }\n  };\n}]);\n\n\n/**\n * @ngdoc directive\n * @name ionSlideBox\n * @module ionic\n * @delegate ionic.service:$ionicSlideBoxDelegate\n * @restrict E\n * @description\n * The Slide Box is a multi-page container where each page can be swiped or dragged between:\n *\n * ![SlideBox](https://s3.amazonaws.com/ionicframework.com/docs/v1/controllers/slideBox.gif)\n *\n * @usage\n * ```html\n * <ion-slide-box on-slide-changed=\"slideHasChanged($index)\">\n *   <ion-slide>\n *     <div class=\"box blue\"><h1>BLUE</h1></div>\n *   </ion-slide>\n *   <ion-slide>\n *     <div class=\"box yellow\"><h1>YELLOW</h1></div>\n *   </ion-slide>\n *   <ion-slide>\n *     <div class=\"box pink\"><h1>PINK</h1></div>\n *   </ion-slide>\n * </ion-slide-box>\n * ```\n *\n * @param {string=} delegate-handle The handle used to identify this slideBox\n * with {@link ionic.service:$ionicSlideBoxDelegate}.\n * @param {boolean=} does-continue Whether the slide box should loop.\n * @param {boolean=} auto-play Whether the slide box should automatically slide. Default true if does-continue is true.\n * @param {number=} slide-interval How many milliseconds to wait to change slides (if does-continue is true). Defaults to 4000.\n * @param {boolean=} show-pager Whether a pager should be shown for this slide box.\n * @param {expression=} pager-click Expression to call when a pager is clicked (if show-pager is true). Is passed the 'index' variable.\n * @param {expression=} on-slide-changed Expression called whenever the slide is changed.  Is passed an '$index' variable.\n * @param {expression=} active-slide Model to bind the current slide to.\n */\nIonicModule\n.directive('ionSlideBox', [\n  '$timeout',\n  '$compile',\n  '$ionicSlideBoxDelegate',\nfunction($timeout, $compile, $ionicSlideBoxDelegate) {\n  return {\n    restrict: 'E',\n    replace: true,\n    transclude: true,\n    scope: {\n      autoPlay: '=',\n      doesContinue: '@',\n      slideInterval: '@',\n      showPager: '@',\n      pagerClick: '&',\n      disableScroll: '@',\n      onSlideChanged: '&',\n      activeSlide: '=?'\n    },\n    controller: ['$scope', '$element', '$attrs', function($scope, $element, $attrs) {\n      var _this = this;\n\n      var continuous = $scope.$eval($scope.doesContinue) === true;\n      var shouldAutoPlay = isDefined($attrs.autoPlay) ? !!$scope.autoPlay : false;\n      var slideInterval = shouldAutoPlay ? $scope.$eval($scope.slideInterval) || 4000 : 0;\n\n      var slider = new ionic.views.Slider({\n        el: $element[0],\n        auto: slideInterval,\n        continuous: continuous,\n        startSlide: $scope.activeSlide,\n        slidesChanged: function() {\n          $scope.currentSlide = slider.currentIndex();\n\n          // Try to trigger a digest\n          $timeout(function() {});\n        },\n        callback: function(slideIndex) {\n          $scope.currentSlide = slideIndex;\n          $scope.onSlideChanged({ index: $scope.currentSlide, $index: $scope.currentSlide});\n          $scope.$parent.$broadcast('slideBox.slideChanged', slideIndex);\n          $scope.activeSlide = slideIndex;\n          // Try to trigger a digest\n          $timeout(function() {});\n        }\n      });\n\n      slider.enableSlide($scope.$eval($attrs.disableScroll) !== true);\n\n      $scope.$watch('activeSlide', function(nv) {\n        if(angular.isDefined(nv)){\n          slider.slide(nv);\n        }\n      });\n\n      $scope.$on('slideBox.nextSlide', function() {\n        slider.next();\n      });\n\n      $scope.$on('slideBox.prevSlide', function() {\n        slider.prev();\n      });\n\n      $scope.$on('slideBox.setSlide', function(e, index) {\n        slider.slide(index);\n      });\n\n      //Exposed for testing\n      this.__slider = slider;\n\n      var deregisterInstance = $ionicSlideBoxDelegate._registerInstance(slider, $attrs.delegateHandle);\n      $scope.$on('$destroy', deregisterInstance);\n\n      this.slidesCount = function() {\n        return slider.slidesCount();\n      };\n\n      this.onPagerClick = function(index) {\n        void 0;\n        $scope.pagerClick({index: index});\n      };\n\n      $timeout(function() {\n        slider.load();\n      });\n    }],\n    template: '<div class=\"slider\">' +\n      '<div class=\"slider-slides\" ng-transclude>' +\n      '</div>' +\n    '</div>',\n\n    link: function($scope, $element, $attr, slideBoxCtrl) {\n      // If the pager should show, append it to the slide box\n      if($scope.$eval($scope.showPager) !== false) {\n        var childScope = $scope.$new();\n        var pager = jqLite('<ion-pager></ion-pager>');\n        $element.append(pager);\n        $compile(pager)(childScope);\n      }\n    }\n  };\n}])\n.directive('ionSlide', function() {\n  return {\n    restrict: 'E',\n    require: '^ionSlideBox',\n    compile: function(element, attr) {\n      element.addClass('slider-slide');\n      return function($scope, $element, $attr) {\n      };\n    },\n  };\n})\n\n.directive('ionPager', function() {\n  return {\n    restrict: 'E',\n    replace: true,\n    require: '^ionSlideBox',\n    template: '<div class=\"slider-pager\"><span class=\"slider-pager-page\" ng-repeat=\"slide in numSlides() track by $index\" ng-class=\"{active: $index == currentSlide}\" ng-click=\"pagerClick($index)\"><i class=\"icon ion-record\"></i></span></div>',\n    link: function($scope, $element, $attr, slideBox) {\n      var selectPage = function(index) {\n        var children = $element[0].children;\n        var length = children.length;\n        for(var i = 0; i < length; i++) {\n          if(i == index) {\n            children[i].classList.add('active');\n          } else {\n            children[i].classList.remove('active');\n          }\n        }\n      };\n\n      $scope.pagerClick = function(index) {\n        slideBox.onPagerClick(index);\n      };\n\n      $scope.numSlides = function() {\n        return new Array(slideBox.slidesCount());\n      };\n\n      $scope.$watch('currentSlide', function(v) {\n        selectPage(v);\n      });\n    }\n  };\n\n});\n\nIonicModule.constant('$ionicTabConfig', {\n  type: ''\n});\n\n/**\n * @ngdoc directive\n * @name ionTab\n * @module ionic\n * @restrict E\n * @parent ionic.directive:ionTabs\n *\n * @description\n * Contains a tab's content.  The content only exists while the given tab is selected.\n *\n * Each ionTab has its own view history.\n *\n * @usage\n * ```html\n * <ion-tab\n *   title=\"Tab!\"\n *   icon=\"my-icon\"\n *   href=\"#/tab/tab-link\"\n *   on-select=\"onTabSelected()\"\n *   on-deselect=\"onTabDeselected()\">\n * </ion-tab>\n * ```\n * For a complete, working tab bar example, see the {@link ionic.directive:ionTabs} documentation.\n *\n * @param {string} title The title of the tab.\n * @param {string=} href The link that this tab will navigate to when tapped.\n * @param {string=} icon The icon of the tab. If given, this will become the default for icon-on and icon-off.\n * @param {string=} icon-on The icon of the tab while it is selected.\n * @param {string=} icon-off The icon of the tab while it is not selected.\n * @param {expression=} badge The badge to put on this tab (usually a number).\n * @param {expression=} badge-style The style of badge to put on this tab (eg tabs-positive).\n * @param {expression=} on-select Called when this tab is selected.\n * @param {expression=} on-deselect Called when this tab is deselected.\n * @param {expression=} ng-click By default, the tab will be selected on click. If ngClick is set, it will not.  You can explicitly switch tabs using {@link ionic.service:$ionicTabsDelegate#select $ionicTabsDelegate.select()}.\n */\nIonicModule\n.directive('ionTab', [\n  '$rootScope',\n  '$animate',\n  '$ionicBind',\n  '$compile',\nfunction($rootScope, $animate, $ionicBind, $compile) {\n\n  //Returns ' key=\"value\"' if value exists\n  function attrStr(k,v) {\n    return angular.isDefined(v) ? ' ' + k + '=\"' + v + '\"' : '';\n  }\n  return {\n    restrict: 'E',\n    require: ['^ionTabs', 'ionTab'],\n    replace: true,\n    controller: '$ionicTab',\n    scope: true,\n    compile: function(element, attr) {\n\n      //We create the tabNavTemplate in the compile phase so that the\n      //attributes we pass down won't be interpolated yet - we want\n      //to pass down the 'raw' versions of the attributes\n      var tabNavTemplate = '<ion-tab-nav' +\n        attrStr('ng-click', attr.ngClick) +\n        attrStr('title', attr.title) +\n        attrStr('icon', attr.icon) +\n        attrStr('icon-on', attr.iconOn) +\n        attrStr('icon-off', attr.iconOff) +\n        attrStr('badge', attr.badge) +\n        attrStr('badge-style', attr.badgeStyle) +\n        attrStr('hidden', attr.hidden) +\n        attrStr('class', attr['class']) +\n        '></ion-tab-nav>';\n\n      //Remove the contents of the element so we can compile them later, if tab is selected\n      //We don't use regular transclusion because it breaks element inheritance\n      var tabContent = jqLite('<div class=\"pane\">')\n        .append( element.contents().remove() );\n\n      return function link($scope, $element, $attr, ctrls) {\n        var childScope;\n        var childElement;\n        var tabsCtrl = ctrls[0];\n        var tabCtrl = ctrls[1];\n\n        var navView = tabContent[0].querySelector('ion-nav-view') ||\n          tabContent[0].querySelector('data-ion-nav-view');\n        var navViewName = navView && navView.getAttribute('name');\n\n        $ionicBind($scope, $attr, {\n          animate: '=',\n          onSelect: '&',\n          onDeselect: '&',\n          title: '@',\n          uiSref: '@',\n          href: '@',\n        });\n\n        tabsCtrl.add($scope);\n        $scope.$on('$destroy', function() {\n          tabsCtrl.remove($scope);\n          tabNavElement.isolateScope().$destroy();\n          tabNavElement.remove();\n        });\n\n        //Remove title attribute so browser-tooltip does not apear\n        $element[0].removeAttribute('title');\n\n        if (navViewName) {\n          tabCtrl.navViewName = navViewName;\n        }\n        $scope.$on('$stateChangeSuccess', selectIfMatchesState);\n        selectIfMatchesState();\n        function selectIfMatchesState() {\n          if (tabCtrl.tabMatchesState()) {\n            tabsCtrl.select($scope);\n          }\n        }\n\n        var tabNavElement = jqLite(tabNavTemplate);\n        tabNavElement.data('$ionTabsController', tabsCtrl);\n        tabNavElement.data('$ionTabController', tabCtrl);\n        tabsCtrl.$tabsElement.append($compile(tabNavElement)($scope));\n\n        $scope.$watch('$tabSelected', function(value) {\n          childScope && childScope.$destroy();\n          childScope = null;\n          childElement && $animate.leave(childElement);\n          childElement = null;\n          if (value) {\n            childScope = $scope.$new();\n            childElement = tabContent.clone();\n            $animate.enter(childElement, tabsCtrl.$element);\n            $compile(childElement)(childScope);\n          }\n        });\n\n      };\n    }\n  };\n}]);\n\nIonicModule\n.directive('ionTabNav', [function() {\n  return {\n    restrict: 'E',\n    replace: true,\n    require: ['^ionTabs', '^ionTab'],\n    template:\n    '<a ng-class=\"{\\'tab-item-active\\': isTabActive(), \\'has-badge\\':badge, \\'tab-hidden\\':isHidden()}\" ' +\n      ' class=\"tab-item\">' +\n      '<span class=\"badge {{badgeStyle}}\" ng-if=\"badge\">{{badge}}</span>' +\n      '<i class=\"icon {{getIconOn()}}\" ng-if=\"getIconOn() && isTabActive()\"></i>' +\n      '<i class=\"icon {{getIconOff()}}\" ng-if=\"getIconOff() && !isTabActive()\"></i>' +\n      '<span class=\"tab-title\" ng-bind-html=\"title\"></span>' +\n    '</a>',\n    scope: {\n      title: '@',\n      icon: '@',\n      iconOn: '@',\n      iconOff: '@',\n      badge: '=',\n      hidden: '@',\n      badgeStyle: '@',\n      'class': '@'\n    },\n    compile: function(element, attr, transclude) {\n      return function link($scope, $element, $attrs, ctrls) {\n        var tabsCtrl = ctrls[0],\n          tabCtrl = ctrls[1];\n\n        //Remove title attribute so browser-tooltip does not apear\n        $element[0].removeAttribute('title');\n\n        $scope.selectTab = function(e) {\n          e.preventDefault();\n          tabsCtrl.select(tabCtrl.$scope, true);\n        };\n        if (!$attrs.ngClick) {\n          $element.on('click', function(event) {\n            $scope.$apply(function() {\n              $scope.selectTab(event);\n            });\n          });\n        }\n\n        $scope.isHidden = function() {\n          if($attrs.hidden === 'true' || $attrs.hidden === true)return true;\n          return false;\n        };\n\n        $scope.getIconOn = function() {\n          return $scope.iconOn || $scope.icon;\n        };\n        $scope.getIconOff = function() {\n          return $scope.iconOff || $scope.icon;\n        };\n\n        $scope.isTabActive = function() {\n          return tabsCtrl.selectedTab() === tabCtrl.$scope;\n        };\n      };\n    }\n  };\n}]);\n\nIonicModule.constant('$ionicTabsConfig', {\n  position: '',\n  type: ''\n});\n\n/**\n * @ngdoc directive\n * @name ionTabs\n * @module ionic\n * @delegate ionic.service:$ionicTabsDelegate\n * @restrict E\n * @codepen KbrzJ\n *\n * @description\n * Powers a multi-tabbed interface with a Tab Bar and a set of \"pages\" that can be tabbed\n * through.\n *\n * Assign any [tabs class](/docs/v1/components#tabs) or\n * [animation class](/docs/v1/components#animation) to the element to define\n * its look and feel.\n *\n * See the {@link ionic.directive:ionTab} directive's documentation for more details on\n * individual tabs.\n *\n * Note: do not place ion-tabs inside of an ion-content element; it has been known to cause a\n * certain CSS bug.\n *\n * @usage\n * ```html\n * <ion-tabs class=\"tabs-positive tabs-icon-only\">\n *\n *   <ion-tab title=\"Home\" icon-on=\"ion-ios7-filing\" icon-off=\"ion-ios7-filing-outline\">\n *     <!-- Tab 1 content -->\n *   </ion-tab>\n *\n *   <ion-tab title=\"About\" icon-on=\"ion-ios7-clock\" icon-off=\"ion-ios7-clock-outline\">\n *     <!-- Tab 2 content -->\n *   </ion-tab>\n *\n *   <ion-tab title=\"Settings\" icon-on=\"ion-ios7-gear\" icon-off=\"ion-ios7-gear-outline\">\n *     <!-- Tab 3 content -->\n *   </ion-tab>\n *\n * </ion-tabs>\n * ```\n *\n * @param {string=} delegate-handle The handle used to identify these tabs\n * with {@link ionic.service:$ionicTabsDelegate}.\n */\n\nIonicModule\n.directive('ionTabs', [\n  '$ionicViewService', \n  '$ionicTabsDelegate', \n  '$ionicTabsConfig', \nfunction($ionicViewService, $ionicTabsDelegate, $ionicTabsConfig) {\n  return {\n    restrict: 'E',\n    scope: true,\n    controller: '$ionicTabs',\n    compile: function(element, attr) {\n      element.addClass('view');\n      //We cannot use regular transclude here because it breaks element.data()\n      //inheritance on compile\n      var innerElement = jqLite('<div class=\"tabs\"></div>');\n      innerElement.append(element.contents());\n      element.append(innerElement);\n      element.addClass($ionicTabsConfig.position);\n      element.addClass($ionicTabsConfig.type);\n\n      return { pre: prelink };\n      function prelink($scope, $element, $attr, tabsCtrl) {\n        var deregisterInstance = $ionicTabsDelegate._registerInstance(\n          tabsCtrl, $attr.delegateHandle\n        );\n\n        $scope.$on('$destroy', deregisterInstance);\n\n        tabsCtrl.$scope = $scope;\n        tabsCtrl.$element = $element;\n        tabsCtrl.$tabsElement = jqLite($element[0].querySelector('.tabs'));\n\n        var el = $element[0];\n        $scope.$watch(function() { return el.className; }, function(value) {\n          var isTabsTop = value.indexOf('tabs-top') !== -1;\n          var isHidden = value.indexOf('tabs-item-hide') !== -1;\n          $scope.$hasTabs = !isTabsTop && !isHidden;\n          $scope.$hasTabsTop = isTabsTop && !isHidden;\n        });\n        $scope.$on('$destroy', function() {\n          delete $scope.$hasTabs;\n          delete $scope.$hasTabsTop;\n        });\n      }\n    }\n  };\n}]);\n\n/**\n * @ngdoc directive\n * @name ionToggle\n * @module ionic\n * @codepen tfAzj\n * @restrict E\n *\n * @description\n * A toggle is an animated switch which binds a given model to a boolean.\n *\n * Allows dragging of the switch's nub.\n *\n * The toggle behaves like any [AngularJS checkbox](http://docs.angularjs.org/api/ng/input/input[checkbox]) otherwise.\n *\n * @param toggle-class {string=} Sets the CSS class on the inner `label.toggle` element created by the directive.\n *\n * @usage\n * Below is an example of a toggle directive which is wired up to the `airplaneMode` model\n * and has the `toggle-calm` CSS class assigned to the inner element.\n *\n * ```html\n * <ion-toggle ng-model=\"airplaneMode\" toggle-class=\"toggle-calm\">Airplane Mode</ion-toggle>\n * ```\n */\nIonicModule\n.directive('ionToggle', [\n  '$ionicGesture',\n  '$timeout',\nfunction($ionicGesture, $timeout) {\n\n  return {\n    restrict: 'E',\n    replace: true,\n    require: '?ngModel',\n    transclude: true,\n    template:\n      '<div class=\"item item-toggle\">' +\n        '<div ng-transclude></div>' +\n        '<label class=\"toggle\">' +\n          '<input type=\"checkbox\">' +\n          '<div class=\"track\">' +\n            '<div class=\"handle\"></div>' +\n          '</div>' +\n        '</label>' +\n      '</div>',\n\n    compile: function(element, attr) {\n      var input = element.find('input');\n      forEach({\n        'name': attr.name,\n        'ng-value': attr.ngValue,\n        'ng-model': attr.ngModel,\n        'ng-checked': attr.ngChecked,\n        'ng-disabled': attr.ngDisabled,\n        'ng-true-value': attr.ngTrueValue,\n        'ng-false-value': attr.ngFalseValue,\n        'ng-change': attr.ngChange\n      }, function(value, name) {\n        if (isDefined(value)) {\n          input.attr(name, value);\n        }\n      });\n\n      if(attr.toggleClass) {\n        element[0].getElementsByTagName('label')[0].classList.add(attr.toggleClass);\n      }\n\n      return function($scope, $element, $attr) {\n         var el, checkbox, track, handle;\n\n         el = $element[0].getElementsByTagName('label')[0];\n         checkbox = el.children[0];\n         track = el.children[1];\n         handle = track.children[0];\n\n         var ngModelController = jqLite(checkbox).controller('ngModel');\n\n         $scope.toggle = new ionic.views.Toggle({\n           el: el,\n           track: track,\n           checkbox: checkbox,\n           handle: handle,\n           onChange: function() {\n             if(checkbox.checked) {\n               ngModelController.$setViewValue(true);\n             } else {\n               ngModelController.$setViewValue(false);\n             }\n             $scope.$apply();\n           }\n         });\n\n         $scope.$on('$destroy', function() {\n           $scope.toggle.destroy();\n         });\n      };\n    }\n\n  };\n}]);\n\n/**\n * @ngdoc directive\n * @name ionView\n * @module ionic\n * @restrict E\n * @parent ionNavView\n *\n * @description\n * A container for content, used to tell a parent {@link ionic.directive:ionNavBar}\n * about the current view.\n *\n * @usage\n * Below is an example where our page will load with a navbar containing \"My Page\" as the title.\n *\n * ```html\n * <ion-nav-bar></ion-nav-bar>\n * <ion-nav-view class=\"slide-left-right\">\n *   <ion-view title=\"My Page\">\n *     <ion-content>\n *       Hello!\n *     </ion-content>\n *   </ion-view>\n * </ion-nav-view>\n * ```\n *\n * @param {string=} title The title to display on the parent {@link ionic.directive:ionNavBar}.\n * @param {boolean=} hide-back-button Whether to hide the back button on the parent\n * {@link ionic.directive:ionNavBar} by default.\n * @param {boolean=} hide-nav-bar Whether to hide the parent\n * {@link ionic.directive:ionNavBar} by default.\n */\nIonicModule\n.directive('ionView', ['$ionicViewService', '$rootScope', '$animate',\n           function( $ionicViewService,   $rootScope,   $animate) {\n  return {\n    restrict: 'EA',\n    priority: 1000,\n    require: ['^?ionNavBar', '^?ionModal'],\n    compile: function(tElement, tAttrs, transclude) {\n      tElement.addClass('pane');\n      tElement[0].removeAttribute('title');\n\n      return function link($scope, $element, $attr, ctrls) {\n        var navBarCtrl = ctrls[0];\n        var modalCtrl = ctrls[1];\n\n        //Don't use the ionView if we're inside a modal or there's no navbar\n        if (!navBarCtrl || modalCtrl) {\n          return;\n        }\n\n        if (angular.isDefined($attr.title)) {\n\n          var initialTitle = $attr.title;\n          navBarCtrl.changeTitle(initialTitle, $scope.$navDirection);\n\n          // watch for changes in the title, don't set initial value as changeTitle does that\n          $attr.$observe('title', function(val, oldVal) {\n            navBarCtrl.setTitle(val);\n          });\n        }\n\n        var hideBackAttr = angular.isDefined($attr.hideBackButton) ?\n          $attr.hideBackButton :\n          'false';\n        $scope.$watch(hideBackAttr, function(value) {\n          // Should we hide a back button when this tab is shown\n          navBarCtrl.showBackButton(!value);\n        });\n\n        var hideNavAttr = angular.isDefined($attr.hideNavBar) ?\n          $attr.hideNavBar :\n          'false';\n        $scope.$watch(hideNavAttr, function(value) {\n          // Should the nav bar be hidden for this view or not?\n          navBarCtrl.showBar(!value);\n        });\n\n      };\n    }\n  };\n}]);\n\n})();"
  },
  {
    "path": "content/present-ionic/slides/ionic/js/ionic.bundle.js",
    "content": "/*!\n * ionic.bundle.js is a concatenation of:\n * ionic.js, angular.js, angular-animate.js,\n * angular-sanitize.js, angular-ui-router.js,\n * and ionic-angular.js\n */\n\n/*!\n * Copyright 2014 Drifty Co.\n * http://drifty.com/\n *\n * Ionic, v1.0.0-beta.11\n * A powerful HTML5 mobile app framework.\n * https://ionicframework.com/\n *\n * By @maxlynch, @benjsperry, @adamdbradley <3\n *\n * Licensed under the MIT license. Please see LICENSE for more information.\n *\n */\n\n(function() {\n\n// Create namespaces\n//\nwindow.ionic = {\n  controllers: {},\n  views: {},\n  version: '1.0.0-beta.11'\n};\n\n(function(window, document, ionic) {\n\n  var readyCallbacks = [];\n  var isDomReady = false;\n\n  function domReady() {\n    isDomReady = true;\n    for(var x=0; x<readyCallbacks.length; x++) {\n      ionic.requestAnimationFrame(readyCallbacks[x]);\n    }\n    readyCallbacks = [];\n    document.removeEventListener('DOMContentLoaded', domReady);\n  }\n  document.addEventListener('DOMContentLoaded', domReady);\n\n  // From the man himself, Mr. Paul Irish.\n  // The requestAnimationFrame polyfill\n  // Put it on window just to preserve its context\n  // without having to use .call\n  window._rAF = (function(){\n    return  window.requestAnimationFrame       ||\n            window.webkitRequestAnimationFrame ||\n            window.mozRequestAnimationFrame    ||\n            function( callback ){\n              window.setTimeout(callback, 16);\n            };\n  })();\n\n  var cancelAnimationFrame = window.cancelAnimationFrame ||\n    window.webkitCancelAnimationFrame ||\n    window.mozCancelAnimationFrame ||\n    window.webkitCancelRequestAnimationFrame;\n\n  /**\n  * @ngdoc utility\n  * @name ionic.DomUtil\n  * @module ionic\n  */\n  ionic.DomUtil = {\n    //Call with proper context\n    /**\n     * @ngdoc method\n     * @name ionic.DomUtil#requestAnimationFrame\n     * @alias ionic.requestAnimationFrame\n     * @description Calls [requestAnimationFrame](https://developer.mozilla.org/en-US/docs/Web/API/window.requestAnimationFrame), or a polyfill if not available.\n     * @param {function} callback The function to call when the next frame\n     * happens.\n     */\n    requestAnimationFrame: function(cb) {\n      return window._rAF(cb);\n    },\n\n    cancelAnimationFrame: function(requestId) {\n      cancelAnimationFrame(requestId);\n    },\n\n    /**\n     * @ngdoc method\n     * @name ionic.DomUtil#animationFrameThrottle\n     * @alias ionic.animationFrameThrottle\n     * @description\n     * When given a callback, if that callback is called 100 times between\n     * animation frames, adding Throttle will make it only run the last of\n     * the 100 calls.\n     *\n     * @param {function} callback a function which will be throttled to\n     * requestAnimationFrame\n     * @returns {function} A function which will then call the passed in callback.\n     * The passed in callback will receive the context the returned function is\n     * called with.\n     */\n    animationFrameThrottle: function(cb) {\n      var args, isQueued, context;\n      return function() {\n        args = arguments;\n        context = this;\n        if (!isQueued) {\n          isQueued = true;\n          ionic.requestAnimationFrame(function() {\n            cb.apply(context, args);\n            isQueued = false;\n          });\n        }\n      };\n    },\n\n    /**\n     * @ngdoc method\n     * @name ionic.DomUtil#getPositionInParent\n     * @description\n     * Find an element's scroll offset within its container.\n     * @param {DOMElement} element The element to find the offset of.\n     * @returns {object} A position object with the following properties:\n     *   - `{number}` `left` The left offset of the element.\n     *   - `{number}` `top` The top offset of the element.\n     */\n    getPositionInParent: function(el) {\n      return {\n        left: el.offsetLeft,\n        top: el.offsetTop\n      };\n    },\n\n    /**\n     * @ngdoc method\n     * @name ionic.DomUtil#ready\n     * @description\n     * Call a function when the DOM is ready, or if it is already ready\n     * call the function immediately.\n     * @param {function} callback The function to be called.\n     */\n    ready: function(cb) {\n      if(isDomReady || document.readyState === \"complete\") {\n        ionic.requestAnimationFrame(cb);\n      } else {\n        readyCallbacks.push(cb);\n      }\n    },\n\n    /**\n     * @ngdoc method\n     * @name ionic.DomUtil#getTextBounds\n     * @description\n     * Get a rect representing the bounds of the given textNode.\n     * @param {DOMElement} textNode The textNode to find the bounds of.\n     * @returns {object} An object representing the bounds of the node. Properties:\n     *   - `{number}` `left` The left positton of the textNode.\n     *   - `{number}` `right` The right positton of the textNode.\n     *   - `{number}` `top` The top positton of the textNode.\n     *   - `{number}` `bottom` The bottom position of the textNode.\n     *   - `{number}` `width` The width of the textNode.\n     *   - `{number}` `height` The height of the textNode.\n     */\n    getTextBounds: function(textNode) {\n      if(document.createRange) {\n        var range = document.createRange();\n        range.selectNodeContents(textNode);\n        if(range.getBoundingClientRect) {\n          var rect = range.getBoundingClientRect();\n          if(rect) {\n            var sx = window.scrollX;\n            var sy = window.scrollY;\n\n            return {\n              top: rect.top + sy,\n              left: rect.left + sx,\n              right: rect.left + sx + rect.width,\n              bottom: rect.top + sy + rect.height,\n              width: rect.width,\n              height: rect.height\n            };\n          }\n        }\n      }\n      return null;\n    },\n\n    /**\n     * @ngdoc method\n     * @name ionic.DomUtil#getChildIndex\n     * @description\n     * Get the first index of a child node within the given element of the\n     * specified type.\n     * @param {DOMElement} element The element to find the index of.\n     * @param {string} type The nodeName to match children of element against.\n     * @returns {number} The index, or -1, of a child with nodeName matching type.\n     */\n    getChildIndex: function(element, type) {\n      if(type) {\n        var ch = element.parentNode.children;\n        var c;\n        for(var i = 0, k = 0, j = ch.length; i < j; i++) {\n          c = ch[i];\n          if(c.nodeName && c.nodeName.toLowerCase() == type) {\n            if(c == element) {\n              return k;\n            }\n            k++;\n          }\n        }\n      }\n      return Array.prototype.slice.call(element.parentNode.children).indexOf(element);\n    },\n\n    /**\n     * @private\n     */\n    swapNodes: function(src, dest) {\n      dest.parentNode.insertBefore(src, dest);\n    },\n\n    /**\n     * @private\n     */\n    centerElementByMargin: function(el) {\n      el.style.marginLeft = (-el.offsetWidth) / 2 + 'px';\n      el.style.marginTop = (-el.offsetHeight) / 2 + 'px';\n    },\n    //Center twice, after raf, to fix a bug with ios and showing elements\n    //that have just been attached to the DOM.\n    centerElementByMarginTwice: function(el) {\n      ionic.requestAnimationFrame(function() {\n        ionic.DomUtil.centerElementByMargin(el);\n        setTimeout(function() {\n          ionic.DomUtil.centerElementByMargin(el);\n          setTimeout(function() {\n            ionic.DomUtil.centerElementByMargin(el);\n          });\n        });\n      });\n    },\n\n    elementIsDescendant: function(el, parent, stopAt) {\n      var current = el;\n      do {\n        if (current === parent) return true;\n        current = current.parentNode;\n      } while (current && current !== stopAt);\n      return false;\n    },\n\n    /**\n     * @ngdoc method\n     * @name ionic.DomUtil#getParentWithClass\n     * @param {DOMElement} element\n     * @param {string} className\n     * @returns {DOMElement} The closest parent of element matching the\n     * className, or null.\n     */\n    getParentWithClass: function(e, className, depth) {\n      depth = depth || 10;\n      while(e.parentNode && depth--) {\n        if(e.parentNode.classList && e.parentNode.classList.contains(className)) {\n          return e.parentNode;\n        }\n        e = e.parentNode;\n      }\n      return null;\n    },\n    /**\n     * @ngdoc method\n     * @name ionic.DomUtil#getParentOrSelfWithClass\n     * @param {DOMElement} element\n     * @param {string} className\n     * @returns {DOMElement} The closest parent or self matching the\n     * className, or null.\n     */\n    getParentOrSelfWithClass: function(e, className, depth) {\n      depth = depth || 10;\n      while(e && depth--) {\n        if(e.classList && e.classList.contains(className)) {\n          return e;\n        }\n        e = e.parentNode;\n      }\n      return null;\n    },\n\n    /**\n     * @ngdoc method\n     * @name ionic.DomUtil#rectContains\n     * @param {number} x\n     * @param {number} y\n     * @param {number} x1\n     * @param {number} y1\n     * @param {number} x2\n     * @param {number} y2\n     * @returns {boolean} Whether {x,y} fits within the rectangle defined by\n     * {x1,y1,x2,y2}.\n     */\n    rectContains: function(x, y, x1, y1, x2, y2) {\n      if(x < x1 || x > x2) return false;\n      if(y < y1 || y > y2) return false;\n      return true;\n    }\n  };\n\n  //Shortcuts\n  ionic.requestAnimationFrame = ionic.DomUtil.requestAnimationFrame;\n  ionic.cancelAnimationFrame = ionic.DomUtil.cancelAnimationFrame;\n  ionic.animationFrameThrottle = ionic.DomUtil.animationFrameThrottle;\n})(window, document, ionic);\n\n/**\n * ion-events.js\n *\n * Author: Max Lynch <max@drifty.com>\n *\n * Framework events handles various mobile browser events, and\n * detects special events like tap/swipe/etc. and emits them\n * as custom events that can be used in an app.\n *\n * Portions lovingly adapted from github.com/maker/ratchet and github.com/alexgibson/tap.js - thanks guys!\n */\n\n(function(ionic) {\n\n  // Custom event polyfill\n  ionic.CustomEvent = (function() {\n    if( typeof window.CustomEvent === 'function' ) return CustomEvent;\n\n    var customEvent = function(event, params) {\n      var evt;\n      params = params || {\n        bubbles: false,\n        cancelable: false,\n        detail: undefined\n      };\n      try {\n        evt = document.createEvent(\"CustomEvent\");\n        evt.initCustomEvent(event, params.bubbles, params.cancelable, params.detail);\n      } catch (error) {\n        // fallback for browsers that don't support createEvent('CustomEvent')\n        evt = document.createEvent(\"Event\");\n        for (var param in params) {\n          evt[param] = params[param];\n        }\n        evt.initEvent(event, params.bubbles, params.cancelable);\n      }\n      return evt;\n    };\n    customEvent.prototype = window.Event.prototype;\n    return customEvent;\n  })();\n\n\n  /**\n   * @ngdoc utility\n   * @name ionic.EventController\n   * @module ionic\n   */\n  ionic.EventController = {\n    VIRTUALIZED_EVENTS: ['tap', 'swipe', 'swiperight', 'swipeleft', 'drag', 'hold', 'release'],\n\n    /**\n     * @ngdoc method\n     * @name ionic.EventController#trigger\n     * @alias ionic.trigger\n     * @param {string} eventType The event to trigger.\n     * @param {object} data The data for the event. Hint: pass in\n     * `{target: targetElement}`\n     * @param {boolean=} bubbles Whether the event should bubble up the DOM.\n     * @param {boolean=} cancelable Whether the event should be cancelable.\n     */\n    // Trigger a new event\n    trigger: function(eventType, data, bubbles, cancelable) {\n      var event = new ionic.CustomEvent(eventType, {\n        detail: data,\n        bubbles: !!bubbles,\n        cancelable: !!cancelable\n      });\n\n      // Make sure to trigger the event on the given target, or dispatch it from\n      // the window if we don't have an event target\n      data && data.target && data.target.dispatchEvent && data.target.dispatchEvent(event) || window.dispatchEvent(event);\n    },\n\n    /**\n     * @ngdoc method\n     * @name ionic.EventController#on\n     * @alias ionic.on\n     * @description Listen to an event on an element.\n     * @param {string} type The event to listen for.\n     * @param {function} callback The listener to be called.\n     * @param {DOMElement} element The element to listen for the event on.\n     */\n    on: function(type, callback, element) {\n      var e = element || window;\n\n      // Bind a gesture if it's a virtual event\n      for(var i = 0, j = this.VIRTUALIZED_EVENTS.length; i < j; i++) {\n        if(type == this.VIRTUALIZED_EVENTS[i]) {\n          var gesture = new ionic.Gesture(element);\n          gesture.on(type, callback);\n          return gesture;\n        }\n      }\n\n      // Otherwise bind a normal event\n      e.addEventListener(type, callback);\n    },\n\n    /**\n     * @ngdoc method\n     * @name ionic.EventController#off\n     * @alias ionic.off\n     * @description Remove an event listener.\n     * @param {string} type\n     * @param {function} callback\n     * @param {DOMElement} element\n     */\n    off: function(type, callback, element) {\n      element.removeEventListener(type, callback);\n    },\n\n    /**\n     * @ngdoc method\n     * @name ionic.EventController#onGesture\n     * @alias ionic.onGesture\n     * @description Add an event listener for a gesture on an element.\n     *\n     * Available eventTypes (from [hammer.js](http://eightmedia.github.io/hammer.js/)):\n     *\n     * `hold`, `tap`, `doubletap`, `drag`, `dragstart`, `dragend`, `dragup`, `dragdown`, <br/>\n     * `dragleft`, `dragright`, `swipe`, `swipeup`, `swipedown`, `swipeleft`, `swiperight`, <br/>\n     * `transform`, `transformstart`, `transformend`, `rotate`, `pinch`, `pinchin`, `pinchout`, </br>\n     * `touch`, `release`\n     *\n     * @param {string} eventType The gesture event to listen for.\n     * @param {function(e)} callback The function to call when the gesture\n     * happens.\n     * @param {DOMElement} element The angular element to listen for the event on.\n     */\n    onGesture: function(type, callback, element) {\n      var gesture = new ionic.Gesture(element);\n      gesture.on(type, callback);\n      return gesture;\n    },\n\n    /**\n     * @ngdoc method\n     * @name ionic.EventController#offGesture\n     * @alias ionic.offGesture\n     * @description Remove an event listener for a gesture on an element.\n     * @param {string} eventType The gesture event.\n     * @param {function(e)} callback The listener that was added earlier.\n     * @param {DOMElement} element The element the listener was added on.\n     */\n    offGesture: function(gesture, type, callback) {\n      gesture.off(type, callback);\n    },\n\n    handlePopState: function(event) {}\n  };\n\n\n  // Map some convenient top-level functions for event handling\n  ionic.on = function() { ionic.EventController.on.apply(ionic.EventController, arguments); };\n  ionic.off = function() { ionic.EventController.off.apply(ionic.EventController, arguments); };\n  ionic.trigger = ionic.EventController.trigger;//function() { ionic.EventController.trigger.apply(ionic.EventController.trigger, arguments); };\n  ionic.onGesture = function() { return ionic.EventController.onGesture.apply(ionic.EventController.onGesture, arguments); };\n  ionic.offGesture = function() { return ionic.EventController.offGesture.apply(ionic.EventController.offGesture, arguments); };\n\n})(window.ionic);\n\n/**\n  * Simple gesture controllers with some common gestures that emit\n  * gesture events.\n  *\n  * Ported from github.com/EightMedia/hammer.js Gestures - thanks!\n  */\n(function(ionic) {\n\n  /**\n   * ionic.Gestures\n   * use this to create instances\n   * @param   {HTMLElement}   element\n   * @param   {Object}        options\n   * @returns {ionic.Gestures.Instance}\n   * @constructor\n   */\n  ionic.Gesture = function(element, options) {\n    return new ionic.Gestures.Instance(element, options || {});\n  };\n\n  ionic.Gestures = {};\n\n  // default settings\n  ionic.Gestures.defaults = {\n    // add css to the element to prevent the browser from doing\n    // its native behavior. this doesnt prevent the scrolling,\n    // but cancels the contextmenu, tap highlighting etc\n    // set to false to disable this\n    stop_browser_behavior: 'disable-user-behavior'\n  };\n\n  // detect touchevents\n  ionic.Gestures.HAS_POINTEREVENTS = window.navigator.pointerEnabled || window.navigator.msPointerEnabled;\n  ionic.Gestures.HAS_TOUCHEVENTS = ('ontouchstart' in window);\n\n  // dont use mouseevents on mobile devices\n  ionic.Gestures.MOBILE_REGEX = /mobile|tablet|ip(ad|hone|od)|android|silk/i;\n  ionic.Gestures.NO_MOUSEEVENTS = ionic.Gestures.HAS_TOUCHEVENTS && window.navigator.userAgent.match(ionic.Gestures.MOBILE_REGEX);\n\n  // eventtypes per touchevent (start, move, end)\n  // are filled by ionic.Gestures.event.determineEventTypes on setup\n  ionic.Gestures.EVENT_TYPES = {};\n\n  // direction defines\n  ionic.Gestures.DIRECTION_DOWN = 'down';\n  ionic.Gestures.DIRECTION_LEFT = 'left';\n  ionic.Gestures.DIRECTION_UP = 'up';\n  ionic.Gestures.DIRECTION_RIGHT = 'right';\n\n  // pointer type\n  ionic.Gestures.POINTER_MOUSE = 'mouse';\n  ionic.Gestures.POINTER_TOUCH = 'touch';\n  ionic.Gestures.POINTER_PEN = 'pen';\n\n  // touch event defines\n  ionic.Gestures.EVENT_START = 'start';\n  ionic.Gestures.EVENT_MOVE = 'move';\n  ionic.Gestures.EVENT_END = 'end';\n\n  // hammer document where the base events are added at\n  ionic.Gestures.DOCUMENT = window.document;\n\n  // plugins namespace\n  ionic.Gestures.plugins = {};\n\n  // if the window events are set...\n  ionic.Gestures.READY = false;\n\n  /**\n   * setup events to detect gestures on the document\n   */\n  function setup() {\n    if(ionic.Gestures.READY) {\n      return;\n    }\n\n    // find what eventtypes we add listeners to\n    ionic.Gestures.event.determineEventTypes();\n\n    // Register all gestures inside ionic.Gestures.gestures\n    for(var name in ionic.Gestures.gestures) {\n      if(ionic.Gestures.gestures.hasOwnProperty(name)) {\n        ionic.Gestures.detection.register(ionic.Gestures.gestures[name]);\n      }\n    }\n\n    // Add touch events on the document\n    ionic.Gestures.event.onTouch(ionic.Gestures.DOCUMENT, ionic.Gestures.EVENT_MOVE, ionic.Gestures.detection.detect);\n    ionic.Gestures.event.onTouch(ionic.Gestures.DOCUMENT, ionic.Gestures.EVENT_END, ionic.Gestures.detection.detect);\n\n    // ionic.Gestures is ready...!\n    ionic.Gestures.READY = true;\n  }\n\n  /**\n   * create new hammer instance\n   * all methods should return the instance itself, so it is chainable.\n   * @param   {HTMLElement}       element\n   * @param   {Object}            [options={}]\n   * @returns {ionic.Gestures.Instance}\n   * @name Gesture.Instance\n   * @constructor\n   */\n  ionic.Gestures.Instance = function(element, options) {\n    var self = this;\n\n    // A null element was passed into the instance, which means\n    // whatever lookup was done to find this element failed to find it\n    // so we can't listen for events on it.\n    if(element === null) {\n      void 0;\n      return;\n    }\n\n    // setup ionic.GesturesJS window events and register all gestures\n    // this also sets up the default options\n    setup();\n\n    this.element = element;\n\n    // start/stop detection option\n    this.enabled = true;\n\n    // merge options\n    this.options = ionic.Gestures.utils.extend(\n        ionic.Gestures.utils.extend({}, ionic.Gestures.defaults),\n        options || {});\n\n    // add some css to the element to prevent the browser from doing its native behavoir\n    if(this.options.stop_browser_behavior) {\n      ionic.Gestures.utils.stopDefaultBrowserBehavior(this.element, this.options.stop_browser_behavior);\n    }\n\n    // start detection on touchstart\n    ionic.Gestures.event.onTouch(element, ionic.Gestures.EVENT_START, function(ev) {\n      if(self.enabled) {\n        ionic.Gestures.detection.startDetect(self, ev);\n      }\n    });\n\n    // return instance\n    return this;\n  };\n\n\n  ionic.Gestures.Instance.prototype = {\n    /**\n     * bind events to the instance\n     * @param   {String}      gesture\n     * @param   {Function}    handler\n     * @returns {ionic.Gestures.Instance}\n     */\n    on: function onEvent(gesture, handler){\n      var gestures = gesture.split(' ');\n      for(var t=0; t<gestures.length; t++) {\n        this.element.addEventListener(gestures[t], handler, false);\n      }\n      return this;\n    },\n\n\n    /**\n     * unbind events to the instance\n     * @param   {String}      gesture\n     * @param   {Function}    handler\n     * @returns {ionic.Gestures.Instance}\n     */\n    off: function offEvent(gesture, handler){\n      var gestures = gesture.split(' ');\n      for(var t=0; t<gestures.length; t++) {\n        this.element.removeEventListener(gestures[t], handler, false);\n      }\n      return this;\n    },\n\n\n    /**\n     * trigger gesture event\n     * @param   {String}      gesture\n     * @param   {Object}      eventData\n     * @returns {ionic.Gestures.Instance}\n     */\n    trigger: function triggerEvent(gesture, eventData){\n      // create DOM event\n      var event = ionic.Gestures.DOCUMENT.createEvent('Event');\n      event.initEvent(gesture, true, true);\n      event.gesture = eventData;\n\n      // trigger on the target if it is in the instance element,\n      // this is for event delegation tricks\n      var element = this.element;\n      if(ionic.Gestures.utils.hasParent(eventData.target, element)) {\n        element = eventData.target;\n      }\n\n      element.dispatchEvent(event);\n      return this;\n    },\n\n\n    /**\n     * enable of disable hammer.js detection\n     * @param   {Boolean}   state\n     * @returns {ionic.Gestures.Instance}\n     */\n    enable: function enable(state) {\n      this.enabled = state;\n      return this;\n    }\n  };\n\n  /**\n   * this holds the last move event,\n   * used to fix empty touchend issue\n   * see the onTouch event for an explanation\n   * type {Object}\n   */\n  var last_move_event = null;\n\n\n  /**\n   * when the mouse is hold down, this is true\n   * type {Boolean}\n   */\n  var enable_detect = false;\n\n\n  /**\n   * when touch events have been fired, this is true\n   * type {Boolean}\n   */\n  var touch_triggered = false;\n\n\n  ionic.Gestures.event = {\n    /**\n     * simple addEventListener\n     * @param   {HTMLElement}   element\n     * @param   {String}        type\n     * @param   {Function}      handler\n     */\n    bindDom: function(element, type, handler) {\n      var types = type.split(' ');\n      for(var t=0; t<types.length; t++) {\n        element.addEventListener(types[t], handler, false);\n      }\n    },\n\n\n    /**\n     * touch events with mouse fallback\n     * @param   {HTMLElement}   element\n     * @param   {String}        eventType        like ionic.Gestures.EVENT_MOVE\n     * @param   {Function}      handler\n     */\n    onTouch: function onTouch(element, eventType, handler) {\n      var self = this;\n\n      this.bindDom(element, ionic.Gestures.EVENT_TYPES[eventType], function bindDomOnTouch(ev) {\n        var sourceEventType = ev.type.toLowerCase();\n\n        // onmouseup, but when touchend has been fired we do nothing.\n        // this is for touchdevices which also fire a mouseup on touchend\n        if(sourceEventType.match(/mouse/) && touch_triggered) {\n          return;\n        }\n\n        // mousebutton must be down or a touch event\n        else if( sourceEventType.match(/touch/) ||   // touch events are always on screen\n          sourceEventType.match(/pointerdown/) || // pointerevents touch\n          (sourceEventType.match(/mouse/) && ev.which === 1)   // mouse is pressed\n          ){\n            enable_detect = true;\n          }\n\n        // mouse isn't pressed\n        else if(sourceEventType.match(/mouse/) && ev.which !== 1) {\n          enable_detect = false;\n        }\n\n\n        // we are in a touch event, set the touch triggered bool to true,\n        // this for the conflicts that may occur on ios and android\n        if(sourceEventType.match(/touch|pointer/)) {\n          touch_triggered = true;\n        }\n\n        // count the total touches on the screen\n        var count_touches = 0;\n\n        // when touch has been triggered in this detection session\n        // and we are now handling a mouse event, we stop that to prevent conflicts\n        if(enable_detect) {\n          // update pointerevent\n          if(ionic.Gestures.HAS_POINTEREVENTS && eventType != ionic.Gestures.EVENT_END) {\n            count_touches = ionic.Gestures.PointerEvent.updatePointer(eventType, ev);\n          }\n          // touch\n          else if(sourceEventType.match(/touch/)) {\n            count_touches = ev.touches.length;\n          }\n          // mouse\n          else if(!touch_triggered) {\n            count_touches = sourceEventType.match(/up/) ? 0 : 1;\n          }\n\n          // if we are in a end event, but when we remove one touch and\n          // we still have enough, set eventType to move\n          if(count_touches > 0 && eventType == ionic.Gestures.EVENT_END) {\n            eventType = ionic.Gestures.EVENT_MOVE;\n          }\n          // no touches, force the end event\n          else if(!count_touches) {\n            eventType = ionic.Gestures.EVENT_END;\n          }\n\n          // store the last move event\n          if(count_touches || last_move_event === null) {\n            last_move_event = ev;\n          }\n\n          // trigger the handler\n          handler.call(ionic.Gestures.detection, self.collectEventData(element, eventType, self.getTouchList(last_move_event, eventType), ev));\n\n          // remove pointerevent from list\n          if(ionic.Gestures.HAS_POINTEREVENTS && eventType == ionic.Gestures.EVENT_END) {\n            count_touches = ionic.Gestures.PointerEvent.updatePointer(eventType, ev);\n          }\n        }\n\n        //debug(sourceEventType +\" \"+ eventType);\n\n        // on the end we reset everything\n        if(!count_touches) {\n          last_move_event = null;\n          enable_detect = false;\n          touch_triggered = false;\n          ionic.Gestures.PointerEvent.reset();\n        }\n      });\n    },\n\n\n    /**\n     * we have different events for each device/browser\n     * determine what we need and set them in the ionic.Gestures.EVENT_TYPES constant\n     */\n    determineEventTypes: function determineEventTypes() {\n      // determine the eventtype we want to set\n      var types;\n\n      // pointerEvents magic\n      if(ionic.Gestures.HAS_POINTEREVENTS) {\n        types = ionic.Gestures.PointerEvent.getEvents();\n      }\n      // on Android, iOS, blackberry, windows mobile we dont want any mouseevents\n      else if(ionic.Gestures.NO_MOUSEEVENTS) {\n        types = [\n          'touchstart',\n          'touchmove',\n          'touchend touchcancel'];\n      }\n      // for non pointer events browsers and mixed browsers,\n      // like chrome on windows8 touch laptop\n      else {\n        types = [\n          'touchstart mousedown',\n          'touchmove mousemove',\n          'touchend touchcancel mouseup'];\n      }\n\n      ionic.Gestures.EVENT_TYPES[ionic.Gestures.EVENT_START]  = types[0];\n      ionic.Gestures.EVENT_TYPES[ionic.Gestures.EVENT_MOVE]   = types[1];\n      ionic.Gestures.EVENT_TYPES[ionic.Gestures.EVENT_END]    = types[2];\n    },\n\n\n    /**\n     * create touchlist depending on the event\n     * @param   {Object}    ev\n     * @param   {String}    eventType   used by the fakemultitouch plugin\n     */\n    getTouchList: function getTouchList(ev/*, eventType*/) {\n      // get the fake pointerEvent touchlist\n      if(ionic.Gestures.HAS_POINTEREVENTS) {\n        return ionic.Gestures.PointerEvent.getTouchList();\n      }\n      // get the touchlist\n      else if(ev.touches) {\n        return ev.touches;\n      }\n      // make fake touchlist from mouse position\n      else {\n        ev.identifier = 1;\n        return [ev];\n      }\n    },\n\n\n    /**\n     * collect event data for ionic.Gestures js\n     * @param   {HTMLElement}   element\n     * @param   {String}        eventType        like ionic.Gestures.EVENT_MOVE\n     * @param   {Object}        eventData\n     */\n    collectEventData: function collectEventData(element, eventType, touches, ev) {\n\n      // find out pointerType\n      var pointerType = ionic.Gestures.POINTER_TOUCH;\n      if(ev.type.match(/mouse/) || ionic.Gestures.PointerEvent.matchType(ionic.Gestures.POINTER_MOUSE, ev)) {\n        pointerType = ionic.Gestures.POINTER_MOUSE;\n      }\n\n      return {\n        center      : ionic.Gestures.utils.getCenter(touches),\n                    timeStamp   : new Date().getTime(),\n                    target      : ev.target,\n                    touches     : touches,\n                    eventType   : eventType,\n                    pointerType : pointerType,\n                    srcEvent    : ev,\n\n                    /**\n                     * prevent the browser default actions\n                     * mostly used to disable scrolling of the browser\n                     */\n                    preventDefault: function() {\n                      if(this.srcEvent.preventManipulation) {\n                        this.srcEvent.preventManipulation();\n                      }\n\n                      if(this.srcEvent.preventDefault) {\n                        //this.srcEvent.preventDefault();\n                      }\n                    },\n\n                    /**\n                     * stop bubbling the event up to its parents\n                     */\n                    stopPropagation: function() {\n                      this.srcEvent.stopPropagation();\n                    },\n\n                    /**\n                     * immediately stop gesture detection\n                     * might be useful after a swipe was detected\n                     * @return {*}\n                     */\n                    stopDetect: function() {\n                      return ionic.Gestures.detection.stopDetect();\n                    }\n      };\n    }\n  };\n\n  ionic.Gestures.PointerEvent = {\n    /**\n     * holds all pointers\n     * type {Object}\n     */\n    pointers: {},\n\n    /**\n     * get a list of pointers\n     * @returns {Array}     touchlist\n     */\n    getTouchList: function() {\n      var self = this;\n      var touchlist = [];\n\n      // we can use forEach since pointerEvents only is in IE10\n      Object.keys(self.pointers).sort().forEach(function(id) {\n        touchlist.push(self.pointers[id]);\n      });\n      return touchlist;\n    },\n\n    /**\n     * update the position of a pointer\n     * @param   {String}   type             ionic.Gestures.EVENT_END\n     * @param   {Object}   pointerEvent\n     */\n    updatePointer: function(type, pointerEvent) {\n      if(type == ionic.Gestures.EVENT_END) {\n        this.pointers = {};\n      }\n      else {\n        pointerEvent.identifier = pointerEvent.pointerId;\n        this.pointers[pointerEvent.pointerId] = pointerEvent;\n      }\n\n      return Object.keys(this.pointers).length;\n    },\n\n    /**\n     * check if ev matches pointertype\n     * @param   {String}        pointerType     ionic.Gestures.POINTER_MOUSE\n     * @param   {PointerEvent}  ev\n     */\n    matchType: function(pointerType, ev) {\n      if(!ev.pointerType) {\n        return false;\n      }\n\n      var types = {};\n      types[ionic.Gestures.POINTER_MOUSE] = (ev.pointerType == ev.MSPOINTER_TYPE_MOUSE || ev.pointerType == ionic.Gestures.POINTER_MOUSE);\n      types[ionic.Gestures.POINTER_TOUCH] = (ev.pointerType == ev.MSPOINTER_TYPE_TOUCH || ev.pointerType == ionic.Gestures.POINTER_TOUCH);\n      types[ionic.Gestures.POINTER_PEN] = (ev.pointerType == ev.MSPOINTER_TYPE_PEN || ev.pointerType == ionic.Gestures.POINTER_PEN);\n      return types[pointerType];\n    },\n\n\n    /**\n     * get events\n     */\n    getEvents: function() {\n      return [\n        'pointerdown MSPointerDown',\n      'pointermove MSPointerMove',\n      'pointerup pointercancel MSPointerUp MSPointerCancel'\n        ];\n    },\n\n    /**\n     * reset the list\n     */\n    reset: function() {\n      this.pointers = {};\n    }\n  };\n\n\n  ionic.Gestures.utils = {\n    /**\n     * extend method,\n     * also used for cloning when dest is an empty object\n     * @param   {Object}    dest\n     * @param   {Object}    src\n     * @param\t{Boolean}\tmerge\t\tdo a merge\n     * @returns {Object}    dest\n     */\n    extend: function extend(dest, src, merge) {\n      for (var key in src) {\n        if(dest[key] !== undefined && merge) {\n          continue;\n        }\n        dest[key] = src[key];\n      }\n      return dest;\n    },\n\n\n    /**\n     * find if a node is in the given parent\n     * used for event delegation tricks\n     * @param   {HTMLElement}   node\n     * @param   {HTMLElement}   parent\n     * @returns {boolean}       has_parent\n     */\n    hasParent: function(node, parent) {\n      while(node){\n        if(node == parent) {\n          return true;\n        }\n        node = node.parentNode;\n      }\n      return false;\n    },\n\n\n    /**\n     * get the center of all the touches\n     * @param   {Array}     touches\n     * @returns {Object}    center\n     */\n    getCenter: function getCenter(touches) {\n      var valuesX = [], valuesY = [];\n\n      for(var t= 0,len=touches.length; t<len; t++) {\n        valuesX.push(touches[t].pageX);\n        valuesY.push(touches[t].pageY);\n      }\n\n      return {\n        pageX: ((Math.min.apply(Math, valuesX) + Math.max.apply(Math, valuesX)) / 2),\n          pageY: ((Math.min.apply(Math, valuesY) + Math.max.apply(Math, valuesY)) / 2)\n      };\n    },\n\n\n    /**\n     * calculate the velocity between two points\n     * @param   {Number}    delta_time\n     * @param   {Number}    delta_x\n     * @param   {Number}    delta_y\n     * @returns {Object}    velocity\n     */\n    getVelocity: function getVelocity(delta_time, delta_x, delta_y) {\n      return {\n        x: Math.abs(delta_x / delta_time) || 0,\n        y: Math.abs(delta_y / delta_time) || 0\n      };\n    },\n\n\n    /**\n     * calculate the angle between two coordinates\n     * @param   {Touch}     touch1\n     * @param   {Touch}     touch2\n     * @returns {Number}    angle\n     */\n    getAngle: function getAngle(touch1, touch2) {\n      var y = touch2.pageY - touch1.pageY,\n      x = touch2.pageX - touch1.pageX;\n      return Math.atan2(y, x) * 180 / Math.PI;\n    },\n\n\n    /**\n     * angle to direction define\n     * @param   {Touch}     touch1\n     * @param   {Touch}     touch2\n     * @returns {String}    direction constant, like ionic.Gestures.DIRECTION_LEFT\n     */\n    getDirection: function getDirection(touch1, touch2) {\n      var x = Math.abs(touch1.pageX - touch2.pageX),\n      y = Math.abs(touch1.pageY - touch2.pageY);\n\n      if(x >= y) {\n        return touch1.pageX - touch2.pageX > 0 ? ionic.Gestures.DIRECTION_LEFT : ionic.Gestures.DIRECTION_RIGHT;\n      }\n      else {\n        return touch1.pageY - touch2.pageY > 0 ? ionic.Gestures.DIRECTION_UP : ionic.Gestures.DIRECTION_DOWN;\n      }\n    },\n\n\n    /**\n     * calculate the distance between two touches\n     * @param   {Touch}     touch1\n     * @param   {Touch}     touch2\n     * @returns {Number}    distance\n     */\n    getDistance: function getDistance(touch1, touch2) {\n      var x = touch2.pageX - touch1.pageX,\n      y = touch2.pageY - touch1.pageY;\n      return Math.sqrt((x*x) + (y*y));\n    },\n\n\n    /**\n     * calculate the scale factor between two touchLists (fingers)\n     * no scale is 1, and goes down to 0 when pinched together, and bigger when pinched out\n     * @param   {Array}     start\n     * @param   {Array}     end\n     * @returns {Number}    scale\n     */\n    getScale: function getScale(start, end) {\n      // need two fingers...\n      if(start.length >= 2 && end.length >= 2) {\n        return this.getDistance(end[0], end[1]) /\n          this.getDistance(start[0], start[1]);\n      }\n      return 1;\n    },\n\n\n    /**\n     * calculate the rotation degrees between two touchLists (fingers)\n     * @param   {Array}     start\n     * @param   {Array}     end\n     * @returns {Number}    rotation\n     */\n    getRotation: function getRotation(start, end) {\n      // need two fingers\n      if(start.length >= 2 && end.length >= 2) {\n        return this.getAngle(end[1], end[0]) -\n          this.getAngle(start[1], start[0]);\n      }\n      return 0;\n    },\n\n\n    /**\n     * boolean if the direction is vertical\n     * @param    {String}    direction\n     * @returns  {Boolean}   is_vertical\n     */\n    isVertical: function isVertical(direction) {\n      return (direction == ionic.Gestures.DIRECTION_UP || direction == ionic.Gestures.DIRECTION_DOWN);\n    },\n\n\n    /**\n     * stop browser default behavior with css class\n     * @param   {HtmlElement}   element\n     * @param   {Object}        css_class\n     */\n    stopDefaultBrowserBehavior: function stopDefaultBrowserBehavior(element, css_class) {\n      // changed from making many style changes to just adding a preset classname\n      // less DOM manipulations, less code, and easier to control in the CSS side of things\n      // hammer.js doesn't come with CSS, but ionic does, which is why we prefer this method\n      if(element && element.classList) {\n        element.classList.add(css_class);\n        element.onselectstart = function() {\n          return false;\n        };\n      }\n    }\n  };\n\n\n  ionic.Gestures.detection = {\n    // contains all registred ionic.Gestures.gestures in the correct order\n    gestures: [],\n\n    // data of the current ionic.Gestures.gesture detection session\n    current: null,\n\n    // the previous ionic.Gestures.gesture session data\n    // is a full clone of the previous gesture.current object\n    previous: null,\n\n    // when this becomes true, no gestures are fired\n    stopped: false,\n\n\n    /**\n     * start ionic.Gestures.gesture detection\n     * @param   {ionic.Gestures.Instance}   inst\n     * @param   {Object}            eventData\n     */\n    startDetect: function startDetect(inst, eventData) {\n      // already busy with a ionic.Gestures.gesture detection on an element\n      if(this.current) {\n        return;\n      }\n\n      this.stopped = false;\n\n      this.current = {\n        inst        : inst, // reference to ionic.GesturesInstance we're working for\n        startEvent  : ionic.Gestures.utils.extend({}, eventData), // start eventData for distances, timing etc\n        lastEvent   : false, // last eventData\n        name        : '' // current gesture we're in/detected, can be 'tap', 'hold' etc\n      };\n\n      this.detect(eventData);\n    },\n\n\n    /**\n     * ionic.Gestures.gesture detection\n     * @param   {Object}    eventData\n     */\n    detect: function detect(eventData) {\n      if(!this.current || this.stopped) {\n        return;\n      }\n\n      // extend event data with calculations about scale, distance etc\n      eventData = this.extendEventData(eventData);\n\n      // instance options\n      var inst_options = this.current.inst.options;\n\n      // call ionic.Gestures.gesture handlers\n      for(var g=0,len=this.gestures.length; g<len; g++) {\n        var gesture = this.gestures[g];\n\n        // only when the instance options have enabled this gesture\n        if(!this.stopped && inst_options[gesture.name] !== false) {\n          // if a handler returns false, we stop with the detection\n          if(gesture.handler.call(gesture, eventData, this.current.inst) === false) {\n            this.stopDetect();\n            break;\n          }\n        }\n      }\n\n      // store as previous event event\n      if(this.current) {\n        this.current.lastEvent = eventData;\n      }\n\n      // endevent, but not the last touch, so dont stop\n      if(eventData.eventType == ionic.Gestures.EVENT_END && !eventData.touches.length-1) {\n        this.stopDetect();\n      }\n\n      return eventData;\n    },\n\n\n    /**\n     * clear the ionic.Gestures.gesture vars\n     * this is called on endDetect, but can also be used when a final ionic.Gestures.gesture has been detected\n     * to stop other ionic.Gestures.gestures from being fired\n     */\n    stopDetect: function stopDetect() {\n      // clone current data to the store as the previous gesture\n      // used for the double tap gesture, since this is an other gesture detect session\n      this.previous = ionic.Gestures.utils.extend({}, this.current);\n\n      // reset the current\n      this.current = null;\n\n      // stopped!\n      this.stopped = true;\n    },\n\n\n    /**\n     * extend eventData for ionic.Gestures.gestures\n     * @param   {Object}   ev\n     * @returns {Object}   ev\n     */\n    extendEventData: function extendEventData(ev) {\n      var startEv = this.current.startEvent;\n\n      // if the touches change, set the new touches over the startEvent touches\n      // this because touchevents don't have all the touches on touchstart, or the\n      // user must place his fingers at the EXACT same time on the screen, which is not realistic\n      // but, sometimes it happens that both fingers are touching at the EXACT same time\n      if(startEv && (ev.touches.length != startEv.touches.length || ev.touches === startEv.touches)) {\n        // extend 1 level deep to get the touchlist with the touch objects\n        startEv.touches = [];\n        for(var i=0,len=ev.touches.length; i<len; i++) {\n          startEv.touches.push(ionic.Gestures.utils.extend({}, ev.touches[i]));\n        }\n      }\n\n      var delta_time = ev.timeStamp - startEv.timeStamp,\n          delta_x = ev.center.pageX - startEv.center.pageX,\n          delta_y = ev.center.pageY - startEv.center.pageY,\n          velocity = ionic.Gestures.utils.getVelocity(delta_time, delta_x, delta_y);\n\n      ionic.Gestures.utils.extend(ev, {\n        deltaTime   : delta_time,\n\n        deltaX      : delta_x,\n        deltaY      : delta_y,\n\n        velocityX   : velocity.x,\n        velocityY   : velocity.y,\n\n        distance    : ionic.Gestures.utils.getDistance(startEv.center, ev.center),\n        angle       : ionic.Gestures.utils.getAngle(startEv.center, ev.center),\n        direction   : ionic.Gestures.utils.getDirection(startEv.center, ev.center),\n\n        scale       : ionic.Gestures.utils.getScale(startEv.touches, ev.touches),\n        rotation    : ionic.Gestures.utils.getRotation(startEv.touches, ev.touches),\n\n        startEvent  : startEv\n      });\n\n      return ev;\n    },\n\n\n    /**\n     * register new gesture\n     * @param   {Object}    gesture object, see gestures.js for documentation\n     * @returns {Array}     gestures\n     */\n    register: function register(gesture) {\n      // add an enable gesture options if there is no given\n      var options = gesture.defaults || {};\n      if(options[gesture.name] === undefined) {\n        options[gesture.name] = true;\n      }\n\n      // extend ionic.Gestures default options with the ionic.Gestures.gesture options\n      ionic.Gestures.utils.extend(ionic.Gestures.defaults, options, true);\n\n      // set its index\n      gesture.index = gesture.index || 1000;\n\n      // add ionic.Gestures.gesture to the list\n      this.gestures.push(gesture);\n\n      // sort the list by index\n      this.gestures.sort(function(a, b) {\n        if (a.index < b.index) {\n          return -1;\n        }\n        if (a.index > b.index) {\n          return 1;\n        }\n        return 0;\n      });\n\n      return this.gestures;\n    }\n  };\n\n\n  ionic.Gestures.gestures = ionic.Gestures.gestures || {};\n\n  /**\n   * Custom gestures\n   * ==============================\n   *\n   * Gesture object\n   * --------------------\n   * The object structure of a gesture:\n   *\n   * { name: 'mygesture',\n   *   index: 1337,\n   *   defaults: {\n   *     mygesture_option: true\n   *   }\n   *   handler: function(type, ev, inst) {\n   *     // trigger gesture event\n   *     inst.trigger(this.name, ev);\n   *   }\n   * }\n\n   * @param   {String}    name\n   * this should be the name of the gesture, lowercase\n   * it is also being used to disable/enable the gesture per instance config.\n   *\n   * @param   {Number}    [index=1000]\n   * the index of the gesture, where it is going to be in the stack of gestures detection\n   * like when you build an gesture that depends on the drag gesture, it is a good\n   * idea to place it after the index of the drag gesture.\n   *\n   * @param   {Object}    [defaults={}]\n   * the default settings of the gesture. these are added to the instance settings,\n   * and can be overruled per instance. you can also add the name of the gesture,\n   * but this is also added by default (and set to true).\n   *\n   * @param   {Function}  handler\n   * this handles the gesture detection of your custom gesture and receives the\n   * following arguments:\n   *\n   *      @param  {Object}    eventData\n   *      event data containing the following properties:\n   *          timeStamp   {Number}        time the event occurred\n   *          target      {HTMLElement}   target element\n   *          touches     {Array}         touches (fingers, pointers, mouse) on the screen\n   *          pointerType {String}        kind of pointer that was used. matches ionic.Gestures.POINTER_MOUSE|TOUCH\n   *          center      {Object}        center position of the touches. contains pageX and pageY\n   *          deltaTime   {Number}        the total time of the touches in the screen\n   *          deltaX      {Number}        the delta on x axis we haved moved\n   *          deltaY      {Number}        the delta on y axis we haved moved\n   *          velocityX   {Number}        the velocity on the x\n   *          velocityY   {Number}        the velocity on y\n   *          angle       {Number}        the angle we are moving\n   *          direction   {String}        the direction we are moving. matches ionic.Gestures.DIRECTION_UP|DOWN|LEFT|RIGHT\n   *          distance    {Number}        the distance we haved moved\n   *          scale       {Number}        scaling of the touches, needs 2 touches\n   *          rotation    {Number}        rotation of the touches, needs 2 touches *\n   *          eventType   {String}        matches ionic.Gestures.EVENT_START|MOVE|END\n   *          srcEvent    {Object}        the source event, like TouchStart or MouseDown *\n   *          startEvent  {Object}        contains the same properties as above,\n   *                                      but from the first touch. this is used to calculate\n   *                                      distances, deltaTime, scaling etc\n   *\n   *      @param  {ionic.Gestures.Instance}    inst\n   *      the instance we are doing the detection for. you can get the options from\n   *      the inst.options object and trigger the gesture event by calling inst.trigger\n   *\n   *\n   * Handle gestures\n   * --------------------\n   * inside the handler you can get/set ionic.Gestures.detectionic.current. This is the current\n   * detection sessionic. It has the following properties\n   *      @param  {String}    name\n   *      contains the name of the gesture we have detected. it has not a real function,\n   *      only to check in other gestures if something is detected.\n   *      like in the drag gesture we set it to 'drag' and in the swipe gesture we can\n   *      check if the current gesture is 'drag' by accessing ionic.Gestures.detectionic.current.name\n   *\n   *      readonly\n   *      @param  {ionic.Gestures.Instance}    inst\n   *      the instance we do the detection for\n   *\n   *      readonly\n   *      @param  {Object}    startEvent\n   *      contains the properties of the first gesture detection in this sessionic.\n   *      Used for calculations about timing, distance, etc.\n   *\n   *      readonly\n   *      @param  {Object}    lastEvent\n   *      contains all the properties of the last gesture detect in this sessionic.\n   *\n   * after the gesture detection session has been completed (user has released the screen)\n   * the ionic.Gestures.detectionic.current object is copied into ionic.Gestures.detectionic.previous,\n   * this is usefull for gestures like doubletap, where you need to know if the\n   * previous gesture was a tap\n   *\n   * options that have been set by the instance can be received by calling inst.options\n   *\n   * You can trigger a gesture event by calling inst.trigger(\"mygesture\", event).\n   * The first param is the name of your gesture, the second the event argument\n   *\n   *\n   * Register gestures\n   * --------------------\n   * When an gesture is added to the ionic.Gestures.gestures object, it is auto registered\n   * at the setup of the first ionic.Gestures instance. You can also call ionic.Gestures.detectionic.register\n   * manually and pass your gesture object as a param\n   *\n   */\n\n  /**\n   * Hold\n   * Touch stays at the same place for x time\n   * events  hold\n   */\n  ionic.Gestures.gestures.Hold = {\n    name: 'hold',\n    index: 10,\n    defaults: {\n      hold_timeout\t: 500,\n      hold_threshold\t: 1\n    },\n    timer: null,\n    handler: function holdGesture(ev, inst) {\n      switch(ev.eventType) {\n        case ionic.Gestures.EVENT_START:\n          // clear any running timers\n          clearTimeout(this.timer);\n\n          // set the gesture so we can check in the timeout if it still is\n          ionic.Gestures.detection.current.name = this.name;\n\n          // set timer and if after the timeout it still is hold,\n          // we trigger the hold event\n          this.timer = setTimeout(function() {\n            if(ionic.Gestures.detection.current.name == 'hold') {\n              ionic.tap.cancelClick();\n              inst.trigger('hold', ev);\n            }\n          }, inst.options.hold_timeout);\n          break;\n\n          // when you move or end we clear the timer\n        case ionic.Gestures.EVENT_MOVE:\n          if(ev.distance > inst.options.hold_threshold) {\n            clearTimeout(this.timer);\n          }\n          break;\n\n        case ionic.Gestures.EVENT_END:\n          clearTimeout(this.timer);\n          break;\n      }\n    }\n  };\n\n\n  /**\n   * Tap/DoubleTap\n   * Quick touch at a place or double at the same place\n   * events  tap, doubletap\n   */\n  ionic.Gestures.gestures.Tap = {\n    name: 'tap',\n    index: 100,\n    defaults: {\n      tap_max_touchtime\t: 250,\n      tap_max_distance\t: 10,\n      tap_always\t\t\t: true,\n      doubletap_distance\t: 20,\n      doubletap_interval\t: 300\n    },\n    handler: function tapGesture(ev, inst) {\n      if(ev.eventType == ionic.Gestures.EVENT_END && ev.srcEvent.type != 'touchcancel') {\n        // previous gesture, for the double tap since these are two different gesture detections\n        var prev = ionic.Gestures.detection.previous,\n        did_doubletap = false;\n\n        // when the touchtime is higher then the max touch time\n        // or when the moving distance is too much\n        if(ev.deltaTime > inst.options.tap_max_touchtime ||\n            ev.distance > inst.options.tap_max_distance) {\n              return;\n            }\n\n        // check if double tap\n        if(prev && prev.name == 'tap' &&\n            (ev.timeStamp - prev.lastEvent.timeStamp) < inst.options.doubletap_interval &&\n            ev.distance < inst.options.doubletap_distance) {\n              inst.trigger('doubletap', ev);\n              did_doubletap = true;\n            }\n\n        // do a single tap\n        if(!did_doubletap || inst.options.tap_always) {\n          ionic.Gestures.detection.current.name = 'tap';\n          inst.trigger('tap', ev);\n        }\n      }\n    }\n  };\n\n\n  /**\n   * Swipe\n   * triggers swipe events when the end velocity is above the threshold\n   * events  swipe, swipeleft, swiperight, swipeup, swipedown\n   */\n  ionic.Gestures.gestures.Swipe = {\n    name: 'swipe',\n    index: 40,\n    defaults: {\n      // set 0 for unlimited, but this can conflict with transform\n      swipe_max_touches  : 1,\n      swipe_velocity     : 0.7\n    },\n    handler: function swipeGesture(ev, inst) {\n      if(ev.eventType == ionic.Gestures.EVENT_END) {\n        // max touches\n        if(inst.options.swipe_max_touches > 0 &&\n            ev.touches.length > inst.options.swipe_max_touches) {\n              return;\n            }\n\n        // when the distance we moved is too small we skip this gesture\n        // or we can be already in dragging\n        if(ev.velocityX > inst.options.swipe_velocity ||\n            ev.velocityY > inst.options.swipe_velocity) {\n              // trigger swipe events\n              inst.trigger(this.name, ev);\n              inst.trigger(this.name + ev.direction, ev);\n            }\n      }\n    }\n  };\n\n\n  /**\n   * Drag\n   * Move with x fingers (default 1) around on the page. Blocking the scrolling when\n   * moving left and right is a good practice. When all the drag events are blocking\n   * you disable scrolling on that area.\n   * events  drag, drapleft, dragright, dragup, dragdown\n   */\n  ionic.Gestures.gestures.Drag = {\n    name: 'drag',\n    index: 50,\n    defaults: {\n      drag_min_distance : 10,\n      // Set correct_for_drag_min_distance to true to make the starting point of the drag\n      // be calculated from where the drag was triggered, not from where the touch started.\n      // Useful to avoid a jerk-starting drag, which can make fine-adjustments\n      // through dragging difficult, and be visually unappealing.\n      correct_for_drag_min_distance : true,\n      // set 0 for unlimited, but this can conflict with transform\n      drag_max_touches  : 1,\n      // prevent default browser behavior when dragging occurs\n      // be careful with it, it makes the element a blocking element\n      // when you are using the drag gesture, it is a good practice to set this true\n      drag_block_horizontal   : true,\n      drag_block_vertical     : true,\n      // drag_lock_to_axis keeps the drag gesture on the axis that it started on,\n      // It disallows vertical directions if the initial direction was horizontal, and vice versa.\n      drag_lock_to_axis       : false,\n      // drag lock only kicks in when distance > drag_lock_min_distance\n      // This way, locking occurs only when the distance has become large enough to reliably determine the direction\n      drag_lock_min_distance : 25\n    },\n    triggered: false,\n    handler: function dragGesture(ev, inst) {\n      // current gesture isnt drag, but dragged is true\n      // this means an other gesture is busy. now call dragend\n      if(ionic.Gestures.detection.current.name != this.name && this.triggered) {\n        inst.trigger(this.name +'end', ev);\n        this.triggered = false;\n        return;\n      }\n\n      // max touches\n      if(inst.options.drag_max_touches > 0 &&\n          ev.touches.length > inst.options.drag_max_touches) {\n            return;\n          }\n\n      switch(ev.eventType) {\n        case ionic.Gestures.EVENT_START:\n          this.triggered = false;\n          break;\n\n        case ionic.Gestures.EVENT_MOVE:\n          // when the distance we moved is too small we skip this gesture\n          // or we can be already in dragging\n          if(ev.distance < inst.options.drag_min_distance &&\n              ionic.Gestures.detection.current.name != this.name) {\n                return;\n              }\n\n          // we are dragging!\n          if(ionic.Gestures.detection.current.name != this.name) {\n            ionic.Gestures.detection.current.name = this.name;\n            if (inst.options.correct_for_drag_min_distance) {\n              // When a drag is triggered, set the event center to drag_min_distance pixels from the original event center.\n              // Without this correction, the dragged distance would jumpstart at drag_min_distance pixels instead of at 0.\n              // It might be useful to save the original start point somewhere\n              var factor = Math.abs(inst.options.drag_min_distance/ev.distance);\n              ionic.Gestures.detection.current.startEvent.center.pageX += ev.deltaX * factor;\n              ionic.Gestures.detection.current.startEvent.center.pageY += ev.deltaY * factor;\n\n              // recalculate event data using new start point\n              ev = ionic.Gestures.detection.extendEventData(ev);\n            }\n          }\n\n          // lock drag to axis?\n          if(ionic.Gestures.detection.current.lastEvent.drag_locked_to_axis || (inst.options.drag_lock_to_axis && inst.options.drag_lock_min_distance<=ev.distance)) {\n            ev.drag_locked_to_axis = true;\n          }\n          var last_direction = ionic.Gestures.detection.current.lastEvent.direction;\n          if(ev.drag_locked_to_axis && last_direction !== ev.direction) {\n            // keep direction on the axis that the drag gesture started on\n            if(ionic.Gestures.utils.isVertical(last_direction)) {\n              ev.direction = (ev.deltaY < 0) ? ionic.Gestures.DIRECTION_UP : ionic.Gestures.DIRECTION_DOWN;\n            }\n            else {\n              ev.direction = (ev.deltaX < 0) ? ionic.Gestures.DIRECTION_LEFT : ionic.Gestures.DIRECTION_RIGHT;\n            }\n          }\n\n          // first time, trigger dragstart event\n          if(!this.triggered) {\n            inst.trigger(this.name +'start', ev);\n            this.triggered = true;\n          }\n\n          // trigger normal event\n          inst.trigger(this.name, ev);\n\n          // direction event, like dragdown\n          inst.trigger(this.name + ev.direction, ev);\n\n          // block the browser events\n          if( (inst.options.drag_block_vertical && ionic.Gestures.utils.isVertical(ev.direction)) ||\n              (inst.options.drag_block_horizontal && !ionic.Gestures.utils.isVertical(ev.direction))) {\n                ev.preventDefault();\n              }\n          break;\n\n        case ionic.Gestures.EVENT_END:\n          // trigger dragend\n          if(this.triggered) {\n            inst.trigger(this.name +'end', ev);\n          }\n\n          this.triggered = false;\n          break;\n      }\n    }\n  };\n\n\n  /**\n   * Transform\n   * User want to scale or rotate with 2 fingers\n   * events  transform, pinch, pinchin, pinchout, rotate\n   */\n  ionic.Gestures.gestures.Transform = {\n    name: 'transform',\n    index: 45,\n    defaults: {\n      // factor, no scale is 1, zoomin is to 0 and zoomout until higher then 1\n      transform_min_scale     : 0.01,\n      // rotation in degrees\n      transform_min_rotation  : 1,\n      // prevent default browser behavior when two touches are on the screen\n      // but it makes the element a blocking element\n      // when you are using the transform gesture, it is a good practice to set this true\n      transform_always_block  : false\n    },\n    triggered: false,\n    handler: function transformGesture(ev, inst) {\n      // current gesture isnt drag, but dragged is true\n      // this means an other gesture is busy. now call dragend\n      if(ionic.Gestures.detection.current.name != this.name && this.triggered) {\n        inst.trigger(this.name +'end', ev);\n        this.triggered = false;\n        return;\n      }\n\n      // atleast multitouch\n      if(ev.touches.length < 2) {\n        return;\n      }\n\n      // prevent default when two fingers are on the screen\n      if(inst.options.transform_always_block) {\n        ev.preventDefault();\n      }\n\n      switch(ev.eventType) {\n        case ionic.Gestures.EVENT_START:\n          this.triggered = false;\n          break;\n\n        case ionic.Gestures.EVENT_MOVE:\n          var scale_threshold = Math.abs(1-ev.scale);\n          var rotation_threshold = Math.abs(ev.rotation);\n\n          // when the distance we moved is too small we skip this gesture\n          // or we can be already in dragging\n          if(scale_threshold < inst.options.transform_min_scale &&\n              rotation_threshold < inst.options.transform_min_rotation) {\n                return;\n              }\n\n          // we are transforming!\n          ionic.Gestures.detection.current.name = this.name;\n\n          // first time, trigger dragstart event\n          if(!this.triggered) {\n            inst.trigger(this.name +'start', ev);\n            this.triggered = true;\n          }\n\n          inst.trigger(this.name, ev); // basic transform event\n\n          // trigger rotate event\n          if(rotation_threshold > inst.options.transform_min_rotation) {\n            inst.trigger('rotate', ev);\n          }\n\n          // trigger pinch event\n          if(scale_threshold > inst.options.transform_min_scale) {\n            inst.trigger('pinch', ev);\n            inst.trigger('pinch'+ ((ev.scale < 1) ? 'in' : 'out'), ev);\n          }\n          break;\n\n        case ionic.Gestures.EVENT_END:\n          // trigger dragend\n          if(this.triggered) {\n            inst.trigger(this.name +'end', ev);\n          }\n\n          this.triggered = false;\n          break;\n      }\n    }\n  };\n\n\n  /**\n   * Touch\n   * Called as first, tells the user has touched the screen\n   * events  touch\n   */\n  ionic.Gestures.gestures.Touch = {\n    name: 'touch',\n    index: -Infinity,\n    defaults: {\n      // call preventDefault at touchstart, and makes the element blocking by\n      // disabling the scrolling of the page, but it improves gestures like\n      // transforming and dragging.\n      // be careful with using this, it can be very annoying for users to be stuck\n      // on the page\n      prevent_default: false,\n\n      // disable mouse events, so only touch (or pen!) input triggers events\n      prevent_mouseevents: false\n    },\n    handler: function touchGesture(ev, inst) {\n      if(inst.options.prevent_mouseevents && ev.pointerType == ionic.Gestures.POINTER_MOUSE) {\n        ev.stopDetect();\n        return;\n      }\n\n      if(inst.options.prevent_default) {\n        ev.preventDefault();\n      }\n\n      if(ev.eventType ==  ionic.Gestures.EVENT_START) {\n        inst.trigger(this.name, ev);\n      }\n    }\n  };\n\n\n  /**\n   * Release\n   * Called as last, tells the user has released the screen\n   * events  release\n   */\n  ionic.Gestures.gestures.Release = {\n    name: 'release',\n    index: Infinity,\n    handler: function releaseGesture(ev, inst) {\n      if(ev.eventType ==  ionic.Gestures.EVENT_END) {\n        inst.trigger(this.name, ev);\n      }\n    }\n  };\n})(window.ionic);\n\n(function(window, document, ionic) {\n\n  var IOS = 'ios';\n  var ANDROID = 'android';\n  var WINDOWS_PHONE = 'windowsphone';\n\n  /**\n   * @ngdoc utility\n   * @name ionic.Platform\n   * @module ionic\n   */\n  ionic.Platform = {\n\n    // Put navigator on platform so it can be mocked and set\n    // the browser does not allow window.navigator to be set\n    navigator: window.navigator,\n\n    /**\n     * @ngdoc property\n     * @name ionic.Platform#isReady\n     * @returns {boolean} Whether the device is ready.\n     */\n    isReady: false,\n    /**\n     * @ngdoc property\n     * @name ionic.Platform#isFullScreen\n     * @returns {boolean} Whether the device is fullscreen.\n     */\n    isFullScreen: false,\n    /**\n     * @ngdoc property\n     * @name ionic.Platform#platforms\n     * @returns {Array(string)} An array of all platforms found.\n     */\n    platforms: null,\n    /**\n     * @ngdoc property\n     * @name ionic.Platform#grade\n     * @returns {string} What grade the current platform is.\n     */\n    grade: null,\n    ua: navigator.userAgent,\n\n    /**\n     * @ngdoc method\n     * @name ionic.Platform#ready\n     * @description\n     * Trigger a callback once the device is ready, or immediately\n     * if the device is already ready. This method can be run from\n     * anywhere and does not need to be wrapped by any additonal methods.\n     * When the app is within a WebView (Cordova), it'll fire\n     * the callback once the device is ready. If the app is within\n     * a web browser, it'll fire the callback after `window.load`.\n     * @param {function} callback The function to call.\n     */\n    ready: function(cb) {\n      // run through tasks to complete now that the device is ready\n      if(this.isReady) {\n        cb();\n      } else {\n        // the platform isn't ready yet, add it to this array\n        // which will be called once the platform is ready\n        readyCallbacks.push(cb);\n      }\n    },\n\n    /**\n     * @private\n     */\n    detect: function() {\n      ionic.Platform._checkPlatforms();\n\n      ionic.requestAnimationFrame(function(){\n        // only add to the body class if we got platform info\n        for(var i = 0; i < ionic.Platform.platforms.length; i++) {\n          document.body.classList.add('platform-' + ionic.Platform.platforms[i]);\n        }\n      });\n    },\n\n    /**\n     * @ngdoc method\n     * @name ionic.Platform#setGrade\n     * @description Set the grade of the device: 'a', 'b', or 'c'. 'a' is the best\n     * (most css features enabled), 'c' is the worst.  By default, sets the grade\n     * depending on the current device.\n     * @param {string} grade The new grade to set.\n     */\n    setGrade: function(grade) {\n      var oldGrade = this.grade;\n      this.grade = grade;\n      ionic.requestAnimationFrame(function() {\n        if (oldGrade) {\n          document.body.classList.remove('grade-' + oldGrade);\n        }\n        document.body.classList.add('grade-' + grade);\n      });\n    },\n\n    /**\n     * @ngdoc method\n     * @name ionic.Platform#device\n     * @description Return the current device (given by cordova).\n     * @returns {object} The device object.\n     */\n    device: function() {\n      if(window.device) return window.device;\n      if(this.isWebView()) void 0;\n      return {};\n    },\n\n    _checkPlatforms: function(platforms) {\n      this.platforms = [];\n      var grade = 'a';\n\n      if(this.isWebView()) {\n        this.platforms.push('webview');\n        this.platforms.push('cordova');\n      } else {\n        this.platforms.push('browser');\n      }\n      if(this.isIPad()) this.platforms.push('ipad');\n\n      var platform = this.platform();\n      if(platform) {\n        this.platforms.push(platform);\n\n        var version = this.version();\n        if(version) {\n          var v = version.toString();\n          if(v.indexOf('.') > 0) {\n            v = v.replace('.', '_');\n          } else {\n            v += '_0';\n          }\n          this.platforms.push(platform + v.split('_')[0]);\n          this.platforms.push(platform + v);\n\n          if(this.isAndroid() && version < 4.4) {\n            grade = (version < 4 ? 'c' : 'b');\n          } else if(this.isWindowsPhone()) {\n            grade = 'b';\n          }\n        }\n      }\n\n      this.setGrade(grade);\n    },\n\n    /**\n     * @ngdoc method\n     * @name ionic.Platform#isWebView\n     * @returns {boolean} Check if we are running within a WebView (such as Cordova).\n     */\n    isWebView: function() {\n      return !(!window.cordova && !window.PhoneGap && !window.phonegap);\n    },\n    /**\n     * @ngdoc method\n     * @name ionic.Platform#isIPad\n     * @returns {boolean} Whether we are running on iPad.\n     */\n    isIPad: function() {\n      if( /iPad/i.test(ionic.Platform.navigator.platform) ) {\n        return true;\n      }\n      return /iPad/i.test(this.ua);\n    },\n    /**\n     * @ngdoc method\n     * @name ionic.Platform#isIOS\n     * @returns {boolean} Whether we are running on iOS.\n     */\n    isIOS: function() {\n      return this.is(IOS);\n    },\n    /**\n     * @ngdoc method\n     * @name ionic.Platform#isAndroid\n     * @returns {boolean} Whether we are running on Android.\n     */\n    isAndroid: function() {\n      return this.is(ANDROID);\n    },\n    /**\n     * @ngdoc method\n     * @name ionic.Platform#isWindowsPhone\n     * @returns {boolean} Whether we are running on Windows Phone.\n     */\n    isWindowsPhone: function() {\n      return this.is(WINDOWS_PHONE);\n    },\n\n    /**\n     * @ngdoc method\n     * @name ionic.Platform#platform\n     * @returns {string} The name of the current platform.\n     */\n    platform: function() {\n      // singleton to get the platform name\n      if(platformName === null) this.setPlatform(this.device().platform);\n      return platformName;\n    },\n\n    /**\n     * @private\n     */\n    setPlatform: function(n) {\n      if(typeof n != 'undefined' && n !== null && n.length) {\n        platformName = n.toLowerCase();\n      } else if(this.ua.indexOf('Android') > 0) {\n        platformName = ANDROID;\n      } else if(this.ua.indexOf('iPhone') > -1 || this.ua.indexOf('iPad') > -1 || this.ua.indexOf('iPod') > -1) {\n        platformName = IOS;\n      } else if(this.ua.indexOf('Windows Phone') > -1) {\n        platformName = WINDOWS_PHONE;\n      } else {\n        platformName = ionic.Platform.navigator.platform && navigator.platform.toLowerCase().split(' ')[0] || '';\n      }\n    },\n\n    /**\n     * @ngdoc method\n     * @name ionic.Platform#version\n     * @returns {string} The version of the current device platform.\n     */\n    version: function() {\n      // singleton to get the platform version\n      if(platformVersion === null) this.setVersion(this.device().version);\n      return platformVersion;\n    },\n\n    /**\n     * @private\n     */\n    setVersion: function(v) {\n      if(typeof v != 'undefined' && v !== null) {\n        v = v.split('.');\n        v = parseFloat(v[0] + '.' + (v.length > 1 ? v[1] : 0));\n        if(!isNaN(v)) {\n          platformVersion = v;\n          return;\n        }\n      }\n\n      platformVersion = 0;\n\n      // fallback to user-agent checking\n      var pName = this.platform();\n      var versionMatch = {\n        'android': /Android (\\d+).(\\d+)?/,\n        'ios': /OS (\\d+)_(\\d+)?/,\n        'windowsphone': /Windows Phone (\\d+).(\\d+)?/\n      };\n      if(versionMatch[pName]) {\n        v = this.ua.match( versionMatch[pName] );\n        if(v &&  v.length > 2) {\n          platformVersion = parseFloat( v[1] + '.' + v[2] );\n        }\n      }\n    },\n\n    // Check if the platform is the one detected by cordova\n    is: function(type) {\n      type = type.toLowerCase();\n      // check if it has an array of platforms\n      if(this.platforms) {\n        for(var x = 0; x < this.platforms.length; x++) {\n          if(this.platforms[x] === type) return true;\n        }\n      }\n      // exact match\n      var pName = this.platform();\n      if(pName) {\n        return pName === type.toLowerCase();\n      }\n\n      // A quick hack for to check userAgent\n      return this.ua.toLowerCase().indexOf(type) >= 0;\n    },\n\n    /**\n     * @ngdoc method\n     * @name ionic.Platform#exitApp\n     * @description Exit the app.\n     */\n    exitApp: function() {\n      this.ready(function(){\n        navigator.app && navigator.app.exitApp && navigator.app.exitApp();\n      });\n    },\n\n    /**\n     * @ngdoc method\n     * @name ionic.Platform#showStatusBar\n     * @description Shows or hides the device status bar (in Cordova).\n     * @param {boolean} shouldShow Whether or not to show the status bar.\n     */\n    showStatusBar: function(val) {\n      // Only useful when run within cordova\n      this._showStatusBar = val;\n      this.ready(function(){\n        // run this only when or if the platform (cordova) is ready\n        ionic.requestAnimationFrame(function(){\n          if(ionic.Platform._showStatusBar) {\n            // they do not want it to be full screen\n            window.StatusBar && window.StatusBar.show();\n            document.body.classList.remove('status-bar-hide');\n          } else {\n            // it should be full screen\n            window.StatusBar && window.StatusBar.hide();\n            document.body.classList.add('status-bar-hide');\n          }\n        });\n      });\n    },\n\n    /**\n     * @ngdoc method\n     * @name ionic.Platform#fullScreen\n     * @description\n     * Sets whether the app is fullscreen or not (in Cordova).\n     * @param {boolean=} showFullScreen Whether or not to set the app to fullscreen. Defaults to true.\n     * @param {boolean=} showStatusBar Whether or not to show the device's status bar. Defaults to false.\n     */\n    fullScreen: function(showFullScreen, showStatusBar) {\n      // showFullScreen: default is true if no param provided\n      this.isFullScreen = (showFullScreen !== false);\n\n      // add/remove the fullscreen classname to the body\n      ionic.DomUtil.ready(function(){\n        // run this only when or if the DOM is ready\n        ionic.requestAnimationFrame(function(){\n          if(ionic.Platform.isFullScreen) {\n            document.body.classList.add('fullscreen');\n          } else {\n            document.body.classList.remove('fullscreen');\n          }\n        });\n        // showStatusBar: default is false if no param provided\n        ionic.Platform.showStatusBar( (showStatusBar === true) );\n      });\n    }\n\n  };\n\n  var platformName = null, // just the name, like iOS or Android\n  platformVersion = null, // a float of the major and minor, like 7.1\n  readyCallbacks = [];\n\n  // setup listeners to know when the device is ready to go\n  function onWindowLoad() {\n    if(ionic.Platform.isWebView()) {\n      // the window and scripts are fully loaded, and a cordova/phonegap\n      // object exists then let's listen for the deviceready\n      document.addEventListener(\"deviceready\", onPlatformReady, false);\n    } else {\n      // the window and scripts are fully loaded, but the window object doesn't have the\n      // cordova/phonegap object, so its just a browser, not a webview wrapped w/ cordova\n      onPlatformReady();\n    }\n    window.removeEventListener(\"load\", onWindowLoad, false);\n  }\n  window.addEventListener(\"load\", onWindowLoad, false);\n\n  function onPlatformReady() {\n    // the device is all set to go, init our own stuff then fire off our event\n    ionic.Platform.isReady = true;\n    ionic.Platform.detect();\n    for(var x=0; x<readyCallbacks.length; x++) {\n      // fire off all the callbacks that were added before the platform was ready\n      readyCallbacks[x]();\n    }\n    readyCallbacks = [];\n    ionic.trigger('platformready', { target: document });\n\n    ionic.requestAnimationFrame(function(){\n      document.body.classList.add('platform-ready');\n    });\n  }\n\n})(this, document, ionic);\n\n(function(document, ionic) {\n  'use strict';\n\n  // Ionic CSS polyfills\n  ionic.CSS = {};\n\n  (function() {\n\n    // transform\n    var i, keys = ['webkitTransform', 'transform', '-webkit-transform', 'webkit-transform',\n                   '-moz-transform', 'moz-transform', 'MozTransform', 'mozTransform', 'msTransform'];\n\n    for(i = 0; i < keys.length; i++) {\n      if(document.documentElement.style[keys[i]] !== undefined) {\n        ionic.CSS.TRANSFORM = keys[i];\n        break;\n      }\n    }\n\n    // transition\n    keys = ['webkitTransition', 'mozTransition', 'msTransition', 'transition'];\n    for(i = 0; i < keys.length; i++) {\n      if(document.documentElement.style[keys[i]] !== undefined) {\n        ionic.CSS.TRANSITION = keys[i];\n        break;\n      }\n    }\n\n  })();\n\n  // classList polyfill for them older Androids\n  // https://gist.github.com/devongovett/1381839\n  if (!(\"classList\" in document.documentElement) && Object.defineProperty && typeof HTMLElement !== 'undefined') {\n    Object.defineProperty(HTMLElement.prototype, 'classList', {\n      get: function() {\n        var self = this;\n        function update(fn) {\n          return function() {\n            var x, classes = self.className.split(/\\s+/);\n\n            for(x=0; x<arguments.length; x++) {\n              fn(classes, classes.indexOf(arguments[x]), arguments[x]);\n            }\n\n            self.className = classes.join(\" \");\n          };\n        }\n\n        return {\n          add: update(function(classes, index, value) {\n            ~index || classes.push(value);\n          }),\n\n          remove: update(function(classes, index) {\n            ~index && classes.splice(index, 1);\n          }),\n\n          toggle: update(function(classes, index, value) {\n            ~index ? classes.splice(index, 1) : classes.push(value);\n          }),\n\n          contains: function(value) {\n            return !!~self.className.split(/\\s+/).indexOf(value);\n          },\n\n          item: function(i) {\n            return self.className.split(/\\s+/)[i] || null;\n          }\n        };\n\n      }\n    });\n  }\n\n})(document, ionic);\n\n\n/**\n * @ngdoc page\n * @name tap\n * @module ionic\n * @description\n * On touch devices such as a phone or tablet, some browsers implement a 300ms delay between\n * the time the user stops touching the display and the moment the browser executes the\n * click. This delay was initially introduced so the browser can know whether the user wants to\n * double-tap to zoom in on the webpage.  Basically, the browser waits roughly 300ms to see if\n * the user is double-tapping, or just tapping on the display once.\n *\n * Out of the box, Ionic automatically removes the 300ms delay in order to make Ionic apps\n * feel more \"native\" like. Resultingly, other solutions such as\n * [fastclick](https://github.com/ftlabs/fastclick) and Angular's\n * [ngTouch](https://docs.angularjs.org/api/ngTouch) should not be included, to avoid conflicts.\n *\n * Some browsers already remove the delay with certain settings, such as the CSS property\n * `touch-events: none` or with specific meta tag viewport values. However, each of these\n * browsers still handle clicks differently, such as when to fire off or cancel the event\n * (like scrolling when the target is a button, or holding a button down).\n * For browsers that already remove the 300ms delay, consider Ionic's tap system as a way to\n * normalize how clicks are handled across the various devices so there's an expected response\n * no matter what the device, platform or version. Additionally, Ionic will prevent\n * ghostclicks which even browsers that remove the delay still experience.\n *\n * In some cases, third-party libraries may also be working with touch events which can interfere\n * with the tap system. For example, mapping libraries like Google or Leaflet Maps often implement\n * a touch detection system which conflicts with Ionic's tap system.\n *\n * ### Disabling the tap system\n *\n * To disable the tap for an element and all of its children elements,\n * add the attribute `data-tap-disabled=\"true\"`.\n *\n * ```html\n * <div data-tap-disabled=\"true\">\n *     <div id=\"google-map\"></div>\n * </div>\n * ```\n *\n * ### Additional Notes:\n *\n * - Ionic tap  works with Ionic's JavaScript scrolling\n * - Elements can come and go from the DOM and Ionic tap doesn't keep adding and removing\n *   listeners\n * - No \"tap delay\" after the first \"tap\" (you can tap as fast as you want, they all click)\n * - Minimal events listeners, only being added to document\n * - Correct focus in/out on each input type (select, textearea, range) on each platform/device\n * - Shows and hides virtual keyboard correctly for each platform/device\n * - Works with labels surrounding inputs\n * - Does not fire off a click if the user moves the pointer too far\n * - Adds and removes an 'activated' css class\n * - Multiple [unit tests](https://github.com/ionic-team/ionic/blob/master/test/unit/utils/tap.unit.js) for each scenario\n *\n */\n/*\n\n IONIC TAP\n ---------------\n - Both touch and mouse events are added to the document.body on DOM ready\n - If a touch event happens, it does not use mouse event listeners\n - On touchend, if the distance between start and end was small, trigger a click\n - In the triggered click event, add a 'isIonicTap' property\n - The triggered click receives the same x,y coordinates as as the end event\n - On document.body click listener (with useCapture=true), only allow clicks with 'isIonicTap'\n - Triggering clicks with mouse events work the same as touch, except with mousedown/mouseup\n - Tapping inputs is disabled during scrolling\n*/\n\nvar tapDoc; // the element which the listeners are on (document.body)\nvar tapActiveEle; // the element which is active (probably has focus)\nvar tapEnabledTouchEvents;\nvar tapMouseResetTimer;\nvar tapPointerMoved;\nvar tapPointerStart;\nvar tapTouchFocusedInput;\nvar tapLastTouchTarget;\nvar tapTouchMoveListener = 'touchmove';\n\n// how much the coordinates can be off between start/end, but still a click\nvar TAP_RELEASE_TOLERANCE = 6; // default tolerance\nvar TAP_RELEASE_BUTTON_TOLERANCE = 50; // button elements should have a larger tolerance\n\nvar tapEventListeners = {\n  'click': tapClickGateKeeper,\n\n  'mousedown': tapMouseDown,\n  'mouseup': tapMouseUp,\n  'mousemove': tapMouseMove,\n\n  'touchstart': tapTouchStart,\n  'touchend': tapTouchEnd,\n  'touchcancel': tapTouchCancel,\n  'touchmove': tapTouchMove,\n\n  'pointerdown': tapTouchStart,\n  'pointerup': tapTouchEnd,\n  'pointercancel': tapTouchCancel,\n  'pointermove': tapTouchMove,\n\n  'MSPointerDown': tapTouchStart,\n  'MSPointerUp': tapTouchEnd,\n  'MSPointerCancel': tapTouchCancel,\n  'MSPointerMove': tapTouchMove,\n\n  'focusin': tapFocusIn,\n  'focusout': tapFocusOut\n};\n\nionic.tap = {\n\n  register: function(ele) {\n    tapDoc = ele;\n\n    tapEventListener('click', true, true);\n    tapEventListener('mouseup');\n    tapEventListener('mousedown');\n\n    if( window.navigator.pointerEnabled ) {\n      tapEventListener('pointerdown');\n      tapEventListener('pointerup');\n      tapEventListener('pointcancel');\n      tapTouchMoveListener = 'pointermove';\n\n    } else if (window.navigator.msPointerEnabled) {\n      tapEventListener('MSPointerDown');\n      tapEventListener('MSPointerUp');\n      tapEventListener('MSPointerCancel');\n      tapTouchMoveListener = 'MSPointerMove';\n\n    } else {\n      tapEventListener('touchstart');\n      tapEventListener('touchend');\n      tapEventListener('touchcancel');\n    }\n\n    tapEventListener('focusin');\n    tapEventListener('focusout');\n\n    return function() {\n      for(var type in tapEventListeners) {\n        tapEventListener(type, false);\n      }\n      tapDoc = null;\n      tapActiveEle = null;\n      tapEnabledTouchEvents = false;\n      tapPointerMoved = false;\n      tapPointerStart = null;\n    };\n  },\n\n  ignoreScrollStart: function(e) {\n    return (e.defaultPrevented) ||  // defaultPrevented has been assigned by another component handling the event\n           (e.target.isContentEditable) ||\n           (/^(file|range)$/i).test(e.target.type) ||\n           (e.target.dataset ? e.target.dataset.preventScroll : e.target.getAttribute('data-prevent-default')) == 'true' || // manually set within an elements attributes\n           (!!(/^(object|embed)$/i).test(e.target.tagName)) ||  // flash/movie/object touches should not try to scroll\n           ionic.tap.isElementTapDisabled(e.target); // check if this element, or an ancestor, has `data-tap-disabled` attribute\n  },\n\n  isTextInput: function(ele) {\n    return !!ele &&\n           (ele.tagName == 'TEXTAREA' ||\n            ele.contentEditable === 'true' ||\n            (ele.tagName == 'INPUT' && !(/^(radio|checkbox|range|file|submit|reset)$/i).test(ele.type)) );\n  },\n\n  isDateInput: function(ele) {\n    return !!ele &&\n            (ele.tagName == 'INPUT' && (/^(date|time|datetime-local|month|week)$/i).test(ele.type));\n  },\n\n  isLabelWithTextInput: function(ele) {\n    var container = tapContainingElement(ele, false);\n\n    return !!container &&\n           ionic.tap.isTextInput( tapTargetElement( container ) );\n  },\n\n  containsOrIsTextInput: function(ele) {\n    return ionic.tap.isTextInput(ele) || ionic.tap.isLabelWithTextInput(ele);\n  },\n\n  cloneFocusedInput: function(container, scrollIntance) {\n    if(ionic.tap.hasCheckedClone) return;\n    ionic.tap.hasCheckedClone = true;\n\n    ionic.requestAnimationFrame(function(){\n      var focusInput = container.querySelector(':focus');\n      if( ionic.tap.isTextInput(focusInput) ) {\n        var clonedInput = focusInput.parentElement.querySelector('.cloned-text-input');\n        if(!clonedInput) {\n          clonedInput = document.createElement(focusInput.tagName);\n          clonedInput.placeholder = focusInput.placeholder;\n          clonedInput.type = focusInput.type;\n          clonedInput.value = focusInput.value;\n          clonedInput.style = focusInput.style;\n          clonedInput.className = focusInput.className;\n          clonedInput.classList.add('cloned-text-input');\n          clonedInput.readOnly = true;\n          focusInput.parentElement.insertBefore(clonedInput, focusInput);\n          focusInput.style.top = focusInput.offsetTop;\n          focusInput.classList.add('previous-input-focus');\n        }\n      }\n    });\n  },\n\n  hasCheckedClone: false,\n\n  removeClonedInputs: function(container, scrollIntance) {\n    ionic.tap.hasCheckedClone = false;\n\n    ionic.requestAnimationFrame(function(){\n      var clonedInputs = container.querySelectorAll('.cloned-text-input');\n      var previousInputFocus = container.querySelectorAll('.previous-input-focus');\n      var x;\n\n      for(x=0; x<clonedInputs.length; x++) {\n        clonedInputs[x].parentElement.removeChild( clonedInputs[x] );\n      }\n\n      for(x=0; x<previousInputFocus.length; x++) {\n        previousInputFocus[x].classList.remove('previous-input-focus');\n        previousInputFocus[x].style.top = '';\n        previousInputFocus[x].focus();\n      }\n    });\n  },\n\n  requiresNativeClick: function(ele) {\n    if(!ele || ele.disabled || (/^(file|range)$/i).test(ele.type) || (/^(object|video)$/i).test(ele.tagName) || ionic.tap.isLabelContainingFileInput(ele) ) {\n      return true;\n    }\n    return ionic.tap.isElementTapDisabled(ele);\n  },\n\n  isLabelContainingFileInput: function(ele) {\n    var lbl = tapContainingElement(ele);\n    if(lbl.tagName !== 'LABEL') return false;\n    var fileInput = lbl.querySelector('input[type=file]');\n    if(fileInput && fileInput.disabled === false) return true;\n    return false;\n  },\n\n  isElementTapDisabled: function(ele) {\n    if(ele && ele.nodeType === 1) {\n      var element = ele;\n      while(element) {\n        if( (element.dataset ? element.dataset.tapDisabled : element.getAttribute('data-tap-disabled')) == 'true' ) {\n          return true;\n        }\n        element = element.parentElement;\n      }\n    }\n    return false;\n  },\n\n  setTolerance: function(releaseTolerance, releaseButtonTolerance) {\n    TAP_RELEASE_TOLERANCE = releaseTolerance;\n    TAP_RELEASE_BUTTON_TOLERANCE = releaseButtonTolerance;\n  },\n\n  cancelClick: function() {\n    // used to cancel any simulated clicks which may happen on a touchend/mouseup\n    // gestures uses this method within its tap and hold events\n    tapPointerMoved = true;\n  }\n\n};\n\nfunction tapEventListener(type, enable, useCapture) {\n  if(enable !== false) {\n    tapDoc.addEventListener(type, tapEventListeners[type], useCapture);\n  } else {\n    tapDoc.removeEventListener(type, tapEventListeners[type]);\n  }\n}\n\nfunction tapClick(e) {\n  // simulate a normal click by running the element's click method then focus on it\n  var container = tapContainingElement(e.target);\n  var ele = tapTargetElement(container);\n\n  if( ionic.tap.requiresNativeClick(ele) || tapPointerMoved ) return false;\n\n  var c = getPointerCoordinates(e);\n\n  void 0;\n  triggerMouseEvent('click', ele, c.x, c.y);\n\n  // if it's an input, focus in on the target, otherwise blur\n  tapHandleFocus(ele);\n}\n\nfunction triggerMouseEvent(type, ele, x, y) {\n  // using initMouseEvent instead of MouseEvent for our Android friends\n  var clickEvent = document.createEvent(\"MouseEvents\");\n  clickEvent.initMouseEvent(type, true, true, window, 1, 0, 0, x, y, false, false, false, false, 0, null);\n  clickEvent.isIonicTap = true;\n  ele.dispatchEvent(clickEvent);\n}\n\nfunction tapClickGateKeeper(e) {\n  if(e.target.type == 'submit' && e.detail === 0) {\n    // do not prevent click if it came from an \"Enter\" or \"Go\" keypress submit\n    return;\n  }\n\n  // do not allow through any click events that were not created by ionic.tap\n  if( (ionic.scroll.isScrolling && ionic.tap.containsOrIsTextInput(e.target) ) ||\n      (!e.isIonicTap && !ionic.tap.requiresNativeClick(e.target)) ) {\n    void 0;\n    e.stopPropagation();\n\n    if( !ionic.tap.isLabelWithTextInput(e.target) ) {\n      // labels clicks from native should not preventDefault othersize keyboard will not show on input focus\n      e.preventDefault();\n    }\n    return false;\n  }\n}\n\n// MOUSE\nfunction tapMouseDown(e) {\n  if(e.isIonicTap || tapIgnoreEvent(e)) return;\n\n  if(tapEnabledTouchEvents) {\n    void 0;\n    e.stopPropagation();\n\n    if( (!ionic.tap.isTextInput(e.target) || tapLastTouchTarget !== e.target) && !(/^(select|option)$/i).test(e.target.tagName) ) {\n      // If you preventDefault on a text input then you cannot move its text caret/cursor.\n      // Allow through only the text input default. However, without preventDefault on an\n      // input the 300ms delay can change focus on inputs after the keyboard shows up.\n      // The focusin event handles the chance of focus changing after the keyboard shows.\n      e.preventDefault();\n    }\n\n    return false;\n  }\n\n  tapPointerMoved = false;\n  tapPointerStart = getPointerCoordinates(e);\n\n  tapEventListener('mousemove');\n  ionic.activator.start(e);\n}\n\nfunction tapMouseUp(e) {\n  if(tapEnabledTouchEvents) {\n    e.stopPropagation();\n    e.preventDefault();\n    return false;\n  }\n\n  if( tapIgnoreEvent(e) || (/^(select|option)$/i).test(e.target.tagName) ) return false;\n\n  if( !tapHasPointerMoved(e) ) {\n    tapClick(e);\n  }\n  tapEventListener('mousemove', false);\n  ionic.activator.end();\n  tapPointerMoved = false;\n}\n\nfunction tapMouseMove(e) {\n  if( tapHasPointerMoved(e) ) {\n    tapEventListener('mousemove', false);\n    ionic.activator.end();\n    tapPointerMoved = true;\n    return false;\n  }\n}\n\n\n// TOUCH\nfunction tapTouchStart(e) {\n  if( tapIgnoreEvent(e) ) return;\n\n  tapPointerMoved = false;\n\n  tapEnableTouchEvents();\n  tapPointerStart = getPointerCoordinates(e);\n\n  tapEventListener(tapTouchMoveListener);\n  ionic.activator.start(e);\n\n  if( ionic.Platform.isIOS() && ionic.tap.isLabelWithTextInput(e.target) ) {\n    // if the tapped element is a label, which has a child input\n    // then preventDefault so iOS doesn't ugly auto scroll to the input\n    // but do not prevent default on Android or else you cannot move the text caret\n    // and do not prevent default on Android or else no virtual keyboard shows up\n\n    var textInput = tapTargetElement( tapContainingElement(e.target) );\n    if( textInput !== tapActiveEle ) {\n      // don't preventDefault on an already focused input or else iOS's text caret isn't usable\n      e.preventDefault();\n    }\n  }\n}\n\nfunction tapTouchEnd(e) {\n  if( tapIgnoreEvent(e) ) return;\n\n  tapEnableTouchEvents();\n  if( !tapHasPointerMoved(e) ) {\n    tapClick(e);\n\n    if( (/^(select|option)$/i).test(e.target.tagName) ) {\n      e.preventDefault();\n    }\n  }\n\n  tapLastTouchTarget = e.target;\n  tapTouchCancel();\n}\n\nfunction tapTouchMove(e) {\n  if( tapHasPointerMoved(e) ) {\n    tapPointerMoved = true;\n    tapEventListener(tapTouchMoveListener, false);\n    ionic.activator.end();\n    return false;\n  }\n}\n\nfunction tapTouchCancel(e) {\n  tapEventListener(tapTouchMoveListener, false);\n  ionic.activator.end();\n  tapPointerMoved = false;\n}\n\nfunction tapEnableTouchEvents() {\n  tapEnabledTouchEvents = true;\n  clearTimeout(tapMouseResetTimer);\n  tapMouseResetTimer = setTimeout(function(){\n    tapEnabledTouchEvents = false;\n  }, 2000);\n}\n\nfunction tapIgnoreEvent(e) {\n  if(e.isTapHandled) return true;\n  e.isTapHandled = true;\n\n  if( ionic.scroll.isScrolling && ionic.tap.containsOrIsTextInput(e.target) ) {\n    e.preventDefault();\n    return true;\n  }\n}\n\nfunction tapHandleFocus(ele) {\n  tapTouchFocusedInput = null;\n\n  var triggerFocusIn = false;\n\n  if(ele.tagName == 'SELECT') {\n    // trick to force Android options to show up\n    triggerMouseEvent('mousedown', ele, 0, 0);\n    ele.focus && ele.focus();\n    triggerFocusIn = true;\n\n  } else if(tapActiveElement() === ele) {\n    // already is the active element and has focus\n    triggerFocusIn = true;\n\n  } else if( (/^(input|textarea)$/i).test(ele.tagName) ) {\n    triggerFocusIn = true;\n    ele.focus && ele.focus();\n    ele.value = ele.value;\n    if( tapEnabledTouchEvents ) {\n      tapTouchFocusedInput = ele;\n    }\n\n  } else {\n    tapFocusOutActive();\n  }\n\n  if(triggerFocusIn) {\n    tapActiveElement(ele);\n    ionic.trigger('ionic.focusin', {\n      target: ele\n    }, true);\n  }\n}\n\nfunction tapFocusOutActive() {\n  var ele = tapActiveElement();\n  if(ele && (/^(input|textarea|select)$/i).test(ele.tagName) ) {\n    void 0;\n    ele.blur();\n  }\n  tapActiveElement(null);\n}\n\nfunction tapFocusIn(e) {\n  // Because a text input doesn't preventDefault (so the caret still works) there's a chance\n  // that it's mousedown event 300ms later will change the focus to another element after\n  // the keyboard shows up.\n\n  if( tapEnabledTouchEvents &&\n      ionic.tap.isTextInput( tapActiveElement() ) &&\n      ionic.tap.isTextInput(tapTouchFocusedInput) &&\n      tapTouchFocusedInput !== e.target ) {\n\n    // 1) The pointer is from touch events\n    // 2) There is an active element which is a text input\n    // 3) A text input was just set to be focused on by a touch event\n    // 4) A new focus has been set, however the target isn't the one the touch event wanted\n    void 0;\n    tapTouchFocusedInput.focus();\n    tapTouchFocusedInput = null;\n  }\n  ionic.scroll.isScrolling = false;\n}\n\nfunction tapFocusOut() {\n  tapActiveElement(null);\n}\n\nfunction tapActiveElement(ele) {\n  if(arguments.length) {\n    tapActiveEle = ele;\n  }\n  return tapActiveEle || document.activeElement;\n}\n\nfunction tapHasPointerMoved(endEvent) {\n  if(!endEvent || endEvent.target.nodeType !== 1 || !tapPointerStart || ( tapPointerStart.x === 0 && tapPointerStart.y === 0 )) {\n    return false;\n  }\n  var endCoordinates = getPointerCoordinates(endEvent);\n\n  var hasClassList = !!(endEvent.target.classList && endEvent.target.classList.contains);\n  var releaseTolerance = hasClassList & endEvent.target.classList.contains('button') ?\n    TAP_RELEASE_BUTTON_TOLERANCE :\n    TAP_RELEASE_TOLERANCE;\n\n  return Math.abs(tapPointerStart.x - endCoordinates.x) > releaseTolerance ||\n         Math.abs(tapPointerStart.y - endCoordinates.y) > releaseTolerance;\n}\n\nfunction getPointerCoordinates(event) {\n  // This method can get coordinates for both a mouse click\n  // or a touch depending on the given event\n  var c = { x:0, y:0 };\n  if(event) {\n    var touches = event.touches && event.touches.length ? event.touches : [event];\n    var e = (event.changedTouches && event.changedTouches[0]) || touches[0];\n    if(e) {\n      c.x = e.clientX || e.pageX || 0;\n      c.y = e.clientY || e.pageY || 0;\n    }\n  }\n  return c;\n}\n\nfunction tapContainingElement(ele, allowSelf) {\n  var climbEle = ele;\n  for(var x=0; x<6; x++) {\n    if(!climbEle) break;\n    if(climbEle.tagName === 'LABEL') return climbEle;\n    climbEle = climbEle.parentElement;\n  }\n  if(allowSelf !== false) return ele;\n}\n\nfunction tapTargetElement(ele) {\n  if(ele && ele.tagName === 'LABEL') {\n    if(ele.control) return ele.control;\n\n    // older devices do not support the \"control\" property\n    if(ele.querySelector) {\n      var control = ele.querySelector('input,textarea,select');\n      if(control) return control;\n    }\n  }\n  return ele;\n}\n\nionic.DomUtil.ready(function(){\n  var ng = typeof angular !== 'undefined' ? angular : null;\n  //do nothing for e2e tests\n  if (!ng || (ng && !ng.scenario)) {\n    ionic.tap.register(document);\n  }\n});\n\n(function(document, ionic) {\n  'use strict';\n\n  var queueElements = {};   // elements that should get an active state in XX milliseconds\n  var activeElements = {};  // elements that are currently active\n  var keyId = 0;            // a counter for unique keys for the above ojects\n  var ACTIVATED_CLASS = 'activated';\n\n  ionic.activator = {\n\n    start: function(e) {\n      var self = this;\n\n      // when an element is touched/clicked, it climbs up a few\n      // parents to see if it is an .item or .button element\n      ionic.requestAnimationFrame(function(){\n        if ( ionic.tap.requiresNativeClick(e.target) ) return;\n        var ele = e.target;\n        var eleToActivate;\n\n        for(var x=0; x<4; x++) {\n          if(!ele || ele.nodeType !== 1) break;\n          if(eleToActivate && ele.classList.contains('item')) {\n            eleToActivate = ele;\n            break;\n          }\n          if( ele.tagName == 'A' || ele.tagName == 'BUTTON' || ele.hasAttribute('ng-click') ) {\n            eleToActivate = ele;\n            break;\n          }\n          if( ele.classList.contains('button') ) {\n            eleToActivate = ele;\n            break;\n          }\n          ele = ele.parentElement;\n        }\n\n        if(eleToActivate) {\n          // queue that this element should be set to active\n          queueElements[keyId] = eleToActivate;\n\n          // in XX milliseconds, set the queued elements to active\n          if(e.type === 'touchstart') {\n            self._activateTimeout = setTimeout(activateElements, 80);\n          } else {\n            ionic.requestAnimationFrame(activateElements);\n          }\n\n          keyId = (keyId > 19 ? 0 : keyId + 1);\n        }\n\n      });\n    },\n\n    end: function() {\n      // clear out any active/queued elements after XX milliseconds\n      clearTimeout(this._activateTimeout);\n      setTimeout(clear, 200);\n    }\n\n  };\n\n  function clear() {\n    // clear out any elements that are queued to be set to active\n    queueElements = {};\n\n    // in the next frame, remove the active class from all active elements\n    ionic.requestAnimationFrame(deactivateElements);\n  }\n\n  function activateElements() {\n    // activate all elements in the queue\n    for(var key in queueElements) {\n      if(queueElements[key]) {\n        queueElements[key].classList.add(ACTIVATED_CLASS);\n        activeElements[key] = queueElements[key];\n      }\n    }\n    queueElements = {};\n  }\n\n  function deactivateElements() {\n    for(var key in activeElements) {\n      if(activeElements[key]) {\n        activeElements[key].classList.remove(ACTIVATED_CLASS);\n        delete activeElements[key];\n      }\n    }\n  }\n\n})(document, ionic);\n\n(function(ionic) {\n\n  /* for nextUid() function below */\n  var uid = ['0','0','0'];\n\n  /**\n   * Various utilities used throughout Ionic\n   *\n   * Some of these are adopted from underscore.js and backbone.js, both also MIT licensed.\n   */\n  ionic.Utils = {\n\n    arrayMove: function (arr, old_index, new_index) {\n      if (new_index >= arr.length) {\n        var k = new_index - arr.length;\n        while ((k--) + 1) {\n          arr.push(undefined);\n        }\n      }\n      arr.splice(new_index, 0, arr.splice(old_index, 1)[0]);\n      return arr;\n    },\n\n    /**\n     * Return a function that will be called with the given context\n     */\n    proxy: function(func, context) {\n      var args = Array.prototype.slice.call(arguments, 2);\n      return function() {\n        return func.apply(context, args.concat(Array.prototype.slice.call(arguments)));\n      };\n    },\n\n    /**\n     * Only call a function once in the given interval.\n     *\n     * @param func {Function} the function to call\n     * @param wait {int} how long to wait before/after to allow function calls\n     * @param immediate {boolean} whether to call immediately or after the wait interval\n     */\n     debounce: function(func, wait, immediate) {\n      var timeout, args, context, timestamp, result;\n      return function() {\n        context = this;\n        args = arguments;\n        timestamp = new Date();\n        var later = function() {\n          var last = (new Date()) - timestamp;\n          if (last < wait) {\n            timeout = setTimeout(later, wait - last);\n          } else {\n            timeout = null;\n            if (!immediate) result = func.apply(context, args);\n          }\n        };\n        var callNow = immediate && !timeout;\n        if (!timeout) {\n          timeout = setTimeout(later, wait);\n        }\n        if (callNow) result = func.apply(context, args);\n        return result;\n      };\n    },\n\n    /**\n     * Throttle the given fun, only allowing it to be\n     * called at most every `wait` ms.\n     */\n    throttle: function(func, wait, options) {\n      var context, args, result;\n      var timeout = null;\n      var previous = 0;\n      options || (options = {});\n      var later = function() {\n        previous = options.leading === false ? 0 : Date.now();\n        timeout = null;\n        result = func.apply(context, args);\n      };\n      return function() {\n        var now = Date.now();\n        if (!previous && options.leading === false) previous = now;\n        var remaining = wait - (now - previous);\n        context = this;\n        args = arguments;\n        if (remaining <= 0) {\n          clearTimeout(timeout);\n          timeout = null;\n          previous = now;\n          result = func.apply(context, args);\n        } else if (!timeout && options.trailing !== false) {\n          timeout = setTimeout(later, remaining);\n        }\n        return result;\n      };\n    },\n     // Borrowed from Backbone.js's extend\n     // Helper function to correctly set up the prototype chain, for subclasses.\n     // Similar to `goog.inherits`, but uses a hash of prototype properties and\n     // class properties to be extended.\n    inherit: function(protoProps, staticProps) {\n      var parent = this;\n      var child;\n\n      // The constructor function for the new subclass is either defined by you\n      // (the \"constructor\" property in your `extend` definition), or defaulted\n      // by us to simply call the parent's constructor.\n      if (protoProps && protoProps.hasOwnProperty('constructor')) {\n        child = protoProps.constructor;\n      } else {\n        child = function(){ return parent.apply(this, arguments); };\n      }\n\n      // Add static properties to the constructor function, if supplied.\n      ionic.extend(child, parent, staticProps);\n\n      // Set the prototype chain to inherit from `parent`, without calling\n      // `parent`'s constructor function.\n      var Surrogate = function(){ this.constructor = child; };\n      Surrogate.prototype = parent.prototype;\n      child.prototype = new Surrogate();\n\n      // Add prototype properties (instance properties) to the subclass,\n      // if supplied.\n      if (protoProps) ionic.extend(child.prototype, protoProps);\n\n      // Set a convenience property in case the parent's prototype is needed\n      // later.\n      child.__super__ = parent.prototype;\n\n      return child;\n    },\n\n    // Extend adapted from Underscore.js\n    extend: function(obj) {\n       var args = Array.prototype.slice.call(arguments, 1);\n       for(var i = 0; i < args.length; i++) {\n         var source = args[i];\n         if (source) {\n           for (var prop in source) {\n             obj[prop] = source[prop];\n           }\n         }\n       }\n       return obj;\n    },\n\n    /**\n     * A consistent way of creating unique IDs in angular. The ID is a sequence of alpha numeric\n     * characters such as '012ABC'. The reason why we are not using simply a number counter is that\n     * the number string gets longer over time, and it can also overflow, where as the nextId\n     * will grow much slower, it is a string, and it will never overflow.\n     *\n     * @returns an unique alpha-numeric string\n     */\n    nextUid: function() {\n      var index = uid.length;\n      var digit;\n\n      while(index) {\n        index--;\n        digit = uid[index].charCodeAt(0);\n        if (digit == 57 /*'9'*/) {\n          uid[index] = 'A';\n          return uid.join('');\n        }\n        if (digit == 90  /*'Z'*/) {\n          uid[index] = '0';\n        } else {\n          uid[index] = String.fromCharCode(digit + 1);\n          return uid.join('');\n        }\n      }\n      uid.unshift('0');\n      return uid.join('');\n    }\n  };\n\n  // Bind a few of the most useful functions to the ionic scope\n  ionic.inherit = ionic.Utils.inherit;\n  ionic.extend = ionic.Utils.extend;\n  ionic.throttle = ionic.Utils.throttle;\n  ionic.proxy = ionic.Utils.proxy;\n  ionic.debounce = ionic.Utils.debounce;\n\n})(window.ionic);\n\n/**\n * @ngdoc page\n * @name keyboard\n * @module ionic\n * @description\n * On both Android and iOS, Ionic will attempt to prevent the keyboard from\n * obscuring inputs and focusable elements when it appears by scrolling them\n * into view.  In order for this to work, any focusable elements must be within\n * a [Scroll View](https://ionicframework.com/docs/v1/api/directive/ionScroll/)\n * or a directive such as [Content](https://ionicframework.com/docs/v1/api/directive/ionContent/)\n * that has a Scroll View.\n *\n * It will also attempt to prevent the native overflow scrolling on focus,\n * which can cause layout issues such as pushing headers up and out of view.\n *\n * The keyboard fixes work best in conjunction with the \n * [Ionic Keyboard Plugin](https://github.com/ionic-team/ionic-plugins-keyboard),\n * although it will perform reasonably well without.  However, if you are using\n * Cordova there is no reason not to use the plugin.\n *\n * ### Hide when keyboard shows\n * \n * To hide an element when the keyboard is open, add the class `hide-on-keyboard-open`.\n *\n * ```html\n * <div class=\"hide-on-keyboard-open\">\n *   <div id=\"google-map\"></div>\n * </div>\n * ```\n * ----------\n *\n * ### Plugin Usage\n * Information on using the plugin can be found at \n * [https://github.com/ionic-team/ionic-plugins-keyboard](https://github.com/ionic-team/ionic-plugins-keyboard).\n *\n * ---------- \n *\n * ### Android Notes\n * - If your app is running in fullscreen, i.e. you have \n *   `<preference name=\"Fullscreen\" value=\"true\" />` in your `config.xml` file\n *   you will need to set `ionic.Platform.isFullScreen = true` manually.\n *\n * - You can configure the behavior of the web view when the keyboard shows by setting \n *   [android:windowSoftInputMode](http://developer.android.com/reference/android/R.attr.html#windowSoftInputMode)\n *   to either `adjustPan`, `adjustResize` or `adjustNothing` in your app's\n *   activity in `AndroidManifest.xml`. `adjustResize` is the recommended setting\n *   for Ionic, but if for some reason you do use `adjustPan` you will need to\n *   set `ionic.Platform.isFullScreen = true`.\n *\n *   ```xml\n *   <activity android:windowSoftInputMode=\"adjustResize\">\n *\n *   ```\n *\n * ### iOS Notes\n * - If the content of your app (including the header) is being pushed up and\n *   out of view on input focus, try setting `cordova.plugins.Keyboard.disableScroll(true)`.\n *   This does **not** disable scrolling in the Ionic scroll view, rather it\n *   disables the native overflow scrolling that happens automatically as a\n *   result of focusing on inputs below the keyboard. \n * \n */\n\nvar keyboardViewportHeight = window.innerHeight;\nvar keyboardIsOpen;\nvar keyboardActiveElement;\nvar keyboardFocusOutTimer;\nvar keyboardFocusInTimer;\nvar keyboardLastShow = 0;\n\nvar KEYBOARD_OPEN_CSS = 'keyboard-open';\nvar SCROLL_CONTAINER_CSS = 'scroll';\n\nionic.keyboard = {\n  isOpen: false,\n  height: null,\n  landscape: false,\n};\n\nfunction keyboardInit() {\n  if( keyboardHasPlugin() ) {\n    window.addEventListener('native.keyboardshow', keyboardNativeShow);\n    window.addEventListener('native.keyboardhide', keyboardFocusOut);\n\n    //deprecated\n    window.addEventListener('native.showkeyboard', keyboardNativeShow);\n    window.addEventListener('native.hidekeyboard', keyboardFocusOut);\n  }\n  else {\n    document.body.addEventListener('focusout', keyboardFocusOut);\n  }\n\n  document.body.addEventListener('ionic.focusin', keyboardBrowserFocusIn);\n  document.body.addEventListener('focusin', keyboardBrowserFocusIn);\n\n  document.body.addEventListener('orientationchange', keyboardOrientationChange);\n\n  document.removeEventListener('touchstart', keyboardInit);\n}\n\nfunction keyboardNativeShow(e) {\n  clearTimeout(keyboardFocusOutTimer);\n  ionic.keyboard.height = e.keyboardHeight;\n}\n\nfunction keyboardBrowserFocusIn(e) {\n  if( !e.target || !ionic.tap.isTextInput(e.target) || ionic.tap.isDateInput(e.target) || !keyboardIsWithinScroll(e.target) ) return;\n\n  document.addEventListener('keydown', keyboardOnKeyDown, false);\n\n  document.body.scrollTop = 0;\n  document.body.querySelector('.scroll-content').scrollTop = 0;\n\n  keyboardActiveElement = e.target;\n\n  keyboardSetShow(e);\n}\n\nfunction keyboardSetShow(e) {\n  clearTimeout(keyboardFocusInTimer);\n  clearTimeout(keyboardFocusOutTimer);\n\n  keyboardFocusInTimer = setTimeout(function(){\n    if ( keyboardLastShow + 350 > Date.now() ) return;\n    keyboardLastShow = Date.now();\n    var keyboardHeight;\n    var elementBounds = keyboardActiveElement.getBoundingClientRect();\n    var count = 0;\n\n    var pollKeyboardHeight = setInterval(function(){\n\n      keyboardHeight = keyboardGetHeight();\n      if (count > 10){\n        clearInterval(pollKeyboardHeight);\n        //waited long enough, just guess\n        keyboardHeight = 275;\n      }\n      if (keyboardHeight){\n        keyboardShow(e.target, elementBounds.top, elementBounds.bottom, keyboardViewportHeight, keyboardHeight);\n        clearInterval(pollKeyboardHeight);\n      }\n      count++;\n\n    }, 100);\n  }, 32);\n}\n\nfunction keyboardShow(element, elementTop, elementBottom, viewportHeight, keyboardHeight) {\n  var details = {\n    target: element,\n    elementTop: Math.round(elementTop),\n    elementBottom: Math.round(elementBottom),\n    keyboardHeight: keyboardHeight,\n    viewportHeight: viewportHeight\n  };\n\n  details.hasPlugin = keyboardHasPlugin();\n\n  details.contentHeight = viewportHeight - keyboardHeight;\n\n  void 0;\n\n  // figure out if the element is under the keyboard\n  details.isElementUnderKeyboard = (details.elementBottom > details.contentHeight);\n\n  ionic.keyboard.isOpen = true;\n\n  // send event so the scroll view adjusts\n  keyboardActiveElement = element;\n  ionic.trigger('scrollChildIntoView', details, true);\n\n  ionic.requestAnimationFrame(function(){\n    document.body.classList.add(KEYBOARD_OPEN_CSS);\n  });\n\n  // any showing part of the document that isn't within the scroll the user\n  // could touchmove and cause some ugly changes to the app, so disable\n  // any touchmove events while the keyboard is open using e.preventDefault()\n  document.addEventListener('touchmove', keyboardPreventDefault, false);\n\n  return details;\n}\n\nfunction keyboardFocusOut(e) {\n  clearTimeout(keyboardFocusOutTimer);\n\n  keyboardFocusOutTimer = setTimeout(keyboardHide, 350);\n}\n\nfunction keyboardHide() {\n  void 0;\n  ionic.keyboard.isOpen = false;\n\n  ionic.trigger('resetScrollView', {\n    target: keyboardActiveElement\n  }, true);\n\n  ionic.requestAnimationFrame(function(){\n    document.body.classList.remove(KEYBOARD_OPEN_CSS);\n  });\n\n  // the keyboard is gone now, remove the touchmove that disables native scroll\n  document.removeEventListener('touchmove', keyboardPreventDefault);\n  document.removeEventListener('keydown', keyboardOnKeyDown);\n}\n\nfunction keyboardUpdateViewportHeight() {\n  if( window.innerHeight > keyboardViewportHeight ) {\n    keyboardViewportHeight = window.innerHeight;\n  }\n}\n\nfunction keyboardOnKeyDown(e) {\n  if( ionic.scroll.isScrolling ) {\n    keyboardPreventDefault(e);\n  }\n}\n\nfunction keyboardPreventDefault(e) {\n  if( e.target.tagName !== 'TEXTAREA' ) {\n    e.preventDefault();\n  }\n}\n\nfunction keyboardOrientationChange() {\n  var updatedViewportHeight = window.innerHeight;\n\n  //too slow, have to wait for updated height\n  if (updatedViewportHeight === keyboardViewportHeight){\n    var count = 0;\n    var pollViewportHeight = setInterval(function(){\n      //give up\n      if (count > 10){\n        clearInterval(pollViewportHeight);\n      }\n\n      updatedViewportHeight = window.innerHeight;\n\n      if (updatedViewportHeight !== keyboardViewportHeight){\n        if (updatedViewportHeight < keyboardViewportHeight){\n          ionic.keyboard.landscape = true;\n        }\n        else {\n          ionic.keyboard.landscape = false;\n        }\n        keyboardViewportHeight = updatedViewportHeight;\n        clearInterval(pollViewportHeight);\n      }\n      count++;\n\n    }, 50);\n  }\n  else {\n    keyboardViewportHeight = updatedViewportHeight;\n  }\n}\n\nfunction keyboardGetHeight() {\n  // check if we are already have a keyboard height from the plugin\n  if ( ionic.keyboard.height ) {\n    return ionic.keyboard.height;\n  }\n\n  if ( ionic.Platform.isAndroid() ){\n    //should be using the plugin, no way to know how big the keyboard is, so guess\n    if ( ionic.Platform.isFullScreen ){\n      return 275;\n    }\n    //otherwise, wait for the screen to resize\n    if ( window.innerHeight < keyboardViewportHeight ){\n      return keyboardViewportHeight - window.innerHeight;\n    }\n    else {\n      return 0;\n    }\n  }\n\n  // fallback for when its the webview without the plugin\n  // or for just the standard web browser\n  if( ionic.Platform.isIOS() ) {\n    if ( ionic.keyboard.landscape ){\n      return 206;\n    }\n\n    if (!ionic.Platform.isWebView()){\n      return 216;\n    }\n\n    return 260;\n  }\n\n  // safe guess\n  return 275;\n}\n\nfunction keyboardIsWithinScroll(ele) {\n  while(ele) {\n    if(ele.classList.contains(SCROLL_CONTAINER_CSS)) {\n      return true;\n    }\n    ele = ele.parentElement;\n  }\n  return false;\n}\n\nfunction keyboardHasPlugin() {\n  return !!(window.cordova && cordova.plugins && cordova.plugins.Keyboard);\n}\n\nionic.Platform.ready(function() {\n  keyboardUpdateViewportHeight();\n\n  // Android sometimes reports bad innerHeight on window.load\n  // try it again in a lil bit to play it safe\n  setTimeout(keyboardUpdateViewportHeight, 999);\n\n  // only initialize the adjustments for the virtual keyboard\n  // if a touchstart event happens\n  document.addEventListener('touchstart', keyboardInit, false);\n});\n\n\n\nvar viewportTag;\nvar viewportProperties = {};\n\nionic.viewport = {\n  orientation: function() {\n    // 0 = Portrait\n    // 90 = Landscape\n    // not using window.orientation because each device has a different implementation\n    return (window.innerWidth > window.innerHeight ? 90 : 0);\n  }\n};\n\nfunction viewportLoadTag() {\n  var x;\n\n  for(x=0; x<document.head.children.length; x++) {\n    if(document.head.children[x].name == 'viewport') {\n      viewportTag = document.head.children[x];\n      break;\n    }\n  }\n\n  if(viewportTag) {\n    var props = viewportTag.content.toLowerCase().replace(/\\s+/g, '').split(',');\n    var keyValue;\n    for(x=0; x<props.length; x++) {\n      if(props[x]) {\n        keyValue = props[x].split('=');\n        viewportProperties[ keyValue[0] ] = (keyValue.length > 1 ? keyValue[1] : '_');\n      }\n    }\n    viewportUpdate();\n  }\n}\n\nfunction viewportUpdate() {\n  // unit tests in viewport.unit.js\n\n  var initWidth = viewportProperties.width;\n  var initHeight = viewportProperties.height;\n  var p = ionic.Platform;\n  var version = p.version();\n  var DEVICE_WIDTH = 'device-width';\n  var DEVICE_HEIGHT = 'device-height';\n  var orientation = ionic.viewport.orientation();\n\n  // Most times we're removing the height and adding the width\n  // So this is the default to start with, then modify per platform/version/oreintation\n  delete viewportProperties.height;\n  viewportProperties.width = DEVICE_WIDTH;\n\n  if( p.isIPad() ) {\n    // iPad\n\n    if( version > 7 ) {\n      // iPad >= 7.1\n      // https://issues.apache.org/jira/browse/CB-4323\n      delete viewportProperties.width;\n\n    } else {\n      // iPad <= 7.0\n\n      if( p.isWebView() ) {\n        // iPad <= 7.0 WebView\n\n        if( orientation == 90 ) {\n          // iPad <= 7.0 WebView Landscape\n          viewportProperties.height = '0';\n\n        } else if(version == 7) {\n          // iPad <= 7.0 WebView Portait\n          viewportProperties.height = DEVICE_HEIGHT;\n        }\n      } else {\n        // iPad <= 6.1 Browser\n        if(version < 7) {\n          viewportProperties.height = '0';\n        }\n      }\n    }\n\n  } else if( p.isIOS() ) {\n    // iPhone\n\n    if( p.isWebView() ) {\n      // iPhone WebView\n\n      if(version > 7) {\n        // iPhone >= 7.1 WebView\n        delete viewportProperties.width;\n\n      } else if(version < 7) {\n        // iPhone <= 6.1 WebView\n        // if height was set it needs to get removed with this hack for <= 6.1\n        if( initHeight ) viewportProperties.height = '0';\n\n      } else if(version == 7) {\n        //iPhone == 7.0 WebView\n        viewportProperties.height = DEVICE_HEIGHT;\n      }\n\n    } else {\n      // iPhone Browser\n\n      if (version < 7) {\n        // iPhone <= 6.1 Browser\n        // if height was set it needs to get removed with this hack for <= 6.1\n        if( initHeight ) viewportProperties.height = '0';\n      }\n    }\n\n  }\n\n  // only update the viewport tag if there was a change\n  if(initWidth !== viewportProperties.width || initHeight !== viewportProperties.height) {\n    viewportTagUpdate();\n  }\n}\n\nfunction viewportTagUpdate() {\n  var key, props = [];\n  for(key in viewportProperties) {\n    if( viewportProperties[key] ) {\n      props.push(key + (viewportProperties[key] == '_' ? '' : '=' + viewportProperties[key]) );\n    }\n  }\n\n  viewportTag.content = props.join(', ');\n}\n\nionic.Platform.ready(function() {\n  viewportLoadTag();\n\n  window.addEventListener(\"orientationchange\", function(){\n    setTimeout(viewportUpdate, 1000);\n  }, false);\n});\n\n(function(ionic) {\n'use strict';\n  ionic.views.View = function() {\n    this.initialize.apply(this, arguments);\n  };\n\n  ionic.views.View.inherit = ionic.inherit;\n\n  ionic.extend(ionic.views.View.prototype, {\n    initialize: function() {}\n  });\n\n})(window.ionic);\n\n/*\n * Scroller\n * http://github.com/zynga/scroller\n *\n * Copyright 2011, Zynga Inc.\n * Licensed under the MIT License.\n * https://raw.github.com/zynga/scroller/master/MIT-LICENSE.txt\n *\n * Based on the work of: Unify Project (unify-project.org)\n * http://unify-project.org\n * Copyright 2011, Deutsche Telekom AG\n * License: MIT + Apache (V2)\n */\n\n/* jshint eqnull: true */\n\n/**\n * Generic animation class with support for dropped frames both optional easing and duration.\n *\n * Optional duration is useful when the lifetime is defined by another condition than time\n * e.g. speed of an animating object, etc.\n *\n * Dropped frame logic allows to keep using the same updater logic independent from the actual\n * rendering. This eases a lot of cases where it might be pretty complex to break down a state\n * based on the pure time difference.\n */\nvar zyngaCore = { effect: {} };\n(function(global) {\n  var time = Date.now || function() {\n    return +new Date();\n  };\n  var desiredFrames = 60;\n  var millisecondsPerSecond = 1000;\n  var running = {};\n  var counter = 1;\n\n  zyngaCore.effect.Animate = {\n\n    /**\n     * A requestAnimationFrame wrapper / polyfill.\n     *\n     * @param callback {Function} The callback to be invoked before the next repaint.\n     * @param root {HTMLElement} The root element for the repaint\n     */\n    requestAnimationFrame: (function() {\n\n      // Check for request animation Frame support\n      var requestFrame = global.requestAnimationFrame || global.webkitRequestAnimationFrame || global.mozRequestAnimationFrame || global.oRequestAnimationFrame;\n      var isNative = !!requestFrame;\n\n      if (requestFrame && !/requestAnimationFrame\\(\\)\\s*\\{\\s*\\[native code\\]\\s*\\}/i.test(requestFrame.toString())) {\n        isNative = false;\n      }\n\n      if (isNative) {\n        return function(callback, root) {\n          requestFrame(callback, root);\n        };\n      }\n\n      var TARGET_FPS = 60;\n      var requests = {};\n      var requestCount = 0;\n      var rafHandle = 1;\n      var intervalHandle = null;\n      var lastActive = +new Date();\n\n      return function(callback, root) {\n        var callbackHandle = rafHandle++;\n\n        // Store callback\n        requests[callbackHandle] = callback;\n        requestCount++;\n\n        // Create timeout at first request\n        if (intervalHandle === null) {\n\n          intervalHandle = setInterval(function() {\n\n            var time = +new Date();\n            var currentRequests = requests;\n\n            // Reset data structure before executing callbacks\n            requests = {};\n            requestCount = 0;\n\n            for(var key in currentRequests) {\n              if (currentRequests.hasOwnProperty(key)) {\n                currentRequests[key](time);\n                lastActive = time;\n              }\n            }\n\n            // Disable the timeout when nothing happens for a certain\n            // period of time\n            if (time - lastActive > 2500) {\n              clearInterval(intervalHandle);\n              intervalHandle = null;\n            }\n\n          }, 1000 / TARGET_FPS);\n        }\n\n        return callbackHandle;\n      };\n\n    })(),\n\n\n    /**\n     * Stops the given animation.\n     *\n     * @param id {Integer} Unique animation ID\n     * @return {Boolean} Whether the animation was stopped (aka, was running before)\n     */\n    stop: function(id) {\n      var cleared = running[id] != null;\n      if (cleared) {\n        running[id] = null;\n      }\n\n      return cleared;\n    },\n\n\n    /**\n     * Whether the given animation is still running.\n     *\n     * @param id {Integer} Unique animation ID\n     * @return {Boolean} Whether the animation is still running\n     */\n    isRunning: function(id) {\n      return running[id] != null;\n    },\n\n\n    /**\n     * Start the animation.\n     *\n     * @param stepCallback {Function} Pointer to function which is executed on every step.\n     *   Signature of the method should be `function(percent, now, virtual) { return continueWithAnimation; }`\n     * @param verifyCallback {Function} Executed before every animation step.\n     *   Signature of the method should be `function() { return continueWithAnimation; }`\n     * @param completedCallback {Function}\n     *   Signature of the method should be `function(droppedFrames, finishedAnimation) {}`\n     * @param duration {Integer} Milliseconds to run the animation\n     * @param easingMethod {Function} Pointer to easing function\n     *   Signature of the method should be `function(percent) { return modifiedValue; }`\n     * @param root {Element} Render root, when available. Used for internal\n     *   usage of requestAnimationFrame.\n     * @return {Integer} Identifier of animation. Can be used to stop it any time.\n     */\n    start: function(stepCallback, verifyCallback, completedCallback, duration, easingMethod, root) {\n\n      var start = time();\n      var lastFrame = start;\n      var percent = 0;\n      var dropCounter = 0;\n      var id = counter++;\n\n      if (!root) {\n        root = document.body;\n      }\n\n      // Compacting running db automatically every few new animations\n      if (id % 20 === 0) {\n        var newRunning = {};\n        for (var usedId in running) {\n          newRunning[usedId] = true;\n        }\n        running = newRunning;\n      }\n\n      // This is the internal step method which is called every few milliseconds\n      var step = function(virtual) {\n\n        // Normalize virtual value\n        var render = virtual !== true;\n\n        // Get current time\n        var now = time();\n\n        // Verification is executed before next animation step\n        if (!running[id] || (verifyCallback && !verifyCallback(id))) {\n\n          running[id] = null;\n          completedCallback && completedCallback(desiredFrames - (dropCounter / ((now - start) / millisecondsPerSecond)), id, false);\n          return;\n\n        }\n\n        // For the current rendering to apply let's update omitted steps in memory.\n        // This is important to bring internal state variables up-to-date with progress in time.\n        if (render) {\n\n          var droppedFrames = Math.round((now - lastFrame) / (millisecondsPerSecond / desiredFrames)) - 1;\n          for (var j = 0; j < Math.min(droppedFrames, 4); j++) {\n            step(true);\n            dropCounter++;\n          }\n\n        }\n\n        // Compute percent value\n        if (duration) {\n          percent = (now - start) / duration;\n          if (percent > 1) {\n            percent = 1;\n          }\n        }\n\n        // Execute step callback, then...\n        var value = easingMethod ? easingMethod(percent) : percent;\n        if ((stepCallback(value, now, render) === false || percent === 1) && render) {\n          running[id] = null;\n          completedCallback && completedCallback(desiredFrames - (dropCounter / ((now - start) / millisecondsPerSecond)), id, percent === 1 || duration == null);\n        } else if (render) {\n          lastFrame = now;\n          zyngaCore.effect.Animate.requestAnimationFrame(step, root);\n        }\n      };\n\n      // Mark as running\n      running[id] = true;\n\n      // Init first step\n      zyngaCore.effect.Animate.requestAnimationFrame(step, root);\n\n      // Return unique animation ID\n      return id;\n    }\n  };\n})(this);\n\n/*\n * Scroller\n * http://github.com/zynga/scroller\n *\n * Copyright 2011, Zynga Inc.\n * Licensed under the MIT License.\n * https://raw.github.com/zynga/scroller/master/MIT-LICENSE.txt\n *\n * Based on the work of: Unify Project (unify-project.org)\n * http://unify-project.org\n * Copyright 2011, Deutsche Telekom AG\n * License: MIT + Apache (V2)\n */\n\nvar Scroller;\n\n(function(ionic) {\n  var NOOP = function(){};\n\n  // Easing Equations (c) 2003 Robert Penner, all rights reserved.\n  // Open source under the BSD License.\n\n  /**\n   * @param pos {Number} position between 0 (start of effect) and 1 (end of effect)\n  **/\n  var easeOutCubic = function(pos) {\n    return (Math.pow((pos - 1), 3) + 1);\n  };\n\n  /**\n   * @param pos {Number} position between 0 (start of effect) and 1 (end of effect)\n  **/\n  var easeInOutCubic = function(pos) {\n    if ((pos /= 0.5) < 1) {\n      return 0.5 * Math.pow(pos, 3);\n    }\n\n    return 0.5 * (Math.pow((pos - 2), 3) + 2);\n  };\n\n\n/**\n * ionic.views.Scroll\n * A powerful scroll view with support for bouncing, pull to refresh, and paging.\n * @param   {Object}        options options for the scroll view\n * @class A scroll view system\n * @memberof ionic.views\n */\nionic.views.Scroll = ionic.views.View.inherit({\n  initialize: function(options) {\n    var self = this;\n\n    this.__container = options.el;\n    this.__content = options.el.firstElementChild;\n\n    //Remove any scrollTop attached to these elements; they are virtual scroll now\n    //This also stops on-load-scroll-to-window.location.hash that the browser does\n    setTimeout(function() {\n      if (self.__container && self.__content) {\n        self.__container.scrollTop = 0;\n        self.__content.scrollTop = 0;\n      }\n    });\n\n    this.options = {\n\n      /** Disable scrolling on x-axis by default */\n      scrollingX: false,\n      scrollbarX: true,\n\n      /** Enable scrolling on y-axis */\n      scrollingY: true,\n      scrollbarY: true,\n\n      startX: 0,\n      startY: 0,\n\n      /** The amount to dampen mousewheel events */\n      wheelDampen: 6,\n\n      /** The minimum size the scrollbars scale to while scrolling */\n      minScrollbarSizeX: 5,\n      minScrollbarSizeY: 5,\n\n      /** Scrollbar fading after scrolling */\n      scrollbarsFade: true,\n      scrollbarFadeDelay: 300,\n      /** The initial fade delay when the pane is resized or initialized */\n      scrollbarResizeFadeDelay: 1000,\n\n      /** Enable animations for deceleration, snap back, zooming and scrolling */\n      animating: true,\n\n      /** duration for animations triggered by scrollTo/zoomTo */\n      animationDuration: 250,\n\n      /** Enable bouncing (content can be slowly moved outside and jumps back after releasing) */\n      bouncing: true,\n\n      /** Enable locking to the main axis if user moves only slightly on one of them at start */\n      locking: true,\n\n      /** Enable pagination mode (switching between full page content panes) */\n      paging: false,\n\n      /** Enable snapping of content to a configured pixel grid */\n      snapping: false,\n\n      /** Enable zooming of content via API, fingers and mouse wheel */\n      zooming: false,\n\n      /** Minimum zoom level */\n      minZoom: 0.5,\n\n      /** Maximum zoom level */\n      maxZoom: 3,\n\n      /** Multiply or decrease scrolling speed **/\n      speedMultiplier: 1,\n\n      deceleration: 0.97,\n\n      /** Callback that is fired on the later of touch end or deceleration end,\n        provided that another scrolling action has not begun. Used to know\n        when to fade out a scrollbar. */\n      scrollingComplete: NOOP,\n\n      /** This configures the amount of change applied to deceleration when reaching boundaries  **/\n      penetrationDeceleration : 0.03,\n\n      /** This configures the amount of change applied to acceleration when reaching boundaries  **/\n      penetrationAcceleration : 0.08,\n\n      // The ms interval for triggering scroll events\n      scrollEventInterval: 10,\n\n      getContentWidth: function() {\n        return Math.max(self.__content.scrollWidth, self.__content.offsetWidth);\n      },\n      getContentHeight: function() {\n        return Math.max(self.__content.scrollHeight, self.__content.offsetHeight + self.__content.offsetTop);\n      }\n\t\t};\n\n    for (var key in options) {\n      this.options[key] = options[key];\n    }\n\n    this.hintResize = ionic.debounce(function() {\n      self.resize();\n    }, 1000, true);\n\n    this.onScroll = function() {\n\n      if(!ionic.scroll.isScrolling) {\n        setTimeout(self.setScrollStart, 50);\n      } else {\n        clearTimeout(self.scrollTimer);\n        self.scrollTimer = setTimeout(self.setScrollStop, 80);\n      }\n\n    };\n\n    this.setScrollStart = function() {\n      ionic.scroll.isScrolling = Math.abs(ionic.scroll.lastTop - self.__scrollTop) > 1;\n      clearTimeout(self.scrollTimer);\n      self.scrollTimer = setTimeout(self.setScrollStop, 80);\n    };\n\n    this.setScrollStop = function() {\n      ionic.scroll.isScrolling = false;\n      ionic.scroll.lastTop = self.__scrollTop;\n    };\n\n    this.triggerScrollEvent = ionic.throttle(function() {\n      self.onScroll();\n      ionic.trigger('scroll', {\n        scrollTop: self.__scrollTop,\n        scrollLeft: self.__scrollLeft,\n        target: self.__container\n      });\n    }, this.options.scrollEventInterval);\n\n    this.triggerScrollEndEvent = function() {\n      ionic.trigger('scrollend', {\n        scrollTop: self.__scrollTop,\n        scrollLeft: self.__scrollLeft,\n        target: self.__container\n      });\n    };\n\n    this.__scrollLeft = this.options.startX;\n    this.__scrollTop = this.options.startY;\n\n    // Get the render update function, initialize event handlers,\n    // and calculate the size of the scroll container\n    this.__callback = this.getRenderFn();\n    this.__initEventHandlers();\n    this.__createScrollbars();\n\n  },\n\n  run: function() {\n    this.resize();\n\n    // Fade them out\n    this.__fadeScrollbars('out', this.options.scrollbarResizeFadeDelay);\n  },\n\n\n\n  /*\n  ---------------------------------------------------------------------------\n    INTERNAL FIELDS :: STATUS\n  ---------------------------------------------------------------------------\n  */\n\n  /** Whether only a single finger is used in touch handling */\n  __isSingleTouch: false,\n\n  /** Whether a touch event sequence is in progress */\n  __isTracking: false,\n\n  /** Whether a deceleration animation went to completion. */\n  __didDecelerationComplete: false,\n\n  /**\n   * Whether a gesture zoom/rotate event is in progress. Activates when\n   * a gesturestart event happens. This has higher priority than dragging.\n   */\n  __isGesturing: false,\n\n  /**\n   * Whether the user has moved by such a distance that we have enabled\n   * dragging mode. Hint: It's only enabled after some pixels of movement to\n   * not interrupt with clicks etc.\n   */\n  __isDragging: false,\n\n  /**\n   * Not touching and dragging anymore, and smoothly animating the\n   * touch sequence using deceleration.\n   */\n  __isDecelerating: false,\n\n  /**\n   * Smoothly animating the currently configured change\n   */\n  __isAnimating: false,\n\n\n\n  /*\n  ---------------------------------------------------------------------------\n    INTERNAL FIELDS :: DIMENSIONS\n  ---------------------------------------------------------------------------\n  */\n\n  /** Available outer left position (from document perspective) */\n  __clientLeft: 0,\n\n  /** Available outer top position (from document perspective) */\n  __clientTop: 0,\n\n  /** Available outer width */\n  __clientWidth: 0,\n\n  /** Available outer height */\n  __clientHeight: 0,\n\n  /** Outer width of content */\n  __contentWidth: 0,\n\n  /** Outer height of content */\n  __contentHeight: 0,\n\n  /** Snapping width for content */\n  __snapWidth: 100,\n\n  /** Snapping height for content */\n  __snapHeight: 100,\n\n  /** Height to assign to refresh area */\n  __refreshHeight: null,\n\n  /** Whether the refresh process is enabled when the event is released now */\n  __refreshActive: false,\n\n  /** Callback to execute on activation. This is for signalling the user about a refresh is about to happen when he release */\n  __refreshActivate: null,\n\n  /** Callback to execute on deactivation. This is for signalling the user about the refresh being cancelled */\n  __refreshDeactivate: null,\n\n  /** Callback to execute to start the actual refresh. Call {@link #refreshFinish} when done */\n  __refreshStart: null,\n\n  /** Zoom level */\n  __zoomLevel: 1,\n\n  /** Scroll position on x-axis */\n  __scrollLeft: 0,\n\n  /** Scroll position on y-axis */\n  __scrollTop: 0,\n\n  /** Maximum allowed scroll position on x-axis */\n  __maxScrollLeft: 0,\n\n  /** Maximum allowed scroll position on y-axis */\n  __maxScrollTop: 0,\n\n  /* Scheduled left position (final position when animating) */\n  __scheduledLeft: 0,\n\n  /* Scheduled top position (final position when animating) */\n  __scheduledTop: 0,\n\n  /* Scheduled zoom level (final scale when animating) */\n  __scheduledZoom: 0,\n\n\n\n  /*\n  ---------------------------------------------------------------------------\n    INTERNAL FIELDS :: LAST POSITIONS\n  ---------------------------------------------------------------------------\n  */\n\n  /** Left position of finger at start */\n  __lastTouchLeft: null,\n\n  /** Top position of finger at start */\n  __lastTouchTop: null,\n\n  /** Timestamp of last move of finger. Used to limit tracking range for deceleration speed. */\n  __lastTouchMove: null,\n\n  /** List of positions, uses three indexes for each state: left, top, timestamp */\n  __positions: null,\n\n\n\n  /*\n  ---------------------------------------------------------------------------\n    INTERNAL FIELDS :: DECELERATION SUPPORT\n  ---------------------------------------------------------------------------\n  */\n\n  /** Minimum left scroll position during deceleration */\n  __minDecelerationScrollLeft: null,\n\n  /** Minimum top scroll position during deceleration */\n  __minDecelerationScrollTop: null,\n\n  /** Maximum left scroll position during deceleration */\n  __maxDecelerationScrollLeft: null,\n\n  /** Maximum top scroll position during deceleration */\n  __maxDecelerationScrollTop: null,\n\n  /** Current factor to modify horizontal scroll position with on every step */\n  __decelerationVelocityX: null,\n\n  /** Current factor to modify vertical scroll position with on every step */\n  __decelerationVelocityY: null,\n\n\n  /** the browser-specific property to use for transforms */\n  __transformProperty: null,\n  __perspectiveProperty: null,\n\n  /** scrollbar indicators */\n  __indicatorX: null,\n  __indicatorY: null,\n\n  /** Timeout for scrollbar fading */\n  __scrollbarFadeTimeout: null,\n\n  /** whether we've tried to wait for size already */\n  __didWaitForSize: null,\n  __sizerTimeout: null,\n\n  __initEventHandlers: function() {\n    var self = this;\n\n    // Event Handler\n    var container = this.__container;\n\n    //Broadcasted when keyboard is shown on some platforms.\n    //See js/utils/keyboard.js\n    container.addEventListener('scrollChildIntoView', function(e) {\n\n      //distance from bottom of scrollview to top of viewport\n      var scrollBottomOffsetToTop;\n\n      if( !self.isScrolledIntoView ) {\n        // shrink scrollview so we can actually scroll if the input is hidden\n        // if it isn't shrink so we can scroll to inputs under the keyboard\n        if (ionic.Platform.isIOS() || ionic.Platform.isFullScreen){\n          // if there are things below the scroll view account for them and\n          // subtract them from the keyboard height when resizing\n          scrollBottomOffsetToTop = container.getBoundingClientRect().bottom;\n          var scrollBottomOffsetToBottom = e.detail.viewportHeight - scrollBottomOffsetToTop;\n          var keyboardOffset = Math.max(0, e.detail.keyboardHeight - scrollBottomOffsetToBottom);\n          container.style.height = (container.clientHeight - keyboardOffset) + \"px\";\n          container.style.overflow = \"visible\";\n          //update scroll view\n          self.resize();\n        }\n        self.isScrolledIntoView = true;\n      }\n\n      //If the element is positioned under the keyboard...\n      if( e.detail.isElementUnderKeyboard ) {\n        var delay;\n        // Wait on android for web view to resize\n        if ( ionic.Platform.isAndroid() && !ionic.Platform.isFullScreen ) {\n          // android y u resize so slow\n          if ( ionic.Platform.version() < 4.4) {\n            delay = 500;\n          } else {\n            // probably overkill for chrome\n            delay = 350;\n          }\n        } else {\n          delay = 80;\n        }\n\n        //Put element in middle of visible screen\n        //Wait for android to update view height and resize() to reset scroll position\n        ionic.scroll.isScrolling = true;\n        setTimeout(function(){\n          //middle of the scrollview, where we want to scroll to\n          var scrollMidpointOffset = container.clientHeight * 0.5;\n\n          scrollBottomOffsetToTop = container.getBoundingClientRect().bottom;\n          //distance from top of focused element to the bottom of the scroll view\n          var elementTopOffsetToScrollBottom = e.detail.elementTop - scrollBottomOffsetToTop;\n\n          var scrollTop = elementTopOffsetToScrollBottom  + scrollMidpointOffset;\n\n          if (scrollTop > 0){\n            ionic.tap.cloneFocusedInput(container, self);\n            self.scrollBy(0, scrollTop, true);\n            self.onScroll();\n          }\n        }, delay);\n      }\n\n      //Only the first scrollView parent of the element that broadcasted this event\n      //(the active element that needs to be shown) should receive this event\n      e.stopPropagation();\n    });\n\n    container.addEventListener('resetScrollView', function(e) {\n      //return scrollview to original height once keyboard has hidden\n      self.isScrolledIntoView = false;\n      container.style.height = \"\";\n      container.style.overflow = \"\";\n      self.resize();\n      ionic.scroll.isScrolling = false;\n    });\n\n    function getEventTouches(e) {\n      return e.touches && e.touches.length ? e.touches : [{\n        pageX: e.pageX,\n        pageY: e.pageY\n      }];\n    }\n\n    self.touchStart = function(e) {\n      self.startCoordinates = getPointerCoordinates(e);\n\n      if ( ionic.tap.ignoreScrollStart(e) ) {\n        return;\n      }\n\n      self.__isDown = true;\n\n      if( ionic.tap.containsOrIsTextInput(e.target) || e.target.tagName === 'SELECT' ) {\n        // do not start if the target is a text input\n        // if there is a touchmove on this input, then we can start the scroll\n        self.__hasStarted = false;\n        return;\n      }\n\n      self.__isSelectable = true;\n      self.__enableScrollY = true;\n      self.__hasStarted = true;\n      self.doTouchStart(getEventTouches(e), e.timeStamp);\n      e.preventDefault();\n    };\n\n    self.touchMove = function(e) {\n      if(!self.__isDown ||\n        e.defaultPrevented ||\n        (e.target.tagName === 'TEXTAREA' && e.target.parentElement.querySelector(':focus')) ) {\n        return;\n      }\n\n      if( !self.__hasStarted && ( ionic.tap.containsOrIsTextInput(e.target) || e.target.tagName === 'SELECT' ) ) {\n        // the target is a text input and scroll has started\n        // since the text input doesn't start on touchStart, do it here\n        self.__hasStarted = true;\n        self.doTouchStart(getEventTouches(e), e.timeStamp);\n        e.preventDefault();\n        return;\n      }\n\n      if(self.startCoordinates) {\n        // we have start coordinates, so get this touch move's current coordinates\n        var currentCoordinates = getPointerCoordinates(e);\n\n        if( self.__isSelectable &&\n            ionic.tap.isTextInput(e.target) &&\n            Math.abs(self.startCoordinates.x - currentCoordinates.x) > 20 ) {\n          // user slid the text input's caret on its x axis, disable any future y scrolling\n          self.__enableScrollY = false;\n          self.__isSelectable = true;\n        }\n\n        if( self.__enableScrollY && Math.abs(self.startCoordinates.y - currentCoordinates.y) > 10 ) {\n          // user scrolled the entire view on the y axis\n          // disabled being able to select text on an input\n          // hide the input which has focus, and show a cloned one that doesn't have focus\n          self.__isSelectable = false;\n          ionic.tap.cloneFocusedInput(container, self);\n        }\n      }\n\n      self.doTouchMove(getEventTouches(e), e.timeStamp, e.scale);\n      self.__isDown = true;\n    };\n\n    self.touchEnd = function(e) {\n      if(!self.__isDown) return;\n\n      self.doTouchEnd(e.timeStamp);\n      self.__isDown = false;\n      self.__hasStarted = false;\n      self.__isSelectable = true;\n      self.__enableScrollY = true;\n\n      if( !self.__isDragging && !self.__isDecelerating && !self.__isAnimating ) {\n        ionic.tap.removeClonedInputs(container, self);\n      }\n    };\n\n    self.options.orgScrollingComplete = self.options.scrollingComplete;\n    self.options.scrollingComplete = function() {\n      ionic.tap.removeClonedInputs(container, self);\n      self.options.orgScrollingComplete();\n    };\n\n    if ('ontouchstart' in window) {\n      // Touch Events\n      container.addEventListener(\"touchstart\", self.touchStart, false);\n      document.addEventListener(\"touchmove\", self.touchMove, false);\n      document.addEventListener(\"touchend\", self.touchEnd, false);\n      document.addEventListener(\"touchcancel\", self.touchEnd, false);\n\n    } else if (window.navigator.pointerEnabled) {\n      // Pointer Events\n      container.addEventListener(\"pointerdown\", self.touchStart, false);\n      document.addEventListener(\"pointermove\", self.touchMove, false);\n      document.addEventListener(\"pointerup\", self.touchEnd, false);\n      document.addEventListener(\"pointercancel\", self.touchEnd, false);\n\n    } else if (window.navigator.msPointerEnabled) {\n      // IE10, WP8 (Pointer Events)\n      container.addEventListener(\"MSPointerDown\", self.touchStart, false);\n      document.addEventListener(\"MSPointerMove\", self.touchMove, false);\n      document.addEventListener(\"MSPointerUp\", self.touchEnd, false);\n      document.addEventListener(\"MSPointerCancel\", self.touchEnd, false);\n\n    } else {\n      // Mouse Events\n      var mousedown = false;\n\n      self.mouseDown = function(e) {\n        if ( ionic.tap.ignoreScrollStart(e) || e.target.tagName === 'SELECT' ) {\n          return;\n        }\n        self.doTouchStart(getEventTouches(e), e.timeStamp);\n\n        if( !ionic.tap.isTextInput(e.target) ) {\n          e.preventDefault();\n        }\n        mousedown = true;\n      };\n\n      self.mouseMove = function(e) {\n        if (!mousedown || e.defaultPrevented) {\n          return;\n        }\n\n        self.doTouchMove(getEventTouches(e), e.timeStamp);\n\n        mousedown = true;\n      };\n\n      self.mouseUp = function(e) {\n        if (!mousedown) {\n          return;\n        }\n\n        self.doTouchEnd(e.timeStamp);\n\n        mousedown = false;\n      };\n\n      self.mouseWheel = ionic.animationFrameThrottle(function(e) {\n        var scrollParent = ionic.DomUtil.getParentOrSelfWithClass(e.target, 'ionic-scroll');\n        if (scrollParent === self.__container) {\n\n          self.hintResize();\n          self.scrollBy(\n            e.wheelDeltaX/self.options.wheelDampen,\n            -e.wheelDeltaY/self.options.wheelDampen\n          );\n\n          self.__fadeScrollbars('in');\n          clearTimeout(self.__wheelHideBarTimeout);\n          self.__wheelHideBarTimeout = setTimeout(function() {\n            self.__fadeScrollbars('out');\n          }, 100);\n        }\n      });\n\n      container.addEventListener(\"mousedown\", self.mouseDown, false);\n      document.addEventListener(\"mousemove\", self.mouseMove, false);\n      document.addEventListener(\"mouseup\", self.mouseUp, false);\n      document.addEventListener('mousewheel', self.mouseWheel, false);\n    }\n  },\n\n  __removeEventHandlers: function() {\n    var container = this.__container;\n\n    container.removeEventListener('touchstart', self.touchStart);\n    document.removeEventListener('touchmove', self.touchMove);\n    document.removeEventListener('touchend', self.touchEnd);\n    document.removeEventListener('touchcancel', self.touchCancel);\n\n    container.removeEventListener(\"pointerdown\", self.touchStart);\n    document.removeEventListener(\"pointermove\", self.touchMove);\n    document.removeEventListener(\"pointerup\", self.touchEnd);\n    document.removeEventListener(\"pointercancel\", self.touchEnd);\n\n    container.removeEventListener(\"MSPointerDown\", self.touchStart);\n    document.removeEventListener(\"MSPointerMove\", self.touchMove);\n    document.removeEventListener(\"MSPointerUp\", self.touchEnd);\n    document.removeEventListener(\"MSPointerCancel\", self.touchEnd);\n\n    container.removeEventListener(\"mousedown\", self.mouseDown);\n    document.removeEventListener(\"mousemove\", self.mouseMove);\n    document.removeEventListener(\"mouseup\", self.mouseUp);\n    document.removeEventListener('mousewheel', self.mouseWheel);\n  },\n\n  /** Create a scroll bar div with the given direction **/\n  __createScrollbar: function(direction) {\n    var bar = document.createElement('div'),\n      indicator = document.createElement('div');\n\n    indicator.className = 'scroll-bar-indicator';\n\n    if(direction == 'h') {\n      bar.className = 'scroll-bar scroll-bar-h';\n    } else {\n      bar.className = 'scroll-bar scroll-bar-v';\n    }\n\n    bar.appendChild(indicator);\n    return bar;\n  },\n\n  __createScrollbars: function() {\n    var indicatorX, indicatorY;\n\n    if(this.options.scrollingX) {\n      indicatorX = {\n        el: this.__createScrollbar('h'),\n        sizeRatio: 1\n      };\n      indicatorX.indicator = indicatorX.el.children[0];\n\n      if(this.options.scrollbarX) {\n        this.__container.appendChild(indicatorX.el);\n      }\n      this.__indicatorX = indicatorX;\n    }\n\n    if(this.options.scrollingY) {\n      indicatorY = {\n        el: this.__createScrollbar('v'),\n        sizeRatio: 1\n      };\n      indicatorY.indicator = indicatorY.el.children[0];\n\n      if(this.options.scrollbarY) {\n        this.__container.appendChild(indicatorY.el);\n      }\n      this.__indicatorY = indicatorY;\n    }\n  },\n\n  __resizeScrollbars: function() {\n    var self = this;\n\n    // Update horiz bar\n    if(self.__indicatorX) {\n      var width = Math.max(Math.round(self.__clientWidth * self.__clientWidth / (self.__contentWidth)), 20);\n      if(width > self.__contentWidth) {\n        width = 0;\n      }\n      self.__indicatorX.size = width;\n      self.__indicatorX.minScale = this.options.minScrollbarSizeX / width;\n      self.__indicatorX.indicator.style.width = width + 'px';\n      self.__indicatorX.maxPos = self.__clientWidth - width;\n      self.__indicatorX.sizeRatio = self.__maxScrollLeft ? self.__indicatorX.maxPos / self.__maxScrollLeft : 1;\n    }\n\n    // Update vert bar\n    if(self.__indicatorY) {\n      var height = Math.max(Math.round(self.__clientHeight * self.__clientHeight / (self.__contentHeight)), 20);\n      if(height > self.__contentHeight) {\n        height = 0;\n      }\n      self.__indicatorY.size = height;\n      self.__indicatorY.minScale = this.options.minScrollbarSizeY / height;\n      self.__indicatorY.maxPos = self.__clientHeight - height;\n      self.__indicatorY.indicator.style.height = height + 'px';\n      self.__indicatorY.sizeRatio = self.__maxScrollTop ? self.__indicatorY.maxPos / self.__maxScrollTop : 1;\n    }\n  },\n\n  /**\n   * Move and scale the scrollbars as the page scrolls.\n   */\n  __repositionScrollbars: function() {\n    var self = this, width, heightScale,\n        widthDiff, heightDiff,\n        x, y,\n        xstop = 0, ystop = 0;\n\n    if(self.__indicatorX) {\n      // Handle the X scrollbar\n\n      // Don't go all the way to the right if we have a vertical scrollbar as well\n      if(self.__indicatorY) xstop = 10;\n\n      x = Math.round(self.__indicatorX.sizeRatio * self.__scrollLeft) || 0,\n\n      // The the difference between the last content X position, and our overscrolled one\n      widthDiff = self.__scrollLeft - (self.__maxScrollLeft - xstop);\n\n      if(self.__scrollLeft < 0) {\n\n        widthScale = Math.max(self.__indicatorX.minScale,\n            (self.__indicatorX.size - Math.abs(self.__scrollLeft)) / self.__indicatorX.size);\n\n        // Stay at left\n        x = 0;\n\n        // Make sure scale is transformed from the left/center origin point\n        self.__indicatorX.indicator.style[self.__transformOriginProperty] = 'left center';\n      } else if(widthDiff > 0) {\n\n        widthScale = Math.max(self.__indicatorX.minScale,\n            (self.__indicatorX.size - widthDiff) / self.__indicatorX.size);\n\n        // Stay at the furthest x for the scrollable viewport\n        x = self.__indicatorX.maxPos - xstop;\n\n        // Make sure scale is transformed from the right/center origin point\n        self.__indicatorX.indicator.style[self.__transformOriginProperty] = 'right center';\n\n      } else {\n\n        // Normal motion\n        x = Math.min(self.__maxScrollLeft, Math.max(0, x));\n        widthScale = 1;\n\n      }\n\n      self.__indicatorX.indicator.style[self.__transformProperty] = 'translate3d(' + x + 'px, 0, 0) scaleX(' + widthScale + ')';\n    }\n\n    if(self.__indicatorY) {\n\n      y = Math.round(self.__indicatorY.sizeRatio * self.__scrollTop) || 0;\n\n      // Don't go all the way to the right if we have a vertical scrollbar as well\n      if(self.__indicatorX) ystop = 10;\n\n      heightDiff = self.__scrollTop - (self.__maxScrollTop - ystop);\n\n      if(self.__scrollTop < 0) {\n\n        heightScale = Math.max(self.__indicatorY.minScale, (self.__indicatorY.size - Math.abs(self.__scrollTop)) / self.__indicatorY.size);\n\n        // Stay at top\n        y = 0;\n\n        // Make sure scale is transformed from the center/top origin point\n        self.__indicatorY.indicator.style[self.__transformOriginProperty] = 'center top';\n\n      } else if(heightDiff > 0) {\n\n        heightScale = Math.max(self.__indicatorY.minScale, (self.__indicatorY.size - heightDiff) / self.__indicatorY.size);\n\n        // Stay at bottom of scrollable viewport\n        y = self.__indicatorY.maxPos - ystop;\n\n        // Make sure scale is transformed from the center/bottom origin point\n        self.__indicatorY.indicator.style[self.__transformOriginProperty] = 'center bottom';\n\n      } else {\n\n        // Normal motion\n        y = Math.min(self.__maxScrollTop, Math.max(0, y));\n        heightScale = 1;\n\n      }\n\n      self.__indicatorY.indicator.style[self.__transformProperty] = 'translate3d(0,' + y + 'px, 0) scaleY(' + heightScale + ')';\n    }\n  },\n\n  __fadeScrollbars: function(direction, delay) {\n    var self = this;\n\n    if(!this.options.scrollbarsFade) {\n      return;\n    }\n\n    var className = 'scroll-bar-fade-out';\n\n    if(self.options.scrollbarsFade === true) {\n      clearTimeout(self.__scrollbarFadeTimeout);\n\n      if(direction == 'in') {\n        if(self.__indicatorX) { self.__indicatorX.indicator.classList.remove(className); }\n        if(self.__indicatorY) { self.__indicatorY.indicator.classList.remove(className); }\n      } else {\n        self.__scrollbarFadeTimeout = setTimeout(function() {\n          if(self.__indicatorX) { self.__indicatorX.indicator.classList.add(className); }\n          if(self.__indicatorY) { self.__indicatorY.indicator.classList.add(className); }\n        }, delay || self.options.scrollbarFadeDelay);\n      }\n    }\n  },\n\n  __scrollingComplete: function() {\n    var self = this;\n    self.options.scrollingComplete();\n\n    self.__fadeScrollbars('out');\n  },\n\n  resize: function() {\n    // Update Scroller dimensions for changed content\n    // Add padding to bottom of content\n    this.setDimensions(\n    \tthis.__container.clientWidth,\n    \tthis.__container.clientHeight,\n      this.options.getContentWidth(),\n      this.options.getContentHeight()\n    );\n  },\n  /*\n  ---------------------------------------------------------------------------\n    PUBLIC API\n  ---------------------------------------------------------------------------\n  */\n\n  getRenderFn: function() {\n    var self = this;\n\n    var content = this.__content;\n\n    var docStyle = document.documentElement.style;\n\n    var engine;\n    if ('MozAppearance' in docStyle) {\n      engine = 'gecko';\n    } else if ('WebkitAppearance' in docStyle) {\n      engine = 'webkit';\n    } else if (typeof navigator.cpuClass === 'string') {\n      engine = 'trident';\n    }\n\n    var vendorPrefix = {\n      trident: 'ms',\n      gecko: 'Moz',\n      webkit: 'Webkit',\n      presto: 'O'\n    }[engine];\n\n    var helperElem = document.createElement(\"div\");\n    var undef;\n\n    var perspectiveProperty = vendorPrefix + \"Perspective\";\n    var transformProperty = vendorPrefix + \"Transform\";\n    var transformOriginProperty = vendorPrefix + 'TransformOrigin';\n\n    self.__perspectiveProperty = transformProperty;\n    self.__transformProperty = transformProperty;\n    self.__transformOriginProperty = transformOriginProperty;\n\n    if (helperElem.style[perspectiveProperty] !== undef) {\n\n      return function(left, top, zoom, wasResize) {\n        content.style[transformProperty] = 'translate3d(' + (-left) + 'px,' + (-top) + 'px,0) scale(' + zoom + ')';\n        self.__repositionScrollbars();\n        if(!wasResize) {\n          self.triggerScrollEvent();\n        }\n      };\n\n    } else if (helperElem.style[transformProperty] !== undef) {\n\n      return function(left, top, zoom, wasResize) {\n        content.style[transformProperty] = 'translate(' + (-left) + 'px,' + (-top) + 'px) scale(' + zoom + ')';\n        self.__repositionScrollbars();\n        if(!wasResize) {\n          self.triggerScrollEvent();\n        }\n      };\n\n    } else {\n\n      return function(left, top, zoom, wasResize) {\n        content.style.marginLeft = left ? (-left/zoom) + 'px' : '';\n        content.style.marginTop = top ? (-top/zoom) + 'px' : '';\n        content.style.zoom = zoom || '';\n        self.__repositionScrollbars();\n        if(!wasResize) {\n          self.triggerScrollEvent();\n        }\n      };\n\n    }\n  },\n\n\n  /**\n   * Configures the dimensions of the client (outer) and content (inner) elements.\n   * Requires the available space for the outer element and the outer size of the inner element.\n   * All values which are falsy (null or zero etc.) are ignored and the old value is kept.\n   *\n   * @param clientWidth {Integer} Inner width of outer element\n   * @param clientHeight {Integer} Inner height of outer element\n   * @param contentWidth {Integer} Outer width of inner element\n   * @param contentHeight {Integer} Outer height of inner element\n   */\n  setDimensions: function(clientWidth, clientHeight, contentWidth, contentHeight) {\n    var self = this;\n\n    // Only update values which are defined\n    if (clientWidth === +clientWidth) {\n      self.__clientWidth = clientWidth;\n    }\n\n    if (clientHeight === +clientHeight) {\n      self.__clientHeight = clientHeight;\n    }\n\n    if (contentWidth === +contentWidth) {\n      self.__contentWidth = contentWidth;\n    }\n\n    if (contentHeight === +contentHeight) {\n      self.__contentHeight = contentHeight;\n    }\n\n    // Refresh maximums\n    self.__computeScrollMax();\n    self.__resizeScrollbars();\n\n    // Refresh scroll position\n    self.scrollTo(self.__scrollLeft, self.__scrollTop, true, null, true);\n\n  },\n\n\n  /**\n   * Sets the client coordinates in relation to the document.\n   *\n   * @param left {Integer} Left position of outer element\n   * @param top {Integer} Top position of outer element\n   */\n  setPosition: function(left, top) {\n\n    var self = this;\n\n    self.__clientLeft = left || 0;\n    self.__clientTop = top || 0;\n\n  },\n\n\n  /**\n   * Configures the snapping (when snapping is active)\n   *\n   * @param width {Integer} Snapping width\n   * @param height {Integer} Snapping height\n   */\n  setSnapSize: function(width, height) {\n\n    var self = this;\n\n    self.__snapWidth = width;\n    self.__snapHeight = height;\n\n  },\n\n\n  /**\n   * Activates pull-to-refresh. A special zone on the top of the list to start a list refresh whenever\n   * the user event is released during visibility of this zone. This was introduced by some apps on iOS like\n   * the official Twitter client.\n   *\n   * @param height {Integer} Height of pull-to-refresh zone on top of rendered list\n   * @param activateCallback {Function} Callback to execute on activation. This is for signalling the user about a refresh is about to happen when he release.\n   * @param deactivateCallback {Function} Callback to execute on deactivation. This is for signalling the user about the refresh being cancelled.\n   * @param startCallback {Function} Callback to execute to start the real async refresh action. Call {@link #finishPullToRefresh} after finish of refresh.\n   */\n  activatePullToRefresh: function(height, activateCallback, deactivateCallback, startCallback) {\n\n    var self = this;\n\n    self.__refreshHeight = height;\n    self.__refreshActivate = activateCallback;\n    self.__refreshDeactivate = deactivateCallback;\n    self.__refreshStart = startCallback;\n\n  },\n\n\n  /**\n   * Starts pull-to-refresh manually.\n   */\n  triggerPullToRefresh: function() {\n    // Use publish instead of scrollTo to allow scrolling to out of boundary position\n    // We don't need to normalize scrollLeft, zoomLevel, etc. here because we only y-scrolling when pull-to-refresh is enabled\n    this.__publish(this.__scrollLeft, -this.__refreshHeight, this.__zoomLevel, true);\n\n    if (this.__refreshStart) {\n      this.__refreshStart();\n    }\n  },\n\n\n  /**\n   * Signalizes that pull-to-refresh is finished.\n   */\n  finishPullToRefresh: function() {\n\n    var self = this;\n\n    self.__refreshActive = false;\n    if (self.__refreshDeactivate) {\n      self.__refreshDeactivate();\n    }\n\n    self.scrollTo(self.__scrollLeft, self.__scrollTop, true);\n\n  },\n\n\n  /**\n   * Returns the scroll position and zooming values\n   *\n   * @return {Map} `left` and `top` scroll position and `zoom` level\n   */\n  getValues: function() {\n\n    var self = this;\n\n    return {\n      left: self.__scrollLeft,\n      top: self.__scrollTop,\n      zoom: self.__zoomLevel\n    };\n\n  },\n\n\n  /**\n   * Returns the maximum scroll values\n   *\n   * @return {Map} `left` and `top` maximum scroll values\n   */\n  getScrollMax: function() {\n\n    var self = this;\n\n    return {\n      left: self.__maxScrollLeft,\n      top: self.__maxScrollTop\n    };\n\n  },\n\n\n  /**\n   * Zooms to the given level. Supports optional animation. Zooms\n   * the center when no coordinates are given.\n   *\n   * @param level {Number} Level to zoom to\n   * @param animate {Boolean} Whether to use animation\n   * @param originLeft {Number} Zoom in at given left coordinate\n   * @param originTop {Number} Zoom in at given top coordinate\n   */\n  zoomTo: function(level, animate, originLeft, originTop) {\n\n    var self = this;\n\n    if (!self.options.zooming) {\n      throw new Error(\"Zooming is not enabled!\");\n    }\n\n    // Stop deceleration\n    if (self.__isDecelerating) {\n      zyngaCore.effect.Animate.stop(self.__isDecelerating);\n      self.__isDecelerating = false;\n    }\n\n    var oldLevel = self.__zoomLevel;\n\n    // Normalize input origin to center of viewport if not defined\n    if (originLeft == null) {\n      originLeft = self.__clientWidth / 2;\n    }\n\n    if (originTop == null) {\n      originTop = self.__clientHeight / 2;\n    }\n\n    // Limit level according to configuration\n    level = Math.max(Math.min(level, self.options.maxZoom), self.options.minZoom);\n\n    // Recompute maximum values while temporary tweaking maximum scroll ranges\n    self.__computeScrollMax(level);\n\n    // Recompute left and top coordinates based on new zoom level\n    var left = ((originLeft + self.__scrollLeft) * level / oldLevel) - originLeft;\n    var top = ((originTop + self.__scrollTop) * level / oldLevel) - originTop;\n\n    // Limit x-axis\n    if (left > self.__maxScrollLeft) {\n      left = self.__maxScrollLeft;\n    } else if (left < 0) {\n      left = 0;\n    }\n\n    // Limit y-axis\n    if (top > self.__maxScrollTop) {\n      top = self.__maxScrollTop;\n    } else if (top < 0) {\n      top = 0;\n    }\n\n    // Push values out\n    self.__publish(left, top, level, animate);\n\n  },\n\n\n  /**\n   * Zooms the content by the given factor.\n   *\n   * @param factor {Number} Zoom by given factor\n   * @param animate {Boolean} Whether to use animation\n   * @param originLeft {Number} Zoom in at given left coordinate\n   * @param originTop {Number} Zoom in at given top coordinate\n   */\n  zoomBy: function(factor, animate, originLeft, originTop) {\n\n    var self = this;\n\n    self.zoomTo(self.__zoomLevel * factor, animate, originLeft, originTop);\n\n  },\n\n\n  /**\n   * Scrolls to the given position. Respect limitations and snapping automatically.\n   *\n   * @param left {Number} Horizontal scroll position, keeps current if value is <code>null</code>\n   * @param top {Number} Vertical scroll position, keeps current if value is <code>null</code>\n   * @param animate {Boolean} Whether the scrolling should happen using an animation\n   * @param zoom {Number} Zoom level to go to\n   */\n  scrollTo: function(left, top, animate, zoom, wasResize) {\n    var self = this;\n\n    // Stop deceleration\n    if (self.__isDecelerating) {\n      zyngaCore.effect.Animate.stop(self.__isDecelerating);\n      self.__isDecelerating = false;\n    }\n\n    // Correct coordinates based on new zoom level\n    if (zoom != null && zoom !== self.__zoomLevel) {\n\n      if (!self.options.zooming) {\n        throw new Error(\"Zooming is not enabled!\");\n      }\n\n      left *= zoom;\n      top *= zoom;\n\n      // Recompute maximum values while temporary tweaking maximum scroll ranges\n      self.__computeScrollMax(zoom);\n\n    } else {\n\n      // Keep zoom when not defined\n      zoom = self.__zoomLevel;\n\n    }\n\n    if (!self.options.scrollingX) {\n\n      left = self.__scrollLeft;\n\n    } else {\n\n      if (self.options.paging) {\n        left = Math.round(left / self.__clientWidth) * self.__clientWidth;\n      } else if (self.options.snapping) {\n        left = Math.round(left / self.__snapWidth) * self.__snapWidth;\n      }\n\n    }\n\n    if (!self.options.scrollingY) {\n\n      top = self.__scrollTop;\n\n    } else {\n\n      if (self.options.paging) {\n        top = Math.round(top / self.__clientHeight) * self.__clientHeight;\n      } else if (self.options.snapping) {\n        top = Math.round(top / self.__snapHeight) * self.__snapHeight;\n      }\n\n    }\n\n    // Limit for allowed ranges\n    left = Math.max(Math.min(self.__maxScrollLeft, left), 0);\n    top = Math.max(Math.min(self.__maxScrollTop, top), 0);\n\n    // Don't animate when no change detected, still call publish to make sure\n    // that rendered position is really in-sync with internal data\n    if (left === self.__scrollLeft && top === self.__scrollTop) {\n      animate = false;\n    }\n\n    // Publish new values\n    self.__publish(left, top, zoom, animate, wasResize);\n\n  },\n\n\n  /**\n   * Scroll by the given offset\n   *\n   * @param left {Number} Scroll x-axis by given offset\n   * @param top {Number} Scroll y-axis by given offset\n   * @param animate {Boolean} Whether to animate the given change\n   */\n  scrollBy: function(left, top, animate) {\n\n    var self = this;\n\n    var startLeft = self.__isAnimating ? self.__scheduledLeft : self.__scrollLeft;\n    var startTop = self.__isAnimating ? self.__scheduledTop : self.__scrollTop;\n\n    self.scrollTo(startLeft + (left || 0), startTop + (top || 0), animate);\n\n  },\n\n\n\n  /*\n  ---------------------------------------------------------------------------\n    EVENT CALLBACKS\n  ---------------------------------------------------------------------------\n  */\n\n  /**\n   * Mouse wheel handler for zooming support\n   */\n  doMouseZoom: function(wheelDelta, timeStamp, pageX, pageY) {\n\n    var self = this;\n    var change = wheelDelta > 0 ? 0.97 : 1.03;\n\n    return self.zoomTo(self.__zoomLevel * change, false, pageX - self.__clientLeft, pageY - self.__clientTop);\n\n  },\n\n  /**\n   * Touch start handler for scrolling support\n   */\n  doTouchStart: function(touches, timeStamp) {\n    this.hintResize();\n\n    if (timeStamp instanceof Date) {\n      timeStamp = timeStamp.valueOf();\n    }\n    if (typeof timeStamp !== \"number\") {\n      timeStamp = Date.now();\n    }\n\n    var self = this;\n\n    // Reset interruptedAnimation flag\n    self.__interruptedAnimation = true;\n\n    // Stop deceleration\n    if (self.__isDecelerating) {\n      zyngaCore.effect.Animate.stop(self.__isDecelerating);\n      self.__isDecelerating = false;\n      self.__interruptedAnimation = true;\n    }\n\n    // Stop animation\n    if (self.__isAnimating) {\n      zyngaCore.effect.Animate.stop(self.__isAnimating);\n      self.__isAnimating = false;\n      self.__interruptedAnimation = true;\n    }\n\n    // Use center point when dealing with two fingers\n    var currentTouchLeft, currentTouchTop;\n    var isSingleTouch = touches.length === 1;\n    if (isSingleTouch) {\n      currentTouchLeft = touches[0].pageX;\n      currentTouchTop = touches[0].pageY;\n    } else {\n      currentTouchLeft = Math.abs(touches[0].pageX + touches[1].pageX) / 2;\n      currentTouchTop = Math.abs(touches[0].pageY + touches[1].pageY) / 2;\n    }\n\n    // Store initial positions\n    self.__initialTouchLeft = currentTouchLeft;\n    self.__initialTouchTop = currentTouchTop;\n\n    // Store initial touchList for scale calculation\n    self.__initialTouches = touches;\n\n    // Store current zoom level\n    self.__zoomLevelStart = self.__zoomLevel;\n\n    // Store initial touch positions\n    self.__lastTouchLeft = currentTouchLeft;\n    self.__lastTouchTop = currentTouchTop;\n\n    // Store initial move time stamp\n    self.__lastTouchMove = timeStamp;\n\n    // Reset initial scale\n    self.__lastScale = 1;\n\n    // Reset locking flags\n    self.__enableScrollX = !isSingleTouch && self.options.scrollingX;\n    self.__enableScrollY = !isSingleTouch && self.options.scrollingY;\n\n    // Reset tracking flag\n    self.__isTracking = true;\n\n    // Reset deceleration complete flag\n    self.__didDecelerationComplete = false;\n\n    // Dragging starts directly with two fingers, otherwise lazy with an offset\n    self.__isDragging = !isSingleTouch;\n\n    // Some features are disabled in multi touch scenarios\n    self.__isSingleTouch = isSingleTouch;\n\n    // Clearing data structure\n    self.__positions = [];\n\n  },\n\n\n  /**\n   * Touch move handler for scrolling support\n   */\n  doTouchMove: function(touches, timeStamp, scale) {\n    if (timeStamp instanceof Date) {\n      timeStamp = timeStamp.valueOf();\n    }\n    if (typeof timeStamp !== \"number\") {\n      timeStamp = Date.now();\n    }\n\n    var self = this;\n\n    // Ignore event when tracking is not enabled (event might be outside of element)\n    if (!self.__isTracking) {\n      return;\n    }\n\n    var currentTouchLeft, currentTouchTop;\n\n    // Compute move based around of center of fingers\n    if (touches.length === 2) {\n      currentTouchLeft = Math.abs(touches[0].pageX + touches[1].pageX) / 2;\n      currentTouchTop = Math.abs(touches[0].pageY + touches[1].pageY) / 2;\n\n      // Calculate scale when not present and only when touches are used\n      if (!scale && self.options.zooming) {\n        scale = self.__getScale(self.__initialTouches, touches);\n      }\n    } else {\n      currentTouchLeft = touches[0].pageX;\n      currentTouchTop = touches[0].pageY;\n    }\n\n    var positions = self.__positions;\n\n    // Are we already is dragging mode?\n    if (self.__isDragging) {\n\n      // Compute move distance\n      var moveX = currentTouchLeft - self.__lastTouchLeft;\n      var moveY = currentTouchTop - self.__lastTouchTop;\n\n      // Read previous scroll position and zooming\n      var scrollLeft = self.__scrollLeft;\n      var scrollTop = self.__scrollTop;\n      var level = self.__zoomLevel;\n\n      // Work with scaling\n      if (scale != null && self.options.zooming) {\n\n        var oldLevel = level;\n\n        // Recompute level based on previous scale and new scale\n        level = level / self.__lastScale * scale;\n\n        // Limit level according to configuration\n        level = Math.max(Math.min(level, self.options.maxZoom), self.options.minZoom);\n\n        // Only do further compution when change happened\n        if (oldLevel !== level) {\n\n          // Compute relative event position to container\n          var currentTouchLeftRel = currentTouchLeft - self.__clientLeft;\n          var currentTouchTopRel = currentTouchTop - self.__clientTop;\n\n          // Recompute left and top coordinates based on new zoom level\n          scrollLeft = ((currentTouchLeftRel + scrollLeft) * level / oldLevel) - currentTouchLeftRel;\n          scrollTop = ((currentTouchTopRel + scrollTop) * level / oldLevel) - currentTouchTopRel;\n\n          // Recompute max scroll values\n          self.__computeScrollMax(level);\n\n        }\n      }\n\n      if (self.__enableScrollX) {\n\n        scrollLeft -= moveX * this.options.speedMultiplier;\n        var maxScrollLeft = self.__maxScrollLeft;\n\n        if (scrollLeft > maxScrollLeft || scrollLeft < 0) {\n\n          // Slow down on the edges\n          if (self.options.bouncing) {\n\n            scrollLeft += (moveX / 2  * this.options.speedMultiplier);\n\n          } else if (scrollLeft > maxScrollLeft) {\n\n            scrollLeft = maxScrollLeft;\n\n          } else {\n\n            scrollLeft = 0;\n\n          }\n        }\n      }\n\n      // Compute new vertical scroll position\n      if (self.__enableScrollY) {\n\n        scrollTop -= moveY * this.options.speedMultiplier;\n        var maxScrollTop = self.__maxScrollTop;\n\n        if (scrollTop > maxScrollTop || scrollTop < 0) {\n\n          // Slow down on the edges\n          if (self.options.bouncing || (self.__refreshHeight && scrollTop < 0)) {\n\n            scrollTop += (moveY / 2 * this.options.speedMultiplier);\n\n            // Support pull-to-refresh (only when only y is scrollable)\n            if (!self.__enableScrollX && self.__refreshHeight != null) {\n\n              if (!self.__refreshActive && scrollTop <= -self.__refreshHeight) {\n\n                self.__refreshActive = true;\n                if (self.__refreshActivate) {\n                  self.__refreshActivate();\n                }\n\n              } else if (self.__refreshActive && scrollTop > -self.__refreshHeight) {\n\n                self.__refreshActive = false;\n                if (self.__refreshDeactivate) {\n                  self.__refreshDeactivate();\n                }\n\n              }\n            }\n\n          } else if (scrollTop > maxScrollTop) {\n\n            scrollTop = maxScrollTop;\n\n          } else {\n\n            scrollTop = 0;\n\n          }\n        }\n      }\n\n      // Keep list from growing infinitely (holding min 10, max 20 measure points)\n      if (positions.length > 60) {\n        positions.splice(0, 30);\n      }\n\n      // Track scroll movement for decleration\n      positions.push(scrollLeft, scrollTop, timeStamp);\n\n      // Sync scroll position\n      self.__publish(scrollLeft, scrollTop, level);\n\n    // Otherwise figure out whether we are switching into dragging mode now.\n    } else {\n\n      var minimumTrackingForScroll = self.options.locking ? 3 : 0;\n      var minimumTrackingForDrag = 5;\n\n      var distanceX = Math.abs(currentTouchLeft - self.__initialTouchLeft);\n      var distanceY = Math.abs(currentTouchTop - self.__initialTouchTop);\n\n      self.__enableScrollX = self.options.scrollingX && distanceX >= minimumTrackingForScroll;\n      self.__enableScrollY = self.options.scrollingY && distanceY >= minimumTrackingForScroll;\n\n      positions.push(self.__scrollLeft, self.__scrollTop, timeStamp);\n\n      self.__isDragging = (self.__enableScrollX || self.__enableScrollY) && (distanceX >= minimumTrackingForDrag || distanceY >= minimumTrackingForDrag);\n      if (self.__isDragging) {\n        self.__interruptedAnimation = false;\n        self.__fadeScrollbars('in');\n      }\n\n    }\n\n    // Update last touch positions and time stamp for next event\n    self.__lastTouchLeft = currentTouchLeft;\n    self.__lastTouchTop = currentTouchTop;\n    self.__lastTouchMove = timeStamp;\n    self.__lastScale = scale;\n\n  },\n\n\n  /**\n   * Touch end handler for scrolling support\n   */\n  doTouchEnd: function(timeStamp) {\n    if (timeStamp instanceof Date) {\n      timeStamp = timeStamp.valueOf();\n    }\n    if (typeof timeStamp !== \"number\") {\n      timeStamp = Date.now();\n    }\n\n    var self = this;\n\n    // Ignore event when tracking is not enabled (no touchstart event on element)\n    // This is required as this listener ('touchmove') sits on the document and not on the element itself.\n    if (!self.__isTracking) {\n      return;\n    }\n\n    // Not touching anymore (when two finger hit the screen there are two touch end events)\n    self.__isTracking = false;\n\n    // Be sure to reset the dragging flag now. Here we also detect whether\n    // the finger has moved fast enough to switch into a deceleration animation.\n    if (self.__isDragging) {\n\n      // Reset dragging flag\n      self.__isDragging = false;\n\n      // Start deceleration\n      // Verify that the last move detected was in some relevant time frame\n      if (self.__isSingleTouch && self.options.animating && (timeStamp - self.__lastTouchMove) <= 100) {\n\n        // Then figure out what the scroll position was about 100ms ago\n        var positions = self.__positions;\n        var endPos = positions.length - 1;\n        var startPos = endPos;\n\n        // Move pointer to position measured 100ms ago\n        for (var i = endPos; i > 0 && positions[i] > (self.__lastTouchMove - 100); i -= 3) {\n          startPos = i;\n        }\n\n        // If start and stop position is identical in a 100ms timeframe,\n        // we cannot compute any useful deceleration.\n        if (startPos !== endPos) {\n\n          // Compute relative movement between these two points\n          var timeOffset = positions[endPos] - positions[startPos];\n          var movedLeft = self.__scrollLeft - positions[startPos - 2];\n          var movedTop = self.__scrollTop - positions[startPos - 1];\n\n          // Based on 50ms compute the movement to apply for each render step\n          self.__decelerationVelocityX = movedLeft / timeOffset * (1000 / 60);\n          self.__decelerationVelocityY = movedTop / timeOffset * (1000 / 60);\n\n          // How much velocity is required to start the deceleration\n          var minVelocityToStartDeceleration = self.options.paging || self.options.snapping ? 4 : 1;\n\n          // Verify that we have enough velocity to start deceleration\n          if (Math.abs(self.__decelerationVelocityX) > minVelocityToStartDeceleration || Math.abs(self.__decelerationVelocityY) > minVelocityToStartDeceleration) {\n\n            // Deactivate pull-to-refresh when decelerating\n            if (!self.__refreshActive) {\n              self.__startDeceleration(timeStamp);\n            }\n          }\n        } else {\n          self.__scrollingComplete();\n        }\n      } else if ((timeStamp - self.__lastTouchMove) > 100) {\n        self.__scrollingComplete();\n      }\n    }\n\n    // If this was a slower move it is per default non decelerated, but this\n    // still means that we want snap back to the bounds which is done here.\n    // This is placed outside the condition above to improve edge case stability\n    // e.g. touchend fired without enabled dragging. This should normally do not\n    // have modified the scroll positions or even showed the scrollbars though.\n    if (!self.__isDecelerating) {\n\n      if (self.__refreshActive && self.__refreshStart) {\n\n        // Use publish instead of scrollTo to allow scrolling to out of boundary position\n        // We don't need to normalize scrollLeft, zoomLevel, etc. here because we only y-scrolling when pull-to-refresh is enabled\n        self.__publish(self.__scrollLeft, -self.__refreshHeight, self.__zoomLevel, true);\n\n        if (self.__refreshStart) {\n          self.__refreshStart();\n        }\n\n      } else {\n\n        if (self.__interruptedAnimation || self.__isDragging) {\n          self.__scrollingComplete();\n        }\n        self.scrollTo(self.__scrollLeft, self.__scrollTop, true, self.__zoomLevel);\n\n        // Directly signalize deactivation (nothing todo on refresh?)\n        if (self.__refreshActive) {\n\n          self.__refreshActive = false;\n          if (self.__refreshDeactivate) {\n            self.__refreshDeactivate();\n          }\n\n        }\n      }\n    }\n\n    // Fully cleanup list\n    self.__positions.length = 0;\n\n  },\n\n\n\n  /*\n  ---------------------------------------------------------------------------\n    PRIVATE API\n  ---------------------------------------------------------------------------\n  */\n\n  /**\n   * Applies the scroll position to the content element\n   *\n   * @param left {Number} Left scroll position\n   * @param top {Number} Top scroll position\n   * @param animate {Boolean} Whether animation should be used to move to the new coordinates\n   */\n  __publish: function(left, top, zoom, animate, wasResize) {\n\n    var self = this;\n\n    // Remember whether we had an animation, then we try to continue based on the current \"drive\" of the animation\n    var wasAnimating = self.__isAnimating;\n    if (wasAnimating) {\n      zyngaCore.effect.Animate.stop(wasAnimating);\n      self.__isAnimating = false;\n    }\n\n    if (animate && self.options.animating) {\n\n      // Keep scheduled positions for scrollBy/zoomBy functionality\n      self.__scheduledLeft = left;\n      self.__scheduledTop = top;\n      self.__scheduledZoom = zoom;\n\n      var oldLeft = self.__scrollLeft;\n      var oldTop = self.__scrollTop;\n      var oldZoom = self.__zoomLevel;\n\n      var diffLeft = left - oldLeft;\n      var diffTop = top - oldTop;\n      var diffZoom = zoom - oldZoom;\n\n      var step = function(percent, now, render) {\n\n        if (render) {\n\n          self.__scrollLeft = oldLeft + (diffLeft * percent);\n          self.__scrollTop = oldTop + (diffTop * percent);\n          self.__zoomLevel = oldZoom + (diffZoom * percent);\n\n          // Push values out\n          if (self.__callback) {\n            self.__callback(self.__scrollLeft, self.__scrollTop, self.__zoomLevel, wasResize);\n          }\n\n        }\n      };\n\n      var verify = function(id) {\n        return self.__isAnimating === id;\n      };\n\n      var completed = function(renderedFramesPerSecond, animationId, wasFinished) {\n        if (animationId === self.__isAnimating) {\n          self.__isAnimating = false;\n        }\n        if (self.__didDecelerationComplete || wasFinished) {\n          self.__scrollingComplete();\n        }\n\n        if (self.options.zooming) {\n          self.__computeScrollMax();\n        }\n      };\n\n      // When continuing based on previous animation we choose an ease-out animation instead of ease-in-out\n      self.__isAnimating = zyngaCore.effect.Animate.start(step, verify, completed, self.options.animationDuration, wasAnimating ? easeOutCubic : easeInOutCubic);\n\n    } else {\n\n      self.__scheduledLeft = self.__scrollLeft = left;\n      self.__scheduledTop = self.__scrollTop = top;\n      self.__scheduledZoom = self.__zoomLevel = zoom;\n\n      // Push values out\n      if (self.__callback) {\n        self.__callback(left, top, zoom, wasResize);\n      }\n\n      // Fix max scroll ranges\n      if (self.options.zooming) {\n        self.__computeScrollMax();\n      }\n    }\n  },\n\n\n  /**\n   * Recomputes scroll minimum values based on client dimensions and content dimensions.\n   */\n  __computeScrollMax: function(zoomLevel) {\n\n    var self = this;\n\n    if (zoomLevel == null) {\n      zoomLevel = self.__zoomLevel;\n    }\n\n    self.__maxScrollLeft = Math.max((self.__contentWidth * zoomLevel) - self.__clientWidth, 0);\n    self.__maxScrollTop = Math.max((self.__contentHeight * zoomLevel) - self.__clientHeight, 0);\n\n    if(!self.__didWaitForSize && !self.__maxScrollLeft && !self.__maxScrollTop) {\n      self.__didWaitForSize = true;\n      self.__waitForSize();\n    }\n  },\n\n\n  /**\n   * If the scroll view isn't sized correctly on start, wait until we have at least some size\n   */\n  __waitForSize: function() {\n\n    var self = this;\n\n    clearTimeout(self.__sizerTimeout);\n\n    var sizer = function() {\n      self.resize();\n\n      if((self.options.scrollingX && !self.__maxScrollLeft) || (self.options.scrollingY && !self.__maxScrollTop)) {\n        //self.__sizerTimeout = setTimeout(sizer, 1000);\n      }\n    };\n\n    sizer();\n    self.__sizerTimeout = setTimeout(sizer, 1000);\n  },\n\n  /*\n  ---------------------------------------------------------------------------\n    ANIMATION (DECELERATION) SUPPORT\n  ---------------------------------------------------------------------------\n  */\n\n  /**\n   * Called when a touch sequence end and the speed of the finger was high enough\n   * to switch into deceleration mode.\n   */\n  __startDeceleration: function(timeStamp) {\n\n    var self = this;\n\n    if (self.options.paging) {\n\n      var scrollLeft = Math.max(Math.min(self.__scrollLeft, self.__maxScrollLeft), 0);\n      var scrollTop = Math.max(Math.min(self.__scrollTop, self.__maxScrollTop), 0);\n      var clientWidth = self.__clientWidth;\n      var clientHeight = self.__clientHeight;\n\n      // We limit deceleration not to the min/max values of the allowed range, but to the size of the visible client area.\n      // Each page should have exactly the size of the client area.\n      self.__minDecelerationScrollLeft = Math.floor(scrollLeft / clientWidth) * clientWidth;\n      self.__minDecelerationScrollTop = Math.floor(scrollTop / clientHeight) * clientHeight;\n      self.__maxDecelerationScrollLeft = Math.ceil(scrollLeft / clientWidth) * clientWidth;\n      self.__maxDecelerationScrollTop = Math.ceil(scrollTop / clientHeight) * clientHeight;\n\n    } else {\n\n      self.__minDecelerationScrollLeft = 0;\n      self.__minDecelerationScrollTop = 0;\n      self.__maxDecelerationScrollLeft = self.__maxScrollLeft;\n      self.__maxDecelerationScrollTop = self.__maxScrollTop;\n\n    }\n\n    // Wrap class method\n    var step = function(percent, now, render) {\n      self.__stepThroughDeceleration(render);\n    };\n\n    // How much velocity is required to keep the deceleration running\n    self.__minVelocityToKeepDecelerating = self.options.snapping ? 4 : 0.1;\n\n    // Detect whether it's still worth to continue animating steps\n    // If we are already slow enough to not being user perceivable anymore, we stop the whole process here.\n    var verify = function() {\n      var shouldContinue = Math.abs(self.__decelerationVelocityX) >= self.__minVelocityToKeepDecelerating ||\n        Math.abs(self.__decelerationVelocityY) >= self.__minVelocityToKeepDecelerating;\n      if (!shouldContinue) {\n        self.__didDecelerationComplete = true;\n\n        //Make sure the scroll values are within the boundaries after a bounce,\n        //not below 0 or above maximum\n        if (self.options.bouncing) {\n          self.scrollTo(\n            Math.min( Math.max(self.__scrollLeft, 0), self.__maxScrollLeft ),\n            Math.min( Math.max(self.__scrollTop, 0), self.__maxScrollTop ),\n            false\n          );\n        }\n      }\n      return shouldContinue;\n    };\n\n    var completed = function(renderedFramesPerSecond, animationId, wasFinished) {\n      self.__isDecelerating = false;\n      if (self.__didDecelerationComplete) {\n        self.__scrollingComplete();\n      }\n\n      // Animate to grid when snapping is active, otherwise just fix out-of-boundary positions\n      if(self.options.paging) {\n        self.scrollTo(self.__scrollLeft, self.__scrollTop, self.options.snapping);\n      }\n    };\n\n    // Start animation and switch on flag\n    self.__isDecelerating = zyngaCore.effect.Animate.start(step, verify, completed);\n\n  },\n\n\n  /**\n   * Called on every step of the animation\n   *\n   * @param inMemory {Boolean} Whether to not render the current step, but keep it in memory only. Used internally only!\n   */\n  __stepThroughDeceleration: function(render) {\n\n    var self = this;\n\n\n    //\n    // COMPUTE NEXT SCROLL POSITION\n    //\n\n    // Add deceleration to scroll position\n    var scrollLeft = self.__scrollLeft + self.__decelerationVelocityX;// * self.options.deceleration);\n    var scrollTop = self.__scrollTop + self.__decelerationVelocityY;// * self.options.deceleration);\n\n\n    //\n    // HARD LIMIT SCROLL POSITION FOR NON BOUNCING MODE\n    //\n\n    if (!self.options.bouncing) {\n\n      var scrollLeftFixed = Math.max(Math.min(self.__maxDecelerationScrollLeft, scrollLeft), self.__minDecelerationScrollLeft);\n      if (scrollLeftFixed !== scrollLeft) {\n        scrollLeft = scrollLeftFixed;\n        self.__decelerationVelocityX = 0;\n      }\n\n      var scrollTopFixed = Math.max(Math.min(self.__maxDecelerationScrollTop, scrollTop), self.__minDecelerationScrollTop);\n      if (scrollTopFixed !== scrollTop) {\n        scrollTop = scrollTopFixed;\n        self.__decelerationVelocityY = 0;\n      }\n\n    }\n\n\n    //\n    // UPDATE SCROLL POSITION\n    //\n\n    if (render) {\n\n      self.__publish(scrollLeft, scrollTop, self.__zoomLevel);\n\n    } else {\n\n      self.__scrollLeft = scrollLeft;\n      self.__scrollTop = scrollTop;\n\n    }\n\n\n    //\n    // SLOW DOWN\n    //\n\n    // Slow down velocity on every iteration\n    if (!self.options.paging) {\n\n      // This is the factor applied to every iteration of the animation\n      // to slow down the process. This should emulate natural behavior where\n      // objects slow down when the initiator of the movement is removed\n      var frictionFactor = self.options.deceleration;\n\n      self.__decelerationVelocityX *= frictionFactor;\n      self.__decelerationVelocityY *= frictionFactor;\n\n    }\n\n\n    //\n    // BOUNCING SUPPORT\n    //\n\n    if (self.options.bouncing) {\n\n      var scrollOutsideX = 0;\n      var scrollOutsideY = 0;\n\n      // This configures the amount of change applied to deceleration/acceleration when reaching boundaries\n      var penetrationDeceleration = self.options.penetrationDeceleration;\n      var penetrationAcceleration = self.options.penetrationAcceleration;\n\n      // Check limits\n      if (scrollLeft < self.__minDecelerationScrollLeft) {\n        scrollOutsideX = self.__minDecelerationScrollLeft - scrollLeft;\n      } else if (scrollLeft > self.__maxDecelerationScrollLeft) {\n        scrollOutsideX = self.__maxDecelerationScrollLeft - scrollLeft;\n      }\n\n      if (scrollTop < self.__minDecelerationScrollTop) {\n        scrollOutsideY = self.__minDecelerationScrollTop - scrollTop;\n      } else if (scrollTop > self.__maxDecelerationScrollTop) {\n        scrollOutsideY = self.__maxDecelerationScrollTop - scrollTop;\n      }\n\n      // Slow down until slow enough, then flip back to snap position\n      if (scrollOutsideX !== 0) {\n        var isHeadingOutwardsX = scrollOutsideX * self.__decelerationVelocityX <= self.__minDecelerationScrollLeft;\n        if (isHeadingOutwardsX) {\n          self.__decelerationVelocityX += scrollOutsideX * penetrationDeceleration;\n        }\n        var isStoppedX = Math.abs(self.__decelerationVelocityX) <= self.__minVelocityToKeepDecelerating;\n        //If we're not heading outwards, or if the above statement got us below minDeceleration, go back towards bounds\n        if (!isHeadingOutwardsX || isStoppedX) {\n          self.__decelerationVelocityX = scrollOutsideX * penetrationAcceleration;\n        }\n      }\n\n      if (scrollOutsideY !== 0) {\n        var isHeadingOutwardsY = scrollOutsideY * self.__decelerationVelocityY <= self.__minDecelerationScrollTop;\n        if (isHeadingOutwardsY) {\n          self.__decelerationVelocityY += scrollOutsideY * penetrationDeceleration;\n        }\n        var isStoppedY = Math.abs(self.__decelerationVelocityY) <= self.__minVelocityToKeepDecelerating;\n        //If we're not heading outwards, or if the above statement got us below minDeceleration, go back towards bounds\n        if (!isHeadingOutwardsY || isStoppedY) {\n          self.__decelerationVelocityY = scrollOutsideY * penetrationAcceleration;\n        }\n      }\n    }\n  },\n\n\n  /**\n   * calculate the distance between two touches\n   * @param   {Touch}     touch1\n   * @param   {Touch}     touch2\n   * @returns {Number}    distance\n   */\n  __getDistance: function getDistance(touch1, touch2) {\n    var x = touch2.pageX - touch1.pageX,\n    y = touch2.pageY - touch1.pageY;\n    return Math.sqrt((x*x) + (y*y));\n  },\n\n\n  /**\n   * calculate the scale factor between two touchLists (fingers)\n   * no scale is 1, and goes down to 0 when pinched together, and bigger when pinched out\n   * @param   {Array}     start\n   * @param   {Array}     end\n   * @returns {Number}    scale\n   */\n  __getScale: function getScale(start, end) {\n\n    var self = this;\n\n    // need two fingers...\n    if(start.length >= 2 && end.length >= 2) {\n      return self.__getDistance(end[0], end[1]) /\n        self.__getDistance(start[0], start[1]);\n    }\n    return 1;\n  }\n});\n\nionic.scroll = {\n  isScrolling: false,\n  lastTop: 0\n};\n\n})(ionic);\n\n(function(ionic) {\n'use strict';\n\n  ionic.views.HeaderBar = ionic.views.View.inherit({\n    initialize: function(opts) {\n      this.el = opts.el;\n\n      ionic.extend(this, {\n        alignTitle: 'center'\n      }, opts);\n\n      this.align();\n    },\n\n    align: function(align) {\n\n      align || (align = this.alignTitle);\n\n      // Find the titleEl element\n      var titleEl = this.el.querySelector('.title');\n      if(!titleEl) {\n        return;\n      }\n\n      var self = this;\n      //We have to rAF here so all of the elements have time to initialize\n      ionic.requestAnimationFrame(function() {\n        var i, c, childSize;\n        var childNodes = self.el.childNodes;\n        var leftWidth = 0;\n        var rightWidth = 0;\n        var isCountingRightWidth = false;\n\n        // Compute how wide the left children are\n        // Skip all titles (there may still be two titles, one leaving the dom)\n        // Once we encounter a titleEl, realize we are now counting the right-buttons, not left\n        for(i = 0; i < childNodes.length; i++) {\n          c = childNodes[i];\n          if (c.tagName && c.tagName.toLowerCase() == 'h1') {\n            isCountingRightWidth = true;\n            continue;\n          }\n\n          childSize = null;\n          if(c.nodeType == 3) {\n            var bounds = ionic.DomUtil.getTextBounds(c);\n            if(bounds) {\n              childSize = bounds.width;\n            }\n          } else if(c.nodeType == 1) {\n            childSize = c.offsetWidth;\n          }\n          if(childSize) {\n            if (isCountingRightWidth) {\n              rightWidth += childSize;\n            } else {\n              leftWidth += childSize;\n            }\n          }\n        }\n\n        var margin = Math.max(leftWidth, rightWidth) + 10;\n\n        //Reset left and right before setting again\n        titleEl.style.left = titleEl.style.right = '';\n\n        // Size and align the header titleEl based on the sizes of the left and\n        // right children, and the desired alignment mode\n        if(align == 'center') {\n          if(margin > 10) {\n            titleEl.style.left = margin + 'px';\n            titleEl.style.right = margin + 'px';\n          }\n          if(titleEl.offsetWidth < titleEl.scrollWidth) {\n            if(rightWidth > 0) {\n              titleEl.style.right = (rightWidth + 5) + 'px';\n            }\n          }\n        } else if(align == 'left') {\n          titleEl.classList.add('title-left');\n          if(leftWidth > 0) {\n            titleEl.style.left = (leftWidth + 15) + 'px';\n          }\n        } else if(align == 'right') {\n          titleEl.classList.add('title-right');\n          if(rightWidth > 0) {\n            titleEl.style.right = (rightWidth + 15) + 'px';\n          }\n        }\n      });\n    }\n  });\n\n})(ionic);\n\n(function(ionic) {\n'use strict';\n\n  var ITEM_CLASS = 'item';\n  var ITEM_CONTENT_CLASS = 'item-content';\n  var ITEM_SLIDING_CLASS = 'item-sliding';\n  var ITEM_OPTIONS_CLASS = 'item-options';\n  var ITEM_PLACEHOLDER_CLASS = 'item-placeholder';\n  var ITEM_REORDERING_CLASS = 'item-reordering';\n  var ITEM_REORDER_BTN_CLASS = 'item-reorder';\n\n  var DragOp = function() {};\n  DragOp.prototype = {\n    start: function(e) {\n    },\n    drag: function(e) {\n    },\n    end: function(e) {\n    },\n    isSameItem: function(item) {\n      return false;\n    }\n  };\n\n  var SlideDrag = function(opts) {\n    this.dragThresholdX = opts.dragThresholdX || 10;\n    this.el = opts.el;\n    this.canSwipe = opts.canSwipe;\n  };\n\n  SlideDrag.prototype = new DragOp();\n\n  SlideDrag.prototype.start = function(e) {\n    var content, buttons, offsetX, buttonsWidth;\n\n    if (!this.canSwipe()) {\n      return;\n    }\n\n    if(e.target.classList.contains(ITEM_CONTENT_CLASS)) {\n      content = e.target;\n    } else if(e.target.classList.contains(ITEM_CLASS)) {\n      content = e.target.querySelector('.' + ITEM_CONTENT_CLASS);\n    } else {\n      content = ionic.DomUtil.getParentWithClass(e.target, ITEM_CONTENT_CLASS);\n    }\n\n    // If we don't have a content area as one of our children (or ourselves), skip\n    if(!content) {\n      return;\n    }\n\n    // Make sure we aren't animating as we slide\n    content.classList.remove(ITEM_SLIDING_CLASS);\n\n    // Grab the starting X point for the item (for example, so we can tell whether it is open or closed to start)\n    offsetX = parseFloat(content.style[ionic.CSS.TRANSFORM].replace('translate3d(', '').split(',')[0]) || 0;\n\n    // Grab the buttons\n    buttons = content.parentNode.querySelector('.' + ITEM_OPTIONS_CLASS);\n    if(!buttons) {\n      return;\n    }\n    buttons.classList.remove('invisible');\n\n    buttonsWidth = buttons.offsetWidth;\n\n    this._currentDrag = {\n      buttons: buttons,\n      buttonsWidth: buttonsWidth,\n      content: content,\n      startOffsetX: offsetX\n    };\n  };\n\n  /**\n   * Check if this is the same item that was previously dragged.\n   */\n  SlideDrag.prototype.isSameItem = function(op) {\n    if(op._lastDrag && this._currentDrag) {\n      return this._currentDrag.content == op._lastDrag.content;\n    }\n    return false;\n  };\n\n  SlideDrag.prototype.clean = function(e) {\n    var lastDrag = this._lastDrag;\n\n    if(!lastDrag) return;\n\n    lastDrag.content.style[ionic.CSS.TRANSITION] = '';\n    lastDrag.content.style[ionic.CSS.TRANSFORM] = '';\n    ionic.requestAnimationFrame(function() {\n      setTimeout(function() {\n        lastDrag.buttons && lastDrag.buttons.classList.add('invisible');\n      }, 250);\n    });\n  };\n\n  SlideDrag.prototype.drag = ionic.animationFrameThrottle(function(e) {\n    var buttonsWidth;\n\n    // We really aren't dragging\n    if(!this._currentDrag) {\n      return;\n    }\n\n    // Check if we should start dragging. Check if we've dragged past the threshold,\n    // or we are starting from the open state.\n    if(!this._isDragging &&\n        ((Math.abs(e.gesture.deltaX) > this.dragThresholdX) ||\n        (Math.abs(this._currentDrag.startOffsetX) > 0)))\n    {\n      this._isDragging = true;\n    }\n\n    if(this._isDragging) {\n      buttonsWidth = this._currentDrag.buttonsWidth;\n\n      // Grab the new X point, capping it at zero\n      var newX = Math.min(0, this._currentDrag.startOffsetX + e.gesture.deltaX);\n\n      // If the new X position is past the buttons, we need to slow down the drag (rubber band style)\n      if(newX < -buttonsWidth) {\n        // Calculate the new X position, capped at the top of the buttons\n        newX = Math.min(-buttonsWidth, -buttonsWidth + (((e.gesture.deltaX + buttonsWidth) * 0.4)));\n      }\n\n      this._currentDrag.content.style[ionic.CSS.TRANSFORM] = 'translate3d(' + newX + 'px, 0, 0)';\n      this._currentDrag.content.style[ionic.CSS.TRANSITION] = 'none';\n    }\n  });\n\n  SlideDrag.prototype.end = function(e, doneCallback) {\n    var _this = this;\n\n    // There is no drag, just end immediately\n    if(!this._currentDrag) {\n      doneCallback && doneCallback();\n      return;\n    }\n\n    // If we are currently dragging, we want to snap back into place\n    // The final resting point X will be the width of the exposed buttons\n    var restingPoint = -this._currentDrag.buttonsWidth;\n\n    // Check if the drag didn't clear the buttons mid-point\n    // and we aren't moving fast enough to swipe open\n    if(e.gesture.deltaX > -(this._currentDrag.buttonsWidth/2)) {\n\n      // If we are going left but too slow, or going right, go back to resting\n      if(e.gesture.direction == \"left\" && Math.abs(e.gesture.velocityX) < 0.3) {\n        restingPoint = 0;\n      } else if(e.gesture.direction == \"right\") {\n        restingPoint = 0;\n      }\n\n    }\n\n    ionic.requestAnimationFrame(function() {\n      if(restingPoint === 0) {\n        _this._currentDrag.content.style[ionic.CSS.TRANSFORM] = '';\n        var buttons = _this._currentDrag.buttons;\n        setTimeout(function() {\n          buttons && buttons.classList.add('invisible');\n        }, 250);\n      } else {\n        _this._currentDrag.content.style[ionic.CSS.TRANSFORM] = 'translate3d(' + restingPoint + 'px, 0, 0)';\n      }\n      _this._currentDrag.content.style[ionic.CSS.TRANSITION] = '';\n\n\n      // Kill the current drag\n      _this._lastDrag = _this._currentDrag;\n      _this._currentDrag = null;\n\n      // We are done, notify caller\n      doneCallback && doneCallback();\n    });\n  };\n\n  var ReorderDrag = function(opts) {\n    this.dragThresholdY = opts.dragThresholdY || 0;\n    this.onReorder = opts.onReorder;\n    this.listEl = opts.listEl;\n    this.el = opts.el;\n    this.scrollEl = opts.scrollEl;\n    this.scrollView = opts.scrollView;\n    // Get the True Top of the list el http://www.quirksmode.org/js/findpos.html\n    this.listElTrueTop = 0;\n    if (this.listEl.offsetParent) {\n      var obj = this.listEl;\n      do {\n        this.listElTrueTop += obj.offsetTop;\n        obj = obj.offsetParent;\n      } while (obj);\n    }\n  };\n\n  ReorderDrag.prototype = new DragOp();\n\n  ReorderDrag.prototype._moveElement = function(e) {\n    var y = e.gesture.center.pageY +\n      this.scrollView.getValues().top -\n      (this._currentDrag.elementHeight / 2) -\n      this.listElTrueTop;\n    this.el.style[ionic.CSS.TRANSFORM] = 'translate3d(0, '+y+'px, 0)';\n  };\n\n  ReorderDrag.prototype.start = function(e) {\n    var content;\n\n    var startIndex = ionic.DomUtil.getChildIndex(this.el, this.el.nodeName.toLowerCase());\n    var elementHeight = this.el.scrollHeight;\n    var placeholder = this.el.cloneNode(true);\n\n    placeholder.classList.add(ITEM_PLACEHOLDER_CLASS);\n\n    this.el.parentNode.insertBefore(placeholder, this.el);\n    this.el.classList.add(ITEM_REORDERING_CLASS);\n\n    this._currentDrag = {\n      elementHeight: elementHeight,\n      startIndex: startIndex,\n      placeholder: placeholder,\n      scrollHeight: scroll,\n      list: placeholder.parentNode\n    };\n\n    this._moveElement(e);\n  };\n\n  ReorderDrag.prototype.drag = ionic.animationFrameThrottle(function(e) {\n    // We really aren't dragging\n    var self = this;\n    if(!this._currentDrag) {\n      return;\n    }\n\n    var scrollY = 0;\n    var pageY = e.gesture.center.pageY;\n    var offset = this.listElTrueTop;\n\n    //If we have a scrollView, check scroll boundaries for dragged element and scroll if necessary\n    if (this.scrollView) {\n\n      var container = this.scrollView.__container;\n      scrollY = this.scrollView.getValues().top;\n\n      var containerTop = container.offsetTop;\n      var pixelsPastTop = containerTop - pageY + this._currentDrag.elementHeight/2;\n      var pixelsPastBottom = pageY + this._currentDrag.elementHeight/2 - containerTop - container.offsetHeight;\n\n      if (e.gesture.deltaY < 0 && pixelsPastTop > 0 && scrollY > 0) {\n        this.scrollView.scrollBy(null, -pixelsPastTop);\n        //Trigger another drag so the scrolling keeps going\n        ionic.requestAnimationFrame(function() {\n          self.drag(e);\n        });\n      }\n      if (e.gesture.deltaY > 0 && pixelsPastBottom > 0) {\n        if (scrollY < this.scrollView.getScrollMax().top) {\n          this.scrollView.scrollBy(null, pixelsPastBottom);\n          //Trigger another drag so the scrolling keeps going\n          ionic.requestAnimationFrame(function() {\n            self.drag(e);\n          });\n        }\n      }\n    }\n\n    // Check if we should start dragging. Check if we've dragged past the threshold,\n    // or we are starting from the open state.\n    if(!this._isDragging && Math.abs(e.gesture.deltaY) > this.dragThresholdY) {\n      this._isDragging = true;\n    }\n\n    if(this._isDragging) {\n      this._moveElement(e);\n\n      this._currentDrag.currentY = scrollY + pageY - offset;\n\n      // this._reorderItems();\n    }\n  });\n\n  // When an item is dragged, we need to reorder any items for sorting purposes\n  ReorderDrag.prototype._getReorderIndex = function() {\n    var self = this;\n    var placeholder = this._currentDrag.placeholder;\n    var siblings = Array.prototype.slice.call(this._currentDrag.placeholder.parentNode.children)\n      .filter(function(el) {\n        return el.nodeName === self.el.nodeName && el !== self.el;\n      });\n\n    var dragOffsetTop = this._currentDrag.currentY;\n    var el;\n    for (var i = 0, len = siblings.length; i < len; i++) {\n      el = siblings[i];\n      if (i === len - 1) {\n        if (dragOffsetTop > el.offsetTop) {\n          return i;\n        }\n      } else if (i === 0) {\n        if (dragOffsetTop < el.offsetTop + el.offsetHeight) {\n          return i;\n        }\n      } else if (dragOffsetTop > el.offsetTop - el.offsetHeight / 2 &&\n                 dragOffsetTop < el.offsetTop + el.offsetHeight * 1.5) {\n        return i;\n      }\n    }\n    return this._currentDrag.startIndex;\n  };\n\n  ReorderDrag.prototype.end = function(e, doneCallback) {\n    if(!this._currentDrag) {\n      doneCallback && doneCallback();\n      return;\n    }\n\n    var placeholder = this._currentDrag.placeholder;\n    var finalIndex = this._getReorderIndex();\n\n    // Reposition the element\n    this.el.classList.remove(ITEM_REORDERING_CLASS);\n    this.el.style[ionic.CSS.TRANSFORM] = '';\n\n    placeholder.parentNode.insertBefore(this.el, placeholder);\n    placeholder.parentNode.removeChild(placeholder);\n\n    this.onReorder && this.onReorder(this.el, this._currentDrag.startIndex, finalIndex);\n\n    this._currentDrag = null;\n    doneCallback && doneCallback();\n  };\n\n\n\n  /**\n   * The ListView handles a list of items. It will process drag animations, edit mode,\n   * and other operations that are common on mobile lists or table views.\n   */\n  ionic.views.ListView = ionic.views.View.inherit({\n    initialize: function(opts) {\n      var _this = this;\n\n      opts = ionic.extend({\n        onReorder: function(el, oldIndex, newIndex) {},\n        virtualRemoveThreshold: -200,\n        virtualAddThreshold: 200,\n        canSwipe: function() {\n          return true;\n        }\n      }, opts);\n\n      ionic.extend(this, opts);\n\n      if(!this.itemHeight && this.listEl) {\n        this.itemHeight = this.listEl.children[0] && parseInt(this.listEl.children[0].style.height, 10);\n      }\n\n      //ionic.views.ListView.__super__.initialize.call(this, opts);\n\n      this.onRefresh = opts.onRefresh || function() {};\n      this.onRefreshOpening = opts.onRefreshOpening || function() {};\n      this.onRefreshHolding = opts.onRefreshHolding || function() {};\n\n      window.ionic.onGesture('release', function(e) {\n        _this._handleEndDrag(e);\n      }, this.el);\n\n      window.ionic.onGesture('drag', function(e) {\n        _this._handleDrag(e);\n      }, this.el);\n      // Start the drag states\n      this._initDrag();\n    },\n    /**\n     * Called to tell the list to stop refreshing. This is useful\n     * if you are refreshing the list and are done with refreshing.\n     */\n    stopRefreshing: function() {\n      var refresher = this.el.querySelector('.list-refresher');\n      refresher.style.height = '0px';\n    },\n\n    /**\n     * If we scrolled and have virtual mode enabled, compute the window\n     * of active elements in order to figure out the viewport to render.\n     */\n    didScroll: function(e) {\n      if(this.isVirtual) {\n        var itemHeight = this.itemHeight;\n\n        // TODO: This would be inaccurate if we are windowed\n        var totalItems = this.listEl.children.length;\n\n        // Grab the total height of the list\n        var scrollHeight = e.target.scrollHeight;\n\n        // Get the viewport height\n        var viewportHeight = this.el.parentNode.offsetHeight;\n\n        // scrollTop is the current scroll position\n        var scrollTop = e.scrollTop;\n\n        // High water is the pixel position of the first element to include (everything before\n        // that will be removed)\n        var highWater = Math.max(0, e.scrollTop + this.virtualRemoveThreshold);\n\n        // Low water is the pixel position of the last element to include (everything after\n        // that will be removed)\n        var lowWater = Math.min(scrollHeight, Math.abs(e.scrollTop) + viewportHeight + this.virtualAddThreshold);\n\n        // Compute how many items per viewport size can show\n        var itemsPerViewport = Math.floor((lowWater - highWater) / itemHeight);\n\n        // Get the first and last elements in the list based on how many can fit\n        // between the pixel range of lowWater and highWater\n        var first = parseInt(Math.abs(highWater / itemHeight), 10);\n        var last = parseInt(Math.abs(lowWater / itemHeight), 10);\n\n        // Get the items we need to remove\n        this._virtualItemsToRemove = Array.prototype.slice.call(this.listEl.children, 0, first);\n\n        // Grab the nodes we will be showing\n        var nodes = Array.prototype.slice.call(this.listEl.children, first, first + itemsPerViewport);\n\n        this.renderViewport && this.renderViewport(highWater, lowWater, first, last);\n      }\n    },\n\n    didStopScrolling: function(e) {\n      if(this.isVirtual) {\n        for(var i = 0; i < this._virtualItemsToRemove.length; i++) {\n          var el = this._virtualItemsToRemove[i];\n          //el.parentNode.removeChild(el);\n          this.didHideItem && this.didHideItem(i);\n        }\n        // Once scrolling stops, check if we need to remove old items\n\n      }\n    },\n\n    /**\n     * Clear any active drag effects on the list.\n     */\n    clearDragEffects: function() {\n      if(this._lastDragOp) {\n        this._lastDragOp.clean && this._lastDragOp.clean();\n        this._lastDragOp = null;\n      }\n    },\n\n    _initDrag: function() {\n      //ionic.views.ListView.__super__._initDrag.call(this);\n\n      // Store the last one\n      this._lastDragOp = this._dragOp;\n\n      this._dragOp = null;\n    },\n\n    // Return the list item from the given target\n    _getItem: function(target) {\n      while(target) {\n        if(target.classList && target.classList.contains(ITEM_CLASS)) {\n          return target;\n        }\n        target = target.parentNode;\n      }\n      return null;\n    },\n\n\n    _startDrag: function(e) {\n      var _this = this;\n\n      var didStart = false;\n\n      this._isDragging = false;\n\n      var lastDragOp = this._lastDragOp;\n      var item;\n\n      // Check if this is a reorder drag\n      if(ionic.DomUtil.getParentOrSelfWithClass(e.target, ITEM_REORDER_BTN_CLASS) && (e.gesture.direction == 'up' || e.gesture.direction == 'down')) {\n        item = this._getItem(e.target);\n\n        if(item) {\n          this._dragOp = new ReorderDrag({\n            listEl: this.el,\n            el: item,\n            scrollEl: this.scrollEl,\n            scrollView: this.scrollView,\n            onReorder: function(el, start, end) {\n              _this.onReorder && _this.onReorder(el, start, end);\n            }\n          });\n          this._dragOp.start(e);\n          e.preventDefault();\n        }\n      }\n\n      // Or check if this is a swipe to the side drag\n      else if(!this._didDragUpOrDown && (e.gesture.direction == 'left' || e.gesture.direction == 'right') && Math.abs(e.gesture.deltaX) > 5) {\n\n        // Make sure this is an item with buttons\n        item = this._getItem(e.target);\n        if(item && item.querySelector('.item-options')) {\n          this._dragOp = new SlideDrag({ el: this.el, canSwipe: this.canSwipe });\n          this._dragOp.start(e);\n          e.preventDefault();\n        }\n      }\n\n      // If we had a last drag operation and this is a new one on a different item, clean that last one\n      if(lastDragOp && this._dragOp && !this._dragOp.isSameItem(lastDragOp) && e.defaultPrevented) {\n        lastDragOp.clean && lastDragOp.clean();\n      }\n    },\n\n\n    _handleEndDrag: function(e) {\n      var _this = this;\n\n      this._didDragUpOrDown = false;\n\n      if(!this._dragOp) {\n        //ionic.views.ListView.__super__._handleEndDrag.call(this, e);\n        return;\n      }\n\n      this._dragOp.end(e, function() {\n        _this._initDrag();\n      });\n    },\n\n    /**\n     * Process the drag event to move the item to the left or right.\n     */\n    _handleDrag: function(e) {\n      var _this = this, content, buttons;\n\n      if(Math.abs(e.gesture.deltaY) > 5) {\n        this._didDragUpOrDown = true;\n      }\n\n      // If we get a drag event, make sure we aren't in another drag, then check if we should\n      // start one\n      if(!this.isDragging && !this._dragOp) {\n        this._startDrag(e);\n      }\n\n      // No drag still, pass it up\n      if(!this._dragOp) {\n        //ionic.views.ListView.__super__._handleDrag.call(this, e);\n        return;\n      }\n\n      e.gesture.srcEvent.preventDefault();\n      this._dragOp.drag(e);\n    }\n\n  });\n\n})(ionic);\n\n(function(ionic) {\n'use strict';\n\n  ionic.views.Modal = ionic.views.View.inherit({\n    initialize: function(opts) {\n      opts = ionic.extend({\n        focusFirstInput: false,\n        unfocusOnHide: true,\n        focusFirstDelay: 600,\n        backdropClickToClose: true,\n        hardwareBackButtonClose: true,\n      }, opts);\n\n      ionic.extend(this, opts);\n\n      this.el = opts.el;\n    },\n    show: function() {\n      var self = this;\n\n      if(self.focusFirstInput) {\n        // Let any animations run first\n        window.setTimeout(function() {\n          var input = self.el.querySelector('input, textarea');\n          input && input.focus && input.focus();\n        }, self.focusFirstDelay);\n      }\n    },\n    hide: function() {\n      // Unfocus all elements\n      if(this.unfocusOnHide) {\n        var inputs = this.el.querySelectorAll('input, textarea');\n        // Let any animations run first\n        window.setTimeout(function() {\n          for(var i = 0; i < inputs.length; i++) {\n            inputs[i].blur && inputs[i].blur();\n          }\n        });\n      }\n    }\n  });\n\n})(ionic);\n\n(function(ionic) {\n'use strict';\n\n  /**\n   * The side menu view handles one of the side menu's in a Side Menu Controller\n   * configuration.\n   * It takes a DOM reference to that side menu element.\n   */\n  ionic.views.SideMenu = ionic.views.View.inherit({\n    initialize: function(opts) {\n      this.el = opts.el;\n      this.isEnabled = (typeof opts.isEnabled === 'undefined') ? true : opts.isEnabled;\n      this.setWidth(opts.width);\n    },\n\n    getFullWidth: function() {\n      return this.width;\n    },\n    setWidth: function(width) {\n      this.width = width;\n      this.el.style.width = width + 'px';\n    },\n    setIsEnabled: function(isEnabled) {\n      this.isEnabled = isEnabled;\n    },\n    bringUp: function() {\n      if(this.el.style.zIndex !== '0') {\n        this.el.style.zIndex = '0';\n      }\n    },\n    pushDown: function() {\n      if(this.el.style.zIndex !== '-1') {\n        this.el.style.zIndex = '-1';\n      }\n    }\n  });\n\n  ionic.views.SideMenuContent = ionic.views.View.inherit({\n    initialize: function(opts) {\n      var _this = this;\n\n      ionic.extend(this, {\n        animationClass: 'menu-animated',\n        onDrag: function(e) {},\n        onEndDrag: function(e) {},\n      }, opts);\n\n      ionic.onGesture('drag', ionic.proxy(this._onDrag, this), this.el);\n      ionic.onGesture('release', ionic.proxy(this._onEndDrag, this), this.el);\n    },\n    _onDrag: function(e) {\n      this.onDrag && this.onDrag(e);\n    },\n    _onEndDrag: function(e) {\n      this.onEndDrag && this.onEndDrag(e);\n    },\n    disableAnimation: function() {\n      this.el.classList.remove(this.animationClass);\n    },\n    enableAnimation: function() {\n      this.el.classList.add(this.animationClass);\n    },\n    getTranslateX: function() {\n      return parseFloat(this.el.style[ionic.CSS.TRANSFORM].replace('translate3d(', '').split(',')[0]);\n    },\n    setTranslateX: ionic.animationFrameThrottle(function(x) {\n      this.el.style[ionic.CSS.TRANSFORM] = 'translate3d(' + x + 'px, 0, 0)';\n    })\n  });\n\n})(ionic);\n\n/*\n * Adapted from Swipe.js 2.0\n *\n * Brad Birdsall\n * Copyright 2013, MIT License\n *\n*/\n\n(function(ionic) {\n'use strict';\n\nionic.views.Slider = ionic.views.View.inherit({\n  initialize: function (options) {\n    var slider = this;\n\n    // utilities\n    var noop = function() {}; // simple no operation function\n    var offloadFn = function(fn) { setTimeout(fn || noop, 0); }; // offload a functions execution\n\n    // check browser capabilities\n    var browser = {\n      addEventListener: !!window.addEventListener,\n      touch: ('ontouchstart' in window) || window.DocumentTouch && document instanceof DocumentTouch,\n      transitions: (function(temp) {\n        var props = ['transitionProperty', 'WebkitTransition', 'MozTransition', 'OTransition', 'msTransition'];\n        for ( var i in props ) if (temp.style[ props[i] ] !== undefined) return true;\n        return false;\n      })(document.createElement('swipe'))\n    };\n\n\n    var container = options.el;\n\n    // quit if no root element\n    if (!container) return;\n    var element = container.children[0];\n    var slides, slidePos, width, length;\n    options = options || {};\n    var index = parseInt(options.startSlide, 10) || 0;\n    var speed = options.speed || 300;\n    options.continuous = options.continuous !== undefined ? options.continuous : true;\n\n    function setup() {\n\n      // cache slides\n      slides = element.children;\n      length = slides.length;\n\n      // set continuous to false if only one slide\n      if (slides.length < 2) options.continuous = false;\n\n      //special case if two slides\n      if (browser.transitions && options.continuous && slides.length < 3) {\n        element.appendChild(slides[0].cloneNode(true));\n        element.appendChild(element.children[1].cloneNode(true));\n        slides = element.children;\n      }\n\n      // create an array to store current positions of each slide\n      slidePos = new Array(slides.length);\n\n      // determine width of each slide\n      width = container.offsetWidth || container.getBoundingClientRect().width;\n\n      element.style.width = (slides.length * width) + 'px';\n\n      // stack elements\n      var pos = slides.length;\n      while(pos--) {\n\n        var slide = slides[pos];\n\n        slide.style.width = width + 'px';\n        slide.setAttribute('data-index', pos);\n\n        if (browser.transitions) {\n          slide.style.left = (pos * -width) + 'px';\n          move(pos, index > pos ? -width : (index < pos ? width : 0), 0);\n        }\n\n      }\n\n      // reposition elements before and after index\n      if (options.continuous && browser.transitions) {\n        move(circle(index-1), -width, 0);\n        move(circle(index+1), width, 0);\n      }\n\n      if (!browser.transitions) element.style.left = (index * -width) + 'px';\n\n      container.style.visibility = 'visible';\n\n      options.slidesChanged && options.slidesChanged();\n    }\n\n    function prev() {\n\n      if (options.continuous) slide(index-1);\n      else if (index) slide(index-1);\n\n    }\n\n    function next() {\n\n      if (options.continuous) slide(index+1);\n      else if (index < slides.length - 1) slide(index+1);\n\n    }\n\n    function circle(index) {\n\n      // a simple positive modulo using slides.length\n      return (slides.length + (index % slides.length)) % slides.length;\n\n    }\n\n    function slide(to, slideSpeed) {\n\n      // do nothing if already on requested slide\n      if (index == to) return;\n\n      if (browser.transitions) {\n\n        var direction = Math.abs(index-to) / (index-to); // 1: backward, -1: forward\n\n        // get the actual position of the slide\n        if (options.continuous) {\n          var natural_direction = direction;\n          direction = -slidePos[circle(to)] / width;\n\n          // if going forward but to < index, use to = slides.length + to\n          // if going backward but to > index, use to = -slides.length + to\n          if (direction !== natural_direction) to =  -direction * slides.length + to;\n\n        }\n\n        var diff = Math.abs(index-to) - 1;\n\n        // move all the slides between index and to in the right direction\n        while (diff--) move( circle((to > index ? to : index) - diff - 1), width * direction, 0);\n\n        to = circle(to);\n\n        move(index, width * direction, slideSpeed || speed);\n        move(to, 0, slideSpeed || speed);\n\n        if (options.continuous) move(circle(to - direction), -(width * direction), 0); // we need to get the next in place\n\n      } else {\n\n        to = circle(to);\n        animate(index * -width, to * -width, slideSpeed || speed);\n        //no fallback for a circular continuous if the browser does not accept transitions\n      }\n\n      index = to;\n      offloadFn(options.callback && options.callback(index, slides[index]));\n    }\n\n    function move(index, dist, speed) {\n\n      translate(index, dist, speed);\n      slidePos[index] = dist;\n\n    }\n\n    function translate(index, dist, speed) {\n\n      var slide = slides[index];\n      var style = slide && slide.style;\n\n      if (!style) return;\n\n      style.webkitTransitionDuration =\n      style.MozTransitionDuration =\n      style.msTransitionDuration =\n      style.OTransitionDuration =\n      style.transitionDuration = speed + 'ms';\n\n      style.webkitTransform = 'translate(' + dist + 'px,0)' + 'translateZ(0)';\n      style.msTransform =\n      style.MozTransform =\n      style.OTransform = 'translateX(' + dist + 'px)';\n\n    }\n\n    function animate(from, to, speed) {\n\n      // if not an animation, just reposition\n      if (!speed) {\n\n        element.style.left = to + 'px';\n        return;\n\n      }\n\n      var start = +new Date();\n\n      var timer = setInterval(function() {\n\n        var timeElap = +new Date() - start;\n\n        if (timeElap > speed) {\n\n          element.style.left = to + 'px';\n\n          if (delay) begin();\n\n          options.transitionEnd && options.transitionEnd.call(event, index, slides[index]);\n\n          clearInterval(timer);\n          return;\n\n        }\n\n        element.style.left = (( (to - from) * (Math.floor((timeElap / speed) * 100) / 100) ) + from) + 'px';\n\n      }, 4);\n\n    }\n\n    // setup auto slideshow\n    var delay = options.auto || 0;\n    var interval;\n\n    function begin() {\n\n      interval = setTimeout(next, delay);\n\n    }\n\n    function stop() {\n\n      delay = options.auto || 0;\n      clearTimeout(interval);\n\n    }\n\n\n    // setup initial vars\n    var start = {};\n    var delta = {};\n    var isScrolling;\n\n    // setup event capturing\n    var events = {\n\n      handleEvent: function(event) {\n        if(event.type == 'mousedown' || event.type == 'mouseup' || event.type == 'mousemove') {\n          event.touches = [{\n            pageX: event.pageX,\n            pageY: event.pageY\n          }];\n        }\n\n        switch (event.type) {\n          case 'mousedown': this.start(event); break;\n          case 'touchstart': this.start(event); break;\n          case 'touchmove': this.touchmove(event); break;\n          case 'mousemove': this.touchmove(event); break;\n          case 'touchend': offloadFn(this.end(event)); break;\n          case 'mouseup': offloadFn(this.end(event)); break;\n          case 'webkitTransitionEnd':\n          case 'msTransitionEnd':\n          case 'oTransitionEnd':\n          case 'otransitionend':\n          case 'transitionend': offloadFn(this.transitionEnd(event)); break;\n          case 'resize': offloadFn(setup); break;\n        }\n\n        if (options.stopPropagation) event.stopPropagation();\n\n      },\n      start: function(event) {\n\n        var touches = event.touches[0];\n\n        // measure start values\n        start = {\n\n          // get initial touch coords\n          x: touches.pageX,\n          y: touches.pageY,\n\n          // store time to determine touch duration\n          time: +new Date()\n\n        };\n\n        // used for testing first move event\n        isScrolling = undefined;\n\n        // reset delta and end measurements\n        delta = {};\n\n        // attach touchmove and touchend listeners\n        if(browser.touch) {\n          element.addEventListener('touchmove', this, false);\n          element.addEventListener('touchend', this, false);\n        } else {\n          element.addEventListener('mousemove', this, false);\n          element.addEventListener('mouseup', this, false);\n          document.addEventListener('mouseup', this, false);\n        }\n      },\n      touchmove: function(event) {\n\n        // ensure swiping with one touch and not pinching\n        // ensure sliding is enabled\n        if (event.touches.length > 1 ||\n            event.scale && event.scale !== 1 ||\n            slider.slideIsDisabled) {\n          return;\n        }\n\n        if (options.disableScroll) event.preventDefault();\n\n        var touches = event.touches[0];\n\n        // measure change in x and y\n        delta = {\n          x: touches.pageX - start.x,\n          y: touches.pageY - start.y\n        };\n\n        // determine if scrolling test has run - one time test\n        if ( typeof isScrolling == 'undefined') {\n          isScrolling = !!( isScrolling || Math.abs(delta.x) < Math.abs(delta.y) );\n        }\n\n        // if user is not trying to scroll vertically\n        if (!isScrolling) {\n\n          // prevent native scrolling\n          event.preventDefault();\n\n          // stop slideshow\n          stop();\n\n          // increase resistance if first or last slide\n          if (options.continuous) { // we don't add resistance at the end\n\n            translate(circle(index-1), delta.x + slidePos[circle(index-1)], 0);\n            translate(index, delta.x + slidePos[index], 0);\n            translate(circle(index+1), delta.x + slidePos[circle(index+1)], 0);\n\n          } else {\n\n            delta.x =\n              delta.x /\n                ( (!index && delta.x > 0 ||         // if first slide and sliding left\n                  index == slides.length - 1 &&     // or if last slide and sliding right\n                  delta.x < 0                       // and if sliding at all\n                ) ?\n                ( Math.abs(delta.x) / width + 1 )      // determine resistance level\n                : 1 );                                 // no resistance if false\n\n            // translate 1:1\n            translate(index-1, delta.x + slidePos[index-1], 0);\n            translate(index, delta.x + slidePos[index], 0);\n            translate(index+1, delta.x + slidePos[index+1], 0);\n          }\n\n        }\n\n      },\n      end: function(event) {\n\n        // measure duration\n        var duration = +new Date() - start.time;\n\n        // determine if slide attempt triggers next/prev slide\n        var isValidSlide =\n              Number(duration) < 250 &&         // if slide duration is less than 250ms\n              Math.abs(delta.x) > 20 ||         // and if slide amt is greater than 20px\n              Math.abs(delta.x) > width/2;      // or if slide amt is greater than half the width\n\n        // determine if slide attempt is past start and end\n        var isPastBounds = (!index && delta.x > 0) ||      // if first slide and slide amt is greater than 0\n              (index == slides.length - 1 && delta.x < 0); // or if last slide and slide amt is less than 0\n\n        if (options.continuous) isPastBounds = false;\n\n        // determine direction of swipe (true:right, false:left)\n        var direction = delta.x < 0;\n\n        // if not scrolling vertically\n        if (!isScrolling) {\n\n          if (isValidSlide && !isPastBounds) {\n\n            if (direction) {\n\n              if (options.continuous) { // we need to get the next in this direction in place\n\n                move(circle(index-1), -width, 0);\n                move(circle(index+2), width, 0);\n\n              } else {\n                move(index-1, -width, 0);\n              }\n\n              move(index, slidePos[index]-width, speed);\n              move(circle(index+1), slidePos[circle(index+1)]-width, speed);\n              index = circle(index+1);\n\n            } else {\n              if (options.continuous) { // we need to get the next in this direction in place\n\n                move(circle(index+1), width, 0);\n                move(circle(index-2), -width, 0);\n\n              } else {\n                move(index+1, width, 0);\n              }\n\n              move(index, slidePos[index]+width, speed);\n              move(circle(index-1), slidePos[circle(index-1)]+width, speed);\n              index = circle(index-1);\n\n            }\n\n            options.callback && options.callback(index, slides[index]);\n\n          } else {\n\n            if (options.continuous) {\n\n              move(circle(index-1), -width, speed);\n              move(index, 0, speed);\n              move(circle(index+1), width, speed);\n\n            } else {\n\n              move(index-1, -width, speed);\n              move(index, 0, speed);\n              move(index+1, width, speed);\n            }\n\n          }\n\n        }\n\n        // kill touchmove and touchend event listeners until touchstart called again\n        if(browser.touch) {\n          element.removeEventListener('touchmove', events, false);\n          element.removeEventListener('touchend', events, false);\n        } else {\n          element.removeEventListener('mousemove', events, false);\n          element.removeEventListener('mouseup', events, false);\n          document.removeEventListener('mouseup', events, false);\n        }\n\n      },\n      transitionEnd: function(event) {\n\n        if (parseInt(event.target.getAttribute('data-index'), 10) == index) {\n\n          if (delay) begin();\n\n          options.transitionEnd && options.transitionEnd.call(event, index, slides[index]);\n\n        }\n\n      }\n\n    };\n\n    // Public API\n    this.update = function() {\n      setTimeout(setup);\n    };\n    this.setup = function() {\n      setup();\n    };\n\n    this.enableSlide = function(shouldEnable) {\n      if (arguments.length) {\n        this.slideIsDisabled = !shouldEnable;\n      }\n      return !this.slideIsDisabled;\n    },\n    this.slide = function(to, speed) {\n      // cancel slideshow\n      stop();\n\n      slide(to, speed);\n    };\n\n    this.prev = this.previous = function() {\n      // cancel slideshow\n      stop();\n\n      prev();\n    };\n\n    this.next = function() {\n      // cancel slideshow\n      stop();\n\n      next();\n    };\n\n    this.stop = function() {\n      // cancel slideshow\n      stop();\n    };\n\n    this.start = function() {\n      begin();\n    };\n\n    this.currentIndex = function() {\n      // return current index position\n      return index;\n    };\n\n    this.slidesCount = function() {\n      // return total number of slides\n      return length;\n    };\n\n    this.kill = function() {\n      // cancel slideshow\n      stop();\n\n      // reset element\n      element.style.width = '';\n      element.style.left = '';\n\n      // reset slides\n      var pos = slides.length;\n      while(pos--) {\n\n        var slide = slides[pos];\n        slide.style.width = '';\n        slide.style.left = '';\n\n        if (browser.transitions) translate(pos, 0, 0);\n\n      }\n\n      // removed event listeners\n      if (browser.addEventListener) {\n\n        // remove current event listeners\n        element.removeEventListener('touchstart', events, false);\n        element.removeEventListener('webkitTransitionEnd', events, false);\n        element.removeEventListener('msTransitionEnd', events, false);\n        element.removeEventListener('oTransitionEnd', events, false);\n        element.removeEventListener('otransitionend', events, false);\n        element.removeEventListener('transitionend', events, false);\n        window.removeEventListener('resize', events, false);\n\n      }\n      else {\n\n        window.onresize = null;\n\n      }\n    };\n\n    this.load = function() {\n      // trigger setup\n      setup();\n\n      // start auto slideshow if applicable\n      if (delay) begin();\n\n\n      // add event listeners\n      if (browser.addEventListener) {\n\n        // set touchstart event on element\n        if (browser.touch) {\n          element.addEventListener('touchstart', events, false);\n        } else {\n          element.addEventListener('mousedown', events, false);\n        }\n\n        if (browser.transitions) {\n          element.addEventListener('webkitTransitionEnd', events, false);\n          element.addEventListener('msTransitionEnd', events, false);\n          element.addEventListener('oTransitionEnd', events, false);\n          element.addEventListener('otransitionend', events, false);\n          element.addEventListener('transitionend', events, false);\n        }\n\n        // set resize event on window\n        window.addEventListener('resize', events, false);\n\n      } else {\n\n        window.onresize = function () { setup(); }; // to play nice with old IE\n\n      }\n    };\n\n  }\n});\n\n})(ionic);\n\n(function(ionic) {\n'use strict';\n\n  ionic.views.Toggle = ionic.views.View.inherit({\n    initialize: function(opts) {\n      var self = this;\n\n      this.el = opts.el;\n      this.checkbox = opts.checkbox;\n      this.track = opts.track;\n      this.handle = opts.handle;\n      this.openPercent = -1;\n      this.onChange = opts.onChange || function() {};\n\n      this.triggerThreshold = opts.triggerThreshold || 20;\n\n      this.dragStartHandler = function(e) {\n        self.dragStart(e);\n      };\n      this.dragHandler = function(e) {\n        self.drag(e);\n      };\n      this.holdHandler = function(e) {\n        self.hold(e);\n      };\n      this.releaseHandler = function(e) {\n        self.release(e);\n      };\n\n      this.dragStartGesture = ionic.onGesture('dragstart', this.dragStartHandler, this.el);\n      this.dragGesture = ionic.onGesture('drag', this.dragHandler, this.el);\n      this.dragHoldGesture = ionic.onGesture('hold', this.holdHandler, this.el);\n      this.dragReleaseGesture = ionic.onGesture('release', this.releaseHandler, this.el);\n    },\n\n    destroy: function() {\n      ionic.offGesture(this.dragStartGesture, 'dragstart', this.dragStartGesture);\n      ionic.offGesture(this.dragGesture, 'drag', this.dragGesture);\n      ionic.offGesture(this.dragHoldGesture, 'hold', this.holdHandler);\n      ionic.offGesture(this.dragReleaseGesture, 'release', this.releaseHandler);\n    },\n\n    tap: function(e) {\n      if(this.el.getAttribute('disabled') !== 'disabled') {\n        this.val( !this.checkbox.checked );\n      }\n    },\n\n    dragStart: function(e) {\n      if(this.checkbox.disabled) return;\n\n      this._dragInfo = {\n        width: this.el.offsetWidth,\n        left: this.el.offsetLeft,\n        right: this.el.offsetLeft + this.el.offsetWidth,\n        triggerX: this.el.offsetWidth / 2,\n        initialState: this.checkbox.checked\n      };\n\n      // Stop any parent dragging\n      e.gesture.srcEvent.preventDefault();\n\n      // Trigger hold styles\n      this.hold(e);\n    },\n\n    drag: function(e) {\n      var self = this;\n      if(!this._dragInfo) { return; }\n\n      // Stop any parent dragging\n      e.gesture.srcEvent.preventDefault();\n\n      ionic.requestAnimationFrame(function(amount) {\n        if (!self._dragInfo) { return; }\n\n        var slidePageLeft = self.track.offsetLeft + (self.handle.offsetWidth / 2);\n        var slidePageRight = self.track.offsetLeft + self.track.offsetWidth - (self.handle.offsetWidth / 2);\n        var dx = e.gesture.deltaX;\n\n        var px = e.gesture.touches[0].pageX - self._dragInfo.left;\n        var mx = self._dragInfo.width - self.triggerThreshold;\n\n        // The initial state was on, so \"tend towards\" on\n        if(self._dragInfo.initialState) {\n          if(px < self.triggerThreshold) {\n            self.setOpenPercent(0);\n          } else if(px > self._dragInfo.triggerX) {\n            self.setOpenPercent(100);\n          }\n        } else {\n          // The initial state was off, so \"tend towards\" off\n          if(px < self._dragInfo.triggerX) {\n            self.setOpenPercent(0);\n          } else if(px > mx) {\n            self.setOpenPercent(100);\n          }\n        }\n      });\n    },\n\n    endDrag: function(e) {\n      this._dragInfo = null;\n    },\n\n    hold: function(e) {\n      this.el.classList.add('dragging');\n    },\n    release: function(e) {\n      this.el.classList.remove('dragging');\n      this.endDrag(e);\n    },\n\n\n    setOpenPercent: function(openPercent) {\n      // only make a change if the new open percent has changed\n      if(this.openPercent < 0 || (openPercent < (this.openPercent - 3) || openPercent > (this.openPercent + 3) ) ) {\n        this.openPercent = openPercent;\n\n        if(openPercent === 0) {\n          this.val(false);\n        } else if(openPercent === 100) {\n          this.val(true);\n        } else {\n          var openPixel = Math.round( (openPercent / 100) * this.track.offsetWidth - (this.handle.offsetWidth) );\n          openPixel = (openPixel < 1 ? 0 : openPixel);\n          this.handle.style[ionic.CSS.TRANSFORM] = 'translate3d(' + openPixel + 'px,0,0)';\n        }\n      }\n    },\n\n    val: function(value) {\n      if(value === true || value === false) {\n        if(this.handle.style[ionic.CSS.TRANSFORM] !== \"\") {\n          this.handle.style[ionic.CSS.TRANSFORM] = \"\";\n        }\n        this.checkbox.checked = value;\n        this.openPercent = (value ? 100 : 0);\n        this.onChange && this.onChange();\n      }\n      return this.checkbox.checked;\n    }\n\n  });\n\n})(ionic);\n\n(function(ionic) {\n'use strict';\n  ionic.controllers.ViewController = function(options) {\n    this.initialize.apply(this, arguments);\n  };\n\n  ionic.controllers.ViewController.inherit = ionic.inherit;\n\n  ionic.extend(ionic.controllers.ViewController.prototype, {\n    initialize: function() {},\n    // Destroy this view controller, including all child views\n    destroy: function() {\n    }\n  });\n\n})(window.ionic);\n\n(function(ionic) {\n'use strict';\n\n/**\n   * The SideMenuController is a controller with a left and/or right menu that\n   * can be slid out and toggled. Seen on many an app.\n   *\n   * The right or left menu can be disabled or not used at all, if desired.\n   */\n  ionic.controllers.SideMenuController = ionic.controllers.ViewController.inherit({\n    initialize: function(options) {\n      var self = this;\n\n      this.left = options.left;\n      this.right = options.right;\n      this.content = options.content;\n      this.dragThresholdX = options.dragThresholdX || 10;\n\n      this._rightShowing = false;\n      this._leftShowing = false;\n      this._isDragging = false;\n\n      if(this.content) {\n        this.content.onDrag = function(e) {\n          self._handleDrag(e);\n        };\n\n        this.content.onEndDrag =function(e) {\n          self._endDrag(e);\n        };\n      }\n    },\n    /**\n     * Set the content view controller if not passed in the constructor options.\n     *\n     * @param {object} content\n     */\n    setContent: function(content) {\n      var self = this;\n\n      this.content = content;\n\n      this.content.onDrag = function(e) {\n        self._handleDrag(e);\n      };\n\n      this.content.endDrag = function(e) {\n        self._endDrag(e);\n      };\n    },\n\n    isOpenLeft: function() {\n      return this.getOpenAmount() > 0;\n    },\n\n    isOpenRight: function() {\n      return this.getOpenAmount() < 0;\n    },\n\n    /**\n     * Toggle the left menu to open 100%\n     */\n    toggleLeft: function(shouldOpen) {\n      var openAmount = this.getOpenAmount();\n      if (arguments.length === 0) {\n        shouldOpen = openAmount <= 0;\n      }\n      this.content.enableAnimation();\n      if(!shouldOpen) {\n        this.openPercentage(0);\n      } else {\n        this.openPercentage(100);\n      }\n    },\n\n    /**\n     * Toggle the right menu to open 100%\n     */\n    toggleRight: function(shouldOpen) {\n      var openAmount = this.getOpenAmount();\n      if (arguments.length === 0) {\n        shouldOpen = openAmount >= 0;\n      }\n      this.content.enableAnimation();\n      if(!shouldOpen) {\n        this.openPercentage(0);\n      } else {\n        this.openPercentage(-100);\n      }\n    },\n\n    /**\n     * Close all menus.\n     */\n    close: function() {\n      this.openPercentage(0);\n    },\n\n    /**\n     * @return {float} The amount the side menu is open, either positive or negative for left (positive), or right (negative)\n     */\n    getOpenAmount: function() {\n      return this.content && this.content.getTranslateX() || 0;\n    },\n\n    /**\n     * @return {float} The ratio of open amount over menu width. For example, a\n     * menu of width 100 open 50 pixels would be open 50% or a ratio of 0.5. Value is negative\n     * for right menu.\n     */\n    getOpenRatio: function() {\n      var amount = this.getOpenAmount();\n      if(amount >= 0) {\n        return amount / this.left.width;\n      }\n      return amount / this.right.width;\n    },\n\n    isOpen: function() {\n      return this.getOpenAmount() !== 0;\n    },\n\n    /**\n     * @return {float} The percentage of open amount over menu width. For example, a\n     * menu of width 100 open 50 pixels would be open 50%. Value is negative\n     * for right menu.\n     */\n    getOpenPercentage: function() {\n      return this.getOpenRatio() * 100;\n    },\n\n    /**\n     * Open the menu with a given percentage amount.\n     * @param {float} percentage The percentage (positive or negative for left/right) to open the menu.\n     */\n    openPercentage: function(percentage) {\n      var p = percentage / 100;\n\n      if(this.left && percentage >= 0) {\n        this.openAmount(this.left.width * p);\n      } else if(this.right && percentage < 0) {\n        var maxRight = this.right.width;\n        this.openAmount(this.right.width * p);\n      }\n\n      if(percentage !== 0) {\n        document.body.classList.add('menu-open');\n      } else {\n        document.body.classList.remove('menu-open');\n      }\n    },\n\n    /**\n     * Open the menu the given pixel amount.\n     * @param {float} amount the pixel amount to open the menu. Positive value for left menu,\n     * negative value for right menu (only one menu will be visible at a time).\n     */\n    openAmount: function(amount) {\n      var maxLeft = this.left && this.left.width || 0;\n      var maxRight = this.right && this.right.width || 0;\n\n      // Check if we can move to that side, depending if the left/right panel is enabled\n      if(!(this.left && this.left.isEnabled) && amount > 0) {\n        this.content.setTranslateX(0);\n        return;\n      }\n\n      if(!(this.right && this.right.isEnabled) && amount < 0) {\n        this.content.setTranslateX(0);\n        return;\n      }\n\n      if(this._leftShowing && amount > maxLeft) {\n        this.content.setTranslateX(maxLeft);\n        return;\n      }\n\n      if(this._rightShowing && amount < -maxRight) {\n        this.content.setTranslateX(-maxRight);\n        return;\n      }\n\n      this.content.setTranslateX(amount);\n\n      if(amount >= 0) {\n        this._leftShowing = true;\n        this._rightShowing = false;\n\n        if(amount > 0) {\n          // Push the z-index of the right menu down\n          this.right && this.right.pushDown && this.right.pushDown();\n          // Bring the z-index of the left menu up\n          this.left && this.left.bringUp && this.left.bringUp();\n        }\n      } else {\n        this._rightShowing = true;\n        this._leftShowing = false;\n\n        // Bring the z-index of the right menu up\n        this.right && this.right.bringUp && this.right.bringUp();\n        // Push the z-index of the left menu down\n        this.left && this.left.pushDown && this.left.pushDown();\n      }\n    },\n\n    /**\n     * Given an event object, find the final resting position of this side\n     * menu. For example, if the user \"throws\" the content to the right and\n     * releases the touch, the left menu should snap open (animated, of course).\n     *\n     * @param {Event} e the gesture event to use for snapping\n     */\n    snapToRest: function(e) {\n      // We want to animate at the end of this\n      this.content.enableAnimation();\n      this._isDragging = false;\n\n      // Check how much the panel is open after the drag, and\n      // what the drag velocity is\n      var ratio = this.getOpenRatio();\n\n      if(ratio === 0) {\n        // Just to be safe\n        this.openPercentage(0);\n        return;\n      }\n\n      var velocityThreshold = 0.3;\n      var velocityX = e.gesture.velocityX;\n      var direction = e.gesture.direction;\n\n      // Less than half, going left\n      //if(ratio > 0 && ratio < 0.5 && direction == 'left' && velocityX < velocityThreshold) {\n      //this.openPercentage(0);\n      //}\n\n      // Going right, less than half, too slow (snap back)\n      if(ratio > 0 && ratio < 0.5 && direction == 'right' && velocityX < velocityThreshold) {\n        this.openPercentage(0);\n      }\n\n      // Going left, more than half, too slow (snap back)\n      else if(ratio > 0.5 && direction == 'left' && velocityX < velocityThreshold) {\n        this.openPercentage(100);\n      }\n\n      // Going left, less than half, too slow (snap back)\n      else if(ratio < 0 && ratio > -0.5 && direction == 'left' && velocityX < velocityThreshold) {\n        this.openPercentage(0);\n      }\n\n      // Going right, more than half, too slow (snap back)\n      else if(ratio < 0.5 && direction == 'right' && velocityX < velocityThreshold) {\n        this.openPercentage(-100);\n      }\n\n      // Going right, more than half, or quickly (snap open)\n      else if(direction == 'right' && ratio >= 0 && (ratio >= 0.5 || velocityX > velocityThreshold)) {\n        this.openPercentage(100);\n      }\n\n      // Going left, more than half, or quickly (span open)\n      else if(direction == 'left' && ratio <= 0 && (ratio <= -0.5 || velocityX > velocityThreshold)) {\n        this.openPercentage(-100);\n      }\n\n      // Snap back for safety\n      else {\n        this.openPercentage(0);\n      }\n    },\n\n    // End a drag with the given event\n    _endDrag: function(e) {\n      if(this._isDragging) {\n        this.snapToRest(e);\n      }\n      this._startX = null;\n      this._lastX = null;\n      this._offsetX = null;\n    },\n\n    // Handle a drag event\n    _handleDrag: function(e) {\n\n      // If we don't have start coords, grab and store them\n      if(!this._startX) {\n        this._startX = e.gesture.touches[0].pageX;\n        this._lastX = this._startX;\n      } else {\n        // Grab the current tap coords\n        this._lastX = e.gesture.touches[0].pageX;\n      }\n\n      // Calculate difference from the tap points\n      if(!this._isDragging && Math.abs(this._lastX - this._startX) > this.dragThresholdX) {\n        // if the difference is greater than threshold, start dragging using the current\n        // point as the starting point\n        this._startX = this._lastX;\n\n        this._isDragging = true;\n        // Initialize dragging\n        this.content.disableAnimation();\n        this._offsetX = this.getOpenAmount();\n      }\n\n      if(this._isDragging) {\n        this.openAmount(this._offsetX + (this._lastX - this._startX));\n      }\n    }\n  });\n\n})(ionic);\n\n})();\n/*!\n * ionic.bundle.js is a concatenation of:\n * ionic.js, angular.js, angular-animate.js,\n * angular-sanitize.js, angular-ui-router.js,\n * and ionic-angular.js\n */\n\n/**\n * @license AngularJS v1.2.17\n * (c) 2010-2014 Google, Inc. http://angularjs.org\n * License: MIT\n */\n(function(window, document, undefined) {'use strict';\n\n/**\n * @description\n *\n * This object provides a utility for producing rich Error messages within\n * Angular. It can be called as follows:\n *\n * var exampleMinErr = minErr('example');\n * throw exampleMinErr('one', 'This {0} is {1}', foo, bar);\n *\n * The above creates an instance of minErr in the example namespace. The\n * resulting error will have a namespaced error code of example.one.  The\n * resulting error will replace {0} with the value of foo, and {1} with the\n * value of bar. The object is not restricted in the number of arguments it can\n * take.\n *\n * If fewer arguments are specified than necessary for interpolation, the extra\n * interpolation markers will be preserved in the final string.\n *\n * Since data will be parsed statically during a build step, some restrictions\n * are applied with respect to how minErr instances are created and called.\n * Instances should have names of the form namespaceMinErr for a minErr created\n * using minErr('namespace') . Error codes, namespaces and template strings\n * should all be static strings, not variables or general expressions.\n *\n * @param {string} module The namespace to use for the new minErr instance.\n * @returns {function(code:string, template:string, ...templateArgs): Error} minErr instance\n */\n\nfunction minErr(module) {\n  return function () {\n    var code = arguments[0],\n      prefix = '[' + (module ? module + ':' : '') + code + '] ',\n      template = arguments[1],\n      templateArgs = arguments,\n      stringify = function (obj) {\n        if (typeof obj === 'function') {\n          return obj.toString().replace(/ \\{[\\s\\S]*$/, '');\n        } else if (typeof obj === 'undefined') {\n          return 'undefined';\n        } else if (typeof obj !== 'string') {\n          return JSON.stringify(obj);\n        }\n        return obj;\n      },\n      message, i;\n\n    message = prefix + template.replace(/\\{\\d+\\}/g, function (match) {\n      var index = +match.slice(1, -1), arg;\n\n      if (index + 2 < templateArgs.length) {\n        arg = templateArgs[index + 2];\n        if (typeof arg === 'function') {\n          return arg.toString().replace(/ ?\\{[\\s\\S]*$/, '');\n        } else if (typeof arg === 'undefined') {\n          return 'undefined';\n        } else if (typeof arg !== 'string') {\n          return toJson(arg);\n        }\n        return arg;\n      }\n      return match;\n    });\n\n    message = message + '\\nhttp://errors.angularjs.org/1.2.17/' +\n      (module ? module + '/' : '') + code;\n    for (i = 2; i < arguments.length; i++) {\n      message = message + (i == 2 ? '?' : '&') + 'p' + (i-2) + '=' +\n        encodeURIComponent(stringify(arguments[i]));\n    }\n\n    return new Error(message);\n  };\n}\n\n/* We need to tell jshint what variables are being exported */\n/* global\n    -angular,\n    -msie,\n    -jqLite,\n    -jQuery,\n    -slice,\n    -push,\n    -toString,\n    -ngMinErr,\n    -angularModule,\n    -nodeName_,\n    -uid,\n\n    -lowercase,\n    -uppercase,\n    -manualLowercase,\n    -manualUppercase,\n    -nodeName_,\n    -isArrayLike,\n    -forEach,\n    -sortedKeys,\n    -forEachSorted,\n    -reverseParams,\n    -nextUid,\n    -setHashKey,\n    -extend,\n    -int,\n    -inherit,\n    -noop,\n    -identity,\n    -valueFn,\n    -isUndefined,\n    -isDefined,\n    -isObject,\n    -isString,\n    -isNumber,\n    -isDate,\n    -isArray,\n    -isFunction,\n    -isRegExp,\n    -isWindow,\n    -isScope,\n    -isFile,\n    -isBlob,\n    -isBoolean,\n    -trim,\n    -isElement,\n    -makeMap,\n    -map,\n    -size,\n    -includes,\n    -indexOf,\n    -arrayRemove,\n    -isLeafNode,\n    -copy,\n    -shallowCopy,\n    -equals,\n    -csp,\n    -concat,\n    -sliceArgs,\n    -bind,\n    -toJsonReplacer,\n    -toJson,\n    -fromJson,\n    -toBoolean,\n    -startingTag,\n    -tryDecodeURIComponent,\n    -parseKeyValue,\n    -toKeyValue,\n    -encodeUriSegment,\n    -encodeUriQuery,\n    -angularInit,\n    -bootstrap,\n    -snake_case,\n    -bindJQuery,\n    -assertArg,\n    -assertArgFn,\n    -assertNotHasOwnProperty,\n    -getter,\n    -getBlockElements,\n    -hasOwnProperty,\n\n*/\n\n////////////////////////////////////\n\n/**\n * @ngdoc module\n * @name ng\n * @module ng\n * @description\n *\n * # ng (core module)\n * The ng module is loaded by default when an AngularJS application is started. The module itself\n * contains the essential components for an AngularJS application to function. The table below\n * lists a high level breakdown of each of the services/factories, filters, directives and testing\n * components available within this core module.\n *\n * <div doc-module-components=\"ng\"></div>\n */\n\n/**\n * @ngdoc function\n * @name angular.lowercase\n * @module ng\n * @kind function\n *\n * @description Converts the specified string to lowercase.\n * @param {string} string String to be converted to lowercase.\n * @returns {string} Lowercased string.\n */\nvar lowercase = function(string){return isString(string) ? string.toLowerCase() : string;};\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\n\n/**\n * @ngdoc function\n * @name angular.uppercase\n * @module ng\n * @kind function\n *\n * @description Converts the specified string to uppercase.\n * @param {string} string String to be converted to uppercase.\n * @returns {string} Uppercased string.\n */\nvar uppercase = function(string){return isString(string) ? string.toUpperCase() : string;};\n\n\nvar manualLowercase = function(s) {\n  /* jshint bitwise: false */\n  return isString(s)\n      ? s.replace(/[A-Z]/g, function(ch) {return String.fromCharCode(ch.charCodeAt(0) | 32);})\n      : s;\n};\nvar manualUppercase = function(s) {\n  /* jshint bitwise: false */\n  return isString(s)\n      ? s.replace(/[a-z]/g, function(ch) {return String.fromCharCode(ch.charCodeAt(0) & ~32);})\n      : s;\n};\n\n\n// String#toLowerCase and String#toUpperCase don't produce correct results in browsers with Turkish\n// locale, for this reason we need to detect this case and redefine lowercase/uppercase methods\n// with correct but slower alternatives.\nif ('i' !== 'I'.toLowerCase()) {\n  lowercase = manualLowercase;\n  uppercase = manualUppercase;\n}\n\n\nvar /** holds major version number for IE or NaN for real browsers */\n    msie,\n    jqLite,           // delay binding since jQuery could be loaded after us.\n    jQuery,           // delay binding\n    slice             = [].slice,\n    push              = [].push,\n    toString          = Object.prototype.toString,\n    ngMinErr          = minErr('ng'),\n\n    /** @name angular */\n    angular           = window.angular || (window.angular = {}),\n    angularModule,\n    nodeName_,\n    uid               = ['0', '0', '0'];\n\n/**\n * IE 11 changed the format of the UserAgent string.\n * See http://msdn.microsoft.com/en-us/library/ms537503.aspx\n */\nmsie = int((/msie (\\d+)/.exec(lowercase(navigator.userAgent)) || [])[1]);\nif (isNaN(msie)) {\n  msie = int((/trident\\/.*; rv:(\\d+)/.exec(lowercase(navigator.userAgent)) || [])[1]);\n}\n\n\n/**\n * @private\n * @param {*} obj\n * @return {boolean} Returns true if `obj` is an array or array-like object (NodeList, Arguments,\n *                   String ...)\n */\nfunction isArrayLike(obj) {\n  if (obj == null || isWindow(obj)) {\n    return false;\n  }\n\n  var length = obj.length;\n\n  if (obj.nodeType === 1 && length) {\n    return true;\n  }\n\n  return isString(obj) || isArray(obj) || length === 0 ||\n         typeof length === 'number' && length > 0 && (length - 1) in obj;\n}\n\n/**\n * @ngdoc function\n * @name angular.forEach\n * @module ng\n * @kind function\n *\n * @description\n * Invokes the `iterator` function once for each item in `obj` collection, which can be either an\n * object or an array. The `iterator` function is invoked with `iterator(value, key)`, where `value`\n * is the value of an object property or an array element and `key` is the object property key or\n * array element index. Specifying a `context` for the function is optional.\n *\n * It is worth noting that `.forEach` does not iterate over inherited properties because it filters\n * using the `hasOwnProperty` method.\n *\n   ```js\n     var values = {name: 'misko', gender: 'male'};\n     var log = [];\n     angular.forEach(values, function(value, key) {\n       this.push(key + ': ' + value);\n     }, log);\n     expect(log).toEqual(['name: misko', 'gender: male']);\n   ```\n *\n * @param {Object|Array} obj Object to iterate over.\n * @param {Function} iterator Iterator function.\n * @param {Object=} context Object to become context (`this`) for the iterator function.\n * @returns {Object|Array} Reference to `obj`.\n */\nfunction forEach(obj, iterator, context) {\n  var key;\n  if (obj) {\n    if (isFunction(obj)) {\n      for (key in obj) {\n        // Need to check if hasOwnProperty exists,\n        // as on IE8 the result of querySelectorAll is an object without a hasOwnProperty function\n        if (key != 'prototype' && key != 'length' && key != 'name' && (!obj.hasOwnProperty || obj.hasOwnProperty(key))) {\n          iterator.call(context, obj[key], key);\n        }\n      }\n    } else if (obj.forEach && obj.forEach !== forEach) {\n      obj.forEach(iterator, context);\n    } else if (isArrayLike(obj)) {\n      for (key = 0; key < obj.length; key++)\n        iterator.call(context, obj[key], key);\n    } else {\n      for (key in obj) {\n        if (obj.hasOwnProperty(key)) {\n          iterator.call(context, obj[key], key);\n        }\n      }\n    }\n  }\n  return obj;\n}\n\nfunction sortedKeys(obj) {\n  var keys = [];\n  for (var key in obj) {\n    if (obj.hasOwnProperty(key)) {\n      keys.push(key);\n    }\n  }\n  return keys.sort();\n}\n\nfunction forEachSorted(obj, iterator, context) {\n  var keys = sortedKeys(obj);\n  for ( var i = 0; i < keys.length; i++) {\n    iterator.call(context, obj[keys[i]], keys[i]);\n  }\n  return keys;\n}\n\n\n/**\n * when using forEach the params are value, key, but it is often useful to have key, value.\n * @param {function(string, *)} iteratorFn\n * @returns {function(*, string)}\n */\nfunction reverseParams(iteratorFn) {\n  return function(value, key) { iteratorFn(key, value); };\n}\n\n/**\n * A consistent way of creating unique IDs in angular. The ID is a sequence of alpha numeric\n * characters such as '012ABC'. The reason why we are not using simply a number counter is that\n * the number string gets longer over time, and it can also overflow, where as the nextId\n * will grow much slower, it is a string, and it will never overflow.\n *\n * @returns {string} an unique alpha-numeric string\n */\nfunction nextUid() {\n  var index = uid.length;\n  var digit;\n\n  while(index) {\n    index--;\n    digit = uid[index].charCodeAt(0);\n    if (digit == 57 /*'9'*/) {\n      uid[index] = 'A';\n      return uid.join('');\n    }\n    if (digit == 90  /*'Z'*/) {\n      uid[index] = '0';\n    } else {\n      uid[index] = String.fromCharCode(digit + 1);\n      return uid.join('');\n    }\n  }\n  uid.unshift('0');\n  return uid.join('');\n}\n\n\n/**\n * Set or clear the hashkey for an object.\n * @param obj object\n * @param h the hashkey (!truthy to delete the hashkey)\n */\nfunction setHashKey(obj, h) {\n  if (h) {\n    obj.$$hashKey = h;\n  }\n  else {\n    delete obj.$$hashKey;\n  }\n}\n\n/**\n * @ngdoc function\n * @name angular.extend\n * @module ng\n * @kind function\n *\n * @description\n * Extends the destination object `dst` by copying all of the properties from the `src` object(s)\n * to `dst`. You can specify multiple `src` objects.\n *\n * @param {Object} dst Destination object.\n * @param {...Object} src Source object(s).\n * @returns {Object} Reference to `dst`.\n */\nfunction extend(dst) {\n  var h = dst.$$hashKey;\n  forEach(arguments, function(obj) {\n    if (obj !== dst) {\n      forEach(obj, function(value, key) {\n        dst[key] = value;\n      });\n    }\n  });\n\n  setHashKey(dst,h);\n  return dst;\n}\n\nfunction int(str) {\n  return parseInt(str, 10);\n}\n\n\nfunction inherit(parent, extra) {\n  return extend(new (extend(function() {}, {prototype:parent}))(), extra);\n}\n\n/**\n * @ngdoc function\n * @name angular.noop\n * @module ng\n * @kind function\n *\n * @description\n * A function that performs no operations. This function can be useful when writing code in the\n * functional style.\n   ```js\n     function foo(callback) {\n       var result = calculateResult();\n       (callback || angular.noop)(result);\n     }\n   ```\n */\nfunction noop() {}\nnoop.$inject = [];\n\n\n/**\n * @ngdoc function\n * @name angular.identity\n * @module ng\n * @kind function\n *\n * @description\n * A function that returns its first argument. This function is useful when writing code in the\n * functional style.\n *\n   ```js\n     function transformer(transformationFn, value) {\n       return (transformationFn || angular.identity)(value);\n     };\n   ```\n */\nfunction identity($) {return $;}\nidentity.$inject = [];\n\n\nfunction valueFn(value) {return function() {return value;};}\n\n/**\n * @ngdoc function\n * @name angular.isUndefined\n * @module ng\n * @kind function\n *\n * @description\n * Determines if a reference is undefined.\n *\n * @param {*} value Reference to check.\n * @returns {boolean} True if `value` is undefined.\n */\nfunction isUndefined(value){return typeof value === 'undefined';}\n\n\n/**\n * @ngdoc function\n * @name angular.isDefined\n * @module ng\n * @kind function\n *\n * @description\n * Determines if a reference is defined.\n *\n * @param {*} value Reference to check.\n * @returns {boolean} True if `value` is defined.\n */\nfunction isDefined(value){return typeof value !== 'undefined';}\n\n\n/**\n * @ngdoc function\n * @name angular.isObject\n * @module ng\n * @kind function\n *\n * @description\n * Determines if a reference is an `Object`. Unlike `typeof` in JavaScript, `null`s are not\n * considered to be objects. Note that JavaScript arrays are objects.\n *\n * @param {*} value Reference to check.\n * @returns {boolean} True if `value` is an `Object` but not `null`.\n */\nfunction isObject(value){return value != null && typeof value === 'object';}\n\n\n/**\n * @ngdoc function\n * @name angular.isString\n * @module ng\n * @kind function\n *\n * @description\n * Determines if a reference is a `String`.\n *\n * @param {*} value Reference to check.\n * @returns {boolean} True if `value` is a `String`.\n */\nfunction isString(value){return typeof value === 'string';}\n\n\n/**\n * @ngdoc function\n * @name angular.isNumber\n * @module ng\n * @kind function\n *\n * @description\n * Determines if a reference is a `Number`.\n *\n * @param {*} value Reference to check.\n * @returns {boolean} True if `value` is a `Number`.\n */\nfunction isNumber(value){return typeof value === 'number';}\n\n\n/**\n * @ngdoc function\n * @name angular.isDate\n * @module ng\n * @kind function\n *\n * @description\n * Determines if a value is a date.\n *\n * @param {*} value Reference to check.\n * @returns {boolean} True if `value` is a `Date`.\n */\nfunction isDate(value) {\n  return toString.call(value) === '[object Date]';\n}\n\n\n/**\n * @ngdoc function\n * @name angular.isArray\n * @module ng\n * @kind function\n *\n * @description\n * Determines if a reference is an `Array`.\n *\n * @param {*} value Reference to check.\n * @returns {boolean} True if `value` is an `Array`.\n */\nfunction isArray(value) {\n  return toString.call(value) === '[object Array]';\n}\n\n\n/**\n * @ngdoc function\n * @name angular.isFunction\n * @module ng\n * @kind function\n *\n * @description\n * Determines if a reference is a `Function`.\n *\n * @param {*} value Reference to check.\n * @returns {boolean} True if `value` is a `Function`.\n */\nfunction isFunction(value){return typeof value === 'function';}\n\n\n/**\n * Determines if a value is a regular expression object.\n *\n * @private\n * @param {*} value Reference to check.\n * @returns {boolean} True if `value` is a `RegExp`.\n */\nfunction isRegExp(value) {\n  return toString.call(value) === '[object RegExp]';\n}\n\n\n/**\n * Checks if `obj` is a window object.\n *\n * @private\n * @param {*} obj Object to check\n * @returns {boolean} True if `obj` is a window obj.\n */\nfunction isWindow(obj) {\n  return obj && obj.document && obj.location && obj.alert && obj.setInterval;\n}\n\n\nfunction isScope(obj) {\n  return obj && obj.$evalAsync && obj.$watch;\n}\n\n\nfunction isFile(obj) {\n  return toString.call(obj) === '[object File]';\n}\n\n\nfunction isBlob(obj) {\n  return toString.call(obj) === '[object Blob]';\n}\n\n\nfunction isBoolean(value) {\n  return typeof value === 'boolean';\n}\n\n\nvar trim = (function() {\n  // native trim is way faster: http://jsperf.com/angular-trim-test\n  // but IE doesn't have it... :-(\n  // TODO: we should move this into IE/ES5 polyfill\n  if (!String.prototype.trim) {\n    return function(value) {\n      return isString(value) ? value.replace(/^\\s\\s*/, '').replace(/\\s\\s*$/, '') : value;\n    };\n  }\n  return function(value) {\n    return isString(value) ? value.trim() : value;\n  };\n})();\n\n\n/**\n * @ngdoc function\n * @name angular.isElement\n * @module ng\n * @kind function\n *\n * @description\n * Determines if a reference is a DOM element (or wrapped jQuery element).\n *\n * @param {*} value Reference to check.\n * @returns {boolean} True if `value` is a DOM element (or wrapped jQuery element).\n */\nfunction isElement(node) {\n  return !!(node &&\n    (node.nodeName  // we are a direct element\n    || (node.prop && node.attr && node.find)));  // we have an on and find method part of jQuery API\n}\n\n/**\n * @param str 'key1,key2,...'\n * @returns {object} in the form of {key1:true, key2:true, ...}\n */\nfunction makeMap(str) {\n  var obj = {}, items = str.split(\",\"), i;\n  for ( i = 0; i < items.length; i++ )\n    obj[ items[i] ] = true;\n  return obj;\n}\n\n\nif (msie < 9) {\n  nodeName_ = function(element) {\n    element = element.nodeName ? element : element[0];\n    return (element.scopeName && element.scopeName != 'HTML')\n      ? uppercase(element.scopeName + ':' + element.nodeName) : element.nodeName;\n  };\n} else {\n  nodeName_ = function(element) {\n    return element.nodeName ? element.nodeName : element[0].nodeName;\n  };\n}\n\n\nfunction map(obj, iterator, context) {\n  var results = [];\n  forEach(obj, function(value, index, list) {\n    results.push(iterator.call(context, value, index, list));\n  });\n  return results;\n}\n\n\n/**\n * @description\n * Determines the number of elements in an array, the number of properties an object has, or\n * the length of a string.\n *\n * Note: This function is used to augment the Object type in Angular expressions. See\n * {@link angular.Object} for more information about Angular arrays.\n *\n * @param {Object|Array|string} obj Object, array, or string to inspect.\n * @param {boolean} [ownPropsOnly=false] Count only \"own\" properties in an object\n * @returns {number} The size of `obj` or `0` if `obj` is neither an object nor an array.\n */\nfunction size(obj, ownPropsOnly) {\n  var count = 0, key;\n\n  if (isArray(obj) || isString(obj)) {\n    return obj.length;\n  } else if (isObject(obj)) {\n    for (key in obj)\n      if (!ownPropsOnly || obj.hasOwnProperty(key))\n        count++;\n  }\n\n  return count;\n}\n\n\nfunction includes(array, obj) {\n  return indexOf(array, obj) != -1;\n}\n\nfunction indexOf(array, obj) {\n  if (array.indexOf) return array.indexOf(obj);\n\n  for (var i = 0; i < array.length; i++) {\n    if (obj === array[i]) return i;\n  }\n  return -1;\n}\n\nfunction arrayRemove(array, value) {\n  var index = indexOf(array, value);\n  if (index >=0)\n    array.splice(index, 1);\n  return value;\n}\n\nfunction isLeafNode (node) {\n  if (node) {\n    switch (node.nodeName) {\n    case \"OPTION\":\n    case \"PRE\":\n    case \"TITLE\":\n      return true;\n    }\n  }\n  return false;\n}\n\n/**\n * @ngdoc function\n * @name angular.copy\n * @module ng\n * @kind function\n *\n * @description\n * Creates a deep copy of `source`, which should be an object or an array.\n *\n * * If no destination is supplied, a copy of the object or array is created.\n * * If a destination is provided, all of its elements (for array) or properties (for objects)\n *   are deleted and then all elements/properties from the source are copied to it.\n * * If `source` is not an object or array (inc. `null` and `undefined`), `source` is returned.\n * * If `source` is identical to 'destination' an exception will be thrown.\n *\n * @param {*} source The source that will be used to make a copy.\n *                   Can be any type, including primitives, `null`, and `undefined`.\n * @param {(Object|Array)=} destination Destination into which the source is copied. If\n *     provided, must be of the same type as `source`.\n * @returns {*} The copy or updated `destination`, if `destination` was specified.\n *\n * @example\n <example>\n <file name=\"index.html\">\n <div ng-controller=\"Controller\">\n <form novalidate class=\"simple-form\">\n Name: <input type=\"text\" ng-model=\"user.name\" /><br />\n E-mail: <input type=\"email\" ng-model=\"user.email\" /><br />\n Gender: <input type=\"radio\" ng-model=\"user.gender\" value=\"male\" />male\n <input type=\"radio\" ng-model=\"user.gender\" value=\"female\" />female<br />\n <button ng-click=\"reset()\">RESET</button>\n <button ng-click=\"update(user)\">SAVE</button>\n </form>\n <pre>form = {{user | json}}</pre>\n <pre>master = {{master | json}}</pre>\n </div>\n\n <script>\n function Controller($scope) {\n    $scope.master= {};\n\n    $scope.update = function(user) {\n      // Example with 1 argument\n      $scope.master= angular.copy(user);\n    };\n\n    $scope.reset = function() {\n      // Example with 2 arguments\n      angular.copy($scope.master, $scope.user);\n    };\n\n    $scope.reset();\n  }\n </script>\n </file>\n </example>\n */\nfunction copy(source, destination, stackSource, stackDest) {\n  if (isWindow(source) || isScope(source)) {\n    throw ngMinErr('cpws',\n      \"Can't copy! Making copies of Window or Scope instances is not supported.\");\n  }\n\n  if (!destination) {\n    destination = source;\n    if (source) {\n      if (isArray(source)) {\n        destination = copy(source, [], stackSource, stackDest);\n      } else if (isDate(source)) {\n        destination = new Date(source.getTime());\n      } else if (isRegExp(source)) {\n        destination = new RegExp(source.source);\n      } else if (isObject(source)) {\n        destination = copy(source, {}, stackSource, stackDest);\n      }\n    }\n  } else {\n    if (source === destination) throw ngMinErr('cpi',\n      \"Can't copy! Source and destination are identical.\");\n\n    stackSource = stackSource || [];\n    stackDest = stackDest || [];\n\n    if (isObject(source)) {\n      var index = indexOf(stackSource, source);\n      if (index !== -1) return stackDest[index];\n\n      stackSource.push(source);\n      stackDest.push(destination);\n    }\n\n    var result;\n    if (isArray(source)) {\n      destination.length = 0;\n      for ( var i = 0; i < source.length; i++) {\n        result = copy(source[i], null, stackSource, stackDest);\n        if (isObject(source[i])) {\n          stackSource.push(source[i]);\n          stackDest.push(result);\n        }\n        destination.push(result);\n      }\n    } else {\n      var h = destination.$$hashKey;\n      forEach(destination, function(value, key) {\n        delete destination[key];\n      });\n      for ( var key in source) {\n        result = copy(source[key], null, stackSource, stackDest);\n        if (isObject(source[key])) {\n          stackSource.push(source[key]);\n          stackDest.push(result);\n        }\n        destination[key] = result;\n      }\n      setHashKey(destination,h);\n    }\n\n  }\n  return destination;\n}\n\n/**\n * Creates a shallow copy of an object, an array or a primitive\n */\nfunction shallowCopy(src, dst) {\n  if (isArray(src)) {\n    dst = dst || [];\n\n    for ( var i = 0; i < src.length; i++) {\n      dst[i] = src[i];\n    }\n  } else if (isObject(src)) {\n    dst = dst || {};\n\n    for (var key in src) {\n      if (hasOwnProperty.call(src, key) && !(key.charAt(0) === '$' && key.charAt(1) === '$')) {\n        dst[key] = src[key];\n      }\n    }\n  }\n\n  return dst || src;\n}\n\n\n/**\n * @ngdoc function\n * @name angular.equals\n * @module ng\n * @kind function\n *\n * @description\n * Determines if two objects or two values are equivalent. Supports value types, regular\n * expressions, arrays and objects.\n *\n * Two objects or values are considered equivalent if at least one of the following is true:\n *\n * * Both objects or values pass `===` comparison.\n * * Both objects or values are of the same type and all of their properties are equal by\n *   comparing them with `angular.equals`.\n * * Both values are NaN. (In JavaScript, NaN == NaN => false. But we consider two NaN as equal)\n * * Both values represent the same regular expression (In JavaScript,\n *   /abc/ == /abc/ => false. But we consider two regular expressions as equal when their textual\n *   representation matches).\n *\n * During a property comparison, properties of `function` type and properties with names\n * that begin with `$` are ignored.\n *\n * Scope and DOMWindow objects are being compared only by identify (`===`).\n *\n * @param {*} o1 Object or value to compare.\n * @param {*} o2 Object or value to compare.\n * @returns {boolean} True if arguments are equal.\n */\nfunction equals(o1, o2) {\n  if (o1 === o2) return true;\n  if (o1 === null || o2 === null) return false;\n  if (o1 !== o1 && o2 !== o2) return true; // NaN === NaN\n  var t1 = typeof o1, t2 = typeof o2, length, key, keySet;\n  if (t1 == t2) {\n    if (t1 == 'object') {\n      if (isArray(o1)) {\n        if (!isArray(o2)) return false;\n        if ((length = o1.length) == o2.length) {\n          for(key=0; key<length; key++) {\n            if (!equals(o1[key], o2[key])) return false;\n          }\n          return true;\n        }\n      } else if (isDate(o1)) {\n        return isDate(o2) && o1.getTime() == o2.getTime();\n      } else if (isRegExp(o1) && isRegExp(o2)) {\n        return o1.toString() == o2.toString();\n      } else {\n        if (isScope(o1) || isScope(o2) || isWindow(o1) || isWindow(o2) || isArray(o2)) return false;\n        keySet = {};\n        for(key in o1) {\n          if (key.charAt(0) === '$' || isFunction(o1[key])) continue;\n          if (!equals(o1[key], o2[key])) return false;\n          keySet[key] = true;\n        }\n        for(key in o2) {\n          if (!keySet.hasOwnProperty(key) &&\n              key.charAt(0) !== '$' &&\n              o2[key] !== undefined &&\n              !isFunction(o2[key])) return false;\n        }\n        return true;\n      }\n    }\n  }\n  return false;\n}\n\n\nfunction csp() {\n  return (document.securityPolicy && document.securityPolicy.isActive) ||\n      (document.querySelector &&\n      !!(document.querySelector('[ng-csp]') || document.querySelector('[data-ng-csp]')));\n}\n\n\nfunction concat(array1, array2, index) {\n  return array1.concat(slice.call(array2, index));\n}\n\nfunction sliceArgs(args, startIndex) {\n  return slice.call(args, startIndex || 0);\n}\n\n\n/* jshint -W101 */\n/**\n * @ngdoc function\n * @name angular.bind\n * @module ng\n * @kind function\n *\n * @description\n * Returns a function which calls function `fn` bound to `self` (`self` becomes the `this` for\n * `fn`). You can supply optional `args` that are prebound to the function. This feature is also\n * known as [partial application](http://en.wikipedia.org/wiki/Partial_application), as\n * distinguished from [function currying](http://en.wikipedia.org/wiki/Currying#Contrast_with_partial_function_application).\n *\n * @param {Object} self Context which `fn` should be evaluated in.\n * @param {function()} fn Function to be bound.\n * @param {...*} args Optional arguments to be prebound to the `fn` function call.\n * @returns {function()} Function that wraps the `fn` with all the specified bindings.\n */\n/* jshint +W101 */\nfunction bind(self, fn) {\n  var curryArgs = arguments.length > 2 ? sliceArgs(arguments, 2) : [];\n  if (isFunction(fn) && !(fn instanceof RegExp)) {\n    return curryArgs.length\n      ? function() {\n          return arguments.length\n            ? fn.apply(self, curryArgs.concat(slice.call(arguments, 0)))\n            : fn.apply(self, curryArgs);\n        }\n      : function() {\n          return arguments.length\n            ? fn.apply(self, arguments)\n            : fn.call(self);\n        };\n  } else {\n    // in IE, native methods are not functions so they cannot be bound (note: they don't need to be)\n    return fn;\n  }\n}\n\n\nfunction toJsonReplacer(key, value) {\n  var val = value;\n\n  if (typeof key === 'string' && key.charAt(0) === '$') {\n    val = undefined;\n  } else if (isWindow(value)) {\n    val = '$WINDOW';\n  } else if (value &&  document === value) {\n    val = '$DOCUMENT';\n  } else if (isScope(value)) {\n    val = '$SCOPE';\n  }\n\n  return val;\n}\n\n\n/**\n * @ngdoc function\n * @name angular.toJson\n * @module ng\n * @kind function\n *\n * @description\n * Serializes input into a JSON-formatted string. Properties with leading $ characters will be\n * stripped since angular uses this notation internally.\n *\n * @param {Object|Array|Date|string|number} obj Input to be serialized into JSON.\n * @param {boolean=} pretty If set to true, the JSON output will contain newlines and whitespace.\n * @returns {string|undefined} JSON-ified string representing `obj`.\n */\nfunction toJson(obj, pretty) {\n  if (typeof obj === 'undefined') return undefined;\n  return JSON.stringify(obj, toJsonReplacer, pretty ? '  ' : null);\n}\n\n\n/**\n * @ngdoc function\n * @name angular.fromJson\n * @module ng\n * @kind function\n *\n * @description\n * Deserializes a JSON string.\n *\n * @param {string} json JSON string to deserialize.\n * @returns {Object|Array|string|number} Deserialized thingy.\n */\nfunction fromJson(json) {\n  return isString(json)\n      ? JSON.parse(json)\n      : json;\n}\n\n\nfunction toBoolean(value) {\n  if (typeof value === 'function') {\n    value = true;\n  } else if (value && value.length !== 0) {\n    var v = lowercase(\"\" + value);\n    value = !(v == 'f' || v == '0' || v == 'false' || v == 'no' || v == 'n' || v == '[]');\n  } else {\n    value = false;\n  }\n  return value;\n}\n\n/**\n * @returns {string} Returns the string representation of the element.\n */\nfunction startingTag(element) {\n  element = jqLite(element).clone();\n  try {\n    // turns out IE does not let you set .html() on elements which\n    // are not allowed to have children. So we just ignore it.\n    element.empty();\n  } catch(e) {}\n  // As Per DOM Standards\n  var TEXT_NODE = 3;\n  var elemHtml = jqLite('<div>').append(element).html();\n  try {\n    return element[0].nodeType === TEXT_NODE ? lowercase(elemHtml) :\n        elemHtml.\n          match(/^(<[^>]+>)/)[1].\n          replace(/^<([\\w\\-]+)/, function(match, nodeName) { return '<' + lowercase(nodeName); });\n  } catch(e) {\n    return lowercase(elemHtml);\n  }\n\n}\n\n\n/////////////////////////////////////////////////\n\n/**\n * Tries to decode the URI component without throwing an exception.\n *\n * @private\n * @param str value potential URI component to check.\n * @returns {boolean} True if `value` can be decoded\n * with the decodeURIComponent function.\n */\nfunction tryDecodeURIComponent(value) {\n  try {\n    return decodeURIComponent(value);\n  } catch(e) {\n    // Ignore any invalid uri component\n  }\n}\n\n\n/**\n * Parses an escaped url query string into key-value pairs.\n * @returns {Object.<string,boolean|Array>}\n */\nfunction parseKeyValue(/**string*/keyValue) {\n  var obj = {}, key_value, key;\n  forEach((keyValue || \"\").split('&'), function(keyValue) {\n    if ( keyValue ) {\n      key_value = keyValue.split('=');\n      key = tryDecodeURIComponent(key_value[0]);\n      if ( isDefined(key) ) {\n        var val = isDefined(key_value[1]) ? tryDecodeURIComponent(key_value[1]) : true;\n        if (!obj[key]) {\n          obj[key] = val;\n        } else if(isArray(obj[key])) {\n          obj[key].push(val);\n        } else {\n          obj[key] = [obj[key],val];\n        }\n      }\n    }\n  });\n  return obj;\n}\n\nfunction toKeyValue(obj) {\n  var parts = [];\n  forEach(obj, function(value, key) {\n    if (isArray(value)) {\n      forEach(value, function(arrayValue) {\n        parts.push(encodeUriQuery(key, true) +\n                   (arrayValue === true ? '' : '=' + encodeUriQuery(arrayValue, true)));\n      });\n    } else {\n    parts.push(encodeUriQuery(key, true) +\n               (value === true ? '' : '=' + encodeUriQuery(value, true)));\n    }\n  });\n  return parts.length ? parts.join('&') : '';\n}\n\n\n/**\n * We need our custom method because encodeURIComponent is too aggressive and doesn't follow\n * http://www.ietf.org/rfc/rfc3986.txt with regards to the character set (pchar) allowed in path\n * segments:\n *    segment       = *pchar\n *    pchar         = unreserved / pct-encoded / sub-delims / \":\" / \"@\"\n *    pct-encoded   = \"%\" HEXDIG HEXDIG\n *    unreserved    = ALPHA / DIGIT / \"-\" / \".\" / \"_\" / \"~\"\n *    sub-delims    = \"!\" / \"$\" / \"&\" / \"'\" / \"(\" / \")\"\n *                     / \"*\" / \"+\" / \",\" / \";\" / \"=\"\n */\nfunction encodeUriSegment(val) {\n  return encodeUriQuery(val, true).\n             replace(/%26/gi, '&').\n             replace(/%3D/gi, '=').\n             replace(/%2B/gi, '+');\n}\n\n\n/**\n * This method is intended for encoding *key* or *value* parts of query component. We need a custom\n * method because encodeURIComponent is too aggressive and encodes stuff that doesn't have to be\n * encoded per http://tools.ietf.org/html/rfc3986:\n *    query       = *( pchar / \"/\" / \"?\" )\n *    pchar         = unreserved / pct-encoded / sub-delims / \":\" / \"@\"\n *    unreserved    = ALPHA / DIGIT / \"-\" / \".\" / \"_\" / \"~\"\n *    pct-encoded   = \"%\" HEXDIG HEXDIG\n *    sub-delims    = \"!\" / \"$\" / \"&\" / \"'\" / \"(\" / \")\"\n *                     / \"*\" / \"+\" / \",\" / \";\" / \"=\"\n */\nfunction encodeUriQuery(val, pctEncodeSpaces) {\n  return encodeURIComponent(val).\n             replace(/%40/gi, '@').\n             replace(/%3A/gi, ':').\n             replace(/%24/g, '$').\n             replace(/%2C/gi, ',').\n             replace(/%20/g, (pctEncodeSpaces ? '%20' : '+'));\n}\n\n\n/**\n * @ngdoc directive\n * @name ngApp\n * @module ng\n *\n * @element ANY\n * @param {angular.Module} ngApp an optional application\n *   {@link angular.module module} name to load.\n *\n * @description\n *\n * Use this directive to **auto-bootstrap** an AngularJS application. The `ngApp` directive\n * designates the **root element** of the application and is typically placed near the root element\n * of the page - e.g. on the `<body>` or `<html>` tags.\n *\n * Only one AngularJS application can be auto-bootstrapped per HTML document. The first `ngApp`\n * found in the document will be used to define the root element to auto-bootstrap as an\n * application. To run multiple applications in an HTML document you must manually bootstrap them using\n * {@link angular.bootstrap} instead. AngularJS applications cannot be nested within each other.\n *\n * You can specify an **AngularJS module** to be used as the root module for the application.  This\n * module will be loaded into the {@link auto.$injector} when the application is bootstrapped and\n * should contain the application code needed or have dependencies on other modules that will\n * contain the code. See {@link angular.module} for more information.\n *\n * In the example below if the `ngApp` directive were not placed on the `html` element then the\n * document would not be compiled, the `AppController` would not be instantiated and the `{{ a+b }}`\n * would not be resolved to `3`.\n *\n * `ngApp` is the easiest, and most common, way to bootstrap an application.\n *\n <example module=\"ngAppDemo\">\n   <file name=\"index.html\">\n   <div ng-controller=\"ngAppDemoController\">\n     I can add: {{a}} + {{b}} =  {{ a+b }}\n   </div>\n   </file>\n   <file name=\"script.js\">\n   angular.module('ngAppDemo', []).controller('ngAppDemoController', function($scope) {\n     $scope.a = 1;\n     $scope.b = 2;\n   });\n   </file>\n </example>\n *\n */\nfunction angularInit(element, bootstrap) {\n  var elements = [element],\n      appElement,\n      module,\n      names = ['ng:app', 'ng-app', 'x-ng-app', 'data-ng-app'],\n      NG_APP_CLASS_REGEXP = /\\sng[:\\-]app(:\\s*([\\w\\d_]+);?)?\\s/;\n\n  function append(element) {\n    element && elements.push(element);\n  }\n\n  forEach(names, function(name) {\n    names[name] = true;\n    append(document.getElementById(name));\n    name = name.replace(':', '\\\\:');\n    if (element.querySelectorAll) {\n      forEach(element.querySelectorAll('.' + name), append);\n      forEach(element.querySelectorAll('.' + name + '\\\\:'), append);\n      forEach(element.querySelectorAll('[' + name + ']'), append);\n    }\n  });\n\n  forEach(elements, function(element) {\n    if (!appElement) {\n      var className = ' ' + element.className + ' ';\n      var match = NG_APP_CLASS_REGEXP.exec(className);\n      if (match) {\n        appElement = element;\n        module = (match[2] || '').replace(/\\s+/g, ',');\n      } else {\n        forEach(element.attributes, function(attr) {\n          if (!appElement && names[attr.name]) {\n            appElement = element;\n            module = attr.value;\n          }\n        });\n      }\n    }\n  });\n  if (appElement) {\n    bootstrap(appElement, module ? [module] : []);\n  }\n}\n\n/**\n * @ngdoc function\n * @name angular.bootstrap\n * @module ng\n * @description\n * Use this function to manually start up angular application.\n *\n * See: {@link guide/bootstrap Bootstrap}\n *\n * Note that ngScenario-based end-to-end tests cannot use this function to bootstrap manually.\n * They must use {@link ng.directive:ngApp ngApp}.\n *\n * Angular will detect if it has been loaded into the browser more than once and only allow the\n * first loaded script to be bootstrapped and will report a warning to the browser console for\n * each of the subsequent scripts.   This prevents strange results in applications, where otherwise\n * multiple instances of Angular try to work on the DOM.\n *\n * <example name=\"multi-bootstrap\" module=\"multi-bootstrap\">\n * <file name=\"index.html\">\n * <script src=\"../../../angular.js\"></script>\n * <div ng-controller=\"BrokenTable\">\n *   <table>\n *   <tr>\n *     <th ng-repeat=\"heading in headings\">{{heading}}</th>\n *   </tr>\n *   <tr ng-repeat=\"filling in fillings\">\n *     <td ng-repeat=\"fill in filling\">{{fill}}</td>\n *   </tr>\n * </table>\n * </div>\n * </file>\n * <file name=\"controller.js\">\n * var app = angular.module('multi-bootstrap', [])\n *\n * .controller('BrokenTable', function($scope) {\n *     $scope.headings = ['One', 'Two', 'Three'];\n *     $scope.fillings = [[1, 2, 3], ['A', 'B', 'C'], [7, 8, 9]];\n * });\n * </file>\n * <file name=\"protractor.js\" type=\"protractor\">\n * it('should only insert one table cell for each item in $scope.fillings', function() {\n *  expect(element.all(by.css('td')).count())\n *      .toBe(9);\n * });\n * </file>\n * </example>\n *\n * @param {DOMElement} element DOM element which is the root of angular application.\n * @param {Array<String|Function|Array>=} modules an array of modules to load into the application.\n *     Each item in the array should be the name of a predefined module or a (DI annotated)\n *     function that will be invoked by the injector as a run block.\n *     See: {@link angular.module modules}\n * @returns {auto.$injector} Returns the newly created injector for this app.\n */\nfunction bootstrap(element, modules) {\n  var doBootstrap = function() {\n    element = jqLite(element);\n\n    if (element.injector()) {\n      var tag = (element[0] === document) ? 'document' : startingTag(element);\n      throw ngMinErr('btstrpd', \"App Already Bootstrapped with this Element '{0}'\", tag);\n    }\n\n    modules = modules || [];\n    modules.unshift(['$provide', function($provide) {\n      $provide.value('$rootElement', element);\n    }]);\n    modules.unshift('ng');\n    var injector = createInjector(modules);\n    injector.invoke(['$rootScope', '$rootElement', '$compile', '$injector', '$animate',\n       function(scope, element, compile, injector, animate) {\n        scope.$apply(function() {\n          element.data('$injector', injector);\n          compile(element)(scope);\n        });\n      }]\n    );\n    return injector;\n  };\n\n  var NG_DEFER_BOOTSTRAP = /^NG_DEFER_BOOTSTRAP!/;\n\n  if (window && !NG_DEFER_BOOTSTRAP.test(window.name)) {\n    return doBootstrap();\n  }\n\n  window.name = window.name.replace(NG_DEFER_BOOTSTRAP, '');\n  angular.resumeBootstrap = function(extraModules) {\n    forEach(extraModules, function(module) {\n      modules.push(module);\n    });\n    doBootstrap();\n  };\n}\n\nvar SNAKE_CASE_REGEXP = /[A-Z]/g;\nfunction snake_case(name, separator) {\n  separator = separator || '_';\n  return name.replace(SNAKE_CASE_REGEXP, function(letter, pos) {\n    return (pos ? separator : '') + letter.toLowerCase();\n  });\n}\n\nfunction bindJQuery() {\n  // bind to jQuery if present;\n  jQuery = window.jQuery;\n  // Use jQuery if it exists with proper functionality, otherwise default to us.\n  // Angular 1.2+ requires jQuery 1.7.1+ for on()/off() support.\n  if (jQuery && jQuery.fn.on) {\n    jqLite = jQuery;\n    extend(jQuery.fn, {\n      scope: JQLitePrototype.scope,\n      isolateScope: JQLitePrototype.isolateScope,\n      controller: JQLitePrototype.controller,\n      injector: JQLitePrototype.injector,\n      inheritedData: JQLitePrototype.inheritedData\n    });\n    // Method signature:\n    //     jqLitePatchJQueryRemove(name, dispatchThis, filterElems, getterIfNoArguments)\n    jqLitePatchJQueryRemove('remove', true, true, false);\n    jqLitePatchJQueryRemove('empty', false, false, false);\n    jqLitePatchJQueryRemove('html', false, false, true);\n  } else {\n    jqLite = JQLite;\n  }\n  angular.element = jqLite;\n}\n\n/**\n * throw error if the argument is falsy.\n */\nfunction assertArg(arg, name, reason) {\n  if (!arg) {\n    throw ngMinErr('areq', \"Argument '{0}' is {1}\", (name || '?'), (reason || \"required\"));\n  }\n  return arg;\n}\n\nfunction assertArgFn(arg, name, acceptArrayAnnotation) {\n  if (acceptArrayAnnotation && isArray(arg)) {\n      arg = arg[arg.length - 1];\n  }\n\n  assertArg(isFunction(arg), name, 'not a function, got ' +\n      (arg && typeof arg == 'object' ? arg.constructor.name || 'Object' : typeof arg));\n  return arg;\n}\n\n/**\n * throw error if the name given is hasOwnProperty\n * @param  {String} name    the name to test\n * @param  {String} context the context in which the name is used, such as module or directive\n */\nfunction assertNotHasOwnProperty(name, context) {\n  if (name === 'hasOwnProperty') {\n    throw ngMinErr('badname', \"hasOwnProperty is not a valid {0} name\", context);\n  }\n}\n\n/**\n * Return the value accessible from the object by path. Any undefined traversals are ignored\n * @param {Object} obj starting object\n * @param {String} path path to traverse\n * @param {boolean} [bindFnToScope=true]\n * @returns {Object} value as accessible by path\n */\n//TODO(misko): this function needs to be removed\nfunction getter(obj, path, bindFnToScope) {\n  if (!path) return obj;\n  var keys = path.split('.');\n  var key;\n  var lastInstance = obj;\n  var len = keys.length;\n\n  for (var i = 0; i < len; i++) {\n    key = keys[i];\n    if (obj) {\n      obj = (lastInstance = obj)[key];\n    }\n  }\n  if (!bindFnToScope && isFunction(obj)) {\n    return bind(lastInstance, obj);\n  }\n  return obj;\n}\n\n/**\n * Return the DOM siblings between the first and last node in the given array.\n * @param {Array} array like object\n * @returns {DOMElement} object containing the elements\n */\nfunction getBlockElements(nodes) {\n  var startNode = nodes[0],\n      endNode = nodes[nodes.length - 1];\n  if (startNode === endNode) {\n    return jqLite(startNode);\n  }\n\n  var element = startNode;\n  var elements = [element];\n\n  do {\n    element = element.nextSibling;\n    if (!element) break;\n    elements.push(element);\n  } while (element !== endNode);\n\n  return jqLite(elements);\n}\n\n/**\n * @ngdoc type\n * @name angular.Module\n * @module ng\n * @description\n *\n * Interface for configuring angular {@link angular.module modules}.\n */\n\nfunction setupModuleLoader(window) {\n\n  var $injectorMinErr = minErr('$injector');\n  var ngMinErr = minErr('ng');\n\n  function ensure(obj, name, factory) {\n    return obj[name] || (obj[name] = factory());\n  }\n\n  var angular = ensure(window, 'angular', Object);\n\n  // We need to expose `angular.$$minErr` to modules such as `ngResource` that reference it during bootstrap\n  angular.$$minErr = angular.$$minErr || minErr;\n\n  return ensure(angular, 'module', function() {\n    /** @type {Object.<string, angular.Module>} */\n    var modules = {};\n\n    /**\n     * @ngdoc function\n     * @name angular.module\n     * @module ng\n     * @description\n     *\n     * The `angular.module` is a global place for creating, registering and retrieving Angular\n     * modules.\n     * All modules (angular core or 3rd party) that should be available to an application must be\n     * registered using this mechanism.\n     *\n     * When passed two or more arguments, a new module is created.  If passed only one argument, an\n     * existing module (the name passed as the first argument to `module`) is retrieved.\n     *\n     *\n     * # Module\n     *\n     * A module is a collection of services, directives, filters, and configuration information.\n     * `angular.module` is used to configure the {@link auto.$injector $injector}.\n     *\n     * ```js\n     * // Create a new module\n     * var myModule = angular.module('myModule', []);\n     *\n     * // register a new service\n     * myModule.value('appName', 'MyCoolApp');\n     *\n     * // configure existing services inside initialization blocks.\n     * myModule.config(['$locationProvider', function($locationProvider) {\n     *   // Configure existing providers\n     *   $locationProvider.hashPrefix('!');\n     * }]);\n     * ```\n     *\n     * Then you can create an injector and load your modules like this:\n     *\n     * ```js\n     * var injector = angular.injector(['ng', 'myModule'])\n     * ```\n     *\n     * However it's more likely that you'll just use\n     * {@link ng.directive:ngApp ngApp} or\n     * {@link angular.bootstrap} to simplify this process for you.\n     *\n     * @param {!string} name The name of the module to create or retrieve.\n<<<<<* @param {!Array.<string>=} requires If specified then new module is being created. If\n>>>>>*        unspecified then the module is being retrieved for further configuration.\n     * @param {Function} configFn Optional configuration function for the module. Same as\n     *        {@link angular.Module#config Module#config()}.\n     * @returns {module} new module with the {@link angular.Module} api.\n     */\n    return function module(name, requires, configFn) {\n      var assertNotHasOwnProperty = function(name, context) {\n        if (name === 'hasOwnProperty') {\n          throw ngMinErr('badname', 'hasOwnProperty is not a valid {0} name', context);\n        }\n      };\n\n      assertNotHasOwnProperty(name, 'module');\n      if (requires && modules.hasOwnProperty(name)) {\n        modules[name] = null;\n      }\n      return ensure(modules, name, function() {\n        if (!requires) {\n          throw $injectorMinErr('nomod', \"Module '{0}' is not available! You either misspelled \" +\n             \"the module name or forgot to load it. If registering a module ensure that you \" +\n             \"specify the dependencies as the second argument.\", name);\n        }\n\n        /** @type {!Array.<Array.<*>>} */\n        var invokeQueue = [];\n\n        /** @type {!Array.<Function>} */\n        var runBlocks = [];\n\n        var config = invokeLater('$injector', 'invoke');\n\n        /** @type {angular.Module} */\n        var moduleInstance = {\n          // Private state\n          _invokeQueue: invokeQueue,\n          _runBlocks: runBlocks,\n\n          /**\n           * @ngdoc property\n           * @name angular.Module#requires\n           * @module ng\n           * @returns {Array.<string>} List of module names which must be loaded before this module.\n           * @description\n           * Holds the list of modules which the injector will load before the current module is\n           * loaded.\n           */\n          requires: requires,\n\n          /**\n           * @ngdoc property\n           * @name angular.Module#name\n           * @module ng\n           * @returns {string} Name of the module.\n           * @description\n           */\n          name: name,\n\n\n          /**\n           * @ngdoc method\n           * @name angular.Module#provider\n           * @module ng\n           * @param {string} name service name\n           * @param {Function} providerType Construction function for creating new instance of the\n           *                                service.\n           * @description\n           * See {@link auto.$provide#provider $provide.provider()}.\n           */\n          provider: invokeLater('$provide', 'provider'),\n\n          /**\n           * @ngdoc method\n           * @name angular.Module#factory\n           * @module ng\n           * @param {string} name service name\n           * @param {Function} providerFunction Function for creating new instance of the service.\n           * @description\n           * See {@link auto.$provide#factory $provide.factory()}.\n           */\n          factory: invokeLater('$provide', 'factory'),\n\n          /**\n           * @ngdoc method\n           * @name angular.Module#service\n           * @module ng\n           * @param {string} name service name\n           * @param {Function} constructor A constructor function that will be instantiated.\n           * @description\n           * See {@link auto.$provide#service $provide.service()}.\n           */\n          service: invokeLater('$provide', 'service'),\n\n          /**\n           * @ngdoc method\n           * @name angular.Module#value\n           * @module ng\n           * @param {string} name service name\n           * @param {*} object Service instance object.\n           * @description\n           * See {@link auto.$provide#value $provide.value()}.\n           */\n          value: invokeLater('$provide', 'value'),\n\n          /**\n           * @ngdoc method\n           * @name angular.Module#constant\n           * @module ng\n           * @param {string} name constant name\n           * @param {*} object Constant value.\n           * @description\n           * Because the constant are fixed, they get applied before other provide methods.\n           * See {@link auto.$provide#constant $provide.constant()}.\n           */\n          constant: invokeLater('$provide', 'constant', 'unshift'),\n\n          /**\n           * @ngdoc method\n           * @name angular.Module#animation\n           * @module ng\n           * @param {string} name animation name\n           * @param {Function} animationFactory Factory function for creating new instance of an\n           *                                    animation.\n           * @description\n           *\n           * **NOTE**: animations take effect only if the **ngAnimate** module is loaded.\n           *\n           *\n           * Defines an animation hook that can be later used with\n           * {@link ngAnimate.$animate $animate} service and directives that use this service.\n           *\n           * ```js\n           * module.animation('.animation-name', function($inject1, $inject2) {\n           *   return {\n           *     eventName : function(element, done) {\n           *       //code to run the animation\n           *       //once complete, then run done()\n           *       return function cancellationFunction(element) {\n           *         //code to cancel the animation\n           *       }\n           *     }\n           *   }\n           * })\n           * ```\n           *\n           * See {@link ngAnimate.$animateProvider#register $animateProvider.register()} and\n           * {@link ngAnimate ngAnimate module} for more information.\n           */\n          animation: invokeLater('$animateProvider', 'register'),\n\n          /**\n           * @ngdoc method\n           * @name angular.Module#filter\n           * @module ng\n           * @param {string} name Filter name.\n           * @param {Function} filterFactory Factory function for creating new instance of filter.\n           * @description\n           * See {@link ng.$filterProvider#register $filterProvider.register()}.\n           */\n          filter: invokeLater('$filterProvider', 'register'),\n\n          /**\n           * @ngdoc method\n           * @name angular.Module#controller\n           * @module ng\n           * @param {string|Object} name Controller name, or an object map of controllers where the\n           *    keys are the names and the values are the constructors.\n           * @param {Function} constructor Controller constructor function.\n           * @description\n           * See {@link ng.$controllerProvider#register $controllerProvider.register()}.\n           */\n          controller: invokeLater('$controllerProvider', 'register'),\n\n          /**\n           * @ngdoc method\n           * @name angular.Module#directive\n           * @module ng\n           * @param {string|Object} name Directive name, or an object map of directives where the\n           *    keys are the names and the values are the factories.\n           * @param {Function} directiveFactory Factory function for creating new instance of\n           * directives.\n           * @description\n           * See {@link ng.$compileProvider#directive $compileProvider.directive()}.\n           */\n          directive: invokeLater('$compileProvider', 'directive'),\n\n          /**\n           * @ngdoc method\n           * @name angular.Module#config\n           * @module ng\n           * @param {Function} configFn Execute this function on module load. Useful for service\n           *    configuration.\n           * @description\n           * Use this method to register work which needs to be performed on module loading.\n           * For more about how to configure services, see\n           * {@link providers#providers_provider-recipe Provider Recipe}.\n           */\n          config: config,\n\n          /**\n           * @ngdoc method\n           * @name angular.Module#run\n           * @module ng\n           * @param {Function} initializationFn Execute this function after injector creation.\n           *    Useful for application initialization.\n           * @description\n           * Use this method to register work which should be performed when the injector is done\n           * loading all modules.\n           */\n          run: function(block) {\n            runBlocks.push(block);\n            return this;\n          }\n        };\n\n        if (configFn) {\n          config(configFn);\n        }\n\n        return  moduleInstance;\n\n        /**\n         * @param {string} provider\n         * @param {string} method\n         * @param {String=} insertMethod\n         * @returns {angular.Module}\n         */\n        function invokeLater(provider, method, insertMethod) {\n          return function() {\n            invokeQueue[insertMethod || 'push']([provider, method, arguments]);\n            return moduleInstance;\n          };\n        }\n      });\n    };\n  });\n\n}\n\n/* global\n    angularModule: true,\n    version: true,\n\n    $LocaleProvider,\n    $CompileProvider,\n\n    htmlAnchorDirective,\n    inputDirective,\n    inputDirective,\n    formDirective,\n    scriptDirective,\n    selectDirective,\n    styleDirective,\n    optionDirective,\n    ngBindDirective,\n    ngBindHtmlDirective,\n    ngBindTemplateDirective,\n    ngClassDirective,\n    ngClassEvenDirective,\n    ngClassOddDirective,\n    ngCspDirective,\n    ngCloakDirective,\n    ngControllerDirective,\n    ngFormDirective,\n    ngHideDirective,\n    ngIfDirective,\n    ngIncludeDirective,\n    ngIncludeFillContentDirective,\n    ngInitDirective,\n    ngNonBindableDirective,\n    ngPluralizeDirective,\n    ngRepeatDirective,\n    ngShowDirective,\n    ngStyleDirective,\n    ngSwitchDirective,\n    ngSwitchWhenDirective,\n    ngSwitchDefaultDirective,\n    ngOptionsDirective,\n    ngTranscludeDirective,\n    ngModelDirective,\n    ngListDirective,\n    ngChangeDirective,\n    requiredDirective,\n    requiredDirective,\n    ngValueDirective,\n    ngAttributeAliasDirectives,\n    ngEventDirectives,\n\n    $AnchorScrollProvider,\n    $AnimateProvider,\n    $BrowserProvider,\n    $CacheFactoryProvider,\n    $ControllerProvider,\n    $DocumentProvider,\n    $ExceptionHandlerProvider,\n    $FilterProvider,\n    $InterpolateProvider,\n    $IntervalProvider,\n    $HttpProvider,\n    $HttpBackendProvider,\n    $LocationProvider,\n    $LogProvider,\n    $ParseProvider,\n    $RootScopeProvider,\n    $QProvider,\n    $$SanitizeUriProvider,\n    $SceProvider,\n    $SceDelegateProvider,\n    $SnifferProvider,\n    $TemplateCacheProvider,\n    $TimeoutProvider,\n    $$RAFProvider,\n    $$AsyncCallbackProvider,\n    $WindowProvider\n*/\n\n\n/**\n * @ngdoc object\n * @name angular.version\n * @module ng\n * @description\n * An object that contains information about the current AngularJS version. This object has the\n * following properties:\n *\n * - `full` – `{string}` – Full version string, such as \"0.9.18\".\n * - `major` – `{number}` – Major version number, such as \"0\".\n * - `minor` – `{number}` – Minor version number, such as \"9\".\n * - `dot` – `{number}` – Dot version number, such as \"18\".\n * - `codeName` – `{string}` – Code name of the release, such as \"jiggling-armfat\".\n */\nvar version = {\n  full: '1.2.17',    // all of these placeholder strings will be replaced by grunt's\n  major: 1,    // package task\n  minor: 2,\n  dot: 17,\n  codeName: 'quantum-disentanglement'\n};\n\n\nfunction publishExternalAPI(angular){\n  extend(angular, {\n    'bootstrap': bootstrap,\n    'copy': copy,\n    'extend': extend,\n    'equals': equals,\n    'element': jqLite,\n    'forEach': forEach,\n    'injector': createInjector,\n    'noop':noop,\n    'bind':bind,\n    'toJson': toJson,\n    'fromJson': fromJson,\n    'identity':identity,\n    'isUndefined': isUndefined,\n    'isDefined': isDefined,\n    'isString': isString,\n    'isFunction': isFunction,\n    'isObject': isObject,\n    'isNumber': isNumber,\n    'isElement': isElement,\n    'isArray': isArray,\n    'version': version,\n    'isDate': isDate,\n    'lowercase': lowercase,\n    'uppercase': uppercase,\n    'callbacks': {counter: 0},\n    '$$minErr': minErr,\n    '$$csp': csp\n  });\n\n  angularModule = setupModuleLoader(window);\n  try {\n    angularModule('ngLocale');\n  } catch (e) {\n    angularModule('ngLocale', []).provider('$locale', $LocaleProvider);\n  }\n\n  angularModule('ng', ['ngLocale'], ['$provide',\n    function ngModule($provide) {\n      // $$sanitizeUriProvider needs to be before $compileProvider as it is used by it.\n      $provide.provider({\n        $$sanitizeUri: $$SanitizeUriProvider\n      });\n      $provide.provider('$compile', $CompileProvider).\n        directive({\n            a: htmlAnchorDirective,\n            input: inputDirective,\n            textarea: inputDirective,\n            form: formDirective,\n            script: scriptDirective,\n            select: selectDirective,\n            style: styleDirective,\n            option: optionDirective,\n            ngBind: ngBindDirective,\n            ngBindHtml: ngBindHtmlDirective,\n            ngBindTemplate: ngBindTemplateDirective,\n            ngClass: ngClassDirective,\n            ngClassEven: ngClassEvenDirective,\n            ngClassOdd: ngClassOddDirective,\n            ngCloak: ngCloakDirective,\n            ngController: ngControllerDirective,\n            ngForm: ngFormDirective,\n            ngHide: ngHideDirective,\n            ngIf: ngIfDirective,\n            ngInclude: ngIncludeDirective,\n            ngInit: ngInitDirective,\n            ngNonBindable: ngNonBindableDirective,\n            ngPluralize: ngPluralizeDirective,\n            ngRepeat: ngRepeatDirective,\n            ngShow: ngShowDirective,\n            ngStyle: ngStyleDirective,\n            ngSwitch: ngSwitchDirective,\n            ngSwitchWhen: ngSwitchWhenDirective,\n            ngSwitchDefault: ngSwitchDefaultDirective,\n            ngOptions: ngOptionsDirective,\n            ngTransclude: ngTranscludeDirective,\n            ngModel: ngModelDirective,\n            ngList: ngListDirective,\n            ngChange: ngChangeDirective,\n            required: requiredDirective,\n            ngRequired: requiredDirective,\n            ngValue: ngValueDirective\n        }).\n        directive({\n          ngInclude: ngIncludeFillContentDirective\n        }).\n        directive(ngAttributeAliasDirectives).\n        directive(ngEventDirectives);\n      $provide.provider({\n        $anchorScroll: $AnchorScrollProvider,\n        $animate: $AnimateProvider,\n        $browser: $BrowserProvider,\n        $cacheFactory: $CacheFactoryProvider,\n        $controller: $ControllerProvider,\n        $document: $DocumentProvider,\n        $exceptionHandler: $ExceptionHandlerProvider,\n        $filter: $FilterProvider,\n        $interpolate: $InterpolateProvider,\n        $interval: $IntervalProvider,\n        $http: $HttpProvider,\n        $httpBackend: $HttpBackendProvider,\n        $location: $LocationProvider,\n        $log: $LogProvider,\n        $parse: $ParseProvider,\n        $rootScope: $RootScopeProvider,\n        $q: $QProvider,\n        $sce: $SceProvider,\n        $sceDelegate: $SceDelegateProvider,\n        $sniffer: $SnifferProvider,\n        $templateCache: $TemplateCacheProvider,\n        $timeout: $TimeoutProvider,\n        $window: $WindowProvider,\n        $$rAF: $$RAFProvider,\n        $$asyncCallback : $$AsyncCallbackProvider\n      });\n    }\n  ]);\n}\n\n/* global\n\n  -JQLitePrototype,\n  -addEventListenerFn,\n  -removeEventListenerFn,\n  -BOOLEAN_ATTR\n*/\n\n//////////////////////////////////\n//JQLite\n//////////////////////////////////\n\n/**\n * @ngdoc function\n * @name angular.element\n * @module ng\n * @kind function\n *\n * @description\n * Wraps a raw DOM element or HTML string as a [jQuery](http://jquery.com) element.\n *\n * If jQuery is available, `angular.element` is an alias for the\n * [jQuery](http://api.jquery.com/jQuery/) function. If jQuery is not available, `angular.element`\n * delegates to Angular's built-in subset of jQuery, called \"jQuery lite\" or \"jqLite.\"\n *\n * <div class=\"alert alert-success\">jqLite is a tiny, API-compatible subset of jQuery that allows\n * Angular to manipulate the DOM in a cross-browser compatible way. **jqLite** implements only the most\n * commonly needed functionality with the goal of having a very small footprint.</div>\n *\n * To use jQuery, simply load it before `DOMContentLoaded` event fired.\n *\n * <div class=\"alert\">**Note:** all element references in Angular are always wrapped with jQuery or\n * jqLite; they are never raw DOM references.</div>\n *\n * ## Angular's jqLite\n * jqLite provides only the following jQuery methods:\n *\n * - [`addClass()`](http://api.jquery.com/addClass/)\n * - [`after()`](http://api.jquery.com/after/)\n * - [`append()`](http://api.jquery.com/append/)\n * - [`attr()`](http://api.jquery.com/attr/)\n * - [`bind()`](http://api.jquery.com/bind/) - Does not support namespaces, selectors or eventData\n * - [`children()`](http://api.jquery.com/children/) - Does not support selectors\n * - [`clone()`](http://api.jquery.com/clone/)\n * - [`contents()`](http://api.jquery.com/contents/)\n * - [`css()`](http://api.jquery.com/css/)\n * - [`data()`](http://api.jquery.com/data/)\n * - [`empty()`](http://api.jquery.com/empty/)\n * - [`eq()`](http://api.jquery.com/eq/)\n * - [`find()`](http://api.jquery.com/find/) - Limited to lookups by tag name\n * - [`hasClass()`](http://api.jquery.com/hasClass/)\n * - [`html()`](http://api.jquery.com/html/)\n * - [`next()`](http://api.jquery.com/next/) - Does not support selectors\n * - [`on()`](http://api.jquery.com/on/) - Does not support namespaces, selectors or eventData\n * - [`off()`](http://api.jquery.com/off/) - Does not support namespaces or selectors\n * - [`one()`](http://api.jquery.com/one/) - Does not support namespaces or selectors\n * - [`parent()`](http://api.jquery.com/parent/) - Does not support selectors\n * - [`prepend()`](http://api.jquery.com/prepend/)\n * - [`prop()`](http://api.jquery.com/prop/)\n * - [`ready()`](http://api.jquery.com/ready/)\n * - [`remove()`](http://api.jquery.com/remove/)\n * - [`removeAttr()`](http://api.jquery.com/removeAttr/)\n * - [`removeClass()`](http://api.jquery.com/removeClass/)\n * - [`removeData()`](http://api.jquery.com/removeData/)\n * - [`replaceWith()`](http://api.jquery.com/replaceWith/)\n * - [`text()`](http://api.jquery.com/text/)\n * - [`toggleClass()`](http://api.jquery.com/toggleClass/)\n * - [`triggerHandler()`](http://api.jquery.com/triggerHandler/) - Passes a dummy event object to handlers.\n * - [`unbind()`](http://api.jquery.com/unbind/) - Does not support namespaces\n * - [`val()`](http://api.jquery.com/val/)\n * - [`wrap()`](http://api.jquery.com/wrap/)\n *\n * ## jQuery/jqLite Extras\n * Angular also provides the following additional methods and events to both jQuery and jqLite:\n *\n * ### Events\n * - `$destroy` - AngularJS intercepts all jqLite/jQuery's DOM destruction apis and fires this event\n *    on all DOM nodes being removed.  This can be used to clean up any 3rd party bindings to the DOM\n *    element before it is removed.\n *\n * ### Methods\n * - `controller(name)` - retrieves the controller of the current element or its parent. By default\n *   retrieves controller associated with the `ngController` directive. If `name` is provided as\n *   camelCase directive name, then the controller for this directive will be retrieved (e.g.\n *   `'ngModel'`).\n * - `injector()` - retrieves the injector of the current element or its parent.\n * - `scope()` - retrieves the {@link ng.$rootScope.Scope scope} of the current\n *   element or its parent.\n * - `isolateScope()` - retrieves an isolate {@link ng.$rootScope.Scope scope} if one is attached directly to the\n *   current element. This getter should be used only on elements that contain a directive which starts a new isolate\n *   scope. Calling `scope()` on this element always returns the original non-isolate scope.\n * - `inheritedData()` - same as `data()`, but walks up the DOM until a value is found or the top\n *   parent element is reached.\n *\n * @param {string|DOMElement} element HTML string or DOMElement to be wrapped into jQuery.\n * @returns {Object} jQuery object.\n */\n\nvar jqCache = JQLite.cache = {},\n    jqName = JQLite.expando = 'ng' + new Date().getTime(),\n    jqId = 1,\n    addEventListenerFn = (window.document.addEventListener\n      ? function(element, type, fn) {element.addEventListener(type, fn, false);}\n      : function(element, type, fn) {element.attachEvent('on' + type, fn);}),\n    removeEventListenerFn = (window.document.removeEventListener\n      ? function(element, type, fn) {element.removeEventListener(type, fn, false); }\n      : function(element, type, fn) {element.detachEvent('on' + type, fn); });\n\n/*\n * !!! This is an undocumented \"private\" function !!!\n */\nvar jqData = JQLite._data = function(node) {\n  //jQuery always returns an object on cache miss\n  return this.cache[node[this.expando]] || {};\n};\n\nfunction jqNextId() { return ++jqId; }\n\n\nvar SPECIAL_CHARS_REGEXP = /([\\:\\-\\_]+(.))/g;\nvar MOZ_HACK_REGEXP = /^moz([A-Z])/;\nvar jqLiteMinErr = minErr('jqLite');\n\n/**\n * Converts snake_case to camelCase.\n * Also there is special case for Moz prefix starting with upper case letter.\n * @param name Name to normalize\n */\nfunction camelCase(name) {\n  return name.\n    replace(SPECIAL_CHARS_REGEXP, function(_, separator, letter, offset) {\n      return offset ? letter.toUpperCase() : letter;\n    }).\n    replace(MOZ_HACK_REGEXP, 'Moz$1');\n}\n\n/////////////////////////////////////////////\n// jQuery mutation patch\n//\n// In conjunction with bindJQuery intercepts all jQuery's DOM destruction apis and fires a\n// $destroy event on all DOM nodes being removed.\n//\n/////////////////////////////////////////////\n\nfunction jqLitePatchJQueryRemove(name, dispatchThis, filterElems, getterIfNoArguments) {\n  var originalJqFn = jQuery.fn[name];\n  originalJqFn = originalJqFn.$original || originalJqFn;\n  removePatch.$original = originalJqFn;\n  jQuery.fn[name] = removePatch;\n\n  function removePatch(param) {\n    // jshint -W040\n    var list = filterElems && param ? [this.filter(param)] : [this],\n        fireEvent = dispatchThis,\n        set, setIndex, setLength,\n        element, childIndex, childLength, children;\n\n    if (!getterIfNoArguments || param != null) {\n      while(list.length) {\n        set = list.shift();\n        for(setIndex = 0, setLength = set.length; setIndex < setLength; setIndex++) {\n          element = jqLite(set[setIndex]);\n          if (fireEvent) {\n            element.triggerHandler('$destroy');\n          } else {\n            fireEvent = !fireEvent;\n          }\n          for(childIndex = 0, childLength = (children = element.children()).length;\n              childIndex < childLength;\n              childIndex++) {\n            list.push(jQuery(children[childIndex]));\n          }\n        }\n      }\n    }\n    return originalJqFn.apply(this, arguments);\n  }\n}\n\nvar SINGLE_TAG_REGEXP = /^<(\\w+)\\s*\\/?>(?:<\\/\\1>|)$/;\nvar HTML_REGEXP = /<|&#?\\w+;/;\nvar TAG_NAME_REGEXP = /<([\\w:]+)/;\nvar XHTML_TAG_REGEXP = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\\w:]+)[^>]*)\\/>/gi;\n\nvar wrapMap = {\n  'option': [1, '<select multiple=\"multiple\">', '</select>'],\n\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\nwrapMap.optgroup = wrapMap.option;\nwrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;\nwrapMap.th = wrapMap.td;\n\nfunction jqLiteIsTextNode(html) {\n  return !HTML_REGEXP.test(html);\n}\n\nfunction jqLiteBuildFragment(html, context) {\n  var elem, tmp, tag, wrap,\n      fragment = context.createDocumentFragment(),\n      nodes = [], i, j, jj;\n\n  if (jqLiteIsTextNode(html)) {\n    // Convert non-html into a text node\n    nodes.push(context.createTextNode(html));\n  } else {\n    tmp = fragment.appendChild(context.createElement('div'));\n    // Convert html into DOM nodes\n    tag = (TAG_NAME_REGEXP.exec(html) || [\"\", \"\"])[1].toLowerCase();\n    wrap = wrapMap[tag] || wrapMap._default;\n    tmp.innerHTML = '<div>&#160;</div>' +\n      wrap[1] + html.replace(XHTML_TAG_REGEXP, \"<$1></$2>\") + wrap[2];\n    tmp.removeChild(tmp.firstChild);\n\n    // Descend through wrappers to the right content\n    i = wrap[0];\n    while (i--) {\n      tmp = tmp.lastChild;\n    }\n\n    for (j=0, jj=tmp.childNodes.length; j<jj; ++j) nodes.push(tmp.childNodes[j]);\n\n    tmp = fragment.firstChild;\n    tmp.textContent = \"\";\n  }\n\n  // Remove wrapper from fragment\n  fragment.textContent = \"\";\n  fragment.innerHTML = \"\"; // Clear inner HTML\n  return nodes;\n}\n\nfunction jqLiteParseHTML(html, context) {\n  context = context || document;\n  var parsed;\n\n  if ((parsed = SINGLE_TAG_REGEXP.exec(html))) {\n    return [context.createElement(parsed[1])];\n  }\n\n  return jqLiteBuildFragment(html, context);\n}\n\n/////////////////////////////////////////////\nfunction JQLite(element) {\n  if (element instanceof JQLite) {\n    return element;\n  }\n  if (isString(element)) {\n    element = trim(element);\n  }\n  if (!(this instanceof JQLite)) {\n    if (isString(element) && element.charAt(0) != '<') {\n      throw jqLiteMinErr('nosel', 'Looking up elements via selectors is not supported by jqLite! See: http://docs.angularjs.org/api/angular.element');\n    }\n    return new JQLite(element);\n  }\n\n  if (isString(element)) {\n    jqLiteAddNodes(this, jqLiteParseHTML(element));\n    var fragment = jqLite(document.createDocumentFragment());\n    fragment.append(this);\n  } else {\n    jqLiteAddNodes(this, element);\n  }\n}\n\nfunction jqLiteClone(element) {\n  return element.cloneNode(true);\n}\n\nfunction jqLiteDealoc(element){\n  jqLiteRemoveData(element);\n  for ( var i = 0, children = element.childNodes || []; i < children.length; i++) {\n    jqLiteDealoc(children[i]);\n  }\n}\n\nfunction jqLiteOff(element, type, fn, unsupported) {\n  if (isDefined(unsupported)) throw jqLiteMinErr('offargs', 'jqLite#off() does not support the `selector` argument');\n\n  var events = jqLiteExpandoStore(element, 'events'),\n      handle = jqLiteExpandoStore(element, 'handle');\n\n  if (!handle) return; //no listeners registered\n\n  if (isUndefined(type)) {\n    forEach(events, function(eventHandler, type) {\n      removeEventListenerFn(element, type, eventHandler);\n      delete events[type];\n    });\n  } else {\n    forEach(type.split(' '), function(type) {\n      if (isUndefined(fn)) {\n        removeEventListenerFn(element, type, events[type]);\n        delete events[type];\n      } else {\n        arrayRemove(events[type] || [], fn);\n      }\n    });\n  }\n}\n\nfunction jqLiteRemoveData(element, name) {\n  var expandoId = element[jqName],\n      expandoStore = jqCache[expandoId];\n\n  if (expandoStore) {\n    if (name) {\n      delete jqCache[expandoId].data[name];\n      return;\n    }\n\n    if (expandoStore.handle) {\n      expandoStore.events.$destroy && expandoStore.handle({}, '$destroy');\n      jqLiteOff(element);\n    }\n    delete jqCache[expandoId];\n    element[jqName] = undefined; // ie does not allow deletion of attributes on elements.\n  }\n}\n\nfunction jqLiteExpandoStore(element, key, value) {\n  var expandoId = element[jqName],\n      expandoStore = jqCache[expandoId || -1];\n\n  if (isDefined(value)) {\n    if (!expandoStore) {\n      element[jqName] = expandoId = jqNextId();\n      expandoStore = jqCache[expandoId] = {};\n    }\n    expandoStore[key] = value;\n  } else {\n    return expandoStore && expandoStore[key];\n  }\n}\n\nfunction jqLiteData(element, key, value) {\n  var data = jqLiteExpandoStore(element, 'data'),\n      isSetter = isDefined(value),\n      keyDefined = !isSetter && isDefined(key),\n      isSimpleGetter = keyDefined && !isObject(key);\n\n  if (!data && !isSimpleGetter) {\n    jqLiteExpandoStore(element, 'data', data = {});\n  }\n\n  if (isSetter) {\n    data[key] = value;\n  } else {\n    if (keyDefined) {\n      if (isSimpleGetter) {\n        // don't create data in this case.\n        return data && data[key];\n      } else {\n        extend(data, key);\n      }\n    } else {\n      return data;\n    }\n  }\n}\n\nfunction jqLiteHasClass(element, selector) {\n  if (!element.getAttribute) return false;\n  return ((\" \" + (element.getAttribute('class') || '') + \" \").replace(/[\\n\\t]/g, \" \").\n      indexOf( \" \" + selector + \" \" ) > -1);\n}\n\nfunction jqLiteRemoveClass(element, cssClasses) {\n  if (cssClasses && element.setAttribute) {\n    forEach(cssClasses.split(' '), function(cssClass) {\n      element.setAttribute('class', trim(\n          (\" \" + (element.getAttribute('class') || '') + \" \")\n          .replace(/[\\n\\t]/g, \" \")\n          .replace(\" \" + trim(cssClass) + \" \", \" \"))\n      );\n    });\n  }\n}\n\nfunction jqLiteAddClass(element, cssClasses) {\n  if (cssClasses && element.setAttribute) {\n    var existingClasses = (' ' + (element.getAttribute('class') || '') + ' ')\n                            .replace(/[\\n\\t]/g, \" \");\n\n    forEach(cssClasses.split(' '), function(cssClass) {\n      cssClass = trim(cssClass);\n      if (existingClasses.indexOf(' ' + cssClass + ' ') === -1) {\n        existingClasses += cssClass + ' ';\n      }\n    });\n\n    element.setAttribute('class', trim(existingClasses));\n  }\n}\n\nfunction jqLiteAddNodes(root, elements) {\n  if (elements) {\n    elements = (!elements.nodeName && isDefined(elements.length) && !isWindow(elements))\n      ? elements\n      : [ elements ];\n    for(var i=0; i < elements.length; i++) {\n      root.push(elements[i]);\n    }\n  }\n}\n\nfunction jqLiteController(element, name) {\n  return jqLiteInheritedData(element, '$' + (name || 'ngController' ) + 'Controller');\n}\n\nfunction jqLiteInheritedData(element, name, value) {\n  element = jqLite(element);\n\n  // if element is the document object work with the html element instead\n  // this makes $(document).scope() possible\n  if(element[0].nodeType == 9) {\n    element = element.find('html');\n  }\n  var names = isArray(name) ? name : [name];\n\n  while (element.length) {\n    var node = element[0];\n    for (var i = 0, ii = names.length; i < ii; i++) {\n      if ((value = element.data(names[i])) !== undefined) return value;\n    }\n\n    // If dealing with a document fragment node with a host element, and no parent, use the host\n    // element as the parent. This enables directives within a Shadow DOM or polyfilled Shadow DOM\n    // to lookup parent controllers.\n    element = jqLite(node.parentNode || (node.nodeType === 11 && node.host));\n  }\n}\n\nfunction jqLiteEmpty(element) {\n  for (var i = 0, childNodes = element.childNodes; i < childNodes.length; i++) {\n    jqLiteDealoc(childNodes[i]);\n  }\n  while (element.firstChild) {\n    element.removeChild(element.firstChild);\n  }\n}\n\n//////////////////////////////////////////\n// Functions which are declared directly.\n//////////////////////////////////////////\nvar JQLitePrototype = JQLite.prototype = {\n  ready: function(fn) {\n    var fired = false;\n\n    function trigger() {\n      if (fired) return;\n      fired = true;\n      fn();\n    }\n\n    // check if document already is loaded\n    if (document.readyState === 'complete'){\n      setTimeout(trigger);\n    } else {\n      this.on('DOMContentLoaded', trigger); // works for modern browsers and IE9\n      // we can not use jqLite since we are not done loading and jQuery could be loaded later.\n      // jshint -W064\n      JQLite(window).on('load', trigger); // fallback to window.onload for others\n      // jshint +W064\n    }\n  },\n  toString: function() {\n    var value = [];\n    forEach(this, function(e){ value.push('' + e);});\n    return '[' + value.join(', ') + ']';\n  },\n\n  eq: function(index) {\n      return (index >= 0) ? jqLite(this[index]) : jqLite(this[this.length + index]);\n  },\n\n  length: 0,\n  push: push,\n  sort: [].sort,\n  splice: [].splice\n};\n\n//////////////////////////////////////////\n// Functions iterating getter/setters.\n// these functions return self on setter and\n// value on get.\n//////////////////////////////////////////\nvar BOOLEAN_ATTR = {};\nforEach('multiple,selected,checked,disabled,readOnly,required,open'.split(','), function(value) {\n  BOOLEAN_ATTR[lowercase(value)] = value;\n});\nvar BOOLEAN_ELEMENTS = {};\nforEach('input,select,option,textarea,button,form,details'.split(','), function(value) {\n  BOOLEAN_ELEMENTS[uppercase(value)] = true;\n});\n\nfunction getBooleanAttrName(element, name) {\n  // check dom last since we will most likely fail on name\n  var booleanAttr = BOOLEAN_ATTR[name.toLowerCase()];\n\n  // booleanAttr is here twice to minimize DOM access\n  return booleanAttr && BOOLEAN_ELEMENTS[element.nodeName] && booleanAttr;\n}\n\nforEach({\n  data: jqLiteData,\n  inheritedData: jqLiteInheritedData,\n\n  scope: function(element) {\n    // Can't use jqLiteData here directly so we stay compatible with jQuery!\n    return jqLite(element).data('$scope') || jqLiteInheritedData(element.parentNode || element, ['$isolateScope', '$scope']);\n  },\n\n  isolateScope: function(element) {\n    // Can't use jqLiteData here directly so we stay compatible with jQuery!\n    return jqLite(element).data('$isolateScope') || jqLite(element).data('$isolateScopeNoTemplate');\n  },\n\n  controller: jqLiteController,\n\n  injector: function(element) {\n    return jqLiteInheritedData(element, '$injector');\n  },\n\n  removeAttr: function(element,name) {\n    element.removeAttribute(name);\n  },\n\n  hasClass: jqLiteHasClass,\n\n  css: function(element, name, value) {\n    name = camelCase(name);\n\n    if (isDefined(value)) {\n      element.style[name] = value;\n    } else {\n      var val;\n\n      if (msie <= 8) {\n        // this is some IE specific weirdness that jQuery 1.6.4 does not sure why\n        val = element.currentStyle && element.currentStyle[name];\n        if (val === '') val = 'auto';\n      }\n\n      val = val || element.style[name];\n\n      if (msie <= 8) {\n        // jquery weirdness :-/\n        val = (val === '') ? undefined : val;\n      }\n\n      return  val;\n    }\n  },\n\n  attr: function(element, name, value){\n    var lowercasedName = lowercase(name);\n    if (BOOLEAN_ATTR[lowercasedName]) {\n      if (isDefined(value)) {\n        if (!!value) {\n          element[name] = true;\n          element.setAttribute(name, lowercasedName);\n        } else {\n          element[name] = false;\n          element.removeAttribute(lowercasedName);\n        }\n      } else {\n        return (element[name] ||\n                 (element.attributes.getNamedItem(name)|| noop).specified)\n               ? lowercasedName\n               : undefined;\n      }\n    } else if (isDefined(value)) {\n      element.setAttribute(name, value);\n    } else if (element.getAttribute) {\n      // the extra argument \"2\" is to get the right thing for a.href in IE, see jQuery code\n      // some elements (e.g. Document) don't have get attribute, so return undefined\n      var ret = element.getAttribute(name, 2);\n      // normalize non-existing attributes to undefined (as jQuery)\n      return ret === null ? undefined : ret;\n    }\n  },\n\n  prop: function(element, name, value) {\n    if (isDefined(value)) {\n      element[name] = value;\n    } else {\n      return element[name];\n    }\n  },\n\n  text: (function() {\n    var NODE_TYPE_TEXT_PROPERTY = [];\n    if (msie < 9) {\n      NODE_TYPE_TEXT_PROPERTY[1] = 'innerText';    /** Element **/\n      NODE_TYPE_TEXT_PROPERTY[3] = 'nodeValue';    /** Text **/\n    } else {\n      NODE_TYPE_TEXT_PROPERTY[1] =                 /** Element **/\n      NODE_TYPE_TEXT_PROPERTY[3] = 'textContent';  /** Text **/\n    }\n    getText.$dv = '';\n    return getText;\n\n    function getText(element, value) {\n      var textProp = NODE_TYPE_TEXT_PROPERTY[element.nodeType];\n      if (isUndefined(value)) {\n        return textProp ? element[textProp] : '';\n      }\n      element[textProp] = value;\n    }\n  })(),\n\n  val: function(element, value) {\n    if (isUndefined(value)) {\n      if (nodeName_(element) === 'SELECT' && element.multiple) {\n        var result = [];\n        forEach(element.options, function (option) {\n          if (option.selected) {\n            result.push(option.value || option.text);\n          }\n        });\n        return result.length === 0 ? null : result;\n      }\n      return element.value;\n    }\n    element.value = value;\n  },\n\n  html: function(element, value) {\n    if (isUndefined(value)) {\n      return element.innerHTML;\n    }\n    for (var i = 0, childNodes = element.childNodes; i < childNodes.length; i++) {\n      jqLiteDealoc(childNodes[i]);\n    }\n    element.innerHTML = value;\n  },\n\n  empty: jqLiteEmpty\n}, function(fn, name){\n  /**\n   * Properties: writes return selection, reads return first value\n   */\n  JQLite.prototype[name] = function(arg1, arg2) {\n    var i, key;\n\n    // jqLiteHasClass has only two arguments, but is a getter-only fn, so we need to special-case it\n    // in a way that survives minification.\n    // jqLiteEmpty takes no arguments but is a setter.\n    if (fn !== jqLiteEmpty &&\n        (((fn.length == 2 && (fn !== jqLiteHasClass && fn !== jqLiteController)) ? arg1 : arg2) === undefined)) {\n      if (isObject(arg1)) {\n\n        // we are a write, but the object properties are the key/values\n        for (i = 0; i < this.length; i++) {\n          if (fn === jqLiteData) {\n            // data() takes the whole object in jQuery\n            fn(this[i], arg1);\n          } else {\n            for (key in arg1) {\n              fn(this[i], key, arg1[key]);\n            }\n          }\n        }\n        // return self for chaining\n        return this;\n      } else {\n        // we are a read, so read the first child.\n        var value = fn.$dv;\n        // Only if we have $dv do we iterate over all, otherwise it is just the first element.\n        var jj = (value === undefined) ? Math.min(this.length, 1) : this.length;\n        for (var j = 0; j < jj; j++) {\n          var nodeValue = fn(this[j], arg1, arg2);\n          value = value ? value + nodeValue : nodeValue;\n        }\n        return value;\n      }\n    } else {\n      // we are a write, so apply to all children\n      for (i = 0; i < this.length; i++) {\n        fn(this[i], arg1, arg2);\n      }\n      // return self for chaining\n      return this;\n    }\n  };\n});\n\nfunction createEventHandler(element, events) {\n  var eventHandler = function (event, type) {\n    if (!event.preventDefault) {\n      event.preventDefault = function() {\n        event.returnValue = false; //ie\n      };\n    }\n\n    if (!event.stopPropagation) {\n      event.stopPropagation = function() {\n        event.cancelBubble = true; //ie\n      };\n    }\n\n    if (!event.target) {\n      event.target = event.srcElement || document;\n    }\n\n    if (isUndefined(event.defaultPrevented)) {\n      var prevent = event.preventDefault;\n      event.preventDefault = function() {\n        event.defaultPrevented = true;\n        prevent.call(event);\n      };\n      event.defaultPrevented = false;\n    }\n\n    event.isDefaultPrevented = function() {\n      return event.defaultPrevented || event.returnValue === false;\n    };\n\n    // Copy event handlers in case event handlers array is modified during execution.\n    var eventHandlersCopy = shallowCopy(events[type || event.type] || []);\n\n    forEach(eventHandlersCopy, function(fn) {\n      fn.call(element, event);\n    });\n\n    // Remove monkey-patched methods (IE),\n    // as they would cause memory leaks in IE8.\n    if (msie <= 8) {\n      // IE7/8 does not allow to delete property on native object\n      event.preventDefault = null;\n      event.stopPropagation = null;\n      event.isDefaultPrevented = null;\n    } else {\n      // It shouldn't affect normal browsers (native methods are defined on prototype).\n      delete event.preventDefault;\n      delete event.stopPropagation;\n      delete event.isDefaultPrevented;\n    }\n  };\n  eventHandler.elem = element;\n  return eventHandler;\n}\n\n//////////////////////////////////////////\n// Functions iterating traversal.\n// These functions chain results into a single\n// selector.\n//////////////////////////////////////////\nforEach({\n  removeData: jqLiteRemoveData,\n\n  dealoc: jqLiteDealoc,\n\n  on: function onFn(element, type, fn, unsupported){\n    if (isDefined(unsupported)) throw jqLiteMinErr('onargs', 'jqLite#on() does not support the `selector` or `eventData` parameters');\n\n    var events = jqLiteExpandoStore(element, 'events'),\n        handle = jqLiteExpandoStore(element, 'handle');\n\n    if (!events) jqLiteExpandoStore(element, 'events', events = {});\n    if (!handle) jqLiteExpandoStore(element, 'handle', handle = createEventHandler(element, events));\n\n    forEach(type.split(' '), function(type){\n      var eventFns = events[type];\n\n      if (!eventFns) {\n        if (type == 'mouseenter' || type == 'mouseleave') {\n          var contains = document.body.contains || document.body.compareDocumentPosition ?\n          function( a, b ) {\n            // jshint bitwise: false\n            var adown = a.nodeType === 9 ? a.documentElement : a,\n            bup = b && b.parentNode;\n            return a === bup || !!( bup && bup.nodeType === 1 && (\n              adown.contains ?\n              adown.contains( bup ) :\n              a.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16\n              ));\n            } :\n            function( a, b ) {\n              if ( b ) {\n                while ( (b = b.parentNode) ) {\n                  if ( b === a ) {\n                    return true;\n                  }\n                }\n              }\n              return false;\n            };\n\n          events[type] = [];\n\n          // Refer to jQuery's implementation of mouseenter & mouseleave\n          // Read about mouseenter and mouseleave:\n          // http://www.quirksmode.org/js/events_mouse.html#link8\n          var eventmap = { mouseleave : \"mouseout\", mouseenter : \"mouseover\"};\n\n          onFn(element, eventmap[type], function(event) {\n            var target = this, related = event.relatedTarget;\n            // For mousenter/leave call the handler if related is outside the target.\n            // NB: No relatedTarget if the mouse left/entered the browser window\n            if ( !related || (related !== target && !contains(target, related)) ){\n              handle(event, type);\n            }\n          });\n\n        } else {\n          addEventListenerFn(element, type, handle);\n          events[type] = [];\n        }\n        eventFns = events[type];\n      }\n      eventFns.push(fn);\n    });\n  },\n\n  off: jqLiteOff,\n\n  one: function(element, type, fn) {\n    element = jqLite(element);\n\n    //add the listener twice so that when it is called\n    //you can remove the original function and still be\n    //able to call element.off(ev, fn) normally\n    element.on(type, function onFn() {\n      element.off(type, fn);\n      element.off(type, onFn);\n    });\n    element.on(type, fn);\n  },\n\n  replaceWith: function(element, replaceNode) {\n    var index, parent = element.parentNode;\n    jqLiteDealoc(element);\n    forEach(new JQLite(replaceNode), function(node){\n      if (index) {\n        parent.insertBefore(node, index.nextSibling);\n      } else {\n        parent.replaceChild(node, element);\n      }\n      index = node;\n    });\n  },\n\n  children: function(element) {\n    var children = [];\n    forEach(element.childNodes, function(element){\n      if (element.nodeType === 1)\n        children.push(element);\n    });\n    return children;\n  },\n\n  contents: function(element) {\n    return element.contentDocument || element.childNodes || [];\n  },\n\n  append: function(element, node) {\n    forEach(new JQLite(node), function(child){\n      if (element.nodeType === 1 || element.nodeType === 11) {\n        element.appendChild(child);\n      }\n    });\n  },\n\n  prepend: function(element, node) {\n    if (element.nodeType === 1) {\n      var index = element.firstChild;\n      forEach(new JQLite(node), function(child){\n        element.insertBefore(child, index);\n      });\n    }\n  },\n\n  wrap: function(element, wrapNode) {\n    wrapNode = jqLite(wrapNode)[0];\n    var parent = element.parentNode;\n    if (parent) {\n      parent.replaceChild(wrapNode, element);\n    }\n    wrapNode.appendChild(element);\n  },\n\n  remove: function(element) {\n    jqLiteDealoc(element);\n    var parent = element.parentNode;\n    if (parent) parent.removeChild(element);\n  },\n\n  after: function(element, newElement) {\n    var index = element, parent = element.parentNode;\n    forEach(new JQLite(newElement), function(node){\n      parent.insertBefore(node, index.nextSibling);\n      index = node;\n    });\n  },\n\n  addClass: jqLiteAddClass,\n  removeClass: jqLiteRemoveClass,\n\n  toggleClass: function(element, selector, condition) {\n    if (selector) {\n      forEach(selector.split(' '), function(className){\n        var classCondition = condition;\n        if (isUndefined(classCondition)) {\n          classCondition = !jqLiteHasClass(element, className);\n        }\n        (classCondition ? jqLiteAddClass : jqLiteRemoveClass)(element, className);\n      });\n    }\n  },\n\n  parent: function(element) {\n    var parent = element.parentNode;\n    return parent && parent.nodeType !== 11 ? parent : null;\n  },\n\n  next: function(element) {\n    if (element.nextElementSibling) {\n      return element.nextElementSibling;\n    }\n\n    // IE8 doesn't have nextElementSibling\n    var elm = element.nextSibling;\n    while (elm != null && elm.nodeType !== 1) {\n      elm = elm.nextSibling;\n    }\n    return elm;\n  },\n\n  find: function(element, selector) {\n    if (element.getElementsByTagName) {\n      return element.getElementsByTagName(selector);\n    } else {\n      return [];\n    }\n  },\n\n  clone: jqLiteClone,\n\n  triggerHandler: function(element, eventName, eventData) {\n    var eventFns = (jqLiteExpandoStore(element, 'events') || {})[eventName];\n\n    eventData = eventData || [];\n\n    var event = [{\n      preventDefault: noop,\n      stopPropagation: noop\n    }];\n\n    forEach(eventFns, function(fn) {\n      fn.apply(element, event.concat(eventData));\n    });\n  }\n}, function(fn, name){\n  /**\n   * chaining functions\n   */\n  JQLite.prototype[name] = function(arg1, arg2, arg3) {\n    var value;\n    for(var i=0; i < this.length; i++) {\n      if (isUndefined(value)) {\n        value = fn(this[i], arg1, arg2, arg3);\n        if (isDefined(value)) {\n          // any function which returns a value needs to be wrapped\n          value = jqLite(value);\n        }\n      } else {\n        jqLiteAddNodes(value, fn(this[i], arg1, arg2, arg3));\n      }\n    }\n    return isDefined(value) ? value : this;\n  };\n\n  // bind legacy bind/unbind to on/off\n  JQLite.prototype.bind = JQLite.prototype.on;\n  JQLite.prototype.unbind = JQLite.prototype.off;\n});\n\n/**\n * Computes a hash of an 'obj'.\n * Hash of a:\n *  string is string\n *  number is number as string\n *  object is either result of calling $$hashKey function on the object or uniquely generated id,\n *         that is also assigned to the $$hashKey property of the object.\n *\n * @param obj\n * @returns {string} hash string such that the same input will have the same hash string.\n *         The resulting string key is in 'type:hashKey' format.\n */\nfunction hashKey(obj) {\n  var objType = typeof obj,\n      key;\n\n  if (objType == 'object' && obj !== null) {\n    if (typeof (key = obj.$$hashKey) == 'function') {\n      // must invoke on object to keep the right this\n      key = obj.$$hashKey();\n    } else if (key === undefined) {\n      key = obj.$$hashKey = nextUid();\n    }\n  } else {\n    key = obj;\n  }\n\n  return objType + ':' + key;\n}\n\n/**\n * HashMap which can use objects as keys\n */\nfunction HashMap(array){\n  forEach(array, this.put, this);\n}\nHashMap.prototype = {\n  /**\n   * Store key value pair\n   * @param key key to store can be any type\n   * @param value value to store can be any type\n   */\n  put: function(key, value) {\n    this[hashKey(key)] = value;\n  },\n\n  /**\n   * @param key\n   * @returns {Object} the value for the key\n   */\n  get: function(key) {\n    return this[hashKey(key)];\n  },\n\n  /**\n   * Remove the key/value pair\n   * @param key\n   */\n  remove: function(key) {\n    var value = this[key = hashKey(key)];\n    delete this[key];\n    return value;\n  }\n};\n\n/**\n * @ngdoc function\n * @module ng\n * @name angular.injector\n * @kind function\n *\n * @description\n * Creates an injector function that can be used for retrieving services as well as for\n * dependency injection (see {@link guide/di dependency injection}).\n *\n\n * @param {Array.<string|Function>} modules A list of module functions or their aliases. See\n *        {@link angular.module}. The `ng` module must be explicitly added.\n * @returns {function()} Injector function. See {@link auto.$injector $injector}.\n *\n * @example\n * Typical usage\n * ```js\n *   // create an injector\n *   var $injector = angular.injector(['ng']);\n *\n *   // use the injector to kick off your application\n *   // use the type inference to auto inject arguments, or use implicit injection\n *   $injector.invoke(function($rootScope, $compile, $document){\n *     $compile($document)($rootScope);\n *     $rootScope.$digest();\n *   });\n * ```\n *\n * Sometimes you want to get access to the injector of a currently running Angular app\n * from outside Angular. Perhaps, you want to inject and compile some markup after the\n * application has been bootstrapped. You can do this using the extra `injector()` added\n * to JQuery/jqLite elements. See {@link angular.element}.\n *\n * *This is fairly rare but could be the case if a third party library is injecting the\n * markup.*\n *\n * In the following example a new block of HTML containing a `ng-controller`\n * directive is added to the end of the document body by JQuery. We then compile and link\n * it into the current AngularJS scope.\n *\n * ```js\n * var $div = $('<div ng-controller=\"MyCtrl\">{{content.label}}</div>');\n * $(document.body).append($div);\n *\n * angular.element(document).injector().invoke(function($compile) {\n *   var scope = angular.element($div).scope();\n *   $compile($div)(scope);\n * });\n * ```\n */\n\n\n/**\n * @ngdoc module\n * @name auto\n * @description\n *\n * Implicit module which gets automatically added to each {@link auto.$injector $injector}.\n */\n\nvar FN_ARGS = /^function\\s*[^\\(]*\\(\\s*([^\\)]*)\\)/m;\nvar FN_ARG_SPLIT = /,/;\nvar FN_ARG = /^\\s*(_?)(\\S+?)\\1\\s*$/;\nvar STRIP_COMMENTS = /((\\/\\/.*$)|(\\/\\*[\\s\\S]*?\\*\\/))/mg;\nvar $injectorMinErr = minErr('$injector');\nfunction annotate(fn) {\n  var $inject,\n      fnText,\n      argDecl,\n      last;\n\n  if (typeof fn == 'function') {\n    if (!($inject = fn.$inject)) {\n      $inject = [];\n      if (fn.length) {\n        fnText = fn.toString().replace(STRIP_COMMENTS, '');\n        argDecl = fnText.match(FN_ARGS);\n        forEach(argDecl[1].split(FN_ARG_SPLIT), function(arg){\n          arg.replace(FN_ARG, function(all, underscore, name){\n            $inject.push(name);\n          });\n        });\n      }\n      fn.$inject = $inject;\n    }\n  } else if (isArray(fn)) {\n    last = fn.length - 1;\n    assertArgFn(fn[last], 'fn');\n    $inject = fn.slice(0, last);\n  } else {\n    assertArgFn(fn, 'fn', true);\n  }\n  return $inject;\n}\n\n///////////////////////////////////////\n\n/**\n * @ngdoc service\n * @name $injector\n * @kind function\n *\n * @description\n *\n * `$injector` is used to retrieve object instances as defined by\n * {@link auto.$provide provider}, instantiate types, invoke methods,\n * and load modules.\n *\n * The following always holds true:\n *\n * ```js\n *   var $injector = angular.injector();\n *   expect($injector.get('$injector')).toBe($injector);\n *   expect($injector.invoke(function($injector){\n *     return $injector;\n *   }).toBe($injector);\n * ```\n *\n * # Injection Function Annotation\n *\n * JavaScript does not have annotations, and annotations are needed for dependency injection. The\n * following are all valid ways of annotating function with injection arguments and are equivalent.\n *\n * ```js\n *   // inferred (only works if code not minified/obfuscated)\n *   $injector.invoke(function(serviceA){});\n *\n *   // annotated\n *   function explicit(serviceA) {};\n *   explicit.$inject = ['serviceA'];\n *   $injector.invoke(explicit);\n *\n *   // inline\n *   $injector.invoke(['serviceA', function(serviceA){}]);\n * ```\n *\n * ## Inference\n *\n * In JavaScript calling `toString()` on a function returns the function definition. The definition\n * can then be parsed and the function arguments can be extracted. *NOTE:* This does not work with\n * minification, and obfuscation tools since these tools change the argument names.\n *\n * ## `$inject` Annotation\n * By adding an `$inject` property onto a function the injection parameters can be specified.\n *\n * ## Inline\n * As an array of injection names, where the last item in the array is the function to call.\n */\n\n/**\n * @ngdoc method\n * @name $injector#get\n *\n * @description\n * Return an instance of the service.\n *\n * @param {string} name The name of the instance to retrieve.\n * @return {*} The instance.\n */\n\n/**\n * @ngdoc method\n * @name $injector#invoke\n *\n * @description\n * Invoke the method and supply the method arguments from the `$injector`.\n *\n * @param {!Function} fn The function to invoke. Function parameters are injected according to the\n *   {@link guide/di $inject Annotation} rules.\n * @param {Object=} self The `this` for the invoked method.\n * @param {Object=} locals Optional object. If preset then any argument names are read from this\n *                         object first, before the `$injector` is consulted.\n * @returns {*} the value returned by the invoked `fn` function.\n */\n\n/**\n * @ngdoc method\n * @name $injector#has\n *\n * @description\n * Allows the user to query if the particular service exists.\n *\n * @param {string} Name of the service to query.\n * @returns {boolean} returns true if injector has given service.\n */\n\n/**\n * @ngdoc method\n * @name $injector#instantiate\n * @description\n * Create a new instance of JS type. The method takes a constructor function, invokes the new\n * operator, and supplies all of the arguments to the constructor function as specified by the\n * constructor annotation.\n *\n * @param {Function} Type Annotated constructor function.\n * @param {Object=} locals Optional object. If preset then any argument names are read from this\n * object first, before the `$injector` is consulted.\n * @returns {Object} new instance of `Type`.\n */\n\n/**\n * @ngdoc method\n * @name $injector#annotate\n *\n * @description\n * Returns an array of service names which the function is requesting for injection. This API is\n * used by the injector to determine which services need to be injected into the function when the\n * function is invoked. There are three ways in which the function can be annotated with the needed\n * dependencies.\n *\n * # Argument names\n *\n * The simplest form is to extract the dependencies from the arguments of the function. This is done\n * by converting the function into a string using `toString()` method and extracting the argument\n * names.\n * ```js\n *   // Given\n *   function MyController($scope, $route) {\n *     // ...\n *   }\n *\n *   // Then\n *   expect(injector.annotate(MyController)).toEqual(['$scope', '$route']);\n * ```\n *\n * This method does not work with code minification / obfuscation. For this reason the following\n * annotation strategies are supported.\n *\n * # The `$inject` property\n *\n * If a function has an `$inject` property and its value is an array of strings, then the strings\n * represent names of services to be injected into the function.\n * ```js\n *   // Given\n *   var MyController = function(obfuscatedScope, obfuscatedRoute) {\n *     // ...\n *   }\n *   // Define function dependencies\n *   MyController['$inject'] = ['$scope', '$route'];\n *\n *   // Then\n *   expect(injector.annotate(MyController)).toEqual(['$scope', '$route']);\n * ```\n *\n * # The array notation\n *\n * It is often desirable to inline Injected functions and that's when setting the `$inject` property\n * is very inconvenient. In these situations using the array notation to specify the dependencies in\n * a way that survives minification is a better choice:\n *\n * ```js\n *   // We wish to write this (not minification / obfuscation safe)\n *   injector.invoke(function($compile, $rootScope) {\n *     // ...\n *   });\n *\n *   // We are forced to write break inlining\n *   var tmpFn = function(obfuscatedCompile, obfuscatedRootScope) {\n *     // ...\n *   };\n *   tmpFn.$inject = ['$compile', '$rootScope'];\n *   injector.invoke(tmpFn);\n *\n *   // To better support inline function the inline annotation is supported\n *   injector.invoke(['$compile', '$rootScope', function(obfCompile, obfRootScope) {\n *     // ...\n *   }]);\n *\n *   // Therefore\n *   expect(injector.annotate(\n *      ['$compile', '$rootScope', function(obfus_$compile, obfus_$rootScope) {}])\n *    ).toEqual(['$compile', '$rootScope']);\n * ```\n *\n * @param {Function|Array.<string|Function>} fn Function for which dependent service names need to\n * be retrieved as described above.\n *\n * @returns {Array.<string>} The names of the services which the function requires.\n */\n\n\n\n\n/**\n * @ngdoc object\n * @name $provide\n *\n * @description\n *\n * The {@link auto.$provide $provide} service has a number of methods for registering components\n * with the {@link auto.$injector $injector}. Many of these functions are also exposed on\n * {@link angular.Module}.\n *\n * An Angular **service** is a singleton object created by a **service factory**.  These **service\n * factories** are functions which, in turn, are created by a **service provider**.\n * The **service providers** are constructor functions. When instantiated they must contain a\n * property called `$get`, which holds the **service factory** function.\n *\n * When you request a service, the {@link auto.$injector $injector} is responsible for finding the\n * correct **service provider**, instantiating it and then calling its `$get` **service factory**\n * function to get the instance of the **service**.\n *\n * Often services have no configuration options and there is no need to add methods to the service\n * provider.  The provider will be no more than a constructor function with a `$get` property. For\n * these cases the {@link auto.$provide $provide} service has additional helper methods to register\n * services without specifying a provider.\n *\n * * {@link auto.$provide#provider provider(provider)} - registers a **service provider** with the\n *     {@link auto.$injector $injector}\n * * {@link auto.$provide#constant constant(obj)} - registers a value/object that can be accessed by\n *     providers and services.\n * * {@link auto.$provide#value value(obj)} - registers a value/object that can only be accessed by\n *     services, not providers.\n * * {@link auto.$provide#factory factory(fn)} - registers a service **factory function**, `fn`,\n *     that will be wrapped in a **service provider** object, whose `$get` property will contain the\n *     given factory function.\n * * {@link auto.$provide#service service(class)} - registers a **constructor function**, `class`\n *     that will be wrapped in a **service provider** object, whose `$get` property will instantiate\n *      a new object using the given constructor function.\n *\n * See the individual methods for more information and examples.\n */\n\n/**\n * @ngdoc method\n * @name $provide#provider\n * @description\n *\n * Register a **provider function** with the {@link auto.$injector $injector}. Provider functions\n * are constructor functions, whose instances are responsible for \"providing\" a factory for a\n * service.\n *\n * Service provider names start with the name of the service they provide followed by `Provider`.\n * For example, the {@link ng.$log $log} service has a provider called\n * {@link ng.$logProvider $logProvider}.\n *\n * Service provider objects can have additional methods which allow configuration of the provider\n * and its service. Importantly, you can configure what kind of service is created by the `$get`\n * method, or how that service will act. For example, the {@link ng.$logProvider $logProvider} has a\n * method {@link ng.$logProvider#debugEnabled debugEnabled}\n * which lets you specify whether the {@link ng.$log $log} service will log debug messages to the\n * console or not.\n *\n * @param {string} name The name of the instance. NOTE: the provider will be available under `name +\n                        'Provider'` key.\n * @param {(Object|function())} provider If the provider is:\n *\n *   - `Object`: then it should have a `$get` method. The `$get` method will be invoked using\n *     {@link auto.$injector#invoke $injector.invoke()} when an instance needs to be created.\n *   - `Constructor`: a new instance of the provider will be created using\n *     {@link auto.$injector#instantiate $injector.instantiate()}, then treated as `object`.\n *\n * @returns {Object} registered provider instance\n\n * @example\n *\n * The following example shows how to create a simple event tracking service and register it using\n * {@link auto.$provide#provider $provide.provider()}.\n *\n * ```js\n *  // Define the eventTracker provider\n *  function EventTrackerProvider() {\n *    var trackingUrl = '/track';\n *\n *    // A provider method for configuring where the tracked events should been saved\n *    this.setTrackingUrl = function(url) {\n *      trackingUrl = url;\n *    };\n *\n *    // The service factory function\n *    this.$get = ['$http', function($http) {\n *      var trackedEvents = {};\n *      return {\n *        // Call this to track an event\n *        event: function(event) {\n *          var count = trackedEvents[event] || 0;\n *          count += 1;\n *          trackedEvents[event] = count;\n *          return count;\n *        },\n *        // Call this to save the tracked events to the trackingUrl\n *        save: function() {\n *          $http.post(trackingUrl, trackedEvents);\n *        }\n *      };\n *    }];\n *  }\n *\n *  describe('eventTracker', function() {\n *    var postSpy;\n *\n *    beforeEach(module(function($provide) {\n *      // Register the eventTracker provider\n *      $provide.provider('eventTracker', EventTrackerProvider);\n *    }));\n *\n *    beforeEach(module(function(eventTrackerProvider) {\n *      // Configure eventTracker provider\n *      eventTrackerProvider.setTrackingUrl('/custom-track');\n *    }));\n *\n *    it('tracks events', inject(function(eventTracker) {\n *      expect(eventTracker.event('login')).toEqual(1);\n *      expect(eventTracker.event('login')).toEqual(2);\n *    }));\n *\n *    it('saves to the tracking url', inject(function(eventTracker, $http) {\n *      postSpy = spyOn($http, 'post');\n *      eventTracker.event('login');\n *      eventTracker.save();\n *      expect(postSpy).toHaveBeenCalled();\n *      expect(postSpy.mostRecentCall.args[0]).not.toEqual('/track');\n *      expect(postSpy.mostRecentCall.args[0]).toEqual('/custom-track');\n *      expect(postSpy.mostRecentCall.args[1]).toEqual({ 'login': 1 });\n *    }));\n *  });\n * ```\n */\n\n/**\n * @ngdoc method\n * @name $provide#factory\n * @description\n *\n * Register a **service factory**, which will be called to return the service instance.\n * This is short for registering a service where its provider consists of only a `$get` property,\n * which is the given service factory function.\n * You should use {@link auto.$provide#factory $provide.factory(getFn)} if you do not need to\n * configure your service in a provider.\n *\n * @param {string} name The name of the instance.\n * @param {function()} $getFn The $getFn for the instance creation. Internally this is a short hand\n *                            for `$provide.provider(name, {$get: $getFn})`.\n * @returns {Object} registered provider instance\n *\n * @example\n * Here is an example of registering a service\n * ```js\n *   $provide.factory('ping', ['$http', function($http) {\n *     return function ping() {\n *       return $http.send('/ping');\n *     };\n *   }]);\n * ```\n * You would then inject and use this service like this:\n * ```js\n *   someModule.controller('Ctrl', ['ping', function(ping) {\n *     ping();\n *   }]);\n * ```\n */\n\n\n/**\n * @ngdoc method\n * @name $provide#service\n * @description\n *\n * Register a **service constructor**, which will be invoked with `new` to create the service\n * instance.\n * This is short for registering a service where its provider's `$get` property is the service\n * constructor function that will be used to instantiate the service instance.\n *\n * You should use {@link auto.$provide#service $provide.service(class)} if you define your service\n * as a type/class.\n *\n * @param {string} name The name of the instance.\n * @param {Function} constructor A class (constructor function) that will be instantiated.\n * @returns {Object} registered provider instance\n *\n * @example\n * Here is an example of registering a service using\n * {@link auto.$provide#service $provide.service(class)}.\n * ```js\n *   var Ping = function($http) {\n *     this.$http = $http;\n *   };\n *\n *   Ping.$inject = ['$http'];\n *\n *   Ping.prototype.send = function() {\n *     return this.$http.get('/ping');\n *   };\n *   $provide.service('ping', Ping);\n * ```\n * You would then inject and use this service like this:\n * ```js\n *   someModule.controller('Ctrl', ['ping', function(ping) {\n *     ping.send();\n *   }]);\n * ```\n */\n\n\n/**\n * @ngdoc method\n * @name $provide#value\n * @description\n *\n * Register a **value service** with the {@link auto.$injector $injector}, such as a string, a\n * number, an array, an object or a function.  This is short for registering a service where its\n * provider's `$get` property is a factory function that takes no arguments and returns the **value\n * service**.\n *\n * Value services are similar to constant services, except that they cannot be injected into a\n * module configuration function (see {@link angular.Module#config}) but they can be overridden by\n * an Angular\n * {@link auto.$provide#decorator decorator}.\n *\n * @param {string} name The name of the instance.\n * @param {*} value The value.\n * @returns {Object} registered provider instance\n *\n * @example\n * Here are some examples of creating value services.\n * ```js\n *   $provide.value('ADMIN_USER', 'admin');\n *\n *   $provide.value('RoleLookup', { admin: 0, writer: 1, reader: 2 });\n *\n *   $provide.value('halfOf', function(value) {\n *     return value / 2;\n *   });\n * ```\n */\n\n\n/**\n * @ngdoc method\n * @name $provide#constant\n * @description\n *\n * Register a **constant service**, such as a string, a number, an array, an object or a function,\n * with the {@link auto.$injector $injector}. Unlike {@link auto.$provide#value value} it can be\n * injected into a module configuration function (see {@link angular.Module#config}) and it cannot\n * be overridden by an Angular {@link auto.$provide#decorator decorator}.\n *\n * @param {string} name The name of the constant.\n * @param {*} value The constant value.\n * @returns {Object} registered instance\n *\n * @example\n * Here a some examples of creating constants:\n * ```js\n *   $provide.constant('SHARD_HEIGHT', 306);\n *\n *   $provide.constant('MY_COLOURS', ['red', 'blue', 'grey']);\n *\n *   $provide.constant('double', function(value) {\n *     return value * 2;\n *   });\n * ```\n */\n\n\n/**\n * @ngdoc method\n * @name $provide#decorator\n * @description\n *\n * Register a **service decorator** with the {@link auto.$injector $injector}. A service decorator\n * intercepts the creation of a service, allowing it to override or modify the behaviour of the\n * service. The object returned by the decorator may be the original service, or a new service\n * object which replaces or wraps and delegates to the original service.\n *\n * @param {string} name The name of the service to decorate.\n * @param {function()} decorator This function will be invoked when the service needs to be\n *    instantiated and should return the decorated service instance. The function is called using\n *    the {@link auto.$injector#invoke injector.invoke} method and is therefore fully injectable.\n *    Local injection arguments:\n *\n *    * `$delegate` - The original service instance, which can be monkey patched, configured,\n *      decorated or delegated to.\n *\n * @example\n * Here we decorate the {@link ng.$log $log} service to convert warnings to errors by intercepting\n * calls to {@link ng.$log#error $log.warn()}.\n * ```js\n *   $provide.decorator('$log', ['$delegate', function($delegate) {\n *     $delegate.warn = $delegate.error;\n *     return $delegate;\n *   }]);\n * ```\n */\n\n\nfunction createInjector(modulesToLoad) {\n  var INSTANTIATING = {},\n      providerSuffix = 'Provider',\n      path = [],\n      loadedModules = new HashMap(),\n      providerCache = {\n        $provide: {\n            provider: supportObject(provider),\n            factory: supportObject(factory),\n            service: supportObject(service),\n            value: supportObject(value),\n            constant: supportObject(constant),\n            decorator: decorator\n          }\n      },\n      providerInjector = (providerCache.$injector =\n          createInternalInjector(providerCache, function() {\n            throw $injectorMinErr('unpr', \"Unknown provider: {0}\", path.join(' <- '));\n          })),\n      instanceCache = {},\n      instanceInjector = (instanceCache.$injector =\n          createInternalInjector(instanceCache, function(servicename) {\n            var provider = providerInjector.get(servicename + providerSuffix);\n            return instanceInjector.invoke(provider.$get, provider);\n          }));\n\n\n  forEach(loadModules(modulesToLoad), function(fn) { instanceInjector.invoke(fn || noop); });\n\n  return instanceInjector;\n\n  ////////////////////////////////////\n  // $provider\n  ////////////////////////////////////\n\n  function supportObject(delegate) {\n    return function(key, value) {\n      if (isObject(key)) {\n        forEach(key, reverseParams(delegate));\n      } else {\n        return delegate(key, value);\n      }\n    };\n  }\n\n  function provider(name, provider_) {\n    assertNotHasOwnProperty(name, 'service');\n    if (isFunction(provider_) || isArray(provider_)) {\n      provider_ = providerInjector.instantiate(provider_);\n    }\n    if (!provider_.$get) {\n      throw $injectorMinErr('pget', \"Provider '{0}' must define $get factory method.\", name);\n    }\n    return providerCache[name + providerSuffix] = provider_;\n  }\n\n  function factory(name, factoryFn) { return provider(name, { $get: factoryFn }); }\n\n  function service(name, constructor) {\n    return factory(name, ['$injector', function($injector) {\n      return $injector.instantiate(constructor);\n    }]);\n  }\n\n  function value(name, val) { return factory(name, valueFn(val)); }\n\n  function constant(name, value) {\n    assertNotHasOwnProperty(name, 'constant');\n    providerCache[name] = value;\n    instanceCache[name] = value;\n  }\n\n  function decorator(serviceName, decorFn) {\n    var origProvider = providerInjector.get(serviceName + providerSuffix),\n        orig$get = origProvider.$get;\n\n    origProvider.$get = function() {\n      var origInstance = instanceInjector.invoke(orig$get, origProvider);\n      return instanceInjector.invoke(decorFn, null, {$delegate: origInstance});\n    };\n  }\n\n  ////////////////////////////////////\n  // Module Loading\n  ////////////////////////////////////\n  function loadModules(modulesToLoad){\n    var runBlocks = [], moduleFn, invokeQueue, i, ii;\n    forEach(modulesToLoad, function(module) {\n      if (loadedModules.get(module)) return;\n      loadedModules.put(module, true);\n\n      try {\n        if (isString(module)) {\n          moduleFn = angularModule(module);\n          runBlocks = runBlocks.concat(loadModules(moduleFn.requires)).concat(moduleFn._runBlocks);\n\n          for(invokeQueue = moduleFn._invokeQueue, i = 0, ii = invokeQueue.length; i < ii; i++) {\n            var invokeArgs = invokeQueue[i],\n                provider = providerInjector.get(invokeArgs[0]);\n\n            provider[invokeArgs[1]].apply(provider, invokeArgs[2]);\n          }\n        } else if (isFunction(module)) {\n            runBlocks.push(providerInjector.invoke(module));\n        } else if (isArray(module)) {\n            runBlocks.push(providerInjector.invoke(module));\n        } else {\n          assertArgFn(module, 'module');\n        }\n      } catch (e) {\n        if (isArray(module)) {\n          module = module[module.length - 1];\n        }\n        if (e.message && e.stack && e.stack.indexOf(e.message) == -1) {\n          // Safari & FF's stack traces don't contain error.message content\n          // unlike those of Chrome and IE\n          // So if stack doesn't contain message, we create a new string that contains both.\n          // Since error.stack is read-only in Safari, I'm overriding e and not e.stack here.\n          /* jshint -W022 */\n          e = e.message + '\\n' + e.stack;\n        }\n        throw $injectorMinErr('modulerr', \"Failed to instantiate module {0} due to:\\n{1}\",\n                  module, e.stack || e.message || e);\n      }\n    });\n    return runBlocks;\n  }\n\n  ////////////////////////////////////\n  // internal Injector\n  ////////////////////////////////////\n\n  function createInternalInjector(cache, factory) {\n\n    function getService(serviceName) {\n      if (cache.hasOwnProperty(serviceName)) {\n        if (cache[serviceName] === INSTANTIATING) {\n          throw $injectorMinErr('cdep', 'Circular dependency found: {0}', path.join(' <- '));\n        }\n        return cache[serviceName];\n      } else {\n        try {\n          path.unshift(serviceName);\n          cache[serviceName] = INSTANTIATING;\n          return cache[serviceName] = factory(serviceName);\n        } catch (err) {\n          if (cache[serviceName] === INSTANTIATING) {\n            delete cache[serviceName];\n          }\n          throw err;\n        } finally {\n          path.shift();\n        }\n      }\n    }\n\n    function invoke(fn, self, locals){\n      var args = [],\n          $inject = annotate(fn),\n          length, i,\n          key;\n\n      for(i = 0, length = $inject.length; i < length; i++) {\n        key = $inject[i];\n        if (typeof key !== 'string') {\n          throw $injectorMinErr('itkn',\n                  'Incorrect injection token! Expected service name as string, got {0}', key);\n        }\n        args.push(\n          locals && locals.hasOwnProperty(key)\n          ? locals[key]\n          : getService(key)\n        );\n      }\n      if (!fn.$inject) {\n        // this means that we must be an array.\n        fn = fn[length];\n      }\n\n      // http://jsperf.com/angularjs-invoke-apply-vs-switch\n      // #5388\n      return fn.apply(self, args);\n    }\n\n    function instantiate(Type, locals) {\n      var Constructor = function() {},\n          instance, returnedValue;\n\n      // Check if Type is annotated and use just the given function at n-1 as parameter\n      // e.g. someModule.factory('greeter', ['$window', function(renamed$window) {}]);\n      Constructor.prototype = (isArray(Type) ? Type[Type.length - 1] : Type).prototype;\n      instance = new Constructor();\n      returnedValue = invoke(Type, instance, locals);\n\n      return isObject(returnedValue) || isFunction(returnedValue) ? returnedValue : instance;\n    }\n\n    return {\n      invoke: invoke,\n      instantiate: instantiate,\n      get: getService,\n      annotate: annotate,\n      has: function(name) {\n        return providerCache.hasOwnProperty(name + providerSuffix) || cache.hasOwnProperty(name);\n      }\n    };\n  }\n}\n\n/**\n * @ngdoc service\n * @name $anchorScroll\n * @kind function\n * @requires $window\n * @requires $location\n * @requires $rootScope\n *\n * @description\n * When called, it checks current value of `$location.hash()` and scrolls to the related element,\n * according to rules specified in\n * [Html5 spec](http://dev.w3.org/html5/spec/Overview.html#the-indicated-part-of-the-document).\n *\n * It also watches the `$location.hash()` and scrolls whenever it changes to match any anchor.\n * This can be disabled by calling `$anchorScrollProvider.disableAutoScrolling()`.\n *\n * @example\n   <example>\n     <file name=\"index.html\">\n       <div id=\"scrollArea\" ng-controller=\"ScrollCtrl\">\n         <a ng-click=\"gotoBottom()\">Go to bottom</a>\n         <a id=\"bottom\"></a> You're at the bottom!\n       </div>\n     </file>\n     <file name=\"script.js\">\n       function ScrollCtrl($scope, $location, $anchorScroll) {\n         $scope.gotoBottom = function (){\n           // set the location.hash to the id of\n           // the element you wish to scroll to.\n           $location.hash('bottom');\n\n           // call $anchorScroll()\n           $anchorScroll();\n         };\n       }\n     </file>\n     <file name=\"style.css\">\n       #scrollArea {\n         height: 350px;\n         overflow: auto;\n       }\n\n       #bottom {\n         display: block;\n         margin-top: 2000px;\n       }\n     </file>\n   </example>\n */\nfunction $AnchorScrollProvider() {\n\n  var autoScrollingEnabled = true;\n\n  this.disableAutoScrolling = function() {\n    autoScrollingEnabled = false;\n  };\n\n  this.$get = ['$window', '$location', '$rootScope', function($window, $location, $rootScope) {\n    var document = $window.document;\n\n    // helper function to get first anchor from a NodeList\n    // can't use filter.filter, as it accepts only instances of Array\n    // and IE can't convert NodeList to an array using [].slice\n    // TODO(vojta): use filter if we change it to accept lists as well\n    function getFirstAnchor(list) {\n      var result = null;\n      forEach(list, function(element) {\n        if (!result && lowercase(element.nodeName) === 'a') result = element;\n      });\n      return result;\n    }\n\n    function scroll() {\n      var hash = $location.hash(), elm;\n\n      // empty hash, scroll to the top of the page\n      if (!hash) $window.scrollTo(0, 0);\n\n      // element with given id\n      else if ((elm = document.getElementById(hash))) elm.scrollIntoView();\n\n      // first anchor with given name :-D\n      else if ((elm = getFirstAnchor(document.getElementsByName(hash)))) elm.scrollIntoView();\n\n      // no element and hash == 'top', scroll to the top of the page\n      else if (hash === 'top') $window.scrollTo(0, 0);\n    }\n\n    // does not scroll when user clicks on anchor link that is currently on\n    // (no url change, no $location.hash() change), browser native does scroll\n    if (autoScrollingEnabled) {\n      $rootScope.$watch(function autoScrollWatch() {return $location.hash();},\n        function autoScrollWatchAction() {\n          $rootScope.$evalAsync(scroll);\n        });\n    }\n\n    return scroll;\n  }];\n}\n\nvar $animateMinErr = minErr('$animate');\n\n/**\n * @ngdoc provider\n * @name $animateProvider\n *\n * @description\n * Default implementation of $animate that doesn't perform any animations, instead just\n * synchronously performs DOM\n * updates and calls done() callbacks.\n *\n * In order to enable animations the ngAnimate module has to be loaded.\n *\n * To see the functional implementation check out src/ngAnimate/animate.js\n */\nvar $AnimateProvider = ['$provide', function($provide) {\n\n\n  this.$$selectors = {};\n\n\n  /**\n   * @ngdoc method\n   * @name $animateProvider#register\n   *\n   * @description\n   * Registers a new injectable animation factory function. The factory function produces the\n   * animation object which contains callback functions for each event that is expected to be\n   * animated.\n   *\n   *   * `eventFn`: `function(Element, doneFunction)` The element to animate, the `doneFunction`\n   *   must be called once the element animation is complete. If a function is returned then the\n   *   animation service will use this function to cancel the animation whenever a cancel event is\n   *   triggered.\n   *\n   *\n   * ```js\n   *   return {\n     *     eventFn : function(element, done) {\n     *       //code to run the animation\n     *       //once complete, then run done()\n     *       return function cancellationFunction() {\n     *         //code to cancel the animation\n     *       }\n     *     }\n     *   }\n   * ```\n   *\n   * @param {string} name The name of the animation.\n   * @param {Function} factory The factory function that will be executed to return the animation\n   *                           object.\n   */\n  this.register = function(name, factory) {\n    var key = name + '-animation';\n    if (name && name.charAt(0) != '.') throw $animateMinErr('notcsel',\n        \"Expecting class selector starting with '.' got '{0}'.\", name);\n    this.$$selectors[name.substr(1)] = key;\n    $provide.factory(key, factory);\n  };\n\n  /**\n   * @ngdoc method\n   * @name $animateProvider#classNameFilter\n   *\n   * @description\n   * Sets and/or returns the CSS class regular expression that is checked when performing\n   * an animation. Upon bootstrap the classNameFilter value is not set at all and will\n   * therefore enable $animate to attempt to perform an animation on any element.\n   * When setting the classNameFilter value, animations will only be performed on elements\n   * that successfully match the filter expression. This in turn can boost performance\n   * for low-powered devices as well as applications containing a lot of structural operations.\n   * @param {RegExp=} expression The className expression which will be checked against all animations\n   * @return {RegExp} The current CSS className expression value. If null then there is no expression value\n   */\n  this.classNameFilter = function(expression) {\n    if(arguments.length === 1) {\n      this.$$classNameFilter = (expression instanceof RegExp) ? expression : null;\n    }\n    return this.$$classNameFilter;\n  };\n\n  this.$get = ['$timeout', '$$asyncCallback', function($timeout, $$asyncCallback) {\n\n    function async(fn) {\n      fn && $$asyncCallback(fn);\n    }\n\n    /**\n     *\n     * @ngdoc service\n     * @name $animate\n     * @description The $animate service provides rudimentary DOM manipulation functions to\n     * insert, remove and move elements within the DOM, as well as adding and removing classes.\n     * This service is the core service used by the ngAnimate $animator service which provides\n     * high-level animation hooks for CSS and JavaScript.\n     *\n     * $animate is available in the AngularJS core, however, the ngAnimate module must be included\n     * to enable full out animation support. Otherwise, $animate will only perform simple DOM\n     * manipulation operations.\n     *\n     * To learn more about enabling animation support, click here to visit the {@link ngAnimate\n     * ngAnimate module page} as well as the {@link ngAnimate.$animate ngAnimate $animate service\n     * page}.\n     */\n    return {\n\n      /**\n       *\n       * @ngdoc method\n       * @name $animate#enter\n       * @kind function\n       * @description Inserts the element into the DOM either after the `after` element or within\n       *   the `parent` element. Once complete, the done() callback will be fired (if provided).\n       * @param {DOMElement} element the element which will be inserted into the DOM\n       * @param {DOMElement} parent the parent element which will append the element as\n       *   a child (if the after element is not present)\n       * @param {DOMElement} after the sibling element which will append the element\n       *   after itself\n       * @param {Function=} done callback function that will be called after the element has been\n       *   inserted into the DOM\n       */\n      enter : function(element, parent, after, done) {\n        if (after) {\n          after.after(element);\n        } else {\n          if (!parent || !parent[0]) {\n            parent = after.parent();\n          }\n          parent.append(element);\n        }\n        async(done);\n      },\n\n      /**\n       *\n       * @ngdoc method\n       * @name $animate#leave\n       * @kind function\n       * @description Removes the element from the DOM. Once complete, the done() callback will be\n       *   fired (if provided).\n       * @param {DOMElement} element the element which will be removed from the DOM\n       * @param {Function=} done callback function that will be called after the element has been\n       *   removed from the DOM\n       */\n      leave : function(element, done) {\n        element.remove();\n        async(done);\n      },\n\n      /**\n       *\n       * @ngdoc method\n       * @name $animate#move\n       * @kind function\n       * @description Moves the position of the provided element within the DOM to be placed\n       * either after the `after` element or inside of the `parent` element. Once complete, the\n       * done() callback will be fired (if provided).\n       *\n       * @param {DOMElement} element the element which will be moved around within the\n       *   DOM\n       * @param {DOMElement} parent the parent element where the element will be\n       *   inserted into (if the after element is not present)\n       * @param {DOMElement} after the sibling element where the element will be\n       *   positioned next to\n       * @param {Function=} done the callback function (if provided) that will be fired after the\n       *   element has been moved to its new position\n       */\n      move : function(element, parent, after, done) {\n        // Do not remove element before insert. Removing will cause data associated with the\n        // element to be dropped. Insert will implicitly do the remove.\n        this.enter(element, parent, after, done);\n      },\n\n      /**\n       *\n       * @ngdoc method\n       * @name $animate#addClass\n       * @kind function\n       * @description Adds the provided className CSS class value to the provided element. Once\n       * complete, the done() callback will be fired (if provided).\n       * @param {DOMElement} element the element which will have the className value\n       *   added to it\n       * @param {string} className the CSS class which will be added to the element\n       * @param {Function=} done the callback function (if provided) that will be fired after the\n       *   className value has been added to the element\n       */\n      addClass : function(element, className, done) {\n        className = isString(className) ?\n                      className :\n                      isArray(className) ? className.join(' ') : '';\n        forEach(element, function (element) {\n          jqLiteAddClass(element, className);\n        });\n        async(done);\n      },\n\n      /**\n       *\n       * @ngdoc method\n       * @name $animate#removeClass\n       * @kind function\n       * @description Removes the provided className CSS class value from the provided element.\n       * Once complete, the done() callback will be fired (if provided).\n       * @param {DOMElement} element the element which will have the className value\n       *   removed from it\n       * @param {string} className the CSS class which will be removed from the element\n       * @param {Function=} done the callback function (if provided) that will be fired after the\n       *   className value has been removed from the element\n       */\n      removeClass : function(element, className, done) {\n        className = isString(className) ?\n                      className :\n                      isArray(className) ? className.join(' ') : '';\n        forEach(element, function (element) {\n          jqLiteRemoveClass(element, className);\n        });\n        async(done);\n      },\n\n      /**\n       *\n       * @ngdoc method\n       * @name $animate#setClass\n       * @kind function\n       * @description Adds and/or removes the given CSS classes to and from the element.\n       * Once complete, the done() callback will be fired (if provided).\n       * @param {DOMElement} element the element which will have its CSS classes changed\n       *   removed from it\n       * @param {string} add the CSS classes which will be added to the element\n       * @param {string} remove the CSS class which will be removed from the element\n       * @param {Function=} done the callback function (if provided) that will be fired after the\n       *   CSS classes have been set on the element\n       */\n      setClass : function(element, add, remove, done) {\n        forEach(element, function (element) {\n          jqLiteAddClass(element, add);\n          jqLiteRemoveClass(element, remove);\n        });\n        async(done);\n      },\n\n      enabled : noop\n    };\n  }];\n}];\n\nfunction $$AsyncCallbackProvider(){\n  this.$get = ['$$rAF', '$timeout', function($$rAF, $timeout) {\n    return $$rAF.supported\n      ? function(fn) { return $$rAF(fn); }\n      : function(fn) {\n        return $timeout(fn, 0, false);\n      };\n  }];\n}\n\n/**\n * ! This is a private undocumented service !\n *\n * @name $browser\n * @requires $log\n * @description\n * This object has two goals:\n *\n * - hide all the global state in the browser caused by the window object\n * - abstract away all the browser specific features and inconsistencies\n *\n * For tests we provide {@link ngMock.$browser mock implementation} of the `$browser`\n * service, which can be used for convenient testing of the application without the interaction with\n * the real browser apis.\n */\n/**\n * @param {object} window The global window object.\n * @param {object} document jQuery wrapped document.\n * @param {function()} XHR XMLHttpRequest constructor.\n * @param {object} $log console.log or an object with the same interface.\n * @param {object} $sniffer $sniffer service\n */\nfunction Browser(window, document, $log, $sniffer) {\n  var self = this,\n      rawDocument = document[0],\n      location = window.location,\n      history = window.history,\n      setTimeout = window.setTimeout,\n      clearTimeout = window.clearTimeout,\n      pendingDeferIds = {};\n\n  self.isMock = false;\n\n  var outstandingRequestCount = 0;\n  var outstandingRequestCallbacks = [];\n\n  // TODO(vojta): remove this temporary api\n  self.$$completeOutstandingRequest = completeOutstandingRequest;\n  self.$$incOutstandingRequestCount = function() { outstandingRequestCount++; };\n\n  /**\n   * Executes the `fn` function(supports currying) and decrements the `outstandingRequestCallbacks`\n   * counter. If the counter reaches 0, all the `outstandingRequestCallbacks` are executed.\n   */\n  function completeOutstandingRequest(fn) {\n    try {\n      fn.apply(null, sliceArgs(arguments, 1));\n    } finally {\n      outstandingRequestCount--;\n      if (outstandingRequestCount === 0) {\n        while(outstandingRequestCallbacks.length) {\n          try {\n            outstandingRequestCallbacks.pop()();\n          } catch (e) {\n            $log.error(e);\n          }\n        }\n      }\n    }\n  }\n\n  /**\n   * @private\n   * Note: this method is used only by scenario runner\n   * TODO(vojta): prefix this method with $$ ?\n   * @param {function()} callback Function that will be called when no outstanding request\n   */\n  self.notifyWhenNoOutstandingRequests = function(callback) {\n    // force browser to execute all pollFns - this is needed so that cookies and other pollers fire\n    // at some deterministic time in respect to the test runner's actions. Leaving things up to the\n    // regular poller would result in flaky tests.\n    forEach(pollFns, function(pollFn){ pollFn(); });\n\n    if (outstandingRequestCount === 0) {\n      callback();\n    } else {\n      outstandingRequestCallbacks.push(callback);\n    }\n  };\n\n  //////////////////////////////////////////////////////////////\n  // Poll Watcher API\n  //////////////////////////////////////////////////////////////\n  var pollFns = [],\n      pollTimeout;\n\n  /**\n   * @name $browser#addPollFn\n   *\n   * @param {function()} fn Poll function to add\n   *\n   * @description\n   * Adds a function to the list of functions that poller periodically executes,\n   * and starts polling if not started yet.\n   *\n   * @returns {function()} the added function\n   */\n  self.addPollFn = function(fn) {\n    if (isUndefined(pollTimeout)) startPoller(100, setTimeout);\n    pollFns.push(fn);\n    return fn;\n  };\n\n  /**\n   * @param {number} interval How often should browser call poll functions (ms)\n   * @param {function()} setTimeout Reference to a real or fake `setTimeout` function.\n   *\n   * @description\n   * Configures the poller to run in the specified intervals, using the specified\n   * setTimeout fn and kicks it off.\n   */\n  function startPoller(interval, setTimeout) {\n    (function check() {\n      forEach(pollFns, function(pollFn){ pollFn(); });\n      pollTimeout = setTimeout(check, interval);\n    })();\n  }\n\n  //////////////////////////////////////////////////////////////\n  // URL API\n  //////////////////////////////////////////////////////////////\n\n  var lastBrowserUrl = location.href,\n      baseElement = document.find('base'),\n      newLocation = null;\n\n  /**\n   * @name $browser#url\n   *\n   * @description\n   * GETTER:\n   * Without any argument, this method just returns current value of location.href.\n   *\n   * SETTER:\n   * With at least one argument, this method sets url to new value.\n   * If html5 history api supported, pushState/replaceState is used, otherwise\n   * location.href/location.replace is used.\n   * Returns its own instance to allow chaining\n   *\n   * NOTE: this api is intended for use only by the $location service. Please use the\n   * {@link ng.$location $location service} to change url.\n   *\n   * @param {string} url New url (when used as setter)\n   * @param {boolean=} replace Should new url replace current history record ?\n   */\n  self.url = function(url, replace) {\n    // Android Browser BFCache causes location, history reference to become stale.\n    if (location !== window.location) location = window.location;\n    if (history !== window.history) history = window.history;\n\n    // setter\n    if (url) {\n      if (lastBrowserUrl == url) return;\n      lastBrowserUrl = url;\n      if ($sniffer.history) {\n        if (replace) history.replaceState(null, '', url);\n        else {\n          history.pushState(null, '', url);\n          // Crazy Opera Bug: http://my.opera.com/community/forums/topic.dml?id=1185462\n          baseElement.attr('href', baseElement.attr('href'));\n        }\n      } else {\n        newLocation = url;\n        if (replace) {\n          location.replace(url);\n        } else {\n          location.href = url;\n        }\n      }\n      return self;\n    // getter\n    } else {\n      // - newLocation is a workaround for an IE7-9 issue with location.replace and location.href\n      //   methods not updating location.href synchronously.\n      // - the replacement is a workaround for https://bugzilla.mozilla.org/show_bug.cgi?id=407172\n      return newLocation || location.href.replace(/%27/g,\"'\");\n    }\n  };\n\n  var urlChangeListeners = [],\n      urlChangeInit = false;\n\n  function fireUrlChange() {\n    newLocation = null;\n    if (lastBrowserUrl == self.url()) return;\n\n    lastBrowserUrl = self.url();\n    forEach(urlChangeListeners, function(listener) {\n      listener(self.url());\n    });\n  }\n\n  /**\n   * @name $browser#onUrlChange\n   *\n   * @description\n   * Register callback function that will be called, when url changes.\n   *\n   * It's only called when the url is changed from outside of angular:\n   * - user types different url into address bar\n   * - user clicks on history (forward/back) button\n   * - user clicks on a link\n   *\n   * It's not called when url is changed by $browser.url() method\n   *\n   * The listener gets called with new url as parameter.\n   *\n   * NOTE: this api is intended for use only by the $location service. Please use the\n   * {@link ng.$location $location service} to monitor url changes in angular apps.\n   *\n   * @param {function(string)} listener Listener function to be called when url changes.\n   * @return {function(string)} Returns the registered listener fn - handy if the fn is anonymous.\n   */\n  self.onUrlChange = function(callback) {\n    // TODO(vojta): refactor to use node's syntax for events\n    if (!urlChangeInit) {\n      // We listen on both (hashchange/popstate) when available, as some browsers (e.g. Opera)\n      // don't fire popstate when user change the address bar and don't fire hashchange when url\n      // changed by push/replaceState\n\n      // html5 history api - popstate event\n      if ($sniffer.history) jqLite(window).on('popstate', fireUrlChange);\n      // hashchange event\n      if ($sniffer.hashchange) jqLite(window).on('hashchange', fireUrlChange);\n      // polling\n      else self.addPollFn(fireUrlChange);\n\n      urlChangeInit = true;\n    }\n\n    urlChangeListeners.push(callback);\n    return callback;\n  };\n\n  //////////////////////////////////////////////////////////////\n  // Misc API\n  //////////////////////////////////////////////////////////////\n\n  /**\n   * @name $browser#baseHref\n   *\n   * @description\n   * Returns current <base href>\n   * (always relative - without domain)\n   *\n   * @returns {string} The current base href\n   */\n  self.baseHref = function() {\n    var href = baseElement.attr('href');\n    return href ? href.replace(/^(https?\\:)?\\/\\/[^\\/]*/, '') : '';\n  };\n\n  //////////////////////////////////////////////////////////////\n  // Cookies API\n  //////////////////////////////////////////////////////////////\n  var lastCookies = {};\n  var lastCookieString = '';\n  var cookiePath = self.baseHref();\n\n  /**\n   * @name $browser#cookies\n   *\n   * @param {string=} name Cookie name\n   * @param {string=} value Cookie value\n   *\n   * @description\n   * The cookies method provides a 'private' low level access to browser cookies.\n   * It is not meant to be used directly, use the $cookie service instead.\n   *\n   * The return values vary depending on the arguments that the method was called with as follows:\n   *\n   * - cookies() -> hash of all cookies, this is NOT a copy of the internal state, so do not modify\n   *   it\n   * - cookies(name, value) -> set name to value, if value is undefined delete the cookie\n   * - cookies(name) -> the same as (name, undefined) == DELETES (no one calls it right now that\n   *   way)\n   *\n   * @returns {Object} Hash of all cookies (if called without any parameter)\n   */\n  self.cookies = function(name, value) {\n    /* global escape: false, unescape: false */\n    var cookieLength, cookieArray, cookie, i, index;\n\n    if (name) {\n      if (value === undefined) {\n        rawDocument.cookie = escape(name) + \"=;path=\" + cookiePath +\n                                \";expires=Thu, 01 Jan 1970 00:00:00 GMT\";\n      } else {\n        if (isString(value)) {\n          cookieLength = (rawDocument.cookie = escape(name) + '=' + escape(value) +\n                                ';path=' + cookiePath).length + 1;\n\n          // per http://www.ietf.org/rfc/rfc2109.txt browser must allow at minimum:\n          // - 300 cookies\n          // - 20 cookies per unique domain\n          // - 4096 bytes per cookie\n          if (cookieLength > 4096) {\n            $log.warn(\"Cookie '\"+ name +\n              \"' possibly not set or overflowed because it was too large (\"+\n              cookieLength + \" > 4096 bytes)!\");\n          }\n        }\n      }\n    } else {\n      if (rawDocument.cookie !== lastCookieString) {\n        lastCookieString = rawDocument.cookie;\n        cookieArray = lastCookieString.split(\"; \");\n        lastCookies = {};\n\n        for (i = 0; i < cookieArray.length; i++) {\n          cookie = cookieArray[i];\n          index = cookie.indexOf('=');\n          if (index > 0) { //ignore nameless cookies\n            name = unescape(cookie.substring(0, index));\n            // the first value that is seen for a cookie is the most\n            // specific one.  values for the same cookie name that\n            // follow are for less specific paths.\n            if (lastCookies[name] === undefined) {\n              lastCookies[name] = unescape(cookie.substring(index + 1));\n            }\n          }\n        }\n      }\n      return lastCookies;\n    }\n  };\n\n\n  /**\n   * @name $browser#defer\n   * @param {function()} fn A function, who's execution should be deferred.\n   * @param {number=} [delay=0] of milliseconds to defer the function execution.\n   * @returns {*} DeferId that can be used to cancel the task via `$browser.defer.cancel()`.\n   *\n   * @description\n   * Executes a fn asynchronously via `setTimeout(fn, delay)`.\n   *\n   * Unlike when calling `setTimeout` directly, in test this function is mocked and instead of using\n   * `setTimeout` in tests, the fns are queued in an array, which can be programmatically flushed\n   * via `$browser.defer.flush()`.\n   *\n   */\n  self.defer = function(fn, delay) {\n    var timeoutId;\n    outstandingRequestCount++;\n    timeoutId = setTimeout(function() {\n      delete pendingDeferIds[timeoutId];\n      completeOutstandingRequest(fn);\n    }, delay || 0);\n    pendingDeferIds[timeoutId] = true;\n    return timeoutId;\n  };\n\n\n  /**\n   * @name $browser#defer.cancel\n   *\n   * @description\n   * Cancels a deferred task identified with `deferId`.\n   *\n   * @param {*} deferId Token returned by the `$browser.defer` function.\n   * @returns {boolean} Returns `true` if the task hasn't executed yet and was successfully\n   *                    canceled.\n   */\n  self.defer.cancel = function(deferId) {\n    if (pendingDeferIds[deferId]) {\n      delete pendingDeferIds[deferId];\n      clearTimeout(deferId);\n      completeOutstandingRequest(noop);\n      return true;\n    }\n    return false;\n  };\n\n}\n\nfunction $BrowserProvider(){\n  this.$get = ['$window', '$log', '$sniffer', '$document',\n      function( $window,   $log,   $sniffer,   $document){\n        return new Browser($window, $document, $log, $sniffer);\n      }];\n}\n\n/**\n * @ngdoc service\n * @name $cacheFactory\n *\n * @description\n * Factory that constructs {@link $cacheFactory.Cache Cache} objects and gives access to\n * them.\n *\n * ```js\n *\n *  var cache = $cacheFactory('cacheId');\n *  expect($cacheFactory.get('cacheId')).toBe(cache);\n *  expect($cacheFactory.get('noSuchCacheId')).not.toBeDefined();\n *\n *  cache.put(\"key\", \"value\");\n *  cache.put(\"another key\", \"another value\");\n *\n *  // We've specified no options on creation\n *  expect(cache.info()).toEqual({id: 'cacheId', size: 2});\n *\n * ```\n *\n *\n * @param {string} cacheId Name or id of the newly created cache.\n * @param {object=} options Options object that specifies the cache behavior. Properties:\n *\n *   - `{number=}` `capacity` — turns the cache into LRU cache.\n *\n * @returns {object} Newly created cache object with the following set of methods:\n *\n * - `{object}` `info()` — Returns id, size, and options of cache.\n * - `{{*}}` `put({string} key, {*} value)` — Puts a new key-value pair into the cache and returns\n *   it.\n * - `{{*}}` `get({string} key)` — Returns cached value for `key` or undefined for cache miss.\n * - `{void}` `remove({string} key)` — Removes a key-value pair from the cache.\n * - `{void}` `removeAll()` — Removes all cached values.\n * - `{void}` `destroy()` — Removes references to this cache from $cacheFactory.\n *\n * @example\n   <example module=\"cacheExampleApp\">\n     <file name=\"index.html\">\n       <div ng-controller=\"CacheController\">\n         <input ng-model=\"newCacheKey\" placeholder=\"Key\">\n         <input ng-model=\"newCacheValue\" placeholder=\"Value\">\n         <button ng-click=\"put(newCacheKey, newCacheValue)\">Cache</button>\n\n         <p ng-if=\"keys.length\">Cached Values</p>\n         <div ng-repeat=\"key in keys\">\n           <span ng-bind=\"key\"></span>\n           <span>: </span>\n           <b ng-bind=\"cache.get(key)\"></b>\n         </div>\n\n         <p>Cache Info</p>\n         <div ng-repeat=\"(key, value) in cache.info()\">\n           <span ng-bind=\"key\"></span>\n           <span>: </span>\n           <b ng-bind=\"value\"></b>\n         </div>\n       </div>\n     </file>\n     <file name=\"script.js\">\n       angular.module('cacheExampleApp', []).\n         controller('CacheController', ['$scope', '$cacheFactory', function($scope, $cacheFactory) {\n           $scope.keys = [];\n           $scope.cache = $cacheFactory('cacheId');\n           $scope.put = function(key, value) {\n             $scope.cache.put(key, value);\n             $scope.keys.push(key);\n           };\n         }]);\n     </file>\n     <file name=\"style.css\">\n       p {\n         margin: 10px 0 3px;\n       }\n     </file>\n   </example>\n */\nfunction $CacheFactoryProvider() {\n\n  this.$get = function() {\n    var caches = {};\n\n    function cacheFactory(cacheId, options) {\n      if (cacheId in caches) {\n        throw minErr('$cacheFactory')('iid', \"CacheId '{0}' is already taken!\", cacheId);\n      }\n\n      var size = 0,\n          stats = extend({}, options, {id: cacheId}),\n          data = {},\n          capacity = (options && options.capacity) || Number.MAX_VALUE,\n          lruHash = {},\n          freshEnd = null,\n          staleEnd = null;\n\n      /**\n       * @ngdoc type\n       * @name $cacheFactory.Cache\n       *\n       * @description\n       * A cache object used to store and retrieve data, primarily used by\n       * {@link $http $http} and the {@link ng.directive:script script} directive to cache\n       * templates and other data.\n       *\n       * ```js\n       *  angular.module('superCache')\n       *    .factory('superCache', ['$cacheFactory', function($cacheFactory) {\n       *      return $cacheFactory('super-cache');\n       *    }]);\n       * ```\n       *\n       * Example test:\n       *\n       * ```js\n       *  it('should behave like a cache', inject(function(superCache) {\n       *    superCache.put('key', 'value');\n       *    superCache.put('another key', 'another value');\n       *\n       *    expect(superCache.info()).toEqual({\n       *      id: 'super-cache',\n       *      size: 2\n       *    });\n       *\n       *    superCache.remove('another key');\n       *    expect(superCache.get('another key')).toBeUndefined();\n       *\n       *    superCache.removeAll();\n       *    expect(superCache.info()).toEqual({\n       *      id: 'super-cache',\n       *      size: 0\n       *    });\n       *  }));\n       * ```\n       */\n      return caches[cacheId] = {\n\n        /**\n         * @ngdoc method\n         * @name $cacheFactory.Cache#put\n         * @kind function\n         *\n         * @description\n         * Inserts a named entry into the {@link $cacheFactory.Cache Cache} object to be\n         * retrieved later, and incrementing the size of the cache if the key was not already\n         * present in the cache. If behaving like an LRU cache, it will also remove stale\n         * entries from the set.\n         *\n         * It will not insert undefined values into the cache.\n         *\n         * @param {string} key the key under which the cached data is stored.\n         * @param {*} value the value to store alongside the key. If it is undefined, the key\n         *    will not be stored.\n         * @returns {*} the value stored.\n         */\n        put: function(key, value) {\n          if (capacity < Number.MAX_VALUE) {\n            var lruEntry = lruHash[key] || (lruHash[key] = {key: key});\n\n            refresh(lruEntry);\n          }\n\n          if (isUndefined(value)) return;\n          if (!(key in data)) size++;\n          data[key] = value;\n\n          if (size > capacity) {\n            this.remove(staleEnd.key);\n          }\n\n          return value;\n        },\n\n        /**\n         * @ngdoc method\n         * @name $cacheFactory.Cache#get\n         * @kind function\n         *\n         * @description\n         * Retrieves named data stored in the {@link $cacheFactory.Cache Cache} object.\n         *\n         * @param {string} key the key of the data to be retrieved\n         * @returns {*} the value stored.\n         */\n        get: function(key) {\n          if (capacity < Number.MAX_VALUE) {\n            var lruEntry = lruHash[key];\n\n            if (!lruEntry) return;\n\n            refresh(lruEntry);\n          }\n\n          return data[key];\n        },\n\n\n        /**\n         * @ngdoc method\n         * @name $cacheFactory.Cache#remove\n         * @kind function\n         *\n         * @description\n         * Removes an entry from the {@link $cacheFactory.Cache Cache} object.\n         *\n         * @param {string} key the key of the entry to be removed\n         */\n        remove: function(key) {\n          if (capacity < Number.MAX_VALUE) {\n            var lruEntry = lruHash[key];\n\n            if (!lruEntry) return;\n\n            if (lruEntry == freshEnd) freshEnd = lruEntry.p;\n            if (lruEntry == staleEnd) staleEnd = lruEntry.n;\n            link(lruEntry.n,lruEntry.p);\n\n            delete lruHash[key];\n          }\n\n          delete data[key];\n          size--;\n        },\n\n\n        /**\n         * @ngdoc method\n         * @name $cacheFactory.Cache#removeAll\n         * @kind function\n         *\n         * @description\n         * Clears the cache object of any entries.\n         */\n        removeAll: function() {\n          data = {};\n          size = 0;\n          lruHash = {};\n          freshEnd = staleEnd = null;\n        },\n\n\n        /**\n         * @ngdoc method\n         * @name $cacheFactory.Cache#destroy\n         * @kind function\n         *\n         * @description\n         * Destroys the {@link $cacheFactory.Cache Cache} object entirely,\n         * removing it from the {@link $cacheFactory $cacheFactory} set.\n         */\n        destroy: function() {\n          data = null;\n          stats = null;\n          lruHash = null;\n          delete caches[cacheId];\n        },\n\n\n        /**\n         * @ngdoc method\n         * @name $cacheFactory.Cache#info\n         * @kind function\n         *\n         * @description\n         * Retrieve information regarding a particular {@link $cacheFactory.Cache Cache}.\n         *\n         * @returns {object} an object with the following properties:\n         *   <ul>\n         *     <li>**id**: the id of the cache instance</li>\n         *     <li>**size**: the number of entries kept in the cache instance</li>\n         *     <li>**...**: any additional properties from the options object when creating the\n         *       cache.</li>\n         *   </ul>\n         */\n        info: function() {\n          return extend({}, stats, {size: size});\n        }\n      };\n\n\n      /**\n       * makes the `entry` the freshEnd of the LRU linked list\n       */\n      function refresh(entry) {\n        if (entry != freshEnd) {\n          if (!staleEnd) {\n            staleEnd = entry;\n          } else if (staleEnd == entry) {\n            staleEnd = entry.n;\n          }\n\n          link(entry.n, entry.p);\n          link(entry, freshEnd);\n          freshEnd = entry;\n          freshEnd.n = null;\n        }\n      }\n\n\n      /**\n       * bidirectionally links two entries of the LRU linked list\n       */\n      function link(nextEntry, prevEntry) {\n        if (nextEntry != prevEntry) {\n          if (nextEntry) nextEntry.p = prevEntry; //p stands for previous, 'prev' didn't minify\n          if (prevEntry) prevEntry.n = nextEntry; //n stands for next, 'next' didn't minify\n        }\n      }\n    }\n\n\n  /**\n   * @ngdoc method\n   * @name $cacheFactory#info\n   *\n   * @description\n   * Get information about all the caches that have been created\n   *\n   * @returns {Object} - key-value map of `cacheId` to the result of calling `cache#info`\n   */\n    cacheFactory.info = function() {\n      var info = {};\n      forEach(caches, function(cache, cacheId) {\n        info[cacheId] = cache.info();\n      });\n      return info;\n    };\n\n\n  /**\n   * @ngdoc method\n   * @name $cacheFactory#get\n   *\n   * @description\n   * Get access to a cache object by the `cacheId` used when it was created.\n   *\n   * @param {string} cacheId Name or id of a cache to access.\n   * @returns {object} Cache object identified by the cacheId or undefined if no such cache.\n   */\n    cacheFactory.get = function(cacheId) {\n      return caches[cacheId];\n    };\n\n\n    return cacheFactory;\n  };\n}\n\n/**\n * @ngdoc service\n * @name $templateCache\n *\n * @description\n * The first time a template is used, it is loaded in the template cache for quick retrieval. You\n * can load templates directly into the cache in a `script` tag, or by consuming the\n * `$templateCache` service directly.\n *\n * Adding via the `script` tag:\n *\n * ```html\n *   <script type=\"text/ng-template\" id=\"templateId.html\">\n *     <p>This is the content of the template</p>\n *   </script>\n * ```\n *\n * **Note:** the `script` tag containing the template does not need to be included in the `head` of\n * the document, but it must be below the `ng-app` definition.\n *\n * Adding via the $templateCache service:\n *\n * ```js\n * var myApp = angular.module('myApp', []);\n * myApp.run(function($templateCache) {\n *   $templateCache.put('templateId.html', 'This is the content of the template');\n * });\n * ```\n *\n * To retrieve the template later, simply use it in your HTML:\n * ```html\n * <div ng-include=\" 'templateId.html' \"></div>\n * ```\n *\n * or get it via Javascript:\n * ```js\n * $templateCache.get('templateId.html')\n * ```\n *\n * See {@link ng.$cacheFactory $cacheFactory}.\n *\n */\nfunction $TemplateCacheProvider() {\n  this.$get = ['$cacheFactory', function($cacheFactory) {\n    return $cacheFactory('templates');\n  }];\n}\n\n/* ! VARIABLE/FUNCTION NAMING CONVENTIONS THAT APPLY TO THIS FILE!\n *\n * DOM-related variables:\n *\n * - \"node\" - DOM Node\n * - \"element\" - DOM Element or Node\n * - \"$node\" or \"$element\" - jqLite-wrapped node or element\n *\n *\n * Compiler related stuff:\n *\n * - \"linkFn\" - linking fn of a single directive\n * - \"nodeLinkFn\" - function that aggregates all linking fns for a particular node\n * - \"childLinkFn\" -  function that aggregates all linking fns for child nodes of a particular node\n * - \"compositeLinkFn\" - function that aggregates all linking fns for a compilation root (nodeList)\n */\n\n\n/**\n * @ngdoc service\n * @name $compile\n * @kind function\n *\n * @description\n * Compiles an HTML string or DOM into a template and produces a template function, which\n * can then be used to link {@link ng.$rootScope.Scope `scope`} and the template together.\n *\n * The compilation is a process of walking the DOM tree and matching DOM elements to\n * {@link ng.$compileProvider#directive directives}.\n *\n * <div class=\"alert alert-warning\">\n * **Note:** This document is an in-depth reference of all directive options.\n * For a gentle introduction to directives with examples of common use cases,\n * see the {@link guide/directive directive guide}.\n * </div>\n *\n * ## Comprehensive Directive API\n *\n * There are many different options for a directive.\n *\n * The difference resides in the return value of the factory function.\n * You can either return a \"Directive Definition Object\" (see below) that defines the directive properties,\n * or just the `postLink` function (all other properties will have the default values).\n *\n * <div class=\"alert alert-success\">\n * **Best Practice:** It's recommended to use the \"directive definition object\" form.\n * </div>\n *\n * Here's an example directive declared with a Directive Definition Object:\n *\n * ```js\n *   var myModule = angular.module(...);\n *\n *   myModule.directive('directiveName', function factory(injectables) {\n *     var directiveDefinitionObject = {\n *       priority: 0,\n *       template: '<div></div>', // or // function(tElement, tAttrs) { ... },\n *       // or\n *       // templateUrl: 'directive.html', // or // function(tElement, tAttrs) { ... },\n *       transclude: false,\n *       restrict: 'A',\n *       scope: false,\n *       controller: function($scope, $element, $attrs, $transclude, otherInjectables) { ... },\n *       controllerAs: 'stringAlias',\n *       require: 'siblingDirectiveName', // or // ['^parentDirectiveName', '?optionalDirectiveName', '?^optionalParent'],\n *       compile: function compile(tElement, tAttrs, transclude) {\n *         return {\n *           pre: function preLink(scope, iElement, iAttrs, controller) { ... },\n *           post: function postLink(scope, iElement, iAttrs, controller) { ... }\n *         }\n *         // or\n *         // return function postLink( ... ) { ... }\n *       },\n *       // or\n *       // link: {\n *       //  pre: function preLink(scope, iElement, iAttrs, controller) { ... },\n *       //  post: function postLink(scope, iElement, iAttrs, controller) { ... }\n *       // }\n *       // or\n *       // link: function postLink( ... ) { ... }\n *     };\n *     return directiveDefinitionObject;\n *   });\n * ```\n *\n * <div class=\"alert alert-warning\">\n * **Note:** Any unspecified options will use the default value. You can see the default values below.\n * </div>\n *\n * Therefore the above can be simplified as:\n *\n * ```js\n *   var myModule = angular.module(...);\n *\n *   myModule.directive('directiveName', function factory(injectables) {\n *     var directiveDefinitionObject = {\n *       link: function postLink(scope, iElement, iAttrs) { ... }\n *     };\n *     return directiveDefinitionObject;\n *     // or\n *     // return function postLink(scope, iElement, iAttrs) { ... }\n *   });\n * ```\n *\n *\n *\n * ### Directive Definition Object\n *\n * The directive definition object provides instructions to the {@link ng.$compile\n * compiler}. The attributes are:\n *\n * #### `priority`\n * When there are multiple directives defined on a single DOM element, sometimes it\n * is necessary to specify the order in which the directives are applied. The `priority` is used\n * to sort the directives before their `compile` functions get called. Priority is defined as a\n * number. Directives with greater numerical `priority` are compiled first. Pre-link functions\n * are also run in priority order, but post-link functions are run in reverse order. The order\n * of directives with the same priority is undefined. The default priority is `0`.\n *\n * #### `terminal`\n * If set to true then the current `priority` will be the last set of directives\n * which will execute (any directives at the current priority will still execute\n * as the order of execution on same `priority` is undefined).\n *\n * #### `scope`\n * **If set to `true`,** then a new scope will be created for this directive. If multiple directives on the\n * same element request a new scope, only one new scope is created. The new scope rule does not\n * apply for the root of the template since the root of the template always gets a new scope.\n *\n * **If set to `{}` (object hash),** then a new \"isolate\" scope is created. The 'isolate' scope differs from\n * normal scope in that it does not prototypically inherit from the parent scope. This is useful\n * when creating reusable components, which should not accidentally read or modify data in the\n * parent scope.\n *\n * The 'isolate' scope takes an object hash which defines a set of local scope properties\n * derived from the parent scope. These local properties are useful for aliasing values for\n * templates. Locals definition is a hash of local scope property to its source:\n *\n * * `@` or `@attr` - bind a local scope property to the value of DOM attribute. The result is\n *   always a string since DOM attributes are strings. If no `attr` name is specified  then the\n *   attribute name is assumed to be the same as the local name.\n *   Given `<widget my-attr=\"hello {{name}}\">` and widget definition\n *   of `scope: { localName:'@myAttr' }`, then widget scope property `localName` will reflect\n *   the interpolated value of `hello {{name}}`. As the `name` attribute changes so will the\n *   `localName` property on the widget scope. The `name` is read from the parent scope (not\n *   component scope).\n *\n * * `=` or `=attr` - set up bi-directional binding between a local scope property and the\n *   parent scope property of name defined via the value of the `attr` attribute. If no `attr`\n *   name is specified then the attribute name is assumed to be the same as the local name.\n *   Given `<widget my-attr=\"parentModel\">` and widget definition of\n *   `scope: { localModel:'=myAttr' }`, then widget scope property `localModel` will reflect the\n *   value of `parentModel` on the parent scope. Any changes to `parentModel` will be reflected\n *   in `localModel` and any changes in `localModel` will reflect in `parentModel`. If the parent\n *   scope property doesn't exist, it will throw a NON_ASSIGNABLE_MODEL_EXPRESSION exception. You\n *   can avoid this behavior using `=?` or `=?attr` in order to flag the property as optional.\n *\n * * `&` or `&attr` - provides a way to execute an expression in the context of the parent scope.\n *   If no `attr` name is specified then the attribute name is assumed to be the same as the\n *   local name. Given `<widget my-attr=\"count = count + value\">` and widget definition of\n *   `scope: { localFn:'&myAttr' }`, then isolate scope property `localFn` will point to\n *   a function wrapper for the `count = count + value` expression. Often it's desirable to\n *   pass data from the isolated scope via an expression and to the parent scope, this can be\n *   done by passing a map of local variable names and values into the expression wrapper fn.\n *   For example, if the expression is `increment(amount)` then we can specify the amount value\n *   by calling the `localFn` as `localFn({amount: 22})`.\n *\n *\n *\n * #### `controller`\n * Controller constructor function. The controller is instantiated before the\n * pre-linking phase and it is shared with other directives (see\n * `require` attribute). This allows the directives to communicate with each other and augment\n * each other's behavior. The controller is injectable (and supports bracket notation) with the following locals:\n *\n * * `$scope` - Current scope associated with the element\n * * `$element` - Current element\n * * `$attrs` - Current attributes object for the element\n * * `$transclude` - A transclude linking function pre-bound to the correct transclusion scope.\n *    The scope can be overridden by an optional first argument.\n *   `function([scope], cloneLinkingFn)`.\n *\n *\n * #### `require`\n * Require another directive and inject its controller as the fourth argument to the linking function. The\n * `require` takes a string name (or array of strings) of the directive(s) to pass in. If an array is used, the\n * injected argument will be an array in corresponding order. If no such directive can be\n * found, or if the directive does not have a controller, then an error is raised. The name can be prefixed with:\n *\n * * (no prefix) - Locate the required controller on the current element. Throw an error if not found.\n * * `?` - Attempt to locate the required controller or pass `null` to the `link` fn if not found.\n * * `^` - Locate the required controller by searching the element's parents. Throw an error if not found.\n * * `?^` - Attempt to locate the required controller by searching the element's parents or pass `null` to the\n *   `link` fn if not found.\n *\n *\n * #### `controllerAs`\n * Controller alias at the directive scope. An alias for the controller so it\n * can be referenced at the directive template. The directive needs to define a scope for this\n * configuration to be used. Useful in the case when directive is used as component.\n *\n *\n * #### `restrict`\n * String of subset of `EACM` which restricts the directive to a specific directive\n * declaration style. If omitted, the default (attributes only) is used.\n *\n * * `E` - Element name: `<my-directive></my-directive>`\n * * `A` - Attribute (default): `<div my-directive=\"exp\"></div>`\n * * `C` - Class: `<div class=\"my-directive: exp;\"></div>`\n * * `M` - Comment: `<!-- directive: my-directive exp -->`\n *\n *\n * #### `template`\n * replace the current element with the contents of the HTML. The replacement process\n * migrates all of the attributes / classes from the old element to the new one. See the\n * {@link guide/directive#creating-custom-directives_creating-directives_template-expanding-directive\n * Directives Guide} for an example.\n *\n * You can specify `template` as a string representing the template or as a function which takes\n * two arguments `tElement` and `tAttrs` (described in the `compile` function api below) and\n * returns a string value representing the template.\n *\n *\n * #### `templateUrl`\n * Same as `template` but the template is loaded from the specified URL. Because\n * the template loading is asynchronous the compilation/linking is suspended until the template\n * is loaded.\n *\n * You can specify `templateUrl` as a string representing the URL or as a function which takes two\n * arguments `tElement` and `tAttrs` (described in the `compile` function api below) and returns\n * a string value representing the url.  In either case, the template URL is passed through {@link\n * api/ng.$sce#getTrustedResourceUrl $sce.getTrustedResourceUrl}.\n *\n *\n * #### `replace` ([*DEPRECATED*!], will be removed in next major release)\n * specify where the template should be inserted. Defaults to `false`.\n *\n * * `true` - the template will replace the current element.\n * * `false` - the template will replace the contents of the current element.\n *\n *\n * #### `transclude`\n * compile the content of the element and make it available to the directive.\n * Typically used with {@link ng.directive:ngTransclude\n * ngTransclude}. The advantage of transclusion is that the linking function receives a\n * transclusion function which is pre-bound to the correct scope. In a typical setup the widget\n * creates an `isolate` scope, but the transclusion is not a child, but a sibling of the `isolate`\n * scope. This makes it possible for the widget to have private state, and the transclusion to\n * be bound to the parent (pre-`isolate`) scope.\n *\n * * `true` - transclude the content of the directive.\n * * `'element'` - transclude the whole element including any directives defined at lower priority.\n *\n *\n * #### `compile`\n *\n * ```js\n *   function compile(tElement, tAttrs, transclude) { ... }\n * ```\n *\n * The compile function deals with transforming the template DOM. Since most directives do not do\n * template transformation, it is not used often. The compile function takes the following arguments:\n *\n *   * `tElement` - template element - The element where the directive has been declared. It is\n *     safe to do template transformation on the element and child elements only.\n *\n *   * `tAttrs` - template attributes - Normalized list of attributes declared on this element shared\n *     between all directive compile functions.\n *\n *   * `transclude` -  [*DEPRECATED*!] A transclude linking function: `function(scope, cloneLinkingFn)`\n *\n * <div class=\"alert alert-warning\">\n * **Note:** The template instance and the link instance may be different objects if the template has\n * been cloned. For this reason it is **not** safe to do anything other than DOM transformations that\n * apply to all cloned DOM nodes within the compile function. Specifically, DOM listener registration\n * should be done in a linking function rather than in a compile function.\n * </div>\n\n * <div class=\"alert alert-warning\">\n * **Note:** The compile function cannot handle directives that recursively use themselves in their\n * own templates or compile functions. Compiling these directives results in an infinite loop and a\n * stack overflow errors.\n *\n * This can be avoided by manually using $compile in the postLink function to imperatively compile\n * a directive's template instead of relying on automatic template compilation via `template` or\n * `templateUrl` declaration or manual compilation inside the compile function.\n * </div>\n *\n * <div class=\"alert alert-error\">\n * **Note:** The `transclude` function that is passed to the compile function is deprecated, as it\n *   e.g. does not know about the right outer scope. Please use the transclude function that is passed\n *   to the link function instead.\n * </div>\n\n * A compile function can have a return value which can be either a function or an object.\n *\n * * returning a (post-link) function - is equivalent to registering the linking function via the\n *   `link` property of the config object when the compile function is empty.\n *\n * * returning an object with function(s) registered via `pre` and `post` properties - allows you to\n *   control when a linking function should be called during the linking phase. See info about\n *   pre-linking and post-linking functions below.\n *\n *\n * #### `link`\n * This property is used only if the `compile` property is not defined.\n *\n * ```js\n *   function link(scope, iElement, iAttrs, controller, transcludeFn) { ... }\n * ```\n *\n * The link function is responsible for registering DOM listeners as well as updating the DOM. It is\n * executed after the template has been cloned. This is where most of the directive logic will be\n * put.\n *\n *   * `scope` - {@link ng.$rootScope.Scope Scope} - The scope to be used by the\n *     directive for registering {@link ng.$rootScope.Scope#$watch watches}.\n *\n *   * `iElement` - instance element - The element where the directive is to be used. It is safe to\n *     manipulate the children of the element only in `postLink` function since the children have\n *     already been linked.\n *\n *   * `iAttrs` - instance attributes - Normalized list of attributes declared on this element shared\n *     between all directive linking functions.\n *\n *   * `controller` - a controller instance - A controller instance if at least one directive on the\n *     element defines a controller. The controller is shared among all the directives, which allows\n *     the directives to use the controllers as a communication channel.\n *\n *   * `transcludeFn` - A transclude linking function pre-bound to the correct transclusion scope.\n *     The scope can be overridden by an optional first argument. This is the same as the `$transclude`\n *     parameter of directive controllers.\n *     `function([scope], cloneLinkingFn)`.\n *\n *\n * #### Pre-linking function\n *\n * Executed before the child elements are linked. Not safe to do DOM transformation since the\n * compiler linking function will fail to locate the correct elements for linking.\n *\n * #### Post-linking function\n *\n * Executed after the child elements are linked. It is safe to do DOM transformation in the post-linking function.\n *\n * <a name=\"Attributes\"></a>\n * ### Attributes\n *\n * The {@link ng.$compile.directive.Attributes Attributes} object - passed as a parameter in the\n * `link()` or `compile()` functions. It has a variety of uses.\n *\n * accessing *Normalized attribute names:*\n * Directives like 'ngBind' can be expressed in many ways: 'ng:bind', `data-ng-bind`, or 'x-ng-bind'.\n * the attributes object allows for normalized access to\n *   the attributes.\n *\n * * *Directive inter-communication:* All directives share the same instance of the attributes\n *   object which allows the directives to use the attributes object as inter directive\n *   communication.\n *\n * * *Supports interpolation:* Interpolation attributes are assigned to the attribute object\n *   allowing other directives to read the interpolated value.\n *\n * * *Observing interpolated attributes:* Use `$observe` to observe the value changes of attributes\n *   that contain interpolation (e.g. `src=\"{{bar}}\"`). Not only is this very efficient but it's also\n *   the only way to easily get the actual value because during the linking phase the interpolation\n *   hasn't been evaluated yet and so the value is at this time set to `undefined`.\n *\n * ```js\n * function linkingFn(scope, elm, attrs, ctrl) {\n *   // get the attribute value\n *   console.log(attrs.ngModel);\n *\n *   // change the attribute\n *   attrs.$set('ngModel', 'new value');\n *\n *   // observe changes to interpolated attribute\n *   attrs.$observe('ngModel', function(value) {\n *     console.log('ngModel has changed value to ' + value);\n *   });\n * }\n * ```\n *\n * Below is an example using `$compileProvider`.\n *\n * <div class=\"alert alert-warning\">\n * **Note**: Typically directives are registered with `module.directive`. The example below is\n * to illustrate how `$compile` works.\n * </div>\n *\n <example module=\"compile\">\n   <file name=\"index.html\">\n    <script>\n      angular.module('compile', [], function($compileProvider) {\n        // configure new 'compile' directive by passing a directive\n        // factory function. The factory function injects the '$compile'\n        $compileProvider.directive('compile', function($compile) {\n          // directive factory creates a link function\n          return function(scope, element, attrs) {\n            scope.$watch(\n              function(scope) {\n                 // watch the 'compile' expression for changes\n                return scope.$eval(attrs.compile);\n              },\n              function(value) {\n                // when the 'compile' expression changes\n                // assign it into the current DOM\n                element.html(value);\n\n                // compile the new DOM and link it to the current\n                // scope.\n                // NOTE: we only compile .childNodes so that\n                // we don't get into infinite loop compiling ourselves\n                $compile(element.contents())(scope);\n              }\n            );\n          };\n        })\n      });\n\n      function Ctrl($scope) {\n        $scope.name = 'Angular';\n        $scope.html = 'Hello {{name}}';\n      }\n    </script>\n    <div ng-controller=\"Ctrl\">\n      <input ng-model=\"name\"> <br>\n      <textarea ng-model=\"html\"></textarea> <br>\n      <div compile=\"html\"></div>\n    </div>\n   </file>\n   <file name=\"protractor.js\" type=\"protractor\">\n     it('should auto compile', function() {\n       var textarea = $('textarea');\n       var output = $('div[compile]');\n       // The initial state reads 'Hello Angular'.\n       expect(output.getText()).toBe('Hello Angular');\n       textarea.clear();\n       textarea.sendKeys('{{name}}!');\n       expect(output.getText()).toBe('Angular!');\n     });\n   </file>\n </example>\n\n *\n *\n * @param {string|DOMElement} element Element or HTML string to compile into a template function.\n * @param {function(angular.Scope, cloneAttachFn=)} transclude function available to directives.\n * @param {number} maxPriority only apply directives lower than given priority (Only effects the\n *                 root element(s), not their children)\n * @returns {function(scope, cloneAttachFn=)} a link function which is used to bind template\n * (a DOM element/tree) to a scope. Where:\n *\n *  * `scope` - A {@link ng.$rootScope.Scope Scope} to bind to.\n *  * `cloneAttachFn` - If `cloneAttachFn` is provided, then the link function will clone the\n *  `template` and call the `cloneAttachFn` function allowing the caller to attach the\n *  cloned elements to the DOM document at the appropriate place. The `cloneAttachFn` is\n *  called as: <br> `cloneAttachFn(clonedElement, scope)` where:\n *\n *      * `clonedElement` - is a clone of the original `element` passed into the compiler.\n *      * `scope` - is the current scope with which the linking function is working with.\n *\n * Calling the linking function returns the element of the template. It is either the original\n * element passed in, or the clone of the element if the `cloneAttachFn` is provided.\n *\n * After linking the view is not updated until after a call to $digest which typically is done by\n * Angular automatically.\n *\n * If you need access to the bound view, there are two ways to do it:\n *\n * - If you are not asking the linking function to clone the template, create the DOM element(s)\n *   before you send them to the compiler and keep this reference around.\n *   ```js\n *     var element = $compile('<p>{{total}}</p>')(scope);\n *   ```\n *\n * - if on the other hand, you need the element to be cloned, the view reference from the original\n *   example would not point to the clone, but rather to the original template that was cloned. In\n *   this case, you can access the clone via the cloneAttachFn:\n *   ```js\n *     var templateElement = angular.element('<p>{{total}}</p>'),\n *         scope = ....;\n *\n *     var clonedElement = $compile(templateElement)(scope, function(clonedElement, scope) {\n *       //attach the clone to DOM document at the right place\n *     });\n *\n *     //now we have reference to the cloned DOM via `clonedElement`\n *   ```\n *\n *\n * For information on how the compiler works, see the\n * {@link guide/compiler Angular HTML Compiler} section of the Developer Guide.\n */\n\nvar $compileMinErr = minErr('$compile');\n\n/**\n * @ngdoc provider\n * @name $compileProvider\n * @kind function\n *\n * @description\n */\n$CompileProvider.$inject = ['$provide', '$$sanitizeUriProvider'];\nfunction $CompileProvider($provide, $$sanitizeUriProvider) {\n  var hasDirectives = {},\n      Suffix = 'Directive',\n      COMMENT_DIRECTIVE_REGEXP = /^\\s*directive\\:\\s*([\\d\\w_\\-]+)\\s+(.*)$/,\n      CLASS_DIRECTIVE_REGEXP = /(([\\d\\w_\\-]+)(?:\\:([^;]+))?;?)/;\n\n  // Ref: http://developers.whatwg.org/webappapis.html#event-handler-idl-attributes\n  // The assumption is that future DOM event attribute names will begin with\n  // 'on' and be composed of only English letters.\n  var EVENT_HANDLER_ATTR_REGEXP = /^(on[a-z]+|formaction)$/;\n\n  /**\n   * @ngdoc method\n   * @name $compileProvider#directive\n   * @kind function\n   *\n   * @description\n   * Register a new directive with the compiler.\n   *\n   * @param {string|Object} name Name of the directive in camel-case (i.e. <code>ngBind</code> which\n   *    will match as <code>ng-bind</code>), or an object map of directives where the keys are the\n   *    names and the values are the factories.\n   * @param {Function|Array} directiveFactory An injectable directive factory function. See\n   *    {@link guide/directive} for more info.\n   * @returns {ng.$compileProvider} Self for chaining.\n   */\n   this.directive = function registerDirective(name, directiveFactory) {\n    assertNotHasOwnProperty(name, 'directive');\n    if (isString(name)) {\n      assertArg(directiveFactory, 'directiveFactory');\n      if (!hasDirectives.hasOwnProperty(name)) {\n        hasDirectives[name] = [];\n        $provide.factory(name + Suffix, ['$injector', '$exceptionHandler',\n          function($injector, $exceptionHandler) {\n            var directives = [];\n            forEach(hasDirectives[name], function(directiveFactory, index) {\n              try {\n                var directive = $injector.invoke(directiveFactory);\n                if (isFunction(directive)) {\n                  directive = { compile: valueFn(directive) };\n                } else if (!directive.compile && directive.link) {\n                  directive.compile = valueFn(directive.link);\n                }\n                directive.priority = directive.priority || 0;\n                directive.index = index;\n                directive.name = directive.name || name;\n                directive.require = directive.require || (directive.controller && directive.name);\n                directive.restrict = directive.restrict || 'A';\n                directives.push(directive);\n              } catch (e) {\n                $exceptionHandler(e);\n              }\n            });\n            return directives;\n          }]);\n      }\n      hasDirectives[name].push(directiveFactory);\n    } else {\n      forEach(name, reverseParams(registerDirective));\n    }\n    return this;\n  };\n\n\n  /**\n   * @ngdoc method\n   * @name $compileProvider#aHrefSanitizationWhitelist\n   * @kind function\n   *\n   * @description\n   * Retrieves or overrides the default regular expression that is used for whitelisting of safe\n   * urls during a[href] sanitization.\n   *\n   * The sanitization is a security measure aimed at prevent XSS attacks via html links.\n   *\n   * Any url about to be assigned to a[href] via data-binding is first normalized and turned into\n   * an absolute url. Afterwards, the url is matched against the `aHrefSanitizationWhitelist`\n   * regular expression. If a match is found, the original url is written into the dom. Otherwise,\n   * the absolute url is prefixed with `'unsafe:'` string and only then is it written into the DOM.\n   *\n   * @param {RegExp=} regexp New regexp to whitelist urls with.\n   * @returns {RegExp|ng.$compileProvider} Current RegExp if called without value or self for\n   *    chaining otherwise.\n   */\n  this.aHrefSanitizationWhitelist = function(regexp) {\n    if (isDefined(regexp)) {\n      $$sanitizeUriProvider.aHrefSanitizationWhitelist(regexp);\n      return this;\n    } else {\n      return $$sanitizeUriProvider.aHrefSanitizationWhitelist();\n    }\n  };\n\n\n  /**\n   * @ngdoc method\n   * @name $compileProvider#imgSrcSanitizationWhitelist\n   * @kind function\n   *\n   * @description\n   * Retrieves or overrides the default regular expression that is used for whitelisting of safe\n   * urls during img[src] sanitization.\n   *\n   * The sanitization is a security measure aimed at prevent XSS attacks via html links.\n   *\n   * Any url about to be assigned to img[src] via data-binding is first normalized and turned into\n   * an absolute url. Afterwards, the url is matched against the `imgSrcSanitizationWhitelist`\n   * regular expression. If a match is found, the original url is written into the dom. Otherwise,\n   * the absolute url is prefixed with `'unsafe:'` string and only then is it written into the DOM.\n   *\n   * @param {RegExp=} regexp New regexp to whitelist urls with.\n   * @returns {RegExp|ng.$compileProvider} Current RegExp if called without value or self for\n   *    chaining otherwise.\n   */\n  this.imgSrcSanitizationWhitelist = function(regexp) {\n    if (isDefined(regexp)) {\n      $$sanitizeUriProvider.imgSrcSanitizationWhitelist(regexp);\n      return this;\n    } else {\n      return $$sanitizeUriProvider.imgSrcSanitizationWhitelist();\n    }\n  };\n\n  this.$get = [\n            '$injector', '$interpolate', '$exceptionHandler', '$http', '$templateCache', '$parse',\n            '$controller', '$rootScope', '$document', '$sce', '$animate', '$$sanitizeUri',\n    function($injector,   $interpolate,   $exceptionHandler,   $http,   $templateCache,   $parse,\n             $controller,   $rootScope,   $document,   $sce,   $animate,   $$sanitizeUri) {\n\n    var Attributes = function(element, attr) {\n      this.$$element = element;\n      this.$attr = attr || {};\n    };\n\n    Attributes.prototype = {\n      $normalize: directiveNormalize,\n\n\n      /**\n       * @ngdoc method\n       * @name $compile.directive.Attributes#$addClass\n       * @kind function\n       *\n       * @description\n       * Adds the CSS class value specified by the classVal parameter to the element. If animations\n       * are enabled then an animation will be triggered for the class addition.\n       *\n       * @param {string} classVal The className value that will be added to the element\n       */\n      $addClass : function(classVal) {\n        if(classVal && classVal.length > 0) {\n          $animate.addClass(this.$$element, classVal);\n        }\n      },\n\n      /**\n       * @ngdoc method\n       * @name $compile.directive.Attributes#$removeClass\n       * @kind function\n       *\n       * @description\n       * Removes the CSS class value specified by the classVal parameter from the element. If\n       * animations are enabled then an animation will be triggered for the class removal.\n       *\n       * @param {string} classVal The className value that will be removed from the element\n       */\n      $removeClass : function(classVal) {\n        if(classVal && classVal.length > 0) {\n          $animate.removeClass(this.$$element, classVal);\n        }\n      },\n\n      /**\n       * @ngdoc method\n       * @name $compile.directive.Attributes#$updateClass\n       * @kind function\n       *\n       * @description\n       * Adds and removes the appropriate CSS class values to the element based on the difference\n       * between the new and old CSS class values (specified as newClasses and oldClasses).\n       *\n       * @param {string} newClasses The current CSS className value\n       * @param {string} oldClasses The former CSS className value\n       */\n      $updateClass : function(newClasses, oldClasses) {\n        var toAdd = tokenDifference(newClasses, oldClasses);\n        var toRemove = tokenDifference(oldClasses, newClasses);\n\n        if(toAdd.length === 0) {\n          $animate.removeClass(this.$$element, toRemove);\n        } else if(toRemove.length === 0) {\n          $animate.addClass(this.$$element, toAdd);\n        } else {\n          $animate.setClass(this.$$element, toAdd, toRemove);\n        }\n      },\n\n      /**\n       * Set a normalized attribute on the element in a way such that all directives\n       * can share the attribute. This function properly handles boolean attributes.\n       * @param {string} key Normalized key. (ie ngAttribute)\n       * @param {string|boolean} value The value to set. If `null` attribute will be deleted.\n       * @param {boolean=} writeAttr If false, does not write the value to DOM element attribute.\n       *     Defaults to true.\n       * @param {string=} attrName Optional none normalized name. Defaults to key.\n       */\n      $set: function(key, value, writeAttr, attrName) {\n        // TODO: decide whether or not to throw an error if \"class\"\n        //is set through this function since it may cause $updateClass to\n        //become unstable.\n\n        var booleanKey = getBooleanAttrName(this.$$element[0], key),\n            normalizedVal,\n            nodeName;\n\n        if (booleanKey) {\n          this.$$element.prop(key, value);\n          attrName = booleanKey;\n        }\n\n        this[key] = value;\n\n        // translate normalized key to actual key\n        if (attrName) {\n          this.$attr[key] = attrName;\n        } else {\n          attrName = this.$attr[key];\n          if (!attrName) {\n            this.$attr[key] = attrName = snake_case(key, '-');\n          }\n        }\n\n        nodeName = nodeName_(this.$$element);\n\n        // sanitize a[href] and img[src] values\n        if ((nodeName === 'A' && key === 'href') ||\n            (nodeName === 'IMG' && key === 'src')) {\n          this[key] = value = $$sanitizeUri(value, key === 'src');\n        }\n\n        if (writeAttr !== false) {\n          if (value === null || value === undefined) {\n            this.$$element.removeAttr(attrName);\n          } else {\n            this.$$element.attr(attrName, value);\n          }\n        }\n\n        // fire observers\n        var $$observers = this.$$observers;\n        $$observers && forEach($$observers[key], function(fn) {\n          try {\n            fn(value);\n          } catch (e) {\n            $exceptionHandler(e);\n          }\n        });\n      },\n\n\n      /**\n       * @ngdoc method\n       * @name $compile.directive.Attributes#$observe\n       * @kind function\n       *\n       * @description\n       * Observes an interpolated attribute.\n       *\n       * The observer function will be invoked once during the next `$digest` following\n       * compilation. The observer is then invoked whenever the interpolated value\n       * changes.\n       *\n       * @param {string} key Normalized key. (ie ngAttribute) .\n       * @param {function(interpolatedValue)} fn Function that will be called whenever\n                the interpolated value of the attribute changes.\n       *        See the {@link guide/directive#Attributes Directives} guide for more info.\n       * @returns {function()} the `fn` parameter.\n       */\n      $observe: function(key, fn) {\n        var attrs = this,\n            $$observers = (attrs.$$observers || (attrs.$$observers = {})),\n            listeners = ($$observers[key] || ($$observers[key] = []));\n\n        listeners.push(fn);\n        $rootScope.$evalAsync(function() {\n          if (!listeners.$$inter) {\n            // no one registered attribute interpolation function, so lets call it manually\n            fn(attrs[key]);\n          }\n        });\n        return fn;\n      }\n    };\n\n    var startSymbol = $interpolate.startSymbol(),\n        endSymbol = $interpolate.endSymbol(),\n        denormalizeTemplate = (startSymbol == '{{' || endSymbol  == '}}')\n            ? identity\n            : function denormalizeTemplate(template) {\n              return template.replace(/\\{\\{/g, startSymbol).replace(/}}/g, endSymbol);\n        },\n        NG_ATTR_BINDING = /^ngAttr[A-Z]/;\n\n\n    return compile;\n\n    //================================\n\n    function compile($compileNodes, transcludeFn, maxPriority, ignoreDirective,\n                        previousCompileContext) {\n      if (!($compileNodes instanceof jqLite)) {\n        // jquery always rewraps, whereas we need to preserve the original selector so that we can\n        // modify it.\n        $compileNodes = jqLite($compileNodes);\n      }\n      // We can not compile top level text elements since text nodes can be merged and we will\n      // not be able to attach scope data to them, so we will wrap them in <span>\n      forEach($compileNodes, function(node, index){\n        if (node.nodeType == 3 /* text node */ && node.nodeValue.match(/\\S+/) /* non-empty */ ) {\n          $compileNodes[index] = node = jqLite(node).wrap('<span></span>').parent()[0];\n        }\n      });\n      var compositeLinkFn =\n              compileNodes($compileNodes, transcludeFn, $compileNodes,\n                           maxPriority, ignoreDirective, previousCompileContext);\n      safeAddClass($compileNodes, 'ng-scope');\n      return function publicLinkFn(scope, cloneConnectFn, transcludeControllers){\n        assertArg(scope, 'scope');\n        // important!!: we must call our jqLite.clone() since the jQuery one is trying to be smart\n        // and sometimes changes the structure of the DOM.\n        var $linkNode = cloneConnectFn\n          ? JQLitePrototype.clone.call($compileNodes) // IMPORTANT!!!\n          : $compileNodes;\n\n        forEach(transcludeControllers, function(instance, name) {\n          $linkNode.data('$' + name + 'Controller', instance);\n        });\n\n        // Attach scope only to non-text nodes.\n        for(var i = 0, ii = $linkNode.length; i<ii; i++) {\n          var node = $linkNode[i],\n              nodeType = node.nodeType;\n          if (nodeType === 1 /* element */ || nodeType === 9 /* document */) {\n            $linkNode.eq(i).data('$scope', scope);\n          }\n        }\n\n        if (cloneConnectFn) cloneConnectFn($linkNode, scope);\n        if (compositeLinkFn) compositeLinkFn(scope, $linkNode, $linkNode);\n        return $linkNode;\n      };\n    }\n\n    function safeAddClass($element, className) {\n      try {\n        $element.addClass(className);\n      } catch(e) {\n        // ignore, since it means that we are trying to set class on\n        // SVG element, where class name is read-only.\n      }\n    }\n\n    /**\n     * Compile function matches each node in nodeList against the directives. Once all directives\n     * for a particular node are collected their compile functions are executed. The compile\n     * functions return values - the linking functions - are combined into a composite linking\n     * function, which is the a linking function for the node.\n     *\n     * @param {NodeList} nodeList an array of nodes or NodeList to compile\n     * @param {function(angular.Scope, cloneAttachFn=)} transcludeFn A linking function, where the\n     *        scope argument is auto-generated to the new child of the transcluded parent scope.\n     * @param {DOMElement=} $rootElement If the nodeList is the root of the compilation tree then\n     *        the rootElement must be set the jqLite collection of the compile root. This is\n     *        needed so that the jqLite collection items can be replaced with widgets.\n     * @param {number=} maxPriority Max directive priority.\n     * @returns {Function} A composite linking function of all of the matched directives or null.\n     */\n    function compileNodes(nodeList, transcludeFn, $rootElement, maxPriority, ignoreDirective,\n                            previousCompileContext) {\n      var linkFns = [],\n          attrs, directives, nodeLinkFn, childNodes, childLinkFn, linkFnFound;\n\n      for (var i = 0; i < nodeList.length; i++) {\n        attrs = new Attributes();\n\n        // we must always refer to nodeList[i] since the nodes can be replaced underneath us.\n        directives = collectDirectives(nodeList[i], [], attrs, i === 0 ? maxPriority : undefined,\n                                        ignoreDirective);\n\n        nodeLinkFn = (directives.length)\n            ? applyDirectivesToNode(directives, nodeList[i], attrs, transcludeFn, $rootElement,\n                                      null, [], [], previousCompileContext)\n            : null;\n\n        if (nodeLinkFn && nodeLinkFn.scope) {\n          safeAddClass(jqLite(nodeList[i]), 'ng-scope');\n        }\n\n        childLinkFn = (nodeLinkFn && nodeLinkFn.terminal ||\n                      !(childNodes = nodeList[i].childNodes) ||\n                      !childNodes.length)\n            ? null\n            : compileNodes(childNodes,\n                 nodeLinkFn ? nodeLinkFn.transclude : transcludeFn);\n\n        linkFns.push(nodeLinkFn, childLinkFn);\n        linkFnFound = linkFnFound || nodeLinkFn || childLinkFn;\n        //use the previous context only for the first element in the virtual group\n        previousCompileContext = null;\n      }\n\n      // return a linking function if we have found anything, null otherwise\n      return linkFnFound ? compositeLinkFn : null;\n\n      function compositeLinkFn(scope, nodeList, $rootElement, boundTranscludeFn) {\n        var nodeLinkFn, childLinkFn, node, $node, childScope, childTranscludeFn, i, ii, n;\n\n        // copy nodeList so that linking doesn't break due to live list updates.\n        var nodeListLength = nodeList.length,\n            stableNodeList = new Array(nodeListLength);\n        for (i = 0; i < nodeListLength; i++) {\n          stableNodeList[i] = nodeList[i];\n        }\n\n        for(i = 0, n = 0, ii = linkFns.length; i < ii; n++) {\n          node = stableNodeList[n];\n          nodeLinkFn = linkFns[i++];\n          childLinkFn = linkFns[i++];\n          $node = jqLite(node);\n\n          if (nodeLinkFn) {\n            if (nodeLinkFn.scope) {\n              childScope = scope.$new();\n              $node.data('$scope', childScope);\n            } else {\n              childScope = scope;\n            }\n            childTranscludeFn = nodeLinkFn.transclude;\n            if (childTranscludeFn || (!boundTranscludeFn && transcludeFn)) {\n              nodeLinkFn(childLinkFn, childScope, node, $rootElement,\n                createBoundTranscludeFn(scope, childTranscludeFn || transcludeFn)\n              );\n            } else {\n              nodeLinkFn(childLinkFn, childScope, node, $rootElement, boundTranscludeFn);\n            }\n          } else if (childLinkFn) {\n            childLinkFn(scope, node.childNodes, undefined, boundTranscludeFn);\n          }\n        }\n      }\n    }\n\n    function createBoundTranscludeFn(scope, transcludeFn) {\n      return function boundTranscludeFn(transcludedScope, cloneFn, controllers) {\n        var scopeCreated = false;\n\n        if (!transcludedScope) {\n          transcludedScope = scope.$new();\n          transcludedScope.$$transcluded = true;\n          scopeCreated = true;\n        }\n\n        var clone = transcludeFn(transcludedScope, cloneFn, controllers);\n        if (scopeCreated) {\n          clone.on('$destroy', bind(transcludedScope, transcludedScope.$destroy));\n        }\n        return clone;\n      };\n    }\n\n    /**\n     * Looks for directives on the given node and adds them to the directive collection which is\n     * sorted.\n     *\n     * @param node Node to search.\n     * @param directives An array to which the directives are added to. This array is sorted before\n     *        the function returns.\n     * @param attrs The shared attrs object which is used to populate the normalized attributes.\n     * @param {number=} maxPriority Max directive priority.\n     */\n    function collectDirectives(node, directives, attrs, maxPriority, ignoreDirective) {\n      var nodeType = node.nodeType,\n          attrsMap = attrs.$attr,\n          match,\n          className;\n\n      switch(nodeType) {\n        case 1: /* Element */\n          // use the node name: <directive>\n          addDirective(directives,\n              directiveNormalize(nodeName_(node).toLowerCase()), 'E', maxPriority, ignoreDirective);\n\n          // iterate over the attributes\n          for (var attr, name, nName, ngAttrName, value, nAttrs = node.attributes,\n                   j = 0, jj = nAttrs && nAttrs.length; j < jj; j++) {\n            var attrStartName = false;\n            var attrEndName = false;\n\n            attr = nAttrs[j];\n            if (!msie || msie >= 8 || attr.specified) {\n              name = attr.name;\n              // support ngAttr attribute binding\n              ngAttrName = directiveNormalize(name);\n              if (NG_ATTR_BINDING.test(ngAttrName)) {\n                name = snake_case(ngAttrName.substr(6), '-');\n              }\n\n              var directiveNName = ngAttrName.replace(/(Start|End)$/, '');\n              if (ngAttrName === directiveNName + 'Start') {\n                attrStartName = name;\n                attrEndName = name.substr(0, name.length - 5) + 'end';\n                name = name.substr(0, name.length - 6);\n              }\n\n              nName = directiveNormalize(name.toLowerCase());\n              attrsMap[nName] = name;\n              attrs[nName] = value = trim(attr.value);\n              if (getBooleanAttrName(node, nName)) {\n                attrs[nName] = true; // presence means true\n              }\n              addAttrInterpolateDirective(node, directives, value, nName);\n              addDirective(directives, nName, 'A', maxPriority, ignoreDirective, attrStartName,\n                            attrEndName);\n            }\n          }\n\n          // use class as directive\n          className = node.className;\n          if (isString(className) && className !== '') {\n            while (match = CLASS_DIRECTIVE_REGEXP.exec(className)) {\n              nName = directiveNormalize(match[2]);\n              if (addDirective(directives, nName, 'C', maxPriority, ignoreDirective)) {\n                attrs[nName] = trim(match[3]);\n              }\n              className = className.substr(match.index + match[0].length);\n            }\n          }\n          break;\n        case 3: /* Text Node */\n          addTextInterpolateDirective(directives, node.nodeValue);\n          break;\n        case 8: /* Comment */\n          try {\n            match = COMMENT_DIRECTIVE_REGEXP.exec(node.nodeValue);\n            if (match) {\n              nName = directiveNormalize(match[1]);\n              if (addDirective(directives, nName, 'M', maxPriority, ignoreDirective)) {\n                attrs[nName] = trim(match[2]);\n              }\n            }\n          } catch (e) {\n            // turns out that under some circumstances IE9 throws errors when one attempts to read\n            // comment's node value.\n            // Just ignore it and continue. (Can't seem to reproduce in test case.)\n          }\n          break;\n      }\n\n      directives.sort(byPriority);\n      return directives;\n    }\n\n    /**\n     * Given a node with an directive-start it collects all of the siblings until it finds\n     * directive-end.\n     * @param node\n     * @param attrStart\n     * @param attrEnd\n     * @returns {*}\n     */\n    function groupScan(node, attrStart, attrEnd) {\n      var nodes = [];\n      var depth = 0;\n      if (attrStart && node.hasAttribute && node.hasAttribute(attrStart)) {\n        var startNode = node;\n        do {\n          if (!node) {\n            throw $compileMinErr('uterdir',\n                      \"Unterminated attribute, found '{0}' but no matching '{1}' found.\",\n                      attrStart, attrEnd);\n          }\n          if (node.nodeType == 1 /** Element **/) {\n            if (node.hasAttribute(attrStart)) depth++;\n            if (node.hasAttribute(attrEnd)) depth--;\n          }\n          nodes.push(node);\n          node = node.nextSibling;\n        } while (depth > 0);\n      } else {\n        nodes.push(node);\n      }\n\n      return jqLite(nodes);\n    }\n\n    /**\n     * Wrapper for linking function which converts normal linking function into a grouped\n     * linking function.\n     * @param linkFn\n     * @param attrStart\n     * @param attrEnd\n     * @returns {Function}\n     */\n    function groupElementsLinkFnWrapper(linkFn, attrStart, attrEnd) {\n      return function(scope, element, attrs, controllers, transcludeFn) {\n        element = groupScan(element[0], attrStart, attrEnd);\n        return linkFn(scope, element, attrs, controllers, transcludeFn);\n      };\n    }\n\n    /**\n     * Once the directives have been collected, their compile functions are executed. This method\n     * is responsible for inlining directive templates as well as terminating the application\n     * of the directives if the terminal directive has been reached.\n     *\n     * @param {Array} directives Array of collected directives to execute their compile function.\n     *        this needs to be pre-sorted by priority order.\n     * @param {Node} compileNode The raw DOM node to apply the compile functions to\n     * @param {Object} templateAttrs The shared attribute function\n     * @param {function(angular.Scope, cloneAttachFn=)} transcludeFn A linking function, where the\n     *                                                  scope argument is auto-generated to the new\n     *                                                  child of the transcluded parent scope.\n     * @param {JQLite} jqCollection If we are working on the root of the compile tree then this\n     *                              argument has the root jqLite array so that we can replace nodes\n     *                              on it.\n     * @param {Object=} originalReplaceDirective An optional directive that will be ignored when\n     *                                           compiling the transclusion.\n     * @param {Array.<Function>} preLinkFns\n     * @param {Array.<Function>} postLinkFns\n     * @param {Object} previousCompileContext Context used for previous compilation of the current\n     *                                        node\n     * @returns {Function} linkFn\n     */\n    function applyDirectivesToNode(directives, compileNode, templateAttrs, transcludeFn,\n                                   jqCollection, originalReplaceDirective, preLinkFns, postLinkFns,\n                                   previousCompileContext) {\n      previousCompileContext = previousCompileContext || {};\n\n      var terminalPriority = -Number.MAX_VALUE,\n          newScopeDirective,\n          controllerDirectives = previousCompileContext.controllerDirectives,\n          newIsolateScopeDirective = previousCompileContext.newIsolateScopeDirective,\n          templateDirective = previousCompileContext.templateDirective,\n          nonTlbTranscludeDirective = previousCompileContext.nonTlbTranscludeDirective,\n          hasTranscludeDirective = false,\n          hasElementTranscludeDirective = previousCompileContext.hasElementTranscludeDirective,\n          $compileNode = templateAttrs.$$element = jqLite(compileNode),\n          directive,\n          directiveName,\n          $template,\n          replaceDirective = originalReplaceDirective,\n          childTranscludeFn = transcludeFn,\n          linkFn,\n          directiveValue;\n\n      // executes all directives on the current element\n      for(var i = 0, ii = directives.length; i < ii; i++) {\n        directive = directives[i];\n        var attrStart = directive.$$start;\n        var attrEnd = directive.$$end;\n\n        // collect multiblock sections\n        if (attrStart) {\n          $compileNode = groupScan(compileNode, attrStart, attrEnd);\n        }\n        $template = undefined;\n\n        if (terminalPriority > directive.priority) {\n          break; // prevent further processing of directives\n        }\n\n        if (directiveValue = directive.scope) {\n          newScopeDirective = newScopeDirective || directive;\n\n          // skip the check for directives with async templates, we'll check the derived sync\n          // directive when the template arrives\n          if (!directive.templateUrl) {\n            assertNoDuplicate('new/isolated scope', newIsolateScopeDirective, directive,\n                              $compileNode);\n            if (isObject(directiveValue)) {\n              newIsolateScopeDirective = directive;\n            }\n          }\n        }\n\n        directiveName = directive.name;\n\n        if (!directive.templateUrl && directive.controller) {\n          directiveValue = directive.controller;\n          controllerDirectives = controllerDirectives || {};\n          assertNoDuplicate(\"'\" + directiveName + \"' controller\",\n              controllerDirectives[directiveName], directive, $compileNode);\n          controllerDirectives[directiveName] = directive;\n        }\n\n        if (directiveValue = directive.transclude) {\n          hasTranscludeDirective = true;\n\n          // Special case ngIf and ngRepeat so that we don't complain about duplicate transclusion.\n          // This option should only be used by directives that know how to safely handle element transclusion,\n          // where the transcluded nodes are added or replaced after linking.\n          if (!directive.$$tlb) {\n            assertNoDuplicate('transclusion', nonTlbTranscludeDirective, directive, $compileNode);\n            nonTlbTranscludeDirective = directive;\n          }\n\n          if (directiveValue == 'element') {\n            hasElementTranscludeDirective = true;\n            terminalPriority = directive.priority;\n            $template = groupScan(compileNode, attrStart, attrEnd);\n            $compileNode = templateAttrs.$$element =\n                jqLite(document.createComment(' ' + directiveName + ': ' +\n                                              templateAttrs[directiveName] + ' '));\n            compileNode = $compileNode[0];\n            replaceWith(jqCollection, jqLite(sliceArgs($template)), compileNode);\n\n            childTranscludeFn = compile($template, transcludeFn, terminalPriority,\n                                        replaceDirective && replaceDirective.name, {\n                                          // Don't pass in:\n                                          // - controllerDirectives - otherwise we'll create duplicates controllers\n                                          // - newIsolateScopeDirective or templateDirective - combining templates with\n                                          //   element transclusion doesn't make sense.\n                                          //\n                                          // We need only nonTlbTranscludeDirective so that we prevent putting transclusion\n                                          // on the same element more than once.\n                                          nonTlbTranscludeDirective: nonTlbTranscludeDirective\n                                        });\n          } else {\n            $template = jqLite(jqLiteClone(compileNode)).contents();\n            $compileNode.empty(); // clear contents\n            childTranscludeFn = compile($template, transcludeFn);\n          }\n        }\n\n        if (directive.template) {\n          assertNoDuplicate('template', templateDirective, directive, $compileNode);\n          templateDirective = directive;\n\n          directiveValue = (isFunction(directive.template))\n              ? directive.template($compileNode, templateAttrs)\n              : directive.template;\n\n          directiveValue = denormalizeTemplate(directiveValue);\n\n          if (directive.replace) {\n            replaceDirective = directive;\n            if (jqLiteIsTextNode(directiveValue)) {\n              $template = [];\n            } else {\n              $template = jqLite(trim(directiveValue));\n            }\n            compileNode = $template[0];\n\n            if ($template.length != 1 || compileNode.nodeType !== 1) {\n              throw $compileMinErr('tplrt',\n                  \"Template for directive '{0}' must have exactly one root element. {1}\",\n                  directiveName, '');\n            }\n\n            replaceWith(jqCollection, $compileNode, compileNode);\n\n            var newTemplateAttrs = {$attr: {}};\n\n            // combine directives from the original node and from the template:\n            // - take the array of directives for this element\n            // - split it into two parts, those that already applied (processed) and those that weren't (unprocessed)\n            // - collect directives from the template and sort them by priority\n            // - combine directives as: processed + template + unprocessed\n            var templateDirectives = collectDirectives(compileNode, [], newTemplateAttrs);\n            var unprocessedDirectives = directives.splice(i + 1, directives.length - (i + 1));\n\n            if (newIsolateScopeDirective) {\n              markDirectivesAsIsolate(templateDirectives);\n            }\n            directives = directives.concat(templateDirectives).concat(unprocessedDirectives);\n            mergeTemplateAttributes(templateAttrs, newTemplateAttrs);\n\n            ii = directives.length;\n          } else {\n            $compileNode.html(directiveValue);\n          }\n        }\n\n        if (directive.templateUrl) {\n          assertNoDuplicate('template', templateDirective, directive, $compileNode);\n          templateDirective = directive;\n\n          if (directive.replace) {\n            replaceDirective = directive;\n          }\n\n          nodeLinkFn = compileTemplateUrl(directives.splice(i, directives.length - i), $compileNode,\n              templateAttrs, jqCollection, childTranscludeFn, preLinkFns, postLinkFns, {\n                controllerDirectives: controllerDirectives,\n                newIsolateScopeDirective: newIsolateScopeDirective,\n                templateDirective: templateDirective,\n                nonTlbTranscludeDirective: nonTlbTranscludeDirective\n              });\n          ii = directives.length;\n        } else if (directive.compile) {\n          try {\n            linkFn = directive.compile($compileNode, templateAttrs, childTranscludeFn);\n            if (isFunction(linkFn)) {\n              addLinkFns(null, linkFn, attrStart, attrEnd);\n            } else if (linkFn) {\n              addLinkFns(linkFn.pre, linkFn.post, attrStart, attrEnd);\n            }\n          } catch (e) {\n            $exceptionHandler(e, startingTag($compileNode));\n          }\n        }\n\n        if (directive.terminal) {\n          nodeLinkFn.terminal = true;\n          terminalPriority = Math.max(terminalPriority, directive.priority);\n        }\n\n      }\n\n      nodeLinkFn.scope = newScopeDirective && newScopeDirective.scope === true;\n      nodeLinkFn.transclude = hasTranscludeDirective && childTranscludeFn;\n      previousCompileContext.hasElementTranscludeDirective = hasElementTranscludeDirective;\n\n      // might be normal or delayed nodeLinkFn depending on if templateUrl is present\n      return nodeLinkFn;\n\n      ////////////////////\n\n      function addLinkFns(pre, post, attrStart, attrEnd) {\n        if (pre) {\n          if (attrStart) pre = groupElementsLinkFnWrapper(pre, attrStart, attrEnd);\n          pre.require = directive.require;\n          pre.directiveName = directiveName;\n          if (newIsolateScopeDirective === directive || directive.$$isolateScope) {\n            pre = cloneAndAnnotateFn(pre, {isolateScope: true});\n          }\n          preLinkFns.push(pre);\n        }\n        if (post) {\n          if (attrStart) post = groupElementsLinkFnWrapper(post, attrStart, attrEnd);\n          post.require = directive.require;\n          post.directiveName = directiveName;\n          if (newIsolateScopeDirective === directive || directive.$$isolateScope) {\n            post = cloneAndAnnotateFn(post, {isolateScope: true});\n          }\n          postLinkFns.push(post);\n        }\n      }\n\n\n      function getControllers(directiveName, require, $element, elementControllers) {\n        var value, retrievalMethod = 'data', optional = false;\n        if (isString(require)) {\n          while((value = require.charAt(0)) == '^' || value == '?') {\n            require = require.substr(1);\n            if (value == '^') {\n              retrievalMethod = 'inheritedData';\n            }\n            optional = optional || value == '?';\n          }\n          value = null;\n\n          if (elementControllers && retrievalMethod === 'data') {\n            value = elementControllers[require];\n          }\n          value = value || $element[retrievalMethod]('$' + require + 'Controller');\n\n          if (!value && !optional) {\n            throw $compileMinErr('ctreq',\n                \"Controller '{0}', required by directive '{1}', can't be found!\",\n                require, directiveName);\n          }\n          return value;\n        } else if (isArray(require)) {\n          value = [];\n          forEach(require, function(require) {\n            value.push(getControllers(directiveName, require, $element, elementControllers));\n          });\n        }\n        return value;\n      }\n\n\n      function nodeLinkFn(childLinkFn, scope, linkNode, $rootElement, boundTranscludeFn) {\n        var attrs, $element, i, ii, linkFn, controller, isolateScope, elementControllers = {}, transcludeFn;\n\n        if (compileNode === linkNode) {\n          attrs = templateAttrs;\n        } else {\n          attrs = shallowCopy(templateAttrs, new Attributes(jqLite(linkNode), templateAttrs.$attr));\n        }\n        $element = attrs.$$element;\n\n        if (newIsolateScopeDirective) {\n          var LOCAL_REGEXP = /^\\s*([@=&])(\\??)\\s*(\\w*)\\s*$/;\n          var $linkNode = jqLite(linkNode);\n\n          isolateScope = scope.$new(true);\n\n          if (templateDirective && (templateDirective === newIsolateScopeDirective ||\n              templateDirective === newIsolateScopeDirective.$$originalDirective)) {\n            $linkNode.data('$isolateScope', isolateScope) ;\n          } else {\n            $linkNode.data('$isolateScopeNoTemplate', isolateScope);\n          }\n\n\n\n          safeAddClass($linkNode, 'ng-isolate-scope');\n\n          forEach(newIsolateScopeDirective.scope, function(definition, scopeName) {\n            var match = definition.match(LOCAL_REGEXP) || [],\n                attrName = match[3] || scopeName,\n                optional = (match[2] == '?'),\n                mode = match[1], // @, =, or &\n                lastValue,\n                parentGet, parentSet, compare;\n\n            isolateScope.$$isolateBindings[scopeName] = mode + attrName;\n\n            switch (mode) {\n\n              case '@':\n                attrs.$observe(attrName, function(value) {\n                  isolateScope[scopeName] = value;\n                });\n                attrs.$$observers[attrName].$$scope = scope;\n                if( attrs[attrName] ) {\n                  // If the attribute has been provided then we trigger an interpolation to ensure\n                  // the value is there for use in the link fn\n                  isolateScope[scopeName] = $interpolate(attrs[attrName])(scope);\n                }\n                break;\n\n              case '=':\n                if (optional && !attrs[attrName]) {\n                  return;\n                }\n                parentGet = $parse(attrs[attrName]);\n                if (parentGet.literal) {\n                  compare = equals;\n                } else {\n                  compare = function(a,b) { return a === b; };\n                }\n                parentSet = parentGet.assign || function() {\n                  // reset the change, or we will throw this exception on every $digest\n                  lastValue = isolateScope[scopeName] = parentGet(scope);\n                  throw $compileMinErr('nonassign',\n                      \"Expression '{0}' used with directive '{1}' is non-assignable!\",\n                      attrs[attrName], newIsolateScopeDirective.name);\n                };\n                lastValue = isolateScope[scopeName] = parentGet(scope);\n                isolateScope.$watch(function parentValueWatch() {\n                  var parentValue = parentGet(scope);\n                  if (!compare(parentValue, isolateScope[scopeName])) {\n                    // we are out of sync and need to copy\n                    if (!compare(parentValue, lastValue)) {\n                      // parent changed and it has precedence\n                      isolateScope[scopeName] = parentValue;\n                    } else {\n                      // if the parent can be assigned then do so\n                      parentSet(scope, parentValue = isolateScope[scopeName]);\n                    }\n                  }\n                  return lastValue = parentValue;\n                }, null, parentGet.literal);\n                break;\n\n              case '&':\n                parentGet = $parse(attrs[attrName]);\n                isolateScope[scopeName] = function(locals) {\n                  return parentGet(scope, locals);\n                };\n                break;\n\n              default:\n                throw $compileMinErr('iscp',\n                    \"Invalid isolate scope definition for directive '{0}'.\" +\n                    \" Definition: {... {1}: '{2}' ...}\",\n                    newIsolateScopeDirective.name, scopeName, definition);\n            }\n          });\n        }\n        transcludeFn = boundTranscludeFn && controllersBoundTransclude;\n        if (controllerDirectives) {\n          forEach(controllerDirectives, function(directive) {\n            var locals = {\n              $scope: directive === newIsolateScopeDirective || directive.$$isolateScope ? isolateScope : scope,\n              $element: $element,\n              $attrs: attrs,\n              $transclude: transcludeFn\n            }, controllerInstance;\n\n            controller = directive.controller;\n            if (controller == '@') {\n              controller = attrs[directive.name];\n            }\n\n            controllerInstance = $controller(controller, locals);\n            // For directives with element transclusion the element is a comment,\n            // but jQuery .data doesn't support attaching data to comment nodes as it's hard to\n            // clean up (http://bugs.jquery.com/ticket/8335).\n            // Instead, we save the controllers for the element in a local hash and attach to .data\n            // later, once we have the actual element.\n            elementControllers[directive.name] = controllerInstance;\n            if (!hasElementTranscludeDirective) {\n              $element.data('$' + directive.name + 'Controller', controllerInstance);\n            }\n\n            if (directive.controllerAs) {\n              locals.$scope[directive.controllerAs] = controllerInstance;\n            }\n          });\n        }\n\n        // PRELINKING\n        for(i = 0, ii = preLinkFns.length; i < ii; i++) {\n          try {\n            linkFn = preLinkFns[i];\n            linkFn(linkFn.isolateScope ? isolateScope : scope, $element, attrs,\n                linkFn.require && getControllers(linkFn.directiveName, linkFn.require, $element, elementControllers), transcludeFn);\n          } catch (e) {\n            $exceptionHandler(e, startingTag($element));\n          }\n        }\n\n        // RECURSION\n        // We only pass the isolate scope, if the isolate directive has a template,\n        // otherwise the child elements do not belong to the isolate directive.\n        var scopeToChild = scope;\n        if (newIsolateScopeDirective && (newIsolateScopeDirective.template || newIsolateScopeDirective.templateUrl === null)) {\n          scopeToChild = isolateScope;\n        }\n        childLinkFn && childLinkFn(scopeToChild, linkNode.childNodes, undefined, boundTranscludeFn);\n\n        // POSTLINKING\n        for(i = postLinkFns.length - 1; i >= 0; i--) {\n          try {\n            linkFn = postLinkFns[i];\n            linkFn(linkFn.isolateScope ? isolateScope : scope, $element, attrs,\n                linkFn.require && getControllers(linkFn.directiveName, linkFn.require, $element, elementControllers), transcludeFn);\n          } catch (e) {\n            $exceptionHandler(e, startingTag($element));\n          }\n        }\n\n        // This is the function that is injected as `$transclude`.\n        function controllersBoundTransclude(scope, cloneAttachFn) {\n          var transcludeControllers;\n\n          // no scope passed\n          if (arguments.length < 2) {\n            cloneAttachFn = scope;\n            scope = undefined;\n          }\n\n          if (hasElementTranscludeDirective) {\n            transcludeControllers = elementControllers;\n          }\n\n          return boundTranscludeFn(scope, cloneAttachFn, transcludeControllers);\n        }\n      }\n    }\n\n    function markDirectivesAsIsolate(directives) {\n      // mark all directives as needing isolate scope.\n      for (var j = 0, jj = directives.length; j < jj; j++) {\n        directives[j] = inherit(directives[j], {$$isolateScope: true});\n      }\n    }\n\n    /**\n     * looks up the directive and decorates it with exception handling and proper parameters. We\n     * call this the boundDirective.\n     *\n     * @param {string} name name of the directive to look up.\n     * @param {string} location The directive must be found in specific format.\n     *   String containing any of theses characters:\n     *\n     *   * `E`: element name\n     *   * `A': attribute\n     *   * `C`: class\n     *   * `M`: comment\n     * @returns {boolean} true if directive was added.\n     */\n    function addDirective(tDirectives, name, location, maxPriority, ignoreDirective, startAttrName,\n                          endAttrName) {\n      if (name === ignoreDirective) return null;\n      var match = null;\n      if (hasDirectives.hasOwnProperty(name)) {\n        for(var directive, directives = $injector.get(name + Suffix),\n            i = 0, ii = directives.length; i<ii; i++) {\n          try {\n            directive = directives[i];\n            if ( (maxPriority === undefined || maxPriority > directive.priority) &&\n                 directive.restrict.indexOf(location) != -1) {\n              if (startAttrName) {\n                directive = inherit(directive, {$$start: startAttrName, $$end: endAttrName});\n              }\n              tDirectives.push(directive);\n              match = directive;\n            }\n          } catch(e) { $exceptionHandler(e); }\n        }\n      }\n      return match;\n    }\n\n\n    /**\n     * When the element is replaced with HTML template then the new attributes\n     * on the template need to be merged with the existing attributes in the DOM.\n     * The desired effect is to have both of the attributes present.\n     *\n     * @param {object} dst destination attributes (original DOM)\n     * @param {object} src source attributes (from the directive template)\n     */\n    function mergeTemplateAttributes(dst, src) {\n      var srcAttr = src.$attr,\n          dstAttr = dst.$attr,\n          $element = dst.$$element;\n\n      // reapply the old attributes to the new element\n      forEach(dst, function(value, key) {\n        if (key.charAt(0) != '$') {\n          if (src[key] && src[key] !== value) {\n            value += (key === 'style' ? ';' : ' ') + src[key];\n          }\n          dst.$set(key, value, true, srcAttr[key]);\n        }\n      });\n\n      // copy the new attributes on the old attrs object\n      forEach(src, function(value, key) {\n        if (key == 'class') {\n          safeAddClass($element, value);\n          dst['class'] = (dst['class'] ? dst['class'] + ' ' : '') + value;\n        } else if (key == 'style') {\n          $element.attr('style', $element.attr('style') + ';' + value);\n          dst['style'] = (dst['style'] ? dst['style'] + ';' : '') + value;\n          // `dst` will never contain hasOwnProperty as DOM parser won't let it.\n          // You will get an \"InvalidCharacterError: DOM Exception 5\" error if you\n          // have an attribute like \"has-own-property\" or \"data-has-own-property\", etc.\n        } else if (key.charAt(0) != '$' && !dst.hasOwnProperty(key)) {\n          dst[key] = value;\n          dstAttr[key] = srcAttr[key];\n        }\n      });\n    }\n\n\n    function compileTemplateUrl(directives, $compileNode, tAttrs,\n        $rootElement, childTranscludeFn, preLinkFns, postLinkFns, previousCompileContext) {\n      var linkQueue = [],\n          afterTemplateNodeLinkFn,\n          afterTemplateChildLinkFn,\n          beforeTemplateCompileNode = $compileNode[0],\n          origAsyncDirective = directives.shift(),\n          // The fact that we have to copy and patch the directive seems wrong!\n          derivedSyncDirective = extend({}, origAsyncDirective, {\n            templateUrl: null, transclude: null, replace: null, $$originalDirective: origAsyncDirective\n          }),\n          templateUrl = (isFunction(origAsyncDirective.templateUrl))\n              ? origAsyncDirective.templateUrl($compileNode, tAttrs)\n              : origAsyncDirective.templateUrl;\n\n      $compileNode.empty();\n\n      $http.get($sce.getTrustedResourceUrl(templateUrl), {cache: $templateCache}).\n        success(function(content) {\n          var compileNode, tempTemplateAttrs, $template, childBoundTranscludeFn;\n\n          content = denormalizeTemplate(content);\n\n          if (origAsyncDirective.replace) {\n            if (jqLiteIsTextNode(content)) {\n              $template = [];\n            } else {\n              $template = jqLite(trim(content));\n            }\n            compileNode = $template[0];\n\n            if ($template.length != 1 || compileNode.nodeType !== 1) {\n              throw $compileMinErr('tplrt',\n                  \"Template for directive '{0}' must have exactly one root element. {1}\",\n                  origAsyncDirective.name, templateUrl);\n            }\n\n            tempTemplateAttrs = {$attr: {}};\n            replaceWith($rootElement, $compileNode, compileNode);\n            var templateDirectives = collectDirectives(compileNode, [], tempTemplateAttrs);\n\n            if (isObject(origAsyncDirective.scope)) {\n              markDirectivesAsIsolate(templateDirectives);\n            }\n            directives = templateDirectives.concat(directives);\n            mergeTemplateAttributes(tAttrs, tempTemplateAttrs);\n          } else {\n            compileNode = beforeTemplateCompileNode;\n            $compileNode.html(content);\n          }\n\n          directives.unshift(derivedSyncDirective);\n\n          afterTemplateNodeLinkFn = applyDirectivesToNode(directives, compileNode, tAttrs,\n              childTranscludeFn, $compileNode, origAsyncDirective, preLinkFns, postLinkFns,\n              previousCompileContext);\n          forEach($rootElement, function(node, i) {\n            if (node == compileNode) {\n              $rootElement[i] = $compileNode[0];\n            }\n          });\n          afterTemplateChildLinkFn = compileNodes($compileNode[0].childNodes, childTranscludeFn);\n\n\n          while(linkQueue.length) {\n            var scope = linkQueue.shift(),\n                beforeTemplateLinkNode = linkQueue.shift(),\n                linkRootElement = linkQueue.shift(),\n                boundTranscludeFn = linkQueue.shift(),\n                linkNode = $compileNode[0];\n\n            if (beforeTemplateLinkNode !== beforeTemplateCompileNode) {\n              var oldClasses = beforeTemplateLinkNode.className;\n\n              if (!(previousCompileContext.hasElementTranscludeDirective &&\n                  origAsyncDirective.replace)) {\n                // it was cloned therefore we have to clone as well.\n                linkNode = jqLiteClone(compileNode);\n              }\n\n              replaceWith(linkRootElement, jqLite(beforeTemplateLinkNode), linkNode);\n\n              // Copy in CSS classes from original node\n              safeAddClass(jqLite(linkNode), oldClasses);\n            }\n            if (afterTemplateNodeLinkFn.transclude) {\n              childBoundTranscludeFn = createBoundTranscludeFn(scope, afterTemplateNodeLinkFn.transclude);\n            } else {\n              childBoundTranscludeFn = boundTranscludeFn;\n            }\n            afterTemplateNodeLinkFn(afterTemplateChildLinkFn, scope, linkNode, $rootElement,\n              childBoundTranscludeFn);\n          }\n          linkQueue = null;\n        }).\n        error(function(response, code, headers, config) {\n          throw $compileMinErr('tpload', 'Failed to load template: {0}', config.url);\n        });\n\n      return function delayedNodeLinkFn(ignoreChildLinkFn, scope, node, rootElement, boundTranscludeFn) {\n        if (linkQueue) {\n          linkQueue.push(scope);\n          linkQueue.push(node);\n          linkQueue.push(rootElement);\n          linkQueue.push(boundTranscludeFn);\n        } else {\n          afterTemplateNodeLinkFn(afterTemplateChildLinkFn, scope, node, rootElement, boundTranscludeFn);\n        }\n      };\n    }\n\n\n    /**\n     * Sorting function for bound directives.\n     */\n    function byPriority(a, b) {\n      var diff = b.priority - a.priority;\n      if (diff !== 0) return diff;\n      if (a.name !== b.name) return (a.name < b.name) ? -1 : 1;\n      return a.index - b.index;\n    }\n\n\n    function assertNoDuplicate(what, previousDirective, directive, element) {\n      if (previousDirective) {\n        throw $compileMinErr('multidir', 'Multiple directives [{0}, {1}] asking for {2} on: {3}',\n            previousDirective.name, directive.name, what, startingTag(element));\n      }\n    }\n\n\n    function addTextInterpolateDirective(directives, text) {\n      var interpolateFn = $interpolate(text, true);\n      if (interpolateFn) {\n        directives.push({\n          priority: 0,\n          compile: valueFn(function textInterpolateLinkFn(scope, node) {\n            var parent = node.parent(),\n                bindings = parent.data('$binding') || [];\n            bindings.push(interpolateFn);\n            safeAddClass(parent.data('$binding', bindings), 'ng-binding');\n            scope.$watch(interpolateFn, function interpolateFnWatchAction(value) {\n              node[0].nodeValue = value;\n            });\n          })\n        });\n      }\n    }\n\n\n    function getTrustedContext(node, attrNormalizedName) {\n      if (attrNormalizedName == \"srcdoc\") {\n        return $sce.HTML;\n      }\n      var tag = nodeName_(node);\n      // maction[xlink:href] can source SVG.  It's not limited to <maction>.\n      if (attrNormalizedName == \"xlinkHref\" ||\n          (tag == \"FORM\" && attrNormalizedName == \"action\") ||\n          (tag != \"IMG\" && (attrNormalizedName == \"src\" ||\n                            attrNormalizedName == \"ngSrc\"))) {\n        return $sce.RESOURCE_URL;\n      }\n    }\n\n\n    function addAttrInterpolateDirective(node, directives, value, name) {\n      var interpolateFn = $interpolate(value, true);\n\n      // no interpolation found -> ignore\n      if (!interpolateFn) return;\n\n\n      if (name === \"multiple\" && nodeName_(node) === \"SELECT\") {\n        throw $compileMinErr(\"selmulti\",\n            \"Binding to the 'multiple' attribute is not supported. Element: {0}\",\n            startingTag(node));\n      }\n\n      directives.push({\n        priority: 100,\n        compile: function() {\n            return {\n              pre: function attrInterpolatePreLinkFn(scope, element, attr) {\n                var $$observers = (attr.$$observers || (attr.$$observers = {}));\n\n                if (EVENT_HANDLER_ATTR_REGEXP.test(name)) {\n                  throw $compileMinErr('nodomevents',\n                      \"Interpolations for HTML DOM event attributes are disallowed.  Please use the \" +\n                          \"ng- versions (such as ng-click instead of onclick) instead.\");\n                }\n\n                // we need to interpolate again, in case the attribute value has been updated\n                // (e.g. by another directive's compile function)\n                interpolateFn = $interpolate(attr[name], true, getTrustedContext(node, name));\n\n                // if attribute was updated so that there is no interpolation going on we don't want to\n                // register any observers\n                if (!interpolateFn) return;\n\n                // TODO(i): this should likely be attr.$set(name, iterpolateFn(scope) so that we reset the\n                // actual attr value\n                attr[name] = interpolateFn(scope);\n                ($$observers[name] || ($$observers[name] = [])).$$inter = true;\n                (attr.$$observers && attr.$$observers[name].$$scope || scope).\n                  $watch(interpolateFn, function interpolateFnWatchAction(newValue, oldValue) {\n                    //special case for class attribute addition + removal\n                    //so that class changes can tap into the animation\n                    //hooks provided by the $animate service. Be sure to\n                    //skip animations when the first digest occurs (when\n                    //both the new and the old values are the same) since\n                    //the CSS classes are the non-interpolated values\n                    if(name === 'class' && newValue != oldValue) {\n                      attr.$updateClass(newValue, oldValue);\n                    } else {\n                      attr.$set(name, newValue);\n                    }\n                  });\n              }\n            };\n          }\n      });\n    }\n\n\n    /**\n     * This is a special jqLite.replaceWith, which can replace items which\n     * have no parents, provided that the containing jqLite collection is provided.\n     *\n     * @param {JqLite=} $rootElement The root of the compile tree. Used so that we can replace nodes\n     *                               in the root of the tree.\n     * @param {JqLite} elementsToRemove The jqLite element which we are going to replace. We keep\n     *                                  the shell, but replace its DOM node reference.\n     * @param {Node} newNode The new DOM node.\n     */\n    function replaceWith($rootElement, elementsToRemove, newNode) {\n      var firstElementToRemove = elementsToRemove[0],\n          removeCount = elementsToRemove.length,\n          parent = firstElementToRemove.parentNode,\n          i, ii;\n\n      if ($rootElement) {\n        for(i = 0, ii = $rootElement.length; i < ii; i++) {\n          if ($rootElement[i] == firstElementToRemove) {\n            $rootElement[i++] = newNode;\n            for (var j = i, j2 = j + removeCount - 1,\n                     jj = $rootElement.length;\n                 j < jj; j++, j2++) {\n              if (j2 < jj) {\n                $rootElement[j] = $rootElement[j2];\n              } else {\n                delete $rootElement[j];\n              }\n            }\n            $rootElement.length -= removeCount - 1;\n            break;\n          }\n        }\n      }\n\n      if (parent) {\n        parent.replaceChild(newNode, firstElementToRemove);\n      }\n      var fragment = document.createDocumentFragment();\n      fragment.appendChild(firstElementToRemove);\n      newNode[jqLite.expando] = firstElementToRemove[jqLite.expando];\n      for (var k = 1, kk = elementsToRemove.length; k < kk; k++) {\n        var element = elementsToRemove[k];\n        jqLite(element).remove(); // must do this way to clean up expando\n        fragment.appendChild(element);\n        delete elementsToRemove[k];\n      }\n\n      elementsToRemove[0] = newNode;\n      elementsToRemove.length = 1;\n    }\n\n\n    function cloneAndAnnotateFn(fn, annotation) {\n      return extend(function() { return fn.apply(null, arguments); }, fn, annotation);\n    }\n  }];\n}\n\nvar PREFIX_REGEXP = /^(x[\\:\\-_]|data[\\:\\-_])/i;\n/**\n * Converts all accepted directives format into proper directive name.\n * All of these will become 'myDirective':\n *   my:Directive\n *   my-directive\n *   x-my-directive\n *   data-my:directive\n *\n * Also there is special case for Moz prefix starting with upper case letter.\n * @param name Name to normalize\n */\nfunction directiveNormalize(name) {\n  return camelCase(name.replace(PREFIX_REGEXP, ''));\n}\n\n/**\n * @ngdoc type\n * @name $compile.directive.Attributes\n *\n * @description\n * A shared object between directive compile / linking functions which contains normalized DOM\n * element attributes. The values reflect current binding state `{{ }}`. The normalization is\n * needed since all of these are treated as equivalent in Angular:\n *\n * ```\n *    <span ng:bind=\"a\" ng-bind=\"a\" data-ng-bind=\"a\" x-ng-bind=\"a\">\n * ```\n */\n\n/**\n * @ngdoc property\n * @name $compile.directive.Attributes#$attr\n * @returns {object} A map of DOM element attribute names to the normalized name. This is\n *                   needed to do reverse lookup from normalized name back to actual name.\n */\n\n\n/**\n * @ngdoc method\n * @name $compile.directive.Attributes#$set\n * @kind function\n *\n * @description\n * Set DOM element attribute value.\n *\n *\n * @param {string} name Normalized element attribute name of the property to modify. The name is\n *          reverse-translated using the {@link ng.$compile.directive.Attributes#$attr $attr}\n *          property to the original name.\n * @param {string} value Value to set the attribute to. The value can be an interpolated string.\n */\n\n\n\n/**\n * Closure compiler type information\n */\n\nfunction nodesetLinkingFn(\n  /* angular.Scope */ scope,\n  /* NodeList */ nodeList,\n  /* Element */ rootElement,\n  /* function(Function) */ boundTranscludeFn\n){}\n\nfunction directiveLinkingFn(\n  /* nodesetLinkingFn */ nodesetLinkingFn,\n  /* angular.Scope */ scope,\n  /* Node */ node,\n  /* Element */ rootElement,\n  /* function(Function) */ boundTranscludeFn\n){}\n\nfunction tokenDifference(str1, str2) {\n  var values = '',\n      tokens1 = str1.split(/\\s+/),\n      tokens2 = str2.split(/\\s+/);\n\n  outer:\n  for(var i = 0; i < tokens1.length; i++) {\n    var token = tokens1[i];\n    for(var j = 0; j < tokens2.length; j++) {\n      if(token == tokens2[j]) continue outer;\n    }\n    values += (values.length > 0 ? ' ' : '') + token;\n  }\n  return values;\n}\n\n/**\n * @ngdoc provider\n * @name $controllerProvider\n * @description\n * The {@link ng.$controller $controller service} is used by Angular to create new\n * controllers.\n *\n * This provider allows controller registration via the\n * {@link ng.$controllerProvider#register register} method.\n */\nfunction $ControllerProvider() {\n  var controllers = {},\n      CNTRL_REG = /^(\\S+)(\\s+as\\s+(\\w+))?$/;\n\n\n  /**\n   * @ngdoc method\n   * @name $controllerProvider#register\n   * @param {string|Object} name Controller name, or an object map of controllers where the keys are\n   *    the names and the values are the constructors.\n   * @param {Function|Array} constructor Controller constructor fn (optionally decorated with DI\n   *    annotations in the array notation).\n   */\n  this.register = function(name, constructor) {\n    assertNotHasOwnProperty(name, 'controller');\n    if (isObject(name)) {\n      extend(controllers, name);\n    } else {\n      controllers[name] = constructor;\n    }\n  };\n\n\n  this.$get = ['$injector', '$window', function($injector, $window) {\n\n    /**\n     * @ngdoc service\n     * @name $controller\n     * @requires $injector\n     *\n     * @param {Function|string} constructor If called with a function then it's considered to be the\n     *    controller constructor function. Otherwise it's considered to be a string which is used\n     *    to retrieve the controller constructor using the following steps:\n     *\n     *    * check if a controller with given name is registered via `$controllerProvider`\n     *    * check if evaluating the string on the current scope returns a constructor\n     *    * check `window[constructor]` on the global `window` object\n     *\n     * @param {Object} locals Injection locals for Controller.\n     * @return {Object} Instance of given controller.\n     *\n     * @description\n     * `$controller` service is responsible for instantiating controllers.\n     *\n     * It's just a simple call to {@link auto.$injector $injector}, but extracted into\n     * a service, so that one can override this service with [BC version](https://gist.github.com/1649788).\n     */\n    return function(expression, locals) {\n      var instance, match, constructor, identifier;\n\n      if(isString(expression)) {\n        match = expression.match(CNTRL_REG),\n        constructor = match[1],\n        identifier = match[3];\n        expression = controllers.hasOwnProperty(constructor)\n            ? controllers[constructor]\n            : getter(locals.$scope, constructor, true) || getter($window, constructor, true);\n\n        assertArgFn(expression, constructor, true);\n      }\n\n      instance = $injector.instantiate(expression, locals);\n\n      if (identifier) {\n        if (!(locals && typeof locals.$scope == 'object')) {\n          throw minErr('$controller')('noscp',\n              \"Cannot export controller '{0}' as '{1}'! No $scope object provided via `locals`.\",\n              constructor || expression.name, identifier);\n        }\n\n        locals.$scope[identifier] = instance;\n      }\n\n      return instance;\n    };\n  }];\n}\n\n/**\n * @ngdoc service\n * @name $document\n * @requires $window\n *\n * @description\n * A {@link angular.element jQuery or jqLite} wrapper for the browser's `window.document` object.\n *\n * @example\n   <example>\n     <file name=\"index.html\">\n       <div ng-controller=\"MainCtrl\">\n         <p>$document title: <b ng-bind=\"title\"></b></p>\n         <p>window.document title: <b ng-bind=\"windowTitle\"></b></p>\n       </div>\n     </file>\n     <file name=\"script.js\">\n       function MainCtrl($scope, $document) {\n         $scope.title = $document[0].title;\n         $scope.windowTitle = angular.element(window.document)[0].title;\n       }\n     </file>\n   </example>\n */\nfunction $DocumentProvider(){\n  this.$get = ['$window', function(window){\n    return jqLite(window.document);\n  }];\n}\n\n/**\n * @ngdoc service\n * @name $exceptionHandler\n * @requires ng.$log\n *\n * @description\n * Any uncaught exception in angular expressions is delegated to this service.\n * The default implementation simply delegates to `$log.error` which logs it into\n * the browser console.\n *\n * In unit tests, if `angular-mocks.js` is loaded, this service is overridden by\n * {@link ngMock.$exceptionHandler mock $exceptionHandler} which aids in testing.\n *\n * ## Example:\n *\n * ```js\n *   angular.module('exceptionOverride', []).factory('$exceptionHandler', function () {\n *     return function (exception, cause) {\n *       exception.message += ' (caused by \"' + cause + '\")';\n *       throw exception;\n *     };\n *   });\n * ```\n *\n * This example will override the normal action of `$exceptionHandler`, to make angular\n * exceptions fail hard when they happen, instead of just logging to the console.\n *\n * @param {Error} exception Exception associated with the error.\n * @param {string=} cause optional information about the context in which\n *       the error was thrown.\n *\n */\nfunction $ExceptionHandlerProvider() {\n  this.$get = ['$log', function($log) {\n    return function(exception, cause) {\n      $log.error.apply($log, arguments);\n    };\n  }];\n}\n\n/**\n * Parse headers into key value object\n *\n * @param {string} headers Raw headers as a string\n * @returns {Object} Parsed headers as key value object\n */\nfunction parseHeaders(headers) {\n  var parsed = {}, key, val, i;\n\n  if (!headers) return parsed;\n\n  forEach(headers.split('\\n'), function(line) {\n    i = line.indexOf(':');\n    key = lowercase(trim(line.substr(0, i)));\n    val = trim(line.substr(i + 1));\n\n    if (key) {\n      if (parsed[key]) {\n        parsed[key] += ', ' + val;\n      } else {\n        parsed[key] = val;\n      }\n    }\n  });\n\n  return parsed;\n}\n\n\n/**\n * Returns a function that provides access to parsed headers.\n *\n * Headers are lazy parsed when first requested.\n * @see parseHeaders\n *\n * @param {(string|Object)} headers Headers to provide access to.\n * @returns {function(string=)} Returns a getter function which if called with:\n *\n *   - if called with single an argument returns a single header value or null\n *   - if called with no arguments returns an object containing all headers.\n */\nfunction headersGetter(headers) {\n  var headersObj = isObject(headers) ? headers : undefined;\n\n  return function(name) {\n    if (!headersObj) headersObj =  parseHeaders(headers);\n\n    if (name) {\n      return headersObj[lowercase(name)] || null;\n    }\n\n    return headersObj;\n  };\n}\n\n\n/**\n * Chain all given functions\n *\n * This function is used for both request and response transforming\n *\n * @param {*} data Data to transform.\n * @param {function(string=)} headers Http headers getter fn.\n * @param {(Function|Array.<Function>)} fns Function or an array of functions.\n * @returns {*} Transformed data.\n */\nfunction transformData(data, headers, fns) {\n  if (isFunction(fns))\n    return fns(data, headers);\n\n  forEach(fns, function(fn) {\n    data = fn(data, headers);\n  });\n\n  return data;\n}\n\n\nfunction isSuccess(status) {\n  return 200 <= status && status < 300;\n}\n\n\nfunction $HttpProvider() {\n  var JSON_START = /^\\s*(\\[|\\{[^\\{])/,\n      JSON_END = /[\\}\\]]\\s*$/,\n      PROTECTION_PREFIX = /^\\)\\]\\}',?\\n/,\n      CONTENT_TYPE_APPLICATION_JSON = {'Content-Type': 'application/json;charset=utf-8'};\n\n  var defaults = this.defaults = {\n    // transform incoming response data\n    transformResponse: [function(data) {\n      if (isString(data)) {\n        // strip json vulnerability protection prefix\n        data = data.replace(PROTECTION_PREFIX, '');\n        if (JSON_START.test(data) && JSON_END.test(data))\n          data = fromJson(data);\n      }\n      return data;\n    }],\n\n    // transform outgoing request data\n    transformRequest: [function(d) {\n      return isObject(d) && !isFile(d) && !isBlob(d) ? toJson(d) : d;\n    }],\n\n    // default headers\n    headers: {\n      common: {\n        'Accept': 'application/json, text/plain, */*'\n      },\n      post:   shallowCopy(CONTENT_TYPE_APPLICATION_JSON),\n      put:    shallowCopy(CONTENT_TYPE_APPLICATION_JSON),\n      patch:  shallowCopy(CONTENT_TYPE_APPLICATION_JSON)\n    },\n\n    xsrfCookieName: 'XSRF-TOKEN',\n    xsrfHeaderName: 'X-XSRF-TOKEN'\n  };\n\n  /**\n   * Are ordered by request, i.e. they are applied in the same order as the\n   * array, on request, but reverse order, on response.\n   */\n  var interceptorFactories = this.interceptors = [];\n\n  /**\n   * For historical reasons, response interceptors are ordered by the order in which\n   * they are applied to the response. (This is the opposite of interceptorFactories)\n   */\n  var responseInterceptorFactories = this.responseInterceptors = [];\n\n  this.$get = ['$httpBackend', '$browser', '$cacheFactory', '$rootScope', '$q', '$injector',\n      function($httpBackend, $browser, $cacheFactory, $rootScope, $q, $injector) {\n\n    var defaultCache = $cacheFactory('$http');\n\n    /**\n     * Interceptors stored in reverse order. Inner interceptors before outer interceptors.\n     * The reversal is needed so that we can build up the interception chain around the\n     * server request.\n     */\n    var reversedInterceptors = [];\n\n    forEach(interceptorFactories, function(interceptorFactory) {\n      reversedInterceptors.unshift(isString(interceptorFactory)\n          ? $injector.get(interceptorFactory) : $injector.invoke(interceptorFactory));\n    });\n\n    forEach(responseInterceptorFactories, function(interceptorFactory, index) {\n      var responseFn = isString(interceptorFactory)\n          ? $injector.get(interceptorFactory)\n          : $injector.invoke(interceptorFactory);\n\n      /**\n       * Response interceptors go before \"around\" interceptors (no real reason, just\n       * had to pick one.) But they are already reversed, so we can't use unshift, hence\n       * the splice.\n       */\n      reversedInterceptors.splice(index, 0, {\n        response: function(response) {\n          return responseFn($q.when(response));\n        },\n        responseError: function(response) {\n          return responseFn($q.reject(response));\n        }\n      });\n    });\n\n\n    /**\n     * @ngdoc service\n     * @kind function\n     * @name $http\n     * @requires ng.$httpBackend\n     * @requires $cacheFactory\n     * @requires $rootScope\n     * @requires $q\n     * @requires $injector\n     *\n     * @description\n     * The `$http` service is a core Angular service that facilitates communication with the remote\n     * HTTP servers via the browser's [XMLHttpRequest](https://developer.mozilla.org/en/xmlhttprequest)\n     * object or via [JSONP](http://en.wikipedia.org/wiki/JSONP).\n     *\n     * For unit testing applications that use `$http` service, see\n     * {@link ngMock.$httpBackend $httpBackend mock}.\n     *\n     * For a higher level of abstraction, please check out the {@link ngResource.$resource\n     * $resource} service.\n     *\n     * The $http API is based on the {@link ng.$q deferred/promise APIs} exposed by\n     * the $q service. While for simple usage patterns this doesn't matter much, for advanced usage\n     * it is important to familiarize yourself with these APIs and the guarantees they provide.\n     *\n     *\n     * # General usage\n     * The `$http` service is a function which takes a single argument — a configuration object —\n     * that is used to generate an HTTP request and returns  a {@link ng.$q promise}\n     * with two $http specific methods: `success` and `error`.\n     *\n     * ```js\n     *   $http({method: 'GET', url: '/someUrl'}).\n     *     success(function(data, status, headers, config) {\n     *       // this callback will be called asynchronously\n     *       // when the response is available\n     *     }).\n     *     error(function(data, status, headers, config) {\n     *       // called asynchronously if an error occurs\n     *       // or server returns response with an error status.\n     *     });\n     * ```\n     *\n     * Since the returned value of calling the $http function is a `promise`, you can also use\n     * the `then` method to register callbacks, and these callbacks will receive a single argument –\n     * an object representing the response. See the API signature and type info below for more\n     * details.\n     *\n     * A response status code between 200 and 299 is considered a success status and\n     * will result in the success callback being called. Note that if the response is a redirect,\n     * XMLHttpRequest will transparently follow it, meaning that the error callback will not be\n     * called for such responses.\n     *\n     * # Writing Unit Tests that use $http\n     * When unit testing (using {@link ngMock ngMock}), it is necessary to call\n     * {@link ngMock.$httpBackend#flush $httpBackend.flush()} to flush each pending\n     * request using trained responses.\n     *\n     * ```\n     * $httpBackend.expectGET(...);\n     * $http.get(...);\n     * $httpBackend.flush();\n     * ```\n     *\n     * # Shortcut methods\n     *\n     * Shortcut methods are also available. All shortcut methods require passing in the URL, and\n     * request data must be passed in for POST/PUT requests.\n     *\n     * ```js\n     *   $http.get('/someUrl').success(successCallback);\n     *   $http.post('/someUrl', data).success(successCallback);\n     * ```\n     *\n     * Complete list of shortcut methods:\n     *\n     * - {@link ng.$http#get $http.get}\n     * - {@link ng.$http#head $http.head}\n     * - {@link ng.$http#post $http.post}\n     * - {@link ng.$http#put $http.put}\n     * - {@link ng.$http#delete $http.delete}\n     * - {@link ng.$http#jsonp $http.jsonp}\n     *\n     *\n     * # Setting HTTP Headers\n     *\n     * The $http service will automatically add certain HTTP headers to all requests. These defaults\n     * can be fully configured by accessing the `$httpProvider.defaults.headers` configuration\n     * object, which currently contains this default configuration:\n     *\n     * - `$httpProvider.defaults.headers.common` (headers that are common for all requests):\n     *   - `Accept: application/json, text/plain, * / *`\n     * - `$httpProvider.defaults.headers.post`: (header defaults for POST requests)\n     *   - `Content-Type: application/json`\n     * - `$httpProvider.defaults.headers.put` (header defaults for PUT requests)\n     *   - `Content-Type: application/json`\n     *\n     * To add or overwrite these defaults, simply add or remove a property from these configuration\n     * objects. To add headers for an HTTP method other than POST or PUT, simply add a new object\n     * with the lowercased HTTP method name as the key, e.g.\n     * `$httpProvider.defaults.headers.get = { 'My-Header' : 'value' }.\n     *\n     * The defaults can also be set at runtime via the `$http.defaults` object in the same\n     * fashion. For example:\n     *\n     * ```\n     * module.run(function($http) {\n     *   $http.defaults.headers.common.Authorization = 'Basic YmVlcDpib29w'\n     * });\n     * ```\n     *\n     * In addition, you can supply a `headers` property in the config object passed when\n     * calling `$http(config)`, which overrides the defaults without changing them globally.\n     *\n     *\n     * # Transforming Requests and Responses\n     *\n     * Both requests and responses can be transformed using transform functions. By default, Angular\n     * applies these transformations:\n     *\n     * Request transformations:\n     *\n     * - If the `data` property of the request configuration object contains an object, serialize it\n     *   into JSON format.\n     *\n     * Response transformations:\n     *\n     *  - If XSRF prefix is detected, strip it (see Security Considerations section below).\n     *  - If JSON response is detected, deserialize it using a JSON parser.\n     *\n     * To globally augment or override the default transforms, modify the\n     * `$httpProvider.defaults.transformRequest` and `$httpProvider.defaults.transformResponse`\n     * properties. These properties are by default an array of transform functions, which allows you\n     * to `push` or `unshift` a new transformation function into the transformation chain. You can\n     * also decide to completely override any default transformations by assigning your\n     * transformation functions to these properties directly without the array wrapper.  These defaults\n     * are again available on the $http factory at run-time, which may be useful if you have run-time\n     * services you wish to be involved in your transformations.\n     *\n     * Similarly, to locally override the request/response transforms, augment the\n     * `transformRequest` and/or `transformResponse` properties of the configuration object passed\n     * into `$http`.\n     *\n     *\n     * # Caching\n     *\n     * To enable caching, set the request configuration `cache` property to `true` (to use default\n     * cache) or to a custom cache object (built with {@link ng.$cacheFactory `$cacheFactory`}).\n     * When the cache is enabled, `$http` stores the response from the server in the specified\n     * cache. The next time the same request is made, the response is served from the cache without\n     * sending a request to the server.\n     *\n     * Note that even if the response is served from cache, delivery of the data is asynchronous in\n     * the same way that real requests are.\n     *\n     * If there are multiple GET requests for the same URL that should be cached using the same\n     * cache, but the cache is not populated yet, only one request to the server will be made and\n     * the remaining requests will be fulfilled using the response from the first request.\n     *\n     * You can change the default cache to a new object (built with\n     * {@link ng.$cacheFactory `$cacheFactory`}) by updating the\n     * {@link ng.$http#properties_defaults `$http.defaults.cache`} property. All requests who set\n     * their `cache` property to `true` will now use this cache object.\n     *\n     * If you set the default cache to `false` then only requests that specify their own custom\n     * cache object will be cached.\n     *\n     * # Interceptors\n     *\n     * Before you start creating interceptors, be sure to understand the\n     * {@link ng.$q $q and deferred/promise APIs}.\n     *\n     * For purposes of global error handling, authentication, or any kind of synchronous or\n     * asynchronous pre-processing of request or postprocessing of responses, it is desirable to be\n     * able to intercept requests before they are handed to the server and\n     * responses before they are handed over to the application code that\n     * initiated these requests. The interceptors leverage the {@link ng.$q\n     * promise APIs} to fulfill this need for both synchronous and asynchronous pre-processing.\n     *\n     * The interceptors are service factories that are registered with the `$httpProvider` by\n     * adding them to the `$httpProvider.interceptors` array. The factory is called and\n     * injected with dependencies (if specified) and returns the interceptor.\n     *\n     * There are two kinds of interceptors (and two kinds of rejection interceptors):\n     *\n     *   * `request`: interceptors get called with a http `config` object. The function is free to\n     *     modify the `config` object or create a new one. The function needs to return the `config`\n     *     object directly, or a promise containing the `config` or a new `config` object.\n     *   * `requestError`: interceptor gets called when a previous interceptor threw an error or\n     *     resolved with a rejection.\n     *   * `response`: interceptors get called with http `response` object. The function is free to\n     *     modify the `response` object or create a new one. The function needs to return the `response`\n     *     object directly, or as a promise containing the `response` or a new `response` object.\n     *   * `responseError`: interceptor gets called when a previous interceptor threw an error or\n     *     resolved with a rejection.\n     *\n     *\n     * ```js\n     *   // register the interceptor as a service\n     *   $provide.factory('myHttpInterceptor', function($q, dependency1, dependency2) {\n     *     return {\n     *       // optional method\n     *       'request': function(config) {\n     *         // do something on success\n     *         return config;\n     *       },\n     *\n     *       // optional method\n     *      'requestError': function(rejection) {\n     *         // do something on error\n     *         if (canRecover(rejection)) {\n     *           return responseOrNewPromise\n     *         }\n     *         return $q.reject(rejection);\n     *       },\n     *\n     *\n     *\n     *       // optional method\n     *       'response': function(response) {\n     *         // do something on success\n     *         return response;\n     *       },\n     *\n     *       // optional method\n     *      'responseError': function(rejection) {\n     *         // do something on error\n     *         if (canRecover(rejection)) {\n     *           return responseOrNewPromise\n     *         }\n     *         return $q.reject(rejection);\n     *       }\n     *     };\n     *   });\n     *\n     *   $httpProvider.interceptors.push('myHttpInterceptor');\n     *\n     *\n     *   // alternatively, register the interceptor via an anonymous factory\n     *   $httpProvider.interceptors.push(function($q, dependency1, dependency2) {\n     *     return {\n     *      'request': function(config) {\n     *          // same as above\n     *       },\n     *\n     *       'response': function(response) {\n     *          // same as above\n     *       }\n     *     };\n     *   });\n     * ```\n     *\n     * # Response interceptors (DEPRECATED)\n     *\n     * Before you start creating interceptors, be sure to understand the\n     * {@link ng.$q $q and deferred/promise APIs}.\n     *\n     * For purposes of global error handling, authentication or any kind of synchronous or\n     * asynchronous preprocessing of received responses, it is desirable to be able to intercept\n     * responses for http requests before they are handed over to the application code that\n     * initiated these requests. The response interceptors leverage the {@link ng.$q\n     * promise apis} to fulfil this need for both synchronous and asynchronous preprocessing.\n     *\n     * The interceptors are service factories that are registered with the $httpProvider by\n     * adding them to the `$httpProvider.responseInterceptors` array. The factory is called and\n     * injected with dependencies (if specified) and returns the interceptor  — a function that\n     * takes a {@link ng.$q promise} and returns the original or a new promise.\n     *\n     * ```js\n     *   // register the interceptor as a service\n     *   $provide.factory('myHttpInterceptor', function($q, dependency1, dependency2) {\n     *     return function(promise) {\n     *       return promise.then(function(response) {\n     *         // do something on success\n     *         return response;\n     *       }, function(response) {\n     *         // do something on error\n     *         if (canRecover(response)) {\n     *           return responseOrNewPromise\n     *         }\n     *         return $q.reject(response);\n     *       });\n     *     }\n     *   });\n     *\n     *   $httpProvider.responseInterceptors.push('myHttpInterceptor');\n     *\n     *\n     *   // register the interceptor via an anonymous factory\n     *   $httpProvider.responseInterceptors.push(function($q, dependency1, dependency2) {\n     *     return function(promise) {\n     *       // same as above\n     *     }\n     *   });\n     * ```\n     *\n     *\n     * # Security Considerations\n     *\n     * When designing web applications, consider security threats from:\n     *\n     * - [JSON vulnerability](http://haacked.com/archive/2008/11/20/anatomy-of-a-subtle-json-vulnerability.aspx)\n     * - [XSRF](http://en.wikipedia.org/wiki/Cross-site_request_forgery)\n     *\n     * Both server and the client must cooperate in order to eliminate these threats. Angular comes\n     * pre-configured with strategies that address these issues, but for this to work backend server\n     * cooperation is required.\n     *\n     * ## JSON Vulnerability Protection\n     *\n     * A [JSON vulnerability](http://haacked.com/archive/2008/11/20/anatomy-of-a-subtle-json-vulnerability.aspx)\n     * allows third party website to turn your JSON resource URL into\n     * [JSONP](http://en.wikipedia.org/wiki/JSONP) request under some conditions. To\n     * counter this your server can prefix all JSON requests with following string `\")]}',\\n\"`.\n     * Angular will automatically strip the prefix before processing it as JSON.\n     *\n     * For example if your server needs to return:\n     * ```js\n     * ['one','two']\n     * ```\n     *\n     * which is vulnerable to attack, your server can return:\n     * ```js\n     * )]}',\n     * ['one','two']\n     * ```\n     *\n     * Angular will strip the prefix, before processing the JSON.\n     *\n     *\n     * ## Cross Site Request Forgery (XSRF) Protection\n     *\n     * [XSRF](http://en.wikipedia.org/wiki/Cross-site_request_forgery) is a technique by which\n     * an unauthorized site can gain your user's private data. Angular provides a mechanism\n     * to counter XSRF. When performing XHR requests, the $http service reads a token from a cookie\n     * (by default, `XSRF-TOKEN`) and sets it as an HTTP header (`X-XSRF-TOKEN`). Since only\n     * JavaScript that runs on your domain could read the cookie, your server can be assured that\n     * the XHR came from JavaScript running on your domain. The header will not be set for\n     * cross-domain requests.\n     *\n     * To take advantage of this, your server needs to set a token in a JavaScript readable session\n     * cookie called `XSRF-TOKEN` on the first HTTP GET request. On subsequent XHR requests the\n     * server can verify that the cookie matches `X-XSRF-TOKEN` HTTP header, and therefore be sure\n     * that only JavaScript running on your domain could have sent the request. The token must be\n     * unique for each user and must be verifiable by the server (to prevent the JavaScript from\n     * making up its own tokens). We recommend that the token is a digest of your site's\n     * authentication cookie with a [salt](https://en.wikipedia.org/wiki/Salt_(cryptography))\n     * for added security.\n     *\n     * The name of the headers can be specified using the xsrfHeaderName and xsrfCookieName\n     * properties of either $httpProvider.defaults at config-time, $http.defaults at run-time,\n     * or the per-request config object.\n     *\n     *\n     * @param {object} config Object describing the request to be made and how it should be\n     *    processed. The object has following properties:\n     *\n     *    - **method** – `{string}` – HTTP method (e.g. 'GET', 'POST', etc)\n     *    - **url** – `{string}` – Absolute or relative URL of the resource that is being requested.\n     *    - **params** – `{Object.<string|Object>}` – Map of strings or objects which will be turned\n     *      to `?key1=value1&key2=value2` after the url. If the value is not a string, it will be\n     *      JSONified.\n     *    - **data** – `{string|Object}` – Data to be sent as the request message data.\n     *    - **headers** – `{Object}` – Map of strings or functions which return strings representing\n     *      HTTP headers to send to the server. If the return value of a function is null, the\n     *      header will not be sent.\n     *    - **xsrfHeaderName** – `{string}` – Name of HTTP header to populate with the XSRF token.\n     *    - **xsrfCookieName** – `{string}` – Name of cookie containing the XSRF token.\n     *    - **transformRequest** –\n     *      `{function(data, headersGetter)|Array.<function(data, headersGetter)>}` –\n     *      transform function or an array of such functions. The transform function takes the http\n     *      request body and headers and returns its transformed (typically serialized) version.\n     *    - **transformResponse** –\n     *      `{function(data, headersGetter)|Array.<function(data, headersGetter)>}` –\n     *      transform function or an array of such functions. The transform function takes the http\n     *      response body and headers and returns its transformed (typically deserialized) version.\n     *    - **cache** – `{boolean|Cache}` – If true, a default $http cache will be used to cache the\n     *      GET request, otherwise if a cache instance built with\n     *      {@link ng.$cacheFactory $cacheFactory}, this cache will be used for\n     *      caching.\n     *    - **timeout** – `{number|Promise}` – timeout in milliseconds, or {@link ng.$q promise}\n     *      that should abort the request when resolved.\n     *    - **withCredentials** - `{boolean}` - whether to set the `withCredentials` flag on the\n     *      XHR object. See [requests with credentials]https://developer.mozilla.org/en/http_access_control#section_5\n     *      for more information.\n     *    - **responseType** - `{string}` - see\n     *      [requestType](https://developer.mozilla.org/en-US/docs/DOM/XMLHttpRequest#responseType).\n     *\n     * @returns {HttpPromise} Returns a {@link ng.$q promise} object with the\n     *   standard `then` method and two http specific methods: `success` and `error`. The `then`\n     *   method takes two arguments a success and an error callback which will be called with a\n     *   response object. The `success` and `error` methods take a single argument - a function that\n     *   will be called when the request succeeds or fails respectively. The arguments passed into\n     *   these functions are destructured representation of the response object passed into the\n     *   `then` method. The response object has these properties:\n     *\n     *   - **data** – `{string|Object}` – The response body transformed with the transform\n     *     functions.\n     *   - **status** – `{number}` – HTTP status code of the response.\n     *   - **headers** – `{function([headerName])}` – Header getter function.\n     *   - **config** – `{Object}` – The configuration object that was used to generate the request.\n     *   - **statusText** – `{string}` – HTTP status text of the response.\n     *\n     * @property {Array.<Object>} pendingRequests Array of config objects for currently pending\n     *   requests. This is primarily meant to be used for debugging purposes.\n     *\n     *\n     * @example\n<example>\n<file name=\"index.html\">\n  <div ng-controller=\"FetchCtrl\">\n    <select ng-model=\"method\">\n      <option>GET</option>\n      <option>JSONP</option>\n    </select>\n    <input type=\"text\" ng-model=\"url\" size=\"80\"/>\n    <button id=\"fetchbtn\" ng-click=\"fetch()\">fetch</button><br>\n    <button id=\"samplegetbtn\" ng-click=\"updateModel('GET', 'http-hello.html')\">Sample GET</button>\n    <button id=\"samplejsonpbtn\"\n      ng-click=\"updateModel('JSONP',\n                    'https://angularjs.org/greet.php?callback=JSON_CALLBACK&name=Super%20Hero')\">\n      Sample JSONP\n    </button>\n    <button id=\"invalidjsonpbtn\"\n      ng-click=\"updateModel('JSONP', 'https://angularjs.org/doesntexist&callback=JSON_CALLBACK')\">\n        Invalid JSONP\n      </button>\n    <pre>http status code: {{status}}</pre>\n    <pre>http response data: {{data}}</pre>\n  </div>\n</file>\n<file name=\"script.js\">\n  function FetchCtrl($scope, $http, $templateCache) {\n    $scope.method = 'GET';\n    $scope.url = 'http-hello.html';\n\n    $scope.fetch = function() {\n      $scope.code = null;\n      $scope.response = null;\n\n      $http({method: $scope.method, url: $scope.url, cache: $templateCache}).\n        success(function(data, status) {\n          $scope.status = status;\n          $scope.data = data;\n        }).\n        error(function(data, status) {\n          $scope.data = data || \"Request failed\";\n          $scope.status = status;\n      });\n    };\n\n    $scope.updateModel = function(method, url) {\n      $scope.method = method;\n      $scope.url = url;\n    };\n  }\n</file>\n<file name=\"http-hello.html\">\n  Hello, $http!\n</file>\n<file name=\"protractor.js\" type=\"protractor\">\n  var status = element(by.binding('status'));\n  var data = element(by.binding('data'));\n  var fetchBtn = element(by.id('fetchbtn'));\n  var sampleGetBtn = element(by.id('samplegetbtn'));\n  var sampleJsonpBtn = element(by.id('samplejsonpbtn'));\n  var invalidJsonpBtn = element(by.id('invalidjsonpbtn'));\n\n  it('should make an xhr GET request', function() {\n    sampleGetBtn.click();\n    fetchBtn.click();\n    expect(status.getText()).toMatch('200');\n    expect(data.getText()).toMatch(/Hello, \\$http!/);\n  });\n\n  it('should make a JSONP request to angularjs.org', function() {\n    sampleJsonpBtn.click();\n    fetchBtn.click();\n    expect(status.getText()).toMatch('200');\n    expect(data.getText()).toMatch(/Super Hero!/);\n  });\n\n  it('should make JSONP request to invalid URL and invoke the error handler',\n      function() {\n    invalidJsonpBtn.click();\n    fetchBtn.click();\n    expect(status.getText()).toMatch('0');\n    expect(data.getText()).toMatch('Request failed');\n  });\n</file>\n</example>\n     */\n    function $http(requestConfig) {\n      var config = {\n        method: 'get',\n        transformRequest: defaults.transformRequest,\n        transformResponse: defaults.transformResponse\n      };\n      var headers = mergeHeaders(requestConfig);\n\n      extend(config, requestConfig);\n      config.headers = headers;\n      config.method = uppercase(config.method);\n\n      var xsrfValue = urlIsSameOrigin(config.url)\n          ? $browser.cookies()[config.xsrfCookieName || defaults.xsrfCookieName]\n          : undefined;\n      if (xsrfValue) {\n        headers[(config.xsrfHeaderName || defaults.xsrfHeaderName)] = xsrfValue;\n      }\n\n\n      var serverRequest = function(config) {\n        headers = config.headers;\n        var reqData = transformData(config.data, headersGetter(headers), config.transformRequest);\n\n        // strip content-type if data is undefined\n        if (isUndefined(config.data)) {\n          forEach(headers, function(value, header) {\n            if (lowercase(header) === 'content-type') {\n                delete headers[header];\n            }\n          });\n        }\n\n        if (isUndefined(config.withCredentials) && !isUndefined(defaults.withCredentials)) {\n          config.withCredentials = defaults.withCredentials;\n        }\n\n        // send request\n        return sendReq(config, reqData, headers).then(transformResponse, transformResponse);\n      };\n\n      var chain = [serverRequest, undefined];\n      var promise = $q.when(config);\n\n      // apply interceptors\n      forEach(reversedInterceptors, function(interceptor) {\n        if (interceptor.request || interceptor.requestError) {\n          chain.unshift(interceptor.request, interceptor.requestError);\n        }\n        if (interceptor.response || interceptor.responseError) {\n          chain.push(interceptor.response, interceptor.responseError);\n        }\n      });\n\n      while(chain.length) {\n        var thenFn = chain.shift();\n        var rejectFn = chain.shift();\n\n        promise = promise.then(thenFn, rejectFn);\n      }\n\n      promise.success = function(fn) {\n        promise.then(function(response) {\n          fn(response.data, response.status, response.headers, config);\n        });\n        return promise;\n      };\n\n      promise.error = function(fn) {\n        promise.then(null, function(response) {\n          fn(response.data, response.status, response.headers, config);\n        });\n        return promise;\n      };\n\n      return promise;\n\n      function transformResponse(response) {\n        // make a copy since the response must be cacheable\n        var resp = extend({}, response, {\n          data: transformData(response.data, response.headers, config.transformResponse)\n        });\n        return (isSuccess(response.status))\n          ? resp\n          : $q.reject(resp);\n      }\n\n      function mergeHeaders(config) {\n        var defHeaders = defaults.headers,\n            reqHeaders = extend({}, config.headers),\n            defHeaderName, lowercaseDefHeaderName, reqHeaderName;\n\n        defHeaders = extend({}, defHeaders.common, defHeaders[lowercase(config.method)]);\n\n        // execute if header value is function\n        execHeaders(defHeaders);\n        execHeaders(reqHeaders);\n\n        // using for-in instead of forEach to avoid unecessary iteration after header has been found\n        defaultHeadersIteration:\n        for (defHeaderName in defHeaders) {\n          lowercaseDefHeaderName = lowercase(defHeaderName);\n\n          for (reqHeaderName in reqHeaders) {\n            if (lowercase(reqHeaderName) === lowercaseDefHeaderName) {\n              continue defaultHeadersIteration;\n            }\n          }\n\n          reqHeaders[defHeaderName] = defHeaders[defHeaderName];\n        }\n\n        return reqHeaders;\n\n        function execHeaders(headers) {\n          var headerContent;\n\n          forEach(headers, function(headerFn, header) {\n            if (isFunction(headerFn)) {\n              headerContent = headerFn();\n              if (headerContent != null) {\n                headers[header] = headerContent;\n              } else {\n                delete headers[header];\n              }\n            }\n          });\n        }\n      }\n    }\n\n    $http.pendingRequests = [];\n\n    /**\n     * @ngdoc method\n     * @name $http#get\n     *\n     * @description\n     * Shortcut method to perform `GET` request.\n     *\n     * @param {string} url Relative or absolute URL specifying the destination of the request\n     * @param {Object=} config Optional configuration object\n     * @returns {HttpPromise} Future object\n     */\n\n    /**\n     * @ngdoc method\n     * @name $http#delete\n     *\n     * @description\n     * Shortcut method to perform `DELETE` request.\n     *\n     * @param {string} url Relative or absolute URL specifying the destination of the request\n     * @param {Object=} config Optional configuration object\n     * @returns {HttpPromise} Future object\n     */\n\n    /**\n     * @ngdoc method\n     * @name $http#head\n     *\n     * @description\n     * Shortcut method to perform `HEAD` request.\n     *\n     * @param {string} url Relative or absolute URL specifying the destination of the request\n     * @param {Object=} config Optional configuration object\n     * @returns {HttpPromise} Future object\n     */\n\n    /**\n     * @ngdoc method\n     * @name $http#jsonp\n     *\n     * @description\n     * Shortcut method to perform `JSONP` request.\n     *\n     * @param {string} url Relative or absolute URL specifying the destination of the request.\n     *                     Should contain `JSON_CALLBACK` string.\n     * @param {Object=} config Optional configuration object\n     * @returns {HttpPromise} Future object\n     */\n    createShortMethods('get', 'delete', 'head', 'jsonp');\n\n    /**\n     * @ngdoc method\n     * @name $http#post\n     *\n     * @description\n     * Shortcut method to perform `POST` request.\n     *\n     * @param {string} url Relative or absolute URL specifying the destination of the request\n     * @param {*} data Request content\n     * @param {Object=} config Optional configuration object\n     * @returns {HttpPromise} Future object\n     */\n\n    /**\n     * @ngdoc method\n     * @name $http#put\n     *\n     * @description\n     * Shortcut method to perform `PUT` request.\n     *\n     * @param {string} url Relative or absolute URL specifying the destination of the request\n     * @param {*} data Request content\n     * @param {Object=} config Optional configuration object\n     * @returns {HttpPromise} Future object\n     */\n    createShortMethodsWithData('post', 'put');\n\n        /**\n         * @ngdoc property\n         * @name $http#defaults\n         *\n         * @description\n         * Runtime equivalent of the `$httpProvider.defaults` property. Allows configuration of\n         * default headers, withCredentials as well as request and response transformations.\n         *\n         * See \"Setting HTTP Headers\" and \"Transforming Requests and Responses\" sections above.\n         */\n    $http.defaults = defaults;\n\n\n    return $http;\n\n\n    function createShortMethods(names) {\n      forEach(arguments, function(name) {\n        $http[name] = function(url, config) {\n          return $http(extend(config || {}, {\n            method: name,\n            url: url\n          }));\n        };\n      });\n    }\n\n\n    function createShortMethodsWithData(name) {\n      forEach(arguments, function(name) {\n        $http[name] = function(url, data, config) {\n          return $http(extend(config || {}, {\n            method: name,\n            url: url,\n            data: data\n          }));\n        };\n      });\n    }\n\n\n    /**\n     * Makes the request.\n     *\n     * !!! ACCESSES CLOSURE VARS:\n     * $httpBackend, defaults, $log, $rootScope, defaultCache, $http.pendingRequests\n     */\n    function sendReq(config, reqData, reqHeaders) {\n      var deferred = $q.defer(),\n          promise = deferred.promise,\n          cache,\n          cachedResp,\n          url = buildUrl(config.url, config.params);\n\n      $http.pendingRequests.push(config);\n      promise.then(removePendingReq, removePendingReq);\n\n\n      if ((config.cache || defaults.cache) && config.cache !== false && config.method == 'GET') {\n        cache = isObject(config.cache) ? config.cache\n              : isObject(defaults.cache) ? defaults.cache\n              : defaultCache;\n      }\n\n      if (cache) {\n        cachedResp = cache.get(url);\n        if (isDefined(cachedResp)) {\n          if (cachedResp.then) {\n            // cached request has already been sent, but there is no response yet\n            cachedResp.then(removePendingReq, removePendingReq);\n            return cachedResp;\n          } else {\n            // serving from cache\n            if (isArray(cachedResp)) {\n              resolvePromise(cachedResp[1], cachedResp[0], shallowCopy(cachedResp[2]), cachedResp[3]);\n            } else {\n              resolvePromise(cachedResp, 200, {}, 'OK');\n            }\n          }\n        } else {\n          // put the promise for the non-transformed response into cache as a placeholder\n          cache.put(url, promise);\n        }\n      }\n\n      // if we won't have the response in cache, send the request to the backend\n      if (isUndefined(cachedResp)) {\n        $httpBackend(config.method, url, reqData, done, reqHeaders, config.timeout,\n            config.withCredentials, config.responseType);\n      }\n\n      return promise;\n\n\n      /**\n       * Callback registered to $httpBackend():\n       *  - caches the response if desired\n       *  - resolves the raw $http promise\n       *  - calls $apply\n       */\n      function done(status, response, headersString, statusText) {\n        if (cache) {\n          if (isSuccess(status)) {\n            cache.put(url, [status, response, parseHeaders(headersString), statusText]);\n          } else {\n            // remove promise from the cache\n            cache.remove(url);\n          }\n        }\n\n        resolvePromise(response, status, headersString, statusText);\n        if (!$rootScope.$$phase) $rootScope.$apply();\n      }\n\n\n      /**\n       * Resolves the raw $http promise.\n       */\n      function resolvePromise(response, status, headers, statusText) {\n        // normalize internal statuses to 0\n        status = Math.max(status, 0);\n\n        (isSuccess(status) ? deferred.resolve : deferred.reject)({\n          data: response,\n          status: status,\n          headers: headersGetter(headers),\n          config: config,\n          statusText : statusText\n        });\n      }\n\n\n      function removePendingReq() {\n        var idx = indexOf($http.pendingRequests, config);\n        if (idx !== -1) $http.pendingRequests.splice(idx, 1);\n      }\n    }\n\n\n    function buildUrl(url, params) {\n          if (!params) return url;\n          var parts = [];\n          forEachSorted(params, function(value, key) {\n            if (value === null || isUndefined(value)) return;\n            if (!isArray(value)) value = [value];\n\n            forEach(value, function(v) {\n              if (isObject(v)) {\n                v = toJson(v);\n              }\n              parts.push(encodeUriQuery(key) + '=' +\n                         encodeUriQuery(v));\n            });\n          });\n          if(parts.length > 0) {\n            url += ((url.indexOf('?') == -1) ? '?' : '&') + parts.join('&');\n          }\n          return url;\n        }\n\n\n  }];\n}\n\nfunction createXhr(method) {\n    //if IE and the method is not RFC2616 compliant, or if XMLHttpRequest\n    //is not available, try getting an ActiveXObject. Otherwise, use XMLHttpRequest\n    //if it is available\n    if (msie <= 8 && (!method.match(/^(get|post|head|put|delete|options)$/i) ||\n      !window.XMLHttpRequest)) {\n      return new window.ActiveXObject(\"Microsoft.XMLHTTP\");\n    } else if (window.XMLHttpRequest) {\n      return new window.XMLHttpRequest();\n    }\n\n    throw minErr('$httpBackend')('noxhr', \"This browser does not support XMLHttpRequest.\");\n}\n\n/**\n * @ngdoc service\n * @name $httpBackend\n * @requires $window\n * @requires $document\n *\n * @description\n * HTTP backend used by the {@link ng.$http service} that delegates to\n * XMLHttpRequest object or JSONP and deals with browser incompatibilities.\n *\n * You should never need to use this service directly, instead use the higher-level abstractions:\n * {@link ng.$http $http} or {@link ngResource.$resource $resource}.\n *\n * During testing this implementation is swapped with {@link ngMock.$httpBackend mock\n * $httpBackend} which can be trained with responses.\n */\nfunction $HttpBackendProvider() {\n  this.$get = ['$browser', '$window', '$document', function($browser, $window, $document) {\n    return createHttpBackend($browser, createXhr, $browser.defer, $window.angular.callbacks, $document[0]);\n  }];\n}\n\nfunction createHttpBackend($browser, createXhr, $browserDefer, callbacks, rawDocument) {\n  var ABORTED = -1;\n\n  // TODO(vojta): fix the signature\n  return function(method, url, post, callback, headers, timeout, withCredentials, responseType) {\n    var status;\n    $browser.$$incOutstandingRequestCount();\n    url = url || $browser.url();\n\n    if (lowercase(method) == 'jsonp') {\n      var callbackId = '_' + (callbacks.counter++).toString(36);\n      callbacks[callbackId] = function(data) {\n        callbacks[callbackId].data = data;\n        callbacks[callbackId].called = true;\n      };\n\n      var jsonpDone = jsonpReq(url.replace('JSON_CALLBACK', 'angular.callbacks.' + callbackId),\n          callbackId, function(status, text) {\n        completeRequest(callback, status, callbacks[callbackId].data, \"\", text);\n        callbacks[callbackId] = noop;\n      });\n    } else {\n\n      var xhr = createXhr(method);\n\n      xhr.open(method, url, true);\n      forEach(headers, function(value, key) {\n        if (isDefined(value)) {\n            xhr.setRequestHeader(key, value);\n        }\n      });\n\n      // In IE6 and 7, this might be called synchronously when xhr.send below is called and the\n      // response is in the cache. the promise api will ensure that to the app code the api is\n      // always async\n      xhr.onreadystatechange = function() {\n        // onreadystatechange might get called multiple times with readyState === 4 on mobile webkit caused by\n        // xhrs that are resolved while the app is in the background (see #5426).\n        // since calling completeRequest sets the `xhr` variable to null, we just check if it's not null before\n        // continuing\n        //\n        // we can't set xhr.onreadystatechange to undefined or delete it because that breaks IE8 (method=PATCH) and\n        // Safari respectively.\n        if (xhr && xhr.readyState == 4) {\n          var responseHeaders = null,\n              response = null;\n\n          if(status !== ABORTED) {\n            responseHeaders = xhr.getAllResponseHeaders();\n\n            // responseText is the old-school way of retrieving response (supported by IE8 & 9)\n            // response/responseType properties were introduced in XHR Level2 spec (supported by IE10)\n            response = ('response' in xhr) ? xhr.response : xhr.responseText;\n          }\n\n          completeRequest(callback,\n              status || xhr.status,\n              response,\n              responseHeaders,\n              xhr.statusText || '');\n        }\n      };\n\n      if (withCredentials) {\n        xhr.withCredentials = true;\n      }\n\n      if (responseType) {\n        try {\n          xhr.responseType = responseType;\n        } catch (e) {\n          // WebKit added support for the json responseType value on 09/03/2013\n          // https://bugs.webkit.org/show_bug.cgi?id=73648. Versions of Safari prior to 7 are\n          // known to throw when setting the value \"json\" as the response type. Other older\n          // browsers implementing the responseType\n          //\n          // The json response type can be ignored if not supported, because JSON payloads are\n          // parsed on the client-side regardless.\n          if (responseType !== 'json') {\n            throw e;\n          }\n        }\n      }\n\n      xhr.send(post || null);\n    }\n\n    if (timeout > 0) {\n      var timeoutId = $browserDefer(timeoutRequest, timeout);\n    } else if (timeout && timeout.then) {\n      timeout.then(timeoutRequest);\n    }\n\n\n    function timeoutRequest() {\n      status = ABORTED;\n      jsonpDone && jsonpDone();\n      xhr && xhr.abort();\n    }\n\n    function completeRequest(callback, status, response, headersString, statusText) {\n      // cancel timeout and subsequent timeout promise resolution\n      timeoutId && $browserDefer.cancel(timeoutId);\n      jsonpDone = xhr = null;\n\n      // fix status code when it is 0 (0 status is undocumented).\n      // Occurs when accessing file resources or on Android 4.1 stock browser\n      // while retrieving files from application cache.\n      if (status === 0) {\n        status = response ? 200 : urlResolve(url).protocol == 'file' ? 404 : 0;\n      }\n\n      // normalize IE bug (http://bugs.jquery.com/ticket/1450)\n      status = status === 1223 ? 204 : status;\n      statusText = statusText || '';\n\n      callback(status, response, headersString, statusText);\n      $browser.$$completeOutstandingRequest(noop);\n    }\n  };\n\n  function jsonpReq(url, callbackId, done) {\n    // we can't use jQuery/jqLite here because jQuery does crazy shit with script elements, e.g.:\n    // - fetches local scripts via XHR and evals them\n    // - adds and immediately removes script elements from the document\n    var script = rawDocument.createElement('script'), callback = null;\n    script.type = \"text/javascript\";\n    script.src = url;\n    script.async = true;\n\n    callback = function(event) {\n      removeEventListenerFn(script, \"load\", callback);\n      removeEventListenerFn(script, \"error\", callback);\n      rawDocument.body.removeChild(script);\n      script = null;\n      var status = -1;\n      var text = \"unknown\";\n\n      if (event) {\n        if (event.type === \"load\" && !callbacks[callbackId].called) {\n          event = { type: \"error\" };\n        }\n        text = event.type;\n        status = event.type === \"error\" ? 404 : 200;\n      }\n\n      if (done) {\n        done(status, text);\n      }\n    };\n\n    addEventListenerFn(script, \"load\", callback);\n    addEventListenerFn(script, \"error\", callback);\n\n    if (msie <= 8) {\n      script.onreadystatechange = function() {\n        if (isString(script.readyState) && /loaded|complete/.test(script.readyState)) {\n          script.onreadystatechange = null;\n          callback({\n            type: 'load'\n          });\n        }\n      };\n    }\n\n    rawDocument.body.appendChild(script);\n    return callback;\n  }\n}\n\nvar $interpolateMinErr = minErr('$interpolate');\n\n/**\n * @ngdoc provider\n * @name $interpolateProvider\n * @kind function\n *\n * @description\n *\n * Used for configuring the interpolation markup. Defaults to `{{` and `}}`.\n *\n * @example\n<example module=\"customInterpolationApp\">\n<file name=\"index.html\">\n<script>\n  var customInterpolationApp = angular.module('customInterpolationApp', []);\n\n  customInterpolationApp.config(function($interpolateProvider) {\n    $interpolateProvider.startSymbol('//');\n    $interpolateProvider.endSymbol('//');\n  });\n\n\n  customInterpolationApp.controller('DemoController', function() {\n      this.label = \"This binding is brought you by // interpolation symbols.\";\n  });\n</script>\n<div ng-app=\"App\" ng-controller=\"DemoController as demo\">\n    //demo.label//\n</div>\n</file>\n<file name=\"protractor.js\" type=\"protractor\">\n  it('should interpolate binding with custom symbols', function() {\n    expect(element(by.binding('demo.label')).getText()).toBe('This binding is brought you by // interpolation symbols.');\n  });\n</file>\n</example>\n */\nfunction $InterpolateProvider() {\n  var startSymbol = '{{';\n  var endSymbol = '}}';\n\n  /**\n   * @ngdoc method\n   * @name $interpolateProvider#startSymbol\n   * @description\n   * Symbol to denote start of expression in the interpolated string. Defaults to `{{`.\n   *\n   * @param {string=} value new value to set the starting symbol to.\n   * @returns {string|self} Returns the symbol when used as getter and self if used as setter.\n   */\n  this.startSymbol = function(value){\n    if (value) {\n      startSymbol = value;\n      return this;\n    } else {\n      return startSymbol;\n    }\n  };\n\n  /**\n   * @ngdoc method\n   * @name $interpolateProvider#endSymbol\n   * @description\n   * Symbol to denote the end of expression in the interpolated string. Defaults to `}}`.\n   *\n   * @param {string=} value new value to set the ending symbol to.\n   * @returns {string|self} Returns the symbol when used as getter and self if used as setter.\n   */\n  this.endSymbol = function(value){\n    if (value) {\n      endSymbol = value;\n      return this;\n    } else {\n      return endSymbol;\n    }\n  };\n\n\n  this.$get = ['$parse', '$exceptionHandler', '$sce', function($parse, $exceptionHandler, $sce) {\n    var startSymbolLength = startSymbol.length,\n        endSymbolLength = endSymbol.length;\n\n    /**\n     * @ngdoc service\n     * @name $interpolate\n     * @kind function\n     *\n     * @requires $parse\n     * @requires $sce\n     *\n     * @description\n     *\n     * Compiles a string with markup into an interpolation function. This service is used by the\n     * HTML {@link ng.$compile $compile} service for data binding. See\n     * {@link ng.$interpolateProvider $interpolateProvider} for configuring the\n     * interpolation markup.\n     *\n     *\n     * ```js\n     *   var $interpolate = ...; // injected\n     *   var exp = $interpolate('Hello {{name | uppercase}}!');\n     *   expect(exp({name:'Angular'}).toEqual('Hello ANGULAR!');\n     * ```\n     *\n     *\n     * @param {string} text The text with markup to interpolate.\n     * @param {boolean=} mustHaveExpression if set to true then the interpolation string must have\n     *    embedded expression in order to return an interpolation function. Strings with no\n     *    embedded expression will return null for the interpolation function.\n     * @param {string=} trustedContext when provided, the returned function passes the interpolated\n     *    result through {@link ng.$sce#getTrusted $sce.getTrusted(interpolatedResult,\n     *    trustedContext)} before returning it.  Refer to the {@link ng.$sce $sce} service that\n     *    provides Strict Contextual Escaping for details.\n     * @returns {function(context)} an interpolation function which is used to compute the\n     *    interpolated string. The function has these parameters:\n     *\n     *    * `context`: an object against which any expressions embedded in the strings are evaluated\n     *      against.\n     *\n     */\n    function $interpolate(text, mustHaveExpression, trustedContext) {\n      var startIndex,\n          endIndex,\n          index = 0,\n          parts = [],\n          length = text.length,\n          hasInterpolation = false,\n          fn,\n          exp,\n          concat = [];\n\n      while(index < length) {\n        if ( ((startIndex = text.indexOf(startSymbol, index)) != -1) &&\n             ((endIndex = text.indexOf(endSymbol, startIndex + startSymbolLength)) != -1) ) {\n          (index != startIndex) && parts.push(text.substring(index, startIndex));\n          parts.push(fn = $parse(exp = text.substring(startIndex + startSymbolLength, endIndex)));\n          fn.exp = exp;\n          index = endIndex + endSymbolLength;\n          hasInterpolation = true;\n        } else {\n          // we did not find anything, so we have to add the remainder to the parts array\n          (index != length) && parts.push(text.substring(index));\n          index = length;\n        }\n      }\n\n      if (!(length = parts.length)) {\n        // we added, nothing, must have been an empty string.\n        parts.push('');\n        length = 1;\n      }\n\n      // Concatenating expressions makes it hard to reason about whether some combination of\n      // concatenated values are unsafe to use and could easily lead to XSS.  By requiring that a\n      // single expression be used for iframe[src], object[src], etc., we ensure that the value\n      // that's used is assigned or constructed by some JS code somewhere that is more testable or\n      // make it obvious that you bound the value to some user controlled value.  This helps reduce\n      // the load when auditing for XSS issues.\n      if (trustedContext && parts.length > 1) {\n          throw $interpolateMinErr('noconcat',\n              \"Error while interpolating: {0}\\nStrict Contextual Escaping disallows \" +\n              \"interpolations that concatenate multiple expressions when a trusted value is \" +\n              \"required.  See http://docs.angularjs.org/api/ng.$sce\", text);\n      }\n\n      if (!mustHaveExpression  || hasInterpolation) {\n        concat.length = length;\n        fn = function(context) {\n          try {\n            for(var i = 0, ii = length, part; i<ii; i++) {\n              if (typeof (part = parts[i]) == 'function') {\n                part = part(context);\n                if (trustedContext) {\n                  part = $sce.getTrusted(trustedContext, part);\n                } else {\n                  part = $sce.valueOf(part);\n                }\n                if (part == null) { // null || undefined\n                  part = '';\n                } else {\n                  switch (typeof part) {\n                    case 'string':\n                    {\n                      break;\n                    }\n                    case 'number':\n                    {\n                      part = '' + part;\n                      break;\n                    }\n                    default:\n                    {\n                      part = toJson(part);\n                    }\n                  }\n                }\n              }\n              concat[i] = part;\n            }\n            return concat.join('');\n          }\n          catch(err) {\n            var newErr = $interpolateMinErr('interr', \"Can't interpolate: {0}\\n{1}\", text,\n                err.toString());\n            $exceptionHandler(newErr);\n          }\n        };\n        fn.exp = text;\n        fn.parts = parts;\n        return fn;\n      }\n    }\n\n\n    /**\n     * @ngdoc method\n     * @name $interpolate#startSymbol\n     * @description\n     * Symbol to denote the start of expression in the interpolated string. Defaults to `{{`.\n     *\n     * Use {@link ng.$interpolateProvider#startSymbol $interpolateProvider#startSymbol} to change\n     * the symbol.\n     *\n     * @returns {string} start symbol.\n     */\n    $interpolate.startSymbol = function() {\n      return startSymbol;\n    };\n\n\n    /**\n     * @ngdoc method\n     * @name $interpolate#endSymbol\n     * @description\n     * Symbol to denote the end of expression in the interpolated string. Defaults to `}}`.\n     *\n     * Use {@link ng.$interpolateProvider#endSymbol $interpolateProvider#endSymbol} to change\n     * the symbol.\n     *\n     * @returns {string} end symbol.\n     */\n    $interpolate.endSymbol = function() {\n      return endSymbol;\n    };\n\n    return $interpolate;\n  }];\n}\n\nfunction $IntervalProvider() {\n  this.$get = ['$rootScope', '$window', '$q',\n       function($rootScope,   $window,   $q) {\n    var intervals = {};\n\n\n     /**\n      * @ngdoc service\n      * @name $interval\n      *\n      * @description\n      * Angular's wrapper for `window.setInterval`. The `fn` function is executed every `delay`\n      * milliseconds.\n      *\n      * The return value of registering an interval function is a promise. This promise will be\n      * notified upon each tick of the interval, and will be resolved after `count` iterations, or\n      * run indefinitely if `count` is not defined. The value of the notification will be the\n      * number of iterations that have run.\n      * To cancel an interval, call `$interval.cancel(promise)`.\n      *\n      * In tests you can use {@link ngMock.$interval#flush `$interval.flush(millis)`} to\n      * move forward by `millis` milliseconds and trigger any functions scheduled to run in that\n      * time.\n      *\n      * <div class=\"alert alert-warning\">\n      * **Note**: Intervals created by this service must be explicitly destroyed when you are finished\n      * with them.  In particular they are not automatically destroyed when a controller's scope or a\n      * directive's element are destroyed.\n      * You should take this into consideration and make sure to always cancel the interval at the\n      * appropriate moment.  See the example below for more details on how and when to do this.\n      * </div>\n      *\n      * @param {function()} fn A function that should be called repeatedly.\n      * @param {number} delay Number of milliseconds between each function call.\n      * @param {number=} [count=0] Number of times to repeat. If not set, or 0, will repeat\n      *   indefinitely.\n      * @param {boolean=} [invokeApply=true] If set to `false` skips model dirty checking, otherwise\n      *   will invoke `fn` within the {@link ng.$rootScope.Scope#$apply $apply} block.\n      * @returns {promise} A promise which will be notified on each iteration.\n      *\n      * @example\n      * <example module=\"time\">\n      *   <file name=\"index.html\">\n      *     <script>\n      *       function Ctrl2($scope,$interval) {\n      *         $scope.format = 'M/d/yy h:mm:ss a';\n      *         $scope.blood_1 = 100;\n      *         $scope.blood_2 = 120;\n      *\n      *         var stop;\n      *         $scope.fight = function() {\n      *           // Don't start a new fight if we are already fighting\n      *           if ( angular.isDefined(stop) ) return;\n      *\n      *           stop = $interval(function() {\n      *             if ($scope.blood_1 > 0 && $scope.blood_2 > 0) {\n      *                 $scope.blood_1 = $scope.blood_1 - 3;\n      *                 $scope.blood_2 = $scope.blood_2 - 4;\n      *             } else {\n      *                 $scope.stopFight();\n      *             }\n      *           }, 100);\n      *         };\n      *\n      *         $scope.stopFight = function() {\n      *           if (angular.isDefined(stop)) {\n      *             $interval.cancel(stop);\n      *             stop = undefined;\n      *           }\n      *         };\n      *\n      *         $scope.resetFight = function() {\n      *           $scope.blood_1 = 100;\n      *           $scope.blood_2 = 120;\n      *         }\n      *\n      *         $scope.$on('$destroy', function() {\n      *           // Make sure that the interval is destroyed too\n      *           $scope.stopFight();\n      *         });\n      *       }\n      *\n      *       angular.module('time', [])\n      *         // Register the 'myCurrentTime' directive factory method.\n      *         // We inject $interval and dateFilter service since the factory method is DI.\n      *         .directive('myCurrentTime', function($interval, dateFilter) {\n      *           // return the directive link function. (compile function not needed)\n      *           return function(scope, element, attrs) {\n      *             var format,  // date format\n      *             stopTime; // so that we can cancel the time updates\n      *\n      *             // used to update the UI\n      *             function updateTime() {\n      *               element.text(dateFilter(new Date(), format));\n      *             }\n      *\n      *             // watch the expression, and update the UI on change.\n      *             scope.$watch(attrs.myCurrentTime, function(value) {\n      *               format = value;\n      *               updateTime();\n      *             });\n      *\n      *             stopTime = $interval(updateTime, 1000);\n      *\n      *             // listen on DOM destroy (removal) event, and cancel the next UI update\n      *             // to prevent updating time ofter the DOM element was removed.\n      *             element.bind('$destroy', function() {\n      *               $interval.cancel(stopTime);\n      *             });\n      *           }\n      *         });\n      *     </script>\n      *\n      *     <div>\n      *       <div ng-controller=\"Ctrl2\">\n      *         Date format: <input ng-model=\"format\"> <hr/>\n      *         Current time is: <span my-current-time=\"format\"></span>\n      *         <hr/>\n      *         Blood 1 : <font color='red'>{{blood_1}}</font>\n      *         Blood 2 : <font color='red'>{{blood_2}}</font>\n      *         <button type=\"button\" data-ng-click=\"fight()\">Fight</button>\n      *         <button type=\"button\" data-ng-click=\"stopFight()\">StopFight</button>\n      *         <button type=\"button\" data-ng-click=\"resetFight()\">resetFight</button>\n      *       </div>\n      *     </div>\n      *\n      *   </file>\n      * </example>\n      */\n    function interval(fn, delay, count, invokeApply) {\n      var setInterval = $window.setInterval,\n          clearInterval = $window.clearInterval,\n          deferred = $q.defer(),\n          promise = deferred.promise,\n          iteration = 0,\n          skipApply = (isDefined(invokeApply) && !invokeApply);\n\n      count = isDefined(count) ? count : 0;\n\n      promise.then(null, null, fn);\n\n      promise.$$intervalId = setInterval(function tick() {\n        deferred.notify(iteration++);\n\n        if (count > 0 && iteration >= count) {\n          deferred.resolve(iteration);\n          clearInterval(promise.$$intervalId);\n          delete intervals[promise.$$intervalId];\n        }\n\n        if (!skipApply) $rootScope.$apply();\n\n      }, delay);\n\n      intervals[promise.$$intervalId] = deferred;\n\n      return promise;\n    }\n\n\n     /**\n      * @ngdoc method\n      * @name $interval#cancel\n      *\n      * @description\n      * Cancels a task associated with the `promise`.\n      *\n      * @param {promise} promise returned by the `$interval` function.\n      * @returns {boolean} Returns `true` if the task was successfully canceled.\n      */\n    interval.cancel = function(promise) {\n      if (promise && promise.$$intervalId in intervals) {\n        intervals[promise.$$intervalId].reject('canceled');\n        clearInterval(promise.$$intervalId);\n        delete intervals[promise.$$intervalId];\n        return true;\n      }\n      return false;\n    };\n\n    return interval;\n  }];\n}\n\n/**\n * @ngdoc service\n * @name $locale\n *\n * @description\n * $locale service provides localization rules for various Angular components. As of right now the\n * only public api is:\n *\n * * `id` – `{string}` – locale id formatted as `languageId-countryId` (e.g. `en-us`)\n */\nfunction $LocaleProvider(){\n  this.$get = function() {\n    return {\n      id: 'en-us',\n\n      NUMBER_FORMATS: {\n        DECIMAL_SEP: '.',\n        GROUP_SEP: ',',\n        PATTERNS: [\n          { // Decimal Pattern\n            minInt: 1,\n            minFrac: 0,\n            maxFrac: 3,\n            posPre: '',\n            posSuf: '',\n            negPre: '-',\n            negSuf: '',\n            gSize: 3,\n            lgSize: 3\n          },{ //Currency Pattern\n            minInt: 1,\n            minFrac: 2,\n            maxFrac: 2,\n            posPre: '\\u00A4',\n            posSuf: '',\n            negPre: '(\\u00A4',\n            negSuf: ')',\n            gSize: 3,\n            lgSize: 3\n          }\n        ],\n        CURRENCY_SYM: '$'\n      },\n\n      DATETIME_FORMATS: {\n        MONTH:\n            'January,February,March,April,May,June,July,August,September,October,November,December'\n            .split(','),\n        SHORTMONTH:  'Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec'.split(','),\n        DAY: 'Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday'.split(','),\n        SHORTDAY: 'Sun,Mon,Tue,Wed,Thu,Fri,Sat'.split(','),\n        AMPMS: ['AM','PM'],\n        medium: 'MMM d, y h:mm:ss a',\n        short: 'M/d/yy h:mm a',\n        fullDate: 'EEEE, MMMM d, y',\n        longDate: 'MMMM d, y',\n        mediumDate: 'MMM d, y',\n        shortDate: 'M/d/yy',\n        mediumTime: 'h:mm:ss a',\n        shortTime: 'h:mm a'\n      },\n\n      pluralCat: function(num) {\n        if (num === 1) {\n          return 'one';\n        }\n        return 'other';\n      }\n    };\n  };\n}\n\nvar PATH_MATCH = /^([^\\?#]*)(\\?([^#]*))?(#(.*))?$/,\n    DEFAULT_PORTS = {'http': 80, 'https': 443, 'ftp': 21};\nvar $locationMinErr = minErr('$location');\n\n\n/**\n * Encode path using encodeUriSegment, ignoring forward slashes\n *\n * @param {string} path Path to encode\n * @returns {string}\n */\nfunction encodePath(path) {\n  var segments = path.split('/'),\n      i = segments.length;\n\n  while (i--) {\n    segments[i] = encodeUriSegment(segments[i]);\n  }\n\n  return segments.join('/');\n}\n\nfunction parseAbsoluteUrl(absoluteUrl, locationObj, appBase) {\n  var parsedUrl = urlResolve(absoluteUrl, appBase);\n\n  locationObj.$$protocol = parsedUrl.protocol;\n  locationObj.$$host = parsedUrl.hostname;\n  locationObj.$$port = int(parsedUrl.port) || DEFAULT_PORTS[parsedUrl.protocol] || null;\n}\n\n\nfunction parseAppUrl(relativeUrl, locationObj, appBase) {\n  var prefixed = (relativeUrl.charAt(0) !== '/');\n  if (prefixed) {\n    relativeUrl = '/' + relativeUrl;\n  }\n  var match = urlResolve(relativeUrl, appBase);\n  locationObj.$$path = decodeURIComponent(prefixed && match.pathname.charAt(0) === '/' ?\n      match.pathname.substring(1) : match.pathname);\n  locationObj.$$search = parseKeyValue(match.search);\n  locationObj.$$hash = decodeURIComponent(match.hash);\n\n  // make sure path starts with '/';\n  if (locationObj.$$path && locationObj.$$path.charAt(0) != '/') {\n    locationObj.$$path = '/' + locationObj.$$path;\n  }\n}\n\n\n/**\n *\n * @param {string} begin\n * @param {string} whole\n * @returns {string} returns text from whole after begin or undefined if it does not begin with\n *                   expected string.\n */\nfunction beginsWith(begin, whole) {\n  if (whole.indexOf(begin) === 0) {\n    return whole.substr(begin.length);\n  }\n}\n\n\nfunction stripHash(url) {\n  var index = url.indexOf('#');\n  return index == -1 ? url : url.substr(0, index);\n}\n\n\nfunction stripFile(url) {\n  return url.substr(0, stripHash(url).lastIndexOf('/') + 1);\n}\n\n/* return the server only (scheme://host:port) */\nfunction serverBase(url) {\n  return url.substring(0, url.indexOf('/', url.indexOf('//') + 2));\n}\n\n\n/**\n * LocationHtml5Url represents an url\n * This object is exposed as $location service when HTML5 mode is enabled and supported\n *\n * @constructor\n * @param {string} appBase application base URL\n * @param {string} basePrefix url path prefix\n */\nfunction LocationHtml5Url(appBase, basePrefix) {\n  this.$$html5 = true;\n  basePrefix = basePrefix || '';\n  var appBaseNoFile = stripFile(appBase);\n  parseAbsoluteUrl(appBase, this, appBase);\n\n\n  /**\n   * Parse given html5 (regular) url string into properties\n   * @param {string} newAbsoluteUrl HTML5 url\n   * @private\n   */\n  this.$$parse = function(url) {\n    var pathUrl = beginsWith(appBaseNoFile, url);\n    if (!isString(pathUrl)) {\n      throw $locationMinErr('ipthprfx', 'Invalid url \"{0}\", missing path prefix \"{1}\".', url,\n          appBaseNoFile);\n    }\n\n    parseAppUrl(pathUrl, this, appBase);\n\n    if (!this.$$path) {\n      this.$$path = '/';\n    }\n\n    this.$$compose();\n  };\n\n  /**\n   * Compose url and update `absUrl` property\n   * @private\n   */\n  this.$$compose = function() {\n    var search = toKeyValue(this.$$search),\n        hash = this.$$hash ? '#' + encodeUriSegment(this.$$hash) : '';\n\n    this.$$url = encodePath(this.$$path) + (search ? '?' + search : '') + hash;\n    this.$$absUrl = appBaseNoFile + this.$$url.substr(1); // first char is always '/'\n  };\n\n  this.$$rewrite = function(url) {\n    var appUrl, prevAppUrl;\n\n    if ( (appUrl = beginsWith(appBase, url)) !== undefined ) {\n      prevAppUrl = appUrl;\n      if ( (appUrl = beginsWith(basePrefix, appUrl)) !== undefined ) {\n        return appBaseNoFile + (beginsWith('/', appUrl) || appUrl);\n      } else {\n        return appBase + prevAppUrl;\n      }\n    } else if ( (appUrl = beginsWith(appBaseNoFile, url)) !== undefined ) {\n      return appBaseNoFile + appUrl;\n    } else if (appBaseNoFile == url + '/') {\n      return appBaseNoFile;\n    }\n  };\n}\n\n\n/**\n * LocationHashbangUrl represents url\n * This object is exposed as $location service when developer doesn't opt into html5 mode.\n * It also serves as the base class for html5 mode fallback on legacy browsers.\n *\n * @constructor\n * @param {string} appBase application base URL\n * @param {string} hashPrefix hashbang prefix\n */\nfunction LocationHashbangUrl(appBase, hashPrefix) {\n  var appBaseNoFile = stripFile(appBase);\n\n  parseAbsoluteUrl(appBase, this, appBase);\n\n\n  /**\n   * Parse given hashbang url into properties\n   * @param {string} url Hashbang url\n   * @private\n   */\n  this.$$parse = function(url) {\n    var withoutBaseUrl = beginsWith(appBase, url) || beginsWith(appBaseNoFile, url);\n    var withoutHashUrl = withoutBaseUrl.charAt(0) == '#'\n        ? beginsWith(hashPrefix, withoutBaseUrl)\n        : (this.$$html5)\n          ? withoutBaseUrl\n          : '';\n\n    if (!isString(withoutHashUrl)) {\n      throw $locationMinErr('ihshprfx', 'Invalid url \"{0}\", missing hash prefix \"{1}\".', url,\n          hashPrefix);\n    }\n    parseAppUrl(withoutHashUrl, this, appBase);\n\n    this.$$path = removeWindowsDriveName(this.$$path, withoutHashUrl, appBase);\n\n    this.$$compose();\n\n    /*\n     * In Windows, on an anchor node on documents loaded from\n     * the filesystem, the browser will return a pathname\n     * prefixed with the drive name ('/C:/path') when a\n     * pathname without a drive is set:\n     *  * a.setAttribute('href', '/foo')\n     *   * a.pathname === '/C:/foo' //true\n     *\n     * Inside of Angular, we're always using pathnames that\n     * do not include drive names for routing.\n     */\n    function removeWindowsDriveName (path, url, base) {\n      /*\n      Matches paths for file protocol on windows,\n      such as /C:/foo/bar, and captures only /foo/bar.\n      */\n      var windowsFilePathExp = /^\\/[A-Z]:(\\/.*)/;\n\n      var firstPathSegmentMatch;\n\n      //Get the relative path from the input URL.\n      if (url.indexOf(base) === 0) {\n        url = url.replace(base, '');\n      }\n\n      // The input URL intentionally contains a first path segment that ends with a colon.\n      if (windowsFilePathExp.exec(url)) {\n        return path;\n      }\n\n      firstPathSegmentMatch = windowsFilePathExp.exec(path);\n      return firstPathSegmentMatch ? firstPathSegmentMatch[1] : path;\n    }\n  };\n\n  /**\n   * Compose hashbang url and update `absUrl` property\n   * @private\n   */\n  this.$$compose = function() {\n    var search = toKeyValue(this.$$search),\n        hash = this.$$hash ? '#' + encodeUriSegment(this.$$hash) : '';\n\n    this.$$url = encodePath(this.$$path) + (search ? '?' + search : '') + hash;\n    this.$$absUrl = appBase + (this.$$url ? hashPrefix + this.$$url : '');\n  };\n\n  this.$$rewrite = function(url) {\n    if(stripHash(appBase) == stripHash(url)) {\n      return url;\n    }\n  };\n}\n\n\n/**\n * LocationHashbangUrl represents url\n * This object is exposed as $location service when html5 history api is enabled but the browser\n * does not support it.\n *\n * @constructor\n * @param {string} appBase application base URL\n * @param {string} hashPrefix hashbang prefix\n */\nfunction LocationHashbangInHtml5Url(appBase, hashPrefix) {\n  this.$$html5 = true;\n  LocationHashbangUrl.apply(this, arguments);\n\n  var appBaseNoFile = stripFile(appBase);\n\n  this.$$rewrite = function(url) {\n    var appUrl;\n\n    if ( appBase == stripHash(url) ) {\n      return url;\n    } else if ( (appUrl = beginsWith(appBaseNoFile, url)) ) {\n      return appBase + hashPrefix + appUrl;\n    } else if ( appBaseNoFile === url + '/') {\n      return appBaseNoFile;\n    }\n  };\n\n  this.$$compose = function() {\n    var search = toKeyValue(this.$$search),\n        hash = this.$$hash ? '#' + encodeUriSegment(this.$$hash) : '';\n\n    this.$$url = encodePath(this.$$path) + (search ? '?' + search : '') + hash;\n    // include hashPrefix in $$absUrl when $$url is empty so IE8 & 9 do not reload page because of removal of '#'\n    this.$$absUrl = appBase + hashPrefix + this.$$url;\n  };\n\n}\n\n\nLocationHashbangInHtml5Url.prototype =\n  LocationHashbangUrl.prototype =\n  LocationHtml5Url.prototype = {\n\n  /**\n   * Are we in html5 mode?\n   * @private\n   */\n  $$html5: false,\n\n  /**\n   * Has any change been replacing ?\n   * @private\n   */\n  $$replace: false,\n\n  /**\n   * @ngdoc method\n   * @name $location#absUrl\n   *\n   * @description\n   * This method is getter only.\n   *\n   * Return full url representation with all segments encoded according to rules specified in\n   * [RFC 3986](http://www.ietf.org/rfc/rfc3986.txt).\n   *\n   * @return {string} full url\n   */\n  absUrl: locationGetter('$$absUrl'),\n\n  /**\n   * @ngdoc method\n   * @name $location#url\n   *\n   * @description\n   * This method is getter / setter.\n   *\n   * Return url (e.g. `/path?a=b#hash`) when called without any parameter.\n   *\n   * Change path, search and hash, when called with parameter and return `$location`.\n   *\n   * @param {string=} url New url without base prefix (e.g. `/path?a=b#hash`)\n   * @param {string=} replace The path that will be changed\n   * @return {string} url\n   */\n  url: function(url, replace) {\n    if (isUndefined(url))\n      return this.$$url;\n\n    var match = PATH_MATCH.exec(url);\n    if (match[1]) this.path(decodeURIComponent(match[1]));\n    if (match[2] || match[1]) this.search(match[3] || '');\n    this.hash(match[5] || '', replace);\n\n    return this;\n  },\n\n  /**\n   * @ngdoc method\n   * @name $location#protocol\n   *\n   * @description\n   * This method is getter only.\n   *\n   * Return protocol of current url.\n   *\n   * @return {string} protocol of current url\n   */\n  protocol: locationGetter('$$protocol'),\n\n  /**\n   * @ngdoc method\n   * @name $location#host\n   *\n   * @description\n   * This method is getter only.\n   *\n   * Return host of current url.\n   *\n   * @return {string} host of current url.\n   */\n  host: locationGetter('$$host'),\n\n  /**\n   * @ngdoc method\n   * @name $location#port\n   *\n   * @description\n   * This method is getter only.\n   *\n   * Return port of current url.\n   *\n   * @return {Number} port\n   */\n  port: locationGetter('$$port'),\n\n  /**\n   * @ngdoc method\n   * @name $location#path\n   *\n   * @description\n   * This method is getter / setter.\n   *\n   * Return path of current url when called without any parameter.\n   *\n   * Change path when called with parameter and return `$location`.\n   *\n   * Note: Path should always begin with forward slash (/), this method will add the forward slash\n   * if it is missing.\n   *\n   * @param {string=} path New path\n   * @return {string} path\n   */\n  path: locationGetterSetter('$$path', function(path) {\n    return path.charAt(0) == '/' ? path : '/' + path;\n  }),\n\n  /**\n   * @ngdoc method\n   * @name $location#search\n   *\n   * @description\n   * This method is getter / setter.\n   *\n   * Return search part (as object) of current url when called without any parameter.\n   *\n   * Change search part when called with parameter and return `$location`.\n   *\n   *\n   * ```js\n   * // given url http://example.com/#/some/path?foo=bar&baz=xoxo\n   * var searchObject = $location.search();\n   * // => {foo: 'bar', baz: 'xoxo'}\n   *\n   *\n   * // set foo to 'yipee'\n   * $location.search('foo', 'yipee');\n   * // => $location\n   * ```\n   *\n   * @param {string|Object.<string>|Object.<Array.<string>>} search New search params - string or\n   * hash object.\n   *\n   * When called with a single argument the method acts as a setter, setting the `search` component\n   * of `$location` to the specified value.\n   *\n   * If the argument is a hash object containing an array of values, these values will be encoded\n   * as duplicate search parameters in the url.\n   *\n   * @param {(string|Array<string>)=} paramValue If `search` is a string, then `paramValue` will\n   * override only a single search property.\n   *\n   * If `paramValue` is an array, it will override the property of the `search` component of\n   * `$location` specified via the first argument.\n   *\n   * If `paramValue` is `null`, the property specified via the first argument will be deleted.\n   *\n   * @return {Object} If called with no arguments returns the parsed `search` object. If called with\n   * one or more arguments returns `$location` object itself.\n   */\n  search: function(search, paramValue) {\n    switch (arguments.length) {\n      case 0:\n        return this.$$search;\n      case 1:\n        if (isString(search)) {\n          this.$$search = parseKeyValue(search);\n        } else if (isObject(search)) {\n          this.$$search = search;\n        } else {\n          throw $locationMinErr('isrcharg',\n              'The first argument of the `$location#search()` call must be a string or an object.');\n        }\n        break;\n      default:\n        if (isUndefined(paramValue) || paramValue === null) {\n          delete this.$$search[search];\n        } else {\n          this.$$search[search] = paramValue;\n        }\n    }\n\n    this.$$compose();\n    return this;\n  },\n\n  /**\n   * @ngdoc method\n   * @name $location#hash\n   *\n   * @description\n   * This method is getter / setter.\n   *\n   * Return hash fragment when called without any parameter.\n   *\n   * Change hash fragment when called with parameter and return `$location`.\n   *\n   * @param {string=} hash New hash fragment\n   * @return {string} hash\n   */\n  hash: locationGetterSetter('$$hash', identity),\n\n  /**\n   * @ngdoc method\n   * @name $location#replace\n   *\n   * @description\n   * If called, all changes to $location during current `$digest` will be replacing current history\n   * record, instead of adding new one.\n   */\n  replace: function() {\n    this.$$replace = true;\n    return this;\n  }\n};\n\nfunction locationGetter(property) {\n  return function() {\n    return this[property];\n  };\n}\n\n\nfunction locationGetterSetter(property, preprocess) {\n  return function(value) {\n    if (isUndefined(value))\n      return this[property];\n\n    this[property] = preprocess(value);\n    this.$$compose();\n\n    return this;\n  };\n}\n\n\n/**\n * @ngdoc service\n * @name $location\n *\n * @requires $rootElement\n *\n * @description\n * The $location service parses the URL in the browser address bar (based on the\n * [window.location](https://developer.mozilla.org/en/window.location)) and makes the URL\n * available to your application. Changes to the URL in the address bar are reflected into\n * $location service and changes to $location are reflected into the browser address bar.\n *\n * **The $location service:**\n *\n * - Exposes the current URL in the browser address bar, so you can\n *   - Watch and observe the URL.\n *   - Change the URL.\n * - Synchronizes the URL with the browser when the user\n *   - Changes the address bar.\n *   - Clicks the back or forward button (or clicks a History link).\n *   - Clicks on a link.\n * - Represents the URL object as a set of methods (protocol, host, port, path, search, hash).\n *\n * For more information see {@link guide/$location Developer Guide: Using $location}\n */\n\n/**\n * @ngdoc provider\n * @name $locationProvider\n * @description\n * Use the `$locationProvider` to configure how the application deep linking paths are stored.\n */\nfunction $LocationProvider(){\n  var hashPrefix = '',\n      html5Mode = false;\n\n  /**\n   * @ngdoc property\n   * @name $locationProvider#hashPrefix\n   * @description\n   * @param {string=} prefix Prefix for hash part (containing path and search)\n   * @returns {*} current value if used as getter or itself (chaining) if used as setter\n   */\n  this.hashPrefix = function(prefix) {\n    if (isDefined(prefix)) {\n      hashPrefix = prefix;\n      return this;\n    } else {\n      return hashPrefix;\n    }\n  };\n\n  /**\n   * @ngdoc property\n   * @name $locationProvider#html5Mode\n   * @description\n   * @param {boolean=} mode Use HTML5 strategy if available.\n   * @returns {*} current value if used as getter or itself (chaining) if used as setter\n   */\n  this.html5Mode = function(mode) {\n    if (isDefined(mode)) {\n      html5Mode = mode;\n      return this;\n    } else {\n      return html5Mode;\n    }\n  };\n\n  /**\n   * @ngdoc event\n   * @name $location#$locationChangeStart\n   * @eventType broadcast on root scope\n   * @description\n   * Broadcasted before a URL will change. This change can be prevented by calling\n   * `preventDefault` method of the event. See {@link ng.$rootScope.Scope#$on} for more\n   * details about event object. Upon successful change\n   * {@link ng.$location#events_$locationChangeSuccess $locationChangeSuccess} is fired.\n   *\n   * @param {Object} angularEvent Synthetic event object.\n   * @param {string} newUrl New URL\n   * @param {string=} oldUrl URL that was before it was changed.\n   */\n\n  /**\n   * @ngdoc event\n   * @name $location#$locationChangeSuccess\n   * @eventType broadcast on root scope\n   * @description\n   * Broadcasted after a URL was changed.\n   *\n   * @param {Object} angularEvent Synthetic event object.\n   * @param {string} newUrl New URL\n   * @param {string=} oldUrl URL that was before it was changed.\n   */\n\n  this.$get = ['$rootScope', '$browser', '$sniffer', '$rootElement',\n      function( $rootScope,   $browser,   $sniffer,   $rootElement) {\n    var $location,\n        LocationMode,\n        baseHref = $browser.baseHref(), // if base[href] is undefined, it defaults to ''\n        initialUrl = $browser.url(),\n        appBase;\n\n    if (html5Mode) {\n      appBase = serverBase(initialUrl) + (baseHref || '/');\n      LocationMode = $sniffer.history ? LocationHtml5Url : LocationHashbangInHtml5Url;\n    } else {\n      appBase = stripHash(initialUrl);\n      LocationMode = LocationHashbangUrl;\n    }\n    $location = new LocationMode(appBase, '#' + hashPrefix);\n    $location.$$parse($location.$$rewrite(initialUrl));\n\n    $rootElement.on('click', function(event) {\n      // TODO(vojta): rewrite link when opening in new tab/window (in legacy browser)\n      // currently we open nice url link and redirect then\n\n      if (event.ctrlKey || event.metaKey || event.which == 2) return;\n\n      var elm = jqLite(event.target);\n\n      // traverse the DOM up to find first A tag\n      while (lowercase(elm[0].nodeName) !== 'a') {\n        // ignore rewriting if no A tag (reached root element, or no parent - removed from document)\n        if (elm[0] === $rootElement[0] || !(elm = elm.parent())[0]) return;\n      }\n\n      var absHref = elm.prop('href');\n\n      if (isObject(absHref) && absHref.toString() === '[object SVGAnimatedString]') {\n        // SVGAnimatedString.animVal should be identical to SVGAnimatedString.baseVal, unless during\n        // an animation.\n        absHref = urlResolve(absHref.animVal).href;\n      }\n\n      // Make relative links work in HTML5 mode for legacy browsers (or at least IE8 & 9)\n      // The href should be a regular url e.g. /link/somewhere or link/somewhere or ../somewhere or\n      // somewhere#anchor or http://example.com/somewhere\n      if (LocationMode === LocationHashbangInHtml5Url) {\n        // get the actual href attribute - see\n        // http://msdn.microsoft.com/en-us/library/ie/dd347148(v=vs.85).aspx\n        var href = elm.attr('href') || elm.attr('xlink:href');\n\n        if (href.indexOf('://') < 0) {         // Ignore absolute URLs\n          var prefix = '#' + hashPrefix;\n          if (href[0] == '/') {\n            // absolute path - replace old path\n            absHref = appBase + prefix + href;\n          } else if (href[0] == '#') {\n            // local anchor\n            absHref = appBase + prefix + ($location.path() || '/') + href;\n          } else {\n            // relative path - join with current path\n            var stack = $location.path().split(\"/\"),\n              parts = href.split(\"/\");\n            for (var i=0; i<parts.length; i++) {\n              if (parts[i] == \".\")\n                continue;\n              else if (parts[i] == \"..\")\n                stack.pop();\n              else if (parts[i].length)\n                stack.push(parts[i]);\n            }\n            absHref = appBase + prefix + stack.join('/');\n          }\n        }\n      }\n\n      var rewrittenUrl = $location.$$rewrite(absHref);\n\n      if (absHref && !elm.attr('target') && rewrittenUrl && !event.isDefaultPrevented()) {\n        event.preventDefault();\n        if (rewrittenUrl != $browser.url()) {\n          // update location manually\n          $location.$$parse(rewrittenUrl);\n          $rootScope.$apply();\n          // hack to work around FF6 bug 684208 when scenario runner clicks on links\n          window.angular['ff-684208-preventDefault'] = true;\n        }\n      }\n    });\n\n\n    // rewrite hashbang url <> html5 url\n    if ($location.absUrl() != initialUrl) {\n      $browser.url($location.absUrl(), true);\n    }\n\n    // update $location when $browser url changes\n    $browser.onUrlChange(function(newUrl) {\n      if ($location.absUrl() != newUrl) {\n        $rootScope.$evalAsync(function() {\n          var oldUrl = $location.absUrl();\n\n          $location.$$parse(newUrl);\n          if ($rootScope.$broadcast('$locationChangeStart', newUrl,\n                                    oldUrl).defaultPrevented) {\n            $location.$$parse(oldUrl);\n            $browser.url(oldUrl);\n          } else {\n            afterLocationChange(oldUrl);\n          }\n        });\n        if (!$rootScope.$$phase) $rootScope.$digest();\n      }\n    });\n\n    // update browser\n    var changeCounter = 0;\n    $rootScope.$watch(function $locationWatch() {\n      var oldUrl = $browser.url();\n      var currentReplace = $location.$$replace;\n\n      if (!changeCounter || oldUrl != $location.absUrl()) {\n        changeCounter++;\n        $rootScope.$evalAsync(function() {\n          if ($rootScope.$broadcast('$locationChangeStart', $location.absUrl(), oldUrl).\n              defaultPrevented) {\n            $location.$$parse(oldUrl);\n          } else {\n            $browser.url($location.absUrl(), currentReplace);\n            afterLocationChange(oldUrl);\n          }\n        });\n      }\n      $location.$$replace = false;\n\n      return changeCounter;\n    });\n\n    return $location;\n\n    function afterLocationChange(oldUrl) {\n      $rootScope.$broadcast('$locationChangeSuccess', $location.absUrl(), oldUrl);\n    }\n}];\n}\n\n/**\n * @ngdoc service\n * @name $log\n * @requires $window\n *\n * @description\n * Simple service for logging. Default implementation safely writes the message\n * into the browser's console (if present).\n *\n * The main purpose of this service is to simplify debugging and troubleshooting.\n *\n * The default is to log `debug` messages. You can use\n * {@link ng.$logProvider ng.$logProvider#debugEnabled} to change this.\n *\n * @example\n   <example>\n     <file name=\"script.js\">\n       function LogCtrl($scope, $log) {\n         $scope.$log = $log;\n         $scope.message = 'Hello World!';\n       }\n     </file>\n     <file name=\"index.html\">\n       <div ng-controller=\"LogCtrl\">\n         <p>Reload this page with open console, enter text and hit the log button...</p>\n         Message:\n         <input type=\"text\" ng-model=\"message\"/>\n         <button ng-click=\"$log.log(message)\">log</button>\n         <button ng-click=\"$log.warn(message)\">warn</button>\n         <button ng-click=\"$log.info(message)\">info</button>\n         <button ng-click=\"$log.error(message)\">error</button>\n       </div>\n     </file>\n   </example>\n */\n\n/**\n * @ngdoc provider\n * @name $logProvider\n * @description\n * Use the `$logProvider` to configure how the application logs messages\n */\nfunction $LogProvider(){\n  var debug = true,\n      self = this;\n\n  /**\n   * @ngdoc property\n   * @name $logProvider#debugEnabled\n   * @description\n   * @param {boolean=} flag enable or disable debug level messages\n   * @returns {*} current value if used as getter or itself (chaining) if used as setter\n   */\n  this.debugEnabled = function(flag) {\n    if (isDefined(flag)) {\n      debug = flag;\n    return this;\n    } else {\n      return debug;\n    }\n  };\n\n  this.$get = ['$window', function($window){\n    return {\n      /**\n       * @ngdoc method\n       * @name $log#log\n       *\n       * @description\n       * Write a log message\n       */\n      log: consoleLog('log'),\n\n      /**\n       * @ngdoc method\n       * @name $log#info\n       *\n       * @description\n       * Write an information message\n       */\n      info: consoleLog('info'),\n\n      /**\n       * @ngdoc method\n       * @name $log#warn\n       *\n       * @description\n       * Write a warning message\n       */\n      warn: consoleLog('warn'),\n\n      /**\n       * @ngdoc method\n       * @name $log#error\n       *\n       * @description\n       * Write an error message\n       */\n      error: consoleLog('error'),\n\n      /**\n       * @ngdoc method\n       * @name $log#debug\n       *\n       * @description\n       * Write a debug message\n       */\n      debug: (function () {\n        var fn = consoleLog('debug');\n\n        return function() {\n          if (debug) {\n            fn.apply(self, arguments);\n          }\n        };\n      }())\n    };\n\n    function formatError(arg) {\n      if (arg instanceof Error) {\n        if (arg.stack) {\n          arg = (arg.message && arg.stack.indexOf(arg.message) === -1)\n              ? 'Error: ' + arg.message + '\\n' + arg.stack\n              : arg.stack;\n        } else if (arg.sourceURL) {\n          arg = arg.message + '\\n' + arg.sourceURL + ':' + arg.line;\n        }\n      }\n      return arg;\n    }\n\n    function consoleLog(type) {\n      var console = $window.console || {},\n          logFn = console[type] || console.log || noop,\n          hasApply = false;\n\n      // Note: reading logFn.apply throws an error in IE11 in IE8 document mode.\n      // The reason behind this is that console.log has type \"object\" in IE8...\n      try {\n        hasApply = !!logFn.apply;\n      } catch (e) {}\n\n      if (hasApply) {\n        return function() {\n          var args = [];\n          forEach(arguments, function(arg) {\n            args.push(formatError(arg));\n          });\n          return logFn.apply(console, args);\n        };\n      }\n\n      // we are IE which either doesn't have window.console => this is noop and we do nothing,\n      // or we are IE where console.log doesn't have apply so we log at least first 2 args\n      return function(arg1, arg2) {\n        logFn(arg1, arg2 == null ? '' : arg2);\n      };\n    }\n  }];\n}\n\nvar $parseMinErr = minErr('$parse');\nvar promiseWarningCache = {};\nvar promiseWarning;\n\n// Sandboxing Angular Expressions\n// ------------------------------\n// Angular expressions are generally considered safe because these expressions only have direct\n// access to $scope and locals. However, one can obtain the ability to execute arbitrary JS code by\n// obtaining a reference to native JS functions such as the Function constructor.\n//\n// As an example, consider the following Angular expression:\n//\n//   {}.toString.constructor(alert(\"evil JS code\"))\n//\n// We want to prevent this type of access. For the sake of performance, during the lexing phase we\n// disallow any \"dotted\" access to any member named \"constructor\".\n//\n// For reflective calls (a[b]) we check that the value of the lookup is not the Function constructor\n// while evaluating the expression, which is a stronger but more expensive test. Since reflective\n// calls are expensive anyway, this is not such a big deal compared to static dereferencing.\n//\n// This sandboxing technique is not perfect and doesn't aim to be. The goal is to prevent exploits\n// against the expression language, but not to prevent exploits that were enabled by exposing\n// sensitive JavaScript or browser apis on Scope. Exposing such objects on a Scope is never a good\n// practice and therefore we are not even trying to protect against interaction with an object\n// explicitly exposed in this way.\n//\n// A developer could foil the name check by aliasing the Function constructor under a different\n// name on the scope.\n//\n// In general, it is not possible to access a Window object from an angular expression unless a\n// window or some DOM object that has a reference to window is published onto a Scope.\n\nfunction ensureSafeMemberName(name, fullExpression) {\n  if (name === \"constructor\") {\n    throw $parseMinErr('isecfld',\n        'Referencing \"constructor\" field in Angular expressions is disallowed! Expression: {0}',\n        fullExpression);\n  }\n  return name;\n}\n\nfunction ensureSafeObject(obj, fullExpression) {\n  // nifty check if obj is Function that is fast and works across iframes and other contexts\n  if (obj) {\n    if (obj.constructor === obj) {\n      throw $parseMinErr('isecfn',\n          'Referencing Function in Angular expressions is disallowed! Expression: {0}',\n          fullExpression);\n    } else if (// isWindow(obj)\n        obj.document && obj.location && obj.alert && obj.setInterval) {\n      throw $parseMinErr('isecwindow',\n          'Referencing the Window in Angular expressions is disallowed! Expression: {0}',\n          fullExpression);\n    } else if (// isElement(obj)\n        obj.children && (obj.nodeName || (obj.prop && obj.attr && obj.find))) {\n      throw $parseMinErr('isecdom',\n          'Referencing DOM nodes in Angular expressions is disallowed! Expression: {0}',\n          fullExpression);\n    }\n  }\n  return obj;\n}\n\nvar OPERATORS = {\n    /* jshint bitwise : false */\n    'null':function(){return null;},\n    'true':function(){return true;},\n    'false':function(){return false;},\n    undefined:noop,\n    '+':function(self, locals, a,b){\n      a=a(self, locals); b=b(self, locals);\n      if (isDefined(a)) {\n        if (isDefined(b)) {\n          return a + b;\n        }\n        return a;\n      }\n      return isDefined(b)?b:undefined;},\n    '-':function(self, locals, a,b){\n          a=a(self, locals); b=b(self, locals);\n          return (isDefined(a)?a:0)-(isDefined(b)?b:0);\n        },\n    '*':function(self, locals, a,b){return a(self, locals)*b(self, locals);},\n    '/':function(self, locals, a,b){return a(self, locals)/b(self, locals);},\n    '%':function(self, locals, a,b){return a(self, locals)%b(self, locals);},\n    '^':function(self, locals, a,b){return a(self, locals)^b(self, locals);},\n    '=':noop,\n    '===':function(self, locals, a, b){return a(self, locals)===b(self, locals);},\n    '!==':function(self, locals, a, b){return a(self, locals)!==b(self, locals);},\n    '==':function(self, locals, a,b){return a(self, locals)==b(self, locals);},\n    '!=':function(self, locals, a,b){return a(self, locals)!=b(self, locals);},\n    '<':function(self, locals, a,b){return a(self, locals)<b(self, locals);},\n    '>':function(self, locals, a,b){return a(self, locals)>b(self, locals);},\n    '<=':function(self, locals, a,b){return a(self, locals)<=b(self, locals);},\n    '>=':function(self, locals, a,b){return a(self, locals)>=b(self, locals);},\n    '&&':function(self, locals, a,b){return a(self, locals)&&b(self, locals);},\n    '||':function(self, locals, a,b){return a(self, locals)||b(self, locals);},\n    '&':function(self, locals, a,b){return a(self, locals)&b(self, locals);},\n//    '|':function(self, locals, a,b){return a|b;},\n    '|':function(self, locals, a,b){return b(self, locals)(self, locals, a(self, locals));},\n    '!':function(self, locals, a){return !a(self, locals);}\n};\n/* jshint bitwise: true */\nvar ESCAPE = {\"n\":\"\\n\", \"f\":\"\\f\", \"r\":\"\\r\", \"t\":\"\\t\", \"v\":\"\\v\", \"'\":\"'\", '\"':'\"'};\n\n\n/////////////////////////////////////////\n\n\n/**\n * @constructor\n */\nvar Lexer = function (options) {\n  this.options = options;\n};\n\nLexer.prototype = {\n  constructor: Lexer,\n\n  lex: function (text) {\n    this.text = text;\n\n    this.index = 0;\n    this.ch = undefined;\n    this.lastCh = ':'; // can start regexp\n\n    this.tokens = [];\n\n    while (this.index < this.text.length) {\n      this.ch = this.text.charAt(this.index);\n      if (this.is('\"\\'')) {\n        this.readString(this.ch);\n      } else if (this.isNumber(this.ch) || this.is('.') && this.isNumber(this.peek())) {\n        this.readNumber();\n      } else if (this.isIdent(this.ch)) {\n        this.readIdent();\n      } else if (this.is('(){}[].,;:?')) {\n        this.tokens.push({\n          index: this.index,\n          text: this.ch\n        });\n        this.index++;\n      } else if (this.isWhitespace(this.ch)) {\n        this.index++;\n        continue;\n      } else {\n        var ch2 = this.ch + this.peek();\n        var ch3 = ch2 + this.peek(2);\n        var fn = OPERATORS[this.ch];\n        var fn2 = OPERATORS[ch2];\n        var fn3 = OPERATORS[ch3];\n        if (fn3) {\n          this.tokens.push({index: this.index, text: ch3, fn: fn3});\n          this.index += 3;\n        } else if (fn2) {\n          this.tokens.push({index: this.index, text: ch2, fn: fn2});\n          this.index += 2;\n        } else if (fn) {\n          this.tokens.push({\n            index: this.index,\n            text: this.ch,\n            fn: fn\n          });\n          this.index += 1;\n        } else {\n          this.throwError('Unexpected next character ', this.index, this.index + 1);\n        }\n      }\n      this.lastCh = this.ch;\n    }\n    return this.tokens;\n  },\n\n  is: function(chars) {\n    return chars.indexOf(this.ch) !== -1;\n  },\n\n  was: function(chars) {\n    return chars.indexOf(this.lastCh) !== -1;\n  },\n\n  peek: function(i) {\n    var num = i || 1;\n    return (this.index + num < this.text.length) ? this.text.charAt(this.index + num) : false;\n  },\n\n  isNumber: function(ch) {\n    return ('0' <= ch && ch <= '9');\n  },\n\n  isWhitespace: function(ch) {\n    // IE treats non-breaking space as \\u00A0\n    return (ch === ' ' || ch === '\\r' || ch === '\\t' ||\n            ch === '\\n' || ch === '\\v' || ch === '\\u00A0');\n  },\n\n  isIdent: function(ch) {\n    return ('a' <= ch && ch <= 'z' ||\n            'A' <= ch && ch <= 'Z' ||\n            '_' === ch || ch === '$');\n  },\n\n  isExpOperator: function(ch) {\n    return (ch === '-' || ch === '+' || this.isNumber(ch));\n  },\n\n  throwError: function(error, start, end) {\n    end = end || this.index;\n    var colStr = (isDefined(start)\n            ? 's ' + start +  '-' + this.index + ' [' + this.text.substring(start, end) + ']'\n            : ' ' + end);\n    throw $parseMinErr('lexerr', 'Lexer Error: {0} at column{1} in expression [{2}].',\n        error, colStr, this.text);\n  },\n\n  readNumber: function() {\n    var number = '';\n    var start = this.index;\n    while (this.index < this.text.length) {\n      var ch = lowercase(this.text.charAt(this.index));\n      if (ch == '.' || this.isNumber(ch)) {\n        number += ch;\n      } else {\n        var peekCh = this.peek();\n        if (ch == 'e' && this.isExpOperator(peekCh)) {\n          number += ch;\n        } else if (this.isExpOperator(ch) &&\n            peekCh && this.isNumber(peekCh) &&\n            number.charAt(number.length - 1) == 'e') {\n          number += ch;\n        } else if (this.isExpOperator(ch) &&\n            (!peekCh || !this.isNumber(peekCh)) &&\n            number.charAt(number.length - 1) == 'e') {\n          this.throwError('Invalid exponent');\n        } else {\n          break;\n        }\n      }\n      this.index++;\n    }\n    number = 1 * number;\n    this.tokens.push({\n      index: start,\n      text: number,\n      literal: true,\n      constant: true,\n      fn: function() { return number; }\n    });\n  },\n\n  readIdent: function() {\n    var parser = this;\n\n    var ident = '';\n    var start = this.index;\n\n    var lastDot, peekIndex, methodName, ch;\n\n    while (this.index < this.text.length) {\n      ch = this.text.charAt(this.index);\n      if (ch === '.' || this.isIdent(ch) || this.isNumber(ch)) {\n        if (ch === '.') lastDot = this.index;\n        ident += ch;\n      } else {\n        break;\n      }\n      this.index++;\n    }\n\n    //check if this is not a method invocation and if it is back out to last dot\n    if (lastDot) {\n      peekIndex = this.index;\n      while (peekIndex < this.text.length) {\n        ch = this.text.charAt(peekIndex);\n        if (ch === '(') {\n          methodName = ident.substr(lastDot - start + 1);\n          ident = ident.substr(0, lastDot - start);\n          this.index = peekIndex;\n          break;\n        }\n        if (this.isWhitespace(ch)) {\n          peekIndex++;\n        } else {\n          break;\n        }\n      }\n    }\n\n\n    var token = {\n      index: start,\n      text: ident\n    };\n\n    // OPERATORS is our own object so we don't need to use special hasOwnPropertyFn\n    if (OPERATORS.hasOwnProperty(ident)) {\n      token.fn = OPERATORS[ident];\n      token.literal = true;\n      token.constant = true;\n    } else {\n      var getter = getterFn(ident, this.options, this.text);\n      token.fn = extend(function(self, locals) {\n        return (getter(self, locals));\n      }, {\n        assign: function(self, value) {\n          return setter(self, ident, value, parser.text, parser.options);\n        }\n      });\n    }\n\n    this.tokens.push(token);\n\n    if (methodName) {\n      this.tokens.push({\n        index:lastDot,\n        text: '.'\n      });\n      this.tokens.push({\n        index: lastDot + 1,\n        text: methodName\n      });\n    }\n  },\n\n  readString: function(quote) {\n    var start = this.index;\n    this.index++;\n    var string = '';\n    var rawString = quote;\n    var escape = false;\n    while (this.index < this.text.length) {\n      var ch = this.text.charAt(this.index);\n      rawString += ch;\n      if (escape) {\n        if (ch === 'u') {\n          var hex = this.text.substring(this.index + 1, this.index + 5);\n          if (!hex.match(/[\\da-f]{4}/i))\n            this.throwError('Invalid unicode escape [\\\\u' + hex + ']');\n          this.index += 4;\n          string += String.fromCharCode(parseInt(hex, 16));\n        } else {\n          var rep = ESCAPE[ch];\n          if (rep) {\n            string += rep;\n          } else {\n            string += ch;\n          }\n        }\n        escape = false;\n      } else if (ch === '\\\\') {\n        escape = true;\n      } else if (ch === quote) {\n        this.index++;\n        this.tokens.push({\n          index: start,\n          text: rawString,\n          string: string,\n          literal: true,\n          constant: true,\n          fn: function() { return string; }\n        });\n        return;\n      } else {\n        string += ch;\n      }\n      this.index++;\n    }\n    this.throwError('Unterminated quote', start);\n  }\n};\n\n\n/**\n * @constructor\n */\nvar Parser = function (lexer, $filter, options) {\n  this.lexer = lexer;\n  this.$filter = $filter;\n  this.options = options;\n};\n\nParser.ZERO = extend(function () {\n  return 0;\n}, {\n  constant: true\n});\n\nParser.prototype = {\n  constructor: Parser,\n\n  parse: function (text) {\n    this.text = text;\n\n    this.tokens = this.lexer.lex(text);\n\n    var value = this.statements();\n\n    if (this.tokens.length !== 0) {\n      this.throwError('is an unexpected token', this.tokens[0]);\n    }\n\n    value.literal = !!value.literal;\n    value.constant = !!value.constant;\n\n    return value;\n  },\n\n  primary: function () {\n    var primary;\n    if (this.expect('(')) {\n      primary = this.filterChain();\n      this.consume(')');\n    } else if (this.expect('[')) {\n      primary = this.arrayDeclaration();\n    } else if (this.expect('{')) {\n      primary = this.object();\n    } else {\n      var token = this.expect();\n      primary = token.fn;\n      if (!primary) {\n        this.throwError('not a primary expression', token);\n      }\n      primary.literal = !!token.literal;\n      primary.constant = !!token.constant;\n    }\n\n    var next, context;\n    while ((next = this.expect('(', '[', '.'))) {\n      if (next.text === '(') {\n        primary = this.functionCall(primary, context);\n        context = null;\n      } else if (next.text === '[') {\n        context = primary;\n        primary = this.objectIndex(primary);\n      } else if (next.text === '.') {\n        context = primary;\n        primary = this.fieldAccess(primary);\n      } else {\n        this.throwError('IMPOSSIBLE');\n      }\n    }\n    return primary;\n  },\n\n  throwError: function(msg, token) {\n    throw $parseMinErr('syntax',\n        'Syntax Error: Token \\'{0}\\' {1} at column {2} of the expression [{3}] starting at [{4}].',\n          token.text, msg, (token.index + 1), this.text, this.text.substring(token.index));\n  },\n\n  peekToken: function() {\n    if (this.tokens.length === 0)\n      throw $parseMinErr('ueoe', 'Unexpected end of expression: {0}', this.text);\n    return this.tokens[0];\n  },\n\n  peek: function(e1, e2, e3, e4) {\n    if (this.tokens.length > 0) {\n      var token = this.tokens[0];\n      var t = token.text;\n      if (t === e1 || t === e2 || t === e3 || t === e4 ||\n          (!e1 && !e2 && !e3 && !e4)) {\n        return token;\n      }\n    }\n    return false;\n  },\n\n  expect: function(e1, e2, e3, e4){\n    var token = this.peek(e1, e2, e3, e4);\n    if (token) {\n      this.tokens.shift();\n      return token;\n    }\n    return false;\n  },\n\n  consume: function(e1){\n    if (!this.expect(e1)) {\n      this.throwError('is unexpected, expecting [' + e1 + ']', this.peek());\n    }\n  },\n\n  unaryFn: function(fn, right) {\n    return extend(function(self, locals) {\n      return fn(self, locals, right);\n    }, {\n      constant:right.constant\n    });\n  },\n\n  ternaryFn: function(left, middle, right){\n    return extend(function(self, locals){\n      return left(self, locals) ? middle(self, locals) : right(self, locals);\n    }, {\n      constant: left.constant && middle.constant && right.constant\n    });\n  },\n\n  binaryFn: function(left, fn, right) {\n    return extend(function(self, locals) {\n      return fn(self, locals, left, right);\n    }, {\n      constant:left.constant && right.constant\n    });\n  },\n\n  statements: function() {\n    var statements = [];\n    while (true) {\n      if (this.tokens.length > 0 && !this.peek('}', ')', ';', ']'))\n        statements.push(this.filterChain());\n      if (!this.expect(';')) {\n        // optimize for the common case where there is only one statement.\n        // TODO(size): maybe we should not support multiple statements?\n        return (statements.length === 1)\n            ? statements[0]\n            : function(self, locals) {\n                var value;\n                for (var i = 0; i < statements.length; i++) {\n                  var statement = statements[i];\n                  if (statement) {\n                    value = statement(self, locals);\n                  }\n                }\n                return value;\n              };\n      }\n    }\n  },\n\n  filterChain: function() {\n    var left = this.expression();\n    var token;\n    while (true) {\n      if ((token = this.expect('|'))) {\n        left = this.binaryFn(left, token.fn, this.filter());\n      } else {\n        return left;\n      }\n    }\n  },\n\n  filter: function() {\n    var token = this.expect();\n    var fn = this.$filter(token.text);\n    var argsFn = [];\n    while (true) {\n      if ((token = this.expect(':'))) {\n        argsFn.push(this.expression());\n      } else {\n        var fnInvoke = function(self, locals, input) {\n          var args = [input];\n          for (var i = 0; i < argsFn.length; i++) {\n            args.push(argsFn[i](self, locals));\n          }\n          return fn.apply(self, args);\n        };\n        return function() {\n          return fnInvoke;\n        };\n      }\n    }\n  },\n\n  expression: function() {\n    return this.assignment();\n  },\n\n  assignment: function() {\n    var left = this.ternary();\n    var right;\n    var token;\n    if ((token = this.expect('='))) {\n      if (!left.assign) {\n        this.throwError('implies assignment but [' +\n            this.text.substring(0, token.index) + '] can not be assigned to', token);\n      }\n      right = this.ternary();\n      return function(scope, locals) {\n        return left.assign(scope, right(scope, locals), locals);\n      };\n    }\n    return left;\n  },\n\n  ternary: function() {\n    var left = this.logicalOR();\n    var middle;\n    var token;\n    if ((token = this.expect('?'))) {\n      middle = this.ternary();\n      if ((token = this.expect(':'))) {\n        return this.ternaryFn(left, middle, this.ternary());\n      } else {\n        this.throwError('expected :', token);\n      }\n    } else {\n      return left;\n    }\n  },\n\n  logicalOR: function() {\n    var left = this.logicalAND();\n    var token;\n    while (true) {\n      if ((token = this.expect('||'))) {\n        left = this.binaryFn(left, token.fn, this.logicalAND());\n      } else {\n        return left;\n      }\n    }\n  },\n\n  logicalAND: function() {\n    var left = this.equality();\n    var token;\n    if ((token = this.expect('&&'))) {\n      left = this.binaryFn(left, token.fn, this.logicalAND());\n    }\n    return left;\n  },\n\n  equality: function() {\n    var left = this.relational();\n    var token;\n    if ((token = this.expect('==','!=','===','!=='))) {\n      left = this.binaryFn(left, token.fn, this.equality());\n    }\n    return left;\n  },\n\n  relational: function() {\n    var left = this.additive();\n    var token;\n    if ((token = this.expect('<', '>', '<=', '>='))) {\n      left = this.binaryFn(left, token.fn, this.relational());\n    }\n    return left;\n  },\n\n  additive: function() {\n    var left = this.multiplicative();\n    var token;\n    while ((token = this.expect('+','-'))) {\n      left = this.binaryFn(left, token.fn, this.multiplicative());\n    }\n    return left;\n  },\n\n  multiplicative: function() {\n    var left = this.unary();\n    var token;\n    while ((token = this.expect('*','/','%'))) {\n      left = this.binaryFn(left, token.fn, this.unary());\n    }\n    return left;\n  },\n\n  unary: function() {\n    var token;\n    if (this.expect('+')) {\n      return this.primary();\n    } else if ((token = this.expect('-'))) {\n      return this.binaryFn(Parser.ZERO, token.fn, this.unary());\n    } else if ((token = this.expect('!'))) {\n      return this.unaryFn(token.fn, this.unary());\n    } else {\n      return this.primary();\n    }\n  },\n\n  fieldAccess: function(object) {\n    var parser = this;\n    var field = this.expect().text;\n    var getter = getterFn(field, this.options, this.text);\n\n    return extend(function(scope, locals, self) {\n      return getter(self || object(scope, locals));\n    }, {\n      assign: function(scope, value, locals) {\n        return setter(object(scope, locals), field, value, parser.text, parser.options);\n      }\n    });\n  },\n\n  objectIndex: function(obj) {\n    var parser = this;\n\n    var indexFn = this.expression();\n    this.consume(']');\n\n    return extend(function(self, locals) {\n      var o = obj(self, locals),\n          i = indexFn(self, locals),\n          v, p;\n\n      if (!o) return undefined;\n      v = ensureSafeObject(o[i], parser.text);\n      if (v && v.then && parser.options.unwrapPromises) {\n        p = v;\n        if (!('$$v' in v)) {\n          p.$$v = undefined;\n          p.then(function(val) { p.$$v = val; });\n        }\n        v = v.$$v;\n      }\n      return v;\n    }, {\n      assign: function(self, value, locals) {\n        var key = indexFn(self, locals);\n        // prevent overwriting of Function.constructor which would break ensureSafeObject check\n        var safe = ensureSafeObject(obj(self, locals), parser.text);\n        return safe[key] = value;\n      }\n    });\n  },\n\n  functionCall: function(fn, contextGetter) {\n    var argsFn = [];\n    if (this.peekToken().text !== ')') {\n      do {\n        argsFn.push(this.expression());\n      } while (this.expect(','));\n    }\n    this.consume(')');\n\n    var parser = this;\n\n    return function(scope, locals) {\n      var args = [];\n      var context = contextGetter ? contextGetter(scope, locals) : scope;\n\n      for (var i = 0; i < argsFn.length; i++) {\n        args.push(argsFn[i](scope, locals));\n      }\n      var fnPtr = fn(scope, locals, context) || noop;\n\n      ensureSafeObject(context, parser.text);\n      ensureSafeObject(fnPtr, parser.text);\n\n      // IE stupidity! (IE doesn't have apply for some native functions)\n      var v = fnPtr.apply\n            ? fnPtr.apply(context, args)\n            : fnPtr(args[0], args[1], args[2], args[3], args[4]);\n\n      return ensureSafeObject(v, parser.text);\n    };\n  },\n\n  // This is used with json array declaration\n  arrayDeclaration: function () {\n    var elementFns = [];\n    var allConstant = true;\n    if (this.peekToken().text !== ']') {\n      do {\n        if (this.peek(']')) {\n          // Support trailing commas per ES5.1.\n          break;\n        }\n        var elementFn = this.expression();\n        elementFns.push(elementFn);\n        if (!elementFn.constant) {\n          allConstant = false;\n        }\n      } while (this.expect(','));\n    }\n    this.consume(']');\n\n    return extend(function(self, locals) {\n      var array = [];\n      for (var i = 0; i < elementFns.length; i++) {\n        array.push(elementFns[i](self, locals));\n      }\n      return array;\n    }, {\n      literal: true,\n      constant: allConstant\n    });\n  },\n\n  object: function () {\n    var keyValues = [];\n    var allConstant = true;\n    if (this.peekToken().text !== '}') {\n      do {\n        if (this.peek('}')) {\n          // Support trailing commas per ES5.1.\n          break;\n        }\n        var token = this.expect(),\n        key = token.string || token.text;\n        this.consume(':');\n        var value = this.expression();\n        keyValues.push({key: key, value: value});\n        if (!value.constant) {\n          allConstant = false;\n        }\n      } while (this.expect(','));\n    }\n    this.consume('}');\n\n    return extend(function(self, locals) {\n      var object = {};\n      for (var i = 0; i < keyValues.length; i++) {\n        var keyValue = keyValues[i];\n        object[keyValue.key] = keyValue.value(self, locals);\n      }\n      return object;\n    }, {\n      literal: true,\n      constant: allConstant\n    });\n  }\n};\n\n\n//////////////////////////////////////////////////\n// Parser helper functions\n//////////////////////////////////////////////////\n\nfunction setter(obj, path, setValue, fullExp, options) {\n  //needed?\n  options = options || {};\n\n  var element = path.split('.'), key;\n  for (var i = 0; element.length > 1; i++) {\n    key = ensureSafeMemberName(element.shift(), fullExp);\n    var propertyObj = obj[key];\n    if (!propertyObj) {\n      propertyObj = {};\n      obj[key] = propertyObj;\n    }\n    obj = propertyObj;\n    if (obj.then && options.unwrapPromises) {\n      promiseWarning(fullExp);\n      if (!(\"$$v\" in obj)) {\n        (function(promise) {\n          promise.then(function(val) { promise.$$v = val; }); }\n        )(obj);\n      }\n      if (obj.$$v === undefined) {\n        obj.$$v = {};\n      }\n      obj = obj.$$v;\n    }\n  }\n  key = ensureSafeMemberName(element.shift(), fullExp);\n  obj[key] = setValue;\n  return setValue;\n}\n\nvar getterFnCache = {};\n\n/**\n * Implementation of the \"Black Hole\" variant from:\n * - http://jsperf.com/angularjs-parse-getter/4\n * - http://jsperf.com/path-evaluation-simplified/7\n */\nfunction cspSafeGetterFn(key0, key1, key2, key3, key4, fullExp, options) {\n  ensureSafeMemberName(key0, fullExp);\n  ensureSafeMemberName(key1, fullExp);\n  ensureSafeMemberName(key2, fullExp);\n  ensureSafeMemberName(key3, fullExp);\n  ensureSafeMemberName(key4, fullExp);\n\n  return !options.unwrapPromises\n      ? function cspSafeGetter(scope, locals) {\n          var pathVal = (locals && locals.hasOwnProperty(key0)) ? locals : scope;\n\n          if (pathVal == null) return pathVal;\n          pathVal = pathVal[key0];\n\n          if (!key1) return pathVal;\n          if (pathVal == null) return undefined;\n          pathVal = pathVal[key1];\n\n          if (!key2) return pathVal;\n          if (pathVal == null) return undefined;\n          pathVal = pathVal[key2];\n\n          if (!key3) return pathVal;\n          if (pathVal == null) return undefined;\n          pathVal = pathVal[key3];\n\n          if (!key4) return pathVal;\n          if (pathVal == null) return undefined;\n          pathVal = pathVal[key4];\n\n          return pathVal;\n        }\n      : function cspSafePromiseEnabledGetter(scope, locals) {\n          var pathVal = (locals && locals.hasOwnProperty(key0)) ? locals : scope,\n              promise;\n\n          if (pathVal == null) return pathVal;\n\n          pathVal = pathVal[key0];\n          if (pathVal && pathVal.then) {\n            promiseWarning(fullExp);\n            if (!(\"$$v\" in pathVal)) {\n              promise = pathVal;\n              promise.$$v = undefined;\n              promise.then(function(val) { promise.$$v = val; });\n            }\n            pathVal = pathVal.$$v;\n          }\n\n          if (!key1) return pathVal;\n          if (pathVal == null) return undefined;\n          pathVal = pathVal[key1];\n          if (pathVal && pathVal.then) {\n            promiseWarning(fullExp);\n            if (!(\"$$v\" in pathVal)) {\n              promise = pathVal;\n              promise.$$v = undefined;\n              promise.then(function(val) { promise.$$v = val; });\n            }\n            pathVal = pathVal.$$v;\n          }\n\n          if (!key2) return pathVal;\n          if (pathVal == null) return undefined;\n          pathVal = pathVal[key2];\n          if (pathVal && pathVal.then) {\n            promiseWarning(fullExp);\n            if (!(\"$$v\" in pathVal)) {\n              promise = pathVal;\n              promise.$$v = undefined;\n              promise.then(function(val) { promise.$$v = val; });\n            }\n            pathVal = pathVal.$$v;\n          }\n\n          if (!key3) return pathVal;\n          if (pathVal == null) return undefined;\n          pathVal = pathVal[key3];\n          if (pathVal && pathVal.then) {\n            promiseWarning(fullExp);\n            if (!(\"$$v\" in pathVal)) {\n              promise = pathVal;\n              promise.$$v = undefined;\n              promise.then(function(val) { promise.$$v = val; });\n            }\n            pathVal = pathVal.$$v;\n          }\n\n          if (!key4) return pathVal;\n          if (pathVal == null) return undefined;\n          pathVal = pathVal[key4];\n          if (pathVal && pathVal.then) {\n            promiseWarning(fullExp);\n            if (!(\"$$v\" in pathVal)) {\n              promise = pathVal;\n              promise.$$v = undefined;\n              promise.then(function(val) { promise.$$v = val; });\n            }\n            pathVal = pathVal.$$v;\n          }\n          return pathVal;\n        };\n}\n\nfunction simpleGetterFn1(key0, fullExp) {\n  ensureSafeMemberName(key0, fullExp);\n\n  return function simpleGetterFn1(scope, locals) {\n    if (scope == null) return undefined;\n    return ((locals && locals.hasOwnProperty(key0)) ? locals : scope)[key0];\n  };\n}\n\nfunction simpleGetterFn2(key0, key1, fullExp) {\n  ensureSafeMemberName(key0, fullExp);\n  ensureSafeMemberName(key1, fullExp);\n\n  return function simpleGetterFn2(scope, locals) {\n    if (scope == null) return undefined;\n    scope = ((locals && locals.hasOwnProperty(key0)) ? locals : scope)[key0];\n    return scope == null ? undefined : scope[key1];\n  };\n}\n\nfunction getterFn(path, options, fullExp) {\n  // Check whether the cache has this getter already.\n  // We can use hasOwnProperty directly on the cache because we ensure,\n  // see below, that the cache never stores a path called 'hasOwnProperty'\n  if (getterFnCache.hasOwnProperty(path)) {\n    return getterFnCache[path];\n  }\n\n  var pathKeys = path.split('.'),\n      pathKeysLength = pathKeys.length,\n      fn;\n\n  // When we have only 1 or 2 tokens, use optimized special case closures.\n  // http://jsperf.com/angularjs-parse-getter/6\n  if (!options.unwrapPromises && pathKeysLength === 1) {\n    fn = simpleGetterFn1(pathKeys[0], fullExp);\n  } else if (!options.unwrapPromises && pathKeysLength === 2) {\n    fn = simpleGetterFn2(pathKeys[0], pathKeys[1], fullExp);\n  } else if (options.csp) {\n    if (pathKeysLength < 6) {\n      fn = cspSafeGetterFn(pathKeys[0], pathKeys[1], pathKeys[2], pathKeys[3], pathKeys[4], fullExp,\n                          options);\n    } else {\n      fn = function(scope, locals) {\n        var i = 0, val;\n        do {\n          val = cspSafeGetterFn(pathKeys[i++], pathKeys[i++], pathKeys[i++], pathKeys[i++],\n                                pathKeys[i++], fullExp, options)(scope, locals);\n\n          locals = undefined; // clear after first iteration\n          scope = val;\n        } while (i < pathKeysLength);\n        return val;\n      };\n    }\n  } else {\n    var code = 'var p;\\n';\n    forEach(pathKeys, function(key, index) {\n      ensureSafeMemberName(key, fullExp);\n      code += 'if(s == null) return undefined;\\n' +\n              's='+ (index\n                      // we simply dereference 's' on any .dot notation\n                      ? 's'\n                      // but if we are first then we check locals first, and if so read it first\n                      : '((k&&k.hasOwnProperty(\"' + key + '\"))?k:s)') + '[\"' + key + '\"]' + ';\\n' +\n              (options.unwrapPromises\n                ? 'if (s && s.then) {\\n' +\n                  ' pw(\"' + fullExp.replace(/([\"\\r\\n])/g, '\\\\$1') + '\");\\n' +\n                  ' if (!(\"$$v\" in s)) {\\n' +\n                    ' p=s;\\n' +\n                    ' p.$$v = undefined;\\n' +\n                    ' p.then(function(v) {p.$$v=v;});\\n' +\n                    '}\\n' +\n                  ' s=s.$$v\\n' +\n                '}\\n'\n                : '');\n    });\n    code += 'return s;';\n\n    /* jshint -W054 */\n    var evaledFnGetter = new Function('s', 'k', 'pw', code); // s=scope, k=locals, pw=promiseWarning\n    /* jshint +W054 */\n    evaledFnGetter.toString = valueFn(code);\n    fn = options.unwrapPromises ? function(scope, locals) {\n      return evaledFnGetter(scope, locals, promiseWarning);\n    } : evaledFnGetter;\n  }\n\n  // Only cache the value if it's not going to mess up the cache object\n  // This is more performant that using Object.prototype.hasOwnProperty.call\n  if (path !== 'hasOwnProperty') {\n    getterFnCache[path] = fn;\n  }\n  return fn;\n}\n\n///////////////////////////////////\n\n/**\n * @ngdoc service\n * @name $parse\n * @kind function\n *\n * @description\n *\n * Converts Angular {@link guide/expression expression} into a function.\n *\n * ```js\n *   var getter = $parse('user.name');\n *   var setter = getter.assign;\n *   var context = {user:{name:'angular'}};\n *   var locals = {user:{name:'local'}};\n *\n *   expect(getter(context)).toEqual('angular');\n *   setter(context, 'newValue');\n *   expect(context.user.name).toEqual('newValue');\n *   expect(getter(context, locals)).toEqual('local');\n * ```\n *\n *\n * @param {string} expression String expression to compile.\n * @returns {function(context, locals)} a function which represents the compiled expression:\n *\n *    * `context` – `{object}` – an object against which any expressions embedded in the strings\n *      are evaluated against (typically a scope object).\n *    * `locals` – `{object=}` – local variables context object, useful for overriding values in\n *      `context`.\n *\n *    The returned function also has the following properties:\n *      * `literal` – `{boolean}` – whether the expression's top-level node is a JavaScript\n *        literal.\n *      * `constant` – `{boolean}` – whether the expression is made entirely of JavaScript\n *        constant literals.\n *      * `assign` – `{?function(context, value)}` – if the expression is assignable, this will be\n *        set to a function to change its value on the given context.\n *\n */\n\n\n/**\n * @ngdoc provider\n * @name $parseProvider\n * @kind function\n *\n * @description\n * `$parseProvider` can be used for configuring the default behavior of the {@link ng.$parse $parse}\n *  service.\n */\nfunction $ParseProvider() {\n  var cache = {};\n\n  var $parseOptions = {\n    csp: false,\n    unwrapPromises: false,\n    logPromiseWarnings: true\n  };\n\n\n  /**\n   * @deprecated Promise unwrapping via $parse is deprecated and will be removed in the future.\n   *\n   * @ngdoc method\n   * @name $parseProvider#unwrapPromises\n   * @description\n   *\n   * **This feature is deprecated, see deprecation notes below for more info**\n   *\n   * If set to true (default is false), $parse will unwrap promises automatically when a promise is\n   * found at any part of the expression. In other words, if set to true, the expression will always\n   * result in a non-promise value.\n   *\n   * While the promise is unresolved, it's treated as undefined, but once resolved and fulfilled,\n   * the fulfillment value is used in place of the promise while evaluating the expression.\n   *\n   * **Deprecation notice**\n   *\n   * This is a feature that didn't prove to be wildly useful or popular, primarily because of the\n   * dichotomy between data access in templates (accessed as raw values) and controller code\n   * (accessed as promises).\n   *\n   * In most code we ended up resolving promises manually in controllers anyway and thus unifying\n   * the model access there.\n   *\n   * Other downsides of automatic promise unwrapping:\n   *\n   * - when building components it's often desirable to receive the raw promises\n   * - adds complexity and slows down expression evaluation\n   * - makes expression code pre-generation unattractive due to the amount of code that needs to be\n   *   generated\n   * - makes IDE auto-completion and tool support hard\n   *\n   * **Warning Logs**\n   *\n   * If the unwrapping is enabled, Angular will log a warning about each expression that unwraps a\n   * promise (to reduce the noise, each expression is logged only once). To disable this logging use\n   * `$parseProvider.logPromiseWarnings(false)` api.\n   *\n   *\n   * @param {boolean=} value New value.\n   * @returns {boolean|self} Returns the current setting when used as getter and self if used as\n   *                         setter.\n   */\n  this.unwrapPromises = function(value) {\n    if (isDefined(value)) {\n      $parseOptions.unwrapPromises = !!value;\n      return this;\n    } else {\n      return $parseOptions.unwrapPromises;\n    }\n  };\n\n\n  /**\n   * @deprecated Promise unwrapping via $parse is deprecated and will be removed in the future.\n   *\n   * @ngdoc method\n   * @name $parseProvider#logPromiseWarnings\n   * @description\n   *\n   * Controls whether Angular should log a warning on any encounter of a promise in an expression.\n   *\n   * The default is set to `true`.\n   *\n   * This setting applies only if `$parseProvider.unwrapPromises` setting is set to true as well.\n   *\n   * @param {boolean=} value New value.\n   * @returns {boolean|self} Returns the current setting when used as getter and self if used as\n   *                         setter.\n   */\n this.logPromiseWarnings = function(value) {\n    if (isDefined(value)) {\n      $parseOptions.logPromiseWarnings = value;\n      return this;\n    } else {\n      return $parseOptions.logPromiseWarnings;\n    }\n  };\n\n\n  this.$get = ['$filter', '$sniffer', '$log', function($filter, $sniffer, $log) {\n    $parseOptions.csp = $sniffer.csp;\n\n    promiseWarning = function promiseWarningFn(fullExp) {\n      if (!$parseOptions.logPromiseWarnings || promiseWarningCache.hasOwnProperty(fullExp)) return;\n      promiseWarningCache[fullExp] = true;\n      $log.warn('[$parse] Promise found in the expression `' + fullExp + '`. ' +\n          'Automatic unwrapping of promises in Angular expressions is deprecated.');\n    };\n\n    return function(exp) {\n      var parsedExpression;\n\n      switch (typeof exp) {\n        case 'string':\n\n          if (cache.hasOwnProperty(exp)) {\n            return cache[exp];\n          }\n\n          var lexer = new Lexer($parseOptions);\n          var parser = new Parser(lexer, $filter, $parseOptions);\n          parsedExpression = parser.parse(exp);\n\n          if (exp !== 'hasOwnProperty') {\n            // Only cache the value if it's not going to mess up the cache object\n            // This is more performant that using Object.prototype.hasOwnProperty.call\n            cache[exp] = parsedExpression;\n          }\n\n          return parsedExpression;\n\n        case 'function':\n          return exp;\n\n        default:\n          return noop;\n      }\n    };\n  }];\n}\n\n/**\n * @ngdoc service\n * @name $q\n * @requires $rootScope\n *\n * @description\n * A promise/deferred implementation inspired by [Kris Kowal's Q](https://github.com/kriskowal/q).\n *\n * [The CommonJS Promise proposal](http://wiki.commonjs.org/wiki/Promises) describes a promise as an\n * interface for interacting with an object that represents the result of an action that is\n * performed asynchronously, and may or may not be finished at any given point in time.\n *\n * From the perspective of dealing with error handling, deferred and promise APIs are to\n * asynchronous programming what `try`, `catch` and `throw` keywords are to synchronous programming.\n *\n * ```js\n *   // for the purpose of this example let's assume that variables `$q`, `scope` and `okToGreet`\n *   // are available in the current lexical scope (they could have been injected or passed in).\n *\n *   function asyncGreet(name) {\n *     var deferred = $q.defer();\n *\n *     setTimeout(function() {\n *       // since this fn executes async in a future turn of the event loop, we need to wrap\n *       // our code into an $apply call so that the model changes are properly observed.\n *       scope.$apply(function() {\n *         deferred.notify('About to greet ' + name + '.');\n *\n *         if (okToGreet(name)) {\n *           deferred.resolve('Hello, ' + name + '!');\n *         } else {\n *           deferred.reject('Greeting ' + name + ' is not allowed.');\n *         }\n *       });\n *     }, 1000);\n *\n *     return deferred.promise;\n *   }\n *\n *   var promise = asyncGreet('Robin Hood');\n *   promise.then(function(greeting) {\n *     alert('Success: ' + greeting);\n *   }, function(reason) {\n *     alert('Failed: ' + reason);\n *   }, function(update) {\n *     alert('Got notification: ' + update);\n *   });\n * ```\n *\n * At first it might not be obvious why this extra complexity is worth the trouble. The payoff\n * comes in the way of guarantees that promise and deferred APIs make, see\n * https://github.com/kriskowal/uncommonjs/blob/master/promises/specification.md.\n *\n * Additionally the promise api allows for composition that is very hard to do with the\n * traditional callback ([CPS](http://en.wikipedia.org/wiki/Continuation-passing_style)) approach.\n * For more on this please see the [Q documentation](https://github.com/kriskowal/q) especially the\n * section on serial or parallel joining of promises.\n *\n *\n * # The Deferred API\n *\n * A new instance of deferred is constructed by calling `$q.defer()`.\n *\n * The purpose of the deferred object is to expose the associated Promise instance as well as APIs\n * that can be used for signaling the successful or unsuccessful completion, as well as the status\n * of the task.\n *\n * **Methods**\n *\n * - `resolve(value)` – resolves the derived promise with the `value`. If the value is a rejection\n *   constructed via `$q.reject`, the promise will be rejected instead.\n * - `reject(reason)` – rejects the derived promise with the `reason`. This is equivalent to\n *   resolving it with a rejection constructed via `$q.reject`.\n * - `notify(value)` - provides updates on the status of the promise's execution. This may be called\n *   multiple times before the promise is either resolved or rejected.\n *\n * **Properties**\n *\n * - promise – `{Promise}` – promise object associated with this deferred.\n *\n *\n * # The Promise API\n *\n * A new promise instance is created when a deferred instance is created and can be retrieved by\n * calling `deferred.promise`.\n *\n * The purpose of the promise object is to allow for interested parties to get access to the result\n * of the deferred task when it completes.\n *\n * **Methods**\n *\n * - `then(successCallback, errorCallback, notifyCallback)` – regardless of when the promise was or\n *   will be resolved or rejected, `then` calls one of the success or error callbacks asynchronously\n *   as soon as the result is available. The callbacks are called with a single argument: the result\n *   or rejection reason. Additionally, the notify callback may be called zero or more times to\n *   provide a progress indication, before the promise is resolved or rejected.\n *\n *   This method *returns a new promise* which is resolved or rejected via the return value of the\n *   `successCallback`, `errorCallback`. It also notifies via the return value of the\n *   `notifyCallback` method. The promise can not be resolved or rejected from the notifyCallback\n *   method.\n *\n * - `catch(errorCallback)` – shorthand for `promise.then(null, errorCallback)`\n *\n * - `finally(callback)` – allows you to observe either the fulfillment or rejection of a promise,\n *   but to do so without modifying the final value. This is useful to release resources or do some\n *   clean-up that needs to be done whether the promise was rejected or resolved. See the [full\n *   specification](https://github.com/kriskowal/q/wiki/API-Reference#promisefinallycallback) for\n *   more information.\n *\n *   Because `finally` is a reserved word in JavaScript and reserved keywords are not supported as\n *   property names by ES3, you'll need to invoke the method like `promise['finally'](callback)` to\n *   make your code IE8 and Android 2.x compatible.\n *\n * # Chaining promises\n *\n * Because calling the `then` method of a promise returns a new derived promise, it is easily\n * possible to create a chain of promises:\n *\n * ```js\n *   promiseB = promiseA.then(function(result) {\n *     return result + 1;\n *   });\n *\n *   // promiseB will be resolved immediately after promiseA is resolved and its value\n *   // will be the result of promiseA incremented by 1\n * ```\n *\n * It is possible to create chains of any length and since a promise can be resolved with another\n * promise (which will defer its resolution further), it is possible to pause/defer resolution of\n * the promises at any point in the chain. This makes it possible to implement powerful APIs like\n * $http's response interceptors.\n *\n *\n * # Differences between Kris Kowal's Q and $q\n *\n *  There are two main differences:\n *\n * - $q is integrated with the {@link ng.$rootScope.Scope} Scope model observation\n *   mechanism in angular, which means faster propagation of resolution or rejection into your\n *   models and avoiding unnecessary browser repaints, which would result in flickering UI.\n * - Q has many more features than $q, but that comes at a cost of bytes. $q is tiny, but contains\n *   all the important functionality needed for common async tasks.\n *\n *  # Testing\n *\n *  ```js\n *    it('should simulate promise', inject(function($q, $rootScope) {\n *      var deferred = $q.defer();\n *      var promise = deferred.promise;\n *      var resolvedValue;\n *\n *      promise.then(function(value) { resolvedValue = value; });\n *      expect(resolvedValue).toBeUndefined();\n *\n *      // Simulate resolving of promise\n *      deferred.resolve(123);\n *      // Note that the 'then' function does not get called synchronously.\n *      // This is because we want the promise API to always be async, whether or not\n *      // it got called synchronously or asynchronously.\n *      expect(resolvedValue).toBeUndefined();\n *\n *      // Propagate promise resolution to 'then' functions using $apply().\n *      $rootScope.$apply();\n *      expect(resolvedValue).toEqual(123);\n *    }));\n *  ```\n */\nfunction $QProvider() {\n\n  this.$get = ['$rootScope', '$exceptionHandler', function($rootScope, $exceptionHandler) {\n    return qFactory(function(callback) {\n      $rootScope.$evalAsync(callback);\n    }, $exceptionHandler);\n  }];\n}\n\n\n/**\n * Constructs a promise manager.\n *\n * @param {function(Function)} nextTick Function for executing functions in the next turn.\n * @param {function(...*)} exceptionHandler Function into which unexpected exceptions are passed for\n *     debugging purposes.\n * @returns {object} Promise manager.\n */\nfunction qFactory(nextTick, exceptionHandler) {\n\n  /**\n   * @ngdoc method\n   * @name $q#defer\n   * @kind function\n   *\n   * @description\n   * Creates a `Deferred` object which represents a task which will finish in the future.\n   *\n   * @returns {Deferred} Returns a new instance of deferred.\n   */\n  var defer = function() {\n    var pending = [],\n        value, deferred;\n\n    deferred = {\n\n      resolve: function(val) {\n        if (pending) {\n          var callbacks = pending;\n          pending = undefined;\n          value = ref(val);\n\n          if (callbacks.length) {\n            nextTick(function() {\n              var callback;\n              for (var i = 0, ii = callbacks.length; i < ii; i++) {\n                callback = callbacks[i];\n                value.then(callback[0], callback[1], callback[2]);\n              }\n            });\n          }\n        }\n      },\n\n\n      reject: function(reason) {\n        deferred.resolve(createInternalRejectedPromise(reason));\n      },\n\n\n      notify: function(progress) {\n        if (pending) {\n          var callbacks = pending;\n\n          if (pending.length) {\n            nextTick(function() {\n              var callback;\n              for (var i = 0, ii = callbacks.length; i < ii; i++) {\n                callback = callbacks[i];\n                callback[2](progress);\n              }\n            });\n          }\n        }\n      },\n\n\n      promise: {\n        then: function(callback, errback, progressback) {\n          var result = defer();\n\n          var wrappedCallback = function(value) {\n            try {\n              result.resolve((isFunction(callback) ? callback : defaultCallback)(value));\n            } catch(e) {\n              result.reject(e);\n              exceptionHandler(e);\n            }\n          };\n\n          var wrappedErrback = function(reason) {\n            try {\n              result.resolve((isFunction(errback) ? errback : defaultErrback)(reason));\n            } catch(e) {\n              result.reject(e);\n              exceptionHandler(e);\n            }\n          };\n\n          var wrappedProgressback = function(progress) {\n            try {\n              result.notify((isFunction(progressback) ? progressback : defaultCallback)(progress));\n            } catch(e) {\n              exceptionHandler(e);\n            }\n          };\n\n          if (pending) {\n            pending.push([wrappedCallback, wrappedErrback, wrappedProgressback]);\n          } else {\n            value.then(wrappedCallback, wrappedErrback, wrappedProgressback);\n          }\n\n          return result.promise;\n        },\n\n        \"catch\": function(callback) {\n          return this.then(null, callback);\n        },\n\n        \"finally\": function(callback) {\n\n          function makePromise(value, resolved) {\n            var result = defer();\n            if (resolved) {\n              result.resolve(value);\n            } else {\n              result.reject(value);\n            }\n            return result.promise;\n          }\n\n          function handleCallback(value, isResolved) {\n            var callbackOutput = null;\n            try {\n              callbackOutput = (callback ||defaultCallback)();\n            } catch(e) {\n              return makePromise(e, false);\n            }\n            if (callbackOutput && isFunction(callbackOutput.then)) {\n              return callbackOutput.then(function() {\n                return makePromise(value, isResolved);\n              }, function(error) {\n                return makePromise(error, false);\n              });\n            } else {\n              return makePromise(value, isResolved);\n            }\n          }\n\n          return this.then(function(value) {\n            return handleCallback(value, true);\n          }, function(error) {\n            return handleCallback(error, false);\n          });\n        }\n      }\n    };\n\n    return deferred;\n  };\n\n\n  var ref = function(value) {\n    if (value && isFunction(value.then)) return value;\n    return {\n      then: function(callback) {\n        var result = defer();\n        nextTick(function() {\n          result.resolve(callback(value));\n        });\n        return result.promise;\n      }\n    };\n  };\n\n\n  /**\n   * @ngdoc method\n   * @name $q#reject\n   * @kind function\n   *\n   * @description\n   * Creates a promise that is resolved as rejected with the specified `reason`. This api should be\n   * used to forward rejection in a chain of promises. If you are dealing with the last promise in\n   * a promise chain, you don't need to worry about it.\n   *\n   * When comparing deferreds/promises to the familiar behavior of try/catch/throw, think of\n   * `reject` as the `throw` keyword in JavaScript. This also means that if you \"catch\" an error via\n   * a promise error callback and you want to forward the error to the promise derived from the\n   * current promise, you have to \"rethrow\" the error by returning a rejection constructed via\n   * `reject`.\n   *\n   * ```js\n   *   promiseB = promiseA.then(function(result) {\n   *     // success: do something and resolve promiseB\n   *     //          with the old or a new result\n   *     return result;\n   *   }, function(reason) {\n   *     // error: handle the error if possible and\n   *     //        resolve promiseB with newPromiseOrValue,\n   *     //        otherwise forward the rejection to promiseB\n   *     if (canHandle(reason)) {\n   *      // handle the error and recover\n   *      return newPromiseOrValue;\n   *     }\n   *     return $q.reject(reason);\n   *   });\n   * ```\n   *\n   * @param {*} reason Constant, message, exception or an object representing the rejection reason.\n   * @returns {Promise} Returns a promise that was already resolved as rejected with the `reason`.\n   */\n  var reject = function(reason) {\n    var result = defer();\n    result.reject(reason);\n    return result.promise;\n  };\n\n  var createInternalRejectedPromise = function(reason) {\n    return {\n      then: function(callback, errback) {\n        var result = defer();\n        nextTick(function() {\n          try {\n            result.resolve((isFunction(errback) ? errback : defaultErrback)(reason));\n          } catch(e) {\n            result.reject(e);\n            exceptionHandler(e);\n          }\n        });\n        return result.promise;\n      }\n    };\n  };\n\n\n  /**\n   * @ngdoc method\n   * @name $q#when\n   * @kind function\n   *\n   * @description\n   * Wraps an object that might be a value or a (3rd party) then-able promise into a $q promise.\n   * This is useful when you are dealing with an object that might or might not be a promise, or if\n   * the promise comes from a source that can't be trusted.\n   *\n   * @param {*} value Value or a promise\n   * @returns {Promise} Returns a promise of the passed value or promise\n   */\n  var when = function(value, callback, errback, progressback) {\n    var result = defer(),\n        done;\n\n    var wrappedCallback = function(value) {\n      try {\n        return (isFunction(callback) ? callback : defaultCallback)(value);\n      } catch (e) {\n        exceptionHandler(e);\n        return reject(e);\n      }\n    };\n\n    var wrappedErrback = function(reason) {\n      try {\n        return (isFunction(errback) ? errback : defaultErrback)(reason);\n      } catch (e) {\n        exceptionHandler(e);\n        return reject(e);\n      }\n    };\n\n    var wrappedProgressback = function(progress) {\n      try {\n        return (isFunction(progressback) ? progressback : defaultCallback)(progress);\n      } catch (e) {\n        exceptionHandler(e);\n      }\n    };\n\n    nextTick(function() {\n      ref(value).then(function(value) {\n        if (done) return;\n        done = true;\n        result.resolve(ref(value).then(wrappedCallback, wrappedErrback, wrappedProgressback));\n      }, function(reason) {\n        if (done) return;\n        done = true;\n        result.resolve(wrappedErrback(reason));\n      }, function(progress) {\n        if (done) return;\n        result.notify(wrappedProgressback(progress));\n      });\n    });\n\n    return result.promise;\n  };\n\n\n  function defaultCallback(value) {\n    return value;\n  }\n\n\n  function defaultErrback(reason) {\n    return reject(reason);\n  }\n\n\n  /**\n   * @ngdoc method\n   * @name $q#all\n   * @kind function\n   *\n   * @description\n   * Combines multiple promises into a single promise that is resolved when all of the input\n   * promises are resolved.\n   *\n   * @param {Array.<Promise>|Object.<Promise>} promises An array or hash of promises.\n   * @returns {Promise} Returns a single promise that will be resolved with an array/hash of values,\n   *   each value corresponding to the promise at the same index/key in the `promises` array/hash.\n   *   If any of the promises is resolved with a rejection, this resulting promise will be rejected\n   *   with the same rejection value.\n   */\n  function all(promises) {\n    var deferred = defer(),\n        counter = 0,\n        results = isArray(promises) ? [] : {};\n\n    forEach(promises, function(promise, key) {\n      counter++;\n      ref(promise).then(function(value) {\n        if (results.hasOwnProperty(key)) return;\n        results[key] = value;\n        if (!(--counter)) deferred.resolve(results);\n      }, function(reason) {\n        if (results.hasOwnProperty(key)) return;\n        deferred.reject(reason);\n      });\n    });\n\n    if (counter === 0) {\n      deferred.resolve(results);\n    }\n\n    return deferred.promise;\n  }\n\n  return {\n    defer: defer,\n    reject: reject,\n    when: when,\n    all: all\n  };\n}\n\nfunction $$RAFProvider(){ //rAF\n  this.$get = ['$window', '$timeout', function($window, $timeout) {\n    var requestAnimationFrame = $window.requestAnimationFrame ||\n                                $window.webkitRequestAnimationFrame ||\n                                $window.mozRequestAnimationFrame;\n\n    var cancelAnimationFrame = $window.cancelAnimationFrame ||\n                               $window.webkitCancelAnimationFrame ||\n                               $window.mozCancelAnimationFrame ||\n                               $window.webkitCancelRequestAnimationFrame;\n\n    var rafSupported = !!requestAnimationFrame;\n    var raf = rafSupported\n      ? function(fn) {\n          var id = requestAnimationFrame(fn);\n          return function() {\n            cancelAnimationFrame(id);\n          };\n        }\n      : function(fn) {\n          var timer = $timeout(fn, 16.66, false); // 1000 / 60 = 16.666\n          return function() {\n            $timeout.cancel(timer);\n          };\n        };\n\n    raf.supported = rafSupported;\n\n    return raf;\n  }];\n}\n\n/**\n * DESIGN NOTES\n *\n * The design decisions behind the scope are heavily favored for speed and memory consumption.\n *\n * The typical use of scope is to watch the expressions, which most of the time return the same\n * value as last time so we optimize the operation.\n *\n * Closures construction is expensive in terms of speed as well as memory:\n *   - No closures, instead use prototypical inheritance for API\n *   - Internal state needs to be stored on scope directly, which means that private state is\n *     exposed as $$____ properties\n *\n * Loop operations are optimized by using while(count--) { ... }\n *   - this means that in order to keep the same order of execution as addition we have to add\n *     items to the array at the beginning (unshift) instead of at the end (push)\n *\n * Child scopes are created and removed often\n *   - Using an array would be slow since inserts in middle are expensive so we use linked list\n *\n * There are few watches then a lot of observers. This is why you don't want the observer to be\n * implemented in the same way as watch. Watch requires return of initialization function which\n * are expensive to construct.\n */\n\n\n/**\n * @ngdoc provider\n * @name $rootScopeProvider\n * @description\n *\n * Provider for the $rootScope service.\n */\n\n/**\n * @ngdoc method\n * @name $rootScopeProvider#digestTtl\n * @description\n *\n * Sets the number of `$digest` iterations the scope should attempt to execute before giving up and\n * assuming that the model is unstable.\n *\n * The current default is 10 iterations.\n *\n * In complex applications it's possible that the dependencies between `$watch`s will result in\n * several digest iterations. However if an application needs more than the default 10 digest\n * iterations for its model to stabilize then you should investigate what is causing the model to\n * continuously change during the digest.\n *\n * Increasing the TTL could have performance implications, so you should not change it without\n * proper justification.\n *\n * @param {number} limit The number of digest iterations.\n */\n\n\n/**\n * @ngdoc service\n * @name $rootScope\n * @description\n *\n * Every application has a single root {@link ng.$rootScope.Scope scope}.\n * All other scopes are descendant scopes of the root scope. Scopes provide separation\n * between the model and the view, via a mechanism for watching the model for changes.\n * They also provide an event emission/broadcast and subscription facility. See the\n * {@link guide/scope developer guide on scopes}.\n */\nfunction $RootScopeProvider(){\n  var TTL = 10;\n  var $rootScopeMinErr = minErr('$rootScope');\n  var lastDirtyWatch = null;\n\n  this.digestTtl = function(value) {\n    if (arguments.length) {\n      TTL = value;\n    }\n    return TTL;\n  };\n\n  this.$get = ['$injector', '$exceptionHandler', '$parse', '$browser',\n      function( $injector,   $exceptionHandler,   $parse,   $browser) {\n\n    /**\n     * @ngdoc type\n     * @name $rootScope.Scope\n     *\n     * @description\n     * A root scope can be retrieved using the {@link ng.$rootScope $rootScope} key from the\n     * {@link auto.$injector $injector}. Child scopes are created using the\n     * {@link ng.$rootScope.Scope#$new $new()} method. (Most scopes are created automatically when\n     * compiled HTML template is executed.)\n     *\n     * Here is a simple scope snippet to show how you can interact with the scope.\n     * ```html\n     * <file src=\"./test/ng/rootScopeSpec.js\" tag=\"docs1\" />\n     * ```\n     *\n     * # Inheritance\n     * A scope can inherit from a parent scope, as in this example:\n     * ```js\n         var parent = $rootScope;\n         var child = parent.$new();\n\n         parent.salutation = \"Hello\";\n         child.name = \"World\";\n         expect(child.salutation).toEqual('Hello');\n\n         child.salutation = \"Welcome\";\n         expect(child.salutation).toEqual('Welcome');\n         expect(parent.salutation).toEqual('Hello');\n     * ```\n     *\n     *\n     * @param {Object.<string, function()>=} providers Map of service factory which need to be\n     *                                       provided for the current scope. Defaults to {@link ng}.\n     * @param {Object.<string, *>=} instanceCache Provides pre-instantiated services which should\n     *                              append/override services provided by `providers`. This is handy\n     *                              when unit-testing and having the need to override a default\n     *                              service.\n     * @returns {Object} Newly created scope.\n     *\n     */\n    function Scope() {\n      this.$id = nextUid();\n      this.$$phase = this.$parent = this.$$watchers =\n                     this.$$nextSibling = this.$$prevSibling =\n                     this.$$childHead = this.$$childTail = null;\n      this['this'] = this.$root =  this;\n      this.$$destroyed = false;\n      this.$$asyncQueue = [];\n      this.$$postDigestQueue = [];\n      this.$$listeners = {};\n      this.$$listenerCount = {};\n      this.$$isolateBindings = {};\n    }\n\n    /**\n     * @ngdoc property\n     * @name $rootScope.Scope#$id\n     * @returns {number} Unique scope ID (monotonically increasing alphanumeric sequence) useful for\n     *   debugging.\n     */\n\n\n    Scope.prototype = {\n      constructor: Scope,\n      /**\n       * @ngdoc method\n       * @name $rootScope.Scope#$new\n       * @kind function\n       *\n       * @description\n       * Creates a new child {@link ng.$rootScope.Scope scope}.\n       *\n       * The parent scope will propagate the {@link ng.$rootScope.Scope#$digest $digest()} and\n       * {@link ng.$rootScope.Scope#$digest $digest()} events. The scope can be removed from the\n       * scope hierarchy using {@link ng.$rootScope.Scope#$destroy $destroy()}.\n       *\n       * {@link ng.$rootScope.Scope#$destroy $destroy()} must be called on a scope when it is\n       * desired for the scope and its child scopes to be permanently detached from the parent and\n       * thus stop participating in model change detection and listener notification by invoking.\n       *\n       * @param {boolean} isolate If true, then the scope does not prototypically inherit from the\n       *         parent scope. The scope is isolated, as it can not see parent scope properties.\n       *         When creating widgets, it is useful for the widget to not accidentally read parent\n       *         state.\n       *\n       * @returns {Object} The newly created child scope.\n       *\n       */\n      $new: function(isolate) {\n        var ChildScope,\n            child;\n\n        if (isolate) {\n          child = new Scope();\n          child.$root = this.$root;\n          // ensure that there is just one async queue per $rootScope and its children\n          child.$$asyncQueue = this.$$asyncQueue;\n          child.$$postDigestQueue = this.$$postDigestQueue;\n        } else {\n          // Only create a child scope class if somebody asks for one,\n          // but cache it to allow the VM to optimize lookups.\n          if (!this.$$childScopeClass) {\n            this.$$childScopeClass = function() {\n              this.$$watchers = this.$$nextSibling =\n                  this.$$childHead = this.$$childTail = null;\n              this.$$listeners = {};\n              this.$$listenerCount = {};\n              this.$id = nextUid();\n              this.$$childScopeClass = null;\n            };\n            this.$$childScopeClass.prototype = this;\n          }\n          child = new this.$$childScopeClass();\n        }\n        child['this'] = child;\n        child.$parent = this;\n        child.$$prevSibling = this.$$childTail;\n        if (this.$$childHead) {\n          this.$$childTail.$$nextSibling = child;\n          this.$$childTail = child;\n        } else {\n          this.$$childHead = this.$$childTail = child;\n        }\n        return child;\n      },\n\n      /**\n       * @ngdoc method\n       * @name $rootScope.Scope#$watch\n       * @kind function\n       *\n       * @description\n       * Registers a `listener` callback to be executed whenever the `watchExpression` changes.\n       *\n       * - The `watchExpression` is called on every call to {@link ng.$rootScope.Scope#$digest\n       *   $digest()} and should return the value that will be watched. (Since\n       *   {@link ng.$rootScope.Scope#$digest $digest()} reruns when it detects changes the\n       *   `watchExpression` can execute multiple times per\n       *   {@link ng.$rootScope.Scope#$digest $digest()} and should be idempotent.)\n       * - The `listener` is called only when the value from the current `watchExpression` and the\n       *   previous call to `watchExpression` are not equal (with the exception of the initial run,\n       *   see below). Inequality is determined according to reference inequality,\n       *   [strict comparison](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Comparison_Operators)\n       *    via the `!==` Javascript operator, unless `objectEquality == true`\n       *   (see next point)\n       * - When `objectEquality == true`, inequality of the `watchExpression` is determined\n       *   according to the {@link angular.equals} function. To save the value of the object for\n       *   later comparison, the {@link angular.copy} function is used. This therefore means that\n       *   watching complex objects will have adverse memory and performance implications.\n       * - The watch `listener` may change the model, which may trigger other `listener`s to fire.\n       *   This is achieved by rerunning the watchers until no changes are detected. The rerun\n       *   iteration limit is 10 to prevent an infinite loop deadlock.\n       *\n       *\n       * If you want to be notified whenever {@link ng.$rootScope.Scope#$digest $digest} is called,\n       * you can register a `watchExpression` function with no `listener`. (Since `watchExpression`\n       * can execute multiple times per {@link ng.$rootScope.Scope#$digest $digest} cycle when a\n       * change is detected, be prepared for multiple calls to your listener.)\n       *\n       * After a watcher is registered with the scope, the `listener` fn is called asynchronously\n       * (via {@link ng.$rootScope.Scope#$evalAsync $evalAsync}) to initialize the\n       * watcher. In rare cases, this is undesirable because the listener is called when the result\n       * of `watchExpression` didn't change. To detect this scenario within the `listener` fn, you\n       * can compare the `newVal` and `oldVal`. If these two values are identical (`===`) then the\n       * listener was called due to initialization.\n       *\n       * The example below contains an illustration of using a function as your $watch listener\n       *\n       *\n       * # Example\n       * ```js\n           // let's assume that scope was dependency injected as the $rootScope\n           var scope = $rootScope;\n           scope.name = 'misko';\n           scope.counter = 0;\n\n           expect(scope.counter).toEqual(0);\n           scope.$watch('name', function(newValue, oldValue) {\n             scope.counter = scope.counter + 1;\n           });\n           expect(scope.counter).toEqual(0);\n\n           scope.$digest();\n           // the listener is always called during the first $digest loop after it was registered\n           expect(scope.counter).toEqual(1);\n\n           scope.$digest();\n           // but now it will not be called unless the value changes\n           expect(scope.counter).toEqual(1);\n\n           scope.name = 'adam';\n           scope.$digest();\n           expect(scope.counter).toEqual(2);\n\n\n\n           // Using a listener function\n           var food;\n           scope.foodCounter = 0;\n           expect(scope.foodCounter).toEqual(0);\n           scope.$watch(\n             // This is the listener function\n             function() { return food; },\n             // This is the change handler\n             function(newValue, oldValue) {\n               if ( newValue !== oldValue ) {\n                 // Only increment the counter if the value changed\n                 scope.foodCounter = scope.foodCounter + 1;\n               }\n             }\n           );\n           // No digest has been run so the counter will be zero\n           expect(scope.foodCounter).toEqual(0);\n\n           // Run the digest but since food has not changed count will still be zero\n           scope.$digest();\n           expect(scope.foodCounter).toEqual(0);\n\n           // Update food and run digest.  Now the counter will increment\n           food = 'cheeseburger';\n           scope.$digest();\n           expect(scope.foodCounter).toEqual(1);\n\n       * ```\n       *\n       *\n       *\n       * @param {(function()|string)} watchExpression Expression that is evaluated on each\n       *    {@link ng.$rootScope.Scope#$digest $digest} cycle. A change in the return value triggers\n       *    a call to the `listener`.\n       *\n       *    - `string`: Evaluated as {@link guide/expression expression}\n       *    - `function(scope)`: called with current `scope` as a parameter.\n       * @param {(function()|string)=} listener Callback called whenever the return value of\n       *   the `watchExpression` changes.\n       *\n       *    - `string`: Evaluated as {@link guide/expression expression}\n       *    - `function(newValue, oldValue, scope)`: called with current and previous values as\n       *      parameters.\n       *\n       * @param {boolean=} objectEquality Compare for object equality using {@link angular.equals} instead of\n       *     comparing for reference equality.\n       * @returns {function()} Returns a deregistration function for this listener.\n       */\n      $watch: function(watchExp, listener, objectEquality) {\n        var scope = this,\n            get = compileToFn(watchExp, 'watch'),\n            array = scope.$$watchers,\n            watcher = {\n              fn: listener,\n              last: initWatchVal,\n              get: get,\n              exp: watchExp,\n              eq: !!objectEquality\n            };\n\n        lastDirtyWatch = null;\n\n        // in the case user pass string, we need to compile it, do we really need this ?\n        if (!isFunction(listener)) {\n          var listenFn = compileToFn(listener || noop, 'listener');\n          watcher.fn = function(newVal, oldVal, scope) {listenFn(scope);};\n        }\n\n        if (typeof watchExp == 'string' && get.constant) {\n          var originalFn = watcher.fn;\n          watcher.fn = function(newVal, oldVal, scope) {\n            originalFn.call(this, newVal, oldVal, scope);\n            arrayRemove(array, watcher);\n          };\n        }\n\n        if (!array) {\n          array = scope.$$watchers = [];\n        }\n        // we use unshift since we use a while loop in $digest for speed.\n        // the while loop reads in reverse order.\n        array.unshift(watcher);\n\n        return function deregisterWatch() {\n          arrayRemove(array, watcher);\n          lastDirtyWatch = null;\n        };\n      },\n\n\n      /**\n       * @ngdoc method\n       * @name $rootScope.Scope#$watchCollection\n       * @kind function\n       *\n       * @description\n       * Shallow watches the properties of an object and fires whenever any of the properties change\n       * (for arrays, this implies watching the array items; for object maps, this implies watching\n       * the properties). If a change is detected, the `listener` callback is fired.\n       *\n       * - The `obj` collection is observed via standard $watch operation and is examined on every\n       *   call to $digest() to see if any items have been added, removed, or moved.\n       * - The `listener` is called whenever anything within the `obj` has changed. Examples include\n       *   adding, removing, and moving items belonging to an object or array.\n       *\n       *\n       * # Example\n       * ```js\n          $scope.names = ['igor', 'matias', 'misko', 'james'];\n          $scope.dataCount = 4;\n\n          $scope.$watchCollection('names', function(newNames, oldNames) {\n            $scope.dataCount = newNames.length;\n          });\n\n          expect($scope.dataCount).toEqual(4);\n          $scope.$digest();\n\n          //still at 4 ... no changes\n          expect($scope.dataCount).toEqual(4);\n\n          $scope.names.pop();\n          $scope.$digest();\n\n          //now there's been a change\n          expect($scope.dataCount).toEqual(3);\n       * ```\n       *\n       *\n       * @param {string|function(scope)} obj Evaluated as {@link guide/expression expression}. The\n       *    expression value should evaluate to an object or an array which is observed on each\n       *    {@link ng.$rootScope.Scope#$digest $digest} cycle. Any shallow change within the\n       *    collection will trigger a call to the `listener`.\n       *\n       * @param {function(newCollection, oldCollection, scope)} listener a callback function called\n       *    when a change is detected.\n       *    - The `newCollection` object is the newly modified data obtained from the `obj` expression\n       *    - The `oldCollection` object is a copy of the former collection data.\n       *      Due to performance considerations, the`oldCollection` value is computed only if the\n       *      `listener` function declares two or more arguments.\n       *    - The `scope` argument refers to the current scope.\n       *\n       * @returns {function()} Returns a de-registration function for this listener. When the\n       *    de-registration function is executed, the internal watch operation is terminated.\n       */\n      $watchCollection: function(obj, listener) {\n        var self = this;\n        // the current value, updated on each dirty-check run\n        var newValue;\n        // a shallow copy of the newValue from the last dirty-check run,\n        // updated to match newValue during dirty-check run\n        var oldValue;\n        // a shallow copy of the newValue from when the last change happened\n        var veryOldValue;\n        // only track veryOldValue if the listener is asking for it\n        var trackVeryOldValue = (listener.length > 1);\n        var changeDetected = 0;\n        var objGetter = $parse(obj);\n        var internalArray = [];\n        var internalObject = {};\n        var initRun = true;\n        var oldLength = 0;\n\n        function $watchCollectionWatch() {\n          newValue = objGetter(self);\n          var newLength, key;\n\n          if (!isObject(newValue)) { // if primitive\n            if (oldValue !== newValue) {\n              oldValue = newValue;\n              changeDetected++;\n            }\n          } else if (isArrayLike(newValue)) {\n            if (oldValue !== internalArray) {\n              // we are transitioning from something which was not an array into array.\n              oldValue = internalArray;\n              oldLength = oldValue.length = 0;\n              changeDetected++;\n            }\n\n            newLength = newValue.length;\n\n            if (oldLength !== newLength) {\n              // if lengths do not match we need to trigger change notification\n              changeDetected++;\n              oldValue.length = oldLength = newLength;\n            }\n            // copy the items to oldValue and look for changes.\n            for (var i = 0; i < newLength; i++) {\n              var bothNaN = (oldValue[i] !== oldValue[i]) &&\n                  (newValue[i] !== newValue[i]);\n              if (!bothNaN && (oldValue[i] !== newValue[i])) {\n                changeDetected++;\n                oldValue[i] = newValue[i];\n              }\n            }\n          } else {\n            if (oldValue !== internalObject) {\n              // we are transitioning from something which was not an object into object.\n              oldValue = internalObject = {};\n              oldLength = 0;\n              changeDetected++;\n            }\n            // copy the items to oldValue and look for changes.\n            newLength = 0;\n            for (key in newValue) {\n              if (newValue.hasOwnProperty(key)) {\n                newLength++;\n                if (oldValue.hasOwnProperty(key)) {\n                  if (oldValue[key] !== newValue[key]) {\n                    changeDetected++;\n                    oldValue[key] = newValue[key];\n                  }\n                } else {\n                  oldLength++;\n                  oldValue[key] = newValue[key];\n                  changeDetected++;\n                }\n              }\n            }\n            if (oldLength > newLength) {\n              // we used to have more keys, need to find them and destroy them.\n              changeDetected++;\n              for(key in oldValue) {\n                if (oldValue.hasOwnProperty(key) && !newValue.hasOwnProperty(key)) {\n                  oldLength--;\n                  delete oldValue[key];\n                }\n              }\n            }\n          }\n          return changeDetected;\n        }\n\n        function $watchCollectionAction() {\n          if (initRun) {\n            initRun = false;\n            listener(newValue, newValue, self);\n          } else {\n            listener(newValue, veryOldValue, self);\n          }\n\n          // make a copy for the next time a collection is changed\n          if (trackVeryOldValue) {\n            if (!isObject(newValue)) {\n              //primitive\n              veryOldValue = newValue;\n            } else if (isArrayLike(newValue)) {\n              veryOldValue = new Array(newValue.length);\n              for (var i = 0; i < newValue.length; i++) {\n                veryOldValue[i] = newValue[i];\n              }\n            } else { // if object\n              veryOldValue = {};\n              for (var key in newValue) {\n                if (hasOwnProperty.call(newValue, key)) {\n                  veryOldValue[key] = newValue[key];\n                }\n              }\n            }\n          }\n        }\n\n        return this.$watch($watchCollectionWatch, $watchCollectionAction);\n      },\n\n      /**\n       * @ngdoc method\n       * @name $rootScope.Scope#$digest\n       * @kind function\n       *\n       * @description\n       * Processes all of the {@link ng.$rootScope.Scope#$watch watchers} of the current scope and\n       * its children. Because a {@link ng.$rootScope.Scope#$watch watcher}'s listener can change\n       * the model, the `$digest()` keeps calling the {@link ng.$rootScope.Scope#$watch watchers}\n       * until no more listeners are firing. This means that it is possible to get into an infinite\n       * loop. This function will throw `'Maximum iteration limit exceeded.'` if the number of\n       * iterations exceeds 10.\n       *\n       * Usually, you don't call `$digest()` directly in\n       * {@link ng.directive:ngController controllers} or in\n       * {@link ng.$compileProvider#directive directives}.\n       * Instead, you should call {@link ng.$rootScope.Scope#$apply $apply()} (typically from within\n       * a {@link ng.$compileProvider#directive directives}), which will force a `$digest()`.\n       *\n       * If you want to be notified whenever `$digest()` is called,\n       * you can register a `watchExpression` function with\n       * {@link ng.$rootScope.Scope#$watch $watch()} with no `listener`.\n       *\n       * In unit tests, you may need to call `$digest()` to simulate the scope life cycle.\n       *\n       * # Example\n       * ```js\n           var scope = ...;\n           scope.name = 'misko';\n           scope.counter = 0;\n\n           expect(scope.counter).toEqual(0);\n           scope.$watch('name', function(newValue, oldValue) {\n             scope.counter = scope.counter + 1;\n           });\n           expect(scope.counter).toEqual(0);\n\n           scope.$digest();\n           // the listener is always called during the first $digest loop after it was registered\n           expect(scope.counter).toEqual(1);\n\n           scope.$digest();\n           // but now it will not be called unless the value changes\n           expect(scope.counter).toEqual(1);\n\n           scope.name = 'adam';\n           scope.$digest();\n           expect(scope.counter).toEqual(2);\n       * ```\n       *\n       */\n      $digest: function() {\n        var watch, value, last,\n            watchers,\n            asyncQueue = this.$$asyncQueue,\n            postDigestQueue = this.$$postDigestQueue,\n            length,\n            dirty, ttl = TTL,\n            next, current, target = this,\n            watchLog = [],\n            logIdx, logMsg, asyncTask;\n\n        beginPhase('$digest');\n\n        lastDirtyWatch = null;\n\n        do { // \"while dirty\" loop\n          dirty = false;\n          current = target;\n\n          while(asyncQueue.length) {\n            try {\n              asyncTask = asyncQueue.shift();\n              asyncTask.scope.$eval(asyncTask.expression);\n            } catch (e) {\n              clearPhase();\n              $exceptionHandler(e);\n            }\n            lastDirtyWatch = null;\n          }\n\n          traverseScopesLoop:\n          do { // \"traverse the scopes\" loop\n            if ((watchers = current.$$watchers)) {\n              // process our watches\n              length = watchers.length;\n              while (length--) {\n                try {\n                  watch = watchers[length];\n                  // Most common watches are on primitives, in which case we can short\n                  // circuit it with === operator, only when === fails do we use .equals\n                  if (watch) {\n                    if ((value = watch.get(current)) !== (last = watch.last) &&\n                        !(watch.eq\n                            ? equals(value, last)\n                            : (typeof value == 'number' && typeof last == 'number'\n                               && isNaN(value) && isNaN(last)))) {\n                      dirty = true;\n                      lastDirtyWatch = watch;\n                      watch.last = watch.eq ? copy(value, null) : value;\n                      watch.fn(value, ((last === initWatchVal) ? value : last), current);\n                      if (ttl < 5) {\n                        logIdx = 4 - ttl;\n                        if (!watchLog[logIdx]) watchLog[logIdx] = [];\n                        logMsg = (isFunction(watch.exp))\n                            ? 'fn: ' + (watch.exp.name || watch.exp.toString())\n                            : watch.exp;\n                        logMsg += '; newVal: ' + toJson(value) + '; oldVal: ' + toJson(last);\n                        watchLog[logIdx].push(logMsg);\n                      }\n                    } else if (watch === lastDirtyWatch) {\n                      // If the most recently dirty watcher is now clean, short circuit since the remaining watchers\n                      // have already been tested.\n                      dirty = false;\n                      break traverseScopesLoop;\n                    }\n                  }\n                } catch (e) {\n                  clearPhase();\n                  $exceptionHandler(e);\n                }\n              }\n            }\n\n            // Insanity Warning: scope depth-first traversal\n            // yes, this code is a bit crazy, but it works and we have tests to prove it!\n            // this piece should be kept in sync with the traversal in $broadcast\n            if (!(next = (current.$$childHead ||\n                (current !== target && current.$$nextSibling)))) {\n              while(current !== target && !(next = current.$$nextSibling)) {\n                current = current.$parent;\n              }\n            }\n          } while ((current = next));\n\n          // `break traverseScopesLoop;` takes us to here\n\n          if((dirty || asyncQueue.length) && !(ttl--)) {\n            clearPhase();\n            throw $rootScopeMinErr('infdig',\n                '{0} $digest() iterations reached. Aborting!\\n' +\n                'Watchers fired in the last 5 iterations: {1}',\n                TTL, toJson(watchLog));\n          }\n\n        } while (dirty || asyncQueue.length);\n\n        clearPhase();\n\n        while(postDigestQueue.length) {\n          try {\n            postDigestQueue.shift()();\n          } catch (e) {\n            $exceptionHandler(e);\n          }\n        }\n      },\n\n\n      /**\n       * @ngdoc event\n       * @name $rootScope.Scope#$destroy\n       * @eventType broadcast on scope being destroyed\n       *\n       * @description\n       * Broadcasted when a scope and its children are being destroyed.\n       *\n       * Note that, in AngularJS, there is also a `$destroy` jQuery event, which can be used to\n       * clean up DOM bindings before an element is removed from the DOM.\n       */\n\n      /**\n       * @ngdoc method\n       * @name $rootScope.Scope#$destroy\n       * @kind function\n       *\n       * @description\n       * Removes the current scope (and all of its children) from the parent scope. Removal implies\n       * that calls to {@link ng.$rootScope.Scope#$digest $digest()} will no longer\n       * propagate to the current scope and its children. Removal also implies that the current\n       * scope is eligible for garbage collection.\n       *\n       * The `$destroy()` is usually used by directives such as\n       * {@link ng.directive:ngRepeat ngRepeat} for managing the\n       * unrolling of the loop.\n       *\n       * Just before a scope is destroyed, a `$destroy` event is broadcasted on this scope.\n       * Application code can register a `$destroy` event handler that will give it a chance to\n       * perform any necessary cleanup.\n       *\n       * Note that, in AngularJS, there is also a `$destroy` jQuery event, which can be used to\n       * clean up DOM bindings before an element is removed from the DOM.\n       */\n      $destroy: function() {\n        // we can't destroy the root scope or a scope that has been already destroyed\n        if (this.$$destroyed) return;\n        var parent = this.$parent;\n\n        this.$broadcast('$destroy');\n        this.$$destroyed = true;\n        if (this === $rootScope) return;\n\n        forEach(this.$$listenerCount, bind(null, decrementListenerCount, this));\n\n        // sever all the references to parent scopes (after this cleanup, the current scope should\n        // not be retained by any of our references and should be eligible for garbage collection)\n        if (parent.$$childHead == this) parent.$$childHead = this.$$nextSibling;\n        if (parent.$$childTail == this) parent.$$childTail = this.$$prevSibling;\n        if (this.$$prevSibling) this.$$prevSibling.$$nextSibling = this.$$nextSibling;\n        if (this.$$nextSibling) this.$$nextSibling.$$prevSibling = this.$$prevSibling;\n\n\n        // All of the code below is bogus code that works around V8's memory leak via optimized code\n        // and inline caches.\n        //\n        // see:\n        // - https://code.google.com/p/v8/issues/detail?id=2073#c26\n        // - https://github.com/angular/angular.js/issues/6794#issuecomment-38648909\n        // - https://github.com/angular/angular.js/issues/1313#issuecomment-10378451\n\n        this.$parent = this.$$nextSibling = this.$$prevSibling = this.$$childHead =\n            this.$$childTail = this.$root = null;\n\n        // don't reset these to null in case some async task tries to register a listener/watch/task\n        this.$$listeners = {};\n        this.$$watchers = this.$$asyncQueue = this.$$postDigestQueue = [];\n\n        // prevent NPEs since these methods have references to properties we nulled out\n        this.$destroy = this.$digest = this.$apply = noop;\n        this.$on = this.$watch = function() { return noop; };\n      },\n\n      /**\n       * @ngdoc method\n       * @name $rootScope.Scope#$eval\n       * @kind function\n       *\n       * @description\n       * Executes the `expression` on the current scope and returns the result. Any exceptions in\n       * the expression are propagated (uncaught). This is useful when evaluating Angular\n       * expressions.\n       *\n       * # Example\n       * ```js\n           var scope = ng.$rootScope.Scope();\n           scope.a = 1;\n           scope.b = 2;\n\n           expect(scope.$eval('a+b')).toEqual(3);\n           expect(scope.$eval(function(scope){ return scope.a + scope.b; })).toEqual(3);\n       * ```\n       *\n       * @param {(string|function())=} expression An angular expression to be executed.\n       *\n       *    - `string`: execute using the rules as defined in  {@link guide/expression expression}.\n       *    - `function(scope)`: execute the function with the current `scope` parameter.\n       *\n       * @param {(object)=} locals Local variables object, useful for overriding values in scope.\n       * @returns {*} The result of evaluating the expression.\n       */\n      $eval: function(expr, locals) {\n        return $parse(expr)(this, locals);\n      },\n\n      /**\n       * @ngdoc method\n       * @name $rootScope.Scope#$evalAsync\n       * @kind function\n       *\n       * @description\n       * Executes the expression on the current scope at a later point in time.\n       *\n       * The `$evalAsync` makes no guarantees as to when the `expression` will be executed, only\n       * that:\n       *\n       *   - it will execute after the function that scheduled the evaluation (preferably before DOM\n       *     rendering).\n       *   - at least one {@link ng.$rootScope.Scope#$digest $digest cycle} will be performed after\n       *     `expression` execution.\n       *\n       * Any exceptions from the execution of the expression are forwarded to the\n       * {@link ng.$exceptionHandler $exceptionHandler} service.\n       *\n       * __Note:__ if this function is called outside of a `$digest` cycle, a new `$digest` cycle\n       * will be scheduled. However, it is encouraged to always call code that changes the model\n       * from within an `$apply` call. That includes code evaluated via `$evalAsync`.\n       *\n       * @param {(string|function())=} expression An angular expression to be executed.\n       *\n       *    - `string`: execute using the rules as defined in {@link guide/expression expression}.\n       *    - `function(scope)`: execute the function with the current `scope` parameter.\n       *\n       */\n      $evalAsync: function(expr) {\n        // if we are outside of an $digest loop and this is the first time we are scheduling async\n        // task also schedule async auto-flush\n        if (!$rootScope.$$phase && !$rootScope.$$asyncQueue.length) {\n          $browser.defer(function() {\n            if ($rootScope.$$asyncQueue.length) {\n              $rootScope.$digest();\n            }\n          });\n        }\n\n        this.$$asyncQueue.push({scope: this, expression: expr});\n      },\n\n      $$postDigest : function(fn) {\n        this.$$postDigestQueue.push(fn);\n      },\n\n      /**\n       * @ngdoc method\n       * @name $rootScope.Scope#$apply\n       * @kind function\n       *\n       * @description\n       * `$apply()` is used to execute an expression in angular from outside of the angular\n       * framework. (For example from browser DOM events, setTimeout, XHR or third party libraries).\n       * Because we are calling into the angular framework we need to perform proper scope life\n       * cycle of {@link ng.$exceptionHandler exception handling},\n       * {@link ng.$rootScope.Scope#$digest executing watches}.\n       *\n       * ## Life cycle\n       *\n       * # Pseudo-Code of `$apply()`\n       * ```js\n           function $apply(expr) {\n             try {\n               return $eval(expr);\n             } catch (e) {\n               $exceptionHandler(e);\n             } finally {\n               $root.$digest();\n             }\n           }\n       * ```\n       *\n       *\n       * Scope's `$apply()` method transitions through the following stages:\n       *\n       * 1. The {@link guide/expression expression} is executed using the\n       *    {@link ng.$rootScope.Scope#$eval $eval()} method.\n       * 2. Any exceptions from the execution of the expression are forwarded to the\n       *    {@link ng.$exceptionHandler $exceptionHandler} service.\n       * 3. The {@link ng.$rootScope.Scope#$watch watch} listeners are fired immediately after the\n       *    expression was executed using the {@link ng.$rootScope.Scope#$digest $digest()} method.\n       *\n       *\n       * @param {(string|function())=} exp An angular expression to be executed.\n       *\n       *    - `string`: execute using the rules as defined in {@link guide/expression expression}.\n       *    - `function(scope)`: execute the function with current `scope` parameter.\n       *\n       * @returns {*} The result of evaluating the expression.\n       */\n      $apply: function(expr) {\n        try {\n          beginPhase('$apply');\n          return this.$eval(expr);\n        } catch (e) {\n          $exceptionHandler(e);\n        } finally {\n          clearPhase();\n          try {\n            $rootScope.$digest();\n          } catch (e) {\n            $exceptionHandler(e);\n            throw e;\n          }\n        }\n      },\n\n      /**\n       * @ngdoc method\n       * @name $rootScope.Scope#$on\n       * @kind function\n       *\n       * @description\n       * Listens on events of a given type. See {@link ng.$rootScope.Scope#$emit $emit} for\n       * discussion of event life cycle.\n       *\n       * The event listener function format is: `function(event, args...)`. The `event` object\n       * passed into the listener has the following attributes:\n       *\n       *   - `targetScope` - `{Scope}`: the scope on which the event was `$emit`-ed or\n       *     `$broadcast`-ed.\n       *   - `currentScope` - `{Scope}`: the current scope which is handling the event.\n       *   - `name` - `{string}`: name of the event.\n       *   - `stopPropagation` - `{function=}`: calling `stopPropagation` function will cancel\n       *     further event propagation (available only for events that were `$emit`-ed).\n       *   - `preventDefault` - `{function}`: calling `preventDefault` sets `defaultPrevented` flag\n       *     to true.\n       *   - `defaultPrevented` - `{boolean}`: true if `preventDefault` was called.\n       *\n       * @param {string} name Event name to listen on.\n       * @param {function(event, ...args)} listener Function to call when the event is emitted.\n       * @returns {function()} Returns a deregistration function for this listener.\n       */\n      $on: function(name, listener) {\n        var namedListeners = this.$$listeners[name];\n        if (!namedListeners) {\n          this.$$listeners[name] = namedListeners = [];\n        }\n        namedListeners.push(listener);\n\n        var current = this;\n        do {\n          if (!current.$$listenerCount[name]) {\n            current.$$listenerCount[name] = 0;\n          }\n          current.$$listenerCount[name]++;\n        } while ((current = current.$parent));\n\n        var self = this;\n        return function() {\n          namedListeners[indexOf(namedListeners, listener)] = null;\n          decrementListenerCount(self, 1, name);\n        };\n      },\n\n\n      /**\n       * @ngdoc method\n       * @name $rootScope.Scope#$emit\n       * @kind function\n       *\n       * @description\n       * Dispatches an event `name` upwards through the scope hierarchy notifying the\n       * registered {@link ng.$rootScope.Scope#$on} listeners.\n       *\n       * The event life cycle starts at the scope on which `$emit` was called. All\n       * {@link ng.$rootScope.Scope#$on listeners} listening for `name` event on this scope get\n       * notified. Afterwards, the event traverses upwards toward the root scope and calls all\n       * registered listeners along the way. The event will stop propagating if one of the listeners\n       * cancels it.\n       *\n       * Any exception emitted from the {@link ng.$rootScope.Scope#$on listeners} will be passed\n       * onto the {@link ng.$exceptionHandler $exceptionHandler} service.\n       *\n       * @param {string} name Event name to emit.\n       * @param {...*} args Optional one or more arguments which will be passed onto the event listeners.\n       * @return {Object} Event object (see {@link ng.$rootScope.Scope#$on}).\n       */\n      $emit: function(name, args) {\n        var empty = [],\n            namedListeners,\n            scope = this,\n            stopPropagation = false,\n            event = {\n              name: name,\n              targetScope: scope,\n              stopPropagation: function() {stopPropagation = true;},\n              preventDefault: function() {\n                event.defaultPrevented = true;\n              },\n              defaultPrevented: false\n            },\n            listenerArgs = concat([event], arguments, 1),\n            i, length;\n\n        do {\n          namedListeners = scope.$$listeners[name] || empty;\n          event.currentScope = scope;\n          for (i=0, length=namedListeners.length; i<length; i++) {\n\n            // if listeners were deregistered, defragment the array\n            if (!namedListeners[i]) {\n              namedListeners.splice(i, 1);\n              i--;\n              length--;\n              continue;\n            }\n            try {\n              //allow all listeners attached to the current scope to run\n              namedListeners[i].apply(null, listenerArgs);\n            } catch (e) {\n              $exceptionHandler(e);\n            }\n          }\n          //if any listener on the current scope stops propagation, prevent bubbling\n          if (stopPropagation) return event;\n          //traverse upwards\n          scope = scope.$parent;\n        } while (scope);\n\n        return event;\n      },\n\n\n      /**\n       * @ngdoc method\n       * @name $rootScope.Scope#$broadcast\n       * @kind function\n       *\n       * @description\n       * Dispatches an event `name` downwards to all child scopes (and their children) notifying the\n       * registered {@link ng.$rootScope.Scope#$on} listeners.\n       *\n       * The event life cycle starts at the scope on which `$broadcast` was called. All\n       * {@link ng.$rootScope.Scope#$on listeners} listening for `name` event on this scope get\n       * notified. Afterwards, the event propagates to all direct and indirect scopes of the current\n       * scope and calls all registered listeners along the way. The event cannot be canceled.\n       *\n       * Any exception emitted from the {@link ng.$rootScope.Scope#$on listeners} will be passed\n       * onto the {@link ng.$exceptionHandler $exceptionHandler} service.\n       *\n       * @param {string} name Event name to broadcast.\n       * @param {...*} args Optional one or more arguments which will be passed onto the event listeners.\n       * @return {Object} Event object, see {@link ng.$rootScope.Scope#$on}\n       */\n      $broadcast: function(name, args) {\n        var target = this,\n            current = target,\n            next = target,\n            event = {\n              name: name,\n              targetScope: target,\n              preventDefault: function() {\n                event.defaultPrevented = true;\n              },\n              defaultPrevented: false\n            },\n            listenerArgs = concat([event], arguments, 1),\n            listeners, i, length;\n\n        //down while you can, then up and next sibling or up and next sibling until back at root\n        while ((current = next)) {\n          event.currentScope = current;\n          listeners = current.$$listeners[name] || [];\n          for (i=0, length = listeners.length; i<length; i++) {\n            // if listeners were deregistered, defragment the array\n            if (!listeners[i]) {\n              listeners.splice(i, 1);\n              i--;\n              length--;\n              continue;\n            }\n\n            try {\n              listeners[i].apply(null, listenerArgs);\n            } catch(e) {\n              $exceptionHandler(e);\n            }\n          }\n\n          // Insanity Warning: scope depth-first traversal\n          // yes, this code is a bit crazy, but it works and we have tests to prove it!\n          // this piece should be kept in sync with the traversal in $digest\n          // (though it differs due to having the extra check for $$listenerCount)\n          if (!(next = ((current.$$listenerCount[name] && current.$$childHead) ||\n              (current !== target && current.$$nextSibling)))) {\n            while(current !== target && !(next = current.$$nextSibling)) {\n              current = current.$parent;\n            }\n          }\n        }\n\n        return event;\n      }\n    };\n\n    var $rootScope = new Scope();\n\n    return $rootScope;\n\n\n    function beginPhase(phase) {\n      if ($rootScope.$$phase) {\n        throw $rootScopeMinErr('inprog', '{0} already in progress', $rootScope.$$phase);\n      }\n\n      $rootScope.$$phase = phase;\n    }\n\n    function clearPhase() {\n      $rootScope.$$phase = null;\n    }\n\n    function compileToFn(exp, name) {\n      var fn = $parse(exp);\n      assertArgFn(fn, name);\n      return fn;\n    }\n\n    function decrementListenerCount(current, count, name) {\n      do {\n        current.$$listenerCount[name] -= count;\n\n        if (current.$$listenerCount[name] === 0) {\n          delete current.$$listenerCount[name];\n        }\n      } while ((current = current.$parent));\n    }\n\n    /**\n     * function used as an initial value for watchers.\n     * because it's unique we can easily tell it apart from other values\n     */\n    function initWatchVal() {}\n  }];\n}\n\n/**\n * @description\n * Private service to sanitize uris for links and images. Used by $compile and $sanitize.\n */\nfunction $$SanitizeUriProvider() {\n  var aHrefSanitizationWhitelist = /^\\s*(https?|ftp|mailto|tel|file):/,\n    imgSrcSanitizationWhitelist = /^\\s*(https?|ftp|file):|data:image\\//;\n\n  /**\n   * @description\n   * Retrieves or overrides the default regular expression that is used for whitelisting of safe\n   * urls during a[href] sanitization.\n   *\n   * The sanitization is a security measure aimed at prevent XSS attacks via html links.\n   *\n   * Any url about to be assigned to a[href] via data-binding is first normalized and turned into\n   * an absolute url. Afterwards, the url is matched against the `aHrefSanitizationWhitelist`\n   * regular expression. If a match is found, the original url is written into the dom. Otherwise,\n   * the absolute url is prefixed with `'unsafe:'` string and only then is it written into the DOM.\n   *\n   * @param {RegExp=} regexp New regexp to whitelist urls with.\n   * @returns {RegExp|ng.$compileProvider} Current RegExp if called without value or self for\n   *    chaining otherwise.\n   */\n  this.aHrefSanitizationWhitelist = function(regexp) {\n    if (isDefined(regexp)) {\n      aHrefSanitizationWhitelist = regexp;\n      return this;\n    }\n    return aHrefSanitizationWhitelist;\n  };\n\n\n  /**\n   * @description\n   * Retrieves or overrides the default regular expression that is used for whitelisting of safe\n   * urls during img[src] sanitization.\n   *\n   * The sanitization is a security measure aimed at prevent XSS attacks via html links.\n   *\n   * Any url about to be assigned to img[src] via data-binding is first normalized and turned into\n   * an absolute url. Afterwards, the url is matched against the `imgSrcSanitizationWhitelist`\n   * regular expression. If a match is found, the original url is written into the dom. Otherwise,\n   * the absolute url is prefixed with `'unsafe:'` string and only then is it written into the DOM.\n   *\n   * @param {RegExp=} regexp New regexp to whitelist urls with.\n   * @returns {RegExp|ng.$compileProvider} Current RegExp if called without value or self for\n   *    chaining otherwise.\n   */\n  this.imgSrcSanitizationWhitelist = function(regexp) {\n    if (isDefined(regexp)) {\n      imgSrcSanitizationWhitelist = regexp;\n      return this;\n    }\n    return imgSrcSanitizationWhitelist;\n  };\n\n  this.$get = function() {\n    return function sanitizeUri(uri, isImage) {\n      var regex = isImage ? imgSrcSanitizationWhitelist : aHrefSanitizationWhitelist;\n      var normalizedVal;\n      // NOTE: urlResolve() doesn't support IE < 8 so we don't sanitize for that case.\n      if (!msie || msie >= 8 ) {\n        normalizedVal = urlResolve(uri).href;\n        if (normalizedVal !== '' && !normalizedVal.match(regex)) {\n          return 'unsafe:'+normalizedVal;\n        }\n      }\n      return uri;\n    };\n  };\n}\n\nvar $sceMinErr = minErr('$sce');\n\nvar SCE_CONTEXTS = {\n  HTML: 'html',\n  CSS: 'css',\n  URL: 'url',\n  // RESOURCE_URL is a subtype of URL used in contexts where a privileged resource is sourced from a\n  // url.  (e.g. ng-include, script src, templateUrl)\n  RESOURCE_URL: 'resourceUrl',\n  JS: 'js'\n};\n\n// Helper functions follow.\n\n// Copied from:\n// http://docs.closure-library.googlecode.com/git/closure_goog_string_string.js.source.html#line962\n// Prereq: s is a string.\nfunction escapeForRegexp(s) {\n  return s.replace(/([-()\\[\\]{}+?*.$\\^|,:#<!\\\\])/g, '\\\\$1').\n           replace(/\\x08/g, '\\\\x08');\n}\n\n\nfunction adjustMatcher(matcher) {\n  if (matcher === 'self') {\n    return matcher;\n  } else if (isString(matcher)) {\n    // Strings match exactly except for 2 wildcards - '*' and '**'.\n    // '*' matches any character except those from the set ':/.?&'.\n    // '**' matches any character (like .* in a RegExp).\n    // More than 2 *'s raises an error as it's ill defined.\n    if (matcher.indexOf('***') > -1) {\n      throw $sceMinErr('iwcard',\n          'Illegal sequence *** in string matcher.  String: {0}', matcher);\n    }\n    matcher = escapeForRegexp(matcher).\n                  replace('\\\\*\\\\*', '.*').\n                  replace('\\\\*', '[^:/.?&;]*');\n    return new RegExp('^' + matcher + '$');\n  } else if (isRegExp(matcher)) {\n    // The only other type of matcher allowed is a Regexp.\n    // Match entire URL / disallow partial matches.\n    // Flags are reset (i.e. no global, ignoreCase or multiline)\n    return new RegExp('^' + matcher.source + '$');\n  } else {\n    throw $sceMinErr('imatcher',\n        'Matchers may only be \"self\", string patterns or RegExp objects');\n  }\n}\n\n\nfunction adjustMatchers(matchers) {\n  var adjustedMatchers = [];\n  if (isDefined(matchers)) {\n    forEach(matchers, function(matcher) {\n      adjustedMatchers.push(adjustMatcher(matcher));\n    });\n  }\n  return adjustedMatchers;\n}\n\n\n/**\n * @ngdoc service\n * @name $sceDelegate\n * @kind function\n *\n * @description\n *\n * `$sceDelegate` is a service that is used by the `$sce` service to provide {@link ng.$sce Strict\n * Contextual Escaping (SCE)} services to AngularJS.\n *\n * Typically, you would configure or override the {@link ng.$sceDelegate $sceDelegate} instead of\n * the `$sce` service to customize the way Strict Contextual Escaping works in AngularJS.  This is\n * because, while the `$sce` provides numerous shorthand methods, etc., you really only need to\n * override 3 core functions (`trustAs`, `getTrusted` and `valueOf`) to replace the way things\n * work because `$sce` delegates to `$sceDelegate` for these operations.\n *\n * Refer {@link ng.$sceDelegateProvider $sceDelegateProvider} to configure this service.\n *\n * The default instance of `$sceDelegate` should work out of the box with little pain.  While you\n * can override it completely to change the behavior of `$sce`, the common case would\n * involve configuring the {@link ng.$sceDelegateProvider $sceDelegateProvider} instead by setting\n * your own whitelists and blacklists for trusting URLs used for loading AngularJS resources such as\n * templates.  Refer {@link ng.$sceDelegateProvider#resourceUrlWhitelist\n * $sceDelegateProvider.resourceUrlWhitelist} and {@link\n * ng.$sceDelegateProvider#resourceUrlBlacklist $sceDelegateProvider.resourceUrlBlacklist}\n */\n\n/**\n * @ngdoc provider\n * @name $sceDelegateProvider\n * @description\n *\n * The `$sceDelegateProvider` provider allows developers to configure the {@link ng.$sceDelegate\n * $sceDelegate} service.  This allows one to get/set the whitelists and blacklists used to ensure\n * that the URLs used for sourcing Angular templates are safe.  Refer {@link\n * ng.$sceDelegateProvider#resourceUrlWhitelist $sceDelegateProvider.resourceUrlWhitelist} and\n * {@link ng.$sceDelegateProvider#resourceUrlBlacklist $sceDelegateProvider.resourceUrlBlacklist}\n *\n * For the general details about this service in Angular, read the main page for {@link ng.$sce\n * Strict Contextual Escaping (SCE)}.\n *\n * **Example**:  Consider the following case. <a name=\"example\"></a>\n *\n * - your app is hosted at url `http://myapp.example.com/`\n * - but some of your templates are hosted on other domains you control such as\n *   `http://srv01.assets.example.com/`,  `http://srv02.assets.example.com/`, etc.\n * - and you have an open redirect at `http://myapp.example.com/clickThru?...`.\n *\n * Here is what a secure configuration for this scenario might look like:\n *\n * <pre class=\"prettyprint\">\n *    angular.module('myApp', []).config(function($sceDelegateProvider) {\n *      $sceDelegateProvider.resourceUrlWhitelist([\n *        // Allow same origin resource loads.\n *        'self',\n *        // Allow loading from our assets domain.  Notice the difference between * and **.\n *        'http://srv*.assets.example.com/**']);\n *\n *      // The blacklist overrides the whitelist so the open redirect here is blocked.\n *      $sceDelegateProvider.resourceUrlBlacklist([\n *        'http://myapp.example.com/clickThru**']);\n *      });\n * </pre>\n */\n\nfunction $SceDelegateProvider() {\n  this.SCE_CONTEXTS = SCE_CONTEXTS;\n\n  // Resource URLs can also be trusted by policy.\n  var resourceUrlWhitelist = ['self'],\n      resourceUrlBlacklist = [];\n\n  /**\n   * @ngdoc method\n   * @name $sceDelegateProvider#resourceUrlWhitelist\n   * @kind function\n   *\n   * @param {Array=} whitelist When provided, replaces the resourceUrlWhitelist with the value\n   *     provided.  This must be an array or null.  A snapshot of this array is used so further\n   *     changes to the array are ignored.\n   *\n   *     Follow {@link ng.$sce#resourceUrlPatternItem this link} for a description of the items\n   *     allowed in this array.\n   *\n   *     Note: **an empty whitelist array will block all URLs**!\n   *\n   * @return {Array} the currently set whitelist array.\n   *\n   * The **default value** when no whitelist has been explicitly set is `['self']` allowing only\n   * same origin resource requests.\n   *\n   * @description\n   * Sets/Gets the whitelist of trusted resource URLs.\n   */\n  this.resourceUrlWhitelist = function (value) {\n    if (arguments.length) {\n      resourceUrlWhitelist = adjustMatchers(value);\n    }\n    return resourceUrlWhitelist;\n  };\n\n  /**\n   * @ngdoc method\n   * @name $sceDelegateProvider#resourceUrlBlacklist\n   * @kind function\n   *\n   * @param {Array=} blacklist When provided, replaces the resourceUrlBlacklist with the value\n   *     provided.  This must be an array or null.  A snapshot of this array is used so further\n   *     changes to the array are ignored.\n   *\n   *     Follow {@link ng.$sce#resourceUrlPatternItem this link} for a description of the items\n   *     allowed in this array.\n   *\n   *     The typical usage for the blacklist is to **block\n   *     [open redirects](http://cwe.mitre.org/data/definitions/601.html)** served by your domain as\n   *     these would otherwise be trusted but actually return content from the redirected domain.\n   *\n   *     Finally, **the blacklist overrides the whitelist** and has the final say.\n   *\n   * @return {Array} the currently set blacklist array.\n   *\n   * The **default value** when no whitelist has been explicitly set is the empty array (i.e. there\n   * is no blacklist.)\n   *\n   * @description\n   * Sets/Gets the blacklist of trusted resource URLs.\n   */\n\n  this.resourceUrlBlacklist = function (value) {\n    if (arguments.length) {\n      resourceUrlBlacklist = adjustMatchers(value);\n    }\n    return resourceUrlBlacklist;\n  };\n\n  this.$get = ['$injector', function($injector) {\n\n    var htmlSanitizer = function htmlSanitizer(html) {\n      throw $sceMinErr('unsafe', 'Attempting to use an unsafe value in a safe context.');\n    };\n\n    if ($injector.has('$sanitize')) {\n      htmlSanitizer = $injector.get('$sanitize');\n    }\n\n\n    function matchUrl(matcher, parsedUrl) {\n      if (matcher === 'self') {\n        return urlIsSameOrigin(parsedUrl);\n      } else {\n        // definitely a regex.  See adjustMatchers()\n        return !!matcher.exec(parsedUrl.href);\n      }\n    }\n\n    function isResourceUrlAllowedByPolicy(url) {\n      var parsedUrl = urlResolve(url.toString());\n      var i, n, allowed = false;\n      // Ensure that at least one item from the whitelist allows this url.\n      for (i = 0, n = resourceUrlWhitelist.length; i < n; i++) {\n        if (matchUrl(resourceUrlWhitelist[i], parsedUrl)) {\n          allowed = true;\n          break;\n        }\n      }\n      if (allowed) {\n        // Ensure that no item from the blacklist blocked this url.\n        for (i = 0, n = resourceUrlBlacklist.length; i < n; i++) {\n          if (matchUrl(resourceUrlBlacklist[i], parsedUrl)) {\n            allowed = false;\n            break;\n          }\n        }\n      }\n      return allowed;\n    }\n\n    function generateHolderType(Base) {\n      var holderType = function TrustedValueHolderType(trustedValue) {\n        this.$$unwrapTrustedValue = function() {\n          return trustedValue;\n        };\n      };\n      if (Base) {\n        holderType.prototype = new Base();\n      }\n      holderType.prototype.valueOf = function sceValueOf() {\n        return this.$$unwrapTrustedValue();\n      };\n      holderType.prototype.toString = function sceToString() {\n        return this.$$unwrapTrustedValue().toString();\n      };\n      return holderType;\n    }\n\n    var trustedValueHolderBase = generateHolderType(),\n        byType = {};\n\n    byType[SCE_CONTEXTS.HTML] = generateHolderType(trustedValueHolderBase);\n    byType[SCE_CONTEXTS.CSS] = generateHolderType(trustedValueHolderBase);\n    byType[SCE_CONTEXTS.URL] = generateHolderType(trustedValueHolderBase);\n    byType[SCE_CONTEXTS.JS] = generateHolderType(trustedValueHolderBase);\n    byType[SCE_CONTEXTS.RESOURCE_URL] = generateHolderType(byType[SCE_CONTEXTS.URL]);\n\n    /**\n     * @ngdoc method\n     * @name $sceDelegate#trustAs\n     *\n     * @description\n     * Returns an object that is trusted by angular for use in specified strict\n     * contextual escaping contexts (such as ng-bind-html, ng-include, any src\n     * attribute interpolation, any dom event binding attribute interpolation\n     * such as for onclick,  etc.) that uses the provided value.\n     * See {@link ng.$sce $sce} for enabling strict contextual escaping.\n     *\n     * @param {string} type The kind of context in which this value is safe for use.  e.g. url,\n     *   resourceUrl, html, js and css.\n     * @param {*} value The value that that should be considered trusted/safe.\n     * @returns {*} A value that can be used to stand in for the provided `value` in places\n     * where Angular expects a $sce.trustAs() return value.\n     */\n    function trustAs(type, trustedValue) {\n      var Constructor = (byType.hasOwnProperty(type) ? byType[type] : null);\n      if (!Constructor) {\n        throw $sceMinErr('icontext',\n            'Attempted to trust a value in invalid context. Context: {0}; Value: {1}',\n            type, trustedValue);\n      }\n      if (trustedValue === null || trustedValue === undefined || trustedValue === '') {\n        return trustedValue;\n      }\n      // All the current contexts in SCE_CONTEXTS happen to be strings.  In order to avoid trusting\n      // mutable objects, we ensure here that the value passed in is actually a string.\n      if (typeof trustedValue !== 'string') {\n        throw $sceMinErr('itype',\n            'Attempted to trust a non-string value in a content requiring a string: Context: {0}',\n            type);\n      }\n      return new Constructor(trustedValue);\n    }\n\n    /**\n     * @ngdoc method\n     * @name $sceDelegate#valueOf\n     *\n     * @description\n     * If the passed parameter had been returned by a prior call to {@link ng.$sceDelegate#trustAs\n     * `$sceDelegate.trustAs`}, returns the value that had been passed to {@link\n     * ng.$sceDelegate#trustAs `$sceDelegate.trustAs`}.\n     *\n     * If the passed parameter is not a value that had been returned by {@link\n     * ng.$sceDelegate#trustAs `$sceDelegate.trustAs`}, returns it as-is.\n     *\n     * @param {*} value The result of a prior {@link ng.$sceDelegate#trustAs `$sceDelegate.trustAs`}\n     *      call or anything else.\n     * @returns {*} The `value` that was originally provided to {@link ng.$sceDelegate#trustAs\n     *     `$sceDelegate.trustAs`} if `value` is the result of such a call.  Otherwise, returns\n     *     `value` unchanged.\n     */\n    function valueOf(maybeTrusted) {\n      if (maybeTrusted instanceof trustedValueHolderBase) {\n        return maybeTrusted.$$unwrapTrustedValue();\n      } else {\n        return maybeTrusted;\n      }\n    }\n\n    /**\n     * @ngdoc method\n     * @name $sceDelegate#getTrusted\n     *\n     * @description\n     * Takes the result of a {@link ng.$sceDelegate#trustAs `$sceDelegate.trustAs`} call and\n     * returns the originally supplied value if the queried context type is a supertype of the\n     * created type.  If this condition isn't satisfied, throws an exception.\n     *\n     * @param {string} type The kind of context in which this value is to be used.\n     * @param {*} maybeTrusted The result of a prior {@link ng.$sceDelegate#trustAs\n     *     `$sceDelegate.trustAs`} call.\n     * @returns {*} The value the was originally provided to {@link ng.$sceDelegate#trustAs\n     *     `$sceDelegate.trustAs`} if valid in this context.  Otherwise, throws an exception.\n     */\n    function getTrusted(type, maybeTrusted) {\n      if (maybeTrusted === null || maybeTrusted === undefined || maybeTrusted === '') {\n        return maybeTrusted;\n      }\n      var constructor = (byType.hasOwnProperty(type) ? byType[type] : null);\n      if (constructor && maybeTrusted instanceof constructor) {\n        return maybeTrusted.$$unwrapTrustedValue();\n      }\n      // If we get here, then we may only take one of two actions.\n      // 1. sanitize the value for the requested type, or\n      // 2. throw an exception.\n      if (type === SCE_CONTEXTS.RESOURCE_URL) {\n        if (isResourceUrlAllowedByPolicy(maybeTrusted)) {\n          return maybeTrusted;\n        } else {\n          throw $sceMinErr('insecurl',\n              'Blocked loading resource from url not allowed by $sceDelegate policy.  URL: {0}',\n              maybeTrusted.toString());\n        }\n      } else if (type === SCE_CONTEXTS.HTML) {\n        return htmlSanitizer(maybeTrusted);\n      }\n      throw $sceMinErr('unsafe', 'Attempting to use an unsafe value in a safe context.');\n    }\n\n    return { trustAs: trustAs,\n             getTrusted: getTrusted,\n             valueOf: valueOf };\n  }];\n}\n\n\n/**\n * @ngdoc provider\n * @name $sceProvider\n * @description\n *\n * The $sceProvider provider allows developers to configure the {@link ng.$sce $sce} service.\n * -   enable/disable Strict Contextual Escaping (SCE) in a module\n * -   override the default implementation with a custom delegate\n *\n * Read more about {@link ng.$sce Strict Contextual Escaping (SCE)}.\n */\n\n/* jshint maxlen: false*/\n\n/**\n * @ngdoc service\n * @name $sce\n * @kind function\n *\n * @description\n *\n * `$sce` is a service that provides Strict Contextual Escaping services to AngularJS.\n *\n * # Strict Contextual Escaping\n *\n * Strict Contextual Escaping (SCE) is a mode in which AngularJS requires bindings in certain\n * contexts to result in a value that is marked as safe to use for that context.  One example of\n * such a context is binding arbitrary html controlled by the user via `ng-bind-html`.  We refer\n * to these contexts as privileged or SCE contexts.\n *\n * As of version 1.2, Angular ships with SCE enabled by default.\n *\n * Note:  When enabled (the default), IE8 in quirks mode is not supported.  In this mode, IE8 allows\n * one to execute arbitrary javascript by the use of the expression() syntax.  Refer\n * <http://blogs.msdn.com/b/ie/archive/2008/10/16/ending-expressions.aspx> to learn more about them.\n * You can ensure your document is in standards mode and not quirks mode by adding `<!doctype html>`\n * to the top of your HTML document.\n *\n * SCE assists in writing code in way that (a) is secure by default and (b) makes auditing for\n * security vulnerabilities such as XSS, clickjacking, etc. a lot easier.\n *\n * Here's an example of a binding in a privileged context:\n *\n * <pre class=\"prettyprint\">\n *     <input ng-model=\"userHtml\">\n *     <div ng-bind-html=\"userHtml\">\n * </pre>\n *\n * Notice that `ng-bind-html` is bound to `userHtml` controlled by the user.  With SCE\n * disabled, this application allows the user to render arbitrary HTML into the DIV.\n * In a more realistic example, one may be rendering user comments, blog articles, etc. via\n * bindings.  (HTML is just one example of a context where rendering user controlled input creates\n * security vulnerabilities.)\n *\n * For the case of HTML, you might use a library, either on the client side, or on the server side,\n * to sanitize unsafe HTML before binding to the value and rendering it in the document.\n *\n * How would you ensure that every place that used these types of bindings was bound to a value that\n * was sanitized by your library (or returned as safe for rendering by your server?)  How can you\n * ensure that you didn't accidentally delete the line that sanitized the value, or renamed some\n * properties/fields and forgot to update the binding to the sanitized value?\n *\n * To be secure by default, you want to ensure that any such bindings are disallowed unless you can\n * determine that something explicitly says it's safe to use a value for binding in that\n * context.  You can then audit your code (a simple grep would do) to ensure that this is only done\n * for those values that you can easily tell are safe - because they were received from your server,\n * sanitized by your library, etc.  You can organize your codebase to help with this - perhaps\n * allowing only the files in a specific directory to do this.  Ensuring that the internal API\n * exposed by that code doesn't markup arbitrary values as safe then becomes a more manageable task.\n *\n * In the case of AngularJS' SCE service, one uses {@link ng.$sce#trustAs $sce.trustAs}\n * (and shorthand methods such as {@link ng.$sce#trustAsHtml $sce.trustAsHtml}, etc.) to\n * obtain values that will be accepted by SCE / privileged contexts.\n *\n *\n * ## How does it work?\n *\n * In privileged contexts, directives and code will bind to the result of {@link ng.$sce#getTrusted\n * $sce.getTrusted(context, value)} rather than to the value directly.  Directives use {@link\n * ng.$sce#parse $sce.parseAs} rather than `$parse` to watch attribute bindings, which performs the\n * {@link ng.$sce#getTrusted $sce.getTrusted} behind the scenes on non-constant literals.\n *\n * As an example, {@link ng.directive:ngBindHtml ngBindHtml} uses {@link\n * ng.$sce#parseAsHtml $sce.parseAsHtml(binding expression)}.  Here's the actual code (slightly\n * simplified):\n *\n * <pre class=\"prettyprint\">\n *   var ngBindHtmlDirective = ['$sce', function($sce) {\n *     return function(scope, element, attr) {\n *       scope.$watch($sce.parseAsHtml(attr.ngBindHtml), function(value) {\n *         element.html(value || '');\n *       });\n *     };\n *   }];\n * </pre>\n *\n * ## Impact on loading templates\n *\n * This applies both to the {@link ng.directive:ngInclude `ng-include`} directive as well as\n * `templateUrl`'s specified by {@link guide/directive directives}.\n *\n * By default, Angular only loads templates from the same domain and protocol as the application\n * document.  This is done by calling {@link ng.$sce#getTrustedResourceUrl\n * $sce.getTrustedResourceUrl} on the template URL.  To load templates from other domains and/or\n * protocols, you may either either {@link ng.$sceDelegateProvider#resourceUrlWhitelist whitelist\n * them} or {@link ng.$sce#trustAsResourceUrl wrap it} into a trusted value.\n *\n * *Please note*:\n * The browser's\n * [Same Origin Policy](https://code.google.com/p/browsersec/wiki/Part2#Same-origin_policy_for_XMLHttpRequest)\n * and [Cross-Origin Resource Sharing (CORS)](http://www.w3.org/TR/cors/)\n * policy apply in addition to this and may further restrict whether the template is successfully\n * loaded.  This means that without the right CORS policy, loading templates from a different domain\n * won't work on all browsers.  Also, loading templates from `file://` URL does not work on some\n * browsers.\n *\n * ## This feels like too much overhead for the developer?\n *\n * It's important to remember that SCE only applies to interpolation expressions.\n *\n * If your expressions are constant literals, they're automatically trusted and you don't need to\n * call `$sce.trustAs` on them (remember to include the `ngSanitize` module) (e.g.\n * `<div ng-bind-html=\"'<b>implicitly trusted</b>'\"></div>`) just works.\n *\n * Additionally, `a[href]` and `img[src]` automatically sanitize their URLs and do not pass them\n * through {@link ng.$sce#getTrusted $sce.getTrusted}.  SCE doesn't play a role here.\n *\n * The included {@link ng.$sceDelegate $sceDelegate} comes with sane defaults to allow you to load\n * templates in `ng-include` from your application's domain without having to even know about SCE.\n * It blocks loading templates from other domains or loading templates over http from an https\n * served document.  You can change these by setting your own custom {@link\n * ng.$sceDelegateProvider#resourceUrlWhitelist whitelists} and {@link\n * ng.$sceDelegateProvider#resourceUrlBlacklist blacklists} for matching such URLs.\n *\n * This significantly reduces the overhead.  It is far easier to pay the small overhead and have an\n * application that's secure and can be audited to verify that with much more ease than bolting\n * security onto an application later.\n *\n * <a name=\"contexts\"></a>\n * ## What trusted context types are supported?\n *\n * | Context             | Notes          |\n * |---------------------|----------------|\n * | `$sce.HTML`         | For HTML that's safe to source into the application.  The {@link ng.directive:ngBindHtml ngBindHtml} directive uses this context for bindings. If an unsafe value is encountered and the {@link ngSanitize $sanitize} module is present this will sanitize the value instead of throwing an error. |\n * | `$sce.CSS`          | For CSS that's safe to source into the application.  Currently unused.  Feel free to use it in your own directives. |\n * | `$sce.URL`          | For URLs that are safe to follow as links.  Currently unused (`<a href=` and `<img src=` sanitize their urls and don't constitute an SCE context. |\n * | `$sce.RESOURCE_URL` | For URLs that are not only safe to follow as links, but whose contents are also safe to include in your application.  Examples include `ng-include`, `src` / `ngSrc` bindings for tags other than `IMG` (e.g. `IFRAME`, `OBJECT`, etc.)  <br><br>Note that `$sce.RESOURCE_URL` makes a stronger statement about the URL than `$sce.URL` does and therefore contexts requiring values trusted for `$sce.RESOURCE_URL` can be used anywhere that values trusted for `$sce.URL` are required. |\n * | `$sce.JS`           | For JavaScript that is safe to execute in your application's context.  Currently unused.  Feel free to use it in your own directives. |\n *\n * ## Format of items in {@link ng.$sceDelegateProvider#resourceUrlWhitelist resourceUrlWhitelist}/{@link ng.$sceDelegateProvider#resourceUrlBlacklist Blacklist} <a name=\"resourceUrlPatternItem\"></a>\n *\n *  Each element in these arrays must be one of the following:\n *\n *  - **'self'**\n *    - The special **string**, `'self'`, can be used to match against all URLs of the **same\n *      domain** as the application document using the **same protocol**.\n *  - **String** (except the special value `'self'`)\n *    - The string is matched against the full *normalized / absolute URL* of the resource\n *      being tested (substring matches are not good enough.)\n *    - There are exactly **two wildcard sequences** - `*` and `**`.  All other characters\n *      match themselves.\n *    - `*`: matches zero or more occurrences of any character other than one of the following 6\n *      characters: '`:`', '`/`', '`.`', '`?`', '`&`' and ';'.  It's a useful wildcard for use\n *      in a whitelist.\n *    - `**`: matches zero or more occurrences of *any* character.  As such, it's not\n *      not appropriate to use in for a scheme, domain, etc. as it would match too much.  (e.g.\n *      http://**.example.com/ would match http://evil.com/?ignore=.example.com/ and that might\n *      not have been the intention.)  Its usage at the very end of the path is ok.  (e.g.\n *      http://foo.example.com/templates/**).\n *  - **RegExp** (*see caveat below*)\n *    - *Caveat*:  While regular expressions are powerful and offer great flexibility,  their syntax\n *      (and all the inevitable escaping) makes them *harder to maintain*.  It's easy to\n *      accidentally introduce a bug when one updates a complex expression (imho, all regexes should\n *      have good test coverage.).  For instance, the use of `.` in the regex is correct only in a\n *      small number of cases.  A `.` character in the regex used when matching the scheme or a\n *      subdomain could be matched against a `:` or literal `.` that was likely not intended.   It\n *      is highly recommended to use the string patterns and only fall back to regular expressions\n *      if they as a last resort.\n *    - The regular expression must be an instance of RegExp (i.e. not a string.)  It is\n *      matched against the **entire** *normalized / absolute URL* of the resource being tested\n *      (even when the RegExp did not have the `^` and `$` codes.)  In addition, any flags\n *      present on the RegExp (such as multiline, global, ignoreCase) are ignored.\n *    - If you are generating your JavaScript from some other templating engine (not\n *      recommended, e.g. in issue [#4006](https://github.com/angular/angular.js/issues/4006)),\n *      remember to escape your regular expression (and be aware that you might need more than\n *      one level of escaping depending on your templating engine and the way you interpolated\n *      the value.)  Do make use of your platform's escaping mechanism as it might be good\n *      enough before coding your own.  e.g. Ruby has\n *      [Regexp.escape(str)](http://www.ruby-doc.org/core-2.0.0/Regexp.html#method-c-escape)\n *      and Python has [re.escape](http://docs.python.org/library/re.html#re.escape).\n *      Javascript lacks a similar built in function for escaping.  Take a look at Google\n *      Closure library's [goog.string.regExpEscape(s)](\n *      http://docs.closure-library.googlecode.com/git/closure_goog_string_string.js.source.html#line962).\n *\n * Refer {@link ng.$sceDelegateProvider $sceDelegateProvider} for an example.\n *\n * ## Show me an example using SCE.\n *\n * @example\n<example module=\"mySceApp\" deps=\"angular-sanitize.js\">\n<file name=\"index.html\">\n  <div ng-controller=\"myAppController as myCtrl\">\n    <i ng-bind-html=\"myCtrl.explicitlyTrustedHtml\" id=\"explicitlyTrustedHtml\"></i><br><br>\n    <b>User comments</b><br>\n    By default, HTML that isn't explicitly trusted (e.g. Alice's comment) is sanitized when\n    $sanitize is available.  If $sanitize isn't available, this results in an error instead of an\n    exploit.\n    <div class=\"well\">\n      <div ng-repeat=\"userComment in myCtrl.userComments\">\n        <b>{{userComment.name}}</b>:\n        <span ng-bind-html=\"userComment.htmlComment\" class=\"htmlComment\"></span>\n        <br>\n      </div>\n    </div>\n  </div>\n</file>\n\n<file name=\"script.js\">\n  var mySceApp = angular.module('mySceApp', ['ngSanitize']);\n\n  mySceApp.controller(\"myAppController\", function myAppController($http, $templateCache, $sce) {\n    var self = this;\n    $http.get(\"test_data.json\", {cache: $templateCache}).success(function(userComments) {\n      self.userComments = userComments;\n    });\n    self.explicitlyTrustedHtml = $sce.trustAsHtml(\n        '<span onmouseover=\"this.textContent=&quot;Explicitly trusted HTML bypasses ' +\n        'sanitization.&quot;\">Hover over this text.</span>');\n  });\n</file>\n\n<file name=\"test_data.json\">\n[\n  { \"name\": \"Alice\",\n    \"htmlComment\":\n        \"<span onmouseover='this.textContent=\\\"PWN3D!\\\"'>Is <i>anyone</i> reading this?</span>\"\n  },\n  { \"name\": \"Bob\",\n    \"htmlComment\": \"<i>Yes!</i>  Am I the only other one?\"\n  }\n]\n</file>\n\n<file name=\"protractor.js\" type=\"protractor\">\n  describe('SCE doc demo', function() {\n    it('should sanitize untrusted values', function() {\n      expect(element(by.css('.htmlComment')).getInnerHtml())\n          .toBe('<span>Is <i>anyone</i> reading this?</span>');\n    });\n\n    it('should NOT sanitize explicitly trusted values', function() {\n      expect(element(by.id('explicitlyTrustedHtml')).getInnerHtml()).toBe(\n          '<span onmouseover=\"this.textContent=&quot;Explicitly trusted HTML bypasses ' +\n          'sanitization.&quot;\">Hover over this text.</span>');\n    });\n  });\n</file>\n</example>\n *\n *\n *\n * ## Can I disable SCE completely?\n *\n * Yes, you can.  However, this is strongly discouraged.  SCE gives you a lot of security benefits\n * for little coding overhead.  It will be much harder to take an SCE disabled application and\n * either secure it on your own or enable SCE at a later stage.  It might make sense to disable SCE\n * for cases where you have a lot of existing code that was written before SCE was introduced and\n * you're migrating them a module at a time.\n *\n * That said, here's how you can completely disable SCE:\n *\n * <pre class=\"prettyprint\">\n *   angular.module('myAppWithSceDisabledmyApp', []).config(function($sceProvider) {\n *     // Completely disable SCE.  For demonstration purposes only!\n *     // Do not use in new projects.\n *     $sceProvider.enabled(false);\n *   });\n * </pre>\n *\n */\n/* jshint maxlen: 100 */\n\nfunction $SceProvider() {\n  var enabled = true;\n\n  /**\n   * @ngdoc method\n   * @name $sceProvider#enabled\n   * @kind function\n   *\n   * @param {boolean=} value If provided, then enables/disables SCE.\n   * @return {boolean} true if SCE is enabled, false otherwise.\n   *\n   * @description\n   * Enables/disables SCE and returns the current value.\n   */\n  this.enabled = function (value) {\n    if (arguments.length) {\n      enabled = !!value;\n    }\n    return enabled;\n  };\n\n\n  /* Design notes on the default implementation for SCE.\n   *\n   * The API contract for the SCE delegate\n   * -------------------------------------\n   * The SCE delegate object must provide the following 3 methods:\n   *\n   * - trustAs(contextEnum, value)\n   *     This method is used to tell the SCE service that the provided value is OK to use in the\n   *     contexts specified by contextEnum.  It must return an object that will be accepted by\n   *     getTrusted() for a compatible contextEnum and return this value.\n   *\n   * - valueOf(value)\n   *     For values that were not produced by trustAs(), return them as is.  For values that were\n   *     produced by trustAs(), return the corresponding input value to trustAs.  Basically, if\n   *     trustAs is wrapping the given values into some type, this operation unwraps it when given\n   *     such a value.\n   *\n   * - getTrusted(contextEnum, value)\n   *     This function should return the a value that is safe to use in the context specified by\n   *     contextEnum or throw and exception otherwise.\n   *\n   * NOTE: This contract deliberately does NOT state that values returned by trustAs() must be\n   * opaque or wrapped in some holder object.  That happens to be an implementation detail.  For\n   * instance, an implementation could maintain a registry of all trusted objects by context.  In\n   * such a case, trustAs() would return the same object that was passed in.  getTrusted() would\n   * return the same object passed in if it was found in the registry under a compatible context or\n   * throw an exception otherwise.  An implementation might only wrap values some of the time based\n   * on some criteria.  getTrusted() might return a value and not throw an exception for special\n   * constants or objects even if not wrapped.  All such implementations fulfill this contract.\n   *\n   *\n   * A note on the inheritance model for SCE contexts\n   * ------------------------------------------------\n   * I've used inheritance and made RESOURCE_URL wrapped types a subtype of URL wrapped types.  This\n   * is purely an implementation details.\n   *\n   * The contract is simply this:\n   *\n   *     getTrusted($sce.RESOURCE_URL, value) succeeding implies that getTrusted($sce.URL, value)\n   *     will also succeed.\n   *\n   * Inheritance happens to capture this in a natural way.  In some future, we\n   * may not use inheritance anymore.  That is OK because no code outside of\n   * sce.js and sceSpecs.js would need to be aware of this detail.\n   */\n\n  this.$get = ['$parse', '$sniffer', '$sceDelegate', function(\n                $parse,   $sniffer,   $sceDelegate) {\n    // Prereq: Ensure that we're not running in IE8 quirks mode.  In that mode, IE allows\n    // the \"expression(javascript expression)\" syntax which is insecure.\n    if (enabled && $sniffer.msie && $sniffer.msieDocumentMode < 8) {\n      throw $sceMinErr('iequirks',\n        'Strict Contextual Escaping does not support Internet Explorer version < 9 in quirks ' +\n        'mode.  You can fix this by adding the text <!doctype html> to the top of your HTML ' +\n        'document.  See http://docs.angularjs.org/api/ng.$sce for more information.');\n    }\n\n    var sce = shallowCopy(SCE_CONTEXTS);\n\n    /**\n     * @ngdoc method\n     * @name $sce#isEnabled\n     * @kind function\n     *\n     * @return {Boolean} true if SCE is enabled, false otherwise.  If you want to set the value, you\n     * have to do it at module config time on {@link ng.$sceProvider $sceProvider}.\n     *\n     * @description\n     * Returns a boolean indicating if SCE is enabled.\n     */\n    sce.isEnabled = function () {\n      return enabled;\n    };\n    sce.trustAs = $sceDelegate.trustAs;\n    sce.getTrusted = $sceDelegate.getTrusted;\n    sce.valueOf = $sceDelegate.valueOf;\n\n    if (!enabled) {\n      sce.trustAs = sce.getTrusted = function(type, value) { return value; };\n      sce.valueOf = identity;\n    }\n\n    /**\n     * @ngdoc method\n     * @name $sce#parse\n     *\n     * @description\n     * Converts Angular {@link guide/expression expression} into a function.  This is like {@link\n     * ng.$parse $parse} and is identical when the expression is a literal constant.  Otherwise, it\n     * wraps the expression in a call to {@link ng.$sce#getTrusted $sce.getTrusted(*type*,\n     * *result*)}\n     *\n     * @param {string} type The kind of SCE context in which this result will be used.\n     * @param {string} expression String expression to compile.\n     * @returns {function(context, locals)} a function which represents the compiled expression:\n     *\n     *    * `context` – `{object}` – an object against which any expressions embedded in the strings\n     *      are evaluated against (typically a scope object).\n     *    * `locals` – `{object=}` – local variables context object, useful for overriding values in\n     *      `context`.\n     */\n    sce.parseAs = function sceParseAs(type, expr) {\n      var parsed = $parse(expr);\n      if (parsed.literal && parsed.constant) {\n        return parsed;\n      } else {\n        return function sceParseAsTrusted(self, locals) {\n          return sce.getTrusted(type, parsed(self, locals));\n        };\n      }\n    };\n\n    /**\n     * @ngdoc method\n     * @name $sce#trustAs\n     *\n     * @description\n     * Delegates to {@link ng.$sceDelegate#trustAs `$sceDelegate.trustAs`}.  As such,\n     * returns an object that is trusted by angular for use in specified strict contextual\n     * escaping contexts (such as ng-bind-html, ng-include, any src attribute\n     * interpolation, any dom event binding attribute interpolation such as for onclick,  etc.)\n     * that uses the provided value.  See * {@link ng.$sce $sce} for enabling strict contextual\n     * escaping.\n     *\n     * @param {string} type The kind of context in which this value is safe for use.  e.g. url,\n     *   resource_url, html, js and css.\n     * @param {*} value The value that that should be considered trusted/safe.\n     * @returns {*} A value that can be used to stand in for the provided `value` in places\n     * where Angular expects a $sce.trustAs() return value.\n     */\n\n    /**\n     * @ngdoc method\n     * @name $sce#trustAsHtml\n     *\n     * @description\n     * Shorthand method.  `$sce.trustAsHtml(value)` →\n     *     {@link ng.$sceDelegate#trustAs `$sceDelegate.trustAs($sce.HTML, value)`}\n     *\n     * @param {*} value The value to trustAs.\n     * @returns {*} An object that can be passed to {@link ng.$sce#getTrustedHtml\n     *     $sce.getTrustedHtml(value)} to obtain the original value.  (privileged directives\n     *     only accept expressions that are either literal constants or are the\n     *     return value of {@link ng.$sce#trustAs $sce.trustAs}.)\n     */\n\n    /**\n     * @ngdoc method\n     * @name $sce#trustAsUrl\n     *\n     * @description\n     * Shorthand method.  `$sce.trustAsUrl(value)` →\n     *     {@link ng.$sceDelegate#trustAs `$sceDelegate.trustAs($sce.URL, value)`}\n     *\n     * @param {*} value The value to trustAs.\n     * @returns {*} An object that can be passed to {@link ng.$sce#getTrustedUrl\n     *     $sce.getTrustedUrl(value)} to obtain the original value.  (privileged directives\n     *     only accept expressions that are either literal constants or are the\n     *     return value of {@link ng.$sce#trustAs $sce.trustAs}.)\n     */\n\n    /**\n     * @ngdoc method\n     * @name $sce#trustAsResourceUrl\n     *\n     * @description\n     * Shorthand method.  `$sce.trustAsResourceUrl(value)` →\n     *     {@link ng.$sceDelegate#trustAs `$sceDelegate.trustAs($sce.RESOURCE_URL, value)`}\n     *\n     * @param {*} value The value to trustAs.\n     * @returns {*} An object that can be passed to {@link ng.$sce#getTrustedResourceUrl\n     *     $sce.getTrustedResourceUrl(value)} to obtain the original value.  (privileged directives\n     *     only accept expressions that are either literal constants or are the return\n     *     value of {@link ng.$sce#trustAs $sce.trustAs}.)\n     */\n\n    /**\n     * @ngdoc method\n     * @name $sce#trustAsJs\n     *\n     * @description\n     * Shorthand method.  `$sce.trustAsJs(value)` →\n     *     {@link ng.$sceDelegate#trustAs `$sceDelegate.trustAs($sce.JS, value)`}\n     *\n     * @param {*} value The value to trustAs.\n     * @returns {*} An object that can be passed to {@link ng.$sce#getTrustedJs\n     *     $sce.getTrustedJs(value)} to obtain the original value.  (privileged directives\n     *     only accept expressions that are either literal constants or are the\n     *     return value of {@link ng.$sce#trustAs $sce.trustAs}.)\n     */\n\n    /**\n     * @ngdoc method\n     * @name $sce#getTrusted\n     *\n     * @description\n     * Delegates to {@link ng.$sceDelegate#getTrusted `$sceDelegate.getTrusted`}.  As such,\n     * takes the result of a {@link ng.$sce#trustAs `$sce.trustAs`}() call and returns the\n     * originally supplied value if the queried context type is a supertype of the created type.\n     * If this condition isn't satisfied, throws an exception.\n     *\n     * @param {string} type The kind of context in which this value is to be used.\n     * @param {*} maybeTrusted The result of a prior {@link ng.$sce#trustAs `$sce.trustAs`}\n     *                         call.\n     * @returns {*} The value the was originally provided to\n     *              {@link ng.$sce#trustAs `$sce.trustAs`} if valid in this context.\n     *              Otherwise, throws an exception.\n     */\n\n    /**\n     * @ngdoc method\n     * @name $sce#getTrustedHtml\n     *\n     * @description\n     * Shorthand method.  `$sce.getTrustedHtml(value)` →\n     *     {@link ng.$sceDelegate#getTrusted `$sceDelegate.getTrusted($sce.HTML, value)`}\n     *\n     * @param {*} value The value to pass to `$sce.getTrusted`.\n     * @returns {*} The return value of `$sce.getTrusted($sce.HTML, value)`\n     */\n\n    /**\n     * @ngdoc method\n     * @name $sce#getTrustedCss\n     *\n     * @description\n     * Shorthand method.  `$sce.getTrustedCss(value)` →\n     *     {@link ng.$sceDelegate#getTrusted `$sceDelegate.getTrusted($sce.CSS, value)`}\n     *\n     * @param {*} value The value to pass to `$sce.getTrusted`.\n     * @returns {*} The return value of `$sce.getTrusted($sce.CSS, value)`\n     */\n\n    /**\n     * @ngdoc method\n     * @name $sce#getTrustedUrl\n     *\n     * @description\n     * Shorthand method.  `$sce.getTrustedUrl(value)` →\n     *     {@link ng.$sceDelegate#getTrusted `$sceDelegate.getTrusted($sce.URL, value)`}\n     *\n     * @param {*} value The value to pass to `$sce.getTrusted`.\n     * @returns {*} The return value of `$sce.getTrusted($sce.URL, value)`\n     */\n\n    /**\n     * @ngdoc method\n     * @name $sce#getTrustedResourceUrl\n     *\n     * @description\n     * Shorthand method.  `$sce.getTrustedResourceUrl(value)` →\n     *     {@link ng.$sceDelegate#getTrusted `$sceDelegate.getTrusted($sce.RESOURCE_URL, value)`}\n     *\n     * @param {*} value The value to pass to `$sceDelegate.getTrusted`.\n     * @returns {*} The return value of `$sce.getTrusted($sce.RESOURCE_URL, value)`\n     */\n\n    /**\n     * @ngdoc method\n     * @name $sce#getTrustedJs\n     *\n     * @description\n     * Shorthand method.  `$sce.getTrustedJs(value)` →\n     *     {@link ng.$sceDelegate#getTrusted `$sceDelegate.getTrusted($sce.JS, value)`}\n     *\n     * @param {*} value The value to pass to `$sce.getTrusted`.\n     * @returns {*} The return value of `$sce.getTrusted($sce.JS, value)`\n     */\n\n    /**\n     * @ngdoc method\n     * @name $sce#parseAsHtml\n     *\n     * @description\n     * Shorthand method.  `$sce.parseAsHtml(expression string)` →\n     *     {@link ng.$sce#parse `$sce.parseAs($sce.HTML, value)`}\n     *\n     * @param {string} expression String expression to compile.\n     * @returns {function(context, locals)} a function which represents the compiled expression:\n     *\n     *    * `context` – `{object}` – an object against which any expressions embedded in the strings\n     *      are evaluated against (typically a scope object).\n     *    * `locals` – `{object=}` – local variables context object, useful for overriding values in\n     *      `context`.\n     */\n\n    /**\n     * @ngdoc method\n     * @name $sce#parseAsCss\n     *\n     * @description\n     * Shorthand method.  `$sce.parseAsCss(value)` →\n     *     {@link ng.$sce#parse `$sce.parseAs($sce.CSS, value)`}\n     *\n     * @param {string} expression String expression to compile.\n     * @returns {function(context, locals)} a function which represents the compiled expression:\n     *\n     *    * `context` – `{object}` – an object against which any expressions embedded in the strings\n     *      are evaluated against (typically a scope object).\n     *    * `locals` – `{object=}` – local variables context object, useful for overriding values in\n     *      `context`.\n     */\n\n    /**\n     * @ngdoc method\n     * @name $sce#parseAsUrl\n     *\n     * @description\n     * Shorthand method.  `$sce.parseAsUrl(value)` →\n     *     {@link ng.$sce#parse `$sce.parseAs($sce.URL, value)`}\n     *\n     * @param {string} expression String expression to compile.\n     * @returns {function(context, locals)} a function which represents the compiled expression:\n     *\n     *    * `context` – `{object}` – an object against which any expressions embedded in the strings\n     *      are evaluated against (typically a scope object).\n     *    * `locals` – `{object=}` – local variables context object, useful for overriding values in\n     *      `context`.\n     */\n\n    /**\n     * @ngdoc method\n     * @name $sce#parseAsResourceUrl\n     *\n     * @description\n     * Shorthand method.  `$sce.parseAsResourceUrl(value)` →\n     *     {@link ng.$sce#parse `$sce.parseAs($sce.RESOURCE_URL, value)`}\n     *\n     * @param {string} expression String expression to compile.\n     * @returns {function(context, locals)} a function which represents the compiled expression:\n     *\n     *    * `context` – `{object}` – an object against which any expressions embedded in the strings\n     *      are evaluated against (typically a scope object).\n     *    * `locals` – `{object=}` – local variables context object, useful for overriding values in\n     *      `context`.\n     */\n\n    /**\n     * @ngdoc method\n     * @name $sce#parseAsJs\n     *\n     * @description\n     * Shorthand method.  `$sce.parseAsJs(value)` →\n     *     {@link ng.$sce#parse `$sce.parseAs($sce.JS, value)`}\n     *\n     * @param {string} expression String expression to compile.\n     * @returns {function(context, locals)} a function which represents the compiled expression:\n     *\n     *    * `context` – `{object}` – an object against which any expressions embedded in the strings\n     *      are evaluated against (typically a scope object).\n     *    * `locals` – `{object=}` – local variables context object, useful for overriding values in\n     *      `context`.\n     */\n\n    // Shorthand delegations.\n    var parse = sce.parseAs,\n        getTrusted = sce.getTrusted,\n        trustAs = sce.trustAs;\n\n    forEach(SCE_CONTEXTS, function (enumValue, name) {\n      var lName = lowercase(name);\n      sce[camelCase(\"parse_as_\" + lName)] = function (expr) {\n        return parse(enumValue, expr);\n      };\n      sce[camelCase(\"get_trusted_\" + lName)] = function (value) {\n        return getTrusted(enumValue, value);\n      };\n      sce[camelCase(\"trust_as_\" + lName)] = function (value) {\n        return trustAs(enumValue, value);\n      };\n    });\n\n    return sce;\n  }];\n}\n\n/**\n * !!! This is an undocumented \"private\" service !!!\n *\n * @name $sniffer\n * @requires $window\n * @requires $document\n *\n * @property {boolean} history Does the browser support html5 history api ?\n * @property {boolean} hashchange Does the browser support hashchange event ?\n * @property {boolean} transitions Does the browser support CSS transition events ?\n * @property {boolean} animations Does the browser support CSS animation events ?\n *\n * @description\n * This is very simple implementation of testing browser's features.\n */\nfunction $SnifferProvider() {\n  this.$get = ['$window', '$document', function($window, $document) {\n    var eventSupport = {},\n        android =\n          int((/android (\\d+)/.exec(lowercase(($window.navigator || {}).userAgent)) || [])[1]),\n        boxee = /Boxee/i.test(($window.navigator || {}).userAgent),\n        document = $document[0] || {},\n        documentMode = document.documentMode,\n        vendorPrefix,\n        vendorRegex = /^(Moz|webkit|O|ms)(?=[A-Z])/,\n        bodyStyle = document.body && document.body.style,\n        transitions = false,\n        animations = false,\n        match;\n\n    if (bodyStyle) {\n      for(var prop in bodyStyle) {\n        if(match = vendorRegex.exec(prop)) {\n          vendorPrefix = match[0];\n          vendorPrefix = vendorPrefix.substr(0, 1).toUpperCase() + vendorPrefix.substr(1);\n          break;\n        }\n      }\n\n      if(!vendorPrefix) {\n        vendorPrefix = ('WebkitOpacity' in bodyStyle) && 'webkit';\n      }\n\n      transitions = !!(('transition' in bodyStyle) || (vendorPrefix + 'Transition' in bodyStyle));\n      animations  = !!(('animation' in bodyStyle) || (vendorPrefix + 'Animation' in bodyStyle));\n\n      if (android && (!transitions||!animations)) {\n        transitions = isString(document.body.style.webkitTransition);\n        animations = isString(document.body.style.webkitAnimation);\n      }\n    }\n\n\n    return {\n      // Android has history.pushState, but it does not update location correctly\n      // so let's not use the history API at all.\n      // http://code.google.com/p/android/issues/detail?id=17471\n      // https://github.com/angular/angular.js/issues/904\n\n      // older webkit browser (533.9) on Boxee box has exactly the same problem as Android has\n      // so let's not use the history API also\n      // We are purposefully using `!(android < 4)` to cover the case when `android` is undefined\n      // jshint -W018\n      history: !!($window.history && $window.history.pushState && !(android < 4) && !boxee),\n      // jshint +W018\n      hashchange: 'onhashchange' in $window &&\n                  // IE8 compatible mode lies\n                  (!documentMode || documentMode > 7),\n      hasEvent: function(event) {\n        // IE9 implements 'input' event it's so fubared that we rather pretend that it doesn't have\n        // it. In particular the event is not fired when backspace or delete key are pressed or\n        // when cut operation is performed.\n        if (event == 'input' && msie == 9) return false;\n\n        if (isUndefined(eventSupport[event])) {\n          var divElm = document.createElement('div');\n          eventSupport[event] = 'on' + event in divElm;\n        }\n\n        return eventSupport[event];\n      },\n      csp: csp(),\n      vendorPrefix: vendorPrefix,\n      transitions : transitions,\n      animations : animations,\n      android: android,\n      msie : msie,\n      msieDocumentMode: documentMode\n    };\n  }];\n}\n\nfunction $TimeoutProvider() {\n  this.$get = ['$rootScope', '$browser', '$q', '$exceptionHandler',\n       function($rootScope,   $browser,   $q,   $exceptionHandler) {\n    var deferreds = {};\n\n\n     /**\n      * @ngdoc service\n      * @name $timeout\n      *\n      * @description\n      * Angular's wrapper for `window.setTimeout`. The `fn` function is wrapped into a try/catch\n      * block and delegates any exceptions to\n      * {@link ng.$exceptionHandler $exceptionHandler} service.\n      *\n      * The return value of registering a timeout function is a promise, which will be resolved when\n      * the timeout is reached and the timeout function is executed.\n      *\n      * To cancel a timeout request, call `$timeout.cancel(promise)`.\n      *\n      * In tests you can use {@link ngMock.$timeout `$timeout.flush()`} to\n      * synchronously flush the queue of deferred functions.\n      *\n      * @param {function()} fn A function, whose execution should be delayed.\n      * @param {number=} [delay=0] Delay in milliseconds.\n      * @param {boolean=} [invokeApply=true] If set to `false` skips model dirty checking, otherwise\n      *   will invoke `fn` within the {@link ng.$rootScope.Scope#$apply $apply} block.\n      * @returns {Promise} Promise that will be resolved when the timeout is reached. The value this\n      *   promise will be resolved with is the return value of the `fn` function.\n      *\n      */\n    function timeout(fn, delay, invokeApply) {\n      var deferred = $q.defer(),\n          promise = deferred.promise,\n          skipApply = (isDefined(invokeApply) && !invokeApply),\n          timeoutId;\n\n      timeoutId = $browser.defer(function() {\n        try {\n          deferred.resolve(fn());\n        } catch(e) {\n          deferred.reject(e);\n          $exceptionHandler(e);\n        }\n        finally {\n          delete deferreds[promise.$$timeoutId];\n        }\n\n        if (!skipApply) $rootScope.$apply();\n      }, delay);\n\n      promise.$$timeoutId = timeoutId;\n      deferreds[timeoutId] = deferred;\n\n      return promise;\n    }\n\n\n     /**\n      * @ngdoc method\n      * @name $timeout#cancel\n      *\n      * @description\n      * Cancels a task associated with the `promise`. As a result of this, the promise will be\n      * resolved with a rejection.\n      *\n      * @param {Promise=} promise Promise returned by the `$timeout` function.\n      * @returns {boolean} Returns `true` if the task hasn't executed yet and was successfully\n      *   canceled.\n      */\n    timeout.cancel = function(promise) {\n      if (promise && promise.$$timeoutId in deferreds) {\n        deferreds[promise.$$timeoutId].reject('canceled');\n        delete deferreds[promise.$$timeoutId];\n        return $browser.defer.cancel(promise.$$timeoutId);\n      }\n      return false;\n    };\n\n    return timeout;\n  }];\n}\n\n// NOTE:  The usage of window and document instead of $window and $document here is\n// deliberate.  This service depends on the specific behavior of anchor nodes created by the\n// browser (resolving and parsing URLs) that is unlikely to be provided by mock objects and\n// cause us to break tests.  In addition, when the browser resolves a URL for XHR, it\n// doesn't know about mocked locations and resolves URLs to the real document - which is\n// exactly the behavior needed here.  There is little value is mocking these out for this\n// service.\nvar urlParsingNode = document.createElement(\"a\");\nvar originUrl = urlResolve(window.location.href, true);\n\n\n/**\n *\n * Implementation Notes for non-IE browsers\n * ----------------------------------------\n * Assigning a URL to the href property of an anchor DOM node, even one attached to the DOM,\n * results both in the normalizing and parsing of the URL.  Normalizing means that a relative\n * URL will be resolved into an absolute URL in the context of the application document.\n * Parsing means that the anchor node's host, hostname, protocol, port, pathname and related\n * properties are all populated to reflect the normalized URL.  This approach has wide\n * compatibility - Safari 1+, Mozilla 1+, Opera 7+,e etc.  See\n * http://www.aptana.com/reference/html/api/HTMLAnchorElement.html\n *\n * Implementation Notes for IE\n * ---------------------------\n * IE >= 8 and <= 10 normalizes the URL when assigned to the anchor node similar to the other\n * browsers.  However, the parsed components will not be set if the URL assigned did not specify\n * them.  (e.g. if you assign a.href = \"foo\", then a.protocol, a.host, etc. will be empty.)  We\n * work around that by performing the parsing in a 2nd step by taking a previously normalized\n * URL (e.g. by assigning to a.href) and assigning it a.href again.  This correctly populates the\n * properties such as protocol, hostname, port, etc.\n *\n * IE7 does not normalize the URL when assigned to an anchor node.  (Apparently, it does, if one\n * uses the inner HTML approach to assign the URL as part of an HTML snippet -\n * http://stackoverflow.com/a/472729)  However, setting img[src] does normalize the URL.\n * Unfortunately, setting img[src] to something like \"javascript:foo\" on IE throws an exception.\n * Since the primary usage for normalizing URLs is to sanitize such URLs, we can't use that\n * method and IE < 8 is unsupported.\n *\n * References:\n *   http://developer.mozilla.org/en-US/docs/Web/API/HTMLAnchorElement\n *   http://www.aptana.com/reference/html/api/HTMLAnchorElement.html\n *   http://url.spec.whatwg.org/#urlutils\n *   https://github.com/angular/angular.js/pull/2902\n *   http://james.padolsey.com/javascript/parsing-urls-with-the-dom/\n *\n * @kind function\n * @param {string} url The URL to be parsed.\n * @description Normalizes and parses a URL.\n * @returns {object} Returns the normalized URL as a dictionary.\n *\n *   | member name   | Description    |\n *   |---------------|----------------|\n *   | href          | A normalized version of the provided URL if it was not an absolute URL |\n *   | protocol      | The protocol including the trailing colon                              |\n *   | host          | The host and port (if the port is non-default) of the normalizedUrl    |\n *   | search        | The search params, minus the question mark                             |\n *   | hash          | The hash string, minus the hash symbol\n *   | hostname      | The hostname\n *   | port          | The port, without \":\"\n *   | pathname      | The pathname, beginning with \"/\"\n *\n */\nfunction urlResolve(url, base) {\n  var href = url;\n\n  if (msie) {\n    // Normalize before parse.  Refer Implementation Notes on why this is\n    // done in two steps on IE.\n    urlParsingNode.setAttribute(\"href\", href);\n    href = urlParsingNode.href;\n  }\n\n  urlParsingNode.setAttribute('href', href);\n\n  // urlParsingNode provides the UrlUtils interface - http://url.spec.whatwg.org/#urlutils\n  return {\n    href: urlParsingNode.href,\n    protocol: urlParsingNode.protocol ? urlParsingNode.protocol.replace(/:$/, '') : '',\n    host: urlParsingNode.host,\n    search: urlParsingNode.search ? urlParsingNode.search.replace(/^\\?/, '') : '',\n    hash: urlParsingNode.hash ? urlParsingNode.hash.replace(/^#/, '') : '',\n    hostname: urlParsingNode.hostname,\n    port: urlParsingNode.port,\n    pathname: (urlParsingNode.pathname.charAt(0) === '/')\n      ? urlParsingNode.pathname\n      : '/' + urlParsingNode.pathname\n  };\n}\n\n/**\n * Parse a request URL and determine whether this is a same-origin request as the application document.\n *\n * @param {string|object} requestUrl The url of the request as a string that will be resolved\n * or a parsed URL object.\n * @returns {boolean} Whether the request is for the same origin as the application document.\n */\nfunction urlIsSameOrigin(requestUrl) {\n  var parsed = (isString(requestUrl)) ? urlResolve(requestUrl) : requestUrl;\n  return (parsed.protocol === originUrl.protocol &&\n          parsed.host === originUrl.host);\n}\n\n/**\n * @ngdoc service\n * @name $window\n *\n * @description\n * A reference to the browser's `window` object. While `window`\n * is globally available in JavaScript, it causes testability problems, because\n * it is a global variable. In angular we always refer to it through the\n * `$window` service, so it may be overridden, removed or mocked for testing.\n *\n * Expressions, like the one defined for the `ngClick` directive in the example\n * below, are evaluated with respect to the current scope.  Therefore, there is\n * no risk of inadvertently coding in a dependency on a global value in such an\n * expression.\n *\n * @example\n   <example>\n     <file name=\"index.html\">\n       <script>\n         function Ctrl($scope, $window) {\n           $scope.greeting = 'Hello, World!';\n           $scope.doGreeting = function(greeting) {\n               $window.alert(greeting);\n           };\n         }\n       </script>\n       <div ng-controller=\"Ctrl\">\n         <input type=\"text\" ng-model=\"greeting\" />\n         <button ng-click=\"doGreeting(greeting)\">ALERT</button>\n       </div>\n     </file>\n     <file name=\"protractor.js\" type=\"protractor\">\n      it('should display the greeting in the input box', function() {\n       element(by.model('greeting')).sendKeys('Hello, E2E Tests');\n       // If we click the button it will block the test runner\n       // element(':button').click();\n      });\n     </file>\n   </example>\n */\nfunction $WindowProvider(){\n  this.$get = valueFn(window);\n}\n\n/**\n * @ngdoc provider\n * @name $filterProvider\n * @description\n *\n * Filters are just functions which transform input to an output. However filters need to be\n * Dependency Injected. To achieve this a filter definition consists of a factory function which is\n * annotated with dependencies and is responsible for creating a filter function.\n *\n * ```js\n *   // Filter registration\n *   function MyModule($provide, $filterProvider) {\n *     // create a service to demonstrate injection (not always needed)\n *     $provide.value('greet', function(name){\n *       return 'Hello ' + name + '!';\n *     });\n *\n *     // register a filter factory which uses the\n *     // greet service to demonstrate DI.\n *     $filterProvider.register('greet', function(greet){\n *       // return the filter function which uses the greet service\n *       // to generate salutation\n *       return function(text) {\n *         // filters need to be forgiving so check input validity\n *         return text && greet(text) || text;\n *       };\n *     });\n *   }\n * ```\n *\n * The filter function is registered with the `$injector` under the filter name suffix with\n * `Filter`.\n *\n * ```js\n *   it('should be the same instance', inject(\n *     function($filterProvider) {\n *       $filterProvider.register('reverse', function(){\n *         return ...;\n *       });\n *     },\n *     function($filter, reverseFilter) {\n *       expect($filter('reverse')).toBe(reverseFilter);\n *     });\n * ```\n *\n *\n * For more information about how angular filters work, and how to create your own filters, see\n * {@link guide/filter Filters} in the Angular Developer Guide.\n */\n/**\n * @ngdoc method\n * @name $filterProvider#register\n * @description\n * Register filter factory function.\n *\n * @param {String} name Name of the filter.\n * @param {Function} fn The filter factory function which is injectable.\n */\n\n\n/**\n * @ngdoc service\n * @name $filter\n * @kind function\n * @description\n * Filters are used for formatting data displayed to the user.\n *\n * The general syntax in templates is as follows:\n *\n *         {{ expression [| filter_name[:parameter_value] ... ] }}\n *\n * @param {String} name Name of the filter function to retrieve\n * @return {Function} the filter function\n * @example\n   <example name=\"$filter\" module=\"filterExample\">\n     <file name=\"index.html\">\n       <div ng-controller=\"MainCtrl\">\n        <h3>{{ originalText }}</h3>\n        <h3>{{ filteredText }}</h3>\n       </div>\n     </file>\n\n     <file name=\"script.js\">\n      angular.module('filterExample', [])\n      .controller('MainCtrl', function($scope, $filter) {\n        $scope.originalText = 'hello';\n        $scope.filteredText = $filter('uppercase')($scope.originalText);\n      });\n     </file>\n   </example>\n  */\n$FilterProvider.$inject = ['$provide'];\nfunction $FilterProvider($provide) {\n  var suffix = 'Filter';\n\n  /**\n   * @ngdoc method\n   * @name $controllerProvider#register\n   * @param {string|Object} name Name of the filter function, or an object map of filters where\n   *    the keys are the filter names and the values are the filter factories.\n   * @returns {Object} Registered filter instance, or if a map of filters was provided then a map\n   *    of the registered filter instances.\n   */\n  function register(name, factory) {\n    if(isObject(name)) {\n      var filters = {};\n      forEach(name, function(filter, key) {\n        filters[key] = register(key, filter);\n      });\n      return filters;\n    } else {\n      return $provide.factory(name + suffix, factory);\n    }\n  }\n  this.register = register;\n\n  this.$get = ['$injector', function($injector) {\n    return function(name) {\n      return $injector.get(name + suffix);\n    };\n  }];\n\n  ////////////////////////////////////////\n\n  /* global\n    currencyFilter: false,\n    dateFilter: false,\n    filterFilter: false,\n    jsonFilter: false,\n    limitToFilter: false,\n    lowercaseFilter: false,\n    numberFilter: false,\n    orderByFilter: false,\n    uppercaseFilter: false,\n  */\n\n  register('currency', currencyFilter);\n  register('date', dateFilter);\n  register('filter', filterFilter);\n  register('json', jsonFilter);\n  register('limitTo', limitToFilter);\n  register('lowercase', lowercaseFilter);\n  register('number', numberFilter);\n  register('orderBy', orderByFilter);\n  register('uppercase', uppercaseFilter);\n}\n\n/**\n * @ngdoc filter\n * @name filter\n * @kind function\n *\n * @description\n * Selects a subset of items from `array` and returns it as a new array.\n *\n * @param {Array} array The source array.\n * @param {string|Object|function()} expression The predicate to be used for selecting items from\n *   `array`.\n *\n *   Can be one of:\n *\n *   - `string`: The string is evaluated as an expression and the resulting value is used for substring match against\n *     the contents of the `array`. All strings or objects with string properties in `array` that contain this string\n *     will be returned. The predicate can be negated by prefixing the string with `!`.\n *\n *   - `Object`: A pattern object can be used to filter specific properties on objects contained\n *     by `array`. For example `{name:\"M\", phone:\"1\"}` predicate will return an array of items\n *     which have property `name` containing \"M\" and property `phone` containing \"1\". A special\n *     property name `$` can be used (as in `{$:\"text\"}`) to accept a match against any\n *     property of the object. That's equivalent to the simple substring match with a `string`\n *     as described above.\n *\n *   - `function(value)`: A predicate function can be used to write arbitrary filters. The function is\n *     called for each element of `array`. The final result is an array of those elements that\n *     the predicate returned true for.\n *\n * @param {function(actual, expected)|true|undefined} comparator Comparator which is used in\n *     determining if the expected value (from the filter expression) and actual value (from\n *     the object in the array) should be considered a match.\n *\n *   Can be one of:\n *\n *   - `function(actual, expected)`:\n *     The function will be given the object value and the predicate value to compare and\n *     should return true if the item should be included in filtered result.\n *\n *   - `true`: A shorthand for `function(actual, expected) { return angular.equals(expected, actual)}`.\n *     this is essentially strict comparison of expected and actual.\n *\n *   - `false|undefined`: A short hand for a function which will look for a substring match in case\n *     insensitive way.\n *\n * @example\n   <example>\n     <file name=\"index.html\">\n       <div ng-init=\"friends = [{name:'John', phone:'555-1276'},\n                                {name:'Mary', phone:'800-BIG-MARY'},\n                                {name:'Mike', phone:'555-4321'},\n                                {name:'Adam', phone:'555-5678'},\n                                {name:'Julie', phone:'555-8765'},\n                                {name:'Juliette', phone:'555-5678'}]\"></div>\n\n       Search: <input ng-model=\"searchText\">\n       <table id=\"searchTextResults\">\n         <tr><th>Name</th><th>Phone</th></tr>\n         <tr ng-repeat=\"friend in friends | filter:searchText\">\n           <td>{{friend.name}}</td>\n           <td>{{friend.phone}}</td>\n         </tr>\n       </table>\n       <hr>\n       Any: <input ng-model=\"search.$\"> <br>\n       Name only <input ng-model=\"search.name\"><br>\n       Phone only <input ng-model=\"search.phone\"><br>\n       Equality <input type=\"checkbox\" ng-model=\"strict\"><br>\n       <table id=\"searchObjResults\">\n         <tr><th>Name</th><th>Phone</th></tr>\n         <tr ng-repeat=\"friendObj in friends | filter:search:strict\">\n           <td>{{friendObj.name}}</td>\n           <td>{{friendObj.phone}}</td>\n         </tr>\n       </table>\n     </file>\n     <file name=\"protractor.js\" type=\"protractor\">\n       var expectFriendNames = function(expectedNames, key) {\n         element.all(by.repeater(key + ' in friends').column(key + '.name')).then(function(arr) {\n           arr.forEach(function(wd, i) {\n             expect(wd.getText()).toMatch(expectedNames[i]);\n           });\n         });\n       };\n\n       it('should search across all fields when filtering with a string', function() {\n         var searchText = element(by.model('searchText'));\n         searchText.clear();\n         searchText.sendKeys('m');\n         expectFriendNames(['Mary', 'Mike', 'Adam'], 'friend');\n\n         searchText.clear();\n         searchText.sendKeys('76');\n         expectFriendNames(['John', 'Julie'], 'friend');\n       });\n\n       it('should search in specific fields when filtering with a predicate object', function() {\n         var searchAny = element(by.model('search.$'));\n         searchAny.clear();\n         searchAny.sendKeys('i');\n         expectFriendNames(['Mary', 'Mike', 'Julie', 'Juliette'], 'friendObj');\n       });\n       it('should use a equal comparison when comparator is true', function() {\n         var searchName = element(by.model('search.name'));\n         var strict = element(by.model('strict'));\n         searchName.clear();\n         searchName.sendKeys('Julie');\n         strict.click();\n         expectFriendNames(['Julie'], 'friendObj');\n       });\n     </file>\n   </example>\n */\nfunction filterFilter() {\n  return function(array, expression, comparator) {\n    if (!isArray(array)) return array;\n\n    var comparatorType = typeof(comparator),\n        predicates = [];\n\n    predicates.check = function(value) {\n      for (var j = 0; j < predicates.length; j++) {\n        if(!predicates[j](value)) {\n          return false;\n        }\n      }\n      return true;\n    };\n\n    if (comparatorType !== 'function') {\n      if (comparatorType === 'boolean' && comparator) {\n        comparator = function(obj, text) {\n          return angular.equals(obj, text);\n        };\n      } else {\n        comparator = function(obj, text) {\n          if (obj && text && typeof obj === 'object' && typeof text === 'object') {\n            for (var objKey in obj) {\n              if (objKey.charAt(0) !== '$' && hasOwnProperty.call(obj, objKey) &&\n                  comparator(obj[objKey], text[objKey])) {\n                return true;\n              }\n            }\n            return false;\n          }\n          text = (''+text).toLowerCase();\n          return (''+obj).toLowerCase().indexOf(text) > -1;\n        };\n      }\n    }\n\n    var search = function(obj, text){\n      if (typeof text == 'string' && text.charAt(0) === '!') {\n        return !search(obj, text.substr(1));\n      }\n      switch (typeof obj) {\n        case \"boolean\":\n        case \"number\":\n        case \"string\":\n          return comparator(obj, text);\n        case \"object\":\n          switch (typeof text) {\n            case \"object\":\n              return comparator(obj, text);\n            default:\n              for ( var objKey in obj) {\n                if (objKey.charAt(0) !== '$' && search(obj[objKey], text)) {\n                  return true;\n                }\n              }\n              break;\n          }\n          return false;\n        case \"array\":\n          for ( var i = 0; i < obj.length; i++) {\n            if (search(obj[i], text)) {\n              return true;\n            }\n          }\n          return false;\n        default:\n          return false;\n      }\n    };\n    switch (typeof expression) {\n      case \"boolean\":\n      case \"number\":\n      case \"string\":\n        // Set up expression object and fall through\n        expression = {$:expression};\n        // jshint -W086\n      case \"object\":\n        // jshint +W086\n        for (var key in expression) {\n          (function(path) {\n            if (typeof expression[path] == 'undefined') return;\n            predicates.push(function(value) {\n              return search(path == '$' ? value : (value && value[path]), expression[path]);\n            });\n          })(key);\n        }\n        break;\n      case 'function':\n        predicates.push(expression);\n        break;\n      default:\n        return array;\n    }\n    var filtered = [];\n    for ( var j = 0; j < array.length; j++) {\n      var value = array[j];\n      if (predicates.check(value)) {\n        filtered.push(value);\n      }\n    }\n    return filtered;\n  };\n}\n\n/**\n * @ngdoc filter\n * @name currency\n * @kind function\n *\n * @description\n * Formats a number as a currency (ie $1,234.56). When no currency symbol is provided, default\n * symbol for current locale is used.\n *\n * @param {number} amount Input to filter.\n * @param {string=} symbol Currency symbol or identifier to be displayed.\n * @returns {string} Formatted number.\n *\n *\n * @example\n   <example>\n     <file name=\"index.html\">\n       <script>\n         function Ctrl($scope) {\n           $scope.amount = 1234.56;\n         }\n       </script>\n       <div ng-controller=\"Ctrl\">\n         <input type=\"number\" ng-model=\"amount\"> <br>\n         default currency symbol ($): <span id=\"currency-default\">{{amount | currency}}</span><br>\n         custom currency identifier (USD$): <span>{{amount | currency:\"USD$\"}}</span>\n       </div>\n     </file>\n     <file name=\"protractor.js\" type=\"protractor\">\n       it('should init with 1234.56', function() {\n         expect(element(by.id('currency-default')).getText()).toBe('$1,234.56');\n         expect(element(by.binding('amount | currency:\"USD$\"')).getText()).toBe('USD$1,234.56');\n       });\n       it('should update', function() {\n         if (browser.params.browser == 'safari') {\n           // Safari does not understand the minus key. See\n           // https://github.com/angular/protractor/issues/481\n           return;\n         }\n         element(by.model('amount')).clear();\n         element(by.model('amount')).sendKeys('-1234');\n         expect(element(by.id('currency-default')).getText()).toBe('($1,234.00)');\n         expect(element(by.binding('amount | currency:\"USD$\"')).getText()).toBe('(USD$1,234.00)');\n       });\n     </file>\n   </example>\n */\ncurrencyFilter.$inject = ['$locale'];\nfunction currencyFilter($locale) {\n  var formats = $locale.NUMBER_FORMATS;\n  return function(amount, currencySymbol){\n    if (isUndefined(currencySymbol)) currencySymbol = formats.CURRENCY_SYM;\n    return formatNumber(amount, formats.PATTERNS[1], formats.GROUP_SEP, formats.DECIMAL_SEP, 2).\n                replace(/\\u00A4/g, currencySymbol);\n  };\n}\n\n/**\n * @ngdoc filter\n * @name number\n * @kind function\n *\n * @description\n * Formats a number as text.\n *\n * If the input is not a number an empty string is returned.\n *\n * @param {number|string} number Number to format.\n * @param {(number|string)=} fractionSize Number of decimal places to round the number to.\n * If this is not provided then the fraction size is computed from the current locale's number\n * formatting pattern. In the case of the default locale, it will be 3.\n * @returns {string} Number rounded to decimalPlaces and places a “,” after each third digit.\n *\n * @example\n   <example>\n     <file name=\"index.html\">\n       <script>\n         function Ctrl($scope) {\n           $scope.val = 1234.56789;\n         }\n       </script>\n       <div ng-controller=\"Ctrl\">\n         Enter number: <input ng-model='val'><br>\n         Default formatting: <span id='number-default'>{{val | number}}</span><br>\n         No fractions: <span>{{val | number:0}}</span><br>\n         Negative number: <span>{{-val | number:4}}</span>\n       </div>\n     </file>\n     <file name=\"protractor.js\" type=\"protractor\">\n       it('should format numbers', function() {\n         expect(element(by.id('number-default')).getText()).toBe('1,234.568');\n         expect(element(by.binding('val | number:0')).getText()).toBe('1,235');\n         expect(element(by.binding('-val | number:4')).getText()).toBe('-1,234.5679');\n       });\n\n       it('should update', function() {\n         element(by.model('val')).clear();\n         element(by.model('val')).sendKeys('3374.333');\n         expect(element(by.id('number-default')).getText()).toBe('3,374.333');\n         expect(element(by.binding('val | number:0')).getText()).toBe('3,374');\n         expect(element(by.binding('-val | number:4')).getText()).toBe('-3,374.3330');\n      });\n     </file>\n   </example>\n */\n\n\nnumberFilter.$inject = ['$locale'];\nfunction numberFilter($locale) {\n  var formats = $locale.NUMBER_FORMATS;\n  return function(number, fractionSize) {\n    return formatNumber(number, formats.PATTERNS[0], formats.GROUP_SEP, formats.DECIMAL_SEP,\n      fractionSize);\n  };\n}\n\nvar DECIMAL_SEP = '.';\nfunction formatNumber(number, pattern, groupSep, decimalSep, fractionSize) {\n  if (number == null || !isFinite(number) || isObject(number)) return '';\n\n  var isNegative = number < 0;\n  number = Math.abs(number);\n  var numStr = number + '',\n      formatedText = '',\n      parts = [];\n\n  var hasExponent = false;\n  if (numStr.indexOf('e') !== -1) {\n    var match = numStr.match(/([\\d\\.]+)e(-?)(\\d+)/);\n    if (match && match[2] == '-' && match[3] > fractionSize + 1) {\n      numStr = '0';\n    } else {\n      formatedText = numStr;\n      hasExponent = true;\n    }\n  }\n\n  if (!hasExponent) {\n    var fractionLen = (numStr.split(DECIMAL_SEP)[1] || '').length;\n\n    // determine fractionSize if it is not specified\n    if (isUndefined(fractionSize)) {\n      fractionSize = Math.min(Math.max(pattern.minFrac, fractionLen), pattern.maxFrac);\n    }\n\n    var pow = Math.pow(10, fractionSize + 1);\n    number = Math.floor(number * pow + 5) / pow;\n    var fraction = ('' + number).split(DECIMAL_SEP);\n    var whole = fraction[0];\n    fraction = fraction[1] || '';\n\n    var i, pos = 0,\n        lgroup = pattern.lgSize,\n        group = pattern.gSize;\n\n    if (whole.length >= (lgroup + group)) {\n      pos = whole.length - lgroup;\n      for (i = 0; i < pos; i++) {\n        if ((pos - i)%group === 0 && i !== 0) {\n          formatedText += groupSep;\n        }\n        formatedText += whole.charAt(i);\n      }\n    }\n\n    for (i = pos; i < whole.length; i++) {\n      if ((whole.length - i)%lgroup === 0 && i !== 0) {\n        formatedText += groupSep;\n      }\n      formatedText += whole.charAt(i);\n    }\n\n    // format fraction part.\n    while(fraction.length < fractionSize) {\n      fraction += '0';\n    }\n\n    if (fractionSize && fractionSize !== \"0\") formatedText += decimalSep + fraction.substr(0, fractionSize);\n  } else {\n\n    if (fractionSize > 0 && number > -1 && number < 1) {\n      formatedText = number.toFixed(fractionSize);\n    }\n  }\n\n  parts.push(isNegative ? pattern.negPre : pattern.posPre);\n  parts.push(formatedText);\n  parts.push(isNegative ? pattern.negSuf : pattern.posSuf);\n  return parts.join('');\n}\n\nfunction padNumber(num, digits, trim) {\n  var neg = '';\n  if (num < 0) {\n    neg =  '-';\n    num = -num;\n  }\n  num = '' + num;\n  while(num.length < digits) num = '0' + num;\n  if (trim)\n    num = num.substr(num.length - digits);\n  return neg + num;\n}\n\n\nfunction dateGetter(name, size, offset, trim) {\n  offset = offset || 0;\n  return function(date) {\n    var value = date['get' + name]();\n    if (offset > 0 || value > -offset)\n      value += offset;\n    if (value === 0 && offset == -12 ) value = 12;\n    return padNumber(value, size, trim);\n  };\n}\n\nfunction dateStrGetter(name, shortForm) {\n  return function(date, formats) {\n    var value = date['get' + name]();\n    var get = uppercase(shortForm ? ('SHORT' + name) : name);\n\n    return formats[get][value];\n  };\n}\n\nfunction timeZoneGetter(date) {\n  var zone = -1 * date.getTimezoneOffset();\n  var paddedZone = (zone >= 0) ? \"+\" : \"\";\n\n  paddedZone += padNumber(Math[zone > 0 ? 'floor' : 'ceil'](zone / 60), 2) +\n                padNumber(Math.abs(zone % 60), 2);\n\n  return paddedZone;\n}\n\nfunction ampmGetter(date, formats) {\n  return date.getHours() < 12 ? formats.AMPMS[0] : formats.AMPMS[1];\n}\n\nvar DATE_FORMATS = {\n  yyyy: dateGetter('FullYear', 4),\n    yy: dateGetter('FullYear', 2, 0, true),\n     y: dateGetter('FullYear', 1),\n  MMMM: dateStrGetter('Month'),\n   MMM: dateStrGetter('Month', true),\n    MM: dateGetter('Month', 2, 1),\n     M: dateGetter('Month', 1, 1),\n    dd: dateGetter('Date', 2),\n     d: dateGetter('Date', 1),\n    HH: dateGetter('Hours', 2),\n     H: dateGetter('Hours', 1),\n    hh: dateGetter('Hours', 2, -12),\n     h: dateGetter('Hours', 1, -12),\n    mm: dateGetter('Minutes', 2),\n     m: dateGetter('Minutes', 1),\n    ss: dateGetter('Seconds', 2),\n     s: dateGetter('Seconds', 1),\n     // while ISO 8601 requires fractions to be prefixed with `.` or `,`\n     // we can be just safely rely on using `sss` since we currently don't support single or two digit fractions\n   sss: dateGetter('Milliseconds', 3),\n  EEEE: dateStrGetter('Day'),\n   EEE: dateStrGetter('Day', true),\n     a: ampmGetter,\n     Z: timeZoneGetter\n};\n\nvar DATE_FORMATS_SPLIT = /((?:[^yMdHhmsaZE']+)|(?:'(?:[^']|'')*')|(?:E+|y+|M+|d+|H+|h+|m+|s+|a|Z))(.*)/,\n    NUMBER_STRING = /^\\-?\\d+$/;\n\n/**\n * @ngdoc filter\n * @name date\n * @kind function\n *\n * @description\n *   Formats `date` to a string based on the requested `format`.\n *\n *   `format` string can be composed of the following elements:\n *\n *   * `'yyyy'`: 4 digit representation of year (e.g. AD 1 => 0001, AD 2010 => 2010)\n *   * `'yy'`: 2 digit representation of year, padded (00-99). (e.g. AD 2001 => 01, AD 2010 => 10)\n *   * `'y'`: 1 digit representation of year, e.g. (AD 1 => 1, AD 199 => 199)\n *   * `'MMMM'`: Month in year (January-December)\n *   * `'MMM'`: Month in year (Jan-Dec)\n *   * `'MM'`: Month in year, padded (01-12)\n *   * `'M'`: Month in year (1-12)\n *   * `'dd'`: Day in month, padded (01-31)\n *   * `'d'`: Day in month (1-31)\n *   * `'EEEE'`: Day in Week,(Sunday-Saturday)\n *   * `'EEE'`: Day in Week, (Sun-Sat)\n *   * `'HH'`: Hour in day, padded (00-23)\n *   * `'H'`: Hour in day (0-23)\n *   * `'hh'`: Hour in am/pm, padded (01-12)\n *   * `'h'`: Hour in am/pm, (1-12)\n *   * `'mm'`: Minute in hour, padded (00-59)\n *   * `'m'`: Minute in hour (0-59)\n *   * `'ss'`: Second in minute, padded (00-59)\n *   * `'s'`: Second in minute (0-59)\n *   * `'.sss' or ',sss'`: Millisecond in second, padded (000-999)\n *   * `'a'`: am/pm marker\n *   * `'Z'`: 4 digit (+sign) representation of the timezone offset (-1200-+1200)\n *\n *   `format` string can also be one of the following predefined\n *   {@link guide/i18n localizable formats}:\n *\n *   * `'medium'`: equivalent to `'MMM d, y h:mm:ss a'` for en_US locale\n *     (e.g. Sep 3, 2010 12:05:08 pm)\n *   * `'short'`: equivalent to `'M/d/yy h:mm a'` for en_US  locale (e.g. 9/3/10 12:05 pm)\n *   * `'fullDate'`: equivalent to `'EEEE, MMMM d,y'` for en_US  locale\n *     (e.g. Friday, September 3, 2010)\n *   * `'longDate'`: equivalent to `'MMMM d, y'` for en_US  locale (e.g. September 3, 2010)\n *   * `'mediumDate'`: equivalent to `'MMM d, y'` for en_US  locale (e.g. Sep 3, 2010)\n *   * `'shortDate'`: equivalent to `'M/d/yy'` for en_US locale (e.g. 9/3/10)\n *   * `'mediumTime'`: equivalent to `'h:mm:ss a'` for en_US locale (e.g. 12:05:08 pm)\n *   * `'shortTime'`: equivalent to `'h:mm a'` for en_US locale (e.g. 12:05 pm)\n *\n *   `format` string can contain literal values. These need to be quoted with single quotes (e.g.\n *   `\"h 'in the morning'\"`). In order to output single quote, use two single quotes in a sequence\n *   (e.g. `\"h 'o''clock'\"`).\n *\n * @param {(Date|number|string)} date Date to format either as Date object, milliseconds (string or\n *    number) or various ISO 8601 datetime string formats (e.g. yyyy-MM-ddTHH:mm:ss.SSSZ and its\n *    shorter versions like yyyy-MM-ddTHH:mmZ, yyyy-MM-dd or yyyyMMddTHHmmssZ). If no timezone is\n *    specified in the string input, the time is considered to be in the local timezone.\n * @param {string=} format Formatting rules (see Description). If not specified,\n *    `mediumDate` is used.\n * @returns {string} Formatted string or the input if input is not recognized as date/millis.\n *\n * @example\n   <example>\n     <file name=\"index.html\">\n       <span ng-non-bindable>{{1288323623006 | date:'medium'}}</span>:\n           <span>{{1288323623006 | date:'medium'}}</span><br>\n       <span ng-non-bindable>{{1288323623006 | date:'yyyy-MM-dd HH:mm:ss Z'}}</span>:\n          <span>{{1288323623006 | date:'yyyy-MM-dd HH:mm:ss Z'}}</span><br>\n       <span ng-non-bindable>{{1288323623006 | date:'MM/dd/yyyy @ h:mma'}}</span>:\n          <span>{{'1288323623006' | date:'MM/dd/yyyy @ h:mma'}}</span><br>\n     </file>\n     <file name=\"protractor.js\" type=\"protractor\">\n       it('should format date', function() {\n         expect(element(by.binding(\"1288323623006 | date:'medium'\")).getText()).\n            toMatch(/Oct 2\\d, 2010 \\d{1,2}:\\d{2}:\\d{2} (AM|PM)/);\n         expect(element(by.binding(\"1288323623006 | date:'yyyy-MM-dd HH:mm:ss Z'\")).getText()).\n            toMatch(/2010\\-10\\-2\\d \\d{2}:\\d{2}:\\d{2} (\\-|\\+)?\\d{4}/);\n         expect(element(by.binding(\"'1288323623006' | date:'MM/dd/yyyy @ h:mma'\")).getText()).\n            toMatch(/10\\/2\\d\\/2010 @ \\d{1,2}:\\d{2}(AM|PM)/);\n       });\n     </file>\n   </example>\n */\ndateFilter.$inject = ['$locale'];\nfunction dateFilter($locale) {\n\n\n  var R_ISO8601_STR = /^(\\d{4})-?(\\d\\d)-?(\\d\\d)(?:T(\\d\\d)(?::?(\\d\\d)(?::?(\\d\\d)(?:\\.(\\d+))?)?)?(Z|([+-])(\\d\\d):?(\\d\\d))?)?$/;\n                     // 1        2       3         4          5          6          7          8  9     10      11\n  function jsonStringToDate(string) {\n    var match;\n    if (match = string.match(R_ISO8601_STR)) {\n      var date = new Date(0),\n          tzHour = 0,\n          tzMin  = 0,\n          dateSetter = match[8] ? date.setUTCFullYear : date.setFullYear,\n          timeSetter = match[8] ? date.setUTCHours : date.setHours;\n\n      if (match[9]) {\n        tzHour = int(match[9] + match[10]);\n        tzMin = int(match[9] + match[11]);\n      }\n      dateSetter.call(date, int(match[1]), int(match[2]) - 1, int(match[3]));\n      var h = int(match[4]||0) - tzHour;\n      var m = int(match[5]||0) - tzMin;\n      var s = int(match[6]||0);\n      var ms = Math.round(parseFloat('0.' + (match[7]||0)) * 1000);\n      timeSetter.call(date, h, m, s, ms);\n      return date;\n    }\n    return string;\n  }\n\n\n  return function(date, format) {\n    var text = '',\n        parts = [],\n        fn, match;\n\n    format = format || 'mediumDate';\n    format = $locale.DATETIME_FORMATS[format] || format;\n    if (isString(date)) {\n      if (NUMBER_STRING.test(date)) {\n        date = int(date);\n      } else {\n        date = jsonStringToDate(date);\n      }\n    }\n\n    if (isNumber(date)) {\n      date = new Date(date);\n    }\n\n    if (!isDate(date)) {\n      return date;\n    }\n\n    while(format) {\n      match = DATE_FORMATS_SPLIT.exec(format);\n      if (match) {\n        parts = concat(parts, match, 1);\n        format = parts.pop();\n      } else {\n        parts.push(format);\n        format = null;\n      }\n    }\n\n    forEach(parts, function(value){\n      fn = DATE_FORMATS[value];\n      text += fn ? fn(date, $locale.DATETIME_FORMATS)\n                 : value.replace(/(^'|'$)/g, '').replace(/''/g, \"'\");\n    });\n\n    return text;\n  };\n}\n\n\n/**\n * @ngdoc filter\n * @name json\n * @kind function\n *\n * @description\n *   Allows you to convert a JavaScript object into JSON string.\n *\n *   This filter is mostly useful for debugging. When using the double curly {{value}} notation\n *   the binding is automatically converted to JSON.\n *\n * @param {*} object Any JavaScript object (including arrays and primitive types) to filter.\n * @returns {string} JSON string.\n *\n *\n * @example\n   <example>\n     <file name=\"index.html\">\n       <pre>{{ {'name':'value'} | json }}</pre>\n     </file>\n     <file name=\"protractor.js\" type=\"protractor\">\n       it('should jsonify filtered objects', function() {\n         expect(element(by.binding(\"{'name':'value'}\")).getText()).toMatch(/\\{\\n  \"name\": ?\"value\"\\n}/);\n       });\n     </file>\n   </example>\n *\n */\nfunction jsonFilter() {\n  return function(object) {\n    return toJson(object, true);\n  };\n}\n\n\n/**\n * @ngdoc filter\n * @name lowercase\n * @kind function\n * @description\n * Converts string to lowercase.\n * @see angular.lowercase\n */\nvar lowercaseFilter = valueFn(lowercase);\n\n\n/**\n * @ngdoc filter\n * @name uppercase\n * @kind function\n * @description\n * Converts string to uppercase.\n * @see angular.uppercase\n */\nvar uppercaseFilter = valueFn(uppercase);\n\n/**\n * @ngdoc filter\n * @name limitTo\n * @kind function\n *\n * @description\n * Creates a new array or string containing only a specified number of elements. The elements\n * are taken from either the beginning or the end of the source array or string, as specified by\n * the value and sign (positive or negative) of `limit`.\n *\n * @param {Array|string} input Source array or string to be limited.\n * @param {string|number} limit The length of the returned array or string. If the `limit` number\n *     is positive, `limit` number of items from the beginning of the source array/string are copied.\n *     If the number is negative, `limit` number  of items from the end of the source array/string\n *     are copied. The `limit` will be trimmed if it exceeds `array.length`\n * @returns {Array|string} A new sub-array or substring of length `limit` or less if input array\n *     had less than `limit` elements.\n *\n * @example\n   <example>\n     <file name=\"index.html\">\n       <script>\n         function Ctrl($scope) {\n           $scope.numbers = [1,2,3,4,5,6,7,8,9];\n           $scope.letters = \"abcdefghi\";\n           $scope.numLimit = 3;\n           $scope.letterLimit = 3;\n         }\n       </script>\n       <div ng-controller=\"Ctrl\">\n         Limit {{numbers}} to: <input type=\"integer\" ng-model=\"numLimit\">\n         <p>Output numbers: {{ numbers | limitTo:numLimit }}</p>\n         Limit {{letters}} to: <input type=\"integer\" ng-model=\"letterLimit\">\n         <p>Output letters: {{ letters | limitTo:letterLimit }}</p>\n       </div>\n     </file>\n     <file name=\"protractor.js\" type=\"protractor\">\n       var numLimitInput = element(by.model('numLimit'));\n       var letterLimitInput = element(by.model('letterLimit'));\n       var limitedNumbers = element(by.binding('numbers | limitTo:numLimit'));\n       var limitedLetters = element(by.binding('letters | limitTo:letterLimit'));\n\n       it('should limit the number array to first three items', function() {\n         expect(numLimitInput.getAttribute('value')).toBe('3');\n         expect(letterLimitInput.getAttribute('value')).toBe('3');\n         expect(limitedNumbers.getText()).toEqual('Output numbers: [1,2,3]');\n         expect(limitedLetters.getText()).toEqual('Output letters: abc');\n       });\n\n       it('should update the output when -3 is entered', function() {\n         numLimitInput.clear();\n         numLimitInput.sendKeys('-3');\n         letterLimitInput.clear();\n         letterLimitInput.sendKeys('-3');\n         expect(limitedNumbers.getText()).toEqual('Output numbers: [7,8,9]');\n         expect(limitedLetters.getText()).toEqual('Output letters: ghi');\n       });\n\n       it('should not exceed the maximum size of input array', function() {\n         numLimitInput.clear();\n         numLimitInput.sendKeys('100');\n         letterLimitInput.clear();\n         letterLimitInput.sendKeys('100');\n         expect(limitedNumbers.getText()).toEqual('Output numbers: [1,2,3,4,5,6,7,8,9]');\n         expect(limitedLetters.getText()).toEqual('Output letters: abcdefghi');\n       });\n     </file>\n   </example>\n */\nfunction limitToFilter(){\n  return function(input, limit) {\n    if (!isArray(input) && !isString(input)) return input;\n\n    if (Math.abs(Number(limit)) === Infinity) {\n      limit = Number(limit);\n    } else {\n      limit = int(limit);\n    }\n\n    if (isString(input)) {\n      //NaN check on limit\n      if (limit) {\n        return limit >= 0 ? input.slice(0, limit) : input.slice(limit, input.length);\n      } else {\n        return \"\";\n      }\n    }\n\n    var out = [],\n      i, n;\n\n    // if abs(limit) exceeds maximum length, trim it\n    if (limit > input.length)\n      limit = input.length;\n    else if (limit < -input.length)\n      limit = -input.length;\n\n    if (limit > 0) {\n      i = 0;\n      n = limit;\n    } else {\n      i = input.length + limit;\n      n = input.length;\n    }\n\n    for (; i<n; i++) {\n      out.push(input[i]);\n    }\n\n    return out;\n  };\n}\n\n/**\n * @ngdoc filter\n * @name orderBy\n * @kind function\n *\n * @description\n * Orders a specified `array` by the `expression` predicate. It is ordered alphabetically\n * for strings and numerically for numbers. Note: if you notice numbers are not being sorted\n * correctly, make sure they are actually being saved as numbers and not strings.\n *\n * @param {Array} array The array to sort.\n * @param {function(*)|string|Array.<(function(*)|string)>} expression A predicate to be\n *    used by the comparator to determine the order of elements.\n *\n *    Can be one of:\n *\n *    - `function`: Getter function. The result of this function will be sorted using the\n *      `<`, `=`, `>` operator.\n *    - `string`: An Angular expression which evaluates to an object to order by, such as 'name'\n *      to sort by a property called 'name'. Optionally prefixed with `+` or `-` to control\n *      ascending or descending sort order (for example, +name or -name).\n *    - `Array`: An array of function or string predicates. The first predicate in the array\n *      is used for sorting, but when two items are equivalent, the next predicate is used.\n *\n * @param {boolean=} reverse Reverse the order of the array.\n * @returns {Array} Sorted copy of the source array.\n *\n * @example\n   <example>\n     <file name=\"index.html\">\n       <script>\n         function Ctrl($scope) {\n           $scope.friends =\n               [{name:'John', phone:'555-1212', age:10},\n                {name:'Mary', phone:'555-9876', age:19},\n                {name:'Mike', phone:'555-4321', age:21},\n                {name:'Adam', phone:'555-5678', age:35},\n                {name:'Julie', phone:'555-8765', age:29}]\n           $scope.predicate = '-age';\n         }\n       </script>\n       <div ng-controller=\"Ctrl\">\n         <pre>Sorting predicate = {{predicate}}; reverse = {{reverse}}</pre>\n         <hr/>\n         [ <a href=\"\" ng-click=\"predicate=''\">unsorted</a> ]\n         <table class=\"friend\">\n           <tr>\n             <th><a href=\"\" ng-click=\"predicate = 'name'; reverse=false\">Name</a>\n                 (<a href=\"\" ng-click=\"predicate = '-name'; reverse=false\">^</a>)</th>\n             <th><a href=\"\" ng-click=\"predicate = 'phone'; reverse=!reverse\">Phone Number</a></th>\n             <th><a href=\"\" ng-click=\"predicate = 'age'; reverse=!reverse\">Age</a></th>\n           </tr>\n           <tr ng-repeat=\"friend in friends | orderBy:predicate:reverse\">\n             <td>{{friend.name}}</td>\n             <td>{{friend.phone}}</td>\n             <td>{{friend.age}}</td>\n           </tr>\n         </table>\n       </div>\n     </file>\n   </example>\n *\n * It's also possible to call the orderBy filter manually, by injecting `$filter`, retrieving the\n * filter routine with `$filter('orderBy')`, and calling the returned filter routine with the\n * desired parameters.\n *\n * Example:\n *\n * @example\n  <example>\n    <file name=\"index.html\">\n      <div ng-controller=\"Ctrl\">\n        <table class=\"friend\">\n          <tr>\n            <th><a href=\"\" ng-click=\"reverse=false;order('name', false)\">Name</a>\n              (<a href=\"\" ng-click=\"order('-name',false)\">^</a>)</th>\n            <th><a href=\"\" ng-click=\"reverse=!reverse;order('phone', reverse)\">Phone Number</a></th>\n            <th><a href=\"\" ng-click=\"reverse=!reverse;order('age',reverse)\">Age</a></th>\n          </tr>\n          <tr ng-repeat=\"friend in friends\">\n            <td>{{friend.name}}</td>\n            <td>{{friend.phone}}</td>\n            <td>{{friend.age}}</td>\n          </tr>\n        </table>\n      </div>\n    </file>\n\n    <file name=\"script.js\">\n      function Ctrl($scope, $filter) {\n        var orderBy = $filter('orderBy');\n        $scope.friends = [\n          { name: 'John',    phone: '555-1212',    age: 10 },\n          { name: 'Mary',    phone: '555-9876',    age: 19 },\n          { name: 'Mike',    phone: '555-4321',    age: 21 },\n          { name: 'Adam',    phone: '555-5678',    age: 35 },\n          { name: 'Julie',   phone: '555-8765',    age: 29 }\n        ];\n\n        $scope.order = function(predicate, reverse) {\n          $scope.friends = orderBy($scope.friends, predicate, reverse);\n        };\n        $scope.order('-age',false);\n      }\n    </file>\n</example>\n */\norderByFilter.$inject = ['$parse'];\nfunction orderByFilter($parse){\n  return function(array, sortPredicate, reverseOrder) {\n    if (!isArray(array)) return array;\n    if (!sortPredicate) return array;\n    sortPredicate = isArray(sortPredicate) ? sortPredicate: [sortPredicate];\n    sortPredicate = map(sortPredicate, function(predicate){\n      var descending = false, get = predicate || identity;\n      if (isString(predicate)) {\n        if ((predicate.charAt(0) == '+' || predicate.charAt(0) == '-')) {\n          descending = predicate.charAt(0) == '-';\n          predicate = predicate.substring(1);\n        }\n        get = $parse(predicate);\n        if (get.constant) {\n          var key = get();\n          return reverseComparator(function(a,b) {\n            return compare(a[key], b[key]);\n          }, descending);\n        }\n      }\n      return reverseComparator(function(a,b){\n        return compare(get(a),get(b));\n      }, descending);\n    });\n    var arrayCopy = [];\n    for ( var i = 0; i < array.length; i++) { arrayCopy.push(array[i]); }\n    return arrayCopy.sort(reverseComparator(comparator, reverseOrder));\n\n    function comparator(o1, o2){\n      for ( var i = 0; i < sortPredicate.length; i++) {\n        var comp = sortPredicate[i](o1, o2);\n        if (comp !== 0) return comp;\n      }\n      return 0;\n    }\n    function reverseComparator(comp, descending) {\n      return toBoolean(descending)\n          ? function(a,b){return comp(b,a);}\n          : comp;\n    }\n    function compare(v1, v2){\n      var t1 = typeof v1;\n      var t2 = typeof v2;\n      if (t1 == t2) {\n        if (t1 == \"string\") {\n           v1 = v1.toLowerCase();\n           v2 = v2.toLowerCase();\n        }\n        if (v1 === v2) return 0;\n        return v1 < v2 ? -1 : 1;\n      } else {\n        return t1 < t2 ? -1 : 1;\n      }\n    }\n  };\n}\n\nfunction ngDirective(directive) {\n  if (isFunction(directive)) {\n    directive = {\n      link: directive\n    };\n  }\n  directive.restrict = directive.restrict || 'AC';\n  return valueFn(directive);\n}\n\n/**\n * @ngdoc directive\n * @name a\n * @restrict E\n *\n * @description\n * Modifies the default behavior of the html A tag so that the default action is prevented when\n * the href attribute is empty.\n *\n * This change permits the easy creation of action links with the `ngClick` directive\n * without changing the location or causing page reloads, e.g.:\n * `<a href=\"\" ng-click=\"list.addItem()\">Add Item</a>`\n */\nvar htmlAnchorDirective = valueFn({\n  restrict: 'E',\n  compile: function(element, attr) {\n\n    if (msie <= 8) {\n\n      // turn <a href ng-click=\"..\">link</a> into a stylable link in IE\n      // but only if it doesn't have name attribute, in which case it's an anchor\n      if (!attr.href && !attr.name) {\n        attr.$set('href', '');\n      }\n\n      // add a comment node to anchors to workaround IE bug that causes element content to be reset\n      // to new attribute content if attribute is updated with value containing @ and element also\n      // contains value with @\n      // see issue #1949\n      element.append(document.createComment('IE fix'));\n    }\n\n    if (!attr.href && !attr.xlinkHref && !attr.name) {\n      return function(scope, element) {\n        // SVGAElement does not use the href attribute, but rather the 'xlinkHref' attribute.\n        var href = toString.call(element.prop('href')) === '[object SVGAnimatedString]' ?\n                   'xlink:href' : 'href';\n        element.on('click', function(event){\n          // if we have no href url, then don't navigate anywhere.\n          if (!element.attr(href)) {\n            event.preventDefault();\n          }\n        });\n      };\n    }\n  }\n});\n\n/**\n * @ngdoc directive\n * @name ngHref\n * @restrict A\n * @priority 99\n *\n * @description\n * Using Angular markup like `{{hash}}` in an href attribute will\n * make the link go to the wrong URL if the user clicks it before\n * Angular has a chance to replace the `{{hash}}` markup with its\n * value. Until Angular replaces the markup the link will be broken\n * and will most likely return a 404 error.\n *\n * The `ngHref` directive solves this problem.\n *\n * The wrong way to write it:\n * ```html\n * <a href=\"http://www.gravatar.com/avatar/{{hash}}\"/>\n * ```\n *\n * The correct way to write it:\n * ```html\n * <a ng-href=\"http://www.gravatar.com/avatar/{{hash}}\"/>\n * ```\n *\n * @element A\n * @param {template} ngHref any string which can contain `{{}}` markup.\n *\n * @example\n * This example shows various combinations of `href`, `ng-href` and `ng-click` attributes\n * in links and their different behaviors:\n    <example>\n      <file name=\"index.html\">\n        <input ng-model=\"value\" /><br />\n        <a id=\"link-1\" href ng-click=\"value = 1\">link 1</a> (link, don't reload)<br />\n        <a id=\"link-2\" href=\"\" ng-click=\"value = 2\">link 2</a> (link, don't reload)<br />\n        <a id=\"link-3\" ng-href=\"/{{'123'}}\">link 3</a> (link, reload!)<br />\n        <a id=\"link-4\" href=\"\" name=\"xx\" ng-click=\"value = 4\">anchor</a> (link, don't reload)<br />\n        <a id=\"link-5\" name=\"xxx\" ng-click=\"value = 5\">anchor</a> (no link)<br />\n        <a id=\"link-6\" ng-href=\"{{value}}\">link</a> (link, change location)\n      </file>\n      <file name=\"protractor.js\" type=\"protractor\">\n        it('should execute ng-click but not reload when href without value', function() {\n          element(by.id('link-1')).click();\n          expect(element(by.model('value')).getAttribute('value')).toEqual('1');\n          expect(element(by.id('link-1')).getAttribute('href')).toBe('');\n        });\n\n        it('should execute ng-click but not reload when href empty string', function() {\n          element(by.id('link-2')).click();\n          expect(element(by.model('value')).getAttribute('value')).toEqual('2');\n          expect(element(by.id('link-2')).getAttribute('href')).toBe('');\n        });\n\n        it('should execute ng-click and change url when ng-href specified', function() {\n          expect(element(by.id('link-3')).getAttribute('href')).toMatch(/\\/123$/);\n\n          element(by.id('link-3')).click();\n\n          // At this point, we navigate away from an Angular page, so we need\n          // to use browser.driver to get the base webdriver.\n\n          browser.wait(function() {\n            return browser.driver.getCurrentUrl().then(function(url) {\n              return url.match(/\\/123$/);\n            });\n          }, 1000, 'page should navigate to /123');\n        });\n\n        xit('should execute ng-click but not reload when href empty string and name specified', function() {\n          element(by.id('link-4')).click();\n          expect(element(by.model('value')).getAttribute('value')).toEqual('4');\n          expect(element(by.id('link-4')).getAttribute('href')).toBe('');\n        });\n\n        it('should execute ng-click but not reload when no href but name specified', function() {\n          element(by.id('link-5')).click();\n          expect(element(by.model('value')).getAttribute('value')).toEqual('5');\n          expect(element(by.id('link-5')).getAttribute('href')).toBe(null);\n        });\n\n        it('should only change url when only ng-href', function() {\n          element(by.model('value')).clear();\n          element(by.model('value')).sendKeys('6');\n          expect(element(by.id('link-6')).getAttribute('href')).toMatch(/\\/6$/);\n\n          element(by.id('link-6')).click();\n\n          // At this point, we navigate away from an Angular page, so we need\n          // to use browser.driver to get the base webdriver.\n          browser.wait(function() {\n            return browser.driver.getCurrentUrl().then(function(url) {\n              return url.match(/\\/6$/);\n            });\n          }, 1000, 'page should navigate to /6');\n        });\n      </file>\n    </example>\n */\n\n/**\n * @ngdoc directive\n * @name ngSrc\n * @restrict A\n * @priority 99\n *\n * @description\n * Using Angular markup like `{{hash}}` in a `src` attribute doesn't\n * work right: The browser will fetch from the URL with the literal\n * text `{{hash}}` until Angular replaces the expression inside\n * `{{hash}}`. The `ngSrc` directive solves this problem.\n *\n * The buggy way to write it:\n * ```html\n * <img src=\"http://www.gravatar.com/avatar/{{hash}}\"/>\n * ```\n *\n * The correct way to write it:\n * ```html\n * <img ng-src=\"http://www.gravatar.com/avatar/{{hash}}\"/>\n * ```\n *\n * @element IMG\n * @param {template} ngSrc any string which can contain `{{}}` markup.\n */\n\n/**\n * @ngdoc directive\n * @name ngSrcset\n * @restrict A\n * @priority 99\n *\n * @description\n * Using Angular markup like `{{hash}}` in a `srcset` attribute doesn't\n * work right: The browser will fetch from the URL with the literal\n * text `{{hash}}` until Angular replaces the expression inside\n * `{{hash}}`. The `ngSrcset` directive solves this problem.\n *\n * The buggy way to write it:\n * ```html\n * <img srcset=\"http://www.gravatar.com/avatar/{{hash}} 2x\"/>\n * ```\n *\n * The correct way to write it:\n * ```html\n * <img ng-srcset=\"http://www.gravatar.com/avatar/{{hash}} 2x\"/>\n * ```\n *\n * @element IMG\n * @param {template} ngSrcset any string which can contain `{{}}` markup.\n */\n\n/**\n * @ngdoc directive\n * @name ngDisabled\n * @restrict A\n * @priority 100\n *\n * @description\n *\n * The following markup will make the button enabled on Chrome/Firefox but not on IE8 and older IEs:\n * ```html\n * <div ng-init=\"scope = { isDisabled: false }\">\n *  <button disabled=\"{{scope.isDisabled}}\">Disabled</button>\n * </div>\n * ```\n *\n * The HTML specification does not require browsers to preserve the values of boolean attributes\n * such as disabled. (Their presence means true and their absence means false.)\n * If we put an Angular interpolation expression into such an attribute then the\n * binding information would be lost when the browser removes the attribute.\n * The `ngDisabled` directive solves this problem for the `disabled` attribute.\n * This complementary directive is not removed by the browser and so provides\n * a permanent reliable place to store the binding information.\n *\n * @example\n    <example>\n      <file name=\"index.html\">\n        Click me to toggle: <input type=\"checkbox\" ng-model=\"checked\"><br/>\n        <button ng-model=\"button\" ng-disabled=\"checked\">Button</button>\n      </file>\n      <file name=\"protractor.js\" type=\"protractor\">\n        it('should toggle button', function() {\n          expect(element(by.css('button')).getAttribute('disabled')).toBeFalsy();\n          element(by.model('checked')).click();\n          expect(element(by.css('button')).getAttribute('disabled')).toBeTruthy();\n        });\n      </file>\n    </example>\n *\n * @element INPUT\n * @param {expression} ngDisabled If the {@link guide/expression expression} is truthy,\n *     then special attribute \"disabled\" will be set on the element\n */\n\n\n/**\n * @ngdoc directive\n * @name ngChecked\n * @restrict A\n * @priority 100\n *\n * @description\n * The HTML specification does not require browsers to preserve the values of boolean attributes\n * such as checked. (Their presence means true and their absence means false.)\n * If we put an Angular interpolation expression into such an attribute then the\n * binding information would be lost when the browser removes the attribute.\n * The `ngChecked` directive solves this problem for the `checked` attribute.\n * This complementary directive is not removed by the browser and so provides\n * a permanent reliable place to store the binding information.\n * @example\n    <example>\n      <file name=\"index.html\">\n        Check me to check both: <input type=\"checkbox\" ng-model=\"master\"><br/>\n        <input id=\"checkSlave\" type=\"checkbox\" ng-checked=\"master\">\n      </file>\n      <file name=\"protractor.js\" type=\"protractor\">\n        it('should check both checkBoxes', function() {\n          expect(element(by.id('checkSlave')).getAttribute('checked')).toBeFalsy();\n          element(by.model('master')).click();\n          expect(element(by.id('checkSlave')).getAttribute('checked')).toBeTruthy();\n        });\n      </file>\n    </example>\n *\n * @element INPUT\n * @param {expression} ngChecked If the {@link guide/expression expression} is truthy,\n *     then special attribute \"checked\" will be set on the element\n */\n\n\n/**\n * @ngdoc directive\n * @name ngReadonly\n * @restrict A\n * @priority 100\n *\n * @description\n * The HTML specification does not require browsers to preserve the values of boolean attributes\n * such as readonly. (Their presence means true and their absence means false.)\n * If we put an Angular interpolation expression into such an attribute then the\n * binding information would be lost when the browser removes the attribute.\n * The `ngReadonly` directive solves this problem for the `readonly` attribute.\n * This complementary directive is not removed by the browser and so provides\n * a permanent reliable place to store the binding information.\n * @example\n    <example>\n      <file name=\"index.html\">\n        Check me to make text readonly: <input type=\"checkbox\" ng-model=\"checked\"><br/>\n        <input type=\"text\" ng-readonly=\"checked\" value=\"I'm Angular\"/>\n      </file>\n      <file name=\"protractor.js\" type=\"protractor\">\n        it('should toggle readonly attr', function() {\n          expect(element(by.css('[type=\"text\"]')).getAttribute('readonly')).toBeFalsy();\n          element(by.model('checked')).click();\n          expect(element(by.css('[type=\"text\"]')).getAttribute('readonly')).toBeTruthy();\n        });\n      </file>\n    </example>\n *\n * @element INPUT\n * @param {expression} ngReadonly If the {@link guide/expression expression} is truthy,\n *     then special attribute \"readonly\" will be set on the element\n */\n\n\n/**\n * @ngdoc directive\n * @name ngSelected\n * @restrict A\n * @priority 100\n *\n * @description\n * The HTML specification does not require browsers to preserve the values of boolean attributes\n * such as selected. (Their presence means true and their absence means false.)\n * If we put an Angular interpolation expression into such an attribute then the\n * binding information would be lost when the browser removes the attribute.\n * The `ngSelected` directive solves this problem for the `selected` attribute.\n * This complementary directive is not removed by the browser and so provides\n * a permanent reliable place to store the binding information.\n *\n * @example\n    <example>\n      <file name=\"index.html\">\n        Check me to select: <input type=\"checkbox\" ng-model=\"selected\"><br/>\n        <select>\n          <option>Hello!</option>\n          <option id=\"greet\" ng-selected=\"selected\">Greetings!</option>\n        </select>\n      </file>\n      <file name=\"protractor.js\" type=\"protractor\">\n        it('should select Greetings!', function() {\n          expect(element(by.id('greet')).getAttribute('selected')).toBeFalsy();\n          element(by.model('selected')).click();\n          expect(element(by.id('greet')).getAttribute('selected')).toBeTruthy();\n        });\n      </file>\n    </example>\n *\n * @element OPTION\n * @param {expression} ngSelected If the {@link guide/expression expression} is truthy,\n *     then special attribute \"selected\" will be set on the element\n */\n\n/**\n * @ngdoc directive\n * @name ngOpen\n * @restrict A\n * @priority 100\n *\n * @description\n * The HTML specification does not require browsers to preserve the values of boolean attributes\n * such as open. (Their presence means true and their absence means false.)\n * If we put an Angular interpolation expression into such an attribute then the\n * binding information would be lost when the browser removes the attribute.\n * The `ngOpen` directive solves this problem for the `open` attribute.\n * This complementary directive is not removed by the browser and so provides\n * a permanent reliable place to store the binding information.\n * @example\n     <example>\n       <file name=\"index.html\">\n         Check me check multiple: <input type=\"checkbox\" ng-model=\"open\"><br/>\n         <details id=\"details\" ng-open=\"open\">\n            <summary>Show/Hide me</summary>\n         </details>\n       </file>\n       <file name=\"protractor.js\" type=\"protractor\">\n         it('should toggle open', function() {\n           expect(element(by.id('details')).getAttribute('open')).toBeFalsy();\n           element(by.model('open')).click();\n           expect(element(by.id('details')).getAttribute('open')).toBeTruthy();\n         });\n       </file>\n     </example>\n *\n * @element DETAILS\n * @param {expression} ngOpen If the {@link guide/expression expression} is truthy,\n *     then special attribute \"open\" will be set on the element\n */\n\nvar ngAttributeAliasDirectives = {};\n\n\n// boolean attrs are evaluated\nforEach(BOOLEAN_ATTR, function(propName, attrName) {\n  // binding to multiple is not supported\n  if (propName == \"multiple\") return;\n\n  var normalized = directiveNormalize('ng-' + attrName);\n  ngAttributeAliasDirectives[normalized] = function() {\n    return {\n      priority: 100,\n      link: function(scope, element, attr) {\n        scope.$watch(attr[normalized], function ngBooleanAttrWatchAction(value) {\n          attr.$set(attrName, !!value);\n        });\n      }\n    };\n  };\n});\n\n\n// ng-src, ng-srcset, ng-href are interpolated\nforEach(['src', 'srcset', 'href'], function(attrName) {\n  var normalized = directiveNormalize('ng-' + attrName);\n  ngAttributeAliasDirectives[normalized] = function() {\n    return {\n      priority: 99, // it needs to run after the attributes are interpolated\n      link: function(scope, element, attr) {\n        var propName = attrName,\n            name = attrName;\n\n        if (attrName === 'href' &&\n            toString.call(element.prop('href')) === '[object SVGAnimatedString]') {\n          name = 'xlinkHref';\n          attr.$attr[name] = 'xlink:href';\n          propName = null;\n        }\n\n        attr.$observe(normalized, function(value) {\n          if (!value)\n             return;\n\n          attr.$set(name, value);\n\n          // on IE, if \"ng:src\" directive declaration is used and \"src\" attribute doesn't exist\n          // then calling element.setAttribute('src', 'foo') doesn't do anything, so we need\n          // to set the property as well to achieve the desired effect.\n          // we use attr[attrName] value since $set can sanitize the url.\n          if (msie && propName) element.prop(propName, attr[name]);\n        });\n      }\n    };\n  };\n});\n\n/* global -nullFormCtrl */\nvar nullFormCtrl = {\n  $addControl: noop,\n  $removeControl: noop,\n  $setValidity: noop,\n  $setDirty: noop,\n  $setPristine: noop\n};\n\n/**\n * @ngdoc type\n * @name form.FormController\n *\n * @property {boolean} $pristine True if user has not interacted with the form yet.\n * @property {boolean} $dirty True if user has already interacted with the form.\n * @property {boolean} $valid True if all of the containing forms and controls are valid.\n * @property {boolean} $invalid True if at least one containing control or form is invalid.\n *\n * @property {Object} $error Is an object hash, containing references to all invalid controls or\n *  forms, where:\n *\n *  - keys are validation tokens (error names),\n *  - values are arrays of controls or forms that are invalid for given error name.\n *\n *\n *  Built-in validation tokens:\n *\n *  - `email`\n *  - `max`\n *  - `maxlength`\n *  - `min`\n *  - `minlength`\n *  - `number`\n *  - `pattern`\n *  - `required`\n *  - `url`\n *\n * @description\n * `FormController` keeps track of all its controls and nested forms as well as the state of them,\n * such as being valid/invalid or dirty/pristine.\n *\n * Each {@link ng.directive:form form} directive creates an instance\n * of `FormController`.\n *\n */\n//asks for $scope to fool the BC controller module\nFormController.$inject = ['$element', '$attrs', '$scope', '$animate'];\nfunction FormController(element, attrs, $scope, $animate) {\n  var form = this,\n      parentForm = element.parent().controller('form') || nullFormCtrl,\n      invalidCount = 0, // used to easily determine if we are valid\n      errors = form.$error = {},\n      controls = [];\n\n  // init state\n  form.$name = attrs.name || attrs.ngForm;\n  form.$dirty = false;\n  form.$pristine = true;\n  form.$valid = true;\n  form.$invalid = false;\n\n  parentForm.$addControl(form);\n\n  // Setup initial state of the control\n  element.addClass(PRISTINE_CLASS);\n  toggleValidCss(true);\n\n  // convenience method for easy toggling of classes\n  function toggleValidCss(isValid, validationErrorKey) {\n    validationErrorKey = validationErrorKey ? '-' + snake_case(validationErrorKey, '-') : '';\n    $animate.removeClass(element, (isValid ? INVALID_CLASS : VALID_CLASS) + validationErrorKey);\n    $animate.addClass(element, (isValid ? VALID_CLASS : INVALID_CLASS) + validationErrorKey);\n  }\n\n  /**\n   * @ngdoc method\n   * @name form.FormController#$addControl\n   *\n   * @description\n   * Register a control with the form.\n   *\n   * Input elements using ngModelController do this automatically when they are linked.\n   */\n  form.$addControl = function(control) {\n    // Breaking change - before, inputs whose name was \"hasOwnProperty\" were quietly ignored\n    // and not added to the scope.  Now we throw an error.\n    assertNotHasOwnProperty(control.$name, 'input');\n    controls.push(control);\n\n    if (control.$name) {\n      form[control.$name] = control;\n    }\n  };\n\n  /**\n   * @ngdoc method\n   * @name form.FormController#$removeControl\n   *\n   * @description\n   * Deregister a control from the form.\n   *\n   * Input elements using ngModelController do this automatically when they are destroyed.\n   */\n  form.$removeControl = function(control) {\n    if (control.$name && form[control.$name] === control) {\n      delete form[control.$name];\n    }\n    forEach(errors, function(queue, validationToken) {\n      form.$setValidity(validationToken, true, control);\n    });\n\n    arrayRemove(controls, control);\n  };\n\n  /**\n   * @ngdoc method\n   * @name form.FormController#$setValidity\n   *\n   * @description\n   * Sets the validity of a form control.\n   *\n   * This method will also propagate to parent forms.\n   */\n  form.$setValidity = function(validationToken, isValid, control) {\n    var queue = errors[validationToken];\n\n    if (isValid) {\n      if (queue) {\n        arrayRemove(queue, control);\n        if (!queue.length) {\n          invalidCount--;\n          if (!invalidCount) {\n            toggleValidCss(isValid);\n            form.$valid = true;\n            form.$invalid = false;\n          }\n          errors[validationToken] = false;\n          toggleValidCss(true, validationToken);\n          parentForm.$setValidity(validationToken, true, form);\n        }\n      }\n\n    } else {\n      if (!invalidCount) {\n        toggleValidCss(isValid);\n      }\n      if (queue) {\n        if (includes(queue, control)) return;\n      } else {\n        errors[validationToken] = queue = [];\n        invalidCount++;\n        toggleValidCss(false, validationToken);\n        parentForm.$setValidity(validationToken, false, form);\n      }\n      queue.push(control);\n\n      form.$valid = false;\n      form.$invalid = true;\n    }\n  };\n\n  /**\n   * @ngdoc method\n   * @name form.FormController#$setDirty\n   *\n   * @description\n   * Sets the form to a dirty state.\n   *\n   * This method can be called to add the 'ng-dirty' class and set the form to a dirty\n   * state (ng-dirty class). This method will also propagate to parent forms.\n   */\n  form.$setDirty = function() {\n    $animate.removeClass(element, PRISTINE_CLASS);\n    $animate.addClass(element, DIRTY_CLASS);\n    form.$dirty = true;\n    form.$pristine = false;\n    parentForm.$setDirty();\n  };\n\n  /**\n   * @ngdoc method\n   * @name form.FormController#$setPristine\n   *\n   * @description\n   * Sets the form to its pristine state.\n   *\n   * This method can be called to remove the 'ng-dirty' class and set the form to its pristine\n   * state (ng-pristine class). This method will also propagate to all the controls contained\n   * in this form.\n   *\n   * Setting a form back to a pristine state is often useful when we want to 'reuse' a form after\n   * saving or resetting it.\n   */\n  form.$setPristine = function () {\n    $animate.removeClass(element, DIRTY_CLASS);\n    $animate.addClass(element, PRISTINE_CLASS);\n    form.$dirty = false;\n    form.$pristine = true;\n    forEach(controls, function(control) {\n      control.$setPristine();\n    });\n  };\n}\n\n\n/**\n * @ngdoc directive\n * @name ngForm\n * @restrict EAC\n *\n * @description\n * Nestable alias of {@link ng.directive:form `form`} directive. HTML\n * does not allow nesting of form elements. It is useful to nest forms, for example if the validity of a\n * sub-group of controls needs to be determined.\n *\n * Note: the purpose of `ngForm` is to group controls,\n * but not to be a replacement for the `<form>` tag with all of its capabilities\n * (e.g. posting to the server, ...).\n *\n * @param {string=} ngForm|name Name of the form. If specified, the form controller will be published into\n *                       related scope, under this name.\n *\n */\n\n /**\n * @ngdoc directive\n * @name form\n * @restrict E\n *\n * @description\n * Directive that instantiates\n * {@link form.FormController FormController}.\n *\n * If the `name` attribute is specified, the form controller is published onto the current scope under\n * this name.\n *\n * # Alias: {@link ng.directive:ngForm `ngForm`}\n *\n * In Angular forms can be nested. This means that the outer form is valid when all of the child\n * forms are valid as well. However, browsers do not allow nesting of `<form>` elements, so\n * Angular provides the {@link ng.directive:ngForm `ngForm`} directive which behaves identically to\n * `<form>` but can be nested.  This allows you to have nested forms, which is very useful when\n * using Angular validation directives in forms that are dynamically generated using the\n * {@link ng.directive:ngRepeat `ngRepeat`} directive. Since you cannot dynamically generate the `name`\n * attribute of input elements using interpolation, you have to wrap each set of repeated inputs in an\n * `ngForm` directive and nest these in an outer `form` element.\n *\n *\n * # CSS classes\n *  - `ng-valid` is set if the form is valid.\n *  - `ng-invalid` is set if the form is invalid.\n *  - `ng-pristine` is set if the form is pristine.\n *  - `ng-dirty` is set if the form is dirty.\n *\n * Keep in mind that ngAnimate can detect each of these classes when added and removed.\n *\n *\n * # Submitting a form and preventing the default action\n *\n * Since the role of forms in client-side Angular applications is different than in classical\n * roundtrip apps, it is desirable for the browser not to translate the form submission into a full\n * page reload that sends the data to the server. Instead some javascript logic should be triggered\n * to handle the form submission in an application-specific way.\n *\n * For this reason, Angular prevents the default action (form submission to the server) unless the\n * `<form>` element has an `action` attribute specified.\n *\n * You can use one of the following two ways to specify what javascript method should be called when\n * a form is submitted:\n *\n * - {@link ng.directive:ngSubmit ngSubmit} directive on the form element\n * - {@link ng.directive:ngClick ngClick} directive on the first\n  *  button or input field of type submit (input[type=submit])\n *\n * To prevent double execution of the handler, use only one of the {@link ng.directive:ngSubmit ngSubmit}\n * or {@link ng.directive:ngClick ngClick} directives.\n * This is because of the following form submission rules in the HTML specification:\n *\n * - If a form has only one input field then hitting enter in this field triggers form submit\n * (`ngSubmit`)\n * - if a form has 2+ input fields and no buttons or input[type=submit] then hitting enter\n * doesn't trigger submit\n * - if a form has one or more input fields and one or more buttons or input[type=submit] then\n * hitting enter in any of the input fields will trigger the click handler on the *first* button or\n * input[type=submit] (`ngClick`) *and* a submit handler on the enclosing form (`ngSubmit`)\n *\n * @param {string=} name Name of the form. If specified, the form controller will be published into\n *                       related scope, under this name.\n *\n * ## Animation Hooks\n *\n * Animations in ngForm are triggered when any of the associated CSS classes are added and removed.\n * These classes are: `.ng-pristine`, `.ng-dirty`, `.ng-invalid` and `.ng-valid` as well as any\n * other validations that are performed within the form. Animations in ngForm are similar to how\n * they work in ngClass and animations can be hooked into using CSS transitions, keyframes as well\n * as JS animations.\n *\n * The following example shows a simple way to utilize CSS transitions to style a form element\n * that has been rendered as invalid after it has been validated:\n *\n * <pre>\n * //be sure to include ngAnimate as a module to hook into more\n * //advanced animations\n * .my-form {\n *   transition:0.5s linear all;\n *   background: white;\n * }\n * .my-form.ng-invalid {\n *   background: red;\n *   color:white;\n * }\n * </pre>\n *\n * @example\n    <example deps=\"angular-animate.js\" animations=\"true\" fixBase=\"true\">\n      <file name=\"index.html\">\n       <script>\n         function Ctrl($scope) {\n           $scope.userType = 'guest';\n         }\n       </script>\n       <style>\n        .my-form {\n          -webkit-transition:all linear 0.5s;\n          transition:all linear 0.5s;\n          background: transparent;\n        }\n        .my-form.ng-invalid {\n          background: red;\n        }\n       </style>\n       <form name=\"myForm\" ng-controller=\"Ctrl\" class=\"my-form\">\n         userType: <input name=\"input\" ng-model=\"userType\" required>\n         <span class=\"error\" ng-show=\"myForm.input.$error.required\">Required!</span><br>\n         <tt>userType = {{userType}}</tt><br>\n         <tt>myForm.input.$valid = {{myForm.input.$valid}}</tt><br>\n         <tt>myForm.input.$error = {{myForm.input.$error}}</tt><br>\n         <tt>myForm.$valid = {{myForm.$valid}}</tt><br>\n         <tt>myForm.$error.required = {{!!myForm.$error.required}}</tt><br>\n        </form>\n      </file>\n      <file name=\"protractor.js\" type=\"protractor\">\n        it('should initialize to model', function() {\n          var userType = element(by.binding('userType'));\n          var valid = element(by.binding('myForm.input.$valid'));\n\n          expect(userType.getText()).toContain('guest');\n          expect(valid.getText()).toContain('true');\n        });\n\n        it('should be invalid if empty', function() {\n          var userType = element(by.binding('userType'));\n          var valid = element(by.binding('myForm.input.$valid'));\n          var userInput = element(by.model('userType'));\n\n          userInput.clear();\n          userInput.sendKeys('');\n\n          expect(userType.getText()).toEqual('userType =');\n          expect(valid.getText()).toContain('false');\n        });\n      </file>\n    </example>\n *\n */\nvar formDirectiveFactory = function(isNgForm) {\n  return ['$timeout', function($timeout) {\n    var formDirective = {\n      name: 'form',\n      restrict: isNgForm ? 'EAC' : 'E',\n      controller: FormController,\n      compile: function() {\n        return {\n          pre: function(scope, formElement, attr, controller) {\n            if (!attr.action) {\n              // we can't use jq events because if a form is destroyed during submission the default\n              // action is not prevented. see #1238\n              //\n              // IE 9 is not affected because it doesn't fire a submit event and try to do a full\n              // page reload if the form was destroyed by submission of the form via a click handler\n              // on a button in the form. Looks like an IE9 specific bug.\n              var preventDefaultListener = function(event) {\n                event.preventDefault\n                  ? event.preventDefault()\n                  : event.returnValue = false; // IE\n              };\n\n              addEventListenerFn(formElement[0], 'submit', preventDefaultListener);\n\n              // unregister the preventDefault listener so that we don't not leak memory but in a\n              // way that will achieve the prevention of the default action.\n              formElement.on('$destroy', function() {\n                $timeout(function() {\n                  removeEventListenerFn(formElement[0], 'submit', preventDefaultListener);\n                }, 0, false);\n              });\n            }\n\n            var parentFormCtrl = formElement.parent().controller('form'),\n                alias = attr.name || attr.ngForm;\n\n            if (alias) {\n              setter(scope, alias, controller, alias);\n            }\n            if (parentFormCtrl) {\n              formElement.on('$destroy', function() {\n                parentFormCtrl.$removeControl(controller);\n                if (alias) {\n                  setter(scope, alias, undefined, alias);\n                }\n                extend(controller, nullFormCtrl); //stop propagating child destruction handlers upwards\n              });\n            }\n          }\n        };\n      }\n    };\n\n    return formDirective;\n  }];\n};\n\nvar formDirective = formDirectiveFactory();\nvar ngFormDirective = formDirectiveFactory(true);\n\n/* global\n\n    -VALID_CLASS,\n    -INVALID_CLASS,\n    -PRISTINE_CLASS,\n    -DIRTY_CLASS\n*/\n\nvar URL_REGEXP = /^(ftp|http|https):\\/\\/(\\w+:{0,1}\\w*@)?(\\S+)(:[0-9]+)?(\\/|\\/([\\w#!:.?+=&%@!\\-\\/]))?$/;\nvar EMAIL_REGEXP = /^[a-z0-9!#$%&'*+/=?^_`{|}~.-]+@[a-z0-9-]+(\\.[a-z0-9-]+)*$/i;\nvar NUMBER_REGEXP = /^\\s*(\\-|\\+)?(\\d+|(\\d*(\\.\\d*)))\\s*$/;\n\nvar inputType = {\n\n  /**\n   * @ngdoc input\n   * @name input[text]\n   *\n   * @description\n   * Standard HTML text input with angular data binding.\n   *\n   * @param {string} ngModel Assignable angular expression to data-bind to.\n   * @param {string=} name Property name of the form under which the control is published.\n   * @param {string=} required Adds `required` validation error key if the value is not entered.\n   * @param {string=} ngRequired Adds `required` attribute and `required` validation constraint to\n   *    the element when the ngRequired expression evaluates to true. Use `ngRequired` instead of\n   *    `required` when you want to data-bind to the `required` attribute.\n   * @param {number=} ngMinlength Sets `minlength` validation error key if the value is shorter than\n   *    minlength.\n   * @param {number=} ngMaxlength Sets `maxlength` validation error key if the value is longer than\n   *    maxlength.\n   * @param {string=} ngPattern Sets `pattern` validation error key if the value does not match the\n   *    RegExp pattern expression. Expected value is `/regexp/` for inline patterns or `regexp` for\n   *    patterns defined as scope expressions.\n   * @param {string=} ngChange Angular expression to be executed when input changes due to user\n   *    interaction with the input element.\n   * @param {boolean=} [ngTrim=true] If set to false Angular will not automatically trim the input.\n   *\n   * @example\n      <example name=\"text-input-directive\">\n        <file name=\"index.html\">\n         <script>\n           function Ctrl($scope) {\n             $scope.text = 'guest';\n             $scope.word = /^\\s*\\w*\\s*$/;\n           }\n         </script>\n         <form name=\"myForm\" ng-controller=\"Ctrl\">\n           Single word: <input type=\"text\" name=\"input\" ng-model=\"text\"\n                               ng-pattern=\"word\" required ng-trim=\"false\">\n           <span class=\"error\" ng-show=\"myForm.input.$error.required\">\n             Required!</span>\n           <span class=\"error\" ng-show=\"myForm.input.$error.pattern\">\n             Single word only!</span>\n\n           <tt>text = {{text}}</tt><br/>\n           <tt>myForm.input.$valid = {{myForm.input.$valid}}</tt><br/>\n           <tt>myForm.input.$error = {{myForm.input.$error}}</tt><br/>\n           <tt>myForm.$valid = {{myForm.$valid}}</tt><br/>\n           <tt>myForm.$error.required = {{!!myForm.$error.required}}</tt><br/>\n          </form>\n        </file>\n        <file name=\"protractor.js\" type=\"protractor\">\n          var text = element(by.binding('text'));\n          var valid = element(by.binding('myForm.input.$valid'));\n          var input = element(by.model('text'));\n\n          it('should initialize to model', function() {\n            expect(text.getText()).toContain('guest');\n            expect(valid.getText()).toContain('true');\n          });\n\n          it('should be invalid if empty', function() {\n            input.clear();\n            input.sendKeys('');\n\n            expect(text.getText()).toEqual('text =');\n            expect(valid.getText()).toContain('false');\n          });\n\n          it('should be invalid if multi word', function() {\n            input.clear();\n            input.sendKeys('hello world');\n\n            expect(valid.getText()).toContain('false');\n          });\n        </file>\n      </example>\n   */\n  'text': textInputType,\n\n\n  /**\n   * @ngdoc input\n   * @name input[number]\n   *\n   * @description\n   * Text input with number validation and transformation. Sets the `number` validation\n   * error if not a valid number.\n   *\n   * @param {string} ngModel Assignable angular expression to data-bind to.\n   * @param {string=} name Property name of the form under which the control is published.\n   * @param {string=} min Sets the `min` validation error key if the value entered is less than `min`.\n   * @param {string=} max Sets the `max` validation error key if the value entered is greater than `max`.\n   * @param {string=} required Sets `required` validation error key if the value is not entered.\n   * @param {string=} ngRequired Adds `required` attribute and `required` validation constraint to\n   *    the element when the ngRequired expression evaluates to true. Use `ngRequired` instead of\n   *    `required` when you want to data-bind to the `required` attribute.\n   * @param {number=} ngMinlength Sets `minlength` validation error key if the value is shorter than\n   *    minlength.\n   * @param {number=} ngMaxlength Sets `maxlength` validation error key if the value is longer than\n   *    maxlength.\n   * @param {string=} ngPattern Sets `pattern` validation error key if the value does not match the\n   *    RegExp pattern expression. Expected value is `/regexp/` for inline patterns or `regexp` for\n   *    patterns defined as scope expressions.\n   * @param {string=} ngChange Angular expression to be executed when input changes due to user\n   *    interaction with the input element.\n   *\n   * @example\n      <example name=\"number-input-directive\">\n        <file name=\"index.html\">\n         <script>\n           function Ctrl($scope) {\n             $scope.value = 12;\n           }\n         </script>\n         <form name=\"myForm\" ng-controller=\"Ctrl\">\n           Number: <input type=\"number\" name=\"input\" ng-model=\"value\"\n                          min=\"0\" max=\"99\" required>\n           <span class=\"error\" ng-show=\"myForm.input.$error.required\">\n             Required!</span>\n           <span class=\"error\" ng-show=\"myForm.input.$error.number\">\n             Not valid number!</span>\n           <tt>value = {{value}}</tt><br/>\n           <tt>myForm.input.$valid = {{myForm.input.$valid}}</tt><br/>\n           <tt>myForm.input.$error = {{myForm.input.$error}}</tt><br/>\n           <tt>myForm.$valid = {{myForm.$valid}}</tt><br/>\n           <tt>myForm.$error.required = {{!!myForm.$error.required}}</tt><br/>\n          </form>\n        </file>\n        <file name=\"protractor.js\" type=\"protractor\">\n          var value = element(by.binding('value'));\n          var valid = element(by.binding('myForm.input.$valid'));\n          var input = element(by.model('value'));\n\n          it('should initialize to model', function() {\n            expect(value.getText()).toContain('12');\n            expect(valid.getText()).toContain('true');\n          });\n\n          it('should be invalid if empty', function() {\n            input.clear();\n            input.sendKeys('');\n            expect(value.getText()).toEqual('value =');\n            expect(valid.getText()).toContain('false');\n          });\n\n          it('should be invalid if over max', function() {\n            input.clear();\n            input.sendKeys('123');\n            expect(value.getText()).toEqual('value =');\n            expect(valid.getText()).toContain('false');\n          });\n        </file>\n      </example>\n   */\n  'number': numberInputType,\n\n\n  /**\n   * @ngdoc input\n   * @name input[url]\n   *\n   * @description\n   * Text input with URL validation. Sets the `url` validation error key if the content is not a\n   * valid URL.\n   *\n   * @param {string} ngModel Assignable angular expression to data-bind to.\n   * @param {string=} name Property name of the form under which the control is published.\n   * @param {string=} required Sets `required` validation error key if the value is not entered.\n   * @param {string=} ngRequired Adds `required` attribute and `required` validation constraint to\n   *    the element when the ngRequired expression evaluates to true. Use `ngRequired` instead of\n   *    `required` when you want to data-bind to the `required` attribute.\n   * @param {number=} ngMinlength Sets `minlength` validation error key if the value is shorter than\n   *    minlength.\n   * @param {number=} ngMaxlength Sets `maxlength` validation error key if the value is longer than\n   *    maxlength.\n   * @param {string=} ngPattern Sets `pattern` validation error key if the value does not match the\n   *    RegExp pattern expression. Expected value is `/regexp/` for inline patterns or `regexp` for\n   *    patterns defined as scope expressions.\n   * @param {string=} ngChange Angular expression to be executed when input changes due to user\n   *    interaction with the input element.\n   *\n   * @example\n      <example name=\"url-input-directive\">\n        <file name=\"index.html\">\n         <script>\n           function Ctrl($scope) {\n             $scope.text = 'http://google.com';\n           }\n         </script>\n         <form name=\"myForm\" ng-controller=\"Ctrl\">\n           URL: <input type=\"url\" name=\"input\" ng-model=\"text\" required>\n           <span class=\"error\" ng-show=\"myForm.input.$error.required\">\n             Required!</span>\n           <span class=\"error\" ng-show=\"myForm.input.$error.url\">\n             Not valid url!</span>\n           <tt>text = {{text}}</tt><br/>\n           <tt>myForm.input.$valid = {{myForm.input.$valid}}</tt><br/>\n           <tt>myForm.input.$error = {{myForm.input.$error}}</tt><br/>\n           <tt>myForm.$valid = {{myForm.$valid}}</tt><br/>\n           <tt>myForm.$error.required = {{!!myForm.$error.required}}</tt><br/>\n           <tt>myForm.$error.url = {{!!myForm.$error.url}}</tt><br/>\n          </form>\n        </file>\n        <file name=\"protractor.js\" type=\"protractor\">\n          var text = element(by.binding('text'));\n          var valid = element(by.binding('myForm.input.$valid'));\n          var input = element(by.model('text'));\n\n          it('should initialize to model', function() {\n            expect(text.getText()).toContain('http://google.com');\n            expect(valid.getText()).toContain('true');\n          });\n\n          it('should be invalid if empty', function() {\n            input.clear();\n            input.sendKeys('');\n\n            expect(text.getText()).toEqual('text =');\n            expect(valid.getText()).toContain('false');\n          });\n\n          it('should be invalid if not url', function() {\n            input.clear();\n            input.sendKeys('box');\n\n            expect(valid.getText()).toContain('false');\n          });\n        </file>\n      </example>\n   */\n  'url': urlInputType,\n\n\n  /**\n   * @ngdoc input\n   * @name input[email]\n   *\n   * @description\n   * Text input with email validation. Sets the `email` validation error key if not a valid email\n   * address.\n   *\n   * @param {string} ngModel Assignable angular expression to data-bind to.\n   * @param {string=} name Property name of the form under which the control is published.\n   * @param {string=} required Sets `required` validation error key if the value is not entered.\n   * @param {string=} ngRequired Adds `required` attribute and `required` validation constraint to\n   *    the element when the ngRequired expression evaluates to true. Use `ngRequired` instead of\n   *    `required` when you want to data-bind to the `required` attribute.\n   * @param {number=} ngMinlength Sets `minlength` validation error key if the value is shorter than\n   *    minlength.\n   * @param {number=} ngMaxlength Sets `maxlength` validation error key if the value is longer than\n   *    maxlength.\n   * @param {string=} ngPattern Sets `pattern` validation error key if the value does not match the\n   *    RegExp pattern expression. Expected value is `/regexp/` for inline patterns or `regexp` for\n   *    patterns defined as scope expressions.\n   * @param {string=} ngChange Angular expression to be executed when input changes due to user\n   *    interaction with the input element.\n   *\n   * @example\n      <example name=\"email-input-directive\">\n        <file name=\"index.html\">\n         <script>\n           function Ctrl($scope) {\n             $scope.text = 'me@example.com';\n           }\n         </script>\n           <form name=\"myForm\" ng-controller=\"Ctrl\">\n             Email: <input type=\"email\" name=\"input\" ng-model=\"text\" required>\n             <span class=\"error\" ng-show=\"myForm.input.$error.required\">\n               Required!</span>\n             <span class=\"error\" ng-show=\"myForm.input.$error.email\">\n               Not valid email!</span>\n             <tt>text = {{text}}</tt><br/>\n             <tt>myForm.input.$valid = {{myForm.input.$valid}}</tt><br/>\n             <tt>myForm.input.$error = {{myForm.input.$error}}</tt><br/>\n             <tt>myForm.$valid = {{myForm.$valid}}</tt><br/>\n             <tt>myForm.$error.required = {{!!myForm.$error.required}}</tt><br/>\n             <tt>myForm.$error.email = {{!!myForm.$error.email}}</tt><br/>\n           </form>\n         </file>\n        <file name=\"protractor.js\" type=\"protractor\">\n          var text = element(by.binding('text'));\n          var valid = element(by.binding('myForm.input.$valid'));\n          var input = element(by.model('text'));\n\n          it('should initialize to model', function() {\n            expect(text.getText()).toContain('me@example.com');\n            expect(valid.getText()).toContain('true');\n          });\n\n          it('should be invalid if empty', function() {\n            input.clear();\n            input.sendKeys('');\n            expect(text.getText()).toEqual('text =');\n            expect(valid.getText()).toContain('false');\n          });\n\n          it('should be invalid if not email', function() {\n            input.clear();\n            input.sendKeys('xxx');\n\n            expect(valid.getText()).toContain('false');\n          });\n        </file>\n      </example>\n   */\n  'email': emailInputType,\n\n\n  /**\n   * @ngdoc input\n   * @name input[radio]\n   *\n   * @description\n   * HTML radio button.\n   *\n   * @param {string} ngModel Assignable angular expression to data-bind to.\n   * @param {string} value The value to which the expression should be set when selected.\n   * @param {string=} name Property name of the form under which the control is published.\n   * @param {string=} ngChange Angular expression to be executed when input changes due to user\n   *    interaction with the input element.\n   * @param {string} ngValue Angular expression which sets the value to which the expression should\n   *    be set when selected.\n   *\n   * @example\n      <example name=\"radio-input-directive\">\n        <file name=\"index.html\">\n         <script>\n           function Ctrl($scope) {\n             $scope.color = 'blue';\n             $scope.specialValue = {\n               \"id\": \"12345\",\n               \"value\": \"green\"\n             };\n           }\n         </script>\n         <form name=\"myForm\" ng-controller=\"Ctrl\">\n           <input type=\"radio\" ng-model=\"color\" value=\"red\">  Red <br/>\n           <input type=\"radio\" ng-model=\"color\" ng-value=\"specialValue\"> Green <br/>\n           <input type=\"radio\" ng-model=\"color\" value=\"blue\"> Blue <br/>\n           <tt>color = {{color | json}}</tt><br/>\n          </form>\n          Note that `ng-value=\"specialValue\"` sets radio item's value to be the value of `$scope.specialValue`.\n        </file>\n        <file name=\"protractor.js\" type=\"protractor\">\n          it('should change state', function() {\n            var color = element(by.binding('color'));\n\n            expect(color.getText()).toContain('blue');\n\n            element.all(by.model('color')).get(0).click();\n\n            expect(color.getText()).toContain('red');\n          });\n        </file>\n      </example>\n   */\n  'radio': radioInputType,\n\n\n  /**\n   * @ngdoc input\n   * @name input[checkbox]\n   *\n   * @description\n   * HTML checkbox.\n   *\n   * @param {string} ngModel Assignable angular expression to data-bind to.\n   * @param {string=} name Property name of the form under which the control is published.\n   * @param {string=} ngTrueValue The value to which the expression should be set when selected.\n   * @param {string=} ngFalseValue The value to which the expression should be set when not selected.\n   * @param {string=} ngChange Angular expression to be executed when input changes due to user\n   *    interaction with the input element.\n   *\n   * @example\n      <example name=\"checkbox-input-directive\">\n        <file name=\"index.html\">\n         <script>\n           function Ctrl($scope) {\n             $scope.value1 = true;\n             $scope.value2 = 'YES'\n           }\n         </script>\n         <form name=\"myForm\" ng-controller=\"Ctrl\">\n           Value1: <input type=\"checkbox\" ng-model=\"value1\"> <br/>\n           Value2: <input type=\"checkbox\" ng-model=\"value2\"\n                          ng-true-value=\"YES\" ng-false-value=\"NO\"> <br/>\n           <tt>value1 = {{value1}}</tt><br/>\n           <tt>value2 = {{value2}}</tt><br/>\n          </form>\n        </file>\n        <file name=\"protractor.js\" type=\"protractor\">\n          it('should change state', function() {\n            var value1 = element(by.binding('value1'));\n            var value2 = element(by.binding('value2'));\n\n            expect(value1.getText()).toContain('true');\n            expect(value2.getText()).toContain('YES');\n\n            element(by.model('value1')).click();\n            element(by.model('value2')).click();\n\n            expect(value1.getText()).toContain('false');\n            expect(value2.getText()).toContain('NO');\n          });\n        </file>\n      </example>\n   */\n  'checkbox': checkboxInputType,\n\n  'hidden': noop,\n  'button': noop,\n  'submit': noop,\n  'reset': noop,\n  'file': noop\n};\n\n// A helper function to call $setValidity and return the value / undefined,\n// a pattern that is repeated a lot in the input validation logic.\nfunction validate(ctrl, validatorName, validity, value){\n  ctrl.$setValidity(validatorName, validity);\n  return validity ? value : undefined;\n}\n\n\nfunction addNativeHtml5Validators(ctrl, validatorName, element) {\n  var validity = element.prop('validity');\n  if (isObject(validity)) {\n    var validator = function(value) {\n      // Don't overwrite previous validation, don't consider valueMissing to apply (ng-required can\n      // perform the required validation)\n      if (!ctrl.$error[validatorName] && (validity.badInput || validity.customError ||\n          validity.typeMismatch) && !validity.valueMissing) {\n        ctrl.$setValidity(validatorName, false);\n        return;\n      }\n      return value;\n    };\n    ctrl.$parsers.push(validator);\n  }\n}\n\nfunction textInputType(scope, element, attr, ctrl, $sniffer, $browser) {\n  var validity = element.prop('validity');\n  var placeholder = element[0].placeholder, noevent = {};\n\n  // In composition mode, users are still inputing intermediate text buffer,\n  // hold the listener until composition is done.\n  // More about composition events: https://developer.mozilla.org/en-US/docs/Web/API/CompositionEvent\n  if (!$sniffer.android) {\n    var composing = false;\n\n    element.on('compositionstart', function(data) {\n      composing = true;\n    });\n\n    element.on('compositionend', function() {\n      composing = false;\n      listener();\n    });\n  }\n\n  var listener = function(ev) {\n    if (composing) return;\n    var value = element.val();\n\n    // IE (11 and under) seem to emit an 'input' event if the placeholder value changes.\n    // We don't want to dirty the value when this happens, so we abort here. Unfortunately,\n    // IE also sends input events for other non-input-related things, (such as focusing on a\n    // form control), so this change is not entirely enough to solve this.\n    if (msie && (ev || noevent).type === 'input' && element[0].placeholder !== placeholder) {\n      placeholder = element[0].placeholder;\n      return;\n    }\n\n    // By default we will trim the value\n    // If the attribute ng-trim exists we will avoid trimming\n    // e.g. <input ng-model=\"foo\" ng-trim=\"false\">\n    if (toBoolean(attr.ngTrim || 'T')) {\n      value = trim(value);\n    }\n\n    if (ctrl.$viewValue !== value ||\n        // If the value is still empty/falsy, and there is no `required` error, run validators\n        // again. This enables HTML5 constraint validation errors to affect Angular validation\n        // even when the first character entered causes an error.\n        (validity && value === '' && !validity.valueMissing)) {\n      if (scope.$$phase) {\n        ctrl.$setViewValue(value);\n      } else {\n        scope.$apply(function() {\n          ctrl.$setViewValue(value);\n        });\n      }\n    }\n  };\n\n  // if the browser does support \"input\" event, we are fine - except on IE9 which doesn't fire the\n  // input event on backspace, delete or cut\n  if ($sniffer.hasEvent('input')) {\n    element.on('input', listener);\n  } else {\n    var timeout;\n\n    var deferListener = function() {\n      if (!timeout) {\n        timeout = $browser.defer(function() {\n          listener();\n          timeout = null;\n        });\n      }\n    };\n\n    element.on('keydown', function(event) {\n      var key = event.keyCode;\n\n      // ignore\n      //    command            modifiers                   arrows\n      if (key === 91 || (15 < key && key < 19) || (37 <= key && key <= 40)) return;\n\n      deferListener();\n    });\n\n    // if user modifies input value using context menu in IE, we need \"paste\" and \"cut\" events to catch it\n    if ($sniffer.hasEvent('paste')) {\n      element.on('paste cut', deferListener);\n    }\n  }\n\n  // if user paste into input using mouse on older browser\n  // or form autocomplete on newer browser, we need \"change\" event to catch it\n  element.on('change', listener);\n\n  ctrl.$render = function() {\n    element.val(ctrl.$isEmpty(ctrl.$viewValue) ? '' : ctrl.$viewValue);\n  };\n\n  // pattern validator\n  var pattern = attr.ngPattern,\n      patternValidator,\n      match;\n\n  if (pattern) {\n    var validateRegex = function(regexp, value) {\n      return validate(ctrl, 'pattern', ctrl.$isEmpty(value) || regexp.test(value), value);\n    };\n    match = pattern.match(/^\\/(.*)\\/([gim]*)$/);\n    if (match) {\n      pattern = new RegExp(match[1], match[2]);\n      patternValidator = function(value) {\n        return validateRegex(pattern, value);\n      };\n    } else {\n      patternValidator = function(value) {\n        var patternObj = scope.$eval(pattern);\n\n        if (!patternObj || !patternObj.test) {\n          throw minErr('ngPattern')('noregexp',\n            'Expected {0} to be a RegExp but was {1}. Element: {2}', pattern,\n            patternObj, startingTag(element));\n        }\n        return validateRegex(patternObj, value);\n      };\n    }\n\n    ctrl.$formatters.push(patternValidator);\n    ctrl.$parsers.push(patternValidator);\n  }\n\n  // min length validator\n  if (attr.ngMinlength) {\n    var minlength = int(attr.ngMinlength);\n    var minLengthValidator = function(value) {\n      return validate(ctrl, 'minlength', ctrl.$isEmpty(value) || value.length >= minlength, value);\n    };\n\n    ctrl.$parsers.push(minLengthValidator);\n    ctrl.$formatters.push(minLengthValidator);\n  }\n\n  // max length validator\n  if (attr.ngMaxlength) {\n    var maxlength = int(attr.ngMaxlength);\n    var maxLengthValidator = function(value) {\n      return validate(ctrl, 'maxlength', ctrl.$isEmpty(value) || value.length <= maxlength, value);\n    };\n\n    ctrl.$parsers.push(maxLengthValidator);\n    ctrl.$formatters.push(maxLengthValidator);\n  }\n}\n\nfunction numberInputType(scope, element, attr, ctrl, $sniffer, $browser) {\n  textInputType(scope, element, attr, ctrl, $sniffer, $browser);\n\n  ctrl.$parsers.push(function(value) {\n    var empty = ctrl.$isEmpty(value);\n    if (empty || NUMBER_REGEXP.test(value)) {\n      ctrl.$setValidity('number', true);\n      return value === '' ? null : (empty ? value : parseFloat(value));\n    } else {\n      ctrl.$setValidity('number', false);\n      return undefined;\n    }\n  });\n\n  addNativeHtml5Validators(ctrl, 'number', element);\n\n  ctrl.$formatters.push(function(value) {\n    return ctrl.$isEmpty(value) ? '' : '' + value;\n  });\n\n  if (attr.min) {\n    var minValidator = function(value) {\n      var min = parseFloat(attr.min);\n      return validate(ctrl, 'min', ctrl.$isEmpty(value) || value >= min, value);\n    };\n\n    ctrl.$parsers.push(minValidator);\n    ctrl.$formatters.push(minValidator);\n  }\n\n  if (attr.max) {\n    var maxValidator = function(value) {\n      var max = parseFloat(attr.max);\n      return validate(ctrl, 'max', ctrl.$isEmpty(value) || value <= max, value);\n    };\n\n    ctrl.$parsers.push(maxValidator);\n    ctrl.$formatters.push(maxValidator);\n  }\n\n  ctrl.$formatters.push(function(value) {\n    return validate(ctrl, 'number', ctrl.$isEmpty(value) || isNumber(value), value);\n  });\n}\n\nfunction urlInputType(scope, element, attr, ctrl, $sniffer, $browser) {\n  textInputType(scope, element, attr, ctrl, $sniffer, $browser);\n\n  var urlValidator = function(value) {\n    return validate(ctrl, 'url', ctrl.$isEmpty(value) || URL_REGEXP.test(value), value);\n  };\n\n  ctrl.$formatters.push(urlValidator);\n  ctrl.$parsers.push(urlValidator);\n}\n\nfunction emailInputType(scope, element, attr, ctrl, $sniffer, $browser) {\n  textInputType(scope, element, attr, ctrl, $sniffer, $browser);\n\n  var emailValidator = function(value) {\n    return validate(ctrl, 'email', ctrl.$isEmpty(value) || EMAIL_REGEXP.test(value), value);\n  };\n\n  ctrl.$formatters.push(emailValidator);\n  ctrl.$parsers.push(emailValidator);\n}\n\nfunction radioInputType(scope, element, attr, ctrl) {\n  // make the name unique, if not defined\n  if (isUndefined(attr.name)) {\n    element.attr('name', nextUid());\n  }\n\n  element.on('click', function() {\n    if (element[0].checked) {\n      scope.$apply(function() {\n        ctrl.$setViewValue(attr.value);\n      });\n    }\n  });\n\n  ctrl.$render = function() {\n    var value = attr.value;\n    element[0].checked = (value == ctrl.$viewValue);\n  };\n\n  attr.$observe('value', ctrl.$render);\n}\n\nfunction checkboxInputType(scope, element, attr, ctrl) {\n  var trueValue = attr.ngTrueValue,\n      falseValue = attr.ngFalseValue;\n\n  if (!isString(trueValue)) trueValue = true;\n  if (!isString(falseValue)) falseValue = false;\n\n  element.on('click', function() {\n    scope.$apply(function() {\n      ctrl.$setViewValue(element[0].checked);\n    });\n  });\n\n  ctrl.$render = function() {\n    element[0].checked = ctrl.$viewValue;\n  };\n\n  // Override the standard `$isEmpty` because a value of `false` means empty in a checkbox.\n  ctrl.$isEmpty = function(value) {\n    return value !== trueValue;\n  };\n\n  ctrl.$formatters.push(function(value) {\n    return value === trueValue;\n  });\n\n  ctrl.$parsers.push(function(value) {\n    return value ? trueValue : falseValue;\n  });\n}\n\n\n/**\n * @ngdoc directive\n * @name textarea\n * @restrict E\n *\n * @description\n * HTML textarea element control with angular data-binding. The data-binding and validation\n * properties of this element are exactly the same as those of the\n * {@link ng.directive:input input element}.\n *\n * @param {string} ngModel Assignable angular expression to data-bind to.\n * @param {string=} name Property name of the form under which the control is published.\n * @param {string=} required Sets `required` validation error key if the value is not entered.\n * @param {string=} ngRequired Adds `required` attribute and `required` validation constraint to\n *    the element when the ngRequired expression evaluates to true. Use `ngRequired` instead of\n *    `required` when you want to data-bind to the `required` attribute.\n * @param {number=} ngMinlength Sets `minlength` validation error key if the value is shorter than\n *    minlength.\n * @param {number=} ngMaxlength Sets `maxlength` validation error key if the value is longer than\n *    maxlength.\n * @param {string=} ngPattern Sets `pattern` validation error key if the value does not match the\n *    RegExp pattern expression. Expected value is `/regexp/` for inline patterns or `regexp` for\n *    patterns defined as scope expressions.\n * @param {string=} ngChange Angular expression to be executed when input changes due to user\n *    interaction with the input element.\n */\n\n\n/**\n * @ngdoc directive\n * @name input\n * @restrict E\n *\n * @description\n * HTML input element control with angular data-binding. Input control follows HTML5 input types\n * and polyfills the HTML5 validation behavior for older browsers.\n *\n * @param {string} ngModel Assignable angular expression to data-bind to.\n * @param {string=} name Property name of the form under which the control is published.\n * @param {string=} required Sets `required` validation error key if the value is not entered.\n * @param {boolean=} ngRequired Sets `required` attribute if set to true\n * @param {number=} ngMinlength Sets `minlength` validation error key if the value is shorter than\n *    minlength.\n * @param {number=} ngMaxlength Sets `maxlength` validation error key if the value is longer than\n *    maxlength.\n * @param {string=} ngPattern Sets `pattern` validation error key if the value does not match the\n *    RegExp pattern expression. Expected value is `/regexp/` for inline patterns or `regexp` for\n *    patterns defined as scope expressions.\n * @param {string=} ngChange Angular expression to be executed when input changes due to user\n *    interaction with the input element.\n *\n * @example\n    <example name=\"input-directive\">\n      <file name=\"index.html\">\n       <script>\n         function Ctrl($scope) {\n           $scope.user = {name: 'guest', last: 'visitor'};\n         }\n       </script>\n       <div ng-controller=\"Ctrl\">\n         <form name=\"myForm\">\n           User name: <input type=\"text\" name=\"userName\" ng-model=\"user.name\" required>\n           <span class=\"error\" ng-show=\"myForm.userName.$error.required\">\n             Required!</span><br>\n           Last name: <input type=\"text\" name=\"lastName\" ng-model=\"user.last\"\n             ng-minlength=\"3\" ng-maxlength=\"10\">\n           <span class=\"error\" ng-show=\"myForm.lastName.$error.minlength\">\n             Too short!</span>\n           <span class=\"error\" ng-show=\"myForm.lastName.$error.maxlength\">\n             Too long!</span><br>\n         </form>\n         <hr>\n         <tt>user = {{user}}</tt><br/>\n         <tt>myForm.userName.$valid = {{myForm.userName.$valid}}</tt><br>\n         <tt>myForm.userName.$error = {{myForm.userName.$error}}</tt><br>\n         <tt>myForm.lastName.$valid = {{myForm.lastName.$valid}}</tt><br>\n         <tt>myForm.lastName.$error = {{myForm.lastName.$error}}</tt><br>\n         <tt>myForm.$valid = {{myForm.$valid}}</tt><br>\n         <tt>myForm.$error.required = {{!!myForm.$error.required}}</tt><br>\n         <tt>myForm.$error.minlength = {{!!myForm.$error.minlength}}</tt><br>\n         <tt>myForm.$error.maxlength = {{!!myForm.$error.maxlength}}</tt><br>\n       </div>\n      </file>\n      <file name=\"protractor.js\" type=\"protractor\">\n        var user = element(by.binding('{{user}}'));\n        var userNameValid = element(by.binding('myForm.userName.$valid'));\n        var lastNameValid = element(by.binding('myForm.lastName.$valid'));\n        var lastNameError = element(by.binding('myForm.lastName.$error'));\n        var formValid = element(by.binding('myForm.$valid'));\n        var userNameInput = element(by.model('user.name'));\n        var userLastInput = element(by.model('user.last'));\n\n        it('should initialize to model', function() {\n          expect(user.getText()).toContain('{\"name\":\"guest\",\"last\":\"visitor\"}');\n          expect(userNameValid.getText()).toContain('true');\n          expect(formValid.getText()).toContain('true');\n        });\n\n        it('should be invalid if empty when required', function() {\n          userNameInput.clear();\n          userNameInput.sendKeys('');\n\n          expect(user.getText()).toContain('{\"last\":\"visitor\"}');\n          expect(userNameValid.getText()).toContain('false');\n          expect(formValid.getText()).toContain('false');\n        });\n\n        it('should be valid if empty when min length is set', function() {\n          userLastInput.clear();\n          userLastInput.sendKeys('');\n\n          expect(user.getText()).toContain('{\"name\":\"guest\",\"last\":\"\"}');\n          expect(lastNameValid.getText()).toContain('true');\n          expect(formValid.getText()).toContain('true');\n        });\n\n        it('should be invalid if less than required min length', function() {\n          userLastInput.clear();\n          userLastInput.sendKeys('xx');\n\n          expect(user.getText()).toContain('{\"name\":\"guest\"}');\n          expect(lastNameValid.getText()).toContain('false');\n          expect(lastNameError.getText()).toContain('minlength');\n          expect(formValid.getText()).toContain('false');\n        });\n\n        it('should be invalid if longer than max length', function() {\n          userLastInput.clear();\n          userLastInput.sendKeys('some ridiculously long name');\n\n          expect(user.getText()).toContain('{\"name\":\"guest\"}');\n          expect(lastNameValid.getText()).toContain('false');\n          expect(lastNameError.getText()).toContain('maxlength');\n          expect(formValid.getText()).toContain('false');\n        });\n      </file>\n    </example>\n */\nvar inputDirective = ['$browser', '$sniffer', function($browser, $sniffer) {\n  return {\n    restrict: 'E',\n    require: '?ngModel',\n    link: function(scope, element, attr, ctrl) {\n      if (ctrl) {\n        (inputType[lowercase(attr.type)] || inputType.text)(scope, element, attr, ctrl, $sniffer,\n                                                            $browser);\n      }\n    }\n  };\n}];\n\nvar VALID_CLASS = 'ng-valid',\n    INVALID_CLASS = 'ng-invalid',\n    PRISTINE_CLASS = 'ng-pristine',\n    DIRTY_CLASS = 'ng-dirty';\n\n/**\n * @ngdoc type\n * @name ngModel.NgModelController\n *\n * @property {string} $viewValue Actual string value in the view.\n * @property {*} $modelValue The value in the model, that the control is bound to.\n * @property {Array.<Function>} $parsers Array of functions to execute, as a pipeline, whenever\n       the control reads value from the DOM.  Each function is called, in turn, passing the value\n       through to the next. The last return value is used to populate the model.\n       Used to sanitize / convert the value as well as validation. For validation,\n       the parsers should update the validity state using\n       {@link ngModel.NgModelController#$setValidity $setValidity()},\n       and return `undefined` for invalid values.\n\n *\n * @property {Array.<Function>} $formatters Array of functions to execute, as a pipeline, whenever\n       the model value changes. Each function is called, in turn, passing the value through to the\n       next. Used to format / convert values for display in the control and validation.\n * ```js\n * function formatter(value) {\n *   if (value) {\n *     return value.toUpperCase();\n *   }\n * }\n * ngModel.$formatters.push(formatter);\n * ```\n *\n * @property {Array.<Function>} $viewChangeListeners Array of functions to execute whenever the\n *     view value has changed. It is called with no arguments, and its return value is ignored.\n *     This can be used in place of additional $watches against the model value.\n *\n * @property {Object} $error An object hash with all errors as keys.\n *\n * @property {boolean} $pristine True if user has not interacted with the control yet.\n * @property {boolean} $dirty True if user has already interacted with the control.\n * @property {boolean} $valid True if there is no error.\n * @property {boolean} $invalid True if at least one error on the control.\n *\n * @description\n *\n * `NgModelController` provides API for the `ng-model` directive. The controller contains\n * services for data-binding, validation, CSS updates, and value formatting and parsing. It\n * purposefully does not contain any logic which deals with DOM rendering or listening to\n * DOM events. Such DOM related logic should be provided by other directives which make use of\n * `NgModelController` for data-binding.\n *\n * ## Custom Control Example\n * This example shows how to use `NgModelController` with a custom control to achieve\n * data-binding. Notice how different directives (`contenteditable`, `ng-model`, and `required`)\n * collaborate together to achieve the desired result.\n *\n * Note that `contenteditable` is an HTML5 attribute, which tells the browser to let the element\n * contents be edited in place by the user.  This will not work on older browsers.\n *\n * We are using the {@link ng.service:$sce $sce} service here and include the {@link ngSanitize $sanitize}\n * module to automatically remove \"bad\" content like inline event listener (e.g. `<span onclick=\"...\">`).\n * However, as we are using `$sce` the model can still decide to to provide unsafe content if it marks\n * that content using the `$sce` service.\n *\n * <example name=\"NgModelController\" module=\"customControl\" deps=\"angular-sanitize.js\">\n    <file name=\"style.css\">\n      [contenteditable] {\n        border: 1px solid black;\n        background-color: white;\n        min-height: 20px;\n      }\n\n      .ng-invalid {\n        border: 1px solid red;\n      }\n\n    </file>\n    <file name=\"script.js\">\n      angular.module('customControl', ['ngSanitize']).\n        directive('contenteditable', ['$sce', function($sce) {\n          return {\n            restrict: 'A', // only activate on element attribute\n            require: '?ngModel', // get a hold of NgModelController\n            link: function(scope, element, attrs, ngModel) {\n              if(!ngModel) return; // do nothing if no ng-model\n\n              // Specify how UI should be updated\n              ngModel.$render = function() {\n                element.html($sce.getTrustedHtml(ngModel.$viewValue || ''));\n              };\n\n              // Listen for change events to enable binding\n              element.on('blur keyup change', function() {\n                scope.$apply(read);\n              });\n              read(); // initialize\n\n              // Write data to the model\n              function read() {\n                var html = element.html();\n                // When we clear the content editable the browser leaves a <br> behind\n                // If strip-br attribute is provided then we strip this out\n                if( attrs.stripBr && html == '<br>' ) {\n                  html = '';\n                }\n                ngModel.$setViewValue(html);\n              }\n            }\n          };\n        }]);\n    </file>\n    <file name=\"index.html\">\n      <form name=\"myForm\">\n       <div contenteditable\n            name=\"myWidget\" ng-model=\"userContent\"\n            strip-br=\"true\"\n            required>Change me!</div>\n        <span ng-show=\"myForm.myWidget.$error.required\">Required!</span>\n       <hr>\n       <textarea ng-model=\"userContent\"></textarea>\n      </form>\n    </file>\n    <file name=\"protractor.js\" type=\"protractor\">\n    it('should data-bind and become invalid', function() {\n      if (browser.params.browser == 'safari' || browser.params.browser == 'firefox') {\n        // SafariDriver can't handle contenteditable\n        // and Firefox driver can't clear contenteditables very well\n        return;\n      }\n      var contentEditable = element(by.css('[contenteditable]'));\n      var content = 'Change me!';\n\n      expect(contentEditable.getText()).toEqual(content);\n\n      contentEditable.clear();\n      contentEditable.sendKeys(protractor.Key.BACK_SPACE);\n      expect(contentEditable.getText()).toEqual('');\n      expect(contentEditable.getAttribute('class')).toMatch(/ng-invalid-required/);\n    });\n    </file>\n * </example>\n *\n *\n */\nvar NgModelController = ['$scope', '$exceptionHandler', '$attrs', '$element', '$parse', '$animate',\n    function($scope, $exceptionHandler, $attr, $element, $parse, $animate) {\n  this.$viewValue = Number.NaN;\n  this.$modelValue = Number.NaN;\n  this.$parsers = [];\n  this.$formatters = [];\n  this.$viewChangeListeners = [];\n  this.$pristine = true;\n  this.$dirty = false;\n  this.$valid = true;\n  this.$invalid = false;\n  this.$name = $attr.name;\n\n  var ngModelGet = $parse($attr.ngModel),\n      ngModelSet = ngModelGet.assign;\n\n  if (!ngModelSet) {\n    throw minErr('ngModel')('nonassign', \"Expression '{0}' is non-assignable. Element: {1}\",\n        $attr.ngModel, startingTag($element));\n  }\n\n  /**\n   * @ngdoc method\n   * @name ngModel.NgModelController#$render\n   *\n   * @description\n   * Called when the view needs to be updated. It is expected that the user of the ng-model\n   * directive will implement this method.\n   */\n  this.$render = noop;\n\n  /**\n   * @ngdoc method\n   * @name ngModel.NgModelController#$isEmpty\n   *\n   * @description\n   * This is called when we need to determine if the value of the input is empty.\n   *\n   * For instance, the required directive does this to work out if the input has data or not.\n   * The default `$isEmpty` function checks whether the value is `undefined`, `''`, `null` or `NaN`.\n   *\n   * You can override this for input directives whose concept of being empty is different to the\n   * default. The `checkboxInputType` directive does this because in its case a value of `false`\n   * implies empty.\n   *\n   * @param {*} value Reference to check.\n   * @returns {boolean} True if `value` is empty.\n   */\n  this.$isEmpty = function(value) {\n    return isUndefined(value) || value === '' || value === null || value !== value;\n  };\n\n  var parentForm = $element.inheritedData('$formController') || nullFormCtrl,\n      invalidCount = 0, // used to easily determine if we are valid\n      $error = this.$error = {}; // keep invalid keys here\n\n\n  // Setup initial state of the control\n  $element.addClass(PRISTINE_CLASS);\n  toggleValidCss(true);\n\n  // convenience method for easy toggling of classes\n  function toggleValidCss(isValid, validationErrorKey) {\n    validationErrorKey = validationErrorKey ? '-' + snake_case(validationErrorKey, '-') : '';\n    $animate.removeClass($element, (isValid ? INVALID_CLASS : VALID_CLASS) + validationErrorKey);\n    $animate.addClass($element, (isValid ? VALID_CLASS : INVALID_CLASS) + validationErrorKey);\n  }\n\n  /**\n   * @ngdoc method\n   * @name ngModel.NgModelController#$setValidity\n   *\n   * @description\n   * Change the validity state, and notifies the form when the control changes validity. (i.e. it\n   * does not notify form if given validator is already marked as invalid).\n   *\n   * This method should be called by validators - i.e. the parser or formatter functions.\n   *\n   * @param {string} validationErrorKey Name of the validator. the `validationErrorKey` will assign\n   *        to `$error[validationErrorKey]=isValid` so that it is available for data-binding.\n   *        The `validationErrorKey` should be in camelCase and will get converted into dash-case\n   *        for class name. Example: `myError` will result in `ng-valid-my-error` and `ng-invalid-my-error`\n   *        class and can be bound to as  `{{someForm.someControl.$error.myError}}` .\n   * @param {boolean} isValid Whether the current state is valid (true) or invalid (false).\n   */\n  this.$setValidity = function(validationErrorKey, isValid) {\n    // Purposeful use of ! here to cast isValid to boolean in case it is undefined\n    // jshint -W018\n    if ($error[validationErrorKey] === !isValid) return;\n    // jshint +W018\n\n    if (isValid) {\n      if ($error[validationErrorKey]) invalidCount--;\n      if (!invalidCount) {\n        toggleValidCss(true);\n        this.$valid = true;\n        this.$invalid = false;\n      }\n    } else {\n      toggleValidCss(false);\n      this.$invalid = true;\n      this.$valid = false;\n      invalidCount++;\n    }\n\n    $error[validationErrorKey] = !isValid;\n    toggleValidCss(isValid, validationErrorKey);\n\n    parentForm.$setValidity(validationErrorKey, isValid, this);\n  };\n\n  /**\n   * @ngdoc method\n   * @name ngModel.NgModelController#$setPristine\n   *\n   * @description\n   * Sets the control to its pristine state.\n   *\n   * This method can be called to remove the 'ng-dirty' class and set the control to its pristine\n   * state (ng-pristine class).\n   */\n  this.$setPristine = function () {\n    this.$dirty = false;\n    this.$pristine = true;\n    $animate.removeClass($element, DIRTY_CLASS);\n    $animate.addClass($element, PRISTINE_CLASS);\n  };\n\n  /**\n   * @ngdoc method\n   * @name ngModel.NgModelController#$setViewValue\n   *\n   * @description\n   * Update the view value.\n   *\n   * This method should be called when the view value changes, typically from within a DOM event handler.\n   * For example {@link ng.directive:input input} and\n   * {@link ng.directive:select select} directives call it.\n   *\n   * It will update the $viewValue, then pass this value through each of the functions in `$parsers`,\n   * which includes any validators. The value that comes out of this `$parsers` pipeline, be applied to\n   * `$modelValue` and the **expression** specified in the `ng-model` attribute.\n   *\n   * Lastly, all the registered change listeners, in the `$viewChangeListeners` list, are called.\n   *\n   * Note that calling this function does not trigger a `$digest`.\n   *\n   * @param {string} value Value from the view.\n   */\n  this.$setViewValue = function(value) {\n    this.$viewValue = value;\n\n    // change to dirty\n    if (this.$pristine) {\n      this.$dirty = true;\n      this.$pristine = false;\n      $animate.removeClass($element, PRISTINE_CLASS);\n      $animate.addClass($element, DIRTY_CLASS);\n      parentForm.$setDirty();\n    }\n\n    forEach(this.$parsers, function(fn) {\n      value = fn(value);\n    });\n\n    if (this.$modelValue !== value) {\n      this.$modelValue = value;\n      ngModelSet($scope, value);\n      forEach(this.$viewChangeListeners, function(listener) {\n        try {\n          listener();\n        } catch(e) {\n          $exceptionHandler(e);\n        }\n      });\n    }\n  };\n\n  // model -> value\n  var ctrl = this;\n\n  $scope.$watch(function ngModelWatch() {\n    var value = ngModelGet($scope);\n\n    // if scope model value and ngModel value are out of sync\n    if (ctrl.$modelValue !== value) {\n\n      var formatters = ctrl.$formatters,\n          idx = formatters.length;\n\n      ctrl.$modelValue = value;\n      while(idx--) {\n        value = formatters[idx](value);\n      }\n\n      if (ctrl.$viewValue !== value) {\n        ctrl.$viewValue = value;\n        ctrl.$render();\n      }\n    }\n\n    return value;\n  });\n}];\n\n\n/**\n * @ngdoc directive\n * @name ngModel\n *\n * @element input\n *\n * @description\n * The `ngModel` directive binds an `input`,`select`, `textarea` (or custom form control) to a\n * property on the scope using {@link ngModel.NgModelController NgModelController},\n * which is created and exposed by this directive.\n *\n * `ngModel` is responsible for:\n *\n * - Binding the view into the model, which other directives such as `input`, `textarea` or `select`\n *   require.\n * - Providing validation behavior (i.e. required, number, email, url).\n * - Keeping the state of the control (valid/invalid, dirty/pristine, validation errors).\n * - Setting related css classes on the element (`ng-valid`, `ng-invalid`, `ng-dirty`, `ng-pristine`) including animations.\n * - Registering the control with its parent {@link ng.directive:form form}.\n *\n * Note: `ngModel` will try to bind to the property given by evaluating the expression on the\n * current scope. If the property doesn't already exist on this scope, it will be created\n * implicitly and added to the scope.\n *\n * For best practices on using `ngModel`, see:\n *\n *  - [https://github.com/angular/angular.js/wiki/Understanding-Scopes]\n *\n * For basic examples, how to use `ngModel`, see:\n *\n *  - {@link ng.directive:input input}\n *    - {@link input[text] text}\n *    - {@link input[checkbox] checkbox}\n *    - {@link input[radio] radio}\n *    - {@link input[number] number}\n *    - {@link input[email] email}\n *    - {@link input[url] url}\n *  - {@link ng.directive:select select}\n *  - {@link ng.directive:textarea textarea}\n *\n * # CSS classes\n * The following CSS classes are added and removed on the associated input/select/textarea element\n * depending on the validity of the model.\n *\n *  - `ng-valid` is set if the model is valid.\n *  - `ng-invalid` is set if the model is invalid.\n *  - `ng-pristine` is set if the model is pristine.\n *  - `ng-dirty` is set if the model is dirty.\n *\n * Keep in mind that ngAnimate can detect each of these classes when added and removed.\n *\n * ## Animation Hooks\n *\n * Animations within models are triggered when any of the associated CSS classes are added and removed\n * on the input element which is attached to the model. These classes are: `.ng-pristine`, `.ng-dirty`,\n * `.ng-invalid` and `.ng-valid` as well as any other validations that are performed on the model itself.\n * The animations that are triggered within ngModel are similar to how they work in ngClass and\n * animations can be hooked into using CSS transitions, keyframes as well as JS animations.\n *\n * The following example shows a simple way to utilize CSS transitions to style an input element\n * that has been rendered as invalid after it has been validated:\n *\n * <pre>\n * //be sure to include ngAnimate as a module to hook into more\n * //advanced animations\n * .my-input {\n *   transition:0.5s linear all;\n *   background: white;\n * }\n * .my-input.ng-invalid {\n *   background: red;\n *   color:white;\n * }\n * </pre>\n *\n * @example\n * <example deps=\"angular-animate.js\" animations=\"true\" fixBase=\"true\">\n     <file name=\"index.html\">\n       <script>\n        function Ctrl($scope) {\n          $scope.val = '1';\n        }\n       </script>\n       <style>\n         .my-input {\n           -webkit-transition:all linear 0.5s;\n           transition:all linear 0.5s;\n           background: transparent;\n         }\n         .my-input.ng-invalid {\n           color:white;\n           background: red;\n         }\n       </style>\n       Update input to see transitions when valid/invalid.\n       Integer is a valid value.\n       <form name=\"testForm\" ng-controller=\"Ctrl\">\n         <input ng-model=\"val\" ng-pattern=\"/^\\d+$/\" name=\"anim\" class=\"my-input\" />\n       </form>\n     </file>\n * </example>\n */\nvar ngModelDirective = function() {\n  return {\n    require: ['ngModel', '^?form'],\n    controller: NgModelController,\n    link: function(scope, element, attr, ctrls) {\n      // notify others, especially parent forms\n\n      var modelCtrl = ctrls[0],\n          formCtrl = ctrls[1] || nullFormCtrl;\n\n      formCtrl.$addControl(modelCtrl);\n\n      scope.$on('$destroy', function() {\n        formCtrl.$removeControl(modelCtrl);\n      });\n    }\n  };\n};\n\n\n/**\n * @ngdoc directive\n * @name ngChange\n *\n * @description\n * Evaluate the given expression when the user changes the input.\n * The expression is evaluated immediately, unlike the JavaScript onchange event\n * which only triggers at the end of a change (usually, when the user leaves the\n * form element or presses the return key).\n * The expression is not evaluated when the value change is coming from the model.\n *\n * Note, this directive requires `ngModel` to be present.\n *\n * @element input\n * @param {expression} ngChange {@link guide/expression Expression} to evaluate upon change\n * in input value.\n *\n * @example\n * <example name=\"ngChange-directive\">\n *   <file name=\"index.html\">\n *     <script>\n *       function Controller($scope) {\n *         $scope.counter = 0;\n *         $scope.change = function() {\n *           $scope.counter++;\n *         };\n *       }\n *     </script>\n *     <div ng-controller=\"Controller\">\n *       <input type=\"checkbox\" ng-model=\"confirmed\" ng-change=\"change()\" id=\"ng-change-example1\" />\n *       <input type=\"checkbox\" ng-model=\"confirmed\" id=\"ng-change-example2\" />\n *       <label for=\"ng-change-example2\">Confirmed</label><br />\n *       <tt>debug = {{confirmed}}</tt><br/>\n *       <tt>counter = {{counter}}</tt><br/>\n *     </div>\n *   </file>\n *   <file name=\"protractor.js\" type=\"protractor\">\n *     var counter = element(by.binding('counter'));\n *     var debug = element(by.binding('confirmed'));\n *\n *     it('should evaluate the expression if changing from view', function() {\n *       expect(counter.getText()).toContain('0');\n *\n *       element(by.id('ng-change-example1')).click();\n *\n *       expect(counter.getText()).toContain('1');\n *       expect(debug.getText()).toContain('true');\n *     });\n *\n *     it('should not evaluate the expression if changing from model', function() {\n *       element(by.id('ng-change-example2')).click();\n\n *       expect(counter.getText()).toContain('0');\n *       expect(debug.getText()).toContain('true');\n *     });\n *   </file>\n * </example>\n */\nvar ngChangeDirective = valueFn({\n  require: 'ngModel',\n  link: function(scope, element, attr, ctrl) {\n    ctrl.$viewChangeListeners.push(function() {\n      scope.$eval(attr.ngChange);\n    });\n  }\n});\n\n\nvar requiredDirective = function() {\n  return {\n    require: '?ngModel',\n    link: function(scope, elm, attr, ctrl) {\n      if (!ctrl) return;\n      attr.required = true; // force truthy in case we are on non input element\n\n      var validator = function(value) {\n        if (attr.required && ctrl.$isEmpty(value)) {\n          ctrl.$setValidity('required', false);\n          return;\n        } else {\n          ctrl.$setValidity('required', true);\n          return value;\n        }\n      };\n\n      ctrl.$formatters.push(validator);\n      ctrl.$parsers.unshift(validator);\n\n      attr.$observe('required', function() {\n        validator(ctrl.$viewValue);\n      });\n    }\n  };\n};\n\n\n/**\n * @ngdoc directive\n * @name ngList\n *\n * @description\n * Text input that converts between a delimited string and an array of strings. The delimiter\n * can be a fixed string (by default a comma) or a regular expression.\n *\n * @element input\n * @param {string=} ngList optional delimiter that should be used to split the value. If\n *   specified in form `/something/` then the value will be converted into a regular expression.\n *\n * @example\n    <example name=\"ngList-directive\">\n      <file name=\"index.html\">\n       <script>\n         function Ctrl($scope) {\n           $scope.names = ['igor', 'misko', 'vojta'];\n         }\n       </script>\n       <form name=\"myForm\" ng-controller=\"Ctrl\">\n         List: <input name=\"namesInput\" ng-model=\"names\" ng-list required>\n         <span class=\"error\" ng-show=\"myForm.namesInput.$error.required\">\n           Required!</span>\n         <br>\n         <tt>names = {{names}}</tt><br/>\n         <tt>myForm.namesInput.$valid = {{myForm.namesInput.$valid}}</tt><br/>\n         <tt>myForm.namesInput.$error = {{myForm.namesInput.$error}}</tt><br/>\n         <tt>myForm.$valid = {{myForm.$valid}}</tt><br/>\n         <tt>myForm.$error.required = {{!!myForm.$error.required}}</tt><br/>\n        </form>\n      </file>\n      <file name=\"protractor.js\" type=\"protractor\">\n        var listInput = element(by.model('names'));\n        var names = element(by.binding('{{names}}'));\n        var valid = element(by.binding('myForm.namesInput.$valid'));\n        var error = element(by.css('span.error'));\n\n        it('should initialize to model', function() {\n          expect(names.getText()).toContain('[\"igor\",\"misko\",\"vojta\"]');\n          expect(valid.getText()).toContain('true');\n          expect(error.getCssValue('display')).toBe('none');\n        });\n\n        it('should be invalid if empty', function() {\n          listInput.clear();\n          listInput.sendKeys('');\n\n          expect(names.getText()).toContain('');\n          expect(valid.getText()).toContain('false');\n          expect(error.getCssValue('display')).not.toBe('none');        });\n      </file>\n    </example>\n */\nvar ngListDirective = function() {\n  return {\n    require: 'ngModel',\n    link: function(scope, element, attr, ctrl) {\n      var match = /\\/(.*)\\//.exec(attr.ngList),\n          separator = match && new RegExp(match[1]) || attr.ngList || ',';\n\n      var parse = function(viewValue) {\n        // If the viewValue is invalid (say required but empty) it will be `undefined`\n        if (isUndefined(viewValue)) return;\n\n        var list = [];\n\n        if (viewValue) {\n          forEach(viewValue.split(separator), function(value) {\n            if (value) list.push(trim(value));\n          });\n        }\n\n        return list;\n      };\n\n      ctrl.$parsers.push(parse);\n      ctrl.$formatters.push(function(value) {\n        if (isArray(value)) {\n          return value.join(', ');\n        }\n\n        return undefined;\n      });\n\n      // Override the standard $isEmpty because an empty array means the input is empty.\n      ctrl.$isEmpty = function(value) {\n        return !value || !value.length;\n      };\n    }\n  };\n};\n\n\nvar CONSTANT_VALUE_REGEXP = /^(true|false|\\d+)$/;\n/**\n * @ngdoc directive\n * @name ngValue\n *\n * @description\n * Binds the given expression to the value of `input[select]` or `input[radio]`, so\n * that when the element is selected, the `ngModel` of that element is set to the\n * bound value.\n *\n * `ngValue` is useful when dynamically generating lists of radio buttons using `ng-repeat`, as\n * shown below.\n *\n * @element input\n * @param {string=} ngValue angular expression, whose value will be bound to the `value` attribute\n *   of the `input` element\n *\n * @example\n    <example name=\"ngValue-directive\">\n      <file name=\"index.html\">\n       <script>\n          function Ctrl($scope) {\n            $scope.names = ['pizza', 'unicorns', 'robots'];\n            $scope.my = { favorite: 'unicorns' };\n          }\n       </script>\n        <form ng-controller=\"Ctrl\">\n          <h2>Which is your favorite?</h2>\n            <label ng-repeat=\"name in names\" for=\"{{name}}\">\n              {{name}}\n              <input type=\"radio\"\n                     ng-model=\"my.favorite\"\n                     ng-value=\"name\"\n                     id=\"{{name}}\"\n                     name=\"favorite\">\n            </label>\n          <div>You chose {{my.favorite}}</div>\n        </form>\n      </file>\n      <file name=\"protractor.js\" type=\"protractor\">\n        var favorite = element(by.binding('my.favorite'));\n\n        it('should initialize to model', function() {\n          expect(favorite.getText()).toContain('unicorns');\n        });\n        it('should bind the values to the inputs', function() {\n          element.all(by.model('my.favorite')).get(0).click();\n          expect(favorite.getText()).toContain('pizza');\n        });\n      </file>\n    </example>\n */\nvar ngValueDirective = function() {\n  return {\n    priority: 100,\n    compile: function(tpl, tplAttr) {\n      if (CONSTANT_VALUE_REGEXP.test(tplAttr.ngValue)) {\n        return function ngValueConstantLink(scope, elm, attr) {\n          attr.$set('value', scope.$eval(attr.ngValue));\n        };\n      } else {\n        return function ngValueLink(scope, elm, attr) {\n          scope.$watch(attr.ngValue, function valueWatchAction(value) {\n            attr.$set('value', value);\n          });\n        };\n      }\n    }\n  };\n};\n\n/**\n * @ngdoc directive\n * @name ngBind\n * @restrict AC\n *\n * @description\n * The `ngBind` attribute tells Angular to replace the text content of the specified HTML element\n * with the value of a given expression, and to update the text content when the value of that\n * expression changes.\n *\n * Typically, you don't use `ngBind` directly, but instead you use the double curly markup like\n * `{{ expression }}` which is similar but less verbose.\n *\n * It is preferable to use `ngBind` instead of `{{ expression }}` when a template is momentarily\n * displayed by the browser in its raw state before Angular compiles it. Since `ngBind` is an\n * element attribute, it makes the bindings invisible to the user while the page is loading.\n *\n * An alternative solution to this problem would be using the\n * {@link ng.directive:ngCloak ngCloak} directive.\n *\n *\n * @element ANY\n * @param {expression} ngBind {@link guide/expression Expression} to evaluate.\n *\n * @example\n * Enter a name in the Live Preview text box; the greeting below the text box changes instantly.\n   <example>\n     <file name=\"index.html\">\n       <script>\n         function Ctrl($scope) {\n           $scope.name = 'Whirled';\n         }\n       </script>\n       <div ng-controller=\"Ctrl\">\n         Enter name: <input type=\"text\" ng-model=\"name\"><br>\n         Hello <span ng-bind=\"name\"></span>!\n       </div>\n     </file>\n     <file name=\"protractor.js\" type=\"protractor\">\n       it('should check ng-bind', function() {\n         var nameInput = element(by.model('name'));\n\n         expect(element(by.binding('name')).getText()).toBe('Whirled');\n         nameInput.clear();\n         nameInput.sendKeys('world');\n         expect(element(by.binding('name')).getText()).toBe('world');\n       });\n     </file>\n   </example>\n */\nvar ngBindDirective = ngDirective(function(scope, element, attr) {\n  element.addClass('ng-binding').data('$binding', attr.ngBind);\n  scope.$watch(attr.ngBind, function ngBindWatchAction(value) {\n    // We are purposefully using == here rather than === because we want to\n    // catch when value is \"null or undefined\"\n    // jshint -W041\n    element.text(value == undefined ? '' : value);\n  });\n});\n\n\n/**\n * @ngdoc directive\n * @name ngBindTemplate\n *\n * @description\n * The `ngBindTemplate` directive specifies that the element\n * text content should be replaced with the interpolation of the template\n * in the `ngBindTemplate` attribute.\n * Unlike `ngBind`, the `ngBindTemplate` can contain multiple `{{` `}}`\n * expressions. This directive is needed since some HTML elements\n * (such as TITLE and OPTION) cannot contain SPAN elements.\n *\n * @element ANY\n * @param {string} ngBindTemplate template of form\n *   <tt>{{</tt> <tt>expression</tt> <tt>}}</tt> to eval.\n *\n * @example\n * Try it here: enter text in text box and watch the greeting change.\n   <example>\n     <file name=\"index.html\">\n       <script>\n         function Ctrl($scope) {\n           $scope.salutation = 'Hello';\n           $scope.name = 'World';\n         }\n       </script>\n       <div ng-controller=\"Ctrl\">\n        Salutation: <input type=\"text\" ng-model=\"salutation\"><br>\n        Name: <input type=\"text\" ng-model=\"name\"><br>\n        <pre ng-bind-template=\"{{salutation}} {{name}}!\"></pre>\n       </div>\n     </file>\n     <file name=\"protractor.js\" type=\"protractor\">\n       it('should check ng-bind', function() {\n         var salutationElem = element(by.binding('salutation'));\n         var salutationInput = element(by.model('salutation'));\n         var nameInput = element(by.model('name'));\n\n         expect(salutationElem.getText()).toBe('Hello World!');\n\n         salutationInput.clear();\n         salutationInput.sendKeys('Greetings');\n         nameInput.clear();\n         nameInput.sendKeys('user');\n\n         expect(salutationElem.getText()).toBe('Greetings user!');\n       });\n     </file>\n   </example>\n */\nvar ngBindTemplateDirective = ['$interpolate', function($interpolate) {\n  return function(scope, element, attr) {\n    // TODO: move this to scenario runner\n    var interpolateFn = $interpolate(element.attr(attr.$attr.ngBindTemplate));\n    element.addClass('ng-binding').data('$binding', interpolateFn);\n    attr.$observe('ngBindTemplate', function(value) {\n      element.text(value);\n    });\n  };\n}];\n\n\n/**\n * @ngdoc directive\n * @name ngBindHtml\n *\n * @description\n * Creates a binding that will innerHTML the result of evaluating the `expression` into the current\n * element in a secure way.  By default, the innerHTML-ed content will be sanitized using the {@link\n * ngSanitize.$sanitize $sanitize} service.  To utilize this functionality, ensure that `$sanitize`\n * is available, for example, by including {@link ngSanitize} in your module's dependencies (not in\n * core Angular.)  You may also bypass sanitization for values you know are safe. To do so, bind to\n * an explicitly trusted value via {@link ng.$sce#trustAsHtml $sce.trustAsHtml}.  See the example\n * under {@link ng.$sce#Example Strict Contextual Escaping (SCE)}.\n *\n * Note: If a `$sanitize` service is unavailable and the bound value isn't explicitly trusted, you\n * will have an exception (instead of an exploit.)\n *\n * @element ANY\n * @param {expression} ngBindHtml {@link guide/expression Expression} to evaluate.\n *\n * @example\n   Try it here: enter text in text box and watch the greeting change.\n\n   <example module=\"ngBindHtmlExample\" deps=\"angular-sanitize.js\">\n     <file name=\"index.html\">\n       <div ng-controller=\"ngBindHtmlCtrl\">\n        <p ng-bind-html=\"myHTML\"></p>\n       </div>\n     </file>\n\n     <file name=\"script.js\">\n       angular.module('ngBindHtmlExample', ['ngSanitize'])\n\n       .controller('ngBindHtmlCtrl', ['$scope', function ngBindHtmlCtrl($scope) {\n         $scope.myHTML =\n            'I am an <code>HTML</code>string with <a href=\"#\">links!</a> and other <em>stuff</em>';\n       }]);\n     </file>\n\n     <file name=\"protractor.js\" type=\"protractor\">\n       it('should check ng-bind-html', function() {\n         expect(element(by.binding('myHTML')).getText()).toBe(\n             'I am an HTMLstring with links! and other stuff');\n       });\n     </file>\n   </example>\n */\nvar ngBindHtmlDirective = ['$sce', '$parse', function($sce, $parse) {\n  return function(scope, element, attr) {\n    element.addClass('ng-binding').data('$binding', attr.ngBindHtml);\n\n    var parsed = $parse(attr.ngBindHtml);\n    function getStringValue() { return (parsed(scope) || '').toString(); }\n\n    scope.$watch(getStringValue, function ngBindHtmlWatchAction(value) {\n      element.html($sce.getTrustedHtml(parsed(scope)) || '');\n    });\n  };\n}];\n\nfunction classDirective(name, selector) {\n  name = 'ngClass' + name;\n  return ['$animate', function($animate) {\n    return {\n      restrict: 'AC',\n      link: function(scope, element, attr) {\n        var oldVal;\n\n        scope.$watch(attr[name], ngClassWatchAction, true);\n\n        attr.$observe('class', function(value) {\n          ngClassWatchAction(scope.$eval(attr[name]));\n        });\n\n\n        if (name !== 'ngClass') {\n          scope.$watch('$index', function($index, old$index) {\n            // jshint bitwise: false\n            var mod = $index & 1;\n            if (mod !== (old$index & 1)) {\n              var classes = arrayClasses(scope.$eval(attr[name]));\n              mod === selector ?\n                addClasses(classes) :\n                removeClasses(classes);\n            }\n          });\n        }\n\n        function addClasses(classes) {\n          var newClasses = digestClassCounts(classes, 1);\n          attr.$addClass(newClasses);\n        }\n\n        function removeClasses(classes) {\n          var newClasses = digestClassCounts(classes, -1);\n          attr.$removeClass(newClasses);\n        }\n\n        function digestClassCounts (classes, count) {\n          var classCounts = element.data('$classCounts') || {};\n          var classesToUpdate = [];\n          forEach(classes, function (className) {\n            if (count > 0 || classCounts[className]) {\n              classCounts[className] = (classCounts[className] || 0) + count;\n              if (classCounts[className] === +(count > 0)) {\n                classesToUpdate.push(className);\n              }\n            }\n          });\n          element.data('$classCounts', classCounts);\n          return classesToUpdate.join(' ');\n        }\n\n        function updateClasses (oldClasses, newClasses) {\n          var toAdd = arrayDifference(newClasses, oldClasses);\n          var toRemove = arrayDifference(oldClasses, newClasses);\n          toRemove = digestClassCounts(toRemove, -1);\n          toAdd = digestClassCounts(toAdd, 1);\n\n          if (toAdd.length === 0) {\n            $animate.removeClass(element, toRemove);\n          } else if (toRemove.length === 0) {\n            $animate.addClass(element, toAdd);\n          } else {\n            $animate.setClass(element, toAdd, toRemove);\n          }\n        }\n\n        function ngClassWatchAction(newVal) {\n          if (selector === true || scope.$index % 2 === selector) {\n            var newClasses = arrayClasses(newVal || []);\n            if (!oldVal) {\n              addClasses(newClasses);\n            } else if (!equals(newVal,oldVal)) {\n              var oldClasses = arrayClasses(oldVal);\n              updateClasses(oldClasses, newClasses);\n            }\n          }\n          oldVal = shallowCopy(newVal);\n        }\n      }\n    };\n\n    function arrayDifference(tokens1, tokens2) {\n      var values = [];\n\n      outer:\n      for(var i = 0; i < tokens1.length; i++) {\n        var token = tokens1[i];\n        for(var j = 0; j < tokens2.length; j++) {\n          if(token == tokens2[j]) continue outer;\n        }\n        values.push(token);\n      }\n      return values;\n    }\n\n    function arrayClasses (classVal) {\n      if (isArray(classVal)) {\n        return classVal;\n      } else if (isString(classVal)) {\n        return classVal.split(' ');\n      } else if (isObject(classVal)) {\n        var classes = [], i = 0;\n        forEach(classVal, function(v, k) {\n          if (v) {\n            classes = classes.concat(k.split(' '));\n          }\n        });\n        return classes;\n      }\n      return classVal;\n    }\n  }];\n}\n\n/**\n * @ngdoc directive\n * @name ngClass\n * @restrict AC\n *\n * @description\n * The `ngClass` directive allows you to dynamically set CSS classes on an HTML element by databinding\n * an expression that represents all classes to be added.\n *\n * The directive operates in three different ways, depending on which of three types the expression\n * evaluates to:\n *\n * 1. If the expression evaluates to a string, the string should be one or more space-delimited class\n * names.\n *\n * 2. If the expression evaluates to an array, each element of the array should be a string that is\n * one or more space-delimited class names.\n *\n * 3. If the expression evaluates to an object, then for each key-value pair of the\n * object with a truthy value the corresponding key is used as a class name.\n *\n * The directive won't add duplicate classes if a particular class was already set.\n *\n * When the expression changes, the previously added classes are removed and only then the\n * new classes are added.\n *\n * @animations\n * add - happens just before the class is applied to the element\n * remove - happens just before the class is removed from the element\n *\n * @element ANY\n * @param {expression} ngClass {@link guide/expression Expression} to eval. The result\n *   of the evaluation can be a string representing space delimited class\n *   names, an array, or a map of class names to boolean values. In the case of a map, the\n *   names of the properties whose values are truthy will be added as css classes to the\n *   element.\n *\n * @example Example that demonstrates basic bindings via ngClass directive.\n   <example>\n     <file name=\"index.html\">\n       <p ng-class=\"{strike: deleted, bold: important, red: error}\">Map Syntax Example</p>\n       <input type=\"checkbox\" ng-model=\"deleted\"> deleted (apply \"strike\" class)<br>\n       <input type=\"checkbox\" ng-model=\"important\"> important (apply \"bold\" class)<br>\n       <input type=\"checkbox\" ng-model=\"error\"> error (apply \"red\" class)\n       <hr>\n       <p ng-class=\"style\">Using String Syntax</p>\n       <input type=\"text\" ng-model=\"style\" placeholder=\"Type: bold strike red\">\n       <hr>\n       <p ng-class=\"[style1, style2, style3]\">Using Array Syntax</p>\n       <input ng-model=\"style1\" placeholder=\"Type: bold, strike or red\"><br>\n       <input ng-model=\"style2\" placeholder=\"Type: bold, strike or red\"><br>\n       <input ng-model=\"style3\" placeholder=\"Type: bold, strike or red\"><br>\n     </file>\n     <file name=\"style.css\">\n       .strike {\n         text-decoration: line-through;\n       }\n       .bold {\n           font-weight: bold;\n       }\n       .red {\n           color: red;\n       }\n     </file>\n     <file name=\"protractor.js\" type=\"protractor\">\n       var ps = element.all(by.css('p'));\n\n       it('should let you toggle the class', function() {\n\n         expect(ps.first().getAttribute('class')).not.toMatch(/bold/);\n         expect(ps.first().getAttribute('class')).not.toMatch(/red/);\n\n         element(by.model('important')).click();\n         expect(ps.first().getAttribute('class')).toMatch(/bold/);\n\n         element(by.model('error')).click();\n         expect(ps.first().getAttribute('class')).toMatch(/red/);\n       });\n\n       it('should let you toggle string example', function() {\n         expect(ps.get(1).getAttribute('class')).toBe('');\n         element(by.model('style')).clear();\n         element(by.model('style')).sendKeys('red');\n         expect(ps.get(1).getAttribute('class')).toBe('red');\n       });\n\n       it('array example should have 3 classes', function() {\n         expect(ps.last().getAttribute('class')).toBe('');\n         element(by.model('style1')).sendKeys('bold');\n         element(by.model('style2')).sendKeys('strike');\n         element(by.model('style3')).sendKeys('red');\n         expect(ps.last().getAttribute('class')).toBe('bold strike red');\n       });\n     </file>\n   </example>\n\n   ## Animations\n\n   The example below demonstrates how to perform animations using ngClass.\n\n   <example module=\"ngAnimate\" deps=\"angular-animate.js\" animations=\"true\">\n     <file name=\"index.html\">\n      <input id=\"setbtn\" type=\"button\" value=\"set\" ng-click=\"myVar='my-class'\">\n      <input id=\"clearbtn\" type=\"button\" value=\"clear\" ng-click=\"myVar=''\">\n      <br>\n      <span class=\"base-class\" ng-class=\"myVar\">Sample Text</span>\n     </file>\n     <file name=\"style.css\">\n       .base-class {\n         -webkit-transition:all cubic-bezier(0.250, 0.460, 0.450, 0.940) 0.5s;\n         transition:all cubic-bezier(0.250, 0.460, 0.450, 0.940) 0.5s;\n       }\n\n       .base-class.my-class {\n         color: red;\n         font-size:3em;\n       }\n     </file>\n     <file name=\"protractor.js\" type=\"protractor\">\n       it('should check ng-class', function() {\n         expect(element(by.css('.base-class')).getAttribute('class')).not.\n           toMatch(/my-class/);\n\n         element(by.id('setbtn')).click();\n\n         expect(element(by.css('.base-class')).getAttribute('class')).\n           toMatch(/my-class/);\n\n         element(by.id('clearbtn')).click();\n\n         expect(element(by.css('.base-class')).getAttribute('class')).not.\n           toMatch(/my-class/);\n       });\n     </file>\n   </example>\n\n\n   ## ngClass and pre-existing CSS3 Transitions/Animations\n   The ngClass directive still supports CSS3 Transitions/Animations even if they do not follow the ngAnimate CSS naming structure.\n   Upon animation ngAnimate will apply supplementary CSS classes to track the start and end of an animation, but this will not hinder\n   any pre-existing CSS transitions already on the element. To get an idea of what happens during a class-based animation, be sure\n   to view the step by step details of {@link ngAnimate.$animate#addclass $animate.addClass} and\n   {@link ngAnimate.$animate#removeclass $animate.removeClass}.\n */\nvar ngClassDirective = classDirective('', true);\n\n/**\n * @ngdoc directive\n * @name ngClassOdd\n * @restrict AC\n *\n * @description\n * The `ngClassOdd` and `ngClassEven` directives work exactly as\n * {@link ng.directive:ngClass ngClass}, except they work in\n * conjunction with `ngRepeat` and take effect only on odd (even) rows.\n *\n * This directive can be applied only within the scope of an\n * {@link ng.directive:ngRepeat ngRepeat}.\n *\n * @element ANY\n * @param {expression} ngClassOdd {@link guide/expression Expression} to eval. The result\n *   of the evaluation can be a string representing space delimited class names or an array.\n *\n * @example\n   <example>\n     <file name=\"index.html\">\n        <ol ng-init=\"names=['John', 'Mary', 'Cate', 'Suz']\">\n          <li ng-repeat=\"name in names\">\n           <span ng-class-odd=\"'odd'\" ng-class-even=\"'even'\">\n             {{name}}\n           </span>\n          </li>\n        </ol>\n     </file>\n     <file name=\"style.css\">\n       .odd {\n         color: red;\n       }\n       .even {\n         color: blue;\n       }\n     </file>\n     <file name=\"protractor.js\" type=\"protractor\">\n       it('should check ng-class-odd and ng-class-even', function() {\n         expect(element(by.repeater('name in names').row(0).column('name')).getAttribute('class')).\n           toMatch(/odd/);\n         expect(element(by.repeater('name in names').row(1).column('name')).getAttribute('class')).\n           toMatch(/even/);\n       });\n     </file>\n   </example>\n */\nvar ngClassOddDirective = classDirective('Odd', 0);\n\n/**\n * @ngdoc directive\n * @name ngClassEven\n * @restrict AC\n *\n * @description\n * The `ngClassOdd` and `ngClassEven` directives work exactly as\n * {@link ng.directive:ngClass ngClass}, except they work in\n * conjunction with `ngRepeat` and take effect only on odd (even) rows.\n *\n * This directive can be applied only within the scope of an\n * {@link ng.directive:ngRepeat ngRepeat}.\n *\n * @element ANY\n * @param {expression} ngClassEven {@link guide/expression Expression} to eval. The\n *   result of the evaluation can be a string representing space delimited class names or an array.\n *\n * @example\n   <example>\n     <file name=\"index.html\">\n        <ol ng-init=\"names=['John', 'Mary', 'Cate', 'Suz']\">\n          <li ng-repeat=\"name in names\">\n           <span ng-class-odd=\"'odd'\" ng-class-even=\"'even'\">\n             {{name}} &nbsp; &nbsp; &nbsp;\n           </span>\n          </li>\n        </ol>\n     </file>\n     <file name=\"style.css\">\n       .odd {\n         color: red;\n       }\n       .even {\n         color: blue;\n       }\n     </file>\n     <file name=\"protractor.js\" type=\"protractor\">\n       it('should check ng-class-odd and ng-class-even', function() {\n         expect(element(by.repeater('name in names').row(0).column('name')).getAttribute('class')).\n           toMatch(/odd/);\n         expect(element(by.repeater('name in names').row(1).column('name')).getAttribute('class')).\n           toMatch(/even/);\n       });\n     </file>\n   </example>\n */\nvar ngClassEvenDirective = classDirective('Even', 1);\n\n/**\n * @ngdoc directive\n * @name ngCloak\n * @restrict AC\n *\n * @description\n * The `ngCloak` directive is used to prevent the Angular html template from being briefly\n * displayed by the browser in its raw (uncompiled) form while your application is loading. Use this\n * directive to avoid the undesirable flicker effect caused by the html template display.\n *\n * The directive can be applied to the `<body>` element, but the preferred usage is to apply\n * multiple `ngCloak` directives to small portions of the page to permit progressive rendering\n * of the browser view.\n *\n * `ngCloak` works in cooperation with the following css rule embedded within `angular.js` and\n * `angular.min.js`.\n * For CSP mode please add `angular-csp.css` to your html file (see {@link ng.directive:ngCsp ngCsp}).\n *\n * ```css\n * [ng\\:cloak], [ng-cloak], [data-ng-cloak], [x-ng-cloak], .ng-cloak, .x-ng-cloak {\n *   display: none !important;\n * }\n * ```\n *\n * When this css rule is loaded by the browser, all html elements (including their children) that\n * are tagged with the `ngCloak` directive are hidden. When Angular encounters this directive\n * during the compilation of the template it deletes the `ngCloak` element attribute, making\n * the compiled element visible.\n *\n * For the best result, the `angular.js` script must be loaded in the head section of the html\n * document; alternatively, the css rule above must be included in the external stylesheet of the\n * application.\n *\n * Legacy browsers, like IE7, do not provide attribute selector support (added in CSS 2.1) so they\n * cannot match the `[ng\\:cloak]` selector. To work around this limitation, you must add the css\n * class `ng-cloak` in addition to the `ngCloak` directive as shown in the example below.\n *\n * @element ANY\n *\n * @example\n   <example>\n     <file name=\"index.html\">\n        <div id=\"template1\" ng-cloak>{{ 'hello' }}</div>\n        <div id=\"template2\" ng-cloak class=\"ng-cloak\">{{ 'hello IE7' }}</div>\n     </file>\n     <file name=\"protractor.js\" type=\"protractor\">\n       it('should remove the template directive and css class', function() {\n         expect($('#template1').getAttribute('ng-cloak')).\n           toBeNull();\n         expect($('#template2').getAttribute('ng-cloak')).\n           toBeNull();\n       });\n     </file>\n   </example>\n *\n */\nvar ngCloakDirective = ngDirective({\n  compile: function(element, attr) {\n    attr.$set('ngCloak', undefined);\n    element.removeClass('ng-cloak');\n  }\n});\n\n/**\n * @ngdoc directive\n * @name ngController\n *\n * @description\n * The `ngController` directive attaches a controller class to the view. This is a key aspect of how angular\n * supports the principles behind the Model-View-Controller design pattern.\n *\n * MVC components in angular:\n *\n * * Model — The Model is scope properties; scopes are attached to the DOM where scope properties\n *   are accessed through bindings.\n * * View — The template (HTML with data bindings) that is rendered into the View.\n * * Controller — The `ngController` directive specifies a Controller class; the class contains business\n *   logic behind the application to decorate the scope with functions and values\n *\n * Note that you can also attach controllers to the DOM by declaring it in a route definition\n * via the {@link ngRoute.$route $route} service. A common mistake is to declare the controller\n * again using `ng-controller` in the template itself.  This will cause the controller to be attached\n * and executed twice.\n *\n * @element ANY\n * @scope\n * @param {expression} ngController Name of a globally accessible constructor function or an\n *     {@link guide/expression expression} that on the current scope evaluates to a\n *     constructor function. The controller instance can be published into a scope property\n *     by specifying `as propertyName`.\n *\n * @example\n * Here is a simple form for editing user contact information. Adding, removing, clearing, and\n * greeting are methods declared on the controller (see source tab). These methods can\n * easily be called from the angular markup. Any changes to the data are automatically reflected\n * in the View without the need for a manual update.\n *\n * Two different declaration styles are included below:\n *\n * * one binds methods and properties directly onto the controller using `this`:\n * `ng-controller=\"SettingsController1 as settings\"`\n * * one injects `$scope` into the controller:\n * `ng-controller=\"SettingsController2\"`\n *\n * The second option is more common in the Angular community, and is generally used in boilerplates\n * and in this guide. However, there are advantages to binding properties directly to the controller\n * and avoiding scope.\n *\n * * Using `controller as` makes it obvious which controller you are accessing in the template when\n * multiple controllers apply to an element.\n * * If you are writing your controllers as classes you have easier access to the properties and\n * methods, which will appear on the scope, from inside the controller code.\n * * Since there is always a `.` in the bindings, you don't have to worry about prototypal\n * inheritance masking primitives.\n *\n * This example demonstrates the `controller as` syntax.\n *\n * <example name=\"ngControllerAs\">\n *   <file name=\"index.html\">\n *    <div id=\"ctrl-as-exmpl\" ng-controller=\"SettingsController1 as settings\">\n *      Name: <input type=\"text\" ng-model=\"settings.name\"/>\n *      [ <a href=\"\" ng-click=\"settings.greet()\">greet</a> ]<br/>\n *      Contact:\n *      <ul>\n *        <li ng-repeat=\"contact in settings.contacts\">\n *          <select ng-model=\"contact.type\">\n *             <option>phone</option>\n *             <option>email</option>\n *          </select>\n *          <input type=\"text\" ng-model=\"contact.value\"/>\n *          [ <a href=\"\" ng-click=\"settings.clearContact(contact)\">clear</a>\n *          | <a href=\"\" ng-click=\"settings.removeContact(contact)\">X</a> ]\n *        </li>\n *        <li>[ <a href=\"\" ng-click=\"settings.addContact()\">add</a> ]</li>\n *     </ul>\n *    </div>\n *   </file>\n *   <file name=\"app.js\">\n *    function SettingsController1() {\n *      this.name = \"John Smith\";\n *      this.contacts = [\n *        {type: 'phone', value: '408 555 1212'},\n *        {type: 'email', value: 'john.smith@example.org'} ];\n *    }\n *\n *    SettingsController1.prototype.greet = function() {\n *      alert(this.name);\n *    };\n *\n *    SettingsController1.prototype.addContact = function() {\n *      this.contacts.push({type: 'email', value: 'yourname@example.org'});\n *    };\n *\n *    SettingsController1.prototype.removeContact = function(contactToRemove) {\n *     var index = this.contacts.indexOf(contactToRemove);\n *      this.contacts.splice(index, 1);\n *    };\n *\n *    SettingsController1.prototype.clearContact = function(contact) {\n *      contact.type = 'phone';\n *      contact.value = '';\n *    };\n *   </file>\n *   <file name=\"protractor.js\" type=\"protractor\">\n *     it('should check controller as', function() {\n *       var container = element(by.id('ctrl-as-exmpl'));\n *         expect(container.findElement(by.model('settings.name'))\n *           .getAttribute('value')).toBe('John Smith');\n *\n *       var firstRepeat =\n *           container.findElement(by.repeater('contact in settings.contacts').row(0));\n *       var secondRepeat =\n *           container.findElement(by.repeater('contact in settings.contacts').row(1));\n *\n *       expect(firstRepeat.findElement(by.model('contact.value')).getAttribute('value'))\n *           .toBe('408 555 1212');\n *\n *       expect(secondRepeat.findElement(by.model('contact.value')).getAttribute('value'))\n *           .toBe('john.smith@example.org');\n *\n *       firstRepeat.findElement(by.linkText('clear')).click();\n *\n *       expect(firstRepeat.findElement(by.model('contact.value')).getAttribute('value'))\n *           .toBe('');\n *\n *       container.findElement(by.linkText('add')).click();\n *\n *       expect(container.findElement(by.repeater('contact in settings.contacts').row(2))\n *           .findElement(by.model('contact.value'))\n *           .getAttribute('value'))\n *           .toBe('yourname@example.org');\n *     });\n *   </file>\n * </example>\n *\n * This example demonstrates the \"attach to `$scope`\" style of controller.\n *\n * <example name=\"ngController\">\n *  <file name=\"index.html\">\n *   <div id=\"ctrl-exmpl\" ng-controller=\"SettingsController2\">\n *     Name: <input type=\"text\" ng-model=\"name\"/>\n *     [ <a href=\"\" ng-click=\"greet()\">greet</a> ]<br/>\n *     Contact:\n *     <ul>\n *       <li ng-repeat=\"contact in contacts\">\n *         <select ng-model=\"contact.type\">\n *            <option>phone</option>\n *            <option>email</option>\n *         </select>\n *         <input type=\"text\" ng-model=\"contact.value\"/>\n *         [ <a href=\"\" ng-click=\"clearContact(contact)\">clear</a>\n *         | <a href=\"\" ng-click=\"removeContact(contact)\">X</a> ]\n *       </li>\n *       <li>[ <a href=\"\" ng-click=\"addContact()\">add</a> ]</li>\n *    </ul>\n *   </div>\n *  </file>\n *  <file name=\"app.js\">\n *   function SettingsController2($scope) {\n *     $scope.name = \"John Smith\";\n *     $scope.contacts = [\n *       {type:'phone', value:'408 555 1212'},\n *       {type:'email', value:'john.smith@example.org'} ];\n *\n *     $scope.greet = function() {\n *       alert($scope.name);\n *     };\n *\n *     $scope.addContact = function() {\n *       $scope.contacts.push({type:'email', value:'yourname@example.org'});\n *     };\n *\n *     $scope.removeContact = function(contactToRemove) {\n *       var index = $scope.contacts.indexOf(contactToRemove);\n *       $scope.contacts.splice(index, 1);\n *     };\n *\n *     $scope.clearContact = function(contact) {\n *       contact.type = 'phone';\n *       contact.value = '';\n *     };\n *   }\n *  </file>\n *  <file name=\"protractor.js\" type=\"protractor\">\n *    it('should check controller', function() {\n *      var container = element(by.id('ctrl-exmpl'));\n *\n *      expect(container.findElement(by.model('name'))\n *          .getAttribute('value')).toBe('John Smith');\n *\n *      var firstRepeat =\n *          container.findElement(by.repeater('contact in contacts').row(0));\n *      var secondRepeat =\n *          container.findElement(by.repeater('contact in contacts').row(1));\n *\n *      expect(firstRepeat.findElement(by.model('contact.value')).getAttribute('value'))\n *          .toBe('408 555 1212');\n *      expect(secondRepeat.findElement(by.model('contact.value')).getAttribute('value'))\n *          .toBe('john.smith@example.org');\n *\n *      firstRepeat.findElement(by.linkText('clear')).click();\n *\n *      expect(firstRepeat.findElement(by.model('contact.value')).getAttribute('value'))\n *          .toBe('');\n *\n *      container.findElement(by.linkText('add')).click();\n *\n *      expect(container.findElement(by.repeater('contact in contacts').row(2))\n *          .findElement(by.model('contact.value'))\n *          .getAttribute('value'))\n *          .toBe('yourname@example.org');\n *    });\n *  </file>\n *</example>\n\n */\nvar ngControllerDirective = [function() {\n  return {\n    scope: true,\n    controller: '@',\n    priority: 500\n  };\n}];\n\n/**\n * @ngdoc directive\n * @name ngCsp\n *\n * @element html\n * @description\n * Enables [CSP (Content Security Policy)](https://developer.mozilla.org/en/Security/CSP) support.\n *\n * This is necessary when developing things like Google Chrome Extensions.\n *\n * CSP forbids apps to use `eval` or `Function(string)` generated functions (among other things).\n * For us to be compatible, we just need to implement the \"getterFn\" in $parse without violating\n * any of these restrictions.\n *\n * AngularJS uses `Function(string)` generated functions as a speed optimization. Applying the `ngCsp`\n * directive will cause Angular to use CSP compatibility mode. When this mode is on AngularJS will\n * evaluate all expressions up to 30% slower than in non-CSP mode, but no security violations will\n * be raised.\n *\n * CSP forbids JavaScript to inline stylesheet rules. In non CSP mode Angular automatically\n * includes some CSS rules (e.g. {@link ng.directive:ngCloak ngCloak}).\n * To make those directives work in CSP mode, include the `angular-csp.css` manually.\n *\n * In order to use this feature put the `ngCsp` directive on the root element of the application.\n *\n * *Note: This directive is only available in the `ng-csp` and `data-ng-csp` attribute form.*\n *\n * @example\n * This example shows how to apply the `ngCsp` directive to the `html` tag.\n   ```html\n     <!doctype html>\n     <html ng-app ng-csp>\n     ...\n     ...\n     </html>\n   ```\n */\n\n// ngCsp is not implemented as a proper directive any more, because we need it be processed while we bootstrap\n// the system (before $parse is instantiated), for this reason we just have a csp() fn that looks for ng-csp attribute\n// anywhere in the current doc\n\n/**\n * @ngdoc directive\n * @name ngClick\n *\n * @description\n * The ngClick directive allows you to specify custom behavior when\n * an element is clicked.\n *\n * @element ANY\n * @priority 0\n * @param {expression} ngClick {@link guide/expression Expression} to evaluate upon\n * click. ({@link guide/expression#-event- Event object is available as `$event`})\n *\n * @example\n   <example>\n     <file name=\"index.html\">\n      <button ng-click=\"count = count + 1\" ng-init=\"count=0\">\n        Increment\n      </button>\n      count: {{count}}\n     </file>\n     <file name=\"protractor.js\" type=\"protractor\">\n       it('should check ng-click', function() {\n         expect(element(by.binding('count')).getText()).toMatch('0');\n         element(by.css('button')).click();\n         expect(element(by.binding('count')).getText()).toMatch('1');\n       });\n     </file>\n   </example>\n */\n/*\n * A directive that allows creation of custom onclick handlers that are defined as angular\n * expressions and are compiled and executed within the current scope.\n *\n * Events that are handled via these handler are always configured not to propagate further.\n */\nvar ngEventDirectives = {};\nforEach(\n  'click dblclick mousedown mouseup mouseover mouseout mousemove mouseenter mouseleave keydown keyup keypress submit focus blur copy cut paste'.split(' '),\n  function(name) {\n    var directiveName = directiveNormalize('ng-' + name);\n    ngEventDirectives[directiveName] = ['$parse', function($parse) {\n      return {\n        compile: function($element, attr) {\n          var fn = $parse(attr[directiveName]);\n          return function(scope, element, attr) {\n            element.on(lowercase(name), function(event) {\n              scope.$apply(function() {\n                fn(scope, {$event:event});\n              });\n            });\n          };\n        }\n      };\n    }];\n  }\n);\n\n/**\n * @ngdoc directive\n * @name ngDblclick\n *\n * @description\n * The `ngDblclick` directive allows you to specify custom behavior on a dblclick event.\n *\n * @element ANY\n * @priority 0\n * @param {expression} ngDblclick {@link guide/expression Expression} to evaluate upon\n * a dblclick. (The Event object is available as `$event`)\n *\n * @example\n   <example>\n     <file name=\"index.html\">\n      <button ng-dblclick=\"count = count + 1\" ng-init=\"count=0\">\n        Increment (on double click)\n      </button>\n      count: {{count}}\n     </file>\n   </example>\n */\n\n\n/**\n * @ngdoc directive\n * @name ngMousedown\n *\n * @description\n * The ngMousedown directive allows you to specify custom behavior on mousedown event.\n *\n * @element ANY\n * @priority 0\n * @param {expression} ngMousedown {@link guide/expression Expression} to evaluate upon\n * mousedown. ({@link guide/expression#-event- Event object is available as `$event`})\n *\n * @example\n   <example>\n     <file name=\"index.html\">\n      <button ng-mousedown=\"count = count + 1\" ng-init=\"count=0\">\n        Increment (on mouse down)\n      </button>\n      count: {{count}}\n     </file>\n   </example>\n */\n\n\n/**\n * @ngdoc directive\n * @name ngMouseup\n *\n * @description\n * Specify custom behavior on mouseup event.\n *\n * @element ANY\n * @priority 0\n * @param {expression} ngMouseup {@link guide/expression Expression} to evaluate upon\n * mouseup. ({@link guide/expression#-event- Event object is available as `$event`})\n *\n * @example\n   <example>\n     <file name=\"index.html\">\n      <button ng-mouseup=\"count = count + 1\" ng-init=\"count=0\">\n        Increment (on mouse up)\n      </button>\n      count: {{count}}\n     </file>\n   </example>\n */\n\n/**\n * @ngdoc directive\n * @name ngMouseover\n *\n * @description\n * Specify custom behavior on mouseover event.\n *\n * @element ANY\n * @priority 0\n * @param {expression} ngMouseover {@link guide/expression Expression} to evaluate upon\n * mouseover. ({@link guide/expression#-event- Event object is available as `$event`})\n *\n * @example\n   <example>\n     <file name=\"index.html\">\n      <button ng-mouseover=\"count = count + 1\" ng-init=\"count=0\">\n        Increment (when mouse is over)\n      </button>\n      count: {{count}}\n     </file>\n   </example>\n */\n\n\n/**\n * @ngdoc directive\n * @name ngMouseenter\n *\n * @description\n * Specify custom behavior on mouseenter event.\n *\n * @element ANY\n * @priority 0\n * @param {expression} ngMouseenter {@link guide/expression Expression} to evaluate upon\n * mouseenter. ({@link guide/expression#-event- Event object is available as `$event`})\n *\n * @example\n   <example>\n     <file name=\"index.html\">\n      <button ng-mouseenter=\"count = count + 1\" ng-init=\"count=0\">\n        Increment (when mouse enters)\n      </button>\n      count: {{count}}\n     </file>\n   </example>\n */\n\n\n/**\n * @ngdoc directive\n * @name ngMouseleave\n *\n * @description\n * Specify custom behavior on mouseleave event.\n *\n * @element ANY\n * @priority 0\n * @param {expression} ngMouseleave {@link guide/expression Expression} to evaluate upon\n * mouseleave. ({@link guide/expression#-event- Event object is available as `$event`})\n *\n * @example\n   <example>\n     <file name=\"index.html\">\n      <button ng-mouseleave=\"count = count + 1\" ng-init=\"count=0\">\n        Increment (when mouse leaves)\n      </button>\n      count: {{count}}\n     </file>\n   </example>\n */\n\n\n/**\n * @ngdoc directive\n * @name ngMousemove\n *\n * @description\n * Specify custom behavior on mousemove event.\n *\n * @element ANY\n * @priority 0\n * @param {expression} ngMousemove {@link guide/expression Expression} to evaluate upon\n * mousemove. ({@link guide/expression#-event- Event object is available as `$event`})\n *\n * @example\n   <example>\n     <file name=\"index.html\">\n      <button ng-mousemove=\"count = count + 1\" ng-init=\"count=0\">\n        Increment (when mouse moves)\n      </button>\n      count: {{count}}\n     </file>\n   </example>\n */\n\n\n/**\n * @ngdoc directive\n * @name ngKeydown\n *\n * @description\n * Specify custom behavior on keydown event.\n *\n * @element ANY\n * @priority 0\n * @param {expression} ngKeydown {@link guide/expression Expression} to evaluate upon\n * keydown. (Event object is available as `$event` and can be interrogated for keyCode, altKey, etc.)\n *\n * @example\n   <example>\n     <file name=\"index.html\">\n      <input ng-keydown=\"count = count + 1\" ng-init=\"count=0\">\n      key down count: {{count}}\n     </file>\n   </example>\n */\n\n\n/**\n * @ngdoc directive\n * @name ngKeyup\n *\n * @description\n * Specify custom behavior on keyup event.\n *\n * @element ANY\n * @priority 0\n * @param {expression} ngKeyup {@link guide/expression Expression} to evaluate upon\n * keyup. (Event object is available as `$event` and can be interrogated for keyCode, altKey, etc.)\n *\n * @example\n   <example>\n     <file name=\"index.html\">\n       <p>Typing in the input box below updates the key count</p>\n       <input ng-keyup=\"count = count + 1\" ng-init=\"count=0\"> key up count: {{count}}\n\n       <p>Typing in the input box below updates the keycode</p>\n       <input ng-keyup=\"event=$event\">\n       <p>event keyCode: {{ event.keyCode }}</p>\n       <p>event altKey: {{ event.altKey }}</p>\n     </file>\n   </example>\n */\n\n\n/**\n * @ngdoc directive\n * @name ngKeypress\n *\n * @description\n * Specify custom behavior on keypress event.\n *\n * @element ANY\n * @param {expression} ngKeypress {@link guide/expression Expression} to evaluate upon\n * keypress. ({@link guide/expression#-event- Event object is available as `$event`}\n * and can be interrogated for keyCode, altKey, etc.)\n *\n * @example\n   <example>\n     <file name=\"index.html\">\n      <input ng-keypress=\"count = count + 1\" ng-init=\"count=0\">\n      key press count: {{count}}\n     </file>\n   </example>\n */\n\n\n/**\n * @ngdoc directive\n * @name ngSubmit\n *\n * @description\n * Enables binding angular expressions to onsubmit events.\n *\n * Additionally it prevents the default action (which for form means sending the request to the\n * server and reloading the current page), but only if the form does not contain `action`,\n * `data-action`, or `x-action` attributes.\n *\n * @element form\n * @priority 0\n * @param {expression} ngSubmit {@link guide/expression Expression} to eval.\n * ({@link guide/expression#-event- Event object is available as `$event`})\n *\n * @example\n   <example>\n     <file name=\"index.html\">\n      <script>\n        function Ctrl($scope) {\n          $scope.list = [];\n          $scope.text = 'hello';\n          $scope.submit = function() {\n            if ($scope.text) {\n              $scope.list.push(this.text);\n              $scope.text = '';\n            }\n          };\n        }\n      </script>\n      <form ng-submit=\"submit()\" ng-controller=\"Ctrl\">\n        Enter text and hit enter:\n        <input type=\"text\" ng-model=\"text\" name=\"text\" />\n        <input type=\"submit\" id=\"submit\" value=\"Submit\" />\n        <pre>list={{list}}</pre>\n      </form>\n     </file>\n     <file name=\"protractor.js\" type=\"protractor\">\n       it('should check ng-submit', function() {\n         expect(element(by.binding('list')).getText()).toBe('list=[]');\n         element(by.css('#submit')).click();\n         expect(element(by.binding('list')).getText()).toContain('hello');\n         expect(element(by.input('text')).getAttribute('value')).toBe('');\n       });\n       it('should ignore empty strings', function() {\n         expect(element(by.binding('list')).getText()).toBe('list=[]');\n         element(by.css('#submit')).click();\n         element(by.css('#submit')).click();\n         expect(element(by.binding('list')).getText()).toContain('hello');\n        });\n     </file>\n   </example>\n */\n\n/**\n * @ngdoc directive\n * @name ngFocus\n *\n * @description\n * Specify custom behavior on focus event.\n *\n * @element window, input, select, textarea, a\n * @priority 0\n * @param {expression} ngFocus {@link guide/expression Expression} to evaluate upon\n * focus. ({@link guide/expression#-event- Event object is available as `$event`})\n *\n * @example\n * See {@link ng.directive:ngClick ngClick}\n */\n\n/**\n * @ngdoc directive\n * @name ngBlur\n *\n * @description\n * Specify custom behavior on blur event.\n *\n * @element window, input, select, textarea, a\n * @priority 0\n * @param {expression} ngBlur {@link guide/expression Expression} to evaluate upon\n * blur. ({@link guide/expression#-event- Event object is available as `$event`})\n *\n * @example\n * See {@link ng.directive:ngClick ngClick}\n */\n\n/**\n * @ngdoc directive\n * @name ngCopy\n *\n * @description\n * Specify custom behavior on copy event.\n *\n * @element window, input, select, textarea, a\n * @priority 0\n * @param {expression} ngCopy {@link guide/expression Expression} to evaluate upon\n * copy. ({@link guide/expression#-event- Event object is available as `$event`})\n *\n * @example\n   <example>\n     <file name=\"index.html\">\n      <input ng-copy=\"copied=true\" ng-init=\"copied=false; value='copy me'\" ng-model=\"value\">\n      copied: {{copied}}\n     </file>\n   </example>\n */\n\n/**\n * @ngdoc directive\n * @name ngCut\n *\n * @description\n * Specify custom behavior on cut event.\n *\n * @element window, input, select, textarea, a\n * @priority 0\n * @param {expression} ngCut {@link guide/expression Expression} to evaluate upon\n * cut. ({@link guide/expression#-event- Event object is available as `$event`})\n *\n * @example\n   <example>\n     <file name=\"index.html\">\n      <input ng-cut=\"cut=true\" ng-init=\"cut=false; value='cut me'\" ng-model=\"value\">\n      cut: {{cut}}\n     </file>\n   </example>\n */\n\n/**\n * @ngdoc directive\n * @name ngPaste\n *\n * @description\n * Specify custom behavior on paste event.\n *\n * @element window, input, select, textarea, a\n * @priority 0\n * @param {expression} ngPaste {@link guide/expression Expression} to evaluate upon\n * paste. ({@link guide/expression#-event- Event object is available as `$event`})\n *\n * @example\n   <example>\n     <file name=\"index.html\">\n      <input ng-paste=\"paste=true\" ng-init=\"paste=false\" placeholder='paste here'>\n      pasted: {{paste}}\n     </file>\n   </example>\n */\n\n/**\n * @ngdoc directive\n * @name ngIf\n * @restrict A\n *\n * @description\n * The `ngIf` directive removes or recreates a portion of the DOM tree based on an\n * {expression}. If the expression assigned to `ngIf` evaluates to a false\n * value then the element is removed from the DOM, otherwise a clone of the\n * element is reinserted into the DOM.\n *\n * `ngIf` differs from `ngShow` and `ngHide` in that `ngIf` completely removes and recreates the\n * element in the DOM rather than changing its visibility via the `display` css property.  A common\n * case when this difference is significant is when using css selectors that rely on an element's\n * position within the DOM, such as the `:first-child` or `:last-child` pseudo-classes.\n *\n * Note that when an element is removed using `ngIf` its scope is destroyed and a new scope\n * is created when the element is restored.  The scope created within `ngIf` inherits from\n * its parent scope using\n * [prototypal inheritance](https://github.com/angular/angular.js/wiki/The-Nuances-of-Scope-Prototypal-Inheritance).\n * An important implication of this is if `ngModel` is used within `ngIf` to bind to\n * a javascript primitive defined in the parent scope. In this case any modifications made to the\n * variable within the child scope will override (hide) the value in the parent scope.\n *\n * Also, `ngIf` recreates elements using their compiled state. An example of this behavior\n * is if an element's class attribute is directly modified after it's compiled, using something like\n * jQuery's `.addClass()` method, and the element is later removed. When `ngIf` recreates the element\n * the added class will be lost because the original compiled state is used to regenerate the element.\n *\n * Additionally, you can provide animations via the `ngAnimate` module to animate the `enter`\n * and `leave` effects.\n *\n * @animations\n * enter - happens just after the ngIf contents change and a new DOM element is created and injected into the ngIf container\n * leave - happens just before the ngIf contents are removed from the DOM\n *\n * @element ANY\n * @scope\n * @priority 600\n * @param {expression} ngIf If the {@link guide/expression expression} is falsy then\n *     the element is removed from the DOM tree. If it is truthy a copy of the compiled\n *     element is added to the DOM tree.\n *\n * @example\n  <example module=\"ngAnimate\" deps=\"angular-animate.js\" animations=\"true\">\n    <file name=\"index.html\">\n      Click me: <input type=\"checkbox\" ng-model=\"checked\" ng-init=\"checked=true\" /><br/>\n      Show when checked:\n      <span ng-if=\"checked\" class=\"animate-if\">\n        I'm removed when the checkbox is unchecked.\n      </span>\n    </file>\n    <file name=\"animations.css\">\n      .animate-if {\n        background:white;\n        border:1px solid black;\n        padding:10px;\n      }\n\n      .animate-if.ng-enter, .animate-if.ng-leave {\n        -webkit-transition:all cubic-bezier(0.250, 0.460, 0.450, 0.940) 0.5s;\n        transition:all cubic-bezier(0.250, 0.460, 0.450, 0.940) 0.5s;\n      }\n\n      .animate-if.ng-enter,\n      .animate-if.ng-leave.ng-leave-active {\n        opacity:0;\n      }\n\n      .animate-if.ng-leave,\n      .animate-if.ng-enter.ng-enter-active {\n        opacity:1;\n      }\n    </file>\n  </example>\n */\nvar ngIfDirective = ['$animate', function($animate) {\n  return {\n    transclude: 'element',\n    priority: 600,\n    terminal: true,\n    restrict: 'A',\n    $$tlb: true,\n    link: function ($scope, $element, $attr, ctrl, $transclude) {\n        var block, childScope, previousElements;\n        $scope.$watch($attr.ngIf, function ngIfWatchAction(value) {\n\n          if (toBoolean(value)) {\n            if (!childScope) {\n              childScope = $scope.$new();\n              $transclude(childScope, function (clone) {\n                clone[clone.length++] = document.createComment(' end ngIf: ' + $attr.ngIf + ' ');\n                // Note: We only need the first/last node of the cloned nodes.\n                // However, we need to keep the reference to the jqlite wrapper as it might be changed later\n                // by a directive with templateUrl when its template arrives.\n                block = {\n                  clone: clone\n                };\n                $animate.enter(clone, $element.parent(), $element);\n              });\n            }\n          } else {\n            if(previousElements) {\n              previousElements.remove();\n              previousElements = null;\n            }\n            if(childScope) {\n              childScope.$destroy();\n              childScope = null;\n            }\n            if(block) {\n              previousElements = getBlockElements(block.clone);\n              $animate.leave(previousElements, function() {\n                previousElements = null;\n              });\n              block = null;\n            }\n          }\n        });\n    }\n  };\n}];\n\n/**\n * @ngdoc directive\n * @name ngInclude\n * @restrict ECA\n *\n * @description\n * Fetches, compiles and includes an external HTML fragment.\n *\n * By default, the template URL is restricted to the same domain and protocol as the\n * application document. This is done by calling {@link ng.$sce#getTrustedResourceUrl\n * $sce.getTrustedResourceUrl} on it. To load templates from other domains or protocols\n * you may either {@link ng.$sceDelegateProvider#resourceUrlWhitelist whitelist them} or\n * [wrap them](ng.$sce#trustAsResourceUrl) as trusted values. Refer to Angular's {@link\n * ng.$sce Strict Contextual Escaping}.\n *\n * In addition, the browser's\n * [Same Origin Policy](https://code.google.com/p/browsersec/wiki/Part2#Same-origin_policy_for_XMLHttpRequest)\n * and [Cross-Origin Resource Sharing (CORS)](http://www.w3.org/TR/cors/)\n * policy may further restrict whether the template is successfully loaded.\n * For example, `ngInclude` won't work for cross-domain requests on all browsers and for `file://`\n * access on some browsers.\n *\n * @animations\n * enter - animation is used to bring new content into the browser.\n * leave - animation is used to animate existing content away.\n *\n * The enter and leave animation occur concurrently.\n *\n * @scope\n * @priority 400\n *\n * @param {string} ngInclude|src angular expression evaluating to URL. If the source is a string constant,\n *                 make sure you wrap it in **single** quotes, e.g. `src=\"'myPartialTemplate.html'\"`.\n * @param {string=} onload Expression to evaluate when a new partial is loaded.\n *\n * @param {string=} autoscroll Whether `ngInclude` should call {@link ng.$anchorScroll\n *                  $anchorScroll} to scroll the viewport after the content is loaded.\n *\n *                  - If the attribute is not set, disable scrolling.\n *                  - If the attribute is set without value, enable scrolling.\n *                  - Otherwise enable scrolling only if the expression evaluates to truthy value.\n *\n * @example\n  <example module=\"ngAnimate\" deps=\"angular-animate.js\" animations=\"true\">\n    <file name=\"index.html\">\n     <div ng-controller=\"Ctrl\">\n       <select ng-model=\"template\" ng-options=\"t.name for t in templates\">\n        <option value=\"\">(blank)</option>\n       </select>\n       url of the template: <tt>{{template.url}}</tt>\n       <hr/>\n       <div class=\"slide-animate-container\">\n         <div class=\"slide-animate\" ng-include=\"template.url\"></div>\n       </div>\n     </div>\n    </file>\n    <file name=\"script.js\">\n      function Ctrl($scope) {\n        $scope.templates =\n          [ { name: 'template1.html', url: 'template1.html'},\n            { name: 'template2.html', url: 'template2.html'} ];\n        $scope.template = $scope.templates[0];\n      }\n     </file>\n    <file name=\"template1.html\">\n      Content of template1.html\n    </file>\n    <file name=\"template2.html\">\n      Content of template2.html\n    </file>\n    <file name=\"animations.css\">\n      .slide-animate-container {\n        position:relative;\n        background:white;\n        border:1px solid black;\n        height:40px;\n        overflow:hidden;\n      }\n\n      .slide-animate {\n        padding:10px;\n      }\n\n      .slide-animate.ng-enter, .slide-animate.ng-leave {\n        -webkit-transition:all cubic-bezier(0.250, 0.460, 0.450, 0.940) 0.5s;\n        transition:all cubic-bezier(0.250, 0.460, 0.450, 0.940) 0.5s;\n\n        position:absolute;\n        top:0;\n        left:0;\n        right:0;\n        bottom:0;\n        display:block;\n        padding:10px;\n      }\n\n      .slide-animate.ng-enter {\n        top:-50px;\n      }\n      .slide-animate.ng-enter.ng-enter-active {\n        top:0;\n      }\n\n      .slide-animate.ng-leave {\n        top:0;\n      }\n      .slide-animate.ng-leave.ng-leave-active {\n        top:50px;\n      }\n    </file>\n    <file name=\"protractor.js\" type=\"protractor\">\n      var templateSelect = element(by.model('template'));\n      var includeElem = element(by.css('[ng-include]'));\n\n      it('should load template1.html', function() {\n        expect(includeElem.getText()).toMatch(/Content of template1.html/);\n      });\n\n      it('should load template2.html', function() {\n        if (browser.params.browser == 'firefox') {\n          // Firefox can't handle using selects\n          // See https://github.com/angular/protractor/issues/480\n          return;\n        }\n        templateSelect.click();\n        templateSelect.element.all(by.css('option')).get(2).click();\n        expect(includeElem.getText()).toMatch(/Content of template2.html/);\n      });\n\n      it('should change to blank', function() {\n        if (browser.params.browser == 'firefox') {\n          // Firefox can't handle using selects\n          return;\n        }\n        templateSelect.click();\n        templateSelect.element.all(by.css('option')).get(0).click();\n        expect(includeElem.isPresent()).toBe(false);\n      });\n    </file>\n  </example>\n */\n\n\n/**\n * @ngdoc event\n * @name ngInclude#$includeContentRequested\n * @eventType emit on the scope ngInclude was declared in\n * @description\n * Emitted every time the ngInclude content is requested.\n */\n\n\n/**\n * @ngdoc event\n * @name ngInclude#$includeContentLoaded\n * @eventType emit on the current ngInclude scope\n * @description\n * Emitted every time the ngInclude content is reloaded.\n */\nvar ngIncludeDirective = ['$http', '$templateCache', '$anchorScroll', '$animate', '$sce',\n                  function($http,   $templateCache,   $anchorScroll,   $animate,   $sce) {\n  return {\n    restrict: 'ECA',\n    priority: 400,\n    terminal: true,\n    transclude: 'element',\n    controller: angular.noop,\n    compile: function(element, attr) {\n      var srcExp = attr.ngInclude || attr.src,\n          onloadExp = attr.onload || '',\n          autoScrollExp = attr.autoscroll;\n\n      return function(scope, $element, $attr, ctrl, $transclude) {\n        var changeCounter = 0,\n            currentScope,\n            previousElement,\n            currentElement;\n\n        var cleanupLastIncludeContent = function() {\n          if(previousElement) {\n            previousElement.remove();\n            previousElement = null;\n          }\n          if(currentScope) {\n            currentScope.$destroy();\n            currentScope = null;\n          }\n          if(currentElement) {\n            $animate.leave(currentElement, function() {\n              previousElement = null;\n            });\n            previousElement = currentElement;\n            currentElement = null;\n          }\n        };\n\n        scope.$watch($sce.parseAsResourceUrl(srcExp), function ngIncludeWatchAction(src) {\n          var afterAnimation = function() {\n            if (isDefined(autoScrollExp) && (!autoScrollExp || scope.$eval(autoScrollExp))) {\n              $anchorScroll();\n            }\n          };\n          var thisChangeId = ++changeCounter;\n\n          if (src) {\n            $http.get(src, {cache: $templateCache}).success(function(response) {\n              if (thisChangeId !== changeCounter) return;\n              var newScope = scope.$new();\n              ctrl.template = response;\n\n              // Note: This will also link all children of ng-include that were contained in the original\n              // html. If that content contains controllers, ... they could pollute/change the scope.\n              // However, using ng-include on an element with additional content does not make sense...\n              // Note: We can't remove them in the cloneAttchFn of $transclude as that\n              // function is called before linking the content, which would apply child\n              // directives to non existing elements.\n              var clone = $transclude(newScope, function(clone) {\n                cleanupLastIncludeContent();\n                $animate.enter(clone, null, $element, afterAnimation);\n              });\n\n              currentScope = newScope;\n              currentElement = clone;\n\n              currentScope.$emit('$includeContentLoaded');\n              scope.$eval(onloadExp);\n            }).error(function() {\n              if (thisChangeId === changeCounter) cleanupLastIncludeContent();\n            });\n            scope.$emit('$includeContentRequested');\n          } else {\n            cleanupLastIncludeContent();\n            ctrl.template = null;\n          }\n        });\n      };\n    }\n  };\n}];\n\n// This directive is called during the $transclude call of the first `ngInclude` directive.\n// It will replace and compile the content of the element with the loaded template.\n// We need this directive so that the element content is already filled when\n// the link function of another directive on the same element as ngInclude\n// is called.\nvar ngIncludeFillContentDirective = ['$compile',\n  function($compile) {\n    return {\n      restrict: 'ECA',\n      priority: -400,\n      require: 'ngInclude',\n      link: function(scope, $element, $attr, ctrl) {\n        $element.html(ctrl.template);\n        $compile($element.contents())(scope);\n      }\n    };\n  }];\n\n/**\n * @ngdoc directive\n * @name ngInit\n * @restrict AC\n *\n * @description\n * The `ngInit` directive allows you to evaluate an expression in the\n * current scope.\n *\n * <div class=\"alert alert-error\">\n * The only appropriate use of `ngInit` is for aliasing special properties of\n * {@link ng.directive:ngRepeat `ngRepeat`}, as seen in the demo below. Besides this case, you\n * should use {@link guide/controller controllers} rather than `ngInit`\n * to initialize values on a scope.\n * </div>\n * <div class=\"alert alert-warning\">\n * **Note**: If you have assignment in `ngInit` along with {@link ng.$filter `$filter`}, make\n * sure you have parenthesis for correct precedence:\n * <pre class=\"prettyprint\">\n *   <div ng-init=\"test1 = (data | orderBy:'name')\"></div>\n * </pre>\n * </div>\n *\n * @priority 450\n *\n * @element ANY\n * @param {expression} ngInit {@link guide/expression Expression} to eval.\n *\n * @example\n   <example>\n     <file name=\"index.html\">\n   <script>\n     function Ctrl($scope) {\n       $scope.list = [['a', 'b'], ['c', 'd']];\n     }\n   </script>\n   <div ng-controller=\"Ctrl\">\n     <div ng-repeat=\"innerList in list\" ng-init=\"outerIndex = $index\">\n       <div ng-repeat=\"value in innerList\" ng-init=\"innerIndex = $index\">\n          <span class=\"example-init\">list[ {{outerIndex}} ][ {{innerIndex}} ] = {{value}};</span>\n       </div>\n     </div>\n   </div>\n     </file>\n     <file name=\"protractor.js\" type=\"protractor\">\n       it('should alias index positions', function() {\n         var elements = element.all(by.css('.example-init'));\n         expect(elements.get(0).getText()).toBe('list[ 0 ][ 0 ] = a;');\n         expect(elements.get(1).getText()).toBe('list[ 0 ][ 1 ] = b;');\n         expect(elements.get(2).getText()).toBe('list[ 1 ][ 0 ] = c;');\n         expect(elements.get(3).getText()).toBe('list[ 1 ][ 1 ] = d;');\n       });\n     </file>\n   </example>\n */\nvar ngInitDirective = ngDirective({\n  priority: 450,\n  compile: function() {\n    return {\n      pre: function(scope, element, attrs) {\n        scope.$eval(attrs.ngInit);\n      }\n    };\n  }\n});\n\n/**\n * @ngdoc directive\n * @name ngNonBindable\n * @restrict AC\n * @priority 1000\n *\n * @description\n * The `ngNonBindable` directive tells Angular not to compile or bind the contents of the current\n * DOM element. This is useful if the element contains what appears to be Angular directives and\n * bindings but which should be ignored by Angular. This could be the case if you have a site that\n * displays snippets of code, for instance.\n *\n * @element ANY\n *\n * @example\n * In this example there are two locations where a simple interpolation binding (`{{}}`) is present,\n * but the one wrapped in `ngNonBindable` is left alone.\n *\n * @example\n    <example>\n      <file name=\"index.html\">\n        <div>Normal: {{1 + 2}}</div>\n        <div ng-non-bindable>Ignored: {{1 + 2}}</div>\n      </file>\n      <file name=\"protractor.js\" type=\"protractor\">\n       it('should check ng-non-bindable', function() {\n         expect(element(by.binding('1 + 2')).getText()).toContain('3');\n         expect(element.all(by.css('div')).last().getText()).toMatch(/1 \\+ 2/);\n       });\n      </file>\n    </example>\n */\nvar ngNonBindableDirective = ngDirective({ terminal: true, priority: 1000 });\n\n/**\n * @ngdoc directive\n * @name ngPluralize\n * @restrict EA\n *\n * @description\n * `ngPluralize` is a directive that displays messages according to en-US localization rules.\n * These rules are bundled with angular.js, but can be overridden\n * (see {@link guide/i18n Angular i18n} dev guide). You configure ngPluralize directive\n * by specifying the mappings between\n * [plural categories](http://unicode.org/repos/cldr-tmp/trunk/diff/supplemental/language_plural_rules.html)\n * and the strings to be displayed.\n *\n * # Plural categories and explicit number rules\n * There are two\n * [plural categories](http://unicode.org/repos/cldr-tmp/trunk/diff/supplemental/language_plural_rules.html)\n * in Angular's default en-US locale: \"one\" and \"other\".\n *\n * While a plural category may match many numbers (for example, in en-US locale, \"other\" can match\n * any number that is not 1), an explicit number rule can only match one number. For example, the\n * explicit number rule for \"3\" matches the number 3. There are examples of plural categories\n * and explicit number rules throughout the rest of this documentation.\n *\n * # Configuring ngPluralize\n * You configure ngPluralize by providing 2 attributes: `count` and `when`.\n * You can also provide an optional attribute, `offset`.\n *\n * The value of the `count` attribute can be either a string or an {@link guide/expression\n * Angular expression}; these are evaluated on the current scope for its bound value.\n *\n * The `when` attribute specifies the mappings between plural categories and the actual\n * string to be displayed. The value of the attribute should be a JSON object.\n *\n * The following example shows how to configure ngPluralize:\n *\n * ```html\n * <ng-pluralize count=\"personCount\"\n                 when=\"{'0': 'Nobody is viewing.',\n *                      'one': '1 person is viewing.',\n *                      'other': '{} people are viewing.'}\">\n * </ng-pluralize>\n *```\n *\n * In the example, `\"0: Nobody is viewing.\"` is an explicit number rule. If you did not\n * specify this rule, 0 would be matched to the \"other\" category and \"0 people are viewing\"\n * would be shown instead of \"Nobody is viewing\". You can specify an explicit number rule for\n * other numbers, for example 12, so that instead of showing \"12 people are viewing\", you can\n * show \"a dozen people are viewing\".\n *\n * You can use a set of closed braces (`{}`) as a placeholder for the number that you want substituted\n * into pluralized strings. In the previous example, Angular will replace `{}` with\n * <span ng-non-bindable>`{{personCount}}`</span>. The closed braces `{}` is a placeholder\n * for <span ng-non-bindable>{{numberExpression}}</span>.\n *\n * # Configuring ngPluralize with offset\n * The `offset` attribute allows further customization of pluralized text, which can result in\n * a better user experience. For example, instead of the message \"4 people are viewing this document\",\n * you might display \"John, Kate and 2 others are viewing this document\".\n * The offset attribute allows you to offset a number by any desired value.\n * Let's take a look at an example:\n *\n * ```html\n * <ng-pluralize count=\"personCount\" offset=2\n *               when=\"{'0': 'Nobody is viewing.',\n *                      '1': '{{person1}} is viewing.',\n *                      '2': '{{person1}} and {{person2}} are viewing.',\n *                      'one': '{{person1}}, {{person2}} and one other person are viewing.',\n *                      'other': '{{person1}}, {{person2}} and {} other people are viewing.'}\">\n * </ng-pluralize>\n * ```\n *\n * Notice that we are still using two plural categories(one, other), but we added\n * three explicit number rules 0, 1 and 2.\n * When one person, perhaps John, views the document, \"John is viewing\" will be shown.\n * When three people view the document, no explicit number rule is found, so\n * an offset of 2 is taken off 3, and Angular uses 1 to decide the plural category.\n * In this case, plural category 'one' is matched and \"John, Marry and one other person are viewing\"\n * is shown.\n *\n * Note that when you specify offsets, you must provide explicit number rules for\n * numbers from 0 up to and including the offset. If you use an offset of 3, for example,\n * you must provide explicit number rules for 0, 1, 2 and 3. You must also provide plural strings for\n * plural categories \"one\" and \"other\".\n *\n * @param {string|expression} count The variable to be bound to.\n * @param {string} when The mapping between plural category to its corresponding strings.\n * @param {number=} offset Offset to deduct from the total number.\n *\n * @example\n    <example>\n      <file name=\"index.html\">\n        <script>\n          function Ctrl($scope) {\n            $scope.person1 = 'Igor';\n            $scope.person2 = 'Misko';\n            $scope.personCount = 1;\n          }\n        </script>\n        <div ng-controller=\"Ctrl\">\n          Person 1:<input type=\"text\" ng-model=\"person1\" value=\"Igor\" /><br/>\n          Person 2:<input type=\"text\" ng-model=\"person2\" value=\"Misko\" /><br/>\n          Number of People:<input type=\"text\" ng-model=\"personCount\" value=\"1\" /><br/>\n\n          <!--- Example with simple pluralization rules for en locale --->\n          Without Offset:\n          <ng-pluralize count=\"personCount\"\n                        when=\"{'0': 'Nobody is viewing.',\n                               'one': '1 person is viewing.',\n                               'other': '{} people are viewing.'}\">\n          </ng-pluralize><br>\n\n          <!--- Example with offset --->\n          With Offset(2):\n          <ng-pluralize count=\"personCount\" offset=2\n                        when=\"{'0': 'Nobody is viewing.',\n                               '1': '{{person1}} is viewing.',\n                               '2': '{{person1}} and {{person2}} are viewing.',\n                               'one': '{{person1}}, {{person2}} and one other person are viewing.',\n                               'other': '{{person1}}, {{person2}} and {} other people are viewing.'}\">\n          </ng-pluralize>\n        </div>\n      </file>\n      <file name=\"protractor.js\" type=\"protractor\">\n        it('should show correct pluralized string', function() {\n          var withoutOffset = element.all(by.css('ng-pluralize')).get(0);\n          var withOffset = element.all(by.css('ng-pluralize')).get(1);\n          var countInput = element(by.model('personCount'));\n\n          expect(withoutOffset.getText()).toEqual('1 person is viewing.');\n          expect(withOffset.getText()).toEqual('Igor is viewing.');\n\n          countInput.clear();\n          countInput.sendKeys('0');\n\n          expect(withoutOffset.getText()).toEqual('Nobody is viewing.');\n          expect(withOffset.getText()).toEqual('Nobody is viewing.');\n\n          countInput.clear();\n          countInput.sendKeys('2');\n\n          expect(withoutOffset.getText()).toEqual('2 people are viewing.');\n          expect(withOffset.getText()).toEqual('Igor and Misko are viewing.');\n\n          countInput.clear();\n          countInput.sendKeys('3');\n\n          expect(withoutOffset.getText()).toEqual('3 people are viewing.');\n          expect(withOffset.getText()).toEqual('Igor, Misko and one other person are viewing.');\n\n          countInput.clear();\n          countInput.sendKeys('4');\n\n          expect(withoutOffset.getText()).toEqual('4 people are viewing.');\n          expect(withOffset.getText()).toEqual('Igor, Misko and 2 other people are viewing.');\n        });\n        it('should show data-bound names', function() {\n          var withOffset = element.all(by.css('ng-pluralize')).get(1);\n          var personCount = element(by.model('personCount'));\n          var person1 = element(by.model('person1'));\n          var person2 = element(by.model('person2'));\n          personCount.clear();\n          personCount.sendKeys('4');\n          person1.clear();\n          person1.sendKeys('Di');\n          person2.clear();\n          person2.sendKeys('Vojta');\n          expect(withOffset.getText()).toEqual('Di, Vojta and 2 other people are viewing.');\n        });\n      </file>\n    </example>\n */\nvar ngPluralizeDirective = ['$locale', '$interpolate', function($locale, $interpolate) {\n  var BRACE = /{}/g;\n  return {\n    restrict: 'EA',\n    link: function(scope, element, attr) {\n      var numberExp = attr.count,\n          whenExp = attr.$attr.when && element.attr(attr.$attr.when), // we have {{}} in attrs\n          offset = attr.offset || 0,\n          whens = scope.$eval(whenExp) || {},\n          whensExpFns = {},\n          startSymbol = $interpolate.startSymbol(),\n          endSymbol = $interpolate.endSymbol(),\n          isWhen = /^when(Minus)?(.+)$/;\n\n      forEach(attr, function(expression, attributeName) {\n        if (isWhen.test(attributeName)) {\n          whens[lowercase(attributeName.replace('when', '').replace('Minus', '-'))] =\n            element.attr(attr.$attr[attributeName]);\n        }\n      });\n      forEach(whens, function(expression, key) {\n        whensExpFns[key] =\n          $interpolate(expression.replace(BRACE, startSymbol + numberExp + '-' +\n            offset + endSymbol));\n      });\n\n      scope.$watch(function ngPluralizeWatch() {\n        var value = parseFloat(scope.$eval(numberExp));\n\n        if (!isNaN(value)) {\n          //if explicit number rule such as 1, 2, 3... is defined, just use it. Otherwise,\n          //check it against pluralization rules in $locale service\n          if (!(value in whens)) value = $locale.pluralCat(value - offset);\n           return whensExpFns[value](scope, element, true);\n        } else {\n          return '';\n        }\n      }, function ngPluralizeWatchAction(newVal) {\n        element.text(newVal);\n      });\n    }\n  };\n}];\n\n/**\n * @ngdoc directive\n * @name ngRepeat\n *\n * @description\n * The `ngRepeat` directive instantiates a template once per item from a collection. Each template\n * instance gets its own scope, where the given loop variable is set to the current collection item,\n * and `$index` is set to the item index or key.\n *\n * Special properties are exposed on the local scope of each template instance, including:\n *\n * | Variable  | Type            | Details                                                                     |\n * |-----------|-----------------|-----------------------------------------------------------------------------|\n * | `$index`  | {@type number}  | iterator offset of the repeated element (0..length-1)                       |\n * | `$first`  | {@type boolean} | true if the repeated element is first in the iterator.                      |\n * | `$middle` | {@type boolean} | true if the repeated element is between the first and last in the iterator. |\n * | `$last`   | {@type boolean} | true if the repeated element is last in the iterator.                       |\n * | `$even`   | {@type boolean} | true if the iterator position `$index` is even (otherwise false).           |\n * | `$odd`    | {@type boolean} | true if the iterator position `$index` is odd (otherwise false).            |\n *\n * Creating aliases for these properties is possible with {@link ng.directive:ngInit `ngInit`}.\n * This may be useful when, for instance, nesting ngRepeats.\n *\n * # Special repeat start and end points\n * To repeat a series of elements instead of just one parent element, ngRepeat (as well as other ng directives) supports extending\n * the range of the repeater by defining explicit start and end points by using **ng-repeat-start** and **ng-repeat-end** respectively.\n * The **ng-repeat-start** directive works the same as **ng-repeat**, but will repeat all the HTML code (including the tag it's defined on)\n * up to and including the ending HTML tag where **ng-repeat-end** is placed.\n *\n * The example below makes use of this feature:\n * ```html\n *   <header ng-repeat-start=\"item in items\">\n *     Header {{ item }}\n *   </header>\n *   <div class=\"body\">\n *     Body {{ item }}\n *   </div>\n *   <footer ng-repeat-end>\n *     Footer {{ item }}\n *   </footer>\n * ```\n *\n * And with an input of {@type ['A','B']} for the items variable in the example above, the output will evaluate to:\n * ```html\n *   <header>\n *     Header A\n *   </header>\n *   <div class=\"body\">\n *     Body A\n *   </div>\n *   <footer>\n *     Footer A\n *   </footer>\n *   <header>\n *     Header B\n *   </header>\n *   <div class=\"body\">\n *     Body B\n *   </div>\n *   <footer>\n *     Footer B\n *   </footer>\n * ```\n *\n * The custom start and end points for ngRepeat also support all other HTML directive syntax flavors provided in AngularJS (such\n * as **data-ng-repeat-start**, **x-ng-repeat-start** and **ng:repeat-start**).\n *\n * @animations\n * **.enter** - when a new item is added to the list or when an item is revealed after a filter\n *\n * **.leave** - when an item is removed from the list or when an item is filtered out\n *\n * **.move** - when an adjacent item is filtered out causing a reorder or when the item contents are reordered\n *\n * @element ANY\n * @scope\n * @priority 1000\n * @param {repeat_expression} ngRepeat The expression indicating how to enumerate a collection. These\n *   formats are currently supported:\n *\n *   * `variable in expression` – where variable is the user defined loop variable and `expression`\n *     is a scope expression giving the collection to enumerate.\n *\n *     For example: `album in artist.albums`.\n *\n *   * `(key, value) in expression` – where `key` and `value` can be any user defined identifiers,\n *     and `expression` is the scope expression giving the collection to enumerate.\n *\n *     For example: `(name, age) in {'adam':10, 'amalie':12}`.\n *\n *   * `variable in expression track by tracking_expression` – You can also provide an optional tracking function\n *     which can be used to associate the objects in the collection with the DOM elements. If no tracking function\n *     is specified the ng-repeat associates elements by identity in the collection. It is an error to have\n *     more than one tracking function to resolve to the same key. (This would mean that two distinct objects are\n *     mapped to the same DOM element, which is not possible.)  Filters should be applied to the expression,\n *     before specifying a tracking expression.\n *\n *     For example: `item in items` is equivalent to `item in items track by $id(item)`. This implies that the DOM elements\n *     will be associated by item identity in the array.\n *\n *     For example: `item in items track by $id(item)`. A built in `$id()` function can be used to assign a unique\n *     `$$hashKey` property to each item in the array. This property is then used as a key to associated DOM elements\n *     with the corresponding item in the array by identity. Moving the same object in array would move the DOM\n *     element in the same way in the DOM.\n *\n *     For example: `item in items track by item.id` is a typical pattern when the items come from the database. In this\n *     case the object identity does not matter. Two objects are considered equivalent as long as their `id`\n *     property is same.\n *\n *     For example: `item in items | filter:searchText track by item.id` is a pattern that might be used to apply a filter\n *     to items in conjunction with a tracking expression.\n *\n * @example\n * This example initializes the scope to a list of names and\n * then uses `ngRepeat` to display every person:\n  <example module=\"ngAnimate\" deps=\"angular-animate.js\" animations=\"true\">\n    <file name=\"index.html\">\n      <div ng-init=\"friends = [\n        {name:'John', age:25, gender:'boy'},\n        {name:'Jessie', age:30, gender:'girl'},\n        {name:'Johanna', age:28, gender:'girl'},\n        {name:'Joy', age:15, gender:'girl'},\n        {name:'Mary', age:28, gender:'girl'},\n        {name:'Peter', age:95, gender:'boy'},\n        {name:'Sebastian', age:50, gender:'boy'},\n        {name:'Erika', age:27, gender:'girl'},\n        {name:'Patrick', age:40, gender:'boy'},\n        {name:'Samantha', age:60, gender:'girl'}\n      ]\">\n        I have {{friends.length}} friends. They are:\n        <input type=\"search\" ng-model=\"q\" placeholder=\"filter friends...\" />\n        <ul class=\"example-animate-container\">\n          <li class=\"animate-repeat\" ng-repeat=\"friend in friends | filter:q\">\n            [{{$index + 1}}] {{friend.name}} who is {{friend.age}} years old.\n          </li>\n        </ul>\n      </div>\n    </file>\n    <file name=\"animations.css\">\n      .example-animate-container {\n        background:white;\n        border:1px solid black;\n        list-style:none;\n        margin:0;\n        padding:0 10px;\n      }\n\n      .animate-repeat {\n        line-height:40px;\n        list-style:none;\n        box-sizing:border-box;\n      }\n\n      .animate-repeat.ng-move,\n      .animate-repeat.ng-enter,\n      .animate-repeat.ng-leave {\n        -webkit-transition:all linear 0.5s;\n        transition:all linear 0.5s;\n      }\n\n      .animate-repeat.ng-leave.ng-leave-active,\n      .animate-repeat.ng-move,\n      .animate-repeat.ng-enter {\n        opacity:0;\n        max-height:0;\n      }\n\n      .animate-repeat.ng-leave,\n      .animate-repeat.ng-move.ng-move-active,\n      .animate-repeat.ng-enter.ng-enter-active {\n        opacity:1;\n        max-height:40px;\n      }\n    </file>\n    <file name=\"protractor.js\" type=\"protractor\">\n      var friends = element.all(by.repeater('friend in friends'));\n\n      it('should render initial data set', function() {\n        expect(friends.count()).toBe(10);\n        expect(friends.get(0).getText()).toEqual('[1] John who is 25 years old.');\n        expect(friends.get(1).getText()).toEqual('[2] Jessie who is 30 years old.');\n        expect(friends.last().getText()).toEqual('[10] Samantha who is 60 years old.');\n        expect(element(by.binding('friends.length')).getText())\n            .toMatch(\"I have 10 friends. They are:\");\n      });\n\n       it('should update repeater when filter predicate changes', function() {\n         expect(friends.count()).toBe(10);\n\n         element(by.model('q')).sendKeys('ma');\n\n         expect(friends.count()).toBe(2);\n         expect(friends.get(0).getText()).toEqual('[1] Mary who is 28 years old.');\n         expect(friends.last().getText()).toEqual('[2] Samantha who is 60 years old.');\n       });\n      </file>\n    </example>\n */\nvar ngRepeatDirective = ['$parse', '$animate', function($parse, $animate) {\n  var NG_REMOVED = '$$NG_REMOVED';\n  var ngRepeatMinErr = minErr('ngRepeat');\n  return {\n    transclude: 'element',\n    priority: 1000,\n    terminal: true,\n    $$tlb: true,\n    link: function($scope, $element, $attr, ctrl, $transclude){\n        var expression = $attr.ngRepeat;\n        var match = expression.match(/^\\s*([\\s\\S]+?)\\s+in\\s+([\\s\\S]+?)(?:\\s+track\\s+by\\s+([\\s\\S]+?))?\\s*$/),\n          trackByExp, trackByExpGetter, trackByIdExpFn, trackByIdArrayFn, trackByIdObjFn,\n          lhs, rhs, valueIdentifier, keyIdentifier,\n          hashFnLocals = {$id: hashKey};\n\n        if (!match) {\n          throw ngRepeatMinErr('iexp', \"Expected expression in form of '_item_ in _collection_[ track by _id_]' but got '{0}'.\",\n            expression);\n        }\n\n        lhs = match[1];\n        rhs = match[2];\n        trackByExp = match[3];\n\n        if (trackByExp) {\n          trackByExpGetter = $parse(trackByExp);\n          trackByIdExpFn = function(key, value, index) {\n            // assign key, value, and $index to the locals so that they can be used in hash functions\n            if (keyIdentifier) hashFnLocals[keyIdentifier] = key;\n            hashFnLocals[valueIdentifier] = value;\n            hashFnLocals.$index = index;\n            return trackByExpGetter($scope, hashFnLocals);\n          };\n        } else {\n          trackByIdArrayFn = function(key, value) {\n            return hashKey(value);\n          };\n          trackByIdObjFn = function(key) {\n            return key;\n          };\n        }\n\n        match = lhs.match(/^(?:([\\$\\w]+)|\\(([\\$\\w]+)\\s*,\\s*([\\$\\w]+)\\))$/);\n        if (!match) {\n          throw ngRepeatMinErr('iidexp', \"'_item_' in '_item_ in _collection_' should be an identifier or '(_key_, _value_)' expression, but got '{0}'.\",\n                                                                    lhs);\n        }\n        valueIdentifier = match[3] || match[1];\n        keyIdentifier = match[2];\n\n        // Store a list of elements from previous run. This is a hash where key is the item from the\n        // iterator, and the value is objects with following properties.\n        //   - scope: bound scope\n        //   - element: previous element.\n        //   - index: position\n        var lastBlockMap = {};\n\n        //watch props\n        $scope.$watchCollection(rhs, function ngRepeatAction(collection){\n          var index, length,\n              previousNode = $element[0],     // current position of the node\n              nextNode,\n              // Same as lastBlockMap but it has the current state. It will become the\n              // lastBlockMap on the next iteration.\n              nextBlockMap = {},\n              arrayLength,\n              childScope,\n              key, value, // key/value of iteration\n              trackById,\n              trackByIdFn,\n              collectionKeys,\n              block,       // last object information {scope, element, id}\n              nextBlockOrder = [],\n              elementsToRemove;\n\n\n          if (isArrayLike(collection)) {\n            collectionKeys = collection;\n            trackByIdFn = trackByIdExpFn || trackByIdArrayFn;\n          } else {\n            trackByIdFn = trackByIdExpFn || trackByIdObjFn;\n            // if object, extract keys, sort them and use to determine order of iteration over obj props\n            collectionKeys = [];\n            for (key in collection) {\n              if (collection.hasOwnProperty(key) && key.charAt(0) != '$') {\n                collectionKeys.push(key);\n              }\n            }\n            collectionKeys.sort();\n          }\n\n          arrayLength = collectionKeys.length;\n\n          // locate existing items\n          length = nextBlockOrder.length = collectionKeys.length;\n          for(index = 0; index < length; index++) {\n           key = (collection === collectionKeys) ? index : collectionKeys[index];\n           value = collection[key];\n           trackById = trackByIdFn(key, value, index);\n           assertNotHasOwnProperty(trackById, '`track by` id');\n           if(lastBlockMap.hasOwnProperty(trackById)) {\n             block = lastBlockMap[trackById];\n             delete lastBlockMap[trackById];\n             nextBlockMap[trackById] = block;\n             nextBlockOrder[index] = block;\n           } else if (nextBlockMap.hasOwnProperty(trackById)) {\n             // restore lastBlockMap\n             forEach(nextBlockOrder, function(block) {\n               if (block && block.scope) lastBlockMap[block.id] = block;\n             });\n             // This is a duplicate and we need to throw an error\n             throw ngRepeatMinErr('dupes', \"Duplicates in a repeater are not allowed. Use 'track by' expression to specify unique keys. Repeater: {0}, Duplicate key: {1}\",\n                                                                                                                                                    expression,       trackById);\n           } else {\n             // new never before seen block\n             nextBlockOrder[index] = { id: trackById };\n             nextBlockMap[trackById] = false;\n           }\n         }\n\n          // remove existing items\n          for (key in lastBlockMap) {\n            // lastBlockMap is our own object so we don't need to use special hasOwnPropertyFn\n            if (lastBlockMap.hasOwnProperty(key)) {\n              block = lastBlockMap[key];\n              elementsToRemove = getBlockElements(block.clone);\n              $animate.leave(elementsToRemove);\n              forEach(elementsToRemove, function(element) { element[NG_REMOVED] = true; });\n              block.scope.$destroy();\n            }\n          }\n\n          // we are not using forEach for perf reasons (trying to avoid #call)\n          for (index = 0, length = collectionKeys.length; index < length; index++) {\n            key = (collection === collectionKeys) ? index : collectionKeys[index];\n            value = collection[key];\n            block = nextBlockOrder[index];\n            if (nextBlockOrder[index - 1]) previousNode = getBlockEnd(nextBlockOrder[index - 1]);\n\n            if (block.scope) {\n              // if we have already seen this object, then we need to reuse the\n              // associated scope/element\n              childScope = block.scope;\n\n              nextNode = previousNode;\n              do {\n                nextNode = nextNode.nextSibling;\n              } while(nextNode && nextNode[NG_REMOVED]);\n\n              if (getBlockStart(block) != nextNode) {\n                // existing item which got moved\n                $animate.move(getBlockElements(block.clone), null, jqLite(previousNode));\n              }\n              previousNode = getBlockEnd(block);\n            } else {\n              // new item which we don't know about\n              childScope = $scope.$new();\n            }\n\n            childScope[valueIdentifier] = value;\n            if (keyIdentifier) childScope[keyIdentifier] = key;\n            childScope.$index = index;\n            childScope.$first = (index === 0);\n            childScope.$last = (index === (arrayLength - 1));\n            childScope.$middle = !(childScope.$first || childScope.$last);\n            // jshint bitwise: false\n            childScope.$odd = !(childScope.$even = (index&1) === 0);\n            // jshint bitwise: true\n\n            if (!block.scope) {\n              $transclude(childScope, function(clone) {\n                clone[clone.length++] = document.createComment(' end ngRepeat: ' + expression + ' ');\n                $animate.enter(clone, null, jqLite(previousNode));\n                previousNode = clone;\n                block.scope = childScope;\n                // Note: We only need the first/last node of the cloned nodes.\n                // However, we need to keep the reference to the jqlite wrapper as it might be changed later\n                // by a directive with templateUrl when its template arrives.\n                block.clone = clone;\n                nextBlockMap[block.id] = block;\n              });\n            }\n          }\n          lastBlockMap = nextBlockMap;\n        });\n    }\n  };\n\n  function getBlockStart(block) {\n    return block.clone[0];\n  }\n\n  function getBlockEnd(block) {\n    return block.clone[block.clone.length - 1];\n  }\n}];\n\n/**\n * @ngdoc directive\n * @name ngShow\n *\n * @description\n * The `ngShow` directive shows or hides the given HTML element based on the expression\n * provided to the ngShow attribute. The element is shown or hidden by removing or adding\n * the `ng-hide` CSS class onto the element. The `.ng-hide` CSS class is predefined\n * in AngularJS and sets the display style to none (using an !important flag).\n * For CSP mode please add `angular-csp.css` to your html file (see {@link ng.directive:ngCsp ngCsp}).\n *\n * ```html\n * <!-- when $scope.myValue is truthy (element is visible) -->\n * <div ng-show=\"myValue\"></div>\n *\n * <!-- when $scope.myValue is falsy (element is hidden) -->\n * <div ng-show=\"myValue\" class=\"ng-hide\"></div>\n * ```\n *\n * When the ngShow expression evaluates to false then the ng-hide CSS class is added to the class attribute\n * on the element causing it to become hidden. When true, the ng-hide CSS class is removed\n * from the element causing the element not to appear hidden.\n *\n * <div class=\"alert alert-warning\">\n * **Note:** Here is a list of values that ngShow will consider as a falsy value (case insensitive):<br />\n * \"f\" / \"0\" / \"false\" / \"no\" / \"n\" / \"[]\"\n * </div>\n *\n * ## Why is !important used?\n *\n * You may be wondering why !important is used for the .ng-hide CSS class. This is because the `.ng-hide` selector\n * can be easily overridden by heavier selectors. For example, something as simple\n * as changing the display style on a HTML list item would make hidden elements appear visible.\n * This also becomes a bigger issue when dealing with CSS frameworks.\n *\n * By using !important, the show and hide behavior will work as expected despite any clash between CSS selector\n * specificity (when !important isn't used with any conflicting styles). If a developer chooses to override the\n * styling to change how to hide an element then it is just a matter of using !important in their own CSS code.\n *\n * ### Overriding .ng-hide\n *\n * By default, the `.ng-hide` class will style the element with `display:none!important`. If you wish to change\n * the hide behavior with ngShow/ngHide then this can be achieved by restating the styles for the `.ng-hide`\n * class in CSS:\n *\n * ```css\n * .ng-hide {\n *   //this is just another form of hiding an element\n *   display:block!important;\n *   position:absolute;\n *   top:-9999px;\n *   left:-9999px;\n * }\n * ```\n *\n * By default you don't need to override in CSS anything and the animations will work around the display style.\n *\n * ## A note about animations with ngShow\n *\n * Animations in ngShow/ngHide work with the show and hide events that are triggered when the directive expression\n * is true and false. This system works like the animation system present with ngClass except that\n * you must also include the !important flag to override the display property\n * so that you can perform an animation when the element is hidden during the time of the animation.\n *\n * ```css\n * //\n * //a working example can be found at the bottom of this page\n * //\n * .my-element.ng-hide-add, .my-element.ng-hide-remove {\n *   transition:0.5s linear all;\n * }\n *\n * .my-element.ng-hide-add { ... }\n * .my-element.ng-hide-add.ng-hide-add-active { ... }\n * .my-element.ng-hide-remove { ... }\n * .my-element.ng-hide-remove.ng-hide-remove-active { ... }\n * ```\n *\n * Keep in mind that, as of AngularJS version 1.2.17 (and 1.3.0-beta.11), there is no need to change the display\n * property to block during animation states--ngAnimate will handle the style toggling automatically for you.\n *\n * @animations\n * addClass: .ng-hide - happens after the ngShow expression evaluates to a truthy value and the just before contents are set to visible\n * removeClass: .ng-hide - happens after the ngShow expression evaluates to a non truthy value and just before the contents are set to hidden\n *\n * @element ANY\n * @param {expression} ngShow If the {@link guide/expression expression} is truthy\n *     then the element is shown or hidden respectively.\n *\n * @example\n  <example module=\"ngAnimate\" deps=\"angular-animate.js\" animations=\"true\">\n    <file name=\"index.html\">\n      Click me: <input type=\"checkbox\" ng-model=\"checked\"><br/>\n      <div>\n        Show:\n        <div class=\"check-element animate-show\" ng-show=\"checked\">\n          <span class=\"glyphicon glyphicon-thumbs-up\"></span> I show up when your checkbox is checked.\n        </div>\n      </div>\n      <div>\n        Hide:\n        <div class=\"check-element animate-show\" ng-hide=\"checked\">\n          <span class=\"glyphicon glyphicon-thumbs-down\"></span> I hide when your checkbox is checked.\n        </div>\n      </div>\n    </file>\n    <file name=\"glyphicons.css\">\n      @import url(//netdna.bootstrapcdn.com/bootstrap/3.0.0/css/bootstrap-glyphicons.css);\n    </file>\n    <file name=\"animations.css\">\n      .animate-show {\n        -webkit-transition:all linear 0.5s;\n        transition:all linear 0.5s;\n        line-height:20px;\n        opacity:1;\n        padding:10px;\n        border:1px solid black;\n        background:white;\n      }\n\n      .animate-show.ng-hide {\n        line-height:0;\n        opacity:0;\n        padding:0 10px;\n      }\n\n      .check-element {\n        padding:10px;\n        border:1px solid black;\n        background:white;\n      }\n    </file>\n    <file name=\"protractor.js\" type=\"protractor\">\n      var thumbsUp = element(by.css('span.glyphicon-thumbs-up'));\n      var thumbsDown = element(by.css('span.glyphicon-thumbs-down'));\n\n      it('should check ng-show / ng-hide', function() {\n        expect(thumbsUp.isDisplayed()).toBeFalsy();\n        expect(thumbsDown.isDisplayed()).toBeTruthy();\n\n        element(by.model('checked')).click();\n\n        expect(thumbsUp.isDisplayed()).toBeTruthy();\n        expect(thumbsDown.isDisplayed()).toBeFalsy();\n      });\n    </file>\n  </example>\n */\nvar ngShowDirective = ['$animate', function($animate) {\n  return function(scope, element, attr) {\n    scope.$watch(attr.ngShow, function ngShowWatchAction(value){\n      $animate[toBoolean(value) ? 'removeClass' : 'addClass'](element, 'ng-hide');\n    });\n  };\n}];\n\n\n/**\n * @ngdoc directive\n * @name ngHide\n *\n * @description\n * The `ngHide` directive shows or hides the given HTML element based on the expression\n * provided to the ngHide attribute. The element is shown or hidden by removing or adding\n * the `ng-hide` CSS class onto the element. The `.ng-hide` CSS class is predefined\n * in AngularJS and sets the display style to none (using an !important flag).\n * For CSP mode please add `angular-csp.css` to your html file (see {@link ng.directive:ngCsp ngCsp}).\n *\n * ```html\n * <!-- when $scope.myValue is truthy (element is hidden) -->\n * <div ng-hide=\"myValue\" class=\"ng-hide\"></div>\n *\n * <!-- when $scope.myValue is falsy (element is visible) -->\n * <div ng-hide=\"myValue\"></div>\n * ```\n *\n * When the ngHide expression evaluates to true then the .ng-hide CSS class is added to the class attribute\n * on the element causing it to become hidden. When false, the ng-hide CSS class is removed\n * from the element causing the element not to appear hidden.\n *\n * <div class=\"alert alert-warning\">\n * **Note:** Here is a list of values that ngHide will consider as a falsy value (case insensitive):<br />\n * \"f\" / \"0\" / \"false\" / \"no\" / \"n\" / \"[]\"\n * </div>\n *\n * ## Why is !important used?\n *\n * You may be wondering why !important is used for the .ng-hide CSS class. This is because the `.ng-hide` selector\n * can be easily overridden by heavier selectors. For example, something as simple\n * as changing the display style on a HTML list item would make hidden elements appear visible.\n * This also becomes a bigger issue when dealing with CSS frameworks.\n *\n * By using !important, the show and hide behavior will work as expected despite any clash between CSS selector\n * specificity (when !important isn't used with any conflicting styles). If a developer chooses to override the\n * styling to change how to hide an element then it is just a matter of using !important in their own CSS code.\n *\n * ### Overriding .ng-hide\n *\n * By default, the `.ng-hide` class will style the element with `display:none!important`. If you wish to change\n * the hide behavior with ngShow/ngHide then this can be achieved by restating the styles for the `.ng-hide`\n * class in CSS:\n *\n * ```css\n * .ng-hide {\n *   //this is just another form of hiding an element\n *   display:block!important;\n *   position:absolute;\n *   top:-9999px;\n *   left:-9999px;\n * }\n * ```\n *\n * By default you don't need to override in CSS anything and the animations will work around the display style.\n *\n * ## A note about animations with ngHide\n *\n * Animations in ngShow/ngHide work with the show and hide events that are triggered when the directive expression\n * is true and false. This system works like the animation system present with ngClass, except that the `.ng-hide`\n * CSS class is added and removed for you instead of your own CSS class.\n *\n * ```css\n * //\n * //a working example can be found at the bottom of this page\n * //\n * .my-element.ng-hide-add, .my-element.ng-hide-remove {\n *   transition:0.5s linear all;\n * }\n *\n * .my-element.ng-hide-add { ... }\n * .my-element.ng-hide-add.ng-hide-add-active { ... }\n * .my-element.ng-hide-remove { ... }\n * .my-element.ng-hide-remove.ng-hide-remove-active { ... }\n * ```\n *\n * Keep in mind that, as of AngularJS version 1.2.17 (and 1.3.0-beta.11), there is no need to change the display\n * property to block during animation states--ngAnimate will handle the style toggling automatically for you.\n *\n * @animations\n * removeClass: .ng-hide - happens after the ngHide expression evaluates to a truthy value and just before the contents are set to hidden\n * addClass: .ng-hide - happens after the ngHide expression evaluates to a non truthy value and just before the contents are set to visible\n *\n * @element ANY\n * @param {expression} ngHide If the {@link guide/expression expression} is truthy then\n *     the element is shown or hidden respectively.\n *\n * @example\n  <example module=\"ngAnimate\" deps=\"angular-animate.js\" animations=\"true\">\n    <file name=\"index.html\">\n      Click me: <input type=\"checkbox\" ng-model=\"checked\"><br/>\n      <div>\n        Show:\n        <div class=\"check-element animate-hide\" ng-show=\"checked\">\n          <span class=\"glyphicon glyphicon-thumbs-up\"></span> I show up when your checkbox is checked.\n        </div>\n      </div>\n      <div>\n        Hide:\n        <div class=\"check-element animate-hide\" ng-hide=\"checked\">\n          <span class=\"glyphicon glyphicon-thumbs-down\"></span> I hide when your checkbox is checked.\n        </div>\n      </div>\n    </file>\n    <file name=\"glyphicons.css\">\n      @import url(//netdna.bootstrapcdn.com/bootstrap/3.0.0/css/bootstrap-glyphicons.css);\n    </file>\n    <file name=\"animations.css\">\n      .animate-hide {\n        -webkit-transition:all linear 0.5s;\n        transition:all linear 0.5s;\n        line-height:20px;\n        opacity:1;\n        padding:10px;\n        border:1px solid black;\n        background:white;\n      }\n\n      .animate-hide.ng-hide {\n        line-height:0;\n        opacity:0;\n        padding:0 10px;\n      }\n\n      .check-element {\n        padding:10px;\n        border:1px solid black;\n        background:white;\n      }\n    </file>\n    <file name=\"protractor.js\" type=\"protractor\">\n      var thumbsUp = element(by.css('span.glyphicon-thumbs-up'));\n      var thumbsDown = element(by.css('span.glyphicon-thumbs-down'));\n\n      it('should check ng-show / ng-hide', function() {\n        expect(thumbsUp.isDisplayed()).toBeFalsy();\n        expect(thumbsDown.isDisplayed()).toBeTruthy();\n\n        element(by.model('checked')).click();\n\n        expect(thumbsUp.isDisplayed()).toBeTruthy();\n        expect(thumbsDown.isDisplayed()).toBeFalsy();\n      });\n    </file>\n  </example>\n */\nvar ngHideDirective = ['$animate', function($animate) {\n  return function(scope, element, attr) {\n    scope.$watch(attr.ngHide, function ngHideWatchAction(value){\n      $animate[toBoolean(value) ? 'addClass' : 'removeClass'](element, 'ng-hide');\n    });\n  };\n}];\n\n/**\n * @ngdoc directive\n * @name ngStyle\n * @restrict AC\n *\n * @description\n * The `ngStyle` directive allows you to set CSS style on an HTML element conditionally.\n *\n * @element ANY\n * @param {expression} ngStyle\n *\n * {@link guide/expression Expression} which evals to an\n * object whose keys are CSS style names and values are corresponding values for those CSS\n * keys.\n *\n * Since some CSS style names are not valid keys for an object, they must be quoted.\n * See the 'background-color' style in the example below.\n *\n * @example\n   <example>\n     <file name=\"index.html\">\n        <input type=\"button\" value=\"set color\" ng-click=\"myStyle={color:'red'}\">\n        <input type=\"button\" value=\"set background\" ng-click=\"myStyle={'background-color':'blue'}\">\n        <input type=\"button\" value=\"clear\" ng-click=\"myStyle={}\">\n        <br/>\n        <span ng-style=\"myStyle\">Sample Text</span>\n        <pre>myStyle={{myStyle}}</pre>\n     </file>\n     <file name=\"style.css\">\n       span {\n         color: black;\n       }\n     </file>\n     <file name=\"protractor.js\" type=\"protractor\">\n       var colorSpan = element(by.css('span'));\n\n       iit('should check ng-style', function() {\n         expect(colorSpan.getCssValue('color')).toBe('rgba(0, 0, 0, 1)');\n         element(by.css('input[value=\\'set color\\']')).click();\n         expect(colorSpan.getCssValue('color')).toBe('rgba(255, 0, 0, 1)');\n         element(by.css('input[value=clear]')).click();\n         expect(colorSpan.getCssValue('color')).toBe('rgba(0, 0, 0, 1)');\n       });\n     </file>\n   </example>\n */\nvar ngStyleDirective = ngDirective(function(scope, element, attr) {\n  scope.$watch(attr.ngStyle, function ngStyleWatchAction(newStyles, oldStyles) {\n    if (oldStyles && (newStyles !== oldStyles)) {\n      forEach(oldStyles, function(val, style) { element.css(style, '');});\n    }\n    if (newStyles) element.css(newStyles);\n  }, true);\n});\n\n/**\n * @ngdoc directive\n * @name ngSwitch\n * @restrict EA\n *\n * @description\n * The `ngSwitch` directive is used to conditionally swap DOM structure on your template based on a scope expression.\n * Elements within `ngSwitch` but without `ngSwitchWhen` or `ngSwitchDefault` directives will be preserved at the location\n * as specified in the template.\n *\n * The directive itself works similar to ngInclude, however, instead of downloading template code (or loading it\n * from the template cache), `ngSwitch` simply chooses one of the nested elements and makes it visible based on which element\n * matches the value obtained from the evaluated expression. In other words, you define a container element\n * (where you place the directive), place an expression on the **`on=\"...\"` attribute**\n * (or the **`ng-switch=\"...\"` attribute**), define any inner elements inside of the directive and place\n * a when attribute per element. The when attribute is used to inform ngSwitch which element to display when the on\n * expression is evaluated. If a matching expression is not found via a when attribute then an element with the default\n * attribute is displayed.\n *\n * <div class=\"alert alert-info\">\n * Be aware that the attribute values to match against cannot be expressions. They are interpreted\n * as literal string values to match against.\n * For example, **`ng-switch-when=\"someVal\"`** will match against the string `\"someVal\"` not against the\n * value of the expression `$scope.someVal`.\n * </div>\n\n * @animations\n * enter - happens after the ngSwitch contents change and the matched child element is placed inside the container\n * leave - happens just after the ngSwitch contents change and just before the former contents are removed from the DOM\n *\n * @usage\n *\n * ```\n * <ANY ng-switch=\"expression\">\n *   <ANY ng-switch-when=\"matchValue1\">...</ANY>\n *   <ANY ng-switch-when=\"matchValue2\">...</ANY>\n *   <ANY ng-switch-default>...</ANY>\n * </ANY>\n * ```\n *\n *\n * @scope\n * @priority 800\n * @param {*} ngSwitch|on expression to match against <tt>ng-switch-when</tt>.\n * On child elements add:\n *\n * * `ngSwitchWhen`: the case statement to match against. If match then this\n *   case will be displayed. If the same match appears multiple times, all the\n *   elements will be displayed.\n * * `ngSwitchDefault`: the default case when no other case match. If there\n *   are multiple default cases, all of them will be displayed when no other\n *   case match.\n *\n *\n * @example\n  <example module=\"ngAnimate\" deps=\"angular-animate.js\" animations=\"true\">\n    <file name=\"index.html\">\n      <div ng-controller=\"Ctrl\">\n        <select ng-model=\"selection\" ng-options=\"item for item in items\">\n        </select>\n        <tt>selection={{selection}}</tt>\n        <hr/>\n        <div class=\"animate-switch-container\"\n          ng-switch on=\"selection\">\n            <div class=\"animate-switch\" ng-switch-when=\"settings\">Settings Div</div>\n            <div class=\"animate-switch\" ng-switch-when=\"home\">Home Span</div>\n            <div class=\"animate-switch\" ng-switch-default>default</div>\n        </div>\n      </div>\n    </file>\n    <file name=\"script.js\">\n      function Ctrl($scope) {\n        $scope.items = ['settings', 'home', 'other'];\n        $scope.selection = $scope.items[0];\n      }\n    </file>\n    <file name=\"animations.css\">\n      .animate-switch-container {\n        position:relative;\n        background:white;\n        border:1px solid black;\n        height:40px;\n        overflow:hidden;\n      }\n\n      .animate-switch {\n        padding:10px;\n      }\n\n      .animate-switch.ng-animate {\n        -webkit-transition:all cubic-bezier(0.250, 0.460, 0.450, 0.940) 0.5s;\n        transition:all cubic-bezier(0.250, 0.460, 0.450, 0.940) 0.5s;\n\n        position:absolute;\n        top:0;\n        left:0;\n        right:0;\n        bottom:0;\n      }\n\n      .animate-switch.ng-leave.ng-leave-active,\n      .animate-switch.ng-enter {\n        top:-50px;\n      }\n      .animate-switch.ng-leave,\n      .animate-switch.ng-enter.ng-enter-active {\n        top:0;\n      }\n    </file>\n    <file name=\"protractor.js\" type=\"protractor\">\n      var switchElem = element(by.css('[ng-switch]'));\n      var select = element(by.model('selection'));\n\n      it('should start in settings', function() {\n        expect(switchElem.getText()).toMatch(/Settings Div/);\n      });\n      it('should change to home', function() {\n        select.element.all(by.css('option')).get(1).click();\n        expect(switchElem.getText()).toMatch(/Home Span/);\n      });\n      it('should select default', function() {\n        select.element.all(by.css('option')).get(2).click();\n        expect(switchElem.getText()).toMatch(/default/);\n      });\n    </file>\n  </example>\n */\nvar ngSwitchDirective = ['$animate', function($animate) {\n  return {\n    restrict: 'EA',\n    require: 'ngSwitch',\n\n    // asks for $scope to fool the BC controller module\n    controller: ['$scope', function ngSwitchController() {\n     this.cases = {};\n    }],\n    link: function(scope, element, attr, ngSwitchController) {\n      var watchExpr = attr.ngSwitch || attr.on,\n          selectedTranscludes = [],\n          selectedElements = [],\n          previousElements = [],\n          selectedScopes = [];\n\n      scope.$watch(watchExpr, function ngSwitchWatchAction(value) {\n        var i, ii;\n        for (i = 0, ii = previousElements.length; i < ii; ++i) {\n          previousElements[i].remove();\n        }\n        previousElements.length = 0;\n\n        for (i = 0, ii = selectedScopes.length; i < ii; ++i) {\n          var selected = selectedElements[i];\n          selectedScopes[i].$destroy();\n          previousElements[i] = selected;\n          $animate.leave(selected, function() {\n            previousElements.splice(i, 1);\n          });\n        }\n\n        selectedElements.length = 0;\n        selectedScopes.length = 0;\n\n        if ((selectedTranscludes = ngSwitchController.cases['!' + value] || ngSwitchController.cases['?'])) {\n          scope.$eval(attr.change);\n          forEach(selectedTranscludes, function(selectedTransclude) {\n            var selectedScope = scope.$new();\n            selectedScopes.push(selectedScope);\n            selectedTransclude.transclude(selectedScope, function(caseElement) {\n              var anchor = selectedTransclude.element;\n\n              selectedElements.push(caseElement);\n              $animate.enter(caseElement, anchor.parent(), anchor);\n            });\n          });\n        }\n      });\n    }\n  };\n}];\n\nvar ngSwitchWhenDirective = ngDirective({\n  transclude: 'element',\n  priority: 800,\n  require: '^ngSwitch',\n  link: function(scope, element, attrs, ctrl, $transclude) {\n    ctrl.cases['!' + attrs.ngSwitchWhen] = (ctrl.cases['!' + attrs.ngSwitchWhen] || []);\n    ctrl.cases['!' + attrs.ngSwitchWhen].push({ transclude: $transclude, element: element });\n  }\n});\n\nvar ngSwitchDefaultDirective = ngDirective({\n  transclude: 'element',\n  priority: 800,\n  require: '^ngSwitch',\n  link: function(scope, element, attr, ctrl, $transclude) {\n    ctrl.cases['?'] = (ctrl.cases['?'] || []);\n    ctrl.cases['?'].push({ transclude: $transclude, element: element });\n   }\n});\n\n/**\n * @ngdoc directive\n * @name ngTransclude\n * @restrict AC\n *\n * @description\n * Directive that marks the insertion point for the transcluded DOM of the nearest parent directive that uses transclusion.\n *\n * Any existing content of the element that this directive is placed on will be removed before the transcluded content is inserted.\n *\n * @element ANY\n *\n * @example\n   <example module=\"transclude\">\n     <file name=\"index.html\">\n       <script>\n         function Ctrl($scope) {\n           $scope.title = 'Lorem Ipsum';\n           $scope.text = 'Neque porro quisquam est qui dolorem ipsum quia dolor...';\n         }\n\n         angular.module('transclude', [])\n          .directive('pane', function(){\n             return {\n               restrict: 'E',\n               transclude: true,\n               scope: { title:'@' },\n               template: '<div style=\"border: 1px solid black;\">' +\n                           '<div style=\"background-color: gray\">{{title}}</div>' +\n                           '<div ng-transclude></div>' +\n                         '</div>'\n             };\n         });\n       </script>\n       <div ng-controller=\"Ctrl\">\n         <input ng-model=\"title\"><br>\n         <textarea ng-model=\"text\"></textarea> <br/>\n         <pane title=\"{{title}}\">{{text}}</pane>\n       </div>\n     </file>\n     <file name=\"protractor.js\" type=\"protractor\">\n        it('should have transcluded', function() {\n          var titleElement = element(by.model('title'));\n          titleElement.clear();\n          titleElement.sendKeys('TITLE');\n          var textElement = element(by.model('text'));\n          textElement.clear();\n          textElement.sendKeys('TEXT');\n          expect(element(by.binding('title')).getText()).toEqual('TITLE');\n          expect(element(by.binding('text')).getText()).toEqual('TEXT');\n        });\n     </file>\n   </example>\n *\n */\nvar ngTranscludeDirective = ngDirective({\n  link: function($scope, $element, $attrs, controller, $transclude) {\n    if (!$transclude) {\n      throw minErr('ngTransclude')('orphan',\n       'Illegal use of ngTransclude directive in the template! ' +\n       'No parent directive that requires a transclusion found. ' +\n       'Element: {0}',\n       startingTag($element));\n    }\n\n    $transclude(function(clone) {\n      $element.empty();\n      $element.append(clone);\n    });\n  }\n});\n\n/**\n * @ngdoc directive\n * @name script\n * @restrict E\n *\n * @description\n * Load the content of a `<script>` element into {@link ng.$templateCache `$templateCache`}, so that the\n * template can be used by {@link ng.directive:ngInclude `ngInclude`},\n * {@link ngRoute.directive:ngView `ngView`}, or {@link guide/directive directives}. The type of the\n * `<script>` element must be specified as `text/ng-template`, and a cache name for the template must be\n * assigned through the element's `id`, which can then be used as a directive's `templateUrl`.\n *\n * @param {string} type Must be set to `'text/ng-template'`.\n * @param {string} id Cache name of the template.\n *\n * @example\n  <example>\n    <file name=\"index.html\">\n      <script type=\"text/ng-template\" id=\"/tpl.html\">\n        Content of the template.\n      </script>\n\n      <a ng-click=\"currentTpl='/tpl.html'\" id=\"tpl-link\">Load inlined template</a>\n      <div id=\"tpl-content\" ng-include src=\"currentTpl\"></div>\n    </file>\n    <file name=\"protractor.js\" type=\"protractor\">\n      it('should load template defined inside script tag', function() {\n        element(by.css('#tpl-link')).click();\n        expect(element(by.css('#tpl-content')).getText()).toMatch(/Content of the template/);\n      });\n    </file>\n  </example>\n */\nvar scriptDirective = ['$templateCache', function($templateCache) {\n  return {\n    restrict: 'E',\n    terminal: true,\n    compile: function(element, attr) {\n      if (attr.type == 'text/ng-template') {\n        var templateUrl = attr.id,\n            // IE is not consistent, in scripts we have to read .text but in other nodes we have to read .textContent\n            text = element[0].text;\n\n        $templateCache.put(templateUrl, text);\n      }\n    }\n  };\n}];\n\nvar ngOptionsMinErr = minErr('ngOptions');\n/**\n * @ngdoc directive\n * @name select\n * @restrict E\n *\n * @description\n * HTML `SELECT` element with angular data-binding.\n *\n * # `ngOptions`\n *\n * The `ngOptions` attribute can be used to dynamically generate a list of `<option>`\n * elements for the `<select>` element using the array or object obtained by evaluating the\n * `ngOptions` comprehension_expression.\n *\n * When an item in the `<select>` menu is selected, the array element or object property\n * represented by the selected option will be bound to the model identified by the `ngModel`\n * directive.\n *\n * <div class=\"alert alert-warning\">\n * **Note:** `ngModel` compares by reference, not value. This is important when binding to an\n * array of objects. See an example [in this jsfiddle](http://jsfiddle.net/qWzTb/).\n * </div>\n *\n * Optionally, a single hard-coded `<option>` element, with the value set to an empty string, can\n * be nested into the `<select>` element. This element will then represent the `null` or \"not selected\"\n * option. See example below for demonstration.\n *\n * <div class=\"alert alert-warning\">\n * **Note:** `ngOptions` provides an iterator facility for the `<option>` element which should be used instead\n * of {@link ng.directive:ngRepeat ngRepeat} when you want the\n * `select` model to be bound to a non-string value. This is because an option element can only\n * be bound to string values at present.\n * </div>\n *\n * @param {string} ngModel Assignable angular expression to data-bind to.\n * @param {string=} name Property name of the form under which the control is published.\n * @param {string=} required The control is considered valid only if value is entered.\n * @param {string=} ngRequired Adds `required` attribute and `required` validation constraint to\n *    the element when the ngRequired expression evaluates to true. Use `ngRequired` instead of\n *    `required` when you want to data-bind to the `required` attribute.\n * @param {comprehension_expression=} ngOptions in one of the following forms:\n *\n *   * for array data sources:\n *     * `label` **`for`** `value` **`in`** `array`\n *     * `select` **`as`** `label` **`for`** `value` **`in`** `array`\n *     * `label`  **`group by`** `group` **`for`** `value` **`in`** `array`\n *     * `select` **`as`** `label` **`group by`** `group` **`for`** `value` **`in`** `array` **`track by`** `trackexpr`\n *   * for object data sources:\n *     * `label` **`for (`**`key` **`,`** `value`**`) in`** `object`\n *     * `select` **`as`** `label` **`for (`**`key` **`,`** `value`**`) in`** `object`\n *     * `label` **`group by`** `group` **`for (`**`key`**`,`** `value`**`) in`** `object`\n *     * `select` **`as`** `label` **`group by`** `group`\n *         **`for` `(`**`key`**`,`** `value`**`) in`** `object`\n *\n * Where:\n *\n *   * `array` / `object`: an expression which evaluates to an array / object to iterate over.\n *   * `value`: local variable which will refer to each item in the `array` or each property value\n *      of `object` during iteration.\n *   * `key`: local variable which will refer to a property name in `object` during iteration.\n *   * `label`: The result of this expression will be the label for `<option>` element. The\n *     `expression` will most likely refer to the `value` variable (e.g. `value.propertyName`).\n *   * `select`: The result of this expression will be bound to the model of the parent `<select>`\n *      element. If not specified, `select` expression will default to `value`.\n *   * `group`: The result of this expression will be used to group options using the `<optgroup>`\n *      DOM element.\n *   * `trackexpr`: Used when working with an array of objects. The result of this expression will be\n *      used to identify the objects in the array. The `trackexpr` will most likely refer to the\n *     `value` variable (e.g. `value.propertyName`).\n *\n * @example\n    <example>\n      <file name=\"index.html\">\n        <script>\n        function MyCntrl($scope) {\n          $scope.colors = [\n            {name:'black', shade:'dark'},\n            {name:'white', shade:'light'},\n            {name:'red', shade:'dark'},\n            {name:'blue', shade:'dark'},\n            {name:'yellow', shade:'light'}\n          ];\n          $scope.myColor = $scope.colors[2]; // red\n        }\n        </script>\n        <div ng-controller=\"MyCntrl\">\n          <ul>\n            <li ng-repeat=\"color in colors\">\n              Name: <input ng-model=\"color.name\">\n              [<a href ng-click=\"colors.splice($index, 1)\">X</a>]\n            </li>\n            <li>\n              [<a href ng-click=\"colors.push({})\">add</a>]\n            </li>\n          </ul>\n          <hr/>\n          Color (null not allowed):\n          <select ng-model=\"myColor\" ng-options=\"color.name for color in colors\"></select><br>\n\n          Color (null allowed):\n          <span  class=\"nullable\">\n            <select ng-model=\"myColor\" ng-options=\"color.name for color in colors\">\n              <option value=\"\">-- choose color --</option>\n            </select>\n          </span><br/>\n\n          Color grouped by shade:\n          <select ng-model=\"myColor\" ng-options=\"color.name group by color.shade for color in colors\">\n          </select><br/>\n\n\n          Select <a href ng-click=\"myColor = { name:'not in list', shade: 'other' }\">bogus</a>.<br>\n          <hr/>\n          Currently selected: {{ {selected_color:myColor}  }}\n          <div style=\"border:solid 1px black; height:20px\"\n               ng-style=\"{'background-color':myColor.name}\">\n          </div>\n        </div>\n      </file>\n      <file name=\"protractor.js\" type=\"protractor\">\n         it('should check ng-options', function() {\n           expect(element(by.binding('{selected_color:myColor}')).getText()).toMatch('red');\n           element.all(by.select('myColor')).first().click();\n           element.all(by.css('select[ng-model=\"myColor\"] option')).first().click();\n           expect(element(by.binding('{selected_color:myColor}')).getText()).toMatch('black');\n           element(by.css('.nullable select[ng-model=\"myColor\"]')).click();\n           element.all(by.css('.nullable select[ng-model=\"myColor\"] option')).first().click();\n           expect(element(by.binding('{selected_color:myColor}')).getText()).toMatch('null');\n         });\n      </file>\n    </example>\n */\n\nvar ngOptionsDirective = valueFn({ terminal: true });\n// jshint maxlen: false\nvar selectDirective = ['$compile', '$parse', function($compile,   $parse) {\n                         //000011111111110000000000022222222220000000000000000000003333333333000000000000004444444444444440000000005555555555555550000000666666666666666000000000000000777777777700000000000000000008888888888\n  var NG_OPTIONS_REGEXP = /^\\s*([\\s\\S]+?)(?:\\s+as\\s+([\\s\\S]+?))?(?:\\s+group\\s+by\\s+([\\s\\S]+?))?\\s+for\\s+(?:([\\$\\w][\\$\\w]*)|(?:\\(\\s*([\\$\\w][\\$\\w]*)\\s*,\\s*([\\$\\w][\\$\\w]*)\\s*\\)))\\s+in\\s+([\\s\\S]+?)(?:\\s+track\\s+by\\s+([\\s\\S]+?))?$/,\n      nullModelCtrl = {$setViewValue: noop};\n// jshint maxlen: 100\n\n  return {\n    restrict: 'E',\n    require: ['select', '?ngModel'],\n    controller: ['$element', '$scope', '$attrs', function($element, $scope, $attrs) {\n      var self = this,\n          optionsMap = {},\n          ngModelCtrl = nullModelCtrl,\n          nullOption,\n          unknownOption;\n\n\n      self.databound = $attrs.ngModel;\n\n\n      self.init = function(ngModelCtrl_, nullOption_, unknownOption_) {\n        ngModelCtrl = ngModelCtrl_;\n        nullOption = nullOption_;\n        unknownOption = unknownOption_;\n      };\n\n\n      self.addOption = function(value) {\n        assertNotHasOwnProperty(value, '\"option value\"');\n        optionsMap[value] = true;\n\n        if (ngModelCtrl.$viewValue == value) {\n          $element.val(value);\n          if (unknownOption.parent()) unknownOption.remove();\n        }\n      };\n\n\n      self.removeOption = function(value) {\n        if (this.hasOption(value)) {\n          delete optionsMap[value];\n          if (ngModelCtrl.$viewValue == value) {\n            this.renderUnknownOption(value);\n          }\n        }\n      };\n\n\n      self.renderUnknownOption = function(val) {\n        var unknownVal = '? ' + hashKey(val) + ' ?';\n        unknownOption.val(unknownVal);\n        $element.prepend(unknownOption);\n        $element.val(unknownVal);\n        unknownOption.prop('selected', true); // needed for IE\n      };\n\n\n      self.hasOption = function(value) {\n        return optionsMap.hasOwnProperty(value);\n      };\n\n      $scope.$on('$destroy', function() {\n        // disable unknown option so that we don't do work when the whole select is being destroyed\n        self.renderUnknownOption = noop;\n      });\n    }],\n\n    link: function(scope, element, attr, ctrls) {\n      // if ngModel is not defined, we don't need to do anything\n      if (!ctrls[1]) return;\n\n      var selectCtrl = ctrls[0],\n          ngModelCtrl = ctrls[1],\n          multiple = attr.multiple,\n          optionsExp = attr.ngOptions,\n          nullOption = false, // if false, user will not be able to select it (used by ngOptions)\n          emptyOption,\n          // we can't just jqLite('<option>') since jqLite is not smart enough\n          // to create it in <select> and IE barfs otherwise.\n          optionTemplate = jqLite(document.createElement('option')),\n          optGroupTemplate =jqLite(document.createElement('optgroup')),\n          unknownOption = optionTemplate.clone();\n\n      // find \"null\" option\n      for(var i = 0, children = element.children(), ii = children.length; i < ii; i++) {\n        if (children[i].value === '') {\n          emptyOption = nullOption = children.eq(i);\n          break;\n        }\n      }\n\n      selectCtrl.init(ngModelCtrl, nullOption, unknownOption);\n\n      // required validator\n      if (multiple) {\n        ngModelCtrl.$isEmpty = function(value) {\n          return !value || value.length === 0;\n        };\n      }\n\n      if (optionsExp) setupAsOptions(scope, element, ngModelCtrl);\n      else if (multiple) setupAsMultiple(scope, element, ngModelCtrl);\n      else setupAsSingle(scope, element, ngModelCtrl, selectCtrl);\n\n\n      ////////////////////////////\n\n\n\n      function setupAsSingle(scope, selectElement, ngModelCtrl, selectCtrl) {\n        ngModelCtrl.$render = function() {\n          var viewValue = ngModelCtrl.$viewValue;\n\n          if (selectCtrl.hasOption(viewValue)) {\n            if (unknownOption.parent()) unknownOption.remove();\n            selectElement.val(viewValue);\n            if (viewValue === '') emptyOption.prop('selected', true); // to make IE9 happy\n          } else {\n            if (isUndefined(viewValue) && emptyOption) {\n              selectElement.val('');\n            } else {\n              selectCtrl.renderUnknownOption(viewValue);\n            }\n          }\n        };\n\n        selectElement.on('change', function() {\n          scope.$apply(function() {\n            if (unknownOption.parent()) unknownOption.remove();\n            ngModelCtrl.$setViewValue(selectElement.val());\n          });\n        });\n      }\n\n      function setupAsMultiple(scope, selectElement, ctrl) {\n        var lastView;\n        ctrl.$render = function() {\n          var items = new HashMap(ctrl.$viewValue);\n          forEach(selectElement.find('option'), function(option) {\n            option.selected = isDefined(items.get(option.value));\n          });\n        };\n\n        // we have to do it on each watch since ngModel watches reference, but\n        // we need to work of an array, so we need to see if anything was inserted/removed\n        scope.$watch(function selectMultipleWatch() {\n          if (!equals(lastView, ctrl.$viewValue)) {\n            lastView = shallowCopy(ctrl.$viewValue);\n            ctrl.$render();\n          }\n        });\n\n        selectElement.on('change', function() {\n          scope.$apply(function() {\n            var array = [];\n            forEach(selectElement.find('option'), function(option) {\n              if (option.selected) {\n                array.push(option.value);\n              }\n            });\n            ctrl.$setViewValue(array);\n          });\n        });\n      }\n\n      function setupAsOptions(scope, selectElement, ctrl) {\n        var match;\n\n        if (!(match = optionsExp.match(NG_OPTIONS_REGEXP))) {\n          throw ngOptionsMinErr('iexp',\n            \"Expected expression in form of \" +\n            \"'_select_ (as _label_)? for (_key_,)?_value_ in _collection_'\" +\n            \" but got '{0}'. Element: {1}\",\n            optionsExp, startingTag(selectElement));\n        }\n\n        var displayFn = $parse(match[2] || match[1]),\n            valueName = match[4] || match[6],\n            keyName = match[5],\n            groupByFn = $parse(match[3] || ''),\n            valueFn = $parse(match[2] ? match[1] : valueName),\n            valuesFn = $parse(match[7]),\n            track = match[8],\n            trackFn = track ? $parse(match[8]) : null,\n            // This is an array of array of existing option groups in DOM.\n            // We try to reuse these if possible\n            // - optionGroupsCache[0] is the options with no option group\n            // - optionGroupsCache[?][0] is the parent: either the SELECT or OPTGROUP element\n            optionGroupsCache = [[{element: selectElement, label:''}]];\n\n        if (nullOption) {\n          // compile the element since there might be bindings in it\n          $compile(nullOption)(scope);\n\n          // remove the class, which is added automatically because we recompile the element and it\n          // becomes the compilation root\n          nullOption.removeClass('ng-scope');\n\n          // we need to remove it before calling selectElement.empty() because otherwise IE will\n          // remove the label from the element. wtf?\n          nullOption.remove();\n        }\n\n        // clear contents, we'll add what's needed based on the model\n        selectElement.empty();\n\n        selectElement.on('change', function() {\n          scope.$apply(function() {\n            var optionGroup,\n                collection = valuesFn(scope) || [],\n                locals = {},\n                key, value, optionElement, index, groupIndex, length, groupLength, trackIndex;\n\n            if (multiple) {\n              value = [];\n              for (groupIndex = 0, groupLength = optionGroupsCache.length;\n                   groupIndex < groupLength;\n                   groupIndex++) {\n                // list of options for that group. (first item has the parent)\n                optionGroup = optionGroupsCache[groupIndex];\n\n                for(index = 1, length = optionGroup.length; index < length; index++) {\n                  if ((optionElement = optionGroup[index].element)[0].selected) {\n                    key = optionElement.val();\n                    if (keyName) locals[keyName] = key;\n                    if (trackFn) {\n                      for (trackIndex = 0; trackIndex < collection.length; trackIndex++) {\n                        locals[valueName] = collection[trackIndex];\n                        if (trackFn(scope, locals) == key) break;\n                      }\n                    } else {\n                      locals[valueName] = collection[key];\n                    }\n                    value.push(valueFn(scope, locals));\n                  }\n                }\n              }\n            } else {\n              key = selectElement.val();\n              if (key == '?') {\n                value = undefined;\n              } else if (key === ''){\n                value = null;\n              } else {\n                if (trackFn) {\n                  for (trackIndex = 0; trackIndex < collection.length; trackIndex++) {\n                    locals[valueName] = collection[trackIndex];\n                    if (trackFn(scope, locals) == key) {\n                      value = valueFn(scope, locals);\n                      break;\n                    }\n                  }\n                } else {\n                  locals[valueName] = collection[key];\n                  if (keyName) locals[keyName] = key;\n                  value = valueFn(scope, locals);\n                }\n              }\n              // Update the null option's selected property here so $render cleans it up correctly\n              if (optionGroupsCache[0].length > 1) {\n                if (optionGroupsCache[0][1].id !== key) {\n                  optionGroupsCache[0][1].selected = false;\n                }\n              }\n            }\n            ctrl.$setViewValue(value);\n          });\n        });\n\n        ctrl.$render = render;\n\n        // TODO(vojta): can't we optimize this ?\n        scope.$watch(render);\n\n        function render() {\n              // Temporary location for the option groups before we render them\n          var optionGroups = {'':[]},\n              optionGroupNames = [''],\n              optionGroupName,\n              optionGroup,\n              option,\n              existingParent, existingOptions, existingOption,\n              modelValue = ctrl.$modelValue,\n              values = valuesFn(scope) || [],\n              keys = keyName ? sortedKeys(values) : values,\n              key,\n              groupLength, length,\n              groupIndex, index,\n              locals = {},\n              selected,\n              selectedSet = false, // nothing is selected yet\n              lastElement,\n              element,\n              label;\n\n          if (multiple) {\n            if (trackFn && isArray(modelValue)) {\n              selectedSet = new HashMap([]);\n              for (var trackIndex = 0; trackIndex < modelValue.length; trackIndex++) {\n                locals[valueName] = modelValue[trackIndex];\n                selectedSet.put(trackFn(scope, locals), modelValue[trackIndex]);\n              }\n            } else {\n              selectedSet = new HashMap(modelValue);\n            }\n          }\n\n          // We now build up the list of options we need (we merge later)\n          for (index = 0; length = keys.length, index < length; index++) {\n\n            key = index;\n            if (keyName) {\n              key = keys[index];\n              if ( key.charAt(0) === '$' ) continue;\n              locals[keyName] = key;\n            }\n\n            locals[valueName] = values[key];\n\n            optionGroupName = groupByFn(scope, locals) || '';\n            if (!(optionGroup = optionGroups[optionGroupName])) {\n              optionGroup = optionGroups[optionGroupName] = [];\n              optionGroupNames.push(optionGroupName);\n            }\n            if (multiple) {\n              selected = isDefined(\n                selectedSet.remove(trackFn ? trackFn(scope, locals) : valueFn(scope, locals))\n              );\n            } else {\n              if (trackFn) {\n                var modelCast = {};\n                modelCast[valueName] = modelValue;\n                selected = trackFn(scope, modelCast) === trackFn(scope, locals);\n              } else {\n                selected = modelValue === valueFn(scope, locals);\n              }\n              selectedSet = selectedSet || selected; // see if at least one item is selected\n            }\n            label = displayFn(scope, locals); // what will be seen by the user\n\n            // doing displayFn(scope, locals) || '' overwrites zero values\n            label = isDefined(label) ? label : '';\n            optionGroup.push({\n              // either the index into array or key from object\n              id: trackFn ? trackFn(scope, locals) : (keyName ? keys[index] : index),\n              label: label,\n              selected: selected                   // determine if we should be selected\n            });\n          }\n          if (!multiple) {\n            if (nullOption || modelValue === null) {\n              // insert null option if we have a placeholder, or the model is null\n              optionGroups[''].unshift({id:'', label:'', selected:!selectedSet});\n            } else if (!selectedSet) {\n              // option could not be found, we have to insert the undefined item\n              optionGroups[''].unshift({id:'?', label:'', selected:true});\n            }\n          }\n\n          // Now we need to update the list of DOM nodes to match the optionGroups we computed above\n          for (groupIndex = 0, groupLength = optionGroupNames.length;\n               groupIndex < groupLength;\n               groupIndex++) {\n            // current option group name or '' if no group\n            optionGroupName = optionGroupNames[groupIndex];\n\n            // list of options for that group. (first item has the parent)\n            optionGroup = optionGroups[optionGroupName];\n\n            if (optionGroupsCache.length <= groupIndex) {\n              // we need to grow the optionGroups\n              existingParent = {\n                element: optGroupTemplate.clone().attr('label', optionGroupName),\n                label: optionGroup.label\n              };\n              existingOptions = [existingParent];\n              optionGroupsCache.push(existingOptions);\n              selectElement.append(existingParent.element);\n            } else {\n              existingOptions = optionGroupsCache[groupIndex];\n              existingParent = existingOptions[0];  // either SELECT (no group) or OPTGROUP element\n\n              // update the OPTGROUP label if not the same.\n              if (existingParent.label != optionGroupName) {\n                existingParent.element.attr('label', existingParent.label = optionGroupName);\n              }\n            }\n\n            lastElement = null;  // start at the beginning\n            for(index = 0, length = optionGroup.length; index < length; index++) {\n              option = optionGroup[index];\n              if ((existingOption = existingOptions[index+1])) {\n                // reuse elements\n                lastElement = existingOption.element;\n                if (existingOption.label !== option.label) {\n                  lastElement.text(existingOption.label = option.label);\n                }\n                if (existingOption.id !== option.id) {\n                  lastElement.val(existingOption.id = option.id);\n                }\n                // lastElement.prop('selected') provided by jQuery has side-effects\n                if (existingOption.selected !== option.selected) {\n                  lastElement.prop('selected', (existingOption.selected = option.selected));\n                }\n              } else {\n                // grow elements\n\n                // if it's a null option\n                if (option.id === '' && nullOption) {\n                  // put back the pre-compiled element\n                  element = nullOption;\n                } else {\n                  // jQuery(v1.4.2) Bug: We should be able to chain the method calls, but\n                  // in this version of jQuery on some browser the .text() returns a string\n                  // rather then the element.\n                  (element = optionTemplate.clone())\n                      .val(option.id)\n                      .attr('selected', option.selected)\n                      .text(option.label);\n                }\n\n                existingOptions.push(existingOption = {\n                    element: element,\n                    label: option.label,\n                    id: option.id,\n                    selected: option.selected\n                });\n                if (lastElement) {\n                  lastElement.after(element);\n                } else {\n                  existingParent.element.append(element);\n                }\n                lastElement = element;\n              }\n            }\n            // remove any excessive OPTIONs in a group\n            index++; // increment since the existingOptions[0] is parent element not OPTION\n            while(existingOptions.length > index) {\n              existingOptions.pop().element.remove();\n            }\n          }\n          // remove any excessive OPTGROUPs from select\n          while(optionGroupsCache.length > groupIndex) {\n            optionGroupsCache.pop()[0].element.remove();\n          }\n        }\n      }\n    }\n  };\n}];\n\nvar optionDirective = ['$interpolate', function($interpolate) {\n  var nullSelectCtrl = {\n    addOption: noop,\n    removeOption: noop\n  };\n\n  return {\n    restrict: 'E',\n    priority: 100,\n    compile: function(element, attr) {\n      if (isUndefined(attr.value)) {\n        var interpolateFn = $interpolate(element.text(), true);\n        if (!interpolateFn) {\n          attr.$set('value', element.text());\n        }\n      }\n\n      return function (scope, element, attr) {\n        var selectCtrlName = '$selectController',\n            parent = element.parent(),\n            selectCtrl = parent.data(selectCtrlName) ||\n              parent.parent().data(selectCtrlName); // in case we are in optgroup\n\n        if (selectCtrl && selectCtrl.databound) {\n          // For some reason Opera defaults to true and if not overridden this messes up the repeater.\n          // We don't want the view to drive the initialization of the model anyway.\n          element.prop('selected', false);\n        } else {\n          selectCtrl = nullSelectCtrl;\n        }\n\n        if (interpolateFn) {\n          scope.$watch(interpolateFn, function interpolateWatchAction(newVal, oldVal) {\n            attr.$set('value', newVal);\n            if (newVal !== oldVal) selectCtrl.removeOption(oldVal);\n            selectCtrl.addOption(newVal);\n          });\n        } else {\n          selectCtrl.addOption(attr.value);\n        }\n\n        element.on('$destroy', function() {\n          selectCtrl.removeOption(attr.value);\n        });\n      };\n    }\n  };\n}];\n\nvar styleDirective = valueFn({\n  restrict: 'E',\n  terminal: true\n});\n\n  if (window.angular.bootstrap) {\n    //AngularJS is already loaded, so we can return here...\n    console.log('WARNING: Tried to load angular more than once.');\n    return;\n  }\n\n  //try to bind to jquery now so that one can write angular.element().read()\n  //but we will rebind on bootstrap again.\n  bindJQuery();\n\n  publishExternalAPI(angular);\n\n  jqLite(document).ready(function() {\n    angularInit(document, bootstrap);\n  });\n\n})(window, document);\n\n!window.angular.$$csp() && window.angular.element(document).find('head').prepend('<style type=\"text/css\">@charset \"UTF-8\";[ng\\\\:cloak],[ng-cloak],[data-ng-cloak],[x-ng-cloak],.ng-cloak,.x-ng-cloak,.ng-hide{display:none !important;}ng\\\\:form{display:block;}.ng-animate-block-transitions{transition:0s all!important;-webkit-transition:0s all!important;}.ng-hide-add-active,.ng-hide-remove{display:block!important;}</style>');\n/*!\n * ionic.bundle.js is a concatenation of:\n * ionic.js, angular.js, angular-animate.js,\n * angular-sanitize.js, angular-ui-router.js,\n * and ionic-angular.js\n */\n\n/**\n * @license AngularJS v1.2.17\n * (c) 2010-2014 Google, Inc. http://angularjs.org\n * License: MIT\n */\n(function(window, angular, undefined) {'use strict';\n\n/* jshint maxlen: false */\n\n/**\n * @ngdoc module\n * @name ngAnimate\n * @description\n *\n * # ngAnimate\n *\n * The `ngAnimate` module provides support for JavaScript, CSS3 transition and CSS3 keyframe animation hooks within existing core and custom directives.\n *\n *\n * <div doc-module-components=\"ngAnimate\"></div>\n *\n * # Usage\n *\n * To see animations in action, all that is required is to define the appropriate CSS classes\n * or to register a JavaScript animation via the myModule.animation() function. The directives that support animation automatically are:\n * `ngRepeat`, `ngInclude`, `ngIf`, `ngSwitch`, `ngShow`, `ngHide`, `ngView` and `ngClass`. Custom directives can take advantage of animation\n * by using the `$animate` service.\n *\n * Below is a more detailed breakdown of the supported animation events provided by pre-existing ng directives:\n *\n * | Directive                                                 | Supported Animations                               |\n * |---------------------------------------------------------- |----------------------------------------------------|\n * | {@link ng.directive:ngRepeat#usage_animations ngRepeat}         | enter, leave and move                              |\n * | {@link ngRoute.directive:ngView#usage_animations ngView}        | enter and leave                                    |\n * | {@link ng.directive:ngInclude#usage_animations ngInclude}       | enter and leave                                    |\n * | {@link ng.directive:ngSwitch#usage_animations ngSwitch}         | enter and leave                                    |\n * | {@link ng.directive:ngIf#usage_animations ngIf}                 | enter and leave                                    |\n * | {@link ng.directive:ngClass#usage_animations ngClass}           | add and remove                                     |\n * | {@link ng.directive:ngShow#usage_animations ngShow & ngHide}    | add and remove (the ng-hide class value)           |\n * | {@link ng.directive:form#usage_animations form}                 | add and remove (dirty, pristine, valid, invalid & all other validations)                |\n * | {@link ng.directive:ngModel#usage_animations ngModel}           | add and remove (dirty, pristine, valid, invalid & all other validations)                |\n *\n * You can find out more information about animations upon visiting each directive page.\n *\n * Below is an example of how to apply animations to a directive that supports animation hooks:\n *\n * ```html\n * <style type=\"text/css\">\n * .slide.ng-enter, .slide.ng-leave {\n *   -webkit-transition:0.5s linear all;\n *   transition:0.5s linear all;\n * }\n *\n * .slide.ng-enter { }        /&#42; starting animations for enter &#42;/\n * .slide.ng-enter-active { } /&#42; terminal animations for enter &#42;/\n * .slide.ng-leave { }        /&#42; starting animations for leave &#42;/\n * .slide.ng-leave-active { } /&#42; terminal animations for leave &#42;/\n * </style>\n *\n * <!--\n * the animate service will automatically add .ng-enter and .ng-leave to the element\n * to trigger the CSS transition/animations\n * -->\n * <ANY class=\"slide\" ng-include=\"...\"></ANY>\n * ```\n *\n * Keep in mind that if an animation is running, any child elements cannot be animated until the parent element's\n * animation has completed.\n *\n * <h2>CSS-defined Animations</h2>\n * The animate service will automatically apply two CSS classes to the animated element and these two CSS classes\n * are designed to contain the start and end CSS styling. Both CSS transitions and keyframe animations are supported\n * and can be used to play along with this naming structure.\n *\n * The following code below demonstrates how to perform animations using **CSS transitions** with Angular:\n *\n * ```html\n * <style type=\"text/css\">\n * /&#42;\n *  The animate class is apart of the element and the ng-enter class\n *  is attached to the element once the enter animation event is triggered\n * &#42;/\n * .reveal-animation.ng-enter {\n *  -webkit-transition: 1s linear all; /&#42; Safari/Chrome &#42;/\n *  transition: 1s linear all; /&#42; All other modern browsers and IE10+ &#42;/\n *\n *  /&#42; The animation preparation code &#42;/\n *  opacity: 0;\n * }\n *\n * /&#42;\n *  Keep in mind that you want to combine both CSS\n *  classes together to avoid any CSS-specificity\n *  conflicts\n * &#42;/\n * .reveal-animation.ng-enter.ng-enter-active {\n *  /&#42; The animation code itself &#42;/\n *  opacity: 1;\n * }\n * </style>\n *\n * <div class=\"view-container\">\n *   <div ng-view class=\"reveal-animation\"></div>\n * </div>\n * ```\n *\n * The following code below demonstrates how to perform animations using **CSS animations** with Angular:\n *\n * ```html\n * <style type=\"text/css\">\n * .reveal-animation.ng-enter {\n *   -webkit-animation: enter_sequence 1s linear; /&#42; Safari/Chrome &#42;/\n *   animation: enter_sequence 1s linear; /&#42; IE10+ and Future Browsers &#42;/\n * }\n * @-webkit-keyframes enter_sequence {\n *   from { opacity:0; }\n *   to { opacity:1; }\n * }\n * @keyframes enter_sequence {\n *   from { opacity:0; }\n *   to { opacity:1; }\n * }\n * </style>\n *\n * <div class=\"view-container\">\n *   <div ng-view class=\"reveal-animation\"></div>\n * </div>\n * ```\n *\n * Both CSS3 animations and transitions can be used together and the animate service will figure out the correct duration and delay timing.\n *\n * Upon DOM mutation, the event class is added first (something like `ng-enter`), then the browser prepares itself to add\n * the active class (in this case `ng-enter-active`) which then triggers the animation. The animation module will automatically\n * detect the CSS code to determine when the animation ends. Once the animation is over then both CSS classes will be\n * removed from the DOM. If a browser does not support CSS transitions or CSS animations then the animation will start and end\n * immediately resulting in a DOM element that is at its final state. This final state is when the DOM element\n * has no CSS transition/animation classes applied to it.\n *\n * <h3>CSS Staggering Animations</h3>\n * A Staggering animation is a collection of animations that are issued with a slight delay in between each successive operation resulting in a\n * curtain-like effect. The ngAnimate module, as of 1.2.0, supports staggering animations and the stagger effect can be\n * performed by creating a **ng-EVENT-stagger** CSS class and attaching that class to the base CSS class used for\n * the animation. The style property expected within the stagger class can either be a **transition-delay** or an\n * **animation-delay** property (or both if your animation contains both transitions and keyframe animations).\n *\n * ```css\n * .my-animation.ng-enter {\n *   /&#42; standard transition code &#42;/\n *   -webkit-transition: 1s linear all;\n *   transition: 1s linear all;\n *   opacity:0;\n * }\n * .my-animation.ng-enter-stagger {\n *   /&#42; this will have a 100ms delay between each successive leave animation &#42;/\n *   -webkit-transition-delay: 0.1s;\n *   transition-delay: 0.1s;\n *\n *   /&#42; in case the stagger doesn't work then these two values\n *    must be set to 0 to avoid an accidental CSS inheritance &#42;/\n *   -webkit-transition-duration: 0s;\n *   transition-duration: 0s;\n * }\n * .my-animation.ng-enter.ng-enter-active {\n *   /&#42; standard transition styles &#42;/\n *   opacity:1;\n * }\n * ```\n *\n * Staggering animations work by default in ngRepeat (so long as the CSS class is defined). Outside of ngRepeat, to use staggering animations\n * on your own, they can be triggered by firing multiple calls to the same event on $animate. However, the restrictions surrounding this\n * are that each of the elements must have the same CSS className value as well as the same parent element. A stagger operation\n * will also be reset if more than 10ms has passed after the last animation has been fired.\n *\n * The following code will issue the **ng-leave-stagger** event on the element provided:\n *\n * ```js\n * var kids = parent.children();\n *\n * $animate.leave(kids[0]); //stagger index=0\n * $animate.leave(kids[1]); //stagger index=1\n * $animate.leave(kids[2]); //stagger index=2\n * $animate.leave(kids[3]); //stagger index=3\n * $animate.leave(kids[4]); //stagger index=4\n *\n * $timeout(function() {\n *   //stagger has reset itself\n *   $animate.leave(kids[5]); //stagger index=0\n *   $animate.leave(kids[6]); //stagger index=1\n * }, 100, false);\n * ```\n *\n * Stagger animations are currently only supported within CSS-defined animations.\n *\n * <h2>JavaScript-defined Animations</h2>\n * In the event that you do not want to use CSS3 transitions or CSS3 animations or if you wish to offer animations on browsers that do not\n * yet support CSS transitions/animations, then you can make use of JavaScript animations defined inside of your AngularJS module.\n *\n * ```js\n * //!annotate=\"YourApp\" Your AngularJS Module|Replace this or ngModule with the module that you used to define your application.\n * var ngModule = angular.module('YourApp', ['ngAnimate']);\n * ngModule.animation('.my-crazy-animation', function() {\n *   return {\n *     enter: function(element, done) {\n *       //run the animation here and call done when the animation is complete\n *       return function(cancelled) {\n *         //this (optional) function will be called when the animation\n *         //completes or when the animation is cancelled (the cancelled\n *         //flag will be set to true if cancelled).\n *       };\n *     },\n *     leave: function(element, done) { },\n *     move: function(element, done) { },\n *\n *     //animation that can be triggered before the class is added\n *     beforeAddClass: function(element, className, done) { },\n *\n *     //animation that can be triggered after the class is added\n *     addClass: function(element, className, done) { },\n *\n *     //animation that can be triggered before the class is removed\n *     beforeRemoveClass: function(element, className, done) { },\n *\n *     //animation that can be triggered after the class is removed\n *     removeClass: function(element, className, done) { }\n *   };\n * });\n * ```\n *\n * JavaScript-defined animations are created with a CSS-like class selector and a collection of events which are set to run\n * a javascript callback function. When an animation is triggered, $animate will look for a matching animation which fits\n * the element's CSS class attribute value and then run the matching animation event function (if found).\n * In other words, if the CSS classes present on the animated element match any of the JavaScript animations then the callback function will\n * be executed. It should be also noted that only simple, single class selectors are allowed (compound class selectors are not supported).\n *\n * Within a JavaScript animation, an object containing various event callback animation functions is expected to be returned.\n * As explained above, these callbacks are triggered based on the animation event. Therefore if an enter animation is run,\n * and the JavaScript animation is found, then the enter callback will handle that animation (in addition to the CSS keyframe animation\n * or transition code that is defined via a stylesheet).\n *\n */\n\nangular.module('ngAnimate', ['ng'])\n\n  /**\n   * @ngdoc provider\n   * @name $animateProvider\n   * @description\n   *\n   * The `$animateProvider` allows developers to register JavaScript animation event handlers directly inside of a module.\n   * When an animation is triggered, the $animate service will query the $animate service to find any animations that match\n   * the provided name value.\n   *\n   * Requires the {@link ngAnimate `ngAnimate`} module to be installed.\n   *\n   * Please visit the {@link ngAnimate `ngAnimate`} module overview page learn more about how to use animations in your application.\n   *\n   */\n\n  //this private service is only used within CSS-enabled animations\n  //IE8 + IE9 do not support rAF natively, but that is fine since they\n  //also don't support transitions and keyframes which means that the code\n  //below will never be used by the two browsers.\n  .factory('$$animateReflow', ['$$rAF', '$document', function($$rAF, $document) {\n    var bod = $document[0].body;\n    return function(fn) {\n      //the returned function acts as the cancellation function\n      return $$rAF(function() {\n        //the line below will force the browser to perform a repaint\n        //so that all the animated elements within the animation frame\n        //will be properly updated and drawn on screen. This is\n        //required to perform multi-class CSS based animations with\n        //Firefox. DO NOT REMOVE THIS LINE.\n        var a = bod.offsetWidth + 1;\n        fn();\n      });\n    };\n  }])\n\n  .config(['$provide', '$animateProvider', function($provide, $animateProvider) {\n    var noop = angular.noop;\n    var forEach = angular.forEach;\n    var selectors = $animateProvider.$$selectors;\n\n    var ELEMENT_NODE = 1;\n    var NG_ANIMATE_STATE = '$$ngAnimateState';\n    var NG_ANIMATE_CLASS_NAME = 'ng-animate';\n    var rootAnimateState = {running: true};\n\n    function extractElementNode(element) {\n      for(var i = 0; i < element.length; i++) {\n        var elm = element[i];\n        if(elm.nodeType == ELEMENT_NODE) {\n          return elm;\n        }\n      }\n    }\n\n    function prepareElement(element) {\n      return element && angular.element(element);\n    }\n\n    function stripCommentsFromElement(element) {\n      return angular.element(extractElementNode(element));\n    }\n\n    function isMatchingElement(elm1, elm2) {\n      return extractElementNode(elm1) == extractElementNode(elm2);\n    }\n\n    $provide.decorator('$animate', ['$delegate', '$injector', '$sniffer', '$rootElement', '$$asyncCallback', '$rootScope', '$document',\n                            function($delegate,   $injector,   $sniffer,   $rootElement,   $$asyncCallback,    $rootScope,   $document) {\n\n      var globalAnimationCounter = 0;\n      $rootElement.data(NG_ANIMATE_STATE, rootAnimateState);\n\n      // disable animations during bootstrap, but once we bootstrapped, wait again\n      // for another digest until enabling animations. The reason why we digest twice\n      // is because all structural animations (enter, leave and move) all perform a\n      // post digest operation before animating. If we only wait for a single digest\n      // to pass then the structural animation would render its animation on page load.\n      // (which is what we're trying to avoid when the application first boots up.)\n      $rootScope.$$postDigest(function() {\n        $rootScope.$$postDigest(function() {\n          rootAnimateState.running = false;\n        });\n      });\n\n      var classNameFilter = $animateProvider.classNameFilter();\n      var isAnimatableClassName = !classNameFilter\n              ? function() { return true; }\n              : function(className) {\n                return classNameFilter.test(className);\n              };\n\n      function lookup(name) {\n        if (name) {\n          var matches = [],\n              flagMap = {},\n              classes = name.substr(1).split('.');\n\n          //the empty string value is the default animation\n          //operation which performs CSS transition and keyframe\n          //animations sniffing. This is always included for each\n          //element animation procedure if the browser supports\n          //transitions and/or keyframe animations. The default\n          //animation is added to the top of the list to prevent\n          //any previous animations from affecting the element styling\n          //prior to the element being animated.\n          if ($sniffer.transitions || $sniffer.animations) {\n            matches.push($injector.get(selectors['']));\n          }\n\n          for(var i=0; i < classes.length; i++) {\n            var klass = classes[i],\n                selectorFactoryName = selectors[klass];\n            if(selectorFactoryName && !flagMap[klass]) {\n              matches.push($injector.get(selectorFactoryName));\n              flagMap[klass] = true;\n            }\n          }\n          return matches;\n        }\n      }\n\n      function animationRunner(element, animationEvent, className) {\n        //transcluded directives may sometimes fire an animation using only comment nodes\n        //best to catch this early on to prevent any animation operations from occurring\n        var node = element[0];\n        if(!node) {\n          return;\n        }\n\n        var isSetClassOperation = animationEvent == 'setClass';\n        var isClassBased = isSetClassOperation ||\n                           animationEvent == 'addClass' ||\n                           animationEvent == 'removeClass';\n\n        var classNameAdd, classNameRemove;\n        if(angular.isArray(className)) {\n          classNameAdd = className[0];\n          classNameRemove = className[1];\n          className = classNameAdd + ' ' + classNameRemove;\n        }\n\n        var currentClassName = element.attr('class');\n        var classes = currentClassName + ' ' + className;\n        if(!isAnimatableClassName(classes)) {\n          return;\n        }\n\n        var beforeComplete = noop,\n            beforeCancel = [],\n            before = [],\n            afterComplete = noop,\n            afterCancel = [],\n            after = [];\n\n        var animationLookup = (' ' + classes).replace(/\\s+/g,'.');\n        forEach(lookup(animationLookup), function(animationFactory) {\n          var created = registerAnimation(animationFactory, animationEvent);\n          if(!created && isSetClassOperation) {\n            registerAnimation(animationFactory, 'addClass');\n            registerAnimation(animationFactory, 'removeClass');\n          }\n        });\n\n        function registerAnimation(animationFactory, event) {\n          var afterFn = animationFactory[event];\n          var beforeFn = animationFactory['before' + event.charAt(0).toUpperCase() + event.substr(1)];\n          if(afterFn || beforeFn) {\n            if(event == 'leave') {\n              beforeFn = afterFn;\n              //when set as null then animation knows to skip this phase\n              afterFn = null;\n            }\n            after.push({\n              event : event, fn : afterFn\n            });\n            before.push({\n              event : event, fn : beforeFn\n            });\n            return true;\n          }\n        }\n\n        function run(fns, cancellations, allCompleteFn) {\n          var animations = [];\n          forEach(fns, function(animation) {\n            animation.fn && animations.push(animation);\n          });\n\n          var count = 0;\n          function afterAnimationComplete(index) {\n            if(cancellations) {\n              (cancellations[index] || noop)();\n              if(++count < animations.length) return;\n              cancellations = null;\n            }\n            allCompleteFn();\n          }\n\n          //The code below adds directly to the array in order to work with\n          //both sync and async animations. Sync animations are when the done()\n          //operation is called right away. DO NOT REFACTOR!\n          forEach(animations, function(animation, index) {\n            var progress = function() {\n              afterAnimationComplete(index);\n            };\n            switch(animation.event) {\n              case 'setClass':\n                cancellations.push(animation.fn(element, classNameAdd, classNameRemove, progress));\n                break;\n              case 'addClass':\n                cancellations.push(animation.fn(element, classNameAdd || className,     progress));\n                break;\n              case 'removeClass':\n                cancellations.push(animation.fn(element, classNameRemove || className,  progress));\n                break;\n              default:\n                cancellations.push(animation.fn(element, progress));\n                break;\n            }\n          });\n\n          if(cancellations && cancellations.length === 0) {\n            allCompleteFn();\n          }\n        }\n\n        return {\n          node : node,\n          event : animationEvent,\n          className : className,\n          isClassBased : isClassBased,\n          isSetClassOperation : isSetClassOperation,\n          before : function(allCompleteFn) {\n            beforeComplete = allCompleteFn;\n            run(before, beforeCancel, function() {\n              beforeComplete = noop;\n              allCompleteFn();\n            });\n          },\n          after : function(allCompleteFn) {\n            afterComplete = allCompleteFn;\n            run(after, afterCancel, function() {\n              afterComplete = noop;\n              allCompleteFn();\n            });\n          },\n          cancel : function() {\n            if(beforeCancel) {\n              forEach(beforeCancel, function(cancelFn) {\n                (cancelFn || noop)(true);\n              });\n              beforeComplete(true);\n            }\n            if(afterCancel) {\n              forEach(afterCancel, function(cancelFn) {\n                (cancelFn || noop)(true);\n              });\n              afterComplete(true);\n            }\n          }\n        };\n      }\n\n      /**\n       * @ngdoc service\n       * @name $animate\n       * @kind function\n       *\n       * @description\n       * The `$animate` service provides animation detection support while performing DOM operations (enter, leave and move) as well as during addClass and removeClass operations.\n       * When any of these operations are run, the $animate service\n       * will examine any JavaScript-defined animations (which are defined by using the $animateProvider provider object)\n       * as well as any CSS-defined animations against the CSS classes present on the element once the DOM operation is run.\n       *\n       * The `$animate` service is used behind the scenes with pre-existing directives and animation with these directives\n       * will work out of the box without any extra configuration.\n       *\n       * Requires the {@link ngAnimate `ngAnimate`} module to be installed.\n       *\n       * Please visit the {@link ngAnimate `ngAnimate`} module overview page learn more about how to use animations in your application.\n       *\n       */\n      return {\n        /**\n         * @ngdoc method\n         * @name $animate#enter\n         * @kind function\n         *\n         * @description\n         * Appends the element to the parentElement element that resides in the document and then runs the enter animation. Once\n         * the animation is started, the following CSS classes will be present on the element for the duration of the animation:\n         *\n         * Below is a breakdown of each step that occurs during enter animation:\n         *\n         * | Animation Step                                                                               | What the element class attribute looks like |\n         * |----------------------------------------------------------------------------------------------|---------------------------------------------|\n         * | 1. $animate.enter(...) is called                                                             | class=\"my-animation\"                        |\n         * | 2. element is inserted into the parentElement element or beside the afterElement element     | class=\"my-animation\"                        |\n         * | 3. $animate runs any JavaScript-defined animations on the element                            | class=\"my-animation ng-animate\"             |\n         * | 4. the .ng-enter class is added to the element                                               | class=\"my-animation ng-animate ng-enter\"    |\n         * | 5. $animate scans the element styles to get the CSS transition/animation duration and delay  | class=\"my-animation ng-animate ng-enter\"    |\n         * | 6. $animate waits for 10ms (this performs a reflow)                                          | class=\"my-animation ng-animate ng-enter\"    |\n         * | 7. the .ng-enter-active and .ng-animate-active classes are added (this triggers the CSS transition/animation) | class=\"my-animation ng-animate ng-animate-active ng-enter ng-enter-active\" |\n         * | 8. $animate waits for X milliseconds for the animation to complete                           | class=\"my-animation ng-animate ng-animate-active ng-enter ng-enter-active\" |\n         * | 9. The animation ends and all generated CSS classes are removed from the element             | class=\"my-animation\"                        |\n         * | 10. The doneCallback() callback is fired (if provided)                                       | class=\"my-animation\"                        |\n         *\n         * @param {DOMElement} element the element that will be the focus of the enter animation\n         * @param {DOMElement} parentElement the parent element of the element that will be the focus of the enter animation\n         * @param {DOMElement} afterElement the sibling element (which is the previous element) of the element that will be the focus of the enter animation\n         * @param {function()=} doneCallback the callback function that will be called once the animation is complete\n        */\n        enter : function(element, parentElement, afterElement, doneCallback) {\n          element = angular.element(element);\n          parentElement = prepareElement(parentElement);\n          afterElement = prepareElement(afterElement);\n\n          this.enabled(false, element);\n          $delegate.enter(element, parentElement, afterElement);\n          $rootScope.$$postDigest(function() {\n            element = stripCommentsFromElement(element);\n            performAnimation('enter', 'ng-enter', element, parentElement, afterElement, noop, doneCallback);\n          });\n        },\n\n        /**\n         * @ngdoc method\n         * @name $animate#leave\n         * @kind function\n         *\n         * @description\n         * Runs the leave animation operation and, upon completion, removes the element from the DOM. Once\n         * the animation is started, the following CSS classes will be added for the duration of the animation:\n         *\n         * Below is a breakdown of each step that occurs during leave animation:\n         *\n         * | Animation Step                                                                               | What the element class attribute looks like |\n         * |----------------------------------------------------------------------------------------------|---------------------------------------------|\n         * | 1. $animate.leave(...) is called                                                             | class=\"my-animation\"                        |\n         * | 2. $animate runs any JavaScript-defined animations on the element                            | class=\"my-animation ng-animate\"             |\n         * | 3. the .ng-leave class is added to the element                                               | class=\"my-animation ng-animate ng-leave\"    |\n         * | 4. $animate scans the element styles to get the CSS transition/animation duration and delay  | class=\"my-animation ng-animate ng-leave\"    |\n         * | 5. $animate waits for 10ms (this performs a reflow)                                          | class=\"my-animation ng-animate ng-leave\"    |\n         * | 6. the .ng-leave-active and .ng-animate-active classes is added (this triggers the CSS transition/animation) | class=\"my-animation ng-animate ng-animate-active ng-leave ng-leave-active\" |\n         * | 7. $animate waits for X milliseconds for the animation to complete                           | class=\"my-animation ng-animate ng-animate-active ng-leave ng-leave-active\" |\n         * | 8. The animation ends and all generated CSS classes are removed from the element             | class=\"my-animation\"                        |\n         * | 9. The element is removed from the DOM                                                       | ...                                         |\n         * | 10. The doneCallback() callback is fired (if provided)                                       | ...                                         |\n         *\n         * @param {DOMElement} element the element that will be the focus of the leave animation\n         * @param {function()=} doneCallback the callback function that will be called once the animation is complete\n        */\n        leave : function(element, doneCallback) {\n          element = angular.element(element);\n          cancelChildAnimations(element);\n          this.enabled(false, element);\n          $rootScope.$$postDigest(function() {\n            performAnimation('leave', 'ng-leave', stripCommentsFromElement(element), null, null, function() {\n              $delegate.leave(element);\n            }, doneCallback);\n          });\n        },\n\n        /**\n         * @ngdoc method\n         * @name $animate#move\n         * @kind function\n         *\n         * @description\n         * Fires the move DOM operation. Just before the animation starts, the animate service will either append it into the parentElement container or\n         * add the element directly after the afterElement element if present. Then the move animation will be run. Once\n         * the animation is started, the following CSS classes will be added for the duration of the animation:\n         *\n         * Below is a breakdown of each step that occurs during move animation:\n         *\n         * | Animation Step                                                                               | What the element class attribute looks like |\n         * |----------------------------------------------------------------------------------------------|---------------------------------------------|\n         * | 1. $animate.move(...) is called                                                              | class=\"my-animation\"                        |\n         * | 2. element is moved into the parentElement element or beside the afterElement element        | class=\"my-animation\"                        |\n         * | 3. $animate runs any JavaScript-defined animations on the element                            | class=\"my-animation ng-animate\"             |\n         * | 4. the .ng-move class is added to the element                                                | class=\"my-animation ng-animate ng-move\"     |\n         * | 5. $animate scans the element styles to get the CSS transition/animation duration and delay  | class=\"my-animation ng-animate ng-move\"     |\n         * | 6. $animate waits for 10ms (this performs a reflow)                                          | class=\"my-animation ng-animate ng-move\"     |\n         * | 7. the .ng-move-active and .ng-animate-active classes is added (this triggers the CSS transition/animation) | class=\"my-animation ng-animate ng-animate-active ng-move ng-move-active\" |\n         * | 8. $animate waits for X milliseconds for the animation to complete                           | class=\"my-animation ng-animate ng-animate-active ng-move ng-move-active\" |\n         * | 9. The animation ends and all generated CSS classes are removed from the element             | class=\"my-animation\"                        |\n         * | 10. The doneCallback() callback is fired (if provided)                                       | class=\"my-animation\"                        |\n         *\n         * @param {DOMElement} element the element that will be the focus of the move animation\n         * @param {DOMElement} parentElement the parentElement element of the element that will be the focus of the move animation\n         * @param {DOMElement} afterElement the sibling element (which is the previous element) of the element that will be the focus of the move animation\n         * @param {function()=} doneCallback the callback function that will be called once the animation is complete\n        */\n        move : function(element, parentElement, afterElement, doneCallback) {\n          element = angular.element(element);\n          parentElement = prepareElement(parentElement);\n          afterElement = prepareElement(afterElement);\n\n          cancelChildAnimations(element);\n          this.enabled(false, element);\n          $delegate.move(element, parentElement, afterElement);\n          $rootScope.$$postDigest(function() {\n            element = stripCommentsFromElement(element);\n            performAnimation('move', 'ng-move', element, parentElement, afterElement, noop, doneCallback);\n          });\n        },\n\n        /**\n         * @ngdoc method\n         * @name $animate#addClass\n         *\n         * @description\n         * Triggers a custom animation event based off the className variable and then attaches the className value to the element as a CSS class.\n         * Unlike the other animation methods, the animate service will suffix the className value with {@type -add} in order to provide\n         * the animate service the setup and active CSS classes in order to trigger the animation (this will be skipped if no CSS transitions\n         * or keyframes are defined on the -add or base CSS class).\n         *\n         * Below is a breakdown of each step that occurs during addClass animation:\n         *\n         * | Animation Step                                                                                 | What the element class attribute looks like |\n         * |------------------------------------------------------------------------------------------------|---------------------------------------------|\n         * | 1. $animate.addClass(element, 'super') is called                                               | class=\"my-animation\"                        |\n         * | 2. $animate runs any JavaScript-defined animations on the element                              | class=\"my-animation ng-animate\"             |\n         * | 3. the .super-add class are added to the element                                               | class=\"my-animation ng-animate super-add\"   |\n         * | 4. $animate scans the element styles to get the CSS transition/animation duration and delay    | class=\"my-animation ng-animate super-add\"   |\n         * | 5. $animate waits for 10ms (this performs a reflow)                                            | class=\"my-animation ng-animate super-add\"   |\n         * | 6. the .super, .super-add-active and .ng-animate-active classes are added (this triggers the CSS transition/animation) | class=\"my-animation ng-animate ng-animate-active super super-add super-add-active\"          |\n         * | 7. $animate waits for X milliseconds for the animation to complete                             | class=\"my-animation super super-add super-add-active\"  |\n         * | 8. The animation ends and all generated CSS classes are removed from the element               | class=\"my-animation super\"                  |\n         * | 9. The super class is kept on the element                                                      | class=\"my-animation super\"                  |\n         * | 10. The doneCallback() callback is fired (if provided)                                         | class=\"my-animation super\"                  |\n         *\n         * @param {DOMElement} element the element that will be animated\n         * @param {string} className the CSS class that will be added to the element and then animated\n         * @param {function()=} doneCallback the callback function that will be called once the animation is complete\n        */\n        addClass : function(element, className, doneCallback) {\n          element = angular.element(element);\n          element = stripCommentsFromElement(element);\n          performAnimation('addClass', className, element, null, null, function() {\n            $delegate.addClass(element, className);\n          }, doneCallback);\n        },\n\n        /**\n         * @ngdoc method\n         * @name $animate#removeClass\n         *\n         * @description\n         * Triggers a custom animation event based off the className variable and then removes the CSS class provided by the className value\n         * from the element. Unlike the other animation methods, the animate service will suffix the className value with {@type -remove} in\n         * order to provide the animate service the setup and active CSS classes in order to trigger the animation (this will be skipped if\n         * no CSS transitions or keyframes are defined on the -remove or base CSS classes).\n         *\n         * Below is a breakdown of each step that occurs during removeClass animation:\n         *\n         * | Animation Step                                                                                | What the element class attribute looks like     |\n         * |-----------------------------------------------------------------------------------------------|---------------------------------------------|\n         * | 1. $animate.removeClass(element, 'super') is called                                           | class=\"my-animation super\"                  |\n         * | 2. $animate runs any JavaScript-defined animations on the element                             | class=\"my-animation super ng-animate\"       |\n         * | 3. the .super-remove class are added to the element                                           | class=\"my-animation super ng-animate super-remove\"|\n         * | 4. $animate scans the element styles to get the CSS transition/animation duration and delay   | class=\"my-animation super ng-animate super-remove\"   |\n         * | 5. $animate waits for 10ms (this performs a reflow)                                           | class=\"my-animation super ng-animate super-remove\"   |\n         * | 6. the .super-remove-active and .ng-animate-active classes are added and .super is removed (this triggers the CSS transition/animation) | class=\"my-animation ng-animate ng-animate-active super-remove super-remove-active\"          |\n         * | 7. $animate waits for X milliseconds for the animation to complete                            | class=\"my-animation ng-animate ng-animate-active super-remove super-remove-active\"   |\n         * | 8. The animation ends and all generated CSS classes are removed from the element              | class=\"my-animation\"                        |\n         * | 9. The doneCallback() callback is fired (if provided)                                         | class=\"my-animation\"                        |\n         *\n         *\n         * @param {DOMElement} element the element that will be animated\n         * @param {string} className the CSS class that will be animated and then removed from the element\n         * @param {function()=} doneCallback the callback function that will be called once the animation is complete\n        */\n        removeClass : function(element, className, doneCallback) {\n          element = angular.element(element);\n          element = stripCommentsFromElement(element);\n          performAnimation('removeClass', className, element, null, null, function() {\n            $delegate.removeClass(element, className);\n          }, doneCallback);\n        },\n\n          /**\n           *\n           * @ngdoc function\n           * @name $animate#setClass\n           * @function\n           * @description Adds and/or removes the given CSS classes to and from the element.\n           * Once complete, the done() callback will be fired (if provided).\n           * @param {DOMElement} element the element which will its CSS classes changed\n           *   removed from it\n           * @param {string} add the CSS classes which will be added to the element\n           * @param {string} remove the CSS class which will be removed from the element\n           * @param {Function=} done the callback function (if provided) that will be fired after the\n           *   CSS classes have been set on the element\n           */\n        setClass : function(element, add, remove, doneCallback) {\n          element = angular.element(element);\n          element = stripCommentsFromElement(element);\n          performAnimation('setClass', [add, remove], element, null, null, function() {\n            $delegate.setClass(element, add, remove);\n          }, doneCallback);\n        },\n\n        /**\n         * @ngdoc method\n         * @name $animate#enabled\n         * @kind function\n         *\n         * @param {boolean=} value If provided then set the animation on or off.\n         * @param {DOMElement} element If provided then the element will be used to represent the enable/disable operation\n         * @return {boolean} Current animation state.\n         *\n         * @description\n         * Globally enables/disables animations.\n         *\n        */\n        enabled : function(value, element) {\n          switch(arguments.length) {\n            case 2:\n              if(value) {\n                cleanup(element);\n              } else {\n                var data = element.data(NG_ANIMATE_STATE) || {};\n                data.disabled = true;\n                element.data(NG_ANIMATE_STATE, data);\n              }\n            break;\n\n            case 1:\n              rootAnimateState.disabled = !value;\n            break;\n\n            default:\n              value = !rootAnimateState.disabled;\n            break;\n          }\n          return !!value;\n         }\n      };\n\n      /*\n        all animations call this shared animation triggering function internally.\n        The animationEvent variable refers to the JavaScript animation event that will be triggered\n        and the className value is the name of the animation that will be applied within the\n        CSS code. Element, parentElement and afterElement are provided DOM elements for the animation\n        and the onComplete callback will be fired once the animation is fully complete.\n      */\n      function performAnimation(animationEvent, className, element, parentElement, afterElement, domOperation, doneCallback) {\n\n        var runner = animationRunner(element, animationEvent, className);\n        if(!runner) {\n          fireDOMOperation();\n          fireBeforeCallbackAsync();\n          fireAfterCallbackAsync();\n          closeAnimation();\n          return;\n        }\n\n        className = runner.className;\n        var elementEvents = angular.element._data(runner.node);\n        elementEvents = elementEvents && elementEvents.events;\n\n        if (!parentElement) {\n          parentElement = afterElement ? afterElement.parent() : element.parent();\n        }\n\n        var ngAnimateState  = element.data(NG_ANIMATE_STATE) || {};\n        var runningAnimations     = ngAnimateState.active || {};\n        var totalActiveAnimations = ngAnimateState.totalActive || 0;\n        var lastAnimation         = ngAnimateState.last;\n\n        //only allow animations if the currently running animation is not structural\n        //or if there is no animation running at all\n        var skipAnimations = runner.isClassBased ?\n          ngAnimateState.disabled || (lastAnimation && !lastAnimation.isClassBased) :\n          false;\n\n        //skip the animation if animations are disabled, a parent is already being animated,\n        //the element is not currently attached to the document body or then completely close\n        //the animation if any matching animations are not found at all.\n        //NOTE: IE8 + IE9 should close properly (run closeAnimation()) in case an animation was found.\n        if (skipAnimations || animationsDisabled(element, parentElement)) {\n          fireDOMOperation();\n          fireBeforeCallbackAsync();\n          fireAfterCallbackAsync();\n          closeAnimation();\n          return;\n        }\n\n        var skipAnimation = false;\n        if(totalActiveAnimations > 0) {\n          var animationsToCancel = [];\n          if(!runner.isClassBased) {\n            if(animationEvent == 'leave' && runningAnimations['ng-leave']) {\n              skipAnimation = true;\n            } else {\n              //cancel all animations when a structural animation takes place\n              for(var klass in runningAnimations) {\n                animationsToCancel.push(runningAnimations[klass]);\n                cleanup(element, klass);\n              }\n              runningAnimations = {};\n              totalActiveAnimations = 0;\n            }\n          } else if(lastAnimation.event == 'setClass') {\n            animationsToCancel.push(lastAnimation);\n            cleanup(element, className);\n          }\n          else if(runningAnimations[className]) {\n            var current = runningAnimations[className];\n            if(current.event == animationEvent) {\n              skipAnimation = true;\n            } else {\n              animationsToCancel.push(current);\n              cleanup(element, className);\n            }\n          }\n\n          if(animationsToCancel.length > 0) {\n            forEach(animationsToCancel, function(operation) {\n              operation.cancel();\n            });\n          }\n        }\n\n        if(runner.isClassBased && !runner.isSetClassOperation && !skipAnimation) {\n          skipAnimation = (animationEvent == 'addClass') == element.hasClass(className); //opposite of XOR\n        }\n\n        if(skipAnimation) {\n          fireDOMOperation();\n          fireBeforeCallbackAsync();\n          fireAfterCallbackAsync();\n          fireDoneCallbackAsync();\n          return;\n        }\n\n        if(animationEvent == 'leave') {\n          //there's no need to ever remove the listener since the element\n          //will be removed (destroyed) after the leave animation ends or\n          //is cancelled midway\n          element.one('$destroy', function(e) {\n            var element = angular.element(this);\n            var state = element.data(NG_ANIMATE_STATE);\n            if(state) {\n              var activeLeaveAnimation = state.active['ng-leave'];\n              if(activeLeaveAnimation) {\n                activeLeaveAnimation.cancel();\n                cleanup(element, 'ng-leave');\n              }\n            }\n          });\n        }\n\n        //the ng-animate class does nothing, but it's here to allow for\n        //parent animations to find and cancel child animations when needed\n        element.addClass(NG_ANIMATE_CLASS_NAME);\n\n        var localAnimationCount = globalAnimationCounter++;\n        totalActiveAnimations++;\n        runningAnimations[className] = runner;\n\n        element.data(NG_ANIMATE_STATE, {\n          last : runner,\n          active : runningAnimations,\n          index : localAnimationCount,\n          totalActive : totalActiveAnimations\n        });\n\n        //first we run the before animations and when all of those are complete\n        //then we perform the DOM operation and run the next set of animations\n        fireBeforeCallbackAsync();\n        runner.before(function(cancelled) {\n          var data = element.data(NG_ANIMATE_STATE);\n          cancelled = cancelled ||\n                        !data || !data.active[className] ||\n                        (runner.isClassBased && data.active[className].event != animationEvent);\n\n          fireDOMOperation();\n          if(cancelled === true) {\n            closeAnimation();\n          } else {\n            fireAfterCallbackAsync();\n            runner.after(closeAnimation);\n          }\n        });\n\n        function fireDOMCallback(animationPhase) {\n          var eventName = '$animate:' + animationPhase;\n          if(elementEvents && elementEvents[eventName] && elementEvents[eventName].length > 0) {\n            $$asyncCallback(function() {\n              element.triggerHandler(eventName, {\n                event : animationEvent,\n                className : className\n              });\n            });\n          }\n        }\n\n        function fireBeforeCallbackAsync() {\n          fireDOMCallback('before');\n        }\n\n        function fireAfterCallbackAsync() {\n          fireDOMCallback('after');\n        }\n\n        function fireDoneCallbackAsync() {\n          fireDOMCallback('close');\n          if(doneCallback) {\n            $$asyncCallback(function() {\n              doneCallback();\n            });\n          }\n        }\n\n        //it is less complicated to use a flag than managing and canceling\n        //timeouts containing multiple callbacks.\n        function fireDOMOperation() {\n          if(!fireDOMOperation.hasBeenRun) {\n            fireDOMOperation.hasBeenRun = true;\n            domOperation();\n          }\n        }\n\n        function closeAnimation() {\n          if(!closeAnimation.hasBeenRun) {\n            closeAnimation.hasBeenRun = true;\n            var data = element.data(NG_ANIMATE_STATE);\n            if(data) {\n              /* only structural animations wait for reflow before removing an\n                 animation, but class-based animations don't. An example of this\n                 failing would be when a parent HTML tag has a ng-class attribute\n                 causing ALL directives below to skip animations during the digest */\n              if(runner && runner.isClassBased) {\n                cleanup(element, className);\n              } else {\n                $$asyncCallback(function() {\n                  var data = element.data(NG_ANIMATE_STATE) || {};\n                  if(localAnimationCount == data.index) {\n                    cleanup(element, className, animationEvent);\n                  }\n                });\n                element.data(NG_ANIMATE_STATE, data);\n              }\n            }\n            fireDoneCallbackAsync();\n          }\n        }\n      }\n\n      function cancelChildAnimations(element) {\n        var node = extractElementNode(element);\n        if (node) {\n          var nodes = angular.isFunction(node.getElementsByClassName) ?\n            node.getElementsByClassName(NG_ANIMATE_CLASS_NAME) :\n            node.querySelectorAll('.' + NG_ANIMATE_CLASS_NAME);\n          forEach(nodes, function(element) {\n            element = angular.element(element);\n            var data = element.data(NG_ANIMATE_STATE);\n            if(data && data.active) {\n              forEach(data.active, function(runner) {\n                runner.cancel();\n              });\n            }\n          });\n        }\n      }\n\n      function cleanup(element, className) {\n        if(isMatchingElement(element, $rootElement)) {\n          if(!rootAnimateState.disabled) {\n            rootAnimateState.running = false;\n            rootAnimateState.structural = false;\n          }\n        } else if(className) {\n          var data = element.data(NG_ANIMATE_STATE) || {};\n\n          var removeAnimations = className === true;\n          if(!removeAnimations && data.active && data.active[className]) {\n            data.totalActive--;\n            delete data.active[className];\n          }\n\n          if(removeAnimations || !data.totalActive) {\n            element.removeClass(NG_ANIMATE_CLASS_NAME);\n            element.removeData(NG_ANIMATE_STATE);\n          }\n        }\n      }\n\n      function animationsDisabled(element, parentElement) {\n        if (rootAnimateState.disabled) return true;\n\n        if(isMatchingElement(element, $rootElement)) {\n          return rootAnimateState.disabled || rootAnimateState.running;\n        }\n\n        do {\n          //the element did not reach the root element which means that it\n          //is not apart of the DOM. Therefore there is no reason to do\n          //any animations on it\n          if(parentElement.length === 0) break;\n\n          var isRoot = isMatchingElement(parentElement, $rootElement);\n          var state = isRoot ? rootAnimateState : parentElement.data(NG_ANIMATE_STATE);\n          var result = state && (!!state.disabled || state.running || state.totalActive > 0);\n          if(isRoot || result) {\n            return result;\n          }\n\n          if(isRoot) return true;\n        }\n        while(parentElement = parentElement.parent());\n\n        return true;\n      }\n    }]);\n\n    $animateProvider.register('', ['$window', '$sniffer', '$timeout', '$$animateReflow',\n                           function($window,   $sniffer,   $timeout,   $$animateReflow) {\n      // Detect proper transitionend/animationend event names.\n      var CSS_PREFIX = '', TRANSITION_PROP, TRANSITIONEND_EVENT, ANIMATION_PROP, ANIMATIONEND_EVENT;\n\n      // If unprefixed events are not supported but webkit-prefixed are, use the latter.\n      // Otherwise, just use W3C names, browsers not supporting them at all will just ignore them.\n      // Note: Chrome implements `window.onwebkitanimationend` and doesn't implement `window.onanimationend`\n      // but at the same time dispatches the `animationend` event and not `webkitAnimationEnd`.\n      // Register both events in case `window.onanimationend` is not supported because of that,\n      // do the same for `transitionend` as Safari is likely to exhibit similar behavior.\n      // Also, the only modern browser that uses vendor prefixes for transitions/keyframes is webkit\n      // therefore there is no reason to test anymore for other vendor prefixes: http://caniuse.com/#search=transition\n      if (window.ontransitionend === undefined && window.onwebkittransitionend !== undefined) {\n        CSS_PREFIX = '-webkit-';\n        TRANSITION_PROP = 'WebkitTransition';\n        TRANSITIONEND_EVENT = 'webkitTransitionEnd transitionend';\n      } else {\n        TRANSITION_PROP = 'transition';\n        TRANSITIONEND_EVENT = 'transitionend';\n      }\n\n      if (window.onanimationend === undefined && window.onwebkitanimationend !== undefined) {\n        CSS_PREFIX = '-webkit-';\n        ANIMATION_PROP = 'WebkitAnimation';\n        ANIMATIONEND_EVENT = 'webkitAnimationEnd animationend';\n      } else {\n        ANIMATION_PROP = 'animation';\n        ANIMATIONEND_EVENT = 'animationend';\n      }\n\n      var DURATION_KEY = 'Duration';\n      var PROPERTY_KEY = 'Property';\n      var DELAY_KEY = 'Delay';\n      var ANIMATION_ITERATION_COUNT_KEY = 'IterationCount';\n      var NG_ANIMATE_PARENT_KEY = '$$ngAnimateKey';\n      var NG_ANIMATE_CSS_DATA_KEY = '$$ngAnimateCSS3Data';\n      var NG_ANIMATE_BLOCK_CLASS_NAME = 'ng-animate-block-transitions';\n      var ELAPSED_TIME_MAX_DECIMAL_PLACES = 3;\n      var CLOSING_TIME_BUFFER = 1.5;\n      var ONE_SECOND = 1000;\n\n      var lookupCache = {};\n      var parentCounter = 0;\n      var animationReflowQueue = [];\n      var cancelAnimationReflow;\n      function afterReflow(element, callback) {\n        if(cancelAnimationReflow) {\n          cancelAnimationReflow();\n        }\n        animationReflowQueue.push(callback);\n        cancelAnimationReflow = $$animateReflow(function() {\n          forEach(animationReflowQueue, function(fn) {\n            fn();\n          });\n\n          animationReflowQueue = [];\n          cancelAnimationReflow = null;\n          lookupCache = {};\n        });\n      }\n\n      var closingTimer = null;\n      var closingTimestamp = 0;\n      var animationElementQueue = [];\n      function animationCloseHandler(element, totalTime) {\n        var node = extractElementNode(element);\n        element = angular.element(node);\n\n        //this item will be garbage collected by the closing\n        //animation timeout\n        animationElementQueue.push(element);\n\n        //but it may not need to cancel out the existing timeout\n        //if the timestamp is less than the previous one\n        var futureTimestamp = Date.now() + totalTime;\n        if(futureTimestamp <= closingTimestamp) {\n          return;\n        }\n\n        $timeout.cancel(closingTimer);\n\n        closingTimestamp = futureTimestamp;\n        closingTimer = $timeout(function() {\n          closeAllAnimations(animationElementQueue);\n          animationElementQueue = [];\n        }, totalTime, false);\n      }\n\n      function closeAllAnimations(elements) {\n        forEach(elements, function(element) {\n          var elementData = element.data(NG_ANIMATE_CSS_DATA_KEY);\n          if(elementData) {\n            (elementData.closeAnimationFn || noop)();\n          }\n        });\n      }\n\n      function getElementAnimationDetails(element, cacheKey) {\n        var data = cacheKey ? lookupCache[cacheKey] : null;\n        if(!data) {\n          var transitionDuration = 0;\n          var transitionDelay = 0;\n          var animationDuration = 0;\n          var animationDelay = 0;\n          var transitionDelayStyle;\n          var animationDelayStyle;\n          var transitionDurationStyle;\n          var transitionPropertyStyle;\n\n          //we want all the styles defined before and after\n          forEach(element, function(element) {\n            if (element.nodeType == ELEMENT_NODE) {\n              var elementStyles = $window.getComputedStyle(element) || {};\n\n              transitionDurationStyle = elementStyles[TRANSITION_PROP + DURATION_KEY];\n\n              transitionDuration = Math.max(parseMaxTime(transitionDurationStyle), transitionDuration);\n\n              transitionPropertyStyle = elementStyles[TRANSITION_PROP + PROPERTY_KEY];\n\n              transitionDelayStyle = elementStyles[TRANSITION_PROP + DELAY_KEY];\n\n              transitionDelay  = Math.max(parseMaxTime(transitionDelayStyle), transitionDelay);\n\n              animationDelayStyle = elementStyles[ANIMATION_PROP + DELAY_KEY];\n\n              animationDelay   = Math.max(parseMaxTime(animationDelayStyle), animationDelay);\n\n              var aDuration  = parseMaxTime(elementStyles[ANIMATION_PROP + DURATION_KEY]);\n\n              if(aDuration > 0) {\n                aDuration *= parseInt(elementStyles[ANIMATION_PROP + ANIMATION_ITERATION_COUNT_KEY], 10) || 1;\n              }\n\n              animationDuration = Math.max(aDuration, animationDuration);\n            }\n          });\n          data = {\n            total : 0,\n            transitionPropertyStyle: transitionPropertyStyle,\n            transitionDurationStyle: transitionDurationStyle,\n            transitionDelayStyle: transitionDelayStyle,\n            transitionDelay: transitionDelay,\n            transitionDuration: transitionDuration,\n            animationDelayStyle: animationDelayStyle,\n            animationDelay: animationDelay,\n            animationDuration: animationDuration\n          };\n          if(cacheKey) {\n            lookupCache[cacheKey] = data;\n          }\n        }\n        return data;\n      }\n\n      function parseMaxTime(str) {\n        var maxValue = 0;\n        var values = angular.isString(str) ?\n          str.split(/\\s*,\\s*/) :\n          [];\n        forEach(values, function(value) {\n          maxValue = Math.max(parseFloat(value) || 0, maxValue);\n        });\n        return maxValue;\n      }\n\n      function getCacheKey(element) {\n        var parentElement = element.parent();\n        var parentID = parentElement.data(NG_ANIMATE_PARENT_KEY);\n        if(!parentID) {\n          parentElement.data(NG_ANIMATE_PARENT_KEY, ++parentCounter);\n          parentID = parentCounter;\n        }\n        return parentID + '-' + extractElementNode(element).getAttribute('class');\n      }\n\n      function animateSetup(animationEvent, element, className, calculationDecorator) {\n        var cacheKey = getCacheKey(element);\n        var eventCacheKey = cacheKey + ' ' + className;\n        var itemIndex = lookupCache[eventCacheKey] ? ++lookupCache[eventCacheKey].total : 0;\n\n        var stagger = {};\n        if(itemIndex > 0) {\n          var staggerClassName = className + '-stagger';\n          var staggerCacheKey = cacheKey + ' ' + staggerClassName;\n          var applyClasses = !lookupCache[staggerCacheKey];\n\n          applyClasses && element.addClass(staggerClassName);\n\n          stagger = getElementAnimationDetails(element, staggerCacheKey);\n\n          applyClasses && element.removeClass(staggerClassName);\n        }\n\n        /* the animation itself may need to add/remove special CSS classes\n         * before calculating the anmation styles */\n        calculationDecorator = calculationDecorator ||\n                               function(fn) { return fn(); };\n\n        element.addClass(className);\n\n        var formerData = element.data(NG_ANIMATE_CSS_DATA_KEY) || {};\n\n        var timings = calculationDecorator(function() {\n          return getElementAnimationDetails(element, eventCacheKey);\n        });\n\n        var transitionDuration = timings.transitionDuration;\n        var animationDuration = timings.animationDuration;\n        if(transitionDuration === 0 && animationDuration === 0) {\n          element.removeClass(className);\n          return false;\n        }\n\n        element.data(NG_ANIMATE_CSS_DATA_KEY, {\n          running : formerData.running || 0,\n          itemIndex : itemIndex,\n          stagger : stagger,\n          timings : timings,\n          closeAnimationFn : noop\n        });\n\n        //temporarily disable the transition so that the enter styles\n        //don't animate twice (this is here to avoid a bug in Chrome/FF).\n        var isCurrentlyAnimating = formerData.running > 0 || animationEvent == 'setClass';\n        if(transitionDuration > 0) {\n          blockTransitions(element, className, isCurrentlyAnimating);\n        }\n\n        //staggering keyframe animations work by adjusting the `animation-delay` CSS property\n        //on the given element, however, the delay value can only calculated after the reflow\n        //since by that time $animate knows how many elements are being animated. Therefore,\n        //until the reflow occurs the element needs to be blocked (where the keyframe animation\n        //is set to `none 0s`). This blocking mechanism should only be set for when a stagger\n        //animation is detected and when the element item index is greater than 0.\n        if(animationDuration > 0 && stagger.animationDelay > 0 && stagger.animationDuration === 0) {\n          blockKeyframeAnimations(element);\n        }\n\n        return true;\n      }\n\n      function isStructuralAnimation(className) {\n        return className == 'ng-enter' || className == 'ng-move' || className == 'ng-leave';\n      }\n\n      function blockTransitions(element, className, isAnimating) {\n        if(isStructuralAnimation(className) || !isAnimating) {\n          extractElementNode(element).style[TRANSITION_PROP + PROPERTY_KEY] = 'none';\n        } else {\n          element.addClass(NG_ANIMATE_BLOCK_CLASS_NAME);\n        }\n      }\n\n      function blockKeyframeAnimations(element) {\n        extractElementNode(element).style[ANIMATION_PROP] = 'none 0s';\n      }\n\n      function unblockTransitions(element, className) {\n        var prop = TRANSITION_PROP + PROPERTY_KEY;\n        var node = extractElementNode(element);\n        if(node.style[prop] && node.style[prop].length > 0) {\n          node.style[prop] = '';\n        }\n        element.removeClass(NG_ANIMATE_BLOCK_CLASS_NAME);\n      }\n\n      function unblockKeyframeAnimations(element) {\n        var prop = ANIMATION_PROP;\n        var node = extractElementNode(element);\n        if(node.style[prop] && node.style[prop].length > 0) {\n          node.style[prop] = '';\n        }\n      }\n\n      function animateRun(animationEvent, element, className, activeAnimationComplete) {\n        var node = extractElementNode(element);\n        var elementData = element.data(NG_ANIMATE_CSS_DATA_KEY);\n        if(node.getAttribute('class').indexOf(className) == -1 || !elementData) {\n          activeAnimationComplete();\n          return;\n        }\n\n        var activeClassName = '';\n        forEach(className.split(' '), function(klass, i) {\n          activeClassName += (i > 0 ? ' ' : '') + klass + '-active';\n        });\n\n        var stagger = elementData.stagger;\n        var timings = elementData.timings;\n        var itemIndex = elementData.itemIndex;\n        var maxDuration = Math.max(timings.transitionDuration, timings.animationDuration);\n        var maxDelay = Math.max(timings.transitionDelay, timings.animationDelay);\n        var maxDelayTime = maxDelay * ONE_SECOND;\n\n        var startTime = Date.now();\n        var css3AnimationEvents = ANIMATIONEND_EVENT + ' ' + TRANSITIONEND_EVENT;\n\n        var style = '', appliedStyles = [];\n        if(timings.transitionDuration > 0) {\n          var propertyStyle = timings.transitionPropertyStyle;\n          if(propertyStyle.indexOf('all') == -1) {\n            style += CSS_PREFIX + 'transition-property: ' + propertyStyle + ';';\n            style += CSS_PREFIX + 'transition-duration: ' + timings.transitionDurationStyle + ';';\n            appliedStyles.push(CSS_PREFIX + 'transition-property');\n            appliedStyles.push(CSS_PREFIX + 'transition-duration');\n          }\n        }\n\n        if(itemIndex > 0) {\n          if(stagger.transitionDelay > 0 && stagger.transitionDuration === 0) {\n            var delayStyle = timings.transitionDelayStyle;\n            style += CSS_PREFIX + 'transition-delay: ' +\n                     prepareStaggerDelay(delayStyle, stagger.transitionDelay, itemIndex) + '; ';\n            appliedStyles.push(CSS_PREFIX + 'transition-delay');\n          }\n\n          if(stagger.animationDelay > 0 && stagger.animationDuration === 0) {\n            style += CSS_PREFIX + 'animation-delay: ' +\n                     prepareStaggerDelay(timings.animationDelayStyle, stagger.animationDelay, itemIndex) + '; ';\n            appliedStyles.push(CSS_PREFIX + 'animation-delay');\n          }\n        }\n\n        if(appliedStyles.length > 0) {\n          //the element being animated may sometimes contain comment nodes in\n          //the jqLite object, so we're safe to use a single variable to house\n          //the styles since there is always only one element being animated\n          var oldStyle = node.getAttribute('style') || '';\n          node.setAttribute('style', oldStyle + '; ' + style);\n        }\n\n        element.on(css3AnimationEvents, onAnimationProgress);\n        element.addClass(activeClassName);\n        elementData.closeAnimationFn = function() {\n          onEnd();\n          activeAnimationComplete();\n        };\n\n        var staggerTime       = itemIndex * (Math.max(stagger.animationDelay, stagger.transitionDelay) || 0);\n        var animationTime     = (maxDelay + maxDuration) * CLOSING_TIME_BUFFER;\n        var totalTime         = (staggerTime + animationTime) * ONE_SECOND;\n\n        elementData.running++;\n        animationCloseHandler(element, totalTime);\n        return onEnd;\n\n        // This will automatically be called by $animate so\n        // there is no need to attach this internally to the\n        // timeout done method.\n        function onEnd(cancelled) {\n          element.off(css3AnimationEvents, onAnimationProgress);\n          element.removeClass(activeClassName);\n          animateClose(element, className);\n          var node = extractElementNode(element);\n          for (var i in appliedStyles) {\n            node.style.removeProperty(appliedStyles[i]);\n          }\n        }\n\n        function onAnimationProgress(event) {\n          event.stopPropagation();\n          var ev = event.originalEvent || event;\n          var timeStamp = ev.$manualTimeStamp || ev.timeStamp || Date.now();\n\n          /* Firefox (or possibly just Gecko) likes to not round values up\n           * when a ms measurement is used for the animation */\n          var elapsedTime = parseFloat(ev.elapsedTime.toFixed(ELAPSED_TIME_MAX_DECIMAL_PLACES));\n\n          /* $manualTimeStamp is a mocked timeStamp value which is set\n           * within browserTrigger(). This is only here so that tests can\n           * mock animations properly. Real events fallback to event.timeStamp,\n           * or, if they don't, then a timeStamp is automatically created for them.\n           * We're checking to see if the timeStamp surpasses the expected delay,\n           * but we're using elapsedTime instead of the timeStamp on the 2nd\n           * pre-condition since animations sometimes close off early */\n          if(Math.max(timeStamp - startTime, 0) >= maxDelayTime && elapsedTime >= maxDuration) {\n            activeAnimationComplete();\n          }\n        }\n      }\n\n      function prepareStaggerDelay(delayStyle, staggerDelay, index) {\n        var style = '';\n        forEach(delayStyle.split(','), function(val, i) {\n          style += (i > 0 ? ',' : '') +\n                   (index * staggerDelay + parseInt(val, 10)) + 's';\n        });\n        return style;\n      }\n\n      function animateBefore(animationEvent, element, className, calculationDecorator) {\n        if(animateSetup(animationEvent, element, className, calculationDecorator)) {\n          return function(cancelled) {\n            cancelled && animateClose(element, className);\n          };\n        }\n      }\n\n      function animateAfter(animationEvent, element, className, afterAnimationComplete) {\n        if(element.data(NG_ANIMATE_CSS_DATA_KEY)) {\n          return animateRun(animationEvent, element, className, afterAnimationComplete);\n        } else {\n          animateClose(element, className);\n          afterAnimationComplete();\n        }\n      }\n\n      function animate(animationEvent, element, className, animationComplete) {\n        //If the animateSetup function doesn't bother returning a\n        //cancellation function then it means that there is no animation\n        //to perform at all\n        var preReflowCancellation = animateBefore(animationEvent, element, className);\n        if(!preReflowCancellation) {\n          animationComplete();\n          return;\n        }\n\n        //There are two cancellation functions: one is before the first\n        //reflow animation and the second is during the active state\n        //animation. The first function will take care of removing the\n        //data from the element which will not make the 2nd animation\n        //happen in the first place\n        var cancel = preReflowCancellation;\n        afterReflow(element, function() {\n          unblockTransitions(element, className);\n          unblockKeyframeAnimations(element);\n          //once the reflow is complete then we point cancel to\n          //the new cancellation function which will remove all of the\n          //animation properties from the active animation\n          cancel = animateAfter(animationEvent, element, className, animationComplete);\n        });\n\n        return function(cancelled) {\n          (cancel || noop)(cancelled);\n        };\n      }\n\n      function animateClose(element, className) {\n        element.removeClass(className);\n        var data = element.data(NG_ANIMATE_CSS_DATA_KEY);\n        if(data) {\n          if(data.running) {\n            data.running--;\n          }\n          if(!data.running || data.running === 0) {\n            element.removeData(NG_ANIMATE_CSS_DATA_KEY);\n          }\n        }\n      }\n\n      return {\n        enter : function(element, animationCompleted) {\n          return animate('enter', element, 'ng-enter', animationCompleted);\n        },\n\n        leave : function(element, animationCompleted) {\n          return animate('leave', element, 'ng-leave', animationCompleted);\n        },\n\n        move : function(element, animationCompleted) {\n          return animate('move', element, 'ng-move', animationCompleted);\n        },\n\n        beforeSetClass : function(element, add, remove, animationCompleted) {\n          var className = suffixClasses(remove, '-remove') + ' ' +\n                          suffixClasses(add, '-add');\n          var cancellationMethod = animateBefore('setClass', element, className, function(fn) {\n            /* when classes are removed from an element then the transition style\n             * that is applied is the transition defined on the element without the\n             * CSS class being there. This is how CSS3 functions outside of ngAnimate.\n             * http://plnkr.co/edit/j8OzgTNxHTb4n3zLyjGW?p=preview */\n            var klass = element.attr('class');\n            element.removeClass(remove);\n            element.addClass(add);\n            var timings = fn();\n            element.attr('class', klass);\n            return timings;\n          });\n\n          if(cancellationMethod) {\n            afterReflow(element, function() {\n              unblockTransitions(element, className);\n              unblockKeyframeAnimations(element);\n              animationCompleted();\n            });\n            return cancellationMethod;\n          }\n          animationCompleted();\n        },\n\n        beforeAddClass : function(element, className, animationCompleted) {\n          var cancellationMethod = animateBefore('addClass', element, suffixClasses(className, '-add'), function(fn) {\n\n            /* when a CSS class is added to an element then the transition style that\n             * is applied is the transition defined on the element when the CSS class\n             * is added at the time of the animation. This is how CSS3 functions\n             * outside of ngAnimate. */\n            element.addClass(className);\n            var timings = fn();\n            element.removeClass(className);\n            return timings;\n          });\n\n          if(cancellationMethod) {\n            afterReflow(element, function() {\n              unblockTransitions(element, className);\n              unblockKeyframeAnimations(element);\n              animationCompleted();\n            });\n            return cancellationMethod;\n          }\n          animationCompleted();\n        },\n\n        setClass : function(element, add, remove, animationCompleted) {\n          remove = suffixClasses(remove, '-remove');\n          add = suffixClasses(add, '-add');\n          var className = remove + ' ' + add;\n          return animateAfter('setClass', element, className, animationCompleted);\n        },\n\n        addClass : function(element, className, animationCompleted) {\n          return animateAfter('addClass', element, suffixClasses(className, '-add'), animationCompleted);\n        },\n\n        beforeRemoveClass : function(element, className, animationCompleted) {\n          var cancellationMethod = animateBefore('removeClass', element, suffixClasses(className, '-remove'), function(fn) {\n            /* when classes are removed from an element then the transition style\n             * that is applied is the transition defined on the element without the\n             * CSS class being there. This is how CSS3 functions outside of ngAnimate.\n             * http://plnkr.co/edit/j8OzgTNxHTb4n3zLyjGW?p=preview */\n            var klass = element.attr('class');\n            element.removeClass(className);\n            var timings = fn();\n            element.attr('class', klass);\n            return timings;\n          });\n\n          if(cancellationMethod) {\n            afterReflow(element, function() {\n              unblockTransitions(element, className);\n              unblockKeyframeAnimations(element);\n              animationCompleted();\n            });\n            return cancellationMethod;\n          }\n          animationCompleted();\n        },\n\n        removeClass : function(element, className, animationCompleted) {\n          return animateAfter('removeClass', element, suffixClasses(className, '-remove'), animationCompleted);\n        }\n      };\n\n      function suffixClasses(classes, suffix) {\n        var className = '';\n        classes = angular.isArray(classes) ? classes : classes.split(/\\s+/);\n        forEach(classes, function(klass, i) {\n          if(klass && klass.length > 0) {\n            className += (i > 0 ? ' ' : '') + klass + suffix;\n          }\n        });\n        return className;\n      }\n    }]);\n  }]);\n\n\n})(window, window.angular);\n\n/*!\n * ionic.bundle.js is a concatenation of:\n * ionic.js, angular.js, angular-animate.js,\n * angular-sanitize.js, angular-ui-router.js,\n * and ionic-angular.js\n */\n\n/**\n * @license AngularJS v1.2.17\n * (c) 2010-2014 Google, Inc. http://angularjs.org\n * License: MIT\n */\n(function(window, angular, undefined) {'use strict';\n\nvar $sanitizeMinErr = angular.$$minErr('$sanitize');\n\n/**\n * @ngdoc module\n * @name ngSanitize\n * @description\n *\n * # ngSanitize\n *\n * The `ngSanitize` module provides functionality to sanitize HTML.\n *\n *\n * <div doc-module-components=\"ngSanitize\"></div>\n *\n * See {@link ngSanitize.$sanitize `$sanitize`} for usage.\n */\n\n/*\n * HTML Parser By Misko Hevery (misko@hevery.com)\n * based on:  HTML Parser By John Resig (ejohn.org)\n * Original code by Erik Arvidsson, Mozilla Public License\n * http://erik.eae.net/simplehtmlparser/simplehtmlparser.js\n *\n * // Use like so:\n * htmlParser(htmlString, {\n *     start: function(tag, attrs, unary) {},\n *     end: function(tag) {},\n *     chars: function(text) {},\n *     comment: function(text) {}\n * });\n *\n */\n\n\n/**\n * @ngdoc service\n * @name $sanitize\n * @kind function\n *\n * @description\n *   The input is sanitized by parsing the html into tokens. All safe tokens (from a whitelist) are\n *   then serialized back to properly escaped html string. This means that no unsafe input can make\n *   it into the returned string, however, since our parser is more strict than a typical browser\n *   parser, it's possible that some obscure input, which would be recognized as valid HTML by a\n *   browser, won't make it through the sanitizer.\n *   The whitelist is configured using the functions `aHrefSanitizationWhitelist` and\n *   `imgSrcSanitizationWhitelist` of {@link ng.$compileProvider `$compileProvider`}.\n *\n * @param {string} html Html input.\n * @returns {string} Sanitized html.\n *\n * @example\n   <example module=\"ngSanitize\" deps=\"angular-sanitize.js\">\n   <file name=\"index.html\">\n     <script>\n       function Ctrl($scope, $sce) {\n         $scope.snippet =\n           '<p style=\"color:blue\">an html\\n' +\n           '<em onmouseover=\"this.textContent=\\'PWN3D!\\'\">click here</em>\\n' +\n           'snippet</p>';\n         $scope.deliberatelyTrustDangerousSnippet = function() {\n           return $sce.trustAsHtml($scope.snippet);\n         };\n       }\n     </script>\n     <div ng-controller=\"Ctrl\">\n        Snippet: <textarea ng-model=\"snippet\" cols=\"60\" rows=\"3\"></textarea>\n       <table>\n         <tr>\n           <td>Directive</td>\n           <td>How</td>\n           <td>Source</td>\n           <td>Rendered</td>\n         </tr>\n         <tr id=\"bind-html-with-sanitize\">\n           <td>ng-bind-html</td>\n           <td>Automatically uses $sanitize</td>\n           <td><pre>&lt;div ng-bind-html=\"snippet\"&gt;<br/>&lt;/div&gt;</pre></td>\n           <td><div ng-bind-html=\"snippet\"></div></td>\n         </tr>\n         <tr id=\"bind-html-with-trust\">\n           <td>ng-bind-html</td>\n           <td>Bypass $sanitize by explicitly trusting the dangerous value</td>\n           <td>\n           <pre>&lt;div ng-bind-html=\"deliberatelyTrustDangerousSnippet()\"&gt;\n&lt;/div&gt;</pre>\n           </td>\n           <td><div ng-bind-html=\"deliberatelyTrustDangerousSnippet()\"></div></td>\n         </tr>\n         <tr id=\"bind-default\">\n           <td>ng-bind</td>\n           <td>Automatically escapes</td>\n           <td><pre>&lt;div ng-bind=\"snippet\"&gt;<br/>&lt;/div&gt;</pre></td>\n           <td><div ng-bind=\"snippet\"></div></td>\n         </tr>\n       </table>\n       </div>\n   </file>\n   <file name=\"protractor.js\" type=\"protractor\">\n     it('should sanitize the html snippet by default', function() {\n       expect(element(by.css('#bind-html-with-sanitize div')).getInnerHtml()).\n         toBe('<p>an html\\n<em>click here</em>\\nsnippet</p>');\n     });\n\n     it('should inline raw snippet if bound to a trusted value', function() {\n       expect(element(by.css('#bind-html-with-trust div')).getInnerHtml()).\n         toBe(\"<p style=\\\"color:blue\\\">an html\\n\" +\n              \"<em onmouseover=\\\"this.textContent='PWN3D!'\\\">click here</em>\\n\" +\n              \"snippet</p>\");\n     });\n\n     it('should escape snippet without any filter', function() {\n       expect(element(by.css('#bind-default div')).getInnerHtml()).\n         toBe(\"&lt;p style=\\\"color:blue\\\"&gt;an html\\n\" +\n              \"&lt;em onmouseover=\\\"this.textContent='PWN3D!'\\\"&gt;click here&lt;/em&gt;\\n\" +\n              \"snippet&lt;/p&gt;\");\n     });\n\n     it('should update', function() {\n       element(by.model('snippet')).clear();\n       element(by.model('snippet')).sendKeys('new <b onclick=\"alert(1)\">text</b>');\n       expect(element(by.css('#bind-html-with-sanitize div')).getInnerHtml()).\n         toBe('new <b>text</b>');\n       expect(element(by.css('#bind-html-with-trust div')).getInnerHtml()).toBe(\n         'new <b onclick=\"alert(1)\">text</b>');\n       expect(element(by.css('#bind-default div')).getInnerHtml()).toBe(\n         \"new &lt;b onclick=\\\"alert(1)\\\"&gt;text&lt;/b&gt;\");\n     });\n   </file>\n   </example>\n */\nfunction $SanitizeProvider() {\n  this.$get = ['$$sanitizeUri', function($$sanitizeUri) {\n    return function(html) {\n      var buf = [];\n      htmlParser(html, htmlSanitizeWriter(buf, function(uri, isImage) {\n        return !/^unsafe/.test($$sanitizeUri(uri, isImage));\n      }));\n      return buf.join('');\n    };\n  }];\n}\n\nfunction sanitizeText(chars) {\n  var buf = [];\n  var writer = htmlSanitizeWriter(buf, angular.noop);\n  writer.chars(chars);\n  return buf.join('');\n}\n\n\n// Regular Expressions for parsing tags and attributes\nvar START_TAG_REGEXP =\n       /^<\\s*([\\w:-]+)((?:\\s+[\\w:-]+(?:\\s*=\\s*(?:(?:\"[^\"]*\")|(?:'[^']*')|[^>\\s]+))?)*)\\s*(\\/?)\\s*>/,\n  END_TAG_REGEXP = /^<\\s*\\/\\s*([\\w:-]+)[^>]*>/,\n  ATTR_REGEXP = /([\\w:-]+)(?:\\s*=\\s*(?:(?:\"((?:[^\"])*)\")|(?:'((?:[^'])*)')|([^>\\s]+)))?/g,\n  BEGIN_TAG_REGEXP = /^</,\n  BEGING_END_TAGE_REGEXP = /^<\\s*\\//,\n  COMMENT_REGEXP = /<!--(.*?)-->/g,\n  DOCTYPE_REGEXP = /<!DOCTYPE([^>]*?)>/i,\n  CDATA_REGEXP = /<!\\[CDATA\\[(.*?)]]>/g,\n  SURROGATE_PAIR_REGEXP = /[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]/g,\n  // Match everything outside of normal chars and \" (quote character)\n  NON_ALPHANUMERIC_REGEXP = /([^\\#-~| |!])/g;\n\n\n// Good source of info about elements and attributes\n// http://dev.w3.org/html5/spec/Overview.html#semantics\n// http://simon.html5.org/html-elements\n\n// Safe Void Elements - HTML5\n// http://dev.w3.org/html5/spec/Overview.html#void-elements\nvar voidElements = makeMap(\"area,br,col,hr,img,wbr\");\n\n// Elements that you can, intentionally, leave open (and which close themselves)\n// http://dev.w3.org/html5/spec/Overview.html#optional-tags\nvar optionalEndTagBlockElements = makeMap(\"colgroup,dd,dt,li,p,tbody,td,tfoot,th,thead,tr\"),\n    optionalEndTagInlineElements = makeMap(\"rp,rt\"),\n    optionalEndTagElements = angular.extend({},\n                                            optionalEndTagInlineElements,\n                                            optionalEndTagBlockElements);\n\n// Safe Block Elements - HTML5\nvar blockElements = angular.extend({}, optionalEndTagBlockElements, makeMap(\"address,article,\" +\n        \"aside,blockquote,caption,center,del,dir,div,dl,figure,figcaption,footer,h1,h2,h3,h4,h5,\" +\n        \"h6,header,hgroup,hr,ins,map,menu,nav,ol,pre,script,section,table,ul\"));\n\n// Inline Elements - HTML5\nvar inlineElements = angular.extend({}, optionalEndTagInlineElements, makeMap(\"a,abbr,acronym,b,\" +\n        \"bdi,bdo,big,br,cite,code,del,dfn,em,font,i,img,ins,kbd,label,map,mark,q,ruby,rp,rt,s,\" +\n        \"samp,small,span,strike,strong,sub,sup,time,tt,u,var\"));\n\n\n// Special Elements (can contain anything)\nvar specialElements = makeMap(\"script,style\");\n\nvar validElements = angular.extend({},\n                                   voidElements,\n                                   blockElements,\n                                   inlineElements,\n                                   optionalEndTagElements);\n\n//Attributes that have href and hence need to be sanitized\nvar uriAttrs = makeMap(\"background,cite,href,longdesc,src,usemap\");\nvar validAttrs = angular.extend({}, uriAttrs, makeMap(\n    'abbr,align,alt,axis,bgcolor,border,cellpadding,cellspacing,class,clear,'+\n    'color,cols,colspan,compact,coords,dir,face,headers,height,hreflang,hspace,'+\n    'ismap,lang,language,nohref,nowrap,rel,rev,rows,rowspan,rules,'+\n    'scope,scrolling,shape,size,span,start,summary,target,title,type,'+\n    'valign,value,vspace,width'));\n\nfunction makeMap(str) {\n  var obj = {}, items = str.split(','), i;\n  for (i = 0; i < items.length; i++) obj[items[i]] = true;\n  return obj;\n}\n\n\n/**\n * @example\n * htmlParser(htmlString, {\n *     start: function(tag, attrs, unary) {},\n *     end: function(tag) {},\n *     chars: function(text) {},\n *     comment: function(text) {}\n * });\n *\n * @param {string} html string\n * @param {object} handler\n */\nfunction htmlParser( html, handler ) {\n  var index, chars, match, stack = [], last = html;\n  stack.last = function() { return stack[ stack.length - 1 ]; };\n\n  while ( html ) {\n    chars = true;\n\n    // Make sure we're not in a script or style element\n    if ( !stack.last() || !specialElements[ stack.last() ] ) {\n\n      // Comment\n      if ( html.indexOf(\"<!--\") === 0 ) {\n        // comments containing -- are not allowed unless they terminate the comment\n        index = html.indexOf(\"--\", 4);\n\n        if ( index >= 0 && html.lastIndexOf(\"-->\", index) === index) {\n          if (handler.comment) handler.comment( html.substring( 4, index ) );\n          html = html.substring( index + 3 );\n          chars = false;\n        }\n      // DOCTYPE\n      } else if ( DOCTYPE_REGEXP.test(html) ) {\n        match = html.match( DOCTYPE_REGEXP );\n\n        if ( match ) {\n          html = html.replace( match[0], '');\n          chars = false;\n        }\n      // end tag\n      } else if ( BEGING_END_TAGE_REGEXP.test(html) ) {\n        match = html.match( END_TAG_REGEXP );\n\n        if ( match ) {\n          html = html.substring( match[0].length );\n          match[0].replace( END_TAG_REGEXP, parseEndTag );\n          chars = false;\n        }\n\n      // start tag\n      } else if ( BEGIN_TAG_REGEXP.test(html) ) {\n        match = html.match( START_TAG_REGEXP );\n\n        if ( match ) {\n          html = html.substring( match[0].length );\n          match[0].replace( START_TAG_REGEXP, parseStartTag );\n          chars = false;\n        }\n      }\n\n      if ( chars ) {\n        index = html.indexOf(\"<\");\n\n        var text = index < 0 ? html : html.substring( 0, index );\n        html = index < 0 ? \"\" : html.substring( index );\n\n        if (handler.chars) handler.chars( decodeEntities(text) );\n      }\n\n    } else {\n      html = html.replace(new RegExp(\"(.*)<\\\\s*\\\\/\\\\s*\" + stack.last() + \"[^>]*>\", 'i'),\n        function(all, text){\n          text = text.replace(COMMENT_REGEXP, \"$1\").replace(CDATA_REGEXP, \"$1\");\n\n          if (handler.chars) handler.chars( decodeEntities(text) );\n\n          return \"\";\n      });\n\n      parseEndTag( \"\", stack.last() );\n    }\n\n    if ( html == last ) {\n      throw $sanitizeMinErr('badparse', \"The sanitizer was unable to parse the following block \" +\n                                        \"of html: {0}\", html);\n    }\n    last = html;\n  }\n\n  // Clean up any remaining tags\n  parseEndTag();\n\n  function parseStartTag( tag, tagName, rest, unary ) {\n    tagName = angular.lowercase(tagName);\n    if ( blockElements[ tagName ] ) {\n      while ( stack.last() && inlineElements[ stack.last() ] ) {\n        parseEndTag( \"\", stack.last() );\n      }\n    }\n\n    if ( optionalEndTagElements[ tagName ] && stack.last() == tagName ) {\n      parseEndTag( \"\", tagName );\n    }\n\n    unary = voidElements[ tagName ] || !!unary;\n\n    if ( !unary )\n      stack.push( tagName );\n\n    var attrs = {};\n\n    rest.replace(ATTR_REGEXP,\n      function(match, name, doubleQuotedValue, singleQuotedValue, unquotedValue) {\n        var value = doubleQuotedValue\n          || singleQuotedValue\n          || unquotedValue\n          || '';\n\n        attrs[name] = decodeEntities(value);\n    });\n    if (handler.start) handler.start( tagName, attrs, unary );\n  }\n\n  function parseEndTag( tag, tagName ) {\n    var pos = 0, i;\n    tagName = angular.lowercase(tagName);\n    if ( tagName )\n      // Find the closest opened tag of the same type\n      for ( pos = stack.length - 1; pos >= 0; pos-- )\n        if ( stack[ pos ] == tagName )\n          break;\n\n    if ( pos >= 0 ) {\n      // Close all the open elements, up the stack\n      for ( i = stack.length - 1; i >= pos; i-- )\n        if (handler.end) handler.end( stack[ i ] );\n\n      // Remove the open elements from the stack\n      stack.length = pos;\n    }\n  }\n}\n\nvar hiddenPre=document.createElement(\"pre\");\nvar spaceRe = /^(\\s*)([\\s\\S]*?)(\\s*)$/;\n/**\n * decodes all entities into regular string\n * @param value\n * @returns {string} A string with decoded entities.\n */\nfunction decodeEntities(value) {\n  if (!value) { return ''; }\n\n  // Note: IE8 does not preserve spaces at the start/end of innerHTML\n  // so we must capture them and reattach them afterward\n  var parts = spaceRe.exec(value);\n  var spaceBefore = parts[1];\n  var spaceAfter = parts[3];\n  var content = parts[2];\n  if (content) {\n    hiddenPre.innerHTML=content.replace(/</g,\"&lt;\");\n    // innerText depends on styling as it doesn't display hidden elements.\n    // Therefore, it's better to use textContent not to cause unnecessary\n    // reflows. However, IE<9 don't support textContent so the innerText\n    // fallback is necessary.\n    content = 'textContent' in hiddenPre ?\n      hiddenPre.textContent : hiddenPre.innerText;\n  }\n  return spaceBefore + content + spaceAfter;\n}\n\n/**\n * Escapes all potentially dangerous characters, so that the\n * resulting string can be safely inserted into attribute or\n * element text.\n * @param value\n * @returns {string} escaped text\n */\nfunction encodeEntities(value) {\n  return value.\n    replace(/&/g, '&amp;').\n    replace(SURROGATE_PAIR_REGEXP, function (value) {\n      var hi = value.charCodeAt(0);\n      var low = value.charCodeAt(1);\n      return '&#' + (((hi - 0xD800) * 0x400) + (low - 0xDC00) + 0x10000) + ';';\n    }).\n    replace(NON_ALPHANUMERIC_REGEXP, function(value){\n      return '&#' + value.charCodeAt(0) + ';';\n    }).\n    replace(/</g, '&lt;').\n    replace(/>/g, '&gt;');\n}\n\n/**\n * create an HTML/XML writer which writes to buffer\n * @param {Array} buf use buf.jain('') to get out sanitized html string\n * @returns {object} in the form of {\n *     start: function(tag, attrs, unary) {},\n *     end: function(tag) {},\n *     chars: function(text) {},\n *     comment: function(text) {}\n * }\n */\nfunction htmlSanitizeWriter(buf, uriValidator){\n  var ignore = false;\n  var out = angular.bind(buf, buf.push);\n  return {\n    start: function(tag, attrs, unary){\n      tag = angular.lowercase(tag);\n      if (!ignore && specialElements[tag]) {\n        ignore = tag;\n      }\n      if (!ignore && validElements[tag] === true) {\n        out('<');\n        out(tag);\n        angular.forEach(attrs, function(value, key){\n          var lkey=angular.lowercase(key);\n          var isImage = (tag === 'img' && lkey === 'src') || (lkey === 'background');\n          if (validAttrs[lkey] === true &&\n            (uriAttrs[lkey] !== true || uriValidator(value, isImage))) {\n            out(' ');\n            out(key);\n            out('=\"');\n            out(encodeEntities(value));\n            out('\"');\n          }\n        });\n        out(unary ? '/>' : '>');\n      }\n    },\n    end: function(tag){\n        tag = angular.lowercase(tag);\n        if (!ignore && validElements[tag] === true) {\n          out('</');\n          out(tag);\n          out('>');\n        }\n        if (tag == ignore) {\n          ignore = false;\n        }\n      },\n    chars: function(chars){\n        if (!ignore) {\n          out(encodeEntities(chars));\n        }\n      }\n  };\n}\n\n\n// define ngSanitize module and register $sanitize service\nangular.module('ngSanitize', []).provider('$sanitize', $SanitizeProvider);\n\n/* global sanitizeText: false */\n\n/**\n * @ngdoc filter\n * @name linky\n * @kind function\n *\n * @description\n * Finds links in text input and turns them into html links. Supports http/https/ftp/mailto and\n * plain email address links.\n *\n * Requires the {@link ngSanitize `ngSanitize`} module to be installed.\n *\n * @param {string} text Input text.\n * @param {string} target Window (_blank|_self|_parent|_top) or named frame to open links in.\n * @returns {string} Html-linkified text.\n *\n * @usage\n   <span ng-bind-html=\"linky_expression | linky\"></span>\n *\n * @example\n   <example module=\"ngSanitize\" deps=\"angular-sanitize.js\">\n     <file name=\"index.html\">\n       <script>\n         function Ctrl($scope) {\n           $scope.snippet =\n             'Pretty text with some links:\\n'+\n             'http://angularjs.org/,\\n'+\n             'mailto:us@somewhere.org,\\n'+\n             'another@somewhere.org,\\n'+\n             'and one more: ftp://127.0.0.1/.';\n           $scope.snippetWithTarget = 'http://angularjs.org/';\n         }\n       </script>\n       <div ng-controller=\"Ctrl\">\n       Snippet: <textarea ng-model=\"snippet\" cols=\"60\" rows=\"3\"></textarea>\n       <table>\n         <tr>\n           <td>Filter</td>\n           <td>Source</td>\n           <td>Rendered</td>\n         </tr>\n         <tr id=\"linky-filter\">\n           <td>linky filter</td>\n           <td>\n             <pre>&lt;div ng-bind-html=\"snippet | linky\"&gt;<br>&lt;/div&gt;</pre>\n           </td>\n           <td>\n             <div ng-bind-html=\"snippet | linky\"></div>\n           </td>\n         </tr>\n         <tr id=\"linky-target\">\n          <td>linky target</td>\n          <td>\n            <pre>&lt;div ng-bind-html=\"snippetWithTarget | linky:'_blank'\"&gt;<br>&lt;/div&gt;</pre>\n          </td>\n          <td>\n            <div ng-bind-html=\"snippetWithTarget | linky:'_blank'\"></div>\n          </td>\n         </tr>\n         <tr id=\"escaped-html\">\n           <td>no filter</td>\n           <td><pre>&lt;div ng-bind=\"snippet\"&gt;<br>&lt;/div&gt;</pre></td>\n           <td><div ng-bind=\"snippet\"></div></td>\n         </tr>\n       </table>\n     </file>\n     <file name=\"protractor.js\" type=\"protractor\">\n       it('should linkify the snippet with urls', function() {\n         expect(element(by.id('linky-filter')).element(by.binding('snippet | linky')).getText()).\n             toBe('Pretty text with some links: http://angularjs.org/, us@somewhere.org, ' +\n                  'another@somewhere.org, and one more: ftp://127.0.0.1/.');\n         expect(element.all(by.css('#linky-filter a')).count()).toEqual(4);\n       });\n\n       it('should not linkify snippet without the linky filter', function() {\n         expect(element(by.id('escaped-html')).element(by.binding('snippet')).getText()).\n             toBe('Pretty text with some links: http://angularjs.org/, mailto:us@somewhere.org, ' +\n                  'another@somewhere.org, and one more: ftp://127.0.0.1/.');\n         expect(element.all(by.css('#escaped-html a')).count()).toEqual(0);\n       });\n\n       it('should update', function() {\n         element(by.model('snippet')).clear();\n         element(by.model('snippet')).sendKeys('new http://link.');\n         expect(element(by.id('linky-filter')).element(by.binding('snippet | linky')).getText()).\n             toBe('new http://link.');\n         expect(element.all(by.css('#linky-filter a')).count()).toEqual(1);\n         expect(element(by.id('escaped-html')).element(by.binding('snippet')).getText())\n             .toBe('new http://link.');\n       });\n\n       it('should work with the target property', function() {\n        expect(element(by.id('linky-target')).\n            element(by.binding(\"snippetWithTarget | linky:'_blank'\")).getText()).\n            toBe('http://angularjs.org/');\n        expect(element(by.css('#linky-target a')).getAttribute('target')).toEqual('_blank');\n       });\n     </file>\n   </example>\n */\nangular.module('ngSanitize').filter('linky', ['$sanitize', function($sanitize) {\n  var LINKY_URL_REGEXP =\n        /((ftp|https?):\\/\\/|(mailto:)?[A-Za-z0-9._%+-]+@)\\S*[^\\s.;,(){}<>]/,\n      MAILTO_REGEXP = /^mailto:/;\n\n  return function(text, target) {\n    if (!text) return text;\n    var match;\n    var raw = text;\n    var html = [];\n    var url;\n    var i;\n    while ((match = raw.match(LINKY_URL_REGEXP))) {\n      // We can not end in these as they are sometimes found at the end of the sentence\n      url = match[0];\n      // if we did not match ftp/http/mailto then assume mailto\n      if (match[2] == match[3]) url = 'mailto:' + url;\n      i = match.index;\n      addText(raw.substr(0, i));\n      addLink(url, match[0].replace(MAILTO_REGEXP, ''));\n      raw = raw.substring(i + match[0].length);\n    }\n    addText(raw);\n    return $sanitize(html.join(''));\n\n    function addText(text) {\n      if (!text) {\n        return;\n      }\n      html.push(sanitizeText(text));\n    }\n\n    function addLink(url, text) {\n      html.push('<a ');\n      if (angular.isDefined(target)) {\n        html.push('target=\"');\n        html.push(target);\n        html.push('\" ');\n      }\n      html.push('href=\"');\n      html.push(url);\n      html.push('\">');\n      addText(text);\n      html.push('</a>');\n    }\n  };\n}]);\n\n\n})(window, window.angular);\n\n/*!\n * ionic.bundle.js is a concatenation of:\n * ionic.js, angular.js, angular-animate.js,\n * angular-sanitize.js, angular-ui-router.js,\n * and ionic-angular.js\n */\n\n/**\n * State-based routing for AngularJS\n * @version v0.2.10\n * @link http://angular-ui.github.com/\n * @license MIT License, http://www.opensource.org/licenses/MIT\n */\n\n/* commonjs package manager support (eg componentjs) */\nif (typeof module !== \"undefined\" && typeof exports !== \"undefined\" && module.exports === exports){\n  module.exports = 'ui.router';\n}\n\n(function (window, angular, undefined) {\n/*jshint globalstrict:true*/\n/*global angular:false*/\n'use strict';\n\nvar isDefined = angular.isDefined,\n    isFunction = angular.isFunction,\n    isString = angular.isString,\n    isObject = angular.isObject,\n    isArray = angular.isArray,\n    forEach = angular.forEach,\n    extend = angular.extend,\n    copy = angular.copy;\n\nfunction inherit(parent, extra) {\n  return extend(new (extend(function() {}, { prototype: parent }))(), extra);\n}\n\nfunction merge(dst) {\n  forEach(arguments, function(obj) {\n    if (obj !== dst) {\n      forEach(obj, function(value, key) {\n        if (!dst.hasOwnProperty(key)) dst[key] = value;\n      });\n    }\n  });\n  return dst;\n}\n\n/**\n * Finds the common ancestor path between two states.\n *\n * @param {Object} first The first state.\n * @param {Object} second The second state.\n * @return {Array} Returns an array of state names in descending order, not including the root.\n */\nfunction ancestors(first, second) {\n  var path = [];\n\n  for (var n in first.path) {\n    if (first.path[n] !== second.path[n]) break;\n    path.push(first.path[n]);\n  }\n  return path;\n}\n\n/**\n * IE8-safe wrapper for `Object.keys()`.\n *\n * @param {Object} object A JavaScript object.\n * @return {Array} Returns the keys of the object as an array.\n */\nfunction keys(object) {\n  if (Object.keys) {\n    return Object.keys(object);\n  }\n  var result = [];\n\n  angular.forEach(object, function(val, key) {\n    result.push(key);\n  });\n  return result;\n}\n\n/**\n * IE8-safe wrapper for `Array.prototype.indexOf()`.\n *\n * @param {Array} array A JavaScript array.\n * @param {*} value A value to search the array for.\n * @return {Number} Returns the array index value of `value`, or `-1` if not present.\n */\nfunction arraySearch(array, value) {\n  if (Array.prototype.indexOf) {\n    return array.indexOf(value, Number(arguments[2]) || 0);\n  }\n  var len = array.length >>> 0, from = Number(arguments[2]) || 0;\n  from = (from < 0) ? Math.ceil(from) : Math.floor(from);\n\n  if (from < 0) from += len;\n\n  for (; from < len; from++) {\n    if (from in array && array[from] === value) return from;\n  }\n  return -1;\n}\n\n/**\n * Merges a set of parameters with all parameters inherited between the common parents of the\n * current state and a given destination state.\n *\n * @param {Object} currentParams The value of the current state parameters ($stateParams).\n * @param {Object} newParams The set of parameters which will be composited with inherited params.\n * @param {Object} $current Internal definition of object representing the current state.\n * @param {Object} $to Internal definition of object representing state to transition to.\n */\nfunction inheritParams(currentParams, newParams, $current, $to) {\n  var parents = ancestors($current, $to), parentParams, inherited = {}, inheritList = [];\n\n  for (var i in parents) {\n    if (!parents[i].params || !parents[i].params.length) continue;\n    parentParams = parents[i].params;\n\n    for (var j in parentParams) {\n      if (arraySearch(inheritList, parentParams[j]) >= 0) continue;\n      inheritList.push(parentParams[j]);\n      inherited[parentParams[j]] = currentParams[parentParams[j]];\n    }\n  }\n  return extend({}, inherited, newParams);\n}\n\n/**\n * Normalizes a set of values to string or `null`, filtering them by a list of keys.\n *\n * @param {Array} keys The list of keys to normalize/return.\n * @param {Object} values An object hash of values to normalize.\n * @return {Object} Returns an object hash of normalized string values.\n */\nfunction normalize(keys, values) {\n  var normalized = {};\n\n  forEach(keys, function (name) {\n    var value = values[name];\n    normalized[name] = (value != null) ? String(value) : null;\n  });\n  return normalized;\n}\n\n/**\n * Performs a non-strict comparison of the subset of two objects, defined by a list of keys.\n *\n * @param {Object} a The first object.\n * @param {Object} b The second object.\n * @param {Array} keys The list of keys within each object to compare. If the list is empty or not specified,\n *                     it defaults to the list of keys in `a`.\n * @return {Boolean} Returns `true` if the keys match, otherwise `false`.\n */\nfunction equalForKeys(a, b, keys) {\n  if (!keys) {\n    keys = [];\n    for (var n in a) keys.push(n); // Used instead of Object.keys() for IE8 compatibility\n  }\n\n  for (var i=0; i<keys.length; i++) {\n    var k = keys[i];\n    if (a[k] != b[k]) return false; // Not '===', values aren't necessarily normalized\n  }\n  return true;\n}\n\n/**\n * Returns the subset of an object, based on a list of keys.\n *\n * @param {Array} keys\n * @param {Object} values\n * @return {Boolean} Returns a subset of `values`.\n */\nfunction filterByKeys(keys, values) {\n  var filtered = {};\n\n  forEach(keys, function (name) {\n    filtered[name] = values[name];\n  });\n  return filtered;\n}\n/**\n * @ngdoc overview\n * @name ui.router.util\n *\n * @description\n * # ui.router.util sub-module\n *\n * This module is a dependency of other sub-modules. Do not include this module as a dependency\n * in your angular app (use {@link ui.router} module instead).\n *\n */\nangular.module('ui.router.util', ['ng']);\n\n/**\n * @ngdoc overview\n * @name ui.router.router\n * \n * @requires ui.router.util\n *\n * @description\n * # ui.router.router sub-module\n *\n * This module is a dependency of other sub-modules. Do not include this module as a dependency\n * in your angular app (use {@link ui.router} module instead).\n */\nangular.module('ui.router.router', ['ui.router.util']);\n\n/**\n * @ngdoc overview\n * @name ui.router.state\n * \n * @requires ui.router.router\n * @requires ui.router.util\n *\n * @description\n * # ui.router.state sub-module\n *\n * This module is a dependency of the main ui.router module. Do not include this module as a dependency\n * in your angular app (use {@link ui.router} module instead).\n * \n */\nangular.module('ui.router.state', ['ui.router.router', 'ui.router.util']);\n\n/**\n * @ngdoc overview\n * @name ui.router\n *\n * @requires ui.router.state\n *\n * @description\n * # ui.router\n * \n * ## The main module for ui.router \n * There are several sub-modules included with the ui.router module, however only this module is needed\n * as a dependency within your angular app. The other modules are for organization purposes. \n *\n * The modules are:\n * * ui.router - the main \"umbrella\" module\n * * ui.router.router - \n * \n * *You'll need to include **only** this module as the dependency within your angular app.*\n * \n * <pre>\n * <!doctype html>\n * <html ng-app=\"myApp\">\n * <head>\n *   <script src=\"js/angular.js\"></script>\n *   <!-- Include the ui-router script -->\n *   <script src=\"js/angular-ui-router.min.js\"></script>\n *   <script>\n *     // ...and add 'ui.router' as a dependency\n *     var myApp = angular.module('myApp', ['ui.router']);\n *   </script>\n * </head>\n * <body>\n * </body>\n * </html>\n * </pre>\n */\nangular.module('ui.router', ['ui.router.state']);\n\nangular.module('ui.router.compat', ['ui.router']);\n\n/**\n * @ngdoc object\n * @name ui.router.util.$resolve\n *\n * @requires $q\n * @requires $injector\n *\n * @description\n * Manages resolution of (acyclic) graphs of promises.\n */\n$Resolve.$inject = ['$q', '$injector'];\nfunction $Resolve(  $q,    $injector) {\n  \n  var VISIT_IN_PROGRESS = 1,\n      VISIT_DONE = 2,\n      NOTHING = {},\n      NO_DEPENDENCIES = [],\n      NO_LOCALS = NOTHING,\n      NO_PARENT = extend($q.when(NOTHING), { $$promises: NOTHING, $$values: NOTHING });\n  \n\n  /**\n   * @ngdoc function\n   * @name ui.router.util.$resolve#study\n   * @methodOf ui.router.util.$resolve\n   *\n   * @description\n   * Studies a set of invocables that are likely to be used multiple times.\n   * <pre>\n   * $resolve.study(invocables)(locals, parent, self)\n   * </pre>\n   * is equivalent to\n   * <pre>\n   * $resolve.resolve(invocables, locals, parent, self)\n   * </pre>\n   * but the former is more efficient (in fact `resolve` just calls `study` \n   * internally).\n   *\n   * @param {object} invocables Invocable objects\n   * @return {function} a function to pass in locals, parent and self\n   */\n  this.study = function (invocables) {\n    if (!isObject(invocables)) throw new Error(\"'invocables' must be an object\");\n    \n    // Perform a topological sort of invocables to build an ordered plan\n    var plan = [], cycle = [], visited = {};\n    function visit(value, key) {\n      if (visited[key] === VISIT_DONE) return;\n      \n      cycle.push(key);\n      if (visited[key] === VISIT_IN_PROGRESS) {\n        cycle.splice(0, cycle.indexOf(key));\n        throw new Error(\"Cyclic dependency: \" + cycle.join(\" -> \"));\n      }\n      visited[key] = VISIT_IN_PROGRESS;\n      \n      if (isString(value)) {\n        plan.push(key, [ function() { return $injector.get(value); }], NO_DEPENDENCIES);\n      } else {\n        var params = $injector.annotate(value);\n        forEach(params, function (param) {\n          if (param !== key && invocables.hasOwnProperty(param)) visit(invocables[param], param);\n        });\n        plan.push(key, value, params);\n      }\n      \n      cycle.pop();\n      visited[key] = VISIT_DONE;\n    }\n    forEach(invocables, visit);\n    invocables = cycle = visited = null; // plan is all that's required\n    \n    function isResolve(value) {\n      return isObject(value) && value.then && value.$$promises;\n    }\n    \n    return function (locals, parent, self) {\n      if (isResolve(locals) && self === undefined) {\n        self = parent; parent = locals; locals = null;\n      }\n      if (!locals) locals = NO_LOCALS;\n      else if (!isObject(locals)) {\n        throw new Error(\"'locals' must be an object\");\n      }       \n      if (!parent) parent = NO_PARENT;\n      else if (!isResolve(parent)) {\n        throw new Error(\"'parent' must be a promise returned by $resolve.resolve()\");\n      }\n      \n      // To complete the overall resolution, we have to wait for the parent\n      // promise and for the promise for each invokable in our plan.\n      var resolution = $q.defer(),\n          result = resolution.promise,\n          promises = result.$$promises = {},\n          values = extend({}, locals),\n          wait = 1 + plan.length/3,\n          merged = false;\n          \n      function done() {\n        // Merge parent values we haven't got yet and publish our own $$values\n        if (!--wait) {\n          if (!merged) merge(values, parent.$$values); \n          result.$$values = values;\n          result.$$promises = true; // keep for isResolve()\n          resolution.resolve(values);\n        }\n      }\n      \n      function fail(reason) {\n        result.$$failure = reason;\n        resolution.reject(reason);\n      }\n      \n      // Short-circuit if parent has already failed\n      if (isDefined(parent.$$failure)) {\n        fail(parent.$$failure);\n        return result;\n      }\n      \n      // Merge parent values if the parent has already resolved, or merge\n      // parent promises and wait if the parent resolve is still in progress.\n      if (parent.$$values) {\n        merged = merge(values, parent.$$values);\n        done();\n      } else {\n        extend(promises, parent.$$promises);\n        parent.then(done, fail);\n      }\n      \n      // Process each invocable in the plan, but ignore any where a local of the same name exists.\n      for (var i=0, ii=plan.length; i<ii; i+=3) {\n        if (locals.hasOwnProperty(plan[i])) done();\n        else invoke(plan[i], plan[i+1], plan[i+2]);\n      }\n      \n      function invoke(key, invocable, params) {\n        // Create a deferred for this invocation. Failures will propagate to the resolution as well.\n        var invocation = $q.defer(), waitParams = 0;\n        function onfailure(reason) {\n          invocation.reject(reason);\n          fail(reason);\n        }\n        // Wait for any parameter that we have a promise for (either from parent or from this\n        // resolve; in that case study() will have made sure it's ordered before us in the plan).\n        forEach(params, function (dep) {\n          if (promises.hasOwnProperty(dep) && !locals.hasOwnProperty(dep)) {\n            waitParams++;\n            promises[dep].then(function (result) {\n              values[dep] = result;\n              if (!(--waitParams)) proceed();\n            }, onfailure);\n          }\n        });\n        if (!waitParams) proceed();\n        function proceed() {\n          if (isDefined(result.$$failure)) return;\n          try {\n            invocation.resolve($injector.invoke(invocable, self, values));\n            invocation.promise.then(function (result) {\n              values[key] = result;\n              done();\n            }, onfailure);\n          } catch (e) {\n            onfailure(e);\n          }\n        }\n        // Publish promise synchronously; invocations further down in the plan may depend on it.\n        promises[key] = invocation.promise;\n      }\n      \n      return result;\n    };\n  };\n  \n  /**\n   * @ngdoc function\n   * @name ui.router.util.$resolve#resolve\n   * @methodOf ui.router.util.$resolve\n   *\n   * @description\n   * Resolves a set of invocables. An invocable is a function to be invoked via \n   * `$injector.invoke()`, and can have an arbitrary number of dependencies. \n   * An invocable can either return a value directly,\n   * or a `$q` promise. If a promise is returned it will be resolved and the \n   * resulting value will be used instead. Dependencies of invocables are resolved \n   * (in this order of precedence)\n   *\n   * - from the specified `locals`\n   * - from another invocable that is part of this `$resolve` call\n   * - from an invocable that is inherited from a `parent` call to `$resolve` \n   *   (or recursively\n   * - from any ancestor `$resolve` of that parent).\n   *\n   * The return value of `$resolve` is a promise for an object that contains \n   * (in this order of precedence)\n   *\n   * - any `locals` (if specified)\n   * - the resolved return values of all injectables\n   * - any values inherited from a `parent` call to `$resolve` (if specified)\n   *\n   * The promise will resolve after the `parent` promise (if any) and all promises \n   * returned by injectables have been resolved. If any invocable \n   * (or `$injector.invoke`) throws an exception, or if a promise returned by an \n   * invocable is rejected, the `$resolve` promise is immediately rejected with the \n   * same error. A rejection of a `parent` promise (if specified) will likewise be \n   * propagated immediately. Once the `$resolve` promise has been rejected, no \n   * further invocables will be called.\n   * \n   * Cyclic dependencies between invocables are not permitted and will caues `$resolve`\n   * to throw an error. As a special case, an injectable can depend on a parameter \n   * with the same name as the injectable, which will be fulfilled from the `parent` \n   * injectable of the same name. This allows inherited values to be decorated. \n   * Note that in this case any other injectable in the same `$resolve` with the same\n   * dependency would see the decorated value, not the inherited value.\n   *\n   * Note that missing dependencies -- unlike cyclic dependencies -- will cause an \n   * (asynchronous) rejection of the `$resolve` promise rather than a (synchronous) \n   * exception.\n   *\n   * Invocables are invoked eagerly as soon as all dependencies are available. \n   * This is true even for dependencies inherited from a `parent` call to `$resolve`.\n   *\n   * As a special case, an invocable can be a string, in which case it is taken to \n   * be a service name to be passed to `$injector.get()`. This is supported primarily \n   * for backwards-compatibility with the `resolve` property of `$routeProvider` \n   * routes.\n   *\n   * @param {object} invocables functions to invoke or \n   * `$injector` services to fetch.\n   * @param {object} locals  values to make available to the injectables\n   * @param {object} parent  a promise returned by another call to `$resolve`.\n   * @param {object} self  the `this` for the invoked methods\n   * @return {object} Promise for an object that contains the resolved return value\n   * of all invocables, as well as any inherited and local values.\n   */\n  this.resolve = function (invocables, locals, parent, self) {\n    return this.study(invocables)(locals, parent, self);\n  };\n}\n\nangular.module('ui.router.util').service('$resolve', $Resolve);\n\n\n/**\n * @ngdoc object\n * @name ui.router.util.$templateFactory\n *\n * @requires $http\n * @requires $templateCache\n * @requires $injector\n *\n * @description\n * Service. Manages loading of templates.\n */\n$TemplateFactory.$inject = ['$http', '$templateCache', '$injector'];\nfunction $TemplateFactory(  $http,   $templateCache,   $injector) {\n\n  /**\n   * @ngdoc function\n   * @name ui.router.util.$templateFactory#fromConfig\n   * @methodOf ui.router.util.$templateFactory\n   *\n   * @description\n   * Creates a template from a configuration object. \n   *\n   * @param {object} config Configuration object for which to load a template. \n   * The following properties are search in the specified order, and the first one \n   * that is defined is used to create the template:\n   *\n   * @param {string|object} config.template html string template or function to \n   * load via {@link ui.router.util.$templateFactory#fromString fromString}.\n   * @param {string|object} config.templateUrl url to load or a function returning \n   * the url to load via {@link ui.router.util.$templateFactory#fromUrl fromUrl}.\n   * @param {Function} config.templateProvider function to invoke via \n   * {@link ui.router.util.$templateFactory#fromProvider fromProvider}.\n   * @param {object} params  Parameters to pass to the template function.\n   * @param {object} locals Locals to pass to `invoke` if the template is loaded \n   * via a `templateProvider`. Defaults to `{ params: params }`.\n   *\n   * @return {string|object}  The template html as a string, or a promise for \n   * that string,or `null` if no template is configured.\n   */\n  this.fromConfig = function (config, params, locals) {\n    return (\n      isDefined(config.template) ? this.fromString(config.template, params) :\n      isDefined(config.templateUrl) ? this.fromUrl(config.templateUrl, params) :\n      isDefined(config.templateProvider) ? this.fromProvider(config.templateProvider, params, locals) :\n      null\n    );\n  };\n\n  /**\n   * @ngdoc function\n   * @name ui.router.util.$templateFactory#fromString\n   * @methodOf ui.router.util.$templateFactory\n   *\n   * @description\n   * Creates a template from a string or a function returning a string.\n   *\n   * @param {string|object} template html template as a string or function that \n   * returns an html template as a string.\n   * @param {object} params Parameters to pass to the template function.\n   *\n   * @return {string|object} The template html as a string, or a promise for that \n   * string.\n   */\n  this.fromString = function (template, params) {\n    return isFunction(template) ? template(params) : template;\n  };\n\n  /**\n   * @ngdoc function\n   * @name ui.router.util.$templateFactory#fromUrl\n   * @methodOf ui.router.util.$templateFactory\n   * \n   * @description\n   * Loads a template from the a URL via `$http` and `$templateCache`.\n   *\n   * @param {string|Function} url url of the template to load, or a function \n   * that returns a url.\n   * @param {Object} params Parameters to pass to the url function.\n   * @return {string|Promise.<string>} The template html as a string, or a promise \n   * for that string.\n   */\n  this.fromUrl = function (url, params) {\n    if (isFunction(url)) url = url(params);\n    if (url == null) return null;\n    else return $http\n        .get(url, { cache: $templateCache })\n        .then(function(response) { return response.data; });\n  };\n\n  /**\n   * @ngdoc function\n   * @name ui.router.util.$templateFactory#fromUrl\n   * @methodOf ui.router.util.$templateFactory\n   *\n   * @description\n   * Creates a template by invoking an injectable provider function.\n   *\n   * @param {Function} provider Function to invoke via `$injector.invoke`\n   * @param {Object} params Parameters for the template.\n   * @param {Object} locals Locals to pass to `invoke`. Defaults to \n   * `{ params: params }`.\n   * @return {string|Promise.<string>} The template html as a string, or a promise \n   * for that string.\n   */\n  this.fromProvider = function (provider, params, locals) {\n    return $injector.invoke(provider, null, locals || { params: params });\n  };\n}\n\nangular.module('ui.router.util').service('$templateFactory', $TemplateFactory);\n\n/**\n * @ngdoc object\n * @name ui.router.util.type:UrlMatcher\n *\n * @description\n * Matches URLs against patterns and extracts named parameters from the path or the search\n * part of the URL. A URL pattern consists of a path pattern, optionally followed by '?' and a list\n * of search parameters. Multiple search parameter names are separated by '&'. Search parameters\n * do not influence whether or not a URL is matched, but their values are passed through into\n * the matched parameters returned by {@link ui.router.util.type:UrlMatcher#methods_exec exec}.\n * \n * Path parameter placeholders can be specified using simple colon/catch-all syntax or curly brace\n * syntax, which optionally allows a regular expression for the parameter to be specified:\n *\n * * `':'` name - colon placeholder\n * * `'*'` name - catch-all placeholder\n * * `'{' name '}'` - curly placeholder\n * * `'{' name ':' regexp '}'` - curly placeholder with regexp. Should the regexp itself contain\n *   curly braces, they must be in matched pairs or escaped with a backslash.\n *\n * Parameter names may contain only word characters (latin letters, digits, and underscore) and\n * must be unique within the pattern (across both path and search parameters). For colon \n * placeholders or curly placeholders without an explicit regexp, a path parameter matches any\n * number of characters other than '/'. For catch-all placeholders the path parameter matches\n * any number of characters.\n * \n * Examples:\n * \n * * `'/hello/'` - Matches only if the path is exactly '/hello/'. There is no special treatment for\n *   trailing slashes, and patterns have to match the entire path, not just a prefix.\n * * `'/user/:id'` - Matches '/user/bob' or '/user/1234!!!' or even '/user/' but not '/user' or\n *   '/user/bob/details'. The second path segment will be captured as the parameter 'id'.\n * * `'/user/{id}'` - Same as the previous example, but using curly brace syntax.\n * * `'/user/{id:[^/]*}'` - Same as the previous example.\n * * `'/user/{id:[0-9a-fA-F]{1,8}}'` - Similar to the previous example, but only matches if the id\n *   parameter consists of 1 to 8 hex digits.\n * * `'/files/{path:.*}'` - Matches any URL starting with '/files/' and captures the rest of the\n *   path into the parameter 'path'.\n * * `'/files/*path'` - ditto.\n *\n * @param {string} pattern  the pattern to compile into a matcher.\n *\n * @property {string} prefix  A static prefix of this pattern. The matcher guarantees that any\n *   URL matching this matcher (i.e. any string for which {@link ui.router.util.type:UrlMatcher#methods_exec exec()} returns\n *   non-null) will start with this prefix.\n *\n * @property {string} source  The pattern that was passed into the contructor\n *\n * @property {string} sourcePath  The path portion of the source property\n *\n * @property {string} sourceSearch  The search portion of the source property\n *\n * @property {string} regex  The constructed regex that will be used to match against the url when \n *   it is time to determine which url will match.\n *\n * @returns {Object}  New UrlMatcher object\n */\nfunction UrlMatcher(pattern) {\n\n  // Find all placeholders and create a compiled pattern, using either classic or curly syntax:\n  //   '*' name\n  //   ':' name\n  //   '{' name '}'\n  //   '{' name ':' regexp '}'\n  // The regular expression is somewhat complicated due to the need to allow curly braces\n  // inside the regular expression. The placeholder regexp breaks down as follows:\n  //    ([:*])(\\w+)               classic placeholder ($1 / $2)\n  //    \\{(\\w+)(?:\\:( ... ))?\\}   curly brace placeholder ($3) with optional regexp ... ($4)\n  //    (?: ... | ... | ... )+    the regexp consists of any number of atoms, an atom being either\n  //    [^{}\\\\]+                  - anything other than curly braces or backslash\n  //    \\\\.                       - a backslash escape\n  //    \\{(?:[^{}\\\\]+|\\\\.)*\\}     - a matched set of curly braces containing other atoms\n  var placeholder = /([:*])(\\w+)|\\{(\\w+)(?:\\:((?:[^{}\\\\]+|\\\\.|\\{(?:[^{}\\\\]+|\\\\.)*\\})+))?\\}/g,\n      names = {}, compiled = '^', last = 0, m,\n      segments = this.segments = [],\n      params = this.params = [];\n\n  function addParameter(id) {\n    if (!/^\\w+(-+\\w+)*$/.test(id)) throw new Error(\"Invalid parameter name '\" + id + \"' in pattern '\" + pattern + \"'\");\n    if (names[id]) throw new Error(\"Duplicate parameter name '\" + id + \"' in pattern '\" + pattern + \"'\");\n    names[id] = true;\n    params.push(id);\n  }\n\n  function quoteRegExp(string) {\n    return string.replace(/[\\\\\\[\\]\\^$*+?.()|{}]/g, \"\\\\$&\");\n  }\n\n  this.source = pattern;\n\n  // Split into static segments separated by path parameter placeholders.\n  // The number of segments is always 1 more than the number of parameters.\n  var id, regexp, segment;\n  while ((m = placeholder.exec(pattern))) {\n    id = m[2] || m[3]; // IE[78] returns '' for unmatched groups instead of null\n    regexp = m[4] || (m[1] == '*' ? '.*' : '[^/]*');\n    segment = pattern.substring(last, m.index);\n    if (segment.indexOf('?') >= 0) break; // we're into the search part\n    compiled += quoteRegExp(segment) + '(' + regexp + ')';\n    addParameter(id);\n    segments.push(segment);\n    last = placeholder.lastIndex;\n  }\n  segment = pattern.substring(last);\n\n  // Find any search parameter names and remove them from the last segment\n  var i = segment.indexOf('?');\n  if (i >= 0) {\n    var search = this.sourceSearch = segment.substring(i);\n    segment = segment.substring(0, i);\n    this.sourcePath = pattern.substring(0, last+i);\n\n    // Allow parameters to be separated by '?' as well as '&' to make concat() easier\n    forEach(search.substring(1).split(/[&?]/), addParameter);\n  } else {\n    this.sourcePath = pattern;\n    this.sourceSearch = '';\n  }\n\n  compiled += quoteRegExp(segment) + '$';\n  segments.push(segment);\n  this.regexp = new RegExp(compiled);\n  this.prefix = segments[0];\n}\n\n/**\n * @ngdoc function\n * @name ui.router.util.type:UrlMatcher#concat\n * @methodOf ui.router.util.type:UrlMatcher\n *\n * @description\n * Returns a new matcher for a pattern constructed by appending the path part and adding the\n * search parameters of the specified pattern to this pattern. The current pattern is not\n * modified. This can be understood as creating a pattern for URLs that are relative to (or\n * suffixes of) the current pattern.\n *\n * @example\n * The following two matchers are equivalent:\n * ```\n * new UrlMatcher('/user/{id}?q').concat('/details?date');\n * new UrlMatcher('/user/{id}/details?q&date');\n * ```\n *\n * @param {string} pattern  The pattern to append.\n * @returns {ui.router.util.type:UrlMatcher}  A matcher for the concatenated pattern.\n */\nUrlMatcher.prototype.concat = function (pattern) {\n  // Because order of search parameters is irrelevant, we can add our own search\n  // parameters to the end of the new pattern. Parse the new pattern by itself\n  // and then join the bits together, but it's much easier to do this on a string level.\n  return new UrlMatcher(this.sourcePath + pattern + this.sourceSearch);\n};\n\nUrlMatcher.prototype.toString = function () {\n  return this.source;\n};\n\n/**\n * @ngdoc function\n * @name ui.router.util.type:UrlMatcher#exec\n * @methodOf ui.router.util.type:UrlMatcher\n *\n * @description\n * Tests the specified path against this matcher, and returns an object containing the captured\n * parameter values, or null if the path does not match. The returned object contains the values\n * of any search parameters that are mentioned in the pattern, but their value may be null if\n * they are not present in `searchParams`. This means that search parameters are always treated\n * as optional.\n *\n * @example\n * ```\n * new UrlMatcher('/user/{id}?q&r').exec('/user/bob', { x:'1', q:'hello' });\n * // returns { id:'bob', q:'hello', r:null }\n * ```\n *\n * @param {string} path  The URL path to match, e.g. `$location.path()`.\n * @param {Object} searchParams  URL search parameters, e.g. `$location.search()`.\n * @returns {Object}  The captured parameter values.\n */\nUrlMatcher.prototype.exec = function (path, searchParams) {\n  var m = this.regexp.exec(path);\n  if (!m) return null;\n\n  var params = this.params, nTotal = params.length,\n    nPath = this.segments.length-1,\n    values = {}, i;\n\n  if (nPath !== m.length - 1) throw new Error(\"Unbalanced capture group in route '\" + this.source + \"'\");\n\n  for (i=0; i<nPath; i++) values[params[i]] = m[i+1];\n  for (/**/; i<nTotal; i++) values[params[i]] = searchParams[params[i]];\n\n  return values;\n};\n\n/**\n * @ngdoc function\n * @name ui.router.util.type:UrlMatcher#parameters\n * @methodOf ui.router.util.type:UrlMatcher\n *\n * @description\n * Returns the names of all path and search parameters of this pattern in an unspecified order.\n * \n * @returns {Array.<string>}  An array of parameter names. Must be treated as read-only. If the\n *    pattern has no parameters, an empty array is returned.\n */\nUrlMatcher.prototype.parameters = function () {\n  return this.params;\n};\n\n/**\n * @ngdoc function\n * @name ui.router.util.type:UrlMatcher#format\n * @methodOf ui.router.util.type:UrlMatcher\n *\n * @description\n * Creates a URL that matches this pattern by substituting the specified values\n * for the path and search parameters. Null values for path parameters are\n * treated as empty strings.\n *\n * @example\n * ```\n * new UrlMatcher('/user/{id}?q').format({ id:'bob', q:'yes' });\n * // returns '/user/bob?q=yes'\n * ```\n *\n * @param {Object} values  the values to substitute for the parameters in this pattern.\n * @returns {string}  the formatted URL (path and optionally search part).\n */\nUrlMatcher.prototype.format = function (values) {\n  var segments = this.segments, params = this.params;\n  if (!values) return segments.join('');\n\n  var nPath = segments.length-1, nTotal = params.length,\n    result = segments[0], i, search, value;\n\n  for (i=0; i<nPath; i++) {\n    value = values[params[i]];\n    // TODO: Maybe we should throw on null here? It's not really good style to use '' and null interchangeabley\n    if (value != null) result += encodeURIComponent(value);\n    result += segments[i+1];\n  }\n  for (/**/; i<nTotal; i++) {\n    value = values[params[i]];\n    if (value != null) {\n      result += (search ? '&' : '?') + params[i] + '=' + encodeURIComponent(value);\n      search = true;\n    }\n  }\n\n  return result;\n};\n\n\n\n/**\n * @ngdoc object\n * @name ui.router.util.$urlMatcherFactory\n *\n * @description\n * Factory for {@link ui.router.util.type:UrlMatcher} instances. The factory is also available to providers\n * under the name `$urlMatcherFactoryProvider`.\n */\nfunction $UrlMatcherFactory() {\n\n  /**\n   * @ngdoc function\n   * @name ui.router.util.$urlMatcherFactory#compile\n   * @methodOf ui.router.util.$urlMatcherFactory\n   *\n   * @description\n   * Creates a {@link ui.router.util.type:UrlMatcher} for the specified pattern.\n   *   \n   * @param {string} pattern  The URL pattern.\n   * @returns {ui.router.util.type:UrlMatcher}  The UrlMatcher.\n   */\n  this.compile = function (pattern) {\n    return new UrlMatcher(pattern);\n  };\n\n  /**\n   * @ngdoc function\n   * @name ui.router.util.$urlMatcherFactory#isMatcher\n   * @methodOf ui.router.util.$urlMatcherFactory\n   *\n   * @description\n   * Returns true if the specified object is a UrlMatcher, or false otherwise.\n   *\n   * @param {Object} object  The object to perform the type check against.\n   * @returns {Boolean}  Returns `true` if the object has the following functions: `exec`, `format`, and `concat`.\n   */\n  this.isMatcher = function (o) {\n    return isObject(o) && isFunction(o.exec) && isFunction(o.format) && isFunction(o.concat);\n  };\n  \n  /* No need to document $get, since it returns this */\n  this.$get = function () {\n    return this;\n  };\n}\n\n// Register as a provider so it's available to other providers\nangular.module('ui.router.util').provider('$urlMatcherFactory', $UrlMatcherFactory);\n\n/**\n * @ngdoc object\n * @name ui.router.router.$urlRouterProvider\n *\n * @requires ui.router.util.$urlMatcherFactoryProvider\n *\n * @description\n * `$urlRouterProvider` has the responsibility of watching `$location`. \n * When `$location` changes it runs through a list of rules one by one until a \n * match is found. `$urlRouterProvider` is used behind the scenes anytime you specify \n * a url in a state configuration. All urls are compiled into a UrlMatcher object.\n *\n * There are several methods on `$urlRouterProvider` that make it useful to use directly\n * in your module config.\n */\n$UrlRouterProvider.$inject = ['$urlMatcherFactoryProvider'];\nfunction $UrlRouterProvider(  $urlMatcherFactory) {\n  var rules = [], \n      otherwise = null;\n\n  // Returns a string that is a prefix of all strings matching the RegExp\n  function regExpPrefix(re) {\n    var prefix = /^\\^((?:\\\\[^a-zA-Z0-9]|[^\\\\\\[\\]\\^$*+?.()|{}]+)*)/.exec(re.source);\n    return (prefix != null) ? prefix[1].replace(/\\\\(.)/g, \"$1\") : '';\n  }\n\n  // Interpolates matched values into a String.replace()-style pattern\n  function interpolate(pattern, match) {\n    return pattern.replace(/\\$(\\$|\\d{1,2})/, function (m, what) {\n      return match[what === '$' ? 0 : Number(what)];\n    });\n  }\n\n  /**\n   * @ngdoc function\n   * @name ui.router.router.$urlRouterProvider#rule\n   * @methodOf ui.router.router.$urlRouterProvider\n   *\n   * @description\n   * Defines rules that are used by `$urlRouterProvider to find matches for\n   * specific URLs.\n   *\n   * @example\n   * <pre>\n   * var app = angular.module('app', ['ui.router.router']);\n   *\n   * app.config(function ($urlRouterProvider) {\n   *   // Here's an example of how you might allow case insensitive urls\n   *   $urlRouterProvider.rule(function ($injector, $location) {\n   *     var path = $location.path(),\n   *         normalized = path.toLowerCase();\n   *\n   *     if (path !== normalized) {\n   *       return normalized;\n   *     }\n   *   });\n   * });\n   * </pre>\n   *\n   * @param {object} rule Handler function that takes `$injector` and `$location`\n   * services as arguments. You can use them to return a valid path as a string.\n   *\n   * @return {object} $urlRouterProvider - $urlRouterProvider instance\n   */\n  this.rule =\n    function (rule) {\n      if (!isFunction(rule)) throw new Error(\"'rule' must be a function\");\n      rules.push(rule);\n      return this;\n    };\n\n  /**\n   * @ngdoc object\n   * @name ui.router.router.$urlRouterProvider#otherwise\n   * @methodOf ui.router.router.$urlRouterProvider\n   *\n   * @description\n   * Defines a path that is used when an invalied route is requested.\n   *\n   * @example\n   * <pre>\n   * var app = angular.module('app', ['ui.router.router']);\n   *\n   * app.config(function ($urlRouterProvider) {\n   *   // if the path doesn't match any of the urls you configured\n   *   // otherwise will take care of routing the user to the\n   *   // specified url\n   *   $urlRouterProvider.otherwise('/index');\n   *\n   *   // Example of using function rule as param\n   *   $urlRouterProvider.otherwise(function ($injector, $location) {\n   *     ...\n   *   });\n   * });\n   * </pre>\n   *\n   * @param {string|object} rule The url path you want to redirect to or a function \n   * rule that returns the url path. The function version is passed two params: \n   * `$injector` and `$location` services.\n   *\n   * @return {object} $urlRouterProvider - $urlRouterProvider instance\n   */\n  this.otherwise =\n    function (rule) {\n      if (isString(rule)) {\n        var redirect = rule;\n        rule = function () { return redirect; };\n      }\n      else if (!isFunction(rule)) throw new Error(\"'rule' must be a function\");\n      otherwise = rule;\n      return this;\n    };\n\n\n  function handleIfMatch($injector, handler, match) {\n    if (!match) return false;\n    var result = $injector.invoke(handler, handler, { $match: match });\n    return isDefined(result) ? result : true;\n  }\n\n  /**\n   * @ngdoc function\n   * @name ui.router.router.$urlRouterProvider#when\n   * @methodOf ui.router.router.$urlRouterProvider\n   *\n   * @description\n   * Registers a handler for a given url matching. if handle is a string, it is\n   * treated as a redirect, and is interpolated according to the syyntax of match\n   * (i.e. like String.replace() for RegExp, or like a UrlMatcher pattern otherwise).\n   *\n   * If the handler is a function, it is injectable. It gets invoked if `$location`\n   * matches. You have the option of inject the match object as `$match`.\n   *\n   * The handler can return\n   *\n   * - **falsy** to indicate that the rule didn't match after all, then `$urlRouter`\n   *   will continue trying to find another one that matches.\n   * - **string** which is treated as a redirect and passed to `$location.url()`\n   * - **void** or any **truthy** value tells `$urlRouter` that the url was handled.\n   *\n   * @example\n   * <pre>\n   * var app = angular.module('app', ['ui.router.router']);\n   *\n   * app.config(function ($urlRouterProvider) {\n   *   $urlRouterProvider.when($state.url, function ($match, $stateParams) {\n   *     if ($state.$current.navigable !== state ||\n   *         !equalForKeys($match, $stateParams) {\n   *      $state.transitionTo(state, $match, false);\n   *     }\n   *   });\n   * });\n   * </pre>\n   *\n   * @param {string|object} what The incoming path that you want to redirect.\n   * @param {string|object} handler The path you want to redirect your user to.\n   */\n  this.when =\n    function (what, handler) {\n      var redirect, handlerIsString = isString(handler);\n      if (isString(what)) what = $urlMatcherFactory.compile(what);\n\n      if (!handlerIsString && !isFunction(handler) && !isArray(handler))\n        throw new Error(\"invalid 'handler' in when()\");\n\n      var strategies = {\n        matcher: function (what, handler) {\n          if (handlerIsString) {\n            redirect = $urlMatcherFactory.compile(handler);\n            handler = ['$match', function ($match) { return redirect.format($match); }];\n          }\n          return extend(function ($injector, $location) {\n            return handleIfMatch($injector, handler, what.exec($location.path(), $location.search()));\n          }, {\n            prefix: isString(what.prefix) ? what.prefix : ''\n          });\n        },\n        regex: function (what, handler) {\n          if (what.global || what.sticky) throw new Error(\"when() RegExp must not be global or sticky\");\n\n          if (handlerIsString) {\n            redirect = handler;\n            handler = ['$match', function ($match) { return interpolate(redirect, $match); }];\n          }\n          return extend(function ($injector, $location) {\n            return handleIfMatch($injector, handler, what.exec($location.path()));\n          }, {\n            prefix: regExpPrefix(what)\n          });\n        }\n      };\n\n      var check = { matcher: $urlMatcherFactory.isMatcher(what), regex: what instanceof RegExp };\n\n      for (var n in check) {\n        if (check[n]) {\n          return this.rule(strategies[n](what, handler));\n        }\n      }\n\n      throw new Error(\"invalid 'what' in when()\");\n    };\n\n  /**\n   * @ngdoc object\n   * @name ui.router.router.$urlRouter\n   *\n   * @requires $location\n   * @requires $rootScope\n   * @requires $injector\n   *\n   * @description\n   *\n   */\n  this.$get =\n    [        '$location', '$rootScope', '$injector',\n    function ($location,   $rootScope,   $injector) {\n      // TODO: Optimize groups of rules with non-empty prefix into some sort of decision tree\n      function update(evt) {\n        if (evt && evt.defaultPrevented) return;\n        function check(rule) {\n          var handled = rule($injector, $location);\n          if (handled) {\n            if (isString(handled)) $location.replace().url(handled);\n            return true;\n          }\n          return false;\n        }\n        var n=rules.length, i;\n        for (i=0; i<n; i++) {\n          if (check(rules[i])) return;\n        }\n        // always check otherwise last to allow dynamic updates to the set of rules\n        if (otherwise) check(otherwise);\n      }\n\n      $rootScope.$on('$locationChangeSuccess', update);\n\n      return {\n        /**\n         * @ngdoc function\n         * @name ui.router.router.$urlRouter#sync\n         * @methodOf ui.router.router.$urlRouter\n         *\n         * @description\n         * Triggers an update; the same update that happens when the address bar url changes, aka `$locationChangeSuccess`.\n         * This method is useful when you need to use `preventDefault()` on the `$locationChangeSuccess` event, \n         * perform some custom logic (route protection, auth, config, redirection, etc) and then finally proceed \n         * with the transition by calling `$urlRouter.sync()`.\n         *\n         * @example\n         * <pre>\n         * angular.module('app', ['ui.router']);\n         *   .run(function($rootScope, $urlRouter) {\n         *     $rootScope.$on('$locationChangeSuccess', function(evt) {\n         *       // Halt state change from even starting\n         *       evt.preventDefault();\n         *       // Perform custom logic\n         *       var meetsRequirement = ...\n         *       // Continue with the update and state transition if logic allows\n         *       if (meetsRequirement) $urlRouter.sync();\n         *     });\n         * });\n         * </pre>\n         */\n        sync: function () {\n          update();\n        }\n      };\n    }];\n}\n\nangular.module('ui.router.router').provider('$urlRouter', $UrlRouterProvider);\n\n/**\n * @ngdoc object\n * @name ui.router.state.$stateProvider\n *\n * @requires ui.router.router.$urlRouterProvider\n * @requires ui.router.util.$urlMatcherFactoryProvider\n * @requires $locationProvider\n *\n * @description\n * The new `$stateProvider` works similar to Angular's v1 router, but it focuses purely\n * on state.\n *\n * A state corresponds to a \"place\" in the application in terms of the overall UI and\n * navigation. A state describes (via the controller / template / view properties) what\n * the UI looks like and does at that place.\n *\n * States often have things in common, and the primary way of factoring out these\n * commonalities in this model is via the state hierarchy, i.e. parent/child states aka\n * nested states.\n *\n * The `$stateProvider` provides interfaces to declare these states for your app.\n */\n$StateProvider.$inject = ['$urlRouterProvider', '$urlMatcherFactoryProvider', '$locationProvider'];\nfunction $StateProvider(   $urlRouterProvider,   $urlMatcherFactory,           $locationProvider) {\n\n  var root, states = {}, $state, queue = {}, abstractKey = 'abstract';\n\n  // Builds state properties from definition passed to registerState()\n  var stateBuilder = {\n\n    // Derive parent state from a hierarchical name only if 'parent' is not explicitly defined.\n    // state.children = [];\n    // if (parent) parent.children.push(state);\n    parent: function(state) {\n      if (isDefined(state.parent) && state.parent) return findState(state.parent);\n      // regex matches any valid composite state name\n      // would match \"contact.list\" but not \"contacts\"\n      var compositeName = /^(.+)\\.[^.]+$/.exec(state.name);\n      return compositeName ? findState(compositeName[1]) : root;\n    },\n\n    // inherit 'data' from parent and override by own values (if any)\n    data: function(state) {\n      if (state.parent && state.parent.data) {\n        state.data = state.self.data = extend({}, state.parent.data, state.data);\n      }\n      return state.data;\n    },\n\n    // Build a URLMatcher if necessary, either via a relative or absolute URL\n    url: function(state) {\n      var url = state.url;\n\n      if (isString(url)) {\n        if (url.charAt(0) == '^') {\n          return $urlMatcherFactory.compile(url.substring(1));\n        }\n        return (state.parent.navigable || root).url.concat(url);\n      }\n\n      if ($urlMatcherFactory.isMatcher(url) || url == null) {\n        return url;\n      }\n      throw new Error(\"Invalid url '\" + url + \"' in state '\" + state + \"'\");\n    },\n\n    // Keep track of the closest ancestor state that has a URL (i.e. is navigable)\n    navigable: function(state) {\n      return state.url ? state : (state.parent ? state.parent.navigable : null);\n    },\n\n    // Derive parameters for this state and ensure they're a super-set of parent's parameters\n    params: function(state) {\n      if (!state.params) {\n        return state.url ? state.url.parameters() : state.parent.params;\n      }\n      if (!isArray(state.params)) throw new Error(\"Invalid params in state '\" + state + \"'\");\n      if (state.url) throw new Error(\"Both params and url specicified in state '\" + state + \"'\");\n      return state.params;\n    },\n\n    // If there is no explicit multi-view configuration, make one up so we don't have\n    // to handle both cases in the view directive later. Note that having an explicit\n    // 'views' property will mean the default unnamed view properties are ignored. This\n    // is also a good time to resolve view names to absolute names, so everything is a\n    // straight lookup at link time.\n    views: function(state) {\n      var views = {};\n\n      forEach(isDefined(state.views) ? state.views : { '': state }, function (view, name) {\n        if (name.indexOf('@') < 0) name += '@' + state.parent.name;\n        views[name] = view;\n      });\n      return views;\n    },\n\n    ownParams: function(state) {\n      if (!state.parent) {\n        return state.params;\n      }\n      var paramNames = {}; forEach(state.params, function (p) { paramNames[p] = true; });\n\n      forEach(state.parent.params, function (p) {\n        if (!paramNames[p]) {\n          throw new Error(\"Missing required parameter '\" + p + \"' in state '\" + state.name + \"'\");\n        }\n        paramNames[p] = false;\n      });\n      var ownParams = [];\n\n      forEach(paramNames, function (own, p) {\n        if (own) ownParams.push(p);\n      });\n      return ownParams;\n    },\n\n    // Keep a full path from the root down to this state as this is needed for state activation.\n    path: function(state) {\n      return state.parent ? state.parent.path.concat(state) : []; // exclude root from path\n    },\n\n    // Speed up $state.contains() as it's used a lot\n    includes: function(state) {\n      var includes = state.parent ? extend({}, state.parent.includes) : {};\n      includes[state.name] = true;\n      return includes;\n    },\n\n    $delegates: {}\n  };\n\n  function isRelative(stateName) {\n    return stateName.indexOf(\".\") === 0 || stateName.indexOf(\"^\") === 0;\n  }\n\n  function findState(stateOrName, base) {\n    var isStr = isString(stateOrName),\n        name  = isStr ? stateOrName : stateOrName.name,\n        path  = isRelative(name);\n\n    if (path) {\n      if (!base) throw new Error(\"No reference point given for path '\"  + name + \"'\");\n      var rel = name.split(\".\"), i = 0, pathLength = rel.length, current = base;\n\n      for (; i < pathLength; i++) {\n        if (rel[i] === \"\" && i === 0) {\n          current = base;\n          continue;\n        }\n        if (rel[i] === \"^\") {\n          if (!current.parent) throw new Error(\"Path '\" + name + \"' not valid for state '\" + base.name + \"'\");\n          current = current.parent;\n          continue;\n        }\n        break;\n      }\n      rel = rel.slice(i).join(\".\");\n      name = current.name + (current.name && rel ? \".\" : \"\") + rel;\n    }\n    var state = states[name];\n\n    if (state && (isStr || (!isStr && (state === stateOrName || state.self === stateOrName)))) {\n      return state;\n    }\n    return undefined;\n  }\n\n  function queueState(parentName, state) {\n    if (!queue[parentName]) {\n      queue[parentName] = [];\n    }\n    queue[parentName].push(state);\n  }\n\n  function registerState(state) {\n    // Wrap a new object around the state so we can store our private details easily.\n    state = inherit(state, {\n      self: state,\n      resolve: state.resolve || {},\n      toString: function() { return this.name; }\n    });\n\n    var name = state.name;\n    if (!isString(name) || name.indexOf('@') >= 0) throw new Error(\"State must have a valid name\");\n    if (states.hasOwnProperty(name)) throw new Error(\"State '\" + name + \"'' is already defined\");\n\n    // Get parent name\n    var parentName = (name.indexOf('.') !== -1) ? name.substring(0, name.lastIndexOf('.'))\n        : (isString(state.parent)) ? state.parent\n        : '';\n\n    // If parent is not registered yet, add state to queue and register later\n    if (parentName && !states[parentName]) {\n      return queueState(parentName, state.self);\n    }\n\n    for (var key in stateBuilder) {\n      if (isFunction(stateBuilder[key])) state[key] = stateBuilder[key](state, stateBuilder.$delegates[key]);\n    }\n    states[name] = state;\n\n    // Register the state in the global state list and with $urlRouter if necessary.\n    if (!state[abstractKey] && state.url) {\n      $urlRouterProvider.when(state.url, ['$match', '$stateParams', function ($match, $stateParams) {\n        if ($state.$current.navigable != state || !equalForKeys($match, $stateParams)) {\n          $state.transitionTo(state, $match, { location: false });\n        }\n      }]);\n    }\n\n    // Register any queued children\n    if (queue[name]) {\n      for (var i = 0; i < queue[name].length; i++) {\n        registerState(queue[name][i]);\n      }\n    }\n\n    return state;\n  }\n\n  // Checks text to see if it looks like a glob.\n  function isGlob (text) {\n    return text.indexOf('*') > -1;\n  }\n\n  // Returns true if glob matches current $state name.\n  function doesStateMatchGlob (glob) {\n    var globSegments = glob.split('.'),\n        segments = $state.$current.name.split('.');\n\n    //match greedy starts\n    if (globSegments[0] === '**') {\n       segments = segments.slice(segments.indexOf(globSegments[1]));\n       segments.unshift('**');\n    }\n    //match greedy ends\n    if (globSegments[globSegments.length - 1] === '**') {\n       segments.splice(segments.indexOf(globSegments[globSegments.length - 2]) + 1, Number.MAX_VALUE);\n       segments.push('**');\n    }\n\n    if (globSegments.length != segments.length) {\n      return false;\n    }\n\n    //match single stars\n    for (var i = 0, l = globSegments.length; i < l; i++) {\n      if (globSegments[i] === '*') {\n        segments[i] = '*';\n      }\n    }\n\n    return segments.join('') === globSegments.join('');\n  }\n\n\n  // Implicit root state that is always active\n  root = registerState({\n    name: '',\n    url: '^',\n    views: null,\n    'abstract': true\n  });\n  root.navigable = null;\n\n\n  /**\n   * @ngdoc function\n   * @name ui.router.state.$stateProvider#decorator\n   * @methodOf ui.router.state.$stateProvider\n   *\n   * @description\n   * Allows you to extend (carefully) or override (at your own peril) the \n   * `stateBuilder` object used internally by `$stateProvider`. This can be used \n   * to add custom functionality to ui-router, for example inferring templateUrl \n   * based on the state name.\n   *\n   * When passing only a name, it returns the current (original or decorated) builder\n   * function that matches `name`.\n   *\n   * The builder functions that can be decorated are listed below. Though not all\n   * necessarily have a good use case for decoration, that is up to you to decide.\n   *\n   * In addition, users can attach custom decorators, which will generate new \n   * properties within the state's internal definition. There is currently no clear \n   * use-case for this beyond accessing internal states (i.e. $state.$current), \n   * however, expect this to become increasingly relevant as we introduce additional \n   * meta-programming features.\n   *\n   * **Warning**: Decorators should not be interdependent because the order of \n   * execution of the builder functions in non-deterministic. Builder functions \n   * should only be dependent on the state definition object and super function.\n   *\n   *\n   * Existing builder functions and current return values:\n   *\n   * - **parent** `{object}` - returns the parent state object.\n   * - **data** `{object}` - returns state data, including any inherited data that is not\n   *   overridden by own values (if any).\n   * - **url** `{object}` - returns a {link ui.router.util.type:UrlMatcher} or null.\n   * - **navigable** `{object}` - returns closest ancestor state that has a URL (aka is \n   *   navigable).\n   * - **params** `{object}` - returns an array of state params that are ensured to \n   *   be a super-set of parent's params.\n   * - **views** `{object}` - returns a views object where each key is an absolute view \n   *   name (i.e. \"viewName@stateName\") and each value is the config object \n   *   (template, controller) for the view. Even when you don't use the views object \n   *   explicitly on a state config, one is still created for you internally.\n   *   So by decorating this builder function you have access to decorating template \n   *   and controller properties.\n   * - **ownParams** `{object}` - returns an array of params that belong to the state, \n   *   not including any params defined by ancestor states.\n   * - **path** `{string}` - returns the full path from the root down to this state. \n   *   Needed for state activation.\n   * - **includes** `{object}` - returns an object that includes every state that \n   *   would pass a '$state.includes()' test.\n   *\n   * @example\n   * <pre>\n   * // Override the internal 'views' builder with a function that takes the state\n   * // definition, and a reference to the internal function being overridden:\n   * $stateProvider.decorator('views', function ($state, parent) {\n   *   var result = {},\n   *       views = parent(state);\n   *\n   *   angular.forEach(view, function (config, name) {\n   *     var autoName = (state.name + '.' + name).replace('.', '/');\n   *     config.templateUrl = config.templateUrl || '/partials/' + autoName + '.html';\n   *     result[name] = config;\n   *   });\n   *   return result;\n   * });\n   *\n   * $stateProvider.state('home', {\n   *   views: {\n   *     'contact.list': { controller: 'ListController' },\n   *     'contact.item': { controller: 'ItemController' }\n   *   }\n   * });\n   *\n   * // ...\n   *\n   * $state.go('home');\n   * // Auto-populates list and item views with /partials/home/contact/list.html,\n   * // and /partials/home/contact/item.html, respectively.\n   * </pre>\n   *\n   * @param {string} name The name of the builder function to decorate. \n   * @param {object} func A function that is responsible for decorating the original \n   * builder function. The function receives two parameters:\n   *\n   *   - `{object}` - state - The state config object.\n   *   - `{object}` - super - The original builder function.\n   *\n   * @return {object} $stateProvider - $stateProvider instance\n   */\n  this.decorator = decorator;\n  function decorator(name, func) {\n    /*jshint validthis: true */\n    if (isString(name) && !isDefined(func)) {\n      return stateBuilder[name];\n    }\n    if (!isFunction(func) || !isString(name)) {\n      return this;\n    }\n    if (stateBuilder[name] && !stateBuilder.$delegates[name]) {\n      stateBuilder.$delegates[name] = stateBuilder[name];\n    }\n    stateBuilder[name] = func;\n    return this;\n  }\n\n  /**\n   * @ngdoc function\n   * @name ui.router.state.$stateProvider#state\n   * @methodOf ui.router.state.$stateProvider\n   *\n   * @description\n   * Registers a state configuration under a given state name. The stateConfig object\n   * has the following acceptable properties.\n   *\n   * <a id='template'></a>\n   *\n   * - **`template`** - {string|function=} - html template as a string or a function that returns\n   *   an html template as a string which should be used by the uiView directives. This property \n   *   takes precedence over templateUrl.\n   *   \n   *   If `template` is a function, it will be called with the following parameters:\n   *\n   *   - {array.&lt;object&gt;} - state parameters extracted from the current $location.path() by\n   *     applying the current state\n   *\n   * <a id='templateUrl'></a>\n   *\n   * - **`templateUrl`** - {string|function=} - path or function that returns a path to an html \n   *   template that should be used by uiView.\n   *   \n   *   If `templateUrl` is a function, it will be called with the following parameters:\n   *\n   *   - {array.&lt;object&gt;} - state parameters extracted from the current $location.path() by \n   *     applying the current state\n   *\n   * <a id='templateProvider'></a>\n   *\n   * - **`templateProvider`** - {function=} - Provider function that returns HTML content\n   *   string.\n   *\n   * <a id='controller'></a>\n   *\n   * - **`controller`** - {string|function=} -  Controller fn that should be associated with newly \n   *   related scope or the name of a registered controller if passed as a string.\n   *\n   * <a id='controllerProvider'></a>\n   *\n   * - **`controllerProvider`** - {function=} - Injectable provider function that returns\n   *   the actual controller or string.\n   *\n   * <a id='controllerAs'></a>\n   * \n   * - **`controllerAs`** – {string=} – A controller alias name. If present the controller will be \n   *   published to scope under the controllerAs name.\n   *\n   * <a id='resolve'></a>\n   *\n   * - **`resolve`** - {object.&lt;string, function&gt;=} - An optional map of dependencies which \n   *   should be injected into the controller. If any of these dependencies are promises, \n   *   the router will wait for them all to be resolved or one to be rejected before the \n   *   controller is instantiated. If all the promises are resolved successfully, the values \n   *   of the resolved promises are injected and $stateChangeSuccess event is fired. If any \n   *   of the promises are rejected the $stateChangeError event is fired. The map object is:\n   *   \n   *   - key - {string}: name of dependency to be injected into controller\n   *   - factory - {string|function}: If string then it is alias for service. Otherwise if function, \n   *     it is injected and return value it treated as dependency. If result is a promise, it is \n   *     resolved before its value is injected into controller.\n   *\n   * <a id='url'></a>\n   *\n   * - **`url`** - {string=} - A url with optional parameters. When a state is navigated or\n   *   transitioned to, the `$stateParams` service will be populated with any \n   *   parameters that were passed.\n   *\n   * <a id='params'></a>\n   *\n   * - **`params`** - {object=} - An array of parameter names or regular expressions. Only \n   *   use this within a state if you are not using url. Otherwise you can specify your\n   *   parameters within the url. When a state is navigated or transitioned to, the \n   *   $stateParams service will be populated with any parameters that were passed.\n   *\n   * <a id='views'></a>\n   *\n   * - **`views`** - {object=} - Use the views property to set up multiple views or to target views\n   *   manually/explicitly.\n   *\n   * <a id='abstract'></a>\n   *\n   * - **`abstract`** - {boolean=} - An abstract state will never be directly activated, \n   *   but can provide inherited properties to its common children states.\n   *\n   * <a id='onEnter'></a>\n   *\n   * - **`onEnter`** - {object=} - Callback function for when a state is entered. Good way\n   *   to trigger an action or dispatch an event, such as opening a dialog.\n   *\n   * <a id='onExit'></a>\n   *\n   * - **`onExit`** - {object=} - Callback function for when a state is exited. Good way to\n   *   trigger an action or dispatch an event, such as opening a dialog.\n   *\n   * <a id='reloadOnSearch'></a>\n   *\n   * - **`reloadOnSearch = true`** - {boolean=} - If `false`, will not retrigger the same state \n   *   just because a search/query parameter has changed (via $location.search() or $location.hash()). \n   *   Useful for when you'd like to modify $location.search() without triggering a reload.\n   *\n   * <a id='data'></a>\n   *\n   * - **`data`** - {object=} - Arbitrary data object, useful for custom configuration.\n   *\n   * @example\n   * <pre>\n   * // Some state name examples\n   *\n   * // stateName can be a single top-level name (must be unique).\n   * $stateProvider.state(\"home\", {});\n   *\n   * // Or it can be a nested state name. This state is a child of the \n   * // above \"home\" state.\n   * $stateProvider.state(\"home.newest\", {});\n   *\n   * // Nest states as deeply as needed.\n   * $stateProvider.state(\"home.newest.abc.xyz.inception\", {});\n   *\n   * // state() returns $stateProvider, so you can chain state declarations.\n   * $stateProvider\n   *   .state(\"home\", {})\n   *   .state(\"about\", {})\n   *   .state(\"contacts\", {});\n   * </pre>\n   *\n   * @param {string} name A unique state name, e.g. \"home\", \"about\", \"contacts\". \n   * To create a parent/child state use a dot, e.g. \"about.sales\", \"home.newest\".\n   * @param {object} definition State configuration object.\n   */\n  this.state = state;\n  function state(name, definition) {\n    /*jshint validthis: true */\n    if (isObject(name)) definition = name;\n    else definition.name = name;\n    registerState(definition);\n    return this;\n  }\n\n  /**\n   * @ngdoc object\n   * @name ui.router.state.$state\n   *\n   * @requires $rootScope\n   * @requires $q\n   * @requires ui.router.state.$view\n   * @requires $injector\n   * @requires ui.router.util.$resolve\n   * @requires ui.router.state.$stateParams\n   *\n   * @property {object} params A param object, e.g. {sectionId: section.id)}, that \n   * you'd like to test against the current active state.\n   * @property {object} current A reference to the state's config object. However \n   * you passed it in. Useful for accessing custom data.\n   * @property {object} transition Currently pending transition. A promise that'll \n   * resolve or reject.\n   *\n   * @description\n   * `$state` service is responsible for representing states as well as transitioning\n   * between them. It also provides interfaces to ask for current state or even states\n   * you're coming from.\n   */\n  // $urlRouter is injected just to ensure it gets instantiated\n  this.$get = $get;\n  $get.$inject = ['$rootScope', '$q', '$view', '$injector', '$resolve', '$stateParams', '$location', '$urlRouter', '$browser'];\n  function $get(   $rootScope,   $q,   $view,   $injector,   $resolve,   $stateParams,   $location,   $urlRouter,   $browser) {\n\n    var TransitionSuperseded = $q.reject(new Error('transition superseded'));\n    var TransitionPrevented = $q.reject(new Error('transition prevented'));\n    var TransitionAborted = $q.reject(new Error('transition aborted'));\n    var TransitionFailed = $q.reject(new Error('transition failed'));\n    var currentLocation = $location.url();\n    var baseHref = $browser.baseHref();\n\n    function syncUrl() {\n      if ($location.url() !== currentLocation) {\n        $location.url(currentLocation);\n        $location.replace();\n      }\n    }\n\n    root.locals = { resolve: null, globals: { $stateParams: {} } };\n    $state = {\n      params: {},\n      current: root.self,\n      $current: root,\n      transition: null\n    };\n\n    /**\n     * @ngdoc function\n     * @name ui.router.state.$state#reload\n     * @methodOf ui.router.state.$state\n     *\n     * @description\n     * A method that force reloads the current state. All resolves are re-resolved, events are not re-fired, \n     * and controllers reinstantiated (bug with controllers reinstantiating right now, fixing soon).\n     *\n     * @example\n     * <pre>\n     * var app angular.module('app', ['ui.router']);\n     *\n     * app.controller('ctrl', function ($scope, $state) {\n     *   $scope.reload = function(){\n     *     $state.reload();\n     *   }\n     * });\n     * </pre>\n     *\n     * `reload()` is just an alias for:\n     * <pre>\n     * $state.transitionTo($state.current, $stateParams, { \n     *   reload: true, inherit: false, notify: false \n     * });\n     * </pre>\n     */\n    $state.reload = function reload() {\n      $state.transitionTo($state.current, $stateParams, { reload: true, inherit: false, notify: false });\n    };\n\n    /**\n     * @ngdoc function\n     * @name ui.router.state.$state#go\n     * @methodOf ui.router.state.$state\n     *\n     * @description\n     * Convenience method for transitioning to a new state. `$state.go` calls \n     * `$state.transitionTo` internally but automatically sets options to \n     * `{ location: true, inherit: true, relative: $state.$current, notify: true }`. \n     * This allows you to easily use an absolute or relative to path and specify \n     * only the parameters you'd like to update (while letting unspecified parameters \n     * inherit from the currently active ancestor states).\n     *\n     * @example\n     * <pre>\n     * var app = angular.module('app', ['ui.router']);\n     *\n     * app.controller('ctrl', function ($scope, $state) {\n     *   $scope.changeState = function () {\n     *     $state.go('contact.detail');\n     *   };\n     * });\n     * </pre>\n     * <img src='../ngdoc_assets/StateGoExamples.png'/>\n     *\n     * @param {string} to Absolute state name or relative state path. Some examples:\n     *\n     * - `$state.go('contact.detail')` - will go to the `contact.detail` state\n     * - `$state.go('^')` - will go to a parent state\n     * - `$state.go('^.sibling')` - will go to a sibling state\n     * - `$state.go('.child.grandchild')` - will go to grandchild state\n     *\n     * @param {object=} params A map of the parameters that will be sent to the state, \n     * will populate $stateParams. Any parameters that are not specified will be inherited from currently \n     * defined parameters. This allows, for example, going to a sibling state that shares parameters\n     * specified in a parent state. Parameter inheritance only works between common ancestor states, I.e.\n     * transitioning to a sibling will get you the parameters for all parents, transitioning to a child\n     * will get you all current parameters, etc.\n     * @param {object=} options Options object. The options are:\n     *\n     * - **`location`** - {boolean=true|string=} - If `true` will update the url in the location bar, if `false`\n     *    will not. If string, must be `\"replace\"`, which will update url and also replace last history record.\n     * - **`inherit`** - {boolean=true}, If `true` will inherit url parameters from current url.\n     * - **`relative`** - {object=$state.$current}, When transitioning with relative path (e.g '^'), \n     *    defines which state to be relative from.\n     * - **`notify`** - {boolean=true}, If `true` will broadcast $stateChangeStart and $stateChangeSuccess events.\n     * - **`reload`** (v0.2.5) - {boolean=false}, If `true` will force transition even if the state or params \n     *    have not changed, aka a reload of the same state. It differs from reloadOnSearch because you'd\n     *    use this when you want to force a reload when *everything* is the same, including search params.\n     *\n     * @returns {promise} A promise representing the state of the new transition.\n     *\n     * Possible success values:\n     *\n     * - $state.current\n     *\n     * <br/>Possible rejection values:\n     *\n     * - 'transition superseded' - when a newer transition has been started after this one\n     * - 'transition prevented' - when `event.preventDefault()` has been called in a `$stateChangeStart` listener\n     * - 'transition aborted' - when `event.preventDefault()` has been called in a `$stateNotFound` listener or\n     *   when a `$stateNotFound` `event.retry` promise errors.\n     * - 'transition failed' - when a state has been unsuccessfully found after 2 tries.\n     * - *resolve error* - when an error has occurred with a `resolve`\n     *\n     */\n    $state.go = function go(to, params, options) {\n      return this.transitionTo(to, params, extend({ inherit: true, relative: $state.$current }, options));\n    };\n\n    /**\n     * @ngdoc function\n     * @name ui.router.state.$state#transitionTo\n     * @methodOf ui.router.state.$state\n     *\n     * @description\n     * Low-level method for transitioning to a new state. {@link ui.router.state.$state#methods_go $state.go}\n     * uses `transitionTo` internally. `$state.go` is recommended in most situations.\n     *\n     * @example\n     * <pre>\n     * var app = angular.module('app', ['ui.router']);\n     *\n     * app.controller('ctrl', function ($scope, $state) {\n     *   $scope.changeState = function () {\n     *     $state.transitionTo('contact.detail');\n     *   };\n     * });\n     * </pre>\n     *\n     * @param {string} to State name.\n     * @param {object=} toParams A map of the parameters that will be sent to the state,\n     * will populate $stateParams.\n     * @param {object=} options Options object. The options are:\n     *\n     * - **`location`** - {boolean=true|string=} - If `true` will update the url in the location bar, if `false`\n     *    will not. If string, must be `\"replace\"`, which will update url and also replace last history record.\n     * - **`inherit`** - {boolean=false}, If `true` will inherit url parameters from current url.\n     * - **`relative`** - {object=}, When transitioning with relative path (e.g '^'), \n     *    defines which state to be relative from.\n     * - **`notify`** - {boolean=true}, If `true` will broadcast $stateChangeStart and $stateChangeSuccess events.\n     * - **`reload`** (v0.2.5) - {boolean=false}, If `true` will force transition even if the state or params \n     *    have not changed, aka a reload of the same state. It differs from reloadOnSearch because you'd\n     *    use this when you want to force a reload when *everything* is the same, including search params.\n     *\n     * @returns {promise} A promise representing the state of the new transition. See\n     * {@link ui.router.state.$state#methods_go $state.go}.\n     */\n    $state.transitionTo = function transitionTo(to, toParams, options) {\n      toParams = toParams || {};\n      options = extend({\n        location: true, inherit: false, relative: null, notify: true, reload: false, $retry: false\n      }, options || {});\n\n      var from = $state.$current, fromParams = $state.params, fromPath = from.path;\n      var evt, toState = findState(to, options.relative);\n\n      if (!isDefined(toState)) {\n        // Broadcast not found event and abort the transition if prevented\n        var redirect = { to: to, toParams: toParams, options: options };\n\n        /**\n         * @ngdoc event\n         * @name ui.router.state.$state#$stateNotFound\n         * @eventOf ui.router.state.$state\n         * @eventType broadcast on root scope\n         * @description\n         * Fired when a requested state **cannot be found** using the provided state name during transition.\n         * The event is broadcast allowing any handlers a single chance to deal with the error (usually by\n         * lazy-loading the unfound state). A special `unfoundState` object is passed to the listener handler,\n         * you can see its three properties in the example. You can use `event.preventDefault()` to abort the\n         * transition and the promise returned from `go` will be rejected with a `'transition aborted'` value.\n         *\n         * @param {Object} event Event object.\n         * @param {Object} unfoundState Unfound State information. Contains: `to, toParams, options` properties.\n         * @param {State} fromState Current state object.\n         * @param {Object} fromParams Current state params.\n         *\n         * @example\n         *\n         * <pre>\n         * // somewhere, assume lazy.state has not been defined\n         * $state.go(\"lazy.state\", {a:1, b:2}, {inherit:false});\n         *\n         * // somewhere else\n         * $scope.$on('$stateNotFound',\n         * function(event, unfoundState, fromState, fromParams){\n         *     console.log(unfoundState.to); // \"lazy.state\"\n         *     console.log(unfoundState.toParams); // {a:1, b:2}\n         *     console.log(unfoundState.options); // {inherit:false} + default options\n         * })\n         * </pre>\n         */\n        evt = $rootScope.$broadcast('$stateNotFound', redirect, from.self, fromParams);\n        if (evt.defaultPrevented) {\n          syncUrl();\n          return TransitionAborted;\n        }\n\n        // Allow the handler to return a promise to defer state lookup retry\n        if (evt.retry) {\n          if (options.$retry) {\n            syncUrl();\n            return TransitionFailed;\n          }\n          var retryTransition = $state.transition = $q.when(evt.retry);\n          retryTransition.then(function() {\n            if (retryTransition !== $state.transition) return TransitionSuperseded;\n            redirect.options.$retry = true;\n            return $state.transitionTo(redirect.to, redirect.toParams, redirect.options);\n          }, function() {\n            return TransitionAborted;\n          });\n          syncUrl();\n          return retryTransition;\n        }\n\n        // Always retry once if the $stateNotFound was not prevented\n        // (handles either redirect changed or state lazy-definition)\n        to = redirect.to;\n        toParams = redirect.toParams;\n        options = redirect.options;\n        toState = findState(to, options.relative);\n        if (!isDefined(toState)) {\n          if (options.relative) throw new Error(\"Could not resolve '\" + to + \"' from state '\" + options.relative + \"'\");\n          throw new Error(\"No such state '\" + to + \"'\");\n        }\n      }\n      if (toState[abstractKey]) throw new Error(\"Cannot transition to abstract state '\" + to + \"'\");\n      if (options.inherit) toParams = inheritParams($stateParams, toParams || {}, $state.$current, toState);\n      to = toState;\n\n      var toPath = to.path;\n\n      // Starting from the root of the path, keep all levels that haven't changed\n      var keep, state, locals = root.locals, toLocals = [];\n      for (keep = 0, state = toPath[keep];\n           state && state === fromPath[keep] && equalForKeys(toParams, fromParams, state.ownParams) && !options.reload;\n           keep++, state = toPath[keep]) {\n        locals = toLocals[keep] = state.locals;\n      }\n\n      // If we're going to the same state and all locals are kept, we've got nothing to do.\n      // But clear 'transition', as we still want to cancel any other pending transitions.\n      // TODO: We may not want to bump 'transition' if we're called from a location change that we've initiated ourselves,\n      // because we might accidentally abort a legitimate transition initiated from code?\n      if (shouldTriggerReload(to, from, locals, options) ) {\n        if ( to.self.reloadOnSearch !== false )\n          syncUrl();\n        $state.transition = null;\n        return $q.when($state.current);\n      }\n\n      // Normalize/filter parameters before we pass them to event handlers etc.\n      toParams = normalize(to.params, toParams || {});\n\n      // Broadcast start event and cancel the transition if requested\n      if (options.notify) {\n        /**\n         * @ngdoc event\n         * @name ui.router.state.$state#$stateChangeStart\n         * @eventOf ui.router.state.$state\n         * @eventType broadcast on root scope\n         * @description\n         * Fired when the state transition **begins**. You can use `event.preventDefault()`\n         * to prevent the transition from happening and then the transition promise will be\n         * rejected with a `'transition prevented'` value.\n         *\n         * @param {Object} event Event object.\n         * @param {State} toState The state being transitioned to.\n         * @param {Object} toParams The params supplied to the `toState`.\n         * @param {State} fromState The current state, pre-transition.\n         * @param {Object} fromParams The params supplied to the `fromState`.\n         *\n         * @example\n         *\n         * <pre>\n         * $rootScope.$on('$stateChangeStart',\n         * function(event, toState, toParams, fromState, fromParams){\n         *     event.preventDefault();\n         *     // transitionTo() promise will be rejected with\n         *     // a 'transition prevented' error\n         * })\n         * </pre>\n         */\n        evt = $rootScope.$broadcast('$stateChangeStart', to.self, toParams, from.self, fromParams);\n        if (evt.defaultPrevented) {\n          syncUrl();\n          return TransitionPrevented;\n        }\n      }\n\n      // Resolve locals for the remaining states, but don't update any global state just\n      // yet -- if anything fails to resolve the current state needs to remain untouched.\n      // We also set up an inheritance chain for the locals here. This allows the view directive\n      // to quickly look up the correct definition for each view in the current state. Even\n      // though we create the locals object itself outside resolveState(), it is initially\n      // empty and gets filled asynchronously. We need to keep track of the promise for the\n      // (fully resolved) current locals, and pass this down the chain.\n      var resolved = $q.when(locals);\n      for (var l=keep; l<toPath.length; l++, state=toPath[l]) {\n        locals = toLocals[l] = inherit(locals);\n        resolved = resolveState(state, toParams, state===to, resolved, locals);\n      }\n\n      // Once everything is resolved, we are ready to perform the actual transition\n      // and return a promise for the new state. We also keep track of what the\n      // current promise is, so that we can detect overlapping transitions and\n      // keep only the outcome of the last transition.\n      var transition = $state.transition = resolved.then(function () {\n        var l, entering, exiting;\n\n        if ($state.transition !== transition) return TransitionSuperseded;\n\n        // Exit 'from' states not kept\n        for (l=fromPath.length-1; l>=keep; l--) {\n          exiting = fromPath[l];\n          if (exiting.self.onExit) {\n            $injector.invoke(exiting.self.onExit, exiting.self, exiting.locals.globals);\n          }\n          exiting.locals = null;\n        }\n\n        // Enter 'to' states not kept\n        for (l=keep; l<toPath.length; l++) {\n          entering = toPath[l];\n          entering.locals = toLocals[l];\n          if (entering.self.onEnter) {\n            $injector.invoke(entering.self.onEnter, entering.self, entering.locals.globals);\n          }\n        }\n\n        // Run it again, to catch any transitions in callbacks\n        if ($state.transition !== transition) return TransitionSuperseded;\n\n        // Update globals in $state\n        $state.$current = to;\n        $state.current = to.self;\n        $state.params = toParams;\n        copy($state.params, $stateParams);\n        $state.transition = null;\n\n        // Update $location\n        var toNav = to.navigable;\n        if (options.location && toNav) {\n          $location.url(toNav.url.format(toNav.locals.globals.$stateParams));\n\n          if (options.location === 'replace') {\n            $location.replace();\n          }\n        }\n\n        if (options.notify) {\n        /**\n         * @ngdoc event\n         * @name ui.router.state.$state#$stateChangeSuccess\n         * @eventOf ui.router.state.$state\n         * @eventType broadcast on root scope\n         * @description\n         * Fired once the state transition is **complete**.\n         *\n         * @param {Object} event Event object.\n         * @param {State} toState The state being transitioned to.\n         * @param {Object} toParams The params supplied to the `toState`.\n         * @param {State} fromState The current state, pre-transition.\n         * @param {Object} fromParams The params supplied to the `fromState`.\n         */\n          $rootScope.$broadcast('$stateChangeSuccess', to.self, toParams, from.self, fromParams);\n        }\n        currentLocation = $location.url();\n\n        return $state.current;\n      }, function (error) {\n        if ($state.transition !== transition) return TransitionSuperseded;\n\n        $state.transition = null;\n        /**\n         * @ngdoc event\n         * @name ui.router.state.$state#$stateChangeError\n         * @eventOf ui.router.state.$state\n         * @eventType broadcast on root scope\n         * @description\n         * Fired when an **error occurs** during transition. It's important to note that if you\n         * have any errors in your resolve functions (javascript errors, non-existent services, etc)\n         * they will not throw traditionally. You must listen for this $stateChangeError event to\n         * catch **ALL** errors.\n         *\n         * @param {Object} event Event object.\n         * @param {State} toState The state being transitioned to.\n         * @param {Object} toParams The params supplied to the `toState`.\n         * @param {State} fromState The current state, pre-transition.\n         * @param {Object} fromParams The params supplied to the `fromState`.\n         * @param {Error} error The resolve error object.\n         */\n        $rootScope.$broadcast('$stateChangeError', to.self, toParams, from.self, fromParams, error);\n        syncUrl();\n\n        return $q.reject(error);\n      });\n\n      return transition;\n    };\n\n    /**\n     * @ngdoc function\n     * @name ui.router.state.$state#is\n     * @methodOf ui.router.state.$state\n     *\n     * @description\n     * Similar to {@link ui.router.state.$state#methods_includes $state.includes},\n     * but only checks for the full state name. If params is supplied then it will be \n     * tested for strict equality against the current active params object, so all params \n     * must match with none missing and no extras.\n     *\n     * @example\n     * <pre>\n     * $state.is('contact.details.item'); // returns true\n     * $state.is(contactDetailItemStateObject); // returns true\n     *\n     * // everything else would return false\n     * </pre>\n     *\n     * @param {string|object} stateName The state name or state object you'd like to check.\n     * @param {object=} params A param object, e.g. `{sectionId: section.id}`, that you'd like \n     * to test against the current active state.\n     * @returns {boolean} Returns true if it is the state.\n     */\n    $state.is = function is(stateOrName, params) {\n      var state = findState(stateOrName);\n\n      if (!isDefined(state)) {\n        return undefined;\n      }\n\n      if ($state.$current !== state) {\n        return false;\n      }\n\n      return isDefined(params) && params !== null ? angular.equals($stateParams, params) : true;\n    };\n\n    /**\n     * @ngdoc function\n     * @name ui.router.state.$state#includes\n     * @methodOf ui.router.state.$state\n     *\n     * @description\n     * A method to determine if the current active state is equal to or is the child of the \n     * state stateName. If any params are passed then they will be tested for a match as well.\n     * Not all the parameters need to be passed, just the ones you'd like to test for equality.\n     *\n     * @example\n     * <pre>\n     * $state.$current.name = 'contacts.details.item';\n     *\n     * $state.includes(\"contacts\"); // returns true\n     * $state.includes(\"contacts.details\"); // returns true\n     * $state.includes(\"contacts.details.item\"); // returns true\n     * $state.includes(\"contacts.list\"); // returns false\n     * $state.includes(\"about\"); // returns false\n     * </pre>\n     *\n     * @description\n     * Basic globing patterns will also work.\n     *\n     * @example\n     * <pre>\n     * $state.$current.name = 'contacts.details.item.url';\n     *\n     * $state.includes(\"*.details.*.*\"); // returns true\n     * $state.includes(\"*.details.**\"); // returns true\n     * $state.includes(\"**.item.**\"); // returns true\n     * $state.includes(\"*.details.item.url\"); // returns true\n     * $state.includes(\"*.details.*.url\"); // returns true\n     * $state.includes(\"*.details.*\"); // returns false\n     * $state.includes(\"item.**\"); // returns false\n     * </pre>\n     *\n     * @param {string} stateOrName A partial name to be searched for within the current state name.\n     * @param {object} params A param object, e.g. `{sectionId: section.id}`, \n     * that you'd like to test against the current active state.\n     * @returns {boolean} Returns true if it does include the state\n     */\n\n    $state.includes = function includes(stateOrName, params) {\n      if (isString(stateOrName) && isGlob(stateOrName)) {\n        if (doesStateMatchGlob(stateOrName)) {\n          stateOrName = $state.$current.name;\n        } else {\n          return false;\n        }\n      }\n\n      var state = findState(stateOrName);\n      if (!isDefined(state)) {\n        return undefined;\n      }\n\n      if (!isDefined($state.$current.includes[state.name])) {\n        return false;\n      }\n\n      var validParams = true;\n      angular.forEach(params, function(value, key) {\n        if (!isDefined($stateParams[key]) || $stateParams[key] !== value) {\n          validParams = false;\n        }\n      });\n      return validParams;\n    };\n\n\n    /**\n     * @ngdoc function\n     * @name ui.router.state.$state#href\n     * @methodOf ui.router.state.$state\n     *\n     * @description\n     * A url generation method that returns the compiled url for the given state populated with the given params.\n     *\n     * @example\n     * <pre>\n     * expect($state.href(\"about.person\", { person: \"bob\" })).toEqual(\"/about/bob\");\n     * </pre>\n     *\n     * @param {string|object} stateOrName The state name or state object you'd like to generate a url from.\n     * @param {object=} params An object of parameter values to fill the state's required parameters.\n     * @param {object=} options Options object. The options are:\n     *\n     * - **`lossy`** - {boolean=true} -  If true, and if there is no url associated with the state provided in the\n     *    first parameter, then the constructed href url will be built from the first navigable ancestor (aka\n     *    ancestor with a valid url).\n     * - **`inherit`** - {boolean=false}, If `true` will inherit url parameters from current url.\n     * - **`relative`** - {object=$state.$current}, When transitioning with relative path (e.g '^'), \n     *    defines which state to be relative from.\n     * - **`absolute`** - {boolean=false},  If true will generate an absolute url, e.g. \"http://www.example.com/fullurl\".\n     * \n     * @returns {string} compiled state url\n     */\n    $state.href = function href(stateOrName, params, options) {\n      options = extend({ lossy: true, inherit: false, absolute: false, relative: $state.$current }, options || {});\n      var state = findState(stateOrName, options.relative);\n      if (!isDefined(state)) return null;\n\n      params = inheritParams($stateParams, params || {}, $state.$current, state);\n      var nav = (state && options.lossy) ? state.navigable : state;\n      var url = (nav && nav.url) ? nav.url.format(normalize(state.params, params || {})) : null;\n      if (!$locationProvider.html5Mode() && url) {\n        url = \"#\" + $locationProvider.hashPrefix() + url;\n      }\n\n      if (baseHref !== '/') {\n        if ($locationProvider.html5Mode()) {\n          url = baseHref.slice(0, -1) + url;\n        } else if (options.absolute){\n          url = baseHref.slice(1) + url;\n        }\n      }\n\n      if (options.absolute && url) {\n        url = $location.protocol() + '://' + \n              $location.host() + \n              ($location.port() == 80 || $location.port() == 443 ? '' : ':' + $location.port()) + \n              (!$locationProvider.html5Mode() && url ? '/' : '') + \n              url;\n      }\n      return url;\n    };\n\n    /**\n     * @ngdoc function\n     * @name ui.router.state.$state#get\n     * @methodOf ui.router.state.$state\n     *\n     * @description\n     * Returns the state configuration object for any specific state or all states.\n     *\n     * @param {string|object=} stateOrName If provided, will only get the config for\n     * the requested state. If not provided, returns an array of ALL state configs.\n     * @returns {object|array} State configuration object or array of all objects.\n     */\n    $state.get = function (stateOrName, context) {\n      if (!isDefined(stateOrName)) {\n        var list = [];\n        forEach(states, function(state) { list.push(state.self); });\n        return list;\n      }\n      var state = findState(stateOrName, context);\n      return (state && state.self) ? state.self : null;\n    };\n\n    function resolveState(state, params, paramsAreFiltered, inherited, dst) {\n      // Make a restricted $stateParams with only the parameters that apply to this state if\n      // necessary. In addition to being available to the controller and onEnter/onExit callbacks,\n      // we also need $stateParams to be available for any $injector calls we make during the\n      // dependency resolution process.\n      var $stateParams = (paramsAreFiltered) ? params : filterByKeys(state.params, params);\n      var locals = { $stateParams: $stateParams };\n\n      // Resolve 'global' dependencies for the state, i.e. those not specific to a view.\n      // We're also including $stateParams in this; that way the parameters are restricted\n      // to the set that should be visible to the state, and are independent of when we update\n      // the global $state and $stateParams values.\n      dst.resolve = $resolve.resolve(state.resolve, locals, dst.resolve, state);\n      var promises = [ dst.resolve.then(function (globals) {\n        dst.globals = globals;\n      }) ];\n      if (inherited) promises.push(inherited);\n\n      // Resolve template and dependencies for all views.\n      forEach(state.views, function (view, name) {\n        var injectables = (view.resolve && view.resolve !== state.resolve ? view.resolve : {});\n        injectables.$template = [ function () {\n          return $view.load(name, { view: view, locals: locals, params: $stateParams, notify: false }) || '';\n        }];\n\n        promises.push($resolve.resolve(injectables, locals, dst.resolve, state).then(function (result) {\n          // References to the controller (only instantiated at link time)\n          if (isFunction(view.controllerProvider) || isArray(view.controllerProvider)) {\n            var injectLocals = angular.extend({}, injectables, locals);\n            result.$$controller = $injector.invoke(view.controllerProvider, null, injectLocals);\n          } else {\n            result.$$controller = view.controller;\n          }\n          // Provide access to the state itself for internal use\n          result.$$state = state;\n          result.$$controllerAs = view.controllerAs;\n          dst[name] = result;\n        }));\n      });\n\n      // Wait for all the promises and then return the activation object\n      return $q.all(promises).then(function (values) {\n        return dst;\n      });\n    }\n\n    return $state;\n  }\n\n  function shouldTriggerReload(to, from, locals, options) {\n    if ( to === from && ((locals === from.locals && !options.reload) || (to.self.reloadOnSearch === false)) ) {\n      return true;\n    }\n  }\n}\n\nangular.module('ui.router.state')\n  .value('$stateParams', {})\n  .provider('$state', $StateProvider);\n\n\n$ViewProvider.$inject = [];\nfunction $ViewProvider() {\n\n  this.$get = $get;\n  /**\n   * @ngdoc object\n   * @name ui.router.state.$view\n   *\n   * @requires ui.router.util.$templateFactory\n   * @requires $rootScope\n   *\n   * @description\n   *\n   */\n  $get.$inject = ['$rootScope', '$templateFactory'];\n  function $get(   $rootScope,   $templateFactory) {\n    return {\n      // $view.load('full.viewName', { template: ..., controller: ..., resolve: ..., async: false, params: ... })\n      /**\n       * @ngdoc function\n       * @name ui.router.state.$view#load\n       * @methodOf ui.router.state.$view\n       *\n       * @description\n       *\n       * @param {string} name name\n       * @param {object} options option object.\n       */\n      load: function load(name, options) {\n        var result, defaults = {\n          template: null, controller: null, view: null, locals: null, notify: true, async: true, params: {}\n        };\n        options = extend(defaults, options);\n\n        if (options.view) {\n          result = $templateFactory.fromConfig(options.view, options.params, options.locals);\n        }\n        if (result && options.notify) {\n        /**\n         * @ngdoc event\n         * @name ui.router.state.$state#$viewContentLoading\n         * @eventOf ui.router.state.$view\n         * @eventType broadcast on root scope\n         * @description\n         *\n         * Fired once the view **begins loading**, *before* the DOM is rendered.\n         *\n         * @param {Object} event Event object.\n         * @param {Object} viewConfig The view config properties (template, controller, etc).\n         *\n         * @example\n         *\n         * <pre>\n         * $scope.$on('$viewContentLoading',\n         * function(event, viewConfig){\n         *     // Access to all the view config properties.\n         *     // and one special property 'targetView'\n         *     // viewConfig.targetView\n         * });\n         * </pre>\n         */\n          $rootScope.$broadcast('$viewContentLoading', options);\n        }\n        return result;\n      }\n    };\n  }\n}\n\nangular.module('ui.router.state').provider('$view', $ViewProvider);\n\n/**\n * @ngdoc object\n * @name ui.router.state.$uiViewScrollProvider\n *\n * @description\n * Provider that returns the {@link ui.router.state.$uiViewScroll} service function.\n */\nfunction $ViewScrollProvider() {\n\n  var useAnchorScroll = false;\n\n  /**\n   * @ngdoc function\n   * @name ui.router.state.$uiViewScrollProvider#useAnchorScroll\n   * @methodOf ui.router.state.$uiViewScrollProvider\n   *\n   * @description\n   * Reverts back to using the core [`$anchorScroll`](http://docs.angularjs.org/api/ng.$anchorScroll) service for\n   * scrolling based on the url anchor.\n   */\n  this.useAnchorScroll = function () {\n    useAnchorScroll = true;\n  };\n\n  /**\n   * @ngdoc object\n   * @name ui.router.state.$uiViewScroll\n   *\n   * @requires $anchorScroll\n   * @requires $timeout\n   *\n   * @description\n   * When called with a jqLite element, it scrolls the element into view (after a\n   * `$timeout` so the DOM has time to refresh).\n   *\n   * If you prefer to rely on `$anchorScroll` to scroll the view to the anchor,\n   * this can be enabled by calling {@link ui.router.state.$uiViewScrollProvider#methods_useAnchorScroll `$uiViewScrollProvider.useAnchorScroll()`}.\n   */\n  this.$get = ['$anchorScroll', '$timeout', function ($anchorScroll, $timeout) {\n    if (useAnchorScroll) {\n      return $anchorScroll;\n    }\n\n    return function ($element) {\n      $timeout(function () {\n        $element[0].scrollIntoView();\n      }, 0, false);\n    };\n  }];\n}\n\nangular.module('ui.router.state').provider('$uiViewScroll', $ViewScrollProvider);\n\n/**\n * @ngdoc directive\n * @name ui.router.state.directive:ui-view\n *\n * @requires ui.router.state.$state\n * @requires $compile\n * @requires $controller\n * @requires $injector\n * @requires ui.router.state.$uiViewScroll\n * @requires $document\n *\n * @restrict ECA\n *\n * @description\n * The ui-view directive tells $state where to place your templates.\n *\n * @param {string=} ui-view A view name. The name should be unique amongst the other views in the\n * same state. You can have views of the same name that live in different states.\n *\n * @param {string=} autoscroll It allows you to set the scroll behavior of the browser window\n * when a view is populated. By default, $anchorScroll is overridden by ui-router's custom scroll\n * service, {@link ui.router.state.$uiViewScroll}. This custom service let's you\n * scroll ui-view elements into view when they are populated during a state activation.\n *\n * *Note: To revert back to old [`$anchorScroll`](http://docs.angularjs.org/api/ng.$anchorScroll)\n * functionality, call `$uiViewScrollProvider.useAnchorScroll()`.*\n *\n * @param {string=} onload Expression to evaluate whenever the view updates.\n * \n * @example\n * A view can be unnamed or named. \n * <pre>\n * <!-- Unnamed -->\n * <div ui-view></div> \n * \n * <!-- Named -->\n * <div ui-view=\"viewName\"></div>\n * </pre>\n *\n * You can only have one unnamed view within any template (or root html). If you are only using a \n * single view and it is unnamed then you can populate it like so:\n * <pre>\n * <div ui-view></div> \n * $stateProvider.state(\"home\", {\n *   template: \"<h1>HELLO!</h1>\"\n * })\n * </pre>\n * \n * The above is a convenient shortcut equivalent to specifying your view explicitly with the {@link ui.router.state.$stateProvider#views `views`}\n * config property, by name, in this case an empty name:\n * <pre>\n * $stateProvider.state(\"home\", {\n *   views: {\n *     \"\": {\n *       template: \"<h1>HELLO!</h1>\"\n *     }\n *   }    \n * })\n * </pre>\n * \n * But typically you'll only use the views property if you name your view or have more than one view \n * in the same template. There's not really a compelling reason to name a view if its the only one, \n * but you could if you wanted, like so:\n * <pre>\n * <div ui-view=\"main\"></div>\n * </pre> \n * <pre>\n * $stateProvider.state(\"home\", {\n *   views: {\n *     \"main\": {\n *       template: \"<h1>HELLO!</h1>\"\n *     }\n *   }    \n * })\n * </pre>\n * \n * Really though, you'll use views to set up multiple views:\n * <pre>\n * <div ui-view></div>\n * <div ui-view=\"chart\"></div> \n * <div ui-view=\"data\"></div> \n * </pre>\n * \n * <pre>\n * $stateProvider.state(\"home\", {\n *   views: {\n *     \"\": {\n *       template: \"<h1>HELLO!</h1>\"\n *     },\n *     \"chart\": {\n *       template: \"<chart_thing/>\"\n *     },\n *     \"data\": {\n *       template: \"<data_thing/>\"\n *     }\n *   }    \n * })\n * </pre>\n *\n * Examples for `autoscroll`:\n *\n * <pre>\n * <!-- If autoscroll present with no expression,\n *      then scroll ui-view into view -->\n * <ui-view autoscroll/>\n *\n * <!-- If autoscroll present with valid expression,\n *      then scroll ui-view into view if expression evaluates to true -->\n * <ui-view autoscroll='true'/>\n * <ui-view autoscroll='false'/>\n * <ui-view autoscroll='scopeVariable'/>\n * </pre>\n */\n$ViewDirective.$inject = ['$state', '$injector', '$uiViewScroll'];\nfunction $ViewDirective(   $state,   $injector,   $uiViewScroll) {\n\n  function getService() {\n    return ($injector.has) ? function(service) {\n      return $injector.has(service) ? $injector.get(service) : null;\n    } : function(service) {\n      try {\n        return $injector.get(service);\n      } catch (e) {\n        return null;\n      }\n    };\n  }\n\n  var service = getService(),\n      $animator = service('$animator'),\n      $animate = service('$animate');\n\n  // Returns a set of DOM manipulation functions based on which Angular version\n  // it should use\n  function getRenderer(attrs, scope) {\n    var statics = function() {\n      return {\n        enter: function (element, target, cb) { target.after(element); cb(); },\n        leave: function (element, cb) { element.remove(); cb(); }\n      };\n    };\n\n    if ($animate) {\n      return {\n        enter: function(element, target, cb) { $animate.enter(element, null, target, cb); },\n        leave: function(element, cb) { $animate.leave(element, cb); }\n      };\n    }\n\n    if ($animator) {\n      var animate = $animator && $animator(scope, attrs);\n\n      return {\n        enter: function(element, target, cb) {animate.enter(element, null, target); cb(); },\n        leave: function(element, cb) { animate.leave(element); cb(); }\n      };\n    }\n\n    return statics();\n  }\n\n  var directive = {\n    restrict: 'ECA',\n    terminal: true,\n    priority: 400,\n    transclude: 'element',\n    compile: function (tElement, tAttrs, $transclude) {\n      return function (scope, $element, attrs) {\n        var previousEl, currentEl, currentScope, latestLocals,\n            onloadExp     = attrs.onload || '',\n            autoScrollExp = attrs.autoscroll,\n            renderer      = getRenderer(attrs, scope);\n\n        scope.$on('$stateChangeSuccess', function() {\n          updateView(false);\n        });\n        scope.$on('$viewContentLoading', function() {\n          updateView(false);\n        });\n\n        updateView(true);\n\n        function cleanupLastView() {\n          if (previousEl) {\n            previousEl.remove();\n            previousEl = null;\n          }\n\n          if (currentScope) {\n            currentScope.$destroy();\n            currentScope = null;\n          }\n\n          if (currentEl) {\n            renderer.leave(currentEl, function() {\n              previousEl = null;\n            });\n\n            previousEl = currentEl;\n            currentEl = null;\n          }\n        }\n\n        function updateView(firstTime) {\n          var newScope        = scope.$new(),\n              name            = currentEl && currentEl.data('$uiViewName'),\n              previousLocals  = name && $state.$current && $state.$current.locals[name];\n\n          if (!firstTime && previousLocals === latestLocals) return; // nothing to do\n\n          var clone = $transclude(newScope, function(clone) {\n            renderer.enter(clone, $element, function onUiViewEnter() {\n              if (angular.isDefined(autoScrollExp) && !autoScrollExp || scope.$eval(autoScrollExp)) {\n                $uiViewScroll(clone);\n              }\n            });\n            cleanupLastView();\n          });\n\n          latestLocals = $state.$current.locals[clone.data('$uiViewName')];\n\n          currentEl = clone;\n          currentScope = newScope;\n          /**\n           * @ngdoc event\n           * @name ui.router.state.directive:ui-view#$viewContentLoaded\n           * @eventOf ui.router.state.directive:ui-view\n           * @eventType emits on ui-view directive scope\n           * @description           *\n           * Fired once the view is **loaded**, *after* the DOM is rendered.\n           *\n           * @param {Object} event Event object.\n           */\n          currentScope.$emit('$viewContentLoaded');\n          currentScope.$eval(onloadExp);\n        }\n      };\n    }\n  };\n\n  return directive;\n}\n\n$ViewDirectiveFill.$inject = ['$compile', '$controller', '$state'];\nfunction $ViewDirectiveFill ($compile, $controller, $state) {\n  return {\n    restrict: 'ECA',\n    priority: -400,\n    compile: function (tElement) {\n      var initial = tElement.html();\n      return function (scope, $element, attrs) {\n        var name      = attrs.uiView || attrs.name || '',\n            inherited = $element.inheritedData('$uiView');\n\n        if (name.indexOf('@') < 0) {\n          name = name + '@' + (inherited ? inherited.state.name : '');\n        }\n\n        $element.data('$uiViewName', name);\n\n        var current = $state.$current,\n            locals  = current && current.locals[name];\n\n        if (! locals) {\n          return;\n        }\n\n        $element.data('$uiView', { name: name, state: locals.$$state });\n        $element.html(locals.$template ? locals.$template : initial);\n\n        var link = $compile($element.contents());\n\n        if (locals.$$controller) {\n          locals.$scope = scope;\n          var controller = $controller(locals.$$controller, locals);\n          if (locals.$$controllerAs) {\n            scope[locals.$$controllerAs] = controller;\n          }\n          $element.data('$ngControllerController', controller);\n          $element.children().data('$ngControllerController', controller);\n        }\n\n        link(scope);\n      };\n    }\n  };\n}\n\nangular.module('ui.router.state').directive('uiView', $ViewDirective);\nangular.module('ui.router.state').directive('uiView', $ViewDirectiveFill);\n\nfunction parseStateRef(ref) {\n  var parsed = ref.replace(/\\n/g, \" \").match(/^([^(]+?)\\s*(\\((.*)\\))?$/);\n  if (!parsed || parsed.length !== 4) throw new Error(\"Invalid state ref '\" + ref + \"'\");\n  return { state: parsed[1], paramExpr: parsed[3] || null };\n}\n\nfunction stateContext(el) {\n  var stateData = el.parent().inheritedData('$uiView');\n\n  if (stateData && stateData.state && stateData.state.name) {\n    return stateData.state;\n  }\n}\n\n/**\n * @ngdoc directive\n * @name ui.router.state.directive:ui-sref\n *\n * @requires ui.router.state.$state\n * @requires $timeout\n *\n * @restrict A\n *\n * @description\n * A directive that binds a link (`<a>` tag) to a state. If the state has an associated \n * URL, the directive will automatically generate & update the `href` attribute via \n * the {@link ui.router.state.$state#methods_href $state.href()} method. Clicking \n * the link will trigger a state transition with optional parameters. \n *\n * Also middle-clicking, right-clicking, and ctrl-clicking on the link will be \n * handled natively by the browser.\n *\n * You can also use relative state paths within ui-sref, just like the relative \n * paths passed to `$state.go()`. You just need to be aware that the path is relative\n * to the state that the link lives in, in other words the state that loaded the \n * template containing the link.\n *\n * You can specify options to pass to {@link ui.router.state.$state#go $state.go()}\n * using the `ui-sref-opts` attribute. Options are restricted to `location`, `inherit`,\n * and `reload`.\n *\n * @example\n * Here's an example of how you'd use ui-sref and how it would compile. If you have the \n * following template:\n * <pre>\n * <a ui-sref=\"home\">Home</a> | <a ui-sref=\"about\">About</a>\n * \n * <ul>\n *     <li ng-repeat=\"contact in contacts\">\n *         <a ui-sref=\"contacts.detail({ id: contact.id })\">{{ contact.name }}</a>\n *     </li>\n * </ul>\n * </pre>\n * \n * Then the compiled html would be (assuming Html5Mode is off):\n * <pre>\n * <a href=\"#/home\" ui-sref=\"home\">Home</a> | <a href=\"#/about\" ui-sref=\"about\">About</a>\n * \n * <ul>\n *     <li ng-repeat=\"contact in contacts\">\n *         <a href=\"#/contacts/1\" ui-sref=\"contacts.detail({ id: contact.id })\">Joe</a>\n *     </li>\n *     <li ng-repeat=\"contact in contacts\">\n *         <a href=\"#/contacts/2\" ui-sref=\"contacts.detail({ id: contact.id })\">Alice</a>\n *     </li>\n *     <li ng-repeat=\"contact in contacts\">\n *         <a href=\"#/contacts/3\" ui-sref=\"contacts.detail({ id: contact.id })\">Bob</a>\n *     </li>\n * </ul>\n *\n * <a ui-sref=\"home\" ui-sref-opts=\"{reload: true}\">Home</a>\n * </pre>\n *\n * @param {string} ui-sref 'stateName' can be any valid absolute or relative state\n * @param {Object} ui-sref-opts options to pass to {@link ui.router.state.$state#go $state.go()}\n */\n$StateRefDirective.$inject = ['$state', '$timeout'];\nfunction $StateRefDirective($state, $timeout) {\n  var allowedOptions = ['location', 'inherit', 'reload'];\n\n  return {\n    restrict: 'A',\n    require: '?^uiSrefActive',\n    link: function(scope, element, attrs, uiSrefActive) {\n      var ref = parseStateRef(attrs.uiSref);\n      var params = null, url = null, base = stateContext(element) || $state.$current;\n      var isForm = element[0].nodeName === \"FORM\";\n      var attr = isForm ? \"action\" : \"href\", nav = true;\n\n      var options = {\n        relative: base\n      };\n      var optionsOverride = scope.$eval(attrs.uiSrefOpts) || {};\n      angular.forEach(allowedOptions, function(option) {\n        if (option in optionsOverride) {\n          options[option] = optionsOverride[option];\n        }\n      });\n\n      var update = function(newVal) {\n        if (newVal) params = newVal;\n        if (!nav) return;\n\n        var newHref = $state.href(ref.state, params, options);\n\n        if (uiSrefActive) {\n          uiSrefActive.$$setStateInfo(ref.state, params);\n        }\n        if (!newHref) {\n          nav = false;\n          return false;\n        }\n        element[0][attr] = newHref;\n      };\n\n      if (ref.paramExpr) {\n        scope.$watch(ref.paramExpr, function(newVal, oldVal) {\n          if (newVal !== params) update(newVal);\n        }, true);\n        params = scope.$eval(ref.paramExpr);\n      }\n      update();\n\n      if (isForm) return;\n\n      element.bind(\"click\", function(e) {\n        var button = e.which || e.button;\n        if ( !(button > 1 || e.ctrlKey || e.metaKey || e.shiftKey || element.attr('target')) ) {\n          // HACK: This is to allow ng-clicks to be processed before the transition is initiated:\n          $timeout(function() {\n            $state.go(ref.state, params, options);\n          });\n          e.preventDefault();\n        }\n      });\n    }\n  };\n}\n\n/**\n * @ngdoc directive\n * @name ui.router.state.directive:ui-sref-active\n *\n * @requires ui.router.state.$state\n * @requires ui.router.state.$stateParams\n * @requires $interpolate\n *\n * @restrict A\n *\n * @description\n * A directive working alongside ui-sref to add classes to an element when the \n * related ui-sref directive's state is active, and removing them when it is inactive.\n * The primary use-case is to simplify the special appearance of navigation menus \n * relying on `ui-sref`, by having the \"active\" state's menu button appear different,\n * distinguishing it from the inactive menu items.\n *\n * @example\n * Given the following template:\n * <pre>\n * <ul>\n *   <li ui-sref-active=\"active\" class=\"item\">\n *     <a href ui-sref=\"app.user({user: 'bilbobaggins'})\">@bilbobaggins</a>\n *   </li>\n * </ul>\n * </pre>\n * \n * When the app state is \"app.user\", and contains the state parameter \"user\" with value \"bilbobaggins\", \n * the resulting HTML will appear as (note the 'active' class):\n * <pre>\n * <ul>\n *   <li ui-sref-active=\"active\" class=\"item active\">\n *     <a ui-sref=\"app.user({user: 'bilbobaggins'})\" href=\"/users/bilbobaggins\">@bilbobaggins</a>\n *   </li>\n * </ul>\n * </pre>\n * \n * The class name is interpolated **once** during the directives link time (any further changes to the \n * interpolated value are ignored). \n * \n * Multiple classes may be specified in a space-separated format:\n * <pre>\n * <ul>\n *   <li ui-sref-active='class1 class2 class3'>\n *     <a ui-sref=\"app.user\">link</a>\n *   </li>\n * </ul>\n * </pre>\n */\n$StateActiveDirective.$inject = ['$state', '$stateParams', '$interpolate'];\nfunction $StateActiveDirective($state, $stateParams, $interpolate) {\n  return {\n    restrict: \"A\",\n    controller: ['$scope', '$element', '$attrs', function($scope, $element, $attrs) {\n      var state, params, activeClass;\n\n      // There probably isn't much point in $observing this\n      activeClass = $interpolate($attrs.uiSrefActive || '', false)($scope);\n\n      // Allow uiSref to communicate with uiSrefActive\n      this.$$setStateInfo = function(newState, newParams) {\n        state = $state.get(newState, stateContext($element));\n        params = newParams;\n        update();\n      };\n\n      $scope.$on('$stateChangeSuccess', update);\n\n      // Update route state\n      function update() {\n        if ($state.$current.self === state && matchesParams()) {\n          $element.addClass(activeClass);\n        } else {\n          $element.removeClass(activeClass);\n        }\n      }\n\n      function matchesParams() {\n        return !params || equalForKeys(params, $stateParams);\n      }\n    }]\n  };\n}\n\nangular.module('ui.router.state')\n  .directive('uiSref', $StateRefDirective)\n  .directive('uiSrefActive', $StateActiveDirective);\n\n/**\n * @ngdoc filter\n * @name ui.router.state.filter:isState\n *\n * @requires ui.router.state.$state\n *\n * @description\n * Translates to {@link ui.router.state.$state#methods_is $state.is(\"stateName\")}.\n */\n$IsStateFilter.$inject = ['$state'];\nfunction $IsStateFilter($state) {\n  return function(state) {\n    return $state.is(state);\n  };\n}\n\n/**\n * @ngdoc filter\n * @name ui.router.state.filter:includedByState\n *\n * @requires ui.router.state.$state\n *\n * @description\n * Translates to {@link ui.router.state.$state#methods_includes $state.includes('fullOrPartialStateName')}.\n */\n$IncludedByStateFilter.$inject = ['$state'];\nfunction $IncludedByStateFilter($state) {\n  return function(state) {\n    return $state.includes(state);\n  };\n}\n\nangular.module('ui.router.state')\n  .filter('isState', $IsStateFilter)\n  .filter('includedByState', $IncludedByStateFilter);\n\n/*\n * @ngdoc object\n * @name ui.router.compat.$routeProvider\n *\n * @requires ui.router.state.$stateProvider\n * @requires ui.router.router.$urlRouterProvider\n *\n * @description\n * `$routeProvider` of the `ui.router.compat` module overwrites the existing\n * `routeProvider` from the core. This is done to provide compatibility between\n * the UI Router and the core router.\n *\n * It also provides a `when()` method to register routes that map to certain urls.\n * Behind the scenes it actually delegates either to \n * {@link ui.router.router.$urlRouterProvider $urlRouterProvider} or to the \n * {@link ui.router.state.$stateProvider $stateProvider} to postprocess the given \n * router definition object.\n */\n$RouteProvider.$inject = ['$stateProvider', '$urlRouterProvider'];\nfunction $RouteProvider(  $stateProvider,    $urlRouterProvider) {\n\n  var routes = [];\n\n  onEnterRoute.$inject = ['$$state'];\n  function onEnterRoute(   $$state) {\n    /*jshint validthis: true */\n    this.locals = $$state.locals.globals;\n    this.params = this.locals.$stateParams;\n  }\n\n  function onExitRoute() {\n    /*jshint validthis: true */\n    this.locals = null;\n    this.params = null;\n  }\n\n  this.when = when;\n  /*\n   * @ngdoc function\n   * @name ui.router.compat.$routeProvider#when\n   * @methodOf ui.router.compat.$routeProvider\n   *\n   * @description\n   * Registers a route with a given route definition object. The route definition\n   * object has the same interface the angular core route definition object has.\n   * \n   * @example\n   * <pre>\n   * var app = angular.module('app', ['ui.router.compat']);\n   *\n   * app.config(function ($routeProvider) {\n   *   $routeProvider.when('home', {\n   *     controller: function () { ... },\n   *     templateUrl: 'path/to/template'\n   *   });\n   * });\n   * </pre>\n   *\n   * @param {string} url URL as string\n   * @param {object} route Route definition object\n   *\n   * @return {object} $routeProvider - $routeProvider instance\n   */\n  function when(url, route) {\n    /*jshint validthis: true */\n    if (route.redirectTo != null) {\n      // Redirect, configure directly on $urlRouterProvider\n      var redirect = route.redirectTo, handler;\n      if (isString(redirect)) {\n        handler = redirect; // leave $urlRouterProvider to handle\n      } else if (isFunction(redirect)) {\n        // Adapt to $urlRouterProvider API\n        handler = function (params, $location) {\n          return redirect(params, $location.path(), $location.search());\n        };\n      } else {\n        throw new Error(\"Invalid 'redirectTo' in when()\");\n      }\n      $urlRouterProvider.when(url, handler);\n    } else {\n      // Regular route, configure as state\n      $stateProvider.state(inherit(route, {\n        parent: null,\n        name: 'route:' + encodeURIComponent(url),\n        url: url,\n        onEnter: onEnterRoute,\n        onExit: onExitRoute\n      }));\n    }\n    routes.push(route);\n    return this;\n  }\n\n  /*\n   * @ngdoc object\n   * @name ui.router.compat.$route\n   *\n   * @requires ui.router.state.$state\n   * @requires $rootScope\n   * @requires $routeParams\n   *\n   * @property {object} routes - Array of registered routes.\n   * @property {object} params - Current route params as object.\n   * @property {string} current - Name of the current route.\n   *\n   * @description\n   * The `$route` service provides interfaces to access defined routes. It also let's\n   * you access route params through `$routeParams` service, so you have fully\n   * control over all the stuff you would actually get from angular's core `$route`\n   * service.\n   */\n  this.$get = $get;\n  $get.$inject = ['$state', '$rootScope', '$routeParams'];\n  function $get(   $state,   $rootScope,   $routeParams) {\n\n    var $route = {\n      routes: routes,\n      params: $routeParams,\n      current: undefined\n    };\n\n    function stateAsRoute(state) {\n      return (state.name !== '') ? state : undefined;\n    }\n\n    $rootScope.$on('$stateChangeStart', function (ev, to, toParams, from, fromParams) {\n      $rootScope.$broadcast('$routeChangeStart', stateAsRoute(to), stateAsRoute(from));\n    });\n\n    $rootScope.$on('$stateChangeSuccess', function (ev, to, toParams, from, fromParams) {\n      $route.current = stateAsRoute(to);\n      $rootScope.$broadcast('$routeChangeSuccess', stateAsRoute(to), stateAsRoute(from));\n      copy(toParams, $route.params);\n    });\n\n    $rootScope.$on('$stateChangeError', function (ev, to, toParams, from, fromParams, error) {\n      $rootScope.$broadcast('$routeChangeError', stateAsRoute(to), stateAsRoute(from), error);\n    });\n\n    return $route;\n  }\n}\n\nangular.module('ui.router.compat')\n  .provider('$route', $RouteProvider)\n  .directive('ngView', $ViewDirective);\n})(window, window.angular);\n/*!\n * ionic.bundle.js is a concatenation of:\n * ionic.js, angular.js, angular-animate.js,\n * angular-sanitize.js, angular-ui-router.js,\n * and ionic-angular.js\n */\n\n/*!\n * Copyright 2014 Drifty Co.\n * http://drifty.com/\n *\n * Ionic, v1.0.0-beta.11\n * A powerful HTML5 mobile app framework.\n * https://ionicframework.com/\n *\n * By @maxlynch, @benjsperry, @adamdbradley <3\n *\n * Licensed under the MIT license. Please see LICENSE for more information.\n *\n */\n\n(function() {\n/*\n * deprecated.js\n * https://github.com/wearefractal/deprecated/\n * Copyright (c) 2014 Fractal <contact@wearefractal.com>\n * License MIT\n */\n//Interval object\nvar deprecated = {\n  method: function(msg, log, fn) {\n    var called = false;\n    return function deprecatedMethod(){\n      if (!called) {\n        called = true;\n        log(msg);\n      }\n      return fn.apply(this, arguments);\n    };\n  },\n\n  field: function(msg, log, parent, field, val) {\n    var called = false;\n    var getter = function(){\n      if (!called) {\n        called = true;\n        log(msg);\n      }\n      return val;\n    };\n    var setter = function(v) {\n      if (!called) {\n        called = true;\n        log(msg);\n      }\n      val = v;\n      return v;\n    };\n    Object.defineProperty(parent, field, {\n      get: getter,\n      set: setter,\n      enumerable: true\n    });\n    return;\n  }\n};\n\n\nvar IonicModule = angular.module('ionic', ['ngAnimate', 'ngSanitize', 'ui.router']),\n  extend = angular.extend,\n  forEach = angular.forEach,\n  isDefined = angular.isDefined,\n  isString = angular.isString,\n  jqLite = angular.element;\n\n\n/**\n * @ngdoc service\n * @name $ionicActionSheet\n * @module ionic\n * @description\n * The Action Sheet is a slide-up pane that lets the user choose from a set of options.\n * Dangerous options are highlighted in red and made obvious.\n *\n * There are easy ways to cancel out of the action sheet, such as tapping the backdrop or even\n * hitting escape on the keyboard for desktop testing.\n *\n * ![Action Sheet](https://s3.amazonaws.com/ionicframework.com/docs/v1/controllers/actionSheet.gif)\n *\n * @usage\n * To trigger an Action Sheet in your code, use the $ionicActionSheet service in your angular controllers:\n *\n * ```js\n * angular.module('mySuperApp', ['ionic'])\n * .controller(function($scope, $ionicActionSheet, $timeout) {\n *\n *  // Triggered on a button click, or some other target\n *  $scope.show = function() {\n *\n *    // Show the action sheet\n *    var hideSheet = $ionicActionSheet.show({\n *      buttons: [\n *        { text: '<b>Share</b> This' },\n *        { text: 'Move' }\n *      ],\n *      destructiveText: 'Delete',\n *      titleText: 'Modify your album',\n *      cancelText: 'Cancel',\n *      cancel: function() {\n          // add cancel code..\n        },\n *      buttonClicked: function(index) {\n *        return true;\n *      }\n *    });\n *\n *    // For example's sake, hide the sheet after two seconds\n *    $timeout(function() {\n *      hideSheet();\n *    }, 2000);\n *\n *  };\n * });\n * ```\n *\n */\nIonicModule\n.factory('$ionicActionSheet', [\n  '$rootScope',\n  '$document',\n  '$compile',\n  '$animate',\n  '$timeout',\n  '$ionicTemplateLoader',\n  '$ionicPlatform',\nfunction($rootScope, $document, $compile, $animate, $timeout, $ionicTemplateLoader, $ionicPlatform) {\n\n  return {\n    show: actionSheet\n  };\n\n  /**\n   * @ngdoc method\n   * @name $ionicActionSheet#show\n   * @description\n   * Load and return a new action sheet.\n   *\n   * A new isolated scope will be created for the\n   * action sheet and the new element will be appended into the body.\n   *\n   * @param {object} options The options for this ActionSheet. Properties:\n   *\n   *  - `[Object]` `buttons` Which buttons to show.  Each button is an object with a `text` field.\n   *  - `{string}` `titleText` The title to show on the action sheet.\n   *  - `{string=}` `cancelText` the text for a 'cancel' button on the action sheet.\n   *  - `{string=}` `destructiveText` The text for a 'danger' on the action sheet.\n   *  - `{function=}` `cancel` Called if the cancel button is pressed, the backdrop is tapped or\n   *     the hardware back button is pressed.\n   *  - `{function=}` `buttonClicked` Called when one of the non-destructive buttons is clicked,\n   *     with the index of the button that was clicked and the button object. Return true to close\n   *     the action sheet, or false to keep it opened.\n   *  - `{function=}` `destructiveButtonClicked` Called when the destructive button is clicked.\n   *     Return true to close the action sheet, or false to keep it opened.\n   *  -  `{boolean=}` `cancelOnStateChange` Whether to cancel the actionSheet when navigating\n   *     to a new state.  Default true.\n   *\n   * @returns {function} `hideSheet` A function which, when called, hides & cancels the action sheet.\n   */\n  function actionSheet(opts) {\n    var scope = $rootScope.$new(true);\n\n    angular.extend(scope, {\n      cancel: angular.noop,\n      destructiveButtonClicked: angular.noop,\n      buttonClicked: angular.noop,\n      $deregisterBackButton: angular.noop,\n      buttons: [],\n      cancelOnStateChange: true\n    }, opts || {});\n\n\n    // Compile the template\n    var element = scope.element = $compile('<ion-action-sheet buttons=\"buttons\"></ion-action-sheet>')(scope);\n\n    // Grab the sheet element for animation\n    var sheetEl = jqLite(element[0].querySelector('.action-sheet-wrapper'));\n\n    var stateChangeListenDone = scope.cancelOnStateChange ?\n      $rootScope.$on('$stateChangeSuccess', function() { scope.cancel(); }) :\n      angular.noop;\n\n    // removes the actionSheet from the screen\n    scope.removeSheet = function(done) {\n      if (scope.removed) return;\n\n      scope.removed = true;\n      sheetEl.removeClass('action-sheet-up');\n      $document[0].body.classList.remove('action-sheet-open');\n      scope.$deregisterBackButton();\n      stateChangeListenDone();\n\n      $animate.removeClass(element, 'active', function() {\n        scope.$destroy();\n        element.remove();\n        // scope.cancel.$scope is defined near the bottom\n        scope.cancel.$scope = null;\n        (done || angular.noop)();\n      });\n    };\n\n    scope.showSheet = function(done) {\n      if (scope.removed) return;\n\n      $document[0].body.appendChild(element[0]);\n      $document[0].body.classList.add('action-sheet-open');\n\n      $animate.addClass(element, 'active', function() {\n        if (scope.removed) return;\n        (done || angular.noop)();\n      });\n      $timeout(function(){\n        if (scope.removed) return;\n        sheetEl.addClass('action-sheet-up');\n      }, 20, false);\n    };\n\n    // registerBackButtonAction returns a callback to deregister the action\n    scope.$deregisterBackButton = $ionicPlatform.registerBackButtonAction(\n      function() {\n        $timeout(scope.cancel);\n      },\n      PLATFORM_BACK_BUTTON_PRIORITY_ACTION_SHEET\n    );\n\n    // called when the user presses the cancel button\n    scope.cancel = function() {\n      // after the animation is out, call the cancel callback\n      scope.removeSheet(opts.cancel);\n    };\n\n    scope.buttonClicked = function(index) {\n      // Check if the button click event returned true, which means\n      // we can close the action sheet\n      if (opts.buttonClicked(index, opts.buttons[index]) === true) {\n        scope.removeSheet();\n      }\n    };\n\n    scope.destructiveButtonClicked = function() {\n      // Check if the destructive button click event returned true, which means\n      // we can close the action sheet\n      if (opts.destructiveButtonClicked() === true) {\n        scope.removeSheet();\n      }\n    };\n\n    scope.showSheet();\n\n    // Expose the scope on $ionicActionSheet's return value for the sake\n    // of testing it.\n    scope.cancel.$scope = scope;\n\n    return scope.cancel;\n  }\n}]);\n\n\njqLite.prototype.addClass = function(cssClasses) {\n  var x, y, cssClass, el, splitClasses, existingClasses;\n  if (cssClasses && cssClasses != 'ng-scope' && cssClasses != 'ng-isolate-scope') {\n    for(x=0; x<this.length; x++) {\n      el = this[x];\n      if(el.setAttribute) {\n\n        if(cssClasses.indexOf(' ') < 0) {\n          el.classList.add(cssClasses);\n        } else {\n          existingClasses = (' ' + (el.getAttribute('class') || '') + ' ')\n            .replace(/[\\n\\t]/g, \" \");\n          splitClasses = cssClasses.split(' ');\n\n          for (y=0; y<splitClasses.length; y++) {\n            cssClass = splitClasses[y].trim();\n            if (existingClasses.indexOf(' ' + cssClass + ' ') === -1) {\n              existingClasses += cssClass + ' ';\n            }\n          }\n          el.setAttribute('class', existingClasses.trim());\n        }\n      }\n    }\n  }\n  return this;\n};\n\njqLite.prototype.removeClass = function(cssClasses) {\n  var x, y, splitClasses, cssClass, el;\n  if (cssClasses) {\n    for(x=0; x<this.length; x++) {\n      el = this[x];\n      if(el.getAttribute) {\n        if(cssClasses.indexOf(' ') < 0) {\n          el.classList.remove(cssClasses);\n        } else {\n          splitClasses = cssClasses.split(' ');\n\n          for (y=0; y<splitClasses.length; y++) {\n            cssClass = splitClasses[y];\n            el.setAttribute('class', (\n                (\" \" + (el.getAttribute('class') || '') + \" \")\n                .replace(/[\\n\\t]/g, \" \")\n                .replace(\" \" + cssClass.trim() + \" \", \" \")).trim()\n            );\n          }\n        }\n      }\n    }\n  }\n  return this;\n};\n\n/**\n * @ngdoc service\n * @name $ionicBackdrop\n * @module ionic\n * @description\n * Shows and hides a backdrop over the UI.  Appears behind popups, loading,\n * and other overlays.\n *\n * Often, multiple UI components require a backdrop, but only one backdrop is\n * ever needed in the DOM at a time.\n *\n * Therefore, each component that requires the backdrop to be shown calls\n * `$ionicBackdrop.retain()` when it wants the backdrop, then `$ionicBackdrop.release()`\n * when it is done with the backdrop.\n *\n * For each time `retain` is called, the backdrop will be shown until `release` is called.\n *\n * For example, if `retain` is called three times, the backdrop will be shown until `release`\n * is called three times.\n *\n * @usage\n *\n * ```js\n * function MyController($scope, $ionicBackdrop, $timeout) {\n *   //Show a backdrop for one second\n *   $scope.action = function() {\n *     $ionicBackdrop.retain();\n *     $timeout(function() {\n *       $ionicBackdrop.release();\n *     }, 1000);\n *   };\n * }\n * ```\n */\nIonicModule\n.factory('$ionicBackdrop', [\n  '$document', '$timeout',\nfunction($document, $timeout) {\n\n  var el = jqLite('<div class=\"backdrop\">');\n  var backdropHolds = 0;\n\n  $document[0].body.appendChild(el[0]);\n\n  return {\n    /**\n     * @ngdoc method\n     * @name $ionicBackdrop#retain\n     * @description Retains the backdrop.\n     */\n    retain: retain,\n    /**\n     * @ngdoc method\n     * @name $ionicBackdrop#release\n     * @description\n     * Releases the backdrop.\n     */\n    release: release,\n\n    getElement: getElement,\n\n    // exposed for testing\n    _element: el\n  };\n\n  function retain() {\n    if ( (++backdropHolds) === 1 ) {\n      el.addClass('visible');\n      ionic.requestAnimationFrame(function() {\n        backdropHolds && el.addClass('active');\n      });\n    }\n  }\n  function release() {\n    if ( (--backdropHolds) === 0 ) {\n      el.removeClass('active');\n      $timeout(function() {\n        !backdropHolds && el.removeClass('visible');\n      }, 400, false);\n    }\n  }\n\n  function getElement() {\n    return el;\n  }\n\n}]);\n\n/**\n * @private\n */\nIonicModule\n.factory('$ionicBind', ['$parse', '$interpolate', function($parse, $interpolate) {\n  var LOCAL_REGEXP = /^\\s*([@=&])(\\??)\\s*(\\w*)\\s*$/;\n  return function(scope, attrs, bindDefinition) {\n    forEach(bindDefinition || {}, function (definition, scopeName) {\n      //Adapted from angular.js $compile\n      var match = definition.match(LOCAL_REGEXP) || [],\n        attrName = match[3] || scopeName,\n        mode = match[1], // @, =, or &\n        parentGet,\n        unwatch;\n\n      switch(mode) {\n        case '@':\n          if (!attrs[attrName]) {\n            return;\n          }\n          attrs.$observe(attrName, function(value) {\n            scope[scopeName] = value;\n          });\n          // we trigger an interpolation to ensure\n          // the value is there for use immediately\n          if (attrs[attrName]) {\n            scope[scopeName] = $interpolate(attrs[attrName])(scope);\n          }\n          break;\n\n        case '=':\n          if (!attrs[attrName]) {\n            return;\n          }\n          unwatch = scope.$watch(attrs[attrName], function(value) {\n            scope[scopeName] = value;\n          });\n          //Destroy parent scope watcher when this scope is destroyed\n          scope.$on('$destroy', unwatch);\n          break;\n\n        case '&':\n          /* jshint -W044 */\n          if (attrs[attrName] && attrs[attrName].match(RegExp(scopeName + '\\(.*?\\)'))) {\n            throw new Error('& expression binding \"' + scopeName + '\" looks like it will recursively call \"' +\n                          attrs[attrName] + '\" and cause a stack overflow! Please choose a different scopeName.');\n          }\n          parentGet = $parse(attrs[attrName]);\n          scope[scopeName] = function(locals) {\n            return parentGet(scope, locals);\n          };\n          break;\n      }\n    });\n  };\n}]);\n\nIonicModule\n.factory('$collectionDataSource', [\n  '$cacheFactory',\n  '$parse',\n  '$rootScope',\nfunction($cacheFactory, $parse, $rootScope) {\n  function hideWithTransform(element) {\n    element.css(ionic.CSS.TRANSFORM, 'translate3d(-2000px,-2000px,0)');\n  }\n\n  function CollectionRepeatDataSource(options) {\n    var self = this;\n    this.scope = options.scope;\n    this.transcludeFn = options.transcludeFn;\n    this.transcludeParent = options.transcludeParent;\n    this.element = options.element;\n\n    this.keyExpr = options.keyExpr;\n    this.listExpr = options.listExpr;\n    this.trackByExpr = options.trackByExpr;\n\n    this.heightGetter = options.heightGetter;\n    this.widthGetter = options.widthGetter;\n\n    this.dimensions = [];\n    this.data = [];\n\n    if (this.trackByExpr) {\n      var trackByGetter = $parse(this.trackByExpr);\n      var hashFnLocals = {$id: hashKey};\n      this.itemHashGetter = function(index, value) {\n        hashFnLocals[self.keyExpr] = value;\n        hashFnLocals.$index = index;\n        return trackByGetter(self.scope, hashFnLocals);\n      };\n    } else {\n      this.itemHashGetter = function(index, value) {\n        return hashKey(value);\n      };\n    }\n\n    this.attachedItems = {};\n    this.BACKUP_ITEMS_LENGTH = 10;\n    this.backupItemsArray = [];\n  }\n  CollectionRepeatDataSource.prototype = {\n    setup: function() {\n      for (var i = 0; i < this.BACKUP_ITEMS_LENGTH; i++) {\n        this.detachItem(this.createItem());\n      }\n    },\n    destroy: function() {\n      this.dimensions.length = 0;\n      this.data = null;\n      this.backupItemsArray.length = 0;\n      this.attachedItems = {};\n    },\n    calculateDataDimensions: function() {\n      var locals = {};\n      this.dimensions = this.data.map(function(value, index) {\n        locals[this.keyExpr] = value;\n        locals.$index = index;\n        return {\n          width: this.widthGetter(this.scope, locals),\n          height: this.heightGetter(this.scope, locals)\n        };\n      }, this);\n      this.dimensions = this.beforeSiblings.concat(this.dimensions).concat(this.afterSiblings);\n      this.dataStartIndex = this.beforeSiblings.length;\n    },\n    createItem: function() {\n      var item = {};\n      item.scope = this.scope.$new();\n\n      this.transcludeFn(item.scope, function(clone) {\n        clone.css('position', 'absolute');\n        item.element = clone;\n      });\n\n      this.transcludeParent.append(item.element);\n\n      return item;\n    },\n    getItem: function(hash) {\n      if ( (item = this.attachedItems[hash]) ) {\n        //do nothing, the item is good\n      } else if ( (item = this.backupItemsArray.pop()) ) {\n        reconnectScope(item.scope);\n      } else {\n        item = this.createItem();\n      }\n      return item;\n    },\n    attachItemAtIndex: function(index) {\n      var value = this.data[index];\n\n      if (index < this.dataStartIndex) {\n        return this.beforeSiblings[index];\n      } else if (index > this.data.length) {\n        return this.afterSiblings[index - this.data.length - this.dataStartIndex];\n      }\n\n      var hash = this.itemHashGetter(index, value);\n      var item = this.getItem(hash);\n\n      if (item.scope.$index !== index || item.scope[this.keyExpr] !== value) {\n        item.scope[this.keyExpr] = value;\n        item.scope.$index = index;\n        item.scope.$first = (index === 0);\n        item.scope.$last = (index === (this.getLength() - 1));\n        item.scope.$middle = !(item.scope.$first || item.scope.$last);\n        item.scope.$odd = !(item.scope.$even = (index&1) === 0);\n\n        //We changed the scope, so digest if needed\n        if (!$rootScope.$$phase) {\n          item.scope.$digest();\n        }\n      }\n\n      item.hash = hash;\n      this.attachedItems[hash] = item;\n\n      return item;\n    },\n    destroyItem: function(item) {\n      item.element.remove();\n      item.scope.$destroy();\n      item.scope = null;\n      item.element = null;\n    },\n    detachItem: function(item) {\n      delete this.attachedItems[item.hash];\n\n      //If it's an outside item, only hide it. These items aren't part of collection\n      //repeat's list, only sit outside\n      if (item.isOutside) {\n        hideWithTransform(item.element);\n\n      // If we are at the limit of backup items, just get rid of the this element\n      } else if (this.backupItemsArray.length >= this.BACKUP_ITEMS_LENGTH) {\n        this.destroyItem(item);\n      // Otherwise, add it to our backup items\n      } else {\n        this.backupItemsArray.push(item);\n        hideWithTransform(item.element);\n        //Don't .$destroy(), just stop watchers and events firing\n        disconnectScope(item.scope);\n      }\n\n    },\n    getLength: function() {\n      return this.dimensions && this.dimensions.length || 0;\n    },\n    setData: function(value, beforeSiblings, afterSiblings) {\n      this.data = value || [];\n      this.beforeSiblings = beforeSiblings || [];\n      this.afterSiblings = afterSiblings || [];\n      this.calculateDataDimensions();\n\n      this.afterSiblings.forEach(function(item) {\n        item.element.css({position: 'absolute', top: '0', left: '0' });\n        hideWithTransform(item.element);\n      });\n    },\n  };\n\n  return CollectionRepeatDataSource;\n}]);\n\n/**\n* Computes a hash of an 'obj'.\n * Hash of a:\n *  string is string\n *  number is number as string\n *  object is either result of calling $$hashKey function on the object or uniquely generated id,\n *         that is also assigned to the $$hashKey property of the object.\n *\n * @param obj\n * @returns {string} hash string such that the same input will have the same hash string.\n *         The resulting string key is in 'type:hashKey' format.\n */\nfunction hashKey(obj) {\n  var objType = typeof obj,\n      key;\n\n  if (objType == 'object' && obj !== null) {\n    if (typeof (key = obj.$$hashKey) == 'function') {\n      // must invoke on object to keep the right this\n      key = obj.$$hashKey();\n    } else if (key === undefined) {\n      key = obj.$$hashKey = ionic.Utils.nextUid();\n    }\n  } else {\n    key = obj;\n  }\n\n  return objType + ':' + key;\n}\n\nfunction disconnectScope(scope) {\n  if (scope.$root === scope) {\n    return; // we can't disconnect the root node;\n  }\n  var parent = scope.$parent;\n  scope.$$disconnected = true;\n  // See Scope.$destroy\n  if (parent.$$childHead === scope) {\n    parent.$$childHead = scope.$$nextSibling;\n  }\n  if (parent.$$childTail === scope) {\n    parent.$$childTail = scope.$$prevSibling;\n  }\n  if (scope.$$prevSibling) {\n    scope.$$prevSibling.$$nextSibling = scope.$$nextSibling;\n  }\n  if (scope.$$nextSibling) {\n    scope.$$nextSibling.$$prevSibling = scope.$$prevSibling;\n  }\n  scope.$$nextSibling = scope.$$prevSibling = null;\n}\n\nfunction reconnectScope(scope) {\n  if (scope.$root === scope) {\n    return; // we can't disconnect the root node;\n  }\n  if (!scope.$$disconnected) {\n    return;\n  }\n  var parent = scope.$parent;\n  scope.$$disconnected = false;\n  // See Scope.$new for this logic...\n  scope.$$prevSibling = parent.$$childTail;\n  if (parent.$$childHead) {\n    parent.$$childTail.$$nextSibling = scope;\n    parent.$$childTail = scope;\n  } else {\n    parent.$$childHead = parent.$$childTail = scope;\n  }\n}\n\n\nIonicModule\n.factory('$collectionRepeatManager', [\n  '$rootScope',\n  '$timeout',\nfunction($rootScope, $timeout) {\n  /**\n   * Vocabulary: \"primary\" and \"secondary\" size/direction/position mean\n   * \"y\" and \"x\" for vertical scrolling, or \"x\" and \"y\" for horizontal scrolling.\n   */\n  function CollectionRepeatManager(options) {\n    var self = this;\n    this.dataSource = options.dataSource;\n    this.element = options.element;\n    this.scrollView = options.scrollView;\n\n    this.isVertical = !!this.scrollView.options.scrollingY;\n    this.renderedItems = {};\n    this.dimensions = [];\n    this.setCurrentIndex(0);\n\n    //Override scrollview's render callback\n    this.scrollView.__$callback = this.scrollView.__callback;\n    this.scrollView.__callback = angular.bind(this, this.renderScroll);\n\n    function getViewportSize() { return self.viewportSize; }\n    //Set getters and setters to match whether this scrollview is vertical or not\n    if (this.isVertical) {\n      this.scrollView.options.getContentHeight = getViewportSize;\n\n      this.scrollValue = function() {\n        return this.scrollView.__scrollTop;\n      };\n      this.scrollMaxValue = function() {\n        return this.scrollView.__maxScrollTop;\n      };\n      this.scrollSize = function() {\n        return this.scrollView.__clientHeight;\n      };\n      this.secondaryScrollSize = function() {\n        return this.scrollView.__clientWidth;\n      };\n      this.transformString = function(y, x) {\n        return 'translate3d('+x+'px,'+y+'px,0)';\n      };\n      this.primaryDimension = function(dim) {\n        return dim.height;\n      };\n      this.secondaryDimension = function(dim) {\n        return dim.width;\n      };\n    } else {\n      this.scrollView.options.getContentWidth = getViewportSize;\n\n      this.scrollValue = function() {\n        return this.scrollView.__scrollLeft;\n      };\n      this.scrollMaxValue = function() {\n        return this.scrollView.__maxScrollLeft;\n      };\n      this.scrollSize = function() {\n        return this.scrollView.__clientWidth;\n      };\n      this.secondaryScrollSize = function() {\n        return this.scrollView.__clientHeight;\n      };\n      this.transformString = function(x, y) {\n        return 'translate3d('+x+'px,'+y+'px,0)';\n      };\n      this.primaryDimension = function(dim) {\n        return dim.width;\n      };\n      this.secondaryDimension = function(dim) {\n        return dim.height;\n      };\n    }\n  }\n\n  CollectionRepeatManager.prototype = {\n    destroy: function() {\n      this.renderedItems = {};\n      this.render = angular.noop;\n      this.calculateDimensions = angular.noop;\n      this.dimensions = [];\n    },\n\n    /*\n     * Pre-calculate the position of all items in the data list.\n     * Do this using the provided width and height (primarySize and secondarySize)\n     * provided by the dataSource.\n     */\n    calculateDimensions: function() {\n      /*\n       * For the sake of explanations below, we're going to pretend we are scrolling\n       * vertically: Items are laid out with primarySize being height,\n       * secondarySize being width.\n       */\n      var primaryPos = 0;\n      var secondaryPos = 0;\n      var secondaryScrollSize = this.secondaryScrollSize();\n      var previousItem;\n\n      this.dataSource.beforeSiblings && this.dataSource.beforeSiblings.forEach(calculateSize, this);\n      var beforeSize = primaryPos + (previousItem ? previousItem.primarySize : 0);\n\n      primaryPos = secondaryPos = 0;\n      previousItem = null;\n\n\n      var dimensions = this.dataSource.dimensions.map(calculateSize, this);\n      var totalSize = primaryPos + (previousItem ? previousItem.primarySize : 0);\n\n      return {\n        beforeSize: beforeSize,\n        totalSize: totalSize,\n        dimensions: dimensions\n      };\n\n      function calculateSize(dim) {\n\n        //Each dimension is an object {width: Number, height: Number} provided by\n        //the dataSource\n        var rect = {\n          //Get the height out of the dimension object\n          primarySize: this.primaryDimension(dim),\n          //Max out the item's width to the width of the scrollview\n          secondarySize: Math.min(this.secondaryDimension(dim), secondaryScrollSize)\n        };\n\n        //If this isn't the first item\n        if (previousItem) {\n          //Move the item's x position over by the width of the previous item\n          secondaryPos += previousItem.secondarySize;\n          //If the y position is the same as the previous item and\n          //the x position is bigger than the scroller's width\n          if (previousItem.primaryPos === primaryPos &&\n              secondaryPos + rect.secondarySize > secondaryScrollSize) {\n            //Then go to the next row, with x position 0\n            secondaryPos = 0;\n            primaryPos += previousItem.primarySize;\n          }\n        }\n\n        rect.primaryPos = primaryPos;\n        rect.secondaryPos = secondaryPos;\n\n        previousItem = rect;\n        return rect;\n      }\n    },\n    resize: function() {\n      var result = this.calculateDimensions();\n      this.dimensions = result.dimensions;\n      this.viewportSize = result.totalSize;\n      this.beforeSize = result.beforeSize;\n      this.setCurrentIndex(0);\n      this.render(true);\n      if (!this.dataSource.backupItemsArray.length) {\n        this.dataSource.setup();\n      }\n    },\n    /*\n     * setCurrentIndex sets the index in the list that matches the scroller's position.\n     * Also save the position in the scroller for next and previous items (if they exist)\n     */\n    setCurrentIndex: function(index, height) {\n      var currentPos = (this.dimensions[index] || {}).primaryPos || 0;\n      this.currentIndex = index;\n\n      this.hasPrevIndex = index > 0;\n      if (this.hasPrevIndex) {\n        this.previousPos = Math.max(\n          currentPos - this.dimensions[index - 1].primarySize,\n          this.dimensions[index - 1].primaryPos\n        );\n      }\n      this.hasNextIndex = index + 1 < this.dataSource.getLength();\n      if (this.hasNextIndex) {\n        this.nextPos = Math.min(\n          currentPos + this.dimensions[index + 1].primarySize,\n          this.dimensions[index + 1].primaryPos\n        );\n      }\n    },\n    /**\n     * override the scroller's render callback to check if we need to\n     * re-render our collection\n     */\n    renderScroll: ionic.animationFrameThrottle(function(transformLeft, transformTop, zoom, wasResize) {\n      if (this.isVertical) {\n        this.renderIfNeeded(transformTop);\n      } else {\n        this.renderIfNeeded(transformLeft);\n      }\n      return this.scrollView.__$callback(transformLeft, transformTop, zoom, wasResize);\n    }),\n    renderIfNeeded: function(scrollPos) {\n      if ((this.hasNextIndex && scrollPos >= this.nextPos) ||\n          (this.hasPrevIndex && scrollPos < this.previousPos)) {\n           // Math.abs(transformPos - this.lastRenderScrollValue) > 100) {\n        this.render();\n      }\n    },\n    /*\n     * getIndexForScrollValue: Given the most recent data index and a new scrollValue,\n     * find the data index that matches that scrollValue.\n     *\n     * Strategy (if we are scrolling down): keep going forward in the dimensions list,\n     * starting at the given index, until an item with height matching the new scrollValue\n     * is found.\n     *\n     * This is a while loop. In the worst case it will have to go through the whole list\n     * (eg to scroll from top to bottom).  The most common case is to scroll\n     * down 1-3 items at a time.\n     *\n     * While this is not as efficient as it could be, optimizing it gives no noticeable\n     * benefit.  We would have to use a new memory-intensive data structure for dimensions\n     * to fully optimize it.\n     */\n    getIndexForScrollValue: function(i, scrollValue) {\n      var rect;\n      //Scrolling up\n      if (scrollValue <= this.dimensions[i].primaryPos) {\n        while ( (rect = this.dimensions[i - 1]) && rect.primaryPos > scrollValue) {\n          i--;\n        }\n      //Scrolling down\n      } else {\n        while ( (rect = this.dimensions[i + 1]) && rect.primaryPos < scrollValue) {\n          i++;\n        }\n      }\n      return i;\n    },\n    /*\n     * render: Figure out the scroll position, the index matching it, and then tell\n     * the data source to render the correct items into the DOM.\n     */\n    render: function(shouldRedrawAll) {\n      var self = this;\n      var i;\n      var isOutOfBounds = ( this.currentIndex >= this.dataSource.getLength() );\n      // We want to remove all the items and redraw everything if we're out of bounds\n      // or a flag is passed in.\n      if (isOutOfBounds || shouldRedrawAll) {\n        for (i in this.renderedItems) {\n          this.removeItem(i);\n        }\n        // Just don't render anything if we're out of bounds\n        if (isOutOfBounds) return;\n      }\n\n      var rect;\n      var scrollValue = this.scrollValue();\n      // Scroll size = how many pixels are visible in the scroller at one time\n      var scrollSize = this.scrollSize();\n      // We take the current scroll value and add it to the scrollSize to get\n      // what scrollValue the current visible scroll area ends at.\n      var scrollSizeEnd = scrollSize + scrollValue;\n      // Get the new start index for scrolling, based on the current scrollValue and\n      // the most recent known index\n      var startIndex = this.getIndexForScrollValue(this.currentIndex, scrollValue);\n\n      // If we aren't on the first item, add one row of items before so that when the user is\n      // scrolling up he sees the previous item\n      var renderStartIndex = Math.max(startIndex - 1, 0);\n      // Keep adding items to the 'extra row above' until we get to a new row.\n      // This is for the case where there are multiple items on one row above\n      // the current item; we want to keep adding items above until\n      // a new row is reached.\n      while (renderStartIndex > 0 &&\n         (rect = this.dimensions[renderStartIndex]) &&\n         rect.primaryPos === this.dimensions[startIndex - 1].primaryPos) {\n        renderStartIndex--;\n      }\n\n      // Keep rendering items, adding them until we are past the end of the visible scroll area\n      i = renderStartIndex;\n      while ((rect = this.dimensions[i]) && (rect.primaryPos - rect.primarySize < scrollSizeEnd)) {\n        doRender(i++);\n      }\n      //Add two more items at the end\n      doRender(i++);\n      doRender(i);\n      var renderEndIndex = i;\n\n      // Remove any items that were rendered and aren't visible anymore\n      for (i in this.renderedItems) {\n        if (i < renderStartIndex || i > renderEndIndex) {\n          this.removeItem(i);\n        }\n      }\n\n      this.setCurrentIndex(startIndex);\n\n      function doRender(dataIndex) {\n        var rect = self.dimensions[dataIndex];\n        if (!rect) {\n\n        }else if (dataIndex < self.dataSource.dataStartIndex) {\n          // do nothing\n        } else {\n          self.renderItem(dataIndex, rect.primaryPos - self.beforeSize, rect.secondaryPos);\n        }\n      }\n    },\n    renderItem: function(dataIndex, primaryPos, secondaryPos) {\n      // Attach an item, and set its transform position to the required value\n      var item = this.dataSource.attachItemAtIndex(dataIndex);\n      if (item && item.element) {\n        if (item.primaryPos !== primaryPos || item.secondaryPos !== secondaryPos) {\n          item.element.css(ionic.CSS.TRANSFORM, this.transformString(\n            primaryPos, secondaryPos\n          ));\n          item.primaryPos = primaryPos;\n          item.secondaryPos = secondaryPos;\n        }\n        // Save the item in rendered items\n        this.renderedItems[dataIndex] = item;\n      } else {\n        // If an item at this index doesn't exist anymore, be sure to delete\n        // it from rendered items\n        delete this.renderedItems[dataIndex];\n      }\n    },\n    removeItem: function(dataIndex) {\n      // Detach a given item\n      var item = this.renderedItems[dataIndex];\n      if (item) {\n        item.primaryPos = item.secondaryPos = null;\n        this.dataSource.detachItem(item);\n        delete this.renderedItems[dataIndex];\n      }\n    }\n  };\n\n  var exceptions = {'renderScroll':1, 'renderIfNeeded':1};\n  forEach(CollectionRepeatManager.prototype, function(method, key) {\n    if (exceptions[key]) return;\n    CollectionRepeatManager.prototype[key] = function() {\n      void 0;\n      return method.apply(this, arguments);\n    };\n  });\n\n  return CollectionRepeatManager;\n}]);\n\n\nfunction delegateService(methodNames) {\n  return ['$log', function($log) {\n    var delegate = this;\n\n    var instances = this._instances = [];\n    this._registerInstance = function(instance, handle) {\n      instance.$$delegateHandle = handle;\n      instances.push(instance);\n\n      return function deregister() {\n        var index = instances.indexOf(instance);\n        if (index !== -1) {\n          instances.splice(index, 1);\n        }\n      };\n    };\n\n    this.$getByHandle = function(handle) {\n      if (!handle) {\n        return delegate;\n      }\n      return new InstanceForHandle(handle);\n    };\n\n    /*\n     * Creates a new object that will have all the methodNames given,\n     * and call them on the given the controller instance matching given\n     * handle.\n     * The reason we don't just let $getByHandle return the controller instance\n     * itself is that the controller instance might not exist yet.\n     *\n     * We want people to be able to do\n     * `var instance = $ionicScrollDelegate.$getByHandle('foo')` on controller\n     * instantiation, but on controller instantiation a child directive\n     * may not have been compiled yet!\n     *\n     * So this is our way of solving this problem: we create an object\n     * that will only try to fetch the controller with given handle\n     * once the methods are actually called.\n     */\n    function InstanceForHandle(handle) {\n      this.handle = handle;\n    }\n    methodNames.forEach(function(methodName) {\n      InstanceForHandle.prototype[methodName] = function() {\n        var handle = this.handle;\n        var args = arguments;\n        var matchingInstancesFound = 0;\n        var finalResult;\n        var result;\n\n        //This logic is repeated below; we could factor some of it out to a function\n        //but don't because it lets this method be more performant (one loop versus 2)\n        instances.forEach(function(instance) {\n          if (instance.$$delegateHandle === handle) {\n            matchingInstancesFound++;\n            result = instance[methodName].apply(instance, args);\n            //Only return the value from the first call\n            if (matchingInstancesFound === 1) {\n              finalResult = result;\n            }\n          }\n        });\n\n        if (!matchingInstancesFound) {\n          return $log.warn(\n            'Delegate for handle \"'+this.handle+'\" could not find a ' +\n            'corresponding element with delegate-handle=\"'+this.handle+'\"! ' +\n            methodName + '() was not called!\\n' +\n            'Possible cause: If you are calling ' + methodName + '() immediately, and ' +\n            'your element with delegate-handle=\"' + this.handle + '\" is a child of your ' +\n            'controller, then your element may not be compiled yet. Put a $timeout ' +\n            'around your call to ' + methodName + '() and try again.'\n          );\n        }\n\n        return finalResult;\n      };\n      delegate[methodName] = function() {\n        var args = arguments;\n        var finalResult;\n        var result;\n\n        //This logic is repeated above\n        instances.forEach(function(instance, index) {\n          result = instance[methodName].apply(instance, args);\n          //Only return the value from the first call\n          if (index === 0) {\n            finalResult = result;\n          }\n        });\n\n        return finalResult;\n      };\n\n      function callMethod(instancesToUse, methodName, args) {\n        var finalResult;\n        var result;\n        instancesToUse.forEach(function(instance, index) {\n          result = instance[methodName].apply(instance, args);\n          //Make it so the first result is the one returned\n          if (index === 0) {\n            finalResult = result;\n          }\n        });\n        return finalResult;\n      }\n    });\n  }];\n}\n\n/**\n * @ngdoc service\n * @name $ionicGesture\n * @module ionic\n * @description An angular service exposing ionic\n * {@link ionic.utility:ionic.EventController}'s gestures.\n */\nIonicModule\n.factory('$ionicGesture', [function() {\n  return {\n    /**\n     * @ngdoc method\n     * @name $ionicGesture#on\n     * @description Add an event listener for a gesture on an element. See {@link ionic.utility:ionic.EventController#onGesture}.\n     * @param {string} eventType The gesture event to listen for.\n     * @param {function(e)} callback The function to call when the gesture\n     * happens.\n     * @param {element} $element The angular element to listen for the event on.\n     * @returns {ionic.Gesture} The gesture object (use this to remove the gesture later on).\n     */\n    on: function(eventType, cb, $element) {\n      return window.ionic.onGesture(eventType, cb, $element[0]);\n    },\n    /**\n     * @ngdoc method\n     * @name $ionicGesture#off\n     * @description Remove an event listener for a gesture on an element. See {@link ionic.utility:ionic.EventController#offGesture}.\n     * @param {ionic.Gesture} gesture The gesture that should be removed.\n     * @param {string} eventType The gesture event to remove the listener for.\n     * @param {function(e)} callback The listener to remove.\n     */\n    off: function(gesture, eventType, cb) {\n      return window.ionic.offGesture(gesture, eventType, cb);\n    }\n  };\n}]);\n\n\nvar LOADING_TPL =\n  '<div class=\"loading-container\">' +\n    '<div class=\"loading\">' +\n    '</div>' +\n  '</div>';\n\nvar LOADING_HIDE_DEPRECATED = '$ionicLoading instance.hide() has been deprecated. Use $ionicLoading.hide().';\nvar LOADING_SHOW_DEPRECATED = '$ionicLoading instance.show() has been deprecated. Use $ionicLoading.show().';\nvar LOADING_SET_DEPRECATED = '$ionicLoading instance.setContent() has been deprecated. Use $ionicLoading.show({ template: \\'my content\\' }).';\n\n/**\n * @ngdoc service\n * @name $ionicLoading\n * @module ionic\n * @description\n * An overlay that can be used to indicate activity while blocking user\n * interaction.\n *\n * @usage\n * ```js\n * angular.module('LoadingApp', ['ionic'])\n * .controller('LoadingCtrl', function($scope, $ionicLoading) {\n *   $scope.show = function() {\n *     $ionicLoading.show({\n *       template: 'Loading...'\n *     });\n *   };\n *   $scope.hide = function(){\n *     $ionicLoading.hide();\n *   };\n * });\n * ```\n */\n/**\n * @ngdoc object\n * @name $ionicLoadingConfig\n * @module ionic\n * @description\n * Set the default options to be passed to the {@link ionic.service:$ionicLoading} service.\n *\n * @usage\n * ```js\n * var app = angular.module('myApp', ['ionic'])\n * app.constant('$ionicLoadingConfig', {\n *   template: 'Default Loading Template...'\n * });\n * app.controller('AppCtrl', function($scope, $ionicLoading) {\n *   $scope.showLoading = function() {\n *     $ionicLoading.show(); //options default to values in $ionicLoadingConfig\n *   };\n * });\n * ```\n */\nIonicModule\n.constant('$ionicLoadingConfig', {\n  template: '<i class=\"ion-loading-d\"></i>'\n})\n.factory('$ionicLoading', [\n  '$ionicLoadingConfig',\n  '$document',\n  '$ionicTemplateLoader',\n  '$ionicBackdrop',\n  '$timeout',\n  '$q',\n  '$log',\n  '$compile',\n  '$ionicPlatform',\nfunction($ionicLoadingConfig, $document, $ionicTemplateLoader, $ionicBackdrop, $timeout, $q, $log, $compile, $ionicPlatform) {\n\n  var loaderInstance;\n  //default values\n  var deregisterBackAction = angular.noop;\n  var loadingShowDelay = $q.when();\n\n  return {\n    /**\n     * @ngdoc method\n     * @name $ionicLoading#show\n     * @description Shows a loading indicator. If the indicator is already shown,\n     * it will set the options given and keep the indicator shown.\n     * @param {object} opts The options for the loading indicator. Available properties:\n     *  - `{string=}` `template` The html content of the indicator.\n     *  - `{string=}` `templateUrl` The url of an html template to load as the content of the indicator.\n     *  - `{boolean=}` `noBackdrop` Whether to hide the backdrop. By default it will be shown.\n     *  - `{number=}` `delay` How many milliseconds to delay showing the indicator. By default there is no delay.\n     *  - `{number=}` `duration` How many milliseconds to wait until automatically\n     *  hiding the indicator. By default, the indicator will be shown until `.hide()` is called.\n     */\n    show: showLoader,\n    /**\n     * @ngdoc method\n     * @name $ionicLoading#hide\n     * @description Hides the loading indicator, if shown.\n     */\n    hide: hideLoader,\n    /**\n     * @private for testing\n     */\n    _getLoader: getLoader\n  };\n\n  function getLoader() {\n    if (!loaderInstance) {\n      loaderInstance = $ionicTemplateLoader.compile({\n        template: LOADING_TPL,\n        appendTo: $document[0].body\n      })\n      .then(function(loader) {\n        var self = loader;\n\n        loader.show = function(options) {\n          var templatePromise = options.templateUrl ?\n            $ionicTemplateLoader.load(options.templateUrl) :\n            //options.content: deprecated\n            $q.when(options.template || options.content || '');\n\n\n          if (!this.isShown) {\n            //options.showBackdrop: deprecated\n            this.hasBackdrop = !options.noBackdrop && options.showBackdrop !== false;\n            if (this.hasBackdrop) {\n              $ionicBackdrop.retain();\n              $ionicBackdrop.getElement().addClass('backdrop-loading');\n            }\n          }\n\n          if (options.duration) {\n            $timeout.cancel(this.durationTimeout);\n            this.durationTimeout = $timeout(\n              angular.bind(this, this.hide),\n              +options.duration\n            );\n          }\n\n          templatePromise.then(function(html) {\n            if (html) {\n              var loading = self.element.children();\n              loading.html(html);\n              $compile(loading.contents())(self.scope);\n            }\n\n            //Don't show until template changes\n            if (self.isShown) {\n              self.element.addClass('visible');\n              ionic.requestAnimationFrame(function() {\n                self.isShown && self.element.addClass('active');\n                $document[0].body.classList.add('loading-active');\n              });\n            }\n          });\n\n          this.isShown = true;\n        };\n        loader.hide = function() {\n          if (this.isShown) {\n            if (this.hasBackdrop) {\n              $ionicBackdrop.release();\n              $ionicBackdrop.getElement().removeClass('backdrop-loading');\n            }\n            self.element.removeClass('active');\n            $document[0].body.classList.remove('loading-active');\n            setTimeout(function() {\n              !self.isShown && self.element.removeClass('visible');\n            }, 200);\n          }\n          $timeout.cancel(this.durationTimeout);\n          this.isShown = false;\n        };\n\n        return loader;\n      });\n    }\n    return loaderInstance;\n  }\n\n  function showLoader(options) {\n    options = extend($ionicLoadingConfig || {}, options || {});\n    var delay = options.delay || options.showDelay || 0;\n\n    //If loading.show() was called previously, cancel it and show with our new options\n    loadingShowDelay && $timeout.cancel(loadingShowDelay);\n    loadingShowDelay = $timeout(angular.noop, delay);\n\n    loadingShowDelay.then(getLoader).then(function(loader) {\n      deregisterBackAction();\n      //Disable hardware back button while loading\n      deregisterBackAction = $ionicPlatform.registerBackButtonAction(\n        angular.noop,\n        PLATFORM_BACK_BUTTON_PRIORITY_LOADING\n      );\n      return loader.show(options);\n    });\n\n    return {\n      hide: deprecated.method(LOADING_HIDE_DEPRECATED, $log.error, hideLoader),\n      show: deprecated.method(LOADING_SHOW_DEPRECATED, $log.error, function() {\n        showLoader(options);\n      }),\n      setContent: deprecated.method(LOADING_SET_DEPRECATED, $log.error, function(content) {\n        getLoader().then(function(loader) {\n          loader.show({ template: content });\n        });\n      })\n    };\n  }\n\n  function hideLoader() {\n    deregisterBackAction();\n    $timeout.cancel(loadingShowDelay);\n    getLoader().then(function(loader) {\n      loader.hide();\n    });\n  }\n}]);\n\n/**\n * @ngdoc service\n * @name $ionicModal\n * @module ionic\n * @description\n *\n * Related: {@link ionic.controller:ionicModal ionicModal controller}.\n *\n * The Modal is a content pane that can go over the user's main view\n * temporarily.  Usually used for making a choice or editing an item.\n *\n * Put the content of the modal inside of an `<ion-modal-view>` element.\n *\n * Note: a modal will broadcast 'modal.shown', 'modal.hidden', and 'modal.removed' events from its originating\n * scope, passing in itself as an event argument. Both the modal.removed and modal.hidden events are\n * called when the modal is removed.\n *\n * @usage\n * ```html\n * <script id=\"my-modal.html\" type=\"text/ng-template\">\n *   <ion-modal-view>\n *     <ion-header-bar>\n *       <h1 class=\"title\">My Modal title</h1>\n *     </ion-header-bar>\n *     <ion-content>\n *       Hello!\n *     </ion-content>\n *   </ion-modal-view>\n * </script>\n * ```\n * ```js\n * angular.module('testApp', ['ionic'])\n * .controller('MyController', function($scope, $ionicModal) {\n *   $ionicModal.fromTemplateUrl('my-modal.html', {\n *     scope: $scope,\n *     animation: 'slide-in-up'\n *   }).then(function(modal) {\n *     $scope.modal = modal;\n *   });\n *   $scope.openModal = function() {\n *     $scope.modal.show();\n *   };\n *   $scope.closeModal = function() {\n *     $scope.modal.hide();\n *   };\n *   //Cleanup the modal when we're done with it!\n *   $scope.$on('$destroy', function() {\n *     $scope.modal.remove();\n *   });\n *   // Execute action on hide modal\n *   $scope.$on('modal.hidden', function() {\n *     // Execute action\n *   });\n *   // Execute action on remove modal\n *   $scope.$on('modal.removed', function() {\n *     // Execute action\n *   });\n * });\n * ```\n */\nIonicModule\n.factory('$ionicModal', [\n  '$rootScope',\n  '$document',\n  '$compile',\n  '$timeout',\n  '$ionicPlatform',\n  '$ionicTemplateLoader',\n  '$q',\n  '$log',\nfunction($rootScope, $document, $compile, $timeout, $ionicPlatform, $ionicTemplateLoader, $q, $log) {\n\n  /**\n   * @ngdoc controller\n   * @name ionicModal\n   * @module ionic\n   * @description\n   * Instantiated by the {@link ionic.service:$ionicModal} service.\n   *\n   * Be sure to call [remove()](#remove) when you are done with each modal\n   * to clean it up and avoid memory leaks.\n   *\n   * Note: a modal will broadcast 'modal.shown', 'modal.hidden', and 'modal.removed' events from its originating\n   * scope, passing in itself as an event argument. Note: both modal.removed and modal.hidden are\n   * called when the modal is removed.\n   */\n  var ModalView = ionic.views.Modal.inherit({\n    /**\n     * @ngdoc method\n     * @name ionicModal#initialize\n     * @description Creates a new modal controller instance.\n     * @param {object} options An options object with the following properties:\n     *  - `{object=}` `scope` The scope to be a child of.\n     *    Default: creates a child of $rootScope.\n     *  - `{string=}` `animation` The animation to show & hide with.\n     *    Default: 'slide-in-up'\n     *  - `{boolean=}` `focusFirstInput` Whether to autofocus the first input of\n     *    the modal when shown.  Default: false.\n     *  - `{boolean=}` `backdropClickToClose` Whether to close the modal on clicking the backdrop.\n     *    Default: true.\n     *  - `{boolean=}` `hardwareBackButtonClose` Whether the modal can be closed using the hardware\n     *    back button on Android and similar devices.  Default: true.\n     */\n    initialize: function(opts) {\n      ionic.views.Modal.prototype.initialize.call(this, opts);\n      this.animation = opts.animation || 'slide-in-up';\n    },\n\n    /**\n     * @ngdoc method\n     * @name ionicModal#show\n     * @description Show this modal instance.\n     * @returns {promise} A promise which is resolved when the modal is finished animating in.\n     */\n    show: function(target) {\n      var self = this;\n\n      if(self.scope.$$destroyed) {\n        $log.error('Cannot call ' +  self.viewType + '.show() after remove(). Please create a new ' +  self.viewType + ' instance.');\n        return;\n      }\n\n      var modalEl = jqLite(self.modalEl);\n\n      self.el.classList.remove('hide');\n      $timeout(function(){\n        $document[0].body.classList.add(self.viewType + '-open');\n      }, 400);\n\n      if(!self.el.parentElement) {\n        modalEl.addClass(self.animation);\n        $document[0].body.appendChild(self.el);\n      }\n\n      if(target && self.positionView) {\n        self.positionView(target, modalEl);\n      }\n\n      modalEl.addClass('ng-enter active')\n             .removeClass('ng-leave ng-leave-active');\n\n      self._isShown = true;\n      self._deregisterBackButton = $ionicPlatform.registerBackButtonAction(\n        self.hardwareBackButtonClose ? angular.bind(self, self.hide) : angular.noop,\n        PLATFORM_BACK_BUTTON_PRIORITY_MODAL\n      );\n\n      self._isOpenPromise = $q.defer();\n\n      ionic.views.Modal.prototype.show.call(self);\n\n      $timeout(function(){\n        modalEl.addClass('ng-enter-active');\n        ionic.trigger('resize');\n        self.scope.$parent && self.scope.$parent.$broadcast(self.viewType + '.shown', self);\n        self.el.classList.add('active');\n      }, 20);\n\n      return $timeout(function() {\n        //After animating in, allow hide on backdrop click\n        self.$el.on('click', function(e) {\n          if (self.backdropClickToClose && e.target === self.el) {\n            self.hide();\n          }\n        });\n      }, 400);\n    },\n\n    /**\n     * @ngdoc method\n     * @name ionicModal#hide\n     * @description Hide this modal instance.\n     * @returns {promise} A promise which is resolved when the modal is finished animating out.\n     */\n    hide: function() {\n      var self = this;\n      var modalEl = jqLite(self.modalEl);\n\n      self.el.classList.remove('active');\n      modalEl.addClass('ng-leave');\n\n      $timeout(function(){\n        modalEl.addClass('ng-leave-active')\n               .removeClass('ng-enter ng-enter-active active');\n      }, 20);\n\n      self.$el.off('click');\n      self._isShown = false;\n      self.scope.$parent && self.scope.$parent.$broadcast(self.viewType + '.hidden', self);\n      self._deregisterBackButton && self._deregisterBackButton();\n\n      ionic.views.Modal.prototype.hide.call(self);\n\n      return $timeout(function(){\n        $document[0].body.classList.remove(self.viewType + '-open');\n        self.el.classList.add('hide');\n      }, self.hideDelay || 500);\n    },\n\n    /**\n     * @ngdoc method\n     * @name ionicModal#remove\n     * @description Remove this modal instance from the DOM and clean up.\n     * @returns {promise} A promise which is resolved when the modal is finished animating out.\n     */\n    remove: function() {\n      var self = this;\n      self.scope.$parent && self.scope.$parent.$broadcast(self.viewType + '.removed', self);\n\n      return self.hide().then(function() {\n        self.scope.$destroy();\n        self.$el.remove();\n      });\n    },\n\n    /**\n     * @ngdoc method\n     * @name ionicModal#isShown\n     * @returns boolean Whether this modal is currently shown.\n     */\n    isShown: function() {\n      return !!this._isShown;\n    }\n  });\n\n  var createModal = function(templateString, options) {\n    // Create a new scope for the modal\n    var scope = options.scope && options.scope.$new() || $rootScope.$new(true);\n\n    options.viewType = options.viewType || 'modal';\n\n    extend(scope, {\n      $hasHeader: false,\n      $hasSubheader: false,\n      $hasFooter: false,\n      $hasSubfooter: false,\n      $hasTabs: false,\n      $hasTabsTop: false\n    });\n\n    // Compile the template\n    var element = $compile('<ion-' + options.viewType + '>' + templateString + '</ion-' + options.viewType + '>')(scope);\n\n    options.$el = element;\n    options.el = element[0];\n    options.modalEl = options.el.querySelector('.' + options.viewType);\n    var modal = new ModalView(options);\n\n    modal.scope = scope;\n\n    // If this wasn't a defined scope, we can assign the viewType to the isolated scope\n    // we created\n    if(!options.scope) {\n      scope[ options.viewType ] = modal;\n    }\n\n    return modal;\n  };\n\n  return {\n    /**\n     * @ngdoc method\n     * @name $ionicModal#fromTemplate\n     * @param {string} templateString The template string to use as the modal's\n     * content.\n     * @param {object} options Options to be passed {@link ionic.controller:ionicModal#initialize ionicModal#initialize} method.\n     * @returns {object} An instance of an {@link ionic.controller:ionicModal}\n     * controller.\n     */\n    fromTemplate: function(templateString, options) {\n      var modal = createModal(templateString, options || {});\n      return modal;\n    },\n    /**\n     * @ngdoc method\n     * @name $ionicModal#fromTemplateUrl\n     * @param {string} templateUrl The url to load the template from.\n     * @param {object} options Options to be passed {@link ionic.controller:ionicModal#initialize ionicModal#initialize} method.\n     * options object.\n     * @returns {promise} A promise that will be resolved with an instance of\n     * an {@link ionic.controller:ionicModal} controller.\n     */\n    fromTemplateUrl: function(url, options, _) {\n      var cb;\n      //Deprecated: allow a callback as second parameter. Now we return a promise.\n      if (angular.isFunction(options)) {\n        cb = options;\n        options = _;\n      }\n      return $ionicTemplateLoader.load(url).then(function(templateString) {\n        var modal = createModal(templateString, options || {});\n        cb && cb(modal);\n        return modal;\n      });\n    }\n  };\n}]);\n\n\n/**\n * @ngdoc service\n * @name $ionicNavBarDelegate\n * @module ionic\n * @description\n * Delegate for controlling the {@link ionic.directive:ionNavBar} directive.\n *\n * @usage\n *\n * ```html\n * <body ng-controller=\"MyCtrl\">\n *   <ion-nav-bar>\n *     <button ng-click=\"setNavTitle('banana')\">\n *       Set title to banana!\n *     </button>\n *   </ion-nav-bar>\n * </body>\n * ```\n * ```js\n * function MyCtrl($scope, $ionicNavBarDelegate) {\n *   $scope.setNavTitle = function(title) {\n *     $ionicNavBarDelegate.setTitle(title);\n *   }\n * }\n * ```\n */\nIonicModule\n.service('$ionicNavBarDelegate', delegateService([\n  /**\n   * @ngdoc method\n   * @name $ionicNavBarDelegate#back\n   * @description Goes back in the view history.\n   * @param {DOMEvent=} event The event object (eg from a tap event)\n   */\n  'back',\n  /**\n   * @ngdoc method\n   * @name $ionicNavBarDelegate#align\n   * @description Aligns the title with the buttons in a given direction.\n   * @param {string=} direction The direction to the align the title text towards.\n   * Available: 'left', 'right', 'center'. Default: 'center'.\n   */\n  'align',\n  /**\n   * @ngdoc method\n   * @name $ionicNavBarDelegate#showBackButton\n   * @description\n   * Set/get whether the {@link ionic.directive:ionNavBackButton} is shown\n   * (if it exists).\n   * @param {boolean=} show Whether to show the back button.\n   * @returns {boolean} Whether the back button is shown.\n   */\n  'showBackButton',\n  /**\n   * @ngdoc method\n   * @name $ionicNavBarDelegate#showBar\n   * @description\n   * Set/get whether the {@link ionic.directive:ionNavBar} is shown.\n   * @param {boolean} show Whether to show the bar.\n   * @returns {boolean} Whether the bar is shown.\n   */\n  'showBar',\n  /**\n   * @ngdoc method\n   * @name $ionicNavBarDelegate#setTitle\n   * @description\n   * Set the title for the {@link ionic.directive:ionNavBar}.\n   * @param {string} title The new title to show.\n   */\n  'setTitle',\n  /**\n   * @ngdoc method\n   * @name $ionicNavBarDelegate#changeTitle\n   * @description\n   * Change the title, transitioning the new title in and the old one out in a given direction.\n   * @param {string} title The new title to show.\n   * @param {string} direction The direction to transition the new title in.\n   * Available: 'forward', 'back'.\n   */\n  'changeTitle',\n  /**\n   * @ngdoc method\n   * @name $ionicNavBarDelegate#getTitle\n   * @returns {string} The current title of the navbar.\n   */\n  'getTitle',\n  /**\n   * @ngdoc method\n   * @name $ionicNavBarDelegate#getPreviousTitle\n   * @returns {string} The previous title of the navbar.\n   */\n  'getPreviousTitle'\n  /**\n   * @ngdoc method\n   * @name $ionicNavBarDelegate#$getByHandle\n   * @param {string} handle\n   * @returns `delegateInstance` A delegate instance that controls only the\n   * navBars with delegate-handle matching the given handle.\n   *\n   * Example: `$ionicNavBarDelegate.$getByHandle('myHandle').setTitle('newTitle')`\n   */\n]));\n\nvar PLATFORM_BACK_BUTTON_PRIORITY_VIEW = 100;\nvar PLATFORM_BACK_BUTTON_PRIORITY_SIDE_MENU = 150;\nvar PLATFORM_BACK_BUTTON_PRIORITY_MODAL = 200;\nvar PLATFORM_BACK_BUTTON_PRIORITY_ACTION_SHEET = 300;\nvar PLATFORM_BACK_BUTTON_PRIORITY_POPUP = 400;\nvar PLATFORM_BACK_BUTTON_PRIORITY_LOADING = 500;\n\nfunction componentConfig(defaults) {\n  defaults.$get = function() { return defaults; };\n  return defaults;\n}\n\nIonicModule\n.constant('$ionicPlatformDefaults', {\n  'ios': {\n    '$ionicNavBarConfig': {\n      transition: 'nav-title-slide-ios7',\n      alignTitle: 'center',\n      backButtonIcon: 'ion-ios7-arrow-back'\n    },\n    '$ionicNavViewConfig': {\n      transition: 'slide-left-right-ios7'\n    },\n    '$ionicTabsConfig': {\n      type: '',\n      position: ''\n    }\n  },\n  'android': {\n    '$ionicNavBarConfig': {\n      transition: 'nav-title-slide-ios7',\n      alignTitle: 'center',\n      backButtonIcon: 'ion-ios7-arrow-back'\n    },\n    '$ionicNavViewConfig': {\n      transition: 'slide-left-right-ios7'\n    },\n    '$ionicTabsConfig': {\n      type: 'tabs-striped',\n      position: ''\n    }\n  }\n});\n\n\nIonicModule.config([\n  '$ionicPlatformDefaults',\n\n  '$injector',\n\nfunction($ionicPlatformDefaults, $injector) {\n  var platform = ionic.Platform.platform();\n\n  var applyConfig = function(platformDefaults) {\n    forEach(platformDefaults, function(defaults, constantName) {\n      extend($injector.get(constantName), defaults);\n    });\n  };\n\n  switch(platform) {\n    case 'ios':\n      applyConfig($ionicPlatformDefaults.ios);\n      break;\n    case 'android':\n      applyConfig($ionicPlatformDefaults.android);\n      break;\n  }\n}]);\n\n/**\n * @ngdoc service\n * @name $ionicPlatform\n * @module ionic\n * @description\n * An angular abstraction of {@link ionic.utility:ionic.Platform}.\n *\n * Used to detect the current platform, as well as do things like override the\n * Android back button in PhoneGap/Cordova.\n */\nIonicModule\n.provider('$ionicPlatform', function() {\n  return {\n    $get: ['$q', '$rootScope', function($q, $rootScope) {\n      var self = {\n\n        /**\n         * @ngdoc method\n         * @name $ionicPlatform#onHardwareBackButton\n         * @description\n         * Some platforms have a hardware back button, so this is one way to\n         * bind to it.\n         * @param {function} callback the callback to trigger when this event occurs\n         */\n        onHardwareBackButton: function(cb) {\n          ionic.Platform.ready(function() {\n            document.addEventListener('backbutton', cb, false);\n          });\n        },\n\n        /**\n         * @ngdoc method\n         * @name $ionicPlatform#offHardwareBackButton\n         * @description\n         * Remove an event listener for the backbutton.\n         * @param {function} callback The listener function that was\n         * originally bound.\n         */\n        offHardwareBackButton: function(fn) {\n          ionic.Platform.ready(function() {\n            document.removeEventListener('backbutton', fn);\n          });\n        },\n\n        /**\n         * @ngdoc method\n         * @name $ionicPlatform#registerBackButtonAction\n         * @description\n         * Register a hardware back button action. Only one action will execute\n         * when the back button is clicked, so this method decides which of\n         * the registered back button actions has the highest priority.\n         *\n         * For example, if an actionsheet is showing, the back button should\n         * close the actionsheet, but it should not also go back a page view\n         * or close a modal which may be open.\n         *\n         * @param {function} callback Called when the back button is pressed,\n         * if this listener is the highest priority.\n         * @param {number} priority Only the highest priority will execute.\n         * @param {*=} actionId The id to assign this action. Default: a\n         * random unique id.\n         * @returns {function} A function that, when called, will deregister\n         * this backButtonAction.\n         */\n        $backButtonActions: {},\n        registerBackButtonAction: function(fn, priority, actionId) {\n\n          if(!self._hasBackButtonHandler) {\n            // add a back button listener if one hasn't been setup yet\n            self.$backButtonActions = {};\n            self.onHardwareBackButton(self.hardwareBackButtonClick);\n            self._hasBackButtonHandler = true;\n          }\n\n          var action = {\n            id: (actionId ? actionId : ionic.Utils.nextUid()),\n            priority: (priority ? priority : 0),\n            fn: fn\n          };\n          self.$backButtonActions[action.id] = action;\n\n          // return a function to de-register this back button action\n          return function() {\n            delete self.$backButtonActions[action.id];\n          };\n        },\n\n        /**\n         * @private\n         */\n        hardwareBackButtonClick: function(e){\n          // loop through all the registered back button actions\n          // and only run the last one of the highest priority\n          var priorityAction, actionId;\n          for(actionId in self.$backButtonActions) {\n            if(!priorityAction || self.$backButtonActions[actionId].priority >= priorityAction.priority) {\n              priorityAction = self.$backButtonActions[actionId];\n            }\n          }\n          if(priorityAction) {\n            priorityAction.fn(e);\n            return priorityAction;\n          }\n        },\n\n        is: function(type) {\n          return ionic.Platform.is(type);\n        },\n\n        /**\n         * @ngdoc method\n         * @name $ionicPlatform#ready\n         * @description\n         * Trigger a callback once the device is ready,\n         * or immediately if the device is already ready.\n         * @param {function=} callback The function to call.\n         * @returns {promise} A promise which is resolved when the device is ready.\n         */\n        ready: function(cb) {\n          var q = $q.defer();\n\n          ionic.Platform.ready(function(){\n            q.resolve();\n            cb && cb();\n          });\n\n          return q.promise;\n        }\n      };\n      return self;\n    }]\n  };\n\n});\n\n\n/**\n * @ngdoc service\n * @name $ionicPopover\n * @module ionic\n * @description\n *\n * Related: {@link ionic.controller:ionicPopover ionicPopover controller}.\n *\n * The Popover is a view that floats above an app’s content. Popovers provide an\n * easy way to present or gather information from the user and are\n * commonly used in the following situations:\n *\n * - Show more info about the current view\n * - Select a commonly used tool or configuration\n * - Present a list of actions to perform inside one of your views\n *\n * Put the content of the popover inside of an `<ion-popover-view>` element.\n *\n * @usage\n * ```html\n * <p>\n *   <button ng-click=\"openPopover($event)\">Open Popover</button>\n * </p>\n *\n * <script id=\"my-popover.html\" type=\"text/ng-template\">\n *   <ion-popover-view>\n *     <ion-header-bar>\n *       <h1 class=\"title\">My Popover Title</h1>\n *     </ion-header-bar>\n *     <ion-content>\n *       Hello!\n *     </ion-content>\n *   </ion-popover-view>\n * </script>\n * ```\n * ```js\n * angular.module('testApp', ['ionic'])\n * .controller('MyController', function($scope, $ionicPopover) {\n *   $ionicPopover.fromTemplateUrl('my-popover.html', {\n *     scope: $scope,\n *   }).then(function(popover) {\n *     $scope.popover = popover;\n *   });\n *   $scope.openPopover = function($event) {\n *     $scope.popover.show($event);\n *   };\n *   $scope.closePopover = function() {\n *     $scope.popover.hide();\n *   };\n *   //Cleanup the popover when we're done with it!\n *   $scope.$on('$destroy', function() {\n *     $scope.popover.remove();\n *   });\n *   // Execute action on hide popover\n *   $scope.$on('popover.hidden', function() {\n *     // Execute action\n *   });\n *   // Execute action on remove popover\n *   $scope.$on('popover.removed', function() {\n *     // Execute action\n *   });\n * });\n * ```\n */\n\n\nIonicModule\n.factory('$ionicPopover', ['$ionicModal', '$ionicPosition', '$document',\nfunction($ionicModal, $ionicPosition, $document) {\n\n  var POPOVER_BODY_PADDING = 6;\n\n  var POPOVER_OPTIONS = {\n    viewType: 'popover',\n    hideDelay: 1,\n    animation: 'none',\n    positionView: positionView\n  };\n\n  function positionView(target, popoverEle) {\n    var targetEle = angular.element(target.target || target);\n    var buttonOffset = $ionicPosition.offset( targetEle );\n    var popoverWidth = popoverEle.prop('offsetWidth');\n    var bodyWidth = $document[0].body.clientWidth;\n    var bodyHeight = $document[0].body.clientHeight;\n\n    var popoverCSS = {\n      top: buttonOffset.top + buttonOffset.height,\n      left: buttonOffset.left + buttonOffset.width / 2 - popoverWidth / 2\n    };\n\n    if(popoverCSS.left < POPOVER_BODY_PADDING) {\n      popoverCSS.left = POPOVER_BODY_PADDING;\n    } else if(popoverCSS.left + popoverWidth + POPOVER_BODY_PADDING > bodyWidth) {\n      popoverCSS.left = bodyWidth - popoverWidth - POPOVER_BODY_PADDING;\n    }\n\n    var arrowEle = popoverEle[0].querySelector('.popover-arrow');\n    angular.element(arrowEle).css({\n      left: (buttonOffset.left - popoverCSS.left) + (buttonOffset.width / 2) - (arrowEle.offsetWidth / 2) + 'px'\n    });\n\n    popoverEle.css({\n      top: popoverCSS.top + 'px',\n      left: popoverCSS.left + 'px',\n      marginLeft: '0',\n      opacity: '1'\n    });\n\n  }\n\n  /**\n   * @ngdoc controller\n   * @name ionicPopover\n   * @module ionic\n   * @description\n   * Instantiated by the {@link ionic.service:$ionicPopover} service.\n   *\n   * Be sure to call [remove()](#remove) when you are done with each popover\n   * to clean it up and avoid memory leaks.\n   *\n   * Note: a popover will broadcast 'popover.shown', 'popover.hidden', and 'popover.removed' events from its originating\n   * scope, passing in itself as an event argument. Both the popover.removed and popover.hidden events are\n   * called when the popover is removed.\n   */\n\n  /**\n   * @ngdoc method\n   * @name ionicPopover#initialize\n   * @description Creates a new popover controller instance.\n   * @param {object} options An options object with the following properties:\n   *  - `{object=}` `scope` The scope to be a child of.\n   *    Default: creates a child of $rootScope.\n   *  - `{boolean=}` `focusFirstInput` Whether to autofocus the first input of\n   *    the popover when shown.  Default: false.\n   *  - `{boolean=}` `backdropClickToClose` Whether to close the popover on clicking the backdrop.\n   *    Default: true.\n   *  - `{boolean=}` `hardwareBackButtonClose` Whether the popover can be closed using the hardware\n   *    back button on Android and similar devices.  Default: true.\n   */\n\n  /**\n   * @ngdoc method\n   * @name ionicPopover#show\n   * @description Show this popover instance.\n   * @param {$event} $event The $event or target element which the popover should align\n   * itself next to.\n   * @returns {promise} A promise which is resolved when the popover is finished animating in.\n   */\n\n  /**\n   * @ngdoc method\n   * @name ionicPopover#hide\n   * @description Hide this popover instance.\n   * @returns {promise} A promise which is resolved when the popover is finished animating out.\n   */\n\n  /**\n   * @ngdoc method\n   * @name ionicPopover#remove\n   * @description Remove this popover instance from the DOM and clean up.\n   * @returns {promise} A promise which is resolved when the popover is finished animating out.\n   */\n\n  /**\n   * @ngdoc method\n   * @name ionicPopover#isShown\n   * @returns boolean Whether this popover is currently shown.\n   */\n\n  return {\n    /**\n     * @ngdoc method\n     * @name $ionicPopover#fromTemplate\n     * @param {string} templateString The template string to use as the popovers's\n     * content.\n     * @param {object} options Options to be passed to the initialize method.\n     * @returns {object} An instance of an {@link ionic.controller:ionicPopover}\n     * controller ($ionicPopover is built on top of $ionicPopover).\n     */\n    fromTemplate: function(templateString, options) {\n      return $ionicModal.fromTemplate(templateString, ionic.Utils.extend(options || {}, POPOVER_OPTIONS) );\n    },\n    /**\n     * @ngdoc method\n     * @name $ionicPopover#fromTemplateUrl\n     * @param {string} templateUrl The url to load the template from.\n     * @param {object} options Options to be passed to the initialize method.\n     * @returns {promise} A promise that will be resolved with an instance of\n     * an {@link ionic.controller:ionicPopover} controller ($ionicPopover is built on top of $ionicPopover).\n     */\n    fromTemplateUrl: function(url, options, _) {\n      return $ionicModal.fromTemplateUrl(url, options, ionic.Utils.extend(options || {}, POPOVER_OPTIONS) );\n    }\n  };\n\n}]);\n\n\nvar POPUP_TPL =\n  '<div class=\"popup\">' +\n    '<div class=\"popup-head\">' +\n      '<h3 class=\"popup-title\" ng-bind-html=\"title\"></h3>' +\n      '<h5 class=\"popup-sub-title\" ng-bind-html=\"subTitle\" ng-if=\"subTitle\"></h5>' +\n    '</div>' +\n    '<div class=\"popup-body\">' +\n    '</div>' +\n    '<div class=\"popup-buttons row\">' +\n      '<button ng-repeat=\"button in buttons\" ng-click=\"$buttonTapped(button, $event)\" class=\"button col\" ng-class=\"button.type || \\'button-default\\'\" ng-bind-html=\"button.text\"></button>' +\n    '</div>' +\n  '</div>';\n\n/**\n * @ngdoc service\n * @name $ionicPopup\n * @module ionic\n * @restrict E\n * @codepen zkmhJ\n * @description\n *\n * The Ionic Popup service allows programmatically creating and showing popup\n * windows that require the user to respond in order to continue.\n *\n * The popup system has support for more flexible versions of the built in `alert()`, `prompt()`,\n * and `confirm()` functions that users are used to, in addition to allowing popups with completely\n * custom content and look.\n *\n * An input can be given an `autofocus` attribute so it automatically receives focus when\n * the popup first shows. However, depending on certain use-cases this can cause issues with\n * the tap/click system, which is why Ionic prefers using the `autofocus` attribute as\n * an opt-in feature and not the default.\n *\n * @usage\n * A few basic examples, see below for details about all of the options available.\n *\n * ```js\n *angular.module('mySuperApp', ['ionic'])\n *.controller('PopupCtrl',function($scope, $ionicPopup, $timeout) {\n *\n * // Triggered on a button click, or some other target\n * $scope.showPopup = function() {\n *   $scope.data = {}\n *\n *   // An elaborate, custom popup\n *   var myPopup = $ionicPopup.show({\n *     template: '<input type=\"password\" ng-model=\"data.wifi\">',\n *     title: 'Enter Wi-Fi Password',\n *     subTitle: 'Please use normal things',\n *     scope: $scope,\n *     buttons: [\n *       { text: 'Cancel' },\n *       {\n *         text: '<b>Save</b>',\n *         type: 'button-positive',\n *         onTap: function(e) {\n *           if (!$scope.data.wifi) {\n *             //don't allow the user to close unless he enters wifi password\n *             e.preventDefault();\n *           } else {\n *             return $scope.data.wifi;\n *           }\n *         }\n *       },\n *     ]\n *   });\n *   myPopup.then(function(res) {\n *     console.log('Tapped!', res);\n *   });\n *   $timeout(function() {\n *      myPopup.close(); //close the popup after 3 seconds for some reason\n *   }, 3000);\n *  };\n *  // A confirm dialog\n *  $scope.showConfirm = function() {\n *    var confirmPopup = $ionicPopup.confirm({\n *      title: 'Consume Ice Cream',\n *      template: 'Are you sure you want to eat this ice cream?'\n *    });\n *    confirmPopup.then(function(res) {\n *      if(res) {\n *        console.log('You are sure');\n *      } else {\n *        console.log('You are not sure');\n *      }\n *    });\n *  };\n *\n *  // An alert dialog\n *  $scope.showAlert = function() {\n *    var alertPopup = $ionicPopup.alert({\n *      title: 'Don\\'t eat that!',\n *      template: 'It might taste good'\n *    });\n *    alertPopup.then(function(res) {\n *      console.log('Thank you for not eating my delicious ice cream cone');\n *    });\n *  };\n *});\n *```\n */\n\nIonicModule\n.factory('$ionicPopup', [\n  '$ionicTemplateLoader',\n  '$ionicBackdrop',\n  '$q',\n  '$timeout',\n  '$rootScope',\n  '$document',\n  '$compile',\n  '$ionicPlatform',\nfunction($ionicTemplateLoader, $ionicBackdrop, $q, $timeout, $rootScope, $document, $compile, $ionicPlatform) {\n  //TODO allow this to be configured\n  var config = {\n    stackPushDelay: 50\n  };\n  var popupStack = [];\n  var $ionicPopup = {\n    /**\n     * @ngdoc method\n     * @description\n     * Show a complex popup. This is the master show function for all popups.\n     *\n     * A complex popup has a `buttons` array, with each button having a `text` and `type`\n     * field, in addition to an `onTap` function.  The `onTap` function, called when\n     * the correspondingbutton on the popup is tapped, will by default close the popup\n     * and resolve the popup promise with its return value.  If you wish to prevent the\n     * default and keep the popup open on button tap, call `event.preventDefault()` on the\n     * passed in tap event.  Details below.\n     *\n     * @name $ionicPopup#show\n     * @param {object} options The options for the new popup, of the form:\n     *\n     * ```\n     * {\n     *   title: '', // String. The title of the popup.\n     *   subTitle: '', // String (optional). The sub-title of the popup.\n     *   template: '', // String (optional). The html template to place in the popup body.\n     *   templateUrl: '', // String (optional). The URL of an html template to place in the popup   body.\n     *   scope: null, // Scope (optional). A scope to link to the popup content.\n     *   buttons: [{ //Array[Object] (optional). Buttons to place in the popup footer.\n     *     text: 'Cancel',\n     *     type: 'button-default',\n     *     onTap: function(e) {\n     *       // e.preventDefault() will stop the popup from closing when tapped.\n     *       e.preventDefault();\n     *     }\n     *   }, {\n     *     text: 'OK',\n     *     type: 'button-positive',\n     *     onTap: function(e) {\n     *       // Returning a value will cause the promise to resolve with the given value.\n     *       return scope.data.response;\n     *     }\n     *   }]\n     * }\n     * ```\n     *\n     * @returns {object} A promise which is resolved when the popup is closed. Has an additional\n     * `close` function, which can be used to programmatically close the popup.\n     */\n    show: showPopup,\n\n    /**\n     * @ngdoc method\n     * @name $ionicPopup#alert\n     * @description Show a simple alert popup with a message and one button that the user can\n     * tap to close the popup.\n     *\n     * @param {object} options The options for showing the alert, of the form:\n     *\n     * ```\n     * {\n     *   title: '', // String. The title of the popup.\n     *   subTitle: '', // String (optional). The sub-title of the popup.\n     *   template: '', // String (optional). The html template to place in the popup body.\n     *   templateUrl: '', // String (optional). The URL of an html template to place in the popup   body.\n     *   okText: '', // String (default: 'OK'). The text of the OK button.\n     *   okType: '', // String (default: 'button-positive'). The type of the OK button.\n     * }\n     * ```\n     *\n     * @returns {object} A promise which is resolved when the popup is closed. Has one additional\n     * function `close`, which can be called with any value to programmatically close the popup\n     * with the given value.\n     */\n    alert: showAlert,\n\n    /**\n     * @ngdoc method\n     * @name $ionicPopup#confirm\n     * @description\n     * Show a simple confirm popup with a Cancel and OK button.\n     *\n     * Resolves the promise with true if the user presses the OK button, and false if the\n     * user presses the Cancel button.\n     *\n     * @param {object} options The options for showing the confirm popup, of the form:\n     *\n     * ```\n     * {\n     *   title: '', // String. The title of the popup.\n     *   subTitle: '', // String (optional). The sub-title of the popup.\n     *   template: '', // String (optional). The html template to place in the popup body.\n     *   templateUrl: '', // String (optional). The URL of an html template to place in the popup   body.\n     *   cancelText: '', // String (default: 'Cancel'). The text of the Cancel button.\n     *   cancelType: '', // String (default: 'button-default'). The type of the Cancel button.\n     *   okText: '', // String (default: 'OK'). The text of the OK button.\n     *   okType: '', // String (default: 'button-positive'). The type of the OK button.\n     * }\n     * ```\n     *\n     * @returns {object} A promise which is resolved when the popup is closed. Has one additional\n     * function `close`, which can be called with any value to programmatically close the popup\n     * with the given value.\n     */\n    confirm: showConfirm,\n\n    /**\n     * @ngdoc method\n     * @name $ionicPopup#prompt\n     * @description Show a simple prompt popup, which has an input, OK button, and Cancel button.\n     * Resolves the promise with the value of the input if the user presses OK, and with undefined\n     * if the user presses Cancel.\n     *\n     * ```javascript\n     *  $ionicPopup.prompt({\n     *    title: 'Password Check',\n     *    template: 'Enter your secret password',\n     *    inputType: 'password',\n     *    inputPlaceholder: 'Your password'\n     *  }).then(function(res) {\n     *    console.log('Your password is', res);\n     *  });\n     * ```\n     * @param {object} options The options for showing the prompt popup, of the form:\n     *\n     * ```\n     * {\n     *   title: '', // String. The title of the popup.\n     *   subTitle: '', // String (optional). The sub-title of the popup.\n     *   template: '', // String (optional). The html template to place in the popup body.\n     *   templateUrl: '', // String (optional). The URL of an html template to place in the popup   body.\n     *   inputType: // String (default: 'text'). The type of input to use\n     *   inputPlaceholder: // String (default: ''). A placeholder to use for the input.\n     *   cancelText: // String (default: 'Cancel'. The text of the Cancel button.\n     *   cancelType: // String (default: 'button-default'). The type of the Cancel button.\n     *   okText: // String (default: 'OK'). The text of the OK button.\n     *   okType: // String (default: 'button-positive'). The type of the OK button.\n     * }\n     * ```\n     *\n     * @returns {object} A promise which is resolved when the popup is closed. Has one additional\n     * function `close`, which can be called with any value to programmatically close the popup\n     * with the given value.\n     */\n    prompt: showPrompt,\n    /**\n     * @private for testing\n     */\n    _createPopup: createPopup,\n    _popupStack: popupStack\n  };\n\n  return $ionicPopup;\n\n  function createPopup(options) {\n    options = extend({\n      scope: null,\n      title: '',\n      buttons: [],\n    }, options || {});\n\n    var popupPromise = $ionicTemplateLoader.compile({\n      template: POPUP_TPL,\n      scope: options.scope && options.scope.$new(),\n      appendTo: $document[0].body\n    });\n    var contentPromise = options.templateUrl ?\n      $ionicTemplateLoader.load(options.templateUrl) :\n      $q.when(options.template || options.content || '');\n\n    return $q.all([popupPromise, contentPromise])\n    .then(function(results) {\n      var self = results[0];\n      var content = results[1];\n      var responseDeferred = $q.defer();\n\n      self.responseDeferred = responseDeferred;\n\n      //Can't ng-bind-html for popup-body because it can be insecure html\n      //(eg an input in case of prompt)\n      var body = jqLite(self.element[0].querySelector('.popup-body'));\n      if (content) {\n        body.html(content);\n        $compile(body.contents())(self.scope);\n      } else {\n        body.remove();\n      }\n\n      extend(self.scope, {\n        title: options.title,\n        buttons: options.buttons,\n        subTitle: options.subTitle,\n        $buttonTapped: function(button, event) {\n          var result = (button.onTap || angular.noop)(event);\n          event = event.originalEvent || event; //jquery events\n\n          if (!event.defaultPrevented) {\n            responseDeferred.resolve(result);\n          }\n        }\n      });\n\n      self.show = function() {\n        if (self.isShown) return;\n\n        self.isShown = true;\n        ionic.requestAnimationFrame(function() {\n          //if hidden while waiting for raf, don't show\n          if (!self.isShown) return;\n\n          //if the popup is taller than the window, make the popup body scrollable\n          if(self.element[0].offsetHeight > window.innerHeight - 20){\n            self.element[0].style.height = window.innerHeight - 20+'px';\n            popupBody = self.element[0].querySelectorAll('.popup-body');\n            popupHead = self.element[0].querySelectorAll('.popup-head');\n            popupButtons = self.element[0].querySelectorAll('.popup-buttons');\n            self.element.addClass('popup-tall');\n            newHeight = window.innerHeight - popupHead[0].offsetHeight - popupButtons[0].offsetHeight -20;\n            popupBody[0].style.height =  newHeight + 'px';\n          }\n\n          self.element.removeClass('popup-hidden');\n          self.element.addClass('popup-showing active');\n          ionic.DomUtil.centerElementByMarginTwice(self.element[0]);\n          focusInput(self.element);\n        });\n      };\n      self.hide = function(callback) {\n        callback = callback || angular.noop;\n        if (!self.isShown) return callback();\n\n        self.isShown = false;\n        self.element.removeClass('active');\n        self.element.addClass('popup-hidden');\n        $timeout(callback, 250);\n      };\n      self.remove = function() {\n        if (self.removed) return;\n\n        self.hide(function() {\n          self.element.remove();\n          self.scope.$destroy();\n        });\n\n        self.removed = true;\n      };\n\n      return self;\n    });\n  }\n\n  function onHardwareBackButton(e) {\n    popupStack[0] && popupStack[0].responseDeferred.resolve();\n  }\n\n  function showPopup(options) {\n    var popupPromise = $ionicPopup._createPopup(options);\n    var previousPopup = popupStack[0];\n\n    if (previousPopup) {\n      previousPopup.hide();\n    }\n\n    var resultPromise = $timeout(angular.noop, previousPopup ? config.stackPushDelay : 0)\n    .then(function() { return popupPromise; })\n    .then(function(popup) {\n      if (!previousPopup) {\n        //Add popup-open & backdrop if this is first popup\n        document.body.classList.add('popup-open');\n        $ionicBackdrop.retain();\n        $ionicPopup._backButtonActionDone = $ionicPlatform.registerBackButtonAction(\n          onHardwareBackButton,\n          PLATFORM_BACK_BUTTON_PRIORITY_POPUP\n        );\n      }\n      popupStack.unshift(popup);\n      popup.show();\n\n      //DEPRECATED: notify the promise with an object with a close method\n      popup.responseDeferred.notify({\n        close: resultPromise.close\n      });\n\n      return popup.responseDeferred.promise.then(function(result) {\n        var index = popupStack.indexOf(popup);\n        if (index !== -1) {\n          popupStack.splice(index, 1);\n        }\n        popup.remove();\n\n        var previousPopup = popupStack[0];\n        if (previousPopup) {\n          previousPopup.show();\n        } else {\n          //Remove popup-open & backdrop if this is last popup\n          document.body.classList.remove('popup-open');\n          ($ionicPopup._backButtonActionDone || angular.noop)();\n        }\n        // always release the backdrop since it has an internal backdrop counter\n        $ionicBackdrop.release();\n        return result;\n      });\n    });\n\n    function close(result) {\n      popupPromise.then(function(popup) {\n        if (!popup.removed) {\n          popup.responseDeferred.resolve(result);\n        }\n      });\n    }\n    resultPromise.close = close;\n\n    return resultPromise;\n  }\n\n  function focusInput(element) {\n    var focusOn = element[0].querySelector('[autofocus]');\n    if (focusOn) {\n      focusOn.focus();\n    }\n  }\n\n  function showAlert(opts) {\n    return showPopup( extend({\n      buttons: [{\n        text: opts.okText || 'OK',\n        type: opts.okType || 'button-positive',\n        onTap: function(e) {\n          return true;\n        }\n      }]\n    }, opts || {}) );\n  }\n\n  function showConfirm(opts) {\n    return showPopup( extend({\n      buttons: [{\n        text: opts.cancelText || 'Cancel' ,\n        type: opts.cancelType || 'button-default',\n        onTap: function(e) { return false; }\n      }, {\n        text: opts.okText || 'OK',\n        type: opts.okType || 'button-positive',\n        onTap: function(e) { return true; }\n      }]\n    }, opts || {}) );\n  }\n\n  function showPrompt(opts) {\n    var scope = $rootScope.$new(true);\n    scope.data = {};\n    return showPopup( extend({\n      template: '<input ng-model=\"data.response\" type=\"' + (opts.inputType || 'text') +\n        '\" placeholder=\"' + (opts.inputPlaceholder || '') + '\">',\n      scope: scope,\n      buttons: [{\n        text: opts.cancelText || 'Cancel',\n        type: opts.cancelType|| 'button-default',\n        onTap: function(e) {}\n      }, {\n        text: opts.okText || 'OK',\n        type: opts.okType || 'button-positive',\n        onTap: function(e) {\n          return scope.data.response || '';\n        }\n      }]\n    }, opts || {}) );\n  }\n}]);\n\n\n/**\n * @ngdoc service\n * @name $ionicPosition\n * @module ionic\n * @description\n * A set of utility methods that can be use to retrieve position of DOM elements.\n * It is meant to be used where we need to absolute-position DOM elements in\n * relation to other, existing elements (this is the case for tooltips, popovers, etc.).\n *\n * Adapted from [AngularUI Bootstrap](https://github.com/angular-ui/bootstrap/blob/master/src/position/position.js),\n * ([license](https://github.com/angular-ui/bootstrap/blob/master/LICENSE))\n */\nIonicModule\n.factory('$ionicPosition', ['$document', '$window', function ($document, $window) {\n\n  function getStyle(el, cssprop) {\n    if (el.currentStyle) { //IE\n      return el.currentStyle[cssprop];\n    } else if ($window.getComputedStyle) {\n      return $window.getComputedStyle(el)[cssprop];\n    }\n    // finally try and get inline style\n    return el.style[cssprop];\n  }\n\n  /**\n   * Checks if a given element is statically positioned\n   * @param element - raw DOM element\n   */\n  function isStaticPositioned(element) {\n    return (getStyle(element, 'position') || 'static' ) === 'static';\n  }\n\n  /**\n   * returns the closest, non-statically positioned parentOffset of a given element\n   * @param element\n   */\n  var parentOffsetEl = function (element) {\n    var docDomEl = $document[0];\n    var offsetParent = element.offsetParent || docDomEl;\n    while (offsetParent && offsetParent !== docDomEl && isStaticPositioned(offsetParent) ) {\n      offsetParent = offsetParent.offsetParent;\n    }\n    return offsetParent || docDomEl;\n  };\n\n  return {\n    /**\n     * @ngdoc method\n     * @name $ionicPosition#position\n     * @description Get the current coordinates of the element, relative to the offset parent.\n     * Read-only equivalent of [jQuery's position function](http://api.jquery.com/position/).\n     * @param {element} element The element to get the position of.\n     * @returns {object} Returns an object containing the properties top, left, width and height.\n     */\n    position: function (element) {\n      var elBCR = this.offset(element);\n      var offsetParentBCR = { top: 0, left: 0 };\n      var offsetParentEl = parentOffsetEl(element[0]);\n      if (offsetParentEl != $document[0]) {\n        offsetParentBCR = this.offset(angular.element(offsetParentEl));\n        offsetParentBCR.top += offsetParentEl.clientTop - offsetParentEl.scrollTop;\n        offsetParentBCR.left += offsetParentEl.clientLeft - offsetParentEl.scrollLeft;\n      }\n\n      var boundingClientRect = element[0].getBoundingClientRect();\n      return {\n        width: boundingClientRect.width || element.prop('offsetWidth'),\n        height: boundingClientRect.height || element.prop('offsetHeight'),\n        top: elBCR.top - offsetParentBCR.top,\n        left: elBCR.left - offsetParentBCR.left\n      };\n    },\n\n    /**\n     * @ngdoc method\n     * @name $ionicPosition#offset\n     * @description Get the current coordinates of the element, relative to the document.\n     * Read-only equivalent of [jQuery's offset function](http://api.jquery.com/offset/).\n     * @param {element} element The element to get the offset of.\n     * @returns {object} Returns an object containing the properties top, left, width and height.\n     */\n    offset: function (element) {\n      var boundingClientRect = element[0].getBoundingClientRect();\n      return {\n        width: boundingClientRect.width || element.prop('offsetWidth'),\n        height: boundingClientRect.height || element.prop('offsetHeight'),\n        top: boundingClientRect.top + ($window.pageYOffset || $document[0].documentElement.scrollTop),\n        left: boundingClientRect.left + ($window.pageXOffset || $document[0].documentElement.scrollLeft)\n      };\n    }\n\n  };\n}]);\n\n\n/**\n * @ngdoc service\n * @name $ionicScrollDelegate\n * @module ionic\n * @description\n * Delegate for controlling scrollViews (created by\n * {@link ionic.directive:ionContent} and\n * {@link ionic.directive:ionScroll} directives).\n *\n * Methods called directly on the $ionicScrollDelegate service will control all scroll\n * views.  Use the {@link ionic.service:$ionicScrollDelegate#$getByHandle $getByHandle}\n * method to control specific scrollViews.\n *\n * @usage\n *\n * ```html\n * <body ng-controller=\"MainCtrl\">\n *   <ion-content>\n *     <button ng-click=\"scrollTop()\">Scroll to Top!</button>\n *   </ion-content>\n * </body>\n * ```\n * ```js\n * function MainCtrl($scope, $ionicScrollDelegate) {\n *   $scope.scrollTop = function() {\n *     $ionicScrollDelegate.scrollTop();\n *   };\n * }\n * ```\n *\n * Example of advanced usage, with two scroll areas using `delegate-handle`\n * for fine control.\n *\n * ```html\n * <body ng-controller=\"MainCtrl\">\n *   <ion-content delegate-handle=\"mainScroll\">\n *     <button ng-click=\"scrollMainToTop()\">\n *       Scroll content to top!\n *     </button>\n *     <ion-scroll delegate-handle=\"small\" style=\"height: 100px;\">\n *       <button ng-click=\"scrollSmallToTop()\">\n *         Scroll small area to top!\n *       </button>\n *     </ion-scroll>\n *   </ion-content>\n * </body>\n * ```\n * ```js\n * function MainCtrl($scope, $ionicScrollDelegate) {\n *   $scope.scrollMainToTop = function() {\n *     $ionicScrollDelegate.$getByHandle('mainScroll').scrollTop();\n *   };\n *   $scope.scrollSmallToTop = function() {\n *     $ionicScrollDelegate.$getByHandle('small').scrollTop();\n *   };\n * }\n * ```\n */\nIonicModule\n.service('$ionicScrollDelegate', delegateService([\n  /**\n   * @ngdoc method\n   * @name $ionicScrollDelegate#resize\n   * @description Tell the scrollView to recalculate the size of its container.\n   */\n  'resize',\n  /**\n   * @ngdoc method\n   * @name $ionicScrollDelegate#scrollTop\n   * @param {boolean=} shouldAnimate Whether the scroll should animate.\n   */\n  'scrollTop',\n  /**\n   * @ngdoc method\n   * @name $ionicScrollDelegate#scrollBottom\n   * @param {boolean=} shouldAnimate Whether the scroll should animate.\n   */\n  'scrollBottom',\n  /**\n   * @ngdoc method\n   * @name $ionicScrollDelegate#scrollTo\n   * @param {number} left The x-value to scroll to.\n   * @param {number} top The y-value to scroll to.\n   * @param {boolean=} shouldAnimate Whether the scroll should animate.\n   */\n  'scrollTo',\n  /**\n   * @ngdoc method\n   * @name $ionicScrollDelegate#scrollBy\n   * @param {number} left The x-offset to scroll by.\n   * @param {number} top The y-offset to scroll by.\n   * @param {boolean=} shouldAnimate Whether the scroll should animate.\n   */\n  'scrollBy',\n  /**\n   * @ngdoc method\n   * @name $ionicScrollDelegate#getScrollPosition\n   * @returns {object} The scroll position of this view, with the following properties:\n   *  - `{number}` `left` The distance the user has scrolled from the left (starts at 0).\n   *  - `{number}` `top` The distance the user has scrolled from the top (starts at 0).\n   */\n  'getScrollPosition',\n  /**\n   * @ngdoc method\n   * @name $ionicScrollDelegate#anchorScroll\n   * @description Tell the scrollView to scroll to the element with an id\n   * matching window.location.hash.\n   *\n   * If no matching element is found, it will scroll to top.\n   *\n   * @param {boolean=} shouldAnimate Whether the scroll should animate.\n   */\n  'anchorScroll',\n  /**\n   * @ngdoc method\n   * @name $ionicScrollDelegate#getScrollView\n   * @returns {object} The scrollView associated with this delegate.\n   */\n  'getScrollView',\n  /**\n   * @ngdoc method\n   * @name $ionicScrollDelegate#rememberScrollPosition\n   * @description\n   * Will make it so, when this scrollView is destroyed (user leaves the page),\n   * the last scroll position the page was on will be saved, indexed by the\n   * given id.\n   *\n   * Note: for pages associated with a view under an ion-nav-view,\n   * rememberScrollPosition automatically saves their scroll.\n   *\n   * Related methods: scrollToRememberedPosition, forgetScrollPosition (below).\n   *\n   * In the following example, the scroll position of the ion-scroll element\n   * will persist, even when the user changes the toggle switch.\n   *\n   * ```html\n   * <ion-toggle ng-model=\"shouldShowScrollView\"></ion-toggle>\n   * <ion-scroll delegate-handle=\"myScroll\" ng-if=\"shouldShowScrollView\">\n   *   <div ng-controller=\"ScrollCtrl\">\n   *     <ion-list>\n   *       {% raw %}<ion-item ng-repeat=\"i in items\">{{i}}</ion-item>{% endraw %}\n   *     </ion-list>\n   *   </div>\n   * </ion-scroll>\n   * ```\n   * ```js\n   * function ScrollCtrl($scope, $ionicScrollDelegate) {\n   *   var delegate = $ionicScrollDelegate.$getByHandle('myScroll');\n   *\n   *   // Put any unique ID here.  The point of this is: every time the controller is recreated\n   *   // we want to load the correct remembered scroll values.\n   *   delegate.rememberScrollPosition('my-scroll-id');\n   *   delegate.scrollToRememberedPosition();\n   *   $scope.items = [];\n   *   for (var i=0; i<100; i++) {\n   *     $scope.items.push(i);\n   *   }\n   * }\n   * ```\n   *\n   * @param {string} id The id to remember the scroll position of this\n   * scrollView by.\n   */\n  'rememberScrollPosition',\n  /**\n   * @ngdoc method\n   * @name $ionicScrollDelegate#forgetScrollPosition\n   * @description\n   * Stop remembering the scroll position for this scrollView.\n   */\n  'forgetScrollPosition',\n  /**\n   * @ngdoc method\n   * @name $ionicScrollDelegate#scrollToRememberedPosition\n   * @description\n   * If this scrollView has an id associated with its scroll position,\n   * (through calling rememberScrollPosition), and that position is remembered,\n   * load the position and scroll to it.\n   * @param {boolean=} shouldAnimate Whether to animate the scroll.\n   */\n  'scrollToRememberedPosition'\n  /**\n   * @ngdoc method\n   * @name $ionicScrollDelegate#$getByHandle\n   * @param {string} handle\n   * @returns `delegateInstance` A delegate instance that controls only the\n   * scrollViews with `delegate-handle` matching the given handle.\n   *\n   * Example: `$ionicScrollDelegate.$getByHandle('my-handle').scrollTop();`\n   */\n]));\n\n\n/**\n * @ngdoc service\n * @name $ionicSideMenuDelegate\n * @module ionic\n *\n * @description\n * Delegate for controlling the {@link ionic.directive:ionSideMenus} directive.\n *\n * Methods called directly on the $ionicSideMenuDelegate service will control all side\n * menus.  Use the {@link ionic.service:$ionicSideMenuDelegate#$getByHandle $getByHandle}\n * method to control specific ionSideMenus instances.\n *\n * @usage\n *\n * ```html\n * <body ng-controller=\"MainCtrl\">\n *   <ion-side-menus>\n *     <ion-side-menu-content>\n *       Content!\n *       <button ng-click=\"toggleLeftSideMenu()\">\n *         Toggle Left Side Menu\n *       </button>\n *     </ion-side-menu-content>\n *     <ion-side-menu side=\"left\">\n *       Left Menu!\n *     <ion-side-menu>\n *   </ion-side-menus>\n * </body>\n * ```\n * ```js\n * function MainCtrl($scope, $ionicSideMenuDelegate) {\n *   $scope.toggleLeftSideMenu = function() {\n *     $ionicSideMenuDelegate.toggleLeft();\n *   };\n * }\n * ```\n */\nIonicModule\n.service('$ionicSideMenuDelegate', delegateService([\n  /**\n   * @ngdoc method\n   * @name $ionicSideMenuDelegate#toggleLeft\n   * @description Toggle the left side menu (if it exists).\n   * @param {boolean=} isOpen Whether to open or close the menu.\n   * Default: Toggles the menu.\n   */\n  'toggleLeft',\n  /**\n   * @ngdoc method\n   * @name $ionicSideMenuDelegate#toggleRight\n   * @description Toggle the right side menu (if it exists).\n   * @param {boolean=} isOpen Whether to open or close the menu.\n   * Default: Toggles the menu.\n   */\n  'toggleRight',\n  /**\n   * @ngdoc method\n   * @name $ionicSideMenuDelegate#getOpenRatio\n   * @description Gets the ratio of open amount over menu width. For example, a\n   * menu of width 100 that is opened by 50 pixels is 50% opened, and would return\n   * a ratio of 0.5.\n   *\n   * @returns {float} 0 if nothing is open, between 0 and 1 if left menu is\n   * opened/opening, and between 0 and -1 if right menu is opened/opening.\n   */\n  'getOpenRatio',\n  /**\n   * @ngdoc method\n   * @name $ionicSideMenuDelegate#isOpen\n   * @returns {boolean} Whether either the left or right menu is currently opened.\n   */\n  'isOpen',\n  /**\n   * @ngdoc method\n   * @name $ionicSideMenuDelegate#isOpenLeft\n   * @returns {boolean} Whether the left menu is currently opened.\n   */\n  'isOpenLeft',\n  /**\n   * @ngdoc method\n   * @name $ionicSideMenuDelegate#isOpenRight\n   * @returns {boolean} Whether the right menu is currently opened.\n   */\n  'isOpenRight',\n  /**\n   * @ngdoc method\n   * @name $ionicSideMenuDelegate#canDragContent\n   * @param {boolean=} canDrag Set whether the content can or cannot be dragged to open\n   * side menus.\n   * @returns {boolean} Whether the content can be dragged to open side menus.\n   */\n  'canDragContent',\n  /**\n   * @ngdoc method\n   * @name $ionicSideMenuDelegate#edgeDragThreshold\n   * @param {boolean|number=} value Set whether the content drag can only start if it is below a certain threshold distance from the edge of the screen. Accepts three different values:\n   *  - If a non-zero number is given, that many pixels is used as the maximum allowed distance from the edge that starts dragging the side menu.\n   *  - If true is given, the default number of pixels (25) is used as the maximum allowed distance.\n   *  - If false or 0 is given, the edge drag threshold is disabled, and dragging from anywhere on the content is allowed.\n   * @returns {boolean} Whether the drag can start only from within the edge of screen threshold.\n   */\n  'edgeDragThreshold',\n  /**\n   * @ngdoc method\n   * @name $ionicSideMenuDelegate#$getByHandle\n   * @param {string} handle\n   * @returns `delegateInstance` A delegate instance that controls only the\n   * {@link ionic.directive:ionSideMenus} directives with `delegate-handle` matching\n   * the given handle.\n   *\n   * Example: `$ionicSideMenuDelegate.$getByHandle('my-handle').toggleLeft();`\n   */\n]));\n\n\n/**\n * @ngdoc service\n * @name $ionicSlideBoxDelegate\n * @module ionic\n * @description\n * Delegate that controls the {@link ionic.directive:ionSlideBox} directive.\n *\n * Methods called directly on the $ionicSlideBoxDelegate service will control all slide boxes.  Use the {@link ionic.service:$ionicSlideBoxDelegate#$getByHandle $getByHandle}\n * method to control specific slide box instances.\n *\n * @usage\n *\n * ```html\n * <body ng-controller=\"MyCtrl\">\n *   <ion-slide-box>\n *     <ion-slide>\n *       <div class=\"box blue\">\n *         <button ng-click=\"nextSlide()\">Next slide!</button>\n *       </div>\n *     </ion-slide>\n *     <ion-slide>\n *       <div class=\"box red\">\n *         Slide 2!\n *       </div>\n *     </ion-slide>\n *   </ion-slide-box>\n * </body>\n * ```\n * ```js\n * function MyCtrl($scope, $ionicSlideBoxDelegate) {\n *   $scope.nextSlide = function() {\n *     $ionicSlideBoxDelegate.next();\n *   }\n * }\n * ```\n */\nIonicModule\n.service('$ionicSlideBoxDelegate', delegateService([\n  /**\n   * @ngdoc method\n   * @name $ionicSlideBoxDelegate#update\n   * @description\n   * Update the slidebox (for example if using Angular with ng-repeat,\n   * resize it for the elements inside).\n   */\n  'update',\n  /**\n   * @ngdoc method\n   * @name $ionicSlideBoxDelegate#slide\n   * @param {number} to The index to slide to.\n   * @param {number=} speed The number of milliseconds for the change to take.\n   */\n  'slide',\n  /**\n   * @ngdoc method\n   * @name $ionicSlideBoxDelegate#enableSlide\n   * @param {boolean=} shouldEnable Whether to enable sliding the slidebox.\n   * @returns {boolean} Whether sliding is enabled.\n   */\n  'enableSlide',\n  /**\n   * @ngdoc method\n   * @name $ionicSlideBoxDelegate#previous\n   * @description Go to the previous slide. Wraps around if at the beginning.\n   */\n  'previous',\n  /**\n   * @ngdoc method\n   * @name $ionicSlideBoxDelegate#next\n   * @description Go to the next slide. Wraps around if at the end.\n   */\n  'next',\n  /**\n   * @ngdoc method\n   * @name $ionicSlideBoxDelegate#stop\n   * @description Stop sliding. The slideBox will not move again until\n   * explicitly told to do so.\n   */\n  'stop',\n  /**\n   * @ngdoc method\n   * @name $ionicSlideBoxDelegate#start\n   * @description Start sliding again if the slideBox was stopped. \n   */\n  'start',\n  /**\n   * @ngdoc method\n   * @name $ionicSlideBoxDelegate#currentIndex\n   * @returns number The index of the current slide.\n   */\n  'currentIndex',\n  /**\n   * @ngdoc method\n   * @name $ionicSlideBoxDelegate#slidesCount\n   * @returns number The number of slides there are currently.\n   */\n  'slidesCount'\n  /**\n   * @ngdoc method\n   * @name $ionicSlideBoxDelegate#$getByHandle\n   * @param {string} handle\n   * @returns `delegateInstance` A delegate instance that controls only the\n   * {@link ionic.directive:ionSlideBox} directives with `delegate-handle` matching\n   * the given handle.\n   *\n   * Example: `$ionicSlideBoxDelegate.$getByHandle('my-handle').stop();`\n   */\n]));\n\n\n/**\n * @ngdoc service\n * @name $ionicTabsDelegate\n * @module ionic\n *\n * @description\n * Delegate for controlling the {@link ionic.directive:ionTabs} directive.\n *\n * Methods called directly on the $ionicTabsDelegate service will control all ionTabs\n * directives. Use the {@link ionic.service:$ionicTabsDelegate#$getByHandle $getByHandle}\n * method to control specific ionTabs instances.\n *\n * @usage\n *\n * ```html\n * <body ng-controller=\"MyCtrl\">\n *   <ion-tabs>\n *\n *     <ion-tab title=\"Tab 1\">\n *       Hello tab 1!\n *       <button ng-click=\"selectTabWithIndex(1)\">Select tab 2!</button>\n *     </ion-tab>\n *     <ion-tab title=\"Tab 2\">Hello tab 2!</ion-tab>\n *\n *   </ion-tabs>\n * </body>\n * ```\n * ```js\n * function MyCtrl($scope, $ionicTabsDelegate) {\n *   $scope.selectTabWithIndex = function(index) {\n *     $ionicTabsDelegate.select(index);\n *   }\n * }\n * ```\n */\nIonicModule\n.service('$ionicTabsDelegate', delegateService([\n  /**\n   * @ngdoc method\n   * @name $ionicTabsDelegate#select\n   * @description Select the tab matching the given index.\n   *\n   * @param {number} index Index of the tab to select.\n   * @param {boolean=} shouldChangeHistory Whether this selection should load this tab's\n   * view history (if it exists) and use it, or just load the default page.\n   * Default false.\n   * Hint: you probably want this to be true if you have an\n   * {@link ionic.directive:ionNavView} inside your tab.\n   */\n  'select',\n  /**\n   * @ngdoc method\n   * @name $ionicTabsDelegate#selectedIndex\n   * @returns `number` The index of the selected tab, or -1.\n   */\n  'selectedIndex'\n  /**\n   * @ngdoc method\n   * @name $ionicTabsDelegate#$getByHandle\n   * @param {string} handle\n   * @returns `delegateInstance` A delegate instance that controls only the\n   * {@link ionic.directive:ionTabs} directives with `delegate-handle` matching\n   * the given handle.\n   *\n   * Example: `$ionicTabsDelegate.$getByHandle('my-handle').select(0);`\n   */\n]));\n\n\nIonicModule\n.factory('$ionicTemplateLoader', [\n  '$compile',\n  '$controller',\n  '$http',\n  '$q',\n  '$rootScope',\n  '$templateCache',\nfunction($compile, $controller, $http, $q, $rootScope, $templateCache) {\n\n  return {\n    load: fetchTemplate,\n    compile: loadAndCompile\n  };\n\n  function fetchTemplate(url) {\n    return $http.get(url, {cache: $templateCache})\n    .then(function(response) {\n      return response.data && response.data.trim();\n    });\n  }\n\n  function loadAndCompile(options) {\n    options = extend({\n      template: '',\n      templateUrl: '',\n      scope: null,\n      controller: null,\n      locals: {},\n      appendTo: null\n    }, options || {});\n\n    var templatePromise = options.templateUrl ?\n      this.load(options.templateUrl) :\n      $q.when(options.template);\n\n    return templatePromise.then(function(template) {\n      var controller;\n      var scope = options.scope || $rootScope.$new();\n\n      //Incase template doesn't have just one root element, do this\n      var element = jqLite('<div>').html(template).contents();\n\n      if (options.controller) {\n        controller = $controller(\n          options.controller,\n          extend(options.locals, {\n            $scope: scope\n          })\n        );\n        element.children().data('$ngControllerController', controller);\n      }\n      if (options.appendTo) {\n        jqLite(options.appendTo).append(element);\n      }\n\n      $compile(element)(scope);\n\n      return {\n        element: element,\n        scope: scope\n      };\n    });\n  }\n\n}]);\n\n/**\n * @private\n * TODO document\n */\nIonicModule\n.run([\n  '$rootScope',\n  '$state',\n  '$location',\n  '$document',\n  '$animate',\n  '$ionicPlatform',\n  '$ionicViewService',\nfunction($rootScope, $state, $location, $document, $animate, $ionicPlatform, $ionicViewService) {\n\n  // init the variables that keep track of the view history\n  $rootScope.$viewHistory = {\n    histories: { root: { historyId: 'root', parentHistoryId: null, stack: [], cursor: -1 } },\n    views: {},\n    backView: null,\n    forwardView: null,\n    currentView: null,\n    disabledRegistrableTagNames: []\n  };\n\n  // set that these directives should not animate when transitioning\n  // to it. Instead, the children <tab> directives would animate\n  if ($ionicViewService.disableRegisterByTagName) {\n    $ionicViewService.disableRegisterByTagName('ion-tabs');\n    $ionicViewService.disableRegisterByTagName('ion-side-menus');\n  }\n\n  $rootScope.$on('viewState.changeHistory', function(e, data) {\n    if(!data) return;\n\n    var hist = (data.historyId ? $rootScope.$viewHistory.histories[ data.historyId ] : null );\n    if(hist && hist.cursor > -1 && hist.cursor < hist.stack.length) {\n      // the history they're going to already exists\n      // go to it's last view in its stack\n      var view = hist.stack[ hist.cursor ];\n      return view.go(data);\n    }\n\n    // this history does not have a URL, but it does have a uiSref\n    // figure out its URL from the uiSref\n    if(!data.url && data.uiSref) {\n      data.url = $state.href(data.uiSref);\n    }\n\n    if(data.url) {\n      // don't let it start with a #, messes with $location.url()\n      if(data.url.indexOf('#') === 0) {\n        data.url = data.url.replace('#', '');\n      }\n      if(data.url !== $location.url()) {\n        // we've got a good URL, ready GO!\n        $location.url(data.url);\n      }\n    }\n  });\n\n  // Set the document title when a new view is shown\n  $rootScope.$on('viewState.viewEnter', function(e, data) {\n    if(data && data.title) {\n      $document[0].title = data.title;\n    }\n  });\n\n  // Triggered when devices with a hardware back button (Android) is clicked by the user\n  // This is a Cordova/Phonegap platform specifc method\n  function onHardwareBackButton(e) {\n    if($rootScope.$viewHistory.backView) {\n      // there is a back view, go to it\n      $rootScope.$viewHistory.backView.go();\n    } else {\n      // there is no back view, so close the app instead\n      ionic.Platform.exitApp();\n    }\n    e.preventDefault();\n    return false;\n  }\n  $ionicPlatform.registerBackButtonAction(\n    onHardwareBackButton,\n    PLATFORM_BACK_BUTTON_PRIORITY_VIEW\n  );\n\n}])\n\n.factory('$ionicViewService', [\n  '$rootScope',\n  '$state',\n  '$location',\n  '$window',\n  '$injector',\n  '$animate',\n  '$ionicNavViewConfig',\nfunction($rootScope, $state, $location, $window, $injector, $animate, $ionicNavViewConfig) {\n\n  var View = function(){};\n  View.prototype.initialize = function(data) {\n    if(data) {\n      for(var name in data) this[name] = data[name];\n      return this;\n    }\n    return null;\n  };\n  View.prototype.go = function() {\n\n    if(this.stateName) {\n      return $state.go(this.stateName, this.stateParams);\n    }\n\n    if(this.url && this.url !== $location.url()) {\n\n      if($rootScope.$viewHistory.backView === this) {\n        return $window.history.go(-1);\n      } else if($rootScope.$viewHistory.forwardView === this) {\n        return $window.history.go(1);\n      }\n\n      $location.url(this.url);\n      return;\n    }\n\n    return null;\n  };\n  View.prototype.destroy = function() {\n    if(this.scope) {\n      this.scope.$destroy && this.scope.$destroy();\n      this.scope = null;\n    }\n  };\n\n  function createViewId(stateId) {\n    return ionic.Utils.nextUid();\n  }\n\n  return {\n\n    register: function(containerScope, element) {\n\n      var viewHistory = $rootScope.$viewHistory,\n          currentStateId = this.getCurrentStateId(),\n          hist = this._getHistory(containerScope),\n          currentView = viewHistory.currentView,\n          backView = viewHistory.backView,\n          forwardView = viewHistory.forwardView,\n          nextViewOptions = this.nextViewOptions(),\n          rsp = {\n            viewId: null,\n            navAction: null,\n            navDirection: null,\n            historyId: hist.historyId\n          };\n\n      if(element && !this.isTagNameRegistrable(element)) {\n        // first check to see if this element can even be registered as a view.\n        // Certain tags are only containers for views, but are not views themselves.\n        // For example, the <ion-tabs> directive contains a <ion-tab> and the <ion-tab> is the\n        // view, but the <ion-tabs> directive itself should not be registered as a view.\n        rsp.navAction = 'disabledByTagName';\n        return rsp;\n      }\n\n      if(currentView &&\n         currentView.stateId === currentStateId &&\n         currentView.historyId === hist.historyId) {\n        // do nothing if its the same stateId in the same history\n        rsp.navAction = 'noChange';\n        return rsp;\n      }\n\n      if(viewHistory.forcedNav) {\n        // we've previously set exactly what to do\n        ionic.Utils.extend(rsp, viewHistory.forcedNav);\n        $rootScope.$viewHistory.forcedNav = null;\n\n      } else if(backView && backView.stateId === currentStateId) {\n        // they went back one, set the old current view as a forward view\n        rsp.viewId = backView.viewId;\n        rsp.navAction = 'moveBack';\n        rsp.viewId = backView.viewId;\n        if(backView.historyId === currentView.historyId) {\n          // went back in the same history\n          rsp.navDirection = 'back';\n        }\n\n      } else if(forwardView && forwardView.stateId === currentStateId) {\n        // they went to the forward one, set the forward view to no longer a forward view\n        rsp.viewId = forwardView.viewId;\n        rsp.navAction = 'moveForward';\n        if(forwardView.historyId === currentView.historyId) {\n          rsp.navDirection = 'forward';\n        }\n\n        var parentHistory = this._getParentHistoryObj(containerScope);\n        if(forwardView.historyId && parentHistory.scope) {\n          // if a history has already been created by the forward view then make sure it stays the same\n          parentHistory.scope.$historyId = forwardView.historyId;\n          rsp.historyId = forwardView.historyId;\n        }\n\n      } else if(currentView && currentView.historyId !== hist.historyId &&\n                hist.cursor > -1 && hist.stack.length > 0 && hist.cursor < hist.stack.length &&\n                hist.stack[hist.cursor].stateId === currentStateId) {\n        // they just changed to a different history and the history already has views in it\n        rsp.viewId = hist.stack[hist.cursor].viewId;\n        rsp.navAction = 'moveBack';\n\n      } else {\n\n        // set a new unique viewId\n        rsp.viewId = createViewId(currentStateId);\n\n        if(currentView) {\n          // set the forward view if there is a current view (ie: if its not the first view)\n          currentView.forwardViewId = rsp.viewId;\n\n          // its only moving forward if its in the same history\n          if(hist.historyId === currentView.historyId) {\n            rsp.navDirection = 'forward';\n          }\n          rsp.navAction = 'newView';\n\n          // check if there is a new forward view\n          if(forwardView && currentView.stateId !== forwardView.stateId) {\n            // they navigated to a new view but the stack already has a forward view\n            // since its a new view remove any forwards that existed\n            var forwardsHistory = this._getHistoryById(forwardView.historyId);\n            if(forwardsHistory) {\n              // the forward has a history\n              for(var x=forwardsHistory.stack.length - 1; x >= forwardView.index; x--) {\n                // starting from the end destroy all forwards in this history from this point\n                forwardsHistory.stack[x].destroy();\n                forwardsHistory.stack.splice(x);\n              }\n            }\n          }\n\n        } else {\n          // there's no current view, so this must be the initial view\n          rsp.navAction = 'initialView';\n        }\n\n        // add the new view\n        viewHistory.views[rsp.viewId] = this.createView({\n          viewId: rsp.viewId,\n          index: hist.stack.length,\n          historyId: hist.historyId,\n          backViewId: (currentView && currentView.viewId ? currentView.viewId : null),\n          forwardViewId: null,\n          stateId: currentStateId,\n          stateName: this.getCurrentStateName(),\n          stateParams: this.getCurrentStateParams(),\n          url: $location.url(),\n        });\n\n        if (rsp.navAction == 'moveBack') {\n          //moveBack(from, to);\n          $rootScope.$emit('$viewHistory.viewBack', currentView.viewId, rsp.viewId);\n        }\n\n        // add the new view to this history's stack\n        hist.stack.push(viewHistory.views[rsp.viewId]);\n      }\n\n      if(nextViewOptions) {\n        if(nextViewOptions.disableAnimate) rsp.navDirection = null;\n        if(nextViewOptions.disableBack) viewHistory.views[rsp.viewId].backViewId = null;\n        this.nextViewOptions(null);\n      }\n\n      this.setNavViews(rsp.viewId);\n\n      hist.cursor = viewHistory.currentView.index;\n\n      return rsp;\n    },\n\n    setNavViews: function(viewId) {\n      var viewHistory = $rootScope.$viewHistory;\n\n      viewHistory.currentView = this._getViewById(viewId);\n      viewHistory.backView = this._getBackView(viewHistory.currentView);\n      viewHistory.forwardView = this._getForwardView(viewHistory.currentView);\n\n      $rootScope.$broadcast('$viewHistory.historyChange', {\n        showBack: (viewHistory.backView && viewHistory.backView.historyId === viewHistory.currentView.historyId)\n      });\n    },\n\n    registerHistory: function(scope) {\n      scope.$historyId = ionic.Utils.nextUid();\n    },\n\n    createView: function(data) {\n      var newView = new View();\n      return newView.initialize(data);\n    },\n\n    getCurrentView: function() {\n      return $rootScope.$viewHistory.currentView;\n    },\n\n    getBackView: function() {\n      return $rootScope.$viewHistory.backView;\n    },\n\n    getForwardView: function() {\n      return $rootScope.$viewHistory.forwardView;\n    },\n\n    getNavDirection: function() {\n      return $rootScope.$viewHistory.navDirection;\n    },\n\n    getCurrentStateName: function() {\n      return ($state && $state.current ? $state.current.name : null);\n    },\n\n    isCurrentStateNavView: function(navView) {\n      return ($state &&\n              $state.current &&\n              $state.current.views &&\n              $state.current.views[navView] ? true : false);\n    },\n\n    getCurrentStateParams: function() {\n      var rtn;\n      if ($state && $state.params) {\n        for(var key in $state.params) {\n          if($state.params.hasOwnProperty(key)) {\n            rtn = rtn || {};\n            rtn[key] = $state.params[key];\n          }\n        }\n      }\n      return rtn;\n    },\n\n    getCurrentStateId: function() {\n      var id;\n      if($state && $state.current && $state.current.name) {\n        id = $state.current.name;\n        if($state.params) {\n          for(var key in $state.params) {\n            if($state.params.hasOwnProperty(key) && $state.params[key]) {\n              id += \"_\" + key + \"=\" + $state.params[key];\n            }\n          }\n        }\n        return id;\n      }\n      // if something goes wrong make sure its got a unique stateId\n      return ionic.Utils.nextUid();\n    },\n\n    goToHistoryRoot: function(historyId) {\n      if(historyId) {\n        var hist = $rootScope.$viewHistory.histories[ historyId ];\n        if(hist && hist.stack.length) {\n          if($rootScope.$viewHistory.currentView && $rootScope.$viewHistory.currentView.viewId === hist.stack[0].viewId) {\n            return;\n          }\n          $rootScope.$viewHistory.forcedNav = {\n            viewId: hist.stack[0].viewId,\n            navAction: 'moveBack',\n            navDirection: 'back'\n          };\n          hist.stack[0].go();\n        }\n      }\n    },\n\n    _getViewById: function(viewId) {\n      return (viewId ? $rootScope.$viewHistory.views[ viewId ] : null );\n    },\n\n    _getBackView: function(view) {\n      return (view ? this._getViewById(view.backViewId) : null );\n    },\n\n    _getForwardView: function(view) {\n      return (view ? this._getViewById(view.forwardViewId) : null );\n    },\n\n    _getHistoryById: function(historyId) {\n      return (historyId ? $rootScope.$viewHistory.histories[ historyId ] : null );\n    },\n\n    _getHistory: function(scope) {\n      var histObj = this._getParentHistoryObj(scope);\n\n      if( !$rootScope.$viewHistory.histories[ histObj.historyId ] ) {\n        // this history object exists in parent scope, but doesn't\n        // exist in the history data yet\n        $rootScope.$viewHistory.histories[ histObj.historyId ] = {\n          historyId: histObj.historyId,\n          parentHistoryId: this._getParentHistoryObj(histObj.scope.$parent).historyId,\n          stack: [],\n          cursor: -1\n        };\n      }\n\n      return $rootScope.$viewHistory.histories[ histObj.historyId ];\n    },\n\n    _getParentHistoryObj: function(scope) {\n      var parentScope = scope;\n      while(parentScope) {\n        if(parentScope.hasOwnProperty('$historyId')) {\n          // this parent scope has a historyId\n          return { historyId: parentScope.$historyId, scope: parentScope };\n        }\n        // nothing found keep climbing up\n        parentScope = parentScope.$parent;\n      }\n      // no history for for the parent, use the root\n      return { historyId: 'root', scope: $rootScope };\n    },\n\n    nextViewOptions: function(opts) {\n      if(arguments.length) {\n        this._nextOpts = opts;\n      } else {\n        return this._nextOpts;\n      }\n    },\n\n    getRenderer: function(navViewElement, navViewAttrs, navViewScope) {\n      var service = this;\n      var registerData;\n      var doAnimation;\n\n      // climb up the DOM and see which animation classname to use, if any\n      var animationClass = getParentAnimationClass(navViewElement[0]);\n\n      function getParentAnimationClass(el) {\n        var className = '';\n        while(!className && el) {\n          className = el.getAttribute('animation');\n          el = el.parentElement;\n        }\n\n        // If they don't have an animation set explicitly, use the value in the config\n        if(!className) {\n          return $ionicNavViewConfig.transition;\n        }\n\n        return className;\n      }\n\n      function setAnimationClass() {\n        // add the animation CSS class we're gonna use to transition between views\n        if (animationClass) {\n          navViewElement[0].classList.add(animationClass);\n        }\n\n        if(registerData.navDirection === 'back') {\n          // animate like we're moving backward\n          navViewElement[0].classList.add('reverse');\n        } else {\n          // defaults to animate forward\n          // make sure the reverse class isn't already added\n          navViewElement[0].classList.remove('reverse');\n        }\n      }\n\n      return function(shouldAnimate) {\n\n        return {\n\n          enter: function(element) {\n\n            if(doAnimation && shouldAnimate) {\n              // enter with an animation\n              setAnimationClass();\n\n              element.addClass('ng-enter');\n              document.body.classList.add('disable-pointer-events');\n\n              $animate.enter(element, navViewElement, null, function() {\n                document.body.classList.remove('disable-pointer-events');\n                if (animationClass) {\n                  navViewElement[0].classList.remove(animationClass);\n                }\n              });\n              return;\n            } else if(!doAnimation) {\n              document.body.classList.remove('disable-pointer-events');\n            }\n\n            // no animation\n            navViewElement.append(element);\n          },\n\n          leave: function() {\n            var element = navViewElement.contents();\n\n            if(doAnimation && shouldAnimate) {\n              // leave with an animation\n              setAnimationClass();\n\n              $animate.leave(element, function() {\n                element.remove();\n              });\n              return;\n            }\n\n            // no animation\n            element.remove();\n          },\n\n          register: function(element) {\n            // register a new view\n            registerData = service.register(navViewScope, element);\n            doAnimation = (animationClass !== null && registerData.navDirection !== null);\n            return registerData;\n          }\n\n        };\n      };\n    },\n\n    disableRegisterByTagName: function(tagName) {\n      // not every element should animate betwee transitions\n      // For example, the <ion-tabs> directive should not animate when it enters,\n      // but instead the <ion-tabs> directve would just show, and its children\n      // <ion-tab> directives would do the animating, but <ion-tabs> itself is not a view\n      $rootScope.$viewHistory.disabledRegistrableTagNames.push(tagName.toUpperCase());\n    },\n\n    isTagNameRegistrable: function(element) {\n      // check if this element has a tagName (at its root, not recursively)\n      // that shouldn't be animated, like <ion-tabs> or <ion-side-menu>\n      var x, y, disabledTags = $rootScope.$viewHistory.disabledRegistrableTagNames;\n      for(x=0; x<element.length; x++) {\n        if(element[x].nodeType !== 1) continue;\n        for(y=0; y<disabledTags.length; y++) {\n          if(element[x].tagName === disabledTags[y]) {\n            return false;\n          }\n        }\n      }\n      return true;\n    },\n\n    clearHistory: function() {\n      var\n      histories = $rootScope.$viewHistory.histories,\n      currentView = $rootScope.$viewHistory.currentView;\n\n      if(histories) {\n        for(var historyId in histories) {\n\n          if(histories[historyId].stack) {\n            histories[historyId].stack = [];\n            histories[historyId].cursor = -1;\n          }\n\n          if(currentView && currentView.historyId === historyId) {\n            currentView.backViewId = null;\n            currentView.forwardViewId = null;\n            histories[historyId].stack.push(currentView);\n          } else if(histories[historyId].destroy) {\n            histories[historyId].destroy();\n          }\n\n        }\n      }\n\n      for(var viewId in $rootScope.$viewHistory.views) {\n        if(viewId !== currentView.viewId) {\n          delete $rootScope.$viewHistory.views[viewId];\n        }\n      }\n\n      if(currentView) {\n        this.setNavViews(currentView.viewId);\n      }\n    }\n\n  };\n\n}]);\n\n/**\n * @private\n */\nIonicModule.config([\n  '$provide',\nfunction($provide) {\n  function $LocationDecorator($location, $timeout) {\n\n    $location.__hash = $location.hash;\n    //Fix: when window.location.hash is set, the scrollable area\n    //found nearest to body's scrollTop is set to scroll to an element\n    //with that ID.\n    $location.hash = function(value) {\n      if (angular.isDefined(value)) {\n        $timeout(function() {\n          var scroll = document.querySelector('.scroll-content');\n          if (scroll)\n            scroll.scrollTop = 0;\n        }, 0, false);\n      }\n      return $location.__hash(value);\n    };\n\n    return $location;\n  }\n\n  $provide.decorator('$location', ['$delegate', '$timeout', $LocationDecorator]);\n}]);\n\n\n/**\n * @ngdoc service\n * @name $ionicListDelegate\n * @module ionic\n *\n * @description\n * Delegate for controlling the {@link ionic.directive:ionList} directive.\n *\n * Methods called directly on the $ionicListDelegate service will control all lists.\n * Use the {@link ionic.service:$ionicListDelegate#$getByHandle $getByHandle}\n * method to control specific ionList instances.\n *\n * @usage\n *\n * ````html\n * <ion-content ng-controller=\"MyCtrl\">\n *   <button class=\"button\" ng-click=\"showDeleteButtons()\"></button>\n *   <ion-list>\n *     <ion-item ng-repeat=\"i in items\">>\n *       {% raw %}Hello, {{i}}!{% endraw %}\n *       <ion-delete-button class=\"ion-minus-circled\"></ion-delete-button>\n *     </ion-item>\n *   </ion-list>\n * </ion-content>\n * ```\n * ```js\n * function MyCtrl($scope, $ionicListDelegate) {\n *   $scope.showDeleteButtons = function() {\n *     $ionicListDelegate.showDelete(true);\n *   };\n * }\n * ```\n */\nIonicModule\n.service('$ionicListDelegate', delegateService([\n  /**\n   * @ngdoc method\n   * @name $ionicListDelegate#showReorder\n   * @param {boolean=} showReorder Set whether or not this list is showing its reorder buttons.\n   * @returns {boolean} Whether the reorder buttons are shown.\n   */\n  'showReorder',\n  /**\n   * @ngdoc method\n   * @name $ionicListDelegate#showDelete\n   * @param {boolean=} showReorder Set whether or not this list is showing its delete buttons.\n   * @returns {boolean} Whether the delete buttons are shown.\n   */\n  'showDelete',\n  /**\n   * @ngdoc method\n   * @name $ionicListDelegate#canSwipeItems\n   * @param {boolean=} showReorder Set whether or not this list is able to swipe to show\n   * option buttons.\n   * @returns {boolean} Whether the list is able to swipe to show option buttons.\n   */\n  'canSwipeItems',\n  /**\n   * @ngdoc method\n   * @name $ionicListDelegate#closeOptionButtons\n   * @description Closes any option buttons on the list that are swiped open.\n   */\n  'closeOptionButtons',\n  /**\n   * @ngdoc method\n   * @name $ionicListDelegate#$getByHandle\n   * @param {string} handle\n   * @returns `delegateInstance` A delegate instance that controls only the\n   * {@link ionic.directive:ionList} directives with `delegate-handle` matching\n   * the given handle.\n   *\n   * Example: `$ionicListDelegate.$getByHandle('my-handle').showReorder(true);`\n   */\n]))\n\n.controller('$ionicList', [\n  '$scope',\n  '$attrs',\n  '$parse',\n  '$ionicListDelegate',\nfunction($scope, $attrs, $parse, $ionicListDelegate) {\n\n  var isSwipeable = true;\n  var isReorderShown = false;\n  var isDeleteShown = false;\n\n  var deregisterInstance = $ionicListDelegate._registerInstance(this, $attrs.delegateHandle);\n  $scope.$on('$destroy', deregisterInstance);\n\n  this.showReorder = function(show) {\n    if (arguments.length) {\n      isReorderShown = !!show;\n    }\n    return isReorderShown;\n  };\n\n  this.showDelete = function(show) {\n    if (arguments.length) {\n      isDeleteShown = !!show;\n    }\n    return isDeleteShown;\n  };\n\n  this.canSwipeItems = function(can) {\n    if (arguments.length) {\n      isSwipeable = !!can;\n    }\n    return isSwipeable;\n  };\n\n  this.closeOptionButtons = function() {\n    this.listView && this.listView.clearDragEffects();\n  };\n}]);\n\nIonicModule\n.controller('$ionicNavBar', [\n  '$scope',\n  '$element',\n  '$attrs',\n  '$ionicViewService',\n  '$animate',\n  '$compile',\n  '$ionicNavBarDelegate',\nfunction($scope, $element, $attrs, $ionicViewService, $animate, $compile, $ionicNavBarDelegate) {\n  //Let the parent know about our controller too so that children of\n  //sibling content elements can know about us\n  $element.parent().data('$ionNavBarController', this);\n\n  var deregisterInstance = $ionicNavBarDelegate._registerInstance(this, $attrs.delegateHandle);\n\n  $scope.$on('$destroy', deregisterInstance);\n\n  var self = this;\n\n  this.leftButtonsElement = jqLite(\n    $element[0].querySelector('.buttons.left-buttons')\n  );\n  this.rightButtonsElement = jqLite(\n    $element[0].querySelector('.buttons.right-buttons')\n  );\n\n  this.back = function() {\n    var backView = $ionicViewService.getBackView();\n    backView && backView.go();\n    return false;\n  };\n\n  this.align = function(direction) {\n    this._headerBarView.align(direction);\n  };\n\n  this.showBackButton = function(show) {\n    if (arguments.length) {\n      $scope.backButtonShown = !!show;\n    }\n    return !!($scope.hasBackButton && $scope.backButtonShown);\n  };\n\n  this.showBar = function(show) {\n    if (arguments.length) {\n      $scope.isInvisible = !show;\n      $scope.$parent.$hasHeader = !!show;\n    }\n    return !$scope.isInvisible;\n  };\n\n  this.setTitle = function(title) {\n    if ($scope.title === title) {\n      return;\n    }\n    $scope.oldTitle = $scope.title;\n    $scope.title = title || '';\n  };\n\n  this.changeTitle = function(title, direction) {\n    if ($scope.title === title) {\n      return false;\n    }\n    this.setTitle(title);\n    $scope.isReverse = direction == 'back';\n    $scope.shouldAnimate = !!direction;\n\n    if (!$scope.shouldAnimate) {\n      //We're done!\n      this._headerBarView.align();\n    } else {\n      this._animateTitles();\n    }\n    return true;\n  };\n\n  this.getTitle = function() {\n    return $scope.title || '';\n  };\n\n  this.getPreviousTitle = function() {\n    return $scope.oldTitle || '';\n  };\n\n  /**\n   * Exposed for testing\n   */\n  this._animateTitles = function() {\n    var oldTitleEl, newTitleEl, currentTitles;\n\n    //If we have any title right now\n    //(or more than one, they could be transitioning on switch),\n    //replace the first one with an oldTitle element\n    currentTitles = $element[0].querySelectorAll('.title');\n    if (currentTitles.length) {\n      oldTitleEl = $compile('<h1 class=\"title\" ng-bind-html=\"oldTitle\"></h1>')($scope);\n      jqLite(currentTitles[0]).replaceWith(oldTitleEl);\n    }\n    //Compile new title\n    newTitleEl = $compile('<h1 class=\"title invisible\" ng-bind-html=\"title\"></h1>')($scope);\n\n    //Animate in on next frame\n    ionic.requestAnimationFrame(function() {\n\n      oldTitleEl && $animate.leave(jqLite(oldTitleEl));\n\n      var insert = oldTitleEl && jqLite(oldTitleEl) || null;\n      $animate.enter(newTitleEl, $element, insert, function() {\n        self._headerBarView.align();\n      });\n\n      //Cleanup any old titles leftover (besides the one we already did replaceWith on)\n      forEach(currentTitles, function(el) {\n        if (el && el.parentNode) {\n          //Use .remove() to cleanup things like .data()\n          jqLite(el).remove();\n        }\n      });\n\n      //$apply so bindings fire\n      $scope.$digest();\n\n      //Stop flicker of new title on ios7\n      ionic.requestAnimationFrame(function() {\n        newTitleEl[0].classList.remove('invisible');\n      });\n    });\n  };\n}]);\n\n\n/**\n * @private\n */\nIonicModule\n\n.factory('$$scrollValueCache', function() {\n  return {};\n})\n\n.controller('$ionicScroll', [\n  '$scope',\n  'scrollViewOptions',\n  '$timeout',\n  '$window',\n  '$$scrollValueCache',\n  '$location',\n  '$rootScope',\n  '$document',\n  '$ionicScrollDelegate',\nfunction($scope, scrollViewOptions, $timeout, $window, $$scrollValueCache, $location, $rootScope, $document, $ionicScrollDelegate) {\n\n  var self = this;\n\n  this._scrollViewOptions = scrollViewOptions; //for testing\n\n  var element = this.element = scrollViewOptions.el;\n  var $element = this.$element = jqLite(element);\n  var scrollView = this.scrollView = new ionic.views.Scroll(scrollViewOptions);\n\n  //Attach self to element as a controller so other directives can require this controller\n  //through `require: '$ionicScroll'\n  //Also attach to parent so that sibling elements can require this\n  ($element.parent().length ? $element.parent() : $element)\n    .data('$$ionicScrollController', this);\n\n  var deregisterInstance = $ionicScrollDelegate._registerInstance(\n    this, scrollViewOptions.delegateHandle\n  );\n\n  if (!angular.isDefined(scrollViewOptions.bouncing)) {\n    ionic.Platform.ready(function() {\n      scrollView.options.bouncing = true;\n\n      if(ionic.Platform.isAndroid()) {\n        // No bouncing by default on Android\n        scrollView.options.bouncing = false;\n        // Faster scroll decel\n        scrollView.options.deceleration = 0.95;\n      } else {\n      }\n    });\n  }\n\n  var resize = angular.bind(scrollView, scrollView.resize);\n  ionic.on('resize', resize, $window);\n\n  // set by rootScope listener if needed\n  var backListenDone = angular.noop;\n\n  $scope.$on('$destroy', function() {\n    deregisterInstance();\n    scrollView.__removeEventHandlers();\n    ionic.off('resize', resize, $window);\n    $window.removeEventListener('resize', resize);\n    backListenDone();\n    if (self._rememberScrollId) {\n      $$scrollValueCache[self._rememberScrollId] = scrollView.getValues();\n    }\n  });\n\n  $element.on('scroll', function(e) {\n    var detail = (e.originalEvent || e).detail || {};\n    $scope.$onScroll && $scope.$onScroll({\n      event: e,\n      scrollTop: detail.scrollTop || 0,\n      scrollLeft: detail.scrollLeft || 0\n    });\n  });\n\n  $scope.$on('$viewContentLoaded', function(e, historyData) {\n    //only the top-most scroll area under a view should remember that view's\n    //scroll position\n    if (e.defaultPrevented) { return; }\n    e.preventDefault();\n\n    var viewId = historyData && historyData.viewId || $scope.$historyId;\n    if (viewId) {\n      $timeout(function() {\n        self.rememberScrollPosition(viewId);\n        self.scrollToRememberedPosition();\n\n        backListenDone = $rootScope.$on('$viewHistory.viewBack', function(e, fromViewId, toViewId) {\n          //When going back from this view, forget its saved scroll position\n          if (viewId === fromViewId) {\n            self.forgetScrollPosition();\n          }\n        });\n      }, 0, false);\n    }\n  });\n\n  $timeout(function() {\n    scrollView.run();\n  });\n\n  this._rememberScrollId = null;\n\n  this.getScrollView = function() {\n    return this.scrollView;\n  };\n\n  this.getScrollPosition = function() {\n    return this.scrollView.getValues();\n  };\n\n  this.resize = function() {\n    return $timeout(resize);\n  };\n\n  this.scrollTop = function(shouldAnimate) {\n    this.resize().then(function() {\n      scrollView.scrollTo(0, 0, !!shouldAnimate);\n    });\n  };\n\n  this.scrollBottom = function(shouldAnimate) {\n    this.resize().then(function() {\n      var max = scrollView.getScrollMax();\n      scrollView.scrollTo(max.left, max.top, !!shouldAnimate);\n    });\n  };\n\n  this.scrollTo = function(left, top, shouldAnimate) {\n    this.resize().then(function() {\n      scrollView.scrollTo(left, top, !!shouldAnimate);\n    });\n  };\n\n  this.scrollBy = function(left, top, shouldAnimate) {\n    this.resize().then(function() {\n      scrollView.scrollBy(left, top, !!shouldAnimate);\n    });\n  };\n\n  this.anchorScroll = function(shouldAnimate) {\n    this.resize().then(function() {\n      var hash = $location.hash();\n      var elm = hash && $document[0].getElementById(hash);\n      if (!(hash && elm)) {\n        scrollView.scrollTo(0,0, !!shouldAnimate);\n        return;\n      }\n      var curElm = elm;\n      var scrollLeft = 0, scrollTop = 0, levelsClimbed = 0;\n      do {\n        if(curElm !== null)scrollLeft += curElm.offsetLeft;\n        if(curElm !== null)scrollTop += curElm.offsetTop;\n        curElm = curElm.offsetParent;\n        levelsClimbed++;\n      } while (curElm.attributes != self.element.attributes && curElm.offsetParent);\n      scrollView.scrollTo(scrollLeft, scrollTop, !!shouldAnimate);\n    });\n  };\n\n  this.rememberScrollPosition = function(id) {\n    if (!id) {\n      throw new Error(\"Must supply an id to remember the scroll by!\");\n    }\n    this._rememberScrollId = id;\n  };\n  this.forgetScrollPosition = function() {\n    delete $$scrollValueCache[this._rememberScrollId];\n    this._rememberScrollId = null;\n  };\n  this.scrollToRememberedPosition = function(shouldAnimate) {\n    var values = $$scrollValueCache[this._rememberScrollId];\n    if (values) {\n      this.resize().then(function() {\n        scrollView.scrollTo(+values.left, +values.top, shouldAnimate);\n      });\n    }\n  };\n\n  /**\n   * @private\n   */\n  this._setRefresher = function(refresherScope, refresherElement) {\n    var refresher = this.refresher = refresherElement;\n    var refresherHeight = self.refresher.clientHeight || 0;\n    scrollView.activatePullToRefresh(refresherHeight, function() {\n      refresher.classList.add('active');\n      refresherScope.$onPulling();\n    }, function() {\n      refresher.classList.remove('refreshing');\n      refresher.classList.remove('active');\n    }, function() {\n      refresher.classList.add('refreshing');\n      refresherScope.$onRefresh();\n    });\n  };\n}]);\n\n\nIonicModule\n.controller('$ionicSideMenus', [\n  '$scope',\n  '$attrs',\n  '$ionicSideMenuDelegate',\n  '$ionicPlatform',\nfunction($scope, $attrs, $ionicSideMenuDelegate, $ionicPlatform) {\n  var self = this;\n  extend(this, ionic.controllers.SideMenuController.prototype);\n\n  this.$scope = $scope;\n\n  ionic.controllers.SideMenuController.call(this, {\n    left: { width: 275 },\n    right: { width: 275 }\n  });\n\n  this.canDragContent = function(canDrag) {\n    if (arguments.length) {\n      $scope.dragContent = !!canDrag;\n    }\n    return $scope.dragContent;\n  };\n\n  this.edgeThreshold = 25;\n  this.edgeThresholdEnabled = false;\n  this.edgeDragThreshold = function(value) {\n    if (arguments.length) {\n      if (angular.isNumber(value) && value > 0) {\n        this.edgeThreshold = value;\n        this.edgeThresholdEnabled = true;\n      } else {\n        this.edgeThresholdEnabled = !!value;\n      }\n    }\n    return this.edgeThresholdEnabled;\n  };\n\n  this.isDraggableTarget = function(e) {\n    //Only restrict edge when sidemenu is closed and restriction is enabled\n    var shouldOnlyAllowEdgeDrag = self.edgeThresholdEnabled && !self.isOpen();\n    var startX = e.gesture.startEvent && e.gesture.startEvent.center &&\n      e.gesture.startEvent.center.pageX;\n\n    var dragIsWithinBounds = !shouldOnlyAllowEdgeDrag ||\n      startX <= self.edgeThreshold ||\n      startX >= self.content.offsetWidth - self.edgeThreshold;\n\n    return ($scope.dragContent || self.isOpen()) &&\n           dragIsWithinBounds &&\n           !e.gesture.srcEvent.defaultPrevented &&\n           !e.target.tagName.match(/input|textarea|select|object|embed/i) &&\n           !e.target.isContentEditable &&\n           !(e.target.dataset ? e.target.dataset.preventScroll : e.target.getAttribute('data-prevent-default') == 'true');\n  };\n\n  $scope.sideMenuContentTranslateX = 0;\n\n\n  var deregisterBackButtonAction = angular.noop;\n  var closeSideMenu = angular.bind(this, this.close);\n  $scope.$watch(function() {\n    return self.getOpenAmount() !== 0;\n  }, function(isOpen) {\n    deregisterBackButtonAction();\n    if (isOpen) {\n      deregisterBackButtonAction = $ionicPlatform.registerBackButtonAction(\n        closeSideMenu,\n        PLATFORM_BACK_BUTTON_PRIORITY_SIDE_MENU\n      );\n    }\n  });\n\n  var deregisterInstance = $ionicSideMenuDelegate._registerInstance(\n    this, $attrs.delegateHandle\n  );\n  $scope.$on('$destroy', function() {\n    deregisterInstance();\n    deregisterBackButtonAction();\n  });\n}]);\n\nIonicModule\n.controller('$ionicTab', [\n  '$scope',\n  '$ionicViewService',\n  '$attrs',\n  '$location',\n  '$state',\nfunction($scope, $ionicViewService, $attrs, $location, $state) {\n  this.$scope = $scope;\n\n  //All of these exposed for testing\n  this.hrefMatchesState = function() {\n    return $attrs.href && $location.path().indexOf(\n      $attrs.href.replace(/^#/, '').replace(/\\/$/, '')\n    ) === 0;\n  };\n  this.srefMatchesState = function() {\n    return $attrs.uiSref && $state.includes( $attrs.uiSref.split('(')[0] );\n  };\n  this.navNameMatchesState = function() {\n    return this.navViewName && $ionicViewService.isCurrentStateNavView(this.navViewName);\n  };\n\n  this.tabMatchesState = function() {\n    return this.hrefMatchesState() || this.srefMatchesState() || this.navNameMatchesState();\n  };\n}]);\n\nIonicModule\n.controller('$ionicTabs', [\n  '$scope', \n  '$ionicViewService', \n  '$element', \nfunction($scope, $ionicViewService, $element) {\n  var _selectedTab = null;\n  var self = this;\n  self.tabs = [];\n\n  self.selectedIndex = function() {\n    return self.tabs.indexOf(_selectedTab);\n  };\n  self.selectedTab = function() {\n    return _selectedTab;\n  };\n\n  self.add = function(tab) {\n    $ionicViewService.registerHistory(tab);\n    self.tabs.push(tab);\n    if(self.tabs.length === 1) {\n      self.select(tab);\n    }\n  };\n\n  self.remove = function(tab) {\n    var tabIndex = self.tabs.indexOf(tab);\n    if (tabIndex === -1) {\n      return;\n    }\n    //Use a field like '$tabSelected' so developers won't accidentally set it in controllers etc\n    if (tab.$tabSelected) {\n      self.deselect(tab);\n      //Try to select a new tab if we're removing a tab\n      if (self.tabs.length === 1) {\n        //do nothing if there are no other tabs to select\n      } else {\n        //Select previous tab if it's the last tab, else select next tab\n        var newTabIndex = tabIndex === self.tabs.length - 1 ? tabIndex - 1 : tabIndex + 1;\n        self.select(self.tabs[newTabIndex]);\n      }\n    }\n    self.tabs.splice(tabIndex, 1);\n  };\n\n  self.deselect = function(tab) {\n    if (tab.$tabSelected) {\n      _selectedTab = null;\n      tab.$tabSelected = false;\n      (tab.onDeselect || angular.noop)();\n    }\n  };\n\n  self.select = function(tab, shouldEmitEvent) {\n    var tabIndex;\n    if (angular.isNumber(tab)) {\n      tabIndex = tab;\n      tab = self.tabs[tabIndex];\n    } else {\n      tabIndex = self.tabs.indexOf(tab);\n    }\n    if (!tab || tabIndex == -1) {\n      throw new Error('Cannot select tab \"' + tabIndex + '\"!');\n    }\n\n    if (_selectedTab && _selectedTab.$historyId == tab.$historyId) {\n      if (shouldEmitEvent) {\n        $ionicViewService.goToHistoryRoot(tab.$historyId);\n      }\n    } else {\n      forEach(self.tabs, function(tab) {\n        self.deselect(tab);\n      });\n\n      _selectedTab = tab;\n      //Use a funny name like $tabSelected so the developer doesn't overwrite the var in a child scope\n      tab.$tabSelected = true;\n      (tab.onSelect || angular.noop)();\n\n      if (shouldEmitEvent) {\n        var viewData = {\n          type: 'tab',\n          tabIndex: tabIndex,\n          historyId: tab.$historyId,\n          navViewName: tab.navViewName,\n          hasNavView: !!tab.navViewName,\n          title: tab.title,\n          //Skip the first character of href if it's #\n          url: tab.href,\n          uiSref: tab.uiSref\n        };\n        $scope.$emit('viewState.changeHistory', viewData);\n      }\n    }\n  };\n}]);\n\n\n/*\n * We don't document the ionActionSheet directive, we instead document\n * the $ionicActionSheet service\n */\nIonicModule\n.directive('ionActionSheet', ['$document', function($document) {\n  return {\n    restrict: 'E',\n    scope: true,\n    replace: true,\n    link: function($scope, $element){\n      var keyUp = function(e) {\n        if(e.which == 27) {\n          $scope.cancel();\n          $scope.$apply();\n        }\n      };\n\n      var backdropClick = function(e) {\n        if(e.target == $element[0]) {\n          $scope.cancel();\n          $scope.$apply();\n        }\n      };\n      $scope.$on('$destroy', function() {\n        $element.remove();\n        $document.unbind('keyup', keyUp);\n      });\n\n      $document.bind('keyup', keyUp);\n      $element.bind('click', backdropClick);\n    },\n    template: '<div class=\"action-sheet-backdrop\">' +\n                '<div class=\"action-sheet-wrapper\">' +\n                  '<div class=\"action-sheet\">' +\n                    '<div class=\"action-sheet-group\">' +\n                      '<div class=\"action-sheet-title\" ng-if=\"titleText\" ng-bind-html=\"titleText\"></div>' +\n                      '<button class=\"button\" ng-click=\"buttonClicked($index)\" ng-repeat=\"button in buttons\" ng-bind-html=\"button.text\"></button>' +\n                    '</div>' +\n                    '<div class=\"action-sheet-group\" ng-if=\"destructiveText\">' +\n                      '<button class=\"button destructive\" ng-click=\"destructiveButtonClicked()\" ng-bind-html=\"destructiveText\"></button>' +\n                    '</div>' +\n                    '<div class=\"action-sheet-group\" ng-if=\"cancelText\">' +\n                      '<button class=\"button\" ng-click=\"cancel()\" ng-bind-html=\"cancelText\"></button>' +\n                    '</div>' +\n                  '</div>' +\n                '</div>' +\n              '</div>'\n  };\n}]);\n\n\n/**\n * @ngdoc directive\n * @name ionCheckbox\n * @module ionic\n * @restrict E\n * @codepen hqcju\n * @description\n * The checkbox is no different than the HTML checkbox input, except it's styled differently.\n *\n * The checkbox behaves like any [AngularJS checkbox](http://docs.angularjs.org/api/ng/input/input[checkbox]).\n *\n * @usage\n * ```html\n * <ion-checkbox ng-model=\"isChecked\">Checkbox Label</ion-checkbox>\n * ```\n */\n\nIonicModule\n.directive('ionCheckbox', function() {\n  return {\n    restrict: 'E',\n    replace: true,\n    require: '?ngModel',\n    transclude: true,\n    template:\n      '<label class=\"item item-checkbox\">' +\n        '<div class=\"checkbox checkbox-input-hidden disable-pointer-events\">' +\n          '<input type=\"checkbox\">' +\n          '<i class=\"checkbox-icon\"></i>' +\n        '</div>' +\n        '<div class=\"item-content disable-pointer-events\" ng-transclude></div>' +\n      '</label>',\n    compile: function(element, attr) {\n      var input = element.find('input');\n      forEach({\n        'name': attr.name,\n        'ng-value': attr.ngValue,\n        'ng-model': attr.ngModel,\n        'ng-checked': attr.ngChecked,\n        'ng-disabled': attr.ngDisabled,\n        'ng-true-value': attr.ngTrueValue,\n        'ng-false-value': attr.ngFalseValue,\n        'ng-change': attr.ngChange\n      }, function(value, name) {\n        if (isDefined(value)) {\n          input.attr(name, value);\n        }\n      });\n    }\n\n  };\n});\n\n/**\n * @ngdoc directive\n * @module ionic\n * @name collectionRepeat\n * @restrict A\n * @codepen mFygh\n * @description\n * `collection-repeat` is a directive that allows you to render lists with\n * thousands of items in them, and experience little to no performance penalty.\n *\n * Demo:\n *\n * The directive renders onto the screen only the items that should be currently visible.\n * So if you have 1,000 items in your list but only ten fit on your screen,\n * collection-repeat will only render into the DOM the ten that are in the current\n * scroll position.\n *\n * Here are a few things to keep in mind while using collection-repeat:\n *\n * 1. The data supplied to collection-repeat must be an array.\n * 2. You must explicitly tell the directive what size your items will be in the DOM, using directive attributes.\n * Pixel amounts or percentages are allowed (see below).\n * 3. The elements rendered will be absolutely positioned: be sure to let your CSS work with\n * this (see below).\n * 4. Each collection-repeat list will take up all of its parent scrollView's space.\n * If you wish to have multiple lists on one page, put each list within its own\n * {@link ionic.directive:ionScroll ionScroll} container.\n * 5. You should not use the ng-show and ng-hide directives on your ion-content/ion-scroll elements that\n * have a collection-repeat inside.  ng-show and ng-hide apply the `display: none` css rule to the content's\n * style, causing the scrollView to read the width and height of the content as 0.  Resultingly,\n * collection-repeat will render elements that have just been un-hidden incorrectly.\n *\n *\n * @usage\n *\n * #### Basic Usage (single rows of items)\n *\n * Notice two things here: we use ng-style to set the height of the item to match\n * what the repeater thinks our item height is.  Additionally, we add a css rule\n * to make our item stretch to fit the full screen (since it will be absolutely\n * positioned).\n *\n * ```html\n * <ion-content ng-controller=\"ContentCtrl\">\n *   <div class=\"list\">\n *     <div class=\"item my-item\"\n *       collection-repeat=\"item in items\"\n *       collection-item-width=\"'100%'\"\n *       collection-item-height=\"getItemHeight(item, $index)\"\n *       ng-style=\"{height: getItemHeight(item, $index)}\">\n *       {% raw %}{{item}}{% endraw %}\n *     </div>\n *   </div>\n * </div>\n * ```\n * ```js\n * function ContentCtrl($scope) {\n *   $scope.items = [];\n *   for (var i = 0; i < 1000; i++) {\n *     $scope.items.push('Item ' + i);\n *   }\n *\n *   $scope.getItemHeight = function(item, index) {\n *     //Make evenly indexed items be 10px taller, for the sake of example\n *     return (index % 2) === 0 ? 50 : 60;\n *   };\n * }\n * ```\n * ```css\n * .my-item {\n *   left: 0;\n *   right: 0;\n * }\n * ```\n *\n * #### Grid Usage (three items per row)\n *\n * ```html\n * <ion-content>\n *   <div class=\"item item-avatar my-image-item\"\n *     collection-repeat=\"image in images\"\n *     collection-item-width=\"'33%'\"\n *     collection-item-height=\"'33%'\">\n *     <img ng-src=\"{{image.src}}\">\n *   </div>\n * </ion-content>\n * ```\n * Percentage of total visible list dimensions. This example shows a 3 by 3 matrix that fits on the screen (3 rows and 3 colums). Note that dimensions are used in the creation of the element and therefore a measurement of the item cannnot be used as an input dimension.\n * ```css\n * .my-image-item img {\n *   height: 33%;\n *   width: 33%;\n * }\n * ```\n *\n * @param {expression} collection-repeat The expression indicating how to enumerate a collection. These\n *   formats are currently supported:\n *\n *   * `variable in expression` – where variable is the user defined loop variable and `expression`\n *     is a scope expression giving the collection to enumerate.\n *\n *     For example: `album in artist.albums`.\n *\n *   * `variable in expression track by tracking_expression` – You can also provide an optional tracking function\n *     which can be used to associate the objects in the collection with the DOM elements. If no tracking function\n *     is specified the collection-repeat associates elements by identity in the collection. It is an error to have\n *     more than one tracking function to resolve to the same key. (This would mean that two distinct objects are\n *     mapped to the same DOM element, which is not possible.)  Filters should be applied to the expression,\n *     before specifying a tracking expression.\n *\n *     For example: `item in items` is equivalent to `item in items track by $id(item)'. This implies that the DOM elements\n *     will be associated by item identity in the array.\n *\n *     For example: `item in items track by $id(item)`. A built in `$id()` function can be used to assign a unique\n *     `$$hashKey` property to each item in the array. This property is then used as a key to associated DOM elements\n *     with the corresponding item in the array by identity. Moving the same object in array would move the DOM\n *     element in the same way in the DOM.\n *\n *     For example: `item in items track by item.id` is a typical pattern when the items come from the database. In this\n *     case the object identity does not matter. Two objects are considered equivalent as long as their `id`\n *     property is same.\n *\n *     For example: `item in items | filter:searchText track by item.id` is a pattern that might be used to apply a filter\n *     to items in conjunction with a tracking expression.\n *\n * @param {expression} collection-item-width The width of the repeated element.  Can be a number (in pixels) or a percentage.\n * @param {expression} collection-item-height The height of the repeated element.  Can be a number (in pixels), or a percentage.\n *\n */\nvar COLLECTION_REPEAT_SCROLLVIEW_XY_ERROR = \"Cannot create a collection-repeat within a scrollView that is scrollable on both x and y axis.  Choose either x direction or y direction.\";\nvar COLLECTION_REPEAT_ATTR_HEIGHT_ERROR = \"collection-repeat expected attribute collection-item-height to be a an expression that returns a number (in pixels) or percentage.\";\nvar COLLECTION_REPEAT_ATTR_WIDTH_ERROR = \"collection-repeat expected attribute collection-item-width to be a an expression that returns a number (in pixels) or percentage.\";\nvar COLLECTION_REPEAT_ATTR_REPEAT_ERROR = \"collection-repeat expected expression in form of '_item_ in _collection_[ track by _id_]' but got '%'\";\n\nIonicModule\n.directive({\n  ngSrc: collectionRepeatSrcDirective('ngSrc', 'src'),\n  ngSrcset: collectionRepeatSrcDirective('ngSrcset', 'srcset'),\n  ngHref: collectionRepeatSrcDirective('ngHref', 'href')\n})\n.directive('collectionRepeat', [\n  '$collectionRepeatManager',\n  '$collectionDataSource',\n  '$parse',\nfunction($collectionRepeatManager, $collectionDataSource, $parse) {\n  return {\n    priority: 1000,\n    transclude: 'element',\n    terminal: true,\n    $$tlb: true,\n    require: '^$ionicScroll',\n    controller: [function(){}],\n    link: function($scope, $element, $attr, scrollCtrl, $transclude) {\n      var wrap = jqLite('<div style=\"position:relative;\">');\n      $element.parent()[0].insertBefore(wrap[0], $element[0]);\n      wrap.append($element);\n\n      var scrollView = scrollCtrl.scrollView;\n      if (scrollView.options.scrollingX && scrollView.options.scrollingY) {\n        throw new Error(COLLECTION_REPEAT_SCROLLVIEW_XY_ERROR);\n      }\n\n      var isVertical = !!scrollView.options.scrollingY;\n      if (isVertical && !$attr.collectionItemHeight) {\n        throw new Error(COLLECTION_REPEAT_ATTR_HEIGHT_ERROR);\n      } else if (!isVertical && !$attr.collectionItemWidth) {\n        throw new Error(COLLECTION_REPEAT_ATTR_WIDTH_ERROR);\n      }\n\n      var heightParsed = $parse($attr.collectionItemHeight || '\"100%\"');\n      var widthParsed = $parse($attr.collectionItemWidth || '\"100%\"');\n\n      var heightGetter = function(scope, locals) {\n        var result = heightParsed(scope, locals);\n        if (isString(result) && result.indexOf('%') > -1) {\n          return Math.floor(parseInt(result, 10) / 100 * scrollView.__clientHeight);\n        }\n        return result;\n      };\n      var widthGetter = function(scope, locals) {\n        var result = widthParsed(scope, locals);\n        if (isString(result) && result.indexOf('%') > -1) {\n          return Math.floor(parseInt(result, 10) / 100 * scrollView.__clientWidth);\n        }\n        return result;\n      };\n\n      var match = $attr.collectionRepeat.match(/^\\s*([\\s\\S]+?)\\s+in\\s+([\\s\\S]+?)(?:\\s+track\\s+by\\s+([\\s\\S]+?))?\\s*$/);\n      if (!match) {\n        throw new Error(COLLECTION_REPEAT_ATTR_REPEAT_ERROR\n                        .replace('%', $attr.collectionRepeat));\n      }\n      var keyExpr = match[1];\n      var listExpr = match[2];\n      var trackByExpr = match[3];\n\n      var dataSource = new $collectionDataSource({\n        scope: $scope,\n        transcludeFn: $transclude,\n        transcludeParent: $element.parent(),\n        keyExpr: keyExpr,\n        listExpr: listExpr,\n        trackByExpr: trackByExpr,\n        heightGetter: heightGetter,\n        widthGetter: widthGetter\n      });\n      var collectionRepeatManager = new $collectionRepeatManager({\n        dataSource: dataSource,\n        element: scrollCtrl.$element,\n        scrollView: scrollCtrl.scrollView,\n      });\n\n      $scope.$watchCollection(listExpr, function(value) {\n        if (value && !angular.isArray(value)) {\n          throw new Error(\"collection-repeat expects an array to repeat over, but instead got '\" + typeof value + \"'.\");\n        }\n        rerender(value);\n      });\n\n      var scrollViewContent = scrollCtrl.scrollView.__content;\n      function rerender(value) {\n        var beforeSiblings = [];\n        var afterSiblings = [];\n        var before = true;\n        forEach(scrollViewContent.children, function(node, i) {\n          if ( ionic.DomUtil.elementIsDescendant($element[0], node, scrollViewContent) ) {\n            before = false;\n          } else {\n            var width = node.offsetWidth;\n            var height = node.offsetHeight;\n            if (width && height) {\n              var element = jqLite(node);\n              (before ? beforeSiblings : afterSiblings).push({\n                width: node.offsetWidth,\n                height: node.offsetHeight,\n                element: element,\n                scope: element.isolateScope() || element.scope(),\n                isOutside: true\n              });\n            }\n          }\n        });\n\n        scrollView.resize();\n        dataSource.setData(value, beforeSiblings, afterSiblings);\n        collectionRepeatManager.resize();\n      }\n      function onWindowResize() {\n        rerender($scope.$eval(listExpr));\n      }\n\n      ionic.on('resize', onWindowResize, window);\n\n      $scope.$on('$destroy', function() {\n        collectionRepeatManager.destroy();\n        dataSource.destroy();\n        ionic.off('resize', onWindowResize, window);\n      });\n    }\n  };\n}]);\n\n// Fix for #1674\n// Problem: if an ngSrc or ngHref expression evaluates to a falsy value, it will\n// not erase the previous truthy value of the href.\n// In collectionRepeat, we re-use elements from before. So if the ngHref expression\n// evaluates to truthy for item 1 and then falsy for item 2, if an element changes\n// from representing item 1 to representing item 2, item 2 will still have\n// item 1's href value.\n// Solution:  erase the href or src attribute if ngHref/ngSrc are falsy.\nfunction collectionRepeatSrcDirective(ngAttrName, attrName) {\n  return [function() {\n    return {\n      priority: '99', // it needs to run after the attributes are interpolated\n      link: function(scope, element, attr, collectionRepeatCtrl) {\n        if (!collectionRepeatCtrl) return;\n        attr.$observe(ngAttrName, function(value) {\n          element[0][attr] = '';\n          setTimeout(function() {\n            element[0][attr] = value;\n          });\n        });\n      }\n    };\n  }];\n}\n\n/**\n * @ngdoc directive\n * @name ionContent\n * @module ionic\n * @delegate ionic.service:$ionicScrollDelegate\n * @restrict E\n *\n * @description\n * The ionContent directive provides an easy to use content area that can be configured\n * to use Ionic's custom Scroll View, or the built in overflow scrolling of the browser.\n *\n * While we recommend using the custom Scroll features in Ionic in most cases, sometimes\n * (for performance reasons) only the browser's native overflow scrolling will suffice,\n * and so we've made it easy to toggle between the Ionic scroll implementation and\n * overflow scrolling.\n *\n * You can implement pull-to-refresh with the {@link ionic.directive:ionRefresher}\n * directive, and infinite scrolling with the {@link ionic.directive:ionInfiniteScroll}\n * directive.\n *\n * Be aware that this directive gets its own child scope. If you do not understand why this\n * is important, you can read [https://docs.angularjs.org/guide/scope](https://docs.angularjs.org/guide/scope).\n *\n * @param {string=} delegate-handle The handle used to identify this scrollView\n * with {@link ionic.service:$ionicScrollDelegate}.\n * @param {string=} direction Which way to scroll. 'x' or 'y' or 'xy'. Default 'y'.\n * @param {boolean=} padding Whether to add padding to the content.\n * of the content.  Defaults to true on iOS, false on Android.\n * @param {boolean=} scroll Whether to allow scrolling of content.  Defaults to true.\n * @param {boolean=} overflow-scroll Whether to use overflow-scrolling instead of\n * Ionic scroll.\n * @param {boolean=} scrollbar-x Whether to show the horizontal scrollbar. Default true.\n * @param {boolean=} scrollbar-y Whether to show the vertical scrollbar. Default true.\n * @param {string=} start-y Initial vertical scroll position. Default 0.\n * of the content.  Defaults to true on iOS, false on Android.\n * @param {expression=} on-scroll Expression to evaluate when the content is scrolled.\n * @param {expression=} on-scroll-complete Expression to evaluate when a scroll action completes.\n * @param {boolean=} has-bouncing Whether to allow scrolling to bounce past the edges\n * of the content.  Defaults to true on iOS, false on Android.\n */\nIonicModule\n.directive('ionContent', [\n  '$timeout',\n  '$controller',\n  '$ionicBind',\nfunction($timeout, $controller, $ionicBind) {\n  return {\n    restrict: 'E',\n    require: '^?ionNavView',\n    scope: true,\n    priority: 800,\n    compile: function(element, attr) {\n      var innerElement;\n\n      element.addClass('scroll-content ionic-scroll');\n\n      if (attr.scroll != 'false') {\n        //We cannot use normal transclude here because it breaks element.data()\n        //inheritance on compile\n        innerElement = jqLite('<div class=\"scroll\"></div>');\n        innerElement.append(element.contents());\n        element.append(innerElement);\n      } else {\n        element.addClass('scroll-content-false');\n      }\n\n      return { pre: prelink };\n      function prelink($scope, $element, $attr, navViewCtrl) {\n        var parentScope = $scope.$parent;\n        $scope.$watch(function() {\n          return (parentScope.$hasHeader ? ' has-header' : '')  +\n            (parentScope.$hasSubheader ? ' has-subheader' : '') +\n            (parentScope.$hasFooter ? ' has-footer' : '') +\n            (parentScope.$hasSubfooter ? ' has-subfooter' : '') +\n            (parentScope.$hasTabs ? ' has-tabs' : '') +\n            (parentScope.$hasTabsTop ? ' has-tabs-top' : '');\n        }, function(className, oldClassName) {\n          $element.removeClass(oldClassName);\n          $element.addClass(className);\n        });\n\n        //Only this ionContent should use these variables from parent scopes\n        $scope.$hasHeader = $scope.$hasSubheader =\n          $scope.$hasFooter = $scope.$hasSubfooter =\n          $scope.$hasTabs = $scope.$hasTabsTop =\n          false;\n        $ionicBind($scope, $attr, {\n          $onScroll: '&onScroll',\n          $onScrollComplete: '&onScrollComplete',\n          hasBouncing: '@',\n          padding: '@',\n          direction: '@',\n          scrollbarX: '@',\n          scrollbarY: '@',\n          startX: '@',\n          startY: '@',\n          scrollEventInterval: '@'\n        });\n        $scope.direction = $scope.direction || 'y';\n\n        if (angular.isDefined($attr.padding)) {\n          $scope.$watch($attr.padding, function(newVal) {\n              (innerElement || $element).toggleClass('padding', !!newVal);\n          });\n        }\n\n        if ($attr.scroll === \"false\") {\n          //do nothing\n        } else if(attr.overflowScroll === \"true\") {\n          $element.addClass('overflow-scroll');\n        } else {\n          $controller('$ionicScroll', {\n            $scope: $scope,\n            scrollViewOptions: {\n              el: $element[0],\n              delegateHandle: attr.delegateHandle,\n              bouncing: $scope.$eval($scope.hasBouncing),\n              startX: $scope.$eval($scope.startX) || 0,\n              startY: $scope.$eval($scope.startY) || 0,\n              scrollbarX: $scope.$eval($scope.scrollbarX) !== false,\n              scrollbarY: $scope.$eval($scope.scrollbarY) !== false,\n              scrollingX: $scope.direction.indexOf('x') >= 0,\n              scrollingY: $scope.direction.indexOf('y') >= 0,\n              scrollEventInterval: parseInt($scope.scrollEventInterval, 10) || 10,\n              scrollingComplete: function() {\n                $scope.$onScrollComplete({\n                  scrollTop: this.__scrollTop,\n                  scrollLeft: this.__scrollLeft\n                });\n              }\n            }\n          });\n        }\n\n      }\n    }\n  };\n}]);\n\nvar GESTURE_DIRECTIVES = 'onHold onTap onTouch onRelease onDrag onDragUp onDragRight onDragDown onDragLeft onSwipe onSwipeUp onSwipeRight onSwipeDown onSwipeLeft'.split(' ');\n\nGESTURE_DIRECTIVES.forEach(function(name) {\n  IonicModule.directive(name, gestureDirective(name));\n});\n\n\n/**\n * @ngdoc directive\n * @name onHold\n * @module ionic\n * @restrict A\n *\n * @description\n * Touch stays at the same location for 500ms.\n *\n * @usage\n * ```html\n * <button on-hold=\"onHold()\" class=\"button\">Test</button>\n * ```\n */\n\n\n/**\n * @ngdoc directive\n * @name onTap\n * @module ionic\n * @restrict A\n *\n * @description\n * Quick touch at a location. If the duration of the touch goes\n * longer than 250ms it is no longer a tap gesture.\n *\n * @usage\n * ```html\n * <button on-tap=\"onTap()\" class=\"button\">Test</button>\n * ```\n */\n\n\n/**\n * @ngdoc directive\n * @name onTouch\n * @module ionic\n * @restrict A\n *\n * @description\n * Called immediately when the user first begins a touch. This\n * gesture does not wait for a touchend/mouseup.\n *\n * @usage\n * ```html\n * <button on-touch=\"onTouch()\" class=\"button\">Test</button>\n * ```\n */\n\n\n/**\n * @ngdoc directive\n * @name onRelease\n * @module ionic\n * @restrict A\n *\n * @description\n * Called when the user ends a touch.\n *\n * @usage\n * ```html\n * <button on-release=\"onRelease()\" class=\"button\">Test</button>\n * ```\n */\n\n\n/**\n * @ngdoc directive\n * @name onDrag\n * @module ionic\n * @restrict A\n *\n * @description\n * Move with one touch around on the page. Blocking the scrolling when\n * moving left and right is a good practice. When all the drag events are\n * blocking you disable scrolling on that area.\n *\n * @usage\n * ```html\n * <button on-drag=\"onDrag()\" class=\"button\">Test</button>\n * ```\n */\n\n\n/**\n * @ngdoc directive\n * @name onDragUp\n * @module ionic\n * @restrict A\n *\n * @description\n * Called when the element is dragged up.\n *\n * @usage\n * ```html\n * <button on-drag-up=\"onDragUp()\" class=\"button\">Test</button>\n * ```\n */\n\n\n/**\n * @ngdoc directive\n * @name onDragRight\n * @module ionic\n * @restrict A\n *\n * @description\n * Called when the element is dragged to the right.\n *\n * @usage\n * ```html\n * <button on-drag-right=\"onDragRight()\" class=\"button\">Test</button>\n * ```\n */\n\n\n/**\n * @ngdoc directive\n * @name onDragDown\n * @module ionic\n * @restrict A\n *\n * @description\n * Called when the element is dragged down.\n *\n * @usage\n * ```html\n * <button on-drag-down=\"onDragDown()\" class=\"button\">Test</button>\n * ```\n */\n\n\n/**\n * @ngdoc directive\n * @name onDragLeft\n * @module ionic\n * @restrict A\n *\n * @description\n * Called when the element is dragged to the left.\n *\n * @usage\n * ```html\n * <button on-drag-left=\"onDragLeft()\" class=\"button\">Test</button>\n * ```\n */\n\n\n/**\n * @ngdoc directive\n * @name onSwipe\n * @module ionic\n * @restrict A\n *\n * @description\n * Called when a moving touch has a high velocity in any direction.\n *\n * @usage\n * ```html\n * <button on-swipe=\"onSwipe()\" class=\"button\">Test</button>\n * ```\n */\n\n\n/**\n * @ngdoc directive\n * @name onSwipeUp\n * @module ionic\n * @restrict A\n *\n * @description\n * Called when a moving touch has a high velocity moving up.\n *\n * @usage\n * ```html\n * <button on-swipe-up=\"onSwipeUp()\" class=\"button\">Test</button>\n * ```\n */\n\n\n/**\n * @ngdoc directive\n * @name onSwipeRight\n * @module ionic\n * @restrict A\n *\n * @description\n * Called when a moving touch has a high velocity moving to the right.\n *\n * @usage\n * ```html\n * <button on-swipe-right=\"onSwipeRight()\" class=\"button\">Test</button>\n * ```\n */\n\n\n/**\n * @ngdoc directive\n * @name onSwipeDown\n * @module ionic\n * @restrict A\n *\n * @description\n * Called when a moving touch has a high velocity moving down.\n *\n * @usage\n * ```html\n * <button on-swipe-down=\"onSwipeDown()\" class=\"button\">Test</button>\n * ```\n */\n\n\n/**\n * @ngdoc directive\n * @name onSwipeLeft\n * @module ionic\n * @restrict A\n *\n * @description\n * Called when a moving touch has a high velocity moving to the left.\n *\n * @usage\n * ```html\n * <button on-swipe-left=\"onSwipeLeft()\" class=\"button\">Test</button>\n * ```\n */\n\n\nfunction gestureDirective(directiveName) {\n  return ['$ionicGesture', '$parse', function($ionicGesture, $parse) {\n    var eventType = directiveName.substr(2).toLowerCase();\n\n    return function(scope, element, attr) {\n      var fn = $parse( attr[directiveName] );\n\n      var listener = function(ev) {\n        scope.$apply(function() {\n          fn(scope, {\n            $event: ev\n          });\n        });\n      };\n\n      var gesture = $ionicGesture.on(eventType, listener, element);\n\n      scope.$on('$destroy', function() {\n        $ionicGesture.off(gesture, eventType, listener);\n      });\n    };\n  }];\n}\n\n\nIonicModule\n.directive('ionNavBar', tapScrollToTopDirective())\n.directive('ionHeaderBar', tapScrollToTopDirective())\n\n/**\n * @ngdoc directive\n * @name ionHeaderBar\n * @module ionic\n * @restrict E\n *\n * @description\n * Adds a fixed header bar above some content.\n *\n * Can also be a subheader (lower down) if the 'bar-subheader' class is applied.\n * See [the header CSS docs](/docs/v1/components/#subheader).\n *\n * Note: If you use ionHeaderBar in combination with ng-if, the surrounding content\n * will not align correctly.  This will be fixed soon.\n *\n * @param {string=} align-title Where to align the title. \n * Available: 'left', 'right', or 'center'.  Defaults to 'center'.\n * @param {boolean=} no-tap-scroll By default, the header bar will scroll the\n * content to the top when tapped.  Set no-tap-scroll to true to disable this \n * behavior.\n * Available: true or false.  Defaults to false.\n *\n * @usage\n * ```html\n * <ion-header-bar align-title=\"left\" class=\"bar-positive\">\n *   <div class=\"buttons\">\n *     <button class=\"button\" ng-click=\"doSomething()\">Left Button</button>\n *   </div>\n *   <h1 class=\"title\">Title!</h1>\n *   <div class=\"buttons\">\n *     <button class=\"button\">Right Button</button>\n *   </div>\n * </ion-header-bar>\n * <ion-content>\n *   Some content!\n * </ion-content>\n * ```\n */\n.directive('ionHeaderBar', headerFooterBarDirective(true))\n\n/**\n * @ngdoc directive\n * @name ionFooterBar\n * @module ionic\n * @restrict E\n *\n * @description\n * Adds a fixed footer bar below some content.\n *\n * Can also be a subfooter (higher up) if the 'bar-subfooter' class is applied.\n * See [the footer CSS docs](/docs/v1/components/#footer).\n *\n * Note: If you use ionFooterBar in combination with ng-if, the surrounding content\n * will not align correctly.  This will be fixed soon.\n *\n * @param {string=} align-title Where to align the title.\n * Available: 'left', 'right', or 'center'.  Defaults to 'center'.\n *\n * @usage\n * ```html\n * <ion-content>\n *   Some content!\n * </ion-content>\n * <ion-footer-bar align-title=\"left\" class=\"bar-assertive\">\n *   <div class=\"buttons\">\n *     <button class=\"button\">Left Button</button>\n *   </div>\n *   <h1 class=\"title\">Title!</h1>\n *   <div class=\"buttons\" ng-click=\"doSomething()\">\n *     <button class=\"button\">Right Button</button>\n *   </div>\n * </ion-footer-bar>\n * ```\n */\n.directive('ionFooterBar', headerFooterBarDirective(false));\n\nfunction tapScrollToTopDirective() {\n  return ['$ionicScrollDelegate', function($ionicScrollDelegate) {\n    return {\n      restrict: 'E',\n      link: function($scope, $element, $attr) {\n        if ($attr.noTapScroll == 'true') {\n          return;\n        }\n        ionic.on('tap', onTap, $element[0]);\n        $scope.$on('$destroy', function() {\n          ionic.off('tap', onTap, $element[0]);\n        });\n\n        function onTap(e) {\n          var depth = 3;\n          var current = e.target;\n          //Don't scroll to top in certain cases\n          while (depth-- && current) {\n            if (current.classList.contains('button') ||\n                current.tagName.match(/input|textarea|select/i) ||\n                current.isContentEditable) {\n              return;\n            }\n            current = current.parentNode;\n          }\n          var touch = e.gesture && e.gesture.touches[0] || e.detail.touches[0];\n          var bounds = $element[0].getBoundingClientRect();\n          if (ionic.DomUtil.rectContains(\n            touch.pageX, touch.pageY,\n            bounds.left, bounds.top - 20,\n            bounds.left + bounds.width, bounds.top + bounds.height\n          )) {\n            $ionicScrollDelegate.scrollTop(true);\n          }\n        }\n      }\n    };\n  }];\n}\n\nfunction headerFooterBarDirective(isHeader) {\n  return [function() {\n    return {\n      restrict: 'E',\n      compile: function($element, $attr) {\n        $element.addClass(isHeader ? 'bar bar-header' : 'bar bar-footer');\n        var parent = $element[0].parentNode;\n        if(parent.querySelector('.tabs-top'))$element.addClass('has-tabs-top');\n        return { pre: prelink };\n        function prelink($scope, $element, $attr) {\n          var hb = new ionic.views.HeaderBar({\n            el: $element[0],\n            alignTitle: $attr.alignTitle || 'center'\n          });\n\n          var el = $element[0];\n\n          if (isHeader) {\n            $scope.$watch(function() { return el.className; }, function(value) {\n              var isShown = value.indexOf('ng-hide') === -1;\n              var isSubheader = value.indexOf('bar-subheader') !== -1;\n              $scope.$hasHeader = isShown && !isSubheader;\n              $scope.$hasSubheader = isShown && isSubheader;\n            });\n            $scope.$on('$destroy', function() {\n              delete $scope.$hasHeader;\n              delete $scope.$hasSubheader;\n            });\n          } else {\n            $scope.$watch(function() { return el.className; }, function(value) {\n              var isShown = value.indexOf('ng-hide') === -1;\n              var isSubfooter = value.indexOf('bar-subfooter') !== -1;\n              $scope.$hasFooter = isShown && !isSubfooter;\n              $scope.$hasSubfooter = isShown && isSubfooter;\n            });\n            $scope.$on('$destroy', function() {\n              delete $scope.$hasFooter;\n              delete $scope.$hasSubfooter;\n            });\n            $scope.$watch('$hasTabs', function(val) {\n              $element.toggleClass('has-tabs', !!val);\n            });\n          }\n        }\n      }\n    };\n  }];\n}\n\n/**\n * @ngdoc directive\n * @name ionInfiniteScroll\n * @module ionic\n * @parent ionic.directive:ionContent, ionic.directive:ionScroll\n * @restrict E\n *\n * @description\n * The ionInfiniteScroll directive allows you to call a function whenever\n * the user gets to the bottom of the page or near the bottom of the page.\n *\n * The expression you pass in for `on-infinite` is called when the user scrolls\n * greater than `distance` away from the bottom of the content.  Once `on-infinite`\n * is done loading new data, it should broadcast the `scroll.infiniteScrollComplete`\n * event from your controller (see below example).\n *\n * @param {expression} on-infinite What to call when the scroller reaches the\n * bottom.\n * @param {string=} distance The distance from the bottom that the scroll must\n * reach to trigger the on-infinite expression. Default: 1%.\n * @param {string=} icon The icon to show while loading. Default: 'ion-loading-d'.\n *\n * @usage\n * ```html\n * <ion-content ng-controller=\"MyController\">\n *   <ion-infinite-scroll\n *     on-infinite=\"loadMore()\"\n *     distance=\"1%\">\n *   </ion-infinite-scroll>\n * </ion-content>\n * ```\n * ```js\n * function MyController($scope, $http) {\n *   $scope.items = [];\n *   $scope.loadMore = function() {\n *     $http.get('/more-items').success(function(items) {\n *       useItems(items);\n *       $scope.$broadcast('scroll.infiniteScrollComplete');\n *     });\n *   };\n *\n *   $scope.$on('stateChangeSuccess', function() {\n *     $scope.loadMore();\n *   });\n * }\n * ```\n *\n * An easy to way to stop infinite scroll once there is no more data to load\n * is to use angular's `ng-if` directive:\n *\n * ```html\n * <ion-infinite-scroll\n *   ng-if=\"moreDataCanBeLoaded()\"\n *   icon=\"ion-loading-c\"\n *   on-infinite=\"loadMoreData()\">\n * </ion-infinite-scroll>\n * ```\n */\nIonicModule\n.directive('ionInfiniteScroll', ['$timeout', function($timeout) {\n  function calculateMaxValue(distance, maximum, isPercent) {\n    return isPercent ?\n      maximum * (1 - parseFloat(distance,10) / 100) :\n      maximum - parseFloat(distance, 10);\n  }\n  return {\n    restrict: 'E',\n    require: ['^$ionicScroll', 'ionInfiniteScroll'],\n    template: '<i class=\"icon {{icon()}} icon-refreshing\"></i>',\n    scope: true,\n    controller: ['$scope', '$attrs', function($scope, $attrs) {\n      this.isLoading = false;\n      this.scrollView = null; //given by link function\n      this.getMaxScroll = function() {\n        var distance = ($attrs.distance || '2.5%').trim();\n        var isPercent = distance.indexOf('%') !== -1;\n        var maxValues = this.scrollView.getScrollMax();\n        return {\n          left: this.scrollView.options.scrollingX ?\n            calculateMaxValue(distance, maxValues.left, isPercent) :\n            -1,\n          top: this.scrollView.options.scrollingY ?\n            calculateMaxValue(distance, maxValues.top, isPercent) :\n            -1\n        };\n      };\n    }],\n    link: function($scope, $element, $attrs, ctrls) {\n      var scrollCtrl = ctrls[0];\n      var infiniteScrollCtrl = ctrls[1];\n      var scrollView = infiniteScrollCtrl.scrollView = scrollCtrl.scrollView;\n\n      $scope.icon = function() {\n        return angular.isDefined($attrs.icon) ? $attrs.icon : 'ion-loading-d';\n      };\n\n      var onInfinite = function() {\n        $element[0].classList.add('active');\n        infiniteScrollCtrl.isLoading = true;\n        $scope.$parent && $scope.$parent.$apply($attrs.onInfinite || '');\n      };\n\n      var finishInfiniteScroll = function() {\n        $element[0].classList.remove('active');\n        $timeout(function() {\n          scrollView.resize();\n          checkBounds();\n        }, 0, false);\n        infiniteScrollCtrl.isLoading = false;\n      };\n\n      $scope.$on('scroll.infiniteScrollComplete', function() {\n        finishInfiniteScroll();\n      });\n\n      $scope.$on('$destroy', function() {\n        scrollCtrl.$element.off('scroll', checkBounds);\n      });\n\n      var checkBounds = ionic.animationFrameThrottle(checkInfiniteBounds);\n\n      //Check bounds on start, after scrollView is fully rendered\n      setTimeout(checkBounds);\n      scrollCtrl.$element.on('scroll', checkBounds);\n\n      function checkInfiniteBounds() {\n        if (infiniteScrollCtrl.isLoading) return;\n\n        var scrollValues = scrollView.getValues();\n        var maxScroll = infiniteScrollCtrl.getMaxScroll();\n\n        if ((maxScroll.left !== -1 && scrollValues.left >= maxScroll.left) ||\n            (maxScroll.top !== -1 && scrollValues.top >= maxScroll.top)) {\n          onInfinite();\n        }\n      }\n    }\n  };\n}]);\n\nvar ITEM_TPL_CONTENT_ANCHOR =\n  '<a class=\"item-content\" ng-href=\"{{$href()}}\" target=\"{{$target()}}\"></a>';\nvar ITEM_TPL_CONTENT =\n  '<div class=\"item-content\"></div>';\n/**\n* @ngdoc directive\n* @name ionItem\n* @parent ionic.directive:ionList\n* @module ionic\n* @restrict E\n* Creates a list-item that can easily be swiped,\n* deleted, reordered, edited, and more.\n*\n* See {@link ionic.directive:ionList} for a complete example & explanation.\n*\n* Can be assigned any item class name. See the\n* [list CSS documentation](/docs/v1/components/#list).\n*\n* @usage\n*\n* ```html\n* <ion-list>\n*   <ion-item>Hello!</ion-item>\n* </ion-list>\n* ```\n*/\nIonicModule\n.directive('ionItem', [\n  '$animate',\n  '$compile',\nfunction($animate, $compile) {\n  return {\n    restrict: 'E',\n    controller: ['$scope', '$element', function($scope, $element) {\n      this.$scope = $scope;\n      this.$element = $element;\n    }],\n    scope: true,\n    compile: function($element, $attrs) {\n      var isAnchor = angular.isDefined($attrs.href) ||\n        angular.isDefined($attrs.ngHref) ||\n        angular.isDefined($attrs.uiSref);\n      var isComplexItem = isAnchor ||\n        //Lame way of testing, but we have to know at compile what to do with the element\n        /ion-(delete|option|reorder)-button/i.test($element.html());\n\n        if (isComplexItem) {\n          var innerElement = jqLite(isAnchor ? ITEM_TPL_CONTENT_ANCHOR : ITEM_TPL_CONTENT);\n          innerElement.append($element.contents());\n\n          $element.append(innerElement);\n          $element.addClass('item item-complex');\n        } else {\n          $element.addClass('item');\n        }\n\n        return function link($scope, $element, $attrs) {\n          $scope.$href = function() {\n            return $attrs.href || $attrs.ngHref;\n          };\n          $scope.$target = function() {\n            return $attrs.target || '_self';\n          };\n        };\n    }\n  };\n}]);\n\n\nvar ITEM_TPL_DELETE_BUTTON =\n  '<div class=\"item-left-edit item-delete enable-pointer-events\">' +\n  '</div>';\n/**\n* @ngdoc directive\n* @name ionDeleteButton\n* @parent ionic.directive:ionItem\n* @module ionic\n* @restrict E\n* Creates a delete button inside a list item, that is visible when the\n* {@link ionic.directive:ionList ionList parent's} `show-delete` evaluates to true or\n* `$ionicListDelegate.showDelete(true)` is called.\n*\n* Takes any ionicon as a class.\n*\n* See {@link ionic.directive:ionList} for a complete example & explanation.\n*\n* @usage\n*\n* ```html\n* <ion-list show-delete=\"shouldShowDelete\">\n*   <ion-item>\n*     <ion-delete-button class=\"ion-minus-circled\"></ion-delete-button>\n*     Hello, list item!\n*   </ion-item>\n* </ion-list>\n* <ion-toggle ng-model=\"shouldShowDelete\">\n*   Show Delete?\n* </ion-toggle>\n* ```\n*/\nIonicModule\n.directive('ionDeleteButton', ['$animate', function($animate) {\n  return {\n    restrict: 'E',\n    require: ['^ionItem', '^?ionList'],\n    //Run before anything else, so we can move it before other directives process\n    //its location (eg ngIf relies on the location of the directive in the dom)\n    priority: Number.MAX_VALUE,\n    compile: function($element, $attr) {\n      //Add the classes we need during the compile phase, so that they stay\n      //even if something else like ngIf removes the element and re-addss it\n      $attr.$set('class', ($attr['class'] || '') + ' button icon button-icon', true);\n      return function($scope, $element, $attr, ctrls) {\n        var itemCtrl = ctrls[0];\n        var listCtrl = ctrls[1];\n        var container = jqLite(ITEM_TPL_DELETE_BUTTON);\n        container.append($element);\n        itemCtrl.$element.append(container).addClass('item-left-editable');\n\n        if (listCtrl && listCtrl.showDelete()) {\n          container.addClass('visible active');\n        }\n      };\n    }\n  };\n}]);\n\n\nIonicModule\n.directive('itemFloatingLabel', function() {\n  return {\n    restrict: 'C',\n    link: function(scope, element) {\n      var el = element[0];\n      var input = el.querySelector('input, textarea');\n      var inputLabel = el.querySelector('.input-label');\n\n      if ( !input || !inputLabel ) return;\n\n      var onInput = function() {\n        if ( input.value ) {\n          inputLabel.classList.add('has-input');\n        } else {\n          inputLabel.classList.remove('has-input');\n        }\n      };\n\n      input.addEventListener('input', onInput);\n\n      var ngModelCtrl = angular.element(input).controller('ngModel');\n      if ( ngModelCtrl ) {\n        ngModelCtrl.$render = function() {\n          input.value = ngModelCtrl.$viewValue || '';\n          onInput();\n        };\n      }\n\n      scope.$on('$destroy', function() {\n        input.removeEventListener('input', onInput);\n      });\n    }\n  };\n});\n\nvar ITEM_TPL_OPTION_BUTTONS =\n  '<div class=\"item-options invisible\">' +\n  '</div>';\n/**\n* @ngdoc directive\n* @name ionOptionButton\n* @parent ionic.directive:ionItem\n* @module ionic\n* @restrict E\n* Creates an option button inside a list item, that is visible when the item is swiped\n* to the left by the user.  Swiped open option buttons can be hidden with\n* {@link ionic.service:$ionicListDelegate#closeOptionButtons $ionicListDelegate#closeOptionButtons}.\n*\n* Can be assigned any button class.\n*\n* See {@link ionic.directive:ionList} for a complete example & explanation.\n*\n* @usage\n*\n* ```html\n* <ion-list>\n*   <ion-item>\n*     I love kittens!\n*     <ion-option-button class=\"button-positive\">Share</ion-option-button>\n*     <ion-option-button class=\"button-assertive\">Edit</ion-option-button>\n*   </ion-item>\n* </ion-list>\n* ```\n*/\nIonicModule\n.directive('ionOptionButton', ['$compile', function($compile) {\n  function stopPropagation(e) {\n    e.stopPropagation();\n  }\n  return {\n    restrict: 'E',\n    require: '^ionItem',\n    priority: Number.MAX_VALUE,\n    compile: function($element, $attr) {\n      $attr.$set('class', ($attr['class'] || '') + ' button', true);\n      return function($scope, $element, $attr, itemCtrl) {\n        if (!itemCtrl.optionsContainer) {\n          itemCtrl.optionsContainer = jqLite(ITEM_TPL_OPTION_BUTTONS);\n          itemCtrl.$element.append(itemCtrl.optionsContainer);\n        }\n        itemCtrl.optionsContainer.append($element);\n\n        //Don't bubble click up to main .item\n        $element.on('click', stopPropagation);\n      };\n    }\n  };\n}]);\n\nvar ITEM_TPL_REORDER_BUTTON =\n  '<div data-prevent-scroll=\"true\" class=\"item-right-edit item-reorder enable-pointer-events\">' +\n  '</div>';\n\n/**\n* @ngdoc directive\n* @name ionReorderButton\n* @parent ionic.directive:ionItem\n* @module ionic\n* @restrict E\n* Creates a reorder button inside a list item, that is visible when the\n* {@link ionic.directive:ionList ionList parent's} `show-reorder` evaluates to true or\n* `$ionicListDelegate.showReorder(true)` is called.\n*\n* Can be dragged to reorder items in the list. Takes any ionicon class.\n*\n* Note: Reordering works best when used with `ng-repeat`.  Be sure that all `ion-item` children of an `ion-list` are part of the same `ng-repeat` expression.\n*\n* When an item reorder is complete, the expression given in the `on-reorder` attribute is called. The `on-reorder` expression is given two locals that can be used: `$fromIndex` and `$toIndex`.  See below for an example.\n*\n* Look at {@link ionic.directive:ionList} for more examples.\n*\n* @usage\n*\n* ```html\n* <ion-list ng-controller=\"MyCtrl\">\n*   <ion-item ng-repeat=\"item in items\">\n*     Item {{item}}\n*     <ion-reorder-button class=\"ion-navicon\"\n*                         on-reorder=\"moveItem(item, $fromIndex, $toIndex)\">\n*     </ion-reorder>\n*   </ion-item>\n* </ion-list>\n* ```\n* ```js\n* function MyCtrl($scope) {\n*   $scope.items = [1, 2, 3, 4];\n*   $scope.moveItem = function(item, fromIndex, toIndex) {\n*     //Move the item in the array\n*     $scope.items.splice(fromIndex, 1);\n*     $scope.items.splice(toIndex, 0, item);\n*   };\n* }\n* ```\n*\n* @param {expression=} on-reorder Expression to call when an item is reordered.\n* Parameters given: $fromIndex, $toIndex.\n*/\nIonicModule\n.directive('ionReorderButton', ['$animate', '$parse', function($animate, $parse) {\n  return {\n    restrict: 'E',\n    require: ['^ionItem', '^?ionList'],\n    priority: Number.MAX_VALUE,\n    compile: function($element, $attr) {\n      $attr.$set('class', ($attr['class'] || '') + ' button icon button-icon', true);\n      $element[0].setAttribute('data-prevent-scroll', true);\n      return function($scope, $element, $attr, ctrls) {\n        var itemCtrl = ctrls[0];\n        var listCtrl = ctrls[1];\n        var onReorderFn = $parse($attr.onReorder);\n\n        $scope.$onReorder = function(oldIndex, newIndex) {\n          onReorderFn($scope, {\n            $fromIndex: oldIndex,\n            $toIndex: newIndex\n          });\n        };\n\n        var container = jqLite(ITEM_TPL_REORDER_BUTTON);\n        container.append($element);\n        itemCtrl.$element.append(container).addClass('item-right-editable');\n\n        if (listCtrl && listCtrl.showReorder()) {\n          container.addClass('visible active');\n        }\n      };\n    }\n  };\n}]);\n\n/**\n * @ngdoc directive\n * @name keyboardAttach\n * @module ionic\n * @restrict A\n *\n * @description\n * keyboard-attach is an attribute directive which will cause an element to float above\n * the keyboard when the keyboard shows. Currently only supports the\n * [ion-footer-bar](/docs/v1/{{ page.versionHref }}/api/directive/ionFooterBar/) directive.\n *\n * ### Notes\n * - This directive requires the\n * [Ionic Keyboard Plugin](https://github.com/ionic-team/ionic-plugins-keyboard).\n * - On Android not in fullscreen mode, i.e. you have\n *   `<preference name=\"Fullscreen\" value=\"false\" />` or no preference in your `config.xml` file,\n *   this directive is unnecessary since it is the default behavior.\n * - On iOS, if there is an input in your footer, you will need to set\n *   `cordova.plugins.Keyboard.disableScroll(true)`.\n *\n * @usage\n *\n * ```html\n *  <ion-footer-bar align-title=\"left\" keyboard-attach class=\"bar-assertive\">\n *    <h1 class=\"title\">Title!</h1>\n *  </ion-footer-bar>\n * ```\n */\n\nIonicModule\n.directive('keyboardAttach', function() {\n  return function(scope, element, attrs) {\n    ionic.on('native.keyboardshow', onShow, window);\n    ionic.on('native.keyboardhide', onHide, window);\n\n    //deprecated\n    ionic.on('native.showkeyboard', onShow, window);\n    ionic.on('native.hidekeyboard', onHide, window);\n\n\n    var scrollCtrl;\n\n    function onShow(e) {\n      if (ionic.Platform.isAndroid() && !ionic.Platform.isFullScreen) {\n        return;\n      }\n\n      //for testing\n      var keyboardHeight = e.keyboardHeight || e.detail.keyboardHeight;\n      element.css('bottom', keyboardHeight + \"px\");\n      scrollCtrl = element.controller('$ionicScroll');\n      if ( scrollCtrl ) {\n        scrollCtrl.scrollView.__container.style.bottom = keyboardHeight + keyboardAttachGetClientHeight(element[0]) + \"px\";\n      }\n    }\n\n    function onHide() {\n      if (ionic.Platform.isAndroid() && !ionic.Platform.isFullScreen) {\n        return;\n      }\n\n      element.css('bottom', '');\n      if ( scrollCtrl ) {\n        scrollCtrl.scrollView.__container.style.bottom = '';\n      }\n    }\n\n    scope.$on('$destroy', function() {\n      ionic.off('native.keyboardshow', onShow, window);\n      ionic.off('native.keyboardhide', onHide, window);\n\n      //deprecated\n      ionic.off('native.showkeyboard', onShow, window);\n      ionic.off('native.hidekeyboard', onHide, window);\n    });\n  };\n});\n\nfunction keyboardAttachGetClientHeight(element) {\n  return element.clientHeight;\n}\n\n/**\n* @ngdoc directive\n* @name ionList\n* @module ionic\n* @delegate ionic.service:$ionicListDelegate\n* @codepen JsHjf\n* @restrict E\n* @description\n* The List is a widely used interface element in almost any mobile app, and can include\n* content ranging from basic text all the way to buttons, toggles, icons, and thumbnails.\n*\n* Both the list, which contains items, and the list items themselves can be any HTML\n* element. The containing element requires the `list` class and each list item requires\n* the `item` class.\n*\n* However, using the ionList and ionItem directives make it easy to support various\n* interaction modes such as swipe to edit, drag to reorder, and removing items.\n*\n* Related: {@link ionic.directive:ionItem}, {@link ionic.directive:ionOptionButton}\n* {@link ionic.directive:ionReorderButton}, {@link ionic.directive:ionDeleteButton}, [`list CSS documentation`](/docs/v1/components/#list).\n*\n* @usage\n*\n* Basic Usage:\n*\n* ```html\n* <ion-list>\n*   <ion-item ng-repeat=\"item in items\">\n*     {% raw %}Hello, {{item}}!{% endraw %}\n*   </ion-item>\n* </ion-list>\n* ```\n*\n* Advanced Usage: Thumbnails, Delete buttons, Reordering, Swiping\n*\n* ```html\n* <ion-list ng-controller=\"MyCtrl\"\n*           show-delete=\"shouldShowDelete\"\n*           show-reorder=\"shouldShowReorder\"\n*           can-swipe=\"listCanSwipe\">\n*   <ion-item ng-repeat=\"item in items\"\n*             class=\"item-thumbnail-left\">\n*\n*     {% raw %}<img ng-src=\"{{item.img}}\">\n*     <h2>{{item.title}}</h2>\n*     <p>{{item.description}}</p>{% endraw %}\n*     <ion-option-button class=\"button-positive\"\n*                        ng-click=\"share(item)\">\n*       Share\n*     </ion-option-button>\n*     <ion-option-button class=\"button-info\"\n*                        ng-click=\"edit(item)\">\n*       Edit\n*     </ion-option-button>\n*     <ion-delete-button class=\"ion-minus-circled\"\n*                        ng-click=\"items.splice($index, 1)\">\n*     </ion-delete-button>\n*     <ion-reorder-button class=\"ion-navicon\"\n*                         on-reorder=\"reorderItem(item, $fromIndex, $toIndex)\">\n*     </ion-reorder-button>\n*\n*   </ion-item>\n* </ion-list>\n* ```\n*\n* @param {string=} delegate-handle The handle used to identify this list with\n* {@link ionic.service:$ionicListDelegate}.\n* @param type {string=} The type of list to use (for example, list-inset for an inset list)\n* @param show-delete {boolean=} Whether the delete buttons for the items in the list are\n* currently shown or hidden.\n* @param show-reorder {boolean=} Whether the reorder buttons for the items in the list are\n* currently shown or hidden.\n* @param can-swipe {boolean=} Whether the items in the list are allowed to be swiped to reveal\n* option buttons. Default: true.\n*/\nIonicModule\n.directive('ionList', [\n  '$animate',\n  '$timeout',\nfunction($animate, $timeout) {\n  return {\n    restrict: 'E',\n    require: ['ionList', '^?$ionicScroll'],\n    controller: '$ionicList',\n    compile: function($element, $attr) {\n      var listEl = jqLite('<div class=\"list\">')\n      .append( $element.contents() )\n      .addClass($attr.type);\n      $element.append(listEl);\n\n      return function($scope, $element, $attrs, ctrls) {\n        var listCtrl = ctrls[0];\n        var scrollCtrl = ctrls[1];\n\n        //Wait for child elements to render...\n        $timeout(init);\n\n        function init() {\n          var listView = listCtrl.listView = new ionic.views.ListView({\n            el: $element[0],\n            listEl: $element.children()[0],\n            scrollEl: scrollCtrl && scrollCtrl.element,\n            scrollView: scrollCtrl && scrollCtrl.scrollView,\n            onReorder: function(el, oldIndex, newIndex) {\n              var itemScope = jqLite(el).scope();\n              if (itemScope && itemScope.$onReorder) {\n                //Make sure onReorder is called in apply cycle,\n                //but also make sure it has no conflicts by doing\n                //$evalAsync\n                $timeout(function() {\n                  itemScope.$onReorder(oldIndex, newIndex);\n                });\n              }\n            },\n            canSwipe: function() {\n              return listCtrl.canSwipeItems();\n            }\n          });\n\n          if (isDefined($attr.canSwipe)) {\n            $scope.$watch('!!(' + $attr.canSwipe + ')', function(value) {\n              listCtrl.canSwipeItems(value);\n            });\n          }\n          if (isDefined($attr.showDelete)) {\n            $scope.$watch('!!(' + $attr.showDelete + ')', function(value) {\n              listCtrl.showDelete(value);\n            });\n          }\n          if (isDefined($attr.showReorder)) {\n            $scope.$watch('!!(' + $attr.showReorder + ')', function(value) {\n              listCtrl.showReorder(value);\n            });\n          }\n\n          $scope.$watch(function() {\n            return listCtrl.showDelete();\n          }, function(isShown, wasShown) {\n            //Only use isShown=false if it was already shown\n            if (!isShown && !wasShown) { return; }\n\n            if (isShown) listCtrl.closeOptionButtons();\n            listCtrl.canSwipeItems(!isShown);\n\n            $element.children().toggleClass('list-left-editing', isShown);\n            $element.toggleClass('disable-pointer-events', isShown);\n\n            var deleteButton = jqLite($element[0].getElementsByClassName('item-delete'));\n            setButtonShown(deleteButton, listCtrl.showDelete);\n          });\n\n          $scope.$watch(function() {\n            return listCtrl.showReorder();\n          }, function(isShown, wasShown) {\n            //Only use isShown=false if it was already shown\n            if (!isShown && !wasShown) { return; }\n\n            if (isShown) listCtrl.closeOptionButtons();\n            listCtrl.canSwipeItems(!isShown);\n\n            $element.children().toggleClass('list-right-editing', isShown);\n            $element.toggleClass('disable-pointer-events', isShown);\n\n            var reorderButton = jqLite($element[0].getElementsByClassName('item-reorder'));\n            setButtonShown(reorderButton, listCtrl.showReorder);\n          });\n\n          function setButtonShown(el, shown) {\n            shown() && el.addClass('visible') || el.removeClass('active');\n            ionic.requestAnimationFrame(function() {\n              shown() && el.addClass('active') || el.removeClass('invisible');\n            });\n          }\n        }\n\n      };\n    }\n  };\n}]);\n\n/**\n * @ngdoc directive\n * @name menuClose\n * @module ionic\n * @restrict AC\n *\n * @description\n * Closes a side menu which is currently opened.\n *\n * @usage\n * Below is an example of a link within a side menu. Tapping this link would\n * automatically close the currently opened menu.\n *\n * ```html\n * <a menu-close href=\"#/home\" class=\"item\">Home</a>\n * ```\n */\nIonicModule\n.directive('menuClose', ['$ionicViewService', function($ionicViewService) {\n  return {\n    restrict: 'AC',\n    require: '^ionSideMenus',\n    link: function($scope, $element, $attr, sideMenuCtrl) {\n      $element.bind('click', function(){\n        sideMenuCtrl.close();\n      });\n    }\n  };\n}]);\n\n/**\n * @ngdoc directive\n * @name menuToggle\n * @module ionic\n * @restrict AC\n *\n * @description\n * Toggle a side menu on the given side\n *\n * @usage\n * Below is an example of a link within a nav bar. Tapping this link would\n * automatically open the given side menu\n *\n * ```html\n * <ion-view>\n *   <ion-nav-buttons side=\"left\">\n *    <button menu-toggle=\"left\" class=\"button button-icon icon ion-navicon\"></button>\n *   </ion-nav-buttons>\n *  ...\n * </ion-view>\n * ```\n */\nIonicModule\n.directive('menuToggle', ['$ionicViewService', function($ionicViewService) {\n  return {\n    restrict: 'AC',\n    require: '^ionSideMenus',\n    link: function($scope, $element, $attr, sideMenuCtrl) {\n      var side = $attr.menuToggle || 'left';\n      $element.bind('click', function(){\n        if(side === 'left') {\n          sideMenuCtrl.toggleLeft();\n        } else if(side === 'right') {\n          sideMenuCtrl.toggleRight();\n        }\n      });\n    }\n  };\n}]);\n\n\n/*\n * We don't document the ionModal directive, we instead document\n * the $ionicModal service\n */\nIonicModule\n.directive('ionModal', [function() {\n  return {\n    restrict: 'E',\n    transclude: true,\n    replace: true,\n    controller: [function(){}],\n    template: '<div class=\"modal-backdrop\">' +\n                '<div class=\"modal-wrapper\" ng-transclude></div>' +\n                '</div>'\n  };\n}]);\n\nIonicModule\n.directive('ionModalView', function() {\n  return {\n    restrict: 'E',\n    compile: function(element, attr) {\n      element.addClass('modal');\n    }\n  };\n});\n\n/**\n * @ngdoc directive\n * @name ionNavBackButton\n * @module ionic\n * @restrict E\n * @parent ionNavBar\n * @description\n * Creates a back button inside an {@link ionic.directive:ionNavBar}.\n *\n * Will show up when the user is able to go back in the current navigation stack.\n *\n * By default, will go back when clicked.  If you wish for more advanced behavior, see the\n * examples below.\n *\n * @usage\n *\n * With default click action:\n *\n * ```html\n * <ion-nav-bar>\n *   <ion-nav-back-button class=\"button-clear\">\n *     <i class=\"ion-arrow-left-c\"></i> Back\n *   </ion-nav-back-button>\n * </ion-nav-bar>\n * ```\n *\n * With custom click action, using {@link ionic.service:$ionicNavBarDelegate}:\n *\n * ```html\n * <ion-nav-bar ng-controller=\"MyCtrl\">\n *   <ion-nav-back-button class=\"button-clear\"\n *     ng-click=\"goBack()\">\n *     <i class=\"ion-arrow-left-c\"></i> Back\n *   </ion-nav-back-button>\n * </ion-nav-bar>\n * ```\n * ```js\n * function MyCtrl($scope, $ionicNavBarDelegate) {\n *   $scope.goBack = function() {\n *     $ionicNavBarDelegate.back();\n *   };\n * }\n * ```\n *\n * Displaying the previous title on the back button, again using\n * {@link ionic.service:$ionicNavBarDelegate}.\n *\n * ```html\n * <ion-nav-bar ng-controller=\"MyCtrl\">\n *   <ion-nav-back-button class=\"button-icon\">\n *     <i class=\"icon ion-arrow-left-c\"></i>{% raw %}{{getPreviousTitle() || 'Back'}}{% endraw %}\n *   </ion-nav-back-button>\n * </ion-nav-bar>\n * ```\n * ```js\n * function MyCtrl($scope, $ionicNavBarDelegate) {\n *   $scope.getPreviousTitle = function() {\n *     return $ionicNavBarDelegate.getPreviousTitle();\n *   };\n * }\n * ```\n */\nIonicModule\n.directive('ionNavBackButton', [\n  '$animate',\n  '$rootScope',\n  '$sanitize',\n  '$ionicNavBarConfig',\n  '$ionicNgClick',\nfunction($animate, $rootScope, $sanitize, $ionicNavBarConfig, $ionicNgClick) {\n  var backIsShown = false;\n  //If the current viewstate does not allow a back button,\n  //always hide it.\n  $rootScope.$on('$viewHistory.historyChange', function(e, data) {\n    backIsShown = !!data.showBack;\n  });\n  return {\n    restrict: 'E',\n    require: '^ionNavBar',\n    compile: function(tElement, tAttrs) {\n      tElement.addClass('button back-button ng-hide');\n\n      var hasIconChild = !!(tElement.html() || '').match(/class=.*?ion-/);\n\n      return function($scope, $element, $attr, navBarCtrl) {\n\n        // Add a default back button icon based on the nav config, unless one is set\n        if (!hasIconChild && $element[0].className.indexOf('ion-') === -1) {\n          $element.addClass($ionicNavBarConfig.backButtonIcon);\n        }\n\n        //Default to ngClick going back, but don't override a custom one\n        if (!isDefined($attr.ngClick)) {\n          $ionicNgClick($scope, $element, navBarCtrl.back);\n        }\n\n        //Make sure both that a backButton is allowed in the first place,\n        //and that it is shown by the current view.\n        $scope.$watch(function() {\n          if(isDefined($attr.fromTitle)) {\n            $element[0].innerHTML = '<span class=\"back-button-title\">' + $sanitize($scope.oldTitle) + '</span>';\n          }\n          return !!(backIsShown && $scope.backButtonShown);\n        }, ionic.animationFrameThrottle(function(show) {\n          if (show) $animate.removeClass($element, 'ng-hide');\n          else $animate.addClass($element, 'ng-hide');\n        }));\n      };\n    }\n  };\n}]);\n\n\nIonicModule.constant('$ionicNavBarConfig', {\n  transition: 'nav-title-slide-ios7',\n  alignTitle: 'center',\n  backButtonIcon: 'ion-ios7-arrow-back'\n});\n\n/**\n * @ngdoc directive\n * @name ionNavBar\n * @module ionic\n * @delegate ionic.service:$ionicNavBarDelegate\n * @restrict E\n *\n * @description\n * If we have an {@link ionic.directive:ionNavView} directive, we can also create an\n * `<ion-nav-bar>`, which will create a topbar that updates as the application state changes.\n *\n * We can add a back button by putting an {@link ionic.directive:ionNavBackButton} inside.\n *\n * We can add buttons depending on the currently visible view using\n * {@link ionic.directive:ionNavButtons}.\n *\n * Add an [animation class](/docs/v1/components#animations) to the element via the\n * `animation` attribute to enable animated changing of titles \n * (recommended: 'nav-title-slide-ios7').\n *\n * Note that the ion-nav-bar element will only work correctly if your content has an\n * ionView around it.\n *\n * @usage\n *\n * ```html\n * <body ng-app=\"starter\">\n *   <!-- The nav bar that will be updated as we navigate -->\n *   <ion-nav-bar class=\"bar-positive\" animation=\"nav-title-slide-ios7\">\n *   </ion-nav-bar>\n *\n *   <!-- where the initial view template will be rendered -->\n *   <ion-nav-view>\n *     <ion-view>\n *       <ion-content>Hello!</ion-content>\n *     </ion-view>\n *   </ion-nav-view>\n * </body>\n * ```\n *\n * @param {string=} delegate-handle The handle used to identify this navBar\n * with {@link ionic.service:$ionicNavBarDelegate}.\n * @param align-title {string=} Where to align the title of the navbar.\n * Available: 'left', 'right', 'center'. Defaults to 'center'.\n * @param {boolean=} no-tap-scroll By default, the navbar will scroll the content\n * to the top when tapped.  Set no-tap-scroll to true to disable this behavior.\n *\n * </table><br/>\n *\n * ### Alternative Usage\n *\n * Alternatively, you may put ion-nav-bar inside of each individual view's ion-view element.\n * This will allow you to have the whole navbar, not just its contents, transition every view change.\n *\n * This is similar to using a header bar inside your ion-view, except it will have all the power of a navbar.\n *\n * If you do this, simply put nav buttons inside the navbar itself; do not use `<ion-nav-buttons>`.\n *\n *\n * ```html\n * <ion-view title=\"myTitle\">\n *   <ion-nav-bar class=\"bar-positive\">\n *     <ion-nav-back-button>\n *       Back\n *     </ion-nav-back-button>\n *     <div class=\"buttons right-buttons\">\n *       <button class=\"button\">\n *         Right Button\n *       </button>\n *     </div>\n *   </ion-nav-bar>\n * </ion-view>\n * ```\n */\nIonicModule\n.directive('ionNavBar', [\n  '$ionicViewService',\n  '$rootScope',\n  '$animate',\n  '$compile',\n  '$ionicNavBarConfig',\nfunction($ionicViewService, $rootScope, $animate, $compile, $ionicNavBarConfig) {\n\n  return {\n    restrict: 'E',\n    controller: '$ionicNavBar',\n    scope: true,\n    compile: function(tElement, tAttrs) {\n      //We cannot transclude here because it breaks element.data() inheritance on compile\n      tElement\n        .addClass('bar bar-header nav-bar')\n        .append(\n          '<div class=\"buttons left-buttons\"> ' +\n          '</div>' +\n          '<h1 ng-bind-html=\"title\" class=\"title\"></h1>' +\n          '<div class=\"buttons right-buttons\"> ' +\n          '</div>'\n        );\n\n      if (isDefined(tAttrs.animation)) {\n        tElement.addClass(tAttrs.animation);\n      } else {\n        tElement.addClass($ionicNavBarConfig.transition);\n      }\n\n      return { pre: prelink };\n      function prelink($scope, $element, $attr, navBarCtrl) {\n        navBarCtrl._headerBarView = new ionic.views.HeaderBar({\n          el: $element[0],\n          alignTitle: $attr.alignTitle || $ionicNavBarConfig.alignTitle || 'center'\n        });\n\n        //defaults\n        $scope.backButtonShown = false;\n        $scope.shouldAnimate = true;\n        $scope.isReverse = false;\n        $scope.isInvisible = true;\n\n        $scope.$on('$destroy', function() {\n          $scope.$parent.$hasHeader = false;\n        });\n\n        $scope.$watch(function() {\n          return ($scope.isReverse ? ' reverse' : '') +\n            ($scope.isInvisible ? ' invisible' : '') +\n            (!$scope.shouldAnimate ? ' no-animation' : '');\n        }, function(className, oldClassName) {\n          $element.removeClass(oldClassName);\n          $element.addClass(className);\n        });\n\n      }\n    }\n  };\n}]);\n\n\n/**\n * @ngdoc directive\n * @name ionNavButtons\n * @module ionic\n * @restrict E\n * @parent ionNavView\n *\n * @description\n * Use ionNavButtons to set the buttons on your {@link ionic.directive:ionNavBar}\n * from within an {@link ionic.directive:ionView}.\n *\n * Any buttons you declare will be placed onto the navbar's corresponding side,\n * and then destroyed when the user leaves their parent view.\n *\n * @usage\n * ```html\n * <ion-nav-bar>\n * </ion-nav-bar>\n * <ion-nav-view>\n *   <ion-view>\n *     <ion-nav-buttons side=\"left\">\n *       <button class=\"button\" ng-click=\"doSomething()\">\n *         I'm a button on the left of the navbar!\n *       </button>\n *     </ion-nav-buttons>\n *     <ion-content>\n *       Some super content here!\n *     </ion-content>\n *   </ion-view>\n * </ion-nav-view>\n * ```\n *\n * @param {string} side The side to place the buttons on in the parent\n * {@link ionic.directive:ionNavBar}. Available: 'left' or 'right'.\n */\nIonicModule\n.directive('ionNavButtons', ['$compile', '$animate', function($compile, $animate) {\n  return {\n    require: '^ionNavBar',\n    restrict: 'E',\n    compile: function($element, $attrs) {\n      var content = $element.contents().remove();\n      return function($scope, $element, $attrs, navBarCtrl) {\n        var navElement = $attrs.side === 'right' ?\n          navBarCtrl.rightButtonsElement :\n          navBarCtrl.leftButtonsElement;\n\n        //Put all of our inside buttons into their own span,\n        //so we can remove them all when this element dies -\n        //even if the buttons have changed through an ng-repeat or the like,\n        //we just remove their div parent and they are gone.\n        var buttons = jqLite('<span>').append(content);\n\n        //Compile buttons inside content so they have access to everything\n        //something inside content does (eg parent ionicScroll)\n        $element.append(buttons);\n        $compile(buttons)($scope);\n\n        //Append buttons to navbar\n        ionic.requestAnimationFrame(function() {\n          //If the scope is destroyed before raf runs, be sure not to enter\n          if (!$scope.$$destroyed) {\n            $animate.enter(buttons, navElement);\n          }\n        });\n\n        //When our ion-nav-buttons container is destroyed,\n        //destroy everything in the navbar\n        $scope.$on('$destroy', function() {\n          $animate.leave(buttons);\n        });\n\n        // The original element is just a completely empty <ion-nav-buttons> element.\n        // make it invisible just to be sure it doesn't change any layout\n        $element.css('display', 'none');\n      };\n    }\n  };\n}]);\n\n\n/**\n * @ngdoc directive\n * @name navClear\n * @module ionic\n * @restrict AC\n *\n * @description\n * nav-clear is an attribute directive which should be used with an element that changes\n * the view on click, for example an `<a href>` or a `<button ui-sref>`.\n *\n * nav-clear will cause the given element, when clicked, to disable the next view transition.\n * This directive is useful, for example, for links within a sideMenu.\n *\n * @usage\n * Below is a link in a side menu, with the nav-clear directive added to it.\n * Tapping this link will disable any animations that would normally occur\n * between views.\n *\n * ```html\n * <a nav-clear menu-close href=\"#/home\" class=\"item\">Home</a>\n * ```\n */\nIonicModule\n.directive('navClear', [\n  '$ionicViewService',\n  '$state',\n  '$location',\n  '$window',\n  '$rootScope',\nfunction($ionicViewService, $location, $state, $window, $rootScope) {\n  $rootScope.$on('$stateChangeError', function() {\n    $ionicViewService.nextViewOptions(null);\n  });\n  return {\n    priority: 100,\n    restrict: 'AC',\n    compile: function($element) {\n      return { pre: prelink };\n      function prelink($scope, $element, $attrs) {\n        var unregisterListener;\n        function listenForStateChange() {\n          unregisterListener = $scope.$on('$stateChangeStart', function() {\n            $ionicViewService.nextViewOptions({\n              disableAnimate: true,\n              disableBack: true\n            });\n            unregisterListener();\n          });\n          $window.setTimeout(unregisterListener, 300);\n        }\n\n        $element.on('click', listenForStateChange);\n      }\n    }\n  };\n}]);\n\nIonicModule.constant('$ionicNavViewConfig', {\n  transition: 'slide-left-right-ios7'\n});\n\n/**\n * @ngdoc directive\n * @name ionNavView\n * @module ionic\n * @restrict E\n * @codepen odqCz\n *\n * @description\n * As a user navigates throughout your app, Ionic is able to keep track of their\n * navigation history. By knowing their history, transitions between views\n * correctly slide either left or right, or no transition at all. An additional\n * benefit to Ionic's navigation system is its ability to manage multiple\n * histories.\n *\n * Ionic uses the AngularUI Router module so app interfaces can be organized\n * into various \"states\". Like Angular's core $route service, URLs can be used\n * to control the views. However, the AngularUI Router provides a more powerful\n * state manager in that states are bound to named, nested, and parallel views,\n * allowing more than one template to be rendered on the same page.\n * Additionally, each state is not required to be bound to a URL, and data can\n * be pushed to each state which allows much flexibility.\n *\n * The ionNavView directive is used to render templates in your application. Each template\n * is part of a state. States are usually mapped to a url, and are defined programatically\n * using angular-ui-router (see [their docs](https://github.com/angular-ui/ui-router/wiki),\n * and remember to replace ui-view with ion-nav-view in examples).\n *\n * @usage\n * In this example, we will create a navigation view that contains our different states for the app.\n *\n * To do this, in our markup we use ionNavView top level directive. To display a header bar we use\n * the {@link ionic.directive:ionNavBar} directive that updates as we navigate through the\n * navigation stack.\n *\n * You can use any [animation class](/docs/v1/components#animation) on the navView's `animation` attribute\n * to have its pages animate.\n *\n * Recommended for page transitions: 'slide-left-right', 'slide-left-right-ios7', 'slide-in-up'.\n *\n * ```html\n * <ion-nav-bar></ion-nav-bar>\n * <ion-nav-view animation=\"slide-left-right\">\n *   <!-- Center content -->\n * </ion-nav-view>\n * ```\n *\n * Next, we need to setup our states that will be rendered.\n *\n * ```js\n * var app = angular.module('myApp', ['ionic']);\n * app.config(function($stateProvider) {\n *   $stateProvider\n *   .state('index', {\n *     url: '/',\n *     templateUrl: 'home.html'\n *   })\n *   .state('music', {\n *     url: '/music',\n *     templateUrl: 'music.html'\n *   });\n * });\n * ```\n * Then on app start, $stateProvider will look at the url, see it matches the index state,\n * and then try to load home.html into the `<ion-nav-view>`.\n *\n * Pages are loaded by the URLs given. One simple way to create templates in Angular is to put\n * them directly into your HTML file and use the `<script type=\"text/ng-template\">` syntax.\n * So here is one way to put home.html into our app:\n *\n * ```html\n * <script id=\"home\" type=\"text/ng-template\">\n *   <!-- The title of the ion-view will be shown on the navbar -->\n *   <ion-view title=\"'Home'\">\n *     <ion-content ng-controller=\"HomeCtrl\">\n *       <!-- The content of the page -->\n *       <a href=\"#/music\">Go to music page!</a>\n *     </ion-content>\n *   </ion-view>\n * </script>\n * ```\n *\n * This is good to do because the template will be cached for very fast loading, instead of\n * having to fetch them from the network.\n *\n * Please visit [AngularUI Router's docs](https://github.com/angular-ui/ui-router/wiki) for\n * more info. Below is a great video by the AngularUI Router guys that may help to explain\n * how it all works:\n *\n * <iframe width=\"560\" height=\"315\" src=\"//www.youtube.com/embed/dqJRoh8MnBo\"\n * frameborder=\"0\" allowfullscreen></iframe>\n *\n * @param {string=} name A view name. The name should be unique amongst the other views in the\n * same state. You can have views of the same name that live in different states. For more\n * information, see ui-router's [ui-view documentation](http://angular-ui.github.io/ui-router/site/#/api/ui.router.state.directive:ui-view).\n */\nIonicModule\n.directive('ionNavView', [\n  '$ionicViewService',\n  '$state',\n  '$compile',\n  '$controller',\n  '$animate',\nfunction( $ionicViewService,   $state,   $compile,   $controller,   $animate) {\n  // IONIC's fork of Angular UI Router, v0.2.7\n  // the navView handles registering views in the history, which animation to use, and which\n  var viewIsUpdating = false;\n\n  var directive = {\n    restrict: 'E',\n    terminal: true,\n    priority: 2000,\n    transclude: true,\n    controller: function(){},\n    compile: function (element, attr, transclude) {\n      return function(scope, element, attr, navViewCtrl) {\n        var viewScope, viewLocals,\n          name = attr[directive.name] || attr.name || '',\n          onloadExp = attr.onload || '',\n          initialView = transclude(scope);\n\n        // Put back the compiled initial view\n        element.append(initialView);\n\n        // Find the details of the parent view directive (if any) and use it\n        // to derive our own qualified view name, then hang our own details\n        // off the DOM so child directives can find it.\n        var parent = element.parent().inheritedData('$uiView');\n        if (name.indexOf('@') < 0) name  = name + '@' + ((parent && parent.state) ? parent.state.name : '');\n        var view = { name: name, state: null };\n        element.data('$uiView', view);\n\n        var eventHook = function() {\n          if (viewIsUpdating) return;\n          viewIsUpdating = true;\n\n          try { updateView(true); } catch (e) {\n            viewIsUpdating = false;\n            throw e;\n          }\n          viewIsUpdating = false;\n        };\n\n        scope.$on('$stateChangeSuccess', eventHook);\n        // scope.$on('$viewContentLoading', eventHook);\n        updateView(false);\n\n        function updateView(doAnimate) {\n          //===false because $animate.enabled() is a noop without angular-animate included\n          if ($animate.enabled() === false) {\n            doAnimate = false;\n          }\n\n          var locals = $state.$current && $state.$current.locals[name];\n          if (locals === viewLocals) return; // nothing to do\n          var renderer = $ionicViewService.getRenderer(element, attr, scope);\n\n          // Destroy previous view scope\n          if (viewScope) {\n            viewScope.$destroy();\n            viewScope = null;\n          }\n\n          if (!locals) {\n            viewLocals = null;\n            view.state = null;\n\n            // Restore the initial view\n            return element.append(initialView);\n          }\n\n          var newElement = jqLite('<div></div>').html(locals.$template).contents();\n          var viewRegisterData = renderer().register(newElement);\n\n          // Remove existing content\n          renderer(doAnimate).leave();\n\n          viewLocals = locals;\n          view.state = locals.$$state;\n\n          renderer(doAnimate).enter(newElement);\n\n          var link = $compile(newElement);\n          viewScope = scope.$new();\n\n          viewScope.$navDirection = viewRegisterData.navDirection;\n\n          if (locals.$$controller) {\n            locals.$scope = viewScope;\n            var controller = $controller(locals.$$controller, locals);\n            element.children().data('$ngControllerController', controller);\n          }\n          link(viewScope);\n\n          var viewHistoryData = $ionicViewService._getViewById(viewRegisterData.viewId) || {};\n          viewScope.$broadcast('$viewContentLoaded', viewHistoryData);\n\n          if (onloadExp) viewScope.$eval(onloadExp);\n\n          newElement = null;\n        }\n      };\n    }\n  };\n  return directive;\n}]);\n\n\nIonicModule\n\n.config(['$provide', function($provide) {\n  $provide.decorator('ngClickDirective', ['$delegate', function($delegate) {\n    // drop the default ngClick directive\n    $delegate.shift();\n    return $delegate;\n  }]);\n}])\n\n/**\n * @private\n */\n.factory('$ionicNgClick', ['$parse', function($parse) {\n  return function(scope, element, clickExpr) {\n    var clickHandler = angular.isFunction(clickExpr) ?\n      clickExpr :\n      $parse(clickExpr);\n\n    element.on('click', function(event) {\n      scope.$apply(function() {\n        clickHandler(scope, {$event: (event)});\n      });\n    });\n\n    // Hack for iOS Safari's benefit. It goes searching for onclick handlers and is liable to click\n    // something else nearby.\n    element.onclick = function(event) { };\n  };\n}])\n\n.directive('ngClick', ['$ionicNgClick', function($ionicNgClick) {\n  return function(scope, element, attr) {\n    $ionicNgClick(scope, element, attr.ngClick);\n  };\n}])\n\n.directive('ionStopEvent', function () {\n  return {\n    restrict: 'A',\n    link: function (scope, element, attr) {\n      element.bind(attr.ionStopEvent, eventStopPropagation);\n    }\n  };\n});\nfunction eventStopPropagation(e) {\n  e.stopPropagation();\n}\n\n\n/**\n * @ngdoc directive\n * @name ionPane\n * @module ionic\n * @restrict E\n *\n * @description A simple container that fits content, with no side effects.  Adds the 'pane' class to the element.\n */\nIonicModule\n.directive('ionPane', function() {\n  return {\n    restrict: 'E',\n    link: function(scope, element, attr) {\n      element.addClass('pane');\n    }\n  };\n});\n\n/*\n * We don't document the ionPopover directive, we instead document\n * the $ionicPopover service\n */\nIonicModule\n.directive('ionPopover', [function() {\n  return {\n    restrict: 'E',\n    transclude: true,\n    replace: true,\n    controller: [function(){}],\n    template: '<div class=\"popover-backdrop\">' +\n                '<div class=\"popover-wrapper\" ng-transclude></div>' +\n              '</div>'\n  };\n}]);\n\nIonicModule\n.directive('ionPopoverView', function() {\n  return {\n    restrict: 'E',\n    compile: function(element) {\n      element.append( angular.element('<div class=\"popover-arrow\"></div>') );\n      element.addClass('popover');\n    }\n  };\n});\n\n/**\n * @ngdoc directive\n * @name ionRadio\n * @module ionic\n * @restrict E\n * @codepen saoBG\n * @description\n * The radio directive is no different than the HTML radio input, except it's styled differently.\n *\n * Radio behaves like any [AngularJS radio](http://docs.angularjs.org/api/ng/input/input[radio]).\n *\n * @usage\n * ```html\n * <ion-radio ng-model=\"choice\" ng-value=\"'A'\">Choose A</ion-radio>\n * <ion-radio ng-model=\"choice\" ng-value=\"'B'\">Choose B</ion-radio>\n * <ion-radio ng-model=\"choice\" ng-value=\"'C'\">Choose C</ion-radio>\n * ```\n */\nIonicModule\n.directive('ionRadio', function() {\n  return {\n    restrict: 'E',\n    replace: true,\n    require: '?ngModel',\n    transclude: true,\n    template:\n      '<label class=\"item item-radio\">' +\n        '<input type=\"radio\" name=\"radio-group\">' +\n        '<div class=\"item-content disable-pointer-events\" ng-transclude></div>' +\n        '<i class=\"radio-icon disable-pointer-events icon ion-checkmark\"></i>' +\n      '</label>',\n\n    compile: function(element, attr) {\n      if(attr.icon) element.children().eq(2).removeClass('ion-checkmark').addClass(attr.icon);\n      var input = element.find('input');\n      forEach({\n          'name': attr.name,\n          'value': attr.value,\n          'disabled': attr.disabled,\n          'ng-value': attr.ngValue,\n          'ng-model': attr.ngModel,\n          'ng-disabled': attr.ngDisabled,\n          'ng-change': attr.ngChange\n      }, function(value, name) {\n        if (isDefined(value)) {\n            input.attr(name, value);\n          }\n      });\n\n      return function(scope, element, attr) {\n        scope.getValue = function() {\n          return scope.ngValue || attr.value;\n        };\n      };\n    }\n  };\n});\n\n\n/**\n * @ngdoc directive\n * @name ionRefresher\n * @module ionic\n * @restrict E\n * @parent ionic.directive:ionContent, ionic.directive:ionScroll\n * @description\n * Allows you to add pull-to-refresh to a scrollView.\n *\n * Place it as the first child of your {@link ionic.directive:ionContent} or\n * {@link ionic.directive:ionScroll} element.\n *\n * When refreshing is complete, $broadcast the 'scroll.refreshComplete' event\n * from your controller.\n *\n * @usage\n *\n * ```html\n * <ion-content ng-controller=\"MyController\">\n *   <ion-refresher\n *     pulling-text=\"Pull to refresh...\"\n *     on-refresh=\"doRefresh()\">\n *   </ion-refresher>\n *   <ion-list>\n *     <ion-item ng-repeat=\"item in items\"></ion-item>\n *   </ion-list>\n * </ion-content>\n * ```\n * ```js\n * angular.module('testApp', ['ionic'])\n * .controller('MyController', function($scope, $http) {\n *   $scope.items = [1,2,3];\n *   $scope.doRefresh = function() {\n *     $http.get('/new-items')\n *      .success(function(newItems) {\n *        $scope.items = newItems;\n *      })\n *      .finally(function() {\n *        // Stop the ion-refresher from spinning\n *        $scope.$broadcast('scroll.refreshComplete');\n *      });\n *   };\n * });\n * ```\n *\n * @param {expression=} on-refresh Called when the user pulls down enough and lets go\n * of the refresher.\n * @param {expression=} on-pulling Called when the user starts to pull down\n * on the refresher.\n * @param {string=} pulling-icon The icon to display while the user is pulling down.\n * Default: 'ion-arrow-down-c'.\n * @param {string=} pulling-text The text to display while the user is pulling down.\n * @param {string=} refreshing-icon The icon to display after user lets go of the\n * refresher.\n * @param {string=} refreshing-text The text to display after the user lets go of\n * the refresher.\n *\n */\nIonicModule\n.directive('ionRefresher', ['$ionicBind', function($ionicBind) {\n  return {\n    restrict: 'E',\n    replace: true,\n    require: '^$ionicScroll',\n    template:\n    '<div class=\"scroll-refresher\">' +\n      '<div class=\"ionic-refresher-content\" ' +\n      'ng-class=\"{\\'ionic-refresher-with-text\\': pullingText || refreshingText}\">' +\n        '<div class=\"icon-pulling\">' +\n          '<i class=\"icon {{pullingIcon}}\"></i>' +\n        '</div>' +\n        '<div class=\"text-pulling\" ng-bind-html=\"pullingText\"></div>' +\n        '<i class=\"icon {{refreshingIcon}} icon-refreshing\"></i>' +\n        '<div class=\"text-refreshing\" ng-bind-html=\"refreshingText\"></div>' +\n      '</div>' +\n    '</div>',\n    compile: function($element, $attrs) {\n      if (angular.isUndefined($attrs.pullingIcon)) {\n        $attrs.$set('pullingIcon', 'ion-arrow-down-c');\n      }\n      if (angular.isUndefined($attrs.refreshingIcon)) {\n        $attrs.$set('refreshingIcon', 'ion-loading-d');\n      }\n      return function($scope, $element, $attrs, scrollCtrl) {\n        $ionicBind($scope, $attrs, {\n          pullingIcon: '@',\n          pullingText: '@',\n          refreshingIcon: '@',\n          refreshingText: '@',\n          $onRefresh: '&onRefresh',\n          $onPulling: '&onPulling'\n        });\n\n        scrollCtrl._setRefresher($scope, $element[0]);\n        $scope.$on('scroll.refreshComplete', function() {\n          $scope.$evalAsync(function() {\n            $element[0].classList.remove('active');\n            scrollCtrl.scrollView.finishPullToRefresh();\n          });\n        });\n      };\n    }\n  };\n}]);\n\n/**\n * @ngdoc directive\n * @name ionScroll\n * @module ionic\n * @delegate ionic.service:$ionicScrollDelegate\n * @codepen mwFuh\n * @restrict E\n *\n * @description\n * Creates a scrollable container for all content inside.\n * \n * @usage\n *\n * Basic usage:\n *\n * ```html\n * <ion-scroll zooming=\"true\" direction=\"xy\" style=\"width: 500px; height: 500px\">\n *   <div style=\"width: 5000px; height: 5000px; background: url('https://upload.wikimedia.org/wikipedia/commons/a/ad/Europe_geological_map-en.jpg') repeat\"></div>\n *  </ion-scroll>\n * ```\n * \n * Note that it's important to set the height of the scroll box as well as the height of the inner\n * content to enable scrolling. This makes it possible to have full control over scrollable areas.\n * \n * If you'd just like to have a center content scrolling area, use {@link ionic.directive:ionContent} instead.\n *\n * @param {string=} delegate-handle The handle used to identify this scrollView\n * with {@link ionic.service:$ionicScrollDelegate}.\n * @param {string=} direction Which way to scroll. 'x' or 'y' or 'xy'. Default 'y'.\n * @param {boolean=} paging Whether to scroll with paging.\n * @param {expression=} on-refresh Called on pull-to-refresh, triggered by an {@link ionic.directive:ionRefresher}.\n * @param {expression=} on-scroll Called whenever the user scrolls.\n * @param {boolean=} scrollbar-x Whether to show the horizontal scrollbar. Default true.\n * @param {boolean=} scrollbar-y Whether to show the vertical scrollbar. Default true.\n * @param {boolean=} zooming Whether to support pinch-to-zoom\n * @param {integer=} min-zoom The smallest zoom amount allowed (default is 0.5)\n * @param {integer=} max-zoom The largest zoom amount allowed (default is 3)\n * @param {boolean=} has-bouncing Whether to allow scrolling to bounce past the edges\n * of the content.  Defaults to true on iOS, false on Android.\n */\nIonicModule\n.directive('ionScroll', [\n  '$timeout',\n  '$controller',\n  '$ionicBind',\nfunction($timeout, $controller, $ionicBind) {\n  return {\n    restrict: 'E',\n    scope: true,\n    controller: function() {},\n    compile: function(element, attr) {\n      element.addClass('scroll-view ionic-scroll');\n\n      //We cannot transclude here because it breaks element.data() inheritance on compile\n      var innerElement = jqLite('<div class=\"scroll\"></div>');\n      innerElement.append(element.contents());\n      element.append(innerElement);\n\n      return { pre: prelink };\n      function prelink($scope, $element, $attr) {\n        var scrollView, scrollCtrl;\n\n        $ionicBind($scope, $attr, {\n          direction: '@',\n          paging: '@',\n          $onScroll: '&onScroll',\n          scroll: '@',\n          scrollbarX: '@',\n          scrollbarY: '@',\n          zooming: '@',\n          minZoom: '@',\n          maxZoom: '@'\n        });\n        $scope.direction = $scope.direction || 'y';\n\n        if (angular.isDefined($attr.padding)) {\n          $scope.$watch($attr.padding, function(newVal) {\n            innerElement.toggleClass('padding', !!newVal);\n          });\n        }\n        if($scope.$eval($scope.paging) === true) {\n          innerElement.addClass('scroll-paging');\n        }\n\n        if(!$scope.direction) { $scope.direction = 'y'; }\n        var isPaging = $scope.$eval($scope.paging) === true;\n\n        var scrollViewOptions= {\n          el: $element[0],\n          delegateHandle: $attr.delegateHandle,\n          bouncing: $scope.$eval($attr.hasBouncing),\n          paging: isPaging,\n          scrollbarX: $scope.$eval($scope.scrollbarX) !== false,\n          scrollbarY: $scope.$eval($scope.scrollbarY) !== false,\n          scrollingX: $scope.direction.indexOf('x') >= 0,\n          scrollingY: $scope.direction.indexOf('y') >= 0,\n          zooming: $scope.$eval($scope.zooming) === true,\n          maxZoom: $scope.$eval($scope.maxZoom) || 3,\n          minZoom: $scope.$eval($scope.minZoom) || 0.5\n        };\n        if (isPaging) {\n          scrollViewOptions.speedMultiplier = 0.8;\n          scrollViewOptions.bouncing = false;\n        }\n\n        scrollCtrl = $controller('$ionicScroll', {\n          $scope: $scope,\n          scrollViewOptions: scrollViewOptions\n        });\n        scrollView = $scope.$parent.scrollView = scrollCtrl.scrollView;\n      }\n    }\n  };\n}]);\n\n/**\n * @ngdoc directive\n * @name ionSideMenu\n * @module ionic\n * @restrict E\n * @parent ionic.directive:ionSideMenus\n *\n * @description\n * A container for a side menu, sibling to an {@link ionic.directive:ionSideMenuContent} directive.\n *\n * @usage\n * ```html\n * <ion-side-menu\n *   side=\"left\"\n *   width=\"myWidthValue + 20\"\n *   is-enabled=\"shouldLeftSideMenuBeEnabled()\">\n * </ion-side-menu>\n * ```\n * For a complete side menu example, see the\n * {@link ionic.directive:ionSideMenus} documentation.\n *\n * @param {string} side Which side the side menu is currently on.  Allowed values: 'left' or 'right'.\n * @param {boolean=} is-enabled Whether this side menu is enabled.\n * @param {number=} width How many pixels wide the side menu should be.  Defaults to 275.\n */\nIonicModule\n.directive('ionSideMenu', function() {\n  return {\n    restrict: 'E',\n    require: '^ionSideMenus',\n    scope: true,\n    compile: function(element, attr) {\n      angular.isUndefined(attr.isEnabled) && attr.$set('isEnabled', 'true');\n      angular.isUndefined(attr.width) && attr.$set('width', '275');\n\n      element.addClass('menu menu-' + attr.side);\n\n      return function($scope, $element, $attr, sideMenuCtrl) {\n        $scope.side = $attr.side || 'left';\n\n        var sideMenu = sideMenuCtrl[$scope.side] = new ionic.views.SideMenu({\n          width: 275,\n          el: $element[0],\n          isEnabled: true\n        });\n\n        $scope.$watch($attr.width, function(val) {\n          var numberVal = +val;\n          if (numberVal && numberVal == val) {\n            sideMenu.setWidth(+val);\n          }\n        });\n        $scope.$watch($attr.isEnabled, function(val) {\n          sideMenu.setIsEnabled(!!val);\n        });\n      };\n    }\n  };\n});\n\n\n/**\n * @ngdoc directive\n * @name ionSideMenuContent\n * @module ionic\n * @restrict E\n * @parent ionic.directive:ionSideMenus\n *\n * @description\n * A container for the main visible content, sibling to one or more\n * {@link ionic.directive:ionSideMenu} directives.\n *\n * @usage\n * ```html\n * <ion-side-menu-content\n *   edge-drag-threshold=\"true\"\n *   drag-content=\"true\">\n * </ion-side-menu-content>\n * ```\n * For a complete side menu example, see the\n * {@link ionic.directive:ionSideMenus} documentation.\n *\n * @param {boolean=} drag-content Whether the content can be dragged. Default true.\n * @param {boolean|number=} edge-drag-threshold Whether the content drag can only start if it is below a certain threshold distance from the edge of the screen.  Default false. Accepts three types of values:\n   *  - If a non-zero number is given, that many pixels is used as the maximum allowed distance from the edge that starts dragging the side menu.\n   *  - If true is given, the default number of pixels (25) is used as the maximum allowed distance.\n   *  - If false or 0 is given, the edge drag threshold is disabled, and dragging from anywhere on the content is allowed.\n *\n */\nIonicModule\n.directive('ionSideMenuContent', [\n  '$timeout',\n  '$ionicGesture',\nfunction($timeout, $ionicGesture) {\n\n  return {\n    restrict: 'EA', //DEPRECATED 'A'\n    require: '^ionSideMenus',\n    scope: true,\n    compile: function(element, attr) {\n      return { pre: prelink };\n      function prelink($scope, $element, $attr, sideMenuCtrl) {\n\n        $element.addClass('menu-content pane');\n\n        if (isDefined(attr.dragContent)) {\n          $scope.$watch(attr.dragContent, function(value) {\n            sideMenuCtrl.canDragContent(value);\n          });\n        } else {\n          sideMenuCtrl.canDragContent(true);\n        }\n\n        if (isDefined(attr.edgeDragThreshold)) {\n          $scope.$watch(attr.edgeDragThreshold, function(value) {\n            sideMenuCtrl.edgeDragThreshold(value);\n          });\n         }\n\n        var defaultPrevented = false;\n        var isDragging = false;\n\n        // Listen for taps on the content to close the menu\n        function contentTap(e) {\n          if(sideMenuCtrl.getOpenAmount() !== 0) {\n            sideMenuCtrl.close();\n            e.gesture.srcEvent.preventDefault();\n          }\n        }\n        ionic.on('tap', contentTap, $element[0]);\n\n        var dragFn = function(e) {\n          if(defaultPrevented || !sideMenuCtrl.isDraggableTarget(e)) return;\n          isDragging = true;\n          sideMenuCtrl._handleDrag(e);\n          e.gesture.srcEvent.preventDefault();\n        };\n\n        var dragVertFn = function(e) {\n          if(isDragging) {\n            e.gesture.srcEvent.preventDefault();\n          }\n        };\n\n        //var dragGesture = Gesture.on('drag', dragFn, $element);\n        var dragRightGesture = $ionicGesture.on('dragright', dragFn, $element);\n        var dragLeftGesture = $ionicGesture.on('dragleft', dragFn, $element);\n        var dragUpGesture = $ionicGesture.on('dragup', dragVertFn, $element);\n        var dragDownGesture = $ionicGesture.on('dragdown', dragVertFn, $element);\n\n        var dragReleaseFn = function(e) {\n          isDragging = false;\n          if(!defaultPrevented) {\n            sideMenuCtrl._endDrag(e);\n          }\n          defaultPrevented = false;\n        };\n\n        var releaseGesture = $ionicGesture.on('release', dragReleaseFn, $element);\n\n        sideMenuCtrl.setContent({\n          element: element[0],\n          onDrag: function(e) {},\n          endDrag: function(e) {},\n          getTranslateX: function() {\n            return $scope.sideMenuContentTranslateX || 0;\n          },\n          setTranslateX: ionic.animationFrameThrottle(function(amount) {\n            $element[0].style[ionic.CSS.TRANSFORM] = 'translate3d(' + amount + 'px, 0, 0)';\n            $timeout(function() {\n              $scope.sideMenuContentTranslateX = amount;\n            });\n          }),\n          enableAnimation: function() {\n            //this.el.classList.add(this.animateClass);\n            $scope.animationEnabled = true;\n            $element[0].classList.add('menu-animated');\n          },\n          disableAnimation: function() {\n            //this.el.classList.remove(this.animateClass);\n            $scope.animationEnabled = false;\n            $element[0].classList.remove('menu-animated');\n          }\n        });\n\n        // Cleanup\n        $scope.$on('$destroy', function() {\n          $ionicGesture.off(dragLeftGesture, 'dragleft', dragFn);\n          $ionicGesture.off(dragRightGesture, 'dragright', dragFn);\n          $ionicGesture.off(dragUpGesture, 'dragup', dragFn);\n          $ionicGesture.off(dragDownGesture, 'dragdown', dragFn);\n          $ionicGesture.off(releaseGesture, 'release', dragReleaseFn);\n          ionic.off('tap', contentTap, $element[0]);\n        });\n      }\n    }\n  };\n}]);\n\nIonicModule\n\n/**\n * @ngdoc directive\n * @name ionSideMenus\n * @module ionic\n * @delegate ionic.service:$ionicSideMenuDelegate\n * @restrict E\n *\n * @description\n * A container element for side menu(s) and the main content. Allows the left\n * and/or right side menu to be toggled by dragging the main content area side\n * to side.\n *\n * To automatically close an opened menu you can add the {@link ionic.directive:menuClose}\n * attribute directive. Including the `menu-close` attribute is usually added to\n * links and buttons within `ion-side-menu` content, so that when the element is\n * clicked then the opened side menu will automatically close.\n *\n * ![Side Menu](https://s3.amazonaws.com/ionicframework.com/docs/v1/controllers/sidemenu.gif)\n *\n * For more information on side menus, check out:\n *\n * - {@link ionic.directive:ionSideMenuContent}\n * - {@link ionic.directive:ionSideMenu}\n * - {@link ionic.directive:menuClose}\n *\n * @usage\n * To use side menus, add an `<ion-side-menus>` parent element,\n * an `<ion-side-menu-content>` for the center content,\n * and one or more `<ion-side-menu>` directives.\n *\n * ```html\n * <ion-side-menus>\n *   <!-- Center content -->\n *   <ion-side-menu-content ng-controller=\"ContentController\">\n *   </ion-side-menu-content>\n *\n *   <!-- Left menu -->\n *   <ion-side-menu side=\"left\">\n *   </ion-side-menu>\n *\n *   <!-- Right menu -->\n *   <ion-side-menu side=\"right\">\n *   </ion-side-menu>\n * </ion-side-menus>\n * ```\n * ```js\n * function ContentController($scope, $ionicSideMenuDelegate) {\n *   $scope.toggleLeft = function() {\n *     $ionicSideMenuDelegate.toggleLeft();\n *   };\n * }\n * ```\n *\n * @param {string=} delegate-handle The handle used to identify this side menu\n * with {@link ionic.service:$ionicSideMenuDelegate}.\n *\n */\n.directive('ionSideMenus', ['$document', function($document) {\n  return {\n    restrict: 'ECA',\n    controller: '$ionicSideMenus',\n    compile: function(element, attr) {\n      attr.$set('class', (attr['class'] || '') + ' view');\n\n      return function($scope) {\n        $scope.$on('$destroy', function(){\n          $document[0].body.classList.remove('menu-open');\n        });\n\n      };\n    }\n  };\n}]);\n\n\n/**\n * @ngdoc directive\n * @name ionSlideBox\n * @module ionic\n * @delegate ionic.service:$ionicSlideBoxDelegate\n * @restrict E\n * @description\n * The Slide Box is a multi-page container where each page can be swiped or dragged between:\n *\n * ![SlideBox](https://s3.amazonaws.com/ionicframework.com/docs/v1/controllers/slideBox.gif)\n *\n * @usage\n * ```html\n * <ion-slide-box on-slide-changed=\"slideHasChanged($index)\">\n *   <ion-slide>\n *     <div class=\"box blue\"><h1>BLUE</h1></div>\n *   </ion-slide>\n *   <ion-slide>\n *     <div class=\"box yellow\"><h1>YELLOW</h1></div>\n *   </ion-slide>\n *   <ion-slide>\n *     <div class=\"box pink\"><h1>PINK</h1></div>\n *   </ion-slide>\n * </ion-slide-box>\n * ```\n *\n * @param {string=} delegate-handle The handle used to identify this slideBox\n * with {@link ionic.service:$ionicSlideBoxDelegate}.\n * @param {boolean=} does-continue Whether the slide box should loop.\n * @param {boolean=} auto-play Whether the slide box should automatically slide. Default true if does-continue is true.\n * @param {number=} slide-interval How many milliseconds to wait to change slides (if does-continue is true). Defaults to 4000.\n * @param {boolean=} show-pager Whether a pager should be shown for this slide box.\n * @param {expression=} pager-click Expression to call when a pager is clicked (if show-pager is true). Is passed the 'index' variable.\n * @param {expression=} on-slide-changed Expression called whenever the slide is changed.  Is passed an '$index' variable.\n * @param {expression=} active-slide Model to bind the current slide to.\n */\nIonicModule\n.directive('ionSlideBox', [\n  '$timeout',\n  '$compile',\n  '$ionicSlideBoxDelegate',\nfunction($timeout, $compile, $ionicSlideBoxDelegate) {\n  return {\n    restrict: 'E',\n    replace: true,\n    transclude: true,\n    scope: {\n      autoPlay: '=',\n      doesContinue: '@',\n      slideInterval: '@',\n      showPager: '@',\n      pagerClick: '&',\n      disableScroll: '@',\n      onSlideChanged: '&',\n      activeSlide: '=?'\n    },\n    controller: ['$scope', '$element', '$attrs', function($scope, $element, $attrs) {\n      var _this = this;\n\n      var continuous = $scope.$eval($scope.doesContinue) === true;\n      var shouldAutoPlay = isDefined($attrs.autoPlay) ? !!$scope.autoPlay : false;\n      var slideInterval = shouldAutoPlay ? $scope.$eval($scope.slideInterval) || 4000 : 0;\n\n      var slider = new ionic.views.Slider({\n        el: $element[0],\n        auto: slideInterval,\n        continuous: continuous,\n        startSlide: $scope.activeSlide,\n        slidesChanged: function() {\n          $scope.currentSlide = slider.currentIndex();\n\n          // Try to trigger a digest\n          $timeout(function() {});\n        },\n        callback: function(slideIndex) {\n          $scope.currentSlide = slideIndex;\n          $scope.onSlideChanged({ index: $scope.currentSlide, $index: $scope.currentSlide});\n          $scope.$parent.$broadcast('slideBox.slideChanged', slideIndex);\n          $scope.activeSlide = slideIndex;\n          // Try to trigger a digest\n          $timeout(function() {});\n        }\n      });\n\n      slider.enableSlide($scope.$eval($attrs.disableScroll) !== true);\n\n      $scope.$watch('activeSlide', function(nv) {\n        if(angular.isDefined(nv)){\n          slider.slide(nv);\n        }\n      });\n\n      $scope.$on('slideBox.nextSlide', function() {\n        slider.next();\n      });\n\n      $scope.$on('slideBox.prevSlide', function() {\n        slider.prev();\n      });\n\n      $scope.$on('slideBox.setSlide', function(e, index) {\n        slider.slide(index);\n      });\n\n      //Exposed for testing\n      this.__slider = slider;\n\n      var deregisterInstance = $ionicSlideBoxDelegate._registerInstance(slider, $attrs.delegateHandle);\n      $scope.$on('$destroy', deregisterInstance);\n\n      this.slidesCount = function() {\n        return slider.slidesCount();\n      };\n\n      this.onPagerClick = function(index) {\n        void 0;\n        $scope.pagerClick({index: index});\n      };\n\n      $timeout(function() {\n        slider.load();\n      });\n    }],\n    template: '<div class=\"slider\">' +\n      '<div class=\"slider-slides\" ng-transclude>' +\n      '</div>' +\n    '</div>',\n\n    link: function($scope, $element, $attr, slideBoxCtrl) {\n      // If the pager should show, append it to the slide box\n      if($scope.$eval($scope.showPager) !== false) {\n        var childScope = $scope.$new();\n        var pager = jqLite('<ion-pager></ion-pager>');\n        $element.append(pager);\n        $compile(pager)(childScope);\n      }\n    }\n  };\n}])\n.directive('ionSlide', function() {\n  return {\n    restrict: 'E',\n    require: '^ionSlideBox',\n    compile: function(element, attr) {\n      element.addClass('slider-slide');\n      return function($scope, $element, $attr) {\n      };\n    },\n  };\n})\n\n.directive('ionPager', function() {\n  return {\n    restrict: 'E',\n    replace: true,\n    require: '^ionSlideBox',\n    template: '<div class=\"slider-pager\"><span class=\"slider-pager-page\" ng-repeat=\"slide in numSlides() track by $index\" ng-class=\"{active: $index == currentSlide}\" ng-click=\"pagerClick($index)\"><i class=\"icon ion-record\"></i></span></div>',\n    link: function($scope, $element, $attr, slideBox) {\n      var selectPage = function(index) {\n        var children = $element[0].children;\n        var length = children.length;\n        for(var i = 0; i < length; i++) {\n          if(i == index) {\n            children[i].classList.add('active');\n          } else {\n            children[i].classList.remove('active');\n          }\n        }\n      };\n\n      $scope.pagerClick = function(index) {\n        slideBox.onPagerClick(index);\n      };\n\n      $scope.numSlides = function() {\n        return new Array(slideBox.slidesCount());\n      };\n\n      $scope.$watch('currentSlide', function(v) {\n        selectPage(v);\n      });\n    }\n  };\n\n});\n\nIonicModule.constant('$ionicTabConfig', {\n  type: ''\n});\n\n/**\n * @ngdoc directive\n * @name ionTab\n * @module ionic\n * @restrict E\n * @parent ionic.directive:ionTabs\n *\n * @description\n * Contains a tab's content.  The content only exists while the given tab is selected.\n *\n * Each ionTab has its own view history.\n *\n * @usage\n * ```html\n * <ion-tab\n *   title=\"Tab!\"\n *   icon=\"my-icon\"\n *   href=\"#/tab/tab-link\"\n *   on-select=\"onTabSelected()\"\n *   on-deselect=\"onTabDeselected()\">\n * </ion-tab>\n * ```\n * For a complete, working tab bar example, see the {@link ionic.directive:ionTabs} documentation.\n *\n * @param {string} title The title of the tab.\n * @param {string=} href The link that this tab will navigate to when tapped.\n * @param {string=} icon The icon of the tab. If given, this will become the default for icon-on and icon-off.\n * @param {string=} icon-on The icon of the tab while it is selected.\n * @param {string=} icon-off The icon of the tab while it is not selected.\n * @param {expression=} badge The badge to put on this tab (usually a number).\n * @param {expression=} badge-style The style of badge to put on this tab (eg tabs-positive).\n * @param {expression=} on-select Called when this tab is selected.\n * @param {expression=} on-deselect Called when this tab is deselected.\n * @param {expression=} ng-click By default, the tab will be selected on click. If ngClick is set, it will not.  You can explicitly switch tabs using {@link ionic.service:$ionicTabsDelegate#select $ionicTabsDelegate.select()}.\n */\nIonicModule\n.directive('ionTab', [\n  '$rootScope',\n  '$animate',\n  '$ionicBind',\n  '$compile',\nfunction($rootScope, $animate, $ionicBind, $compile) {\n\n  //Returns ' key=\"value\"' if value exists\n  function attrStr(k,v) {\n    return angular.isDefined(v) ? ' ' + k + '=\"' + v + '\"' : '';\n  }\n  return {\n    restrict: 'E',\n    require: ['^ionTabs', 'ionTab'],\n    replace: true,\n    controller: '$ionicTab',\n    scope: true,\n    compile: function(element, attr) {\n\n      //We create the tabNavTemplate in the compile phase so that the\n      //attributes we pass down won't be interpolated yet - we want\n      //to pass down the 'raw' versions of the attributes\n      var tabNavTemplate = '<ion-tab-nav' +\n        attrStr('ng-click', attr.ngClick) +\n        attrStr('title', attr.title) +\n        attrStr('icon', attr.icon) +\n        attrStr('icon-on', attr.iconOn) +\n        attrStr('icon-off', attr.iconOff) +\n        attrStr('badge', attr.badge) +\n        attrStr('badge-style', attr.badgeStyle) +\n        attrStr('hidden', attr.hidden) +\n        attrStr('class', attr['class']) +\n        '></ion-tab-nav>';\n\n      //Remove the contents of the element so we can compile them later, if tab is selected\n      //We don't use regular transclusion because it breaks element inheritance\n      var tabContent = jqLite('<div class=\"pane\">')\n        .append( element.contents().remove() );\n\n      return function link($scope, $element, $attr, ctrls) {\n        var childScope;\n        var childElement;\n        var tabsCtrl = ctrls[0];\n        var tabCtrl = ctrls[1];\n\n        var navView = tabContent[0].querySelector('ion-nav-view') ||\n          tabContent[0].querySelector('data-ion-nav-view');\n        var navViewName = navView && navView.getAttribute('name');\n\n        $ionicBind($scope, $attr, {\n          animate: '=',\n          onSelect: '&',\n          onDeselect: '&',\n          title: '@',\n          uiSref: '@',\n          href: '@',\n        });\n\n        tabsCtrl.add($scope);\n        $scope.$on('$destroy', function() {\n          tabsCtrl.remove($scope);\n          tabNavElement.isolateScope().$destroy();\n          tabNavElement.remove();\n        });\n\n        //Remove title attribute so browser-tooltip does not apear\n        $element[0].removeAttribute('title');\n\n        if (navViewName) {\n          tabCtrl.navViewName = navViewName;\n        }\n        $scope.$on('$stateChangeSuccess', selectIfMatchesState);\n        selectIfMatchesState();\n        function selectIfMatchesState() {\n          if (tabCtrl.tabMatchesState()) {\n            tabsCtrl.select($scope);\n          }\n        }\n\n        var tabNavElement = jqLite(tabNavTemplate);\n        tabNavElement.data('$ionTabsController', tabsCtrl);\n        tabNavElement.data('$ionTabController', tabCtrl);\n        tabsCtrl.$tabsElement.append($compile(tabNavElement)($scope));\n\n        $scope.$watch('$tabSelected', function(value) {\n          childScope && childScope.$destroy();\n          childScope = null;\n          childElement && $animate.leave(childElement);\n          childElement = null;\n          if (value) {\n            childScope = $scope.$new();\n            childElement = tabContent.clone();\n            $animate.enter(childElement, tabsCtrl.$element);\n            $compile(childElement)(childScope);\n          }\n        });\n\n      };\n    }\n  };\n}]);\n\nIonicModule\n.directive('ionTabNav', [function() {\n  return {\n    restrict: 'E',\n    replace: true,\n    require: ['^ionTabs', '^ionTab'],\n    template:\n    '<a ng-class=\"{\\'tab-item-active\\': isTabActive(), \\'has-badge\\':badge, \\'tab-hidden\\':isHidden()}\" ' +\n      ' class=\"tab-item\">' +\n      '<span class=\"badge {{badgeStyle}}\" ng-if=\"badge\">{{badge}}</span>' +\n      '<i class=\"icon {{getIconOn()}}\" ng-if=\"getIconOn() && isTabActive()\"></i>' +\n      '<i class=\"icon {{getIconOff()}}\" ng-if=\"getIconOff() && !isTabActive()\"></i>' +\n      '<span class=\"tab-title\" ng-bind-html=\"title\"></span>' +\n    '</a>',\n    scope: {\n      title: '@',\n      icon: '@',\n      iconOn: '@',\n      iconOff: '@',\n      badge: '=',\n      hidden: '@',\n      badgeStyle: '@',\n      'class': '@'\n    },\n    compile: function(element, attr, transclude) {\n      return function link($scope, $element, $attrs, ctrls) {\n        var tabsCtrl = ctrls[0],\n          tabCtrl = ctrls[1];\n\n        //Remove title attribute so browser-tooltip does not apear\n        $element[0].removeAttribute('title');\n\n        $scope.selectTab = function(e) {\n          e.preventDefault();\n          tabsCtrl.select(tabCtrl.$scope, true);\n        };\n        if (!$attrs.ngClick) {\n          $element.on('click', function(event) {\n            $scope.$apply(function() {\n              $scope.selectTab(event);\n            });\n          });\n        }\n\n        $scope.isHidden = function() {\n          if($attrs.hidden === 'true' || $attrs.hidden === true)return true;\n          return false;\n        };\n\n        $scope.getIconOn = function() {\n          return $scope.iconOn || $scope.icon;\n        };\n        $scope.getIconOff = function() {\n          return $scope.iconOff || $scope.icon;\n        };\n\n        $scope.isTabActive = function() {\n          return tabsCtrl.selectedTab() === tabCtrl.$scope;\n        };\n      };\n    }\n  };\n}]);\n\nIonicModule.constant('$ionicTabsConfig', {\n  position: '',\n  type: ''\n});\n\n/**\n * @ngdoc directive\n * @name ionTabs\n * @module ionic\n * @delegate ionic.service:$ionicTabsDelegate\n * @restrict E\n * @codepen KbrzJ\n *\n * @description\n * Powers a multi-tabbed interface with a Tab Bar and a set of \"pages\" that can be tabbed\n * through.\n *\n * Assign any [tabs class](/docs/v1/components#tabs) or\n * [animation class](/docs/v1/components#animation) to the element to define\n * its look and feel.\n *\n * See the {@link ionic.directive:ionTab} directive's documentation for more details on\n * individual tabs.\n *\n * Note: do not place ion-tabs inside of an ion-content element; it has been known to cause a\n * certain CSS bug.\n *\n * @usage\n * ```html\n * <ion-tabs class=\"tabs-positive tabs-icon-only\">\n *\n *   <ion-tab title=\"Home\" icon-on=\"ion-ios7-filing\" icon-off=\"ion-ios7-filing-outline\">\n *     <!-- Tab 1 content -->\n *   </ion-tab>\n *\n *   <ion-tab title=\"About\" icon-on=\"ion-ios7-clock\" icon-off=\"ion-ios7-clock-outline\">\n *     <!-- Tab 2 content -->\n *   </ion-tab>\n *\n *   <ion-tab title=\"Settings\" icon-on=\"ion-ios7-gear\" icon-off=\"ion-ios7-gear-outline\">\n *     <!-- Tab 3 content -->\n *   </ion-tab>\n *\n * </ion-tabs>\n * ```\n *\n * @param {string=} delegate-handle The handle used to identify these tabs\n * with {@link ionic.service:$ionicTabsDelegate}.\n */\n\nIonicModule\n.directive('ionTabs', [\n  '$ionicViewService', \n  '$ionicTabsDelegate', \n  '$ionicTabsConfig', \nfunction($ionicViewService, $ionicTabsDelegate, $ionicTabsConfig) {\n  return {\n    restrict: 'E',\n    scope: true,\n    controller: '$ionicTabs',\n    compile: function(element, attr) {\n      element.addClass('view');\n      //We cannot use regular transclude here because it breaks element.data()\n      //inheritance on compile\n      var innerElement = jqLite('<div class=\"tabs\"></div>');\n      innerElement.append(element.contents());\n      element.append(innerElement);\n      element.addClass($ionicTabsConfig.position);\n      element.addClass($ionicTabsConfig.type);\n\n      return { pre: prelink };\n      function prelink($scope, $element, $attr, tabsCtrl) {\n        var deregisterInstance = $ionicTabsDelegate._registerInstance(\n          tabsCtrl, $attr.delegateHandle\n        );\n\n        $scope.$on('$destroy', deregisterInstance);\n\n        tabsCtrl.$scope = $scope;\n        tabsCtrl.$element = $element;\n        tabsCtrl.$tabsElement = jqLite($element[0].querySelector('.tabs'));\n\n        var el = $element[0];\n        $scope.$watch(function() { return el.className; }, function(value) {\n          var isTabsTop = value.indexOf('tabs-top') !== -1;\n          var isHidden = value.indexOf('tabs-item-hide') !== -1;\n          $scope.$hasTabs = !isTabsTop && !isHidden;\n          $scope.$hasTabsTop = isTabsTop && !isHidden;\n        });\n        $scope.$on('$destroy', function() {\n          delete $scope.$hasTabs;\n          delete $scope.$hasTabsTop;\n        });\n      }\n    }\n  };\n}]);\n\n/**\n * @ngdoc directive\n * @name ionToggle\n * @module ionic\n * @codepen tfAzj\n * @restrict E\n *\n * @description\n * A toggle is an animated switch which binds a given model to a boolean.\n *\n * Allows dragging of the switch's nub.\n *\n * The toggle behaves like any [AngularJS checkbox](http://docs.angularjs.org/api/ng/input/input[checkbox]) otherwise.\n *\n * @param toggle-class {string=} Sets the CSS class on the inner `label.toggle` element created by the directive.\n *\n * @usage\n * Below is an example of a toggle directive which is wired up to the `airplaneMode` model\n * and has the `toggle-calm` CSS class assigned to the inner element.\n *\n * ```html\n * <ion-toggle ng-model=\"airplaneMode\" toggle-class=\"toggle-calm\">Airplane Mode</ion-toggle>\n * ```\n */\nIonicModule\n.directive('ionToggle', [\n  '$ionicGesture',\n  '$timeout',\nfunction($ionicGesture, $timeout) {\n\n  return {\n    restrict: 'E',\n    replace: true,\n    require: '?ngModel',\n    transclude: true,\n    template:\n      '<div class=\"item item-toggle\">' +\n        '<div ng-transclude></div>' +\n        '<label class=\"toggle\">' +\n          '<input type=\"checkbox\">' +\n          '<div class=\"track\">' +\n            '<div class=\"handle\"></div>' +\n          '</div>' +\n        '</label>' +\n      '</div>',\n\n    compile: function(element, attr) {\n      var input = element.find('input');\n      forEach({\n        'name': attr.name,\n        'ng-value': attr.ngValue,\n        'ng-model': attr.ngModel,\n        'ng-checked': attr.ngChecked,\n        'ng-disabled': attr.ngDisabled,\n        'ng-true-value': attr.ngTrueValue,\n        'ng-false-value': attr.ngFalseValue,\n        'ng-change': attr.ngChange\n      }, function(value, name) {\n        if (isDefined(value)) {\n          input.attr(name, value);\n        }\n      });\n\n      if(attr.toggleClass) {\n        element[0].getElementsByTagName('label')[0].classList.add(attr.toggleClass);\n      }\n\n      return function($scope, $element, $attr) {\n         var el, checkbox, track, handle;\n\n         el = $element[0].getElementsByTagName('label')[0];\n         checkbox = el.children[0];\n         track = el.children[1];\n         handle = track.children[0];\n\n         var ngModelController = jqLite(checkbox).controller('ngModel');\n\n         $scope.toggle = new ionic.views.Toggle({\n           el: el,\n           track: track,\n           checkbox: checkbox,\n           handle: handle,\n           onChange: function() {\n             if(checkbox.checked) {\n               ngModelController.$setViewValue(true);\n             } else {\n               ngModelController.$setViewValue(false);\n             }\n             $scope.$apply();\n           }\n         });\n\n         $scope.$on('$destroy', function() {\n           $scope.toggle.destroy();\n         });\n      };\n    }\n\n  };\n}]);\n\n/**\n * @ngdoc directive\n * @name ionView\n * @module ionic\n * @restrict E\n * @parent ionNavView\n *\n * @description\n * A container for content, used to tell a parent {@link ionic.directive:ionNavBar}\n * about the current view.\n *\n * @usage\n * Below is an example where our page will load with a navbar containing \"My Page\" as the title.\n *\n * ```html\n * <ion-nav-bar></ion-nav-bar>\n * <ion-nav-view class=\"slide-left-right\">\n *   <ion-view title=\"My Page\">\n *     <ion-content>\n *       Hello!\n *     </ion-content>\n *   </ion-view>\n * </ion-nav-view>\n * ```\n *\n * @param {string=} title The title to display on the parent {@link ionic.directive:ionNavBar}.\n * @param {boolean=} hide-back-button Whether to hide the back button on the parent\n * {@link ionic.directive:ionNavBar} by default.\n * @param {boolean=} hide-nav-bar Whether to hide the parent\n * {@link ionic.directive:ionNavBar} by default.\n */\nIonicModule\n.directive('ionView', ['$ionicViewService', '$rootScope', '$animate',\n           function( $ionicViewService,   $rootScope,   $animate) {\n  return {\n    restrict: 'EA',\n    priority: 1000,\n    require: ['^?ionNavBar', '^?ionModal'],\n    compile: function(tElement, tAttrs, transclude) {\n      tElement.addClass('pane');\n      tElement[0].removeAttribute('title');\n\n      return function link($scope, $element, $attr, ctrls) {\n        var navBarCtrl = ctrls[0];\n        var modalCtrl = ctrls[1];\n\n        //Don't use the ionView if we're inside a modal or there's no navbar\n        if (!navBarCtrl || modalCtrl) {\n          return;\n        }\n\n        if (angular.isDefined($attr.title)) {\n\n          var initialTitle = $attr.title;\n          navBarCtrl.changeTitle(initialTitle, $scope.$navDirection);\n\n          // watch for changes in the title, don't set initial value as changeTitle does that\n          $attr.$observe('title', function(val, oldVal) {\n            navBarCtrl.setTitle(val);\n          });\n        }\n\n        var hideBackAttr = angular.isDefined($attr.hideBackButton) ?\n          $attr.hideBackButton :\n          'false';\n        $scope.$watch(hideBackAttr, function(value) {\n          // Should we hide a back button when this tab is shown\n          navBarCtrl.showBackButton(!value);\n        });\n\n        var hideNavAttr = angular.isDefined($attr.hideNavBar) ?\n          $attr.hideNavBar :\n          'false';\n        $scope.$watch(hideNavAttr, function(value) {\n          // Should the nav bar be hidden for this view or not?\n          navBarCtrl.showBar(!value);\n        });\n\n      };\n    }\n  };\n}]);\n\n})();"
  },
  {
    "path": "content/present-ionic/slides/ionic/js/ionic.js",
    "content": "/*!\n * Copyright 2014 Drifty Co.\n * http://drifty.com/\n *\n * Ionic, v1.0.0-beta.11\n * A powerful HTML5 mobile app framework.\n * https://ionicframework.com/\n *\n * By @maxlynch, @benjsperry, @adamdbradley <3\n *\n * Licensed under the MIT license. Please see LICENSE for more information.\n *\n */\n\n(function() {\n\n// Create namespaces\n//\nwindow.ionic = {\n  controllers: {},\n  views: {},\n  version: '1.0.0-beta.11'\n};\n\n(function(window, document, ionic) {\n\n  var readyCallbacks = [];\n  var isDomReady = false;\n\n  function domReady() {\n    isDomReady = true;\n    for(var x=0; x<readyCallbacks.length; x++) {\n      ionic.requestAnimationFrame(readyCallbacks[x]);\n    }\n    readyCallbacks = [];\n    document.removeEventListener('DOMContentLoaded', domReady);\n  }\n  document.addEventListener('DOMContentLoaded', domReady);\n\n  // From the man himself, Mr. Paul Irish.\n  // The requestAnimationFrame polyfill\n  // Put it on window just to preserve its context\n  // without having to use .call\n  window._rAF = (function(){\n    return  window.requestAnimationFrame       ||\n            window.webkitRequestAnimationFrame ||\n            window.mozRequestAnimationFrame    ||\n            function( callback ){\n              window.setTimeout(callback, 16);\n            };\n  })();\n\n  var cancelAnimationFrame = window.cancelAnimationFrame ||\n    window.webkitCancelAnimationFrame ||\n    window.mozCancelAnimationFrame ||\n    window.webkitCancelRequestAnimationFrame;\n\n  /**\n  * @ngdoc utility\n  * @name ionic.DomUtil\n  * @module ionic\n  */\n  ionic.DomUtil = {\n    //Call with proper context\n    /**\n     * @ngdoc method\n     * @name ionic.DomUtil#requestAnimationFrame\n     * @alias ionic.requestAnimationFrame\n     * @description Calls [requestAnimationFrame](https://developer.mozilla.org/en-US/docs/Web/API/window.requestAnimationFrame), or a polyfill if not available.\n     * @param {function} callback The function to call when the next frame\n     * happens.\n     */\n    requestAnimationFrame: function(cb) {\n      return window._rAF(cb);\n    },\n\n    cancelAnimationFrame: function(requestId) {\n      cancelAnimationFrame(requestId);\n    },\n\n    /**\n     * @ngdoc method\n     * @name ionic.DomUtil#animationFrameThrottle\n     * @alias ionic.animationFrameThrottle\n     * @description\n     * When given a callback, if that callback is called 100 times between\n     * animation frames, adding Throttle will make it only run the last of\n     * the 100 calls.\n     *\n     * @param {function} callback a function which will be throttled to\n     * requestAnimationFrame\n     * @returns {function} A function which will then call the passed in callback.\n     * The passed in callback will receive the context the returned function is\n     * called with.\n     */\n    animationFrameThrottle: function(cb) {\n      var args, isQueued, context;\n      return function() {\n        args = arguments;\n        context = this;\n        if (!isQueued) {\n          isQueued = true;\n          ionic.requestAnimationFrame(function() {\n            cb.apply(context, args);\n            isQueued = false;\n          });\n        }\n      };\n    },\n\n    /**\n     * @ngdoc method\n     * @name ionic.DomUtil#getPositionInParent\n     * @description\n     * Find an element's scroll offset within its container.\n     * @param {DOMElement} element The element to find the offset of.\n     * @returns {object} A position object with the following properties:\n     *   - `{number}` `left` The left offset of the element.\n     *   - `{number}` `top` The top offset of the element.\n     */\n    getPositionInParent: function(el) {\n      return {\n        left: el.offsetLeft,\n        top: el.offsetTop\n      };\n    },\n\n    /**\n     * @ngdoc method\n     * @name ionic.DomUtil#ready\n     * @description\n     * Call a function when the DOM is ready, or if it is already ready\n     * call the function immediately.\n     * @param {function} callback The function to be called.\n     */\n    ready: function(cb) {\n      if(isDomReady || document.readyState === \"complete\") {\n        ionic.requestAnimationFrame(cb);\n      } else {\n        readyCallbacks.push(cb);\n      }\n    },\n\n    /**\n     * @ngdoc method\n     * @name ionic.DomUtil#getTextBounds\n     * @description\n     * Get a rect representing the bounds of the given textNode.\n     * @param {DOMElement} textNode The textNode to find the bounds of.\n     * @returns {object} An object representing the bounds of the node. Properties:\n     *   - `{number}` `left` The left positton of the textNode.\n     *   - `{number}` `right` The right positton of the textNode.\n     *   - `{number}` `top` The top positton of the textNode.\n     *   - `{number}` `bottom` The bottom position of the textNode.\n     *   - `{number}` `width` The width of the textNode.\n     *   - `{number}` `height` The height of the textNode.\n     */\n    getTextBounds: function(textNode) {\n      if(document.createRange) {\n        var range = document.createRange();\n        range.selectNodeContents(textNode);\n        if(range.getBoundingClientRect) {\n          var rect = range.getBoundingClientRect();\n          if(rect) {\n            var sx = window.scrollX;\n            var sy = window.scrollY;\n\n            return {\n              top: rect.top + sy,\n              left: rect.left + sx,\n              right: rect.left + sx + rect.width,\n              bottom: rect.top + sy + rect.height,\n              width: rect.width,\n              height: rect.height\n            };\n          }\n        }\n      }\n      return null;\n    },\n\n    /**\n     * @ngdoc method\n     * @name ionic.DomUtil#getChildIndex\n     * @description\n     * Get the first index of a child node within the given element of the\n     * specified type.\n     * @param {DOMElement} element The element to find the index of.\n     * @param {string} type The nodeName to match children of element against.\n     * @returns {number} The index, or -1, of a child with nodeName matching type.\n     */\n    getChildIndex: function(element, type) {\n      if(type) {\n        var ch = element.parentNode.children;\n        var c;\n        for(var i = 0, k = 0, j = ch.length; i < j; i++) {\n          c = ch[i];\n          if(c.nodeName && c.nodeName.toLowerCase() == type) {\n            if(c == element) {\n              return k;\n            }\n            k++;\n          }\n        }\n      }\n      return Array.prototype.slice.call(element.parentNode.children).indexOf(element);\n    },\n\n    /**\n     * @private\n     */\n    swapNodes: function(src, dest) {\n      dest.parentNode.insertBefore(src, dest);\n    },\n\n    /**\n     * @private\n     */\n    centerElementByMargin: function(el) {\n      el.style.marginLeft = (-el.offsetWidth) / 2 + 'px';\n      el.style.marginTop = (-el.offsetHeight) / 2 + 'px';\n    },\n    //Center twice, after raf, to fix a bug with ios and showing elements\n    //that have just been attached to the DOM.\n    centerElementByMarginTwice: function(el) {\n      ionic.requestAnimationFrame(function() {\n        ionic.DomUtil.centerElementByMargin(el);\n        setTimeout(function() {\n          ionic.DomUtil.centerElementByMargin(el);\n          setTimeout(function() {\n            ionic.DomUtil.centerElementByMargin(el);\n          });\n        });\n      });\n    },\n\n    elementIsDescendant: function(el, parent, stopAt) {\n      var current = el;\n      do {\n        if (current === parent) return true;\n        current = current.parentNode;\n      } while (current && current !== stopAt);\n      return false;\n    },\n\n    /**\n     * @ngdoc method\n     * @name ionic.DomUtil#getParentWithClass\n     * @param {DOMElement} element\n     * @param {string} className\n     * @returns {DOMElement} The closest parent of element matching the\n     * className, or null.\n     */\n    getParentWithClass: function(e, className, depth) {\n      depth = depth || 10;\n      while(e.parentNode && depth--) {\n        if(e.parentNode.classList && e.parentNode.classList.contains(className)) {\n          return e.parentNode;\n        }\n        e = e.parentNode;\n      }\n      return null;\n    },\n    /**\n     * @ngdoc method\n     * @name ionic.DomUtil#getParentOrSelfWithClass\n     * @param {DOMElement} element\n     * @param {string} className\n     * @returns {DOMElement} The closest parent or self matching the\n     * className, or null.\n     */\n    getParentOrSelfWithClass: function(e, className, depth) {\n      depth = depth || 10;\n      while(e && depth--) {\n        if(e.classList && e.classList.contains(className)) {\n          return e;\n        }\n        e = e.parentNode;\n      }\n      return null;\n    },\n\n    /**\n     * @ngdoc method\n     * @name ionic.DomUtil#rectContains\n     * @param {number} x\n     * @param {number} y\n     * @param {number} x1\n     * @param {number} y1\n     * @param {number} x2\n     * @param {number} y2\n     * @returns {boolean} Whether {x,y} fits within the rectangle defined by\n     * {x1,y1,x2,y2}.\n     */\n    rectContains: function(x, y, x1, y1, x2, y2) {\n      if(x < x1 || x > x2) return false;\n      if(y < y1 || y > y2) return false;\n      return true;\n    }\n  };\n\n  //Shortcuts\n  ionic.requestAnimationFrame = ionic.DomUtil.requestAnimationFrame;\n  ionic.cancelAnimationFrame = ionic.DomUtil.cancelAnimationFrame;\n  ionic.animationFrameThrottle = ionic.DomUtil.animationFrameThrottle;\n})(window, document, ionic);\n\n/**\n * ion-events.js\n *\n * Author: Max Lynch <max@drifty.com>\n *\n * Framework events handles various mobile browser events, and\n * detects special events like tap/swipe/etc. and emits them\n * as custom events that can be used in an app.\n *\n * Portions lovingly adapted from github.com/maker/ratchet and github.com/alexgibson/tap.js - thanks guys!\n */\n\n(function(ionic) {\n\n  // Custom event polyfill\n  ionic.CustomEvent = (function() {\n    if( typeof window.CustomEvent === 'function' ) return CustomEvent;\n\n    var customEvent = function(event, params) {\n      var evt;\n      params = params || {\n        bubbles: false,\n        cancelable: false,\n        detail: undefined\n      };\n      try {\n        evt = document.createEvent(\"CustomEvent\");\n        evt.initCustomEvent(event, params.bubbles, params.cancelable, params.detail);\n      } catch (error) {\n        // fallback for browsers that don't support createEvent('CustomEvent')\n        evt = document.createEvent(\"Event\");\n        for (var param in params) {\n          evt[param] = params[param];\n        }\n        evt.initEvent(event, params.bubbles, params.cancelable);\n      }\n      return evt;\n    };\n    customEvent.prototype = window.Event.prototype;\n    return customEvent;\n  })();\n\n\n  /**\n   * @ngdoc utility\n   * @name ionic.EventController\n   * @module ionic\n   */\n  ionic.EventController = {\n    VIRTUALIZED_EVENTS: ['tap', 'swipe', 'swiperight', 'swipeleft', 'drag', 'hold', 'release'],\n\n    /**\n     * @ngdoc method\n     * @name ionic.EventController#trigger\n     * @alias ionic.trigger\n     * @param {string} eventType The event to trigger.\n     * @param {object} data The data for the event. Hint: pass in\n     * `{target: targetElement}`\n     * @param {boolean=} bubbles Whether the event should bubble up the DOM.\n     * @param {boolean=} cancelable Whether the event should be cancelable.\n     */\n    // Trigger a new event\n    trigger: function(eventType, data, bubbles, cancelable) {\n      var event = new ionic.CustomEvent(eventType, {\n        detail: data,\n        bubbles: !!bubbles,\n        cancelable: !!cancelable\n      });\n\n      // Make sure to trigger the event on the given target, or dispatch it from\n      // the window if we don't have an event target\n      data && data.target && data.target.dispatchEvent && data.target.dispatchEvent(event) || window.dispatchEvent(event);\n    },\n\n    /**\n     * @ngdoc method\n     * @name ionic.EventController#on\n     * @alias ionic.on\n     * @description Listen to an event on an element.\n     * @param {string} type The event to listen for.\n     * @param {function} callback The listener to be called.\n     * @param {DOMElement} element The element to listen for the event on.\n     */\n    on: function(type, callback, element) {\n      var e = element || window;\n\n      // Bind a gesture if it's a virtual event\n      for(var i = 0, j = this.VIRTUALIZED_EVENTS.length; i < j; i++) {\n        if(type == this.VIRTUALIZED_EVENTS[i]) {\n          var gesture = new ionic.Gesture(element);\n          gesture.on(type, callback);\n          return gesture;\n        }\n      }\n\n      // Otherwise bind a normal event\n      e.addEventListener(type, callback);\n    },\n\n    /**\n     * @ngdoc method\n     * @name ionic.EventController#off\n     * @alias ionic.off\n     * @description Remove an event listener.\n     * @param {string} type\n     * @param {function} callback\n     * @param {DOMElement} element\n     */\n    off: function(type, callback, element) {\n      element.removeEventListener(type, callback);\n    },\n\n    /**\n     * @ngdoc method\n     * @name ionic.EventController#onGesture\n     * @alias ionic.onGesture\n     * @description Add an event listener for a gesture on an element.\n     *\n     * Available eventTypes (from [hammer.js](http://eightmedia.github.io/hammer.js/)):\n     *\n     * `hold`, `tap`, `doubletap`, `drag`, `dragstart`, `dragend`, `dragup`, `dragdown`, <br/>\n     * `dragleft`, `dragright`, `swipe`, `swipeup`, `swipedown`, `swipeleft`, `swiperight`, <br/>\n     * `transform`, `transformstart`, `transformend`, `rotate`, `pinch`, `pinchin`, `pinchout`, </br>\n     * `touch`, `release`\n     *\n     * @param {string} eventType The gesture event to listen for.\n     * @param {function(e)} callback The function to call when the gesture\n     * happens.\n     * @param {DOMElement} element The angular element to listen for the event on.\n     */\n    onGesture: function(type, callback, element) {\n      var gesture = new ionic.Gesture(element);\n      gesture.on(type, callback);\n      return gesture;\n    },\n\n    /**\n     * @ngdoc method\n     * @name ionic.EventController#offGesture\n     * @alias ionic.offGesture\n     * @description Remove an event listener for a gesture on an element.\n     * @param {string} eventType The gesture event.\n     * @param {function(e)} callback The listener that was added earlier.\n     * @param {DOMElement} element The element the listener was added on.\n     */\n    offGesture: function(gesture, type, callback) {\n      gesture.off(type, callback);\n    },\n\n    handlePopState: function(event) {}\n  };\n\n\n  // Map some convenient top-level functions for event handling\n  ionic.on = function() { ionic.EventController.on.apply(ionic.EventController, arguments); };\n  ionic.off = function() { ionic.EventController.off.apply(ionic.EventController, arguments); };\n  ionic.trigger = ionic.EventController.trigger;//function() { ionic.EventController.trigger.apply(ionic.EventController.trigger, arguments); };\n  ionic.onGesture = function() { return ionic.EventController.onGesture.apply(ionic.EventController.onGesture, arguments); };\n  ionic.offGesture = function() { return ionic.EventController.offGesture.apply(ionic.EventController.offGesture, arguments); };\n\n})(window.ionic);\n\n/**\n  * Simple gesture controllers with some common gestures that emit\n  * gesture events.\n  *\n  * Ported from github.com/EightMedia/hammer.js Gestures - thanks!\n  */\n(function(ionic) {\n\n  /**\n   * ionic.Gestures\n   * use this to create instances\n   * @param   {HTMLElement}   element\n   * @param   {Object}        options\n   * @returns {ionic.Gestures.Instance}\n   * @constructor\n   */\n  ionic.Gesture = function(element, options) {\n    return new ionic.Gestures.Instance(element, options || {});\n  };\n\n  ionic.Gestures = {};\n\n  // default settings\n  ionic.Gestures.defaults = {\n    // add css to the element to prevent the browser from doing\n    // its native behavior. this doesnt prevent the scrolling,\n    // but cancels the contextmenu, tap highlighting etc\n    // set to false to disable this\n    stop_browser_behavior: 'disable-user-behavior'\n  };\n\n  // detect touchevents\n  ionic.Gestures.HAS_POINTEREVENTS = window.navigator.pointerEnabled || window.navigator.msPointerEnabled;\n  ionic.Gestures.HAS_TOUCHEVENTS = ('ontouchstart' in window);\n\n  // dont use mouseevents on mobile devices\n  ionic.Gestures.MOBILE_REGEX = /mobile|tablet|ip(ad|hone|od)|android|silk/i;\n  ionic.Gestures.NO_MOUSEEVENTS = ionic.Gestures.HAS_TOUCHEVENTS && window.navigator.userAgent.match(ionic.Gestures.MOBILE_REGEX);\n\n  // eventtypes per touchevent (start, move, end)\n  // are filled by ionic.Gestures.event.determineEventTypes on setup\n  ionic.Gestures.EVENT_TYPES = {};\n\n  // direction defines\n  ionic.Gestures.DIRECTION_DOWN = 'down';\n  ionic.Gestures.DIRECTION_LEFT = 'left';\n  ionic.Gestures.DIRECTION_UP = 'up';\n  ionic.Gestures.DIRECTION_RIGHT = 'right';\n\n  // pointer type\n  ionic.Gestures.POINTER_MOUSE = 'mouse';\n  ionic.Gestures.POINTER_TOUCH = 'touch';\n  ionic.Gestures.POINTER_PEN = 'pen';\n\n  // touch event defines\n  ionic.Gestures.EVENT_START = 'start';\n  ionic.Gestures.EVENT_MOVE = 'move';\n  ionic.Gestures.EVENT_END = 'end';\n\n  // hammer document where the base events are added at\n  ionic.Gestures.DOCUMENT = window.document;\n\n  // plugins namespace\n  ionic.Gestures.plugins = {};\n\n  // if the window events are set...\n  ionic.Gestures.READY = false;\n\n  /**\n   * setup events to detect gestures on the document\n   */\n  function setup() {\n    if(ionic.Gestures.READY) {\n      return;\n    }\n\n    // find what eventtypes we add listeners to\n    ionic.Gestures.event.determineEventTypes();\n\n    // Register all gestures inside ionic.Gestures.gestures\n    for(var name in ionic.Gestures.gestures) {\n      if(ionic.Gestures.gestures.hasOwnProperty(name)) {\n        ionic.Gestures.detection.register(ionic.Gestures.gestures[name]);\n      }\n    }\n\n    // Add touch events on the document\n    ionic.Gestures.event.onTouch(ionic.Gestures.DOCUMENT, ionic.Gestures.EVENT_MOVE, ionic.Gestures.detection.detect);\n    ionic.Gestures.event.onTouch(ionic.Gestures.DOCUMENT, ionic.Gestures.EVENT_END, ionic.Gestures.detection.detect);\n\n    // ionic.Gestures is ready...!\n    ionic.Gestures.READY = true;\n  }\n\n  /**\n   * create new hammer instance\n   * all methods should return the instance itself, so it is chainable.\n   * @param   {HTMLElement}       element\n   * @param   {Object}            [options={}]\n   * @returns {ionic.Gestures.Instance}\n   * @name Gesture.Instance\n   * @constructor\n   */\n  ionic.Gestures.Instance = function(element, options) {\n    var self = this;\n\n    // A null element was passed into the instance, which means\n    // whatever lookup was done to find this element failed to find it\n    // so we can't listen for events on it.\n    if(element === null) {\n      void 0;\n      return;\n    }\n\n    // setup ionic.GesturesJS window events and register all gestures\n    // this also sets up the default options\n    setup();\n\n    this.element = element;\n\n    // start/stop detection option\n    this.enabled = true;\n\n    // merge options\n    this.options = ionic.Gestures.utils.extend(\n        ionic.Gestures.utils.extend({}, ionic.Gestures.defaults),\n        options || {});\n\n    // add some css to the element to prevent the browser from doing its native behavoir\n    if(this.options.stop_browser_behavior) {\n      ionic.Gestures.utils.stopDefaultBrowserBehavior(this.element, this.options.stop_browser_behavior);\n    }\n\n    // start detection on touchstart\n    ionic.Gestures.event.onTouch(element, ionic.Gestures.EVENT_START, function(ev) {\n      if(self.enabled) {\n        ionic.Gestures.detection.startDetect(self, ev);\n      }\n    });\n\n    // return instance\n    return this;\n  };\n\n\n  ionic.Gestures.Instance.prototype = {\n    /**\n     * bind events to the instance\n     * @param   {String}      gesture\n     * @param   {Function}    handler\n     * @returns {ionic.Gestures.Instance}\n     */\n    on: function onEvent(gesture, handler){\n      var gestures = gesture.split(' ');\n      for(var t=0; t<gestures.length; t++) {\n        this.element.addEventListener(gestures[t], handler, false);\n      }\n      return this;\n    },\n\n\n    /**\n     * unbind events to the instance\n     * @param   {String}      gesture\n     * @param   {Function}    handler\n     * @returns {ionic.Gestures.Instance}\n     */\n    off: function offEvent(gesture, handler){\n      var gestures = gesture.split(' ');\n      for(var t=0; t<gestures.length; t++) {\n        this.element.removeEventListener(gestures[t], handler, false);\n      }\n      return this;\n    },\n\n\n    /**\n     * trigger gesture event\n     * @param   {String}      gesture\n     * @param   {Object}      eventData\n     * @returns {ionic.Gestures.Instance}\n     */\n    trigger: function triggerEvent(gesture, eventData){\n      // create DOM event\n      var event = ionic.Gestures.DOCUMENT.createEvent('Event');\n      event.initEvent(gesture, true, true);\n      event.gesture = eventData;\n\n      // trigger on the target if it is in the instance element,\n      // this is for event delegation tricks\n      var element = this.element;\n      if(ionic.Gestures.utils.hasParent(eventData.target, element)) {\n        element = eventData.target;\n      }\n\n      element.dispatchEvent(event);\n      return this;\n    },\n\n\n    /**\n     * enable of disable hammer.js detection\n     * @param   {Boolean}   state\n     * @returns {ionic.Gestures.Instance}\n     */\n    enable: function enable(state) {\n      this.enabled = state;\n      return this;\n    }\n  };\n\n  /**\n   * this holds the last move event,\n   * used to fix empty touchend issue\n   * see the onTouch event for an explanation\n   * type {Object}\n   */\n  var last_move_event = null;\n\n\n  /**\n   * when the mouse is hold down, this is true\n   * type {Boolean}\n   */\n  var enable_detect = false;\n\n\n  /**\n   * when touch events have been fired, this is true\n   * type {Boolean}\n   */\n  var touch_triggered = false;\n\n\n  ionic.Gestures.event = {\n    /**\n     * simple addEventListener\n     * @param   {HTMLElement}   element\n     * @param   {String}        type\n     * @param   {Function}      handler\n     */\n    bindDom: function(element, type, handler) {\n      var types = type.split(' ');\n      for(var t=0; t<types.length; t++) {\n        element.addEventListener(types[t], handler, false);\n      }\n    },\n\n\n    /**\n     * touch events with mouse fallback\n     * @param   {HTMLElement}   element\n     * @param   {String}        eventType        like ionic.Gestures.EVENT_MOVE\n     * @param   {Function}      handler\n     */\n    onTouch: function onTouch(element, eventType, handler) {\n      var self = this;\n\n      this.bindDom(element, ionic.Gestures.EVENT_TYPES[eventType], function bindDomOnTouch(ev) {\n        var sourceEventType = ev.type.toLowerCase();\n\n        // onmouseup, but when touchend has been fired we do nothing.\n        // this is for touchdevices which also fire a mouseup on touchend\n        if(sourceEventType.match(/mouse/) && touch_triggered) {\n          return;\n        }\n\n        // mousebutton must be down or a touch event\n        else if( sourceEventType.match(/touch/) ||   // touch events are always on screen\n          sourceEventType.match(/pointerdown/) || // pointerevents touch\n          (sourceEventType.match(/mouse/) && ev.which === 1)   // mouse is pressed\n          ){\n            enable_detect = true;\n          }\n\n        // mouse isn't pressed\n        else if(sourceEventType.match(/mouse/) && ev.which !== 1) {\n          enable_detect = false;\n        }\n\n\n        // we are in a touch event, set the touch triggered bool to true,\n        // this for the conflicts that may occur on ios and android\n        if(sourceEventType.match(/touch|pointer/)) {\n          touch_triggered = true;\n        }\n\n        // count the total touches on the screen\n        var count_touches = 0;\n\n        // when touch has been triggered in this detection session\n        // and we are now handling a mouse event, we stop that to prevent conflicts\n        if(enable_detect) {\n          // update pointerevent\n          if(ionic.Gestures.HAS_POINTEREVENTS && eventType != ionic.Gestures.EVENT_END) {\n            count_touches = ionic.Gestures.PointerEvent.updatePointer(eventType, ev);\n          }\n          // touch\n          else if(sourceEventType.match(/touch/)) {\n            count_touches = ev.touches.length;\n          }\n          // mouse\n          else if(!touch_triggered) {\n            count_touches = sourceEventType.match(/up/) ? 0 : 1;\n          }\n\n          // if we are in a end event, but when we remove one touch and\n          // we still have enough, set eventType to move\n          if(count_touches > 0 && eventType == ionic.Gestures.EVENT_END) {\n            eventType = ionic.Gestures.EVENT_MOVE;\n          }\n          // no touches, force the end event\n          else if(!count_touches) {\n            eventType = ionic.Gestures.EVENT_END;\n          }\n\n          // store the last move event\n          if(count_touches || last_move_event === null) {\n            last_move_event = ev;\n          }\n\n          // trigger the handler\n          handler.call(ionic.Gestures.detection, self.collectEventData(element, eventType, self.getTouchList(last_move_event, eventType), ev));\n\n          // remove pointerevent from list\n          if(ionic.Gestures.HAS_POINTEREVENTS && eventType == ionic.Gestures.EVENT_END) {\n            count_touches = ionic.Gestures.PointerEvent.updatePointer(eventType, ev);\n          }\n        }\n\n        //debug(sourceEventType +\" \"+ eventType);\n\n        // on the end we reset everything\n        if(!count_touches) {\n          last_move_event = null;\n          enable_detect = false;\n          touch_triggered = false;\n          ionic.Gestures.PointerEvent.reset();\n        }\n      });\n    },\n\n\n    /**\n     * we have different events for each device/browser\n     * determine what we need and set them in the ionic.Gestures.EVENT_TYPES constant\n     */\n    determineEventTypes: function determineEventTypes() {\n      // determine the eventtype we want to set\n      var types;\n\n      // pointerEvents magic\n      if(ionic.Gestures.HAS_POINTEREVENTS) {\n        types = ionic.Gestures.PointerEvent.getEvents();\n      }\n      // on Android, iOS, blackberry, windows mobile we dont want any mouseevents\n      else if(ionic.Gestures.NO_MOUSEEVENTS) {\n        types = [\n          'touchstart',\n          'touchmove',\n          'touchend touchcancel'];\n      }\n      // for non pointer events browsers and mixed browsers,\n      // like chrome on windows8 touch laptop\n      else {\n        types = [\n          'touchstart mousedown',\n          'touchmove mousemove',\n          'touchend touchcancel mouseup'];\n      }\n\n      ionic.Gestures.EVENT_TYPES[ionic.Gestures.EVENT_START]  = types[0];\n      ionic.Gestures.EVENT_TYPES[ionic.Gestures.EVENT_MOVE]   = types[1];\n      ionic.Gestures.EVENT_TYPES[ionic.Gestures.EVENT_END]    = types[2];\n    },\n\n\n    /**\n     * create touchlist depending on the event\n     * @param   {Object}    ev\n     * @param   {String}    eventType   used by the fakemultitouch plugin\n     */\n    getTouchList: function getTouchList(ev/*, eventType*/) {\n      // get the fake pointerEvent touchlist\n      if(ionic.Gestures.HAS_POINTEREVENTS) {\n        return ionic.Gestures.PointerEvent.getTouchList();\n      }\n      // get the touchlist\n      else if(ev.touches) {\n        return ev.touches;\n      }\n      // make fake touchlist from mouse position\n      else {\n        ev.identifier = 1;\n        return [ev];\n      }\n    },\n\n\n    /**\n     * collect event data for ionic.Gestures js\n     * @param   {HTMLElement}   element\n     * @param   {String}        eventType        like ionic.Gestures.EVENT_MOVE\n     * @param   {Object}        eventData\n     */\n    collectEventData: function collectEventData(element, eventType, touches, ev) {\n\n      // find out pointerType\n      var pointerType = ionic.Gestures.POINTER_TOUCH;\n      if(ev.type.match(/mouse/) || ionic.Gestures.PointerEvent.matchType(ionic.Gestures.POINTER_MOUSE, ev)) {\n        pointerType = ionic.Gestures.POINTER_MOUSE;\n      }\n\n      return {\n        center      : ionic.Gestures.utils.getCenter(touches),\n                    timeStamp   : new Date().getTime(),\n                    target      : ev.target,\n                    touches     : touches,\n                    eventType   : eventType,\n                    pointerType : pointerType,\n                    srcEvent    : ev,\n\n                    /**\n                     * prevent the browser default actions\n                     * mostly used to disable scrolling of the browser\n                     */\n                    preventDefault: function() {\n                      if(this.srcEvent.preventManipulation) {\n                        this.srcEvent.preventManipulation();\n                      }\n\n                      if(this.srcEvent.preventDefault) {\n                        //this.srcEvent.preventDefault();\n                      }\n                    },\n\n                    /**\n                     * stop bubbling the event up to its parents\n                     */\n                    stopPropagation: function() {\n                      this.srcEvent.stopPropagation();\n                    },\n\n                    /**\n                     * immediately stop gesture detection\n                     * might be useful after a swipe was detected\n                     * @return {*}\n                     */\n                    stopDetect: function() {\n                      return ionic.Gestures.detection.stopDetect();\n                    }\n      };\n    }\n  };\n\n  ionic.Gestures.PointerEvent = {\n    /**\n     * holds all pointers\n     * type {Object}\n     */\n    pointers: {},\n\n    /**\n     * get a list of pointers\n     * @returns {Array}     touchlist\n     */\n    getTouchList: function() {\n      var self = this;\n      var touchlist = [];\n\n      // we can use forEach since pointerEvents only is in IE10\n      Object.keys(self.pointers).sort().forEach(function(id) {\n        touchlist.push(self.pointers[id]);\n      });\n      return touchlist;\n    },\n\n    /**\n     * update the position of a pointer\n     * @param   {String}   type             ionic.Gestures.EVENT_END\n     * @param   {Object}   pointerEvent\n     */\n    updatePointer: function(type, pointerEvent) {\n      if(type == ionic.Gestures.EVENT_END) {\n        this.pointers = {};\n      }\n      else {\n        pointerEvent.identifier = pointerEvent.pointerId;\n        this.pointers[pointerEvent.pointerId] = pointerEvent;\n      }\n\n      return Object.keys(this.pointers).length;\n    },\n\n    /**\n     * check if ev matches pointertype\n     * @param   {String}        pointerType     ionic.Gestures.POINTER_MOUSE\n     * @param   {PointerEvent}  ev\n     */\n    matchType: function(pointerType, ev) {\n      if(!ev.pointerType) {\n        return false;\n      }\n\n      var types = {};\n      types[ionic.Gestures.POINTER_MOUSE] = (ev.pointerType == ev.MSPOINTER_TYPE_MOUSE || ev.pointerType == ionic.Gestures.POINTER_MOUSE);\n      types[ionic.Gestures.POINTER_TOUCH] = (ev.pointerType == ev.MSPOINTER_TYPE_TOUCH || ev.pointerType == ionic.Gestures.POINTER_TOUCH);\n      types[ionic.Gestures.POINTER_PEN] = (ev.pointerType == ev.MSPOINTER_TYPE_PEN || ev.pointerType == ionic.Gestures.POINTER_PEN);\n      return types[pointerType];\n    },\n\n\n    /**\n     * get events\n     */\n    getEvents: function() {\n      return [\n        'pointerdown MSPointerDown',\n      'pointermove MSPointerMove',\n      'pointerup pointercancel MSPointerUp MSPointerCancel'\n        ];\n    },\n\n    /**\n     * reset the list\n     */\n    reset: function() {\n      this.pointers = {};\n    }\n  };\n\n\n  ionic.Gestures.utils = {\n    /**\n     * extend method,\n     * also used for cloning when dest is an empty object\n     * @param   {Object}    dest\n     * @param   {Object}    src\n     * @param\t{Boolean}\tmerge\t\tdo a merge\n     * @returns {Object}    dest\n     */\n    extend: function extend(dest, src, merge) {\n      for (var key in src) {\n        if(dest[key] !== undefined && merge) {\n          continue;\n        }\n        dest[key] = src[key];\n      }\n      return dest;\n    },\n\n\n    /**\n     * find if a node is in the given parent\n     * used for event delegation tricks\n     * @param   {HTMLElement}   node\n     * @param   {HTMLElement}   parent\n     * @returns {boolean}       has_parent\n     */\n    hasParent: function(node, parent) {\n      while(node){\n        if(node == parent) {\n          return true;\n        }\n        node = node.parentNode;\n      }\n      return false;\n    },\n\n\n    /**\n     * get the center of all the touches\n     * @param   {Array}     touches\n     * @returns {Object}    center\n     */\n    getCenter: function getCenter(touches) {\n      var valuesX = [], valuesY = [];\n\n      for(var t= 0,len=touches.length; t<len; t++) {\n        valuesX.push(touches[t].pageX);\n        valuesY.push(touches[t].pageY);\n      }\n\n      return {\n        pageX: ((Math.min.apply(Math, valuesX) + Math.max.apply(Math, valuesX)) / 2),\n          pageY: ((Math.min.apply(Math, valuesY) + Math.max.apply(Math, valuesY)) / 2)\n      };\n    },\n\n\n    /**\n     * calculate the velocity between two points\n     * @param   {Number}    delta_time\n     * @param   {Number}    delta_x\n     * @param   {Number}    delta_y\n     * @returns {Object}    velocity\n     */\n    getVelocity: function getVelocity(delta_time, delta_x, delta_y) {\n      return {\n        x: Math.abs(delta_x / delta_time) || 0,\n        y: Math.abs(delta_y / delta_time) || 0\n      };\n    },\n\n\n    /**\n     * calculate the angle between two coordinates\n     * @param   {Touch}     touch1\n     * @param   {Touch}     touch2\n     * @returns {Number}    angle\n     */\n    getAngle: function getAngle(touch1, touch2) {\n      var y = touch2.pageY - touch1.pageY,\n      x = touch2.pageX - touch1.pageX;\n      return Math.atan2(y, x) * 180 / Math.PI;\n    },\n\n\n    /**\n     * angle to direction define\n     * @param   {Touch}     touch1\n     * @param   {Touch}     touch2\n     * @returns {String}    direction constant, like ionic.Gestures.DIRECTION_LEFT\n     */\n    getDirection: function getDirection(touch1, touch2) {\n      var x = Math.abs(touch1.pageX - touch2.pageX),\n      y = Math.abs(touch1.pageY - touch2.pageY);\n\n      if(x >= y) {\n        return touch1.pageX - touch2.pageX > 0 ? ionic.Gestures.DIRECTION_LEFT : ionic.Gestures.DIRECTION_RIGHT;\n      }\n      else {\n        return touch1.pageY - touch2.pageY > 0 ? ionic.Gestures.DIRECTION_UP : ionic.Gestures.DIRECTION_DOWN;\n      }\n    },\n\n\n    /**\n     * calculate the distance between two touches\n     * @param   {Touch}     touch1\n     * @param   {Touch}     touch2\n     * @returns {Number}    distance\n     */\n    getDistance: function getDistance(touch1, touch2) {\n      var x = touch2.pageX - touch1.pageX,\n      y = touch2.pageY - touch1.pageY;\n      return Math.sqrt((x*x) + (y*y));\n    },\n\n\n    /**\n     * calculate the scale factor between two touchLists (fingers)\n     * no scale is 1, and goes down to 0 when pinched together, and bigger when pinched out\n     * @param   {Array}     start\n     * @param   {Array}     end\n     * @returns {Number}    scale\n     */\n    getScale: function getScale(start, end) {\n      // need two fingers...\n      if(start.length >= 2 && end.length >= 2) {\n        return this.getDistance(end[0], end[1]) /\n          this.getDistance(start[0], start[1]);\n      }\n      return 1;\n    },\n\n\n    /**\n     * calculate the rotation degrees between two touchLists (fingers)\n     * @param   {Array}     start\n     * @param   {Array}     end\n     * @returns {Number}    rotation\n     */\n    getRotation: function getRotation(start, end) {\n      // need two fingers\n      if(start.length >= 2 && end.length >= 2) {\n        return this.getAngle(end[1], end[0]) -\n          this.getAngle(start[1], start[0]);\n      }\n      return 0;\n    },\n\n\n    /**\n     * boolean if the direction is vertical\n     * @param    {String}    direction\n     * @returns  {Boolean}   is_vertical\n     */\n    isVertical: function isVertical(direction) {\n      return (direction == ionic.Gestures.DIRECTION_UP || direction == ionic.Gestures.DIRECTION_DOWN);\n    },\n\n\n    /**\n     * stop browser default behavior with css class\n     * @param   {HtmlElement}   element\n     * @param   {Object}        css_class\n     */\n    stopDefaultBrowserBehavior: function stopDefaultBrowserBehavior(element, css_class) {\n      // changed from making many style changes to just adding a preset classname\n      // less DOM manipulations, less code, and easier to control in the CSS side of things\n      // hammer.js doesn't come with CSS, but ionic does, which is why we prefer this method\n      if(element && element.classList) {\n        element.classList.add(css_class);\n        element.onselectstart = function() {\n          return false;\n        };\n      }\n    }\n  };\n\n\n  ionic.Gestures.detection = {\n    // contains all registred ionic.Gestures.gestures in the correct order\n    gestures: [],\n\n    // data of the current ionic.Gestures.gesture detection session\n    current: null,\n\n    // the previous ionic.Gestures.gesture session data\n    // is a full clone of the previous gesture.current object\n    previous: null,\n\n    // when this becomes true, no gestures are fired\n    stopped: false,\n\n\n    /**\n     * start ionic.Gestures.gesture detection\n     * @param   {ionic.Gestures.Instance}   inst\n     * @param   {Object}            eventData\n     */\n    startDetect: function startDetect(inst, eventData) {\n      // already busy with a ionic.Gestures.gesture detection on an element\n      if(this.current) {\n        return;\n      }\n\n      this.stopped = false;\n\n      this.current = {\n        inst        : inst, // reference to ionic.GesturesInstance we're working for\n        startEvent  : ionic.Gestures.utils.extend({}, eventData), // start eventData for distances, timing etc\n        lastEvent   : false, // last eventData\n        name        : '' // current gesture we're in/detected, can be 'tap', 'hold' etc\n      };\n\n      this.detect(eventData);\n    },\n\n\n    /**\n     * ionic.Gestures.gesture detection\n     * @param   {Object}    eventData\n     */\n    detect: function detect(eventData) {\n      if(!this.current || this.stopped) {\n        return;\n      }\n\n      // extend event data with calculations about scale, distance etc\n      eventData = this.extendEventData(eventData);\n\n      // instance options\n      var inst_options = this.current.inst.options;\n\n      // call ionic.Gestures.gesture handlers\n      for(var g=0,len=this.gestures.length; g<len; g++) {\n        var gesture = this.gestures[g];\n\n        // only when the instance options have enabled this gesture\n        if(!this.stopped && inst_options[gesture.name] !== false) {\n          // if a handler returns false, we stop with the detection\n          if(gesture.handler.call(gesture, eventData, this.current.inst) === false) {\n            this.stopDetect();\n            break;\n          }\n        }\n      }\n\n      // store as previous event event\n      if(this.current) {\n        this.current.lastEvent = eventData;\n      }\n\n      // endevent, but not the last touch, so dont stop\n      if(eventData.eventType == ionic.Gestures.EVENT_END && !eventData.touches.length-1) {\n        this.stopDetect();\n      }\n\n      return eventData;\n    },\n\n\n    /**\n     * clear the ionic.Gestures.gesture vars\n     * this is called on endDetect, but can also be used when a final ionic.Gestures.gesture has been detected\n     * to stop other ionic.Gestures.gestures from being fired\n     */\n    stopDetect: function stopDetect() {\n      // clone current data to the store as the previous gesture\n      // used for the double tap gesture, since this is an other gesture detect session\n      this.previous = ionic.Gestures.utils.extend({}, this.current);\n\n      // reset the current\n      this.current = null;\n\n      // stopped!\n      this.stopped = true;\n    },\n\n\n    /**\n     * extend eventData for ionic.Gestures.gestures\n     * @param   {Object}   ev\n     * @returns {Object}   ev\n     */\n    extendEventData: function extendEventData(ev) {\n      var startEv = this.current.startEvent;\n\n      // if the touches change, set the new touches over the startEvent touches\n      // this because touchevents don't have all the touches on touchstart, or the\n      // user must place his fingers at the EXACT same time on the screen, which is not realistic\n      // but, sometimes it happens that both fingers are touching at the EXACT same time\n      if(startEv && (ev.touches.length != startEv.touches.length || ev.touches === startEv.touches)) {\n        // extend 1 level deep to get the touchlist with the touch objects\n        startEv.touches = [];\n        for(var i=0,len=ev.touches.length; i<len; i++) {\n          startEv.touches.push(ionic.Gestures.utils.extend({}, ev.touches[i]));\n        }\n      }\n\n      var delta_time = ev.timeStamp - startEv.timeStamp,\n          delta_x = ev.center.pageX - startEv.center.pageX,\n          delta_y = ev.center.pageY - startEv.center.pageY,\n          velocity = ionic.Gestures.utils.getVelocity(delta_time, delta_x, delta_y);\n\n      ionic.Gestures.utils.extend(ev, {\n        deltaTime   : delta_time,\n\n        deltaX      : delta_x,\n        deltaY      : delta_y,\n\n        velocityX   : velocity.x,\n        velocityY   : velocity.y,\n\n        distance    : ionic.Gestures.utils.getDistance(startEv.center, ev.center),\n        angle       : ionic.Gestures.utils.getAngle(startEv.center, ev.center),\n        direction   : ionic.Gestures.utils.getDirection(startEv.center, ev.center),\n\n        scale       : ionic.Gestures.utils.getScale(startEv.touches, ev.touches),\n        rotation    : ionic.Gestures.utils.getRotation(startEv.touches, ev.touches),\n\n        startEvent  : startEv\n      });\n\n      return ev;\n    },\n\n\n    /**\n     * register new gesture\n     * @param   {Object}    gesture object, see gestures.js for documentation\n     * @returns {Array}     gestures\n     */\n    register: function register(gesture) {\n      // add an enable gesture options if there is no given\n      var options = gesture.defaults || {};\n      if(options[gesture.name] === undefined) {\n        options[gesture.name] = true;\n      }\n\n      // extend ionic.Gestures default options with the ionic.Gestures.gesture options\n      ionic.Gestures.utils.extend(ionic.Gestures.defaults, options, true);\n\n      // set its index\n      gesture.index = gesture.index || 1000;\n\n      // add ionic.Gestures.gesture to the list\n      this.gestures.push(gesture);\n\n      // sort the list by index\n      this.gestures.sort(function(a, b) {\n        if (a.index < b.index) {\n          return -1;\n        }\n        if (a.index > b.index) {\n          return 1;\n        }\n        return 0;\n      });\n\n      return this.gestures;\n    }\n  };\n\n\n  ionic.Gestures.gestures = ionic.Gestures.gestures || {};\n\n  /**\n   * Custom gestures\n   * ==============================\n   *\n   * Gesture object\n   * --------------------\n   * The object structure of a gesture:\n   *\n   * { name: 'mygesture',\n   *   index: 1337,\n   *   defaults: {\n   *     mygesture_option: true\n   *   }\n   *   handler: function(type, ev, inst) {\n   *     // trigger gesture event\n   *     inst.trigger(this.name, ev);\n   *   }\n   * }\n\n   * @param   {String}    name\n   * this should be the name of the gesture, lowercase\n   * it is also being used to disable/enable the gesture per instance config.\n   *\n   * @param   {Number}    [index=1000]\n   * the index of the gesture, where it is going to be in the stack of gestures detection\n   * like when you build an gesture that depends on the drag gesture, it is a good\n   * idea to place it after the index of the drag gesture.\n   *\n   * @param   {Object}    [defaults={}]\n   * the default settings of the gesture. these are added to the instance settings,\n   * and can be overruled per instance. you can also add the name of the gesture,\n   * but this is also added by default (and set to true).\n   *\n   * @param   {Function}  handler\n   * this handles the gesture detection of your custom gesture and receives the\n   * following arguments:\n   *\n   *      @param  {Object}    eventData\n   *      event data containing the following properties:\n   *          timeStamp   {Number}        time the event occurred\n   *          target      {HTMLElement}   target element\n   *          touches     {Array}         touches (fingers, pointers, mouse) on the screen\n   *          pointerType {String}        kind of pointer that was used. matches ionic.Gestures.POINTER_MOUSE|TOUCH\n   *          center      {Object}        center position of the touches. contains pageX and pageY\n   *          deltaTime   {Number}        the total time of the touches in the screen\n   *          deltaX      {Number}        the delta on x axis we haved moved\n   *          deltaY      {Number}        the delta on y axis we haved moved\n   *          velocityX   {Number}        the velocity on the x\n   *          velocityY   {Number}        the velocity on y\n   *          angle       {Number}        the angle we are moving\n   *          direction   {String}        the direction we are moving. matches ionic.Gestures.DIRECTION_UP|DOWN|LEFT|RIGHT\n   *          distance    {Number}        the distance we haved moved\n   *          scale       {Number}        scaling of the touches, needs 2 touches\n   *          rotation    {Number}        rotation of the touches, needs 2 touches *\n   *          eventType   {String}        matches ionic.Gestures.EVENT_START|MOVE|END\n   *          srcEvent    {Object}        the source event, like TouchStart or MouseDown *\n   *          startEvent  {Object}        contains the same properties as above,\n   *                                      but from the first touch. this is used to calculate\n   *                                      distances, deltaTime, scaling etc\n   *\n   *      @param  {ionic.Gestures.Instance}    inst\n   *      the instance we are doing the detection for. you can get the options from\n   *      the inst.options object and trigger the gesture event by calling inst.trigger\n   *\n   *\n   * Handle gestures\n   * --------------------\n   * inside the handler you can get/set ionic.Gestures.detectionic.current. This is the current\n   * detection sessionic. It has the following properties\n   *      @param  {String}    name\n   *      contains the name of the gesture we have detected. it has not a real function,\n   *      only to check in other gestures if something is detected.\n   *      like in the drag gesture we set it to 'drag' and in the swipe gesture we can\n   *      check if the current gesture is 'drag' by accessing ionic.Gestures.detectionic.current.name\n   *\n   *      readonly\n   *      @param  {ionic.Gestures.Instance}    inst\n   *      the instance we do the detection for\n   *\n   *      readonly\n   *      @param  {Object}    startEvent\n   *      contains the properties of the first gesture detection in this sessionic.\n   *      Used for calculations about timing, distance, etc.\n   *\n   *      readonly\n   *      @param  {Object}    lastEvent\n   *      contains all the properties of the last gesture detect in this sessionic.\n   *\n   * after the gesture detection session has been completed (user has released the screen)\n   * the ionic.Gestures.detectionic.current object is copied into ionic.Gestures.detectionic.previous,\n   * this is usefull for gestures like doubletap, where you need to know if the\n   * previous gesture was a tap\n   *\n   * options that have been set by the instance can be received by calling inst.options\n   *\n   * You can trigger a gesture event by calling inst.trigger(\"mygesture\", event).\n   * The first param is the name of your gesture, the second the event argument\n   *\n   *\n   * Register gestures\n   * --------------------\n   * When an gesture is added to the ionic.Gestures.gestures object, it is auto registered\n   * at the setup of the first ionic.Gestures instance. You can also call ionic.Gestures.detectionic.register\n   * manually and pass your gesture object as a param\n   *\n   */\n\n  /**\n   * Hold\n   * Touch stays at the same place for x time\n   * events  hold\n   */\n  ionic.Gestures.gestures.Hold = {\n    name: 'hold',\n    index: 10,\n    defaults: {\n      hold_timeout\t: 500,\n      hold_threshold\t: 1\n    },\n    timer: null,\n    handler: function holdGesture(ev, inst) {\n      switch(ev.eventType) {\n        case ionic.Gestures.EVENT_START:\n          // clear any running timers\n          clearTimeout(this.timer);\n\n          // set the gesture so we can check in the timeout if it still is\n          ionic.Gestures.detection.current.name = this.name;\n\n          // set timer and if after the timeout it still is hold,\n          // we trigger the hold event\n          this.timer = setTimeout(function() {\n            if(ionic.Gestures.detection.current.name == 'hold') {\n              ionic.tap.cancelClick();\n              inst.trigger('hold', ev);\n            }\n          }, inst.options.hold_timeout);\n          break;\n\n          // when you move or end we clear the timer\n        case ionic.Gestures.EVENT_MOVE:\n          if(ev.distance > inst.options.hold_threshold) {\n            clearTimeout(this.timer);\n          }\n          break;\n\n        case ionic.Gestures.EVENT_END:\n          clearTimeout(this.timer);\n          break;\n      }\n    }\n  };\n\n\n  /**\n   * Tap/DoubleTap\n   * Quick touch at a place or double at the same place\n   * events  tap, doubletap\n   */\n  ionic.Gestures.gestures.Tap = {\n    name: 'tap',\n    index: 100,\n    defaults: {\n      tap_max_touchtime\t: 250,\n      tap_max_distance\t: 10,\n      tap_always\t\t\t: true,\n      doubletap_distance\t: 20,\n      doubletap_interval\t: 300\n    },\n    handler: function tapGesture(ev, inst) {\n      if(ev.eventType == ionic.Gestures.EVENT_END && ev.srcEvent.type != 'touchcancel') {\n        // previous gesture, for the double tap since these are two different gesture detections\n        var prev = ionic.Gestures.detection.previous,\n        did_doubletap = false;\n\n        // when the touchtime is higher then the max touch time\n        // or when the moving distance is too much\n        if(ev.deltaTime > inst.options.tap_max_touchtime ||\n            ev.distance > inst.options.tap_max_distance) {\n              return;\n            }\n\n        // check if double tap\n        if(prev && prev.name == 'tap' &&\n            (ev.timeStamp - prev.lastEvent.timeStamp) < inst.options.doubletap_interval &&\n            ev.distance < inst.options.doubletap_distance) {\n              inst.trigger('doubletap', ev);\n              did_doubletap = true;\n            }\n\n        // do a single tap\n        if(!did_doubletap || inst.options.tap_always) {\n          ionic.Gestures.detection.current.name = 'tap';\n          inst.trigger('tap', ev);\n        }\n      }\n    }\n  };\n\n\n  /**\n   * Swipe\n   * triggers swipe events when the end velocity is above the threshold\n   * events  swipe, swipeleft, swiperight, swipeup, swipedown\n   */\n  ionic.Gestures.gestures.Swipe = {\n    name: 'swipe',\n    index: 40,\n    defaults: {\n      // set 0 for unlimited, but this can conflict with transform\n      swipe_max_touches  : 1,\n      swipe_velocity     : 0.7\n    },\n    handler: function swipeGesture(ev, inst) {\n      if(ev.eventType == ionic.Gestures.EVENT_END) {\n        // max touches\n        if(inst.options.swipe_max_touches > 0 &&\n            ev.touches.length > inst.options.swipe_max_touches) {\n              return;\n            }\n\n        // when the distance we moved is too small we skip this gesture\n        // or we can be already in dragging\n        if(ev.velocityX > inst.options.swipe_velocity ||\n            ev.velocityY > inst.options.swipe_velocity) {\n              // trigger swipe events\n              inst.trigger(this.name, ev);\n              inst.trigger(this.name + ev.direction, ev);\n            }\n      }\n    }\n  };\n\n\n  /**\n   * Drag\n   * Move with x fingers (default 1) around on the page. Blocking the scrolling when\n   * moving left and right is a good practice. When all the drag events are blocking\n   * you disable scrolling on that area.\n   * events  drag, drapleft, dragright, dragup, dragdown\n   */\n  ionic.Gestures.gestures.Drag = {\n    name: 'drag',\n    index: 50,\n    defaults: {\n      drag_min_distance : 10,\n      // Set correct_for_drag_min_distance to true to make the starting point of the drag\n      // be calculated from where the drag was triggered, not from where the touch started.\n      // Useful to avoid a jerk-starting drag, which can make fine-adjustments\n      // through dragging difficult, and be visually unappealing.\n      correct_for_drag_min_distance : true,\n      // set 0 for unlimited, but this can conflict with transform\n      drag_max_touches  : 1,\n      // prevent default browser behavior when dragging occurs\n      // be careful with it, it makes the element a blocking element\n      // when you are using the drag gesture, it is a good practice to set this true\n      drag_block_horizontal   : true,\n      drag_block_vertical     : true,\n      // drag_lock_to_axis keeps the drag gesture on the axis that it started on,\n      // It disallows vertical directions if the initial direction was horizontal, and vice versa.\n      drag_lock_to_axis       : false,\n      // drag lock only kicks in when distance > drag_lock_min_distance\n      // This way, locking occurs only when the distance has become large enough to reliably determine the direction\n      drag_lock_min_distance : 25\n    },\n    triggered: false,\n    handler: function dragGesture(ev, inst) {\n      // current gesture isnt drag, but dragged is true\n      // this means an other gesture is busy. now call dragend\n      if(ionic.Gestures.detection.current.name != this.name && this.triggered) {\n        inst.trigger(this.name +'end', ev);\n        this.triggered = false;\n        return;\n      }\n\n      // max touches\n      if(inst.options.drag_max_touches > 0 &&\n          ev.touches.length > inst.options.drag_max_touches) {\n            return;\n          }\n\n      switch(ev.eventType) {\n        case ionic.Gestures.EVENT_START:\n          this.triggered = false;\n          break;\n\n        case ionic.Gestures.EVENT_MOVE:\n          // when the distance we moved is too small we skip this gesture\n          // or we can be already in dragging\n          if(ev.distance < inst.options.drag_min_distance &&\n              ionic.Gestures.detection.current.name != this.name) {\n                return;\n              }\n\n          // we are dragging!\n          if(ionic.Gestures.detection.current.name != this.name) {\n            ionic.Gestures.detection.current.name = this.name;\n            if (inst.options.correct_for_drag_min_distance) {\n              // When a drag is triggered, set the event center to drag_min_distance pixels from the original event center.\n              // Without this correction, the dragged distance would jumpstart at drag_min_distance pixels instead of at 0.\n              // It might be useful to save the original start point somewhere\n              var factor = Math.abs(inst.options.drag_min_distance/ev.distance);\n              ionic.Gestures.detection.current.startEvent.center.pageX += ev.deltaX * factor;\n              ionic.Gestures.detection.current.startEvent.center.pageY += ev.deltaY * factor;\n\n              // recalculate event data using new start point\n              ev = ionic.Gestures.detection.extendEventData(ev);\n            }\n          }\n\n          // lock drag to axis?\n          if(ionic.Gestures.detection.current.lastEvent.drag_locked_to_axis || (inst.options.drag_lock_to_axis && inst.options.drag_lock_min_distance<=ev.distance)) {\n            ev.drag_locked_to_axis = true;\n          }\n          var last_direction = ionic.Gestures.detection.current.lastEvent.direction;\n          if(ev.drag_locked_to_axis && last_direction !== ev.direction) {\n            // keep direction on the axis that the drag gesture started on\n            if(ionic.Gestures.utils.isVertical(last_direction)) {\n              ev.direction = (ev.deltaY < 0) ? ionic.Gestures.DIRECTION_UP : ionic.Gestures.DIRECTION_DOWN;\n            }\n            else {\n              ev.direction = (ev.deltaX < 0) ? ionic.Gestures.DIRECTION_LEFT : ionic.Gestures.DIRECTION_RIGHT;\n            }\n          }\n\n          // first time, trigger dragstart event\n          if(!this.triggered) {\n            inst.trigger(this.name +'start', ev);\n            this.triggered = true;\n          }\n\n          // trigger normal event\n          inst.trigger(this.name, ev);\n\n          // direction event, like dragdown\n          inst.trigger(this.name + ev.direction, ev);\n\n          // block the browser events\n          if( (inst.options.drag_block_vertical && ionic.Gestures.utils.isVertical(ev.direction)) ||\n              (inst.options.drag_block_horizontal && !ionic.Gestures.utils.isVertical(ev.direction))) {\n                ev.preventDefault();\n              }\n          break;\n\n        case ionic.Gestures.EVENT_END:\n          // trigger dragend\n          if(this.triggered) {\n            inst.trigger(this.name +'end', ev);\n          }\n\n          this.triggered = false;\n          break;\n      }\n    }\n  };\n\n\n  /**\n   * Transform\n   * User want to scale or rotate with 2 fingers\n   * events  transform, pinch, pinchin, pinchout, rotate\n   */\n  ionic.Gestures.gestures.Transform = {\n    name: 'transform',\n    index: 45,\n    defaults: {\n      // factor, no scale is 1, zoomin is to 0 and zoomout until higher then 1\n      transform_min_scale     : 0.01,\n      // rotation in degrees\n      transform_min_rotation  : 1,\n      // prevent default browser behavior when two touches are on the screen\n      // but it makes the element a blocking element\n      // when you are using the transform gesture, it is a good practice to set this true\n      transform_always_block  : false\n    },\n    triggered: false,\n    handler: function transformGesture(ev, inst) {\n      // current gesture isnt drag, but dragged is true\n      // this means an other gesture is busy. now call dragend\n      if(ionic.Gestures.detection.current.name != this.name && this.triggered) {\n        inst.trigger(this.name +'end', ev);\n        this.triggered = false;\n        return;\n      }\n\n      // atleast multitouch\n      if(ev.touches.length < 2) {\n        return;\n      }\n\n      // prevent default when two fingers are on the screen\n      if(inst.options.transform_always_block) {\n        ev.preventDefault();\n      }\n\n      switch(ev.eventType) {\n        case ionic.Gestures.EVENT_START:\n          this.triggered = false;\n          break;\n\n        case ionic.Gestures.EVENT_MOVE:\n          var scale_threshold = Math.abs(1-ev.scale);\n          var rotation_threshold = Math.abs(ev.rotation);\n\n          // when the distance we moved is too small we skip this gesture\n          // or we can be already in dragging\n          if(scale_threshold < inst.options.transform_min_scale &&\n              rotation_threshold < inst.options.transform_min_rotation) {\n                return;\n              }\n\n          // we are transforming!\n          ionic.Gestures.detection.current.name = this.name;\n\n          // first time, trigger dragstart event\n          if(!this.triggered) {\n            inst.trigger(this.name +'start', ev);\n            this.triggered = true;\n          }\n\n          inst.trigger(this.name, ev); // basic transform event\n\n          // trigger rotate event\n          if(rotation_threshold > inst.options.transform_min_rotation) {\n            inst.trigger('rotate', ev);\n          }\n\n          // trigger pinch event\n          if(scale_threshold > inst.options.transform_min_scale) {\n            inst.trigger('pinch', ev);\n            inst.trigger('pinch'+ ((ev.scale < 1) ? 'in' : 'out'), ev);\n          }\n          break;\n\n        case ionic.Gestures.EVENT_END:\n          // trigger dragend\n          if(this.triggered) {\n            inst.trigger(this.name +'end', ev);\n          }\n\n          this.triggered = false;\n          break;\n      }\n    }\n  };\n\n\n  /**\n   * Touch\n   * Called as first, tells the user has touched the screen\n   * events  touch\n   */\n  ionic.Gestures.gestures.Touch = {\n    name: 'touch',\n    index: -Infinity,\n    defaults: {\n      // call preventDefault at touchstart, and makes the element blocking by\n      // disabling the scrolling of the page, but it improves gestures like\n      // transforming and dragging.\n      // be careful with using this, it can be very annoying for users to be stuck\n      // on the page\n      prevent_default: false,\n\n      // disable mouse events, so only touch (or pen!) input triggers events\n      prevent_mouseevents: false\n    },\n    handler: function touchGesture(ev, inst) {\n      if(inst.options.prevent_mouseevents && ev.pointerType == ionic.Gestures.POINTER_MOUSE) {\n        ev.stopDetect();\n        return;\n      }\n\n      if(inst.options.prevent_default) {\n        ev.preventDefault();\n      }\n\n      if(ev.eventType ==  ionic.Gestures.EVENT_START) {\n        inst.trigger(this.name, ev);\n      }\n    }\n  };\n\n\n  /**\n   * Release\n   * Called as last, tells the user has released the screen\n   * events  release\n   */\n  ionic.Gestures.gestures.Release = {\n    name: 'release',\n    index: Infinity,\n    handler: function releaseGesture(ev, inst) {\n      if(ev.eventType ==  ionic.Gestures.EVENT_END) {\n        inst.trigger(this.name, ev);\n      }\n    }\n  };\n})(window.ionic);\n\n(function(window, document, ionic) {\n\n  var IOS = 'ios';\n  var ANDROID = 'android';\n  var WINDOWS_PHONE = 'windowsphone';\n\n  /**\n   * @ngdoc utility\n   * @name ionic.Platform\n   * @module ionic\n   */\n  ionic.Platform = {\n\n    // Put navigator on platform so it can be mocked and set\n    // the browser does not allow window.navigator to be set\n    navigator: window.navigator,\n\n    /**\n     * @ngdoc property\n     * @name ionic.Platform#isReady\n     * @returns {boolean} Whether the device is ready.\n     */\n    isReady: false,\n    /**\n     * @ngdoc property\n     * @name ionic.Platform#isFullScreen\n     * @returns {boolean} Whether the device is fullscreen.\n     */\n    isFullScreen: false,\n    /**\n     * @ngdoc property\n     * @name ionic.Platform#platforms\n     * @returns {Array(string)} An array of all platforms found.\n     */\n    platforms: null,\n    /**\n     * @ngdoc property\n     * @name ionic.Platform#grade\n     * @returns {string} What grade the current platform is.\n     */\n    grade: null,\n    ua: navigator.userAgent,\n\n    /**\n     * @ngdoc method\n     * @name ionic.Platform#ready\n     * @description\n     * Trigger a callback once the device is ready, or immediately\n     * if the device is already ready. This method can be run from\n     * anywhere and does not need to be wrapped by any additonal methods.\n     * When the app is within a WebView (Cordova), it'll fire\n     * the callback once the device is ready. If the app is within\n     * a web browser, it'll fire the callback after `window.load`.\n     * @param {function} callback The function to call.\n     */\n    ready: function(cb) {\n      // run through tasks to complete now that the device is ready\n      if(this.isReady) {\n        cb();\n      } else {\n        // the platform isn't ready yet, add it to this array\n        // which will be called once the platform is ready\n        readyCallbacks.push(cb);\n      }\n    },\n\n    /**\n     * @private\n     */\n    detect: function() {\n      ionic.Platform._checkPlatforms();\n\n      ionic.requestAnimationFrame(function(){\n        // only add to the body class if we got platform info\n        for(var i = 0; i < ionic.Platform.platforms.length; i++) {\n          document.body.classList.add('platform-' + ionic.Platform.platforms[i]);\n        }\n      });\n    },\n\n    /**\n     * @ngdoc method\n     * @name ionic.Platform#setGrade\n     * @description Set the grade of the device: 'a', 'b', or 'c'. 'a' is the best\n     * (most css features enabled), 'c' is the worst.  By default, sets the grade\n     * depending on the current device.\n     * @param {string} grade The new grade to set.\n     */\n    setGrade: function(grade) {\n      var oldGrade = this.grade;\n      this.grade = grade;\n      ionic.requestAnimationFrame(function() {\n        if (oldGrade) {\n          document.body.classList.remove('grade-' + oldGrade);\n        }\n        document.body.classList.add('grade-' + grade);\n      });\n    },\n\n    /**\n     * @ngdoc method\n     * @name ionic.Platform#device\n     * @description Return the current device (given by cordova).\n     * @returns {object} The device object.\n     */\n    device: function() {\n      if(window.device) return window.device;\n      if(this.isWebView()) void 0;\n      return {};\n    },\n\n    _checkPlatforms: function(platforms) {\n      this.platforms = [];\n      var grade = 'a';\n\n      if(this.isWebView()) {\n        this.platforms.push('webview');\n        this.platforms.push('cordova');\n      } else {\n        this.platforms.push('browser');\n      }\n      if(this.isIPad()) this.platforms.push('ipad');\n\n      var platform = this.platform();\n      if(platform) {\n        this.platforms.push(platform);\n\n        var version = this.version();\n        if(version) {\n          var v = version.toString();\n          if(v.indexOf('.') > 0) {\n            v = v.replace('.', '_');\n          } else {\n            v += '_0';\n          }\n          this.platforms.push(platform + v.split('_')[0]);\n          this.platforms.push(platform + v);\n\n          if(this.isAndroid() && version < 4.4) {\n            grade = (version < 4 ? 'c' : 'b');\n          } else if(this.isWindowsPhone()) {\n            grade = 'b';\n          }\n        }\n      }\n\n      this.setGrade(grade);\n    },\n\n    /**\n     * @ngdoc method\n     * @name ionic.Platform#isWebView\n     * @returns {boolean} Check if we are running within a WebView (such as Cordova).\n     */\n    isWebView: function() {\n      return !(!window.cordova && !window.PhoneGap && !window.phonegap);\n    },\n    /**\n     * @ngdoc method\n     * @name ionic.Platform#isIPad\n     * @returns {boolean} Whether we are running on iPad.\n     */\n    isIPad: function() {\n      if( /iPad/i.test(ionic.Platform.navigator.platform) ) {\n        return true;\n      }\n      return /iPad/i.test(this.ua);\n    },\n    /**\n     * @ngdoc method\n     * @name ionic.Platform#isIOS\n     * @returns {boolean} Whether we are running on iOS.\n     */\n    isIOS: function() {\n      return this.is(IOS);\n    },\n    /**\n     * @ngdoc method\n     * @name ionic.Platform#isAndroid\n     * @returns {boolean} Whether we are running on Android.\n     */\n    isAndroid: function() {\n      return this.is(ANDROID);\n    },\n    /**\n     * @ngdoc method\n     * @name ionic.Platform#isWindowsPhone\n     * @returns {boolean} Whether we are running on Windows Phone.\n     */\n    isWindowsPhone: function() {\n      return this.is(WINDOWS_PHONE);\n    },\n\n    /**\n     * @ngdoc method\n     * @name ionic.Platform#platform\n     * @returns {string} The name of the current platform.\n     */\n    platform: function() {\n      // singleton to get the platform name\n      if(platformName === null) this.setPlatform(this.device().platform);\n      return platformName;\n    },\n\n    /**\n     * @private\n     */\n    setPlatform: function(n) {\n      if(typeof n != 'undefined' && n !== null && n.length) {\n        platformName = n.toLowerCase();\n      } else if(this.ua.indexOf('Android') > 0) {\n        platformName = ANDROID;\n      } else if(this.ua.indexOf('iPhone') > -1 || this.ua.indexOf('iPad') > -1 || this.ua.indexOf('iPod') > -1) {\n        platformName = IOS;\n      } else if(this.ua.indexOf('Windows Phone') > -1) {\n        platformName = WINDOWS_PHONE;\n      } else {\n        platformName = ionic.Platform.navigator.platform && navigator.platform.toLowerCase().split(' ')[0] || '';\n      }\n    },\n\n    /**\n     * @ngdoc method\n     * @name ionic.Platform#version\n     * @returns {string} The version of the current device platform.\n     */\n    version: function() {\n      // singleton to get the platform version\n      if(platformVersion === null) this.setVersion(this.device().version);\n      return platformVersion;\n    },\n\n    /**\n     * @private\n     */\n    setVersion: function(v) {\n      if(typeof v != 'undefined' && v !== null) {\n        v = v.split('.');\n        v = parseFloat(v[0] + '.' + (v.length > 1 ? v[1] : 0));\n        if(!isNaN(v)) {\n          platformVersion = v;\n          return;\n        }\n      }\n\n      platformVersion = 0;\n\n      // fallback to user-agent checking\n      var pName = this.platform();\n      var versionMatch = {\n        'android': /Android (\\d+).(\\d+)?/,\n        'ios': /OS (\\d+)_(\\d+)?/,\n        'windowsphone': /Windows Phone (\\d+).(\\d+)?/\n      };\n      if(versionMatch[pName]) {\n        v = this.ua.match( versionMatch[pName] );\n        if(v &&  v.length > 2) {\n          platformVersion = parseFloat( v[1] + '.' + v[2] );\n        }\n      }\n    },\n\n    // Check if the platform is the one detected by cordova\n    is: function(type) {\n      type = type.toLowerCase();\n      // check if it has an array of platforms\n      if(this.platforms) {\n        for(var x = 0; x < this.platforms.length; x++) {\n          if(this.platforms[x] === type) return true;\n        }\n      }\n      // exact match\n      var pName = this.platform();\n      if(pName) {\n        return pName === type.toLowerCase();\n      }\n\n      // A quick hack for to check userAgent\n      return this.ua.toLowerCase().indexOf(type) >= 0;\n    },\n\n    /**\n     * @ngdoc method\n     * @name ionic.Platform#exitApp\n     * @description Exit the app.\n     */\n    exitApp: function() {\n      this.ready(function(){\n        navigator.app && navigator.app.exitApp && navigator.app.exitApp();\n      });\n    },\n\n    /**\n     * @ngdoc method\n     * @name ionic.Platform#showStatusBar\n     * @description Shows or hides the device status bar (in Cordova).\n     * @param {boolean} shouldShow Whether or not to show the status bar.\n     */\n    showStatusBar: function(val) {\n      // Only useful when run within cordova\n      this._showStatusBar = val;\n      this.ready(function(){\n        // run this only when or if the platform (cordova) is ready\n        ionic.requestAnimationFrame(function(){\n          if(ionic.Platform._showStatusBar) {\n            // they do not want it to be full screen\n            window.StatusBar && window.StatusBar.show();\n            document.body.classList.remove('status-bar-hide');\n          } else {\n            // it should be full screen\n            window.StatusBar && window.StatusBar.hide();\n            document.body.classList.add('status-bar-hide');\n          }\n        });\n      });\n    },\n\n    /**\n     * @ngdoc method\n     * @name ionic.Platform#fullScreen\n     * @description\n     * Sets whether the app is fullscreen or not (in Cordova).\n     * @param {boolean=} showFullScreen Whether or not to set the app to fullscreen. Defaults to true.\n     * @param {boolean=} showStatusBar Whether or not to show the device's status bar. Defaults to false.\n     */\n    fullScreen: function(showFullScreen, showStatusBar) {\n      // showFullScreen: default is true if no param provided\n      this.isFullScreen = (showFullScreen !== false);\n\n      // add/remove the fullscreen classname to the body\n      ionic.DomUtil.ready(function(){\n        // run this only when or if the DOM is ready\n        ionic.requestAnimationFrame(function(){\n          if(ionic.Platform.isFullScreen) {\n            document.body.classList.add('fullscreen');\n          } else {\n            document.body.classList.remove('fullscreen');\n          }\n        });\n        // showStatusBar: default is false if no param provided\n        ionic.Platform.showStatusBar( (showStatusBar === true) );\n      });\n    }\n\n  };\n\n  var platformName = null, // just the name, like iOS or Android\n  platformVersion = null, // a float of the major and minor, like 7.1\n  readyCallbacks = [];\n\n  // setup listeners to know when the device is ready to go\n  function onWindowLoad() {\n    if(ionic.Platform.isWebView()) {\n      // the window and scripts are fully loaded, and a cordova/phonegap\n      // object exists then let's listen for the deviceready\n      document.addEventListener(\"deviceready\", onPlatformReady, false);\n    } else {\n      // the window and scripts are fully loaded, but the window object doesn't have the\n      // cordova/phonegap object, so its just a browser, not a webview wrapped w/ cordova\n      onPlatformReady();\n    }\n    window.removeEventListener(\"load\", onWindowLoad, false);\n  }\n  window.addEventListener(\"load\", onWindowLoad, false);\n\n  function onPlatformReady() {\n    // the device is all set to go, init our own stuff then fire off our event\n    ionic.Platform.isReady = true;\n    ionic.Platform.detect();\n    for(var x=0; x<readyCallbacks.length; x++) {\n      // fire off all the callbacks that were added before the platform was ready\n      readyCallbacks[x]();\n    }\n    readyCallbacks = [];\n    ionic.trigger('platformready', { target: document });\n\n    ionic.requestAnimationFrame(function(){\n      document.body.classList.add('platform-ready');\n    });\n  }\n\n})(this, document, ionic);\n\n(function(document, ionic) {\n  'use strict';\n\n  // Ionic CSS polyfills\n  ionic.CSS = {};\n\n  (function() {\n\n    // transform\n    var i, keys = ['webkitTransform', 'transform', '-webkit-transform', 'webkit-transform',\n                   '-moz-transform', 'moz-transform', 'MozTransform', 'mozTransform', 'msTransform'];\n\n    for(i = 0; i < keys.length; i++) {\n      if(document.documentElement.style[keys[i]] !== undefined) {\n        ionic.CSS.TRANSFORM = keys[i];\n        break;\n      }\n    }\n\n    // transition\n    keys = ['webkitTransition', 'mozTransition', 'msTransition', 'transition'];\n    for(i = 0; i < keys.length; i++) {\n      if(document.documentElement.style[keys[i]] !== undefined) {\n        ionic.CSS.TRANSITION = keys[i];\n        break;\n      }\n    }\n\n  })();\n\n  // classList polyfill for them older Androids\n  // https://gist.github.com/devongovett/1381839\n  if (!(\"classList\" in document.documentElement) && Object.defineProperty && typeof HTMLElement !== 'undefined') {\n    Object.defineProperty(HTMLElement.prototype, 'classList', {\n      get: function() {\n        var self = this;\n        function update(fn) {\n          return function() {\n            var x, classes = self.className.split(/\\s+/);\n\n            for(x=0; x<arguments.length; x++) {\n              fn(classes, classes.indexOf(arguments[x]), arguments[x]);\n            }\n\n            self.className = classes.join(\" \");\n          };\n        }\n\n        return {\n          add: update(function(classes, index, value) {\n            ~index || classes.push(value);\n          }),\n\n          remove: update(function(classes, index) {\n            ~index && classes.splice(index, 1);\n          }),\n\n          toggle: update(function(classes, index, value) {\n            ~index ? classes.splice(index, 1) : classes.push(value);\n          }),\n\n          contains: function(value) {\n            return !!~self.className.split(/\\s+/).indexOf(value);\n          },\n\n          item: function(i) {\n            return self.className.split(/\\s+/)[i] || null;\n          }\n        };\n\n      }\n    });\n  }\n\n})(document, ionic);\n\n\n/**\n * @ngdoc page\n * @name tap\n * @module ionic\n * @description\n * On touch devices such as a phone or tablet, some browsers implement a 300ms delay between\n * the time the user stops touching the display and the moment the browser executes the\n * click. This delay was initially introduced so the browser can know whether the user wants to\n * double-tap to zoom in on the webpage.  Basically, the browser waits roughly 300ms to see if\n * the user is double-tapping, or just tapping on the display once.\n *\n * Out of the box, Ionic automatically removes the 300ms delay in order to make Ionic apps\n * feel more \"native\" like. Resultingly, other solutions such as\n * [fastclick](https://github.com/ftlabs/fastclick) and Angular's\n * [ngTouch](https://docs.angularjs.org/api/ngTouch) should not be included, to avoid conflicts.\n *\n * Some browsers already remove the delay with certain settings, such as the CSS property\n * `touch-events: none` or with specific meta tag viewport values. However, each of these\n * browsers still handle clicks differently, such as when to fire off or cancel the event\n * (like scrolling when the target is a button, or holding a button down).\n * For browsers that already remove the 300ms delay, consider Ionic's tap system as a way to\n * normalize how clicks are handled across the various devices so there's an expected response\n * no matter what the device, platform or version. Additionally, Ionic will prevent\n * ghostclicks which even browsers that remove the delay still experience.\n *\n * In some cases, third-party libraries may also be working with touch events which can interfere\n * with the tap system. For example, mapping libraries like Google or Leaflet Maps often implement\n * a touch detection system which conflicts with Ionic's tap system.\n *\n * ### Disabling the tap system\n *\n * To disable the tap for an element and all of its children elements,\n * add the attribute `data-tap-disabled=\"true\"`.\n *\n * ```html\n * <div data-tap-disabled=\"true\">\n *     <div id=\"google-map\"></div>\n * </div>\n * ```\n *\n * ### Additional Notes:\n *\n * - Ionic tap  works with Ionic's JavaScript scrolling\n * - Elements can come and go from the DOM and Ionic tap doesn't keep adding and removing\n *   listeners\n * - No \"tap delay\" after the first \"tap\" (you can tap as fast as you want, they all click)\n * - Minimal events listeners, only being added to document\n * - Correct focus in/out on each input type (select, textearea, range) on each platform/device\n * - Shows and hides virtual keyboard correctly for each platform/device\n * - Works with labels surrounding inputs\n * - Does not fire off a click if the user moves the pointer too far\n * - Adds and removes an 'activated' css class\n * - Multiple [unit tests](https://github.com/ionic-team/ionic/blob/master/test/unit/utils/tap.unit.js) for each scenario\n *\n */\n/*\n\n IONIC TAP\n ---------------\n - Both touch and mouse events are added to the document.body on DOM ready\n - If a touch event happens, it does not use mouse event listeners\n - On touchend, if the distance between start and end was small, trigger a click\n - In the triggered click event, add a 'isIonicTap' property\n - The triggered click receives the same x,y coordinates as as the end event\n - On document.body click listener (with useCapture=true), only allow clicks with 'isIonicTap'\n - Triggering clicks with mouse events work the same as touch, except with mousedown/mouseup\n - Tapping inputs is disabled during scrolling\n*/\n\nvar tapDoc; // the element which the listeners are on (document.body)\nvar tapActiveEle; // the element which is active (probably has focus)\nvar tapEnabledTouchEvents;\nvar tapMouseResetTimer;\nvar tapPointerMoved;\nvar tapPointerStart;\nvar tapTouchFocusedInput;\nvar tapLastTouchTarget;\nvar tapTouchMoveListener = 'touchmove';\n\n// how much the coordinates can be off between start/end, but still a click\nvar TAP_RELEASE_TOLERANCE = 6; // default tolerance\nvar TAP_RELEASE_BUTTON_TOLERANCE = 50; // button elements should have a larger tolerance\n\nvar tapEventListeners = {\n  'click': tapClickGateKeeper,\n\n  'mousedown': tapMouseDown,\n  'mouseup': tapMouseUp,\n  'mousemove': tapMouseMove,\n\n  'touchstart': tapTouchStart,\n  'touchend': tapTouchEnd,\n  'touchcancel': tapTouchCancel,\n  'touchmove': tapTouchMove,\n\n  'pointerdown': tapTouchStart,\n  'pointerup': tapTouchEnd,\n  'pointercancel': tapTouchCancel,\n  'pointermove': tapTouchMove,\n\n  'MSPointerDown': tapTouchStart,\n  'MSPointerUp': tapTouchEnd,\n  'MSPointerCancel': tapTouchCancel,\n  'MSPointerMove': tapTouchMove,\n\n  'focusin': tapFocusIn,\n  'focusout': tapFocusOut\n};\n\nionic.tap = {\n\n  register: function(ele) {\n    tapDoc = ele;\n\n    tapEventListener('click', true, true);\n    tapEventListener('mouseup');\n    tapEventListener('mousedown');\n\n    if( window.navigator.pointerEnabled ) {\n      tapEventListener('pointerdown');\n      tapEventListener('pointerup');\n      tapEventListener('pointcancel');\n      tapTouchMoveListener = 'pointermove';\n\n    } else if (window.navigator.msPointerEnabled) {\n      tapEventListener('MSPointerDown');\n      tapEventListener('MSPointerUp');\n      tapEventListener('MSPointerCancel');\n      tapTouchMoveListener = 'MSPointerMove';\n\n    } else {\n      tapEventListener('touchstart');\n      tapEventListener('touchend');\n      tapEventListener('touchcancel');\n    }\n\n    tapEventListener('focusin');\n    tapEventListener('focusout');\n\n    return function() {\n      for(var type in tapEventListeners) {\n        tapEventListener(type, false);\n      }\n      tapDoc = null;\n      tapActiveEle = null;\n      tapEnabledTouchEvents = false;\n      tapPointerMoved = false;\n      tapPointerStart = null;\n    };\n  },\n\n  ignoreScrollStart: function(e) {\n    return (e.defaultPrevented) ||  // defaultPrevented has been assigned by another component handling the event\n           (e.target.isContentEditable) ||\n           (/^(file|range)$/i).test(e.target.type) ||\n           (e.target.dataset ? e.target.dataset.preventScroll : e.target.getAttribute('data-prevent-default')) == 'true' || // manually set within an elements attributes\n           (!!(/^(object|embed)$/i).test(e.target.tagName)) ||  // flash/movie/object touches should not try to scroll\n           ionic.tap.isElementTapDisabled(e.target); // check if this element, or an ancestor, has `data-tap-disabled` attribute\n  },\n\n  isTextInput: function(ele) {\n    return !!ele &&\n           (ele.tagName == 'TEXTAREA' ||\n            ele.contentEditable === 'true' ||\n            (ele.tagName == 'INPUT' && !(/^(radio|checkbox|range|file|submit|reset)$/i).test(ele.type)) );\n  },\n\n  isDateInput: function(ele) {\n    return !!ele &&\n            (ele.tagName == 'INPUT' && (/^(date|time|datetime-local|month|week)$/i).test(ele.type));\n  },\n\n  isLabelWithTextInput: function(ele) {\n    var container = tapContainingElement(ele, false);\n\n    return !!container &&\n           ionic.tap.isTextInput( tapTargetElement( container ) );\n  },\n\n  containsOrIsTextInput: function(ele) {\n    return ionic.tap.isTextInput(ele) || ionic.tap.isLabelWithTextInput(ele);\n  },\n\n  cloneFocusedInput: function(container, scrollIntance) {\n    if(ionic.tap.hasCheckedClone) return;\n    ionic.tap.hasCheckedClone = true;\n\n    ionic.requestAnimationFrame(function(){\n      var focusInput = container.querySelector(':focus');\n      if( ionic.tap.isTextInput(focusInput) ) {\n        var clonedInput = focusInput.parentElement.querySelector('.cloned-text-input');\n        if(!clonedInput) {\n          clonedInput = document.createElement(focusInput.tagName);\n          clonedInput.placeholder = focusInput.placeholder;\n          clonedInput.type = focusInput.type;\n          clonedInput.value = focusInput.value;\n          clonedInput.style = focusInput.style;\n          clonedInput.className = focusInput.className;\n          clonedInput.classList.add('cloned-text-input');\n          clonedInput.readOnly = true;\n          focusInput.parentElement.insertBefore(clonedInput, focusInput);\n          focusInput.style.top = focusInput.offsetTop;\n          focusInput.classList.add('previous-input-focus');\n        }\n      }\n    });\n  },\n\n  hasCheckedClone: false,\n\n  removeClonedInputs: function(container, scrollIntance) {\n    ionic.tap.hasCheckedClone = false;\n\n    ionic.requestAnimationFrame(function(){\n      var clonedInputs = container.querySelectorAll('.cloned-text-input');\n      var previousInputFocus = container.querySelectorAll('.previous-input-focus');\n      var x;\n\n      for(x=0; x<clonedInputs.length; x++) {\n        clonedInputs[x].parentElement.removeChild( clonedInputs[x] );\n      }\n\n      for(x=0; x<previousInputFocus.length; x++) {\n        previousInputFocus[x].classList.remove('previous-input-focus');\n        previousInputFocus[x].style.top = '';\n        previousInputFocus[x].focus();\n      }\n    });\n  },\n\n  requiresNativeClick: function(ele) {\n    if(!ele || ele.disabled || (/^(file|range)$/i).test(ele.type) || (/^(object|video)$/i).test(ele.tagName) || ionic.tap.isLabelContainingFileInput(ele) ) {\n      return true;\n    }\n    return ionic.tap.isElementTapDisabled(ele);\n  },\n\n  isLabelContainingFileInput: function(ele) {\n    var lbl = tapContainingElement(ele);\n    if(lbl.tagName !== 'LABEL') return false;\n    var fileInput = lbl.querySelector('input[type=file]');\n    if(fileInput && fileInput.disabled === false) return true;\n    return false;\n  },\n\n  isElementTapDisabled: function(ele) {\n    if(ele && ele.nodeType === 1) {\n      var element = ele;\n      while(element) {\n        if( (element.dataset ? element.dataset.tapDisabled : element.getAttribute('data-tap-disabled')) == 'true' ) {\n          return true;\n        }\n        element = element.parentElement;\n      }\n    }\n    return false;\n  },\n\n  setTolerance: function(releaseTolerance, releaseButtonTolerance) {\n    TAP_RELEASE_TOLERANCE = releaseTolerance;\n    TAP_RELEASE_BUTTON_TOLERANCE = releaseButtonTolerance;\n  },\n\n  cancelClick: function() {\n    // used to cancel any simulated clicks which may happen on a touchend/mouseup\n    // gestures uses this method within its tap and hold events\n    tapPointerMoved = true;\n  }\n\n};\n\nfunction tapEventListener(type, enable, useCapture) {\n  if(enable !== false) {\n    tapDoc.addEventListener(type, tapEventListeners[type], useCapture);\n  } else {\n    tapDoc.removeEventListener(type, tapEventListeners[type]);\n  }\n}\n\nfunction tapClick(e) {\n  // simulate a normal click by running the element's click method then focus on it\n  var container = tapContainingElement(e.target);\n  var ele = tapTargetElement(container);\n\n  if( ionic.tap.requiresNativeClick(ele) || tapPointerMoved ) return false;\n\n  var c = getPointerCoordinates(e);\n\n  void 0;\n  triggerMouseEvent('click', ele, c.x, c.y);\n\n  // if it's an input, focus in on the target, otherwise blur\n  tapHandleFocus(ele);\n}\n\nfunction triggerMouseEvent(type, ele, x, y) {\n  // using initMouseEvent instead of MouseEvent for our Android friends\n  var clickEvent = document.createEvent(\"MouseEvents\");\n  clickEvent.initMouseEvent(type, true, true, window, 1, 0, 0, x, y, false, false, false, false, 0, null);\n  clickEvent.isIonicTap = true;\n  ele.dispatchEvent(clickEvent);\n}\n\nfunction tapClickGateKeeper(e) {\n  if(e.target.type == 'submit' && e.detail === 0) {\n    // do not prevent click if it came from an \"Enter\" or \"Go\" keypress submit\n    return;\n  }\n\n  // do not allow through any click events that were not created by ionic.tap\n  if( (ionic.scroll.isScrolling && ionic.tap.containsOrIsTextInput(e.target) ) ||\n      (!e.isIonicTap && !ionic.tap.requiresNativeClick(e.target)) ) {\n    void 0;\n    e.stopPropagation();\n\n    if( !ionic.tap.isLabelWithTextInput(e.target) ) {\n      // labels clicks from native should not preventDefault othersize keyboard will not show on input focus\n      e.preventDefault();\n    }\n    return false;\n  }\n}\n\n// MOUSE\nfunction tapMouseDown(e) {\n  if(e.isIonicTap || tapIgnoreEvent(e)) return;\n\n  if(tapEnabledTouchEvents) {\n    void 0;\n    e.stopPropagation();\n\n    if( (!ionic.tap.isTextInput(e.target) || tapLastTouchTarget !== e.target) && !(/^(select|option)$/i).test(e.target.tagName) ) {\n      // If you preventDefault on a text input then you cannot move its text caret/cursor.\n      // Allow through only the text input default. However, without preventDefault on an\n      // input the 300ms delay can change focus on inputs after the keyboard shows up.\n      // The focusin event handles the chance of focus changing after the keyboard shows.\n      e.preventDefault();\n    }\n\n    return false;\n  }\n\n  tapPointerMoved = false;\n  tapPointerStart = getPointerCoordinates(e);\n\n  tapEventListener('mousemove');\n  ionic.activator.start(e);\n}\n\nfunction tapMouseUp(e) {\n  if(tapEnabledTouchEvents) {\n    e.stopPropagation();\n    e.preventDefault();\n    return false;\n  }\n\n  if( tapIgnoreEvent(e) || (/^(select|option)$/i).test(e.target.tagName) ) return false;\n\n  if( !tapHasPointerMoved(e) ) {\n    tapClick(e);\n  }\n  tapEventListener('mousemove', false);\n  ionic.activator.end();\n  tapPointerMoved = false;\n}\n\nfunction tapMouseMove(e) {\n  if( tapHasPointerMoved(e) ) {\n    tapEventListener('mousemove', false);\n    ionic.activator.end();\n    tapPointerMoved = true;\n    return false;\n  }\n}\n\n\n// TOUCH\nfunction tapTouchStart(e) {\n  if( tapIgnoreEvent(e) ) return;\n\n  tapPointerMoved = false;\n\n  tapEnableTouchEvents();\n  tapPointerStart = getPointerCoordinates(e);\n\n  tapEventListener(tapTouchMoveListener);\n  ionic.activator.start(e);\n\n  if( ionic.Platform.isIOS() && ionic.tap.isLabelWithTextInput(e.target) ) {\n    // if the tapped element is a label, which has a child input\n    // then preventDefault so iOS doesn't ugly auto scroll to the input\n    // but do not prevent default on Android or else you cannot move the text caret\n    // and do not prevent default on Android or else no virtual keyboard shows up\n\n    var textInput = tapTargetElement( tapContainingElement(e.target) );\n    if( textInput !== tapActiveEle ) {\n      // don't preventDefault on an already focused input or else iOS's text caret isn't usable\n      e.preventDefault();\n    }\n  }\n}\n\nfunction tapTouchEnd(e) {\n  if( tapIgnoreEvent(e) ) return;\n\n  tapEnableTouchEvents();\n  if( !tapHasPointerMoved(e) ) {\n    tapClick(e);\n\n    if( (/^(select|option)$/i).test(e.target.tagName) ) {\n      e.preventDefault();\n    }\n  }\n\n  tapLastTouchTarget = e.target;\n  tapTouchCancel();\n}\n\nfunction tapTouchMove(e) {\n  if( tapHasPointerMoved(e) ) {\n    tapPointerMoved = true;\n    tapEventListener(tapTouchMoveListener, false);\n    ionic.activator.end();\n    return false;\n  }\n}\n\nfunction tapTouchCancel(e) {\n  tapEventListener(tapTouchMoveListener, false);\n  ionic.activator.end();\n  tapPointerMoved = false;\n}\n\nfunction tapEnableTouchEvents() {\n  tapEnabledTouchEvents = true;\n  clearTimeout(tapMouseResetTimer);\n  tapMouseResetTimer = setTimeout(function(){\n    tapEnabledTouchEvents = false;\n  }, 2000);\n}\n\nfunction tapIgnoreEvent(e) {\n  if(e.isTapHandled) return true;\n  e.isTapHandled = true;\n\n  if( ionic.scroll.isScrolling && ionic.tap.containsOrIsTextInput(e.target) ) {\n    e.preventDefault();\n    return true;\n  }\n}\n\nfunction tapHandleFocus(ele) {\n  tapTouchFocusedInput = null;\n\n  var triggerFocusIn = false;\n\n  if(ele.tagName == 'SELECT') {\n    // trick to force Android options to show up\n    triggerMouseEvent('mousedown', ele, 0, 0);\n    ele.focus && ele.focus();\n    triggerFocusIn = true;\n\n  } else if(tapActiveElement() === ele) {\n    // already is the active element and has focus\n    triggerFocusIn = true;\n\n  } else if( (/^(input|textarea)$/i).test(ele.tagName) ) {\n    triggerFocusIn = true;\n    ele.focus && ele.focus();\n    ele.value = ele.value;\n    if( tapEnabledTouchEvents ) {\n      tapTouchFocusedInput = ele;\n    }\n\n  } else {\n    tapFocusOutActive();\n  }\n\n  if(triggerFocusIn) {\n    tapActiveElement(ele);\n    ionic.trigger('ionic.focusin', {\n      target: ele\n    }, true);\n  }\n}\n\nfunction tapFocusOutActive() {\n  var ele = tapActiveElement();\n  if(ele && (/^(input|textarea|select)$/i).test(ele.tagName) ) {\n    void 0;\n    ele.blur();\n  }\n  tapActiveElement(null);\n}\n\nfunction tapFocusIn(e) {\n  // Because a text input doesn't preventDefault (so the caret still works) there's a chance\n  // that it's mousedown event 300ms later will change the focus to another element after\n  // the keyboard shows up.\n\n  if( tapEnabledTouchEvents &&\n      ionic.tap.isTextInput( tapActiveElement() ) &&\n      ionic.tap.isTextInput(tapTouchFocusedInput) &&\n      tapTouchFocusedInput !== e.target ) {\n\n    // 1) The pointer is from touch events\n    // 2) There is an active element which is a text input\n    // 3) A text input was just set to be focused on by a touch event\n    // 4) A new focus has been set, however the target isn't the one the touch event wanted\n    void 0;\n    tapTouchFocusedInput.focus();\n    tapTouchFocusedInput = null;\n  }\n  ionic.scroll.isScrolling = false;\n}\n\nfunction tapFocusOut() {\n  tapActiveElement(null);\n}\n\nfunction tapActiveElement(ele) {\n  if(arguments.length) {\n    tapActiveEle = ele;\n  }\n  return tapActiveEle || document.activeElement;\n}\n\nfunction tapHasPointerMoved(endEvent) {\n  if(!endEvent || endEvent.target.nodeType !== 1 || !tapPointerStart || ( tapPointerStart.x === 0 && tapPointerStart.y === 0 )) {\n    return false;\n  }\n  var endCoordinates = getPointerCoordinates(endEvent);\n\n  var hasClassList = !!(endEvent.target.classList && endEvent.target.classList.contains);\n  var releaseTolerance = hasClassList & endEvent.target.classList.contains('button') ?\n    TAP_RELEASE_BUTTON_TOLERANCE :\n    TAP_RELEASE_TOLERANCE;\n\n  return Math.abs(tapPointerStart.x - endCoordinates.x) > releaseTolerance ||\n         Math.abs(tapPointerStart.y - endCoordinates.y) > releaseTolerance;\n}\n\nfunction getPointerCoordinates(event) {\n  // This method can get coordinates for both a mouse click\n  // or a touch depending on the given event\n  var c = { x:0, y:0 };\n  if(event) {\n    var touches = event.touches && event.touches.length ? event.touches : [event];\n    var e = (event.changedTouches && event.changedTouches[0]) || touches[0];\n    if(e) {\n      c.x = e.clientX || e.pageX || 0;\n      c.y = e.clientY || e.pageY || 0;\n    }\n  }\n  return c;\n}\n\nfunction tapContainingElement(ele, allowSelf) {\n  var climbEle = ele;\n  for(var x=0; x<6; x++) {\n    if(!climbEle) break;\n    if(climbEle.tagName === 'LABEL') return climbEle;\n    climbEle = climbEle.parentElement;\n  }\n  if(allowSelf !== false) return ele;\n}\n\nfunction tapTargetElement(ele) {\n  if(ele && ele.tagName === 'LABEL') {\n    if(ele.control) return ele.control;\n\n    // older devices do not support the \"control\" property\n    if(ele.querySelector) {\n      var control = ele.querySelector('input,textarea,select');\n      if(control) return control;\n    }\n  }\n  return ele;\n}\n\nionic.DomUtil.ready(function(){\n  var ng = typeof angular !== 'undefined' ? angular : null;\n  //do nothing for e2e tests\n  if (!ng || (ng && !ng.scenario)) {\n    ionic.tap.register(document);\n  }\n});\n\n(function(document, ionic) {\n  'use strict';\n\n  var queueElements = {};   // elements that should get an active state in XX milliseconds\n  var activeElements = {};  // elements that are currently active\n  var keyId = 0;            // a counter for unique keys for the above ojects\n  var ACTIVATED_CLASS = 'activated';\n\n  ionic.activator = {\n\n    start: function(e) {\n      var self = this;\n\n      // when an element is touched/clicked, it climbs up a few\n      // parents to see if it is an .item or .button element\n      ionic.requestAnimationFrame(function(){\n        if ( ionic.tap.requiresNativeClick(e.target) ) return;\n        var ele = e.target;\n        var eleToActivate;\n\n        for(var x=0; x<4; x++) {\n          if(!ele || ele.nodeType !== 1) break;\n          if(eleToActivate && ele.classList.contains('item')) {\n            eleToActivate = ele;\n            break;\n          }\n          if( ele.tagName == 'A' || ele.tagName == 'BUTTON' || ele.hasAttribute('ng-click') ) {\n            eleToActivate = ele;\n            break;\n          }\n          if( ele.classList.contains('button') ) {\n            eleToActivate = ele;\n            break;\n          }\n          ele = ele.parentElement;\n        }\n\n        if(eleToActivate) {\n          // queue that this element should be set to active\n          queueElements[keyId] = eleToActivate;\n\n          // in XX milliseconds, set the queued elements to active\n          if(e.type === 'touchstart') {\n            self._activateTimeout = setTimeout(activateElements, 80);\n          } else {\n            ionic.requestAnimationFrame(activateElements);\n          }\n\n          keyId = (keyId > 19 ? 0 : keyId + 1);\n        }\n\n      });\n    },\n\n    end: function() {\n      // clear out any active/queued elements after XX milliseconds\n      clearTimeout(this._activateTimeout);\n      setTimeout(clear, 200);\n    }\n\n  };\n\n  function clear() {\n    // clear out any elements that are queued to be set to active\n    queueElements = {};\n\n    // in the next frame, remove the active class from all active elements\n    ionic.requestAnimationFrame(deactivateElements);\n  }\n\n  function activateElements() {\n    // activate all elements in the queue\n    for(var key in queueElements) {\n      if(queueElements[key]) {\n        queueElements[key].classList.add(ACTIVATED_CLASS);\n        activeElements[key] = queueElements[key];\n      }\n    }\n    queueElements = {};\n  }\n\n  function deactivateElements() {\n    for(var key in activeElements) {\n      if(activeElements[key]) {\n        activeElements[key].classList.remove(ACTIVATED_CLASS);\n        delete activeElements[key];\n      }\n    }\n  }\n\n})(document, ionic);\n\n(function(ionic) {\n\n  /* for nextUid() function below */\n  var uid = ['0','0','0'];\n\n  /**\n   * Various utilities used throughout Ionic\n   *\n   * Some of these are adopted from underscore.js and backbone.js, both also MIT licensed.\n   */\n  ionic.Utils = {\n\n    arrayMove: function (arr, old_index, new_index) {\n      if (new_index >= arr.length) {\n        var k = new_index - arr.length;\n        while ((k--) + 1) {\n          arr.push(undefined);\n        }\n      }\n      arr.splice(new_index, 0, arr.splice(old_index, 1)[0]);\n      return arr;\n    },\n\n    /**\n     * Return a function that will be called with the given context\n     */\n    proxy: function(func, context) {\n      var args = Array.prototype.slice.call(arguments, 2);\n      return function() {\n        return func.apply(context, args.concat(Array.prototype.slice.call(arguments)));\n      };\n    },\n\n    /**\n     * Only call a function once in the given interval.\n     *\n     * @param func {Function} the function to call\n     * @param wait {int} how long to wait before/after to allow function calls\n     * @param immediate {boolean} whether to call immediately or after the wait interval\n     */\n     debounce: function(func, wait, immediate) {\n      var timeout, args, context, timestamp, result;\n      return function() {\n        context = this;\n        args = arguments;\n        timestamp = new Date();\n        var later = function() {\n          var last = (new Date()) - timestamp;\n          if (last < wait) {\n            timeout = setTimeout(later, wait - last);\n          } else {\n            timeout = null;\n            if (!immediate) result = func.apply(context, args);\n          }\n        };\n        var callNow = immediate && !timeout;\n        if (!timeout) {\n          timeout = setTimeout(later, wait);\n        }\n        if (callNow) result = func.apply(context, args);\n        return result;\n      };\n    },\n\n    /**\n     * Throttle the given fun, only allowing it to be\n     * called at most every `wait` ms.\n     */\n    throttle: function(func, wait, options) {\n      var context, args, result;\n      var timeout = null;\n      var previous = 0;\n      options || (options = {});\n      var later = function() {\n        previous = options.leading === false ? 0 : Date.now();\n        timeout = null;\n        result = func.apply(context, args);\n      };\n      return function() {\n        var now = Date.now();\n        if (!previous && options.leading === false) previous = now;\n        var remaining = wait - (now - previous);\n        context = this;\n        args = arguments;\n        if (remaining <= 0) {\n          clearTimeout(timeout);\n          timeout = null;\n          previous = now;\n          result = func.apply(context, args);\n        } else if (!timeout && options.trailing !== false) {\n          timeout = setTimeout(later, remaining);\n        }\n        return result;\n      };\n    },\n     // Borrowed from Backbone.js's extend\n     // Helper function to correctly set up the prototype chain, for subclasses.\n     // Similar to `goog.inherits`, but uses a hash of prototype properties and\n     // class properties to be extended.\n    inherit: function(protoProps, staticProps) {\n      var parent = this;\n      var child;\n\n      // The constructor function for the new subclass is either defined by you\n      // (the \"constructor\" property in your `extend` definition), or defaulted\n      // by us to simply call the parent's constructor.\n      if (protoProps && protoProps.hasOwnProperty('constructor')) {\n        child = protoProps.constructor;\n      } else {\n        child = function(){ return parent.apply(this, arguments); };\n      }\n\n      // Add static properties to the constructor function, if supplied.\n      ionic.extend(child, parent, staticProps);\n\n      // Set the prototype chain to inherit from `parent`, without calling\n      // `parent`'s constructor function.\n      var Surrogate = function(){ this.constructor = child; };\n      Surrogate.prototype = parent.prototype;\n      child.prototype = new Surrogate();\n\n      // Add prototype properties (instance properties) to the subclass,\n      // if supplied.\n      if (protoProps) ionic.extend(child.prototype, protoProps);\n\n      // Set a convenience property in case the parent's prototype is needed\n      // later.\n      child.__super__ = parent.prototype;\n\n      return child;\n    },\n\n    // Extend adapted from Underscore.js\n    extend: function(obj) {\n       var args = Array.prototype.slice.call(arguments, 1);\n       for(var i = 0; i < args.length; i++) {\n         var source = args[i];\n         if (source) {\n           for (var prop in source) {\n             obj[prop] = source[prop];\n           }\n         }\n       }\n       return obj;\n    },\n\n    /**\n     * A consistent way of creating unique IDs in angular. The ID is a sequence of alpha numeric\n     * characters such as '012ABC'. The reason why we are not using simply a number counter is that\n     * the number string gets longer over time, and it can also overflow, where as the nextId\n     * will grow much slower, it is a string, and it will never overflow.\n     *\n     * @returns an unique alpha-numeric string\n     */\n    nextUid: function() {\n      var index = uid.length;\n      var digit;\n\n      while(index) {\n        index--;\n        digit = uid[index].charCodeAt(0);\n        if (digit == 57 /*'9'*/) {\n          uid[index] = 'A';\n          return uid.join('');\n        }\n        if (digit == 90  /*'Z'*/) {\n          uid[index] = '0';\n        } else {\n          uid[index] = String.fromCharCode(digit + 1);\n          return uid.join('');\n        }\n      }\n      uid.unshift('0');\n      return uid.join('');\n    }\n  };\n\n  // Bind a few of the most useful functions to the ionic scope\n  ionic.inherit = ionic.Utils.inherit;\n  ionic.extend = ionic.Utils.extend;\n  ionic.throttle = ionic.Utils.throttle;\n  ionic.proxy = ionic.Utils.proxy;\n  ionic.debounce = ionic.Utils.debounce;\n\n})(window.ionic);\n\n/**\n * @ngdoc page\n * @name keyboard\n * @module ionic\n * @description\n * On both Android and iOS, Ionic will attempt to prevent the keyboard from\n * obscuring inputs and focusable elements when it appears by scrolling them\n * into view.  In order for this to work, any focusable elements must be within\n * a [Scroll View](https://ionicframework.com/docs/v1/api/directive/ionScroll/)\n * or a directive such as [Content](https://ionicframework.com/docs/v1/api/directive/ionContent/)\n * that has a Scroll View.\n *\n * It will also attempt to prevent the native overflow scrolling on focus,\n * which can cause layout issues such as pushing headers up and out of view.\n *\n * The keyboard fixes work best in conjunction with the \n * [Ionic Keyboard Plugin](https://github.com/ionic-team/ionic-plugins-keyboard),\n * although it will perform reasonably well without.  However, if you are using\n * Cordova there is no reason not to use the plugin.\n *\n * ### Hide when keyboard shows\n * \n * To hide an element when the keyboard is open, add the class `hide-on-keyboard-open`.\n *\n * ```html\n * <div class=\"hide-on-keyboard-open\">\n *   <div id=\"google-map\"></div>\n * </div>\n * ```\n * ----------\n *\n * ### Plugin Usage\n * Information on using the plugin can be found at \n * [https://github.com/ionic-team/ionic-plugins-keyboard](https://github.com/ionic-team/ionic-plugins-keyboard).\n *\n * ---------- \n *\n * ### Android Notes\n * - If your app is running in fullscreen, i.e. you have \n *   `<preference name=\"Fullscreen\" value=\"true\" />` in your `config.xml` file\n *   you will need to set `ionic.Platform.isFullScreen = true` manually.\n *\n * - You can configure the behavior of the web view when the keyboard shows by setting \n *   [android:windowSoftInputMode](http://developer.android.com/reference/android/R.attr.html#windowSoftInputMode)\n *   to either `adjustPan`, `adjustResize` or `adjustNothing` in your app's\n *   activity in `AndroidManifest.xml`. `adjustResize` is the recommended setting\n *   for Ionic, but if for some reason you do use `adjustPan` you will need to\n *   set `ionic.Platform.isFullScreen = true`.\n *\n *   ```xml\n *   <activity android:windowSoftInputMode=\"adjustResize\">\n *\n *   ```\n *\n * ### iOS Notes\n * - If the content of your app (including the header) is being pushed up and\n *   out of view on input focus, try setting `cordova.plugins.Keyboard.disableScroll(true)`.\n *   This does **not** disable scrolling in the Ionic scroll view, rather it\n *   disables the native overflow scrolling that happens automatically as a\n *   result of focusing on inputs below the keyboard. \n * \n */\n\nvar keyboardViewportHeight = window.innerHeight;\nvar keyboardIsOpen;\nvar keyboardActiveElement;\nvar keyboardFocusOutTimer;\nvar keyboardFocusInTimer;\nvar keyboardLastShow = 0;\n\nvar KEYBOARD_OPEN_CSS = 'keyboard-open';\nvar SCROLL_CONTAINER_CSS = 'scroll';\n\nionic.keyboard = {\n  isOpen: false,\n  height: null,\n  landscape: false,\n};\n\nfunction keyboardInit() {\n  if( keyboardHasPlugin() ) {\n    window.addEventListener('native.keyboardshow', keyboardNativeShow);\n    window.addEventListener('native.keyboardhide', keyboardFocusOut);\n\n    //deprecated\n    window.addEventListener('native.showkeyboard', keyboardNativeShow);\n    window.addEventListener('native.hidekeyboard', keyboardFocusOut);\n  }\n  else {\n    document.body.addEventListener('focusout', keyboardFocusOut);\n  }\n\n  document.body.addEventListener('ionic.focusin', keyboardBrowserFocusIn);\n  document.body.addEventListener('focusin', keyboardBrowserFocusIn);\n\n  document.body.addEventListener('orientationchange', keyboardOrientationChange);\n\n  document.removeEventListener('touchstart', keyboardInit);\n}\n\nfunction keyboardNativeShow(e) {\n  clearTimeout(keyboardFocusOutTimer);\n  ionic.keyboard.height = e.keyboardHeight;\n}\n\nfunction keyboardBrowserFocusIn(e) {\n  if( !e.target || !ionic.tap.isTextInput(e.target) || ionic.tap.isDateInput(e.target) || !keyboardIsWithinScroll(e.target) ) return;\n\n  document.addEventListener('keydown', keyboardOnKeyDown, false);\n\n  document.body.scrollTop = 0;\n  document.body.querySelector('.scroll-content').scrollTop = 0;\n\n  keyboardActiveElement = e.target;\n\n  keyboardSetShow(e);\n}\n\nfunction keyboardSetShow(e) {\n  clearTimeout(keyboardFocusInTimer);\n  clearTimeout(keyboardFocusOutTimer);\n\n  keyboardFocusInTimer = setTimeout(function(){\n    if ( keyboardLastShow + 350 > Date.now() ) return;\n    keyboardLastShow = Date.now();\n    var keyboardHeight;\n    var elementBounds = keyboardActiveElement.getBoundingClientRect();\n    var count = 0;\n\n    var pollKeyboardHeight = setInterval(function(){\n\n      keyboardHeight = keyboardGetHeight();\n      if (count > 10){\n        clearInterval(pollKeyboardHeight);\n        //waited long enough, just guess\n        keyboardHeight = 275;\n      }\n      if (keyboardHeight){\n        keyboardShow(e.target, elementBounds.top, elementBounds.bottom, keyboardViewportHeight, keyboardHeight);\n        clearInterval(pollKeyboardHeight);\n      }\n      count++;\n\n    }, 100);\n  }, 32);\n}\n\nfunction keyboardShow(element, elementTop, elementBottom, viewportHeight, keyboardHeight) {\n  var details = {\n    target: element,\n    elementTop: Math.round(elementTop),\n    elementBottom: Math.round(elementBottom),\n    keyboardHeight: keyboardHeight,\n    viewportHeight: viewportHeight\n  };\n\n  details.hasPlugin = keyboardHasPlugin();\n\n  details.contentHeight = viewportHeight - keyboardHeight;\n\n  void 0;\n\n  // figure out if the element is under the keyboard\n  details.isElementUnderKeyboard = (details.elementBottom > details.contentHeight);\n\n  ionic.keyboard.isOpen = true;\n\n  // send event so the scroll view adjusts\n  keyboardActiveElement = element;\n  ionic.trigger('scrollChildIntoView', details, true);\n\n  ionic.requestAnimationFrame(function(){\n    document.body.classList.add(KEYBOARD_OPEN_CSS);\n  });\n\n  // any showing part of the document that isn't within the scroll the user\n  // could touchmove and cause some ugly changes to the app, so disable\n  // any touchmove events while the keyboard is open using e.preventDefault()\n  document.addEventListener('touchmove', keyboardPreventDefault, false);\n\n  return details;\n}\n\nfunction keyboardFocusOut(e) {\n  clearTimeout(keyboardFocusOutTimer);\n\n  keyboardFocusOutTimer = setTimeout(keyboardHide, 350);\n}\n\nfunction keyboardHide() {\n  void 0;\n  ionic.keyboard.isOpen = false;\n\n  ionic.trigger('resetScrollView', {\n    target: keyboardActiveElement\n  }, true);\n\n  ionic.requestAnimationFrame(function(){\n    document.body.classList.remove(KEYBOARD_OPEN_CSS);\n  });\n\n  // the keyboard is gone now, remove the touchmove that disables native scroll\n  document.removeEventListener('touchmove', keyboardPreventDefault);\n  document.removeEventListener('keydown', keyboardOnKeyDown);\n}\n\nfunction keyboardUpdateViewportHeight() {\n  if( window.innerHeight > keyboardViewportHeight ) {\n    keyboardViewportHeight = window.innerHeight;\n  }\n}\n\nfunction keyboardOnKeyDown(e) {\n  if( ionic.scroll.isScrolling ) {\n    keyboardPreventDefault(e);\n  }\n}\n\nfunction keyboardPreventDefault(e) {\n  if( e.target.tagName !== 'TEXTAREA' ) {\n    e.preventDefault();\n  }\n}\n\nfunction keyboardOrientationChange() {\n  var updatedViewportHeight = window.innerHeight;\n\n  //too slow, have to wait for updated height\n  if (updatedViewportHeight === keyboardViewportHeight){\n    var count = 0;\n    var pollViewportHeight = setInterval(function(){\n      //give up\n      if (count > 10){\n        clearInterval(pollViewportHeight);\n      }\n\n      updatedViewportHeight = window.innerHeight;\n\n      if (updatedViewportHeight !== keyboardViewportHeight){\n        if (updatedViewportHeight < keyboardViewportHeight){\n          ionic.keyboard.landscape = true;\n        }\n        else {\n          ionic.keyboard.landscape = false;\n        }\n        keyboardViewportHeight = updatedViewportHeight;\n        clearInterval(pollViewportHeight);\n      }\n      count++;\n\n    }, 50);\n  }\n  else {\n    keyboardViewportHeight = updatedViewportHeight;\n  }\n}\n\nfunction keyboardGetHeight() {\n  // check if we are already have a keyboard height from the plugin\n  if ( ionic.keyboard.height ) {\n    return ionic.keyboard.height;\n  }\n\n  if ( ionic.Platform.isAndroid() ){\n    //should be using the plugin, no way to know how big the keyboard is, so guess\n    if ( ionic.Platform.isFullScreen ){\n      return 275;\n    }\n    //otherwise, wait for the screen to resize\n    if ( window.innerHeight < keyboardViewportHeight ){\n      return keyboardViewportHeight - window.innerHeight;\n    }\n    else {\n      return 0;\n    }\n  }\n\n  // fallback for when its the webview without the plugin\n  // or for just the standard web browser\n  if( ionic.Platform.isIOS() ) {\n    if ( ionic.keyboard.landscape ){\n      return 206;\n    }\n\n    if (!ionic.Platform.isWebView()){\n      return 216;\n    }\n\n    return 260;\n  }\n\n  // safe guess\n  return 275;\n}\n\nfunction keyboardIsWithinScroll(ele) {\n  while(ele) {\n    if(ele.classList.contains(SCROLL_CONTAINER_CSS)) {\n      return true;\n    }\n    ele = ele.parentElement;\n  }\n  return false;\n}\n\nfunction keyboardHasPlugin() {\n  return !!(window.cordova && cordova.plugins && cordova.plugins.Keyboard);\n}\n\nionic.Platform.ready(function() {\n  keyboardUpdateViewportHeight();\n\n  // Android sometimes reports bad innerHeight on window.load\n  // try it again in a lil bit to play it safe\n  setTimeout(keyboardUpdateViewportHeight, 999);\n\n  // only initialize the adjustments for the virtual keyboard\n  // if a touchstart event happens\n  document.addEventListener('touchstart', keyboardInit, false);\n});\n\n\n\nvar viewportTag;\nvar viewportProperties = {};\n\nionic.viewport = {\n  orientation: function() {\n    // 0 = Portrait\n    // 90 = Landscape\n    // not using window.orientation because each device has a different implementation\n    return (window.innerWidth > window.innerHeight ? 90 : 0);\n  }\n};\n\nfunction viewportLoadTag() {\n  var x;\n\n  for(x=0; x<document.head.children.length; x++) {\n    if(document.head.children[x].name == 'viewport') {\n      viewportTag = document.head.children[x];\n      break;\n    }\n  }\n\n  if(viewportTag) {\n    var props = viewportTag.content.toLowerCase().replace(/\\s+/g, '').split(',');\n    var keyValue;\n    for(x=0; x<props.length; x++) {\n      if(props[x]) {\n        keyValue = props[x].split('=');\n        viewportProperties[ keyValue[0] ] = (keyValue.length > 1 ? keyValue[1] : '_');\n      }\n    }\n    viewportUpdate();\n  }\n}\n\nfunction viewportUpdate() {\n  // unit tests in viewport.unit.js\n\n  var initWidth = viewportProperties.width;\n  var initHeight = viewportProperties.height;\n  var p = ionic.Platform;\n  var version = p.version();\n  var DEVICE_WIDTH = 'device-width';\n  var DEVICE_HEIGHT = 'device-height';\n  var orientation = ionic.viewport.orientation();\n\n  // Most times we're removing the height and adding the width\n  // So this is the default to start with, then modify per platform/version/oreintation\n  delete viewportProperties.height;\n  viewportProperties.width = DEVICE_WIDTH;\n\n  if( p.isIPad() ) {\n    // iPad\n\n    if( version > 7 ) {\n      // iPad >= 7.1\n      // https://issues.apache.org/jira/browse/CB-4323\n      delete viewportProperties.width;\n\n    } else {\n      // iPad <= 7.0\n\n      if( p.isWebView() ) {\n        // iPad <= 7.0 WebView\n\n        if( orientation == 90 ) {\n          // iPad <= 7.0 WebView Landscape\n          viewportProperties.height = '0';\n\n        } else if(version == 7) {\n          // iPad <= 7.0 WebView Portait\n          viewportProperties.height = DEVICE_HEIGHT;\n        }\n      } else {\n        // iPad <= 6.1 Browser\n        if(version < 7) {\n          viewportProperties.height = '0';\n        }\n      }\n    }\n\n  } else if( p.isIOS() ) {\n    // iPhone\n\n    if( p.isWebView() ) {\n      // iPhone WebView\n\n      if(version > 7) {\n        // iPhone >= 7.1 WebView\n        delete viewportProperties.width;\n\n      } else if(version < 7) {\n        // iPhone <= 6.1 WebView\n        // if height was set it needs to get removed with this hack for <= 6.1\n        if( initHeight ) viewportProperties.height = '0';\n\n      } else if(version == 7) {\n        //iPhone == 7.0 WebView\n        viewportProperties.height = DEVICE_HEIGHT;\n      }\n\n    } else {\n      // iPhone Browser\n\n      if (version < 7) {\n        // iPhone <= 6.1 Browser\n        // if height was set it needs to get removed with this hack for <= 6.1\n        if( initHeight ) viewportProperties.height = '0';\n      }\n    }\n\n  }\n\n  // only update the viewport tag if there was a change\n  if(initWidth !== viewportProperties.width || initHeight !== viewportProperties.height) {\n    viewportTagUpdate();\n  }\n}\n\nfunction viewportTagUpdate() {\n  var key, props = [];\n  for(key in viewportProperties) {\n    if( viewportProperties[key] ) {\n      props.push(key + (viewportProperties[key] == '_' ? '' : '=' + viewportProperties[key]) );\n    }\n  }\n\n  viewportTag.content = props.join(', ');\n}\n\nionic.Platform.ready(function() {\n  viewportLoadTag();\n\n  window.addEventListener(\"orientationchange\", function(){\n    setTimeout(viewportUpdate, 1000);\n  }, false);\n});\n\n(function(ionic) {\n'use strict';\n  ionic.views.View = function() {\n    this.initialize.apply(this, arguments);\n  };\n\n  ionic.views.View.inherit = ionic.inherit;\n\n  ionic.extend(ionic.views.View.prototype, {\n    initialize: function() {}\n  });\n\n})(window.ionic);\n\n/*\n * Scroller\n * http://github.com/zynga/scroller\n *\n * Copyright 2011, Zynga Inc.\n * Licensed under the MIT License.\n * https://raw.github.com/zynga/scroller/master/MIT-LICENSE.txt\n *\n * Based on the work of: Unify Project (unify-project.org)\n * http://unify-project.org\n * Copyright 2011, Deutsche Telekom AG\n * License: MIT + Apache (V2)\n */\n\n/* jshint eqnull: true */\n\n/**\n * Generic animation class with support for dropped frames both optional easing and duration.\n *\n * Optional duration is useful when the lifetime is defined by another condition than time\n * e.g. speed of an animating object, etc.\n *\n * Dropped frame logic allows to keep using the same updater logic independent from the actual\n * rendering. This eases a lot of cases where it might be pretty complex to break down a state\n * based on the pure time difference.\n */\nvar zyngaCore = { effect: {} };\n(function(global) {\n  var time = Date.now || function() {\n    return +new Date();\n  };\n  var desiredFrames = 60;\n  var millisecondsPerSecond = 1000;\n  var running = {};\n  var counter = 1;\n\n  zyngaCore.effect.Animate = {\n\n    /**\n     * A requestAnimationFrame wrapper / polyfill.\n     *\n     * @param callback {Function} The callback to be invoked before the next repaint.\n     * @param root {HTMLElement} The root element for the repaint\n     */\n    requestAnimationFrame: (function() {\n\n      // Check for request animation Frame support\n      var requestFrame = global.requestAnimationFrame || global.webkitRequestAnimationFrame || global.mozRequestAnimationFrame || global.oRequestAnimationFrame;\n      var isNative = !!requestFrame;\n\n      if (requestFrame && !/requestAnimationFrame\\(\\)\\s*\\{\\s*\\[native code\\]\\s*\\}/i.test(requestFrame.toString())) {\n        isNative = false;\n      }\n\n      if (isNative) {\n        return function(callback, root) {\n          requestFrame(callback, root);\n        };\n      }\n\n      var TARGET_FPS = 60;\n      var requests = {};\n      var requestCount = 0;\n      var rafHandle = 1;\n      var intervalHandle = null;\n      var lastActive = +new Date();\n\n      return function(callback, root) {\n        var callbackHandle = rafHandle++;\n\n        // Store callback\n        requests[callbackHandle] = callback;\n        requestCount++;\n\n        // Create timeout at first request\n        if (intervalHandle === null) {\n\n          intervalHandle = setInterval(function() {\n\n            var time = +new Date();\n            var currentRequests = requests;\n\n            // Reset data structure before executing callbacks\n            requests = {};\n            requestCount = 0;\n\n            for(var key in currentRequests) {\n              if (currentRequests.hasOwnProperty(key)) {\n                currentRequests[key](time);\n                lastActive = time;\n              }\n            }\n\n            // Disable the timeout when nothing happens for a certain\n            // period of time\n            if (time - lastActive > 2500) {\n              clearInterval(intervalHandle);\n              intervalHandle = null;\n            }\n\n          }, 1000 / TARGET_FPS);\n        }\n\n        return callbackHandle;\n      };\n\n    })(),\n\n\n    /**\n     * Stops the given animation.\n     *\n     * @param id {Integer} Unique animation ID\n     * @return {Boolean} Whether the animation was stopped (aka, was running before)\n     */\n    stop: function(id) {\n      var cleared = running[id] != null;\n      if (cleared) {\n        running[id] = null;\n      }\n\n      return cleared;\n    },\n\n\n    /**\n     * Whether the given animation is still running.\n     *\n     * @param id {Integer} Unique animation ID\n     * @return {Boolean} Whether the animation is still running\n     */\n    isRunning: function(id) {\n      return running[id] != null;\n    },\n\n\n    /**\n     * Start the animation.\n     *\n     * @param stepCallback {Function} Pointer to function which is executed on every step.\n     *   Signature of the method should be `function(percent, now, virtual) { return continueWithAnimation; }`\n     * @param verifyCallback {Function} Executed before every animation step.\n     *   Signature of the method should be `function() { return continueWithAnimation; }`\n     * @param completedCallback {Function}\n     *   Signature of the method should be `function(droppedFrames, finishedAnimation) {}`\n     * @param duration {Integer} Milliseconds to run the animation\n     * @param easingMethod {Function} Pointer to easing function\n     *   Signature of the method should be `function(percent) { return modifiedValue; }`\n     * @param root {Element} Render root, when available. Used for internal\n     *   usage of requestAnimationFrame.\n     * @return {Integer} Identifier of animation. Can be used to stop it any time.\n     */\n    start: function(stepCallback, verifyCallback, completedCallback, duration, easingMethod, root) {\n\n      var start = time();\n      var lastFrame = start;\n      var percent = 0;\n      var dropCounter = 0;\n      var id = counter++;\n\n      if (!root) {\n        root = document.body;\n      }\n\n      // Compacting running db automatically every few new animations\n      if (id % 20 === 0) {\n        var newRunning = {};\n        for (var usedId in running) {\n          newRunning[usedId] = true;\n        }\n        running = newRunning;\n      }\n\n      // This is the internal step method which is called every few milliseconds\n      var step = function(virtual) {\n\n        // Normalize virtual value\n        var render = virtual !== true;\n\n        // Get current time\n        var now = time();\n\n        // Verification is executed before next animation step\n        if (!running[id] || (verifyCallback && !verifyCallback(id))) {\n\n          running[id] = null;\n          completedCallback && completedCallback(desiredFrames - (dropCounter / ((now - start) / millisecondsPerSecond)), id, false);\n          return;\n\n        }\n\n        // For the current rendering to apply let's update omitted steps in memory.\n        // This is important to bring internal state variables up-to-date with progress in time.\n        if (render) {\n\n          var droppedFrames = Math.round((now - lastFrame) / (millisecondsPerSecond / desiredFrames)) - 1;\n          for (var j = 0; j < Math.min(droppedFrames, 4); j++) {\n            step(true);\n            dropCounter++;\n          }\n\n        }\n\n        // Compute percent value\n        if (duration) {\n          percent = (now - start) / duration;\n          if (percent > 1) {\n            percent = 1;\n          }\n        }\n\n        // Execute step callback, then...\n        var value = easingMethod ? easingMethod(percent) : percent;\n        if ((stepCallback(value, now, render) === false || percent === 1) && render) {\n          running[id] = null;\n          completedCallback && completedCallback(desiredFrames - (dropCounter / ((now - start) / millisecondsPerSecond)), id, percent === 1 || duration == null);\n        } else if (render) {\n          lastFrame = now;\n          zyngaCore.effect.Animate.requestAnimationFrame(step, root);\n        }\n      };\n\n      // Mark as running\n      running[id] = true;\n\n      // Init first step\n      zyngaCore.effect.Animate.requestAnimationFrame(step, root);\n\n      // Return unique animation ID\n      return id;\n    }\n  };\n})(this);\n\n/*\n * Scroller\n * http://github.com/zynga/scroller\n *\n * Copyright 2011, Zynga Inc.\n * Licensed under the MIT License.\n * https://raw.github.com/zynga/scroller/master/MIT-LICENSE.txt\n *\n * Based on the work of: Unify Project (unify-project.org)\n * http://unify-project.org\n * Copyright 2011, Deutsche Telekom AG\n * License: MIT + Apache (V2)\n */\n\nvar Scroller;\n\n(function(ionic) {\n  var NOOP = function(){};\n\n  // Easing Equations (c) 2003 Robert Penner, all rights reserved.\n  // Open source under the BSD License.\n\n  /**\n   * @param pos {Number} position between 0 (start of effect) and 1 (end of effect)\n  **/\n  var easeOutCubic = function(pos) {\n    return (Math.pow((pos - 1), 3) + 1);\n  };\n\n  /**\n   * @param pos {Number} position between 0 (start of effect) and 1 (end of effect)\n  **/\n  var easeInOutCubic = function(pos) {\n    if ((pos /= 0.5) < 1) {\n      return 0.5 * Math.pow(pos, 3);\n    }\n\n    return 0.5 * (Math.pow((pos - 2), 3) + 2);\n  };\n\n\n/**\n * ionic.views.Scroll\n * A powerful scroll view with support for bouncing, pull to refresh, and paging.\n * @param   {Object}        options options for the scroll view\n * @class A scroll view system\n * @memberof ionic.views\n */\nionic.views.Scroll = ionic.views.View.inherit({\n  initialize: function(options) {\n    var self = this;\n\n    this.__container = options.el;\n    this.__content = options.el.firstElementChild;\n\n    //Remove any scrollTop attached to these elements; they are virtual scroll now\n    //This also stops on-load-scroll-to-window.location.hash that the browser does\n    setTimeout(function() {\n      if (self.__container && self.__content) {\n        self.__container.scrollTop = 0;\n        self.__content.scrollTop = 0;\n      }\n    });\n\n    this.options = {\n\n      /** Disable scrolling on x-axis by default */\n      scrollingX: false,\n      scrollbarX: true,\n\n      /** Enable scrolling on y-axis */\n      scrollingY: true,\n      scrollbarY: true,\n\n      startX: 0,\n      startY: 0,\n\n      /** The amount to dampen mousewheel events */\n      wheelDampen: 6,\n\n      /** The minimum size the scrollbars scale to while scrolling */\n      minScrollbarSizeX: 5,\n      minScrollbarSizeY: 5,\n\n      /** Scrollbar fading after scrolling */\n      scrollbarsFade: true,\n      scrollbarFadeDelay: 300,\n      /** The initial fade delay when the pane is resized or initialized */\n      scrollbarResizeFadeDelay: 1000,\n\n      /** Enable animations for deceleration, snap back, zooming and scrolling */\n      animating: true,\n\n      /** duration for animations triggered by scrollTo/zoomTo */\n      animationDuration: 250,\n\n      /** Enable bouncing (content can be slowly moved outside and jumps back after releasing) */\n      bouncing: true,\n\n      /** Enable locking to the main axis if user moves only slightly on one of them at start */\n      locking: true,\n\n      /** Enable pagination mode (switching between full page content panes) */\n      paging: false,\n\n      /** Enable snapping of content to a configured pixel grid */\n      snapping: false,\n\n      /** Enable zooming of content via API, fingers and mouse wheel */\n      zooming: false,\n\n      /** Minimum zoom level */\n      minZoom: 0.5,\n\n      /** Maximum zoom level */\n      maxZoom: 3,\n\n      /** Multiply or decrease scrolling speed **/\n      speedMultiplier: 1,\n\n      deceleration: 0.97,\n\n      /** Callback that is fired on the later of touch end or deceleration end,\n        provided that another scrolling action has not begun. Used to know\n        when to fade out a scrollbar. */\n      scrollingComplete: NOOP,\n\n      /** This configures the amount of change applied to deceleration when reaching boundaries  **/\n      penetrationDeceleration : 0.03,\n\n      /** This configures the amount of change applied to acceleration when reaching boundaries  **/\n      penetrationAcceleration : 0.08,\n\n      // The ms interval for triggering scroll events\n      scrollEventInterval: 10,\n\n      getContentWidth: function() {\n        return Math.max(self.__content.scrollWidth, self.__content.offsetWidth);\n      },\n      getContentHeight: function() {\n        return Math.max(self.__content.scrollHeight, self.__content.offsetHeight + self.__content.offsetTop);\n      }\n\t\t};\n\n    for (var key in options) {\n      this.options[key] = options[key];\n    }\n\n    this.hintResize = ionic.debounce(function() {\n      self.resize();\n    }, 1000, true);\n\n    this.onScroll = function() {\n\n      if(!ionic.scroll.isScrolling) {\n        setTimeout(self.setScrollStart, 50);\n      } else {\n        clearTimeout(self.scrollTimer);\n        self.scrollTimer = setTimeout(self.setScrollStop, 80);\n      }\n\n    };\n\n    this.setScrollStart = function() {\n      ionic.scroll.isScrolling = Math.abs(ionic.scroll.lastTop - self.__scrollTop) > 1;\n      clearTimeout(self.scrollTimer);\n      self.scrollTimer = setTimeout(self.setScrollStop, 80);\n    };\n\n    this.setScrollStop = function() {\n      ionic.scroll.isScrolling = false;\n      ionic.scroll.lastTop = self.__scrollTop;\n    };\n\n    this.triggerScrollEvent = ionic.throttle(function() {\n      self.onScroll();\n      ionic.trigger('scroll', {\n        scrollTop: self.__scrollTop,\n        scrollLeft: self.__scrollLeft,\n        target: self.__container\n      });\n    }, this.options.scrollEventInterval);\n\n    this.triggerScrollEndEvent = function() {\n      ionic.trigger('scrollend', {\n        scrollTop: self.__scrollTop,\n        scrollLeft: self.__scrollLeft,\n        target: self.__container\n      });\n    };\n\n    this.__scrollLeft = this.options.startX;\n    this.__scrollTop = this.options.startY;\n\n    // Get the render update function, initialize event handlers,\n    // and calculate the size of the scroll container\n    this.__callback = this.getRenderFn();\n    this.__initEventHandlers();\n    this.__createScrollbars();\n\n  },\n\n  run: function() {\n    this.resize();\n\n    // Fade them out\n    this.__fadeScrollbars('out', this.options.scrollbarResizeFadeDelay);\n  },\n\n\n\n  /*\n  ---------------------------------------------------------------------------\n    INTERNAL FIELDS :: STATUS\n  ---------------------------------------------------------------------------\n  */\n\n  /** Whether only a single finger is used in touch handling */\n  __isSingleTouch: false,\n\n  /** Whether a touch event sequence is in progress */\n  __isTracking: false,\n\n  /** Whether a deceleration animation went to completion. */\n  __didDecelerationComplete: false,\n\n  /**\n   * Whether a gesture zoom/rotate event is in progress. Activates when\n   * a gesturestart event happens. This has higher priority than dragging.\n   */\n  __isGesturing: false,\n\n  /**\n   * Whether the user has moved by such a distance that we have enabled\n   * dragging mode. Hint: It's only enabled after some pixels of movement to\n   * not interrupt with clicks etc.\n   */\n  __isDragging: false,\n\n  /**\n   * Not touching and dragging anymore, and smoothly animating the\n   * touch sequence using deceleration.\n   */\n  __isDecelerating: false,\n\n  /**\n   * Smoothly animating the currently configured change\n   */\n  __isAnimating: false,\n\n\n\n  /*\n  ---------------------------------------------------------------------------\n    INTERNAL FIELDS :: DIMENSIONS\n  ---------------------------------------------------------------------------\n  */\n\n  /** Available outer left position (from document perspective) */\n  __clientLeft: 0,\n\n  /** Available outer top position (from document perspective) */\n  __clientTop: 0,\n\n  /** Available outer width */\n  __clientWidth: 0,\n\n  /** Available outer height */\n  __clientHeight: 0,\n\n  /** Outer width of content */\n  __contentWidth: 0,\n\n  /** Outer height of content */\n  __contentHeight: 0,\n\n  /** Snapping width for content */\n  __snapWidth: 100,\n\n  /** Snapping height for content */\n  __snapHeight: 100,\n\n  /** Height to assign to refresh area */\n  __refreshHeight: null,\n\n  /** Whether the refresh process is enabled when the event is released now */\n  __refreshActive: false,\n\n  /** Callback to execute on activation. This is for signalling the user about a refresh is about to happen when he release */\n  __refreshActivate: null,\n\n  /** Callback to execute on deactivation. This is for signalling the user about the refresh being cancelled */\n  __refreshDeactivate: null,\n\n  /** Callback to execute to start the actual refresh. Call {@link #refreshFinish} when done */\n  __refreshStart: null,\n\n  /** Zoom level */\n  __zoomLevel: 1,\n\n  /** Scroll position on x-axis */\n  __scrollLeft: 0,\n\n  /** Scroll position on y-axis */\n  __scrollTop: 0,\n\n  /** Maximum allowed scroll position on x-axis */\n  __maxScrollLeft: 0,\n\n  /** Maximum allowed scroll position on y-axis */\n  __maxScrollTop: 0,\n\n  /* Scheduled left position (final position when animating) */\n  __scheduledLeft: 0,\n\n  /* Scheduled top position (final position when animating) */\n  __scheduledTop: 0,\n\n  /* Scheduled zoom level (final scale when animating) */\n  __scheduledZoom: 0,\n\n\n\n  /*\n  ---------------------------------------------------------------------------\n    INTERNAL FIELDS :: LAST POSITIONS\n  ---------------------------------------------------------------------------\n  */\n\n  /** Left position of finger at start */\n  __lastTouchLeft: null,\n\n  /** Top position of finger at start */\n  __lastTouchTop: null,\n\n  /** Timestamp of last move of finger. Used to limit tracking range for deceleration speed. */\n  __lastTouchMove: null,\n\n  /** List of positions, uses three indexes for each state: left, top, timestamp */\n  __positions: null,\n\n\n\n  /*\n  ---------------------------------------------------------------------------\n    INTERNAL FIELDS :: DECELERATION SUPPORT\n  ---------------------------------------------------------------------------\n  */\n\n  /** Minimum left scroll position during deceleration */\n  __minDecelerationScrollLeft: null,\n\n  /** Minimum top scroll position during deceleration */\n  __minDecelerationScrollTop: null,\n\n  /** Maximum left scroll position during deceleration */\n  __maxDecelerationScrollLeft: null,\n\n  /** Maximum top scroll position during deceleration */\n  __maxDecelerationScrollTop: null,\n\n  /** Current factor to modify horizontal scroll position with on every step */\n  __decelerationVelocityX: null,\n\n  /** Current factor to modify vertical scroll position with on every step */\n  __decelerationVelocityY: null,\n\n\n  /** the browser-specific property to use for transforms */\n  __transformProperty: null,\n  __perspectiveProperty: null,\n\n  /** scrollbar indicators */\n  __indicatorX: null,\n  __indicatorY: null,\n\n  /** Timeout for scrollbar fading */\n  __scrollbarFadeTimeout: null,\n\n  /** whether we've tried to wait for size already */\n  __didWaitForSize: null,\n  __sizerTimeout: null,\n\n  __initEventHandlers: function() {\n    var self = this;\n\n    // Event Handler\n    var container = this.__container;\n\n    //Broadcasted when keyboard is shown on some platforms.\n    //See js/utils/keyboard.js\n    container.addEventListener('scrollChildIntoView', function(e) {\n\n      //distance from bottom of scrollview to top of viewport\n      var scrollBottomOffsetToTop;\n\n      if( !self.isScrolledIntoView ) {\n        // shrink scrollview so we can actually scroll if the input is hidden\n        // if it isn't shrink so we can scroll to inputs under the keyboard\n        if (ionic.Platform.isIOS() || ionic.Platform.isFullScreen){\n          // if there are things below the scroll view account for them and\n          // subtract them from the keyboard height when resizing\n          scrollBottomOffsetToTop = container.getBoundingClientRect().bottom;\n          var scrollBottomOffsetToBottom = e.detail.viewportHeight - scrollBottomOffsetToTop;\n          var keyboardOffset = Math.max(0, e.detail.keyboardHeight - scrollBottomOffsetToBottom);\n          container.style.height = (container.clientHeight - keyboardOffset) + \"px\";\n          container.style.overflow = \"visible\";\n          //update scroll view\n          self.resize();\n        }\n        self.isScrolledIntoView = true;\n      }\n\n      //If the element is positioned under the keyboard...\n      if( e.detail.isElementUnderKeyboard ) {\n        var delay;\n        // Wait on android for web view to resize\n        if ( ionic.Platform.isAndroid() && !ionic.Platform.isFullScreen ) {\n          // android y u resize so slow\n          if ( ionic.Platform.version() < 4.4) {\n            delay = 500;\n          } else {\n            // probably overkill for chrome\n            delay = 350;\n          }\n        } else {\n          delay = 80;\n        }\n\n        //Put element in middle of visible screen\n        //Wait for android to update view height and resize() to reset scroll position\n        ionic.scroll.isScrolling = true;\n        setTimeout(function(){\n          //middle of the scrollview, where we want to scroll to\n          var scrollMidpointOffset = container.clientHeight * 0.5;\n\n          scrollBottomOffsetToTop = container.getBoundingClientRect().bottom;\n          //distance from top of focused element to the bottom of the scroll view\n          var elementTopOffsetToScrollBottom = e.detail.elementTop - scrollBottomOffsetToTop;\n\n          var scrollTop = elementTopOffsetToScrollBottom  + scrollMidpointOffset;\n\n          if (scrollTop > 0){\n            ionic.tap.cloneFocusedInput(container, self);\n            self.scrollBy(0, scrollTop, true);\n            self.onScroll();\n          }\n        }, delay);\n      }\n\n      //Only the first scrollView parent of the element that broadcasted this event\n      //(the active element that needs to be shown) should receive this event\n      e.stopPropagation();\n    });\n\n    container.addEventListener('resetScrollView', function(e) {\n      //return scrollview to original height once keyboard has hidden\n      self.isScrolledIntoView = false;\n      container.style.height = \"\";\n      container.style.overflow = \"\";\n      self.resize();\n      ionic.scroll.isScrolling = false;\n    });\n\n    function getEventTouches(e) {\n      return e.touches && e.touches.length ? e.touches : [{\n        pageX: e.pageX,\n        pageY: e.pageY\n      }];\n    }\n\n    self.touchStart = function(e) {\n      self.startCoordinates = getPointerCoordinates(e);\n\n      if ( ionic.tap.ignoreScrollStart(e) ) {\n        return;\n      }\n\n      self.__isDown = true;\n\n      if( ionic.tap.containsOrIsTextInput(e.target) || e.target.tagName === 'SELECT' ) {\n        // do not start if the target is a text input\n        // if there is a touchmove on this input, then we can start the scroll\n        self.__hasStarted = false;\n        return;\n      }\n\n      self.__isSelectable = true;\n      self.__enableScrollY = true;\n      self.__hasStarted = true;\n      self.doTouchStart(getEventTouches(e), e.timeStamp);\n      e.preventDefault();\n    };\n\n    self.touchMove = function(e) {\n      if(!self.__isDown ||\n        e.defaultPrevented ||\n        (e.target.tagName === 'TEXTAREA' && e.target.parentElement.querySelector(':focus')) ) {\n        return;\n      }\n\n      if( !self.__hasStarted && ( ionic.tap.containsOrIsTextInput(e.target) || e.target.tagName === 'SELECT' ) ) {\n        // the target is a text input and scroll has started\n        // since the text input doesn't start on touchStart, do it here\n        self.__hasStarted = true;\n        self.doTouchStart(getEventTouches(e), e.timeStamp);\n        e.preventDefault();\n        return;\n      }\n\n      if(self.startCoordinates) {\n        // we have start coordinates, so get this touch move's current coordinates\n        var currentCoordinates = getPointerCoordinates(e);\n\n        if( self.__isSelectable &&\n            ionic.tap.isTextInput(e.target) &&\n            Math.abs(self.startCoordinates.x - currentCoordinates.x) > 20 ) {\n          // user slid the text input's caret on its x axis, disable any future y scrolling\n          self.__enableScrollY = false;\n          self.__isSelectable = true;\n        }\n\n        if( self.__enableScrollY && Math.abs(self.startCoordinates.y - currentCoordinates.y) > 10 ) {\n          // user scrolled the entire view on the y axis\n          // disabled being able to select text on an input\n          // hide the input which has focus, and show a cloned one that doesn't have focus\n          self.__isSelectable = false;\n          ionic.tap.cloneFocusedInput(container, self);\n        }\n      }\n\n      self.doTouchMove(getEventTouches(e), e.timeStamp, e.scale);\n      self.__isDown = true;\n    };\n\n    self.touchEnd = function(e) {\n      if(!self.__isDown) return;\n\n      self.doTouchEnd(e.timeStamp);\n      self.__isDown = false;\n      self.__hasStarted = false;\n      self.__isSelectable = true;\n      self.__enableScrollY = true;\n\n      if( !self.__isDragging && !self.__isDecelerating && !self.__isAnimating ) {\n        ionic.tap.removeClonedInputs(container, self);\n      }\n    };\n\n    self.options.orgScrollingComplete = self.options.scrollingComplete;\n    self.options.scrollingComplete = function() {\n      ionic.tap.removeClonedInputs(container, self);\n      self.options.orgScrollingComplete();\n    };\n\n    if ('ontouchstart' in window) {\n      // Touch Events\n      container.addEventListener(\"touchstart\", self.touchStart, false);\n      document.addEventListener(\"touchmove\", self.touchMove, false);\n      document.addEventListener(\"touchend\", self.touchEnd, false);\n      document.addEventListener(\"touchcancel\", self.touchEnd, false);\n\n    } else if (window.navigator.pointerEnabled) {\n      // Pointer Events\n      container.addEventListener(\"pointerdown\", self.touchStart, false);\n      document.addEventListener(\"pointermove\", self.touchMove, false);\n      document.addEventListener(\"pointerup\", self.touchEnd, false);\n      document.addEventListener(\"pointercancel\", self.touchEnd, false);\n\n    } else if (window.navigator.msPointerEnabled) {\n      // IE10, WP8 (Pointer Events)\n      container.addEventListener(\"MSPointerDown\", self.touchStart, false);\n      document.addEventListener(\"MSPointerMove\", self.touchMove, false);\n      document.addEventListener(\"MSPointerUp\", self.touchEnd, false);\n      document.addEventListener(\"MSPointerCancel\", self.touchEnd, false);\n\n    } else {\n      // Mouse Events\n      var mousedown = false;\n\n      self.mouseDown = function(e) {\n        if ( ionic.tap.ignoreScrollStart(e) || e.target.tagName === 'SELECT' ) {\n          return;\n        }\n        self.doTouchStart(getEventTouches(e), e.timeStamp);\n\n        if( !ionic.tap.isTextInput(e.target) ) {\n          e.preventDefault();\n        }\n        mousedown = true;\n      };\n\n      self.mouseMove = function(e) {\n        if (!mousedown || e.defaultPrevented) {\n          return;\n        }\n\n        self.doTouchMove(getEventTouches(e), e.timeStamp);\n\n        mousedown = true;\n      };\n\n      self.mouseUp = function(e) {\n        if (!mousedown) {\n          return;\n        }\n\n        self.doTouchEnd(e.timeStamp);\n\n        mousedown = false;\n      };\n\n      self.mouseWheel = ionic.animationFrameThrottle(function(e) {\n        var scrollParent = ionic.DomUtil.getParentOrSelfWithClass(e.target, 'ionic-scroll');\n        if (scrollParent === self.__container) {\n\n          self.hintResize();\n          self.scrollBy(\n            e.wheelDeltaX/self.options.wheelDampen,\n            -e.wheelDeltaY/self.options.wheelDampen\n          );\n\n          self.__fadeScrollbars('in');\n          clearTimeout(self.__wheelHideBarTimeout);\n          self.__wheelHideBarTimeout = setTimeout(function() {\n            self.__fadeScrollbars('out');\n          }, 100);\n        }\n      });\n\n      container.addEventListener(\"mousedown\", self.mouseDown, false);\n      document.addEventListener(\"mousemove\", self.mouseMove, false);\n      document.addEventListener(\"mouseup\", self.mouseUp, false);\n      document.addEventListener('mousewheel', self.mouseWheel, false);\n    }\n  },\n\n  __removeEventHandlers: function() {\n    var container = this.__container;\n\n    container.removeEventListener('touchstart', self.touchStart);\n    document.removeEventListener('touchmove', self.touchMove);\n    document.removeEventListener('touchend', self.touchEnd);\n    document.removeEventListener('touchcancel', self.touchCancel);\n\n    container.removeEventListener(\"pointerdown\", self.touchStart);\n    document.removeEventListener(\"pointermove\", self.touchMove);\n    document.removeEventListener(\"pointerup\", self.touchEnd);\n    document.removeEventListener(\"pointercancel\", self.touchEnd);\n\n    container.removeEventListener(\"MSPointerDown\", self.touchStart);\n    document.removeEventListener(\"MSPointerMove\", self.touchMove);\n    document.removeEventListener(\"MSPointerUp\", self.touchEnd);\n    document.removeEventListener(\"MSPointerCancel\", self.touchEnd);\n\n    container.removeEventListener(\"mousedown\", self.mouseDown);\n    document.removeEventListener(\"mousemove\", self.mouseMove);\n    document.removeEventListener(\"mouseup\", self.mouseUp);\n    document.removeEventListener('mousewheel', self.mouseWheel);\n  },\n\n  /** Create a scroll bar div with the given direction **/\n  __createScrollbar: function(direction) {\n    var bar = document.createElement('div'),\n      indicator = document.createElement('div');\n\n    indicator.className = 'scroll-bar-indicator';\n\n    if(direction == 'h') {\n      bar.className = 'scroll-bar scroll-bar-h';\n    } else {\n      bar.className = 'scroll-bar scroll-bar-v';\n    }\n\n    bar.appendChild(indicator);\n    return bar;\n  },\n\n  __createScrollbars: function() {\n    var indicatorX, indicatorY;\n\n    if(this.options.scrollingX) {\n      indicatorX = {\n        el: this.__createScrollbar('h'),\n        sizeRatio: 1\n      };\n      indicatorX.indicator = indicatorX.el.children[0];\n\n      if(this.options.scrollbarX) {\n        this.__container.appendChild(indicatorX.el);\n      }\n      this.__indicatorX = indicatorX;\n    }\n\n    if(this.options.scrollingY) {\n      indicatorY = {\n        el: this.__createScrollbar('v'),\n        sizeRatio: 1\n      };\n      indicatorY.indicator = indicatorY.el.children[0];\n\n      if(this.options.scrollbarY) {\n        this.__container.appendChild(indicatorY.el);\n      }\n      this.__indicatorY = indicatorY;\n    }\n  },\n\n  __resizeScrollbars: function() {\n    var self = this;\n\n    // Update horiz bar\n    if(self.__indicatorX) {\n      var width = Math.max(Math.round(self.__clientWidth * self.__clientWidth / (self.__contentWidth)), 20);\n      if(width > self.__contentWidth) {\n        width = 0;\n      }\n      self.__indicatorX.size = width;\n      self.__indicatorX.minScale = this.options.minScrollbarSizeX / width;\n      self.__indicatorX.indicator.style.width = width + 'px';\n      self.__indicatorX.maxPos = self.__clientWidth - width;\n      self.__indicatorX.sizeRatio = self.__maxScrollLeft ? self.__indicatorX.maxPos / self.__maxScrollLeft : 1;\n    }\n\n    // Update vert bar\n    if(self.__indicatorY) {\n      var height = Math.max(Math.round(self.__clientHeight * self.__clientHeight / (self.__contentHeight)), 20);\n      if(height > self.__contentHeight) {\n        height = 0;\n      }\n      self.__indicatorY.size = height;\n      self.__indicatorY.minScale = this.options.minScrollbarSizeY / height;\n      self.__indicatorY.maxPos = self.__clientHeight - height;\n      self.__indicatorY.indicator.style.height = height + 'px';\n      self.__indicatorY.sizeRatio = self.__maxScrollTop ? self.__indicatorY.maxPos / self.__maxScrollTop : 1;\n    }\n  },\n\n  /**\n   * Move and scale the scrollbars as the page scrolls.\n   */\n  __repositionScrollbars: function() {\n    var self = this, width, heightScale,\n        widthDiff, heightDiff,\n        x, y,\n        xstop = 0, ystop = 0;\n\n    if(self.__indicatorX) {\n      // Handle the X scrollbar\n\n      // Don't go all the way to the right if we have a vertical scrollbar as well\n      if(self.__indicatorY) xstop = 10;\n\n      x = Math.round(self.__indicatorX.sizeRatio * self.__scrollLeft) || 0,\n\n      // The the difference between the last content X position, and our overscrolled one\n      widthDiff = self.__scrollLeft - (self.__maxScrollLeft - xstop);\n\n      if(self.__scrollLeft < 0) {\n\n        widthScale = Math.max(self.__indicatorX.minScale,\n            (self.__indicatorX.size - Math.abs(self.__scrollLeft)) / self.__indicatorX.size);\n\n        // Stay at left\n        x = 0;\n\n        // Make sure scale is transformed from the left/center origin point\n        self.__indicatorX.indicator.style[self.__transformOriginProperty] = 'left center';\n      } else if(widthDiff > 0) {\n\n        widthScale = Math.max(self.__indicatorX.minScale,\n            (self.__indicatorX.size - widthDiff) / self.__indicatorX.size);\n\n        // Stay at the furthest x for the scrollable viewport\n        x = self.__indicatorX.maxPos - xstop;\n\n        // Make sure scale is transformed from the right/center origin point\n        self.__indicatorX.indicator.style[self.__transformOriginProperty] = 'right center';\n\n      } else {\n\n        // Normal motion\n        x = Math.min(self.__maxScrollLeft, Math.max(0, x));\n        widthScale = 1;\n\n      }\n\n      self.__indicatorX.indicator.style[self.__transformProperty] = 'translate3d(' + x + 'px, 0, 0) scaleX(' + widthScale + ')';\n    }\n\n    if(self.__indicatorY) {\n\n      y = Math.round(self.__indicatorY.sizeRatio * self.__scrollTop) || 0;\n\n      // Don't go all the way to the right if we have a vertical scrollbar as well\n      if(self.__indicatorX) ystop = 10;\n\n      heightDiff = self.__scrollTop - (self.__maxScrollTop - ystop);\n\n      if(self.__scrollTop < 0) {\n\n        heightScale = Math.max(self.__indicatorY.minScale, (self.__indicatorY.size - Math.abs(self.__scrollTop)) / self.__indicatorY.size);\n\n        // Stay at top\n        y = 0;\n\n        // Make sure scale is transformed from the center/top origin point\n        self.__indicatorY.indicator.style[self.__transformOriginProperty] = 'center top';\n\n      } else if(heightDiff > 0) {\n\n        heightScale = Math.max(self.__indicatorY.minScale, (self.__indicatorY.size - heightDiff) / self.__indicatorY.size);\n\n        // Stay at bottom of scrollable viewport\n        y = self.__indicatorY.maxPos - ystop;\n\n        // Make sure scale is transformed from the center/bottom origin point\n        self.__indicatorY.indicator.style[self.__transformOriginProperty] = 'center bottom';\n\n      } else {\n\n        // Normal motion\n        y = Math.min(self.__maxScrollTop, Math.max(0, y));\n        heightScale = 1;\n\n      }\n\n      self.__indicatorY.indicator.style[self.__transformProperty] = 'translate3d(0,' + y + 'px, 0) scaleY(' + heightScale + ')';\n    }\n  },\n\n  __fadeScrollbars: function(direction, delay) {\n    var self = this;\n\n    if(!this.options.scrollbarsFade) {\n      return;\n    }\n\n    var className = 'scroll-bar-fade-out';\n\n    if(self.options.scrollbarsFade === true) {\n      clearTimeout(self.__scrollbarFadeTimeout);\n\n      if(direction == 'in') {\n        if(self.__indicatorX) { self.__indicatorX.indicator.classList.remove(className); }\n        if(self.__indicatorY) { self.__indicatorY.indicator.classList.remove(className); }\n      } else {\n        self.__scrollbarFadeTimeout = setTimeout(function() {\n          if(self.__indicatorX) { self.__indicatorX.indicator.classList.add(className); }\n          if(self.__indicatorY) { self.__indicatorY.indicator.classList.add(className); }\n        }, delay || self.options.scrollbarFadeDelay);\n      }\n    }\n  },\n\n  __scrollingComplete: function() {\n    var self = this;\n    self.options.scrollingComplete();\n\n    self.__fadeScrollbars('out');\n  },\n\n  resize: function() {\n    // Update Scroller dimensions for changed content\n    // Add padding to bottom of content\n    this.setDimensions(\n    \tthis.__container.clientWidth,\n    \tthis.__container.clientHeight,\n      this.options.getContentWidth(),\n      this.options.getContentHeight()\n    );\n  },\n  /*\n  ---------------------------------------------------------------------------\n    PUBLIC API\n  ---------------------------------------------------------------------------\n  */\n\n  getRenderFn: function() {\n    var self = this;\n\n    var content = this.__content;\n\n    var docStyle = document.documentElement.style;\n\n    var engine;\n    if ('MozAppearance' in docStyle) {\n      engine = 'gecko';\n    } else if ('WebkitAppearance' in docStyle) {\n      engine = 'webkit';\n    } else if (typeof navigator.cpuClass === 'string') {\n      engine = 'trident';\n    }\n\n    var vendorPrefix = {\n      trident: 'ms',\n      gecko: 'Moz',\n      webkit: 'Webkit',\n      presto: 'O'\n    }[engine];\n\n    var helperElem = document.createElement(\"div\");\n    var undef;\n\n    var perspectiveProperty = vendorPrefix + \"Perspective\";\n    var transformProperty = vendorPrefix + \"Transform\";\n    var transformOriginProperty = vendorPrefix + 'TransformOrigin';\n\n    self.__perspectiveProperty = transformProperty;\n    self.__transformProperty = transformProperty;\n    self.__transformOriginProperty = transformOriginProperty;\n\n    if (helperElem.style[perspectiveProperty] !== undef) {\n\n      return function(left, top, zoom, wasResize) {\n        content.style[transformProperty] = 'translate3d(' + (-left) + 'px,' + (-top) + 'px,0) scale(' + zoom + ')';\n        self.__repositionScrollbars();\n        if(!wasResize) {\n          self.triggerScrollEvent();\n        }\n      };\n\n    } else if (helperElem.style[transformProperty] !== undef) {\n\n      return function(left, top, zoom, wasResize) {\n        content.style[transformProperty] = 'translate(' + (-left) + 'px,' + (-top) + 'px) scale(' + zoom + ')';\n        self.__repositionScrollbars();\n        if(!wasResize) {\n          self.triggerScrollEvent();\n        }\n      };\n\n    } else {\n\n      return function(left, top, zoom, wasResize) {\n        content.style.marginLeft = left ? (-left/zoom) + 'px' : '';\n        content.style.marginTop = top ? (-top/zoom) + 'px' : '';\n        content.style.zoom = zoom || '';\n        self.__repositionScrollbars();\n        if(!wasResize) {\n          self.triggerScrollEvent();\n        }\n      };\n\n    }\n  },\n\n\n  /**\n   * Configures the dimensions of the client (outer) and content (inner) elements.\n   * Requires the available space for the outer element and the outer size of the inner element.\n   * All values which are falsy (null or zero etc.) are ignored and the old value is kept.\n   *\n   * @param clientWidth {Integer} Inner width of outer element\n   * @param clientHeight {Integer} Inner height of outer element\n   * @param contentWidth {Integer} Outer width of inner element\n   * @param contentHeight {Integer} Outer height of inner element\n   */\n  setDimensions: function(clientWidth, clientHeight, contentWidth, contentHeight) {\n    var self = this;\n\n    // Only update values which are defined\n    if (clientWidth === +clientWidth) {\n      self.__clientWidth = clientWidth;\n    }\n\n    if (clientHeight === +clientHeight) {\n      self.__clientHeight = clientHeight;\n    }\n\n    if (contentWidth === +contentWidth) {\n      self.__contentWidth = contentWidth;\n    }\n\n    if (contentHeight === +contentHeight) {\n      self.__contentHeight = contentHeight;\n    }\n\n    // Refresh maximums\n    self.__computeScrollMax();\n    self.__resizeScrollbars();\n\n    // Refresh scroll position\n    self.scrollTo(self.__scrollLeft, self.__scrollTop, true, null, true);\n\n  },\n\n\n  /**\n   * Sets the client coordinates in relation to the document.\n   *\n   * @param left {Integer} Left position of outer element\n   * @param top {Integer} Top position of outer element\n   */\n  setPosition: function(left, top) {\n\n    var self = this;\n\n    self.__clientLeft = left || 0;\n    self.__clientTop = top || 0;\n\n  },\n\n\n  /**\n   * Configures the snapping (when snapping is active)\n   *\n   * @param width {Integer} Snapping width\n   * @param height {Integer} Snapping height\n   */\n  setSnapSize: function(width, height) {\n\n    var self = this;\n\n    self.__snapWidth = width;\n    self.__snapHeight = height;\n\n  },\n\n\n  /**\n   * Activates pull-to-refresh. A special zone on the top of the list to start a list refresh whenever\n   * the user event is released during visibility of this zone. This was introduced by some apps on iOS like\n   * the official Twitter client.\n   *\n   * @param height {Integer} Height of pull-to-refresh zone on top of rendered list\n   * @param activateCallback {Function} Callback to execute on activation. This is for signalling the user about a refresh is about to happen when he release.\n   * @param deactivateCallback {Function} Callback to execute on deactivation. This is for signalling the user about the refresh being cancelled.\n   * @param startCallback {Function} Callback to execute to start the real async refresh action. Call {@link #finishPullToRefresh} after finish of refresh.\n   */\n  activatePullToRefresh: function(height, activateCallback, deactivateCallback, startCallback) {\n\n    var self = this;\n\n    self.__refreshHeight = height;\n    self.__refreshActivate = activateCallback;\n    self.__refreshDeactivate = deactivateCallback;\n    self.__refreshStart = startCallback;\n\n  },\n\n\n  /**\n   * Starts pull-to-refresh manually.\n   */\n  triggerPullToRefresh: function() {\n    // Use publish instead of scrollTo to allow scrolling to out of boundary position\n    // We don't need to normalize scrollLeft, zoomLevel, etc. here because we only y-scrolling when pull-to-refresh is enabled\n    this.__publish(this.__scrollLeft, -this.__refreshHeight, this.__zoomLevel, true);\n\n    if (this.__refreshStart) {\n      this.__refreshStart();\n    }\n  },\n\n\n  /**\n   * Signalizes that pull-to-refresh is finished.\n   */\n  finishPullToRefresh: function() {\n\n    var self = this;\n\n    self.__refreshActive = false;\n    if (self.__refreshDeactivate) {\n      self.__refreshDeactivate();\n    }\n\n    self.scrollTo(self.__scrollLeft, self.__scrollTop, true);\n\n  },\n\n\n  /**\n   * Returns the scroll position and zooming values\n   *\n   * @return {Map} `left` and `top` scroll position and `zoom` level\n   */\n  getValues: function() {\n\n    var self = this;\n\n    return {\n      left: self.__scrollLeft,\n      top: self.__scrollTop,\n      zoom: self.__zoomLevel\n    };\n\n  },\n\n\n  /**\n   * Returns the maximum scroll values\n   *\n   * @return {Map} `left` and `top` maximum scroll values\n   */\n  getScrollMax: function() {\n\n    var self = this;\n\n    return {\n      left: self.__maxScrollLeft,\n      top: self.__maxScrollTop\n    };\n\n  },\n\n\n  /**\n   * Zooms to the given level. Supports optional animation. Zooms\n   * the center when no coordinates are given.\n   *\n   * @param level {Number} Level to zoom to\n   * @param animate {Boolean} Whether to use animation\n   * @param originLeft {Number} Zoom in at given left coordinate\n   * @param originTop {Number} Zoom in at given top coordinate\n   */\n  zoomTo: function(level, animate, originLeft, originTop) {\n\n    var self = this;\n\n    if (!self.options.zooming) {\n      throw new Error(\"Zooming is not enabled!\");\n    }\n\n    // Stop deceleration\n    if (self.__isDecelerating) {\n      zyngaCore.effect.Animate.stop(self.__isDecelerating);\n      self.__isDecelerating = false;\n    }\n\n    var oldLevel = self.__zoomLevel;\n\n    // Normalize input origin to center of viewport if not defined\n    if (originLeft == null) {\n      originLeft = self.__clientWidth / 2;\n    }\n\n    if (originTop == null) {\n      originTop = self.__clientHeight / 2;\n    }\n\n    // Limit level according to configuration\n    level = Math.max(Math.min(level, self.options.maxZoom), self.options.minZoom);\n\n    // Recompute maximum values while temporary tweaking maximum scroll ranges\n    self.__computeScrollMax(level);\n\n    // Recompute left and top coordinates based on new zoom level\n    var left = ((originLeft + self.__scrollLeft) * level / oldLevel) - originLeft;\n    var top = ((originTop + self.__scrollTop) * level / oldLevel) - originTop;\n\n    // Limit x-axis\n    if (left > self.__maxScrollLeft) {\n      left = self.__maxScrollLeft;\n    } else if (left < 0) {\n      left = 0;\n    }\n\n    // Limit y-axis\n    if (top > self.__maxScrollTop) {\n      top = self.__maxScrollTop;\n    } else if (top < 0) {\n      top = 0;\n    }\n\n    // Push values out\n    self.__publish(left, top, level, animate);\n\n  },\n\n\n  /**\n   * Zooms the content by the given factor.\n   *\n   * @param factor {Number} Zoom by given factor\n   * @param animate {Boolean} Whether to use animation\n   * @param originLeft {Number} Zoom in at given left coordinate\n   * @param originTop {Number} Zoom in at given top coordinate\n   */\n  zoomBy: function(factor, animate, originLeft, originTop) {\n\n    var self = this;\n\n    self.zoomTo(self.__zoomLevel * factor, animate, originLeft, originTop);\n\n  },\n\n\n  /**\n   * Scrolls to the given position. Respect limitations and snapping automatically.\n   *\n   * @param left {Number} Horizontal scroll position, keeps current if value is <code>null</code>\n   * @param top {Number} Vertical scroll position, keeps current if value is <code>null</code>\n   * @param animate {Boolean} Whether the scrolling should happen using an animation\n   * @param zoom {Number} Zoom level to go to\n   */\n  scrollTo: function(left, top, animate, zoom, wasResize) {\n    var self = this;\n\n    // Stop deceleration\n    if (self.__isDecelerating) {\n      zyngaCore.effect.Animate.stop(self.__isDecelerating);\n      self.__isDecelerating = false;\n    }\n\n    // Correct coordinates based on new zoom level\n    if (zoom != null && zoom !== self.__zoomLevel) {\n\n      if (!self.options.zooming) {\n        throw new Error(\"Zooming is not enabled!\");\n      }\n\n      left *= zoom;\n      top *= zoom;\n\n      // Recompute maximum values while temporary tweaking maximum scroll ranges\n      self.__computeScrollMax(zoom);\n\n    } else {\n\n      // Keep zoom when not defined\n      zoom = self.__zoomLevel;\n\n    }\n\n    if (!self.options.scrollingX) {\n\n      left = self.__scrollLeft;\n\n    } else {\n\n      if (self.options.paging) {\n        left = Math.round(left / self.__clientWidth) * self.__clientWidth;\n      } else if (self.options.snapping) {\n        left = Math.round(left / self.__snapWidth) * self.__snapWidth;\n      }\n\n    }\n\n    if (!self.options.scrollingY) {\n\n      top = self.__scrollTop;\n\n    } else {\n\n      if (self.options.paging) {\n        top = Math.round(top / self.__clientHeight) * self.__clientHeight;\n      } else if (self.options.snapping) {\n        top = Math.round(top / self.__snapHeight) * self.__snapHeight;\n      }\n\n    }\n\n    // Limit for allowed ranges\n    left = Math.max(Math.min(self.__maxScrollLeft, left), 0);\n    top = Math.max(Math.min(self.__maxScrollTop, top), 0);\n\n    // Don't animate when no change detected, still call publish to make sure\n    // that rendered position is really in-sync with internal data\n    if (left === self.__scrollLeft && top === self.__scrollTop) {\n      animate = false;\n    }\n\n    // Publish new values\n    self.__publish(left, top, zoom, animate, wasResize);\n\n  },\n\n\n  /**\n   * Scroll by the given offset\n   *\n   * @param left {Number} Scroll x-axis by given offset\n   * @param top {Number} Scroll y-axis by given offset\n   * @param animate {Boolean} Whether to animate the given change\n   */\n  scrollBy: function(left, top, animate) {\n\n    var self = this;\n\n    var startLeft = self.__isAnimating ? self.__scheduledLeft : self.__scrollLeft;\n    var startTop = self.__isAnimating ? self.__scheduledTop : self.__scrollTop;\n\n    self.scrollTo(startLeft + (left || 0), startTop + (top || 0), animate);\n\n  },\n\n\n\n  /*\n  ---------------------------------------------------------------------------\n    EVENT CALLBACKS\n  ---------------------------------------------------------------------------\n  */\n\n  /**\n   * Mouse wheel handler for zooming support\n   */\n  doMouseZoom: function(wheelDelta, timeStamp, pageX, pageY) {\n\n    var self = this;\n    var change = wheelDelta > 0 ? 0.97 : 1.03;\n\n    return self.zoomTo(self.__zoomLevel * change, false, pageX - self.__clientLeft, pageY - self.__clientTop);\n\n  },\n\n  /**\n   * Touch start handler for scrolling support\n   */\n  doTouchStart: function(touches, timeStamp) {\n    this.hintResize();\n\n    if (timeStamp instanceof Date) {\n      timeStamp = timeStamp.valueOf();\n    }\n    if (typeof timeStamp !== \"number\") {\n      timeStamp = Date.now();\n    }\n\n    var self = this;\n\n    // Reset interruptedAnimation flag\n    self.__interruptedAnimation = true;\n\n    // Stop deceleration\n    if (self.__isDecelerating) {\n      zyngaCore.effect.Animate.stop(self.__isDecelerating);\n      self.__isDecelerating = false;\n      self.__interruptedAnimation = true;\n    }\n\n    // Stop animation\n    if (self.__isAnimating) {\n      zyngaCore.effect.Animate.stop(self.__isAnimating);\n      self.__isAnimating = false;\n      self.__interruptedAnimation = true;\n    }\n\n    // Use center point when dealing with two fingers\n    var currentTouchLeft, currentTouchTop;\n    var isSingleTouch = touches.length === 1;\n    if (isSingleTouch) {\n      currentTouchLeft = touches[0].pageX;\n      currentTouchTop = touches[0].pageY;\n    } else {\n      currentTouchLeft = Math.abs(touches[0].pageX + touches[1].pageX) / 2;\n      currentTouchTop = Math.abs(touches[0].pageY + touches[1].pageY) / 2;\n    }\n\n    // Store initial positions\n    self.__initialTouchLeft = currentTouchLeft;\n    self.__initialTouchTop = currentTouchTop;\n\n    // Store initial touchList for scale calculation\n    self.__initialTouches = touches;\n\n    // Store current zoom level\n    self.__zoomLevelStart = self.__zoomLevel;\n\n    // Store initial touch positions\n    self.__lastTouchLeft = currentTouchLeft;\n    self.__lastTouchTop = currentTouchTop;\n\n    // Store initial move time stamp\n    self.__lastTouchMove = timeStamp;\n\n    // Reset initial scale\n    self.__lastScale = 1;\n\n    // Reset locking flags\n    self.__enableScrollX = !isSingleTouch && self.options.scrollingX;\n    self.__enableScrollY = !isSingleTouch && self.options.scrollingY;\n\n    // Reset tracking flag\n    self.__isTracking = true;\n\n    // Reset deceleration complete flag\n    self.__didDecelerationComplete = false;\n\n    // Dragging starts directly with two fingers, otherwise lazy with an offset\n    self.__isDragging = !isSingleTouch;\n\n    // Some features are disabled in multi touch scenarios\n    self.__isSingleTouch = isSingleTouch;\n\n    // Clearing data structure\n    self.__positions = [];\n\n  },\n\n\n  /**\n   * Touch move handler for scrolling support\n   */\n  doTouchMove: function(touches, timeStamp, scale) {\n    if (timeStamp instanceof Date) {\n      timeStamp = timeStamp.valueOf();\n    }\n    if (typeof timeStamp !== \"number\") {\n      timeStamp = Date.now();\n    }\n\n    var self = this;\n\n    // Ignore event when tracking is not enabled (event might be outside of element)\n    if (!self.__isTracking) {\n      return;\n    }\n\n    var currentTouchLeft, currentTouchTop;\n\n    // Compute move based around of center of fingers\n    if (touches.length === 2) {\n      currentTouchLeft = Math.abs(touches[0].pageX + touches[1].pageX) / 2;\n      currentTouchTop = Math.abs(touches[0].pageY + touches[1].pageY) / 2;\n\n      // Calculate scale when not present and only when touches are used\n      if (!scale && self.options.zooming) {\n        scale = self.__getScale(self.__initialTouches, touches);\n      }\n    } else {\n      currentTouchLeft = touches[0].pageX;\n      currentTouchTop = touches[0].pageY;\n    }\n\n    var positions = self.__positions;\n\n    // Are we already is dragging mode?\n    if (self.__isDragging) {\n\n      // Compute move distance\n      var moveX = currentTouchLeft - self.__lastTouchLeft;\n      var moveY = currentTouchTop - self.__lastTouchTop;\n\n      // Read previous scroll position and zooming\n      var scrollLeft = self.__scrollLeft;\n      var scrollTop = self.__scrollTop;\n      var level = self.__zoomLevel;\n\n      // Work with scaling\n      if (scale != null && self.options.zooming) {\n\n        var oldLevel = level;\n\n        // Recompute level based on previous scale and new scale\n        level = level / self.__lastScale * scale;\n\n        // Limit level according to configuration\n        level = Math.max(Math.min(level, self.options.maxZoom), self.options.minZoom);\n\n        // Only do further compution when change happened\n        if (oldLevel !== level) {\n\n          // Compute relative event position to container\n          var currentTouchLeftRel = currentTouchLeft - self.__clientLeft;\n          var currentTouchTopRel = currentTouchTop - self.__clientTop;\n\n          // Recompute left and top coordinates based on new zoom level\n          scrollLeft = ((currentTouchLeftRel + scrollLeft) * level / oldLevel) - currentTouchLeftRel;\n          scrollTop = ((currentTouchTopRel + scrollTop) * level / oldLevel) - currentTouchTopRel;\n\n          // Recompute max scroll values\n          self.__computeScrollMax(level);\n\n        }\n      }\n\n      if (self.__enableScrollX) {\n\n        scrollLeft -= moveX * this.options.speedMultiplier;\n        var maxScrollLeft = self.__maxScrollLeft;\n\n        if (scrollLeft > maxScrollLeft || scrollLeft < 0) {\n\n          // Slow down on the edges\n          if (self.options.bouncing) {\n\n            scrollLeft += (moveX / 2  * this.options.speedMultiplier);\n\n          } else if (scrollLeft > maxScrollLeft) {\n\n            scrollLeft = maxScrollLeft;\n\n          } else {\n\n            scrollLeft = 0;\n\n          }\n        }\n      }\n\n      // Compute new vertical scroll position\n      if (self.__enableScrollY) {\n\n        scrollTop -= moveY * this.options.speedMultiplier;\n        var maxScrollTop = self.__maxScrollTop;\n\n        if (scrollTop > maxScrollTop || scrollTop < 0) {\n\n          // Slow down on the edges\n          if (self.options.bouncing || (self.__refreshHeight && scrollTop < 0)) {\n\n            scrollTop += (moveY / 2 * this.options.speedMultiplier);\n\n            // Support pull-to-refresh (only when only y is scrollable)\n            if (!self.__enableScrollX && self.__refreshHeight != null) {\n\n              if (!self.__refreshActive && scrollTop <= -self.__refreshHeight) {\n\n                self.__refreshActive = true;\n                if (self.__refreshActivate) {\n                  self.__refreshActivate();\n                }\n\n              } else if (self.__refreshActive && scrollTop > -self.__refreshHeight) {\n\n                self.__refreshActive = false;\n                if (self.__refreshDeactivate) {\n                  self.__refreshDeactivate();\n                }\n\n              }\n            }\n\n          } else if (scrollTop > maxScrollTop) {\n\n            scrollTop = maxScrollTop;\n\n          } else {\n\n            scrollTop = 0;\n\n          }\n        }\n      }\n\n      // Keep list from growing infinitely (holding min 10, max 20 measure points)\n      if (positions.length > 60) {\n        positions.splice(0, 30);\n      }\n\n      // Track scroll movement for decleration\n      positions.push(scrollLeft, scrollTop, timeStamp);\n\n      // Sync scroll position\n      self.__publish(scrollLeft, scrollTop, level);\n\n    // Otherwise figure out whether we are switching into dragging mode now.\n    } else {\n\n      var minimumTrackingForScroll = self.options.locking ? 3 : 0;\n      var minimumTrackingForDrag = 5;\n\n      var distanceX = Math.abs(currentTouchLeft - self.__initialTouchLeft);\n      var distanceY = Math.abs(currentTouchTop - self.__initialTouchTop);\n\n      self.__enableScrollX = self.options.scrollingX && distanceX >= minimumTrackingForScroll;\n      self.__enableScrollY = self.options.scrollingY && distanceY >= minimumTrackingForScroll;\n\n      positions.push(self.__scrollLeft, self.__scrollTop, timeStamp);\n\n      self.__isDragging = (self.__enableScrollX || self.__enableScrollY) && (distanceX >= minimumTrackingForDrag || distanceY >= minimumTrackingForDrag);\n      if (self.__isDragging) {\n        self.__interruptedAnimation = false;\n        self.__fadeScrollbars('in');\n      }\n\n    }\n\n    // Update last touch positions and time stamp for next event\n    self.__lastTouchLeft = currentTouchLeft;\n    self.__lastTouchTop = currentTouchTop;\n    self.__lastTouchMove = timeStamp;\n    self.__lastScale = scale;\n\n  },\n\n\n  /**\n   * Touch end handler for scrolling support\n   */\n  doTouchEnd: function(timeStamp) {\n    if (timeStamp instanceof Date) {\n      timeStamp = timeStamp.valueOf();\n    }\n    if (typeof timeStamp !== \"number\") {\n      timeStamp = Date.now();\n    }\n\n    var self = this;\n\n    // Ignore event when tracking is not enabled (no touchstart event on element)\n    // This is required as this listener ('touchmove') sits on the document and not on the element itself.\n    if (!self.__isTracking) {\n      return;\n    }\n\n    // Not touching anymore (when two finger hit the screen there are two touch end events)\n    self.__isTracking = false;\n\n    // Be sure to reset the dragging flag now. Here we also detect whether\n    // the finger has moved fast enough to switch into a deceleration animation.\n    if (self.__isDragging) {\n\n      // Reset dragging flag\n      self.__isDragging = false;\n\n      // Start deceleration\n      // Verify that the last move detected was in some relevant time frame\n      if (self.__isSingleTouch && self.options.animating && (timeStamp - self.__lastTouchMove) <= 100) {\n\n        // Then figure out what the scroll position was about 100ms ago\n        var positions = self.__positions;\n        var endPos = positions.length - 1;\n        var startPos = endPos;\n\n        // Move pointer to position measured 100ms ago\n        for (var i = endPos; i > 0 && positions[i] > (self.__lastTouchMove - 100); i -= 3) {\n          startPos = i;\n        }\n\n        // If start and stop position is identical in a 100ms timeframe,\n        // we cannot compute any useful deceleration.\n        if (startPos !== endPos) {\n\n          // Compute relative movement between these two points\n          var timeOffset = positions[endPos] - positions[startPos];\n          var movedLeft = self.__scrollLeft - positions[startPos - 2];\n          var movedTop = self.__scrollTop - positions[startPos - 1];\n\n          // Based on 50ms compute the movement to apply for each render step\n          self.__decelerationVelocityX = movedLeft / timeOffset * (1000 / 60);\n          self.__decelerationVelocityY = movedTop / timeOffset * (1000 / 60);\n\n          // How much velocity is required to start the deceleration\n          var minVelocityToStartDeceleration = self.options.paging || self.options.snapping ? 4 : 1;\n\n          // Verify that we have enough velocity to start deceleration\n          if (Math.abs(self.__decelerationVelocityX) > minVelocityToStartDeceleration || Math.abs(self.__decelerationVelocityY) > minVelocityToStartDeceleration) {\n\n            // Deactivate pull-to-refresh when decelerating\n            if (!self.__refreshActive) {\n              self.__startDeceleration(timeStamp);\n            }\n          }\n        } else {\n          self.__scrollingComplete();\n        }\n      } else if ((timeStamp - self.__lastTouchMove) > 100) {\n        self.__scrollingComplete();\n      }\n    }\n\n    // If this was a slower move it is per default non decelerated, but this\n    // still means that we want snap back to the bounds which is done here.\n    // This is placed outside the condition above to improve edge case stability\n    // e.g. touchend fired without enabled dragging. This should normally do not\n    // have modified the scroll positions or even showed the scrollbars though.\n    if (!self.__isDecelerating) {\n\n      if (self.__refreshActive && self.__refreshStart) {\n\n        // Use publish instead of scrollTo to allow scrolling to out of boundary position\n        // We don't need to normalize scrollLeft, zoomLevel, etc. here because we only y-scrolling when pull-to-refresh is enabled\n        self.__publish(self.__scrollLeft, -self.__refreshHeight, self.__zoomLevel, true);\n\n        if (self.__refreshStart) {\n          self.__refreshStart();\n        }\n\n      } else {\n\n        if (self.__interruptedAnimation || self.__isDragging) {\n          self.__scrollingComplete();\n        }\n        self.scrollTo(self.__scrollLeft, self.__scrollTop, true, self.__zoomLevel);\n\n        // Directly signalize deactivation (nothing todo on refresh?)\n        if (self.__refreshActive) {\n\n          self.__refreshActive = false;\n          if (self.__refreshDeactivate) {\n            self.__refreshDeactivate();\n          }\n\n        }\n      }\n    }\n\n    // Fully cleanup list\n    self.__positions.length = 0;\n\n  },\n\n\n\n  /*\n  ---------------------------------------------------------------------------\n    PRIVATE API\n  ---------------------------------------------------------------------------\n  */\n\n  /**\n   * Applies the scroll position to the content element\n   *\n   * @param left {Number} Left scroll position\n   * @param top {Number} Top scroll position\n   * @param animate {Boolean} Whether animation should be used to move to the new coordinates\n   */\n  __publish: function(left, top, zoom, animate, wasResize) {\n\n    var self = this;\n\n    // Remember whether we had an animation, then we try to continue based on the current \"drive\" of the animation\n    var wasAnimating = self.__isAnimating;\n    if (wasAnimating) {\n      zyngaCore.effect.Animate.stop(wasAnimating);\n      self.__isAnimating = false;\n    }\n\n    if (animate && self.options.animating) {\n\n      // Keep scheduled positions for scrollBy/zoomBy functionality\n      self.__scheduledLeft = left;\n      self.__scheduledTop = top;\n      self.__scheduledZoom = zoom;\n\n      var oldLeft = self.__scrollLeft;\n      var oldTop = self.__scrollTop;\n      var oldZoom = self.__zoomLevel;\n\n      var diffLeft = left - oldLeft;\n      var diffTop = top - oldTop;\n      var diffZoom = zoom - oldZoom;\n\n      var step = function(percent, now, render) {\n\n        if (render) {\n\n          self.__scrollLeft = oldLeft + (diffLeft * percent);\n          self.__scrollTop = oldTop + (diffTop * percent);\n          self.__zoomLevel = oldZoom + (diffZoom * percent);\n\n          // Push values out\n          if (self.__callback) {\n            self.__callback(self.__scrollLeft, self.__scrollTop, self.__zoomLevel, wasResize);\n          }\n\n        }\n      };\n\n      var verify = function(id) {\n        return self.__isAnimating === id;\n      };\n\n      var completed = function(renderedFramesPerSecond, animationId, wasFinished) {\n        if (animationId === self.__isAnimating) {\n          self.__isAnimating = false;\n        }\n        if (self.__didDecelerationComplete || wasFinished) {\n          self.__scrollingComplete();\n        }\n\n        if (self.options.zooming) {\n          self.__computeScrollMax();\n        }\n      };\n\n      // When continuing based on previous animation we choose an ease-out animation instead of ease-in-out\n      self.__isAnimating = zyngaCore.effect.Animate.start(step, verify, completed, self.options.animationDuration, wasAnimating ? easeOutCubic : easeInOutCubic);\n\n    } else {\n\n      self.__scheduledLeft = self.__scrollLeft = left;\n      self.__scheduledTop = self.__scrollTop = top;\n      self.__scheduledZoom = self.__zoomLevel = zoom;\n\n      // Push values out\n      if (self.__callback) {\n        self.__callback(left, top, zoom, wasResize);\n      }\n\n      // Fix max scroll ranges\n      if (self.options.zooming) {\n        self.__computeScrollMax();\n      }\n    }\n  },\n\n\n  /**\n   * Recomputes scroll minimum values based on client dimensions and content dimensions.\n   */\n  __computeScrollMax: function(zoomLevel) {\n\n    var self = this;\n\n    if (zoomLevel == null) {\n      zoomLevel = self.__zoomLevel;\n    }\n\n    self.__maxScrollLeft = Math.max((self.__contentWidth * zoomLevel) - self.__clientWidth, 0);\n    self.__maxScrollTop = Math.max((self.__contentHeight * zoomLevel) - self.__clientHeight, 0);\n\n    if(!self.__didWaitForSize && !self.__maxScrollLeft && !self.__maxScrollTop) {\n      self.__didWaitForSize = true;\n      self.__waitForSize();\n    }\n  },\n\n\n  /**\n   * If the scroll view isn't sized correctly on start, wait until we have at least some size\n   */\n  __waitForSize: function() {\n\n    var self = this;\n\n    clearTimeout(self.__sizerTimeout);\n\n    var sizer = function() {\n      self.resize();\n\n      if((self.options.scrollingX && !self.__maxScrollLeft) || (self.options.scrollingY && !self.__maxScrollTop)) {\n        //self.__sizerTimeout = setTimeout(sizer, 1000);\n      }\n    };\n\n    sizer();\n    self.__sizerTimeout = setTimeout(sizer, 1000);\n  },\n\n  /*\n  ---------------------------------------------------------------------------\n    ANIMATION (DECELERATION) SUPPORT\n  ---------------------------------------------------------------------------\n  */\n\n  /**\n   * Called when a touch sequence end and the speed of the finger was high enough\n   * to switch into deceleration mode.\n   */\n  __startDeceleration: function(timeStamp) {\n\n    var self = this;\n\n    if (self.options.paging) {\n\n      var scrollLeft = Math.max(Math.min(self.__scrollLeft, self.__maxScrollLeft), 0);\n      var scrollTop = Math.max(Math.min(self.__scrollTop, self.__maxScrollTop), 0);\n      var clientWidth = self.__clientWidth;\n      var clientHeight = self.__clientHeight;\n\n      // We limit deceleration not to the min/max values of the allowed range, but to the size of the visible client area.\n      // Each page should have exactly the size of the client area.\n      self.__minDecelerationScrollLeft = Math.floor(scrollLeft / clientWidth) * clientWidth;\n      self.__minDecelerationScrollTop = Math.floor(scrollTop / clientHeight) * clientHeight;\n      self.__maxDecelerationScrollLeft = Math.ceil(scrollLeft / clientWidth) * clientWidth;\n      self.__maxDecelerationScrollTop = Math.ceil(scrollTop / clientHeight) * clientHeight;\n\n    } else {\n\n      self.__minDecelerationScrollLeft = 0;\n      self.__minDecelerationScrollTop = 0;\n      self.__maxDecelerationScrollLeft = self.__maxScrollLeft;\n      self.__maxDecelerationScrollTop = self.__maxScrollTop;\n\n    }\n\n    // Wrap class method\n    var step = function(percent, now, render) {\n      self.__stepThroughDeceleration(render);\n    };\n\n    // How much velocity is required to keep the deceleration running\n    self.__minVelocityToKeepDecelerating = self.options.snapping ? 4 : 0.1;\n\n    // Detect whether it's still worth to continue animating steps\n    // If we are already slow enough to not being user perceivable anymore, we stop the whole process here.\n    var verify = function() {\n      var shouldContinue = Math.abs(self.__decelerationVelocityX) >= self.__minVelocityToKeepDecelerating ||\n        Math.abs(self.__decelerationVelocityY) >= self.__minVelocityToKeepDecelerating;\n      if (!shouldContinue) {\n        self.__didDecelerationComplete = true;\n\n        //Make sure the scroll values are within the boundaries after a bounce,\n        //not below 0 or above maximum\n        if (self.options.bouncing) {\n          self.scrollTo(\n            Math.min( Math.max(self.__scrollLeft, 0), self.__maxScrollLeft ),\n            Math.min( Math.max(self.__scrollTop, 0), self.__maxScrollTop ),\n            false\n          );\n        }\n      }\n      return shouldContinue;\n    };\n\n    var completed = function(renderedFramesPerSecond, animationId, wasFinished) {\n      self.__isDecelerating = false;\n      if (self.__didDecelerationComplete) {\n        self.__scrollingComplete();\n      }\n\n      // Animate to grid when snapping is active, otherwise just fix out-of-boundary positions\n      if(self.options.paging) {\n        self.scrollTo(self.__scrollLeft, self.__scrollTop, self.options.snapping);\n      }\n    };\n\n    // Start animation and switch on flag\n    self.__isDecelerating = zyngaCore.effect.Animate.start(step, verify, completed);\n\n  },\n\n\n  /**\n   * Called on every step of the animation\n   *\n   * @param inMemory {Boolean} Whether to not render the current step, but keep it in memory only. Used internally only!\n   */\n  __stepThroughDeceleration: function(render) {\n\n    var self = this;\n\n\n    //\n    // COMPUTE NEXT SCROLL POSITION\n    //\n\n    // Add deceleration to scroll position\n    var scrollLeft = self.__scrollLeft + self.__decelerationVelocityX;// * self.options.deceleration);\n    var scrollTop = self.__scrollTop + self.__decelerationVelocityY;// * self.options.deceleration);\n\n\n    //\n    // HARD LIMIT SCROLL POSITION FOR NON BOUNCING MODE\n    //\n\n    if (!self.options.bouncing) {\n\n      var scrollLeftFixed = Math.max(Math.min(self.__maxDecelerationScrollLeft, scrollLeft), self.__minDecelerationScrollLeft);\n      if (scrollLeftFixed !== scrollLeft) {\n        scrollLeft = scrollLeftFixed;\n        self.__decelerationVelocityX = 0;\n      }\n\n      var scrollTopFixed = Math.max(Math.min(self.__maxDecelerationScrollTop, scrollTop), self.__minDecelerationScrollTop);\n      if (scrollTopFixed !== scrollTop) {\n        scrollTop = scrollTopFixed;\n        self.__decelerationVelocityY = 0;\n      }\n\n    }\n\n\n    //\n    // UPDATE SCROLL POSITION\n    //\n\n    if (render) {\n\n      self.__publish(scrollLeft, scrollTop, self.__zoomLevel);\n\n    } else {\n\n      self.__scrollLeft = scrollLeft;\n      self.__scrollTop = scrollTop;\n\n    }\n\n\n    //\n    // SLOW DOWN\n    //\n\n    // Slow down velocity on every iteration\n    if (!self.options.paging) {\n\n      // This is the factor applied to every iteration of the animation\n      // to slow down the process. This should emulate natural behavior where\n      // objects slow down when the initiator of the movement is removed\n      var frictionFactor = self.options.deceleration;\n\n      self.__decelerationVelocityX *= frictionFactor;\n      self.__decelerationVelocityY *= frictionFactor;\n\n    }\n\n\n    //\n    // BOUNCING SUPPORT\n    //\n\n    if (self.options.bouncing) {\n\n      var scrollOutsideX = 0;\n      var scrollOutsideY = 0;\n\n      // This configures the amount of change applied to deceleration/acceleration when reaching boundaries\n      var penetrationDeceleration = self.options.penetrationDeceleration;\n      var penetrationAcceleration = self.options.penetrationAcceleration;\n\n      // Check limits\n      if (scrollLeft < self.__minDecelerationScrollLeft) {\n        scrollOutsideX = self.__minDecelerationScrollLeft - scrollLeft;\n      } else if (scrollLeft > self.__maxDecelerationScrollLeft) {\n        scrollOutsideX = self.__maxDecelerationScrollLeft - scrollLeft;\n      }\n\n      if (scrollTop < self.__minDecelerationScrollTop) {\n        scrollOutsideY = self.__minDecelerationScrollTop - scrollTop;\n      } else if (scrollTop > self.__maxDecelerationScrollTop) {\n        scrollOutsideY = self.__maxDecelerationScrollTop - scrollTop;\n      }\n\n      // Slow down until slow enough, then flip back to snap position\n      if (scrollOutsideX !== 0) {\n        var isHeadingOutwardsX = scrollOutsideX * self.__decelerationVelocityX <= self.__minDecelerationScrollLeft;\n        if (isHeadingOutwardsX) {\n          self.__decelerationVelocityX += scrollOutsideX * penetrationDeceleration;\n        }\n        var isStoppedX = Math.abs(self.__decelerationVelocityX) <= self.__minVelocityToKeepDecelerating;\n        //If we're not heading outwards, or if the above statement got us below minDeceleration, go back towards bounds\n        if (!isHeadingOutwardsX || isStoppedX) {\n          self.__decelerationVelocityX = scrollOutsideX * penetrationAcceleration;\n        }\n      }\n\n      if (scrollOutsideY !== 0) {\n        var isHeadingOutwardsY = scrollOutsideY * self.__decelerationVelocityY <= self.__minDecelerationScrollTop;\n        if (isHeadingOutwardsY) {\n          self.__decelerationVelocityY += scrollOutsideY * penetrationDeceleration;\n        }\n        var isStoppedY = Math.abs(self.__decelerationVelocityY) <= self.__minVelocityToKeepDecelerating;\n        //If we're not heading outwards, or if the above statement got us below minDeceleration, go back towards bounds\n        if (!isHeadingOutwardsY || isStoppedY) {\n          self.__decelerationVelocityY = scrollOutsideY * penetrationAcceleration;\n        }\n      }\n    }\n  },\n\n\n  /**\n   * calculate the distance between two touches\n   * @param   {Touch}     touch1\n   * @param   {Touch}     touch2\n   * @returns {Number}    distance\n   */\n  __getDistance: function getDistance(touch1, touch2) {\n    var x = touch2.pageX - touch1.pageX,\n    y = touch2.pageY - touch1.pageY;\n    return Math.sqrt((x*x) + (y*y));\n  },\n\n\n  /**\n   * calculate the scale factor between two touchLists (fingers)\n   * no scale is 1, and goes down to 0 when pinched together, and bigger when pinched out\n   * @param   {Array}     start\n   * @param   {Array}     end\n   * @returns {Number}    scale\n   */\n  __getScale: function getScale(start, end) {\n\n    var self = this;\n\n    // need two fingers...\n    if(start.length >= 2 && end.length >= 2) {\n      return self.__getDistance(end[0], end[1]) /\n        self.__getDistance(start[0], start[1]);\n    }\n    return 1;\n  }\n});\n\nionic.scroll = {\n  isScrolling: false,\n  lastTop: 0\n};\n\n})(ionic);\n\n(function(ionic) {\n'use strict';\n\n  ionic.views.HeaderBar = ionic.views.View.inherit({\n    initialize: function(opts) {\n      this.el = opts.el;\n\n      ionic.extend(this, {\n        alignTitle: 'center'\n      }, opts);\n\n      this.align();\n    },\n\n    align: function(align) {\n\n      align || (align = this.alignTitle);\n\n      // Find the titleEl element\n      var titleEl = this.el.querySelector('.title');\n      if(!titleEl) {\n        return;\n      }\n\n      var self = this;\n      //We have to rAF here so all of the elements have time to initialize\n      ionic.requestAnimationFrame(function() {\n        var i, c, childSize;\n        var childNodes = self.el.childNodes;\n        var leftWidth = 0;\n        var rightWidth = 0;\n        var isCountingRightWidth = false;\n\n        // Compute how wide the left children are\n        // Skip all titles (there may still be two titles, one leaving the dom)\n        // Once we encounter a titleEl, realize we are now counting the right-buttons, not left\n        for(i = 0; i < childNodes.length; i++) {\n          c = childNodes[i];\n          if (c.tagName && c.tagName.toLowerCase() == 'h1') {\n            isCountingRightWidth = true;\n            continue;\n          }\n\n          childSize = null;\n          if(c.nodeType == 3) {\n            var bounds = ionic.DomUtil.getTextBounds(c);\n            if(bounds) {\n              childSize = bounds.width;\n            }\n          } else if(c.nodeType == 1) {\n            childSize = c.offsetWidth;\n          }\n          if(childSize) {\n            if (isCountingRightWidth) {\n              rightWidth += childSize;\n            } else {\n              leftWidth += childSize;\n            }\n          }\n        }\n\n        var margin = Math.max(leftWidth, rightWidth) + 10;\n\n        //Reset left and right before setting again\n        titleEl.style.left = titleEl.style.right = '';\n\n        // Size and align the header titleEl based on the sizes of the left and\n        // right children, and the desired alignment mode\n        if(align == 'center') {\n          if(margin > 10) {\n            titleEl.style.left = margin + 'px';\n            titleEl.style.right = margin + 'px';\n          }\n          if(titleEl.offsetWidth < titleEl.scrollWidth) {\n            if(rightWidth > 0) {\n              titleEl.style.right = (rightWidth + 5) + 'px';\n            }\n          }\n        } else if(align == 'left') {\n          titleEl.classList.add('title-left');\n          if(leftWidth > 0) {\n            titleEl.style.left = (leftWidth + 15) + 'px';\n          }\n        } else if(align == 'right') {\n          titleEl.classList.add('title-right');\n          if(rightWidth > 0) {\n            titleEl.style.right = (rightWidth + 15) + 'px';\n          }\n        }\n      });\n    }\n  });\n\n})(ionic);\n\n(function(ionic) {\n'use strict';\n\n  var ITEM_CLASS = 'item';\n  var ITEM_CONTENT_CLASS = 'item-content';\n  var ITEM_SLIDING_CLASS = 'item-sliding';\n  var ITEM_OPTIONS_CLASS = 'item-options';\n  var ITEM_PLACEHOLDER_CLASS = 'item-placeholder';\n  var ITEM_REORDERING_CLASS = 'item-reordering';\n  var ITEM_REORDER_BTN_CLASS = 'item-reorder';\n\n  var DragOp = function() {};\n  DragOp.prototype = {\n    start: function(e) {\n    },\n    drag: function(e) {\n    },\n    end: function(e) {\n    },\n    isSameItem: function(item) {\n      return false;\n    }\n  };\n\n  var SlideDrag = function(opts) {\n    this.dragThresholdX = opts.dragThresholdX || 10;\n    this.el = opts.el;\n    this.canSwipe = opts.canSwipe;\n  };\n\n  SlideDrag.prototype = new DragOp();\n\n  SlideDrag.prototype.start = function(e) {\n    var content, buttons, offsetX, buttonsWidth;\n\n    if (!this.canSwipe()) {\n      return;\n    }\n\n    if(e.target.classList.contains(ITEM_CONTENT_CLASS)) {\n      content = e.target;\n    } else if(e.target.classList.contains(ITEM_CLASS)) {\n      content = e.target.querySelector('.' + ITEM_CONTENT_CLASS);\n    } else {\n      content = ionic.DomUtil.getParentWithClass(e.target, ITEM_CONTENT_CLASS);\n    }\n\n    // If we don't have a content area as one of our children (or ourselves), skip\n    if(!content) {\n      return;\n    }\n\n    // Make sure we aren't animating as we slide\n    content.classList.remove(ITEM_SLIDING_CLASS);\n\n    // Grab the starting X point for the item (for example, so we can tell whether it is open or closed to start)\n    offsetX = parseFloat(content.style[ionic.CSS.TRANSFORM].replace('translate3d(', '').split(',')[0]) || 0;\n\n    // Grab the buttons\n    buttons = content.parentNode.querySelector('.' + ITEM_OPTIONS_CLASS);\n    if(!buttons) {\n      return;\n    }\n    buttons.classList.remove('invisible');\n\n    buttonsWidth = buttons.offsetWidth;\n\n    this._currentDrag = {\n      buttons: buttons,\n      buttonsWidth: buttonsWidth,\n      content: content,\n      startOffsetX: offsetX\n    };\n  };\n\n  /**\n   * Check if this is the same item that was previously dragged.\n   */\n  SlideDrag.prototype.isSameItem = function(op) {\n    if(op._lastDrag && this._currentDrag) {\n      return this._currentDrag.content == op._lastDrag.content;\n    }\n    return false;\n  };\n\n  SlideDrag.prototype.clean = function(e) {\n    var lastDrag = this._lastDrag;\n\n    if(!lastDrag) return;\n\n    lastDrag.content.style[ionic.CSS.TRANSITION] = '';\n    lastDrag.content.style[ionic.CSS.TRANSFORM] = '';\n    ionic.requestAnimationFrame(function() {\n      setTimeout(function() {\n        lastDrag.buttons && lastDrag.buttons.classList.add('invisible');\n      }, 250);\n    });\n  };\n\n  SlideDrag.prototype.drag = ionic.animationFrameThrottle(function(e) {\n    var buttonsWidth;\n\n    // We really aren't dragging\n    if(!this._currentDrag) {\n      return;\n    }\n\n    // Check if we should start dragging. Check if we've dragged past the threshold,\n    // or we are starting from the open state.\n    if(!this._isDragging &&\n        ((Math.abs(e.gesture.deltaX) > this.dragThresholdX) ||\n        (Math.abs(this._currentDrag.startOffsetX) > 0)))\n    {\n      this._isDragging = true;\n    }\n\n    if(this._isDragging) {\n      buttonsWidth = this._currentDrag.buttonsWidth;\n\n      // Grab the new X point, capping it at zero\n      var newX = Math.min(0, this._currentDrag.startOffsetX + e.gesture.deltaX);\n\n      // If the new X position is past the buttons, we need to slow down the drag (rubber band style)\n      if(newX < -buttonsWidth) {\n        // Calculate the new X position, capped at the top of the buttons\n        newX = Math.min(-buttonsWidth, -buttonsWidth + (((e.gesture.deltaX + buttonsWidth) * 0.4)));\n      }\n\n      this._currentDrag.content.style[ionic.CSS.TRANSFORM] = 'translate3d(' + newX + 'px, 0, 0)';\n      this._currentDrag.content.style[ionic.CSS.TRANSITION] = 'none';\n    }\n  });\n\n  SlideDrag.prototype.end = function(e, doneCallback) {\n    var _this = this;\n\n    // There is no drag, just end immediately\n    if(!this._currentDrag) {\n      doneCallback && doneCallback();\n      return;\n    }\n\n    // If we are currently dragging, we want to snap back into place\n    // The final resting point X will be the width of the exposed buttons\n    var restingPoint = -this._currentDrag.buttonsWidth;\n\n    // Check if the drag didn't clear the buttons mid-point\n    // and we aren't moving fast enough to swipe open\n    if(e.gesture.deltaX > -(this._currentDrag.buttonsWidth/2)) {\n\n      // If we are going left but too slow, or going right, go back to resting\n      if(e.gesture.direction == \"left\" && Math.abs(e.gesture.velocityX) < 0.3) {\n        restingPoint = 0;\n      } else if(e.gesture.direction == \"right\") {\n        restingPoint = 0;\n      }\n\n    }\n\n    ionic.requestAnimationFrame(function() {\n      if(restingPoint === 0) {\n        _this._currentDrag.content.style[ionic.CSS.TRANSFORM] = '';\n        var buttons = _this._currentDrag.buttons;\n        setTimeout(function() {\n          buttons && buttons.classList.add('invisible');\n        }, 250);\n      } else {\n        _this._currentDrag.content.style[ionic.CSS.TRANSFORM] = 'translate3d(' + restingPoint + 'px, 0, 0)';\n      }\n      _this._currentDrag.content.style[ionic.CSS.TRANSITION] = '';\n\n\n      // Kill the current drag\n      _this._lastDrag = _this._currentDrag;\n      _this._currentDrag = null;\n\n      // We are done, notify caller\n      doneCallback && doneCallback();\n    });\n  };\n\n  var ReorderDrag = function(opts) {\n    this.dragThresholdY = opts.dragThresholdY || 0;\n    this.onReorder = opts.onReorder;\n    this.listEl = opts.listEl;\n    this.el = opts.el;\n    this.scrollEl = opts.scrollEl;\n    this.scrollView = opts.scrollView;\n    // Get the True Top of the list el http://www.quirksmode.org/js/findpos.html\n    this.listElTrueTop = 0;\n    if (this.listEl.offsetParent) {\n      var obj = this.listEl;\n      do {\n        this.listElTrueTop += obj.offsetTop;\n        obj = obj.offsetParent;\n      } while (obj);\n    }\n  };\n\n  ReorderDrag.prototype = new DragOp();\n\n  ReorderDrag.prototype._moveElement = function(e) {\n    var y = e.gesture.center.pageY +\n      this.scrollView.getValues().top -\n      (this._currentDrag.elementHeight / 2) -\n      this.listElTrueTop;\n    this.el.style[ionic.CSS.TRANSFORM] = 'translate3d(0, '+y+'px, 0)';\n  };\n\n  ReorderDrag.prototype.start = function(e) {\n    var content;\n\n    var startIndex = ionic.DomUtil.getChildIndex(this.el, this.el.nodeName.toLowerCase());\n    var elementHeight = this.el.scrollHeight;\n    var placeholder = this.el.cloneNode(true);\n\n    placeholder.classList.add(ITEM_PLACEHOLDER_CLASS);\n\n    this.el.parentNode.insertBefore(placeholder, this.el);\n    this.el.classList.add(ITEM_REORDERING_CLASS);\n\n    this._currentDrag = {\n      elementHeight: elementHeight,\n      startIndex: startIndex,\n      placeholder: placeholder,\n      scrollHeight: scroll,\n      list: placeholder.parentNode\n    };\n\n    this._moveElement(e);\n  };\n\n  ReorderDrag.prototype.drag = ionic.animationFrameThrottle(function(e) {\n    // We really aren't dragging\n    var self = this;\n    if(!this._currentDrag) {\n      return;\n    }\n\n    var scrollY = 0;\n    var pageY = e.gesture.center.pageY;\n    var offset = this.listElTrueTop;\n\n    //If we have a scrollView, check scroll boundaries for dragged element and scroll if necessary\n    if (this.scrollView) {\n\n      var container = this.scrollView.__container;\n      scrollY = this.scrollView.getValues().top;\n\n      var containerTop = container.offsetTop;\n      var pixelsPastTop = containerTop - pageY + this._currentDrag.elementHeight/2;\n      var pixelsPastBottom = pageY + this._currentDrag.elementHeight/2 - containerTop - container.offsetHeight;\n\n      if (e.gesture.deltaY < 0 && pixelsPastTop > 0 && scrollY > 0) {\n        this.scrollView.scrollBy(null, -pixelsPastTop);\n        //Trigger another drag so the scrolling keeps going\n        ionic.requestAnimationFrame(function() {\n          self.drag(e);\n        });\n      }\n      if (e.gesture.deltaY > 0 && pixelsPastBottom > 0) {\n        if (scrollY < this.scrollView.getScrollMax().top) {\n          this.scrollView.scrollBy(null, pixelsPastBottom);\n          //Trigger another drag so the scrolling keeps going\n          ionic.requestAnimationFrame(function() {\n            self.drag(e);\n          });\n        }\n      }\n    }\n\n    // Check if we should start dragging. Check if we've dragged past the threshold,\n    // or we are starting from the open state.\n    if(!this._isDragging && Math.abs(e.gesture.deltaY) > this.dragThresholdY) {\n      this._isDragging = true;\n    }\n\n    if(this._isDragging) {\n      this._moveElement(e);\n\n      this._currentDrag.currentY = scrollY + pageY - offset;\n\n      // this._reorderItems();\n    }\n  });\n\n  // When an item is dragged, we need to reorder any items for sorting purposes\n  ReorderDrag.prototype._getReorderIndex = function() {\n    var self = this;\n    var placeholder = this._currentDrag.placeholder;\n    var siblings = Array.prototype.slice.call(this._currentDrag.placeholder.parentNode.children)\n      .filter(function(el) {\n        return el.nodeName === self.el.nodeName && el !== self.el;\n      });\n\n    var dragOffsetTop = this._currentDrag.currentY;\n    var el;\n    for (var i = 0, len = siblings.length; i < len; i++) {\n      el = siblings[i];\n      if (i === len - 1) {\n        if (dragOffsetTop > el.offsetTop) {\n          return i;\n        }\n      } else if (i === 0) {\n        if (dragOffsetTop < el.offsetTop + el.offsetHeight) {\n          return i;\n        }\n      } else if (dragOffsetTop > el.offsetTop - el.offsetHeight / 2 &&\n                 dragOffsetTop < el.offsetTop + el.offsetHeight * 1.5) {\n        return i;\n      }\n    }\n    return this._currentDrag.startIndex;\n  };\n\n  ReorderDrag.prototype.end = function(e, doneCallback) {\n    if(!this._currentDrag) {\n      doneCallback && doneCallback();\n      return;\n    }\n\n    var placeholder = this._currentDrag.placeholder;\n    var finalIndex = this._getReorderIndex();\n\n    // Reposition the element\n    this.el.classList.remove(ITEM_REORDERING_CLASS);\n    this.el.style[ionic.CSS.TRANSFORM] = '';\n\n    placeholder.parentNode.insertBefore(this.el, placeholder);\n    placeholder.parentNode.removeChild(placeholder);\n\n    this.onReorder && this.onReorder(this.el, this._currentDrag.startIndex, finalIndex);\n\n    this._currentDrag = null;\n    doneCallback && doneCallback();\n  };\n\n\n\n  /**\n   * The ListView handles a list of items. It will process drag animations, edit mode,\n   * and other operations that are common on mobile lists or table views.\n   */\n  ionic.views.ListView = ionic.views.View.inherit({\n    initialize: function(opts) {\n      var _this = this;\n\n      opts = ionic.extend({\n        onReorder: function(el, oldIndex, newIndex) {},\n        virtualRemoveThreshold: -200,\n        virtualAddThreshold: 200,\n        canSwipe: function() {\n          return true;\n        }\n      }, opts);\n\n      ionic.extend(this, opts);\n\n      if(!this.itemHeight && this.listEl) {\n        this.itemHeight = this.listEl.children[0] && parseInt(this.listEl.children[0].style.height, 10);\n      }\n\n      //ionic.views.ListView.__super__.initialize.call(this, opts);\n\n      this.onRefresh = opts.onRefresh || function() {};\n      this.onRefreshOpening = opts.onRefreshOpening || function() {};\n      this.onRefreshHolding = opts.onRefreshHolding || function() {};\n\n      window.ionic.onGesture('release', function(e) {\n        _this._handleEndDrag(e);\n      }, this.el);\n\n      window.ionic.onGesture('drag', function(e) {\n        _this._handleDrag(e);\n      }, this.el);\n      // Start the drag states\n      this._initDrag();\n    },\n    /**\n     * Called to tell the list to stop refreshing. This is useful\n     * if you are refreshing the list and are done with refreshing.\n     */\n    stopRefreshing: function() {\n      var refresher = this.el.querySelector('.list-refresher');\n      refresher.style.height = '0px';\n    },\n\n    /**\n     * If we scrolled and have virtual mode enabled, compute the window\n     * of active elements in order to figure out the viewport to render.\n     */\n    didScroll: function(e) {\n      if(this.isVirtual) {\n        var itemHeight = this.itemHeight;\n\n        // TODO: This would be inaccurate if we are windowed\n        var totalItems = this.listEl.children.length;\n\n        // Grab the total height of the list\n        var scrollHeight = e.target.scrollHeight;\n\n        // Get the viewport height\n        var viewportHeight = this.el.parentNode.offsetHeight;\n\n        // scrollTop is the current scroll position\n        var scrollTop = e.scrollTop;\n\n        // High water is the pixel position of the first element to include (everything before\n        // that will be removed)\n        var highWater = Math.max(0, e.scrollTop + this.virtualRemoveThreshold);\n\n        // Low water is the pixel position of the last element to include (everything after\n        // that will be removed)\n        var lowWater = Math.min(scrollHeight, Math.abs(e.scrollTop) + viewportHeight + this.virtualAddThreshold);\n\n        // Compute how many items per viewport size can show\n        var itemsPerViewport = Math.floor((lowWater - highWater) / itemHeight);\n\n        // Get the first and last elements in the list based on how many can fit\n        // between the pixel range of lowWater and highWater\n        var first = parseInt(Math.abs(highWater / itemHeight), 10);\n        var last = parseInt(Math.abs(lowWater / itemHeight), 10);\n\n        // Get the items we need to remove\n        this._virtualItemsToRemove = Array.prototype.slice.call(this.listEl.children, 0, first);\n\n        // Grab the nodes we will be showing\n        var nodes = Array.prototype.slice.call(this.listEl.children, first, first + itemsPerViewport);\n\n        this.renderViewport && this.renderViewport(highWater, lowWater, first, last);\n      }\n    },\n\n    didStopScrolling: function(e) {\n      if(this.isVirtual) {\n        for(var i = 0; i < this._virtualItemsToRemove.length; i++) {\n          var el = this._virtualItemsToRemove[i];\n          //el.parentNode.removeChild(el);\n          this.didHideItem && this.didHideItem(i);\n        }\n        // Once scrolling stops, check if we need to remove old items\n\n      }\n    },\n\n    /**\n     * Clear any active drag effects on the list.\n     */\n    clearDragEffects: function() {\n      if(this._lastDragOp) {\n        this._lastDragOp.clean && this._lastDragOp.clean();\n        this._lastDragOp = null;\n      }\n    },\n\n    _initDrag: function() {\n      //ionic.views.ListView.__super__._initDrag.call(this);\n\n      // Store the last one\n      this._lastDragOp = this._dragOp;\n\n      this._dragOp = null;\n    },\n\n    // Return the list item from the given target\n    _getItem: function(target) {\n      while(target) {\n        if(target.classList && target.classList.contains(ITEM_CLASS)) {\n          return target;\n        }\n        target = target.parentNode;\n      }\n      return null;\n    },\n\n\n    _startDrag: function(e) {\n      var _this = this;\n\n      var didStart = false;\n\n      this._isDragging = false;\n\n      var lastDragOp = this._lastDragOp;\n      var item;\n\n      // Check if this is a reorder drag\n      if(ionic.DomUtil.getParentOrSelfWithClass(e.target, ITEM_REORDER_BTN_CLASS) && (e.gesture.direction == 'up' || e.gesture.direction == 'down')) {\n        item = this._getItem(e.target);\n\n        if(item) {\n          this._dragOp = new ReorderDrag({\n            listEl: this.el,\n            el: item,\n            scrollEl: this.scrollEl,\n            scrollView: this.scrollView,\n            onReorder: function(el, start, end) {\n              _this.onReorder && _this.onReorder(el, start, end);\n            }\n          });\n          this._dragOp.start(e);\n          e.preventDefault();\n        }\n      }\n\n      // Or check if this is a swipe to the side drag\n      else if(!this._didDragUpOrDown && (e.gesture.direction == 'left' || e.gesture.direction == 'right') && Math.abs(e.gesture.deltaX) > 5) {\n\n        // Make sure this is an item with buttons\n        item = this._getItem(e.target);\n        if(item && item.querySelector('.item-options')) {\n          this._dragOp = new SlideDrag({ el: this.el, canSwipe: this.canSwipe });\n          this._dragOp.start(e);\n          e.preventDefault();\n        }\n      }\n\n      // If we had a last drag operation and this is a new one on a different item, clean that last one\n      if(lastDragOp && this._dragOp && !this._dragOp.isSameItem(lastDragOp) && e.defaultPrevented) {\n        lastDragOp.clean && lastDragOp.clean();\n      }\n    },\n\n\n    _handleEndDrag: function(e) {\n      var _this = this;\n\n      this._didDragUpOrDown = false;\n\n      if(!this._dragOp) {\n        //ionic.views.ListView.__super__._handleEndDrag.call(this, e);\n        return;\n      }\n\n      this._dragOp.end(e, function() {\n        _this._initDrag();\n      });\n    },\n\n    /**\n     * Process the drag event to move the item to the left or right.\n     */\n    _handleDrag: function(e) {\n      var _this = this, content, buttons;\n\n      if(Math.abs(e.gesture.deltaY) > 5) {\n        this._didDragUpOrDown = true;\n      }\n\n      // If we get a drag event, make sure we aren't in another drag, then check if we should\n      // start one\n      if(!this.isDragging && !this._dragOp) {\n        this._startDrag(e);\n      }\n\n      // No drag still, pass it up\n      if(!this._dragOp) {\n        //ionic.views.ListView.__super__._handleDrag.call(this, e);\n        return;\n      }\n\n      e.gesture.srcEvent.preventDefault();\n      this._dragOp.drag(e);\n    }\n\n  });\n\n})(ionic);\n\n(function(ionic) {\n'use strict';\n\n  ionic.views.Modal = ionic.views.View.inherit({\n    initialize: function(opts) {\n      opts = ionic.extend({\n        focusFirstInput: false,\n        unfocusOnHide: true,\n        focusFirstDelay: 600,\n        backdropClickToClose: true,\n        hardwareBackButtonClose: true,\n      }, opts);\n\n      ionic.extend(this, opts);\n\n      this.el = opts.el;\n    },\n    show: function() {\n      var self = this;\n\n      if(self.focusFirstInput) {\n        // Let any animations run first\n        window.setTimeout(function() {\n          var input = self.el.querySelector('input, textarea');\n          input && input.focus && input.focus();\n        }, self.focusFirstDelay);\n      }\n    },\n    hide: function() {\n      // Unfocus all elements\n      if(this.unfocusOnHide) {\n        var inputs = this.el.querySelectorAll('input, textarea');\n        // Let any animations run first\n        window.setTimeout(function() {\n          for(var i = 0; i < inputs.length; i++) {\n            inputs[i].blur && inputs[i].blur();\n          }\n        });\n      }\n    }\n  });\n\n})(ionic);\n\n(function(ionic) {\n'use strict';\n\n  /**\n   * The side menu view handles one of the side menu's in a Side Menu Controller\n   * configuration.\n   * It takes a DOM reference to that side menu element.\n   */\n  ionic.views.SideMenu = ionic.views.View.inherit({\n    initialize: function(opts) {\n      this.el = opts.el;\n      this.isEnabled = (typeof opts.isEnabled === 'undefined') ? true : opts.isEnabled;\n      this.setWidth(opts.width);\n    },\n\n    getFullWidth: function() {\n      return this.width;\n    },\n    setWidth: function(width) {\n      this.width = width;\n      this.el.style.width = width + 'px';\n    },\n    setIsEnabled: function(isEnabled) {\n      this.isEnabled = isEnabled;\n    },\n    bringUp: function() {\n      if(this.el.style.zIndex !== '0') {\n        this.el.style.zIndex = '0';\n      }\n    },\n    pushDown: function() {\n      if(this.el.style.zIndex !== '-1') {\n        this.el.style.zIndex = '-1';\n      }\n    }\n  });\n\n  ionic.views.SideMenuContent = ionic.views.View.inherit({\n    initialize: function(opts) {\n      var _this = this;\n\n      ionic.extend(this, {\n        animationClass: 'menu-animated',\n        onDrag: function(e) {},\n        onEndDrag: function(e) {},\n      }, opts);\n\n      ionic.onGesture('drag', ionic.proxy(this._onDrag, this), this.el);\n      ionic.onGesture('release', ionic.proxy(this._onEndDrag, this), this.el);\n    },\n    _onDrag: function(e) {\n      this.onDrag && this.onDrag(e);\n    },\n    _onEndDrag: function(e) {\n      this.onEndDrag && this.onEndDrag(e);\n    },\n    disableAnimation: function() {\n      this.el.classList.remove(this.animationClass);\n    },\n    enableAnimation: function() {\n      this.el.classList.add(this.animationClass);\n    },\n    getTranslateX: function() {\n      return parseFloat(this.el.style[ionic.CSS.TRANSFORM].replace('translate3d(', '').split(',')[0]);\n    },\n    setTranslateX: ionic.animationFrameThrottle(function(x) {\n      this.el.style[ionic.CSS.TRANSFORM] = 'translate3d(' + x + 'px, 0, 0)';\n    })\n  });\n\n})(ionic);\n\n/*\n * Adapted from Swipe.js 2.0\n *\n * Brad Birdsall\n * Copyright 2013, MIT License\n *\n*/\n\n(function(ionic) {\n'use strict';\n\nionic.views.Slider = ionic.views.View.inherit({\n  initialize: function (options) {\n    var slider = this;\n\n    // utilities\n    var noop = function() {}; // simple no operation function\n    var offloadFn = function(fn) { setTimeout(fn || noop, 0); }; // offload a functions execution\n\n    // check browser capabilities\n    var browser = {\n      addEventListener: !!window.addEventListener,\n      touch: ('ontouchstart' in window) || window.DocumentTouch && document instanceof DocumentTouch,\n      transitions: (function(temp) {\n        var props = ['transitionProperty', 'WebkitTransition', 'MozTransition', 'OTransition', 'msTransition'];\n        for ( var i in props ) if (temp.style[ props[i] ] !== undefined) return true;\n        return false;\n      })(document.createElement('swipe'))\n    };\n\n\n    var container = options.el;\n\n    // quit if no root element\n    if (!container) return;\n    var element = container.children[0];\n    var slides, slidePos, width, length;\n    options = options || {};\n    var index = parseInt(options.startSlide, 10) || 0;\n    var speed = options.speed || 300;\n    options.continuous = options.continuous !== undefined ? options.continuous : true;\n\n    function setup() {\n\n      // cache slides\n      slides = element.children;\n      length = slides.length;\n\n      // set continuous to false if only one slide\n      if (slides.length < 2) options.continuous = false;\n\n      //special case if two slides\n      if (browser.transitions && options.continuous && slides.length < 3) {\n        element.appendChild(slides[0].cloneNode(true));\n        element.appendChild(element.children[1].cloneNode(true));\n        slides = element.children;\n      }\n\n      // create an array to store current positions of each slide\n      slidePos = new Array(slides.length);\n\n      // determine width of each slide\n      width = container.offsetWidth || container.getBoundingClientRect().width;\n\n      element.style.width = (slides.length * width) + 'px';\n\n      // stack elements\n      var pos = slides.length;\n      while(pos--) {\n\n        var slide = slides[pos];\n\n        slide.style.width = width + 'px';\n        slide.setAttribute('data-index', pos);\n\n        if (browser.transitions) {\n          slide.style.left = (pos * -width) + 'px';\n          move(pos, index > pos ? -width : (index < pos ? width : 0), 0);\n        }\n\n      }\n\n      // reposition elements before and after index\n      if (options.continuous && browser.transitions) {\n        move(circle(index-1), -width, 0);\n        move(circle(index+1), width, 0);\n      }\n\n      if (!browser.transitions) element.style.left = (index * -width) + 'px';\n\n      container.style.visibility = 'visible';\n\n      options.slidesChanged && options.slidesChanged();\n    }\n\n    function prev() {\n\n      if (options.continuous) slide(index-1);\n      else if (index) slide(index-1);\n\n    }\n\n    function next() {\n\n      if (options.continuous) slide(index+1);\n      else if (index < slides.length - 1) slide(index+1);\n\n    }\n\n    function circle(index) {\n\n      // a simple positive modulo using slides.length\n      return (slides.length + (index % slides.length)) % slides.length;\n\n    }\n\n    function slide(to, slideSpeed) {\n\n      // do nothing if already on requested slide\n      if (index == to) return;\n\n      if (browser.transitions) {\n\n        var direction = Math.abs(index-to) / (index-to); // 1: backward, -1: forward\n\n        // get the actual position of the slide\n        if (options.continuous) {\n          var natural_direction = direction;\n          direction = -slidePos[circle(to)] / width;\n\n          // if going forward but to < index, use to = slides.length + to\n          // if going backward but to > index, use to = -slides.length + to\n          if (direction !== natural_direction) to =  -direction * slides.length + to;\n\n        }\n\n        var diff = Math.abs(index-to) - 1;\n\n        // move all the slides between index and to in the right direction\n        while (diff--) move( circle((to > index ? to : index) - diff - 1), width * direction, 0);\n\n        to = circle(to);\n\n        move(index, width * direction, slideSpeed || speed);\n        move(to, 0, slideSpeed || speed);\n\n        if (options.continuous) move(circle(to - direction), -(width * direction), 0); // we need to get the next in place\n\n      } else {\n\n        to = circle(to);\n        animate(index * -width, to * -width, slideSpeed || speed);\n        //no fallback for a circular continuous if the browser does not accept transitions\n      }\n\n      index = to;\n      offloadFn(options.callback && options.callback(index, slides[index]));\n    }\n\n    function move(index, dist, speed) {\n\n      translate(index, dist, speed);\n      slidePos[index] = dist;\n\n    }\n\n    function translate(index, dist, speed) {\n\n      var slide = slides[index];\n      var style = slide && slide.style;\n\n      if (!style) return;\n\n      style.webkitTransitionDuration =\n      style.MozTransitionDuration =\n      style.msTransitionDuration =\n      style.OTransitionDuration =\n      style.transitionDuration = speed + 'ms';\n\n      style.webkitTransform = 'translate(' + dist + 'px,0)' + 'translateZ(0)';\n      style.msTransform =\n      style.MozTransform =\n      style.OTransform = 'translateX(' + dist + 'px)';\n\n    }\n\n    function animate(from, to, speed) {\n\n      // if not an animation, just reposition\n      if (!speed) {\n\n        element.style.left = to + 'px';\n        return;\n\n      }\n\n      var start = +new Date();\n\n      var timer = setInterval(function() {\n\n        var timeElap = +new Date() - start;\n\n        if (timeElap > speed) {\n\n          element.style.left = to + 'px';\n\n          if (delay) begin();\n\n          options.transitionEnd && options.transitionEnd.call(event, index, slides[index]);\n\n          clearInterval(timer);\n          return;\n\n        }\n\n        element.style.left = (( (to - from) * (Math.floor((timeElap / speed) * 100) / 100) ) + from) + 'px';\n\n      }, 4);\n\n    }\n\n    // setup auto slideshow\n    var delay = options.auto || 0;\n    var interval;\n\n    function begin() {\n\n      interval = setTimeout(next, delay);\n\n    }\n\n    function stop() {\n\n      delay = options.auto || 0;\n      clearTimeout(interval);\n\n    }\n\n\n    // setup initial vars\n    var start = {};\n    var delta = {};\n    var isScrolling;\n\n    // setup event capturing\n    var events = {\n\n      handleEvent: function(event) {\n        if(event.type == 'mousedown' || event.type == 'mouseup' || event.type == 'mousemove') {\n          event.touches = [{\n            pageX: event.pageX,\n            pageY: event.pageY\n          }];\n        }\n\n        switch (event.type) {\n          case 'mousedown': this.start(event); break;\n          case 'touchstart': this.start(event); break;\n          case 'touchmove': this.touchmove(event); break;\n          case 'mousemove': this.touchmove(event); break;\n          case 'touchend': offloadFn(this.end(event)); break;\n          case 'mouseup': offloadFn(this.end(event)); break;\n          case 'webkitTransitionEnd':\n          case 'msTransitionEnd':\n          case 'oTransitionEnd':\n          case 'otransitionend':\n          case 'transitionend': offloadFn(this.transitionEnd(event)); break;\n          case 'resize': offloadFn(setup); break;\n        }\n\n        if (options.stopPropagation) event.stopPropagation();\n\n      },\n      start: function(event) {\n\n        var touches = event.touches[0];\n\n        // measure start values\n        start = {\n\n          // get initial touch coords\n          x: touches.pageX,\n          y: touches.pageY,\n\n          // store time to determine touch duration\n          time: +new Date()\n\n        };\n\n        // used for testing first move event\n        isScrolling = undefined;\n\n        // reset delta and end measurements\n        delta = {};\n\n        // attach touchmove and touchend listeners\n        if(browser.touch) {\n          element.addEventListener('touchmove', this, false);\n          element.addEventListener('touchend', this, false);\n        } else {\n          element.addEventListener('mousemove', this, false);\n          element.addEventListener('mouseup', this, false);\n          document.addEventListener('mouseup', this, false);\n        }\n      },\n      touchmove: function(event) {\n\n        // ensure swiping with one touch and not pinching\n        // ensure sliding is enabled\n        if (event.touches.length > 1 ||\n            event.scale && event.scale !== 1 ||\n            slider.slideIsDisabled) {\n          return;\n        }\n\n        if (options.disableScroll) event.preventDefault();\n\n        var touches = event.touches[0];\n\n        // measure change in x and y\n        delta = {\n          x: touches.pageX - start.x,\n          y: touches.pageY - start.y\n        };\n\n        // determine if scrolling test has run - one time test\n        if ( typeof isScrolling == 'undefined') {\n          isScrolling = !!( isScrolling || Math.abs(delta.x) < Math.abs(delta.y) );\n        }\n\n        // if user is not trying to scroll vertically\n        if (!isScrolling) {\n\n          // prevent native scrolling\n          event.preventDefault();\n\n          // stop slideshow\n          stop();\n\n          // increase resistance if first or last slide\n          if (options.continuous) { // we don't add resistance at the end\n\n            translate(circle(index-1), delta.x + slidePos[circle(index-1)], 0);\n            translate(index, delta.x + slidePos[index], 0);\n            translate(circle(index+1), delta.x + slidePos[circle(index+1)], 0);\n\n          } else {\n\n            delta.x =\n              delta.x /\n                ( (!index && delta.x > 0 ||         // if first slide and sliding left\n                  index == slides.length - 1 &&     // or if last slide and sliding right\n                  delta.x < 0                       // and if sliding at all\n                ) ?\n                ( Math.abs(delta.x) / width + 1 )      // determine resistance level\n                : 1 );                                 // no resistance if false\n\n            // translate 1:1\n            translate(index-1, delta.x + slidePos[index-1], 0);\n            translate(index, delta.x + slidePos[index], 0);\n            translate(index+1, delta.x + slidePos[index+1], 0);\n          }\n\n        }\n\n      },\n      end: function(event) {\n\n        // measure duration\n        var duration = +new Date() - start.time;\n\n        // determine if slide attempt triggers next/prev slide\n        var isValidSlide =\n              Number(duration) < 250 &&         // if slide duration is less than 250ms\n              Math.abs(delta.x) > 20 ||         // and if slide amt is greater than 20px\n              Math.abs(delta.x) > width/2;      // or if slide amt is greater than half the width\n\n        // determine if slide attempt is past start and end\n        var isPastBounds = (!index && delta.x > 0) ||      // if first slide and slide amt is greater than 0\n              (index == slides.length - 1 && delta.x < 0); // or if last slide and slide amt is less than 0\n\n        if (options.continuous) isPastBounds = false;\n\n        // determine direction of swipe (true:right, false:left)\n        var direction = delta.x < 0;\n\n        // if not scrolling vertically\n        if (!isScrolling) {\n\n          if (isValidSlide && !isPastBounds) {\n\n            if (direction) {\n\n              if (options.continuous) { // we need to get the next in this direction in place\n\n                move(circle(index-1), -width, 0);\n                move(circle(index+2), width, 0);\n\n              } else {\n                move(index-1, -width, 0);\n              }\n\n              move(index, slidePos[index]-width, speed);\n              move(circle(index+1), slidePos[circle(index+1)]-width, speed);\n              index = circle(index+1);\n\n            } else {\n              if (options.continuous) { // we need to get the next in this direction in place\n\n                move(circle(index+1), width, 0);\n                move(circle(index-2), -width, 0);\n\n              } else {\n                move(index+1, width, 0);\n              }\n\n              move(index, slidePos[index]+width, speed);\n              move(circle(index-1), slidePos[circle(index-1)]+width, speed);\n              index = circle(index-1);\n\n            }\n\n            options.callback && options.callback(index, slides[index]);\n\n          } else {\n\n            if (options.continuous) {\n\n              move(circle(index-1), -width, speed);\n              move(index, 0, speed);\n              move(circle(index+1), width, speed);\n\n            } else {\n\n              move(index-1, -width, speed);\n              move(index, 0, speed);\n              move(index+1, width, speed);\n            }\n\n          }\n\n        }\n\n        // kill touchmove and touchend event listeners until touchstart called again\n        if(browser.touch) {\n          element.removeEventListener('touchmove', events, false);\n          element.removeEventListener('touchend', events, false);\n        } else {\n          element.removeEventListener('mousemove', events, false);\n          element.removeEventListener('mouseup', events, false);\n          document.removeEventListener('mouseup', events, false);\n        }\n\n      },\n      transitionEnd: function(event) {\n\n        if (parseInt(event.target.getAttribute('data-index'), 10) == index) {\n\n          if (delay) begin();\n\n          options.transitionEnd && options.transitionEnd.call(event, index, slides[index]);\n\n        }\n\n      }\n\n    };\n\n    // Public API\n    this.update = function() {\n      setTimeout(setup);\n    };\n    this.setup = function() {\n      setup();\n    };\n\n    this.enableSlide = function(shouldEnable) {\n      if (arguments.length) {\n        this.slideIsDisabled = !shouldEnable;\n      }\n      return !this.slideIsDisabled;\n    },\n    this.slide = function(to, speed) {\n      // cancel slideshow\n      stop();\n\n      slide(to, speed);\n    };\n\n    this.prev = this.previous = function() {\n      // cancel slideshow\n      stop();\n\n      prev();\n    };\n\n    this.next = function() {\n      // cancel slideshow\n      stop();\n\n      next();\n    };\n\n    this.stop = function() {\n      // cancel slideshow\n      stop();\n    };\n\n    this.start = function() {\n      begin();\n    };\n\n    this.currentIndex = function() {\n      // return current index position\n      return index;\n    };\n\n    this.slidesCount = function() {\n      // return total number of slides\n      return length;\n    };\n\n    this.kill = function() {\n      // cancel slideshow\n      stop();\n\n      // reset element\n      element.style.width = '';\n      element.style.left = '';\n\n      // reset slides\n      var pos = slides.length;\n      while(pos--) {\n\n        var slide = slides[pos];\n        slide.style.width = '';\n        slide.style.left = '';\n\n        if (browser.transitions) translate(pos, 0, 0);\n\n      }\n\n      // removed event listeners\n      if (browser.addEventListener) {\n\n        // remove current event listeners\n        element.removeEventListener('touchstart', events, false);\n        element.removeEventListener('webkitTransitionEnd', events, false);\n        element.removeEventListener('msTransitionEnd', events, false);\n        element.removeEventListener('oTransitionEnd', events, false);\n        element.removeEventListener('otransitionend', events, false);\n        element.removeEventListener('transitionend', events, false);\n        window.removeEventListener('resize', events, false);\n\n      }\n      else {\n\n        window.onresize = null;\n\n      }\n    };\n\n    this.load = function() {\n      // trigger setup\n      setup();\n\n      // start auto slideshow if applicable\n      if (delay) begin();\n\n\n      // add event listeners\n      if (browser.addEventListener) {\n\n        // set touchstart event on element\n        if (browser.touch) {\n          element.addEventListener('touchstart', events, false);\n        } else {\n          element.addEventListener('mousedown', events, false);\n        }\n\n        if (browser.transitions) {\n          element.addEventListener('webkitTransitionEnd', events, false);\n          element.addEventListener('msTransitionEnd', events, false);\n          element.addEventListener('oTransitionEnd', events, false);\n          element.addEventListener('otransitionend', events, false);\n          element.addEventListener('transitionend', events, false);\n        }\n\n        // set resize event on window\n        window.addEventListener('resize', events, false);\n\n      } else {\n\n        window.onresize = function () { setup(); }; // to play nice with old IE\n\n      }\n    };\n\n  }\n});\n\n})(ionic);\n\n(function(ionic) {\n'use strict';\n\n  ionic.views.Toggle = ionic.views.View.inherit({\n    initialize: function(opts) {\n      var self = this;\n\n      this.el = opts.el;\n      this.checkbox = opts.checkbox;\n      this.track = opts.track;\n      this.handle = opts.handle;\n      this.openPercent = -1;\n      this.onChange = opts.onChange || function() {};\n\n      this.triggerThreshold = opts.triggerThreshold || 20;\n\n      this.dragStartHandler = function(e) {\n        self.dragStart(e);\n      };\n      this.dragHandler = function(e) {\n        self.drag(e);\n      };\n      this.holdHandler = function(e) {\n        self.hold(e);\n      };\n      this.releaseHandler = function(e) {\n        self.release(e);\n      };\n\n      this.dragStartGesture = ionic.onGesture('dragstart', this.dragStartHandler, this.el);\n      this.dragGesture = ionic.onGesture('drag', this.dragHandler, this.el);\n      this.dragHoldGesture = ionic.onGesture('hold', this.holdHandler, this.el);\n      this.dragReleaseGesture = ionic.onGesture('release', this.releaseHandler, this.el);\n    },\n\n    destroy: function() {\n      ionic.offGesture(this.dragStartGesture, 'dragstart', this.dragStartGesture);\n      ionic.offGesture(this.dragGesture, 'drag', this.dragGesture);\n      ionic.offGesture(this.dragHoldGesture, 'hold', this.holdHandler);\n      ionic.offGesture(this.dragReleaseGesture, 'release', this.releaseHandler);\n    },\n\n    tap: function(e) {\n      if(this.el.getAttribute('disabled') !== 'disabled') {\n        this.val( !this.checkbox.checked );\n      }\n    },\n\n    dragStart: function(e) {\n      if(this.checkbox.disabled) return;\n\n      this._dragInfo = {\n        width: this.el.offsetWidth,\n        left: this.el.offsetLeft,\n        right: this.el.offsetLeft + this.el.offsetWidth,\n        triggerX: this.el.offsetWidth / 2,\n        initialState: this.checkbox.checked\n      };\n\n      // Stop any parent dragging\n      e.gesture.srcEvent.preventDefault();\n\n      // Trigger hold styles\n      this.hold(e);\n    },\n\n    drag: function(e) {\n      var self = this;\n      if(!this._dragInfo) { return; }\n\n      // Stop any parent dragging\n      e.gesture.srcEvent.preventDefault();\n\n      ionic.requestAnimationFrame(function(amount) {\n        if (!self._dragInfo) { return; }\n\n        var slidePageLeft = self.track.offsetLeft + (self.handle.offsetWidth / 2);\n        var slidePageRight = self.track.offsetLeft + self.track.offsetWidth - (self.handle.offsetWidth / 2);\n        var dx = e.gesture.deltaX;\n\n        var px = e.gesture.touches[0].pageX - self._dragInfo.left;\n        var mx = self._dragInfo.width - self.triggerThreshold;\n\n        // The initial state was on, so \"tend towards\" on\n        if(self._dragInfo.initialState) {\n          if(px < self.triggerThreshold) {\n            self.setOpenPercent(0);\n          } else if(px > self._dragInfo.triggerX) {\n            self.setOpenPercent(100);\n          }\n        } else {\n          // The initial state was off, so \"tend towards\" off\n          if(px < self._dragInfo.triggerX) {\n            self.setOpenPercent(0);\n          } else if(px > mx) {\n            self.setOpenPercent(100);\n          }\n        }\n      });\n    },\n\n    endDrag: function(e) {\n      this._dragInfo = null;\n    },\n\n    hold: function(e) {\n      this.el.classList.add('dragging');\n    },\n    release: function(e) {\n      this.el.classList.remove('dragging');\n      this.endDrag(e);\n    },\n\n\n    setOpenPercent: function(openPercent) {\n      // only make a change if the new open percent has changed\n      if(this.openPercent < 0 || (openPercent < (this.openPercent - 3) || openPercent > (this.openPercent + 3) ) ) {\n        this.openPercent = openPercent;\n\n        if(openPercent === 0) {\n          this.val(false);\n        } else if(openPercent === 100) {\n          this.val(true);\n        } else {\n          var openPixel = Math.round( (openPercent / 100) * this.track.offsetWidth - (this.handle.offsetWidth) );\n          openPixel = (openPixel < 1 ? 0 : openPixel);\n          this.handle.style[ionic.CSS.TRANSFORM] = 'translate3d(' + openPixel + 'px,0,0)';\n        }\n      }\n    },\n\n    val: function(value) {\n      if(value === true || value === false) {\n        if(this.handle.style[ionic.CSS.TRANSFORM] !== \"\") {\n          this.handle.style[ionic.CSS.TRANSFORM] = \"\";\n        }\n        this.checkbox.checked = value;\n        this.openPercent = (value ? 100 : 0);\n        this.onChange && this.onChange();\n      }\n      return this.checkbox.checked;\n    }\n\n  });\n\n})(ionic);\n\n(function(ionic) {\n'use strict';\n  ionic.controllers.ViewController = function(options) {\n    this.initialize.apply(this, arguments);\n  };\n\n  ionic.controllers.ViewController.inherit = ionic.inherit;\n\n  ionic.extend(ionic.controllers.ViewController.prototype, {\n    initialize: function() {},\n    // Destroy this view controller, including all child views\n    destroy: function() {\n    }\n  });\n\n})(window.ionic);\n\n(function(ionic) {\n'use strict';\n\n/**\n   * The SideMenuController is a controller with a left and/or right menu that\n   * can be slid out and toggled. Seen on many an app.\n   *\n   * The right or left menu can be disabled or not used at all, if desired.\n   */\n  ionic.controllers.SideMenuController = ionic.controllers.ViewController.inherit({\n    initialize: function(options) {\n      var self = this;\n\n      this.left = options.left;\n      this.right = options.right;\n      this.content = options.content;\n      this.dragThresholdX = options.dragThresholdX || 10;\n\n      this._rightShowing = false;\n      this._leftShowing = false;\n      this._isDragging = false;\n\n      if(this.content) {\n        this.content.onDrag = function(e) {\n          self._handleDrag(e);\n        };\n\n        this.content.onEndDrag =function(e) {\n          self._endDrag(e);\n        };\n      }\n    },\n    /**\n     * Set the content view controller if not passed in the constructor options.\n     *\n     * @param {object} content\n     */\n    setContent: function(content) {\n      var self = this;\n\n      this.content = content;\n\n      this.content.onDrag = function(e) {\n        self._handleDrag(e);\n      };\n\n      this.content.endDrag = function(e) {\n        self._endDrag(e);\n      };\n    },\n\n    isOpenLeft: function() {\n      return this.getOpenAmount() > 0;\n    },\n\n    isOpenRight: function() {\n      return this.getOpenAmount() < 0;\n    },\n\n    /**\n     * Toggle the left menu to open 100%\n     */\n    toggleLeft: function(shouldOpen) {\n      var openAmount = this.getOpenAmount();\n      if (arguments.length === 0) {\n        shouldOpen = openAmount <= 0;\n      }\n      this.content.enableAnimation();\n      if(!shouldOpen) {\n        this.openPercentage(0);\n      } else {\n        this.openPercentage(100);\n      }\n    },\n\n    /**\n     * Toggle the right menu to open 100%\n     */\n    toggleRight: function(shouldOpen) {\n      var openAmount = this.getOpenAmount();\n      if (arguments.length === 0) {\n        shouldOpen = openAmount >= 0;\n      }\n      this.content.enableAnimation();\n      if(!shouldOpen) {\n        this.openPercentage(0);\n      } else {\n        this.openPercentage(-100);\n      }\n    },\n\n    /**\n     * Close all menus.\n     */\n    close: function() {\n      this.openPercentage(0);\n    },\n\n    /**\n     * @return {float} The amount the side menu is open, either positive or negative for left (positive), or right (negative)\n     */\n    getOpenAmount: function() {\n      return this.content && this.content.getTranslateX() || 0;\n    },\n\n    /**\n     * @return {float} The ratio of open amount over menu width. For example, a\n     * menu of width 100 open 50 pixels would be open 50% or a ratio of 0.5. Value is negative\n     * for right menu.\n     */\n    getOpenRatio: function() {\n      var amount = this.getOpenAmount();\n      if(amount >= 0) {\n        return amount / this.left.width;\n      }\n      return amount / this.right.width;\n    },\n\n    isOpen: function() {\n      return this.getOpenAmount() !== 0;\n    },\n\n    /**\n     * @return {float} The percentage of open amount over menu width. For example, a\n     * menu of width 100 open 50 pixels would be open 50%. Value is negative\n     * for right menu.\n     */\n    getOpenPercentage: function() {\n      return this.getOpenRatio() * 100;\n    },\n\n    /**\n     * Open the menu with a given percentage amount.\n     * @param {float} percentage The percentage (positive or negative for left/right) to open the menu.\n     */\n    openPercentage: function(percentage) {\n      var p = percentage / 100;\n\n      if(this.left && percentage >= 0) {\n        this.openAmount(this.left.width * p);\n      } else if(this.right && percentage < 0) {\n        var maxRight = this.right.width;\n        this.openAmount(this.right.width * p);\n      }\n\n      if(percentage !== 0) {\n        document.body.classList.add('menu-open');\n      } else {\n        document.body.classList.remove('menu-open');\n      }\n    },\n\n    /**\n     * Open the menu the given pixel amount.\n     * @param {float} amount the pixel amount to open the menu. Positive value for left menu,\n     * negative value for right menu (only one menu will be visible at a time).\n     */\n    openAmount: function(amount) {\n      var maxLeft = this.left && this.left.width || 0;\n      var maxRight = this.right && this.right.width || 0;\n\n      // Check if we can move to that side, depending if the left/right panel is enabled\n      if(!(this.left && this.left.isEnabled) && amount > 0) {\n        this.content.setTranslateX(0);\n        return;\n      }\n\n      if(!(this.right && this.right.isEnabled) && amount < 0) {\n        this.content.setTranslateX(0);\n        return;\n      }\n\n      if(this._leftShowing && amount > maxLeft) {\n        this.content.setTranslateX(maxLeft);\n        return;\n      }\n\n      if(this._rightShowing && amount < -maxRight) {\n        this.content.setTranslateX(-maxRight);\n        return;\n      }\n\n      this.content.setTranslateX(amount);\n\n      if(amount >= 0) {\n        this._leftShowing = true;\n        this._rightShowing = false;\n\n        if(amount > 0) {\n          // Push the z-index of the right menu down\n          this.right && this.right.pushDown && this.right.pushDown();\n          // Bring the z-index of the left menu up\n          this.left && this.left.bringUp && this.left.bringUp();\n        }\n      } else {\n        this._rightShowing = true;\n        this._leftShowing = false;\n\n        // Bring the z-index of the right menu up\n        this.right && this.right.bringUp && this.right.bringUp();\n        // Push the z-index of the left menu down\n        this.left && this.left.pushDown && this.left.pushDown();\n      }\n    },\n\n    /**\n     * Given an event object, find the final resting position of this side\n     * menu. For example, if the user \"throws\" the content to the right and\n     * releases the touch, the left menu should snap open (animated, of course).\n     *\n     * @param {Event} e the gesture event to use for snapping\n     */\n    snapToRest: function(e) {\n      // We want to animate at the end of this\n      this.content.enableAnimation();\n      this._isDragging = false;\n\n      // Check how much the panel is open after the drag, and\n      // what the drag velocity is\n      var ratio = this.getOpenRatio();\n\n      if(ratio === 0) {\n        // Just to be safe\n        this.openPercentage(0);\n        return;\n      }\n\n      var velocityThreshold = 0.3;\n      var velocityX = e.gesture.velocityX;\n      var direction = e.gesture.direction;\n\n      // Less than half, going left\n      //if(ratio > 0 && ratio < 0.5 && direction == 'left' && velocityX < velocityThreshold) {\n      //this.openPercentage(0);\n      //}\n\n      // Going right, less than half, too slow (snap back)\n      if(ratio > 0 && ratio < 0.5 && direction == 'right' && velocityX < velocityThreshold) {\n        this.openPercentage(0);\n      }\n\n      // Going left, more than half, too slow (snap back)\n      else if(ratio > 0.5 && direction == 'left' && velocityX < velocityThreshold) {\n        this.openPercentage(100);\n      }\n\n      // Going left, less than half, too slow (snap back)\n      else if(ratio < 0 && ratio > -0.5 && direction == 'left' && velocityX < velocityThreshold) {\n        this.openPercentage(0);\n      }\n\n      // Going right, more than half, too slow (snap back)\n      else if(ratio < 0.5 && direction == 'right' && velocityX < velocityThreshold) {\n        this.openPercentage(-100);\n      }\n\n      // Going right, more than half, or quickly (snap open)\n      else if(direction == 'right' && ratio >= 0 && (ratio >= 0.5 || velocityX > velocityThreshold)) {\n        this.openPercentage(100);\n      }\n\n      // Going left, more than half, or quickly (span open)\n      else if(direction == 'left' && ratio <= 0 && (ratio <= -0.5 || velocityX > velocityThreshold)) {\n        this.openPercentage(-100);\n      }\n\n      // Snap back for safety\n      else {\n        this.openPercentage(0);\n      }\n    },\n\n    // End a drag with the given event\n    _endDrag: function(e) {\n      if(this._isDragging) {\n        this.snapToRest(e);\n      }\n      this._startX = null;\n      this._lastX = null;\n      this._offsetX = null;\n    },\n\n    // Handle a drag event\n    _handleDrag: function(e) {\n\n      // If we don't have start coords, grab and store them\n      if(!this._startX) {\n        this._startX = e.gesture.touches[0].pageX;\n        this._lastX = this._startX;\n      } else {\n        // Grab the current tap coords\n        this._lastX = e.gesture.touches[0].pageX;\n      }\n\n      // Calculate difference from the tap points\n      if(!this._isDragging && Math.abs(this._lastX - this._startX) > this.dragThresholdX) {\n        // if the difference is greater than threshold, start dragging using the current\n        // point as the starting point\n        this._startX = this._lastX;\n\n        this._isDragging = true;\n        // Initialize dragging\n        this.content.disableAnimation();\n        this._offsetX = this.getOpenAmount();\n      }\n\n      if(this._isDragging) {\n        this.openAmount(this._offsetX + (this._lastX - this._startX));\n      }\n    }\n  });\n\n})(ionic);\n\n})();"
  },
  {
    "path": "content/present-ionic/slides/ionic/version.json",
    "content": "{\n  \"version\": \"1.0.0-beta.11\",\n  \"codename\": \"indium-iguana\",\n  \"date\": \"2014-08-06\",\n  \"time\": \"21:49:26\"\n}\n"
  },
  {
    "path": "content/present-ionic/slides/lib/css/zenburn.css",
    "content": "/*\n\nZenburn style from voldmar.ru (c) Vladimir Epifanov <voldmar@voldmar.ru>\nbased on dark.css by Ivan Sagalaev\n\n*/\n\npre code {\n  display: block; padding: 0.5em;\n  background: #3F3F3F;\n  color: #DCDCDC;\n}\n\npre .keyword,\npre .tag,\npre .css .class,\npre .css .id,\npre .lisp .title,\npre .nginx .title,\npre .request,\npre .status,\npre .clojure .attribute {\n  color: #E3CEAB;\n}\n\npre .django .template_tag,\npre .django .variable,\npre .django .filter .argument {\n  color: #DCDCDC;\n}\n\npre .number,\npre .date {\n  color: #8CD0D3;\n}\n\npre .dos .envvar,\npre .dos .stream,\npre .variable,\npre .apache .sqbracket {\n  color: #EFDCBC;\n}\n\npre .dos .flow,\npre .diff .change,\npre .python .exception,\npre .python .built_in,\npre .literal,\npre .tex .special {\n  color: #EFEFAF;\n}\n\npre .diff .chunk,\npre .subst {\n  color: #8F8F8F;\n}\n\npre .dos .keyword,\npre .python .decorator,\npre .title,\npre .haskell .type,\npre .diff .header,\npre .ruby .class .parent,\npre .apache .tag,\npre .nginx .built_in,\npre .tex .command,\npre .prompt {\n    color: #efef8f;\n}\n\npre .dos .winutils,\npre .ruby .symbol,\npre .ruby .symbol .string,\npre .ruby .string {\n  color: #DCA3A3;\n}\n\npre .diff .deletion,\npre .string,\npre .tag .value,\npre .preprocessor,\npre .built_in,\npre .sql .aggregate,\npre .javadoc,\npre .smalltalk .class,\npre .smalltalk .localvars,\npre .smalltalk .array,\npre .css .rules .value,\npre .attr_selector,\npre .pseudo,\npre .apache .cbracket,\npre .tex .formula {\n  color: #CC9393;\n}\n\npre .shebang,\npre .diff .addition,\npre .comment,\npre .java .annotation,\npre .template_comment,\npre .pi,\npre .doctype {\n  color: #7F9F7F;\n}\n\npre .coffeescript .javascript,\npre .javascript .xml,\npre .tex .formula,\npre .xml .javascript,\npre .xml .vbscript,\npre .xml .css,\npre .xml .cdata {\n  opacity: 0.5;\n}"
  },
  {
    "path": "content/present-ionic/slides/lib/js/classList.js",
    "content": "/*! @source http://purl.eligrey.com/github/classList.js/blob/master/classList.js*/\nif(typeof document!==\"undefined\"&&!(\"classList\" in document.createElement(\"a\"))){(function(j){var a=\"classList\",f=\"prototype\",m=(j.HTMLElement||j.Element)[f],b=Object,k=String[f].trim||function(){return this.replace(/^\\s+|\\s+$/g,\"\")},c=Array[f].indexOf||function(q){var p=0,o=this.length;for(;p<o;p++){if(p in this&&this[p]===q){return p}}return -1},n=function(o,p){this.name=o;this.code=DOMException[o];this.message=p},g=function(p,o){if(o===\"\"){throw new n(\"SYNTAX_ERR\",\"An invalid or illegal string was specified\")}if(/\\s/.test(o)){throw new n(\"INVALID_CHARACTER_ERR\",\"String contains an invalid character\")}return c.call(p,o)},d=function(s){var r=k.call(s.className),q=r?r.split(/\\s+/):[],p=0,o=q.length;for(;p<o;p++){this.push(q[p])}this._updateClassName=function(){s.className=this.toString()}},e=d[f]=[],i=function(){return new d(this)};n[f]=Error[f];e.item=function(o){return this[o]||null};e.contains=function(o){o+=\"\";return g(this,o)!==-1};e.add=function(o){o+=\"\";if(g(this,o)===-1){this.push(o);this._updateClassName()}};e.remove=function(p){p+=\"\";var o=g(this,p);if(o!==-1){this.splice(o,1);this._updateClassName()}};e.toggle=function(o){o+=\"\";if(g(this,o)===-1){this.add(o)}else{this.remove(o)}};e.toString=function(){return this.join(\" \")};if(b.defineProperty){var l={get:i,enumerable:true,configurable:true};try{b.defineProperty(m,a,l)}catch(h){if(h.number===-2146823252){l.enumerable=false;b.defineProperty(m,a,l)}}}else{if(b[f].__defineGetter__){m.__defineGetter__(a,i)}}}(self))};"
  },
  {
    "path": "content/present-ionic/slides/lib/js/html5shiv.js",
    "content": "document.createElement('header');\ndocument.createElement('nav');\ndocument.createElement('section');\ndocument.createElement('article');\ndocument.createElement('aside');\ndocument.createElement('footer');\ndocument.createElement('hgroup');"
  },
  {
    "path": "content/present-ionic/slides/plugin/highlight/highlight.js",
    "content": "// START CUSTOM REVEAL.JS INTEGRATION\n(function() {\n\tif( typeof window.addEventListener === 'function' ) {\n\t\tvar hljs_nodes = document.querySelectorAll( 'pre code' );\n\n\t\tfor( var i = 0, len = hljs_nodes.length; i < len; i++ ) {\n\t\t\tvar element = hljs_nodes[i];\n\n\t\t\t// trim whitespace if data-trim attribute is present\n\t\t\tif( element.hasAttribute( 'data-trim' ) && typeof element.innerHTML.trim === 'function' ) {\n\t\t\t\telement.innerHTML = element.innerHTML.trim();\n\t\t\t}\n\n\t\t\t// Now escape html unless prevented by author\n\t\t\tif( ! element.hasAttribute( 'data-noescape' )) {\n\t\t\t\telement.innerHTML = element.innerHTML.replace(/</g,\"&lt;\").replace(/>/g,\"&gt;\");\n\t\t\t}\n\n\t\t\t// re-highlight when focus is lost (for edited code)\n\t\t\telement.addEventListener( 'focusout', function( event ) {\n\t\t\t\thljs.highlightBlock( event.currentTarget );\n\t\t\t}, false );\n\t\t}\n\t}\n})();\n// END CUSTOM REVEAL.JS INTEGRATION\n\n// highlight.js build includes support for:\n// All languages in master + fsharp\n\n\nvar hljs=new function(){function l(o){return o.replace(/&/gm,\"&amp;\").replace(/</gm,\"&lt;\").replace(/>/gm,\"&gt;\")}function b(p){for(var o=p.firstChild;o;o=o.nextSibling){if(o.nodeName==\"CODE\"){return o}if(!(o.nodeType==3&&o.nodeValue.match(/\\s+/))){break}}}function h(p,o){return Array.prototype.map.call(p.childNodes,function(q){if(q.nodeType==3){return o?q.nodeValue.replace(/\\n/g,\"\"):q.nodeValue}if(q.nodeName==\"BR\"){return\"\\n\"}return h(q,o)}).join(\"\")}function a(q){var p=(q.className+\" \"+(q.parentNode?q.parentNode.className:\"\")).split(/\\s+/);p=p.map(function(r){return r.replace(/^language-/,\"\")});for(var o=0;o<p.length;o++){if(e[p[o]]||p[o]==\"no-highlight\"){return p[o]}}}function c(q){var o=[];(function p(r,s){for(var t=r.firstChild;t;t=t.nextSibling){if(t.nodeType==3){s+=t.nodeValue.length}else{if(t.nodeName==\"BR\"){s+=1}else{if(t.nodeType==1){o.push({event:\"start\",offset:s,node:t});s=p(t,s);o.push({event:\"stop\",offset:s,node:t})}}}}return s})(q,0);return o}function j(x,v,w){var p=0;var y=\"\";var r=[];function t(){if(x.length&&v.length){if(x[0].offset!=v[0].offset){return(x[0].offset<v[0].offset)?x:v}else{return v[0].event==\"start\"?x:v}}else{return x.length?x:v}}function s(A){function z(B){return\" \"+B.nodeName+'=\"'+l(B.value)+'\"'}return\"<\"+A.nodeName+Array.prototype.map.call(A.attributes,z).join(\"\")+\">\"}while(x.length||v.length){var u=t().splice(0,1)[0];y+=l(w.substr(p,u.offset-p));p=u.offset;if(u.event==\"start\"){y+=s(u.node);r.push(u.node)}else{if(u.event==\"stop\"){var o,q=r.length;do{q--;o=r[q];y+=(\"</\"+o.nodeName.toLowerCase()+\">\")}while(o!=u.node);r.splice(q,1);while(q<r.length){y+=s(r[q]);q++}}}}return y+l(w.substr(p))}function f(r){function o(s){return(s&&s.source)||s}function p(t,s){return RegExp(o(t),\"m\"+(r.cI?\"i\":\"\")+(s?\"g\":\"\"))}function q(z,x){if(z.compiled){return}z.compiled=true;var u=[];if(z.k){var s={};function A(B,t){t.split(\" \").forEach(function(C){var D=C.split(\"|\");s[D[0]]=[B,D[1]?Number(D[1]):1];u.push(D[0])})}z.lR=p(z.l||hljs.IR+\"(?!\\\\.)\",true);if(typeof z.k==\"string\"){A(\"keyword\",z.k)}else{for(var y in z.k){if(!z.k.hasOwnProperty(y)){continue}A(y,z.k[y])}}z.k=s}if(x){if(z.bWK){z.b=\"\\\\b(\"+u.join(\"|\")+\")\\\\b(?!\\\\.)\\\\s*\"}z.bR=p(z.b?z.b:\"\\\\B|\\\\b\");if(!z.e&&!z.eW){z.e=\"\\\\B|\\\\b\"}if(z.e){z.eR=p(z.e)}z.tE=o(z.e)||\"\";if(z.eW&&x.tE){z.tE+=(z.e?\"|\":\"\")+x.tE}}if(z.i){z.iR=p(z.i)}if(z.r===undefined){z.r=1}if(!z.c){z.c=[]}for(var w=0;w<z.c.length;w++){if(z.c[w]==\"self\"){z.c[w]=z}q(z.c[w],z)}if(z.starts){q(z.starts,x)}var v=[];for(var w=0;w<z.c.length;w++){v.push(o(z.c[w].b))}if(z.tE){v.push(o(z.tE))}if(z.i){v.push(o(z.i))}z.t=v.length?p(v.join(\"|\"),true):{exec:function(t){return null}}}q(r)}function d(E,F,C){function o(r,N){for(var M=0;M<N.c.length;M++){var L=N.c[M].bR.exec(r);if(L&&L.index==0){return N.c[M]}}}function s(L,r){if(L.e&&L.eR.test(r)){return L}if(L.eW){return s(L.parent,r)}}function t(r,L){return !C&&L.i&&L.iR.test(r)}function y(M,r){var L=G.cI?r[0].toLowerCase():r[0];return M.k.hasOwnProperty(L)&&M.k[L]}function H(){var L=l(w);if(!A.k){return L}var r=\"\";var O=0;A.lR.lastIndex=0;var M=A.lR.exec(L);while(M){r+=L.substr(O,M.index-O);var N=y(A,M);if(N){v+=N[1];r+='<span class=\"'+N[0]+'\">'+M[0]+\"</span>\"}else{r+=M[0]}O=A.lR.lastIndex;M=A.lR.exec(L)}return r+L.substr(O)}function z(){if(A.sL&&!e[A.sL]){return l(w)}var r=A.sL?d(A.sL,w):g(w);if(A.r>0){v+=r.keyword_count;B+=r.r}return'<span class=\"'+r.language+'\">'+r.value+\"</span>\"}function K(){return A.sL!==undefined?z():H()}function J(M,r){var L=M.cN?'<span class=\"'+M.cN+'\">':\"\";if(M.rB){x+=L;w=\"\"}else{if(M.eB){x+=l(r)+L;w=\"\"}else{x+=L;w=r}}A=Object.create(M,{parent:{value:A}})}function D(L,r){w+=L;if(r===undefined){x+=K();return 0}var N=o(r,A);if(N){x+=K();J(N,r);return N.rB?0:r.length}var O=s(A,r);if(O){var M=A;if(!(M.rE||M.eE)){w+=r}x+=K();do{if(A.cN){x+=\"</span>\"}B+=A.r;A=A.parent}while(A!=O.parent);if(M.eE){x+=l(r)}w=\"\";if(O.starts){J(O.starts,\"\")}return M.rE?0:r.length}if(t(r,A)){throw new Error('Illegal lexem \"'+r+'\" for mode \"'+(A.cN||\"<unnamed>\")+'\"')}w+=r;return r.length||1}var G=e[E];f(G);var A=G;var w=\"\";var B=0;var v=0;var x=\"\";try{var u,q,p=0;while(true){A.t.lastIndex=p;u=A.t.exec(F);if(!u){break}q=D(F.substr(p,u.index-p),u[0]);p=u.index+q}D(F.substr(p));return{r:B,keyword_count:v,value:x,language:E}}catch(I){if(I.message.indexOf(\"Illegal\")!=-1){return{r:0,keyword_count:0,value:l(F)}}else{throw I}}}function g(s){var o={keyword_count:0,r:0,value:l(s)};var q=o;for(var p in e){if(!e.hasOwnProperty(p)){continue}var r=d(p,s,false);r.language=p;if(r.keyword_count+r.r>q.keyword_count+q.r){q=r}if(r.keyword_count+r.r>o.keyword_count+o.r){q=o;o=r}}if(q.language){o.second_best=q}return o}function i(q,p,o){if(p){q=q.replace(/^((<[^>]+>|\\t)+)/gm,function(r,v,u,t){return v.replace(/\\t/g,p)})}if(o){q=q.replace(/\\n/g,\"<br>\")}return q}function m(r,u,p){var v=h(r,p);var t=a(r);if(t==\"no-highlight\"){return}var w=t?d(t,v,true):g(v);t=w.language;var o=c(r);if(o.length){var q=document.createElement(\"pre\");q.innerHTML=w.value;w.value=j(o,c(q),v)}w.value=i(w.value,u,p);var s=r.className;if(!s.match(\"(\\\\s|^)(language-)?\"+t+\"(\\\\s|$)\")){s=s?(s+\" \"+t):t}r.innerHTML=w.value;r.className=s;r.result={language:t,kw:w.keyword_count,re:w.r};if(w.second_best){r.second_best={language:w.second_best.language,kw:w.second_best.keyword_count,re:w.second_best.r}}}function n(){if(n.called){return}n.called=true;Array.prototype.map.call(document.getElementsByTagName(\"pre\"),b).filter(Boolean).forEach(function(o){m(o,hljs.tabReplace)})}function k(){window.addEventListener(\"DOMContentLoaded\",n,false);window.addEventListener(\"load\",n,false)}var e={};this.LANGUAGES=e;this.highlight=d;this.highlightAuto=g;this.fixMarkup=i;this.highlightBlock=m;this.initHighlighting=n;this.initHighlightingOnLoad=k;this.IR=\"[a-zA-Z][a-zA-Z0-9_]*\";this.UIR=\"[a-zA-Z_][a-zA-Z0-9_]*\";this.NR=\"\\\\b\\\\d+(\\\\.\\\\d+)?\";this.CNR=\"(\\\\b0[xX][a-fA-F0-9]+|(\\\\b\\\\d+(\\\\.\\\\d*)?|\\\\.\\\\d+)([eE][-+]?\\\\d+)?)\";this.BNR=\"\\\\b(0b[01]+)\";this.RSR=\"!|!=|!==|%|%=|&|&&|&=|\\\\*|\\\\*=|\\\\+|\\\\+=|,|\\\\.|-|-=|/|/=|:|;|<<|<<=|<=|<|===|==|=|>>>=|>>=|>=|>>>|>>|>|\\\\?|\\\\[|\\\\{|\\\\(|\\\\^|\\\\^=|\\\\||\\\\|=|\\\\|\\\\||~\";this.BE={b:\"\\\\\\\\[\\\\s\\\\S]\",r:0};this.ASM={cN:\"string\",b:\"'\",e:\"'\",i:\"\\\\n\",c:[this.BE],r:0};this.QSM={cN:\"string\",b:'\"',e:'\"',i:\"\\\\n\",c:[this.BE],r:0};this.CLCM={cN:\"comment\",b:\"//\",e:\"$\"};this.CBLCLM={cN:\"comment\",b:\"/\\\\*\",e:\"\\\\*/\"};this.HCM={cN:\"comment\",b:\"#\",e:\"$\"};this.NM={cN:\"number\",b:this.NR,r:0};this.CNM={cN:\"number\",b:this.CNR,r:0};this.BNM={cN:\"number\",b:this.BNR,r:0};this.REGEXP_MODE={cN:\"regexp\",b:/\\//,e:/\\/[gim]*/,i:/\\n/,c:[this.BE,{b:/\\[/,e:/\\]/,r:0,c:[this.BE]}]};this.inherit=function(q,r){var o={};for(var p in q){o[p]=q[p]}if(r){for(var p in r){o[p]=r[p]}}return o}}();hljs.LANGUAGES[\"1c\"]=function(b){var f=\"[a-zA-Zа-яА-Я][a-zA-Z0-9_а-яА-Я]*\";var c=\"возврат дата для если и или иначе иначеесли исключение конецесли конецпопытки конецпроцедуры конецфункции конеццикла константа не перейти перем перечисление по пока попытка прервать продолжить процедура строка тогда фс функция цикл число экспорт\";var e=\"ansitooem oemtoansi ввестивидсубконто ввестидату ввестизначение ввестиперечисление ввестипериод ввестиплансчетов ввестистроку ввестичисло вопрос восстановитьзначение врег выбранныйплансчетов вызватьисключение датагод датамесяц датачисло добавитьмесяц завершитьработусистемы заголовоксистемы записьжурналарегистрации запуститьприложение зафиксироватьтранзакцию значениевстроку значениевстрокувнутр значениевфайл значениеизстроки значениеизстрокивнутр значениеизфайла имякомпьютера имяпользователя каталогвременныхфайлов каталогиб каталогпользователя каталогпрограммы кодсимв командасистемы конгода конецпериодаби конецрассчитанногопериодаби конецстандартногоинтервала конквартала конмесяца коннедели лев лог лог10 макс максимальноеколичествосубконто мин монопольныйрежим названиеинтерфейса названиенабораправ назначитьвид назначитьсчет найти найтипомеченныенаудаление найтиссылки началопериодаби началостандартногоинтервала начатьтранзакцию начгода начквартала начмесяца начнедели номерднягода номерднянедели номернеделигода нрег обработкаожидания окр описаниеошибки основнойжурналрасчетов основнойплансчетов основнойязык открытьформу открытьформумодально отменитьтранзакцию очиститьокносообщений периодстр полноеимяпользователя получитьвремята получитьдатута получитьдокументта получитьзначенияотбора получитьпозициюта получитьпустоезначение получитьта прав праводоступа предупреждение префиксавтонумерации пустаястрока пустоезначение рабочаядаттьпустоезначение рабочаядата разделительстраниц разделительстрок разм разобратьпозициюдокумента рассчитатьрегистрына рассчитатьрегистрыпо сигнал симв символтабуляции создатьобъект сокрл сокрлп сокрп сообщить состояние сохранитьзначение сред статусвозврата стрдлина стрзаменить стрколичествострок стрполучитьстроку  стрчисловхождений сформироватьпозициюдокумента счетпокоду текущаядата текущеевремя типзначения типзначениястр удалитьобъекты установитьтана установитьтапо фиксшаблон формат цел шаблон\";var a={cN:\"dquote\",b:'\"\"'};var d={cN:\"string\",b:'\"',e:'\"|$',c:[a],r:0};var g={cN:\"string\",b:\"\\\\|\",e:'\"|$',c:[a]};return{cI:true,l:f,k:{keyword:c,built_in:e},c:[b.CLCM,b.NM,d,g,{cN:\"function\",b:\"(процедура|функция)\",e:\"$\",l:f,k:\"процедура функция\",c:[{cN:\"title\",b:f},{cN:\"tail\",eW:true,c:[{cN:\"params\",b:\"\\\\(\",e:\"\\\\)\",l:f,k:\"знач\",c:[d,g]},{cN:\"export\",b:\"экспорт\",eW:true,l:f,k:\"экспорт\",c:[b.CLCM]}]},b.CLCM]},{cN:\"preprocessor\",b:\"#\",e:\"$\"},{cN:\"date\",b:\"'\\\\d{2}\\\\.\\\\d{2}\\\\.(\\\\d{2}|\\\\d{4})'\"}]}}(hljs);hljs.LANGUAGES.actionscript=function(a){var d=\"[a-zA-Z_$][a-zA-Z0-9_$]*\";var c=\"([*]|[a-zA-Z_$][a-zA-Z0-9_$]*)\";var e={cN:\"rest_arg\",b:\"[.]{3}\",e:d,r:10};var b={cN:\"title\",b:d};return{k:{keyword:\"as break case catch class const continue default delete do dynamic each else extends final finally for function get if implements import in include instanceof interface internal is namespace native new override package private protected public return set static super switch this throw try typeof use var void while with\",literal:\"true false null undefined\"},c:[a.ASM,a.QSM,a.CLCM,a.CBLCLM,a.CNM,{cN:\"package\",bWK:true,e:\"{\",k:\"package\",c:[b]},{cN:\"class\",bWK:true,e:\"{\",k:\"class interface\",c:[{bWK:true,k:\"extends implements\"},b]},{cN:\"preprocessor\",bWK:true,e:\";\",k:\"import include\"},{cN:\"function\",bWK:true,e:\"[{;]\",k:\"function\",i:\"\\\\S\",c:[b,{cN:\"params\",b:\"\\\\(\",e:\"\\\\)\",c:[a.ASM,a.QSM,a.CLCM,a.CBLCLM,e]},{cN:\"type\",b:\":\",e:c,r:10}]}]}}(hljs);hljs.LANGUAGES.apache=function(a){var b={cN:\"number\",b:\"[\\\\$%]\\\\d+\"};return{cI:true,k:{keyword:\"acceptfilter acceptmutex acceptpathinfo accessfilename action addalt addaltbyencoding addaltbytype addcharset adddefaultcharset adddescription addencoding addhandler addicon addiconbyencoding addiconbytype addinputfilter addlanguage addmoduleinfo addoutputfilter addoutputfilterbytype addtype alias aliasmatch allow allowconnect allowencodedslashes allowoverride anonymous anonymous_logemail anonymous_mustgiveemail anonymous_nouserid anonymous_verifyemail authbasicauthoritative authbasicprovider authdbduserpwquery authdbduserrealmquery authdbmgroupfile authdbmtype authdbmuserfile authdefaultauthoritative authdigestalgorithm authdigestdomain authdigestnccheck authdigestnonceformat authdigestnoncelifetime authdigestprovider authdigestqop authdigestshmemsize authgroupfile authldapbinddn authldapbindpassword authldapcharsetconfig authldapcomparednonserver authldapdereferencealiases authldapgroupattribute authldapgroupattributeisdn authldapremoteuserattribute authldapremoteuserisdn authldapurl authname authnprovideralias authtype authuserfile authzdbmauthoritative authzdbmtype authzdefaultauthoritative authzgroupfileauthoritative authzldapauthoritative authzownerauthoritative authzuserauthoritative balancermember browsermatch browsermatchnocase bufferedlogs cachedefaultexpire cachedirlength cachedirlevels cachedisable cacheenable cachefile cacheignorecachecontrol cacheignoreheaders cacheignorenolastmod cacheignorequerystring cachelastmodifiedfactor cachemaxexpire cachemaxfilesize cacheminfilesize cachenegotiateddocs cacheroot cachestorenostore cachestoreprivate cgimapextension charsetdefault charsetoptions charsetsourceenc checkcaseonly checkspelling chrootdir contentdigest cookiedomain cookieexpires cookielog cookiename cookiestyle cookietracking coredumpdirectory customlog dav davdepthinfinity davgenericlockdb davlockdb davmintimeout dbdexptime dbdkeep dbdmax dbdmin dbdparams dbdpersist dbdpreparesql dbdriver defaulticon defaultlanguage defaulttype deflatebuffersize deflatecompressionlevel deflatefilternote deflatememlevel deflatewindowsize deny directoryindex directorymatch directoryslash documentroot dumpioinput dumpiologlevel dumpiooutput enableexceptionhook enablemmap enablesendfile errordocument errorlog example expiresactive expiresbytype expiresdefault extendedstatus extfilterdefine extfilteroptions fileetag filterchain filterdeclare filterprotocol filterprovider filtertrace forcelanguagepriority forcetype forensiclog gracefulshutdowntimeout group header headername hostnamelookups identitycheck identitychecktimeout imapbase imapdefault imapmenu include indexheadinsert indexignore indexoptions indexorderdefault indexstylesheet isapiappendlogtoerrors isapiappendlogtoquery isapicachefile isapifakeasync isapilognotsupported isapireadaheadbuffer keepalive keepalivetimeout languagepriority ldapcacheentries ldapcachettl ldapconnectiontimeout ldapopcacheentries ldapopcachettl ldapsharedcachefile ldapsharedcachesize ldaptrustedclientcert ldaptrustedglobalcert ldaptrustedmode ldapverifyservercert limitinternalrecursion limitrequestbody limitrequestfields limitrequestfieldsize limitrequestline limitxmlrequestbody listen listenbacklog loadfile loadmodule lockfile logformat loglevel maxclients maxkeepaliverequests maxmemfree maxrequestsperchild maxrequestsperthread maxspareservers maxsparethreads maxthreads mcachemaxobjectcount mcachemaxobjectsize mcachemaxstreamingbuffer mcacheminobjectsize mcacheremovalalgorithm mcachesize metadir metafiles metasuffix mimemagicfile minspareservers minsparethreads mmapfile mod_gzip_on mod_gzip_add_header_count mod_gzip_keep_workfiles mod_gzip_dechunk mod_gzip_min_http mod_gzip_minimum_file_size mod_gzip_maximum_file_size mod_gzip_maximum_inmem_size mod_gzip_temp_dir mod_gzip_item_include mod_gzip_item_exclude mod_gzip_command_version mod_gzip_can_negotiate mod_gzip_handle_methods mod_gzip_static_suffix mod_gzip_send_vary mod_gzip_update_static modmimeusepathinfo multiviewsmatch namevirtualhost noproxy nwssltrustedcerts nwsslupgradeable options order passenv pidfile protocolecho proxybadheader proxyblock proxydomain proxyerroroverride proxyftpdircharset proxyiobuffersize proxymaxforwards proxypass proxypassinterpolateenv proxypassmatch proxypassreverse proxypassreversecookiedomain proxypassreversecookiepath proxypreservehost proxyreceivebuffersize proxyremote proxyremotematch proxyrequests proxyset proxystatus proxytimeout proxyvia readmename receivebuffersize redirect redirectmatch redirectpermanent redirecttemp removecharset removeencoding removehandler removeinputfilter removelanguage removeoutputfilter removetype requestheader require rewritebase rewritecond rewriteengine rewritelock rewritelog rewriteloglevel rewritemap rewriteoptions rewriterule rlimitcpu rlimitmem rlimitnproc satisfy scoreboardfile script scriptalias scriptaliasmatch scriptinterpretersource scriptlog scriptlogbuffer scriptloglength scriptsock securelisten seerequesttail sendbuffersize serveradmin serveralias serverlimit servername serverpath serverroot serversignature servertokens setenv setenvif setenvifnocase sethandler setinputfilter setoutputfilter ssienableaccess ssiendtag ssierrormsg ssistarttag ssitimeformat ssiundefinedecho sslcacertificatefile sslcacertificatepath sslcadnrequestfile sslcadnrequestpath sslcarevocationfile sslcarevocationpath sslcertificatechainfile sslcertificatefile sslcertificatekeyfile sslciphersuite sslcryptodevice sslengine sslhonorciperorder sslmutex ssloptions sslpassphrasedialog sslprotocol sslproxycacertificatefile sslproxycacertificatepath sslproxycarevocationfile sslproxycarevocationpath sslproxyciphersuite sslproxyengine sslproxymachinecertificatefile sslproxymachinecertificatepath sslproxyprotocol sslproxyverify sslproxyverifydepth sslrandomseed sslrequire sslrequiressl sslsessioncache sslsessioncachetimeout sslusername sslverifyclient sslverifydepth startservers startthreads substitute suexecusergroup threadlimit threadsperchild threadstacksize timeout traceenable transferlog typesconfig unsetenv usecanonicalname usecanonicalphysicalport user userdir virtualdocumentroot virtualdocumentrootip virtualscriptalias virtualscriptaliasip win32disableacceptex xbithack\",literal:\"on off\"},c:[a.HCM,{cN:\"sqbracket\",b:\"\\\\s\\\\[\",e:\"\\\\]$\"},{cN:\"cbracket\",b:\"[\\\\$%]\\\\{\",e:\"\\\\}\",c:[\"self\",b]},b,{cN:\"tag\",b:\"</?\",e:\">\"},a.QSM]}}(hljs);hljs.LANGUAGES.applescript=function(a){var b=a.inherit(a.QSM,{i:\"\"});var e={cN:\"title\",b:a.UIR};var d={cN:\"params\",b:\"\\\\(\",e:\"\\\\)\",c:[\"self\",a.CNM,b]};var c=[{cN:\"comment\",b:\"--\",e:\"$\",},{cN:\"comment\",b:\"\\\\(\\\\*\",e:\"\\\\*\\\\)\",c:[\"self\",{b:\"--\",e:\"$\"}]},a.HCM];return{k:{keyword:\"about above after against and around as at back before beginning behind below beneath beside between but by considering contain contains continue copy div does eighth else end equal equals error every exit fifth first for fourth from front get given global if ignoring in into is it its last local me middle mod my ninth not of on onto or over prop property put ref reference repeat returning script second set seventh since sixth some tell tenth that the then third through thru timeout times to transaction try until where while whose with without\",constant:\"AppleScript false linefeed return pi quote result space tab true\",type:\"alias application boolean class constant date file integer list number real record string text\",command:\"activate beep count delay launch log offset read round run say summarize write\",property:\"character characters contents day frontmost id item length month name paragraph paragraphs rest reverse running time version weekday word words year\"},c:[b,a.CNM,{cN:\"type\",b:\"\\\\bPOSIX file\\\\b\"},{cN:\"command\",b:\"\\\\b(clipboard info|the clipboard|info for|list (disks|folder)|mount volume|path to|(close|open for) access|(get|set) eof|current date|do shell script|get volume settings|random number|set volume|system attribute|system info|time to GMT|(load|run|store) script|scripting components|ASCII (character|number)|localized string|choose (application|color|file|file name|folder|from list|remote application|URL)|display (alert|dialog))\\\\b|^\\\\s*return\\\\b\"},{cN:\"constant\",b:\"\\\\b(text item delimiters|current application|missing value)\\\\b\"},{cN:\"keyword\",b:\"\\\\b(apart from|aside from|instead of|out of|greater than|isn't|(doesn't|does not) (equal|come before|come after|contain)|(greater|less) than( or equal)?|(starts?|ends|begins?) with|contained by|comes (before|after)|a (ref|reference))\\\\b\"},{cN:\"property\",b:\"\\\\b(POSIX path|(date|time) string|quoted form)\\\\b\"},{cN:\"function_start\",bWK:true,k:\"on\",i:\"[${=;\\\\n]\",c:[e,d]}].concat(c),i:\"//\"}}(hljs);hljs.LANGUAGES.xml=function(a){var c=\"[A-Za-z0-9\\\\._:-]+\";var b={eW:true,r:0,c:[{cN:\"attribute\",b:c,r:0},{b:'=\"',rB:true,e:'\"',c:[{cN:\"value\",b:'\"',eW:true}]},{b:\"='\",rB:true,e:\"'\",c:[{cN:\"value\",b:\"'\",eW:true}]},{b:\"=\",c:[{cN:\"value\",b:\"[^\\\\s/>]+\"}]}]};return{cI:true,c:[{cN:\"pi\",b:\"<\\\\?\",e:\"\\\\?>\",r:10},{cN:\"doctype\",b:\"<!DOCTYPE\",e:\">\",r:10,c:[{b:\"\\\\[\",e:\"\\\\]\"}]},{cN:\"comment\",b:\"<!--\",e:\"-->\",r:10},{cN:\"cdata\",b:\"<\\\\!\\\\[CDATA\\\\[\",e:\"\\\\]\\\\]>\",r:10},{cN:\"tag\",b:\"<style(?=\\\\s|>|$)\",e:\">\",k:{title:\"style\"},c:[b],starts:{e:\"</style>\",rE:true,sL:\"css\"}},{cN:\"tag\",b:\"<script(?=\\\\s|>|$)\",e:\">\",k:{title:\"script\"},c:[b],starts:{e:\"<\\/script>\",rE:true,sL:\"javascript\"}},{b:\"<%\",e:\"%>\",sL:\"vbscript\"},{cN:\"tag\",b:\"</?\",e:\"/?>\",r:0,c:[{cN:\"title\",b:\"[^ /><]+\"},b]}]}}(hljs);hljs.LANGUAGES.asciidoc=function(a){return{c:[{cN:\"comment\",b:\"^/{4,}\\\\n\",e:\"\\\\n/{4,}$\",r:10},{cN:\"comment\",b:\"^//\",e:\"$\",r:0},{cN:\"title\",b:\"^\\\\.\\\\w.*$\"},{b:\"^[=\\\\*]{4,}\\\\n\",e:\"\\\\n^[=\\\\*]{4,}$\",r:10},{cN:\"header\",b:\"^(={1,5}) .+?( \\\\1)?$\",r:10},{cN:\"header\",b:\"^[^\\\\[\\\\]\\\\n]+?\\\\n[=\\\\-~\\\\^\\\\+]{2,}$\",r:10},{cN:\"attribute\",b:\"^:.+?:\",e:\"\\\\s\",eE:true,r:10},{cN:\"attribute\",b:\"^\\\\[.+?\\\\]$\",r:0},{cN:\"blockquote\",b:\"^_{4,}\\\\n\",e:\"\\\\n_{4,}$\",r:10},{cN:\"code\",b:\"^[\\\\-\\\\.]{4,}\\\\n\",e:\"\\\\n[\\\\-\\\\.]{4,}$\",r:10},{b:\"^\\\\+{4,}\\\\n\",e:\"\\\\n\\\\+{4,}$\",c:[{b:\"<\",e:\">\",sL:\"xml\",r:0}],r:10},{cN:\"bullet\",b:\"^(\\\\*+|\\\\-+|\\\\.+|[^\\\\n]+?::)\\\\s+\"},{cN:\"label\",b:\"^(NOTE|TIP|IMPORTANT|WARNING|CAUTION):\\\\s+\",r:10},{cN:\"strong\",b:\"\\\\B\\\\*(?![\\\\*\\\\s])\",e:\"(\\\\n{2}|\\\\*)\",c:[{b:\"\\\\\\\\*\\\\w\",r:0}]},{cN:\"emphasis\",b:\"\\\\B'(?!['\\\\s])\",e:\"(\\\\n{2}|')\",c:[{b:\"\\\\\\\\'\\\\w\",r:0}],r:0},{cN:\"emphasis\",b:\"_(?![_\\\\s])\",e:\"(\\\\n{2}|_)\",r:0},{cN:\"code\",b:\"(`.+?`|\\\\+.+?\\\\+)\",r:0},{cN:\"code\",b:\"^[ \\\\t]\",e:\"$\",r:0},{cN:\"horizontal_rule\",b:\"^'{4,}[ \\\\t]*$\",r:10},{b:\"(link:)?(http|https|ftp|file|irc|image:?):\\\\S+\\\\[.*?\\\\]\",rB:true,c:[{b:\"(link|image:?):\",r:0},{cN:\"link_url\",b:\"\\\\w\",e:\"[^\\\\[]+\",r:0},{cN:\"link_label\",b:\"\\\\[\",e:\"\\\\]\",eB:true,eE:true,r:0}],r:10}]}}(hljs);hljs.LANGUAGES.avrasm=function(a){return{cI:true,k:{keyword:\"adc add adiw and andi asr bclr bld brbc brbs brcc brcs break breq brge brhc brhs brid brie brlo brlt brmi brne brpl brsh brtc brts brvc brvs bset bst call cbi cbr clc clh cli cln clr cls clt clv clz com cp cpc cpi cpse dec eicall eijmp elpm eor fmul fmuls fmulsu icall ijmp in inc jmp ld ldd ldi lds lpm lsl lsr mov movw mul muls mulsu neg nop or ori out pop push rcall ret reti rjmp rol ror sbc sbr sbrc sbrs sec seh sbi sbci sbic sbis sbiw sei sen ser ses set sev sez sleep spm st std sts sub subi swap tst wdr\",built_in:\"r0 r1 r2 r3 r4 r5 r6 r7 r8 r9 r10 r11 r12 r13 r14 r15 r16 r17 r18 r19 r20 r21 r22 r23 r24 r25 r26 r27 r28 r29 r30 r31 x|0 xh xl y|0 yh yl z|0 zh zl ucsr1c udr1 ucsr1a ucsr1b ubrr1l ubrr1h ucsr0c ubrr0h tccr3c tccr3a tccr3b tcnt3h tcnt3l ocr3ah ocr3al ocr3bh ocr3bl ocr3ch ocr3cl icr3h icr3l etimsk etifr tccr1c ocr1ch ocr1cl twcr twdr twar twsr twbr osccal xmcra xmcrb eicra spmcsr spmcr portg ddrg ping portf ddrf sreg sph spl xdiv rampz eicrb eimsk gimsk gicr eifr gifr timsk tifr mcucr mcucsr tccr0 tcnt0 ocr0 assr tccr1a tccr1b tcnt1h tcnt1l ocr1ah ocr1al ocr1bh ocr1bl icr1h icr1l tccr2 tcnt2 ocr2 ocdr wdtcr sfior eearh eearl eedr eecr porta ddra pina portb ddrb pinb portc ddrc pinc portd ddrd pind spdr spsr spcr udr0 ucsr0a ucsr0b ubrr0l acsr admux adcsr adch adcl porte ddre pine pinf\"},c:[a.CBLCLM,{cN:\"comment\",b:\";\",e:\"$\"},a.CNM,a.BNM,{cN:\"number\",b:\"\\\\b(\\\\$[a-zA-Z0-9]+|0o[0-7]+)\"},a.QSM,{cN:\"string\",b:\"'\",e:\"[^\\\\\\\\]'\",i:\"[^\\\\\\\\][^']\"},{cN:\"label\",b:\"^[A-Za-z0-9_.$]+:\"},{cN:\"preprocessor\",b:\"#\",e:\"$\"},{cN:\"preprocessor\",b:\"\\\\.[a-zA-Z]+\"},{cN:\"localvars\",b:\"@[0-9]+\"}]}}(hljs);hljs.LANGUAGES.axapta=function(a){return{k:\"false int abstract private char boolean static null if for true while long throw finally protected final return void enum else break new catch byte super case short default double public try this switch continue reverse firstfast firstonly forupdate nofetch sum avg minof maxof count order group by asc desc index hint like dispaly edit client server ttsbegin ttscommit str real date container anytype common div mod\",c:[a.CLCM,a.CBLCLM,a.ASM,a.QSM,a.CNM,{cN:\"preprocessor\",b:\"#\",e:\"$\"},{cN:\"class\",bWK:true,e:\"{\",i:\":\",k:\"class interface\",c:[{cN:\"inheritance\",bWK:true,k:\"extends implements\",r:10},{cN:\"title\",b:a.UIR}]}]}}(hljs);hljs.LANGUAGES.bash=function(a){var c={cN:\"variable\",b:/\\$[\\w\\d#@][\\w\\d_]*/};var b={cN:\"variable\",b:/\\$\\{(.*?)\\}/};var e={cN:\"string\",b:/\"/,e:/\"/,c:[a.BE,c,b,{cN:\"variable\",b:/\\$\\(/,e:/\\)/,c:a.BE}],r:0};var d={cN:\"string\",b:/'/,e:/'/,r:0};return{l:/-?[a-z]+/,k:{keyword:\"if then else elif fi for break continue while in do done exit return set declare case esac export exec\",literal:\"true false\",built_in:\"printf echo read cd pwd pushd popd dirs let eval unset typeset readonly getopts source shopt caller type hash bind help sudo\",operator:\"-ne -eq -lt -gt -f -d -e -s -l -a\"},c:[{cN:\"shebang\",b:/^#![^\\n]+sh\\s*$/,r:10},{cN:\"function\",b:/\\w[\\w\\d_]*\\s*\\(\\s*\\)\\s*\\{/,rB:true,c:[{cN:\"title\",b:/\\w[\\w\\d_]*/}],r:0},a.HCM,a.NM,e,d,c,b]}}(hljs);hljs.LANGUAGES.brainfuck=function(a){return{c:[{cN:\"comment\",b:\"[^\\\\[\\\\]\\\\.,\\\\+\\\\-<> \\r\\n]\",eE:true,e:\"[\\\\[\\\\]\\\\.,\\\\+\\\\-<> \\r\\n]\",r:0},{cN:\"title\",b:\"[\\\\[\\\\]]\",r:0},{cN:\"string\",b:\"[\\\\.,]\"},{cN:\"literal\",b:\"[\\\\+\\\\-]\"}]}}(hljs);hljs.LANGUAGES.clojure=function(l){var e={built_in:\"def cond apply if-not if-let if not not= = &lt; < > &lt;= <= >= == + / * - rem quot neg? pos? delay? symbol? keyword? true? false? integer? empty? coll? list? set? ifn? fn? associative? sequential? sorted? counted? reversible? number? decimal? class? distinct? isa? float? rational? reduced? ratio? odd? even? char? seq? vector? string? map? nil? contains? zero? instance? not-every? not-any? libspec? -> ->> .. . inc compare do dotimes mapcat take remove take-while drop letfn drop-last take-last drop-while while intern condp case reduced cycle split-at split-with repeat replicate iterate range merge zipmap declare line-seq sort comparator sort-by dorun doall nthnext nthrest partition eval doseq await await-for let agent atom send send-off release-pending-sends add-watch mapv filterv remove-watch agent-error restart-agent set-error-handler error-handler set-error-mode! error-mode shutdown-agents quote var fn loop recur throw try monitor-enter monitor-exit defmacro defn defn- macroexpand macroexpand-1 for doseq dosync dotimes and or when when-not when-let comp juxt partial sequence memoize constantly complement identity assert peek pop doto proxy defstruct first rest cons defprotocol cast coll deftype defrecord last butlast sigs reify second ffirst fnext nfirst nnext defmulti defmethod meta with-meta ns in-ns create-ns import intern refer keys select-keys vals key val rseq name namespace promise into transient persistent! conj! assoc! dissoc! pop! disj! import use class type num float double short byte boolean bigint biginteger bigdec print-method print-dup throw-if throw printf format load compile get-in update-in pr pr-on newline flush read slurp read-line subvec with-open memfn time ns assert re-find re-groups rand-int rand mod locking assert-valid-fdecl alias namespace resolve ref deref refset swap! reset! set-validator! compare-and-set! alter-meta! reset-meta! commute get-validator alter ref-set ref-history-count ref-min-history ref-max-history ensure sync io! new next conj set! memfn to-array future future-call into-array aset gen-class reduce merge map filter find empty hash-map hash-set sorted-map sorted-map-by sorted-set sorted-set-by vec vector seq flatten reverse assoc dissoc list disj get union difference intersection extend extend-type extend-protocol int nth delay count concat chunk chunk-buffer chunk-append chunk-first chunk-rest max min dec unchecked-inc-int unchecked-inc unchecked-dec-inc unchecked-dec unchecked-negate unchecked-add-int unchecked-add unchecked-subtract-int unchecked-subtract chunk-next chunk-cons chunked-seq? prn vary-meta lazy-seq spread list* str find-keyword keyword symbol gensym force rationalize\"};var f=\"[a-zA-Z_0-9\\\\!\\\\.\\\\?\\\\-\\\\+\\\\*\\\\/\\\\<\\\\=\\\\>\\\\&\\\\#\\\\$';]+\";var a=\"[\\\\s:\\\\(\\\\{]+\\\\d+(\\\\.\\\\d+)?\";var d={cN:\"number\",b:a,r:0};var j={cN:\"string\",b:'\"',e:'\"',c:[l.BE],r:0};var o={cN:\"comment\",b:\";\",e:\"$\",r:0};var n={cN:\"collection\",b:\"[\\\\[\\\\{]\",e:\"[\\\\]\\\\}]\"};var c={cN:\"comment\",b:\"\\\\^\"+f};var b={cN:\"comment\",b:\"\\\\^\\\\{\",e:\"\\\\}\"};var h={cN:\"attribute\",b:\"[:]\"+f};var m={cN:\"list\",b:\"\\\\(\",e:\"\\\\)\"};var g={eW:true,k:{literal:\"true false nil\"},r:0};var i={k:e,l:f,cN:\"title\",b:f,starts:g};m.c=[{cN:\"comment\",b:\"comment\"},i];g.c=[m,j,c,b,o,h,n,d];n.c=[m,j,c,o,h,n,d];return{i:\"\\\\S\",c:[o,m]}}(hljs);hljs.LANGUAGES.cmake=function(a){return{cI:true,k:\"add_custom_command add_custom_target add_definitions add_dependencies add_executable add_library add_subdirectory add_test aux_source_directory break build_command cmake_minimum_required cmake_policy configure_file create_test_sourcelist define_property else elseif enable_language enable_testing endforeach endfunction endif endmacro endwhile execute_process export find_file find_library find_package find_path find_program fltk_wrap_ui foreach function get_cmake_property get_directory_property get_filename_component get_property get_source_file_property get_target_property get_test_property if include include_directories include_external_msproject include_regular_expression install link_directories load_cache load_command macro mark_as_advanced message option output_required_files project qt_wrap_cpp qt_wrap_ui remove_definitions return separate_arguments set set_directory_properties set_property set_source_files_properties set_target_properties set_tests_properties site_name source_group string target_link_libraries try_compile try_run unset variable_watch while build_name exec_program export_library_dependencies install_files install_programs install_targets link_libraries make_directory remove subdir_depends subdirs use_mangled_mesa utility_source variable_requires write_file\",c:[{cN:\"envvar\",b:\"\\\\${\",e:\"}\"},a.HCM,a.QSM,a.NM]}}(hljs);hljs.LANGUAGES.coffeescript=function(c){var b={keyword:\"in if for while finally new do return else break catch instanceof throw try this switch continue typeof delete debugger super then unless until loop of by when and or is isnt not\",literal:\"true false null undefined yes no on off\",reserved:\"case default function var void with const let enum export import native __hasProp __extends __slice __bind __indexOf\",built_in:\"npm require console print module exports global window document\"};var a=\"[A-Za-z$_][0-9A-Za-z$_]*\";var f={cN:\"title\",b:a};var e={cN:\"subst\",b:\"#\\\\{\",e:\"}\",k:b,};var d=[c.BNM,c.inherit(c.CNM,{starts:{e:\"(\\\\s*/)?\",r:0}}),{cN:\"string\",b:\"'''\",e:\"'''\",c:[c.BE]},{cN:\"string\",b:\"'\",e:\"'\",c:[c.BE],r:0},{cN:\"string\",b:'\"\"\"',e:'\"\"\"',c:[c.BE,e]},{cN:\"string\",b:'\"',e:'\"',c:[c.BE,e],r:0},{cN:\"regexp\",b:\"///\",e:\"///\",c:[c.HCM]},{cN:\"regexp\",b:\"//[gim]*\",r:0},{cN:\"regexp\",b:\"/\\\\S(\\\\\\\\.|[^\\\\n])*?/[gim]*(?=\\\\s|\\\\W|$)\"},{cN:\"property\",b:\"@\"+a},{b:\"`\",e:\"`\",eB:true,eE:true,sL:\"javascript\"}];e.c=d;return{k:b,c:d.concat([{cN:\"comment\",b:\"###\",e:\"###\"},c.HCM,{cN:\"function\",b:\"(\"+a+\"\\\\s*=\\\\s*)?(\\\\(.*\\\\))?\\\\s*[-=]>\",e:\"[-=]>\",rB:true,c:[f,{cN:\"params\",b:\"\\\\(\",rB:true,c:[{b:/\\(/,e:/\\)/,k:b,c:[\"self\"].concat(d)}]}]},{cN:\"class\",bWK:true,k:\"class\",e:\"$\",i:\"[:\\\\[\\\\]]\",c:[{bWK:true,k:\"extends\",eW:true,i:\":\",c:[f]},f]},{cN:\"attribute\",b:a+\":\",e:\":\",rB:true,eE:true}])}}(hljs);hljs.LANGUAGES.cpp=function(a){var b={keyword:\"false int float while private char catch export virtual operator sizeof dynamic_cast|10 typedef const_cast|10 const struct for static_cast|10 union namespace unsigned long throw volatile static protected bool template mutable if public friend do return goto auto void enum else break new extern using true class asm case typeid short reinterpret_cast|10 default double register explicit signed typename try this switch continue wchar_t inline delete alignof char16_t char32_t constexpr decltype noexcept nullptr static_assert thread_local restrict _Bool complex\",built_in:\"std string cin cout cerr clog stringstream istringstream ostringstream auto_ptr deque list queue stack vector map set bitset multiset multimap unordered_set unordered_map unordered_multiset unordered_multimap array shared_ptr\"};return{k:b,i:\"</\",c:[a.CLCM,a.CBLCLM,a.QSM,{cN:\"string\",b:\"'\\\\\\\\?.\",e:\"'\",i:\".\"},{cN:\"number\",b:\"\\\\b(\\\\d+(\\\\.\\\\d*)?|\\\\.\\\\d+)(u|U|l|L|ul|UL|f|F)\"},a.CNM,{cN:\"preprocessor\",b:\"#\",e:\"$\",c:[{b:\"<\",e:\">\",i:\"\\\\n\"},a.CLCM]},{cN:\"stl_container\",b:\"\\\\b(deque|list|queue|stack|vector|map|set|bitset|multiset|multimap|unordered_map|unordered_set|unordered_multiset|unordered_multimap|array)\\\\s*<\",e:\">\",k:b,r:10,c:[\"self\"]}]}}(hljs);hljs.LANGUAGES.cs=function(a){return{k:\"abstract as base bool break byte case catch char checked class const continue decimal default delegate do double else enum event explicit extern false finally fixed float for foreach goto if implicit in int interface internal is lock long namespace new null object operator out override params private protected public readonly ref return sbyte sealed short sizeof stackalloc static string struct switch this throw true try typeof uint ulong unchecked unsafe ushort using virtual volatile void while async await ascending descending from get group into join let orderby partial select set value var where yield\",c:[{cN:\"comment\",b:\"///\",e:\"$\",rB:true,c:[{cN:\"xmlDocTag\",b:\"///|<!--|-->\"},{cN:\"xmlDocTag\",b:\"</?\",e:\">\"}]},a.CLCM,a.CBLCLM,{cN:\"preprocessor\",b:\"#\",e:\"$\",k:\"if else elif endif define undef warning error line region endregion pragma checksum\"},{cN:\"string\",b:'@\"',e:'\"',c:[{b:'\"\"'}]},a.ASM,a.QSM,a.CNM]}}(hljs);hljs.LANGUAGES.css=function(a){var b=\"[a-zA-Z-][a-zA-Z0-9_-]*\";var c={cN:\"function\",b:b+\"\\\\(\",e:\"\\\\)\",c:[\"self\",a.NM,a.ASM,a.QSM]};return{cI:true,i:\"[=/|']\",c:[a.CBLCLM,{cN:\"id\",b:\"\\\\#[A-Za-z0-9_-]+\"},{cN:\"class\",b:\"\\\\.[A-Za-z0-9_-]+\",r:0},{cN:\"attr_selector\",b:\"\\\\[\",e:\"\\\\]\",i:\"$\"},{cN:\"pseudo\",b:\":(:)?[a-zA-Z0-9\\\\_\\\\-\\\\+\\\\(\\\\)\\\\\\\"\\\\']+\"},{cN:\"at_rule\",b:\"@(font-face|page)\",l:\"[a-z-]+\",k:\"font-face page\"},{cN:\"at_rule\",b:\"@\",e:\"[{;]\",c:[{cN:\"keyword\",b:/\\S+/},{b:/\\s/,eW:true,eE:true,r:0,c:[c,a.ASM,a.QSM,a.NM]}]},{cN:\"tag\",b:b,r:0},{cN:\"rules\",b:\"{\",e:\"}\",i:\"[^\\\\s]\",r:0,c:[a.CBLCLM,{cN:\"rule\",b:\"[^\\\\s]\",rB:true,e:\";\",eW:true,c:[{cN:\"attribute\",b:\"[A-Z\\\\_\\\\.\\\\-]+\",e:\":\",eE:true,i:\"[^\\\\s]\",starts:{cN:\"value\",eW:true,eE:true,c:[c,a.NM,a.QSM,a.ASM,a.CBLCLM,{cN:\"hexcolor\",b:\"#[0-9A-Fa-f]+\"},{cN:\"important\",b:\"!important\"}]}}]}]}]}}(hljs);hljs.LANGUAGES.d=function(x){var b={keyword:\"abstract alias align asm assert auto body break byte case cast catch class const continue debug default delete deprecated do else enum export extern final finally for foreach foreach_reverse|10 goto if immutable import in inout int interface invariant is lazy macro mixin module new nothrow out override package pragma private protected public pure ref return scope shared static struct super switch synchronized template this throw try typedef typeid typeof union unittest version void volatile while with __FILE__ __LINE__ __gshared|10 __thread __traits __DATE__ __EOF__ __TIME__ __TIMESTAMP__ __VENDOR__ __VERSION__\",built_in:\"bool cdouble cent cfloat char creal dchar delegate double dstring float function idouble ifloat ireal long real short string ubyte ucent uint ulong ushort wchar wstring\",literal:\"false null true\"};var c=\"(0|[1-9][\\\\d_]*)\",q=\"(0|[1-9][\\\\d_]*|\\\\d[\\\\d_]*|[\\\\d_]+?\\\\d)\",h=\"0[bB][01_]+\",v=\"([\\\\da-fA-F][\\\\da-fA-F_]*|_[\\\\da-fA-F][\\\\da-fA-F_]*)\",y=\"0[xX]\"+v,p=\"([eE][+-]?\"+q+\")\",o=\"(\"+q+\"(\\\\.\\\\d*|\"+p+\")|\\\\d+\\\\.\"+q+q+\"|\\\\.\"+c+p+\"?)\",k=\"(0[xX](\"+v+\"\\\\.\"+v+\"|\\\\.?\"+v+\")[pP][+-]?\"+q+\")\",l=\"(\"+c+\"|\"+h+\"|\"+y+\")\",n=\"(\"+k+\"|\"+o+\")\";var z=\"\\\\\\\\(['\\\"\\\\?\\\\\\\\abfnrtv]|u[\\\\dA-Fa-f]{4}|[0-7]{1,3}|x[\\\\dA-Fa-f]{2}|U[\\\\dA-Fa-f]{8})|&[a-zA-Z\\\\d]{2,};\";var m={cN:\"number\",b:\"\\\\b\"+l+\"(L|u|U|Lu|LU|uL|UL)?\",r:0};var j={cN:\"number\",b:\"\\\\b(\"+n+\"([fF]|L|i|[fF]i|Li)?|\"+l+\"(i|[fF]i|Li))\",r:0};var s={cN:\"string\",b:\"'(\"+z+\"|.)\",e:\"'\",i:\".\"};var r={b:z,r:0};var w={cN:\"string\",b:'\"',c:[r],e:'\"[cwd]?',r:0};var f={cN:\"string\",b:'[rq]\"',e:'\"[cwd]?',r:5};var u={cN:\"string\",b:\"`\",e:\"`[cwd]?\"};var i={cN:\"string\",b:'x\"[\\\\da-fA-F\\\\s\\\\n\\\\r]*\"[cwd]?',r:10};var t={cN:\"string\",b:'q\"\\\\{',e:'\\\\}\"'};var e={cN:\"shebang\",b:\"^#!\",e:\"$\",r:5};var g={cN:\"preprocessor\",b:\"#(line)\",e:\"$\",r:5};var d={cN:\"keyword\",b:\"@[a-zA-Z_][a-zA-Z_\\\\d]*\"};var a={cN:\"comment\",b:\"\\\\/\\\\+\",c:[\"self\"],e:\"\\\\+\\\\/\",r:10};return{l:x.UIR,k:b,c:[x.CLCM,x.CBLCLM,a,i,w,f,u,t,j,m,s,e,g,d]}}(hljs);hljs.LANGUAGES.delphi=function(b){var f=\"and safecall cdecl then string exports library not pascal set virtual file in array label packed end. index while const raise for to implementation with except overload destructor downto finally program exit unit inherited override if type until function do begin repeat goto nil far initialization object else var uses external resourcestring interface end finalization class asm mod case on shr shl of register xorwrite threadvar try record near stored constructor stdcall inline div out or procedure\";var e=\"safecall stdcall pascal stored const implementation finalization except to finally program inherited override then exports string read not mod shr try div shl set library message packed index for near overload label downto exit public goto interface asm on of constructor or private array unit raise destructor var type until function else external with case default record while protected property procedure published and cdecl do threadvar file in if end virtual write far out begin repeat nil initialization object uses resourcestring class register xorwrite inline static\";var a={cN:\"comment\",b:\"{\",e:\"}\",r:0};var g={cN:\"comment\",b:\"\\\\(\\\\*\",e:\"\\\\*\\\\)\",r:10};var c={cN:\"string\",b:\"'\",e:\"'\",c:[{b:\"''\"}],r:0};var d={cN:\"string\",b:\"(#\\\\d+)+\"};var h={cN:\"function\",bWK:true,e:\"[:;]\",k:\"function constructor|10 destructor|10 procedure|10\",c:[{cN:\"title\",b:b.IR},{cN:\"params\",b:\"\\\\(\",e:\"\\\\)\",k:f,c:[c,d]},a,g]};return{cI:true,k:f,i:'(\"|\\\\$[G-Zg-z]|\\\\/\\\\*|</)',c:[a,g,b.CLCM,c,d,b.NM,h,{cN:\"class\",b:\"=\\\\bclass\\\\b\",e:\"end;\",k:e,c:[c,d,a,g,b.CLCM,h]}]}}(hljs);hljs.LANGUAGES.diff=function(a){return{c:[{cN:\"chunk\",b:\"^\\\\@\\\\@ +\\\\-\\\\d+,\\\\d+ +\\\\+\\\\d+,\\\\d+ +\\\\@\\\\@$\",r:10},{cN:\"chunk\",b:\"^\\\\*\\\\*\\\\* +\\\\d+,\\\\d+ +\\\\*\\\\*\\\\*\\\\*$\",r:10},{cN:\"chunk\",b:\"^\\\\-\\\\-\\\\- +\\\\d+,\\\\d+ +\\\\-\\\\-\\\\-\\\\-$\",r:10},{cN:\"header\",b:\"Index: \",e:\"$\"},{cN:\"header\",b:\"=====\",e:\"=====$\"},{cN:\"header\",b:\"^\\\\-\\\\-\\\\-\",e:\"$\"},{cN:\"header\",b:\"^\\\\*{3} \",e:\"$\"},{cN:\"header\",b:\"^\\\\+\\\\+\\\\+\",e:\"$\"},{cN:\"header\",b:\"\\\\*{5}\",e:\"\\\\*{5}$\"},{cN:\"addition\",b:\"^\\\\+\",e:\"$\"},{cN:\"deletion\",b:\"^\\\\-\",e:\"$\"},{cN:\"change\",b:\"^\\\\!\",e:\"$\"}]}}(hljs);hljs.LANGUAGES.django=function(c){function e(h,g){return(g==undefined||(!h.cN&&g.cN==\"tag\")||h.cN==\"value\")}function f(l,k){var g={};for(var j in l){if(j!=\"contains\"){g[j]=l[j]}var m=[];for(var h=0;l.c&&h<l.c.length;h++){m.push(f(l.c[h],l))}if(e(l,k)){m=b.concat(m)}if(m.length){g.c=m}}return g}var d={cN:\"filter\",b:\"\\\\|[A-Za-z]+\\\\:?\",k:\"truncatewords removetags linebreaksbr yesno get_digit timesince random striptags filesizeformat escape linebreaks length_is ljust rjust cut urlize fix_ampersands title floatformat capfirst pprint divisibleby add make_list unordered_list urlencode timeuntil urlizetrunc wordcount stringformat linenumbers slice date dictsort dictsortreversed default_if_none pluralize lower join center default truncatewords_html upper length phone2numeric wordwrap time addslashes slugify first escapejs force_escape iriencode last safe safeseq truncatechars localize unlocalize localtime utc timezone\",c:[{cN:\"argument\",b:'\"',e:'\"'}]};var b=[{cN:\"template_comment\",b:\"{%\\\\s*comment\\\\s*%}\",e:\"{%\\\\s*endcomment\\\\s*%}\"},{cN:\"template_comment\",b:\"{#\",e:\"#}\"},{cN:\"template_tag\",b:\"{%\",e:\"%}\",k:\"comment endcomment load templatetag ifchanged endifchanged if endif firstof for endfor in ifnotequal endifnotequal widthratio extends include spaceless endspaceless regroup by as ifequal endifequal ssi now with cycle url filter endfilter debug block endblock else autoescape endautoescape csrf_token empty elif endwith static trans blocktrans endblocktrans get_static_prefix get_media_prefix plural get_current_language language get_available_languages get_current_language_bidi get_language_info get_language_info_list localize endlocalize localtime endlocaltime timezone endtimezone get_current_timezone verbatim\",c:[d]},{cN:\"variable\",b:\"{{\",e:\"}}\",c:[d]}];var a=f(c.LANGUAGES.xml);a.cI=true;return a}(hljs);hljs.LANGUAGES.dos=function(a){return{cI:true,k:{flow:\"if else goto for in do call exit not exist errorlevel defined equ neq lss leq gtr geq\",keyword:\"shift cd dir echo setlocal endlocal set pause copy\",stream:\"prn nul lpt3 lpt2 lpt1 con com4 com3 com2 com1 aux\",winutils:\"ping net ipconfig taskkill xcopy ren del\"},c:[{cN:\"envvar\",b:\"%%[^ ]\"},{cN:\"envvar\",b:\"%[^ ]+?%\"},{cN:\"envvar\",b:\"![^ ]+?!\"},{cN:\"number\",b:\"\\\\b\\\\d+\",r:0},{cN:\"comment\",b:\"@?rem\",e:\"$\"}]}}(hljs);hljs.LANGUAGES[\"erlang-repl\"]=function(a){return{k:{special_functions:\"spawn spawn_link self\",reserved:\"after and andalso|10 band begin bnot bor bsl bsr bxor case catch cond div end fun if let not of or orelse|10 query receive rem try when xor\"},c:[{cN:\"prompt\",b:\"^[0-9]+> \",r:10},{cN:\"comment\",b:\"%\",e:\"$\"},{cN:\"number\",b:\"\\\\b(\\\\d+#[a-fA-F0-9]+|\\\\d+(\\\\.\\\\d+)?([eE][-+]?\\\\d+)?)\",r:0},a.ASM,a.QSM,{cN:\"constant\",b:\"\\\\?(::)?([A-Z]\\\\w*(::)?)+\"},{cN:\"arrow\",b:\"->\"},{cN:\"ok\",b:\"ok\"},{cN:\"exclamation_mark\",b:\"!\"},{cN:\"function_or_atom\",b:\"(\\\\b[a-z'][a-zA-Z0-9_']*:[a-z'][a-zA-Z0-9_']*)|(\\\\b[a-z'][a-zA-Z0-9_']*)\",r:0},{cN:\"variable\",b:\"[A-Z][a-zA-Z0-9_']*\",r:0}]}}(hljs);hljs.LANGUAGES.erlang=function(i){var c=\"[a-z'][a-zA-Z0-9_']*\";var o=\"(\"+c+\":\"+c+\"|\"+c+\")\";var f={keyword:\"after and andalso|10 band begin bnot bor bsl bzr bxor case catch cond div end fun let not of orelse|10 query receive rem try when xor\",literal:\"false true\"};var l={cN:\"comment\",b:\"%\",e:\"$\",r:0};var e={cN:\"number\",b:\"\\\\b(\\\\d+#[a-fA-F0-9]+|\\\\d+(\\\\.\\\\d+)?([eE][-+]?\\\\d+)?)\",r:0};var g={b:\"fun\\\\s+\"+c+\"/\\\\d+\"};var n={b:o+\"\\\\(\",e:\"\\\\)\",rB:true,r:0,c:[{cN:\"function_name\",b:o,r:0},{b:\"\\\\(\",e:\"\\\\)\",eW:true,rE:true,r:0}]};var h={cN:\"tuple\",b:\"{\",e:\"}\",r:0};var a={cN:\"variable\",b:\"\\\\b_([A-Z][A-Za-z0-9_]*)?\",r:0};var m={cN:\"variable\",b:\"[A-Z][a-zA-Z0-9_]*\",r:0};var b={b:\"#\",e:\"}\",i:\".\",r:0,rB:true,c:[{cN:\"record_name\",b:\"#\"+i.UIR,r:0},{b:\"{\",eW:true,r:0}]};var k={k:f,b:\"(fun|receive|if|try|case)\",e:\"end\"};k.c=[l,g,i.inherit(i.ASM,{cN:\"\"}),k,n,i.QSM,e,h,a,m,b];var j=[l,g,k,n,i.QSM,e,h,a,m,b];n.c[1].c=j;h.c=j;b.c[1].c=j;var d={cN:\"params\",b:\"\\\\(\",e:\"\\\\)\",c:j};return{k:f,i:\"(</|\\\\*=|\\\\+=|-=|/=|/\\\\*|\\\\*/|\\\\(\\\\*|\\\\*\\\\))\",c:[{cN:\"function\",b:\"^\"+c+\"\\\\s*\\\\(\",e:\"->\",rB:true,i:\"\\\\(|#|//|/\\\\*|\\\\\\\\|:\",c:[d,{cN:\"title\",b:c}],starts:{e:\";|\\\\.\",k:f,c:j}},l,{cN:\"pp\",b:\"^-\",e:\"\\\\.\",r:0,eE:true,rB:true,l:\"-\"+i.IR,k:\"-module -record -undef -export -ifdef -ifndef -author -copyright -doc -vsn -import -include -include_lib -compile -define -else -endif -file -behaviour -behavior\",c:[d]},e,i.QSM,b,a,m,h]}}(hljs);hljs.LANGUAGES.fsharp=function(a){var b=\"'[a-zA-Z0-9_]+\";return{k:\"yield! return! let! do!abstract and as assert base begin class default delegate do done downcast downto elif else end exception extern false finally for fun|10 function global if in inherit inline interface internal lazy let match member module mutable|10 namespace new null of open or override private public rec|10 return sig static struct then to true try type upcast use val void when while with yield\",c:[{cN:\"string\",b:'@\"',e:'\"',c:[{b:'\"\"'}]},{cN:\"string\",b:'\"\"\"',e:'\"\"\"'},{cN:\"comment\",b:\"//\",e:\"$\",rB:true},{cN:\"comment\",b:\"\\\\(\\\\*\",e:\"\\\\*\\\\)\"},{cN:\"class\",bWK:true,e:\"\\\\(|=|$\",k:\"type\",c:[{cN:\"title\",b:a.UIR}]},{cN:\"annotation\",b:\"\\\\[<\",e:\">\\\\]\",r:10},{cN:\"typeparam\",b:\"<\",e:\">\",c:[{cN:\"title\",b:b}]},a.CLCM,a.CBLCLM,a.inherit(a.ASM,{i:null}),a.inherit(a.QSM,{i:null}),a.CNM]}}(hljs);hljs.LANGUAGES.glsl=function(a){return{k:{keyword:\"atomic_uint attribute bool break bvec2 bvec3 bvec4 case centroid coherent const continue default discard dmat2 dmat2x2 dmat2x3 dmat2x4 dmat3 dmat3x2 dmat3x3 dmat3x4 dmat4 dmat4x2 dmat4x3 dmat4x4 do double dvec2 dvec3 dvec4 else flat float for highp if iimage1D iimage1DArray iimage2D iimage2DArray iimage2DMS iimage2DMSArray iimage2DRect iimage3D iimageBuffer iimageCube iimageCubeArray image1D image1DArray image2D image2DArray image2DMS image2DMSArray image2DRect image3D imageBuffer imageCube imageCubeArray in inout int invariant isampler1D isampler1DArray isampler2D isampler2DArray isampler2DMS isampler2DMSArray isampler2DRect isampler3D isamplerBuffer isamplerCube isamplerCubeArray ivec2 ivec3 ivec4 layout lowp mat2 mat2x2 mat2x3 mat2x4 mat3 mat3x2 mat3x3 mat3x4 mat4 mat4x2 mat4x3 mat4x4 mediump noperspective out patch precision readonly restrict return sample sampler1D sampler1DArray sampler1DArrayShadow sampler1DShadow sampler2D sampler2DArray sampler2DArrayShadow sampler2DMS sampler2DMSArray sampler2DRect sampler2DRectShadow sampler2DShadow sampler3D samplerBuffer samplerCube samplerCubeArray samplerCubeArrayShadow samplerCubeShadow smooth struct subroutine switch uimage1D uimage1DArray uimage2D uimage2DArray uimage2DMS uimage2DMSArray uimage2DRect uimage3D uimageBuffer uimageCube uimageCubeArray uint uniform usampler1D usampler1DArray usampler2D usampler2DArray usampler2DMS usampler2DMSArray usampler2DRect usampler3D usamplerBuffer usamplerCube usamplerCubeArray uvec2 uvec3 uvec4 varying vec2 vec3 vec4 void volatile while writeonly\",built_in:\"gl_BackColor gl_BackLightModelProduct gl_BackLightProduct gl_BackMaterial gl_BackSecondaryColor gl_ClipDistance gl_ClipPlane gl_ClipVertex gl_Color gl_DepthRange gl_EyePlaneQ gl_EyePlaneR gl_EyePlaneS gl_EyePlaneT gl_Fog gl_FogCoord gl_FogFragCoord gl_FragColor gl_FragCoord gl_FragData gl_FragDepth gl_FrontColor gl_FrontFacing gl_FrontLightModelProduct gl_FrontLightProduct gl_FrontMaterial gl_FrontSecondaryColor gl_InstanceID gl_InvocationID gl_Layer gl_LightModel gl_LightSource gl_MaxAtomicCounterBindings gl_MaxAtomicCounterBufferSize gl_MaxClipDistances gl_MaxClipPlanes gl_MaxCombinedAtomicCounterBuffers gl_MaxCombinedAtomicCounters gl_MaxCombinedImageUniforms gl_MaxCombinedImageUnitsAndFragmentOutputs gl_MaxCombinedTextureImageUnits gl_MaxDrawBuffers gl_MaxFragmentAtomicCounterBuffers gl_MaxFragmentAtomicCounters gl_MaxFragmentImageUniforms gl_MaxFragmentInputComponents gl_MaxFragmentUniformComponents gl_MaxFragmentUniformVectors gl_MaxGeometryAtomicCounterBuffers gl_MaxGeometryAtomicCounters gl_MaxGeometryImageUniforms gl_MaxGeometryInputComponents gl_MaxGeometryOutputComponents gl_MaxGeometryOutputVertices gl_MaxGeometryTextureImageUnits gl_MaxGeometryTotalOutputComponents gl_MaxGeometryUniformComponents gl_MaxGeometryVaryingComponents gl_MaxImageSamples gl_MaxImageUnits gl_MaxLights gl_MaxPatchVertices gl_MaxProgramTexelOffset gl_MaxTessControlAtomicCounterBuffers gl_MaxTessControlAtomicCounters gl_MaxTessControlImageUniforms gl_MaxTessControlInputComponents gl_MaxTessControlOutputComponents gl_MaxTessControlTextureImageUnits gl_MaxTessControlTotalOutputComponents gl_MaxTessControlUniformComponents gl_MaxTessEvaluationAtomicCounterBuffers gl_MaxTessEvaluationAtomicCounters gl_MaxTessEvaluationImageUniforms gl_MaxTessEvaluationInputComponents gl_MaxTessEvaluationOutputComponents gl_MaxTessEvaluationTextureImageUnits gl_MaxTessEvaluationUniformComponents gl_MaxTessGenLevel gl_MaxTessPatchComponents gl_MaxTextureCoords gl_MaxTextureImageUnits gl_MaxTextureUnits gl_MaxVaryingComponents gl_MaxVaryingFloats gl_MaxVaryingVectors gl_MaxVertexAtomicCounterBuffers gl_MaxVertexAtomicCounters gl_MaxVertexAttribs gl_MaxVertexImageUniforms gl_MaxVertexOutputComponents gl_MaxVertexTextureImageUnits gl_MaxVertexUniformComponents gl_MaxVertexUniformVectors gl_MaxViewports gl_MinProgramTexelOffsetgl_ModelViewMatrix gl_ModelViewMatrixInverse gl_ModelViewMatrixInverseTranspose gl_ModelViewMatrixTranspose gl_ModelViewProjectionMatrix gl_ModelViewProjectionMatrixInverse gl_ModelViewProjectionMatrixInverseTranspose gl_ModelViewProjectionMatrixTranspose gl_MultiTexCoord0 gl_MultiTexCoord1 gl_MultiTexCoord2 gl_MultiTexCoord3 gl_MultiTexCoord4 gl_MultiTexCoord5 gl_MultiTexCoord6 gl_MultiTexCoord7 gl_Normal gl_NormalMatrix gl_NormalScale gl_ObjectPlaneQ gl_ObjectPlaneR gl_ObjectPlaneS gl_ObjectPlaneT gl_PatchVerticesIn gl_PerVertex gl_Point gl_PointCoord gl_PointSize gl_Position gl_PrimitiveID gl_PrimitiveIDIn gl_ProjectionMatrix gl_ProjectionMatrixInverse gl_ProjectionMatrixInverseTranspose gl_ProjectionMatrixTranspose gl_SampleID gl_SampleMask gl_SampleMaskIn gl_SamplePosition gl_SecondaryColor gl_TessCoord gl_TessLevelInner gl_TessLevelOuter gl_TexCoord gl_TextureEnvColor gl_TextureMatrixInverseTranspose gl_TextureMatrixTranspose gl_Vertex gl_VertexID gl_ViewportIndex gl_in gl_out EmitStreamVertex EmitVertex EndPrimitive EndStreamPrimitive abs acos acosh all any asin asinh atan atanh atomicCounter atomicCounterDecrement atomicCounterIncrement barrier bitCount bitfieldExtract bitfieldInsert bitfieldReverse ceil clamp cos cosh cross dFdx dFdy degrees determinant distance dot equal exp exp2 faceforward findLSB findMSB floatBitsToInt floatBitsToUint floor fma fract frexp ftransform fwidth greaterThan greaterThanEqual imageAtomicAdd imageAtomicAnd imageAtomicCompSwap imageAtomicExchange imageAtomicMax imageAtomicMin imageAtomicOr imageAtomicXor imageLoad imageStore imulExtended intBitsToFloat interpolateAtCentroid interpolateAtOffset interpolateAtSample inverse inversesqrt isinf isnan ldexp length lessThan lessThanEqual log log2 matrixCompMult max memoryBarrier min mix mod modf noise1 noise2 noise3 noise4 normalize not notEqual outerProduct packDouble2x32 packHalf2x16 packSnorm2x16 packSnorm4x8 packUnorm2x16 packUnorm4x8 pow radians reflect refract round roundEven shadow1D shadow1DLod shadow1DProj shadow1DProjLod shadow2D shadow2DLod shadow2DProj shadow2DProjLod sign sin sinh smoothstep sqrt step tan tanh texelFetch texelFetchOffset texture texture1D texture1DLod texture1DProj texture1DProjLod texture2D texture2DLod texture2DProj texture2DProjLod texture3D texture3DLod texture3DProj texture3DProjLod textureCube textureCubeLod textureGather textureGatherOffset textureGatherOffsets textureGrad textureGradOffset textureLod textureLodOffset textureOffset textureProj textureProjGrad textureProjGradOffset textureProjLod textureProjLodOffset textureProjOffset textureQueryLod textureSize transpose trunc uaddCarry uintBitsToFloat umulExtended unpackDouble2x32 unpackHalf2x16 unpackSnorm2x16 unpackSnorm4x8 unpackUnorm2x16 unpackUnorm4x8 usubBorrow gl_TextureMatrix gl_TextureMatrixInverse\",literal:\"true false\"},i:'\"',c:[a.CLCM,a.CBLCLM,a.CNM,{cN:\"preprocessor\",b:\"#\",e:\"$\"}]}}(hljs);hljs.LANGUAGES.go=function(a){var b={keyword:\"break default func interface select case map struct chan else goto package switch const fallthrough if range type continue for import return var go defer\",constant:\"true false iota nil\",typename:\"bool byte complex64 complex128 float32 float64 int8 int16 int32 int64 string uint8 uint16 uint32 uint64 int uint uintptr rune\",built_in:\"append cap close complex copy imag len make new panic print println real recover delete\"};return{k:b,i:\"</\",c:[a.CLCM,a.CBLCLM,a.QSM,{cN:\"string\",b:\"'\",e:\"[^\\\\\\\\]'\",r:0},{cN:\"string\",b:\"`\",e:\"`\"},{cN:\"number\",b:\"[^a-zA-Z_0-9](\\\\-|\\\\+)?\\\\d+(\\\\.\\\\d+|\\\\/\\\\d+)?((d|e|f|l|s)(\\\\+|\\\\-)?\\\\d+)?\",r:0},a.CNM]}}(hljs);hljs.LANGUAGES.ruby=function(e){var a=\"[a-zA-Z_][a-zA-Z0-9_]*(\\\\!|\\\\?)?\";var j=\"[a-zA-Z_]\\\\w*[!?=]?|[-+~]\\\\@|<<|>>|=~|===?|<=>|[<>]=?|\\\\*\\\\*|[-/+%^&*~`|]|\\\\[\\\\]=?\";var g={keyword:\"and false then defined module in return redo if BEGIN retry end for true self when next until do begin unless END rescue nil else break undef not super class case require yield alias while ensure elsif or include\"};var c={cN:\"yardoctag\",b:\"@[A-Za-z]+\"};var k=[{cN:\"comment\",b:\"#\",e:\"$\",c:[c]},{cN:\"comment\",b:\"^\\\\=begin\",e:\"^\\\\=end\",c:[c],r:10},{cN:\"comment\",b:\"^__END__\",e:\"\\\\n$\"}];var d={cN:\"subst\",b:\"#\\\\{\",e:\"}\",l:a,k:g};var i=[e.BE,d];var b=[{cN:\"string\",b:\"'\",e:\"'\",c:i,r:0},{cN:\"string\",b:'\"',e:'\"',c:i,r:0},{cN:\"string\",b:\"%[qw]?\\\\(\",e:\"\\\\)\",c:i},{cN:\"string\",b:\"%[qw]?\\\\[\",e:\"\\\\]\",c:i},{cN:\"string\",b:\"%[qw]?{\",e:\"}\",c:i},{cN:\"string\",b:\"%[qw]?<\",e:\">\",c:i,r:10},{cN:\"string\",b:\"%[qw]?/\",e:\"/\",c:i,r:10},{cN:\"string\",b:\"%[qw]?%\",e:\"%\",c:i,r:10},{cN:\"string\",b:\"%[qw]?-\",e:\"-\",c:i,r:10},{cN:\"string\",b:\"%[qw]?\\\\|\",e:\"\\\\|\",c:i,r:10}];var h={cN:\"function\",bWK:true,e:\" |$|;\",k:\"def\",c:[{cN:\"title\",b:j,l:a,k:g},{cN:\"params\",b:\"\\\\(\",e:\"\\\\)\",l:a,k:g}].concat(k)};var f=k.concat(b.concat([{cN:\"class\",bWK:true,e:\"$|;\",k:\"class module\",c:[{cN:\"title\",b:\"[A-Za-z_]\\\\w*(::\\\\w+)*(\\\\?|\\\\!)?\",r:0},{cN:\"inheritance\",b:\"<\\\\s*\",c:[{cN:\"parent\",b:\"(\"+e.IR+\"::)?\"+e.IR}]}].concat(k)},h,{cN:\"constant\",b:\"(::)?(\\\\b[A-Z]\\\\w*(::)?)+\",r:0},{cN:\"symbol\",b:\":\",c:b.concat([{b:j}]),r:0},{cN:\"symbol\",b:a+\":\",r:0},{cN:\"number\",b:\"(\\\\b0[0-7_]+)|(\\\\b0x[0-9a-fA-F_]+)|(\\\\b[1-9][0-9_]*(\\\\.[0-9_]+)?)|[0_]\\\\b\",r:0},{cN:\"number\",b:\"\\\\?\\\\w\"},{cN:\"variable\",b:\"(\\\\$\\\\W)|((\\\\$|\\\\@\\\\@?)(\\\\w+))\"},{b:\"(\"+e.RSR+\")\\\\s*\",c:k.concat([{cN:\"regexp\",b:\"/\",e:\"/[a-z]*\",i:\"\\\\n\",c:[e.BE,d]}]),r:0}]));d.c=f;h.c[1].c=f;return{l:a,k:g,c:f}}(hljs);hljs.LANGUAGES.haml=function(a){return{cI:true,c:[{cN:\"doctype\",b:\"^!!!( (5|1\\\\.1|Strict|Frameset|Basic|Mobile|RDFa|XML\\\\b.*))?$\",r:10},{cN:\"comment\",b:\"^\\\\s*(-#|/).*$\",r:0},{b:\"^\\\\s*-(?!#)\",starts:{e:\"\\\\n\",sL:\"ruby\"},r:0},{cN:\"tag\",b:\"^\\\\s*%\",c:[{cN:\"title\",b:\"\\\\w+\",r:0},{cN:\"value\",b:\"[#\\\\.]\\\\w+\",r:0},{b:\"{\\\\s*\",e:\"\\\\s*}\",eE:true,c:[{b:\":\\\\w+\\\\s*=>\",e:\",\\\\s+\",rB:true,eW:true,r:0,c:[{cN:\"symbol\",b:\":\\\\w+\",r:0},{cN:\"string\",b:'\"',e:'\"',r:0},{cN:\"string\",b:\"'\",e:\"'\",r:0},{b:\"\\\\w+\",r:0}]},],r:0},{b:\"\\\\(\\\\s*\",e:\"\\\\s*\\\\)\",eE:true,c:[{b:\"\\\\w+\\\\s*=\",e:\"\\\\s+\",rB:true,eW:true,r:0,c:[{cN:\"attribute\",b:\"\\\\w+\",r:0},{cN:\"string\",b:'\"',e:'\"',r:0},{cN:\"string\",b:\"'\",e:\"'\",r:0},{b:\"\\\\w+\",r:0}]},],r:0}],r:10},{cN:\"bullet\",b:\"^\\\\s*[=~]\\\\s*\",r:0},{b:\"#{\",starts:{e:\"}\",sL:\"ruby\"},r:0}]}}(hljs);hljs.LANGUAGES.handlebars=function(c){function f(l,k){var g={};for(var j in l){if(j!=\"contains\"){g[j]=l[j]}var m=[];for(var h=0;l.c&&h<l.c.length;h++){m.push(f(l.c[h],l))}m=d.concat(m);if(m.length){g.c=m}}return g}var b=\"each in with if else unless bindattr action collection debugger log outlet template unbound view yield\";var e={cN:\"variable\",b:\"[a-zA-Z.]+\",k:b};var d=[{cN:\"expression\",b:\"{{\",e:\"}}\",c:[{cN:\"begin-block\",b:\"#[a-zA-Z .]+\",k:b},{cN:\"string\",b:'\"',e:'\"'},{cN:\"end-block\",b:\"\\\\/[a-zA-Z .]+\",k:b},{cN:\"variable\",b:\"[a-zA-Z.]+\",k:b}]}];var a=f(c.LANGUAGES.xml);a.cI=true;return a}(hljs);hljs.LANGUAGES.haskell=function(a){var d={cN:\"type\",b:\"\\\\b[A-Z][\\\\w']*\",r:0};var c={cN:\"container\",b:\"\\\\(\",e:\"\\\\)\",i:'\"',c:[{cN:\"type\",b:\"\\\\b[A-Z][\\\\w]*(\\\\((\\\\.\\\\.|,|\\\\w+)\\\\))?\"},{cN:\"title\",b:\"[_a-z][\\\\w']*\"}]};var b={cN:\"container\",b:\"{\",e:\"}\",c:c.c};return{k:\"let in if then else case of where do module import hiding qualified type data newtype deriving class instance not as foreign ccall safe unsafe\",c:[{cN:\"comment\",b:\"--\",e:\"$\"},{cN:\"preprocessor\",b:\"{-#\",e:\"#-}\"},{cN:\"comment\",c:[\"self\"],b:\"{-\",e:\"-}\"},{cN:\"string\",b:\"\\\\s+'\",e:\"'\",c:[a.BE],r:0},a.QSM,{cN:\"import\",b:\"\\\\bimport\",e:\"$\",k:\"import qualified as hiding\",c:[c],i:\"\\\\W\\\\.|;\"},{cN:\"module\",b:\"\\\\bmodule\",e:\"where\",k:\"module where\",c:[c],i:\"\\\\W\\\\.|;\"},{cN:\"class\",b:\"\\\\b(class|instance)\",e:\"where\",k:\"class where instance\",c:[d]},{cN:\"typedef\",b:\"\\\\b(data|(new)?type)\",e:\"$\",k:\"data type newtype deriving\",c:[d,c,b]},a.CNM,{cN:\"shebang\",b:\"#!\\\\/usr\\\\/bin\\\\/env runhaskell\",e:\"$\"},d,{cN:\"title\",b:\"^[_a-z][\\\\w']*\"},{b:\"->|<-\"}]}}(hljs);hljs.LANGUAGES.http=function(a){return{i:\"\\\\S\",c:[{cN:\"status\",b:\"^HTTP/[0-9\\\\.]+\",e:\"$\",c:[{cN:\"number\",b:\"\\\\b\\\\d{3}\\\\b\"}]},{cN:\"request\",b:\"^[A-Z]+ (.*?) HTTP/[0-9\\\\.]+$\",rB:true,e:\"$\",c:[{cN:\"string\",b:\" \",e:\" \",eB:true,eE:true}]},{cN:\"attribute\",b:\"^\\\\w\",e:\": \",eE:true,i:\"\\\\n|\\\\s|=\",starts:{cN:\"string\",e:\"$\"}},{b:\"\\\\n\\\\n\",starts:{sL:\"\",eW:true}}]}}(hljs);hljs.LANGUAGES.ini=function(a){return{cI:true,i:\"[^\\\\s]\",c:[{cN:\"comment\",b:\";\",e:\"$\"},{cN:\"title\",b:\"^\\\\[\",e:\"\\\\]\"},{cN:\"setting\",b:\"^[a-z0-9\\\\[\\\\]_-]+[ \\\\t]*=[ \\\\t]*\",e:\"$\",c:[{cN:\"value\",eW:true,k:\"on off true false yes no\",c:[a.QSM,a.NM],r:0}]}]}}(hljs);hljs.LANGUAGES.java=function(a){return{k:\"false synchronized int abstract float private char boolean static null if const for true while long throw strictfp finally protected import native final return void enum else break transient new catch instanceof byte super volatile case assert short package default double public try this switch continue throws\",c:[{cN:\"javadoc\",b:\"/\\\\*\\\\*\",e:\"\\\\*/\",c:[{cN:\"javadoctag\",b:\"(^|\\\\s)@[A-Za-z]+\"}],r:10},a.CLCM,a.CBLCLM,a.ASM,a.QSM,{cN:\"class\",bWK:true,e:\"{\",k:\"class interface\",eE:true,i:\":\",c:[{bWK:true,k:\"extends implements\",r:10},{cN:\"title\",b:a.UIR}]},a.CNM,{cN:\"annotation\",b:\"@[A-Za-z]+\"}]}}(hljs);hljs.LANGUAGES.javascript=function(a){return{k:{keyword:\"in if for while finally var new function do return void else break catch instanceof with throw case default try this switch continue typeof delete let yield const\",literal:\"true false null undefined NaN Infinity\"},c:[a.ASM,a.QSM,a.CLCM,a.CBLCLM,a.CNM,{b:\"(\"+a.RSR+\"|\\\\b(case|return|throw)\\\\b)\\\\s*\",k:\"return throw case\",c:[a.CLCM,a.CBLCLM,a.REGEXP_MODE,{b:/</,e:/>;/,sL:\"xml\"}],r:0},{cN:\"function\",bWK:true,e:/{/,k:\"function\",c:[{cN:\"title\",b:/[A-Za-z$_][0-9A-Za-z$_]*/},{cN:\"params\",b:/\\(/,e:/\\)/,c:[a.CLCM,a.CBLCLM],i:/[\"'\\(]/}],i:/\\[|%/}]}}(hljs);hljs.LANGUAGES.json=function(a){var e={literal:\"true false null\"};var d=[a.QSM,a.CNM];var c={cN:\"value\",e:\",\",eW:true,eE:true,c:d,k:e};var b={b:\"{\",e:\"}\",c:[{cN:\"attribute\",b:'\\\\s*\"',e:'\"\\\\s*:\\\\s*',eB:true,eE:true,c:[a.BE],i:\"\\\\n\",starts:c}],i:\"\\\\S\"};var f={b:\"\\\\[\",e:\"\\\\]\",c:[a.inherit(c,{cN:null})],i:\"\\\\S\"};d.splice(d.length,0,b,f);return{c:d,k:e,i:\"\\\\S\"}}(hljs);hljs.LANGUAGES.lasso=function(b){var a=\"[a-zA-Z_][a-zA-Z0-9_.]*|&[lg]t;\";var c=\"<\\\\?(lasso(script)?|=)\";return{cI:true,l:a,k:{literal:\"true false none minimal full all infinity nan and or not bw ew cn lt lte gt gte eq neq ft rx nrx\",built_in:\"array date decimal duration integer map pair string tag xml null list queue set stack staticarray local var variable data global self inherited void\",keyword:\"error_code error_msg error_pop error_push error_reset cache database_names database_schemanames database_tablenames define_tag define_type email_batch encode_set html_comment handle handle_error header if inline iterate ljax_target link link_currentaction link_currentgroup link_currentrecord link_detail link_firstgroup link_firstrecord link_lastgroup link_lastrecord link_nextgroup link_nextrecord link_prevgroup link_prevrecord log loop namespace_using output_none portal private protect records referer referrer repeating resultset rows search_args search_arguments select sort_args sort_arguments thread_atomic value_list while abort case else if_empty if_false if_null if_true loop_abort loop_continue loop_count params params_up return return_value run_children soap_definetag soap_lastrequest soap_lastresponse tag_name ascending average by define descending do equals frozen group handle_failure import in into join let match max min on order parent protected provide public require skip split_thread sum take thread to trait type where with yield\"},c:[{cN:\"preprocessor\",b:\"\\\\]|\\\\?>\",r:0,starts:{cN:\"markup\",e:\"\\\\[|\"+c,rE:true}},{cN:\"preprocessor\",b:\"\\\\[noprocess\\\\]\",starts:{cN:\"markup\",e:\"\\\\[/noprocess\\\\]\",rE:true}},{cN:\"preprocessor\",b:\"\\\\[no_square_brackets|\\\\[/noprocess|\"+c},{cN:\"preprocessor\",b:\"\\\\[\",r:0},{cN:\"shebang\",b:\"^#!.+lasso9\\\\b\",r:10},b.CLCM,{cN:\"javadoc\",b:\"/\\\\*\\\\*!\",e:\"\\\\*/\"},b.CBLCLM,b.CNM,b.inherit(b.ASM,{i:null}),b.inherit(b.QSM,{i:null}),{cN:\"string\",b:\"`\",e:\"`\"},{cN:\"variable\",b:\"#\\\\d+|[#$]\"+a},{cN:\"tag\",b:\"::\",e:a},{cN:\"attribute\",b:\"\\\\.\\\\.\\\\.|-\"+b.UIR},{cN:\"class\",bWK:true,k:\"define\",eE:true,e:\"\\\\(|=>\",c:[{cN:\"title\",b:b.UIR+\"=?\"}]}]}}(hljs);hljs.LANGUAGES.lisp=function(i){var l=\"[a-zA-Z_\\\\-\\\\+\\\\*\\\\/\\\\<\\\\=\\\\>\\\\&\\\\#][a-zA-Z0-9_\\\\-\\\\+\\\\*\\\\/\\\\<\\\\=\\\\>\\\\&\\\\#!]*\";var m=\"(\\\\-|\\\\+)?\\\\d+(\\\\.\\\\d+|\\\\/\\\\d+)?((d|e|f|l|s)(\\\\+|\\\\-)?\\\\d+)?\";var k={cN:\"shebang\",b:\"^#!\",e:\"$\"};var a={cN:\"literal\",b:\"\\\\b(t{1}|nil)\\\\b\"};var d=[{cN:\"number\",b:m},{cN:\"number\",b:\"#b[0-1]+(/[0-1]+)?\"},{cN:\"number\",b:\"#o[0-7]+(/[0-7]+)?\"},{cN:\"number\",b:\"#x[0-9a-f]+(/[0-9a-f]+)?\"},{cN:\"number\",b:\"#c\\\\(\"+m+\" +\"+m,e:\"\\\\)\"}];var h={cN:\"string\",b:'\"',e:'\"',c:[i.BE],r:0};var n={cN:\"comment\",b:\";\",e:\"$\"};var g={cN:\"variable\",b:\"\\\\*\",e:\"\\\\*\"};var o={cN:\"keyword\",b:\"[:&]\"+l};var b={b:\"\\\\(\",e:\"\\\\)\",c:[\"self\",a,h].concat(d)};var e={cN:\"quoted\",b:\"['`]\\\\(\",e:\"\\\\)\",c:d.concat([h,g,o,b])};var c={cN:\"quoted\",b:\"\\\\(quote \",e:\"\\\\)\",k:{title:\"quote\"},c:d.concat([h,g,o,b])};var j={cN:\"list\",b:\"\\\\(\",e:\"\\\\)\"};var f={eW:true,r:0};j.c=[{cN:\"title\",b:l},f];f.c=[e,c,j,a].concat(d).concat([h,n,g,o]);return{i:\"[^\\\\s]\",c:d.concat([k,a,h,n,e,c,j])}}(hljs);hljs.LANGUAGES.lua=function(b){var a=\"\\\\[=*\\\\[\";var e=\"\\\\]=*\\\\]\";var c={b:a,e:e,c:[\"self\"]};var d=[{cN:\"comment\",b:\"--(?!\"+a+\")\",e:\"$\"},{cN:\"comment\",b:\"--\"+a,e:e,c:[c],r:10}];return{l:b.UIR,k:{keyword:\"and break do else elseif end false for if in local nil not or repeat return then true until while\",built_in:\"_G _VERSION assert collectgarbage dofile error getfenv getmetatable ipairs load loadfile loadstring module next pairs pcall print rawequal rawget rawset require select setfenv setmetatable tonumber tostring type unpack xpcall coroutine debug io math os package string table\"},c:d.concat([{cN:\"function\",bWK:true,e:\"\\\\)\",k:\"function\",c:[{cN:\"title\",b:\"([_a-zA-Z]\\\\w*\\\\.)*([_a-zA-Z]\\\\w*:)?[_a-zA-Z]\\\\w*\"},{cN:\"params\",b:\"\\\\(\",eW:true,c:d}].concat(d)},b.CNM,b.ASM,b.QSM,{cN:\"string\",b:a,e:e,c:[c],r:10}])}}(hljs);hljs.LANGUAGES.markdown=function(a){return{c:[{cN:\"header\",b:\"^#{1,3}\",e:\"$\"},{cN:\"header\",b:\"^.+?\\\\n[=-]{2,}$\"},{b:\"<\",e:\">\",sL:\"xml\",r:0},{cN:\"bullet\",b:\"^([*+-]|(\\\\d+\\\\.))\\\\s+\"},{cN:\"strong\",b:\"[*_]{2}.+?[*_]{2}\"},{cN:\"emphasis\",b:\"\\\\*.+?\\\\*\"},{cN:\"emphasis\",b:\"_.+?_\",r:0},{cN:\"blockquote\",b:\"^>\\\\s+\",e:\"$\"},{cN:\"code\",b:\"`.+?`\"},{cN:\"code\",b:\"^    \",e:\"$\",r:0},{cN:\"horizontal_rule\",b:\"^-{3,}\",e:\"$\"},{b:\"\\\\[.+?\\\\]\\\\(.+?\\\\)\",rB:true,c:[{cN:\"link_label\",b:\"\\\\[.+\\\\]\"},{cN:\"link_url\",b:\"\\\\(\",e:\"\\\\)\",eB:true,eE:true}]}]}}(hljs);hljs.LANGUAGES.matlab=function(a){var b=[a.CNM,{cN:\"string\",b:\"'\",e:\"'\",c:[a.BE,{b:\"''\"}],r:0}];return{k:{keyword:\"break case catch classdef continue else elseif end enumerated events for function global if methods otherwise parfor persistent properties return spmd switch try while\",built_in:\"sin sind sinh asin asind asinh cos cosd cosh acos acosd acosh tan tand tanh atan atand atan2 atanh sec secd sech asec asecd asech csc cscd csch acsc acscd acsch cot cotd coth acot acotd acoth hypot exp expm1 log log1p log10 log2 pow2 realpow reallog realsqrt sqrt nthroot nextpow2 abs angle complex conj imag real unwrap isreal cplxpair fix floor ceil round mod rem sign airy besselj bessely besselh besseli besselk beta betainc betaln ellipj ellipke erf erfc erfcx erfinv expint gamma gammainc gammaln psi legendre cross dot factor isprime primes gcd lcm rat rats perms nchoosek factorial cart2sph cart2pol pol2cart sph2cart hsv2rgb rgb2hsv zeros ones eye repmat rand randn linspace logspace freqspace meshgrid accumarray size length ndims numel disp isempty isequal isequalwithequalnans cat reshape diag blkdiag tril triu fliplr flipud flipdim rot90 find sub2ind ind2sub bsxfun ndgrid permute ipermute shiftdim circshift squeeze isscalar isvector ans eps realmax realmin pi i inf nan isnan isinf isfinite j why compan gallery hadamard hankel hilb invhilb magic pascal rosser toeplitz vander wilkinson\"},i:'(//|\"|#|/\\\\*|\\\\s+/\\\\w+)',c:[{cN:\"function\",bWK:true,e:\"$\",k:\"function\",c:[{cN:\"title\",b:a.UIR},{cN:\"params\",b:\"\\\\(\",e:\"\\\\)\"},{cN:\"params\",b:\"\\\\[\",e:\"\\\\]\"}]},{cN:\"transposed_variable\",b:\"[a-zA-Z_][a-zA-Z_0-9]*('+[\\\\.']*|[\\\\.']+)\",e:\"\"},{cN:\"matrix\",b:\"\\\\[\",e:\"\\\\]'*[\\\\.']*\",c:b},{cN:\"cell\",b:\"\\\\{\",e:\"\\\\}'*[\\\\.']*\",c:b},{cN:\"comment\",b:\"\\\\%\",e:\"$\"}].concat(b)}}(hljs);hljs.LANGUAGES.mel=function(a){return{k:\"int float string vector matrix if else switch case default while do for in break continue global proc return about abs addAttr addAttributeEditorNodeHelp addDynamic addNewShelfTab addPP addPanelCategory addPrefixToName advanceToNextDrivenKey affectedNet affects aimConstraint air alias aliasAttr align alignCtx alignCurve alignSurface allViewFit ambientLight angle angleBetween animCone animCurveEditor animDisplay animView annotate appendStringArray applicationName applyAttrPreset applyTake arcLenDimContext arcLengthDimension arclen arrayMapper art3dPaintCtx artAttrCtx artAttrPaintVertexCtx artAttrSkinPaintCtx artAttrTool artBuildPaintMenu artFluidAttrCtx artPuttyCtx artSelectCtx artSetPaintCtx artUserPaintCtx assignCommand assignInputDevice assignViewportFactories attachCurve attachDeviceAttr attachSurface attrColorSliderGrp attrCompatibility attrControlGrp attrEnumOptionMenu attrEnumOptionMenuGrp attrFieldGrp attrFieldSliderGrp attrNavigationControlGrp attrPresetEditWin attributeExists attributeInfo attributeMenu attributeQuery autoKeyframe autoPlace bakeClip bakeFluidShading bakePartialHistory bakeResults bakeSimulation basename basenameEx batchRender bessel bevel bevelPlus binMembership bindSkin blend2 blendShape blendShapeEditor blendShapePanel blendTwoAttr blindDataType boneLattice boundary boxDollyCtx boxZoomCtx bufferCurve buildBookmarkMenu buildKeyframeMenu button buttonManip CBG cacheFile cacheFileCombine cacheFileMerge cacheFileTrack camera cameraView canCreateManip canvas capitalizeString catch catchQuiet ceil changeSubdivComponentDisplayLevel changeSubdivRegion channelBox character characterMap characterOutlineEditor characterize chdir checkBox checkBoxGrp checkDefaultRenderGlobals choice circle circularFillet clamp clear clearCache clip clipEditor clipEditorCurrentTimeCtx clipSchedule clipSchedulerOutliner clipTrimBefore closeCurve closeSurface cluster cmdFileOutput cmdScrollFieldExecuter cmdScrollFieldReporter cmdShell coarsenSubdivSelectionList collision color colorAtPoint colorEditor colorIndex colorIndexSliderGrp colorSliderButtonGrp colorSliderGrp columnLayout commandEcho commandLine commandPort compactHairSystem componentEditor compositingInterop computePolysetVolume condition cone confirmDialog connectAttr connectControl connectDynamic connectJoint connectionInfo constrain constrainValue constructionHistory container containsMultibyte contextInfo control convertFromOldLayers convertIffToPsd convertLightmap convertSolidTx convertTessellation convertUnit copyArray copyFlexor copyKey copySkinWeights cos cpButton cpCache cpClothSet cpCollision cpConstraint cpConvClothToMesh cpForces cpGetSolverAttr cpPanel cpProperty cpRigidCollisionFilter cpSeam cpSetEdit cpSetSolverAttr cpSolver cpSolverTypes cpTool cpUpdateClothUVs createDisplayLayer createDrawCtx createEditor createLayeredPsdFile createMotionField createNewShelf createNode createRenderLayer createSubdivRegion cross crossProduct ctxAbort ctxCompletion ctxEditMode ctxTraverse currentCtx currentTime currentTimeCtx currentUnit currentUnit curve curveAddPtCtx curveCVCtx curveEPCtx curveEditorCtx curveIntersect curveMoveEPCtx curveOnSurface curveSketchCtx cutKey cycleCheck cylinder dagPose date defaultLightListCheckBox defaultNavigation defineDataServer defineVirtualDevice deformer deg_to_rad delete deleteAttr deleteShadingGroupsAndMaterials deleteShelfTab deleteUI deleteUnusedBrushes delrandstr detachCurve detachDeviceAttr detachSurface deviceEditor devicePanel dgInfo dgdirty dgeval dgtimer dimWhen directKeyCtx directionalLight dirmap dirname disable disconnectAttr disconnectJoint diskCache displacementToPoly displayAffected displayColor displayCull displayLevelOfDetail displayPref displayRGBColor displaySmoothness displayStats displayString displaySurface distanceDimContext distanceDimension doBlur dolly dollyCtx dopeSheetEditor dot dotProduct doubleProfileBirailSurface drag dragAttrContext draggerContext dropoffLocator duplicate duplicateCurve duplicateSurface dynCache dynControl dynExport dynExpression dynGlobals dynPaintEditor dynParticleCtx dynPref dynRelEdPanel dynRelEditor dynamicLoad editAttrLimits editDisplayLayerGlobals editDisplayLayerMembers editRenderLayerAdjustment editRenderLayerGlobals editRenderLayerMembers editor editorTemplate effector emit emitter enableDevice encodeString endString endsWith env equivalent equivalentTol erf error eval eval evalDeferred evalEcho event exactWorldBoundingBox exclusiveLightCheckBox exec executeForEachObject exists exp expression expressionEditorListen extendCurve extendSurface extrude fcheck fclose feof fflush fgetline fgetword file fileBrowserDialog fileDialog fileExtension fileInfo filetest filletCurve filter filterCurve filterExpand filterStudioImport findAllIntersections findAnimCurves findKeyframe findMenuItem findRelatedSkinCluster finder firstParentOf fitBspline flexor floatEq floatField floatFieldGrp floatScrollBar floatSlider floatSlider2 floatSliderButtonGrp floatSliderGrp floor flow fluidCacheInfo fluidEmitter fluidVoxelInfo flushUndo fmod fontDialog fopen formLayout format fprint frameLayout fread freeFormFillet frewind fromNativePath fwrite gamma gauss geometryConstraint getApplicationVersionAsFloat getAttr getClassification getDefaultBrush getFileList getFluidAttr getInputDeviceRange getMayaPanelTypes getModifiers getPanel getParticleAttr getPluginResource getenv getpid glRender glRenderEditor globalStitch gmatch goal gotoBindPose grabColor gradientControl gradientControlNoAttr graphDollyCtx graphSelectContext graphTrackCtx gravity grid gridLayout group groupObjectsByName HfAddAttractorToAS HfAssignAS HfBuildEqualMap HfBuildFurFiles HfBuildFurImages HfCancelAFR HfConnectASToHF HfCreateAttractor HfDeleteAS HfEditAS HfPerformCreateAS HfRemoveAttractorFromAS HfSelectAttached HfSelectAttractors HfUnAssignAS hardenPointCurve hardware hardwareRenderPanel headsUpDisplay headsUpMessage help helpLine hermite hide hilite hitTest hotBox hotkey hotkeyCheck hsv_to_rgb hudButton hudSlider hudSliderButton hwReflectionMap hwRender hwRenderLoad hyperGraph hyperPanel hyperShade hypot iconTextButton iconTextCheckBox iconTextRadioButton iconTextRadioCollection iconTextScrollList iconTextStaticLabel ikHandle ikHandleCtx ikHandleDisplayScale ikSolver ikSplineHandleCtx ikSystem ikSystemInfo ikfkDisplayMethod illustratorCurves image imfPlugins inheritTransform insertJoint insertJointCtx insertKeyCtx insertKnotCurve insertKnotSurface instance instanceable instancer intField intFieldGrp intScrollBar intSlider intSliderGrp interToUI internalVar intersect iprEngine isAnimCurve isConnected isDirty isParentOf isSameObject isTrue isValidObjectName isValidString isValidUiName isolateSelect itemFilter itemFilterAttr itemFilterRender itemFilterType joint jointCluster jointCtx jointDisplayScale jointLattice keyTangent keyframe keyframeOutliner keyframeRegionCurrentTimeCtx keyframeRegionDirectKeyCtx keyframeRegionDollyCtx keyframeRegionInsertKeyCtx keyframeRegionMoveKeyCtx keyframeRegionScaleKeyCtx keyframeRegionSelectKeyCtx keyframeRegionSetKeyCtx keyframeRegionTrackCtx keyframeStats lassoContext lattice latticeDeformKeyCtx launch launchImageEditor layerButton layeredShaderPort layeredTexturePort layout layoutDialog lightList lightListEditor lightListPanel lightlink lineIntersection linearPrecision linstep listAnimatable listAttr listCameras listConnections listDeviceAttachments listHistory listInputDeviceAxes listInputDeviceButtons listInputDevices listMenuAnnotation listNodeTypes listPanelCategories listRelatives listSets listTransforms listUnselected listerEditor loadFluid loadNewShelf loadPlugin loadPluginLanguageResources loadPrefObjects localizedPanelLabel lockNode loft log longNameOf lookThru ls lsThroughFilter lsType lsUI Mayatomr mag makeIdentity makeLive makePaintable makeRoll makeSingleSurface makeTubeOn makebot manipMoveContext manipMoveLimitsCtx manipOptions manipRotateContext manipRotateLimitsCtx manipScaleContext manipScaleLimitsCtx marker match max memory menu menuBarLayout menuEditor menuItem menuItemToShelf menuSet menuSetPref messageLine min minimizeApp mirrorJoint modelCurrentTimeCtx modelEditor modelPanel mouse movIn movOut move moveIKtoFK moveKeyCtx moveVertexAlongDirection multiProfileBirailSurface mute nParticle nameCommand nameField namespace namespaceInfo newPanelItems newton nodeCast nodeIconButton nodeOutliner nodePreset nodeType noise nonLinear normalConstraint normalize nurbsBoolean nurbsCopyUVSet nurbsCube nurbsEditUV nurbsPlane nurbsSelect nurbsSquare nurbsToPoly nurbsToPolygonsPref nurbsToSubdiv nurbsToSubdivPref nurbsUVSet nurbsViewDirectionVector objExists objectCenter objectLayer objectType objectTypeUI obsoleteProc oceanNurbsPreviewPlane offsetCurve offsetCurveOnSurface offsetSurface openGLExtension openMayaPref optionMenu optionMenuGrp optionVar orbit orbitCtx orientConstraint outlinerEditor outlinerPanel overrideModifier paintEffectsDisplay pairBlend palettePort paneLayout panel panelConfiguration panelHistory paramDimContext paramDimension paramLocator parent parentConstraint particle particleExists particleInstancer particleRenderInfo partition pasteKey pathAnimation pause pclose percent performanceOptions pfxstrokes pickWalk picture pixelMove planarSrf plane play playbackOptions playblast plugAttr plugNode pluginInfo pluginResourceUtil pointConstraint pointCurveConstraint pointLight pointMatrixMult pointOnCurve pointOnSurface pointPosition poleVectorConstraint polyAppend polyAppendFacetCtx polyAppendVertex polyAutoProjection polyAverageNormal polyAverageVertex polyBevel polyBlendColor polyBlindData polyBoolOp polyBridgeEdge polyCacheMonitor polyCheck polyChipOff polyClipboard polyCloseBorder polyCollapseEdge polyCollapseFacet polyColorBlindData polyColorDel polyColorPerVertex polyColorSet polyCompare polyCone polyCopyUV polyCrease polyCreaseCtx polyCreateFacet polyCreateFacetCtx polyCube polyCut polyCutCtx polyCylinder polyCylindricalProjection polyDelEdge polyDelFacet polyDelVertex polyDuplicateAndConnect polyDuplicateEdge polyEditUV polyEditUVShell polyEvaluate polyExtrudeEdge polyExtrudeFacet polyExtrudeVertex polyFlipEdge polyFlipUV polyForceUV polyGeoSampler polyHelix polyInfo polyInstallAction polyLayoutUV polyListComponentConversion polyMapCut polyMapDel polyMapSew polyMapSewMove polyMergeEdge polyMergeEdgeCtx polyMergeFacet polyMergeFacetCtx polyMergeUV polyMergeVertex polyMirrorFace polyMoveEdge polyMoveFacet polyMoveFacetUV polyMoveUV polyMoveVertex polyNormal polyNormalPerVertex polyNormalizeUV polyOptUvs polyOptions polyOutput polyPipe polyPlanarProjection polyPlane polyPlatonicSolid polyPoke polyPrimitive polyPrism polyProjection polyPyramid polyQuad polyQueryBlindData polyReduce polySelect polySelectConstraint polySelectConstraintMonitor polySelectCtx polySelectEditCtx polySeparate polySetToFaceNormal polySewEdge polyShortestPathCtx polySmooth polySoftEdge polySphere polySphericalProjection polySplit polySplitCtx polySplitEdge polySplitRing polySplitVertex polyStraightenUVBorder polySubdivideEdge polySubdivideFacet polyToSubdiv polyTorus polyTransfer polyTriangulate polyUVSet polyUnite polyWedgeFace popen popupMenu pose pow preloadRefEd print progressBar progressWindow projFileViewer projectCurve projectTangent projectionContext projectionManip promptDialog propModCtx propMove psdChannelOutliner psdEditTextureFile psdExport psdTextureFile putenv pwd python querySubdiv quit rad_to_deg radial radioButton radioButtonGrp radioCollection radioMenuItemCollection rampColorPort rand randomizeFollicles randstate rangeControl readTake rebuildCurve rebuildSurface recordAttr recordDevice redo reference referenceEdit referenceQuery refineSubdivSelectionList refresh refreshAE registerPluginResource rehash reloadImage removeJoint removeMultiInstance removePanelCategory rename renameAttr renameSelectionList renameUI render renderGlobalsNode renderInfo renderLayerButton renderLayerParent renderLayerPostProcess renderLayerUnparent renderManip renderPartition renderQualityNode renderSettings renderThumbnailUpdate renderWindowEditor renderWindowSelectContext renderer reorder reorderDeformers requires reroot resampleFluid resetAE resetPfxToPolyCamera resetTool resolutionNode retarget reverseCurve reverseSurface revolve rgb_to_hsv rigidBody rigidSolver roll rollCtx rootOf rot rotate rotationInterpolation roundConstantRadius rowColumnLayout rowLayout runTimeCommand runup sampleImage saveAllShelves saveAttrPreset saveFluid saveImage saveInitialState saveMenu savePrefObjects savePrefs saveShelf saveToolSettings scale scaleBrushBrightness scaleComponents scaleConstraint scaleKey scaleKeyCtx sceneEditor sceneUIReplacement scmh scriptCtx scriptEditorInfo scriptJob scriptNode scriptTable scriptToShelf scriptedPanel scriptedPanelType scrollField scrollLayout sculpt searchPathArray seed selLoadSettings select selectContext selectCurveCV selectKey selectKeyCtx selectKeyframeRegionCtx selectMode selectPref selectPriority selectType selectedNodes selectionConnection separator setAttr setAttrEnumResource setAttrMapping setAttrNiceNameResource setConstraintRestPosition setDefaultShadingGroup setDrivenKeyframe setDynamic setEditCtx setEditor setFluidAttr setFocus setInfinity setInputDeviceMapping setKeyCtx setKeyPath setKeyframe setKeyframeBlendshapeTargetWts setMenuMode setNodeNiceNameResource setNodeTypeFlag setParent setParticleAttr setPfxToPolyCamera setPluginResource setProject setStampDensity setStartupMessage setState setToolTo setUITemplate setXformManip sets shadingConnection shadingGeometryRelCtx shadingLightRelCtx shadingNetworkCompare shadingNode shapeCompare shelfButton shelfLayout shelfTabLayout shellField shortNameOf showHelp showHidden showManipCtx showSelectionInTitle showShadingGroupAttrEditor showWindow sign simplify sin singleProfileBirailSurface size sizeBytes skinCluster skinPercent smoothCurve smoothTangentSurface smoothstep snap2to2 snapKey snapMode snapTogetherCtx snapshot soft softMod softModCtx sort sound soundControl source spaceLocator sphere sphrand spotLight spotLightPreviewPort spreadSheetEditor spring sqrt squareSurface srtContext stackTrace startString startsWith stitchAndExplodeShell stitchSurface stitchSurfacePoints strcmp stringArrayCatenate stringArrayContains stringArrayCount stringArrayInsertAtIndex stringArrayIntersector stringArrayRemove stringArrayRemoveAtIndex stringArrayRemoveDuplicates stringArrayRemoveExact stringArrayToString stringToStringArray strip stripPrefixFromName stroke subdAutoProjection subdCleanTopology subdCollapse subdDuplicateAndConnect subdEditUV subdListComponentConversion subdMapCut subdMapSewMove subdMatchTopology subdMirror subdToBlind subdToPoly subdTransferUVsToCache subdiv subdivCrease subdivDisplaySmoothness substitute substituteAllString substituteGeometry substring surface surfaceSampler surfaceShaderList swatchDisplayPort switchTable symbolButton symbolCheckBox sysFile system tabLayout tan tangentConstraint texLatticeDeformContext texManipContext texMoveContext texMoveUVShellContext texRotateContext texScaleContext texSelectContext texSelectShortestPathCtx texSmudgeUVContext texWinToolCtx text textCurves textField textFieldButtonGrp textFieldGrp textManip textScrollList textToShelf textureDisplacePlane textureHairColor texturePlacementContext textureWindow threadCount threePointArcCtx timeControl timePort timerX toNativePath toggle toggleAxis toggleWindowVisibility tokenize tokenizeList tolerance tolower toolButton toolCollection toolDropped toolHasOptions toolPropertyWindow torus toupper trace track trackCtx transferAttributes transformCompare transformLimits translator trim trunc truncateFluidCache truncateHairCache tumble tumbleCtx turbulence twoPointArcCtx uiRes uiTemplate unassignInputDevice undo undoInfo ungroup uniform unit unloadPlugin untangleUV untitledFileName untrim upAxis updateAE userCtx uvLink uvSnapshot validateShelfName vectorize view2dToolCtx viewCamera viewClipPlane viewFit viewHeadOn viewLookAt viewManip viewPlace viewSet visor volumeAxis vortex waitCursor warning webBrowser webBrowserPrefs whatIs window windowPref wire wireContext workspace wrinkle wrinkleContext writeTake xbmLangPathList xform\",i:\"</\",c:[a.CNM,a.ASM,a.QSM,{cN:\"string\",b:\"`\",e:\"`\",c:[a.BE]},{cN:\"variable\",b:\"\\\\$\\\\d\",r:5},{cN:\"variable\",b:\"[\\\\$\\\\%\\\\@\\\\*](\\\\^\\\\w\\\\b|#\\\\w+|[^\\\\s\\\\w{]|{\\\\w+}|\\\\w+)\"},a.CLCM,a.CBLCLM]}}(hljs);hljs.LANGUAGES.mizar=function(a){return{k:[\"environ vocabularies notations constructors definitions registrations theorems schemes requirements\",\"begin end definition registration cluster existence pred func defpred deffunc theorem proof\",\"let take assume then thus hence ex for st holds consider reconsider such that and in provided of as from\",\"be being by means equals implies iff redefine define now not or attr is mode suppose per cases set\",\"thesis contradiction scheme reserve struct\",\"correctness compatibility coherence symmetry assymetry reflexivity irreflexivity\",\"connectedness uniqueness commutativity idempotence involutiveness projectivity\"].join(\" \"),c:[{cN:\"comment\",b:\"::\",e:\"$\"}]}}(hljs);hljs.LANGUAGES.nginx=function(b){var c=[{cN:\"variable\",b:\"\\\\$\\\\d+\"},{cN:\"variable\",b:\"\\\\${\",e:\"}\"},{cN:\"variable\",b:\"[\\\\$\\\\@]\"+b.UIR}];var a={eW:true,l:\"[a-z/_]+\",k:{built_in:\"on off yes no true false none blocked debug info notice warn error crit select break last permanent redirect kqueue rtsig epoll poll /dev/poll\"},r:0,i:\"=>\",c:[b.HCM,{cN:\"string\",b:'\"',e:'\"',c:[b.BE].concat(c),r:0},{cN:\"string\",b:\"'\",e:\"'\",c:[b.BE].concat(c),r:0},{cN:\"url\",b:\"([a-z]+):/\",e:\"\\\\s\",eW:true,eE:true},{cN:\"regexp\",b:\"\\\\s\\\\^\",e:\"\\\\s|{|;\",rE:true,c:[b.BE].concat(c)},{cN:\"regexp\",b:\"~\\\\*?\\\\s+\",e:\"\\\\s|{|;\",rE:true,c:[b.BE].concat(c)},{cN:\"regexp\",b:\"\\\\*(\\\\.[a-z\\\\-]+)+\",c:[b.BE].concat(c)},{cN:\"regexp\",b:\"([a-z\\\\-]+\\\\.)+\\\\*\",c:[b.BE].concat(c)},{cN:\"number\",b:\"\\\\b\\\\d{1,3}\\\\.\\\\d{1,3}\\\\.\\\\d{1,3}\\\\.\\\\d{1,3}(:\\\\d{1,5})?\\\\b\"},{cN:\"number\",b:\"\\\\b\\\\d+[kKmMgGdshdwy]*\\\\b\",r:0}].concat(c)};return{c:[b.HCM,{b:b.UIR+\"\\\\s\",e:\";|{\",rB:true,c:[{cN:\"title\",b:b.UIR,starts:a}],r:0}],i:\"[^\\\\s\\\\}]\"}}(hljs);hljs.LANGUAGES.objectivec=function(a){var b={keyword:\"int float while private char catch export sizeof typedef const struct for union unsigned long volatile static protected bool mutable if public do return goto void enum else break extern asm case short default double throw register explicit signed typename try this switch continue wchar_t inline readonly assign property self synchronized end synthesize id optional required nonatomic super unichar finally dynamic IBOutlet IBAction selector strong weak readonly\",literal:\"false true FALSE TRUE nil YES NO NULL\",built_in:\"NSString NSDictionary CGRect CGPoint UIButton UILabel UITextView UIWebView MKMapView UISegmentedControl NSObject UITableViewDelegate UITableViewDataSource NSThread UIActivityIndicator UITabbar UIToolBar UIBarButtonItem UIImageView NSAutoreleasePool UITableView BOOL NSInteger CGFloat NSException NSLog NSMutableString NSMutableArray NSMutableDictionary NSURL NSIndexPath CGSize UITableViewCell UIView UIViewController UINavigationBar UINavigationController UITabBarController UIPopoverController UIPopoverControllerDelegate UIImage NSNumber UISearchBar NSFetchedResultsController NSFetchedResultsChangeType UIScrollView UIScrollViewDelegate UIEdgeInsets UIColor UIFont UIApplication NSNotFound NSNotificationCenter NSNotification UILocalNotification NSBundle NSFileManager NSTimeInterval NSDate NSCalendar NSUserDefaults UIWindow NSRange NSArray NSError NSURLRequest NSURLConnection UIInterfaceOrientation MPMoviePlayerController dispatch_once_t dispatch_queue_t dispatch_sync dispatch_async dispatch_once\"};return{k:b,i:\"</\",c:[a.CLCM,a.CBLCLM,a.CNM,a.QSM,{cN:\"string\",b:\"'\",e:\"[^\\\\\\\\]'\",i:\"[^\\\\\\\\][^']\"},{cN:\"preprocessor\",b:\"#import\",e:\"$\",c:[{cN:\"title\",b:'\"',e:'\"'},{cN:\"title\",b:\"<\",e:\">\"}]},{cN:\"preprocessor\",b:\"#\",e:\"$\"},{cN:\"class\",bWK:true,e:\"({|$)\",k:\"interface class protocol implementation\",c:[{cN:\"id\",b:a.UIR}]},{cN:\"variable\",b:\"\\\\.\"+a.UIR,r:0}]}}(hljs);hljs.LANGUAGES.parser3=function(a){return{sL:\"xml\",r:0,c:[{cN:\"comment\",b:\"^#\",e:\"$\"},{cN:\"comment\",b:\"\\\\^rem{\",e:\"}\",r:10,c:[{b:\"{\",e:\"}\",c:[\"self\"]}]},{cN:\"preprocessor\",b:\"^@(?:BASE|USE|CLASS|OPTIONS)$\",r:10},{cN:\"title\",b:\"@[\\\\w\\\\-]+\\\\[[\\\\w^;\\\\-]*\\\\](?:\\\\[[\\\\w^;\\\\-]*\\\\])?(?:.*)$\"},{cN:\"variable\",b:\"\\\\$\\\\{?[\\\\w\\\\-\\\\.\\\\:]+\\\\}?\"},{cN:\"keyword\",b:\"\\\\^[\\\\w\\\\-\\\\.\\\\:]+\"},{cN:\"number\",b:\"\\\\^#[0-9a-fA-F]+\"},a.CNM]}}(hljs);hljs.LANGUAGES.perl=function(e){var a=\"getpwent getservent quotemeta msgrcv scalar kill dbmclose undef lc ma syswrite tr send umask sysopen shmwrite vec qx utime local oct semctl localtime readpipe do return format read sprintf dbmopen pop getpgrp not getpwnam rewinddir qqfileno qw endprotoent wait sethostent bless s|0 opendir continue each sleep endgrent shutdown dump chomp connect getsockname die socketpair close flock exists index shmgetsub for endpwent redo lstat msgctl setpgrp abs exit select print ref gethostbyaddr unshift fcntl syscall goto getnetbyaddr join gmtime symlink semget splice x|0 getpeername recv log setsockopt cos last reverse gethostbyname getgrnam study formline endhostent times chop length gethostent getnetent pack getprotoent getservbyname rand mkdir pos chmod y|0 substr endnetent printf next open msgsnd readdir use unlink getsockopt getpriority rindex wantarray hex system getservbyport endservent int chr untie rmdir prototype tell listen fork shmread ucfirst setprotoent else sysseek link getgrgid shmctl waitpid unpack getnetbyname reset chdir grep split require caller lcfirst until warn while values shift telldir getpwuid my getprotobynumber delete and sort uc defined srand accept package seekdir getprotobyname semop our rename seek if q|0 chroot sysread setpwent no crypt getc chown sqrt write setnetent setpriority foreach tie sin msgget map stat getlogin unless elsif truncate exec keys glob tied closedirioctl socket readlink eval xor readline binmode setservent eof ord bind alarm pipe atan2 getgrent exp time push setgrent gt lt or ne m|0 break given say state when\";var d={cN:\"subst\",b:\"[$@]\\\\{\",e:\"\\\\}\",k:a,r:10};var b={cN:\"variable\",b:\"\\\\$\\\\d\"};var i={cN:\"variable\",b:\"[\\\\$\\\\%\\\\@\\\\*](\\\\^\\\\w\\\\b|#\\\\w+(\\\\:\\\\:\\\\w+)*|[^\\\\s\\\\w{]|{\\\\w+}|\\\\w+(\\\\:\\\\:\\\\w*)*)\"};var f=[e.BE,d,b,i];var h={b:\"->\",c:[{b:e.IR},{b:\"{\",e:\"}\"}]};var g={cN:\"comment\",b:\"^(__END__|__DATA__)\",e:\"\\\\n$\",r:5};var c=[b,i,e.HCM,g,{cN:\"comment\",b:\"^\\\\=\\\\w\",e:\"\\\\=cut\",eW:true},h,{cN:\"string\",b:\"q[qwxr]?\\\\s*\\\\(\",e:\"\\\\)\",c:f,r:5},{cN:\"string\",b:\"q[qwxr]?\\\\s*\\\\[\",e:\"\\\\]\",c:f,r:5},{cN:\"string\",b:\"q[qwxr]?\\\\s*\\\\{\",e:\"\\\\}\",c:f,r:5},{cN:\"string\",b:\"q[qwxr]?\\\\s*\\\\|\",e:\"\\\\|\",c:f,r:5},{cN:\"string\",b:\"q[qwxr]?\\\\s*\\\\<\",e:\"\\\\>\",c:f,r:5},{cN:\"string\",b:\"qw\\\\s+q\",e:\"q\",c:f,r:5},{cN:\"string\",b:\"'\",e:\"'\",c:[e.BE],r:0},{cN:\"string\",b:'\"',e:'\"',c:f,r:0},{cN:\"string\",b:\"`\",e:\"`\",c:[e.BE]},{cN:\"string\",b:\"{\\\\w+}\",r:0},{cN:\"string\",b:\"-?\\\\w+\\\\s*\\\\=\\\\>\",r:0},{cN:\"number\",b:\"(\\\\b0[0-7_]+)|(\\\\b0x[0-9a-fA-F_]+)|(\\\\b[1-9][0-9_]*(\\\\.[0-9_]+)?)|[0_]\\\\b\",r:0},{b:\"(\"+e.RSR+\"|\\\\b(split|return|print|reverse|grep)\\\\b)\\\\s*\",k:\"split return print reverse grep\",r:0,c:[e.HCM,g,{cN:\"regexp\",b:\"(s|tr|y)/(\\\\\\\\.|[^/])*/(\\\\\\\\.|[^/])*/[a-z]*\",r:10},{cN:\"regexp\",b:\"(m|qr)?/\",e:\"/[a-z]*\",c:[e.BE],r:0}]},{cN:\"sub\",bWK:true,e:\"(\\\\s*\\\\(.*?\\\\))?[;{]\",k:\"sub\",r:5},{cN:\"operator\",b:\"-\\\\w\\\\b\",r:0}];d.c=c;h.c[1].c=c;return{k:a,c:c}}(hljs);hljs.LANGUAGES.php=function(a){var e={cN:\"variable\",b:\"\\\\$+[a-zA-Z_\\x7f-\\xff][a-zA-Z0-9_\\x7f-\\xff]*\"};var b=[a.inherit(a.ASM,{i:null}),a.inherit(a.QSM,{i:null}),{cN:\"string\",b:'b\"',e:'\"',c:[a.BE]},{cN:\"string\",b:\"b'\",e:\"'\",c:[a.BE]}];var c=[a.BNM,a.CNM];var d={cN:\"title\",b:a.UIR};return{cI:true,k:\"and include_once list abstract global private echo interface as static endswitch array null if endwhile or const for endforeach self var while isset public protected exit foreach throw elseif include __FILE__ empty require_once do xor return implements parent clone use __CLASS__ __LINE__ else break print eval new catch __METHOD__ case exception php_user_filter default die require __FUNCTION__ enddeclare final try this switch continue endfor endif declare unset true false namespace trait goto instanceof insteadof __DIR__ __NAMESPACE__ __halt_compiler\",c:[a.CLCM,a.HCM,{cN:\"comment\",b:\"/\\\\*\",e:\"\\\\*/\",c:[{cN:\"phpdoc\",b:\"\\\\s@[A-Za-z]+\"}]},{cN:\"comment\",eB:true,b:\"__halt_compiler.+?;\",eW:true},{cN:\"string\",b:\"<<<['\\\"]?\\\\w+['\\\"]?$\",e:\"^\\\\w+;\",c:[a.BE]},{cN:\"preprocessor\",b:\"<\\\\?php\",r:10},{cN:\"preprocessor\",b:\"\\\\?>\"},e,{cN:\"function\",bWK:true,e:\"{\",k:\"function\",i:\"\\\\$|\\\\[|%\",c:[d,{cN:\"params\",b:\"\\\\(\",e:\"\\\\)\",c:[\"self\",e,a.CBLCLM].concat(b).concat(c)}]},{cN:\"class\",bWK:true,e:\"{\",k:\"class\",i:\"[:\\\\(\\\\$]\",c:[{bWK:true,eW:true,k:\"extends\",c:[d]},d]},{b:\"=>\"}].concat(b).concat(c)}}(hljs);hljs.LANGUAGES.profile=function(a){return{c:[a.CNM,{cN:\"built_in\",b:\"{\",e:\"}$\",eB:true,eE:true,c:[a.ASM,a.QSM],r:0},{cN:\"filename\",b:\"[a-zA-Z_][\\\\da-zA-Z_]+\\\\.[\\\\da-zA-Z_]{1,3}\",e:\":\",eE:true},{cN:\"header\",b:\"(ncalls|tottime|cumtime)\",e:\"$\",k:\"ncalls tottime|10 cumtime|10 filename\",r:10},{cN:\"summary\",b:\"function calls\",e:\"$\",c:[a.CNM],r:10},a.ASM,a.QSM,{cN:\"function\",b:\"\\\\(\",e:\"\\\\)$\",c:[{cN:\"title\",b:a.UIR,r:0}],r:0}]}}(hljs);hljs.LANGUAGES.python=function(a){var f={cN:\"prompt\",b:/^(>>>|\\.\\.\\.) /};var c=[{cN:\"string\",b:/(u|b)?r?'''/,e:/'''/,c:[f],r:10},{cN:\"string\",b:/(u|b)?r?\"\"\"/,e:/\"\"\"/,c:[f],r:10},{cN:\"string\",b:/(u|r|ur)'/,e:/'/,c:[a.BE],r:10},{cN:\"string\",b:/(u|r|ur)\"/,e:/\"/,c:[a.BE],r:10},{cN:\"string\",b:/(b|br)'/,e:/'/,c:[a.BE]},{cN:\"string\",b:/(b|br)\"/,e:/\"/,c:[a.BE]}].concat([a.ASM,a.QSM]);var e={cN:\"title\",b:a.UIR};var d={cN:\"params\",b:/\\(/,e:/\\)/,c:[\"self\",a.CNM,f].concat(c)};var b={bWK:true,e:/:/,i:/[${=;\\n]/,c:[e,d],r:10};return{k:{keyword:\"and elif is global as in if from raise for except finally print import pass return exec else break not with class assert yield try while continue del or def lambda nonlocal|10\",built_in:\"None True False Ellipsis NotImplemented\"},i:/(<\\/|->|\\?)/,c:c.concat([f,a.HCM,a.inherit(b,{cN:\"function\",k:\"def\"}),a.inherit(b,{cN:\"class\",k:\"class\"}),a.CNM,{cN:\"decorator\",b:/@/,e:/$/},{b:/\\b(print|exec)\\(/}])}}(hljs);hljs.LANGUAGES.r=function(a){var b=\"([a-zA-Z]|\\\\.[a-zA-Z.])[a-zA-Z0-9._]*\";return{c:[a.HCM,{b:b,l:b,k:{keyword:\"function if in break next repeat else for return switch while try tryCatch|10 stop warning require library attach detach source setMethod setGeneric setGroupGeneric setClass ...|10\",literal:\"NULL NA TRUE FALSE T F Inf NaN NA_integer_|10 NA_real_|10 NA_character_|10 NA_complex_|10\"},r:0},{cN:\"number\",b:\"0[xX][0-9a-fA-F]+[Li]?\\\\b\",r:0},{cN:\"number\",b:\"\\\\d+(?:[eE][+\\\\-]?\\\\d*)?L\\\\b\",r:0},{cN:\"number\",b:\"\\\\d+\\\\.(?!\\\\d)(?:i\\\\b)?\",r:0},{cN:\"number\",b:\"\\\\d+(?:\\\\.\\\\d*)?(?:[eE][+\\\\-]?\\\\d*)?i?\\\\b\",r:0},{cN:\"number\",b:\"\\\\.\\\\d+(?:[eE][+\\\\-]?\\\\d*)?i?\\\\b\",r:0},{b:\"`\",e:\"`\",r:0},{cN:\"string\",b:'\"',e:'\"',c:[a.BE],r:0},{cN:\"string\",b:\"'\",e:\"'\",c:[a.BE],r:0}]}}(hljs);hljs.LANGUAGES.rib=function(a){return{k:\"ArchiveRecord AreaLightSource Atmosphere Attribute AttributeBegin AttributeEnd Basis Begin Blobby Bound Clipping ClippingPlane Color ColorSamples ConcatTransform Cone CoordinateSystem CoordSysTransform CropWindow Curves Cylinder DepthOfField Detail DetailRange Disk Displacement Display End ErrorHandler Exposure Exterior Format FrameAspectRatio FrameBegin FrameEnd GeneralPolygon GeometricApproximation Geometry Hider Hyperboloid Identity Illuminate Imager Interior LightSource MakeCubeFaceEnvironment MakeLatLongEnvironment MakeShadow MakeTexture Matte MotionBegin MotionEnd NuPatch ObjectBegin ObjectEnd ObjectInstance Opacity Option Orientation Paraboloid Patch PatchMesh Perspective PixelFilter PixelSamples PixelVariance Points PointsGeneralPolygons PointsPolygons Polygon Procedural Projection Quantize ReadArchive RelativeDetail ReverseOrientation Rotate Scale ScreenWindow ShadingInterpolation ShadingRate Shutter Sides Skew SolidBegin SolidEnd Sphere SubdivisionMesh Surface TextureCoordinates Torus Transform TransformBegin TransformEnd TransformPoints Translate TrimCurve WorldBegin WorldEnd\",i:\"</\",c:[a.HCM,a.CNM,a.ASM,a.QSM]}}(hljs);hljs.LANGUAGES.rsl=function(a){return{k:{keyword:\"float color point normal vector matrix while for if do return else break extern continue\",built_in:\"abs acos ambient area asin atan atmosphere attribute calculatenormal ceil cellnoise clamp comp concat cos degrees depth Deriv diffuse distance Du Dv environment exp faceforward filterstep floor format fresnel incident length lightsource log match max min mod noise normalize ntransform opposite option phong pnoise pow printf ptlined radians random reflect refract renderinfo round setcomp setxcomp setycomp setzcomp shadow sign sin smoothstep specular specularbrdf spline sqrt step tan texture textureinfo trace transform vtransform xcomp ycomp zcomp\"},i:\"</\",c:[a.CLCM,a.CBLCLM,a.QSM,a.ASM,a.CNM,{cN:\"preprocessor\",b:\"#\",e:\"$\"},{cN:\"shader\",bWK:true,e:\"\\\\(\",k:\"surface displacement light volume imager\"},{cN:\"shading\",bWK:true,e:\"\\\\(\",k:\"illuminate illuminance gather\"}]}}(hljs);hljs.LANGUAGES.ruby=function(e){var a=\"[a-zA-Z_][a-zA-Z0-9_]*(\\\\!|\\\\?)?\";var j=\"[a-zA-Z_]\\\\w*[!?=]?|[-+~]\\\\@|<<|>>|=~|===?|<=>|[<>]=?|\\\\*\\\\*|[-/+%^&*~`|]|\\\\[\\\\]=?\";var g={keyword:\"and false then defined module in return redo if BEGIN retry end for true self when next until do begin unless END rescue nil else break undef not super class case require yield alias while ensure elsif or include\"};var c={cN:\"yardoctag\",b:\"@[A-Za-z]+\"};var k=[{cN:\"comment\",b:\"#\",e:\"$\",c:[c]},{cN:\"comment\",b:\"^\\\\=begin\",e:\"^\\\\=end\",c:[c],r:10},{cN:\"comment\",b:\"^__END__\",e:\"\\\\n$\"}];var d={cN:\"subst\",b:\"#\\\\{\",e:\"}\",l:a,k:g};var i=[e.BE,d];var b=[{cN:\"string\",b:\"'\",e:\"'\",c:i,r:0},{cN:\"string\",b:'\"',e:'\"',c:i,r:0},{cN:\"string\",b:\"%[qw]?\\\\(\",e:\"\\\\)\",c:i},{cN:\"string\",b:\"%[qw]?\\\\[\",e:\"\\\\]\",c:i},{cN:\"string\",b:\"%[qw]?{\",e:\"}\",c:i},{cN:\"string\",b:\"%[qw]?<\",e:\">\",c:i,r:10},{cN:\"string\",b:\"%[qw]?/\",e:\"/\",c:i,r:10},{cN:\"string\",b:\"%[qw]?%\",e:\"%\",c:i,r:10},{cN:\"string\",b:\"%[qw]?-\",e:\"-\",c:i,r:10},{cN:\"string\",b:\"%[qw]?\\\\|\",e:\"\\\\|\",c:i,r:10}];var h={cN:\"function\",bWK:true,e:\" |$|;\",k:\"def\",c:[{cN:\"title\",b:j,l:a,k:g},{cN:\"params\",b:\"\\\\(\",e:\"\\\\)\",l:a,k:g}].concat(k)};var f=k.concat(b.concat([{cN:\"class\",bWK:true,e:\"$|;\",k:\"class module\",c:[{cN:\"title\",b:\"[A-Za-z_]\\\\w*(::\\\\w+)*(\\\\?|\\\\!)?\",r:0},{cN:\"inheritance\",b:\"<\\\\s*\",c:[{cN:\"parent\",b:\"(\"+e.IR+\"::)?\"+e.IR}]}].concat(k)},h,{cN:\"constant\",b:\"(::)?(\\\\b[A-Z]\\\\w*(::)?)+\",r:0},{cN:\"symbol\",b:\":\",c:b.concat([{b:j}]),r:0},{cN:\"symbol\",b:a+\":\",r:0},{cN:\"number\",b:\"(\\\\b0[0-7_]+)|(\\\\b0x[0-9a-fA-F_]+)|(\\\\b[1-9][0-9_]*(\\\\.[0-9_]+)?)|[0_]\\\\b\",r:0},{cN:\"number\",b:\"\\\\?\\\\w\"},{cN:\"variable\",b:\"(\\\\$\\\\W)|((\\\\$|\\\\@\\\\@?)(\\\\w+))\"},{b:\"(\"+e.RSR+\")\\\\s*\",c:k.concat([{cN:\"regexp\",b:\"/\",e:\"/[a-z]*\",i:\"\\\\n\",c:[e.BE,d]}]),r:0}]));d.c=f;h.c[1].c=f;return{l:a,k:g,c:f}}(hljs);hljs.LANGUAGES.ruleslanguage=function(a){return{k:{keyword:\"BILL_PERIOD BILL_START BILL_STOP RS_EFFECTIVE_START RS_EFFECTIVE_STOP RS_JURIS_CODE RS_OPCO_CODE INTDADDATTRIBUTE|5 INTDADDVMSG|5 INTDBLOCKOP|5 INTDBLOCKOPNA|5 INTDCLOSE|5 INTDCOUNT|5 INTDCOUNTSTATUSCODE|5 INTDCREATEMASK|5 INTDCREATEDAYMASK|5 INTDCREATEFACTORMASK|5 INTDCREATEHANDLE|5 INTDCREATEMASK|5 INTDCREATEOVERRIDEDAYMASK|5 INTDCREATEOVERRIDEMASK|5 INTDCREATESTATUSCODEMASK|5 INTDCREATETOUPERIOD|5 INTDDELETE|5 INTDDIPTEST|5 INTDEXPORT|5 INTDGETERRORCODE|5 INTDGETERRORMESSAGE|5 INTDISEQUAL|5 INTDJOIN|5 INTDLOAD|5 INTDLOADACTUALCUT|5 INTDLOADDATES|5 INTDLOADHIST|5 INTDLOADLIST|5 INTDLOADLISTDATES|5 INTDLOADLISTENERGY|5 INTDLOADLISTHIST|5 INTDLOADRELATEDCHANNEL|5 INTDLOADSP|5 INTDLOADSTAGING|5 INTDLOADUOM|5 INTDLOADUOMDATES|5 INTDLOADUOMHIST|5 INTDLOADVERSION|5 INTDOPEN|5 INTDREADFIRST|5 INTDREADNEXT|5 INTDRECCOUNT|5 INTDRELEASE|5 INTDREPLACE|5 INTDROLLAVG|5 INTDROLLPEAK|5 INTDSCALAROP|5 INTDSCALE|5 INTDSETATTRIBUTE|5 INTDSETDSTPARTICIPANT|5 INTDSETSTRING|5 INTDSETVALUE|5 INTDSETVALUESTATUS|5 INTDSHIFTSTARTTIME|5 INTDSMOOTH|5 INTDSORT|5 INTDSPIKETEST|5 INTDSUBSET|5 INTDTOU|5 INTDTOURELEASE|5 INTDTOUVALUE|5 INTDUPDATESTATS|5 INTDVALUE|5 STDEV INTDDELETEEX|5 INTDLOADEXACTUAL|5 INTDLOADEXCUT|5 INTDLOADEXDATES|5 INTDLOADEX|5 INTDLOADEXRELATEDCHANNEL|5 INTDSAVEEX|5 MVLOAD|5 MVLOADACCT|5 MVLOADACCTDATES|5 MVLOADACCTHIST|5 MVLOADDATES|5 MVLOADHIST|5 MVLOADLIST|5 MVLOADLISTDATES|5 MVLOADLISTHIST|5 IF FOR NEXT DONE SELECT END CALL ABORT CLEAR CHANNEL FACTOR LIST NUMBER OVERRIDE SET WEEK DISTRIBUTIONNODE ELSE WHEN THEN OTHERWISE IENUM CSV INCLUDE LEAVE RIDER SAVE DELETE NOVALUE SECTION WARN DELETE SAVE SAVE_UPDATE CLEAR DETERMINANT LABEL REPORT REVENUE ABORT CALL DONE LEAVE EACH IN LIST NOVALUE FROM TOTAL CHARGE BLOCK AND OR CSV_FILE BILL_PERIOD RATE_CODE AUXILIARY_DEMAND UIDACCOUNT RS BILL_PERIOD_SELECT HOURS_PER_MONTH INTD_ERROR_STOP SEASON_SCHEDULE_NAME ACCOUNTFACTOR ARRAYUPPERBOUND CALLSTOREDPROC GETADOCONNECTION GETCONNECT GETDATASOURCE GETQUALIFIER GETUSERID HASVALUE LISTCOUNT LISTOP LISTUPDATE LISTVALUE PRORATEFACTOR RSPRORATE SETBINPATH SETDBMONITOR WQ_OPEN BILLINGHOURS DATE DATEFROMFLOAT DATETIMEFROMSTRING DATETIMETOSTRING DATETOFLOAT DAY DAYDIFF DAYNAME DBDATETIME HOUR MINUTE MONTH MONTHDIFF MONTHHOURS MONTHNAME ROUNDDATE SAMEWEEKDAYLASTYEAR SECOND WEEKDAY WEEKDIFF YEAR YEARDAY YEARSTR COMPSUM HISTCOUNT HISTMAX HISTMIN HISTMINNZ HISTVALUE MAXNRANGE MAXRANGE MINRANGE COMPIKVA COMPKVA COMPKVARFROMKQKW COMPLF IDATTR FLAG LF2KW LF2KWH MAXKW POWERFACTOR READING2USAGE AVGSEASON MAXSEASON MONTHLYMERGE SEASONVALUE SUMSEASON ACCTREADDATES ACCTTABLELOAD CONFIGADD CONFIGGET CREATEOBJECT CREATEREPORT EMAILCLIENT EXPBLKMDMUSAGE EXPMDMUSAGE EXPORT_USAGE FACTORINEFFECT GETUSERSPECIFIEDSTOP INEFFECT ISHOLIDAY RUNRATE SAVE_PROFILE SETREPORTTITLE USEREXIT WATFORRUNRATE TO TABLE ACOS ASIN ATAN ATAN2 BITAND CEIL COS COSECANT COSH COTANGENT DIVQUOT DIVREM EXP FABS FLOOR FMOD FREPM FREXPN LOG LOG10 MAX MAXN MIN MINNZ MODF POW ROUND ROUND2VALUE ROUNDINT SECANT SIN SINH SQROOT TAN TANH FLOAT2STRING FLOAT2STRINGNC INSTR LEFT LEN LTRIM MID RIGHT RTRIM STRING STRINGNC TOLOWER TOUPPER TRIM ABORT WARN NUMDAYS RATE_CODE READ_DATE STAGING\",built_in:\"IDENTIFIER OPTIONS XML_ELEMENT XML_OP XML_ELEMENT_OF DOMDOCCREATE DOMDOCLOADFILE DOMDOCLOADXML DOMDOCSAVEFILE DOMDOCGETROOT DOMDOCADDPI DOMNODEGETNAME DOMNODEGETTYPE DOMNODEGETVALUE DOMNODEGETCHILDCT DOMNODEGETFIRSTCHILD DOMNODEGETSIBLING DOMNODECREATECHILDELEMENT DOMNODESETATTRIBUTE DOMNODEGETCHILDELEMENTCT DOMNODEGETFIRSTCHILDELEMENT DOMNODEGETSIBLINGELEMENT DOMNODEGETATTRIBUTECT DOMNODEGETATTRIBUTEI DOMNODEGETATTRIBUTEBYNAME DOMNODEGETBYNAME\"},c:[a.CLCM,a.CBLCLM,a.ASM,a.QSM,a.CNM,{cN:\"array\",b:\"#[a-zA-Z .]+\"}]}}(hljs);hljs.LANGUAGES.rust=function(b){var d={cN:\"title\",b:b.UIR};var c={cN:\"number\",b:\"\\\\b(0[xb][A-Za-z0-9_]+|[0-9_]+(\\\\.[0-9_]+)?([uif](8|16|32|64)?)?)\",r:0};var a=\"assert bool break char check claim comm const cont copy dir do drop else enum extern export f32 f64 fail false float fn for i16 i32 i64 i8 if impl int let log loop match mod move mut priv pub pure ref return self static str struct task true trait type u16 u32 u64 u8 uint unsafe use vec while\";return{k:a,i:\"</\",c:[b.CLCM,b.CBLCLM,b.inherit(b.QSM,{i:null}),b.ASM,c,{cN:\"function\",bWK:true,e:\"(\\\\(|<)\",k:\"fn\",c:[d]},{cN:\"preprocessor\",b:\"#\\\\[\",e:\"\\\\]\"},{bWK:true,e:\"(=|<)\",k:\"type\",c:[d],i:\"\\\\S\"},{bWK:true,e:\"({|<)\",k:\"trait enum\",c:[d],i:\"\\\\S\"}]}}(hljs);hljs.LANGUAGES.scala=function(a){var c={cN:\"annotation\",b:\"@[A-Za-z]+\"};var b={cN:\"string\",b:'u?r?\"\"\"',e:'\"\"\"',r:10};return{k:\"type yield lazy override def with val var false true sealed abstract private trait object null if for while throw finally protected extends import final return else break new catch super class case package default try this match continue throws\",c:[{cN:\"javadoc\",b:\"/\\\\*\\\\*\",e:\"\\\\*/\",c:[{cN:\"javadoctag\",b:\"@[A-Za-z]+\"}],r:10},a.CLCM,a.CBLCLM,a.ASM,a.QSM,b,{cN:\"class\",b:\"((case )?class |object |trait )\",e:\"({|$)\",i:\":\",k:\"case class trait object\",c:[{bWK:true,k:\"extends with\",r:10},{cN:\"title\",b:a.UIR},{cN:\"params\",b:\"\\\\(\",e:\"\\\\)\",c:[a.ASM,a.QSM,b,c]}]},a.CNM,c]}}(hljs);hljs.LANGUAGES.scss=function(a){var c=\"[a-zA-Z-][a-zA-Z0-9_-]*\";var d={cN:\"function\",b:c+\"\\\\(\",e:\"\\\\)\",c:[\"self\",a.NM,a.ASM,a.QSM]};var b={cN:\"hexcolor\",b:\"#[0-9A-Fa-f]+\"};var e={cN:\"attribute\",b:\"[A-Z\\\\_\\\\.\\\\-]+\",e:\":\",eE:true,i:\"[^\\\\s]\",starts:{cN:\"value\",eW:true,eE:true,c:[d,b,a.NM,a.QSM,a.ASM,a.CBLCLM,{cN:\"important\",b:\"!important\"}]}};return{cI:true,i:\"[=/|']\",c:[a.CLCM,a.CBLCLM,{cN:\"function\",b:c+\"\\\\(\",e:\"\\\\)\",c:[\"self\",a.NM,a.ASM,a.QSM]},{cN:\"id\",b:\"\\\\#[A-Za-z0-9_-]+\",r:0},{cN:\"class\",b:\"\\\\.[A-Za-z0-9_-]+\",r:0},{cN:\"attr_selector\",b:\"\\\\[\",e:\"\\\\]\",i:\"$\"},{cN:\"tag\",b:\"\\\\b(a|abbr|acronym|address|area|article|aside|audio|b|base|big|blockquote|body|br|button|canvas|caption|cite|code|col|colgroup|command|datalist|dd|del|details|dfn|div|dl|dt|em|embed|fieldset|figcaption|figure|footer|form|frame|frameset|(h[1-6])|head|header|hgroup|hr|html|i|iframe|img|input|ins|kbd|keygen|label|legend|li|link|map|mark|meta|meter|nav|noframes|noscript|object|ol|optgroup|option|output|p|param|pre|progress|q|rp|rt|ruby|samp|script|section|select|small|span|strike|strong|style|sub|sup|table|tbody|td|textarea|tfoot|th|thead|time|title|tr|tt|ul|var|video)\\\\b\",r:0},{cN:\"pseudo\",b:\":(visited|valid|root|right|required|read-write|read-only|out-range|optional|only-of-type|only-child|nth-of-type|nth-last-of-type|nth-last-child|nth-child|not|link|left|last-of-type|last-child|lang|invalid|indeterminate|in-range|hover|focus|first-of-type|first-line|first-letter|first-child|first|enabled|empty|disabled|default|checked|before|after|active)\"},{cN:\"pseudo\",b:\"::(after|before|choices|first-letter|first-line|repeat-index|repeat-item|selection|value)\"},{cN:\"attribute\",b:\"\\\\b(z-index|word-wrap|word-spacing|word-break|width|widows|white-space|visibility|vertical-align|unicode-bidi|transition-timing-function|transition-property|transition-duration|transition-delay|transition|transform-style|transform-origin|transform|top|text-underline-position|text-transform|text-shadow|text-rendering|text-overflow|text-indent|text-decoration-style|text-decoration-line|text-decoration-color|text-decoration|text-align-last|text-align|tab-size|table-layout|right|resize|quotes|position|pointer-events|perspective-origin|perspective|page-break-inside|page-break-before|page-break-after|padding-top|padding-right|padding-left|padding-bottom|padding|overflow-y|overflow-x|overflow-wrap|overflow|outline-width|outline-style|outline-offset|outline-color|outline|orphans|order|opacity|object-position|object-fit|normal|none|nav-up|nav-right|nav-left|nav-index|nav-down|min-width|min-height|max-width|max-height|mask|marks|margin-top|margin-right|margin-left|margin-bottom|margin|list-style-type|list-style-position|list-style-image|list-style|line-height|letter-spacing|left|justify-content|initial|inherit|ime-mode|image-orientation|image-resolution|image-rendering|icon|hyphens|height|font-weight|font-variant-ligatures|font-variant|font-style|font-stretch|font-size-adjust|font-size|font-language-override|font-kerning|font-feature-settings|font-family|font|float|flex-wrap|flex-shrink|flex-grow|flex-flow|flex-direction|flex-basis|flex|filter|empty-cells|display|direction|cursor|counter-reset|counter-increment|content|column-width|column-span|column-rule-width|column-rule-style|column-rule-color|column-rule|column-gap|column-fill|column-count|columns|color|clip-path|clip|clear|caption-side|break-inside|break-before|break-after|box-sizing|box-shadow|box-decoration-break|bottom|border-width|border-top-width|border-top-style|border-top-right-radius|border-top-left-radius|border-top-color|border-top|border-style|border-spacing|border-right-width|border-right-style|border-right-color|border-right|border-radius|border-left-width|border-left-style|border-left-color|border-left|border-image-width|border-image-source|border-image-slice|border-image-repeat|border-image-outset|border-image|border-color|border-collapse|border-bottom-width|border-bottom-style|border-bottom-right-radius|border-bottom-left-radius|border-bottom-color|border-bottom|border|background-size|background-repeat|background-position|background-origin|background-image|background-color|background-clip|background-attachment|background|backface-visibility|auto|animation-timing-function|animation-play-state|animation-name|animation-iteration-count|animation-fill-mode|animation-duration|animation-direction|animation-delay|animation|align-self|align-items|align-content)\\\\b\",i:\"[^\\\\s]\"},{cN:\"value\",b:\"\\\\b(whitespace|wait|w-resize|visible|vertical-text|vertical-ideographic|uppercase|upper-roman|upper-alpha|underline|transparent|top|thin|thick|text|text-top|text-bottom|tb-rl|table-header-group|table-footer-group|sw-resize|super|strict|static|square|solid|small-caps|separate|se-resize|scroll|s-resize|rtl|row-resize|ridge|right|repeat|repeat-y|repeat-x|relative|progress|pointer|overline|outside|outset|oblique|nowrap|not-allowed|normal|none|nw-resize|no-repeat|no-drop|newspaper|ne-resize|n-resize|move|middle|medium|ltr|lr-tb|lowercase|lower-roman|lower-alpha|loose|list-item|line|line-through|line-edge|lighter|left|keep-all|justify|italic|inter-word|inter-ideograph|inside|inset|inline|inline-block|inherit|inactive|ideograph-space|ideograph-parenthesis|ideograph-numeric|ideograph-alpha|horizontal|hidden|help|hand|groove|fixed|ellipsis|e-resize|double|dotted|distribute|distribute-space|distribute-letter|distribute-all-lines|disc|disabled|default|decimal|dashed|crosshair|collapse|col-resize|circle|char|center|capitalize|break-word|break-all|bottom|both|bolder|bold|block|bidi-override|below|baseline|auto|always|all-scroll|absolute|table|table-cell)\\\\b\"},{cN:\"value\",b:\":\",e:\";\",c:[b,a.NM,a.QSM,a.ASM,{cN:\"important\",b:\"!important\"}]},{cN:\"at_rule\",b:\"@\",e:\"[{;]\",k:\"mixin include for extend charset import media page font-face namespace\",c:[d,a.QSM,a.ASM,b,a.NM,{cN:\"preprocessor\",b:\"\\\\s[A-Za-z0-9_.-]+\",r:0}]}]}}(hljs);hljs.LANGUAGES.smalltalk=function(a){var b=\"[a-z][a-zA-Z0-9_]*\";var d={cN:\"char\",b:\"\\\\$.{1}\"};var c={cN:\"symbol\",b:\"#\"+a.UIR};return{k:\"self super nil true false thisContext\",c:[{cN:\"comment\",b:'\"',e:'\"',r:0},a.ASM,{cN:\"class\",b:\"\\\\b[A-Z][A-Za-z0-9_]*\",r:0},{cN:\"method\",b:b+\":\"},a.CNM,c,d,{cN:\"localvars\",b:\"\\\\|\\\\s*\"+b+\"(\\\\s+\"+b+\")*\\\\s*\\\\|\"},{cN:\"array\",b:\"\\\\#\\\\(\",e:\"\\\\)\",c:[a.ASM,d,a.CNM,c]}]}}(hljs);hljs.LANGUAGES.sql=function(a){return{cI:true,c:[{cN:\"operator\",b:\"(begin|end|start|commit|rollback|savepoint|lock|alter|create|drop|rename|call|delete|do|handler|insert|load|replace|select|truncate|update|set|show|pragma|grant)\\\\b(?!:)\",e:\";\",eW:true,k:{keyword:\"all partial global month current_timestamp using go revoke smallint indicator end-exec disconnect zone with character assertion to add current_user usage input local alter match collate real then rollback get read timestamp session_user not integer bit unique day minute desc insert execute like ilike|2 level decimal drop continue isolation found where constraints domain right national some module transaction relative second connect escape close system_user for deferred section cast current sqlstate allocate intersect deallocate numeric public preserve full goto initially asc no key output collation group by union session both last language constraint column of space foreign deferrable prior connection unknown action commit view or first into float year primary cascaded except restrict set references names table outer open select size are rows from prepare distinct leading create only next inner authorization schema corresponding option declare precision immediate else timezone_minute external varying translation true case exception join hour default double scroll value cursor descriptor values dec fetch procedure delete and false int is describe char as at in varchar null trailing any absolute current_time end grant privileges when cross check write current_date pad begin temporary exec time update catalog user sql date on identity timezone_hour natural whenever interval work order cascade diagnostics nchar having left call do handler load replace truncate start lock show pragma exists number trigger if before after each row\",aggregate:\"count sum min max avg\"},c:[{cN:\"string\",b:\"'\",e:\"'\",c:[a.BE,{b:\"''\"}],r:0},{cN:\"string\",b:'\"',e:'\"',c:[a.BE,{b:'\"\"'}],r:0},{cN:\"string\",b:\"`\",e:\"`\",c:[a.BE]},a.CNM]},a.CBLCLM,{cN:\"comment\",b:\"--\",e:\"$\"}]}}(hljs);hljs.LANGUAGES.tex=function(a){var d={cN:\"command\",b:\"\\\\\\\\[a-zA-Zа-яА-я]+[\\\\*]?\"};var c={cN:\"command\",b:\"\\\\\\\\[^a-zA-Zа-яА-я0-9]\"};var b={cN:\"special\",b:\"[{}\\\\[\\\\]\\\\&#~]\",r:0};return{c:[{b:\"\\\\\\\\[a-zA-Zа-яА-я]+[\\\\*]? *= *-?\\\\d*\\\\.?\\\\d+(pt|pc|mm|cm|in|dd|cc|ex|em)?\",rB:true,c:[d,c,{cN:\"number\",b:\" *=\",e:\"-?\\\\d*\\\\.?\\\\d+(pt|pc|mm|cm|in|dd|cc|ex|em)?\",eB:true}],r:10},d,c,b,{cN:\"formula\",b:\"\\\\$\\\\$\",e:\"\\\\$\\\\$\",c:[d,c,b],r:0},{cN:\"formula\",b:\"\\\\$\",e:\"\\\\$\",c:[d,c,b],r:0},{cN:\"comment\",b:\"%\",e:\"$\",r:0}]}}(hljs);hljs.LANGUAGES.vala=function(a){return{k:{keyword:\"char uchar unichar int uint long ulong short ushort int8 int16 int32 int64 uint8 uint16 uint32 uint64 float double bool struct enum string void weak unowned owned async signal static abstract interface override while do for foreach else switch case break default return try catch public private protected internal using new this get set const stdout stdin stderr var\",built_in:\"DBus GLib CCode Gee Object\",literal:\"false true null\"},c:[{cN:\"class\",bWK:true,e:\"{\",k:\"class interface delegate namespace\",i:\"[^,:\\\\n\\\\s\\\\.]\",c:[{cN:\"title\",b:a.UIR}]},a.CLCM,a.CBLCLM,{cN:\"string\",b:'\"\"\"',e:'\"\"\"',r:5},a.ASM,a.QSM,a.CNM,{cN:\"preprocessor\",b:\"^#\",e:\"$\",r:2},{cN:\"constant\",b:\" [A-Z_]+ \",r:0}]}}(hljs);hljs.LANGUAGES.vbnet=function(a){return{cI:true,k:{keyword:\"addhandler addressof alias and andalso aggregate ansi as assembly auto binary by byref byval call case catch class compare const continue custom declare default delegate dim distinct do each equals else elseif end enum erase error event exit explicit finally for friend from function get global goto group handles if implements imports in inherits interface into is isfalse isnot istrue join key let lib like loop me mid mod module mustinherit mustoverride mybase myclass namespace narrowing new next not notinheritable notoverridable of off on operator option optional or order orelse overloads overridable overrides paramarray partial preserve private property protected public raiseevent readonly redim rem removehandler resume return select set shadows shared skip static step stop structure strict sub synclock take text then throw to try unicode until using when where while widening with withevents writeonly xor\",built_in:\"boolean byte cbool cbyte cchar cdate cdec cdbl char cint clng cobj csbyte cshort csng cstr ctype date decimal directcast double gettype getxmlnamespace iif integer long object sbyte short single string trycast typeof uinteger ulong ushort\",literal:\"true false nothing\"},i:\"(//|endif|gosub|variant|wend)\",c:[a.inherit(a.QSM,{c:[{b:'\"\"'}]}),{cN:\"comment\",b:\"'\",e:\"$\",rB:true,c:[{cN:\"xmlDocTag\",b:\"'''|<!--|-->\"},{cN:\"xmlDocTag\",b:\"</?\",e:\">\"},]},a.CNM,{cN:\"preprocessor\",b:\"#\",e:\"$\",k:\"if else elseif end region externalsource\"},]}}(hljs);hljs.LANGUAGES.vbscript=function(a){return{cI:true,k:{keyword:\"call class const dim do loop erase execute executeglobal exit for each next function if then else on error option explicit new private property let get public randomize redim rem select case set stop sub while wend with end to elseif is or xor and not class_initialize class_terminate default preserve in me byval byref step resume goto\",built_in:\"lcase month vartype instrrev ubound setlocale getobject rgb getref string weekdayname rnd dateadd monthname now day minute isarray cbool round formatcurrency conversions csng timevalue second year space abs clng timeserial fixs len asc isempty maths dateserial atn timer isobject filter weekday datevalue ccur isdate instr datediff formatdatetime replace isnull right sgn array snumeric log cdbl hex chr lbound msgbox ucase getlocale cos cdate cbyte rtrim join hour oct typename trim strcomp int createobject loadpicture tan formatnumber mid scriptenginebuildversion scriptengine split scriptengineminorversion cint sin datepart ltrim sqr scriptenginemajorversion time derived eval date formatpercent exp inputbox left ascw chrw regexp server response request cstr err\",literal:\"true false null nothing empty\"},i:\"//\",c:[a.inherit(a.QSM,{c:[{b:'\"\"'}]}),{cN:\"comment\",b:\"'\",e:\"$\"},a.CNM]}}(hljs);hljs.LANGUAGES.vhdl=function(a){return{cI:true,k:{keyword:\"abs access after alias all and architecture array assert attribute begin block body buffer bus case component configuration constant context cover disconnect downto default else elsif end entity exit fairness file for force function generate generic group guarded if impure in inertial inout is label library linkage literal loop map mod nand new next nor not null of on open or others out package port postponed procedure process property protected pure range record register reject release rem report restrict restrict_guarantee return rol ror select sequence severity shared signal sla sll sra srl strong subtype then to transport type unaffected units until use variable vmode vprop vunit wait when while with xnor xor\",typename:\"boolean bit character severity_level integer time delay_length natural positive string bit_vector file_open_kind file_open_status std_ulogic std_ulogic_vector std_logic std_logic_vector unsigned signed boolean_vector integer_vector real_vector time_vector\"},i:\"{\",c:[a.CBLCLM,{cN:\"comment\",b:\"--\",e:\"$\"},a.QSM,a.CNM,{cN:\"literal\",b:\"'(U|X|0|1|Z|W|L|H|-)'\",c:[a.BE]},{cN:\"attribute\",b:\"'[A-Za-z](_?[A-Za-z0-9])*\",c:[a.BE]}]}}(hljs);hljs.LANGUAGES.xml=function(a){var c=\"[A-Za-z0-9\\\\._:-]+\";var b={eW:true,r:0,c:[{cN:\"attribute\",b:c,r:0},{b:'=\"',rB:true,e:'\"',c:[{cN:\"value\",b:'\"',eW:true}]},{b:\"='\",rB:true,e:\"'\",c:[{cN:\"value\",b:\"'\",eW:true}]},{b:\"=\",c:[{cN:\"value\",b:\"[^\\\\s/>]+\"}]}]};return{cI:true,c:[{cN:\"pi\",b:\"<\\\\?\",e:\"\\\\?>\",r:10},{cN:\"doctype\",b:\"<!DOCTYPE\",e:\">\",r:10,c:[{b:\"\\\\[\",e:\"\\\\]\"}]},{cN:\"comment\",b:\"<!--\",e:\"-->\",r:10},{cN:\"cdata\",b:\"<\\\\!\\\\[CDATA\\\\[\",e:\"\\\\]\\\\]>\",r:10},{cN:\"tag\",b:\"<style(?=\\\\s|>|$)\",e:\">\",k:{title:\"style\"},c:[b],starts:{e:\"</style>\",rE:true,sL:\"css\"}},{cN:\"tag\",b:\"<script(?=\\\\s|>|$)\",e:\">\",k:{title:\"script\"},c:[b],starts:{e:\"<\\/script>\",rE:true,sL:\"javascript\"}},{b:\"<%\",e:\"%>\",sL:\"vbscript\"},{cN:\"tag\",b:\"</?\",e:\"/?>\",r:0,c:[{cN:\"title\",b:\"[^ /><]+\"},b]}]}}(hljs);\n"
  },
  {
    "path": "content/present-ionic/slides/plugin/print-pdf/print-pdf.js",
    "content": "/**\n * phantomjs script for printing presentations to PDF.\n *\n * Example:\n * phantomjs print-pdf.js \"http://lab.hakim.se/reveal-js?print-pdf\" reveal-demo.pdf\n *\n * By Manuel Bieh (https://github.com/manuelbieh)\n */\n\n// html2pdf.js\nvar page = new WebPage();\nvar system = require( 'system' );\n\npage.viewportSize  = {\n\twidth: 1024,\n\theight: 768\n};\n\npage.paperSize = {\n\tformat: 'letter',\n\torientation: 'landscape',\n\tmargin: {\n\t\tleft: '0',\n\t\tright: '0',\n\t\ttop: '0',\n\t\tbottom: '0'\n\t}\n};\n\nvar revealFile = system.args[1] || 'index.html?print-pdf';\nvar slideFile = system.args[2] || 'slides.pdf';\n\nif( slideFile.match( /\\.pdf$/gi ) === null ) {\n\tslideFile += '.pdf';\n}\n\nconsole.log( 'Printing PDF...' );\n\npage.open( revealFile, function( status ) {\n\tconsole.log( 'Printed succesfully' );\n\tpage.render( slideFile );\n\tphantom.exit();\n} );\n\n"
  },
  {
    "path": "content/present-ionic/style.css",
    "content": "html {\n    margin:0;\n    padding:0;\n    -webkit-font-smoothing: antialiased;\n    font-smoothing: antialiased;\n    background: url(img/bg.jpg) no-repeat center center fixed;\n    -webkit-background-size: cover;\n    -moz-background-size: cover;\n    -o-background-size: cover;\n    background-size: cover;\n}\n\nbody {\n    margin: 0;\n    padding: 0;\n    color: #fff;\n    font-size: 12px;\n    font-family: \"HelveticaNeue-Light\", \"Helvetica Neue Light\", \"Helvetica Neue\", Helvetica, Arial, \"Lucida Grande\", sans-serif;\n    font-weight: 300;\n    text-align:center;\n}\n\n.wrapper {\n    width: 960px;\n    text-align: center;\n    margin: auto;\n}\n\n.logo-header {\n    margin-top: 10px;\n    margin-left: auto;\n    margin-right: auto;\n    display: block;\n    height: 113px;\n    width: 168px;\n    text-align: center;\n    background: url(img/present-ionic.png) no-repeat;\n}\n\n@media only screen and (-webkit-min-device-pixel-ratio: 2) {\n     .logo-header {\n          background: url(img/present-ionic@2x.png) no-repeat;\n          background-size: 168px 113px;\n     }\n}\n\n\nh1 {\n    color: #deebff;\n    font-family: \"HelveticaNeue-Light\", \"Helvetica Neue Light\", \"Helvetica Neue\", Helvetica, Arial, \"Lucida Grande\", sans-serif;\n    font-weight: 300;\n    font-size: 36px;\n    margin-top: 50px;\n    text-shadow: 0px 1px 2px rgba(0, 0, 0, 0.1);\n}\n\nspan {\n    color: #fff;\n    font-family: \"HelveticaNeue\", \"Helvetica Neue Light\", \"Helvetica Neue\", Helvetica, Arial, \"Lucida Grande\", sans-serif;\n    font-weight: 500;\n}\n\np {\n    color: #BDD1F3;\n    font-family: \"HelveticaNeue-Light\", \"Helvetica Neue Light\", \"Helvetica Neue\", Helvetica, Arial, \"Lucida Grande\", sans-serif;\n    font-weight: 300;\n    font-size: 18px;\n    text-shadow: 0px 1px 2px rgba(0, 0, 0, 0.1);\n}\n\n\n.btn {\n    display: inline-block;\n    text-decoration: none;\n    color: #e15e4d;\n    font-family: \"HelveticaNeue\", \"Helvetica Neue Light\", \"Helvetica Neue\", Helvetica, Arial, \"Lucida Grande\", sans-serif;\n    font-weight: 500;\n    font-size: 34px;\n    background-color: #fff;\n    margin: 30px 0px;\n    padding: 20px 25px;\n    border-radius: 8px;\n    box-shadow: 0px 2px 2px rgba(0, 0, 0, 0.15), inset 0px -4px 0px rgba(0, 0, 0, 0.1);\n    opacity: .9;\n    transition: .2s ease-in-out;\n    transition-property: opacity, border-color;\n}\n\n.btn:hover {\n    opacity: 1;\n}\n\n.btn:active {\n    opacity: .9;\n    color: #c75749;\n    padding: 22px 25px 18px 25px;\n    background-color: #f5f5f5;\n    box-shadow: 0px 1px 0px rgba(255, 255, 255, 0), inset 0px 4px 0px rgba(0, 0, 0, 0.07);\n}\n\nfooter {\n    bottom: 10px;\n    position: fixed;\n    text-align: center;\n    width: 960px;\n    margin: auto;\n}\n\n#twitter-share {\n    animation-duration: 1s;\n    animation-delay: 2s;\n    -webkitt-animation-duration: 1s;\n    -webkit-animation-delay: 2s;\n    -moz-animation-duration: 1s;\n    -moz-animation-delay: 2s;\n}\n\n.own {\n    color: white;\n    font-size: 14px;\n}\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n"
  },
  {
    "path": "content/public_html/css/site.css",
    "content": "/*\nErrno::ENOENT: No such file or directory - assets/sass/site.scss\n\nBacktrace:\n/Library/Ruby/Gems/2.0.0/gems/sass-3.2.14/lib/sass/plugin/compiler.rb:360:in `read'\n/Library/Ruby/Gems/2.0.0/gems/sass-3.2.14/lib/sass/plugin/compiler.rb:360:in `update_stylesheet'\n/Library/Ruby/Gems/2.0.0/gems/sass-3.2.14/lib/sass/plugin/compiler.rb:203:in `block in update_stylesheets'\n/Library/Ruby/Gems/2.0.0/gems/sass-3.2.14/lib/sass/plugin/compiler.rb:201:in `each'\n/Library/Ruby/Gems/2.0.0/gems/sass-3.2.14/lib/sass/plugin/compiler.rb:201:in `update_stylesheets'\n/Library/Ruby/Gems/2.0.0/gems/sass-3.2.14/lib/sass/plugin/compiler.rb:235:in `watch'\n/Library/Ruby/Gems/2.0.0/gems/sass-3.2.14/lib/sass/plugin.rb:107:in `method_missing'\n/Library/Ruby/Gems/2.0.0/gems/sass-3.2.14/lib/sass/exec.rb:463:in `watch_or_update'\n/Library/Ruby/Gems/2.0.0/gems/sass-3.2.14/lib/sass/exec.rb:326:in `process_result'\n/Library/Ruby/Gems/2.0.0/gems/sass-3.2.14/lib/sass/exec.rb:41:in `parse'\n/Library/Ruby/Gems/2.0.0/gems/sass-3.2.14/lib/sass/exec.rb:21:in `parse!'\n/Library/Ruby/Gems/2.0.0/gems/sass-3.2.14/bin/sass:13:in `<top (required)>'\n/usr/bin/sass:23:in `load'\n/usr/bin/sass:23:in `<main>'\n*/\nbody:before {\n  white-space: pre;\n  font-family: monospace;\n  content: \"Errno::ENOENT: No such file or directory - assets/sass/site.scss\"; }\n"
  },
  {
    "path": "content/robots.txt",
    "content": "User-Agent: *\n\nDisallow: /dist/\nDisallow: /docs//demos\nDisallow: /docs/es/\nDisallow: /docs/fr/\nDisallow: /docs/pages/theming/color-generator\nDisallow: /docs/pt/\nDisallow: /docs/v1\nDisallow: /docs/v2\nDisallow: /docs/v3\nDisallow: /docs/v4\nDisallow: /docs/v5\nDisallow: /docs/zh/\nDisallow: /present-ionic/slides/\n\nSitemap: https://ionicframework.com/sitemap.xml\nSitemap: https://ionicframework.com/docs/sitemap.xml\n"
  },
  {
    "path": "content/scss/_demos.scss",
    "content": "#demo {\n\n  padding-bottom: 80px;\n\n  #demo-top {\n    margin-bottom: 60px;\n    h1, h4 {\n      text-align: center;\n    }\n    h1 {\n      border: none;\n      margin: 50px 0px 5px 0px;\n    }\n    h4 {\n      color: #777;\n      font-weight: normal;\n      margin-bottom: 20px;\n    }\n  }\n\n  pre {\n    border: none;\n  }\n\n  .phone-case {\n    margin: 0px auto 30px auto;\n    float: none;\n    cursor: pointer;\n    iframe {\n      cursor: pointer;\n    }\n  }\n}\n"
  },
  {
    "path": "content/scss/_docs-api.scss",
    "content": "\n.btn.btn-default {\n  border-color: #ddd;\n}\n.picker {\n  position: absolute;\n  max-width: 180px;\n  border-radius: 2px;\n  background: rgba(255, 255, 255, .3);\n  box-shadow: 0px 1px 0px 0px rgba(0, 0, 0, 0.05), inset 0px 1px 0px 0px rgba(255, 255, 255, 0.1);\n\n  select {\n    display: block;\n    padding: 2px 60px 2px 10px;\n    width: 150%;\n    height: 24px;\n    outline: none;\n    border: none;\n    background: transparent;\n    color: #fff;\n    text-indent: 0.01px;\n    text-overflow: '';\n    font-size: 14px;\n    cursor: pointer;\n    -webkit-appearance: none;\n    -moz-appearance: none;\n  }\n\n  select option {\n    background-color: #9cbbed;\n  }\n\n  &:hover {\n    background: rgba(255, 255, 255, .4);\n  }\n\n  &:after {\n    position: absolute;\n    top: 50%;\n    right: 6%;\n    z-index: 0;\n    z-index: 99;\n    margin-top: -2px;\n    width: 0;\n    height: 0;\n    border-top: 3px solid;\n    border-right: 3px solid rgba(0, 0, 0, 0);\n    border-left: 3px solid rgba(0, 0, 0, 0);\n    color: rgba(255, 255, 255, 0.6);\n    content: \"\";\n  }\n\n}\n\n.api-title {\n  margin-top: 0;\n  font-size: 24px;\n}\n\n.docs-api h2 {\n  color: #222;\n  font-size: 22px;\n}\n\n.docs-api p,\n.docs-api td,\n.docs-api th {\n  color: #444;\n}\n\n.improve-docs {\n  position: absolute;\n  top: 4px;\n  right: 10px;\n  display: none;\n  float: right;\n\n  a {\n    padding: 2px 6px;\n    border: 2px solid #4f8ef7;\n    border-radius: 2px;\n\n    &:hover {\n      text-decoration: none;\n      opacity: 1;\n    }\n  }\n}\n\n@media (min-width: 992px) {\n  .improve-docs {\n    display: block;\n  }\n}\n\n"
  },
  {
    "path": "content/scss/_docs.scss",
    "content": "@font-face {\n  font-weight: normal;\n  font-style: normal;\n  font-family: \"Ionicons\";\n  src: url(\"../fonts/ionicons-v2.eot?v=1.3.0\");\n  src: url(\"../fonts/ionicons-v2.eot?v=1.3.0#iefix\") format(\"embedded-opentype\"), url(\"../fonts/ionicons-v2.ttf?v=1.3.0\") format(\"truetype\"), url(\"../fonts/ionicons-v2.woff?v=1.3.0\") format(\"woff\"), url(\"../fonts/ionicons-v2.svg?v=1.3.0#Ionicons\") format(\"svg\"); }\n\n.fixed-menu {\n  position: fixed;\n  -webkit-transform: translate3d(0, 0, 0);\n  -moz-transform: translate3d(0, 0, 0);\n  transform: translate3d(0, 0, 0);\n}\n.ionic.ionic-example .bar {\n  position: relative;\n}\n.device-preview-page .aside-menu {\n  display: none;\n}\n@media (min-width: 992px) {\n  .device-preview-page .aside-menu {\n    display: block;\n  }\n}\n\n@media (max-width: 991px) {\n  .device-preview-page .main-content {\n    width: 100%;\n  }\n}\n\n.left-menu {\n  margin-top: 8px;\n  padding-left: 0;\n  list-style: none;\n  font-size: 12px;\n\n  &:first-child {\n    margin-top: 0;\n  }\n\n  a {\n    display: block;\n    color: #444;\n    text-decoration: none;\n    &:hover {\n      background: transparent !important;\n    }\n  }\n\n  li {\n    display: none;\n    margin: 8px 0;\n    list-style: none;\n\n    &.menu-title {\n      display: block;\n      margin-top: 0;\n    }\n\n    ul {\n      display: none;\n      padding-left: 12px;\n    }\n\n  }\n\n  .menu-title a {\n    color: #aaaaaa;\n    text-transform: uppercase;\n    letter-spacing: 2px;\n    font-size: 11px;\n    line-height: 20px;\n  }\n\n  &.nav li.active {\n    > a {\n      border-right: 2px solid $brand-primary;\n      color: $brand-primary;\n    }\n    > ul {\n      display: block;\n    }\n  }\n\n  &.nav > li > a {\n    padding: 1px 0;\n  }\n}\n\n.left-menu.active-menu {\n  .menu-title a {\n    color: $brand-primary;\n  }\n   li {\n    display: block;\n  }\n}\n\n.docs .aside-menu {\n  margin-bottom: 20px;\n}\n.docs .main-content {\n  margin-bottom: 150px;\n}\n\n.docs-section {\n  padding-bottom: 20px;\n  color: #444;\n  font-size: 14px;\n  line-height: 1.9em;\n\n  .panel-heading {\n    font-family: $font-family-monospace;\n  }\n\n  .highlight {\n    margin: 10px 0 20px 0;\n  }\n\n  pre {\n    margin-bottom: 0;\n    font-size: 12px !important;\n  }\n\n  h1, h2, h3 {\n    a {\n      text-decoration: none;\n    }\n  }\n\n  h2, h3 {\n    padding-bottom: 0;\n  }\n  h2 a, h3 a {\n    display: block;\n    padding-bottom: 8px;\n    transition: color .15s ease-in-out;\n  }\n\n  td, th {\n    font-size: 14px !important;\n  }\n}\n\npre {\n  border: 0;\n  border-left: 4px solid #D7DBE4;\n  background: #F0F3F8;\n}\n\n.device-preview-page .docs-section {\n  padding-bottom: 60px;\n  min-height: 320px;\n}\n\n.docs-section {\n\n  h2 {\n    padding-bottom: 16px;\n  }\n\n  h1, h2, h3 {\n    a {\n      color: #999;\n    }\n  }\n\n  h1 a:hover,\n  h2 a:hover,\n  h3 a:hover {\n    color: #111;\n    text-decoration: none;\n  }\n\n  &.active {\n    h2 a, h3 a {\n      color: #222;\n    }\n  }\n}\n\n.doc-example {\n  display: none;\n}\n\n.docs-section + .docs-section {\n  padding-top: 20px;\n}\n\n.device-preview-page {\n  position: relative;\n\n  .docs-section:last-child {\n    padding-bottom: 600px;\n  }\n\n  .ionic .content-wrapper {\n    overflow: hidden !important;\n    height: 100%;\n  }\n\n  .device-preview {\n    position: absolute;\n    right: 0;\n    z-index: 1;\n    width: 380px;\n    height: 810px;\n    background: url(\"/img/phone-case.png\") no-repeat right top;\n\n    a {\n      opacity: 1;\n    }\n\n    .content {\n      position: relative;\n    }\n\n  }\n  @media only screen and (-webkit-min-device-pixel-ratio: 1.3),\n         only screen and (   min--moz-device-pixel-ratio: 1.3),\n         only screen and (        min-device-pixel-ratio: 1.3),\n         only screen and (             min-resolution: 124dpi)\n    {\n      .device-preview {\n        background-image: url(\"/img/phone-case@2x.png\");\n        background-size: 365px 792px;\n      }\n    }\n\n  .fixed-preview {\n    position: fixed;\n    top: 0;\n    right: auto;\n    -webkit-transform: translate3d(0, 0, 0);\n    -moz-transform: translate3d(0, 0, 0);\n    transform: translate3d(0, 0, 0);\n  }\n\n  .docs-section {\n    padding-right: 380px;\n  }\n\n  @media (max-width: 767px) {\n    .device-preview {\n      display: none;\n    }\n    .docs-section {\n      padding-right: 0;\n    }\n  }\n\n  .device-preview > div {\n    position: absolute;\n    top: 104px;\n    left: 33px;\n    z-index: 0;\n    width: 328px;\n    height: 576px;\n    border: 4px solid #22272d;\n    background-color: white;\n    opacity: 0;\n    transition: opacity .2s ease-in-out;\n\n    &.active-preview {\n      z-index: 100;\n      opacity: 1;\n    }\n\n    &.screen-bg {\n      opacity: 1 !important;\n    }\n\n  }\n\n  .default-screen .content {\n    height: 100%;\n    background: url('/img/ionic_icon.svg') no-repeat center 115px;\n    background-size: 250px 250px;\n  }\n\n}\n\n.attention-arrow {\n  position: absolute;\n  background: url(\"/img/attention-arrow.png\") no-repeat;\n}\n@media only screen and (-webkit-min-device-pixel-ratio: 1.3),\n       only screen and (   min--moz-device-pixel-ratio: 1.3),\n       only screen and (        min-device-pixel-ratio: 1.3),\n       only screen and (             min-resolution: 124dpi)\n{\n  .attention-arrow {\n    background: url(\"/img/attention-arrow@2x.png\") no-repeat;\n    background-size: 40px 74px;\n  }\n}\n\n.ionic div.padding-example {\n  position: relative;\n  margin: 50px auto;\n  max-width: 240px;\n  height: 240px;\n  background: #ccc;\n\n  :first-child {\n    position: absolute;\n    top: 50px;\n    left: 50px;\n    width: 140px;\n    height: 140px;\n    background: #4A87EE;\n  }\n}\n\n.ionic .tabs {\n  position: absolute !important;\n}\n\n.ionic .item.tabs {\n  position: relative !important;\n}\n\n.advanced-panel {\n  padding: 10px;\n  border: 1px solid #A7C6FC;\n  border-radius: 2px;\n  background: #F6F9FE;\n  color: #777;\n\n  em {\n    padding-right: 4px;\n    color: #528FF7;\n    vertical-align: middle;\n    font-weight: bold;\n    font-size: 18px;\n  }\n\n  a {\n    text-decoration: underline;\n    &:hover {\n      text-decoration: none;\n    }\n  }\n}\n\n.cards-bg {\n  background: #f9f9f9;\n}\n\n.ionic .list.color-list-demo .item {\n  padding: 14px 15px 14px 15px;\n}\n.ionic .color-demo {\n  float: right;\n  width: 20px;\n  height: 20px;\n  border-width: 1px;\n  border-style: solid;\n  border-radius: 4px;\n  background: gray;\n}\n\n.ionic .col-demo {\n  padding: 5px;\n  width: 100%;\n  border: 1px solid #ddd;\n  border-radius: 2px;\n  background: #f7f7f7;\n  text-align: center;\n}\n\n.ionic .responsive-break {\n  -webkit-flex-direction: column;\n  -ms-flex-direction: column;\n  flex-direction: column;\n  -webkit-box-direction: normal;\n  -moz-box-direction: normal;\n  -webkit-box-orient: vertical;\n  -moz-box-orient: vertical;\n\n  .col {\n    margin-bottom: 15px;\n    width: 100%;\n  }\n}\n\n.ionic .ionicons-demo li {\n  display: inline-block;\n  padding: 2px;\n  font-size: 32px;\n\n  &:before {\n    display: block;\n    width: 42px;\n    text-align: center;\n  }\n}\n\n.table tr td:first-child {\n  white-space: nowrap;\n}\n\n.docs-home-row {\n  text-align: center;\n\n  > div {\n    margin-top: 50px;\n  }\n\n  h3 {\n    color: #333;\n    font-family: $font-family-medium;\n    margin-top: 8px;\n  }\n\n  h4 {\n    margin-bottom: 8px;\n  }\n\n  p {\n    color: #888;\n    font-size: 13px;\n    font-family: $font-family-regular;\n  }\n\n  a {\n    color: black;\n  }\n\n  a:hover {\n    text-decoration: none;\n  }\n}\n\n.docs-screenshot {\n  width: 360px;\n  height: auto;\n  margin: 0 auto 2em auto;\n}\n"
  },
  {
    "path": "content/scss/_fonts.scss",
    "content": "/* @license\n * MyFonts Webfont Build ID 2656303, 2013-10-02T11:03:28-0400\n *\n * The fonts listed in this notice are subject to the End User License\n * Agreement(s) entered into by the website owner. All other parties are\n * explicitly restricted from using the Licensed Webfonts(s).\n *\n * You may obtain a valid license at the URLs below.\n *\n * Webfont: Avenir Next Pro Regular by Linotype\n * URL: http://www.myfonts.com/fonts/linotype/avenir-next-pro/pro-regular/\n *\n * Webfont: Avenir Next Pro Medium by Linotype\n * URL: http://www.myfonts.com/fonts/linotype/avenir-next-pro/pro-medium/\n *\n *\n * License: http://www.myfonts.com/viewlicense?type=web&buildid=2656303\n * Licensed pageviews: 250,000\n * Webfonts copyright: Copyright &#x00A9; 2004 - 2007 Linotype GmbH, www.linotype.com. All rights reserved. This font software may not be reproduced, modified, disclosed or transferred without the express written approval of Linotype GmbH. Avenir is a trademark of Linotype GmbH\n *\n * © 2013 MyFonts Inc\n*/\n\n\n/* @import must be at top of file, otherwise CSS will not work\n@import url(\"//hello.myfonts.net/count/28882f\");*/\n\n\n\n/* Avenir Next Pro */\n\n@font-face {font-family: 'AvenirNextLTPro-Regular';src: url('https://code.ionicframework.com/assets/fonts/28882F_0_0.eot');src: url('https://code.ionicframework.com/assets/fonts/28882F_0_0.eot?#iefix') format('embedded-opentype'),url('https://code.ionicframework.com/assets/fonts/28882F_0_0.woff') format('woff'),url('https://code.ionicframework.com/assets/fonts/28882F_0_0.ttf') format('truetype');}\n\n\n@font-face {font-family: 'AvenirNextLTPro-Medium';src: url('https://code.ionicframework.com/assets/fonts/28882F_1_0.eot');src: url('https://code.ionicframework.com/assets/fonts/28882F_1_0.eot?#iefix') format('embedded-opentype'),url('https://code.ionicframework.com/assets/fonts/28882F_1_0.woff') format('woff'),url('https://code.ionicframework.com/assets/fonts/28882F_1_0.ttf') format('truetype');}\n\n\n@font-face {font-family: 'AvenirNextLTPro-UltLt';src: url('https://code.ionicframework.com/assets/fonts/29CC36_0_0.eot');src: url('https://code.ionicframework.com/assets/fonts/29CC36_0_0.eot?#iefix') format('embedded-opentype'),url('https://code.ionicframework.com/assets/fonts/29CC36_0_0.woff') format('woff'),url('https://code.ionicframework.com/assets/fonts/29CC36_0_0.ttf') format('truetype');}\n\n/* Consolidated Avenir */\n@font-face {\n  font-family: 'Avenir Next';\n  src: url('/fonts/avenir-next/bold.eot');\n  src: url('/fonts/avenir-next/bold.eot?#iefix') format('embedded-opentype'),\n       url('/fonts/avenir-next/bold.woff2') format('woff2'),\n       url('/fonts/avenir-next/bold.woff') format('woff'),\n       url('/fonts/avenir-next/bold.ttf') format('truetype');\n  font-weight: 700;\n}\n@font-face {\n  font-family: 'Avenir Next';\n  src: url('/fonts/avenir-next/demi.eot');\n  src: url('/fonts/avenir-next/demi.eot?#iefix') format('embedded-opentype'),\n       url('/fonts/avenir-next/demi.woff2') format('woff2'),\n       url('/fonts/avenir-next/demi.woff') format('woff'),\n       url('/fonts/avenir-next/demi.ttf') format('truetype');\n  font-weight: 600;\n}\n@font-face {\n  font-family: 'Avenir Next';\n  src: url('/fonts/avenir-next/medium.eot');\n  src: url('/fonts/avenir-next/medium.eot?#iefix') format('embedded-opentype'),\n       url('/fonts/avenir-next/medium.woff') format('woff'),\n       url('/fonts/avenir-next/medium.ttf') format('truetype');\n  font-weight: 500;\n}\n@font-face {\n  font-family: 'Avenir Next';\n  src: url('/fonts/avenir-next/regular.eot');\n  src: url('/fonts/avenir-next/regular.eot?#iefix') format('embedded-opentype'),\n       url('/fonts/avenir-next/regular.woff') format('woff'),\n       url('/fonts/avenir-next/regular.ttf') format('truetype');\n  font-weight: 400;\n}\n@font-face {\n  font-family: 'Avenir Next';\n  src: url('/fonts/avenir-next/thin.eot');\n  src: url('/fonts/avenir-next/thin.eot?#iefix') format('embedded-opentype'),\n       url('/fonts/avenir-next/thin.woff2') format('woff2'),\n       url('/fonts/avenir-next/thin.woff') format('woff'),\n       url('/fonts/avenir-next/thin.ttf') format('truetype');\n  font-weight: 300;\n}\n@font-face {\n  font-family: 'Avenir Next';\n  src: url('/fonts/avenir-next/ultralight.eot');\n  src: url('/fonts/avenir-next/ultralight.eot?#iefix') format('embedded-opentype'),\n       url('/fonts/avenir-next/ultralight.woff') format('woff'),\n       url('/fonts/avenir-next/ultralight.ttf') format('truetype');\n  font-weight: 200;\n}\n\n@font-face {\n  font-family: \"Ionicons\";\n  src: url(\"../fonts/ionicons.eot?v=2.0.1\");\n  src: url(\"../fonts/ionicons.eot?v=2.0.1#iefix\") format(\"embedded-opentype\"), url(\"../fonts/ionicons.ttf?v=2.0.1\") format(\"truetype\"), url(\"../fonts/ionicons.woff?v=2.0.1\") format(\"woff\"), url(\"../fonts/ionicons.woff\") format(\"woff\"), url(\"../fonts/ionicons.svg?v=2.0.1#Ionicons\") format(\"svg\");\n  font-weight: normal;\n  font-style: normal; }\n"
  },
  {
    "path": "content/scss/_footer.scss",
    "content": "\n.footer {\n  position: relative;\n  z-index: 100;\n  padding: 20px 0 0 0;\n  background: #2b3442;\n  color: #a4b3cd;\n  text-align: center;\n  font-size: 14px;\n  font-family: \"AvenirNextLTPro-Regular\", \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n\n  a {\n    color: #e2eeff;\n    opacity: 1;\n    transition-property: color;\n\n    &:hover {\n      color: white;\n    }\n  }\n\n  .base-links dl {\n    float: left;\n    margin: 0;\n    padding: 15px 5px 20px 5px;\n    width: 33%;\n    text-align: left;\n    font-size: 0.9em;\n  }\n\n  .base-links dl:first-child {\n    padding-left: 0;\n  }\n\n  .small-break {\n    clear: both;\n  }\n\n  @media (min-width: 768px) {\n    .base-links dl {\n      padding-left: 0;\n      width: 20%;\n      font-size: 1em;\n    }\n    .small-break {\n      clear: none;\n    }\n  }\n\n  .base-links {\n    margin: 0 auto;\n    padding: 0 10px;\n    max-width: 1170px;\n  }\n\n  .base-links dt,\n  .newsletter-text  {\n    margin: 0;\n    padding-bottom: 10px;\n    color: #e2eeff;\n    text-transform: uppercase;\n    letter-spacing: 2px;\n    font-weight: bold;\n    font-size: 13px;\n    font-family: $font-family-medium;\n  }\n  .newsletter-text {\n    padding-bottom: 4px;\n  }\n\n  .base-links dd {\n    margin: 5px 0;\n    font-size: 13px;\n  }\n\n  .base-links a {\n    display: block;\n    padding: 5px 0;\n    color: #a4b3cd;\n\n    &:hover {\n      color: #dde9ff;\n      text-decoration: none;\n    }\n  }\n\n  .copy {\n    padding: 18px;\n    background: #202532;\n  }\n\n  .copy-container {\n    margin: 0 auto;\n    max-width: 1170px;\n  }\n\n  @media (min-width: 630px) {\n    .copy-container {\n      background-size: 128px 32px;\n    }\n  }\n\n  .authors {\n    margin: 0;\n    padding: 10px;\n    color: #858f9e;\n    text-align: right;\n    font-size: 13px;\n\n    a {\n      color: #a3aec0;\n    }\n    span {\n      padding: 0 15px;\n    }\n  }\n\n  .newsletter {\n    clear: both;\n    margin: 0 auto 30px;\n    max-width: 1170px;\n    border-top: 1px solid #555f6e;\n  }\n\n  .newsletter-container {\n    margin-top: 30px;\n    text-align: left;\n\n\n    .sign-up {\n      padding-bottom: 10px;\n      color: #a4b3cd;\n      font-size: 13px;\n    }\n\n    .col-sm-7 {\n      padding-left: 15px;\n    }\n\n    .col-sm-5 {\n      padding-right: 15px;\n    }\n\n    @media (min-width: 900px) {\n      .col-sm-7 {\n        padding-left: 0;\n      }\n\n      .col-sm-5 {\n        padding-right: 0;\n      }\n    }\n\n    input {\n      border: none;\n      background: #45546D;\n      color: white;\n\n      &:focus {\n        background: #51627E;\n        -webkit-box-shadow: none;\n        box-shadow: none;\n        box-shadow: inset 0px 0px 0px 1px #4E8EF7;\n      }\n\n      &::-webkit-input-placeholder {\n        color: #8e9fb8;\n      }\n      &::-moz-placeholder {\n        color: #8e9fb8;\n      }\n    }\n    button {\n      padding-right: 15px;\n      padding-left: 15px;\n      border: 1px solid #4e8ef7;\n      background: #4e8ef7;\n      box-shadow: 0px 1px 0px rgba(0, 0, 0, 0.3);\n      color: white;\n\n      &:hover {\n        background: #5998FF;\n        color: white;\n      }\n\n      &:active {\n        border: 1px solid #3E75CE;\n        background: #4683E7;\n        box-shadow: none;\n        color: #B1C4E4;\n      }\n    }\n\n  }\n\n}\n\n.pre-footer {\n  position: relative;\n  z-index: 100;\n  padding: 40px;\n  background: #EBF0F6;\n\n  h4 {\n    color: #363b43;\n    font-family: $font-family-medium;\n  }\n\n  .row {\n    margin: 0 auto;\n    max-width: 1170px;\n  }\n  p {\n    color: #999;\n    color: #737e90;\n    font-size: 14px;\n    font-family: $font-family-regular;\n    line-height: 28px;\n  }\n  a:hover {\n    color: #4E8EF7;\n    text-decoration: none;\n  }\n  span {\n    padding-left: 5px;\n  }\n  .col-a {\n    padding-bottom: 15px;\n  }\n  @media (min-width: 768px) {\n    .col-a {\n      padding-right: 60px;\n      padding-bottom: 0;\n      border-right: 1px solid #ddd;\n    }\n    .col-b {\n      padding-left: 70px;\n    }\n  }\n}\n"
  },
  {
    "path": "content/scss/_forms.scss",
    "content": "\n/*\n * Some CSS adapted from LayerVault, http://layervault.com\n */\n\n\n.fade-down.ng-enter {\n  -webkit-animation: fadeInDown 0.5s both;\n  animation: fadeInDown 0.5s both;\n}\n.fade-down.ng-leave {\n  -webkit-animation: fadeOutUp 0.5s both;\n  animation: fadeOutUp 0.5s both;\n  width: 100%;\n  position: absolute;\n}\n\n\n$form-text-color: #292c31;\n$form-inactive-color: #ddd;\n$form-placeholder-color: #bcbcbc;\n$form-active-color: #4e8ef7;\n$form-error-color: #f95c5c;\n\n$input-height: 60px;\n\n[step] {\n  margin-bottom: 30px;\n}\n.inset-step {\n  padding-left: 15px;\n  margin-top: 10px;\n}\n\n\n.input-container,\n.input-container * {\n  -webkit-box-sizing: border-box;\n  -moz-box-sizing: border-box;\n  box-sizing: border-box;\n  font-family: \"Helvetica Neue\", Helvetica, Arial, \"Lucida Grande\", sans-serif;\n}\n.input-container {\n  margin-bottom: 10px;\n  position: relative;\n  * {\n    margin-bottom: 5px;\n  }\n  .subtext {\n    color: #999;\n    font-size: 14px;\n    font-weight: 300;\n  }\n  input,\n  textarea {\n    font-size: 16px;\n    font-family: \"Helvetica Neue\", Helvetica, Arial, \"Lucida Grande\", sans-serif;\n    -webkit-font-smoothing: antialiased;\n    width: 100%;\n    height: $input-height;\n    -webkit-transition: border 300ms ease;\n    -moz-transition: border 300ms ease;\n    -ms-transition: border 300ms ease;\n    -o-transition: border 300ms ease;\n    transition: border 300ms ease;\n    outline: none;\n\n    padding: 18px 10px 0 8px;\n    -webkit-border-radius: 4px;\n    -moz-border-radius: 4px;\n    border-radius: 4px;\n\n    border: 2px solid $form-inactive-color;\n    &:focus {\n      border-color: $form-active-color;\n    }\n    &.error {\n      border-color: $form-error-color;\n    }\n  }\n  textarea {\n    height: 150px;\n    padding: 10px;\n  }\n  label {\n    font-size: 11px;\n    font-weight: 300;\n    -webkit-transition: color 300ms ease;\n    -moz-transition: color 300ms ease;\n    -ms-transition: color 300ms ease;\n    -o-transition: color 300ms ease;\n    transition: color 300ms ease;\n\n    float: left;\n    position: absolute;\n    display: block;\n    top: 5px;\n    left: 11px;\n    font-size: 12px;\n\n    color: $form-placeholder-color;\n  }\n  .description ~ label {\n    top: 31px;\n  }\n  label.error {\n    display: none;\n    color: $form-error-color;\n  }\n  input:focus ~ label:not(.error) {\n    color: $form-active-color;\n  }\n  input.error ~ label {\n    display: none;\n    &.error {\n      display: block;\n    }\n  }\n}\n"
  },
  {
    "path": "content/scss/_getting-started.scss",
    "content": "#ionitron-image {\n  background: url('/img/getting-started/ionitron-avatar.png') no-repeat transparent;\n  width: 156px;\n  height: 156px;\n\n  &.header-ionitron {\n    float: left;\n    margin-right: 10px;\n\n    @media screen and (max-width: 800px) {\n      background-size: 48px 48px;\n      width: 48px;\n      height: 48px;\n    }\n\n    @media screen and (max-width: 400px) {\n      background-size: 32px 32px;\n      width: 32px;\n      height: 32px;\n\n      ~ h3 {\n        font-size: 20px;\n        line-height: 34px;\n        margin: 0 0 4px;\n      }\n\n      ~ h4 {\n        font-size: 16px;\n        line-height: 18px;\n        color: #ECF3FF;\n      }\n    }\n  }\n}\n\n@media only screen and (-webkit-min-device-pixel-ratio: 1.3),\n       only screen and (   min--moz-device-pixel-ratio: 1.3),\n       only screen and (        min-device-pixel-ratio: 1.3),\n       only screen and (             min-resolution: 124dpi)\n{\n  #ionitron-image {\n    background: url('/img/getting-started/ionitron-avatar@2x.png') no-repeat transparent;\n    background-size: 156px 156px;\n  }\n}\n\n.alert,\n.docs-container main .alert {\n  background: #ffa82c;\n  border-radius: 3px;\n  display: inline-block;\n  color: rgba(255,255,255,.8);\n  padding: 20px 30px 20px 65px;\n  position: relative;\n  width: 100%;\n  font-weight: 500;\n  margin: 0 0 20px;\n\n  &::before {\n    content: '\\f137';\n    font-family: 'Ionicons';\n    position: absolute;\n    left: 25px;\n    top: 10px;\n    font-size: 30px;\n    font-weight: 300;\n    color: rgba(255,255,255,.9);\n  }\n\n  a,\n  a:not(.btn) {\n    color: rgba(255,255,255,1);\n    opacity: 1;\n\n    &:hover {\n      color: #fff;\n    }\n  }\n}\n\n#vs-start-box {\n  margin-top: 25px;\n  border-radius: 1px;\n  border: 1px solid #B390BD;\n  border-left: 4px solid #B390BD;\n  overflow: auto;\n  b { color: #46364a; }\n\n  img {\n    margin: 15px 15px 0;\n    display: block;\n    float: left;\n  }\n\n  .info {\n    padding: 15px;\n  }\n}\n\n#getting-started {\n  padding: 40px 0;\n\n  .italic {\n    font-family: \"Helvetica Neue\", Helvetica, Arial, \"Lucida Grande\", sans-serif;\n    font-weight: 300;\n    margin: 20px 0;\n    line-height: 26px;\n  }\n\n  i {\n    color: #999;\n  }\n\n  .row {\n    margin-bottom: 100px;\n  }\n\n  .num {\n    float: left;\n    width: 80px;\n  }\n\n  h2 {\n    color: #333333;\n    font-size: 28px;\n    padding-bottom: 4px;\n  }\n\n  h3 {\n    margin-bottom: 20px;\n  }\n\n  .sub-heading {\n    padding-bottom: 10px;\n    margin: auto;\n    max-width: 810px;\n    color: #444;\n    font-weight: 300;\n    font-size: 18px;\n    font-family: \"Helvetica Neue\", Helvetica, Arial, \"Lucida Grande\", sans-serif;\n  }\n\n  .desc {\n    font-family: \"Helvetica Neue\", Helvetica, Arial, \"Lucida Grande\", sans-serif;\n    color: #333;\n    font-weight: 300;\n    font-size: 14px;\n    margin-top: 16px;\n    margin-left: 80px;\n    margin-right: 20px;\n    line-height: 26px;\n  }\n\n  .code {\n    margin-top: 66px;\n  }\n\n  .highlight {\n    background: #eee;\n  }\n\n  input {\n    border: 2px solid #DDD;\n    color: #333;\n    box-shadow: none;\n    -webkit-box-shadow: none;\n    -moz-box-shadow: none;\n    border-radius: 2px;\n\n    &:focus {\n      border: 2px solid #4e8ef7;\n      box-shadow: none;\n      -webkit-box-shadow: none;\n      -moz-box-shadow: none;\n    }\n  }\n\n  .btn-primary {\n    color: #FFF;\n    background-color: #4F8EF7;\n    transition: background-color .1s ease-in-out;\n    border-radius: 2px;\n    padding: 6px 20px;\n  }\n\n  #first-step {\n    margin-top: 60px;\n  }\n\n  #template-images {\n    margin-top: -60px;\n    padding-left: 95px;\n\n    @media (max-width: 992px) {\n      padding-left: 15px;\n    }\n\n    .template {\n      text-align: center;\n      float: left;\n      width: 308px;\n      margin: 0 68px;\n\n      &:first-child {\n        margin-left: 0;\n        margin-right: 0;\n      }\n\n      &:last-child {\n        margin-left: 0;\n        margin-right: 0;\n      }\n\n      @media (max-width: 1200px) {\n        width: 272px;\n        margin: 0 20px;\n\n        .template-image {\n          width: 220px;\n          height: 180px;\n          background-size: 220px;\n        }\n      }\n\n      @media (max-width: 992px) {\n        width: 226px;\n        margin: 0 20px;\n      }\n\n      @media (max-width: 768px) {\n        width: 100%;\n        float: none;\n        margin: 20px 0;\n\n        .template-image {\n          display: block;\n          margin: 0 auto;\n          background-size: 330px;\n          height: 270px;\n          width: 330px;\n        }\n      }\n    }\n\n    code {\n      display: inline-block;\n      margin-top: 15px;\n    }\n\n    .template-image {\n      display: inline-block;\n      width: 330px;\n      height: 270px;\n    }\n  }\n\n  #start-template-blank-image,\n  #start-template-tabs-image,\n  #start-template-sidemenu-image {\n    background: transparent no-repeat bottom center url('/img/starter-app-thumbnails.png');\n    background-size: 330px;\n  }\n\n  #start-template-tabs-image { background-position: center center;}\n  #start-template-sidemenu-image { background-position: center top;}\n}\n#getting-started-cont {\n  border-top: 1px solid #e9ecf3;\n  padding-top: 74px;\n  .what-next {\n    hgroup {\n      text-align: center;\n      padding-top: 92px;\n      background: transparent no-repeat top center url('/img/getting-started/ionic-checkmark.png');\n      background-size: 53px;\n      max-width: 575px;\n      margin: 0 auto;\n    }\n\n    .items {\n      max-width: 950px;\n      margin: 82px auto;\n    }\n\n    .item {\n      padding-top: 107px;\n      display: inline-block;\n      width: 278px;\n      margin-right: 47px;\n      position: relative;\n\n      &:before {\n        background: transparent no-repeat url('/img/getting-started/whats-next-icons.png');\n        background-size: 80px;\n        height: 80px;\n        width: 80px;\n        position: absolute;\n        top: 0;\n        content: '';\n      }\n\n      &.platform:before { background-position: center -80px; }\n      &.enterprise:before { background-position: center -160px; }\n\n\n      &:last-child {\n        margin-right: 0;\n      }\n\n      h3 {\n        font-size: 18px;\n        font-family: \"Avenir Next\", \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n        font-weight: 500;\n      }\n\n      p {\n        color: #818893;\n        font-size: 13px;\n        line-height: 2em;\n      }\n\n      .more {\n        font-weight: bold;\n        position: relative;\n        transition-duration: .3s;\n        font-family: \"Avenir Next\", \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n        font-weight: 600;\n\n        &:after {\n          font-family: 'Ionicons';\n          content: '\\f3d6';\n          font-size: 20px;\n          font-weight: 700;\n          position: relative;\n          right: -10px;\n          top: 3px;\n        }\n\n        &:hover {\n          color: darken(#4F8EF7, 10);\n        }\n      }\n\n      @media (max-width: 992px) {\n        margin-right: 5px;\n        width: 240px;\n      }\n\n      @media (max-width: 768px) {\n        display: block;\n        width: 100%;\n        max-width: 400px;\n        margin: 0 auto 40px;\n\n        &:last-child {\n          margin-right: auto;\n        }\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "content/scss/_guide.scss",
    "content": ".guide-content {\n  h1,h2 {\n    margin-bottom: 20px;\n  }\n  color: #333;\n  font-size: 16px;\n\n  p {\n    line-height: 30px;\n    margin: 25px 0px;\n  }\n  .well p {\n    margin: 0px 0px 10px 0px;\n  }\n}\n"
  },
  {
    "path": "content/scss/_header.scss",
    "content": ".horizontal-gradient {\n  background: #296ad4;\n  background: -moz-linear-gradient(left,  #296ad4 0%, #4e8ef7 100%);\n  background: -webkit-gradient(linear, left top, right top, color-stop(0%,#296ad4), color-stop(100%,#4e8ef7));\n  background: -webkit-linear-gradient(left,  #296ad4 0%,#4e8ef7 100%);\n  background: -o-linear-gradient(left,  #296ad4 0%,#4e8ef7 100%);\n  background: -ms-linear-gradient(left,  #296ad4 0%,#4e8ef7 100%);\n  background: linear-gradient(to right,  #296ad4 0%,#4e8ef7 100%);\n}\n\n@-webkit-keyframes fadeIn {\n  from {\n    opacity: 0;\n  }\n  to {\n    opacity: 1;\n  }\n}\n\n@-moz-keyframes fadeIn {\n  from {\n    opacity: 0;\n  }\n  to {\n    opacity: 1;\n  }\n}\n\n@keyframes fadeIn {\n  from {\n    opacity: 0;\n  }\n  to {\n    opacity: 1;\n  }\n}\n\n.fadeIn {\n  opacity: 0;\n  -webkit-animation: fadeIn ease-in 750ms;\n  -moz-animation: fadeIn ease-in 750ms;\n  animation: fadeIn ease-in 750ms;\n  -webkit-animation-fill-mode: forwards;\n  -moz-animation-fill-mode: forwards;\n  animation-fill-mode: forwards;\n  -webkit-animation-delay: 500ms;\n  /* Chrome, Safari, Opera */\n  animation-delay: 500ms;\n}\n\n\n.white-nav-bar {\n  .navbar-default {\n    background: white;\n  }\n\n  &.products-page .products-nav {\n    color: $brand-primary !important;\n    border-top-color: $brand-primary !important;\n  }\n\n  .navbar-default .navbar-nav > li > a {\n    &:hover {\n      color: $brand-primary !important;\n      border-top-color: $brand-primary !important;\n    }\n  }\n\n}\n\n.navbar-default .navbar-nav > .dropdown > a .caret {\n  border-top-color: #abc0f5;\n  border-bottom-color: #abc0f5;\n}\n.navbar-default .navbar-nav > li.dropdown > a:hover .caret {\n  border-top-color: #fff;\n  border-bottom-color: #fff;\n}\n.navbar-nav > li > .dropdown-menu {\n  display: block !important;\n  pointer-events: none;\n\n  opacity: 0;\n  -webkit-transform: scale(.5);//translateX(-50%)translateY(-20px);\n  -ms-transform: scale(.5);//translateX(-50%)translateY(-20px);\n  transform: scale(.5);//translateX(-50%)translateY(-20px);\n  -webkit-transform-origin: 80px 0;\n  -ms-transform-origin: 80px 0;\n  transform-origin: 80px 0;\n  transition: all 200ms cubic-bezier(.24,.22,.015,1.56),opacity 100ms linear;\n\n}\n.navbar-nav > li.dropdown.open > .dropdown-menu {\n  -webkit-transform: scale(1);//translateX(-50%);\n  -ms-transform: scale(1);//translateX(-50%);\n  transform: scale(1); //translateX(-50%);\n  opacity: 1;\n  pointer-events: auto;\n}\n.navbar-nav > li > .dropdown-menu .arrow-up {\n  position: absolute;\n  top: -10px;\n  right: 20px;\n\twidth: 0;\n\theight: 0;\n\tborder-left: 10px solid transparent;\n\tborder-right: 10px solid transparent;\n\tborder-bottom: 10px solid white;\n}\n.navbar-default .navbar-nav > .open > a, .navbar-default .navbar-nav > .open > a:hover, .navbar-default .navbar-nav > .open > a:focus {\n  background: transparent;\n}\n\n.navbar-nav > li > .dropdown-menu {\n  border: none;\n  box-shadow: 1px 1px 7px rgba(0,0,0,0.3);\n  border-radius: 3px;\n}\n\n.navbar-default .navbar-nav > .open > a, .navbar-default .navbar-nav > .open > a:hover, .navbar-default .navbar-nav > .open > a:focus {\n  color: darken(white, 10%);\n}\n\n.navbar .dropdown-menu > li > a {\n  color: #677184;\n  font-size: 14px;\n\n  padding-top: 8px;\n  padding-bottom: 8px;\n\n  font-family: \"AvenirNextLTPro-Regular\", \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n\n  &:hover, &:active, &:focus {\n    background-color: #EFF1F5;\n    color: #677184 !important;\n    border: none !important;\n  }\n}\n\n.navbar-default .navbar-nav > li > a {\n  margin: 0;\n  padding-right: 22px !important;\n  padding-left: 22px !important;\n  border-top: 3px solid transparent;\n  color: #fff;\n  opacity: .6;\n  transition-duration: .25s;\n\n  @media (max-width: 991px) {\n    padding-right: 13px !important;\n    padding-left: 13px !important;\n  }\n\n  &:hover {\n    color: white;\n  }\n}\n\n.navbar-default .navbar-collapse .navbar-nav > li > a:hover {\n  border-top: 3px solid #B5CAFF;\n}\n\n.navbar-default .navbar-toggle {\n  margin-top: 17px;\n  padding: 0;\n  border: none;\n  color: white;\n  font-size: 32px;\n  opacity: .7;\n\n  &:hover, &:focus {\n    background: none;\n    opacity: 1;\n  }\n}\n\n@media (max-width: 767px) {\n  .navbar-default .navbar-collapse {\n    margin-bottom: 20px;\n    border: none;\n    background: #2155aa;\n    background: -moz-linear-gradient(left,  #2155aa 0%, #3e72c6 100%);\n    background: -webkit-gradient(linear, left top, right top, color-stop(0%,#2155aa), color-stop(100%,#3e72c6));\n    background: -webkit-linear-gradient(left,  #2155aa 0%,#3e72c6 100%);\n    background: -o-linear-gradient(left,  #2155aa 0%,#3e72c6 100%);\n    background: -ms-linear-gradient(left,  #2155aa 0%,#3e72c6 100%);\n    background: linear-gradient(to right,  #2155aa 0%,#3e72c6 100%);\n  }\n  .navbar-default .navbar-collapse .navbar-nav > li > a:hover {\n    border-color: transparent !important;\n  }\n}\n\n@media (min-width: 768px) {\n  .docs-page .docs-nav,\n  .examples-page .examples-nav,\n  .getting-started-page .getting-started-nav,\n  .nav-link:hover,\n  .nav-link:focus {\n    border-top: 3px solid #B5CAFF !important;\n    color: white !important;\n    opacity: 1 !important;\n  }\n  .docs-page.getting-started-page .docs-nav {\n    border-color: transparent !important;\n    color: #abc0f5 !important;\n  }\n}\n\n.navbar-header {\n\n  .version {\n    float: left;\n    list-style: none;\n    padding-left: 0;\n\n    > li > a {\n      padding: 26px 12px 0px;\n      font-size: 18px;\n      font-weight: 600;\n      color: rgba(255, 255, 255, .5);\n      display: block;\n      transition: .3s color;\n\n      @media (max-width: $screen-xs-max) {\n        padding: 13px 10px 0px;\n      }\n\n      .caret {\n        border-top-color: rgba(255, 255, 255, .5);\n      }\n\n      &:hover,\n      &:active,\n      &:focus {\n        color: rgba(white, .7);\n        text-decoration: none;\n\n        .caret {\n          border-top-color: rgba(white, .7);\n        }\n      }\n    }\n\n    .dropdown-menu {\n      display: block;\n      position: absolute;\n      border: 0;\n      border-radius: 3px;\n      padding: 12px 0 10px;\n      top: 56px;\n      left: -23px;\n      right: -100px;\n      min-width: 155px;\n      box-shadow: 0 2px 5px rgba(0, 0, 0, .15), 0 0 1px rgba(0, 0, 0, .2);\n      opacity: 0;\n      transform: scale(.01);\n      transform-origin: 20% 8px;\n      transition: all .3s cubic-bezier(.155, 1.105, .295, 1.12), opacity .1s linear;\n\n      a {\n        padding: 6px 23px;\n        line-height: 1.6;\n        font-size: 13px;\n        font-weight: 500;\n\n        i::before {\n          font-size: 30px;\n          line-height: 10px;\n          position:relative;\n          top: 7px;\n          margin-left:5px;\n        }\n\n        &.active,\n        &.active:hover {\n          color: $brand-primary !important;\n          text-decoration: none;\n          background: transparent;\n          cursor: default;\n        }\n      }\n\n      &::before {\n        background: url('/img/ico-nav-arrow.png') center center no-repeat;\n        background-size: 15px;\n        width: 15px;\n        height: 8px;\n        position: absolute;\n        top: -7px;\n        left: 35px;\n        content: '';\n        z-index: 5;\n      }\n    }\n\n    .open .dropdown-menu {\n      opacity: 1;\n      transform: scale(1);\n\n    }\n  }\n}\n\n.headline {\n  position: absolute;\n  padding: 10px;\n  width: 100%;\n  background-color: $brand-primary;\n  color: white;\n  text-align: center;\n  a {\n    color: inherit;\n    text-decoration: underline;\n    opacity: 1;\n    &:hover {\n      text-decoration: none;\n    }\n  }\n}\n\n.header {\n  position: relative;\n  padding: 24px 0 0 0;\n  height: 200px;\n  // z-index: 1000;\n\n  background-position: 0 -76px;\n\n  h3 {\n    color: #ebf3ff;\n    font-size: 28px;\n    font-family: \"AvenirNextLTPro-Regular\", \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n  }\n  h4 {\n    color: #c2d8ff;\n    font-family: \"AvenirNextLTPro-Regular\", \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n    opacity: .8;\n  }\n  ul {\n    position: absolute;\n    top: 133px;\n    margin: 0;\n    padding: 0;\n  }\n  li {\n    float: left;\n    margin: 0 5px;\n    list-style: none;\n    font-size: 14px;\n    font-family: $font-family-regular;\n    &:first-child {\n      a {\n        padding-left: 0;\n      }\n    }\n  }\n  a {\n    display: inline-block;\n    padding: 10px 20px;\n    color: #fff;\n    font-weight: bold;\n  }\n\n  .heading-tile {\n    background-position: 0 -80px;\n  }\n}\n\n.search-col {\n  display: none;\n}\n\n@media (min-width: 768px) {\n  .search-col {\n    display: block;\n  }\n}\n\n.search-bar {\n  visibility: hidden;\n  float: right;\n  padding: 0 2px 0 8px;\n  border: none;\n  border-radius: 40px;\n  background: rgba(255, 255, 255, 0.3);\n  transition: background ease-in-out 150ms;\n\n  &.active {\n    background: rgba(255, 255, 255, 0.7);\n\n    .search-icon,\n    input {\n      color: #296AD4;\n    }\n  }\n\n  .search-icon {\n    padding-top: 4px;\n    color: white;\n\n    i {\n      padding-top: 4px;\n    }\n  }\n\n  input {\n    padding-left: 4px;\n    width: 200px;\n    border: none;\n    background: transparent;\n    color: white;\n    font-size: 14px;\n    -webkit-appearance: none;\n\n    &:focus {\n      outline: none;\n    }\n  }\n}\n\n.search-results {\n  position: absolute;\n  right: 0;\n  left: 0;\n  z-index: 9999;\n  opacity: 0;\n  padding: 40px 0;\n  min-height: 360px;\n  background: rgba(255, 255, 255, 0.96);\n  box-shadow: 0px 2px 6px 0px rgba(0, 0, 0, 0.2);\n  font-size: 12px;\n  transition: opacity ease-in-out 100ms;\n  -webkit-transform: translate3d(0, 0, 0);\n  -moz-transform: translate3d(0, 0, 0);\n  transform: translate3d(0, 0, 0);\n\n  h4 {\n    margin-bottom: 8px;\n    padding-bottom: 4px;\n    border-bottom: 2px solid $brand-primary;\n    color: $brand-primary;\n    text-transform: uppercase;\n    letter-spacing: 3px;\n    font-size: 12px;\n    font-family: \"AvenirNextLTPro-Medium\", \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n  }\n\n  ul {\n    margin: 0 0 0 -10px;\n    padding: 0;\n  }\n\n  li {\n    display: inline-block;\n    overflow: hidden;\n    margin: 0;\n    padding: 1px 0 1px 10px;\n    width: 100%;\n    list-style-type: none;\n    text-overflow: ellipsis;\n    white-space: nowrap;\n    line-height: 22px;\n\n    a {\n      color: #666;\n      &:hover {\n        color: $brand-primary;\n      }\n    }\n  }\n\n}\n\n.search-section {\n  float: left;\n  padding-left: 40px;\n  width: 25%;\n}\n\n.search-api {\n  padding-left: 0;\n  width: 49%;\n\n  li {\n    width: 32%;\n  }\n}\n\n#search-overlay {\n  position: fixed;\n  top: 0;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  z-index: 999;\n  background: black;\n  opacity: 0;\n  transition: opacity ease-in-out 100ms;\n}\n\n.search-open {\n\n  .search-results {\n    opacity: 1;\n  }\n  #search-overlay {\n    opacity: .1;\n  }\n\n}\n\n.navbar-header {\n  .paper-tag,\n  .beta-tag {\n    padding-top: 22px;\n    margin-left: 15px;\n    display: inline-block;\n    float: left;\n  }\n\n  .beta-tag {\n    top: -2px;\n    margin-left: 25px;\n    position: relative;\n    &:before {\n      content: '';\n      background: rgba(white, .2);\n      position: absolute;\n      height: 30px;\n      width: 2px;\n      left: -15px;\n      transform: skewX(-15deg);\n    }\n  }\n}\n\n\n.snap-bar {\n  /*display: none;*/\n  position: relative;\n  top: 0;\n  left: 0;\n  width: 100%;\n  height: 50px;\n  line-height: 50px;\n  z-index: 1000;\n\n  /*\n  margin-top: -50px;\n\n  -webkit-transform: translate(0, -50px);\n  transform: translate(0, -50px);\n  */\n\n\n  /*\n  background-color: #EDF0F7;\n  */\n  background-color: #272E3A;\n  color: #B1BAC7;\n  font-weight: 300;\n\n  text-align: center;\n  font-size: 16px;\n\n  box-shadow: 0px 1px 2px rgba(0, 0, 0, 0.5);\n}\n.snap-bar a {\n\n}\n\n.snap-bar .small {\n  display: none;\n}\n\n.span-bar span {\n  display: inline-block;\n  vertical-align: middle;\n}\n\n.snap-bar.active {\n\n  -webkit-transform: translate(0, 0);\n  transform: translate(0, 0);\n\n  margin-top: 0;\n}\n\n@media (max-width: 767px) {\n  .snap-bar .small {\n    display: inline-block;\n  }\n  .snap-bar .large {\n    display: none;\n  }\n}\n\n@media (max-width: 991px) and (min-width: 768px) {\n  .hide-sm {\n    display: none !important;\n  }\n}\n"
  },
  {
    "path": "content/scss/_input-types.scss",
    "content": "\n.input-type {\n  position: absolute;\n  bottom: 0;\n  z-index: 1000;\n  width: 100%;\n  height: 300px;\n  background: no-repeat center bottom;\n}\n\n.ios7 .text-input,\n.ios7 .password-input,\n.ios7 .search-input {\n  background-image: url('/img/input-types/ios7/keyboard-text-pass-search.png');\n}\n.ios7 .email-input {\n  background-image: url('/img/input-types/ios7/keyboard-email.png');\n}\n.ios7 .tel-input {\n  background-image: url('/img/input-types/ios7/keyboard-tel.png');\n}\n.ios7 .number-input {\n  background-image: url('/img/input-types/ios7/keyboard-number.png');\n}\n.ios7 .date-input {\n  background-image: url('/img/input-types/ios7/keyboard-date.png');\n}\n.ios7 .month-input {\n  background-image: url('/img/input-types/ios7/keyboard-month.png');\n}\n\n@media only screen and (-webkit-min-device-pixel-ratio: 1.3),\n       only screen and (   min--moz-device-pixel-ratio: 1.3),\n       only screen and (        min-device-pixel-ratio: 1.3),\n       only screen and (             min-resolution: 124dpi)\n{ \n  .ios7 .input-type {\n    background-size: 320px 260px;\n  }\n\n  .ios7 .text-input,\n  .ios7 .password-input,\n  .ios7 .search-input {\n    background-image: url('/img/input-types/ios7/keyboard-text-pass-search@2x.png');\n  }\n  .ios7 .email-input {\n    background-image: url('/img/input-types/ios7/keyboard-email@2x.png');\n  }\n  .ios7 .tel-input {\n    background-image: url('/img/input-types/ios7/keyboard-tel@2x.png');\n  }\n  .ios7 .number-input {\n    background-image: url('/img/input-types/ios7/keyboard-number@2x.png');\n  }\n  .ios7 .date-input {\n    background-image: url('/img/input-types/ios7/keyboard-date@2x.png');\n  }\n  .ios7 .month-input {\n    background-image: url('/img/input-types/ios7/keyboard-month@2x.png');\n  }\n\n}"
  },
  {
    "path": "content/scss/_news.scss",
    "content": "\n.news {\n  position: absolute;\n  bottom: 0;\n  padding-top: 14px;\n  width: 100%;\n  height: 50px;\n  background: rgba(255, 255, 255, 0.2);\n  letter-spacing: -0.03em;\n  font-weight: bold;\n  font-family: \"AvenirNextLTPro-Ultlt\", \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n\n  .container {\n    overflow: hidden;\n    color: #B6D1FF;\n    text-overflow: ellipsis;\n    white-space: nowrap;\n  }\n\n  a {\n    padding: 0;\n    color: #fff;\n    text-decoration: none;\n    font-weight: bold;\n    opacity: .85;\n\n    &:hover {\n      text-decoration: underline;\n      opacity: 1;\n    }\n\n    a:visited {\n      color:#fff;\n    }\n  }\n\n  .news-col {\n    overflow: hidden;\n    height: 26px;\n    text-overflow: ellipsis;\n    white-space: nowrap;\n  }\n}\n\n// safari only\n@supports (overflow:-webkit-marquee) and (justify-content:inherit) {\n  .news a {\n    font-family: \"Avenir Next\", \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n  }\n}\n"
  },
  {
    "path": "content/scss/_products.scss",
    "content": "\n.products {\n\n  .content-container {\n    background: white;\n    min-height: 800px;\n    margin-top: 80px;\n  }\n\n  h1, h2, p {\n    text-align: center;\n  }\n\n  h1 {\n\n  }\n\n  .input-container {\n    max-width: 500px;\n    margin: 20px auto;\n  }\n\n}\n"
  },
  {
    "path": "content/scss/_showcase.scss",
    "content": "#showcase {\n\n  #apps {\n    margin-top: 40px;\n    > .row {\n      margin-top: 50px;\n    }\n  }\n\n  #contact {\n    margin-top: 15px;\n  }\n\n  .app {\n    .row {\n      margin-bottom: 15px;\n      img {\n        width: 100%;\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "content/scss/_syntax.scss",
    "content": ".highlight  { background: #ffffff; }\n.highlight .c { color: #999988; font-style: italic } /* Comment */\n/* COMMENTED OUT CUZ IT THINKS DIRECTIVES ARE INVALID .highlight .err { color: #a61717; background-color: #e3d2d2 } Error */\n.highlight .k { font-weight: bold } /* Keyword */\n.highlight .o { font-weight: bold } /* Operator */\n.highlight .cm { color: #999988; font-style: italic } /* Comment.Multiline */\n.highlight .cp { color: #999999; font-weight: bold } /* Comment.Preproc */\n.highlight .c1 { color: #999988; font-style: italic } /* Comment.Single */\n.highlight .cs { color: #999999; font-weight: bold; font-style: italic } /* Comment.Special */\n.highlight .gd { color: #000000; background-color: #ffdddd } /* Generic.Deleted */\n.highlight .gd .x { color: #000000; background-color: #ffaaaa } /* Generic.Deleted.Specific */\n.highlight .ge { font-style: italic } /* Generic.Emph */\n.highlight .gr { color: #aa0000 } /* Generic.Error */\n.highlight .gh { color: #999999 } /* Generic.Heading */\n.highlight .gi { color: #000000; background-color: #ddffdd } /* Generic.Inserted */\n.highlight .gi .x { color: #000000; background-color: #aaffaa } /* Generic.Inserted.Specific */\n.highlight .go { color: #888888 } /* Generic.Output */\n.highlight .gp { color: #555555 } /* Generic.Prompt */\n.highlight .gs { font-weight: bold } /* Generic.Strong */\n.highlight .gu { color: #aaaaaa } /* Generic.Subheading */\n.highlight .gt { color: #aa0000 } /* Generic.Traceback */\n.highlight .kc { font-weight: bold } /* Keyword.Constant */\n.highlight .kd { font-weight: bold } /* Keyword.Declaration */\n.highlight .kp { font-weight: bold } /* Keyword.Pseudo */\n.highlight .kr { font-weight: bold } /* Keyword.Reserved */\n.highlight .kt { color: #445588; font-weight: bold } /* Keyword.Type */\n.highlight .m { color: #009999 } /* Literal.Number */\n.highlight .s { color: #d14 } /* Literal.String */\n.highlight .na { color: #008080 } /* Name.Attribute */\n.highlight .nb { color: #0086B3 } /* Name.Builtin */\n.highlight .nc { color: #445588; font-weight: bold } /* Name.Class */\n.highlight .no { color: #008080 } /* Name.Constant */\n.highlight .ni { color: #800080 } /* Name.Entity */\n.highlight .ne { color: #990000; font-weight: bold } /* Name.Exception */\n.highlight .nf { color: #990000; font-weight: bold } /* Name.Function */\n.highlight .nn { color: #555555 } /* Name.Namespace */\n.highlight .nt { color: #000080 } /* Name.Tag */\n.highlight .nv { color: #008080 } /* Name.Variable */\n.highlight .ow { font-weight: bold } /* Operator.Word */\n.highlight .w { color: #bbbbbb } /* Text.Whitespace */\n.highlight .mf { color: #009999 } /* Literal.Number.Float */\n.highlight .mh { color: #009999 } /* Literal.Number.Hex */\n.highlight .mi { color: #009999 } /* Literal.Number.Integer */\n.highlight .mo { color: #009999 } /* Literal.Number.Oct */\n.highlight .sb { color: #d14 } /* Literal.String.Backtick */\n.highlight .sc { color: #d14 } /* Literal.String.Char */\n.highlight .sd { color: #d14 } /* Literal.String.Doc */\n.highlight .s2 { color: #d14 } /* Literal.String.Double */\n.highlight .se { color: #d14 } /* Literal.String.Escape */\n.highlight .sh { color: #d14 } /* Literal.String.Heredoc */\n.highlight .si { color: #d14 } /* Literal.String.Interpol */\n.highlight .sx { color: #d14 } /* Literal.String.Other */\n.highlight .sr { color: #009926 } /* Literal.String.Regex */\n.highlight .s1 { color: #d14 } /* Literal.String.Single */\n.highlight .ss { color: #990073 } /* Literal.String.Symbol */\n.highlight .bp { color: #999999 } /* Name.Builtin.Pseudo */\n.highlight .vc { color: #008080 } /* Name.Variable.Class */\n.highlight .vg { color: #008080 } /* Name.Variable.Global */\n.highlight .vi { color: #008080 } /* Name.Variable.Instance */\n.highlight .il { color: #009999 } /* Literal.Number.Integer.Long */\n\ncode.language-ts {\n  .kr {color: #000080; }\n  .nx {color: #008080; }\n  .k {color: #0086B3; }\n}"
  },
  {
    "path": "content/scss/_testimonials.scss",
    "content": "\n.testimonials {\n\n  blockquote {\n    margin: 0;\n    padding: 0;\n    border: none;\n\n    p {\n      margin: 30px 0 0 0;\n      padding: 5px 10px 15px 30px;\n      background: url('/img/quote.png') no-repeat;\n      background-size: 25px 25px;\n      font-size: 16px;\n    }\n  }\n\n  footer {\n    margin-left: 30px;\n    padding-left: 50px;\n    background-color: white;\n    background-size: 44px 40px;\n    background-repeat: no-repeat;\n    -webkit-transition: opacity 0.3s;\n    transition: opacity 0.3s;\n  }\n\n}\n\n.testimonial-content {\n  position: relative;\n  margin: 0 auto;\n  padding: 0 5px 30px 5px;\n  max-width: 1050px;\n  //border-top: 1px solid #f1f1f1;\n}\n\n@media (min-width: 768px) {\n\n  .testimonials {\n    position: relative;\n    height: 365px;\n\n    blockquote {\n\n      p {\n        position: absolute;\n        top: 70px;\n        margin: 0;\n        padding: 10px 80px 0 80px;\n        min-height: 150px;\n        background-size: 50px 50px;\n        color: #888;\n        text-align: center;\n        font-weight: normal;\n        font-size: 22px;\n        font-family: Georgia, serif;\n        line-height: 34px;\n        opacity: 0;\n        -webkit-transition: opacity 0.3s;\n        transition: opacity 0.3s;\n        -webkit-font-smoothing: antialiased;\n      }\n\n      &.active {\n        p {\n          opacity: 1;\n        }\n      }\n    }\n\n    footer {\n      position: absolute;\n      top: 220px;\n      margin-left: 0;\n      padding-top: 5px;\n      max-width: 230px;\n      width: 230px;\n      height: 65px;\n      background-size: 44px 40px;\n      font-size: 13px;\n      opacity: .4;\n      cursor: pointer;\n    }\n\n    .active footer,\n    footer:hover {\n      opacity: 1;\n    }\n\n    .active footer {\n      border-bottom: 2px solid $brand-primary;\n    }\n\n    cite {\n      color: $brand-primary;\n      font-weight: 400;\n      font-size: 15px;\n    }\n\n    .testimonial-1 footer {\n      left: 37%;\n    }\n\n    .testimonial-2 footer {\n      right: 10px;\n    }\n\n  }\n\n  .testimonial-content {\n    padding: 60px 10px 0 10px;\n  }\n\n}\n\n\n@media (min-width: 960px) {\n\n  .testimonials {\n    height: 380px;\n\n    blockquote {\n      p {\n        font-size: 22px;\n      }\n    }\n\n    footer {\n      padding-top: 25px;\n      padding-left: 92px;\n      max-width: 265px;\n      width: 265px;\n      height: 94px;\n      background-size: 88px 80px;\n    }\n\n  }\n\n}\n"
  },
  {
    "path": "content/scss/_tutorials.scss",
    "content": "h2.underline {\n  padding-bottom: 10px;\n  border-bottom: 1px solid #eee;\n  margin: 40px 0px 20px 0px;\n}\n.phone-col {\n  padding: 0;\n\n  &.no-case {\n    .phone-case {\n      background: none;\n      margin: 0;\n      float: none;\n      width: 100%;\n      > div {\n        width: 100%;\n        height: 100%;\n        .cp_embed_iframe {\n          position: static;\n          width: 100% !important;\n          height: 100%;\n        }\n      }\n    }\n  }\n\n}\n.phone-case {\n  float: right;\n  position: relative;\n  z-index: 1;\n  width: 380px;\n  height: 810px;\n  background: url(\"/img/phone-case.png\") no-repeat right top;\n\n  margin-left: 20px;\n\n  a {\n    opacity: 1;\n  }\n\n  .cp_embed_iframe {\n    position: absolute;\n    width: 320px !important;\n    height: 568px;\n    top: 104px;\n    left: 37px;\n  }\n}\n@media only screen and (-webkit-min-device-pixel-ratio: 1.3),\n       only screen and (   min--moz-device-pixel-ratio: 1.3),\n       only screen and (        min-device-pixel-ratio: 1.3),\n       only screen and (             min-resolution: 124dpi)\n{ \n  .phone-case {\n    background-image: url(\"/img/phone-case@2x.png\");\n    background-size: 365px 792px;\n  }\n}\n\n"
  },
  {
    "path": "content/scss/_type.scss",
    "content": "\nh1 {\n  padding-bottom: 10px;\n  margin: 40px 0px 15px 0px;\n}\n\nh2 {\n  margin: 35px 0px 10px 0px;\n}\n\nh3 {\n  margin-top: 15px;\n}\n\nh1, h2, h3, h4, h5, h6, .btn {\n  font-weight: normal;\n  font-family: $font-family-regular;\n}\n\nh1, h2, h3, h4, h5, h6 {\n  color: $headings-color;\n  &:first-child {\n    margin-top: 0;\n  }\n}\nh1, h2, h3, h4, h5, h6 {\n  a {\n    color: $headings-color;\n  }\n}\n\nh1 + h2 {\n  margin-top: 0;\n  color: #666;\n  font-size: 18px;\n}\nh1 + h2 + p {\n  margin-top: 20px;\n}\n\n.subheading {\n  color: #888;\n  font-size: 15px;\n}\n"
  },
  {
    "path": "content/scss/_v2.scss",
    "content": ".v2 {\n  .demo {\n    float: right;\n\n    margin-left: 15px;\n\n  }\n\n  .demo.inline {\n    float: none;\n    margin-left: 0;\n  }\n\n  .demo a {\n    display: block;\n    text-align: right;\n    margin-top: 15px;\n  }\n\n  .demo iframe {\n    width: 328px;\n    height: 568px;\n    border: none;\n    border-radius: 10px;\n    border: 4px solid #555;\n  }\n\n  .file-title {\n    margin-top: 35px;\n  }\n\n  &.docs-ui .main-content {\n\n    h3 {\n      margin-top: 2em;\n    }\n\n    .highlight, p {\n      margin-right: 390px;\n      &.less-margin {\n        margin-right: 120px;\n      }\n    }\n\n    ul.demo-toggle {\n      list-style: none;\n      display: block;\n      position: absolute;\n      top: 32px;\n      right: 285px;\n\n      li {\n        margin-left: 1px;\n        display: inline;\n        float: left;\n\n        button {\n          background-color: #EFEFF4;\n          color: #000;\n          border: 1px solid #C8C7CC;\n        }\n\n      }\n\n    }\n  }\n\n\n}\n"
  },
  {
    "path": "content/scss/_what-is.scss",
    "content": "#what-is {\n\n  h3 a {\n    font-size: 24px;\n    font-weight: normal;\n    color: lighten(#4F8EF7, 5%);\n    &:hover {\n      color: darken(#4F8EF7, 5%);\n    }\n  }\n\n  p {\n    margin-bottom: 2.0em;\n  }\n  \n}\n\n"
  },
  {
    "path": "content/scss/bootstrap/_alerts.scss",
    "content": "//\n// Alerts\n// --------------------------------------------------\n\n\n// Base styles\n// -------------------------\n\n.alert {\n  padding: $alert-padding;\n  margin-bottom: $line-height-computed;\n  border: 1px solid transparent;\n  border-radius: $alert-border-radius;\n\n  // Headings for larger alerts\n  h4 {\n    margin-top: 0;\n    // Specified for the h4 to prevent conflicts of changing $headingsColor\n    color: inherit;\n  }\n  // Provide class for links that match alerts\n  .alert-link {\n    font-weight: $alert-link-font-weight;\n  }\n\n  // Improve alignment and spacing of inner content\n  > p,\n  > ul {\n    margin-bottom: 0;\n  }\n  > p + p {\n    margin-top: 5px;\n  }\n}\n\n// Dismissable alerts\n//\n// Expand the right padding and account for the close button's positioning.\n\n.alert-dismissable {\n padding-right: ($alert-padding + 20);\n\n  // Adjust close link position\n  .close {\n    position: relative;\n    top: -2px;\n    right: -21px;\n    color: inherit;\n  }\n}\n\n// Alternate styles\n//\n// Generate contextual modifier classes for colorizing the alert.\n\n.alert-success {\n  @include alert-variant($alert-success-bg, $alert-success-border, $alert-success-text);\n}\n.alert-info {\n  @include alert-variant($alert-info-bg, $alert-info-border, $alert-info-text);\n}\n.alert-warning {\n  @include alert-variant($alert-warning-bg, $alert-warning-border, $alert-warning-text);\n}\n.alert-danger {\n  @include alert-variant($alert-danger-bg, $alert-danger-border, $alert-danger-text);\n}\n"
  },
  {
    "path": "content/scss/bootstrap/_badges.scss",
    "content": "//\n// Badges\n// --------------------------------------------------\n\n\n// Base classes\n.badge {\n  display: inline-block;\n  min-width: 10px;\n  padding: 3px 7px;\n  font-size: $font-size-small;\n  font-weight: $badge-font-weight;\n  color: $badge-color;\n  line-height: $badge-line-height;\n  vertical-align: baseline;\n  white-space: nowrap;\n  text-align: center;\n  background-color: $badge-bg;\n  border-radius: $badge-border-radius;\n\n  // Empty badges collapse automatically (not available in IE8)\n  &:empty {\n    display: none;\n  }\n}\n\n// Hover state, but only for links\na.badge {\n  &:hover,\n  &:focus {\n    color: $badge-link-hover-color;\n    text-decoration: none;\n    cursor: pointer;\n  }\n}\n\n// Quick fix for labels/badges in buttons\n.btn .badge {\n  position: relative;\n  top: -1px;\n}\n\n// Account for counters in navs\na.list-group-item.active > .badge,\n.nav-pills > .active > a > .badge {\n  color: $badge-active-color;\n  background-color: $badge-active-bg;\n}\n.nav-pills > li > a > .badge {\n  margin-left: 3px;\n}\n"
  },
  {
    "path": "content/scss/bootstrap/_breadcrumbs.scss",
    "content": "//\n// Breadcrumbs\n// --------------------------------------------------\n\n\n.breadcrumb {\n  padding: 8px 15px;\n  margin-bottom: $line-height-computed;\n  list-style: none;\n  background-color: $breadcrumb-bg;\n  border-radius: $border-radius-base;\n  > li {\n    display: inline-block;\n    &+li:before {\n      content: \"/\\00a0\"; // Unicode space added since inline-block means non-collapsing white-space\n      padding: 0 5px;\n      color: $breadcrumb-color;\n    }\n  }\n  > .active {\n    color: $breadcrumb-active-color;\n  }\n}\n"
  },
  {
    "path": "content/scss/bootstrap/_button-groups.scss",
    "content": "//\n// Button groups\n// --------------------------------------------------\n\n// Button carets\n//\n// Match the button text color to the arrow/caret for indicating dropdown-ness.\n\n.caret {\n  .btn-default & {\n    border-top-color: $btn-default-color;\n  }\n  .btn-primary &,\n  .btn-success &,\n  .btn-warning &,\n  .btn-danger &,\n  .btn-info & {\n    border-top-color: #fff;\n  }\n}\n.dropup {\n  & .btn-default .caret {\n    border-bottom-color: $btn-default-color;\n  }\n  .btn-primary,\n  .btn-success,\n  .btn-warning,\n  .btn-danger,\n  .btn-info {\n   .caret {\n      border-bottom-color: #fff;\n    }\n  }\n}\n\n// Make the div behave like a button\n.btn-group,\n.btn-group-vertical {\n  position: relative;\n  display: inline-block;\n  vertical-align: middle; // match .btn alignment given font-size hack above\n  > .btn {\n    position: relative;\n    float: left;\n    // Bring the \"active\" button to the front\n    &:hover,\n    &:focus,\n    &:active,\n    &.active {\n      z-index: 2;\n    }\n    &:focus {\n      // Remove focus outline when dropdown JS adds it after closing the menu\n      outline: none;\n    }\n  }\n}\n\n// Prevent double borders when buttons are next to each other\n.btn-group {\n  .btn + .btn,\n  .btn + .btn-group,\n  .btn-group + .btn,\n  .btn-group + .btn-group {\n    margin-left: -1px;\n  }\n}\n\n// Optional: Group multiple button groups together for a toolbar\n.btn-toolbar {\n  @include clearfix();\n\n  .btn-group {\n    float: left;\n  }\n  // Space out series of button groups\n  > .btn,\n  > .btn-group {\n    + .btn,\n    + .btn-group {\n      margin-left: 5px;\n    }\n  }\n}\n\n.btn-group > .btn:not(:first-child):not(:last-child):not(.dropdown-toggle) {\n  border-radius: 0;\n}\n\n// Set corners individual because sometimes a single button can be in a .btn-group and we need :first-child and :last-child to both match\n.btn-group > .btn:first-child {\n  margin-left: 0;\n  &:not(:last-child):not(.dropdown-toggle) {\n    @include border-right-radius(0);\n  }\n}\n// Need .dropdown-toggle since :last-child doesn't apply given a .dropdown-menu immediately after it\n.btn-group > .btn:last-child:not(:first-child),\n.btn-group > .dropdown-toggle:not(:first-child) {\n  @include border-left-radius(0);\n}\n\n// Custom edits for including btn-groups within btn-groups (useful for including dropdown buttons within a btn-group)\n.btn-group > .btn-group {\n  float: left;\n}\n.btn-group > .btn-group:not(:first-child):not(:last-child) > .btn {\n  border-radius: 0;\n}\n.btn-group > .btn-group:first-child {\n  > .btn:last-child,\n  > .dropdown-toggle {\n    @include border-right-radius(0);\n  }\n}\n.btn-group > .btn-group:last-child > .btn:first-child {\n  @include border-left-radius(0);\n}\n\n// On active and open, don't show outline\n.btn-group .dropdown-toggle:active,\n.btn-group.open .dropdown-toggle {\n  outline: 0;\n}\n\n\n// Sizing\n//\n// Remix the default button sizing classes into new ones for easier manipulation.\n\n.btn-group-xs > .btn { @extend .btn-xs; }\n.btn-group-sm > .btn { @extend .btn-sm; }\n.btn-group-lg > .btn { @extend .btn-lg; }\n\n\n// Split button dropdowns\n// ----------------------\n\n// Give the line between buttons some depth\n.btn-group > .btn + .dropdown-toggle {\n  padding-left: 8px;\n  padding-right: 8px;\n}\n.btn-group > .btn-lg + .dropdown-toggle {\n  padding-left: 12px;\n  padding-right: 12px;\n}\n\n// The clickable button for toggling the menu\n// Remove the gradient and set the same inset shadow as the :active state\n.btn-group.open .dropdown-toggle {\n  @include box-shadow(inset 0 3px 5px rgba(0,0,0,.125));\n}\n\n\n// Reposition the caret\n.btn .caret {\n  margin-left: 0;\n}\n// Carets in other button sizes\n.btn-lg .caret {\n  border-width: $caret-width-large $caret-width-large 0;\n  border-bottom-width: 0;\n}\n// Upside down carets for .dropup\n.dropup .btn-lg .caret {\n  border-width: 0 $caret-width-large $caret-width-large;\n}\n\n\n// Vertical button groups\n// ----------------------\n\n.btn-group-vertical {\n  > .btn,\n  > .btn-group {\n    display: block;\n    float: none;\n    width: 100%;\n    max-width: 100%;\n  }\n\n  // Clear floats so dropdown menus can be properly placed\n  > .btn-group {\n    @include clearfix();\n    > .btn {\n      float: none;\n    }\n  }\n\n  > .btn + .btn,\n  > .btn + .btn-group,\n  > .btn-group + .btn,\n  > .btn-group + .btn-group {\n    margin-top: -1px;\n    margin-left: 0;\n  }\n}\n\n.btn-group-vertical > .btn {\n  &:not(:first-child):not(:last-child) {\n    border-radius: 0;\n  }\n  &:first-child:not(:last-child) {\n    border-top-right-radius: $border-radius-base;\n    @include border-bottom-radius(0);\n  }\n  &:last-child:not(:first-child) {\n    border-bottom-left-radius: $border-radius-base;\n    @include border-top-radius(0);\n  }\n}\n.btn-group-vertical > .btn-group:not(:first-child):not(:last-child) > .btn {\n  border-radius: 0;\n}\n.btn-group-vertical > .btn-group:first-child {\n  > .btn:last-child,\n  > .dropdown-toggle {\n    @include border-bottom-radius(0);\n  }\n}\n.btn-group-vertical > .btn-group:last-child > .btn:first-child {\n  @include border-top-radius(0);\n}\n\n\n\n// Justified button groups\n// ----------------------\n\n.btn-group-justified {\n  display: table;\n  width: 100%;\n  table-layout: fixed;\n  border-collapse: separate;\n  .btn {\n    float: none;\n    display: table-cell;\n    width: 1%;\n  }\n}\n\n\n// Checkbox and radio options\n[data-toggle=\"buttons\"] > .btn > input[type=\"radio\"],\n[data-toggle=\"buttons\"] > .btn > input[type=\"checkbox\"] {\n  display: none;\n}\n"
  },
  {
    "path": "content/scss/bootstrap/_buttons.scss",
    "content": "//\n// Buttons\n// --------------------------------------------------\n\n\n// Base styles\n// --------------------------------------------------\n\n// Core styles\n.btn {\n  display: inline-block;\n  padding: $padding-base-vertical $padding-base-horizontal;\n  margin-bottom: 0; // For input.btn\n  font-family: $font-family-regular;\n  font-weight: normal;\n  font-size: $font-size-base;\n  line-height: $line-height-base;\n  text-align: center;\n  vertical-align: middle;\n  cursor: pointer;\n  border: 1px solid transparent;\n  border-radius: $border-radius-base;\n  white-space: nowrap;\n  @include user-select(none);\n\n  &:focus {\n    @include tab-focus();\n  }\n\n  &:hover,\n  &:focus {\n    color: $btn-default-color;\n    text-decoration: none;\n  }\n\n  &:active,\n  &.active {\n    outline: 0;\n    background-image: none;\n    @include box-shadow(inset 0 3px 5px rgba(0,0,0,.125));\n  }\n\n  &.disabled,\n  &[disabled],\n  fieldset[disabled] & {\n    cursor: not-allowed;\n    pointer-events: none; // Future-proof disabling of clicks\n    @include opacity(.65);\n    @include box-shadow(none);\n  }\n\n}\n\n\n// Alternate buttons\n// --------------------------------------------------\n\n.btn-default {\n  @include button-variant($btn-default-color, $btn-default-bg, $btn-default-border);\n}\n.btn-primary {\n  @include button-variant($btn-primary-color, $btn-primary-bg, $btn-primary-border);\n}\n// Warning appears as orange\n.btn-warning {\n  @include button-variant($btn-warning-color, $btn-warning-bg, $btn-warning-border);\n}\n// Danger and error appear as red\n.btn-danger {\n  @include button-variant($btn-danger-color, $btn-danger-bg, $btn-danger-border);\n}\n// Success appears as green\n.btn-success {\n  @include button-variant($btn-success-color, $btn-success-bg, $btn-success-border);\n}\n// Info appears as blue-green\n.btn-info {\n  @include button-variant($btn-info-color, $btn-info-bg, $btn-info-border);\n}\n\n\n// Link buttons\n// -------------------------\n\n// Make a button look and behave like a link\n.btn-link {\n  color: $link-color;\n  font-weight: normal;\n  cursor: pointer;\n  border-radius: 0;\n\n  &,\n  &:active,\n  &[disabled],\n  fieldset[disabled] & {\n    background-color: transparent;\n    @include box-shadow(none);\n  }\n  &,\n  &:hover,\n  &:focus,\n  &:active {\n    border-color: transparent;\n  }\n  &:hover,\n  &:focus {\n    color: $link-hover-color;\n    text-decoration: underline;\n    background-color: transparent;\n  }\n  &[disabled],\n  fieldset[disabled] & {\n    &:hover,\n    &:focus {\n      color: $btn-link-disabled-color;\n      text-decoration: none;\n    }\n  }\n}\n\n\n// Button Sizes\n// --------------------------------------------------\n\n.btn-lg {\n  // line-height: ensure even-numbered height of button next to large input\n  @include button-size($padding-large-vertical, $padding-large-horizontal, $font-size-large, $line-height-large, $border-radius-large);\n}\n.btn-sm,\n.btn-xs {\n  // line-height: ensure proper height of button next to small input\n  @include button-size($padding-small-vertical, $padding-small-horizontal, $font-size-small, $line-height-small, $border-radius-small);\n}\n.btn-xs {\n  padding: 1px 5px;\n}\n\n\n// Block button\n// --------------------------------------------------\n\n.btn-block {\n  display: block;\n  width: 100%;\n  padding-left: 0;\n  padding-right: 0;\n}\n\n// Vertically space out multiple block buttons\n.btn-block + .btn-block {\n  margin-top: 5px;\n}\n\n// Specificity overrides\ninput[type=\"submit\"],\ninput[type=\"reset\"],\ninput[type=\"button\"] {\n  &.btn-block {\n    width: 100%;\n  }\n}\n"
  },
  {
    "path": "content/scss/bootstrap/_carousel.scss",
    "content": "//\n// Carousel\n// --------------------------------------------------\n\n\n// Wrapper for the slide container and indicators\n.carousel {\n  position: relative;\n}\n\n.carousel-inner {\n  position: relative;\n  overflow: hidden;\n  width: 100%;\n\n  > .item {\n    display: none;\n    position: relative;\n    @include transition(.6s ease-in-out left);\n\n    // Account for jankitude on images\n    > img,\n    > a > img {\n      @include img-responsive();\n      line-height: 1;\n    }\n  }\n\n  > .active,\n  > .next,\n  > .prev { display: block; }\n\n  > .active {\n    left: 0;\n  }\n\n  > .next,\n  > .prev {\n    position: absolute;\n    top: 0;\n    width: 100%;\n  }\n\n  > .next {\n    left: 100%;\n  }\n  > .prev {\n    left: -100%;\n  }\n  > .next.left,\n  > .prev.right {\n    left: 0;\n  }\n\n  > .active.left {\n    left: -100%;\n  }\n  > .active.right {\n    left: 100%;\n  }\n\n}\n\n// Left/right controls for nav\n// ---------------------------\n\n.carousel-control {\n  position: absolute;\n  top: 0;\n  left: 0;\n  bottom: 0;\n  width: $carousel-control-width;\n  @include opacity($carousel-control-opacity);\n  font-size: $carousel-control-font-size;\n  color: $carousel-control-color;\n  text-align: center;\n  text-shadow: $carousel-text-shadow;\n  // We can't have this transition here because webkit cancels the carousel\n  // animation if you trip this while in the middle of another animation.\n\n  // Set gradients for backgrounds\n  &.left {\n    @include gradient-horizontal($start-color: rgba(0,0,0,.5), $end-color: rgba(0,0,0,.0001));\n  }\n  &.right {\n    left: auto;\n    right: 0;\n    @include gradient-horizontal($start-color: rgba(0,0,0,.0001), $end-color: rgba(0,0,0,.5));\n  }\n\n  // Hover/focus state\n  &:hover,\n  &:focus {\n    color: $carousel-control-color;\n    text-decoration: none;\n    @include opacity(.9);\n  }\n\n  // Toggles\n  .icon-prev,\n  .icon-next,\n  .glyphicon-chevron-left,\n  .glyphicon-chevron-right {\n    position: absolute;\n    top: 50%;\n    left: 50%;\n    z-index: 5;\n    display: inline-block;\n  }\n  .icon-prev,\n  .icon-next {\n    width:  20px;\n    height: 20px;\n    margin-top: -10px;\n    margin-left: -10px;\n    font-family: serif;\n  }\n\n  .icon-prev {\n    &:before {\n      content: '\\2039';// SINGLE LEFT-POINTING ANGLE QUOTATION MARK (U+2039)\n    }\n  }\n  .icon-next {\n    &:before {\n      content: '\\203a';// SINGLE RIGHT-POINTING ANGLE QUOTATION MARK (U+203A)\n    }\n  }\n}\n\n// Optional indicator pips\n//\n// Add an unordered list with the following class and add a list item for each\n// slide your carousel holds.\n\n.carousel-indicators {\n  position: absolute;\n  bottom: 10px;\n  left: 50%;\n  z-index: 15;\n  width: 60%;\n  margin-left: -30%;\n  padding-left: 0;\n  list-style: none;\n  text-align: center;\n\n  li {\n    display: inline-block;\n    width:  10px;\n    height: 10px;\n    margin: 1px;\n    text-indent: -999px;\n    border: 1px solid $carousel-indicator-border-color;\n    border-radius: 10px;\n    cursor: pointer;\n  }\n  .active {\n    margin: 0;\n    width:  12px;\n    height: 12px;\n    background-color: $carousel-indicator-active-bg;\n  }\n}\n\n// Optional captions\n// -----------------------------\n// Hidden by default for smaller viewports\n.carousel-caption {\n  position: absolute;\n  left: 15%;\n  right: 15%;\n  bottom: 20px;\n  z-index: 10;\n  padding-top: 20px;\n  padding-bottom: 20px;\n  color: $carousel-caption-color;\n  text-align: center;\n  text-shadow: $carousel-text-shadow;\n  & .btn {\n    text-shadow: none; // No shadow for button elements in carousel-caption\n  }\n}\n\n\n// Scale up controls for tablets and up\n@media screen and (min-width: $screen-tablet) {\n\n  // Scale up the controls a smidge\n  .carousel-control .icon-prev,\n  .carousel-control .icon-next {\n    width: 30px;\n    height: 30px;\n    margin-top: -15px;\n    margin-left: -15px;\n    font-size: 30px;\n  }\n\n  // Show and left align the captions\n  .carousel-caption {\n    left: 20%;\n    right: 20%;\n    padding-bottom: 30px;\n  }\n\n  // Move up the indicators\n  .carousel-indicators {\n    bottom: 20px;\n  }\n}\n"
  },
  {
    "path": "content/scss/bootstrap/_close.scss",
    "content": "//\n// Close icons\n// --------------------------------------------------\n\n\n.close {\n  float: right;\n  font-size: ($font-size-base * 1.5);\n  font-weight: $close-font-weight;\n  line-height: 1;\n  color: $close-color;\n  text-shadow: $close-text-shadow;\n  @include opacity(.2);\n\n  &:hover,\n  &:focus {\n    color: $close-color;\n    text-decoration: none;\n    cursor: pointer;\n    @include opacity(.5);\n  }\n}\n\n// Additional properties for button version\n// iOS requires the button element instead of an anchor tag.\n// If you want the anchor version, it requires `href=\"#\"`.\nbutton.close {\n  padding: 0;\n  cursor: pointer;\n  background: transparent;\n  border: 0;\n  -webkit-appearance: none;\n}\n"
  },
  {
    "path": "content/scss/bootstrap/_code.scss",
    "content": "//\n// Code (inline and blocK)\n// --------------------------------------------------\n\n\n// Inline and block code styles\ncode,\npre {\n  font-family: $font-family-monospace;\n}\n\n// Inline code\ncode {\n  margin-left: 3px;\n  margin-right: 3px;\n  padding: 2px 4px;\n  font-size: 85%;\n  color: $code-color;\n  background-color: $code-bg;\n  white-space: nowrap;\n  border-radius: $border-radius-base;\n}\n\n// Blocks of code\npre {\n  display: block;\n  padding: (($line-height-computed - 1) / 2);\n  margin: 0 0 ($line-height-computed / 2);\n  font-size: ($font-size-base - 1); // 14px to 13px\n  line-height: $line-height-base;\n  word-break: break-all;\n  word-wrap: break-word;\n  color: $pre-color;\n  background-color: $pre-bg;\n  border: 1px solid $pre-border-color;\n  border-radius: $border-radius-base;\n\n  // Make prettyprint styles more spaced out for readability\n  &.prettyprint {\n    margin-bottom: $line-height-computed;\n  }\n\n  // Account for some code outputs that place code tags in pre tags\n  code {\n    padding: 0;\n    font-size: inherit;\n    color: inherit;\n    white-space: pre-wrap;\n    background-color: transparent;\n    border: 0;\n  }\n}\n\n// Enable scrollable blocks of code\n.pre-scrollable {\n  max-height: $pre-scrollable-max-height;\n  overflow-y: scroll;\n}\n"
  },
  {
    "path": "content/scss/bootstrap/_component-animations.scss",
    "content": "//\n// Component animations\n// --------------------------------------------------\n\n// Heads up!\n//\n// We don't use the `.opacity()` mixin here since it causes a bug with text\n// fields in IE7-8. Source: https://github.com/twitter/bootstrap/pull/3552.\n\n.fade {\n  opacity: 0;\n  @include transition(opacity .15s linear);\n  &.in {\n    opacity: 1;\n  }\n}\n\n.collapse {\n  display: none;\n  &.in {\n    display: block;\n  }\n}\n.collapsing {\n  position: relative;\n  height: 0;\n  overflow: hidden;\n  @include transition(height .35s ease);\n}\n"
  },
  {
    "path": "content/scss/bootstrap/_dropdowns.scss",
    "content": "//\n// Dropdown menus\n// --------------------------------------------------\n\n\n// Dropdown arrow/caret\n.caret {\n  display: inline-block;\n  width: 0;\n  height: 0;\n  margin-left: 2px;\n  vertical-align: middle;\n  border-top:   $caret-width-base solid $dropdown-caret-color;\n  border-right: $caret-width-base solid transparent;\n  border-left:  $caret-width-base solid transparent;\n  // Firefox fix for https://github.com/twbs/bootstrap/issues/9538. Once fixed,\n  // we can just straight up remove this.\n  border-bottom: 0 dotted;\n  content: \"\";\n}\n\n// The dropdown wrapper (div)\n.dropdown {\n  position: relative;\n}\n\n// Prevent the focus on the dropdown toggle when closing dropdowns\n.dropdown-toggle:focus {\n  outline: 0;\n}\n\n// The dropdown menu (ul)\n.dropdown-menu {\n  position: absolute;\n  top: 100%;\n  left: 0;\n  z-index: $zindex-dropdown;\n  display: none; // none by default, but block on \"open\" of the menu\n  float: left;\n  min-width: 160px;\n  padding: 5px 0;\n  margin: 2px 0 0; // override default ul\n  list-style: none;\n  font-size: $font-size-base;\n  background-color: $dropdown-bg;\n  border: 1px solid $dropdown-fallback-border; // IE8 fallback\n  border: 1px solid $dropdown-border;\n  border-radius: $border-radius-base;\n  @include box-shadow(0 6px 12px rgba(0,0,0,.175));\n  background-clip: padding-box;\n\n  // Aligns the dropdown menu to right\n  &.pull-right {\n    right: 0;\n    left: auto;\n  }\n\n  // Dividers (basically an hr) within the dropdown\n  .divider {\n    @include nav-divider($dropdown-divider-bg);\n  }\n\n  // Links within the dropdown menu\n  > li > a {\n    display: block;\n    padding: 3px 20px;\n    clear: both;\n    font-weight: normal;\n    line-height: $line-height-base;\n    color: $dropdown-link-color;\n    white-space: nowrap; // prevent links from randomly breaking onto new lines\n  }\n}\n\n// Hover/Focus state\n.dropdown-menu > li > a {\n  &:hover,\n  &:focus {\n    text-decoration: none;\n    color: $dropdown-link-hover-color;\n    background-color: $dropdown-link-hover-bg;\n  }\n}\n\n// Active state\n.dropdown-menu > .active > a {\n  &,\n  &:hover,\n  &:focus {\n    color: $dropdown-link-active-color;\n    text-decoration: none;\n    outline: 0;\n    background-color: $dropdown-link-active-bg;\n  }\n}\n\n// Disabled state\n//\n// Gray out text and ensure the hover/focus state remains gray\n\n.dropdown-menu > .disabled > a {\n  &,\n  &:hover,\n  &:focus {\n    color: $dropdown-link-disabled-color;\n  }\n}\n// Nuke hover/focus effects\n.dropdown-menu > .disabled > a {\n  &:hover,\n  &:focus {\n    text-decoration: none;\n    background-color: transparent;\n    background-image: none; // Remove CSS gradient\n    @include reset-filter();\n    cursor: not-allowed;\n  }\n}\n\n// Open state for the dropdown\n.open {\n  // Show the menu\n  > .dropdown-menu {\n    display: block;\n  }\n\n  // Remove the outline when :focus is triggered\n  > a {\n    outline: 0;\n  }\n}\n\n// Dropdown section headers\n.dropdown-header {\n  display: block;\n  padding: 3px 20px;\n  font-size: $font-size-small;\n  line-height: $line-height-base;\n  color: $dropdown-header-color;\n}\n\n// Backdrop to catch body clicks on mobile, etc.\n.dropdown-backdrop {\n  position: fixed;\n  left: 0;\n  right: 0;\n  bottom: 0;\n  top: 0;\n  z-index: $zindex-dropdown - 10;\n}\n\n// Right aligned dropdowns\n.pull-right > .dropdown-menu {\n  right: 0;\n  left: auto;\n}\n\n// Allow for dropdowns to go bottom up (aka, dropup-menu)\n//\n// Just add .dropup after the standard .dropdown class and you're set, bro.\n// TODO: abstract this so that the navbar fixed styles are not placed here?\n\n.dropup,\n.navbar-fixed-bottom .dropdown {\n  // Reverse the caret\n  .caret {\n    // Firefox fix for https://github.com/twbs/bootstrap/issues/9538. Once this\n    // gets fixed, restore `border-top: 0;`.\n    border-top: 0 dotted;\n    border-bottom: 4px solid $dropdown-caret-color;\n    content: \"\";\n  }\n  // Different positioning for bottom up menu\n  .dropdown-menu {\n    top: auto;\n    bottom: 100%;\n    margin-bottom: 1px;\n  }\n}\n\n\n// Component alignment\n//\n// Reiterate per navbar.less and the modified component alignment there.\n\n@media (min-width: $grid-float-breakpoint) {\n  .navbar-right {\n    .dropdown-menu {\n      right: 0;\n      left: auto;\n    }\n  }\n}\n\n"
  },
  {
    "path": "content/scss/bootstrap/_forms.scss",
    "content": "//\n// Forms\n// --------------------------------------------------\n\n\n// Normalize non-controls\n//\n// Restyle and baseline non-control form elements.\n\nfieldset {\n  padding: 0;\n  margin: 0;\n  border: 0;\n}\n\nlegend {\n  display: block;\n  width: 100%;\n  padding: 0;\n  margin-bottom: $line-height-computed;\n  font-size: ($font-size-base * 1.5);\n  line-height: inherit;\n  color: $legend-color;\n  border: 0;\n  border-bottom: 1px solid $legend-border-color;\n}\n\nlabel {\n  display: inline-block;\n  margin-bottom: 5px;\n  font-weight: bold;\n}\n\n\n// Normalize form controls\n\n// Override content-box in Normalize (* isn't specific enough)\ninput[type=\"search\"] {\n  @include box-sizing(border-box);\n}\n\n// Position radios and checkboxes better\ninput[type=\"radio\"],\ninput[type=\"checkbox\"] {\n  margin: 4px 0 0;\n  margin-top: 1px \\9; /* IE8-9 */\n  line-height: normal;\n}\n\n// Set the height of select and file controls to match text inputs\ninput[type=\"file\"] {\n  display: block;\n}\n\n// Make multiple select elements height not fixed\nselect[multiple],\nselect[size] {\n  height: auto;\n}\n\n// Fix optgroup Firefox bug per https://github.com/twbs/bootstrap/issues/7611\nselect optgroup {\n  font-size: inherit;\n  font-style: inherit;\n  font-family: inherit;\n}\n\n// Focus for select, file, radio, and checkbox\ninput[type=\"file\"]:focus,\ninput[type=\"radio\"]:focus,\ninput[type=\"checkbox\"]:focus {\n  @include tab-focus();\n}\n\n// Fix for Chrome number input\n// Setting certain font-sizes causes the `I` bar to appear on hover of the bottom increment button.\n// See https://github.com/twbs/bootstrap/issues/8350 for more.\ninput[type=\"number\"] {\n  &::-webkit-outer-spin-button,\n  &::-webkit-inner-spin-button {\n    height: auto;\n  }\n}\n\n\n// Placeholder\n//\n// Placeholder text gets special styles because when browsers invalidate entire\n// lines if it doesn't understand a selector/\n.form-control {\n  @include placeholder();\n}\n\n\n// Common form controls\n//\n// Shared size and type resets for form controls. Apply `.form-control` to any\n// of the following form controls:\n//\n// select\n// textarea\n// input[type=\"text\"]\n// input[type=\"password\"]\n// input[type=\"datetime\"]\n// input[type=\"datetime-local\"]\n// input[type=\"date\"]\n// input[type=\"month\"]\n// input[type=\"time\"]\n// input[type=\"week\"]\n// input[type=\"number\"]\n// input[type=\"email\"]\n// input[type=\"url\"]\n// input[type=\"search\"]\n// input[type=\"tel\"]\n// input[type=\"color\"]\n\n.form-control {\n  display: block;\n  width: 100%;\n  height: $input-height-base; // Make inputs at least the height of their button counterpart (base line-height + padding + border)\n  padding: $padding-base-vertical $padding-base-horizontal;\n  font-size: $font-size-base;\n  line-height: $line-height-base;\n  color: $input-color;\n  vertical-align: middle;\n  background-color: $input-bg;\n  border: 1px solid $input-border;\n  border-radius: $input-border-radius;\n  @include box-shadow(inset 0 1px 1px rgba(0,0,0,.075));\n  @include transition(border-color ease-in-out .15s, box-shadow ease-in-out .15s);\n\n  // Customize the `:focus` state to imitate native WebKit styles.\n  @include form-control-focus();\n\n  // Disabled and read-only inputs\n  // Note: HTML5 says that controls under a fieldset > legend:first-child won't\n  // be disabled if the fieldset is disabled. Due to implementation difficulty,\n  // we don't honor that edge case; we style them as disabled anyway.\n  &[disabled],\n  &[readonly],\n  fieldset[disabled] & {\n    cursor: not-allowed;\n    background-color: $input-bg-disabled;\n  }\n}\n\n// Reset height for `textarea`s\ntextarea.form-control {\n  height: auto;\n}\n\n\n// Form groups\n//\n// Designed to help with the organization and spacing of vertical forms. For\n// horizontal forms, use the predefined grid classes.\n\n.form-group {\n  margin-bottom: 15px;\n}\n\n\n// Checkboxes and radios\n//\n// Indent the labels to position radios/checkboxes as hanging controls.\n\n.radio,\n.checkbox {\n  display: block;\n  min-height: $line-height-computed; // clear the floating input if there is no label text\n  margin-top: 10px;\n  margin-bottom: 10px;\n  padding-left: 20px;\n  vertical-align: middle;\n  label {\n    display: inline;\n    margin-bottom: 0;\n    font-weight: normal;\n    cursor: pointer;\n  }\n}\n.radio input[type=\"radio\"],\n.radio-inline input[type=\"radio\"],\n.checkbox input[type=\"checkbox\"],\n.checkbox-inline input[type=\"checkbox\"] {\n  float: left;\n  margin-left: -20px;\n}\n.radio + .radio,\n.checkbox + .checkbox {\n  margin-top: -5px; // Move up sibling radios or checkboxes for tighter spacing\n}\n\n// Radios and checkboxes on same line\n.radio-inline,\n.checkbox-inline {\n  display: inline-block;\n  padding-left: 20px;\n  margin-bottom: 0;\n  vertical-align: middle;\n  font-weight: normal;\n  cursor: pointer;\n}\n.radio-inline + .radio-inline,\n.checkbox-inline + .checkbox-inline {\n  margin-top: 0;\n  margin-left: 10px; // space out consecutive inline controls\n}\n\n// Apply same disabled cursor tweak as for inputs\n//\n// Note: Neither radios nor checkboxes can be readonly.\ninput[type=\"radio\"],\ninput[type=\"checkbox\"],\n.radio,\n.radio-inline,\n.checkbox,\n.checkbox-inline {\n  &[disabled],\n  fieldset[disabled] & {\n    cursor: not-allowed;\n  }\n}\n\n// Form control sizing\n\n@include input-size('.input-sm', $input-height-small, $padding-small-vertical, $padding-small-horizontal, $font-size-small, $line-height-small, $border-radius-small);\n\n@include input-size('.input-lg', $input-height-large, $padding-large-vertical, $padding-large-horizontal, $font-size-large, $line-height-large, $border-radius-large);\n\n\n// Form control feedback states\n//\n// Apply contextual and semantic states to individual form controls.\n\n// Warning\n.has-warning {\n  @include form-control-validation($state-warning-text, $state-warning-text, $state-warning-bg);\n}\n// Error\n.has-error {\n  @include form-control-validation($state-danger-text, $state-danger-text, $state-danger-bg);\n}\n// Success\n.has-success {\n  @include form-control-validation($state-success-text, $state-success-text, $state-success-bg);\n}\n\n\n// Static form control text\n//\n// Apply class to a `p` element to make any string of text align with labels in\n// a horizontal form layout.\n\n.form-control-static {\n  margin-bottom: 0; // Remove default margin from `p`\n  padding-top: ($padding-base-vertical + 1);\n}\n\n\n// Help text\n//\n// Apply to any element you wish to create light text for placement immediately\n// below a form control. Use for general help, formatting, or instructional text.\n\n.help-block {\n  display: block; // account for any element using help-block\n  margin-top: 5px;\n  margin-bottom: 10px;\n  color: lighten($text-color, 25%); // lighten the text some for contrast\n}\n\n\n\n// Inline forms\n//\n// Make forms appear inline(-block) by adding the `.form-inline` class. Inline\n// forms begin stacked on extra small (mobile) devices and then go inline when\n// viewports reach <768px.\n//\n// Requires wrapping inputs and labels with `.form-group` for proper display of\n// default HTML form controls and our custom form controls (e.g., input groups).\n//\n// Heads up! This is mixin-ed into `.navbar-form` in navbars.less.\n\n.form-inline {\n\n  // Kick in the inline\n  @media (min-width: $screen-tablet) {\n    // Inline-block all the things for \"inline\"\n    .form-group  {\n      display: inline-block;\n      margin-bottom: 0;\n      vertical-align: middle;\n    }\n\n    // In navbar-form, allow folks to *not* use `.form-group`\n    .form-control {\n      display: inline-block;\n    }\n\n    // Remove default margin on radios/checkboxes that were used for stacking, and\n    // then undo the floating of radios and checkboxes to match (which also avoids\n    // a bug in WebKit: https://github.com/twbs/bootstrap/issues/1969).\n    .radio,\n    .checkbox {\n      display: inline-block;\n      margin-top: 0;\n      margin-bottom: 0;\n      padding-left: 0;\n    }\n    .radio input[type=\"radio\"],\n    .checkbox input[type=\"checkbox\"] {\n      float: none;\n      margin-left: 0;\n    }\n  }\n}\n\n\n// Horizontal forms\n//\n// Horizontal forms are built on grid classes and allow you to create forms with\n// labels on the left and inputs on the right.\n\n.form-horizontal {\n\n  // Consistent vertical alignment of labels, radios, and checkboxes\n  .control-label,\n  .radio,\n  .checkbox,\n  .radio-inline,\n  .checkbox-inline {\n    margin-top: 0;\n    margin-bottom: 0;\n    padding-top: ($padding-base-vertical + 1); // Default padding plus a border\n  }\n\n  // Make form groups behave like rows\n  .form-group {\n    @include make-row();\n  }\n\n  // Only right align form labels here when the columns stop stacking\n  @media (min-width: $screen-tablet) {\n    .control-label {\n      text-align: right;\n    }\n  }\n}\n"
  },
  {
    "path": "content/scss/bootstrap/_glyphicons.scss",
    "content": "//\n// Glyphicons for Bootstrap\n//\n// Since icons are fonts, they can be placed anywhere text is placed and are\n// thus automatically sized to match the surrounding child. To use, create an\n// inline element with the appropriate classes, like so:\n//\n// <a href=\"#\"><span class=\"glyphicon glyphicon-star\"></span> Star</a>\n\n// Import the fonts\n@font-face {\n  font-family: 'Glyphicons Halflings';\n  src: url('#{$icon-font-path}#{$icon-font-name}.eot');\n  src: url('#{$icon-font-path}#{$icon-font-name}.eot?#iefix') format('embedded-opentype'),\n       url('#{$icon-font-path}#{$icon-font-name}.woff') format('woff'),\n       url('#{$icon-font-path}#{$icon-font-name}.ttf') format('truetype'),\n       url('#{$icon-font-path}#{$icon-font-name}.svg#glyphicons-halflingsregular') format('svg');\n}\n\n// Catchall baseclass\n.glyphicon {\n  position: relative;\n  top: 1px;\n  display: inline-block;\n  font-family: 'Glyphicons Halflings';\n  font-style: normal;\n  font-weight: normal;\n  line-height: 1;\n  -webkit-font-smoothing: antialiased;\n}\n\n// Individual icons\n.glyphicon-asterisk               { &:before { content: \"\\2a\"; } }\n.glyphicon-plus                   { &:before { content: \"\\2b\"; } }\n.glyphicon-euro                   { &:before { content: \"\\20ac\"; } }\n.glyphicon-minus                  { &:before { content: \"\\2212\"; } }\n.glyphicon-cloud                  { &:before { content: \"\\2601\"; } }\n.glyphicon-envelope               { &:before { content: \"\\2709\"; } }\n.glyphicon-pencil                 { &:before { content: \"\\270f\"; } }\n.glyphicon-glass                  { &:before { content: \"\\e001\"; } }\n.glyphicon-music                  { &:before { content: \"\\e002\"; } }\n.glyphicon-search                 { &:before { content: \"\\e003\"; } }\n.glyphicon-heart                  { &:before { content: \"\\e005\"; } }\n.glyphicon-star                   { &:before { content: \"\\e006\"; } }\n.glyphicon-star-empty             { &:before { content: \"\\e007\"; } }\n.glyphicon-user                   { &:before { content: \"\\e008\"; } }\n.glyphicon-film                   { &:before { content: \"\\e009\"; } }\n.glyphicon-th-large               { &:before { content: \"\\e010\"; } }\n.glyphicon-th                     { &:before { content: \"\\e011\"; } }\n.glyphicon-th-list                { &:before { content: \"\\e012\"; } }\n.glyphicon-ok                     { &:before { content: \"\\e013\"; } }\n.glyphicon-remove                 { &:before { content: \"\\e014\"; } }\n.glyphicon-zoom-in                { &:before { content: \"\\e015\"; } }\n.glyphicon-zoom-out               { &:before { content: \"\\e016\"; } }\n.glyphicon-off                    { &:before { content: \"\\e017\"; } }\n.glyphicon-signal                 { &:before { content: \"\\e018\"; } }\n.glyphicon-cog                    { &:before { content: \"\\e019\"; } }\n.glyphicon-trash                  { &:before { content: \"\\e020\"; } }\n.glyphicon-home                   { &:before { content: \"\\e021\"; } }\n.glyphicon-file                   { &:before { content: \"\\e022\"; } }\n.glyphicon-time                   { &:before { content: \"\\e023\"; } }\n.glyphicon-road                   { &:before { content: \"\\e024\"; } }\n.glyphicon-download-alt           { &:before { content: \"\\e025\"; } }\n.glyphicon-download               { &:before { content: \"\\e026\"; } }\n.glyphicon-upload                 { &:before { content: \"\\e027\"; } }\n.glyphicon-inbox                  { &:before { content: \"\\e028\"; } }\n.glyphicon-play-circle            { &:before { content: \"\\e029\"; } }\n.glyphicon-repeat                 { &:before { content: \"\\e030\"; } }\n.glyphicon-refresh                { &:before { content: \"\\e031\"; } }\n.glyphicon-list-alt               { &:before { content: \"\\e032\"; } }\n.glyphicon-flag                   { &:before { content: \"\\e034\"; } }\n.glyphicon-headphones             { &:before { content: \"\\e035\"; } }\n.glyphicon-volume-off             { &:before { content: \"\\e036\"; } }\n.glyphicon-volume-down            { &:before { content: \"\\e037\"; } }\n.glyphicon-volume-up              { &:before { content: \"\\e038\"; } }\n.glyphicon-qrcode                 { &:before { content: \"\\e039\"; } }\n.glyphicon-barcode                { &:before { content: \"\\e040\"; } }\n.glyphicon-tag                    { &:before { content: \"\\e041\"; } }\n.glyphicon-tags                   { &:before { content: \"\\e042\"; } }\n.glyphicon-book                   { &:before { content: \"\\e043\"; } }\n.glyphicon-print                  { &:before { content: \"\\e045\"; } }\n.glyphicon-font                   { &:before { content: \"\\e047\"; } }\n.glyphicon-bold                   { &:before { content: \"\\e048\"; } }\n.glyphicon-italic                 { &:before { content: \"\\e049\"; } }\n.glyphicon-text-height            { &:before { content: \"\\e050\"; } }\n.glyphicon-text-width             { &:before { content: \"\\e051\"; } }\n.glyphicon-align-left             { &:before { content: \"\\e052\"; } }\n.glyphicon-align-center           { &:before { content: \"\\e053\"; } }\n.glyphicon-align-right            { &:before { content: \"\\e054\"; } }\n.glyphicon-align-justify          { &:before { content: \"\\e055\"; } }\n.glyphicon-list                   { &:before { content: \"\\e056\"; } }\n.glyphicon-indent-left            { &:before { content: \"\\e057\"; } }\n.glyphicon-indent-right           { &:before { content: \"\\e058\"; } }\n.glyphicon-facetime-video         { &:before { content: \"\\e059\"; } }\n.glyphicon-picture                { &:before { content: \"\\e060\"; } }\n.glyphicon-map-marker             { &:before { content: \"\\e062\"; } }\n.glyphicon-adjust                 { &:before { content: \"\\e063\"; } }\n.glyphicon-tint                   { &:before { content: \"\\e064\"; } }\n.glyphicon-edit                   { &:before { content: \"\\e065\"; } }\n.glyphicon-share                  { &:before { content: \"\\e066\"; } }\n.glyphicon-check                  { &:before { content: \"\\e067\"; } }\n.glyphicon-move                   { &:before { content: \"\\e068\"; } }\n.glyphicon-step-backward          { &:before { content: \"\\e069\"; } }\n.glyphicon-fast-backward          { &:before { content: \"\\e070\"; } }\n.glyphicon-backward               { &:before { content: \"\\e071\"; } }\n.glyphicon-play                   { &:before { content: \"\\e072\"; } }\n.glyphicon-pause                  { &:before { content: \"\\e073\"; } }\n.glyphicon-stop                   { &:before { content: \"\\e074\"; } }\n.glyphicon-forward                { &:before { content: \"\\e075\"; } }\n.glyphicon-fast-forward           { &:before { content: \"\\e076\"; } }\n.glyphicon-step-forward           { &:before { content: \"\\e077\"; } }\n.glyphicon-eject                  { &:before { content: \"\\e078\"; } }\n.glyphicon-chevron-left           { &:before { content: \"\\e079\"; } }\n.glyphicon-chevron-right          { &:before { content: \"\\e080\"; } }\n.glyphicon-plus-sign              { &:before { content: \"\\e081\"; } }\n.glyphicon-minus-sign             { &:before { content: \"\\e082\"; } }\n.glyphicon-remove-sign            { &:before { content: \"\\e083\"; } }\n.glyphicon-ok-sign                { &:before { content: \"\\e084\"; } }\n.glyphicon-question-sign          { &:before { content: \"\\e085\"; } }\n.glyphicon-info-sign              { &:before { content: \"\\e086\"; } }\n.glyphicon-screenshot             { &:before { content: \"\\e087\"; } }\n.glyphicon-remove-circle          { &:before { content: \"\\e088\"; } }\n.glyphicon-ok-circle              { &:before { content: \"\\e089\"; } }\n.glyphicon-ban-circle             { &:before { content: \"\\e090\"; } }\n.glyphicon-arrow-left             { &:before { content: \"\\e091\"; } }\n.glyphicon-arrow-right            { &:before { content: \"\\e092\"; } }\n.glyphicon-arrow-up               { &:before { content: \"\\e093\"; } }\n.glyphicon-arrow-down             { &:before { content: \"\\e094\"; } }\n.glyphicon-share-alt              { &:before { content: \"\\e095\"; } }\n.glyphicon-resize-full            { &:before { content: \"\\e096\"; } }\n.glyphicon-resize-small           { &:before { content: \"\\e097\"; } }\n.glyphicon-exclamation-sign       { &:before { content: \"\\e101\"; } }\n.glyphicon-gift                   { &:before { content: \"\\e102\"; } }\n.glyphicon-leaf                   { &:before { content: \"\\e103\"; } }\n.glyphicon-eye-open               { &:before { content: \"\\e105\"; } }\n.glyphicon-eye-close              { &:before { content: \"\\e106\"; } }\n.glyphicon-warning-sign           { &:before { content: \"\\e107\"; } }\n.glyphicon-plane                  { &:before { content: \"\\e108\"; } }\n.glyphicon-random                 { &:before { content: \"\\e110\"; } }\n.glyphicon-comment                { &:before { content: \"\\e111\"; } }\n.glyphicon-magnet                 { &:before { content: \"\\e112\"; } }\n.glyphicon-chevron-up             { &:before { content: \"\\e113\"; } }\n.glyphicon-chevron-down           { &:before { content: \"\\e114\"; } }\n.glyphicon-retweet                { &:before { content: \"\\e115\"; } }\n.glyphicon-shopping-cart          { &:before { content: \"\\e116\"; } }\n.glyphicon-folder-close           { &:before { content: \"\\e117\"; } }\n.glyphicon-folder-open            { &:before { content: \"\\e118\"; } }\n.glyphicon-resize-vertical        { &:before { content: \"\\e119\"; } }\n.glyphicon-resize-horizontal      { &:before { content: \"\\e120\"; } }\n.glyphicon-hdd                    { &:before { content: \"\\e121\"; } }\n.glyphicon-bullhorn               { &:before { content: \"\\e122\"; } }\n.glyphicon-certificate            { &:before { content: \"\\e124\"; } }\n.glyphicon-thumbs-up              { &:before { content: \"\\e125\"; } }\n.glyphicon-thumbs-down            { &:before { content: \"\\e126\"; } }\n.glyphicon-hand-right             { &:before { content: \"\\e127\"; } }\n.glyphicon-hand-left              { &:before { content: \"\\e128\"; } }\n.glyphicon-hand-up                { &:before { content: \"\\e129\"; } }\n.glyphicon-hand-down              { &:before { content: \"\\e130\"; } }\n.glyphicon-circle-arrow-right     { &:before { content: \"\\e131\"; } }\n.glyphicon-circle-arrow-left      { &:before { content: \"\\e132\"; } }\n.glyphicon-circle-arrow-up        { &:before { content: \"\\e133\"; } }\n.glyphicon-circle-arrow-down      { &:before { content: \"\\e134\"; } }\n.glyphicon-globe                  { &:before { content: \"\\e135\"; } }\n.glyphicon-tasks                  { &:before { content: \"\\e137\"; } }\n.glyphicon-filter                 { &:before { content: \"\\e138\"; } }\n.glyphicon-fullscreen             { &:before { content: \"\\e140\"; } }\n.glyphicon-dashboard              { &:before { content: \"\\e141\"; } }\n.glyphicon-heart-empty            { &:before { content: \"\\e143\"; } }\n.glyphicon-link                   { &:before { content: \"\\e144\"; } }\n.glyphicon-phone                  { &:before { content: \"\\e145\"; } }\n.glyphicon-usd                    { &:before { content: \"\\e148\"; } }\n.glyphicon-gbp                    { &:before { content: \"\\e149\"; } }\n.glyphicon-sort                   { &:before { content: \"\\e150\"; } }\n.glyphicon-sort-by-alphabet       { &:before { content: \"\\e151\"; } }\n.glyphicon-sort-by-alphabet-alt   { &:before { content: \"\\e152\"; } }\n.glyphicon-sort-by-order          { &:before { content: \"\\e153\"; } }\n.glyphicon-sort-by-order-alt      { &:before { content: \"\\e154\"; } }\n.glyphicon-sort-by-attributes     { &:before { content: \"\\e155\"; } }\n.glyphicon-sort-by-attributes-alt { &:before { content: \"\\e156\"; } }\n.glyphicon-unchecked              { &:before { content: \"\\e157\"; } }\n.glyphicon-expand                 { &:before { content: \"\\e158\"; } }\n.glyphicon-collapse-down          { &:before { content: \"\\e159\"; } }\n.glyphicon-collapse-up            { &:before { content: \"\\e160\"; } }\n.glyphicon-log-in                 { &:before { content: \"\\e161\"; } }\n.glyphicon-flash                  { &:before { content: \"\\e162\"; } }\n.glyphicon-log-out                { &:before { content: \"\\e163\"; } }\n.glyphicon-new-window             { &:before { content: \"\\e164\"; } }\n.glyphicon-record                 { &:before { content: \"\\e165\"; } }\n.glyphicon-save                   { &:before { content: \"\\e166\"; } }\n.glyphicon-open                   { &:before { content: \"\\e167\"; } }\n.glyphicon-saved                  { &:before { content: \"\\e168\"; } }\n.glyphicon-import                 { &:before { content: \"\\e169\"; } }\n.glyphicon-export                 { &:before { content: \"\\e170\"; } }\n.glyphicon-send                   { &:before { content: \"\\e171\"; } }\n.glyphicon-floppy-disk            { &:before { content: \"\\e172\"; } }\n.glyphicon-floppy-saved           { &:before { content: \"\\e173\"; } }\n.glyphicon-floppy-remove          { &:before { content: \"\\e174\"; } }\n.glyphicon-floppy-save            { &:before { content: \"\\e175\"; } }\n.glyphicon-floppy-open            { &:before { content: \"\\e176\"; } }\n.glyphicon-credit-card            { &:before { content: \"\\e177\"; } }\n.glyphicon-transfer               { &:before { content: \"\\e178\"; } }\n.glyphicon-cutlery                { &:before { content: \"\\e179\"; } }\n.glyphicon-header                 { &:before { content: \"\\e180\"; } }\n.glyphicon-compressed             { &:before { content: \"\\e181\"; } }\n.glyphicon-earphone               { &:before { content: \"\\e182\"; } }\n.glyphicon-phone-alt              { &:before { content: \"\\e183\"; } }\n.glyphicon-tower                  { &:before { content: \"\\e184\"; } }\n.glyphicon-stats                  { &:before { content: \"\\e185\"; } }\n.glyphicon-sd-video               { &:before { content: \"\\e186\"; } }\n.glyphicon-hd-video               { &:before { content: \"\\e187\"; } }\n.glyphicon-subtitles              { &:before { content: \"\\e188\"; } }\n.glyphicon-sound-stereo           { &:before { content: \"\\e189\"; } }\n.glyphicon-sound-dolby            { &:before { content: \"\\e190\"; } }\n.glyphicon-sound-5-1              { &:before { content: \"\\e191\"; } }\n.glyphicon-sound-6-1              { &:before { content: \"\\e192\"; } }\n.glyphicon-sound-7-1              { &:before { content: \"\\e193\"; } }\n.glyphicon-copyright-mark         { &:before { content: \"\\e194\"; } }\n.glyphicon-registration-mark      { &:before { content: \"\\e195\"; } }\n.glyphicon-cloud-download         { &:before { content: \"\\e197\"; } }\n.glyphicon-cloud-upload           { &:before { content: \"\\e198\"; } }\n.glyphicon-tree-conifer           { &:before { content: \"\\e199\"; } }\n.glyphicon-tree-deciduous         { &:before { content: \"\\e200\"; } }\n.glyphicon-briefcase              { &:before { content: \"\\1f4bc\"; } }\n.glyphicon-calendar               { &:before { content: \"\\1f4c5\"; } }\n.glyphicon-pushpin                { &:before { content: \"\\1f4cc\"; } }\n.glyphicon-paperclip              { &:before { content: \"\\1f4ce\"; } }\n.glyphicon-camera                 { &:before { content: \"\\1f4f7\"; } }\n.glyphicon-lock                   { &:before { content: \"\\1f512\"; } }\n.glyphicon-bell                   { &:before { content: \"\\1f514\"; } }\n.glyphicon-bookmark               { &:before { content: \"\\1f516\"; } }\n.glyphicon-fire                   { &:before { content: \"\\1f525\"; } }\n.glyphicon-wrench                 { &:before { content: \"\\1f527\"; } }\n"
  },
  {
    "path": "content/scss/bootstrap/_grid.scss",
    "content": "//\n// Grid system\n// --------------------------------------------------\n\n\n// Set the container width, and override it for fixed navbars in media queries\n.container {\n  @include container-fixed();\n}\n\n// mobile first defaults\n.row {\n  @include make-row();\n}\n\n// Common styles for small and large grid columns\n.col-xs-1,\n.col-xs-2,\n.col-xs-3,\n.col-xs-4,\n.col-xs-5,\n.col-xs-6,\n.col-xs-7,\n.col-xs-8,\n.col-xs-9,\n.col-xs-10,\n.col-xs-11,\n.col-xs-12,\n.col-sm-1,\n.col-sm-2,\n.col-sm-3,\n.col-sm-4,\n.col-sm-5,\n.col-sm-6,\n.col-sm-7,\n.col-sm-8,\n.col-sm-9,\n.col-sm-10,\n.col-sm-11,\n.col-sm-12,\n.col-md-1,\n.col-md-2,\n.col-md-3,\n.col-md-4,\n.col-md-5,\n.col-md-6,\n.col-md-7,\n.col-md-8,\n.col-md-9,\n.col-md-10,\n.col-md-11,\n.col-md-12,\n.col-lg-1,\n.col-lg-2,\n.col-lg-3,\n.col-lg-4,\n.col-lg-5,\n.col-lg-6,\n.col-lg-7,\n.col-lg-8,\n.col-lg-9,\n.col-lg-10,\n.col-lg-11,\n.col-lg-12 {\n  position: relative;\n  // Prevent columns from collapsing when empty\n  min-height: 1px;\n  // Inner gutter via padding\n  padding-left:  ($grid-gutter-width / 2);\n  padding-right: ($grid-gutter-width / 2);\n}\n\n\n// Extra small grid\n//\n// Grid classes for extra small devices like smartphones. No offset, push, or\n// pull classes are present here due to the size of the target.\n//\n// Note that `.col-xs-12` doesn't get floated on purpose—there's no need since\n// it's full-width.\n\n.col-xs-1,\n.col-xs-2,\n.col-xs-3,\n.col-xs-4,\n.col-xs-5,\n.col-xs-6,\n.col-xs-7,\n.col-xs-8,\n.col-xs-9,\n.col-xs-10,\n.col-xs-11 {\n  float: left;\n}\n.col-xs-1  { width: percentage((1 / $grid-columns)); }\n.col-xs-2  { width: percentage((2 / $grid-columns)); }\n.col-xs-3  { width: percentage((3 / $grid-columns)); }\n.col-xs-4  { width: percentage((4 / $grid-columns)); }\n.col-xs-5  { width: percentage((5 / $grid-columns)); }\n.col-xs-6  { width: percentage((6 / $grid-columns)); }\n.col-xs-7  { width: percentage((7 / $grid-columns)); }\n.col-xs-8  { width: percentage((8 / $grid-columns)); }\n.col-xs-9  { width: percentage((9 / $grid-columns)); }\n.col-xs-10 { width: percentage((10/ $grid-columns)); }\n.col-xs-11 { width: percentage((11/ $grid-columns)); }\n.col-xs-12 { width: 100%; }\n\n\n// Small grid\n//\n// Columns, offsets, pushes, and pulls for the small device range, from phones\n// to tablets.\n//\n// Note that `.col-sm-12` doesn't get floated on purpose—there's no need since\n// it's full-width.\n\n@media (min-width: $screen-tablet) {\n  .container {\n    max-width: $container-tablet;\n  }\n\n  .col-sm-1,\n  .col-sm-2,\n  .col-sm-3,\n  .col-sm-4,\n  .col-sm-5,\n  .col-sm-6,\n  .col-sm-7,\n  .col-sm-8,\n  .col-sm-9,\n  .col-sm-10,\n  .col-sm-11 {\n    float: left;\n  }\n  .col-sm-1  { width: percentage((1 / $grid-columns)); }\n  .col-sm-2  { width: percentage((2 / $grid-columns)); }\n  .col-sm-3  { width: percentage((3 / $grid-columns)); }\n  .col-sm-4  { width: percentage((4 / $grid-columns)); }\n  .col-sm-5  { width: percentage((5 / $grid-columns)); }\n  .col-sm-6  { width: percentage((6 / $grid-columns)); }\n  .col-sm-7  { width: percentage((7 / $grid-columns)); }\n  .col-sm-8  { width: percentage((8 / $grid-columns)); }\n  .col-sm-9  { width: percentage((9 / $grid-columns)); }\n  .col-sm-10 { width: percentage((10/ $grid-columns)); }\n  .col-sm-11 { width: percentage((11/ $grid-columns)); }\n  .col-sm-12 { width: 100%; }\n\n  // Push and pull columns for source order changes\n  .col-sm-push-1  { left: percentage((1 / $grid-columns)); }\n  .col-sm-push-2  { left: percentage((2 / $grid-columns)); }\n  .col-sm-push-3  { left: percentage((3 / $grid-columns)); }\n  .col-sm-push-4  { left: percentage((4 / $grid-columns)); }\n  .col-sm-push-5  { left: percentage((5 / $grid-columns)); }\n  .col-sm-push-6  { left: percentage((6 / $grid-columns)); }\n  .col-sm-push-7  { left: percentage((7 / $grid-columns)); }\n  .col-sm-push-8  { left: percentage((8 / $grid-columns)); }\n  .col-sm-push-9  { left: percentage((9 / $grid-columns)); }\n  .col-sm-push-10 { left: percentage((10/ $grid-columns)); }\n  .col-sm-push-11 { left: percentage((11/ $grid-columns)); }\n\n  .col-sm-pull-1  { right: percentage((1 / $grid-columns)); }\n  .col-sm-pull-2  { right: percentage((2 / $grid-columns)); }\n  .col-sm-pull-3  { right: percentage((3 / $grid-columns)); }\n  .col-sm-pull-4  { right: percentage((4 / $grid-columns)); }\n  .col-sm-pull-5  { right: percentage((5 / $grid-columns)); }\n  .col-sm-pull-6  { right: percentage((6 / $grid-columns)); }\n  .col-sm-pull-7  { right: percentage((7 / $grid-columns)); }\n  .col-sm-pull-8  { right: percentage((8 / $grid-columns)); }\n  .col-sm-pull-9  { right: percentage((9 / $grid-columns)); }\n  .col-sm-pull-10 { right: percentage((10/ $grid-columns)); }\n  .col-sm-pull-11 { right: percentage((11/ $grid-columns)); }\n\n  // Offsets\n  .col-sm-offset-1  { margin-left: percentage((1 / $grid-columns)); }\n  .col-sm-offset-2  { margin-left: percentage((2 / $grid-columns)); }\n  .col-sm-offset-3  { margin-left: percentage((3 / $grid-columns)); }\n  .col-sm-offset-4  { margin-left: percentage((4 / $grid-columns)); }\n  .col-sm-offset-5  { margin-left: percentage((5 / $grid-columns)); }\n  .col-sm-offset-6  { margin-left: percentage((6 / $grid-columns)); }\n  .col-sm-offset-7  { margin-left: percentage((7 / $grid-columns)); }\n  .col-sm-offset-8  { margin-left: percentage((8 / $grid-columns)); }\n  .col-sm-offset-9  { margin-left: percentage((9 / $grid-columns)); }\n  .col-sm-offset-10 { margin-left: percentage((10/ $grid-columns)); }\n  .col-sm-offset-11 { margin-left: percentage((11/ $grid-columns)); }\n}\n\n\n// Medium grid\n//\n// Columns, offsets, pushes, and pulls for the desktop device range.\n//\n// Note that `.col-md-12` doesn't get floated on purpose—there's no need since\n// it's full-width.\n\n@media (min-width: $screen-desktop) {\n  .container {\n    max-width: $container-desktop;\n  }\n  .col-md-1,\n  .col-md-2,\n  .col-md-3,\n  .col-md-4,\n  .col-md-5,\n  .col-md-6,\n  .col-md-7,\n  .col-md-8,\n  .col-md-9,\n  .col-md-10,\n  .col-md-11 {\n    float: left;\n  }\n  .col-md-1  { width: percentage((1 / $grid-columns)); }\n  .col-md-2  { width: percentage((2 / $grid-columns)); }\n  .col-md-3  { width: percentage((3 / $grid-columns)); }\n  .col-md-4  { width: percentage((4 / $grid-columns)); }\n  .col-md-5  { width: percentage((5 / $grid-columns)); }\n  .col-md-6  { width: percentage((6 / $grid-columns)); }\n  .col-md-7  { width: percentage((7 / $grid-columns)); }\n  .col-md-8  { width: percentage((8 / $grid-columns)); }\n  .col-md-9  { width: percentage((9 / $grid-columns)); }\n  .col-md-10 { width: percentage((10/ $grid-columns)); }\n  .col-md-11 { width: percentage((11/ $grid-columns)); }\n  .col-md-12 { width: 100%; }\n\n  // Push and pull columns for source order changes\n  .col-md-push-0  { left: auto; }\n  .col-md-push-1  { left: percentage((1 / $grid-columns)); }\n  .col-md-push-2  { left: percentage((2 / $grid-columns)); }\n  .col-md-push-3  { left: percentage((3 / $grid-columns)); }\n  .col-md-push-4  { left: percentage((4 / $grid-columns)); }\n  .col-md-push-5  { left: percentage((5 / $grid-columns)); }\n  .col-md-push-6  { left: percentage((6 / $grid-columns)); }\n  .col-md-push-7  { left: percentage((7 / $grid-columns)); }\n  .col-md-push-8  { left: percentage((8 / $grid-columns)); }\n  .col-md-push-9  { left: percentage((9 / $grid-columns)); }\n  .col-md-push-10 { left: percentage((10/ $grid-columns)); }\n  .col-md-push-11 { left: percentage((11/ $grid-columns)); }\n\n  .col-md-pull-0  { right: auto; }\n  .col-md-pull-1  { right: percentage((1 / $grid-columns)); }\n  .col-md-pull-2  { right: percentage((2 / $grid-columns)); }\n  .col-md-pull-3  { right: percentage((3 / $grid-columns)); }\n  .col-md-pull-4  { right: percentage((4 / $grid-columns)); }\n  .col-md-pull-5  { right: percentage((5 / $grid-columns)); }\n  .col-md-pull-6  { right: percentage((6 / $grid-columns)); }\n  .col-md-pull-7  { right: percentage((7 / $grid-columns)); }\n  .col-md-pull-8  { right: percentage((8 / $grid-columns)); }\n  .col-md-pull-9  { right: percentage((9 / $grid-columns)); }\n  .col-md-pull-10 { right: percentage((10/ $grid-columns)); }\n  .col-md-pull-11 { right: percentage((11/ $grid-columns)); }\n\n  // Offsets\n  .col-md-offset-0  { margin-left: 0; }\n  .col-md-offset-1  { margin-left: percentage((1 / $grid-columns)); }\n  .col-md-offset-2  { margin-left: percentage((2 / $grid-columns)); }\n  .col-md-offset-3  { margin-left: percentage((3 / $grid-columns)); }\n  .col-md-offset-4  { margin-left: percentage((4 / $grid-columns)); }\n  .col-md-offset-5  { margin-left: percentage((5 / $grid-columns)); }\n  .col-md-offset-6  { margin-left: percentage((6 / $grid-columns)); }\n  .col-md-offset-7  { margin-left: percentage((7 / $grid-columns)); }\n  .col-md-offset-8  { margin-left: percentage((8 / $grid-columns)); }\n  .col-md-offset-9  { margin-left: percentage((9 / $grid-columns)); }\n  .col-md-offset-10 { margin-left: percentage((10/ $grid-columns)); }\n  .col-md-offset-11 { margin-left: percentage((11/ $grid-columns)); }\n}\n\n\n// Large grid\n//\n// Columns, offsets, pushes, and pulls for the large desktop device range.\n//\n// Note that `.col-lg-12` doesn't get floated on purpose—there's no need since\n// it's full-width.\n\n@media (min-width: $screen-lg-desktop) {\n  .container {\n    max-width: $container-lg-desktop;\n  }\n\n  .col-lg-1,\n  .col-lg-2,\n  .col-lg-3,\n  .col-lg-4,\n  .col-lg-5,\n  .col-lg-6,\n  .col-lg-7,\n  .col-lg-8,\n  .col-lg-9,\n  .col-lg-10,\n  .col-lg-11 {\n    float: left;\n  }\n  .col-lg-1  { width: percentage((1 / $grid-columns)); }\n  .col-lg-2  { width: percentage((2 / $grid-columns)); }\n  .col-lg-3  { width: percentage((3 / $grid-columns)); }\n  .col-lg-4  { width: percentage((4 / $grid-columns)); }\n  .col-lg-5  { width: percentage((5 / $grid-columns)); }\n  .col-lg-6  { width: percentage((6 / $grid-columns)); }\n  .col-lg-7  { width: percentage((7 / $grid-columns)); }\n  .col-lg-8  { width: percentage((8 / $grid-columns)); }\n  .col-lg-9  { width: percentage((9 / $grid-columns)); }\n  .col-lg-10 { width: percentage((10/ $grid-columns)); }\n  .col-lg-11 { width: percentage((11/ $grid-columns)); }\n  .col-lg-12 { width: 100%; }\n\n  // Push and pull columns for source order changes\n  .col-lg-push-0  { left: auto; }\n  .col-lg-push-1  { left: percentage((1 / $grid-columns)); }\n  .col-lg-push-2  { left: percentage((2 / $grid-columns)); }\n  .col-lg-push-3  { left: percentage((3 / $grid-columns)); }\n  .col-lg-push-4  { left: percentage((4 / $grid-columns)); }\n  .col-lg-push-5  { left: percentage((5 / $grid-columns)); }\n  .col-lg-push-6  { left: percentage((6 / $grid-columns)); }\n  .col-lg-push-7  { left: percentage((7 / $grid-columns)); }\n  .col-lg-push-8  { left: percentage((8 / $grid-columns)); }\n  .col-lg-push-9  { left: percentage((9 / $grid-columns)); }\n  .col-lg-push-10 { left: percentage((10/ $grid-columns)); }\n  .col-lg-push-11 { left: percentage((11/ $grid-columns)); }\n\n  .col-lg-pull-0  { right: auto; }\n  .col-lg-pull-1  { right: percentage((1 / $grid-columns)); }\n  .col-lg-pull-2  { right: percentage((2 / $grid-columns)); }\n  .col-lg-pull-3  { right: percentage((3 / $grid-columns)); }\n  .col-lg-pull-4  { right: percentage((4 / $grid-columns)); }\n  .col-lg-pull-5  { right: percentage((5 / $grid-columns)); }\n  .col-lg-pull-6  { right: percentage((6 / $grid-columns)); }\n  .col-lg-pull-7  { right: percentage((7 / $grid-columns)); }\n  .col-lg-pull-8  { right: percentage((8 / $grid-columns)); }\n  .col-lg-pull-9  { right: percentage((9 / $grid-columns)); }\n  .col-lg-pull-10 { right: percentage((10/ $grid-columns)); }\n  .col-lg-pull-11 { right: percentage((11/ $grid-columns)); }\n\n  // Offsets\n  .col-lg-offset-0  { margin-left: 0; }\n  .col-lg-offset-1  { margin-left: percentage((1 / $grid-columns)); }\n  .col-lg-offset-2  { margin-left: percentage((2 / $grid-columns)); }\n  .col-lg-offset-3  { margin-left: percentage((3 / $grid-columns)); }\n  .col-lg-offset-4  { margin-left: percentage((4 / $grid-columns)); }\n  .col-lg-offset-5  { margin-left: percentage((5 / $grid-columns)); }\n  .col-lg-offset-6  { margin-left: percentage((6 / $grid-columns)); }\n  .col-lg-offset-7  { margin-left: percentage((7 / $grid-columns)); }\n  .col-lg-offset-8  { margin-left: percentage((8 / $grid-columns)); }\n  .col-lg-offset-9  { margin-left: percentage((9 / $grid-columns)); }\n  .col-lg-offset-10 { margin-left: percentage((10/ $grid-columns)); }\n  .col-lg-offset-11 { margin-left: percentage((11/ $grid-columns)); }\n}\n"
  },
  {
    "path": "content/scss/bootstrap/_input-groups.scss",
    "content": "//\n// Input groups\n// --------------------------------------------------\n\n// Base styles\n// -------------------------\n.input-group {\n  position: relative; // For dropdowns\n  display: table;\n  border-collapse: separate; // prevent input groups from inheriting border styles from table cells when placed within a table\n\n  // Undo padding and float of grid classes\n  &.col {\n    float: none;\n    padding-left: 0;\n    padding-right: 0;\n  }\n\n  .form-control {\n    width: 100%;\n    margin-bottom: 0;\n  }\n}\n\n// Sizing options\n//\n// Remix the default form control sizing classes into new ones for easier\n// manipulation.\n\n.input-group-lg > .form-control,\n.input-group-lg > .input-group-addon,\n.input-group-lg > .input-group-btn > .btn { @extend .input-lg; }\n.input-group-sm > .form-control,\n.input-group-sm > .input-group-addon,\n.input-group-sm > .input-group-btn > .btn { @extend .input-sm; }\n\n\n// Display as table-cell\n// -------------------------\n.input-group-addon,\n.input-group-btn,\n.input-group .form-control {\n  display: table-cell;\n\n  &:not(:first-child):not(:last-child) {\n    border-radius: 0;\n  }\n}\n// Addon and addon wrapper for buttons\n.input-group-addon,\n.input-group-btn {\n  width: 1%;\n  white-space: nowrap;\n  vertical-align: middle; // Match the inputs\n}\n\n// Text input groups\n// -------------------------\n.input-group-addon {\n  padding: $padding-base-vertical $padding-base-horizontal;\n  font-size: $font-size-base;\n  font-weight: normal;\n  line-height: 1;\n  text-align: center;\n  background-color: $input-group-addon-bg;\n  border: 1px solid $input-group-addon-border-color;\n  border-radius: $border-radius-base;\n\n  // Sizing\n  &.input-sm {\n    padding: $padding-small-vertical $padding-small-horizontal;\n    font-size: $font-size-small;\n    border-radius: $border-radius-small;\n  }\n  &.input-lg {\n    padding: $padding-large-vertical $padding-large-horizontal;\n    font-size: $font-size-large;\n    border-radius: $border-radius-large;\n  }\n\n  // Nuke default margins from checkboxes and radios to vertically center within.\n  input[type=\"radio\"],\n  input[type=\"checkbox\"] {\n    margin-top: 0;\n  }\n}\n\n// Reset rounded corners\n.input-group .form-control:first-child,\n.input-group-addon:first-child,\n.input-group-btn:first-child > .btn,\n.input-group-btn:first-child > .dropdown-toggle,\n.input-group-btn:last-child > .btn:not(:last-child):not(.dropdown-toggle) {\n  @include border-right-radius(0);\n}\n.input-group-addon:first-child {\n  border-right: 0;\n}\n.input-group .form-control:last-child,\n.input-group-addon:last-child,\n.input-group-btn:last-child > .btn,\n.input-group-btn:last-child > .dropdown-toggle,\n.input-group-btn:first-child > .btn:not(:first-child) {\n  @include border-left-radius(0);\n}\n.input-group-addon:last-child {\n  border-left: 0;\n}\n\n// Button input groups\n// -------------------------\n.input-group-btn {\n  position: relative;\n  white-space: nowrap;\n}\n.input-group-btn > .btn {\n  position: relative;\n  // Jankily prevent input button groups from wrapping\n  + .btn {\n    margin-left: -4px;\n  }\n  // Bring the \"active\" button to the front\n  &:hover,\n  &:active {\n    z-index: 2;\n  }\n}\n"
  },
  {
    "path": "content/scss/bootstrap/_jumbotron.scss",
    "content": "//\n// Jumbotron\n// --------------------------------------------------\n\n\n.jumbotron {\n  padding: $jumbotron-padding;\n  margin-bottom: $jumbotron-padding;\n  font-size: ($font-size-base * 1.5);\n  font-weight: 200;\n  line-height: ($line-height-base * 1.5);\n  color: $jumbotron-color;\n  background-color: $jumbotron-bg;\n\n  h1 {\n    line-height: 1;\n    color: $jumbotron-heading-color;\n  }\n  p {\n    line-height: 1.4;\n  }\n\n  .container & {\n    border-radius: $border-radius-large; // Only round corners at higher resolutions if contained in a container\n  }\n\n  @media screen and (min-width: $screen-tablet) {\n    padding-top:    ($jumbotron-padding * 1.6);\n    padding-bottom: ($jumbotron-padding * 1.6);\n\n    .container & {\n      padding-left:  ($jumbotron-padding * 2);\n      padding-right: ($jumbotron-padding * 2);\n    }\n\n    h1 {\n      font-size: ($font-size-base * 4.5);\n    }\n  }\n}\n"
  },
  {
    "path": "content/scss/bootstrap/_labels.scss",
    "content": "//\n// Labels\n// --------------------------------------------------\n\n.label {\n  display: inline;\n  padding: .2em .6em .3em;\n  font-size: 75%;\n  font-weight: bold;\n  line-height: 1;\n  color: $label-color;\n  text-align: center;\n  white-space: nowrap;\n  vertical-align: baseline;\n  border-radius: .25em;\n\n  // Add hover effects, but only for links\n  &[href] {\n    &:hover,\n    &:focus {\n      color: $label-link-hover-color;\n      text-decoration: none;\n      cursor: pointer;\n    }\n  }\n\n  // Empty labels collapse automatically (not available in IE8)\n  &:empty {\n    display: none;\n  }\n}\n\n// Colors\n// Contextual variations (linked labels get darker on :hover)\n\n.label-default {\n  @include label-variant($label-default-bg);\n}\n\n.label-primary {\n  @include label-variant($label-primary-bg);\n}\n\n.label-success {\n  @include label-variant($label-success-bg);\n}\n\n.label-info {\n  @include label-variant($label-info-bg);\n}\n\n.label-warning {\n  @include label-variant($label-warning-bg);\n}\n\n.label-danger {\n  @include label-variant($label-danger-bg);\n}\n"
  },
  {
    "path": "content/scss/bootstrap/_list-group.scss",
    "content": "//\n// List groups\n// --------------------------------------------------\n\n// Base class\n//\n// Easily usable on <ul>, <ol>, or <div>.\n.list-group {\n  // No need to set list-style: none; since .list-group-item is block level\n  margin-bottom: 20px;\n  padding-left: 0; // reset padding because ul and ol\n}\n\n// Individual list items\n// -------------------------\n\n.list-group-item {\n  position: relative;\n  display: block;\n  padding: 10px 15px;\n  // Place the border on the list items and negative margin up for better styling\n  margin-bottom: -1px;\n  background-color: $list-group-bg;\n  border: 1px solid $list-group-border;\n\n  // Round the first and last items\n  &:first-child {\n    @include border-top-radius($list-group-border-radius);\n  }\n  &:last-child {\n    margin-bottom: 0;\n    @include border-bottom-radius($list-group-border-radius);\n  }\n\n  // Align badges within list items\n  > .badge {\n    float: right;\n  }\n  > .badge + .badge {\n    margin-right: 5px;\n  }\n\n  // Active class on item itself, not parent\n  &.active,\n  &.active:hover,\n  &.active:focus {\n    z-index: 2; // Place active items above their siblings for proper border styling\n    color: $list-group-active-color;\n    background-color: $list-group-active-bg;\n    border-color: $list-group-active-border;\n\n    // Force color to inherit for custom content\n    .list-group-item-heading {\n      color: inherit;\n    }\n    .list-group-item-text {\n      color: lighten($list-group-active-bg, 40%);\n    }\n  }\n}\n\n// Linked list items\na.list-group-item {\n  color: $list-group-link-color;\n\n  .list-group-item-heading {\n    color: $list-group-link-heading-color;\n  }\n\n  // Hover state\n  &:hover,\n  &:focus {\n    text-decoration: none;\n    background-color: $list-group-hover-bg;\n  }\n}\n\n// Custom content options\n// -------------------------\n\n.list-group-item-heading {\n  margin-top: 0;\n  margin-bottom: 5px;\n}\n.list-group-item-text {\n  margin-bottom: 0;\n  line-height: 1.3;\n}\n"
  },
  {
    "path": "content/scss/bootstrap/_media.scss",
    "content": "// Media objects\n// Source: http://stubbornella.org/content/?p=497\n// --------------------------------------------------\n\n\n// Common styles\n// -------------------------\n\n// Clear the floats\n.media,\n.media-body {\n  overflow: hidden;\n  zoom: 1;\n}\n\n// Proper spacing between instances of .media\n.media,\n.media .media {\n  margin-top: 15px;\n}\n.media:first-child {\n  margin-top: 0;\n}\n\n// For images and videos, set to block\n.media-object {\n  display: block;\n}\n\n// Reset margins on headings for tighter default spacing\n.media-heading {\n  margin: 0 0 5px;\n}\n\n\n// Media image alignment\n// -------------------------\n\n.media {\n  > .pull-left {\n    margin-right: 10px;\n  }\n  > .pull-right {\n    margin-left: 10px;\n  }\n}\n\n\n// Media list variation\n// -------------------------\n\n// Undo default ul/ol styles\n.media-list {\n  padding-left: 0;\n  list-style: none;\n}\n"
  },
  {
    "path": "content/scss/bootstrap/_mixins.scss",
    "content": "//\n// Mixins\n// --------------------------------------------------\n\n\n// Utilities\n// -------------------------\n\n// Clearfix\n// Source: http://nicolasgallagher.com/micro-clearfix-hack/\n//\n// For modern browsers\n// 1. The space content is one way to avoid an Opera bug when the\n//    contenteditable attribute is included anywhere else in the document.\n//    Otherwise it causes space to appear at the top and bottom of elements\n//    that are clearfixed.\n// 2. The use of `table` rather than `block` is only necessary if using\n//    `:before` to contain the top-margins of child elements.\n@mixin clearfix() {\n  &:before,\n  &:after {\n    content: \" \"; /* 1 */\n    display: table; /* 2 */\n  }\n  &:after {\n    clear: both;\n  }\n}\n\n// Webkit-style focus\n@mixin tab-focus() {\n  // Default\n  outline: none\n  // Webkit\n  //outline: 5px auto -webkit-focus-ring-color;\n  //outline-offset: -2px;\n}\n\n// Center-align a block level element\n@mixin center-block() {\n  display: block;\n  margin-left: auto;\n  margin-right: auto;\n}\n\n// Sizing shortcuts\n@mixin size($width, $height) {\n  width: $width;\n  height: $height;\n}\n@mixin square($size) {\n  @include size($size, $size);\n}\n\n// Placeholder text\n@mixin placeholder($color: $input-color-placeholder) {\n  &:-moz-placeholder            { color: $color; } // Firefox 4-18\n  &::-moz-placeholder           { color: $color; } // Firefox 19+\n  &:-ms-input-placeholder       { color: $color; } // Internet Explorer 10+\n  &::-webkit-input-placeholder  { color: $color; } // Safari and Chrome\n}\n\n// Text overflow\n// Requires inline-block or block for proper styling\n@mixin text-overflow() {\n  overflow: hidden;\n  text-overflow: ellipsis;\n  white-space: nowrap;\n}\n\n// CSS image replacement\n// Source: https://github.com/h5bp/html5-boilerplate/commit/aa0396eae757\n@mixin hide-text() {\n  font: 0/0 a;\n  color: transparent;\n  text-shadow: none;\n  background-color: transparent;\n  border: 0;\n}\n\n\n\n// CSS3 PROPERTIES\n// --------------------------------------------------\n\n// Single side border-radius\n@mixin border-top-radius($radius) {\n  border-top-right-radius: $radius;\n   border-top-left-radius: $radius;\n}\n@mixin border-right-radius($radius) {\n  border-bottom-right-radius: $radius;\n     border-top-right-radius: $radius;\n}\n@mixin border-bottom-radius($radius) {\n  border-bottom-right-radius: $radius;\n   border-bottom-left-radius: $radius;\n}\n@mixin border-left-radius($radius) {\n  border-bottom-left-radius: $radius;\n     border-top-left-radius: $radius;\n}\n\n// Drop shadows\n@mixin box-shadow($shadow...) {\n  -webkit-box-shadow: $shadow; // iOS <4.3 & Android <4.1\n          box-shadow: $shadow;\n}\n\n// Transitions\n@mixin transition($transition...) {\n  -webkit-transition: $transition;\n          transition: $transition;\n}\n@mixin transition-delay($transition-delay) {\n  -webkit-transition-delay: $transition-delay;\n          transition-delay: $transition-delay;\n}\n@mixin transition-duration($transition-duration) {\n  -webkit-transition-duration: $transition-duration;\n          transition-duration: $transition-duration;\n}\n@mixin transition-transform($transition...) {\n  -webkit-transition: -webkit-transform $transition;\n     -moz-transition: -moz-transform $transition;\n       -o-transition: -o-transform $transition;\n          transition: transform $transition;\n}\n\n// Transformations\n@mixin rotate($degrees) {\n  -webkit-transform: rotate($degrees);\n      -ms-transform: rotate($degrees); // IE9+\n          transform: rotate($degrees);\n}\n@mixin scale($ratio) {\n  -webkit-transform: scale($ratio);\n      -ms-transform: scale($ratio); // IE9+\n          transform: scale($ratio);\n}\n@mixin translate($x, $y) {\n  -webkit-transform: translate($x, $y);\n      -ms-transform: translate($x, $y); // IE9+\n          transform: translate($x, $y);\n}\n@mixin skew($x, $y) {\n  -webkit-transform: skew($x, $y);\n      -ms-transform: skewX($x) skewY($y); // See https://github.com/twbs/bootstrap/issues/4885; IE9+\n          transform: skew($x, $y);\n}\n@mixin translate3d($x, $y, $z) {\n  -webkit-transform: translate3d($x, $y, $z);\n          transform: translate3d($x, $y, $z);\n}\n\n// Backface visibility\n// Prevent browsers from flickering when using CSS 3D transforms.\n// Default value is `visible`, but can be changed to `hidden`\n// See git pull https://github.com/dannykeane/bootstrap.git backface-visibility for examples\n@mixin backface-visibility($visibility){\n  -webkit-backface-visibility: $visibility;\n     -moz-backface-visibility: $visibility;\n          backface-visibility: $visibility;\n}\n\n// Box sizing\n@mixin box-sizing($boxmodel) {\n  -webkit-box-sizing: $boxmodel;\n     -moz-box-sizing: $boxmodel;\n          box-sizing: $boxmodel;\n}\n\n// User select\n// For selecting text on the page\n@mixin user-select($select) {\n  -webkit-user-select: $select;\n     -moz-user-select: $select;\n      -ms-user-select: $select; // IE10+\n       -o-user-select: $select;\n          user-select: $select;\n}\n\n// Resize anything\n@mixin resizable($direction) {\n  resize: $direction; // Options: horizontal, vertical, both\n  overflow: auto; // Safari fix\n}\n\n// CSS3 Content Columns\n@mixin content-columns($column-count, $column-gap: $grid-gutter-width) {\n  -webkit-column-count: $column-count;\n     -moz-column-count: $column-count;\n          column-count: $column-count;\n  -webkit-column-gap: $column-gap;\n     -moz-column-gap: $column-gap;\n          column-gap: $column-gap;\n}\n\n// Optional hyphenation\n@mixin hyphens($mode: auto) {\n  word-wrap: break-word;\n  -webkit-hyphens: $mode;\n     -moz-hyphens: $mode;\n      -ms-hyphens: $mode; // IE10+\n       -o-hyphens: $mode;\n          hyphens: $mode;\n}\n\n// Opacity\n@mixin opacity($opacity) {\n  opacity: $opacity;\n  // IE8 filter\n  $opacity-ie: ($opacity * 100);\n  filter: alpha(opacity=$opacity-ie);\n}\n\n\n\n// GRADIENTS\n// --------------------------------------------------\n\n\n\n// Horizontal gradient, from left to right\n//\n// Creates two color stops, start and end, by specifying a color and position for each color stop.\n// Color stops are not available in IE9 and below.\n@mixin gradient-horizontal($start-color: #555, $end-color: #333, $start-percent: 0%, $end-percent: 100%) {\n  background-image: -webkit-gradient(linear, $start-percent top, $end-percent top, from($start-color), to($end-color)); // Safari 4+, Chrome 2+\n  background-image: -webkit-linear-gradient(left, color-stop($start-color $start-percent), color-stop($end-color $end-percent)); // Safari 5.1+, Chrome 10+\n  background-image: -moz-linear-gradient(left, $start-color $start-percent, $end-color $end-percent); // FF 3.6+\n  background-image:  linear-gradient(to right, $start-color $start-percent, $end-color $end-percent); // Standard, IE10\n  background-repeat: repeat-x;\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#{ie-hex-str($start-color)}', endColorstr='#{ie-hex-str($end-color)}', GradientType=1); // IE9 and down\n}\n\n// Vertical gradient, from top to bottom\n//\n// Creates two color stops, start and end, by specifying a color and position for each color stop.\n// Color stops are not available in IE9 and below.\n@mixin gradient-vertical($start-color: #555, $end-color: #333, $start-percent: 0%, $end-percent: 100%) {\n  background-image: -webkit-gradient(linear, left $start-percent, left $end-percent, from($start-color), to($end-color)); // Safari 4+, Chrome 2+\n  background-image: -webkit-linear-gradient(top, $start-color, $start-percent, $end-color, $end-percent); // Safari 5.1+, Chrome 10+\n  background-image:  -moz-linear-gradient(top, $start-color $start-percent, $end-color $end-percent); // FF 3.6+\n  background-image: linear-gradient(to bottom, $start-color $start-percent, $end-color $end-percent); // Standard, IE10\n  background-repeat: repeat-x;\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#{ie-hex-str($start-color)}', endColorstr='#{ie-hex-str($end-color)}', GradientType=0); // IE9 and down\n}\n\n@mixin gradient-directional($start-color: #555, $end-color: #333, $deg: 45deg) {\n  background-repeat: repeat-x;\n  background-image: -webkit-linear-gradient($deg, $start-color, $end-color); // Safari 5.1+, Chrome 10+\n  background-image: -moz-linear-gradient($deg, $start-color, $end-color); // FF 3.6+\n  background-image: linear-gradient($deg, $start-color, $end-color); // Standard, IE10\n}\n@mixin gradient-horizontal-three-colors($start-color: #00b3ee, $mid-color: #7a43b6, $color-stop: 50%, $end-color: #c3325f) {\n  background-image: -webkit-gradient(left, linear, 0 0, 0 100%, from($start-color), color-stop($color-stop, $mid-color), to($end-color));\n  background-image: -webkit-linear-gradient(left, $start-color, $mid-color $color-stop, $end-color);\n  background-image: -moz-linear-gradient(left, $start-color, $mid-color $color-stop, $end-color);\n  background-image: linear-gradient(to right, $start-color, $mid-color $color-stop, $end-color);\n  background-repeat: no-repeat;\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#{ie-hex-str($start-color)}', endColorstr='#{ie-hex-str($end-color)}', GradientType=1); // IE9 and down, gets no color-stop at all for proper fallback\n}\n@mixin gradient-vertical-three-colors($start-color: #00b3ee, $mid-color: #7a43b6, $color-stop: 50%, $end-color: #c3325f) {\n  background-image: -webkit-gradient(linear, 0 0, 0 100%, from($start-color), color-stop($color-stop, $mid-color), to($end-color));\n  background-image: -webkit-linear-gradient($start-color, $mid-color $color-stop, $end-color);\n  background-image: -moz-linear-gradient(top, $start-color, $mid-color $color-stop, $end-color);\n  background-image: linear-gradient($start-color, $mid-color $color-stop, $end-color);\n  background-repeat: no-repeat;\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#{ie-hex-str($start-color)}', endColorstr='#{ie-hex-str($end-color)}', GradientType=0); // IE9 and down, gets no color-stop at all for proper fallback\n}\n@mixin gradient-radial($inner-color: #555, $outer-color: #333) {\n  background-image: -webkit-gradient(radial, center center, 0, center center, 460, from($inner-color), to($outer-color));\n  background-image: -webkit-radial-gradient(circle, $inner-color, $outer-color);\n  background-image: -moz-radial-gradient(circle, $inner-color, $outer-color);\n  background-image: radial-gradient(circle, $inner-color, $outer-color);\n  background-repeat: no-repeat;\n}\n@mixin gradient-striped($color: #555, $angle: 45deg) {\n  background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(.25, rgba(255,255,255,.15)), color-stop(.25, transparent), color-stop(.5, transparent), color-stop(.5, rgba(255,255,255,.15)), color-stop(.75, rgba(255,255,255,.15)), color-stop(.75, transparent), to(transparent));\n  background-image: -webkit-linear-gradient($angle, 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);\n  background-image: -moz-linear-gradient($angle, 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);\n  background-image: linear-gradient($angle, 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);\n}\n\n// Reset filters for IE\n//\n// When you need to remove a gradient background, do not forget to use this to reset\n// the IE filter for IE9 and below.\n@mixin reset-filter() {\n  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n}\n\n\n\n// Retina images\n//\n// Short retina mixin for setting background-image and -size\n\n@mixin img-retina($file-1x, $file-2x, $width-1x, $height-1x) {\n  background-image: url(\"#{$file-1x}\");\n\n  @media\n  only screen and (-webkit-min-device-pixel-ratio: 2),\n  only screen and (   min--moz-device-pixel-ratio: 2),\n  only screen and (     -o-min-device-pixel-ratio: 2/1),\n  only screen and (        min-device-pixel-ratio: 2),\n  only screen and (                min-resolution: 192dpi),\n  only screen and (                min-resolution: 2dppx) {\n    background-image: url(\"#{$file-2x}\");\n    background-size: $width-1x $height-1x;\n  }\n}\n\n\n// Responsive image\n//\n// Keep images from scaling beyond the width of their parents.\n\n@mixin img-responsive($display: block) {\n  display: $display;\n  max-width: 100%; // Part 1: Set a maximum relative to the parent\n  height: auto; // Part 2: Scale the height according to the width, otherwise you get stretching\n}\n\n\n// COMPONENT MIXINS\n// --------------------------------------------------\n\n// Horizontal dividers\n// -------------------------\n// Dividers (basically an hr) within dropdowns and nav lists\n@mixin nav-divider($color: #e5e5e5) {\n  height: 1px;\n  margin: (($line-height-computed / 2) - 1) 0;\n  overflow: hidden;\n  background-color: $color;\n}\n\n// Panels\n// -------------------------\n@mixin panel-variant($border, $heading-text-color, $heading-bg-color, $heading-border) {\n  border-color: $border;\n  & > .panel-heading {\n    color: $heading-text-color;\n    background-color: $heading-bg-color;\n    border-color: $heading-border;\n    + .panel-collapse .panel-body {\n      border-top-color: $border;\n    }\n  }\n  & > .panel-footer {\n    + .panel-collapse .panel-body {\n      border-bottom-color: $border;\n    }\n  }\n}\n\n// Alerts\n// -------------------------\n@mixin alert-variant($background, $border, $text-color) {\n  background-color: $background;\n  border-color: $border;\n  color: $text-color;\n  hr {\n    border-top-color: darken($border, 5%);\n  }\n  .alert-link {\n    color: darken($text-color, 10%);\n  }\n}\n\n// Tables\n// -------------------------\n@mixin table-row-variant($state, $background, $border) {\n  // Exact selectors below required to override `.table-striped` and prevent\n  // inheritance to nested tables.\n  .table > thead > tr,\n  .table > tbody > tr,\n  .table > tfoot > tr {\n    > td.#{$state},\n    > th.#{$state},\n    &.#{$state} > td,\n    &.#{$state} > th {\n      background-color: $background;\n      border-color: $border;\n    }\n  }\n\n  // Hover states for `.table-hover`\n  // Note: this is not available for cells or rows within `thead` or `tfoot`.\n  .table-hover > tbody > tr {\n    > td.#{$state}:hover,\n    > th.#{$state}:hover,\n    &.#{$state}:hover > td {\n      background-color: darken($background, 5%);\n      border-color: darken($border, 5%);\n    }\n  }\n}\n\n// Button variants\n// -------------------------\n// Easily pump out default styles, as well as :hover, :focus, :active,\n// and disabled options for all buttons\n@mixin button-variant($color, $background, $border) {\n  color: $color;\n  background-color: $background;\n  transition: background-color .1s ease-in-out;\n\n  &:hover,\n  &:focus,\n  &:active,\n  &.active {\n    color: $color;\n    background-color: darken($background, 8%);\n  }\n  .open & { &.dropdown-toggle {\n    color: $color;\n    background-color: darken($background, 8%);\n        border-color: darken($border, 12%);\n  } }\n  &:active,\n  &.active {\n    background-image: none;\n  }\n  .open & { &.dropdown-toggle {\n    background-image: none;\n  } }\n  &.disabled,\n  &[disabled],\n  fieldset[disabled] & {\n    &,\n    &:hover,\n    &:focus,\n    &:active,\n    &.active {\n      background-color: $background;\n          border-color: $border\n    }\n  }\n}\n\n// Button sizes\n// -------------------------\n@mixin button-size($padding-vertical, $padding-horizontal, $font-size, $line-height, $border-radius) {\n  padding: $padding-vertical $padding-horizontal;\n  font-size: $font-size;\n  line-height: $line-height;\n  border-radius: $border-radius;\n}\n\n// Pagination\n// -------------------------\n@mixin pagination-size($padding-vertical, $padding-horizontal, $font-size, $border-radius) {\n  > li {\n    > a,\n    > span {\n      padding: $padding-vertical $padding-horizontal;\n      font-size: $font-size;\n    }\n    &:first-child {\n      > a,\n      > span {\n        @include border-left-radius($border-radius);\n      }\n    }\n    &:last-child {\n      > a,\n      > span {\n        @include border-right-radius($border-radius);\n      }\n    }\n  }\n}\n\n// Labels\n// -------------------------\n@mixin label-variant($color) {\n  background-color: $color;\n  &[href] {\n    &:hover,\n    &:focus {\n      background-color: darken($color, 10%);\n    }\n  }\n}\n\n// Navbar vertical align\n// -------------------------\n// Vertically center elements in the navbar.\n// Example: an element has a height of 30px, so write out `.navbar-vertical-align(30px);` to calculate the appropriate top margin.\n@mixin navbar-vertical-align($element-height) {\n  margin-top: (($navbar-height - $element-height) / 2);\n  margin-bottom: (($navbar-height - $element-height) / 2);\n}\n\n// Progress bars\n// -------------------------\n@mixin progress-bar-variant($color) {\n  background-color: $color;\n  .progress-striped & {\n    @include gradient-striped($color);\n  }\n}\n\n// Responsive utilities\n// -------------------------\n// More easily include all the states for responsive-utilities.less.\n// $parent hack because sass doesn't support tr& (without space)\n@mixin responsive-visibility($parent) {\n  #{$parent} { display: block !important; }\n  tr#{$parent} { display: table-row !important; }\n  th#{$parent},\n  td#{$parent} { display: table-cell !important; }\n}\n\n@mixin responsive-invisibility($parent) {\n  #{$parent} { display: none !important; }\n  tr#{$parent} { display: none !important; }\n  th#{$parent},\n  td#{$parent} { display: none !important; }\n}\n\n// Grid System\n// -----------\n\n// Centered container element\n@mixin container-fixed() {\n  margin-right: auto;\n  margin-left: auto;\n  padding-left:  ($grid-gutter-width / 2);\n  padding-right: ($grid-gutter-width / 2);\n  @include clearfix();\n}\n\n// Creates a wrapper for a series of columns\n@mixin make-row($gutter: $grid-gutter-width) {\n  margin-left:  ($gutter / -2);\n  margin-right: ($gutter / -2);\n  @include clearfix();\n}\n\n// Generate the extra small columns\n@mixin make-xs-column($columns, $gutter: $grid-gutter-width) {\n  position: relative;\n  float: left;\n  width: percentage(($columns / $grid-columns));\n  // Prevent columns from collapsing when empty\n  min-height: 1px;\n  // Inner gutter via padding\n  padding-left:  ($gutter / 2);\n  padding-right: ($gutter / 2);\n}\n\n// Generate the small columns\n@mixin make-sm-column($columns, $gutter: $grid-gutter-width) {\n  position: relative;\n  // Prevent columns from collapsing when empty\n  min-height: 1px;\n  // Inner gutter via padding\n  padding-left:  ($gutter / 2);\n  padding-right: ($gutter / 2);\n\n  // Calculate width based on number of columns available\n  @media (min-width: $screen-sm) {\n    float: left;\n    width: percentage(($columns / $grid-columns));\n  }\n}\n\n// Generate the small column offsets\n@mixin make-sm-column-offset($columns) {\n  @media (min-width: $screen-sm) {\n    margin-left: percentage(($columns / $grid-columns));\n  }\n}\n@mixin make-sm-column-push($columns) {\n  @media (min-width: $screen-sm) {\n    left: percentage(($columns / $grid-columns));\n  }\n}\n@mixin make-sm-column-pull($columns) {\n  @media (min-width: $screen-sm) {\n    right: percentage(($columns / $grid-columns));\n  }\n}\n\n// Generate the medium columns\n@mixin make-md-column($columns, $gutter: $grid-gutter-width) {\n  position: relative;\n  // Prevent columns from collapsing when empty\n  min-height: 1px;\n  // Inner gutter via padding\n  padding-left:  ($gutter / 2);\n  padding-right: ($gutter / 2);\n\n  // Calculate width based on number of columns available\n  @media (min-width: $screen-md) {\n    float: left;\n    width: percentage(($columns / $grid-columns));\n  }\n}\n\n// Generate the large column offsets\n@mixin make-md-column-offset($columns) {\n  @media (min-width: $screen-md) {\n    margin-left: percentage(($columns / $grid-columns));\n  }\n}\n@mixin make-md-column-push($columns) {\n  @media (min-width: $screen-md) {\n    left: percentage(($columns / $grid-columns));\n  }\n}\n@mixin make-md-column-pull($columns) {\n  @media (min-width: $screen-md) {\n    right: percentage(($columns / $grid-columns));\n  }\n}\n\n// Generate the large columns\n@mixin make-lg-column($columns, $gutter: $grid-gutter-width) {\n  position: relative;\n  // Prevent columns from collapsing when empty\n  min-height: 1px;\n  // Inner gutter via padding\n  padding-left:  ($gutter / 2);\n  padding-right: ($gutter / 2);\n\n  // Calculate width based on number of columns available\n  @media (min-width: $screen-lg) {\n    float: left;\n    width: percentage(($columns / $grid-columns));\n  }\n}\n\n// Generate the large column offsets\n@mixin make-lg-column-offset($columns) {\n  @media (min-width: $screen-lg) {\n    margin-left: percentage(($columns / $grid-columns));\n  }\n}\n@mixin make-lg-column-push($columns) {\n  @media (min-width: $screen-lg) {\n    left: percentage(($columns / $grid-columns));\n  }\n}\n@mixin make-lg-column-pull($columns) {\n  @media (min-width: $screen-lg) {\n    right: percentage(($columns / $grid-columns));\n  }\n}\n\n\n// Form validation states\n//\n// Used in forms.less to generate the form validation CSS for warnings, errors,\n// and successes.\n\n@mixin form-control-validation($text-color: #555, $border-color: #ccc, $background-color: #f5f5f5) {\n  // Color the label and help text\n  .help-block,\n  .control-label {\n    color: $text-color;\n  }\n  // Set the border and box shadow on specific inputs to match\n  .form-control {\n    border-color: $border-color;\n    @include box-shadow(inset 0 1px 1px rgba(0,0,0,.075)); // Redeclare so transitions work\n    &:focus {\n      border-color: darken($border-color, 10%);\n      $shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 6px lighten($border-color, 20%);\n      @include box-shadow($shadow);\n    }\n  }\n  // Set validation states also for addons\n  .input-group-addon {\n    color: $text-color;\n    border-color: $border-color;\n    background-color: $background-color;\n  }\n}\n\n// Form control focus state\n//\n// Generate a customized focus state and for any input with the specified color,\n// which defaults to the `$input-focus-border` variable.\n//\n// We highly encourage you to not customize the default value, but instead use\n// this to tweak colors on an as-needed basis. This aesthetic change is based on\n// WebKit's default styles, but applicable to a wider range of browsers. Its\n// usability and accessibility should be taken into account with any change.\n//\n// Example usage: change the default blue border and shadow to white for better\n// contrast against a dark gray background.\n\n@mixin form-control-focus($color: $input-border-focus) {\n  $color-rgba: rgba(red($color), green($color), blue($color), .6);\n  &:focus {\n    border-color: $color;\n    outline: 0;\n    @include box-shadow(inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px $color-rgba);\n  }\n}\n\n// Form control sizing\n//\n// Relative text size, padding, and border-radii changes for form controls. For\n// horizontal sizing, wrap controls in the predefined grid classes. `<select>`\n// element gets special love because it's special, and that's a fact!\n\n@mixin input-size($parent, $input-height, $padding-vertical, $padding-horizontal, $font-size, $line-height, $border-radius) {\n  #{$parent} { height: $input-height;\n  padding: $padding-vertical $padding-horizontal;\n  font-size: $font-size;\n  line-height: $line-height;\n  border-radius: $border-radius; }\n  select#{$parent} {\n    height: $input-height;\n    line-height: $input-height;\n  }\n\n  textarea#{$parent} {\n    height: auto;\n  }\n}\n"
  },
  {
    "path": "content/scss/bootstrap/_modals.scss",
    "content": "//\n// Modals\n// --------------------------------------------------\n\n// .modal-open      - body class for killing the scroll\n// .modal           - container to scroll within\n// .modal-dialog    - positioning shell for the actual modal\n// .modal-content   - actual modal w/ bg and corners and shit\n\n// Kill the scroll on the body\n.modal-open {\n  overflow: hidden;\n\n\n  // Account for hiding of scrollbar\n  \n  .navbar-fixed-top,\n  .navbar-fixed-bottom {\n    margin-right: 15px\n  }\n}\n\nbody.modal-open {\n  margin-right: 15px\n}\n\n// Container that the modal scrolls within\n.modal {\n  display: none;\n  overflow: auto;\n  overflow-y: scroll;\n  position: fixed;\n  top: 0;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  z-index: $zindex-modal-background;\n\n  // When fading in the modal, animate it to slide down\n  &.fade .modal-dialog {\n    @include translate(0, -25%);\n    @include transition-transform(0.3s ease-out);\n  }\n  &.in .modal-dialog { @include translate(0, 0)}\n}\n\n// Shell div to position the modal with bottom padding\n.modal-dialog {\n  margin-left: auto;\n  margin-right: auto;\n  width: auto;\n  padding: 10px;\n  z-index: ($zindex-modal-background + 10);\n}\n\n// Actual modal\n.modal-content {\n  position: relative;\n  background-color: $modal-content-bg;\n  border: 1px solid $modal-content-fallback-border-color; //old browsers fallback (ie8 etc)\n  border: 1px solid $modal-content-border-color;\n  border-radius: $border-radius-large;\n  @include box-shadow(0 3px 9px rgba(0,0,0,.5));\n  background-clip: padding-box;\n  // Remove focus outline from opened modal\n  outline: none;\n}\n\n// Modal background\n.modal-backdrop {\n  position: fixed;\n  top: 0;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  z-index: ($zindex-modal-background - 10);\n  background-color: $modal-backdrop-bg;\n  // Fade for backdrop\n  &.fade { @include opacity(0); }\n  &.in { @include opacity(.5); }\n}\n\n// Modal header\n// Top section of the modal w/ title and dismiss\n.modal-header {\n  padding: $modal-title-padding;\n  border-bottom: 1px solid $modal-header-border-color;\n  min-height: ($modal-title-padding + $modal-title-line-height);\n}\n// Close icon\n.modal-header .close {\n  margin-top: -2px;\n}\n\n// Title text within header\n.modal-title {\n  margin: 0;\n  line-height: $modal-title-line-height;\n}\n\n// Modal body\n// Where all modal content resides (sibling of .modal-header and .modal-footer)\n.modal-body {\n  position: relative;\n  padding: $modal-inner-padding;\n}\n\n// Footer (for actions)\n.modal-footer {\n  margin-top: 15px;\n  padding: ($modal-inner-padding - 1) $modal-inner-padding $modal-inner-padding;\n  text-align: right; // right align buttons\n  border-top: 1px solid $modal-footer-border-color;\n  @include clearfix(); // clear it in case folks use .pull-* classes on buttons\n\n  // Properly space out buttons\n  .btn + .btn {\n    margin-left: 5px;\n    margin-bottom: 0; // account for input[type=\"submit\"] which gets the bottom margin like all other inputs\n  }\n  // but override that for button groups\n  .btn-group .btn + .btn {\n    margin-left: -1px;\n  }\n  // and override it for block buttons as well\n  .btn-block + .btn-block {\n    margin-left: 0;\n  }\n}\n\n// Scale up the modal\n@media screen and (min-width: $screen-tablet) {\n\n  .modal-dialog {\n    left: 50%;\n    right: auto;\n    width: 600px;\n    padding-top: 30px;\n    padding-bottom: 30px;\n  }\n  .modal-content {\n    @include box-shadow(0 5px 15px rgba(0,0,0,.5));\n  }\n\n}\n"
  },
  {
    "path": "content/scss/bootstrap/_navbar.scss",
    "content": "//\n// Navbars\n// --------------------------------------------------\n\n\n// Wrapper and base class\n//\n// Provide a static navbar from which we expand to create full-width, fixed, and\n// other navbar variations.\n\n.navbar {\n  position: relative;\n  z-index: $zindex-navbar;\n  min-height: $navbar-height; // Ensure a navbar always shows (e.g., without a .navbar-brand in collapsed mode)\n  margin-bottom: $navbar-margin-bottom;\n  border: 0;\n\n  // Prevent floats from breaking the navbar\n  @include clearfix();\n}\n\n\n// Navbar heading\n//\n// Groups `.navbar-brand` and `.navbar-toggle` into a single component for easy\n// styling of responsive aspects.\n\n.navbar-header {\n  @include clearfix();\n\n  @media (min-width: $grid-float-breakpoint) {\n    float: left;\n  }\n}\n\n\n// Navbar collapse (body)\n//\n// Group your navbar content into this for easy collapsing and expanding across\n// various device sizes. By default, this content is collapsed when <768px, but\n// will expand past that for a horizontal display.\n//\n// To start (on mobile devices) the navbar links, forms, and buttons are stacked\n// vertically and include a `max-height` to overflow in case you have too much\n// content for the user's viewport.\n\n.navbar-collapse {\n  background-color: #f7f7f7;\n  max-height: 340px;\n  overflow-x: visible;\n  padding-right: $navbar-padding-horizontal;\n  padding-left:  $navbar-padding-horizontal;\n  border-top: 1px solid transparent;\n  border-bottom: 1px solid transparent;\n  box-shadow: inset 0 1px 0 rgba(255,255,255,.1);\n  @include clearfix();\n  -webkit-overflow-scrolling: touch;\n\n  &.in {\n    overflow-y: auto;\n  }\n\n  @media (min-width: $grid-float-breakpoint) {\n    width: auto;\n    border-top: 0;\n    border-bottom: 0;\n    background-color: transparent;\n    box-shadow: none;\n\n    &.collapse {\n      display: block !important;\n      height: auto !important;\n      padding-bottom: 0; // Override default setting\n      overflow: visible !important;\n    }\n\n    &.in {\n      overflow-y: visible;\n    }\n\n    // Account for first and last children spacing\n    .navbar-nav.navbar-left:first-child {\n      margin-left: -$navbar-padding-horizontal;\n    }\n    .navbar-nav.navbar-right:last-child {\n      margin-right: -$navbar-padding-horizontal;\n    }\n    .navbar-text:last-child {\n      margin-right: 0;\n    }\n  }\n}\n\n\n// Both navbar header and collapse\n//\n// When a container is present, change the behavior of the header and collapse.\n\n.container > .navbar-header,\n.container > .navbar-collapse {\n  margin-right: -$navbar-padding-horizontal;\n  margin-left:  -$navbar-padding-horizontal;\n\n  @media (min-width: $grid-float-breakpoint) {\n    margin-right: 0;\n    margin-left:  0;\n  }\n}\n\n\n//\n// Navbar alignment options\n//\n// Display the navbar across the entirity of the page or fixed it to the top or\n// bottom of the page.\n\n// Static top (unfixed, but 100% wide) navbar\n.navbar-static-top {\n  border-width: 0;\n  @media (min-width: $grid-float-breakpoint) {\n    border-radius: 0;\n  }\n}\n\n// Fix the top/bottom navbars when screen real estate supports it\n.navbar-fixed-top,\n.navbar-fixed-bottom {\n  position: fixed;\n  right: 0;\n  left: 0;\n  border-width: 0;\n\n  // Undo the rounded corners\n  @media (min-width: $grid-float-breakpoint) {\n    border-radius: 0;\n  }\n}\n.navbar-fixed-top {\n  z-index: $zindex-navbar-fixed;\n  top: 0;\n}\n.navbar-fixed-bottom {\n  bottom: 0;\n  margin-bottom: 0; // override .navbar defaults\n}\n\n\n// Brand/project name\n\n.navbar-brand {\n  float: left;\n  padding: 15px 0 0 10px;\n  opacity: 0.7;\n  &:hover,\n  &:focus {\n    opacity: 1;\n    text-decoration: none;\n  }\n\n  @media (min-width: $grid-float-breakpoint) {\n    .navbar > .container & {\n      margin-left: -$navbar-padding-horizontal;\n    }\n  }\n}\n\n\n// Navbar toggle\n//\n// Custom button for toggling the `.navbar-collapse`, powered by the collapse\n// JavaScript plugin.\n\n.navbar-toggle {\n  position: relative;\n  float: right;\n  margin-right: $navbar-padding-horizontal;\n  padding: 9px 10px;\n  @include navbar-vertical-align(34px);\n  background-color: transparent;\n  border: 1px solid transparent;\n\n  // Bars\n  .icon-bar {\n    display: block;\n    width: 22px;\n    height: 2px;\n    border-radius: 1px;\n  }\n  .icon-bar + .icon-bar {\n    margin-top: 4px;\n  }\n\n  @media (min-width: $grid-float-breakpoint) {\n    display: none;\n  }\n}\n\n\n// Navbar nav links\n//\n// Builds on top of the `.nav` components with it's own modifier class to make\n// the nav the full height of the horizontal nav (above 768px).\n\n.navbar-nav {\n  margin: ($navbar-padding-vertical / 2) (-$navbar-padding-horizontal);\n  font-size: 14px;\n  > li > a {\n    padding-top:    10px;\n    padding-bottom: 10px;\n    line-height: $line-height-computed;\n  }\n\n  @media (max-width: $screen-xs-max) {\n    // Dropdowns get custom display when collapsed\n    .open .dropdown-menu {\n      position: static;\n      float: none;\n      width: auto;\n      margin-top: 0;\n      background-color: transparent;\n      border: 0;\n      box-shadow: none;\n      > li > a,\n      .dropdown-header {\n        padding: 5px 15px 5px 25px;\n      }\n      > li > a {\n        line-height: $line-height-computed;\n        &:hover,\n        &:focus {\n          background-image: none;\n        }\n      }\n    }\n  }\n\n  // Uncollapse the nav\n  @media (min-width: $grid-float-breakpoint) {\n    float: left;\n    margin: 0;\n\n    > li {\n      float: left;\n      > a {\n        padding-top: (($navbar-height - $line-height-computed) / 2);\n        padding-bottom: (($navbar-height - $line-height-computed) / 2);\n      }\n    }\n  }\n\n}\n\n\n// Component alignment\n//\n// Repurpose the pull utilities as their own navbar utilities to avoid specifity\n// issues with parents and chaining. Only do this when the navbar is uncollapsed\n// though so that navbar contents properly stack and align in mobile.\n\n@media (min-width: $grid-float-breakpoint) {\n  .navbar-left {\n    float: left !important;\n  }\n  .navbar-right {\n    float: right !important;\n  }\n}\n\n\n// Navbar form\n//\n// Extension of the `.form-inline` with some extra flavor for optimum display in\n// our navbars.\n\n.navbar-form {\n  margin-left: -$navbar-padding-horizontal;\n  margin-right: -$navbar-padding-horizontal;\n  padding: 10px $navbar-padding-horizontal;\n  border-top: 1px solid transparent;\n  border-bottom: 1px solid transparent;\n  $shadow: inset 0 1px 0 rgba(255,255,255,.1), 0 1px 0 rgba(255,255,255,.1);\n  @include box-shadow($shadow);\n\n  // Mixin behavior for optimum display\n  @extend .form-inline;\n\n  .form-group {\n    @media (max-width: $screen-xs-max) {\n      margin-bottom: 5px;\n    }\n  }\n\n  // Vertically center in expanded, horizontal navbar\n  @include navbar-vertical-align($input-height-base);\n\n  // Undo 100% width for pull classes\n  @media (min-width: $grid-float-breakpoint) {\n    width: auto;\n    border: 0;\n    margin-left: 0;\n    margin-right: 0;\n    padding-top: 0;\n    padding-bottom: 0;\n    @include box-shadow(none);\n  }\n}\n\n\n// Dropdown menus\n\n// Menu position and menu carets\n.navbar-nav > li > .dropdown-menu {\n  margin-top: 0;\n  @include border-top-radius(0);\n}\n// Menu position and menu caret support for dropups via extra dropup class\n.navbar-fixed-bottom .navbar-nav > li > .dropdown-menu {\n  @include border-bottom-radius(0);\n}\n\n// Right aligned menus need alt position\n.navbar-nav.pull-right > li > .dropdown-menu,\n.navbar-nav > li > .dropdown-menu.pull-right {\n  left: auto;\n  right: 0;\n}\n\n\n// Buttons in navbars\n//\n// Vertically center a button within a navbar (when *not* in a form).\n\n.navbar-btn {\n  @include navbar-vertical-align($input-height-base);\n}\n\n\n// Text in navbars\n//\n// Add a class to make any element properly align itself vertically within the navbars.\n\n.navbar-text {\n  float: left;\n  @include navbar-vertical-align($line-height-computed);\n\n  @media (min-width: $grid-float-breakpoint) {\n    margin-left: $navbar-padding-horizontal;\n    margin-right: $navbar-padding-horizontal;\n  }\n}\n\n// Alternate navbars\n// --------------------------------------------------\n\n// Default navbar\n.navbar-default {\n  /*background-color: $navbar-default-bg;\n  border-color: $navbar-default-border;*/\n  font-family: $font-family-medium;\n  font-weight: normal;\n  -webkit-font-smoothing: antialiased;\n\n  .navbar-brand {\n    color: $navbar-default-brand-color;\n    &:hover,\n    &:focus {\n      color: $navbar-default-brand-hover-color;\n      background-color: $navbar-default-brand-hover-bg;\n    }\n  }\n\n  .navbar-text {\n    color: $navbar-default-color;\n  }\n\n  .navbar-nav {\n    > li > a {\n      color: $navbar-default-link-color;\n      padding-left: 0 !important;\n      padding-right: 0 !important;\n      margin: 0 30px;\n\n      &:hover,\n      &:focus {\n        color: $navbar-default-link-hover-color;\n        background-color: $navbar-default-link-hover-bg;\n      }\n    }\n    > .active > a {\n      &,\n      &:hover,\n      &:focus {\n        color: $navbar-default-link-active-color;\n        background-color: $navbar-default-link-active-bg;\n      }\n    }\n    > .disabled > a {\n      &,\n      &:hover,\n      &:focus {\n        color: $navbar-default-link-disabled-color;\n        background-color: $navbar-default-link-disabled-bg;\n      }\n    }\n  }\n\n  .navbar-toggle {\n    border-color: $navbar-default-toggle-border-color;\n    &:hover,\n    &:focus {\n      background-color: $navbar-default-toggle-hover-bg;\n    }\n    .icon-bar {\n      background-color: $navbar-default-toggle-icon-bar-bg;\n    }\n  }\n\n  .navbar-collapse,\n  .navbar-form {\n    border-color: darken($navbar-default-bg, 7%);\n  }\n\n  // Dropdown menu items and carets\n  .navbar-nav {\n    // Caret should match text color on hover\n    > .dropdown > a:hover .caret,\n    > .dropdown > a:focus .caret {\n      border-top-color: $navbar-default-link-hover-color;\n      border-bottom-color: $navbar-default-link-hover-color;\n    }\n\n    // Remove background color from open dropdown\n    > .open > a {\n      &,\n      &:hover,\n      &:focus {\n        background-color: $navbar-default-link-active-bg;\n        color: $navbar-default-link-active-color;\n        .caret {\n          border-top-color: $navbar-default-link-active-color;\n          border-bottom-color: $navbar-default-link-active-color;\n        }\n      }\n    }\n    > .dropdown > a .caret {\n      border-top-color: $navbar-default-link-color;\n      border-bottom-color: $navbar-default-link-color;\n    }\n\n\n    @media (max-width: $screen-xs-max) {\n      // Dropdowns get custom display when collapsed\n      .open .dropdown-menu {\n        > li > a {\n          color: $navbar-default-link-color;\n          &:hover,\n          &:focus {\n            color: $navbar-default-link-hover-color;\n            background-color: $navbar-default-link-hover-bg;\n          }\n        }\n        > .active > a {\n          &,\n          &:hover,\n          &:focus {\n            color: $navbar-default-link-active-color;\n            background-color: $navbar-default-link-active-bg;\n          }\n        }\n        > .disabled > a {\n          &,\n          &:hover,\n          &:focus {\n            color: $navbar-default-link-disabled-color;\n            background-color: $navbar-default-link-disabled-bg;\n          }\n        }\n      }\n    }\n  }\n\n\n  // Links in navbars\n  //\n  // Add a class to ensure links outside the navbar nav are colored correctly.\n\n  .navbar-link {\n    color: $navbar-default-link-color;\n    &:hover {\n      color: $navbar-default-link-hover-color;\n    }\n  }\n\n}\n\n// Inverse navbar\n\n.navbar-inverse {\n  background-color: $navbar-inverse-bg;\n  border-color: $navbar-inverse-border;\n\n  .navbar-brand {\n    color: $navbar-inverse-brand-color;\n    &:hover,\n    &:focus {\n      color: $navbar-inverse-brand-hover-color;\n      background-color: $navbar-inverse-brand-hover-bg;\n    }\n  }\n\n  .navbar-text {\n    color: $navbar-inverse-color;\n  }\n\n  .navbar-nav {\n    > li > a {\n      color: $navbar-inverse-link-color;\n\n      &:hover,\n      &:focus {\n        color: $navbar-inverse-link-hover-color;\n        background-color: $navbar-inverse-link-hover-bg;\n      }\n    }\n    > .active > a {\n      &,\n      &:hover,\n      &:focus {\n        color: $navbar-inverse-link-active-color;\n        background-color: $navbar-inverse-link-active-bg;\n      }\n    }\n    > .disabled > a {\n      &,\n      &:hover,\n      &:focus {\n        color: $navbar-inverse-link-disabled-color;\n        background-color: $navbar-inverse-link-disabled-bg;\n      }\n    }\n  }\n\n  // Darken the responsive nav toggle\n  .navbar-toggle {\n    border-color: $navbar-inverse-toggle-border-color;\n    &:hover,\n    &:focus {\n      background-color: $navbar-inverse-toggle-hover-bg;\n    }\n    .icon-bar {\n      background-color: $navbar-inverse-toggle-icon-bar-bg;\n    }\n  }\n\n  .navbar-collapse,\n  .navbar-form {\n    border-color: darken($navbar-inverse-bg, 7%);\n  }\n\n  // Dropdowns\n  .navbar-nav {\n    > .open > a {\n      &,\n      &:hover,\n      &:focus {\n        background-color: $navbar-inverse-link-active-bg;\n        color: $navbar-inverse-link-active-color;\n      }\n    }\n    > .dropdown > a:hover .caret {\n      border-top-color: $navbar-inverse-link-hover-color;\n      border-bottom-color: $navbar-inverse-link-hover-color;\n    }\n    > .dropdown > a .caret {\n      border-top-color: $navbar-inverse-link-color;\n      border-bottom-color: $navbar-inverse-link-color;\n    }\n    > .open > a {\n      &,\n      &:hover,\n      &:focus {\n        .caret {\n          border-top-color: $navbar-inverse-link-active-color;\n          border-bottom-color: $navbar-inverse-link-active-color;\n        }\n      }\n    }\n\n    @media (max-width: $screen-xs-max) {\n      // Dropdowns get custom display\n      .open .dropdown-menu {\n        > .dropdown-header {\n          border-color: $navbar-inverse-border;\n        }\n        > li > a {\n          color: $navbar-inverse-link-color;\n          &:hover,\n          &:focus {\n            color: $navbar-inverse-link-hover-color;\n            background-color: $navbar-inverse-link-hover-bg;\n          }\n        }\n        > .active > a {\n          &,\n          &:hover,\n          &:focus {\n            color: $navbar-inverse-link-active-color;\n            background-color: $navbar-inverse-link-active-bg;\n          }\n        }\n        > .disabled > a {\n          &,\n          &:hover,\n          &:focus {\n            color: $navbar-inverse-link-disabled-color;\n            background-color: $navbar-inverse-link-disabled-bg;\n          }\n        }\n      }\n    }\n  }\n\n  .navbar-link {\n    color: $navbar-inverse-link-color;\n    &:hover {\n      color: $navbar-inverse-link-hover-color;\n    }\n  }\n\n}\n"
  },
  {
    "path": "content/scss/bootstrap/_navs.scss",
    "content": "//\n// Navs\n// --------------------------------------------------\n\n\n// Base class\n// --------------------------------------------------\n\n.nav {\n  margin-bottom: 0;\n  padding-left: 0; // Override default ul/ol\n  list-style: none;\n  @include clearfix();\n\n  > li {\n    position: relative;\n    display: block;\n\n    > a {\n      position: relative;\n      display: block;\n      padding: $nav-link-padding;\n      &:hover,\n      &:focus {\n        text-decoration: none;\n        background-color: $nav-link-hover-bg;\n      }\n    }\n\n    // Disabled state sets text to gray and nukes hover/tab effects\n    &.disabled > a {\n      color: $nav-disabled-link-color;\n\n      &:hover,\n      &:focus {\n        color: $nav-disabled-link-hover-color;\n        text-decoration: none;\n        background-color: transparent;\n        cursor: not-allowed;\n      }\n    }\n  }\n\n  // Open dropdowns\n  .open > a {\n    &,\n    &:hover,\n    &:focus {\n      background-color: $nav-link-hover-bg;\n      border-color: $link-color;\n    }\n  }\n\n  // Dividers (basically an hr) within the dropdown\n  .nav-divider {\n    @include nav-divider();\n  }\n\n  // Prevent IE8 from misplacing imgs\n  // See https://github.com/h5bp/html5-boilerplate/issues/984#issuecomment-3985989\n  > li > a > img {\n    max-width: none;\n  }\n}\n\n\n// Tabs\n// -------------------------\n\n// Give the tabs something to sit on\n.nav-tabs {\n  border-bottom: 1px solid $nav-tabs-border-color;\n  > li {\n    float: left;\n    // Make the list-items overlay the bottom border\n    margin-bottom: -1px;\n\n    // Actual tabs (as links)\n    > a {\n      margin-right: 2px;\n      line-height: $line-height-base;\n      border: 1px solid transparent;\n      border-radius: $border-radius-base $border-radius-base 0 0;\n      &:hover {\n        border-color: $nav-tabs-link-hover-border-color $nav-tabs-link-hover-border-color $nav-tabs-border-color;\n      }\n    }\n\n    // Active state, and it's :hover to override normal :hover\n    &.active > a {\n      &,\n      &:hover,\n      &:focus {\n        color: $nav-tabs-active-link-hover-color;\n        background-color: $nav-tabs-active-link-hover-bg;\n        border: 1px solid $nav-tabs-active-link-hover-border-color;\n        border-bottom-color: transparent;\n        cursor: default;\n      }\n    }\n  }\n  // pulling this in mainly for less shorthand\n  &.nav-justified {\n    @extend .nav-justified;\n    @extend .nav-tabs-justified;\n  }\n}\n\n\n// Pills\n// -------------------------\n.nav-pills {\n  > li {\n    float: left;\n\n    // Links rendered as pills\n    > a {\n      border-radius: 5px;\n    }\n    + li {\n      margin-left: 2px;\n    }\n\n    // Active state\n    &.active > a {\n      &,\n      &:hover,\n      &:focus {\n        color: $nav-pills-active-link-hover-color;\n        background-color: $nav-pills-active-link-hover-bg;\n      }\n    }\n  }\n}\n\n\n// Stacked pills\n.nav-stacked {\n  > li {\n    float: none;\n    + li {\n      margin-top: 2px;\n      margin-left: 0; // no need for this gap between nav items\n    }\n  }\n}\n\n\n// Nav variations\n// --------------------------------------------------\n\n// Justified nav links\n// -------------------------\n\n.nav-justified {\n  width: 100%;\n\n  > li {\n    float: none;\n     > a {\n      text-align: center;\n    }\n  }\n\n  @media (min-width: $screen-sm) {\n    > li {\n      display: table-cell;\n      width: 1%;\n    }\n  }\n}\n\n// Move borders to anchors instead of bottom of list\n.nav-tabs-justified {\n  border-bottom: 0;\n  > li > a {\n    border-bottom: 1px solid $nav-tabs-justified-link-border-color;\n\n    // Override margin from .nav-tabs\n    margin-right: 0;\n  }\n  > .active > a {\n    border-bottom-color: $nav-tabs-justified-active-link-border-color;\n  }\n}\n\n\n// Tabbable tabs\n// -------------------------\n\n// Clear any floats\n.tabbable {\n  @include clearfix();\n}\n\n// Show/hide tabbable areas\n.tab-content > .tab-pane,\n.pill-content > .pill-pane {\n  display: none;\n}\n.tab-content,\n.pill-content {\n  > .active {\n    display: block;\n  }\n}\n\n\n\n// Dropdowns\n// -------------------------\n\n// Make dropdown carets use link color in navs\n.nav .caret {\n  border-top-color: $link-color;\n  border-bottom-color: $link-color;\n}\n.nav a:hover .caret {\n  border-top-color: $link-hover-color;\n  border-bottom-color: $link-hover-color;\n}\n\n// Specific dropdowns\n.nav-tabs .dropdown-menu {\n  // make dropdown border overlap tab border\n  margin-top: -1px;\n  // Remove the top rounded corners here since there is a hard edge above the menu\n  @include border-top-radius(0);\n}\n"
  },
  {
    "path": "content/scss/bootstrap/_normalize.scss",
    "content": "/*! normalize.css v2.1.0 | MIT License | git.io/normalize */\n\n// ==========================================================================\n// HTML5 display definitions\n// ==========================================================================\n\n//\n// Correct `block` display not defined in IE 8/9.\n//\n\narticle,\naside,\ndetails,\nfigcaption,\nfigure,\nfooter,\nheader,\nhgroup,\nmain,\nnav,\nsection,\nsummary {\n  display: block;\n}\n\n//\n// Correct `inline-block` display not defined in IE 8/9.\n//\n\naudio,\ncanvas,\nvideo {\n  display: inline-block;\n}\n\n//\n// Prevent modern browsers from displaying `audio` without controls.\n// Remove excess height in iOS 5 devices.\n//\n\naudio:not([controls]) {\n  display: none;\n  height: 0;\n}\n\n//\n// Address styling not present in IE 8/9.\n//\n\n[hidden] {\n  display: none;\n}\n\n// ==========================================================================\n// Base\n// ==========================================================================\n\n//\n// 1. Set default font family to sans-serif.\n// 2. Prevent iOS text size adjust after orientation change, without disabling\n//    user zoom.\n//\n\nhtml {\n  font-family: sans-serif; // 1\n  -webkit-text-size-adjust: 100%; // 2\n  -ms-text-size-adjust: 100%; // 2\n}\n\n//\n// Remove default margin.\n//\n\nbody {\n  margin: 0;\n}\n\n// ==========================================================================\n// Links\n// ==========================================================================\n\n//\n// Address `outline` inconsistency between Chrome and other browsers.\n//\n\na:focus {\n  outline: thin dotted;\n}\n\n//\n// Improve readability when focused and also mouse hovered in all browsers.\n//\n\na:active,\na:hover {\n  outline: 0;\n}\n\n// ==========================================================================\n// Typography\n// ==========================================================================\n\n//\n// Address variable `h1` font-size and margin within `section` and `article`\n// contexts in Firefox 4+, Safari 5, and Chrome.\n//\n\nh1 {\n  font-size: 2em;\n  margin: 0.67em 0;\n}\n\n//\n// Address styling not present in IE 8/9, Safari 5, and Chrome.\n//\n\nabbr[title] {\n  border-bottom: 1px dotted;\n}\n\n//\n// Address style set to `bolder` in Firefox 4+, Safari 5, and Chrome.\n//\n\nb,\nstrong {\n  font-weight: bold;\n}\n\n//\n// Address styling not present in Safari 5 and Chrome.\n//\n\ndfn {\n  font-style: italic;\n}\n\n//\n// Address differences between Firefox and other browsers.\n//\n\nhr {\n  -moz-box-sizing: content-box;\n  box-sizing: content-box;\n  height: 0;\n}\n\n//\n// Address styling not present in IE 8/9.\n//\n\nmark {\n  background: #ff0;\n  color: #000;\n}\n\n//\n// Correct font family set oddly in Safari 5 and Chrome.\n//\n\ncode,\nkbd,\npre,\nsamp {\n  font-family: monospace, serif;\n  font-size: 1em;\n}\n\n//\n// Improve readability of pre-formatted text in all browsers.\n//\n\npre {\n  white-space: pre-wrap;\n}\n\n//\n// Set consistent quote types.\n//\n\nq {\n  quotes: \"\\201C\" \"\\201D\" \"\\2018\" \"\\2019\";\n}\n\n//\n// Address inconsistent and variable font size in all browsers.\n//\n\nsmall {\n  font-size: 80%;\n}\n\n//\n// Prevent `sub` and `sup` affecting `line-height` in all browsers.\n//\n\nsub,\nsup {\n  font-size: 75%;\n  line-height: 0;\n  position: relative;\n  vertical-align: baseline;\n}\n\nsup {\n  top: -0.5em;\n}\n\nsub {\n  bottom: -0.25em;\n}\n\n// ==========================================================================\n// Embedded content\n// ==========================================================================\n\n//\n// Remove border when inside `a` element in IE 8/9.\n//\n\nimg {\n  border: 0;\n}\n\n//\n// Correct overflow displayed oddly in IE 9.\n//\n\nsvg:not(:root) {\n  overflow: hidden;\n}\n\n// ==========================================================================\n// Figures\n// ==========================================================================\n\n//\n// Address margin not present in IE 8/9 and Safari 5.\n//\n\nfigure {\n  margin: 0;\n}\n\n// ==========================================================================\n// Forms\n// ==========================================================================\n\n//\n// Define consistent border, margin, and padding.\n//\n\nfieldset {\n  border: 1px solid #c0c0c0;\n  margin: 0 2px;\n  padding: 0.35em 0.625em 0.75em;\n}\n\n//\n// 1. Correct `color` not being inherited in IE 8/9.\n// 2. Remove padding so people aren't caught out if they zero out fieldsets.\n//\n\nlegend {\n  border: 0; // 1\n  padding: 0; // 2\n}\n\n//\n// 1. Correct font family not being inherited in all browsers.\n// 2. Correct font size not being inherited in all browsers.\n// 3. Address margins set differently in Firefox 4+, Safari 5, and Chrome.\n//\n\nbutton,\ninput,\nselect,\ntextarea {\n  font-family: inherit; // 1\n  font-size: 100%; // 2\n  margin: 0; // 3\n}\n\n//\n// Address Firefox 4+ setting `line-height` on `input` using `!important` in\n// the UA stylesheet.\n//\n\nbutton,\ninput {\n  line-height: normal;\n}\n\n//\n// Address inconsistent `text-transform` inheritance for `button` and `select`.\n// All other form control elements do not inherit `text-transform` values.\n// Correct `button` style inheritance in Chrome, Safari 5+, and IE 8+.\n// Correct `select` style inheritance in Firefox 4+ and Opera.\n//\n\nbutton,\nselect {\n  text-transform: none;\n}\n\n//\n// 1. Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio`\n//    and `video` controls.\n// 2. Correct inability to style clickable `input` types in iOS.\n// 3. Improve usability and consistency of cursor style between image-type\n//    `input` and others.\n//\n\nbutton,\nhtml input[type=\"button\"], // 1\ninput[type=\"reset\"],\ninput[type=\"submit\"] {\n  -webkit-appearance: button; // 2\n  cursor: pointer; // 3\n}\n\n//\n// Re-set default cursor for disabled elements.\n//\n\nbutton[disabled],\nhtml input[disabled] {\n  cursor: default;\n}\n\n//\n// 1. Address box sizing set to `content-box` in IE 8/9.\n// 2. Remove excess padding in IE 8/9.\n//\n\ninput[type=\"checkbox\"],\ninput[type=\"radio\"] {\n  box-sizing: border-box; // 1\n  padding: 0; // 2\n}\n\n//\n// 1. Address `appearance` set to `searchfield` in Safari 5 and Chrome.\n// 2. Address `box-sizing` set to `border-box` in Safari 5 and Chrome\n//    (include `-moz` to future-proof).\n//\n\ninput[type=\"search\"] {\n  -webkit-appearance: textfield; // 1\n  -moz-box-sizing: content-box;\n  -webkit-box-sizing: content-box; // 2\n  box-sizing: content-box;\n}\n\n//\n// Remove inner padding and search cancel button in Safari 5 and Chrome\n// on OS X.\n//\n\ninput[type=\"search\"]::-webkit-search-cancel-button,\ninput[type=\"search\"]::-webkit-search-decoration {\n  -webkit-appearance: none;\n}\n\n//\n// Remove inner padding and border in Firefox 4+.\n//\n\nbutton::-moz-focus-inner,\ninput::-moz-focus-inner {\n  border: 0;\n  padding: 0;\n}\n\n//\n// 1. Remove default vertical scrollbar in IE 8/9.\n// 2. Improve readability and alignment in all browsers.\n//\n\ntextarea {\n  overflow: auto; // 1\n  vertical-align: top; // 2\n}\n\n// ==========================================================================\n// Tables\n// ==========================================================================\n\n//\n// Remove most spacing between table cells.\n//\n\ntable {\n  border-collapse: collapse;\n  border-spacing: 0;\n}\n"
  },
  {
    "path": "content/scss/bootstrap/_pager.scss",
    "content": "//\n// Pager pagination\n// --------------------------------------------------\n\n\n.pager {\n  padding-left: 0;\n  margin: $line-height-computed 0;\n  list-style: none;\n  text-align: center;\n  @include clearfix();\n  li {\n    display: inline;\n    > a,\n    > span {\n      display: inline-block;\n      padding: 5px 14px;\n      background-color: $pagination-bg;\n      border: 1px solid $pagination-border;\n      border-radius: $pager-border-radius;\n    }\n\n    > a:hover,\n    > a:focus {\n      text-decoration: none;\n      background-color: $pagination-hover-bg;\n    }\n  }\n\n  .next {\n    > a,\n    > span {\n      float: right;\n    }\n  }\n\n  .previous {\n    > a,\n    > span {\n      float: left;\n    }\n  }\n\n  .disabled {\n    > a,\n    > a:hover,\n    > a:focus,\n    > span {\n      color: $pager-disabled-color;\n      background-color: $pagination-bg;\n      cursor: not-allowed;\n    }\n  }\n\n}\n"
  },
  {
    "path": "content/scss/bootstrap/_pagination.scss",
    "content": "//\n// Pagination (multiple pages)\n// --------------------------------------------------\n.pagination {\n  display: inline-block;\n  padding-left: 0;\n  margin: $line-height-computed 0;\n  border-radius: $border-radius-base;\n\n  > li {\n    display: inline; // Remove list-style and block-level defaults\n    > a,\n    > span {\n      position: relative;\n      float: left; // Collapse white-space\n      padding: $padding-base-vertical $padding-base-horizontal;\n      line-height: $line-height-base;\n      text-decoration: none;\n      background-color: $pagination-bg;\n      border: 1px solid $pagination-border;\n      margin-left: -1px;\n    }\n    &:first-child {\n      > a,\n      > span {\n        margin-left: 0;\n        @include border-left-radius($border-radius-base);\n      }\n    }\n    &:last-child {\n      > a,\n      > span {\n        @include border-right-radius($border-radius-base);\n      }\n    }\n  }\n\n  > li > a,\n  > li > span {\n    &:hover,\n    &:focus {\n      background-color: $pagination-hover-bg;\n    }\n  }\n\n  > .active > a,\n  > .active > span {\n    &,\n    &:hover,\n    &:focus {\n      z-index: 2;\n      color: $pagination-active-color;\n      background-color: $pagination-active-bg;\n      border-color: $pagination-active-bg;\n      cursor: default;\n    }\n  }\n\n  > .disabled {\n    > span,\n    > a,\n    > a:hover,\n    > a:focus {\n      color: $pagination-disabled-color;\n      background-color: $pagination-bg;\n      border-color: $pagination-border;\n      cursor: not-allowed;\n    }\n  }\n}\n\n// Sizing\n// --------------------------------------------------\n\n// Large\n.pagination-lg {\n  @include pagination-size($padding-large-vertical, $padding-large-horizontal, $font-size-large, $border-radius-large);\n}\n\n// Small\n.pagination-sm {\n  @include pagination-size($padding-small-vertical, $padding-small-horizontal, $font-size-small, $border-radius-small);\n}\n"
  },
  {
    "path": "content/scss/bootstrap/_panels.scss",
    "content": "//\n// Panels\n// --------------------------------------------------\n\n\n// Base class\n.panel {\n  margin-bottom: $line-height-computed;\n  background-color: $panel-bg;\n  border: 1px solid transparent;\n  border-radius: $panel-border-radius;\n  @include box-shadow(0 1px 1px rgba(0,0,0,.05));\n}\n\n// Panel contents\n.panel-body {\n  padding: 15px;\n  @include clearfix();\n}\n\n\n// List groups in panels\n//\n// By default, space out list group content from panel headings to account for\n// any kind of custom content between the two.\n\n.panel {\n  > .list-group {\n    margin-bottom: 0;\n\n    .list-group-item {\n      border-width: 1px 0;\n\n      // Remove border radius for top one\n      &:first-child {\n        @include border-top-radius(0);\n      }\n      // But keep it for the last one\n      &:last-child {\n        border-bottom: 0;\n      }\n    }\n  }\n}\n// Collapse space between when there's no additional content.\n.panel-heading + .list-group {\n  .list-group-item:first-child {\n    border-top-width: 0;\n  }\n}\n\n\n// Tables in panels\n//\n// Place a non-bordered `.table` within a panel (not within a `.panel-body`) and\n// watch it go full width.\n\n.panel {\n  > .table {\n    margin-bottom: 0;\n  }\n  > .panel-body + .table {\n    border-top: 1px solid $table-border-color;\n  }\n}\n\n\n// Optional heading\n.panel-heading {\n  padding: 10px 15px;\n  border-bottom: 1px solid transparent;\n  @include border-top-radius($panel-border-radius - 1);\n}\n\n// Within heading, strip any `h*` tag of it's default margins for spacing.\n.panel-title {\n  margin-top: 0;\n  margin-bottom: 0;\n  font-size: ceil(($font-size-base * 1.125));\n  > a {\n    color: inherit;\n  }\n}\n\n// Optional footer (stays gray in every modifier class)\n.panel-footer {\n  padding: 10px 15px;\n  background-color: $panel-footer-bg;\n  border-top: 1px solid $panel-inner-border;\n  @include border-bottom-radius($panel-border-radius - 1);\n}\n\n\n// Collapsable panels (aka, accordion)\n//\n// Wrap a series of panels in `.panel-group` to turn them into an accordion with\n// the help of our collapse JavaScript plugin.\n\n.panel-group {\n  // Tighten up margin so it's only between panels\n  .panel {\n    margin-bottom: 0;\n    border-radius: $panel-border-radius;\n    overflow: hidden; // crop contents when collapsed\n    + .panel {\n      margin-top: 5px;\n    }\n  }\n\n  .panel-heading {\n    border-bottom: 0;\n    + .panel-collapse .panel-body {\n      border-top: 1px solid $panel-inner-border;\n    }\n  }\n  .panel-footer {\n    border-top: 0;\n    + .panel-collapse .panel-body {\n      border-bottom: 1px solid $panel-inner-border;\n    }\n  }\n\n  // New subcomponent for wrapping collapsable content for proper animations\n  .panel-collapse {\n\n  }\n}\n\n\n// Contextual variations\n.panel-default {\n  @include panel-variant($panel-default-border, $panel-default-text, $panel-default-heading-bg, $panel-default-border);\n}\n.panel-primary {\n  @include panel-variant($panel-primary-border, $panel-primary-text, $panel-primary-heading-bg, $panel-primary-border);\n}\n.panel-success {\n  @include panel-variant($panel-success-border, $panel-success-text, $panel-success-heading-bg, $panel-success-border);\n}\n.panel-warning {\n  @include panel-variant($panel-warning-border, $panel-warning-text, $panel-warning-heading-bg, $panel-warning-border);\n}\n.panel-danger {\n  @include panel-variant($panel-danger-border, $panel-danger-text, $panel-danger-heading-bg, $panel-danger-border);\n}\n.panel-info {\n  @include panel-variant($panel-info-border, $panel-info-text, $panel-info-heading-bg, $panel-info-border);\n}\n"
  },
  {
    "path": "content/scss/bootstrap/_popovers.scss",
    "content": "//\n// Popovers\n// --------------------------------------------------\n\n\n.popover {\n  position: absolute;\n  top: 0;\n  left: 0;\n  z-index: $zindex-popover;\n  display: none;\n  max-width: $popover-max-width;\n  padding: 1px;\n  text-align: left; // Reset given new insertion method\n  background-color: $popover-bg;\n  background-clip: padding-box;\n  border: 1px solid $popover-fallback-border-color;\n  border: 1px solid $popover-border-color;\n  border-radius: $border-radius-large;\n  @include box-shadow(0 5px 10px rgba(0,0,0,.2));\n\n  // Overrides for proper insertion\n  white-space: normal;\n\n  // Offset the popover to account for the popover arrow\n  &.top     { margin-top: -10px; }\n  &.right   { margin-left: 10px; }\n  &.bottom  { margin-top: 10px; }\n  &.left    { margin-left: -10px; }\n}\n\n.popover-title {\n  margin: 0; // reset heading margin\n  padding: 8px 14px;\n  font-size: $font-size-base;\n  font-weight: normal;\n  line-height: 18px;\n  background-color: $popover-title-bg;\n  border-bottom: 1px solid darken($popover-title-bg, 5%);\n  border-radius: 5px 5px 0 0;\n}\n\n.popover-content {\n  padding: 9px 14px;\n}\n\n// Arrows\n//\n// .arrow is outer, .arrow:after is inner\n\n.popover .arrow {\n  &,\n  &:after {\n    position: absolute;\n    display: block;\n    width: 0;\n    height: 0;\n    border-color: transparent;\n    border-style: solid;\n  }\n}\n.popover .arrow {\n  border-width: $popover-arrow-outer-width;\n}\n.popover .arrow:after {\n  border-width: $popover-arrow-width;\n  content: \"\";\n}\n\n.popover {\n  &.top .arrow {\n    left: 50%;\n    margin-left: -$popover-arrow-outer-width;\n    border-bottom-width: 0;\n    border-top-color: $popover-arrow-outer-fallback-color; // IE8 fallback\n    border-top-color: $popover-arrow-outer-color;\n    bottom: -$popover-arrow-outer-width;\n    &:after {\n      content: \" \";\n      bottom: 1px;\n      margin-left: -$popover-arrow-width;\n      border-bottom-width: 0;\n      border-top-color: $popover-arrow-color;\n    }\n  }\n  &.right .arrow {\n    top: 50%;\n    left: -$popover-arrow-outer-width;\n    margin-top: -$popover-arrow-outer-width;\n    border-left-width: 0;\n    border-right-color: $popover-arrow-outer-fallback-color; // IE8 fallback\n    border-right-color: $popover-arrow-outer-color;\n    &:after {\n      content: \" \";\n      left: 1px;\n      bottom: -$popover-arrow-width;\n      border-left-width: 0;\n      border-right-color: $popover-arrow-color;\n    }\n  }\n  &.bottom .arrow {\n    left: 50%;\n    margin-left: -$popover-arrow-outer-width;\n    border-top-width: 0;\n    border-bottom-color: $popover-arrow-outer-fallback-color; // IE8 fallback\n    border-bottom-color: $popover-arrow-outer-color;\n    top: -$popover-arrow-outer-width;\n    &:after {\n      content: \" \";\n      top: 1px;\n      margin-left: -$popover-arrow-width;\n      border-top-width: 0;\n      border-bottom-color: $popover-arrow-color;\n    }\n  }\n\n  &.left .arrow {\n    top: 50%;\n    right: -$popover-arrow-outer-width;\n    margin-top: -$popover-arrow-outer-width;\n    border-right-width: 0;\n    border-left-color: $popover-arrow-outer-fallback-color; // IE8 fallback\n    border-left-color: $popover-arrow-outer-color;\n    &:after {\n      content: \" \";\n      right: 1px;\n      border-right-width: 0;\n      border-left-color: $popover-arrow-color;\n      bottom: -$popover-arrow-width;\n    }\n  }\n\n}\n"
  },
  {
    "path": "content/scss/bootstrap/_print.scss",
    "content": "//\n// Basic print styles\n// --------------------------------------------------\n// Source: https://github.com/h5bp/html5-boilerplate/blob/master/css/main.css\n\n@media print {\n\n  * {\n    text-shadow: none !important;\n    color: #000 !important; // Black prints faster: h5bp.com/s\n    background: transparent !important;\n    box-shadow: none !important;\n  }\n\n  a,\n  a:visited {\n    text-decoration: underline;\n  }\n\n  a[href]:after {\n    content: \" (\" attr(href) \")\";\n  }\n\n  abbr[title]:after {\n    content: \" (\" attr(title) \")\";\n  }\n\n  // Don't show links for images, or javascript/internal links\n  .ir a:after,\n  a[href^=\"javascript:\"]:after,\n  a[href^=\"#\"]:after {\n    content: \"\";\n  }\n\n  pre,\n  blockquote {\n    border: 1px solid #999;\n    page-break-inside: avoid;\n  }\n\n  thead {\n    display: table-header-group; // h5bp.com/t\n  }\n\n  tr,\n  img {\n    page-break-inside: avoid;\n  }\n\n  img {\n    max-width: 100% !important;\n  }\n\n  @page {\n    margin: 2cm .5cm;\n  }\n\n  p,\n  h2,\n  h3 {\n    orphans: 3;\n    widows: 3;\n  }\n\n  h2,\n  h3 {\n    page-break-after: avoid;\n  }\n\n  // Bootstrap components\n  .navbar {\n    display: none;\n  }\n  .table {\n    td,\n    th {\n      background-color: #fff !important;\n    }\n  }\n  .btn,\n  .dropup > .btn {\n    > .caret {\n      border-top-color: #000 !important;\n    }\n  }\n  .label {\n    border: 1px solid #000;\n  }\n\n  .table {\n    border-collapse: collapse !important;\n  }\n  .table-bordered {\n    th,\n    td {\n      border: 1px solid #ddd !important;\n    }\n  }\n\n}\n"
  },
  {
    "path": "content/scss/bootstrap/_progress-bars.scss",
    "content": "//\n// Progress bars\n// --------------------------------------------------\n\n\n// Bar animations\n// -------------------------\n\n// Webkit\n@-webkit-keyframes progress-bar-stripes {\n  from  { background-position: 40px 0; }\n  to    { background-position: 0 0; }\n}\n\n// Firefox\n@-moz-keyframes progress-bar-stripes {\n  from  { background-position: 40px 0; }\n  to    { background-position: 0 0; }\n}\n\n// Opera\n@-o-keyframes progress-bar-stripes {\n  from  { background-position: 0 0; }\n  to    { background-position: 40px 0; }\n}\n\n// Spec and IE10+\n@keyframes progress-bar-stripes {\n  from  { background-position: 40px 0; }\n  to    { background-position: 0 0; }\n}\n\n\n\n// Bar itself\n// -------------------------\n\n// Outer container\n.progress {\n  overflow: hidden;\n  height: $line-height-computed;\n  margin-bottom: $line-height-computed;\n  background-color: $progress-bg;\n  border-radius: $border-radius-base;\n  @include box-shadow(inset 0 1px 2px rgba(0,0,0,.1));\n}\n\n// Bar of progress\n.progress-bar {\n  float: left;\n  width: 0%;\n  height: 100%;\n  font-size: $font-size-small;\n  color: $progress-bar-color;\n  text-align: center;\n  background-color: $progress-bar-bg;\n  @include box-shadow(inset 0 -1px 0 rgba(0,0,0,.15));\n  @include transition(width .6s ease);\n}\n\n// Striped bars\n.progress-striped .progress-bar {\n  @include gradient-striped($progress-bar-bg);\n  background-size: 40px 40px;\n}\n\n// Call animation for the active one\n.progress.active .progress-bar {\n  -webkit-animation: progress-bar-stripes 2s linear infinite;\n     -moz-animation: progress-bar-stripes 2s linear infinite;\n      -ms-animation: progress-bar-stripes 2s linear infinite;\n       -o-animation: progress-bar-stripes 2s linear infinite;\n          animation: progress-bar-stripes 2s linear infinite;\n}\n\n\n\n// Variations\n// -------------------------\n\n.progress-bar-success {\n  @include progress-bar-variant($progress-bar-success-bg);\n}\n\n.progress-bar-info {\n  @include progress-bar-variant($progress-bar-info-bg);\n}\n\n.progress-bar-warning {\n  @include progress-bar-variant($progress-bar-warning-bg);\n}\n\n.progress-bar-danger {\n  @include progress-bar-variant($progress-bar-danger-bg);\n}\n"
  },
  {
    "path": "content/scss/bootstrap/_responsive-utilities.scss",
    "content": "//\n// Responsive: Utility classes\n// --------------------------------------------------\n\n\n// IE10 Metro responsive\n// Required for Windows 8 Metro split-screen snapping with IE10\n//\n// Source: http://timkadlec.com/2012/10/ie10-snap-mode-and-responsive-design/\n@-ms-viewport{\n  width: device-width;\n}\n\n// IE10 on Windows Phone 8\n// IE10 on WP8 doesn't report CSS pixels, but actual device pixels. In\n// other words, say on a Lumia, you'll get 768px as the device width,\n// meaning users will see the tablet styles and not phone styles.\n//\n// Alternatively you can override this with JS (see source below), but\n// we won't be doing that here given our limited scope.\n//\n// Source: http://timkadlec.com/2013/01/windows-phone-8-and-device-width/\n@media screen and (max-width: 400px) {\n  @-ms-viewport{\n    width: 320px;\n  }\n}\n\n// Hide from screenreaders and browsers\n// Credit: HTML5 Boilerplate\n.hidden {\n  display: none !important;\n  visibility: hidden !important;\n}\n\n// Visibility utilities\n\n@include responsive-invisibility('.visible-xs');\n@media (max-width: $screen-xs-max) {\n  @include responsive-visibility('.visible-xs');\n}\n\n@media (min-width: $screen-sm) and (max-width: $screen-sm-max) {\n  @include responsive-visibility('.visible-xs.visible-sm');\n}\n\n\n@media (min-width: $screen-md) and (max-width: $screen-md-max) {\n  @include responsive-visibility('.visible-xs.visible-md');\n}\n\n\n@media (min-width: $screen-lg) {\n  @include responsive-visibility('.visible-xs.visible-lg');\n}\n\n\n@include responsive-invisibility('.visible-sm');\n\n@media (max-width: $screen-xs-max) {\n  @include responsive-visibility('.visible-sm.visible-xs');\n}\n\n@media (min-width: $screen-sm) and (max-width: $screen-sm-max) {\n  @include responsive-visibility('.visible-sm');\n}\n\n@media (min-width: $screen-md) and (max-width: $screen-md-max) {\n  @include responsive-visibility('.visible-sm.visible-md');\n}\n\n\n@media (min-width: $screen-lg) {\n  @include responsive-visibility('.visible-sm.visible-lg');\n}\n\n\n@include responsive-invisibility('.visible-md');\n\n@media (max-width: $screen-xs-max) {\n  @include responsive-visibility('.visible-md.visible-xs');\n}\n\n\n@media (min-width: $screen-sm) and (max-width: $screen-sm-max) {\n  @include responsive-visibility('.visible-md.visible-sm');\n}\n\n@media (min-width: $screen-md) and (max-width: $screen-md-max) {\n  @include responsive-visibility('.visible-md');\n}\n\n@media (min-width: $screen-lg) {\n  @include responsive-visibility('.visible-md.visible-lg');\n}\n\n\n@include responsive-invisibility('.visible-lg');\n\n@media (max-width: $screen-xs-max) {\n  @include responsive-visibility('.visible-lg.visible-xs');\n}\n\n\n@media (min-width: $screen-sm) and (max-width: $screen-sm-max) {\n  @include responsive-visibility('.visible-lg.visible-sm');\n}\n\n\n@media (min-width: $screen-md) and (max-width: $screen-md-max) {\n  @include responsive-visibility('.visible-lg.visible-md');\n}\n\n@media (min-width: $screen-lg) {\n  @include responsive-visibility('.visible-lg');\n}\n\n@include responsive-visibility('.hidden-xs');\n@media (max-width: $screen-xs-max) {\n  @include responsive-invisibility('.hidden-xs');\n}\n\n@media (min-width: $screen-sm) and (max-width: $screen-sm-max) {\n  @include responsive-invisibility('.hidden-xs.hidden-sm');\n}\n\n\n@media (min-width: $screen-md) and (max-width: $screen-md-max) {\n  @include responsive-invisibility('.hidden-xs.hidden-md');\n}\n\n\n@media (min-width: $screen-lg) {\n  @include responsive-invisibility('.hidden-xs.hidden-lg');\n}\n\n\n@include responsive-visibility('.hidden-sm');\n\n@media (max-width: $screen-xs-max) {\n  @include responsive-invisibility('.hidden-sm.hidden-xs');\n}\n\n@media (min-width: $screen-sm) and (max-width: $screen-sm-max) {\n  @include responsive-invisibility('.hidden-sm');\n}\n\n@media (min-width: $screen-md) and (max-width: $screen-md-max) {\n  @include responsive-invisibility('.hidden-sm.hidden-md');\n}\n\n\n@media (min-width: $screen-lg) {\n  @include responsive-invisibility('.hidden-sm.hidden-lg');\n}\n\n\n@include responsive-visibility('.hidden-md');\n\n@media (max-width: $screen-xs-max) {\n  @include responsive-invisibility('.hidden-md.hidden-xs');\n}\n\n\n@media (min-width: $screen-sm) and (max-width: $screen-sm-max) {\n  @include responsive-invisibility('.hidden-md.hidden-sm');\n}\n\n@media (min-width: $screen-md) and (max-width: $screen-md-max) {\n  @include responsive-invisibility('.hidden-md');\n}\n\n@media (min-width: $screen-lg) {\n  @include responsive-invisibility('.hidden-md.hidden-lg');\n}\n\n\n@include responsive-visibility('.hidden-lg');\n\n@media (max-width: $screen-xs-max) {\n  @include responsive-invisibility('.hidden-lg.hidden-xs');\n}\n\n\n@media (min-width: $screen-sm) and (max-width: $screen-sm-max) {\n  @include responsive-invisibility('.hidden-lg.hidden-sm');\n}\n\n\n@media (min-width: $screen-md) and (max-width: $screen-md-max) {\n  @include responsive-invisibility('.hidden-lg.hidden-md');\n}\n\n@media (min-width: $screen-lg) {\n  @include responsive-invisibility('.hidden-lg');\n}\n\n// Print utilities\n\n@include responsive-invisibility('.visible-print');\n\n@media print {\n\n  @include responsive-visibility('.visible-print');\n\n\n  @include responsive-invisibility('.hidden-print');\n\n}\n"
  },
  {
    "path": "content/scss/bootstrap/_scaffolding.scss",
    "content": "//\n// Scaffolding\n// --------------------------------------------------\n\n\n// Reset the box-sizing\n\n*,\n*:before,\n*:after {\n  @include box-sizing(border-box);\n}\n\n\n// Body reset\n\nhtml {\n  font-size: 62.5%;\n  -webkit-tap-highlight-color: rgba(0,0,0,0);\n}\n\nbody {\n  font-family: $font-family-base;\n  font-size: $font-size-base;\n  line-height: $line-height-base;\n  color: $text-color;\n  background-color: $body-bg;\n}\n\n// Reset fonts for relevant elements\ninput,\nbutton,\nselect,\ntextarea {\n  font-family: inherit;\n  font-size: inherit;\n  line-height: inherit;\n}\n\n// Reset unusual Firefox-on-Android default style.\n//\n// See https://github.com/necolas/normalize.css/issues/214\n\nbutton,\ninput,\nselect[multiple],\ntextarea {\n  background-image: none;\n}\n\n\n// Links\n\na {\n  color: $link-color;\n  text-decoration: none;\n\n  &:hover,\n  &:focus {\n    color: $link-hover-color;\n    text-decoration: underline;\n  }\n\n  &:focus {\n    @include tab-focus();\n  }\n}\n\n\n// Images\n\nimg {\n  vertical-align: middle;\n}\n\n// Responsive images (ensure images don't scale beyond their parents)\n.img-responsive {\n  @include img-responsive();\n}\n\n// Rounded corners\n.img-rounded {\n  border-radius: $border-radius-large;\n}\n\n// Image thumbnails\n//\n// Heads up! This is mixin-ed into thumbnails.less for `.thumbnail`.\n.img-thumbnail {\n  padding: $thumbnail-padding;\n  line-height: $line-height-base;\n  background-color: $thumbnail-bg;\n  border: 1px solid $thumbnail-border;\n  border-radius: $thumbnail-border-radius;\n  @include transition(all .2s ease-in-out);\n\n  // Keep them at most 100% wide\n  @include img-responsive(inline-block);\n}\n\n// Perfect circle\n.img-circle {\n  border-radius: 50%; // set radius in percents\n}\n\n\n// Horizontal rules\n\nhr {\n  margin-top:    $line-height-computed;\n  margin-bottom: $line-height-computed;\n  border: 0;\n  border-top: 1px solid $hr-border;\n}\n\n\n// Only display content to screen readers\n//\n// See: http://a11yproject.com/posts/how-to-hide-content/\n\n.sr-only {\n  position: absolute;\n  width: 1px;\n  height: 1px;\n  margin: -1px;\n  padding: 0;\n  overflow: hidden;\n  clip: rect(0 0 0 0);\n  border: 0;\n}\n"
  },
  {
    "path": "content/scss/bootstrap/_tables.scss",
    "content": "//\n// Tables\n// --------------------------------------------------\n\n\ntable {\n  max-width: 100%;\n  background-color: $table-bg;\n}\nth {\n  text-align: left;\n}\n\n\n// Baseline styles\n\n.table {\n  width: 100%;\n  margin-bottom: $line-height-computed;\n  // Cells\n  thead,\n  tbody,\n  tfoot {\n    > tr {\n      > th,\n      > td {\n        padding: $table-cell-padding;\n        line-height: $line-height-base;\n        vertical-align: top;\n        border-top: 1px solid $table-border-color;\n      }\n    }\n  }\n  // Bottom align for column headings\n  thead > tr > th {\n    vertical-align: bottom;\n    border-bottom: 2px solid $table-border-color;\n  }\n  // Remove top border from thead by default\n  caption + thead,\n  colgroup + thead,\n  thead:first-child {\n    tr:first-child {\n      th, td {\n        border-top: 0;\n      }\n    }\n  }\n  // Account for multiple tbody instances\n  tbody + tbody {\n    border-top: 2px solid $table-border-color;\n  }\n\n  // Nesting\n  .table {\n    background-color: $body-bg;\n  }\n}\n\n\n// Condensed table w/ half padding\n\n.table-condensed {\n  thead,\n  tbody,\n  tfoot {\n    > tr {\n      > th,\n      > td {\n        padding: $table-condensed-cell-padding;\n      }\n    }\n  }\n}\n\n\n// Bordered version\n//\n// Add borders all around the table and between all the columns.\n\n.table-bordered {\n  border: 1px solid $table-border-color;\n  > thead,\n  > tbody,\n  > tfoot {\n    > tr {\n      > th,\n      > td {\n        border: 1px solid $table-border-color;\n      }\n    }\n  }\n  > thead {\n    > tr {\n      > th,\n      > td {\n        border-bottom-width: 2px;\n      }\n    }\n  }\n}\n\n\n// Zebra-striping\n//\n// Default zebra-stripe styles (alternating gray and transparent backgrounds)\n\n.table-striped {\n  > tbody {\n    > tr:nth-child(odd) {\n      > td,\n      > th {\n        background-color: $table-bg-accent;\n      }\n    }\n  }\n}\n\n\n// Hover effect\n//\n// Placed here since it has to come after the potential zebra striping\n\n.table-hover {\n  > tbody {\n    > tr:hover {\n      > td,\n      > th {\n        background-color: $table-bg-hover;\n      }\n    }\n  }\n}\n\n\n// Table cell sizing\n//\n// Reset default table behavior\n\ntable col[class*=\"col-\"] {\n  float: none;\n  display: table-column;\n}\ntable {\n  td,\n  th {\n    &[class*=\"col-\"] {\n      float: none;\n      display: table-cell;\n    }\n  }\n}\n\n\n// Table backgrounds\n//\n// Exact selectors below required to override `.table-striped` and prevent\n// inheritance to nested tables.\n\n.table > thead > tr,\n.table > tbody > tr,\n.table > tfoot > tr {\n  > td.active,\n  > th.active,\n  &.active > td,\n  &.active > th  {\n    background-color: $table-bg-active;\n  }\n}\n\n// Generate the contextual variants\n@include table-row-variant('success', $state-success-bg, $state-success-border);\n@include table-row-variant('danger', $state-danger-bg, $state-danger-border);\n@include table-row-variant('warning', $state-warning-bg, $state-warning-border);\n\n\n// Responsive tables\n//\n// Wrap your tables in `.table-scrollable` and we'll make them mobile friendly\n// by enabling horizontal scrolling. Only applies <768px. Everything above that\n// will display normally.\n\n@media (max-width: $screen-sm) {\n  .table-responsive {\n    width: 100%;\n    margin-bottom: 15px;\n    overflow-y: hidden;\n    overflow-x: scroll;\n    border: 1px solid $table-border-color;\n\n    // Tighten up spacing and give a background color\n    > .table {\n      margin-bottom: 0;\n      background-color: #fff;\n\n      // Ensure the content doesn't wrap\n      > thead,\n      > tbody,\n      > tfoot {\n        > tr {\n          > th,\n          > td {\n            white-space: nowrap;\n          }\n        }\n      }\n    }\n\n    // Special overrides for the bordered tables\n    > .table-bordered {\n      border: 0;\n\n      // Nuke the appropriate borders so that the parent can handle them\n      > thead,\n      > tbody,\n      > tfoot {\n        > tr {\n          > th:first-child,\n          > td:first-child {\n            border-left: 0;\n          }\n          > th:last-child,\n          > td:last-child {\n            border-right: 0;\n          }\n        }\n        > tr:last-child {\n          > th,\n          > td {\n            border-bottom: 0;\n          }\n        }\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "content/scss/bootstrap/_theme.scss",
    "content": "\n//\n// Load core variables and mixins\n// --------------------------------------------------\n\n@import \"variables\";\n@import \"mixins\";\n\n\n\n//\n// Buttons\n// --------------------------------------------------\n\n// Common styles\n.btn-default,\n.btn-primary,\n.btn-success,\n.btn-info,\n.btn-warning,\n.btn-danger {\n  text-shadow: 0 -1px 0 rgba(0,0,0,.2);\n  $shadow: inset 0 1px 0 rgba(255,255,255,.15), 0 1px 1px rgba(0,0,0,.075);\n  @include box-shadow($shadow);\n\n  // Reset the shadow\n  &:active,\n  &.active {\n    @include box-shadow(inset 0 3px 5px rgba(0,0,0,.125));\n  }\n}\n\n// Mixin for generating new styles\n@mixin btn-styles($btn-color: #555) {\n  @include gradient-vertical($start-color: $btn-color, $end-color: darken($btn-color, 10%));\n  border-color: darken($btn-color, 12%);\n\n  &:active,\n  &.active {\n    background-color: darken($btn-color, 10%);\n    border-color: darken($btn-color, 12%);\n  }\n}\n\n// Common styles\n.btn {\n  // Remove the gradient for the pressed/active state\n  &:active,\n  &.active {\n    background-image: none;\n  }\n}\n\n// Apply the mixin to the buttons\n.btn-default { @include btn-styles($btn-default-bg); text-shadow: 0 1px 0 #fff; border-color: #ccc; }\n.btn-primary { @include btn-styles($btn-primary-bg); }\n.btn-success { @include btn-styles($btn-success-bg); }\n.btn-warning { @include btn-styles($btn-warning-bg); }\n.btn-danger  { @include btn-styles($btn-danger-bg); }\n.btn-info    { @include btn-styles($btn-info-bg); }\n\n\n\n//\n// Images\n// --------------------------------------------------\n\n.thumbnail,\n.img-thumbnail {\n  @include box-shadow(0 1px 2px rgba(0,0,0,.075));\n}\n\n\n\n//\n// Dropdowns\n// --------------------------------------------------\n\n.dropdown-menu > li > a:hover,\n.dropdown-menu > li > a:focus,\n.dropdown-menu > .active > a,\n.dropdown-menu > .active > a:hover,\n.dropdown-menu > .active > a:focus {\n  @include gradient-vertical($start-color: $dropdown-link-hover-bg, $end-color: darken($dropdown-link-hover-bg, 5%));\n  background-color: darken($dropdown-link-hover-bg, 5%);\n}\n\n\n\n//\n// Navbar\n// --------------------------------------------------\n\n// Basic navbar\n.navbar {\n  @include gradient-vertical($start-color: lighten($navbar-default-bg, 10%), $end-color: $navbar-default-bg);\n  border-radius: $navbar-border-radius;\n  $shadow: inset 0 1px 0 rgba(255,255,255,.15), 0 1px 5px rgba(0,0,0,.075);\n  @include box-shadow($shadow);\n\n  .navbar-nav > .active > a {\n    background-color: $navbar-default-bg;\n  }\n}\n.navbar-brand,\n.navbar-nav > li > a {\n  text-shadow: 0 1px 0 rgba(255,255,255,.25);\n}\n\n// Inverted navbar\n.navbar-inverse {\n  @include gradient-vertical($start-color: lighten($navbar-inverse-bg, 10%), $end-color: $navbar-inverse-bg);\n\n  .navbar-nav > .active > a {\n    background-color: $navbar-inverse-bg;\n  }\n\n  .navbar-brand,\n  .navbar-nav > li > a {\n    text-shadow: 0 -1px 0 rgba(0,0,0,.25);\n  }\n}\n\n// Undo rounded corners in static and fixed navbars\n.navbar-static-top,\n.navbar-fixed-top,\n.navbar-fixed-bottom {\n  border-radius: 0;\n}\n\n\n\n//\n// Alerts\n// --------------------------------------------------\n\n// Common styles\n.alert {\n  text-shadow: 0 1px 0 rgba(255,255,255,.2);\n  $shadow: inset 0 1px 0 rgba(255,255,255,.25), 0 1px 2px rgba(0,0,0,.05);\n  @include box-shadow($shadow);\n}\n\n// Mixin for generating new styles\n@mixin alert-styles($color) {\n  @include gradient-vertical($start-color: $color, $end-color: darken($color, 7.5%));\n  border-color: darken($color, 15%);\n}\n\n// Apply the mixin to the alerts\n.alert-success    { @include alert-styles($alert-success-bg); }\n.alert-info       { @include alert-styles($alert-info-bg); }\n.alert-warning    { @include alert-styles($alert-warning-bg); }\n.alert-danger     { @include alert-styles($alert-danger-bg); }\n\n\n\n//\n// Progress bars\n// --------------------------------------------------\n\n// Give the progress background some depth\n.progress {\n  @include gradient-vertical($start-color: darken($progress-bg, 4%), $end-color: $progress-bg)\n}\n\n// Mixin for generating new styles\n@mixin progress-bar-styles($color) {\n  @include gradient-vertical($start-color: $color, $end-color: darken($color, 10%));\n}\n\n// Apply the mixin to the progress bars\n.progress-bar            { @include progress-bar-styles($progress-bar-bg); }\n.progress-bar-success    { @include progress-bar-styles($progress-bar-success-bg); }\n.progress-bar-info       { @include progress-bar-styles($progress-bar-info-bg); }\n.progress-bar-warning    { @include progress-bar-styles($progress-bar-warning-bg); }\n.progress-bar-danger     { @include progress-bar-styles($progress-bar-danger-bg); }\n\n\n\n//\n// List groups\n// --------------------------------------------------\n\n.list-group {\n  border-radius: $border-radius-base;\n  @include box-shadow(0 1px 2px rgba(0,0,0,.075));\n}\n.list-group-item.active,\n.list-group-item.active:hover,\n.list-group-item.active:focus {\n  text-shadow: 0 -1px 0 darken($list-group-active-bg, 10%);\n  @include gradient-vertical($start-color: $list-group-active-bg, $end-color: darken($list-group-active-bg, 7.5%));\n  border-color: darken($list-group-active-border, 7.5%);\n}\n\n\n\n//\n// Panels\n// --------------------------------------------------\n\n// Common styles\n.panel {\n  @include box-shadow(0 1px 2px rgba(0,0,0,.05));\n}\n\n// Mixin for generating new styles\n@mixin panel-heading-styles($color) {\n  @include gradient-vertical($start-color: $color, $end-color: darken($color, 5%));\n}\n\n// Apply the mixin to the panel headings only\n.panel-default > .panel-heading   { @include panel-heading-styles($panel-default-heading-bg); }\n.panel-primary > .panel-heading   { @include panel-heading-styles($panel-primary-heading-bg); }\n.panel-success > .panel-heading   { @include panel-heading-styles($panel-success-heading-bg); }\n.panel-info > .panel-heading      { @include panel-heading-styles($panel-info-heading-bg); }\n.panel-warning > .panel-heading   { @include panel-heading-styles($panel-warning-heading-bg); }\n.panel-danger > .panel-heading    { @include panel-heading-styles($panel-danger-heading-bg); }\n\n\n\n//\n// Wells\n// --------------------------------------------------\n\n.well {\n  @include gradient-vertical($start-color: darken($well-bg, 5%), $end-color: $well-bg);\n  border-color: darken($well-bg, 10%);\n  $shadow: inset 0 1px 3px rgba(0,0,0,.05), 0 1px 0 rgba(255,255,255,.1);\n  @include box-shadow($shadow);\n}\n"
  },
  {
    "path": "content/scss/bootstrap/_thumbnails.scss",
    "content": "//\n// Thumbnails\n// --------------------------------------------------\n\n\n// Mixin and adjust the regular image class\n.thumbnail {\n  @extend .img-thumbnail;\n  display: block; // Override the inline-block from `.img-thumbnail`\n\n  > img {\n    @include img-responsive();\n  }\n}\n\n\n// Add a hover state for linked versions only\na.thumbnail:hover,\na.thumbnail:focus {\n  border-color: $link-color;\n}\n\n// Images and captions\n.thumbnail > img {\n  margin-left: auto;\n  margin-right: auto;\n}\n.thumbnail .caption {\n  padding: $thumbnail-caption-padding;\n  color: $thumbnail-caption-color;\n}\n"
  },
  {
    "path": "content/scss/bootstrap/_tooltip.scss",
    "content": "//\n// Tooltips\n// --------------------------------------------------\n\n\n// Base class\n.tooltip {\n  position: absolute;\n  z-index: $zindex-tooltip;\n  display: block;\n  visibility: visible;\n  font-size: $font-size-small;\n  line-height: 1.4;\n  @include opacity(0);\n\n  &.in     { @include opacity(.9); }\n  &.top    { margin-top:  -3px; padding: 5px 0; }\n  &.right  { margin-left:  3px; padding: 0 5px; }\n  &.bottom { margin-top:   3px; padding: 5px 0; }\n  &.left   { margin-left: -3px; padding: 0 5px; }\n}\n\n// Wrapper for the tooltip content\n.tooltip-inner {\n  max-width: $tooltip-max-width;\n  padding: 3px 8px;\n  color: $tooltip-color;\n  text-align: center;\n  text-decoration: none;\n  background-color: $tooltip-bg;\n  border-radius: $border-radius-base;\n}\n\n// Arrows\n.tooltip-arrow {\n  position: absolute;\n  width: 0;\n  height: 0;\n  border-color: transparent;\n  border-style: solid;\n}\n.tooltip {\n  &.top .tooltip-arrow {\n    bottom: 0;\n    left: 50%;\n    margin-left: -$tooltip-arrow-width;\n    border-width: $tooltip-arrow-width $tooltip-arrow-width 0;\n    border-top-color: $tooltip-arrow-color;\n  }\n  &.top-left .tooltip-arrow {\n    bottom: 0;\n    left: 5px;\n    border-width: $tooltip-arrow-width $tooltip-arrow-width 0;\n    border-top-color: $tooltip-arrow-color;\n  }\n  &.top-right .tooltip-arrow {\n    bottom: 0;\n    right: 5px;\n    border-width: $tooltip-arrow-width $tooltip-arrow-width 0;\n    border-top-color: $tooltip-arrow-color;\n  }\n  &.right .tooltip-arrow {\n    top: 50%;\n    left: 0;\n    margin-top: -$tooltip-arrow-width;\n    border-width: $tooltip-arrow-width $tooltip-arrow-width $tooltip-arrow-width 0;\n    border-right-color: $tooltip-arrow-color;\n  }\n  &.left .tooltip-arrow {\n    top: 50%;\n    right: 0;\n    margin-top: -$tooltip-arrow-width;\n    border-width: $tooltip-arrow-width 0 $tooltip-arrow-width $tooltip-arrow-width;\n    border-left-color: $tooltip-arrow-color;\n  }\n  &.bottom .tooltip-arrow {\n    top: 0;\n    left: 50%;\n    margin-left: -$tooltip-arrow-width;\n    border-width: 0 $tooltip-arrow-width $tooltip-arrow-width;\n    border-bottom-color: $tooltip-arrow-color;\n  }\n  &.bottom-left .tooltip-arrow {\n    top: 0;\n    left: 5px;\n    border-width: 0 $tooltip-arrow-width $tooltip-arrow-width;\n    border-bottom-color: $tooltip-arrow-color;\n  }\n  &.bottom-right .tooltip-arrow {\n    top: 0;\n    right: 5px;\n    border-width: 0 $tooltip-arrow-width $tooltip-arrow-width;\n    border-bottom-color: $tooltip-arrow-color;\n  }\n}\n"
  },
  {
    "path": "content/scss/bootstrap/_type.scss",
    "content": "//\n// Typography\n// --------------------------------------------------\n\n\n// Body text\n// -------------------------\n\np {\n  margin: 0 0 ($line-height-computed / 2);\n}\n.lead {\n  margin-bottom: $line-height-computed;\n  font-size: ($font-size-base * 1.15);\n  font-weight: 200;\n  line-height: 1.4;\n\n  @media (min-width: 768px) {\n    font-size: ($font-size-base * 1.5);\n  }\n}\n\n\n// Emphasis & misc\n// -------------------------\n\n// Ex: 14px base font * 85% = about 12px\nsmall   { font-size: 85%; }\n\n// Undo browser default styling\ncite    { font-style: normal; }\n\n// Contextual emphasis\n.text-muted          { color: $text-muted; }\n.text-primary        { color: $brand-primary; }\n.text-warning        { color: $state-warning-text; }\n.text-danger         { color: $state-danger-text; }\n.text-success        { color: $state-success-text; }\n.text-info           { color: $state-info-text; }\n\n// Alignment\n.text-left           { text-align: left; }\n.text-right          { text-align: right; }\n.text-center         { text-align: center; }\n\n\n// Headings\n// -------------------------\n\nh1, h2, h3, h4, h5, h6,\n.h1, .h2, .h3, .h4, .h5, .h6 {\n  font-family: $headings-font-family;\n  font-weight: $headings-font-weight;\n  line-height: $headings-line-height;\n  small {\n    font-weight: normal;\n    line-height: 1;\n    color: $headings-small-color;\n  }\n}\n\nh1,\nh2,\nh3 {\n  margin-top: $line-height-computed;\n  margin-bottom: ($line-height-computed / 2);\n}\nh4,\nh5,\nh6 {\n  margin-top: ($line-height-computed / 2);\n  margin-bottom: ($line-height-computed / 2);\n}\n\nh1, .h1 { font-size: floor($font-size-base * 2.15); } // ~30px\nh2, .h2 { font-size: floor($font-size-base * 1.75); } // ~24px\nh3, .h3 { font-size: floor($font-size-base * 1.50); } // ~21px\nh4, .h4 { font-size: ceil($font-size-base * 1.25); } // ~18px\nh5, .h5 { font-size: ceil($font-size-base * 1.1); } // ~16px\nh6, .h6 { font-size:  $font-size-base; }\n\nh1 small, .h1 small { font-size: ceil($font-size-base * 1.25); } // ~18px\nh2 small, .h2 small { font-size: ceil($font-size-base * 1.1); } // ~16px\nh3 small, .h3 small,\nh4 small, .h4 small { font-size: $font-size-base; }\n\n\n// Page header\n// -------------------------\n\n.page-header {\n  padding-bottom: (($line-height-computed / 2) - 1);\n  margin: ($line-height-computed * 2) 0 $line-height-computed;\n  border-bottom: 1px solid $page-header-border-color;\n}\n\n\n\n// Lists\n// --------------------------------------------------\n\n// Unordered and Ordered lists\nul,\nol {\n  margin-top: 0;\n  margin-bottom: ($line-height-computed / 2);\n  ul,\n  ol{\n    margin-bottom: 0;\n  }\n}\n\n// List options\n\n// Unstyled keeps list items block level, just removes default browser padding and list-style\n.list-unstyled {\n  padding-left: 0;\n  list-style: none;\n}\n// Inline turns list items into inline-block\n.list-inline {\n  @extend .list-unstyled;\n  > li {\n    display: inline-block;\n    padding-left: 5px;\n    padding-right: 5px;\n  }\n}\n\n// Description Lists\ndl {\n  margin-bottom: $line-height-computed;\n}\ndt,\ndd {\n  line-height: $line-height-base;\n}\ndt {\n  font-weight: bold;\n}\ndd {\n  margin-left: 0; // Undo browser default\n}\n\n// Horizontal description lists\n//\n// Defaults to being stacked without any of the below styles applied, until the\n// grid breakpoint is reached (default of ~768px).\n\n@media (min-width: $grid-float-breakpoint) {\n  .dl-horizontal {\n    dt {\n      float: left;\n      width: ($component-offset-horizontal - 20);\n      clear: left;\n      text-align: right;\n      @include text-overflow();\n    }\n    dd {\n      margin-left: $component-offset-horizontal;\n      @include clearfix(); // Clear the floated `dt` if an empty `dd` is present\n    }\n  }\n}\n\n// MISC\n// ----\n\n// Abbreviations and acronyms\nabbr[title],\n// Added data-* attribute to help out our tooltip plugin, per https://github.com/twbs/bootstrap/issues/5257\nabbr[data-original-title] {\n  cursor: help;\n  border-bottom: 1px dotted $abbr-border-color;\n}\nabbr.initialism {\n  font-size: 90%;\n  text-transform: uppercase;\n}\n\n// Blockquotes\nblockquote {\n  padding: ($line-height-computed / 2) $line-height-computed;\n  margin: 0 0 $line-height-computed;\n  border-left: 5px solid $blockquote-border-color;\n  p {\n    font-size: ($font-size-base * 1.25);\n    font-weight: 300;\n    line-height: 1.25;\n  }\n  p:last-child {\n    margin-bottom: 0;\n  }\n  small {\n    display: block;\n    line-height: $line-height-base;\n    color: $blockquote-small-color;\n    &:before {\n      content: '\\2014 \\00A0';// EM DASH, NBSP\n    }\n  }\n\n  // Float right with text-align: right\n  &.pull-right {\n    padding-right: 15px;\n    padding-left: 0;\n    border-right: 5px solid $blockquote-border-color;\n    border-left: 0;\n    p,\n    small {\n      text-align: right;\n    }\n    small {\n      &:before {\n        content: '';\n      }\n      &:after {\n        content: '\\00A0 \\2014';// NBSP, EM DASH\n      }\n    }\n  }\n}\n\n// Quotes\nq:before,\nq:after,\nblockquote:before,\nblockquote:after {\n  content: \"\";\n}\n\n// Addresses\naddress {\n  display: block;\n  margin-bottom: $line-height-computed;\n  font-style: normal;\n  line-height: $line-height-base;\n}\n"
  },
  {
    "path": "content/scss/bootstrap/_utilities.scss",
    "content": "//\n// Utility classes\n// --------------------------------------------------\n\n\n// Floats\n// -------------------------\n\n.clearfix {\n  @include clearfix();\n}\n.pull-right {\n  float: right !important;\n}\n.pull-left {\n  float: left !important;\n}\n\n\n// Toggling content\n// -------------------------\n\n.hide {\n  display: none !important;\n}\n.show {\n  display: block !important;\n}\n.invisible {\n  visibility: hidden;\n}\n.text-hide {\n  @include hide-text();\n}\n\n\n// For Affix plugin\n// -------------------------\n\n.affix {\n  position: fixed;\n}\n"
  },
  {
    "path": "content/scss/bootstrap/_variables.scss",
    "content": "//\n// Variables\n// --------------------------------------------------\n\n\n// Global values\n// --------------------------------------------------\n\n// Grays\n// -------------------------\n\n$gray-darker:            lighten(#000, 13.5%) !default; // #222\n$gray-dark:              lighten(#000, 20%) !default;   // #333\n$gray:                   lighten(#000, 33.5%) !default; // #555\n$gray-light:             lighten(#000, 60%) !default;   // #999\n$gray-lighter:           lighten(#000, 93.5%) !default; // #eee\n\n// Brand colors\n// -------------------------\n\n$brand-primary:         #4F8EF7 !default;\n$brand-success:         #5cb85c !default;\n$brand-warning:         #f0ad4e !default;\n$brand-danger:          #d9534f !default;\n$brand-info:            #5bc0de !default;\n\n// Scaffolding\n// -------------------------\n\n$body-bg:               #fff !default;\n$text-color:            #333 !default;\n\n// Links\n// -------------------------\n\n$link-color:            $brand-primary !default;\n$link-hover-color:      darken($link-color, 15%) !default;\n\n// Typography\n// -------------------------\n\n$font-family-sans-serif:  \"Helvetica Neue\", Helvetica, Arial, \"Lucida Grande\", sans-serif !default;\n$font-family-serif:       Georgia, \"Times New Roman\", Times, serif !default;\n$font-family-monospace:   Monaco, Menlo, Consolas, \"Courier New\", monospace !default;\n$font-family-base:        $font-family-sans-serif !default;\n$font-family-medium:      \"AvenirNextLTPro-Medium\", \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n$font-family-regular:     \"AvenirNextLTPro-Regular\", \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n\n// consolidated Avenir font w/ different weights (how it should be)\n$font-family-avenir: 'Avenir Next', 'Helvetica Neue', Helvetica, sans-serif;\n\n$font-size-base:          15px !default;\n$font-size-large:         ceil($font-size-base * 1.25) !default; // ~18px\n$font-size-small:         ceil($font-size-base * 0.85) !default; // ~12px\n\n$line-height-base:        1.428571429 !default; // 20/14\n$line-height-computed:    floor($font-size-base * $line-height-base) !default; // ~20px\n\n$headings-font-family:    $font-family-base !default;\n$headings-font-weight:    500 !default;\n$headings-line-height:    1.1 !default;\n$headings-color:          #333;\n\n// Iconography\n// -------------------------\n\n$icon-font-path:          \"../fonts/\" !default;\n$icon-font-name:          \"glyphicons-halflings-regular\" !default;\n\n\n// Components\n// -------------------------\n// Based on 14px font-size and 1.428 line-height (~20px to start)\n\n$padding-base-vertical:          6px !default;\n$padding-base-horizontal:        12px !default;\n\n$padding-large-vertical:         10px !default;\n$padding-large-horizontal:       16px !default;\n\n$padding-small-vertical:         5px !default;\n$padding-small-horizontal:       10px !default;\n\n$line-height-large:              1.33 !default;\n$line-height-small:              1.5 !default;\n\n$border-radius-base:             2px !default;\n$border-radius-large:            6px !default;\n$border-radius-small:            3px !default;\n\n$component-active-bg:            $brand-primary !default;\n\n$caret-width-base:               4px !default;\n$caret-width-large:              5px !default;\n\n// Tables\n// -------------------------\n\n$table-cell-padding:                 8px !default;\n$table-condensed-cell-padding:       5px !default;\n\n$table-bg:                           transparent !default; // overall background-color\n$table-bg-accent:                    #f9f9f9 !default; // for striping\n$table-bg-hover:                     #f5f5f5 !default;\n$table-bg-active:                    $table-bg-hover !default;\n\n$table-border-color:                 #ddd !default; // table and cell border\n\n\n// Buttons\n// -------------------------\n\n$btn-font-weight:                normal !default;\n\n$btn-default-color:              #333 !default;\n$btn-default-bg:                 #fff !default;\n$btn-default-border:             #ccc !default;\n\n$btn-primary-color:              #fff !default;\n$btn-primary-bg:                 $brand-primary !default;\n$btn-primary-border:             $brand-primary !default;\n\n$btn-success-color:              #fff !default;\n$btn-success-bg:                 $brand-success !default;\n$btn-success-border:             darken($btn-success-bg, 5%) !default;\n\n$btn-warning-color:              #fff !default;\n$btn-warning-bg:                 $brand-warning !default;\n$btn-warning-border:             darken($btn-warning-bg, 5%) !default;\n\n$btn-danger-color:               #fff !default;\n$btn-danger-bg:                  $brand-danger !default;\n$btn-danger-border:              darken($btn-danger-bg, 5%) !default;\n\n$btn-info-color:                 #fff !default;\n$btn-info-bg:                    $brand-info !default;\n$btn-info-border:                darken($btn-info-bg, 5%) !default;\n\n$btn-link-disabled-color:        $gray-light !default;\n\n\n// Forms\n// -------------------------\n\n$input-bg:                       #fff !default;\n$input-bg-disabled:              $gray-lighter !default;\n\n$input-color:                    $gray !default;\n$input-border:                   #ccc !default;\n$input-border-radius:            $border-radius-base !default;\n$input-border-focus:             #66afe9 !default;\n\n$input-color-placeholder:        $gray-light !default;\n\n$input-height-base:              ($line-height-computed + ($padding-base-vertical * 2) + 2) !default;\n$input-height-large:             (floor($font-size-large * $line-height-large) + ($padding-large-vertical * 2) + 2) !default;\n$input-height-small:             (floor($font-size-small * $line-height-small) + ($padding-small-vertical * 2) + 2) !default;\n\n$legend-color:                   $gray-dark !default;\n$legend-border-color:            #e5e5e5 !default;\n\n$input-group-addon-bg:           $gray-lighter !default;\n$input-group-addon-border-color: $input-border !default;\n\n\n// Dropdowns\n// -------------------------\n\n$dropdown-bg:                    #fff !default;\n$dropdown-border:                rgba(0,0,0,.15) !default;\n$dropdown-fallback-border:       #ccc !default;\n$dropdown-divider-bg:            #e5e5e5 !default;\n\n$dropdown-link-active-color:     #fff !default;\n$dropdown-link-active-bg:        $component-active-bg !default;\n\n$dropdown-link-color:            $gray-dark !default;\n$dropdown-link-hover-color:      #fff !default;\n$dropdown-link-hover-bg:         $dropdown-link-active-bg !default;\n\n$dropdown-link-disabled-color:   $gray-light !default;\n\n$dropdown-header-color:          $gray-light !default;\n\n$dropdown-caret-color:           #000 !default;\n\n\n// COMPONENT VARIABLES\n// --------------------------------------------------\n\n\n// Z-index master list\n// -------------------------\n// Used for a bird's eye view of components dependent on the z-axis\n// Try to avoid customizing these :)\n\n$zindex-navbar:            1000 !default;\n$zindex-dropdown:          1000 !default;\n$zindex-popover:           1010 !default;\n$zindex-tooltip:           1030 !default;\n$zindex-navbar-fixed:      1030 !default;\n$zindex-modal-background:  1040 !default;\n$zindex-modal:             1050 !default;\n\n// Media queries breakpoints\n// --------------------------------------------------\n\n// Extra small screen / phone\n$screen-xs:                  480px !default;\n$screen-phone:               $screen-xs !default;\n\n// Small screen / tablet\n$screen-sm:                  768px !default;\n$screen-tablet:              $screen-sm !default;\n\n// Medium screen / desktop\n$screen-md:                  992px !default;\n$screen-desktop:             $screen-md !default;\n\n// Large screen / wide desktop\n$screen-lg:                  1200px !default;\n$screen-lg-desktop:          $screen-lg !default;\n\n// So media queries don't overlap when required, provide a maximum\n$screen-xs-max:              ($screen-sm - 1) !default;\n$screen-sm-max:              ($screen-md - 1) !default;\n$screen-md-max:              ($screen-lg - 1) !default;\n\n\n// Grid system\n// --------------------------------------------------\n\n// Number of columns in the grid system\n$grid-columns:              12 !default;\n// Padding, to be divided by two and applied to the left and right of all columns\n$grid-gutter-width:         30px !default;\n// Point at which the navbar stops collapsing\n$grid-float-breakpoint:     $screen-tablet !default;\n\n\n// Navbar\n// -------------------------\n\n// Basics of a navbar\n$navbar-height:                    73px !default;\n$navbar-margin-bottom:             0;\n$navbar-default-color:             #777 !default;\n$navbar-default-bg:                #f8f8f8 !default;\n$navbar-default-border:            darken($navbar-default-bg, 6.5%) !default;\n$navbar-border-radius:             $border-radius-base !default;\n$navbar-padding-horizontal:        floor($grid-gutter-width / 2) !default;\n$navbar-padding-vertical:          (($navbar-height - $line-height-computed) / 2) !default;\n\n// Navbar links\n$navbar-default-link-color:                $brand-primary  !default;\n$navbar-default-link-hover-color:          $brand-primary !default;\n$navbar-default-link-hover-bg:             transparent !default;\n$navbar-default-link-active-color:         $brand-primary !default;\n$navbar-default-link-active-bg:            darken($navbar-default-bg, 6.5%) !default;\n$navbar-default-link-disabled-color:       #ccc !default;\n$navbar-default-link-disabled-bg:          transparent !default;\n\n// Navbar brand label\n$navbar-default-brand-color:               $navbar-default-link-color !default;\n$navbar-default-brand-hover-color:         darken($navbar-default-link-color, 10%) !default;\n$navbar-default-brand-hover-bg:            transparent !default;\n\n// Navbar toggle\n$navbar-default-toggle-hover-bg:           #ddd !default;\n$navbar-default-toggle-icon-bar-bg:        #ccc !default;\n$navbar-default-toggle-border-color:       #ddd !default;\n\n\n// Inverted navbar\n//\n// Reset inverted navbar basics\n$navbar-inverse-color:                      $gray-light !default;\n$navbar-inverse-bg:                         #222 !default;\n$navbar-inverse-border:                     darken($navbar-inverse-bg, 10%) !default;\n\n// Inverted navbar links\n$navbar-inverse-link-color:                 $gray-light !default;\n$navbar-inverse-link-hover-color:           #fff !default;\n$navbar-inverse-link-hover-bg:              transparent !default;\n$navbar-inverse-link-active-color:          $navbar-inverse-link-hover-color !default;\n$navbar-inverse-link-active-bg:             darken($navbar-inverse-bg, 10%) !default;\n$navbar-inverse-link-disabled-color:        #444 !default;\n$navbar-inverse-link-disabled-bg:           transparent !default;\n\n// Inverted navbar brand label\n$navbar-inverse-brand-color:                $navbar-inverse-link-color !default;\n$navbar-inverse-brand-hover-color:          #fff !default;\n$navbar-inverse-brand-hover-bg:             transparent !default;\n\n// Inverted navbar search\n// Normal navbar needs no special styles or vars\n$navbar-inverse-search-bg:                  lighten($navbar-inverse-bg, 25%) !default;\n$navbar-inverse-search-bg-focus:            #fff !default;\n$navbar-inverse-search-border:              $navbar-inverse-bg !default;\n$navbar-inverse-search-placeholder-color:   #ccc !default;\n\n// Inverted navbar toggle\n$navbar-inverse-toggle-hover-bg:            #333 !default;\n$navbar-inverse-toggle-icon-bar-bg:         #fff !default;\n$navbar-inverse-toggle-border-color:        #333 !default;\n\n\n// Navs\n// -------------------------\n\n$nav-link-padding:                          10px 15px !default;\n$nav-link-hover-bg:                         $gray-lighter !default;\n\n$nav-disabled-link-color:                   $gray-light !default;\n$nav-disabled-link-hover-color:             $gray-light !default;\n\n$nav-open-link-hover-color:                 #fff !default;\n$nav-open-caret-border-color:               #fff !default;\n\n// Tabs\n$nav-tabs-border-color:                     #ddd !default;\n\n$nav-tabs-link-hover-border-color:          $gray-lighter !default;\n\n$nav-tabs-active-link-hover-bg:             $body-bg !default;\n$nav-tabs-active-link-hover-color:          $gray !default;\n$nav-tabs-active-link-hover-border-color:   #ddd !default;\n\n$nav-tabs-justified-link-border-color:            #ddd !default;\n$nav-tabs-justified-active-link-border-color:     $body-bg !default;\n\n// Pills\n$nav-pills-active-link-hover-bg:            $component-active-bg !default;\n$nav-pills-active-link-hover-color:         #fff !default;\n\n\n// Pagination\n// -------------------------\n\n$pagination-bg:                        #fff !default;\n$pagination-border:                    #ddd !default;\n\n$pagination-hover-bg:                  $gray-lighter !default;\n\n$pagination-active-bg:                 $brand-primary !default;\n$pagination-active-color:              #fff !default;\n\n$pagination-disabled-color:            $gray-light !default;\n\n\n// Pager\n// -------------------------\n\n$pager-border-radius:                  15px !default;\n$pager-disabled-color:                 $gray-light !default;\n\n\n// Jumbotron\n// -------------------------\n\n$jumbotron-padding:              30px !default;\n$jumbotron-color:                inherit !default;\n$jumbotron-bg:                   $gray-lighter !default;\n\n$jumbotron-heading-color:        inherit !default;\n\n\n// Form states and alerts\n// -------------------------\n\n$state-warning-text:             #c09853 !default;\n$state-warning-bg:               #fcf8e3 !default;\n$state-warning-border:           darken(adjust-hue($state-warning-bg, -10), 3%) !default;\n\n$state-danger-text:              #b94a48 !default;\n$state-danger-bg:                #f2dede !default;\n$state-danger-border:            darken(adjust-hue($state-danger-bg, -10), 3%) !default;\n\n$state-success-text:             #468847 !default;\n$state-success-bg:               #dff0d8 !default;\n$state-success-border:           darken(adjust-hue($state-success-bg, -10), 5%) !default;\n\n$state-info-text:                #3a87ad !default;\n$state-info-bg:                  #d9edf7 !default;\n$state-info-border:              darken(adjust-hue($state-info-bg, -10), 7%) !default;\n\n\n// Tooltips\n// -------------------------\n$tooltip-max-width:           200px !default;\n$tooltip-color:               #fff !default;\n$tooltip-bg:                  #000 !default;\n\n$tooltip-arrow-width:         5px !default;\n$tooltip-arrow-color:         $tooltip-bg !default;\n\n\n// Popovers\n// -------------------------\n$popover-bg:                          #fff !default;\n$popover-max-width:                   276px !default;\n$popover-border-color:                rgba(0,0,0,.2) !default;\n$popover-fallback-border-color:       #ccc !default;\n\n$popover-title-bg:                    darken($popover-bg, 3%) !default;\n\n$popover-arrow-width:                 10px !default;\n$popover-arrow-color:                 #fff !default;\n\n$popover-arrow-outer-width:           ($popover-arrow-width + 1) !default;\n$popover-arrow-outer-color:           rgba(0,0,0,.25) !default;\n$popover-arrow-outer-fallback-color:  #999 !default;\n\n\n// Labels\n// -------------------------\n\n$label-default-bg:            $gray-light !default;\n$label-primary-bg:            $brand-primary !default;\n$label-success-bg:            $brand-success !default;\n$label-info-bg:               $brand-info !default;\n$label-warning-bg:            $brand-warning !default;\n$label-danger-bg:             $brand-danger !default;\n\n$label-color:                 #fff !default;\n$label-link-hover-color:      #fff !default;\n\n\n// Modals\n// -------------------------\n$modal-inner-padding:         20px !default;\n\n$modal-title-padding:         15px !default;\n$modal-title-line-height:     $line-height-base !default;\n\n$modal-content-bg:                             #fff !default;\n$modal-content-border-color:                   rgba(0,0,0,.2) !default;\n$modal-content-fallback-border-color:          #999 !default;\n\n$modal-backdrop-bg:           #000 !default;\n$modal-header-border-color:   #e5e5e5 !default;\n$modal-footer-border-color:   $modal-header-border-color !default;\n\n\n// Alerts\n// -------------------------\n$alert-padding:               15px !default;\n$alert-border-radius:         $border-radius-base !default;\n$alert-link-font-weight:      bold !default;\n\n$alert-success-bg:            $state-success-bg !default;\n$alert-success-text:          $state-success-text !default;\n$alert-success-border:        $state-success-border !default;\n\n$alert-info-bg:               $state-info-bg !default;\n$alert-info-text:             $state-info-text !default;\n$alert-info-border:           $state-info-border !default;\n\n$alert-warning-bg:            $state-warning-bg !default;\n$alert-warning-text:          $state-warning-text !default;\n$alert-warning-border:        $state-warning-border !default;\n\n$alert-danger-bg:             $state-danger-bg !default;\n$alert-danger-text:           $state-danger-text !default;\n$alert-danger-border:         $state-danger-border !default;\n\n\n// Progress bars\n// -------------------------\n$progress-bg:                 #f5f5f5 !default;\n$progress-bar-color:          #fff !default;\n\n$progress-bar-bg:             $brand-primary !default;\n$progress-bar-success-bg:     $brand-success !default;\n$progress-bar-warning-bg:     $brand-warning !default;\n$progress-bar-danger-bg:      $brand-danger !default;\n$progress-bar-info-bg:        $brand-info !default;\n\n\n// List group\n// -------------------------\n$list-group-bg:               #fff !default;\n$list-group-border:           #ddd !default;\n$list-group-border-radius:    $border-radius-base !default;\n\n$list-group-hover-bg:         #f5f5f5 !default;\n$list-group-active-color:     #fff !default;\n$list-group-active-bg:        $component-active-bg !default;\n$list-group-active-border:    $list-group-active-bg !default;\n\n$list-group-link-color:          #555 !default;\n$list-group-link-heading-color:  #333 !default;\n\n\n// Panels\n// -------------------------\n$panel-bg:                    #fff !default;\n$panel-inner-border:          #ddd !default;\n$panel-border-radius:         $border-radius-base !default;\n$panel-footer-bg:             #f5f5f5 !default;\n\n$panel-default-text:          $gray-dark !default;\n$panel-default-border:        #ddd !default;\n$panel-default-heading-bg:    #f5f5f5 !default;\n\n$panel-primary-text:          #fff !default;\n$panel-primary-border:        $brand-primary !default;\n$panel-primary-heading-bg:    $brand-primary !default;\n\n$panel-success-text:          $state-success-text !default;\n$panel-success-border:        $state-success-border !default;\n$panel-success-heading-bg:    $state-success-bg !default;\n\n$panel-warning-text:          $state-warning-text !default;\n$panel-warning-border:        $state-warning-border !default;\n$panel-warning-heading-bg:    $state-warning-bg !default;\n\n$panel-danger-text:           $state-danger-text !default;\n$panel-danger-border:         $state-danger-border !default;\n$panel-danger-heading-bg:     $state-danger-bg !default;\n\n$panel-info-text:             $state-info-text !default;\n$panel-info-border:           $state-info-border !default;\n$panel-info-heading-bg:       $state-info-bg !default;\n\n\n// Thumbnails\n// -------------------------\n$thumbnail-padding:           4px !default;\n$thumbnail-bg:                $body-bg !default;\n$thumbnail-border:            #ddd !default;\n$thumbnail-border-radius:     $border-radius-base !default;\n\n$thumbnail-caption-color:     $text-color !default;\n$thumbnail-caption-padding:   9px !default;\n\n\n// Wells\n// -------------------------\n$well-bg:                     #f5f5f5 !default;\n\n\n// Badges\n// -------------------------\n$badge-color:                 #fff !default;\n$badge-link-hover-color:      #fff !default;\n$badge-bg:                    $gray-light !default;\n\n$badge-active-color:          $link-color !default;\n$badge-active-bg:             #fff !default;\n\n$badge-font-weight:           bold !default;\n$badge-line-height:           1 !default;\n$badge-border-radius:         10px !default;\n\n\n// Breadcrumbs\n// -------------------------\n$breadcrumb-bg:               #f5f5f5 !default;\n$breadcrumb-color:            #ccc !default;\n$breadcrumb-active-color:     $gray-light !default;\n\n\n// Carousel\n// ------------------------\n\n$carousel-text-shadow:                        0 1px 2px rgba(0,0,0,.6) !default;\n\n$carousel-control-color:                      #fff !default;\n$carousel-control-width:                      15% !default;\n$carousel-control-opacity:                    .5 !default;\n$carousel-control-font-size:                  20px !default;\n\n$carousel-indicator-active-bg:                #fff !default;\n$carousel-indicator-border-color:             #fff !default;\n\n$carousel-caption-color:                      #fff !default;\n\n\n// Close\n// ------------------------\n$close-color:                 #000 !default;\n$close-font-weight:           bold !default;\n$close-text-shadow:           0 1px 0 #fff !default;\n\n\n// Code\n// ------------------------\n$code-color:                  #4D8CF4 !default;\n$code-bg:                     whitesmoke !default;\n\n$pre-bg:                      transparent !default;\n$pre-color:                   $gray-dark !default;\n$pre-border-color:            #eee !default;\n$pre-scrollable-max-height:   340px !default;\n\n// Type\n// ------------------------\n$text-muted:                  $gray-light !default;\n$abbr-border-color:           $gray-light !default;\n$headings-small-color:        $gray-light !default;\n$blockquote-small-color:      $gray-light !default;\n$blockquote-border-color:     $gray-lighter !default;\n$page-header-border-color:    $gray-lighter !default;\n\n// Miscellaneous\n// -------------------------\n\n// Hr border color\n$hr-border:                   $gray-lighter !default;\n\n// Horizontal forms & lists\n$component-offset-horizontal: 180px !default;\n\n\n// Container sizes\n// --------------------------------------------------\n\n// Small screen / tablet\n$container-tablet:            ((720px + $grid-gutter-width)) !default;\n\n// Medium screen / desktop\n$container-desktop:           ((940px + $grid-gutter-width)) !default;\n\n// Large screen / wide desktop\n$container-lg-desktop:        ((1140px + $grid-gutter-width)) !default;\n"
  },
  {
    "path": "content/scss/bootstrap/_wells.scss",
    "content": "//\n// Wells\n// --------------------------------------------------\n\n\n// Base class\n.well {\n  min-height: 20px;\n  padding: 19px;\n  margin-bottom: 20px;\n  background-color: $well-bg;\n  border: 1px solid darken($well-bg, 7%);\n  border-radius: $border-radius-base;\n  @include box-shadow(inset 0 1px 1px rgba(0,0,0,.05));\n  blockquote {\n    border-color: #ddd;\n    border-color: rgba(0,0,0,.15);\n  }\n}\n\n// Sizes\n.well-lg {\n  padding: 24px;\n  border-radius: $border-radius-large;\n}\n.well-sm {\n  padding: 9px;\n  border-radius: $border-radius-small;\n}\n"
  },
  {
    "path": "content/scss/bootstrap/bootstrap.scss",
    "content": "/*!\n * Bootstrap v3.0.0\n *\n * Copyright 2013 Twitter, Inc\n * Licensed under the Apache License v2.0\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Designed and built with all the love in the world by @mdo and @fat.\n */\n\n// Core variables and mixins\n@import \"variables\";\n@import \"mixins\";\n\n// Reset\n@import \"normalize\";\n@import \"print\";\n\n// Core CSS\n@import \"scaffolding\";\n@import \"type\";\n@import \"code\";\n@import \"grid\";\n@import \"tables\";\n@import \"forms\";\n@import \"buttons\";\n\n// Components\n@import \"component-animations\";\n@import \"glyphicons\";\n@import \"dropdowns\";\n@import \"button-groups\";\n@import \"input-groups\";\n@import \"navs\";\n@import \"navbar\";\n@import \"breadcrumbs\";\n@import \"pagination\";\n@import \"pager\";\n@import \"labels\";\n@import \"badges\";\n@import \"jumbotron\";\n@import \"thumbnails\";\n@import \"alerts\";\n@import \"progress-bars\";\n@import \"media\";\n@import \"list-group\";\n@import \"panels\";\n@import \"wells\";\n@import \"close\";\n\n// Components w/ JavaScript\n@import \"modals\";\n@import \"tooltip\";\n@import \"popovers\";\n@import \"carousel\";\n\n// Utility classes\n@import \"utilities\";\n@import \"responsive-utilities\";\n"
  },
  {
    "path": "content/scss/ionic/_ionic.scss",
    "content": "@charset \"UTF-8\";\n/*!\n * Copyright 2014 Drifty Co.\n * http://drifty.com/\n *\n * Ionic, v1.1.1\n * A powerful HTML5 mobile app framework.\n * https://ionicframework.com/\n *\n * By @maxlynch, @benjsperry, @adamdbradley <3\n *\n * Licensed under the MIT license. Please see LICENSE for more information.\n *\n */\n/*!\n  Ionicons, v2.0.1\n  Created by Ben Sperry for the Ionic Framework, https://ionicons.com/\n  https://twitter.com/benjsperry  https://twitter.com/ionicframework\n  MIT License: https://github.com/ionic-team/ionicons\n\n  Android-style icons originally built by Google’s\n  Material Design Icons: https://github.com/google/material-design-icons\n  used under CC BY http://creativecommons.org/licenses/by/4.0/\n  Modified icons to fit ionicon’s grid from original.\n*/\n\n.ion, .ionicons,\n.ion-alert:before,\n.ion-alert-circled:before,\n.ion-android-add:before,\n.ion-android-add-circle:before,\n.ion-android-alarm-clock:before,\n.ion-android-alert:before,\n.ion-android-apps:before,\n.ion-android-archive:before,\n.ion-android-arrow-back:before,\n.ion-android-arrow-down:before,\n.ion-android-arrow-dropdown:before,\n.ion-android-arrow-dropdown-circle:before,\n.ion-android-arrow-dropleft:before,\n.ion-android-arrow-dropleft-circle:before,\n.ion-android-arrow-dropright:before,\n.ion-android-arrow-dropright-circle:before,\n.ion-android-arrow-dropup:before,\n.ion-android-arrow-dropup-circle:before,\n.ion-android-arrow-forward:before,\n.ion-android-arrow-up:before,\n.ion-android-attach:before,\n.ion-android-bar:before,\n.ion-android-bicycle:before,\n.ion-android-boat:before,\n.ion-android-bookmark:before,\n.ion-android-bulb:before,\n.ion-android-bus:before,\n.ion-android-calendar:before,\n.ion-android-call:before,\n.ion-android-camera:before,\n.ion-android-cancel:before,\n.ion-android-car:before,\n.ion-android-cart:before,\n.ion-android-chat:before,\n.ion-android-checkbox:before,\n.ion-android-checkbox-blank:before,\n.ion-android-checkbox-outline:before,\n.ion-android-checkbox-outline-blank:before,\n.ion-android-checkmark-circle:before,\n.ion-android-clipboard:before,\n.ion-android-close:before,\n.ion-android-cloud:before,\n.ion-android-cloud-circle:before,\n.ion-android-cloud-done:before,\n.ion-android-cloud-outline:before,\n.ion-android-color-palette:before,\n.ion-android-compass:before,\n.ion-android-contact:before,\n.ion-android-contacts:before,\n.ion-android-contract:before,\n.ion-android-create:before,\n.ion-android-delete:before,\n.ion-android-desktop:before,\n.ion-android-document:before,\n.ion-android-done:before,\n.ion-android-done-all:before,\n.ion-android-download:before,\n.ion-android-drafts:before,\n.ion-android-exit:before,\n.ion-android-expand:before,\n.ion-android-favorite:before,\n.ion-android-favorite-outline:before,\n.ion-android-film:before,\n.ion-android-folder:before,\n.ion-android-folder-open:before,\n.ion-android-funnel:before,\n.ion-android-globe:before,\n.ion-android-hand:before,\n.ion-android-hangout:before,\n.ion-android-happy:before,\n.ion-android-home:before,\n.ion-android-image:before,\n.ion-android-laptop:before,\n.ion-android-list:before,\n.ion-android-locate:before,\n.ion-android-lock:before,\n.ion-android-mail:before,\n.ion-android-map:before,\n.ion-android-menu:before,\n.ion-android-microphone:before,\n.ion-android-microphone-off:before,\n.ion-android-more-horizontal:before,\n.ion-android-more-vertical:before,\n.ion-android-navigate:before,\n.ion-android-notifications:before,\n.ion-android-notifications-none:before,\n.ion-android-notifications-off:before,\n.ion-android-open:before,\n.ion-android-options:before,\n.ion-android-people:before,\n.ion-android-person:before,\n.ion-android-person-add:before,\n.ion-android-phone-landscape:before,\n.ion-android-phone-portrait:before,\n.ion-android-pin:before,\n.ion-android-plane:before,\n.ion-android-playstore:before,\n.ion-android-print:before,\n.ion-android-radio-button-off:before,\n.ion-android-radio-button-on:before,\n.ion-android-refresh:before,\n.ion-android-remove:before,\n.ion-android-remove-circle:before,\n.ion-android-restaurant:before,\n.ion-android-sad:before,\n.ion-android-search:before,\n.ion-android-send:before,\n.ion-android-settings:before,\n.ion-android-share:before,\n.ion-android-share-alt:before,\n.ion-android-star:before,\n.ion-android-star-half:before,\n.ion-android-star-outline:before,\n.ion-android-stopwatch:before,\n.ion-android-subway:before,\n.ion-android-sunny:before,\n.ion-android-sync:before,\n.ion-android-textsms:before,\n.ion-android-time:before,\n.ion-android-train:before,\n.ion-android-unlock:before,\n.ion-android-upload:before,\n.ion-android-volume-down:before,\n.ion-android-volume-mute:before,\n.ion-android-volume-off:before,\n.ion-android-volume-up:before,\n.ion-android-walk:before,\n.ion-android-warning:before,\n.ion-android-watch:before,\n.ion-android-wifi:before,\n.ion-aperture:before,\n.ion-archive:before,\n.ion-arrow-down-a:before,\n.ion-arrow-down-b:before,\n.ion-arrow-down-c:before,\n.ion-arrow-expand:before,\n.ion-arrow-graph-down-left:before,\n.ion-arrow-graph-down-right:before,\n.ion-arrow-graph-up-left:before,\n.ion-arrow-graph-up-right:before,\n.ion-arrow-left-a:before,\n.ion-arrow-left-b:before,\n.ion-arrow-left-c:before,\n.ion-arrow-move:before,\n.ion-arrow-resize:before,\n.ion-arrow-return-left:before,\n.ion-arrow-return-right:before,\n.ion-arrow-right-a:before,\n.ion-arrow-right-b:before,\n.ion-arrow-right-c:before,\n.ion-arrow-shrink:before,\n.ion-arrow-swap:before,\n.ion-arrow-up-a:before,\n.ion-arrow-up-b:before,\n.ion-arrow-up-c:before,\n.ion-asterisk:before,\n.ion-at:before,\n.ion-backspace:before,\n.ion-backspace-outline:before,\n.ion-bag:before,\n.ion-battery-charging:before,\n.ion-battery-empty:before,\n.ion-battery-full:before,\n.ion-battery-half:before,\n.ion-battery-low:before,\n.ion-beaker:before,\n.ion-beer:before,\n.ion-bluetooth:before,\n.ion-bonfire:before,\n.ion-bookmark:before,\n.ion-bowtie:before,\n.ion-briefcase:before,\n.ion-bug:before,\n.ion-calculator:before,\n.ion-calendar:before,\n.ion-camera:before,\n.ion-card:before,\n.ion-cash:before,\n.ion-chatbox:before,\n.ion-chatbox-working:before,\n.ion-chatboxes:before,\n.ion-chatbubble:before,\n.ion-chatbubble-working:before,\n.ion-chatbubbles:before,\n.ion-checkmark:before,\n.ion-checkmark-circled:before,\n.ion-checkmark-round:before,\n.ion-chevron-down:before,\n.ion-chevron-left:before,\n.ion-chevron-right:before,\n.ion-chevron-up:before,\n.ion-clipboard:before,\n.ion-clock:before,\n.ion-close:before,\n.ion-close-circled:before,\n.ion-close-round:before,\n.ion-closed-captioning:before,\n.ion-cloud:before,\n.ion-code:before,\n.ion-code-download:before,\n.ion-code-working:before,\n.ion-coffee:before,\n.ion-compass:before,\n.ion-compose:before,\n.ion-connection-bars:before,\n.ion-contrast:before,\n.ion-crop:before,\n.ion-cube:before,\n.ion-disc:before,\n.ion-document:before,\n.ion-document-text:before,\n.ion-drag:before,\n.ion-earth:before,\n.ion-easel:before,\n.ion-edit:before,\n.ion-egg:before,\n.ion-eject:before,\n.ion-email:before,\n.ion-email-unread:before,\n.ion-erlenmeyer-flask:before,\n.ion-erlenmeyer-flask-bubbles:before,\n.ion-eye:before,\n.ion-eye-disabled:before,\n.ion-female:before,\n.ion-filing:before,\n.ion-film-marker:before,\n.ion-fireball:before,\n.ion-flag:before,\n.ion-flame:before,\n.ion-flash:before,\n.ion-flash-off:before,\n.ion-folder:before,\n.ion-fork:before,\n.ion-fork-repo:before,\n.ion-forward:before,\n.ion-funnel:before,\n.ion-gear-a:before,\n.ion-gear-b:before,\n.ion-grid:before,\n.ion-hammer:before,\n.ion-happy:before,\n.ion-happy-outline:before,\n.ion-headphone:before,\n.ion-heart:before,\n.ion-heart-broken:before,\n.ion-help:before,\n.ion-help-buoy:before,\n.ion-help-circled:before,\n.ion-home:before,\n.ion-icecream:before,\n.ion-image:before,\n.ion-images:before,\n.ion-information:before,\n.ion-information-circled:before,\n.ion-ionic:before,\n.ion-ios-alarm:before,\n.ion-ios-alarm-outline:before,\n.ion-ios-albums:before,\n.ion-ios-albums-outline:before,\n.ion-ios-americanfootball:before,\n.ion-ios-americanfootball-outline:before,\n.ion-ios-analytics:before,\n.ion-ios-analytics-outline:before,\n.ion-ios-arrow-back:before,\n.ion-ios-arrow-down:before,\n.ion-ios-arrow-forward:before,\n.ion-ios-arrow-left:before,\n.ion-ios-arrow-right:before,\n.ion-ios-arrow-thin-down:before,\n.ion-ios-arrow-thin-left:before,\n.ion-ios-arrow-thin-right:before,\n.ion-ios-arrow-thin-up:before,\n.ion-ios-arrow-up:before,\n.ion-ios-at:before,\n.ion-ios-at-outline:before,\n.ion-ios-barcode:before,\n.ion-ios-barcode-outline:before,\n.ion-ios-baseball:before,\n.ion-ios-baseball-outline:before,\n.ion-ios-basketball:before,\n.ion-ios-basketball-outline:before,\n.ion-ios-bell:before,\n.ion-ios-bell-outline:before,\n.ion-ios-body:before,\n.ion-ios-body-outline:before,\n.ion-ios-bolt:before,\n.ion-ios-bolt-outline:before,\n.ion-ios-book:before,\n.ion-ios-book-outline:before,\n.ion-ios-bookmarks:before,\n.ion-ios-bookmarks-outline:before,\n.ion-ios-box:before,\n.ion-ios-box-outline:before,\n.ion-ios-briefcase:before,\n.ion-ios-briefcase-outline:before,\n.ion-ios-browsers:before,\n.ion-ios-browsers-outline:before,\n.ion-ios-calculator:before,\n.ion-ios-calculator-outline:before,\n.ion-ios-calendar:before,\n.ion-ios-calendar-outline:before,\n.ion-ios-camera:before,\n.ion-ios-camera-outline:before,\n.ion-ios-cart:before,\n.ion-ios-cart-outline:before,\n.ion-ios-chatboxes:before,\n.ion-ios-chatboxes-outline:before,\n.ion-ios-chatbubble:before,\n.ion-ios-chatbubble-outline:before,\n.ion-ios-checkmark:before,\n.ion-ios-checkmark-empty:before,\n.ion-ios-checkmark-outline:before,\n.ion-ios-circle-filled:before,\n.ion-ios-circle-outline:before,\n.ion-ios-clock:before,\n.ion-ios-clock-outline:before,\n.ion-ios-close:before,\n.ion-ios-close-empty:before,\n.ion-ios-close-outline:before,\n.ion-ios-cloud:before,\n.ion-ios-cloud-download:before,\n.ion-ios-cloud-download-outline:before,\n.ion-ios-cloud-outline:before,\n.ion-ios-cloud-upload:before,\n.ion-ios-cloud-upload-outline:before,\n.ion-ios-cloudy:before,\n.ion-ios-cloudy-night:before,\n.ion-ios-cloudy-night-outline:before,\n.ion-ios-cloudy-outline:before,\n.ion-ios-cog:before,\n.ion-ios-cog-outline:before,\n.ion-ios-color-filter:before,\n.ion-ios-color-filter-outline:before,\n.ion-ios-color-wand:before,\n.ion-ios-color-wand-outline:before,\n.ion-ios-compose:before,\n.ion-ios-compose-outline:before,\n.ion-ios-contact:before,\n.ion-ios-contact-outline:before,\n.ion-ios-copy:before,\n.ion-ios-copy-outline:before,\n.ion-ios-crop:before,\n.ion-ios-crop-strong:before,\n.ion-ios-download:before,\n.ion-ios-download-outline:before,\n.ion-ios-drag:before,\n.ion-ios-email:before,\n.ion-ios-email-outline:before,\n.ion-ios-eye:before,\n.ion-ios-eye-outline:before,\n.ion-ios-fastforward:before,\n.ion-ios-fastforward-outline:before,\n.ion-ios-filing:before,\n.ion-ios-filing-outline:before,\n.ion-ios-film:before,\n.ion-ios-film-outline:before,\n.ion-ios-flag:before,\n.ion-ios-flag-outline:before,\n.ion-ios-flame:before,\n.ion-ios-flame-outline:before,\n.ion-ios-flask:before,\n.ion-ios-flask-outline:before,\n.ion-ios-flower:before,\n.ion-ios-flower-outline:before,\n.ion-ios-folder:before,\n.ion-ios-folder-outline:before,\n.ion-ios-football:before,\n.ion-ios-football-outline:before,\n.ion-ios-game-controller-a:before,\n.ion-ios-game-controller-a-outline:before,\n.ion-ios-game-controller-b:before,\n.ion-ios-game-controller-b-outline:before,\n.ion-ios-gear:before,\n.ion-ios-gear-outline:before,\n.ion-ios-glasses:before,\n.ion-ios-glasses-outline:before,\n.ion-ios-grid-view:before,\n.ion-ios-grid-view-outline:before,\n.ion-ios-heart:before,\n.ion-ios-heart-outline:before,\n.ion-ios-help:before,\n.ion-ios-help-empty:before,\n.ion-ios-help-outline:before,\n.ion-ios-home:before,\n.ion-ios-home-outline:before,\n.ion-ios-infinite:before,\n.ion-ios-infinite-outline:before,\n.ion-ios-information:before,\n.ion-ios-information-empty:before,\n.ion-ios-information-outline:before,\n.ion-ios-ionic-outline:before,\n.ion-ios-keypad:before,\n.ion-ios-keypad-outline:before,\n.ion-ios-lightbulb:before,\n.ion-ios-lightbulb-outline:before,\n.ion-ios-list:before,\n.ion-ios-list-outline:before,\n.ion-ios-location:before,\n.ion-ios-location-outline:before,\n.ion-ios-locked:before,\n.ion-ios-locked-outline:before,\n.ion-ios-loop:before,\n.ion-ios-loop-strong:before,\n.ion-ios-medical:before,\n.ion-ios-medical-outline:before,\n.ion-ios-medkit:before,\n.ion-ios-medkit-outline:before,\n.ion-ios-mic:before,\n.ion-ios-mic-off:before,\n.ion-ios-mic-outline:before,\n.ion-ios-minus:before,\n.ion-ios-minus-empty:before,\n.ion-ios-minus-outline:before,\n.ion-ios-monitor:before,\n.ion-ios-monitor-outline:before,\n.ion-ios-moon:before,\n.ion-ios-moon-outline:before,\n.ion-ios-more:before,\n.ion-ios-more-outline:before,\n.ion-ios-musical-note:before,\n.ion-ios-musical-notes:before,\n.ion-ios-navigate:before,\n.ion-ios-navigate-outline:before,\n.ion-ios-nutrition:before,\n.ion-ios-nutrition-outline:before,\n.ion-ios-paper:before,\n.ion-ios-paper-outline:before,\n.ion-ios-paperplane:before,\n.ion-ios-paperplane-outline:before,\n.ion-ios-partlysunny:before,\n.ion-ios-partlysunny-outline:before,\n.ion-ios-pause:before,\n.ion-ios-pause-outline:before,\n.ion-ios-paw:before,\n.ion-ios-paw-outline:before,\n.ion-ios-people:before,\n.ion-ios-people-outline:before,\n.ion-ios-person:before,\n.ion-ios-person-outline:before,\n.ion-ios-personadd:before,\n.ion-ios-personadd-outline:before,\n.ion-ios-photos:before,\n.ion-ios-photos-outline:before,\n.ion-ios-pie:before,\n.ion-ios-pie-outline:before,\n.ion-ios-pint:before,\n.ion-ios-pint-outline:before,\n.ion-ios-play:before,\n.ion-ios-play-outline:before,\n.ion-ios-plus:before,\n.ion-ios-plus-empty:before,\n.ion-ios-plus-outline:before,\n.ion-ios-pricetag:before,\n.ion-ios-pricetag-outline:before,\n.ion-ios-pricetags:before,\n.ion-ios-pricetags-outline:before,\n.ion-ios-printer:before,\n.ion-ios-printer-outline:before,\n.ion-ios-pulse:before,\n.ion-ios-pulse-strong:before,\n.ion-ios-rainy:before,\n.ion-ios-rainy-outline:before,\n.ion-ios-recording:before,\n.ion-ios-recording-outline:before,\n.ion-ios-redo:before,\n.ion-ios-redo-outline:before,\n.ion-ios-refresh:before,\n.ion-ios-refresh-empty:before,\n.ion-ios-refresh-outline:before,\n.ion-ios-reload:before,\n.ion-ios-reverse-camera:before,\n.ion-ios-reverse-camera-outline:before,\n.ion-ios-rewind:before,\n.ion-ios-rewind-outline:before,\n.ion-ios-rose:before,\n.ion-ios-rose-outline:before,\n.ion-ios-search:before,\n.ion-ios-search-strong:before,\n.ion-ios-settings:before,\n.ion-ios-settings-strong:before,\n.ion-ios-shuffle:before,\n.ion-ios-shuffle-strong:before,\n.ion-ios-skipbackward:before,\n.ion-ios-skipbackward-outline:before,\n.ion-ios-skipforward:before,\n.ion-ios-skipforward-outline:before,\n.ion-ios-snowy:before,\n.ion-ios-speedometer:before,\n.ion-ios-speedometer-outline:before,\n.ion-ios-star:before,\n.ion-ios-star-half:before,\n.ion-ios-star-outline:before,\n.ion-ios-stopwatch:before,\n.ion-ios-stopwatch-outline:before,\n.ion-ios-sunny:before,\n.ion-ios-sunny-outline:before,\n.ion-ios-telephone:before,\n.ion-ios-telephone-outline:before,\n.ion-ios-tennisball:before,\n.ion-ios-tennisball-outline:before,\n.ion-ios-thunderstorm:before,\n.ion-ios-thunderstorm-outline:before,\n.ion-ios-time:before,\n.ion-ios-time-outline:before,\n.ion-ios-timer:before,\n.ion-ios-timer-outline:before,\n.ion-ios-toggle:before,\n.ion-ios-toggle-outline:before,\n.ion-ios-trash:before,\n.ion-ios-trash-outline:before,\n.ion-ios-undo:before,\n.ion-ios-undo-outline:before,\n.ion-ios-unlocked:before,\n.ion-ios-unlocked-outline:before,\n.ion-ios-upload:before,\n.ion-ios-upload-outline:before,\n.ion-ios-videocam:before,\n.ion-ios-videocam-outline:before,\n.ion-ios-volume-high:before,\n.ion-ios-volume-low:before,\n.ion-ios-wineglass:before,\n.ion-ios-wineglass-outline:before,\n.ion-ios-world:before,\n.ion-ios-world-outline:before,\n.ion-ipad:before,\n.ion-iphone:before,\n.ion-ipod:before,\n.ion-jet:before,\n.ion-key:before,\n.ion-knife:before,\n.ion-laptop:before,\n.ion-leaf:before,\n.ion-levels:before,\n.ion-lightbulb:before,\n.ion-link:before,\n.ion-load-a:before,\n.ion-load-b:before,\n.ion-load-c:before,\n.ion-load-d:before,\n.ion-location:before,\n.ion-lock-combination:before,\n.ion-locked:before,\n.ion-log-in:before,\n.ion-log-out:before,\n.ion-loop:before,\n.ion-magnet:before,\n.ion-male:before,\n.ion-man:before,\n.ion-map:before,\n.ion-medkit:before,\n.ion-merge:before,\n.ion-mic-a:before,\n.ion-mic-b:before,\n.ion-mic-c:before,\n.ion-minus:before,\n.ion-minus-circled:before,\n.ion-minus-round:before,\n.ion-model-s:before,\n.ion-monitor:before,\n.ion-more:before,\n.ion-mouse:before,\n.ion-music-note:before,\n.ion-navicon:before,\n.ion-navicon-round:before,\n.ion-navigate:before,\n.ion-network:before,\n.ion-no-smoking:before,\n.ion-nuclear:before,\n.ion-outlet:before,\n.ion-paintbrush:before,\n.ion-paintbucket:before,\n.ion-paper-airplane:before,\n.ion-paperclip:before,\n.ion-pause:before,\n.ion-person:before,\n.ion-person-add:before,\n.ion-person-stalker:before,\n.ion-pie-graph:before,\n.ion-pin:before,\n.ion-pinpoint:before,\n.ion-pizza:before,\n.ion-plane:before,\n.ion-planet:before,\n.ion-play:before,\n.ion-playstation:before,\n.ion-plus:before,\n.ion-plus-circled:before,\n.ion-plus-round:before,\n.ion-podium:before,\n.ion-pound:before,\n.ion-power:before,\n.ion-pricetag:before,\n.ion-pricetags:before,\n.ion-printer:before,\n.ion-pull-request:before,\n.ion-qr-scanner:before,\n.ion-quote:before,\n.ion-radio-waves:before,\n.ion-record:before,\n.ion-refresh:before,\n.ion-reply:before,\n.ion-reply-all:before,\n.ion-ribbon-a:before,\n.ion-ribbon-b:before,\n.ion-sad:before,\n.ion-sad-outline:before,\n.ion-scissors:before,\n.ion-search:before,\n.ion-settings:before,\n.ion-share:before,\n.ion-shuffle:before,\n.ion-skip-backward:before,\n.ion-skip-forward:before,\n.ion-social-android:before,\n.ion-social-android-outline:before,\n.ion-social-angular:before,\n.ion-social-angular-outline:before,\n.ion-social-apple:before,\n.ion-social-apple-outline:before,\n.ion-social-bitcoin:before,\n.ion-social-bitcoin-outline:before,\n.ion-social-buffer:before,\n.ion-social-buffer-outline:before,\n.ion-social-chrome:before,\n.ion-social-chrome-outline:before,\n.ion-social-codepen:before,\n.ion-social-codepen-outline:before,\n.ion-social-css3:before,\n.ion-social-css3-outline:before,\n.ion-social-designernews:before,\n.ion-social-designernews-outline:before,\n.ion-social-dribbble:before,\n.ion-social-dribbble-outline:before,\n.ion-social-dropbox:before,\n.ion-social-dropbox-outline:before,\n.ion-social-euro:before,\n.ion-social-euro-outline:before,\n.ion-social-facebook:before,\n.ion-social-facebook-outline:before,\n.ion-social-foursquare:before,\n.ion-social-foursquare-outline:before,\n.ion-social-freebsd-devil:before,\n.ion-social-github:before,\n.ion-social-github-outline:before,\n.ion-social-google:before,\n.ion-social-google-outline:before,\n.ion-social-googleplus:before,\n.ion-social-googleplus-outline:before,\n.ion-social-hackernews:before,\n.ion-social-hackernews-outline:before,\n.ion-social-html5:before,\n.ion-social-html5-outline:before,\n.ion-social-instagram:before,\n.ion-social-instagram-outline:before,\n.ion-social-javascript:before,\n.ion-social-javascript-outline:before,\n.ion-social-linkedin:before,\n.ion-social-linkedin-outline:before,\n.ion-social-markdown:before,\n.ion-social-nodejs:before,\n.ion-social-octocat:before,\n.ion-social-pinterest:before,\n.ion-social-pinterest-outline:before,\n.ion-social-python:before,\n.ion-social-reddit:before,\n.ion-social-reddit-outline:before,\n.ion-social-rss:before,\n.ion-social-rss-outline:before,\n.ion-social-sass:before,\n.ion-social-skype:before,\n.ion-social-skype-outline:before,\n.ion-social-snapchat:before,\n.ion-social-snapchat-outline:before,\n.ion-social-tumblr:before,\n.ion-social-tumblr-outline:before,\n.ion-social-tux:before,\n.ion-social-twitch:before,\n.ion-social-twitch-outline:before,\n.ion-social-twitter:before,\n.ion-social-twitter-outline:before,\n.ion-social-usd:before,\n.ion-social-usd-outline:before,\n.ion-social-vimeo:before,\n.ion-social-vimeo-outline:before,\n.ion-social-whatsapp:before,\n.ion-social-whatsapp-outline:before,\n.ion-social-windows:before,\n.ion-social-windows-outline:before,\n.ion-social-wordpress:before,\n.ion-social-wordpress-outline:before,\n.ion-social-yahoo:before,\n.ion-social-yahoo-outline:before,\n.ion-social-yen:before,\n.ion-social-yen-outline:before,\n.ion-social-youtube:before,\n.ion-social-youtube-outline:before,\n.ion-soup-can:before,\n.ion-soup-can-outline:before,\n.ion-speakerphone:before,\n.ion-speedometer:before,\n.ion-spoon:before,\n.ion-star:before,\n.ion-stats-bars:before,\n.ion-steam:before,\n.ion-stop:before,\n.ion-thermometer:before,\n.ion-thumbsdown:before,\n.ion-thumbsup:before,\n.ion-toggle:before,\n.ion-toggle-filled:before,\n.ion-transgender:before,\n.ion-trash-a:before,\n.ion-trash-b:before,\n.ion-trophy:before,\n.ion-tshirt:before,\n.ion-tshirt-outline:before,\n.ion-umbrella:before,\n.ion-university:before,\n.ion-unlocked:before,\n.ion-upload:before,\n.ion-usb:before,\n.ion-videocamera:before,\n.ion-volume-high:before,\n.ion-volume-low:before,\n.ion-volume-medium:before,\n.ion-volume-mute:before,\n.ion-wand:before,\n.ion-waterdrop:before,\n.ion-wifi:before,\n.ion-wineglass:before,\n.ion-woman:before,\n.ion-wrench:before,\n.ion-xbox:before {\n  display: inline-block;\n  font-family: \"Ionicons\";\n  speak: none;\n  font-style: normal;\n  font-weight: normal;\n  font-variant: normal;\n  text-transform: none;\n  text-rendering: auto;\n  line-height: 1;\n  -webkit-font-smoothing: antialiased;\n  -moz-osx-font-smoothing: grayscale; }\n\n.ion-alert:before {\n  content: \"\"; }\n\n.ion-alert-circled:before {\n  content: \"\"; }\n\n.ion-android-add:before {\n  content: \"\"; }\n\n.ion-android-add-circle:before {\n  content: \"\"; }\n\n.ion-android-alarm-clock:before {\n  content: \"\"; }\n\n.ion-android-alert:before {\n  content: \"\"; }\n\n.ion-android-apps:before {\n  content: \"\"; }\n\n.ion-android-archive:before {\n  content: \"\"; }\n\n.ion-android-arrow-back:before {\n  content: \"\"; }\n\n.ion-android-arrow-down:before {\n  content: \"\"; }\n\n.ion-android-arrow-dropdown:before {\n  content: \"\"; }\n\n.ion-android-arrow-dropdown-circle:before {\n  content: \"\"; }\n\n.ion-android-arrow-dropleft:before {\n  content: \"\"; }\n\n.ion-android-arrow-dropleft-circle:before {\n  content: \"\"; }\n\n.ion-android-arrow-dropright:before {\n  content: \"\"; }\n\n.ion-android-arrow-dropright-circle:before {\n  content: \"\"; }\n\n.ion-android-arrow-dropup:before {\n  content: \"\"; }\n\n.ion-android-arrow-dropup-circle:before {\n  content: \"\"; }\n\n.ion-android-arrow-forward:before {\n  content: \"\"; }\n\n.ion-android-arrow-up:before {\n  content: \"\"; }\n\n.ion-android-attach:before {\n  content: \"\"; }\n\n.ion-android-bar:before {\n  content: \"\"; }\n\n.ion-android-bicycle:before {\n  content: \"\"; }\n\n.ion-android-boat:before {\n  content: \"\"; }\n\n.ion-android-bookmark:before {\n  content: \"\"; }\n\n.ion-android-bulb:before {\n  content: \"\"; }\n\n.ion-android-bus:before {\n  content: \"\"; }\n\n.ion-android-calendar:before {\n  content: \"\"; }\n\n.ion-android-call:before {\n  content: \"\"; }\n\n.ion-android-camera:before {\n  content: \"\"; }\n\n.ion-android-cancel:before {\n  content: \"\"; }\n\n.ion-android-car:before {\n  content: \"\"; }\n\n.ion-android-cart:before {\n  content: \"\"; }\n\n.ion-android-chat:before {\n  content: \"\"; }\n\n.ion-android-checkbox:before {\n  content: \"\"; }\n\n.ion-android-checkbox-blank:before {\n  content: \"\"; }\n\n.ion-android-checkbox-outline:before {\n  content: \"\"; }\n\n.ion-android-checkbox-outline-blank:before {\n  content: \"\"; }\n\n.ion-android-checkmark-circle:before {\n  content: \"\"; }\n\n.ion-android-clipboard:before {\n  content: \"\"; }\n\n.ion-android-close:before {\n  content: \"\"; }\n\n.ion-android-cloud:before {\n  content: \"\"; }\n\n.ion-android-cloud-circle:before {\n  content: \"\"; }\n\n.ion-android-cloud-done:before {\n  content: \"\"; }\n\n.ion-android-cloud-outline:before {\n  content: \"\"; }\n\n.ion-android-color-palette:before {\n  content: \"\"; }\n\n.ion-android-compass:before {\n  content: \"\"; }\n\n.ion-android-contact:before {\n  content: \"\"; }\n\n.ion-android-contacts:before {\n  content: \"\"; }\n\n.ion-android-contract:before {\n  content: \"\"; }\n\n.ion-android-create:before {\n  content: \"\"; }\n\n.ion-android-delete:before {\n  content: \"\"; }\n\n.ion-android-desktop:before {\n  content: \"\"; }\n\n.ion-android-document:before {\n  content: \"\"; }\n\n.ion-android-done:before {\n  content: \"\"; }\n\n.ion-android-done-all:before {\n  content: \"\"; }\n\n.ion-android-download:before {\n  content: \"\"; }\n\n.ion-android-drafts:before {\n  content: \"\"; }\n\n.ion-android-exit:before {\n  content: \"\"; }\n\n.ion-android-expand:before {\n  content: \"\"; }\n\n.ion-android-favorite:before {\n  content: \"\"; }\n\n.ion-android-favorite-outline:before {\n  content: \"\"; }\n\n.ion-android-film:before {\n  content: \"\"; }\n\n.ion-android-folder:before {\n  content: \"\"; }\n\n.ion-android-folder-open:before {\n  content: \"\"; }\n\n.ion-android-funnel:before {\n  content: \"\"; }\n\n.ion-android-globe:before {\n  content: \"\"; }\n\n.ion-android-hand:before {\n  content: \"\"; }\n\n.ion-android-hangout:before {\n  content: \"\"; }\n\n.ion-android-happy:before {\n  content: \"\"; }\n\n.ion-android-home:before {\n  content: \"\"; }\n\n.ion-android-image:before {\n  content: \"\"; }\n\n.ion-android-laptop:before {\n  content: \"\"; }\n\n.ion-android-list:before {\n  content: \"\"; }\n\n.ion-android-locate:before {\n  content: \"\"; }\n\n.ion-android-lock:before {\n  content: \"\"; }\n\n.ion-android-mail:before {\n  content: \"\"; }\n\n.ion-android-map:before {\n  content: \"\"; }\n\n.ion-android-menu:before {\n  content: \"\"; }\n\n.ion-android-microphone:before {\n  content: \"\"; }\n\n.ion-android-microphone-off:before {\n  content: \"\"; }\n\n.ion-android-more-horizontal:before {\n  content: \"\"; }\n\n.ion-android-more-vertical:before {\n  content: \"\"; }\n\n.ion-android-navigate:before {\n  content: \"\"; }\n\n.ion-android-notifications:before {\n  content: \"\"; }\n\n.ion-android-notifications-none:before {\n  content: \"\"; }\n\n.ion-android-notifications-off:before {\n  content: \"\"; }\n\n.ion-android-open:before {\n  content: \"\"; }\n\n.ion-android-options:before {\n  content: \"\"; }\n\n.ion-android-people:before {\n  content: \"\"; }\n\n.ion-android-person:before {\n  content: \"\"; }\n\n.ion-android-person-add:before {\n  content: \"\"; }\n\n.ion-android-phone-landscape:before {\n  content: \"\"; }\n\n.ion-android-phone-portrait:before {\n  content: \"\"; }\n\n.ion-android-pin:before {\n  content: \"\"; }\n\n.ion-android-plane:before {\n  content: \"\"; }\n\n.ion-android-playstore:before {\n  content: \"\"; }\n\n.ion-android-print:before {\n  content: \"\"; }\n\n.ion-android-radio-button-off:before {\n  content: \"\"; }\n\n.ion-android-radio-button-on:before {\n  content: \"\"; }\n\n.ion-android-refresh:before {\n  content: \"\"; }\n\n.ion-android-remove:before {\n  content: \"\"; }\n\n.ion-android-remove-circle:before {\n  content: \"\"; }\n\n.ion-android-restaurant:before {\n  content: \"\"; }\n\n.ion-android-sad:before {\n  content: \"\"; }\n\n.ion-android-search:before {\n  content: \"\"; }\n\n.ion-android-send:before {\n  content: \"\"; }\n\n.ion-android-settings:before {\n  content: \"\"; }\n\n.ion-android-share:before {\n  content: \"\"; }\n\n.ion-android-share-alt:before {\n  content: \"\"; }\n\n.ion-android-star:before {\n  content: \"\"; }\n\n.ion-android-star-half:before {\n  content: \"\"; }\n\n.ion-android-star-outline:before {\n  content: \"\"; }\n\n.ion-android-stopwatch:before {\n  content: \"\"; }\n\n.ion-android-subway:before {\n  content: \"\"; }\n\n.ion-android-sunny:before {\n  content: \"\"; }\n\n.ion-android-sync:before {\n  content: \"\"; }\n\n.ion-android-textsms:before {\n  content: \"\"; }\n\n.ion-android-time:before {\n  content: \"\"; }\n\n.ion-android-train:before {\n  content: \"\"; }\n\n.ion-android-unlock:before {\n  content: \"\"; }\n\n.ion-android-upload:before {\n  content: \"\"; }\n\n.ion-android-volume-down:before {\n  content: \"\"; }\n\n.ion-android-volume-mute:before {\n  content: \"\"; }\n\n.ion-android-volume-off:before {\n  content: \"\"; }\n\n.ion-android-volume-up:before {\n  content: \"\"; }\n\n.ion-android-walk:before {\n  content: \"\"; }\n\n.ion-android-warning:before {\n  content: \"\"; }\n\n.ion-android-watch:before {\n  content: \"\"; }\n\n.ion-android-wifi:before {\n  content: \"\"; }\n\n.ion-aperture:before {\n  content: \"\"; }\n\n.ion-archive:before {\n  content: \"\"; }\n\n.ion-arrow-down-a:before {\n  content: \"\"; }\n\n.ion-arrow-down-b:before {\n  content: \"\"; }\n\n.ion-arrow-down-c:before {\n  content: \"\"; }\n\n.ion-arrow-expand:before {\n  content: \"\"; }\n\n.ion-arrow-graph-down-left:before {\n  content: \"\"; }\n\n.ion-arrow-graph-down-right:before {\n  content: \"\"; }\n\n.ion-arrow-graph-up-left:before {\n  content: \"\"; }\n\n.ion-arrow-graph-up-right:before {\n  content: \"\"; }\n\n.ion-arrow-left-a:before {\n  content: \"\"; }\n\n.ion-arrow-left-b:before {\n  content: \"\"; }\n\n.ion-arrow-left-c:before {\n  content: \"\"; }\n\n.ion-arrow-move:before {\n  content: \"\"; }\n\n.ion-arrow-resize:before {\n  content: \"\"; }\n\n.ion-arrow-return-left:before {\n  content: \"\"; }\n\n.ion-arrow-return-right:before {\n  content: \"\"; }\n\n.ion-arrow-right-a:before {\n  content: \"\"; }\n\n.ion-arrow-right-b:before {\n  content: \"\"; }\n\n.ion-arrow-right-c:before {\n  content: \"\"; }\n\n.ion-arrow-shrink:before {\n  content: \"\"; }\n\n.ion-arrow-swap:before {\n  content: \"\"; }\n\n.ion-arrow-up-a:before {\n  content: \"\"; }\n\n.ion-arrow-up-b:before {\n  content: \"\"; }\n\n.ion-arrow-up-c:before {\n  content: \"\"; }\n\n.ion-asterisk:before {\n  content: \"\"; }\n\n.ion-at:before {\n  content: \"\"; }\n\n.ion-backspace:before {\n  content: \"\"; }\n\n.ion-backspace-outline:before {\n  content: \"\"; }\n\n.ion-bag:before {\n  content: \"\"; }\n\n.ion-battery-charging:before {\n  content: \"\"; }\n\n.ion-battery-empty:before {\n  content: \"\"; }\n\n.ion-battery-full:before {\n  content: \"\"; }\n\n.ion-battery-half:before {\n  content: \"\"; }\n\n.ion-battery-low:before {\n  content: \"\"; }\n\n.ion-beaker:before {\n  content: \"\"; }\n\n.ion-beer:before {\n  content: \"\"; }\n\n.ion-bluetooth:before {\n  content: \"\"; }\n\n.ion-bonfire:before {\n  content: \"\"; }\n\n.ion-bookmark:before {\n  content: \"\"; }\n\n.ion-bowtie:before {\n  content: \"\"; }\n\n.ion-briefcase:before {\n  content: \"\"; }\n\n.ion-bug:before {\n  content: \"\"; }\n\n.ion-calculator:before {\n  content: \"\"; }\n\n.ion-calendar:before {\n  content: \"\"; }\n\n.ion-camera:before {\n  content: \"\"; }\n\n.ion-card:before {\n  content: \"\"; }\n\n.ion-cash:before {\n  content: \"\"; }\n\n.ion-chatbox:before {\n  content: \"\"; }\n\n.ion-chatbox-working:before {\n  content: \"\"; }\n\n.ion-chatboxes:before {\n  content: \"\"; }\n\n.ion-chatbubble:before {\n  content: \"\"; }\n\n.ion-chatbubble-working:before {\n  content: \"\"; }\n\n.ion-chatbubbles:before {\n  content: \"\"; }\n\n.ion-checkmark:before {\n  content: \"\"; }\n\n.ion-checkmark-circled:before {\n  content: \"\"; }\n\n.ion-checkmark-round:before {\n  content: \"\"; }\n\n.ion-chevron-down:before {\n  content: \"\"; }\n\n.ion-chevron-left:before {\n  content: \"\"; }\n\n.ion-chevron-right:before {\n  content: \"\"; }\n\n.ion-chevron-up:before {\n  content: \"\"; }\n\n.ion-clipboard:before {\n  content: \"\"; }\n\n.ion-clock:before {\n  content: \"\"; }\n\n.ion-close:before {\n  content: \"\"; }\n\n.ion-close-circled:before {\n  content: \"\"; }\n\n.ion-close-round:before {\n  content: \"\"; }\n\n.ion-closed-captioning:before {\n  content: \"\"; }\n\n.ion-cloud:before {\n  content: \"\"; }\n\n.ion-code:before {\n  content: \"\"; }\n\n.ion-code-download:before {\n  content: \"\"; }\n\n.ion-code-working:before {\n  content: \"\"; }\n\n.ion-coffee:before {\n  content: \"\"; }\n\n.ion-compass:before {\n  content: \"\"; }\n\n.ion-compose:before {\n  content: \"\"; }\n\n.ion-connection-bars:before {\n  content: \"\"; }\n\n.ion-contrast:before {\n  content: \"\"; }\n\n.ion-crop:before {\n  content: \"\"; }\n\n.ion-cube:before {\n  content: \"\"; }\n\n.ion-disc:before {\n  content: \"\"; }\n\n.ion-document:before {\n  content: \"\"; }\n\n.ion-document-text:before {\n  content: \"\"; }\n\n.ion-drag:before {\n  content: \"\"; }\n\n.ion-earth:before {\n  content: \"\"; }\n\n.ion-easel:before {\n  content: \"\"; }\n\n.ion-edit:before {\n  content: \"\"; }\n\n.ion-egg:before {\n  content: \"\"; }\n\n.ion-eject:before {\n  content: \"\"; }\n\n.ion-email:before {\n  content: \"\"; }\n\n.ion-email-unread:before {\n  content: \"\"; }\n\n.ion-erlenmeyer-flask:before {\n  content: \"\"; }\n\n.ion-erlenmeyer-flask-bubbles:before {\n  content: \"\"; }\n\n.ion-eye:before {\n  content: \"\"; }\n\n.ion-eye-disabled:before {\n  content: \"\"; }\n\n.ion-female:before {\n  content: \"\"; }\n\n.ion-filing:before {\n  content: \"\"; }\n\n.ion-film-marker:before {\n  content: \"\"; }\n\n.ion-fireball:before {\n  content: \"\"; }\n\n.ion-flag:before {\n  content: \"\"; }\n\n.ion-flame:before {\n  content: \"\"; }\n\n.ion-flash:before {\n  content: \"\"; }\n\n.ion-flash-off:before {\n  content: \"\"; }\n\n.ion-folder:before {\n  content: \"\"; }\n\n.ion-fork:before {\n  content: \"\"; }\n\n.ion-fork-repo:before {\n  content: \"\"; }\n\n.ion-forward:before {\n  content: \"\"; }\n\n.ion-funnel:before {\n  content: \"\"; }\n\n.ion-gear-a:before {\n  content: \"\"; }\n\n.ion-gear-b:before {\n  content: \"\"; }\n\n.ion-grid:before {\n  content: \"\"; }\n\n.ion-hammer:before {\n  content: \"\"; }\n\n.ion-happy:before {\n  content: \"\"; }\n\n.ion-happy-outline:before {\n  content: \"\"; }\n\n.ion-headphone:before {\n  content: \"\"; }\n\n.ion-heart:before {\n  content: \"\"; }\n\n.ion-heart-broken:before {\n  content: \"\"; }\n\n.ion-help:before {\n  content: \"\"; }\n\n.ion-help-buoy:before {\n  content: \"\"; }\n\n.ion-help-circled:before {\n  content: \"\"; }\n\n.ion-home:before {\n  content: \"\"; }\n\n.ion-icecream:before {\n  content: \"\"; }\n\n.ion-image:before {\n  content: \"\"; }\n\n.ion-images:before {\n  content: \"\"; }\n\n.ion-information:before {\n  content: \"\"; }\n\n.ion-information-circled:before {\n  content: \"\"; }\n\n.ion-ionic:before {\n  content: \"\"; }\n\n.ion-ios-alarm:before {\n  content: \"\"; }\n\n.ion-ios-alarm-outline:before {\n  content: \"\"; }\n\n.ion-ios-albums:before {\n  content: \"\"; }\n\n.ion-ios-albums-outline:before {\n  content: \"\"; }\n\n.ion-ios-americanfootball:before {\n  content: \"\"; }\n\n.ion-ios-americanfootball-outline:before {\n  content: \"\"; }\n\n.ion-ios-analytics:before {\n  content: \"\"; }\n\n.ion-ios-analytics-outline:before {\n  content: \"\"; }\n\n.ion-ios-arrow-back:before {\n  content: \"\"; }\n\n.ion-ios-arrow-down:before {\n  content: \"\"; }\n\n.ion-ios-arrow-forward:before {\n  content: \"\"; }\n\n.ion-ios-arrow-left:before {\n  content: \"\"; }\n\n.ion-ios-arrow-right:before {\n  content: \"\"; }\n\n.ion-ios-arrow-thin-down:before {\n  content: \"\"; }\n\n.ion-ios-arrow-thin-left:before {\n  content: \"\"; }\n\n.ion-ios-arrow-thin-right:before {\n  content: \"\"; }\n\n.ion-ios-arrow-thin-up:before {\n  content: \"\"; }\n\n.ion-ios-arrow-up:before {\n  content: \"\"; }\n\n.ion-ios-at:before {\n  content: \"\"; }\n\n.ion-ios-at-outline:before {\n  content: \"\"; }\n\n.ion-ios-barcode:before {\n  content: \"\"; }\n\n.ion-ios-barcode-outline:before {\n  content: \"\"; }\n\n.ion-ios-baseball:before {\n  content: \"\"; }\n\n.ion-ios-baseball-outline:before {\n  content: \"\"; }\n\n.ion-ios-basketball:before {\n  content: \"\"; }\n\n.ion-ios-basketball-outline:before {\n  content: \"\"; }\n\n.ion-ios-bell:before {\n  content: \"\"; }\n\n.ion-ios-bell-outline:before {\n  content: \"\"; }\n\n.ion-ios-body:before {\n  content: \"\"; }\n\n.ion-ios-body-outline:before {\n  content: \"\"; }\n\n.ion-ios-bolt:before {\n  content: \"\"; }\n\n.ion-ios-bolt-outline:before {\n  content: \"\"; }\n\n.ion-ios-book:before {\n  content: \"\"; }\n\n.ion-ios-book-outline:before {\n  content: \"\"; }\n\n.ion-ios-bookmarks:before {\n  content: \"\"; }\n\n.ion-ios-bookmarks-outline:before {\n  content: \"\"; }\n\n.ion-ios-box:before {\n  content: \"\"; }\n\n.ion-ios-box-outline:before {\n  content: \"\"; }\n\n.ion-ios-briefcase:before {\n  content: \"\"; }\n\n.ion-ios-briefcase-outline:before {\n  content: \"\"; }\n\n.ion-ios-browsers:before {\n  content: \"\"; }\n\n.ion-ios-browsers-outline:before {\n  content: \"\"; }\n\n.ion-ios-calculator:before {\n  content: \"\"; }\n\n.ion-ios-calculator-outline:before {\n  content: \"\"; }\n\n.ion-ios-calendar:before {\n  content: \"\"; }\n\n.ion-ios-calendar-outline:before {\n  content: \"\"; }\n\n.ion-ios-camera:before {\n  content: \"\"; }\n\n.ion-ios-camera-outline:before {\n  content: \"\"; }\n\n.ion-ios-cart:before {\n  content: \"\"; }\n\n.ion-ios-cart-outline:before {\n  content: \"\"; }\n\n.ion-ios-chatboxes:before {\n  content: \"\"; }\n\n.ion-ios-chatboxes-outline:before {\n  content: \"\"; }\n\n.ion-ios-chatbubble:before {\n  content: \"\"; }\n\n.ion-ios-chatbubble-outline:before {\n  content: \"\"; }\n\n.ion-ios-checkmark:before {\n  content: \"\"; }\n\n.ion-ios-checkmark-empty:before {\n  content: \"\"; }\n\n.ion-ios-checkmark-outline:before {\n  content: \"\"; }\n\n.ion-ios-circle-filled:before {\n  content: \"\"; }\n\n.ion-ios-circle-outline:before {\n  content: \"\"; }\n\n.ion-ios-clock:before {\n  content: \"\"; }\n\n.ion-ios-clock-outline:before {\n  content: \"\"; }\n\n.ion-ios-close:before {\n  content: \"\"; }\n\n.ion-ios-close-empty:before {\n  content: \"\"; }\n\n.ion-ios-close-outline:before {\n  content: \"\"; }\n\n.ion-ios-cloud:before {\n  content: \"\"; }\n\n.ion-ios-cloud-download:before {\n  content: \"\"; }\n\n.ion-ios-cloud-download-outline:before {\n  content: \"\"; }\n\n.ion-ios-cloud-outline:before {\n  content: \"\"; }\n\n.ion-ios-cloud-upload:before {\n  content: \"\"; }\n\n.ion-ios-cloud-upload-outline:before {\n  content: \"\"; }\n\n.ion-ios-cloudy:before {\n  content: \"\"; }\n\n.ion-ios-cloudy-night:before {\n  content: \"\"; }\n\n.ion-ios-cloudy-night-outline:before {\n  content: \"\"; }\n\n.ion-ios-cloudy-outline:before {\n  content: \"\"; }\n\n.ion-ios-cog:before {\n  content: \"\"; }\n\n.ion-ios-cog-outline:before {\n  content: \"\"; }\n\n.ion-ios-color-filter:before {\n  content: \"\"; }\n\n.ion-ios-color-filter-outline:before {\n  content: \"\"; }\n\n.ion-ios-color-wand:before {\n  content: \"\"; }\n\n.ion-ios-color-wand-outline:before {\n  content: \"\"; }\n\n.ion-ios-compose:before {\n  content: \"\"; }\n\n.ion-ios-compose-outline:before {\n  content: \"\"; }\n\n.ion-ios-contact:before {\n  content: \"\"; }\n\n.ion-ios-contact-outline:before {\n  content: \"\"; }\n\n.ion-ios-copy:before {\n  content: \"\"; }\n\n.ion-ios-copy-outline:before {\n  content: \"\"; }\n\n.ion-ios-crop:before {\n  content: \"\"; }\n\n.ion-ios-crop-strong:before {\n  content: \"\"; }\n\n.ion-ios-download:before {\n  content: \"\"; }\n\n.ion-ios-download-outline:before {\n  content: \"\"; }\n\n.ion-ios-drag:before {\n  content: \"\"; }\n\n.ion-ios-email:before {\n  content: \"\"; }\n\n.ion-ios-email-outline:before {\n  content: \"\"; }\n\n.ion-ios-eye:before {\n  content: \"\"; }\n\n.ion-ios-eye-outline:before {\n  content: \"\"; }\n\n.ion-ios-fastforward:before {\n  content: \"\"; }\n\n.ion-ios-fastforward-outline:before {\n  content: \"\"; }\n\n.ion-ios-filing:before {\n  content: \"\"; }\n\n.ion-ios-filing-outline:before {\n  content: \"\"; }\n\n.ion-ios-film:before {\n  content: \"\"; }\n\n.ion-ios-film-outline:before {\n  content: \"\"; }\n\n.ion-ios-flag:before {\n  content: \"\"; }\n\n.ion-ios-flag-outline:before {\n  content: \"\"; }\n\n.ion-ios-flame:before {\n  content: \"\"; }\n\n.ion-ios-flame-outline:before {\n  content: \"\"; }\n\n.ion-ios-flask:before {\n  content: \"\"; }\n\n.ion-ios-flask-outline:before {\n  content: \"\"; }\n\n.ion-ios-flower:before {\n  content: \"\"; }\n\n.ion-ios-flower-outline:before {\n  content: \"\"; }\n\n.ion-ios-folder:before {\n  content: \"\"; }\n\n.ion-ios-folder-outline:before {\n  content: \"\"; }\n\n.ion-ios-football:before {\n  content: \"\"; }\n\n.ion-ios-football-outline:before {\n  content: \"\"; }\n\n.ion-ios-game-controller-a:before {\n  content: \"\"; }\n\n.ion-ios-game-controller-a-outline:before {\n  content: \"\"; }\n\n.ion-ios-game-controller-b:before {\n  content: \"\"; }\n\n.ion-ios-game-controller-b-outline:before {\n  content: \"\"; }\n\n.ion-ios-gear:before {\n  content: \"\"; }\n\n.ion-ios-gear-outline:before {\n  content: \"\"; }\n\n.ion-ios-glasses:before {\n  content: \"\"; }\n\n.ion-ios-glasses-outline:before {\n  content: \"\"; }\n\n.ion-ios-grid-view:before {\n  content: \"\"; }\n\n.ion-ios-grid-view-outline:before {\n  content: \"\"; }\n\n.ion-ios-heart:before {\n  content: \"\"; }\n\n.ion-ios-heart-outline:before {\n  content: \"\"; }\n\n.ion-ios-help:before {\n  content: \"\"; }\n\n.ion-ios-help-empty:before {\n  content: \"\"; }\n\n.ion-ios-help-outline:before {\n  content: \"\"; }\n\n.ion-ios-home:before {\n  content: \"\"; }\n\n.ion-ios-home-outline:before {\n  content: \"\"; }\n\n.ion-ios-infinite:before {\n  content: \"\"; }\n\n.ion-ios-infinite-outline:before {\n  content: \"\"; }\n\n.ion-ios-information:before {\n  content: \"\"; }\n\n.ion-ios-information-empty:before {\n  content: \"\"; }\n\n.ion-ios-information-outline:before {\n  content: \"\"; }\n\n.ion-ios-ionic-outline:before {\n  content: \"\"; }\n\n.ion-ios-keypad:before {\n  content: \"\"; }\n\n.ion-ios-keypad-outline:before {\n  content: \"\"; }\n\n.ion-ios-lightbulb:before {\n  content: \"\"; }\n\n.ion-ios-lightbulb-outline:before {\n  content: \"\"; }\n\n.ion-ios-list:before {\n  content: \"\"; }\n\n.ion-ios-list-outline:before {\n  content: \"\"; }\n\n.ion-ios-location:before {\n  content: \"\"; }\n\n.ion-ios-location-outline:before {\n  content: \"\"; }\n\n.ion-ios-locked:before {\n  content: \"\"; }\n\n.ion-ios-locked-outline:before {\n  content: \"\"; }\n\n.ion-ios-loop:before {\n  content: \"\"; }\n\n.ion-ios-loop-strong:before {\n  content: \"\"; }\n\n.ion-ios-medical:before {\n  content: \"\"; }\n\n.ion-ios-medical-outline:before {\n  content: \"\"; }\n\n.ion-ios-medkit:before {\n  content: \"\"; }\n\n.ion-ios-medkit-outline:before {\n  content: \"\"; }\n\n.ion-ios-mic:before {\n  content: \"\"; }\n\n.ion-ios-mic-off:before {\n  content: \"\"; }\n\n.ion-ios-mic-outline:before {\n  content: \"\"; }\n\n.ion-ios-minus:before {\n  content: \"\"; }\n\n.ion-ios-minus-empty:before {\n  content: \"\"; }\n\n.ion-ios-minus-outline:before {\n  content: \"\"; }\n\n.ion-ios-monitor:before {\n  content: \"\"; }\n\n.ion-ios-monitor-outline:before {\n  content: \"\"; }\n\n.ion-ios-moon:before {\n  content: \"\"; }\n\n.ion-ios-moon-outline:before {\n  content: \"\"; }\n\n.ion-ios-more:before {\n  content: \"\"; }\n\n.ion-ios-more-outline:before {\n  content: \"\"; }\n\n.ion-ios-musical-note:before {\n  content: \"\"; }\n\n.ion-ios-musical-notes:before {\n  content: \"\"; }\n\n.ion-ios-navigate:before {\n  content: \"\"; }\n\n.ion-ios-navigate-outline:before {\n  content: \"\"; }\n\n.ion-ios-nutrition:before {\n  content: \"\"; }\n\n.ion-ios-nutrition-outline:before {\n  content: \"\"; }\n\n.ion-ios-paper:before {\n  content: \"\"; }\n\n.ion-ios-paper-outline:before {\n  content: \"\"; }\n\n.ion-ios-paperplane:before {\n  content: \"\"; }\n\n.ion-ios-paperplane-outline:before {\n  content: \"\"; }\n\n.ion-ios-partlysunny:before {\n  content: \"\"; }\n\n.ion-ios-partlysunny-outline:before {\n  content: \"\"; }\n\n.ion-ios-pause:before {\n  content: \"\"; }\n\n.ion-ios-pause-outline:before {\n  content: \"\"; }\n\n.ion-ios-paw:before {\n  content: \"\"; }\n\n.ion-ios-paw-outline:before {\n  content: \"\"; }\n\n.ion-ios-people:before {\n  content: \"\"; }\n\n.ion-ios-people-outline:before {\n  content: \"\"; }\n\n.ion-ios-person:before {\n  content: \"\"; }\n\n.ion-ios-person-outline:before {\n  content: \"\"; }\n\n.ion-ios-personadd:before {\n  content: \"\"; }\n\n.ion-ios-personadd-outline:before {\n  content: \"\"; }\n\n.ion-ios-photos:before {\n  content: \"\"; }\n\n.ion-ios-photos-outline:before {\n  content: \"\"; }\n\n.ion-ios-pie:before {\n  content: \"\"; }\n\n.ion-ios-pie-outline:before {\n  content: \"\"; }\n\n.ion-ios-pint:before {\n  content: \"\"; }\n\n.ion-ios-pint-outline:before {\n  content: \"\"; }\n\n.ion-ios-play:before {\n  content: \"\"; }\n\n.ion-ios-play-outline:before {\n  content: \"\"; }\n\n.ion-ios-plus:before {\n  content: \"\"; }\n\n.ion-ios-plus-empty:before {\n  content: \"\"; }\n\n.ion-ios-plus-outline:before {\n  content: \"\"; }\n\n.ion-ios-pricetag:before {\n  content: \"\"; }\n\n.ion-ios-pricetag-outline:before {\n  content: \"\"; }\n\n.ion-ios-pricetags:before {\n  content: \"\"; }\n\n.ion-ios-pricetags-outline:before {\n  content: \"\"; }\n\n.ion-ios-printer:before {\n  content: \"\"; }\n\n.ion-ios-printer-outline:before {\n  content: \"\"; }\n\n.ion-ios-pulse:before {\n  content: \"\"; }\n\n.ion-ios-pulse-strong:before {\n  content: \"\"; }\n\n.ion-ios-rainy:before {\n  content: \"\"; }\n\n.ion-ios-rainy-outline:before {\n  content: \"\"; }\n\n.ion-ios-recording:before {\n  content: \"\"; }\n\n.ion-ios-recording-outline:before {\n  content: \"\"; }\n\n.ion-ios-redo:before {\n  content: \"\"; }\n\n.ion-ios-redo-outline:before {\n  content: \"\"; }\n\n.ion-ios-refresh:before {\n  content: \"\"; }\n\n.ion-ios-refresh-empty:before {\n  content: \"\"; }\n\n.ion-ios-refresh-outline:before {\n  content: \"\"; }\n\n.ion-ios-reload:before {\n  content: \"\"; }\n\n.ion-ios-reverse-camera:before {\n  content: \"\"; }\n\n.ion-ios-reverse-camera-outline:before {\n  content: \"\"; }\n\n.ion-ios-rewind:before {\n  content: \"\"; }\n\n.ion-ios-rewind-outline:before {\n  content: \"\"; }\n\n.ion-ios-rose:before {\n  content: \"\"; }\n\n.ion-ios-rose-outline:before {\n  content: \"\"; }\n\n.ion-ios-search:before {\n  content: \"\"; }\n\n.ion-ios-search-strong:before {\n  content: \"\"; }\n\n.ion-ios-settings:before {\n  content: \"\"; }\n\n.ion-ios-settings-strong:before {\n  content: \"\"; }\n\n.ion-ios-shuffle:before {\n  content: \"\"; }\n\n.ion-ios-shuffle-strong:before {\n  content: \"\"; }\n\n.ion-ios-skipbackward:before {\n  content: \"\"; }\n\n.ion-ios-skipbackward-outline:before {\n  content: \"\"; }\n\n.ion-ios-skipforward:before {\n  content: \"\"; }\n\n.ion-ios-skipforward-outline:before {\n  content: \"\"; }\n\n.ion-ios-snowy:before {\n  content: \"\"; }\n\n.ion-ios-speedometer:before {\n  content: \"\"; }\n\n.ion-ios-speedometer-outline:before {\n  content: \"\"; }\n\n.ion-ios-star:before {\n  content: \"\"; }\n\n.ion-ios-star-half:before {\n  content: \"\"; }\n\n.ion-ios-star-outline:before {\n  content: \"\"; }\n\n.ion-ios-stopwatch:before {\n  content: \"\"; }\n\n.ion-ios-stopwatch-outline:before {\n  content: \"\"; }\n\n.ion-ios-sunny:before {\n  content: \"\"; }\n\n.ion-ios-sunny-outline:before {\n  content: \"\"; }\n\n.ion-ios-telephone:before {\n  content: \"\"; }\n\n.ion-ios-telephone-outline:before {\n  content: \"\"; }\n\n.ion-ios-tennisball:before {\n  content: \"\"; }\n\n.ion-ios-tennisball-outline:before {\n  content: \"\"; }\n\n.ion-ios-thunderstorm:before {\n  content: \"\"; }\n\n.ion-ios-thunderstorm-outline:before {\n  content: \"\"; }\n\n.ion-ios-time:before {\n  content: \"\"; }\n\n.ion-ios-time-outline:before {\n  content: \"\"; }\n\n.ion-ios-timer:before {\n  content: \"\"; }\n\n.ion-ios-timer-outline:before {\n  content: \"\"; }\n\n.ion-ios-toggle:before {\n  content: \"\"; }\n\n.ion-ios-toggle-outline:before {\n  content: \"\"; }\n\n.ion-ios-trash:before {\n  content: \"\"; }\n\n.ion-ios-trash-outline:before {\n  content: \"\"; }\n\n.ion-ios-undo:before {\n  content: \"\"; }\n\n.ion-ios-undo-outline:before {\n  content: \"\"; }\n\n.ion-ios-unlocked:before {\n  content: \"\"; }\n\n.ion-ios-unlocked-outline:before {\n  content: \"\"; }\n\n.ion-ios-upload:before {\n  content: \"\"; }\n\n.ion-ios-upload-outline:before {\n  content: \"\"; }\n\n.ion-ios-videocam:before {\n  content: \"\"; }\n\n.ion-ios-videocam-outline:before {\n  content: \"\"; }\n\n.ion-ios-volume-high:before {\n  content: \"\"; }\n\n.ion-ios-volume-low:before {\n  content: \"\"; }\n\n.ion-ios-wineglass:before {\n  content: \"\"; }\n\n.ion-ios-wineglass-outline:before {\n  content: \"\"; }\n\n.ion-ios-world:before {\n  content: \"\"; }\n\n.ion-ios-world-outline:before {\n  content: \"\"; }\n\n.ion-ipad:before {\n  content: \"\"; }\n\n.ion-iphone:before {\n  content: \"\"; }\n\n.ion-ipod:before {\n  content: \"\"; }\n\n.ion-jet:before {\n  content: \"\"; }\n\n.ion-key:before {\n  content: \"\"; }\n\n.ion-knife:before {\n  content: \"\"; }\n\n.ion-laptop:before {\n  content: \"\"; }\n\n.ion-leaf:before {\n  content: \"\"; }\n\n.ion-levels:before {\n  content: \"\"; }\n\n.ion-lightbulb:before {\n  content: \"\"; }\n\n.ion-link:before {\n  content: \"\"; }\n\n.ion-load-a:before {\n  content: \"\"; }\n\n.ion-load-b:before {\n  content: \"\"; }\n\n.ion-load-c:before {\n  content: \"\"; }\n\n.ion-load-d:before {\n  content: \"\"; }\n\n.ion-location:before {\n  content: \"\"; }\n\n.ion-lock-combination:before {\n  content: \"\"; }\n\n.ion-locked:before {\n  content: \"\"; }\n\n.ion-log-in:before {\n  content: \"\"; }\n\n.ion-log-out:before {\n  content: \"\"; }\n\n.ion-loop:before {\n  content: \"\"; }\n\n.ion-magnet:before {\n  content: \"\"; }\n\n.ion-male:before {\n  content: \"\"; }\n\n.ion-man:before {\n  content: \"\"; }\n\n.ion-map:before {\n  content: \"\"; }\n\n.ion-medkit:before {\n  content: \"\"; }\n\n.ion-merge:before {\n  content: \"\"; }\n\n.ion-mic-a:before {\n  content: \"\"; }\n\n.ion-mic-b:before {\n  content: \"\"; }\n\n.ion-mic-c:before {\n  content: \"\"; }\n\n.ion-minus:before {\n  content: \"\"; }\n\n.ion-minus-circled:before {\n  content: \"\"; }\n\n.ion-minus-round:before {\n  content: \"\"; }\n\n.ion-model-s:before {\n  content: \"\"; }\n\n.ion-monitor:before {\n  content: \"\"; }\n\n.ion-more:before {\n  content: \"\"; }\n\n.ion-mouse:before {\n  content: \"\"; }\n\n.ion-music-note:before {\n  content: \"\"; }\n\n.ion-navicon:before {\n  content: \"\"; }\n\n.ion-navicon-round:before {\n  content: \"\"; }\n\n.ion-navigate:before {\n  content: \"\"; }\n\n.ion-network:before {\n  content: \"\"; }\n\n.ion-no-smoking:before {\n  content: \"\"; }\n\n.ion-nuclear:before {\n  content: \"\"; }\n\n.ion-outlet:before {\n  content: \"\"; }\n\n.ion-paintbrush:before {\n  content: \"\"; }\n\n.ion-paintbucket:before {\n  content: \"\"; }\n\n.ion-paper-airplane:before {\n  content: \"\"; }\n\n.ion-paperclip:before {\n  content: \"\"; }\n\n.ion-pause:before {\n  content: \"\"; }\n\n.ion-person:before {\n  content: \"\"; }\n\n.ion-person-add:before {\n  content: \"\"; }\n\n.ion-person-stalker:before {\n  content: \"\"; }\n\n.ion-pie-graph:before {\n  content: \"\"; }\n\n.ion-pin:before {\n  content: \"\"; }\n\n.ion-pinpoint:before {\n  content: \"\"; }\n\n.ion-pizza:before {\n  content: \"\"; }\n\n.ion-plane:before {\n  content: \"\"; }\n\n.ion-planet:before {\n  content: \"\"; }\n\n.ion-play:before {\n  content: \"\"; }\n\n.ion-playstation:before {\n  content: \"\"; }\n\n.ion-plus:before {\n  content: \"\"; }\n\n.ion-plus-circled:before {\n  content: \"\"; }\n\n.ion-plus-round:before {\n  content: \"\"; }\n\n.ion-podium:before {\n  content: \"\"; }\n\n.ion-pound:before {\n  content: \"\"; }\n\n.ion-power:before {\n  content: \"\"; }\n\n.ion-pricetag:before {\n  content: \"\"; }\n\n.ion-pricetags:before {\n  content: \"\"; }\n\n.ion-printer:before {\n  content: \"\"; }\n\n.ion-pull-request:before {\n  content: \"\"; }\n\n.ion-qr-scanner:before {\n  content: \"\"; }\n\n.ion-quote:before {\n  content: \"\"; }\n\n.ion-radio-waves:before {\n  content: \"\"; }\n\n.ion-record:before {\n  content: \"\"; }\n\n.ion-refresh:before {\n  content: \"\"; }\n\n.ion-reply:before {\n  content: \"\"; }\n\n.ion-reply-all:before {\n  content: \"\"; }\n\n.ion-ribbon-a:before {\n  content: \"\"; }\n\n.ion-ribbon-b:before {\n  content: \"\"; }\n\n.ion-sad:before {\n  content: \"\"; }\n\n.ion-sad-outline:before {\n  content: \"\"; }\n\n.ion-scissors:before {\n  content: \"\"; }\n\n.ion-search:before {\n  content: \"\"; }\n\n.ion-settings:before {\n  content: \"\"; }\n\n.ion-share:before {\n  content: \"\"; }\n\n.ion-shuffle:before {\n  content: \"\"; }\n\n.ion-skip-backward:before {\n  content: \"\"; }\n\n.ion-skip-forward:before {\n  content: \"\"; }\n\n.ion-social-android:before {\n  content: \"\"; }\n\n.ion-social-android-outline:before {\n  content: \"\"; }\n\n.ion-social-angular:before {\n  content: \"\"; }\n\n.ion-social-angular-outline:before {\n  content: \"\"; }\n\n.ion-social-apple:before {\n  content: \"\"; }\n\n.ion-social-apple-outline:before {\n  content: \"\"; }\n\n.ion-social-bitcoin:before {\n  content: \"\"; }\n\n.ion-social-bitcoin-outline:before {\n  content: \"\"; }\n\n.ion-social-buffer:before {\n  content: \"\"; }\n\n.ion-social-buffer-outline:before {\n  content: \"\"; }\n\n.ion-social-chrome:before {\n  content: \"\"; }\n\n.ion-social-chrome-outline:before {\n  content: \"\"; }\n\n.ion-social-codepen:before {\n  content: \"\"; }\n\n.ion-social-codepen-outline:before {\n  content: \"\"; }\n\n.ion-social-css3:before {\n  content: \"\"; }\n\n.ion-social-css3-outline:before {\n  content: \"\"; }\n\n.ion-social-designernews:before {\n  content: \"\"; }\n\n.ion-social-designernews-outline:before {\n  content: \"\"; }\n\n.ion-social-dribbble:before {\n  content: \"\"; }\n\n.ion-social-dribbble-outline:before {\n  content: \"\"; }\n\n.ion-social-dropbox:before {\n  content: \"\"; }\n\n.ion-social-dropbox-outline:before {\n  content: \"\"; }\n\n.ion-social-euro:before {\n  content: \"\"; }\n\n.ion-social-euro-outline:before {\n  content: \"\"; }\n\n.ion-social-facebook:before {\n  content: \"\"; }\n\n.ion-social-facebook-outline:before {\n  content: \"\"; }\n\n.ion-social-foursquare:before {\n  content: \"\"; }\n\n.ion-social-foursquare-outline:before {\n  content: \"\"; }\n\n.ion-social-freebsd-devil:before {\n  content: \"\"; }\n\n.ion-social-github:before {\n  content: \"\"; }\n\n.ion-social-github-outline:before {\n  content: \"\"; }\n\n.ion-social-google:before {\n  content: \"\"; }\n\n.ion-social-google-outline:before {\n  content: \"\"; }\n\n.ion-social-googleplus:before {\n  content: \"\"; }\n\n.ion-social-googleplus-outline:before {\n  content: \"\"; }\n\n.ion-social-hackernews:before {\n  content: \"\"; }\n\n.ion-social-hackernews-outline:before {\n  content: \"\"; }\n\n.ion-social-html5:before {\n  content: \"\"; }\n\n.ion-social-html5-outline:before {\n  content: \"\"; }\n\n.ion-social-instagram:before {\n  content: \"\"; }\n\n.ion-social-instagram-outline:before {\n  content: \"\"; }\n\n.ion-social-javascript:before {\n  content: \"\"; }\n\n.ion-social-javascript-outline:before {\n  content: \"\"; }\n\n.ion-social-linkedin:before {\n  content: \"\"; }\n\n.ion-social-linkedin-outline:before {\n  content: \"\"; }\n\n.ion-social-markdown:before {\n  content: \"\"; }\n\n.ion-social-nodejs:before {\n  content: \"\"; }\n\n.ion-social-octocat:before {\n  content: \"\"; }\n\n.ion-social-pinterest:before {\n  content: \"\"; }\n\n.ion-social-pinterest-outline:before {\n  content: \"\"; }\n\n.ion-social-python:before {\n  content: \"\"; }\n\n.ion-social-reddit:before {\n  content: \"\"; }\n\n.ion-social-reddit-outline:before {\n  content: \"\"; }\n\n.ion-social-rss:before {\n  content: \"\"; }\n\n.ion-social-rss-outline:before {\n  content: \"\"; }\n\n.ion-social-sass:before {\n  content: \"\"; }\n\n.ion-social-skype:before {\n  content: \"\"; }\n\n.ion-social-skype-outline:before {\n  content: \"\"; }\n\n.ion-social-snapchat:before {\n  content: \"\"; }\n\n.ion-social-snapchat-outline:before {\n  content: \"\"; }\n\n.ion-social-tumblr:before {\n  content: \"\"; }\n\n.ion-social-tumblr-outline:before {\n  content: \"\"; }\n\n.ion-social-tux:before {\n  content: \"\"; }\n\n.ion-social-twitch:before {\n  content: \"\"; }\n\n.ion-social-twitch-outline:before {\n  content: \"\"; }\n\n.ion-social-twitter:before {\n  content: \"\"; }\n\n.ion-social-twitter-outline:before {\n  content: \"\"; }\n\n.ion-social-usd:before {\n  content: \"\"; }\n\n.ion-social-usd-outline:before {\n  content: \"\"; }\n\n.ion-social-vimeo:before {\n  content: \"\"; }\n\n.ion-social-vimeo-outline:before {\n  content: \"\"; }\n\n.ion-social-whatsapp:before {\n  content: \"\"; }\n\n.ion-social-whatsapp-outline:before {\n  content: \"\"; }\n\n.ion-social-windows:before {\n  content: \"\"; }\n\n.ion-social-windows-outline:before {\n  content: \"\"; }\n\n.ion-social-wordpress:before {\n  content: \"\"; }\n\n.ion-social-wordpress-outline:before {\n  content: \"\"; }\n\n.ion-social-yahoo:before {\n  content: \"\"; }\n\n.ion-social-yahoo-outline:before {\n  content: \"\"; }\n\n.ion-social-yen:before {\n  content: \"\"; }\n\n.ion-social-yen-outline:before {\n  content: \"\"; }\n\n.ion-social-youtube:before {\n  content: \"\"; }\n\n.ion-social-youtube-outline:before {\n  content: \"\"; }\n\n.ion-soup-can:before {\n  content: \"\"; }\n\n.ion-soup-can-outline:before {\n  content: \"\"; }\n\n.ion-speakerphone:before {\n  content: \"\"; }\n\n.ion-speedometer:before {\n  content: \"\"; }\n\n.ion-spoon:before {\n  content: \"\"; }\n\n.ion-star:before {\n  content: \"\"; }\n\n.ion-stats-bars:before {\n  content: \"\"; }\n\n.ion-steam:before {\n  content: \"\"; }\n\n.ion-stop:before {\n  content: \"\"; }\n\n.ion-thermometer:before {\n  content: \"\"; }\n\n.ion-thumbsdown:before {\n  content: \"\"; }\n\n.ion-thumbsup:before {\n  content: \"\"; }\n\n.ion-toggle:before {\n  content: \"\"; }\n\n.ion-toggle-filled:before {\n  content: \"\"; }\n\n.ion-transgender:before {\n  content: \"\"; }\n\n.ion-trash-a:before {\n  content: \"\"; }\n\n.ion-trash-b:before {\n  content: \"\"; }\n\n.ion-trophy:before {\n  content: \"\"; }\n\n.ion-tshirt:before {\n  content: \"\"; }\n\n.ion-tshirt-outline:before {\n  content: \"\"; }\n\n.ion-umbrella:before {\n  content: \"\"; }\n\n.ion-university:before {\n  content: \"\"; }\n\n.ion-unlocked:before {\n  content: \"\"; }\n\n.ion-upload:before {\n  content: \"\"; }\n\n.ion-usb:before {\n  content: \"\"; }\n\n.ion-videocamera:before {\n  content: \"\"; }\n\n.ion-volume-high:before {\n  content: \"\"; }\n\n.ion-volume-low:before {\n  content: \"\"; }\n\n.ion-volume-medium:before {\n  content: \"\"; }\n\n.ion-volume-mute:before {\n  content: \"\"; }\n\n.ion-wand:before {\n  content: \"\"; }\n\n.ion-waterdrop:before {\n  content: \"\"; }\n\n.ion-wifi:before {\n  content: \"\"; }\n\n.ion-wineglass:before {\n  content: \"\"; }\n\n.ion-woman:before {\n  content: \"\"; }\n\n.ion-wrench:before {\n  content: \"\"; }\n\n.ion-xbox:before {\n  content: \"\"; }\n\n/**\n * Resets\n * --------------------------------------------------\n * Adapted from normalize.css and some reset.css. We don't care even one\n * bit about old IE, so we don't need any hacks for that in here.\n *\n * There are probably other things we could remove here, as well.\n *\n * normalize.css v2.1.2 | MIT License | git.io/normalize\n\n * Eric Meyer's Reset CSS v2.0 (http://meyerweb.com/eric/tools/css/reset/)\n * http://cssreset.com\n */\nhtml, body, div, span, applet, object, iframe,\nh1, h2, h3, h4, h5, h6, p, blockquote, pre,\na, abbr, acronym, address, big, cite, code,\ndel, dfn, em, img, ins, kbd, q, s, samp,\nsmall, strike, strong, sub, sup, tt, var,\nb, i, u, center,\ndl, dt, dd, ol, ul, li,\nfieldset, form, label, legend,\ntable, caption, tbody, tfoot, thead, tr, th, td,\narticle, aside, canvas, details, embed, fieldset,\nfigure, figcaption, footer, header, hgroup,\nmenu, nav, output, ruby, section, summary,\ntime, mark, audio, video {\n  margin: 0;\n  padding: 0;\n  border: 0;\n  vertical-align: baseline;\n  font: inherit;\n  font-size: 100%; }\n\nol, ul {\n  list-style: none; }\n\nblockquote, q {\n  quotes: none; }\n\nblockquote:before, blockquote:after,\nq:before, q:after {\n  content: '';\n  content: none; }\n\n/**\n * Prevent modern browsers from displaying `audio` without controls.\n * Remove excess height in iOS 5 devices.\n */\naudio:not([controls]) {\n  display: none;\n  height: 0; }\n\n/**\n * Hide the `template` element in IE, Safari, and Firefox < 22.\n */\n[hidden],\ntemplate {\n  display: none; }\n\nscript {\n  display: none !important; }\n\n/* ==========================================================================\n   Base\n   ========================================================================== */\n/**\n * 1. Set default font family to sans-serif.\n * 2. Prevent iOS text size adjust after orientation change, without disabling\n *  user zoom.\n */\nhtml {\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  -ms-user-select: none;\n  user-select: none;\n  font-family: sans-serif;\n  /* 1 */\n  -webkit-text-size-adjust: 100%;\n  -ms-text-size-adjust: 100%;\n  /* 2 */\n  -webkit-text-size-adjust: 100%;\n  /* 2 */ }\n\n/**\n * Remove default margin.\n */\nbody {\n  margin: 0;\n  line-height: 1; }\n\n/**\n * Remove default outlines.\n */\na,\nbutton,\n:focus,\na:focus,\nbutton:focus,\na:active,\na:hover {\n  outline: 0; }\n\n/* *\n * Remove tap highlight color\n */\na {\n  -webkit-user-drag: none;\n  -webkit-tap-highlight-color: transparent;\n  -webkit-tap-highlight-color: transparent; }\n  a[href]:hover {\n    cursor: pointer; }\n\n/* ==========================================================================\n   Typography\n   ========================================================================== */\n/**\n * Address style set to `bolder` in Firefox 4+, Safari 5, and Chrome.\n */\nb,\nstrong {\n  font-weight: bold; }\n\n/**\n * Address styling not present in Safari 5 and Chrome.\n */\ndfn {\n  font-style: italic; }\n\n/**\n * Address differences between Firefox and other browsers.\n */\nhr {\n  -moz-box-sizing: content-box;\n  box-sizing: content-box;\n  height: 0; }\n\n/**\n * Correct font family set oddly in Safari 5 and Chrome.\n */\ncode,\nkbd,\npre,\nsamp {\n  font-size: 1em;\n  font-family: monospace, serif; }\n\n/**\n * Improve readability of pre-formatted text in all browsers.\n */\npre {\n  white-space: pre-wrap; }\n\n/**\n * Set consistent quote types.\n */\nq {\n  quotes: \"\\201C\" \"\\201D\" \"\\2018\" \"\\2019\"; }\n\n/**\n * Address inconsistent and variable font size in all browsers.\n */\nsmall {\n  font-size: 80%; }\n\n/**\n * Prevent `sub` and `sup` affecting `line-height` in all browsers.\n */\nsub,\nsup {\n  position: relative;\n  vertical-align: baseline;\n  font-size: 75%;\n  line-height: 0; }\n\nsup {\n  top: -0.5em; }\n\nsub {\n  bottom: -0.25em; }\n\n/**\n * Define consistent border, margin, and padding.\n */\nfieldset {\n  margin: 0 2px;\n  padding: 0.35em 0.625em 0.75em;\n  border: 1px solid #c0c0c0; }\n\n/**\n * 1. Correct `color` not being inherited in IE 8/9.\n * 2. Remove padding so people aren't caught out if they zero out fieldsets.\n */\nlegend {\n  padding: 0;\n  /* 2 */\n  border: 0;\n  /* 1 */ }\n\n/**\n * 1. Correct font family not being inherited in all browsers.\n * 2. Correct font size not being inherited in all browsers.\n * 3. Address margins set differently in Firefox 4+, Safari 5, and Chrome.\n * 4. Remove any default :focus styles\n * 5. Make sure webkit font smoothing is being inherited\n * 6. Remove default gradient in Android Firefox / FirefoxOS\n */\nbutton,\ninput,\nselect,\ntextarea {\n  margin: 0;\n  /* 3 */\n  font-size: 100%;\n  /* 2 */\n  font-family: inherit;\n  /* 1 */\n  outline-offset: 0;\n  /* 4 */\n  outline-style: none;\n  /* 4 */\n  outline-width: 0;\n  /* 4 */\n  -webkit-font-smoothing: inherit;\n  /* 5 */\n  background-image: none;\n  /* 6 */ }\n\n/**\n * Address Firefox 4+ setting `line-height` on `input` using `importnt` in\n * the UA stylesheet.\n */\nbutton,\ninput {\n  line-height: normal; }\n\n/**\n * Address inconsistent `text-transform` inheritance for `button` and `select`.\n * All other form control elements do not inherit `text-transform` values.\n * Correct `button` style inheritance in Chrome, Safari 5+, and IE 8+.\n * Correct `select` style inheritance in Firefox 4+ and Opera.\n */\nbutton,\nselect {\n  text-transform: none; }\n\n/**\n * 1. Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio`\n *  and `video` controls.\n * 2. Correct inability to style clickable `input` types in iOS.\n * 3. Improve usability and consistency of cursor style between image-type\n *  `input` and others.\n */\nbutton,\nhtml input[type=\"button\"], input[type=\"reset\"],\ninput[type=\"submit\"] {\n  cursor: pointer;\n  /* 3 */\n  -webkit-appearance: button;\n  /* 2 */ }\n\n/**\n * Re-set default cursor for disabled elements.\n */\nbutton[disabled],\nhtml input[disabled] {\n  cursor: default; }\n\n/**\n * 1. Address `appearance` set to `searchfield` in Safari 5 and Chrome.\n * 2. Address `box-sizing` set to `border-box` in Safari 5 and Chrome\n *  (include `-moz` to future-proof).\n */\ninput[type=\"search\"] {\n  -webkit-box-sizing: content-box;\n  /* 2 */\n  -moz-box-sizing: content-box;\n  box-sizing: content-box;\n  -webkit-appearance: textfield;\n  /* 1 */ }\n\n/**\n * Remove inner padding and search cancel button in Safari 5 and Chrome\n * on OS X.\n */\ninput[type=\"search\"]::-webkit-search-cancel-button,\ninput[type=\"search\"]::-webkit-search-decoration {\n  -webkit-appearance: none; }\n\n/**\n * Remove inner padding and border in Firefox 4+.\n */\nbutton::-moz-focus-inner,\ninput::-moz-focus-inner {\n  padding: 0;\n  border: 0; }\n\n/**\n * 1. Remove default vertical scrollbar in IE 8/9.\n * 2. Improve readability and alignment in all browsers.\n */\ntextarea {\n  overflow: auto;\n  /* 1 */\n  vertical-align: top;\n  /* 2 */ }\n\nimg {\n  -webkit-user-drag: none; }\n\n/* ==========================================================================\n   Tables\n   ========================================================================== */\n/**\n * Remove most spacing between table cells.\n */\ntable {\n  border-spacing: 0;\n  border-collapse: collapse; }\n\n/**\n * Scaffolding\n * --------------------------------------------------\n */\n*,\n*:before,\n*:after {\n  -webkit-box-sizing: border-box;\n  -moz-box-sizing: border-box;\n  box-sizing: border-box; }\n\nhtml {\n  overflow: hidden;\n  -ms-touch-action: pan-y;\n  touch-action: pan-y; }\n\nbody,\n.ionic-body {\n  -webkit-touch-callout: none;\n  -webkit-font-smoothing: antialiased;\n  font-smoothing: antialiased;\n  -webkit-text-size-adjust: none;\n  -moz-text-size-adjust: none;\n  text-size-adjust: none;\n  -webkit-tap-highlight-color: transparent;\n  -webkit-tap-highlight-color: transparent;\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  -ms-user-select: none;\n  user-select: none;\n  top: 0;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  overflow: hidden;\n  margin: 0;\n  padding: 0;\n  color: #000;\n  word-wrap: break-word;\n  font-size: 14px;\n  font-family: \"Helvetica Neue\", \"Roboto\", \"Segoe UI\", sans-serif;\n  line-height: 20px;\n  text-rendering: optimizeLegibility;\n  -webkit-backface-visibility: hidden;\n  -webkit-user-drag: none;\n  -ms-content-zooming: none; }\n\nbody.grade-b,\nbody.grade-c {\n  text-rendering: auto; }\n\n.content {\n  position: relative; }\n\n.scroll-content {\n  position: absolute;\n  top: 0;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  overflow: hidden;\n  margin-top: -1px;\n  padding-top: 1px;\n  margin-bottom: -1px;\n  width: auto;\n  height: auto; }\n\n.menu .scroll-content.scroll-content-false {\n  z-index: 11; }\n\n.scroll-view {\n  position: relative;\n  display: block;\n  overflow: hidden;\n  margin-top: -1px; }\n\n/**\n * Scroll is the scroll view component available for complex and custom\n * scroll view functionality.\n */\n.scroll {\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  -ms-user-select: none;\n  user-select: none;\n  -webkit-touch-callout: none;\n  -webkit-text-size-adjust: none;\n  -moz-text-size-adjust: none;\n  text-size-adjust: none;\n  -webkit-transform-origin: left top;\n  transform-origin: left top; }\n\n/**\n * Set ms-viewport to prevent MS \"page squish\" and allow fluid scrolling\n * https://msdn.microsoft.com/en-us/library/ie/hh869615(v=vs.85).aspx\n\n@-ms-viewport {\n  width: device-width; }\n */\n.scroll-bar {\n  position: absolute;\n  z-index: 9999; }\n\n.ng-animate .scroll-bar {\n  visibility: hidden; }\n\n.scroll-bar-h {\n  right: 2px;\n  bottom: 3px;\n  left: 2px;\n  height: 3px; }\n  .scroll-bar-h .scroll-bar-indicator {\n    height: 100%; }\n\n.scroll-bar-v {\n  top: 2px;\n  right: 3px;\n  bottom: 2px;\n  width: 3px; }\n  .scroll-bar-v .scroll-bar-indicator {\n    width: 100%; }\n\n.scroll-bar-indicator {\n  position: absolute;\n  border-radius: 4px;\n  background: rgba(0, 0, 0, 0.3);\n  opacity: 1;\n  -webkit-transition: opacity 0.3s linear;\n  transition: opacity 0.3s linear; }\n  .scroll-bar-indicator.scroll-bar-fade-out {\n    opacity: 0; }\n\n.platform-android .scroll-bar-indicator {\n  border-radius: 0; }\n\n.grade-b .scroll-bar-indicator,\n.grade-c .scroll-bar-indicator {\n  background: #aaa; }\n  .grade-b .scroll-bar-indicator.scroll-bar-fade-out,\n  .grade-c .scroll-bar-indicator.scroll-bar-fade-out {\n    -webkit-transition: none;\n    transition: none; }\n\nion-infinite-scroll {\n  height: 60px;\n  width: 100%;\n  display: block;\n  display: -webkit-box;\n  display: -webkit-flex;\n  display: -moz-box;\n  display: -moz-flex;\n  display: -ms-flexbox;\n  display: flex;\n  -webkit-box-direction: normal;\n  -webkit-box-orient: horizontal;\n  -webkit-flex-direction: row;\n  -moz-flex-direction: row;\n  -ms-flex-direction: row;\n  flex-direction: row;\n  -webkit-box-pack: center;\n  -ms-flex-pack: center;\n  -webkit-justify-content: center;\n  -moz-justify-content: center;\n  justify-content: center;\n  -webkit-box-align: center;\n  -ms-flex-align: center;\n  -webkit-align-items: center;\n  -moz-align-items: center;\n  align-items: center; }\n  ion-infinite-scroll .icon {\n    color: #666666;\n    font-size: 30px;\n    color: #666666; }\n  ion-infinite-scroll:not(.active) .spinner,\n  ion-infinite-scroll:not(.active) .icon:before {\n    display: none; }\n\n.overflow-scroll {\n  overflow-x: hidden;\n  overflow-y: scroll;\n  -webkit-overflow-scrolling: touch;\n  top: 0;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  position: absolute; }\n  .overflow-scroll .scroll {\n    position: static;\n    height: 100%;\n    -webkit-transform: translate3d(0, 0, 0); }\n\n/* If you change these, change platform.scss as well */\n.has-header {\n  top: 44px; }\n\n.no-header {\n  top: 0; }\n\n.has-subheader {\n  top: 88px; }\n\n.has-tabs-top {\n  top: 93px; }\n\n.has-header.has-subheader.has-tabs-top {\n  top: 137px; }\n\n.has-footer {\n  bottom: 44px; }\n\n.has-subfooter {\n  bottom: 88px; }\n\n.has-tabs,\n.bar-footer.has-tabs {\n  bottom: 49px; }\n  .has-tabs.pane,\n  .bar-footer.has-tabs.pane {\n    bottom: 49px;\n    height: auto; }\n\n.has-footer.has-tabs {\n  bottom: 93px; }\n\n.pane {\n  -webkit-transform: translate3d(0, 0, 0);\n  transform: translate3d(0, 0, 0);\n  -webkit-transition-duration: 0;\n  transition-duration: 0;\n  z-index: 1; }\n\n.view {\n  z-index: 1; }\n\n.pane,\n.view {\n  position: absolute;\n  top: 0;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  width: 100%;\n  height: 100%;\n  background-color: #fff;\n  overflow: hidden; }\n\n.view-container {\n  position: absolute;\n  display: block;\n  width: 100%;\n  height: 100%; }\n\n/**\n * Typography\n * --------------------------------------------------\n */\np {\n  margin: 0 0 10px; }\n\nsmall {\n  font-size: 85%; }\n\ncite {\n  font-style: normal; }\n\n.text-left {\n  text-align: left; }\n\n.text-right {\n  text-align: right; }\n\n.text-center {\n  text-align: center; }\n\nh1, h2, h3, h4, h5, h6,\n.h1, .h2, .h3, .h4, .h5, .h6 {\n  color: #000;\n  font-weight: 500;\n  font-family: \"Helvetica Neue\", \"Roboto\", \"Segoe UI\", sans-serif;\n  line-height: 1.2; }\n  h1 small, h2 small, h3 small, h4 small, h5 small, h6 small,\n  .h1 small, .h2 small, .h3 small, .h4 small, .h5 small, .h6 small {\n    font-weight: normal;\n    line-height: 1; }\n\nh1, .h1,\nh2, .h2,\nh3, .h3 {\n  margin-top: 20px;\n  margin-bottom: 10px; }\n  h1:first-child, .h1:first-child,\n  h2:first-child, .h2:first-child,\n  h3:first-child, .h3:first-child {\n    margin-top: 0; }\n  h1 + h1, h1 + .h1,\n  h1 + h2, h1 + .h2,\n  h1 + h3, h1 + .h3, .h1 + h1,\n  .h1 + .h1,\n  .h1 + h2,\n  .h1 + .h2,\n  .h1 + h3,\n  .h1 + .h3,\n  h2 + h1, h2 + .h1,\n  h2 + h2, h2 + .h2,\n  h2 + h3, h2 + .h3, .h2 + h1,\n  .h2 + .h1,\n  .h2 + h2,\n  .h2 + .h2,\n  .h2 + h3,\n  .h2 + .h3,\n  h3 + h1, h3 + .h1,\n  h3 + h2, h3 + .h2,\n  h3 + h3, h3 + .h3, .h3 + h1, .h3 + .h1,\n  .h3 + h2, .h3 + .h2,\n  .h3 + h3, .h3 + .h3 {\n    margin-top: 10px; }\n\nh4, .h4,\nh5, .h5,\nh6, .h6 {\n  margin-top: 10px;\n  margin-bottom: 10px; }\n\nh1, .h1 {\n  font-size: 36px; }\n\nh2, .h2 {\n  font-size: 30px; }\n\nh3, .h3 {\n  font-size: 24px; }\n\nh4, .h4 {\n  font-size: 18px; }\n\nh5, .h5 {\n  font-size: 14px; }\n\nh6, .h6 {\n  font-size: 12px; }\n\nh1 small, .h1 small {\n  font-size: 24px; }\n\nh2 small, .h2 small {\n  font-size: 18px; }\n\nh3 small, .h3 small,\nh4 small, .h4 small {\n  font-size: 14px; }\n\ndl {\n  margin-bottom: 20px; }\n\ndt,\ndd {\n  line-height: 1.42857; }\n\ndt {\n  font-weight: bold; }\n\nblockquote {\n  margin: 0 0 20px;\n  padding: 10px 20px;\n  border-left: 5px solid gray; }\n  blockquote p {\n    font-weight: 300;\n    font-size: 17.5px;\n    line-height: 1.25; }\n  blockquote p:last-child {\n    margin-bottom: 0; }\n  blockquote small {\n    display: block;\n    line-height: 1.42857; }\n    blockquote small:before {\n      content: '\\2014 \\00A0'; }\n\nq:before,\nq:after,\nblockquote:before,\nblockquote:after {\n  content: \"\"; }\n\naddress {\n  display: block;\n  margin-bottom: 20px;\n  font-style: normal;\n  line-height: 1.42857; }\n\na.subdued {\n  padding-right: 10px;\n  color: #888;\n  text-decoration: none; }\n  a.subdued:hover {\n    text-decoration: none; }\n  a.subdued:last-child {\n    padding-right: 0; }\n\n/**\n * Action Sheets\n * --------------------------------------------------\n */\n.action-sheet-backdrop {\n  -webkit-transition: background-color 150ms ease-in-out;\n  transition: background-color 150ms ease-in-out;\n  position: fixed;\n  top: 0;\n  left: 0;\n  z-index: 11;\n  width: 100%;\n  height: 100%;\n  background-color: transparent; }\n  .action-sheet-backdrop.active {\n    background-color: rgba(0, 0, 0, 0.4); }\n\n.action-sheet-wrapper {\n  -webkit-transform: translate3d(0, 100%, 0);\n  transform: translate3d(0, 100%, 0);\n  -webkit-transition: all cubic-bezier(0.36, 0.66, 0.04, 1) 500ms;\n  transition: all cubic-bezier(0.36, 0.66, 0.04, 1) 500ms;\n  position: absolute;\n  bottom: 0;\n  left: 0;\n  right: 0;\n  width: 100%;\n  max-width: 500px;\n  margin: auto; }\n\n.action-sheet-up {\n  -webkit-transform: translate3d(0, 0, 0);\n  transform: translate3d(0, 0, 0); }\n\n.action-sheet {\n  margin-left: 8px;\n  margin-right: 8px;\n  width: auto;\n  z-index: 11;\n  overflow: hidden; }\n  .action-sheet .button {\n    display: block;\n    padding: 1px;\n    width: 100%;\n    border-radius: 0;\n    border-color: #d1d3d6;\n    background-color: transparent;\n    color: #007aff;\n    font-size: 21px; }\n    .action-sheet .button:hover {\n      color: #007aff; }\n    .action-sheet .button.destructive {\n      color: #ff3b30; }\n      .action-sheet .button.destructive:hover {\n        color: #ff3b30; }\n  .action-sheet .button.active, .action-sheet .button.activated {\n    box-shadow: none;\n    border-color: #d1d3d6;\n    color: #007aff;\n    background: #e4e5e7; }\n\n.action-sheet-has-icons .icon {\n  position: absolute;\n  left: 16px; }\n\n.action-sheet-title {\n  padding: 16px;\n  color: #8f8f8f;\n  text-align: center;\n  font-size: 13px; }\n\n.action-sheet-group {\n  margin-bottom: 8px;\n  border-radius: 4px;\n  background-color: #fff;\n  overflow: hidden; }\n  .action-sheet-group .button {\n    border-width: 1px 0px 0px 0px; }\n  .action-sheet-group .button:first-child:last-child {\n    border-width: 0; }\n\n.action-sheet-options {\n  background: #f1f2f3; }\n\n.action-sheet-cancel .button {\n  font-weight: 500; }\n\n.action-sheet-open {\n  pointer-events: none; }\n  .action-sheet-open.modal-open .modal {\n    pointer-events: none; }\n  .action-sheet-open .action-sheet-backdrop {\n    pointer-events: auto; }\n\n.platform-android .action-sheet-backdrop.active {\n  background-color: rgba(0, 0, 0, 0.2); }\n\n.platform-android .action-sheet {\n  margin: 0; }\n  .platform-android .action-sheet .action-sheet-title,\n  .platform-android .action-sheet .button {\n    text-align: left;\n    border-color: transparent;\n    font-size: 16px;\n    color: inherit; }\n  .platform-android .action-sheet .action-sheet-title {\n    font-size: 14px;\n    padding: 16px;\n    color: #666; }\n  .platform-android .action-sheet .button.active,\n  .platform-android .action-sheet .button.activated {\n    background: #e8e8e8; }\n\n.platform-android .action-sheet-group {\n  margin: 0;\n  border-radius: 0;\n  background-color: #fafafa; }\n\n.platform-android .action-sheet-cancel {\n  display: none; }\n\n.platform-android .action-sheet-has-icons .button {\n  padding-left: 56px; }\n\n.backdrop {\n  position: fixed;\n  top: 0;\n  left: 0;\n  z-index: 11;\n  width: 100%;\n  height: 100%;\n  background-color: rgba(0, 0, 0, 0.4);\n  visibility: hidden;\n  opacity: 0;\n  -webkit-transition: 0.1s opacity linear;\n  transition: 0.1s opacity linear; }\n  .backdrop.visible {\n    visibility: visible; }\n  .backdrop.active {\n    opacity: 1; }\n\n/**\n * Bar (Headers and Footers)\n * --------------------------------------------------\n */\n.bar {\n  display: -webkit-box;\n  display: -webkit-flex;\n  display: -moz-box;\n  display: -moz-flex;\n  display: -ms-flexbox;\n  display: flex;\n  -webkit-transform: translate3d(0, 0, 0);\n  transform: translate3d(0, 0, 0);\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  -ms-user-select: none;\n  user-select: none;\n  position: absolute;\n  right: 0;\n  left: 0;\n  z-index: 9;\n  -webkit-box-sizing: border-box;\n  -moz-box-sizing: border-box;\n  box-sizing: border-box;\n  padding: 5px;\n  width: 100%;\n  height: 44px;\n  border-width: 0;\n  border-style: solid;\n  border-top: 1px solid transparent;\n  border-bottom: 1px solid #ddd;\n  background-color: white;\n  /* border-width: 1px will actually create 2 device pixels on retina */\n  /* this nifty trick sets an actual 1px border on hi-res displays */\n  background-size: 0; }\n  @media (min--moz-device-pixel-ratio: 1.5), (-webkit-min-device-pixel-ratio: 1.5), (min-device-pixel-ratio: 1.5), (min-resolution: 144dpi), (min-resolution: 1.5dppx) {\n    .bar {\n      border: none;\n      background-image: linear-gradient(0deg, #ddd, #ddd 50%, transparent 50%);\n      background-position: bottom;\n      background-size: 100% 1px;\n      background-repeat: no-repeat; } }\n  .bar.bar-clear {\n    border: none;\n    background: none;\n    color: #fff; }\n    .bar.bar-clear .button {\n      color: #fff; }\n    .bar.bar-clear .title {\n      color: #fff; }\n  .bar.item-input-inset .item-input-wrapper {\n    margin-top: -1px; }\n    .bar.item-input-inset .item-input-wrapper input {\n      padding-left: 8px;\n      width: 94%;\n      height: 28px;\n      background: transparent; }\n  .bar.bar-light {\n    border-color: #ddd;\n    background-color: white;\n    background-image: linear-gradient(0deg, #ddd, #ddd 50%, transparent 50%);\n    color: #444; }\n    .bar.bar-light .title {\n      color: #444; }\n    .bar.bar-light.bar-footer {\n      background-image: linear-gradient(180deg, #ddd, #ddd 50%, transparent 50%); }\n  .bar.bar-stable {\n    border-color: #b2b2b2;\n    background-color: #f8f8f8;\n    background-image: linear-gradient(0deg, #b2b2b2, #b2b2b2 50%, transparent 50%);\n    color: #444; }\n    .bar.bar-stable .title {\n      color: #444; }\n    .bar.bar-stable.bar-footer {\n      background-image: linear-gradient(180deg, #b2b2b2, #b2b2b2 50%, transparent 50%); }\n  .bar.bar-positive {\n    border-color: #0c60ee;\n    background-color: #387ef5;\n    background-image: linear-gradient(0deg, #0c60ee, #0c60ee 50%, transparent 50%);\n    color: #fff; }\n    .bar.bar-positive .title {\n      color: #fff; }\n    .bar.bar-positive.bar-footer {\n      background-image: linear-gradient(180deg, #0c60ee, #0c60ee 50%, transparent 50%); }\n  .bar.bar-calm {\n    border-color: #0a9dc7;\n    background-color: #11c1f3;\n    background-image: linear-gradient(0deg, #0a9dc7, #0a9dc7 50%, transparent 50%);\n    color: #fff; }\n    .bar.bar-calm .title {\n      color: #fff; }\n    .bar.bar-calm.bar-footer {\n      background-image: linear-gradient(180deg, #0a9dc7, #0a9dc7 50%, transparent 50%); }\n  .bar.bar-assertive {\n    border-color: #e42112;\n    background-color: #ef473a;\n    background-image: linear-gradient(0deg, #e42112, #e42112 50%, transparent 50%);\n    color: #fff; }\n    .bar.bar-assertive .title {\n      color: #fff; }\n    .bar.bar-assertive.bar-footer {\n      background-image: linear-gradient(180deg, #e42112, #e42112 50%, transparent 50%); }\n  .bar.bar-balanced {\n    border-color: #28a54c;\n    background-color: #33cd5f;\n    background-image: linear-gradient(0deg, #28a54c, #28a54c 50%, transparent 50%);\n    color: #fff; }\n    .bar.bar-balanced .title {\n      color: #fff; }\n    .bar.bar-balanced.bar-footer {\n      background-image: linear-gradient(180deg, #28a54c, #0c60ee 50%, transparent 50%); }\n  .bar.bar-energized {\n    border-color: #e6b500;\n    background-color: #ffc900;\n    background-image: linear-gradient(0deg, #e6b500, #e6b500 50%, transparent 50%);\n    color: #fff; }\n    .bar.bar-energized .title {\n      color: #fff; }\n    .bar.bar-energized.bar-footer {\n      background-image: linear-gradient(180deg, #e6b500, #e6b500 50%, transparent 50%); }\n  .bar.bar-royal {\n    border-color: #6b46e5;\n    background-color: #886aea;\n    background-image: linear-gradient(0deg, #6b46e5, #6b46e5 50%, transparent 50%);\n    color: #fff; }\n    .bar.bar-royal .title {\n      color: #fff; }\n    .bar.bar-royal.bar-footer {\n      background-image: linear-gradient(180deg, #6b46e5, #6b46e5 50%, transparent 50%); }\n  .bar.bar-dark {\n    border-color: #111;\n    background-color: #444444;\n    background-image: linear-gradient(0deg, #111, #111 50%, transparent 50%);\n    color: #fff; }\n    .bar.bar-dark .title {\n      color: #fff; }\n    .bar.bar-dark.bar-footer {\n      background-image: linear-gradient(180deg, #111, #111 50%, transparent 50%); }\n  .bar .title {\n    position: absolute;\n    top: 0;\n    right: 0;\n    left: 0;\n    z-index: 0;\n    overflow: hidden;\n    margin: 0 10px;\n    min-width: 30px;\n    height: 43px;\n    text-align: center;\n    text-overflow: ellipsis;\n    white-space: nowrap;\n    font-size: 17px;\n    font-weight: 500;\n    line-height: 44px; }\n    .bar .title.title-left {\n      text-align: left; }\n    .bar .title.title-right {\n      text-align: right; }\n  .bar .title a {\n    color: inherit; }\n  .bar .button {\n    z-index: 1;\n    padding: 0 8px;\n    min-width: initial;\n    min-height: 31px;\n    font-weight: 400;\n    font-size: 13px;\n    line-height: 32px; }\n    .bar .button.button-icon:before,\n    .bar .button .icon:before,\n    .bar .button.icon:before,\n    .bar .button.icon-left:before,\n    .bar .button.icon-right:before {\n      padding-right: 2px;\n      padding-left: 2px;\n      font-size: 20px;\n      line-height: 32px; }\n    .bar .button.button-icon {\n      font-size: 17px; }\n      .bar .button.button-icon .icon:before,\n      .bar .button.button-icon:before,\n      .bar .button.button-icon.icon-left:before,\n      .bar .button.button-icon.icon-right:before {\n        vertical-align: top;\n        font-size: 32px;\n        line-height: 32px; }\n    .bar .button.button-clear {\n      padding-right: 2px;\n      padding-left: 2px;\n      font-weight: 300;\n      font-size: 17px; }\n      .bar .button.button-clear .icon:before,\n      .bar .button.button-clear.icon:before,\n      .bar .button.button-clear.icon-left:before,\n      .bar .button.button-clear.icon-right:before {\n        font-size: 32px;\n        line-height: 32px; }\n    .bar .button.back-button {\n      display: block;\n      margin-right: 5px;\n      padding: 0;\n      white-space: nowrap;\n      font-weight: 400; }\n    .bar .button.back-button.active,\n    .bar .button.back-button.activated {\n      opacity: 0.2; }\n  .bar .button-bar > .button,\n  .bar .buttons > .button {\n    min-height: 31px;\n    line-height: 32px; }\n  .bar .button-bar + .button,\n  .bar .button + .button-bar {\n    margin-left: 5px; }\n  .bar .buttons,\n  .bar .buttons.primary-buttons,\n  .bar .buttons.secondary-buttons {\n    display: inherit; }\n  .bar .buttons span {\n    display: inline-block; }\n  .bar .buttons-left span {\n    margin-right: 5px;\n    display: inherit; }\n  .bar .buttons-right span {\n    margin-left: 5px;\n    display: inherit; }\n  .bar .title + .button:last-child,\n  .bar > .button + .button:last-child,\n  .bar > .button.pull-right,\n  .bar .buttons.pull-right,\n  .bar .title + .buttons {\n    position: absolute;\n    top: 5px;\n    right: 5px;\n    bottom: 5px; }\n\n.platform-android .nav-bar-has-subheader .bar {\n  background-image: none; }\n\n.platform-android .bar .back-button .icon:before {\n  font-size: 24px; }\n\n.platform-android .bar .title {\n  font-size: 19px;\n  line-height: 44px; }\n\n.bar-light .button {\n  border-color: #ddd;\n  background-color: white;\n  color: #444; }\n  .bar-light .button:hover {\n    color: #444;\n    text-decoration: none; }\n  .bar-light .button.active,\n  .bar-light .button.activated {\n    border-color: #ccc;\n    background-color: #fafafa;\n    box-shadow: inset 0 1px 4px rgba(0, 0, 0, 0.1); }\n  .bar-light .button.button-clear {\n    border-color: transparent;\n    background: none;\n    box-shadow: none;\n    color: #444;\n    font-size: 17px; }\n  .bar-light .button.button-icon {\n    border-color: transparent;\n    background: none; }\n\n.bar-stable .button {\n  border-color: #b2b2b2;\n  background-color: #f8f8f8;\n  color: #444; }\n  .bar-stable .button:hover {\n    color: #444;\n    text-decoration: none; }\n  .bar-stable .button.active,\n  .bar-stable .button.activated {\n    border-color: #a2a2a2;\n    background-color: #e5e5e5;\n    box-shadow: inset 0 1px 4px rgba(0, 0, 0, 0.1); }\n  .bar-stable .button.button-clear {\n    border-color: transparent;\n    background: none;\n    box-shadow: none;\n    color: #444;\n    font-size: 17px; }\n  .bar-stable .button.button-icon {\n    border-color: transparent;\n    background: none; }\n\n.bar-positive .button {\n  border-color: #0c60ee;\n  background-color: #387ef5;\n  color: #fff; }\n  .bar-positive .button:hover {\n    color: #fff;\n    text-decoration: none; }\n  .bar-positive .button.active,\n  .bar-positive .button.activated {\n    border-color: #0c60ee;\n    background-color: #0c60ee;\n    box-shadow: inset 0 1px 4px rgba(0, 0, 0, 0.1); }\n  .bar-positive .button.button-clear {\n    border-color: transparent;\n    background: none;\n    box-shadow: none;\n    color: #fff;\n    font-size: 17px; }\n  .bar-positive .button.button-icon {\n    border-color: transparent;\n    background: none; }\n\n.bar-calm .button {\n  border-color: #0a9dc7;\n  background-color: #11c1f3;\n  color: #fff; }\n  .bar-calm .button:hover {\n    color: #fff;\n    text-decoration: none; }\n  .bar-calm .button.active,\n  .bar-calm .button.activated {\n    border-color: #0a9dc7;\n    background-color: #0a9dc7;\n    box-shadow: inset 0 1px 4px rgba(0, 0, 0, 0.1); }\n  .bar-calm .button.button-clear {\n    border-color: transparent;\n    background: none;\n    box-shadow: none;\n    color: #fff;\n    font-size: 17px; }\n  .bar-calm .button.button-icon {\n    border-color: transparent;\n    background: none; }\n\n.bar-assertive .button {\n  border-color: #e42112;\n  background-color: #ef473a;\n  color: #fff; }\n  .bar-assertive .button:hover {\n    color: #fff;\n    text-decoration: none; }\n  .bar-assertive .button.active,\n  .bar-assertive .button.activated {\n    border-color: #e42112;\n    background-color: #e42112;\n    box-shadow: inset 0 1px 4px rgba(0, 0, 0, 0.1); }\n  .bar-assertive .button.button-clear {\n    border-color: transparent;\n    background: none;\n    box-shadow: none;\n    color: #fff;\n    font-size: 17px; }\n  .bar-assertive .button.button-icon {\n    border-color: transparent;\n    background: none; }\n\n.bar-balanced .button {\n  border-color: #28a54c;\n  background-color: #33cd5f;\n  color: #fff; }\n  .bar-balanced .button:hover {\n    color: #fff;\n    text-decoration: none; }\n  .bar-balanced .button.active,\n  .bar-balanced .button.activated {\n    border-color: #28a54c;\n    background-color: #28a54c;\n    box-shadow: inset 0 1px 4px rgba(0, 0, 0, 0.1); }\n  .bar-balanced .button.button-clear {\n    border-color: transparent;\n    background: none;\n    box-shadow: none;\n    color: #fff;\n    font-size: 17px; }\n  .bar-balanced .button.button-icon {\n    border-color: transparent;\n    background: none; }\n\n.bar-energized .button {\n  border-color: #e6b500;\n  background-color: #ffc900;\n  color: #fff; }\n  .bar-energized .button:hover {\n    color: #fff;\n    text-decoration: none; }\n  .bar-energized .button.active,\n  .bar-energized .button.activated {\n    border-color: #e6b500;\n    background-color: #e6b500;\n    box-shadow: inset 0 1px 4px rgba(0, 0, 0, 0.1); }\n  .bar-energized .button.button-clear {\n    border-color: transparent;\n    background: none;\n    box-shadow: none;\n    color: #fff;\n    font-size: 17px; }\n  .bar-energized .button.button-icon {\n    border-color: transparent;\n    background: none; }\n\n.bar-royal .button {\n  border-color: #6b46e5;\n  background-color: #886aea;\n  color: #fff; }\n  .bar-royal .button:hover {\n    color: #fff;\n    text-decoration: none; }\n  .bar-royal .button.active,\n  .bar-royal .button.activated {\n    border-color: #6b46e5;\n    background-color: #6b46e5;\n    box-shadow: inset 0 1px 4px rgba(0, 0, 0, 0.1); }\n  .bar-royal .button.button-clear {\n    border-color: transparent;\n    background: none;\n    box-shadow: none;\n    color: #fff;\n    font-size: 17px; }\n  .bar-royal .button.button-icon {\n    border-color: transparent;\n    background: none; }\n\n.bar-dark .button {\n  border-color: #111;\n  background-color: #444444;\n  color: #fff; }\n  .bar-dark .button:hover {\n    color: #fff;\n    text-decoration: none; }\n  .bar-dark .button.active,\n  .bar-dark .button.activated {\n    border-color: #000;\n    background-color: #262626;\n    box-shadow: inset 0 1px 4px rgba(0, 0, 0, 0.1); }\n  .bar-dark .button.button-clear {\n    border-color: transparent;\n    background: none;\n    box-shadow: none;\n    color: #fff;\n    font-size: 17px; }\n  .bar-dark .button.button-icon {\n    border-color: transparent;\n    background: none; }\n\n.bar-header {\n  top: 0;\n  border-top-width: 0;\n  border-bottom-width: 1px; }\n  .bar-header.has-tabs-top {\n    border-bottom-width: 0px;\n    background-image: none; }\n\n.tabs-top .bar-header {\n  border-bottom-width: 0px;\n  background-image: none; }\n\n.bar-footer {\n  bottom: 0;\n  border-top-width: 1px;\n  border-bottom-width: 0;\n  background-position: top;\n  height: 44px; }\n  .bar-footer.item-input-inset {\n    position: absolute; }\n\n.bar-tabs {\n  padding: 0; }\n\n.bar-subheader {\n  top: 44px;\n  display: block;\n  height: 44px; }\n\n.bar-subfooter {\n  bottom: 44px;\n  display: block;\n  height: 44px; }\n\n.nav-bar-block {\n  position: absolute;\n  top: 0;\n  right: 0;\n  left: 0;\n  z-index: 9; }\n\n.bar .back-button.hide,\n.bar .buttons .hide {\n  display: none; }\n\n.nav-bar-tabs-top .bar {\n  background-image: none; }\n\n/**\n * Tabs\n * --------------------------------------------------\n * A navigation bar with any number of tab items supported.\n */\n.tabs {\n  display: -webkit-box;\n  display: -webkit-flex;\n  display: -moz-box;\n  display: -moz-flex;\n  display: -ms-flexbox;\n  display: flex;\n  -webkit-box-direction: normal;\n  -webkit-box-orient: horizontal;\n  -webkit-flex-direction: horizontal;\n  -moz-flex-direction: horizontal;\n  -ms-flex-direction: horizontal;\n  flex-direction: horizontal;\n  -webkit-box-pack: center;\n  -ms-flex-pack: center;\n  -webkit-justify-content: center;\n  -moz-justify-content: center;\n  justify-content: center;\n  -webkit-transform: translate3d(0, 0, 0);\n  transform: translate3d(0, 0, 0);\n  border-color: #b2b2b2;\n  background-color: #f8f8f8;\n  background-image: linear-gradient(0deg, #b2b2b2, #b2b2b2 50%, transparent 50%);\n  color: #444;\n  position: absolute;\n  bottom: 0;\n  z-index: 5;\n  width: 100%;\n  height: 49px;\n  border-style: solid;\n  border-top-width: 1px;\n  background-size: 0;\n  line-height: 49px; }\n  .tabs .tab-item .badge {\n    background-color: #444;\n    color: #f8f8f8; }\n  @media (min--moz-device-pixel-ratio: 1.5), (-webkit-min-device-pixel-ratio: 1.5), (min-device-pixel-ratio: 1.5), (min-resolution: 144dpi), (min-resolution: 1.5dppx) {\n    .tabs {\n      padding-top: 2px;\n      border-top: none !important;\n      border-bottom: none;\n      background-position: top;\n      background-size: 100% 1px;\n      background-repeat: no-repeat; } }\n\n/* Allow parent element of tabs to define color, or just the tab itself */\n.tabs-light > .tabs,\n.tabs.tabs-light {\n  border-color: #ddd;\n  background-color: #fff;\n  background-image: linear-gradient(0deg, #ddd, #ddd 50%, transparent 50%);\n  color: #444; }\n  .tabs-light > .tabs .tab-item .badge,\n  .tabs.tabs-light .tab-item .badge {\n    background-color: #444;\n    color: #fff; }\n\n.tabs-stable > .tabs,\n.tabs.tabs-stable {\n  border-color: #b2b2b2;\n  background-color: #f8f8f8;\n  background-image: linear-gradient(0deg, #b2b2b2, #b2b2b2 50%, transparent 50%);\n  color: #444; }\n  .tabs-stable > .tabs .tab-item .badge,\n  .tabs.tabs-stable .tab-item .badge {\n    background-color: #444;\n    color: #f8f8f8; }\n\n.tabs-positive > .tabs,\n.tabs.tabs-positive {\n  border-color: #0c60ee;\n  background-color: #387ef5;\n  background-image: linear-gradient(0deg, #0c60ee, #0c60ee 50%, transparent 50%);\n  color: #fff; }\n  .tabs-positive > .tabs .tab-item .badge,\n  .tabs.tabs-positive .tab-item .badge {\n    background-color: #fff;\n    color: #387ef5; }\n\n.tabs-calm > .tabs,\n.tabs.tabs-calm {\n  border-color: #0a9dc7;\n  background-color: #11c1f3;\n  background-image: linear-gradient(0deg, #0a9dc7, #0a9dc7 50%, transparent 50%);\n  color: #fff; }\n  .tabs-calm > .tabs .tab-item .badge,\n  .tabs.tabs-calm .tab-item .badge {\n    background-color: #fff;\n    color: #11c1f3; }\n\n.tabs-assertive > .tabs,\n.tabs.tabs-assertive {\n  border-color: #e42112;\n  background-color: #ef473a;\n  background-image: linear-gradient(0deg, #e42112, #e42112 50%, transparent 50%);\n  color: #fff; }\n  .tabs-assertive > .tabs .tab-item .badge,\n  .tabs.tabs-assertive .tab-item .badge {\n    background-color: #fff;\n    color: #ef473a; }\n\n.tabs-balanced > .tabs,\n.tabs.tabs-balanced {\n  border-color: #28a54c;\n  background-color: #33cd5f;\n  background-image: linear-gradient(0deg, #28a54c, #28a54c 50%, transparent 50%);\n  color: #fff; }\n  .tabs-balanced > .tabs .tab-item .badge,\n  .tabs.tabs-balanced .tab-item .badge {\n    background-color: #fff;\n    color: #33cd5f; }\n\n.tabs-energized > .tabs,\n.tabs.tabs-energized {\n  border-color: #e6b500;\n  background-color: #ffc900;\n  background-image: linear-gradient(0deg, #e6b500, #e6b500 50%, transparent 50%);\n  color: #fff; }\n  .tabs-energized > .tabs .tab-item .badge,\n  .tabs.tabs-energized .tab-item .badge {\n    background-color: #fff;\n    color: #ffc900; }\n\n.tabs-royal > .tabs,\n.tabs.tabs-royal {\n  border-color: #6b46e5;\n  background-color: #886aea;\n  background-image: linear-gradient(0deg, #6b46e5, #6b46e5 50%, transparent 50%);\n  color: #fff; }\n  .tabs-royal > .tabs .tab-item .badge,\n  .tabs.tabs-royal .tab-item .badge {\n    background-color: #fff;\n    color: #886aea; }\n\n.tabs-dark > .tabs,\n.tabs.tabs-dark {\n  border-color: #111;\n  background-color: #444;\n  background-image: linear-gradient(0deg, #111, #111 50%, transparent 50%);\n  color: #fff; }\n  .tabs-dark > .tabs .tab-item .badge,\n  .tabs.tabs-dark .tab-item .badge {\n    background-color: #fff;\n    color: #444; }\n\n.tabs-striped .tabs {\n  background-color: white;\n  background-image: none;\n  border: none;\n  border-bottom: 1px solid #ddd;\n  padding-top: 2px; }\n\n.tabs-striped .tab-item.tab-item-active,\n.tabs-striped .tab-item.active,\n.tabs-striped .tab-item.activated {\n  margin-top: -2px;\n  border-style: solid;\n  border-width: 2px 0 0 0;\n  border-color: #444; }\n  .tabs-striped .tab-item.tab-item-active .badge,\n  .tabs-striped .tab-item.active .badge,\n  .tabs-striped .tab-item.activated .badge {\n    top: 2px;\n    opacity: 1; }\n\n.tabs-striped.tabs-light .tabs {\n  background-color: #fff; }\n\n.tabs-striped.tabs-light .tab-item {\n  color: rgba(68, 68, 68, 0.4);\n  opacity: 1; }\n  .tabs-striped.tabs-light .tab-item .badge {\n    opacity: 0.4; }\n  .tabs-striped.tabs-light .tab-item.tab-item-active,\n  .tabs-striped.tabs-light .tab-item.active,\n  .tabs-striped.tabs-light .tab-item.activated {\n    margin-top: -2px;\n    color: #444;\n    border-style: solid;\n    border-width: 2px 0 0 0;\n    border-color: #444; }\n\n.tabs-striped.tabs-top .tab-item.tab-item-active .badge,\n.tabs-striped.tabs-top .tab-item.active .badge,\n.tabs-striped.tabs-top .tab-item.activated .badge {\n  top: 4%; }\n\n.tabs-striped.tabs-stable .tabs {\n  background-color: #f8f8f8; }\n\n.tabs-striped.tabs-stable .tab-item {\n  color: rgba(68, 68, 68, 0.4);\n  opacity: 1; }\n  .tabs-striped.tabs-stable .tab-item .badge {\n    opacity: 0.4; }\n  .tabs-striped.tabs-stable .tab-item.tab-item-active,\n  .tabs-striped.tabs-stable .tab-item.active,\n  .tabs-striped.tabs-stable .tab-item.activated {\n    margin-top: -2px;\n    color: #444;\n    border-style: solid;\n    border-width: 2px 0 0 0;\n    border-color: #444; }\n\n.tabs-striped.tabs-top .tab-item.tab-item-active .badge,\n.tabs-striped.tabs-top .tab-item.active .badge,\n.tabs-striped.tabs-top .tab-item.activated .badge {\n  top: 4%; }\n\n.tabs-striped.tabs-positive .tabs {\n  background-color: #387ef5; }\n\n.tabs-striped.tabs-positive .tab-item {\n  color: rgba(255, 255, 255, 0.4);\n  opacity: 1; }\n  .tabs-striped.tabs-positive .tab-item .badge {\n    opacity: 0.4; }\n  .tabs-striped.tabs-positive .tab-item.tab-item-active,\n  .tabs-striped.tabs-positive .tab-item.active,\n  .tabs-striped.tabs-positive .tab-item.activated {\n    margin-top: -2px;\n    color: #fff;\n    border-style: solid;\n    border-width: 2px 0 0 0;\n    border-color: #fff; }\n\n.tabs-striped.tabs-top .tab-item.tab-item-active .badge,\n.tabs-striped.tabs-top .tab-item.active .badge,\n.tabs-striped.tabs-top .tab-item.activated .badge {\n  top: 4%; }\n\n.tabs-striped.tabs-calm .tabs {\n  background-color: #11c1f3; }\n\n.tabs-striped.tabs-calm .tab-item {\n  color: rgba(255, 255, 255, 0.4);\n  opacity: 1; }\n  .tabs-striped.tabs-calm .tab-item .badge {\n    opacity: 0.4; }\n  .tabs-striped.tabs-calm .tab-item.tab-item-active,\n  .tabs-striped.tabs-calm .tab-item.active,\n  .tabs-striped.tabs-calm .tab-item.activated {\n    margin-top: -2px;\n    color: #fff;\n    border-style: solid;\n    border-width: 2px 0 0 0;\n    border-color: #fff; }\n\n.tabs-striped.tabs-top .tab-item.tab-item-active .badge,\n.tabs-striped.tabs-top .tab-item.active .badge,\n.tabs-striped.tabs-top .tab-item.activated .badge {\n  top: 4%; }\n\n.tabs-striped.tabs-assertive .tabs {\n  background-color: #ef473a; }\n\n.tabs-striped.tabs-assertive .tab-item {\n  color: rgba(255, 255, 255, 0.4);\n  opacity: 1; }\n  .tabs-striped.tabs-assertive .tab-item .badge {\n    opacity: 0.4; }\n  .tabs-striped.tabs-assertive .tab-item.tab-item-active,\n  .tabs-striped.tabs-assertive .tab-item.active,\n  .tabs-striped.tabs-assertive .tab-item.activated {\n    margin-top: -2px;\n    color: #fff;\n    border-style: solid;\n    border-width: 2px 0 0 0;\n    border-color: #fff; }\n\n.tabs-striped.tabs-top .tab-item.tab-item-active .badge,\n.tabs-striped.tabs-top .tab-item.active .badge,\n.tabs-striped.tabs-top .tab-item.activated .badge {\n  top: 4%; }\n\n.tabs-striped.tabs-balanced .tabs {\n  background-color: #33cd5f; }\n\n.tabs-striped.tabs-balanced .tab-item {\n  color: rgba(255, 255, 255, 0.4);\n  opacity: 1; }\n  .tabs-striped.tabs-balanced .tab-item .badge {\n    opacity: 0.4; }\n  .tabs-striped.tabs-balanced .tab-item.tab-item-active,\n  .tabs-striped.tabs-balanced .tab-item.active,\n  .tabs-striped.tabs-balanced .tab-item.activated {\n    margin-top: -2px;\n    color: #fff;\n    border-style: solid;\n    border-width: 2px 0 0 0;\n    border-color: #fff; }\n\n.tabs-striped.tabs-top .tab-item.tab-item-active .badge,\n.tabs-striped.tabs-top .tab-item.active .badge,\n.tabs-striped.tabs-top .tab-item.activated .badge {\n  top: 4%; }\n\n.tabs-striped.tabs-energized .tabs {\n  background-color: #ffc900; }\n\n.tabs-striped.tabs-energized .tab-item {\n  color: rgba(255, 255, 255, 0.4);\n  opacity: 1; }\n  .tabs-striped.tabs-energized .tab-item .badge {\n    opacity: 0.4; }\n  .tabs-striped.tabs-energized .tab-item.tab-item-active,\n  .tabs-striped.tabs-energized .tab-item.active,\n  .tabs-striped.tabs-energized .tab-item.activated {\n    margin-top: -2px;\n    color: #fff;\n    border-style: solid;\n    border-width: 2px 0 0 0;\n    border-color: #fff; }\n\n.tabs-striped.tabs-top .tab-item.tab-item-active .badge,\n.tabs-striped.tabs-top .tab-item.active .badge,\n.tabs-striped.tabs-top .tab-item.activated .badge {\n  top: 4%; }\n\n.tabs-striped.tabs-royal .tabs {\n  background-color: #886aea; }\n\n.tabs-striped.tabs-royal .tab-item {\n  color: rgba(255, 255, 255, 0.4);\n  opacity: 1; }\n  .tabs-striped.tabs-royal .tab-item .badge {\n    opacity: 0.4; }\n  .tabs-striped.tabs-royal .tab-item.tab-item-active,\n  .tabs-striped.tabs-royal .tab-item.active,\n  .tabs-striped.tabs-royal .tab-item.activated {\n    margin-top: -2px;\n    color: #fff;\n    border-style: solid;\n    border-width: 2px 0 0 0;\n    border-color: #fff; }\n\n.tabs-striped.tabs-top .tab-item.tab-item-active .badge,\n.tabs-striped.tabs-top .tab-item.active .badge,\n.tabs-striped.tabs-top .tab-item.activated .badge {\n  top: 4%; }\n\n.tabs-striped.tabs-dark .tabs {\n  background-color: #444; }\n\n.tabs-striped.tabs-dark .tab-item {\n  color: rgba(255, 255, 255, 0.4);\n  opacity: 1; }\n  .tabs-striped.tabs-dark .tab-item .badge {\n    opacity: 0.4; }\n  .tabs-striped.tabs-dark .tab-item.tab-item-active,\n  .tabs-striped.tabs-dark .tab-item.active,\n  .tabs-striped.tabs-dark .tab-item.activated {\n    margin-top: -2px;\n    color: #fff;\n    border-style: solid;\n    border-width: 2px 0 0 0;\n    border-color: #fff; }\n\n.tabs-striped.tabs-top .tab-item.tab-item-active .badge,\n.tabs-striped.tabs-top .tab-item.active .badge,\n.tabs-striped.tabs-top .tab-item.activated .badge {\n  top: 4%; }\n\n.tabs-striped.tabs-background-light .tabs {\n  background-color: #fff;\n  background-image: none; }\n\n.tabs-striped.tabs-background-stable .tabs {\n  background-color: #f8f8f8;\n  background-image: none; }\n\n.tabs-striped.tabs-background-positive .tabs {\n  background-color: #387ef5;\n  background-image: none; }\n\n.tabs-striped.tabs-background-calm .tabs {\n  background-color: #11c1f3;\n  background-image: none; }\n\n.tabs-striped.tabs-background-assertive .tabs {\n  background-color: #ef473a;\n  background-image: none; }\n\n.tabs-striped.tabs-background-balanced .tabs {\n  background-color: #33cd5f;\n  background-image: none; }\n\n.tabs-striped.tabs-background-energized .tabs {\n  background-color: #ffc900;\n  background-image: none; }\n\n.tabs-striped.tabs-background-royal .tabs {\n  background-color: #886aea;\n  background-image: none; }\n\n.tabs-striped.tabs-background-dark .tabs {\n  background-color: #444;\n  background-image: none; }\n\n.tabs-striped.tabs-color-light .tab-item {\n  color: rgba(255, 255, 255, 0.4);\n  opacity: 1; }\n  .tabs-striped.tabs-color-light .tab-item .badge {\n    opacity: 0.4; }\n  .tabs-striped.tabs-color-light .tab-item.tab-item-active,\n  .tabs-striped.tabs-color-light .tab-item.active,\n  .tabs-striped.tabs-color-light .tab-item.activated {\n    margin-top: -2px;\n    color: #fff;\n    border: 0 solid #fff;\n    border-top-width: 2px; }\n    .tabs-striped.tabs-color-light .tab-item.tab-item-active .badge,\n    .tabs-striped.tabs-color-light .tab-item.active .badge,\n    .tabs-striped.tabs-color-light .tab-item.activated .badge {\n      top: 2px;\n      opacity: 1; }\n\n.tabs-striped.tabs-color-stable .tab-item {\n  color: rgba(248, 248, 248, 0.4);\n  opacity: 1; }\n  .tabs-striped.tabs-color-stable .tab-item .badge {\n    opacity: 0.4; }\n  .tabs-striped.tabs-color-stable .tab-item.tab-item-active,\n  .tabs-striped.tabs-color-stable .tab-item.active,\n  .tabs-striped.tabs-color-stable .tab-item.activated {\n    margin-top: -2px;\n    color: #f8f8f8;\n    border: 0 solid #f8f8f8;\n    border-top-width: 2px; }\n    .tabs-striped.tabs-color-stable .tab-item.tab-item-active .badge,\n    .tabs-striped.tabs-color-stable .tab-item.active .badge,\n    .tabs-striped.tabs-color-stable .tab-item.activated .badge {\n      top: 2px;\n      opacity: 1; }\n\n.tabs-striped.tabs-color-positive .tab-item {\n  color: rgba(56, 126, 245, 0.4);\n  opacity: 1; }\n  .tabs-striped.tabs-color-positive .tab-item .badge {\n    opacity: 0.4; }\n  .tabs-striped.tabs-color-positive .tab-item.tab-item-active,\n  .tabs-striped.tabs-color-positive .tab-item.active,\n  .tabs-striped.tabs-color-positive .tab-item.activated {\n    margin-top: -2px;\n    color: #387ef5;\n    border: 0 solid #387ef5;\n    border-top-width: 2px; }\n    .tabs-striped.tabs-color-positive .tab-item.tab-item-active .badge,\n    .tabs-striped.tabs-color-positive .tab-item.active .badge,\n    .tabs-striped.tabs-color-positive .tab-item.activated .badge {\n      top: 2px;\n      opacity: 1; }\n\n.tabs-striped.tabs-color-calm .tab-item {\n  color: rgba(17, 193, 243, 0.4);\n  opacity: 1; }\n  .tabs-striped.tabs-color-calm .tab-item .badge {\n    opacity: 0.4; }\n  .tabs-striped.tabs-color-calm .tab-item.tab-item-active,\n  .tabs-striped.tabs-color-calm .tab-item.active,\n  .tabs-striped.tabs-color-calm .tab-item.activated {\n    margin-top: -2px;\n    color: #11c1f3;\n    border: 0 solid #11c1f3;\n    border-top-width: 2px; }\n    .tabs-striped.tabs-color-calm .tab-item.tab-item-active .badge,\n    .tabs-striped.tabs-color-calm .tab-item.active .badge,\n    .tabs-striped.tabs-color-calm .tab-item.activated .badge {\n      top: 2px;\n      opacity: 1; }\n\n.tabs-striped.tabs-color-assertive .tab-item {\n  color: rgba(239, 71, 58, 0.4);\n  opacity: 1; }\n  .tabs-striped.tabs-color-assertive .tab-item .badge {\n    opacity: 0.4; }\n  .tabs-striped.tabs-color-assertive .tab-item.tab-item-active,\n  .tabs-striped.tabs-color-assertive .tab-item.active,\n  .tabs-striped.tabs-color-assertive .tab-item.activated {\n    margin-top: -2px;\n    color: #ef473a;\n    border: 0 solid #ef473a;\n    border-top-width: 2px; }\n    .tabs-striped.tabs-color-assertive .tab-item.tab-item-active .badge,\n    .tabs-striped.tabs-color-assertive .tab-item.active .badge,\n    .tabs-striped.tabs-color-assertive .tab-item.activated .badge {\n      top: 2px;\n      opacity: 1; }\n\n.tabs-striped.tabs-color-balanced .tab-item {\n  color: rgba(51, 205, 95, 0.4);\n  opacity: 1; }\n  .tabs-striped.tabs-color-balanced .tab-item .badge {\n    opacity: 0.4; }\n  .tabs-striped.tabs-color-balanced .tab-item.tab-item-active,\n  .tabs-striped.tabs-color-balanced .tab-item.active,\n  .tabs-striped.tabs-color-balanced .tab-item.activated {\n    margin-top: -2px;\n    color: #33cd5f;\n    border: 0 solid #33cd5f;\n    border-top-width: 2px; }\n    .tabs-striped.tabs-color-balanced .tab-item.tab-item-active .badge,\n    .tabs-striped.tabs-color-balanced .tab-item.active .badge,\n    .tabs-striped.tabs-color-balanced .tab-item.activated .badge {\n      top: 2px;\n      opacity: 1; }\n\n.tabs-striped.tabs-color-energized .tab-item {\n  color: rgba(255, 201, 0, 0.4);\n  opacity: 1; }\n  .tabs-striped.tabs-color-energized .tab-item .badge {\n    opacity: 0.4; }\n  .tabs-striped.tabs-color-energized .tab-item.tab-item-active,\n  .tabs-striped.tabs-color-energized .tab-item.active,\n  .tabs-striped.tabs-color-energized .tab-item.activated {\n    margin-top: -2px;\n    color: #ffc900;\n    border: 0 solid #ffc900;\n    border-top-width: 2px; }\n    .tabs-striped.tabs-color-energized .tab-item.tab-item-active .badge,\n    .tabs-striped.tabs-color-energized .tab-item.active .badge,\n    .tabs-striped.tabs-color-energized .tab-item.activated .badge {\n      top: 2px;\n      opacity: 1; }\n\n.tabs-striped.tabs-color-royal .tab-item {\n  color: rgba(136, 106, 234, 0.4);\n  opacity: 1; }\n  .tabs-striped.tabs-color-royal .tab-item .badge {\n    opacity: 0.4; }\n  .tabs-striped.tabs-color-royal .tab-item.tab-item-active,\n  .tabs-striped.tabs-color-royal .tab-item.active,\n  .tabs-striped.tabs-color-royal .tab-item.activated {\n    margin-top: -2px;\n    color: #886aea;\n    border: 0 solid #886aea;\n    border-top-width: 2px; }\n    .tabs-striped.tabs-color-royal .tab-item.tab-item-active .badge,\n    .tabs-striped.tabs-color-royal .tab-item.active .badge,\n    .tabs-striped.tabs-color-royal .tab-item.activated .badge {\n      top: 2px;\n      opacity: 1; }\n\n.tabs-striped.tabs-color-dark .tab-item {\n  color: rgba(68, 68, 68, 0.4);\n  opacity: 1; }\n  .tabs-striped.tabs-color-dark .tab-item .badge {\n    opacity: 0.4; }\n  .tabs-striped.tabs-color-dark .tab-item.tab-item-active,\n  .tabs-striped.tabs-color-dark .tab-item.active,\n  .tabs-striped.tabs-color-dark .tab-item.activated {\n    margin-top: -2px;\n    color: #444;\n    border: 0 solid #444;\n    border-top-width: 2px; }\n    .tabs-striped.tabs-color-dark .tab-item.tab-item-active .badge,\n    .tabs-striped.tabs-color-dark .tab-item.active .badge,\n    .tabs-striped.tabs-color-dark .tab-item.activated .badge {\n      top: 2px;\n      opacity: 1; }\n\n.tabs-background-light .tabs,\n.tabs-background-light > .tabs {\n  background-color: #fff;\n  background-image: linear-gradient(0deg, #ddd, #ddd 50%, transparent 50%);\n  border-color: #ddd; }\n\n.tabs-background-stable .tabs,\n.tabs-background-stable > .tabs {\n  background-color: #f8f8f8;\n  background-image: linear-gradient(0deg, #b2b2b2, #b2b2b2 50%, transparent 50%);\n  border-color: #b2b2b2; }\n\n.tabs-background-positive .tabs,\n.tabs-background-positive > .tabs {\n  background-color: #387ef5;\n  background-image: linear-gradient(0deg, #0c60ee, #0c60ee 50%, transparent 50%);\n  border-color: #0c60ee; }\n\n.tabs-background-calm .tabs,\n.tabs-background-calm > .tabs {\n  background-color: #11c1f3;\n  background-image: linear-gradient(0deg, #0a9dc7, #0a9dc7 50%, transparent 50%);\n  border-color: #0a9dc7; }\n\n.tabs-background-assertive .tabs,\n.tabs-background-assertive > .tabs {\n  background-color: #ef473a;\n  background-image: linear-gradient(0deg, #e42112, #e42112 50%, transparent 50%);\n  border-color: #e42112; }\n\n.tabs-background-balanced .tabs,\n.tabs-background-balanced > .tabs {\n  background-color: #33cd5f;\n  background-image: linear-gradient(0deg, #28a54c, #28a54c 50%, transparent 50%);\n  border-color: #28a54c; }\n\n.tabs-background-energized .tabs,\n.tabs-background-energized > .tabs {\n  background-color: #ffc900;\n  background-image: linear-gradient(0deg, #e6b500, #e6b500 50%, transparent 50%);\n  border-color: #e6b500; }\n\n.tabs-background-royal .tabs,\n.tabs-background-royal > .tabs {\n  background-color: #886aea;\n  background-image: linear-gradient(0deg, #6b46e5, #6b46e5 50%, transparent 50%);\n  border-color: #6b46e5; }\n\n.tabs-background-dark .tabs,\n.tabs-background-dark > .tabs {\n  background-color: #444;\n  background-image: linear-gradient(0deg, #111, #111 50%, transparent 50%);\n  border-color: #111; }\n\n.tabs-color-light .tab-item {\n  color: rgba(255, 255, 255, 0.4);\n  opacity: 1; }\n  .tabs-color-light .tab-item .badge {\n    opacity: 0.4; }\n  .tabs-color-light .tab-item.tab-item-active,\n  .tabs-color-light .tab-item.active,\n  .tabs-color-light .tab-item.activated {\n    color: #fff;\n    border: 0 solid #fff; }\n    .tabs-color-light .tab-item.tab-item-active .badge,\n    .tabs-color-light .tab-item.active .badge,\n    .tabs-color-light .tab-item.activated .badge {\n      opacity: 1; }\n\n.tabs-color-stable .tab-item {\n  color: rgba(248, 248, 248, 0.4);\n  opacity: 1; }\n  .tabs-color-stable .tab-item .badge {\n    opacity: 0.4; }\n  .tabs-color-stable .tab-item.tab-item-active,\n  .tabs-color-stable .tab-item.active,\n  .tabs-color-stable .tab-item.activated {\n    color: #f8f8f8;\n    border: 0 solid #f8f8f8; }\n    .tabs-color-stable .tab-item.tab-item-active .badge,\n    .tabs-color-stable .tab-item.active .badge,\n    .tabs-color-stable .tab-item.activated .badge {\n      opacity: 1; }\n\n.tabs-color-positive .tab-item {\n  color: rgba(56, 126, 245, 0.4);\n  opacity: 1; }\n  .tabs-color-positive .tab-item .badge {\n    opacity: 0.4; }\n  .tabs-color-positive .tab-item.tab-item-active,\n  .tabs-color-positive .tab-item.active,\n  .tabs-color-positive .tab-item.activated {\n    color: #387ef5;\n    border: 0 solid #387ef5; }\n    .tabs-color-positive .tab-item.tab-item-active .badge,\n    .tabs-color-positive .tab-item.active .badge,\n    .tabs-color-positive .tab-item.activated .badge {\n      opacity: 1; }\n\n.tabs-color-calm .tab-item {\n  color: rgba(17, 193, 243, 0.4);\n  opacity: 1; }\n  .tabs-color-calm .tab-item .badge {\n    opacity: 0.4; }\n  .tabs-color-calm .tab-item.tab-item-active,\n  .tabs-color-calm .tab-item.active,\n  .tabs-color-calm .tab-item.activated {\n    color: #11c1f3;\n    border: 0 solid #11c1f3; }\n    .tabs-color-calm .tab-item.tab-item-active .badge,\n    .tabs-color-calm .tab-item.active .badge,\n    .tabs-color-calm .tab-item.activated .badge {\n      opacity: 1; }\n\n.tabs-color-assertive .tab-item {\n  color: rgba(239, 71, 58, 0.4);\n  opacity: 1; }\n  .tabs-color-assertive .tab-item .badge {\n    opacity: 0.4; }\n  .tabs-color-assertive .tab-item.tab-item-active,\n  .tabs-color-assertive .tab-item.active,\n  .tabs-color-assertive .tab-item.activated {\n    color: #ef473a;\n    border: 0 solid #ef473a; }\n    .tabs-color-assertive .tab-item.tab-item-active .badge,\n    .tabs-color-assertive .tab-item.active .badge,\n    .tabs-color-assertive .tab-item.activated .badge {\n      opacity: 1; }\n\n.tabs-color-balanced .tab-item {\n  color: rgba(51, 205, 95, 0.4);\n  opacity: 1; }\n  .tabs-color-balanced .tab-item .badge {\n    opacity: 0.4; }\n  .tabs-color-balanced .tab-item.tab-item-active,\n  .tabs-color-balanced .tab-item.active,\n  .tabs-color-balanced .tab-item.activated {\n    color: #33cd5f;\n    border: 0 solid #33cd5f; }\n    .tabs-color-balanced .tab-item.tab-item-active .badge,\n    .tabs-color-balanced .tab-item.active .badge,\n    .tabs-color-balanced .tab-item.activated .badge {\n      opacity: 1; }\n\n.tabs-color-energized .tab-item {\n  color: rgba(255, 201, 0, 0.4);\n  opacity: 1; }\n  .tabs-color-energized .tab-item .badge {\n    opacity: 0.4; }\n  .tabs-color-energized .tab-item.tab-item-active,\n  .tabs-color-energized .tab-item.active,\n  .tabs-color-energized .tab-item.activated {\n    color: #ffc900;\n    border: 0 solid #ffc900; }\n    .tabs-color-energized .tab-item.tab-item-active .badge,\n    .tabs-color-energized .tab-item.active .badge,\n    .tabs-color-energized .tab-item.activated .badge {\n      opacity: 1; }\n\n.tabs-color-royal .tab-item {\n  color: rgba(136, 106, 234, 0.4);\n  opacity: 1; }\n  .tabs-color-royal .tab-item .badge {\n    opacity: 0.4; }\n  .tabs-color-royal .tab-item.tab-item-active,\n  .tabs-color-royal .tab-item.active,\n  .tabs-color-royal .tab-item.activated {\n    color: #886aea;\n    border: 0 solid #886aea; }\n    .tabs-color-royal .tab-item.tab-item-active .badge,\n    .tabs-color-royal .tab-item.active .badge,\n    .tabs-color-royal .tab-item.activated .badge {\n      opacity: 1; }\n\n.tabs-color-dark .tab-item {\n  color: rgba(68, 68, 68, 0.4);\n  opacity: 1; }\n  .tabs-color-dark .tab-item .badge {\n    opacity: 0.4; }\n  .tabs-color-dark .tab-item.tab-item-active,\n  .tabs-color-dark .tab-item.active,\n  .tabs-color-dark .tab-item.activated {\n    color: #444;\n    border: 0 solid #444; }\n    .tabs-color-dark .tab-item.tab-item-active .badge,\n    .tabs-color-dark .tab-item.active .badge,\n    .tabs-color-dark .tab-item.activated .badge {\n      opacity: 1; }\n\nion-tabs.tabs-color-active-light .tab-item {\n  color: #444; }\n  ion-tabs.tabs-color-active-light .tab-item.tab-item-active,\n  ion-tabs.tabs-color-active-light .tab-item.active,\n  ion-tabs.tabs-color-active-light .tab-item.activated {\n    color: #fff; }\n\nion-tabs.tabs-color-active-stable .tab-item {\n  color: #444; }\n  ion-tabs.tabs-color-active-stable .tab-item.tab-item-active,\n  ion-tabs.tabs-color-active-stable .tab-item.active,\n  ion-tabs.tabs-color-active-stable .tab-item.activated {\n    color: #f8f8f8; }\n\nion-tabs.tabs-color-active-positive .tab-item {\n  color: #444; }\n  ion-tabs.tabs-color-active-positive .tab-item.tab-item-active,\n  ion-tabs.tabs-color-active-positive .tab-item.active,\n  ion-tabs.tabs-color-active-positive .tab-item.activated {\n    color: #387ef5; }\n\nion-tabs.tabs-color-active-calm .tab-item {\n  color: #444; }\n  ion-tabs.tabs-color-active-calm .tab-item.tab-item-active,\n  ion-tabs.tabs-color-active-calm .tab-item.active,\n  ion-tabs.tabs-color-active-calm .tab-item.activated {\n    color: #11c1f3; }\n\nion-tabs.tabs-color-active-assertive .tab-item {\n  color: #444; }\n  ion-tabs.tabs-color-active-assertive .tab-item.tab-item-active,\n  ion-tabs.tabs-color-active-assertive .tab-item.active,\n  ion-tabs.tabs-color-active-assertive .tab-item.activated {\n    color: #ef473a; }\n\nion-tabs.tabs-color-active-balanced .tab-item {\n  color: #444; }\n  ion-tabs.tabs-color-active-balanced .tab-item.tab-item-active,\n  ion-tabs.tabs-color-active-balanced .tab-item.active,\n  ion-tabs.tabs-color-active-balanced .tab-item.activated {\n    color: #33cd5f; }\n\nion-tabs.tabs-color-active-energized .tab-item {\n  color: #444; }\n  ion-tabs.tabs-color-active-energized .tab-item.tab-item-active,\n  ion-tabs.tabs-color-active-energized .tab-item.active,\n  ion-tabs.tabs-color-active-energized .tab-item.activated {\n    color: #ffc900; }\n\nion-tabs.tabs-color-active-royal .tab-item {\n  color: #444; }\n  ion-tabs.tabs-color-active-royal .tab-item.tab-item-active,\n  ion-tabs.tabs-color-active-royal .tab-item.active,\n  ion-tabs.tabs-color-active-royal .tab-item.activated {\n    color: #886aea; }\n\nion-tabs.tabs-color-active-dark .tab-item {\n  color: #fff; }\n  ion-tabs.tabs-color-active-dark .tab-item.tab-item-active,\n  ion-tabs.tabs-color-active-dark .tab-item.active,\n  ion-tabs.tabs-color-active-dark .tab-item.activated {\n    color: #444; }\n\n.tabs-top.tabs-striped {\n  padding-bottom: 0; }\n  .tabs-top.tabs-striped .tab-item {\n    background: transparent;\n    -webkit-transition: color 0.1s ease;\n    -moz-transition: color 0.1s ease;\n    -ms-transition: color 0.1s ease;\n    -o-transition: color 0.1s ease;\n    transition: color 0.1s ease; }\n    .tabs-top.tabs-striped .tab-item.tab-item-active,\n    .tabs-top.tabs-striped .tab-item.active,\n    .tabs-top.tabs-striped .tab-item.activated {\n      margin-top: 1px;\n      border-width: 0px 0px 2px 0px !important;\n      border-style: solid; }\n      .tabs-top.tabs-striped .tab-item.tab-item-active > .badge,\n      .tabs-top.tabs-striped .tab-item.tab-item-active > i,\n      .tabs-top.tabs-striped .tab-item.active > .badge,\n      .tabs-top.tabs-striped .tab-item.active > i,\n      .tabs-top.tabs-striped .tab-item.activated > .badge, .tabs-top.tabs-striped .tab-item.activated > i {\n        margin-top: -1px; }\n    .tabs-top.tabs-striped .tab-item .badge {\n      -webkit-transition: color 0.2s ease;\n      -moz-transition: color 0.2s ease;\n      -ms-transition: color 0.2s ease;\n      -o-transition: color 0.2s ease;\n      transition: color 0.2s ease; }\n  .tabs-top.tabs-striped:not(.tabs-icon-left):not(.tabs-icon-top) .tab-item.tab-item-active .tab-title,\n  .tabs-top.tabs-striped:not(.tabs-icon-left):not(.tabs-icon-top) .tab-item.tab-item-active i,\n  .tabs-top.tabs-striped:not(.tabs-icon-left):not(.tabs-icon-top) .tab-item.active .tab-title,\n  .tabs-top.tabs-striped:not(.tabs-icon-left):not(.tabs-icon-top) .tab-item.active i,\n  .tabs-top.tabs-striped:not(.tabs-icon-left):not(.tabs-icon-top) .tab-item.activated .tab-title, .tabs-top.tabs-striped:not(.tabs-icon-left):not(.tabs-icon-top) .tab-item.activated i {\n    display: block;\n    margin-top: -1px; }\n  .tabs-top.tabs-striped.tabs-icon-left .tab-item {\n    margin-top: 1px; }\n    .tabs-top.tabs-striped.tabs-icon-left .tab-item.tab-item-active .tab-title,\n    .tabs-top.tabs-striped.tabs-icon-left .tab-item.tab-item-active i,\n    .tabs-top.tabs-striped.tabs-icon-left .tab-item.active .tab-title,\n    .tabs-top.tabs-striped.tabs-icon-left .tab-item.active i,\n    .tabs-top.tabs-striped.tabs-icon-left .tab-item.activated .tab-title, .tabs-top.tabs-striped.tabs-icon-left .tab-item.activated i {\n      margin-top: -0.1em; }\n\n/* Allow parent element to have tabs-top */\n/* If you change this, change platform.scss as well */\n.tabs-top > .tabs,\n.tabs.tabs-top {\n  top: 44px;\n  padding-top: 0;\n  background-position: bottom;\n  border-top-width: 0;\n  border-bottom-width: 1px; }\n  .tabs-top > .tabs .tab-item.tab-item-active .badge,\n  .tabs-top > .tabs .tab-item.active .badge,\n  .tabs-top > .tabs .tab-item.activated .badge,\n  .tabs.tabs-top .tab-item.tab-item-active .badge,\n  .tabs.tabs-top .tab-item.active .badge,\n  .tabs.tabs-top .tab-item.activated .badge {\n    top: 4%; }\n\n.tabs-top ~ .bar-header {\n  border-bottom-width: 0; }\n\n.tab-item {\n  -webkit-box-flex: 1;\n  -webkit-flex: 1;\n  -moz-box-flex: 1;\n  -moz-flex: 1;\n  -ms-flex: 1;\n  flex: 1;\n  display: block;\n  overflow: hidden;\n  max-width: 150px;\n  height: 100%;\n  color: inherit;\n  text-align: center;\n  text-decoration: none;\n  text-overflow: ellipsis;\n  white-space: nowrap;\n  font-weight: 400;\n  font-size: 14px;\n  font-family: \"Helvetica Neue\", \"Roboto\", \"Segoe UI\", sans-serif;\n  opacity: 0.7; }\n  .tab-item:hover {\n    cursor: pointer; }\n  .tab-item.tab-hidden {\n    display: none; }\n\n.tabs-item-hide > .tabs,\n.tabs.tabs-item-hide {\n  display: none; }\n\n.tabs-icon-top > .tabs .tab-item,\n.tabs-icon-top.tabs .tab-item,\n.tabs-icon-bottom > .tabs .tab-item,\n.tabs-icon-bottom.tabs .tab-item {\n  font-size: 10px;\n  line-height: 14px; }\n\n.tab-item .icon {\n  display: block;\n  margin: 0 auto;\n  height: 32px;\n  font-size: 32px; }\n\n.tabs-icon-left.tabs .tab-item,\n.tabs-icon-left > .tabs .tab-item,\n.tabs-icon-right.tabs .tab-item,\n.tabs-icon-right > .tabs .tab-item {\n  font-size: 10px; }\n  .tabs-icon-left.tabs .tab-item .icon,\n  .tabs-icon-left.tabs .tab-item .tab-title,\n  .tabs-icon-left > .tabs .tab-item .icon,\n  .tabs-icon-left > .tabs .tab-item .tab-title,\n  .tabs-icon-right.tabs .tab-item .icon,\n  .tabs-icon-right.tabs .tab-item .tab-title,\n  .tabs-icon-right > .tabs .tab-item .icon, .tabs-icon-right > .tabs .tab-item .tab-title {\n    display: inline-block;\n    vertical-align: top;\n    margin-top: -.1em; }\n    .tabs-icon-left.tabs .tab-item .icon:before,\n    .tabs-icon-left.tabs .tab-item .tab-title:before,\n    .tabs-icon-left > .tabs .tab-item .icon:before,\n    .tabs-icon-left > .tabs .tab-item .tab-title:before,\n    .tabs-icon-right.tabs .tab-item .icon:before,\n    .tabs-icon-right.tabs .tab-item .tab-title:before,\n    .tabs-icon-right > .tabs .tab-item .icon:before, .tabs-icon-right > .tabs .tab-item .tab-title:before {\n      font-size: 24px;\n      line-height: 49px; }\n\n.tabs-icon-left > .tabs .tab-item .icon,\n.tabs-icon-left.tabs .tab-item .icon {\n  padding-right: 3px; }\n\n.tabs-icon-right > .tabs .tab-item .icon,\n.tabs-icon-right.tabs .tab-item .icon {\n  padding-left: 3px; }\n\n.tabs-icon-only > .tabs .icon,\n.tabs-icon-only.tabs .icon {\n  line-height: inherit; }\n\n.tab-item.has-badge {\n  position: relative; }\n\n.tab-item .badge {\n  position: absolute;\n  top: 4%;\n  right: 33%;\n  right: calc(50% - 26px);\n  padding: 1px 6px;\n  height: auto;\n  font-size: 12px;\n  line-height: 16px; }\n\n/* Navigational tab */\n/* Active state for tab */\n.tab-item.tab-item-active,\n.tab-item.active,\n.tab-item.activated {\n  opacity: 1; }\n  .tab-item.tab-item-active.tab-item-light,\n  .tab-item.active.tab-item-light,\n  .tab-item.activated.tab-item-light {\n    color: #fff; }\n  .tab-item.tab-item-active.tab-item-stable,\n  .tab-item.active.tab-item-stable,\n  .tab-item.activated.tab-item-stable {\n    color: #f8f8f8; }\n  .tab-item.tab-item-active.tab-item-positive,\n  .tab-item.active.tab-item-positive,\n  .tab-item.activated.tab-item-positive {\n    color: #387ef5; }\n  .tab-item.tab-item-active.tab-item-calm,\n  .tab-item.active.tab-item-calm,\n  .tab-item.activated.tab-item-calm {\n    color: #11c1f3; }\n  .tab-item.tab-item-active.tab-item-assertive,\n  .tab-item.active.tab-item-assertive,\n  .tab-item.activated.tab-item-assertive {\n    color: #ef473a; }\n  .tab-item.tab-item-active.tab-item-balanced,\n  .tab-item.active.tab-item-balanced,\n  .tab-item.activated.tab-item-balanced {\n    color: #33cd5f; }\n  .tab-item.tab-item-active.tab-item-energized,\n  .tab-item.active.tab-item-energized,\n  .tab-item.activated.tab-item-energized {\n    color: #ffc900; }\n  .tab-item.tab-item-active.tab-item-royal,\n  .tab-item.active.tab-item-royal,\n  .tab-item.activated.tab-item-royal {\n    color: #886aea; }\n  .tab-item.tab-item-active.tab-item-dark,\n  .tab-item.active.tab-item-dark,\n  .tab-item.activated.tab-item-dark {\n    color: #444; }\n\n.item.tabs {\n  display: -webkit-box;\n  display: -webkit-flex;\n  display: -moz-box;\n  display: -moz-flex;\n  display: -ms-flexbox;\n  display: flex;\n  padding: 0; }\n  .item.tabs .icon:before {\n    position: relative; }\n\n.tab-item.disabled,\n.tab-item[disabled] {\n  opacity: .4;\n  cursor: default;\n  pointer-events: none; }\n\n.nav-bar-tabs-top.hide ~ .view-container .tabs-top .tabs {\n  top: 0; }\n\n.pane[hide-nav-bar=\"true\"] .has-tabs-top {\n  top: 49px; }\n\n/**\n * Menus\n * --------------------------------------------------\n * Side panel structure\n */\n.menu {\n  position: absolute;\n  top: 0;\n  bottom: 0;\n  z-index: 0;\n  overflow: hidden;\n  min-height: 100%;\n  max-height: 100%;\n  width: 275px;\n  background-color: #fff; }\n  .menu .scroll-content {\n    z-index: 10; }\n  .menu .bar-header {\n    z-index: 11; }\n\n.menu-content {\n  -webkit-transform: none;\n  transform: none;\n  box-shadow: -1px 0px 2px rgba(0, 0, 0, 0.2), 1px 0px 2px rgba(0, 0, 0, 0.2); }\n\n.menu-open .menu-content .pane,\n.menu-open .menu-content .scroll-content {\n  pointer-events: none;\n  overflow: hidden; }\n\n.grade-b .menu-content,\n.grade-c .menu-content {\n  -webkit-box-sizing: content-box;\n  -moz-box-sizing: content-box;\n  box-sizing: content-box;\n  right: -1px;\n  left: -1px;\n  border-right: 1px solid #ccc;\n  border-left: 1px solid #ccc;\n  box-shadow: none; }\n\n.menu-left {\n  left: 0; }\n\n.menu-right {\n  right: 0; }\n\n.aside-open.aside-resizing .menu-right {\n  display: none; }\n\n.menu-animated {\n  -webkit-transition: -webkit-transform 200ms ease;\n  transition: transform 200ms ease; }\n\n/**\n * Modals\n * --------------------------------------------------\n * Modals are independent windows that slide in from off-screen.\n */\n.modal-backdrop,\n.modal-backdrop-bg {\n  position: fixed;\n  top: 0;\n  left: 0;\n  z-index: 10;\n  width: 100%;\n  height: 100%; }\n\n.modal-backdrop-bg {\n  pointer-events: none; }\n\n.modal {\n  display: block;\n  position: absolute;\n  top: 0;\n  z-index: 10;\n  overflow: hidden;\n  min-height: 100%;\n  width: 100%;\n  background-color: #fff; }\n\n@media (min-width: 680px) {\n  .modal {\n    top: 20%;\n    right: 20%;\n    bottom: 20%;\n    left: 20%;\n    min-height: 240px;\n    width: 60%; }\n  .modal.ng-leave-active {\n    bottom: 0; }\n  .platform-ios.platform-cordova .modal-wrapper .modal .bar-header:not(.bar-subheader) {\n    height: 44px; }\n    .platform-ios.platform-cordova .modal-wrapper .modal .bar-header:not(.bar-subheader) > * {\n      margin-top: 0; }\n  .platform-ios.platform-cordova .modal-wrapper .modal .tabs-top > .tabs,\n  .platform-ios.platform-cordova .modal-wrapper .modal .tabs.tabs-top {\n    top: 44px; }\n  .platform-ios.platform-cordova .modal-wrapper .modal .has-header,\n  .platform-ios.platform-cordova .modal-wrapper .modal .bar-subheader {\n    top: 44px; }\n  .platform-ios.platform-cordova .modal-wrapper .modal .has-subheader {\n    top: 88px; }\n  .platform-ios.platform-cordova .modal-wrapper .modal .has-header.has-tabs-top {\n    top: 93px; }\n  .platform-ios.platform-cordova .modal-wrapper .modal .has-header.has-subheader.has-tabs-top {\n    top: 137px; }\n  .modal-backdrop-bg {\n    -webkit-transition: opacity 300ms ease-in-out;\n    transition: opacity 300ms ease-in-out;\n    background-color: #000;\n    opacity: 0; }\n  .active .modal-backdrop-bg {\n    opacity: 0.5; } }\n\n.modal-open {\n  pointer-events: none; }\n  .modal-open .modal,\n  .modal-open .modal-backdrop {\n    pointer-events: auto; }\n  .modal-open.loading-active .modal,\n  .modal-open.loading-active .modal-backdrop {\n    pointer-events: none; }\n\n/**\n * Popovers\n * --------------------------------------------------\n * Popovers are independent views which float over content\n */\n.popover-backdrop {\n  position: fixed;\n  top: 0;\n  left: 0;\n  z-index: 10;\n  width: 100%;\n  height: 100%;\n  background-color: transparent; }\n  .popover-backdrop.active {\n    background-color: rgba(0, 0, 0, 0.1); }\n\n.popover {\n  position: absolute;\n  top: 25%;\n  left: 50%;\n  z-index: 10;\n  display: block;\n  margin-top: 12px;\n  margin-left: -110px;\n  height: 280px;\n  width: 220px;\n  background-color: #fff;\n  box-shadow: 0 1px 3px rgba(0, 0, 0, 0.4);\n  opacity: 0; }\n  .popover .item:first-child {\n    border-top: 0; }\n  .popover .item:last-child {\n    border-bottom: 0; }\n  .popover.popover-bottom {\n    margin-top: -12px; }\n\n.popover,\n.popover .bar-header {\n  border-radius: 2px; }\n\n.popover .scroll-content {\n  z-index: 1;\n  margin: 2px 0; }\n\n.popover .bar-header {\n  border-bottom-right-radius: 0;\n  border-bottom-left-radius: 0; }\n\n.popover .has-header {\n  border-top-right-radius: 0;\n  border-top-left-radius: 0; }\n\n.popover-arrow {\n  display: none; }\n\n.platform-ios .popover {\n  box-shadow: 0 0 40px rgba(0, 0, 0, 0.08);\n  border-radius: 10px; }\n\n.platform-ios .popover .bar-header {\n  -webkit-border-top-right-radius: 10px;\n  border-top-right-radius: 10px;\n  -webkit-border-top-left-radius: 10px;\n  border-top-left-radius: 10px; }\n\n.platform-ios .popover .scroll-content {\n  margin: 8px 0;\n  border-radius: 10px; }\n\n.platform-ios .popover .scroll-content.has-header {\n  margin-top: 0; }\n\n.platform-ios .popover-arrow {\n  position: absolute;\n  display: block;\n  top: -17px;\n  width: 30px;\n  height: 19px;\n  overflow: hidden; }\n  .platform-ios .popover-arrow:after {\n    position: absolute;\n    top: 12px;\n    left: 5px;\n    width: 20px;\n    height: 20px;\n    background-color: #fff;\n    border-radius: 3px;\n    content: '';\n    -webkit-transform: rotate(-45deg);\n    transform: rotate(-45deg); }\n\n.platform-ios .popover-bottom .popover-arrow {\n  top: auto;\n  bottom: -10px; }\n  .platform-ios .popover-bottom .popover-arrow:after {\n    top: -6px; }\n\n.platform-android .popover {\n  margin-top: -32px;\n  background-color: #fafafa;\n  box-shadow: 0 2px 6px rgba(0, 0, 0, 0.35); }\n  .platform-android .popover .item {\n    border-color: #fafafa;\n    background-color: #fafafa;\n    color: #4d4d4d; }\n  .platform-android .popover.popover-bottom {\n    margin-top: 32px; }\n\n.platform-android .popover-backdrop,\n.platform-android .popover-backdrop.active {\n  background-color: transparent; }\n\n.popover-open {\n  pointer-events: none; }\n  .popover-open .popover,\n  .popover-open .popover-backdrop {\n    pointer-events: auto; }\n  .popover-open.loading-active .popover,\n  .popover-open.loading-active .popover-backdrop {\n    pointer-events: none; }\n\n@media (min-width: 680px) {\n  .popover {\n    width: 360px; } }\n\n/**\n * Popups\n * --------------------------------------------------\n */\n.popup-container {\n  position: absolute;\n  top: 0;\n  left: 0;\n  bottom: 0;\n  right: 0;\n  background: transparent;\n  display: -webkit-box;\n  display: -webkit-flex;\n  display: -moz-box;\n  display: -moz-flex;\n  display: -ms-flexbox;\n  display: flex;\n  -webkit-box-pack: center;\n  -ms-flex-pack: center;\n  -webkit-justify-content: center;\n  -moz-justify-content: center;\n  justify-content: center;\n  -webkit-box-align: center;\n  -ms-flex-align: center;\n  -webkit-align-items: center;\n  -moz-align-items: center;\n  align-items: center;\n  z-index: 12;\n  visibility: hidden; }\n  .popup-container.popup-showing {\n    visibility: visible; }\n  .popup-container.popup-hidden .popup {\n    -webkit-animation-name: scaleOut;\n    animation-name: scaleOut;\n    -webkit-animation-duration: 0.1s;\n    animation-duration: 0.1s;\n    -webkit-animation-timing-function: ease-in-out;\n    animation-timing-function: ease-in-out;\n    -webkit-animation-fill-mode: both;\n    animation-fill-mode: both; }\n  .popup-container.active .popup {\n    -webkit-animation-name: superScaleIn;\n    animation-name: superScaleIn;\n    -webkit-animation-duration: 0.2s;\n    animation-duration: 0.2s;\n    -webkit-animation-timing-function: ease-in-out;\n    animation-timing-function: ease-in-out;\n    -webkit-animation-fill-mode: both;\n    animation-fill-mode: both; }\n  .popup-container .popup {\n    width: 250px;\n    max-width: 100%;\n    max-height: 90%;\n    border-radius: 0px;\n    background-color: rgba(255, 255, 255, 0.9);\n    display: -webkit-box;\n    display: -webkit-flex;\n    display: -moz-box;\n    display: -moz-flex;\n    display: -ms-flexbox;\n    display: flex;\n    -webkit-box-direction: normal;\n    -webkit-box-orient: vertical;\n    -webkit-flex-direction: column;\n    -moz-flex-direction: column;\n    -ms-flex-direction: column;\n    flex-direction: column; }\n  .popup-container input,\n  .popup-container textarea {\n    width: 100%; }\n\n.popup-head {\n  padding: 15px 10px;\n  border-bottom: 1px solid #eee;\n  text-align: center; }\n\n.popup-title {\n  margin: 0;\n  padding: 0;\n  font-size: 15px; }\n\n.popup-sub-title {\n  margin: 5px 0 0 0;\n  padding: 0;\n  font-weight: normal;\n  font-size: 11px; }\n\n.popup-body {\n  padding: 10px;\n  overflow: auto; }\n\n.popup-buttons {\n  display: -webkit-box;\n  display: -webkit-flex;\n  display: -moz-box;\n  display: -moz-flex;\n  display: -ms-flexbox;\n  display: flex;\n  -webkit-box-direction: normal;\n  -webkit-box-orient: horizontal;\n  -webkit-flex-direction: row;\n  -moz-flex-direction: row;\n  -ms-flex-direction: row;\n  flex-direction: row;\n  padding: 10px;\n  min-height: 65px; }\n  .popup-buttons .button {\n    -webkit-box-flex: 1;\n    -webkit-flex: 1;\n    -moz-box-flex: 1;\n    -moz-flex: 1;\n    -ms-flex: 1;\n    flex: 1;\n    display: block;\n    min-height: 45px;\n    border-radius: 2px;\n    line-height: 20px;\n    margin-right: 5px; }\n    .popup-buttons .button:last-child {\n      margin-right: 0px; }\n\n.popup-open {\n  pointer-events: none; }\n  .popup-open.modal-open .modal {\n    pointer-events: none; }\n  .popup-open .popup-backdrop, .popup-open .popup {\n    pointer-events: auto; }\n\n/**\n * Loading\n * --------------------------------------------------\n */\n.loading-container {\n  position: absolute;\n  left: 0;\n  top: 0;\n  right: 0;\n  bottom: 0;\n  z-index: 13;\n  display: -webkit-box;\n  display: -webkit-flex;\n  display: -moz-box;\n  display: -moz-flex;\n  display: -ms-flexbox;\n  display: flex;\n  -webkit-box-pack: center;\n  -ms-flex-pack: center;\n  -webkit-justify-content: center;\n  -moz-justify-content: center;\n  justify-content: center;\n  -webkit-box-align: center;\n  -ms-flex-align: center;\n  -webkit-align-items: center;\n  -moz-align-items: center;\n  align-items: center;\n  -webkit-transition: 0.2s opacity linear;\n  transition: 0.2s opacity linear;\n  visibility: hidden;\n  opacity: 0; }\n  .loading-container:not(.visible) .icon,\n  .loading-container:not(.visible) .spinner {\n    display: none; }\n  .loading-container.visible {\n    visibility: visible; }\n  .loading-container.active {\n    opacity: 1; }\n  .loading-container .loading {\n    padding: 20px;\n    border-radius: 5px;\n    background-color: rgba(0, 0, 0, 0.7);\n    color: #fff;\n    text-align: center;\n    text-overflow: ellipsis;\n    font-size: 15px; }\n    .loading-container .loading h1, .loading-container .loading h2, .loading-container .loading h3, .loading-container .loading h4, .loading-container .loading h5, .loading-container .loading h6 {\n      color: #fff; }\n\n/**\n * Items\n * --------------------------------------------------\n */\n.item {\n  border-color: #ddd;\n  background-color: #fff;\n  color: #444;\n  position: relative;\n  z-index: 2;\n  display: block;\n  margin: -1px;\n  padding: 16px;\n  border-width: 1px;\n  border-style: solid;\n  font-size: 16px; }\n  .item h2 {\n    margin: 0 0 2px 0;\n    font-size: 16px;\n    font-weight: normal; }\n  .item h3 {\n    margin: 0 0 4px 0;\n    font-size: 14px; }\n  .item h4 {\n    margin: 0 0 4px 0;\n    font-size: 12px; }\n  .item h5, .item h6 {\n    margin: 0 0 3px 0;\n    font-size: 10px; }\n  .item p {\n    color: #666;\n    font-size: 14px;\n    margin-bottom: 2px; }\n  .item h1:last-child,\n  .item h2:last-child,\n  .item h3:last-child,\n  .item h4:last-child,\n  .item h5:last-child,\n  .item h6:last-child,\n  .item p:last-child {\n    margin-bottom: 0; }\n  .item .badge {\n    display: -webkit-box;\n    display: -webkit-flex;\n    display: -moz-box;\n    display: -moz-flex;\n    display: -ms-flexbox;\n    display: flex;\n    position: absolute;\n    top: 16px;\n    right: 32px; }\n  .item.item-button-right .badge {\n    right: 67px; }\n  .item.item-divider .badge {\n    top: 8px; }\n  .item .badge + .badge {\n    margin-right: 5px; }\n  .item.item-light {\n    border-color: #ddd;\n    background-color: #fff;\n    color: #444; }\n  .item.item-stable {\n    border-color: #b2b2b2;\n    background-color: #f8f8f8;\n    color: #444; }\n  .item.item-positive {\n    border-color: #0c60ee;\n    background-color: #387ef5;\n    color: #fff; }\n  .item.item-calm {\n    border-color: #0a9dc7;\n    background-color: #11c1f3;\n    color: #fff; }\n  .item.item-assertive {\n    border-color: #e42112;\n    background-color: #ef473a;\n    color: #fff; }\n  .item.item-balanced {\n    border-color: #28a54c;\n    background-color: #33cd5f;\n    color: #fff; }\n  .item.item-energized {\n    border-color: #e6b500;\n    background-color: #ffc900;\n    color: #fff; }\n  .item.item-royal {\n    border-color: #6b46e5;\n    background-color: #886aea;\n    color: #fff; }\n  .item.item-dark {\n    border-color: #111;\n    background-color: #444;\n    color: #fff; }\n  .item[ng-click]:hover {\n    cursor: pointer; }\n\n.list-borderless .item,\n.item-borderless {\n  border-width: 0; }\n\n.item.active,\n.item.activated,\n.item-complex.active .item-content,\n.item-complex.activated .item-content,\n.item .item-content.active,\n.item .item-content.activated {\n  border-color: #ccc;\n  background-color: #D9D9D9; }\n  .item.active.item-light,\n  .item.activated.item-light,\n  .item-complex.active .item-content.item-light,\n  .item-complex.activated .item-content.item-light,\n  .item .item-content.active.item-light,\n  .item .item-content.activated.item-light {\n    border-color: #ccc;\n    background-color: #fafafa; }\n  .item.active.item-stable,\n  .item.activated.item-stable,\n  .item-complex.active .item-content.item-stable,\n  .item-complex.activated .item-content.item-stable,\n  .item .item-content.active.item-stable,\n  .item .item-content.activated.item-stable {\n    border-color: #a2a2a2;\n    background-color: #e5e5e5; }\n  .item.active.item-positive,\n  .item.activated.item-positive,\n  .item-complex.active .item-content.item-positive,\n  .item-complex.activated .item-content.item-positive,\n  .item .item-content.active.item-positive,\n  .item .item-content.activated.item-positive {\n    border-color: #0c60ee;\n    background-color: #0c60ee; }\n  .item.active.item-calm,\n  .item.activated.item-calm,\n  .item-complex.active .item-content.item-calm,\n  .item-complex.activated .item-content.item-calm,\n  .item .item-content.active.item-calm,\n  .item .item-content.activated.item-calm {\n    border-color: #0a9dc7;\n    background-color: #0a9dc7; }\n  .item.active.item-assertive,\n  .item.activated.item-assertive,\n  .item-complex.active .item-content.item-assertive,\n  .item-complex.activated .item-content.item-assertive,\n  .item .item-content.active.item-assertive,\n  .item .item-content.activated.item-assertive {\n    border-color: #e42112;\n    background-color: #e42112; }\n  .item.active.item-balanced,\n  .item.activated.item-balanced,\n  .item-complex.active .item-content.item-balanced,\n  .item-complex.activated .item-content.item-balanced,\n  .item .item-content.active.item-balanced,\n  .item .item-content.activated.item-balanced {\n    border-color: #28a54c;\n    background-color: #28a54c; }\n  .item.active.item-energized,\n  .item.activated.item-energized,\n  .item-complex.active .item-content.item-energized,\n  .item-complex.activated .item-content.item-energized,\n  .item .item-content.active.item-energized,\n  .item .item-content.activated.item-energized {\n    border-color: #e6b500;\n    background-color: #e6b500; }\n  .item.active.item-royal,\n  .item.activated.item-royal,\n  .item-complex.active .item-content.item-royal,\n  .item-complex.activated .item-content.item-royal,\n  .item .item-content.active.item-royal,\n  .item .item-content.activated.item-royal {\n    border-color: #6b46e5;\n    background-color: #6b46e5; }\n  .item.active.item-dark,\n  .item.activated.item-dark,\n  .item-complex.active .item-content.item-dark,\n  .item-complex.activated .item-content.item-dark,\n  .item .item-content.active.item-dark,\n  .item .item-content.activated.item-dark {\n    border-color: #000;\n    background-color: #262626; }\n\n.item,\n.item h1,\n.item h2,\n.item h3,\n.item h4,\n.item h5,\n.item h6,\n.item p,\n.item-content,\n.item-content h1,\n.item-content h2,\n.item-content h3,\n.item-content h4,\n.item-content h5,\n.item-content h6,\n.item-content p {\n  overflow: hidden;\n  text-overflow: ellipsis;\n  white-space: nowrap; }\n\na.item {\n  color: inherit;\n  text-decoration: none; }\n  a.item:hover,\n  a.item:focus {\n    text-decoration: none; }\n\n/**\n * Complex Items\n * --------------------------------------------------\n * Adding .item-complex allows the .item to be slidable and\n * have options underneath the button, but also requires an\n * additional .item-content element inside .item.\n * Basically .item-complex removes any default settings which\n * .item added, so that .item-content looks them as just .item.\n */\n.item-complex,\na.item.item-complex,\nbutton.item.item-complex {\n  padding: 0; }\n\n.item-complex .item-content,\n.item-radio .item-content {\n  position: relative;\n  z-index: 2;\n  padding: 16px 49px 16px 16px;\n  border: none;\n  background-color: #fff; }\n\na.item-content {\n  display: block;\n  color: inherit;\n  text-decoration: none; }\n\n.item-text-wrap .item,\n.item-text-wrap .item-content,\n.item-text-wrap,\n.item-text-wrap h1,\n.item-text-wrap h2,\n.item-text-wrap h3,\n.item-text-wrap h4,\n.item-text-wrap h5,\n.item-text-wrap h6,\n.item-text-wrap p,\n.item-complex.item-text-wrap .item-content,\n.item-body h1,\n.item-body h2,\n.item-body h3,\n.item-body h4,\n.item-body h5,\n.item-body h6,\n.item-body p {\n  overflow: visible;\n  white-space: normal; }\n\n.item-complex.item-text-wrap,\n.item-complex.item-text-wrap h1,\n.item-complex.item-text-wrap h2,\n.item-complex.item-text-wrap h3,\n.item-complex.item-text-wrap h4,\n.item-complex.item-text-wrap h5,\n.item-complex.item-text-wrap h6,\n.item-complex.item-text-wrap p {\n  overflow: visible;\n  white-space: normal; }\n\n.item-complex.item-light > .item-content {\n  border-color: #ddd;\n  background-color: #fff;\n  color: #444; }\n  .item-complex.item-light > .item-content.active, .item-complex.item-light > .item-content:active {\n    border-color: #ccc;\n    background-color: #fafafa; }\n\n.item-complex.item-stable > .item-content {\n  border-color: #b2b2b2;\n  background-color: #f8f8f8;\n  color: #444; }\n  .item-complex.item-stable > .item-content.active, .item-complex.item-stable > .item-content:active {\n    border-color: #a2a2a2;\n    background-color: #e5e5e5; }\n\n.item-complex.item-positive > .item-content {\n  border-color: #0c60ee;\n  background-color: #387ef5;\n  color: #fff; }\n  .item-complex.item-positive > .item-content.active, .item-complex.item-positive > .item-content:active {\n    border-color: #0c60ee;\n    background-color: #0c60ee; }\n\n.item-complex.item-calm > .item-content {\n  border-color: #0a9dc7;\n  background-color: #11c1f3;\n  color: #fff; }\n  .item-complex.item-calm > .item-content.active, .item-complex.item-calm > .item-content:active {\n    border-color: #0a9dc7;\n    background-color: #0a9dc7; }\n\n.item-complex.item-assertive > .item-content {\n  border-color: #e42112;\n  background-color: #ef473a;\n  color: #fff; }\n  .item-complex.item-assertive > .item-content.active, .item-complex.item-assertive > .item-content:active {\n    border-color: #e42112;\n    background-color: #e42112; }\n\n.item-complex.item-balanced > .item-content {\n  border-color: #28a54c;\n  background-color: #33cd5f;\n  color: #fff; }\n  .item-complex.item-balanced > .item-content.active, .item-complex.item-balanced > .item-content:active {\n    border-color: #28a54c;\n    background-color: #28a54c; }\n\n.item-complex.item-energized > .item-content {\n  border-color: #e6b500;\n  background-color: #ffc900;\n  color: #fff; }\n  .item-complex.item-energized > .item-content.active, .item-complex.item-energized > .item-content:active {\n    border-color: #e6b500;\n    background-color: #e6b500; }\n\n.item-complex.item-royal > .item-content {\n  border-color: #6b46e5;\n  background-color: #886aea;\n  color: #fff; }\n  .item-complex.item-royal > .item-content.active, .item-complex.item-royal > .item-content:active {\n    border-color: #6b46e5;\n    background-color: #6b46e5; }\n\n.item-complex.item-dark > .item-content {\n  border-color: #111;\n  background-color: #444;\n  color: #fff; }\n  .item-complex.item-dark > .item-content.active, .item-complex.item-dark > .item-content:active {\n    border-color: #000;\n    background-color: #262626; }\n\n/**\n * Item Icons\n * --------------------------------------------------\n */\n.item-icon-left .icon,\n.item-icon-right .icon {\n  display: -webkit-box;\n  display: -webkit-flex;\n  display: -moz-box;\n  display: -moz-flex;\n  display: -ms-flexbox;\n  display: flex;\n  -webkit-box-align: center;\n  -ms-flex-align: center;\n  -webkit-align-items: center;\n  -moz-align-items: center;\n  align-items: center;\n  position: absolute;\n  top: 0;\n  height: 100%;\n  font-size: 32px; }\n  .item-icon-left .icon:before,\n  .item-icon-right .icon:before {\n    display: block;\n    width: 32px;\n    text-align: center; }\n\n.item .fill-icon {\n  min-width: 30px;\n  min-height: 30px;\n  font-size: 28px; }\n\n.item-icon-left {\n  padding-left: 54px; }\n  .item-icon-left .icon {\n    left: 11px; }\n\n.item-complex.item-icon-left {\n  padding-left: 0; }\n  .item-complex.item-icon-left .item-content {\n    padding-left: 54px; }\n\n.item-icon-right {\n  padding-right: 54px; }\n  .item-icon-right .icon {\n    right: 11px; }\n\n.item-complex.item-icon-right {\n  padding-right: 0; }\n  .item-complex.item-icon-right .item-content {\n    padding-right: 54px; }\n\n.item-icon-left.item-icon-right .icon:first-child {\n  right: auto; }\n\n.item-icon-left.item-icon-right .icon:last-child,\n.item-icon-left .item-delete .icon {\n  left: auto; }\n\n.item-icon-left .icon-accessory,\n.item-icon-right .icon-accessory {\n  color: #ccc;\n  font-size: 16px; }\n\n.item-icon-left .icon-accessory {\n  left: 3px; }\n\n.item-icon-right .icon-accessory {\n  right: 3px; }\n\n/**\n * Item Button\n * --------------------------------------------------\n * An item button is a child button inside an .item (not the entire .item)\n */\n.item-button-left {\n  padding-left: 72px; }\n\n.item-button-left > .button,\n.item-button-left .item-content > .button {\n  display: -webkit-box;\n  display: -webkit-flex;\n  display: -moz-box;\n  display: -moz-flex;\n  display: -ms-flexbox;\n  display: flex;\n  -webkit-box-align: center;\n  -ms-flex-align: center;\n  -webkit-align-items: center;\n  -moz-align-items: center;\n  align-items: center;\n  position: absolute;\n  top: 8px;\n  left: 11px;\n  min-width: 34px;\n  min-height: 34px;\n  font-size: 18px;\n  line-height: 32px; }\n  .item-button-left > .button .icon:before,\n  .item-button-left .item-content > .button .icon:before {\n    position: relative;\n    left: auto;\n    width: auto;\n    line-height: 31px; }\n  .item-button-left > .button > .button,\n  .item-button-left .item-content > .button > .button {\n    margin: 0px 2px;\n    min-height: 34px;\n    font-size: 18px;\n    line-height: 32px; }\n\n.item-button-right,\na.item.item-button-right,\nbutton.item.item-button-right {\n  padding-right: 80px; }\n\n.item-button-right > .button,\n.item-button-right .item-content > .button,\n.item-button-right > .buttons,\n.item-button-right .item-content > .buttons {\n  display: -webkit-box;\n  display: -webkit-flex;\n  display: -moz-box;\n  display: -moz-flex;\n  display: -ms-flexbox;\n  display: flex;\n  -webkit-box-align: center;\n  -ms-flex-align: center;\n  -webkit-align-items: center;\n  -moz-align-items: center;\n  align-items: center;\n  position: absolute;\n  top: 8px;\n  right: 16px;\n  min-width: 34px;\n  min-height: 34px;\n  font-size: 18px;\n  line-height: 32px; }\n  .item-button-right > .button .icon:before,\n  .item-button-right .item-content > .button .icon:before,\n  .item-button-right > .buttons .icon:before,\n  .item-button-right .item-content > .buttons .icon:before {\n    position: relative;\n    left: auto;\n    width: auto;\n    line-height: 31px; }\n  .item-button-right > .button > .button,\n  .item-button-right .item-content > .button > .button,\n  .item-button-right > .buttons > .button,\n  .item-button-right .item-content > .buttons > .button {\n    margin: 0px 2px;\n    min-width: 34px;\n    min-height: 34px;\n    font-size: 18px;\n    line-height: 32px; }\n\n.item-avatar,\n.item-avatar .item-content,\n.item-avatar-left,\n.item-avatar-left .item-content {\n  padding-left: 72px;\n  min-height: 72px; }\n  .item-avatar > img:first-child,\n  .item-avatar .item-image,\n  .item-avatar .item-content > img:first-child,\n  .item-avatar .item-content .item-image,\n  .item-avatar-left > img:first-child,\n  .item-avatar-left .item-image,\n  .item-avatar-left .item-content > img:first-child,\n  .item-avatar-left .item-content .item-image {\n    position: absolute;\n    top: 16px;\n    left: 16px;\n    max-width: 40px;\n    max-height: 40px;\n    width: 100%;\n    height: 100%;\n    border-radius: 50%; }\n\n.item-avatar-right,\n.item-avatar-right .item-content {\n  padding-right: 72px;\n  min-height: 72px; }\n  .item-avatar-right > img:first-child,\n  .item-avatar-right .item-image,\n  .item-avatar-right .item-content > img:first-child,\n  .item-avatar-right .item-content .item-image {\n    position: absolute;\n    top: 16px;\n    right: 16px;\n    max-width: 40px;\n    max-height: 40px;\n    width: 100%;\n    height: 100%;\n    border-radius: 50%; }\n\n.item-thumbnail-left,\n.item-thumbnail-left .item-content {\n  padding-top: 8px;\n  padding-left: 106px;\n  min-height: 100px; }\n  .item-thumbnail-left > img:first-child,\n  .item-thumbnail-left .item-image,\n  .item-thumbnail-left .item-content > img:first-child,\n  .item-thumbnail-left .item-content .item-image {\n    position: absolute;\n    top: 10px;\n    left: 10px;\n    max-width: 80px;\n    max-height: 80px;\n    width: 100%;\n    height: 100%; }\n\n.item-avatar.item-complex,\n.item-avatar-left.item-complex,\n.item-thumbnail-left.item-complex {\n  padding-top: 0;\n  padding-left: 0; }\n\n.item-thumbnail-right,\n.item-thumbnail-right .item-content {\n  padding-top: 8px;\n  padding-right: 106px;\n  min-height: 100px; }\n  .item-thumbnail-right > img:first-child,\n  .item-thumbnail-right .item-image,\n  .item-thumbnail-right .item-content > img:first-child,\n  .item-thumbnail-right .item-content .item-image {\n    position: absolute;\n    top: 10px;\n    right: 10px;\n    max-width: 80px;\n    max-height: 80px;\n    width: 100%;\n    height: 100%; }\n\n.item-avatar-right.item-complex,\n.item-thumbnail-right.item-complex {\n  padding-top: 0;\n  padding-right: 0; }\n\n.item-image {\n  padding: 0;\n  text-align: center; }\n  .item-image img:first-child, .item-image .list-img {\n    width: 100%;\n    vertical-align: middle; }\n\n.item-body {\n  overflow: auto;\n  padding: 16px;\n  text-overflow: inherit;\n  white-space: normal; }\n  .item-body h1, .item-body h2, .item-body h3, .item-body h4, .item-body h5, .item-body h6, .item-body p {\n    margin-top: 16px;\n    margin-bottom: 16px; }\n\n.item-divider {\n  padding-top: 8px;\n  padding-bottom: 8px;\n  min-height: 30px;\n  background-color: #f5f5f5;\n  color: #222;\n  font-weight: 500; }\n\n.platform-ios .item-divider-platform,\n.item-divider-ios {\n  padding-top: 26px;\n  text-transform: uppercase;\n  font-weight: 300;\n  font-size: 13px;\n  background-color: #efeff4;\n  color: #555; }\n\n.platform-android .item-divider-platform,\n.item-divider-android {\n  font-weight: 300;\n  font-size: 13px; }\n\n.item-note {\n  float: right;\n  color: #aaa;\n  font-size: 14px; }\n\n.item-left-editable .item-content,\n.item-right-editable .item-content {\n  -webkit-transition-duration: 250ms;\n  transition-duration: 250ms;\n  -webkit-transition-timing-function: ease-in-out;\n  transition-timing-function: ease-in-out;\n  -webkit-transition-property: -webkit-transform;\n  -moz-transition-property: -moz-transform;\n  transition-property: transform; }\n\n.list-left-editing .item-left-editable .item-content,\n.item-left-editing.item-left-editable .item-content {\n  -webkit-transform: translate3d(50px, 0, 0);\n  transform: translate3d(50px, 0, 0); }\n\n.item-remove-animate.ng-leave {\n  -webkit-transition-duration: 300ms;\n  transition-duration: 300ms; }\n\n.item-remove-animate.ng-leave .item-content,\n.item-remove-animate.ng-leave:last-of-type {\n  -webkit-transition-duration: 300ms;\n  transition-duration: 300ms;\n  -webkit-transition-timing-function: ease-in;\n  transition-timing-function: ease-in;\n  -webkit-transition-property: all;\n  transition-property: all; }\n\n.item-remove-animate.ng-leave.ng-leave-active .item-content {\n  opacity: 0;\n  -webkit-transform: translate3d(-100%, 0, 0) !important;\n  transform: translate3d(-100%, 0, 0) !important; }\n\n.item-remove-animate.ng-leave.ng-leave-active:last-of-type {\n  opacity: 0; }\n\n.item-remove-animate.ng-leave.ng-leave-active ~ ion-item:not(.ng-leave) {\n  -webkit-transform: translate3d(0, -webkit-calc(-100% + 1px), 0);\n  transform: translate3d(0, calc(-100% + 1px), 0);\n  -webkit-transition-duration: 300ms;\n  transition-duration: 300ms;\n  -webkit-transition-timing-function: cubic-bezier(0.25, 0.81, 0.24, 1);\n  transition-timing-function: cubic-bezier(0.25, 0.81, 0.24, 1);\n  -webkit-transition-property: all;\n  transition-property: all; }\n\n.item-left-edit {\n  -webkit-transition: all ease-in-out 125ms;\n  transition: all ease-in-out 125ms;\n  position: absolute;\n  top: 0;\n  left: 0;\n  z-index: 0;\n  width: 50px;\n  height: 100%;\n  line-height: 100%;\n  display: none;\n  opacity: 0;\n  -webkit-transform: translate3d(-21px, 0, 0);\n  transform: translate3d(-21px, 0, 0); }\n  .item-left-edit .button {\n    height: 100%; }\n    .item-left-edit .button.icon {\n      display: -webkit-box;\n      display: -webkit-flex;\n      display: -moz-box;\n      display: -moz-flex;\n      display: -ms-flexbox;\n      display: flex;\n      -webkit-box-align: center;\n      -ms-flex-align: center;\n      -webkit-align-items: center;\n      -moz-align-items: center;\n      align-items: center;\n      position: absolute;\n      top: 0;\n      height: 100%; }\n  .item-left-edit.visible {\n    display: block; }\n    .item-left-edit.visible.active {\n      opacity: 1;\n      -webkit-transform: translate3d(8px, 0, 0);\n      transform: translate3d(8px, 0, 0); }\n\n.list-left-editing .item-left-edit {\n  -webkit-transition-delay: 125ms;\n  transition-delay: 125ms; }\n\n.item-delete .button.icon {\n  color: #ef473a;\n  font-size: 24px; }\n  .item-delete .button.icon:hover {\n    opacity: .7; }\n\n.item-right-edit {\n  -webkit-transition: all ease-in-out 250ms;\n  transition: all ease-in-out 250ms;\n  position: absolute;\n  top: 0;\n  right: 0;\n  z-index: 3;\n  width: 75px;\n  height: 100%;\n  background: inherit;\n  padding-left: 20px;\n  display: block;\n  opacity: 0;\n  -webkit-transform: translate3d(75px, 0, 0);\n  transform: translate3d(75px, 0, 0); }\n  .item-right-edit .button {\n    min-width: 50px;\n    height: 100%; }\n    .item-right-edit .button.icon {\n      display: -webkit-box;\n      display: -webkit-flex;\n      display: -moz-box;\n      display: -moz-flex;\n      display: -ms-flexbox;\n      display: flex;\n      -webkit-box-align: center;\n      -ms-flex-align: center;\n      -webkit-align-items: center;\n      -moz-align-items: center;\n      align-items: center;\n      position: absolute;\n      top: 0;\n      height: 100%;\n      font-size: 32px; }\n  .item-right-edit.visible {\n    display: block; }\n    .item-right-edit.visible.active {\n      opacity: 1;\n      -webkit-transform: translate3d(0, 0, 0);\n      transform: translate3d(0, 0, 0); }\n\n.item-reorder .button.icon {\n  color: #444;\n  font-size: 32px; }\n\n.item-reordering {\n  position: absolute;\n  left: 0;\n  top: 0;\n  z-index: 9;\n  width: 100%;\n  box-shadow: 0px 0px 10px 0px #aaa; }\n  .item-reordering .item-reorder {\n    z-index: 9; }\n\n.item-placeholder {\n  opacity: 0.7; }\n\n/**\n * The hidden right-side buttons that can be exposed under a list item\n * with dragging.\n */\n.item-options {\n  position: absolute;\n  top: 0;\n  right: 0;\n  z-index: 1;\n  height: 100%; }\n  .item-options .button {\n    height: 100%;\n    border: none;\n    border-radius: 0;\n    display: -webkit-inline-box;\n    display: -webkit-inline-flex;\n    display: -moz-inline-flex;\n    display: -ms-inline-flexbox;\n    display: inline-flex;\n    -webkit-box-align: center;\n    -ms-flex-align: center;\n    -webkit-align-items: center;\n    -moz-align-items: center;\n    align-items: center; }\n    .item-options .button:before {\n      margin: 0 auto; }\n\n/**\n * Lists\n * --------------------------------------------------\n */\n.list {\n  position: relative;\n  padding-top: 1px;\n  padding-bottom: 1px;\n  padding-left: 0;\n  margin-bottom: 20px; }\n\n.list:last-child {\n  margin-bottom: 0px; }\n  .list:last-child.card {\n    margin-bottom: 40px; }\n\n/**\n * List Header\n * --------------------------------------------------\n */\n.list-header {\n  margin-top: 20px;\n  padding: 5px 15px;\n  background-color: transparent;\n  color: #222;\n  font-weight: bold; }\n\n.card.list .list-item {\n  padding-right: 1px;\n  padding-left: 1px; }\n\n/**\n * Cards and Inset Lists\n * --------------------------------------------------\n * A card and list-inset are close to the same thing, except a card as a box shadow.\n */\n.card,\n.list-inset {\n  overflow: hidden;\n  margin: 20px 10px;\n  border-radius: 2px;\n  background-color: #fff; }\n\n.card {\n  padding-top: 1px;\n  padding-bottom: 1px;\n  box-shadow: 0 1px 3px rgba(0, 0, 0, 0.3); }\n  .card .item {\n    border-left: 0;\n    border-right: 0; }\n  .card .item:first-child {\n    border-top: 0; }\n  .card .item:last-child {\n    border-bottom: 0; }\n\n.padding .card, .padding .list-inset {\n  margin-left: 0;\n  margin-right: 0; }\n\n.card .item:first-child,\n.list-inset .item:first-child,\n.padding > .list .item:first-child {\n  border-top-left-radius: 2px;\n  border-top-right-radius: 2px; }\n  .card .item:first-child .item-content,\n  .list-inset .item:first-child .item-content,\n  .padding > .list .item:first-child .item-content {\n    border-top-left-radius: 2px;\n    border-top-right-radius: 2px; }\n\n.card .item:last-child,\n.list-inset .item:last-child,\n.padding > .list .item:last-child {\n  border-bottom-right-radius: 2px;\n  border-bottom-left-radius: 2px; }\n  .card .item:last-child .item-content,\n  .list-inset .item:last-child .item-content,\n  .padding > .list .item:last-child .item-content {\n    border-bottom-right-radius: 2px;\n    border-bottom-left-radius: 2px; }\n\n.card .item:last-child,\n.list-inset .item:last-child {\n  margin-bottom: -1px; }\n\n.card .item,\n.list-inset .item,\n.padding > .list .item,\n.padding-horizontal > .list .item {\n  margin-right: 0;\n  margin-left: 0; }\n  .card .item.item-input input,\n  .list-inset .item.item-input input,\n  .padding > .list .item.item-input input,\n  .padding-horizontal > .list .item.item-input input {\n    padding-right: 44px; }\n\n.padding-left > .list .item {\n  margin-left: 0; }\n\n.padding-right > .list .item {\n  margin-right: 0; }\n\n/**\n * Badges\n * --------------------------------------------------\n */\n.badge {\n  background-color: transparent;\n  color: #AAAAAA;\n  z-index: 1;\n  display: inline-block;\n  padding: 3px 8px;\n  min-width: 10px;\n  border-radius: 10px;\n  vertical-align: baseline;\n  text-align: center;\n  white-space: nowrap;\n  font-weight: bold;\n  font-size: 14px;\n  line-height: 16px; }\n  .badge:empty {\n    display: none; }\n\n.tabs .tab-item .badge.badge-light,\n.badge.badge-light {\n  background-color: #fff;\n  color: #444; }\n\n.tabs .tab-item .badge.badge-stable,\n.badge.badge-stable {\n  background-color: #f8f8f8;\n  color: #444; }\n\n.tabs .tab-item .badge.badge-positive,\n.badge.badge-positive {\n  background-color: #387ef5;\n  color: #fff; }\n\n.tabs .tab-item .badge.badge-calm,\n.badge.badge-calm {\n  background-color: #11c1f3;\n  color: #fff; }\n\n.tabs .tab-item .badge.badge-assertive,\n.badge.badge-assertive {\n  background-color: #ef473a;\n  color: #fff; }\n\n.tabs .tab-item .badge.badge-balanced,\n.badge.badge-balanced {\n  background-color: #33cd5f;\n  color: #fff; }\n\n.tabs .tab-item .badge.badge-energized,\n.badge.badge-energized {\n  background-color: #ffc900;\n  color: #fff; }\n\n.tabs .tab-item .badge.badge-royal,\n.badge.badge-royal {\n  background-color: #886aea;\n  color: #fff; }\n\n.tabs .tab-item .badge.badge-dark,\n.badge.badge-dark {\n  background-color: #444;\n  color: #fff; }\n\n.button .badge {\n  position: relative;\n  top: -1px; }\n\n/**\n * Slide Box\n * --------------------------------------------------\n */\n.slider {\n  position: relative;\n  visibility: hidden;\n  overflow: hidden; }\n\n.slider-slides {\n  position: relative;\n  height: 100%; }\n\n.slider-slide {\n  position: relative;\n  display: block;\n  float: left;\n  width: 100%;\n  height: 100%;\n  vertical-align: top; }\n\n.slider-slide-image > img {\n  width: 100%; }\n\n.slider-pager {\n  position: absolute;\n  bottom: 20px;\n  z-index: 1;\n  width: 100%;\n  height: 15px;\n  text-align: center; }\n  .slider-pager .slider-pager-page {\n    display: inline-block;\n    margin: 0px 3px;\n    width: 15px;\n    color: #000;\n    text-decoration: none;\n    opacity: 0.3; }\n    .slider-pager .slider-pager-page.active {\n      -webkit-transition: opacity 0.4s ease-in;\n      transition: opacity 0.4s ease-in;\n      opacity: 1; }\n\n.slider-slide.ng-enter,\n.slider-slide.ng-leave,\n.slider-slide.ng-animate,\n.slider-pager-page.ng-enter,\n.slider-pager-page.ng-leave,\n.slider-pager-page.ng-animate {\n  -webkit-transition: none !important;\n  transition: none !important; }\n\n.slider-slide.ng-animate,\n.slider-pager-page.ng-animate {\n  -webkit-animation: none 0s;\n  animation: none 0s; }\n\n.scroll-refresher {\n  position: absolute;\n  top: -60px;\n  right: 0;\n  left: 0;\n  overflow: hidden;\n  margin: auto;\n  height: 60px; }\n  .scroll-refresher .ionic-refresher-content {\n    position: absolute;\n    bottom: 15px;\n    left: 0;\n    width: 100%;\n    color: #666666;\n    text-align: center;\n    font-size: 30px; }\n    .scroll-refresher .ionic-refresher-content .text-refreshing,\n    .scroll-refresher .ionic-refresher-content .text-pulling {\n      font-size: 16px;\n      line-height: 16px; }\n    .scroll-refresher .ionic-refresher-content.ionic-refresher-with-text {\n      bottom: 10px; }\n  .scroll-refresher .icon-refreshing,\n  .scroll-refresher .icon-pulling {\n    width: 100%;\n    -webkit-backface-visibility: hidden;\n    backface-visibility: hidden;\n    -webkit-transform-style: preserve-3d;\n    transform-style: preserve-3d; }\n  .scroll-refresher .icon-pulling {\n    -webkit-animation-name: refresh-spin-back;\n    animation-name: refresh-spin-back;\n    -webkit-animation-duration: 200ms;\n    animation-duration: 200ms;\n    -webkit-animation-timing-function: linear;\n    animation-timing-function: linear;\n    -webkit-animation-fill-mode: none;\n    animation-fill-mode: none;\n    -webkit-transform: translate3d(0, 0, 0) rotate(0deg);\n    transform: translate3d(0, 0, 0) rotate(0deg); }\n  .scroll-refresher .icon-refreshing,\n  .scroll-refresher .text-refreshing {\n    display: none; }\n  .scroll-refresher .icon-refreshing {\n    -webkit-animation-duration: 1.5s;\n    animation-duration: 1.5s; }\n  .scroll-refresher.active .icon-pulling:not(.pulling-rotation-disabled) {\n    -webkit-animation-name: refresh-spin;\n    animation-name: refresh-spin;\n    -webkit-transform: translate3d(0, 0, 0) rotate(-180deg);\n    transform: translate3d(0, 0, 0) rotate(-180deg); }\n  .scroll-refresher.active.refreshing {\n    -webkit-transition: -webkit-transform 0.2s;\n    transition: -webkit-transform 0.2s;\n    -webkit-transition: transform 0.2s;\n    transition: transform 0.2s;\n    -webkit-transform: scale(1, 1);\n    transform: scale(1, 1); }\n    .scroll-refresher.active.refreshing .icon-pulling,\n    .scroll-refresher.active.refreshing .text-pulling {\n      display: none; }\n    .scroll-refresher.active.refreshing .icon-refreshing,\n    .scroll-refresher.active.refreshing .text-refreshing {\n      display: block; }\n    .scroll-refresher.active.refreshing.refreshing-tail {\n      -webkit-transform: scale(0, 0);\n      transform: scale(0, 0); }\n\n.overflow-scroll > .scroll {\n  -webkit-overflow-scrolling: touch;\n  width: 100%; }\n  .overflow-scroll > .scroll.overscroll {\n    position: fixed;\n    right: 0;\n    left: 0; }\n\n.overflow-scroll.padding > .scroll.overscroll {\n  padding: 10px; }\n\n@-webkit-keyframes refresh-spin {\n  0% {\n    -webkit-transform: translate3d(0, 0, 0) rotate(0); }\n  100% {\n    -webkit-transform: translate3d(0, 0, 0) rotate(180deg); } }\n\n@keyframes refresh-spin {\n  0% {\n    transform: translate3d(0, 0, 0) rotate(0); }\n  100% {\n    transform: translate3d(0, 0, 0) rotate(180deg); } }\n\n@-webkit-keyframes refresh-spin-back {\n  0% {\n    -webkit-transform: translate3d(0, 0, 0) rotate(180deg); }\n  100% {\n    -webkit-transform: translate3d(0, 0, 0) rotate(0); } }\n\n@keyframes refresh-spin-back {\n  0% {\n    transform: translate3d(0, 0, 0) rotate(180deg); }\n  100% {\n    transform: translate3d(0, 0, 0) rotate(0); } }\n\n/**\n * Spinners\n * --------------------------------------------------\n */\n.spinner {\n  stroke: #444;\n  fill: #444; }\n  .spinner svg {\n    width: 28px;\n    height: 28px; }\n  .spinner.spinner-light {\n    stroke: #fff;\n    fill: #fff; }\n  .spinner.spinner-stable {\n    stroke: #f8f8f8;\n    fill: #f8f8f8; }\n  .spinner.spinner-positive {\n    stroke: #387ef5;\n    fill: #387ef5; }\n  .spinner.spinner-calm {\n    stroke: #11c1f3;\n    fill: #11c1f3; }\n  .spinner.spinner-balanced {\n    stroke: #33cd5f;\n    fill: #33cd5f; }\n  .spinner.spinner-assertive {\n    stroke: #ef473a;\n    fill: #ef473a; }\n  .spinner.spinner-energized {\n    stroke: #ffc900;\n    fill: #ffc900; }\n  .spinner.spinner-royal {\n    stroke: #886aea;\n    fill: #886aea; }\n  .spinner.spinner-dark {\n    stroke: #444;\n    fill: #444; }\n\n.spinner-android {\n  stroke: #4b8bf4; }\n\n.spinner-ios,\n.spinner-ios-small {\n  stroke: #69717d; }\n\n.spinner-spiral .stop1 {\n  stop-color: #fff;\n  stop-opacity: 0; }\n\n.spinner-spiral.spinner-light .stop1 {\n  stop-color: #444; }\n\n.spinner-spiral.spinner-light .stop2 {\n  stop-color: #fff; }\n\n.spinner-spiral.spinner-stable .stop2 {\n  stop-color: #f8f8f8; }\n\n.spinner-spiral.spinner-positive .stop2 {\n  stop-color: #387ef5; }\n\n.spinner-spiral.spinner-calm .stop2 {\n  stop-color: #11c1f3; }\n\n.spinner-spiral.spinner-balanced .stop2 {\n  stop-color: #33cd5f; }\n\n.spinner-spiral.spinner-assertive .stop2 {\n  stop-color: #ef473a; }\n\n.spinner-spiral.spinner-energized .stop2 {\n  stop-color: #ffc900; }\n\n.spinner-spiral.spinner-royal .stop2 {\n  stop-color: #886aea; }\n\n.spinner-spiral.spinner-dark .stop2 {\n  stop-color: #444; }\n\n/**\n * Forms\n * --------------------------------------------------\n */\nform {\n  margin: 0 0 1.42857; }\n\nlegend {\n  display: block;\n  margin-bottom: 1.42857;\n  padding: 0;\n  width: 100%;\n  border: 1px solid #ddd;\n  color: #444;\n  font-size: 21px;\n  line-height: 2.85714; }\n  legend small {\n    color: #f8f8f8;\n    font-size: 1.07143; }\n\nlabel,\ninput,\nbutton,\nselect,\ntextarea {\n  font-weight: normal;\n  font-size: 14px;\n  line-height: 1.42857; }\n\ninput,\nbutton,\nselect,\ntextarea {\n  font-family: \"Helvetica Neue\", \"Roboto\", \"Segoe UI\", sans-serif; }\n\n.item-input {\n  display: -webkit-box;\n  display: -webkit-flex;\n  display: -moz-box;\n  display: -moz-flex;\n  display: -ms-flexbox;\n  display: flex;\n  -webkit-box-align: center;\n  -ms-flex-align: center;\n  -webkit-align-items: center;\n  -moz-align-items: center;\n  align-items: center;\n  position: relative;\n  overflow: hidden;\n  padding: 6px 0 5px 16px; }\n  .item-input input {\n    -webkit-border-radius: 0;\n    border-radius: 0;\n    -webkit-box-flex: 1;\n    -webkit-flex: 1 220px;\n    -moz-box-flex: 1;\n    -moz-flex: 1 220px;\n    -ms-flex: 1 220px;\n    flex: 1 220px;\n    -webkit-appearance: none;\n    -moz-appearance: none;\n    appearance: none;\n    margin: 0;\n    padding-right: 24px;\n    background-color: transparent; }\n  .item-input .button .icon {\n    -webkit-box-flex: 0;\n    -webkit-flex: 0 0 24px;\n    -moz-box-flex: 0;\n    -moz-flex: 0 0 24px;\n    -ms-flex: 0 0 24px;\n    flex: 0 0 24px;\n    position: static;\n    display: inline-block;\n    height: auto;\n    text-align: center;\n    font-size: 16px; }\n  .item-input .button-bar {\n    -webkit-border-radius: 0;\n    border-radius: 0;\n    -webkit-box-flex: 1;\n    -webkit-flex: 1 0 220px;\n    -moz-box-flex: 1;\n    -moz-flex: 1 0 220px;\n    -ms-flex: 1 0 220px;\n    flex: 1 0 220px;\n    -webkit-appearance: none;\n    -moz-appearance: none;\n    appearance: none; }\n  .item-input .icon {\n    min-width: 14px; }\n\n.platform-windowsphone .item-input input {\n  flex-shrink: 1; }\n\n.item-input-inset {\n  display: -webkit-box;\n  display: -webkit-flex;\n  display: -moz-box;\n  display: -moz-flex;\n  display: -ms-flexbox;\n  display: flex;\n  -webkit-box-align: center;\n  -ms-flex-align: center;\n  -webkit-align-items: center;\n  -moz-align-items: center;\n  align-items: center;\n  position: relative;\n  overflow: hidden;\n  padding: 10.66667px; }\n\n.item-input-wrapper {\n  display: -webkit-box;\n  display: -webkit-flex;\n  display: -moz-box;\n  display: -moz-flex;\n  display: -ms-flexbox;\n  display: flex;\n  -webkit-box-flex: 1;\n  -webkit-flex: 1 0;\n  -moz-box-flex: 1;\n  -moz-flex: 1 0;\n  -ms-flex: 1 0;\n  flex: 1 0;\n  -webkit-box-align: center;\n  -ms-flex-align: center;\n  -webkit-align-items: center;\n  -moz-align-items: center;\n  align-items: center;\n  -webkit-border-radius: 4px;\n  border-radius: 4px;\n  padding-right: 8px;\n  padding-left: 8px;\n  background: #eee; }\n\n.item-input-inset .item-input-wrapper input {\n  padding-left: 4px;\n  height: 29px;\n  background: transparent;\n  line-height: 18px; }\n\n.item-input-wrapper ~ .button {\n  margin-left: 10.66667px; }\n\n.input-label {\n  display: table;\n  padding: 7px 10px 7px 0px;\n  max-width: 200px;\n  width: 35%;\n  color: #444;\n  font-size: 16px; }\n\n.placeholder-icon {\n  color: #aaa; }\n  .placeholder-icon:first-child {\n    padding-right: 6px; }\n  .placeholder-icon:last-child {\n    padding-left: 6px; }\n\n.item-stacked-label {\n  display: block;\n  background-color: transparent;\n  box-shadow: none; }\n  .item-stacked-label .input-label, .item-stacked-label .icon {\n    display: inline-block;\n    padding: 4px 0 0 0px;\n    vertical-align: middle; }\n\n.item-stacked-label input,\n.item-stacked-label textarea {\n  -webkit-border-radius: 2px;\n  border-radius: 2px;\n  padding: 4px 8px 3px 0;\n  border: none;\n  background-color: #fff; }\n\n.item-stacked-label input {\n  overflow: hidden;\n  height: 46px; }\n\n.item-floating-label {\n  display: block;\n  background-color: transparent;\n  box-shadow: none; }\n  .item-floating-label .input-label {\n    position: relative;\n    padding: 5px 0 0 0;\n    opacity: 0;\n    top: 10px;\n    -webkit-transition: opacity 0.15s ease-in, top 0.2s linear;\n    transition: opacity 0.15s ease-in, top 0.2s linear; }\n    .item-floating-label .input-label.has-input {\n      opacity: 1;\n      top: 0;\n      -webkit-transition: opacity 0.15s ease-in, top 0.2s linear;\n      transition: opacity 0.15s ease-in, top 0.2s linear; }\n\ntextarea,\ninput[type=\"text\"],\ninput[type=\"password\"],\ninput[type=\"datetime\"],\ninput[type=\"datetime-local\"],\ninput[type=\"date\"],\ninput[type=\"month\"],\ninput[type=\"time\"],\ninput[type=\"week\"],\ninput[type=\"number\"],\ninput[type=\"email\"],\ninput[type=\"url\"],\ninput[type=\"search\"],\ninput[type=\"tel\"],\ninput[type=\"color\"] {\n  display: block;\n  padding-top: 2px;\n  padding-left: 0;\n  height: 34px;\n  color: #111;\n  vertical-align: middle;\n  font-size: 14px;\n  line-height: 16px; }\n\n.platform-ios input[type=\"datetime-local\"],\n.platform-ios input[type=\"date\"],\n.platform-ios input[type=\"month\"],\n.platform-ios input[type=\"time\"],\n.platform-ios input[type=\"week\"],\n.platform-android input[type=\"datetime-local\"],\n.platform-android input[type=\"date\"],\n.platform-android input[type=\"month\"],\n.platform-android input[type=\"time\"],\n.platform-android input[type=\"week\"] {\n  padding-top: 8px; }\n\n.item-input input,\n.item-input textarea {\n  width: 100%; }\n\ntextarea {\n  padding-left: 0; }\n  textarea::-moz-placeholder {\n    color: #aaaaaa; }\n  textarea:-ms-input-placeholder {\n    color: #aaaaaa; }\n  textarea::-webkit-input-placeholder {\n    color: #aaaaaa;\n    text-indent: -3px; }\n\ntextarea {\n  height: auto; }\n\ntextarea,\ninput[type=\"text\"],\ninput[type=\"password\"],\ninput[type=\"datetime\"],\ninput[type=\"datetime-local\"],\ninput[type=\"date\"],\ninput[type=\"month\"],\ninput[type=\"time\"],\ninput[type=\"week\"],\ninput[type=\"number\"],\ninput[type=\"email\"],\ninput[type=\"url\"],\ninput[type=\"search\"],\ninput[type=\"tel\"],\ninput[type=\"color\"] {\n  border: 0; }\n\ninput[type=\"radio\"],\ninput[type=\"checkbox\"] {\n  margin: 0;\n  line-height: normal; }\n\n.item-input input[type=\"file\"],\n.item-input input[type=\"image\"],\n.item-input input[type=\"submit\"],\n.item-input input[type=\"reset\"],\n.item-input input[type=\"button\"],\n.item-input input[type=\"radio\"],\n.item-input input[type=\"checkbox\"] {\n  width: auto; }\n\ninput[type=\"file\"] {\n  line-height: 34px; }\n\n.previous-input-focus,\n.cloned-text-input + input,\n.cloned-text-input + textarea {\n  position: absolute !important;\n  left: -9999px;\n  width: 200px; }\n\ninput::-moz-placeholder,\ntextarea::-moz-placeholder {\n  color: #aaaaaa; }\n\ninput:-ms-input-placeholder,\ntextarea:-ms-input-placeholder {\n  color: #aaaaaa; }\n\ninput::-webkit-input-placeholder,\ntextarea::-webkit-input-placeholder {\n  color: #aaaaaa;\n  text-indent: 0; }\n\ninput[disabled],\nselect[disabled],\ntextarea[disabled],\ninput[readonly]:not(.cloned-text-input),\ntextarea[readonly]:not(.cloned-text-input),\nselect[readonly] {\n  background-color: #f8f8f8;\n  cursor: not-allowed; }\n\ninput[type=\"radio\"][disabled],\ninput[type=\"checkbox\"][disabled],\ninput[type=\"radio\"][readonly],\ninput[type=\"checkbox\"][readonly] {\n  background-color: transparent; }\n\n/**\n * Checkbox\n * --------------------------------------------------\n */\n.checkbox {\n  position: relative;\n  display: inline-block;\n  padding: 7px 7px;\n  cursor: pointer; }\n  .checkbox input:before,\n  .checkbox .checkbox-icon:before {\n    border-color: #ddd; }\n  .checkbox input:checked:before,\n  .checkbox input:checked + .checkbox-icon:before {\n    background: #387ef5;\n    border-color: #387ef5; }\n\n.checkbox-light input:before,\n.checkbox-light .checkbox-icon:before {\n  border-color: #ddd; }\n\n.checkbox-light input:checked:before,\n.checkbox-light input:checked + .checkbox-icon:before {\n  background: #ddd;\n  border-color: #ddd; }\n\n.checkbox-stable input:before,\n.checkbox-stable .checkbox-icon:before {\n  border-color: #b2b2b2; }\n\n.checkbox-stable input:checked:before,\n.checkbox-stable input:checked + .checkbox-icon:before {\n  background: #b2b2b2;\n  border-color: #b2b2b2; }\n\n.checkbox-positive input:before,\n.checkbox-positive .checkbox-icon:before {\n  border-color: #387ef5; }\n\n.checkbox-positive input:checked:before,\n.checkbox-positive input:checked + .checkbox-icon:before {\n  background: #387ef5;\n  border-color: #387ef5; }\n\n.checkbox-calm input:before,\n.checkbox-calm .checkbox-icon:before {\n  border-color: #11c1f3; }\n\n.checkbox-calm input:checked:before,\n.checkbox-calm input:checked + .checkbox-icon:before {\n  background: #11c1f3;\n  border-color: #11c1f3; }\n\n.checkbox-assertive input:before,\n.checkbox-assertive .checkbox-icon:before {\n  border-color: #ef473a; }\n\n.checkbox-assertive input:checked:before,\n.checkbox-assertive input:checked + .checkbox-icon:before {\n  background: #ef473a;\n  border-color: #ef473a; }\n\n.checkbox-balanced input:before,\n.checkbox-balanced .checkbox-icon:before {\n  border-color: #33cd5f; }\n\n.checkbox-balanced input:checked:before,\n.checkbox-balanced input:checked + .checkbox-icon:before {\n  background: #33cd5f;\n  border-color: #33cd5f; }\n\n.checkbox-energized input:before,\n.checkbox-energized .checkbox-icon:before {\n  border-color: #ffc900; }\n\n.checkbox-energized input:checked:before,\n.checkbox-energized input:checked + .checkbox-icon:before {\n  background: #ffc900;\n  border-color: #ffc900; }\n\n.checkbox-royal input:before,\n.checkbox-royal .checkbox-icon:before {\n  border-color: #886aea; }\n\n.checkbox-royal input:checked:before,\n.checkbox-royal input:checked + .checkbox-icon:before {\n  background: #886aea;\n  border-color: #886aea; }\n\n.checkbox-dark input:before,\n.checkbox-dark .checkbox-icon:before {\n  border-color: #444; }\n\n.checkbox-dark input:checked:before,\n.checkbox-dark input:checked + .checkbox-icon:before {\n  background: #444;\n  border-color: #444; }\n\n.checkbox input:disabled:before,\n.checkbox input:disabled + .checkbox-icon:before {\n  border-color: #ddd; }\n\n.checkbox input:disabled:checked:before,\n.checkbox input:disabled:checked + .checkbox-icon:before {\n  background: #ddd; }\n\n.checkbox.checkbox-input-hidden input {\n  display: none !important; }\n\n.checkbox input,\n.checkbox-icon {\n  position: relative;\n  width: 28px;\n  height: 28px;\n  display: block;\n  border: 0;\n  background: transparent;\n  cursor: pointer;\n  -webkit-appearance: none; }\n  .checkbox input:before,\n  .checkbox-icon:before {\n    display: table;\n    width: 100%;\n    height: 100%;\n    border-width: 1px;\n    border-style: solid;\n    border-radius: 28px;\n    background: #fff;\n    content: ' ';\n    -webkit-transition: background-color 20ms ease-in-out;\n    transition: background-color 20ms ease-in-out; }\n\n.checkbox input:checked:before,\ninput:checked + .checkbox-icon:before {\n  border-width: 2px; }\n\n.checkbox input:after,\n.checkbox-icon:after {\n  -webkit-transition: opacity 0.05s ease-in-out;\n  transition: opacity 0.05s ease-in-out;\n  -webkit-transform: rotate(-45deg);\n  transform: rotate(-45deg);\n  position: absolute;\n  top: 33%;\n  left: 25%;\n  display: table;\n  width: 14px;\n  height: 6px;\n  border: 1px solid #fff;\n  border-top: 0;\n  border-right: 0;\n  content: ' ';\n  opacity: 0; }\n\n.platform-android .checkbox-platform input:before,\n.platform-android .checkbox-platform .checkbox-icon:before,\n.checkbox-square input:before,\n.checkbox-square .checkbox-icon:before {\n  border-radius: 2px;\n  width: 72%;\n  height: 72%;\n  margin-top: 14%;\n  margin-left: 14%;\n  border-width: 2px; }\n\n.platform-android .checkbox-platform input:after,\n.platform-android .checkbox-platform .checkbox-icon:after,\n.checkbox-square input:after,\n.checkbox-square .checkbox-icon:after {\n  border-width: 2px;\n  top: 19%;\n  left: 25%;\n  width: 13px;\n  height: 7px; }\n\n.grade-c .checkbox input:after,\n.grade-c .checkbox-icon:after {\n  -webkit-transform: rotate(0);\n  transform: rotate(0);\n  top: 3px;\n  left: 4px;\n  border: none;\n  color: #fff;\n  content: '\\2713';\n  font-weight: bold;\n  font-size: 20px; }\n\n.checkbox input:checked:after,\ninput:checked + .checkbox-icon:after {\n  opacity: 1; }\n\n.item-checkbox {\n  padding-left: 60px; }\n  .item-checkbox.active {\n    box-shadow: none; }\n\n.item-checkbox .checkbox {\n  position: absolute;\n  top: 50%;\n  right: 8px;\n  left: 8px;\n  z-index: 3;\n  margin-top: -21px; }\n\n.item-checkbox.item-checkbox-right {\n  padding-right: 60px;\n  padding-left: 16px; }\n\n.item-checkbox-right .checkbox input,\n.item-checkbox-right .checkbox-icon {\n  float: right; }\n\n/**\n * Toggle\n * --------------------------------------------------\n */\n.item-toggle {\n  pointer-events: none; }\n\n.toggle {\n  position: relative;\n  display: inline-block;\n  pointer-events: auto;\n  margin: -5px;\n  padding: 5px; }\n  .toggle input:checked + .track {\n    border-color: #4cd964;\n    background-color: #4cd964; }\n  .toggle.dragging .handle {\n    background-color: #f2f2f2 !important; }\n\n.toggle.toggle-light input:checked + .track {\n  border-color: #ddd;\n  background-color: #ddd; }\n\n.toggle.toggle-stable input:checked + .track {\n  border-color: #b2b2b2;\n  background-color: #b2b2b2; }\n\n.toggle.toggle-positive input:checked + .track {\n  border-color: #387ef5;\n  background-color: #387ef5; }\n\n.toggle.toggle-calm input:checked + .track {\n  border-color: #11c1f3;\n  background-color: #11c1f3; }\n\n.toggle.toggle-assertive input:checked + .track {\n  border-color: #ef473a;\n  background-color: #ef473a; }\n\n.toggle.toggle-balanced input:checked + .track {\n  border-color: #33cd5f;\n  background-color: #33cd5f; }\n\n.toggle.toggle-energized input:checked + .track {\n  border-color: #ffc900;\n  background-color: #ffc900; }\n\n.toggle.toggle-royal input:checked + .track {\n  border-color: #886aea;\n  background-color: #886aea; }\n\n.toggle.toggle-dark input:checked + .track {\n  border-color: #444;\n  background-color: #444; }\n\n.toggle input {\n  display: none; }\n\n/* the track appearance when the toggle is \"off\" */\n.toggle .track {\n  -webkit-transition-timing-function: ease-in-out;\n  transition-timing-function: ease-in-out;\n  -webkit-transition-duration: 0.3s;\n  transition-duration: 0.3s;\n  -webkit-transition-property: background-color, border;\n  transition-property: background-color, border;\n  display: inline-block;\n  box-sizing: border-box;\n  width: 51px;\n  height: 31px;\n  border: solid 2px #e6e6e6;\n  border-radius: 20px;\n  background-color: #fff;\n  content: ' ';\n  cursor: pointer;\n  pointer-events: none; }\n\n/* Fix to avoid background color bleeding */\n/* (occured on (at least) Android 4.2, Asus MeMO Pad HD7 ME173X) */\n.platform-android4_2 .toggle .track {\n  -webkit-background-clip: padding-box; }\n\n/* the handle (circle) thats inside the toggle's track area */\n/* also the handle's appearance when it is \"off\" */\n.toggle .handle {\n  -webkit-transition: 0.3s cubic-bezier(0, 1.1, 1, 1.1);\n  transition: 0.3s cubic-bezier(0, 1.1, 1, 1.1);\n  -webkit-transition-property: background-color, transform;\n  transition-property: background-color, transform;\n  position: absolute;\n  display: block;\n  width: 27px;\n  height: 27px;\n  border-radius: 27px;\n  background-color: #fff;\n  top: 7px;\n  left: 7px;\n  box-shadow: 0 2px 7px rgba(0, 0, 0, 0.35), 0 1px 1px rgba(0, 0, 0, 0.15); }\n  .toggle .handle:before {\n    position: absolute;\n    top: -4px;\n    left: -21.5px;\n    padding: 18.5px 34px;\n    content: \" \"; }\n\n.toggle input:checked + .track .handle {\n  -webkit-transform: translate3d(20px, 0, 0);\n  transform: translate3d(20px, 0, 0);\n  background-color: #fff; }\n\n.item-toggle.active {\n  box-shadow: none; }\n\n.item-toggle,\n.item-toggle.item-complex .item-content {\n  padding-right: 99px; }\n\n.item-toggle.item-complex {\n  padding-right: 0; }\n\n.item-toggle .toggle {\n  position: absolute;\n  top: 10px;\n  right: 16px;\n  z-index: 3; }\n\n.toggle input:disabled + .track {\n  opacity: .6; }\n\n.toggle-small .track {\n  border: 0;\n  width: 34px;\n  height: 15px;\n  background: #9e9e9e; }\n\n.toggle-small input:checked + .track {\n  background: rgba(0, 150, 137, 0.5); }\n\n.toggle-small .handle {\n  top: 2px;\n  left: 4px;\n  width: 21px;\n  height: 21px;\n  box-shadow: 0 2px 5px rgba(0, 0, 0, 0.25); }\n\n.toggle-small input:checked + .track .handle {\n  -webkit-transform: translate3d(16px, 0, 0);\n  transform: translate3d(16px, 0, 0);\n  background: #009689; }\n\n.toggle-small.item-toggle .toggle {\n  top: 19px; }\n\n.toggle-small .toggle-light input:checked + .track {\n  background-color: rgba(221, 221, 221, 0.5); }\n\n.toggle-small .toggle-light input:checked + .track .handle {\n  background-color: #ddd; }\n\n.toggle-small .toggle-stable input:checked + .track {\n  background-color: rgba(178, 178, 178, 0.5); }\n\n.toggle-small .toggle-stable input:checked + .track .handle {\n  background-color: #b2b2b2; }\n\n.toggle-small .toggle-positive input:checked + .track {\n  background-color: rgba(56, 126, 245, 0.5); }\n\n.toggle-small .toggle-positive input:checked + .track .handle {\n  background-color: #387ef5; }\n\n.toggle-small .toggle-calm input:checked + .track {\n  background-color: rgba(17, 193, 243, 0.5); }\n\n.toggle-small .toggle-calm input:checked + .track .handle {\n  background-color: #11c1f3; }\n\n.toggle-small .toggle-assertive input:checked + .track {\n  background-color: rgba(239, 71, 58, 0.5); }\n\n.toggle-small .toggle-assertive input:checked + .track .handle {\n  background-color: #ef473a; }\n\n.toggle-small .toggle-balanced input:checked + .track {\n  background-color: rgba(51, 205, 95, 0.5); }\n\n.toggle-small .toggle-balanced input:checked + .track .handle {\n  background-color: #33cd5f; }\n\n.toggle-small .toggle-energized input:checked + .track {\n  background-color: rgba(255, 201, 0, 0.5); }\n\n.toggle-small .toggle-energized input:checked + .track .handle {\n  background-color: #ffc900; }\n\n.toggle-small .toggle-royal input:checked + .track {\n  background-color: rgba(136, 106, 234, 0.5); }\n\n.toggle-small .toggle-royal input:checked + .track .handle {\n  background-color: #886aea; }\n\n.toggle-small .toggle-dark input:checked + .track {\n  background-color: rgba(68, 68, 68, 0.5); }\n\n.toggle-small .toggle-dark input:checked + .track .handle {\n  background-color: #444; }\n\n/**\n * Radio Button Inputs\n * --------------------------------------------------\n */\n.item-radio {\n  padding: 0; }\n  .item-radio:hover {\n    cursor: pointer; }\n\n.item-radio .item-content {\n  /* give some room to the right for the checkmark icon */\n  padding-right: 64px; }\n\n.item-radio .radio-icon {\n  /* checkmark icon will be hidden by default */\n  position: absolute;\n  top: 0;\n  right: 0;\n  z-index: 3;\n  visibility: hidden;\n  padding: 14px;\n  height: 100%;\n  font-size: 24px; }\n\n.item-radio input {\n  /* hide any radio button inputs elements (the ugly circles) */\n  position: absolute;\n  left: -9999px; }\n  .item-radio input:checked + .radio-content .item-content {\n    /* style the item content when its checked */\n    background: #f7f7f7; }\n  .item-radio input:checked + .radio-content .radio-icon {\n    /* show the checkmark icon when its checked */\n    visibility: visible; }\n\n/**\n * Range\n * --------------------------------------------------\n */\n.range input {\n  display: inline-block;\n  overflow: hidden;\n  margin-top: 5px;\n  margin-bottom: 5px;\n  padding-right: 2px;\n  padding-left: 1px;\n  width: auto;\n  height: 43px;\n  outline: none;\n  background: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #ccc), color-stop(100%, #ccc));\n  background: linear-gradient(to right, #ccc 0%, #ccc 100%);\n  background-position: center;\n  background-size: 99% 2px;\n  background-repeat: no-repeat;\n  -webkit-appearance: none; }\n  .range input::-webkit-slider-thumb {\n    position: relative;\n    width: 28px;\n    height: 28px;\n    border-radius: 50%;\n    background-color: #fff;\n    box-shadow: 0 0 2px rgba(0, 0, 0, 0.3), 0 3px 5px rgba(0, 0, 0, 0.2);\n    cursor: pointer;\n    -webkit-appearance: none;\n    border: 0; }\n  .range input::-webkit-slider-thumb:before {\n    /* what creates the colorful line on the left side of the slider */\n    position: absolute;\n    top: 13px;\n    left: -2001px;\n    width: 2000px;\n    height: 2px;\n    background: #444;\n    content: ' '; }\n  .range input::-webkit-slider-thumb:after {\n    /* create a larger (but hidden) hit area */\n    position: absolute;\n    top: -15px;\n    left: -15px;\n    padding: 30px;\n    content: ' '; }\n  .range input::-ms-track {\n    background: transparent;\n    border-color: transparent;\n    border-width: 11px 0 16px;\n    color: transparent;\n    margin-top: 20px; }\n  .range input::-ms-thumb {\n    width: 28px;\n    height: 28px;\n    border-radius: 50%;\n    background-color: #fff;\n    border-color: #fff;\n    box-shadow: 0 0 2px rgba(0, 0, 0, 0.3), 0 3px 5px rgba(0, 0, 0, 0.2);\n    margin-left: 1px;\n    margin-right: 1px;\n    outline: none; }\n  .range input::-ms-fill-lower {\n    height: 2px;\n    background: #444; }\n  .range input::-ms-fill-upper {\n    height: 2px;\n    background: #ccc; }\n\n.range {\n  display: -webkit-box;\n  display: -webkit-flex;\n  display: -moz-box;\n  display: -moz-flex;\n  display: -ms-flexbox;\n  display: flex;\n  -webkit-box-align: center;\n  -ms-flex-align: center;\n  -webkit-align-items: center;\n  -moz-align-items: center;\n  align-items: center;\n  padding: 2px 11px; }\n  .range.range-light input::-webkit-slider-thumb:before {\n    background: #ddd; }\n  .range.range-light input::-ms-fill-lower {\n    background: #ddd; }\n  .range.range-stable input::-webkit-slider-thumb:before {\n    background: #b2b2b2; }\n  .range.range-stable input::-ms-fill-lower {\n    background: #b2b2b2; }\n  .range.range-positive input::-webkit-slider-thumb:before {\n    background: #387ef5; }\n  .range.range-positive input::-ms-fill-lower {\n    background: #387ef5; }\n  .range.range-calm input::-webkit-slider-thumb:before {\n    background: #11c1f3; }\n  .range.range-calm input::-ms-fill-lower {\n    background: #11c1f3; }\n  .range.range-balanced input::-webkit-slider-thumb:before {\n    background: #33cd5f; }\n  .range.range-balanced input::-ms-fill-lower {\n    background: #33cd5f; }\n  .range.range-assertive input::-webkit-slider-thumb:before {\n    background: #ef473a; }\n  .range.range-assertive input::-ms-fill-lower {\n    background: #ef473a; }\n  .range.range-energized input::-webkit-slider-thumb:before {\n    background: #ffc900; }\n  .range.range-energized input::-ms-fill-lower {\n    background: #ffc900; }\n  .range.range-royal input::-webkit-slider-thumb:before {\n    background: #886aea; }\n  .range.range-royal input::-ms-fill-lower {\n    background: #886aea; }\n  .range.range-dark input::-webkit-slider-thumb:before {\n    background: #444; }\n  .range.range-dark input::-ms-fill-lower {\n    background: #444; }\n\n.range .icon {\n  -webkit-box-flex: 0;\n  -webkit-flex: 0;\n  -moz-box-flex: 0;\n  -moz-flex: 0;\n  -ms-flex: 0;\n  flex: 0;\n  display: block;\n  min-width: 24px;\n  text-align: center;\n  font-size: 24px; }\n\n.range input {\n  -webkit-box-flex: 1;\n  -webkit-flex: 1;\n  -moz-box-flex: 1;\n  -moz-flex: 1;\n  -ms-flex: 1;\n  flex: 1;\n  display: block;\n  margin-right: 10px;\n  margin-left: 10px; }\n\n.range-label {\n  -webkit-box-flex: 0;\n  -webkit-flex: 0 0 auto;\n  -moz-box-flex: 0;\n  -moz-flex: 0 0 auto;\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  display: block;\n  white-space: nowrap; }\n\n.range-label:first-child {\n  padding-left: 5px; }\n\n.range input + .range-label {\n  padding-right: 5px;\n  padding-left: 0; }\n\n.platform-windowsphone .range input {\n  height: auto; }\n\n/**\n * Select\n * --------------------------------------------------\n */\n.item-select {\n  position: relative; }\n  .item-select select {\n    -webkit-appearance: none;\n    -moz-appearance: none;\n    appearance: none;\n    position: absolute;\n    top: 0;\n    bottom: 0;\n    right: 0;\n    padding: 0 48px 0 16px;\n    max-width: 65%;\n    border: none;\n    background: #fff;\n    color: #333;\n    text-indent: .01px;\n    text-overflow: '';\n    white-space: nowrap;\n    font-size: 14px;\n    cursor: pointer;\n    direction: rtl; }\n  .item-select select::-ms-expand {\n    display: none; }\n  .item-select option {\n    direction: ltr; }\n  .item-select:after {\n    position: absolute;\n    top: 50%;\n    right: 16px;\n    margin-top: -3px;\n    width: 0;\n    height: 0;\n    border-top: 5px solid;\n    border-right: 5px solid transparent;\n    border-left: 5px solid transparent;\n    color: #999;\n    content: \"\";\n    pointer-events: none; }\n  .item-select.item-light select {\n    background: #fff;\n    color: #444; }\n  .item-select.item-stable select {\n    background: #f8f8f8;\n    color: #444; }\n  .item-select.item-stable:after, .item-select.item-stable .input-label {\n    color: #656565; }\n  .item-select.item-positive select {\n    background: #387ef5;\n    color: #fff; }\n  .item-select.item-positive:after, .item-select.item-positive .input-label {\n    color: #fff; }\n  .item-select.item-calm select {\n    background: #11c1f3;\n    color: #fff; }\n  .item-select.item-calm:after, .item-select.item-calm .input-label {\n    color: #fff; }\n  .item-select.item-assertive select {\n    background: #ef473a;\n    color: #fff; }\n  .item-select.item-assertive:after, .item-select.item-assertive .input-label {\n    color: #fff; }\n  .item-select.item-balanced select {\n    background: #33cd5f;\n    color: #fff; }\n  .item-select.item-balanced:after, .item-select.item-balanced .input-label {\n    color: #fff; }\n  .item-select.item-energized select {\n    background: #ffc900;\n    color: #fff; }\n  .item-select.item-energized:after, .item-select.item-energized .input-label {\n    color: #fff; }\n  .item-select.item-royal select {\n    background: #886aea;\n    color: #fff; }\n  .item-select.item-royal:after, .item-select.item-royal .input-label {\n    color: #fff; }\n  .item-select.item-dark select {\n    background: #444;\n    color: #fff; }\n  .item-select.item-dark:after, .item-select.item-dark .input-label {\n    color: #fff; }\n\nselect[multiple],\nselect[size] {\n  height: auto; }\n\n/**\n * Progress\n * --------------------------------------------------\n */\nprogress {\n  display: block;\n  margin: 15px auto;\n  width: 100%; }\n\n/**\n * Buttons\n * --------------------------------------------------\n */\n.button {\n  border-color: #b2b2b2;\n  background-color: #f8f8f8;\n  color: #444;\n  position: relative;\n  display: inline-block;\n  margin: 0;\n  padding: 0 12px;\n  min-width: 52px;\n  min-height: 47px;\n  border-width: 1px;\n  border-style: solid;\n  border-radius: 2px;\n  vertical-align: top;\n  text-align: center;\n  text-overflow: ellipsis;\n  font-size: 16px;\n  line-height: 42px;\n  cursor: pointer; }\n  .button:hover {\n    color: #444;\n    text-decoration: none; }\n  .button.active,\n  .button.activated {\n    border-color: #a2a2a2;\n    background-color: #e5e5e5;\n    box-shadow: inset 0 1px 4px rgba(0, 0, 0, 0.1); }\n  .button:after {\n    position: absolute;\n    top: -6px;\n    right: -6px;\n    bottom: -6px;\n    left: -6px;\n    content: ' '; }\n  .button .icon {\n    vertical-align: top;\n    pointer-events: none; }\n  .button .icon:before,\n  .button.icon:before,\n  .button.icon-left:before,\n  .button.icon-right:before {\n    display: inline-block;\n    padding: 0 0 1px 0;\n    vertical-align: inherit;\n    font-size: 24px;\n    line-height: 41px;\n    pointer-events: none; }\n  .button.icon-left:before {\n    float: left;\n    padding-right: .2em;\n    padding-left: 0; }\n  .button.icon-right:before {\n    float: right;\n    padding-right: 0;\n    padding-left: .2em; }\n  .button.button-block, .button.button-full {\n    margin-top: 10px;\n    margin-bottom: 10px; }\n  .button.button-light {\n    border-color: #ddd;\n    background-color: #fff;\n    color: #444; }\n    .button.button-light:hover {\n      color: #444;\n      text-decoration: none; }\n    .button.button-light.active,\n    .button.button-light.activated {\n      border-color: #ccc;\n      background-color: #fafafa;\n      box-shadow: inset 0 1px 4px rgba(0, 0, 0, 0.1); }\n    .button.button-light.button-clear {\n      border-color: transparent;\n      background: none;\n      box-shadow: none;\n      color: #ddd; }\n    .button.button-light.button-icon {\n      border-color: transparent;\n      background: none; }\n    .button.button-light.button-outline {\n      border-color: #ddd;\n      background: transparent;\n      color: #ddd; }\n      .button.button-light.button-outline.active,\n      .button.button-light.button-outline.activated {\n        background-color: #ddd;\n        box-shadow: none;\n        color: #fff; }\n  .button.button-stable {\n    border-color: #b2b2b2;\n    background-color: #f8f8f8;\n    color: #444; }\n    .button.button-stable:hover {\n      color: #444;\n      text-decoration: none; }\n    .button.button-stable.active,\n    .button.button-stable.activated {\n      border-color: #a2a2a2;\n      background-color: #e5e5e5;\n      box-shadow: inset 0 1px 4px rgba(0, 0, 0, 0.1); }\n    .button.button-stable.button-clear {\n      border-color: transparent;\n      background: none;\n      box-shadow: none;\n      color: #b2b2b2; }\n    .button.button-stable.button-icon {\n      border-color: transparent;\n      background: none; }\n    .button.button-stable.button-outline {\n      border-color: #b2b2b2;\n      background: transparent;\n      color: #b2b2b2; }\n      .button.button-stable.button-outline.active,\n      .button.button-stable.button-outline.activated {\n        background-color: #b2b2b2;\n        box-shadow: none;\n        color: #fff; }\n  .button.button-positive {\n    border-color: #0c60ee;\n    background-color: #387ef5;\n    color: #fff; }\n    .button.button-positive:hover {\n      color: #fff;\n      text-decoration: none; }\n    .button.button-positive.active,\n    .button.button-positive.activated {\n      border-color: #0c60ee;\n      background-color: #0c60ee;\n      box-shadow: inset 0 1px 4px rgba(0, 0, 0, 0.1); }\n    .button.button-positive.button-clear {\n      border-color: transparent;\n      background: none;\n      box-shadow: none;\n      color: #387ef5; }\n    .button.button-positive.button-icon {\n      border-color: transparent;\n      background: none; }\n    .button.button-positive.button-outline {\n      border-color: #387ef5;\n      background: transparent;\n      color: #387ef5; }\n      .button.button-positive.button-outline.active,\n      .button.button-positive.button-outline.activated {\n        background-color: #387ef5;\n        box-shadow: none;\n        color: #fff; }\n  .button.button-calm {\n    border-color: #0a9dc7;\n    background-color: #11c1f3;\n    color: #fff; }\n    .button.button-calm:hover {\n      color: #fff;\n      text-decoration: none; }\n    .button.button-calm.active,\n    .button.button-calm.activated {\n      border-color: #0a9dc7;\n      background-color: #0a9dc7;\n      box-shadow: inset 0 1px 4px rgba(0, 0, 0, 0.1); }\n    .button.button-calm.button-clear {\n      border-color: transparent;\n      background: none;\n      box-shadow: none;\n      color: #11c1f3; }\n    .button.button-calm.button-icon {\n      border-color: transparent;\n      background: none; }\n    .button.button-calm.button-outline {\n      border-color: #11c1f3;\n      background: transparent;\n      color: #11c1f3; }\n      .button.button-calm.button-outline.active,\n      .button.button-calm.button-outline.activated {\n        background-color: #11c1f3;\n        box-shadow: none;\n        color: #fff; }\n  .button.button-assertive {\n    border-color: #e42112;\n    background-color: #ef473a;\n    color: #fff; }\n    .button.button-assertive:hover {\n      color: #fff;\n      text-decoration: none; }\n    .button.button-assertive.active,\n    .button.button-assertive.activated {\n      border-color: #e42112;\n      background-color: #e42112;\n      box-shadow: inset 0 1px 4px rgba(0, 0, 0, 0.1); }\n    .button.button-assertive.button-clear {\n      border-color: transparent;\n      background: none;\n      box-shadow: none;\n      color: #ef473a; }\n    .button.button-assertive.button-icon {\n      border-color: transparent;\n      background: none; }\n    .button.button-assertive.button-outline {\n      border-color: #ef473a;\n      background: transparent;\n      color: #ef473a; }\n      .button.button-assertive.button-outline.active,\n      .button.button-assertive.button-outline.activated {\n        background-color: #ef473a;\n        box-shadow: none;\n        color: #fff; }\n  .button.button-balanced {\n    border-color: #28a54c;\n    background-color: #33cd5f;\n    color: #fff; }\n    .button.button-balanced:hover {\n      color: #fff;\n      text-decoration: none; }\n    .button.button-balanced.active,\n    .button.button-balanced.activated {\n      border-color: #28a54c;\n      background-color: #28a54c;\n      box-shadow: inset 0 1px 4px rgba(0, 0, 0, 0.1); }\n    .button.button-balanced.button-clear {\n      border-color: transparent;\n      background: none;\n      box-shadow: none;\n      color: #33cd5f; }\n    .button.button-balanced.button-icon {\n      border-color: transparent;\n      background: none; }\n    .button.button-balanced.button-outline {\n      border-color: #33cd5f;\n      background: transparent;\n      color: #33cd5f; }\n      .button.button-balanced.button-outline.active,\n      .button.button-balanced.button-outline.activated {\n        background-color: #33cd5f;\n        box-shadow: none;\n        color: #fff; }\n  .button.button-energized {\n    border-color: #e6b500;\n    background-color: #ffc900;\n    color: #fff; }\n    .button.button-energized:hover {\n      color: #fff;\n      text-decoration: none; }\n    .button.button-energized.active,\n    .button.button-energized.activated {\n      border-color: #e6b500;\n      background-color: #e6b500;\n      box-shadow: inset 0 1px 4px rgba(0, 0, 0, 0.1); }\n    .button.button-energized.button-clear {\n      border-color: transparent;\n      background: none;\n      box-shadow: none;\n      color: #ffc900; }\n    .button.button-energized.button-icon {\n      border-color: transparent;\n      background: none; }\n    .button.button-energized.button-outline {\n      border-color: #ffc900;\n      background: transparent;\n      color: #ffc900; }\n      .button.button-energized.button-outline.active,\n      .button.button-energized.button-outline.activated {\n        background-color: #ffc900;\n        box-shadow: none;\n        color: #fff; }\n  .button.button-royal {\n    border-color: #6b46e5;\n    background-color: #886aea;\n    color: #fff; }\n    .button.button-royal:hover {\n      color: #fff;\n      text-decoration: none; }\n    .button.button-royal.active,\n    .button.button-royal.activated {\n      border-color: #6b46e5;\n      background-color: #6b46e5;\n      box-shadow: inset 0 1px 4px rgba(0, 0, 0, 0.1); }\n    .button.button-royal.button-clear {\n      border-color: transparent;\n      background: none;\n      box-shadow: none;\n      color: #886aea; }\n    .button.button-royal.button-icon {\n      border-color: transparent;\n      background: none; }\n    .button.button-royal.button-outline {\n      border-color: #886aea;\n      background: transparent;\n      color: #886aea; }\n      .button.button-royal.button-outline.active,\n      .button.button-royal.button-outline.activated {\n        background-color: #886aea;\n        box-shadow: none;\n        color: #fff; }\n  .button.button-dark {\n    border-color: #111;\n    background-color: #444;\n    color: #fff; }\n    .button.button-dark:hover {\n      color: #fff;\n      text-decoration: none; }\n    .button.button-dark.active,\n    .button.button-dark.activated {\n      border-color: #000;\n      background-color: #262626;\n      box-shadow: inset 0 1px 4px rgba(0, 0, 0, 0.1); }\n    .button.button-dark.button-clear {\n      border-color: transparent;\n      background: none;\n      box-shadow: none;\n      color: #444; }\n    .button.button-dark.button-icon {\n      border-color: transparent;\n      background: none; }\n    .button.button-dark.button-outline {\n      border-color: #444;\n      background: transparent;\n      color: #444; }\n      .button.button-dark.button-outline.active,\n      .button.button-dark.button-outline.activated {\n        background-color: #444;\n        box-shadow: none;\n        color: #fff; }\n\n.button-small {\n  padding: 2px 4px 1px;\n  min-width: 28px;\n  min-height: 30px;\n  font-size: 12px;\n  line-height: 26px; }\n  .button-small .icon:before,\n  .button-small.icon:before,\n  .button-small.icon-left:before,\n  .button-small.icon-right:before {\n    font-size: 16px;\n    line-height: 19px;\n    margin-top: 3px; }\n\n.button-large {\n  padding: 0 16px;\n  min-width: 68px;\n  min-height: 59px;\n  font-size: 20px;\n  line-height: 53px; }\n  .button-large .icon:before,\n  .button-large.icon:before,\n  .button-large.icon-left:before,\n  .button-large.icon-right:before {\n    padding-bottom: 2px;\n    font-size: 32px;\n    line-height: 51px; }\n\n.button-icon {\n  -webkit-transition: opacity 0.1s;\n  transition: opacity 0.1s;\n  padding: 0 6px;\n  min-width: initial;\n  border-color: transparent;\n  background: none; }\n  .button-icon.button.active,\n  .button-icon.button.activated {\n    border-color: transparent;\n    background: none;\n    box-shadow: none;\n    opacity: 0.3; }\n  .button-icon .icon:before,\n  .button-icon.icon:before {\n    font-size: 32px; }\n\n.button-clear {\n  -webkit-transition: opacity 0.1s;\n  transition: opacity 0.1s;\n  padding: 0 6px;\n  max-height: 42px;\n  border-color: transparent;\n  background: none;\n  box-shadow: none; }\n  .button-clear.button-clear {\n    border-color: transparent;\n    background: none;\n    box-shadow: none;\n    color: #b2b2b2; }\n  .button-clear.button-icon {\n    border-color: transparent;\n    background: none; }\n  .button-clear.active,\n  .button-clear.activated {\n    opacity: 0.3; }\n\n.button-outline {\n  -webkit-transition: opacity 0.1s;\n  transition: opacity 0.1s;\n  background: none;\n  box-shadow: none; }\n  .button-outline.button-outline {\n    border-color: #b2b2b2;\n    background: transparent;\n    color: #b2b2b2; }\n    .button-outline.button-outline.active,\n    .button-outline.button-outline.activated {\n      background-color: #b2b2b2;\n      box-shadow: none;\n      color: #fff; }\n\n.padding > .button.button-block:first-child {\n  margin-top: 0; }\n\n.button-block {\n  display: block;\n  clear: both; }\n  .button-block:after {\n    clear: both; }\n\n.button-full,\n.button-full > .button {\n  display: block;\n  margin-right: 0;\n  margin-left: 0;\n  border-right-width: 0;\n  border-left-width: 0;\n  border-radius: 0; }\n\nbutton.button-block,\nbutton.button-full,\n.button-full > button.button,\ninput.button.button-block {\n  width: 100%; }\n\na.button {\n  text-decoration: none; }\n  a.button .icon:before,\n  a.button.icon:before,\n  a.button.icon-left:before,\n  a.button.icon-right:before {\n    margin-top: 2px; }\n\n.button.disabled,\n.button[disabled] {\n  opacity: .4;\n  cursor: default !important;\n  pointer-events: none; }\n\n/**\n * Button Bar\n * --------------------------------------------------\n */\n.button-bar {\n  display: -webkit-box;\n  display: -webkit-flex;\n  display: -moz-box;\n  display: -moz-flex;\n  display: -ms-flexbox;\n  display: flex;\n  -webkit-box-flex: 1;\n  -webkit-flex: 1;\n  -moz-box-flex: 1;\n  -moz-flex: 1;\n  -ms-flex: 1;\n  flex: 1;\n  width: 100%; }\n  .button-bar.button-bar-inline {\n    display: block;\n    width: auto;\n    *zoom: 1; }\n    .button-bar.button-bar-inline:before,\n    .button-bar.button-bar-inline:after {\n      display: table;\n      content: \"\";\n      line-height: 0; }\n    .button-bar.button-bar-inline:after {\n      clear: both; }\n    .button-bar.button-bar-inline > .button {\n      width: auto;\n      display: inline-block;\n      float: left; }\n\n.button-bar > .button {\n  -webkit-box-flex: 1;\n  -webkit-flex: 1;\n  -moz-box-flex: 1;\n  -moz-flex: 1;\n  -ms-flex: 1;\n  flex: 1;\n  display: block;\n  overflow: hidden;\n  padding: 0 16px;\n  width: 0;\n  border-width: 1px 0px 1px 1px;\n  border-radius: 0;\n  text-align: center;\n  text-overflow: ellipsis;\n  white-space: nowrap; }\n  .button-bar > .button:before,\n  .button-bar > .button .icon:before {\n    line-height: 44px; }\n  .button-bar > .button:first-child {\n    border-radius: 2px 0px 0px 2px; }\n  .button-bar > .button:last-child {\n    border-right-width: 1px;\n    border-radius: 0px 2px 2px 0px; }\n\n.button-bar > .button-small:before,\n.button-bar > .button-small .icon:before {\n  line-height: 28px; }\n\n/**\n * Grid\n * --------------------------------------------------\n * Using flexbox for the grid, inspired by Philip Walton:\n * http://philipwalton.github.io/solved-by-flexbox/demos/grids/\n * By default each .col within a .row will evenly take up\n * available width, and the height of each .col with take\n * up the height of the tallest .col in the same .row.\n */\n.row {\n  display: -webkit-box;\n  display: -webkit-flex;\n  display: -moz-box;\n  display: -moz-flex;\n  display: -ms-flexbox;\n  display: flex;\n  padding: 5px;\n  width: 100%; }\n\n.row-wrap {\n  -webkit-flex-wrap: wrap;\n  -moz-flex-wrap: wrap;\n  -ms-flex-wrap: wrap;\n  flex-wrap: wrap; }\n\n.row-no-padding {\n  padding: 0; }\n  .row-no-padding > .col {\n    padding: 0; }\n\n.row + .row {\n  margin-top: -5px;\n  padding-top: 0; }\n\n.col {\n  -webkit-box-flex: 1;\n  -webkit-flex: 1;\n  -moz-box-flex: 1;\n  -moz-flex: 1;\n  -ms-flex: 1;\n  flex: 1;\n  display: block;\n  padding: 5px;\n  width: 100%; }\n\n/* Vertically Align Columns */\n/* .row-* vertically aligns every .col in the .row */\n.row-top {\n  -webkit-box-align: start;\n  -ms-flex-align: start;\n  -webkit-align-items: flex-start;\n  -moz-align-items: flex-start;\n  align-items: flex-start; }\n\n.row-bottom {\n  -webkit-box-align: end;\n  -ms-flex-align: end;\n  -webkit-align-items: flex-end;\n  -moz-align-items: flex-end;\n  align-items: flex-end; }\n\n.row-center {\n  -webkit-box-align: center;\n  -ms-flex-align: center;\n  -webkit-align-items: center;\n  -moz-align-items: center;\n  align-items: center; }\n\n.row-stretch {\n  -webkit-box-align: stretch;\n  -ms-flex-align: stretch;\n  -webkit-align-items: stretch;\n  -moz-align-items: stretch;\n  align-items: stretch; }\n\n.row-baseline {\n  -webkit-box-align: baseline;\n  -ms-flex-align: baseline;\n  -webkit-align-items: baseline;\n  -moz-align-items: baseline;\n  align-items: baseline; }\n\n/* .col-* vertically aligns an individual .col */\n.col-top {\n  -webkit-align-self: flex-start;\n  -moz-align-self: flex-start;\n  -ms-flex-item-align: start;\n  align-self: flex-start; }\n\n.col-bottom {\n  -webkit-align-self: flex-end;\n  -moz-align-self: flex-end;\n  -ms-flex-item-align: end;\n  align-self: flex-end; }\n\n.col-center {\n  -webkit-align-self: center;\n  -moz-align-self: center;\n  -ms-flex-item-align: center;\n  align-self: center; }\n\n/* Column Offsets */\n.col-offset-10 {\n  margin-left: 10%; }\n\n.col-offset-20 {\n  margin-left: 20%; }\n\n.col-offset-25 {\n  margin-left: 25%; }\n\n.col-offset-33, .col-offset-34 {\n  margin-left: 33.3333%; }\n\n.col-offset-50 {\n  margin-left: 50%; }\n\n.col-offset-66, .col-offset-67 {\n  margin-left: 66.6666%; }\n\n.col-offset-75 {\n  margin-left: 75%; }\n\n.col-offset-80 {\n  margin-left: 80%; }\n\n.col-offset-90 {\n  margin-left: 90%; }\n\n/* Explicit Column Percent Sizes */\n/* By default each grid column will evenly distribute */\n/* across the grid. However, you can specify individual */\n/* columns to take up a certain size of the available area */\n.col-10 {\n  -webkit-box-flex: 0;\n  -webkit-flex: 0 0 10%;\n  -moz-box-flex: 0;\n  -moz-flex: 0 0 10%;\n  -ms-flex: 0 0 10%;\n  flex: 0 0 10%;\n  max-width: 10%; }\n\n.col-20 {\n  -webkit-box-flex: 0;\n  -webkit-flex: 0 0 20%;\n  -moz-box-flex: 0;\n  -moz-flex: 0 0 20%;\n  -ms-flex: 0 0 20%;\n  flex: 0 0 20%;\n  max-width: 20%; }\n\n.col-25 {\n  -webkit-box-flex: 0;\n  -webkit-flex: 0 0 25%;\n  -moz-box-flex: 0;\n  -moz-flex: 0 0 25%;\n  -ms-flex: 0 0 25%;\n  flex: 0 0 25%;\n  max-width: 25%; }\n\n.col-33, .col-34 {\n  -webkit-box-flex: 0;\n  -webkit-flex: 0 0 33.3333%;\n  -moz-box-flex: 0;\n  -moz-flex: 0 0 33.3333%;\n  -ms-flex: 0 0 33.3333%;\n  flex: 0 0 33.3333%;\n  max-width: 33.3333%; }\n\n.col-50 {\n  -webkit-box-flex: 0;\n  -webkit-flex: 0 0 50%;\n  -moz-box-flex: 0;\n  -moz-flex: 0 0 50%;\n  -ms-flex: 0 0 50%;\n  flex: 0 0 50%;\n  max-width: 50%; }\n\n.col-66, .col-67 {\n  -webkit-box-flex: 0;\n  -webkit-flex: 0 0 66.6666%;\n  -moz-box-flex: 0;\n  -moz-flex: 0 0 66.6666%;\n  -ms-flex: 0 0 66.6666%;\n  flex: 0 0 66.6666%;\n  max-width: 66.6666%; }\n\n.col-75 {\n  -webkit-box-flex: 0;\n  -webkit-flex: 0 0 75%;\n  -moz-box-flex: 0;\n  -moz-flex: 0 0 75%;\n  -ms-flex: 0 0 75%;\n  flex: 0 0 75%;\n  max-width: 75%; }\n\n.col-80 {\n  -webkit-box-flex: 0;\n  -webkit-flex: 0 0 80%;\n  -moz-box-flex: 0;\n  -moz-flex: 0 0 80%;\n  -ms-flex: 0 0 80%;\n  flex: 0 0 80%;\n  max-width: 80%; }\n\n.col-90 {\n  -webkit-box-flex: 0;\n  -webkit-flex: 0 0 90%;\n  -moz-box-flex: 0;\n  -moz-flex: 0 0 90%;\n  -ms-flex: 0 0 90%;\n  flex: 0 0 90%;\n  max-width: 90%; }\n\n/* Responsive Grid Classes */\n/* Adding a class of responsive-X to a row */\n/* will trigger the flex-direction to */\n/* change to column and add some margin */\n/* to any columns in the row for clearity */\n@media (max-width: 567px) {\n  .responsive-sm {\n    -webkit-box-direction: normal;\n    -moz-box-direction: normal;\n    -webkit-box-orient: vertical;\n    -moz-box-orient: vertical;\n    -webkit-flex-direction: column;\n    -ms-flex-direction: column;\n    flex-direction: column; }\n    .responsive-sm .col, .responsive-sm .col-10, .responsive-sm .col-20, .responsive-sm .col-25, .responsive-sm .col-33, .responsive-sm .col-34, .responsive-sm .col-50, .responsive-sm .col-66, .responsive-sm .col-67, .responsive-sm .col-75, .responsive-sm .col-80, .responsive-sm .col-90 {\n      -webkit-box-flex: 1;\n      -webkit-flex: 1;\n      -moz-box-flex: 1;\n      -moz-flex: 1;\n      -ms-flex: 1;\n      flex: 1;\n      margin-bottom: 15px;\n      margin-left: 0;\n      max-width: 100%;\n      width: 100%; } }\n\n@media (max-width: 767px) {\n  .responsive-md {\n    -webkit-box-direction: normal;\n    -moz-box-direction: normal;\n    -webkit-box-orient: vertical;\n    -moz-box-orient: vertical;\n    -webkit-flex-direction: column;\n    -ms-flex-direction: column;\n    flex-direction: column; }\n    .responsive-md .col, .responsive-md .col-10, .responsive-md .col-20, .responsive-md .col-25, .responsive-md .col-33, .responsive-md .col-34, .responsive-md .col-50, .responsive-md .col-66, .responsive-md .col-67, .responsive-md .col-75, .responsive-md .col-80, .responsive-md .col-90 {\n      -webkit-box-flex: 1;\n      -webkit-flex: 1;\n      -moz-box-flex: 1;\n      -moz-flex: 1;\n      -ms-flex: 1;\n      flex: 1;\n      margin-bottom: 15px;\n      margin-left: 0;\n      max-width: 100%;\n      width: 100%; } }\n\n@media (max-width: 1023px) {\n  .responsive-lg {\n    -webkit-box-direction: normal;\n    -moz-box-direction: normal;\n    -webkit-box-orient: vertical;\n    -moz-box-orient: vertical;\n    -webkit-flex-direction: column;\n    -ms-flex-direction: column;\n    flex-direction: column; }\n    .responsive-lg .col, .responsive-lg .col-10, .responsive-lg .col-20, .responsive-lg .col-25, .responsive-lg .col-33, .responsive-lg .col-34, .responsive-lg .col-50, .responsive-lg .col-66, .responsive-lg .col-67, .responsive-lg .col-75, .responsive-lg .col-80, .responsive-lg .col-90 {\n      -webkit-box-flex: 1;\n      -webkit-flex: 1;\n      -moz-box-flex: 1;\n      -moz-flex: 1;\n      -ms-flex: 1;\n      flex: 1;\n      margin-bottom: 15px;\n      margin-left: 0;\n      max-width: 100%;\n      width: 100%; } }\n\n/**\n * Utility Classes\n * --------------------------------------------------\n */\n.hide {\n  display: none; }\n\n.opacity-hide {\n  opacity: 0; }\n\n.grade-b .opacity-hide,\n.grade-c .opacity-hide {\n  opacity: 1;\n  display: none; }\n\n.show {\n  display: block; }\n\n.opacity-show {\n  opacity: 1; }\n\n.invisible {\n  visibility: hidden; }\n\n.keyboard-open .hide-on-keyboard-open {\n  display: none; }\n\n.keyboard-open .tabs.hide-on-keyboard-open + .pane .has-tabs,\n.keyboard-open .bar-footer.hide-on-keyboard-open + .pane .has-footer {\n  bottom: 0; }\n\n.inline {\n  display: inline-block; }\n\n.disable-pointer-events {\n  pointer-events: none; }\n\n.enable-pointer-events {\n  pointer-events: auto; }\n\n.disable-user-behavior {\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  -ms-user-select: none;\n  user-select: none;\n  -webkit-touch-callout: none;\n  -webkit-tap-highlight-color: transparent;\n  -webkit-tap-highlight-color: transparent;\n  -webkit-user-drag: none;\n  -ms-touch-action: none;\n  -ms-content-zooming: none; }\n\n.click-block {\n  position: absolute;\n  top: 0;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  opacity: 0;\n  z-index: 99999;\n  -webkit-transform: translate3d(0, 0, 0);\n  transform: translate3d(0, 0, 0);\n  overflow: hidden; }\n\n.click-block-hide {\n  -webkit-transform: translate3d(-9999px, 0, 0);\n  transform: translate3d(-9999px, 0, 0); }\n\n.no-resize {\n  resize: none; }\n\n.block {\n  display: block;\n  clear: both; }\n  .block:after {\n    display: block;\n    visibility: hidden;\n    clear: both;\n    height: 0;\n    content: \".\"; }\n\n.full-image {\n  width: 100%; }\n\n.clearfix {\n  *zoom: 1; }\n  .clearfix:before,\n  .clearfix:after {\n    display: table;\n    content: \"\";\n    line-height: 0; }\n  .clearfix:after {\n    clear: both; }\n\n/**\n * Content Padding\n * --------------------------------------------------\n */\n.padding {\n  padding: 10px; }\n\n.padding-top,\n.padding-vertical {\n  padding-top: 10px; }\n\n.padding-right,\n.padding-horizontal {\n  padding-right: 10px; }\n\n.padding-bottom,\n.padding-vertical {\n  padding-bottom: 10px; }\n\n.padding-left,\n.padding-horizontal {\n  padding-left: 10px; }\n\n/**\n * Scrollable iFrames\n * --------------------------------------------------\n */\n.iframe-wrapper {\n  position: fixed;\n  -webkit-overflow-scrolling: touch;\n  overflow: scroll; }\n  .iframe-wrapper iframe {\n    height: 100%;\n    width: 100%; }\n\n/**\n * Rounded\n * --------------------------------------------------\n */\n.rounded {\n  border-radius: 4px; }\n\n/**\n * Utility Colors\n * --------------------------------------------------\n * Utility colors are added to help set a naming convention. You'll\n * notice we purposely do not use words like \"red\" or \"blue\", but\n * instead have colors which represent an emotion or generic theme.\n */\n.light, a.light {\n  color: #fff; }\n\n.light-bg {\n  background-color: #fff; }\n\n.light-border {\n  border-color: #ddd; }\n\n.stable, a.stable {\n  color: #f8f8f8; }\n\n.stable-bg {\n  background-color: #f8f8f8; }\n\n.stable-border {\n  border-color: #b2b2b2; }\n\n.positive, a.positive {\n  color: #387ef5; }\n\n.positive-bg {\n  background-color: #387ef5; }\n\n.positive-border {\n  border-color: #0c60ee; }\n\n.calm, a.calm {\n  color: #11c1f3; }\n\n.calm-bg {\n  background-color: #11c1f3; }\n\n.calm-border {\n  border-color: #0a9dc7; }\n\n.assertive, a.assertive {\n  color: #ef473a; }\n\n.assertive-bg {\n  background-color: #ef473a; }\n\n.assertive-border {\n  border-color: #e42112; }\n\n.balanced, a.balanced {\n  color: #33cd5f; }\n\n.balanced-bg {\n  background-color: #33cd5f; }\n\n.balanced-border {\n  border-color: #28a54c; }\n\n.energized, a.energized {\n  color: #ffc900; }\n\n.energized-bg {\n  background-color: #ffc900; }\n\n.energized-border {\n  border-color: #e6b500; }\n\n.royal, a.royal {\n  color: #886aea; }\n\n.royal-bg {\n  background-color: #886aea; }\n\n.royal-border {\n  border-color: #6b46e5; }\n\n.dark, a.dark {\n  color: #444; }\n\n.dark-bg {\n  background-color: #444; }\n\n.dark-border {\n  border-color: #111; }\n\n[collection-repeat] {\n  /* Position is set by transforms */\n  left: 0 !important;\n  top: 0 !important;\n  position: absolute !important;\n  z-index: 1; }\n\n.collection-repeat-container {\n  position: relative;\n  z-index: 1; }\n\n.collection-repeat-after-container {\n  z-index: 0;\n  display: block;\n  /* when scrolling horizontally, make sure the after container doesn't take up 100% width */ }\n  .collection-repeat-after-container.horizontal {\n    display: inline-block; }\n\n[ng\\:cloak], [ng-cloak], [data-ng-cloak], [x-ng-cloak], .ng-cloak,\n.x-ng-cloak, .ng-hide:not(.ng-hide-animate) {\n  display: none !important; }\n\n/**\n * Platform\n * --------------------------------------------------\n * Platform specific tweaks\n */\n.platform-ios.platform-cordova:not(.fullscreen) .bar-header:not(.bar-subheader) {\n  height: 64px; }\n  .platform-ios.platform-cordova:not(.fullscreen) .bar-header:not(.bar-subheader).item-input-inset .item-input-wrapper {\n    margin-top: 19px !important; }\n  .platform-ios.platform-cordova:not(.fullscreen) .bar-header:not(.bar-subheader) > * {\n    margin-top: 20px; }\n\n.platform-ios.platform-cordova:not(.fullscreen) .tabs-top > .tabs,\n.platform-ios.platform-cordova:not(.fullscreen) .tabs.tabs-top {\n  top: 64px; }\n\n.platform-ios.platform-cordova:not(.fullscreen) .has-header,\n.platform-ios.platform-cordova:not(.fullscreen) .bar-subheader {\n  top: 64px; }\n\n.platform-ios.platform-cordova:not(.fullscreen) .has-subheader {\n  top: 108px; }\n\n.platform-ios.platform-cordova:not(.fullscreen) .has-header.has-tabs-top {\n  top: 113px; }\n\n.platform-ios.platform-cordova:not(.fullscreen) .has-header.has-subheader.has-tabs-top {\n  top: 157px; }\n\n.platform-ios.platform-cordova .popover .bar-header:not(.bar-subheader) {\n  height: 44px; }\n  .platform-ios.platform-cordova .popover .bar-header:not(.bar-subheader).item-input-inset .item-input-wrapper {\n    margin-top: -1px; }\n  .platform-ios.platform-cordova .popover .bar-header:not(.bar-subheader) > * {\n    margin-top: 0; }\n\n.platform-ios.platform-cordova .popover .has-header,\n.platform-ios.platform-cordova .popover .bar-subheader {\n  top: 44px; }\n\n.platform-ios.platform-cordova .popover .has-subheader {\n  top: 88px; }\n\n.platform-ios.platform-cordova.status-bar-hide {\n  margin-bottom: 20px; }\n\n@media (orientation: landscape) {\n  .platform-ios.platform-browser.platform-ipad {\n    position: fixed; } }\n\n.platform-c:not(.enable-transitions) * {\n  -webkit-transition: none !important;\n  transition: none !important; }\n\n.slide-in-up {\n  -webkit-transform: translate3d(0, 100%, 0);\n  transform: translate3d(0, 100%, 0); }\n\n.slide-in-up.ng-enter,\n.slide-in-up > .ng-enter {\n  -webkit-transition: all cubic-bezier(0.1, 0.7, 0.1, 1) 400ms;\n  transition: all cubic-bezier(0.1, 0.7, 0.1, 1) 400ms; }\n\n.slide-in-up.ng-enter-active,\n.slide-in-up > .ng-enter-active {\n  -webkit-transform: translate3d(0, 0, 0);\n  transform: translate3d(0, 0, 0); }\n\n.slide-in-up.ng-leave,\n.slide-in-up > .ng-leave {\n  -webkit-transition: all ease-in-out 250ms;\n  transition: all ease-in-out 250ms; }\n\n@-webkit-keyframes scaleOut {\n  from {\n    -webkit-transform: scale(1);\n    opacity: 1; }\n  to {\n    -webkit-transform: scale(0.8);\n    opacity: 0; } }\n\n@keyframes scaleOut {\n  from {\n    transform: scale(1);\n    opacity: 1; }\n  to {\n    transform: scale(0.8);\n    opacity: 0; } }\n\n@-webkit-keyframes superScaleIn {\n  from {\n    -webkit-transform: scale(1.2);\n    opacity: 0; }\n  to {\n    -webkit-transform: scale(1);\n    opacity: 1; } }\n\n@keyframes superScaleIn {\n  from {\n    transform: scale(1.2);\n    opacity: 0; }\n  to {\n    transform: scale(1);\n    opacity: 1; } }\n\n[nav-view-transition=\"ios\"] [nav-view=\"entering\"],\n[nav-view-transition=\"ios\"] [nav-view=\"leaving\"] {\n  -webkit-transition-duration: 500ms;\n  transition-duration: 500ms;\n  -webkit-transition-timing-function: cubic-bezier(0.36, 0.66, 0.04, 1);\n  transition-timing-function: cubic-bezier(0.36, 0.66, 0.04, 1);\n  -webkit-transition-property: opacity, -webkit-transform, box-shadow;\n  transition-property: opacity, transform, box-shadow; }\n\n[nav-view-transition=\"ios\"][nav-view-direction=\"forward\"],\n[nav-view-transition=\"ios\"][nav-view-direction=\"back\"] {\n  background-color: #000; }\n\n[nav-view-transition=\"ios\"] [nav-view=\"active\"],\n[nav-view-transition=\"ios\"][nav-view-direction=\"forward\"] [nav-view=\"entering\"],\n[nav-view-transition=\"ios\"][nav-view-direction=\"back\"] [nav-view=\"leaving\"] {\n  z-index: 3; }\n\n[nav-view-transition=\"ios\"][nav-view-direction=\"back\"] [nav-view=\"entering\"],\n[nav-view-transition=\"ios\"][nav-view-direction=\"forward\"] [nav-view=\"leaving\"] {\n  z-index: 2; }\n\n[nav-bar-transition=\"ios\"] .title,\n[nav-bar-transition=\"ios\"] .buttons,\n[nav-bar-transition=\"ios\"] .back-text {\n  -webkit-transition-duration: 500ms;\n  transition-duration: 500ms;\n  -webkit-transition-timing-function: cubic-bezier(0.36, 0.66, 0.04, 1);\n  transition-timing-function: cubic-bezier(0.36, 0.66, 0.04, 1);\n  -webkit-transition-property: opacity, -webkit-transform;\n  transition-property: opacity, transform; }\n\n[nav-bar-transition=\"ios\"] [nav-bar=\"active\"],\n[nav-bar-transition=\"ios\"] [nav-bar=\"entering\"] {\n  z-index: 10; }\n  [nav-bar-transition=\"ios\"] [nav-bar=\"active\"] .bar,\n  [nav-bar-transition=\"ios\"] [nav-bar=\"entering\"] .bar {\n    background: transparent; }\n\n[nav-bar-transition=\"ios\"] [nav-bar=\"cached\"] {\n  display: block; }\n  [nav-bar-transition=\"ios\"] [nav-bar=\"cached\"] .header-item {\n    display: none; }\n\n[nav-view-transition=\"android\"] [nav-view=\"entering\"],\n[nav-view-transition=\"android\"] [nav-view=\"leaving\"] {\n  -webkit-transition-duration: 200ms;\n  transition-duration: 200ms;\n  -webkit-transition-timing-function: cubic-bezier(0.4, 0.6, 0.2, 1);\n  transition-timing-function: cubic-bezier(0.4, 0.6, 0.2, 1);\n  -webkit-transition-property: -webkit-transform;\n  transition-property: transform; }\n\n[nav-view-transition=\"android\"] [nav-view=\"active\"],\n[nav-view-transition=\"android\"][nav-view-direction=\"forward\"] [nav-view=\"entering\"],\n[nav-view-transition=\"android\"][nav-view-direction=\"back\"] [nav-view=\"leaving\"] {\n  z-index: 3; }\n\n[nav-view-transition=\"android\"][nav-view-direction=\"back\"] [nav-view=\"entering\"],\n[nav-view-transition=\"android\"][nav-view-direction=\"forward\"] [nav-view=\"leaving\"] {\n  z-index: 2; }\n\n[nav-bar-transition=\"android\"] .title,\n[nav-bar-transition=\"android\"] .buttons {\n  -webkit-transition-duration: 200ms;\n  transition-duration: 200ms;\n  -webkit-transition-timing-function: cubic-bezier(0.4, 0.6, 0.2, 1);\n  transition-timing-function: cubic-bezier(0.4, 0.6, 0.2, 1);\n  -webkit-transition-property: opacity;\n  transition-property: opacity; }\n\n[nav-bar-transition=\"android\"] [nav-bar=\"active\"],\n[nav-bar-transition=\"android\"] [nav-bar=\"entering\"] {\n  z-index: 10; }\n  [nav-bar-transition=\"android\"] [nav-bar=\"active\"] .bar,\n  [nav-bar-transition=\"android\"] [nav-bar=\"entering\"] .bar {\n    background: transparent; }\n\n[nav-bar-transition=\"android\"] [nav-bar=\"cached\"] {\n  display: block; }\n  [nav-bar-transition=\"android\"] [nav-bar=\"cached\"] .header-item {\n    display: none; }\n\n[nav-swipe=\"fast\"] [nav-view],\n[nav-swipe=\"fast\"] .title,\n[nav-swipe=\"fast\"] .buttons,\n[nav-swipe=\"fast\"] .back-text {\n  -webkit-transition-duration: 50ms;\n  transition-duration: 50ms;\n  -webkit-transition-timing-function: linear;\n  transition-timing-function: linear; }\n\n[nav-swipe=\"slow\"] [nav-view],\n[nav-swipe=\"slow\"] .title,\n[nav-swipe=\"slow\"] .buttons,\n[nav-swipe=\"slow\"] .back-text {\n  -webkit-transition-duration: 160ms;\n  transition-duration: 160ms;\n  -webkit-transition-timing-function: linear;\n  transition-timing-function: linear; }\n\n[nav-view=\"cached\"],\n[nav-bar=\"cached\"] {\n  display: none; }\n\n[nav-view=\"stage\"] {\n  opacity: 0;\n  -webkit-transition-duration: 0;\n  transition-duration: 0; }\n\n[nav-bar=\"stage\"] .title,\n[nav-bar=\"stage\"] .buttons,\n[nav-bar=\"stage\"] .back-text {\n  position: absolute;\n  opacity: 0;\n  -webkit-transition-duration: 0s;\n  transition-duration: 0s; }\n"
  },
  {
    "path": "content/scss/site.css",
    "content": "/*\nSyntax error: Invalid CSS after \"  margin-right\": expected \";\", was \": 20px;\"\n        on line 150 of _submit-issue.scss\n        from line 18 of site.scss\n\n145:   top: -20px;\n146: }\n147: #ionitron-image.issue {\n148:   background: url('/img/submit-issue/submit-ionitron_2x.png') no-repeat transparent;\n149:   background-size:14\n150:   margin-right: 20px;\n151: }\n152: @media screen and (max-width: 800px) {\n153:   #ionitron-image.header-ionitron.issue {\n154:     background-size: 48px 48px;\n155:     width: 48px;\n\nBacktrace:\n_submit-issue.scss:150\nsite.scss:18\n/Library/Ruby/Gems/2.0.0/gems/sass-3.2.14/lib/sass/scss/parser.rb:1147:in `expected'\n/Library/Ruby/Gems/2.0.0/gems/sass-3.2.14/lib/sass/scss/parser.rb:1085:in `expected'\n/Library/Ruby/Gems/2.0.0/gems/sass-3.2.14/lib/sass/scss/parser.rb:1080:in `tok!'\n/Library/Ruby/Gems/2.0.0/gems/sass-3.2.14/lib/sass/scss/parser.rb:586:in `block in declaration_or_ruleset'\n/Library/Ruby/Gems/2.0.0/gems/sass-3.2.14/lib/sass/scss/parser.rb:1123:in `call'\n/Library/Ruby/Gems/2.0.0/gems/sass-3.2.14/lib/sass/scss/parser.rb:1123:in `rethrow'\n/Library/Ruby/Gems/2.0.0/gems/sass-3.2.14/lib/sass/scss/parser.rb:592:in `declaration_or_ruleset'\n/Library/Ruby/Gems/2.0.0/gems/sass-3.2.14/lib/sass/scss/parser.rb:554:in `block_child'\n/Library/Ruby/Gems/2.0.0/gems/sass-3.2.14/lib/sass/scss/parser.rb:546:in `block_contents'\n/Library/Ruby/Gems/2.0.0/gems/sass-3.2.14/lib/sass/scss/parser.rb:535:in `block'\n/Library/Ruby/Gems/2.0.0/gems/sass-3.2.14/lib/sass/scss/parser.rb:529:in `ruleset'\n/Library/Ruby/Gems/2.0.0/gems/sass-3.2.14/lib/sass/scss/parser.rb:553:in `block_child'\n/Library/Ruby/Gems/2.0.0/gems/sass-3.2.14/lib/sass/scss/parser.rb:546:in `block_contents'\n/Library/Ruby/Gems/2.0.0/gems/sass-3.2.14/lib/sass/scss/parser.rb:82:in `stylesheet'\n/Library/Ruby/Gems/2.0.0/gems/sass-3.2.14/lib/sass/scss/parser.rb:27:in `parse'\n/Library/Ruby/Gems/2.0.0/gems/sass-3.2.14/lib/sass/engine.rb:342:in `_to_tree'\n/Library/Ruby/Gems/2.0.0/gems/sass-3.2.14/lib/sass/engine.rb:274:in `to_tree'\n/Library/Ruby/Gems/2.0.0/gems/sass-3.2.14/lib/sass/tree/visitors/perform.rb:225:in `visit_import'\n/Library/Ruby/Gems/2.0.0/gems/sass-3.2.14/lib/sass/tree/visitors/base.rb:37:in `visit'\n/Library/Ruby/Gems/2.0.0/gems/sass-3.2.14/lib/sass/tree/visitors/perform.rb:100:in `visit'\n/Library/Ruby/Gems/2.0.0/gems/sass-3.2.14/lib/sass/tree/visitors/base.rb:53:in `block in visit_children'\n/Library/Ruby/Gems/2.0.0/gems/sass-3.2.14/lib/sass/tree/visitors/base.rb:53:in `map'\n/Library/Ruby/Gems/2.0.0/gems/sass-3.2.14/lib/sass/tree/visitors/base.rb:53:in `visit_children'\n/Library/Ruby/Gems/2.0.0/gems/sass-3.2.14/lib/sass/tree/visitors/perform.rb:109:in `block in visit_children'\n/Library/Ruby/Gems/2.0.0/gems/sass-3.2.14/lib/sass/tree/visitors/perform.rb:121:in `with_environment'\n/Library/Ruby/Gems/2.0.0/gems/sass-3.2.14/lib/sass/tree/visitors/perform.rb:108:in `visit_children'\n/Library/Ruby/Gems/2.0.0/gems/sass-3.2.14/lib/sass/tree/visitors/base.rb:37:in `block in visit'\n/Library/Ruby/Gems/2.0.0/gems/sass-3.2.14/lib/sass/tree/visitors/perform.rb:128:in `visit_root'\n/Library/Ruby/Gems/2.0.0/gems/sass-3.2.14/lib/sass/tree/visitors/base.rb:37:in `visit'\n/Library/Ruby/Gems/2.0.0/gems/sass-3.2.14/lib/sass/tree/visitors/perform.rb:100:in `visit'\n/Library/Ruby/Gems/2.0.0/gems/sass-3.2.14/lib/sass/tree/visitors/perform.rb:7:in `visit'\n/Library/Ruby/Gems/2.0.0/gems/sass-3.2.14/lib/sass/tree/root_node.rb:20:in `render'\n/Library/Ruby/Gems/2.0.0/gems/sass-3.2.14/lib/sass/engine.rb:315:in `_render'\n/Library/Ruby/Gems/2.0.0/gems/sass-3.2.14/lib/sass/engine.rb:262:in `render'\n/Library/Ruby/Gems/2.0.0/gems/sass-3.2.14/lib/sass/plugin/compiler.rb:362:in `update_stylesheet'\n/Library/Ruby/Gems/2.0.0/gems/sass-3.2.14/lib/sass/plugin/compiler.rb:203:in `block in update_stylesheets'\n/Library/Ruby/Gems/2.0.0/gems/sass-3.2.14/lib/sass/plugin/compiler.rb:201:in `each'\n/Library/Ruby/Gems/2.0.0/gems/sass-3.2.14/lib/sass/plugin/compiler.rb:201:in `update_stylesheets'\n/Library/Ruby/Gems/2.0.0/gems/sass-3.2.14/lib/sass/plugin.rb:81:in `update_stylesheets'\n/Library/Ruby/Gems/2.0.0/gems/sass-3.2.14/lib/sass/exec.rb:443:in `watch_or_update'\n/Library/Ruby/Gems/2.0.0/gems/sass-3.2.14/lib/sass/exec.rb:326:in `process_result'\n/Library/Ruby/Gems/2.0.0/gems/sass-3.2.14/lib/sass/exec.rb:41:in `parse'\n/Library/Ruby/Gems/2.0.0/gems/sass-3.2.14/lib/sass/exec.rb:21:in `parse!'\n/Library/Ruby/Gems/2.0.0/gems/sass-3.2.14/bin/scss:13:in `<top (required)>'\n/usr/bin/scss:23:in `load'\n/usr/bin/scss:23:in `<main>'\n*/\nbody:before {\n  white-space: pre;\n  font-family: monospace;\n  content: \"Syntax error: Invalid CSS after \\\"  margin-right\\\": expected \\\";\\\", was \\\": 20px;\\\"\\A         on line 150 of _submit-issue.scss\\A         from line 18 of site.scss\\A \\A 145:   top: -20px;\\A 146: }\\A 147: #ionitron-image.issue {\\A 148:   background: url('/img/submit-issue/submit-ionitron_2x.png') no-repeat transparent;\\A 149:   background-size:14\\A 150:   margin-right: 20px;\\A 151: }\\A 152: @media screen and (max-width: 800px) {\\A 153:   #ionitron-image.header-ionitron.issue {\\A 154:     background-size: 48px 48px;\\A 155:     width: 48px;\"; }\n"
  },
  {
    "path": "content/scss/site.scss",
    "content": "@import \"bootstrap/bootstrap\";\n@import \"fonts\";\n@import \"forms\";\n@import \"type\";\n@import \"guide\";\n@import \"demos\";\n@import \"testimonials\";\n@import \"docs\";\n@import \"docs-api\";\n@import \"getting-started\";\n@import \"showcase\";\n@import \"tutorials\";\n@import \"syntax\";\n@import \"input-types\";\n@import \"products\";\n@import \"what-is\";\n@import \"v2\";\n\na {\n  opacity: 0.8;\n  transition: .1s ease-in-out;\n  transition-property: opacity, border-color;\n  &:hover, &:focus {\n    opacity: 1;\n    text-decoration: none;\n  }\n}\n\n.text-center {\n  text-align: center;\n}\n\n.content-container {\n  padding-top: 40px;\n}\n\n.main-content {\n  min-height: 450px;\n}\n\n#blog-badge {\n  display: none;\n  position: absolute;\n  padding: 3px 6px;\n  border-radius: 64px;\n  border: 2px solid #FFF;\n  width: 21px;\n  background: #D55757;\n  color: #FFF;\n  right: 6px;\n  top: 15px;\n  text-align: center;\n  z-index: 1;\n  font-size: 11px;\n  font-weight: 700;\n  line-height: 11px;\n}\n\n@import \"header\";\n@import \"news\";\n@-moz-keyframes spin {\n  100% {\n    -moz-transform: rotate(360deg);\n  }\n}\n\n@-webkit-keyframes spin {\n  100% {\n    -webkit-transform: rotate(360deg);\n  }\n}\n\n@keyframes spin {\n  100% {\n    -webkit-transform: rotate(360deg);\n    transform: rotate(360deg);\n  }\n}\n\n.ionic {\n  @import \"ionic/ionic\";\n}\n\n.pre-footer {\n  position: relative;\n  z-index: 100;\n  padding: 40px;\n  background: #F7F7F7;\n  .row {\n    margin: 0 auto;\n    max-width: 900px;\n  }\n  p {\n    line-height: 28px;\n    color: #999;\n  }\n  a:hover {\n    text-decoration: none;\n  }\n  span {\n    padding-left: 5px;\n  }\n  .col-a {\n    padding-bottom: 15px;\n  }\n  @media (min-width: 768px) {\n    .col-a {\n      padding-right: 60px;\n      padding-bottom: 0;\n      border-right: 1px solid #ddd;\n    }\n    .col-b {\n      padding-left: 70px;\n    }\n  }\n}\n\n#newsletter-bar {\n  //box-shadow: 0px -1px 2px rgba(0,0,0,0.7);\n  border-top: none;\n  background-color: rgba(79, 142, 247, 0.95);\n  color: #fff;\n  text-align: center;\n  padding: 5px;\n  z-index: 150;\n  position: fixed;\n  bottom: 0;\n  left: 0;\n  width: 100%;\n  font-size: 13px;\n  &.top {\n    position: static;\n    background-color: #4e8ef7;\n  }\n  form {\n    display: inline-block;\n    input {\n      margin-left: 15px;\n      height: 30px;\n      padding-left: 10px;\n      border: none;\n      border-radius: 3px;\n      box-shadow: none;\n      opacity: .8;\n      &:focus {\n        -webkit-box-shadow: none;\n        box-shadow: none;\n        outline: none;\n        opacity: .9;\n      }\n    }\n  }\n}\n\n.newsletter-box {\n  background-color: #4c8cfa;\n  color: #fff;\n  padding: 15px;\n  border-radius: 5px;\n  h4 {\n    color: #fff;\n  }\n  .input-group {\n    margin-bottom: 15px;\n  }\n  .btn {\n    border-left: 1px solid rgba(79, 142, 247, 0.95);\n    color: rgba(79, 142, 247, 0.95);\n  }\n  input.form-control {\n    border: none;\n  }\n}\n\n.social-box {\n  margin: 55px 0px 15px 0px;\n  iframe {\n    margin-right: 10px;\n  }\n}\n\n#newsletter-bar {\n  //box-shadow: 0px -1px 2px rgba(0,0,0,0.7);\n  border-top: 1px solid #999;\n  background-color: rgba(79, 142, 247, 0.95);\n  color: #fff;\n  text-align: center;\n  padding: 5px;\n  z-index: 150;\n  position: fixed;\n  bottom: 0;\n  left: 0;\n  width: 100%;\n  font-size: 13px;\n  form {\n    display: inline-block;\n    input {\n      margin-left: 15px;\n      height: 30px;\n      border: none;\n      border-radius: 3px;\n      box-shadow: none;\n    }\n  }\n}\n\n@import \"footer\";\n"
  },
  {
    "path": "content/sitemap.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?><!--Property of Ionic Framework-->\n<urlset xmlns=\"http://www.sitemaps.org/schemas/sitemap/0.9\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xsi:schemaLocation=\"http://www.sitemaps.org/schemas/sitemap/0.9 http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd\">\n<url><loc>https://ionicframework.com/</loc><changefreq>weekly</changefreq><priority>1.00</priority></url>\n<url><loc>https://ionicframework.com/about</loc><changefreq>weekly</changefreq><priority>0.96</priority></url>\n<url><loc>https://ionicframework.com/advisory</loc><priority>0.99</priority></url>\n<url><loc>https://ionicframework.com/appflow</loc><priority>0.99</priority></url>\n<url><loc>https://ionicframework.com/books/evaluating-ionic-for-enterprise</loc><priority>0.95</priority></url>\n<url><loc>https://ionicframework.com/books/hybrid-vs-native</loc><changefreq>weekly</changefreq><priority>0.96</priority></url>\n<url><loc>https://ionicframework.com/books/rethinking-low-code</loc><priority>0.95</priority></url>\n<url><loc>https://ionicframework.com/code-of-conduct</loc><priority>0.95</priority></url>\n<url><loc>https://ionicframework.com/community</loc><priority>0.98</priority></url>\n<url><loc>https://ionicframework.com/contact</loc><changefreq>weekly</changefreq><priority>0.96</priority></url>\n<url><loc>https://ionicframework.com/contributors</loc><changefreq>weekly</changefreq><priority>0.97</priority></url>\n<url><loc>https://ionicframework.com/covid-19</loc><priority>0.95</priority></url>\n<url><loc>https://ionicframework.com/creator</loc><priority>0.95</priority></url>\n<url><loc>https://ionicframework.com/creator/support</loc><priority>0.95</priority></url>\n<url><loc>https://ionicframework.com/customers</loc><priority>0.99</priority></url>\n<url><loc>https://ionicframework.com/demo</loc><changefreq>weekly</changefreq><priority>0.98</priority></url>\n<url><loc>https://ionicframework.com/developers</loc><changefreq>weekly</changefreq><priority>0.96</priority></url>\n<url><loc>https://ionicframework.com/ds</loc><priority>0.95</priority></url>\n<url><loc>https://ionicframework.com/enterprise</loc><priority>0.99</priority></url>\n<url><loc>https://ionicframework.com/enterprise/auth-connect</loc><priority>0.98</priority></url>\n<url><loc>https://ionicframework.com/enterprise/contact</loc><priority>0.97</priority></url>\n<url><loc>https://ionicframework.com/enterprise/identity-vault</loc><priority>0.98</priority></url>\n<url><loc>https://ionicframework.com/enterprise/offline-storage</loc><priority>0.98</priority></url>\n<url><loc>https://ionicframework.com/enterprise/platform</loc><priority>0.98</priority></url>\n<url><loc>https://ionicframework.com/enterprise/solutions</loc><priority>0.98</priority></url>\n<url><loc>https://ionicframework.com/enterprise/solutions/cross-platform</loc><priority>0.95</priority></url>\n<url><loc>https://ionicframework.com/enterprise/strategy-session</loc><priority>0.95</priority></url>\n<url><loc>https://ionicframework.com/enterprise/support</loc><priority>0.95</priority></url>\n<url><loc>https://ionicframework.com/enterprise/training</loc><priority>0.95</priority></url>\n<url><loc>https://ionicframework.com/enterprise/why-ionic</loc><priority>0.98</priority></url>\n<url><loc>https://ionicframework.com/enterprise-license-agreement</loc><priority>0.95</priority></url>\n<url><loc>https://ionicframework.com/framework</loc><changefreq>weekly</changefreq><priority>0.96</priority></url>\n<url><loc>https://ionicframework.com/getting-started</loc><changefreq>weekly</changefreq><priority>0.96</priority></url>\n<url><loc>https://ionicframework.com/go/pwa-architects-guide</loc><priority>0.95</priority></url>\n<url><loc>https://ionicframework.com/go/why-hybrid</loc><priority>0.95</priority></url>\n<url><loc>https://ionicframework.com/integrations</loc><priority>0.95</priority></url>\n<url><loc>https://ionicframework.com/integrations/saucelabs</loc><priority>0.95</priority></url>\n<url><loc>https://ionicframework.com/integrations/google-play-beta</loc><priority>0.95</priority></url>\n<url><loc>https://ionicframework.com/integrations/testfairy</loc><priority>0.95</priority></url>\n<url><loc>https://ionicframework.com/integrations/browserstack</loc><priority>0.95</priority></url>\n<url><loc>https://ionicframework.com/integrations/ionic-deploy</loc><priority>0.95</priority></url>\n<url><loc>https://ionicframework.com/integrations/rollbar</loc><priority>0.95</priority></url>\n<url><loc>https://ionicframework.com/integrations/new-relic</loc><priority>0.95</priority></url>\n<url><loc>https://ionicframework.com/integrations/jenkins</loc><priority>0.95</priority></url>\n<url><loc>https://ionicframework.com/integrations/google-maps</loc><priority>0.95</priority></url>\n<url><loc>https://ionicframework.com/integrations/google-analytics</loc><priority>0.95</priority></url>\n<url><loc>https://ionicframework.com/integrations/gitlab-ci</loc><priority>0.95</priority></url>\n<url><loc>https://ionicframework.com/integrations/diawi</loc><priority>0.95</priority></url>\n<url><loc>https://ionicframework.com/integrations/datadog</loc><priority>0.95</priority></url>\n<url><loc>https://ionicframework.com/integrations/circleci</loc><priority>0.95</priority></url>\n<url><loc>https://ionicframework.com/integrations/sentry</loc><priority>0.95</priority></url>\n<url><loc>https://ionicframework.com/integrations/aws-devicefarm</loc><priority>0.95</priority></url>\n<url><loc>https://ionicframework.com/integrations/applivery</loc><priority>0.95</priority></url>\n<url><loc>https://ionicframework.com/integrations/appium</loc><priority>0.95</priority></url>\n<url><loc>https://ionicframework.com/integrations/adobe-aem</loc><priority>0.95</priority></url>\n<url><loc>https://ionicframework.com/integrations/testflight</loc><priority>0.95</priority></url>\n<url><loc>https://ionicframework.com/integrations/travis-ci</loc><priority>0.95</priority></url>\n<url><loc>https://ionicframework.com/integrations/actionsheet</loc><priority>0.95</priority></url>\n<url><loc>https://ionicframework.com/integrations/badge</loc><priority>0.95</priority></url>\n<url><loc>https://ionicframework.com/integrations/barcode-scanner</loc><priority>0.95</priority></url>\n<url><loc>https://ionicframework.com/integrations/camera</loc><priority>0.95</priority></url>\n<url><loc>https://ionicframework.com/integrations/date-picker</loc><priority>0.95</priority></url>\n<url><loc>https://ionicframework.com/integrations/dialogs</loc><priority>0.95</priority></url>\n<url><loc>https://ionicframework.com/integrations/document-viewer</loc><priority>0.95</priority></url>\n<url><loc>https://ionicframework.com/integrations/file-chooser</loc><priority>0.95</priority></url>\n<url><loc>https://ionicframework.com/integrations/image-picker</loc><priority>0.95</priority></url>\n<url><loc>https://ionicframework.com/integrations/media</loc><priority>0.95</priority></url>\n<url><loc>https://ionicframework.com/integrations/media-capture</loc><priority>0.95</priority></url>\n<url><loc>https://ionicframework.com/integrations/music-controls</loc><priority>0.95</priority></url>\n<url><loc>https://ionicframework.com/integrations/native-audio</loc><priority>0.95</priority></url>\n<url><loc>https://ionicframework.com/integrations/photo-library</loc><priority>0.95</priority></url>\n<url><loc>https://ionicframework.com/integrations/photo-viewer</loc><priority>0.95</priority></url>\n<url><loc>https://ionicframework.com/integrations/qr-scanner</loc><priority>0.95</priority></url>\n<url><loc>https://ionicframework.com/integrations/spinner-dialog</loc><priority>0.95</priority></url>\n<url><loc>https://ionicframework.com/integrations/splash-screen</loc><priority>0.95</priority></url>\n<url><loc>https://ionicframework.com/integrations/themeable-browser</loc><priority>0.95</priority></url>\n<url><loc>https://ionicframework.com/integrations/toast</loc><priority>0.95</priority></url>\n<url><loc>https://ionicframework.com/integrations/video-editor</loc><priority>0.95</priority></url>\n<url><loc>https://ionicframework.com/integrations/video-player</loc><priority>0.95</priority></url>\n<url><loc>https://ionicframework.com/integrations/youtube-video-player</loc><priority>0.95</priority></url>\n<url><loc>https://ionicframework.com/integrations/zbar</loc><priority>0.95</priority></url>\n<url><loc>https://ionicframework.com/integrations/camera-preview</loc><priority>0.95</priority></url>\n<url><loc>https://ionicframework.com/integrations/video-capture-plus</loc><priority>0.95</priority></url>\n<url><loc>https://ionicframework.com/integrations/wheelselector</loc><priority>0.95</priority></url>\n<url><loc>https://ionicframework.com/integrations/streaming-media</loc><priority>0.95</priority></url>\n<url><loc>https://ionicframework.com/integrations/ios-documentpicker</loc><priority>0.95</priority></url>\n<url><loc>https://ionicframework.com/integrations/ios-filepicker</loc><priority>0.95</priority></url>\n<url><loc>https://ionicframework.com/integrations/email-composer</loc><priority>0.95</priority></url>\n<url><loc>https://ionicframework.com/integrations/android-exoplayer</loc><priority>0.95</priority></url>\n<url><loc>https://ionicframework.com/integrations/admob</loc><priority>0.95</priority></url>\n<url><loc>https://ionicframework.com/integrations/appodeal</loc><priority>0.95</priority></url>\n<url><loc>https://ionicframework.com/integrations/3d-touch</loc><priority>0.95</priority></url>\n<url><loc>https://ionicframework.com/integrations/android-full-screen</loc><priority>0.95</priority></url>\n<url><loc>https://ionicframework.com/integrations/app-minimize</loc><priority>0.95</priority></url>\n<url><loc>https://ionicframework.com/integrations/app-availability</loc><priority>0.95</priority></url>\n<url><loc>https://ionicframework.com/integrations/android-permissions</loc><priority>0.95</priority></url>\n<url><loc>https://ionicframework.com/integrations/app-preferences</loc><priority>0.95</priority></url>\n<url><loc>https://ionicframework.com/integrations/app-rate</loc><priority>0.95</priority></url>\n<url><loc>https://ionicframework.com/integrations/app-version</loc><priority>0.95</priority></url>\n<url><loc>https://ionicframework.com/integrations/autostart</loc><priority>0.95</priority></url>\n<url><loc>https://ionicframework.com/integrations/background-fetch</loc><priority>0.95</priority></url>\n<url><loc>https://ionicframework.com/integrations/background-geolocation</loc><priority>0.95</priority></url>\n<url><loc>https://ionicframework.com/integrations/background-mode</loc><priority>0.95</priority></url>\n<url><loc>https://ionicframework.com/integrations/base64-to-gallery</loc><priority>0.95</priority></url>\n<url><loc>https://ionicframework.com/integrations/battery-status</loc><priority>0.95</priority></url>\n<url><loc>https://ionicframework.com/integrations/brightness</loc><priority>0.95</priority></url>\n<url><loc>https://ionicframework.com/integrations/broadcaster</loc><priority>0.95</priority></url>\n<url><loc>https://ionicframework.com/integrations/browser-tab</loc><priority>0.95</priority></url>\n<url><loc>https://ionicframework.com/integrations/calendar</loc><priority>0.95</priority></url>\n<url><loc>https://ionicframework.com/integrations/call-directory</loc><priority>0.95</priority></url>\n<url><loc>https://ionicframework.com/integrations/call-log</loc><priority>0.95</priority></url>\n<url><loc>https://ionicframework.com/integrations/call-number</loc><priority>0.95</priority></url>\n<url><loc>https://ionicframework.com/integrations/chooser</loc><priority>0.95</priority></url>\n<url><loc>https://ionicframework.com/integrations/classkit</loc><priority>0.95</priority></url>\n<url><loc>https://ionicframework.com/integrations/clipboard</loc><priority>0.95</priority></url>\n<url><loc>https://ionicframework.com/integrations/cloud-settings</loc><priority>0.95</priority></url>\n<url><loc>https://ionicframework.com/integrations/contacts</loc><priority>0.95</priority></url>\n<url><loc>https://ionicframework.com/integrations/crop</loc><priority>0.95</priority></url>\n<url><loc>https://ionicframework.com/integrations/db-meter</loc><priority>0.95</priority></url>\n<url><loc>https://ionicframework.com/integrations/deeplinks</loc><priority>0.95</priority></url>\n<url><loc>https://ionicframework.com/integrations/device</loc><priority>0.95</priority></url>\n<url><loc>https://ionicframework.com/integrations/device-accounts</loc><priority>0.95</priority></url>\n<url><loc>https://ionicframework.com/integrations/device-feedback</loc><priority>0.95</priority></url>\n<url><loc>https://ionicframework.com/integrations/device-motion</loc><priority>0.95</priority></url>\n<url><loc>https://ionicframework.com/integrations/device-orientation</loc><priority>0.95</priority></url>\n<url><loc>https://ionicframework.com/integrations/diagnostic</loc><priority>0.95</priority></url>\n<url><loc>https://ionicframework.com/integrations/dns</loc><priority>0.95</priority></url>\n<url><loc>https://ionicframework.com/integrations/extended-device-information</loc><priority>0.95</priority></url>\n<url><loc>https://ionicframework.com/integrations/file</loc><priority>0.95</priority></url>\n<url><loc>https://ionicframework.com/integrations/file-encryption</loc><priority>0.95</priority></url>\n<url><loc>https://ionicframework.com/integrations/file-opener</loc><priority>0.95</priority></url>\n<url><loc>https://ionicframework.com/integrations/file-path</loc><priority>0.95</priority></url>\n<url><loc>https://ionicframework.com/integrations/flashlight</loc><priority>0.95</priority></url>\n<url><loc>https://ionicframework.com/integrations/file-transfer</loc><priority>0.95</priority></url>\n<url><loc>https://ionicframework.com/integrations/ftp</loc><priority>0.95</priority></url>\n<url><loc>https://ionicframework.com/integrations/geofence</loc><priority>0.95</priority></url>\n<url><loc>https://ionicframework.com/integrations/geolocation</loc><priority>0.95</priority></url>\n<url><loc>https://ionicframework.com/integrations/globalization</loc><priority>0.95</priority></url>\n<url><loc>https://ionicframework.com/integrations/gyroscope</loc><priority>0.95</priority></url>\n<url><loc>https://ionicframework.com/integrations/hce</loc><priority>0.95</priority></url>\n<url><loc>https://ionicframework.com/integrations/header-color</loc><priority>0.95</priority></url>\n<url><loc>https://ionicframework.com/integrations/health</loc><priority>0.95</priority></url>\n<url><loc>https://ionicframework.com/integrations/health-kit</loc><priority>0.95</priority></url>\n<url><loc>https://ionicframework.com/integrations/http</loc><priority>0.95</priority></url>\n<url><loc>https://ionicframework.com/integrations/httpd</loc><priority>0.95</priority></url>\n<url><loc>https://ionicframework.com/integrations/image-resizer</loc><priority>0.95</priority></url>\n<url><loc>https://ionicframework.com/integrations/in-app-browser</loc><priority>0.95</priority></url>\n<url><loc>https://ionicframework.com/integrations/in-app-review</loc><priority>0.95</priority></url>\n<url><loc>https://ionicframework.com/integrations/index-app-content</loc><priority>0.95</priority></url>\n<url><loc>https://ionicframework.com/integrations/insomnia</loc><priority>0.95</priority></url>\n<url><loc>https://ionicframework.com/integrations/is-debug</loc><priority>0.95</priority></url>\n<url><loc>https://ionicframework.com/integrations/keyboard</loc><priority>0.95</priority></url>\n<url><loc>https://ionicframework.com/integrations/launch-navigator</loc><priority>0.95</priority></url>\n<url><loc>https://ionicframework.com/integrations/launch-review</loc><priority>0.95</priority></url>\n<url><loc>https://ionicframework.com/integrations/location-accuracy</loc><priority>0.95</priority></url>\n<url><loc>https://ionicframework.com/integrations/market</loc><priority>0.95</priority></url>\n<url><loc>https://ionicframework.com/integrations/native-geocoder</loc><priority>0.95</priority></url>\n<url><loc>https://ionicframework.com/integrations/native-keyboard</loc><priority>0.95</priority></url>\n<url><loc>https://ionicframework.com/integrations/native-page-transitions</loc><priority>0.95</priority></url>\n<url><loc>https://ionicframework.com/integrations/native-storage</loc><priority>0.95</priority></url>\n<url><loc>https://ionicframework.com/integrations/network</loc><priority>0.95</priority></url>\n<url><loc>https://ionicframework.com/integrations/network-interface</loc><priority>0.95</priority></url>\n<url><loc>https://ionicframework.com/integrations/open-native-settings</loc><priority>0.95</priority></url>\n<url><loc>https://ionicframework.com/integrations/pedometer</loc><priority>0.95</priority></url>\n<url><loc>https://ionicframework.com/integrations/power-management</loc><priority>0.95</priority></url>\n<url><loc>https://ionicframework.com/integrations/safari-view-controller</loc><priority>0.95</priority></url>\n<url><loc>https://ionicframework.com/integrations/screen-orientation</loc><priority>0.95</priority></url>\n<url><loc>https://ionicframework.com/integrations/screenshot</loc><priority>0.95</priority></url>\n<url><loc>https://ionicframework.com/integrations/shake</loc><priority>0.95</priority></url>\n<url><loc>https://ionicframework.com/integrations/sim</loc><priority>0.95</priority></url>\n<url><loc>https://ionicframework.com/integrations/sms</loc><priority>0.95</priority></url>\n<url><loc>https://ionicframework.com/integrations/status-bar</loc><priority>0.95</priority></url>\n<url><loc>https://ionicframework.com/integrations/stepcounter</loc><priority>0.95</priority></url>\n<url><loc>https://ionicframework.com/integrations/taptic-engine</loc><priority>0.95</priority></url>\n<url><loc>https://ionicframework.com/integrations/texthelper</loc><priority>0.95</priority></url>\n<url><loc>https://ionicframework.com/integrations/uid</loc><priority>0.95</priority></url>\n<url><loc>https://ionicframework.com/integrations/unique-device-id</loc><priority>0.95</priority></url>\n<url><loc>https://ionicframework.com/integrations/uptime</loc><priority>0.95</priority></url>\n<url><loc>https://ionicframework.com/integrations/urihelper</loc><priority>0.95</priority></url>\n<url><loc>https://ionicframework.com/integrations/user-agent</loc><priority>0.95</priority></url>\n<url><loc>https://ionicframework.com/integrations/vibration</loc><priority>0.95</priority></url>\n<url><loc>https://ionicframework.com/integrations/web-intent</loc><priority>0.95</priority></url>\n<url><loc>https://ionicframework.com/integrations/web-server</loc><priority>0.95</priority></url>\n<url><loc>https://ionicframework.com/integrations/webengage</loc><priority>0.95</priority></url>\n<url><loc>https://ionicframework.com/integrations/zeroconf</loc><priority>0.95</priority></url>\n<url><loc>https://ionicframework.com/integrations/zip</loc><priority>0.95</priority></url>\n<url><loc>https://ionicframework.com/integrations/backlight</loc><priority>0.95</priority></url>\n<url><loc>https://ionicframework.com/integrations/hotspot</loc><priority>0.95</priority></url>\n<url><loc>https://ionicframework.com/integrations/hypertrack</loc><priority>0.95</priority></url>\n<url><loc>https://ionicframework.com/integrations/native-ringtones</loc><priority>0.95</priority></url>\n<url><loc>https://ionicframework.com/integrations/navigation-bar</loc><priority>0.95</priority></url>\n<url><loc>https://ionicframework.com/integrations/siri-shortcuts</loc><priority>0.95</priority></url>\n<url><loc>https://ionicframework.com/integrations/regula-document-reader</loc><priority>0.95</priority></url>\n<url><loc>https://ionicframework.com/integrations/text-to-speech</loc><priority>0.95</priority></url>\n<url><loc>https://ionicframework.com/integrations/speechkit</loc><priority>0.95</priority></url>\n<url><loc>https://ionicframework.com/integrations/speech-recognition</loc><priority>0.95</priority></url>\n<url><loc>https://ionicframework.com/integrations/openalpr</loc><priority>0.95</priority></url>\n<url><loc>https://ionicframework.com/integrations/abbyy-real-time-recognition</loc><priority>0.95</priority></url>\n<url><loc>https://ionicframework.com/integrations/aes256</loc><priority>0.95</priority></url>\n<url><loc>https://ionicframework.com/integrations/fingerprint-aio</loc><priority>0.95</priority></url>\n<url><loc>https://ionicframework.com/integrations/pin-check</loc><priority>0.95</priority></url>\n<url><loc>https://ionicframework.com/integrations/pin-dialog</loc><priority>0.95</priority></url>\n<url><loc>https://ionicframework.com/integrations/secure-storage</loc><priority>0.95</priority></url>\n<url><loc>https://ionicframework.com/integrations/in-app-purchase-2</loc><priority>0.95</priority></url>\n<url><loc>https://ionicframework.com/integrations/fabric-answers</loc><priority>0.95</priority></url>\n<url><loc>https://ionicframework.com/integrations/app-update</loc><priority>0.95</priority></url>\n<url><loc>https://ionicframework.com/integrations/hot-code-push</loc><priority>0.95</priority></url>\n<url><loc>https://ionicframework.com/integrations/code-push</loc><priority>0.95</priority></url>\n<url><loc>https://ionicframework.com/integrations/qqsdk</loc><priority>0.95</priority></url>\n<url><loc>https://ionicframework.com/integrations/firebase-config</loc><priority>0.95</priority></url>\n<url><loc>https://ionicframework.com/integrations/firebase-dynamic-links</loc><priority>0.95</priority></url>\n<url><loc>https://ionicframework.com/integrations/local-notifications</loc><priority>0.95</priority></url>\n<url><loc>https://ionicframework.com/integrations/push</loc><priority>0.95</priority></url>\n<url><loc>https://ionicframework.com/integrations/blinkup</loc><priority>0.95</priority></url>\n<url><loc>https://ionicframework.com/integrations/ble</loc><priority>0.95</priority></url>\n<url><loc>https://ionicframework.com/integrations/bluetooth-serial</loc><priority>0.95</priority></url>\n<url><loc>https://ionicframework.com/integrations/bluetoothle</loc><priority>0.95</priority></url>\n<url><loc>https://ionicframework.com/integrations/estimote-beacons</loc><priority>0.95</priority></url>\n<url><loc>https://ionicframework.com/integrations/ibeacon</loc><priority>0.95</priority></url>\n<url><loc>https://ionicframework.com/integrations/nfc</loc><priority>0.95</priority></url>\n<url><loc>https://ionicframework.com/integrations/printer</loc><priority>0.95</priority></url>\n<url><loc>https://ionicframework.com/integrations/sensors</loc><priority>0.95</priority></url>\n<url><loc>https://ionicframework.com/integrations/serial</loc><priority>0.95</priority></url>\n<url><loc>https://ionicframework.com/integrations/starprnt</loc><priority>0.95</priority></url>\n<url><loc>https://ionicframework.com/integrations/social-sharing</loc><priority>0.95</priority></url>\n<url><loc>https://ionicframework.com/integrations/hockeyapp</loc><priority>0.95</priority></url>\n<url><loc>https://ionicframework.com/integrations/crashlytics</loc><priority>0.95</priority></url>\n<url><loc>https://ionicframework.com/integrations/ionic-package</loc><priority>0.95</priority></url>\n<url><loc>https://ionicframework.com/integrations/firebase-analytics</loc><priority>0.95</priority></url>\n<url><loc>https://ionicframework.com/integrations/flurry-analytics</loc><priority>0.95</priority></url>\n<url><loc>https://ionicframework.com/integrations/branchlo</loc><priority>0.95</priority></url>\n<url><loc>https://ionicframework.com/integrations/appsflyer</loc><priority>0.95</priority></url>\n<url><loc>https://ionicframework.com/integrations/app-center-push</loc><priority>0.95</priority></url>\n<url><loc>https://ionicframework.com/integrations/app-center-crashes</loc><priority>0.95</priority></url>\n<url><loc>https://ionicframework.com/integrations/app-center-analytics</loc><priority>0.95</priority></url>\n<url><loc>https://ionicframework.com/integrations/sqlite-porter</loc><priority>0.95</priority></url>\n<url><loc>https://ionicframework.com/integrations/sqlite-db-copy</loc><priority>0.95</priority></url>\n<url><loc>https://ionicframework.com/integrations/tealium</loc><priority>0.95</priority></url>\n<url><loc>https://ionicframework.com/integrations/google-nearby</loc><priority>0.95</priority></url>\n<url><loc>https://ionicframework.com/integrations/google-play-games-services</loc><priority>0.95</priority></url>\n<url><loc>https://ionicframework.com/integrations/fcm-firebase-cloud-messaging</loc><priority>0.95</priority></url>\n<url><loc>https://ionicframework.com/integrations/firebase-messaging</loc><priority>0.95</priority></url>\n<url><loc>https://ionicframework.com/integrations/onesignal</loc><priority>0.95</priority></url>\n<url><loc>https://ionicframework.com/integrations/phonegap-local-notification</loc><priority>0.95</priority></url>\n<url><loc>https://ionicframework.com/integrations/clevertap</loc><priority>0.95</priority></url>\n<url><loc>https://ionicframework.com/integrations/intercom</loc><priority>0.95</priority></url>\n<url><loc>https://ionicframework.com/integrations/mixpanel</loc><priority>0.95</priority></url>\n<url><loc>https://ionicframework.com/integrations/alipay</loc><priority>0.95</priority></url>\n<url><loc>https://ionicframework.com/integrations/apple-pay</loc><priority>0.95</priority></url>\n<url><loc>https://ionicframework.com/integrations/apple-wallet</loc><priority>0.95</priority></url>\n<url><loc>https://ionicframework.com/integrations/paypal</loc><priority>0.95</priority></url>\n<url><loc>https://ionicframework.com/integrations/braintree</loc><priority>0.95</priority></url>\n<url><loc>https://ionicframework.com/integrations/card-io</loc><priority>0.95</priority></url>\n<url><loc>https://ionicframework.com/integrations/stripe</loc><priority>0.95</priority></url>\n<url><loc>https://ionicframework.com/integrations/intel-security</loc><priority>0.95</priority></url>\n<url><loc>https://ionicframework.com/integrations/android-fingerprint-auth</loc><priority>0.95</priority></url>\n<url><loc>https://ionicframework.com/integrations/touch-id</loc><priority>0.95</priority></url>\n<url><loc>https://ionicframework.com/integrations/keychain-touch-id</loc><priority>0.95</priority></url>\n<url><loc>https://ionicframework.com/integrations/keychain</loc><priority>0.95</priority></url>\n<url><loc>https://ionicframework.com/integrations/facebook</loc><priority>0.95</priority></url>\n<url><loc>https://ionicframework.com/integrations/google-plus</loc><priority>0.95</priority></url>\n<url><loc>https://ionicframework.com/integrations/instagram</loc><priority>0.95</priority></url>\n<url><loc>https://ionicframework.com/integrations/linkedin</loc><priority>0.95</priority></url>\n<url><loc>https://ionicframework.com/integrations/pinterest</loc><priority>0.95</priority></url>\n<url><loc>https://ionicframework.com/integrations/twitter-connect</loc><priority>0.95</priority></url>\n<url><loc>https://ionicframework.com/integrations/ms-activedirectory-ms-adal</loc><priority>0.95</priority></url>\n<url><loc>https://ionicframework.com/integrations/sqlite</loc><priority>0.95</priority></url>\n<url><loc>https://ionicframework.com/integrations/identity-vault</loc><priority>0.95</priority></url>\n<url><loc>https://ionicframework.com/integrations/alan</loc><priority>0.95</priority></url>\n<url><loc>https://ionicframework.com/integrations/firebase</loc><priority>0.95</priority></url>\n<url><loc>https://ionicframework.com/integrations/aws-x-ray</loc><priority>0.95</priority></url>\n<url><loc>https://ionicframework.com/integrations/offline-storage</loc><priority>0.95</priority></url>\n<url><loc>https://ionicframework.com/integrations/auth-connect</loc><priority>0.95</priority></url>\n<url><loc>https://ionicframework.com/integrations/aws-amplify</loc><priority>0.95</priority></url>\n<url><loc>https://ionicframework.com/integrations/couchbase-lite</loc><priority>0.95</priority></url>\n<url><loc>https://ionicframework.com/ioniconf</loc><priority>0.97</priority></url>\n<url><loc>https://ionicframework.com/jobs</loc><changefreq>weekly</changefreq><priority>0.96</priority></url>\n<url><loc>https://ionicframework.com/login</loc><priority>0.95</priority></url>\n<url><loc>https://ionicframework.com/logout</loc><priority>0.95</priority></url>\n<url><loc>https://ionicframework.com/native</loc><priority>0.95</priority></url>\n<url><loc>https://ionicframework.com/press</loc><changefreq>weekly</changefreq><priority>0.96</priority></url>\n<url><loc>https://ionicframework.com/pricing</loc><changefreq>weekly</changefreq><priority>0.98</priority></url>\n<url><loc>https://ionicframework.com/privacy</loc><priority>0.95</priority></url>\n<url><loc>https://ionicframework.com/pro/contact</loc><priority>0.95</priority></url>\n<url><loc>https://ionicframework.com/pro/deploy</loc><priority>0.95</priority></url>\n<url><loc>https://ionicframework.com/pro/package</loc><priority>0.95</priority></url>\n<url><loc>https://ionicframework.com/pwa</loc><changefreq>weekly</changefreq><priority>0.98</priority></url>\n<url><loc>https://ionicframework.com/react</loc><priority>0.98</priority></url>\n<url><loc>https://ionicframework.com/sales</loc><changefreq>weekly</changefreq><priority>0.96</priority></url>\n<url><loc>https://ionicframework.com/signup</loc><priority>0.95</priority></url>\n<url><loc>https://ionicframework.com/start</loc><priority>0.95</priority></url>\n<url><loc>https://ionicframework.com/startups</loc><changefreq>weekly</changefreq><priority>0.96</priority></url>\n<url><loc>https://ionicframework.com/support</loc><changefreq>weekly</changefreq><priority>0.96</priority></url>\n<url><loc>https://ionicframework.com/survey/2017</loc><priority>0.95</priority></url>\n<url><loc>https://ionicframework.com/survey/2018</loc><priority>0.95</priority></url>\n<url><loc>https://ionicframework.com/survey/2020</loc><priority>0.95</priority></url>\n<url><loc>https://ionicframework.com/team</loc><changefreq>weekly</changefreq><priority>0.96</priority></url>\n<url><loc>https://ionicframework.com/tos</loc><priority>0.95</priority></url>\n<url><loc>https://ionicframework.com/translate</loc><priority>0.95</priority></url>\n<url><loc>https://ionicframework.com/trusted-partners</loc><changefreq>weekly</changefreq><priority>0.96</priority></url>\n<url><loc>https://ionicframework.com/values</loc><changefreq>weekly</changefreq><priority>0.96</priority></url>\n<url><loc>https://ionicframework.com/press/release/2017/dev-survey-says-the-web-is-wining-in-mobile-dev</loc><priority>0.95</priority></url>\n<url><loc>https://ionicframework.com/press/release/2017/ionic-brings-powerful-app-development-suite-to-teams-and-enterprises</loc><priority>0.95</priority></url>\n<url><loc>https://ionicframework.com/press/release/2019/latest-version-of-ionic-provides-universal-design-system-for-enterprises</loc><priority>0.95</priority></url>\n<url><loc>https://ionicframework.com/press/release/2019/ionic-framework-4-release</loc><priority>0.95</priority></url>\n<url><loc>https://ionicframework.com/press/release/2019/ionic-alan-announce-integration</loc><priority>0.95</priority></url>\n<url><loc>https://ionicframework.com/press/release/2020/ionic-achieves-record-revenue-growth-in-2019</loc><priority>0.95</priority></url>\n<url><loc>https://ionicframework.com/press/release/2020/ionic-5-brings-major-design-updates</loc><priority>0.95</priority></url>\n<url><loc>https://ionicframework.com/press/release/2020/capacitor-adds-support-for-swift-5-and-android-10-securty-performance</loc><priority>0.95</priority></url>\n</urlset>\n"
  },
  {
    "path": "debug.log",
    "content": "[1015/103933.655:ERROR:directory_reader_win.cc(43)] FindFirstFile: The system cannot find the path specified. (0x3)\n"
  },
  {
    "path": "package.json",
    "content": "{\n  \"name\": \"ionic-site\",\n  \"version\": \"1.0.0\",\n  \"description\": \"Ionic Framework main site - IonicFramework.com\",\n  \"scripts\": {\n    \"build\": \"node_modules/.bin/gulp build\",\n    \"dev\": \"node_modules/.bin/gulp watch\",\n    \"start\": \"node_modules/.bin/gulp watch\",\n    \"heroku-postbuild\": \"node_modules/.bin/gulp build && node_modules/.bin/gulp slugPrep\",\n    \"stencil-build\": \"node_modules/.bin/stencil build\",\n    \"stencil-dev\": \"node_modules/.bin/sd concurrent \\\"node_modules/.bin/stencil build --dev --watch\\\" \\\"node_modules/.bin/stencil-dev-server\\\" \",\n    \"stencil-serve\": \"node_modules/.bin/stencil-dev-server\",\n    \"stencil-start\": \"npm run dev\",\n    \"stencil-prepublish\": \"npm run build\"\n  },\n  \"engines\": {\n    \"node\": \"16.x.x\"\n  },\n  \"browserslist\": [\n    \"last 1 version\",\n    \"> 1%\",\n    \"IE 10\"\n  ],\n  \"cacheDirectories\": [\n    \"node_modules\"\n  ],\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"https://github.com/ionic-team/ionic-site\"\n  },\n  \"license\": \"Apache-2.0\",\n  \"bugs\": {\n    \"url\": \"https://github.com/ionic-team/ionic-site/issues\"\n  },\n  \"homepage\": \"https://github.com/ionic-team/ionic-site\",\n  \"dependencies\": {\n    \"@ionic-internal/ionic-ds\": \"^2.0.6\",\n    \"@ionic/core\": \"5.1.0\",\n    \"@sentry/node\": \"^5.11.0\",\n    \"@stencil/core\": \"1.17.3\",\n    \"@stencil/sass\": \"1.1.1\",\n    \"@stencil/utils\": \"latest\",\n    \"@types/node\": \"13.1.6\",\n    \"body-parser\": \"^1.19.0\",\n    \"bootstrap-sass\": \"3.4.1\",\n    \"browser-sync\": \"^2.26.7\",\n    \"c3\": \"^0.7.15\",\n    \"compression\": \"^1.7.4\",\n    \"cookie-parser\": \"^1.4.4\",\n    \"cookies\": \"^0.8.0\",\n    \"del\": \"^5.1.0\",\n    \"dotenv\": \"^8.2.0\",\n    \"emoji-datasource-twitter\": \"^5.0.1\",\n    \"event-stream\": \"^4.0.1\",\n    \"express\": \"^4.17.1\",\n    \"express-ab\": \"^0.7.4\",\n    \"express-limiter\": \"^1.6.1\",\n    \"express-sanitizer\": \"^1.0.5\",\n    \"front-matter\": \"^3.1.0\",\n    \"gsap\": \"^2.1.3\",\n    \"gulp\": \"^4.0.2\",\n    \"gulp-autoprefixer\": \"7.0.1\",\n    \"gulp-cache-bust\": \"^1.4.1\",\n    \"gulp-clean-css\": \"^4.2.0\",\n    \"gulp-concat\": \"^2.6.1\",\n    \"gulp-footer\": \"^2.0.2\",\n    \"gulp-header\": \"^2.0.9\",\n    \"gulp-load-plugins\": \"^2.0.2\",\n    \"gulp-nodemon\": \"^2.4.2\",\n    \"gulp-rename\": \"^2.0.0\",\n    \"gulp-sass\": \"^5.1.0\",\n    \"gulp-size\": \"^3.0.0\",\n    \"gulp-sourcemaps\": \"^2.6.5\",\n    \"gulp-uglify-es\": \"^2.0.0\",\n    \"helmet\": \"^3.21.2\",\n    \"http-proxy-middleware\": \"^1.0.0\",\n    \"hubspot\": \"^2.3.6\",\n    \"ionicons\": \"5.2.0\",\n    \"jquery\": \"3.5.0\",\n    \"jsforce\": \"1.9.3\",\n    \"lodash\": \"4.17.15\",\n    \"marked\": \"^0.8.0\",\n    \"moment\": \"^2.24.0\",\n    \"node-sass\": \"^7.0.1\",\n    \"nunjucks\": \"^3.2.0\",\n    \"nunjucks-date-filter\": \"^0.1.1\",\n    \"prismic-dom\": \"^2.2.3\",\n    \"prismic-javascript\": \"^2.7.1\",\n    \"prismjs\": \"^1.19.0\",\n    \"redis\": \"^2.8.0\",\n    \"request\": \"^2.88.0\",\n    \"rollup-plugin-node-polyfills\": \"^0.2.1\",\n    \"sendgrid\": \"^5.2.3\",\n    \"shortid\": \"^2.2.15\",\n    \"throng\": \"^4.0.0\",\n    \"twilio\": \"^3.39.2\",\n    \"twitter\": \"^1.7.1\",\n    \"typed.js\": \"^2.0.11\"\n  },\n  \"module\": \"dist/js/stencil/esm/index.js\",\n  \"main\": \"dist/js/stencil/index.js\",\n  \"types\": \"dist/js/stencil/types/components.d.ts\",\n  \"collection\": \"dist/js/stencil/collection/collection-manifest.json\",\n  \"devDependencies\": {\n    \"@types/prismjs\": \"^1.16.0\"\n  }\n}\n"
  },
  {
    "path": "scripts/deploy_staging.sh",
    "content": "#!/bin/bash\n\nARG_DEFS=(\n  # \"--index=(.*)\"\n  # \"--total=(.*)\"\n)\n\nfunction deploy {\n\n  echo \"Committing to production branch\"\n  cd ./_site\n  git config --global user.email \"hi@ionicframework.com\"\n  git config --global user.name \"ionitron\"\n  git add . --all\n  git commit -m \"automated build of driftyco/$CIRCLE_PROJECT_REPONAME@$CIRCLE_SHA1\"\n\n  echo \"Pushing production branch to origin\"\n  # in case a different commit was pushed to ionic-site during doc/demo gen,\n  # try to rebase around it before pushing\n  git fetch\n  git rebase\n  git push origin production\n  cd ..\n\n  #echo \"Cleaning up\"\n  #rm -R _site\n}\n\nif [ -d \"scripts\" ]; then\n  deploy\nfi\n"
  },
  {
    "path": "scripts/gulp-tasks.js",
    "content": "var babel = require('gulp-babel');\n\n\nmodule.exports = function(gulp, flags) {\n\n  gulp.task('demos', function(){\n    return gulp.src([\n        '../demos/**',\n      ])\n      .pipe(babel)\n      .pipe(gulp.dest('content/test'));\n  });\n\n}\n"
  },
  {
    "path": "scripts/linkchecker.sh",
    "content": "#!/bin/bash\n\nARG_DEFS=(\n  # \"--index=(.*)\"\n  # \"--total=(.*)\"\n)\n\nfunction runlinkchecker {\n  echo \"Starting linkchecker\"\n  pip install LinkChecker\n  cd _site\n  python -m SimpleHTTPServer 3000 &> /dev/null &\n  pid=$!\n  linkchecker http://localhost:3000 -ohtml --timeout=5 --ignore-url=^mailto > linkchecker.html\n  kill $pid\n  sed -i -e 's/localhost:8000/ionic-site-staging.herokuapp.com/g' linkchecker.html\n  rm -r venv\n  cd ..\n}\n\nif [ -d \"scripts\" ]; then\n  runlinkchecker\nfi\n"
  },
  {
    "path": "scripts/prepare.sh",
    "content": "#!/bin/bash\n\nARG_DEFS=(\n  # \"--index=(.*)\"\n  # \"--total=(.*)\"\n)\n\nfunction clone_site {\n  PROD_DIR=\"_site\"\n\n  if [ ! -d \"$PROD_DIR\" ]; then\n    echo \"Cloning ionic-site in _site\"\n    mkdir $PROD_DIR\n    cd $PROD_DIR\n\n\n    git config --global user.email \"hi@ionicframework.com\"\n    git config --global user.name \"ionitron\"\n\n    git clone --depth 1 --branch=production git@github.com:driftyco/ionic-site.git .\n    cd ..\n  else\n    echo \"using existing\"\n    cd $PROD_DIR\n    git fetch origin production\n    git reset --hard\n    git clean -df\n    git pull origin production\n  fi\n}\n\nfunction buildforjekyll {\n  echo \"Building site with jekyll\"\n  #jekyll build --incremental\n  jekyll build\n}\n\nif [ -d \"scripts\" ]; then\n  clone_site\n  buildforjekyll\nfi\n"
  },
  {
    "path": "scripts/preview-app/webpack.config.js",
    "content": "var path = require('path');\n\nmodule.exports = {\n  entry: [\n    path.normalize('es6-shim/es6-shim.min'),\n    'reflect-metadata',\n    'web-animations.min',\n    path.normalize('zone.js/dist/zone-microtask'),\n  ],\n  module: {\n    loaders: [\n      {\n        test: /\\.ts$/,\n        loader: \"awesome-typescript-loader\",\n        query: {\n          'doTypeCheck': false\n        },\n        include: /\\/demos\\//,\n        exclude: /node_modules/\n      },\n      {\n        test: /\\.js$/,\n        include: path.resolve('node_modules/angular2'),\n        loader: 'strip-sourcemap'\n      }\n    ],\n    noParse: [\n      /es6-shim/,\n      /reflect-metadata/,\n      /web-animations/,\n      /zone\\.js(\\/|\\\\)dist(\\/|\\\\)zone-microtask/\n    ]\n  },\n  resolve: {\n    alias: {\n      'ionic': path.normalize(process.cwd() + '/dist'),\n      'web-animations.min': path.normalize(process.cwd() + '/dist/js/web-animations.min')\n    },\n    extensions: [\"\", \".js\", \".ts\"]\n  }\n};\n\n"
  },
  {
    "path": "scripts/sitemappings.json",
    "content": "[\n  {\n    \"pages\": [ \"index.html\" ],\n    \"changefreq\": \"weekly\",\n    \"priority\": 1\n  },\n  {\n    \"pages\": [ \"pro/*.html\" ],\n    \"changefreq\": \"monthly\",\n    \"priority\": 0.9\n  },\n  {\n    \"pages\": [ \"pro/pricing/index.html\" ],\n    \"changefreq\": \"monthly\",\n    \"priority\": 0.9\n  },\n  {\n    \"pages\": [ \"enterprise/*\" ],\n    \"changefreq\": \"monthly\",\n    \"priority\": 0.8\n  },\n  {\n    \"pages\": [ \"*.html\" ],\n    \"changefreq\": \"monthly\",\n    \"priority\": 0.7\n  }\n]\n"
  },
  {
    "path": "scripts/test.sh",
    "content": "#!/bin/bash\n\n\nif [ -d \"scripts\" ]; then\n  echo \"Running build\"\n  ./node_modules/.bin/gulp build-prep\n  ./node_modules/.bin/gulp jekyll-build.clean\nfi\n"
  },
  {
    "path": "server/config.js",
    "content": "module.exports = {\n\n  // Services\n  PORT: int(process.env.PORT) || 3000,\n  PROD: bool(process.env.PROD) || false,\n  WEB_CONCURRENCY: int(process.env.WEB_CONCURRENCY) || 1,\n\n  // Ionic API and Appflow dashboard\n  API_URL: process.env.API_URL || 'https://api.ionicjs.com',\n  DASHBOARD_URL: process.env.DASHBOARD_URL || 'https://dashboard.ionicframework.com',\n\n  // CloudFlare\n  CF_TOKEN: process.env.CF_TOKEN || null,\n  CF_ZONE: process.env.CF_ZONE || null,\n\n  // Redis\n  REDIS_URL: process.env.REDIS_URL || null,\n\n  // Sendgrid Email\n  SENDGRID_APIKEY: process.env.SENDGRID_APIKEY || '',\n\n  // Pipedrive CRM\n  PIPEDRIVE_TOKEN: process.env.PIPEDRIVE_TOKEN || null,\n\n  // SALESFORCE CRM\n  SALESFORCE_USER: process.env.SALESFORCE_USER || null,\n  SALESFORCE_PASSWORD_TOKEN: process.env.SALESFORCE_PASSWORD_TOKEN || null,\n\n  // Sentry error tracking\n  SENTRY_DSN: process.env.SENTRY_DSN || null,\n  SENTRY_ENVIRONMENT: process.env.SENTRY_ENVIRONMENT || null,\n\n  // Twilio text messaging\n  TWILIO_SID: process.env.TWILIO_SID || null,\n  TWILIO_AUTH_TOKEN: process.env.TWILIO_AUTH_TOKEN || null,\n  TWILIO_NUMBER: process.env.TWILIO_NUMBER || '(415) 214-8179',\n\n  // Twitter\n  TWITTER_CONSUMER_KEY: process.env.TWITTER_CONSUMER_KEY || null,\n  TWITTER_CONSUMER_SECRET: process.env.TWITTER_CONSUMER_SECRET || null,\n  TWITTER_ACCESS_TOKEN_KEY: process.env.TWITTER_ACCESS_TOKEN_KEY || null,\n  TWITTER_ACCESS_TOKEN_SECRET: process.env.TWITTER_ACCESS_TOKEN_SECRET || null,\n\n  HUBSPOT_ACCESS_TOKEN: process.env.HUBSPOT_ACCESS_TOKEN || null,\n\n  PRISMIC_ENDPOINT: process.env.PRISMIC_ENDPOINT ||\n    'https://ionicframeworkcom.prismic.io/api/v2',\n  PRISMIC_PREVIEW: bool(process.env.PRISMIC_PREVIEW) || false,\n\n  RECAPTCHA_SECRET: process.env.RECAPTCHA_SECRET\n};\n\nfunction bool(str) {\n  if (str == void 0) {\n    return false;\n  }\n  return str.toLowerCase() === 'true';\n}\n\nfunction int(str) {\n  if (!str) {\n    return 0;\n  }\n  return parseInt(str, 10);\n}\n\nfunction float(str) {\n  if (!str) {\n    return 0;\n  }\n  return parseFloat(str, 10);\n}\n"
  },
  {
    "path": "server/controllers/contactCtrl.js",
    "content": "const config    = require('../config');\nconst tools     = require('../tools');\nconst sg = require('sendgrid')(config.SENDGRID_APIKEY);\n\nmodule.exports = function(req, res) {\n  var cleanForm = {}\n  for (var p in req.body) {\n    if (req.body.hasOwnProperty(p)) {\n      clean[req.sanitize(p)] = req.sanitize(\n        req.body[p].value ? req.body[p].value : req.body[p]\n      );\n    }\n  }\n\n  var promises = [];\n  var form = cleanForm;\n\n  var m = {\n    to: [\n      'brody@ionic.io',\n      'joe@ionic.io',\n      'matt@ionic.io',\n      'swami@ionic.io',\n      'andrew@ionic.io',\n      'ryan@ionic.io',\n      'perry@ionic.io',\n      'stephen@ionic.io'\n    ],\n    from: 'sales@ionic.io',\n    name: 'Ionic Sales',\n    subject: 'Ionic Website Submission - ' + form.page,\n    body: objToString(form)\n  };\n\n  // send email to sales team\n  promises.push(new Promise((resolve, reject) => {\n    tools.email(m.to, m.from, m.name, m.subject, m.body).then(function() {\n      resolve();\n    }, function(err) {\n      reject();\n    });\n  }));\n\n  // add user to SalesForce\n  promises.push(tools.addSalesForceLead(form));\n\n  // thank the user for contacting us\n  if ( form.page != 'ebook-hybrid-v-native') {\n    promises.push(tools.sendThankYouForContacting(form.email));\n  }\n\n  // relfect because we want to show the page even if one of the tasks error\n  Promise.all(promises.map(reflect)).then(values => {\n    // send the user back to where they came from based on form_name\n    // console.log('gets here')\n    let message = 'Thanks! We’ve received your info and a member of our team will get in touch soon.';\n    if (req.body.page === 'ebook-hybrid-v-native') {\n      message = 'Enjoy reading your copy of the eBook. It is on its way to your inbox!';\n    }\n    res.json({ ok: true, message: message });\n    // res.render('enterprise/index');\n  });\n}\n\nfunction reflect(promise) {\n  return promise.then(function(v) { return {v: v, status: 'resolved'};},\n                      function(e) { return {e: e, status: 'rejected'};});\n}\n\nfunction objToString(obj) {\n  var str = '';\n  for (var p in obj) {\n    if (obj.hasOwnProperty(p)) {\n      str += cap(p) + ' :: ' + (obj[p].value ? obj[p].value : obj[p]) + '\\n\\r';\n    }\n  }\n  return str;\n};\n\nfunction cap(string) {\n  return string.charAt(0).toUpperCase() + string.slice(1);\n};\n"
  },
  {
    "path": "server/controllers/getformCtrl.js",
    "content": "const config    = require('../config');\nconst Sentry    = require('@sentry/node');\n\nmodule.exports = async function(req, res) {\n  const Hubspot = require('hubspot');\n  const hs = new Hubspot({ accessToken: config.HUBSPOT_ACCESS_TOKEN });\n  \n  try {\n    const form = await hs.forms.getById(req.params.formId);\n  \n    res.json({ \n      id: form.guid,\n      name: form.name,\n      submitText: form.submitText,\n      redirect: form.redirect,\n      formFieldGroups: form.formFieldGroups\n    });\n\n\n  } catch (e) {\n    res.status(e.statusCode).json({ error: e.error });\n  }\n}\n"
  },
  {
    "path": "server/controllers/hsblockedCtrl.js",
    "content": "const config    = require('../config');\nconst Sentry    = require('@sentry/node');\n\nmodule.exports = function(req, res) {\n  // console.log(req.body);\n\n  const scriptType = req.body.type || 'form';\n  let message = `Hubspot ${scriptType} Blocked`\n\n  if (!!req.cookies['hubspotutk']) {\n    message = `Hubspot ${scriptType} script slow to load.`\n  }\n  \n  const x = Sentry.captureMessage(message)\n  res.json({ ok: true, message: `Response ID ${x}` });\n}"
  },
  {
    "path": "server/controllers/hsconvertedCtrl.js",
    "content": "const config    = require('../config');\nconst Hubspot = require('hubspot');\nconst hs = new Hubspot({ accessToken: config.HUBSPOT_ACCESS_TOKEN });\n\nmodule.exports = async function(req, res) {\n\n  const respond = found => {\n    res.json({found});\n  }\n\n  try {\n    const contact = await hs.contacts.getByToken(\n      req.params.hsutk ||\n      req.cookies['hubspotutk']\n    );\n\n    if (!contact || !contact['list-memberships']) return;\n\n    let found = false;\n    contact['list-memberships'].forEach(list => {\n      if (list['static-list-id'] == req.params.listId) {\n        found = true;\n      }\n    });\n  \n    respond(found);\n\n  } catch (e) {\n    console.error(e);\n    respond(false);\n  }\n}\n"
  },
  {
    "path": "server/controllers/newsletterCtrl.js",
    "content": "const config    = require('../config');\nconst {\n  saveEmailSendGrid,\n  saveEmailHubSpot,\n  addEmailToPodcastList,\n  reflect\n}     = require('../tools');\n\nmodule.exports = function(req, res) {\n\n  const email = req.sanitize(req.body.email);\n  const podcast = req.sanitize(req.body.podcast);\n\n  const opts = {\n    email: email,\n    newsletter_subscriber: 'true'\n  }\n\n  const promises = [\n    saveEmailSendGrid(opts),\n    saveEmailHubSpot(opts)\n  ]\n\n  if (podcast) {\n    promises.push(addEmailToPodcastList(email))\n  }\n\n  // relfect because we want to show the page even if one of the tasks error\n  Promise.all(promises.map(reflect)).then(values => {\n    res.setHeader('Access-Control-Allow-Origin', '*');\n    res.setHeader('Access-Control-Allow-Headers', 'Origin, X-Requested-With, Content-Type, Accept');\n\n    res.removeHeader('Content-Security-Policy');\n    res.removeHeader('X-Content-Security-Policy');\n    res.removeHeader('X-WebKit-CSP');\n\n    res.json({ ok: true, message: `${email} added to newsletter${podcast ? \n      ' and podcast list' : ''}` });\n  });\n}\n\n\n\n"
  },
  {
    "path": "server/controllers/viewCtrl.js",
    "content": "const config    = require('../config');\nconst tools     = require('../tools');\nconst sg = require('sendgrid')(config.SENDGRID_APIKEY);\nif(config.TWILIO_SID && config.TWILIO_AUTH_TOKEN) {\n  var twilio = require('twilio')(config.TWILIO_SID, config.TWILIO_AUTH_TOKEN);\n}\n\nmodule.exports = function(req, res) {\n\n  var promises = [];\n  var phone = req.sanitize(req.body.phone);\n\n//   promises.push(new Promise((resolve, reject) => {\n//     // server doesn't have API keys in local env, ignore\n//     if(!config.SENDGRID_APIKEY) {\n//       console.warn('Sendgrid API key not found. Ignoring email request.');\n//       return resolve(null);\n//     }\n//     var viewEmail = {\n//       method: 'POST',\n//       path: '/v3/mail/send',\n//       body: {\n//         personalizations: [{\n//           to: [{\n//             email:form.email,\n//           }],\n//           name: '',\n//           subject: 'Download Ionic View!',\n//           email: form.email\n//         }],\n//         from: {\n//           email: 'no-reply@ionicframework.com',\n//           name: 'Ionic'\n//         },\n//         content: [{\n//           type: 'text/html',\n//           value: `Click the link below on your mobile device to open Ionic View or direct you to the app store appropriate for your device.\n// https://ionicview.app.link/mORHDUyIMG\n// Cheers,\n// The Ionic Team`\n//         }],\n//         template_id: '0d829c99-54dd-4b68-8ea4-439cbe8785d4',\n//       }\n//     }\n//     sg.API(viewEmail, (error, response) => {\n//       if (error) {\n//         reject(error)\n//         return console.error(error, response.body);\n//       }\n//       resolve(response)\n//     })\n//   }));\n\n  promises.push(new Promise((resolve, reject) => {\n    if (!twilio) {\n      console.warn('Twilio credentials not found. Ignoring email request.');\n      return resolve(null);\n    }\n\n    if (!(/^\\s*(?:\\+?(\\d{1,3}))?([-. (]*(\\d{3})[-. )]*)?((\\d{3})[-. ]*(\\d{2,4})(?:[-.x ]*(\\d+))?)\\s*$/.test(phone))) {\n      console.error('Invalid phone number detected.');\n      res.json({ ok: false, message: 'Invalid Phone Number' });\n      return reject(null);\n    }\n\n    twilio.messages.create({\n      to: phone,\n      from: config.TWILIO_NUMBER,\n      body: \"Download Ionic View at https://ionicview.app.link/mORHDUyIMG\",\n    }, function(err, message) {\n      if (err) {\n        console.error(err)\n        return reject(err);\n      }\n      resolve(message);\n    });\n  }));\n\n  // relfect because we want to show the page even if one of the tasks error\n  Promise.all(promises.map(reflect)).then(values => {\n    res.json({ ok: true, message: 'Message Sent' });\n  });\n}\n\nfunction reflect(promise) {\n  return promise.then(function(v) { return {v: v, status: 'resolved'};},\n                      function(e) { return {e: e, status: 'rejected'};});\n}\n\nfunction objToString(obj) {\n  var str = '';\n  for (var p in obj) {\n    if (obj.hasOwnProperty(p)) {\n      str += cap(p) + ' :: ' + (obj[p].value ? obj[p].value : obj[p]) + '\\n\\r';\n    }\n  }\n  return str;\n};\n\nfunction cap(string) {\n  return string.charAt(0).toUpperCase() + string.slice(1);\n};\n"
  },
  {
    "path": "server/markdown/code-of-conduct.md",
    "content": "<br/>\n<br/>\n\n# Ionic Code of Conduct\n\n<br/>\n<br/>\n\nAs contributors and maintainers of the Ionic project, we pledge to respect everyone who contributes by posting issues, updating documentation, submitting pull requests, providing feedback in comments, and any other activities.\n\n<br/>\n<br/>\nCommunication through any of Ionic's channels (GitHub, Slack, Forum, IRC, mailing lists, Twitter, etc.) must be constructive and never resort to personal attacks, trolling, public or private harassment, insults, or other unprofessional conduct.\n\n<br/>\n<br/>\nWe promise to extend courtesy and respect to everyone involved in this project regardless of gender, gender identity, sexual orientation, disability, age, race, ethnicity, religion, or level of experience. We expect anyone contributing to the Ionic project to do the same.\n\n<br/>\n<br/>\nIf any member of the community violates this code of conduct, the maintainers of the Ionic project may take action, removing issues, comments, and PRs or blocking accounts as deemed appropriate.\n\n<br/>\n<br/>\n\nIf you are subject to or witness unacceptable behavior, or have any other concerns, please email us at [hi@ionicframework.com](mailto:hi@ionicframework.com).\n\n&nbsp;\n\n## Ionic Events\n\n&nbsp;\n\nAdapted from the JSConf Code Of Conduct (http://jsconf.com/codeofconduct.html)\n<br/>\n<br/>\n\nAll delegates, speakers, sponsors and volunteers at any Ionic run/sanctioned event are required to agree with the following code of conduct. Organizers will enforce this code throughout the event.\n<br/>\n<br/>\n\n**The Quick Version**\n<br/>\n<br/>\nIonic is dedicated to providing a harassment-free conference experience for everyone, regardless of gender, gender identity and expression, age, sexual orientation, disability, physical appearance, body size, race, ethnicity, religion (or lack thereof), or technology choices. We do not tolerate harassment of conference participants in any form. Sexual language and imagery is not appropriate for any conference venue, including talks, workshops, parties, Twitter and other online media. Conference participants violating these rules may be sanctioned or expelled from the conference without a refund at the discretion of the conference organisers.\n<br/>\n<br/>\n\n**The Less Quick Version**\n<br/>\n<br/>\nHarassment includes offensive verbal comments related to gender, gender identity and expression, age, sexual orientation, disability, physical appearance, body size, race, ethnicity, religion, technology choices, sexual images in public spaces, deliberate intimidation, stalking, following, harassing photography or recording, sustained disruption of talks or other events, inappropriate physical contact, and unwelcome sexual attention.\nParticipants asked to stop any harassing behavior are expected to comply immediately.\n\n<br/>\n<br/>\nWe expect participants to follow these rules at all conference venues and conference-related social events.\n\n<br/>\n<br/>\nIf you are being harassed, notice that someone else is being harassed, or have any other concerns, please email us at <a href=\"mailto:devrel@ionic.io\">devrel@ionic.io</a>.\n"
  },
  {
    "path": "server/markdown/corona.md",
    "content": "\n&nbsp;\n\nDear Customer,\n\nWe appreciate your concern in this time of uncertainty, as individuals and companies alike are feeling the impact of the coronavirus (COVID-19). Our hearts go out to everyone affected by this pandemic, and we are committed to doing everything we can to ensure the safety of customers and employees.\n\nWe understand the continuity of your business and the ability to offer mobile resources is more important than ever. Ionic is committed to continuing to provide the highest quality products and services on which your business depends. We set out with the mission to reduce the barriers of mobile app building, making it cheaper and easier to extend critical applications to your customers and employees. This is our passion, which continues to guide us as we closely monitor, assess and respond to evolving events.\n\nAs a valued client and community member, we would like you rest assured that Ionic is taking the necessary precautions to mitigate an interruption of operations due to the growth of positive cases of the Coronavirus COVID-19. Our leadership is working diligently to maintain policies that will ensure the health and safety of our employees so that we can continue to serve you and maintain our commitment of excellence to your business.\n\n  \n\nFor further detail on our plans, please our response to common questions below:\n\nDoes Ionic have a contingency plan for COVID-19?\n\nEffective March 2, 2020, Ionic began taking precautions to ensure the health and safety of our employees, who are at the core of everything we do. Our history of embracing remote work has made the transition to a fully remote environment seamless. While this does impact some planned events, we expect the impact of our response to COVID-19 on our business services to be minimal. We also offer extended sick leave to any employees should they need it and we have suspended business travel indefinitely. We will continue to comply with the recommendations of the World Health Organization (WHO) and our local health authorities and will change our policies as appropriate.\n\nWe are committed to lessening the potential spread of the virus in our communities, to supporting our employees and their families, and to ensuring we are able to continue serving our customers long-term. Our leadership team will continue to assess the situation in real time and will remain vigilant in our ability to accommodate the evolving environment.\n\nWhat are the chances that Ionic’s operations will be affected?\n\nIonic services our clients through the following products/services:\n\n  \n\n-   Ionic Open Source Framework\n    \n-   Ionic Proprietary Software (Appflow/Enterprise Native/Studio)\n    \n-   Ionic Advisory Services\n    \n\nThese services are developed, maintained and delivered by our stellar employees, which is why it is of chief importance to us to ensure their continued health and safety. We will continue to enforce business policies to give our employees the flexibility they need to ensure they can remain dedicated to providing the highest quality products and services to our loyal customers.\n\n  \n\nWe know our customers work hard to deliver mission critical apps that support the needs of their business. In this time of crisis, we understand these apps are more critical than ever to ensure your employees and customers are able to engage necessary resources from the safety of their homes. Our team continues to be passionate about making it cheaper and easier to make such applications accessible and are dedicated to continuing to support your efforts throughout this journey.\n\n  \n\nWhat is Ionic’s communication strategy through the duration of this pandemic?\n\nIonic is committed to communicating critical updates with our clients and community members. We have posted our strategy [here](https://ionicframework.com/covid-19) and will continue to keep this page updated as our strategy evolves.\n\nWho can I contact for further inquiry?\n\nIf you have additional concerns, please direct further inquiries to tori@ionic.io.\n\nOn behalf of Ionic, we sincerely appreciate your continued loyalty and partnership. Stay healthy!\n\nSincerely,\n\nIonic Leadership"
  },
  {
    "path": "server/markdown/enterprise-license-agreement.md",
    "content": "<p><br></p><p><br></p>\n\n# MASTER LICENSE AGREEMENT\n\n<p><br></p>\n\nTHIS MASTER LICENSE AGREEMENT (the “Agreement”) is made as of \\_\\_\\_\\_\\_\\_\\_\\_\\_ \\_\\_, 202_ (the “Effective Date”)  by and between  **Drifty Co.**  (d/b/a “Ionic”), a Delaware corporation with its principal offices at 121 S. Pinckney St. Suite 300 Madison, WI 53703 (“Drifty”), and \\_\\_\\_\\_\\_\\_\\_\\_\\_\\_\\_\\_\\_\\_\\_\\_, a [____________] [corporation], with a principal place of business located at \\_\\_\\_\\_\\_\\_\\_\\_\\_\\_\\_\\_\\_\\_\\_\\_\\_, \\_\\_\\_\\_\\_\\_\\_\\_\\_\\_\\_\\_\\_\\_\\_, __ _____(“Client”).  The two aforementioned parties shall be referred to throughout this Agreement individually as a “Party” or, collectively, as the “Parties.”\n\n  WHEREAS, Drifty offers proprietary software products, that include certain tools that facilitate the development and design of hybrid mobile applications using certain web technologies, component parts and ancillary applications and analytics, (the “Drifty Software”);\n\nWHEREAS, Drifty desires to make such Drifty Software and Support Services, as well as other potential services available to Client on the terms and conditions described below;\n\nWHEREAS, Client wishes to have the option to purchase, during the term of this Agreement, (i) licenses to certain Drifty Software and (ii) provision of (a) the Support Services and/or (b) the Ionic Advisory by Drifty; and\n\nWHEREAS, the initial such purchase is provided for in the initial order form hereto.\n\nNOW, THEREFORE, for good and valuable consideration, the receipt and sufficiency of which are hereby acknowledged, and in consideration of the mutual covenants and conditions herein contained, the Parties hereto agree as follows.\n\n 1.  **Definitions.** For purposes of this Agreement, these defined terms shall have the following meanings:\n(i) “Authorized Apps” means the number of mobile applications (“apps”) developed by Client using any Drifty Software.\n(ii) “Business-to-Customer App” means any Authorized App for the sole benefit of, and use by, a third-party customer of Client.\n(iii) “Business-to-Enterprise App” means any Authorized App for the sole benefit of, and use by, an employee or contractor of Client.\n(iv) \"Documentation\" means Drifty's user manuals, handbooks, and installation guides relating to the Drifty Software provided by Drifty to Client either electronically or in hard copy form relating to the Drifty Software, in each case, that Drifty makes available to its clients, generally.\n(v) “Internal Business Purposes” means use of the Drifty Software by (i) the employees or contractors of the Client in order to develop mobile applications and (ii) by Supported Users of an Authorized App.\n(vi) “Ionic Advisory” means Drifty’s (i) advice, best practices, integration, architecture review, code analysis and/or (ii) plug-in development services that Drifty offers and Client purchases.\n(vii) “Supported User(s)” means each employee or contractor of Client who Client permits to access or use the Drifty Software and/or Documentation pursuant to Client's license hereunder.\n(viii) “Third-Party Products\" means any third-party products provided with or incorporated into the Drifty Software.\n(ix) \"Updates\" means a release of the Drifty Software that Drifty may make available generally to clients without additional Subscription Fees during the Term, that may be comprised of bug fixes, patches, error corrections or other enhancements or other changes to the user interface, functionality, compatibility, capabilities, performance, efficiency or quality of the Drifty Software, but does not constitute a New Version; \"New Version\" means any release of the Drifty Software that Drifty may, from time to time, release and market generally as a distinct licensed offering, and which Drifty makes generally available to clients at an additional cost.\n\n2. **Orders and Services Packages.  Description of Drifty Software**.\n  \n  2.1\n\n\t- 2.1.1  _Orders_. In order to purchase license(s) to the Drifty Software and/or procure the provision by Drifty of the Ionic Advisory and/or Support Services,  Client shall place orders with Drifty (each an “Order”). The form of Order to be used is attached hereto as Appendix B, and the initial such Order is attached hereto as Appendix B-1. No Order will be binding unless accepted in writing or by e-mail by Drifty.  Any pre-printed terms and conditions that Client may provide in connection with an Order shall be deemed null and void.\n\t- 2.1.2  _Drifty Software_. In consideration of Client’s payment of the fees for the Drifty Software subscription plan that Client has ordered in the applicable Order (the “Package”), on the date that Drifty has accepted such Order (the “Order Effective Date”), Drifty shall be deemed to have granted to Client a non-exclusive, non-transferable, non-assignable, limited right, during the applicable period for which Client has licensed the Package (the “Subscription Term”), to use, via its Supported Users, the Drifty Software during the Subscription Term solely:\n(i) for Client's Internal Business Purposes;\n(ii) within the specific scope and limitations, and for the specific configuration(s), in each case, as specified in the applicable Order for the Package; and\n(iii) for not more than the maximum number of Authorized Apps set forth in the relevant Order.\n\t- 2.1.3  _Documentation_.  In addition to the rights granted in Section 2.1.2 above, on the Order Effective Date, Drifty shall be deemed to have granted to Client the right to use, and make a reasonable number of copies of, the Documentation solely for its Internal Business Purposes in connection with Client's use of the Drifty Software. Any such copy of the Documentation: (x) remains Drifty's exclusive property; (y) is subject to the terms and conditions of this Agreement; and (z) must include all copyright or other proprietary rights notices contained in the original version of the Documentation licensed hereunder.\n\n\t2.2.  _License Restrictions and Limitations_. Except for the licenses granted in Section 2.1.2 above, Client (and each Supported  User) may not use, copy, modify, rent, loan, lease, sublicense, create derivative works from, or distribute, the Drifty Software for any purposes or make the Drifty Software available to any person or entity that is not a Supported User. Drifty grants no rights other than those explicitly granted herein, and Client shall not exceed the scope of its license as set forth herein and in the applicable Order. At any time, Client may submit an Order in order to increase the maximum number of Authorized App or to order an additional Package, which may include a license of Drifty Software products other than those that have been previously ordered. The Fees for such  additional Authorized App or Drifty Software shall be set forth in the applicable Order, and shall include any incremental Support Services and/or Ionic Advisory fees attributable to such additional Authorized App Such additional Authorized App licenses or additional Package(s) will be deemed to commence on Drifty’s written acceptance of the applicable Order. Client shall not at any time, directly or indirectly, (i) copy, modify, or create derivative works of the Drifty Software or the Documentation, in whole or in part; (ii) rent, lease, lend, sell, sublicense, assign, distribute, publish, transfer, or otherwise make available the Drifty Software or the Documentation;  (iii) decompile, disassemble, decode, adapt, or otherwise attempt to derive or gain access to the source code of the Drifty Software, in whole or in part or reverse engineer the Drifty Software or any elements of the Drifty Software; (iv) remove any proprietary notices from the Drifty  Software or the Documentation; or (v) use the Drifty Software in any manner or for any purpose that infringes, misappropriates, or otherwise violates any intellectual property right or other right of any person, or that violates any applicable law.\n\n\t2.3  _Reservation of Rights_. As between Drifty and Client, Drifty (or its licensors) is the sole and exclusive owner, and will retain all right, title and interest in and to the Drifty Software and Updates, including without limitation all of the software comprising any portion thereof and all related services, specifications, Documentation, technical information, corrections, modifications, additions, improvements and enhancements to, and all intellectual property rights in, the foregoing. As between Drifty and Client, any applications developed by Client using the Drifty Software shall be and remain the sole and exclusive property of Client. Drifty reserves all rights not expressly granted to Client in this Agreement. Except for the limited rights and licenses expressly granted under this Agreement, nothing in this Agreement grants, by implication, waiver, estoppel, or otherwise, to Client or any third party any intellectual property rights or other right, title, or interest in or to the Drifty Software, Updates or the Documentation. All techniques, know-how, software, algorithms and methods or rights thereto owned by Drifty as of the Effective Date, developed during the course of the design, development, and provision of the Drifty Software, or which are employed by Drifty in connection with the Drifty Software, shall be and remain the property of Drifty.\n\n\t2.4  _Delivery_. Drifty shall deliver the Drifty Software electronically, or by other means, in Drifty's sole discretion, to Client within three (3) business days following the applicable Order Effective Date.\n\n\t2.5  _Support Services, Training, and Technical Support_.\n\t- 2.5.1  Drifty will provide to each Supported User maintenance and support for the Drifty Software in accordance with  _Appendix A_  and the applicable Order for the Subscription Term (the “Support Services”).\n\t- 2.5.2  Further, in the event that Drifty will be providing any on-boarding or training, such services will be set forth in the applicable accepted Order.\n\n\t2.6  _Ionic Advisory_. In the event that it is include in the applicable accepted Order, Drifty shall provide to Client Ionic Advisory.\n\n\n3.  **Client Responsibilities**\n\n\t3.1  _General_. Client is responsible and liable for all uses of the Drifty Software and Documentation resulting from access provided by Client, directly or indirectly, whether such access or use is permitted by, or in violation of, this Agreement. Without limiting the generality of the foregoing, Client is responsible for all acts and omissions of Supported Users, including any act or omission by a Supported User that would constitute a breach of this Agreement if taken by Client. Client shall make all Supported Users aware of the provisions of this Agreement as applicable to such  Supported User's use of the Drifty Software, and shall cause Supported Users to comply with such provisions.\n\n    - (a)  _Third-Party Products_. Drifty may distribute certain Third-Party Products with the Drifty Software. For purposes of this Agreement, such Third-Party Products are subject to their own license terms. If Client does not agree to abide by the applicable terms for such Third-Party Product, then Client should not install or use such Third-Party Products. The Third-Party Products also include certain open source software. Client understands and acknowledges that such open source software is not licensed to Client pursuant to the provisions of this Agreement and that this Agreement may not be construed to grant any such right and/or license. Client shall have only such rights and/or licenses, if any, to use the open source software as set forth in the licenses thereto.\n\n4.  **Feedback**. If Client or any of its employees or contractors sends or transmits any communications or materials to Drifty by mail, email, telephone, or otherwise, suggesting or recommending changes to the Drifty Software or Documentation, including without limitation, new features or functionality relating thereto, or any comments, questions, suggestions, or the like (\"Feedback\"), Drifty is free to use such Feedback irrespective of any other obligation or limitation between the Parties governing such Feedback. Client hereby assigns to Drifty on Client's behalf, and on behalf of its employees, contractors and/or agents, all right, title, and interest in, and Drifty is free to use, without any attribution or compensation to any party, any ideas, know-how, concepts, techniques, or other intellectual property rights contained in the Feedback, for any purpose whatsoever, although Drifty is not required to use any Feedback.\n\n5.  **Payments**.\n\t5.1  _Fees_. During the Term (as defined in Section 6.1 below), Client will pay Drifty fees as set forth in each accepted Order for the applicable Package (the “Fees”). Unless otherwise expressly provided in an accepted Order, Client shall pay Drifty the Fees in U.S. funds annually in advance via wire transfer or other mutually agreed upon method. If Client fails to pay all undisputed (in good faith) Fees by such time period as is provided in the applicable Order, Drifty may, in addition to its other rights and remedies (including pursuant to Section 6.2 below), impose a late fee equal to the lesser of 1.5% per month or the amount permitted under applicable law, suspend all Support Services, or both, in its discretion.\n\n\t5.2  _Taxes_. Client shall pay or reimburse Drifty for all sales, use, transfer, privilege, excise, and all other taxes and all duties, whether international, national, state or local, however designated, which are levied or imposed specifically by reason of the performance by Drifty under this Agreement; excluding, however, taxes measured by Drifty’s profits, its overall sales, employment and similar taxes incurred in connection with persons performing services for Drifty, and property or other taxes measured in whole or in part by the value of Drifty’s assets.\n\n\t5.3  _Auditing Rights and Required Records_. Client agrees to maintain complete and accurate records in accordance with generally accepted accounting principles during the Term and for a period of three (3) years after the termination of this Agreement with respect to matters necessary for accurately determining amounts due hereunder. Drifty may, at its own expense, on reasonable prior notice, periodically inspect and audit Client's records with respect to matters covered by this Agreement, provided that if such inspection and audit reveals that Client has underpaid Drifty with respect to any amounts due and payable during the Term, Client shall promptly pay the amounts necessary to rectify such underpayment, together with interest in accordance with Section 5.1. Client shall pay for the costs of the audit if the audit determines that Client's underpayment equals or exceeds ten percent (10%) for any quarter. Such inspection and auditing rights will extend throughout the Term of this Agreement and continue for a period of three (3) years after the termination of this Agreement.\n\n6.  **Term and Termination**.\n\n\t6.1  _Term_. The initial term of this Agreement shall be for a period of one (1) year following the Effective Date (the “Initial Term”). Thereafter, this Agreement shall automatically renew for consecutive one (1) year periods unless terminated by written notice by a Party at least thirty (30) days before the expiration of the then-current term (each, a “Renewal Term”, and together with the Initial Term, the “Term”). Except for a termination by Drifty based on a breach hereof by Client, any then-effective Order shall remain in effect for the balance of its then-current Subscription Term.\n\n\t6.2  _Suspension for Cause_. In addition to the terms set forth in Section 6.1, Drifty may suspend Client’s access to any services included in the applicable Package upon written notice in the event that Client exceeds the license limitations described in Section 2.1 or any accepted Order, or if Client fails to pay any amount when due. Further, Client shall reimburse Drifty for all reasonable costs incurred by Drifty in collecting any late payments or interest, including attorneys' fees, court costs, and collection agency fees; and if such failure continues for ten (10) days following written notice thereof, Drifty may prohibit access to the Drifty Software until all past due amounts and interest thereon have been paid, without incurring any obligation or liability to Client or any other person by reason of such prohibition of access to the Drifty Software.\n\n\t6.3  _Termination for Cause_. Except as otherwise provided for herein, either Party may terminate this Agreement (a) upon the material breach by the other Party of this Agreement, provided that the breaching Party shall have thirty (30) days to cure such breach following receipt of written notice unless the breach, by its nature, takes longer than thirty (30) days to cure, in which case the breaching Party shall not be in breach so long as the Party begins to cure the breach within thirty (30) days and diligently completes such cure; (b) upon the cessation of business by either Party or the filing of a petition in bankruptcy (voluntary or involuntary) with respect to a Party, which in the case of an involuntary petition the Party shall have sixty (60) days in which to vacate or stay such petition; or (c) upon the failure by Client to pay any amount due hereunder, provided that Client shall have ten (10) days to cure such monetary breach following receipt of written notice. Notwithstanding the foregoing, in the event that Drifty reasonably determines that a breach of this Agreement is not curable by Client within the applicable cure period set forth herein, Drifty may terminate this Agreement immediately upon written notice to Client and Client shall pay all outstanding fees upon the effective date of termination.\n\n\t6.4  _Effect of Termination_. Upon any termination of this Agreement, all rights and obligations of the Parties under this Agreement will be extinguished, except that (a) the rights and obligations under Sections 1, 2.2, 2.3, 3.1, 4, 5, 6, 9, 10, and 11, will survive the termination of the Agreement, and (b) Client shall pay all unpaid and outstanding fees through the effective date of termination of the Agreement. Notwithstanding anything contained herein to the contrary, except with respect to a termination of this Agreement by either Party pursuant to Section 6.3, any Subscription Term provided in an accepted Order shall survive the termination of this Agreement.\n\n7.  **Warranties; Remedies**.\n\n 7.1  _Mutual Warranties_.  Each Party represents and warrants to the other Party that (i) such Party has the full corporate right, power and authority to enter into this Agreement and to perform its obligations hereunder; (ii) the execution of this Agreement by such Party, and the performance by such Party of its obligations and duties hereunder, do not and will not violate any agreement to which such Party is a Party or by which such Party is otherwise bound; and (iii) when executed and delivered by such Party, this Agreement will constitute the legal, valid and binding obligation of such Party, enforceable against such Party in accordance with its terms.\n\n 7.2  _Drifty Software Limited Warranty_.  Drifty represents and warrants that (i) the  Drifty Software will be provided as stated in this Agreement, will be free from material defects, and will operate in substantial conformance with the Documentation, except for  _de minimis_  non-conformities that do not interfere with the day-to-day operation of the Drifty Software; and (ii) Drifty will use commercially reasonable efforts to make the Drifty Software available in accordance with the terms of this Agreement, and (iii) Ionic Advisory and the Support Services will be performed in a professional and workmanlike manner consistent with industry standards.  THE FOREGOING WARRANTIES DO NOT APPLY, AND DRIFTY DISCLAIMS ALL WARRANTIES, WITH RESPECT TO ANY THIRD-PARTY PRODUCTS. The foregoing warranties do not apply and become null and void if Client breaches any material provision of this Agreement, or if Client , any Supported User, or any other person provided access to the Drifty Software by Client or any Supported User, whether or not in violation of this Agreement: (i) installs or uses the Drifty Software on or in connection with any hardware or software not specified in the Documentation or expressly authorized by Drifty in writing; (ii) modifies or damages the Drifty Software; or (iii) misuses the Drifty Software, including any use of the Drifty Software other than as specified in the Documentation or expressly authorized by Drifty in writing.\n\n 7.3  _Breach of Warranty_. If there is a breach of a warranty in Section 7.2(i) , Drifty shall (i) correct the defect or nonconformance in the Drifty Software so that it operates in substantial conformance with the Documentation; or (ii) replace any defective or non-conforming component of the Drifty Software such that the Drifty Software performs in substantial conformance with the Documentation; or (iii) in the event that Drifty reasonably determines that neither of the foregoing is practicable, terminate the Agreement with respect to the defective or non-conforming component of the Drifty Software and refund all amounts Client has pre-paid to  Drifty  for the defective or non-conforming component of the Drifty Software. If Drifty repairs or replaces the Drifty Software, the warranty will continue to run from the Order Effective Date and not from Client's receipt of the repair or replacement. The foregoing are Client’s sole remedies and Drifty’s exclusive obligations in connection any defect in, or non-conformance of, the Drifty Software during the Term of this Agreement.\n\n8.  **Indemnification**.\n\n\t8.1  Drifty agrees to indemnify and hold harmless Client (its affiliates, subsidiaries, shareholders, officers, directors, employees, contractors, agents and representatives) (together, the “Client Indemnified Parties”) against any finally awarded cost, claim, liability or expense any of the Client Indemnified Parties incur arising out a third party claim that the use of the Drifty Software infringes a copyright, trade secret or United States patent of any third party. The applicable Client Indemnified Party shall provide Drifty written notice of any claim for which it seeks indemnification under this Section; provided, that:  (i) Client notifies the Drifty promptly in writing of any such claim after Client becomes aware of it (provided failure of Client to notify Drifty of any such claim shall not relieve Drifty of its indemnification obligations except to the extent such failure adversely impacts the ability of Drifty to successfully defend against such claim); (ii) Client cooperates with Drifty in all reasonable respects in connection with the investigation and defense of any such claim; (iii) Drifty shall have sole control of the defense of any action on any such claim and all negotiations for its settlement or compromise (provided, however, any settlement requiring any payment by Client or that would otherwise have a material adverse impact upon the business of Client will be subject to the prior written approval of Client). Notwithstanding anything herein to the contrary, Drifty shall have no obligation or liability to Client under this Section 8.1 if any otherwise covered claim is based upon:  (1) use of the Drifty Software in a manner other than that for which it was furnished provided by Drifty; (2) use of the Drifty Software if it has been modified by or for Client in such a way as to cause it to become infringing (3) failure of Client to implement any Update delivered by Drifty to Client that would have avoided such claim; or (4) use of the Drifty Software by Client in conjunction with systems, products or components not furnished by Drifty. The provisions of this Section 8.1 set forth Drifty's exclusive liability, and Client's exclusive remedy, for infringement or other violation of the intellectual property rights of any third party. If the Drifty Software becomes, or likely to become, the subject of any claim, suit, or proceeding arising from or alleging infringement of any third-party intellectual property right, then Drifty will, at its expense, (i) procure for Client the right to continue to use the Drifty Software, (ii) replace or modify the Drifty Software so that it is not infringing, or (iii) if Drifty reasonably determines that neither (i) or (ii) above is reasonably feasible, terminate Client’s license to the Drifty Software and  refund an amortized portion of the fees paid for the Drifty Software.\n\n\t8.2 Client agrees to indemnify, defend and hold harmless Drifty (its affiliates, subsidiaries, shareholders, officers, directors, employees, contractors, agents and representatives) (together, the “Drifty Indemnified Parties”) from and against any cost, claim, liability or expense any of the Drifty Indemnified Parties may incur arising out of Client’s violation of any third party rights or the misappropriation of any Drifty intellectual property; provided, that:  (i) the applicable Drifty Indemnified Party notifies Client in writing of any such claim promptly after the applicable Drifty Indemnified Party becomes aware of it (provided failure of the applicable Drifty Indemnified Party to notify Client of any such claim shall not relieve Client of its indemnification obligations except to the extent such failure adversely impacts the ability of Client to successfully defend against such claim); (ii) the applicable Drifty Indemnified Party cooperates with Client in all reasonable respects in connection with the investigation and defense of any such claim; (iii) Client shall have sole control of the defense of any action on any such claim and all negotiations for its settlement or compromise (provided, however, any settlement requiring any payment by any Drifty Indemnified Party or that would otherwise have a material adverse impact upon the business of any Drifty Indemnified Party will be subject to the prior written approval of Drifty).\n\n\n9.  **Confidential Information**.\n\n\t9.1 Each Party acknowledges and agrees that it (and its subcontractor(s), if any), in performing its obligations under this Agreement, shall have access to or be directly or indirectly exposed to each other’s Confidential Information. Each Party shall hold confidential all Confidential Information and shall not disclose such Confidential Information to third parties nor use the other Party’s Confidential Information for any purpose other than as necessary to perform under this Agreement. Each Party shall use reasonable measures and reasonable efforts to provide protection for each other’s Confidential Information, including measures at least as strict as those each Party uses to protect its own Confidential Information. Such measures shall include, without limitation, requiring employees and independent contractors to sign a non-disclosure agreement before obtaining access to the other Party’s Confidential Information and such other measures as the Party takes to protect its Confidential Information or trade secrets in the course of its business. “Confidential Information” means information in the possession, or under the control of, a Party relating to the technical, marketing, product and/or business affairs or proprietary and trade secret information of that Party in oral, graphic, written, electronic or machine readable form,  source code and information pertaining to usage and design of the Drifty Software, and the terms and conditions of this Agreement.\n\n\t9.2 The foregoing restrictions on disclosure shall not apply to Confidential Information which is (a) already known by the recipient, (b) becomes, through no act or fault of the recipient, publicly known, (c) received by recipient from a third party without a restriction on disclosure or use, (d) independently developed by recipient without reference to the other Party’s Confidential Information or (e) information the disclosure of which is required by a court order or a requirement of a governmental or regulatory authority.\n\n\t9.3 Because of the unique nature of each Party’s proprietary materials, each Party understands and agrees that the other Party will suffer irreparable injury in the event that a Party fails to comply with any of the terms of this Section 9, and that monetary damages may be inadequate to compensate for such breach. Accordingly, each Party agrees that the other Party will, in addition to any other remedies available to it at law or in equity, be entitled to seek injunctive relief, without posting a bond, to enforce the terms of this Agreement against any actual or threatened breach of this Section 9.\n\n10. **Disclaimers of Warranty; Limitation of Liability**.\n\t\n\t10.1 Except as otherwise expressly provided in this Agreement, the Drifty Software is made available by Drifty to Client “AS IS” and “WITH ALL FAULTS, ERRORS, BUGS AND DEFECTS.” Except as otherwise expressly provided (in each case), Drifty makes no representation or warranty of any kind, express or implied, as to the condition, character, nature, capability, performance, security, availability, suitability, title, source or any other characteristic of the Drifty Software or any portion thereof.  EXCEPT AS OTHERWISE EXPRESSLY PROVIDED IN THIS AGREEMENT, DRIFTY HEREBY DISCLAIMS ALL WARRANTIES, EXPRESS OR IMPLIED, WITH RESPECT TO THE DRIFTY SOLUTION OR THIS AGREEMENT, INCLUDING: (A) ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, TITLE OR NON-INFRINGEMENT; (B) ANY IMPLIED WARRANTY ARISING FROM COURSE OF DEALING, COURSE OF PERFORMANCE OR USAGE OF TRADE; OR (C) ANY WARRANTY THAT THE DRIFTY SOLUTION WILL BE SECURE OR ERROR-FREE, WILL MEET CLIENT’S REQUIREMENTS, WILL CONTAIN ANY PARTICULAR FEATURES OR FUNCTIONALITY, WILL ALWAYS BE AVAILABLE, ACCESSIBLE, UNINTERRUPTED, TIMELY OR SECURE, OR OPERATE WITHOUT ERROR.\n\t\n\t10.2  _Limitations of Liability_\n\t - 10.2.1  EXCEPT WITH RESPECT TO DAMAGES OR LIABILITY ARISING FROM (A) A PARTY’S BREACH OF ITS OBLIGATIONS WITH RESPECT TO CONFIDENTIAL INFORMATION OR (B) CLIENT’S MISAPPROPRIATION OF DRIFTY’S INTELLECTUAL PROPERTY, IN NO EVENT SHALL EITHER PARTY BE LIABLE FOR CONSEQUENTIAL, INDIRECT, INCIDENTAL, PUNITIVE, EXEMPLARY OR SPECIAL DAMAGES ARISING OUT OF OR IN CONNECTION WITH THIS AGREEMENT OR THE DRIFTY SOLUTION, INCLUDING ANY LOSS OF REVENUE, PROFITS, OR DATA, EVEN IF SUCH PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.\n\t \n   - 10.2.2  EXCEPT WITH RESPECT TO DAMAGES OR LIABILITY ARISING FROM (A) A PARTY’S BREACH OF ITS OBLIGATIONS WITH RESPECT TO CONFIDENTIAL INFORMATION, (B) CLIENT’S MISAPPROPRIATION OF DRIFTY’S INTELLECTUAL PROPERTY AND (C) EACH PARTY’S INDEMNIFICATION OBLIGATIONS HEREUNDER, IN NO EVENT WILL EITHER PARTY’S AGGREGATE LIABILITY ARISING OUT OF, OR IN CONNECTION WITH, THIS AGREEMENT FOR ALL CLAIMS ACCRUING DURING THE TERM OF THIS AGREEMENT EXCEED THE GREATER OF $5,000 OR THE AMOUNTS PAID OR PAYABLE BY CLIENT UNDER THE APPLICABLE ORDER DURING THE TWELVE (12) MONTH PERIOD IMMEDIATELY PRECEDING THE DATE OF THE APPLICABLE CLAIM.\n\n11.  **Miscellaneous.**.\n\t\n 11.1  _Notices_. Unless otherwise specifically provided in this Agreement, every notice or other communications required or permitted under this Agreement shall be valid only if in writing and shall be delivered either by personal delivery; by nationally recognized overnight courier service; or by certified or registered mail, return receipt requested, addressed to the names and addresses of each Party set forth on the corresponding registration materials.\n\n 11.2  _Force Majeure_. Except for any payment obligations, neither Party shall be held responsible for any delay or failure in performance of any part of this Agreement to the extent such delay or failure is caused by fire, flood, explosion, war, strike, embargo, government requirement, pandemic, civil or military authority, act of God or other causes beyond its control and without the fault or negligence of the delayed or non-performing Party or its subcontractors.\n\n 11.3  _General Provisions_. This Agreement shall be governed by and interpreted in accordance with the internal law of the State of Delaware without regard to its conflict of laws provisions. The titles of the sections of this Agreement are for convenience only and shall not affect the interpretation or construction of any section. The language used in this Agreement shall be deemed to be the language chosen by the Parties hereto to express their mutual agreement. Any rule of construction to the effect that ambiguities are to be resolved against the drafting Party shall not be applied in the construction or interpretation of this Agreement. The words “include” and “including” and variations thereof are not terms of limitation, but rather shall be deemed to be followed by the words “without limitation.” This Agreement, including any Order and any other policies referenced herein, represents the entire agreement between the Parties with respect to the subject matter hereof and all other negotiations, understandings and agreements relating thereto, whether written or oral, including but not limited to all requests for proposal, proposals, payments or other forms, are nullified and superseded hereby. The terms of this Agreement shall be deemed to be incorporated into and govern each accepted Order; and, in the event of any conflict or inconsistency between the terms of this Agreement and any Order, the terms hereof shall govern unless such Order expressly amends the terms of this Agreement. Whenever possible, each provision of this Agreement shall be interpreted in such manner as to be effective and valid under applicable law, but if any provision of this Agreement is held to be prohibited by or invalid under applicable law, such provision shall be ineffective only to the extent of such prohibition or invalidity, without invalidating the remainder of such provision or the remaining provisions of this Agreement. A waiver of any of the terms of this Agreement, or any breach or default hereunder, shall not be deemed or construed as a waiver of such terms for the future or any subsequent breach or default, whether or not of the same or similar nature. This Agreement may only be modified, amended or supplemented in a written document signed by authorized signatories of both Parties subsequent to the date of execution of this Agreement. If any litigation is brought to enforce, or arises out of, the Agreement or any term, clause, or provision hereof, the prevailing Party shall be awarded its reasonable attorneys’ fees together with expenses and costs incurred with such litigation, including necessary fees, costs, and expenses for services rendered, as well as subsequent to judgment in obtaining execution thereof.\n\nIN WITNESS WHEREOF, the Parties hereto, by their duly authorized representatives, have executed and delivered this Agreement as of the Effective Date.\n\nDRIFTY CO.  Client: ________________________\n\nBY:  BY:\n\nNAME:  NAME:\n\nTITLE:  TITLE:\n\nDATE:  DATE:\n\n  \n\n## APPENDIX A\n\n**SUPPORT SERVICES TERMS/POLICY**\n\nThis Schedule describes the Support Services relating to the Drifty Software that Drifty will provide or cause to be provided to Client during the applicable Subscription Term. The services described in this Schedule do not expand or change the warranty provisions set forth in the Agreement. Drifty shall provide the following services during the term of the Agreement:\n\n1.  **GENERAL OBLIGATIONS**.\n\t1.1  _Operations_.  During the applicable Subscription Term, in consideration of the fees paid by Client under the Agreement, Drifty shall be responsible, at its own expense, for operating and maintaining the Drifty Software for Client to access as permitted under the Agreement.\n\n\t1.2  _Program Errors._  Drifty shall identify and promptly inform Client of any Program Errors (as defined below) of which Drifty becomes aware and shall consult with Client regarding necessary corrections and or modification.  For the purposes of this Agreement, a \"Program Error\" shall mean a material and reproducible deviation in the Drifty Software from its specifications; provided, however, that any such deviation which is due to any of the following shall not be considered a \"Program Error\":  (i) any problem caused by  content, programming, or infrastructure provided or used by Client that is defective; (ii) any problem caused by a Force Majeure event (as defined in Section 11.2 of the Agreement); or (iii) any problem caused by the performance or non-performance of the Internet (as used herein, “Internet” shall not mean or include hardware, software or systems under the control (by contract or otherwise) of Drifty or its subcontractors).  Drifty reserves the right to provide any and all services set forth in this Schedule by outsourcing such services to independent third parties selected by Drifty in its sole and absolute discretion. Drifty acknowledges and agrees that performance or non-performance by subcontractors used by Drifty to provide or support services hereunder shall in all respects be deemed to be performance or non-performance, as the case may be, of Drifty hereunder.\n\n2.  **TECHNICAL SUPPORT AND OBLIGATIONS**.  During the applicable Subscription Term, Drifty shall provide or cause to be provided the following maintenance and technical support to Client:\n\n\t2.1  _Technical Support_.  Client shall have access to Technical Support provided by Drifty as follows. Drifty will provide telephone support and/or remote access support to designated Client contacts to assist with Program Errors using the following Drifty contact information:\n\n  Email Support:\n\n    - Email Address:  enterprise-help@ionic.io\n\n    - Hours of Support:  8-5 CST\n\n  Zendesk\n\n  Slack\n\n  **Response Time**:  Drifty shall use commercially reasonable efforts to respond to all Support tickets no later than the response time provided for the applicable Package ordered by Client.\nDrifty will assist Client in utilizing the Drifty Software and in identifying and providing fixes and workarounds.\na. Problem Reporting:  Client may submit to Drifty requests identifying potential problems in the Drifty Software.  Requests should be in writing and directed to Drifty by the electronic means specified in the relevant accepted Order. Drifty retains the right to determine the final disposition of all requests, and will inform Client of the disposition of each request.  If Drifty decides in its sole judgment to act upon a request, it may do so by providing an Update when and if available.\nc.  Response Times. Drifty shall respond to Program Errors within the time period provided for the applicable Package ordered by Client.\nd.  Correction of Errors:  Drifty shall use reasonable efforts to provide an avoidance procedure for, and a correction of, each defect in the Drifty Software that causes the Drifty Software not to conform in all material respects with the Documentation.\n\n\t2.2  Maintenance Windows.  If there is maintenance that needs to be performed, for which a service interruption is expected, Drifty will use reasonable efforts to alert Client at least one day in advance. The notice will be sent by email. If the maintenance needs to be extended, Client will be notified by email.\n\n- Scheduled Maintenance Windows\n\n | Day              | Time         |\n |------------------|--------------|\n | Tuesday/Thursday | 9pm-11pm EST |\n | Sunday           | 9am-5pm EST  |\n\n- Emergency Maintenance Windows; as determined by Drifty.\n\n\t2.3  Exclusions.  Drifty shall have no support obligations with respect to any hardware or software product other than the Drifty Software (\"Nonqualified Products\").  If Drifty provides Technical Support for a problem caused by a Nonqualified Product, or if Drifty’s service efforts are increased as a result of a Nonqualified Product, and upon notification to Client, Drifty may charge time and materials for such extra services at its then current rates.  If, in Drifty’s reasonable opinion, performance of Technical Support is or will be made more difficult or impaired because of Nonqualified Products, Drifty shall so notify Client, and Client shall immediately remove the Nonqualified Product at its own risk and expense.  Client shall remain solely responsible for the compatibility and functioning of nonqualified products with the Drifty Software.\n\n\t2.4  Limitations.  Drifty will use its reasonable efforts to make the Drifty Software perform substantially in accordance with the specifications in the Documentation.  However, Client acknowledges that inevitably some errors may exist in the Drifty Software, and the presence of such errors shall not be a breach of this Agreement.\n\n\t2.5  Client Responsibilities.  In connection with providing the maintenance and Technical Support described in this Schedule, Client shall have the following responsibilities:  (1) maintain the Nonqualified Products and associated peripheral equipment if any, in good working order in accordance with the manufacturers’ specifications, and insure that any problems reported to Drifty are not due to hardware or operating system malfunction; (2) supply Drifty with access to and use of all information and facilities determined to be necessary by Drifty to render the Technical Support described in this Agreement; (3) perform any tests or procedures recommended by Drifty for the purpose of identifying and/or resolving any problems; (4) maintain a procedure external to the Drifty Software for reconstruction of lost or altered files, data, or programs; (5) at all times follow routine operator procedures as specified in the Documentation; and (6) ensure that the Drifty Software is isolated from any process links or anything else that could cause harm before requesting or receiving remote support assistance.  Client is solely responsible for providing all internal technical support to the Concurrent Users.\n\n3.  **SOFTWARE MAINTENANCE.**\n \n Drifty shall provide Support pursuant to Sections 1 and 2 above for the then-current New Version of the Drifty Software and the immediately preceding such New Version (the “First-Back Version); provided, that, the First-Back Version is v. 4.0 or a later-released version.\n\n<p><br></p><p><br></p>"
  },
  {
    "path": "server/markdown/pr-1704222-latest-version-of-ionic-provides-universal-design-system-for-enterprises.md",
    "content": "# Latest Version of Ionic Provides Universal Design System for Enterprises\n\n### Ionic Framework 4.0, rebuilt using open web standards, brings universal compatibility across platforms, devices, and developer frameworks—helping enterprises deliver consistent brand experiences at scale\n\n#### January 23, 2019 09:00 ET | Source: Ionic\n\nMADISON, Wis., Jan. 23, 2019 [GLOBE NEWSWIRE](https://www.globenewswire.com/news-release/2019/01/23/1704222/0/en/Latest-Version-of-Ionic-Provides-Universal-Design-System-for-Enterprises.html) -- Ionic, the most widely used platform for building mobile and desktop apps using web technology, has launched version 4.0 of the open source Ionic Framework. The highly-anticipated release provides a complete cross-platform UI library built on Web Components, compatible with any front-end framework. Through the use of open web standards, Ionic 4.0 helps enterprises address the growing need to adopt design systems: A centralized library of components that can be shared across teams and projects to simplify design and development while ensuring consistent brand experiences, at scale.\n\nMore than five million developers worldwide use Ionic Framework to tackle development of consumer-facing and internal enterprise applications—using one shared codebase across platforms. This level of efficiency is especially critical for companies today given the increasing demand from consumers to build connected digital experiences. Previous versions of Ionic Framework were based on Angular components and only worked with the Angular front-end framework. With the 4.0 release, Ionic has rebuilt its entire UI library using Web Components, a set of standardized APIs that make it possible to build fast, feature-rich apps that are natively supported in any modern browser on all major platforms, and are compatible with any front-end framework.\n\nIonic 4.0’s foundation in Web Components makes it possible for developers to build for any platform or device, no matter the tooling or front-end technologies involved. The benefits of this for individuals and enterprises, alike, include:\n\n1. **A customizable component library that works across teams and projects:** Of all cross-platform approaches, only Ionic 4.0 provides UI components that are truly customizable, reusable, and shareable across all types of applications, including iOS, Android, Desktop (Electron), and the Web (Progressive Web Apps, etc.).\n\n2. **Faster load times and smaller sizes:** The shift to Web Components means that apps built with Ionic will load significantly faster and work better in low-bandwidth environments. On top of that, the 4.0 version adds smart defaults to improve load times. Put together, these improvements have helped Ionic achieve a 100/100 in Google’s Lighthouse score for application speed and performance.\n\n3. **Technical agility to close the talent gap:** Due to the flexibility of open web standards, Ionic now give developers and teams the freedom to build with the current and emerging tools they love, including Angular, React, and Vue; thus insulating enterprises from “framework churn” and making it easier to hire and retain developer talent.\n\n“When we look at what’s happening in the world of front-end development, we see two major industry shifts,” said Max Lynch, co-founder and CEO of Ionic. “First, there’s a recognition that the proliferation of proprietary components has slowed down development and created design inconsistencies that hurt users and brands alike. More and more enterprises are recognizing the need to adopt a design system: a single design spec, or library of reusable components, that can be shared across a team or company. Second, with the constantly evolving development ecosystem, we recognized the need to make Ionic compatible with whatever framework developers wanted to use—now and in the future. Rebuilding our Framework on Web Components was a way to address both of these challenges and future-proof our technology in a truly unique way.”\n\nAlong with the Framework, Ionic offers a powerful set of tools and services to help enterprise teams address the need for digital experiences, from [Studio](https://ionicframework.com/studio), its localized development environment, to [Appflow](https://ionicframework.com/appflow), a mobile DevOps solution, and [Enterprise Engine](https://ionicframework.com/enterprise-engine), a fully-supported version of the Ionic development ecosystem.\n\nIonic Framework 4.0 is now available to use with Google’s Angular web application framework, including support for Angular tooling, such as the Angular CLI and Router. Versions of Ionic with Vue and React are currently in alpha.\n\nAbout Ionic\n\nIonic is an open source UI toolkit and developer platform that makes it simple to build, test, and deploy stunning, high-performance apps for any platform or device—all using a single codebase. Since its inception in 2013, Ionic Framework has become the #1 adopted cross-platform hybrid development framework in the world, serving a vibrant community of more than 5 million developers in over 200 countries. Ionic’s open source Framework is best known for its developer-friendly tools and services, which have helped build and power notable cross-platform apps for consumer brands like Sworkit, Shipt, and MarketWatch as well as mission-critical apps for companies like NASA and Nationwide. For more information about Ionic and its suite of tools, visit ionicframework.com.\n\nContact:\nAndrew Haire\nIonic"
  },
  {
    "path": "server/markdown/pr-170725-dev-survey-says-the-web-is-wi.md",
    "content": "---\nmeta_description: New research from Ionic shows hybrid and Progressive Web Apps are dominating development, enterprise mobile is surging.\n---\n\n# Survey Says: The Web is Winning in Mobile Dev\n\n### New research from Ionic shows hybrid and progressive web apps are dominating development, enterprise mobile is surging, and while Google Firebase is hot – wearables are not\n\n#### July 25, 2017\n\nMADISON, WIS--([PRWEB](http://www.prweb.com/releases/2017/07/prweb14527377.htm)) JULY 25, 2017--According to a survey of more than 13,000 developers, the web is seeing a resurgence when it comes to the mobile app space: hybrid apps dominate, progressive web apps (PWAs) are growing rapidly, and web developers are thriving in this new order.\n\nConducted by Ionic, provider of the world's most popular cross-platform mobile development technology stack, the [Developer Survey](https://ionicframework.com/survey/2017) revealed that hybrid is overtaking traditional native development. The Survey indicated that two years ago, 20 percent of developers were building exclusively with native tools, whereas in the next two years, that number is only 3% -- nearly a 7x decrease. In fact, nearly one third of developers expect to abandon native development all together.\n\nFurther, an increasing number (32 percent) of developers are targeting PWAs, which bring features we expect from native apps to the mobile browser experience and run in a secure container accessible to anyone on the web. And, 35 percent of developers surveyed are deploying responsive web design, which allows web content to automatically self-adapt to any device. Both progressive web apps and responsive web are designed to help mobile developers reach more users beyond the confines of app stores and address potential app fatigue amongst consumers.\n\n“It may be counterintuitive to some, but the web is increasingly important to mobile user experiences,” noted Max Lynch, co-founder and CEO, Ionic. “There are only so many apps people are willing to download to a device, and fewer still that they use regularly – so brands need a seamless experience across platforms to meet and engage customers on their terms. I am not at all surprised to see the boomerang back to the web as a core platform to support hybrid and browser-based apps.”\n\nIn addition, the survey indicated that developers are increasingly (42%) building enterprise apps for internal employee use (“B2E”) rather than just those that are customer-facing. This is consistent with a broader trend of modernization in the enterprise, as legacy systems are replaced with mobile experiences that improve employee productivity and engagement. On the consumer side, talk of wearable and smart devices may be mostly hype: the data show only 3 percent of developers are building for smartwatches or TVs.\nAmong Ionic developers, Google’s Firebase is the preferred backend services provider. Significantly more developers (42 percent) use Firebase for push notifications over No. 2 Amazon Web Services (8 percent), and developers chose Firebase Auth over Amazon Cognito by 10x. Firebase also topped the list of hosted backend databases, with 32 percent of developers using it compared to a combined 12 percent for Amazon DynamoDB and RDS. For backend technology, Node.js continues its reign as the top choice for developers at 56 percent.\n\nFinally, underscoring this resurgence of the web’s significance and a shift in required skill sets for mobile development, nearly 80% of survey respondents identify themselves as web developers, and only about 8 percent identify as born-and-bred mobile developers.\nFor more insights about developer preferences and behaviors, the full [Ionic Developer Survey is available](https://ionicframework.com/survey/2017). The survey was fielded from February to June 2017 and a total of 13,248 developers responded.\n\nAbout Ionic: \nIonic makes it easy for entrepreneurs and enterprises to build high performance apps that look and feel beautiful on any platform or device. The Ionic Framework is the #1 adopted cross-platform development framework in the world, with a vibrant community of more than 5 million developers in over 200 countries. Ionic’s open source Framework and developer-friendly tools and services power some of the best-known brands on earth, from highly successful consumer apps like Sworkit, Untappd and MarketWatch, to mission-critical apps supporting Nationwide and NASA.\nHeadquartered in Madison, WI, the company is backed by premier investors including General Catalyst Partners and Techstars. For more information, visit ionicframework.com and follow the company on [LinkedIn](https://www.linkedin.com/company/2969324/) and [Twitter](https://twitter.com/Ionicframework)."
  },
  {
    "path": "server/markdown/pr-171206-ionic-brings-powerful-app-dev.md",
    "content": "# Ionic Brings Powerful App Development Suite to Teams and Enterprises\n\n### Maker of the popular open source Ionic Framework launches Ionic Pro to support the full lifecycle of apps for teams\n\n#### December 06, 2017 09:00 AM Eastern Standard Time\n\nMADISON, Wis.--([BUSINESS WIRE](https://www.businesswire.com/))--[Ionic](https://ionicframework.com), maker of the popular open source Framework for building cross-platform mobile and progressive web apps, has launched a powerful suite of development tools for enterprise developers and teams. Ionic Pro is a cloud-based solution that makes it faster and easier to design, build, test and deliver apps.\n\nLaunched in 2013, the [Ionic Framework](https://ionicframework.com) has acquired a community of more than five million developers around the world. Ionic’s approach streamlines mobile development with one code base that runs everywhere – on any device or operating system – using the web as a common platform. This efficiency is critical to enterprise teams, as demand for mobile apps is growing [five times faster](https://www.gartner.com/newsroom/id/3076817) than IT can deliver. With the launch, Ionic Pro extends the power of the Framework to address the entire app lifecycle.\n\n“The Ionic Framework has become popular with enterprise teams because they can target native mobile apps, as well as progressive web apps, all from a single codebase – using languages that are familiar to their in-house web developers,” said Max Lynch, co-founder and CEO of Ionic. “With Ionic Pro, we’re taking it even further by helping teams address the entire dev lifecycle – from design and testing, to tracking errors and shipping hot code updates.”\n\n## Introducing Ionic Pro\nIonic Pro is a powerful set of cloud-based services and features that bring a new level of app development agility to dev teams. Pro allows multiple developers to collaborate on projects using a single, shared dashboard and stay up-to-date on build activity and code changes, while using Pro’s core services to:\n\n* [Rapidly develop](https://ionicframework.com/creator) apps using visual drag-and-drop design that exports working code\n* [Easily share](https://ionicframework.com/pro/view) test versions with users, and view all tester feedback in a central dashboard\n* [Deliver different versions](https://ionicframework.com/pro/deploy) and releases to specific segments of users\n* [Track and analyze errors](https://ionicframework.com/pro/monitor) in your code to improve app quality\n* [Ship hotfixes and live app updates](https://ionicframework.com/pro/deploy) in real time, without going through the app stores\n\n“How we build mobile apps at MarketWatch is a carefully thought out process. Mobile experience is critical to our business and brand – hundreds of thousands of active users rely on our mobile apps for timely financial news,” said Brian Aguilar, director at MarketWatch. “With the Ionic Framework, we develop one code base that supports multiple platforms with a consistent user experience. We’ve doubled the output of our lean developer team – and more importantly, our user satisfaction has increased significantly based on app store star ratings. Ionic Pro is a powerful extension to the platform and our team plans to take advantage of the collaboration and testing features.”\n\n“Ionic Pro has been a huge advantage for us. Our clients have very demanding workloads with tight timelines to make app updates,” said Mike Sigle, vice president of product development at Napa Group. “The live update feature allows us to test changes and push them directly to users, without waiting around for the app stores. That’s huge for us. We’re already using Pro successfully and fully intend to introduce Ionic to more of our clients.”\n\nAn $8.5 million infusion of capital from [General Catalyst](http://generalcatalyst.com/) in 2016 fueled further development of the platform and enabled Ionic to scale to deliver a broader set of services for the enterprise, with Ionic Pro being the first. Since the investment, Ionic has recruited [Swami Kumaresan](https://www.linkedin.com/in/swamik/), who was previously on the founding team of Carbonite (Nasdaq: CARB), as its President and COO. Swami opened Ionic’s Boston office and has been driving the company’s commercial strategy and recruiting sales, marketing and customer success talent. The company expects to aggressively pursue commercial expansion in 2018.\n\n## About Ionic\nIonic makes it easy for entrepreneurs and enterprises to build high performance apps that look and feel beautiful on any platform or device. The Ionic Framework is the #1 adopted cross-platform development framework in the world with a vibrant community of more than 5 million developers in over 200 countries. Ionic’s open source Framework and developer-friendly tools and services power apps for some of the world’s best-known brands, e.g. highly successful consumer apps like Sworkit, Untappd and MarketWatch, as well as mission-critical apps supporting Nationwide and NASA.\n\nWith offices in Madison, WI (HQ), and Boston, the company is backed by premier investors including General Catalyst Partners and Techstars. For more information, visit ionicframework.com and follow the company on [LinkedIn](https://www.linkedin.com/company/2969324/) and [Twitter](https://twitter.com/Ionicframework).\n"
  },
  {
    "path": "server/markdown/pr-capacitor-adds-support-for-swift-5-and-android-10-securty-performance.md",
    "content": "\n# Capacitor 2.0 Adds Support for Swift 5 and Android 10, Major Security and Performance Improvements\n\n### Ionic's native runtime exceeds 230K monthly installs; poised to eclipse Cordova as the #1 platform for hybrid mobile apps\n\n##### Jun 11, 2020, 09:00 ET\n\nMADISON, Wis.,  June 11, 2020  /PRNewswire/ -- [Ionic](https://c212.net/c/link/?t=0&l=en&o=2827179-1&h=825201564&u=https%3A%2F%2Fionicframework.com%2F&a=Ionic), the most widely used platform for building mobile and desktop apps using web technology, today announced the release of  [Capacitor 2.0](https://c212.net/c/link/?t=0&l=en&o=2827179-1&h=3429228703&u=https%3A%2F%2Fcapacitor.ionicframework.com%2F&a=Capacitor+2.0), the latest version of its cross-platform native runtime. Capacitor makes it easy to build web apps that run on iOS, Android, and on the web as Progressive Web Apps (PWAs) — all powered by a single codebase, using familiar web languages. The new version brings the latest in native platform capabilities and mobile device features, security, and performance to hybrid application development, helping developers craft modern mobile experiences with ease.\n\n![Ionic](https://mma.prnewswire.com/media/1179336/f974501893df8fedf85528f48ccd.jpg?p=publish&w=650 \"Ionic\")\n\nIonic\n\nCapacitor was  [launched](https://c212.net/c/link/?t=0&l=en&o=2827179-1&h=3353840282&u=https%3A%2F%2Fionicframework.com%2Fblog%2Fannouncing-capacitor-1-0%2F&a=launched) in  May 2019  as an alternative to using Apache Cordova/Adobe PhoneGap when deploying hybrid mobile and web apps to other platforms. Building on the cross-platform advantages pioneered by Cordova, Capacitor brings a more modern, web-first approach, with much greater native power and control, including full access to the native Android and iOS SDKs when needed, plus first-class support for PWAs. Capacitor is now poised to eclipse Cordova as the number one native runtime for hybrid mobile apps, with more than 230,000 monthly downloads, and growth of over 47% quarter-over-quarter. Capacitor currently powers thousands of apps, supporting major organizations like the Tim Hortons and Popeyes mobile apps, serving millions of users worldwide.\n\n\"Professional developers and teams are recognizing the advantages of cross-platform development,\" said Ionic CEO and co-founder Max Lynch. \"At the same time, we recognized that the core native container that powers hybrid development had to evolve to take full advantage of all that the latest native SDKs and web APIs had to offer. Capacitor makes it easy for web developers to reuse their skills to build quality apps for all platforms, while significantly reducing the odds that they'll get stuck on native-specific issues. At the same time, it unlocks an unprecedented degree of native power and control, and better features and performance to support mobile web apps and PWAs. With this version, we're adding even greater power, security, and stability to make sure Capacitor becomes the dominant native runtime for teams building cross-platform mobile and Progressive Web Apps.\"\n\nCapacitor 2.0 updates its underlying technology that supports the latest versions of programming languages and operating systems that power all Capacitor apps. This enables improved performance, security, and modern development experiences.\n\nOther updates include:\n\n-   Swift 5 and Xcode 11+ support brings smaller app bundle sizes, modern development tooling and features, and compatibility with earlier versions of Swift\n-   Android 10 (SDK 29) provides improved security and biometrics via Face Unlock and Iris Unlock for  [Identity Vault](https://c212.net/c/link/?t=0&l=en&o=2827179-1&h=3681645216&u=https%3A%2F%2Fionicframework.com%2Fenterprise%2Fidentity-vault&a=Identity+Vault)users, audio/video capabilities, and system-wide dark mode\n-   AndroidX replaces the Support Library, providing feature parity and backward-compatibility, while also providing improvements to library modularity, smaller code size, and a better developer experience\n-   An expanded plugin library makes it easy to access core device features and third-party integrations, with timely updates, fixes, and usability improvements for all existing plugins\n\n\"When we were revisiting the architecture for our Ionic V1 app migration, we wanted to make sure we were building on a modern hybrid foundation that gave our users the best possible experience and protection,\" said  Rakesh Gadapa, Application Developer III at Blue Cross Blue Shield of  Michigan. \"Capacitor's support for the latest in security, performance, and native platform capabilities, makes it easy to build compelling, modern app experiences that our users want, without having to worry about all the underlying complexity of the native SDKs and iOS and Android specific code.\"\n\nIonic recommends Capacitor 2.0 for all new and existing Ionic apps (including those using the Angular, React, Vue web frameworks). Capacitor 2.0 is available now; get started  [here](https://c212.net/c/link/?t=0&l=en&o=2827179-1&h=3130954805&u=https%3A%2F%2Fcapacitor.ionicframework.com%2Fdocs%2Fgetting-started%2F&a=here).\n\n**About Ionic**\n\n[Ionic](https://c212.net/c/link/?t=0&l=en&o=2827179-1&h=825201564&u=https%3A%2F%2Fionicframework.com%2F&a=Ionic) makes it easy for entrepreneurs and enterprises to build beautiful, high-performance apps for any platform or device. The Ionic Framework is the #1 adopted cross-platform hybrid development framework in the world with a vibrant community of more than five million developers in over 200 countries. Ionic's open source Framework and developer-friendly tools and services power apps for some of the world's best-known brands, including highly successful consumer apps like Dow Jones MarketWatch, Sworkit, and Untappd, as well as mission-critical apps supporting Nationwide and NASA.\n\nWith offices in  Madison, Wisconsin  (HQ), and  Boston, the company is backed by premier investors including General Catalyst Partners, Arthur Ventures, Founder Collective, and Lightbank. For more information, visit  [ionicframework.com](https://c212.net/c/link/?t=0&l=en&o=2827179-1&h=1265592568&u=https%3A%2F%2Fionicframework.com%2F&a=ionicframework.com) and follow the company on  [LinkedIn](https://c212.net/c/link/?t=0&l=en&o=2827179-1&h=2236140853&u=https%3A%2F%2Fwww.linkedin.com%2Fcompany%2Fdrifty-co-%2F%3FviewAsMember%3Dtrue&a=LinkedIn) and  [Twitter](https://c212.net/c/link/?t=0&l=en&o=2827179-1&h=787266106&u=https%3A%2F%2Ftwitter.com%2FIonicframework&a=Twitter)."
  },
  {
    "path": "server/markdown/pr-ionic-5-brings-major-design-updates.md",
    "content": "# Ionic 5 Brings Major Design Updates for Mobile App Developers\n\n### Latest version of Ionic Framework brings design updates and animations to help developers keep pace with evolving user expectations and UX guidance from Apple and Google\n\n##### PRESS RELEASE  UPDATED: FEB 12, 2020 08:00 EST\n\n**MADISON, Wis., February 12, 2020 (Newswire.com) -** Ionic, the most widely used platform for building mobile and desktop apps using web technology, today announced the release of Ionic 5, the latest version of the popular open source Framework—used by millions of developers and thousands of businesses to build high-performance consumer and employee-facing mobile apps for iOS and Android.\n\nThe updated Ionic Framework is packed with major design updates that help developers keep pace with the latest UX standards and design patterns, including:\n\n-   **New and updated UI components:**  brand new components, plus updated controls to match iOS 13 and Material Design style guidelines (segment, header, swipe-to-close, and more), improved gestures, and better support for dark mode and CSS variables.\n    \n-   **Ionic Animations:**  an open source animations utility and public API that makes it easy to create custom animations for any web-based application or hybrid mobile app.\n    \n-   **Brand new version of Ionicons:**  an open source library of more than 1,100 mobile-ready icons artfully crafted to look and feel at home in the latest iOS and Android devices.\n    \n\n“As Apple and Google introduce new UX standards and design patterns in the latest versions of iOS and Android, app developers need to make sure their mobile experiences evolve with them,” explained Ionic CEO and Co-Founder, Max Lynch. “Mobile experiences that feel outdated will see lower rates of adoption and engagement.\n\n“The good news is that, with our open source Framework, web developers have everything they need to create a native experience that looks and feels at home on the latest devices. In fact, our mission has always been to make it possible for  _all_  developers (not just the design experts) to craft beautiful, engaging app experiences. With this release, we’re doing just that.”\n\nIonic users like Marcus Green of MIXO.dj, a media sharing app for DJs, echo that sentiment.\n\n“Design and UX are absolutely critical to the success of our app,” Green said. “You've only got one shot at getting a user to love your app. It's gotta be fast, and it's gotta be easy to use. With Ionic 4, we hit the fast button. Our app now has excellent performance. And with the design changes coming in Ionic 5, we can improve our UX even further—without having to focus on the tricky stuff. That frees us up to focus on new features for our users instead.”\n\n**Ionic Animations**\n\nIonic Animations is an open source animations utility and public API that provides the tools web developers need to build highly performant animations.\n\n“Animations have become a staple of any modern, mobile user experience,” explained Lynch. “But up until now, there have been very few options for web developers to build their own custom animations without risking a huge performance hit.\n\n“With the release of Ionic Animations, web developers now have an easy way to add their own animations, while still delivering stellar performance—whether or not they use Ionic Framework. Compared to traditional alternatives, our new Animations utility delivers 40% better animation performance and 98% greater CPU efficiency on a user’s device.”\n\n**Upgrade Guidance for Existing Ionic Developers**\n\nWhile Ionic 5 brings tremendous benefits and exciting updates for developers, existing users should expect the upgrade process from Ionic 4 to Ionic 5 to be painless. The update includes very few breaking changes and should take just a few simple steps to complete.\n\n**About Ionic**\n\nIonic makes it easy for entrepreneurs and enterprises to build beautiful, high-performance apps for any platform or device. The Ionic Framework is the #1 adopted cross-platform hybrid development framework in the world with a vibrant community of more than 5 million developers in over 200 countries. Ionic’s open source Framework and developer-friendly tools and services power apps for some of the world’s best-known brands, including highly successful consumer apps like Dow Jones MarketWatch, Sworkit, and Untappd, as well as mission-critical apps supporting Nationwide and NASA.\n\nWith offices in Madison, WI (HQ), and Boston, the company is backed by premier investors including General Catalyst Partners, Arthur Ventures, Founder Collective, and Lightbank. For more information, visit ionicframework.com and follow the company on LinkedIn and Twitter.\n\n\\#\\#\\#\n\nMedia Contact\n\nAndrew Haire\n\nVice President of Marketing\n\nandrew@ionic.io\n\nSource: Ionic"
  },
  {
    "path": "server/markdown/pr-ionic-achieves-record-revenue-growth-in-2019.md",
    "content": "\n# Ionic Achieves Record Revenue Growth in 2019, Spurred by Enterprise Adoption and New Product Lines\n\n### New products and rapid enterprise growth helped Ionic more than double revenue in 2019\n\n#### PRESS RELEASE  UPDATED: JAN 7, 2020\n\n**MADISON, Wisc., January 7, 2020 (Newswire.com) -** [​​​Ionic](https://ionicframework.com/), the most widely used platform for building mobile and desktop apps using web technology, announced today that it reached record revenue growth in 2019, spurred by new products and rapid adoption of its enterprise development platform.\n\nIonic added 92 new enterprise customers in 2019, including Home Depot, Morgan Stanley, PwC, and MasterCard, bringing its enterprise  [customer](https://ionicframework.com/customers)base to more than 130. That’s in addition to roughly 5,000 businesses and teams using Ionic’s self-service developer tools to streamline development and automate their DevOps processes. With the rapid adoption of its enterprise platform, Ionic’s B2B revenue more than doubled in 2019.\n\n“Last year marked a major turning point for Ionic,'' stated Ionic CEO and co-founder Max Lynch. “We’ve seen our enterprise business grow significantly in the last year, with continued demand for a solution that helps enterprise teams meet the demand for digital experiences, without compromising on developer experience or the need for open standards.”\n\nWhy has Ionic resonated so much with companies of all sizes? It starts with the company’s unique, developer-centric approach.\n\n“Ionic is unlike any other development approach on the market. We’re based on open-source software and fully embrace open standards and a developer-friendly approach, while still giving enterprise teams the enterprise-grade software, services, and support they need to feel confident and secure over the long term,” Lynch explained. “Clearly, the market has signaled that there’s demand for this type of solution and we’re looking forward to expanding our foothold in the enterprise in 2020 to give enterprise teams more choice when it comes to app development and to continue funding our open-source investments that benefit all types of developers, all over the world.”\n\nIn 2019, Ionic released multiple new products and major updates to its existing open-source and commercial solutions to help customers develop applications more efficiently, which helped further accelerate the company’s growth in 2019. In January, Ionic introduced Ionic 4, a major update to the open-source Ionic Framework. It brings the power of Web Components to deliver increased speed and customizability, along with letting customers use Ionic Framework with any JS framework.\n\nThen, in the fall, Ionic announced the general availability of  [Ionic React](https://ionicframework.com/react) — providing the world’s 20+ million React developers with a native React version of the open-source Framework — and the beta version of Ionic Vue, for developers using the popular Vue JS framework. Ionic also expanded its commercial lineup with powerful, pre-built native solutions for  [offline storage](https://ionicframework.com/offline-storage)  and secure  [user authentication](https://ionicframework.com/enterprise/auth-connect).\n\nLooking ahead to 2020, Ionic is looking forward to continuing to serve enterprise teams that are building with its open-source Framework. The company has also set its sights on disrupting the fast-growing low-code market to help enterprise teams speed up development and empower citizen developers. Stay tuned for more details in the coming months.\n\n**About Ionic**\n\nIonic makes it easy for entrepreneurs and enterprises to build beautiful, high-performance app experiences on any platform or device. The Ionic Framework is the #1 adopted cross-platform hybrid development framework in the world, with a vibrant community of more than five million developers in over 200 countries. Ionic’s open-source Framework and developer-friendly tools and services power apps for some of the world’s best-known brands, including highly successful consumer apps like Dow Jones MarketWatch, Sworkit, and Untappd, as well as mission-critical apps supporting Nationwide and NASA.\n\nWith offices in Madison, Wisconsin (HQ), and Boston, the company is backed by premier investors including General Catalyst Partners, Arthur Ventures, Founder Collective, and Lightbank. For more information, visit  [ionicframework.com](https://ionicframework.com/)  and follow the company on  [LinkedIn](https://www.linkedin.com/company/2969324)  and  [Twitter](https://twitter.com/Ionicframework).\n\n**Media Contact:**  \nAndrew Haire​  \nVice President of Marketing  \nandrew@ionic.io\n\nSource: Ionic"
  },
  {
    "path": "server/markdown/pr-ionic-alan-announce-integration.md",
    "content": "# Ionic and Alan Announce Integration to Unlock the Power of Apps with Voice & AI\n\n\n### SUNNYVALE, Calif. and MADISON, Wis., Aug. 22, 2019 (GLOBE NEWSWIRE) \n\n[Alan](https://www.globenewswire.com/Tracker?data=tS4FW8fF60m1JTlSMDdOd5sky7Srq6pto0QrIKuyugMyyw6IgQqxuw5-deL1D1J1)  and  [Ionic](https://www.globenewswire.com/Tracker?data=HLkz7WU8tWS8PkgtpabyqYq5i3HEhsehB8_XoIWApK-B_QfdQuYUihpz9QonqH8mZl71e2JnQC6AWxwdgcmrAw==)  today announced they have  [integrated their platforms](https://www.globenewswire.com/Tracker?data=7e5j6xOTNkUkCsXuRjoIylv6tTKhvta6PIIPWbseuLVmAJcvUFhq0woaYJ_p4Wu4EVrJrv3-he9vJRTUSlW9mPillhozS9jmeicwCISHiDPw0V5v7Pge3PVQU-5vFoVR)  to enable millions of developers worldwide to add natural conversational voice for Ionic applications.  \n\nToday, applications are limited by mobile screen sizes: developers and designers are limited in the data and actions they are able to represent on screens, leading to increased friction and complex end-user experiences. Even after a decade of mobile evolution, most applications are hard to use, hard to learn, and take a long time to change. Adding voice to an application presents unlimited functionality, allowing users the ability to get started with zero training, with easily updatable interfaces. Alan is starting to transform applications in  [field maintenance](https://www.globenewswire.com/Tracker?data=QF9SVvApnKeb7CR5kwZqHjQhhfguW1W_9n3N0zcsQXl8b6CpyNTSbiden7pM_LqKnajZe-04Ee9IKw3XhsGPvcOgUpcpYAawatx_XpYhxAA=), retail, finance,  [public safety](https://www.globenewswire.com/Tracker?data=QjGIGyLgnWscs6kGSBDoBtHH5ZvwtcadUx9WzQLTyKAf-4tGFFApPIeTUAHOw3F73xunWrdNZR1iMwLrQZKbjQ==), agriculture, and education.\n\nRamu Sunkara, Alan CEO, said: “We are excited to bring natural voice to Ionic applications. Users open the application and start a voice conversation as if they are talking to an expert. With this integration, ZeePath is bringing delightful learning experiences to kids, using voice to guide them in academics, fitness, and community.”\n\nIonic is an application development platform that makes it easy for web developers to build award-winning applications using their existing web skills, enabling them to build apps for iOS, Android, Electron, or Web — from a single, shared codebase. Over five million developers use Ionic, including Airbus, Amtrak, Burger King, Panera Bread, and Southwest Airlines.\n\n“Conversational interfaces are an increasingly important part of any multi-experience app strategy because it gives customers and companies an easy, natural way to interact,” said Max Lynch, co-founder, and CEO of Ionic. “Our partnership with Alan will allow developers to quickly enable voice and AI capabilities in any Ionic app.”\n\n[ZeePath](https://www.globenewswire.com/Tracker?data=2vSFGmrOnBQ9DOt43_O6dIIQfKT1zhanV4ZyFenS1dhjDaZcdZhABwvvszzdpR0nI-zfpkR-iD8i2B0F6rU4HhQlyggHKdKY4ox1_mgoo59FHRGaNPFJscIoeux6IeGW), an education software company, uses Alan to enable students to navigate their life path. Shaya Smetana, CEO, commented: “As an educational platform using Ionic, the ability to quickly integrate conversational voice into our solution has been very rewarding. Integrating Alan into our solution has opened endless possibilities for thousands of users to succeed.”\n\n**About Ionic**\n\n[Ionic](https://www.globenewswire.com/Tracker?data=HLkz7WU8tWS8PkgtpabyqbJTs5AAParZLXEUU79VrGVcFF04YH9TKROkF06dNTvvIRYwjzkOCcdNdsPAfR8TNg==)  is the easiest way for web developers to build, grow, and scale cross-platform mobile apps. From our popular open-source Framework to our cloud platform, our goal is to enable more people and organizations to create better apps, faster.\n\n**About Alan AI**\n\n[Alan](https://www.globenewswire.com/Tracker?data=UoN7vIS740L1pXjoaBGhI2rGmoJqertf8Ynz9Hy2NiNJ3tjDxGlJqSUMu9tdpXsD)  is the complete platform to add voice to applications. Alan Platform provides the cloud and machine learning for developers, making it easy to build and deploy voice. Alan’s goal is to democratize voice as the interface for all applications.  \n  \n\nContact:  \nJames Shelburne  \n[james@alan.app](https://www.globenewswire.com/Tracker?data=eCzTtGuIbio0BmOzlZr9hxsHbJ7gENLECkmvlYe-PoIiZbPrk4blNtQcUbDTJqDS0KCreFYK4YFfYEdGs6icVQ== \"james@alan.app\")"
  },
  {
    "path": "server/markdown/pr-ionic-framework-4-release.md",
    "content": "# Ionic Version 4: From Angular to React, Vue, and Web Components\n\n#### JAN 23, 2019 - 2 MIN READ by Dylan Schiemann\n\nThe Ionic 4 release represents a substantial change, moving from a mobile framework for Angular users to a framework-agnostic approach that adds support for React, Vue.js, and web components.\n\nAs explained by Ionic CEO Max Lynch, this change is driven by frontend churn:\n\n> At the end of 2017, we started asking ourselves if our original dream was worth revisiting. It was clear that frontend developers would never settle on any specific frontend framework or libraries, so assuming otherwise was futile. At the same time, we were frustrated that Ionic could only be used by those that embraced Angular. While we loved Angular, we hated the idea that Ionic wasn’t achieving its original goal of being a toolkit for every web developer in the world.\n\nStarting with this release, Ionic is distributed as a collection of approximately 100 web components, leveraging the custom elements and shadow DOM APIs. With these changes, developers may use Ionic's components in mobile, desktop, and progressive web apps via HTML tags supported by custom elements.\n\nIonic 4 moves from encouraging usage of its own CLI to that of the underlying framework to give developers the most out of their framework’s ecosystem. The official Vue.js and React Ionic bindings are in alpha at the time of the Ionic 4 release.\n\nSimilar to changes seen in several other modern frameworks like Dojo and Svelte, Ionic targets web standards where possible to minimize frontend framework churn and fragmentation.\n\nBeyond its independence from specific frameworks, Ionic also focuses on being a web-based design system. Each Ionic component includes theme support for the latest iOS and material design standards. Ionic leverages CSS Custom Properties in each component to simplify theming of components.\n\nLast year Ionic announced Stencil, a standalone web component compiler project. Ionic leverages Stencil to optimize for load and render performance. The web components benchmark compares the performance of Stencil and other web component frameworks.\n\nBeyond the Ionic 4 release, the Ionic team looks forward to improvements for desktop-specific UI support, keyboard scenarios, theming, animations, and more. Additionally, Ionic is working to include Capacitor, a Cordova alternative, for new Ionic projects.\n\nTo get started with Ionic 4, install or update the Ionic CLI and then start an application:\n\n```\nnpm install -g ionic\nionic start my-app\n```\n\nIonic provides application starter templates and the Ionic conference reference application.\n\nIonic is open source software available under the MIT license. Contributions and feedback are encouraged via the Ionic GitHub project and should follow the Ionic contribution guidelines and code of conduct."
  },
  {
    "path": "server/markdown/privacy-policy.md",
    "content": "---\nmeta_description: We take the security of your information seriously, and work hard to maintain secure websites and services for your use.\n---\n\n<p><br></p>\n\n# Drifty Co. (d/b/a Ionic) Privacy Policy\n\n*LAST UPDATED: May 18, 2018*\n\nWelcome to the Ionic Privacy Policy (“**Privacy Policy**”). We take the security of your information seriously, and work hard to maintain secure websites and services for your use. Drifty Co. (d/b/a Ionic), together with its affiliates (collectively, “**Ionic**”, “**we**”, “**us**”), provides services and tools for the development and design of cross-platform applications, including hybrid mobile applications, using certain web technologies and certain ancillary applications, analytics, documentation, and services.\n\nThis Privacy Policy is intended to better help you understand our practices regarding information collected through (i) our websites including but not limited to ionicframework.com, ionic.io, ngcordova.com, and our other affiliated websites (collectively, “Websites”), (ii) our products and services, and (iii) any other digital properties that we own or control (collectively, the “**Ionic** **Services**” or “**Services**”) whether you are a customer that uses Ionic Services, an end user of our customers’ services that utilize our technology solutions, or whether you are simply visiting our Websites. This Privacy Policy describes how Ionic collects, processes, shares and retains the personal information (or in the EU/Switzerland: “personal data”) you provide to us.\n\n**When you interact with the Ionic Services, you consent to such collection, processing, sharing and retaining of information (including personal information/personal data) as described in this Privacy Policy and our Terms of Service. If you do not consent to the terms of this Privacy Policy and our Terms of Service, do not continue to interact with or use the Ionic Services. **\n\n**European Residents**: If you are in the European Union, the European Economic Area or Switzerland, please also see our [European Privacy Policy](#Euro) for further information on your rights under applicable European privacy law.\n\n**QUICK LINKS**:\n\n-   [Information We May Collect](#InformationCollected)\n\n-   [Use of Information](#Use)\n\n-   [Sharing of Information](#Sharing)\n\n-   [Cookies and Similar Technologies](#Cookies)\n\n-   [Data Retention](#Retention)\n\n-   [Choices and Opt-Out](#Choices)\n\n-   [Cross-Device Tracking](#CrossDevice)\n\n-   [Employment Opportunities](#Employment)\n\n-   [Third Party Sites](#ThirdPartySites)\n\n-   [Security](#Security)\n\n-   [Children](#Children)\n\n-   [International Data Transfers](#International)\n\n-   [California Privacy Rights](#California)\n\n-   [Questions, Complaints and Disputes](#Questions)\n\n-   [Privacy Policy Updates](#Updates)\n\nDue to the global nature of the Ionic Services, our privacy practices may vary among the states, countries and regions in which we operate in order to comply with applicable legal requirements.\n\n**PRIVACY SHIELD NOTICE**: We are in the process of submitting our certification of compliance with the [EU-U.S. and Swiss-U.S. Privacy Shield](https://www.privacyshield.gov/welcome) with respect to the personal data of users of the Ionic Services who are residents of the EU, EEA or Switzerland that we receive and process through the Ionic Services. We adhere to the Privacy Shield Principles of notice, choice, onward transfer, security, data integrity, access, liability and enforcement (hereinafter, “**Privacy Shield Principles**”) for individuals in participating European countries whose personal data is processed through the Ionic Services and will certify accordingly to the Department of Commerce. Once complete, our Privacy Shield certification will be available [here](https://www.privacyshield.gov/list). We may also process personal data submitted relating to individuals in Europe via other compliance mechanisms, including use of the European Union Standard Contractual Clauses or Binding Corporate Rules.\n\n<span id=\"infocollected\" class=\"anchor\"><span id=\"InformationCollected\" class=\"anchor\"></span></span>**1. INFORMATION WE MAY COLLECT**\n\nThe Ionic Services gather certain information automatically, some of which may be considered personal information under applicable law.\n\nWe collect, process, share, and retain information from you and any devices you may use when you access our Websites, use our Services, register for an account with us, provide us information on a web form, update or add information to your account, participate in community discussions, chats, or otherwise correspond with us. The specific information we collect depends upon your use of the Services and Websites, and is described below:\n\nWe may collect, among other things, the following types of information:\n\n-   Name\n\n-   Address (including billing and shipping address)\n\n-   Telephone number\n\n-   Email address\n\n-   Fax number\n\n-   Professional information, such as employer or organizational affiliation for a customer or partner\n\n-   Payment or financial information for billing purposes\n\n-   Screen name\n\n-   Screen sharing views, at the request of customers, for support and quality assurance (“QA”) purposes\n\n-   Any data in any files uploaded, emailed or otherwise provided by customers for support and QA\n\n-   Operating system type and version, web server type and version, database type and version\n\n-   Unique IDs such as a cookie placed on a computer or mobile device, or device IDs\n\n-   IP address or MAC address, and information derived from an IP or MAC address, such as geographic location\n\n-   Browsing activities, cookies and similar data, and platform or mobile application use data\n\n-   Referring domain, destination domain and destination path\n\n-   Geolocational data, including latitudinal and longitudinal data\n\n-   User IDs and passwords for customers with accounts on the Ionic Services\n\n-   Information about the performance, security, software configuration and availability of our software on your servers and network\n\n-   Website user statistics and website and viewing activity records\n\n-   Communication preferences\n\n-   Other similar information\n\nWe may also collect information, including personal information, in the following situations:\n\n-   **Registration, purchase and use of the Ionic Services**: Information such as name, email address, telephone number, company/organization, financial information, and other information, may be collected in connection with registration for, purchase of or use of the Ionic Services (for example, to sign-up for and log into the Ionic Services). Customers may update their information by logging into their account. Information may also be collected to track license use.\n\n-   **Communications**: Personal information such as name, email address, and other information, may be collected, when provided in any communications, whether via email, social media, telephone or otherwise.\n\n-   **Support**: Personal information may be collected in connection with customer support, whether via screensharing, email, social media, telephone or otherwise.\n\n-   **Surveys and Research**: We may collect personal information from anyone participating in research and surveys.\n\n-   **Information We Automatically Collect**: We receive and store certain types of information whenever you interact with us or our Services and Websites. Our Websites use “cookies,” tagging and other tracking technologies. This information includes computer and connection information such as statistics on your page views, traffic to and from our Websites, referral URL, ad data, your IP address, and device identifiers; this information may also include your browsing history, transaction history, and your web log information.\n\n-   **Information From Social Media and Other Sites**: When you interact with our Websites or Services on a social media platform, we may collect the personal information that you make available to us on that page, including your account ID or username. If you choose to log in to your Ionic account with or through a social networking service, Ionic and that service may share certain information about you and your activities.\n\n-   **User Comments and Content**: If you post any comments or content on our Websites, you should be aware that any personally identifiable information you choose to provide there may be read, collected, or used by third parties. We are not responsible for the information you choose to submit and we cannot guarantee that third parties have not made copies of or will not use such information in any way.\n\n-   **Information From Other Sources**: We may supplement the personal information we collect with information from third parties and add it to your account information. Information from third parties may include, but is not limited to, demographic information that is publicly available, additional contact information, group affiliations, occupational information, and educational background.\n\n    You can choose not to provide us with certain information, but then you might not be able to take advantage of many features of the Websites and Ionic may not be able to provide you with certain Services.\n\n<span id=\"Use\" class=\"anchor\"></span>**2. USE OF INFORMATION**\n\nIonic Services may use the information, including personal information, collected in connection with the Ionic Services for the purpose of providing the Services to our customers, as well as for supporting our business functions, such as fraud prevention, marketing, analytics and legal functions, and other legitimate purposes.\n\nTo the extent permitted by applicable law and, for customer data, as permitted by our customer agreements, we may use information collected in connection with our Services:\n\n-   To operate the Ionic Services and provide support.\n\n-   To provide, maintain, and improve the Websites for internal or other business purposes.\n\n-   To fulfill customer requests, such as to create an Ionic Services account or to provide, produce, and ship ordered products or requested services.\n\n-   To communicate with our customers; to inform customers and users of products, programs, services, Customer Accounts, Content Owner Accounts, profiles or transactions with us, and changes to our policies or terms, as applicable.\n\n-   To send offers, promotions, or other communications about our products and Services, including special or promotional events, including services, products, or events for which we collaborate or co-offer with a third party.\n\n-   To send customers information regarding the Ionic Services, including information about features and enhancements on or to our Websites and issues specifically affecting Ionic Services.\n\n-   To respond to reviews, comments, or other feedback provided to us.\n\n-   To support, optimize, improve and personalize our Services, Websites, mobile services, and advertising, including tracking and evaluating the use of the Websites.\n\n-   To customize or personalize ads, offers and content made available to you based on your visits to and/or usage of the Websites or its services.\n\n-   In the case of server logs, to help us statistically monitor how many people are using our site and for what purpose.\n\n-   To send newsletters or other materials.\n\n-   To protect the security and integrity of our Services, content, and our business.\n\n-   For benchmarking, data analysis, audits, developing new products, enhancing the Ionic Services, facilitating product, software and applications development, improving our services, conducting research, analysis, studies or surveys, identifying usage trends, as well as for other analytics purposes.\n\n-   To perform statistical, demographic, and marketing analyses of users of the Websites and their viewing patterns.\n\n-   To meet our contractual requirements, to comply with applicable legal or regulatory requirements and our policies, and to protect against criminal activity, claims and other liabilities.\n\n-   For any other lawful purpose for which the information is provided, including fulfilling requests for information.\n\n**Aggregate Information**. To the extent permitted by applicable law, we may use, process, transfer, and store any data about individuals and customers or partners in an anonymous (or pseudonymous) and aggregated manner. We may combine personal information with other information, collected online and offline, including information from third party sources. We may also use information in other ways with consent or as permitted by applicable law. By using the Ionic Services, our customers agree that we are hereby licensed to collect, use, share and store anonymized (or pseudonymized) aggregated data collected through the Ionic Services for benchmarking, analytics, A/B testing, metrics, research, reporting, machine learning and other business purposes.\n\n**Automated Decisions**. To the extent permitted by applicable law, we may collect data in an automated manner and make automated decisions, including using machine learning algorithms, about individual users of the Ionic Services in order to provide or optimize the Ionic Services offered and/or delivered, for security or analytics purposes, and for any other lawful purpose.\n\n<span id=\"Sharing\" class=\"anchor\"></span>**3. SHARING OF INFORMATION**\n\nTo the extent permitted by applicable law, Ionic may share and disclose information, including personal information, as set forth below:\n\n-   **Customers**. We may share information with our customers and their service providers and other platforms that may assist those customers.\n\n-   **Affiliates and Agents**. We may share information with our affiliates or any business partners or agents acting on our behalf.\n\n-   **Service Providers**. We may share information with our service providers, agents, vendors and other third parties we use to support and advertise the Ionic Services and our business. We share personal information with such third parties to the extent necessary to provide services to us, and pursuant to binding contractual obligations.\n\n-   **Advertising and Marketing**. To the extent permitted by applicable law, we may share information with third parties for marketing, advertising, promotions, contests, or other similar purposes and to provide you with customized or personalized ads, offers, and content. If required by applicable law, we will share such data for advertising and marketing purposes only in an aggregate, anonymous, and de-identified manner.\n\n-   **Mergers, Acquisitions, Divestitures**. We may share, disclose or transfer information to a buyer, investor, new affiliate, or other successor in the event Ionic, or any affiliate, portion, group or business unit thereof, undergoes a business transition, such as a merger, acquisition, joint venture, consolidation, reorganization, divestiture, liquidation or dissolution (including bankruptcy), or a sale or other transfer of all or a portion of any assets of Ionic or any affiliates or during steps in contemplation of such activities (e.g., negotiations and due diligence).\n\n-   **Law Enforcement and National Security**. We may share information with legal, governmental, or judicial authorities, as instructed or required by those authorities or applicable laws, or to comply with any law or directive, judicial or administrative order, legal process or investigation, warrant, subpoena, government request, regulatory request, law enforcement or national security investigation, or as otherwise required or authorized by law.\n\n-   **Protection of Rights, Property or Safety**. We may also share information if, in our sole discretion, we believe disclosure is necessary or appropriate to protect the rights, property or safety of any person, or if we suspect fraud or other illegal activity,\n\nIonic may also disclose personal information for other purposes or to other third parties when an individual has consented to, or requested, such disclosure, or where a customer has obtained permission from such individual, or where such disclosure is otherwise legally permitted for legitimate business purposes, and, for customer data, with such customer’s authorization or otherwise in accordance with Ionic’ agreement with such customer.\n\n<span id=\"Cookies\" class=\"anchor\"></span>**4. COOKIES AND SIMILAR TECHNOLOGIES**\n\nWe may use cookies and similar technologies to operate and improve the Ionic Services, as well as to simplify our interaction with you. A \"cookie\" is a unique numeric code that we transfer to your computer so that we can keep track of your interests and/or preferences and recognize you as a return visitor to the Services. We may use cookies, log files, pixel tags, web bugs, web beacons, clear GIFs, Local Storage Objects (LSOs) such as HTML5 and Flash or other similar technologies to collect information about the ways you interact with and use the Ionic Services, to support and enhance features and functionality, to monitor performance, to personalize content and experiences, for marketing and analytics, and for other lawful purposes.\n\nWe may use the following types of cookies and similar technologies:\n\n-   **Strictly necessary cookies** required for the operation of the Ionic Services. They include, for example, cookies that enable you to log into secure areas.\n\n-   **Analytical/performance cookies** that collect information about how you use the Ionic Services. They allow us to recognize and count the number of visitors and to see how visitors move around our Websites. This helps us to improve the way our Websites work. \\[These cookies are sometimes placed by third party providers of web traffic analysis services.\\]\n\n-   **Functionality cookies** that remember choices you make and recognize you when you return. This enables us to personalize our content, greet you by name and remember your preferences (for example, your choice of language or region).\n\n-   **Targeting cookies** that collect information about your browsing habits such as the pages you have visited and the links you have followed. We use this information to make our Website more relevant to your interests, and, if we enable advertising, to make advertising more relevant to you, as well as to limit the number of times you see an ad. These cookies are usually placed by third-party advertising networks. \\[They remember the other websites that you visit and this information is shared with third-party organizations, for example, advertisers.\\]\n\nMost internet browsers accept cookies by default. You can block cookies by activating the setting on your browser that allows you to reject all or some cookies. The help and support area on your internet browser should have instructions on how to block or delete cookies. Some web browsers (including some mobile web browsers) provide settings that allow you to control or reject cookies or to alert you to when a cookie is placed on your computer, tablet or mobile device. Although you are not required to accept cookies, if you block or reject them, you may not have access to all of the features available through the Ionic Services.\n\nFor more information, visit the help page for your web browser or see <http://www.allaboutcookies.org> or visit [www.youronlinechoices.com](http://www.youronlinechoices.com) which has further information about behavioral advertising and online privacy.\n\nWe may use third party analytics such as Google Analytics or similar analytics services. For information on how Google processes and collects your information regarding Google Analytics and how you can opt-out, please see <https://tools.google.com/dlpage/gaoptout> .\n\nWe may also use third-party vendor marketing tools, including the Google Adwords tracking cookie and similar mechanisms from Hubspot, Kissmetrics, Adroll, Drift, LinkedIn and Profitwell to provide you with customized or personalized ads or other messages. These messages may appear on sites across the Internet. The third-party vendors use cookies, web beacons, and similar technologies to help us tailor advertising that we think may be of interest to you and to collect and use other data about user activities on our Websites and Services to provide you with personalized information about products, services, programs, events and advertising.\n\nTo opt-out of the collection and use of information for such marketing on Facebook, please visit www.aboutads.info/choices. To opt-out of Google's use of cookies, please visit Google’s Ads Settings at <https://adssettings.google.com/>. You can also opt out of certain third-party vendors’ use of cookies by visiting the Network Advertising Initiative opt-out page at\n\n<http://www.networkadvertising.org/managing/opt_out.asp>.\n\n<span id=\"Retention\" class=\"anchor\"></span>**5. DATA RETENTION**\n\nTo the extent permitted by applicable law, we may retain information for as long as the account of the customer for whom we collected the information is active, for at least six (6) months thereafter, or as long as is reasonably necessary to provide the Ionic Services or as needed for other lawful purposes. We may retain cached or archived copies of information. We may retain anonymized or pseudonymized, aggregated data indefinitely, to the extent permitted under applicable law. We may be required to retain some data for a longer period of time because of various laws and regulations or because of contractual obligations. We also will retain information as long as reasonably necessary to comply with our legal obligations, resolve disputes and enforce our agreements.\n\n<span id=\"Choices\" class=\"anchor\"></span>**6. CHOICES AND OPT-OUT**\n\nTo the extent required by applicable law, or in our discretion otherwise, we will allow customers and individuals to limit use of personal information. If at any time after providing us with your personal information such information changes or you change your mind about receiving information from us, you may request access to your data or that your data be changed.\n\nIf you no longer wish to receive our communications, you may opt-out of receiving them at any time by following the instructions included in each communication, by going to our Unsubscribe page https://ionicframework.com/unsubscribe, or by mail at Drifty Co. (d/b/a Ionic), 121 S. Pinckney St. Suite 300 Madison, WI 53703; Attn: Privacy.\n\n<span id=\"CrossDevice\" class=\"anchor\"></span>**7. CROSS-DEVICE TRACKING**\n\n<span id=\"_Hlk510514023\" class=\"anchor\"></span>When you use your mobile device to interact with us or use the Ionic Services, we may receive information about your mobile device, including a unique identifier for your device. We and our service providers and third parties we collaborate with, including ad networks, may use cross-device/cross-context tracking. For example, you might use multiple browsers on a single device, or use various devices (such as desktops, smartphones, and tablets), which can result in your having multiple accounts or profiles across these various contexts and devices. Cross-device/cross-context technology may be used to connect these various accounts or profiles and the corresponding data from the different contexts and devices.\n\n<span id=\"Employment\" class=\"anchor\"></span>**8. EMPLOYMENT OPPORTUNITIES**\n\nWe provide you with a means for submitting your resume or other personal information through our Website or Services for consideration for employment opportunities at Ionic. Personal information received through resume submissions will be kept confidential. We may contact you for additional information to supplement your resume, and we may use your personal information within Ionic, or keep it on file for future use, as we make our hiring decisions.\n\n<span id=\"ThirdPartySites\" class=\"anchor\"></span>**9. THIRD PARTY SITES**\n\nThe Ionic Services may provide links to other websites or resources over which Ionic does not have control (“External Web Sites”). Such links do not constitute an endorsement by Ionic of those External Web Sites. You acknowledge that Ionic is providing these links to you only as a convenience, and further agree that Ionic is not responsible for the content of such External Web Sites. Your use of External Web Sites is subject to the terms of use and privacy policies located on the applicable External Web Site. We encourage you to be aware when leaving our Services and to read the privacy statements of External Web Sites that collect your personal information.\n\n<span id=\"Security\" class=\"anchor\"></span>**10. SECURITY**\n\nTo prevent unauthorized access or disclosure, to maintain data accuracy, and to ensure the appropriate use of personal information, we employ procedural and technological measures that are reasonably designed to help safeguard the information we collect. Only authorized Ionic personnel have access to the personal information, including server logs and cookie utilization data, that we collect. These individuals are required to follow strict security policies and procedures. Ionic may use encryption, secure socket layer, firewall, password protection and other physical and logical security measures to help prevent unauthorized access to such. Ionic may also place internal restrictions on who in the company may access data to help prevent unauthorized access to such information.\n\nUnfortunately, no data transmission over the Internet or data storage system can be guaranteed to be 100% secure. Therefore, despite our efforts, we cannot guarantee its absolute security. We do not warrant or represent that personal information about you will be protected against, loss, misuse, or alteration by third parties.\n\nIf you use the Services, you are responsible for maintaining the confidentiality of your access information and password. You are responsible for restricting access to your computer, and you agree to accept responsibility for all activities that occur under your password. We cannot secure any personal information that you release on your own, that you request us to release or that is released through another third party to whom you’ve given access.\n\nWhere required under applicable law or by contract, we will notify the appropriate parties or individuals of any loss, misuse or alteration of personal information so that such parties or individuals can take the appropriate actions for the due protection of their rights. If such personal information is information of an Ionic customer, we will notify such customer and coordinate with them regarding any required notices to particular individuals.\n\n<span id=\"Children\" class=\"anchor\"></span>**11. CHILDREN**\n\nWe recognize the importance of protecting the privacy and safety of children. The Ionic Services are not intended for children under 13 years of age - and for European residents, for children under 16 years of age - see our [European Privacy Policy](#Euro). We do not knowingly collect personal information from children under 13. Anyone under 13 should not use the Ionic Services. If we learn we have collected or received personal information from a child under 13 without verification of parental consent, we will delete that information. If you believe we might have any information from or about a child under 13, please contact us as set forth below.\n\n<span id=\"International\" class=\"anchor\"></span>**12. INTERNATIONAL DATA TRANSFERS**\n\nThe Ionic Services may be provided using resources and servers located in various countries around the world, including the United States and other countries. Therefore, personal information about individuals or customers may be transferred, processed and stored outside the country where the Ionic Services are used, including to countries outside the European Union (“EU”), European Economic Area (“EEA”) or Switzerland, where the level of data protection may not be deemed adequate by the European Commission. With respect to Europe, we comply with the EU-US Privacy Shield Framework as described in our EU-U.S. Privacy Shield Privacy Policy, which supplements this policy, and may also use standard data protection clauses adopted by supervisory authorities and approved by the European Commission to safeguard transfers.\n\n<span id=\"California\" class=\"anchor\"></span>**13. CALIFORNIA PRIVACY RIGHTS**\n\nUnder California’s “Shine the Light” law, California residents who provide personal information in obtaining products or services for personal, family or household use may be entitled to request and obtain from us, once per calendar year, information about customer information we have shared, if any, with other businesses for such other businesses’ own direct marketing uses. If applicable, this information would include the categories of resident information and the names and addresses of those businesses with which we shared such resident information for the immediately prior calendar year. To obtain this information, please contact us as indicated below. Please include sufficient personal identification information so that we can process the request, including that you are a California resident.\n\n<span id=\"Questions\" class=\"anchor\"></span>**14. QUESTIONS, COMPLAINTS AND DISPUTES**\n\nIf you have any questions about this Privacy Policy, or our collection, use, sharing or storage of information about you, you can contact us by email at **privacy@ionic.io**, or write to the following address:\n\nAttn: Privacy Team<br>\nDrifty Co. (d/b/a Ionic)<br>\n121 S. Pinckney St.<br>\nSuite 300<br>\nMadison, WI<br>\n53703<br>\nPhone: +1 (608) 807-5560\n\nA.  **CLASS ACTION WAIVER. YOU AND WE AGREE THAT EACH MAY BRING CLAIMS AGAINST THE OTHER ONLY IN YOUR OR OUR INDIVIDUAL CAPACITY AND NOT AS A PLAINTIFF OR CLASS MEMBER IN ANY PURPORTED CLASS OR REPRESENTATIVE PROCEEDING.**\n\nB.  **DISPUTE RESOLUTION**\n\n> Except as otherwise expressly provided above, or in our European privacy policy or otherwise required by applicable law, you agree that the exclusive jurisdiction of any actions arising out of, relating to, or in any way connected with, this privacy policy, shall be in the state or federal courts, as applicable, located in the Madison, WI. Any dispute, controversy, or claim arising out of or relating to this privacy policy or the collection, use, storage or transfer of any of your information or data, including, but not limited to, the arbitrability of the matter or the formation, interpretation, scope, applicability, termination, or breach of this privacy policy, shall be referred to and finally determined by arbitration in accordance with the JAMS Streamlined Arbitration Rules and Procedures, or JAMS International Arbitration Rules, if the matter is deemed \"international\" within the meaning of that term as defined in the JAMS International Arbitration Rules. The arbitration shall be administered by JAMS, shall take place before a sole arbitrator, and shall be conducted in \\[\\]. If the JAMS International Arbitration Rules apply, the language to be used in the arbitral proceedings will be English. Judgment upon the arbitral award may be entered by any court having jurisdiction. This section shall apply to and require arbitration of all disputes, controversies, and claims, regardless of whether such disputes, controversies, or claims concern a single individual, entity, or other person, multiple individuals, entities, or other people, or classes of individuals, entities, or other people. You hereby consent to receive service of process by electronic means or social media to the extent allowed by the applicable court. This constitutes express agreement of the parties regarding your consent pursuant to United States Federal Rule of Civil Procedure 5(b)(2)(E) and any applicable state (or other jurisdiction) equivalent.\n\n<span id=\"Updates\" class=\"anchor\"></span>**15. PRIVACY POLICY UPDATES**\n\nIonic may update this Privacy Policy from time to time in our sole discretion to reflect changes to our information and privacy practices. Ionic will post any updated Privacy Policy on this page at https:// ionicframework.com/privacy or in the Ionic Services, or with any notice to individual users if required by applicable law. Continued use of the Ionic Services after any such modifications constitutes acceptance to any such modified Privacy Policy. Ionic encourages you to review this Privacy Policy regularly for any changes. The date of last revision is shown at the “*Last Updated*” legend at the top of this page.\n\nIf you have any questions regarding our Privacy Policy, the practices of this site, or your dealings with us, please feel free to email us at privacy@ionicframework.com.\n\n<span id=\"Euro\" class=\"anchor\"></span>**EUROPEAN PRIVACY POLICY**\n\n**The following** <span id=\"_Hlk510504049\" class=\"anchor\"></span>**European Privacy Policy applies if you are in the European Union, the European Economic Area and Switzerland.**\n\n**Personal Data** **and** **Processing**. For the purposes of this European Privacy Policy:\n\n> “***Personal Data***” means any information relating to an identified or identifiable natural person who can be identified, directly or indirectly, in particular by reference to an identifier such as a name, an identification number, location data, an online identifier or to one or more factors specific to the physical, physiological, genetic, mental, economic, cultural or social identity of such natural person; and\n>\n> “***Processing***” means any operation or set of operations which is performed on Personal Data or on sets of Personal Data, whether or not by automated means, such as collection, recording, organization, structuring, storage, adaptation or alteration, retrieval, consultation, use, disclosure by transmission, dissemination or otherwise making available, alignment or combination, restriction, erasure or destruction.\n\n**EU-U.S. and Swiss-U.S. Privacy Shield Notice**. We are in the process of submitting our certification of compliance with the [EU-U.S. and Swiss-U.S. Privacy Shield](https://www.privacyshield.gov/welcome) with respect to the personal data of users of the Ionic Services who are residents of the European Union (“EU”), European Economic Area (“EEA”) and Switzerland that we receive and process through the Ionic Services. Upon the completion of such submission, we will certify that we adhere to the Privacy Shield Principles of notice, choice, onward transfer, security, data integrity, access, liability, and enforcement (“Privacy Shield Principles”) for personal data of users of the Ionic Services in the countries participating in the EU-U.S. and Swiss-U.S. Privacy Shield Frameworks. Once complete, our certification will be available [here](https://www.privacyshield.gov/list). We may also process personal data submitted relating to individuals in Europe via other compliance mechanisms, including use of the European Union Standard Contractual Clauses or Binding Corporate Rules.\n\n**Purposes and Legal Basis for Processing Personal Data**. Ionic processes data for the purposes as set forth in our Privacy Policy, including to provide the Ionic Services and as explained in the [Use of Information](#Use) and [Sharing of Information](#Sharing) sections. To fulfill these purposes, Ionic may access data, including Personal Data, to provide the Ionic Services, to correct and address technical, service or security problems, or in response to contractual requirements. Please see our Ionic Privacy Policy [Information We Collect](#InformationCollected) and [Data Retention](#Retention) sections for additional details on how we collect, use, disclose and share data, make automated decisions, and retain data, including Personal Data, about individual users or customers.\n\nOur legal basis for the processing of Personal Data are: (i) consent or (ii) any other applicable legal basis, such as our legitimate interest in engaging in commerce, offering products and services of value to the customers of the Ionic Services, preventing fraud, ensuring information and network security, direct marketing and advertising, and complying with industry practices.\n\n**Additional Rights for European Residents**. As a resident of the EU or a country following substantially similar legislation regarding the protection of Personal Data, individuals may have one or more of the following additional rights:\n\n> ***Access***. To request a copy of the Personal Data we have collected about you by contacting us.\n>\n> ***Rectification & Erasure***. To request that we rectify or delete any of the Personal Data about you that is incomplete, incorrect, unnecessary or outdated.\n>\n> ***Objection***. To object, at any time, to Personal Data about you being Processed for direct marketing purposes.\n>\n> ***Restriction of Processing***. To request restriction of Processing of Personal Data about you for certain reasons, such as, for example, if you consider Personal Data about you collected by us to be inaccurate or you have objected to the Processing and the existence of legitimate grounds for Processing is still under consideration.\n>\n> ***Data Portability***. To request and receive the Personal Data we have collected about you in a commonly used and machine-readable form.\n>\n> ***Right to Withdraw Consent***. If Personal Data about you is processed solely based on your consent and not for any other legitimate interest, to withdraw your consent at any time, without affecting the lawfulness of our Processing based on such consent before it was withdrawn, including processing related to existing contracts for our products and services.\n>\n> ***Right to Lodge a Complaint with a DPA***. If you believe our Processing of Personal Data about you is inconsistent with the applicable data protection laws, to lodge a complaint with your local supervisory data protection authority (“DPA”).\n\nTo exercise any of the above listed rights, please contact us as set forth below and provide sufficient details so that we can respond appropriately. We will process any requests in accordance with applicable law and within a reasonable period of time. We may need to verify the identity of the individual submitting a request before we can address such request. If the request relates to data our customers collect and process through the Ionic Services, we will refer the request to that customer and will support them in responding to the request. For Ionic customers, certain information may be reviewed, corrected and updated by logging into the Ionic Services account and editing the profile information.\n\n**Questions and Complaints**. Residents of a country participating in the Privacy Shield Framework may direct any questions or complaints concerning our Privacy Shield compliance to our Data Protection Contact. We will work with you to resolve your issue.\n\n**Compelled Disclosures**. Ionic may be required to disclose Personal Data in response to lawful requests by public authorities, including to meet national security or law enforcement requirements.\n\n**Data Protection Contact.** Unless otherwise specified, the data controller of personal data uploaded to the Ionic Services is the Ionic customer for whom such Services are provided and Ionic is the processor of such data for such customer. In certain cases, Ionic may also be the controller of aggregated, anonymous or pseudonymous data relating to the Ionic Services. Our Data Protection Contact for the personal information collected in connection with the Ionic Services is:\n\nAttn: Privacy Team<br>\nDrifty Co. (d/b/a Ionic)<br>\n121 S. Pinckney St.<br>\nSuite 300<br>\nMadison, WI<br>\n53703<br>\nPhone: +1 (608) 807-5560\n\n<p><br></p>"
  },
  {
    "path": "server/markdown/tos.md",
    "content": "# SERVICES AGREEMENT\nTHIS SERVICES AGREEMENT (the “Agreement”) is made as of the Effective Date by and between Drifty Co. (d/b/a “Ionic”), a Delaware corporation with its principal offices at 121 S. Pinckney St. Suite 300 Madison, WI 53703 (“Drifty”), and the party entering into this Agreement for the use of the Service (“Client”). By accessing, copying, or otherwise using the Service (the date of which shall be known as the “Effective Date”), Client acknowledges that it has read this Agreement, understands it, and agrees to be bound by its terms and conditions, including Drifty’s [Privacy Policy](/privacy). If Client does not agree to the terms and conditions of this Agreement, do not access or use the Service. Drifty will not and does not license and make the Service available unless Client agrees to the terms of this Agreement. In consideration of the mutual covenants and agreements set forth herein, and other good and valuable consideration, receipt of which are hereby acknowledged, the parties agree as follows:\n1. **Scope of agreement.** Drifty offers a service and tools that facilitate the development and design of hybrid mobile apps using certain web technologies and certain ancillary applications, analytics, documentation, and services to Client, all as more particularly described at ionicframework.com (the “Service”), and Drifty desires to make such Service and its component parts available to Client on the terms and conditions described below.\n2. **Description of Services.**\n   * **2.1 Service.** In consideration of payment of the applicable fees for the subscription plan you select in your order (“Plan”) and subject to the terms and conditions of this Agreement and any limitations stated as part of your Plan (e.g. number of Registered Users (as defined in Section 3.1 below)), Client shall have the non-exclusive, non-transferable, non-assignable, limited right during the applicable period for which Client has subscribed under the Plan to access and use, via its Registered Users, the Service as hosted and made available to Client by Drifty (and to use the corresponding documentation), solely to serve Client’s internal business needs and solely within the specific scope and limitations, and for the specific configuration(s), specified in the Plan.\n   * **2.2 Availability of Service.** Drifty will use commercially reasonable efforts to make the Service available to Client twenty-four hours a day, seven days per week, three hundred sixty five days per year, except for certain scheduled service and maintenance or in the event of emergency or events of force majeure. Notwithstanding the foregoing, Drifty will not be responsible for any downtime or failure to meet such Service availability goals. Drifty will make good faith efforts to perform service and maintenance to the Service outside peak usage hours. Client acknowledges that availability of the Service may be affected by: (i) telecommunication network activity or capacity; (ii) hardware failures; and/or (iii) compatibility with third party communication equipment, Internet access software and/or browsers not in accordance with the Service requirements. Drifty disclaims any and all responsibility for any service interruption in connection with such activity, capacity, failure and/or compatibility. Client is responsible for providing all equipment and telecommunication services necessary to access the Service.\n   * **2.3 Modifications to Service.** Drifty reserves the right to change the Service (including the content, appearance, design, functionality and all other aspects thereof), access procedures, tools, web technologies, documentation, format requirements, communications protocols and services offered at any time for any reason.\n   * **2.4 Customer Service, Training, and Technical Support.** Drifty will provide Client with customer support for the Service through our online community forums and support portal. Drifty will further provide Client with reasonable e-mail customer support during Drifty business hours. Drifty does not guarantee that the support will be available or that Drifty will respond within a prescribed period or that Drifty will make the Service work for Client’s purposes, on Client’s system or resolve all problems in connection therewith.\n   * **2.5 Right to Remove.** Drifty has the right in its sole discretion to remove or block any text, images, artwork, technology and other content, data, information, materials and other items provided or made available to Drifty or stored on or uploaded to the Service by Client (“Client Materials”) at any time where (a) such Client Materials violate applicable laws, regulations, orders, or is in violation of Drifty’s applicable policies and procedures, including without limitation any acceptable use policies; (b) removal or blocking is necessary because of exigent circumstances or to protect the safety, security, reputation, or integrity of the Service, Drifty, or any third party; or (c) in order to respond to law enforcement or any other governmental authority.\n3. **Client Responsibilities**\n   * **3.1 Passwords.** Client acknowledges that use of the Service requires that it register with Drifty and select a Plan. Client shall cause all employees or subcontractors of Client authorized to access the Service (“Users”) to register to have access to the Service (“Registered Users”). Client shall cause each Registered User to (a) provide true, accurate, current and complete information about the User prompted by the registration form (such information being the \"Registration Data\") and (b) maintain and promptly update the Registration Data to keep it true, accurate, current and complete. Drifty has the right to suspend or terminate any Registered User account and refuse any and all current or future use of the Service (or any portion thereof) to anyone that provides false or inaccurate data. Each Registered User is entirely responsible for the security and confidentiality of such User’s password and account. Client and each Registered User are entirely responsible for any and all activities that occur under that Registered User’s account. Client shall immediately notify Drifty of any unauthorized use of a Registered User’s account or any other breach of security of which Client becomes aware.\n   * **3.2 Accuracy and Review of Client Material.** Client assumes sole responsibility for: (a) the Client Materials; and (b) ensuring that the Client Materials do not infringe or violate any right of any third party.\n4. **Data Backup.** Drifty will make commercially reasonable efforts to back up the Service, including Client Materials. Notwithstanding the foregoing, Client is responsible for saving all data, prototypes, work in progress, and apps to its own storage. Drifty disclaims any and all responsibility for any loss of data, prototypes, work in progress, or apps from the Service. Client acknowledges that data conversion, processing and manipulation are subject to the likelihood of human and machine errors, omissions, delays, and losses, including inadvertent loss of data or damage to media that may give rise to loss or damage. To the extent within its control, Client is responsible for adopting reasonable measures to limit the impact of such problems, including backing up data, and adopting procedures to ensure the accuracy of input data; examining and confirming results prior to use; and adopting procedures to identify and correct errors and omissions, replace lost or damaged media, and reconstruct data. Client is also responsible for complying with all local, state, and federal laws pertaining to the upload, use and disclosure of any data or Client Materials. In the event of termination or expiration of this Agreement or disconnection of the Service, Drifty may delete or store, in its discretion, any files, programs, data or messages associated with Client’s account.\n5. **Ownership**\n   * **5.1 Ownership.** As between Drifty and Client, Drifty (or its licensors) is the sole and exclusive owner, and will retain all right, title and interest in and to the Service, including without limitation all of the software comprising any portion thereof and all related services, specifications, documentation, technical information, corrections, modifications, additions, improvements and enhancements to and all intellectual property rights in the foregoing. As between Drifty and Client, the Client Materials and any projects completed by Client using Drifty shall be and remain the sole and exclusive property of Client. As between Drifty and Client, all data analytics and aggregated data generated from Client’s use of the Service shall be the sole and exclusive property of Drifty. Drifty shall have the right to use, create derivative works of, distribute and otherwise exploit, all such data analytics and anonymous, aggregate usage data derived from Client Materials such as the aggregate number of transactions that occur within a particular Service. Drifty may also use Client Materials and any projects completed by Client for internal research purposes.\n   * **5.2 Drifty License Restrictions and Limitations.** Except for the license granted in Section 2 above, Client (or a Registered User) may not use, copy, modify, rent, loan, lease, sublicense, create derivative works or distribute the Service for any other purposes or make the Service available to non-Registered Users. Drifty grants no rights other than explicitly granted herein, and Client shall not exceed the scope of its license. All techniques, know-how, software, algorithms and methods or rights thereto owned by Drifty at the time this Agreement is executed, developed during the course of the design, development, and provision of the Service, or which are employed by Drifty in connection with the Service, shall be and remain the property of Drifty. Client shall not decompile, disassemble, or reverse engineer the Service or any elements of the Service, or otherwise derive source or object code from the Service or any elements thereof. At any time, Client may request in writing that Drifty to increase the applicable licensing limitation(s) in its then-current Plan. Such additional license rights will commence on Client’s receipt of Drifty’s agreement to increase the applicable licensing limitation(s) and Client’s agreement to pay the corresponding increased fees. In addition to the foregoing restrictions, Client agrees that it shall comply with, and acknowledges that its rights hereunder are conditioned upon compliance with,  all terms of use imposed by the applicable App Store from which Client accessed and downloaded Drifty’s applications contained in the Service (in each case, the “Usage Rules”).  In connection with the foregoing, Client acknowledge that an App Store (and its subsidiaries) may be third-party beneficiaries of this Agreement and may have the right to enforce these terms.\n   * **5.3 Client's Grant of License.** Client hereby grants to Drifty a worldwide, non-exclusive, royalty-free, license to use, distribute, reproduce, publicly perform, publicly display, digitally perform, make, have made, store, maintain and import all Client Materials for the purposes of providing and operating the Service. The license may also be exercised on behalf of Drifty by third parties acting on Drifty’s behalf (e.g., technology partners, service providers and independent contractors).\n   * **5.4 Feedback.** Drifty shall have a royalty-free, worldwide, perpetual license to use or incorporate into the Service any suggestions, ideas, enhancement requests, feedback, recommendations or other information provided by Client relating to the operation of the Service.\n6. **Reserved.**\n7. **Payments.**\n   * **7.1 Fees.** During the term of this Agreement, Client will pay Drifty the subscription and usage fees as set forth in the Plan description (the “Fees”). Client shall pay Drifty the Fees in U.S. funds monthly in advance via credit card or other mutually agreed process. If Client fails to pay the Fees within 30 days of the due date, Client’s credit card is rejected, or Drifty otherwise does not receive payment, Drifty may impose a late fee, suspend the Service, or both, in its discretion. Drifty may increase the Fees at any time.\n   * **7.2 Taxes.** Client shall pay or reimburse Drifty for all sales, use, transfer, privilege, excise, and all other taxes and all duties, whether international, national, state or local, however designated, which are levied or imposed specifically by reason of the performance by Drifty under this Agreement; excluding, however, taxes measured by Drifty’s profits, its overall sales, employment and similar taxes incurred in connection with persons performing services for Drifty, and property or other taxes measured in whole or in part by the value of Drifty’s assets.\n8. **Term And Termination.**\n   * **8.1 Term.** The initial term of this Agreement shall be for a period of one (1) year following the Effective Date. Thereafter, this Agreement shall automatically renew for consecutive one (1) year periods unless terminated by written notice by a party at least 30 days before the expiration of the then current term.\n   * **8.2 Suspension for Cause.** Drifty may suspend Client’s access to the Service upon written notice in the event that Client exceeds the license described in Section 2.1 and Section 5, Client fails to pay any amount when due, or where Client reasonably believes such action is necessary to protect the security or integrity of the Service or any data thereon.\n   * **8.3 Termination for Cause.** Except as otherwise provided for herein, either party may terminate this Agreement (a) upon the material breach of the other party, provided that the breaching party shall have thirty (30) days to cure such breach following written notice unless the breach by its nature takes longer than thirty (30) days to cure in which case the breaching party shall not be in breach so long as the party begins to cure the breach within thirty (30) days and diligently completes such cure; (b) upon the cessation of business by either party or the filing of a petition in bankruptcy (voluntary or involuntary) with respect to a party, which in the case of an involuntary petition the party shall have sixty (60) days in which to vacate such petition; or (c) upon the failure by Client to pay any amount due hereunder, provided that Client shall have ten (10) days to cure such monetary breach following written notice. Notwithstanding the foregoing, in the event that Drifty reasonably determines that a breach of this Agreement is not curable by Client within the applicable cure period set forth herein, Drifty may terminate this Agreement immediately upon written notice to Client.\n   * **8.4  Termination for Convenience.**  Drifty may terminate this Agreement and all then-current Plans upon delivery of no less than thirty (30) days prior written notice to Client; upon any such termination, Drifty shall promptly refund to Client a prorated portion of all unused fees.\n   * **8.5 Effect of Termination.** Upon any termination of this Agreement, all rights and obligations of the parties under this Agreement will be extinguished, except that (a) the rights and obligations under Sections 5.4, 7.2, 8.4, 10, 11, 12, and 15 will survive the termination of the Agreement, and (b) Client shall pay all unpaid and outstanding fees through the effective date of termination or expiration of the Agreement.\n9. **Warranties.** Each party represents and warrants to the other party that (i) such party has the full corporate right, power and authority to enter into this Agreement and to perform that acts required of it hereunder; (ii) the execution of this Agreement by such party, and the performance by such party of its obligations and duties hereunder, do not and will not violate any agreement to which such party is a party or by which such party is otherwise bound; and (iii) when executed and delivered by such party, this Agreement will constitute the legal, valid and binding obligation of such party, enforceable against such party in accordance with its terms.\n10. **Indemnification.**\n   * **10.1** Client agrees to indemnify, defend and hold harmless Drifty (its affiliates, subsidiaries, shareholders, officers, directors, employees, contractors, agents and representatives) (together, the “Drifty Indemnified Parties”) from and against any cost, claim, liability or expense any of the Drifty Indemnified Parties incur as a result of or arising out of or related to: (i) Client’s breach of this Agreement or of Client’s warranties, covenants and representations made hereunder; (ii) Client’s willful, negligent, tortuous or criminal acts or omissions; (iii) any improper use of Client’s Registration Data; and (iv) Client’s violation of any third party rights. The applicable Drifty Indemnified Party shall provide Client written notice of any claim for it seeks indemnification under this Section.\n   * **10.2** Drifty agrees to indemnify and hold harmless Client (its affiliates, subsidiaries, shareholders, officers, directors, employees, contractors, agents and representatives) (together, the “Client Indemnified Parties”) against any cost, claim, liability or expense any of the Client Indemnified Parties incur as a result of or arising out of or related to: (i) Drifty’s breach of this Agreement or of Drifty’s warranties, covenants and representations made hereunder; (ii) Drifty’s willful, negligent, tortuous or criminal acts or omissions; (iii) any improper access of Client’s Data; and (iv) Drifty’s intentional violation of any third party rights. The applicable Client Indemnified Party shall provide Client written notice of any claim for it seeks indemnification under this Section.\n   * **10.3** The Service is not designed for the transfer or processing of credit card or other sensitive financial information and is not PCI compliant. It is also not designed for the transfer or processing of any patient or other sensitive health care information or to be in compliance with any other specific regulatory requirements. All products and services provided by Drifty under this Agreement should not be deemed or understood as a recommendation, endorsement, guarantee or warranty of the professional services of any providers who provide financial services, health care services, or other regulated services. Client will indemnify Drifty Indemnified Parties against and hold it harmless from any and all claims, liabilities, damages, costs and expenses arising from the transfer or processing of credit card or other financial, or other sensitive information through the Service, including, without limitation, attorneys’ fees, relating to or arising out of any claim by any third party that the Service or its use has resulted in personal injury, economic loss or any other damages to any person or property.\n11. **Confidential Information.**\n   * **11.1** Each party acknowledges and agrees that it (and its subcontractor(s), if any), in performing its obligations under this Agreement, shall have access to or be directly or indirectly exposed to each other’s Confidential Information. Each party shall hold confidential all Confidential Information and shall not disclose such Confidential Information to third parties nor use the other party’s Confidential Information for any purpose other than as necessary to perform under this Agreement. Each party shall use reasonable measures and reasonable efforts to provide protection for each other’s Confidential Information, including measures at least as strict as those each party uses to protect its own Confidential Information. Such measures shall include, without limitation, requiring employees and independent contractors to sign a non-disclosure agreement before obtaining access to the other party’s Confidential Information and such other measures as the party takes to protect its Confidential Information or trade secrets in the course of its business. “Confidential Information” means information in the possession or under the control of a party relating to the technical, marketing, product and/or business affairs or proprietary and trade secret information of that party in oral, graphic, written, electronic or machine readable form, Client Materials, source code and information pertaining to usage and design of the Service, and the terms and conditions of this Agreement.\n   * **11.2** The foregoing restrictions on disclosure shall not apply to Confidential Information which is (a) already known by the recipient, (b) becomes, through no act or fault of the recipient, publicly known, (c) received by recipient from a third party without a restriction on disclosure or use, or (d) independently developed by recipient without reference to the other party’s Confidential Information.\n   * **11.3** Because of the unique nature of each party’s proprietary materials, each party understands and agrees that the other party will suffer irreparable injury in the event that a party fails to comply with any of the terms of this Section 11, and that monetary damages may be inadequate to compensate for such breach. Accordingly, each party agrees that the other party will, in addition to any other remedies available to it at law or in equity, be entitled to seek injunctive relief, without posting a bond, to enforce the terms of this Agreement against any actual or threatened breach of this Section 11.\n12. **Disclaimers of Warranty; Limitation of Liability.**\n   * **12.1** The Service is made available by Drifty to Client “AS IS” and “WITH ALL FAULTS, ERRORS, BUGS AND DEFECTS.” Drifty makes no representation or warranty of any kind, express or implied, as to the condition, character, nature, capability, performance, security, availability, suitability, title, source or any other characteristic of the Service or any portion thereof. DRIFTY HEREBY DISCLAIMS ALL WARRANTIES, EXPRESS OR IMPLIED, WITH RESPECT TO THE SERVICE OR THIS AGREEMENT, INCLUDING: (A) ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, TITLE OR NON-INFRINGEMENT; (B) ANY IMPLIED WARRANTY ARISING FROM COURSE OF DEALING, COURSE OF PERFORMANCE OR USAGE OF TRADE; OR (C) ANY WARRANTY THAT THE SERVICE WILL BE SECURE OR ERROR-FREE, WILL MEET CLIENT’S REQUIREMENTS, WILL CONTAIN ANY PARTICULAR FEATURES OR FUNCTIONALITY, WILL ALWAYS BE AVAILABLE, ACCESSIBLE, UNINTERRUPTED, TIMELY OR SECURE, OR OPERATE WITHOUT ERROR.\n   * **12.2** EXCEPT WITH RESPECT TO DAMAGES OR LIABILITY ARISING FROM (A) A PARTY’S BREACH OF ITS OBLIGATIONS WITH RESPECT TO CONFIDENTIAL INFORMATION OR (B) CLIENT’S MISAPPROPRIATION OF DRIFTY’S INTELLECTUAL PROPERTY, IN NO EVENT SHALL (I) EITHER PARTY BE LIABLE FOR CONSEQUENTIAL, INDIRECT, INCIDENTAL, PUNITIVE, EXEMPLARY OR SPECIAL DAMAGES ARISING OUT OF OR IN CONNECTION WITH THIS AGREEMENT OR THE SERVICE, INCLUDING ANY LOSS OF REVENUE, PROFITS, OR DATA, EVEN IF SUCH PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES; AND (II) EITHER PARTY’S TOTAL AGGREGATE LIABILITY ARISING OUT OF OR IN CONNECTION WITH THIS AGREEMENT FOR ALL CLAIMS ACCRUING DURING THE TERM OF THIS AGREEMENT EXCEED THE GREATER OF $500 OR THE AMOUNTS PAID BY CLIENT DURING THE TWELVE (12) MONTH PERIOD IMMEDIATELY PRECEDING THE DATE OF THE APPLICABLE CLAIM.\n13. **Data Protection.** Each Party represents and warrants that: (i) it is knowledgeable of, and familiar with, all applicable federal, state, and local laws, rules, regulations, codes, directives, and industry standards relating to privacy applicable to its business (“Privacy Laws”); (ii) it will comply with its respective obligations under any and all applicable Privacy Laws; (iii) the other Party will have no responsibility for the other Party’s compliance with Privacy Laws; and (iv) Client’s information will be collected and used in accordance with Drifty’s [Privacy Policy](/privacy).\n14. **Notices.** Unless otherwise specifically provided in this Agreement, every notice or other communications required or permitted under this Agreement shall be valid only if in writing and shall be delivered either by personal delivery; by nationally recognized overnight courier service; or by certified or registered mail, return receipt requested, addressed to the names and addresses of each party set forth on the corresponding registration materials.\n15. **General Provisions.** This Agreement shall be governed by and interpreted in accordance with the internal laws of the State of Delaware without regard to its conflict of laws provisions. The titles of the sections of this Agreement are for convenience only and shall not affect the interpretation or construction of any section. The language used in this Agreement shall be deemed to be the language chosen by the parties hereto to express their mutual agreement. Any rule of construction to the effect that ambiguities are to be resolved against the drafting party shall not be applied in the construction or interpretation of this Agreement. The words “include” and “including” and variations thereof are not terms of limitation, but rather shall be deemed to be followed by the words “without limitation.” This Agreement, including the corresponding Order Form and any other policies referenced herein, represents the entire agreement between the parties with respect to the subject matter hereof and all other negotiations, understandings and agreements relating thereto, whether written or oral, including but not limited to all requests for proposal, proposals, payments or other forms, are nullified and superseded hereby. Whenever possible, each provision of this Agreement shall be interpreted in such manner as to be effective and valid under applicable law, but if any provision of this Agreement is held to be prohibited by or invalid under applicable law, such provision shall be ineffective only to the extent of such prohibition or invalidity, without invalidating the remainder of such provision or the remaining provisions of this Agreement. A waiver of any of the terms of this Agreement, or any breach or default hereunder, shall not be deemed or construed as a waiver of such terms for the future or any subsequent breach or default, whether or not of the same or similar nature. This Agreement may only be modified, amended or supplemented at any time by Drifty in its sole discretion. If any litigation is brought to enforce, or arises out of, the Agreement or any term, clause, or provision hereof, the prevailing party shall be awarded its reasonable attorneys’ fees together with expenses and costs incurred with such litigation, including necessary fees, costs, and expenses for services rendered, as well as subsequent to judgment in obtaining execution thereof.\n"
  },
  {
    "path": "server/markdown.js",
    "content": "const fs          = require('fs'),\n      marked      = require('marked'),\n      frontmatter = require('front-matter');\n\nmodule.exports = function(res, filename) {\n\n  filename += '.md';\n\n  return fs.readFile('./server/markdown/' + filename, 'utf8', function(err, data) {\n    if (err) {\n      res.status(500).render('_layouts/base', {\n        markdown: '<h1>Unable to load ' + filename + '</h1>'\n      });\n      return;\n    }\n\n    if (res.req.url.indexOf('/press/release/') === 0) {\n      res.locals.header_style = 'transparent light press-release';\n      res.locals.press_breadcrumb = true;\n      let title = filename.split('-');\n      title.splice(0, 2);\n      res.locals.title = title.join(' ').replace('.md','&hellip;');\n    }\n\n    const parsed = frontmatter(data);\n    res.locals = {...res.locals, ...parsed.attributes }\n\n    res.render('_layouts/base', {markdown: marked(parsed.body)});\n  });\n};\n"
  },
  {
    "path": "server/pageNotFound.js",
    "content": "const url         = require('url');\n\nsend404 = res => {\n    res.status(404);\n    return res.render('404');\n\n}\n\nmodule.exports = {\n  handleNotFound: function(req, res, next) {\n    var parts = url.parse(req.url);\n    let urlParts = req.path.split('/');\n\n    // we don't need to worry about non-docs pages, just 404 it\n    if (urlParts[1] === 'docs') {\n      // native links might erroneosly contain capital letters\n      if (req.path.includes('/native/') && /[A-Z]/.test(req.path)) {\n        return res.redirect(301, req.path.toLowerCase() ) || true;\n\n      // native links might erroneosly contain dashes\n      } else if (req.path.includes('/native/') && req.path.includes('%20')) {\n        return res.redirect(301, req.path.replace('%20', '-') ) || true;\n\n        // remove erroneous double slashes \n        } else if (req.path.includes('//')) {\n          return res.redirect(301, req.path.replace('//', '/') ) || true;\n\n      } else if (urlParts[2].charAt(0) === '1') {\n        // if v1 version is pruned, redirect to v1 latest\n        urlParts[2] = '1.3.2';\n        return res.redirect(301, urlParts.join('/')) || true;\n      } else if (urlParts[2] === 'v2') {\n        // update to new v2 location\n        return res.redirect(301, req.path.replace('/docs/v2', '/docs')) || true;\n      } else if (urlParts[2].charAt(0) === '2') {\n        // if version is pruned, redirect to latest release\n        urlParts[2] = '';\n        return res.redirect(301, urlParts.join('/').replace('//', '/')) || true;\n      } else if (urlParts[2] == 'resources') {\n        // resources is now developer-resources\n        return res.redirect(301, \n          req.path.replace('/resources', '/developer-resources')) || true;\n      }\n    }\n\n    console.error(`404 on request: path=${req.path} referer=${req.headers.referer}`);\n    send404(res);\n  }\n}\n"
  },
  {
    "path": "server/pages/404.html",
    "content": "{% extends '_layouts/base.html' %}\n{% set title = \"404 - Page Not Found\" %}\n{% set id = \"404\" %}\n{% set header_style = 'transparent light' %}\n{% set pre_footer = false %}\n\n{% block main %}\n<div class=\"four-oh-four\">\n  <img src=\"/img/framework-four-oh-four.png\" />\n  <h2>Ooops. The page you're looking for got lost in space.</h2>\n  <p>The address might be mistyped or the page may have moved.</p>\n  <a href=\"/\">Take me back home</a>\n</div>\n{% endblock %}\n"
  },
  {
    "path": "server/pages/_includes/footer.html",
    "content": "<footer>\n  <nav class=\"container\">\n    <a class=\"logo\" href=\"/\">\n      <svg id=\"ionic-io-logo\" width=\"94px\" height=\"31px\" viewBox=\"0 0 95 32\">\n        <g fill-rule=\"nonzero\">\n          <g id=\"icon\">\n            <path\n              d=\"M15.9567568,8.75675676 C11.9567568,8.75675676 8.71351351,12 8.71351351,16 C8.71351351,20 11.9567568,23.2432432 15.9567568,23.2432432 C19.9567568,23.2432432 23.2,20 23.2,16 C23.1783784,12 19.9351351,8.75675676 15.9567568,8.75675676 Z\"\n              id=\"Shape\"\n            ></path>\n            <circle\n              id=\"Oval\"\n              cx=\"26.3351351\"\n              cy=\"6.0972973\"\n              r=\"3.30810811\"\n            ></circle>\n            <path\n              d=\"M30.4,9.40540541 L30.2702703,9.1027027 L30.0540541,9.36216216 C29.5135135,9.96756757 28.8216216,10.4432432 28.0648649,10.7243243 L27.8486486,10.8108108 L27.9351351,11.027027 C28.6054054,12.6054054 28.9297297,14.2918919 28.9297297,16 C28.9297297,23.1567568 23.1135135,28.9945946 15.9351351,28.9945946 C8.75675676,28.9945946 2.96216216,23.1567568 2.96216216,16 C2.96216216,8.84324324 8.77837838,3.00540541 15.9567568,3.00540541 C17.9027027,3.00540541 19.7621622,3.43783784 21.5135135,4.25945946 L21.7081081,4.34594595 L21.7945946,4.12972973 C22.1189189,3.37297297 22.6162162,2.72432432 23.2648649,2.20540541 L23.5243243,1.98918919 L23.2216216,1.83783784 C20.9513514,0.67027027 18.5081081,0.0648648649 15.9351351,0.0648648649 C7.17837838,0.0648648649 0.0432432432,7.2 0.0432432432,15.9567568 C0.0432432432,24.7135135 7.17837838,31.8486486 15.9351351,31.8486486 C24.6918919,31.8486486 31.827027,24.7135135 31.827027,15.9567568 C31.827027,13.7081081 31.3513514,11.5027027 30.4,9.40540541 Z\"\n              id=\"Shape\"\n            ></path>\n          </g>\n          <g id=\"logotype\" transform=\"translate(40.000000, 8.000000)\">\n            <rect\n              id=\"Rectangle-path\"\n              x=\"0.0216216216\"\n              y=\"1.08108108\"\n              width=\"3.35135135\"\n              height=\"13.8378378\"\n            ></rect>\n            <rect\n              id=\"Rectangle-path\"\n              x=\"36.1945946\"\n              y=\"1.08108108\"\n              width=\"3.35135135\"\n              height=\"13.8378378\"\n            ></rect>\n            <path\n              d=\"M28.4540541,0.756756757 C26.0972973,0.756756757 24.2810811,2.18378378 23.8702703,2.57297297 L23.6540541,1.08108108 L20.8648649,1.08108108 L20.8648649,14.9189189 L24.2162162,14.9189189 L24.2162162,6.55135135 C24.2162162,4.90810811 26.4432432,3.56756757 28.0864865,3.56756757 C29.6864865,3.56756757 30.9405405,5.12432432 30.9405405,6.98378378 L30.9405405,14.9189189 L34.2918919,14.9189189 L34.2918919,7.30810811 C34.2702703,3.67567568 32.6918919,0.756756757 28.4540541,0.756756757 Z\"\n              id=\"Shape\"\n            ></path>\n            <path\n              d=\"M48.3243243,12.4108108 C45.7945946,12.4108108 44.1297297,10.4432432 44.1297297,8 C44.1297297,5.55675676 45.7945946,3.58918919 48.3243243,3.58918919 C50.4648649,3.58918919 51.7837838,5.66486486 51.7837838,5.66486486 L54.2054054,4.04324324 C53.5135135,2.96216216 52.6918919,2.31351351 51.5891892,1.64324324 C50.7675676,1.14594595 49.6648649,0.735135135 48.4324324,0.735135135 C44.2378378,0.735135135 41.0378378,3.89189189 41.0162162,7.97837838 C41.0378378,12.0648649 44.2378378,15.2216216 48.4324324,15.2216216 C49.6648649,15.2216216 50.7675676,14.8108108 51.5891892,14.3135135 C52.6918919,13.6432432 53.5135135,12.9945946 54.2054054,11.9135135 L51.7837838,10.2918919 C51.7837838,10.3135135 50.4864865,12.4108108 48.3243243,12.4108108 Z\"\n              id=\"Shape\"\n            ></path>\n            <path\n              d=\"M12.1081081,0.756756757 C7.89189189,0.756756757 4.86486486,4.06486486 4.86486486,7.93513514 C4.86486486,11.8702703 7.80540541,15.2432432 12.172973,15.2432432 C16.1297297,15.2432432 19.3513514,12.2162162 19.3513514,8.02162162 C19.3513514,3.22162162 15.5891892,0.756756757 12.1081081,0.756756757 Z M12.1513514,3.61081081 C14.227027,3.61081081 16.1945946,5.2972973 16.1945946,8.02162162 C16.1945946,10.6810811 14.227027,12.4108108 12.1297297,12.4108108 C9.83783784,12.4108108 8.02162162,10.5513514 8.02162162,8 C8.02162162,5.47027027 9.81621622,3.61081081 12.1513514,3.61081081 Z\"\n              id=\"path3000_1_\"\n            ></path>\n          </g>\n        </g>\n      </svg>\n    </a>\n\n    <ul>\n      <li><strong>Products</strong></li>\n      <li>\n        <a\n          href=\"https://ionic.io/appflow\"\n          rel=\"noopener\"\n          id=\"btn-footer-appflow\"\n          >Appflow</a\n        >\n      </li>\n      <li><a href=\"/native\" id=\"btn-footer-appflow\">Native</a></li>\n      <li>\n        <a href=\"/integrations\" id=\"btn-footer-integrations\">Integrations</a>\n      </li>\n      <li><a href=\"/pricing\" id=\"btn-footer-pricing\">Pricing</a></li>\n    </ul>\n    <ul>\n      <li><strong>Developers</strong></li>\n      <li>\n        <a href=\"https://ionicframework.com/docs\" id=\"btn-footer-docs\">Docs</a>\n      </li>\n      <li><a href=\"/community\" id=\"btn-footer-community\">Community</a></li>\n      <li>\n        <a\n          href=\"https://ionicframework.com/docs/components\"\n          id=\"btn-footer-ui-components\"\n          >UI Components</a\n        >\n      </li>\n      <li>\n        <a href=\"https://stenciljs.com/\" id=\"btn-footer-stencil\">Stencil</a>\n      </li>\n      <li>\n        <a href=\"https://capacitorjs.com/\" id=\"btn-footer-capacitor\"\n          >Capacitor</a\n        >\n      </li>\n      <li>\n        <a href=\"https://blog.ionicframework.com\" id=\"btn-footer-blog\">Blog</a>\n      </li>\n    </ul>\n    <ul>\n      <li><strong>Enterprise</strong></li>\n      <li><a href=\"/enterprise\">Ionic Enterprise</a></li>\n      <li><a href=\"https://ionic.io/why-ionic\">Why Ionic?</a></li>\n      <li><a href=\"/enterprise/platform\">Platform</a></li>\n      <li><a href=\"/enterprise/solutions\">Solutions</a></li>\n      <li><a href=\"https://ionic.io/customers\">Customers</a></li>\n      <li><a href=\"/resources\">Resources</a></li>\n    </ul>\n    <ul>\n      <li><strong>Resources</strong></li>\n      <li>\n        <a href=\"https://ionic.io/support\" id=\"btn-footer-help-center\"\n          >Help Center</a\n        >\n      </li>\n      <li>\n        <a href=\"https://forum.ionicframework.com\" id=\"btn-footer-forum\"\n          >Forum</a\n        >\n      </li>\n      <li>\n        <a href=\"/trusted-partners\" id=\"btn-footer-consulting-partners\"\n          >Trusted Partners</a\n        >\n      </li>\n      <li><a href=\"https://ionic.io/advisory\">Advisory Services</a></li>\n    </ul>\n    <ul>\n      <li><strong>Company</strong></li>\n      <li><a href=\"https://ionic.io/about\" id=\"btn-footer-about\">About</a></li>\n      <li><a href=\"/team\" id=\"btn-footer-team\">Team</a></li>\n      <li><a href=\"https://ionic.io/about/jobs\" id=\"btn-footer-jobs\">Jobs</a></li>\n      <li><a href=\"/press\" id=\"btn-footer-press\">Press</a></li>\n    </ul>\n    <ul>\n      <li><strong>Contact</strong></li>\n      <li><a href=\"/sales\" id=\"btn-footer-sales\">Contact Sales</a></li>\n      <li>\n        <a href=\"https://ionic.zendesk.com/hc/en-us\" id=\"btn-footer-get-help\"\n          >Get help</a\n        >\n      </li>\n      <li><a href=\"/contact\" id=\"btn-footer-blog\">Contact us</a></li>\n      <li>\n        <a href=\"https://twitter.com/IonicFramework\" id=\"btn-footer-twitter\"\n          >Twitter</a\n        >\n      </li>\n      <li>\n        <a href=\"https://github.com/ionic-team/ionic\" id=\"btn-footer-github\"\n          >Github</a\n        >\n      </li>\n    </ul>\n  </nav>\n  <div class=\"signup container\">\n    <hgroup>\n      <h3>Join our Newsletter</h3>\n      <p>\n        Sign up to receive a monthly email on the latest Ionic updates,\n        features, and news!\n      </p>\n    </hgroup>\n    <ionic-newsletter-signup\n      arrow-mode=\"true\"\n      lg=\"true\"\n    ></ionic-newsletter-signup>\n  </div>\n  <div class=\"container\">\n    <div class=\"sub-footer\">\n      <ul>\n        <li class=\"copyright\">&copy;{{ now.getFullYear() }} Ionic</li>\n        <li class=\"tos\"><a href=\"/tos\">Terms</a></li>\n        <li class=\"privacy\"><a href=\"/privacy\">Privacy</a></li>\n      </ul>\n      <ul>\n        <li class=\"social-start\">\n          <a\n            href=\"https://twitter.com/IonicFramework\"\n            title=\"twitter\"\n            id=\"btn-footer-twitter\"\n          >\n            <svg\n              width=\"16\"\n              height=\"16\"\n              viewBox=\"0 0 16 16\"\n              fill=\"none\"\n              xmlns=\"http://www.w3.org/2000/svg\"\n            >\n              <path\n                d=\"M15.3749 3.42188C14.8312 3.6625 14.2499 3.825 13.6374 3.9C14.2624 3.525 14.7437 2.93125 14.9687 2.225C14.3843 2.57187 13.7374 2.825 13.0468 2.95937C12.4937 2.36875 11.7062 2 10.8374 2C9.16555 2 7.81243 3.35625 7.81243 5.02812C7.81243 5.26562 7.83743 5.49688 7.89055 5.71875C5.37493 5.59375 3.14368 4.3875 1.65305 2.55312C1.39368 3 1.24368 3.52187 1.24368 4.075C1.24368 5.125 1.78118 6.05313 2.59368 6.59688C2.09368 6.58438 1.62493 6.44688 1.21868 6.21875V6.25625C1.21868 7.725 2.26243 8.94688 3.6468 9.225C3.39368 9.29375 3.12493 9.33125 2.84993 9.33125C2.65618 9.33125 2.46555 9.3125 2.28118 9.275C2.66555 10.4781 3.7843 11.3531 5.1093 11.3781C4.07493 12.1906 2.76868 12.675 1.34993 12.675C1.10618 12.675 0.865552 12.6594 0.628052 12.6313C1.96243 13.5 3.55305 14 5.2593 14C10.8312 14 13.8749 9.38438 13.8749 5.38125C13.8749 5.25 13.8718 5.11875 13.8656 4.99062C14.4562 4.5625 14.9687 4.03125 15.3749 3.42188Z\"\n              />\n            </svg>\n          </a>\n        </li>\n        <li>\n          <a\n            href=\"https://github.com/ionic-team/ionic\"\n            title=\"github\"\n            id=\"btn-footer-github\"\n          >\n            <svg\n              width=\"16\"\n              height=\"16\"\n              viewBox=\"0 0 16 16\"\n              fill=\"none\"\n              xmlns=\"http://www.w3.org/2000/svg\"\n            >\n              <path\n                d=\"M8 1C4.13438 1 1 4.21563 1 8.17813C1 11.35 3.00625 14.0375 5.7875 14.9875C5.83125 14.9969 5.86875 15 5.90625 15C6.16563 15 6.26562 14.8094 6.26562 14.6438C6.26562 14.4719 6.25938 14.0219 6.25625 13.4219C5.99375 13.4812 5.75938 13.5063 5.55 13.5063C4.20313 13.5063 3.89687 12.4594 3.89687 12.4594C3.57812 11.6313 3.11875 11.4094 3.11875 11.4094C2.50938 10.9812 3.11562 10.9688 3.1625 10.9688H3.16563C3.86875 11.0312 4.2375 11.7125 4.2375 11.7125C4.5875 12.325 5.05625 12.4969 5.475 12.4969C5.80312 12.4969 6.1 12.3906 6.275 12.3094C6.3375 11.8469 6.51875 11.5312 6.71875 11.35C5.16563 11.1688 3.53125 10.5531 3.53125 7.80312C3.53125 7.01875 3.80312 6.37813 4.25 5.87813C4.17812 5.69688 3.9375 4.96563 4.31875 3.97813C4.31875 3.97813 4.36875 3.9625 4.475 3.9625C4.72812 3.9625 5.3 4.05937 6.24375 4.71562C6.80312 4.55625 7.4 4.47812 7.99687 4.475C8.59062 4.47812 9.19063 4.55625 9.75 4.71562C10.6938 4.05937 11.2656 3.9625 11.5188 3.9625C11.625 3.9625 11.675 3.97813 11.675 3.97813C12.0563 4.96563 11.8156 5.69688 11.7437 5.87813C12.1906 6.38125 12.4625 7.02187 12.4625 7.80312C12.4625 10.5594 10.825 11.1656 9.26562 11.3438C9.51562 11.5656 9.74063 12.0031 9.74063 12.6719C9.74063 13.6313 9.73125 14.4062 9.73125 14.6406C9.73125 14.8094 9.82812 15 10.0875 15C10.125 15 10.1687 14.9969 10.2125 14.9875C12.9969 14.0375 15 11.3469 15 8.17813C15 4.21563 11.8656 1 8 1Z\"\n              />\n            </svg>\n          </a>\n        </li>\n        <li>\n          <a\n            href=\"https://www.facebook.com/ionicframework\"\n            title=\"facebook\"\n            id=\"btn-footer-facebook\"\n          >\n            <svg\n              width=\"16\"\n              height=\"16\"\n              viewBox=\"0 0 16 16\"\n              fill=\"none\"\n              xmlns=\"http://www.w3.org/2000/svg\"\n            >\n              <path\n                d=\"M13.3375 2H2.6625C2.29687 2 2 2.29687 2 2.6625V13.3375C2 13.7031 2.29687 14 2.6625 14H8V9.25H6.56563V7.5H8V6.20625C8 4.65625 9.075 3.8125 10.4594 3.8125C11.1219 3.8125 11.8344 3.8625 12 3.88438V5.50313H10.8969C10.1438 5.50313 10 5.85938 10 6.38438V7.5H11.7937L11.5594 9.25H10V14H13.3375C13.7031 14 14 13.7031 14 13.3375V2.6625C14 2.29687 13.7031 2 13.3375 2Z\"\n              />\n            </svg>\n          </a>\n        </li>\n        <li>\n          <a\n            href=\"https://www.youtube.com/c/Ionicframework\"\n            title=\"youtube\"\n            id=\"btn-footer-youtube\"\n          >\n            <svg\n              width=\"16\"\n              height=\"16\"\n              viewBox=\"0 0 16 16\"\n              fill=\"none\"\n              xmlns=\"http://www.w3.org/2000/svg\"\n            >\n              <path\n                d=\"M15.8938 4.65C15.8938 3.24375 14.8594 2.1125 13.5813 2.1125C11.8501 2.03125 10.0844 2 8.28132 2H7.71882C5.91882 2 4.15007 2.03125 2.41882 2.1125C1.14382 2.1125 0.109448 3.25 0.109448 4.65625C0.031323 5.76875 -0.00305198 6.88125 7.30167e-05 7.99375C-0.00305198 9.10625 0.031323 10.2188 0.106323 11.3344C0.106323 12.7406 1.1407 13.8813 2.4157 13.8813C4.23445 13.9656 6.10007 14.0031 7.99695 14C9.89695 14.0063 11.7563 13.9688 13.5782 13.8813C14.8563 13.8813 15.8907 12.7406 15.8907 11.3344C15.9657 10.2188 16.0001 9.10625 15.9969 7.99062C16.0032 6.87813 15.9688 5.76562 15.8938 4.65ZM6.46882 11.0594V4.91875L11.0001 7.9875L6.46882 11.0594Z\"\n              />\n            </svg>\n          </a>\n        </li>\n        <li>\n          <a\n            href=\"https://medium.com/ionic-and-the-mobile-web\"\n            title=\"medium\"\n            id=\"btn-footer-medium\"\n          >\n            <svg\n              width=\"12\"\n              height=\"12\"\n              viewBox=\"0 0 12 12\"\n              fill=\"none\"\n              xmlns=\"http://www.w3.org/2000/svg\"\n            >\n              <path\n                d=\"M0 0V12H12V0H0ZM9.96923 2.84308L9.32308 3.45846C9.26769 3.50154 9.24308 3.56923 9.24923 3.63692V8.17231C9.23692 8.24 9.26769 8.30769 9.32308 8.35077L9.95077 8.96615V9.10154H6.78769V8.96615L7.44 8.33231C7.50154 8.27077 7.50154 8.25231 7.50154 8.15385V4.49231L5.69231 9.08923H5.44615L3.34769 4.49231V7.57538C3.32923 7.70462 3.37231 7.83385 3.46462 7.92615L4.30769 8.96V9.09538H1.90769V8.96L2.75692 7.93231C2.84923 7.84 2.88615 7.70462 2.86769 7.58154V4.01231C2.88 3.91385 2.83692 3.81538 2.76308 3.74769L2.01231 2.84308V2.70769H4.35077L6.16 6.67077L7.74154 2.70769H9.96923V2.84308Z\"\n              />\n            </svg>\n          </a>\n        </li>\n        <li>\n          <a\n            href=\"https://stackoverflow.com/questions/tagged/ionic-framework\"\n            title=\"stack-overflow\"\n            id=\"btn-footer-stack-overflow\"\n          >\n            <svg\n              width=\"12\"\n              height=\"14\"\n              viewBox=\"0 0 12 14\"\n              fill=\"none\"\n              xmlns=\"http://www.w3.org/2000/svg\"\n            >\n              <path\n                d=\"M10.6705 13.0032V10H12V14H0V10H1.3295V13.0032H10.6705Z\"\n              />\n              <path\n                d=\"M2.13865 9.02954L8.68977 10.3629L8.96707 9.08017L2.41594 7.74684L2.13865 9.02954ZM3.0052 5.99156L9.07106 8.74262L9.62565 7.56118L3.55979 4.79325L3.0052 5.99156ZM4.68631 3.08861L9.83362 7.25738L10.6828 6.2616L5.53553 2.09283L4.68631 3.08861ZM8.01386 0L6.93934 0.776371L10.9255 6.00844L12 5.23207L8.01386 0ZM2 12H8.68977V10.7004H2V12Z\"\n              />\n            </svg>\n          </a>\n        </li>\n      </ul>\n    </div>\n  </div>\n</footer>\n"
  },
  {
    "path": "server/pages/_includes/head.html",
    "content": "{% import \"_includes/macros.html\" as macros %}\r\n<meta charset=\"utf-8\">\r\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\r\n\r\n{% if dev %}\r\n  {% if not noGlobalStyles %}\r\n  <link href=\"/css/styles.css\" rel=\"stylesheet\">\r\n  {% endif %}\r\n{% else %}\r\n  {% if not noGlobalStyles %}\r\n  <link href=\"/css/styles.min.css\" rel=\"stylesheet\">\r\n  {% endif %}\r\n{% endif %}\r\n\r\n{% if cssPath %}\r\n  {{ macros.pageSpecificCSS(dev, cssPath, cssVersion) }}\r\n{% endif %}\r\n\r\n{% if title %}\r\n  <title>{{title}}</title>\r\n{% elif 'products-' in id %}\r\n  <title>Ionic Appflow - {{ id | replace('products-','') | title}}</title>\r\n{% elif isEnterprise %}\r\n  <title>Ionic for Enterprise - {{ id | replace('enterprise-','') | replace(\"-\", \" \") | title}}</title>\r\n{% elif name %}\r\n  <title>Ionic Framework - {{name}}</title>\r\n{% elif id %}\r\n  <title>Ionic Framework - {{id | replace(\"-\", \" \") | title}}</title>\r\n{% else %}\r\n  <title>Ionic Framework</title>\r\n{% endif %}\r\n\r\n{% if 'products' in id %}\r\n  {% if not meta_image %}\r\n    {% set meta_image = 'https://ionicframework.com/img/meta/ionic-pro-og.png' %}\r\n  {% endif %}\r\n  {% if not meta_description %}\r\n    {% set meta_description = \"The Ionic Appflow platform helps you build better apps on ionic framework with Appflow's integrated suite of tools and services designed for the entire app lifecycle.\" %}\r\n  {% endif %}\r\n  {% set meta_keywords = \"html5,javascript,mobile,drifty,ionic,hybrid,phonegap,cordova,native,ios,android,angularjs, ionic pro, ionic pro apps, ionic pro suite, ionic pro product, ionic pro tools\" %}\r\n{% endif %}\r\n\r\n{% if meta_description %}\r\n  <meta name=\"description\" content=\"{{ meta_description }}\">\r\n{% endif %}\r\n\r\n<meta name=\"author\" content=\"Ionic\">\r\n<meta name=\"keywords\" content=\"{% if meta_keywords %}{{ meta_keywords }}{% else %}html5,javascript,mobile,drifty,ionic,hybrid,phonegap,cordova,native,ios,android,angularjs{% endif %}\">\r\n{% if meta_canonical %}\r\n  <link rel=\"canonical\" href=\"{{meta_canonical}}\">\r\n{% else %}\r\n  <link rel=\"canonical\" href=\"https://ionicframework.com{{requrl}}\">\r\n{% endif %}\r\n\r\n<!-- Social: Twitter -->\r\n<meta name=\"twitter:card\" content=\"summary_large_image\">\r\n<meta name=\"twitter:site\" content=\"@ionicframework\">\r\n<meta name=\"twitter:creator\" content=\"ionicframework\">\r\n{% if title %}\r\n  <meta name=\"twitter:title\" content=\"{{title}}\">\r\n{% elif name %}\r\n  <meta name=\"twitter:title\" content=\"Ionic Framework - {{name}}\">\r\n{% elif id %}\r\n  <meta name=\"twitter:title\" content=\"Ionic Framework - {{id | title}}\">\r\n{% else %}\r\n  <meta name=\"twitter:title\" content=\"Ionic Framework\">\r\n{% endif %}\r\n<meta name=\"twitter:description\" content=\"{% if meta_description %}{{ meta_description }}{% else %}Ionic is the app platform for web developers. Build amazing mobile, web, and desktop apps all with one shared code base and open web standards{% endif %}\">\r\n<meta name=\"twitter:image\" content=\"{% if meta_image %}{{meta_image}}{% else %}https://ionicframework.com/img/meta/ionic-framework-og.png{% endif %}\">\r\n\r\n<!-- Social: Facebook / Open Graph -->\r\n<meta property=\"fb:page_id\" content=\"1321836767955949\">\r\n<meta property=\"og:url\" content=\"https://ionicframework.com{{url}}\">\r\n<meta property=\"og:type\" content=\"article\">\r\n{% if title %}\r\n  <meta property=\"og:title\" content=\"{{title}}\">\r\n{% elif name %}\r\n  <meta property=\"og:title\" content=\"Ionic Framework - {{name}}\">\r\n{% elif id %}\r\n  <meta property=\"og:title\" content=\"Ionic Framework - {{id | title}}\">\r\n{% else %}\r\n  <meta property=\"og:title\" content=\"Ionic Framework\">\r\n{% endif %}\r\n<meta property=\"og:image\" content=\"{% if meta_image %}{{meta_image}}{% else %}https://ionicframework.com/img/meta/ionic-framework-og.png{% endif %}\"/>\r\n<meta property=\"og:description\" content=\"{% if meta_description %}{{ meta_description }}{% else %}Ionic is the app platform for web developers. Build amazing mobile, web, and desktop apps all with one shared code base and open web standards{% endif %}\">\r\n<meta property=\"og:site_name\" content=\"Ionic Framework\">\r\n<meta property=\"article:publisher\" content=\"https://www.facebook.com/ionicframework\">\r\n<meta property=\"og:locale\" content=\"en_US\" />\r\n<link href=\"https://plus.google.com/+Ionicframework\" rel=\"publisher\" />\r\n\r\n\r\n<link rel=\"apple-touch-icon\" sizes=\"57x57\" href=\"/img/meta/apple-touch-icon-57x57.png\">\r\n<link rel=\"apple-touch-icon\" sizes=\"60x60\" href=\"/img/meta/apple-touch-icon-60x60.png\">\r\n<link rel=\"apple-touch-icon\" sizes=\"72x72\" href=\"/img/meta/apple-touch-icon-72x72.png\">\r\n<link rel=\"apple-touch-icon\" sizes=\"76x76\" href=\"/img/meta/apple-touch-icon-76x76.png\">\r\n<link rel=\"apple-touch-icon\" sizes=\"114x114\" href=\"/img/meta/apple-touch-icon-114x114.png\">\r\n<link rel=\"apple-touch-icon\" sizes=\"120x120\" href=\"/img/meta/apple-touch-icon-120x120.png\">\r\n<link rel=\"apple-touch-icon\" sizes=\"144x144\" href=\"/img/meta/apple-touch-icon-144x144.png\">\r\n<link rel=\"apple-touch-icon\" sizes=\"152x152\" href=\"/img/meta/apple-touch-icon-152x152.png\">\r\n<link rel=\"apple-touch-icon\" sizes=\"180x180\" href=\"/img/meta/apple-touch-icon-180x180.png\">\r\n{% if favicons %}\r\n{% for icon in favicons %}\r\n<link rel=\"icon\" type=\"image/png\" href=\"{{icon[0]}}\" sizes=\"{{icon[1]}}\">\r\n{% endfor %}\r\n{% else %}\r\n<link rel=\"icon\" type=\"image/png\" href=\"/img/meta/favicon-16x16.png\" sizes=\"16x16\">\r\n<link rel=\"icon\" type=\"image/png\" href=\"/img/meta/favicon-32x32.png\" sizes=\"32x32\">\r\n<link rel=\"icon\" type=\"image/png\" href=\"/img/meta/favicon-96x96.png\" sizes=\"96x96\">\r\n<link rel=\"icon\" type=\"image/png\" href=\"/img/meta/favicon-192x192.png\" sizes=\"192x192\">\r\n{% endif %}\r\n<link rel=\"manifest\" href=\"/manifest.json\">\r\n\r\n<meta name=\"msapplication-TileColor\" content=\"#da532c\">\r\n<meta name=\"msapplication-TileImage\" content=\"/img/meta/ms-icon-70x70.png\">\r\n<meta name=\"msapplication-TileImage\" content=\"/img/meta/ms-icon-144x144.png\">\r\n{% if not themeColor %}\r\n<meta name=\"theme-color\" content=\"#4c8fff\">\r\n{% else %}\r\n<meta name=\"theme-color\" content=\"{{themeColor}}\">\r\n{% endif %}\r\n\r\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\">\r\n\r\n{% if recaptcha %}\r\n<script src=\"https://www.google.com/recaptcha/api.js?render=6LfbcKAUAAAAACUDq_t59TP8MawQXB37DVEeSOjZ\"></script>\r\n{% endif %}\r\n\r\n{% if not noGlobalStencil %}\r\n<script type=\"module\" src=\"/js/stencil/ionic-site-components/ionic-site-components.esm.js\"></script>\r\n<script nomodule src=\"/js/stencil/ionic-site-components.js\"></script>\r\n{% endif %}\r\n"
  },
  {
    "path": "server/pages/_includes/header.html",
    "content": "{% include '_includes/mobile_nav.html' %} {% if not hide_pre_header and\nannouncementBar %}\n<!-- <a href=\"{{announcementBar.data.link.url}}\"\n         onclick=\"return c('MarketingCTAs','btn-header-announcement', this, 0);\"\n         rel=\"noopener\"\n         target=\"_blank\">\n<nav class=\"pre-header pre-header--{{announcementBar.data.theme | lower | replace(' ', '-')}}\">\n  <div class=\"container\">\n    <div{# id=\"optimizely\"#}>\n      <svg width=\"130\" height=\"54\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><mask id=\"e\" style=\"mask-type:alpha\" maskUnits=\"userSpaceOnUse\" x=\"0\" y=\"0\" width=\"130\" height=\"32\"><path d=\"M.1 3.44V.42h22.8c2.23 0 3.78 1 4.66 3.02H.1Zm0 4.02V4.44h27.76v.3c.04.07.05.14.05.2.04.1.05.27.05.51v2.01H.1Zm20.26 4.03V8.47h7.6v3.02h-7.6Zm7.6 3.02c0 .23-.01.4-.05.5 0 .07-.01.15-.05.25v.26H.5c.85-2.02 2.4-3.02 4.66-3.02h22.8v2Zm-.4 2.01a4.7 4.7 0 0 1-4.66 3.02H.1v-2.01c0-.24.02-.4.05-.5v-.2c.03-.1.05-.2.05-.3h27.36ZM.1 23.57v-3.02h7.6v3.02H.1Zm0 4.03v-3.02h27.86v3.02H.1Zm0 4.02V28.6h27.86v3.02H.1Z\" fill=\"url(#a)\"/><path d=\"M34.33 3.44c.84-2.02 2.4-3.02 4.66-3.02h17.73c2.23 0 3.78 1 4.66 3.02H34.33Zm-.4 4.02V5.45c0-.24 0-.4.04-.5v-.2c.04-.1.05-.2.05-.3H61.7v.3c.03.06.05.13.05.2.03.1.05.26.05.5v2.01H33.92Zm20.26 4.03V8.47h7.6v3.02h-7.6Zm-20.27 0V8.47h7.6v3.02h-7.6Zm20.27 4.03V12.5h7.6v3.02h-7.6Zm-20.27 0V12.5h7.6v3.02h-7.6Zm20.27 4.02v-3.02h7.6v3.02h-7.6Zm-20.27 0v-3.02h7.6v3.02h-7.6Zm20.27 4.03v-3.02h7.6v3.02h-7.6Zm-20.27 0v-3.02h7.6v3.02h-7.6Zm27.87 3.02c0 .24-.02.4-.05.5 0 .07-.02.16-.05.26v.25H34.02c0-.1-.01-.19-.05-.25v-.26c-.03-.1-.05-.26-.05-.5v-2.01H61.8v2.01Zm-.4 2.02a4.7 4.7 0 0 1-4.67 3.01H39c-2.26 0-3.82-1-4.66-3.02h27.05Z\" fill=\"url(#b)\"/><path d=\"M68.34 3.44V.42h22.8c2.23 0 3.78 1 4.66 3.02H68.34Zm0 4.02V4.44H96.1v.3c.04.07.05.14.05.2.04.1.05.27.05.51v2.01H68.34ZM88.6 11.5V8.47h7.6v3.02h-7.6Zm7.6 3.02c0 .23-.01.4-.05.5 0 .07-.01.15-.05.25v.26H68.74c.85-2.02 2.4-3.02 4.66-3.02h22.8v2Zm-.4 2.01a4.7 4.7 0 0 1-4.66 3.02h-22.8v-2.01c0-.24.01-.4.05-.5v-.2c.03-.1.05-.2.05-.3H95.8Zm-27.46 7.05v-3.02h7.6v3.02h-7.6Zm0 4.03v-3.02H96.2v3.02H68.34Zm0 4.02V28.6H96.2v3.02H68.34Z\" fill=\"url(#c)\"/><path d=\"M102.11 3.44V.42h22.8c2.23 0 3.78 1 4.66 3.02h-27.46Zm0 4.02V4.44h27.77v.3c.03.07.05.14.05.2.03.1.05.27.05.51v2.01H102.1Zm20.27 4.03V8.47h7.6v3.02h-7.6Zm7.6 3.02c0 .23-.02.4-.05.5 0 .07-.02.15-.06.25v.26h-27.35c.84-2.02 2.4-3.02 4.66-3.02h22.8v2Zm-.4 2.01a4.7 4.7 0 0 1-4.67 3.02h-22.8v-2.01c0-.24.02-.4.05-.5v-.2c.03-.1.05-.2.05-.3h27.36Zm-27.47 7.05v-3.02h7.6v3.02h-7.6Zm0 4.03v-3.02h27.87v3.02H102.1Zm0 4.02V28.6h27.87v3.02H102.1Z\" fill=\"url(#d)\"/></mask><g mask=\"url(#e)\"><path fill=\"url(#f)\" d=\"M-10.34-8.32h153.4v45.6h-153.4z\"/></g><mask id=\"k\" style=\"mask-type:alpha\" maskUnits=\"userSpaceOnUse\" x=\"0\" y=\"0\" width=\"130\" height=\"32\"><path d=\"M.1 3.44V.42h22.8c2.23 0 3.78 1 4.66 3.02H.1Zm0 4.02V4.44h27.76v.3c.04.07.05.14.05.2.04.1.05.27.05.51v2.01H.1Zm20.26 4.03V8.47h7.6v3.02h-7.6Zm7.6 3.02c0 .23-.01.4-.05.5 0 .07-.01.15-.05.25v.26H.5c.85-2.02 2.4-3.02 4.66-3.02h22.8v2Zm-.4 2.01a4.7 4.7 0 0 1-4.66 3.02H.1v-2.01c0-.24.02-.4.05-.5v-.2c.03-.1.05-.2.05-.3h27.36ZM.1 23.57v-3.02h7.6v3.02H.1Zm0 4.03v-3.02h27.86v3.02H.1Zm0 4.02V28.6h27.86v3.02H.1Z\" fill=\"url(#g)\"/><path d=\"M34.33 3.44c.84-2.02 2.4-3.02 4.66-3.02h17.73c2.23 0 3.78 1 4.66 3.02H34.33Zm-.4 4.02V5.45c0-.24 0-.4.04-.5v-.2c.04-.1.05-.2.05-.3H61.7v.3c.03.06.05.13.05.2.03.1.05.26.05.5v2.01H33.92Zm20.26 4.03V8.47h7.6v3.02h-7.6Zm-20.27 0V8.47h7.6v3.02h-7.6Zm20.27 4.03V12.5h7.6v3.02h-7.6Zm-20.27 0V12.5h7.6v3.02h-7.6Zm20.27 4.02v-3.02h7.6v3.02h-7.6Zm-20.27 0v-3.02h7.6v3.02h-7.6Zm20.27 4.03v-3.02h7.6v3.02h-7.6Zm-20.27 0v-3.02h7.6v3.02h-7.6Zm27.87 3.02c0 .24-.02.4-.05.5 0 .07-.02.16-.05.26v.25H34.02c0-.1-.01-.19-.05-.25v-.26c-.03-.1-.05-.26-.05-.5v-2.01H61.8v2.01Zm-.4 2.02a4.7 4.7 0 0 1-4.67 3.01H39c-2.26 0-3.82-1-4.66-3.02h27.05Z\" fill=\"url(#h)\"/><path d=\"M68.34 3.44V.42h22.8c2.23 0 3.78 1 4.66 3.02H68.34Zm0 4.02V4.44H96.1v.3c.04.07.05.14.05.2.04.1.05.27.05.51v2.01H68.34ZM88.6 11.5V8.47h7.6v3.02h-7.6Zm7.6 3.02c0 .23-.01.4-.05.5 0 .07-.01.15-.05.25v.26H68.74c.85-2.02 2.4-3.02 4.66-3.02h22.8v2Zm-.4 2.01a4.7 4.7 0 0 1-4.66 3.02h-22.8v-2.01c0-.24.01-.4.05-.5v-.2c.03-.1.05-.2.05-.3H95.8Zm-27.46 7.05v-3.02h7.6v3.02h-7.6Zm0 4.03v-3.02H96.2v3.02H68.34Zm0 4.02V28.6H96.2v3.02H68.34Z\" fill=\"url(#i)\"/><path d=\"M102.11 3.44V.42h22.8c2.23 0 3.78 1 4.66 3.02h-27.46Zm0 4.02V4.44h27.77v.3c.03.07.05.14.05.2.03.1.05.27.05.51v2.01H102.1Zm20.27 4.03V8.47h7.6v3.02h-7.6Zm7.6 3.02c0 .23-.02.4-.05.5 0 .07-.02.15-.06.25v.26h-27.35c.84-2.02 2.4-3.02 4.66-3.02h22.8v2Zm-.4 2.01a4.7 4.7 0 0 1-4.67 3.02h-22.8v-2.01c0-.24.02-.4.05-.5v-.2c.03-.1.05-.2.05-.3h27.36Zm-27.47 7.05v-3.02h7.6v3.02h-7.6Zm0 4.03v-3.02h27.87v3.02H102.1Zm0 4.02V28.6h27.87v3.02H102.1Z\" fill=\"url(#j)\"/></mask><g mask=\"url(#k)\"><path fill=\"url(#l)\" d=\"M-10.34-8.32h153.4v45.6h-153.4z\"/></g><path d=\"M1.63 29.67c.91 0 1.62-.66 1.62-1.58 0-.95-.7-1.61-1.62-1.61-.96 0-1.63.66-1.63 1.61 0 .92.67 1.58 1.63 1.58Zm-1 23.62h1.96v-20.9H.63v20.9ZM15.23 53.79c6.59 0 10.59-5.27 10.59-10.95s-4-10.95-10.6-10.95c-6.58 0-10.59 5.27-10.59 10.95s4 10.95 10.6 10.95Zm-8.6-10.95c0-5.06 3.34-9.17 8.6-9.17 5.25 0 8.59 4.11 8.59 9.17S20.48 52 15.22 52c-5.25 0-8.59-4.1-8.59-9.16ZM30.29 32.39h-1.96v20.9h1.96v-12.6c0-4.7 3.21-7.06 7-7.06 4.22 0 6.22 2.53 6.22 6.76v12.9h1.96V39.81c0-4.52-2.75-7.92-8-7.92-4.47 0-6.56 2.7-7.18 3.9v-3.4ZM49.4 29.67c.92 0 1.63-.66 1.63-1.58 0-.95-.71-1.61-1.63-1.61-.96 0-1.62.66-1.62 1.61 0 .92.66 1.58 1.62 1.58Zm-1 23.62h1.96v-20.9H48.4v20.9ZM52.53 42.55c0 6.22 4.42 11.24 10.8 11.24 6.43 0 9.68-4.44 10.26-8.3h-5.08a5.16 5.16 0 0 1-5.22 3.94c-3.54 0-5.8-2.86-5.8-6.88 0-4.06 2.26-6.93 5.8-6.93a5.16 5.16 0 0 1 5.22 3.94h5.08c-.58-3.85-3.83-8.29-10.26-8.29-6.38 0-10.8 5.02-10.8 11.28ZM85.8 53.79c6.92 0 11.26-5.19 11.26-11.24 0-6.06-4.34-11.28-11.26-11.28-6.88 0-11.22 5.22-11.22 11.28 0 6.05 4.34 11.24 11.22 11.24Zm-6.26-11.24c0-4.19 2.67-6.93 6.26-6.93 3.63 0 6.3 2.74 6.3 6.93 0 4.15-2.67 6.88-6.3 6.88-3.59 0-6.26-2.73-6.26-6.88ZM103.9 31.77h-4.58v21.52h4.96V40.81c0-3.36 1.96-5.31 5.09-5.31 2.96 0 4.3 1.95 4.3 4.9v12.89h4.96V39.77c0-5.02-2.8-8.5-8.05-8.5-3.55 0-5.76 1.66-6.67 3.36v-2.86ZM120.94 35.7V53.3h4.97V35.71H130v-3.94h-4.1v-.73c0-2.36.8-3.19 2.8-3.19h1.3v-4.23s-1.34-.17-2.3-.17c-4.13 0-6.76 2.24-6.76 7.3v4.96Z\" fill=\"#fff\"/><defs><linearGradient id=\"a\" x1=\"65.04\" y1=\"7.3\" x2=\"65.1\" y2=\"31.73\" gradientUnits=\"userSpaceOnUse\"><stop stop-color=\"#fff\"/><stop offset=\".68\" stop-color=\"#fff\" stop-opacity=\".21\"/><stop offset=\"1\" stop-color=\"#fff\" stop-opacity=\"0\"/></linearGradient><linearGradient id=\"b\" x1=\"65.04\" y1=\"7.3\" x2=\"65.1\" y2=\"31.73\" gradientUnits=\"userSpaceOnUse\"><stop stop-color=\"#fff\"/><stop offset=\".68\" stop-color=\"#fff\" stop-opacity=\".21\"/><stop offset=\"1\" stop-color=\"#fff\" stop-opacity=\"0\"/></linearGradient><linearGradient id=\"c\" x1=\"65.04\" y1=\"7.3\" x2=\"65.1\" y2=\"31.73\" gradientUnits=\"userSpaceOnUse\"><stop stop-color=\"#fff\"/><stop offset=\".68\" stop-color=\"#fff\" stop-opacity=\".21\"/><stop offset=\"1\" stop-color=\"#fff\" stop-opacity=\"0\"/></linearGradient><linearGradient id=\"d\" x1=\"65.04\" y1=\"7.3\" x2=\"65.1\" y2=\"31.73\" gradientUnits=\"userSpaceOnUse\"><stop stop-color=\"#fff\"/><stop offset=\".68\" stop-color=\"#fff\" stop-opacity=\".21\"/><stop offset=\"1\" stop-color=\"#fff\" stop-opacity=\"0\"/></linearGradient><linearGradient id=\"f\" x1=\"2.44\" y1=\".2\" x2=\"135.82\" y2=\"25.34\" gradientUnits=\"userSpaceOnUse\"><stop stop-color=\"#9545FB\"/><stop offset=\".5\" stop-color=\"#3DCCEB\"/><stop offset=\"1\" stop-color=\"#FB35DB\"/></linearGradient><linearGradient id=\"g\" x1=\"65.04\" y1=\"7.3\" x2=\"65.1\" y2=\"31.73\" gradientUnits=\"userSpaceOnUse\"><stop stop-color=\"#fff\"/><stop offset=\".68\" stop-color=\"#fff\" stop-opacity=\".21\"/><stop offset=\"1\" stop-color=\"#fff\" stop-opacity=\"0\"/></linearGradient><linearGradient id=\"h\" x1=\"65.04\" y1=\"7.3\" x2=\"65.1\" y2=\"31.73\" gradientUnits=\"userSpaceOnUse\"><stop stop-color=\"#fff\"/><stop offset=\".68\" stop-color=\"#fff\" stop-opacity=\".21\"/><stop offset=\"1\" stop-color=\"#fff\" stop-opacity=\"0\"/></linearGradient><linearGradient id=\"i\" x1=\"65.04\" y1=\"7.3\" x2=\"65.1\" y2=\"31.73\" gradientUnits=\"userSpaceOnUse\"><stop stop-color=\"#fff\"/><stop offset=\".68\" stop-color=\"#fff\" stop-opacity=\".21\"/><stop offset=\"1\" stop-color=\"#fff\" stop-opacity=\"0\"/></linearGradient><linearGradient id=\"j\" x1=\"65.04\" y1=\"7.3\" x2=\"65.1\" y2=\"31.73\" gradientUnits=\"userSpaceOnUse\"><stop stop-color=\"#fff\"/><stop offset=\".68\" stop-color=\"#fff\" stop-opacity=\".21\"/><stop offset=\"1\" stop-color=\"#fff\" stop-opacity=\"0\"/></linearGradient><linearGradient id=\"l\" x1=\"2.44\" y1=\".2\" x2=\"135.82\" y2=\"25.34\" gradientUnits=\"userSpaceOnUse\"><stop stop-color=\"#9545FB\"/><stop offset=\".5\" stop-color=\"#3DCCEB\"/><stop offset=\"1\" stop-color=\"#FB35DB\"/></linearGradient></defs></svg>\n      {# Google Optimize hiding added for the top bar 10/18 #}\n      {# <style>.optimize-loading { opacity: 0 !important} </style>\n      <script>(function(a,s,y,n,c,h,i,d,e){s.className+=' '+y;h.start=1*new Date;\n      h.end=i=function(){s.className=s.className.replace(RegExp(' ?'+y),'')};\n      (a[n]=a[n]||[]).hide=h;setTimeout(function(){i();h.end=null},c);h.timeout=c;\n      })(window,document.getElementById('optimizely'),'optimize-loading','dataLayer',4000,\n      {'GTM-TKMGCBC':true});</script> #}\n      {{PrismicDOM.RichText.asHtml(announcementBar.data.text)}}\n      <span id=\"btn-header-announcement\">\n        {{announcementBar.data.button_text}}\n        <span class=\"arrow\"> -&gt;</span>\n      </span>\n    </div>\n  </div>\n</nav>\n</a> -->\n{% endif %}\n\n<nav\n  class=\"navbar navbar-default{% if header_style %} {{ header_style }}{% endif %}\"\n>\n  <div class=\"wrapper\">\n    <!-- Brand and toggle get grouped for better mobile display -->\n    <div class=\"navbar-header\">\n      <button\n        type=\"button\"\n        class=\"navbar-toggle collapsed\"\n        id=\"collapse-toggle\"\n        aria-expanded=\"false\"\n      >\n        <span class=\"sr-only\">Toggle navigation</span>\n        <i class=\"ion-md-more\"></i>\n      </button>\n      <a class=\"navbar-brand\" href=\"/\">\n        {# {% include '_includes/svg/ionic-framework.svg' %} #} {% include\n        '_includes/svg/ionic-black.svg' %}\n      </a>\n    </div>\n\n    <!-- Collect the nav links, forms, and other content for toggling -->\n    <div class=\"collapse navbar-collapse\" id=\"navbar-collapse\">\n      <ul class=\"nav navbar-nav navbar-right\">\n        <li class=\"search\">\n          <ionic-search>\n            <ul>\n              <li><a href=\"/framework\">Framework</a></li>\n              <li><a href=\"/getting-started\">Getting Started</a></li>\n              <li><a href=\"/docs\">Documentation</a></li>\n            </ul>\n          </ionic-search>\n        </li>\n\n        {% include '_includes/header_nav.html' %}\n      </ul>\n      {#\n      <ul class=\"nav navbar-nav navbar\">\n        {% include '_includes/header_nav.html' %}\n      </ul>\n      #}\n    </div>\n    <!-- /.navbar-collapse -->\n  </div>\n  <!-- /.container-fluid -->\n</nav>\n"
  },
  {
    "path": "server/pages/_includes/header_nav.html",
    "content": "\n<li class=\"dropdown dropdown--has-container\">\n  <a href=\"#\"\n     class=\"dropdown-toggle\"\n     role=\"button\"\n     aria-haspopup=\"true\"\n     aria-expanded=\"false\">\n      Docs {% include '_includes/svg/chevron-down.svg' %}\n  </a>\n  <ul class=\"dropdown-menu dropdown-menu--container\" id=\"dropdown-docs\">\n    <li>\n      <a href=\"https://ionicframework.com/docs/intro/cli\"\n         class=\"dropdown-menu__text--l3 icon--installation\">\n        Installation\n      </a>\n    </li>\n    <li>\n      <a href=\"https://ionicframework.com/docs/components\"\n         class=\"dropdown-menu__text--l3 icon--ui-components\"\n         id=\"btn-header-developers-ui-components\">\n        UI Components\n      </a>\n    </li>\n    <li>\n      <a href=\"https://ionicframework.com/docs/native\"\n         class=\"dropdown-menu__text--l3 icon--native-apis\"\n         id=\"btn-header-developers-native-plugins\">\n        Native APIs\n      </a>\n    </li>\n    <li>\n      <a href=\"https://ionicframework.com/docs/angular/overview\"\n         class=\"dropdown-menu__text--l3 icon--angular\"\n         id=\"btn-header-developers-angular\">\n        Angular\n      </a>\n    </li>\n    <li>\n      <a href=\"https://ionicframework.com/react\"\n         class=\"dropdown-menu__text--l3 icon--react\"\n         id=\"btn-header-developers-react\">\n        React\n      </a>\n    </li>\n    <li>\n      <a href=\"https://ionicframework.com/vue\"\n         class=\"dropdown-menu__text--l3 icon--vue\"\n         id=\"btn-header-developers-vue\">\n        Vue\n      </a>\n    </li>\n    <li>\n      <a href=\"https://ionicframework.com/docs/cli\"\n         class=\"dropdown-menu__text--l3 icon--cli\"\n         id=\"btn-header-developers-setup-installation\">\n        CLI\n      </a>\n    </li>\n  </ul>\n</li>\n\n<li class=\"dropdown dropdown--has-container sm-hide\">\n  <a href=\"#\"\n     class=\"dropdown-toggle\"\n     role=\"button\"\n     aria-haspopup=\"true\"\n     aria-expanded=\"false\">\n      Tools {% include '_includes/svg/chevron-down.svg' %}\n  </a>\n  <ul class=\"dropdown-menu dropdown-menu--container\" id=\"dropdown-tools\">\n    <li>\n      <a href=\"https://ionic.io/appflow\"\n         rel=\"noopener\"\n         class=\"dropdown-menu__text--l3 icon--appflow\">\n        Appflow\n      </a>\n    </li>\n    <li>\n      <a href=\"https://ionic.io/products/identity-vault\"\n         class=\"dropdown-menu__text--l3 icon--identity-vault\">\n        Identity Vault\n      </a>\n    </li>\n    <li>\n      <a href=\"https://ionic.io/products/auth-connect\"\n         class=\"dropdown-menu__text--l3 icon--auth-connect\">\n        Auth Connect\n      </a>\n    </li>\n    <li>\n      <a href=\"https://ionic.io/products/secure-storage\"\n         class=\"dropdown-menu__text--l3 icon--secure-storage\">\n        Secure Storage\n      </a>\n    </li>\n    <li>\n      <a href=\"https://ionicframework.com/integrations\"\n         class=\"dropdown-menu__text--l3 icon--integrations\">\n        Integrations\n      </a>\n    </li>\n  </ul>\n</li>\n\n<li class=\"dropdown dropdown--has-container sm-hide\">\n  <a href=\"#\"\n     class=\"dropdown-toggle\"\n     role=\"button\"\n     aria-haspopup=\"true\"\n     aria-expanded=\"false\">\n      Ecosystem {% include '_includes/svg/chevron-down.svg' %}\n  </a>\n  <ul class=\"dropdown-menu dropdown-menu--container\" id=\"dropdown-ecosystem\">\n    <li>\n      <a href=\"/community\" \n         class=\"dropdown-menu__text--l3 icon--hub\">\n        Community\n      </a>\n    </li>\n    <li>\n      <a href=\"/trusted-partners\" \n         class=\"dropdown-menu__text--l3 icon--trusted-partners\">\n        Trusted Partners\n      </a>\n    </li>\n    <li>\n      <a href=\"https://forum.ionicframework.com/\"\n         class=\"dropdown-menu__text--l3 icon--forum\">\n        Forum\n      </a>\n    </li>\n    <li>\n      <a href=\"/resources\"\n         class=\"dropdown-menu__text--l3 icon--resources\"\n         id=\"btn-header-resources\">\n        Resources\n      </a>\n    </li>\n  </ul>\n</li>\n\n\n<li class=\"navbar__divider\"></li>\n\n\n<li><a href=\"/blog/\" id=\"btn-header-ecosystem-blog\">Blog</a></li>\n\n\n<li class=\"dropdown dropdown--has-container\">\n  <a href=\"#\"\n     class=\"dropdown-toggle\"\n     role=\"button\"\n     aria-haspopup=\"true\"\n     aria-expanded=\"false\">\n      Support {% include '_includes/svg/chevron-down.svg' %}\n  </a>\n  <ul class=\"dropdown-menu dropdown-menu--container\" id=\"dropdown-support\">\n    <li>\n      <a href=\"https://ionic.io/support\" \n         class=\"dropdown-menu__text--l3 icon--help-center\">\n        Help Center\n      </a>\n    </li>\n    <li>\n      <a href=\"/enterprise/support\" \n         class=\"dropdown-menu__text--l3 icon--enterprise\">\n        Enterprise Support\n      </a>\n    </li>\n    <li>\n      <a href=\"https://ionic.io/advisory\" \n         class=\"dropdown-menu__text--l3 icon--advisory-services\">\n        Advisory Services\n      </a>\n    </li>\n  </ul>\n</li>\n\n<li class=\"{% if id.indexOf('enterprise') == 0%} active{% endif %}\">\n  <a href=\"/enterprise\" id=\"btn-header-enterprise\">Enterprise</a>\n</li>\n\n\n<li class=\"navbar__divider navbar__divider--finale\"></li>\n\n\n<li>\n  <a href=\"https://twitter.com/IonicFramework\"\n     title=\"twitter\"\n     id=\"btn-header-twitter\">\n    <svg class=\"social\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n      <path d=\"M15.3749 3.42188C14.8312 3.6625 14.2499 3.825 13.6374 3.9C14.2624 3.525 14.7437 2.93125 14.9687 2.225C14.3843 2.57187 13.7374 2.825 13.0468 2.95937C12.4937 2.36875 11.7062 2 10.8374 2C9.16555 2 7.81243 3.35625 7.81243 5.02812C7.81243 5.26562 7.83743 5.49688 7.89055 5.71875C5.37493 5.59375 3.14368 4.3875 1.65305 2.55312C1.39368 3 1.24368 3.52187 1.24368 4.075C1.24368 5.125 1.78118 6.05313 2.59368 6.59688C2.09368 6.58438 1.62493 6.44688 1.21868 6.21875V6.25625C1.21868 7.725 2.26243 8.94688 3.6468 9.225C3.39368 9.29375 3.12493 9.33125 2.84993 9.33125C2.65618 9.33125 2.46555 9.3125 2.28118 9.275C2.66555 10.4781 3.7843 11.3531 5.1093 11.3781C4.07493 12.1906 2.76868 12.675 1.34993 12.675C1.10618 12.675 0.865552 12.6594 0.628052 12.6313C1.96243 13.5 3.55305 14 5.2593 14C10.8312 14 13.8749 9.38438 13.8749 5.38125C13.8749 5.25 13.8718 5.11875 13.8656 4.99062C14.4562 4.5625 14.9687 4.03125 15.3749 3.42188Z\"/>\n    </svg>\n  </a>\n</li>\n<li>\n  <a href=\"https://github.com/ionic-team/ionic\"\n     title=\"github\"\n     id=\"btn-footer-github\">\n    <svg class=\"social\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n      <path d=\"M8 1C4.13438 1 1 4.21563 1 8.17813C1 11.35 3.00625 14.0375 5.7875 14.9875C5.83125 14.9969 5.86875 15 5.90625 15C6.16563 15 6.26562 14.8094 6.26562 14.6438C6.26562 14.4719 6.25938 14.0219 6.25625 13.4219C5.99375 13.4812 5.75938 13.5063 5.55 13.5063C4.20313 13.5063 3.89687 12.4594 3.89687 12.4594C3.57812 11.6313 3.11875 11.4094 3.11875 11.4094C2.50938 10.9812 3.11562 10.9688 3.1625 10.9688H3.16563C3.86875 11.0312 4.2375 11.7125 4.2375 11.7125C4.5875 12.325 5.05625 12.4969 5.475 12.4969C5.80312 12.4969 6.1 12.3906 6.275 12.3094C6.3375 11.8469 6.51875 11.5312 6.71875 11.35C5.16563 11.1688 3.53125 10.5531 3.53125 7.80312C3.53125 7.01875 3.80312 6.37813 4.25 5.87813C4.17812 5.69688 3.9375 4.96563 4.31875 3.97813C4.31875 3.97813 4.36875 3.9625 4.475 3.9625C4.72812 3.9625 5.3 4.05937 6.24375 4.71562C6.80312 4.55625 7.4 4.47812 7.99687 4.475C8.59062 4.47812 9.19063 4.55625 9.75 4.71562C10.6938 4.05937 11.2656 3.9625 11.5188 3.9625C11.625 3.9625 11.675 3.97813 11.675 3.97813C12.0563 4.96563 11.8156 5.69688 11.7437 5.87813C12.1906 6.38125 12.4625 7.02187 12.4625 7.80312C12.4625 10.5594 10.825 11.1656 9.26562 11.3438C9.51562 11.5656 9.74063 12.0031 9.74063 12.6719C9.74063 13.6313 9.73125 14.4062 9.73125 14.6406C9.73125 14.8094 9.82812 15 10.0875 15C10.125 15 10.1687 14.9969 10.2125 14.9875C12.9969 14.0375 15 11.3469 15 8.17813C15 4.21563 11.8656 1 8 1Z\"/>\n    </svg>\n  </a>\n</li>\n\n<li class=\"sm-hide\">\n  <a href=\"/login?source=framework-{{id | default(id, 'default', true)}}\">\n    Log in</a>\n</li>\n<li class=\"header-btn-white{% if header_style.indexOf('light') != -1 %} blue{% endif %} \">\n  <a href=\"/start\"\n     id=\"btn-header-sign-up\">Get Started</a>\n</li>\n"
  },
  {
    "path": "server/pages/_includes/logo_svg.html",
    "content": "<svg id=\"ionic-logo-faded\" width=\"95px\" height=\"32px\" viewBox=\"0 0 95 32\">\n  <g fill-rule=\"nonzero\">\n    <g id=\"icon\">\n      <path d=\"M15.9567568,8.75675676 C11.9567568,8.75675676 8.71351351,12 8.71351351,16 C8.71351351,20 11.9567568,23.2432432 15.9567568,23.2432432 C19.9567568,23.2432432 23.2,20 23.2,16 C23.1783784,12 19.9351351,8.75675676 15.9567568,8.75675676 Z\" id=\"Shape\"></path>\n      <circle id=\"Oval\" cx=\"26.3351351\" cy=\"6.0972973\" r=\"3.30810811\"></circle>\n      <path d=\"M30.4,9.40540541 L30.2702703,9.1027027 L30.0540541,9.36216216 C29.5135135,9.96756757 28.8216216,10.4432432 28.0648649,10.7243243 L27.8486486,10.8108108 L27.9351351,11.027027 C28.6054054,12.6054054 28.9297297,14.2918919 28.9297297,16 C28.9297297,23.1567568 23.1135135,28.9945946 15.9351351,28.9945946 C8.75675676,28.9945946 2.96216216,23.1567568 2.96216216,16 C2.96216216,8.84324324 8.77837838,3.00540541 15.9567568,3.00540541 C17.9027027,3.00540541 19.7621622,3.43783784 21.5135135,4.25945946 L21.7081081,4.34594595 L21.7945946,4.12972973 C22.1189189,3.37297297 22.6162162,2.72432432 23.2648649,2.20540541 L23.5243243,1.98918919 L23.2216216,1.83783784 C20.9513514,0.67027027 18.5081081,0.0648648649 15.9351351,0.0648648649 C7.17837838,0.0648648649 0.0432432432,7.2 0.0432432432,15.9567568 C0.0432432432,24.7135135 7.17837838,31.8486486 15.9351351,31.8486486 C24.6918919,31.8486486 31.827027,24.7135135 31.827027,15.9567568 C31.827027,13.7081081 31.3513514,11.5027027 30.4,9.40540541 Z\" id=\"Shape\"></path>\n    </g>\n    <g id=\"logotype\" transform=\"translate(40.000000, 8.000000)\">\n      <rect id=\"Rectangle-path\"\n            x=\"0.0216216216\"\n            y=\"1.08108108\"\n            width=\"3.35135135\"\n            height=\"13.8378378\"></rect>\n      <rect id=\"Rectangle-path\"\n            x=\"36.1945946\"\n            y=\"1.08108108\"\n            width=\"3.35135135\"\n            height=\"13.8378378\"></rect>\n      <path d=\"M28.4540541,0.756756757 C26.0972973,0.756756757 24.2810811,2.18378378 23.8702703,2.57297297 L23.6540541,1.08108108 L20.8648649,1.08108108 L20.8648649,14.9189189 L24.2162162,14.9189189 L24.2162162,6.55135135 C24.2162162,4.90810811 26.4432432,3.56756757 28.0864865,3.56756757 C29.6864865,3.56756757 30.9405405,5.12432432 30.9405405,6.98378378 L30.9405405,14.9189189 L34.2918919,14.9189189 L34.2918919,7.30810811 C34.2702703,3.67567568 32.6918919,0.756756757 28.4540541,0.756756757 Z\" id=\"Shape\"></path>\n      <path d=\"M48.3243243,12.4108108 C45.7945946,12.4108108 44.1297297,10.4432432 44.1297297,8 C44.1297297,5.55675676 45.7945946,3.58918919 48.3243243,3.58918919 C50.4648649,3.58918919 51.7837838,5.66486486 51.7837838,5.66486486 L54.2054054,4.04324324 C53.5135135,2.96216216 52.6918919,2.31351351 51.5891892,1.64324324 C50.7675676,1.14594595 49.6648649,0.735135135 48.4324324,0.735135135 C44.2378378,0.735135135 41.0378378,3.89189189 41.0162162,7.97837838 C41.0378378,12.0648649 44.2378378,15.2216216 48.4324324,15.2216216 C49.6648649,15.2216216 50.7675676,14.8108108 51.5891892,14.3135135 C52.6918919,13.6432432 53.5135135,12.9945946 54.2054054,11.9135135 L51.7837838,10.2918919 C51.7837838,10.3135135 50.4864865,12.4108108 48.3243243,12.4108108 Z\" id=\"Shape\"></path>\n      <path d=\"M12.1081081,0.756756757 C7.89189189,0.756756757 4.86486486,4.06486486 4.86486486,7.93513514 C4.86486486,11.8702703 7.80540541,15.2432432 12.172973,15.2432432 C16.1297297,15.2432432 19.3513514,12.2162162 19.3513514,8.02162162 C19.3513514,3.22162162 15.5891892,0.756756757 12.1081081,0.756756757 Z M12.1513514,3.61081081 C14.227027,3.61081081 16.1945946,5.2972973 16.1945946,8.02162162 C16.1945946,10.6810811 14.227027,12.4108108 12.1297297,12.4108108 C9.83783784,12.4108108 8.02162162,10.5513514 8.02162162,8 C8.02162162,5.47027027 9.81621622,3.61081081 12.1513514,3.61081081 Z\" id=\"path3000_1_\"></path>\n    </g>\n  </g>\n</svg>"
  },
  {
    "path": "server/pages/_includes/macros.html",
    "content": "{% macro pageSpecificCSS(dev, page, cssVersion) %}\n  {% if dev %}\n    <link href=\"/css/pages/{{page}}.css{{'?v=' + cssVersion if cssVersion}}\" rel=\"stylesheet\">\n  {% else %}\n    <link href=\"/css/pages/{{page}}.min.css{{'?v=' + cssVersion if cssVersion}}\" rel=\"stylesheet\">\n  {% endif %}\n{% endmacro %}\n"
  },
  {
    "path": "server/pages/_includes/mixpanel.html",
    "content": "{% if mixpanelEnabled %}\n<script type=\"text/javascript\">(function(e,a){if(!a.__SV){var b=window;try{var c,l,i,j=b.location,g=j.hash;c=function(a,b){return(l=a.match(RegExp(b+\"=([^&]*)\")))?l[1]:null};g&&c(g,\"state\")&&(i=JSON.parse(decodeURIComponent(c(g,\"state\"))),\"mpeditor\"===i.action&&(b.sessionStorage.setItem(\"_mpcehash\",g),history.replaceState(i.desiredHash||\"\",e.title,j.pathname+j.search)))}catch(m){}var k,h;window.mixpanel=a;a._i=[];a.init=function(b,c,f){function e(b,a){var c=a.split(\".\");2==c.length&&(b=b[c[0]],a=c[1]);b[a]=function(){b.push([a].concat(Array.prototype.slice.call(arguments,\n0)))}}var d=a;\"undefined\"!==typeof f?d=a[f]=[]:f=\"mixpanel\";d.people=d.people||[];d.toString=function(b){var a=\"mixpanel\";\"mixpanel\"!==f&&(a+=\".\"+f);b||(a+=\" (stub)\");return a};d.people.toString=function(){return d.toString(1)+\".people (stub)\"};k=\"disable time_event track track_pageview track_links track_forms register register_once alias unregister identify name_tag set_config reset people.set people.set_once people.increment people.append people.union people.track_charge people.clear_charges people.delete_user\".split(\" \");\nfor(h=0;h<k.length;h++)e(d,k[h]);a._i.push([b,c,f])};a.__SV=1.2;b=e.createElement(\"script\");b.type=\"text/javascript\";b.async=!0;b.src=\"undefined\"!==typeof MIXPANEL_CUSTOM_LIB_URL?MIXPANEL_CUSTOM_LIB_URL:\"file:\"===e.location.protocol&&\"//cdn.mxpnl.com/libs/mixpanel-2-latest.min.js\".match(/^\\/\\//)?\"https://cdn.mxpnl.com/libs/mixpanel-2-latest.min.js\":\"//cdn.mxpnl.com/libs/mixpanel-2-latest.min.js\";c=e.getElementsByTagName(\"script\")[0];c.parentNode.insertBefore(b,c)}})(document,window.mixpanel||[]);\nmixpanel.init(\"89fea0e2089f57d258ded5e00d56510e\");</script>\n{% endif %}\n"
  },
  {
    "path": "server/pages/_includes/mobile_nav.html",
    "content": "<nav class=\"mobile-nav closed\">\n  <ionic-search mobile=\"true\">\n    <ul>\n      <li class=\"mobile-nav__menuitem\"><a href=\"https://ionic.io/appflow\" rel=\"noopener\">Appflow</a></li>\n      <li class=\"mobile-nav__menuitem\"><a href=\"/getting-started\">Getting Started</a></li>\n      <li class=\"mobile-nav__menuitem\"><a href=\"/docs\">Docs</a></li>\n    </ul>\n  </ionic-search>\n\n  <div class=\"mobile-nav__pane\">\n    <i class=\"mobile-nav__close\">\n      <svg\n        id=\"icon-close-mobile\"\n        width=\"100%\"\n        height=\"100%\"\n        viewBox=\"0 0 14 14\"\n      >\n        <g>\n          <path\n            d=\"M8.65881121,7 L13.6590731,1.9984285 C14.1136423,1.54374018 14.1136423,0.795704557 13.6590731,0.341016239 C13.2045038,-0.11367208 12.456664,-0.11367208 12.0020948,0.341016239 L7.00183294,5.34258774 L2.00157109,0.341016239 C1.54700183,-0.11367208 0.799162084,-0.11367208 0.344592825,0.341016239 C0.117308196,0.568360398 0,0.869041383 0,1.16972237 C0,1.47040335 0.117308196,1.77108434 0.344592825,1.9984285 L5.34485467,7 L0.344592825,12.0015715 C0.117308196,12.2289157 2.08381216e-15,12.5295966 2.08381216e-15,12.8302776 C2.08381216e-15,13.1309586 0.117308196,13.4316396 0.344592825,13.6589838 C0.799162084,14.1136721 1.54700183,14.1136721 2.00157109,13.6589838 L7.00183294,8.65741226 L12.0020948,13.6589838 C12.456664,14.1136721 13.2045038,14.1136721 13.6590731,13.6589838 C14.1136423,13.2042954 14.1136423,12.4562598 13.6590731,12.0015715 L8.65881121,7 Z\"\n            id=\"Shape\"\n          ></path>\n        </g>\n      </svg>\n    </i>\n\n    <div class=\"mobile-nav__wrapper\">\n      <a href=\"/\" class=\"mobile-nav__logo\">\n        {% include '_includes/svg/ionic-framework.svg' %}\n      </a>\n\n      <ul class=\"mobile-nav__menu\">\n        <h6>Docs</h6>\n        <li class=\"mobile-nav__menuitem\">\n          <a href=\"https://ionicframework.com/docs/intro/cli\"\n             class=\"dropdown-menu__text--l3 icon--installation\">\n            Installation\n          </a>\n        </li>\n        <li class=\"mobile-nav__menuitem\">\n          <a href=\"https://ionicframework.com/docs/components\"\n             class=\"dropdown-menu__text--l3 icon--ui-components\">\n            UI Components\n          </a>\n        </li>\n        <li class=\"mobile-nav__menuitem\">\n          <a href=\"https://ionicframework.com/docs/native\"\n             class=\"dropdown-menu__text--l3 icon--native-apis\">\n            Native APIs\n          </a>\n        </li>\n        <li class=\"mobile-nav__menuitem\">\n          <a href=\"https://ionicframework.com/docs/angular/overview\"\n             class=\"dropdown-menu__text--l3 icon--angular\">\n            Angular\n          </a>\n        </li>\n        <li class=\"mobile-nav__menuitem\">\n          <a href=\"https://ionicframework.com/react\"\n             class=\"dropdown-menu__text--l3 icon--react\">\n            React\n          </a>\n        </li>\n        <li class=\"mobile-nav__menuitem\">\n          <a href=\"https://ionicframework.com/vue\"\n             class=\"dropdown-menu__text--l3 icon--vue\">\n            Vue\n          </a>\n        </li>\n        <li class=\"mobile-nav__menuitem\">\n          <a href=\"https://ionicframework.com/docs/cli\"\n             class=\"dropdown-menu__text--l3 icon--cli\">\n            CLI\n          </a>\n        </li>\n\n        <h6>Tools</h6>\n        <li class=\"mobile-nav__menuitem\">\n          <a href=\"https://ionic.io/appflow\"\n             rel=\"noopener\"\n             class=\"dropdown-menu__text--l3 icon--appflow\">\n            Appflow\n          </a>\n        </li>\n        <li class=\"mobile-nav__menuitem\">\n          <a href=\"https://ionic.io/products/identity-vault\"\n             class=\"dropdown-menu__text--l3 icon--identity-vault\">\n            Identity Vault\n          </a>\n        </li>\n        <li class=\"mobile-nav__menuitem\">\n          <a href=\"https://ionic.io/products/auth-connect\"\n             class=\"dropdown-menu__text--l3 icon--auth-connect\">\n            Auth Connect\n          </a>\n        </li>\n        <li class=\"mobile-nav__menuitem\">\n          <a href=\"https://ionic.io/products/secure-storage\"\n             class=\"dropdown-menu__text--l3 icon--secure-storage\">\n            Secure Storage\n          </a>\n        </li>\n        <li class=\"mobile-nav__menuitem\">\n          <a href=\"https://ionicframework.com/integrations\"\n             class=\"dropdown-menu__text--l3 icon--integrations\">\n            Integrations\n          </a>\n        </li>\n\n        <h6>Ecosystem</h6>\n        <li class=\"mobile-nav__menuitem\"><a href=\"/blog/\">Blog</a></li>\n        <li class=\"mobile-nav__menuitem\">\n          <a href=\"/community\" \n             class=\"dropdown-menu__text--l3 icon--hub\">\n            Community\n          </a>\n        </li>\n        <li class=\"mobile-nav__menuitem\">\n          <a href=\"/trusted-partners\" \n             class=\"dropdown-menu__text--l3 icon--trusted-partners\">\n            Trusted Partners\n          </a>\n        </li>\n        <li class=\"mobile-nav__menuitem\">\n          <a href=\"https://forum.ionicframework.com/\"\n             class=\"dropdown-menu__text--l3 icon--forum\">\n            Forum\n          </a>\n        </li>\n        <li class=\"mobile-nav__menuitem\">\n          <a href=\"/resources\"\n             class=\"dropdown-menu__text--l3 icon--resources\">\n            Resources\n          </a>\n        </li>\n\n        <h6>Get Help</h6>\n        <li class=\"mobile-nav__menuitem\">\n          <a href=\"https://ionic.io/support\" \n             class=\"dropdown-menu__text--l3 icon--help-center\">\n            Help Center\n          </a>\n        </li>\n        <li class=\"mobile-nav__menuitem\">\n          <a href=\"/enterprise/support\" \n             class=\"dropdown-menu__text--l3 icon--enterprise\">\n            Enterprise Support\n          </a>\n        </li>\n        <li class=\"mobile-nav__menuitem\">\n          <a href=\"https://ionic.io/advisory\" \n             class=\"dropdown-menu__text--l3 icon--advisory-services\">\n            Advisory Services\n          </a>\n        </li>\n        <li class=\"mobile-nav__menuitem\">\n          <a href=\"/enterprise\">Enterprise</a>\n        </li>\n\n        <li class=\"mobile-nav__social\">\n          <a target=\"_blank\" href=\"https://twitter.com/Ionicframework\"\n            ><ion-icon name=\"logo-twitter\"></ion-icon\n          ></a>\n          <a target=\"_blank\" href=\"https://github.com/ionic-team/ionic\"\n            ><ion-icon name=\"logo-github\"></ion-icon\n          ></a>\n          <a target=\"_blank\" href=\"https://www.facebook.com/ionicframework/\"\n            ><ion-icon name=\"logo-facebook\"></ion-icon\n          ></a>\n          <a\n            target=\"_blank\"\n            href=\"https://www.youtube.com/channel/UChYheBnVeCfhCmqZfCUdJQw\"\n            ><ion-icon name=\"logo-youtube\"></ion-icon\n          ></a>\n        </li>\n      </ul>\n    </div>\n  </div>\n  <div class=\"mobile-nav__footer\">\n    <div>\n      <a href=\"/login\" id=\"btn-header-log-in-mobile\">Log in</a>\n      <a\n        class=\"btn\"\n        href=\"/signup?source=framework-{{id | default(id, 'default', true)}}\"\n        id=\"btn-header-sign-up\"\n        >Sign up</a\n      >\n    </div>\n  </div>\n</nav>\n"
  },
  {
    "path": "server/pages/_includes/pre_footer.html",
    "content": "<section id=\"pre-footer\" class=\"continue\">\n  <ul class=\"container\">\n    {% if id == \"home\" %}\n      <li class=\"getting-started\">\n        <a href=\"/getting-started\" id=\"btn-prefooter-getting-started\">Getting\n          started</a>\n        <p>\n          Learn more about how to install Ionic Framework. We'll cover the basics\n          and get you started from the ground up.\n        </p>\n      </li>\n    {% else %}\n      <li class=\"forum\">\n        <a href=\"https://forum.ionicframework.com\" id=\"btn-prefooter-forum\">\n          Community Forum</a>\n        <p>\n          Stop by and say hello. The Forum is the best place to connect, ask a\n          question, or help out other Ionic developers!\n        </p>\n      </li>\n    {% endif %}\n    {% if id == \"docs-home\" %}\n      <li class=\"blog\">\n        <a href=\"https://blog.ionicframework.com\" id=\"btn-prefooter-blog\">Check\n          out our blog</a>\n        <p>\n          Stay up to date on what's new. We post regular updates on Ionic,\n          tutorials, Creator, and our Cloud Services.\n        </p>\n      </li>\n    {% else %}\n      <li class=\"explor-docs\">\n        <a href=\"/docs/\" id=\"btn-prefooter-docs\">Explore the docs</a>\n        <p>\n          Take a look and get coding! Our documentation covers all you need to\n          know to get an app up and running in minutes.\n        </p>\n      </li>\n    {% endif %}\n  </ul>\n</section>\n"
  },
  {
    "path": "server/pages/_includes/promos/card-auth-connect.html",
    "content": "<div class=\"container promo-card promo-card--auth-connect\">\n  <img\n    class=\"card-banner\"\n    src=\"/img/promos/card-auth-connect.svg\"\n    alt=\"Auth Connect banner\"\n  />\n  <hgroup>\n    <h4>{% include '_includes/svg/ico-auth-connect.svg' %} Auth Connect</h4>\n    <h3>Single sign-on, made easy.</h3>\n    <p>\n      A secure authentication solution for any Ionic app, using a single API and\n      the latest native security paradigms.\n    </p>\n    <a\n      href=\"https://ionic.io/products/auth-connect\"\n      class=\"btn test-2019-09-home\"\n      onclick=\"c('test', 'home-cards', this, 'auth-connect')\"\n      >Learn More</a\n    >\n  </hgroup>\n</div>\n"
  },
  {
    "path": "server/pages/_includes/promos/card-identity-vault.html",
    "content": "<div class=\"container promo-card promo-card--identity-vault\">\n  <img\n    class=\"card-banner\"\n    src=\"/img/promos/card-identity-vault.png\"\n    alt=\"Identity Vault banner\"\n  />\n  <hgroup>\n    <h4>{% include '_includes/svg/ico-identity-vault.svg' %} Identity Vault</h4>\n    <h3>Secure Biometric Authentication.</h3>\n    <p>\n      A solution that protects your users’ data with the most secure biometric\n      authentication available.\n    </p>\n    <a\n      href=\"https://ionic.io/products/identity-vault\"\n      class=\"btn test-2019-09-home\"\n      onclick=\"c('test', 'home-cards', this, 'identity-vault')\"\n      >Learn More</a\n    >\n  </hgroup>\n</div>\n"
  },
  {
    "path": "server/pages/_includes/promos/card-offline-storage.html",
    "content": "<div class=\"container promo-card promo-card--offline-storage\">\n  <img class=\"card-banner\" src=\"/img/promos/card-offline-storage.svg\" alt=\"Offline Storage banner\">\n  <hgroup>\n    <h4>{% include '_includes/svg/ico-offline-storage.svg' %} Offline Storage</h4>\n    <h3>Build secure, offline-first apps.</h3>\n    <p>Deliver mobile, desktop, and PWA experiences that work anywhere, anytime — even when they’re offline.</p>\n    <a class=\"btn test-2019-09-home\"\n       data-toggle=\"modal\"\n       data-target=\"#promo--offline-storage__modal\">Get the Datasheet to Learn More</a>\n  </hgroup>\n</div>\n\n\n<div class=\"modal collapse fade\"\n     id=\"promo--offline-storage__modal\"\n     tabindex=\"-1\"\n     role=\"dialog\"\n     aria-labelledby=\"promo--ionic-for-enterprise\">\n  <div class=\"modal-dialog\" role=\"document\">\n    <div class=\"modal-content\">\n      <div class=\"modal-body hubspot-override hubspot-override--large\">\n        <button type=\"button\"\n                class=\"close\"\n                data-dismiss=\"modal\"\n                aria-label=\"Close\">\n          <span aria-hidden=\"true\">&times;</span>\n        </button>\n        <hgroup class=\"hero text-center\">\n          <h2>Before we send it&hellip;</h2>\n          <p class=\"lg\">\n            We just need some basic information so we can send the Datasheet your way.\n          </p>\n        </hgroup>\n\n        <!--[if lte IE 8]>\n        <script charset=\"utf-8\" type=\"text/javascript\" src=\"//js.hsforms.net/forms/v2-legacy.js\"></script>\n        <![endif]-->\n        <script charset=\"utf-8\" type=\"text/javascript\" src=\"//js.hsforms.net/forms/v2.js\"></script>\n        <script>\n          hbspt.forms.create({\n            portalId: \"3776657\",\n            formId: \"9c5667df-8b85-4233-94c0-f9ea77ed96d2\"\n          });\n        </script>\n\n      </div>\n    </div>\n  </div>\n</div>"
  },
  {
    "path": "server/pages/_includes/promos/data-sheet-offline-storage.html",
    "content": "<section id=\"promo--offline-storage\" class=\"promo promo--ebook\">\n  <img class=\"promo__illustration\" \n         src=\"/img/promos/auth-connect.png\"\n         alt=\"Offline Storage Datasheet\"/>\n\n  <div class=\"container\">\n    <hgroup>\n      <h3>\n        Offline Storage Datasheet\n      </h3>\n      <p>\n        Get all the details on Offline Storage and how to better deliver mobile experience that work anywhere, anytime.\n      </p>\n      <a id=\"btn-promo-evaluating-ionic-for-enterprise\"\n         class=\"btn white sm\"\n         data-toggle=\"modal\"\n         data-target=\"#promo--ionic-for-enterprise__modal\">\n        Read Datasheet<ion-icon name=\"ios-arrow-forward\"></ion-icon>\n      </a>\n    </hgroup>\n  </div>\n</section>\n\n<div class=\"modal collapse fade\"\n     id=\"promo--ionic-for-enterprise__modal\"\n     tabindex=\"-1\"\n     role=\"dialog\"\n     aria-labelledby=\"promo--ionic-for-enterprise\">\n  <div class=\"modal-dialog\" role=\"document\">\n    <div class=\"modal-content\">\n      <div class=\"modal-body hubspot-override hubspot-override--large\">\n        <button type=\"button\"\n                class=\"close\"\n                data-dismiss=\"modal\"\n                aria-label=\"Close\">\n          <span aria-hidden=\"true\">&times;</span>\n        </button>\n        <hgroup class=\"hero text-center\">\n          <h2>Before we send it&hellip;</h2>\n          <p class=\"lg\">\n            We just need some basic information so we can send the Datasheet your way.\n          </p>\n        </hgroup>\n\n        <!--[if lte IE 8]>\n        <script charset=\"utf-8\" type=\"text/javascript\" src=\"//js.hsforms.net/forms/v2-legacy.js\"></script>\n        <![endif]-->\n        <script charset=\"utf-8\" type=\"text/javascript\" src=\"//js.hsforms.net/forms/v2.js\"></script>\n        <script>\n          hbspt.forms.create({\n            portalId: \"3776657\",\n            formId: \"45633037-a228-409b-9911-85958bffe8a0\"\n          });\n        </script>\n\n      </div>\n    </div>\n  </div>\n</div>\n"
  },
  {
    "path": "server/pages/_includes/promos/evaluating-ionic-for-enterprise.html",
    "content": "<section id=\"promo--ionic-for-enterprise\" class=\"promo promo--ebook promo--ionic-for-enterprise\">\n  <img class=\"promo__illustration\"\n       loading=\"lazy\" \n        src=\"https://images.prismic.io/ionicframeworkcom/39be9f16-b0c4-457d-9e13-1fdea06ad9c0_ionic-enterprise-development-ebook-2.png?auto=compress,format\"\n        srcset=\"https://images.prismic.io/ionicframeworkcom/39be9f16-b0c4-457d-9e13-1fdea06ad9c0_ionic-enterprise-development-ebook-2.png?auto=compress,formatw=568&h=386 1x, https://images.prismic.io/ionicframeworkcom/39be9f16-b0c4-457d-9e13-1fdea06ad9c0_ionic-enterprise-development-ebook-2.png?auto=compress,format 2x`}\n        alt=\"Evaluating Ionic for Enterprise Development\"/>\n  <div class=\"container\">\n    <hgroup>\n      <h3>\n        Get all the facts you need to make the right decision. \n        <em>We wrote a guide on everything you need to know.</em>\n      </h3>\n      <a id=\"btn-promo-evaluating-ionic-for-enterprise\" \n         class=\"btn white sm\" \n         data-toggle=\"modal\"\n         data-target=\"#promo--ionic-for-enterprise__modal\">\n        Read our free eBook<ion-icon name=\"ios-arrow-forward\"></ion-icon>\n      </a>\n    </hgroup>\n  </div>\n</section>\n\n<div class=\"modal collapse fade\"\n     id=\"promo--ionic-for-enterprise__modal\"\n     tabindex=\"-1\"\n     role=\"dialog\"\n     aria-labelledby=\"promo--ionic-for-enterprise\">\n  <div class=\"modal-dialog\" role=\"document\">\n    <div class=\"modal-content\">\n      <div class=\"modal-body hubspot-override hubspot-override--large\">\n        <button type=\"button\"\n                class=\"close\"\n                data-dismiss=\"modal\"\n                aria-label=\"Close\">\n          <span aria-hidden=\"true\">&times;</span>\n        </button>\n        <hgroup class=\"hero text-center\">\n          <h2>Before we send it&hellip;</h2>\n          <p class=\"lg\">\n            We just need some basic information so we can send the eBook your way.\n          </p>\n        </hgroup>\n\n        <!--[if lte IE 8]>\n        <script charset=\"utf-8\" type=\"text/javascript\" src=\"//js.hsforms.net/forms/v2-legacy.js\"></script>\n        <![endif]-->\n        <script charset=\"utf-8\" type=\"text/javascript\" src=\"//js.hsforms.net/forms/v2.js\"></script>\n        <script>\n          hbspt.forms.create({\n            portalId: \"3776657\",\n            formId: \"7419f80f-b2f7-42d7-bfd6-167f9a347017\"\n          });\n        </script>\n\n      </div>\n    </div>\n  </div>\n</div>"
  },
  {
    "path": "server/pages/_includes/promos/how-to-get-started.html",
    "content": "<section id=\"promo--how-to\" class=\"container center\">\n  <div class=\"content\">\n    <h2>How to get started</h2>\n    <div class=\"cards cards--red-v-blue\">\n      <div class=\"cards--red-v-blue__card\">\n        <h3>Start building today</h3>\n        <p>\n          Ready to start building apps with Ionic? Get started for free today.\n        </p>\n        <a href=\"/signup?source=framework-{{id}}\" class=\"btn\">\n          Get started <ion-icon name=\"arrow-forward\"></ion-icon>\n        </a>\n      </div>\n      <div class=\"cards--red-v-blue__card\">\n        <h3>Schedule a strategy session</h3>\n        <p>\n          Interested in chatting with one of our Solutions Engineers? Schedule\n          a free session.\n        </p>\n        <a href=\"https://ionic.io/enterprise/strategy-session\" class=\"btn\">\n          Book a time <ion-icon name=\"arrow-forward\"></ion-icon>\n        </a>\n      </div>\n    </div>\n  </div>\n</section>\n"
  },
  {
    "path": "server/pages/_includes/promos/hybrid-vs-native.html",
    "content": "<div id=\"promo--hybrid-vs-native\" class=\"container\">\n  <div class=\"wrapper\">\n    <div class=\"image-wrapper\">\n      <img\n        loading=\"lazy\"\n        width=\"918\"\n        height=\"1032\"\n        src=\"https://images.prismic.io/ionicframeworkcom/3548daf5-c0e3-445e-af7d-73c1cf4f0d42_hybrid-vs-native%402x.png?auto=compress,format\"\n        alt=\"Guide on cross-platform hybrid development for architects and app development leaders\"\n      />\n    </div>\n    <div class=\"heading-group\">\n      <h2>\n        Learn the differences between hybrid and native apps.\n        <span>We break down all the myths and misconceptions.</span>\n      </h2>\n      <a\n      data-toggle=\"modal\" data-target=\"#hubspotForm\"\n        onclick=\"(e) => {\n          e.preventDefault();\n          c('test', 'home-cards', this, 'hybrid-v-native');\n         }\"\n        >Read the free eBook <span class=\"arrow\">-></span></a\n      >\n    </div>\n  </div>\n</div>\n"
  },
  {
    "path": "server/pages/_includes/promos/ioniconf.html",
    "content": "<section id=\"promo--ioniconf\" class=\"promo promo--ebook promo--ioniconf\">\n  <div class=\"container\">\n\n    <img class=\"promo__logo\" \n           src=\"img/ioniconf/logo.png\"\n           loading=\"lazy\"\n           srcset=\"img/ioniconf/logo@1x.png 1x, img/ioniconf/logo.png 2x\" \n           alt=\"Ioniconf Logo\"/>\n    <hgroup>\n      <h3>\n        A one day, free online conference celebrating the future of cross-platform app development.\n      </h3>\n      <a id=\"btn-promo-evaluating-ionic-for-enterprise\" \n         class=\"btn white sm\" \n         href=\"/ioniconf\">\n        Register <ion-icon name=\"arrow-forward-sharp\"></ion-icon>\n      </a>\n    </hgroup>\n  </div>\n</section>\n</div>"
  },
  {
    "path": "server/pages/_includes/promos/newsletter-signup.html",
    "content": "<section class=\"promo promo-btns promo-newsletter\">\n  <div class=\"container\">\n    <hgroup>\n      <h2>Join the Ionic Community today.</h2>\n      <p>\n        Sign up for <strong>Ionic Community Digest</strong> to get the latest\n        news.\n      </p>\n    </hgroup>\n    <div class=\"btns\">\n      <ionic-newsletter-signup arrow-mode=\"true\" lg=\"true\"></ionic-newsletter-signup>\n    </div>\n  </div>\n  </section>"
  },
  {
    "path": "server/pages/_includes/promos/pwa-architects-guide.html",
    "content": "<section class=\"promo promo--ebook promo--dark\">\n  <img class=\"promo__illustration\" \n       src=\"/img/promos/promo-pwa-architect.png\"\n       alt=\"Guide for architects building progressive web apps\"/>\n  <div class=\"container\">\n    <hgroup>\n      <h2>Get our free guide</h2>\n      <p>Learn how PWAs can boost your app strategy by harnessing the web. Our PWA guide covers it all.</p>\n      <a id=\"btn-promo-pwa-architect-guide\" class=\"btn blue sm\" href=\"https://go.ionicframework.com/pwa-guide\">Get the guide</a>\n    </hgroup>\n  </div>\n</section>\n"
  },
  {
    "path": "server/pages/_includes/promos/pwa-frameworks.html",
    "content": "<section class=\"promo promo-reversed promo-inline\">\n  <div class=\"container\">\n    <hgroup>\n      <h2>Convert an existing App</h2>\n      <p>\n        Want to make your existing app a PWA? Start by following our guides for Angular and React.\n      </p>\n      <a class=\"btn blue sm\" href=\"/docs/publishing/progressive-web-app\"\n        >Make your app a PWA</a\n      >\n    </hgroup>\n    <img\n      class=\"promo__image\"\n      src=\"/img/pwa/angular.svg\"\n      alt=\"Angular Apps with Ionic\"\n    />\n    <img\n      class=\"promo__image\"\n      src=\"/img/pwa/react.svg\"\n      alt=\"React Apps with Ionic\"\n    />\n  </div>\n</section>\n"
  },
  {
    "path": "server/pages/_includes/promos/quad-cta.html",
    "content": "<section id=\"promo--quad-cta\" class=\"promo promo--tri-cta\">\n  <ul class=\"container\">\n    <li>\n      <a href=\"/enterprise\">\n        <div class=\"promo--quad-cta__graphic promo--quad-cta__graphic--enterprise\"></div>\n        <h4>Enterprise</h4>\n        <p>For mission-critical apps</p>\n      </a>\n    </li>\n    <li>\n      <a href=\"/docs\">\n        <div class=\"promo--quad-cta__graphic promo--quad-cta__graphic--docs\"></div>\n        <h4>Documentation</h4>\n        <p>Start creating Ionic apps</p>\n      </a>\n    </li>\n    <li>\n      <a href=\"https://github.com/ionic-team/ionic\">\n        <div class=\"promo--quad-cta__graphic promo--quad-cta__graphic--github\"></div>\n        <h4>GitHub</h4>\n        <p>Contribute to the project</p>\n      </a>\n    </li>\n    <li>\n      <a href=\"https://twitter.com/Ionicframework\">\n        <div class=\"promo--quad-cta__graphic promo--quad-cta__graphic--twitter\"></div>\n        <h4>Twitter</h4>\n        <p>Latest news and updates</p>\n      </a>\n    </li>\n  </ul>\n</section>\n"
  },
  {
    "path": "server/pages/_includes/promos/rethinking-low-code.html",
    "content": "<div class=\"promo promo--ebook container\">\n  <div class=\"expander\">\n    <div class=\"promo__illustration__container\">\n      <img class=\"promo__illustration\"\n           src=\"/img/promos/rethinking-low-code.png?1\"\n           alt=\"How low-code's dramatic rise is driving a need for a more developer firendly approach.\"/>\n    </div>\n    <div class=\"container\">\n      <hgroup>\n        <h3>\n          Rethinking Low-Code\n          <span>Understand the challenges of low-code and our unique dev-friendly approach.</span>\n        </h3>\n        <a href=\"/books/rethinking-low-code\">Read our Whitepaper</a>\n      </hgroup>\n    </div>\n  </div>\n</div>\n"
  },
  {
    "path": "server/pages/_includes/promos/start-enterprise.html",
    "content": "<section id=\"promo--enterprise\" class=\"promo promo-btns\">\n  <div class=\"container\">\n    <hgroup>\n      <h2>Start with Ionic Enterprise today.</h2>\n      <p>\n        Build with the speed and peace of mind your organization needs.\n      </p>\n    </hgroup>\n    <div class=\"btns\">\n      <a href=\"https://ionic.io/contact/sales\" class=\"btn sm\">Try Enterprise</a>\n      <a href=\"https://ionic.io/enterprise/strategy-session\" class=\"btn sm light-blue\">\n        Strategy Session\n      </a>\n    </div>\n  </div>\n</section>"
  },
  {
    "path": "server/pages/_includes/promos/start-shipping.html",
    "content": "<section class=\"promo promo-btns\">\n  <div class=\"container\">\n    <hgroup>\n      <h2>Start shipping better apps, today.</h2>\n      <p>\n        Get started with Ionic Framework, or sign up for a free developer\n        account.\n      </p>\n    </hgroup>\n    <div class=\"btns\">\n      <a href=\"/docs/\" class=\"btn sm\">Framework Docs</a>\n      <a href=\"https://dashboard.ionicframework.com/dash\" class=\"btn  sm white\">\n        Sign up free\n      </a>\n    </div>\n  </div>\n</section>"
  },
  {
    "path": "server/pages/_includes/promos/state-of-app-dev-2020.html",
    "content": "<div id=\"promo--state-of-app-dev-2020\" class=\"promo promo--ebook\">\n  <img class=\"promo__illustration\" \n       src=\"/img/promos/enterprise-evaluation-banner.png\"\n       alt=\"The state of mobile app development in 2020.\"/>\n  <div class=\"container\">\n    <hgroup>\n      <h3>\n        The state of mobile app development in 2020.\n      </h3>\n      <p>\n        Get focused insights for enterprise teams, from over 1,700 professional developers, architects, and IT leaders.\n      </p>\n      <a id=\"btn-promo-state-of-app-dev-2020\"\n         class=\"btn white sm\"\n         href=\"https://go.ionicframework.com/state-of-app-dev-2020\"\n         onclick=\"c('test', 'survey CTA', this, 'State of App Dev 2020')\">Get the Report</a>\n    </hgroup>\n  </div>\n</div>\n"
  },
  {
    "path": "server/pages/_includes/promos/tri-cta.html",
    "content": "<section class=\"promo promo--tri-cta\">\n  <ul class=\"container\">\n    <li>\n      <h4>Get a 1-1 Free Consultation</h4>\n      <p>Request a personalized walkthrough of the Ionic App platform</p>\n      <a href=\"https://ionic.io/demo\" class=\"btn sm white\">Contact us</a>\n    </li>\n    <li>\n      <h4>Get Support</h4>\n      <p>Check out our help center for answers to common questions</p>\n      <a\n        href=\"https://ionic.zendesk.com/hc/en-us\"\n        target=\"_blank\"\n        class=\"btn sm\"\n        >View Topics</a\n      >\n    </li>\n    <li>\n      <h4>Explore Ionic Pricing Plans</h4>\n      <p>\n        Explore our pricing options to find a plan that best suits your needs\n      </p>\n      <a href=\"/pricing#enterprise-edition\" class=\"btn sm\">See Pricing</a>\n    </li>\n  </ul>\n</section>\n"
  },
  {
    "path": "server/pages/_includes/promos/why-hybrid.html",
    "content": "<section class=\"promo promo--ebook\">\n  <img class=\"promo__illustration\" src=\"/img/promos/promo-why-hybrid.png?1\"/>\n  <div class=\"container\">\n    <hgroup>\n      <h2>Get our free Guide</h2>\n      <p>\n        Get Real-world answers from teams who chose hybrid app development for\n        their mobile strategy.\n      </p>\n      <a id=\"btn-promo-why-hybrid\"\n         class=\"btn blue sm\"\n         href=\"/articles/why-hybrid\">Get the Guide</a>\n    </hgroup>\n  </div>\n</section>\n"
  },
  {
    "path": "server/pages/_includes/scripts.html",
    "content": "<script>\n  window.API_URL = \"{{ API_URL }}\";\n  window.DASHBOARD_URL = \"{{ DASHBOARD_URL }}\";\n</script>\n\n{% if dev %}\n  <script src=\"/js/ionic-site.js\"></script>\n{% else %} \n  <script src=\"/js/ionic-site.min.js\"></script>\n{% endif %}\n\n{% if dev or PRISMIC_PREVIEW %}\n<script>\n  window.prismic = {\n    endpoint: 'https://ionicframeworkcom.prismic.io/api/v2'\n  };\n</script>\n<script type=\"text/javascript\" src=\"https://static.cdn.prismic.io/prismic.min.js\"></script>\n{% endif %}\n\n{% if stickyNav %}\n<script>\n  stickyNav && stickyNav.init();\n</script>\n{% endif %}\n\n{% if page.footer_includes %}{{ page.footer_includes }}{% endif %}\n"
  },
  {
    "path": "server/pages/_includes/svg/advisory-icon.html",
    "content": "<svg width=\"48\" height=\"48\" viewBox=\"0 0 48 48\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n<circle cx=\"24\" cy=\"24\" r=\"24\" fill=\"#E8FBEF\"/>\n<path d=\"M14.0853 30.89L32.5026 12.4164C33.2825 11.6341 34.5469 11.6341 35.3267 12.4164L40.5879 17.6937C41.3678 18.4759 41.3678 19.7442 40.5879 20.5264L23.5827 37.5836C22.8028 38.3659 21.5384 38.3659 20.7586 37.5836L14.0853 30.89Z\" fill=\"#65D692\"/>\n<path opacity=\"0.4\" d=\"M7.41203 24.1922C6.63218 23.41 6.63218 22.1417 7.41203 21.3595L12.6732 16.0822C13.4531 15.3 14.7175 15.3 15.4973 16.0822L22.1706 22.7759L14.0853 30.8859L7.41203 24.1922Z\" fill=\"#65D692\"/>\n</svg>\n"
  },
  {
    "path": "server/pages/_includes/svg/appflow-icon.html",
    "content": "<svg width=\"48\" height=\"48\" viewBox=\"0 0 48 48\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n<circle cx=\"20\" cy=\"24\" r=\"20\" fill=\"#E0E4FB\"/>\n<circle cx=\"20\" cy=\"24\" r=\"10\" fill=\"#9C9AEB\"/>\n<circle cx=\"35\" cy=\"12\" r=\"4\" fill=\"#9C9AEB\"/>\n<circle cx=\"24\" cy=\"24\" r=\"24\" fill=\"#EFF2FF\"/>\n<path opacity=\"0.4\" d=\"M38.6459 19.875H9.35406C8.0576 19.875 7.37172 21.4087 8.23601 22.375L22.882 38.75C23.4782 39.4167 24.5218 39.4167 25.118 38.75L39.764 22.375C40.6283 21.4087 39.9424 19.875 38.6459 19.875Z\" fill=\"#6D7FF7\"/>\n<path d=\"M34.333 12H13.667C12.3585 12 11.6773 13.5584 12.5661 14.5188L22.899 25.6853C23.4928 26.3269 24.5072 26.3269 25.1009 25.6853L35.4339 14.5188C36.3226 13.5584 35.6415 12 34.333 12Z\" fill=\"#697BF5\"/>\n</svg>\n"
  },
  {
    "path": "server/pages/_includes/svg/enterprise-edition-icon.html",
    "content": "<svg width=\"48\" height=\"48\" viewBox=\"0 0 48 48\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n<circle cx=\"24\" cy=\"24\" r=\"24\" fill=\"#EBF2FF\"/>\n<path opacity=\"0.3\" d=\"M23.0251 43.7349C23.262 44.7712 24.738 44.7712 24.9749 43.7349L27.8414 31.1936C27.9364 30.7784 27.7578 30.3486 27.3966 30.1228L24.53 28.3312C24.2057 28.1285 23.7943 28.1285 23.47 28.3312L20.6034 30.1228C20.2422 30.3486 20.0636 30.7784 20.1586 31.1936L23.0251 43.7349Z\" fill=\"#3880FF\"/>\n<path opacity=\"0.3\" d=\"M41.7938 14.5127C42.5728 13.7894 41.8348 12.5112 40.819 12.8241L28.5246 16.6123C28.1175 16.7377 27.8346 17.1072 27.8197 17.5329L27.7014 20.9113C27.688 21.2934 27.8937 21.6498 28.2314 21.8293L31.2162 23.416C31.5924 23.6159 32.0539 23.5557 32.366 23.2658L41.7938 14.5127Z\" fill=\"#3880FF\"/>\n<path opacity=\"0.3\" d=\"M6.20618 14.5127C5.4272 13.7894 6.1652 12.5112 7.18103 12.8242L19.4754 16.6123C19.8825 16.7377 20.1654 17.1072 20.1803 17.533L20.2986 20.9113C20.312 21.2935 20.1063 21.6498 19.7686 21.8293L16.7838 23.416C16.4076 23.616 15.9461 23.5557 15.634 23.2659L6.20618 14.5127Z\" fill=\"#3880FF\"/>\n<circle opacity=\"0.1\" cx=\"24\" cy=\"24\" r=\"16\" fill=\"#3880FF\"/>\n<circle cx=\"24\" cy=\"24\" r=\"8\" fill=\"#3880FF\"/>\n</svg>\n"
  },
  {
    "path": "server/pages/_includes/svg/ionic-blue.html",
    "content": "\n<svg width=\"40\" height=\"40\" viewBox=\"0 0 40 40\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n<circle cx=\"20\" cy=\"20\" r=\"20\" fill=\"#dce8fd\"/>\n<circle cx=\"20\" cy=\"20\" r=\"10\" fill=\"#3880ff\"/>\n<circle cx=\"35\" cy=\"8\" r=\"4\" fill=\"#3880ff\"/>\n</svg>\n"
  },
  {
    "path": "server/pages/_includes/svg/ionic-grey.html",
    "content": "\n<svg width=\"40\" height=\"40\" viewBox=\"0 0 40 40\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n<circle cx=\"20\" cy=\"20\" r=\"20\" fill=\"#CED6E0\"/>\n<circle cx=\"20\" cy=\"20\" r=\"10\" fill=\"#5B708B\"/>\n<circle cx=\"35\" cy=\"8\" r=\"4\" fill=\"#5B708B\"/>\n</svg>"
  },
  {
    "path": "server/pages/_includes/svg/ionic-navy.html",
    "content": "\n<svg width=\"40\" height=\"40\" viewBox=\"0 0 40 40\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n<circle cx=\"20\" cy=\"20\" r=\"20\" fill=\"#D6E5FF\"/>\n<circle cx=\"20\" cy=\"20\" r=\"10\" fill=\"#4370C0\"/>\n<circle cx=\"35\" cy=\"8\" r=\"4\" fill=\"#4370C0\"/>\n</svg>\n"
  },
  {
    "path": "server/pages/_includes/svg/ionic-purple.html",
    "content": "\n<svg width=\"40\" height=\"40\" viewBox=\"0 0 40 40\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n<circle cx=\"20\" cy=\"20\" r=\"20\" fill=\"#E0E4FB\"/>\n<circle cx=\"20\" cy=\"20\" r=\"10\" fill=\"#9C9AEB\"/>\n<circle cx=\"35\" cy=\"8\" r=\"4\" fill=\"#9C9AEB\"/>\n</svg>\n"
  },
  {
    "path": "server/pages/_includes/svg/ionic-salmon.html",
    "content": "<svg width=\"40\" height=\"40\" viewBox=\"0 0 40 40\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n<circle cx=\"20\" cy=\"20\" r=\"20\" fill=\"#FFE5DC\"/>\n<circle cx=\"20\" cy=\"20\" r=\"10\" fill=\"#F7A491\"/>\n<circle cx=\"35\" cy=\"8\" r=\"4\" fill=\"#F7A491\"/>\n</svg>\n"
  },
  {
    "path": "server/pages/_includes/svg/studio-icon.html",
    "content": "<svg width=\"48\" height=\"48\" viewBox=\"0 0 48 48\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n<circle cx=\"24\" cy=\"24\" r=\"24\" fill=\"#EBF0F6\"/>\n<path opacity=\"0.3\" d=\"M34.2273 22.8707C34.6931 23.5515 34.6931 24.4486 34.2273 25.1294L23.6506 40.5876C22.8564 41.7485 21.1436 41.7485 20.3494 40.5876L9.77273 25.1294C9.30688 24.4486 9.30688 23.5515 9.77273 22.8707L20.3494 7.4125C21.1436 6.25165 22.8564 6.25165 23.6506 7.4125L34.2273 22.8707Z\" fill=\"#697E9A\"/>\n<path d=\"M38.2604 22.8907C38.7083 23.5625 38.7083 24.4377 38.2604 25.1095L31.1641 35.7539C30.3725 36.9414 28.6276 36.9414 27.8359 35.7539L20.7396 25.1095C20.2918 24.4377 20.2918 23.5625 20.7396 22.8907L27.8359 12.2462C28.6276 11.0587 30.3725 11.0587 31.1641 12.2462L38.2604 22.8907Z\" fill=\"#697E9A\"/>\n</svg>\n"
  },
  {
    "path": "server/pages/_includes/svg/survey-2018-bars.html",
    "content": "<svg id=\"bars\" width=\"1638\" height=\"799\" viewBox=\"0 0 1638 799\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n<g><g opacity=\"0.2\">\n<path d=\"M1597.8 251.443V621.836L1638 598.64V228.247L1597.8 251.443Z\" fill=\"#92A1B3\"/>\n<path d=\"M1557.61 228.247V598.627L1597.8 621.836V251.456L1557.61 228.247Z\" fill=\"#DEE3EA\"/>\n<path d=\"M1597.8 204.799L1557.61 228.348L1597.83 251.695L1638 228.348L1597.8 204.799Z\" fill=\"white\"/>\n</g></g>\n<g><g opacity=\"0.5\">\n<path d=\"M1493.96 298.338V668.731L1534.16 645.535V275.142L1493.96 298.338Z\" fill=\"#92A1B3\"/>\n<path d=\"M1453.77 275.142V645.523L1493.96 668.731V298.351L1453.77 275.142Z\" fill=\"#DEE3EA\"/>\n<path d=\"M1493.96 251.695L1453.77 275.244L1493.99 298.59L1534.16 275.244L1493.96 251.695Z\" fill=\"white\"/>\n</g></g>\n<g><g opacity=\"0.3\">\n<path d=\"M1390.12 374.544V744.937L1430.32 721.741V351.348L1390.12 374.544Z\" fill=\"#92A1B3\"/>\n<path d=\"M1349.93 351.348V721.728L1390.12 744.937V374.557L1349.93 351.348Z\" fill=\"#DEE3EA\"/>\n<path d=\"M1390.12 327.9L1349.93 351.449L1390.15 374.796L1430.32 351.449L1390.12 327.9Z\" fill=\"white\"/>\n</g></g>\n<g><g opacity=\"0.2\">\n<path d=\"M1286.28 154.302V524.695L1326.48 501.499V131.106L1286.28 154.302Z\" fill=\"#92A1B3\"/>\n<path d=\"M1246.09 131.106V501.486L1286.28 524.695V154.315L1246.09 131.106Z\" fill=\"#DEE3EA\"/>\n<path d=\"M1286.28 107.658L1246.09 131.207L1286.31 154.554L1326.48 131.207L1286.28 107.658Z\" fill=\"white\"/>\n</g></g>\n<g><g opacity=\"0.3\">\n<path d=\"M1182.44 362.82V733.213L1222.64 710.017V339.624L1182.44 362.82Z\" fill=\"#92A1B3\"/>\n<path d=\"M1142.25 339.624V710.005L1182.44 733.213V362.833L1142.25 339.624Z\" fill=\"#DEE3EA\"/>\n<path d=\"M1182.44 316.176L1142.25 339.726L1182.47 363.072L1222.64 339.726L1182.44 316.176Z\" fill=\"white\"/>\n</g></g>\n<g><g opacity=\"0.2\">\n<path d=\"M1078.6 266.516V636.91L1118.8 613.714V243.321L1078.6 266.516Z\" fill=\"#92A1B3\"/>\n<path d=\"M1038.4 243.321V613.701L1078.6 636.91V266.529L1038.4 243.321Z\" fill=\"#DEE3EA\"/>\n<path d=\"M1078.6 219.873L1038.4 243.422L1078.63 266.768L1118.8 243.422L1078.6 219.873Z\" fill=\"white\"/>\n</g></g>\n<g><g opacity=\"0.3\">\n<path d=\"M974.761 327.648V698.041L1014.96 674.846V304.453L974.761 327.648Z\" fill=\"#92A1B3\"/>\n<path d=\"M934.564 304.453V674.833L974.761 698.041V327.661L934.564 304.453Z\" fill=\"#DEE3EA\"/>\n<path d=\"M974.761 281.005L934.564 304.554L974.786 327.9L1014.96 304.554L974.761 281.005Z\" fill=\"white\"/>\n</g></g>\n<g><g opacity=\"0.5\">\n<path d=\"M870.92 112.431V653.658L911.117 630.462V89.2347L870.92 112.431Z\" fill=\"#92A1B3\"/>\n<path d=\"M830.724 89.2347V645.284L870.92 668.492V112.443L830.724 89.2347Z\" fill=\"#DEE3EA\"/>\n<path d=\"M870.92 65.7869L830.724 89.336L870.945 112.683L911.117 89.336L870.92 65.7869Z\" fill=\"white\"/>\n</g></g>\n<g><g opacity=\"0.3\">\n<path d=\"M767.08 274.891V645.284L807.276 622.088V251.695L767.08 274.891Z\" fill=\"#92A1B3\"/>\n<path d=\"M726.883 251.695V622.075L767.08 645.284V274.904L726.883 251.695Z\" fill=\"#DEE3EA\"/>\n<path d=\"M767.08 228.247L726.883 251.796L767.105 275.143L807.276 251.796L767.08 228.247Z\" fill=\"white\"/>\n</g></g>\n<g><g opacity=\"0.2\">\n<path d=\"M663.239 372.869V743.262L703.436 720.066V349.673L663.239 372.869Z\" fill=\"#92A1B3\"/>\n<path d=\"M623.043 349.673V720.053L663.239 743.262V372.882L623.043 349.673Z\" fill=\"#DEE3EA\"/>\n<path d=\"M663.239 326.225L623.043 349.775L663.264 373.121L703.436 349.775L663.239 326.225Z\" fill=\"white\"/>\n</g></g>\n<g><g opacity=\"0.4\">\n<path d=\"M559.399 211.247V581.64L599.595 558.444V188.051L559.399 211.247Z\" fill=\"#92A1B3\"/>\n<path d=\"M519.202 188.051V558.431L559.399 581.64V211.259L519.202 188.051Z\" fill=\"#DEE3EA\"/>\n<path d=\"M559.399 164.603L519.202 188.152L559.424 211.498L599.595 188.152L559.399 164.603Z\" fill=\"white\"/>\n</g></g>\n<g><g opacity=\"0.4\">\n<path d=\"M455.558 400.504V770.897L495.755 747.701V377.308L455.558 400.504Z\" fill=\"#92A1B3\"/>\n<path d=\"M415.362 377.308V747.688L455.558 770.897V400.517L415.362 377.308Z\" fill=\"#DEE3EA\"/>\n<path d=\"M455.558 353.86L415.362 377.409L455.583 400.756L495.755 377.409L455.558 353.86Z\" fill=\"white\"/>\n</g></g>\n<g><g opacity=\"0.3\">\n<path d=\"M351.718 187.798V558.191L391.914 534.996V164.603L351.718 187.798Z\" fill=\"#92A1B3\"/>\n<path d=\"M311.521 164.603V534.983L351.718 558.191V187.811L311.521 164.603Z\" fill=\"#DEE3EA\"/>\n<path d=\"M351.718 141.155L311.521 164.704L351.743 188.05L391.914 164.704L351.718 141.155Z\" fill=\"white\"/>\n</g></g>\n<g><g opacity=\"0.3\">\n<path d=\"M247.877 286.615V657.008L288.074 633.812V263.419L247.877 286.615Z\" fill=\"#92A1B3\"/>\n<path d=\"M207.681 263.419V633.799L247.877 657.008V286.627L207.681 263.419Z\" fill=\"#DEE3EA\"/>\n<path d=\"M247.877 239.971L207.681 263.52L247.902 286.867L288.074 263.52L247.877 239.971Z\" fill=\"white\"/>\n</g></g>\n<g><g opacity=\"0.4\">\n<path d=\"M144.037 47.1116V594.201L184.233 571.005V23.9156L144.037 47.1116Z\" fill=\"#92A1B3\"/>\n<path d=\"M103.84 23.9156V576.017L144.037 599.225V47.1243L103.84 23.9156Z\" fill=\"#DEE3EA\"/>\n<path d=\"M144.037 0.467773L103.84 24.0169L144.062 47.3635L184.233 24.0169L144.037 0.467773Z\" fill=\"white\"/>\n</g></g>\n<g><g opacity=\"0.2\">\n<path d=\"M40.1963 428.139V798.532L80.3926 775.336V404.943L40.1963 428.139Z\" fill=\"#92A1B3\"/>\n<path d=\"M0 404.943V775.324L40.1963 798.532V428.152L0 404.943Z\" fill=\"#DEE3EA\"/>\n<path d=\"M40.1963 381.495L0 405.045L40.2214 428.391L80.3926 405.045L40.1963 381.495Z\" fill=\"white\"/>\n</g></g>\n</svg>\n"
  },
  {
    "path": "server/pages/_includes/svg/survey-2018-cubes.html",
    "content": "<svg id=\"cubes\" width=\"1680\" height=\"237\" viewBox=\"0 0 1680 237\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n<g>\n<g opacity=\"0.2\">\n<path d=\"M403.043 115.584V156.876L438.432 137.325V96.032L403.043 115.584Z\" fill=\"#92A1B3\"/>\n<path d=\"M367.654 96.032V137.173L403.043 156.736V115.594L367.654 96.032Z\" fill=\"#DEE3EA\"/>\n<path d=\"M403.043 76.2679L367.654 96.1174L403.065 115.796L438.432 96.1174L403.043 76.2679Z\" fill=\"white\"/>\n</g>\n<g opacity=\"0.4\">\n<path d=\"M1088.22 -14.273V31.0483L1127.54 9.58914V-35.7322L1088.22 -14.273Z\" fill=\"#92A1B3\"/>\n<path d=\"M1048.89 -35.7322V9.42305L1088.22 30.894V-14.2612L1048.89 -35.7322Z\" fill=\"#DEE3EA\"/>\n</g>\n<g opacity=\"0.3\">\n<path d=\"M1644.61 55.6189V96.9116L1680 77.3599V36.0671L1644.61 55.6189Z\" fill=\"#92A1B3\"/>\n<path d=\"M1609.22 36.0671V77.2086L1644.61 96.771V55.6296L1609.22 36.0671Z\" fill=\"#DEE3EA\"/>\n<path d=\"M1644.61 16.3031L1609.22 36.1525L1644.63 55.8312L1680 36.1525L1644.61 16.3031Z\" fill=\"white\"/>\n</g>\n<g opacity=\"0.2\">\n<path d=\"M1201.26 198.231V236.502L1233.7 218.381V180.11L1201.26 198.231Z\" fill=\"#92A1B3\"/>\n<path d=\"M1168.82 180.11V218.241L1201.26 236.372V198.241L1168.82 180.11Z\" fill=\"#DEE3EA\"/>\n<path d=\"M1201.26 161.792L1168.82 180.189L1201.28 198.427L1233.7 180.189L1201.26 161.792Z\" fill=\"white\"/>\n</g>\n</g>\n</svg>\n"
  },
  {
    "path": "server/pages/_layouts/base.html",
    "content": "{% extends '_layouts/blank.html' %}\n\n{% block page %}\n  {% include '../_includes/header.html' %}\n\n  {% block main %}\n    {% if press_breadcrumb %}\n      <ionic-sub-header>\n        <ul slot=\"breadcrumbs\">\n          <li><a href=\"/press\">Press &amp; Media</a></li>\n          <li><a href=\"#\">{{title | title}}</a></li>\n        </ul>\n      </ionic-sub-header>\n    {% else %}\n      <div class=\"cta banner\"></div>\n    {% endif %}\n\n    <main class=\"container\">\n      {{ markdown }}\n    </main>\n  {% endblock %}\n\n  {% if pre_footer == true %}\n    {% include '../_includes/pre_footer.html' %}\n  {% endif %}\n\n  {% include '../_includes/footer.html' %}\n{% endblock %}\n"
  },
  {
    "path": "server/pages/_layouts/blank.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n  <head>\n    {% block header %}\n      {% include '../_includes/head.prod.html' %}\n      {% block header_includes %}{% endblock %}\n    {% endblock %}\n  </head>\n  <body id=\"page-{{id}}\"\n        class=\"page-{{id}}\n               {% if id == 'homer' %}has-snap{% endif %}\n               {% if header_style %}{{header_style}}{% endif %}\"\n        ng-app=\"IonicSite\"\n        {% if bodyController %}ng-controller=\"{{bodyController}}\"{% endif %}\n        {% block body_attributes %}data-spy=\"scroll\" data-offset=\"100\"{% endblock %}>\n    <noscript>\n      <iframe src=\"https://www.googletagmanager.com/ns.html?id=GTM-TKMGCBC\"\n              style=\"display:none;visibility:hidden\"\n              height=\"0\"\n              width=\"0\" ></iframe>\n    </noscript>\n\t\t{% block page %}\n\t\t\t{% block main %}{% endblock %}\n\t\t{% endblock %}\n\n\t  {% block modals %}{% endblock %}\n\n\t  {% block footer %}\n\t    {% include '../_includes/scripts.prod.html' %}\n\t    {% block scripts %}{% endblock %}\n\t  {% endblock %}\n\n  </body>\n</html>\n"
  },
  {
    "path": "server/pages/_layouts/creator.html",
    "content": "<!doctype html>\n<html lang=\"en\">\n<head>\n  <meta http-equiv=\"Content-type\" content=\"text/html; charset=utf-8\">\n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  <meta name=\"keywords\" content=\"ionic,html5,hybrid,cordova,phonegap,angularjs,reactjs,emberjs\">\n  <meta name=\"description\" content=\"{% block meta_description %}Creator is a drag-&-drop prototyping tool for creating great apps using Ionic, with just a click of the mouse.{% endblock %}\">\n  <title>{% block title %}Ionic Cloud{% endblock %}</title>\n  <link rel=\"shortcut icon\" href=\"/img/pro/creator/ionic-creator-icon.png\">\n\n  <!--<link rel=\"stylesheet\" href=\"/css/mezzanine.css\">-->\n  <link rel=\"stylesheet\" href=\"/css/creator.css\">\n\n  {% block extra_css %}{% endblock %}\n\n  {% block extra_js %}{% endblock %}\n\n  {% block extra_head %}{% endblock %}\n</head>\n\n<body id=\"{% block body_id %}body-creator-{{ page }}{% endblock %}\"\n      {% block body_attributes %}class=\"creator\"{% endblock %}\n      ng-app=\"IonicSite\">\n  <noscript>\n    <iframe src=\"https://www.googletagmanager.com/ns.html?id=GTM-TKMGCBC\"\n            style=\"display:none;visibility:hidden\"\n            height=\"0\"\n            width=\"0\" ></iframe>\n  </noscript>\n  {% block ionicbar %}\n  {% endblock %}\n\n  {% block header %}\n    <header class=\"container\">\n      <a href=\"/creator\">\n        <img class=\"creator-logo\" src=\"/img/pro/creator/creator-logo.png\"/>\n      </a>\n      <nav>\n        <a class=\"btn {% if page == 'docs' %}active{% endif %}\"\n           href=\"http://docs.usecreator.com\">Docs</a>\n        <a class=\"btn {% if page == 'support' %}active{% endif %}\"\n           href=\"/creator/support\">Support</a>\n        <a class=\"btn blue border\" href=\"https://creator.ionic.io/app/login\">\n          Login\n        </a>\n        <!--\n        <a class=\"btn blue signup\" href=\"https://creator.ionic.io/app/signup\">\n          Sign up\n        </a>\n      -->\n      </nav>\n    </header>\n  {% endblock %}\n\n  {% block main %}\n\n  {% endblock %}\n\n\n\n  {% block footer %}\n  <footer class=\"container\">\n    <div class=\"row\">\n      <div class=\"left\">\n        <a href=\"/creator\">\n          <img class=\"creator-logo\" src=\"/img/pro/creator/creator-logo.png\"/>\n        </a>\n        <p>\n          The fastest way to build, share, and ship mobile apps.\n        </p>\n      </div>\n      <div class=\"center\">\n        <section>\n          <h3>Info</h3>\n          <ul>\n            <li><a href=\"https://ionicframework.com\"\n                   target=\"_blank\">Ionic</a></li>\n            <li><a href=\"/privacy\">Privacy</a></li>\n            <li><a href=\"/tos\">Terms</a></li>\n          </ul>\n        </section>\n        <section>\n          <h3>Resources</h3>\n          <ul>\n            <li><a href=\"http://docs.usecreator.com\">Docs</a></li>\n            <li><a href=\"/creator/support\">Support</a></li>\n          </ul>\n        </section>\n        <section>\n          <h3>Say Hi!</h3>\n          <ul>\n            <li><a href=\"mailto:help@usecreator.com\" target=\"_blank\">\n              Contact\n            </a></li>\n            <li><a href=\"https://twitter.com/IonicCreator\" target=\"_blank\">\n              Twitter\n            </a></li>\n          </ul>\n        </section>\n      </div>\n      <div class=\"right twitter\">\n        <p>\n          Loving the new <a href=\"https://twitter.com/IonicCreator\"\n          target=\"_blank\">@IonicCreator</a>! Nice work <a target=\"_blank\"\n          href=\"https://twitter.com/Ionicframework\">@Ionicframework</a> team!\n        </p>\n      </div>\n    </div>\n\n    <div class=\"row bottom\">\n      <p>\n        <img src=\"/img/pro/creator/ionic-io-logo-small.png\" class=\"ioni-io-logo\"/>\n        Copyright &copy; 2017. All rights reserved.\n      </p>\n    </div>\n  </footer>\n  {% endblock %}\n\n\t{% include '../_includes/scripts.prod.html' %}\n\t{% block scripts %}{% endblock %}\n\n  <script>\n    (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){\n    (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),\n    m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)\n    })(window,document,'script','//www.google-analytics.com/analytics.js','ga');\n\n    ga('create', 'UA-44023830-8', 'auto');\n    ga('send', 'pageview');\n\n  </script>\n  <script>\n  window.intercomSettings = {\n    app_id: \"yqjddt6b\"\n  };\n</script>\n<script>(function(){var w=window;var ic=w.Intercom;if(typeof ic===\"function\"){ic('reattach_activator');ic('update',intercomSettings);}else{var d=document;var i=function(){i.c(arguments)};i.q=[];i.c=function(args){i.q.push(args)};w.Intercom=i;function l(){var s=d.createElement('script');s.type='text/javascript';s.async=true;s.src='https://widget.intercom.io/widget/yqjddt6b';var x=d.getElementsByTagName('script')[0];x.parentNode.insertBefore(s,x);}if(w.attachEvent){w.attachEvent('onload',l);}else{w.addEventListener('load',l,false);}}})()</script>\n</body>\n</html>\n"
  },
  {
    "path": "server/pages/_layouts/enterprise.html",
    "content": "{% extends '_layouts/blank.html' %}\n{% set isEnterprise = true %}\n\n{% import \"_includes/macros.html\" as macros %}\n{% if header_style == 'transparent' %}}\n  {% set header_style = 'transparent light' %}\n{% endif %}\n\n{% if not meta_image %}\n  {% set meta_image = 'https://ionicframework.com/img/meta/ionic-for-enterprise-og.png'%}\n{% endif %}\n\n{% macro navLinkAttrs(dest) %}\n  {% set regEx = r/\\/enterprise(\\/index)?(?!\\/)/ %}\n\n  {%if regEx.test(dest)%}\n    href=\"{{dest}}\" class=\"{%if regEx.test(url)%}active{% endif %}\"\n  {%else%}\n    href=\"{{dest}}\" class=\"{%if dest in url%}active{% endif %}\"\n  {%endif%}\n\n{% endmacro %}\n\n{% block page %}\n  {% include '../_includes/header.html' %}\n\n  {# <div id=\"sub-header\">\n    <div class=\"container\">\n      <ul class=\"left sub-header__left\">\n        <li><a class=\"sub-header__title\" href=\"/enterprise\">Enterprise</a></li>\n      </ul>\n      <ul class=\"sub-header__right\">\n        <li><a {{ navLinkAttrs('/enterprise') }}>Overview</a></li>\n        <li><a {{ navLinkAttrs('/enterprise/why-ionic') }}>Why Ionic</a></li>\n        <li><a {{ navLinkAttrs('/customers') }}>Customers</a></li>\n        <li><a {{ navLinkAttrs('/enterprise/strategy-session') }}>Strategy Session</a></li>\n        <li><a class=\"btn\" href=\"https://ionic.io/contact/sales\" rel=\"noopener\">Contact us</a></li>\n      </ul>\n    </div>\n  </div> #}\n\n  <ionic-sub-header>\n    <a slot=\"title\" href=\"/enterprise\">Enterprise</a>\n    <ul slot=\"right\">\n      <li><a {{ navLinkAttrs('/enterprise') }}>Overview</a></li>\n      <li><a {{ navLinkAttrs('/enterprise/why-ionic') }}>Why Ionic</a></li>\n      <li><a {{ navLinkAttrs('/customers') }}>Customers</a></li>\n      <li><a {{ navLinkAttrs('/enterprise/strategy-session') }}>Strategy Session</a></li>\n      <li><a href=\"https://ionic.io/pricing\" rel=\"noopener\">Pricing</a></li>\n      <li><a class=\"btn\" href=\"https://ionic.io/contact/sales\" rel=\"noopener\">Contact us</a></li>\n    </ul>\n  </ionic-sub-header>\n\n  {% block main %}\n    <div class=\"hero\"></div>\n  {% endblock %}\n\n  {% include '../_includes/footer.html' %}\n{% endblock %}\n\n"
  },
  {
    "path": "server/pages/angular.html",
    "content": "{% extends '_layouts/blank.html' %}\n{% set id = 'angular' %}\n{% set header_style = 'transparent' %}\n{% set cssPath = 'angular' %}\n{% set cssVersion = 3 %}\n{% set title = 'Build Native and Progressive Web Apps with Angular and Ionic' %}\n{% set meta_image = 'https://ionicframework.com/img/meta/ionic-angular-og.png?v1'%}\n{% set meta_description = 'Cross-platform development with Angular and Ionic Framework' %}\n{% set hide_pre_header = true %}\n\n{% block main %}\n<div class=\"header-wrapper\">\n  <header>\n    <a href=\"/\" class=\"back-button\">\n      <div class=\"arrow\"><-<span> </span></div>\n      Ionic Home\n    </a>\n\n    <hgroup class=\"container\">\n      <img\n        src=\"/img/angular/logo@2x.png\"\n        alt=\"Ionic Logo\"\n        class=\"logo\"\n        width=\"116\"\n        height=\"64\"\n      />\n      <h1>\n        Build iOS & Android apps from a single codebase.\n        <span class=\"highlight\">All in Angular.</span>\n      </h1>\n      <div class=\"cta-row\">\n        <a\n          href=\"https://ionicframework.com/start#angular\"\n          target=\"_blank\"\n          id=\"ionic-react-get-started-cta\"\n          class=\"primary-btn\"\n        >\n          Start an app\n          <span class=\"arrow\"> -></span>\n        </a>\n        <a href=\"#components\" id=\"ionic-react-live-demo-cta\" class=\"secondary-btn\">\n          Live Demo\n          <span class=\"arrow\"> -></span>\n        </a>\n      </div>\n    </hgroup>\n  </header>\n</div>\n\n<nav id=\"sticky-bar\">\n  <div class=\"container\">\n    <ul class=\"nav\" role=\"tablist\">\n      <li>\n        <a class=\"anchor\" data-offset=\"150\" href=\"#components\">Components</a>\n      </li>\n      <li><a class=\"anchor\" data-offset=\"150\" href=\"#native\">Native</a></li>\n      <li>\n        <a class=\"anchor\" data-offset=\"150\" href=\"#samples\">Sample Apps</a>\n      </li>\n      <li>\n        <a class=\"anchor\" data-offset=\"150\" href=\"#enterprise\">Enterprise</a>\n      </li>\n      <li>\n        <a class=\"anchor\" data-offset=\"150\" href=\"#why\">Why Ionic Angular?</a>\n      </li>\n      <li><a class=\"anchor\" data-offset=\"150\" href=\"#accolades\">Love</a></li>\n      <li>\n        <a class=\"anchor try-it\" data-offset=\"150\" href=\"#start\"\n          >Try it <span class=\"arrow\"> -></span></a\n        >\n      </li>\n    </ul>\n  </div>\n</nav>\n\n<main>\n  <section class=\"container\">\n    <div id=\"intro\">\n      <article>\n        <img src=\"/img/angular/intro/0@2x.png\" alt=\"\" width=\"48\" height=\"48\" />\n        <h3>Angular UI Components</h3>\n        <p class=\"p3\">\n          Ionic Angular combines the core Ionic UI Components, gestures, and\n          animiations with the tooling and APIs that are tailored to Angular\n          Developers.\n        </p>\n      </article>\n      <article>\n        <img src=\"/img/angular/intro/1@2x.png\" alt=\"\" width=\"52\" height=\"48\" />\n        <h3>Familiar tooling</h3>\n        <p class=\"p3\">\n          Ionic Angular apps ship with the same tooling and APIs as regular Angular CLI\n          projects.\n        </p>\n      </article>\n      <article>\n        <img src=\"/img/angular/intro/2@2x.png\" alt=\"\" width=\"48\" height=\"48\" />\n        <h3>Completely cross-platform</h3>\n        <p class=\"p3\">\n          Capacitor is the official cross-platform app runtime used to make your\n          Ionic Angular web app run natively on iOS, Android, and the Web—all from\n          the same code base.\n        </p>\n      </article>\n    </div>\n  </section>\n\n  <section class=\"container\">\n    <div id=\"components\">\n      <hgroup>\n        <h2>100+ Angular Components</h2>\n        <p class=\"p2\">\n          Angular-optimized mobile and web components for building blazing fast\n          mobile, web, and desktop apps. Ionic Angular comes with more\n          out-of-the-box controls than native, accelerating custom app design.\n        </p>\n        <ul id=\"components-list\" class=\"components-list\">\n          <li data-tab=\"card\">\n            <div class=\"icon\">\n              <svg width=\"30\" height=\"26\" viewBox=\"0 0 30 26\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n                <rect x=\"1\" y=\"1\" width=\"28\" height=\"24\" rx=\"4\" stroke=\"black\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n                <path d=\"M7 7H15\" stroke=\"black\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n                <path d=\"M7 11H21\" stroke=\"black\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n              </svg>\n            </div>\n            <div class=\"title\">\n              <span class=\"word\">Cards</span>\n              <div class=\"progress\"></div>\n            </div>\n          </li>\n          <li data-tab=\"lists\">\n            <div class=\"icon\">\n              <svg width=\"32\" height=\"22\" viewBox=\"0 0 32 22\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n                <path d=\"M8.5 20H31\" stroke=\"black\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n                <path d=\"M2 19C2.55228 19 3 19.4477 3 20C3 20.5523 2.55228 21 2 21C1.44772 21 1 20.5523 1 20C1 19.4477 1.44772 19 2 19Z\" stroke=\"black\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n                <path d=\"M8.5 11H31\" stroke=\"black\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n                <path d=\"M2 10C2.55228 10 3 10.4477 3 11C3 11.5523 2.55228 12 2 12C1.44772 12 1 11.5523 1 11C1 10.4477 1.44772 10 2 10Z\" stroke=\"black\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n                <path d=\"M8.5 2H31\" stroke=\"black\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n                <path d=\"M2 1C2.55228 1 3 1.44772 3 2C3 2.55228 2.55228 3 2 3C1.44772 3 1 2.55228 1 2C1 1.44772 1.44772 1 2 1Z\" stroke=\"black\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n              </svg>\n            </div>\n            <div class=\"title\">\n              <span class=\"word\">Lists</span>\n              <div class=\"progress\"></div>\n            </div>\n          </li>\n          <li data-tab=\"actionSheet\">\n            <div class=\"icon\">\n              <svg width=\"30\" height=\"26\" viewBox=\"0 0 30 26\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n                <path d=\"M1 1V19C1 22.3137 3.68629 25 7 25H23C26.3137 25 29 22.3137 29 19V1\" stroke=\"black\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n                <path d=\"M2 5H29\" stroke=\"black\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n                <path d=\"M6 10H14\" stroke=\"black\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n                <path d=\"M6 15H23\" stroke=\"black\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n                <path d=\"M6 20H19\" stroke=\"black\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n              </svg>\n            </div>\n            <div class=\"title\">\n              <span class=\"word\">Action Sheet</span>\n              <div class=\"progress\"></div>\n            </div>\n          </li>\n        </ul>\n      </hgroup>\n      <angular-components></angular-components>\n    </div>\n  </section>\n\n  <section class=\"container\">\n    <div id=\"native\">\n      <div class=\"wrapper\">\n        <react-capacitor></react-capacitor>\n        <hgroup>\n          <h2>Build once, run natively on iOS, Android, & the Web.</h2>\n          <p class=\"p2\">\n            Ionic Angular apps use the\n            <a class=\"highlight\" href=\"https://capacitorjs.com\">Capacitor</a> project\n            (instead of Cordova) to unlock every native API across iOS, Android,\n            Electron, and Web.\n          </p>\n          <ul id=\"native-list\" class=\"components-list\">\n            <li data-tab=\"camera\">\n              <div class=\"icon\">\n                <svg width=\"30\" height=\"26\" viewBox=\"0 0 30 26\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n                  <path d=\"M21.3633 4.951L19.5715 1.7965C19.1939 1.306 18.6763 1 18.0962 1H11.9038C11.3237 1 10.8061 1.306 10.4285 1.7965L8.63673 4.951C8.25913 5.44225 7.7725 5.8 7.19231 5.8H3.15385C2.58261 5.8 2.03477 6.05286 1.63085 6.50294C1.22692 6.95303 1 7.56348 1 8.2V22.6C1 23.2365 1.22692 23.847 1.63085 24.2971C2.03477 24.7471 2.58261 25 3.15385 25H26.8462C27.4174 25 27.9652 24.7471 28.3692 24.2971C28.7731 23.847 29 23.2365 29 22.6V8.2C29 7.56348 28.7731 6.95303 28.3692 6.50294C27.9652 6.05286 27.4174 5.8 26.8462 5.8H22.875C22.2928 5.8 21.7409 5.44225 21.3633 4.951Z\" stroke=\"black\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n                  <path d=\"M15 20C17.7614 20 20 17.7614 20 15C20 12.2386 17.7614 10 15 10C12.2386 10 10 12.2386 10 15C10 17.7614 12.2386 20 15 20Z\" stroke=\"black\" stroke-width=\"2\" stroke-miterlimit=\"10\"/>\n                  <path d=\"M6.11467 5.2625V3.75H4.49928V5.2625\" stroke=\"black\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n                </svg>\n              </div>\n              <div class=\"title\">\n                <span class=\"word\">Camera</span>\n                <div class=\"progress\"></div>\n              </div>\n            </li>\n            <li data-tab=\"notifications\">\n              <div class=\"icon\">\n                <svg width=\"30\" height=\"30\" viewBox=\"0 0 30 30\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n                  <path d=\"M27 13V23C27 26.3137 24.3137 29 21 29H7C3.68629 29 1 26.3137 1 23V9C1 5.68629 3.68629 3 7 3H17\" stroke=\"black\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n                  <circle cx=\"25\" cy=\"5\" r=\"4\" transform=\"rotate(-180 25 5)\" stroke=\"black\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n                </svg>\n              </div>\n              <div class=\"title\">\n                <span class=\"word\">Notifications</span>\n                <div class=\"progress\"></div></div>\n            </li>\n            <li data-tab=\"geolocation\">\n              <div class=\"icon\">\n                <svg width=\"26\" height=\"34\" viewBox=\"0 0 26 34\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n                  <path d=\"M13 1C6.375 1 1 5.72254 1 11.539C1 21 9 28.8375 11.9375 32.5008C12.0594 32.6554 12.2192 32.7813 12.4039 32.868C12.5886 32.9548 12.7928 33 13 33C13.2072 33 13.4115 32.9548 13.5961 32.868C13.7808 32.7813 13.9406 32.6554 14.0625 32.5008C17 28.8391 25 20.5556 25 11.539C25 5.72254 19.625 1 13 1Z\" stroke=\"black\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n                  <path d=\"M13 16.4074C15.2091 16.4074 17 14.6166 17 12.4074C17 10.1983 15.2091 8.40742 13 8.40742C10.7909 8.40742 9 10.1983 9 12.4074C9 14.6166 10.7909 16.4074 13 16.4074Z\" stroke=\"black\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n                </svg>\n              </div>\n              <div class=\"title\">\n                <span class=\"word\">Geolocation</span>\n                <div class=\"progress\"></div>\n              </div>\n            </li>\n          </ul>\n        </hgroup>\n      </div>\n    </div>\n  </section>\n\n  <section class=\"container\">\n    <div id=\"samples\">\n      <hgroup>\n        <h2>Try an Ionic Angular sample app.</h2>\n        <p class=\"p2\">\n          One of the best ways to get started and learn best practices is to\n          explore a sample app.\n        </p>\n      </hgroup>\n      <div class=\"features\">\n        <div class=\"feature\">\n          <img\n            loading=\"lazy\"\n            width=\"616\"\n            height=\"560\"\n            src=\"/img/angular/samples/0@2x.png\"\n            alt=\"iphone popup asking if app can access camera\"\n          />\n          <h3>Photo Gallery App</h3>\n          <p class=\"p3\">\n            A tour of everything Ionic Angular has to offer. Take photos with your\n            device's camera and store them permanently on the device.\n          </p>\n          <a\n            class=\"try-it\"\n            href=\"https://ionicframework.com/docs/angular/your-first-app\"\n            target=\"_blank\"\n            rel=\"noopener\"\n          >\n            Try it\n            <span class=\"arrow\"> -></span>\n          </a>\n        </div>\n        <div class=\"feature\">\n          <img\n            loading=\"lazy\"\n            width=\"616\"\n            height=\"560\"\n            src=\"/img/angular/samples/1@2x.png\"\n            alt=\"phone app screen\"\n          />\n          <h3>Spotify-like UI</h3>\n          <p class=\"p3\">\n            A music playing app, similar to Spotify. Built by Ionic community member, Simon Grimm\n          </p>\n          <a\n            class=\"try-it\"\n            href=\"https://github.com/saimon24/ionic-spotify-ui\"\n            target=\"_blank\"\n            rel=\"noopener\"\n          >\n            Try it <span class=\"arrow\"> -></span>\n          </a>\n        </div>\n        <div class=\"feature\">\n          <img\n            loading=\"lazy\"\n            width=\"616\"\n            height=\"560\"\n            src=\"/img/angular/samples/2@2x.png\"\n            alt=\"phone app displaying list\"\n          />\n          <h3>Contact Apps</h3>\n          <p class=\"p3\">\n            A starter project from the folks over at <a href=\"https://ionicthemes.com\" target=\"_blank\">Ionic Themes</a>\n          </p>\n          <a\n            class=\"try-it\"\n            href=\"https://github.com/ionicthemes/ionic5-starter-app-tutorial\"\n            target=\"_blank\"\n            rel=\"noopener\"\n          >\n            Try it\n            <span class=\"arrow\"> -></span>\n          </a>\n        </div>\n      </div>\n    </div>\n  </section>\n\n  <section class=\"container\">\n    <div id=\"enterprise\">\n      <div class=\"graphics\">\n        <img\n          src=\"/img/angular/enterprise/0@2x.png\"\n          loading=\"lazy\"\n          width=\"568\"\n          height=\"568\"\n          alt=\"Ionic Angular for Enterprise\"\n        />\n      </div>\n      <hgroup>\n        <h2>Ionic Angular for Enterprise.</h2>\n        <p class=\"p2\">\n          Enterprise-ready integrations, tools, and expert support for you next\n          mission-critical app project. Unlock powerful features like secure\n          identity, encrypted offline storage, cloud builds, and real-time hot\n          code app deployments..\n        </p>\n        <a\n          class=\"primary-btn\"\n          id=\"ionic-angular-enterprise-cta\"\n          href=\"https://ionicframework.com/enterprise\"\n          target=\"_blank\"\n        >\n          Learn more\n          <span class=\"arrow\"> -></span>\n        </a>\n      </hgroup>\n    </div>\n  </section>\n\n  <section class=\"container\">\n    <div id=\"why\">\n      <hgroup>\n        <h2>Why build with Ionic Angular?</h2>\n        <p class=\"p2\">\n          Ionic Angular offers Angular-optimized mobile and web components for building\n          blazing fast mobile, web, and desktop apps.\n        </p>\n      </hgroup>\n      <div class=\"features\">\n        <div class=\"feature\">\n          <div class=\"image\">\n            <img\n              src=\"/img/angular/why/0@2x.png\"\n              loading=\"lazy\"\n              width=\"56\"\n              height=\"56\"\n              alt=\"angular icon\"\n            />\n          </div>\n\n          <h3>It's just Angular</h3>\n          <p class=\"p3\">\n            Ionic Angular combines the core Ionic developer experience with the\n            tooling and APIs that are tailored to Angular Developers.\n          </p>\n        </div>\n        <div class=\"feature\">\n          <div class=\"image\">\n            <img\n              src=\"/img/angular/why/1@2x.png\"\n              loading=\"lazy\"\n              width=\"56\"\n              height=\"56\"\n              alt=\"pwa icon\"\n            />\n          </div>\n\n          <h3>First-class PWA</h3>\n          <p class=\"p3\">\n            Ionic Angular components work anywhere, including iOS, Android, and\n            PWAs. Build native apps without ever leaving the Web.\n          </p>\n        </div>\n        <div class=\"feature\">\n          <div class=\"image\">\n            <img\n              src=\"/img/angular/why/2@2x.png\"\n              loading=\"lazy\"\n              width=\"56\"\n              height=\"52\"\n              alt=\"browser icon\"\n            />\n          </div>\n\n          <h3>Build in the Browser</h3>\n          <p class=\"p3\">\n            First-class browser development support means you can build a\n            significant portion of your app right in Chrome, then integrate and\n            test on mobile devices when ready.\n          </p>\n        </div>\n        <div class=\"feature\">\n          <div class=\"image\">\n            <img\n              src=\"/img/angular/why/3@2x.png\"\n              loading=\"lazy\"\n              width=\"50\"\n              height=\"54\"\n              alt=\"building icon\"\n            />\n          </div>\n\n          <h3>Enterprise-ready</h3>\n          <p class=\"p3\">\n            Ionic Angular is supported by a company dedicated to enterprise app dev,\n            with supported native plugins, DevOps, expert services, and more.\n          </p>\n        </div>\n      </div>\n    </div>\n  </section>\n\n\n  <!-- <div class=\"container\" id=\"accolades\">                                                                                                                                                  -->\n  <!--   <h2>What People are Saying</h2>                                                                                                                                                       -->\n  <!--   <p class=\"p2\">Don’t just take our word for it.</p>                                                                                                                                  -->\n  <!--   <div id=\"tweets\" class=\"tweets\">                                                                                                                                                      -->\n  <!--     <div id=\"tweet-share\" class=\"tweet-share tweet\">                                                                                                                                    -->\n  <!--       <h4>Love Ionic Angular?</h4>                                                                                                                                                      -->\n  <!--       <a                                                                                                                                                                                -->\n  <!--         target=\"_blank\"                                                                                                                                                                 -->\n  <!--         href=\"http://twitter.com/share?text=Check out Ionic Angular to build native mobile and Progressive Web Apps with Vue&url=https://ionicframework.com/angular&via=ionicframework\" -->\n  <!--       >                                                                                                                                                                                 -->\n  <!--         Let us know on Twitter                                                                                                                                                          -->\n  <!--       </a>                                                                                                                                                                              -->\n  <!--     </div>                                                                                                                                                                              -->\n  <!--   </div>                                                                                                                                                                                -->\n  <!-- </div>                                                                                                                                                                                  -->\n\n  <section class=\"container\">\n    <div id=\"start\">\n      <div class=\"wrapper\">\n        <div class=\"inside-wrapper\">\n          <hgroup>\n            <h2>Get Started with Ionic Angular</h2>\n            <p class=\"p2\">Start building better apps faster, all in Angular</p>\n          </hgroup>\n          <div class=\"code\">\n            <pre><code>\nnpm install -g @ionic/cli\nionic start --type=angular\n      </code></pre>\n          </div>\n        </div>\n      </div>\n    </div>\n  </section>\n</main>\n\n{% include '_includes/footer.html' %}\n\n{% endblock %}\n\n{% block scripts %}\n<script>\n  const exampleRotation = (listId, stencilComponentName) => {\n    const $stencilComponent = document.getElementsByTagName(stencilComponentName)[0];\n    const $list = document.querySelector(`#${listId}`);\n    const animationDuration = 5000;\n    let animation,\n        $currentlySelected;\n\n    const select = ($el, stayPut) => {\n      if (animation) {\n        animation.finish();\n      }\n      $stencilComponent.setAttribute('tab', $el.dataset['tab']);\n      $currentlySelected?.classList.remove('selected');\n      $el.classList.add('selected');\n      $currentlySelected = $el;\n      if (!stayPut) {\n        animate($el.querySelector('.progress'))\n      }\n    };\n\n    const animate = $bar => {\n      animation = $bar.animate(\n        [\n          { transform: 'scale(0, 1)' },\n          { transform: 'scale(1, 1)' }\n        ], {\n          fill: 'forwards',\n          duration: animationDuration\n        })\n      animation.finished.then((a) => {\n        // when done animating, select the next demo\n        if ($currentlySelected.nextElementSibling) {\n          select($currentlySelected.nextElementSibling);\n        } else {\n          select($list.querySelector('li:first-child'));\n        }\n      })\n    };\n\n    const pause = () => animation.pause();\n    const play = () => animation.play();\n\n    const initiate = () => {\n      $list.querySelectorAll('li').forEach($li => {\n        $li.onclick = ev => {\n          animation.cancel();\n          select(ev.currentTarget, true);\n          // if the user clicks, we stop animating\n          $list.removeEventListener('mouseenter', pause);\n          $stencilComponent.removeEventListener('mouseenter', pause);\n          $list.removeEventListener('mouseleave', play);\n          $stencilComponent.removeEventListener('mouseleave', play);\n        }\n      });\n\n      // pause the animation if the user is interacting w/ the demo\n      $list.addEventListener('mouseenter', pause);\n      $stencilComponent.addEventListener('mouseenter', pause);\n      $list.addEventListener('mouseleave', play);\n      $stencilComponent.addEventListener('mouseleave', play);\n\n      if (!$currentlySelected) {\n        select($list.querySelector(' li:first-child'));\n      }\n    }\n\n    initiate();\n  };\n  exampleRotation('components-list', 'angular-components');\n  exampleRotation('native-list', 'react-capacitor');\n\n  const tweets = [\n    {\n      author_username: \"maxedapps\",\n      author_name: \"Maximilian Schwarzmüller\",\n      date: \"November 2020\",\n      avatar: \"/img/angular/twitter-profile-pictures/maxedapps.jpg\",\n      link: \"https://twitter.com/maxedapps/status/1323298624147726337\",\n      content: `It's awesome! Building cross-platform apps has always been amazing with Ionic (and Capacitor) but Angular being Vue, it's of course super smooth and straightforward. You and the entire team really did an amazing job with Ionic/ Capacitor as well as the Vue bindings for Ionic.`,\n    },\n    {\n      author_username: \"IT_MikeS\",\n      author_name: \"Mike Summerfeldt\",\n      date: \"October 2020\",\n      avatar: \"/img/angular/twitter-profile-pictures/IT_MikeS.jpg\",\n      link: \"https://twitter.com/IT_MikeS/status/1313638008374132736\",\n      content: `For me it's the sheer flexibility of angular. I love react because of how small it can be, and I love angular because it's ecosystem just works, vue does both so I choose vue. Ionic Angular is the icing on top of this custom cake, where I can use robust ui elements with it all. 🎂🍰🍮`,\n    },\n    {\n      author_username: \"sarah_edo\",\n      author_name: \"Sarah Drasner\",\n      date: \"November 2020\",\n      avatar: \"/img/angular/twitter-profile-pictures/sarah_edo.jpg\",\n      link: \"https://twitter.com/sarah_edo/status/1325477797670789120\",\n      content: `I feel like I can be productive today! Whew. Thinking about learning some Ionic and Angular for native development, checking out these great examples by @dlodeprojuicer.`,\n    },\n    {\n      author_username: \"26th_edmund\",\n      author_name: \"Edmund Ekott\",\n      date: \"November 2020\",\n      avatar: \"/img/angular/twitter-profile-pictures/26th_edmund.jpg\",\n      link: \"https://twitter.com/26th_edmund/status/1329198301007269888\",\n      content: `Ionic Angular!!!!!! 🔥🔥🔥🔥🔥🔥`,\n    },\n    {\n      author_username: \"olidotjpg\",\n      author_name: \"Oli.jpg\",\n      date: \"October 2020\",\n      avatar: \"/img/angular/twitter-profile-pictures/olidot.jpg\",\n      link: \"https://twitter.com/olidotjpg/status/1320745944149839876\",\n      content: `Seriously, I can't get over how amazing @Ionicframework is for making mobile apps. The workflow is so damn smooth and feels so gooood`,\n    },\n  ];\n\n  const tweetsList = $(\"#tweets\");\n  tweets.forEach((t) =>\n    $(`\n  <div class=\"tweet\">\n    <div class=\"tweet-author\">\n      <div class=\"tweet-author-avatar\">\n        <img src=\"${t.avatar}\" loading=\"lazy\"/>\n      </div>\n      <div class=\"tweet-author-info\">\n        <h3><a href=\"https://twitter.com/${t.author_username}\">${t.author_name}</a></h3>\n        <h5><a href=\"https://twitter.com/${t.author_username}\">@${t.author_username}</a></h5>\n      </div>\n      <div class=\"tweet-twitter-icon\"></div>\n    </div>\n    <div class=\"tweet-content\">\n      ${t.content}\n    </div>\n    <div class=\"tweet-footer\">\n      <div class=\"tweet-date\">${t.date}</div>\n      <div class=\"tweet-view\"><a target=\"_blank\" href=\"${t.link}\">View Tweet</a></div>\n    </div>\n  </div>\n  `).insertBefore(\"#tweet-share\")\n  );\n</script>\n{% endblock %}\n"
  },
  {
    "path": "server/pages/contributors.html",
    "content": "{% extends '_layouts/base.html' %}\n{% set id = 'contributors' %}\n{% set title = \"Apply Now to Become an Ionic Developer or Thought Leader\" %}\n{% set meta_image = 'https://ionicframework.com/img/meta/ionic-framework-og.png'%}\n{% set header_style = 'transparent light' %}\n{% set stickyNav = true %}\n\n{% block main %}\n\n<main>\n  <section class=\"cta\">\n    <div class=\"container\">\n      <h1><span class=\"fallback\">Become a contributor</span><span class=\"typed\"></span> for Ionic</h1>\n      <p>Our community is full of thought leaders and developers doing amazing things on Ionic. Join us by sharing your story.</p>\n      <div class=\"cta__buttons\">\n        <a href=\"#\" id=\"apply-cta\" class=\"btn\">Apply now</a>\n      </div>\n    </div>\n  </section>\n\n  <section class=\"key-benefits\">\n    <div class=\"container\">\n      <ul class=\"feature-list\">\n        <li>\n          <div class=\"feature\">\n            <div class=\"feature__icon talk\"></div>\n            <div class=\"feature__text\">\n              <strong>Host a live talk</strong>\n              <p>Join us as a guest speaker on for one of our upcoming live talks. Help share your experience and voice with the community on one of our hot topics.</p>\n            </div>\n          </div>\n        </li>\n        <li>\n          <div class=\"feature\">\n            <div class=\"feature__icon story\"></div>\n            <div class=\"feature__text\">\n              <strong>Tell your customer story</strong>\n              <p>Interested in joining us for a two minute Q&A interview style video? Tell your story and how Ionic has set your organization up for success in mobile.</p>\n            </div>\n          </div>\n        </li>\n        <li>\n          <div class=\"feature\">\n            <div class=\"feature__icon blog\"></div>\n            <div class=\"feature__text\">\n              <strong>Be a guest blogger</strong>\n              <p>Some of our best content comes from our community members. We want to enable you to contribute to our blog, and weigh in on some of the hottest Ionic topics and trends.</p>\n            </div>\n          </div>\n        </li>\n      </ul>\n    </div>\n  </section>\n\n  <section class=\"topics\">\n    <div class=\"container\">\n      <hgroup>\n        <h1>Trending topics</h1>\n        <p>These are some of the most talked about topics in the industry. Select one of these topics and we can work together to share your views.</p>\n      </hgroup>\n    </div>\n    <svg class=\"topics__animation\"></svg>\n  </section>\n\n  <section class=\"quotes\">\n    <div class=\"quotes__quote morony\">\n      <div class=\"quotes__content\">\n        <a href=\"https://www.joshmorony.com/\">\n          <div class=\"quotes__avatar morony\" title=\"Josh Morony\"></div>\n          <blockquote>\n            <p>&ldquo;Writing content about Ionic has generated enough interest in my website and personal brand that I am now able to work full-time writing content on my blog.&rdquo;</p>\n            <small>Josh Morony <span>Developer, teacher, entrepreneur</span></small>\n          </blockquote>\n        </a>\n      </div>\n    </div>\n    <div class=\"quotes__quote verganara\">\n      <div class=\"quotes__content\">\n        <a href=\"https://jsmobiledev.com/\">\n          <div class=\"quotes__avatar verganara\" title=\"Jorge Vergara\"></div>\n          <blockquote>\n            <p>&ldquo;During 2017/18 I've had my articles on the Ionic blog and shared on their newsletter. The exposure led to over 1,500 new subscribers and over $5,000 in book sales.&rdquo;</p>\n            <small>Jorge Vergara <span>Developer, teacher, entrepreneur</span></small>\n          </blockquote>\n        </a>\n      </div>\n    </div>\n  </section>\n\n  <section class=\"apply\">\n    <div class=\"container\">\n      <div class=\"apply__form hubspot-override\">\n        <h2>Apply to contribute</h2>\n        <!--[if lte IE 8]>\n        <script charset=\"utf-8\" type=\"text/javascript\" src=\"//js.hsforms.net/forms/v2-legacy.js\"></script>\n        <![endif]-->\n        <script charset=\"utf-8\" type=\"text/javascript\" src=\"//js.hsforms.net/forms/v2.js\"></script>\n        <script>\n          hbspt.forms.create({\n        \tportalId: \"3776657\",\n        \tformId: \"42616a34-422d-444d-be90-20f18073516a\",\n          css: ''\n        });\n        </script>\n      </div>\n      <div class=\"apply__benefits\">\n        <h4>Why contribute with us?</h4>\n        <ul class=\"benefit-list\">\n          <li class=\"benefit-list__item\">\n            <h5>Become a thought leader</h5>\n            <p>Help us share your story with our community and expand your reach with fellow Ionic developers.</p>\n          </li>\n          <li class=\"benefit-list__item\">\n            <h5>Maximize your reach</h5>\n            <p>We will post on our blog and resources sections and link your content back to your site, maximizing visibility and value for your brand and ours.</p>\n          </li>\n          <li class=\"benefit-list__item\">\n            <h5>Help others find success</h5>\n            <p>Give back and empower other developers to find similar success based on your experiences.</p>\n          </li>\n        </ul>\n      </div>\n    </div>\n  </section>\n\n{% endblock %}\n\n{% block scripts %}\n<script src=\"https://cdnjs.cloudflare.com/ajax/libs/d3/4.13.0/d3.min.js\"></script>\n<script>\n  (function() {\n\n    // typed animation\n    var isTyping = true;\n    document.querySelector('.fallback').style.display = \"none\";\n    var typed = new Typed('.typed', {\n      strings: [\"Become a contributor\", \"Host a talk\", \"Tell your story\", \"Be a blogger\"],\n      typeSpeed: 50,\n      backSpeed: 20,\n      loop: true,\n      backDelay: 2400,\n      autoInsertCss: false,\n    });\n\n    // stop typed when it's scrolled out of view\n    window.addEventListener('scroll', function(){\n      if(window.scrollY > 560){\n        stopTyped();\n      } else if(window.scrollY < 560){\n        startTyped();\n      }\n    });\n\n    function startTyped () {\n      if (isTyping) return;\n      isTyping = true;\n      typed.start();\n    }\n\n    function stopTyped () {\n      if (!isTyping) return;\n      isTyping = false;\n      typed.stop();\n      clearInterval(typed.timeout);\n    }\n\n\n\n    // topics animation\n    var topicsStage = document.querySelector('.topics')\n\n    var isIE = navigator.userAgent.match(/Trident\\/7\\./);\n    var isEdge = !isIE && !!window.StyleMedia;\n    if (isIE || isEdge) {\n      topicsStage.classList.add('image-fallback')\n      return;\n    }\n\n    var width = 600;\n    var height = topicsStage.clientHeight;\n    var svg = d3.select('.topics__animation')\n      .attr(\"width\", width)\n      .attr(\"height\", height);\n\n    var defs = svg.append(\"defs\");\n\n    var mask = defs.append(\"mask\")\n      .attr(\"id\", \"mask\");\n\n    var gradient1 = defs.append(\"linearGradient\")\n       .attr(\"id\", \"bgGradient\")\n       .attr(\"x1\", \"0%\")\n       .attr(\"x2\", \"0%\")\n       .attr(\"y1\", \"0%\")\n       .attr(\"y2\", \"100%\");\n\n    gradient1.append(\"stop\")\n       .attr(\"offset\", \"0%\")\n       .attr(\"stop-color\", \"#51ECAA\")\n       .attr(\"stop-opacity\", 1);\n\n   gradient1.append(\"stop\")\n      .attr(\"offset\", \"50%\")\n      .attr(\"stop-color\", \"#2F9DFF\")\n      .attr(\"stop-opacity\", 1);\n\n    gradient1.append(\"stop\")\n      .attr(\"offset\", \"100%\")\n      .attr(\"stop-color\", \"#9737DC\")\n      .attr(\"stop-opacity\", 1);\n\n    var gradient2 = defs.append(\"linearGradient\")\n       .attr(\"id\", \"circleGradient\")\n       .attr(\"x1\", \"0%\")\n       .attr(\"x2\", \"100%\")\n       .attr(\"y1\", \"0%\")\n       .attr(\"y2\", \"100%\");\n\n    gradient2.append(\"stop\")\n       .attr(\"offset\", \"0%\")\n       .attr(\"stop-color\", \"#fff\")\n       .attr(\"stop-opacity\", 0.3);\n\n    gradient2.append(\"stop\")\n      .attr(\"offset\", \"70%\")\n      .attr(\"stop-color\", \"#fff\")\n      .attr(\"stop-opacity\", 1);\n\n    svg.append('rect')\n      .attr('y', 0)\n      .attr('x', 0)\n      .attr('height', height)\n      .attr('width', width)\n      .style('fill', 'url(#bgGradient)')\n      .attr('mask', 'url(#mask)')\n\n    var nodeLayer = mask.append(\"g\").selectAll(\".node\");\n    var textLayer = svg.append(\"g\").selectAll(\".text\");\n\n    var nodeId = 0;\n    var topics = [\n      { name: 'Web Components', radius: 120 },\n      { name: 'Why Ionic?', radius: 80 },\n      { name: 'PWAs', radius: 60 },\n      { name: 'Service Workers', radius: 100 },\n      { name: 'Performance Techniques', radius: 140 },\n      { name: 'Electron', radius: 80 },\n      { name: 'Native Integration', radius: 120 },\n      { name: 'New Web APIs', radius: 140 },\n      { name: 'Desktop', radius: 80 }\n    ];\n\n    var yScale = d3.scaleLinear().domain([0, topics.length]).range([-200, height + 200]);\n\n    var nodes = topics.map(function(o, i){\n      var y = yScale(i);\n      return {\n        id: nodeId++,\n        name: o.name,\n        radius: o.radius,\n        yPos: y,\n        y: y\n      }\n    })\n\n    var simulation = d3.forceSimulation(nodes)\n      .force('charge', d3.forceManyBody().strength(5))\n      .force('y', d3.forceY().y(function(d) {\n        return d.yPos;\n      }))\n      .force('x', d3.forceX().x(function(d) {\n        return (width / 2);\n      }))\n      .force('collision', d3.forceCollide().radius(function(d) {\n        return d.radius + 10;\n      }).strength(0.7))\n      .stop();\n\n    for (var i = 0; i < 20; i++) {\n      simulation.tick();\n    }\n\n    var topicsCtx = rafContext(function() {\n\n      for (var i = 0; i < nodes.length; i++) {\n        nodes[i].yPos -= 0.75;\n        if (nodes[i].y < -300) {\n          var resetNode = nodes.splice(i, 1)[0];\n          var y = height + 300;\n          var x = width/2 * Math.random();\n          nodes.push({\n            id: nodeId++,\n            name: resetNode.name,\n            radius: resetNode.radius,\n            yPos: y,\n            y: y,\n            x: x,\n            vy: y,\n            vx: x\n          })\n        }\n      }\n\n      nodeLayer = nodeLayer.data(nodes, function(d) { return d.id;});\n      nodeLayer.exit().remove();\n      nodeLayer = nodeLayer.enter()\n        .append(\"circle\")\n        .attr('class', 'node')\n        .style('fill', 'url(#circleGradient)')\n        // .style('fill', '#fff')\n        .attr('r', function(d) {\n          return d.radius;\n        })\n        .merge(nodeLayer)\n        .attr('cx', function(d) {\n          return d.x;\n        })\n        .attr('cy', function(d) {\n          return d.y;\n        })\n\n      textLayer = textLayer.data(nodes);\n      textLayer.exit().remove();\n      textLayer = textLayer.enter()\n        .append(\"text\")\n        .attr('class', 'text')\n        .merge(textLayer)\n        .attr(\"transform\", function(d) { return \"translate(\" + d.x + \",\" + d.y + \")\"; })\n        .attr('dy', 5)\n        .attr(\"text-anchor\", \"middle\")\n        .text(function(d) {\n          return d.name;\n        });\n\n      simulation\n        .nodes(nodes)\n        .alpha(0.1)\n        .restart();\n\n    });\n\n    initAnimation(topicsStage, topicsCtx, {breakpoint: 1});\n\n\n    // scroll to apply\n    var applyCta = document.querySelector('#apply-cta');\n    applyCta.addEventListener('click', function(e){\n      e.preventDefault();\n      stopTyped();\n      topicsCtx.stop();\n      scrollToEl('.apply__form');\n    });\n\n    function getRandomInt(min, max) {\n      return Math.floor(Math.random() * (max - min + 1)) + min;\n    }\n  })();\n</script>\n{% endblock %}\n"
  },
  {
    "path": "server/pages/creator/index.html",
    "content": "{% set page = \"home\" %}\n{% set showBuildNowSignup = true %}\n{% extends \"_layouts/creator.html\" %}\n\n{% block title %}Simple App Creator to Go Beyond Prototyping - Ionic Creator{% endblock %}\n\n{% block body_id %}page-creator{% endblock %}\n\n{% block main %}\n<section class=\"hero\">\n  <hgroup class=\"container\">\n    <h1>\n      Creator is now closed to new signups\n    </h1>\n    <h2><a href=\"https://ionic.io\" class=\"btn blue fill\"><i class=\"icon ion-information\"></i>Learn about our latest offerings on ionic.io</a></h2>\n</section>\n<div class=\"container used-by\">\n  <p>Used by these awesome companies</p>\n  <img src=\"/img/pro/creator/comp-logos.png\">\n</div>\n<section class=\"how-creator-works\">\n  <div class=\"container\">\n    <hgroup>\n      <h3>Here’s how Creator works</h3>\n      <p>\n        <strong>Creator</strong> makes building real mobile apps dead-simple.\n      </p>\n    </hgroup>\n    <div class=\"step drag-n-drop\">\n      <h4>Drag and drop components</h4>\n      <p>\n        Visually build your app by dragging in pre-made mobile components into\n        the device emulator.\n      </p>\n    </div>\n    <div class=\"step preview\">\n      <h4>Preview and share</h4>\n      <p>\n        Preview and interact with your projects live on your devices. Share with\n        colleagues and clients alike.\n      </p>\n    </div>\n  </div>\n</section>\n<section class=\"hero-side left tool\">\n  <div class=\"container\">\n    <h2>The simplest app <em>Creator</em> around.</h2>\n    <p>\n      Thousands of businesses across 150 countries use Creator to dramatically\n      reduce the time and cost it takes to create fully functional hybrid\n      mobile apps.\n    </p>\n    <p>\n      <em>Go beyond prototyping</em>: Add your own code, export clean,\n      standards compliant Ionic projects, and even iOS and Android builds ready to submit to the App Stores.\n    </p>\n  </div>\n</section>\n<section class=\"hero-side right dnd\">\n  <div class=\"container\">\n    <h2>As easy as drag and drop.</h2>\n    <p>\n      Click, move, and place premade mobile components onto your screen with our\n      easy-to-use drag &amp; drop technology.\n    </p>\n    <p>\n      Choose from our pack of useful and intuitive <a target=\"_blank\"\n      href=\"https://ionicframework.com/\">Ionic-powered</a> components that create\n      production-ready HTML5 when dropped into the screen.\n    </p>\n  </div>\n</section>\n<section class=\"hero-side left xplatform\">\n  <div class=\"container\">\n    <h2>Build it once. Run it anywhere.</h2>\n    <p>\n      Your time is precious. <strong>Creator</strong> has your back. Spend more\n      time on building a great app experience, and less time managing separate\n      code bases and devices.\n    </p>\n    <p>\n      Export cross-platform mobile apps that look, feel, and perform amazing\n      across all modern phones and devices.\n    </p>\n    <p>\n      <img class=\"platforms\" src=\"/img/pro/creator/platforms.png\" alt=\"platforms\" />\n    </p>\n  </div>\n</section>\n<section class=\"hero-side right teams\">\n  <div class=\"container\">\n    <h2>Share projects. Collect feedback. Iterate. Repeat.</h2>\n    <p>\n      Good projects deserve to be shared, to be criticized, and to be refined.\n      Save and access them anywhere from your phone and share with team members,\n      developers, and designers alike.\n    </p>\n    <p>\n      Present your live previews to stakeholders and clients for easier testing\n      and feedback.\n    </p>\n  </div>\n</section>\n<section class=\"hero-side left inline-code-editing\">\n  <div class=\"container\">\n    <h2>Code without ever leaving Creator</h2>\n    <p>\n      With a fully integrated code editor inside Creator, you don't need a local\n      development environment to add custom dynamic functionality to your\n      projects.\n    </p>\n    <p>\n      One-Click Addons enable you to include popular tools and services like\n      Google Maps, Analytics and database solutions.\n    </p>\n  </div>\n</section>\n<section class=\"hero-center creator-app\">\n  <div class=\"top\">\n    <hgroup class=\"container\">\n      <h2>Preview your projects live on your device. From anywhere.</h2>\n      <p>\n        With the <strong>Creator App</strong> you can interact with your\n        projects on real devices, at any time, from anywhere.\n      </p>\n    </hgroup>\n  </div>\n  <div class=\"bottom\">\n    <div class=\"container\">\n      <p>Download the <strong>Creator App</strong> free today!</p>\n      <a class=\"btn app-store\"\n         href=\"https://itunes.apple.com/us/app/ionic-creator/id1055373342?mt=8\"\n         id=\"btn-products-creator-download-ios\"\n         target=\"_blank\"></a>\n      <a class=\"btn google-play\"\n         href=\"https://play.google.com/store/apps/details?id=io.ionic.creator\"\n         id=\"btn-products-creator-download-android\"\n         target=\"_blank\"></a>\n    </div>\n  </div>\n</section>\n\n{# <pre><code>{{ data | dump(2) }}</code></pre> #}\n{% endblock %}\n"
  },
  {
    "path": "server/pages/creator/support.html",
    "content": "{% set page = \"support\" %}\n{% extends \"_layouts/creator.html\" %}\n\n{% block title %}Ionic Creator - Support{% endblock %}\n\n{% block main %}\n<hgroup class=\"preserver\">\n  <h1>Help and Support.</h1>\n  <p>Need some advice? Found a bug? We're here to help.</p>\n  <div class=\"btns\">\n    <a href=\"mailto:help@usecreator.com?subject=Help with Creator\" class=\"btn green fill\">\n      <i class=\"icon ion-ios-paperplane-outline\"></i>\n      Email us your questions\n    </a>\n    <a href=\"https://ionic.zendesk.com/hc/en-us/requests/new?ticket_form_id=633568\" class=\"btn blue fill\" target=\"_blank\">\n      <i class=\"icon ion-help-buoy\"></i>\n      Submit a request\n    </a>\n  </div>\n</hgroup>\n<div class=\"container brody\">\n  <dl>\n    <dt>Documentation</dt>\n    <dd>\n      For specific questions about the Creator software, make sure to check out\n      our official <a href=\"http://docs.usecreator.com\">Documentation</a> page. We\n      have plenty of walkthroughs, breakdowns, tutorials, and other information\n      there to help you better understand how to use the tool. If you feel\n      there’s something missing from the Docs, please submit an official\n      request for it <a href=\"\">here</a>.\n    </dd>\n    <dt>Email support</dt>\n    <dd>\n      Have a question about our plans, or think you found a bug? Shoot us an\n      email at <a href=\"mailto:help@usecreator.com\">help@usecreator.com</a>. We\n      typically respond within 48 hours.\n    </dd>\n    <dt>Get social with us</dt>\n    <dd>\n      We’re active on Twitter mainly, so if you feel inclined to tweet, get at\n      us <a href=\"https://twitter.com/IonicCreator\" target=\"_blank\"\n      >@IonicCreator</a>! We also have a community <a target=\"_blank\"\n      href=\"http://forum.ionicframework.com/\">Forum</a>, where you can interact\n      and ask questions with other Creator users.\n    </dd>\n  </dl>\n</div>\n\n<div class=\"tail ghost\">\n  <hgroup class=\"container\">\n    <h2>Remember to check out our Docs!</h2>\n    <p>\n      Offical Documentations can be found\n      <a href=\"http://docs.usecreator.com\">here</a>.\n    </p>\n  </hgroup>\n</div>\n{% endblock %}\n"
  },
  {
    "path": "server/pages/developers.html",
    "content": "{% extends \"_layouts/base.html\" %}\n{% set id = 'developers' %}\n{% set title = 'DevOps: Ionic Framework Components and Ionic Appflow Suite' %}\n{% set meta_description = \"Documentation for hybrid app development for cross platform deliverability while providing the native app experience. Our documentation helps you kick off your mobile development strategy.\" %}\n{% set cssPath = 'developers' %}\n{% set stickyNav = true %}\n\n{% block main %}\n\n<div class=\"cta gradient\">\n  <hgroup class=\"container center\">\n    <h1>Documentation</h1>\n    <p>Choose an Ionic product below to view documentation and resources</p>\n  </hgroup>\n</div>\n\n<section class=\"container primary\">\n  <div class=\"items\">\n    <a href=\"/docs/v2/\" class=\"framework\">\n      <hgroup>\n        <h2>Ionic Framework</h2>\n        <p>\n          Browse Ionic Framework components, api, plugins, theming, and CLI\n          documentation and guides.\n        </p>\n      </hgroup>\n    </a>\n    <a href=\"/docs/appflow\" class=\"platform\">\n      <hgroup>\n        <h2>Ionic Appflow</h2>\n        <p>\n          Get the most out of Ionic Appflow, Ionic's suite of powerful app development\n          features for professional developers.\n        </p>\n      </hgroup>\n    </a>\n  </div>\n</section>\n\n{% endblock %}\n"
  },
  {
    "path": "server/pages/ds.html",
    "content": "{% extends \"_layouts/base.html\" %}\n{% set id = 'ds' %}\n{% set title = 'Ionic Design System' %}\n\n\n{% macro demonstrate(code) %}\n{{code | safe}}\n<pre><code>{{code | escape }}</pre></code>\n{% endmacro %}\n\n{% block main %}\n<div class=\"cta gradient\" >\n  <div class=\"container\">\n    <hgroup>\n      <h1>Design System</h1>\n      <p>A collection of design patterns used on this site</p>\n    </hgroup>\n  </div>\n</div>\n\n<main class=\"container\">\n  <hubspot-form form-id=\"84157001-6990-455e-8672-cb0d936a2226\"></hubspot-form>\n  <h1>Buttons</h1>\n  {{demonstrate('<button class=\"btn\">Basic Button</button>')}}\n  {{demonstrate('<a class=\"btn\">Basic Link Button</a>')}}\n  {{demonstrate('<a class=\"btn outline\">Outline Button</a>')}}\n  {{demonstrate('<a class=\"btn outline faded\">Outline faded Button</a>')}}\n  {{demonstrate('<a class=\"btn btn-primary\">Primary Button</a>')}}\n  {{demonstrate('<a class=\"btn btn-primary outline\">Primary Outline Button</a>')}}\n  {{demonstrate('<a class=\"btn red\">Red Button</a>')}}\n  {{demonstrate('<a class=\"btn light\">Light Button</a>')}}\n  {{demonstrate('<a class=\"btn navy\">Navy Button</a>')}}\n  {{demonstrate('<a class=\"btn green\">Green Button</a>')}}\n  {{demonstrate('<a class=\"btn white\">White Button</a>')}}\n  {{demonstrate('<a class=\"btn White outline\">White Outline Button</a>')}}\n  {{demonstrate('<a class=\"btn grey\">Grey Button</a>')}}\n  {{demonstrate('<a class=\"btn light-purple\">Light Purple Button</a>')}}\n  {{demonstrate('<a class=\"btn light-purple outline\">Light Purple Outline Button</a>')}}\n  {{demonstrate('<a class=\"btn dark\">Dark Button</a>')}}\n  {{demonstrate('<a class=\"btn dark-pink\">Dark Pink Button</a>')}}\n  {{demonstrate('<a class=\"btn orange\">Orange Button</a>')}}\n  {{demonstrate('<a class=\"btn sm\">Small Button</a>')}}\n  {{demonstrate('<a class=\"btn rounded\">Rounded Button</a>')}}\n  {{demonstrate('<a class=\"btn rounded sm\">Rounded Small Button</a>')}}\n  {{demonstrate('<a class=\"btn uppercase\">Uppercase Button</a>')}}\n  {{demonstrate('<a class=\"btn micro\">Micro Button</a>')}}\n</main>\n{% endblock %}\n\n{% block scripts %}\n{% endblock %}\n"
  },
  {
    "path": "server/pages/early-access.html",
    "content": "{% extends \"_layouts/base.html\" %}\n{% set id = 'enterprise-training' %}\n{% set cssPath = 'enterprise/training' %} \n{% set header_style = 'transparent light' %}\n\n{% block main %}\n\n<div class=\"banner\" >\n  <hgroup class=\"container\">\n    <h1>Ionic Early Access Program</h1>\n    <p>\n      Help us change the way native mobile development gets done.\n    </p>\n  </hgroup>\n</div>\n\n<main class=\"container\">\n  <p>\n    Are you part of a company building native mobile apps that wishes they could ship faster? \n    Ionic is currently testing <a href=\"https://ionicframework.com/blog/new-early-access-program-for-extending-native-apps-with-the-web/\" target=\"_blank\">a new approach</a> that brings the best aspects of web development \n    to your native mobile apps.\n  </p>\n  <p>\n    Sign up for our limited early access program and one of our team members will be in touch \n    with you about taking native mobile app development to the next level.\n  </p>\n</main>\n\n<aside class=\"container\">\n  <h3>Ready to get started? <i>Let's chat.</i></h3>\n  <div class=\"card\">\n    <script \n      charset=\"utf-8\" \n      type=\"text/javascript\" \n      src=\"//js.hsforms.net/forms/v2.js\"></script>\n    <script>\n      hbspt.forms.create({ \n        portalId: '3776657',\n        formId: '05d9d0fa-4225-4a1e-82e6-b8847b2b9d44'\n      });\n    </script>\n  </div>\n</aside>\n\n{% endblock %}\n\n{% block scripts %}\n<script>\n   /* Replace 'APP_ID' with your app ID */\n   window.intercomSettings = {\n    app_id: 'm0la1vjm'\n};\n   /* Replace 'APP_ID' with your app ID */\n   (function(){var w=window;var ic=w.Intercom;if(typeof ic===\"function\"){\n     ic('reattach_activator');ic('update',intercomSettings);}else{var\n     d=document;var i=function(){i.c(arguments)};i.q=[];i.c=function(args)\n     {i.q.push(args)};w.Intercom=i;function l(){var s=d.createElement('script');\n     s.type='text/javascript';s.async=true;\n     s.src='https://widget.intercom.io/widget/APP_ID';\n     var x=d.getElementsByTagName('script') [0];x.parentNode.insertBefore(s,x);\n     }if(w.attachEvent){w.attachEvent('onload',l);}else{\n       w.addEventListener('load',l,false);}}})()\n</script>\n<script type=\"text/javascript\"\n        id=\"hs-script-loader\"\n        async\n        defer\n        src=\"//js.hs-scripts.com/3776657.js\"></script>\n{% endblock %}\n"
  },
  {
    "path": "server/pages/enterprise/solutions/cross-platform.html",
    "content": "{% extends '_layouts/enterprise.html' %}\n{% set stickyNav = false %}\n{% set id = \"enterprise-solutions-cross-platform\" %}\n{% set cssPath = 'enterprise/solutions/cross-platform' %}\n\n{% block main %}\n\n<div class=\"banner\">\n  <div class=\"container\">\n    <hgroup class=\"ee-hero solution-hero solution-hero--cross-platform\">\n      <h4>Cross-Platform Development</h4>\n      <h1>One app.<br>One codebase.<br>Any platform.</h1>\n      <p>\n        Empower your web teams to build award-winning mobile and desktop\n        applications - with 100% code sharing across projects.\n      </p>\n    </hgroup>\n  </div>\n</div>\n\n<nav id=\"sticky-bar\">\n  <ul class=\"container nav\" role=\"tablist\">\n    <li><a class=\"anchor\" data-offset=\"0\" href=\"#more-than-mobile\">More Than Mobile</a></li>\n    <li><a class=\"anchor\" data-offset=\"0\" href=\"#full-native-power\">Full Native Power</a></li>\n    <li><a class=\"anchor\" data-offset=\"0\" href=\"#future-proof\">Future Proof</a></li>\n    <li><a class=\"btn sm anchor\" href=\"#get-started\">Get started</a></li>\n  </ul>\n</nav>\n\n<main>\n  <section id=\"more-than-mobile\" class=\"container left\">\n    <div class=\"content\">\n      <h2>More than just mobile</h2>\n      <p>\n        Build progressive web and native mobile apps for every major app store,\n        with one codebase. Ionic works and looks beautiful wherever it runs.\n      </p>\n      <ul>\n        <li>One codebase for iOS, Android, Electron, PWAs, and more</li>\n        <li>Work seamlessly across desktop and mobile, native and web</li>\n        <li>Apps that look and feel at home on every device</li>\n      </ul>\n    </div>\n  </section>\n\n  <section id=\"full-native-power\" class=\"container right\">\n    <div class=\"content\">\n      <h2>Full native power and performance</h2>\n      <p>\n        There’s no limit to what you can do with Ionic. Give your users the most\n        advanced on-device features and hardware-accelerated performance.\n      </p>\n      <ul>\n        <li>Access to device features with a core library of native APIs</li>\n        <li>Get full access to the native SDK when you need it</li>\n        <li>Ship mission-critical apps with confidence, backed by Ionic</li>\n      </ul>\n    </div>\n  </section>\n\n  <section id=\"future-proof\" class=\"container left\">\n    <div class=\"content\">\n      <h2>As future-proof as the web</h2>\n      <p>\n        Empower your web teams to build native mobile apps, using the tools they\n        know and love - today, tomorrow, and whatever the future brings.\n      </p>\n      <ul>\n        <li>Build with common web skills: HTML, CSS, and Javascript</li>\n        <li>Based on open web standards, not proprietary languages</li>\n        <li>Framework agnostic: works across any Angular, React, Vue…</li>\n      </ul>\n    </div>\n  </section>\n\n  {% include '_includes/promos/how-to-get-started.html' %}\n\n  <aside id=\"get-started\" >\n    <div class=\"container get-started center hubspot-override hubspot-override--large\">\n      <hgroup class=\"content\">\n        <h3>Get started with</h3>\n        <h2>Cross-platform Development</h2>\n      </hgroup>\n      <!--[if lte IE 8]>\n      <script charset=\"utf-8\"\n              type=\"text/javascript\"\n              src=\"//js.hsforms.net/forms/v2-legacy.js\"></script>\n      <![endif]-->\n      <script charset=\"utf-8\"\n              type=\"text/javascript\"\n              src=\"//js.hsforms.net/forms/v2.js\"></script>\n      <script>\n        hbspt.forms.create({\n          portalId: \"3776657\",\n        \tformId: \"b009d16a-c94b-431b-928c-199098e06df3\",\n          css: \"\"\n        });\n      </script>\n    </div>\n  </aside>\n</main>\n\n<section class=\"resources\">\n  <div class=\"container\">\n    <additional-resources page=\"cross-platform\"></additional-resources>\n  </div>\n</section>\n\n\n{% endblock %}\n\n{% block scripts %}\n<script>\n$('body').scrollspy({ target: '#sticky-bar' })\n</script>\n{% endblock %}\n"
  },
  {
    "path": "server/pages/enterprise/solutions/index.html",
    "content": "{% extends \"_layouts/enterprise.html\" %}\n{% set id = 'contact' %}\n{% set cssPath = 'enterprise/solutions/index' %}\n\n{% block main %}\n\n<hgroup class=\"container ee-hero ee-hero--centered ee-hero--wide\">\n  <h4>Ionic Enterprise Solutions</h4>\n  <h1>We help companies develop engaging digital experiences using the power of the web.</h1>\n</hgroup>\n\n<main class=\"ee-main\">\n  <section class=\"container left\">\n    <div class=\"content solution-hero solution-hero--cross-platform\">\n      <h4 class=\"ee-section__title\"></h4>\n      <h2>Cross-Platform Development</h2>\n      <p>\n        Give your web development team the flexibility and tools they need to build and ship stunning apps for any channel or platform—all using one shared codebase.\n      </p>\n      <a class=\"ee-section__cta\" href=\"/enterprise/solutions/cross-platform\">Learn more <ion-icon name=\"arrow-forward\"></ion-icon></a>\n    </div>\n  </section>\n\n  <section class=\"container right\">\n    <div class=\"content solution-hero solution-hero--design-system\">\n      <h4 class=\"ee-section__title\"></h4>\n      <h2>Design Systems</h2>\n      <p>\n        Overcome design debt, improve cross-departmental collaboration, and ensure brand consistency across projects & platforms with a dynamic design system that works with any tech stack.\n      </p>\n      <a class=\"ee-section__cta\" href=\"https://blog.ionicframework.com/build-your-next-design-system-with-web-components\">Learn more <ion-icon name=\"arrow-forward\"></ion-icon></a>\n    </div>\n  </section> \n\n  <section class=\"container left\">\n    <div class=\"content solution-hero solution-hero--pwa\">\n      <h4 class=\"ee-section__title\"></h4>\n      <h2>Progressive Web Apps</h2>\n      <p>\n        Skip the app store and embrace the power of the web by leveraging Ionic’s world-class UI library to build an optimized, reliable, and fast PWA that reaches anyone, anywhere.\n      </p>\n      <a class=\"ee-section__cta\" href=\"/pwa/toolkit\">Learn more <ion-icon name=\"arrow-forward\"></ion-icon></a>\n    </div>\n  </section>\n\n</main>\n\n\n{% endblock %}\n\n\n{% block scripts %}\n\n{% endblock %}\n"
  },
  {
    "path": "server/pages/getting-started-with-ionic-vue.html",
    "content": "{% extends '_layouts/blank.html' %}\n{% set title = \"Getting Started with Ionic Vue\" %}\n{% set meta_description = 'A live webinar covering the ins and outs of Ionic Vue, a native Vue version of Ionic Framework that makes it easy to build apps for iOS, Android, and the web as a PWA.' %}\n{% set meta_image = 'https://ionicframework.com/img/meta/vue-webinar.png'%}\n{% set themeColor = '#000715' %}\n{% set cssPath = 'getting-started-with-ionic-vue-1' %}\n{% set noGlobalStyles = true %}\n\n{% block main %}\n\n<main>\n  <section id=\"live\">\n    <div class=\"container\">\n      <a href=\"/\" class=\"logo\">\n        <svg class=\"ionic-logo\" width=\"32\" height=\"32\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n          <path d=\"M3.84 16C3.84 9.284 9.284 3.84 16 3.84c2.703 0 5.2.88 7.22 2.374a4.584 4.584 0 012.91-2.599A15.94 15.94 0 0016 0C7.163 0 0 7.163 0 16s7.163 16 16 16 16-7.163 16-16c0-1.85-.315-3.628-.894-5.285a4.565 4.565 0 01-3.438 1.85c.32 1.088.492 2.24.492 3.435 0 6.716-5.444 12.16-12.16 12.16S3.84 22.716 3.84 16z\" fill=\"#fff\"/>\n          <path d=\"M31.671 12.758a15.895 15.895 0 00-.565-2.043 4.566 4.566 0 01-3.437 1.85c.226.77.378 1.571.447 2.398a5 5 0 003.555-2.205zM16 23c3.857 0 7-3.137 7-7 0-3.857-3.137-7-7-7s-7 3.143-7 7 3.143 7 7 7zM26.5 10a3.5 3.5 0 100-7 3.5 3.5 0 000 7z\" fill=\"#fff\"/>\n        </svg>\n      </a>\n      <div class=\"embed-container\">\n        <iframe src='https://www.youtube.com/embed/o-mgzWKfMaE?autoplay=1&rel=0&mute=1' \n                frameborder='0'\n                allow='autoplay'\n                allowfullscreen></iframe>\n      </div>\n    </div>\n  </section>\n  <section id=\"top\" class=\"container\">\n    <div class=\"strip strip-0\">\n      <article>\n        <svg class=\"vue-lines\" width=\"567\" height=\"587\" viewBox=\"-32 0 567 587\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n          <path d=\"M1.19537 0L567 985L1133.38 0\" stroke=\"#B4F0D7\" stroke-width=\"2\" stroke-dasharray=\"8 16\"/>\n          <path d=\"M228.651 0L567 587L907.621 0H697.14L567.943 224.172L439.132 0\" stroke=\"#B4F0D7\" stroke-width=\"2\" stroke-dasharray=\"8 16\"/>\n          </svg>\n        <div class=\"content\">\n          <sup class=\"ui-heading-6\">\n            DATE: 11/18/20\n            <span class=\"divider\">/</span>\n            12PM CT\n          </sup>\n          <h1>Getting Started with <span class=\"highlight\">Ionic Vue</span></h1>\n          <p>Join us for a live webinar covering the ins and outs of Ionic Vue, a native Vue version of Ionic Framework that makes it easy to build apps for iOS, Android, and the web as a PWA.</p>\n        </div>\n      </article>\n      <article>\n        <svg class=\"vue-lines\" width=\"568\" height=\"587\" viewBox=\"0 0 568 587\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n          <path d=\"M-565.805 0L0 985L566.379 0\" stroke=\"#87D8B6\" stroke-width=\"2\" stroke-dasharray=\"8 16\"/>\n          <path d=\"M-338.349 0L0 587L340.621 0H130.14L0.942566 224.172L-127.868 0H-338.349Z\" stroke=\"#87D8B6\" stroke-width=\"2\" stroke-dasharray=\"8 16\"/>\n        </svg>\n        <h2>Speakers:</h2>\n        <ul>\n          <li class=\"speaker\">\n            <a href=\"https://twitter.com/maxlynch\" target=\"_blank\" rel=\"noopener\">\n              <div class=\"image-wrapper\">\n                <img srcset=\"/img/getting-started-with-ionic-vue/max-lynch.png 1x,\n                             /img/getting-started-with-ionic-vue/max-lynch@2x.png 2x\"\n                     alt=\"Max Lynch headshot\"\n                />\n              </div>\n              <div class=\"info\">\n                <h3>Max Lynch</h3>\n                <p>Ionic Co-Founder & CEO</p>\n              </div>\n            </a>\n          </li>\n          <li class=\"speaker\">\n            <a href=\"https://twitter.com/mhartington\" target=\"_blank\" rel=\"noopener\">\n              <div class=\"image-wrapper\">\n                <img\n                  srcset=\"/img/getting-started-with-ionic-vue/mike-hartington.png 1x,\n                          /img/getting-started-with-ionic-vue/mike-hartington@2x.png 2x\"\n                  alt=\"Mike Hartington headshot\"\n                />\n              </div>\n              <div class=\"info\">\n                <h3>Mike Hartington</h3>\n                <p>Developer Advocate at Ionic</p>\n              </div>\n            </a>\n          </li>\n        </ul>\n      </article>\n    </div>\n    <div class=\"strip strip-1\">\n      <article>\n        <svg class=\"vue-lines\" width=\"568\" height=\"398\" viewBox=\"-36 0 568 398\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n          <path d=\"M2.19537 -587L568 398L1134.38 -587H698.141L568.943 -362.828L440.132 -587H2.19537Z\" stroke=\"#98A8BA\" stroke-width=\"2\"/>\n        </svg>\n        \n        <h2>Join us</h2>\n        <div id=\"hubspot-override\">\n          <!--[if lte IE 8]>\n          <script charset=\"utf-8\" type=\"text/javascript\" src=\"//js.hsforms.net/forms/v2-legacy.js\"></script>\n          <![endif]-->\n          <script charset=\"utf-8\" type=\"text/javascript\" src=\"//js.hsforms.net/forms/v2.js\"></script>\n          <script>\n            hbspt.forms.create({\n            portalId: \"3776657\",\n            formId: \"621fde80-f62f-45c6-97ea-a355755e386b\"\n          });\n          </script>\n        </div>\n      </article>\n      <article>\n        <svg class=\"vue-lines\" width=\"569\" height=\"398\" viewBox=\"-2 0 569 398\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n          <path d=\"M-565.805 -587L0 398L566.379 -587H130.141L0.942688 -362.828L-127.868 -587H-565.805Z\" stroke=\"#CBF0E0\" stroke-width=\"2\"/>\n        </svg>\n          \n        <h2>What's covered:</h2>\n        <ul>\n          <li>1/ Basics of Ionic Components</li>\n          <li>2/ Theming an app to fit your brand</li>\n          <li>3/ Integrating Native Features with Capacitor</li>\n        </ul>\n      </article>\n    </div>\n    \n  </section>\n\n  <section id=\"resources\">\n    <div class=\"container\">\n      <h2>Additional resources:</h2>\n      <ul>\n        <li><a href=\"https://blog.ionicframework.com/announcing-ionic-vue/\">Announcement Blog</a></li>\n        <li><a href=\"https://ionicframework.com/blog/new-tutorial-your-first-ionic-vue-app/\">Ionic Vue Tutorial</a></li>\n        <li><a href=\"https://ionicframework.com/docs/vue/quickstart\">Ionic Vue Quickstart</a></li>\n        <li><a href=\"https://dev.to/ionic/what-is-it-about-vue-1j7n\" target=\"_blank\" rel=\"noopener\">What is it about Vue?</a></li>\n      </ul>\n    </div>\n  </section>\n</main>\n<footer id=\"footer\">\n  <div class=\"container\">\n    <div class=\"wrapper\">\n      <div class=\"info\">\n        <div>Copyright © 2020 Ionic</div>\n        <div><a href=\"/tos\">Terms</a></div>\n        <div><a href=\"/privacy\">Privacy</a></div>\n      </div>\n      <div class=\"social\">\n        <a href=\"https://twitter.com/ionicframework\"\n           target=\"_blank\" rel=\"noopener\">\n          <svg width=\"20\" height=\"16\" viewBox=\"0 0 20 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n            <path d=\"M19.2186 2.27734C18.5389 2.57812 17.8124 2.78125 17.0468 2.875C17.828 2.40625 18.4296 1.66406 18.7108 0.78125C17.9803 1.21484 17.1718 1.53125 16.3085 1.69922C15.6171 0.960937 14.6327 0.5 13.5468 0.5C11.4569 0.5 9.7655 2.19531 9.7655 4.28516C9.7655 4.58203 9.79675 4.87109 9.86316 5.14844C6.71863 4.99219 3.92957 3.48438 2.06628 1.19141C1.74207 1.75 1.55457 2.40234 1.55457 3.09375C1.55457 4.40625 2.22644 5.56641 3.24207 6.24609C2.61707 6.23047 2.03113 6.05859 1.52332 5.77344V5.82031C1.52332 7.65625 2.828 9.18359 4.55847 9.53125C4.24207 9.61719 3.90613 9.66406 3.56238 9.66406C3.32019 9.66406 3.08191 9.64062 2.85144 9.59375C3.33191 11.0977 4.73035 12.1914 6.3866 12.2227C5.09363 13.2383 3.46082 13.8438 1.68738 13.8438C1.38269 13.8438 1.08191 13.8242 0.785034 13.7891C2.453 14.875 4.44128 15.5 6.5741 15.5C13.5389 15.5 17.3436 9.73047 17.3436 4.72656C17.3436 4.5625 17.3397 4.39844 17.3319 4.23828C18.0702 3.70312 18.7108 3.03906 19.2186 2.27734Z\" fill=\"#92A0B3\"/>\n          </svg>      \n        </a>\n        <a\n          href=\"https://github.com/ionic-team/ionic-framework\"\n          target=\"_blank\" rel=\"noopener\"\n        >\n          <svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n            <path d=\"M10 1.25C5.16797 1.25 1.25 5.26953 1.25 10.2227C1.25 14.1875 3.75781 17.5469 7.23438 18.7344C7.28906 18.7461 7.33594 18.75 7.38281 18.75C7.70703 18.75 7.83203 18.5117 7.83203 18.3047C7.83203 18.0898 7.82422 17.5273 7.82031 16.7773C7.49219 16.8516 7.19922 16.8828 6.9375 16.8828C5.25391 16.8828 4.87109 15.5742 4.87109 15.5742C4.47266 14.5391 3.89844 14.2617 3.89844 14.2617C3.13672 13.7266 3.89453 13.7109 3.95312 13.7109H3.95703C4.83594 13.7891 5.29688 14.6406 5.29688 14.6406C5.73438 15.4062 6.32031 15.6211 6.84375 15.6211C7.25391 15.6211 7.625 15.4883 7.84375 15.3867C7.92188 14.8086 8.14844 14.4141 8.39844 14.1875C6.45703 13.9609 4.41406 13.1914 4.41406 9.75391C4.41406 8.77344 4.75391 7.97266 5.3125 7.34766C5.22266 7.12109 4.92188 6.20703 5.39844 4.97266C5.39844 4.97266 5.46094 4.95312 5.59375 4.95312C5.91016 4.95312 6.625 5.07422 7.80469 5.89453C8.50391 5.69531 9.25 5.59766 9.99609 5.59375C10.7383 5.59766 11.4883 5.69531 12.1875 5.89453C13.3672 5.07422 14.082 4.95312 14.3984 4.95312C14.5312 4.95312 14.5938 4.97266 14.5938 4.97266C15.0703 6.20703 14.7695 7.12109 14.6797 7.34766C15.2383 7.97656 15.5781 8.77734 15.5781 9.75391C15.5781 13.1992 13.5312 13.957 11.582 14.1797C11.8945 14.457 12.1758 15.0039 12.1758 15.8398C12.1758 17.0391 12.1641 18.0078 12.1641 18.3008C12.1641 18.5117 12.2852 18.75 12.6094 18.75C12.6562 18.75 12.7109 18.7461 12.7656 18.7344C16.2461 17.5469 18.75 14.1836 18.75 10.2227C18.75 5.26953 14.832 1.25 10 1.25Z\" fill=\"#92A0B3\"/>\n          </svg>        \n        </a>\n        <a\n          href=\"https://www.facebook.com/ionicframework/\"\n          target=\"_blank\" rel=\"noopener\"\n        >\n          <svg width=\"18\" height=\"18\" viewBox=\"0 0 18 18\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n            <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M17.75 9.05273C17.75 4.2207 13.832 0.302734 9 0.302734C4.16797 0.302734 0.25 4.2207 0.25 9.05273C0.25 13.4199 3.44922 17.0398 7.63281 17.6969V11.5828H5.41055V9.05273H7.63281V7.12461C7.63281 4.93203 8.93945 3.71992 10.9379 3.71992C11.8953 3.71992 12.8969 3.89101 12.8969 3.89101V6.04453H11.793C10.7066 6.04453 10.3668 6.71875 10.3668 7.41172V9.05312H12.7934L12.4059 11.5832H10.3668V17.6976C14.5508 17.041 17.75 13.4211 17.75 9.05273Z\" fill=\"#92A0B3\"/>\n          </svg>        \n        </a>\n      </div>\n    </div>\n  </div>\n</footer>\n{% endblock %}\n\n{% block scripts %}\n<script>\n\n</script>\n{% endblock %}\n"
  },
  {
    "path": "server/pages/go/pwa-architects-guide/index.html",
    "content": "{% extends '_layouts/blank.html' %}\n{% set id = 'go-pwa-architects-guide' %}\n{% set title = 'The Architects Guide to PWAs - Ionic Framework' %}\n{% set meta_image = 'https://ionicframework.com/img/meta/ionic-framework-og.png'%}\n{% set meta_description = \"Progressive Web Apps take advantage of major advances in modern web browsers, web APIs, and front-end frameworks to deliver great app experiences to mobile and desktop users. This brief guide provides enterprise architects and app dev leaders with essential insights and how to build a production-ready PWA today.\" %}\n\n{% set header_style = 'transparent light' %}\n\n{% block header_includes %}\n<meta name=\"robots\" content=\"noindex\" />\n{% endblock %}\n\n{% block main %}\n<div class=\"banner\">\n  <hgroup class=\"container\">\n    <a href=\"/\" title=\"home\">\n      {% include '../../_includes/logo_svg.html' %}\n    </a>\n    <h1>The Architect’s Guide to PWAs</h1>\n    <p>\n      By 2020, 50% of apps will be PWAs. See what’s behind the trend. Discover\n      when and how PWAs can help boost your app strategy by tapping into the\n      power of the web.\n    </p>\n  </hgroup>\n</div>\n\n<main class=\"container\">\n  <section class=\"content\">\n    <p class=\"lg\">\n      Big brands like Twitter and Pinterest are demonstrating how Progressive\n      Web Apps (PWAs) can boost user acquisition, engagement, and ultimately,\n      revenue.\n    </p>\n    <p>\n      This guide provides enterprise architects and app dev leaders with\n      practical insights on which projects are right for PWAs, and how to\n      build a production-ready PWA today.\n    </p>\n    <p>In this guide, you’ll learn:</p>\n    <ul>\n      <li>\n        <strong>What makes a PWA.</strong> The key capabilities and features\n        that define PWAs\n      </li>\n      <li>\n        <strong>How PWAs work.</strong> An overview of the APIs and browser\n        standards that allow PWAs to provide reliable, fast, engaging\n        experiences with the web.\n      </li>\n      <li>\n        <strong>How PWAs fit into your app strategy.</strong> When and why to\n        use a PWA in favor of a traditional native mobile app.\n      </li>\n      <li>\n        <strong>How to get started.</strong> Everything you need to get\n        started with PWAs today.\n      </li>\n    </ul>\n  </section>\n  <aside class=\"signup-form hubspot-override\">\n    <h3>Download now</h3>\n    <!--[if lte IE 8]>\n    <script charset=\"utf-8\"\n            type=\"text/javascript\"\n            src=\"//js.hsforms.net/forms/v2-legacy.js\"></script>\n    <![endif]-->\n    <script charset=\"utf-8\"\n            type=\"text/javascript\"\n            src=\"//js.hsforms.net/forms/v2.js\"></script>\n    <script>\n      hbspt.forms.create({\n      \tportalId: \"3776657\",\n      \tformId: \"7edca57f-f3bd-452e-9719-be7043d582fc\",\n      \tcss: \"\"\n      });\n    </script>\n  </aside>\n\n  <div class=\"company\">\n    <h2>\n      <strong>You’re in good company.</strong> Ionic powers millions of apps at\n      some of the smartest companies around the world.\n    </h2>\n    <div class=\"logos\"></div>\n  </div>\n</main>\n<section class=\"bar get-started\">\n  <div class=\"container\">\n    <hgroup>\n      <h2>Get your team started with Ionic Appflow today. </h2>\n      <p class=\"lg\">\n        Start building better apps faster with Ionic Appflow.\n      </p>\n    </hgroup>\n    <div>\n      <a href=\"/signup?source=framework-{{id}}&product=appflow\"\n         class=\"btn sm\"\n         id=\"btn-products-create-account\">Create an Appflow account</a>\n      <a class=\"btn sm white\"\n         id=\"btn-products-see-pricing\"\n         href=\"/pricing#appflow\">See pricing</a>\n    </div>\n  </div>\n</section>\n{% endblock %}\n"
  },
  {
    "path": "server/pages/go/pwa-architects-guide/thank-you.html",
    "content": "{% extends '_layouts/blank.html' %}\n{% set id = 'go-pwa-architects-guide' %}\n{% set title = 'The Architects Guide to PWAs - Ionic Framework' %}\n{% set meta_image = 'https://ionicframework.com/img/meta/ionic-framework-og.png'%}\n{% set meta_description = \"Progressive Web Apps take advantage of major advances in modern web browsers, web APIs, and front-end frameworks to deliver great app experiences to mobile and desktop users. This brief guide provides enterprise architects and app dev leaders with essential insights and how to build a production-ready PWA today.\" %}\n\n{% set header_style = 'transparent light' %}\n\n{% block header_includes %}\n<meta name=\"robots\" content=\"noindex\" />\n{% endblock %}\n\n{% block main %}\n<div class=\"banner\">\n  <hgroup class=\"container thank-you\">\n    <a href=\"/\" title=\"home\">\n      {% include '../../_includes/logo_svg.html' %}\n    </a>\n  </hgroup>\n</div>\n\n<main class=\"container thank-you\">\n  <aside class=\"content\">\n    <h1>\n      Thank you for downloading our<br>\n      <strong>Guide to Progressive Web Apps</strong>\n    </h1>\n    <p class=\"lg\">It should be in your inbox waiting for you!</p>\n    <p class=\"also\">\n      <small>\n        You can also download the guide <a target=\"_blank\"\n        href=\"https://cdn2.hubspot.net/hubfs/3776657/PWA_WP_v6.pdf\">here</a>.\n      </small>\n    </p>\n    <p>\n      Have questions on how PWAs fit into your app strategy or How to get\n      started building for your organization? One of our app strategist would\n      love to work with you.\n    </p>\n    <a class=\"btn\" href=\"https://ionic.io/enterprise/strategy-session\">Book a Strategy Session</a>\n  </aside>\n\n  <div class=\"company\">\n    <h2>\n      <strong>You’re in good company.</strong> Ionic powers millions of apps\n      at some of the smartest companies around the world.\n    </h2>\n    <div class=\"logos\"></div>\n  </div>\n</main>\n<section class=\"bar get-started\">\n  <div class=\"container\">\n    <hgroup>\n      <h2>Get your team started with Ionic Appflow today. </h2>\n      <p class=\"lg\">\n        Start building better apps faster with Ionic Appflow.\n      </p>\n    </hgroup>\n    <div>\n      <a href=\"/signup?source=framework-{{id}}&product=appflow\"\n         class=\"btn sm\"\n         id=\"btn-products-create-account\">Create an Appflow account</a>\n      <a class=\"btn sm white\"\n         id=\"btn-products-see-pricing\"\n         href=\"/pricing#appflow\">See pricing</a>\n    </div>\n  </div>\n</section>\n{% endblock %}\n"
  },
  {
    "path": "server/pages/go/why-hybrid/index.html",
    "content": "{% extends '_layouts/blank.html' %}\n{% set id = 'go-why-hybrid' %}\n{% set title = 'Why Hybrid - Ionic Framework' %}\n{% set meta_image = 'https://ionicframework.com/img/meta/ionic-framework-og.png'%}\n{% set meta_description = \"Progressive Web Apps take advantage of major advances in modern web browsers, web APIs, and front-end frameworks to deliver great app experiences to mobile and desktop users. This brief guide provides enterprise architects and app dev leaders with essential insights and how to build a production-ready PWA today.\" %}\n\n{% set header_style = 'transparent light' %}\n\n{% block header_includes %}\n<meta name=\"robots\" content=\"noindex\" />\n{% endblock %}\n\n{% block main %}\n<div class=\"banner\">\n  <hgroup class=\"container\">\n    <a href=\"/\" title=\"home\">\n      {% include '../../_includes/logo_svg.html' %}\n    </a>\n    <h1>Why Hybrid</h1>\n    <p>\n      Real-world answers to frequently asked questions about hybrid mobile app development.\n    </p>\n    <p>\n      Are you trying to decide the best approach to developing a mobile app for your organization? With multiple stakeholders, hundreds of questions, and so much at stake, it can be difficult to know where to begin.\n    </p>\n  </hgroup>\n</div>\n\n<main class=\"container\">\n  <section class=\"content\">\n    <p class=\"lg\">\n      \"Working with hybrid technology saved us around 60% in development time and 80% in maintenance efforts compared to native development.\"\n    </p>\n    <p>\n      Based on real-world answers from customers who have implemented a hybrid approach, this guide will help to answer four important questions that are probably near the top of your list.\n    </p>\n    <p>To help you move forward with confidence, this guide answers:</p>\n    <ul>\n      <li><span><strong>User experience: </strong> The user experience has to be great. How can a hybrid approach help me deliver a high-quality experience across my target platforms?</li></span>\n      <li><span><strong>Cost to build and maintain:</strong> Cost is a significant concern. Can a hybrid approach help me reduce cost, without sacrificing quality?</li></span>\n      <li><span><strong>Time to market:</strong> Timely development and release is critical. How will it help me to build and update apps for my target platforms?</li></span>\n      <li><span><strong>Fit for development organization:</strong> I’m all for using new tools, but how do I know they’ll be a fit for my organization? Will my team be able to adopt it? What skills are required?</li></span>\n    </ul>\n  </section>\n  <aside class=\"signup-form hubspot-override\">\n    <h3>Download now</h3>\n    <!--[if lte IE 8]>\n    <script charset=\"utf-8\"\n            type=\"text/javascript\"\n            src=\"//js.hsforms.net/forms/v2-legacy.js\"></script>\n    <![endif]-->\n    <script charset=\"utf-8\"\n            type=\"text/javascript\"\n            src=\"//js.hsforms.net/forms/v2.js\"></script>\n    <script>\n      hbspt.forms.create({\n      \tportalId: \"3776657\",\n      \tformId: \"e5221ced-1377-48e7-bdaf-d1bad227c71b\",\n      \tcss: \"\"\n      });\n    </script>\n  </aside>\n\n  <div class=\"company\">\n    <h2>\n      <strong>You’re in good company.</strong> Ionic powers millions of apps at\n      some of the smartest companies around the world.\n    </h2>\n    <div class=\"logos\"></div>\n  </div>\n</main>\n<section class=\"bar get-started\">\n  <div class=\"container\">\n    <hgroup>\n      <h2>Get your team started with Ionic Appflow today. </h2>\n      <p class=\"lg\">\n        Start building better apps faster with Ionic Appflow.\n      </p>\n    </hgroup>\n    <div>\n      <a href=\"/signup?source=framework-{{id}}&product=appflow\"\n         class=\"btn sm\"\n         id=\"btn-products-create-account\">Create an Appflow account</a>\n      <a class=\"btn sm white\"\n         id=\"btn-products-see-pricing\"\n         href=\"/pricing#appflow\">See pricing</a>\n    </div>\n  </div>\n</section>\n{% endblock %}\n"
  },
  {
    "path": "server/pages/go/why-hybrid/thank-you.html",
    "content": "{% extends '_layouts/blank.html' %}\n{% set id = 'go-pwa-architects-guide' %}\n{% set title = 'The Architects Guide to PWAs - Ionic Framework' %}\n{% set meta_image = 'https://ionicframework.com/img/meta/ionic-framework-og.png'%}\n{% set meta_description = \"Progressive Web Apps take advantage of major advances in modern web browsers, web APIs, and front-end frameworks to deliver great app experiences to mobile and desktop users. This brief guide provides enterprise architects and app dev leaders with essential insights and how to build a production-ready PWA today.\" %}\n\n{% set header_style = 'transparent light' %}\n\n{% block header_includes %}\n<meta name=\"robots\" content=\"noindex\" />\n{% endblock %}\n\n{% block main %}\n<div class=\"banner\">\n  <hgroup class=\"container thank-you\">\n    <a href=\"/\" title=\"home\">\n      {% include '../../_includes/logo_svg.html' %}\n    </a>\n  </hgroup>\n</div>\n\n<main class=\"container thank-you\">\n  <aside class=\"content\">\n    <h1>\n      Thank you for downloading<br>\n      <strong>Why Hybrid</strong>\n    </h1>\n    <p class=\"lg\">It should be in your inbox waiting for you!</p>\n    <p class=\"also\">\n      <small>\n        You can also download the guide <a target=\"_blank\"\n        href=\"https://cdn2.hubspot.net/hubfs/3776657/Ionic-HybridAppDev-white-paper.pdf\">\n        here</a>.\n      </small>\n    </p>\n    <p>\n      Have questions on how hybrid fits into your app strategy or How to get\n      started building for your organization? One of our app strategist would\n      love to work with you.\n    </p>\n    <a class=\"btn\" href=\"https://ionic.io/enterprise/strategy-session\">Book a Strategy Session</a>\n  </aside>\n\n  <div class=\"company\">\n    <h2>\n      <strong>You’re in good company.</strong> Ionic powers millions of apps\n      at some of the smartest companies around the world.\n    </h2>\n    <div class=\"logos\"></div>\n  </div>\n</main>\n<section class=\"bar get-started\">\n  <div class=\"container\">\n    <hgroup>\n      <h2>Get your team started with Ionic Appflow today. </h2>\n      <p class=\"lg\">\n        Start building better apps faster with Ionic Appflow.\n      </p>\n    </hgroup>\n    <div>\n      <a href=\"/signup?source=framework-{{id}}&product=appflow\"\n         class=\"btn sm\"\n         id=\"btn-products-create-account\">Create an Appflow account</a>\n      <a class=\"btn sm white\"\n         id=\"btn-products-see-pricing\"\n         href=\"/pricing#appflow\">See pricing</a>\n    </div>\n  </div>\n</section>\n{% endblock %}\n"
  },
  {
    "path": "server/pages/ioniconf-2020.html",
    "content": "{% extends '_layouts/blank.html' %}\n{% set title = \"Ioniconf 2020\" %}\n{% set meta_image = 'https://ionicframework.com/img/meta/ioniconf-og.png'%}\n{% set meta_description = 'Ionic’s one day, single-track online conference on modern cross-platform app development. Learn from app architects and engineering leaders in an interactive digital experience.' %}\n{% set favicons = [['/img/meta/ioniconf-favicon-64x64.png', '64x64']] %}\n{% set themeColor = '#000715' %}\n{% set cssPath = 'ioniconf-2020' %}\n{% set noGlobalStyles = true %}\n\n{% block main %}\n<header id=\"header\">\n  <nav id=\"mainNav\" class=\"nav\">\n    <div class=\"nav__wrap | container\">\n      <a href=\"/\">\n        <svg width=\"32\" height=\"32\" viewBox=\"0 0 32 32\" xmlns=\"http://www.w3.org/2000/svg\" >\n          <path fill=\"white\" fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M30.4327 9.05578L30.5633 9.36054C31.5211 11.4721 32 13.6925 32 16C32 24.8163 24.8163 32 16 32C7.18367 32 0 24.8163 0 16C0 7.18367 7.18367 0 16 0C18.5905 0 21.0503 0.609524 23.3143 1.7415L23.619 1.89388L23.3578 2.11156C22.7048 2.63401 22.2041 3.28707 21.8776 4.04898L21.7905 4.26667L21.5946 4.17959C19.8313 3.35238 17.9592 2.91701 16 2.91701C8.77279 2.91701 2.91701 8.77279 2.91701 16C2.91701 23.2272 8.77279 29.083 16 29.083C23.2272 29.083 29.083 23.2054 29.083 16C29.083 14.2803 28.7565 12.5823 28.0816 10.9932L27.9946 10.7755L28.2122 10.6884C28.9741 10.4054 29.6707 9.92653 30.215 9.31701L30.4327 9.05578ZM26.4707 9.36057C28.3102 9.36057 29.8014 7.8694 29.8014 6.02996C29.8014 4.19051 28.3102 2.69934 26.4707 2.69934C24.6313 2.69934 23.1401 4.19051 23.1401 6.02996C23.1401 7.8694 24.6313 9.36057 26.4707 9.36057ZM15.9999 8.70754C11.9727 8.70754 8.7074 11.9728 8.7074 16.0001C8.7074 20.0273 11.9727 23.2926 15.9999 23.2926C20.0271 23.2926 23.2924 20.0273 23.2924 16.0001C23.2924 11.9728 20.0271 8.70754 15.9999 8.70754Z\" fill=\"currentColor\"></path>\n        </svg>\n      </a>\n\n      <ul class=\"nav__sections\" role=\"tablist\">\n        <li class=\"\" role=\"tab\">\n          <a class=\"anchor\" data-offset=\"100\" href=\"#keynote\">Keynote</a>\n        </li>\n        <li class=\"\" role=\"tab\">\n          <a class=\"anchor\" data-offset=\"100\" href=\"#talks\">Talks</a>\n        </li>\n        <li class=\"\" role=\"tab\">\n          <a class=\"anchor\" data-offset=\"100\" href=\"#event\">Event</a>\n        </li>\n      </ul>\n      <div>\n        <label class=\"btn-secondary\" for=\"headerUpdates\"\n               onClick=\"this.querySelector('input[name=email]').focus()\">\n          <input tabindex=\"0\" class=\"checkbox\" aria-label=\"Sign up for updates\" id=\"headerUpdates\" role=\"button\" type=\"checkbox\"/>\n          <span class=\"text\">Sign up for updates</span>\n          <span class=\"arrow\">-></span>\n          <hubspot-form\n            no-default-styles\n            form-id=\"76e5f69f-85fd-4579-afce-a1892d48bb32\"\n            submit-text=\"->\"/>\n        </label>\n      </div>\n    </div>\n  </nav>\n\n  <nav id=\"mobileNavBar\" class=\"nav container\">\n      <a class=\"nav__logo\" href=\"/\">\n        <svg width=\"32\" height=\"32\" viewBox=\"0 0 32 32\" xmlns=\"http://www.w3.org/2000/svg\" >\n          <path fill=\"white\" fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M30.4327 9.05578L30.5633 9.36054C31.5211 11.4721 32 13.6925 32 16C32 24.8163 24.8163 32 16 32C7.18367 32 0 24.8163 0 16C0 7.18367 7.18367 0 16 0C18.5905 0 21.0503 0.609524 23.3143 1.7415L23.619 1.89388L23.3578 2.11156C22.7048 2.63401 22.2041 3.28707 21.8776 4.04898L21.7905 4.26667L21.5946 4.17959C19.8313 3.35238 17.9592 2.91701 16 2.91701C8.77279 2.91701 2.91701 8.77279 2.91701 16C2.91701 23.2272 8.77279 29.083 16 29.083C23.2272 29.083 29.083 23.2054 29.083 16C29.083 14.2803 28.7565 12.5823 28.0816 10.9932L27.9946 10.7755L28.2122 10.6884C28.9741 10.4054 29.6707 9.92653 30.215 9.31701L30.4327 9.05578ZM26.4707 9.36057C28.3102 9.36057 29.8014 7.8694 29.8014 6.02996C29.8014 4.19051 28.3102 2.69934 26.4707 2.69934C24.6313 2.69934 23.1401 4.19051 23.1401 6.02996C23.1401 7.8694 24.6313 9.36057 26.4707 9.36057ZM15.9999 8.70754C11.9727 8.70754 8.7074 11.9728 8.7074 16.0001C8.7074 20.0273 11.9727 23.2926 15.9999 23.2926C20.0271 23.2926 23.2924 20.0273 23.2924 16.0001C23.2924 11.9728 20.0271 8.70754 15.9999 8.70754Z\" fill=\"currentColor\"></path>\n        </svg>\n      </a>\n      <button id=\"collapse-toggle\"><ion-icon name=\"ellipsis-vertical\"></ion-icon></button>\n  </nav>\n\n  <nav id=\"mobile-nav\" class=\"mobile-nav closed \">\n    <div class=\"mobile-nav__pane\">\n      <i class=\"mobile-nav__close\">\n        <svg id=\"icon-close-mobile\" width=\"100%\" height=\"100%\" viewBox=\"0 0 14 14\"><g><path d=\"M8.65881121,7 L13.6590731,1.9984285 C14.1136423,1.54374018 14.1136423,0.795704557 13.6590731,0.341016239 C13.2045038,-0.11367208 12.456664,-0.11367208 12.0020948,0.341016239 L7.00183294,5.34258774 L2.00157109,0.341016239 C1.54700183,-0.11367208 0.799162084,-0.11367208 0.344592825,0.341016239 C0.117308196,0.568360398 0,0.869041383 0,1.16972237 C0,1.47040335 0.117308196,1.77108434 0.344592825,1.9984285 L5.34485467,7 L0.344592825,12.0015715 C0.117308196,12.2289157 2.08381216e-15,12.5295966 2.08381216e-15,12.8302776 C2.08381216e-15,13.1309586 0.117308196,13.4316396 0.344592825,13.6589838 C0.799162084,14.1136721 1.54700183,14.1136721 2.00157109,13.6589838 L7.00183294,8.65741226 L12.0020948,13.6589838 C12.456664,14.1136721 13.2045038,14.1136721 13.6590731,13.6589838 C14.1136423,13.2042954 14.1136423,12.4562598 13.6590731,12.0015715 L8.65881121,7 Z\" id=\"Shape\"></path></g></svg>\n      </i>\n\n      <div class=\"mobile-nav__wrapper\">\n        <a href=\"/\" class=\"mobile-nav__logo\">\n          <svg width=\"32px\" height=\"32px\" viewBox=\"0 0 64 64\"><g><path d=\"M31.9135135,17.5135135 C23.9135135,17.5135135 17.427027,24 17.427027,32 C17.427027,40 23.9135135,46.4864865 31.9135135,46.4864865 C39.9135135,46.4864865 46.4,40 46.4,32 C46.3567568,24 39.8702703,17.5135135 31.9135135,17.5135135 Z\"></path><circle cx=\"52.6702703\" cy=\"12.1945946\" r=\"6.61621622\"></circle><path d=\"M60.8,18.8108108 L60.5405405,18.2054054 L60.1081081,18.7243243 C59.027027,19.9351351 57.6432432,20.8864865 56.1297297,21.4486486 L55.6972973,21.6216216 L55.8702703,22.0540541 C57.2108108,25.2108108 57.8594595,28.5837838 57.8594595,32 C57.8594595,46.3135135 46.227027,57.9891892 31.8702703,57.9891892 C17.5135135,57.9891892 5.92432432,46.3135135 5.92432432,32 C5.92432432,17.6864865 17.5567568,6.01081081 31.9135135,6.01081081 C35.8054054,6.01081081 39.5243243,6.87567568 43.027027,8.51891892 L43.4162162,8.69189189 L43.5891892,8.25945946 C44.2378378,6.74594595 45.2324324,5.44864865 46.5297297,4.41081081 L47.0486486,3.97837838 L46.4432432,3.67567568 C41.9027027,1.34054054 37.0162162,0.12972973 31.8702703,0.12972973 C14.3567568,0.12972973 0.0864864865,14.4 0.0864864865,31.9135135 C0.0864864865,49.427027 14.3567568,63.6972973 31.8702703,63.6972973 C49.3837838,63.6972973 63.6540541,49.427027 63.6540541,31.9135135 C63.6540541,27.4162162 62.7027027,23.0054054 60.8,18.8108108 Z\"></path></g></svg>\n        </a>\n\n        <ul class=\"mobile-nav__menu\">\n          <li class=\"mobile-nav__menuitem\">\n            <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 408 520\">\n              <defs/>\n              <path stroke=\"#567BFF\" stroke-dasharray=\".5 16\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"4\" d=\"M375.5 298.5l-171.5-98\" opacity=\".7\"/>\n              <path stroke=\"#567BFF\" stroke-dasharray=\".5 16\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"4\" d=\"M204 200.5l-171.5 98\" opacity=\".7\"/>\n              <path stroke=\"url(#logo_ioniconf_full_paint0_linear)\" stroke-dasharray=\".5 16\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"4\" d=\"M204 2v199\" opacity=\".7\"/>\n              <circle cx=\"204\" cy=\"200\" r=\"108\" stroke=\"url(#logo_ioniconf_full_paint1_linear)\" stroke-width=\"4\" opacity=\".8\"/>\n              <g filter=\"url(#logo_ioniconf_full_filter0_d)\">\n                  <circle cx=\"280\" cy=\"123\" r=\"16\" fill=\"url(#logo_ioniconf_full_paint2_linear)\" fill-opacity=\".8\"/>\n              </g>\n              <circle cx=\"204\" cy=\"200\" r=\"44\" fill=\"url(#logo_ioniconf_full_paint3_linear)\"/>\n              <path stroke=\"url(#logo_ioniconf_full_paint4_linear)\" stroke-width=\"4\" d=\"M202.8 2.3h0A2 2 0 01204 2c.4 0 .8 0 1.1.3h0l169.7 97.8h0c.7.4 1.2 1.2 1.2 2v195.7c0 1-.5 1.7-1.1 2h0l-169.7 97.9h0a2 2 0 01-1.2.3 2 2 0 01-1.1-.3h0L33.1 299.9h0a2.3 2.3 0 01-1.2-2V102.1c0-.8.4-1.5 1.2-2L202.8 2.2z\"/>\n              <path stroke=\"url(#logo_ioniconf_full_paint5_linear)\" stroke-linejoin=\"round\" stroke-miterlimit=\"10\" stroke-width=\"4\" d=\"M204 397V200\"/>\n              <path stroke=\"url(#logo_ioniconf_full_paint6_linear)\" stroke-width=\"4\" d=\"M32.2 101.8l169.6 97.8a4 4 0 002.2.5 4 4 0 002.2-.5l169.6-97.8\"/>\n              <path fill=\"#fff\" d=\"M5.1 419.7a5 5 0 005.1-5 5 5 0 00-5-5.1c-3.1 0-5.2 2-5.2 5s2 5 5.1 5zM2 494.4H8v-66.1H2v66.1z\"/>\n              <path fill=\"#fff\" d=\"M47.8 496c20.7 0 33.2-16.7 33.2-34.6 0-18-12.5-34.7-33.2-34.7-20.7 0-33.3 16.7-33.3 34.7 0 18 12.6 34.6 33.3 34.6zm-27-34.6c0-16 10.5-29 27-29s27 13 27 29-10.5 29-27 29-27-13-27-29z\"/>\n              <path fill=\"#fff\" d=\"M95 428.3h-6v66.1h6v-39.9c0-14.8 10.1-22.3 22-22.3 13.3 0 19.6 8 19.6 21.4v40.8h6.1v-42.6c0-14.3-8.6-25.1-25.1-25.1-14 0-20.6 8.5-22.5 12.3v-10.7z\"/>\n              <path fill=\"#fff\" d=\"M155 419.7a5 5 0 005.2-5 5 5 0 00-5.2-5.1c-3 0-5 2-5 5s2 5 5 5zm-3.1 74.7h6.2v-66.1h-6.2v66.1z\"/>\n              <path fill=\"#fff\" d=\"M164.9 460.4c0 19.7 13.8 35.6 33.9 35.6a31 31 0 0032.2-26.2h-16c-1.8 7.3-8 12.4-16.4 12.4-11 0-18.2-9-18.2-21.8s7.1-21.9 18.2-21.9c8.4 0 14.6 5.1 16.4 12.5h16a31 31 0 00-32.2-26.3c-20 0-34 16-34 35.7z\"/>\n              <path fill=\"#fff\" d=\"M269.3 496a34.4 34.4 0 0035.3-35.6 34.5 34.5 0 00-35.3-35.7 34.5 34.5 0 00-35.2 35.7 34.4 34.4 0 0035.2 35.6zm-19.7-35.6c0-13.2 8.4-21.9 19.7-21.9 11.4 0 19.7 8.7 19.7 22 0 13-8.3 21.7-19.7 21.7-11.3 0-19.7-8.6-19.7-21.8z\"/>\n              <path fill=\"#fff\" d=\"M326.1 426.3h-14.4v68.1h15.6V455c0-10.6 6.1-16.8 16-16.8 9.2 0 13.4 6.2 13.4 15.5v40.8h15.6v-42.8c0-15.8-8.8-26.9-25.3-26.9-11 0-18 5.3-20.9 10.7v-9z\"/>\n              <path fill=\"#fff\" d=\"M379.6 438.8v55.6h15.6v-55.6H408v-12.5h-12.8V424c0-7.5 2.4-10 8.7-10h4.1v-13.5s-4.2-.5-7.2-.5c-13 0-21.2 7-21.2 23.1v15.7z\"/>\n              <path fill=\"#fff\" d=\"M339 517l3.2-3.2a141.7 141.7 0 004.6-5c.3-.5.4-1 .4-1.7s-.2-1.3-.7-1.8c-.6-.4-1.2-.7-2-.7-.9 0-1.5.2-2 .7-.5.5-.8 1-1 1.6l-2.5-1a5.2 5.2 0 012.8-3.3c.8-.4 1.7-.6 2.7-.6 1 0 2 .2 2.9.7.8.4 1.5 1 2 1.8.4.7.6 1.6.6 2.5 0 1-.2 2-.8 2.9-.5.9-1.1 1.7-1.9 2.5l-2.5 2.5-2.1 2v.2h7.6v2.5H339V517z\"/>\n              <path fill=\"#fff\" d=\"M359.8 520c-1.4 0-2.6-.4-3.7-1.2-1-.8-1.9-1.9-2.5-3.2-.5-1.4-.8-3-.8-4.6 0-1.7.3-3.2.8-4.6a7.6 7.6 0 012.5-3.2c1.1-.8 2.3-1.2 3.7-1.2a6 6 0 013.8 1.2c1 .8 1.8 1.9 2.4 3.2.6 1.4.9 3 .9 4.6 0 1.7-.3 3.2-.9 4.6a7.6 7.6 0 01-2.4 3.2 6 6 0 01-3.8 1.2zm0-2.6c1 0 1.7-.3 2.3-.8.6-.6 1.1-1.4 1.5-2.3.3-1 .5-2 .5-3.3 0-1.2-.2-2.3-.5-3.3a5 5 0 00-1.5-2.3c-.6-.5-1.4-.8-2.3-.8-.8 0-1.6.3-2.2.8-.7.6-1.2 1.4-1.5 2.3-.3 1-.5 2-.5 3.3 0 1.2.2 2.3.5 3.3s.8 1.7 1.5 2.3c.6.5 1.4.8 2.2.8z\"/>\n              <path fill=\"#fff\" d=\"M369.1 517a282149 282149 0 016.4-6.4c.7-.8 1.2-1.4 1.4-1.9.3-.4.4-1 .4-1.6 0-.7-.2-1.3-.7-1.8-.6-.4-1.2-.7-2-.7-.9 0-1.5.2-2 .7-.5.5-.8 1-1 1.6l-2.5-1a5.2 5.2 0 012.8-3.3c.8-.4 1.7-.6 2.7-.6 1 0 2 .2 2.9.7.8.4 1.5 1 2 1.8.4.7.6 1.6.6 2.5 0 1-.2 2-.8 2.9-.5.9-1.1 1.7-1.9 2.5L375 515l-2.1 2v.2h7.6v2.5H369V517z\"/>\n              <path fill=\"#fff\" d=\"M390 520c-1.5 0-2.7-.4-3.8-1.2-1-.8-1.9-1.9-2.5-3.2-.5-1.4-.8-3-.8-4.6 0-1.7.3-3.2.8-4.6a7.6 7.6 0 012.5-3.2c1.1-.8 2.3-1.2 3.7-1.2a6 6 0 013.8 1.2c1 .8 1.8 1.9 2.4 3.2.6 1.4.9 3 .9 4.6 0 1.7-.3 3.2-.9 4.6a7.7 7.7 0 01-2.4 3.2c-1.1.8-2.4 1.2-3.8 1.2zm0-2.6c.8 0 1.6-.3 2.2-.8.6-.6 1.1-1.4 1.5-2.3.3-1 .5-2 .5-3.3 0-1.2-.2-2.3-.5-3.3a5 5 0 00-1.5-2.3c-.6-.5-1.4-.8-2.3-.8-.8 0-1.6.3-2.2.8-.7.6-1.1 1.4-1.5 2.3-.3 1-.5 2-.5 3.3 0 1.2.2 2.3.5 3.3.4 1 .8 1.7 1.5 2.3.6.5 1.4.8 2.2.8z\"/>\n              <defs>\n                  <linearGradient id=\"logo_ioniconf_full_paint0_linear\" x1=\"204\" x2=\"204\" y1=\"3\" y2=\"201\" gradientUnits=\"userSpaceOnUse\">\n                      <stop stop-color=\"#59BAFF\"/>\n                      <stop offset=\"1\" stop-color=\"#5697FF\"/>\n                  </linearGradient>\n                  <linearGradient id=\"logo_ioniconf_full_paint1_linear\" x1=\"204\" x2=\"204\" y1=\"90\" y2=\"310\" gradientUnits=\"userSpaceOnUse\">\n                      <stop stop-color=\"#FF56C7\"/>\n                      <stop offset=\"1\" stop-color=\"#5CFFE2\" stop-opacity=\".8\"/>\n                  </linearGradient>\n                  <linearGradient id=\"logo_ioniconf_full_paint2_linear\" x1=\"280\" x2=\"280\" y1=\"107\" y2=\"139\" gradientUnits=\"userSpaceOnUse\">\n                      <stop stop-color=\"#37CFFF\"/>\n                      <stop offset=\"1\" stop-color=\"#556AFF\"/>\n                  </linearGradient>\n                  <linearGradient id=\"logo_ioniconf_full_paint3_linear\" x1=\"204\" x2=\"204\" y1=\"156\" y2=\"244\" gradientUnits=\"userSpaceOnUse\">\n                      <stop stop-color=\"#A04EFF\"/>\n                      <stop offset=\"1\" stop-color=\"#0BF\" stop-opacity=\".7\"/>\n                  </linearGradient>\n                  <linearGradient id=\"logo_ioniconf_full_paint4_linear\" x1=\"204\" x2=\"204\" y1=\"0\" y2=\"400\" gradientUnits=\"userSpaceOnUse\">\n                      <stop stop-color=\"#58CFFF\"/>\n                      <stop offset=\".3\" stop-color=\"#56A5FF\"/>\n                      <stop offset=\"1\" stop-color=\"#5E5EFF\"/>\n                  </linearGradient>\n                  <linearGradient id=\"logo_ioniconf_full_paint5_linear\" x1=\"204.5\" x2=\"204.5\" y1=\"200\" y2=\"397\" gradientUnits=\"userSpaceOnUse\">\n                      <stop stop-color=\"#2CEDA8\"/>\n                      <stop offset=\".5\" stop-color=\"#4DC8FF\"/>\n                      <stop offset=\"1\" stop-color=\"#5E5FFF\"/>\n                  </linearGradient>\n                  <linearGradient id=\"logo_ioniconf_full_paint6_linear\" x1=\"34.5\" x2=\"376\" y1=\"104\" y2=\"104\" gradientUnits=\"userSpaceOnUse\">\n                      <stop stop-color=\"#56A4FF\"/>\n                      <stop offset=\".5\" stop-color=\"#2BEDA7\"/>\n                      <stop offset=\"1\" stop-color=\"#56A4FF\"/>\n                  </linearGradient>\n                  <filter id=\"logo_ioniconf_full_filter0_d\" width=\"64\" height=\"64\" x=\"248\" y=\"91\" color-interpolation-filters=\"sRGB\" filterUnits=\"userSpaceOnUse\">\n                      <feFlood flood-opacity=\"0\" result=\"BackgroundImageFix\"/>\n                      <feColorMatrix in=\"SourceAlpha\" values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0\"/>\n                      <feOffset/>\n                      <feGaussianBlur stdDeviation=\"8\"/>\n                      <feColorMatrix values=\"0 0 0 0 0.00392157 0 0 0 0 0.0235294 0 0 0 0 0.0627451 0 0 0 1 0\"/>\n                      <feBlend in2=\"BackgroundImageFix\" result=\"effect1_dropShadow\"/>\n                      <feBlend in=\"SourceGraphic\" in2=\"effect1_dropShadow\" result=\"shape\"/>\n                  </filter>\n              </defs>\n            </svg>\n          </li>\n          <li class=\"mobile-nav__menuitem\">\n            <a class=\"anchor\" data-offset=\"150\" href=\"#keynote\">Keynote</a>\n          </li>\n          <li class=\"mobile-nav__menuitem\">\n            <a class=\"anchor\" data-offset=\"150\" href=\"#talks\">Talks</a>\n          </li>\n          <li class=\"mobile-nav__menuitem\">\n            <a class=\"anchor\" data-offset=\"150\" href=\"#event\">Event</a>\n          </li>\n        </ul>\n      </div>\n    </div>\n    <div class=\"mobile-nav__footer\">\n      <div class=\"footer__cta\">\n        <label class=\"btn-secondary\" for=\"mobileNavUpdates\"\n               onClick=\"this.querySelector('input[name=email]').focus()\">\n          <input tabindex=\"0\" class=\"checkbox\" aria-label=\"Sign up for updates\" id=\"mobileNavUpdates\" role=\"button\" type=\"checkbox\"/>\n          <span class=\"text\">Sign up for updates</span>\n          <span class=\"arrow\">-></span>\n          <hubspot-form\n            form-id=\"76e5f69f-85fd-4579-afce-a1892d48bb32\"\n            submit-text=\"->\"\n            no-default-styles\n          />\n        </label>\n      </div>\n    </div>\n  </nav>\n</header>\n\n<main>\n<section id=\"landing\">\n  <svg id=\"landingBack\" class=\"\" width=\"1800\" height=\"1099\" viewBox=\"0 0 1800 1099\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" preserveAspectRatio=\"xMidYMid slice\">\n    <mask id=\"ioniconf_hero_mask0\" mask-type=\"alpha\" maskUnits=\"userSpaceOnUse\" x=\"0\" y=\"0\" width=\"1800\" height=\"1099\">\n        <rect width=\"1800\" height=\"1099\" fill=\"#C4C4C4\"/>\n    </mask>\n    <g mask=\"url(#ioniconf_hero_mask0)\">\n        <g opacity=\"0.5\">\n            <path opacity=\"0.3922\" d=\"M1821.93 242.266L1821.93 151.538L1776.56 242.266L1821.93 242.266Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M1821.93 332.993L1821.93 242.265L1776.56 242.265L1821.93 332.993Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M1867.3 695.904L1821.93 695.904L1776.56 741.268L1867.3 695.904Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M1912.66 106.174L1821.93 15.4461L1776.56 60.8099L1912.66 106.174Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M1867.3 378.357L1821.93 332.993L1776.56 423.721L1867.3 378.357Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M1867.3 968.087L1821.93 922.723L1776.56 1013.45L1867.3 968.087Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M1821.93 695.904L1821.93 650.54L1776.56 650.54L1821.93 695.904Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M1776.56 741.268L1821.93 695.904L1776.56 650.54L1776.56 741.268Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M1821.93 650.54L1821.93 605.176L1776.56 650.54L1821.93 650.54Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M1867.3 1104.18L1867.3 1058.82L1776.56 1104.18L1867.3 1104.18Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M1867.3 378.357L1776.56 423.721L1776.56 469.085L1867.3 378.357Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M1821.93 605.177L1867.3 559.813L1776.56 559.813L1821.93 605.177Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M1776.56 650.54L1821.93 605.176L1776.56 559.813L1776.56 650.54Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M1776.56 559.813L1776.56 469.085L1731.2 514.449L1776.56 559.813Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M1776.56 60.8101L1821.93 15.4462L1731.19 15.4462L1776.56 60.8101Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M1821.93 332.993L1776.56 242.265L1731.19 287.629L1821.93 332.993Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M1867.3 877.36L1867.3 831.996L1731.2 831.996L1867.3 877.36Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M1821.93 922.724L1867.3 877.36L1731.2 831.996L1821.93 922.724Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M1776.56 1104.18L1776.56 1013.45L1731.2 1058.82L1776.56 1104.18Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M1731.2 1104.18L1776.56 1104.18L1731.2 1058.82L1731.2 1104.18Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M1776.56 741.268L1776.56 650.54L1731.2 650.54L1776.56 741.268Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M1776.56 650.54L1776.56 559.813L1731.2 650.54L1776.56 650.54Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M1776.56 423.721L1821.93 332.993L1731.19 378.357L1776.56 423.721Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M1776.56 1013.45L1821.93 922.724L1731.19 968.088L1776.56 1013.45Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M1731.2 514.449L1776.56 469.085L1731.2 423.721L1731.2 514.449Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M1776.56 469.085L1776.56 423.721L1731.2 423.721L1776.56 469.085Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M1776.56 423.721L1731.2 378.357L1731.2 423.721L1776.56 423.721Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M1731.2 1058.82L1776.56 1013.45L1685.83 1013.45L1731.2 1058.82Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M1776.56 1013.45L1731.2 968.087L1685.83 1013.45L1776.56 1013.45Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M1731.2 287.629L1776.56 242.266L1685.83 196.902L1731.2 287.629Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M1731.2 514.449L1731.2 423.721L1685.83 514.449L1731.2 514.449Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M1731.2 831.996L1776.56 741.268L1685.83 831.996L1731.2 831.996Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M1776.56 60.8099L1731.2 15.4461L1685.83 106.174L1776.56 60.8099Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M1731.2 831.996L1685.83 831.996L1685.83 877.36L1731.2 831.996Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M1821.93 922.724L1731.2 831.996L1685.83 877.36L1821.93 922.724Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M1685.83 514.449L1731.2 423.721L1640.46 469.085L1685.83 514.449Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M1685.83 106.174L1731.2 15.4461L1640.46 60.8099L1685.83 106.174Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M1731.2 15.4458L1640.46 -29.9181L1640.46 15.4458L1731.2 15.4458Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M1640.46 60.8101L1731.2 15.4462L1640.46 15.4462L1640.46 60.8101Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M1685.83 196.901L1685.83 106.174L1640.46 106.174L1685.83 196.901Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M1685.83 106.174L1640.46 60.8099L1640.46 106.174L1685.83 106.174Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M1731.2 423.721L1731.2 378.357L1640.46 423.721L1731.2 423.721Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M1640.46 469.085L1731.2 423.721L1640.46 423.721L1640.46 469.085Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M1776.56 559.813L1731.2 514.449L1640.46 559.813L1776.56 559.813Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M1731.2 514.449L1685.83 514.449L1640.46 559.813L1731.2 514.449Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M1685.83 877.36L1685.83 831.996L1595.09 922.724L1685.83 877.36Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M1685.83 1013.45L1731.2 968.088L1595.09 922.724L1685.83 1013.45Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M1731.2 1058.82L1685.83 1013.45L1595.09 1104.18L1731.2 1058.82Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M1685.83 1013.45L1595.09 1058.82L1595.09 1104.18L1685.83 1013.45Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M1731.2 1104.18L1731.2 1058.82L1595.09 1104.18L1731.2 1104.18Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M1640.46 469.085L1595.09 469.085L1595.09 514.449L1640.46 469.085Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M1685.83 514.449L1640.46 469.085L1595.09 514.449L1685.83 514.449Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M1640.46 559.813L1685.83 514.449L1595.09 514.449L1640.46 559.813Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M1640.46 469.085L1640.46 423.721L1595.09 423.721L1640.46 469.085Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M1595.09 469.085L1640.46 469.085L1595.09 423.721L1595.09 469.085Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M1640.46 423.721L1640.46 287.63L1595.09 423.721L1640.46 423.721Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M1595.09 922.724L1549.73 741.268L1549.73 922.724L1595.09 922.724Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M1549.73 741.268L1640.46 695.904L1549.73 695.904L1549.73 741.268Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M1640.46 15.4462L1640.46 -29.9177L1549.73 60.8101L1640.46 15.4462Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M1640.46 60.8101L1640.46 15.4462L1549.73 60.8101L1640.46 60.8101Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M1640.46 106.174L1640.46 60.8099L1549.73 60.8099L1640.46 106.174Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M1595.09 922.724L1549.73 922.724L1549.73 968.087L1595.09 922.724Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M1685.83 1013.45L1595.09 922.724L1549.73 968.088L1685.83 1013.45Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M1549.73 695.905L1640.46 695.905L1549.73 650.541L1549.73 695.905Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M1640.46 559.813L1595.09 514.449L1549.73 650.54L1640.46 559.813Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M1595.09 1104.18L1595.09 1058.82L1504.36 1104.18L1595.09 1104.18Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M1595.09 1058.82L1549.73 968.088L1504.36 1013.45L1595.09 1058.82Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M1549.73 695.905L1549.73 650.541L1504.36 695.905L1549.73 695.905Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M1549.73 741.268L1549.73 695.904L1504.36 695.904L1549.73 741.268Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M1504.36 741.268L1549.73 741.268L1504.36 695.904L1504.36 741.268Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M1595.09 514.449L1595.09 469.085L1504.36 514.449L1595.09 514.449Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M1549.73 922.724L1549.73 741.268L1504.36 922.724L1549.73 922.724Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M1549.73 741.268L1504.36 741.268L1504.36 922.724L1549.73 741.268Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M1549.73 968.087L1549.73 922.724L1504.36 922.724L1549.73 968.087Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M1504.36 1013.45L1549.73 968.087L1504.36 922.723L1504.36 1013.45Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M1504.36 695.905L1549.73 650.541L1458.99 650.541L1504.36 695.905Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M1504.36 1013.45L1504.36 922.723L1458.99 922.723L1504.36 1013.45Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M1595.09 469.085L1595.09 423.721L1458.99 469.085L1595.09 469.085Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M1504.36 514.449L1595.09 469.085L1458.99 469.085L1504.36 514.449Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M1504.36 514.449L1458.99 469.085L1413.63 559.813L1504.36 514.449Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M1458.99 922.724L1504.36 922.724L1413.63 877.36L1458.99 922.724Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M1413.63 559.813L1458.99 469.085L1368.26 514.449L1413.63 559.813Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M1368.26 559.813L1413.63 559.813L1368.26 514.449L1368.26 559.813Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M1413.63 378.357L1413.63 287.629L1368.26 287.629L1413.63 378.357Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M1368.26 378.357L1413.63 378.357L1368.26 287.629L1368.26 378.357Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M1413.63 877.36L1413.63 786.632L1368.26 786.632L1413.63 877.36Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M1458.99 922.724L1413.63 877.36L1368.26 922.724L1458.99 922.724Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M1413.63 378.357L1368.26 378.357L1368.26 469.085L1413.63 378.357Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M1368.26 514.449L1458.99 469.085L1368.26 469.085L1368.26 514.449Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M1413.63 151.538L1368.26 60.8098L1368.26 151.538L1413.63 151.538Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M1413.63 287.629L1413.63 151.538L1368.26 151.538L1413.63 287.629Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M1368.26 287.629L1413.63 287.629L1368.26 151.538L1368.26 287.629Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M1368.26 786.632L1413.63 786.632L1368.26 695.904L1368.26 786.632Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M1413.63 559.813L1368.26 559.813L1368.26 695.904L1413.63 559.813Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M1504.36 695.905L1458.99 650.541L1368.26 695.905L1504.36 695.905Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M1504.36 741.268L1504.36 695.904L1368.26 695.904L1504.36 741.268Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M1413.63 1149.54L1413.63 1058.82L1368.26 1149.54L1413.63 1149.54Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M1368.26 287.629L1368.26 151.538L1322.89 287.629L1368.26 287.629Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M1368.26 378.357L1368.26 287.629L1322.89 287.629L1368.26 378.357Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M1368.26 922.724L1413.63 877.36L1322.89 877.36L1368.26 922.724Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M1368.26 60.8101L1458.99 -29.9177L1322.89 15.4462L1368.26 60.8101Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M1368.26 151.538L1368.26 60.8098L1322.89 106.174L1368.26 151.538Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M1368.26 60.8099L1322.89 15.4461L1322.89 106.174L1368.26 60.8099Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M1322.89 1058.82L1413.63 1058.82L1322.89 1013.45L1322.89 1058.82Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M1322.89 1013.45L1368.26 922.724L1277.52 968.088L1322.89 1013.45Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M1368.26 559.813L1368.26 514.449L1277.52 605.177L1368.26 559.813Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M1322.89 15.4458L1458.99 -29.9181L1277.52 -29.9181L1322.89 15.4458Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M1368.26 922.724L1322.89 877.36L1277.52 922.724L1368.26 922.724Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M1277.52 968.087L1368.26 922.724L1277.52 922.724L1277.52 968.087Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M1322.89 1013.45L1277.52 968.088L1277.52 1013.45L1322.89 1013.45Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M1322.89 1058.82L1322.89 1013.45L1277.52 1013.45L1322.89 1058.82Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M1277.52 1058.82L1322.89 1058.82L1277.52 1013.45L1277.52 1058.82Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M1322.89 1058.82L1277.52 1058.82L1277.52 1149.54L1322.89 1058.82Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M1322.89 287.629L1277.52 287.629L1277.52 378.357L1322.89 287.629Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M1277.52 922.724L1322.89 877.36L1277.52 877.36L1277.52 922.724Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M1322.89 877.36L1368.26 786.632L1277.52 877.36L1322.89 877.36Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M1368.26 151.537L1322.89 106.174L1277.52 196.901L1368.26 151.537Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M1277.52 287.629L1322.89 287.629L1277.52 196.902L1277.52 287.629Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M1277.52 922.724L1277.52 877.36L1232.16 922.724L1277.52 922.724Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M1277.52 968.087L1277.52 922.724L1232.16 922.724L1277.52 968.087Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M1322.89 15.4463L1277.52 -29.9176L1232.16 15.4463L1322.89 15.4463Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M1232.16 60.8101L1322.89 15.4462L1232.16 15.4462L1232.16 60.8101Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M1368.26 695.904L1277.52 605.177L1232.16 650.54L1368.26 695.904Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M1277.52 605.177L1232.16 605.177L1232.16 650.541L1277.52 605.177Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M1368.26 514.449L1368.26 469.085L1232.16 469.085L1368.26 514.449Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M1277.52 287.629L1277.52 196.902L1232.16 196.902L1277.52 287.629Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M1277.52 196.901L1322.89 106.174L1232.16 196.901L1277.52 196.901Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M1232.16 469.085L1277.52 378.357L1232.16 378.357L1232.16 469.085Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M1277.52 378.357L1277.52 287.629L1232.16 378.357L1277.52 378.357Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M1232.16 15.4463L1277.52 -29.9176L1186.79 15.4463L1232.16 15.4463Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M1277.52 1013.45L1277.52 968.087L1186.79 968.087L1277.52 1013.45Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M1277.52 968.087L1232.16 922.724L1186.79 968.087L1277.52 968.087Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M1232.16 922.724L1277.52 877.36L1186.79 877.36L1232.16 922.724Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M1186.79 968.087L1232.16 922.724L1186.79 877.36L1186.79 968.087Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M1232.16 378.357L1277.52 287.629L1186.79 332.993L1232.16 378.357Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M1277.52 287.629L1186.79 287.629L1186.79 332.993L1277.52 287.629Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M1232.16 650.541L1232.16 605.177L1186.79 605.177L1232.16 650.541Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M1186.79 650.541L1232.16 650.541L1186.79 605.177L1186.79 650.541Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M1186.79 605.177L1232.16 605.177L1186.79 514.449L1186.79 605.177Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M1232.16 605.177L1277.52 605.177L1186.79 514.449L1232.16 605.177Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M1277.52 605.177L1232.16 469.085L1186.79 514.449L1277.52 605.177Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M1232.16 60.8101L1232.16 15.4462L1186.79 60.8101L1232.16 60.8101Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M1232.16 15.4462L1186.79 15.4462L1186.79 60.8101L1232.16 15.4462Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M1186.79 60.8101L1186.79 15.4462L1141.42 15.4462L1186.79 60.8101Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M1186.79 15.4463L1277.52 -29.9176L1141.42 15.4463L1186.79 15.4463Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M1232.16 60.8098L1186.79 60.8098L1141.42 151.538L1232.16 60.8098Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M1277.52 1058.82L1277.52 1013.45L1141.42 1058.82L1277.52 1058.82Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M1186.79 1104.18L1277.52 1058.82L1141.42 1058.82L1186.79 1104.18Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M1232.16 378.357L1186.79 332.993L1141.42 378.357L1232.16 378.357Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M1186.79 514.449L1232.16 469.085L1141.42 423.721L1186.79 514.449Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M1232.16 378.357L1141.42 378.357L1141.42 423.721L1232.16 378.357Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M1186.79 332.993L1186.79 287.629L1096.06 332.993L1186.79 332.993Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M1141.42 378.357L1186.79 332.993L1096.06 332.993L1141.42 378.357Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M1186.79 60.8101L1141.42 15.4462L1050.69 60.81L1186.79 60.8101Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M1141.42 15.4462L1096.06 15.4462L1050.69 60.8101L1141.42 15.4462Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M1096.06 332.993L1186.79 287.629L1050.69 287.629L1096.06 332.993Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M1050.69 60.8101L1096.06 15.4462L1050.69 15.4462L1050.69 60.8101Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M1186.79 1104.18L1141.42 1058.82L1050.69 1149.54L1186.79 1104.18Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M1096.06 332.994L1050.69 287.63L1046.7 414.333L1096.06 332.994Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M1141.42 423.721L1141.42 378.357L1046.7 414.333L1141.42 423.721Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M1141.42 378.357L1096.06 332.993L1046.7 414.333L1141.42 378.357Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M1050.69 287.629L1050.69 151.538L1005.32 151.538L1050.69 287.629Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M1050.69 151.538L1050.69 60.8098L1005.32 151.538L1050.69 151.538Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M1050.69 60.8101L1050.69 15.4462L959.955 15.4462L1050.69 60.8101Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M959.955 15.4459L914.587 15.4459L914.587 151.538L959.955 15.4459Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M914.587 151.538L869.22 151.538L869.22 242.266L914.587 151.538Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M869.22 287.629L959.955 287.629L869.22 242.266L869.22 287.629Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M869.22 151.538L914.588 151.538L823.853 106.174L869.22 151.538Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M914.588 15.4461L823.853 60.8099L823.853 106.174L914.588 15.4461Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M869.22 242.266L869.22 151.538L823.853 196.902L869.22 242.266Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M869.22 242.266L823.853 196.902L823.853 242.266L869.22 242.266Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M869.22 287.629L869.22 242.266L823.853 242.266L869.22 287.629Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M823.853 287.629L869.22 287.629L823.853 242.266L823.853 287.629Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M869.22 151.538L823.853 106.174L823.853 151.538L869.22 151.538Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M823.853 196.901L869.22 151.537L823.853 151.537L823.853 196.901Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M869.22 287.629L823.853 287.629L778.486 378.357L869.22 287.629Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M823.853 242.266L823.853 196.902L778.486 242.266L823.853 242.266Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M823.853 287.629L823.853 242.266L778.486 242.266L823.853 287.629Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M823.853 196.901L823.853 151.537L778.486 151.537L823.853 196.901Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M778.486 242.266L823.853 196.902L778.486 151.538L778.486 242.266Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M823.853 151.538L823.853 106.174L778.486 151.538L823.853 151.538Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M778.486 242.266L778.486 151.538L733.119 151.538L778.486 242.266Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M823.853 287.629L778.486 242.266L733.119 287.629L823.853 287.629Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M733.119 378.357L778.486 378.357L733.119 287.629L733.119 378.357Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M778.486 1104.18L823.853 1104.18L733.119 1058.82L778.486 1104.18Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M778.486 151.538L823.853 106.174L733.119 60.8098L778.486 151.538Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M733.119 151.538L778.486 151.538L733.119 60.8098L733.119 151.538Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M823.853 106.174L823.853 60.8099L733.119 60.8099L823.853 106.174Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M778.486 378.357L733.119 378.357L687.752 469.085L778.486 378.357Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M733.119 287.629L778.486 242.266L687.752 242.266L733.119 287.629Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M733.119 151.538L733.119 60.8098L687.752 106.174L733.119 151.538Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M733.119 151.538L687.752 106.174L642.385 151.538L733.119 151.538Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M778.486 1104.18L733.119 1058.82L642.385 1149.54L778.486 1104.18Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M642.385 151.538L687.752 106.174L642.385 60.8098L642.385 151.538Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M687.752 106.174L733.119 60.8099L642.385 60.8099L687.752 106.174Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M687.752 242.266L642.385 151.538L642.385 242.266L687.752 242.266Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M642.385 786.632L687.752 741.268L642.385 741.268L642.385 786.632Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M597.018 1058.82L642.385 1058.82L597.018 968.087L597.018 1058.82Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M733.119 287.629L687.752 242.265L597.018 332.993L733.119 287.629Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M687.752 242.265L642.385 242.265L597.018 332.993L687.752 242.265Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M642.385 1149.54L642.385 1058.82L597.018 1104.18L642.385 1149.54Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M642.385 1058.82L597.018 1058.82L597.018 1104.18L642.385 1058.82Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M597.018 1058.82L597.018 968.087L551.651 968.087L597.018 1058.82Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M689 605.177L597.018 559.813L551.651 605.177L689 605.177Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M597.018 559.813L551.651 514.449L551.651 605.177L597.018 559.813Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M642.385 786.632L642.385 741.268L551.651 741.268L642.385 786.632Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M689 605.176L551.651 605.176L551.651 650.54L689 605.176Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M597.018 968.087L642.385 877.36L551.651 922.724L597.018 968.087Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M551.651 968.087L597.018 968.087L551.651 922.724L551.651 968.087Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M551.651 741.268L642.385 741.268L551.651 695.904L551.651 741.268Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M689 605.176L551.651 650.54L551.651 695.904L689 605.176Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M551.651 514.449L597.018 559.812L551.651 469.085L551.651 514.449Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M551.651 695.904L551.651 650.54L506.284 650.54L551.651 695.904Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M597.018 1058.82L551.651 968.087L506.283 1013.45L597.018 1058.82Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M597.018 1104.18L597.018 1058.82L506.283 1013.45L597.018 1104.18Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M551.651 514.449L551.651 469.085L506.284 514.449L551.651 514.449Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M551.651 605.177L551.651 514.449L506.284 605.177L551.651 605.177Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M551.651 514.449L506.284 514.449L506.284 605.177L551.651 514.449Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M551.651 650.54L551.651 605.176L506.284 605.176L551.651 650.54Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M506.284 650.54L551.651 650.54L506.284 605.176L506.284 650.54Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M642.385 786.632L551.651 741.268L506.283 786.632L642.385 786.632Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M506.283 831.996L642.385 786.632L506.283 786.632L506.283 831.996Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M642.385 242.266L551.651 151.538L506.284 196.902L642.385 242.266Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M551.651 922.724L642.385 877.36L506.284 877.36L551.651 922.724Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M642.385 877.36L506.284 831.996L506.284 877.36L642.385 877.36Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M506.284 1013.45L551.651 968.087L460.916 968.087L506.284 1013.45Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M506.284 831.996L506.284 786.632L460.916 831.996L506.284 831.996Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M506.284 786.632L460.916 786.632L460.916 831.996L506.284 786.632Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M506.284 877.36L506.284 831.996L460.916 831.996L506.284 877.36Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M460.916 877.36L506.284 877.36L460.916 831.996L460.916 877.36Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M506.284 605.177L506.284 514.449L460.916 514.449L506.284 605.177Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M506.284 514.449L551.651 469.085L460.917 514.449L506.284 514.449Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M506.284 877.36L460.917 877.36L460.917 922.724L506.284 877.36Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M551.651 922.724L506.283 877.36L460.916 922.724L551.651 922.724Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M551.651 968.087L551.651 922.724L460.916 922.724L551.651 968.087Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M460.916 968.087L551.651 968.087L460.916 922.724L460.916 968.087Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M551.651 151.538L506.284 15.4459L460.916 60.8098L551.651 151.538Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M506.284 196.901L551.651 151.537L460.916 151.537L506.284 196.901Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M460.917 60.8101L506.284 15.4462L415.549 60.8101L460.917 60.8101Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M506.284 650.54L506.284 605.176L415.55 695.904L506.284 650.54Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M506.283 786.632L551.651 741.268L415.549 695.904L506.283 786.632Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M460.917 786.632L506.284 786.632L415.549 695.904L460.917 786.632Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M551.651 741.268L551.651 695.904L415.549 695.904L551.651 741.268Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M551.651 695.904L506.284 650.54L415.549 695.904L551.651 695.904Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M506.284 1013.45L460.917 968.087L415.549 1013.45L506.284 1013.45Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M460.916 151.538L460.916 60.8098L415.549 106.174L460.916 151.538Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M460.916 60.8099L415.549 60.8099L415.549 106.174L460.916 60.8099Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M506.284 1013.45L415.55 1013.45L415.55 1058.82L506.284 1013.45Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M506.284 196.901L460.917 151.537L415.549 242.265L506.284 196.901Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M460.917 1149.54L415.549 1058.82L415.549 1149.54L460.917 1149.54Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M460.916 151.538L415.549 106.174L370.182 151.538L460.916 151.538Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M460.916 831.996L460.916 786.632L370.182 786.632L460.916 831.996Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M415.549 1149.54L415.549 1058.82L370.182 1058.82L415.549 1149.54Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M415.549 1058.82L415.549 1013.45L370.182 1013.45L415.549 1058.82Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M370.182 1058.82L415.549 1058.82L370.182 1013.45L370.182 1058.82Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M415.549 1013.45L460.917 968.087L370.182 922.723L415.549 1013.45Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M370.182 1013.45L415.549 1013.45L370.182 922.723L370.182 1013.45Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M460.917 968.087L460.917 922.724L370.182 922.724L460.917 968.087Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M415.55 242.265L370.182 287.629L370.182 378.357L415.55 242.265Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M551.651 469.085L370.182 378.357L370.182 423.721L551.651 469.085Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M460.917 877.36L460.917 831.996L370.182 877.36L460.917 877.36Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M460.917 922.724L460.917 877.36L370.182 877.36L460.917 922.724Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M370.182 922.724L460.917 922.724L370.182 877.36L370.182 922.724Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M415.549 1149.54L370.182 1058.82L324.815 1104.18L415.549 1149.54Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M460.917 514.449L370.182 423.721L324.815 469.085L460.917 514.449Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M370.182 1013.45L370.183 922.723L324.815 968.087L370.182 1013.45Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M370.182 378.357L370.183 287.629L324.815 287.629L370.182 378.357Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M370.182 786.632L324.815 695.904L279.448 741.268L370.182 786.632Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M324.815 1104.18L370.182 1058.82L279.448 1013.45L324.815 1104.18Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M370.182 1058.82L370.182 1013.45L279.448 1013.45L370.182 1058.82Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M370.182 1013.45L324.815 968.087L279.448 1013.45L370.182 1013.45Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M370.182 922.724L370.182 877.36L279.448 922.724L370.182 922.724Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M324.816 968.087L370.183 922.724L279.448 922.724L324.816 968.087Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M415.55 106.174L415.55 60.8099L279.448 106.174L415.55 106.174Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M324.815 151.538L370.182 151.538L279.448 106.174L324.815 151.538Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M370.182 151.538L415.55 106.174L279.448 106.174L370.182 151.538Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M279.448 106.174L324.815 15.4461L279.448 15.4461L279.448 106.174Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M324.815 151.537L279.448 106.174L279.448 196.901L324.815 151.537Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M279.448 287.629L324.815 287.629L279.448 196.902L279.448 287.629Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M370.182 151.537L324.815 151.537L279.448 196.901L370.182 151.537Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M370.182 287.629L415.55 242.266L279.448 196.902L370.182 287.629Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M324.815 287.629L370.182 287.629L279.448 196.902L324.815 287.629Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M370.182 378.357L324.815 287.629L279.448 332.993L370.182 378.357Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M324.815 287.629L279.448 287.629L279.448 332.993L324.815 287.629Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M324.815 695.904L324.815 469.085L279.448 695.904L324.815 695.904Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M279.448 741.268L324.815 695.904L279.448 695.904L279.448 741.268Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M279.448 332.993L279.448 287.629L234.081 287.629L279.448 332.993Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M234.081 378.357L279.448 332.993L234.081 287.629L234.081 378.357Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M279.448 1013.45L324.815 968.087L234.081 968.087L279.448 1013.45Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M324.815 968.087L279.448 922.724L234.081 968.087L324.815 968.087Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M279.448 741.268L279.448 695.904L234.081 695.904L279.448 741.268Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M279.448 196.901L279.448 106.174L234.081 196.901L279.448 196.901Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M279.448 287.629L279.448 196.902L234.081 196.902L279.448 287.629Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M234.081 287.629L279.448 287.629L234.081 196.902L234.081 287.629Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M279.448 332.993L234.081 378.357L234.081 423.721L279.448 332.993Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M370.182 423.721L370.182 378.357L234.081 423.721L370.182 423.721Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M324.815 469.085L370.182 423.721L234.081 423.721L324.815 469.085Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M324.815 469.085L234.081 423.721L234.081 469.085L324.815 469.085Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M234.081 695.904L279.448 695.904L234.081 469.085L234.081 695.904Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M234.081 423.721L234.081 378.357L188.714 378.357L234.081 423.721Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M234.081 378.357L234.081 287.629L188.714 378.357L234.081 378.357Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M279.448 1013.45L234.081 968.087L188.714 1058.82L279.448 1013.45Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M234.081 1104.18L279.448 1013.45L188.714 1058.82L234.081 1104.18Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M234.081 1104.18L188.714 1058.82L188.714 1149.54L234.081 1104.18Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M188.714 1149.54L188.714 1058.82L143.347 1149.54L188.714 1149.54Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M188.714 1058.82L143.347 1058.82L143.347 1149.54L188.714 1058.82Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M234.081 469.085L234.081 423.721L143.347 423.721L234.081 469.085Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M234.081 423.721L188.714 378.357L143.347 423.721L234.081 423.721Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M279.448 741.268L234.081 695.904L143.347 741.268L279.448 741.268Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M234.081 196.901L188.714 106.174L143.347 151.537L234.081 196.901Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M143.347 1058.82L188.714 1058.82L143.347 968.087L143.347 1058.82Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M143.347 242.266L143.347 151.538L97.9799 151.538L143.347 242.266Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M143.347 151.538L188.714 106.174L97.9798 151.538L143.347 151.538Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M143.347 741.268L97.9797 786.632L97.9797 877.36L143.347 741.268Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M234.081 968.088L279.448 922.724L97.9798 877.36L234.081 968.088Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M143.347 423.721L188.714 378.357L97.9798 332.993L143.347 423.721Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M97.9799 423.721L143.347 423.721L97.9799 332.993L97.9799 423.721Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M97.9795 877.36L97.9795 786.632L52.6124 831.996L97.9795 877.36Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M97.9799 332.993L52.6128 242.265L52.6128 332.993L97.9799 332.993Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M52.6128 423.721L97.9799 423.721L52.6128 378.357L52.6128 423.721Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M97.9799 423.721L97.9799 332.993L52.6128 378.357L97.9799 423.721Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M97.9799 332.993L52.6128 332.993L52.6128 378.357L97.9799 332.993Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M97.98 650.54L52.6129 650.54L52.6129 741.268L97.98 650.54Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M97.9797 786.632L143.347 741.268L52.6126 741.268L97.9797 786.632Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M97.9795 877.359L52.6124 831.996L7.24528 922.723L97.9795 877.359Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M52.6124 968.087L97.9795 877.36L7.24528 922.724L52.6124 968.087Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M52.6123 741.268L7.2452 741.268L7.2452 786.632L52.6123 741.268Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M52.6124 831.996L97.9795 786.632L7.24528 786.632L52.6124 831.996Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M97.9796 786.632L52.6125 741.268L7.2454 786.632L97.9796 786.632Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M97.9799 423.721L52.6128 423.721L7.24564 469.085L97.9799 423.721Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M52.6128 650.54L97.9799 650.54L7.24565 559.813L52.6128 650.54Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M143.347 423.721L97.9799 423.721L7.24572 559.812L143.347 423.721Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M52.6127 650.54L7.24557 559.813L7.24556 650.54L52.6127 650.54Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M52.6127 741.268L52.6127 650.54L7.24557 650.54L52.6127 741.268Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M7.24556 741.268L52.6127 741.268L7.24557 650.54L7.24556 741.268Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M97.9797 151.538L52.6126 15.4459L7.24553 60.8098L97.9797 151.538Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M52.6127 242.266L7.24557 151.538L-38.1215 196.902L52.6127 242.266Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M7.24548 786.632L7.24549 741.268L-38.1216 741.268L7.24548 786.632Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M7.24537 786.632L-38.1217 741.268L-38.1217 831.996L7.24537 786.632Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M52.6123 831.996L7.2452 786.632L-38.1219 831.996L52.6123 831.996Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M7.24573 559.812L7.24574 469.085L-38.1214 559.812L7.24573 559.812Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M7.24574 469.085L-38.1214 469.085L-38.1214 559.812L7.24574 469.085Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M7.24585 650.54L7.24586 559.813L-38.1213 650.54L7.24585 650.54Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M7.24586 559.813L-38.1212 559.813L-38.1213 650.54L7.24586 559.813Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M7.24585 741.268L7.24586 650.54L-38.1212 650.54L7.24585 741.268Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M-38.1213 741.268L7.24585 741.268L-38.1212 650.54L-38.1213 741.268Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M52.6128 378.357L52.6128 332.993L-38.1214 332.993L52.6128 378.357Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M7.24569 469.085L52.6128 423.721L-38.1214 332.993L7.24569 469.085Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M-38.1213 469.085L7.24585 469.085L-38.1212 332.993L-38.1213 469.085Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M52.6128 423.721L52.6128 378.357L-38.1214 332.993L52.6128 423.721Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M7.24556 60.8101L52.6127 15.4462L-38.1215 15.4462L7.24556 60.8101Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M52.6127 15.4458L-38.1215 -29.9181L-38.1215 15.4458L52.6127 15.4458Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M7.24585 151.538L7.24586 60.8098L-38.1212 15.4459L7.24585 151.538Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M-38.1213 196.901L7.24585 151.537L-38.1212 15.4458L-38.1213 196.901Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M52.6123 968.087L7.24521 922.723L-38.1219 1013.45L52.6123 968.087Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M7.24524 922.723L-38.1219 831.996L-83.489 877.359L7.24524 922.723Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M824.281 967.119L869.644 967.119L824.281 921.752L824.281 967.119Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M869.645 967.119L1005.74 967.119L960.372 921.752L869.645 967.119Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M824.281 921.752L869.644 967.119L869.644 876.385L824.281 921.752Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M824.281 967.119L824.281 921.752L778.917 876.385L824.281 967.119Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M960.372 921.752L1005.74 967.119L1051.1 876.385L960.372 921.752Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M824.281 921.752L869.644 876.385L824.281 876.385L824.281 921.752Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M778.917 876.385L824.281 921.752L824.281 876.385L778.917 876.385Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M960.372 921.752L1051.1 876.385L1005.74 831.018L960.372 921.752Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M869.645 876.385L960.372 921.752L869.645 831.018L869.645 876.385Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M824.281 876.385L869.644 876.385L869.644 831.018L824.281 876.385Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M1051.1 876.385L1187.5 876.385L1096.46 831.018L1051.1 876.385Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M1005.74 831.018L1051.1 876.385L1096.46 831.018L1005.74 831.018Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M778.917 876.385L824.281 876.385L778.917 785.651L778.917 876.385Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M824.281 876.385L869.645 831.018L778.917 785.651L824.281 876.385Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M1005.74 831.018L1096.46 831.018L1005.74 785.651L1005.74 831.018Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M1096.46 831.018L1096.46 785.651L1005.74 785.651L1096.46 831.018Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M869.645 831.018L1005.74 831.018L1005.74 785.651L869.645 831.018Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M1005.74 785.651L1096.46 785.651L1051.1 740.284L1005.74 785.651Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M1096.46 831.018L1187.5 876.385L1141.83 740.283L1096.46 831.018Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M1096.46 785.651L1096.46 831.018L1141.83 740.284L1096.46 785.651Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M778.917 785.651L869.645 831.018L824.281 740.284L778.917 785.651Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M869.644 831.018L869.644 740.284L824.281 740.284L869.644 831.018Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M1005.74 785.651L1051.1 740.284L1005.74 694.916L1005.74 785.651Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M1141.83 740.283L1141.83 694.916L1096.46 694.916L1141.83 740.283Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M1051.1 740.284L1096.46 785.651L1096.46 694.916L1051.1 740.284Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M1096.46 785.651L1141.83 740.284L1096.46 694.916L1096.46 785.651Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M1141.83 694.916L1141.83 740.283L1187.19 649.549L1141.83 694.916Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M1005.74 694.916L1051.1 740.283L1051.1 649.549L1005.74 694.916Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M1051.1 740.283L1096.46 694.916L1051.1 649.549L1051.1 740.283Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M1005.74 694.917L1051.1 649.549L915.008 604.182L1005.74 694.917Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M824.281 740.283L869.644 740.283L915.008 604.182L824.281 740.283Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M1141.83 694.917L1187.19 649.549L1096.46 558.815L1141.83 694.917Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M1096.46 694.917L1141.83 694.917L1096.46 558.815L1096.46 694.917Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M1051.1 649.549L1096.46 694.917L1096.46 558.815L1051.1 649.549Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M778.918 785.651L824.282 740.284L689 469.499L778.918 785.651Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path opacity=\"0.3922\" d=\"M824.283 740.283L824.283 513.448L779 377.999L824.283 740.283Z\" stroke=\"#445B78\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path d=\"M189.631 373.273C186.87 373.273 184.631 375.512 184.631 378.273C184.631 381.035 186.87 383.273 189.631 383.273C192.393 383.273 194.631 381.035 194.631 378.273C194.631 375.512 192.393 373.273 189.631 373.273Z\" fill=\"#435E8A\"/>\n            <path d=\"M416.467 55.7261C413.705 55.7261 411.467 57.9646 411.467 60.7261C411.467 63.4875 413.705 65.7261 416.467 65.7261C419.228 65.7261 421.467 63.4875 421.467 60.7261C421.467 57.9647 419.228 55.7261 416.467 55.7261Z\" fill=\"#435E8A\"/>\n            <path d=\"M144.264 1053.73C141.502 1053.73 139.264 1055.97 139.264 1058.73C139.264 1061.49 141.502 1063.73 144.264 1063.73C147.025 1063.73 149.264 1061.49 149.264 1058.73C149.264 1055.97 147.025 1053.73 144.264 1053.73Z\" fill=\"#435E8A\"/>\n            <path d=\"M1278.44 963.004C1275.68 963.004 1273.44 965.242 1273.44 968.004C1273.44 970.765 1275.68 973.004 1278.44 973.004C1281.2 973.004 1283.44 970.765 1283.44 968.004C1283.44 965.242 1281.2 963.004 1278.44 963.004Z\" fill=\"#9FB2FF\"/>\n            <path d=\"M597.935 1053.73C595.174 1053.73 592.935 1055.97 592.935 1058.73C592.935 1061.49 595.174 1063.73 597.935 1063.73C600.697 1063.73 602.935 1061.49 602.935 1058.73C602.935 1055.97 600.697 1053.73 597.935 1053.73Z\" fill=\"#435E8A\"/>\n            <path d=\"M461.834 963.004C459.072 963.004 456.834 965.242 456.834 968.004C456.834 970.765 459.072 973.004 461.834 973.004C464.595 973.004 466.834 970.765 466.834 968.004C466.834 965.242 464.595 963.004 461.834 963.004Z\" fill=\"#435E8A\"/>\n            <path d=\"M1278.44 282.546C1275.68 282.546 1273.44 284.784 1273.44 287.546C1273.44 290.307 1275.68 292.546 1278.44 292.546C1281.2 292.546 1283.44 290.307 1283.44 287.546C1283.44 284.784 1281.2 282.546 1278.44 282.546Z\" fill=\"#435E8A\"/>\n            <path d=\"M8.16309 736.185C5.40166 736.185 3.16309 738.423 3.16309 741.185C3.16309 743.946 5.40166 746.185 8.16309 746.185C10.9245 746.185 13.1631 743.946 13.1631 741.185C13.1631 738.423 10.9245 736.185 8.16309 736.185Z\" fill=\"#435E8A\"/>\n            <path d=\"M734.036 146.454C731.275 146.454 729.036 148.693 729.036 151.454C729.036 154.216 731.275 156.454 734.036 156.454C736.798 156.454 739.036 154.216 739.036 151.454C739.036 148.693 736.798 146.454 734.036 146.454Z\" fill=\"#435E8A\"/>\n            <path d=\"M53.5299 645.457C50.7685 645.457 48.5299 647.695 48.5299 650.457C48.5299 653.218 50.7685 655.457 53.5299 655.457C56.2913 655.457 58.5299 653.218 58.5299 650.457C58.5299 647.695 56.2913 645.457 53.5299 645.457Z\" fill=\"#435E8A\"/>\n            <path d=\"M280.366 736.185C277.604 736.185 275.366 738.423 275.366 741.185C275.366 743.946 277.604 746.185 280.366 746.185C283.127 746.185 285.366 743.946 285.366 741.185C285.366 738.423 283.127 736.185 280.366 736.185Z\" fill=\"#435E8A\"/>\n            <path d=\"M824.771 55.7261C822.009 55.7261 819.771 57.9646 819.771 60.7261C819.771 63.4875 822.009 65.7261 824.771 65.7261C827.532 65.7261 829.771 63.4875 829.771 60.7261C829.771 57.9647 827.532 55.7261 824.771 55.7261Z\" fill=\"#435E8A\"/>\n            <path d=\"M870.138 146.454C867.376 146.454 865.138 148.693 865.138 151.454C865.138 154.216 867.376 156.454 870.138 156.454C872.899 156.454 875.138 154.216 875.138 151.454C875.138 148.693 872.899 146.454 870.138 146.454Z\" fill=\"#435E8A\"/>\n            <path d=\"M1187.71 10.3623C1184.95 10.3623 1182.71 12.6009 1182.71 15.3623C1182.71 18.1237 1184.95 20.3623 1187.71 20.3623C1190.47 20.3623 1192.71 18.1237 1192.71 15.3623C1192.71 12.6009 1190.47 10.3623 1187.71 10.3623Z\" fill=\"#435E8A\"/>\n            <path d=\"M779.404 373.273C776.642 373.273 774.404 375.512 774.404 378.273C774.404 381.035 776.642 383.273 779.404 383.273C782.165 383.273 784.404 381.035 784.404 378.273C784.404 375.512 782.165 373.273 779.404 373.273Z\" fill=\"#CDB4FF\"/>\n            <path d=\"M1369.18 373.274C1366.41 373.274 1364.18 375.513 1364.18 378.274C1364.18 381.035 1366.41 383.274 1369.18 383.274C1371.94 383.274 1374.18 381.035 1374.18 378.274C1374.18 375.513 1371.94 373.274 1369.18 373.274Z\" fill=\"#435E8A\"/>\n            <path d=\"M461.834 872.276C459.072 872.276 456.834 874.515 456.834 877.276C456.834 880.038 459.072 882.276 461.834 882.276C464.595 882.276 466.834 880.038 466.834 877.276C466.834 874.515 464.595 872.276 461.834 872.276Z\" fill=\"#435E8A\"/>\n            <path d=\"M1051.61 146.454C1048.84 146.454 1046.61 148.693 1046.61 151.454C1046.61 154.216 1048.84 156.454 1051.61 156.454C1054.37 156.454 1056.61 154.216 1056.61 151.454C1056.61 148.693 1054.37 146.454 1051.61 146.454Z\" fill=\"#435E8A\"/>\n            <path d=\"M824.771 101.09C822.009 101.09 819.771 103.329 819.771 106.09C819.771 108.852 822.009 111.09 824.771 111.09C827.532 111.09 829.771 108.852 829.771 106.09C829.771 103.329 827.532 101.09 824.771 101.09Z\" fill=\"#435E8A\"/>\n            <path d=\"M1414.54 781.549C1411.78 781.549 1409.54 783.787 1409.54 786.549C1409.54 789.31 1411.78 791.549 1414.54 791.549C1417.3 791.549 1419.54 789.31 1419.54 786.549C1419.54 783.787 1417.3 781.549 1414.54 781.549Z\" fill=\"#FF9376\"/>\n            <path d=\"M1142.34 10.3623C1139.58 10.3623 1137.34 12.6009 1137.34 15.3623C1137.34 18.1237 1139.58 20.3623 1142.34 20.3623C1145.1 20.3623 1147.34 18.1237 1147.34 15.3623C1147.34 12.6009 1145.1 10.3623 1142.34 10.3623Z\" fill=\"#EB7F86\"/>\n            <path d=\"M416.467 690.821C413.705 690.821 411.467 693.059 411.467 695.821C411.467 698.582 413.705 700.821 416.467 700.821C419.228 700.821 421.467 698.582 421.467 695.821C421.467 693.059 419.228 690.821 416.467 690.821Z\" fill=\"#435E8A\"/>\n            <path d=\"M870.138 282.546C867.377 282.546 865.138 284.784 865.138 287.546C865.138 290.307 867.377 292.546 870.138 292.546C872.899 292.546 875.138 290.307 875.138 287.546C875.138 284.784 872.899 282.546 870.138 282.546Z\" fill=\"#435E8A\"/>\n            <path d=\"M189.631 1053.73C186.87 1053.73 184.631 1055.97 184.631 1058.73C184.631 1061.49 186.87 1063.73 189.631 1063.73C192.393 1063.73 194.631 1061.49 194.631 1058.73C194.631 1055.97 192.393 1053.73 189.631 1053.73Z\" fill=\"#435E8A\"/>\n            <path d=\"M1596.01 464.001C1593.25 464.001 1591.01 466.24 1591.01 469.001C1591.01 471.763 1593.25 474.001 1596.01 474.001C1598.77 474.001 1601.01 471.763 1601.01 469.001C1601.01 466.24 1598.77 464.001 1596.01 464.001Z\" fill=\"#435E8A\"/>\n            <path d=\"M144.264 418.637C141.503 418.637 139.264 420.876 139.264 423.637C139.264 426.399 141.503 428.637 144.264 428.637C147.026 428.637 149.264 426.399 149.264 423.637C149.264 420.876 147.026 418.637 144.264 418.637Z\" fill=\"#435E8A\"/>\n            <path d=\"M959.581 1099C956.819 1099 954.581 1101.24 954.581 1104C954.581 1106.76 956.819 1109 959.581 1109C962.342 1109 964.581 1106.76 964.581 1104C964.581 1101.24 962.342 1099 959.581 1099Z\" fill=\"#57ABFF\"/>\n            <path d=\"M1550.64 736.185C1547.88 736.185 1545.64 738.423 1545.64 741.185C1545.64 743.946 1547.88 746.185 1550.64 746.185C1553.41 746.185 1555.64 743.946 1555.64 741.185C1555.64 738.423 1553.41 736.185 1550.64 736.185Z\" fill=\"#435E8A\"/>\n            <path d=\"M461.834 781.548C459.072 781.548 456.834 783.787 456.834 786.548C456.834 789.31 459.072 791.548 461.834 791.548C464.595 791.548 466.834 789.31 466.834 786.548C466.834 783.787 464.595 781.548 461.834 781.548Z\" fill=\"#435E8A\"/>\n            <path d=\"M416.467 1008.37C413.705 1008.37 411.467 1010.61 411.467 1013.37C411.467 1016.13 413.705 1018.37 416.467 1018.37C419.228 1018.37 421.467 1016.13 421.467 1013.37C421.467 1010.61 419.228 1008.37 416.467 1008.37Z\" fill=\"#435E8A\"/>\n            <path d=\"M1278.44 600.093C1275.68 600.093 1273.44 602.332 1273.44 605.093C1273.44 607.855 1275.68 610.093 1278.44 610.093C1281.2 610.093 1283.44 607.855 1283.44 605.093C1283.44 602.332 1281.2 600.093 1278.44 600.093Z\" fill=\"#435E8A\"/>\n            <path d=\"M280.365 1008.37C277.604 1008.37 275.365 1010.61 275.365 1013.37C275.365 1016.13 277.604 1018.37 280.365 1018.37C283.127 1018.37 285.365 1016.13 285.365 1013.37C285.365 1010.61 283.127 1008.37 280.365 1008.37Z\" fill=\"#435E8A\"/>\n            <path d=\"M1596.01 917.64C1593.25 917.64 1591.01 919.879 1591.01 922.64C1591.01 925.402 1593.25 927.64 1596.01 927.64C1598.77 927.64 1601.01 925.402 1601.01 922.64C1601.01 919.879 1598.77 917.64 1596.01 917.64Z\" fill=\"#435E8A\"/>\n            <path d=\"M53.5299 10.3623C50.7685 10.3623 48.5299 12.6009 48.5299 15.3623C48.5299 18.1237 50.7685 20.3623 53.5299 20.3623C56.2913 20.3623 58.5299 18.1237 58.5299 15.3623C58.5299 12.6009 56.2913 10.3623 53.5299 10.3623Z\" fill=\"#435E8A\"/>\n            <path d=\"M507.201 645.457C504.44 645.457 502.201 647.695 502.201 650.457C502.201 653.218 504.44 655.457 507.201 655.457C509.963 655.457 512.201 653.218 512.201 650.457C512.201 647.695 509.963 645.457 507.201 645.457Z\" fill=\"#4CCA77\"/>\n            <path d=\"M416.467 101.09C413.705 101.09 411.467 103.328 411.467 106.09C411.467 108.851 413.705 111.09 416.467 111.09C419.228 111.09 421.467 108.851 421.467 106.09C421.467 103.328 419.228 101.09 416.467 101.09Z\" fill=\"#435E8A\"/>\n            <path d=\"M643.302 872.276C640.541 872.276 638.302 874.515 638.302 877.276C638.302 880.038 640.541 882.276 643.302 882.276C646.064 882.276 648.302 880.038 648.302 877.276C648.302 874.515 646.064 872.276 643.302 872.276Z\" fill=\"#435E8A\"/>\n            <path d=\"M1096.97 327.91C1094.21 327.91 1091.97 330.148 1091.97 332.91C1091.97 335.671 1094.21 337.91 1096.97 337.91C1099.73 337.91 1101.97 335.671 1101.97 332.91C1101.97 330.148 1099.73 327.91 1096.97 327.91Z\" fill=\"#2BAEFF\"/>\n            <path d=\"M688.669 464.001C685.908 464.001 683.669 466.24 683.669 469.001C683.669 471.763 685.908 474.001 688.669 474.001C691.431 474.001 693.669 471.763 693.669 469.001C693.669 466.24 691.431 464.001 688.669 464.001Z\" fill=\"#435E8A\"/>\n            <path d=\"M1323.81 282.546C1321.05 282.546 1318.81 284.784 1318.81 287.546C1318.81 290.307 1321.05 292.546 1323.81 292.546C1326.57 292.546 1328.81 290.307 1328.81 287.546C1328.81 284.784 1326.57 282.546 1323.81 282.546Z\" fill=\"#435E8A\"/>\n            <path d=\"M597.935 963.004C595.174 963.004 592.935 965.242 592.935 968.004C592.935 970.765 595.174 973.004 597.935 973.004C600.697 973.004 602.935 970.765 602.935 968.004C602.935 965.242 600.697 963.004 597.935 963.004Z\" fill=\"#435E8A\"/>\n            <path d=\"M1596.01 1053.73C1593.25 1053.73 1591.01 1055.97 1591.01 1058.73C1591.01 1061.49 1593.25 1063.73 1596.01 1063.73C1598.77 1063.73 1601.01 1061.49 1601.01 1058.73C1601.01 1055.97 1598.77 1053.73 1596.01 1053.73Z\" fill=\"#435E8A\"/>\n            <path d=\"M461.834 826.912C459.072 826.912 456.834 829.151 456.834 831.912C456.834 834.674 459.072 836.912 461.834 836.912C464.595 836.912 466.834 834.674 466.834 831.912C466.834 829.151 464.595 826.912 461.834 826.912Z\" fill=\"#435E8A\"/>\n            <path d=\"M53.5298 826.912C50.7684 826.912 48.5298 829.151 48.5298 831.912C48.5298 834.674 50.7684 836.912 53.5298 836.912C56.2912 836.912 58.5298 834.674 58.5298 831.912C58.5298 829.151 56.2912 826.912 53.5298 826.912Z\" fill=\"#435E8A\"/>\n            <path d=\"M189.631 101.09C186.87 101.09 184.631 103.328 184.631 106.09C184.631 108.851 186.87 111.09 189.631 111.09C192.393 111.09 194.631 108.851 194.631 106.09C194.631 103.328 192.393 101.09 189.631 101.09Z\" fill=\"#435E8A\"/>\n            <path d=\"M234.999 373.273C232.237 373.273 229.999 375.512 229.999 378.273C229.999 381.035 232.237 383.273 234.999 383.273C237.76 383.273 239.999 381.035 239.999 378.273C239.999 375.512 237.76 373.273 234.999 373.273Z\" fill=\"#435E8A\"/>\n            <path d=\"M416.467 1053.73C413.705 1053.73 411.467 1055.97 411.467 1058.73C411.467 1061.49 413.705 1063.73 416.467 1063.73C419.228 1063.73 421.467 1061.49 421.467 1058.73C421.467 1055.97 419.228 1053.73 416.467 1053.73Z\" fill=\"#435E8A\"/>\n            <path d=\"M1142.34 146.454C1139.58 146.454 1137.34 148.693 1137.34 151.454C1137.34 154.216 1139.58 156.454 1142.34 156.454C1145.1 156.454 1147.34 154.216 1147.34 151.454C1147.34 148.693 1145.1 146.454 1142.34 146.454Z\" fill=\"#FF9038\"/>\n            <path d=\"M507.201 1008.37C504.44 1008.37 502.201 1010.61 502.201 1013.37C502.201 1016.13 504.44 1018.37 507.201 1018.37C509.962 1018.37 512.201 1016.13 512.201 1013.37C512.201 1010.61 509.962 1008.37 507.201 1008.37Z\" fill=\"#435E8A\"/>\n            <path d=\"M1323.81 872.276C1321.05 872.276 1318.81 874.515 1318.81 877.276C1318.81 880.038 1321.05 882.276 1323.81 882.276C1326.57 882.276 1328.81 880.038 1328.81 877.276C1328.81 874.515 1326.57 872.276 1323.81 872.276Z\" fill=\"#435E8A\"/>\n            <path d=\"M1096.97 10.3623C1094.21 10.3623 1091.97 12.6009 1091.97 15.3623C1091.97 18.1237 1094.21 20.3623 1096.97 20.3623C1099.73 20.3623 1101.97 18.1237 1101.97 15.3623C1101.97 12.6009 1099.73 10.3623 1096.97 10.3623Z\" fill=\"#435E8A\"/>\n            <path d=\"M643.302 781.548C640.541 781.548 638.302 783.787 638.302 786.548C638.302 789.31 640.541 791.548 643.302 791.548C646.064 791.548 648.302 789.31 648.302 786.548C648.302 783.787 646.064 781.548 643.302 781.548Z\" fill=\"#435E8A\"/>\n            <path d=\"M1369.18 554.729C1366.41 554.729 1364.18 556.968 1364.18 559.729C1364.18 562.491 1366.41 564.729 1369.18 564.729C1371.94 564.729 1374.18 562.491 1374.18 559.729C1374.18 556.968 1371.94 554.729 1369.18 554.729Z\" fill=\"#E16F7C\"/>\n            <path d=\"M461.834 509.365C459.072 509.365 456.834 511.604 456.834 514.365C456.834 517.127 459.072 519.365 461.834 519.365C464.595 519.365 466.834 517.127 466.834 514.365C466.834 511.604 464.595 509.365 461.834 509.365Z\" fill=\"#435E8A\"/>\n            <path d=\"M597.935 327.91C595.174 327.91 592.935 330.148 592.935 332.91C592.935 335.671 595.174 337.91 597.935 337.91C600.697 337.91 602.935 335.671 602.935 332.91C602.935 330.148 600.697 327.91 597.935 327.91Z\" fill=\"#435E8A\"/>\n            <path d=\"M507.201 509.365C504.44 509.365 502.201 511.604 502.201 514.365C502.201 517.127 504.44 519.365 507.201 519.365C509.963 519.365 512.201 517.127 512.201 514.365C512.201 511.604 509.963 509.365 507.201 509.365Z\" fill=\"#435E8A\"/>\n            <path d=\"M1323.81 10.3623C1321.05 10.3623 1318.81 12.6009 1318.81 15.3623C1318.81 18.1237 1321.05 20.3623 1323.81 20.3623C1326.57 20.3623 1328.81 18.1237 1328.81 15.3623C1328.81 12.6009 1326.57 10.3623 1323.81 10.3623Z\" fill=\"#435E8A\"/>\n            <path d=\"M1233.07 55.7261C1230.31 55.7261 1228.07 57.9646 1228.07 60.7261C1228.07 63.4875 1230.31 65.7261 1233.07 65.7261C1235.84 65.7261 1238.07 63.4875 1238.07 60.7261C1238.07 57.9647 1235.84 55.7261 1233.07 55.7261Z\" fill=\"#435E8A\"/>\n            <path d=\"M280.365 917.64C277.604 917.64 275.365 919.879 275.365 922.64C275.365 925.402 277.604 927.64 280.365 927.64C283.127 927.64 285.365 925.402 285.365 922.64C285.365 919.879 283.127 917.64 280.365 917.64Z\" fill=\"#435E8A\"/>\n            <path d=\"M1187.71 282.546C1184.95 282.546 1182.71 284.784 1182.71 287.546C1182.71 290.307 1184.95 292.546 1187.71 292.546C1190.47 292.546 1192.71 290.307 1192.71 287.546C1192.71 284.784 1190.47 282.546 1187.71 282.546Z\" fill=\"#435E8A\"/>\n            <path d=\"M325.732 464.001C322.971 464.001 320.732 466.24 320.732 469.001C320.732 471.762 322.971 474.001 325.732 474.001C328.494 474.001 330.732 471.762 330.732 469.001C330.732 466.24 328.494 464.001 325.732 464.001Z\" fill=\"#435E8A\"/>\n            <path d=\"M371.1 146.454C368.338 146.454 366.1 148.693 366.1 151.454C366.1 154.216 368.338 156.454 371.1 156.454C373.861 156.454 376.1 154.216 376.1 151.454C376.1 148.693 373.861 146.454 371.1 146.454Z\" fill=\"#435E8A\"/>\n            <path d=\"M1369.18 509.365C1366.41 509.365 1364.18 511.604 1364.18 514.365C1364.18 517.127 1366.41 519.365 1369.18 519.365C1371.94 519.365 1374.18 517.127 1374.18 514.365C1374.18 511.604 1371.94 509.365 1369.18 509.365Z\" fill=\"#435E8A\"/>\n            <path d=\"M507.201 826.912C504.44 826.912 502.201 829.151 502.201 831.912C502.201 834.674 504.44 836.912 507.201 836.912C509.962 836.912 512.201 834.674 512.201 831.912C512.201 829.151 509.962 826.912 507.201 826.912Z\" fill=\"#435E8A\"/>\n            <path d=\"M1459.91 645.457C1457.15 645.457 1454.91 647.696 1454.91 650.457C1454.91 653.218 1457.15 655.457 1459.91 655.457C1462.67 655.457 1464.91 653.218 1464.91 650.457C1464.91 647.696 1462.67 645.457 1459.91 645.457Z\" fill=\"#435E8A\"/>\n            <path d=\"M1596.01 509.365C1593.25 509.365 1591.01 511.604 1591.01 514.365C1591.01 517.127 1593.25 519.365 1596.01 519.365C1598.77 519.365 1601.01 517.127 1601.01 514.365C1601.01 511.604 1598.77 509.365 1596.01 509.365Z\" fill=\"#435E8A\"/>\n            <path d=\"M1233.07 600.093C1230.31 600.093 1228.07 602.332 1228.07 605.093C1228.07 607.855 1230.31 610.093 1233.07 610.093C1235.84 610.093 1238.07 607.855 1238.07 605.093C1238.07 602.332 1235.84 600.093 1233.07 600.093Z\" fill=\"#9FDBFF\"/>\n            <path d=\"M643.302 146.454C640.541 146.454 638.302 148.693 638.302 151.454C638.302 154.216 640.541 156.454 643.302 156.454C646.064 156.454 648.302 154.216 648.302 151.454C648.302 148.693 646.064 146.454 643.302 146.454Z\" fill=\"#68B3FF\"/>\n            <path d=\"M915.505 10.3623C912.743 10.3623 910.505 12.6009 910.505 15.3623C910.505 18.1237 912.743 20.3623 915.505 20.3623C918.266 20.3623 920.505 18.1237 920.505 15.3623C920.505 12.6009 918.266 10.3623 915.505 10.3623Z\" fill=\"#435E8A\"/>\n            <path d=\"M824.771 282.546C822.009 282.546 819.771 284.784 819.771 287.546C819.771 290.307 822.009 292.546 824.771 292.546C827.532 292.546 829.771 290.307 829.771 287.546C829.771 284.784 827.532 282.546 824.771 282.546Z\" fill=\"#435E8A\"/>\n            <path d=\"M53.5299 237.182C50.7685 237.182 48.5299 239.42 48.5299 242.182C48.5299 244.943 50.7685 247.182 53.5299 247.182C56.2913 247.182 58.5299 244.943 58.5299 242.182C58.5299 239.42 56.2913 237.182 53.5299 237.182Z\" fill=\"#435E8A\"/>\n            <path d=\"M824.771 191.818C822.009 191.818 819.771 194.056 819.771 196.818C819.771 199.579 822.009 201.818 824.771 201.818C827.532 201.818 829.771 199.579 829.771 196.818C829.771 194.056 827.532 191.818 824.771 191.818Z\" fill=\"#435E8A\"/>\n            <path d=\"M1505.28 1008.37C1502.52 1008.37 1500.28 1010.61 1500.28 1013.37C1500.28 1016.13 1502.52 1018.37 1505.28 1018.37C1508.04 1018.37 1510.28 1016.13 1510.28 1013.37C1510.28 1010.61 1508.04 1008.37 1505.28 1008.37Z\" fill=\"#73A8FF\"/>\n            <path d=\"M552.568 963.004C549.807 963.004 547.568 965.242 547.568 968.004C547.568 970.765 549.807 973.004 552.568 973.004C555.33 973.004 557.568 970.765 557.568 968.004C557.568 965.242 555.33 963.004 552.568 963.004Z\" fill=\"#435E8A\"/>\n            <path d=\"M1777.48 237.182C1774.72 237.182 1772.48 239.421 1772.48 242.182C1772.48 244.944 1774.72 247.182 1777.48 247.182C1780.24 247.182 1782.48 244.944 1782.48 242.182C1782.48 239.421 1780.24 237.182 1777.48 237.182Z\" fill=\"#435E8A\"/>\n            <path d=\"M53.5299 418.637C50.7685 418.637 48.5299 420.876 48.5299 423.637C48.5299 426.399 50.7685 428.637 53.5299 428.637C56.2913 428.637 58.5299 426.399 58.5299 423.637C58.5299 420.876 56.2913 418.637 53.5299 418.637Z\" fill=\"#435E8A\"/>\n            <path d=\"M1414.54 146.454C1411.78 146.454 1409.54 148.693 1409.54 151.454C1409.54 154.216 1411.78 156.454 1414.54 156.454C1417.3 156.454 1419.54 154.216 1419.54 151.454C1419.54 148.693 1417.3 146.454 1414.54 146.454Z\" fill=\"#435E8A\"/>\n            <path d=\"M144.264 237.182C141.503 237.182 139.264 239.42 139.264 242.182C139.264 244.943 141.503 247.182 144.264 247.182C147.026 247.182 149.264 244.943 149.264 242.182C149.264 239.42 147.026 237.182 144.264 237.182Z\" fill=\"#435E8A\"/>\n            <path d=\"M1051.61 55.7261C1048.84 55.7261 1046.61 57.9646 1046.61 60.7261C1046.61 63.4875 1048.84 65.7261 1051.61 65.7261C1054.37 65.7261 1056.61 63.4875 1056.61 60.7261C1056.61 57.9647 1054.37 55.7261 1051.61 55.7261Z\" fill=\"#435E8A\"/>\n            <path d=\"M1369.18 282.546C1366.41 282.546 1364.18 284.784 1364.18 287.546C1364.18 290.307 1366.41 292.546 1369.18 292.546C1371.94 292.546 1374.18 290.307 1374.18 287.546C1374.18 284.784 1371.94 282.546 1369.18 282.546Z\" fill=\"#435E8A\"/>\n            <path d=\"M234.999 282.546C232.237 282.546 229.999 284.784 229.999 287.546C229.999 290.307 232.237 292.546 234.999 292.546C237.76 292.546 239.999 290.307 239.999 287.546C239.999 284.784 237.76 282.546 234.999 282.546Z\" fill=\"#435E8A\"/>\n            <path d=\"M597.935 554.729C595.174 554.729 592.935 556.968 592.935 559.729C592.935 562.491 595.174 564.729 597.935 564.729C600.697 564.729 602.935 562.491 602.935 559.729C602.935 556.968 600.697 554.729 597.935 554.729Z\" fill=\"#435E8A\"/>\n            <path d=\"M1641.38 464.001C1638.62 464.001 1636.38 466.24 1636.38 469.001C1636.38 471.763 1638.62 474.001 1641.38 474.001C1644.14 474.001 1646.38 471.763 1646.38 469.001C1646.38 466.24 1644.14 464.001 1641.38 464.001Z\" fill=\"#435E8A\"/>\n            <path d=\"M8.16284 917.64C5.40142 917.64 3.16284 919.879 3.16284 922.64C3.16284 925.402 5.40142 927.64 8.16284 927.64C10.9243 927.64 13.1628 925.402 13.1628 922.64C13.1628 919.879 10.9243 917.64 8.16284 917.64Z\" fill=\"#435E8A\"/>\n            <path d=\"M507.201 600.093C504.44 600.093 502.201 602.332 502.201 605.093C502.201 607.854 504.44 610.093 507.201 610.093C509.963 610.093 512.201 607.854 512.201 605.093C512.201 602.332 509.963 600.093 507.201 600.093Z\" fill=\"#435E8A\"/>\n            <path d=\"M552.568 509.365C549.807 509.365 547.568 511.604 547.568 514.365C547.568 517.127 549.807 519.365 552.568 519.365C555.33 519.365 557.568 517.127 557.568 514.365C557.568 511.604 555.33 509.365 552.568 509.365Z\" fill=\"#435E8A\"/>\n            <path d=\"M1369.18 781.549C1366.41 781.549 1364.18 783.787 1364.18 786.549C1364.18 789.31 1366.41 791.549 1369.18 791.549C1371.94 791.549 1374.18 789.31 1374.18 786.549C1374.18 783.787 1371.94 781.549 1369.18 781.549Z\" fill=\"#435E8A\"/>\n            <path d=\"M1233.07 917.64C1230.31 917.64 1228.07 919.879 1228.07 922.64C1228.07 925.402 1230.31 927.64 1233.07 927.64C1235.84 927.64 1238.07 925.402 1238.07 922.64C1238.07 919.879 1235.84 917.64 1233.07 917.64Z\" fill=\"#435E8A\"/>\n            <path d=\"M1550.64 917.64C1547.88 917.64 1545.64 919.879 1545.64 922.64C1545.64 925.402 1547.88 927.64 1550.64 927.64C1553.41 927.64 1555.64 925.402 1555.64 922.64C1555.64 919.879 1553.41 917.64 1550.64 917.64Z\" fill=\"#435E8A\"/>\n            <path d=\"M325.733 690.821C322.971 690.821 320.733 693.059 320.733 695.821C320.733 698.582 322.971 700.821 325.733 700.821C328.494 700.821 330.733 698.582 330.733 695.821C330.733 693.059 328.494 690.821 325.733 690.821Z\" fill=\"#435E8A\"/>\n            <path d=\"M1323.81 1053.73C1321.05 1053.73 1318.81 1055.97 1318.81 1058.73C1318.81 1061.49 1321.05 1063.73 1323.81 1063.73C1326.57 1063.73 1328.81 1061.49 1328.81 1058.73C1328.81 1055.97 1326.57 1053.73 1323.81 1053.73Z\" fill=\"#435E8A\"/>\n            <path d=\"M1777.48 736.185C1774.72 736.185 1772.48 738.423 1772.48 741.185C1772.48 743.946 1774.72 746.185 1777.48 746.185C1780.24 746.185 1782.48 743.946 1782.48 741.185C1782.48 738.423 1780.24 736.185 1777.48 736.185Z\" fill=\"#435E8A\"/>\n            <path d=\"M280.366 282.546C277.604 282.546 275.366 284.784 275.366 287.546C275.366 290.307 277.604 292.546 280.366 292.546C283.127 292.546 285.366 290.307 285.366 287.546C285.366 284.784 283.127 282.546 280.366 282.546Z\" fill=\"#435E8A\"/>\n            <path d=\"M1369.18 917.64C1366.41 917.64 1364.18 919.879 1364.18 922.64C1364.18 925.402 1366.41 927.64 1369.18 927.64C1371.94 927.64 1374.18 925.402 1374.18 922.64C1374.18 919.879 1371.94 917.64 1369.18 917.64Z\" fill=\"#435E8A\"/>\n            <path d=\"M1686.75 1008.37C1683.98 1008.37 1681.75 1010.61 1681.75 1013.37C1681.75 1016.13 1683.98 1018.37 1686.75 1018.37C1689.51 1018.37 1691.75 1016.13 1691.75 1013.37C1691.75 1010.61 1689.51 1008.37 1686.75 1008.37Z\" fill=\"#435E8A\"/>\n            <path d=\"M1187.71 963.004C1184.95 963.004 1182.71 965.242 1182.71 968.004C1182.71 970.765 1184.95 973.004 1187.71 973.004C1190.47 973.004 1192.71 970.765 1192.71 968.004C1192.71 965.242 1190.47 963.004 1187.71 963.004Z\" fill=\"#435E8A\"/>\n            <path d=\"M53.5299 327.91C50.7685 327.91 48.5299 330.148 48.5299 332.91C48.5299 335.671 50.7685 337.91 53.5299 337.91C56.2913 337.91 58.5299 335.671 58.5299 332.91C58.5299 330.148 56.2913 327.91 53.5299 327.91Z\" fill=\"#435E8A\"/>\n            <path d=\"M1369.18 464.001C1366.41 464.001 1364.18 466.24 1364.18 469.001C1364.18 471.763 1366.41 474.001 1369.18 474.001C1371.94 474.001 1374.18 471.763 1374.18 469.001C1374.18 466.24 1371.94 464.001 1369.18 464.001Z\" fill=\"#435E8A\"/>\n            <path d=\"M234.998 963.004C232.237 963.004 229.998 965.242 229.998 968.004C229.998 970.765 232.237 973.004 234.998 973.004C237.76 973.004 239.998 970.765 239.998 968.004C239.998 965.242 237.76 963.004 234.998 963.004Z\" fill=\"#435E8A\"/>\n            <path d=\"M280.365 101.09C277.604 101.09 275.365 103.328 275.365 106.09C275.365 108.851 277.604 111.09 280.365 111.09C283.127 111.09 285.365 108.851 285.365 106.09C285.365 103.328 283.127 101.09 280.365 101.09Z\" fill=\"#435E8A\"/>\n            <path d=\"M960.872 10.3623C958.111 10.3623 955.872 12.6009 955.872 15.3623C955.872 18.1237 958.111 20.3623 960.872 20.3623C963.633 20.3623 965.872 18.1237 965.872 15.3623C965.872 12.6009 963.633 10.3623 960.872 10.3623Z\" fill=\"#435E8A\"/>\n            <path d=\"M461.834 917.64C459.072 917.64 456.834 919.879 456.834 922.64C456.834 925.402 459.072 927.64 461.834 927.64C464.595 927.64 466.834 925.402 466.834 922.64C466.834 919.879 464.595 917.64 461.834 917.64Z\" fill=\"#435E8A\"/>\n            <path d=\"M416.467 237.182C413.705 237.182 411.467 239.42 411.467 242.182C411.467 244.943 413.705 247.182 416.467 247.182C419.228 247.182 421.467 244.943 421.467 242.182C421.467 239.42 419.228 237.182 416.467 237.182Z\" fill=\"#435E8A\"/>\n            <path d=\"M734.036 373.273C731.275 373.273 729.036 375.512 729.036 378.273C729.036 381.035 731.275 383.273 734.036 383.273C736.798 383.273 739.036 381.035 739.036 378.273C739.036 375.512 736.798 373.273 734.036 373.273Z\" fill=\"#435E8A\"/>\n            <path d=\"M1777.48 55.7261C1774.72 55.7261 1772.48 57.9646 1772.48 60.7261C1772.48 63.4875 1774.72 65.7261 1777.48 65.7261C1780.24 65.7261 1782.48 63.4875 1782.48 60.7261C1782.48 57.9647 1780.24 55.7261 1777.48 55.7261Z\" fill=\"#435E8A\"/>\n            <path d=\"M1505.28 736.185C1502.52 736.185 1500.28 738.423 1500.28 741.185C1500.28 743.946 1502.52 746.185 1505.28 746.185C1508.04 746.185 1510.28 743.946 1510.28 741.185C1510.28 738.423 1508.04 736.185 1505.28 736.185Z\" fill=\"#435E8A\"/>\n            <path d=\"M234.998 690.821C232.237 690.821 229.998 693.059 229.998 695.821C229.998 698.582 232.237 700.821 234.998 700.821C237.76 700.821 239.998 698.582 239.998 695.821C239.998 693.059 237.76 690.821 234.998 690.821Z\" fill=\"#DD75AD\"/>\n            <path d=\"M1777.48 418.638C1774.72 418.638 1772.48 420.876 1772.48 423.638C1772.48 426.399 1774.72 428.638 1777.48 428.638C1780.24 428.638 1782.48 426.399 1782.48 423.638C1782.48 420.876 1780.24 418.638 1777.48 418.638Z\" fill=\"#435E8A\"/>\n            <path d=\"M1550.64 690.821C1547.88 690.821 1545.64 693.06 1545.64 695.821C1545.64 698.582 1547.88 700.821 1550.64 700.821C1553.41 700.821 1555.64 698.582 1555.64 695.821C1555.64 693.06 1553.41 690.821 1550.64 690.821Z\" fill=\"#435E8A\"/>\n            <path d=\"M1777.48 1008.37C1774.72 1008.37 1772.48 1010.61 1772.48 1013.37C1772.48 1016.13 1774.72 1018.37 1777.48 1018.37C1780.24 1018.37 1782.48 1016.13 1782.48 1013.37C1782.48 1010.61 1780.24 1008.37 1777.48 1008.37Z\" fill=\"#435E8A\"/>\n            <path d=\"M1641.38 55.7261C1638.62 55.7261 1636.38 57.9646 1636.38 60.7261C1636.38 63.4875 1638.62 65.7261 1641.38 65.7261C1644.14 65.7261 1646.38 63.4875 1646.38 60.7261C1646.38 57.9647 1644.14 55.7261 1641.38 55.7261Z\" fill=\"#435E8A\"/>\n            <path d=\"M1505.28 690.821C1502.52 690.821 1500.28 693.06 1500.28 695.821C1500.28 698.582 1502.52 700.821 1505.28 700.821C1508.04 700.821 1510.28 698.582 1510.28 695.821C1510.28 693.06 1508.04 690.821 1505.28 690.821Z\" fill=\"#435E8A\"/>\n            <path d=\"M144.264 736.185C141.503 736.185 139.264 738.423 139.264 741.185C139.264 743.946 141.503 746.185 144.264 746.185C147.026 746.185 149.264 743.946 149.264 741.185C149.264 738.423 147.026 736.185 144.264 736.185Z\" fill=\"#435E8A\"/>\n            <path d=\"M1550.64 55.7266C1547.88 55.7266 1545.64 57.9651 1545.64 60.7266C1545.64 63.488 1547.88 65.7266 1550.64 65.7266C1553.41 65.7266 1555.64 63.488 1555.64 60.7266C1555.64 57.9651 1553.41 55.7266 1550.64 55.7266Z\" fill=\"#435E8A\"/>\n            <path d=\"M1732.11 509.365C1729.35 509.365 1727.11 511.604 1727.11 514.365C1727.11 517.127 1729.35 519.365 1732.11 519.365C1734.87 519.365 1737.11 517.127 1737.11 514.365C1737.11 511.604 1734.87 509.365 1732.11 509.365Z\" fill=\"#435E8A\"/>\n            <path d=\"M98.8971 418.637C96.1357 418.637 93.8971 420.876 93.8971 423.637C93.8971 426.399 96.1357 428.637 98.8971 428.637C101.659 428.637 103.897 426.399 103.897 423.637C103.897 420.876 101.659 418.637 98.8971 418.637Z\" fill=\"#435E8A\"/>\n            <path d=\"M1323.81 101.09C1321.05 101.09 1318.81 103.328 1318.81 106.09C1318.81 108.851 1321.05 111.09 1323.81 111.09C1326.57 111.09 1328.81 108.851 1328.81 106.09C1328.81 103.328 1326.57 101.09 1323.81 101.09Z\" fill=\"#435E8A\"/>\n            <path d=\"M689 600.093C686.239 600.093 684 602.332 684 605.093C684 607.854 686.239 610.093 689 610.093C691.762 610.093 694 607.854 694 605.093C694 602.332 691.762 600.093 689 600.093Z\" fill=\"#435E8A\"/>\n            <path d=\"M8.16309 146.454C5.40166 146.454 3.16309 148.693 3.16309 151.454C3.16309 154.216 5.40166 156.454 8.16309 156.454C10.9245 156.454 13.1631 154.216 13.1631 151.454C13.1631 148.693 10.9245 146.454 8.16309 146.454Z\" fill=\"#435E8A\"/>\n            <path d=\"M98.897 781.549C96.1355 781.549 93.897 783.787 93.897 786.549C93.897 789.31 96.1355 791.549 98.897 791.549C101.658 791.549 103.897 789.31 103.897 786.549C103.897 783.787 101.658 781.549 98.897 781.549Z\" fill=\"#435E8A\"/>\n            <path d=\"M507.201 781.548C504.44 781.548 502.201 783.787 502.201 786.548C502.201 789.31 504.44 791.548 507.201 791.548C509.962 791.548 512.201 789.31 512.201 786.548C512.201 783.787 509.962 781.548 507.201 781.548Z\" fill=\"#435E8A\"/>\n            <path d=\"M1732.11 10.3623C1729.35 10.3623 1727.11 12.6009 1727.11 15.3623C1727.11 18.1237 1729.35 20.3623 1732.11 20.3623C1734.87 20.3623 1737.11 18.1237 1737.11 15.3623C1737.11 12.6009 1734.87 10.3623 1732.11 10.3623Z\" fill=\"#435E8A\"/>\n            <path d=\"M280.365 10.3623C277.604 10.3623 275.365 12.6009 275.365 15.3623C275.365 18.1237 277.604 20.3623 280.365 20.3623C283.127 20.3623 285.365 18.1237 285.365 15.3623C285.365 12.6009 283.127 10.3623 280.365 10.3623Z\" fill=\"#435E8A\"/>\n            <path d=\"M325.733 963.004C322.971 963.004 320.733 965.242 320.733 968.004C320.733 970.765 322.971 973.004 325.733 973.004C328.494 973.004 330.733 970.765 330.733 968.004C330.733 965.242 328.494 963.004 325.733 963.004Z\" fill=\"#435E8A\"/>\n            <path d=\"M824.771 237.182C822.009 237.182 819.771 239.42 819.771 242.182C819.771 244.943 822.009 247.182 824.771 247.182C827.532 247.182 829.771 244.943 829.771 242.182C829.771 239.42 827.532 237.182 824.771 237.182Z\" fill=\"#435E8A\"/>\n            <path d=\"M1641.38 10.3623C1638.62 10.3623 1636.38 12.6009 1636.38 15.3623C1636.38 18.1237 1638.62 20.3623 1641.38 20.3623C1644.14 20.3623 1646.38 18.1237 1646.38 15.3623C1646.38 12.6009 1644.14 10.3623 1641.38 10.3623Z\" fill=\"#435E8A\"/>\n            <path d=\"M325.732 146.454C322.971 146.454 320.732 148.693 320.732 151.454C320.732 154.216 322.971 156.454 325.732 156.454C328.494 156.454 330.732 154.216 330.732 151.454C330.732 148.693 328.494 146.454 325.732 146.454Z\" fill=\"#435E8A\"/>\n            <path d=\"M552.568 600.093C549.807 600.093 547.568 602.332 547.568 605.093C547.568 607.854 549.807 610.093 552.568 610.093C555.33 610.093 557.568 607.854 557.568 605.093C557.568 602.332 555.33 600.093 552.568 600.093Z\" fill=\"#435E8A\"/>\n            <path d=\"M1505.28 509.365C1502.52 509.365 1500.28 511.604 1500.28 514.365C1500.28 517.127 1502.52 519.365 1505.28 519.365C1508.04 519.365 1510.28 517.127 1510.28 514.365C1510.28 511.604 1508.04 509.365 1505.28 509.365Z\" fill=\"#435E8A\"/>\n            <path d=\"M1051.61 282.546C1048.84 282.546 1046.61 284.784 1046.61 287.546C1046.61 290.307 1048.84 292.546 1051.61 292.546C1054.37 292.546 1056.61 290.307 1056.61 287.546C1056.61 284.784 1054.37 282.546 1051.61 282.546Z\" fill=\"#435E8A\"/>\n            <path d=\"M1187.71 872.007C1184.95 872.007 1182.71 874.246 1182.71 877.007C1182.71 879.769 1184.95 882.007 1187.71 882.007C1190.47 882.007 1192.71 879.769 1192.71 877.007C1192.71 874.246 1190.47 872.007 1187.71 872.007Z\" fill=\"#5FE8FF\"/>\n            <path d=\"M1414.54 554.729C1411.78 554.729 1409.54 556.968 1409.54 559.729C1409.54 562.491 1411.78 564.729 1414.54 564.729C1417.3 564.729 1419.54 562.491 1419.54 559.729C1419.54 556.968 1417.3 554.729 1414.54 554.729Z\" fill=\"#435E8A\"/>\n            <path d=\"M824.771 146.454C822.009 146.454 819.771 148.693 819.771 151.454C819.771 154.216 822.009 156.454 824.771 156.454C827.532 156.454 829.771 154.216 829.771 151.454C829.771 148.693 827.532 146.454 824.771 146.454Z\" fill=\"#435E8A\"/>\n            <path d=\"M1278.44 1053.73C1275.68 1053.73 1273.44 1055.97 1273.44 1058.73C1273.44 1061.49 1275.68 1063.73 1278.44 1063.73C1281.2 1063.73 1283.44 1061.49 1283.44 1058.73C1283.44 1055.97 1281.2 1053.73 1278.44 1053.73Z\" fill=\"#435E8A\"/>\n            <path d=\"M1047.62 409.249C1044.86 409.249 1042.62 411.488 1042.62 414.249C1042.62 417.01 1044.86 419.249 1047.62 419.249C1050.38 419.249 1052.62 417.01 1052.62 414.249C1052.62 411.488 1050.38 409.249 1047.62 409.249Z\" fill=\"#435E8A\"/>\n            <path d=\"M734.036 282.546C731.275 282.546 729.036 284.784 729.036 287.546C729.036 290.307 731.275 292.546 734.036 292.546C736.798 292.546 739.036 290.307 739.036 287.546C739.036 284.784 736.798 282.546 734.036 282.546Z\" fill=\"#7DFBFF\"/>\n            <path d=\"M643.302 1053.73C640.541 1053.73 638.302 1055.97 638.302 1058.73C638.302 1061.49 640.541 1063.73 643.302 1063.73C646.064 1063.73 648.302 1061.49 648.302 1058.73C648.302 1055.97 646.064 1053.73 643.302 1053.73Z\" fill=\"#435E8A\"/>\n            <path d=\"M234.998 191.818C232.237 191.818 229.998 194.056 229.998 196.818C229.998 199.579 232.237 201.818 234.998 201.818C237.76 201.818 239.998 199.579 239.998 196.818C239.998 194.056 237.76 191.818 234.998 191.818Z\" fill=\"#435E8A\"/>\n            <path d=\"M1641.38 690.821C1638.62 690.821 1636.38 693.06 1636.38 695.821C1636.38 698.582 1638.62 700.821 1641.38 700.821C1644.14 700.821 1646.38 698.582 1646.38 695.821C1646.38 693.06 1644.14 690.821 1641.38 690.821Z\" fill=\"#435E8A\"/>\n            <path d=\"M8.16284 781.548C5.40142 781.548 3.16284 783.787 3.16284 786.548C3.16284 789.31 5.40142 791.548 8.16284 791.548C10.9243 791.548 13.1628 789.31 13.1628 786.548C13.1628 783.787 10.9243 781.548 8.16284 781.548Z\" fill=\"#435E8A\"/>\n            <path d=\"M325.733 282.546C322.971 282.546 320.733 284.784 320.733 287.546C320.733 290.307 322.971 292.546 325.733 292.546C328.494 292.546 330.733 290.307 330.733 287.546C330.733 284.784 328.494 282.546 325.733 282.546Z\" fill=\"#435E8A\"/>\n            <path d=\"M734.036 1053.73C731.275 1053.73 729.036 1055.97 729.036 1058.73C729.036 1061.49 731.275 1063.73 734.036 1063.73C736.798 1063.73 739.036 1061.49 739.036 1058.73C739.036 1055.97 736.798 1053.73 734.036 1053.73Z\" fill=\"#435E8A\"/>\n            <path d=\"M98.897 146.454C96.1355 146.454 93.897 148.693 93.897 151.454C93.897 154.216 96.1355 156.454 98.897 156.454C101.658 156.454 103.897 154.216 103.897 151.454C103.897 148.693 101.658 146.454 98.897 146.454Z\" fill=\"#435E8A\"/>\n            <path d=\"M371.1 781.549C368.338 781.549 366.1 783.787 366.1 786.549C366.1 789.31 368.338 791.549 371.1 791.549C373.861 791.549 376.1 789.31 376.1 786.549C376.1 783.787 373.861 781.549 371.1 781.549Z\" fill=\"#5A99FF\"/>\n            <path d=\"M1051.61 10.3623C1048.84 10.3623 1046.61 12.6009 1046.61 15.3623C1046.61 18.1237 1048.84 20.3623 1051.61 20.3623C1054.37 20.3623 1056.61 18.1237 1056.61 15.3623C1056.61 12.6009 1054.37 10.3623 1051.61 10.3623Z\" fill=\"#435E8A\"/>\n            <path d=\"M1233.07 10.3623C1230.31 10.3623 1228.07 12.6009 1228.07 15.3623C1228.07 18.1237 1230.31 20.3623 1233.07 20.3623C1235.84 20.3623 1238.07 18.1237 1238.07 15.3623C1238.07 12.6009 1235.84 10.3623 1233.07 10.3623Z\" fill=\"#435E8A\"/>\n            <path d=\"M1278.44 917.64C1275.68 917.64 1273.44 919.879 1273.44 922.64C1273.44 925.402 1275.68 927.64 1278.44 927.64C1281.2 927.64 1283.44 925.402 1283.44 922.64C1283.44 919.879 1281.2 917.64 1278.44 917.64Z\" fill=\"#435E8A\"/>\n            <path d=\"M552.568 736.185C549.807 736.185 547.568 738.423 547.568 741.185C547.568 743.946 549.807 746.185 552.568 746.185C555.33 746.185 557.568 743.946 557.568 741.185C557.568 738.423 555.33 736.185 552.568 736.185Z\" fill=\"#FFA97D\"/>\n            <path d=\"M507.201 191.818C504.44 191.818 502.201 194.056 502.201 196.818C502.201 199.579 504.44 201.818 507.201 201.818C509.962 201.818 512.201 199.579 512.201 196.818C512.201 194.056 509.962 191.818 507.201 191.818Z\" fill=\"#435E8A\"/>\n            <path d=\"M507.201 872.276C504.44 872.276 502.201 874.515 502.201 877.276C502.201 880.038 504.44 882.276 507.201 882.276C509.962 882.276 512.201 880.038 512.201 877.276C512.201 874.515 509.962 872.276 507.201 872.276Z\" fill=\"#435E8A\"/>\n            <path d=\"M461.834 55.7261C459.072 55.7261 456.834 57.9646 456.834 60.7261C456.834 63.4875 459.072 65.7261 461.834 65.7261C464.595 65.7261 466.834 63.4875 466.834 60.7261C466.834 57.9647 464.595 55.7261 461.834 55.7261Z\" fill=\"#435E8A\"/>\n            <path d=\"M53.5299 373.273C50.7685 373.273 48.5299 375.512 48.5299 378.273C48.5299 381.035 50.7685 383.273 53.5299 383.273C56.2913 383.273 58.5299 381.035 58.5299 378.273C58.5299 375.512 56.2913 373.273 53.5299 373.273Z\" fill=\"#435E8A\"/>\n            <path d=\"M1414.54 282.546C1411.78 282.546 1409.54 284.784 1409.54 287.546C1409.54 290.307 1411.78 292.546 1414.54 292.546C1417.3 292.546 1419.54 290.307 1419.54 287.546C1419.54 284.784 1417.3 282.546 1414.54 282.546Z\" fill=\"#435E8A\"/>\n            <path d=\"M960.872 282.546C958.111 282.546 955.872 284.784 955.872 287.546C955.872 290.307 958.111 292.546 960.872 292.546C963.633 292.546 965.872 290.307 965.872 287.546C965.872 284.784 963.633 282.546 960.872 282.546Z\" fill=\"#435E8A\"/>\n            <path d=\"M1187.71 327.91C1184.95 327.91 1182.71 330.148 1182.71 332.91C1182.71 335.671 1184.95 337.91 1187.71 337.91C1190.47 337.91 1192.71 335.671 1192.71 332.91C1192.71 330.148 1190.47 327.91 1187.71 327.91Z\" fill=\"#435E8A\"/>\n            <path d=\"M461.834 146.454C459.072 146.454 456.834 148.693 456.834 151.454C456.834 154.216 459.072 156.454 461.834 156.454C464.595 156.454 466.834 154.216 466.834 151.454C466.834 148.693 464.595 146.454 461.834 146.454Z\" fill=\"#435E8A\"/>\n            <path d=\"M144.264 146.454C141.503 146.454 139.264 148.693 139.264 151.454C139.264 154.216 141.503 156.454 144.264 156.454C147.026 156.454 149.264 154.216 149.264 151.454C149.264 148.693 147.026 146.454 144.264 146.454Z\" fill=\"#435E8A\"/>\n            <path d=\"M1187.71 600.093C1184.95 600.093 1182.71 602.332 1182.71 605.093C1182.71 607.854 1184.95 610.093 1187.71 610.093C1190.47 610.093 1192.71 607.854 1192.71 605.093C1192.71 602.332 1190.47 600.093 1187.71 600.093Z\" fill=\"#435E8A\"/>\n            <path d=\"M1777.48 645.457C1774.72 645.457 1772.48 647.696 1772.48 650.457C1772.48 653.218 1774.72 655.457 1777.48 655.457C1780.24 655.457 1782.48 653.218 1782.48 650.457C1782.48 647.696 1780.24 645.457 1777.48 645.457Z\" fill=\"#435E8A\"/>\n            <path d=\"M1550.64 963.004C1547.88 963.004 1545.64 965.242 1545.64 968.004C1545.64 970.765 1547.88 973.004 1550.64 973.004C1553.41 973.004 1555.64 970.765 1555.64 968.004C1555.64 965.242 1553.41 963.004 1550.64 963.004Z\" fill=\"#435E8A\"/>\n            <path d=\"M1233.07 645.457C1230.31 645.457 1228.07 647.696 1228.07 650.457C1228.07 653.218 1230.31 655.457 1233.07 655.457C1235.84 655.457 1238.07 653.218 1238.07 650.457C1238.07 647.696 1235.84 645.457 1233.07 645.457Z\" fill=\"#435E8A\"/>\n            <path d=\"M1187.71 509.365C1184.95 509.365 1182.71 511.604 1182.71 514.365C1182.71 517.127 1184.95 519.365 1187.71 519.365C1190.47 519.365 1192.71 517.127 1192.71 514.365C1192.71 511.604 1190.47 509.365 1187.71 509.365Z\" fill=\"#435E8A\"/>\n            <path d=\"M234.999 418.638C232.237 418.638 229.999 420.876 229.999 423.638C229.999 426.399 232.237 428.638 234.999 428.638C237.76 428.638 239.999 426.399 239.999 423.638C239.999 420.876 237.76 418.638 234.999 418.638Z\" fill=\"#FCE529\"/>\n            <path d=\"M98.8967 872.276C96.1353 872.276 93.8967 874.515 93.8967 877.276C93.8967 880.038 96.1353 882.276 98.8967 882.276C101.658 882.276 103.897 880.038 103.897 877.276C103.897 874.515 101.658 872.276 98.8967 872.276Z\" fill=\"#435E8A\"/>\n            <path d=\"M1369.18 55.7261C1366.41 55.7261 1364.18 57.9646 1364.18 60.7261C1364.18 63.4875 1366.41 65.7261 1369.18 65.7261C1371.94 65.7261 1374.18 63.4875 1374.18 60.7261C1374.18 57.9647 1371.94 55.7261 1369.18 55.7261Z\" fill=\"#435E8A\"/>\n            <path d=\"M8.16321 464.001C5.40179 464.001 3.16321 466.24 3.16321 469.001C3.16321 471.763 5.40178 474.001 8.16321 474.001C10.9246 474.001 13.1632 471.763 13.1632 469.001C13.1632 466.24 10.9246 464.001 8.16321 464.001Z\" fill=\"#435E8A\"/>\n            <path d=\"M1732.11 282.546C1729.35 282.546 1727.11 284.784 1727.11 287.546C1727.11 290.307 1729.35 292.546 1732.11 292.546C1734.87 292.546 1737.11 290.307 1737.11 287.546C1737.11 284.784 1734.87 282.546 1732.11 282.546Z\" fill=\"#435E8A\"/>\n            <path d=\"M1459.91 917.64C1457.15 917.64 1454.91 919.879 1454.91 922.64C1454.91 925.402 1457.15 927.64 1459.91 927.64C1462.67 927.64 1464.91 925.402 1464.91 922.64C1464.91 919.879 1462.67 917.64 1459.91 917.64Z\" fill=\"#435E8A\"/>\n            <path d=\"M643.302 55.7261C640.541 55.7261 638.302 57.9646 638.302 60.7261C638.302 63.4875 640.541 65.7261 643.302 65.7261C646.064 65.7261 648.302 63.4875 648.302 60.7261C648.302 57.9647 646.064 55.7261 643.302 55.7261Z\" fill=\"#435E8A\"/>\n            <path d=\"M1369.18 146.454C1366.41 146.454 1364.18 148.693 1364.18 151.454C1364.18 154.216 1366.41 156.454 1369.18 156.454C1371.94 156.454 1374.18 154.216 1374.18 151.454C1374.18 148.693 1371.94 146.454 1369.18 146.454Z\" fill=\"#435E8A\"/>\n            <path d=\"M552.568 645.457C549.807 645.457 547.568 647.695 547.568 650.457C547.568 653.218 549.807 655.457 552.568 655.457C555.33 655.457 557.568 653.218 557.568 650.457C557.568 647.695 555.33 645.457 552.568 645.457Z\" fill=\"#435E8A\"/>\n            <path d=\"M1233.07 464.001C1230.31 464.001 1228.07 466.24 1228.07 469.001C1228.07 471.763 1230.31 474.001 1233.07 474.001C1235.84 474.001 1238.07 471.763 1238.07 469.001C1238.07 466.24 1235.84 464.001 1233.07 464.001Z\" fill=\"#435E8A\"/>\n            <path d=\"M507.201 10.3623C504.44 10.3623 502.201 12.6009 502.201 15.3623C502.201 18.1237 504.44 20.3623 507.201 20.3623C509.962 20.3623 512.201 18.1237 512.201 15.3623C512.201 12.6009 509.962 10.3623 507.201 10.3623Z\" fill=\"#435E8A\"/>\n            <path d=\"M1686.75 191.818C1683.98 191.818 1681.75 194.057 1681.75 196.818C1681.75 199.58 1683.98 201.818 1686.75 201.818C1689.51 201.818 1691.75 199.58 1691.75 196.818C1691.75 194.057 1689.51 191.818 1686.75 191.818Z\" fill=\"#435E8A\"/>\n            <path d=\"M1686.75 509.365C1683.98 509.365 1681.75 511.604 1681.75 514.365C1681.75 517.127 1683.98 519.365 1686.75 519.365C1689.51 519.365 1691.75 517.127 1691.75 514.365C1691.75 511.604 1689.51 509.365 1686.75 509.365Z\" fill=\"#435E8A\"/>\n            <path d=\"M1142.34 1053.73C1139.58 1053.73 1137.34 1055.97 1137.34 1058.73C1137.34 1061.49 1139.58 1063.73 1142.34 1063.73C1145.1 1063.73 1147.34 1061.49 1147.34 1058.73C1147.34 1055.97 1145.1 1053.73 1142.34 1053.73Z\" fill=\"#8EC7FF\"/>\n            <path d=\"M1369.18 690.821C1366.41 690.821 1364.18 693.06 1364.18 695.821C1364.18 698.582 1366.41 700.821 1369.18 700.821C1371.94 700.821 1374.18 698.582 1374.18 695.821C1374.18 693.06 1371.94 690.821 1369.18 690.821Z\" fill=\"#435E8A\"/>\n            <path d=\"M688.669 237.182C685.908 237.182 683.669 239.421 683.669 242.182C683.669 244.944 685.908 247.182 688.669 247.182C691.431 247.182 693.669 244.944 693.669 242.182C693.669 239.421 691.431 237.182 688.669 237.182Z\" fill=\"#435E8A\"/>\n            <path d=\"M53.53 736.185C50.7686 736.185 48.53 738.423 48.53 741.185C48.53 743.946 50.7686 746.185 53.53 746.185C56.2915 746.185 58.53 743.946 58.53 741.185C58.53 738.423 56.2915 736.185 53.53 736.185Z\" fill=\"#435E8A\"/>\n            <path d=\"M1278.44 1008.37C1275.68 1008.37 1273.44 1010.61 1273.44 1013.37C1273.44 1016.13 1275.68 1018.37 1278.44 1018.37C1281.2 1018.37 1283.44 1016.13 1283.44 1013.37C1283.44 1010.61 1281.2 1008.37 1278.44 1008.37Z\" fill=\"#435E8A\"/>\n            <path d=\"M371.1 1053.73C368.338 1053.73 366.1 1055.97 366.1 1058.73C366.1 1061.49 368.338 1063.73 371.1 1063.73C373.861 1063.73 376.1 1061.49 376.1 1058.73C376.1 1055.97 373.861 1053.73 371.1 1053.73Z\" fill=\"#435E8A\"/>\n            <path d=\"M1641.38 101.09C1638.62 101.09 1636.38 103.329 1636.38 106.09C1636.38 108.852 1638.62 111.09 1641.38 111.09C1644.14 111.09 1646.38 108.852 1646.38 106.09C1646.38 103.329 1644.14 101.09 1641.38 101.09Z\" fill=\"#435E8A\"/>\n            <path d=\"M1550.64 645.457C1547.88 645.457 1545.64 647.696 1545.64 650.457C1545.64 653.218 1547.88 655.457 1550.64 655.457C1553.41 655.457 1555.64 653.218 1555.64 650.457C1555.64 647.696 1553.41 645.457 1550.64 645.457Z\" fill=\"#435E8A\"/>\n            <path d=\"M1732.11 826.912C1729.35 826.912 1727.11 829.151 1727.11 831.912C1727.11 834.674 1729.35 836.912 1732.11 836.912C1734.87 836.912 1737.11 834.674 1737.11 831.912C1737.11 829.151 1734.87 826.912 1732.11 826.912Z\" fill=\"#435E8A\"/>\n            <path d=\"M144.264 963.004C141.502 963.004 139.264 965.242 139.264 968.004C139.264 970.765 141.502 973.004 144.264 973.004C147.025 973.004 149.264 970.765 149.264 968.004C149.264 965.242 147.025 963.004 144.264 963.004Z\" fill=\"#435E8A\"/>\n            <path d=\"M1233.07 191.818C1230.31 191.818 1228.07 194.056 1228.07 196.818C1228.07 199.579 1230.31 201.818 1233.07 201.818C1235.84 201.818 1238.07 199.579 1238.07 196.818C1238.07 194.056 1235.84 191.818 1233.07 191.818Z\" fill=\"#435E8A\"/>\n            <path d=\"M1732.11 1053.73C1729.35 1053.73 1727.11 1055.97 1727.11 1058.73C1727.11 1061.49 1729.35 1063.73 1732.11 1063.73C1734.87 1063.73 1737.11 1061.49 1737.11 1058.73C1737.11 1055.97 1734.87 1053.73 1732.11 1053.73Z\" fill=\"#435E8A\"/>\n            <path d=\"M1686.75 826.912C1683.98 826.912 1681.75 829.151 1681.75 831.912C1681.75 834.674 1683.98 836.912 1686.75 836.912C1689.51 836.912 1691.75 834.674 1691.75 831.912C1691.75 829.151 1689.51 826.912 1686.75 826.912Z\" fill=\"#435E8A\"/>\n            <path d=\"M779.404 237.182C776.642 237.182 774.404 239.421 774.404 242.182C774.404 244.944 776.642 247.182 779.404 247.182C782.165 247.182 784.404 244.944 784.404 242.182C784.404 239.421 782.165 237.182 779.404 237.182Z\" fill=\"#435E8A\"/>\n            <path d=\"M552.568 917.64C549.807 917.64 547.568 919.879 547.568 922.64C547.568 925.402 549.807 927.64 552.568 927.64C555.33 927.64 557.568 925.402 557.568 922.64C557.568 919.879 555.33 917.64 552.568 917.64Z\" fill=\"#4DD2C2\"/>\n            <path d=\"M1641.38 418.638C1638.62 418.638 1636.38 420.876 1636.38 423.638C1636.38 426.399 1638.62 428.638 1641.38 428.638C1644.14 428.638 1646.38 426.399 1646.38 423.638C1646.38 420.876 1644.14 418.638 1641.38 418.638Z\" fill=\"#435E8A\"/>\n            <path d=\"M643.302 237.182C640.541 237.182 638.302 239.421 638.302 242.182C638.302 244.944 640.541 247.182 643.302 247.182C646.064 247.182 648.302 244.944 648.302 242.182C648.302 239.421 646.064 237.182 643.302 237.182Z\" fill=\"#435E8A\"/>\n            <path d=\"M371.1 1008.37C368.338 1008.37 366.1 1010.61 366.1 1013.37C366.1 1016.13 368.338 1018.37 371.1 1018.37C373.861 1018.37 376.1 1016.13 376.1 1013.37C376.1 1010.61 373.861 1008.37 371.1 1008.37Z\" fill=\"#435E8A\"/>\n            <path d=\"M325.732 10.3623C322.971 10.3623 320.732 12.6009 320.732 15.3623C320.732 18.1237 322.971 20.3623 325.732 20.3623C328.494 20.3623 330.732 18.1237 330.732 15.3623C330.732 12.6009 328.494 10.3623 325.732 10.3623Z\" fill=\"#435E8A\"/>\n            <path d=\"M1414.54 1053.73C1411.78 1053.73 1409.54 1055.97 1409.54 1058.73C1409.54 1061.49 1411.78 1063.73 1414.54 1063.73C1417.3 1063.73 1419.54 1061.49 1419.54 1058.73C1419.54 1055.97 1417.3 1053.73 1414.54 1053.73Z\" fill=\"#435E8A\"/>\n            <path d=\"M371.1 282.546C368.338 282.546 366.1 284.784 366.1 287.546C366.1 290.307 368.338 292.546 371.1 292.546C373.861 292.546 376.1 290.307 376.1 287.546C376.1 284.784 373.861 282.546 371.1 282.546Z\" fill=\"#435E8A\"/>\n            <path d=\"M371.1 917.64C368.338 917.64 366.1 919.879 366.1 922.64C366.1 925.402 368.338 927.64 371.1 927.64C373.861 927.64 376.1 925.402 376.1 922.64C376.1 919.879 373.861 917.64 371.1 917.64Z\" fill=\"#8F83FF\"/>\n            <path d=\"M98.8971 327.91C96.1357 327.91 93.8971 330.148 93.8971 332.91C93.8971 335.671 96.1357 337.91 98.8971 337.91C101.659 337.91 103.897 335.671 103.897 332.91C103.897 330.148 101.659 327.91 98.8971 327.91Z\" fill=\"#435E8A\"/>\n            <path d=\"M1777.48 464.001C1774.72 464.001 1772.48 466.24 1772.48 469.001C1772.48 471.763 1774.72 474.001 1777.48 474.001C1780.24 474.001 1782.48 471.763 1782.48 469.001C1782.48 466.24 1780.24 464.001 1777.48 464.001Z\" fill=\"#435E8A\"/>\n            <path d=\"M1732.11 645.457C1729.35 645.457 1727.11 647.696 1727.11 650.457C1727.11 653.218 1729.35 655.457 1732.11 655.457C1734.87 655.457 1737.11 653.218 1737.11 650.457C1737.11 647.696 1734.87 645.457 1732.11 645.457Z\" fill=\"#435E8A\"/>\n            <path d=\"M552.568 690.821C549.807 690.821 547.568 693.059 547.568 695.821C547.568 698.582 549.807 700.821 552.568 700.821C555.33 700.821 557.568 698.582 557.568 695.821C557.568 693.059 555.33 690.821 552.568 690.821Z\" fill=\"#435E8A\"/>\n            <path d=\"M280.366 191.818C277.604 191.818 275.366 194.056 275.366 196.818C275.366 199.579 277.604 201.818 280.366 201.818C283.127 201.818 285.366 199.579 285.366 196.818C285.366 194.056 283.127 191.818 280.366 191.818Z\" fill=\"#435E8A\"/>\n            <path d=\"M1686.75 101.09C1683.98 101.09 1681.75 103.329 1681.75 106.09C1681.75 108.852 1683.98 111.09 1686.75 111.09C1689.51 111.09 1691.75 108.852 1691.75 106.09C1691.75 103.329 1689.51 101.09 1686.75 101.09Z\" fill=\"#435E8A\"/>\n            <path d=\"M98.8972 645.457C96.1358 645.457 93.8972 647.695 93.8972 650.457C93.8972 653.218 96.1358 655.457 98.8972 655.457C101.659 655.457 103.897 653.218 103.897 650.457C103.897 647.695 101.659 645.457 98.8972 645.457Z\" fill=\"#435E8A\"/>\n            <path d=\"M1596.01 418.638C1593.25 418.638 1591.01 420.876 1591.01 423.638C1591.01 426.399 1593.25 428.638 1596.01 428.638C1598.77 428.638 1601.01 426.399 1601.01 423.638C1601.01 420.876 1598.77 418.638 1596.01 418.638Z\" fill=\"#435E8A\"/>\n            <path d=\"M1142.34 373.274C1139.58 373.274 1137.34 375.513 1137.34 378.274C1137.34 381.035 1139.58 383.274 1142.34 383.274C1145.1 383.274 1147.34 381.035 1147.34 378.274C1147.34 375.513 1145.1 373.274 1142.34 373.274Z\" fill=\"#435E8A\"/>\n            <path d=\"M234.999 464.001C232.237 464.001 229.999 466.24 229.999 469.001C229.999 471.763 232.237 474.001 234.999 474.001C237.76 474.001 239.999 471.763 239.999 469.001C239.999 466.24 237.76 464.001 234.999 464.001Z\" fill=\"#435E8A\"/>\n            <path d=\"M371.1 373.273C368.338 373.273 366.1 375.512 366.1 378.273C366.1 381.035 368.338 383.273 371.1 383.273C373.861 383.273 376.1 381.035 376.1 378.273C376.1 375.512 373.861 373.273 371.1 373.273Z\" fill=\"#435E8A\"/>\n            <path d=\"M280.366 327.91C277.604 327.91 275.366 330.148 275.366 332.91C275.366 335.671 277.604 337.91 280.366 337.91C283.127 337.91 285.366 335.671 285.366 332.91C285.366 330.148 283.127 327.91 280.366 327.91Z\" fill=\"#435E8A\"/>\n            <path d=\"M371.1 418.638C368.338 418.638 366.1 420.876 366.1 423.638C366.1 426.399 368.338 428.638 371.1 428.638C373.861 428.638 376.1 426.399 376.1 423.638C376.1 420.876 373.861 418.638 371.1 418.638Z\" fill=\"#435E8A\"/>\n            <path d=\"M1006.24 146.454C1003.48 146.454 1001.24 148.693 1001.24 151.454C1001.24 154.216 1003.48 156.454 1006.24 156.454C1009 156.454 1011.24 154.216 1011.24 151.454C1011.24 148.693 1009 146.454 1006.24 146.454Z\" fill=\"#435E8A\"/>\n            <path d=\"M870.138 237.182C867.377 237.182 865.138 239.421 865.138 242.182C865.138 244.944 867.377 247.182 870.138 247.182C872.899 247.182 875.138 244.944 875.138 242.182C875.138 239.421 872.899 237.182 870.138 237.182Z\" fill=\"#78BBFF\"/>\n            <path d=\"M1278.44 373.274C1275.68 373.274 1273.44 375.513 1273.44 378.274C1273.44 381.035 1275.68 383.274 1278.44 383.274C1281.2 383.274 1283.44 381.035 1283.44 378.274C1283.44 375.513 1281.2 373.274 1278.44 373.274Z\" fill=\"#435E8A\"/>\n            <path d=\"M53.5298 963.004C50.7684 963.004 48.5298 965.242 48.5298 968.004C48.5298 970.765 50.7684 973.004 53.5298 973.004C56.2912 973.004 58.5298 970.765 58.5298 968.004C58.5298 965.242 56.2912 963.004 53.5298 963.004Z\" fill=\"#435E8A\"/>\n            <path d=\"M1686.75 872.276C1683.98 872.276 1681.75 874.515 1681.75 877.276C1681.75 880.038 1683.98 882.276 1686.75 882.276C1689.51 882.276 1691.75 880.038 1691.75 877.276C1691.75 874.515 1689.51 872.276 1686.75 872.276Z\" fill=\"#435E8A\"/>\n            <path d=\"M1505.28 917.64C1502.52 917.64 1500.28 919.879 1500.28 922.64C1500.28 925.402 1502.52 927.64 1505.28 927.64C1508.04 927.64 1510.28 925.402 1510.28 922.64C1510.28 919.879 1508.04 917.64 1505.28 917.64Z\" fill=\"#435E8A\"/>\n            <path d=\"M643.302 736.184C640.541 736.184 638.302 738.423 638.302 741.184C638.302 743.946 640.541 746.184 643.302 746.184C646.064 746.184 648.302 743.946 648.302 741.184C648.302 738.423 646.064 736.184 643.302 736.184Z\" fill=\"#435E8A\"/>\n            <path d=\"M1187.71 55.7261C1184.95 55.7261 1182.71 57.9646 1182.71 60.7261C1182.71 63.4875 1184.95 65.7261 1187.71 65.7261C1190.47 65.7261 1192.71 63.4875 1192.71 60.7261C1192.71 57.9647 1190.47 55.7261 1187.71 55.7261Z\" fill=\"#435E8A\"/>\n            <path d=\"M1641.38 554.729C1638.62 554.729 1636.38 556.968 1636.38 559.729C1636.38 562.491 1638.62 564.729 1641.38 564.729C1644.14 564.729 1646.38 562.491 1646.38 559.729C1646.38 556.968 1644.14 554.729 1641.38 554.729Z\" fill=\"#41E3FF\"/>\n            <path d=\"M552.568 146.454C549.807 146.454 547.568 148.693 547.568 151.454C547.568 154.216 549.807 156.454 552.568 156.454C555.33 156.454 557.568 154.216 557.568 151.454C557.568 148.693 555.33 146.454 552.568 146.454Z\" fill=\"#435E8A\"/>\n            <path d=\"M371.1 872.276C368.338 872.276 366.1 874.515 366.1 877.276C366.1 880.038 368.338 882.276 371.1 882.276C373.861 882.276 376.1 880.038 376.1 877.276C376.1 874.515 373.861 872.276 371.1 872.276Z\" fill=\"#435E8A\"/>\n            <path d=\"M8.16296 554.729C5.40154 554.729 3.16296 556.968 3.16296 559.729C3.16296 562.49 5.40154 564.729 8.16296 564.729C10.9244 564.729 13.163 562.49 13.163 559.729C13.163 556.968 10.9244 554.729 8.16296 554.729Z\" fill=\"#435E8A\"/>\n            <path d=\"M1459.91 464.001C1457.15 464.001 1454.91 466.24 1454.91 469.001C1454.91 471.763 1457.15 474.001 1459.91 474.001C1462.67 474.001 1464.91 471.763 1464.91 469.001C1464.91 466.24 1462.67 464.001 1459.91 464.001Z\" fill=\"#435E8A\"/>\n            <path d=\"M734.036 55.7261C731.275 55.7261 729.036 57.9646 729.036 60.7261C729.036 63.4875 731.275 65.7261 734.036 65.7261C736.798 65.7261 739.036 63.4875 739.036 60.7261C739.036 57.9647 736.798 55.7261 734.036 55.7261Z\" fill=\"#435E8A\"/>\n            <path d=\"M189.631 10.3623C186.87 10.3623 184.631 12.6009 184.631 15.3623C184.631 18.1237 186.87 20.3623 189.631 20.3623C192.393 20.3623 194.631 18.1237 194.631 15.3623C194.631 12.6009 192.393 10.3623 189.631 10.3623Z\" fill=\"#435E8A\"/>\n            <path d=\"M1414.54 872.276C1411.78 872.276 1409.54 874.515 1409.54 877.276C1409.54 880.038 1411.78 882.276 1414.54 882.276C1417.3 882.276 1419.54 880.038 1419.54 877.276C1419.54 874.515 1417.3 872.276 1414.54 872.276Z\" fill=\"#435E8A\"/>\n            <path d=\"M1323.81 1008.37C1321.05 1008.37 1318.81 1010.61 1318.81 1013.37C1318.81 1016.13 1321.05 1018.37 1323.81 1018.37C1326.57 1018.37 1328.81 1016.13 1328.81 1013.37C1328.81 1010.61 1326.57 1008.37 1323.81 1008.37Z\" fill=\"#435E8A\"/>\n            <path d=\"M8.16296 645.457C5.40154 645.457 3.16296 647.695 3.16296 650.457C3.16296 653.218 5.40154 655.457 8.16296 655.457C10.9244 655.457 13.163 653.218 13.163 650.457C13.163 647.695 10.9244 645.457 8.16296 645.457Z\" fill=\"#435E8A\"/>\n            <path d=\"M688.669 101.09C685.908 101.09 683.669 103.329 683.669 106.09C683.669 108.852 685.908 111.09 688.669 111.09C691.431 111.09 693.669 108.852 693.669 106.09C693.669 103.329 691.431 101.09 688.669 101.09Z\" fill=\"#435E8A\"/>\n            <path d=\"M1641.38 282.546C1638.62 282.546 1636.38 284.784 1636.38 287.546C1636.38 290.307 1638.62 292.546 1641.38 292.546C1644.14 292.546 1646.38 290.307 1646.38 287.546C1646.38 284.784 1644.14 282.546 1641.38 282.546Z\" fill=\"#5998FF\"/>\n            <path d=\"M1278.44 872.276C1275.68 872.276 1273.44 874.515 1273.44 877.276C1273.44 880.038 1275.68 882.276 1278.44 882.276C1281.2 882.276 1283.44 880.038 1283.44 877.276C1283.44 874.515 1281.2 872.276 1278.44 872.276Z\" fill=\"#435E8A\"/>\n            <path d=\"M688.669 736.184C685.908 736.184 683.669 738.423 683.669 741.184C683.669 743.946 685.908 746.184 688.669 746.184C691.431 746.184 693.669 743.946 693.669 741.184C693.669 738.423 691.431 736.184 688.669 736.184Z\" fill=\"#435E8A\"/>\n            <path d=\"M8.16309 55.7261C5.40166 55.7261 3.16309 57.9646 3.16309 60.7261C3.16309 63.4875 5.40166 65.7261 8.16309 65.7261C10.9245 65.7261 13.1631 63.4875 13.1631 60.7261C13.1631 57.9647 10.9245 55.7261 8.16309 55.7261Z\" fill=\"#435E8A\"/>\n            <path d=\"M1414.54 373.274C1411.78 373.274 1409.54 375.513 1409.54 378.274C1409.54 381.035 1411.78 383.274 1414.54 383.274C1417.3 383.274 1419.54 381.035 1419.54 378.274C1419.54 375.513 1417.3 373.274 1414.54 373.274Z\" fill=\"#679AED\"/>\n            <path d=\"M1777.48 554.729C1774.72 554.729 1772.48 556.968 1772.48 559.729C1772.48 562.491 1774.72 564.729 1777.48 564.729C1780.24 564.729 1782.48 562.491 1782.48 559.729C1782.48 556.968 1780.24 554.729 1777.48 554.729Z\" fill=\"#435E8A\"/>\n            <path d=\"M1278.44 191.818C1275.68 191.818 1273.44 194.056 1273.44 196.818C1273.44 199.579 1275.68 201.818 1278.44 201.818C1281.2 201.818 1283.44 199.579 1283.44 196.818C1283.44 194.056 1281.2 191.818 1278.44 191.818Z\" fill=\"#217487\"/>\n            <path d=\"M779.404 146.454C776.642 146.454 774.404 148.693 774.404 151.454C774.404 154.216 776.642 156.454 779.404 156.454C782.165 156.454 784.404 154.216 784.404 151.454C784.404 148.693 782.165 146.454 779.404 146.454Z\" fill=\"#435E8A\"/>\n            <path d=\"M280.366 690.821C277.604 690.821 275.366 693.059 275.366 695.821C275.366 698.582 277.604 700.821 280.366 700.821C283.127 700.821 285.366 698.582 285.366 695.821C285.366 693.059 283.127 690.821 280.366 690.821Z\" fill=\"#435E8A\"/>\n            <path d=\"M1233.07 373.274C1230.31 373.274 1228.07 375.513 1228.07 378.274C1228.07 381.035 1230.31 383.274 1233.07 383.274C1235.84 383.274 1238.07 381.035 1238.07 378.274C1238.07 375.513 1235.84 373.274 1233.07 373.274Z\" fill=\"#BF8CFF\"/>\n            <path d=\"M1142.34 418.638C1139.58 418.638 1137.34 420.876 1137.34 423.638C1137.34 426.399 1139.58 428.638 1142.34 428.638C1145.1 428.638 1147.34 426.399 1147.34 423.638C1147.34 420.876 1145.1 418.638 1142.34 418.638Z\" fill=\"#435E8A\"/>\n            <path d=\"M1732.11 373.273C1729.35 373.273 1727.11 375.512 1727.11 378.273C1727.11 381.035 1729.35 383.273 1732.11 383.273C1734.87 383.273 1737.11 381.035 1737.11 378.273C1737.11 375.512 1734.87 373.273 1732.11 373.273Z\" fill=\"#435E8A\"/>\n            <path d=\"M552.568 464.001C549.807 464.001 547.568 466.24 547.568 469.001C547.568 471.763 549.807 474.001 552.568 474.001C555.33 474.001 557.568 471.763 557.568 469.001C557.568 466.24 555.33 464.001 552.568 464.001Z\" fill=\"#3BCFE8\"/>\n            <path d=\"M1732.11 963.004C1729.35 963.004 1727.11 965.242 1727.11 968.004C1727.11 970.765 1729.35 973.004 1732.11 973.004C1734.87 973.004 1737.11 970.765 1737.11 968.004C1737.11 965.242 1734.87 963.004 1732.11 963.004Z\" fill=\"#435E8A\"/>\n            <path d=\"M1732.11 418.638C1729.35 418.638 1727.11 420.876 1727.11 423.638C1727.11 426.399 1729.35 428.638 1732.11 428.638C1734.87 428.638 1737.11 426.399 1737.11 423.638C1737.11 420.876 1734.87 418.638 1732.11 418.638Z\" fill=\"#435E8A\"/>\n            <path d=\"M1010.82 831.935C1010.82 829.174 1008.58 826.935 1005.82 826.935C1003.06 826.935 1000.82 829.174 1000.82 831.935C1000.82 834.697 1003.06 836.935 1005.82 836.935C1008.58 836.935 1010.82 834.697 1010.82 831.935Z\" fill=\"#435E8A\"/>\n            <path d=\"M874.728 877.302C874.728 874.541 872.489 872.302 869.728 872.302C866.966 872.302 864.728 874.541 864.728 877.302C864.728 880.064 866.966 882.302 869.728 882.302C872.489 882.302 874.728 880.064 874.728 877.302Z\" fill=\"#435E8A\"/>\n            <path d=\"M784 877.302C784 874.541 781.762 872.302 779 872.302C776.239 872.302 774 874.541 774 877.302C774 880.064 776.239 882.302 779 882.302C781.762 882.302 784 880.064 784 877.302Z\" fill=\"#435E8A\"/>\n            <path d=\"M874.728 831.935C874.728 829.174 872.489 826.935 869.728 826.935C866.966 826.935 864.728 829.174 864.728 831.935C864.728 834.697 866.966 836.935 869.728 836.935C872.489 836.935 874.728 834.697 874.728 831.935Z\" fill=\"#42C17D\"/>\n            <path d=\"M829.364 922.669C829.364 919.908 827.125 917.669 824.364 917.669C821.603 917.669 819.364 919.908 819.364 922.669C819.364 925.431 821.603 927.669 824.364 927.669C827.125 927.669 829.364 925.431 829.364 922.669Z\" fill=\"#435E8A\"/>\n            <path d=\"M1010.82 695.834C1010.82 693.073 1008.58 690.834 1005.82 690.834C1003.06 690.834 1000.82 693.073 1000.82 695.834C1000.82 698.595 1003.06 700.834 1005.82 700.834C1008.58 700.834 1010.82 698.595 1010.82 695.834Z\" fill=\"#435E8A\"/>\n            <path d=\"M1010.82 968.036C1010.82 965.275 1008.58 963.036 1005.82 963.036C1003.06 963.036 1000.82 965.275 1000.82 968.036C1000.82 970.798 1003.06 973.036 1005.82 973.036C1008.58 973.036 1010.82 970.798 1010.82 968.036Z\" fill=\"#E97994\"/>\n            <path d=\"M1146.91 695.834C1146.91 693.073 1144.67 690.834 1141.91 690.834C1139.15 690.834 1136.91 693.073 1136.91 695.834C1136.91 698.595 1139.15 700.834 1141.91 700.834C1144.67 700.834 1146.91 698.595 1146.91 695.834Z\" fill=\"#435E8A\"/>\n            <path d=\"M1101.55 831.935C1101.55 829.174 1099.31 826.935 1096.55 826.935C1093.79 826.935 1091.55 829.174 1091.55 831.935C1091.55 834.696 1093.79 836.935 1096.55 836.935C1099.31 836.935 1101.55 834.696 1101.55 831.935Z\" fill=\"#435E8A\"/>\n            <path d=\"M784 786.568C784 783.807 781.762 781.568 779 781.568C776.239 781.568 774 783.807 774 786.568C774 789.33 776.239 791.568 779 791.568C781.762 791.568 784 789.33 784 786.568Z\" fill=\"#435E8A\"/>\n            <path d=\"M920.092 605.1C920.092 602.338 917.853 600.1 915.092 600.1C912.331 600.1 910.092 602.338 910.092 605.1C910.092 607.861 912.331 610.1 915.092 610.1C917.853 610.1 920.092 607.861 920.092 605.1Z\" fill=\"#435E8A\"/>\n            <path d=\"M1101.55 786.568C1101.55 783.807 1099.31 781.568 1096.55 781.568C1093.79 781.568 1091.55 783.807 1091.55 786.568C1091.55 789.33 1093.79 791.568 1096.55 791.568C1099.31 791.568 1101.55 789.33 1101.55 786.568Z\" fill=\"#435E8A\"/>\n            <path d=\"M1101.55 695.834C1101.55 693.073 1099.31 690.834 1096.55 690.834C1093.79 690.834 1091.55 693.073 1091.55 695.834C1091.55 698.595 1093.79 700.834 1096.55 700.834C1099.31 700.834 1101.55 698.595 1101.55 695.834Z\" fill=\"#435E8A\"/>\n            <path d=\"M1056.18 741.201C1056.18 738.44 1053.95 736.201 1051.18 736.201C1048.42 736.201 1046.18 738.44 1046.18 741.201C1046.18 743.963 1048.42 746.201 1051.18 746.201C1053.95 746.201 1056.18 743.963 1056.18 741.201Z\" fill=\"#84B2FF\"/>\n            <path d=\"M1146.91 741.201C1146.91 738.44 1144.67 736.201 1141.91 736.201C1139.15 736.201 1136.91 738.44 1136.91 741.201C1136.91 743.963 1139.15 746.201 1141.91 746.201C1144.67 746.201 1146.91 743.963 1146.91 741.201Z\" fill=\"#435E8A\"/>\n            <path d=\"M829.364 514.366C829.364 511.604 827.125 509.366 824.364 509.366C821.603 509.366 819.364 511.604 819.364 514.366C819.364 517.127 821.603 519.366 824.364 519.366C827.125 519.366 829.364 517.127 829.364 514.366Z\" fill=\"#435E8A\"/>\n            <path d=\"M1192.28 650.467C1192.28 647.705 1190.04 645.467 1187.28 645.467C1184.51 645.467 1182.28 647.705 1182.28 650.467C1182.28 653.228 1184.51 655.467 1187.28 655.467C1190.04 655.467 1192.28 653.228 1192.28 650.467Z\" fill=\"#435E8A\"/>\n            <path d=\"M1101.55 559.733C1101.55 556.971 1099.31 554.733 1096.55 554.733C1093.79 554.733 1091.55 556.971 1091.55 559.733C1091.55 562.494 1093.79 564.733 1096.55 564.733C1099.31 564.733 1101.55 562.494 1101.55 559.733Z\" fill=\"#B38CFF\"/>\n            <path d=\"M874.728 741.201C874.728 738.44 872.489 736.201 869.728 736.201C866.966 736.201 864.728 738.44 864.728 741.201C864.728 743.963 866.966 746.201 869.728 746.201C872.489 746.201 874.728 743.963 874.728 741.201Z\" fill=\"#435E8A\"/>\n            <path d=\"M829.364 968.037C829.364 965.275 827.125 963.037 824.364 963.037C821.603 963.037 819.364 965.275 819.364 968.037C819.364 970.798 821.603 973.037 824.364 973.037C827.125 973.037 829.364 970.798 829.364 968.037Z\" fill=\"#435E8A\"/>\n            <path d=\"M965.456 922.669C965.456 919.908 963.217 917.669 960.456 917.669C957.694 917.669 955.456 919.908 955.456 922.669C955.456 925.431 957.694 927.669 960.456 927.669C963.217 927.669 965.456 925.431 965.456 922.669Z\" fill=\"#435E8A\"/>\n            <path d=\"M1010.82 786.568C1010.82 783.807 1008.58 781.568 1005.82 781.568C1003.06 781.568 1000.82 783.807 1000.82 786.568C1000.82 789.33 1003.06 791.568 1005.82 791.568C1008.58 791.568 1010.82 789.33 1010.82 786.568Z\" fill=\"#435E8A\"/>\n            <path d=\"M829.364 741.201C829.364 738.44 827.125 736.201 824.364 736.201C821.603 736.201 819.364 738.44 819.364 741.201C819.364 743.963 821.603 746.201 824.364 746.201C827.125 746.201 829.364 743.963 829.364 741.201Z\" fill=\"#435E8A\"/>\n            <path d=\"M874.728 968.037C874.728 965.275 872.489 963.037 869.728 963.037C866.966 963.037 864.728 965.275 864.728 968.037C864.728 970.798 866.966 973.037 869.728 973.037C872.489 973.037 874.728 970.798 874.728 968.037Z\" fill=\"#435E8A\"/>\n            <path d=\"M829.364 877.302C829.364 874.541 827.125 872.302 824.364 872.302C821.603 872.302 819.364 874.541 819.364 877.302C819.364 880.064 821.603 882.302 824.364 882.302C827.125 882.302 829.364 880.064 829.364 877.302Z\" fill=\"#435E8A\"/>\n            <path d=\"M1056.18 650.467C1056.18 647.705 1053.94 645.467 1051.18 645.467C1048.42 645.467 1046.18 647.705 1046.18 650.467C1046.18 653.228 1048.42 655.467 1051.18 655.467C1053.94 655.467 1056.18 653.228 1056.18 650.467Z\" fill=\"#435E8A\"/>\n        </g>\n        <path d=\"M1596 419C1593.24 419 1591 421.239 1591 424C1591 426.761 1593.24 429 1596 429C1598.76 429 1601 426.761 1601 424C1601 421.239 1598.76 419 1596 419Z\" fill=\"#5766FF\"/>\n        <path d=\"M915.505 146.454C912.743 146.454 910.505 148.693 910.505 151.454C910.505 154.216 912.743 156.454 915.505 156.454C918.266 156.454 920.505 154.216 920.505 151.454C920.505 148.693 918.266 146.454 915.505 146.454Z\" fill=\"#2CEDA9\"/>\n        <path d=\"M915 600C912.239 600 910 602.239 910 605C910 607.761 912.239 610 915 610C917.761 610 920 607.761 920 605C920 602.239 917.761 600 915 600Z\" fill=\"#EB4177\"/>\n        <path d=\"M1369 691C1366.24 691 1364 693.239 1364 696C1364 698.761 1366.24 701 1369 701C1371.76 701 1374 698.761 1374 696C1374 693.239 1371.76 691 1369 691Z\" fill=\"#59CFFF\"/>\n        <path d=\"M1414.5 146.5C1411.74 146.5 1409.5 148.739 1409.5 151.5C1409.5 154.261 1411.74 156.5 1414.5 156.5C1417.26 156.5 1419.5 154.261 1419.5 151.5C1419.5 148.739 1417.26 146.5 1414.5 146.5Z\" fill=\"#78B8F8\"/>\n        <path d=\"M1193 877C1193 874.239 1190.76 872 1188 872C1185.24 872 1183 874.239 1183 877C1183 879.761 1185.24 882 1188 882C1190.76 882 1193 879.761 1193 877Z\" fill=\"#7172FF\"/>\n        <rect y=\"498\" width=\"1800\" height=\"601\" fill=\"url(#ioniconf_hero_paint0_linear)\"/>\n    </g>\n    <defs>\n        <linearGradient id=\"ioniconf_hero_paint0_linear\" x1=\"900\" y1=\"498\" x2=\"900\" y2=\"1099\" gradientUnits=\"userSpaceOnUse\">\n            <stop stop-color=\"#000715\" stop-opacity=\"0\"/>\n            <stop offset=\"1\" stop-color=\"#000715\"/>\n        </linearGradient>\n    </defs>\n  </svg>\n  <div id=\"navSpace\"></div>\n\n  <div class=\"landing__wrap container\">\n    <div class=\"landing__content\">\n      <h1>\n        <span>June 24, 2020 // 100% online</span>\n        Thanks for being a part of Ioniconf 2020!\n      </h1>\n  \n      <p>Our live online event is over, but you can still relive the moments anytime below. We’ll see you next year!</p>\n\n      <a class=\"btn-main anchor\" href=\"#talks\" data-offset=\"100\">Watch the Talks</a>\n    </div>\n\n    <div class=\"landing__img\">\n      <svg viewbox=\"0 0 448 514\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n        <path opacity=\".7\" d=\"M444.8 383.6L224 257.6M224 257.6L3.2 383.6\" stroke=\"#567BFF\" stroke-width=\"4\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-dasharray=\"0.5 16\"/>\n        <path opacity=\".7\" d=\"M224 2.6v255.7\" stroke=\"url(#logo_ioniconf_paint0_linear)\" stroke-width=\"4\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-dasharray=\"0.5 16\"/>\n        <path opacity=\".8\" d=\"M363.6 257c0 77-62.5 139.4-139.6 139.4A139.5 139.5 0 0184.4 257c0-77 62.5-139.3 139.6-139.3S363.6 180 363.6 257z\" stroke=\"url(#logo_ioniconf_paint1_linear)\" stroke-width=\"4\"/>\n        <g filter=\"url(#logo_ioniconf_filter0_d)\">\n            <circle cx=\"321.8\" cy=\"158.1\" fill=\"url(#logo_ioniconf_paint2_linear)\" fill-opacity=\".8\" r=\"20.6\"/>\n        </g>\n        <ellipse cx=\"224\" cy=\"257\" rx=\"56.6\" ry=\"56.5\" fill=\"url(#logo_ioniconf_paint3_linear)\"/>\n        <path d=\"M222.2 2.5h0c.6-.4 1.2-.5 1.8-.5.6 0 1.2.1 1.8.5h0l218.4 125.7h0c1 .6 1.8 1.8 1.8 3v251.5c0 1.3-.7 2.5-1.8 3v.1h0L225.8 511.5h0c-.6.4-1.2.5-1.8.5-.6 0-1.2-.1-1.8-.5h0L3.8 385.8h0c-1-.6-1.8-1.8-1.8-3V131.2c0-1.2.6-2.3 1.9-3.1L222.2 2.5z\" stroke=\"url(#logo_ioniconf_paint4_linear)\" stroke-width=\"4\"/>\n        <path d=\"M224 510.1V257\" stroke=\"url(#logo_ioniconf_paint5_linear)\" stroke-width=\"4\" stroke-miterlimit=\"10\" stroke-linejoin=\"round\"/>\n        <path d=\"M2.8 130.8l218.4 125.6c1 .6 1.9.8 2.8.8 1 0 1.9-.2 2.8-.8l218.4-125.6\" stroke=\"url(#logo_ioniconf_paint6_linear)\" stroke-width=\"4\"/>\n        <defs>\n            <linearGradient id=\"logo_ioniconf_paint0_linear\" x1=\"224\" y1=\"3.9\" x2=\"224\" y2=\"258.3\" gradientUnits=\"userSpaceOnUse\">\n                <stop stop-color=\"#59BAFF\"/>\n                <stop offset=\"1\" stop-color=\"#5697FF\"/>\n            </linearGradient>\n            <linearGradient id=\"logo_ioniconf_paint1_linear\" x1=\"224\" y1=\"115.7\" x2=\"224\" y2=\"398.4\" gradientUnits=\"userSpaceOnUse\">\n                <stop stop-color=\"#FF56C7\"/>\n                <stop offset=\"1\" stop-color=\"#5CFFE2\" stop-opacity=\".8\"/>\n            </linearGradient>\n            <linearGradient id=\"logo_ioniconf_paint2_linear\" x1=\"321.8\" y1=\"137.5\" x2=\"321.8\" y2=\"178.6\" gradientUnits=\"userSpaceOnUse\">\n                <stop stop-color=\"#37CFFF\"/>\n                <stop offset=\"1\" stop-color=\"#556AFF\"/>\n            </linearGradient>\n            <linearGradient id=\"logo_ioniconf_paint3_linear\" x1=\"224\" y1=\"200.5\" x2=\"224\" y2=\"313.5\" gradientUnits=\"userSpaceOnUse\">\n                <stop stop-color=\"#A04EFF\"/>\n                <stop offset=\"1\" stop-color=\"#0BF\" stop-opacity=\".8\"/>\n            </linearGradient>\n            <linearGradient id=\"logo_ioniconf_paint4_linear\" x1=\"224\" y1=\"0\" x2=\"224\" y2=\"514\" gradientUnits=\"userSpaceOnUse\">\n                <stop stop-color=\"#58CFFF\"/>\n                <stop offset=\".3\" stop-color=\"#56A5FF\"/>\n                <stop offset=\"1\" stop-color=\"#5E5EFF\"/>\n            </linearGradient>\n            <linearGradient id=\"logo_ioniconf_paint5_linear\" x1=\"224.5\" y1=\"257\" x2=\"224.5\" y2=\"510.1\" gradientUnits=\"userSpaceOnUse\">\n                <stop stop-color=\"#2CEDA8\"/>\n                <stop offset=\".5\" stop-color=\"#4DC8FF\"/>\n                <stop offset=\"1\" stop-color=\"#5E5FFF\"/>\n            </linearGradient>\n            <linearGradient id=\"logo_ioniconf_paint6_linear\" x1=\"5.8\" y1=\"133.6\" x2=\"445.4\" y2=\"133.6\" gradientUnits=\"userSpaceOnUse\">\n                <stop stop-color=\"#56A4FF\"/>\n                <stop offset=\".5\" stop-color=\"#2BEDA7\"/>\n                <stop offset=\"1\" stop-color=\"#56A4FF\"/>\n            </linearGradient>\n            <filter id=\"logo_ioniconf_filter0_d\" x=\"285.2\" y=\"121.5\" width=\"73.2\" height=\"73.1\" filterUnits=\"userSpaceOnUse\" color-interpolation-filters=\"sRGB\">\n                <feFlood flood-opacity=\"0\" result=\"BackgroundImageFix\"/>\n                <feColorMatrix in=\"SourceAlpha\" values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0\"/>\n                <feOffset/>\n                <feGaussianBlur stdDeviation=\"8\"/>\n                <feColorMatrix values=\"0 0 0 0 0.00392157 0 0 0 0 0.0235294 0 0 0 0 0.0627451 0 0 0 1 0\"/>\n                <feBlend in2=\"BackgroundImageFix\" result=\"effect1_dropShadow\"/>\n                <feBlend in=\"SourceGraphic\" in2=\"effect1_dropShadow\" result=\"shape\"/>\n            </filter>\n        </defs>\n      </svg>  \n    </div>\n  </div>\n</section>\n\n<div id=\"backgroundImage\">\n<section id=\"keynote\" class=\"container\">\n  <h2>Watch the Keynote</h2>\n  <div class=\"keynote__video\">\n    <iframe width=\"560\" height=\"315\" src=\"https://www.youtube.com/embed/yiUGWrvq0kk\" frameborder=\"0\" allow=\"accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen></iframe>\n  </div>\n</section>\n\n<section id=\"talks\" class=\"container\">\n  <h2>Talks</h2>\n  <div class=\"talks__cards\">\n    <article class=\"card\">  \n      <div class=\"card__video\">\n        <iframe width=\"560\" height=\"315\" src=\"https://www.youtube.com/embed/Qox56z4xH6o\" frameborder=\"0\" allow=\"accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen></iframe>\n      </div>\n      <div class=\"card__title \">\n        <span class=\"info\">\n          <img  class=\"\"\n                src=\"/img/ioniconf/icon-shawn-wang@2x.png\"\n                srcset=\"/img/ioniconf/icon-shawn-wang@1x.png 1x,\n                        /img/ioniconf/icon-shawn-wang@2x.png 2x\"\n                loading=\"lazy\"\n                width=\"32\" height=\"32\"\n                alt=\"Shawn Wang icon\" />\n          <h3>Shawn Wang</h3>\n        </span>\n        <span class=\"social\">\n          <a href=\"https://twitter.com/swyx\" target=\"_blank\" rel=noopener>\n            <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" width=\"20\" height=\"18\" viewBox=\"0 0 20 18\">\n              <defs/>\n              <path stroke=\"#fff\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M19.17.84A8.63 8.63 0 0116.6 2.2 3.63 3.63 0 0014.72.95c-.73-.2-1.5-.15-2.2.14-.7.3-1.3.81-1.72 1.5a4.26 4.26 0 00-.63 2.29v.9a8.13 8.13 0 01-4.15-1.02A8.99 8.99 0 012.8 1.73s-3.27 8.03 4.1 11.6a8.96 8.96 0 01-5.73 1.78c7.36 4.45 16.36 0 16.36-10.26 0-.25-.02-.5-.07-.74a7.06 7.06 0 001.7-3.27z\"/>\n            </svg>\n          </a>\n          <a href=\"https://www.linkedin.com/in/shawnswyxwang/\" target=\"_blank\" rel=noopener>\n            <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" width=\"18\" height=\"18\" viewBox=\"0 0 18 18\">\n              <defs/>\n              <path stroke=\"#fff\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M12.37 5.88c1.27 0 2.49.54 3.39 1.48a5.2 5.2 0 011.4 3.58v5.89h-3.2v-5.9c0-.44-.16-.87-.46-1.19-.3-.31-.71-.49-1.13-.49-.43 0-.84.18-1.14.5-.3.31-.46.74-.46 1.19v5.89h-3.2v-5.9c0-1.33.5-2.62 1.4-3.57a4.68 4.68 0 013.4-1.48v0z\"/>\n              <path stroke=\"#fff\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M4.37 6.73h-3.2v10.1h3.2V6.73z\"/>\n              <path stroke=\"#fff\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M2.77 4.2c.88 0 1.6-.76 1.6-1.69 0-.93-.72-1.68-1.6-1.68-.89 0-1.6.75-1.6 1.68 0 .93.71 1.69 1.6 1.69z\"/>\n            </svg>\n          </a>\n        </span>\n      </div>\n      <p class=\"card__info\">What's new in React</p>\n    </article>\n    <article class=\"card\">\n      <div class=\"card__video\">  \n        <iframe width=\"560\" height=\"315\" src=\"https://www.youtube.com/embed/e-ns4WH4k4s\" frameborder=\"0\" allow=\"accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen></iframe>\n      </div>\n      <div class=\"card__title \">\n        <span class=\"info\">\n          <img  src=\"/img/ioniconf/icon-ana-cidre@2x.png\"\n                srcset=\"/img/ioniconf/icon-ana-cidre@1x.png 1x,\n                        /img/ioniconf/icon-ana-cidre@2x.png 2x\"\n                loading=\"lazy\"\n                width=\"32\" height=\"32\"\n                alt=\"Ana Cidre icon\" />\n          <h3>Ana Cidre</h3>\n        </span>\n        <span class=\"social\">\n          <a href=\"https://twitter.com/AnaCidre_\" target=\"_blank\" rel=noopener>\n            <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" width=\"20\" height=\"18\" viewBox=\"0 0 20 18\">\n              <defs/>\n              <path stroke=\"#fff\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M19.17.84A8.63 8.63 0 0116.6 2.2 3.63 3.63 0 0014.72.95c-.73-.2-1.5-.15-2.2.14-.7.3-1.3.81-1.72 1.5a4.26 4.26 0 00-.63 2.29v.9a8.13 8.13 0 01-4.15-1.02A8.99 8.99 0 012.8 1.73s-3.27 8.03 4.1 11.6a8.96 8.96 0 01-5.73 1.78c7.36 4.45 16.36 0 16.36-10.26 0-.25-.02-.5-.07-.74a7.06 7.06 0 001.7-3.27z\"/>\n            </svg>\n          </a>\n          <a href=\"https://www.linkedin.com/in/ana-cidre/\" target=\"_blank\" rel=noopener>\n            <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" width=\"18\" height=\"18\" viewBox=\"0 0 18 18\">\n              <defs/>\n              <path stroke=\"#fff\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M12.37 5.88c1.27 0 2.49.54 3.39 1.48a5.2 5.2 0 011.4 3.58v5.89h-3.2v-5.9c0-.44-.16-.87-.46-1.19-.3-.31-.71-.49-1.13-.49-.43 0-.84.18-1.14.5-.3.31-.46.74-.46 1.19v5.89h-3.2v-5.9c0-1.33.5-2.62 1.4-3.57a4.68 4.68 0 013.4-1.48v0z\"/>\n              <path stroke=\"#fff\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M4.37 6.73h-3.2v10.1h3.2V6.73z\"/>\n              <path stroke=\"#fff\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M2.77 4.2c.88 0 1.6-.76 1.6-1.69 0-.93-.72-1.68-1.6-1.68-.89 0-1.6.75-1.6 1.68 0 .93.71 1.69 1.6 1.69z\"/>\n            </svg>\n          </a>\n        </span>\n      </div>\n      <p class=\"card__info\">Web Components for Auth: The what, the how and the why</p>\n    </article>\n    <article class=\"card\">\n      <div class=\"card__video\">\n        <iframe width=\"560\" height=\"315\" src=\"https://www.youtube.com/embed/D4sMJHl5rbc\" frameborder=\"0\" allow=\"accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen></iframe>\n      </div>\n      <div class=\"card__title\">\n        <span class=\"info\">\n          <img  src=\"/img/ioniconf/icon-yvonne-allen@2x.png\"\n                srcset=\"/img/ioniconf/icon-yvonne-allen@1x.png 1x,\n                        /img/ioniconf/icon-yvonne-allen@2x.png 2x\"\n                loading=\"lazy\"\n                width=\"32\" height=\"32\"\n                alt=\"Yvonne Allen icon\" />\n          <h3>Yvonne Allen</h3>\n        </span>\n        <span class=\"social\">\n          <a href=\"https://twitter.com/yallen011\" target=\"_blank\" rel=noopener>\n            <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" width=\"20\" height=\"18\" viewBox=\"0 0 20 18\">\n              <defs/>\n              <path stroke=\"#fff\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M19.17.84A8.63 8.63 0 0116.6 2.2 3.63 3.63 0 0014.72.95c-.73-.2-1.5-.15-2.2.14-.7.3-1.3.81-1.72 1.5a4.26 4.26 0 00-.63 2.29v.9a8.13 8.13 0 01-4.15-1.02A8.99 8.99 0 012.8 1.73s-3.27 8.03 4.1 11.6a8.96 8.96 0 01-5.73 1.78c7.36 4.45 16.36 0 16.36-10.26 0-.25-.02-.5-.07-.74a7.06 7.06 0 001.7-3.27z\"/>\n            </svg>\n          </a>\n          <a href=\"https://www.linkedin.com/in/yvonne-allen-52b59316/\" target=\"_blank\" rel=noopener>\n            <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" width=\"18\" height=\"18\" viewBox=\"0 0 18 18\">\n              <defs/>\n              <path stroke=\"#fff\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M12.37 5.88c1.27 0 2.49.54 3.39 1.48a5.2 5.2 0 011.4 3.58v5.89h-3.2v-5.9c0-.44-.16-.87-.46-1.19-.3-.31-.71-.49-1.13-.49-.43 0-.84.18-1.14.5-.3.31-.46.74-.46 1.19v5.89h-3.2v-5.9c0-1.33.5-2.62 1.4-3.57a4.68 4.68 0 013.4-1.48v0z\"/>\n              <path stroke=\"#fff\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M4.37 6.73h-3.2v10.1h3.2V6.73z\"/>\n              <path stroke=\"#fff\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M2.77 4.2c.88 0 1.6-.76 1.6-1.69 0-.93-.72-1.68-1.6-1.68-.89 0-1.6.75-1.6 1.68 0 .93.71 1.69 1.6 1.69z\"/>\n            </svg>\n          </a>\n        </span>\n      </div>\n      <p class=\"card__info\">Warp your Reality with WebVR and Angular</p>\n    </article>\n    <article class=\"card\">\n      <div class=\"card__video\">\n        <iframe width=\"560\" height=\"315\" src=\"https://www.youtube.com/embed/EhdEUdPEPF8\" frameborder=\"0\" allow=\"accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen></iframe>\n      </div>\n      <div class=\"card__title\">\n        <span class=\"info\">\n          <img  src=\"/img/ioniconf/icon-diana-rodriguez@2x.png\"\n                srcset=\"/img/ioniconf/icon-diana-rodriguez@1x.png 1x,\n                        /img/ioniconf/icon-diana-rodriguez@2x.png 2x\"\n                loading=\"lazy\"\n                width=\"32\" height=\"32\"\n                alt=\"Diana Rodriguez icon\" />\n          <h3>Diana Rodriguez</h3>\n        </span>\n        <span class=\"social\">\n          <a href=\"https://twitter.com/cotufa82\" target=\"_blank\" rel=noopener>\n            <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" width=\"20\" height=\"18\" viewBox=\"0 0 20 18\">\n              <defs/>\n              <path stroke=\"#fff\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M19.17.84A8.63 8.63 0 0116.6 2.2 3.63 3.63 0 0014.72.95c-.73-.2-1.5-.15-2.2.14-.7.3-1.3.81-1.72 1.5a4.26 4.26 0 00-.63 2.29v.9a8.13 8.13 0 01-4.15-1.02A8.99 8.99 0 012.8 1.73s-3.27 8.03 4.1 11.6a8.96 8.96 0 01-5.73 1.78c7.36 4.45 16.36 0 16.36-10.26 0-.25-.02-.5-.07-.74a7.06 7.06 0 001.7-3.27z\"/>\n            </svg>\n          </a>\n          <a href=\"https://www.linkedin.com/in/nerdattack82/\" target=\"_blank\" rel=noopener>\n            <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" width=\"18\" height=\"18\" viewBox=\"0 0 18 18\">\n              <defs/>\n              <path stroke=\"#fff\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M12.37 5.88c1.27 0 2.49.54 3.39 1.48a5.2 5.2 0 011.4 3.58v5.89h-3.2v-5.9c0-.44-.16-.87-.46-1.19-.3-.31-.71-.49-1.13-.49-.43 0-.84.18-1.14.5-.3.31-.46.74-.46 1.19v5.89h-3.2v-5.9c0-1.33.5-2.62 1.4-3.57a4.68 4.68 0 013.4-1.48v0z\"/>\n              <path stroke=\"#fff\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M4.37 6.73h-3.2v10.1h3.2V6.73z\"/>\n              <path stroke=\"#fff\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M2.77 4.2c.88 0 1.6-.76 1.6-1.69 0-.93-.72-1.68-1.6-1.68-.89 0-1.6.75-1.6 1.68 0 .93.71 1.69 1.6 1.69z\"/>\n            </svg>\n          </a>\n        </span>\n      </div>\n      <p class=\"card__info\">Smile! The web is your photobooth!</p>\n    </article>\n    <article class=\"card\">  \n      <div class=\"card__video\">\n        <iframe width=\"560\" height=\"315\" src=\"https://www.youtube.com/embed/4epRb3nBcQw\" frameborder=\"0\" allow=\"accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen></iframe>\n      </div>\n      <div class=\"card__title\">\n        <span class=\"info\">\n          <img  class=\"\"\n              src=\"/img/ioniconf/icon-john-papa@2x.png\"\n              srcset=\"/img/ioniconf/icon-john-papa@1x.png 1x,\n                      /img/ioniconf/icon-john-papa@2x.png 2x\"\n              loading=\"lazy\"\n              width=\"32\" height=\"32\"\n              alt=\"John Papa icon\" />\n          <h3>John Papa</h3>\n        </span>\n        <span class=\"social\">\n          <a href=\"https://twitter.com/John_Papa\" target=\"_blank\" rel=noopener>\n            <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" width=\"20\" height=\"18\" viewBox=\"0 0 20 18\">\n              <defs/>\n              <path stroke=\"#fff\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M19.17.84A8.63 8.63 0 0116.6 2.2 3.63 3.63 0 0014.72.95c-.73-.2-1.5-.15-2.2.14-.7.3-1.3.81-1.72 1.5a4.26 4.26 0 00-.63 2.29v.9a8.13 8.13 0 01-4.15-1.02A8.99 8.99 0 012.8 1.73s-3.27 8.03 4.1 11.6a8.96 8.96 0 01-5.73 1.78c7.36 4.45 16.36 0 16.36-10.26 0-.25-.02-.5-.07-.74a7.06 7.06 0 001.7-3.27z\"/>\n            </svg>\n          </a>\n          <a href=\"https://www.linkedin.com/in/papajohn/\" target=\"_blank\" rel=noopener>\n            <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" width=\"18\" height=\"18\" viewBox=\"0 0 18 18\">\n              <defs/>\n              <path stroke=\"#fff\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M12.37 5.88c1.27 0 2.49.54 3.39 1.48a5.2 5.2 0 011.4 3.58v5.89h-3.2v-5.9c0-.44-.16-.87-.46-1.19-.3-.31-.71-.49-1.13-.49-.43 0-.84.18-1.14.5-.3.31-.46.74-.46 1.19v5.89h-3.2v-5.9c0-1.33.5-2.62 1.4-3.57a4.68 4.68 0 013.4-1.48v0z\"/>\n              <path stroke=\"#fff\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M4.37 6.73h-3.2v10.1h3.2V6.73z\"/>\n              <path stroke=\"#fff\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M2.77 4.2c.88 0 1.6-.76 1.6-1.69 0-.93-.72-1.68-1.6-1.68-.89 0-1.6.75-1.6 1.68 0 .93.71 1.69 1.6 1.69z\"/>\n            </svg>\n          </a>\n        </span>\n      </div>\n      <p class=\"card__info\">Code to Scale: Build and deploy static web apps in minutes</p>\n    </article>\n    <article class=\"card\">  \n      <div class=\"card__video\">\n        <iframe width=\"560\" height=\"315\" src=\"https://www.youtube.com/embed/iANIJVRR-yM\" frameborder=\"0\" allow=\"accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen></iframe>\n      </div>\n      <div class=\"card__title \">\n        <span class=\"info\">\n          <img  class=\"\"\n                src=\"/img/ioniconf/icon-lukas-ruebbelke@2x.png\"\n                srcset=\"/img/ioniconf/icon-lukas-ruebbelke@1x.png 1x,\n                        /img/ioniconf/icon-lukas-ruebbelke@2x.png 2x\"\n                loading=\"lazy\"\n                width=\"32\" height=\"32\"\n                alt=\"Lukas Ruebbelke icon\" />\n          <h3>Lukas Ruebbelke</h3>\n        </span>\n        <span class=\"social\">\n          <a href=\"https://twitter.com/simpulton\" target=\"_blank\" rel=noopener>\n            <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" width=\"20\" height=\"18\" viewBox=\"0 0 20 18\">\n              <defs/>\n              <path stroke=\"#fff\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M19.17.84A8.63 8.63 0 0116.6 2.2 3.63 3.63 0 0014.72.95c-.73-.2-1.5-.15-2.2.14-.7.3-1.3.81-1.72 1.5a4.26 4.26 0 00-.63 2.29v.9a8.13 8.13 0 01-4.15-1.02A8.99 8.99 0 012.8 1.73s-3.27 8.03 4.1 11.6a8.96 8.96 0 01-5.73 1.78c7.36 4.45 16.36 0 16.36-10.26 0-.25-.02-.5-.07-.74a7.06 7.06 0 001.7-3.27z\"/>\n            </svg>\n          </a>\n          <a href=\"https://www.linkedin.com/in/lukasruebbelke/\" target=\"_blank\" rel=noopener>\n            <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" width=\"18\" height=\"18\" viewBox=\"0 0 18 18\">\n              <defs/>\n              <path stroke=\"#fff\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M12.37 5.88c1.27 0 2.49.54 3.39 1.48a5.2 5.2 0 011.4 3.58v5.89h-3.2v-5.9c0-.44-.16-.87-.46-1.19-.3-.31-.71-.49-1.13-.49-.43 0-.84.18-1.14.5-.3.31-.46.74-.46 1.19v5.89h-3.2v-5.9c0-1.33.5-2.62 1.4-3.57a4.68 4.68 0 013.4-1.48v0z\"/>\n              <path stroke=\"#fff\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M4.37 6.73h-3.2v10.1h3.2V6.73z\"/>\n              <path stroke=\"#fff\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M2.77 4.2c.88 0 1.6-.76 1.6-1.69 0-.93-.72-1.68-1.6-1.68-.89 0-1.6.75-1.6 1.68 0 .93.71 1.69 1.6 1.69z\"/>\n            </svg>\n          </a>\n        </span>\n      </div>\n      <p class=\"card__info\">High Torque Delivery with Ionic</p>\n    </article>\n    <article class=\"card\">  \n      <div class=\"card__video\">\n        <iframe width=\"560\" height=\"315\" src=\"https://www.youtube.com/embed/cZlm9J0C5GA\" frameborder=\"0\" allow=\"accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen></iframe>\n      </div>\n      <div class=\"card__title\">\n        <span class=\"info\">\n          <img  class=\"\"\n                src=\"/img/ioniconf/icon-cecelia-martinez@2x.png\"\n                srcset=\"/img/ioniconf/icon-cecelia-martinez@1x.png 1x,\n                        /img/ioniconf/icon-cecelia-martinez@2x.png 2x\"\n                loading=\"lazy\"\n                width=\"32\" height=\"32\"\n                alt=\"Cecelia Martinez icon\" />\n          <h3>Cecelia Martinez</h3>\n        </span>\n        <span class=\"social\">\n          <a href=\"https://twitter.com/ceceliacreates\" target=\"_blank\" rel=noopener>\n            <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" width=\"20\" height=\"18\" viewBox=\"0 0 20 18\">\n              <defs/>\n              <path stroke=\"#fff\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M19.17.84A8.63 8.63 0 0116.6 2.2 3.63 3.63 0 0014.72.95c-.73-.2-1.5-.15-2.2.14-.7.3-1.3.81-1.72 1.5a4.26 4.26 0 00-.63 2.29v.9a8.13 8.13 0 01-4.15-1.02A8.99 8.99 0 012.8 1.73s-3.27 8.03 4.1 11.6a8.96 8.96 0 01-5.73 1.78c7.36 4.45 16.36 0 16.36-10.26 0-.25-.02-.5-.07-.74a7.06 7.06 0 001.7-3.27z\"/>\n            </svg>\n          </a>\n          <a href=\"https://www.linkedin.com/in/ceceliamartinez/\" target=\"_blank\" rel=noopener>\n            <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" width=\"18\" height=\"18\" viewBox=\"0 0 18 18\">\n              <defs/>\n              <path stroke=\"#fff\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M12.37 5.88c1.27 0 2.49.54 3.39 1.48a5.2 5.2 0 011.4 3.58v5.89h-3.2v-5.9c0-.44-.16-.87-.46-1.19-.3-.31-.71-.49-1.13-.49-.43 0-.84.18-1.14.5-.3.31-.46.74-.46 1.19v5.89h-3.2v-5.9c0-1.33.5-2.62 1.4-3.57a4.68 4.68 0 013.4-1.48v0z\"/>\n              <path stroke=\"#fff\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M4.37 6.73h-3.2v10.1h3.2V6.73z\"/>\n              <path stroke=\"#fff\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M2.77 4.2c.88 0 1.6-.76 1.6-1.69 0-.93-.72-1.68-1.6-1.68-.89 0-1.6.75-1.6 1.68 0 .93.71 1.69 1.6 1.69z\"/>\n            </svg>\n          </a>\n        </span>\n      </div>\n      <p class=\"card__info\">End-to-end testing mobile apps with Ionic and Cypress</p>\n    </article>\n    <article class=\"card\">  \n      <div class=\"card__video\">\n        <iframe width=\"560\" height=\"315\" src=\"https://www.youtube.com/embed/2cSs7FiKX78\" frameborder=\"0\" allow=\"accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen></iframe>      </div>\n      <div class=\"card__title\">\n        <span class=\"info\">\n          <img  src=\"/img/ioniconf/icon-jedi-weller@2x.png\"\n              srcset=\"/img/ioniconf/icon-jedi-weller@1x.png 1x,\n                      /img/ioniconf/icon-jedi-weller@2x.png 2x\"\n              loading=\"lazy\"\n              width=\"32\" height=\"32\"\n              alt=\"Jedi Weller icon\" />\n        <h3>Jedi Weller</h3>\n        </span>\n        <span class=\"social\">\n          <a href=\"https://twitter.com/jedihacks\" target=\"_blank\" rel=noopener>\n            <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" width=\"20\" height=\"18\" viewBox=\"0 0 20 18\">\n              <defs/>\n              <path stroke=\"#fff\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M19.17.84A8.63 8.63 0 0116.6 2.2 3.63 3.63 0 0014.72.95c-.73-.2-1.5-.15-2.2.14-.7.3-1.3.81-1.72 1.5a4.26 4.26 0 00-.63 2.29v.9a8.13 8.13 0 01-4.15-1.02A8.99 8.99 0 012.8 1.73s-3.27 8.03 4.1 11.6a8.96 8.96 0 01-5.73 1.78c7.36 4.45 16.36 0 16.36-10.26 0-.25-.02-.5-.07-.74a7.06 7.06 0 001.7-3.27z\"/>\n            </svg>\n          </a>\n          <a href=\"https://www.linkedin.com/in/jedidiahweller/\" target=\"_blank\" rel=noopener>\n            <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" width=\"18\" height=\"18\" viewBox=\"0 0 18 18\">\n              <defs/>\n              <path stroke=\"#fff\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M12.37 5.88c1.27 0 2.49.54 3.39 1.48a5.2 5.2 0 011.4 3.58v5.89h-3.2v-5.9c0-.44-.16-.87-.46-1.19-.3-.31-.71-.49-1.13-.49-.43 0-.84.18-1.14.5-.3.31-.46.74-.46 1.19v5.89h-3.2v-5.9c0-1.33.5-2.62 1.4-3.57a4.68 4.68 0 013.4-1.48v0z\"/>\n              <path stroke=\"#fff\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M4.37 6.73h-3.2v10.1h3.2V6.73z\"/>\n              <path stroke=\"#fff\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M2.77 4.2c.88 0 1.6-.76 1.6-1.69 0-.93-.72-1.68-1.6-1.68-.89 0-1.6.75-1.6 1.68 0 .93.71 1.69 1.6 1.69z\"/>\n            </svg>\n          </a>\n        </span>\n      </div>\n      <p>How to Create A Successful Product Launch Strategy</p>\n    </article>\n    <article class=\"card\">  \n      <div class=\"card__video\">\n        <iframe width=\"560\" height=\"315\" src=\"https://www.youtube.com/embed/A5a15NrcGoM\" frameborder=\"0\" allow=\"accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen></iframe>\n      </div>  \n      <div class=\"card__title\">\n        <span class=\"info\">\n          <img  src=\"/img/ioniconf/icon-liam-debeasi@2x.png\"\n              srcset=\"/img/ioniconf/icon-liam-debeasi@1x.png 1x,\n                      /img/ioniconf/icon-liam-debeasi@2x.png 2x\"\n              loading=\"lazy\"\n              width=\"32\" height=\"32\"\n              alt=\"Liam Debeasi icon\" />\n        <h3>Liam DeBeasi</h3>\n        </span>\n        <span class=\"social\">\n          <a href=\"https://twitter.com/LiamDeBeasi\" target=\"_blank\" rel=noopener>\n            <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" width=\"20\" height=\"18\" viewBox=\"0 0 20 18\">\n              <defs/>\n              <path stroke=\"#fff\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M19.17.84A8.63 8.63 0 0116.6 2.2 3.63 3.63 0 0014.72.95c-.73-.2-1.5-.15-2.2.14-.7.3-1.3.81-1.72 1.5a4.26 4.26 0 00-.63 2.29v.9a8.13 8.13 0 01-4.15-1.02A8.99 8.99 0 012.8 1.73s-3.27 8.03 4.1 11.6a8.96 8.96 0 01-5.73 1.78c7.36 4.45 16.36 0 16.36-10.26 0-.25-.02-.5-.07-.74a7.06 7.06 0 001.7-3.27z\"/>\n            </svg>\n          </a>\n          <a href=\"https://www.linkedin.com/in/liamdebeasi/\" target=\"_blank\" rel=noopener>\n            <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" width=\"18\" height=\"18\" viewBox=\"0 0 18 18\">\n              <defs/>\n              <path stroke=\"#fff\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M12.37 5.88c1.27 0 2.49.54 3.39 1.48a5.2 5.2 0 011.4 3.58v5.89h-3.2v-5.9c0-.44-.16-.87-.46-1.19-.3-.31-.71-.49-1.13-.49-.43 0-.84.18-1.14.5-.3.31-.46.74-.46 1.19v5.89h-3.2v-5.9c0-1.33.5-2.62 1.4-3.57a4.68 4.68 0 013.4-1.48v0z\"/>\n              <path stroke=\"#fff\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M4.37 6.73h-3.2v10.1h3.2V6.73z\"/>\n              <path stroke=\"#fff\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M2.77 4.2c.88 0 1.6-.76 1.6-1.69 0-.93-.72-1.68-1.6-1.68-.89 0-1.6.75-1.6 1.68 0 .93.71 1.69 1.6 1.69z\"/>\n            </svg>\n          </a>\n        </span>\n      </div>\n      <p>Beyond Fast: An animation deep dive</p>\n    </article>\n    <article class=\"card\">  \n      <div class=\"card__video\">\n        <iframe width=\"560\" height=\"315\" src=\"https://www.youtube.com/embed/l1VuvHNj0Lg\" frameborder=\"0\" allow=\"accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen></iframe>      </div>  \n      <div class=\"card__title\">\n        <span class=\"info\">\n          <img  src=\"/img/ioniconf/icon-aaron-saunders@2x.png\"\n              srcset=\"/img/ioniconf/icon-aaron-saunders@1x.png 1x,\n                      /img/ioniconf/icon-aaron-saunders@2x.png 2x\"\n              loading=\"lazy\"\n              width=\"32\" height=\"32\"\n              alt=\"Aaron Saunders icon\" />\n          <h3>Aaron Saunders</h3>\n        </span>\n        <span class=\"social\">\n          <a href=\"https://twitter.com/aaronksaunders\" target=\"_blank\" rel=noopener>\n            <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" width=\"20\" height=\"18\" viewBox=\"0 0 20 18\">\n              <defs/>\n              <path stroke=\"#fff\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M19.17.84A8.63 8.63 0 0116.6 2.2 3.63 3.63 0 0014.72.95c-.73-.2-1.5-.15-2.2.14-.7.3-1.3.81-1.72 1.5a4.26 4.26 0 00-.63 2.29v.9a8.13 8.13 0 01-4.15-1.02A8.99 8.99 0 012.8 1.73s-3.27 8.03 4.1 11.6a8.96 8.96 0 01-5.73 1.78c7.36 4.45 16.36 0 16.36-10.26 0-.25-.02-.5-.07-.74a7.06 7.06 0 001.7-3.27z\"/>\n            </svg>\n          </a>\n          <a href=\"https://www.linkedin.com/in/aaronksaunders/\" target=\"_blank\" rel=noopener>\n            <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" width=\"18\" height=\"18\" viewBox=\"0 0 18 18\">\n              <defs/>\n              <path stroke=\"#fff\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M12.37 5.88c1.27 0 2.49.54 3.39 1.48a5.2 5.2 0 011.4 3.58v5.89h-3.2v-5.9c0-.44-.16-.87-.46-1.19-.3-.31-.71-.49-1.13-.49-.43 0-.84.18-1.14.5-.3.31-.46.74-.46 1.19v5.89h-3.2v-5.9c0-1.33.5-2.62 1.4-3.57a4.68 4.68 0 013.4-1.48v0z\"/>\n              <path stroke=\"#fff\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M4.37 6.73h-3.2v10.1h3.2V6.73z\"/>\n              <path stroke=\"#fff\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M2.77 4.2c.88 0 1.6-.76 1.6-1.69 0-.93-.72-1.68-1.6-1.68-.89 0-1.6.75-1.6 1.68 0 .93.71 1.69 1.6 1.69z\"/>\n            </svg>\n          </a>\n        </span>\n      </div>\n      <p>State management with React Context</p>\n    </article>\n    <article class=\"card\">  \n      <div class=\"card__video\">\n        <iframe width=\"560\" height=\"315\" src=\"https://www.youtube.com/embed/awk_3QmBXTw\" frameborder=\"0\" allow=\"accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen></iframe>\n      </div>  \n      <div class=\"card__title\">\n        <span class=\"info\">\n          <img  src=\"/img/ioniconf/icon-karo-ladino@2x.png\"\n              srcset=\"/img/ioniconf/icon-karo-ladino@1x.png 1x,\n                      /img/ioniconf/icon-karo-ladino@2x.png 2x\"\n              loading=\"lazy\"\n              width=\"32\" height=\"32\"\n              alt=\"Karo Ladino icon\" />\n          <h3>Karo Ladino</h3>\n        </span>\n        <span class=\"social\">\n          <a href=\"https://twitter.com/karobotco\" target=\"_blank\" rel=noopener>\n            <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" width=\"20\" height=\"18\" viewBox=\"0 0 20 18\">\n              <defs/>\n              <path stroke=\"#fff\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M19.17.84A8.63 8.63 0 0116.6 2.2 3.63 3.63 0 0014.72.95c-.73-.2-1.5-.15-2.2.14-.7.3-1.3.81-1.72 1.5a4.26 4.26 0 00-.63 2.29v.9a8.13 8.13 0 01-4.15-1.02A8.99 8.99 0 012.8 1.73s-3.27 8.03 4.1 11.6a8.96 8.96 0 01-5.73 1.78c7.36 4.45 16.36 0 16.36-10.26 0-.25-.02-.5-.07-.74a7.06 7.06 0 001.7-3.27z\"/>\n            </svg>\n          </a>\n          <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" width=\"18\" height=\"18\" viewBox=\"0 0 18 18\">\n            <defs/>\n            <path stroke=\"#fff\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M12.37 5.88c1.27 0 2.49.54 3.39 1.48a5.2 5.2 0 011.4 3.58v5.89h-3.2v-5.9c0-.44-.16-.87-.46-1.19-.3-.31-.71-.49-1.13-.49-.43 0-.84.18-1.14.5-.3.31-.46.74-.46 1.19v5.89h-3.2v-5.9c0-1.33.5-2.62 1.4-3.57a4.68 4.68 0 013.4-1.48v0z\"/>\n            <path stroke=\"#fff\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M4.37 6.73h-3.2v10.1h3.2V6.73z\"/>\n            <path stroke=\"#fff\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M2.77 4.2c.88 0 1.6-.76 1.6-1.69 0-.93-.72-1.68-1.6-1.68-.89 0-1.6.75-1.6 1.68 0 .93.71 1.69 1.6 1.69z\"/>\n          </svg>\n        </span>\n      </div>\n      <p>Javascript and IoT: A true love story</p>\n    </article>\n    <article class=\"card\">  \n      <div class=\"card__video\">\n        <iframe width=\"560\" height=\"315\" src=\"https://www.youtube.com/embed/JqCG3uhZQv0\" frameborder=\"0\" allow=\"accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen></iframe>      </div>  \n      <div class=\"card__title\">\n        <span class=\"info\">\n          <img  src=\"/img/ioniconf/icon-simon-grim@2x.png\"\n              srcset=\"/img/ioniconf/icon-simon-grim@1x.png 1x,\n                      /img/ioniconf/icon-simon-grim@2x.png 2x\"\n              loading=\"lazy\"\n              width=\"32\" height=\"32\"\n              alt=\"Simon Grimm icon\" />\n          <h3>Simon Grimm</h3>\n        </span>\n        <span class=\"social\">\n          <a href=\"https://twitter.com/schlimmson\" target=\"_blank\" rel=noopener>\n            <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" width=\"20\" height=\"18\" viewBox=\"0 0 20 18\">\n              <defs/>\n              <path stroke=\"#fff\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M19.17.84A8.63 8.63 0 0116.6 2.2 3.63 3.63 0 0014.72.95c-.73-.2-1.5-.15-2.2.14-.7.3-1.3.81-1.72 1.5a4.26 4.26 0 00-.63 2.29v.9a8.13 8.13 0 01-4.15-1.02A8.99 8.99 0 012.8 1.73s-3.27 8.03 4.1 11.6a8.96 8.96 0 01-5.73 1.78c7.36 4.45 16.36 0 16.36-10.26 0-.25-.02-.5-.07-.74a7.06 7.06 0 001.7-3.27z\"/>\n            </svg>\n          </a>\n          <a href=\"https://www.linkedin.com/in/simongr/\" target=\"_blank\" rel=noopener >\n            <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" width=\"18\" height=\"18\" viewBox=\"0 0 18 18\">\n              <defs/>\n              <path stroke=\"#fff\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M12.37 5.88c1.27 0 2.49.54 3.39 1.48a5.2 5.2 0 011.4 3.58v5.89h-3.2v-5.9c0-.44-.16-.87-.46-1.19-.3-.31-.71-.49-1.13-.49-.43 0-.84.18-1.14.5-.3.31-.46.74-.46 1.19v5.89h-3.2v-5.9c0-1.33.5-2.62 1.4-3.57a4.68 4.68 0 013.4-1.48v0z\"/>\n              <path stroke=\"#fff\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M4.37 6.73h-3.2v10.1h3.2V6.73z\"/>\n              <path stroke=\"#fff\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M2.77 4.2c.88 0 1.6-.76 1.6-1.69 0-.93-.72-1.68-1.6-1.68-.89 0-1.6.75-1.6 1.68 0 .93.71 1.69 1.6 1.69z\"/>\n            </svg>\n          </a>\n        </span>\n      </div>\n      <p>Demystifying Angular Routing</p>\n    </article>\n  </div> \n</section> \n\n<section id=\"topics\" class=\"\">\n  <div class=\"container\">\n    <h3>Topics & technologies covered:</h3>\n    <div id=\"topicsContent\">\n      <div class=\"\">\n        <div class=\"\">\n          <div>\n            <img  src=\"/img/ioniconf/logo-ionic@2x.png\"\n                  srcset=\"/img/ioniconf/logo-ionic@1x.png 1x,\n                          /img/ioniconf/logo-ionic@2x.png 2x\"\n                  loading=\"lazy\"\n                  width=\"40\" height=\"40\"\n                  alt=\"Ionic Logo\" />\n            <img  src=\"/img/ioniconf/logo-vue@2x.png\"\n                  srcset=\"/img/ioniconf/logo-vue@1x.png 1x,\n                          /img/ioniconf/logo-vue@2x.png 2x\"\n                  loading=\"lazy\"\n                  width=\"46\" height=\"40\"\n                  alt=\"Vue Logo\" />\n          </div>\n          <div>\n            <img  src=\"/img/ioniconf/logo-nodejs@2x.png\"\n                  srcset=\"/img/ioniconf/logo-nodejs@1x.png 1x,\n                          /img/ioniconf/logo-nodejs@2x.png 2x\"\n                  loading=\"lazy\"\n                  width=\"34\" height=\"40\"\n                  alt=\"nodejs logo\" />\n            <img  src=\"/img/ioniconf/logo-angular@2x.png\"\n                  srcset=\"/img/ioniconf/logo-angular@1x.png 1x,\n                          /img/ioniconf/logo-angular@2x.png 2x\"\n                  loading=\"lazy\"\n                  width=\"38\" height=\"40\"\n                  alt=\"Angular Logo\" />\n          </div>\n        </div>\n        <div class=\" u-wrap u-just-cont-c\">\n          <div>\n            <img  src=\"/img/ioniconf/logo-react@2x.png\"\n                  srcset=\"/img/ioniconf/logo-react@1x.png 1x,\n                          /img/ioniconf/logo-react@2x.png 2x\"\n                  loading=\"lazy\"\n                  width=\"45\" height=\"40\"\n                  alt=\"React Logo\" />\n            <img  src=\"/img/ioniconf/logo-javascript@2x.png\"\n                  srcset=\"/img/ioniconf/logo-javascript@1x.png 1x,\n                          /img/ioniconf/logo-javascript@2x.png 2x\"\n                  loading=\"lazy\"\n                  width=\"40\" height=\"40\"\n                  alt=\"JavaScript Logo\" />\n          </div>\n          <div>\n            <img  src=\"/img/ioniconf/logo-typescript@2x.png\"\n                  srcset=\"/img/ioniconf/logo-typescript@1x.png 1x,\n                          /img/ioniconf/logo-typescript@2x.png 2x\"\n                  loading=\"lazy\"\n                  width=\"40\" height=\"40\"\n                  alt=\"TypeScript Logo\" />\n            <img  src=\"/img/ioniconf/logo-html@2x.png\"\n                  srcset=\"/img/ioniconf/logo-html@1x.png 1x,\n                          /img/ioniconf/logo-html@2x.png 2x\"\n                  loading=\"lazy\"\n                  width=\"34\" height=\"40\"\n                  alt=\"HTML Logo\" />\n          </div>\n        </div>\n      </div>\n      <div class=\" u-wrap u-just-cont-c\">\n        <div class=\" u-wrap u-just-cont-c\">\n          <div>\n            <img  src=\"/img/ioniconf/logo-css@2x.png\"\n                  srcset=\"/img/ioniconf/logo-css@1x.png 1x,\n                          /img/ioniconf/logo-css@2x.png 2x\"\n                  loading=\"lazy\"\n                  width=\"34\" height=\"40\"\n                  alt=\"CSS Logo\" />\n            <img  src=\"/img/ioniconf/logo-capacitor@2x.png\"\n                  srcset=\"/img/ioniconf/logo-capacitor@1x.png 1x,\n                          /img/ioniconf/logo-capacitor@2x.png 2x\"\n                  loading=\"lazy\"\n                  width=\"40\" height=\"40\"\n                  alt=\"Capacitor Logo\" />\n          </div>\n          <div>\n            <img  src=\"/img/ioniconf/logo-auth0@2x.png\"\n                  srcset=\"/img/ioniconf/logo-auth0@1x.png 1x,\n                          /img/ioniconf/logo-auth0@2x.png 2x\"\n                  loading=\"lazy\"\n                  width=\"36\" height=\"40\"\n                  alt=\"Auth0 Logo\" />\n            <img  src=\"/img/ioniconf/logo-android@2x.png\"\n                  srcset=\"/img/ioniconf/logo-android@1x.png 1x,\n                          /img/ioniconf/logo-android@2x.png 2x\"\n                  loading=\"lazy\"\n                  width=\"44\" height=\"40\"\n                  alt=\"Android Logo\" />\n          </div>\n        </div>\n        <div class=\" u-wrap u-just-cont-c\">\n          <img  src=\"/img/ioniconf/logo-apple@2x.png\"\n                srcset=\"/img/ioniconf/logo-apple@1x.png 1x,\n                        /img/ioniconf/logo-apple@2x.png 2x\"\n                loading=\"lazy\"\n                width=\"34\" height=\"40\"\n                alt=\"Apple Logo\" />\n          <img  src=\"/img/ioniconf/logo-pwa@2x.png\"\n                srcset=\"/img/ioniconf/logo-pwa@1x.png 1x,\n                        /img/ioniconf/logo-pwa@2x.png 2x\"\n                loading=\"lazy\"\n                width=\"44\" height=\"40\"\n                alt=\"PWA Logo\" />\n        </div>\n        <div class=\" u-wrap u-just-cont-c\">\n          <img  src=\"/img/ioniconf/logo-stencil@2x.png\"\n                srcset=\"/img/ioniconf/logo-stencil@1x.png 1x,\n                        /img/ioniconf/logo-stencil@2x.png 2x\"\n                loading=\"lazy\"\n                width=\"48\" height=\"36\"\n                alt=\"Stencil Logo\" />\n        </div>\n      <div>\n    </div>\n  </div>\n</section>\n\n\n<section id=\"event\">\n  <div class=\"container\">\n    <div id=\"eventInfo\">\n      <div class=\"sticky\">\n        <h2 class=\"\">Event</h2>\n        <div>\n          <p class=\"p2\">The cross-platform app development space is rapidly evolving, and developers now have plethora of frameworks and tooling to choose from.</p>\n          <p class=\"p2\">Ioniconf will cover some of the most interesting techniques and tools in the space, and offer best practices, practical tips, and insight into how developers are tackling cross-platform development with new approaches.</p>\n          <p class=\"p2\">We’re bringing together experts in the mobile and broader web ecosystem to offer a deep dive into modern approaches for building and shipping cross-platform apps.</p>\n        </div>\n      </div>\n    </div>\n    <div id=\"eventContent\" class=\"\">\n      <div class=\"card card__automate \">\n        <svg class=\"card__icon \" width=\"102\" height=\"96\" xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 104 96\">\n          <defs/>\n          <path stroke=\"#DAEDFC\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M96.8 55.1v-7.42c0-24.57-20.1-44.5-44.86-44.5a45.03 45.03 0 00-35.08 16.77M7.2 40.35v7.42c0 24.6 20.08 44.5 44.86 44.5A45.39 45.39 0 0087.1 75.63\"/>\n          <circle cx=\"87\" cy=\"75.5\" r=\"4\" fill=\"#DAEDFC\"/>\n          <circle cx=\"17\" cy=\"20\" r=\"4\" fill=\"#DAEDFC\"/>\n          <path stroke=\"#DAEDFC\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M1 45.84l6.14-6.24 6.42 6.24\"/>\n          <path stroke=\"#DAEDFC\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M102.82 51.04l-6.14 6.24-6.41-6.24\"/>\n          <path stroke=\"#DAEDFC\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M51.91 53.74a6.01 6.01 0 100-12.02 6.01 6.01 0 000 12.02z\" opacity=\".7\"/>\n          <path stroke=\"#DAEDFC\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M64.04 52.65a2.7 2.7 0 00.54 2.98l.1.1a3.28 3.28 0 11-4.64 4.64l-.1-.1a2.7 2.7 0 00-2.98-.54 2.7 2.7 0 00-1.64 2.47v.28a3.28 3.28 0 11-6.56 0v-.14A2.7 2.7 0 0047 59.86a2.7 2.7 0 00-2.98.54l-.1.1a3.28 3.28 0 11-4.64-4.64l.1-.1a2.7 2.7 0 00.54-2.98 2.7 2.7 0 00-2.47-1.64h-.28a3.28 3.28 0 110-6.56h.15a2.7 2.7 0 002.47-1.77 2.7 2.7 0 00-.54-2.98l-.1-.1a3.28 3.28 0 114.64-4.64l.1.1a2.7 2.7 0 002.98.54H47a2.7 2.7 0 001.64-2.47v-.28a3.28 3.28 0 116.56 0v.14a2.7 2.7 0 001.64 2.48 2.7 2.7 0 002.98-.54l.1-.1a3.28 3.28 0 114.64 4.64l-.1.1a2.7 2.7 0 00-.54 2.98v.13a2.7 2.7 0 002.48 1.64h.27a3.28 3.28 0 110 6.56h-.14a2.7 2.7 0 00-2.48 1.64v0z\" opacity=\".9\"/>\n          <path fill=\"url(#icon_automate_paint0_radial)\" d=\"M70.26 66.35L75.91 72a33.94 33.94 0 01-48-48h5.65v5.65a25.95 25.95 0 1036.7 36.7z\"/>\n          <path fill=\"url(#icon_automate_paint1_radial)\" d=\"M70.26 66.35V72h5.65a33.94 33.94 0 10-48-48h5.65v5.65a25.95 25.95 0 1136.7 36.7z\"/>\n          <defs>\n              <radialGradient id=\"icon_automate_paint0_radial\" cx=\"0\" cy=\"0\" r=\"1\" gradientTransform=\"rotate(-135 50.87 19.45) scale(63.8892 87.1336)\" gradientUnits=\"userSpaceOnUse\">\n                  <stop stop-color=\"#B2CEFF\" stop-opacity=\".4\"/>\n                  <stop offset=\"1\" stop-color=\"#DAEDFC\"/>\n              </radialGradient>\n              <radialGradient id=\"icon_automate_paint1_radial\" cx=\"0\" cy=\"0\" r=\"1\" gradientTransform=\"rotate(-135 50.87 19.45) scale(63.8892 87.1336)\" gradientUnits=\"userSpaceOnUse\">\n                  <stop stop-color=\"#DAEDFC\"/>\n                  <stop offset=\"1\" stop-color=\"#B2CEFF\" stop-opacity=\".4\"/>\n              </radialGradient>\n          </defs>\n        </svg>\n\n        <p class=\"card__text  \">Automate app deployments across iOS, Android, and the web</p>\n      </div>\n      <div class=\"card card__animations \">\n        <svg class=\"card__icon \" width=\"96\" height=\"96\" xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 98 98\">\n          <defs/>\n          <path fill=\"#fff\" d=\"M49.707 1.293a1 1 0 00-1.414 0l-6.364 6.364a1 1 0 001.414 1.414L49 3.414l5.657 5.657a1 1 0 101.414-1.414l-6.364-6.364zM48 25a1 1 0 102 0h-2zm0-23v23h2V2h-2z\"/>\n          <path fill=\"#fff\" d=\"M89.177 74.966a1 1 0 00.708-1.225l-2.33-8.693a1 1 0 00-1.932.517l2.071 7.728-7.728 2.07a1 1 0 00.518 1.932l8.694-2.33zM69.5 61.634a1 1 0 10-1 1.732l1-1.732zm19.919 11.5L69.5 61.634l-1 1.732 19.919 11.5 1-1.732z\"/>\n          <path fill=\"#fff\" d=\"M8.741 74.966a1 1 0 01-.707-1.225l2.33-8.693a1 1 0 011.931.517l-2.07 7.728 7.727 2.07a1 1 0 01-.518 1.932l-8.693-2.33zM28.42 61.634a1 1 0 111 1.732l-1-1.732zM8.5 73.134l19.919-11.5 1 1.732L9.5 74.866l-1-1.732z\"/>\n          <path stroke=\"#fff\" stroke-dasharray=\".5 8\" stroke-linecap=\"round\" stroke-miterlimit=\"10\" stroke-width=\"2\" d=\"M95.354 61.42c6.858-25.59-8.342-51.917-33.933-58.774C35.829-4.212 9.503 10.988 2.646 36.579c-6.858 25.592 8.342 51.918 33.933 58.775 25.592 6.858 51.918-8.342 58.775-33.933z\" opacity=\".7\"/>\n          <path stroke=\"#fff\" stroke-linecap=\"round\" stroke-miterlimit=\"10\" stroke-width=\"6\" d=\"M87.629 59.35c5.714-21.326-6.952-43.264-28.279-48.979-21.326-5.714-43.264 6.952-48.979 28.279-5.714 21.326 6.952 43.264 28.279 48.979 21.326 5.714 43.264-6.952 48.979-28.279z\" opacity=\".3\"/>\n          <path stroke=\"#fff\" stroke-dasharray=\".5 8\" stroke-linecap=\"round\" stroke-miterlimit=\"10\" stroke-width=\"2\" d=\"M81 49c0-17.667-14.333-32-32-32S17 31.333 17 49s14.333 32 32 32 32-14.333 32-32z\" opacity=\".7\"/>\n          <path fill=\"#fff\" d=\"M73 49c0-13.25-10.75-24-24-24S25 35.75 25 49s10.75 24 24 24 24-10.75 24-24z\" opacity=\".3\"/>\n          <path stroke=\"#fff\" stroke-miterlimit=\"10\" stroke-width=\"2\" d=\"M73 49c0-13.25-10.75-24-24-24S25 35.75 25 49s10.75 24 24 24 24-10.75 24-24z\"/>\n          <path fill=\"#fff\" d=\"M45.04 58.812l14.306-8.646a1.361 1.361 0 000-2.325L45.04 39.194A1.346 1.346 0 0043 40.36v17.289a1.349 1.349 0 002.04 1.164z\"/>\n      </svg>\n\n        <p class=\"card__text  \">Add dynamic, highly performant animations to your web apps</p>\n      </div>\n      <div class=\"card card__staticHosting \">\n        <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"96\" height=\"96\" fill=\"none\" viewBox=\"0 0 96 97\">\n          <defs/>\n          <mask id=\"icon_static_hosting_a\" width=\"96\" height=\"96\" x=\"0\" y=\"1\" maskUnits=\"userSpaceOnUse\">\n              <path fill=\"#EDFFF2\" d=\"M0 1h96v96H0z\"/>\n          </mask>\n          <g mask=\"url(#icon_static_hosting_a)\">\n              <circle cx=\"76\" cy=\"73\" r=\"2\" fill=\"#ABFFCF\" opacity=\".5\"/>\n              <circle cx=\"14\" cy=\"57\" r=\"2\" fill=\"#ABFFCF\" opacity=\".5\"/>\n              <circle cx=\"72\" cy=\"36\" r=\"2\" fill=\"#ABFFCF\" opacity=\".5\"/>\n              <circle cx=\"89\" cy=\"18\" r=\"2\" fill=\"#F5FFF9\" opacity=\".5\"/>\n              <circle cx=\"11\" cy=\"15\" r=\"2\" fill=\"#ABFFCF\" opacity=\".3\"/>\n              <circle cx=\"36\" cy=\"81\" r=\"2\" fill=\"#ABFFCF\" opacity=\".2\"/>\n              <g filter=\"url(#filter0_f)\">\n                  <ellipse cx=\"48\" cy=\"95\" fill=\"#D8FFEE\" rx=\"35\" ry=\"8\"/>\n              </g>\n              <path fill=\"#D8FFEE\" d=\"M0 95h96v2H0z\"/>\n              <path fill=\"url(#icon_static_hosting_paint0_linear)\" d=\"M48.7 63.3a1 1 0 00-1.4 0l-6.37 6.36a1 1 0 001.41 1.41L48 65.41l5.66 5.66a1 1 0 001.41-1.41l-6.36-6.37zM47 97a1 1 0 102 0h-2zm0-33v33h2V64h-2z\"/>\n              <path fill=\"url(#icon_static_hosting_paint1_linear)\" d=\"M88.7 53.3a1 1 0 00-1.4 0l-6.37 6.36a1 1 0 001.41 1.41L88 55.41l5.66 5.66a1 1 0 001.41-1.41l-6.36-6.37zM87 70a1 1 0 102 0h-2zm0-16v16h2V54h-2z\"/>\n              <path fill=\"url(#icon_static_hosting_paint2_linear)\" d=\"M8.7 36.3a1 1 0 00-1.4 0L.92 42.65a1 1 0 101.41 1.41L8 38.41l5.66 5.66a1 1 0 001.41-1.41l-6.36-6.37zM7 65a1 1 0 102 0H7zm0-28v28h2V37H7z\"/>\n          </g>\n          <path stroke=\"#fff\" stroke-miterlimit=\"10\" stroke-width=\"2\" d=\"M56.09 37.09c14.8-14.8 23.18-30.42 18.7-34.89-4.46-4.47-20.09 3.91-34.88 18.71-14.8 14.8-23.18 30.42-18.7 34.89 4.46 4.47 20.09-3.91 34.88-18.7z\" opacity=\".4\"/>\n          <path stroke=\"#fff\" stroke-miterlimit=\"10\" stroke-width=\"2\" d=\"M39.91 37.09C25.1 22.29 16.73 6.67 21.21 2.2c4.46-4.47 20.09 3.91 34.88 18.71 14.8 14.8 23.18 30.42 18.7 34.89-4.46 4.47-20.09-3.91-34.88-18.7z\" opacity=\".6\"/>\n          <path stroke=\"#fff\" stroke-miterlimit=\"10\" stroke-width=\"2\" d=\"M72 28.6a24 24 0 10-48.01 0 24 24 0 0048.01 0z\" opacity=\".9\"/>\n          <circle cx=\"48\" cy=\"29\" r=\"16\" fill=\"#4BD887\"/>\n          <path fill=\"#fff\" d=\"M48 12h-.06a16.91 16.91 0 00-11.98 5A16.91 16.91 0 0031 29c0 4.54 1.77 8.8 4.97 12a16.9 16.9 0 0011.98 5H48c9.38 0 17-7.63 17-17 0-9.37-7.63-17-17-17zm14.72 15.86h-6.34a32.2 32.2 0 00-.8-6.23c1.4-.45 2.75-1.02 4.06-1.72 1.8 2.3 2.86 5.04 3.08 7.95zm-15.87 0H41.8c.07-2 .31-3.9.72-5.65 1.42.32 2.87.51 4.33.58v5.07zm0 2.28v5.06c-1.45.07-2.9.26-4.33.58-.4-1.75-.65-3.64-.72-5.64h5.05zm2.29 0h5c-.06 2-.3 3.9-.71 5.64-1.4-.32-2.84-.51-4.29-.58v-5.06zm0-2.28v-5.07c1.45-.07 2.9-.26 4.29-.57.4 1.75.65 3.63.72 5.64h-5.01zm8.94-9.64c-1 .5-2.04.92-3.1 1.27a16.88 16.88 0 00-2.17-4.46c1.96.68 3.75 1.77 5.27 3.19zm-5.26 1.86a23 23 0 01-3.68.49v-6c1.39.75 2.75 2.77 3.68 5.5zm-5.97-5.55v6.03a22.6 22.6 0 01-3.72-.5c.95-2.76 2.32-4.78 3.72-5.53zm-3.72.53a17.01 17.01 0 00-2.15 4.42 23.2 23.2 0 01-3.07-1.26c1.5-1.41 3.28-2.5 5.22-3.16zm-6.78 4.86a24.4 24.4 0 004.02 1.7 30.9 30.9 0 00-.8 6.23h-6.29c.21-2.9 1.27-5.63 3.07-7.93zm-3.08 10.22h6.3c.07 2.19.34 4.28.8 6.23a25.88 25.88 0 00-4.03 1.7 14.65 14.65 0 01-3.07-7.93zm4.63 9.64c1-.49 2.02-.92 3.08-1.26.58 1.74 1.3 3.24 2.15 4.43a14.93 14.93 0 01-5.23-3.17zm5.23-1.85c1.22-.27 2.47-.43 3.72-.5v6.04c-1.4-.75-2.77-2.77-3.72-5.54zm6.01 5.5v-6a23 23 0 013.68.49c-.93 2.74-2.3 4.76-3.68 5.51zm3.68-.46c.85-1.2 1.58-2.7 2.16-4.46 1.06.35 2.11.78 3.1 1.28a14.96 14.96 0 01-5.26 3.18zm6.82-4.89a24.9 24.9 0 00-4.06-1.72c.46-1.95.73-4.03.8-6.22h6.34a14.58 14.58 0 01-3.08 7.94z\"/>\n          <defs>\n              <linearGradient id=\"icon_static_hosting_paint0_linear\" x1=\"48.5\" x2=\"48.5\" y1=\"64\" y2=\"97\" gradientUnits=\"userSpaceOnUse\">\n                  <stop stop-color=\"#fff\"/>\n                  <stop offset=\"1\" stop-color=\"#D8FFEE\"/>\n              </linearGradient>\n              <linearGradient id=\"icon_static_hosting_paint1_linear\" x1=\"88.5\" x2=\"88.5\" y1=\"54\" y2=\"70\" gradientUnits=\"userSpaceOnUse\">\n                  <stop stop-color=\"#fff\"/>\n                  <stop offset=\"1\" stop-color=\"#D8FFEE\" stop-opacity=\".7\"/>\n              </linearGradient>\n              <linearGradient id=\"icon_static_hosting_paint2_linear\" x1=\"8.5\" x2=\"8.5\" y1=\"37\" y2=\"65\" gradientUnits=\"userSpaceOnUse\">\n                  <stop stop-color=\"#fff\"/>\n                  <stop offset=\"1\" stop-color=\"#D8FFEE\" stop-opacity=\".7\"/>\n              </linearGradient>\n              <filter id=\"icon_static_hosting_filter0_f\" width=\"110\" height=\"56\" x=\"-7\" y=\"67\" color-interpolation-filters=\"sRGB\" filterUnits=\"userSpaceOnUse\">\n                  <feFlood flood-opacity=\"0\" result=\"BackgroundImageFix\"/>\n                  <feBlend in=\"SourceGraphic\" in2=\"BackgroundImageFix\" result=\"shape\"/>\n                  <feGaussianBlur result=\"effect1_foregroundBlur\" stdDeviation=\"10\"/>\n              </filter>\n          </defs>\n        </svg>\n\n        <p class=\"card__text  \">Latest static hosting capabilities for web apps</p>\n      </div>\n      <div class=\"card card__authentication \">\n        <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"96\" height=\"96\" fill=\"none\" viewBox=\"0 0 96 96\">\n          <defs/>\n          <path stroke=\"#EAFAFF\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M31.04 9.63L18.96 2.65a2.58 2.58 0 00-2.62.02l-12.6 7.36a4.05 4.05 0 00-2 3.48l-.08 14.58a2.64 2.64 0 001.3 2.28l12.08 6.98a2.58 2.58 0 002.62-.02l12.6-7.36a4.06 4.06 0 002-3.48l.08-14.58a2.64 2.64 0 00-1.3-2.28z\"/>\n          <path stroke=\"#EAFAFF\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M2.57 29l15.3-8.5-.3-17.49\"/>\n          <path stroke=\"#EAFAFF\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M31.72 28.5l-13.85-8\"/>\n          <path fill=\"#EAFAFF\" d=\"M17.88 20.56L2.38 29.6l12.27 7.9 1.04.25 14.56-7.58L31 29l-13.12-8.44z\" opacity=\".5\"/>\n          <path stroke=\"#EAFAFF\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M12.3 13.2a5.3 5.3 0 01-2.22 3.82c-1.11.63-2.11.05-2.2-1.3-.09-1.4.9-3.05 2.23-3.8 1.34-.77 2.3-.2 2.2 1.29z\"/>\n          <path stroke=\"#EAFAFF\" stroke-linecap=\"round\" stroke-miterlimit=\"10\" stroke-width=\"2\" d=\"M5.59 25.93a9.43 9.43 0 014.47-6.36c2.01-1.14 4.05-.98 4.41 1.31\"/>\n          <path fill=\"#EAFAFF\" d=\"M42 72l23-12v21.5l-.5 1.5L44 95h-2V72z\" opacity=\".3\"/>\n          <path stroke=\"#EAFAFF\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M65 80.85v-19.7c0-.65-.18-1.28-.51-1.84a3.77 3.77 0 00-1.4-1.35l-18.2-10.2a5.91 5.91 0 00-5.78 0l-18.2 10.2c-.59.32-1.07.79-1.4 1.35-.33.56-.5 1.2-.51 1.84v19.7c0 .65.18 1.28.51 1.84s.81 1.03 1.4 1.35l18.2 10.21a5.92 5.92 0 005.78 0l18.2-10.2c.59-.33 1.07-.8 1.4-1.36.33-.56.51-1.2.51-1.84z\"/>\n          <path stroke=\"#EAFAFF\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M20 60l22 12 22-12\"/>\n          <path stroke=\"#EAFAFF\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M42 95V72\"/>\n          <path stroke=\"#EAFAFF\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M47.4 60.07c-2 1.06-5.09 1.14-6.82.2-1.73-.93-1.8-2.71-.1-3.93 1.77-1.27 4.73-1.33 6.81-.2 2.09 1.12 2.15 2.85.1 3.93z\"/>\n          <path stroke=\"#EAFAFF\" stroke-linecap=\"round\" stroke-miterlimit=\"10\" stroke-width=\"2\" d=\"M25.25 61.7c3.89-1.71 8.83-1.06 11.98.64 3.15 1.7 4.6 4.5 1.9 6.85\"/>\n          <path stroke=\"#EAFAFF\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M64.37 45.45a4.6 4.6 0 01-1.66-1.64l-8.3-14.12a2.96 2.96 0 01-.03-2.94l7.8-13.5a2.87 2.87 0 012.55-1.45l16.38.13a4.58 4.58 0 013.92 2.26l8.3 14.12a2.96 2.96 0 01.03 2.93l-7.8 13.52A2.87 2.87 0 0183 46.2l-16.38-.13c-.8 0-1.57-.22-2.26-.62zm0 0l9.1-15.76M63.31 12.85l10.16 16.84m0 0l19.67.38\"/>\n          <path stroke=\"#EAFAFF\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M80 19c.75 1.55 0 2.82-1.62 2.82-1.63 0-3.85-1.27-4.9-2.83-1.08-1.62-.33-2.82 1.63-2.82s4.12 1.23 4.89 2.82z\"/>\n          <path stroke=\"#EAFAFF\" stroke-linecap=\"round\" stroke-miterlimit=\"10\" stroke-width=\"2\" d=\"M75.93 28.9c-1.05-2.78 1.11-4.25 4.08-4.25 2.96 0 6.82 1.47 8.98 4.24\"/>\n          <path fill=\"#EAFAFF\" d=\"M73.75 30.55L63.2 13.4l-8.54 14.23-.26 1.2 8.9 16.14 1.33.8 9.13-15.23z\" opacity=\".2\"/>\n          <circle cx=\"32\" cy=\"42\" r=\"2\" fill=\"#EAFAFF\" opacity=\".3\"/>\n          <circle cx=\"84\" cy=\"55\" r=\"3\" fill=\"#EAFAFF\" opacity=\".2\"/>\n          <circle cx=\"75\" cy=\"69\" r=\"1\" fill=\"#EAFAFF\" opacity=\".5\"/>\n          <circle cx=\"54\" cy=\"21\" r=\"1\" fill=\"#EAFAFF\" opacity=\".5\"/>\n          <circle cx=\"61\" cy=\"90\" r=\"1\" fill=\"#EAFAFF\" opacity=\".5\"/>\n          <circle cx=\"55.5\" cy=\"52.5\" r=\"1.5\" fill=\"#EAFAFF\" opacity=\".4\"/>\n          <circle cx=\"86\" cy=\"94\" r=\"2\" fill=\"#EAFAFF\" opacity=\".4\"/>\n          <circle cx=\"27\" cy=\"4\" r=\"1\" fill=\"#EAFAFF\" opacity=\".4\"/>\n          <circle cx=\"95\" cy=\"47\" r=\"1\" fill=\"#EAFAFF\" opacity=\".4\"/>\n          <circle cx=\"14\" cy=\"54\" r=\"1\" fill=\"#EAFAFF\" opacity=\".5\"/>\n          <circle cx=\"3.5\" cy=\"39.5\" r=\"1.5\" fill=\"#EAFAFF\" opacity=\".2\"/>\n          <circle cx=\"17.5\" cy=\"94.5\" r=\"1.5\" fill=\"#EAFAFF\" opacity=\".2\"/>\n          <circle cx=\"67\" cy=\"1\" r=\"1\" fill=\"#EAFAFF\" opacity=\".6\"/>\n          <circle cx=\"2\" cy=\"80\" r=\"2\" fill=\"#EAFAFF\" opacity=\".2\"/>\n          <path stroke=\"#EAFAFF\" stroke-linecap=\"round\" stroke-width=\"2\" d=\"M87.99 65.06l-.98 3.88\"/>\n          <path stroke=\"#EAFAFF\" stroke-linecap=\"round\" stroke-width=\"2\" d=\"M44 30l1.36 3.76\"/>\n          <path stroke=\"#EAFAFF\" stroke-linecap=\"round\" stroke-width=\"2\" d=\"M4.78 68.26l3.8 1.24\"/>\n          <path fill=\"url(#icon_authentication_paint0_linear)\" d=\"M11.7 40a.93.93 0 00-1.2-.65l-8.43 2.86c-.52.18-.82.76-.67 1.3.15.53.7.83 1.2.65l7.5-2.54 2.15 7.8c.15.53.7.83 1.21.65.52-.17.82-.75.67-1.3l-2.43-8.76zM30 79.35c.54 0 .98-.48.98-1.04a.96.96 0 00-.96-1L30 79.33zM12.8 62.9C8.71 54.5 8.93 46 11.62 40.79l-1.7-.93c-3.08 5.95-3.16 15.18 1.14 24.03l1.74-.99zm17.21 14.4c-2.8.06-5.99-1.23-9.06-3.74A31.66 31.66 0 0112.8 62.9l-1.74.99a33.58 33.58 0 008.66 11.31c3.29 2.68 6.89 4.22 10.27 4.14L30 77.3z\"/>\n          <path fill=\"url(#icon_authentication_paint1_linear)\" d=\"M68.3 71.42a.93.93 0 00.8 1.1l8.98 1.21c.55.08 1.08-.3 1.19-.84a.93.93 0 00-.81-1.1l-7.98-1.08 1.54-7.8a.93.93 0 00-.8-1.11c-.56-.07-1.09.3-1.2.84l-1.73 8.78zm11.86-33.96c-.28-.45-.9-.58-1.38-.28-.49.3-.65.9-.37 1.36l1.75-1.08zm-2.82 18.57a42.35 42.35 0 01-4.13 9.43c-1.54 2.54-3.12 4.34-4.49 5.3l1.14 1.57c1.7-1.2 3.47-3.27 5.1-5.95a44.4 44.4 0 004.32-9.88l-1.94-.47zm1.07-17.5c.74 1.21 1.13 3.51.98 6.66-.16 3.1-.83 6.87-2.05 10.84l1.94.47a47.63 47.63 0 002.14-11.32c.16-3.23-.2-6.02-1.26-7.72l-1.75 1.08z\"/>\n          <path fill=\"url(#icon_authentication_paint2_linear)\" d=\"M55.76 17.56c.55.03 1-.4 1-.95l-.11-8.97c0-.55-.46-1.02-1.02-1.05a.93.93 0 00-.99.95l.1 7.98-8.01-.4a.93.93 0 00-1 .94c.01.55.47 1.02 1.02 1.05l9.01.45zm-29.85-1.5c-.3.45-.15 1.07.32 1.39.47.32 1.08.22 1.38-.23l-1.7-1.16zm15.57-3.2c6.38.05 11.37 2.1 13.57 4.37l1.4-1.34c-2.76-2.85-8.4-4.97-15.08-5.03l.1 2zM27.6 17.22c.75-1.16 2.43-2.28 4.91-3.1a28.24 28.24 0 018.96-1.26l-.1-2c-3.6-.03-6.92.47-9.6 1.35-2.64.88-4.79 2.18-5.87 3.85l1.7 1.16z\"/>\n          <defs>\n              <linearGradient id=\"icon_authentication_paint0_linear\" x1=\"10.02\" x2=\"39.54\" y1=\"39.92\" y2=\"81.04\" gradientUnits=\"userSpaceOnUse\">\n                  <stop stop-color=\"#EAFAFF\"/>\n                  <stop offset=\"1\" stop-color=\"#EAFAFF\" stop-opacity=\"0\"/>\n              </linearGradient>\n              <linearGradient id=\"icon_authentication_paint1_linear\" x1=\"69.34\" x2=\"71.18\" y1=\"72.17\" y2=\"31.35\" gradientUnits=\"userSpaceOnUse\">\n                  <stop stop-color=\"#EAFAFF\"/>\n                  <stop offset=\"1\" stop-color=\"#EAFAFF\" stop-opacity=\"0\"/>\n              </linearGradient>\n              <linearGradient id=\"icon_authentication_paint2_linear\" x1=\"56.23\" x2=\"22.67\" y1=\"16.32\" y2=\"23.02\" gradientUnits=\"userSpaceOnUse\">\n                  <stop stop-color=\"#EAFAFF\"/>\n                  <stop offset=\"1\" stop-color=\"#EAFAFF\" stop-opacity=\"0\"/>\n              </linearGradient>\n          </defs>\n        </svg>\n\n        <p class=\"card__text  \">How to build Web Components for authentication</p>\n      </div>\n      <div class=\"card card__testing \">\n        <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"96\" height=\"96\" fill=\"none\" viewBox=\"0 0 96 96\">\n          <defs/>\n          <path stroke=\"url(#icon_testing_paint0_linear)\" stroke-linecap=\"round\" stroke-width=\"4\" d=\"M7 2v0C3.8 5.13 2 9.42 2 13.89v68.22C2 86.58 3.8 90.87 7 94v0\" opacity=\".2\"/>\n          <path stroke=\"url(#icon_testing_paint1_linear)\" stroke-linecap=\"round\" stroke-width=\"4\" d=\"M18 2v0c-3.2 3.13-5 7.42-5 11.89v68.22c0 4.47 1.8 8.76 5 11.89v0\" opacity=\".4\"/>\n          <path stroke=\"url(#icon_testing_paint2_linear)\" stroke-linecap=\"round\" stroke-width=\"4\" d=\"M89 2v0c3.2 3.13 5 7.42 5 11.89v68.22c0 4.47-1.8 8.76-5 11.89v0\" opacity=\".2\"/>\n          <path stroke=\"url(#icon_testing_paint3_linear)\" stroke-linecap=\"round\" stroke-width=\"4\" d=\"M78 2v0c3.2 3.13 5 7.42 5 11.89v68.22c0 4.47-1.8 8.76-5 11.89v0\" opacity=\".4\"/>\n          <rect width=\"55\" height=\"93\" x=\"20.5\" y=\"1.5\" stroke=\"#fff\" stroke-width=\"3\" opacity=\".5\" rx=\"16.5\"/>\n          <rect width=\"34\" height=\"74\" x=\"31\" y=\"11\" fill=\"#fff\" opacity=\".2\" rx=\"9\"/>\n          <circle cx=\"48\" cy=\"78\" r=\"2\" fill=\"#fff\" opacity=\".8\"/>\n          <path stroke=\"#fff\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M30 68V52\" opacity=\".8\"/>\n          <path stroke=\"#fff\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M30 46V28\" opacity=\".8\"/>\n          <path stroke=\"#fff\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M48 68V46\" opacity=\".8\"/>\n          <path stroke=\"#fff\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M48 39V28\" opacity=\".8\"/>\n          <path stroke=\"#fff\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M66 68V57\" opacity=\".8\"/>\n          <path stroke=\"#fff\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M66 50V28\" opacity=\".8\"/>\n          <path stroke=\"#fff\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M24 52h12\"/>\n          <path stroke=\"#fff\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M42 40h12\"/>\n          <path stroke=\"#fff\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M60 56h12\"/>\n          <path stroke=\"#FFF9E3\" stroke-linecap=\"round\" stroke-width=\"2\" d=\"M66 22v-2a10 10 0 00-10-10H40a10 10 0 00-10 10v2\" opacity=\".6\"/>\n          <path stroke=\"#FFF9E3\" stroke-linecap=\"round\" stroke-width=\"2\" d=\"M66 74v2a10 10 0 01-10 10H40a10 10 0 01-10-10v-2\" opacity=\".6\"/>\n          <defs>\n              <linearGradient id=\"icon_testing_paint0_linear\" x1=\"4.5\" x2=\"4.5\" y1=\".04\" y2=\"95.47\" gradientUnits=\"userSpaceOnUse\">\n                  <stop stop-color=\"#fff\" stop-opacity=\".3\"/>\n                  <stop offset=\".51\" stop-color=\"#fff\"/>\n                  <stop offset=\"1\" stop-color=\"#fff\" stop-opacity=\".3\"/>\n              </linearGradient>\n              <linearGradient id=\"icon_testing_paint1_linear\" x1=\"15.5\" x2=\"15.5\" y1=\".04\" y2=\"95.47\" gradientUnits=\"userSpaceOnUse\">\n                  <stop stop-color=\"#fff\" stop-opacity=\".3\"/>\n                  <stop offset=\".51\" stop-color=\"#fff\"/>\n                  <stop offset=\"1\" stop-color=\"#fff\" stop-opacity=\".3\"/>\n              </linearGradient>\n              <linearGradient id=\"icon_testing_paint2_linear\" x1=\"91.5\" x2=\"91.5\" y1=\".04\" y2=\"95.47\" gradientUnits=\"userSpaceOnUse\">\n                  <stop stop-color=\"#fff\" stop-opacity=\".3\"/>\n                  <stop offset=\".51\" stop-color=\"#fff\"/>\n                  <stop offset=\"1\" stop-color=\"#fff\" stop-opacity=\".3\"/>\n              </linearGradient>\n              <linearGradient id=\"icon_testing_paint3_linear\" x1=\"80.5\" x2=\"80.5\" y1=\".04\" y2=\"95.47\" gradientUnits=\"userSpaceOnUse\">\n                  <stop stop-color=\"#fff\" stop-opacity=\".3\"/>\n                  <stop offset=\".51\" stop-color=\"#fff\"/>\n                  <stop offset=\"1\" stop-color=\"#fff\" stop-opacity=\".3\"/>\n              </linearGradient>\n          </defs>\n        </svg>\n\n        <p class=\"card__text\">End-to-end mobile app testing best practices and techniques</p>\n      </div>\n    </div>\n  </div>\n</section>\n\n<section id=\"footer\" class=\" \">\n  <div class=\"footer__wrap | container\">\n    <div>\n      <img  id=\"footerIcon\"\n            class=\"\"\n            src=\"/img/ioniconf/logo-ioniconf-footer@2x.png\"\n            srcset=\"/img/ioniconf/logo-ioniconf-footer@1x.png 1x,\n                    /img/ioniconf/logo-ioniconf-footer@2x.png 2x\"\n            loading=\"lazy\"\n            width=\"368\" height=\"96\"\n            alt=\"Ioniconf 2020 Logo\" />\n    </div>\n    <ul class=\"footer__list\">\n      <li class=\"\"><a class=\"anchor\" data-offset=\"100\" href=\"#keynote\">Keynote</a></li>\n      <li class=\"\"><a class=\"anchor\" data-offset=\"100\" href=\"#talks\">Talks</a></li>\n      <li class=\"\"><a class=\"anchor\" data-offset=\"100\" href=\"#event\">Event</a></li>\n      <li class=\"\"><a href=\"https://ionicframework.com/code-of-conduct\" target=\"_blank\" rel=noopener>Code of Conduct</a></li>\n    </ul>\n    <div class=\"footer__cta\">\n      <label class=\"btn-secondary\" for=\"footerUpdates\"\n             onClick=\"this.querySelector('input[name=email]').focus()\">\n        <input tabindex=\"0\" class=\"checkbox\" aria-label=\"Sign up for updates\" id=\"footerUpdates\" role=\"button\" type=\"checkbox\"/>\n        <span class=\"text\">Sign up for updates</span>\n        <span class=\"arrow\">-></span>\n        <hubspot-form \n          no-default-styles\n          form-id=\"76e5f69f-85fd-4579-afce-a1892d48bb32\"\n          submit-text=\"->\"/>\n      </label>\n    </div>\n  </div>\n</section>\n</div>\n</main>\n{% endblock %}\n\n{% block scripts %}\n<script>\n  const mobileNavClose = document.querySelector('.mobile-nav__close');\n  const mobileAnchors = [...document.querySelectorAll('.mobile-nav a.anchor')];\n  mobileAnchors.forEach(a => {\n    a.addEventListener('click', () => mobileNavClose.click());\n  })\n\n  const navBars = { mainNav: document.querySelector(\"#mainNav\"),\n                    mobileNavBar: document.querySelector(\"#mobileNavBar\") }\n\n  \n  setTimeout(() => {\n    let scrolled = location.hash ? true : window.scrollY > 0;\n  \n    const observer = new IntersectionObserver(() => {\n      console.log(scrolled);\n      for (const nav in navBars) {\n        scrolled ? navBars[nav].classList.add(\"scrolled\") :\n                  navBars[nav].classList.remove(\"scrolled\");\n      }\n      scrolled = !scrolled;\n    });\n    observer.observe(document.querySelector('#navSpace'));\n  }, 500);\n  \n\n  $('main').scrollspy({ target: '#mainNav' });\n  $('[data-spy=\"scroll\"]').on('activate.bs.scrollspy', ({ target }) => {\n    target.children[0].blur();\n  })\n\n</script>\n{% endblock %}\n"
  },
  {
    "path": "server/pages/native.html",
    "content": "{% extends '_layouts/base.html' %}\r\n{% set id = 'native' %}\r\n{% set pre_footer = false %}\r\n{% set title = \"Ionic Native\" %}\r\n{% set meta_image = 'https://ionicframework.com/img/meta/native-ogimg.png'%}\r\n{% set meta_description = '' %}\r\n{% set header_style = 'transparent light' %}\r\n{% set stickyNav = false %}\r\n{% set cssPath = 'native' %}\r\n{% set cssVersion = 2 %}\r\n\r\n{% block main %}\r\n\r\n<ionic-sub-header>\r\n  <ul class=\"breadcrumbs\" slot=\"breadcrumbs\">\r\n    <li><a href=\"/Enterprise\">Enterprise</a></li>\r\n    <li><a class=\"current-site\" href=\"#\" >Native Enterprise Edition</a></li>\r\n  </ul>\r\n  <ul slot=\"right\">\r\n    <li><a href=\"\" class=\"active\">Overview</a></li>\r\n    <li><a href=\"/pricing/enterprise\">Pricing</a></li>\r\n    <li><a href=\"/docs/native\">Docs</a></li>\r\n    <li><a href=\"https://ionic.io/demo\"><a class=\"btn-primary box\" href=\"https://ionic.io/demo\">Get a Demo</a></a></div></li>\r\n  </ul>\r\n</ionic-sub-header>\r\n\r\n<section id=\"hero\" class=\"box\">\r\n  <svg id=\"heroBack\" viewBox=\"-50 120 1800 770\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n    <mask id=\"a\" maskUnits=\"userSpaceOnUse\" x=\"0\" y=\"0\" width=\"1800\" height=\"881\">\r\n        <path fill=\"#F7F9FC\" d=\"M0 0h1800v880H0z\"/>\r\n    </mask>\r\n    <g mask=\"url(#native_a)\">\r\n        <path opacity=\".8\" fill=\"#F7F9FC\" d=\"M0 0h1800v880H0z\"/>\r\n        <path opacity=\".4\" d=\"M495.51 1388.52l915-915-912.5-912.53L-417 476l912.5 912.52z\" fill=\"url(#native_paint0_linear)\"/>\r\n        <path opacity=\".4\" d=\"M492.75 1271.27L1351.9 412.1 442.16-497.65-417 361.5l909.75 909.76z\" fill=\"url(#native_paint1_linear)\"/>\r\n        <path opacity=\".4\" d=\"M252.77 1151.77L1849.01-444.48l-674.77-674.77L-421.99 477l674.76 674.77z\" fill=\"url(#native_paint2_linear)\"/>\r\n        <path opacity=\".4\" d=\"M1848.5 1388.52L491 31.01 1170-648 2527.5 709.5l-679 679.02z\" fill=\"url(#native_paint3_linear)\"/>\r\n        <path opacity=\".4\" d=\"M2208.5 1388.52L1112.49 292.51l679.01-679.02 1096 1096.02-679 679.01z\" fill=\"url(#native_paint4_linear)\"/>\r\n        <path opacity=\".4\" d=\"M2063.5 1124.52L706-232.98l437.51-437.52L2501 687.01l-437.5 437.51z\" fill=\"url(#native_paint5_linear)\"/>\r\n        <path opacity=\".4\" d=\"M992 532.01L2349.23-825.25 1439.5-1735 82.25-377.74 992 532.01z\" fill=\"url(#native_paint6_linear)\"/>\r\n        <path opacity=\".4\" d=\"M932 472L2301.11-897.13 1392.24-1806 23.14-436.87 932 472z\" fill=\"url(#native_paint7_linear)\"/>\r\n        <path opacity=\".4\" d=\"M992 411.01l-444-444L1227-712l444 444L992 411z\" fill=\"url(#native_paint8_linear)\"/>\r\n        <path opacity=\".2\" fill=\"#fff\" d=\"M0 0h1800v880H0z\"/>\r\n        <g opacity=\".4\">\r\n            <path d=\"M1351.96 411.99L1171.98 232l-60 60 179.99 179.98 59.99-60z\" fill=\"#B2BECD\"/>\r\n            <g style=\"mix-blend-mode:soft-light\" opacity=\".9\">\r\n                <path d=\"M1291.99 472.02l60.01-60-21.43-21.44-38.58 81.44z\" fill=\"#000\"/>\r\n            </g>\r\n            <path d=\"M1231.97 652l-179.98-179.98-60 60L1171.97 712l60-60z\" fill=\"#B2BECD\"/>\r\n            <g style=\"mix-blend-mode:soft-light\" opacity=\".8\">\r\n                <path d=\"M992 532.02l60-60 21.43 21.43-81.44 38.57z\" fill=\"#000\"/>\r\n            </g>\r\n            <path d=\"M992 532L1171.98 352l-60-60L932 472l60 60zM1232.02 652L1412 472.03l-59.99-60-179.99 180 60 59.99z\" fill=\"#CED6E0\"/>\r\n            <path d=\"M1172 414a58 58 0 000 116 58 58 0 000-116z\" fill=\"#B2BECD\"/>\r\n        </g>\r\n    </g>\r\n    <defs>\r\n        <linearGradient id=\"native_paint0_linear\" x1=\"953.01\" y1=\"931.02\" x2=\"40.49\" y2=\"18.51\" gradientUnits=\"userSpaceOnUse\">\r\n            <stop stop-color=\"#E7EBF1\"/>\r\n            <stop offset=\".41\" stop-color=\"#F9FAFD\"/>\r\n        </linearGradient>\r\n        <linearGradient id=\"native_paint1_linear\" x1=\"922.32\" y1=\"841.68\" x2=\"12.57\" y2=\"-68.06\" gradientUnits=\"userSpaceOnUse\">\r\n            <stop stop-color=\"#E7EBF1\"/>\r\n            <stop offset=\".41\" stop-color=\"#F9FAFD\"/>\r\n        </linearGradient>\r\n        <linearGradient id=\"native_paint2_linear\" x1=\"1050.89\" y1=\"353.65\" x2=\"376.12\" y2=\"-321.12\" gradientUnits=\"userSpaceOnUse\">\r\n            <stop stop-color=\"#E7EBF1\"/>\r\n            <stop offset=\".41\" stop-color=\"#F9FAFD\"/>\r\n        </linearGradient>\r\n        <linearGradient id=\"native_paint3_linear\" x1=\"1169.75\" y1=\"709.76\" x2=\"1848.76\" y2=\"30.76\" gradientUnits=\"userSpaceOnUse\">\r\n            <stop stop-color=\"#E7EBF1\"/>\r\n            <stop offset=\".41\" stop-color=\"#F9FAFD\"/>\r\n        </linearGradient>\r\n        <linearGradient id=\"native_paint4_linear\" x1=\"1660.5\" y1=\"840.51\" x2=\"2339.51\" y2=\"161.51\" gradientUnits=\"userSpaceOnUse\">\r\n            <stop stop-color=\"#E7EBF1\"/>\r\n            <stop offset=\".41\" stop-color=\"#F9FAFD\"/>\r\n        </linearGradient>\r\n        <linearGradient id=\"native_paint5_linear\" x1=\"1384.75\" y1=\"445.77\" x2=\"1822.26\" y2=\"8.26\" gradientUnits=\"userSpaceOnUse\">\r\n            <stop stop-color=\"#E7EBF1\"/>\r\n            <stop offset=\".41\" stop-color=\"#F9FAFD\"/>\r\n        </linearGradient>\r\n        <linearGradient id=\"native_paint6_linear\" x1=\"1670.62\" y1=\"-146.62\" x2=\"760.86\" y2=\"-1056.36\" gradientUnits=\"userSpaceOnUse\">\r\n            <stop stop-color=\"#E7EBF1\"/>\r\n            <stop offset=\".41\" stop-color=\"#F9FAFD\"/>\r\n        </linearGradient>\r\n        <linearGradient id=\"native_paint7_linear\" x1=\"1616.55\" y1=\"-212.56\" x2=\"707.68\" y2=\"-1121.43\" gradientUnits=\"userSpaceOnUse\">\r\n            <stop stop-color=\"#E7EBF1\"/>\r\n            <stop offset=\".41\" stop-color=\"#F9FAFD\"/>\r\n        </linearGradient>\r\n        <linearGradient id=\"native_paint8_linear\" x1=\"1229\" y1=\"170\" x2=\"964.5\" y2=\"-94.5\" gradientUnits=\"userSpaceOnUse\">\r\n            <stop stop-color=\"#E7EBF1\"/>\r\n            <stop offset=\".41\" stop-color=\"#F9FAFD\"/>\r\n        </linearGradient>\r\n    </defs>\r\n  </svg>\r\n\r\n  <hgroup class=\"container strip\">\r\n    <div id=\"heroText\" class=\"stack box\">\r\n      <div>\r\n        <h1 class=\"box\">Native power and security, made easy.</h1>\r\n      </div>\r\n      <div>\r\n        <p class=\"box\">Take on mobile projects with peace of mind, knowing the native features, security, and\r\n          performance you need\r\n          will just work - now and in the future.</p>\r\n      </div>\r\n      <div class=\"strip\">\r\n        <a class=\"btn-primary box\" href=\"https://ionic.io/demo\">Get a Demo</a>\r\n        <a class=\"btn-secondary box anchor\" data-offset=\"0\"  href=\"#get-started\">Talk to Sales</a>\r\n      </div>\r\n    </div>\r\n  </hgroup>\r\n</section>\r\n\r\n<nav id=\"sticky-bar\" style=\"z-index: 10;\">\r\n  <ul class=\"container nav\" role=\"tablist\">\r\n    <li role=\"tab\"><a class=\"anchor\" data-offset=\"150\" href=\"#plugins\">Supported Plugins</a></li>\r\n    <li role=\"tab\"><a class=\"anchor\" data-offset=\"150\" href=\"#security\">App Security</a></li>\r\n    <li role=\"tab\"><a class=\"anchor\" data-offset=\"150\" href=\"#supGuidance\">Support & Guidance</a></li>\r\n    <li role=\"tab\"><a class=\"anchor\" data-offset=\"50\" href=\"#secFeatures\">Advanced Solutions</a></li>\r\n    <li role=\"tab\"><a class=\"anchor\" data-offset=\"50\" href=\"#keyFeatures\">Features</a></li>\r\n  </ul>\r\n</nav>\r\n\r\n<main>\r\n  <div class=\"container main1 stack box\">\r\n    <section id=\"native\" class=\"box expand:w flex:r:w\">\r\n      <div id=\"nativeTitle\" class=\"box\">\r\n        <h2 class=\"box\">A secure native runtime for enterprise-grade apps.</h2>\r\n        <p class=\"box p1\">Ionic Native Enterprise Edition is a subscription service alternative to the open source plugin ecosystem that provides a secure, reliable foundation for teams building enterprise-grade apps with Ionic. Unlock a rich ecosystem of plugins and solutions, with the benefit of timely support, upgrades, and fixes.</p>\r\n      </div>  \r\n      <div class=\"switcher\">\r\n        <div>\r\n          <div class=\"\">\r\n            <article class=\"box\">\r\n              <div class=\"expand:x:s\">\r\n                <svg class=\"box\" xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 64 64\"><defs/><path fill=\"#B2BECD\" d=\"M23.77 34.8H5.5A5.48 5.48 0 000 40.26v18.25A5.48 5.48 0 005.49 64h18.28a5.48 5.48 0 005.49-5.48V40.27a5.48 5.48 0 00-5.49-5.48z\" opacity=\".8\"/><path fill=\"#FFEDBA\" d=\"M47.54 44.83v-7.3a2.74 2.74 0 00-2.74-2.74h-7.31a2.74 2.74 0 00-2.75 2.74v7.3a2.74 2.74 0 002.75 2.74h7.31a2.74 2.74 0 002.74-2.74z\"/><path fill=\"#FED352\" d=\"M61.26 34.8h-7.32a2.75 2.75 0 00-2.74 2.73v11.7a2 2 0 01-2 2H37.49a2.75 2.75 0 00-2.75 2.73v7.3A2.74 2.74 0 0037.5 64h23.77A2.75 2.75 0 0064 61.26V37.53a2.74 2.74 0 00-2.74-2.74z\"/><path fill=\"#21426B\" d=\"M64 23.84V5.59A5.48 5.48 0 0058.51.1H40.23a5.48 5.48 0 00-5.49 5.48v18.25a5.48 5.48 0 005.49 5.48H58.5A5.48 5.48 0 0064 23.84z\"/><path fill=\"#92A1B3\" d=\"M9.14 55.79a1.37 1.37 0 01-1.37-1.37v-4.34a1.37 1.37 0 012.74 0v4.34a1.37 1.37 0 01-1.37 1.37z\"/><path fill=\"#5B708B\" d=\"M19.2 44.83a1.37 1.37 0 01-1.37-1.37V32.51a1.37 1.37 0 012.34-.97c.26.26.4.6.4.97v10.95a1.37 1.37 0 01-1.37 1.37z\"/><path fill=\"#2D4665\" d=\"M24.1 4.35L20.12.4a1.37 1.37 0 00-1.94 0l-3.96 3.95a1.37 1.37 0 001.94 1.94l1.66-1.65v22.4a1.37 1.37 0 002.74 0V4.7l1.58 1.58a1.37 1.37 0 001.94-1.94z\"/><path fill=\"#5B708B\" d=\"M14.03 16.22l-3.96-3.95a1.37 1.37 0 00-1.93 0l-3.96 3.95a1.37 1.37 0 001.93 1.94l1.66-1.66V45.3a1.37 1.37 0 002.34.97c.26-.26.4-.6.4-.97V16.58l1.59 1.58a1.37 1.37 0 001.93-1.94z\"/></svg>\r\n              </div>\r\n              <h3>Build with confidence</h3>\r\n              <p class=\"p2\">Enjoy peace of mind knowing the native plugins you depend on are built and maintained by a team you can\r\n                trust, and backed by mission-critical support and expert services.</p>\r\n            </article>\r\n          </div>\r\n          <div>\r\n            <article class=\"box\">\r\n              <div class=\"expand:x:s\">\r\n                <svg class=\"box\" xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 78 65\"><defs/><path fill=\"url(#paint0_radial)\" d=\"M50.61 12.85c-.5 0-.98-.19-1.35-.53a31.34 31.34 0 00-42.53 0 2 2 0 01-2.7-2.96 35.34 35.34 0 0147.93 0 2 2 0 01-1.35 3.48z\"/><path fill=\"url(#paint1_radial)\" d=\"M54 25.91a2 2 0 01-1.66-.88 29.03 29.03 0 00-48.68 0A2 2 0 01.34 22.8a33.04 33.04 0 0155.32 0A2 2 0 0154 25.9z\"/><path fill=\"url(#paint2_radial)\" d=\"M21.68 64a2 2 0 01-1.42-.6c-.43-.43-10.68-10.9-10.68-20.97 0-10.45 8.26-18.95 18.42-18.95 10.16 0 18.42 8.5 18.42 18.95a2 2 0 11-4 0c0-8.24-6.47-14.95-14.42-14.95-7.96 0-14.43 6.7-14.43 14.95 0 8.45 9.43 18.06 9.53 18.16a2 2 0 01-1.42 3.4z\"/><path fill=\"url(#paint3_radial)\" d=\"M34.32 64c-4.81 0-15.96-9.15-17.04-19.34a12.93 12.93 0 013.06-9.86 10.2 10.2 0 017.6-3.5H28a10.65 10.65 0 017.55 3.14 11.18 11.18 0 013.3 8v1.3a5.58 5.58 0 1011.15 0v-.46c0-12.45-9.02-22.81-20.54-23.58a21.41 21.41 0 00-16.2 5.82 23.36 23.36 0 00-2.22 31.43 2 2 0 01-3.13 2.5 27.37 27.37 0 012.6-36.85 25.37 25.37 0 0119.22-6.89C43.33 16.61 54 28.73 54 43.28v.45a9.58 9.58 0 11-19.16 0v-1.3a7.21 7.21 0 00-4.28-6.61A6.66 6.66 0 0028 35.3h-.04a6.18 6.18 0 00-4.65 2.16 8.87 8.87 0 00-2.07 6.77C22.13 52.55 31.68 60 34.31 60a2 2 0 010 4z\"/><path fill=\"url(#paint4_radial)\" d=\"M41.74 60.09c-7.16 0-15.9-8.75-15.9-18.96a2 2 0 114 0c0 7.91 6.66 14.96 11.9 14.96a2 2 0 010 4z\"/><circle cx=\"60\" cy=\"47\" r=\"16\" fill=\"#2D4665\" stroke=\"#fff\" stroke-width=\"4\"/><path fill=\"#DEE3EA\" d=\"M59.93 38.97a4.22 4.22 0 00-3.88 2.57c-.21.5-.32 1.04-.32 1.59v.7a1.41 1.41 0 00-1.4 1.38v6.94a1.4 1.4 0 001.4 1.4h8.4a1.42 1.42 0 001.4-1.4v-6.94a1.4 1.4 0 00-1.4-1.39v-.69a4.13 4.13 0 00-2.6-3.85 4.22 4.22 0 00-1.6-.31zm0 1.38a2.76 2.76 0 012.6 1.7c.14.35.2.71.2 1.08v.7h-5.6v-.7a2.7 2.7 0 011.72-2.58c.34-.14.7-.2 1.08-.2zm-4.2 4.86h8.4v6.94h-8.4v-6.94zm4.2 2.08a1.4 1.4 0 00-1.3.86 1.38 1.38 0 001.03 1.9 1.41 1.41 0 001.43-.6 1.38 1.38 0 00-.17-1.75 1.4 1.4 0 00-1-.4z\"/><defs><radialGradient id=\"paint0_radial\" cx=\"0\" cy=\"0\" r=\"1\" gradientTransform=\"matrix(0 28.9994 -28.2768 0 28 35)\" gradientUnits=\"userSpaceOnUse\"><stop offset=\".1\" stop-color=\"#FED352\"/><stop offset=\".94\" stop-color=\"#FFE8A0\"/></radialGradient><radialGradient id=\"paint1_radial\" cx=\"0\" cy=\"0\" r=\"1\" gradientTransform=\"matrix(0 28.9994 -28.2768 0 28 35)\" gradientUnits=\"userSpaceOnUse\"><stop offset=\".1\" stop-color=\"#FED352\"/><stop offset=\".94\" stop-color=\"#FFE8A0\"/></radialGradient><radialGradient id=\"paint2_radial\" cx=\"0\" cy=\"0\" r=\"1\" gradientTransform=\"matrix(0 28.9994 -28.2768 0 28 35)\" gradientUnits=\"userSpaceOnUse\"><stop offset=\".1\" stop-color=\"#FED352\"/><stop offset=\".94\" stop-color=\"#FFE8A0\"/></radialGradient><radialGradient id=\"paint3_radial\" cx=\"0\" cy=\"0\" r=\"1\" gradientTransform=\"matrix(0 28.9994 -28.2768 0 28 35)\" gradientUnits=\"userSpaceOnUse\"><stop offset=\".1\" stop-color=\"#FED352\"/><stop offset=\".94\" stop-color=\"#FFE8A0\"/></radialGradient><radialGradient id=\"paint4_radial\" cx=\"0\" cy=\"0\" r=\"1\" gradientTransform=\"matrix(0 28.9994 -28.2768 0 28 35)\" gradientUnits=\"userSpaceOnUse\"><stop offset=\".1\" stop-color=\"#FED352\"/><stop offset=\".94\" stop-color=\"#FFE8A0\"/></radialGradient></defs></svg>\r\n              </div>\r\n              <h3>Protect your users & data</h3>\r\n              <p class=\"p2\">Give your users the best possible on-device security, with advanced biometric authentication and the\r\n                latest\r\n                in secure storage.</p>\r\n            </article>\r\n        </div>\r\n        <div>\r\n            <article class=\"box\">\r\n              <div class=\"expand:x:s\">\r\n                <svg class=\"box\" xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 68 68\"><defs/><path fill=\"#FFF6DC\" d=\"M39.5 56C49.717 56 58 47.717 58 37.5S49.717 19 39.5 19 21 27.283 21 37.5 29.283 56 39.5 56z\"/><path fill=\"#5B708B\" d=\"M51.5 31.2c-.398 0-.78-.164-1.06-.454A1.574 1.574 0 0150 29.65v-4.903c0-.41.158-.805.44-1.095.28-.29.662-.453 1.06-.453s.78.163 1.06.453c.282.29.44.684.44 1.095v4.904c0 .41-.158.804-.44 1.094-.28.29-.662.454-1.06.454z\"/><path fill=\"#2D4665\" d=\"M56.604 4.529L52.505.417a1.417 1.417 0 00-2.007 0l-4.1 4.112a1.426 1.426 0 001.01 2.413c.372.003.73-.14.998-.4l1.715-1.72v14.754c0 .377.15.74.416 1.007a1.418 1.418 0 002.424-1.007V4.902l1.633 1.638A1.417 1.417 0 0057 5.527a1.426 1.426 0 00-.399-1.001l.003.003z\"/><path fill=\"#FED352\" d=\"M48.833 41H37.167c-.31 0-.607-.126-.825-.35a1.215 1.215 0 01-.342-.848V24.198c0-.318.123-.622.342-.847.218-.225.515-.351.825-.351.31 0 .606.126.825.35.218.226.341.53.341.848v14.407h10.5c.31 0 .607.126.825.35.22.225.342.53.342.848 0 .317-.123.622-.342.847-.218.224-.515.35-.825.35z\"/><path fill=\"#FED352\" d=\"M67.598 14.164l-4.126-4.123a1.43 1.43 0 00-2.021 0l-4.127 4.123a1.427 1.427 0 002.021 2.02l1.727-1.725v23.107c0 3.728-.963 7.394-2.796 10.642a21.665 21.665 0 01-7.668 7.896 21.69 21.69 0 01-29.42-6.786 21.645 21.645 0 015.91-29.584 1.428 1.428 0 00-1.621-2.35 24.494 24.494 0 00-6.76 33.373 24.523 24.523 0 009.117 8.428 24.547 24.547 0 0032.777-9.317 24.494 24.494 0 003.31-11.962c0-.029.01-.056.01-.086V14.538l1.647 1.643A1.43 1.43 0 0068 15.166a1.428 1.428 0 00-.401-1.005v.003z\"/><path fill=\"#21426B\" stroke=\"#fff\" stroke-width=\"4\" d=\"M21.073 40H8.927A6.927 6.927 0 002 46.927v12.146A6.927 6.927 0 008.927 66h12.146A6.927 6.927 0 0028 59.073V46.927A6.927 6.927 0 0021.073 40z\"/><path fill=\"#DEE3EA\" d=\"M19.957 51.957h-3.914v-3.914a1.043 1.043 0 10-2.086 0v3.914h-3.914a1.043 1.043 0 100 2.086h3.914v3.914a1.043 1.043 0 102.086 0v-3.914h3.914a1.043 1.043 0 100-2.086z\"/></svg>\r\n              </div>\r\n              <h3>Accelerate your mobile projects</h3>\r\n              <p class=\"p2\">Save valuable time and effort that would normally be spent chasing plugins and troubleshooting issues.\r\n                Ionic\r\n                Native is a complete solution that delivers everything you need on Day 1.</p>\r\n            </article>\r\n          </div>\r\n        </div>\r\n      </div>\r\n    </section>\r\n  </div>\r\n\r\n  <section class=\"whitepaperCta\">\r\n    <div class=\"container\">\r\n      <img  src=\"/img/native/book@2x.png\"\r\n            srcset=\"/img/native/book@1x.png 1x,\r\n                    /img/native/book@2x.png 2x\"\r\n            loading=\"lazy\"\r\n            width=\"512\" height=\"383\"\r\n            alt=\"Book Cover: Building cross-platform apps with Capacitor\"/>\r\n      <div class=\"whitepaperCta__content\">\r\n        <h3>\r\n          See when and why to use Capacitor to build cross-platform apps.&nbsp;\r\n          <span>We wrote a guide to help you get started.</span>\r\n        </h3>\r\n        <button class=\"btn sm\" data-toggle=\"modal\" data-target=\"#modal-data-sheet\">\r\n          Read our Guide <span style=\"letterSpacing: 0\">-></span>\r\n        </button>\r\n      </div>\r\n    </div>\r\n  </section>\r\n\r\n  <div class=\"container main1 stack\">\r\n    <section id=\"plugins\" class=\"strip box\">\r\n      <div id=\"pluginsText\" class=\"box stack\">\r\n        <h2>Premier, supported native plugins</h2>\r\n        <p class=\"p1 box\">Native features maintained by Ionic’s team of native experts. Active subscribers get ongoing updates to supported <a class=\"highlight\" href=\"https://capacitorjs.com/\">Capacitor</a> and <a href=\"https://cordova.apache.org/\" target=\"_blank\" class=\"highlight\">Cordova</a> plugins, to keep pace with OS and API changes, and evolving device standards.</p>\r\n        <div>\r\n          <svg class=\"box\" fill=\"none\" viewBox=\"0 0 48 48\">\r\n            <defs/><path fill=\"#53B9FF\" d=\"M7.47 10.15L.06 17.57l11.43 11.47L0 40.57 7.4 48 18.9 36.47l11.46 11.45 7.41-7.43-30.3-30.34z\"/><path fill=\"#119EFF\" d=\"M26.35 29.04l-7.44 7.43 11.46 11.45 7.41-7.43-11.43-11.45z\"/><path fill=\"#000\" fill-opacity=\".2\" d=\"M26.35 29.04l-7.44 7.43 2.86 2.84 4.58-10.27z\"/><path fill=\"#53B9FF\" fill-rule=\"evenodd\" d=\"M36.48 18.93L48 7.4 40.58 0 29.07 11.5 17.6.07l-7.42 7.42L40.5 37.83l7.42-7.43-11.44-11.47z\" clip-rule=\"evenodd\"/><path fill=\"#119EFF\" d=\"M21.63 18.93l7.44-7.42L17.6.06l-7.42 7.42 11.44 11.45z\"/><path fill=\"#000\" fill-opacity=\".2\" d=\"M21.63 18.93l7.44-7.42-2.87-2.85-4.57 10.27z\"/>\r\n          </svg>\r\n          <svg class=\"box\" fill=\"none\" viewBox=\"0 0 48 48\"><defs/>\r\n            <path fill=\"#020814\" d=\"M45.45 47.88h-8.1l.58-6.84h-3.98l-.57 6.84H16.62l-.57-6.84h-3.98l.57 6.84h-8.1L0 18.24 11.36 0h27.28L50 18.24l-4.55 29.64zM36.36 9.12h-7.3l.49 3.42h-9.1l.5-3.42h-7.31l-4.55 9.12 2.27 18.24h27.28l2.27-18.24-4.55-9.12zm-3.97 21.3c-.63 0-1.14-1.9-1.14-4.24 0-2.34.5-4.24 1.14-4.24.62 0 1.13 1.9 1.13 4.24 0 2.35-.5 4.24-1.13 4.24zm-14.35.36c-.63 0-1.14-1.9-1.14-4.24 0-2.35.51-4.24 1.14-4.24.63 0 1.14 1.9 1.14 4.24 0 2.34-.51 4.24-1.14 4.24z\"/>\r\n          </svg>\r\n        </div>\r\n      </div>\r\n      <div id=\"pluginsImg\" class=\"expand:x:e box\">\r\n        <img src=\"/img/native/plugins@2x.png\" \r\n             srcset=\"/img/native/plugins@1x.png 1x, /img/native/plugins@2x.png 2x\" \r\n             width=\"539\" height=\"510\"\r\n             loading=\"lazy\"\r\n             alt=\"wheel of different app icons floating around Ionic Native logo\">\r\n      </div>\r\n      \r\n    </section>\r\n\r\n    <section id=\"security\" class=\"strip box\">\r\n      <div id=\"securityText\" class=\"box stack\">\r\n        <h2>Better app security</h2>\r\n        <p class=\"p1 box\">Deliver the best possible frontend security to protect users and data, with plug-and-play security solutions like <a class=\"highlight\" href=\"https://ionic.io/products/identity-vault\">Identity Vault</a>, <a class=\"highlight\" href=\"https://ionic.io/products/auth-connect\">Auth Connect</a>, and secure <a class=\"highlight\" href=\"https://ionic.io/products/secure-storage\">Secure Storage</a>.</p>\r\n      </div> \r\n      <div id=\"securityImg\" class=\"expand:x:e box\">  \r\n        <img src=\"/img/native/security-2@2x.png\" \r\n             srcset=\"/img/native/security-2@1x.png 1x, /img/native/security-2@2x.png 2x\" \r\n             width=\"571\" height=\"562\"\r\n             loading=\"lazy\"\r\n             alt=\"\">\r\n      </div>   \r\n    </section>\r\n\r\n    <section id=\"supGuidance\" class=\"strip\">\r\n      <article id=\"support\" class=\"stack box\">\r\n        <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 366 176\"><defs/><path fill=\"#FED352\" d=\"M321.14 35.43h-193.3a11.87 11.87 0 00-10.94 7.28c-.6 1.43-.9 2.97-.9 4.52V170.6a5.4 5.4 0 005.74 5.39 5.43 5.43 0 002.75-.94l23.06-15.8h173.6a11.85 11.85 0 0011.82-11.8V47.24a11.77 11.77 0 00-11.83-11.8z\"/><path fill=\"#C4D0DF\" d=\"M96.65 56.38H11.84A11.87 11.87 0 00.9 63.66c-.6 1.43-.9 2.96-.9 4.5v63.85a11.76 11.76 0 007.3 10.9c1.44.59 2.98.9 4.54.9h82.8l10.63 7.28a2.06 2.06 0 003.22-1.69V68.17a11.75 11.75 0 00-7.3-10.9c-1.44-.59-2.98-.9-4.54-.9z\"/><path fill=\"#21426B\" d=\"M48.12 115.32a5.37 5.37 0 015.4-5.38 5.41 5.41 0 015.4 5.38 5.37 5.37 0 01-5.4 5.38 5.41 5.41 0 01-5.4-5.38zm.58-33.4a4 4 0 014-4.2h1.65a4 4 0 014 4.2l-1.1 21.67a3.73 3.73 0 01-7.45 0l-1.1-21.68z\"/><path stroke=\"#B68D2A\" stroke-linecap=\"round\" stroke-miterlimit=\"10\" stroke-width=\"6\" d=\"M142.73 61h49\"/><path stroke=\"#B68D2A\" stroke-linecap=\"round\" stroke-miterlimit=\"10\" stroke-width=\"6\" d=\"M142.73 79h133\" opacity=\".8\"/><path stroke=\"#B68D2A\" stroke-linecap=\"round\" stroke-miterlimit=\"10\" stroke-width=\"6\" d=\"M142.73 97h106\" opacity=\".6\"/><path stroke=\"#B68D2A\" stroke-linecap=\"round\" stroke-miterlimit=\"10\" stroke-width=\"6\" d=\"M142.73 115h148\" opacity=\".5\"/><path stroke=\"#B68D2A\" stroke-linecap=\"round\" stroke-miterlimit=\"10\" stroke-width=\"6\" d=\"M142.73 133h85\" opacity=\".3\"/><path fill=\"#21426B\" stroke=\"#fff\" stroke-width=\"4\" d=\"M363.73 40a38 38 0 11-76 0 38 38 0 0176 0z\"/><path stroke=\"#DEE3EA\" stroke-width=\"3\" d=\"M326.23 56.79a17.28 17.28 0 100-34.57 17.28 17.28 0 000 34.57z\"/><path stroke=\"#DEE3EA\" stroke-linecap=\"round\" stroke-width=\"3\" d=\"M324.75 41.98h10.86M324.75 41.98V30.12\"/><defs><linearGradient id=\"support_paint0_linear\" x1=\"224.49\" x2=\"224.49\" y1=\"35.43\" y2=\"176\" gradientUnits=\"userSpaceOnUse\"><stop stop-color=\"#FFDA6B\"/><stop offset=\"1\" stop-color=\"#FED352\"/></linearGradient></defs></svg>\r\n        <h2 class=\"box\">Mission-critical support</h2>\r\n        <p class=\"box p1\">Get guaranteed response SLAs throughout the app lifecycle. Ionic’s professional support team is on-hand to help\r\n          you troubleshoot and address issues occuring at the native layer.</p>\r\n      </article>\r\n      <article class=\"stack box\">\r\n        <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 280 182\"><defs/><path fill=\"#C4D0DF\" d=\"M257.93 46.52h-48.55c-12.19 0-22.07 9.99-22.07 22.31v48.2c0 12.33 9.88 22.32 22.07 22.32h48.55c12.19 0 22.07-9.99 22.07-22.31v-48.2c0-12.33-9.88-22.32-22.07-22.32z\"/><path stroke=\"#21426B\" stroke-miterlimit=\"10\" stroke-width=\"4\" d=\"M233.39 91.4c6.72 0 12.17-5.5 12.17-12.3 0-6.8-5.45-12.3-12.17-12.3a12.24 12.24 0 00-12.17 12.3c0 6.8 5.44 12.3 12.17 12.3z\" opacity=\".7\"/><path stroke=\"#21426B\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-miterlimit=\"10\" stroke-width=\"4\" d=\"M258.9 118.48l-.2-.62a27.06 27.06 0 00-9.77-13.22 26.58 26.58 0 00-31.1.01 27.05 27.05 0 00-9.77 13.24\"/><path fill=\"#C4D0DF\" d=\"M70.62 46.52H22.07C9.88 46.52 0 56.5 0 68.83v48.2c0 12.33 9.88 22.32 22.07 22.32h48.55c12.19 0 22.07-9.99 22.07-22.31v-48.2c0-12.33-9.88-22.32-22.07-22.32z\"/><path stroke=\"#21426B\" stroke-miterlimit=\"10\" stroke-width=\"4\" d=\"M46.18 91.4c6.72 0 12.17-5.5 12.17-12.3 0-6.8-5.45-12.3-12.17-12.3A12.24 12.24 0 0034 79.1c0 6.8 5.45 12.3 12.17 12.3z\" opacity=\".7\"/><path stroke=\"#21426B\" stroke-linecap=\"round\" stroke-miterlimit=\"10\" stroke-width=\"4\" d=\"M71.7 118.48l-.2-.62a27.05 27.05 0 00-9.78-13.22 26.57 26.57 0 00-31.1.01 27.05 27.05 0 00-9.76 13.24\"/><path fill=\"#FED352\" stroke=\"#fff\" stroke-width=\"6\" d=\"M182.81 3H97.2A25.19 25.19 0 0072 28.19v85.63A25.19 25.19 0 0097.19 139h85.63A25.19 25.19 0 00208 113.81V28.2A25.19 25.19 0 00182.81 3z\"/><path stroke=\"#B68D2A\" stroke-miterlimit=\"10\" stroke-width=\"4\" d=\"M140 67a20 20 0 100-40 20 20 0 000 40z\" opacity=\".7\"/><path stroke=\"#B68D2A\" stroke-miterlimit=\"10\" stroke-width=\"4\" d=\"M178 107l-.3-.92a39.83 39.83 0 00-14.62-19.44 40.17 40.17 0 00-46.49.02A39.83 39.83 0 00102 106.12\"/><path fill=\"#21426B\" stroke=\"#fff\" stroke-width=\"6\" d=\"M189.72 102.6H90.28a38.17 38.17 0 00-38.14 38.2c0 21.1 17.07 38.2 38.14 38.2h99.44a38.17 38.17 0 0038.14-38.2c0-21.1-17.07-38.2-38.14-38.2z\"/><path stroke=\"#DEE3EA\" stroke-linecap=\"round\" stroke-width=\"3\" d=\"M191 123.99H88.78\" opacity=\".8\"/><path fill=\"#21426B\" d=\"M132.28 130.65a6.76 6.76 0 10-.02-13.53 6.76 6.76 0 00.02 13.53z\"/><path stroke=\"#DEE3EA\" stroke-linecap=\"round\" stroke-width=\"3\" d=\"M132.28 129.2a5.31 5.31 0 10-.01-10.63 5.31 5.31 0 000 10.63z\"/><path stroke=\"#DEE3EA\" stroke-linecap=\"round\" stroke-width=\"3\" d=\"M191 156.67H88.78\" opacity=\".8\"/><path fill=\"#21426B\" d=\"M115.86 163.53a6.76 6.76 0 100-13.53 6.76 6.76 0 000 13.53z\"/><path stroke=\"#DEE3EA\" stroke-linecap=\"round\" stroke-width=\"3\" d=\"M115.86 162.08a5.31 5.31 0 100-10.63 5.31 5.31 0 000 10.63z\"/><path stroke=\"#DEE3EA\" stroke-linecap=\"round\" stroke-width=\"3\" d=\"M191 140.33H88.78\" opacity=\".8\"/><path fill=\"#21426B\" d=\"M168 147.09a6.76 6.76 0 100-13.53 6.76 6.76 0 000 13.53z\"/><path stroke=\"#DEE3EA\" stroke-linecap=\"round\" stroke-width=\"3\" d=\"M168 145.64a5.31 5.31 0 100-10.63 5.31 5.31 0 000 10.63z\"/></svg>\r\n        <h2 class=\"box\">Expert native guidance</h2>\r\n        <p class=\"box p1\">\r\n          Our team of native experts will work with you to define a native strategy that fits your unique goals and\r\n          challenges. We’re here to help.\r\n        </p>\r\n      </article>\r\n    </section>\r\n  </div>\r\n\r\n  <section id=\"secFeatures\" class=\"box main2\">\r\n    <div class=\"container flex:r:w\">\r\n      <div id=\"secFeaturesText\" class=\"box center:x\">\r\n        <h2 class=\"box center:txt\">Advanced mobile biometric, security, and storage solutions</h2>\r\n        <p class=\"box p1 center:txt\">Accelerate your development with powerful solutions for security, authentication, and storage — all built and supported by the Ionic team.</p>\r\n      </div>\r\n      <div class=\"switcher\">\r\n        <div>\r\n          <a href=\"https://ionic.io/products/identity-vault\">\r\n            <article class=\"box panel\">\r\n              <div class=\"expand:x:s\">\r\n                <svg class=\"box\" xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 80 80\"><defs/><path fill=\"#1156A3\" d=\"M80 40c0 17.5-3 27.75-10.25 33.5-6.25 5-16 6.5-29.75 6.5-15.75 0-26-2-32.25-9C2.25 65 0 55.25 0 40 0 23.75 2.5 13.75 8.75 8 15 1.75 25 0 40 0c14.75 0 24.75 1.75 31 7.75C77.5 13.5 80 23.5 80 40z\"/><path fill=\"#276CAB\" d=\"M40 66.75a26.51 26.51 0 01-26.5-26.5C13.5 25.5 25.5 14 40 14s26.5 11.75 26.5 26.5-12 26.25-26.5 26.25zM40 17c-13 0-23.5 10.5-23.5 23.5S27 64 40 64s23.5-10.5 23.5-23.5S53 17 40 17z\"/><path fill=\"url(#identity_paint0_linear)\" d=\"M37.25 37.75v-25.5c0-1.5 1.25-2.75 2.75-2.75s2.75 1.25 2.75 2.75v25.5c0 1.5-1.25 2.75-2.75 2.75a2.77 2.77 0 01-2.75-2.75z\"/><path fill=\"url(#identity_paint1_linear)\" d=\"M65.5 52.25l-24.25-14c-1.25-.75-3-.25-3.75 1s-.25 2.75 1 3.5l24.25 14c1.25.75 3 .25 3.75-1 .75-1 .25-2.75-1-3.5z\"/><path fill=\"url(#identity_paint2_linear)\" d=\"M14.5 52.25l24.25-14c1.25-.75 3-.25 3.75 1s.25 2.75-1 3.5l-24.25 14c-1.25.75-3 .25-3.75-1-.75-1-.25-2.75 1-3.5z\"/><path fill=\"#fff\" d=\"M40 28.25c-6.75 0-12.25 5.5-12.25 12.25S33.25 52.75 40 52.75s12.25-5.5 12.25-12.25S46.75 28.25 40 28.25z\"/><defs><linearGradient id=\"identity_paint0_linear\" x1=\"40\" x2=\"40\" y1=\"29.36\" y2=\"10.14\" gradientUnits=\"userSpaceOnUse\"><stop stop-color=\"#8AA9BE\"/><stop offset=\"1\" stop-color=\"#DFF1FB\"/></linearGradient><linearGradient id=\"identity_paint1_linear\" x1=\"49.84\" x2=\"66.48\" y1=\"46.27\" y2=\"55.91\" gradientUnits=\"userSpaceOnUse\"><stop stop-color=\"#8AA9BE\"/><stop offset=\"1\" stop-color=\"#DFF1FB\"/></linearGradient><linearGradient id=\"identity_paint2_linear\" x1=\"30.06\" x2=\"13.42\" y1=\"46.37\" y2=\"55.71\" gradientUnits=\"userSpaceOnUse\"><stop stop-color=\"#8AA9BE\"/><stop offset=\"1\" stop-color=\"#DFF1FB\"/></linearGradient></defs></svg>\r\n              </div>\r\n              <h3 class=\"box\">Identity Vault</h3>\r\n              <p class=\"box p2\">Add a critical layer of protection with advanced biometrics that locks down sensitive data, by employing the latest in native security best practices.</p>\r\n            </article>\r\n          </a>\r\n          <a href=\"https://ionic.io/products/auth-connect\">\r\n            <article class=\"box panel\">\r\n              <div class=\"expand:x:s\">\r\n                <svg class=\"box\" xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 80 80\"><defs/><path fill=\"#00CEAB\" d=\"M80 40c0 17.5-3 27.75-10.25 33.5-6.25 5-16 6.5-29.75 6.5-15.75 0-26-2-32.25-9C2.25 65 0 55.25 0 40 0 23.75 2.5 13.75 8.75 8 15 2 25 0 40 0c14.75 0 24.75 1.75 31 7.75C77.5 13.5 80 23.5 80 40z\"/><path fill=\"#05DDB3\" d=\"M51 16.75c-.25 0-.75 0-1-.25-1-.25-2-1-2.5-1.75-1-2-.5-4.25 1.5-5.5 1-.5 2-.75 3-.5s2 1 2.5 1.75.75 2 .5 3-1 2-1.75 2.5-1.5.75-2.25.75zM51 11c-.25 0-.5 0-1 .25-.75.5-1.25 1.5-.75 2.5.5.75 1.5 1.25 2.5.75.75-.5 1.25-1.5.75-2.5-.25-.75-.75-1-1.5-1zM29 71.25c-.25 0-.75 0-1-.25-1-.25-2-1-2.5-1.75-.5-1-.75-2-.5-3s1-2 1.75-2.5c1-.5 2-.75 3-.5s2 1 2.5 1.75.75 2 .5 3-1 2-1.75 2.5-1.5.75-2 .75zm0-5.75c-.25 0-.5 0-1 .25-.75.5-1.25 1.5-.75 2.5.5.75 1.5 1.25 2.5.75.75-.5 1.25-1.5.75-2.5-.25-.75-1-1-1.5-1z\"/><path fill=\"#05DDB3\" d=\"M48.97 15.3L29.2 63.92l2.08.84 19.77-48.63-2.08-.85zM67.25 55c-.25 0-.75 0-1-.25-1-.25-2-1-2.5-1.75s-.75-2-.5-3 1-2 1.75-2.5c1-.5 2-.75 3-.5s2 1 2.5 1.75.75 2 .5 3-1 2-1.75 2.5c-.5.5-1.25.75-2 .75zm0-5.75c-.25 0-.5 0-1 .25s-.75.75-.75 1c0 .5 0 1 .25 1.25.5.75 1.5 1.25 2.5.75C69 52 69.5 51 69 50a2.7 2.7 0 00-1.75-.75zM12.75 33c-.25 0-.75 0-1-.25-1-.25-2-1-2.5-1.75-.5-1-.75-2-.5-3s1-2 1.75-2.5c2-1 4.25-.5 5.5 1.5 1 2 .5 4.25-1.5 5.5-.25.25-1 .5-1.75.5zm0-6c-.25 0-.5 0-1 .25-.75.5-1.25 1.5-.75 2.5.5.75 1.5 1.25 2.5.75.75-.5 1.25-1.5.75-2.5-.25-.5-1-1-1.5-1z\"/><path fill=\"#05DDB3\" d=\"M16.18 28.9l-.84 2.08 48.63 19.78.84-2.08-48.63-19.79zM67 32.5c-.25 0-.75 0-1-.25a3.78 3.78 0 01-2.75-5 3.78 3.78 0 015-2.75c2.25.5 3.5 2.75 2.75 5-.5 1.75-2.25 3-4 3zM65.25 28c-.25 1 .25 2 1.25 2.25s2-.25 2.25-1.25-.25-2-1.25-2.25c-.5-.25-1 0-1.25.25s-.75.5-1 1zM13 55.5c-.25 0-.75 0-1-.25a3.78 3.78 0 01-2.75-5c.25-1 1-2 1.75-2.5s2-.75 3-.5 2 1 2.5 1.75c.5 1 .75 2 .5 3-.75 2.25-2.25 3.5-4 3.5zm0-6c-.25 0-.5 0-1 .25s-.75.75-.75 1c-.25 1 .25 2 1.25 2.25.5 0 1 0 1.25-.25.5-.25.75-.75.75-1 .25-1-.25-2-1.25-2.25H13z\"/><path fill=\"#05DDB3\" d=\"M63.8 28.86l-48.37 20.4.87 2.07 48.38-20.4-.88-2.07zM51.5 71c-.25 0-.75 0-1-.25a3.78 3.78 0 01-2.75-5c.25-1 1-2 1.75-2.5 1-.5 2-.75 3-.5s2 1 2.5 1.75c.5 1 .75 2 .5 3-.75 2.5-2.25 3.5-4 3.5zm0-5.75c-.25 0-.5 0-1 .25s-.75.75-.75 1c-.25 1 .25 2 1.25 2.25s2-.25 2.25-1.25-.25-2-1.25-2.25h-.5zM28.5 16.75c-.25 0-.75 0-1-.25-1-.25-2-1-2.5-1.75-.5-1-.75-2-.5-3a3.78 3.78 0 015-2.75c2.25.5 3.5 2.75 2.75 5-.25 1.75-2 2.75-3.75 2.75zm0-5.75c-.25 0-.5 0-1 .25s-.75.75-.75 1c-.25 1 .25 2 1.25 2.25s2-.25 2.25-1.25S30 11.25 29 11h-.5z\"/><path fill=\"#05DDB3\" d=\"M30.98 15.31l-2.07.88 20.4 48.37 2.07-.87-20.4-48.38zM51 16.75c-.25 0-.75 0-1-.25-1-.25-2-1-2.5-1.75-1-2-.5-4.25 1.5-5.5 1-.5 2-.75 3-.5s2 1 2.5 1.75.75 2 .5 3-1 2-1.75 2.5-1.5.75-2.25.75zM51 11c-.25 0-.5 0-1 .25-.75.5-1.25 1.5-.75 2.5.5.75 1.5 1.25 2.5.75.75-.5 1.25-1.5.75-2.5-.25-.75-.75-1-1.5-1zM29 71.25c-.25 0-.75 0-1-.25-1-.25-2-1-2.5-1.75-.5-1-.75-2-.5-3s1-2 1.75-2.5c1-.5 2-.75 3-.5s2 1 2.5 1.75.75 2 .5 3-1 2-1.75 2.5-1.5.75-2 .75zm0-5.75c-.25 0-.5 0-1 .25-.75.5-1.25 1.5-.75 2.5.5.75 1.5 1.25 2.5.75.75-.5 1.25-1.5.75-2.5-.25-.75-1-1-1.5-1z\"/><path fill=\"url(#auth_paint0_linear)\" d=\"M31.25 64.75l-2.25-1 19.75-48.5L51 16 31.25 64.75z\"/><path fill=\"#05DDB3\" d=\"M67.25 55c-.25 0-.75 0-1-.25-1-.25-2-1-2.5-1.75s-.75-2-.5-3 1-2 1.75-2.5c1-.5 2-.75 3-.5s2 1 2.5 1.75.75 2 .5 3-1 2-1.75 2.5c-.5.5-1.25.75-2 .75zm0-5.75c-.25 0-.5 0-1 .25s-.75.75-.75 1c0 .5 0 1 .25 1.25.5.75 1.5 1.25 2.5.75C69 52 69.5 51 69 50a2.7 2.7 0 00-1.75-.75zM12.75 33c-.25 0-.75 0-1-.25-1-.25-2-1-2.5-1.75-.5-1-.75-2-.5-3s1-2 1.75-2.5c2-1 4.25-.5 5.5 1.5 1 2 .5 4.25-1.5 5.5-.25.25-1 .5-1.75.5zm0-6c-.25 0-.5 0-1 .25-.75.5-1.25 1.5-.75 2.5.5.75 1.5 1.25 2.5.75.75-.5 1.25-1.5.75-2.5-.25-.5-1-1-1.5-1z\"/><path fill=\"url(#auth_paint1_linear)\" d=\"M63.75 50.75L15.25 31l.75-2 48.75 19.75-1 2z\"/><path fill=\"#05DDB3\" d=\"M67 32.5c-.25 0-.75 0-1-.25a3.78 3.78 0 01-2.75-5 3.78 3.78 0 015-2.75c2.25.5 3.5 2.75 2.75 5-.5 1.75-2.25 3-4 3zM65.25 28c-.25 1 .25 2 1.25 2.25s2-.25 2.25-1.25-.25-2-1.25-2.25c-.5-.25-1 0-1.25.25s-.75.5-1 1zM13 55.5c-.25 0-.75 0-1-.25a3.78 3.78 0 01-2.75-5c.25-1 1-2 1.75-2.5s2-.75 3-.5 2 1 2.5 1.75c.5 1 .75 2 .5 3-.75 2.25-2.25 3.5-4 3.5zm0-6c-.25 0-.5 0-1 .25s-.75.75-.75 1c-.25 1 .25 2 1.25 2.25.5 0 1 0 1.25-.25.5-.25.75-.75.75-1 .25-1-.25-2-1.25-2.25H13z\"/><path fill=\"url(#auth_paint2_linear)\" d=\"M16.25 51.25l-.75-2 48.25-20.5.75 2-48.25 20.5z\"/><path fill=\"#05DDB3\" d=\"M51.5 71c-.25 0-.75 0-1-.25a3.78 3.78 0 01-2.75-5c.25-1 1-2 1.75-2.5 1-.5 2-.75 3-.5s2 1 2.5 1.75c.5 1 .75 2 .5 3-.75 2.5-2.25 3.5-4 3.5zm0-5.75c-.25 0-.5 0-1 .25s-.75.75-.75 1c-.25 1 .25 2 1.25 2.25s2-.25 2.25-1.25-.25-2-1.25-2.25h-.5zM28.5 16.75c-.25 0-.75 0-1-.25-1-.25-2-1-2.5-1.75-.5-1-.75-2-.5-3a3.78 3.78 0 015-2.75c2.25.5 3.5 2.75 2.75 5-.25 1.75-2 2.75-3.75 2.75zm0-5.75c-.25 0-.5 0-1 .25s-.75.75-.75 1c-.25 1 .25 2 1.25 2.25s2-.25 2.25-1.25S30 11.25 29 11h-.5z\"/><path fill=\"url(#auth_paint3_linear)\" d=\"M49.25 64.5l-20.5-48.25 2-1 20.5 48.5-2 .75z\"/><path fill=\"#fff\" d=\"M40 20.25c-4.25 0-8.25 3-8.25 9.25s4 9.25 8.25 9.25 8.25-3 8.25-9.25-4-9.25-8.25-9.25z\"/><path fill=\"url(#auth_paint4_linear)\" d=\"M40 41.75c-8.25 0-17.25 3.75-17.25 10.75 0 2.5 7.75 5 17.25 5s17.25-2.25 17.25-5c0-7-9-10.75-17.25-10.75z\"/><defs><linearGradient id=\"auth_paint0_linear\" x1=\"29.09\" x2=\"50.89\" y1=\"39.99\" y2=\"39.99\" gradientUnits=\"userSpaceOnUse\"><stop stop-color=\"#05DDB3\"/><stop offset=\".33\" stop-color=\"#00CEAB\"/><stop offset=\".64\" stop-color=\"#00CEAB\"/><stop offset=\"1\" stop-color=\"#05DDB3\"/></linearGradient><linearGradient id=\"auth_paint1_linear\" x1=\"15.28\" x2=\"64.67\" y1=\"39.96\" y2=\"39.96\" gradientUnits=\"userSpaceOnUse\"><stop stop-color=\"#05DDB3\"/><stop offset=\".33\" stop-color=\"#00CEAB\"/><stop offset=\".64\" stop-color=\"#00CEAB\"/><stop offset=\"1\" stop-color=\"#05DDB3\"/></linearGradient><linearGradient id=\"auth_paint2_linear\" x1=\"15.39\" x2=\"64.56\" y1=\"39.98\" y2=\"39.98\" gradientUnits=\"userSpaceOnUse\"><stop stop-color=\"#05DDB3\"/><stop offset=\".33\" stop-color=\"#00CEAB\"/><stop offset=\".64\" stop-color=\"#00CEAB\"/><stop offset=\"1\" stop-color=\"#05DDB3\"/></linearGradient><linearGradient id=\"auth_paint3_linear\" x1=\"28.79\" x2=\"51.19\" y1=\"39.94\" y2=\"39.94\" gradientUnits=\"userSpaceOnUse\"><stop stop-color=\"#05DDB3\"/><stop offset=\".33\" stop-color=\"#00CEAB\"/><stop offset=\".64\" stop-color=\"#00CEAB\"/><stop offset=\"1\" stop-color=\"#05DDB3\"/></linearGradient><linearGradient id=\"auth_paint4_linear\" x1=\"40\" x2=\"40\" y1=\"42.99\" y2=\"57.05\" gradientUnits=\"userSpaceOnUse\"><stop stop-color=\"#BAFFF1\"/><stop offset=\".02\" stop-color=\"#BEFFF2\"/><stop offset=\".13\" stop-color=\"#D6FFF7\"/><stop offset=\".25\" stop-color=\"#E8FFFA\"/><stop offset=\".4\" stop-color=\"#F5FFFD\"/><stop offset=\".6\" stop-color=\"#FDFFFF\"/><stop offset=\"1\" stop-color=\"#fff\"/></linearGradient></defs></svg>\r\n              </div> \r\n              <h3 class=\"box\">Auth Connect</h3>\r\n              <p class=\"box p2\">Easily connect through your existing authentication providers, including Auth0, Azure Active Directory, and AWS Cognito—from any mobile device.</p>\r\n            </article>\r\n          </a>\r\n          <a href=\"https://ionic.io/products/secure-storage\">\r\n            <article class=\"box panel\">\r\n              <div class=\"expand:x:s\">\r\n                <svg class=\"box\" viewBox=\"0 0 80 80\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><g clip-path=\"url(#clip0)\"><path d=\"M80 40.0017C80 57.5005 76.9996 67.7519 69.7487 73.5026C63.4979 78.5033 53.7501 80.0035 39.9983 80.0035C24.2497 80.0035 13.9984 78.0032 7.74754 71.0023C2.25029 65.0015 0 55.2502 0 40.0017C0 23.7496 2.50033 13.7518 8.75114 8.00104C15.002 1.75023 24.9998 0 40.0017 0C54.7537 0 64.7515 1.75023 71.0023 7.75101C77.4997 13.5018 80 23.4996 80 40.0017Z\" fill=\"#7580F4\"/><path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M15.9375 24.5312C16.8004 24.5312 17.5 25.2308 17.5 26.0937L17.5 58.4375C17.5 59.3004 16.8004 60 15.9375 60C15.0746 60 14.375 59.3004 14.375 58.4375L14.375 26.0937C14.375 25.2308 15.0746 24.5312 15.9375 24.5312Z\" fill=\"url(#paint0_linear)\"/><path d=\"M40.0393 40.7238C54.1909 40.6653 65.6427 34.2536 65.6176 26.4027C65.5925 18.5519 54.1001 12.2349 39.9485 12.2934C25.7969 12.3518 14.345 18.7635 14.3701 26.6144C14.3952 34.4652 25.8877 40.7822 40.0393 40.7238Z\" fill=\"white\"/><g filter=\"url(#filter0_i)\"><path d=\"M46.8467 19.4785C44.1251 17.331 38.8494 16.8576 35.0704 18.4241C31.2877 19.9906 30.4314 22.9988 33.153 25.1464C33.8168 25.6706 34.6356 26.094 35.5449 26.412C35.9062 26.5384 36.1155 26.9249 35.9977 27.2886L34.1723 32.9246C33.8903 33.7953 34.5404 34.6875 35.4568 34.6875H44.5477C45.4638 34.6875 46.1139 33.7958 45.8324 32.9253L44.0007 27.2597C43.8835 26.8971 44.0913 26.5122 44.4515 26.3867C44.6147 26.3298 44.7755 26.2694 44.933 26.2051C48.712 24.6342 49.5684 21.626 46.8467 19.4785Z\" fill=\"url(#paint1_linear)\"/></g><path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M15.1875 57.1346C15.9521 56.7346 16.8962 57.0302 17.2963 57.7948C18.5428 60.1776 21.3251 62.4395 25.3669 64.1141C29.3729 65.7739 34.4473 66.7821 40.0017 66.7821C48.9529 66.7821 56.541 64.1719 60.5093 60.5507C61.1467 59.969 62.135 60.0142 62.7167 60.6516C63.2984 61.289 63.2532 62.2773 62.6157 62.859C57.8751 67.1851 49.4173 69.9071 40.0017 69.9071C34.0894 69.9071 28.6016 68.837 24.1708 67.0012C19.7758 65.1802 16.2464 62.5294 14.5273 59.2434C14.1273 58.4788 14.4229 57.5347 15.1875 57.1346Z\" fill=\"url(#paint2_linear)\"/><path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M15.2135 47.5934C15.9781 47.1934 16.9223 47.4889 17.3223 48.2535C18.5689 50.6363 21.3511 52.8982 25.393 54.5729C29.3989 56.2326 34.4734 57.2409 40.0278 57.2409C49.9047 57.2409 58.0547 54.0709 61.5899 49.9239C62.1497 49.2671 63.1359 49.1886 63.7926 49.7484C64.4493 50.3082 64.5279 51.2944 63.9681 51.9512C59.5896 57.0874 50.3486 60.3659 40.0278 60.3659C34.1154 60.3659 28.6277 59.2957 24.1968 57.4599C19.8018 55.6389 16.2724 52.9881 14.5533 49.7022C14.1533 48.9375 14.4489 47.9934 15.2135 47.5934Z\" fill=\"url(#paint3_linear)\"/><path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M15.2135 38.0521C15.9781 37.652 16.9223 37.9476 17.3223 38.7122C18.5689 41.095 21.3511 43.3569 25.393 45.0316C29.3989 46.6913 34.4734 47.6995 40.0278 47.6995C45.5822 47.6995 50.6566 46.6913 54.6626 45.0316C58.7044 43.3569 61.4867 41.095 62.7332 38.7122C63.1332 37.9476 64.0774 37.652 64.842 38.0521C65.6066 38.4521 65.9022 39.3962 65.5022 40.1608C63.7831 43.4468 60.2537 46.0976 55.8587 47.9186C51.4278 49.7544 45.9401 50.8245 40.0278 50.8245C34.1154 50.8245 28.6277 49.7544 24.1968 47.9186C19.8018 46.0976 16.2724 43.4468 14.5533 40.1608C14.1533 39.3962 14.4489 38.4521 15.2135 38.0521Z\" fill=\"url(#paint4_linear)\"/></g><defs><filter id=\"filter0_i\" x=\"31.5625\" y=\"17.5\" width=\"16.875\" height=\"22.1875\" filterUnits=\"userSpaceOnUse\" color-interpolation-filters=\"sRGB\"><feFlood flood-opacity=\"0\" result=\"BackgroundImageFix\"/><feBlend mode=\"normal\" in=\"SourceGraphic\" in2=\"BackgroundImageFix\" result=\"shape\"/><feColorMatrix in=\"SourceAlpha\" type=\"matrix\" values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0\" result=\"hardAlpha\"/><feOffset dy=\"11\"/><feGaussianBlur stdDeviation=\"2.5\"/><feComposite in2=\"hardAlpha\" operator=\"arithmetic\" k2=\"-1\" k3=\"1\"/><feColorMatrix type=\"matrix\" values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.02 0\"/><feBlend mode=\"normal\" in2=\"shape\" result=\"effect1_innerShadow\"/></filter><linearGradient id=\"paint0_linear\" x1=\"15.9968\" y1=\"59.4454\" x2=\"15.9968\" y2=\"28.0172\" gradientUnits=\"userSpaceOnUse\"><stop offset=\"0.0108\" stop-color=\"#9DAAF8\"/><stop offset=\"0.7012\" stop-color=\"#DBE9FE\"/></linearGradient><linearGradient id=\"paint1_linear\" x1=\"40.0071\" y1=\"19.7433\" x2=\"39.9532\" y2=\"32.2073\" gradientUnits=\"userSpaceOnUse\"><stop stop-color=\"#656FDB\"/><stop offset=\"0.138\" stop-color=\"#6973E1\"/><stop offset=\"0.6048\" stop-color=\"#727DEF\"/><stop offset=\"1\" stop-color=\"#7580F4\"/></linearGradient><linearGradient id=\"paint2_linear\" x1=\"14.5202\" y1=\"63.433\" x2=\"65.4812\" y2=\"63.433\" gradientUnits=\"userSpaceOnUse\"><stop stop-color=\"#A3B0F9\"/><stop offset=\"1\" stop-color=\"#7287F8\"/></linearGradient><linearGradient id=\"paint3_linear\" x1=\"14.5462\" y1=\"53.8917\" x2=\"65.5072\" y2=\"53.8917\" gradientUnits=\"userSpaceOnUse\"><stop stop-color=\"#BFCDFC\"/><stop offset=\"1\" stop-color=\"#7390FB\"/></linearGradient><linearGradient id=\"paint4_linear\" x1=\"14.5462\" y1=\"44.3504\" x2=\"65.5072\" y2=\"44.3504\" gradientUnits=\"userSpaceOnUse\"><stop stop-color=\"#DAE8FE\"/><stop offset=\"1\" stop-color=\"#819EFC\"/></linearGradient><clipPath id=\"clip0\"><rect width=\"80\" height=\"80\" fill=\"white\"/></clipPath></defs></svg>                  \r\n              </div>\r\n              <h3 class=\"box\">Secure Storage</h3>\r\n              <p class=\"box p2\">Deliver secure, reliable, data-driven mobile experiences that work anywhere, anytime — even when they’re offline.</p>\r\n            </article>\r\n          </a>\r\n        </div>\r\n      </div>\r\n    </div>\r\n  </section>\r\n\r\n  <div id=\"keyFeatures\" class=\"box main3\">\r\n    <section class=\"flex:r:w container tag-along\">\r\n      <div class=\"switcher\">\r\n        <div>\r\n          <div id=\"keyFeaturesTitle\" class=\"box\">\r\n            <div class=\"superTitle\">key features</div>\r\n            <h2>Easy access to native device features and capabilities</h2>\r\n            <p class=\"p1 box\">A full library of native plugins, actively maintained by the Ionic team. Includes the most commonly accessed native features used in enterprise app development, plus custom development options to address any native device requirements.</p>\r\n          </div>\r\n          <div id=\"keyFeaturesContent\" class=\"box\">\r\n            <article class=\"flex box\">\r\n              <div>\r\n                <svg class=\"box\" xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 56 56\"><defs/><rect width=\"56\" height=\"56\" fill=\"#fff\" rx=\"28\"/><path fill=\"#E4B035\" d=\"M29.23 28.56V43.7c0 .23.26.38.46.26l12.48-7.32A3.6 3.6 0 0044 33.52v-13.1c0-.23-.26-.37-.46-.26L29.38 28.3a.3.3 0 00-.15.26z\"/><path fill=\"#FED352\" d=\"M12.46 20.16c-.2-.11-.46.03-.46.26v13.1c0 1.28.7 2.47 1.83 3.12l12.48 7.32c.2.11.46-.03.46-.26V28.5a.3.3 0 00-.15-.25l-14.16-8.09z\"/><path fill=\"#FFE081\" d=\"M19.14 16.05a.07.07 0 00-.07-.05.07.07 0 00-.07.07v3.36c0 2.52 4.03 4.57 9 4.57s9-2.05 9-4.57v-3.36a.07.07 0 00-.07-.07.07.07 0 00-.07.05C36.1 18.3 32.43 20 28 20s-8.1-1.7-8.86-3.95z\"/><ellipse cx=\"28\" cy=\"16.5\" fill=\"#fff\" rx=\"9\" ry=\"4.5\"/></svg>\r\n              </div>\r\n              <div>\r\n                <h3 class=\"box\">Common Device Features</h3>\r\n                <p class=\"p2 box\">Everything you need to deliver the core functionality your users expect, from essentials like camera and geolocation, to payments and splash screen.</p>\r\n              </div>\r\n            </article>\r\n            <article class=\"flex box\">\r\n              <div>\r\n                <svg class=\"box\" xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 56 56\"><defs/><rect width=\"56\" height=\"56\" fill=\"#fff\" rx=\"28\"/><path fill=\"#FED352\" d=\"M40.57 12h-16a3.43 3.43 0 00-3.43 3.43V30c0 .16.13.29.29.29h9.9a4.63 4.63 0 014.71 4.51c.09 2.92.36 4.84.89 6.22.6 1.6 1.93 2.6 3.39 2.6 2.54 0 3.68-1.9 3.68-4.2V15.44c0-1.9-1.54-3.43-3.43-3.43z\"/><path fill=\"#fff\" d=\"M37.7 17.71H27.3c-.72 0-1.3.52-1.3 1.15 0 .63.58 1.14 1.3 1.14h10.4c.72 0 1.3-.51 1.3-1.14 0-.63-.58-1.15-1.3-1.15z\"/><path fill=\"#fff\" d=\"M37.84 23.43h-10.4c-.72 0-1.3.51-1.3 1.14 0 .63.58 1.14 1.3 1.14h10.4c.72 0 1.3-.5 1.3-1.14 0-.63-.58-1.14-1.3-1.14z\" opacity=\".8\"/><path fill=\"#fff\" d=\"M37.84 29h-10.4c-.72 0-1.3.51-1.3 1.14 0 .63.58 1.15 1.3 1.15h10.4c.72 0 1.3-.52 1.3-1.15 0-.63-.58-1.14-1.3-1.14z\" opacity=\".6\"/><path fill=\"#fff\" d=\"M37.84 35h-10.4c-.72 0-1.3.51-1.3 1.14 0 .63.58 1.15 1.3 1.15h10.4c.72 0 1.3-.52 1.3-1.15 0-.63-.58-1.14-1.3-1.14z\" opacity=\".4\"/><path fill=\"#FED352\" d=\"M35.45 43.11c-.27-.39-.49-.81-.66-1.27-.63-1.65-.94-3.74-1.03-6.98a2.35 2.35 0 00-2.36-2.29H14.3a2.3 2.3 0 00-2.29 2.3c0 3.6.41 5.1 1.03 6.25C14.1 43.06 16 44 18.86 44h16.11c.46 0 .73-.5.48-.89z\"/><defs><linearGradient id=\"sla_paint0_linear\" x1=\"32.57\" x2=\"32.57\" y1=\"12\" y2=\"43.62\" gradientUnits=\"userSpaceOnUse\"><stop offset=\".21\" stop-color=\"#FFDC72\"/><stop offset=\".77\" stop-color=\"#FFC928\"/><stop offset=\"1\" stop-color=\"#F7C03C\"/></linearGradient><linearGradient id=\"sla_paint1_linear\" x1=\"23.77\" x2=\"23.77\" y1=\"32.57\" y2=\"44\" gradientUnits=\"userSpaceOnUse\"><stop offset=\".15\" stop-color=\"#FED352\"/><stop offset=\"1\" stop-color=\"#E4B035\"/></linearGradient></defs></svg>\r\n              </div>\r\n              <div>\r\n                <h3 class=\"box\">Guaranteed SLA</h3>\r\n                <p class=\"p2 box\">Timely support and troubleshooting when you need it most. Get expert help directly from the Ionic team with guaranteed response times.</p>\r\n              </div>\r\n            </article>\r\n            <article class=\"flex box\">\r\n              <div>\r\n                <svg class=\"box\" xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 56 56\"><defs/><rect width=\"56\" height=\"56\" fill=\"#fff\" rx=\"28\"/><path fill=\"#FFE081\" d=\"M15 22h26v18H15z\" opacity=\".3\"/><path fill=\"#FED352\" fill-rule=\"evenodd\" d=\"M18.02 18.05c-1.09 0-1.97.88-1.97 1.96v17.97c0 1.09.88 1.97 1.97 1.97h19.96c1.09 0 1.97-.88 1.97-1.97V20.02c0-1.1-.88-1.97-1.97-1.97H18.02zM14 20C14 17.8 15.8 16 18.02 16h19.96C40.2 16 42 17.8 42 20.02v17.96C42 40.2 40.2 42 37.98 42H18.02A4.02 4.02 0 0114 37.98V20.02z\" clip-rule=\"evenodd\"/><path fill=\"#FED352\" d=\"M36.85 17.02h-17.7a4.17 4.17 0 00-4.13 4.2V25h1c0-1 1-2 2-2h19.96c1 0 2 1 2 2h1v-3.8c0-2.3-1.86-4.19-4.13-4.19z\"/><path fill=\"#FED352\" fill-rule=\"evenodd\" d=\"M20.02 14c.56 0 1.02.46 1.02 1.02v2a1.02 1.02 0 01-2.05 0v-2c0-.56.46-1.02 1.03-1.02z\" clip-rule=\"evenodd\"/><path fill=\"#FED352\" fill-rule=\"evenodd\" d=\"M35.98 14c.57 0 1.03.46 1.03 1.02v2a1.02 1.02 0 11-2.05 0v-2c0-.56.46-1.02 1.02-1.02z\" clip-rule=\"evenodd\"/><path fill=\"#FED352\" d=\"M30.5 28a1.5 1.5 0 100-3 1.5 1.5 0 000 3z\"/><path fill=\"#E4B035\" d=\"M35.5 28a1.5 1.5 0 100-3 1.5 1.5 0 000 3z\"/><path fill=\"#FED352\" d=\"M30.5 33a1.5 1.5 0 100-3 1.5 1.5 0 000 3zM35.5 33a1.5 1.5 0 100-3 1.5 1.5 0 000 3zM20.5 33a1.5 1.5 0 100-3 1.5 1.5 0 000 3z\"/><path fill=\"#E4B035\" d=\"M25.5 33a1.5 1.5 0 100-3 1.5 1.5 0 000 3zM20.5 38a1.5 1.5 0 100-3 1.5 1.5 0 000 3z\"/><path fill=\"#FED352\" d=\"M25.5 38a1.5 1.5 0 100-3 1.5 1.5 0 000 3z\"/><path fill=\"#E4B035\" d=\"M30.5 38a1.5 1.5 0 100-3 1.5 1.5 0 000 3z\"/><defs><linearGradient id=\"support_paint0_linear\" x1=\"28\" x2=\"28\" y1=\"14\" y2=\"42\" gradientUnits=\"userSpaceOnUse\"><stop stop-color=\"#FFD861\"/><stop offset=\"1\" stop-color=\"#FFC438\"/></linearGradient><linearGradient id=\"support_paint1_linear\" x1=\"28\" x2=\"28\" y1=\"14\" y2=\"42\" gradientUnits=\"userSpaceOnUse\"><stop stop-color=\"#FFD861\"/><stop offset=\"1\" stop-color=\"#FFC438\"/></linearGradient><linearGradient id=\"support_paint2_linear\" x1=\"28\" x2=\"28\" y1=\"14\" y2=\"42\" gradientUnits=\"userSpaceOnUse\"><stop stop-color=\"#FFD861\"/><stop offset=\"1\" stop-color=\"#FFC438\"/></linearGradient><linearGradient id=\"support_paint3_linear\" x1=\"28\" x2=\"28\" y1=\"14\" y2=\"42\" gradientUnits=\"userSpaceOnUse\"><stop stop-color=\"#FFD861\"/><stop offset=\"1\" stop-color=\"#FFC438\"/></linearGradient></defs></svg>\r\n              </div>\r\n              <div>\r\n                <h3 class=\"box\">Regular Release Cycles</h3>\r\n                <p class=\"p2 box\">A release timeline you can count on, as opposed to a community maintainers schedule. Think days instead of months or years.</p>\r\n              </div>\r\n            </article>\r\n            <article class=\"flex box\">\r\n              <div>\r\n                <svg class=\"box\" xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 56 56\"><defs/><circle cx=\"28\" cy=\"28\" r=\"28\" fill=\"#fff\"/><path fill=\"#FED352\" d=\"M29.04 14.63a2.15 2.15 0 00-2.1-.05c-2.38 1.27-8.29 4.24-12.95 4.98-1.1.18-2 1.08-1.94 2.18.9 16 12.3 22.52 15.25 23.95.45.21.95.21 1.4 0 2.97-1.38 14.37-7.73 15.25-23.95.06-1.1-.85-2-1.94-2.14-5.18-.67-10.72-3.65-12.97-4.97z\"/><path fill=\"#E4B035\" d=\"M28 14.3c-.33-.01-.65.06-.95.22-2.33 1.25-8.5 4.38-13.28 5.08-.97.14-1.77.93-1.73 1.91.8 16.32 12.5 22.86 15.34 24.21.2.1.41.15.62.15V14.3z\" opacity=\".8\"/><path stroke=\"#fff\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M22 30.07L25.48 34 34 23\"/></svg>\r\n              </div>\r\n              <div>\r\n                <h3 class=\"box\">Critical Security Updates & Fixes</h3>\r\n                <p class=\"p2 box\">Keep your users protected with ongoing security updates and fixes that keep pace with OS releases, patches, and known vulnerabilities.</p>\r\n              </div>\r\n            </article>\r\n            <article class=\"flex box\">\r\n              <div>\r\n                <svg class=\"box\" xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 56 56\"><defs/><circle cx=\"28\" cy=\"28\" r=\"28\" fill=\"#fff\"/><path fill=\"#E9B73B\" d=\"M14.76 32.72c4.52 5.27 5.36 6.97 5.24 8.94-.07 1.23.77 2.34 2.01 2.34h8.64c.86 0 1.63-.54 1.85-1.37.16-.6.27-1.15.44-1.9a2 2 0 011.88-1.53c1.59-.08 3.16-.38 4.58-1.73 1.57-1.5-.43-8.22 0-8.32 1.6-.37 4.34-.63 3.95-2.26a1.32 1.32 0 00-.23-.45c-1.56-2.2-6.31-9.45-7.6-10.95-4.88-4.75-11-4.15-16.49-1.18-5.16 2.78-10.38 11.28-4.27 18.4z\"/><path fill=\"#FED352\" d=\"M22.56 35.96c0 .55.49 1.04 1.13 1.04h4.94c.64 0 1.13-.49 1.13-1.04v-.94h-7.2v.94zM26.16 17c-4.48 0-8.1 3.12-8.1 6.98a6.79 6.79 0 003.46 5.76V32c0 .55.52 1 1.16 1h6.96c.64 0 1.16-.45 1.16-1v-2.26a6.78 6.78 0 003.45-5.76c0-3.86-3.61-6.98-8.09-6.98z\"/><path stroke=\"#fff\" d=\"M24.47 31.44v-9.83c-1.84-.63-3.6.86-2.68 2.7.84 1.67 6.7 1.67 7.53 0 1.06-2.1-.84-3.33-2.34-2.7v9.83\"/></svg>\r\n              </div>\r\n              <div>\r\n                <h3 class=\"box\">Guidance & Expertise</h3>\r\n                <p class=\"p2 box\">Ensure your team is utilizing best practices when adding native functionality, helping you to meet your deadlines while avoiding costly tech debt.</p>\r\n              </div>\r\n            </article>  \r\n          </div>\r\n        </div>\r\n      </div>\r\n    </section>\r\n  </div>\r\n</main>\r\n\r\n<aside id=\"get-started\" class=\"container box\">\r\n  <div class=\"get-started center hubspot-override hubspot-override--large hubspot-override--measure\">\r\n    <hgroup class=\"content\">\r\n      <div class=\"superTitle center:txt\">Get started with</div>\r\n      <h2 class=\"center:txt\">Ionic Native Enterprise Edition</h2>\r\n    </hgroup>\r\n    <!--[if lte IE 8]>\r\n    <script charset=\"utf-8\"\r\n            type=\"text/javascript\"\r\n            src=\"//js.hsforms.net/forms/v2-legacy.js\"></script>\r\n    <![endif]-->\r\n    <script charset=\"utf-8\" type=\"text/javascript\" src=\"//js.hsforms.net/forms/v2.js\"></script>\r\n    <script>\r\n      hbspt.forms.create({\r\n        portalId: \"3776657\",\r\n        formId: \"71dde981-12c6-45e2-94c8-acbdecd67aaf\",\r\n        css: \"\"\r\n      });\r\n    </script>\r\n  </div>\r\n</aside>\r\n\r\n<section class=\"resources\">\r\n  <div class=\"container\">\r\n    <additional-resources page=\"native\"></additional-resources>\r\n  </div>\r\n</section>\r\n\r\n{% include '_includes/promos/newsletter-signup.html' %}\r\n<div class=\"modal collapse fade modal--form\"\r\n     id=\"modal-data-sheet\"\r\n     tabindex=\"-1\"\r\n     role=\"dialog\"\r\n     aria-labelledby=\"promo--ionic-for-enterprise\">\r\n  <div class=\"modal-dialog\" role=\"document\">\r\n    <div class=\"modal-content\">\r\n      <div class=\"modal-body form hubspot-override hubspot-override--large\">\r\n        <button type=\"button\"\r\n                class=\"close\"\r\n                data-dismiss=\"modal\"\r\n                aria-label=\"Close\">\r\n          <span aria-hidden=\"true\">&times;</span>\r\n        </button>\r\n        <hgroup class=\"hero text-center\">\r\n          <h2>Building Cross-Platform  Apps with Capacitor</h2>\r\n          <p class=\"lg\">Fill out the form below to download our free whitepaper</p>\r\n        </hgroup>\r\n        <!--[if lte IE 8]>\r\n        <script charset=\"utf-8\"\r\n                type=\"text/javascript\"\r\n                src=\"//js.hsforms.net/forms/v2-legacy.js\"></script>\r\n        <![endif]-->\r\n        <script charset=\"utf-8\"\r\n                type=\"text/javascript\"\r\n                src=\"//js.hsforms.net/forms/v2.js\"></script>\r\n        <script>\r\n          hbspt.forms.create({\r\n            portalId: \"3776657\",\r\n          \tformId: \"9151dc0b-42d9-479f-b7b8-649e0e7bd1bc\",\r\n            css: \"\"\r\n          });\r\n        </script>\r\n      </div>\r\n    </div>\r\n  </div>\r\n</div>\r\n{% endblock %}\r\n\r\n{% block scripts %}\r\n<script>\r\n  $('body').scrollspy({ target: '#sticky-bar', offset: 250 })\r\n</script>\r\n{% endblock %}"
  },
  {
    "path": "server/pages/pro/contact.html",
    "content": "{% extends '_layouts/base.html' %}\n{% set id = 'products-contact' %}\n{% set mixpanelEnabled = true %}\n{% set bodyController = \"ProductsPageCtrl\" %}\n\n{% block header_style %}transparent{% endblock %}\n\n{% block body_attributes %}\n  data-spy=\"scroll\"\n  data-target=\"#platform-nav\"\n  data-offset=\"100\"\n{% endblock %}\n\n{% block main %}\n\n<div class=\"cta gradient product-contact-cta\">\n  <hgroup class=\"container\">\n    <h1>Thanks for your interest!</h1>\n    <!--<p>\n      We'd love to learn more about you and your teams needs. <strong>Have some time to chat?</strong>\n    </p>-->\n  </hgroup>\n</div>\n\n<main>\n  <div class=\"pricing-survey\">\n    <form id=\"pricingInterestedForm\" ng-controller=\"PricingFormCtrl\">\n\n      <div ng-show=\"section==1\">\n\n        <!--<img src=\"/img/pro/mattkremer.jpg\" class=\"matt-picture\" />-->\n\n        <div class=\"matt-talking\">\n          <!-- <p>Hey there,</p> -->\n\n          <p>\n            Thanks for showing interest in what we have to offer. We're\n            currently evaluating this package, and would love to <i>reach\n            out to you to talk about your exact needs after learning a\n            little more about you</i>.\n          </p>\n\n          <p>Fill out this survey and we'll be in touch!</p>\n\n          <!-- <p>Thanks,<br />Matt</p> -->\n\n          <!-- <img src=\"/img/pro/signature.png\" class=\"matt-signature\" /> -->\n        </div>\n\n        <div class=\"form-group small-form\">\n          <label for=\"name\" class=\"control-label\">\n            Name\n          </label>\n          <input type=\"text\"\n                 class=\"form-control\"\n                 id=\"name\"\n                 name=\"name\"\n                 ng-model=\"form.name\">\n        </div>\n\n        <div class=\"form-group small-form\">\n          <label for=\"email\" class=\"control-label\">\n            Email\n          </label>\n          <input type=\"email\"\n                 class=\"form-control\"\n                 id=\"email\"\n                 name=\"email\"\n                 ng-model=\"form.email\"\n                 ng-enter=\"nextSection(form)\">\n        </div>\n      </div>\n\n      <div ng-show=\"section==2\">\n\n        <!-- <img src=\"/img/pro/mattkremer.jpg\" class=\"matt-picture-small\" /> -->\n\n        <div class=\"matt-talking one-line\">\n          <p>How did you feel about the offering?</p>\n        </div>\n\n        <div class=\"form-group\">\n          <label for=\"would-this-offering\" class=\"control-label\">\n            Would this offering solve any problems you currently have?\n          </label><br>\n          <label class=\"radio-inline\">\n            <input type=\"radio\"\n                   name=\"solve_problems\"\n                   id=\"solve_problems_yes\"\n                   ng-value=\"true\"\n                   ng-model=\"form.solve_problems\"> Yes\n          </label>\n          <label class=\"radio-inline\">\n            <input type=\"radio\"\n                   name=\"solve_problems\"\n                   id=\"solve_problems_no\"\n                   ng-value=\"false\"\n                   ng-model=\"form.solve_problems\"> No\n          </label>\n        </div>\n        <div class=\"form-group\">\n        <label class=\"control-label\">\n          Is there anything in this offering you wouldn't use?\n        </label><br>\n        <label class=\"checkbox-inline\">\n          <input type=\"checkbox\"\n                 value=\"unused_features_creator\"\n                 name=\"unused_features_creator\"\n                 ng-model=\"form.unused_features.creator\">\n          Prototyping\n        </label>\n        <label class=\"checkbox-inline\">\n          <input type=\"checkbox\"\n                 value=\"unused_features_view\"\n                 ng-model=\"form.unused_features.view\">\n          Device Preview/Testing\n        </label>\n        <br>\n        <label class=\"checkbox-inline\">\n          <input type=\"checkbox\"\n                 value=\"unused_features_deploy\"\n                 name=\"unused_features_deploy\"\n                 ng-model=\"form.unused_features.deploy\">\n          Live Updates\n        </label>\n        <label class=\"checkbox-inline\">\n          <input type=\"checkbox\"\n                 value=\"unused_features_package\"\n                 name=\"unused_features_package\"\n                 ng-model=\"form.unused_features.package\">\n          Cloud Builds\n        </label>\n      </div>\n\n      <!--<div class=\"form-group\">\n        <label class=\"control-label\">\n          Is there anything missing from this offering that would prevent\n          you from buying it?\n        </label><br>\n        <label class=\"radio-inline\">\n          <input type=\"radio\"\n                 name=\"missing_purchase\"\n                 id=\"missing_purchase_yes\"\n                 ng-value=\"true\"\n                 ng-model=\"form.missing_purchase\"> Yes\n        </label>\n        <label class=\"radio-inline\">\n          <input type=\"radio\"\n                 name=\"missing_purchase\"\n                 id=\"missing_purchase_no\"\n                 ng-value=\"false\"\n                 ng-model=\"form.missing_purchase\"> No\n        </label>\n      </div>-->\n\n      <div class=\"form-group\">\n        <label class=\"control-label\">\n          Is there anything missing in this offering that is critical to\n          your workflow?\n        </label><br>\n        <label class=\"radio-inline\">\n          <input type=\"radio\"\n                 name=\"missing_workflow\"\n                 id=\"missing_workflow_yes\"\n                 ng-value=\"true\"\n                 ng-model=\"form.missing_workflow\"> Yes\n        </label>\n        <label class=\"radio-inline\">\n          <input type=\"radio\"\n                 name=\"missing_workflow\"\n                 id=\"missing_workflow_no\"\n                 ng-value=\"false\"\n                 ng-model=\"form.missing_workflow\"> No\n        </label>\n      </div>\n      </div>\n\n      <div ng-show=\"section==3\">\n\n        <!-- <img src=\"/img/pro/mattkremer.jpg\" class=\"matt-picture-small\" /> -->\n\n        <div class=\"matt-talking one-line\">\n          <p>Great, now how about the price?</p>\n        </div>\n\n        <div class=\"form-group\">\n          <label for=\"if-this-package\" class=\"control-label\">\n            If this package was Ionic’s only offering, and existed today for\n            $1999/user/year, would you buy it?\n          </label><br>\n          <label class=\"radio-inline\">\n            <input type=\"radio\"\n                   name=\"would_buy\"\n                   id=\"would_buy_yes\"\n                   ng-value=\"true\"\n                   ng-model=\"form.would_buy\"> Yes\n          </label>\n          <label class=\"radio-inline\">\n            <input type=\"radio\"\n                   name=\"would_buy\"\n                   id=\"would_buy_no\"\n                   ng-value=\"false\"\n                   ng-model=\"form.would_buy\"> No\n          </label>\n        </div>\n        <div class=\"form-group\">\n          <label for=\"price\" class=\"control-label\">Is the offering presented</label>\n          <select id=\"price\"\n                  name=\"price\"\n                  class=\"form-control\"\n                  ng-model=\"form.price\">\n            <option value=\"null\" disabled selected></option>\n            <option value=\"inexpensive\">Inexpensive</option>\n            <option value=\"fair\">Fair</option>\n            <option value=\"expensive\">Expensive</option>\n            <option value=\"prohibitively expensive\">Prohibitively expensive</option>\n          </select>\n        </div>\n\n        <div class=\"form-group\">\n          <label for=\"expensive_point\" class=\"control-label\">\n            At what price point does this offering become prohibitively\n            expensive?\n          </label>\n          <input type=\"number\"\n                 class=\"form-control\"\n                 id=\"expensive_point\"\n                 name=\"expensive_point\"\n                 ng-model=\"form.expensive_point\">\n        </div>\n      </div>\n\n      <div ng-show=\"section==4\">\n        <!-- <img src=\"/img/pro/mattkremer.jpg\" class=\"matt-picture-small\" /> -->\n\n        <div class=\"matt-talking one-line\">\n          <p>Just some final basic questions:</p>\n        </div>\n\n        <div class=\"form-group\">\n          <label for=\"company_size\" class=\"control-label\">Company Size</label>\n          <select id=\"company_size\"\n                  name=\"company_size\"\n                  class=\"form-control\"\n                  ng-model=\"form.company_size\">\n            <option ng-value=\"null\" disabled selected></option>\n            <option ng-value=\"1\">Self Employed</option>\n            <option ng-value=\"10\">2-10</option>\n            <option ng-value=\"50\">11-50</option>\n            <option ng-value=\"500\">51-500</option>\n            <option ng-value=\"1000\">500+</option>\n          </select>\n        </div>\n\n        <div class=\"form-group\">\n          <label for=\"have-you-ever\" class=\"control-label\">\n            Have you ever used Ionic Creator or Ionic Cloud?\n          </label><br>\n          <label class=\"radio-inline\">\n            <input type=\"radio\"\n                   name=\"used_services\"\n                   id=\"used_services_yes\"\n                   ng-value=\"true\"\n                   ng-model=\"form.used_services\"> Yes\n          </label>\n          <label class=\"radio-inline\">\n            <input type=\"radio\"\n                   name=\"used_services\"\n                   id=\"used_services_no\"\n                   ng-value=\"false\"\n                   ng-model=\"form.used_services\"> No\n          </label>\n        </div>\n      </div>\n\n      <div ng-show=\"section==5\">\n        <div class=\"matt-talking one-line\">\n          <p>Thank you so much for your time, we'll reach out soon!</p>\n        </div>\n      </div>\n\n      <div class=\"button-container\">\n        <button type=\"button\"\n                class=\"btn btn-primary\"\n                ng-show=\"section!==5\"\n                ng-click=\"nextSection(form)\">\n          <span ng-show=\"section==4\">Submit</span>\n          <span ng-show=\"section!=4\">Next</span>\n        </button>\n      </div>\n\n    </form>\n  </div>\n\n</main>\n{% endblock %}\n\n{% block scripts %}\n<div class=\"modal fade pricing-survey\"\n     id=\"myModal\"\n     tabindex=\"-1\"\n     role=\"dialog\"\n     aria-labelledby=\"myModalLabel\"\n     ng-controller=\"PricingFormCtrl\">\n  <div class=\"modal-dialog\" role=\"document\">\n    <div class=\"modal-content\">\n      <div class=\"modal-header\">\n        <button type=\"button\"\n                class=\"close\"\n                data-dismiss=\"modal\"\n                aria-label=\"Close\"\n                id=\"modal-close\"\n                onclick=\"c('Pricing','FormClose')\"></button>\n        <h2 ng-show=\"section==1\" class=\"modal-title\">Let's talk</h2>\n        <h2 ng-show=\"section!=1 && section!=5\" class=\"modal-title\">Got it, thanks!</h2>\n        <h2 ng-show=\"section==5\" class=\"modal-title\">That's it!</h2>\n        <!--<p>\n          We're currently evaluating this product and would love your feedback\n        </p>-->\n\n      </div>\n      <div class=\"modal-body\">\n\n      </div>\n      <div class=\"modal-footer\">\n        <button type=\"button\"\n                class=\"btn btn-primary\"\n                ng-show=\"section!==5\"\n                ng-click=\"nextSection(form)\">\n          <span ng-show=\"section==4\">Submit</span>\n          <span ng-show=\"section!=4\">Next</span>\n        </button>\n        <button type=\"button\"\n                class=\"btn white\"\n                ng-show=\"section==5\"\n                data-dismiss=\"modal\"\n                aria-label=\"Close\"\n                onclick=\"c('Pricing','FormClose: Complete')\">Close\n        </button>\n      </div>\n    </div>\n  </div>\n</div>\n\n<script src=\"https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.6.8/angular.min.js\"></script>\n<script src=\"https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.6.8/angular-animate.min.js\"></script>\n<script src=\"https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.6.8/angular-cookies.min.js\"></script>\n<script src=\"https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.6.8/angular-sanitize.min.js\"></script>\n<script>\nvar IonicSiteModule = angular.module('IonicSite',\n  ['ngAnimate', 'ngSanitize', 'ngCookies']);\n\nIonicSiteModule\n.service('ionicMetrics', ['$cookies', '$http', function($cookies, $http) {\n  this.track = function(eventName, metricName) {\n    // in-house funnel metrics\n    var guid = $cookies.get('ionic-metrics');\n    if (!guid) {\n      guid = window.guid();\n      $cookies.put('ionic-metrics', guid);\n    }\n    metricName = metricName ? metricName : 'ionic_site_products_funnel';\n    var now = new Date();\n    return $http.post('https://api.ionicjs.com/events/metrics', {\n      metrics: [{\n        name: metricName,\n        timestamp: now.toISOString(),\n        session_id: guid,\n        value: {\n          event: eventName\n        }\n      }],\n      sent_at: now.toISOString()\n    })\n  }\n}])\n.controller('PricingFormCtrl', ['$scope', '$http', '$timeout',\n  function($scope, $http, $timeout) {\n\n  $scope.section = 1;\n  $scope.form = {};\n\n  $scope.nextSection = function(form) {\n    $scope.section++;\n    if ($scope.section == 3) {\n      $scope.section++;\n    }\n    $scope.submit(form);\n  };\n\n  $scope.submit = function(form) {\n    window.c('Pricing', 'FormStep', null, $scope.section);\n    $(':focus').blur();\n    console.info('SUBMITTING FORM');\n    var cleanForm = {\n      table: 'nick_sdlc_030917',\n      data: JSON.parse(JSON.stringify(form))\n    };\n\n    if (form.unused_features) {\n      cleanForm.data.unused_features = Object.keys(form.unused_features)\n                                             .join(', ');\n    }\n\n    function trackMixpanel() {\n      var step_descs = ['emailname', 'important', 'lesser'];\n      mixpanel.track('Survey Checkpoint', {'test': 'ProductsTest - 5', 'step_desc': step_descs[$scope.section-2], 'step_order': $scope.section-1});\n      if ($scope.section == 4) {\n        mixpanel.track('Survey Finished', {'test': 'ProductsTest - 5'});\n      }\n    }\n\n    if (form.uuid) {\n      $http.patch('https://apps.ionic.io/api/discovery/' + form.uuid, cleanForm).then(function(resp) {\n\n        trackMixpanel();\n\n        if ($scope.section == 4) {\n          // We're done with the form!!\n          $scope.form = {};\n          window.c('Pricing', 'FormSubmit');\n        } else {\n          // We're NOT done yet.\n        }\n      }).catch(function(err) {\n        window.c('Pricing', 'FormError');\n        console.error('Unable to save survey', err);\n      });\n    } else {\n      if (!cleanForm.data.email) {\n        alert('Please enter your email');\n        return $scope.section--;\n      }\n      $http.post('https://apps.ionic.io/api/discovery', cleanForm).then(function(resp) {\n\n        trackMixpanel();\n\n        // We've only filled out Name & Email so far. Store the UUID for updating next time.\n        form.uuid = resp.data.uuid;\n\n        window.c('Pricing', 'FormSuccess');\n        console.info('RESP', resp);\n\n      }).catch(function(err) {\n        window.c('Pricing', 'FormError');\n        console.error('Unable to save survey', err);\n      });\n    }\n\n  };\n}])\n.controller('ProductsPageCtrl', ['$scope', '$timeout', 'ionicMetrics',\n  function($scope, $timeout, ionicMetrics) {\n\n  mixpanel.track('Products Page Load', {'test': 'ProductsTest - 5'});\n  ionicMetrics.track('Products Page Load');\n\n  $scope.gotoPricing = function(location) {\n    mixpanel.track('Pricing Button Click',\n      {'test': 'ProductsTest - 5', 'location': location});\n    $timeout(function() {\n      window.location = '/pro/pricing';\n    }, 5);\n  };\n\n  $scope.gotoGettingStarted = function() {\n    mixpanel.track('Community - Getting Started Click',\n      {'test': 'ProductsTest - 5'});\n    $timeout(function() {\n      window.location = '/getting-started';\n    }, 5);\n  };\n\n  $scope.trackOpenSurvey = function() {\n    mixpanel.track('Professional - Im Interested Click',\n      {'test': 'ProductsTest - 5'});\n    c('Pricing', 'FormOpen');\n  };\n\n}]);\n\nvar $form = document.querySelector('#pricingInterestedForm');\n$form.addEventListener('change', function(e) {\n  var $t = e['target'];\n  window.c('Pricing',\n           'FormFieldChange: ' + $t.getAttribute('name'),\n           null,\n           $t.getAttribute('value'));\n});\n</script>\n{% endblock %}\n"
  },
  {
    "path": "server/pages/react.html",
    "content": "{% extends '_layouts/blank.html' %}\n{% set id = 'react' %}\n{% set header_style = 'transparent' %}\n{% set cssPath = 'react' %}\n{% set cssVersion = 3 %}\n{% set title = 'Build Native and Progressive Web Apps with React and Ionic' %}\n{% set meta_image = 'https://ionicframework.com/img/meta/ionic-react-og.png'%}\n{% set meta_description = 'Cross-platform development with React and Ionic Framework' %}\n{% set hide_pre_header = true %}\n\n{% block main %}\n<header>\n  <a href=\"/\" class=\"back-button\">\n    <ion-icon name=\"ios-arrow-back\"></ion-icon>\n    Ionic Home\n  </a>\n\n  <hgroup class=\"container\">\n    <img src=\"/img/react/logo.png\" alt=\"Ionic Logo\" class=\"logo\" />\n    <h1>Build Native and Progressive Web Apps from a single code base with Ionic React.</h1>\n    <a href=\"#start\" id=\"ionic-react-get-started-cta\" class=\"btn anchor get-started\">Get Started</a>\n    <a href=\"#demo\" id=\"ionic-react-live-demo-cta\" class=\"btn anchor live-demo\">Live Demo</a>\n    <a href=\"https://ionic-react-demo.stackblitz.io/\" id=\"ionic-react-live-demo-mobile-cta\" target=\"_blank\" class=\"btn anchor live-demo live-demo-mobile\">Live Demo</a>\n  </hgroup>\n</header>\n\n<nav id=\"sticky-bar\">\n  <ul class=\"container nav\" role=\"tablist\">\n    <li><a class=\"anchor\" data-offset=\"150\" href=\"#components\">UI Components</a></li>\n    <li><a class=\"anchor\" data-offset=\"150\" href=\"#demo\">Demo</a></li>\n    <li><a class=\"anchor\" data-offset=\"150\" href=\"#native\">Native</a></li>\n    <li><a class=\"anchor\" data-offset=\"150\" href=\"#samples\">Sample Apps</a></li>\n    <li><a class=\"anchor\" data-offset=\"150\" href=\"#enterprise\">Enterprise</a></li>\n    <li><a class=\"anchor\" data-offset=\"150\" href=\"#vs-react-native\">vs. RN</a></li>\n    <li><a class=\"anchor\" data-offset=\"150\" href=\"#start\">Get Started</a></li>\n  </ul>\n</nav>\n\n<main>\n  <section class=\"left\">\n    <div class=\"container grid grid-cols-2\" id=\"components\">\n      <hgroup>\n        <h2>100+ Beautiful React Components</h2>\n        <p>\n          React-optimized mobile and web components for building blazing fast mobile, web, and desktop apps.\n          Ionic React comes with more out-of-the-box controls than native, accelerating custom app design.\n        </p>\n        <ul id=\"components-list\">\n          <li data-tab=\"card\">\n            <div class=\"icon\">\n              <svg width=\"30\" height=\"26\" viewBox=\"0 0 30 26\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n                <rect x=\"1\" y=\"1\" width=\"28\" height=\"24\" rx=\"4\" stroke=\"black\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n                <path d=\"M7 7H15\" stroke=\"black\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n                <path d=\"M7 11H21\" stroke=\"black\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n              </svg>\n            </div>\n            <div class=\"title\">Cards<div class=\"progress\"></div></div>\n          </li>\n          <li data-tab=\"lists\">\n            <div class=\"icon\">\n              <svg width=\"32\" height=\"22\" viewBox=\"0 0 32 22\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n                <path d=\"M8.5 20H31\" stroke=\"black\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n                <path d=\"M2 19C2.55228 19 3 19.4477 3 20C3 20.5523 2.55228 21 2 21C1.44772 21 1 20.5523 1 20C1 19.4477 1.44772 19 2 19Z\" stroke=\"black\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n                <path d=\"M8.5 11H31\" stroke=\"black\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n                <path d=\"M2 10C2.55228 10 3 10.4477 3 11C3 11.5523 2.55228 12 2 12C1.44772 12 1 11.5523 1 11C1 10.4477 1.44772 10 2 10Z\" stroke=\"black\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n                <path d=\"M8.5 2H31\" stroke=\"black\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n                <path d=\"M2 1C2.55228 1 3 1.44772 3 2C3 2.55228 2.55228 3 2 3C1.44772 3 1 2.55228 1 2C1 1.44772 1.44772 1 2 1Z\" stroke=\"black\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n              </svg>\n            </div>\n            <div class=\"title\">Lists<div class=\"progress\"></div></div>\n          </li>\n          <li data-tab=\"actionSheet\">\n            <div class=\"icon\">\n              <svg width=\"30\" height=\"26\" viewBox=\"0 0 30 26\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n                <path d=\"M1 1V19C1 22.3137 3.68629 25 7 25H23C26.3137 25 29 22.3137 29 19V1\" stroke=\"black\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n                <path d=\"M2 5H29\" stroke=\"black\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n                <path d=\"M6 10H14\" stroke=\"black\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n                <path d=\"M6 15H23\" stroke=\"black\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n                <path d=\"M6 20H19\" stroke=\"black\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n              </svg>\n            </div>\n            <div class=\"title\">Action Sheet<div class=\"progress\"></div></div>\n          </li>\n        </ul>\n        <a target=\"_blank\" href=\"https://ionicframework.com/docs/components\" class=\"more anchor\">Explore components <ion-icon name=\"ios-arrow-forward\"></ion-icon></a>\n      </hgroup>\n      <react-components></react-components>\n    </div>\n  </section>\n\n  <div>\n    <div class=\"container\" id=\"demo-info\">\n      <div class=\"grid grid-cols-2\">\n        <h2>\n          Music app demo.\n          <br />\n          Built on Ionic React.\n        </h2>\n        <p>\n          Try this demo Music App built with Ionic React following best practices.\n          <i>Note: App does not actually play music due to lack of legal public music APIs.</i>\n        </p>\n      </div>\n    </div>\n\n    <div id=\"demo\">\n      <iframe id=\"demo-frame\" src=\"https://stackblitz.com/edit/ionic-react-demo?embed=1&file=pages/Home.jsx\"></iframe>\n      <div id=\"demo-mobile\">\n        <a id=\"ionic-react-live-demo-try\" href=\"https://ionic-react-demo.stackblitz.io/\" target=\"_blank\" class=\"btn anchor live-demo live-demo-mobile\">Try it Now</a>\n      </div>\n    </div>\n  </div>\n\n  <section class=\"right\">\n    <div class=\"container\" id=\"native\">\n      <hgroup>\n        <h2>Build once, run natively on iOS, Android, Electron, and the Web</h2>\n        <p>\n          Ionic React apps use our <a href=\"https://capacitorjs.com/\" target=\"_blank\">Capacitor</a> project (not Cordova)\n          to unlock every native API across iOS, Android, Electron, and Web. \n        </p>\n        <ul id=\"native-list\">\n          <li data-tab=\"camera\">\n            <div class=\"icon\">\n              <svg width=\"30\" height=\"26\" viewBox=\"0 0 30 26\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n                <path d=\"M21.3633 4.951L19.5715 1.7965C19.1939 1.306 18.6763 1 18.0962 1H11.9038C11.3237 1 10.8061 1.306 10.4285 1.7965L8.63673 4.951C8.25913 5.44225 7.7725 5.8 7.19231 5.8H3.15385C2.58261 5.8 2.03477 6.05286 1.63085 6.50294C1.22692 6.95303 1 7.56348 1 8.2V22.6C1 23.2365 1.22692 23.847 1.63085 24.2971C2.03477 24.7471 2.58261 25 3.15385 25H26.8462C27.4174 25 27.9652 24.7471 28.3692 24.2971C28.7731 23.847 29 23.2365 29 22.6V8.2C29 7.56348 28.7731 6.95303 28.3692 6.50294C27.9652 6.05286 27.4174 5.8 26.8462 5.8H22.875C22.2928 5.8 21.7409 5.44225 21.3633 4.951Z\" stroke=\"black\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n                <path d=\"M15 20C17.7614 20 20 17.7614 20 15C20 12.2386 17.7614 10 15 10C12.2386 10 10 12.2386 10 15C10 17.7614 12.2386 20 15 20Z\" stroke=\"black\" stroke-width=\"2\" stroke-miterlimit=\"10\"/>\n                <path d=\"M6.11467 5.2625V3.75H4.49928V5.2625\" stroke=\"black\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n              </svg>\n            </div>\n            <div class=\"title\">Camera<div class=\"progress\"></div></div>\n          </li>\n          <li data-tab=\"notifications\">\n            <div class=\"icon\">\n              <svg width=\"30\" height=\"30\" viewBox=\"0 0 30 30\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n                <path d=\"M27 13V23C27 26.3137 24.3137 29 21 29H7C3.68629 29 1 26.3137 1 23V9C1 5.68629 3.68629 3 7 3H17\" stroke=\"black\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n                <circle cx=\"25\" cy=\"5\" r=\"4\" transform=\"rotate(-180 25 5)\" stroke=\"black\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n              </svg>\n            </div>\n            <div class=\"title\">Notifications<div class=\"progress\"></div></div>\n          </li>\n          <li data-tab=\"geolocation\">\n            <div class=\"icon\">\n              <svg width=\"26\" height=\"34\" viewBox=\"0 0 26 34\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n                <path d=\"M13 1C6.375 1 1 5.72254 1 11.539C1 21 9 28.8375 11.9375 32.5008C12.0594 32.6554 12.2192 32.7813 12.4039 32.868C12.5886 32.9548 12.7928 33 13 33C13.2072 33 13.4115 32.9548 13.5961 32.868C13.7808 32.7813 13.9406 32.6554 14.0625 32.5008C17 28.8391 25 20.5556 25 11.539C25 5.72254 19.625 1 13 1Z\" stroke=\"black\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n                <path d=\"M13 16.4074C15.2091 16.4074 17 14.6166 17 12.4074C17 10.1983 15.2091 8.40742 13 8.40742C10.7909 8.40742 9 10.1983 9 12.4074C9 14.6166 10.7909 16.4074 13 16.4074Z\" stroke=\"black\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n              </svg>\n            </div>\n            <div class=\"title\">Geolocation<div class=\"progress\"></div></div>\n          </li>\n        </ul>\n      </hgroup>\n      <react-capacitor></react-capacitor>\n    </div>\n  </section>\n\n\n  <div class=\"container\" id=\"samples\">\n    <div class=\"grid grid-cols-2\">\n      <h2>Try an Ionic React sample app.</h2>\n      <p>\n        One of the best ways to get started and learn best practices is to explore a sample app.\n      </p>\n    </div>\n    <div class=\"features grid grid-cols-3\">\n      <div class=\"feature\">\n        <a href=\"https://stackblitz.com/edit/ionic-react-demo\" target=\"_blank\"><img loading=\"lazy\" width=\"616\" height=\"560\" src=\"/img/react/music-player-thumb.png\" /></a>\n        <h3><a href=\"https://stackblitz.com/edit/ionic-react-demo\" target=\"_blank\">Music Player</a></h3>\n        <p>\n          The demo available on this page is a simple demo of a music player app, tab-based navigation,\n          and basic user account features\n        </p>\n        <a class=\"try-it\" href=\"https://stackblitz.com/edit/ionic-react-demo\">Try it <ion-icon name=\"ios-arrow-forward\"></ion-icon></a>\n      </div>\n      <div class=\"feature\">\n        <a href=\"https://github.com/ionic-team/ionic-react-conference-app\" target=\"_blank\"><img loading=\"lazy\" width=\"616\" height=\"560\" src=\"/img/react/conference-app-thumb.png\" /></a>\n        <h3><a href=\"https://github.com/ionic-team/ionic-react-conference-app\" target=\"_blank\">Conference App</a></h3>\n        <p>\n          Ionic's fake conference app is a great example of an app combining both tabs and menu navigation\n        </p>\n        <a class=\"try-it\" href=\"https://github.com/ionic-team/ionic-react-conference-app\">Try it <ion-icon name=\"ios-arrow-forward\"></ion-icon></a>\n      </div>\n      <div class=\"feature\">\n        <a href=\"https://github.com/mhartington/StarTrack-react\" target=\"_blank\"><img loading=\"lazy\" width=\"616\" height=\"560\" src=\"/img/react/startracks-app-thumb.png\" /></a>\n        <h3><a href=\"https://github.com/mhartington/StarTrack-react\" target=\"_blank\">StarTrack</a></h3>\n        <p>\n          An Apple Music player demo that plays real music. Note: Must have an Apple Music account.\n        </p>\n        <a class=\"try-it\" href=\"https://github.com/mhartington/StarTrack-react\">Try it <ion-icon name=\"ios-arrow-forward\"></ion-icon></a>\n      </div>\n    </div>\n  </div>\n\n  <section class=\"right\">\n    <div class=\"container\" id=\"enterprise\">\n      <hgroup>\n        <h2>Ionic React for Enterprise.</h2>\n        <p>\n          Enterprise-ready integrations, tools, and expert support for your next mission-critical app project. \n          <br /><br />\n          Unlock powerful features like secure identity, encrypted offline storage, cloud builds, and real-time app updates.\n        </p>\n        <a class=\"btn ionic\" id=\"ionic-react-enterprise-cta\" href=\"https://ionicframework.com/enterprise\" target=\"_blank\">\n          Learn more\n        </a>\n      </hgroup>\n      <div class=\"graphics\">\n        <img src=\"/img/react/ionic-enterprise-img.png\"  loading=\"lazy\" width=\"1136\" height=\"1136\" alt=\"Ionic React for Enterprise\">\n      </div>\n    </div>\n  </section>\n\n  <div class=\"container\" id=\"vs-react-native\">\n    <div class=\"text-center\">\n      <hgroup>\n        <h2>Ionic React vs React Native</h2>\n        <p>\n          Ionic React is not a one-to-one alternative to <br />\n          React Native. In fact, there are some key differences.\n        </p>\n      </hgroup>\n    </div>\n    <div class=\"features grid grid-cols-4\">\n      <div class=\"feature\">\n        <div class=\"image\">\n          <svg width=\"56\" height=\"56\" viewBox=\"0 0 56 56\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n            <circle cx=\"28\" cy=\"28\" r=\"27\" stroke=\"#49B9FF\" stroke-width=\"2\"/>\n            <path d=\"M31.5652 28C31.5652 29.9868 29.969 31.5975 28 31.5975C26.031 31.5975 24.4348 29.9868 24.4348 28C24.4348 26.0131 26.031 24.4024 28 24.4024C29.969 24.4024 31.5652 26.0131 31.5652 28Z\" fill=\"#61DAFB\"/>\n            <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M28 14.4621C27.4155 13.8887 26.8332 13.3639 26.2578 12.892C24.7717 11.6733 23.2951 10.7769 21.9164 10.3268C20.5378 9.87676 19.1607 9.84625 18 10.5225C16.8393 11.1987 16.1769 12.4173 15.8739 13.8471C15.5708 15.277 15.6018 17.0155 15.9048 18.9235C16.0221 19.6623 16.1813 20.4336 16.3812 21.2311C15.5968 21.4551 14.8552 21.7016 14.1626 21.9685C12.3736 22.6578 10.8659 23.4999 9.79025 24.4797C8.7147 25.4594 8 26.6476 8 28C8 29.3524 8.7147 30.5406 9.79025 31.5203C10.8659 32.5001 12.3736 33.3422 14.1626 34.0315C14.8552 34.2984 15.5968 34.5449 16.3812 34.7689C16.1813 35.5664 16.0221 36.3377 15.9048 37.0765C15.6018 38.9845 15.5708 40.723 15.8739 42.1529C16.1769 43.5827 16.8393 44.8013 18 45.4775C19.1607 46.1537 20.5378 46.1232 21.9164 45.6732C23.2951 45.2231 24.7717 44.3267 26.2578 43.108C26.8332 42.6361 27.4155 42.1113 28 41.5379C28.5845 42.1113 29.1668 42.6361 29.7422 43.108C31.2283 44.3267 32.7049 45.2231 34.0836 45.6732C35.4622 46.1232 36.8393 46.1538 38 45.4775C39.1607 44.8013 39.8231 43.5827 40.1261 42.1529C40.4292 40.723 40.3982 38.9845 40.0952 37.0765C39.9779 36.3377 39.8187 35.5664 39.6188 34.7689C40.4032 34.5449 41.1448 34.2984 41.8374 34.0315C43.6264 33.3422 45.1341 32.5001 46.2097 31.5203C47.2853 30.5406 48 29.3524 48 28C48 26.6476 47.2853 25.4594 46.2097 24.4797C45.1341 23.4999 43.6264 22.6578 41.8374 21.9685C41.1448 21.7016 40.4032 21.4551 39.6188 21.2311C39.8187 20.4336 39.9779 19.6623 40.0952 18.9235C40.3982 17.0155 40.4292 15.277 40.1261 13.8471C39.8231 12.4173 39.1607 11.1987 38 10.5225C36.8393 9.84625 35.4622 9.87675 34.0836 10.3268C32.7049 10.7769 31.2283 11.6733 29.7422 12.892C29.1668 13.3639 28.5845 13.8887 28 14.4621ZM37.1304 12.0423C37.7165 12.3837 38.183 13.0702 38.4255 14.2141C38.6679 15.358 38.6613 16.8617 38.378 18.6459C38.2692 19.3314 38.1206 20.0513 37.9331 20.7994C36.2878 20.4236 34.4945 20.1394 32.5987 19.9625C31.4991 18.3943 30.3585 16.9693 29.2133 15.7194C29.7616 15.1815 30.3052 14.6917 30.8391 14.2539C32.2287 13.1142 33.516 12.3565 34.6189 11.9965C35.722 11.6364 36.5444 11.7008 37.1304 12.0423ZM26.7867 15.7194C26.2384 15.1815 25.6948 14.6917 25.1609 14.2539C23.7713 13.1142 22.484 12.3565 21.3811 11.9965C20.278 11.6364 19.4556 11.7008 18.8696 12.0423C18.2835 12.3837 17.817 13.0702 17.5745 14.2141C17.3321 15.358 17.3387 16.8617 17.622 18.6459C17.7308 19.3314 17.8794 20.0513 18.0669 20.7994C19.7122 20.4236 21.5055 20.1394 23.4013 19.9625C24.5009 18.3943 25.6415 16.9693 26.7867 15.7194ZM37.4575 22.4902C36.3343 22.237 35.1326 22.0269 33.8684 21.8669C34.2809 22.5175 34.6851 23.1878 35.0788 23.876C35.4726 24.5642 35.8458 25.2525 36.1979 25.9383C36.6926 24.7536 37.1132 23.5984 37.4575 22.4902ZM37.1975 28C37.9936 26.2549 38.6463 24.5457 39.1465 22.92C39.8822 23.1302 40.5743 23.3603 41.2171 23.608C42.89 24.2525 44.1839 24.9986 45.0444 25.7824C45.9049 26.5662 46.2609 27.3171 46.2609 28C46.2609 28.6829 45.9049 29.4338 45.0444 30.2176C44.1839 31.0014 42.89 31.7475 41.2171 32.392C40.5743 32.6397 39.8822 32.8698 39.1465 33.08C38.6463 31.4543 37.9936 29.7451 37.1975 28ZM35.2752 28C34.764 26.9291 34.196 25.8429 33.5727 24.7534C32.9493 23.664 32.3011 22.6245 31.6376 21.6424C30.4629 21.5536 29.2467 21.5069 28 21.5069C26.7533 21.5069 25.5371 21.5536 24.3624 21.6424C23.6989 22.6245 23.0507 23.664 22.4273 24.7534C21.804 25.8429 21.236 26.9291 20.7248 28C21.236 29.0709 21.804 30.1571 22.4273 31.2466C23.0507 32.336 23.6989 33.3755 24.3624 34.3576C25.5371 34.4464 26.7533 34.4931 28 34.4931C29.2467 34.4931 30.4629 34.4464 31.6376 34.3576C32.3011 33.3755 32.9493 32.336 33.5727 31.2466C34.196 30.1571 34.764 29.0709 35.2752 28ZM33.8684 34.1331C34.2809 33.4825 34.6851 32.8122 35.0788 32.124C35.4726 31.4358 35.8458 30.7475 36.1979 30.0617C36.6926 31.2464 37.1132 32.4016 37.4575 33.5098C36.3343 33.763 35.1326 33.9731 33.8684 34.1331ZM30.3295 36.1948C29.5649 36.23 28.7875 36.248 28 36.248C27.2125 36.248 26.4351 36.23 25.6705 36.1948C26.4399 37.2195 27.221 38.1646 28 39.0196C28.779 38.1646 29.5601 37.2195 30.3295 36.1948ZM29.2133 40.2806C30.3585 39.0307 31.4991 37.6057 32.5987 36.0375C34.4945 35.8606 36.2878 35.5764 37.9331 35.2006C38.1206 35.9487 38.2692 36.6686 38.378 37.3541C38.6613 39.1383 38.6679 40.642 38.4255 41.7859C38.183 42.9298 37.7165 43.6163 37.1304 43.9577C36.5444 44.2992 35.722 44.3636 34.6189 44.0035C33.516 43.6435 32.2287 42.8858 30.8391 41.7461C30.3052 41.3083 29.7616 40.8185 29.2133 40.2806ZM26.7867 40.2806C25.6415 39.0307 24.5009 37.6057 23.4013 36.0375C21.5055 35.8606 19.7122 35.5764 18.0669 35.2006C17.8794 35.9487 17.7308 36.6686 17.622 37.3541C17.3387 39.1383 17.3321 40.642 17.5745 41.7859C17.817 42.9298 18.2835 43.6163 18.8696 43.9577C19.4556 44.2992 20.278 44.3636 21.3811 44.0035C22.484 43.6435 23.7713 42.8858 25.1609 41.7461C25.6948 41.3083 26.2384 40.8185 26.7867 40.2806ZM18.5425 33.5098C19.6657 33.763 20.8674 33.9731 22.1316 34.1331C21.7191 33.4825 21.3149 32.8122 20.9212 32.124C20.5274 31.4358 20.1542 30.7475 19.8021 30.0617C19.3074 31.2464 18.8868 32.4016 18.5425 33.5098ZM19.8021 25.9383C20.1542 25.2525 20.5274 24.5642 20.9212 23.876C21.3149 23.1878 21.7191 22.5175 22.1316 21.8669C20.8674 22.0269 19.6657 22.237 18.5425 22.4902C18.8868 23.5984 19.3074 24.7536 19.8021 25.9383ZM18.8025 28C18.0064 29.7451 17.3537 31.4543 16.8535 33.08C16.1178 32.8698 15.4257 32.6397 14.7829 32.392C13.11 31.7475 11.8161 31.0014 10.9556 30.2176C10.0951 29.4338 9.73913 28.6829 9.73913 28C9.73913 27.3171 10.0951 26.5662 10.9556 25.7824C11.8161 24.9986 13.11 24.2525 14.7829 23.608C15.4257 23.3603 16.1178 23.1302 16.8535 22.92C17.3537 24.5457 18.0064 26.2549 18.8025 28ZM25.6705 19.8052C26.4351 19.77 27.2125 19.752 28 19.752C28.7875 19.752 29.5649 19.77 30.3295 19.8052C29.5601 18.7805 28.779 17.8354 28 16.9804C27.221 17.8354 26.4399 18.7805 25.6705 19.8052Z\" fill=\"#61DAFB\"/>\n          </svg>\n        </div>\n\n        <h3>Web Standards and React DOM</h3>\n        <p>\n          Based on web standards and <code>react-dom</code> compatible React libraries.\n        Many React libraries do not support <code>react-native</code>.\n        </p>\n      </div>\n      <div class=\"feature\">\n        <div class=\"image\">\n          <svg width=\"56\" height=\"40\" viewBox=\"0 0 56 40\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n            <rect width=\"56\" height=\"2\" transform=\"matrix(1 0 0 -1 0 40)\" fill=\"#49B9FF\"/>\n            <path d=\"M37.274 31.9501L43.7024 8H40.1198H37.2486L34.4283 21.7353L33.9201 24.1899H33.7931L29.7024 8H24.6969L20.5808 24.1899H20.4537L19.3103 18.537L16.4646 29.5947L17.0998 31.9501H22.9945L27.1361 16.9999H27.2631L31.4047 31.9501H31.8621H34.4283H37.274Z\" fill=\"#49B9FF\"/>\n            <path d=\"M47.7423 8H45.5318L45.4047 8.44627L44.0327 13.6032L46.5989 22.3056H41.6951L40.5263 26.6939H47.8185L49.3684 31.9501H56L47.7423 8Z\" fill=\"#4991FF\"/>\n            <path d=\"M18.5989 12.5375C17.2523 9.73585 14.3557 8.04993 10.6207 8.04993H0V32H6.25045V24.9836H10.265C12.4247 24.9836 14.3303 24.4629 15.8294 23.496L18.5989 12.5375ZM8.94374 20.4216H6.25045V12.7358H8.99456C11.6116 12.7358 13.1869 14.0746 13.1869 16.5787C13.1615 19.058 11.6116 20.4216 8.94374 20.4216Z\" fill=\"#61DAFB\"/>\n            <rect width=\"56\" height=\"2\" transform=\"matrix(1 0 0 -1 0 2)\" fill=\"#49B9FF\"/>\n          </svg>\n        </div>\n\n        <h3>First-class Progressive Web Apps</h3>\n        <p>React Native does not officially support PWAs. In contrast, Ionic React \n        supports PWAs, and native iOS, Android, and Electron.</p>\n      </div>\n      <div class=\"feature\">\n        <div class=\"image\">\n          <svg width=\"56\" height=\"52\" viewBox=\"0 0 56 52\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n            <rect x=\"1\" y=\"1\" width=\"54\" height=\"50\" rx=\"5\" fill=\"white\" stroke=\"#61DAFB\" stroke-width=\"2\"/>\n            <path d=\"M0 9C0 4.02944 4.02944 0 9 0H47C51.9706 0 56 4.02944 56 9H0Z\" fill=\"#61DAFB\"/>\n            <rect x=\"17\" y=\"6\" width=\"3\" height=\"3\" rx=\"1.5\" transform=\"rotate(-180 17 6)\" fill=\"white\"/>\n            <rect x=\"12\" y=\"6\" width=\"3\" height=\"3\" rx=\"1.5\" transform=\"rotate(-180 12 6)\" fill=\"white\"/>\n            <rect x=\"7\" y=\"6\" width=\"3\" height=\"3\" rx=\"1.5\" transform=\"rotate(-180 7 6)\" fill=\"white\"/>\n            <rect x=\"13\" y=\"15\" width=\"30\" height=\"36\" rx=\"4\" fill=\"white\" stroke=\"#49B9FF\" stroke-width=\"2\"/>\n            <rect x=\"21\" y=\"25\" width=\"14\" height=\"26\" rx=\"3\" fill=\"white\" stroke=\"#4991FF\" stroke-width=\"2\"/>\n            <path d=\"M29.5 27C30.0523 27 30.5 26.5523 30.5 26C30.5 25.4477 30.0523 25 29.5 25V27ZM26 25C25.4477 25 25 25.4477 25 26C25 26.5523 25.4477 27 26 27V25ZM29.5 25H26V27H29.5V25Z\" fill=\"#4991FF\"/>\n          </svg>\n        </div>\n\n        <h3>Build in the Browser</h3>\n        <p>Build apps faster than ever before with first-class browser development support.\n          Chances are you can build a significant chunk of your app right in Chrome!\n        </p>\n      </div>\n      <div class=\"feature\">\n        <div class=\"image\">\n          <svg width=\"53\" height=\"56\" viewBox=\"0 0 53 56\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n            <path d=\"M31.7857 20.2856H47.2857C48.3087 20.2856 49.2898 20.692 50.0131 21.4154C50.7365 22.1387 51.1429 23.1198 51.1429 24.1428V54.9999H31.7857\" stroke=\"#49B9FF\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path d=\"M44.4286 45.3571C44.0472 45.3571 43.6743 45.4702 43.3571 45.6821C43.04 45.894 42.7928 46.1952 42.6468 46.5476C42.5009 46.9 42.4627 47.2878 42.5371 47.6619C42.6115 48.036 42.7952 48.3796 43.0649 48.6493C43.3346 48.919 43.6782 49.1027 44.0524 49.1771C44.4265 49.2516 44.8142 49.2134 45.1666 49.0674C45.519 48.9214 45.8202 48.6742 46.0322 48.3571C46.2441 48.0399 46.3572 47.6671 46.3572 47.2856C46.3572 46.7741 46.154 46.2836 45.7923 45.9219C45.4306 45.5602 44.9401 45.3571 44.4286 45.3571Z\" fill=\"#49B9FF\"/>\n            <path d=\"M44.4286 35.7144C44.0472 35.7144 43.6743 35.8275 43.3571 36.0394C43.04 36.2513 42.7928 36.5525 42.6468 36.9049C42.5009 37.2573 42.4627 37.6451 42.5371 38.0192C42.6115 38.3933 42.7952 38.7369 43.0649 39.0066C43.3346 39.2763 43.6782 39.46 44.0524 39.5344C44.4265 39.6089 44.8142 39.5707 45.1666 39.4247C45.519 39.2787 45.8202 39.0315 46.0322 38.7144C46.2441 38.3972 46.3572 38.0244 46.3572 37.6429C46.3572 37.1314 46.154 36.6409 45.7923 36.2792C45.4306 35.9175 44.9401 35.7144 44.4286 35.7144Z\" fill=\"#49B9FF\"/>\n            <path d=\"M44.4286 26.0714C44.0472 26.0714 43.6743 26.1845 43.3571 26.3964C43.04 26.6083 42.7928 26.9095 42.6468 27.2619C42.5009 27.6143 42.4627 28.0021 42.5371 28.3762C42.6115 28.7503 42.7952 29.094 43.0649 29.3637C43.3346 29.6334 43.6782 29.8171 44.0524 29.8915C44.4265 29.9659 44.8142 29.9277 45.1666 29.7818C45.519 29.6358 45.8202 29.3886 46.0322 29.0714C46.2441 28.7543 46.3572 28.3814 46.3572 28C46.3572 27.4885 46.154 26.998 45.7923 26.6363C45.4306 26.2746 44.9401 26.0714 44.4286 26.0714Z\" fill=\"#49B9FF\"/>\n            <path d=\"M36.7143 45.3571C36.3329 45.3571 35.96 45.4702 35.6429 45.6821C35.3257 45.894 35.0785 46.1952 34.9325 46.5476C34.7866 46.9 34.7484 47.2878 34.8228 47.6619C34.8972 48.036 35.0809 48.3796 35.3506 48.6493C35.6203 48.919 35.964 49.1027 36.3381 49.1771C36.7122 49.2516 37.0999 49.2134 37.4523 49.0674C37.8047 48.9214 38.1059 48.6742 38.3179 48.3571C38.5298 48.0399 38.6429 47.6671 38.6429 47.2856C38.6429 46.7741 38.4397 46.2836 38.078 45.9219C37.7163 45.5602 37.2258 45.3571 36.7143 45.3571Z\" fill=\"#49B9FF\"/>\n            <path d=\"M36.7143 35.7144C36.3329 35.7144 35.96 35.8275 35.6429 36.0394C35.3257 36.2513 35.0785 36.5525 34.9325 36.9049C34.7866 37.2573 34.7484 37.6451 34.8228 38.0192C34.8972 38.3933 35.0809 38.7369 35.3506 39.0066C35.6203 39.2763 35.964 39.46 36.3381 39.5344C36.7122 39.6089 37.0999 39.5707 37.4523 39.4247C37.8047 39.2787 38.1059 39.0315 38.3179 38.7144C38.5298 38.3972 38.6429 38.0244 38.6429 37.6429C38.6429 37.1314 38.4397 36.6409 38.078 36.2792C37.7163 35.9175 37.2258 35.7144 36.7143 35.7144Z\" fill=\"#49B9FF\"/>\n            <path d=\"M36.7143 26.0714C36.3329 26.0714 35.96 26.1845 35.6429 26.3964C35.3257 26.6083 35.0785 26.9095 34.9325 27.2619C34.7866 27.6143 34.7484 28.0021 34.8228 28.3762C34.8972 28.7503 35.0809 29.094 35.3506 29.3637C35.6203 29.6334 35.964 29.8171 36.3381 29.8915C36.7122 29.9659 37.0999 29.9277 37.4523 29.7818C37.8047 29.6358 38.1059 29.3886 38.3179 29.0714C38.5298 28.7543 38.6429 28.3814 38.6429 28C38.6429 27.4885 38.4397 26.998 38.078 26.6363C37.7163 26.2746 37.2258 26.0714 36.7143 26.0714Z\" fill=\"#49B9FF\"/>\n            <path d=\"M13.5 55V46H19.5V55\" stroke=\"#4991FF\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path d=\"M19.5 55H31.375C31.5029 55 31.6255 54.9492 31.7159 54.8588C31.8063 54.7684 31.8571 54.6457 31.8571 54.5179V4.85714C31.8571 3.83416 31.4508 2.85309 30.7274 2.12973C30.0041 1.40638 29.023 1 28 1H4.85714C3.83416 1 2.85309 1.40638 2.12973 2.12973C1.40638 2.85309 1 3.83416 1 4.85714V55H13.5\" stroke=\"#4991FF\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path d=\"M7.03643 49.1986C6.63701 49.2509 6.23126 49.1767 5.87612 48.9866C5.52099 48.7965 5.23429 48.5 5.05628 48.1386C4.87828 47.7773 4.81788 47.3692 4.88359 46.9718C4.94929 46.5744 5.13779 46.2075 5.42263 45.9227C5.70746 45.6378 6.07434 45.4493 6.47177 45.3836C6.8692 45.3179 7.27722 45.3783 7.63858 45.5563C7.99993 45.7343 8.29648 46.021 8.4866 46.3762C8.67671 46.7313 8.75086 47.137 8.69862 47.5365C8.64349 47.958 8.45063 48.3495 8.15004 48.6501C7.84944 48.9507 7.45795 49.1435 7.03643 49.1986Z\" fill=\"#4991FF\"/>\n            <path d=\"M7.03643 39.5557C6.63701 39.6079 6.23126 39.5338 5.87612 39.3437C5.52099 39.1536 5.23429 38.857 5.05628 38.4957C4.87828 38.1343 4.81788 37.7263 4.88359 37.3289C4.94929 36.9314 5.13779 36.5646 5.42263 36.2797C5.70746 35.9949 6.07434 35.8064 6.47177 35.7407C6.8692 35.675 7.27722 35.7354 7.63858 35.9134C7.99993 36.0914 8.29648 36.3781 8.4866 36.7332C8.67671 37.0883 8.75086 37.4941 8.69862 37.8935C8.64349 38.315 8.45063 38.7065 8.15004 39.0071C7.84944 39.3077 7.45795 39.5006 7.03643 39.5557Z\" fill=\"#4991FF\"/>\n            <path d=\"M7.03643 29.9129C6.63701 29.9651 6.23126 29.891 5.87612 29.7009C5.52099 29.5107 5.23429 29.2142 5.05628 28.8528C4.87828 28.4915 4.81788 28.0835 4.88359 27.686C4.94929 27.2886 5.13779 26.9217 5.42263 26.6369C5.70746 26.3521 6.07434 26.1636 6.47177 26.0978C6.8692 26.0321 7.27722 26.0925 7.63858 26.2705C7.99993 26.4486 8.29648 26.7352 8.4866 27.0904C8.67671 27.4455 8.75086 27.8513 8.69862 28.2507C8.64349 28.6722 8.45063 29.0637 8.15004 29.3643C7.84944 29.6649 7.45795 29.8578 7.03643 29.9129Z\" fill=\"#4991FF\"/>\n            <path d=\"M7.03643 20.2701C6.63701 20.3223 6.23126 20.2482 5.87612 20.058C5.52099 19.8679 5.23429 19.5714 5.05628 19.21C4.87828 18.8487 4.81788 18.4406 4.88359 18.0432C4.94929 17.6458 5.13779 17.2789 5.42263 16.9941C5.70746 16.7092 6.07434 16.5207 6.47177 16.455C6.8692 16.3893 7.27722 16.4497 7.63858 16.6277C7.99993 16.8057 8.29648 17.0924 8.4866 17.4476C8.67671 17.8027 8.75086 18.2085 8.69862 18.6079C8.64349 19.0294 8.45063 19.4209 8.15004 19.7215C7.84944 20.0221 7.45795 20.2149 7.03643 20.2701Z\" fill=\"#4991FF\"/>\n            <path d=\"M7.03643 10.6271C6.63701 10.6794 6.23126 10.6052 5.87612 10.4151C5.52099 10.225 5.23429 9.92843 5.05628 9.56708C4.87828 9.20572 4.81788 8.79769 4.88359 8.40027C4.94929 8.00284 5.13779 7.63596 5.42263 7.35112C5.70746 7.06628 6.07434 6.87779 6.47177 6.81208C6.8692 6.74638 7.27722 6.80677 7.63858 6.98478C7.99993 7.16279 8.29648 7.44948 8.4866 7.80462C8.67671 8.15975 8.75086 8.56551 8.69862 8.96493C8.64349 9.38645 8.45063 9.77794 8.15004 10.0785C7.84944 10.3791 7.45795 10.572 7.03643 10.6271Z\" fill=\"#4991FF\"/>\n            <path d=\"M16.6793 39.5557C16.2799 39.6079 15.8741 39.5338 15.519 39.3437C15.1638 39.1536 14.8771 38.857 14.6991 38.4957C14.5211 38.1343 14.4607 37.7263 14.5264 37.3289C14.5921 36.9314 14.7806 36.5646 15.0655 36.2797C15.3503 35.9949 15.7172 35.8064 16.1146 35.7407C16.512 35.675 16.9201 35.7354 17.2814 35.9134C17.6428 36.0914 17.9393 36.3781 18.1294 36.7332C18.3196 37.0883 18.3937 37.4941 18.3415 37.8935C18.2863 38.315 18.0935 38.7065 17.7929 39.0071C17.4923 39.3077 17.1008 39.5006 16.6793 39.5557Z\" fill=\"#4991FF\"/>\n            <path d=\"M16.6793 29.9129C16.2799 29.9651 15.8741 29.891 15.519 29.7009C15.1638 29.5107 14.8771 29.2142 14.6991 28.8528C14.5211 28.4915 14.4607 28.0835 14.5264 27.686C14.5921 27.2886 14.7806 26.9217 15.0655 26.6369C15.3503 26.3521 15.7172 26.1636 16.1146 26.0978C16.512 26.0321 16.9201 26.0925 17.2814 26.2705C17.6428 26.4486 17.9393 26.7352 18.1294 27.0904C18.3196 27.4455 18.3937 27.8513 18.3415 28.2507C18.2863 28.6722 18.0935 29.0637 17.7929 29.3643C17.4923 29.6649 17.1008 29.8578 16.6793 29.9129Z\" fill=\"#4991FF\"/>\n            <path d=\"M16.6793 20.2701C16.2799 20.3223 15.8741 20.2482 15.519 20.058C15.1638 19.8679 14.8771 19.5714 14.6991 19.21C14.5211 18.8487 14.4607 18.4406 14.5264 18.0432C14.5921 17.6458 14.7806 17.2789 15.0655 16.9941C15.3503 16.7092 15.7172 16.5207 16.1146 16.455C16.512 16.3893 16.9201 16.4497 17.2814 16.6277C17.6428 16.8057 17.9393 17.0924 18.1294 17.4476C18.3196 17.8027 18.3937 18.2085 18.3415 18.6079C18.2863 19.0294 18.0935 19.4209 17.7929 19.7215C17.4923 20.0221 17.1008 20.2149 16.6793 20.2701Z\" fill=\"#4991FF\"/>\n            <path d=\"M16.6793 10.6271C16.2799 10.6794 15.8741 10.6052 15.519 10.4151C15.1638 10.225 14.8771 9.92843 14.6991 9.56708C14.5211 9.20572 14.4607 8.79769 14.5264 8.40027C14.5921 8.00284 14.7806 7.63596 15.0655 7.35112C15.3503 7.06628 15.7172 6.87779 16.1146 6.81208C16.512 6.74638 16.9201 6.80677 17.2814 6.98478C17.6428 7.16279 17.9393 7.44948 18.1294 7.80462C18.3196 8.15975 18.3937 8.56551 18.3415 8.96493C18.2863 9.38645 18.0935 9.77794 17.7929 10.0785C17.4923 10.3791 17.1008 10.572 16.6793 10.6271Z\" fill=\"#4991FF\"/>\n            <path d=\"M26.3222 49.1986C25.9227 49.2509 25.517 49.1767 25.1619 48.9866C24.8067 48.7965 24.52 48.5 24.342 48.1386C24.164 47.7773 24.1036 47.3692 24.1693 46.9718C24.235 46.5744 24.4235 46.2075 24.7084 45.9227C24.9932 45.6378 25.3601 45.4493 25.7575 45.3836C26.1549 45.3179 26.563 45.3783 26.9243 45.5563C27.2857 45.7343 27.5822 46.021 27.7723 46.3762C27.9624 46.7313 28.0366 47.137 27.9844 47.5365C27.9292 47.958 27.7364 48.3495 27.4358 48.6501C27.1352 48.9507 26.7437 49.1435 26.3222 49.1986Z\" fill=\"#4991FF\"/>\n            <path d=\"M26.3222 39.5557C25.9227 39.6079 25.517 39.5338 25.1619 39.3437C24.8067 39.1536 24.52 38.857 24.342 38.4957C24.164 38.1343 24.1036 37.7263 24.1693 37.3289C24.235 36.9314 24.4235 36.5646 24.7084 36.2797C24.9932 35.9949 25.3601 35.8064 25.7575 35.7407C26.1549 35.675 26.563 35.7354 26.9243 35.9134C27.2857 36.0914 27.5822 36.3781 27.7723 36.7332C27.9624 37.0883 28.0366 37.4941 27.9844 37.8935C27.9292 38.315 27.7364 38.7065 27.4358 39.0071C27.1352 39.3077 26.7437 39.5006 26.3222 39.5557Z\" fill=\"#4991FF\"/>\n            <path d=\"M26.3222 29.9129C25.9227 29.9651 25.517 29.891 25.1619 29.7009C24.8067 29.5107 24.52 29.2142 24.342 28.8528C24.164 28.4915 24.1036 28.0835 24.1693 27.686C24.235 27.2886 24.4235 26.9217 24.7084 26.6369C24.9932 26.3521 25.3601 26.1636 25.7575 26.0978C26.1549 26.0321 26.563 26.0925 26.9243 26.2705C27.2857 26.4486 27.5822 26.7352 27.7723 27.0904C27.9624 27.4455 28.0366 27.8513 27.9844 28.2507C27.9292 28.6722 27.7364 29.0637 27.4358 29.3643C27.1352 29.6649 26.7437 29.8578 26.3222 29.9129Z\" fill=\"#4991FF\"/>\n            <path d=\"M27.4377 19.7224C28.1885 18.9716 28.1855 17.7513 27.4309 16.9967C26.6764 16.2422 25.456 16.2391 24.7052 16.9899C23.9544 17.7407 23.9575 18.9611 24.712 19.7156C25.4666 20.4702 26.6869 20.4732 27.4377 19.7224Z\" fill=\"#4991FF\"/>\n            <path d=\"M26.3222 10.6271C25.9227 10.6794 25.517 10.6052 25.1619 10.4151C24.8067 10.225 24.52 9.92843 24.342 9.56708C24.164 9.20572 24.1036 8.79769 24.1693 8.40027C24.235 8.00284 24.4235 7.63596 24.7084 7.35112C24.9932 7.06628 25.3601 6.87779 25.7575 6.81208C26.1549 6.74638 26.563 6.80677 26.9243 6.98478C27.2857 7.16279 27.5822 7.44948 27.7723 7.80462C27.9624 8.15975 28.0366 8.56551 27.9844 8.96493C27.9292 9.38645 27.7364 9.77794 27.4358 10.0785C27.1352 10.3791 26.7437 10.572 26.3222 10.6271Z\" fill=\"#4991FF\"/>\n          </svg>\n        </div>\n\n        <h3>Enterprise-ready</h3>\n        <p>\n          Ionic React is supported by a company dedicated to enterprise app dev -- with supported native plugins, DevOps, services, and more.\n        </p>\n      </div>\n    </div>\n  </div>\n\n  <div class=\"container\" id=\"accolades\">\n    <h2>What People are Saying</h2>\n    <div id=\"tweets\" class=\"tweets\">\n      <div id=\"tweet-share\" class=\"tweet-share\">\n        <h4>Love Ionic React?</h4>\n        <a\n          target=\"_blank\"\n          href=\"http://twitter.com/share?text=Check out Ionic React to build native mobile and Progressive Web Apps with React&url=https://ionicframework.com/react&via=ionicframework\">\n          Let us know on Twitter\n        </a>\n      </div>\n    </div>\n  </div>\n\n  <div class=\"container grid grid-cols-2\" id=\"start\">\n    <div>\n      <h2>Get Started with Ionic React</h2>\n      <p>Start building better apps faster, all in React</p>\n    </div>\n    <div>\n      <pre><code>\nnpm install -g @ionic/cli\nionic start --type=react\n      </code></pre>\n    </div>\n  </div>\n</main>\n\n{% include '_includes/footer.html' %}\n{% endblock %}\n\n{% block scripts %}\n<script>\n  const exampleRotation = (listId, stencilComponentName) => {\n    const $stencilComponent = document.getElementsByTagName(stencilComponentName)[0];\n    const $list = document.querySelector(`#${listId}`);\n    const animationDuration = 5000;\n    let animation, \n        $currentlySelected;\n    \n    const select = ($el, stayPut) => {\n      if (animation) {\n        animation.finish();\n      }\n      $stencilComponent.setAttribute('tab', $el.dataset['tab']);\n      $currentlySelected?.classList.remove('selected');\n      $el.classList.add('selected');\n      $currentlySelected = $el;\n      if (!stayPut) {\n        animate($el.querySelector('.progress'))\n      }\n    };\n\n    const animate = $bar => {\n      animation = $bar.animate(\n        [\n          { transform: 'scale(0, 1)' },\n          { transform: 'scale(1, 1)' }\n        ], {\n          fill: 'forwards',\n          duration: animationDuration\n        })\n      animation.finished.then((a) => {\n        // when done animating, select the next demo\n        if ($currentlySelected.nextElementSibling) {\n          select($currentlySelected.nextElementSibling);\n        } else {\n          select($list.querySelector('li:first-child'));\n        }\n      })\n    };\n\n    const pause = () => animation.pause();\n    const play = () => animation.play();\n\n    const initiate = () => {\n      $list.querySelectorAll('li').forEach($li => {\n        $li.onclick = ev => {\n          animation.cancel();\n          select(ev.currentTarget, true);\n          // if the user clicks, we stop animating\n          $list.removeEventListener('mouseenter', pause);\n          $stencilComponent.removeEventListener('mouseenter', pause);\n          $list.removeEventListener('mouseleave', play);\n          $stencilComponent.removeEventListener('mouseleave', play);\n        }\n      });\n\n      // pause the animation if the user is interacting w/ the demo\n      $list.addEventListener('mouseenter', pause);\n      $stencilComponent.addEventListener('mouseenter', pause);\n      $list.addEventListener('mouseleave', play);\n      $stencilComponent.addEventListener('mouseleave', play);\n\n      if (!$currentlySelected) {\n        select($list.querySelector(' li:first-child'));\n      }\n    }\n\n    initiate();\n  };\n  exampleRotation('components-list', 'react-components');\n  exampleRotation('native-list', 'react-capacitor');\n\n  const tweets = [\n    {\n      author_username: 'vjeux',\n      author_name: 'vjeux',\n      date: 'October 2019',\n      avatar: '/img/react/twitter-profile-pictures/vjeux.jpg',\n      link: 'https://twitter.com/Vjeux/status/1184258196707233793',\n      content: `Super excited about Ionic React! I’ve always dreamed of a “ruby on rails” equivalent for React where all the environment is setup to be productive right away.`\n    },\n    {\n      author_username: 'adnan_msagar',\n      author_name: 'Adnan Sagar, PhD',\n      date: 'February 2020',\n      avatar: '/img/react/twitter-profile-pictures/adnan-sagar.png',\n      link: 'https://twitter.com/adnan_msagar/status/1224420056752381952',\n      content: `Building apps with Ionic React is a joy. Using JavaScript and a build-free process makes the experience that much sweeter. Check ionic-react-conference-app to see how to run JavaScript @ionicframework react apps in the browser build-free.`\n    },\n    {\n      author_username: 'ksouthworth',\n      author_name: 'Kevin Southworth',\n      date: 'February 2020',\n      avatar: '/img/react/twitter-profile-pictures/kevin-southworth.jpg',\n      link: 'https://twitter.com/ksouthworth/status/1226937939285901313',\n      content: `I’m new to both Ionic and React but I’ve found ionic-react to be really nice!`\n    },\n    {\n      author_username: 'pixelswithin',\n      author_name: 'Diana Lopez',\n      date: 'February 2020',\n      avatar: '/img/react/twitter-profile-pictures/diana-lopez.jpg',\n      link: 'https://twitter.com/pixelswithin/status/1220956268539441153',\n      content: `I wanna start another app tonight. Ionic + React makes dev fun. Lmk if you got an idea.`\n    },\n    /*\n    {\n      author_username: 'paranoidcoder',\n      author_name: 'Devin',\n      date: 'January 2020',\n      avatar: '/img/react/twitter-profile-pictures/devin.jpg',\n      link: 'https://twitter.com/paranoidcoder/status/1220788490809544712',\n      content: `Working with Ionic 4 has been amazing. The improvements, the React support, and the docs were all a major improvement. I can’t wait to get my hands on 5.0.0!`\n    },\n    */\n    {\n      author_username: 'BMcCoy04',\n      author_name: 'Bryan McCoy',\n      date: 'February 2020',\n      avatar: '/img/react/twitter-profile-pictures/bryan-mccoy.jpg',\n      link: 'https://twitter.com/BMcCoy04/status/1231952440632782850',\n      content: `I’m actually re-writing a react native app in ionic (to deploy it as a pwa). I can’t imagine why I wouldn’t use this for all of my future web apps or native apps. I’m really enjoying the framework.`\n    }\n  ];\n\n  const tweetsList = $('#tweets');\n  console.log('Appending', tweets, tweetsList);\n  tweets.forEach(t => $(`\n  <div class=\"tweet\">\n    <div class=\"tweet-author\">\n      <div class=\"tweet-author-avatar\">\n        <img src=\"${t.avatar}\" loading=\"lazy\"/>\n      </div>\n      <div class=\"tweet-author-info\">\n        <h3><a href=\"https://twitter.com/${t.author_username}\">${t.author_username}</a></h3>\n        <h5><a href=\"https://twitter.com/${t.author_username}\">@${t.author_name}</a></h5>\n      </div>\n      <div class=\"tweet-twitter-icon\"></div>\n    </div>\n    <div class=\"tweet-content\">\n      ${t.content}\n    </div>\n    <div class=\"tweet-footer\">\n      <div class=\"tweet-date\">${t.date}</div>\n      <div class=\"tweet-view\"><a target=\"_blank\" href=\"${t.link}\">View Tweet</a></div>\n    </div>\n  </div>\n  `).insertBefore('#tweet-share'));\n</script>\n{% endblock %}\n"
  },
  {
    "path": "server/pages/start.html",
    "content": "{% extends '_layouts/blank.html' %} \n{% set title = \"Create your Ionic App\" %} \n{% set id = \"start\" %} \n{% set pre_footer = false %} \n{% set meta_description = \"Create your own beautiful mobile app with just a few clicks and the power of Ionic Framework.\" %} \n{% set cssPath = 'auth' %}\n{% set cssVersion = 2 %}\n{% block main %} \n\n<header>\n  <a class=\"header__logo\" href=\"/\">\n    {% include '_includes/svg/ionic-black.svg' %}\n  </a>\n\n  <a\n    class=\"header__feedback\"\n    href=\"https://github.com/ionic-team/app-wizard-issues/issues/new?assignees=&labels=&template=bug_report.md&title=\"\n    target=\"_blank\"\n    >Send Feedback</a\n  >\n</header>\n<main>\n  <div class=\"container-fluid\">\n    <ionic-app-wizard></ionic-app-wizard>\n  </div>\n</main>\n{% endblock %}\n"
  },
  {
    "path": "server/pages/stencil-jamstack2021.html",
    "content": "{% extends '_layouts/blank.html' %}\n\n{% block scripts %}\n<script>\n  (function (t, e, s, n) {\n    var o, a, c;\n    (t.SMCX = t.SMCX || []),\n      e.getElementById(n) ||\n        ((o = e.getElementsByTagName(s)),\n        (a = o[o.length - 1]),\n        (c = e.createElement(s)),\n        (c.type = \"text/javascript\"),\n        (c.async = !0),\n        (c.id = n),\n        (c.src =\n          \"https://widget.surveymonkey.com/collect/website/js/tRaiETqnLgj758hTBazgdxm4Ha670b7ZvVwzlmytSfD5mBjTC6c3L5L0eYW34nPA.js\"),\n        a.parentNode.insertBefore(c, a));\n  })(window, document, \"script\", \"smcx-sdk\");\n</script>\n{% endblock %}\n"
  },
  {
    "path": "server/pages/subscribe.html",
    "content": "{% extends '_layouts/base.html' %}\n{% set title = \"Subscribe to the Ionic Newsletter\" %}\n{% set id = \"subscribe\" %}\n{% set header_style = 'transparent' %}\n{% set pre_footer = false %}\n{% set cssPath = 'subscribe' %}\n\n{% block main %}\n\n<div class=\"cta banner\">\n  <hgroup class=\"container\">\n    <h2>Sign up for our newsletter to get the latest from Ionic</h2>\n    <p>\n      The Ionic Newsletter is a monthly newsletter of the lastest from Ionic as\n      well as the open source and hybrid development communities. Hear from\n      featured guests about how to build your best apps and keep your users \n      happy.\n    </p>\n  </hgroup>\n</div>\n\n<div class=\"container subscribe\">\n    <img src=\"/img/ionic-dev-newsletter-logo.png\" />\n  <ionic-newsletter-signup></ionic-newsletter-signup>\n</div>\n\n{% endblock %}\n"
  },
  {
    "path": "server/pages/survey/2017.html",
    "content": "{% extends \"_layouts/base.html\" %}\n{% set id = 'survey-2017' %}\n{% set bodyController = 'SurveyCtrl' %}\n{% set name = '2017 Developer Survey' %}\n{% set meta_image = 'https://ionicframework.com/img/survey/survey-meta-2017.png' %}\n{% set header_style = 'transparent survey-layout' %}\n{% set cssPath = 'survey/2017' %}\n\n{% block body_attributes %}\n  data-spy=\"scroll\" data-target=\"#survey-2017-nav\" data-offset=\"400\"\n{% endblock %}\n\n{% block main %}\n<div class=\"cta banner\" id=\"survey-banner\">\n  <canvas id=\"statistical-suspension\"></canvas>\n  <hgroup class=\"container\">\n    <h2>\n      <svg version=\"1.1\" \n           xmlns=\"http://www.w3.org/2000/svg\" \n           xmlns:xlink=\"http://www.w3.org/1999/xlink\" \n           x=\"0px\" \n           y=\"0px\"\n           viewBox=\"0 0 512 512\" \n           enable-background=\"new 0 0 512 512\" \n           xml:space=\"preserve\">\n        <g id=\"Layer_1\">\n        \t<g>\n        \t\t<path d=\"M256,139.3c-64.3,0-116.7,52.3-116.7,116.7c0,64.3,52.3,116.7,116.7,116.7S372.7,320.3,372.7,256\n        \t\t\tC372.7,191.7,320.3,139.3,256,139.3z\"/>\n        \t\t<g>\n        \t\t\t<circle cx=\"423.5\" cy=\"96.5\" r=\"53.2\"/>\n        \t\t</g>\n        \t\t<path d=\"M489,149.9l-2.2-4.9l-3.6,4c-8.7,9.9-19.8,17.5-32.1,22.1l-3.4,1.3l1.4,3.3c10.6,25.5,16,52.5,16,80.2\n        \t\t\tc0,115.3-93.8,209.2-209.2,209.2S46.8,371.3,46.8,256S140.7,46.8,256,46.8c31.3,0,61.5,6.8,89.6,20.2l3.3,1.6l1.4-3.3\n        \t\t\tc5.1-12,13.3-22.7,23.6-31l4.2-3.4l-4.8-2.5C336.8,9.6,297.3,0,256,0C114.8,0,0,114.8,0,256c0,141.2,114.8,256,256,256\n        \t\t\ts256-114.8,256-256C512,219.1,504.3,183.4,489,149.9z\"/>\n        \t</g>\n        </g>\n      </svg>\n      <span>2017</span>\n      </h2>\n    <h1>Developer Survey</h1>\n    <p>Insights, trends, and perspectives from the worldwide Ionic Community</p>\n  </hgroup>\n  <div class=\"bar tabbed\" data-spy=\"affix\" data-offset-top=\"500\">\n    <div class=\"container\" id=\"survey-2017-nav\">\n      <ul class=\"categories nav\">\n        <li><a class=\"anchor\" href=\"#trends\">Trends</a></li>\n        <li><a class=\"anchor\" href=\"#tools\">Tools</a></li>\n        <li><a class=\"anchor\" href=\"#habbits\">Habits</a></li>\n        <li><a class=\"anchor\" href=\"#profile\">Profile</a></li>\n        <li><a class=\"anchor\" href=\"#big-picture\">Big Picture</a></li>\n        <li><a class=\"anchor\" href=\"#results\">Results</a></li>\n      </ul>\n    </div>\n  </div>\n</div>\n\n<main>\n  <aside id=\"social-share-sidebar\" \n         class=\"meta activeOnLoad social-links active\" \n         role=\"complementary\" \n         data-spy=\"affix\" \n         data-offset-top=\"500\">\n  <h4>Share</h4>\n  <ul>\n    <li>\n      <a href=\"http://twitter.com/home?status=2017+Ionic+Developer+Survey+results+https%3A%2F%2Fionicframework.com%2Fsurvey%2F2017\"\n         onclick=\"window.open(this.href, 'Share via Twitter', 'width=400, height=300'); return false;\"\n         class=\"twitter\"></a></li>\n    <li>\n      <a href=\"http://www.facebook.com/share.php?u=https%3A%2F%2Fionicframework.com%2Fsurvey%2F2017&amp;title=2017+Ionic+Developer+Survey+results\"\n         onclick=\"window.open(this.href, 'Share via Facebook', 'width=555, height=656'); return false;\"\n         class=\"facebook\"></a></li>\n    <li>\n      <a href=\"https://plus.google.com/share?url=https%3A%2F%2Fionicframework.com%2Fsurvey%2F2017\"\n         onclick=\"window.open(this.href, 'Share via Google+', 'width=400, height=450'); return false;\"\n         class=\"google-plus\"></a></li>\n    <li>\n      <a href=\"https://buffer.com/add?text=2017+Ionic+Developer+Survey+results&amp;url=https%3A%2F%2Fionicframework.com%2Fsurvey%2F2017\"  \n         onclick=\"window.open(this.href, 'Share via Buffer', 'width=500, height=600'); return false;\"\n         class=\"buffer\"></a></li>\n  </ul>\n</aside>\n  <article>\n    <hgroup class=\"text-center intro\" id=\"insights\">\n      <div class=\"container\">\n        <p class=\"lg\">\n          This year, for the first time ever, we asked members of the Ionic \n          community to tell us about the tools and technologies they use to \n          develop Ionic apps, and what types of apps they’re building.  \n        </p><p class=\"lg\">\n          <strong>More than 13,000 developers shared their story.</strong>\n        </p><p class=\"lg\">\n          The results reveal some very interesting trends that, we hope, will \n          serve Ionic community members and vendors alike. While we encourage \n          you to check out the data yourself, here are the top insights and \n          observations from our team at Ionic.\n        </p>\n      </div>\n    </hgroup>\n\n    <section id=\"trends\" class=\"clearfix animate-in\">\n      <div class=\"container\">\n        <h3>App Trends</h3>\n        <div class=\"row\">\n          <div class=\"col-md-6\">\n            <h4>Hybrid dev is taking over.</h4>\n            <p>\n              Two years ago, 20% of developers surveyed were building \n              exclusively with native tools instead of hybrid. In the next two \n              years, that number is only 2.9% - a nearly 7x decrease. Similarly, \n              the number of hybrid-built apps is growing as a share of overall \n              app development. In the next two years, 32.7% of developers \n              surveyed expect to completely abandon native development in favor \n              of hybrid.\n            </p><p>\n              The broader trend is that hybrid development is gaining traction, \n              while the native approach is waning.  We think that makes sense.  \n              The benefits of hybrid are obvious. And as the <a target=\"_blank\"\n              href=\"https://blog.ionicframework.com/the-amazing-evolution-of-the-web-on-mobile/\">\n              web evolves</a>, there are fewer and fewer reasons not to adopt.\n            </p>\n          </div>\n          <div class=\"col-md-6\">\n            <h4>\n              More than just consumer apps.<br>\n              Many enterprises focused on B2E.\n            </h4>\n            <p>\n              The types of apps being built for commercial purposes aren't just \n              consumer apps, althought that remains a dominant use case. A large \n              percentage of apps being built with Ionic (41.7%) are actually for \n              internal-use apps. This is consistent with a broader trend in the \n              enterprise, where the value of mobile extends beyond the essential \n              flagship consumer app. More and more, older legacy systems are \n              steadily being replaced - or modernized - with mobile experiences \n              that make employees happier, and more productive.\n            </p>\n          </div>\n        </div>\n        <div class=\"row\">\n          <div class=\"col-md-8\">\n            <h4>\n              PWAs? Yes.<br>\n              Wearables and smart devices?  No.\n            </h4>\n            <p>\n              There’s been a lot of talk about wearables and other smart \n              devices, but the data shows that app development on these \n              platforms is still very nascent. Only 3% of developers are \n              building for  smartwatches, and even fewer (2.7%) for TVs.\n            </p><p>\n              And for all the talk about tablets taking over the world, they \n              still accounted for less than half (45%) of responses - while \n              Android was targeted by 94.3% of developers, and 83.2% for iOS.\n            </p><p>\n              Finally, 31.5% of developers are targeting progressive web apps.  \n              That’s a big jump for something the dev community just started \n              talking about two years ago.  Meanwhile, responsive web apps were \n              targeted by 34.7% of respondents. What’s driving this trend? Part \n              of it could be app fatigue among consumers who care more about \n              mobile experiences and less about installing yet another app, and \n              developers who want their apps to run on mobile and desktop web \n              environments, not just in the app stores. \n            </p><p>\n              Overall, we see this as validation for two things that Ionic has \n              been saying for awhile: mobile remains the killer platform, and \n              web is the future.\n            </p>\n          </div>\n          <aside class=\"col-md-3 col-md-offset-1\">\n            <figure>\n              <img src=\"/img/survey/watch-tv-icon.png\" width=\"114\" />\n              <figcaption>\n                <strong>3.0%</strong>\n                <p>\n                  Developers building for smart watches. Even fewer for TVs.\n                </p>\n              </figcaption>\n            </figure>\n            <figure>\n              <img src=\"/img/survey/pwa-icon.png\" width=\"90\" />\n              <figcaption>\n                <strong>31.5%</strong>\n                <p>Developers targeting progressive web apps.</p>\n              </figcaption>\n            </figure>\n          </aside>\n        </div>\n      </div>\n    </section>\n\n    <section id=\"tools\" class=\"clearfix dark animate-in\">\n      <div class=\"container\">\n        <h3>Tools of the Trade</h3>\n        <div class=\"row\">\n          <div class=\"col-md-6\">\n            <h4>Firebase tops hosted backend services.</h4>\n            <p>\n              Google’s Firebase is the clear winner in backend services. For \n              push notifications, Firebase was used by 41.3% of Ionic devs, \n              while AWS was used by just 8.2%.  There was a similar disparity \n              between Firebase Auth and Amazon Cognito (30% vs. 2.5%). And \n              Firebase topped the list of hosted backend databases, with 32.4% \n              of developers using it compared to a combined 11.5% for Amazon \n              DynamoDB and RDS.\n            </p><p>\n              <strong>Our take:</strong> \n              The Firebase strategy of focusing on ease of use, and adding \n              services on top of their free DB, appears to be working.\n            </p>\n          </div>\n          <div class=\"col-md-6\">\n            <h4>\n              Node dominates and Google owns analytics.\n            </h4>\n            <p>\n              The survey results confirmed some previously held beliefs. Node.js \n              is the dominant choice (56.6% of devs) when it comes to backend \n              technology. And Google owns the analytics space, with Google \n              Analytics and Firebase Analytics emerging as clear winners (used \n              by 68.3% and 24.9% of devs, respectively).\n            </p>\n            <ul class=\"tools\">\n              <li class=\"firebase\"></li>\n              <li class=\"node\"></li>\n              <li class=\"analytics\"></li>\n              <li class=\"vscode\"></li>\n              <li class=\"aws\"></li>\n            </ul>\n          </div>\n        </div>\n        <div class=\"row\">\n          <div class=\"col-md-12\">\n            <h4>\n              Microsoft winning over devs with VS Code.\n            </h4>\n            <p>\n              VS Code was launched two years ago at the 2015 Microsoft Build \n              conference.  Aimed at cross-platform developers, Code was touted \n              for its speed (fast), size (small), and advanced debugging \n              features.\n            </p><p>\n              Fast-forward two years, and adoption of Code has grown to nearly \n              half of  the developers we surveyed (46.7%) - by far the most \n              widely adopted among Editors and IDEs on the list.  Sublime, Atom, \n              and Webstorm trail as the next most popular code editors.\n            </p><p>\n              Add to that the 12.7% of devs using Visual Studio IDE, and it \n              looks like Microsoft has really won over developers with its code \n              editing and development toolsets.  Of course, it doesn’t hurt that \n              Microsoft is the reference editor for common tools like \n              TypeScript, which may have helped them become the defacto text \n              editor.\n            </p>\n          </div>\n        </div>\n      </div>\n    </section>\n\n    <section id=\"habbits\" class=\"clearfix dark animate-in\">\n      <div class=\"container\">\n        <h3>Dev Habits</h3>\n        <div class=\"row\">\n          <div class=\"col-md-6\">\n            <h4>Device testing in the cloud is still nascent.</h4>\n            <p>\n              Device testing is one of the most challenging aspects of mobile \n              app development. Even in larger teams, no one has enough devices \n              to cover every scenario.\n            </p><p>\n              With access to large device farms, AWS, Firebase, and others like \n              Browserstack and Sauce Labs, have emerged as a way to move device \n              testing to the cloud and gain much better test coverage in the \n              process.\n            </p><p>\n              And yet, an overwhelming majority of devs we surveyed (65.1%) are \n              not using any cloud device testing services. Time will tell if \n              these services take off, or remain a niche offering.\n            </p>\n          </div>\n          <div class=\"col-md-6\">\n            <h4>\n              Real-time remote updates gaining traction.\n            </h4>\n            <p>\n              The survey results show that most developers (53.2%) are still \n              pushing app updates the traditional way - through the App Stores.\n            </p><p>\n              Meanwhile, some are embracing rapid real-time updates that are \n              made possible with hybrid apps. Using tools like Ionic Deploy and \n              PhoneGap ContentSync, apps can be updated - at the web layer - \n              remotely, outside of the App Store, though still in compliance \n              with Apple and Android standards.\n            </p><p>\n              We expect to see adoption of real-time remote updates increasing \n              over the next year.\n            </p>\n          </div>\n        </div>\n        <div class=\"row\">\n          <div class=\"col-md-6\">\n            <h4>\n              Ionic Developers care about design.\n            </h4>\n            <p>\n              We were a bit surprised to see how many devs are using prototyping \n              tools as part of their development flow. This is a good sign that \n              developers care about design, and have embraced rapid prototyping \n              tools that help them get their ideas out on paper, before engaging \n              in costly development work.\n            </p><p styl>\n              Ionic Creator was cited as a popular prototyping tool of choice \n              (used by 22.8% of respondents), followed by popular design \n              solutions Sketch (17.6%), Balsamiq (12%), and Invision (10.1%).\n            </p>\n          </div>\n          <div class=\"col-md-6\">\n            <h4>\n              Almost half of participants not tracking errors and crashes.\n            </h4>\n            <p>\n              A surprising percentage of developers surveyed (44%) reported that \n              that they aren’t tracking errors or crashes in the apps they’re \n              building. This sizable gap in adoption suggest there is some \n              disillusionment in the tools that exist today.  One possible \n              explanation is that native crash tools are less effective when it \n              comes to understanding the web layer.  If true, the market for \n              crash reporting in hybrid apps is still up for grabs.\n            </p>\n          </div>\n        </div>\n      </div>\n    </section>\n\n    <section id=\"profile\" class=\"clearfix animate-in\">\n      <div class=\"container\">\n        <h3>Who’s building apps with Ionic</h3>\n        <div class=\"row\">\n          <div class=\"col-md-6\">\n            <h4>Web developers are moving to mobile.</h4>\n            <p>\n              We asked respondents to tell us about their development \n              background. Nearly 80% of 13,000+ Ionic developers who took the \n              survey identify themselves as web developers.  An additional 10.8% \n              identified as newbies learning to develop mobile apps for the \n              first time, while a sizable percentage (8.4%) described themselves \n              as “born-and-bred\" mobile developers. \n            </p><p>\n              Overall, the data suggests that Ionic serves a broad cross-section \n              of the developer community - from newbies to hardcore devs.  It’s \n              also clear that Ionic is fulfilling its mission to help web \n              developers participate in the thriving mobile app economy. By \n              embracing the power of open web technologies, Ionic is helping the \n              vast web developer community build mobile experiences using tools \n              they already know and love.  We’re excited to see that the \n              approach seems to be working.\n            </p>\n          </div>\n\n          <div class=\"col-md-6\">\n            <h4>Mostly building for commercial use.</h4>\n            <p>\n              The vast majority of Ionic devs (75.2%) are building apps for \n              commercial use.  By far the biggest segment of developers we \n              surveyed (41.9%) were contract developers and dev shops building \n              on behalf of their clients, while many others (33.3%) were \n              building apps for their company.  The companies they represent \n              range from solo shops to large enterprises.\n            </p>\n            <aside>\n              <div class=\"factoid\">\n                <strong>75.2%</strong>\n                <p>Developers bulding Ionic mobile apps for commercial use.</p>\n              </div>\n              <div class=\"factoid\">\n                <strong>41.9%</strong>\n                <p>Contractors and dev shops building apps for clients.</p>\n              </div>\n            </aside>\n          </div>\n        </div>\n      </div>\n    </section>\n\n    <hgroup id=\"big-picture\" class=\"clearfix text-center animate-in\">\n      <div class=\"container\">\n        <h3>Big Picture</h3>\n        <p>The web is winning. 🎉</p>\n        <p>\n          Looking at the big picture from this year’s results, the broader trend \n          is the web is winning. Hybrid apps are beginning to dominate. \n          Progressive web apps are catching on faster than we anticipated. And \n          more and more web developers are moving into the mobile space. Most \n          importantly, “cross-platform” doesn’t just mean iOS and Android. It \n          means a consistent experience across mobile and desktop, web and app \n          store, phone and tablet.\n        </p><p>\n          Of course, we’re not too surprised. Developers building hybrid apps \n          and PWAs are taking advantage of the single most adopted, tested, and \n          dominant technology stack in the world: The Web. Ionic has always bet \n          on the web, and it looks like we’re not alone.\n        </p>\n        <h2>&mdash;</h2>\n        <h2 id=\"results\">Survey Results</h2>\n        <p class=\"lg\">\n          Data from the survey is available below.  Feel free to interact, play, \n          and form your own conclusions!\n        </p>\n      </div>\n    </hgroup>\n\n    <section id=\"data-backend\" class=\"data animate-in\">\n      <div class=\"container\">\n        {% raw %}\n        <h3>Backend Technology</h3>\n        <h4>What services do you use to send Push Notifications?</h4>\n        <bar-chart data=\"{\n          'Firebase/GCM': 41.3,\n          'Amazon': 8.2,\n          'OneSignal': 10.6,\n          'Urban Airship': 1.1,\n          'Pushwoosh': 2.4,\n          'Ionic Push': 19.7,\n          'Custom push system': 12.3,\n          'I don\\'t send push notifications': 27.7,\n          'Other': 4.7\n        }\"></bar-chart>\n  \n        <h4>How do you manage user authentication?</h4>\n        <bar-chart data=\"{\n          'Firebase Auth': 30,\n          'GCP Auth': 2.3,\n          'Auth.io': 6,\n          'Auth0': 17.7,\n          'Stormpath': 0.7,\n          'Fabric Digits': 0.7,\n          'Amazon Cognito': 2.5,\n          'Azure Authentication': 2.9,\n          'Ionic Auth': 12.3,\n          'Custom oAuth': 43.7,\n          'Other': 14\n        }\"></bar-chart>\n\n        <h4>What database(s) do you use for your backend?</h4>\n        <bar-chart data=\"{\n          'Firebase':\t32.4,\n          'Self-hosted SQL database':\t57.4,\n          'AWS DynamoDB':\t4.1,\n          'AWS RDS':\t7.4,\n          'Heroku Postgres':\t5,\n          'Self-hosted MongoDB':\t17.6,\n          'Cloud hosted MongoDB':\t11.8,\n          'Ionic DB (beta)':\t3,\n          'I don\\'t use a database':\t3.1,\n          'Other':\t9.6\n        }\"></bar-chart>\n  \n        <h4>How do you host the server-side of your app?</h4>\n        <bar-chart data=\"{\n          'Client-side database': 21.4,\n          'AWS Lambda': 5.9,\n          'Amazon ECS': 16.8,\n          'AWS LightSail': 0.9,\n          'Google App Engine/GCP': 7.5,\n          'Heroku': 13.2,\n          'Azure': 9.8,\n          'Digital Ocean': 15.6,\n          'Classic VPS provider': 10,\n          'Self-hosted Virtual Server': 22.1,\n          'Self-hosted Docker': 7.5,\n          'Self-hosted Dedicated': 22.1,\n          'Other': 5.4\n        }\"></bar-chart>\n  \n        <h4>What backend technology does your app run on?</h4>\n        <bar-chart data=\"{\n          'Node.js': 56.6,\n          'Python (Django, Flask, etc)': 11.7,\n          'Ruby (on rails or otherwise)': 5.5,\n          'Java': 18.6,\n          'C#/.NET': 16.4,\n          'Other': 27.6\n        }\"></bar-chart>\n  \n        <h4>What service do you use for Analytics?</h4>\n        <bar-chart data=\"{\n          'Google Analytics': 68.3,\n          'Firebase Analytics': 24.9,\n          'Amazon Mobile Analytics': 2.6,\n          'Fabric Answers': 2.9,\n          'Mixpanel': 3.7,\n          'Keen': 0.6,\n          'Segment': 1,\n          'Amplitude': 0.5,\n          'Localytics': 0.6,\n          'Adobe': 0.9,\n          'Ionic Analytics': 6.8,\n          'Custom Analytics': 15.6,\n          'Other': 8.1\n        }\"></bar-chart>\n  \n        <h4>How do you test your app in the cloud?</h4>\n        <bar-chart data=\"{\n          'AWS Device Farm': 4.5,\n          'Firebase Test Lab': 11.5,\n          'Browserstack': 6.1,\n          'Sauce Labs': 1.8,\n          'Custom device testing system': 17.6,\n          'I don\\'t do cloud device testing': 65.1,\n          'Other': 1.9\n        }\"></bar-chart>\n  \n        <h4>How do you track errors and crashes in your app?</h4>\n        <bar-chart data=\"{\n          'Fabric/Crashlytics': 9.6,\n          'Firebase crash reporting': 17.4,\n          'Sentry': 5.2,\n          'TrackJS': 3.8,\n          'Bugsnag': 1.7,\n          'Opbeat': 0.5,\n          'Rollbar': 2.2,\n          'Custom system': 23.1,\n          'I don\\'t track errors or crashes': 44,\n          'Other': 4.4\n        }\"></bar-chart>\n  \n        <h4>How do you update your apps remotely?</h4>\n        <bar-chart data=\"{\n          'Ionic Deploy': 23.9,\n          'Microsoft Code Push': 10.3,\n          'PhoneGap ContentSync': 2.1,\n          'PhoneGap Hydration': 1.8,\n          'Custom Update System': 14.9,\n          'I do not push updates to my app remotely': 53.2,\n          'Other': 2.9\n        }\"></bar-chart>\n      </div>\n    </section>\n    <section id=\"data-tools\" class=\"data animate-in\">\n      <div class=\"container\">\n        <h3>Tools and Testing</h3>\n        <div class=\"container\">\n        <h4>What Text Editor or IDE do you use?</h4>\n        <bar-chart data=\"{\n          'Visual Studio Code': 46.7,\n          'Visual Studio IDE': 12.7,\n          'Atom': 25.2,\n          'Webstorm': 21.6,\n          'Sublime Text': 31,\n          'TextMate': 1,\n          'Brackets': 6.1,\n          'Other': 13.1\n        }\"></bar-chart>\n  \n        <h4>Use any App Prototyping tools?</h4>\n        <bar-chart data=\"{\n          'Ionic Creator': 22.8,\n          'Invision': 10.1,\n          'Marvel': 4,\n          'Baslamiq': 12,\n          'Sketch': 17.6,\n          'I don\\'t use any app prototyping tools': 48.3,\n          'Other': 5.8\n        }\"></bar-chart>\n  \n        <h4>How do you beta test and gather feedback?</h4>\n        <bar-chart data=\"{\n          'Ionic View': 36.2,\n          'Hockeyapp': 5.1,\n          'Testflight': 24.8,\n          'TestFairy': 2,\n          'I don\\'t use any beta testing/feedback tools': 40.9,\n          'Other': 5.5\n        }\"></bar-chart>\n  \n        <h4>How do you distribute your apps to users?</h4>\n        <bar-chart data=\"{\n          'App store (Apple, Google Play, etc)': 81.5,\n          'MobileIron': 1.1,\n          'Airwatch': 1.2,\n          'Microsoft Intune': 0.8,\n          'Ionic View (as an internal app store, etc)': 12.3,\n          'Hosted web apps or desktop downloads': 27.6,\n          'Other': 2.7\n        }\"></bar-chart>\n      </div>\n    </section>\n    <section id=\"data-meta\" class=\"data animate-in\">\n      <div class=\"container\">\n        <h3>Meta Stuff</h3>\n        <h4>What platform do you develop your apps on?</h4>\n        <bar-chart data=\"{\n          'Mac': 57.9,\n          'Windows': 55.4,\n          'Linux': 28.9,\n          'Other': 0.8\n        }\"></bar-chart>\n  \n        <h4>How big is your employer?</h4>\n        <bar-chart data=\"{\n          'Self-employed - me, myself, and I': 40.3,\n          '2-10': 31,\n          '11-50': 13.7,\n          '51-500': 8.2,\n          '500+': 6.8\n        }\"></bar-chart>\n  \n        <h4>Who are you building apps for?</h4>\n        <bar-chart data=\"{\n          'App for my company': 33.3,\n          'App for a client': 41.9,\n          'Side project': 18.6,\n          'School': 4,\n          'Other': 2.2\n        }\"></bar-chart>\n  \n        <h4>How many Ionic apps have you built?</h4>\n        <bar-chart data=\"{\n          '0': 9.6,\n          '1': 24.5,\n          '2-5': 52.2,\n          '6-10': 8.2,\n          '10+': 5.1,\n          'Other': 0.5\n        }\"></bar-chart>\n  \n        <h4>What kind of apps are you building?</h4>\n        <bar-chart data=\"{\n          'Consumer social network': 24,\n          'Consumer chat': 12.2,\n          'Consumer general': 60.7,\n          'Enterprise internal app': 41.7,\n          'Progressive Web Apps': 25.1,\n          'Desktop apps (electron, etc)': 12.3,\n          'Desktop web apps': 18.5,\n          'Other': 4.5\n        }\"></bar-chart>\n  \n        <h4>What platforms do you target?</h4>\n        <bar-chart data=\"{\n          'iOS': 83.2,\n          'Android': 94.3,\n          'Tablet (iPad, Android Tablets, etc)': 45.1,\n          'Universal Windows Platform': 10.7,\n          'Desktop Mac': 13.5,\n          'Desktop Windows': 20,\n          'Mobile Web/Progressive Web App': 31.5,\n          'Responsive web': 34.7,\n          'Smart watches': 3,\n          'TVs': 2.7,\n          'Other': 0.7\n        }\"></bar-chart>\n  \n        <h4 style=\"animation-delay: 1.1s\">What is your background?</h4>\n        <bar-chart data=\"{\n          'Newbie learning mobile dev': 10.8,\n          'Web developer new to mobile': 38.4,\n          'Web developer experienced with mobile': 39.1,\n          'Mobile developer born and bred': 8.4,\n          'Other': 3.3\n        }\"></bar-chart>\n  \n        <h4 style=\"animation-delay: 1.3s\">What version of Ionic are you using?</h4>\n        <bar-chart data=\"{\n          'Ionic 1': 41.3,\n          'Ionic 2+': 73.3,\n          'Other': 3.3\n        }\"></bar-chart>\n  \n        <h4>\n          In the past two years, what percentage of your apps were hybrid (mix \n          of web and native code)?<br>\n          What percentage do you expect in the next two years?\n        </h4>\n        <bar-chart data=\"{\n          categories: ['All Native Apps', 'Mix Hybrid & Native', 'All Hybrid'],\n          data: [\n            {name: '2015-2017', values: [20.1, 55.5, 24.4], color: '#4a8bfc'},\n            {name: '2017-2019', values: [2.9, 64.4, 32.7], color: '#4afcbb'}\n          ]\n        }\"></bar-chart>\n        {% endraw %}\n      </div>\n    </section>\n    <hgroup class=\"text-center data\">\n      <div class=\"container\">\n        <h2>Methodology</h2>\n        <p class=\"lg\">\n          The Ionic Developer Survey was fielded from February 2017 to June \n          2017. A total of 13,248 respondents completed the survey during that \n          period. Responses were collected directly by Ionic using Google Forms. \n          Analysis of the results was performed by Ionic following completion of \n          the survey in June 2017.\n        </p>\n      </div>\n    </hgroup>\n  </article>\n</main>\n\n{% endblock %}\n\n{% block scripts %}\n<script src=\"https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.6.8/angular.min.js\"></script>\n<script src=\"https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.6.8/angular-animate.min.js\"></script>\n<script src=\"https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.6.8/angular-cookies.min.js\"></script>\n<script src=\"https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.6.8/angular-sanitize.min.js\"></script>\n<link rel=\"stylesheet\" href=\"https://cdnjs.cloudflare.com/ajax/libs/c3/0.5.2/c3.min.css\" />\n<script src=\"https://cdnjs.cloudflare.com/ajax/libs/d3/4.13.0/d3.min.js\"></script>\n<script src=\"https://cdnjs.cloudflare.com/ajax/libs/c3/0.5.2/c3.min.js\"></script>\n<script>\nvar IonicSiteModule = angular.module('IonicSite',\n  ['ngAnimate', 'ngSanitize', 'ngCookies']);\n\nIonicSiteModule\n.controller('SurveyCtrl', ['$scope', '$timeout', function($scope, $timeout) {\n  var currentSection = window.location.hash;\n\n  function scrollCheck() {\n    scrollPos = document.body.scrollTop || \n                document.documentElement.scrollTop || 0;\n    if (scrollPos < 200 && currentSection) {\n      currentSection = null;\n      window.location.hash = '';\n      history.replaceState({}, \"\", '');\n    }\n  };\n\n  window.addEventListener('scroll',function(){$timeout(scrollCheck)});\n\n  // Scrollspy\n  $('body').scrollspy({\n    offset: 150\n  });\n\n  // update the URL on scrollspy change\n  $(window).on('activate.bs.scrollspy', function (e) {\n    currentSection = $(\"a[href^='#']\", e.target).attr(\"href\");\n    history.replaceState({}, \"Ionic Framework - Survey-2017\", currentSection);\n  });\n\n  // canvas animation at the top\n  function init() {\n    canvas = document.getElementById('statistical-suspension'); \n    banner = document.getElementById('survey-banner');\n    context = canvas.getContext('2d');\n    canvasSize = {}\n    canvas.height = banner.offsetHeight * 2;\n    canvas.width = window.innerWidth * 2;\n    mouse = {x:0,y:0};\n    banner.addEventListener('mousemove',MouseMove,false);\n    banner.addEventListener('mousedown',MouseDown,false);\n    banner.addEventListener('mouseup',MouseUp,false);\n    banner.addEventListener('resize',canvasResize,false);\n    maxDistance = Math.sqrt(Math.pow(canvas.height,2) + Math.pow(canvas.width,2))\n    // console.log(maxDistance)\n    dotsHolder = [];\n    \n    mouseMove = false;\n    mouseDown = false;\n    for(i = 0;i < 50;i++) {\n      dotsHolder.push(new dots());\n    }\n  }\n\n  function canvasResize(event) {\n    canvas.height = 305;\n    canvas.width = window.innerWidth;\n    cancelAnimationFrame(animate);\n  }\n\n  function MouseUp(event) {\n    if(mouseMove) {\n      mouseMove = false;\n    }  \n    if(mouseDown) {\n      mouseDown = false;\n    }\n  }\n\n  function MouseDown(event) {\n    mouseDown = true;\n  }\n\n  function MouseMove(event) {\n    mouse.x = (event.pageX - canvas.offsetLeft) * 2;\n    mouse.y = (event.pageY - canvas.offsetTop) * 2;\n    if(mouseMove) {\n      context.lineTo(mouseX,mouseY);\n      context.stroke();\n    }\n  }\n\n  function dots() {\n    this.xPos = Math.random()*canvas.width;\n    this.yPos = Math.random()*canvas.height;\n    this.color = '#fff';\n    this.radius = ((Math.random() * .5) + .5) * 100; \n    this.vx = Math.cos(this.radius) / 4;\n    this.vy = Math.sin(this.radius) / 4;\n    this.friction = 7;\n    this.speedX = this.vx;\n    this.speedY = this.vy;\n  } \n  \n  dots.draw = function() {\n    context.clearRect(0,0,canvas.width,canvas.height);\n    for(var c = 0; c < dotsHolder.length;c++) {\n      dot = dotsHolder[c]; \n      context.beginPath();\n      distanceX = dot.xPos - mouse.x;\n      distanceY = dot.yPos - mouse.y;\n      var particleDistance =  Math.sqrt(Math.pow(distanceX,2) + Math.pow(distanceY, 2));\n      var particleMouse = Math.pow(Math.max(1.2 - particleDistance / maxDistance, 1), 4);\n      context.fillStyle = dot.color;\n      context.globalAlpha = (c / dotsHolder.length / 2) + .5;\n      dot.xPos += dot.vx;\n      dot.yPos += dot.vy;\n      if(dot.xPos < -50) {dot.xPos = canvas.width+50;}\n      if(dot.yPos < -50) {dot.yPos = canvas.height+50;}\n      if(dot.xPos > canvas.width+50) {dot.xPos = -50;}\n      if(dot.yPos > canvas.height+50) {dot.yPos = -50;}\n      context.font = (dot.radius * particleMouse ) + \"px Arial\";\n      context.fillText(c % 2 ? \"°\" : '+',dot.xPos,dot.yPos);\n      context.fill();\n\n    }\n  }\n  \n  function animate() {\n    requestAnimationFrame(animate);\n    dots.draw();\n  }\n\n  init();\n  animate();\n  \n}])\n.directive('barChart', [function() {\n  return {\n    restrict: 'E',\n    scope: {\n      data: '='\n    },\n    compile: function(el, attrs) {\n      return {\n        post: function(scope, element, $attrs) {\n\n          if (!scope.data.data && !scope.categories) {\n            var data = Object.keys(scope.data).map(function(k) {\n              return {label: k, value: scope.data[k]};\n            }).sort(function(a, b) {\n              if(a.value < b.value) return 1;\n              if(a.value > b.value) return -1;\n              return 0;\n            });\n\n            var bars = ['data1'].concat(data.map(function(bar) {\n              return bar.value;\n            }));\n            var labels = data.map(function(bar) {\n              return bar.label;\n            });\n\n            var chart = c3.generate({\n              bindto: el[0],\n              data: {\n                columns: [ bars ],\n                type: 'bar',\n                labels: {\n                  show: true,\n                  format: function(v) { return v + '%'; }\n                },\n                colors: {\n                  data1: '#4a8bfc'\n                },\n              },\n              padding: {\n                left: 250,\n              },\n              size: {\n                height: 20 * labels.length\n              },\n              bar: {\n                width: {\n                  ratio: 0.2 // this makes bar width 50% of length between ticks\n                }\n              },\n              axis: {\n                rotated: true,\n                x: {\n                  type: 'category',\n                  categories: labels,\n                  tick: {\n                    multiline: false,\n                    outer: false\n                  },\n                  height: 50,\n                  width: 200\n                },\n                y: {\n                  show: false\n                }\n              },\n              legend: {\n                show: false\n              },\n              tooltip: {\n                show: false\n              }\n            });\n\n            return;\n          }\n\n          var colors = {};\n          scope.data.data.forEach(function(bar, i) {\n            colors['data' + (i + 1)] = bar.color;\n          });\n          var columns = scope.data.data.map(function(k, i) {\n            return ['data' + (i + 1)].concat(k.values);\n          })\n          names = {};\n          scope.data.data.forEach(function(bar, i) {\n            names['data' + (i + 1)] = bar.name;\n          });\n\n          // console.log(colors, columns)\n\n          var chart = c3.generate({\n            bindto: el[0],\n            data: {\n              columns: columns,\n              type: 'bar',\n              labels: {\n                show: true,\n                format: function(v) { return v + '%'; }\n              },\n              colors: colors,\n              names: names\n            },\n            bar: {\n              width: {\n                ratio: 0.8 // this makes bar width 50% of length between ticks\n              }\n            },\n            grid: {\n              y: {\n                show: true\n              }\n            },\n            axis: {\n              x: {\n                type: 'category',\n                categories: scope.data.categories,\n                tick: {\n                  multiline: false,\n                  outer: false\n                },\n                height: 50,\n                width: 200\n              },\n              y: {\n                tick: {\n                  format: function(v) { return v + '%'; }\n                }\n              }\n            },\n            legend: {\n              show: true\n            },\n            tooltip: {\n              show: false\n            }\n          });\n        }\n      }\n    }\n  }\n}])\n;\n\n</script>\n{% endblock %}"
  },
  {
    "path": "server/pages/survey/2018.html",
    "content": "{% extends \"_layouts/base.html\" %}\n{% set id = 'survey-2018' %}\n{% set bodyController = 'SurveyCtrl' %}\n{% set name = '2018 Developer Survey' %}\n{% set meta_image = 'https://ionicframework.com/img/survey/survey-meta-2018.png' %}\n{% set header_style = 'transparent survey-layout' %}\n{% set cssPath = 'survey/2018' %}\n\n{% block body_attributes %}\n  data-spy=\"scroll\" data-target=\"#survey-2018-nav\" data-offset=\"400\"\n{% endblock %}\n\n{% block main %}\n<div class=\"cta banner\" id=\"survey-banner\">\n  {# <canvas id=\"statistical-suspension\"></canvas> #}\n  <figure id=\"bars-and-cubes\">\n    {% include '_includes/svg/survey-2018-bars.html' %}\n    {% include '_includes/svg/survey-2018-cubes.html' %}\n  </figure>\n  <hgroup class=\"container\">\n    <h2>\n      <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n        <path d=\"M19.8516 7.01706C21.2288 7.01706 22.3453 5.90056 22.3453 4.5233C22.3453 3.14603 21.2288 2.02954 19.8516 2.02954C18.4743 2.02954 17.3578 3.14603 17.3578 4.5233C17.3578 5.90056 18.4743 7.01706 19.8516 7.01706Z\" \n              fill=\"white\"/>\n        <path d=\"M22.9219 7.02656L22.8187 6.79688L22.65 6.98438C22.2422 7.44844 21.7219 7.80469 21.1453 8.02031L20.9859 8.08125L21.0516 8.23594C21.5484 9.43125 21.8016 10.6969 21.8016 11.9953C21.8016 17.4 17.4047 21.8016 11.9953 21.8016C6.58594 21.8016 2.19375 17.4047 2.19375 12C2.19375 6.59531 6.59531 2.19375 12 2.19375C13.4672 2.19375 14.8828 2.5125 16.2 3.14062L16.3547 3.21562L16.4203 3.06094C16.6594 2.49844 17.0437 1.99687 17.5266 1.60781L17.7234 1.44844L17.4984 1.33125C15.7875 0.45 13.9359 0 12 0C5.38125 0 0 5.38125 0 12C0 18.6187 5.38125 24 12 24C18.6187 24 24 18.6187 24 12C24 10.2703 23.6391 8.59687 22.9219 7.02656Z\" \n              fill=\"white\"/>\n        <path d=\"M12.1828 6.53459C9.02342 6.43147 6.43122 9.02365 6.53435 12.183C6.6281 15.0471 8.95311 17.3768 11.8172 17.4658C14.9766 17.569 17.5688 14.9768 17.4657 11.8174C17.3719 8.95334 15.0469 6.62834 12.1828 6.53459Z\" \n              fill=\"white\"/>\n      </svg>\n      <span>2018</span>\n    </h2>\n    <h1>Developer Survey</h1>\n    <p>2018's biggest insights, trends, and perspectives from the worldwide Ionic community.</p>\n  </hgroup>\n  <div class=\"bar tabbed\" data-spy=\"affix\" data-offset-top=\"500\">\n    <div class=\"container\" id=\"survey-2018-nav\">\n      <ul class=\"categories nav\">\n        <li><a class=\"anchor\" href=\"#introduction\">introduction</a></li>\n        <li><a class=\"anchor\" href=\"#trends\">trends</a></li>\n        <li><a class=\"anchor\" href=\"#tools\">tools</a></li>\n        <li><a class=\"anchor\" href=\"#pwas\">pwas</a></li>\n        <li><a class=\"anchor\" href=\"#backend\">backend</a></li>\n        <li><a class=\"anchor\" href=\"#results\">results</a></li>\n      </ul>\n    </div>\n  </div>\n</div>\n\n<main>\n  <aside id=\"social-share-sidebar\" \n         class=\"meta activeOnLoad social-links active\" \n         role=\"complementary\" \n         data-spy=\"affix\" \n         data-offset-top=\"550\">\n    <h4>Share</h4>\n    <ul>\n      <li>\n        <a href=\"http://twitter.com/home?status=2018+Ionic+Developer+Survey+results+https%3A%2F%2Fionicframework.com%2Fsurvey%2F2018\"\n           onclick=\"window.open(this.href, 'Share via Twitter', 'width=400, height=300'); return false;\"\n           class=\"twitter\"></a></li>\n      <li>\n        <a href=\"http://www.facebook.com/share.php?u=https%3A%2F%2Fionicframework.com%2Fsurvey%2F2018&amp;title=2018+Ionic+Developer+Survey+results\"\n           onclick=\"window.open(this.href, 'Share via Facebook', 'width=555, height=656'); return false;\"\n           class=\"facebook\"></a></li>\n      <li>\n        <a href=\"https://buffer.com/add?text=2018+Ionic+Developer+Survey+results&amp;url=https%3A%2F%2Fionicframework.com%2Fsurvey%2F2018\"  \n           onclick=\"window.open(this.href, 'Share via Buffer', 'width=500, height=600'); return false;\"\n           class=\"buffer\"></a></li>\n    </ul>\n  </aside>\n  <article>\n    <hgroup class=\"text-center intro\" id=\"introduction\">\n      <div class=\"container\">\n        <h3>2018, a year of JS growth.</h3>\n        <p class=\"lg\">\n          Welcome to Ionic’s second-annual Developer Survey. Over 10,000 members \n          of the community shared their stories about the tools and technologies \n          they use to develop apps, and what types of apps they’re building.\n        </p>\n        <p class=\"lg\">\n          2018’s results reveal some very interesting trends that, we hope, \n          will serve Ionic community members, customers, and vendors alike. \n          While we encourage you to check out the data yourself, here are the \n          top insights and observations from our team at Ionic.\n        </p>\n      </div>\n    </hgroup>\n\n    <section id=\"trends\" class=\"clearfix animate-in\">\n      <div class=\"container\">\n        <h3>JS Trends</h3>\n        <div class=\"col-md-6\">\n          <ul id=\"big-three\">\n            <li class=\"angular\"></li>\n            <li class=\"react\"></li>\n            <li class=\"vue\"></li>\n          </ul>\n          <h4 class=\"h4\">The big three: Angular, React, and Vue.</h4>\n          <blockquote>\n            JavaScript is without a doubt the most commonly used programming \n            language in the world. \n          </blockquote>\n          <p>\n            While this excites those of us who have bet on the web, it’s \n            popularity, unfortunately, led to the rise of framework fatigue in \n            the mid-2010s. Many developers felt like it was impossible to keep \n            up with the constant barrage of new frameworks, techniques, and \n            ideas.\n          </p><p>\n            Fast forwarding to 2018, things have settled down a bit. Three top \n            contenders have emerged: Angular, React, and Vue.\n          </p>\n        </div>\n        <div class=\"col-md-6\">\n          <p>\n            Angular is by far the most popular JS framework among developers \n            surveyed with React and Vue coming in as the second and third most \n            popular frameworks. This is not surprising given the survey is \n            largely a reflection of the Ionic community as of this year, and \n            Ionic has historically been exclusively Angular-compatible.\n          </p>\n          <h4 class=\"h4\">\n            What to Expect in 2019.\n          </h4>\n          <p>\n            As we introduce versions of Ionic that <a target=\"_blank\" \n            href=\"https://blog.ionicframework.com/a-vue-from-ionic/\">support Vue \n            </a>(currently in alpha) and React (coming in 2019), we expect to \n            see the mix of Ionic developers surveyed shift more towards these \n            Angular alternatives.\n          </p>\n        </div>\n      </div>\n    </section>\n\n    <section id=\"tools\" class=\"clearfix animate-in\">\n      <div class=\"container\">\n        <h3>Mobile Tools &amp; Approaches</h3>\n        <div class=\"col-md-6\">\n          <h4 class=\"h4\">The top mobile dev tools</h4>\n          <p>\n            It’s also not surprising to find that Ionic and Cordova/PhoneGap are \n            the most popular mobile development stack among the developers we \n            surveyed. React Native and jQuery Mobile came next on the list, \n            though were much less popular by comparison.\n          </p><p>\n            What is surprising though, is that native Android and iOS \n            development was more widely adopted among developers surveyed than \n            cross-platform alternatives like NativeScript and Xamarin, \n            suggesting that (at least among the developers we surveyed) these \n            two cross-platform approaches are more niche players in the mobile \n            development space.\n          </p>\n          <h4>Cross-platform vs. Native</h4>\n          <blockquote class=\"pink\">\n            Only about 8 percent of survey takers reported exclusive use of native tools.\n          </blockquote>\n          <p>\n            Given our audience, it’s not too surprising that the results are \n            heavily skewed towards cross-platform development. \n          </p>\n        </div>\n        <div class=\"col-md-6\">\n          <p>\n            Traditionally, frameworks that have promised to deliver \n            cross-platform functionality have been met with disbelief. However, \n            the numbers don’t lie. Cross-platform solutions like Ionic, React \n            Native, and Xamarin have had many years of active development, \n            innovation, and adoption, proving that companies that pick them over \n            native are seeing success.\n          </p>\n          <ul class=\"tools\">\n            <li class=\"ionic\"></li>\n            <li class=\"react\"></li>\n            <li class=\"xamarin\"></li>\n          </ul>\n          <h4 class=\"h4\">Most important factors? Efficiency &amp; UX</h4>\n          <blockquote>\n            The efficiency of sharing code across platforms was the <i>most</i> \n            important factor in selecting a development approach.\n          </blockquote>\n          <p>\n            But for those who develop strictly with native tools, quality of \n            user experience was the number one most important factor.\n          </p>\n          <p>\n            And, for those who develop strictly with cross-platform tools, \n            efficiency and cost savings were most important. Showcasing that the \n            motivations for using these different technologies widely vary \n            depending on the developer’s priorities.\n          </p>\n        </div>\n      </div>\n    </section>\n\n    <section id=\"pwas\" class=\"clearfix animate-in\">\n      <div class=\"container\">\n        <h3>Progressive Web Apps</h3>\n        <div class=\"col-md-6\">\n          <h4 class=\"h4\">Most building or planning PWAs in 2018</h4>\n          <blockquote>\n            Sixty-one percent of developers surveyed said they have built a <a\n            href=\"/pwa\" target=\"_blank\">Progressive Web App (PWA)</a>, or plan \n            to in the next year.\n          </blockquote>\n          <p>\n            PWAs use modern web capabilities to deliver fast, native-app \n            experiences with no app stores or downloads. They offer incredible \n            mobile app experiences that are highly optimized, reliable, and \n            accessible anywhere you find a web browser.\n          </p><p>\n            In most cases (72 percent) these PWA projects are for brand new \n            apps, as opposed to just 28 percent that are updates to existing \n            apps (PWA functionality can be incrementally added to an existing \n            web app).\n          </p>\n          <aside>\n            <div class=\"factoid\">\n              <strong>72%</strong>\n              <span>brand new PWAs</span>\n            </div>\n            <div class=\"factoid\">\n              <strong>28%</strong>\n              <span>update existing</span>\n            </div>\n          </aside>\n          <h4 class=\"h4\">PWAs Complementing, Not Replacing, Native Mobile Apps</h4>\n          <p>\n            About 42 percent reported that the PWAs they’re building will also \n            exist as native apps available in the app stores. With another 36 \n            percent responding “Maybe” to the same question, and just 22 percent \n            sharing that the PWAs they’re building will only exist on the web.\n          </p><p>\n            This suggests that PWAs will likely not replace native apps, at \n            least not in the near term, but instead will be just one part of \n            unified “digital experience” that spans across devices and across \n            native and web.\n          </p>\n        </div>\n        <div class=\"col-md-6\">\n          <h4>PWAs = Efficiency Above All</h4>\n          <p>\n            By far, the most popular reason for investing in PWAs is the desire \n            for greater cross-platform efficiency. Improving the mobile web \n            experience and distributing apps directly to users (without having \n            to go through the app stores) were the next most popular.\n          </p><p>\n            A lot of the hype around PWAs is the improved ability to reach users \n            outside of the app stores, creating a better mobile experience that \n            translates into higher engagement and more revenue. See <a \n            href=\"https://www.pinterest.com\" target=\"_blank\">Pinterest</a> and \n            <a href=\"https://mobile.twitter.com\" target=\"_blank\">Twitter‘s</a> \n            use of PWAs for example.\n          </p><p>\n            However, our survey shows that simplified operations, which make it \n            easier for a development team to manage and maintain the app, is by \n            far the most significant gain that teams have experienced after \n            implementing a PWA. What this shows us is that for those that choose \n            to build PWAs for their ease-of-use and productivity are actually \n            seeing the desired results.\n          </p>\n          <h4 class=\"h4\">Preferred tools for building PWAs</h4>\n          <p>\n            Ionic and Angular were the most popular tools for building PWAs, \n            followed by React and Vue. Though all three have support for PWAs, \n            Angular’s is the most mature.\n          </p><p>\n            Firebase and AWS are the leading players in PWA-hosting.\n          </p>\n        </div>\n      </div>\n    </section>\n\n    <section id=\"backend\" class=\"clearfix animate-in\">\n      <div class=\"container\">\n        <h3>Backend Tools &amp; Services</h3>\n        <div class=\"col-md-6\">\n          <h4 class=\"h4\">At the top: MySQL, Firebase, MongoDB</h4>\n          <p>\n            In last year’s survey, we aggregated all self-hosted database \n            options (MySQL, Postgres, etc.) into one set of responses. This year \n            we split it out.\n          </p>\n          <ul class=\"tools\">\n            <li class=\"mysql\"></li>\n            <li class=\"firebase\"></li>\n            <li class=\"mongodb\"></li>\n            <li class=\"postgres\"></li>\n          </ul>\n          <p>\n            The results showed that MySQL is by far the most popular database \n            solution, with 59 percent of respondents having used it extensively \n            in the past year. Firebase was not far behind, followed by MongoDB. \n            Postgres was much further down the list.\n          </p>\n          <h4 class=\"h4\">Firebase Dominates Hosting Platforms</h4>\n          <p>\n            No surprise here—Firebase continues to be the leading hosting platform and is by far the winner in push notifications with 66 percent of respondents using it.\n          </p>\n        </div>\n        <div class=\"col-md-6\">\n          <h4 class=\"h4\">Keeping An Eye On Serverless</h4>\n          <p>\n            Worth a special mention is the growing “serverless” trend this past year.\n          </p>\n          <p>\n            With serverless options like <a href=\"https://aws.amazon.com/lambda/\"\n            target=\"_blank\">AWS Lambda</a> (used by just 10 percent of \n            respondents in 2018), web developers can use their frontend skills \n            to do things that typically would be passed off to backend \n            developers <img height=\"168\" class=\"pull-right\" alt=\"Amazon Lambda\" \n            width=\"168\" src=\"/img/survey/lambda.png\"/>to implement. \n            Authentication, real-time databases, storage, and cloud functions \n            are just the tip of the iceberg.\n          </p><p>\n            The most exciting part of this is not the lack of running your own \n            infrastructure, but rather, that web developers’ skills becoming \n            more valuable as technology evolves.\n          </p>\n        </div>\n      </div>\n    </section>\n\n    <section id=\"big-picture\" class=\"clearfix text-center dark animate-in\">\n      <div class=\"container\">\n        <h3>Big Picture</h3>\n        <p class=\"lg blue\">Betting on the web has paid off. 💙</p>\n        <p class=\"lg\">\n          The web framework ecosystem has stabilized. PWAs are becoming \n          mainstream and delivering real-world results. Web developers are \n          becoming more valuable each day as innovations in cloud technologies \n          unlock the path to full-stack development.\n        </p><p class=\"lg\">\n          More people than ever are confident that their investment in time, \n          money, and skills as web developers will continue to bear fruit for \n          years to come. Companies are investing capital into their web strategy \n          and reaping big returns after realizing that “cross-platform” doesn’t \n          only mean “mobile.”\n        </p><p class=\"lg\">\n          <strong>Ionic has always bet on the web, and it looks like now more \n          than ever, we’re not alone.</strong>\n        </p>\n      </div>\n    </section>\n\n    <div id=\"results\" class=\"dark\">\n      <hgroup class=\"container\">\n        <h2>Survey Results</h2>\n        <p class=\"lg\">\n          Data from the survey is available below.  Feel free to interact, play, \n          and form your own conclusions!\n        </p>\n      </hgroup>\n      <section id=\"demographics\" class=\"data animate-in\">\n        <div class=\"container\">\n          {% raw %}\n          <h3>Demographics</h3>\n          <h4>What types of apps are you building?</h4>\n          <ionic-bar-chart data=\"{\n            'Consumer focused apps (B2C)': 76,\n            'Employee and partner focused apps (B2E)': 43,\n            'Business to business (B2B)': 1,\n            'Other': 2\n          }\"></ionic-bar-chart>\n  \n          <h4>Which of the following best describes the type of environment you work in?</h4>\n          <ionic-bar-chart data=\"{\n            'Startup': 32,\n            'Enterprise app dev team': 26,\n            'Indie developer': 20,\n            'External agency, building on behalf of clients': 19,\n            'Other': 2\n          }\"></ionic-bar-chart>\n          \n          <h4>Which of the following best describes your current job role?</h4>\n          <ionic-bar-chart data=\"{\n            'Web Developer': 37,\n            'Entrepreneur (I do it all)': 16,\n            'Native Mobile Developer': 7,\n            'Team Lead': 7,\n            'Head of Application Development': 7,\n            'CTO': 6,\n            'Backend Developer': 6,\n            'Architect': 5,\n            'UX Designer': 1,\n            'CIO or VP of IT': 1,\n            'Other': 6\n          }\"></ionic-bar-chart>\n          \n          <h4>About how many employees work at your company?</h4>\n          <ionic-bar-chart data=\"{\n            'Self-employed (me, myself, and I)': 26,\n            '1-10 employees': 33,\n            '11-50 employees': 19,\n            '51-500 employees': 12,\n            '501-1000 employees': 3,\n            '1001-5000 employees': 3,\n            '5,001+ employees': 5\n          }\"></ionic-bar-chart>\n        </div>\n      </section>\n  \n      <section id=\"tools\" class=\"data animate-in\">\n        <div class=\"container\">\n          <h3>Frameworks, Tools, and Approaches</h3>\n          \n          <h4>Which of the following JavaScript frameworks and libraries have you done extensive development work in over the past year?</h4>\n          <ionic-bar-chart data=\"{\n            'Angular': 86,\n            'React': 23,\n            'Vue': 17,\n            'Stencil': 4,\n            'EXT JS': 3,\n            'Backbone': 3,\n            'Meteor': 3,\n            'Polymer': 3,\n            'Ember': 2,\n            'DoJo': 1,\n            'Skate': 0\n          }\" color=\"#E54385, #786DF9\"></ionic-bar-chart>\n          \n          <h4>Which of the following <i>mobile development</i> tools, libraries, and frameworks have you done extensive development work in over the past year?</h4>\n          <ionic-bar-chart data=\"{\n            'Ionic': 83,\n            'Cordova / PhoneGap': 49,\n            'Native Android': 22,\n            'React Native': 14,\n            'jQuery Mobile': 13,\n            'Native iOS': 13,\n            'Xamarin': 7,\n            'NativeScript': 6,\n            'Ext JS': 2\n          }\" color=\"#E54385, #786DF9\"></ionic-bar-chart>\n          \n          <h4>Over the past year, what percentage of the apps you developed were built using a cross-platform approach (e.g. Ionic, Xamarin, React Native, etc.)?</h4>\n          <ionic-bar-chart data=\"{\n            '0% - Only develop with native tools': 8,\n            '25% or greater': 13,\n            '50% or greater': 12,\n            '75% or greater': 16,\n            '100% - Only use cross-platform tools': 52\n          }\" color=\"#E54385, #786DF9\"></ionic-bar-chart>\n  \n          <h4>What is the <i>most</i> important factor when deciding on a mobile development approach?</h4>\n          <ionic-bar-chart data=\"{\n            'Cross-platform efficiency (ability to share code across platforms)': 30,\n            'Cost to develop and maintain': 16,\n            'Quality of user experience across platforms': 15,\n            'Speed and time to market': 13,\n            'Performance': 10,\n            'Skills match with development team': 8,\n            'Ease of updates and maintenance': 6,\n            'Other': 1\n          }\" color=\"#E54385, #786DF9\"></ionic-bar-chart>\n  \n          <h4><strong>Native Only Devs:</strong> What is the <i>most</i> important factor when deciding on a mobile development approach?</h4>\n          <ionic-bar-chart data=\"{\n            'Quality of user experience across platforms': 20,\n            'Cross-platform efficiency (ability to share code across platforms)': 20,\n            'Performance': 16,\n            'Cost to develop and maintain': 13,\n            'Speed and time to market': 11,\n            'Skills match with development team': 10,\n            'Ease of updates and maintenance': 8,\n            'Other': 1\n          }\" color=\"#E54385, #786DF9\"></ionic-bar-chart>\n  \n          <h4><strong>Cross-platform Only Devs</strong>: What is the <i>most</i> important factor when deciding on a mobile development approach?</h4>\n          <ionic-bar-chart data=\"{\n            'Cross-platform efficiency (ability to share code across platforms)': 34,\n            'Cost to develop and maintain': 17,\n            'Quality of user experience across platforms': 14,\n            'Speed and time to market': 13,\n            'Skills match with development team': 9,\n            'Performance': 7,\n            'Ease of updates and maintenance': 6,\n            'Other': 1\n          }\" color=\"#E54385, #786DF9\"></ionic-bar-chart>\n  \n          <h4>Which of the following app lifecycle management tools are you currently using?</h4>\n          <ionic-bar-chart data=\"{\n            'Ionic Pro (Appflow)': 53,\n            'Adobe PhoneGap': 16,\n            'Microsoft Mobile App Center': 10,\n            'IBM Mobile Foundation': 2,\n            'None': 9,\n            'Other': 16\n          }\" color=\"#E54385, #786DF9\"></ionic-bar-chart>\n  \n          <h4>Which of the following deployment targets have you developed apps for over the last year?</h4>\n          <ionic-bar-chart data=\"{\n            'Google Play': 78,\n            'iOS App Store': 64,\n            'Web Browser (including PWAs)': 51,\n            'Desktop Container (e.g. Electron)': 14,\n            'Microsoft Store': 4,\n            'Smart TVs': 2,\n            'Wearables': 2\n          }\" color=\"#E54385, #786DF9\"></ionic-bar-chart>\n  \n          <h4>How are you currently distributing apps to your users (check all that apply)?</h4>\n          <ionic-bar-chart data=\"{\n            'App Stores (Apple, Google Play, Microsoft Store, etc.)': 83,\n            'Hosted web apps (including PWAs)': 48,\n            'MDM (MobileIron, Airwatch, XenMobile, etc.)': 4,\n            'Other': 3\n          }\" color=\"#E54385, #786DF9\"></ionic-bar-chart>\n  \n        </div>\n      </section>\n      <section id=\"results-pwas\" class=\"data animate-in\">\n        <div class=\"container\">\n          <h3>Progressive Web Apps</h3>\n  \n          <h4>Have you published a Progressive Web App (PWA) in the last year?</h4>\n          <ionic-bar-chart data=\"{\n            'No': 39,\n            'Yes': 31,\n            'No, but we plan to next year': 30\n          }\" color=\"#FF7B5E, #F37BAB\"></ionic-bar-chart>\n  \n          <h4>Who are you building PWAs for?</h4>\n          <ionic-bar-chart data=\"{\n            'Consumers': 78,\n            'Employees': 32,\n            'Partners': 25,\n            'Other': 3\n          }\" color=\"#FF7B5E, #F37BAB\"></ionic-bar-chart>\n  \n          <h4>Are you updating an existing app or is this a new application?</h4>\n          <ionic-bar-chart data=\"{\n            'Building a brand-new app': 72,\n            'Updating an existing app': 28\n          }\" color=\"#FF7B5E, #F37BAB\"></ionic-bar-chart>\n  \n          <h4>Will the app also be available as a native binary in the app stores?</h4>\n          <ionic-bar-chart data=\"{\n            'Yes': 42,\n            'Maybe': 36,\n            'No': 22\n          }\" color=\"#FF7B5E, #F37BAB\"></ionic-bar-chart>\n  \n          <h4>What is the <i>primary</i> motivation for building a PWA?</h4>\n          <ionic-bar-chart data=\"{\n            'Cross-platform efficiency (easier to serve multiple platforms with one app)': 41,\n            'Improve mobile web experience': 20,\n            'Distribute the app directly to users, without having to rely on third-parties': 19,\n            'Make it easier to update the app whenever we want': 13,\n            'Acquire new users': 4,\n            'Everyone else is doing it': 3\n          }\" color=\"#FF7B5E, #F37BAB\"></ionic-bar-chart>\n  \n          <h4>If you have published a PWA already, what is the biggest impact you have observed so far?</h4>\n          <ionic-bar-chart data=\"{\n            'Simplified operations: Easier for our team to manage and maintain the app': 44,\n            'Better engagement: Increased usage compared to traditional web app': 20,\n            'No impact since publishing the PWA': 18,\n            'Increased user acquisition: More users trying the app': 13,\n            'More revenue: Increased in-app or ad-driven revenue': 4\n          }\" color=\"#FF7B5E, #F37BAB\"></ionic-bar-chart>\n  \n          <h4>Which tools, libraries, or frameworks are you using to build PWAs?</h4>\n          <ionic-bar-chart data=\"{\n            'Ionic': 76,\n            'Angular': 71,\n            'React': 17,\n            'Vue': 15,\n            'Stencil': 7,\n            'Polymer': 3,\n            'Preact': 1,\n            'Other': 1\n          }\" color=\"#FF7B5E, #F37BAB\"></ionic-bar-chart>\n  \n          <h4>How are you hosting the PWA(s)?</h4>\n          <ionic-bar-chart data=\"{\n            'Self-hosted': 38,\n            'Firebase': 28,\n            'AWS': 18,\n            'Azure': 7,\n            'Netlify': 2,\n            'Digital Ocean': 1,\n            'Heroku': 1,\n            'NextJS': 1,\n            'Google Cloud Platform': 1,\n            'Citrix': 0,\n            'Other': 4\n          }\" color=\"#FF7B5E, #F37BAB\"></ionic-bar-chart>\n  \n        </div>\n      </section>\n      <section id=\"backend\" class=\"data animate-in\">\n        <div class=\"container\">\n          <h3>Backend Technology</h3>\n  \n          <h4>Which of the following services do you use to send Push Notifications?</h4>\n          <ionic-bar-chart data=\"{\n            'Firebase': 66,\n            'OneSignal': 24,\n            'GCM': 21,\n            'APNS': 19,\n            'IBM': 2,\n            'Urban Airship': 1,\n            'Pushwoosh': 3,\n            'Azure': 1,\n            'Other': 6\n          }\" color=\"#F2C526, #92E1A7\"></ionic-bar-chart>\n  \n          <h4>Which of the following database technologies have you used extensively over the past year?</h4>\n          <ionic-bar-chart data=\"{\n            'MySQL': 59,\n            'Firebase': 42,\n            'MongoDB': 33,\n            'Postgres': 22,\n            'AWS RDS': 9,\n            'Microsoft SQL Server': 6,\n            'AWS Dynamo DB': 6,\n            'MariaDB': 0,\n            'Couch': 1,\n            'Oracle': 2,\n            'Other':3\n          }\" color=\"#F2C526, #92E1A7\"></ionic-bar-chart>\n  \n          <h4>Which of the following technologies do you use to host the backend of your apps?</h4>\n          <ionic-bar-chart data=\"{\n            'Self-hosting': 40,\n            'Firebase': 35,\n            'Amazon ECS': 19,\n            'Digital Ocean': 15,\n            'Heroku': 14,\n            'Azure': 14,\n            'Google App Engine/ GCP Containers': 10,\n            'AWS Lambda': 10,\n            'VPS Provider': 8,\n            'AWS LightSail': 2,\n            'Microsoft': 2,\n            'IBM': 0,\n            'Kinvey': 0,\n            'Other': 3\n          }\" color=\"#F2C526, #92E1A7\"></ionic-bar-chart>\n  \n          <h4>Which of the following user authentication services have you used extensively over the past year?</h4>\n          <ionic-bar-chart data=\"{\n            'Firebase Auth': 44,\n            'Custom OAuth': 32,\n            'Auth0': 28,\n            'Auth.io': 9,\n            'OpenID Connect': 7,\n            'Azure Authentication': 6,\n            'Amazon Cognito': 5,\n            'Microsoft ADFS': 4,\n            'GCP Auth': 3,\n            'Fabric Digits': 1,\n            'Stormpath': 1,\n            'Other': 7\n          }\" color=\"#F2C526, #92E1A7\"></ionic-bar-chart>\n          {% endraw %}\n        </div>\n      </section>\n    </div>\n  </article>\n</main>\n\n{% endblock %}\n\n{% block scripts %}\n<link rel=\"stylesheet\" href=\"https://cdnjs.cloudflare.com/ajax/libs/c3/0.5.2/c3.min.css\" />\n<script src=\"https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.6.8/angular.min.js\"></script>\n<script src=\"https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.6.8/angular-animate.min.js\"></script>\n<script src=\"https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.6.8/angular-cookies.min.js\"></script>\n<script src=\"https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.6.8/angular-sanitize.min.js\"></script>\n<script src=\"https://cdnjs.cloudflare.com/ajax/libs/d3/4.13.0/d3.min.js\"></script>\n<script src=\"https://cdnjs.cloudflare.com/ajax/libs/c3/0.5.2/c3.min.js\"></script>\n<script>\nvar IonicSiteModule = angular.module('IonicSite',\n  ['ngAnimate', 'ngSanitize', 'ngCookies']);\n\nIonicSiteModule\n.controller('SurveyCtrl', ['$scope', '$timeout', function($scope, $timeout) {\n  var currentSection = window.location.hash;\n\n  function scrollCheck() {\n    scrollPos = document.body.scrollTop || \n                document.documentElement.scrollTop || 0;\n    if (scrollPos < 200 && currentSection) {\n      currentSection = null;\n      window.location.hash = '';\n      history.replaceState({}, \"\", '');\n    }\n  };\n\n  window.addEventListener('scroll',function(){$timeout(scrollCheck)});\n\n  // Scrollspy\n  $('body').scrollspy({\n    offset: 150\n  });\n\n  // update the URL on scrollspy change\n  $(window).on('activate.bs.scrollspy', function (e) {\n    currentSection = $(\"a[href^='#']\", e.target).attr(\"href\");\n    history.replaceState({}, \"Ionic Framework - Survey-2017\", currentSection);\n  });\n\n  // canvas animation at the top\n  function init() {\n    canvas = document.getElementById('statistical-suspension'); \n    banner = document.getElementById('survey-banner');\n    context = canvas.getContext('2d');\n    canvasSize = {}\n    canvas.height = banner.offsetHeight * 2;\n    canvas.width = window.innerWidth * 2;\n    mouse = {x:0,y:0};\n    banner.addEventListener('mousemove',MouseMove,false);\n    banner.addEventListener('mousedown',MouseDown,false);\n    banner.addEventListener('mouseup',MouseUp,false);\n    banner.addEventListener('resize',canvasResize,false);\n    maxDistance = Math.sqrt(Math.pow(canvas.height,2) + Math.pow(canvas.width,2))\n    // console.log(maxDistance)\n    dotsHolder = [];\n    \n    mouseMove = false;\n    mouseDown = false;\n    for(i = 0;i < 50;i++) {\n      dotsHolder.push(new dots());\n    }\n  }\n\n  function canvasResize(event) {\n    canvas.height = 305;\n    canvas.width = window.innerWidth;\n    cancelAnimationFrame(animate);\n  }\n\n  function MouseUp(event) {\n    if(mouseMove) {\n      mouseMove = false;\n    }  \n    if(mouseDown) {\n      mouseDown = false;\n    }\n  }\n\n  function MouseDown(event) {\n    mouseDown = true;\n  }\n\n  function MouseMove(event) {\n    mouse.x = (event.pageX - canvas.offsetLeft) * 2;\n    mouse.y = (event.pageY - canvas.offsetTop) * 2;\n    if(mouseMove) {\n      context.lineTo(mouseX,mouseY);\n      context.stroke();\n    }\n  }\n\n  function dots() {\n    this.xPos = Math.random()*canvas.width;\n    this.yPos = Math.random()*canvas.height;\n    this.color = '#fff';\n    this.radius = ((Math.random() * .5) + .5) * 100; \n    this.vx = Math.cos(this.radius) / 4;\n    this.vy = Math.sin(this.radius) / 4;\n    this.friction = 7;\n    this.speedX = this.vx;\n    this.speedY = this.vy;\n  } \n  \n  dots.draw = function() {\n    context.clearRect(0,0,canvas.width,canvas.height);\n    for(var c = 0; c < dotsHolder.length;c++) {\n      dot = dotsHolder[c]; \n      context.beginPath();\n      distanceX = dot.xPos - mouse.x;\n      distanceY = dot.yPos - mouse.y;\n      var particleDistance =  Math.sqrt(Math.pow(distanceX,2) + Math.pow(distanceY, 2));\n      var particleMouse = Math.pow(Math.max(1.2 - particleDistance / maxDistance, 1), 4);\n      context.fillStyle = dot.color;\n      context.globalAlpha = (c / dotsHolder.length / 2) + .5;\n      dot.xPos += dot.vx;\n      dot.yPos += dot.vy;\n      if(dot.xPos < -50) {dot.xPos = canvas.width+50;}\n      if(dot.yPos < -50) {dot.yPos = canvas.height+50;}\n      if(dot.xPos > canvas.width+50) {dot.xPos = -50;}\n      if(dot.yPos > canvas.height+50) {dot.yPos = -50;}\n      context.font = (dot.radius * particleMouse ) + \"px Arial\";\n      context.fillText(c % 2 ? \"°\" : '+',dot.xPos,dot.yPos);\n      context.fill();\n\n    }\n  }\n  \n  function animate() {\n    requestAnimationFrame(animate);\n    dots.draw();\n  }\n\n  init();\n  animate();\n  \n}])\n.directive('barChart', [function() {\n  return {\n    restrict: 'E',\n    scope: {\n      data: '='\n    },\n    compile: function(el, attrs) {\n      return {\n        post: function(scope, element, $attrs) {\n\n          if (!scope.data.data && !scope.categories) {\n            var data = Object.keys(scope.data).map(function(k) {\n              return {label: k, value: scope.data[k]};\n            }).sort(function(a, b) {\n              if(a.value < b.value) return 1;\n              if(a.value > b.value) return -1;\n              return 0;\n            });\n\n            var bars = ['data1'].concat(data.map(function(bar) {\n              return bar.value;\n            }));\n            var labels = data.map(function(bar) {\n              return bar.label;\n            });\n\n            var chart = c3.generate({\n              bindto: el[0],\n              data: {\n                columns: [ bars ],\n                type: 'bar',\n                labels: {\n                  show: true,\n                  format: function(v) { return v + '%'; }\n                },\n                colors: {\n                  data1: '#4a8bfc'\n                },\n              },\n              padding: {\n                left: 250,\n              },\n              size: {\n                height: 20 * labels.length\n              },\n              bar: {\n                width: {\n                  ratio: 0.2 // this makes bar width 50% of length between ticks\n                }\n              },\n              axis: {\n                rotated: true,\n                x: {\n                  type: 'category',\n                  categories: labels,\n                  tick: {\n                    multiline: false,\n                    outer: false\n                  },\n                  height: 50,\n                  width: 200\n                },\n                y: {\n                  show: false\n                }\n              },\n              legend: {\n                show: false\n              },\n              tooltip: {\n                show: false\n              }\n            });\n            return;\n          }\n\n          var colors = {};\n          scope.data.data.forEach(function(bar, i) {\n            colors['data' + (i + 1)] = bar.color;\n          });\n          var columns = scope.data.data.map(function(k, i) {\n            return ['data' + (i + 1)].concat(k.values);\n          })\n          names = {};\n          scope.data.data.forEach(function(bar, i) {\n            names['data' + (i + 1)] = bar.name;\n          });\n\n          // console.log(colors, columns)\n\n          var chart = c3.generate({\n            bindto: el[0],\n            data: {\n              columns: columns,\n              type: 'bar',\n              labels: {\n                show: true,\n                format: function(v) { return v + '%'; }\n              },\n              colors: colors,\n              names: names\n            },\n            bar: {\n              width: {\n                ratio: 0.8 // this makes bar width 50% of length between ticks\n              }\n            },\n            grid: {\n              y: {\n                show: true\n              }\n            },\n            axis: {\n              x: {\n                type: 'category',\n                categories: scope.data.categories,\n                tick: {\n                  multiline: false,\n                  outer: false\n                },\n                height: 50,\n                width: 200\n              },\n              y: {\n                tick: {\n                  format: function(v) { return v + '%'; }\n                }\n              }\n            },\n            legend: {\n              show: true\n            },\n            tooltip: {\n              show: false\n            }\n          });\n        }\n      }\n    }\n  }\n}])\n;\n</script>\n{% endblock %}"
  },
  {
    "path": "server/pages/survey/2020.html",
    "content": "{% extends \"_layouts/base.html\" %}\n{% set id = 'survey-2020' %}\n{% set name = '2020 Developer Survey' %}\n{% set meta_image = 'https://ionicframework.com/img/survey/dev-survey-og-img.png' %}\n{% set header_style = 'transparent' %}\n{% set cssPath = 'survey/2020' %}\n\n{% block body_attributes %}\n  data-spy=\"scroll\" data-target=\"#survey-2020-nav\" data-offset=\"400\"\n{% endblock %}\n\n{% block main %}\n<div id=\"survey-banner\" class=\"cta banner\">\n  <hgroup class=\"container\">\n    <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"50\" height=\"50\" viewBox=\"0 0 31.643 31.642\"><g transform=\"translate(-655 626)\"><path d=\"M81.46,222.5a7.21,7.21,0,1,0,7.21,7.21A7.21,7.21,0,0,0,81.46,222.5Z\" transform=\"translate(589.362 -839.883)\" fill=\"#fff\"/><circle cx=\"3.284\" cy=\"3.284\" r=\"3.284\" transform=\"translate(677.889 -623.312)\" fill=\"#fff\"/><path d=\"M64.454,191.734l-.138-.3-.215.25a4.95,4.95,0,0,1-1.982,1.365l-.215.077.086.215a12.933,12.933,0,1,1-6.394-6.717l.2.1.088-.215a4.95,4.95,0,0,1,1.459-1.913l.258-.215-.295-.153a15.642,15.642,0,0,0-7.253-1.763,15.821,15.821,0,1,0,14.4,9.254Z\" transform=\"translate(620.764 -808.46)\" fill=\"#fff\"/></g></svg>\n    <h1>Developer Survey</h1>\n    <p>This year's biggest insights, trends, and perspectives from the worldwide Ionic community.</p>\n\n    <ul id=\"cubes\">\n      <li></li>\n      <li></li>\n      <li></li>\n      <li></li>\n      <li></li>\n      <li></li>\n    </ul>\n  </hgroup>\n</div>\n\n<nav id=\"survey-2020-nav\" class=\"bar\">\n  <ul class=\"container nav\">\n    <li><a href=\"#introduction\" class=\"anchor\">INTRODUCTION</a></li>\n    <li><a href=\"#trends\" class=\"anchor\">TRENDS</a></li>\n    <li><a href=\"#tools\" class=\"anchor\">TOOLS</a></li>\n    <li><a href=\"#pwas\" class=\"anchor\">PWA</a></li>\n    <li><a href=\"#backend\" class=\"anchor\">BACKEND</a></li>\n    <li><a href=\"#results\" class=\"anchor\">RESULTS</a></li>\n  </ul>\n</nav>\n<div id=\"scroll-spy\"></div>\n<main>\n  <section id=\"introduction\" class=\"center\">\n    <div class=\"container\">\n      <h2>The Age of the Web Developer</h2>\n      <p class=\"lg\">Welcome to the annual Ionic Developer Survey results! For the third year in a row, we heard from thousands of community members who shared their stories and perspectives with us.</p>\n      <p class=\"lg\">The theme of this year’s survey is the “Age of the Web Developer”. Web Developers now control every layer of the stack - from frontend to backend - across all deployment targets—mobile and desktop included. And as more and more web-centric tools, libraries, and frameworks emerge, their power and influence will only grow.</p>\n      <p class=\"lg\">Read on for more analysis, along with the usual list of most popular tools & services.</p>\n    </div>\n  </section>\n\n  {% include '_includes/promos/state-of-app-dev-2020.html' %}\n\n  <section id=\"trends\" class=\"grey\">\n    <div class=\"container\">\n      <h2>Web Developers Rule the World</h2>\n      <div class=\"cols\">\n        <div class=\"col\">\n          <p class=\"highlight\">Over 75% of the software developers in our survey identified themselves as Web Developers.</p>\n          <p>When you think “Web Developer” you might imagine a traditional browser, but with a large library of SDKs—that’s seemingly growing by the day—and tools like Ionic, these developers are now creating apps in every platform, and in every form factor imaginable.</p>\n          <h4>Top deployment targets Web Developers are developing apps for:</h4>\n          <figure>\n            <img src=\"/img/survey/deployment-targets@2x.png\"\n              srcset=\"/img/survey/deployment-targets.png 1x, /img/survey/deployment-targets@2x.png 2x\"\n              alt=\"82% Deploy to Google play, 70% iOS, 62% Web, 13% Desktop\" />\n          </figure>\n        </div>\n        <div class=\"col\">\n          <h4>The main takeaway</h4>\n          <p>What’s more, a full 78% of those developers are full-stack developers, meaning they can heavily influence backend tech stack decisions, as well as frontend. And they do: 94% of Web Developers have some say over the backend services and providers their organization uses, with 50% having final say or a great deal of influence.</p>\n          <p class=\"highlight\">TL;DR: Web Developers are large and in charge. They aren’t just developing frontend features, they’re making decisions on every aspect of technology for the full technology stack. And given how the web continues to permeate every aspect of our lives—digital and otherwise—this influence will only grow in years to come.</p>\n        </div>\n      </div>\n    </div>\n  </section>\n\n  <section id=\"tools\">\n    <div class=\"container\">\n      <h2>Mobile Tools and Approaches</h2>\n      <div class=\"cols\">\n        <div class=\"col\">\n          <h4>The top mobile dev tools</h4>\n          <p>The mobile tools market remained incredibly steady since last year’s survey. The results show three clear tiers of popularity among Ionic developers in the mobile development stack. Once again, Ionic (86%) was the top tier, followed by Cordova/PhoneGap (48%). The third tier was made up of React Native (16%) and Flutter (12%), with other tools falling in the single digits. Of course, given that this survey is taken largely from the Ionic community, it’s not surprising to see the results so heavily skewed towards Ionic.</p>\n          <figure>\n            <img src=\"/img/survey/top-tools@2x.png?v2\"\n              srcset=\"/img/survey/top-tools.png?v2 1x, /img/survey/top-tools@2x.png?v2 2x\"\n              alt=\"1st: Ionic - 2nd: Cordova, Phonegap - 3rd: React Native, Flutter\" />\n          </figure>\n        </div>\n        <div class=\"col\">\n          <h4>Ionic-type approaches are on the rise</h4>\n          <p>The bigger takeaway is that business execs and developers have come around to the fact that mobile frameworks like Ionic, React Native, and Flutter, can, in fact, provide stellar app experiences across platforms, in a dev-friendly package.</p>\n          <p class=\"highlight\">The proof is in the numbers, while about 30% of survey respondents still do extensive work in Native Android and iOS, they are using solutions like Ionic and React Native in much greater numbers.</p>\n        </div>\n      </div>\n    </div>\n  </section>\n\n  <section id=\"tools-tools\" class=\"grey\">\n    <div class=\"container\">\n      <h2>The Tools, the Tools</h2>\n      <p>When you’re developing and hosting apps, you depend on a range of tools and services throughout the lifecycle. From service providers and hosting platforms, to user auth and push notification services, it truly takes a village to raise a successful application.</p>\n      <p class=\"highlight\">Let’s take a look at what companies are using when it comes to tools and services.</p>\n      <div class=\"cols\">\n        <div class=\"col\">\n          <h4>Top Backend Service Providers:</h4>\n          <figure>\n            <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"378\" height=\"87\" viewBox=\"0 0 378 87\"><g transform=\"translate(-281 -4176)\"><text transform=\"translate(281 4176)\" fill=\"#3780ff\" font-size=\"12\" font-family=\"RobotoMono-Bold, Roboto Mono\" font-weight=\"700\"><tspan x=\"0\" y=\"13\">53%</tspan></text><text transform=\"translate(281 4210)\" fill=\"#3780ff\" font-size=\"12\" font-family=\"RobotoMono-Bold, Roboto Mono\" font-weight=\"700\"><tspan x=\"0\" y=\"13\">43%</tspan></text><text transform=\"translate(281 4244)\" fill=\"#3780ff\" font-size=\"12\" font-family=\"RobotoMono-Bold, Roboto Mono\" font-weight=\"700\"><tspan x=\"0\" y=\"13\">23%</tspan></text><text transform=\"translate(569 4177)\" fill=\"#3780ff\" font-size=\"12\" font-family=\"RobotoMono-Regular, Roboto Mono\" letter-spacing=\"-0.02em\"><tspan x=\"0\" y=\"13\">Firebase/GCP</tspan></text><text transform=\"translate(569 4211)\" fill=\"#3780ff\" font-size=\"12\" font-family=\"RobotoMono-Regular, Roboto Mono\" letter-spacing=\"-0.02em\"><tspan x=\"0\" y=\"13\">AWS</tspan></text><text transform=\"translate(569 4245)\" fill=\"#3780ff\" font-size=\"12\" font-family=\"RobotoMono-Regular, Roboto Mono\" letter-spacing=\"-0.02em\"><tspan x=\"0\" y=\"13\">Azure</tspan></text><line x2=\"248\" transform=\"translate(310.5 4190.5)\" fill=\"none\" stroke=\"#b2becd\" stroke-width=\"0.5\" stroke-dasharray=\"4\"/><line x2=\"130\" transform=\"translate(310.5 4185.5)\" fill=\"none\" stroke=\"#3780ff\" stroke-width=\"11\"/><line x2=\"248\" transform=\"translate(310.5 4224.5)\" fill=\"none\" stroke=\"#b2becd\" stroke-width=\"0.5\" stroke-dasharray=\"4\"/><line x2=\"112\" transform=\"translate(310.5 4219.5)\" fill=\"none\" stroke=\"#3780ff\" stroke-width=\"11\"/><line x2=\"248\" transform=\"translate(310.5 4258.5)\" fill=\"none\" stroke=\"#b2becd\" stroke-width=\"0.5\" stroke-dasharray=\"4\"/><line x2=\"84\" transform=\"translate(310.5 4253.5)\" fill=\"none\" stroke=\"#3780ff\" stroke-width=\"11\"/></g></svg>\n          </figure>\n          <h4>Top Hosting Providers:</h4>\n          <figure>\n            <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"385\" height=\"87\" viewBox=\"0 0 385 87\"><g transform=\"translate(-281 -4342)\"><text transform=\"translate(281 4342)\" fill=\"#3780ff\" font-size=\"12\" font-family=\"RobotoMono-Bold, Roboto Mono\" font-weight=\"700\"><tspan x=\"0\" y=\"13\">39%</tspan></text><text transform=\"translate(281 4376)\" fill=\"#3780ff\" font-size=\"12\" font-family=\"RobotoMono-Bold, Roboto Mono\" font-weight=\"700\"><tspan x=\"0\" y=\"13\">36%</tspan></text><text transform=\"translate(281 4410)\" fill=\"#3780ff\" font-size=\"12\" font-family=\"RobotoMono-Bold, Roboto Mono\" font-weight=\"700\"><tspan x=\"0\" y=\"13\">18%</tspan></text><text transform=\"translate(569 4343)\" fill=\"#3780ff\" font-size=\"12\" font-family=\"RobotoMono-Regular, Roboto Mono\" letter-spacing=\"-0.02em\"><tspan x=\"0\" y=\"13\">AWS</tspan></text><text transform=\"translate(569 4377)\" fill=\"#3780ff\" font-size=\"12\" font-family=\"RobotoMono-Regular, Roboto Mono\" letter-spacing=\"-0.02em\"><tspan x=\"0\" y=\"13\">Firebase/GCP</tspan></text><text transform=\"translate(569 4411)\" fill=\"#3780ff\" font-size=\"12\" font-family=\"RobotoMono-Regular, Roboto Mono\" letter-spacing=\"-0.02em\"><tspan x=\"0\" y=\"13\">Azure</tspan></text><line x2=\"248\" transform=\"translate(310.5 4356.5)\" fill=\"none\" stroke=\"#b2becd\" stroke-width=\"0.5\" stroke-dasharray=\"4\"/><line x2=\"104\" transform=\"translate(310.5 4351.5)\" fill=\"none\" stroke=\"#3780ff\" stroke-width=\"11\"/><line x2=\"248\" transform=\"translate(310.5 4390.5)\" fill=\"none\" stroke=\"#b2becd\" stroke-width=\"0.5\" stroke-dasharray=\"4\"/><line x2=\"95\" transform=\"translate(310.5 4385.5)\" fill=\"none\" stroke=\"#3780ff\" stroke-width=\"11\"/><line x2=\"248\" transform=\"translate(310.5 4424.5)\" fill=\"none\" stroke=\"#b2becd\" stroke-width=\"0.5\" stroke-dasharray=\"4\"/><line x2=\"48\" transform=\"translate(310.5 4419.5)\" fill=\"none\" stroke=\"#3780ff\" stroke-width=\"11\"/></g></svg>\n          </figure>\n          <h4>Top Databases:</h4>\n          <figure>\n            <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"385\" height=\"87\" viewBox=\"0 0 385 87\"><g transform=\"translate(-281 -4508)\"><text transform=\"translate(281 4508)\" fill=\"#3780ff\" font-size=\"12\" font-family=\"RobotoMono-Bold, Roboto Mono\" font-weight=\"700\"><tspan x=\"0\" y=\"13\">55%</tspan></text><text transform=\"translate(281 4542)\" fill=\"#3780ff\" font-size=\"12\" font-family=\"RobotoMono-Bold, Roboto Mono\" font-weight=\"700\"><tspan x=\"0\" y=\"13\">36%</tspan></text><text transform=\"translate(281 4576)\" fill=\"#3780ff\" font-size=\"12\" font-family=\"RobotoMono-Bold, Roboto Mono\" font-weight=\"700\"><tspan x=\"0\" y=\"13\">31%</tspan></text><text transform=\"translate(569 4509)\" fill=\"#3780ff\" font-size=\"12\" font-family=\"RobotoMono-Regular, Roboto Mono\" letter-spacing=\"-0.02em\"><tspan x=\"0\" y=\"13\">MySQL</tspan></text><text transform=\"translate(569 4543)\" fill=\"#3780ff\" font-size=\"12\" font-family=\"RobotoMono-Regular, Roboto Mono\" letter-spacing=\"-0.02em\"><tspan x=\"0\" y=\"13\">Firebase</tspan></text><text transform=\"translate(569 4577)\" fill=\"#3780ff\" font-size=\"12\" font-family=\"RobotoMono-Regular, Roboto Mono\" letter-spacing=\"-0.02em\"><tspan x=\"0\" y=\"13\">MongoDB</tspan></text><line x2=\"248\" transform=\"translate(310.5 4522.5)\" fill=\"none\" stroke=\"#b2becd\" stroke-width=\"0.5\" stroke-dasharray=\"4\"/><line x2=\"130\" transform=\"translate(310.5 4517.5)\" fill=\"none\" stroke=\"#3780ff\" stroke-width=\"11\"/><line x2=\"248\" transform=\"translate(310.5 4556.5)\" fill=\"none\" stroke=\"#b2becd\" stroke-width=\"0.5\" stroke-dasharray=\"4\"/><line x2=\"100\" transform=\"translate(310.5 4551.5)\" fill=\"none\" stroke=\"#3780ff\" stroke-width=\"11\"/><line x2=\"248\" transform=\"translate(310.5 4590.5)\" fill=\"none\" stroke=\"#b2becd\" stroke-width=\"0.5\" stroke-dasharray=\"4\"/><line x2=\"79\" transform=\"translate(310.5 4585.5)\" fill=\"none\" stroke=\"#3780ff\" stroke-width=\"11\"/></g></svg>\n          </figure>\n        </div>\n        <div class=\"col\">\n          <h4>Top Auth Choices:</h4>\n          <figure>\n            <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"422\" height=\"87\" viewBox=\"0 0 422 87\"><g transform=\"translate(-768 -4176)\"><text transform=\"translate(768 4176)\" fill=\"#3780ff\" font-size=\"12\" font-family=\"RobotoMono-Bold, Roboto Mono\" font-weight=\"700\"><tspan x=\"0\" y=\"13\">43%</tspan></text><text transform=\"translate(768 4210)\" fill=\"#3780ff\" font-size=\"12\" font-family=\"RobotoMono-Bold, Roboto Mono\" font-weight=\"700\"><tspan x=\"0\" y=\"13\">33%</tspan></text><text transform=\"translate(768 4244)\" fill=\"#3780ff\" font-size=\"12\" font-family=\"RobotoMono-Bold, Roboto Mono\" font-weight=\"700\"><tspan x=\"0\" y=\"13\">28%</tspan></text><text transform=\"translate(1056 4177)\" fill=\"#3780ff\" font-size=\"12\" font-family=\"RobotoMono-Regular, Roboto Mono\" letter-spacing=\"-0.02em\"><tspan x=\"0\" y=\"13\">Firebase Auth</tspan></text><text transform=\"translate(1056 4211)\" fill=\"#3780ff\" font-size=\"12\" font-family=\"RobotoMono-Regular, Roboto Mono\" letter-spacing=\"-0.02em\"><tspan x=\"0\" y=\"13\">Custom OAuth</tspan></text><text transform=\"translate(1056 4245)\" fill=\"#3780ff\" font-size=\"12\" font-family=\"RobotoMono-Regular, Roboto Mono\" letter-spacing=\"-0.02em\"><tspan x=\"0\" y=\"13\">AuthO</tspan></text><line x2=\"248\" transform=\"translate(797.5 4190.5)\" fill=\"none\" stroke=\"#b2becd\" stroke-width=\"0.5\" stroke-dasharray=\"4\"/><line x2=\"119\" transform=\"translate(797.5 4185.5)\" fill=\"none\" stroke=\"#3780ff\" stroke-width=\"11\"/><line x2=\"248\" transform=\"translate(797.5 4224.5)\" fill=\"none\" stroke=\"#b2becd\" stroke-width=\"0.5\" stroke-dasharray=\"4\"/><line x2=\"104\" transform=\"translate(797.5 4219.5)\" fill=\"none\" stroke=\"#3780ff\" stroke-width=\"11\"/><line x2=\"248\" transform=\"translate(797.5 4258.5)\" fill=\"none\" stroke=\"#b2becd\" stroke-width=\"0.5\" stroke-dasharray=\"4\"/><line x2=\"88\" transform=\"translate(797.5 4253.5)\" fill=\"none\" stroke=\"#3780ff\" stroke-width=\"11\"/></g></svg>\n          </figure>\n          <h4>Top Push Services:</h4>\n          <figure>\n            <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"393\" height=\"87\" viewBox=\"0 0 393 87\"><g transform=\"translate(-768 -4342)\"><text transform=\"translate(768 4342)\" fill=\"#3780ff\" font-size=\"12\" font-family=\"RobotoMono-Bold, Roboto Mono\" font-weight=\"700\"><tspan x=\"0\" y=\"13\">73%</tspan></text><text transform=\"translate(768 4376)\" fill=\"#3780ff\" font-size=\"12\" font-family=\"RobotoMono-Bold, Roboto Mono\" font-weight=\"700\"><tspan x=\"0\" y=\"13\">28%</tspan></text><text transform=\"translate(768 4410)\" fill=\"#3780ff\" font-size=\"12\" font-family=\"RobotoMono-Bold, Roboto Mono\" font-weight=\"700\"><tspan x=\"0\" y=\"13\">04%</tspan></text><text transform=\"translate(1056 4343)\" fill=\"#3780ff\" font-size=\"12\" font-family=\"RobotoMono-Regular, Roboto Mono\" letter-spacing=\"-0.02em\"><tspan x=\"0\" y=\"13\">Firebase</tspan></text><text transform=\"translate(1056 4377)\" fill=\"#3780ff\" font-size=\"12\" font-family=\"RobotoMono-Regular, Roboto Mono\" letter-spacing=\"-0.02em\"><tspan x=\"0\" y=\"13\">OneSignal</tspan></text><text transform=\"translate(1056 4411)\" fill=\"#3780ff\" font-size=\"12\" font-family=\"RobotoMono-Regular, Roboto Mono\" letter-spacing=\"-0.02em\"><tspan x=\"0\" y=\"13\">Amazon Pinpoint</tspan></text><line x2=\"248\" transform=\"translate(797.5 4356.5)\" fill=\"none\" stroke=\"#b2becd\" stroke-width=\"0.5\" stroke-dasharray=\"4\"/><line x2=\"192\" transform=\"translate(797.5 4351.5)\" fill=\"none\" stroke=\"#3780ff\" stroke-width=\"11\"/><line x2=\"248\" transform=\"translate(797.5 4390.5)\" fill=\"none\" stroke=\"#b2becd\" stroke-width=\"0.5\" stroke-dasharray=\"4\"/><line x2=\"88\" transform=\"translate(797.5 4385.5)\" fill=\"none\" stroke=\"#3780ff\" stroke-width=\"11\"/><line x2=\"248\" transform=\"translate(797.5 4424.5)\" fill=\"none\" stroke=\"#b2becd\" stroke-width=\"0.5\" stroke-dasharray=\"4\"/><line x2=\"16\" transform=\"translate(797.5 4419.5)\" fill=\"none\" stroke=\"#3780ff\" stroke-width=\"11\"/></g></svg>\n          </figure>\n        </div>\n      </div>\n    </div>\n  </section>\n\n  <section id=\"js-trends\"> \n    <div class=\"container\">\n      <h2>JS Trends, Take 2</h2>\n      <h4>When analyzing last year’s results, we said:</h4>\n      <p class=\"highlight\">“As we introduce versions of Ionic that support Vue (currently in alpha) and React (coming in 2019), we expect to see the mix of Ionic developers surveyed shift more towards these Angular alternatives.”</p>\n      <figure>\n        <ul id=\"frameworks\">\n          <li><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"94.497\" height=\"101.5\" viewBox=\"0 0 94.497 101.5\"><defs><style>.a{fill:#73849a;}.b{fill:#fff;}</style></defs><g transform=\"translate(-31.9 -30)\"><path class=\"a\" d=\"M79.148,30h0L31.9,46.849l7.206,62.473L79.148,131.5h0l40.042-22.178L126.4,46.849Z\" transform=\"translate(0 0)\"/><path class=\"a\" d=\"M125,30V92.626h0V131.5h0l40.042-22.178,7.207-62.473Z\" transform=\"translate(-45.852 0)\"/><path class=\"b\" d=\"M96.337,52.1,66.8,118.329H77.813l5.938-14.819h25.071l5.938,14.819h11.013L96.337,52.1Zm8.628,42.275H87.709l8.628-20.757Z\" transform=\"translate(-17.188 -10.884)\"/></g></svg></li>\n          <li><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"113.975\" height=\"101.5\" viewBox=\"0 0 113.975 101.5\"><defs><style>.a{fill:#73849a;}</style></defs><g transform=\"translate(-175.7 -78)\"><path class=\"a\" d=\"M289.676,128.762c0-7.55-9.455-14.706-23.952-19.143,3.345-14.775,1.859-26.531-4.693-30.294a10.186,10.186,0,0,0-5.2-1.3V83.2a5.38,5.38,0,0,1,2.648.6c3.159,1.812,4.53,8.712,3.462,17.587-.256,2.184-.674,4.484-1.185,6.83A112.585,112.585,0,0,0,246,105.692a113.327,113.327,0,0,0-9.664-11.616c7.574-7.039,14.683-10.9,19.515-10.9V78h0c-6.389,0-14.752,4.553-23.209,12.452-8.456-7.852-16.82-12.359-23.209-12.359v5.181c4.809,0,11.941,3.833,19.515,10.826a109.727,109.727,0,0,0-9.595,11.593,108.484,108.484,0,0,0-14.775,2.555c-.534-2.323-.929-4.577-1.208-6.737-1.092-8.875.256-15.774,3.392-17.61a5.17,5.17,0,0,1,2.672-.6V78.116h0a10.359,10.359,0,0,0-5.25,1.3c-6.528,3.764-7.992,15.5-4.623,30.225-14.45,4.461-23.859,11.593-23.859,19.12,0,7.55,9.455,14.706,23.952,19.143-3.345,14.775-1.859,26.531,4.693,30.294a10.213,10.213,0,0,0,5.227,1.3c6.389,0,14.752-4.553,23.209-12.452,8.456,7.852,16.82,12.359,23.209,12.359a10.359,10.359,0,0,0,5.25-1.3c6.528-3.764,7.992-15.5,4.623-30.225C280.267,143.444,289.676,136.289,289.676,128.762Zm-30.248-15.5c-.86,3-1.928,6.087-3.136,9.177-.952-1.859-1.951-3.717-3.043-5.576-1.069-1.859-2.207-3.671-3.345-5.436C253.2,111.919,256.384,112.523,259.428,113.266Zm-10.64,24.742c-1.812,3.136-3.671,6.11-5.6,8.875-3.462.3-6.97.465-10.5.465-3.508,0-7.016-.163-10.454-.441q-2.892-4.147-5.622-8.828-2.648-4.565-4.832-9.246c1.44-3.113,3.067-6.226,4.809-9.27,1.812-3.136,3.671-6.11,5.6-8.875,3.462-.3,6.97-.465,10.5-.465,3.508,0,7.016.163,10.454.441q2.892,4.147,5.622,8.828,2.648,4.565,4.832,9.246C252.133,131.851,250.53,134.965,248.788,138.008Zm7.5-3.02c1.255,3.113,2.323,6.226,3.206,9.246-3.043.743-6.249,1.371-9.572,1.859,1.138-1.789,2.277-3.624,3.345-5.506C254.34,138.728,255.339,136.846,256.291,134.988Zm-23.557,24.788a95.8,95.8,0,0,1-6.458-7.434c2.091.093,4.228.163,6.389.163,2.184,0,4.344-.046,6.458-.163A90.682,90.682,0,0,1,232.734,159.776ZM215.45,146.093c-3.3-.488-6.482-1.092-9.525-1.835.86-3,1.928-6.087,3.136-9.177.953,1.859,1.951,3.717,3.043,5.576S214.311,144.327,215.45,146.093Zm17.168-48.346a95.785,95.785,0,0,1,6.458,7.434c-2.091-.093-4.228-.163-6.389-.163-2.184,0-4.344.046-6.458.163A90.683,90.683,0,0,1,232.618,97.747Zm-17.192,13.684c-1.138,1.789-2.277,3.624-3.345,5.506-1.069,1.859-2.068,3.717-3.02,5.576-1.255-3.113-2.323-6.226-3.206-9.246C208.9,112.546,212.1,111.919,215.427,111.431ZM194.4,140.517c-8.224-3.508-13.544-8.108-13.544-11.755s5.32-8.271,13.544-11.755c2-.86,4.182-1.626,6.435-2.346a111.588,111.588,0,0,0,5.227,14.148,110.007,110.007,0,0,0-5.157,14.078C198.607,142.166,196.423,141.377,194.4,140.517Zm12.5,33.2c-3.16-1.812-4.53-8.712-3.462-17.587.256-2.184.674-4.484,1.185-6.83a112.591,112.591,0,0,0,14.752,2.532,113.33,113.33,0,0,0,9.664,11.616c-7.574,7.039-14.683,10.9-19.515,10.9A5.544,5.544,0,0,1,206.9,173.715Zm55.106-17.7c1.092,8.875-.256,15.774-3.392,17.61a5.17,5.17,0,0,1-2.672.6c-4.809,0-11.941-3.833-19.515-10.826a109.727,109.727,0,0,0,9.595-11.593,108.479,108.479,0,0,0,14.775-2.556A65.047,65.047,0,0,1,262.006,156.013Zm8.944-15.5c-2,.86-4.182,1.626-6.435,2.346a111.584,111.584,0,0,0-5.227-14.148,110,110,0,0,0,5.158-14.079c2.3.72,4.484,1.51,6.528,2.37,8.224,3.508,13.544,8.108,13.544,11.755C284.495,132.409,279.175,137.032,270.951,140.517Z\" transform=\"translate(0)\"/><path class=\"a\" d=\"M320.8,78.4Z\" transform=\"translate(-111.39 -0.307)\"/><circle class=\"a\" cx=\"10.617\" cy=\"10.617\" r=\"10.617\" transform=\"translate(222.048 118.145)\"/><path class=\"a\" d=\"M520.5,78.1Z\" transform=\"translate(-264.696 -0.077)\"/></g></svg></li>\n          <li><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"117.201\" height=\"101.5\" viewBox=\"0 0 117.201 101.5\"><defs><style>.a{fill:#73849a;}.b{fill:#b2becd;}</style></defs><g transform=\"translate(-76.306 313.339)\"><g transform=\"translate(76.306 -313.339)\"><path class=\"a\" d=\"M-88.968,0-102.5,23.44-116.034,0H-161.1l58.6,101.5L-43.9,0Z\" transform=\"translate(161.101)\"/></g><g transform=\"translate(99.746 -313.339)\"><path class=\"b\" d=\"M-60.057,0-73.59,23.44-87.124,0h-21.627l35.16,60.9L-38.43,0Z\" transform=\"translate(108.751)\"/></g></g></svg></li>\n        </ul>\n      </figure>\n      <p>The results of this year’s research show that this shift is, in fact happening. Angular, React, and Vue were once again the three most-used frameworks, by far. Looking into the number a bit further, we can see that while Angular stayed consistent at around 85% of users doing extensive development work with it last year. Meanwhile, React and Vue saw large gains. React grew almost 30% in popularity to 30% of users, while 20% of users reported using Vue, an 18% jump.</p>\n      <div class=\"spacer\"></div>\n      <h4>Q8. Which of the following libraries, frameworks, and tools have you done extensive development work in over the past year?</h4>\n      <figure>\n        <img src=\"/img/survey/top-frameworks@2x?v1.png\"\n          srcset=\"/img/survey/top-frameworks.png?v1 1x, /img/survey/top-frameworks@2x.png?v1 2x\"\n          alt=\"This Year: 84% Angular, 30% React, 30% Vue - Last Year: 86% Angular, 23% React, 23% Vue\" />\n      </figure>\n      <p class=\"highlight\">This signals that more people in the React and Vue communities are trying Ionic, and perhaps some existing Angular developers are giving other frameworks a try, as well.</p>\n    </div>\n  </section>\n\n  <section id=\"delivery\" class=\"grey\">\n    <div class=\"container\">\n      <h2>App Delivery</h2>\n      <p class=\"highlight\">Apps are at the heart of what many respondents do. Being able to manage multiple apps and deliver updates and new apps in a timely and efficient way makes an organization go.</p>\n      <p>Most respondents’ teams, over 75%, were responsible for a relatively manageable 1-5 apps. However, many teams out there have a daunting portfolio of apps to take care of, especially at the enterprise level.</p>\n      <p>When we look at organizations with more than 500 employees, we find that 9% of developers delivered 9 or more new apps last year, 8% supported or maintained 20 or more, and 7% had a backlog of at least 20 apps waiting for development.</p>\n      <p>Of course, this backlog goes hand-in-hand with how long it takes to develop an app. Almost 80% of respondents said it takes their team 3-4 months, or longer, to develop a mobile or web app, with just over 20% could deliver in 1-2 months or less.</p>\n      <figure>\n        <svg class=\"lg\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" width=\"1168\" height=\"140\" viewBox=\"0 0 1168 140\"><defs><linearGradient id=\"s\" x1=\"-0.181\" y1=\"0.372\" x2=\"0.877\" y2=\"0.54\" gradientUnits=\"objectBoundingBox\"><stop offset=\"0\" stop-color=\"#f7f9fc\" stop-opacity=\"0\"/><stop offset=\"1\" stop-color=\"#f7f9fc\"/></linearGradient></defs><g transform=\"translate(-280 -6882)\"><text transform=\"translate(280 6924)\" fill=\"#3780ff\" font-size=\"12\" font-family=\"RobotoMono-Bold, Roboto Mono\" font-weight=\"700\"><tspan x=\"0\" y=\"13\">09%</tspan></text><text transform=\"translate(280 6959)\" fill=\"#3780ff\" font-size=\"12\" font-family=\"RobotoMono-Bold, Roboto Mono\" font-weight=\"700\"><tspan x=\"0\" y=\"13\">08%</tspan></text><text transform=\"translate(280 6994)\" fill=\"#3780ff\" font-size=\"12\" font-family=\"RobotoMono-Bold, Roboto Mono\" font-weight=\"700\"><tspan x=\"0\" y=\"13\">07%</tspan></text><text transform=\"translate(280 6882)\" fill=\"#73a5ff\" font-size=\"12\" font-family=\"RobotoMono-Regular, Roboto Mono\" letter-spacing=\"-0.02em\"><tspan x=\"0\" y=\"13\">&lt;500 Employee Organizations</tspan></text><text transform=\"translate(568 6925)\" fill=\"#3780ff\" font-size=\"12\" font-family=\"RobotoMono-Regular, Roboto Mono\" letter-spacing=\"-0.02em\"><tspan x=\"0\" y=\"13\">9 or more</tspan></text><text transform=\"translate(568 6960)\" fill=\"#3780ff\" font-size=\"12\" font-family=\"RobotoMono-Regular, Roboto Mono\" letter-spacing=\"-0.02em\"><tspan x=\"0\" y=\"13\">20 or more</tspan></text><text transform=\"translate(568 6995)\" fill=\"#3780ff\" font-size=\"12\" font-family=\"RobotoMono-Regular, Roboto Mono\" letter-spacing=\"-0.02em\"><tspan x=\"0\" y=\"13\">at least 20</tspan></text><line x2=\"248\" transform=\"translate(309.5 6938.5)\" fill=\"none\" stroke=\"#b2becd\" stroke-width=\"0.5\" stroke-dasharray=\"4\"/><line x2=\"28\" transform=\"translate(309.5 6933.5)\" fill=\"none\" stroke=\"#3780ff\" stroke-width=\"11\"/><line x2=\"248\" transform=\"translate(309.5 6973.5)\" fill=\"none\" stroke=\"#b2becd\" stroke-width=\"0.5\" stroke-dasharray=\"4\"/><line x2=\"23\" transform=\"translate(309.5 6968.5)\" fill=\"none\" stroke=\"#3780ff\" stroke-width=\"11\"/><line x2=\"248\" transform=\"translate(309.5 7008.5)\" fill=\"none\" stroke=\"#b2becd\" stroke-width=\"0.5\" stroke-dasharray=\"4\"/><line x2=\"18\" transform=\"translate(309.5 7003.5)\" fill=\"none\" stroke=\"#3780ff\" stroke-width=\"11\"/><circle cx=\"8.5\" cy=\"8.5\" r=\"8.5\" transform=\"translate(671 6925)\" fill=\"#3780ff\"/><circle cx=\"8.5\" cy=\"8.5\" r=\"8.5\" transform=\"translate(779 6925)\" fill=\"#3780ff\"/><circle cx=\"8.5\" cy=\"8.5\" r=\"8.5\" transform=\"translate(725 6925)\" fill=\"#3780ff\"/><circle cx=\"8.5\" cy=\"8.5\" r=\"8.5\" transform=\"translate(833 6925)\" fill=\"#3780ff\"/><circle cx=\"8.5\" cy=\"8.5\" r=\"8.5\" transform=\"translate(698 6925)\" fill=\"#3780ff\"/><circle cx=\"8.5\" cy=\"8.5\" r=\"8.5\" transform=\"translate(806 6925)\" fill=\"#3780ff\"/><circle cx=\"8.5\" cy=\"8.5\" r=\"8.5\" transform=\"translate(752 6925)\" fill=\"#3780ff\"/><circle cx=\"8.5\" cy=\"8.5\" r=\"8.5\" transform=\"translate(860 6925)\" fill=\"#3780ff\"/><circle cx=\"8.5\" cy=\"8.5\" r=\"8.5\" transform=\"translate(887 6925)\" fill=\"#3780ff\"/><circle cx=\"8.5\" cy=\"8.5\" r=\"8.5\" transform=\"translate(671 6960)\" fill=\"#3780ff\"/><circle cx=\"8.5\" cy=\"8.5\" r=\"8.5\" transform=\"translate(941 6960)\" fill=\"#3780ff\"/><circle cx=\"8.5\" cy=\"8.5\" r=\"8.5\" transform=\"translate(779 6960)\" fill=\"#3780ff\"/><circle cx=\"8.5\" cy=\"8.5\" r=\"8.5\" transform=\"translate(1049 6960)\" fill=\"#3780ff\"/><circle cx=\"8.5\" cy=\"8.5\" r=\"8.5\" transform=\"translate(725 6960)\" fill=\"#3780ff\"/><circle cx=\"8.5\" cy=\"8.5\" r=\"8.5\" transform=\"translate(995 6960)\" fill=\"#3780ff\"/><circle cx=\"8.5\" cy=\"8.5\" r=\"8.5\" transform=\"translate(833 6960)\" fill=\"#3780ff\"/><circle cx=\"8.5\" cy=\"8.5\" r=\"8.5\" transform=\"translate(1103 6960)\" fill=\"#3780ff\"/><circle cx=\"8.5\" cy=\"8.5\" r=\"8.5\" transform=\"translate(698 6960)\" fill=\"#3780ff\"/><circle cx=\"8.5\" cy=\"8.5\" r=\"8.5\" transform=\"translate(968 6960)\" fill=\"#3780ff\"/><circle cx=\"8.5\" cy=\"8.5\" r=\"8.5\" transform=\"translate(806 6960)\" fill=\"#3780ff\"/><circle cx=\"8.5\" cy=\"8.5\" r=\"8.5\" transform=\"translate(1076 6960)\" fill=\"#3780ff\"/><circle cx=\"8.5\" cy=\"8.5\" r=\"8.5\" transform=\"translate(752 6960)\" fill=\"#3780ff\"/><circle cx=\"8.5\" cy=\"8.5\" r=\"8.5\" transform=\"translate(1022 6960)\" fill=\"#3780ff\"/><circle cx=\"8.5\" cy=\"8.5\" r=\"8.5\" transform=\"translate(860 6960)\" fill=\"#3780ff\"/><circle cx=\"8.5\" cy=\"8.5\" r=\"8.5\" transform=\"translate(1130 6960)\" fill=\"#3780ff\"/><circle cx=\"8.5\" cy=\"8.5\" r=\"8.5\" transform=\"translate(887 6960)\" fill=\"#3780ff\"/><circle cx=\"8.5\" cy=\"8.5\" r=\"8.5\" transform=\"translate(1157 6960)\" fill=\"#3780ff\"/><circle cx=\"8.5\" cy=\"8.5\" r=\"8.5\" transform=\"translate(914 6960)\" fill=\"#3780ff\"/><circle cx=\"8.5\" cy=\"8.5\" r=\"8.5\" transform=\"translate(1184 6960)\" fill=\"#3780ff\"/><circle cx=\"8.5\" cy=\"8.5\" r=\"8.5\" transform=\"translate(671 6995)\" fill=\"#3780ff\"/><circle cx=\"8.5\" cy=\"8.5\" r=\"8.5\" transform=\"translate(914 6995)\" fill=\"#3780ff\"/><circle cx=\"8.5\" cy=\"8.5\" r=\"8.5\" transform=\"translate(1157 6995)\" fill=\"#3780ff\"/><circle cx=\"8.5\" cy=\"8.5\" r=\"8.5\" transform=\"translate(779 6995)\" fill=\"#3780ff\"/><circle cx=\"8.5\" cy=\"8.5\" r=\"8.5\" transform=\"translate(1022 6995)\" fill=\"#3780ff\"/><circle cx=\"8.5\" cy=\"8.5\" r=\"8.5\" transform=\"translate(1265 6995)\" fill=\"#3780ff\"/><circle cx=\"8.5\" cy=\"8.5\" r=\"8.5\" transform=\"translate(1400 6995)\" fill=\"#3780ff\"/><circle cx=\"8.5\" cy=\"8.5\" r=\"8.5\" transform=\"translate(725 6995)\" fill=\"#3780ff\"/><circle cx=\"8.5\" cy=\"8.5\" r=\"8.5\" transform=\"translate(968 6995)\" fill=\"#3780ff\"/><circle cx=\"8.5\" cy=\"8.5\" r=\"8.5\" transform=\"translate(1211 6995)\" fill=\"#3780ff\"/><circle cx=\"8.5\" cy=\"8.5\" r=\"8.5\" transform=\"translate(833 6995)\" fill=\"#3780ff\"/><circle cx=\"8.5\" cy=\"8.5\" r=\"8.5\" transform=\"translate(1076 6995)\" fill=\"#3780ff\"/><circle cx=\"8.5\" cy=\"8.5\" r=\"8.5\" transform=\"translate(1319 6995)\" fill=\"#3780ff\"/><circle cx=\"8.5\" cy=\"8.5\" r=\"8.5\" transform=\"translate(698 6995)\" fill=\"#3780ff\"/><circle cx=\"8.5\" cy=\"8.5\" r=\"8.5\" transform=\"translate(941 6995)\" fill=\"#3780ff\"/><circle cx=\"8.5\" cy=\"8.5\" r=\"8.5\" transform=\"translate(1184 6995)\" fill=\"#3780ff\"/><circle cx=\"8.5\" cy=\"8.5\" r=\"8.5\" transform=\"translate(806 6995)\" fill=\"#3780ff\"/><circle cx=\"8.5\" cy=\"8.5\" r=\"8.5\" transform=\"translate(1049 6995)\" fill=\"#3780ff\"/><circle cx=\"8.5\" cy=\"8.5\" r=\"8.5\" transform=\"translate(1292 6995)\" fill=\"#3780ff\"/><circle cx=\"8.5\" cy=\"8.5\" r=\"8.5\" transform=\"translate(1427 6995)\" fill=\"#3780ff\"/><circle cx=\"8.5\" cy=\"8.5\" r=\"8.5\" transform=\"translate(752 6995)\" fill=\"#3780ff\"/><circle cx=\"8.5\" cy=\"8.5\" r=\"8.5\" transform=\"translate(995 6995)\" fill=\"#3780ff\"/><circle cx=\"8.5\" cy=\"8.5\" r=\"8.5\" transform=\"translate(1238 6995)\" fill=\"#3780ff\"/><circle cx=\"8.5\" cy=\"8.5\" r=\"8.5\" transform=\"translate(860 6995)\" fill=\"#3780ff\"/><circle cx=\"8.5\" cy=\"8.5\" r=\"8.5\" transform=\"translate(1103 6995)\" fill=\"#3780ff\"/><circle cx=\"8.5\" cy=\"8.5\" r=\"8.5\" transform=\"translate(1346 6995)\" fill=\"#3780ff\"/><circle cx=\"8.5\" cy=\"8.5\" r=\"8.5\" transform=\"translate(887 6995)\" fill=\"#3780ff\"/><circle cx=\"8.5\" cy=\"8.5\" r=\"8.5\" transform=\"translate(1130 6995)\" fill=\"#3780ff\"/><circle cx=\"8.5\" cy=\"8.5\" r=\"8.5\" transform=\"translate(1373 6995)\" fill=\"#3780ff\"/><rect width=\"780\" height=\"106\" transform=\"translate(668 6916)\" fill=\"url(#s)\"/><text transform=\"translate(568 6882)\" fill=\"#73a5ff\" font-size=\"12\" font-family=\"RobotoMono-Regular, Roboto Mono\" letter-spacing=\"-0.02em\"><tspan x=\"0\" y=\"13\"># of new apps delivered</tspan></text></g></svg>\n        <svg class=\"sm\" xmlns=\"http://www.w3.org/2000/svg\" width=\"468\" height=\"130\" viewBox=\"0 0 468 130\"><g transform=\"translate(-280 -6882)\"><text transform=\"translate(280 6924)\" fill=\"#3780ff\" font-size=\"12\" font-family=\"RobotoMono-Bold, Roboto Mono\" font-weight=\"700\"><tspan x=\"0\" y=\"13\">09%</tspan></text><text transform=\"translate(280 6959)\" fill=\"#3780ff\" font-size=\"12\" font-family=\"RobotoMono-Bold, Roboto Mono\" font-weight=\"700\"><tspan x=\"0\" y=\"13\">08%</tspan></text><text transform=\"translate(280 6994)\" fill=\"#3780ff\" font-size=\"12\" font-family=\"RobotoMono-Bold, Roboto Mono\" font-weight=\"700\"><tspan x=\"0\" y=\"13\">07%</tspan></text><text transform=\"translate(280 6882)\" fill=\"#73a5ff\" font-size=\"12\" font-family=\"RobotoMono-Regular, Roboto Mono\" letter-spacing=\"-0.02em\"><tspan x=\"0\" y=\"13\">&lt;500 Employee Organizations</tspan></text><text transform=\"translate(568 6925)\" fill=\"#3780ff\" font-size=\"12\" font-family=\"RobotoMono-Regular, Roboto Mono\" letter-spacing=\"-0.02em\"><tspan x=\"0\" y=\"13\">9 or more</tspan></text><text transform=\"translate(568 6960)\" fill=\"#3780ff\" font-size=\"12\" font-family=\"RobotoMono-Regular, Roboto Mono\" letter-spacing=\"-0.02em\"><tspan x=\"0\" y=\"13\">20 or more</tspan></text><text transform=\"translate(568 6995)\" fill=\"#3780ff\" font-size=\"12\" font-family=\"RobotoMono-Regular, Roboto Mono\" letter-spacing=\"-0.02em\"><tspan x=\"0\" y=\"13\">at least 20</tspan></text><line x2=\"248\" transform=\"translate(309.5 6938.5)\" fill=\"none\" stroke=\"#b2becd\" stroke-width=\"0.5\" stroke-dasharray=\"4\"/><line x2=\"28\" transform=\"translate(309.5 6933.5)\" fill=\"none\" stroke=\"#3780ff\" stroke-width=\"11\"/><line x2=\"248\" transform=\"translate(309.5 6973.5)\" fill=\"none\" stroke=\"#b2becd\" stroke-width=\"0.5\" stroke-dasharray=\"4\"/><line x2=\"23\" transform=\"translate(309.5 6968.5)\" fill=\"none\" stroke=\"#3780ff\" stroke-width=\"11\"/><line x2=\"248\" transform=\"translate(309.5 7008.5)\" fill=\"none\" stroke=\"#b2becd\" stroke-width=\"0.5\" stroke-dasharray=\"4\"/><line x2=\"18\" transform=\"translate(309.5 7003.5)\" fill=\"none\" stroke=\"#3780ff\" stroke-width=\"11\"/><text transform=\"translate(558 6882)\" fill=\"#73a5ff\" font-size=\"12\" font-family=\"RobotoMono-Regular, Roboto Mono\" letter-spacing=\"-0.02em\"><tspan x=\"0\" y=\"13\"># of new apps delivered</tspan></text></g></svg>\n      </figure>\n    </div>\n  </section>\n\n  <section id=\"pwas\">\n    <div class=\"container\">\n      <h2>PWAs FTW</h2>\n      <div class=\"cols\">\n        <div class=\"col\">\n          <p>By now, we all know the benefits of PWAs: they use modern web capabilities to deliver fast, native-app experiences with no app stores or downloads. The mobile app experiences they provide are highly optimized, reliable, and accessible — anywhere you have a web browser.</p>\n          <p>It’s not surprising, then, that companies continue to embrace PWAs in overwhelming numbers. Nearly 65% of all respondents said their company built a PWA or plan to in the next year. This compares favorably to our results last year (61%), and shows that PWAs are here to stay.</p>\n          <h4>PWAs as part of a greater app strategy.</h4>\n          <p>Almost three quarters of respondents said their app would (40%) or might (34%) also be made available as a native app in an app store. This shows that PWAs are complementing native apps, rather than replacing them altogether.</p>\n          <p>Interestingly, however, that does leave almost a quarter of respondents don’t plan to make their app available in an app store, showing that the web itself is becoming a legitimate app delivery channel.</p>\n        </div>\n        <div class=\"col\">\n          <p class=\"highlight\">And why are PWAs so popular? Cross platform efficiency — the ease of serving multiple platforms with a single app — continues to be the most popular reason companies are choosing PWAs.</p>\n          <p>This year, however, accessibility to users was also a large driver. Companies increasingly chose PWAs to distribute directly to users (18%), and make it easier for those users to access it through the web and search (10%). This strategy is starting to pay off, with over 10% of respondents saying the single biggest impact they’ve seen from their PWAs is increased usage.</p>\n          <h4>Choose your tools</h4>\n          <p>Similar to last year, Ionic and Angular were far and away the most popular tools for developing PWAs. On the hosting side, Firebase and AWS once again topped the rankings, with a significant number of companies (33%) also choosing to host PWAs themselves.</p>\n          <figure>\n            <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"399.647\" height=\"121.125\" viewBox=\"0 0 399.647 121.125\"><g transform=\"translate(-780 -8193)\"><text transform=\"translate(1015 8193)\" fill=\"#73a5ff\" font-size=\"12\" font-family=\"RobotoMono-Regular, Roboto Mono\" letter-spacing=\"-0.02em\"><tspan x=\"0\" y=\"13\">Development</tspan></text><text transform=\"translate(903 8193)\" fill=\"#73a5ff\" font-size=\"12\" font-family=\"RobotoMono-Regular, Roboto Mono\" letter-spacing=\"-0.02em\"><tspan x=\"0\" y=\"13\">Hosting</tspan></text><g transform=\"translate(992.607 8217)\"><path d=\"M63.147,30h0L31.9,41.143l4.766,41.315L63.147,97.125h0L89.627,82.458l4.766-41.315Z\" transform=\"translate(0)\" fill=\"#73849a\"/><path d=\"M125,30V71.416h0V97.125h0l26.481-14.667,4.766-41.315Z\" transform=\"translate(-61.853)\" fill=\"#73849a\"/><path d=\"M86.333,52.1,66.8,95.9h7.283l3.927-9.8H94.59l3.927,9.8H105.8L86.333,52.1Zm5.706,27.957H80.628L86.333,66.33Z\" transform=\"translate(-23.187 -14.683)\" fill=\"#fff\"/></g><g transform=\"translate(458 8873)\"><path d=\"M89.435,222.5a15.185,15.185,0,1,0,15.185,15.185A15.185,15.185,0,0,0,89.435,222.5Z\" transform=\"translate(598.888 -830.35)\" fill=\"#73849a\"/><circle cx=\"6.917\" cy=\"6.917\" r=\"6.917\" transform=\"translate(703.21 -620.338)\" fill=\"#73849a\"/><path d=\"M97.88,201.992l-.29-.635-.453.526a10.426,10.426,0,0,1-4.175,2.874l-.453.163.181.453a27.238,27.238,0,1,1-13.467-14.147l.426.2.186-.453a10.425,10.425,0,0,1,3.073-4.03l.544-.453-.621-.322a32.946,32.946,0,0,0-15.276-3.713,33.322,33.322,0,1,0,30.321,19.492Z\" transform=\"translate(620.764 -808.46)\" fill=\"#73849a\"/></g><path d=\"M67.161,147.73l7.532-48.266A1.738,1.738,0,0,1,77.94,98.9l8.095,15.151Zm53.547,11.731L113.522,115a1.743,1.743,0,0,0-2.944-.952L65.3,159.461,90.363,173.53a5.263,5.263,0,0,0,5.065,0Zm-20.345-38.786-5.8-11.038a1.725,1.725,0,0,0-3.073,0l-25.5,45.452Z\" transform=\"translate(832.97 8139.945)\" fill=\"#73849a\"/><g transform=\"translate(778.332 8253.9)\"><path d=\"M34.522,19.544a8.546,8.546,0,0,0,.311,2.514,15.119,15.119,0,0,0,.9,2.034,1.229,1.229,0,0,1,.2.65,1.118,1.118,0,0,1-.537.847l-1.779,1.186a1.354,1.354,0,0,1-.734.254,1.3,1.3,0,0,1-.847-.4,8.738,8.738,0,0,1-1.017-1.328c-.282-.48-.565-1.017-.876-1.666a10.434,10.434,0,0,1-8.3,3.9A7.739,7.739,0,0,1,16.19,25.5a7.256,7.256,0,0,1-2.09-5.423,7.271,7.271,0,0,1,2.57-5.819,10.275,10.275,0,0,1,6.92-2.2,22.364,22.364,0,0,1,2.994.226c1.045.141,2.118.367,3.248.621V10.845c0-2.147-.452-3.644-1.328-4.519-.9-.876-2.429-1.3-4.6-1.3a12.851,12.851,0,0,0-3.051.367,22.507,22.507,0,0,0-3.051.96,8.1,8.1,0,0,1-.989.367,1.732,1.732,0,0,1-.452.085c-.4,0-.593-.282-.593-.876V4.546a1.787,1.787,0,0,1,.2-.989,2.115,2.115,0,0,1,.791-.593,16.261,16.261,0,0,1,3.559-1.271,17.125,17.125,0,0,1,4.406-.537c3.361,0,5.819.763,7.4,2.288,1.554,1.525,2.344,3.841,2.344,6.948v9.152ZM23.054,23.838a9.154,9.154,0,0,0,2.909-.508,6.294,6.294,0,0,0,2.683-1.808,4.483,4.483,0,0,0,.96-1.808,10.14,10.14,0,0,0,.282-2.457V16.07a23.589,23.589,0,0,0-2.6-.48,21.283,21.283,0,0,0-2.655-.169,6.512,6.512,0,0,0-4.209,1.13A3.937,3.937,0,0,0,19.043,19.8a3.644,3.644,0,0,0,4.011,4.039Zm22.681,3.051a1.577,1.577,0,0,1-1.073-.282,2.3,2.3,0,0,1-.593-1.1L37.431,3.67a4.948,4.948,0,0,1-.254-1.13.62.62,0,0,1,.678-.706h2.768a1.566,1.566,0,0,1,1.1.282,2.311,2.311,0,0,1,.565,1.1l4.745,18.7,4.406-18.7a1.981,1.981,0,0,1,.537-1.1,1.943,1.943,0,0,1,1.13-.282h2.26a1.7,1.7,0,0,1,1.13.282,1.9,1.9,0,0,1,.537,1.1L61.5,22.143,66.383,3.218a2.422,2.422,0,0,1,.565-1.1,1.843,1.843,0,0,1,1.1-.282h2.627a.628.628,0,0,1,.706.706,2.817,2.817,0,0,1-.056.452,4.02,4.02,0,0,1-.2.706L64.321,25.532a2.166,2.166,0,0,1-.593,1.1,1.807,1.807,0,0,1-1.073.282H60.225a1.7,1.7,0,0,1-1.13-.282,2,2,0,0,1-.537-1.13L54.181,7.286l-4.35,18.19a2.2,2.2,0,0,1-.537,1.13,1.751,1.751,0,0,1-1.13.282Zm36.3.763a18.692,18.692,0,0,1-4.35-.508,12.849,12.849,0,0,1-3.248-1.13,2.035,2.035,0,0,1-.876-.791,1.994,1.994,0,0,1-.169-.791V22.99c0-.593.226-.876.65-.876a1.6,1.6,0,0,1,.508.085c.169.056.424.169.706.282a15.364,15.364,0,0,0,3.107.989,16.963,16.963,0,0,0,3.361.339,7.621,7.621,0,0,0,4.124-.932,3.042,3.042,0,0,0,1.469-2.683,2.751,2.751,0,0,0-.763-1.977A7.087,7.087,0,0,0,83.7,16.748l-4.1-1.271A8.615,8.615,0,0,1,75.082,12.6,6.73,6.73,0,0,1,73.67,8.5a6.286,6.286,0,0,1,.763-3.135,7.263,7.263,0,0,1,2.034-2.316A8.965,8.965,0,0,1,79.4,1.58a12.311,12.311,0,0,1,3.559-.48,14.18,14.18,0,0,1,1.892.113c.65.085,1.243.2,1.836.311.565.141,1.1.282,1.61.452a6.165,6.165,0,0,1,1.186.508,2.442,2.442,0,0,1,.847.706,1.522,1.522,0,0,1,.254.932V5.45c0,.593-.226.9-.65.9a2.938,2.938,0,0,1-1.073-.339,12.922,12.922,0,0,0-5.423-1.1,7.29,7.29,0,0,0-3.757.791,2.727,2.727,0,0,0-1.328,2.514,2.667,2.667,0,0,0,.847,2.005,8.437,8.437,0,0,0,3.107,1.554l4.011,1.271A8.591,8.591,0,0,1,90.7,15.759,6.392,6.392,0,0,1,92,19.714a7.261,7.261,0,0,1-.734,3.276,7.6,7.6,0,0,1-2.062,2.486,9.105,9.105,0,0,1-3.135,1.582A13.432,13.432,0,0,1,82.031,27.651Z\" transform=\"translate(-8.921)\" fill=\"#73849a\"/><g transform=\"translate(1.668 32.761)\"><path d=\"M78.449,126.079c-9.293,6.864-22.794,10.507-34.4,10.507a62.239,62.239,0,0,1-42-16.015c-.876-.791-.085-1.864.96-1.243a84.705,84.705,0,0,0,42.03,11.157,83.871,83.871,0,0,0,32.059-6.553C78.646,123.226,79.974,124.949,78.449,126.079Z\" transform=\"translate(-1.668 -117.462)\" fill=\"#73849a\" fill-rule=\"evenodd\"/><path d=\"M257.628,117.4c-1.186-1.525-7.852-.734-10.875-.367-.9.113-1.045-.678-.226-1.271,5.31-3.728,14.038-2.655,15.055-1.412,1.017,1.271-.282,10-5.254,14.179-.763.65-1.5.311-1.158-.537C256.3,125.2,258.814,118.9,257.628,117.4Z\" transform=\"translate(-176.977 -113.192)\" fill=\"#73849a\" fill-rule=\"evenodd\"/></g></g></g></svg>\n          </figure>\n        </div>\n      </div>\n    </div>\n  </section>\n\n  <section id=\"backend\" class=\"grey\">\n    <div class=\"container\">\n      <h2>Continuous delivery</h2>\n      <div class=\"cols\">\n        <div class=\"col\">\n          <h4>Top CI/CD tools</h4>\n          <p>Now that we’ve seen how many apps respondents are responsible for, let’s look at how they’re managing their processes. DevOps and continuous integration and continuous delivery (CI/CD) tools to streamline software development, testing, and deployment are no longer new. Developers know that using a CI/CD tool of some kind is critical to keeping your release cadence where it needs to be--whether it’s weekly, daily, or more.</p>\n        </div>\n        <div class=\"col\">\n          <h4>Top 3 General Purpose CI/CD tools:</h4>\n          <figure>\n            <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"411\" height=\"87\" viewBox=\"0 0 411 87\"><g transform=\"translate(-780 -8715)\"><text transform=\"translate(780 8715)\" fill=\"#3780ff\" font-size=\"12\" font-family=\"RobotoMono-Bold, Roboto Mono\" font-weight=\"700\"><tspan x=\"0\" y=\"13\">22%</tspan></text><text transform=\"translate(780 8749)\" fill=\"#3780ff\" font-size=\"12\" font-family=\"RobotoMono-Bold, Roboto Mono\" font-weight=\"700\"><tspan x=\"0\" y=\"13\">20%</tspan></text><text transform=\"translate(780 8783)\" fill=\"#3780ff\" font-size=\"12\" font-family=\"RobotoMono-Bold, Roboto Mono\" font-weight=\"700\"><tspan x=\"0\" y=\"13\">18%</tspan></text><text transform=\"translate(1068 8716)\" fill=\"#3780ff\" font-size=\"12\" font-family=\"RobotoMono-Regular, Roboto Mono\" letter-spacing=\"-0.02em\"><tspan x=\"0\" y=\"13\">GitLab CI</tspan></text><text transform=\"translate(1068 8750)\" fill=\"#3780ff\" font-size=\"12\" font-family=\"RobotoMono-Regular, Roboto Mono\" letter-spacing=\"-0.02em\"><tspan x=\"0\" y=\"13\">Jenkins/CloudBees</tspan></text><text transform=\"translate(1068 8784)\" fill=\"#3780ff\" font-size=\"12\" font-family=\"RobotoMono-Regular, Roboto Mono\" letter-spacing=\"-0.02em\"><tspan x=\"0\" y=\"13\">GitHub Actions</tspan></text><line x2=\"248\" transform=\"translate(809.5 8729.5)\" fill=\"none\" stroke=\"#b2becd\" stroke-width=\"0.5\" stroke-dasharray=\"4\"/><line x2=\"56\" transform=\"translate(809.5 8724.5)\" fill=\"none\" stroke=\"#3780ff\" stroke-width=\"11\"/><line x2=\"248\" transform=\"translate(809.5 8763.5)\" fill=\"none\" stroke=\"#b2becd\" stroke-width=\"0.5\" stroke-dasharray=\"4\"/><line x2=\"47\" transform=\"translate(809.5 8758.5)\" fill=\"none\" stroke=\"#3780ff\" stroke-width=\"11\"/><line x2=\"248\" transform=\"translate(809.5 8797.5)\" fill=\"none\" stroke=\"#b2becd\" stroke-width=\"0.5\" stroke-dasharray=\"4\"/><line x2=\"36\" transform=\"translate(809.5 8792.5)\" fill=\"none\" stroke=\"#3780ff\" stroke-width=\"11\"/></g></svg>\n          </figure>\n          <h4>Top 3 Mobile CI/CD tools:</h4>\n          <figure>\n            <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"439\" height=\"87\" viewBox=\"0 0 439 87\"><g transform=\"translate(-780 -8897)\"><text transform=\"translate(780 8897)\" fill=\"#3780ff\" font-size=\"12\" font-family=\"RobotoMono-Bold, Roboto Mono\" font-weight=\"700\"><tspan x=\"0\" y=\"13\">12%</tspan></text><text transform=\"translate(780 8931)\" fill=\"#3780ff\" font-size=\"12\" font-family=\"RobotoMono-Bold, Roboto Mono\" font-weight=\"700\"><tspan x=\"0\" y=\"13\">05%</tspan></text><text transform=\"translate(780 8965)\" fill=\"#3780ff\" font-size=\"12\" font-family=\"RobotoMono-Bold, Roboto Mono\" font-weight=\"700\"><tspan x=\"0\" y=\"13\">01%</tspan></text><text transform=\"translate(1068 8898)\" fill=\"#3780ff\" font-size=\"12\" font-family=\"RobotoMono-Regular, Roboto Mono\" letter-spacing=\"-0.02em\"><tspan x=\"0\" y=\"13\">Ionic Appflow</tspan></text><text transform=\"translate(1068 8932)\" fill=\"#3780ff\" font-size=\"12\" font-family=\"RobotoMono-Regular, Roboto Mono\" letter-spacing=\"-0.02em\"><tspan x=\"0\" y=\"13\">Microsoft App Center</tspan></text><text transform=\"translate(1068 8966)\" fill=\"#3780ff\" font-size=\"12\" font-family=\"RobotoMono-Regular, Roboto Mono\" letter-spacing=\"-0.02em\"><tspan x=\"0\" y=\"13\">Buddy Build</tspan></text><line x2=\"248\" transform=\"translate(809.5 8911.5)\" fill=\"none\" stroke=\"#b2becd\" stroke-width=\"0.5\" stroke-dasharray=\"4\"/><line x2=\"36\" transform=\"translate(809.5 8906.5)\" fill=\"none\" stroke=\"#3780ff\" stroke-width=\"11\"/><line x2=\"248\" transform=\"translate(809.5 8945.5)\" fill=\"none\" stroke=\"#b2becd\" stroke-width=\"0.5\" stroke-dasharray=\"4\"/><line x2=\"15\" transform=\"translate(809.5 8940.5)\" fill=\"none\" stroke=\"#3780ff\" stroke-width=\"11\"/><line x2=\"248\" transform=\"translate(809.5 8979.5)\" fill=\"none\" stroke=\"#b2becd\" stroke-width=\"0.5\" stroke-dasharray=\"4\"/><line x2=\"8\" transform=\"translate(809.5 8974.5)\" fill=\"none\" stroke=\"#3780ff\" stroke-width=\"11\"/></g></svg>\n          </figure>\n        </div>\n      </div>\n      <h4>How developers are using CI/CD tools</h4>\n      <p class=\"highlight\">While over 75% of professionals surveyed are using a CI/CD tool, that still leaves almost a quarter that aren’t. The release cadence for these companies shows how valuable CI/CD tools can be in today’s environment.</p>\n      <p class=\"highlight\">Respondents using a CI/CD tool were <strong>70% more likely to release multiple times per week or more</strong>, and 42% less likely to release quarterly or less.</p>\n      <div class=\"spacer\"></div>\n      <h4>How often do you release apps? (release cadence)</h4>\n      <figure>\n        <img src=\"/img/survey/release-frequency@2x.png\"\n          srcset=\"/img/survey/release-frequency.png 1x, /img/survey/release-frequency@2x.png 2x\"\n          alt=\"Chart showing that those who use CI/CD tools tend to release more frequently\" />\n      </figure>\n      <p class=\"highlight\">This signals that more people in the React and Vue communities are trying Ionic, and perhaps some existing Angular developers are giving other frameworks a try, as well.</p>\n    </div>\n  </section>\n  \n  <div id=\"dark-sections\">\n    <section id=\"bottom-line\" class=\"dark center\">\n      <div class=\"container\">\n        <h2>The bottom line</h2>\n        <p class=\"lg\">We’ve been conducting this survey for three years now, and the results have never been more clear: PWAs are here and they’re delivering results. It’s also important to recognize that Web Developers are delivering more and more value, as they shift from the browser to the full technology stack.</p>\n        <p class=\"lg\">Companies are recognizing these facts in a few important ways. First, they’re recognizing the value Web Developers bring and leaning on them for more decision-making responsibilities. Organizations are also increasingly investing in comprehensive web strategies, and realizing that PWAs are an important way to deliver cross-platform apps efficiently, and effectively drive users to their apps.</p>\n        <p class=\"lg\"><strong>At Ionic we’ve always believed in the power of the web—and web developers. The results of this survey show that year after year, more companies are joining us on that path.</strong></p>\n      </div>\n    </section>\n  \n    <section id=\"results\" class=\"black\">\n      <div class=\"container\">\n        <h2>Survey Results and Demographics</h2>\n        <p class=\"lg\">We’re happy to say that the survey once again attracted a diverse community of respondents. Developers of all types, working on different types of apps, working for companies of all sizes, in a range of industries, all across the globe contributed to our study.</p>\n        <p class=\"lg\">See for yourself:</p>\n        <h3 id=\"results-demographcis\">Demographics</h3>\n        <dl>\n          <dt>Which of the following best describes you?</dt>\n          <dd>\n            <figure>\n              <bar-chart color=\"pink\" graph-data='{\n                  \"Professional Developer\": 81,\n                  \"Non-Developer, Occasional\": 9,\n                  \"Student\": 7,\n                  \"Former Developer\": 2,\n                  \"Other\": 2 \n                }'></bar-chart>\n            </figure>\n          </dd>\n          <dt>Which of the following best describes the principal industry of your organization?</dt>\n          <dd>\n            <figure>\n              <bar-chart color=\"pink\" graph-data='{\n                  \"Telcom, Tech, Internet & Electronics\": 28,\n                  \"Professional Services & Consulting\": 18,\n                  \"Education\": 7,\n                  \"Finance & Financial Services\": 7,\n                  \"Healthcare & Pharmaceuticals\": 5,\n                  \"Business Support & Logistics\": 4,\n                  \"Advertising & Marketing\": 4,\n                  \"Entertainment & Leisure\": 3,\n                  \"Government\": 3,\n                  \"Retail & Consumer Durables\": 2,\n                  \"Transportation & Delivery\": 2,\n                  \"Manufacturing\": 2,\n                  \"Food & Beverages\": 1,\n                  \"Insurance\": 1,\n                  \"Automotive\": 1,\n                  \"Nonprofit\": 1,\n                  \"Utilities, Energy, and Extraction\": 1,\n                  \"Construction, Machinery, and Homes\": 1,\n                  \"Agriculture\": 1,\n                  \"Real Estate\": 1,\n                  \"Airlines & Aerospace\": 1,\n                  \"I am currently not employed\": 5\n                }'></bar-chart>\n            </figure>\n          </dd>\n        </dl>\n        <dl>\n          <dt>About how many employees work at your company?</dt>\n          <dd>\n            <figure>\n              <bar-chart color=\"pink\" graph-data='{\n                  \"1-10 employees\": 37,\n                  \"11-50 employees\": 22,\n                  \"51-500 employees\": 18,\n                  \"501-1000 employees\": 4,\n                  \"1001-5000 employees\": 5,\n                  \"5,001+ employees\": 7,\n                  \"I am currently not employed\": 7\n                }'></bar-chart>\n            </figure>\n          </dd>\n          <dt>In which region do you currently reside?</dt>\n          <dd>\n            <figure>\n              <bar-chart color=\"pink\" graph-data='{\n                  \"Europe\": 39,\n                  \"Asia and Pacific\": 22,\n                  \"South and Latin America\": 16,\n                  \"North America\": 16,\n                  \"Africa, Middle East, and CIS\": 7\n                }'></bar-chart>\n            </figure>\n          </dd>\n          <dt>Which following best describe you as a software developer?</dt>\n          <dd>\n            <figure>\n              <bar-chart color=\"pink\" graph-data='{\n                  \"Web developer\": 76,\n                  \"Mobile developer\": 16,\n                  \"Desktop applications developer\": 2,\n                  \"DevOps specialist\": 1,\n                  \"Data scientist\": 0,\n                  \"Systems administrator\": 0,\n                  \"Graphic designer\": 0,\n                  \"Database administrator\": 0,\n                  \"Other\": 4\n                }'></bar-chart>\n            </figure>\n          </dd>\n          <dt>\n            Which of the following best describes you as a Web developer?\n            <small>For respondents who identified as Web Developers in the previous question.</small>\n          </dt>\n          <dd>\n            <figure>\n              <bar-chart color=\"pink\" graph-data='{\n                  \"Full stack Web developer\": 78,\n                  \"Front-end Web developer\": 17,\n                  \"Back-end Web developer\": 5\n                }'></bar-chart>\n            </figure>\n          </dd>\n          <dt>\n            Which of the following ​best describes your current role?\n            <small>For respondents who identified as non-developers.</small>\n          </dt>\n          <dd>\n            <figure>\n              <bar-chart color=\"pink\" graph-data='{\n                  \"Engineering manager\": 15,\n                  \"C-suite executive (CIO, CTO, etc.)\": 14,\n                  \"Product manager\": 12,\n                  \"Analyst or consultant\": 10,\n                  \"Designer or illustrator\": 8,\n                  \"Educator or academic researcher\": 7,\n                  \"Architect\": 6,\n                  \"Data scientist\": 3,\n                  \"Other\": 25\n                }'></bar-chart>\n            </figure>\n          </dd>\n        </dl>\n        <h3 id=\"results-frameworks\">Frameworks, Tools, and Approaches</h3>\n        <dl>\n          <dt>Which of the following libraries, frameworks, and tools have you done extensive development work in over the past year?</dt>\n          <dd>\n            <figure>\n              <bar-chart color=\"blue\" graph-data='{\n                  \"Angular\": 84,\n                  \"React\": 30,\n                  \"Vue\": 20,\n                  \"Stencil\": 6,\n                  \"Ext JS\": 4,\n                  \"Backbone\": 2,\n                  \"Meteor\": 2,\n                  \"Polymer\": 2,\n                  \"Ember\": 1,\n                  \"Svelte\": 1,\n                  \"Preact\": 1,\n                  \"Other\": 10\n                }'></bar-chart>\n            </figure>\n          </dd>\n          <dt>Which of the following mobile development tools and SDKs have you done extensive development work in over the past year?</dt>\n          <dd>\n            <figure>\n              <bar-chart color=\"blue\" graph-data='{\n                  \"Ionic\": 86,\n                  \"Cordova\": 48,\n                  \"Native Android\": 20,\n                  \"React Native\": 16,\n                  \"Flutter\": 12,\n                  \"Native iOS\": 11,\n                  \"Xamarin\": 6,\n                  \"NativeScript\": 5,\n                  \"Other\": 3\n                }'></bar-chart>\n            </figure>\n          </dd>\n        </dl>\n  \n        <h3 id=\"results-backend\">Backend Technology</h3>\n        <dl>\n          <dt>Which of the following continuous integration and delivery (CI/CD) tools have you used extensively over the past year?</dt>\n          <dd>\n            <figure>\n              <bar-chart color=\"yellow\" graph-data='{\n                  \"GitLab CI\": 22,\n                  \"Jenkins/ CloudBees\": 20,\n                  \"GitHub Actions\": 18,\n                  \"BitBucket Pipeline\": 15,\n                  \"Azure DevOps\": 13,\n                  \"Ionic Appflow\": 12,\n                  \"Circle CI\": 6,\n                  \"Travis CI\": 6,\n                  \"Microsoft App Center\": 5,\n                  \"AWS CodePipeline\": 5,\n                  \"Buddy Build\": 1,\n                  \"Bitrise\": 0,\n                  \"Other\": 6,\n                  \"None\": 24\n                }'></bar-chart>\n            </figure>\n          </dd>\n          <dt>Which of the following backend service providers have you used extensively over the past year?</dt>\n          <dd>\n            <figure>\n              <bar-chart color=\"yellow\" graph-data='{\n                  \"Firebase / GCP\": 53,\n                  \"AWS\": 43,\n                  \"Azure\": 23,\n                  \"Heroku\": 16,\n                  \"IBM\": 3,\n                  \"Oracle (Mobile Hub)\": 2,\n                  \"Red Hat (Feed Henry)\": 2,\n                  \"Progress (Kinvey)\": 0,\n                  \"Kumulos\": 0,\n                  \"Rackspace Managed Cloud\": 0,\n                  \"Digital Ocean\": 0,\n                  \"Other (please specify)\": 11\n                }'></bar-chart>\n            </figure>\n          </dd>\n          <dt>Which of the following hosting providers have you used extensively over the past year?</dt>\n          <dd>\n            <figure>\n              <bar-chart color=\"yellow\" graph-data='{\n                  \"AWS\": 39,\n                  \"Firebase / GCP\": 36,\n                  \"Self-hosted\": 33,\n                  \"Azure\": 18,\n                  \"Digital Ocean\": 16,\n                  \"Heroku\": 14,\n                  \"Netlify\": 6,\n                  \"Other\": 10\n                }'></bar-chart>\n            </figure>\n          </dd>\n          <dt>Which of the following database environments have you done extensive development work in over the past year?</dt>\n          <dd>\n            <figure>\n              <bar-chart color=\"yellow\" graph-data='{\n                  \"MySQL\": 55,\n                  \"Firebase\": 36,\n                  \"MongoDB\": 31,\n                  \"Microsoft SQL Server\": 26,\n                  \"SQLite\": 26,\n                  \"Postgres\": 25,\n                  \"MariaDB\": 17,\n                  \"Redis\": 10,\n                  \"Oracle\": 10,\n                  \"AWS RDS\": 8,\n                  \"AWS DynamoDB\": 6,\n                  \"CouchDB\": 4,\n                  \"Cassandra\": 2,\n                  \"Couchbase\": 2,\n                  \"Other\": 4\n                }'></bar-chart>\n            </figure>\n          </dd>\n          <dt>Which of the following user authentication services have you used extensively over the past year?</dt>\n          <dd>\n            <figure>\n              <bar-chart color=\"yellow\" graph-data='{\n                  \"Firebase Auth\": 43,\n                  \"Custom OAuth\": 33,\n                  \"Auth0\": 28,\n                  \"OpenID Connect\": 9,\n                  \"Azure Authentication\": 8,\n                  \"Amazon Cognito\": 7,\n                  \"Auth.io\": 6,\n                  \"Microsoft ADFS\": 6,\n                  \"GCP Auth\": 4,\n                  \"Fabric Digits\": 0,\n                  \"Stormpath\": 0,\n                  \"Other\": 9\n                }'></bar-chart>\n            </figure>\n          </dd>\n          <dt>Which of the following push notification services have you used extensively over the past year?</dt>\n          <dd>\n            <figure>\n              <bar-chart color=\"yellow\" graph-data='{\n                  \"Firebase\": 73,\n                  \"OneSignal\": 28,\n                  \"Amazon Pinpoint\": 4,\n                  \"Pushwoosh\": 2,\n                  \"Urban Airship\": 1,\n                  \"Apple Push Notification Service\": 0,\n                  \"Google Cloud Messaging\": 0,\n                  \"Other\": 11\n                }'></bar-chart>\n            </figure>\n          </dd>\n        </dl>\n  \n        <h3 id=\"results-process\">Development Process</h3>\n        <dl>\n          <dt>How much influence do you have when it comes to determining which backend services and providers to use?</dt>\n          <dd>\n            <figure>\n              <bar-chart color=\"blue\" graph-data='{\n                  \"I have the final say\": 30,\n                  \"A great deal\": 24,\n                  \"A lot\": 10,\n                  \"A moderate amount\": 18,\n                  \"A little\": 10,\n                  \"None at all\": 8\n                }'></bar-chart>\n            </figure>\n          </dd>\n          <dt>How many new apps did you or your team deliver in the past year?</dt>\n          <dd>\n            <figure>\n              <bar-chart color=\"blue\" graph-data='{\n                  \"1-3\": 70,\n                  \"4-8\": 24,\n                  \"9-15\": 4,\n                  \"16-20\": 1,\n                  \"20+\": 1\n                }'></bar-chart>\n            </figure>\n          </dd>\n          <dt>How long, on average, does it take your organization to deliver a new mobile or web application?</dt>\n          <dd>\n            <figure>\n              <bar-chart color=\"blue\" graph-data='{\n                  \"1 - 2 months\": 21,\n                  \"3 - 4 months\": 41,\n                  \"5 - 6 months\": 22,\n                  \"7 - 12 months\": 9,\n                  \"Over 12 months\": 8\n                }'></bar-chart>\n            </figure>\n          </dd>\n          <dt>How many existing apps did you or your team actively maintain or update during the past year?</dt>\n          <dd>\n            <figure>\n              <bar-chart color=\"blue\" graph-data='{\n                  \"1-5\": 78,\n                  \"6-10\": 15,\n                  \"11-20\": 4,\n                  \"20+\": 3\n                }'></bar-chart>\n            </figure>\n          </dd>\n          <dt>About how frequently do you release new versions and update to the apps that you currently maintain?</dt>\n          <dd>\n            <figure>\n              <bar-chart color=\"blue\" graph-data='{\n                  \"Every day\": 4,\n                  \"A few times a week\": 9,\n                  \"About once a week\": 11,\n                  \"A few times a month\": 23,\n                  \"Once a month\": 24,\n                  \"Once a quarter\": 18,\n                  \"Less than once a quarter\": 11\n                }'></bar-chart>\n            </figure>\n          </dd>\n          <dt>How many app development projects are currently in the backlog and awaiting development?</dt>\n          <dd>\n            <figure>\n              <bar-chart color=\"blue\" graph-data='{\n                  \"1-9\": 90,\n                  \"10-19\": 7,\n                  \"20-29\": 1,\n                  \"30-49\": 1,\n                  \"50-100\": 1,\n                  \"100+\": 1\n                }'></bar-chart>\n            </figure>\n          </dd>\n        </dl>\n  \n        <h3 id=\"results-pwas\">Progressive Web Apps</h3>\n        <dl>\n          <dt>Which of the following deployment targets have you developed apps for over the past year?</dt>\n          <dd>\n            <figure>\n              <bar-chart color=\"green\" graph-data='{\n                  \"Google Play\": 82,\n                  \"iOS App Store\": 70,\n                  \"Web Browser (including PWAs)\": 62,\n                  \"Desktop Container (e.g. Electron)\": 13,\n                  \"Smart Devices\": 6,\n                  \"Chat / Conversational AI\": 5,\n                  \"Microsoft Store\": 3,\n                  \"Voice\": 2,\n                  \"Wearables\": 2\n                }'></bar-chart>\n            </figure>\n          </dd>\n          <dt>Have you published a Progressive Web App (PWA) in the last year?</dt>\n          <dd>\n            <figure>\n              <bar-chart color=\"green\" graph-data='{\n                  \"Yes\": 38,\n                  \"No\": 37,\n                  \"No, but we plan to next year\": 25\n                }'></bar-chart>\n            </figure>\n          </dd>\n          <dt>Will the app also be available as a native binary in the app stores?</dt>\n          <dd>\n            <figure>\n              <bar-chart color=\"green\" graph-data='{\n                  \"Yes\": 40,\n                  \"No\": 26,\n                  \"Maybe\": 34\n                }'></bar-chart>\n            </figure>\n          </dd>\n          <dt>What is the *primary* motivation for building a PWA?</dt>\n          <dd>\n            <figure>\n              <bar-chart color=\"green\" graph-data='{\n                  \"Cross-platform efficiency\": 42,\n                  \"Distribute the app directly to users\": 18,\n                  \"Improve mobile web experience\": 18,\n                  \"Easier to update the app as needed\": 11,\n                  \"Acquire more users\": 10,\n                  \"Everyone else is doing it\": 2\n                }'></bar-chart>\n            </figure>\n          </dd>\n          <dt>If you have published a PWA already, what is the biggest impact you have observed so far?</dt>\n          <dd>\n            <figure>\n              <bar-chart color=\"green\" graph-data='{\n                  \"Simplified operations\": 33,\n                  \"Haven&#145t published the PWA yet\": 31,\n                  \"No impact since publishing the PWA\": 12,\n                  \"Better user engagement\": 11,\n                  \"Increased user acquisition\": 9,\n                  \"Increased in-app/ad-driven revenue\": 2,\n                  \"other\": 2\n                }'></bar-chart>\n            </figure>\n          </dd>\n          <dt>Which tools, libraries, or frameworks are you using to build PWAs?</dt>\n          <dd>\n            <figure>\n              <bar-chart color=\"green\" graph-data='{\n                  \"Ionic\": 72,\n                  \"Angular\": 71,\n                  \"React\": 21,\n                  \"Vue\": 15,\n                  \"Stencil\": 8,\n                  \"Polymer / Lit-Element\": 2,\n                  \"Preact\": 1,\n                  \"Other\": 4\n                }'></bar-chart>\n            </figure>\n          </dd>\n          <dt>Which of the following hosting providers are you using to host your PWA(s)?</dt>\n          <dd>\n            <figure>\n              <bar-chart color=\"green\" graph-data='{\n                  \"Firebase / GCP\": 38,\n                  \"Self-hosted\": 33,\n                  \"AWS\": 28,\n                  \"Azure\": 13,\n                  \"Digital Ocean\": 11,\n                  \"Heroku\": 9,\n                  \"Other\": 7,\n                  \"Netlify\": 6\n                }'></bar-chart>\n            </figure>\n          </dd>\n        </dl>\n      </div>\n    </section>\n  </div>\n</main>\n{% endblock %}\n\n{% block scripts %}\n<script src=\"https://cdnjs.cloudflare.com/ajax/libs/three.js/r70/three.min.js\"></script>\n<script>\nconst stickyWatcher = () => {\n  const $nav = document.getElementById('survey-2020-nav')\n  const observer = new IntersectionObserver( \n    ([e]) => $nav.classList.toggle('isSticky', e.intersectionRatio < 1),\n    {threshold: [1]}\n  );\n  $scrollSpy = document.getElementById('scroll-spy');\n  observer.observe($scrollSpy);\n\n  const darknessObserver = new IntersectionObserver( \n    ([e]) => $nav.classList.toggle('isDark', e.isIntersecting),\n    {rootMargin: '-50px 0px -93%'}\n  );\n  const $darkSections = document.getElementById('dark-sections')\n  darknessObserver.observe($darkSections);\n\n  // check initial scroll positions\n  const scrollPos = document.body.scrollTop;\n  if (scrollPos > $scrollSpy.offsetTop) {\n    $nav.classList.add('isSticky')\n  }\n  if (scrollPos > $darkSections.offsetTop) {\n    $nav.classList.add('isDark')\n  }\n};\nstickyWatcher();\n\n$('body').scrollspy({\n  offset: 150\n});\n\n$(window).on('activate.bs.scrollspy', function (e) {\n  currentSection = $(\"a[href^='#']\", e.target).attr(\"href\");\n  history.replaceState({}, \"Ionic Framework - Survey-2017\", currentSection);\n\n});\n\n\ncreateCube = ($element, color, size) => {\n  // Based on https://codepen.io/stizz1e/pen/EPyOyE\n  //Build the scene\n  function random(min, max) {\n    return Math.floor(Math.random() * (max - min) ) + min\n  }\n  const width = size,\n      height = size,\n      xRotate = random(0, 1) === 1 ? random(8000, 12000) : -1 * random(8000, 12000),\n      yRotate = random(0, 1) === 1 ? random(8000, 12000) : -1 * random(8000, 12000);\n  const View_angle = 45,\n      Aspect = width / height,\n      Near = .01,\n      Far = 10000;\n  \n  //Create WebGL renderer, camera and scene\n  const renderer = new THREE.WebGLRenderer({antialias: true, alpha: true});\n  const camera = new THREE.PerspectiveCamera(\n    45, 1, 0.1, 10000);\n  const scene = new THREE.Scene();\n\n  //add camera to the scene\n  scene.add(camera);\n  //adjust camera y-index\n  camera.position.y = 160;\n  //adjust camera z-index\n  camera.position.z = 400;\n  \n  //init renderer\n  renderer.setPixelRatio(window.devicePixelRatio);\n  renderer.setSize(width, height);\n  \n  $element.append(renderer.domElement);\n  //END Scene set up variables\n  \n  //CREATE Cube object\n  const cubeGeometry = new THREE.BoxGeometry(100, 100, 100);\n  const cubeMaterial = new THREE.MeshLambertMaterial({color});\n  const cube = new THREE.Mesh(cubeGeometry, cubeMaterial);\n  cube.rotation.y = random(0, 360);\n  cube.rotation.x = random(0, 360);\n  scene.add(cube);\n  //END CUBE OBJECT\n  \n  //tell camera what to look at\n  camera.lookAt(cube.position);\n  \n  //START LIGHTING\n  const pointLight = new THREE.PointLight(0xFFFFFF, .5);\n  pointLight.position.set(-100, 500, 200);\n  scene.add(pointLight);\n  // const bottomLight = new THREE.PointLight(0xFFFFFF, 1);\n  // bottomLight.position.set(0, -100, 500);\n  // scene.add(bottomLight);\n  const light = new THREE.HemisphereLight(0xFFFFFF, 0xFFFFFF, .8);\n  scene.add( light );\n  //END LIGHTING\n  \n  //DRAW SCENE\n  function render(){\n    renderer.render(scene, camera);\n    renderer.setClearColor( 0x000000, 0);\n    //CREATE MOVEMENT\n    cube.rotation.y = +new Date() / yRotate;\n    cube.rotation.x = +new Date() / xRotate;\n    requestAnimationFrame(render);\n  }\n  render();\n}\n\ncreateCube(document.querySelector('#cubes li:nth-child(1)'), '#3780FF', 100);\ncreateCube(document.querySelector('#cubes li:nth-child(2)'), '#1B6DFF', 100);\ncreateCube(document.querySelector('#cubes li:nth-child(3)'), '#35E2E9', 100);\ncreateCube(document.querySelector('#cubes li:nth-child(4)'), '#46B1FF', 50);\ncreateCube(document.querySelector('#cubes li:nth-child(5)'), '#62BDFF', 50);\ncreateCube(document.querySelector('#cubes li:nth-child(6)'), '#4D8DFF', 50);\n\n</script>\n{% endblock %}"
  },
  {
    "path": "server/pages/translate.html",
    "content": "{% extends '_layouts/base.html' %}\n{% set id = 'translate' %}\n{% set pre_footer = false %}\n{% set header_style = 'transparent light' %}\n{% set stickyNav = true %}\n{% set cssPath = 'translations' %}\n\n{% block main %}\n<div class=\"banner banner--hero\">\n  <hgroup class=\"container\">\n    <h1>Help Ionic speak your language</h1>\n    <p>\n      The <a href=\"/community\">Ionic Community</a> is what has made Ionic the\n      success that is. All over the world people are gathering, learning, \n      sharing, and helping each other learn how to build apps with Ionic. Help \n      us help even more people by contributing to our community led translation \n      efforts.\n    </p>\n  </hgroup>\n</div>\n<main class=\"container\">\n  <section class=\"resource-list\">\n    <div class=\"resource-list__header\">\n      <h4>Existing Translations</h4>\n    </div>\n    <div class=\"resource-card-list resource-card-list--third\">\n      <div class=\"resource-card resource-card--light\">\n        <div class=\"resource-card__inner\">\n          <a href=\"https://github.com/ionic-team/ionic-docs/blob/master/CONTRIBUTING.md\"\n             target=\"_blank\"\n             style=\"background-image: url('/img/translate/flag-english.png');\">\n            <div>\n              <span class=\"eyebrow\">Documentation Source</span>\n              <div class=\"title\">English</div>\n            </div>\n            <span class=\"action\">\n              Contribute\n            </span>\n          </a>\n        </div>\n      </div>\n\n      <div class=\"resource-card resource-card--light\">\n        <div class=\"resource-card__inner\">\n          <a href=\"https://github.com/ionic-jp/ionic-docs/\"\n             target=\"_blank\"\n             style=\"background-image: url('/img/translate/flag-japanese.png');\">\n            <div>\n              <span class=\"eyebrow\">Japanese</span>\n              <div class=\"title\">日本語</div>\n            </div>\n            <span class=\"action\">\n              手伝う\n            </span>\n          </a>\n        </div>\n      </div>\n\n      <div class=\"resource-card resource-card--light\">\n        <div class=\"resource-card__inner\">\n          <a href=\"https://crowdin.com/project/ionic-docs\"\n             target=\"_blank\"\n             style=\"background-image: url('/img/translate/flag-chinese.png');\">\n            <div>\n              <span class=\"eyebrow\">Chinese (Simplified)</span>\n              <div class=\"title\">简体中文</div>\n            </div>\n            <span class=\"action\">\n              合作\n            </span>\n          </a>\n        </div>\n      </div>\n\n      <div class=\"resource-card resource-card--light\">\n        <div class=\"resource-card__inner\">\n          <a href=\"https://crowdin.com/project/ionic-docs\"\n             target=\"_blank\"\n             style=\"background-image: url('/img/translate/flag-french.png');\">\n            <div>\n              <span class=\"eyebrow\">French</span>\n              <div class=\"title\">Français</div>\n            </div>\n            <span class=\"action\">\n              Contribuer\n            </span>\n          </a>\n        </div>\n      </div>\n\n      <div class=\"resource-card resource-card--light\">\n        <div class=\"resource-card__inner\">\n          <a href=\"https://crowdin.com/project/ionic-docs\"\n             target=\"_blank\"\n             style=\"background-image: url('/img/translate/flag-portuguese.png');\">\n            <div>\n              <span class=\"eyebrow\">Portuguese</span>\n              <div class=\"title\">Português</div>\n            </div>\n            <span class=\"action\">\n              Contribuir\n            </span>\n          </a>\n        </div>\n      </div>\n\n      <div class=\"resource-card resource-card--light\">\n        <div class=\"resource-card__inner\">\n          <a href=\"https://crowdin.com/project/ionic-docs\"\n             target=\"_blank\"\n             style=\"background-image: url('/img/translate/flag-spanish.png');\">\n            <div>\n              <span class=\"eyebrow\">Spanish</span>\n              <div class=\"title\">Español</div>\n            </div>\n            <span class=\"action\">\n              Contribuir\n            </span>\n          </a>\n        </div>\n      </div>\n\n      <div class=\"resource-card resource-card--light\">\n        <div class=\"resource-card__inner\">\n          <a href=\"#join-the-fight\"\n             target=\"_blank\"\n             class=\"anchor\"\n             style=\"background-image: url('/img/translate/flag-globe.png');\">\n            <div>\n              <span class=\"eyebrow\">New Translation</span>\n              <div class=\"title\">Your Language</div>\n            </div>\n            <span class=\"action\">Contact us to get started</span>\n          </a>\n        </div>\n      </div>\n    </div>\n  </section>\n\n  <div id=\"join-the-fight\">\n    <hgroup class=\"hero\">\n      <h1>Translate your language</h1>\n      <p>\n        Don't see your language? Help us with a new translation effort!\n      </p>\n    </hgroup>\n\n    <div class=\"hubspot-override hubspot-override--large\">\n      <script charset=\"utf-8\"\n              type=\"text/javascript\"\n              src=\"https://js.hsforms.net/forms/v2.js\"></script>\n      <script>\n        hbspt.forms.create({\n          portalId: '3776657',\n          formId: '19379ed2-fa9a-42d5-b69f-6f56422571ca',\n          css: ''\n        });\n      </script>\n    </div>\n  </div>\n</main>\n\n{% endblock %}"
  },
  {
    "path": "server/pages/values.html",
    "content": "{% extends \"_layouts/base.html\" %} {% set id = 'values' %} {% set title = 'Ionic\nCore Values - About Ionic Framework' %} {% set header_style = 'transparent\nlight' %} {% set cssPath = 'values' %} {% block main %}\n\n<div class=\"cta banner\">\n  <hgroup class=\"container\">\n    <h1>What we believe</h1>\n    <p>Our values define us, and stay with us for the long haul.</p>\n  </hgroup>\n  <div class=\"bar tabbed\" data-spy=\"affix\" data-offset-top=\"375\">\n    <div class=\"container\" id=\"discover-nav\" offset=\"-400\">\n      <ul class=\"categories nav\">\n        <li><a class=\"about\" href=\"https://ionic.io/about\">About Us</a></li>\n        <li><a class=\"active values\" href=\"/values\">Values</a></li>\n        <li><a class=\"team\" href=\"/team\">Our Team</a></li>\n        <li><a class=\"jobs\" href=\"https://ionic.io/about/jobs\">Jobs</a></li>\n        <li><a class=\"contact\" href=\"/contact\">Contact</a></li>\n      </ul>\n    </div>\n  </div>\n</div>\n<dl class=\"container\">\n  <dt><span>1</span>Empower others</dt>\n  <dd>\n    We devote a lot of our time to work, and there’s an important reason for why\n    we all do it. We are in service to others, and our work empowers the people\n    who experience it. We get a kick out of making people happier and more\n    successful. It gives us purpose.\n  </dd>\n  <dt><span>2</span>Less is more</dt>\n  <dd>\n    We work smarter, not longer. Our engineering prowess lets us leverage the\n    full power of software in a way other teams cannot. Our software works for\n    us, not the other way around. That is our advantage.\n  </dd>\n  <dt><span>3</span>Be authentic</dt>\n  <dd>\n    The best companies are built on the foundation of strong, authentic\n    communication. We don’t buy fans, we don’t spam our message. We teach, we\n    share, we listen. We’re an active part of the community.\n  </dd>\n  <dt><span>4</span>Build with empathy</dt>\n  <dd>\n    We care about the person on the other side of everything we create. We take\n    the time to understand who they are, and how they might see the world. It\n    enables us to make better products that solve real problems, for more\n    people.\n  </dd>\n  <dt><span>5</span>Team first</dt>\n  <dd>\n    We’re a family. Everyone plays a uniquely important role; we don’t have room\n    for rockstars. We are a respectful, collaborative, and supportive bunch, and\n    our impact is maximized through trust and composition of work.\n  </dd>\n  <dt><span>6</span>Be worldclass</dt>\n  <dd>\n    We’re hyper focused on doing better, and being better, at every single thing\n    we do. Heck, we want to be known for it. If we don’t know something, we\n    learn it. If we need help, we ask for it. If there’s a ceiling, we break it\n    - and help others break theirs. Our biggest competitor is ourselves.\n  </dd>\n</dl>\n\n<div class=\"hero text-center\">\n  <hgroup class=\"container\">\n    <h3>Ionic is built by incredible people</h3>\n    <p><a href=\"/team\" class=\"btn white\">meet the team</a></p>\n  </hgroup>\n</div>\n\n{% endblock %}\n"
  },
  {
    "path": "server/pages/verification/failed.html",
    "content": "{% extends '_layouts/base.html' %}\n{% set id = 'verification-failed' %}\n{% set header_style = 'transparent light' %}\n{% set pre_footer = false %}\n\n{% block header_includes %}\n<meta name=\"robots\" content=\"noindex\" />\n{% endblock %}\n\n{% block main %}\n<main class=\"container hero text-center\">\n  <div class=\"content\">\n    <h3>Whoops!</h3>\n    <p>Something went wrong with email verification!</p>\n    <a class=\"btn\" href=\"{{ DASHBOARD_URL }}\">Continue</a>\n  </div>\n</main>\n{% endblock %}\n"
  },
  {
    "path": "server/pages/verification/success.html",
    "content": "{% extends '_layouts/base.html' %}\n{% set id = 'verification-success' %}\n{% set header_style = 'transparent light' %}\n{% set pre_footer = false %}\n\n{% block header_includes %}\n<meta name=\"robots\" content=\"noindex\" />\n{% endblock %}\n\n{% block main %}\n<main class=\"container hero text-center\">\n  <div class=\"content\">\n    <h3>Thank you!</h3>\n    <p>Your email has successfully been verified! Now let the fun begin!</p>\n    <a class=\"btn\" href=\"{{ DASHBOARD_URL }}\">Get Started!</a>\n  </div>\n</main>\n{% endblock %}\n"
  },
  {
    "path": "server/pages/vue.html",
    "content": "{% extends '_layouts/blank.html' %}\n{% set id = 'vue' %}\n{% set header_style = 'transparent' %}\n{% set cssPath = 'vue' %}\n{% set cssVersion = 3 %}\n{% set title = 'Build Native and Progressive Web Apps with Vue and Ionic' %}\n{% set meta_image = 'https://ionicframework.com/img/meta/ionic-vue-og.png?v1'%}\n{% set meta_description = 'Cross-platform development with Vue and Ionic Framework' %}\n{% set hide_pre_header = true %}\n\n{% block main %}\n<div class=\"header-wrapper\">\n  <header>\n    <a href=\"/\" class=\"back-button\">\n      <div class=\"arrow\"><-<span> </span></div>\n      Ionic Home\n    </a>\n\n    <hgroup class=\"container\">\n      <img\n        src=\"/img/vue/logo@2x.png\"\n        alt=\"Ionic Logo\"\n        class=\"logo\"\n        width=\"116\"\n        height=\"64\"\n      />\n      <h1>\n        Build iOS & Android apps from a single codebase.\n        <span class=\"highlight\">All in Vue.</span>\n      </h1>\n      <div class=\"cta-row\">\n        <a\n          href=\"https://ionicframework.com/signup\"\n          target=\"_blank\"\n          id=\"ionic-react-get-started-cta\"\n          class=\"primary-btn\"\n        >\n          Start an app\n          <span class=\"arrow\"> -></span>\n        </a>\n      </div>\n      <div class=\"video-row\">\n        <iframe src=\"https://www.youtube.com/embed/o-mgzWKfMaE?start=20\" \n          title=\"YouTube video player\" frameborder=\"0\" \n          allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen>\n        </iframe>\n      </div>\n    </hgroup>\n\n    \n  </header>\n\n  \n</div>\n\n<nav id=\"sticky-bar\">\n  <div class=\"container\">\n    <ul class=\"nav\" role=\"tablist\">\n      <li>\n        <a class=\"anchor\" data-offset=\"150\" href=\"#components\">Components</a>\n      </li>\n      <li><a class=\"anchor\" data-offset=\"150\" href=\"#native\">Native</a></li>\n      <li>\n        <a class=\"anchor\" data-offset=\"150\" href=\"#samples\">Sample Apps</a>\n      </li>\n      <li>\n        <a class=\"anchor\" data-offset=\"150\" href=\"#enterprise\">Enterprise</a>\n      </li>\n      <li>\n        <a class=\"anchor\" data-offset=\"150\" href=\"#why\">Why Ionic Vue?</a>\n      </li>\n      <li><a class=\"anchor\" data-offset=\"150\" href=\"#accolades\">Love</a></li>\n      <li>\n        <a class=\"anchor try-it\" data-offset=\"150\" href=\"#start\"\n          >Try it <span class=\"arrow\"> -></span></a\n        >\n      </li>\n    </ul>\n  </div>\n</nav>\n\n<main>\n  <section class=\"container\">\n    <div id=\"intro\">\n      <article>\n        <img src=\"/img/vue/intro/0@2x.png\" alt=\"\" width=\"48\" height=\"48\" />\n        <h3>Vue UI Components</h3>\n        <p class=\"p3\">\n          Ionic Vue combines the core Ionic UI Components, gestures, and\n          animiations with the tooling and APIs that are tailored to Vue\n          Developers.\n        </p>\n      </article>\n      <article>\n        <img src=\"/img/vue/intro/1@2x.png\" alt=\"\" width=\"52\" height=\"48\" />\n        <h3>Familiar tooling</h3>\n        <p class=\"p3\">\n          Ionic Vue apps ship with the same tooling and APIs as regular Vue CLI\n          projects. Starter apps also ship with new features like Routing and\n          TypeScript support.\n        </p>\n      </article>\n      <article>\n        <img src=\"/img/vue/intro/2@2x.png\" alt=\"\" width=\"48\" height=\"48\" />\n        <h3>Completely cross-platform</h3>\n        <p class=\"p3\">\n          Capacitor is the official cross-platform app runtime used to make your\n          Ionic Vue web app run natively on iOS, Android, and the Web—all from\n          the same code base.\n        </p>\n      </article>\n    </div>\n  </section>\n\n  <section class=\"container\">\n    <div id=\"components\">\n      <hgroup>\n        <h2>100+ Beautiful Vue Components</h2>\n        <p class=\"p2\">\n          Vue-optimized mobile and web components for building blazing fast\n          mobile, web, and desktop apps. Ionic Vue comes with more\n          out-of-the-box controls than native, accelerating custom app design.\n        </p>\n        <ul id=\"components-list\" class=\"components-list\">\n          <li data-tab=\"card\">\n            <div class=\"icon\">\n              <svg width=\"30\" height=\"26\" viewBox=\"0 0 30 26\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n                <rect x=\"1\" y=\"1\" width=\"28\" height=\"24\" rx=\"4\" stroke=\"black\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n                <path d=\"M7 7H15\" stroke=\"black\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n                <path d=\"M7 11H21\" stroke=\"black\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n              </svg>\n            </div>\n            <div class=\"title\">\n              <span class=\"word\">Cards</span>\n              <div class=\"progress\"></div>\n            </div>\n          </li>\n          <li data-tab=\"lists\">\n            <div class=\"icon\">\n              <svg width=\"32\" height=\"22\" viewBox=\"0 0 32 22\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n                <path d=\"M8.5 20H31\" stroke=\"black\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n                <path d=\"M2 19C2.55228 19 3 19.4477 3 20C3 20.5523 2.55228 21 2 21C1.44772 21 1 20.5523 1 20C1 19.4477 1.44772 19 2 19Z\" stroke=\"black\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n                <path d=\"M8.5 11H31\" stroke=\"black\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n                <path d=\"M2 10C2.55228 10 3 10.4477 3 11C3 11.5523 2.55228 12 2 12C1.44772 12 1 11.5523 1 11C1 10.4477 1.44772 10 2 10Z\" stroke=\"black\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n                <path d=\"M8.5 2H31\" stroke=\"black\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n                <path d=\"M2 1C2.55228 1 3 1.44772 3 2C3 2.55228 2.55228 3 2 3C1.44772 3 1 2.55228 1 2C1 1.44772 1.44772 1 2 1Z\" stroke=\"black\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n              </svg>\n            </div>\n            <div class=\"title\">\n              <span class=\"word\">Lists</span>\n              <div class=\"progress\"></div>\n            </div>\n          </li>\n          <li data-tab=\"actionSheet\">\n            <div class=\"icon\">\n              <svg width=\"30\" height=\"26\" viewBox=\"0 0 30 26\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n                <path d=\"M1 1V19C1 22.3137 3.68629 25 7 25H23C26.3137 25 29 22.3137 29 19V1\" stroke=\"black\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n                <path d=\"M2 5H29\" stroke=\"black\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n                <path d=\"M6 10H14\" stroke=\"black\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n                <path d=\"M6 15H23\" stroke=\"black\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n                <path d=\"M6 20H19\" stroke=\"black\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n              </svg>\n            </div>\n            <div class=\"title\">\n              <span class=\"word\">Action Sheet</span>\n              <div class=\"progress\"></div>\n            </div>\n          </li>\n        </ul>\n      </hgroup>\n      <vue-components></vue-components>\n    </div>\n  </section>\n\n  <section class=\"container\">\n    <div id=\"native\">\n      <div class=\"wrapper\">\n        <react-capacitor></react-capacitor>\n        <hgroup>\n          <h2>Build once, run natively on iOS, Android, & the Web.</h2>\n          <p class=\"p2\">\n            Ionic Vue apps use the\n            <a class=\"highlight\" href=\"https://capacitorjs.com\">Capacitor</a> project\n            (instead of Cordova) to unlock every native API across iOS, Android,\n            Electron, and Web.\n          </p>\n          <ul id=\"native-list\" class=\"components-list\">\n            <li data-tab=\"camera\">\n              <div class=\"icon\">\n                <svg width=\"30\" height=\"26\" viewBox=\"0 0 30 26\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n                  <path d=\"M21.3633 4.951L19.5715 1.7965C19.1939 1.306 18.6763 1 18.0962 1H11.9038C11.3237 1 10.8061 1.306 10.4285 1.7965L8.63673 4.951C8.25913 5.44225 7.7725 5.8 7.19231 5.8H3.15385C2.58261 5.8 2.03477 6.05286 1.63085 6.50294C1.22692 6.95303 1 7.56348 1 8.2V22.6C1 23.2365 1.22692 23.847 1.63085 24.2971C2.03477 24.7471 2.58261 25 3.15385 25H26.8462C27.4174 25 27.9652 24.7471 28.3692 24.2971C28.7731 23.847 29 23.2365 29 22.6V8.2C29 7.56348 28.7731 6.95303 28.3692 6.50294C27.9652 6.05286 27.4174 5.8 26.8462 5.8H22.875C22.2928 5.8 21.7409 5.44225 21.3633 4.951Z\" stroke=\"black\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n                  <path d=\"M15 20C17.7614 20 20 17.7614 20 15C20 12.2386 17.7614 10 15 10C12.2386 10 10 12.2386 10 15C10 17.7614 12.2386 20 15 20Z\" stroke=\"black\" stroke-width=\"2\" stroke-miterlimit=\"10\"/>\n                  <path d=\"M6.11467 5.2625V3.75H4.49928V5.2625\" stroke=\"black\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n                </svg>\n              </div>\n              <div class=\"title\">\n                <span class=\"word\">Camera</span>\n                <div class=\"progress\"></div>\n              </div>\n            </li>\n            <li data-tab=\"notifications\">\n              <div class=\"icon\">\n                <svg width=\"30\" height=\"30\" viewBox=\"0 0 30 30\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n                  <path d=\"M27 13V23C27 26.3137 24.3137 29 21 29H7C3.68629 29 1 26.3137 1 23V9C1 5.68629 3.68629 3 7 3H17\" stroke=\"black\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n                  <circle cx=\"25\" cy=\"5\" r=\"4\" transform=\"rotate(-180 25 5)\" stroke=\"black\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n                </svg>\n              </div>\n              <div class=\"title\">\n                <span class=\"word\">Notifications</span>\n                <div class=\"progress\"></div></div>\n            </li>\n            <li data-tab=\"geolocation\">\n              <div class=\"icon\">\n                <svg width=\"26\" height=\"34\" viewBox=\"0 0 26 34\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n                  <path d=\"M13 1C6.375 1 1 5.72254 1 11.539C1 21 9 28.8375 11.9375 32.5008C12.0594 32.6554 12.2192 32.7813 12.4039 32.868C12.5886 32.9548 12.7928 33 13 33C13.2072 33 13.4115 32.9548 13.5961 32.868C13.7808 32.7813 13.9406 32.6554 14.0625 32.5008C17 28.8391 25 20.5556 25 11.539C25 5.72254 19.625 1 13 1Z\" stroke=\"black\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n                  <path d=\"M13 16.4074C15.2091 16.4074 17 14.6166 17 12.4074C17 10.1983 15.2091 8.40742 13 8.40742C10.7909 8.40742 9 10.1983 9 12.4074C9 14.6166 10.7909 16.4074 13 16.4074Z\" stroke=\"black\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n                </svg>\n              </div>\n              <div class=\"title\">\n                <span class=\"word\">Geolocation</span>\n                <div class=\"progress\"></div>\n              </div>\n            </li>\n          </ul>\n        </hgroup>\n      </div>\n    </div>\n  </section>\n\n  <section class=\"container\">\n    <div id=\"samples\">\n      <hgroup>\n        <h2>Try an Ionic Vue sample app.</h2>\n        <p class=\"p2\">\n          One of the best ways to get started and learn best practices is to\n          explore a sample app.\n        </p>\n      </hgroup>\n      <div class=\"features\">\n        <div class=\"feature\">\n          <img\n            loading=\"lazy\"\n            width=\"616\"\n            height=\"560\"\n            src=\"/img/vue/samples/0@2x.png\"\n            alt=\"iphone popup asking if app can access camera\"\n          />\n          <h3>Photo Gallery App</h3>\n          <p class=\"p3\">\n            A tour of everything Ionic Vue has to offer. Take photos with your\n            device's camera and store them permanently on the device.\n          </p>\n          <a\n            class=\"try-it\"\n            href=\"https://ionicframework.com/docs/vue/your-first-app\"\n            target=\"_blank\"\n            rel=\"noopener\"\n          >\n            Try it\n            <span class=\"arrow\"> -></span>\n          </a>\n        </div>\n        <div class=\"feature\">\n          <img\n            loading=\"lazy\"\n            width=\"616\"\n            height=\"560\"\n            src=\"/img/vue/samples/1@2x.png\"\n            alt=\"phone app screen\"\n          />\n          <h3>Car Leasing Template</h3>\n          <p class=\"p3\">\n            A nicely designed Car Leasing starter template built by Ionic\n            community member, Simo Mafuxwana.\n          </p>\n          <a\n            class=\"try-it\"\n            href=\"https://github.com/dlodeprojuicer/ionic-vue-mobile-template-03\"\n            target=\"_blank\"\n            rel=\"noopener\"\n          >\n            Try it <span class=\"arrow\"> -></span>\n          </a>\n        </div>\n        <div class=\"feature\">\n          <img\n            loading=\"lazy\"\n            width=\"616\"\n            height=\"560\"\n            src=\"/img/vue/samples/2@2x.png\"\n            alt=\"phone app displaying list\"\n          />\n          <h3>Memory Capture App</h3>\n          <p class=\"p3\">\n            Capture memories from your travels. Learn how to build it by\n            following along with the in-depth tutorial video.\n          </p>\n          <a\n            class=\"try-it\"\n            href=\"https://github.com/academind/ionic-vue-getting-started\"\n            target=\"_blank\"\n            rel=\"noopener\"\n          >\n            Try it\n            <span class=\"arrow\"> -></span>\n          </a>\n        </div>\n      </div>\n    </div>\n  </section>\n\n  <section class=\"container\">\n    <div id=\"enterprise\">\n      <div class=\"graphics\">\n        <img\n          src=\"/img/vue/enterprise/0@2x.png\"\n          loading=\"lazy\"\n          width=\"568\"\n          height=\"568\"\n          alt=\"Ionic Vue for Enterprise\"\n        />\n      </div>\n      <hgroup>\n        <h2>Ionic Vue for Enterprise.</h2>\n        <p class=\"p2\">\n          Enterprise-ready integrations, tools, and expert support for you next\n          mission-critical app project. Unlock powerful features like secure\n          identity, encrypted offline storage, cloud builds, and real-time hot\n          code app deployments..\n        </p>\n        <a\n          class=\"primary-btn\"\n          id=\"ionic-react-enterprise-cta\"\n          href=\"https://ionicframework.com/enterprise\"\n          target=\"_blank\"\n        >\n          Learn more\n          <span class=\"arrow\"> -></span>\n        </a>\n      </hgroup>\n    </div>\n  </section>\n\n  <section class=\"container\">\n    <div id=\"why\">\n      <hgroup>\n        <h2>Why build with Ionic Vue?</h2>\n        <p class=\"p2\">\n          Ionic Vue offers Vue-optimized mobile and web components for building\n          blazing fast mobile, web, and desktop apps.\n        </p>\n      </hgroup>\n      <div class=\"features\">\n        <div class=\"feature\">\n          <div class=\"image\">\n            <img\n              src=\"/img/vue/why/0@2x.png\"\n              loading=\"lazy\"\n              width=\"56\"\n              height=\"56\"\n              alt=\"vue icon\"\n            />\n          </div>\n\n          <h3>It's just Vue</h3>\n          <p class=\"p3\">\n            Ionic Vue combines the core Ionic developer experience with the\n            tooling and APIs that are tailored to Vue Developers.\n          </p>\n        </div>\n        <div class=\"feature\">\n          <div class=\"image\">\n            <img\n              src=\"/img/vue/why/1@2x.png\"\n              loading=\"lazy\"\n              width=\"56\"\n              height=\"56\"\n              alt=\"pwa icon\"\n            />\n          </div>\n\n          <h3>First-class PWA</h3>\n          <p class=\"p3\">\n            Ionic Vue components work anywhere, including iOS, Android, and\n            PWAs. Build native apps without ever leaving the Web.\n          </p>\n        </div>\n        <div class=\"feature\">\n          <div class=\"image\">\n            <img\n              src=\"/img/vue/why/2@2x.png\"\n              loading=\"lazy\"\n              width=\"56\"\n              height=\"52\"\n              alt=\"browser icon\"\n            />\n          </div>\n\n          <h3>Build in the Browser</h3>\n          <p class=\"p3\">\n            First-class browser development support means you can build a\n            significant portion of your app right in Chrome, then integrate and\n            test on mobile devices when ready.\n          </p>\n        </div>\n        <div class=\"feature\">\n          <div class=\"image\">\n            <img\n              src=\"/img/vue/why/3@2x.png\"\n              loading=\"lazy\"\n              width=\"50\"\n              height=\"54\"\n              alt=\"building icon\"\n            />\n          </div>\n\n          <h3>Enterprise-ready</h3>\n          <p class=\"p3\">\n            Ionic Vue is supported by a company dedicated to enterprise app dev,\n            with supported native plugins, DevOps, expert services, and more.\n          </p>\n        </div>\n      </div>\n    </div>\n  </section>\n\n  <div class=\"container\" id=\"accolades\">\n    <h2>What People are Saying</h2>\n    <p class=\"p2\">Don’t just take our word for it.</p>\n    <div id=\"tweets\" class=\"tweets\">\n      <div id=\"tweet-share\" class=\"tweet-share tweet\">\n        <h4>Love Ionic Vue?</h4>\n        <a\n          target=\"_blank\"\n          href=\"http://twitter.com/share?text=Check out Ionic Vue to build native mobile and Progressive Web Apps with Vue&url=https://ionicframework.com/vue&via=ionicframework\"\n        >\n          Let us know on Twitter\n        </a>\n      </div>\n    </div>\n  </div>\n\n  <section class=\"container\">\n    <div id=\"start\">\n      <div class=\"wrapper\">\n        <div class=\"inside-wrapper\">\n          <hgroup>\n            <h2>Get Started with Ionic Vue</h2>\n            <p class=\"p2\">Start building better apps faster, all in Vue</p>\n          </hgroup>\n          <div class=\"code\">\n            <pre><code>\nnpm install -g @ionic/cli\nionic start --type=vue\n      </code></pre>\n          </div>\n        </div>\n      </div>\n    </div>\n  </section>\n</main>\n\n{% include '_includes/footer.html' %}\n\n{% endblock %}\n\n{% block scripts %}\n<script>\n  const exampleRotation = (listId, stencilComponentName) => {\n    const $stencilComponent = document.getElementsByTagName(stencilComponentName)[0];\n    const $list = document.querySelector(`#${listId}`);\n    const animationDuration = 5000;\n    let animation, \n        $currentlySelected;\n    \n    const select = ($el, stayPut) => {\n      if (animation) {\n        animation.finish();\n      }\n      $stencilComponent.setAttribute('tab', $el.dataset['tab']);\n      $currentlySelected?.classList.remove('selected');\n      $el.classList.add('selected');\n      $currentlySelected = $el;\n      if (!stayPut) {\n        animate($el.querySelector('.progress'))\n      }\n    };\n\n    const animate = $bar => {\n      animation = $bar.animate(\n        [\n          { transform: 'scale(0, 1)' },\n          { transform: 'scale(1, 1)' }\n        ], {\n          fill: 'forwards',\n          duration: animationDuration\n        })\n      animation.finished.then((a) => {\n        // when done animating, select the next demo\n        if ($currentlySelected.nextElementSibling) {\n          select($currentlySelected.nextElementSibling);\n        } else {\n          select($list.querySelector('li:first-child'));\n        }\n      })\n    };\n\n    const pause = () => animation.pause();\n    const play = () => animation.play();\n\n    const initiate = () => {\n      $list.querySelectorAll('li').forEach($li => {\n        $li.onclick = ev => {\n          animation.cancel();\n          select(ev.currentTarget, true);\n          // if the user clicks, we stop animating\n          $list.removeEventListener('mouseenter', pause);\n          $stencilComponent.removeEventListener('mouseenter', pause);\n          $list.removeEventListener('mouseleave', play);\n          $stencilComponent.removeEventListener('mouseleave', play);\n        }\n      });\n\n      // pause the animation if the user is interacting w/ the demo\n      $list.addEventListener('mouseenter', pause);\n      $stencilComponent.addEventListener('mouseenter', pause);\n      $list.addEventListener('mouseleave', play);\n      $stencilComponent.addEventListener('mouseleave', play);\n\n      if (!$currentlySelected) {\n        select($list.querySelector(' li:first-child'));\n      }\n    }\n\n    initiate();\n  };\n  exampleRotation('components-list', 'vue-components');\n  exampleRotation('native-list', 'react-capacitor');\n\n  const tweets = [\n    {\n      author_username: \"maxedapps\",\n      author_name: \"Maximilian Schwarzmüller\",\n      date: \"November 2020\",\n      avatar: \"/img/vue/twitter-profile-pictures/maxedapps.jpg\",\n      link: \"https://twitter.com/maxedapps/status/1323298624147726337\",\n      content: `It's awesome! Building cross-platform apps has always been amazing with Ionic (and Capacitor) but Vue being Vue, it's of course super smooth and straightforward. You and the entire team really did an amazing job with Ionic/ Capacitor as well as the Vue bindings for Ionic.`,\n    },\n    {\n      author_username: \"IT_MikeS\",\n      author_name: \"Mike Summerfeldt\",\n      date: \"October 2020\",\n      avatar: \"/img/vue/twitter-profile-pictures/IT_MikeS.jpg\",\n      link: \"https://twitter.com/IT_MikeS/status/1313638008374132736\",\n      content: `For me it's the sheer flexibility of vue. I love react because of how small it can be, and I love angular because it's ecosystem just works, vue does both so I choose vue. Ionic Vue is the icing on top of this custom cake, where I can use robust ui elements with it all. 🎂🍰🍮`,\n    },\n    {\n      author_username: \"sarah_edo\",\n      author_name: \"Sarah Drasner\",\n      date: \"November 2020\",\n      avatar: \"/img/vue/twitter-profile-pictures/sarah_edo.jpg\",\n      link: \"https://twitter.com/sarah_edo/status/1325477797670789120\",\n      content: `I feel like I can be productive today! Whew. Thinking about learning some Ionic and Vue for native development, checking out these great examples by @dlodeprojuicer.`,\n    },\n    {\n      author_username: \"26th_edmund\",\n      author_name: \"Edmund Ekott\",\n      date: \"November 2020\",\n      avatar: \"/img/vue/twitter-profile-pictures/26th_edmund.jpg\",\n      link: \"https://twitter.com/26th_edmund/status/1329198301007269888\",\n      content: `Ionic Vue!!!!!! 🔥🔥🔥🔥🔥🔥`,\n    },\n    {\n      author_username: \"olidotjpg\",\n      author_name: \"Oli.jpg\",\n      date: \"October 2020\",\n      avatar: \"/img/vue/twitter-profile-pictures/olidot.jpg\",\n      link: \"https://twitter.com/olidotjpg/status/1320745944149839876\",\n      content: `Seriously, I can't get over how amazing @Ionicframework is for making mobile apps. The workflow is so damn smooth and feels so gooood`,\n    },\n  ];\n\n  const tweetsList = $(\"#tweets\");\n  tweets.forEach((t) =>\n    $(`\n  <div class=\"tweet\">\n    <div class=\"tweet-author\">\n      <div class=\"tweet-author-avatar\">\n        <img src=\"${t.avatar}\" loading=\"lazy\"/>\n      </div>\n      <div class=\"tweet-author-info\">\n        <h3><a href=\"https://twitter.com/${t.author_username}\">${t.author_name}</a></h3>\n        <h5><a href=\"https://twitter.com/${t.author_username}\">@${t.author_username}</a></h5>\n      </div>\n      <div class=\"tweet-twitter-icon\"></div>\n    </div>\n    <div class=\"tweet-content\">\n      ${t.content}\n    </div>\n    <div class=\"tweet-footer\">\n      <div class=\"tweet-date\">${t.date}</div>\n      <div class=\"tweet-view\"><a target=\"_blank\" href=\"${t.link}\">View Tweet</a></div>\n    </div>\n  </div>\n  `).insertBefore(\"#tweet-share\")\n  );\n</script>\n{% endblock %}\n"
  },
  {
    "path": "server/prismic.js",
    "content": "const Cookies     = require('cookies');\nconst PrismicDOM  = require('prismic-dom');\nconst Prismic     = require('prismic-javascript');\nconst Sentry             = require('@sentry/node');\nlet prismicAPI = null;\n\nconst { PRISMIC_ENDPOINT, PRISMIC_PREVIEW } = require('./config');\n\nfunction linkResolver(doc) {\n  // Define the url depending on the document type\n  if (doc.type === 'article') {\n    return '/resources/articles/' + doc.uid;\n  } else if (doc.type === 'case_study') {\n    return '/resources/case-studies/' + doc.uid;\n  } else if (doc.type === 'customer_story') {\n    return '/resources/customer-interviews/' + doc.uid;\n  } else if (doc.type === 'enterprise_blog_post') {\n    return '/enterprise/blog/' + doc.uid;\n  } else if (doc.type === 'integration') {\n    return '/integrations/' + doc.uid;\n  } else if (doc.type === 'podcast') {\n    return '/resources/podcasts/' + doc.uid;\n  } else if (doc.type === 'thank_you') {\n    return '/thank-you/' + doc.uid;\n  } else if (doc.type === 'video') {\n    return '/resources/videos/' + doc.uid;\n  } else if (doc.type === 'webinar') {\n    return '/resources/webinars/' + doc.uid;\n  } else if (doc.type === 'whitepaper') {\n    return '/resources/whitepapers/' + doc.uid;\n  }\n\n  // Default to homepage\n  return '/';\n}\n\nfunction htmlSerializer (type, element, content, children) {\n  const Elements = PrismicDOM.RichText.Elements;\n  // give headings an ID\n  switch(type) {\n    case Elements.heading1:\n    case Elements.heading2:\n    case Elements.heading3:\n    case Elements.heading4:\n    case Elements.heading5:\n    case Elements.heading6:\n      const level = type[type.length -1]\n      const id = children.join('')\n                         .trim()\n                         .toLowerCase()\n                         .replace(/(&\\w+;)/g, '')\n                         .replace(/([^a-z\\-\\ ])/g, '')\n                         .replace(/ /g, '-')\n                         .replace(/--/g, '-');\n      return `<h${level} id=\"${id}\">${children.join('')}</h${level}>`;\n    \n    case Elements.preformatted: \n      return `<pre><code>${children.join('')}</code></pre>`;\n\n    // Return null to stick with the default behavior for all other elements\n    default:\n      return null;\n  }\n}\n\nasync function getOne(key, value, size = 10, ordering = '') {\n  return Prismic.getApi(PRISMIC_ENDPOINT)\n  .then(api => {\n    prismicAPI = api;\n    return api.query(\n      Prismic.Predicates.at(key, value),\n      { pageSize : size, orderings: ordering}\n    )\n  })\n  .catch(error => Sentry.captureException(new Error(error)))\n}\n\nmodule.exports = {\n  prismicMiddleware: (_, res, next) => {\n    res.locals.ctx = {\n      endpoint: PRISMIC_ENDPOINT,\n      linkResolver,\n      htmlSerializer\n    };\n    // add PrismicDOM in locals to access them in templates.\n    res.locals.PrismicDOM = PrismicDOM;\n    res.locals.PRISMIC_PREVIEW = PRISMIC_PREVIEW;\n\n    next();\n  },\n\n  getPrismicAPI: (req, _, next) => {\n    // get Prismic API instance\n    Prismic.api(PRISMIC_ENDPOINT, {\n      req,\n    }).then((api) => {\n      prismicAPI = api;\n      req.prismic = { api };\n      next();\n    }).catch((error) => {\n      next(error.message);\n    });\n  },\n\n  previewController: async (req, res) => {\n    const { token } = req.query;\n    try {\n      if (!token) throw(new Error('Missing token from querystring'));\n\n      const api = await Prismic.api(PRISMIC_ENDPOINT, { req, })\n      prismicAPI = api;\n      req.prismic = { api };\n      console.log(api);\n      const url = await req.prismic.api.previewSession(token, linkResolver, '/');\n      const cookies = new Cookies(req, res);\n      cookies.set(\n        Prismic.previewCookie,\n        token,\n        { maxAge: 30 * 60 * 1000, path: '/', httpOnly: false }\n      );\n      res.redirect(302, url);\n    } catch(e) {\n      res.send(500, e.message);\n    }\n  },\n\n  getPrismic: async (req, res, next, type, uid, template) => {\n    return new Promise(resolve => {\n      return req.prismic.api.getByUID(type, uid)\n        .then(response => {\n          delete req;\n          if (response === undefined) {\n            throw(new Error(`Prisimic ${type} ${uid} not found`)); \n          }\n          res.render(template, response);\n        })\n        .then(resolve)\n        .catch(error => {\n          next(error.message);\n        });\n    });\n  },\n\n  getSingle: async (req, res, next, name, template) => {\n    return new Promise(resolve => {\n      return req.prismic.api.getSingle(name)\n        .then(response => {\n          delete req;\n          if (response === undefined) {\n            throw(new Error(`Prisimic page ${name} not found`)); \n          }\n          res.render(template, response);\n        })\n        .then(resolve)\n        .catch(error => {\n          next(error.message);\n        });\n    });\n  },\n\n  getAll: async (key, value, ordering) => {\n    let response = await getOne(key, value, 100, ordering);\n    const pages = response.total_pages;\n    let results = response.results;\n    if (pages && pages > 1) {\n      for(let i = 1; i < pages; i++) {\n        response = await fetch(response.next_page).then(res => res.json());\n        results = results.concat(response.results);\n      }\n    }\n    return results;\n  },\n\n  announcementBarCronJob: (app) => {\n    let prismicAPI;\n    const checkAnnouncementBar = async () => {\n      try {\n        if (!prismicAPI){\n          prismicAPI = await Prismic.api(PRISMIC_ENDPOINT);\n        }\n        app.locals.announcementBar = await prismicAPI.getSingle('announcement_bar');\n      } catch(e) {\n        console.error(e)\n      }\n    }\n    checkAnnouncementBar()\n    setInterval(checkAnnouncementBar, 5 * 60 * 1000 ) // update every 5 mins\n  },\n\n  getOne: getOne\n}\n"
  },
  {
    "path": "server/processRequest.js",
    "content": "var parseUrl        = require('parseurl');\nvar config          = require('./config');\n\nmodule.exports = {\n  checkForRedirects: (req, res, next) => {\n    var uri = req.url.split(/[\\?|#]/g);\n    var requrl = uri[0];\n    if (requrl.endsWith('/')) {\n      requrl = requrl.slice(0, -1);\n    }\n    res.locals.requrl = requrl;\n\n    // don't index non production URLs, but favor HTTPS\n    res.locals.protocol = 'https';\n    if (\n      req.hostname.indexOf('ionicframework.com') == -1 &&\n      req.hostname.indexOf('ionic-site.herokuapp.com') == -1\n    ) {\n      res.setHeader('X-Robots-Tag', 'noindex, nofollow');\n      res.locals.protocol = 'http';\n    } else {\n     // require https in prod\n      let csp = 'default-src https: data: blob: \\'unsafe-eval\\' \\'unsafe-inline\\'; ';\n      csp += 'frame-src \\'self\\' https://*;';\n      res.setHeader('Content-Security-Policy', csp);\n      res.setHeader('X-Content-Security-Policy', csp);\n      res.setHeader('X-WebKit-CSP', csp);\n    }\n\n    ['.js', '.woff', '.woff2', '.svg', '/api/'].forEach(str => {\n      if (req.url.indexOf(str) !== -1) {\n        res.setHeader('Access-Control-Allow-Origin', '*')\n      }\n    });\n\n    // cache static files\n    var staticURLS = ['/img/','/fonts/','/favicon.ico'];\n    for (var i = 0; i <= staticURLS.length; i++) {\n      if (req.url.indexOf(staticURLS[i]) === 0) {\n        res.setHeader('Cache-Control', 'public, max-age=31536000');\n        res.setHeader('Expires', new Date(Date.now() + 31536000000).toUTCString());\n        break;\n      }\n    }\n\n    return next();\n  },\n\n  loadLocalVars: async (req, res, next) => {\n    // Setting default Page Vars\n    res.locals = Object.assign({}, res.locals, {\n      API_URL: config.API_URL,\n      DASHBOARD_URL: config.DASHBOARD_URL,\n      header_style: 'transparent',\n      id: req.originalUrl.split('/').join('-'),\n      pre_footer: true,\n      Date: Date,\n      now: new Date(),\n      domain: req.get('host'),\n      url: req.originalUrl,\n      query: req.query,\n      search: parseUrl(req).search,\n      dev: req.get('host').indexOf('localhost') === 0\n    });\n\n\n    const linkParams = ';rel=preload;as=font;type=font/woff2;crossorigin=anonymous';\n    let linkStr = `<https://ionicframework.com/fonts/eina/eina-01-regular.woff2>${linkParams}`;\n    linkStr += `,<https://ionicframework.com/fonts/inter/Inter-variable-ASCII-subset.woff2>${linkParams}`;\n    linkStr += `,<https://ionicframework.com/fonts/eina/eina-01-semibold.woff2>${linkParams}`;\n    linkStr += `,<https://ionicframework.com/fonts/eina/eina-01-bold.woff2>${linkParams}`;\n    linkStr += `,<https://ionicframework.com/fonts/ionicons.woff2?v=3.0.0-alpha.3>${linkParams}`;\n\n    res.setHeader('Link', linkStr);\n\n    return next();\n  }\n};\n"
  },
  {
    "path": "server/router.js",
    "content": "const express = require('express');\n// const ab                   = require('express-ab');\nconst bp = require('body-parser');\nconst markdown = require('./markdown');\nconst es = require('express-sanitizer');\n\nconst { previewController } = require('./prismic');\n\nconst contactCtrl = require('./controllers/contactCtrl');\nconst getformCtrl = require('./controllers/getformCtrl');\nconst hsblockedCtrl = require('./controllers/hsblockedCtrl');\nconst hsconvertedCtrl = require('./controllers/hsconvertedCtrl');\nconst newsletterCtrl = require('./controllers/newsletterCtrl');\nconst viewCtrl = require('./controllers/viewCtrl');\n\nmodule.exports = {\n  router: app => {\n\n    // var abTestTest = ab.test('pricing-test', {id: 'MRClmJX_QEakg3kJs2jH9g'});\n\n    app.options(\"/api/*\", function(_, res){\n      res.header('Access-Control-Allow-Origin', '*');\n      res.header('Access-Control-Allow-Methods', 'POST,OPTIONS');\n      res.header('Access-Control-Allow-Headers',\n        'Content-Type, Authorization, Content-Length, X-Requested-With');\n      res.removeHeader('Content-Security-Policy');\n      res.removeHeader('X-Content-Security-Policy');\n      res.removeHeader('X-WebKit-CSP');\n      res.send(200);\n    });\n\n    return new express.Router()\n    // .get('/css/styles.min.css', abTestTest(null, 0.50), function(_, res) {\n    //   res.sendFile('/css/styles.min.css', {root: './_site'});\n    // })\n    // .get('/css/styles.min.css', abTestTest(null, 0.50), function(_, res) {\n    //   res.sendFile('/css/styles.test.min.css', {root: './_site'});\n    // });\n\n    // normal pages\n    .get('/contributors', (_, res) => res.render('contributors'))\n    .get('/covid-19', (_, res) => markdown(res, 'corona'))\n    .get('/creator', (_, res) => res.render('creator/index'))\n    .get('/creator/support', (_, res) => res.render('creator/support'))\n    .get('/developers', (_, res) => res.render('developers'))\n    .get('/ds', (_, res) => res.render('ds'))\n\n    .get('/early-access', (_, res) => res.render('early-access'))\n\n    .get('/enterprise/solutions', (_, res) => res.render('enterprise/solutions/index'))\n    .get('/enterprise/solutions/cross-platform', (_, res) => res.render('enterprise/solutions/cross-platform'))\n\n    .get('/getting-started-with-ionic-vue', (_, res) => res.render('getting-started-with-ionic-vue'))\n\n    .get('/go/pwa-architects-guide', (_, res) =>\n      res.render('go/pwa-architects-guide/index'))\n    .post('/go/pwa-architects-guide', (_, res) =>\n      res.render('go/pwa-architects-guide/thank-you'))\n    .get('/go/pwa-architects-guide/thank-you', (_, res) =>\n      res.render('go/pwa-architects-guide/thank-you'))\n\n    .get('/go/why-hybrid', (_, res) => res.render('go/why-hybrid/index'))\n    .post('/go/why-hybrid', (_, res) => res.render('go/why-hybrid/thank-you'))\n    .get('/go/why-hybrid/thank-you', (_, res) => res.render('go/why-hybrid/thank-you'))\n\n    .get('/ioniconf-2020', (_, res) => res.render('ioniconf-2020'))\n    .get('/native', (_, res) => res.render('native'))\n\n    .get('/pro/contact', (_, res) => res.render('pro/contact'))\n\n    .get('/react', (_, res) => res.render('react'))\n\n    .get('/start', (_, res) => res.render('start'))\n    .get('/stencil-jamstack2021', (_, res) => res.render('stencil-jamstack2021'))\n    .get('/subscribe', (_, res) => res.render('subscribe'))\n    .get('/survey/2017', (_, res) => res.render('survey/2017'))\n    .get('/survey/2018', (_, res) => res.render('survey/2018'))\n    .get('/survey/2020', (_, res) => res.render('survey/2020'))\n    .get('/translate', (_, res) => res.render('translate'))\n\n    .get('/values', (_, res) => { res.render('values'); })\n    .get('/verification/failed', (_, res) => res.render('verification/failed'))\n    .get('/verification/success', (_, res) => res.render('verification/success'))\n    .get('/vue', (_, res) => res.render('vue'))\n    .get('/angular', (_, res) => res.render('angular'))\n\n    // JSON endpoints\n    .post('/contact', bp.json(), es(), contactCtrl)\n    .get('/api/v1/getform/:formId', bp.json(), es(), getformCtrl)\n    .post('/api/v1/hsblocked', bp.json(), es(), hsblockedCtrl)\n    .get('/api/v1/hsconverted/:listId/:hsutk?', bp.json(), es(), hsconvertedCtrl)\n    .post('/api/v1/newsletter', bp.json(), es(), newsletterCtrl)\n    .post('/api/v1/view/link', bp.json(), es(), viewCtrl)\n\n    // Prismic Preview\n    .get('/preview', previewController)\n\n    // Well-Known URIs (RFC 8615)\n    .get('/.well-known/openid-configuration', require('./well-known/openid-configuration'))\n  }\n};\n"
  },
  {
    "path": "server/tools.js",
    "content": "const config = require('./config');\nconst request   = require('request');\nconst sg = require('sendgrid')(config.SENDGRID_APIKEY);\nconst twitter = require('twitter')({\n  consumer_key: config.TWITTER_CONSUMER_KEY,\n  consumer_secret: config.TWITTER_CONSUMER_SECRET,\n  access_token_key: config.TWITTER_ACCESS_TOKEN_KEY,\n  access_token_secret: config.TWITTER_ACCESS_TOKEN_SECRET\n});\n\nconst Hubspot = require('hubspot');\nconst hs = new Hubspot({ accessToken: config.HUBSPOT_ACCESS_TOKEN });\n\nconst jsforce = require('jsforce');\nvar sfConn = new jsforce.Connection()\n\nmodule.exports = {\n  // CloudFlare\n  bustCloudflareCache: () => {\n    if (!config.CF_TOKEN || !config.CF_ZONE) {\n      // return console.log('Insufficient credentials to bust CloudFlare cache');\n      return; // silently fail to bust cache\n    }\n\n    let CFAPI = 'https://api.cloudflare.com';\n    let options = {\n      url: CFAPI + '/client/v4/zones/' + config.CF_ZONE + '/purge_cache',\n      method: 'POST',\n      headers: {\n        'Authorization': 'Bearer ' + config.CF_TOKEN,\n        'Content-Type': 'application/json'\n      },\n      body: '{\"purge_everything\":true}'\n    };\n\n    request(options, (err, res, body) => {\n      if (err) {\n        return console.error(\n          new Error({\n            error: err,\n            response: res,\n            body: JSON.parse(body)\n          })\n        );\n      }\n      console.log('CloudFlare Cache busted', JSON.parse(body));\n    });\n  },\n\n  // Twitter\n  getTwitterProfile: () => {\n    if (!config.TWITTER_CONSUMER_KEY ||\n      !config.TWITTER_CONSUMER_SECRET ||\n      !config.TWITTER_ACCESS_TOKEN_KEY ||\n      !config.TWITTER_ACCESS_TOKEN_SECRET) {\n\n      console.warn('Twitter credentials not found. Ignoring profile request.');\n      return Promise.resolve(null);\n    }\n    return new Promise((resolve, reject) => {\n      twitter.get('users/show.json',{screen_name: 'ionicframework'}, (error, ionicframework) => {\n        if(error) return reject( error );\n        resolve(ionicframework);\n      });\n    });\n  },\n\n  // Sendgrid\n  email: (toEmails, from, fromName, subject, text) => {\n    if (!config.SENDGRID_APIKEY) {\n      console.warn('Sendgrid API keys not found, ignoring email request');\n      return Promise.resolve()\n    }\n    var emailData = {\n      method: 'POST',\n      path: '/v3/mail/send',\n      body: {\n        personalizations: [{\n          to: toEmails.map((email)=>{return {email: email}}),\n          subject: subject\n        }],\n        from: {\n          email: from,\n          name: fromName\n        },\n        content: [{\n          type: 'text/plain',\n          value: text\n        }]\n      }\n    }\n    return sg.API(emailData)\n  },\n\n  addContactList: (name) => {\n    if (!config.SENDGRID_APIKEY) {\n      console.warn('Sendgrid API keys not found, ignoring add contact request');\n      return Promise.resolve()\n    }\n    var requestParams = {\n      method: 'POST',\n      path: '/v3/contactdb/lists',\n      body: [{\n        name: name\n      }]\n    }\n\n    return sg.API(requestParams)\n  },\n\n  saveEmailSendGrid: (opts) => {\n    if (!config.SENDGRID_APIKEY) {\n      console.warn('Sendgrid API keys not found, ignoring add contact request');\n      return Promise.resolve()\n    }\n    var requestParams = {\n      method: 'PATCH',\n      path: '/v3/contactdb/recipients',\n      body: [{\n        email: opts.email,\n        first_name: opts.first_name || null,\n        last_name: opts.last_name || null,\n        newsletter_subscriber: opts.newsletter_subscriber || null\n      }]\n    }\n    return sg.API(requestParams)\n  },\n\n  addEmailToList: (opts) => {\n    var requestParams = {\n      method: 'POST',\n      path: `/v3/contactdb/lists/${opts.list_id}/recipients/${opts.user}`,\n      body: {}\n    }\n    return sg.API(requestParams)\n  },\n\n  sendThankYouForContacting: (email) => {\n    return new Promise((resolve, reject) => {\n      // server doesn't have API keys in local env, ignore\n      if(!config.SENDGRID_APIKEY) {\n        console.warn('Sendgrid API key not found. Ignoring email request.');\n        return resolve(null);\n      }\n      var thankYouEmail = {\n        method: 'POST',\n        path: '/v3/mail/send',\n        body: {\n          personalizations: [{\n            to: [{email:email}],\n            subject: 'Thanks for reaching out!'\n          }],\n          from: {\n            email: 'no-reply@ionicframework.com',\n            name: 'Ionic'\n          },\n          content: [{\n            type: 'text/html',\n            value: `We’ve received your info and a member of our sales team will get in touch soon.\n  Until then, feel free to visit our Resource Center for additional information on our business and enterprise offerings, including customer stories and product info.\n  Cheers,\n  The Ionic Team`\n          }],\n          template_id: 'd8f22fb4-d88b-4e82-8ffa-025cb8039447',\n        }\n      }\n      sg.API(thankYouEmail, (error, response) => {\n        if (error) {\n          reject(error)\n          return console.error(error, response.body);\n        }\n        resolve(response)\n      })\n    })\n  },\n\n  // SalesForce\n  addSalesForceLead: (form) => {\n    return new Promise((resolve, reject) => {\n      if(!config.SALESFORCE_USER || !config.SALESFORCE_PASSWORD_TOKEN) {\n        console.warn('Salesforce API credentials not found. Ignoring CRM request.');\n        return reject(null);\n      }\n\n      sfConn.login(config.SALESFORCE_USER, config.SALESFORCE_PASSWORD_TOKEN, function(err, userInfo) {\n        console.log(err)\n        if (err) { return reject(err); }\n        sfConn.sobject(\"Lead\").create({\n          email: form.email,\n          firstname: form.first_name,\n          lastname: form.last_name,\n          title: form.title,\n          company: form.company,\n          leadsource: 'Ionicframework.com',\n          Webpage__c: form.page,\n          Lead_Capture_Message__c: form.message,\n          NumberOfEmployees: form.Employees,\n          Phone: form.phone,\n          Lead_Life_Stage__c: 'Marketing Qualified Lead'\n        }).then((ret, err) => {\n          if (err || !ret.success) {\n            reject(err)\n            return console.error(err, ret);\n          }\n          sfConn.sobject(\"campaignMember\").create({\n            LeadId: ret.id,\n            Status: 'Responded',\n            CampaignId: '701f40000008UYD'\n          }).then((ret, err) => {\n            if (err || !ret.success) {\n              reject(err)\n              return console.error(err, ret);\n            }\n\n            resolve(ret)\n          })\n        }).catch((err,ret)=> {\n          reject(err)\n          return console.error(err, ret);\n        })\n      })\n    })\n  },\n\n  // HubSpot\n  saveEmailHubSpot: (opts) => {\n    return hs.contacts.createOrUpdate(opts.email, {\n      \"properties\": [\n        {\n          \"property\": \"email\",\n          \"value\": opts.email\n        },\n        {\n          \"property\": \"firstname\",\n          \"value\": opts.first_name || null\n        },\n        {\n          \"property\": \"lastname\",\n          \"value\": opts.last_name || null\n        }\n      ]\n    }).catch(err => {\n      console.warn(err)\n    })\n  },\n\n  addEmailToPodcastList: (email) => {\n    const podcastListID = '1297';\n    return hs.lists.addContacts(podcastListID, {\n      \"emails\": [email]\n    }).catch(err => {\n      console.warn(err)\n    })\n  },\n\n  // tools tied to multiple or no 3rd party service\n  saveEmail: (opts) => {\n    // Save to HubSpot and SendGrid\n    return Promise.all([\n      module.exports.saveEmailSendGrid(opts),\n      module.exports.saveEmailHubSpot(opts)\n    ].map(tools.reflect));\n  },\n\n  reflect: promise => {\n    return promise.then(function(v) { return {v: v, status: 'resolved'};},\n                        function(e) { return {e: e, status: 'rejected'};});\n  }\n};\n"
  },
  {
    "path": "server/well-known/openid-configuration.js",
    "content": "const config = require('../config');\n\nmodule.exports = function(req, res) {\n  const site_url = `${req.protocol}://${req.hostname}`;\n  res\n    .set('Access-Control-Allow-Origin', '*')\n    .json({\n      issuer: site_url,\n      authorization_endpoint: `${site_url}/oauth/authorize`,\n      token_endpoint: `${config.API_URL}/oauth/token`,\n      userinfo_endpoint: `${config.API_URL}/oauth/userinfo`,\n      jwks_uri: `${config.API_URL}/oauth/keys`,\n      scopes_supported: ['openid', 'profile', 'email'],\n      response_types_supported: ['token id_token'],\n      subject_types_supported: ['public'],\n      id_token_signing_alg_values_supported: ['RS256'],\n      claims_supported: [\n        'aud',\n        'email',\n        'email_verified',\n        'exp',\n        'iat',\n        'iss',\n        'name',\n        'picture',\n        'sub'\n      ]\n    });\n};\n"
  },
  {
    "path": "server.js",
    "content": "require('dotenv').config({silent: true});\n\nconst express      = require('express');\nconst compress     = require('compression');\nconst cookieParser = require('cookie-parser');\nconst dateFilter   = require('nunjucks-date-filter');\nconst nunjucks     = require('nunjucks');\nconst helmet       = require('helmet');\nconst path         = require('path');\nconst Sentry       = require('@sentry/node');\nconst throng       = require('throng');\n\nconst { createProxyMiddleware } = require('http-proxy-middleware');\n\nconst { handleNotFound } = require('./server/pageNotFound');\nconst { router }         = require('./server/router');\nconst tools              = require('./server/tools');\nconst {\n  checkForRedirects,\n  loadLocalVars\n}                        = require('./server/processRequest');\nconst {\n  prismicMiddleware,\n  announcementBarCronJob\n}                        = require('./server/prismic');\n\nconst {\n  API_URL,\n  PORT,\n  PROD,\n  REDIS_URL,\n  SENTRY_DSN,\n  SENTRY_ENVIRONMENT,\n  WEB_CONCURRENCY\n} = require('./server/config');\n\n// start up parallel servers in prod\nthrong({\n  workers: WEB_CONCURRENCY,\n  lifetime: Infinity\n}, start)\n\n\nfunction start() {\n  const app = express();\n\n  if (SENTRY_DSN) {\n    Sentry.init({ dsn: SENTRY_DSN, environment: SENTRY_ENVIRONMENT });\n  }\n\n  // rate limit POST requests\n  if (REDIS_URL) {\n    var redis   = require('redis').createClient(REDIS_URL);\n    var limiter = require('express-limiter')(app, redis);\n\n    // rate limit POST requests\n    limiter({\n      path: '*',\n      method: 'post',\n      lookup: ['headers.CF-Connecting-IP'],\n      // 15 requests per 30 seconds\n      total: 15,\n      expire: 1000 * 30\n    })\n  }\n\n  app.set('trust proxy', true);\n  // The Sentry request handler must be the first middleware on the app\n  app.use(Sentry.Handlers.requestHandler());\n  app.use(compress());\n  app.use(cookieParser());\n  app.use(helmet());\n  app.enable('etag');\n\n  app.use(checkForRedirects);\n\n  // check if this is a valid static file\n  app.use(express.static('dist', { maxAge: 1000 * 60 * 60 * 24 * 7 }));\n  // cache images and static assets for 1 week\n  app.use(express.static('content', { maxAge: 1000 * 60 * 60 * 24 * 7 }));\n\n  app.use(prismicMiddleware);\n  app.use(loadLocalVars);\n  announcementBarCronJob(app)\n\n  if (!PROD) {\n    // Proxy for oauth when in dev mode\n    app.use('/oauth', createProxyMiddleware({\n      target: API_URL || 'https://staging.ionicframework.com',\n      changeOrigin: true,\n      secure: false\n    }));\n  }\n\n  // Proxy for Appflow wizard\n  const wizardOptions = {\n    target: API_URL,\n    changeOrigin: true,\n    secure: false,\n    pathRewrite: {\n      '^/api/v1/wizard': '/apps/wizard/request',\n    }\n  };\n  app.use('/api/v1/wizard', createProxyMiddleware(wizardOptions));\n\n  nunjucks.configure('server/pages', {\n    express: app,\n    noCache: !PROD,\n    autoescape: false\n  }).addFilter('date', dateFilter);\n\n  app.set('views', path.resolve(__dirname, '/server/pages'));\n  app.set('view engine', 'html');\n\n  app.use(router(app));\n\n  // The Sentry error handler must be before any other error middleware\n  app.use(Sentry.Handlers.errorHandler());\n\n  app.use(handleNotFound);\n\n  // bind the app to listen for connections on a specified port\n  app.listen(PORT, function() {\n    console.log('Listening on port ' + PORT);\n    // 5 min delay for heroku rolling start to complete\n    setTimeout(tools.bustCloudflareCache, 1000 * 60 * 5);\n  });\n} // end start()\n"
  },
  {
    "path": "stencil.config.js",
    "content": "const { sass } = require('@stencil/sass');\nconst nodePolyfills = require('rollup-plugin-node-polyfills');\n\nexports.config = {\n  namespace: 'ionic-site-components',\n  plugins: [\n    sass()\n  ],\n  rollupPlugins: {\n    after: [\n      nodePolyfills()\n    ]\n  },\n  outputTargets: [\n    // {\n    //   type: 'dist',\n    //   dir: '_site/js/stencil',\n    // },\n    {\n      type: 'dist',\n      dir: 'dist/js/stencil',\n      copy: [\n        { \n          src: '../../node_modules/ionicons/dist/svg',\n          dest: '../svg'\n        },\n        {\n          src: '../../node_modules/emoji-datasource-twitter/emoji.json',\n          dest: '../emoji.json'\n        },\n        {\n          src: '../../node_modules/emoji-datasource-twitter/img/twitter/sheets-256/64.png',\n          dest: '../emoji-sheet-twitter-256-64.png'\n        }\n      ],\n    },\n  ],\n  srcDir: 'assets/stencil'\n};\n\nexports.devServer = {\n  root: 'www',\n  watchGlob: '**/**'\n};\n"
  },
  {
    "path": "tsconfig.json",
    "content": "{\n  \"compilerOptions\": {\n    \"allowSyntheticDefaultImports\": true,\n    \"allowUnreachableCode\": false,\n    \"declaration\": false,\n    \"experimentalDecorators\": true,\n    \"lib\": [\n      \"dom\",\n      \"es2015\"\n    ],\n    \"moduleResolution\": \"node\",\n    \"module\": \"esnext\",\n    \"target\": \"es2017\",\n    \"noUnusedLocals\": true,\n    \"noUnusedParameters\": true,\n    \"jsx\": \"react\",\n    \"jsxFactory\": \"h\",\n    \"resolveJsonModule\": true,\n  },\n  \"include\": [\n    \"assets/stencil\",\n    \"types/jsx.d.ts\"\n  ],\n  \"exclude\": [\n    \"node_modules\"\n  ]\n}\n"
  }
]